ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL0tjb25maWcgYi9kcml2ZXJzL3VzYi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMzI5ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9LY29uZmlnCkBAIC0wLDAgKzEsMTI3IEBACisjCisjIFVTQiBkZXZpY2UgY29uZmlndXJhdGlvbgorIworCittZW51ICJVU0Igc3VwcG9ydCIKKworIyBIb3N0LXNpZGUgVVNCIGRlcGVuZHMgb24gaGF2aW5nIGEgaG9zdCBjb250cm9sbGVyCisjIE5PVEU6ICBkdW1teV9oY2QgaXMgYWx3YXlzIGFuIG9wdGlvbiwgYnV0IGl0J3MgaWdub3JlZCBoZXJlIC4uLgorIyBOT1RFOiAgU0wtODExIG9wdGlvbiBzaG91bGQgYmUgYm9hcmQtc3BlY2lmaWMgLi4uCitjb25maWcgVVNCX0FSQ0hfSEFTX0hDRAorCWJvb2xlYW4KKwlkZWZhdWx0IHkgaWYgVVNCX0FSQ0hfSEFTX09IQ0kKKwlkZWZhdWx0IHkgaWYgQVJNCQkJCSMgU0wtODExCisJZGVmYXVsdCBQQ0kKKworIyBtYW55IG5vbi1QQ0kgU09DIGNoaXBzIGVtYmVkIE9IQ0kKK2NvbmZpZyBVU0JfQVJDSF9IQVNfT0hDSQorCWJvb2xlYW4KKwkjIEFSTToKKwlkZWZhdWx0IHkgaWYgU0ExMTExCisJZGVmYXVsdCB5IGlmIEFSQ0hfT01BUAorCWRlZmF1bHQgeSBpZiBBUkNIX0xIN0E0MDQKKwlkZWZhdWx0IHkgaWYgUFhBMjd4CisJIyBQUEM6CisJZGVmYXVsdCB5IGlmIFNUQjAzeHh4CisJZGVmYXVsdCB5IGlmIFBQQ19NUEM1Mnh4CisJIyBNSVBTOgorCWRlZmF1bHQgeSBpZiBTT0NfQVUxWDAwCisJIyBtb3JlOgorCWRlZmF1bHQgUENJCisKKyMgQVJNIFNBMTExMSBjaGlwcyBoYXZlIGEgbm9uLVBDSSBiYXNlZCAiT0hDSS1jb21wYXRpYmxlIiBVU0IgaG9zdCBpbnRlcmZhY2UuCitjb25maWcgVVNCCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIEhvc3Qtc2lkZSBVU0IiCisJZGVwZW5kcyBvbiBVU0JfQVJDSF9IQVNfSENECisJLS0taGVscC0tLQorCSAgVW5pdmVyc2FsIFNlcmlhbCBCdXMgKFVTQikgaXMgYSBzcGVjaWZpY2F0aW9uIGZvciBhIHNlcmlhbCBidXMKKwkgIHN1YnN5c3RlbSB3aGljaCBvZmZlcnMgaGlnaGVyIHNwZWVkcyBhbmQgbW9yZSBmZWF0dXJlcyB0aGFuIHRoZQorCSAgdHJhZGl0aW9uYWwgUEMgc2VyaWFsIHBvcnQuICBUaGUgYnVzIHN1cHBsaWVzIHBvd2VyIHRvIHBlcmlwaGVyYWxzCisJICBhbmQgYWxsb3dzIGZvciBob3Qgc3dhcHBpbmcuICBVcCB0byAxMjcgVVNCIHBlcmlwaGVyYWxzIGNhbiBiZQorCSAgY29ubmVjdGVkIHRvIGEgc2luZ2xlIFVTQiBob3N0IGluIGEgdHJlZSBzdHJ1Y3R1cmUuCisJICAKKwkgIFRoZSBVU0IgaG9zdCBpcyB0aGUgcm9vdCBvZiB0aGUgdHJlZSwgdGhlIHBlcmlwaGVyYWxzIGFyZSB0aGUKKwkgIGxlYXZlcyBhbmQgdGhlIGlubmVyIG5vZGVzIGFyZSBzcGVjaWFsIFVTQiBkZXZpY2VzIGNhbGxlZCBodWJzLgorCSAgTW9zdCBQQ3Mgbm93IGhhdmUgVVNCIGhvc3QgcG9ydHMsIHVzZWQgdG8gY29ubmVjdCBwZXJpcGhlcmFscworCSAgc3VjaCBhcyBzY2FubmVycywga2V5Ym9hcmRzLCBtaWNlLCBtb2RlbXMsIGNhbWVyYXMsIGRpc2tzLAorCSAgZmxhc2ggbWVtb3J5LCBuZXR3b3JrIGxpbmtzLCBhbmQgcHJpbnRlcnMgdG8gdGhlIFBDLgorCisJICBTYXkgWSBoZXJlIGlmIHlvdXIgY29tcHV0ZXIgaGFzIGEgaG9zdC1zaWRlIFVTQiBwb3J0IGFuZCB5b3Ugd2FudAorCSAgdG8gdXNlIFVTQiBkZXZpY2VzLiAgWW91IHRoZW4gbmVlZCB0byBzYXkgWSB0byBhdCBsZWFzdCBvbmUgb2YgdGhlCisJICBIb3N0IENvbnRyb2xsZXIgRHJpdmVyIChIQ0QpIG9wdGlvbnMgYmVsb3cuICBDaG9vc2UgYSBVU0IgMS4xCisJICBjb250cm9sbGVyLCBzdWNoIGFzICJVSENJIEhDRCBzdXBwb3J0IiBvciAiT0hDSSBIQ0Qgc3VwcG9ydCIsCisJICBhbmQgIkVIQ0kgSENEIChVU0IgMi4wKSBzdXBwb3J0IiBleGNlcHQgZm9yIG9sZGVyIHN5c3RlbXMgdGhhdAorCSAgZG8gbm90IGhhdmUgVVNCIDIuMCBzdXBwb3J0LiAgSXQgZG9lc24ndCBub3JtYWxseSBodXJ0IHRvIHNlbGVjdAorCSAgdGhlbSBhbGwgaWYgeW91IGFyZSBub3QgY2VydGFpbi4KKworCSAgSWYgeW91ciBzeXN0ZW0gaGFzIGEgZGV2aWNlLXNpZGUgVVNCIHBvcnQsIHVzZWQgaW4gdGhlIHBlcmlwaGVyYWwKKwkgIHNpZGUgb2YgdGhlIFVTQiBwcm90b2NvbCwgc2VlIHRoZSAiVVNCIEdhZGdldCIgZnJhbWV3b3JrIGluc3RlYWQuCisKKwkgIEFmdGVyIGNob29zaW5nIHlvdXIgSENELCB0aGVuIHNlbGVjdCBkcml2ZXJzIGZvciB0aGUgVVNCIHBlcmlwaGVyYWxzCisJICB5b3UnbGwgYmUgdXNpbmcuICBZb3UgbWF5IHdhbnQgdG8gY2hlY2sgb3V0IHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZAorCSAgaW4gPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvPiBhbmQgZXNwZWNpYWxseSB0aGUgbGlua3MgZ2l2ZW4gaW4KKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL3VzYi1oZWxwLnR4dD4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYmNvcmUuCisKK3NvdXJjZSAiZHJpdmVycy91c2IvY29yZS9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3VzYi9pbnB1dC9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvdXNiL2ltYWdlL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy91c2IvbWVkaWEvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3VzYi9uZXQvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3VzYi9tb24vS2NvbmZpZyIKKworY29tbWVudCAiVVNCIHBvcnQgZHJpdmVycyIKKwlkZXBlbmRzIG9uIFVTQgorCitjb25maWcgVVNCX1VTUzcyMAorCXRyaXN0YXRlICJVU1M3MjAgcGFycG9ydCBkcml2ZXIiCisJZGVwZW5kcyBvbiBVU0IgJiYgUEFSUE9SVAorCXNlbGVjdCBQQVJQT1JUX05PVF9QQworCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIGlzIGZvciBVU0IgcGFyYWxsZWwgcG9ydCBhZGFwdGVycyB0aGF0IHVzZSB0aGUgTHVjZW50CisJICBUZWNobm9sb2dpZXMgVVNTLTcyMCBjaGlwLiBUaGVzZSBjYWJsZXMgYXJlIHBsdWdnZWQgaW50byB5b3VyIFVTQgorCSAgcG9ydCBhbmQgcHJvdmlkZSBVU0IgY29tcGF0aWJpbGl0eSB0byBwZXJpcGhlcmFscyBkZXNpZ25lZCB3aXRoCisJICBwYXJhbGxlbCBwb3J0IGludGVyZmFjZXMuCisKKwkgIFRoZSBjaGlwIGhhcyB0d28gbW9kZXM6IGF1dG9tYXRpYyBtb2RlIGFuZCBtYW51YWwgbW9kZS4gSW4gYXV0b21hdGljCisJICBtb2RlLCBpdCBsb29rcyB0byB0aGUgY29tcHV0ZXIgbGlrZSBhIHN0YW5kYXJkIFVTQiBwcmludGVyLiBPbmx5CisJICBwcmludGVycyBtYXkgYmUgY29ubmVjdGVkIHRvIHRoZSBVU1MtNzIwIGluIHRoaXMgbW9kZS4gVGhlIGdlbmVyaWMKKwkgIFVTQiBwcmludGVyIGRyaXZlciAoIlVTQiBQcmludGVyIHN1cHBvcnQiLCBhYm92ZSkgbWF5IGJlIHVzZWQgaW4KKwkgIHRoYXQgbW9kZSwgYW5kIHlvdSBjYW4gc2F5IE4gaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIGNoaXAgb25seQorCSAgaW4gdGhpcyBtb2RlLgorCisJICBNYW51YWwgbW9kZSBpcyBub3QgbGltaXRlZCB0byBwcmludGVycywgYW55IHBhcmFsbGVsIHBvcnQKKwkgIGRldmljZSBzaG91bGQgd29yay4gVGhpcyBkcml2ZXIgdXRpbGl6ZXMgbWFudWFsIG1vZGUuCisJICBOb3RlIGhvd2V2ZXIgdGhhdCBzb21lIG9wZXJhdGlvbnMgYXJlIHRocmVlIG9yZGVycyBvZiBtYWduaXR1ZGUKKwkgIHNsb3dlciB0aGFuIG9uIGEgUENJL0lTQSBQYXJhbGxlbCBQb3J0LCBzbyB0aW1pbmcgY3JpdGljYWwKKwkgIGFwcGxpY2F0aW9ucyBtaWdodCBub3Qgd29yay4KKworCSAgU2F5IFkgaGVyZSBpZiB5b3Ugb3duIGFuIFVTUy03MjAgVVNCLT5QYXJwb3J0IGNhYmxlIGFuZCBpbnRlbmQgdG8KKwkgIGNvbm5lY3QgYW55dGhpbmcgb3RoZXIgdGhhbiBhIHByaW50ZXIgdG8gaXQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzczcyMC4KKworc291cmNlICJkcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3VzYi9taXNjL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy91c2IvYXRtL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWciCisKK2VuZG1lbnUKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjFkNDQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvTWFrZWZpbGUKQEAgLTAsMCArMSw3NCBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGtlcm5lbCBVU0IgZGV2aWNlIGRyaXZlcnMuCisjCisKKyMgT2JqZWN0IGZpbGVzIGluIHN1YmRpcmVjdG9yaWVzCisKK29iai0kKENPTkZJR19VU0IpCQkrPSBjb3JlLworCitvYmotJChDT05GSUdfVVNCX01PTikJCSs9IG1vbi8KKworb2JqLSQoQ09ORklHX1VTQl9FSENJX0hDRCkJKz0gaG9zdC8KK29iai0kKENPTkZJR19VU0JfT0hDSV9IQ0QpCSs9IGhvc3QvCitvYmotJChDT05GSUdfVVNCX1VIQ0lfSENEKQkrPSBob3N0Lworb2JqLSQoQ09ORklHX1VTQl9TTDgxMV9IQ0QpCSs9IGhvc3QvCitvYmotJChDT05GSUdfRVRSQVhfVVNCX0hPU1QpCSs9IGhvc3QvCisKK29iai0kKENPTkZJR19VU0JfQUNNKQkJKz0gY2xhc3MvCitvYmotJChDT05GSUdfVVNCX0FVRElPKQkJKz0gY2xhc3MvCitvYmotJChDT05GSUdfVVNCX0JMVUVUT09USF9UVFkpCSs9IGNsYXNzLworb2JqLSQoQ09ORklHX1VTQl9NSURJKQkJKz0gY2xhc3MvCitvYmotJChDT05GSUdfVVNCX1BSSU5URVIpCSs9IGNsYXNzLworCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0UpCSs9IHN0b3JhZ2UvCisKK29iai0kKENPTkZJR19VU0JfQUlQVEVLKQkrPSBpbnB1dC8KK29iai0kKENPTkZJR19VU0JfQVRJX1JFTU9URSkJKz0gaW5wdXQvCitvYmotJChDT05GSUdfVVNCX0hJRCkJCSs9IGlucHV0Lworb2JqLSQoQ09ORklHX1VTQl9LQkQpCQkrPSBpbnB1dC8KK29iai0kKENPTkZJR19VU0JfS0JUQUIpCQkrPSBpbnB1dC8KK29iai0kKENPTkZJR19VU0JfTU9VU0UpCQkrPSBpbnB1dC8KK29iai0kKENPTkZJR19VU0JfTVRPVUNIKQkrPSBpbnB1dC8KK29iai0kKENPTkZJR19VU0JfUE9XRVJNQVRFKQkrPSBpbnB1dC8KK29iai0kKENPTkZJR19VU0JfV0FDT00pCQkrPSBpbnB1dC8KK29iai0kKENPTkZJR19VU0JfWFBBRCkJCSs9IGlucHV0LworCitvYmotJChDT05GSUdfVVNCX0RBQlVTQikJKz0gbWVkaWEvCitvYmotJChDT05GSUdfVVNCX0RTQlIpCQkrPSBtZWRpYS8KK29iai0kKENPTkZJR19VU0JfSUJNQ0FNKQkrPSBtZWRpYS8KK29iai0kKENPTkZJR19VU0JfS09OSUNBV0MpCSs9IG1lZGlhLworb2JqLSQoQ09ORklHX1VTQl9PVjUxMSkJCSs9IG1lZGlhLworb2JqLSQoQ09ORklHX1VTQl9QV0MpCQkrPSBtZWRpYS8KK29iai0kKENPTkZJR19VU0JfU0U0MDEpCQkrPSBtZWRpYS8KK29iai0kKENPTkZJR19VU0JfU045QzEwMikJKz0gbWVkaWEvCitvYmotJChDT05GSUdfVVNCX1NUVjY4MCkJKz0gbWVkaWEvCitvYmotJChDT05GSUdfVVNCX1ZJQ0FNKQkJKz0gbWVkaWEvCitvYmotJChDT05GSUdfVVNCX1c5OTY4Q0YpCSs9IG1lZGlhLworCitvYmotJChDT05GSUdfVVNCX0NBVEMpCQkrPSBuZXQvCitvYmotJChDT05GSUdfVVNCX0tBV0VUSCkJKz0gbmV0Lworb2JqLSQoQ09ORklHX1VTQl9QRUdBU1VTKQkrPSBuZXQvCitvYmotJChDT05GSUdfVVNCX1JUTDgxNTApCSs9IG5ldC8KK29iai0kKENPTkZJR19VU0JfVVNCTkVUKQkrPSBuZXQvCitvYmotJChDT05GSUdfVVNCX1pEMTIwMSkJKz0gbmV0LworCitvYmotJChDT05GSUdfVVNCX01EQzgwMCkJKz0gaW1hZ2UvCitvYmotJChDT05GSUdfVVNCX01JQ1JPVEVLKQkrPSBpbWFnZS8KKworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUwpCSs9IHNlcmlhbC8KKworb2JqLSQoQ09ORklHX1VTQl9BVUVSU1dBTEQpCSs9IG1pc2MvCitvYmotJChDT05GSUdfVVNCX0NZVEhFUk0pCSs9IG1pc2MvCitvYmotJChDT05GSUdfVVNCX0VNSTI2KQkJKz0gbWlzYy8KK29iai0kKENPTkZJR19VU0JfRU1JNjIpCQkrPSBtaXNjLworb2JqLSQoQ09ORklHX1VTQl9JRE1PVVNFKQkrPSBtaXNjLworb2JqLSQoQ09ORklHX1VTQl9MQ0QpCQkrPSBtaXNjLworb2JqLSQoQ09ORklHX1VTQl9MRUQpCQkrPSBtaXNjLworb2JqLSQoQ09ORklHX1VTQl9MRUdPVE9XRVIpCSs9IG1pc2MvCitvYmotJChDT05GSUdfVVNCX1JJTzUwMCkJKz0gbWlzYy8KK29iai0kKENPTkZJR19VU0JfVEVTVCkJCSs9IG1pc2MvCitvYmotJChDT05GSUdfVVNCX1VTUzcyMCkJKz0gbWlzYy8KK29iai0kKENPTkZJR19VU0JfUEhJREdFVFNFUlZPKQkrPSBtaXNjLworCitvYmotJChDT05GSUdfVVNCX0FUTSkJCSs9IGF0bS8KK29iai0kKENPTkZJR19VU0JfU1BFRURUT1VDSCkJKz0gYXRtLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvUkVBRE1FIGIvZHJpdmVycy91c2IvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjODQzNDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9SRUFETUUKQEAgLTAsMCArMSw1NCBAQAorVG8gdW5kZXJzdGFuZCBhbGwgdGhlIExpbnV4LVVTQiBmcmFtZXdvcmssIHlvdSdsbCB1c2UgdGhlc2UgcmVzb3VyY2VzOgorCisgICAgKiBUaGlzIHNvdXJjZSBjb2RlLiAgVGhpcyBpcyBuZWNlc3NhcmlseSBhbiBldm9sdmluZyB3b3JrLCBhbmQKKyAgICAgIGluY2x1ZGVzIGtlcm5lbGRvYyB0aGF0IHNob3VsZCBoZWxwIHlvdSBnZXQgYSBjdXJyZW50IG92ZXJ2aWV3LgorICAgICAgKCJtYWtlIHBkZmRvY3MiLCBhbmQgdGhlbiBsb29rIGF0ICJ1c2IucGRmIiBmb3IgaG9zdCBzaWRlIGFuZAorICAgICAgImdhZGdldC5wZGYiIGZvciBwZXJpcGhlcmFsIHNpZGUuKSAgQWxzbywgRG9jdW1lbnRhdGlvbi91c2IgaGFzCisgICAgICBtb3JlIGluZm9ybWF0aW9uLgorCisgICAgKiBUaGUgVVNCIDIuMCBzcGVjaWZpY2F0aW9uIChmcm9tIHd3dy51c2Iub3JnKSwgd2l0aCBzdXBwbGVtZW50cworICAgICAgc3VjaCBhcyB0aG9zZSBmb3IgVVNCIE9URyBhbmQgdGhlIHZhcmlvdXMgZGV2aWNlIGNsYXNzZXMuCisgICAgICBUaGUgVVNCIHNwZWNpZmljYXRpb24gaGFzIGEgZ29vZCBvdmVydmlldyBjaGFwdGVyLCBhbmQgVVNCCisgICAgICBwZXJpcGhlcmFscyBjb25mb3JtIHRvIHRoZSB3aWRlbHkga25vd24gIkNoYXB0ZXIgOSIuCisKKyAgICAqIENoaXAgc3BlY2lmaWNhdGlvbnMgZm9yIFVTQiBjb250cm9sbGVycy4gIEV4YW1wbGVzIGluY2x1ZGUKKyAgICAgIGhvc3QgY29udHJvbGxlcnMgKG9uIFBDcywgc2VydmVycywgYW5kIG1vcmUpOyBwZXJpcGhlcmFsCisgICAgICBjb250cm9sbGVycyAoaW4gZGV2aWNlcyB3aXRoIExpbnV4IGZpcm13YXJlLCBsaWtlIHByaW50ZXJzIG9yCisgICAgICBjZWxsIHBob25lcyk7IGFuZCBoYXJkLXdpcmVkIHBlcmlwaGVyYWxzIGxpa2UgRXRoZXJuZXQgYWRhcHRlcnMuCisKKyAgICAqIFNwZWNpZmljYXRpb25zIGZvciBvdGhlciBwcm90b2NvbHMgaW1wbGVtZW50ZWQgYnkgVVNCIHBlcmlwaGVyYWwKKyAgICAgIGZ1bmN0aW9ucy4gIFNvbWUgYXJlIHZlbmRvci1zcGVjaWZpYzsgb3RoZXJzIGFyZSB2ZW5kb3ItbmV1dHJhbAorICAgICAgYnV0IGp1c3Qgc3RhbmRhcmRpemVkIG91dHNpZGUgb2YgdGhlIHd3dy51c2Iub3JnIHRlYW0uCisKK0hlcmUgaXMgYSBsaXN0IG9mIHdoYXQgZWFjaCBzdWJkaXJlY3RvcnkgaGVyZSBpcywgYW5kIHdoYXQgaXMgY29udGFpbmVkIGluCit0aGVtLgorCitjb3JlLwkJLSBUaGlzIGlzIGZvciB0aGUgY29yZSBVU0IgaG9zdCBjb2RlLCBpbmNsdWRpbmcgdGhlCisJCSAgdXNiZnMgZmlsZXMgYW5kIHRoZSBodWIgY2xhc3MgZHJpdmVyICgia2h1YmQiKS4KKworaG9zdC8JCS0gVGhpcyBpcyBmb3IgVVNCIGhvc3QgY29udHJvbGxlciBkcml2ZXJzLiAgVGhpcworCQkgIGluY2x1ZGVzIFVIQ0ksIE9IQ0ksIEVIQ0ksIGFuZCBvdGhlcnMgdGhhdCBtaWdodAorCQkgIGJlIHVzZWQgd2l0aCBtb3JlIHNwZWNpYWxpemVkICJlbWJlZGRlZCIgc3lzdGVtcy4KKworZ2FkZ2V0LwkJLSBUaGlzIGlzIGZvciBVU0IgcGVyaXBoZXJhbCBjb250cm9sbGVyIGRyaXZlcnMgYW5kCisJCSAgdGhlIHZhcmlvdXMgZ2FkZ2V0IGRyaXZlcnMgd2hpY2ggdGFsayB0byB0aGVtLgorCisKK0luZGl2aWR1YWwgVVNCIGRyaXZlciBkaXJlY3Rvcmllcy4gIEEgbmV3IGRyaXZlciBzaG91bGQgYmUgYWRkZWQgdG8gdGhlCitmaXJzdCBzdWJkaXJlY3RvcnkgaW4gdGhlIGxpc3QgYmVsb3cgdGhhdCBpdCBmaXRzIGludG8uCisKK2ltYWdlLwkJLSBUaGlzIGlzIGZvciBzdGlsbCBpbWFnZSBkcml2ZXJzLCBsaWtlIHNjYW5uZXJzIG9yCisJCSAgZGlnaXRhbCBjYW1lcmFzLgoraW5wdXQvCQktIFRoaXMgaXMgZm9yIGFueSBkcml2ZXIgdGhhdCB1c2VzIHRoZSBpbnB1dCBzdWJzeXN0ZW0sCisJCSAgbGlrZSBrZXlib2FyZCwgbWljZSwgdG91Y2hzY3JlZW5zLCB0YWJsZXRzLCBldGMuCittZWRpYS8JCS0gVGhpcyBpcyBmb3IgbXVsdGltZWRpYSBkcml2ZXJzLCBsaWtlIHZpZGVvIGNhbWVyYXMsCisJCSAgcmFkaW9zLCBhbmQgYW55IG90aGVyIGRyaXZlcnMgdGhhdCB0YWxrIHRvIHRoZSB2NGwKKwkJICBzdWJzeXN0ZW0uCituZXQvCQktIFRoaXMgaXMgZm9yIG5ldHdvcmsgZHJpdmVycy4KK3NlcmlhbC8JCS0gVGhpcyBpcyBmb3IgVVNCIHRvIHNlcmlhbCBkcml2ZXJzLgorc3RvcmFnZS8JLSBUaGlzIGlzIGZvciBVU0IgbWFzcy1zdG9yYWdlIGRyaXZlcnMuCitjbGFzcy8JCS0gVGhpcyBpcyBmb3IgYWxsIFVTQiBkZXZpY2UgZHJpdmVycyB0aGF0IGRvIG5vdCBmaXQKKwkJICBpbnRvIGFueSBvZiB0aGUgYWJvdmUgY2F0ZWdvcmllcywgYW5kIHdvcmsgZm9yIGEgcmFuZ2UKKwkJICBvZiBVU0IgQ2xhc3Mgc3BlY2lmaWVkIGRldmljZXMuIAorbWlzYy8JCS0gVGhpcyBpcyBmb3IgYWxsIFVTQiBkZXZpY2UgZHJpdmVycyB0aGF0IGRvIG5vdCBmaXQKKwkJICBpbnRvIGFueSBvZiB0aGUgYWJvdmUgY2F0ZWdvcmllcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnIGIvZHJpdmVycy91c2IvYXRtL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ5ZjUzNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnCkBAIC0wLDAgKzEsMzAgQEAKKyMKKyMgVVNCIEFUTSBkcml2ZXIgY29uZmlndXJhdGlvbgorIworY29tbWVudCAiVVNCIEFUTS9EU0wgZHJpdmVycyIKKwlkZXBlbmRzIG9uIFVTQgorCitjb25maWcgVVNCX0FUTQorCXRyaXN0YXRlICJHZW5lcmljIFVTQiBBVE0vRFNMIGNvcmUgSS9PIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgQVRNCisJc2VsZWN0IENSQzMyCisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhpcyBwcm92aWRlcyBhIGxpYnJhcnkgd2hpY2ggaXMgdXNlZCBmb3IgcGFja2V0IEkvTyBieSBVU0IgRFNMCisJICBtb2RlbXMsIHN1Y2ggYXMgdGhlIFNwZWVkVG91Y2ggZHJpdmVyIGJlbG93LiAKKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNiX2F0bS4KKworY29uZmlnIFVTQl9TUEVFRFRPVUNICisJdHJpc3RhdGUgIkFsY2F0ZWwgU3BlZWR0b3VjaCBVU0Igc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBBVE0KKwlzZWxlY3QgVVNCX0FUTQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gQWxjYXRlbCBTcGVlZFRvdWNoIFVTQiBvciBTcGVlZFRvdWNoIDMzMAorCSAgbW9kZW0uICBJbiBvcmRlciB0byB1c2UgeW91ciBtb2RlbSB5b3Ugd2lsbCBuZWVkIHRvIGluc3RhbGwgdGhlIAorCSAgdHdvIHBhcnRzIG9mIHRoZSBmaXJtd2FyZSwgZXh0cmFjdGVkIGJ5IHRoZSB1c2VyIHNwYWNlIHRvb2xzOyBzZWUKKwkgIDxodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmcvU3BlZWRUb3VjaC8+IGZvciBkZXRhaWxzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzcGVlZHRjaC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2F0bS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjEzYjhiOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2F0bS9NYWtlZmlsZQpAQCAtMCwwICsxLDcgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSByZXN0IG9mIHRoZSBVU0IgZHJpdmVycworIyAodGhlIG9uZXMgdGhhdCBkb24ndCBmaXQgaW50byBhbnkgb3RoZXIgY2F0ZWdvcmllcykKKyMKKworb2JqLSQoQ09ORklHX1VTQl9BVE0pCQkrPSB1c2JfYXRtLm8KK29iai0kKENPTkZJR19VU0JfU1BFRURUT1VDSCkJKz0gc3BlZWR0Y2gubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3NwZWVkdGNoLmMgYi9kcml2ZXJzL3VzYi9hdG0vc3BlZWR0Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzNmOTIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvYXRtL3NwZWVkdGNoLmMKQEAgLTAsMCArMSw4NDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBzcGVlZHRjaC5jICAtICBBbGNhdGVsIFNwZWVkVG91Y2ggVVNCIHhEU0wgbW9kZW0gZHJpdmVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSwgQWxjYXRlbAorICogIENvcHlyaWdodCAoQykgMjAwMywgRHVuY2FuIFNhbmRzCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LCBEYXZpZCBXb29kaG91c2UKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorICogIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bWRldi5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisKKyNpbmNsdWRlICJ1c2JfYXRtLmgiCisKKyNpZiBkZWZpbmVkKENPTkZJR19GV19MT0FERVIpIHx8IGRlZmluZWQoQ09ORklHX0ZXX0xPQURFUl9NT0RVTEUpCisjCWRlZmluZSBVU0VfRldfTE9BREVSCisjZW5kaWYKKworI2RlZmluZSBEUklWRVJfQVVUSE9SCSJKb2hhbiBWZXJyZXB0LCBEdW5jYW4gU2FuZHMgPGR1bmNhbi5zYW5kc0BmcmVlLmZyPiIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjEuOCIKKyNkZWZpbmUgRFJJVkVSX0RFU0MJIkFsY2F0ZWwgU3BlZWRUb3VjaCBVU0IgZHJpdmVyIHZlcnNpb24gIiBEUklWRVJfVkVSU0lPTgorCitzdGF0aWMgY29uc3QgY2hhciBzcGVlZHRjaF9kcml2ZXJfbmFtZVtdID0gInNwZWVkdGNoIjsKKworI2RlZmluZSBTUEVFRFRPVUNIX1ZFTkRPUklECQkweDA2YjkKKyNkZWZpbmUgU1BFRURUT1VDSF9QUk9EVUNUSUQJCTB4NDA2MQorCisvKiBUaW1lb3V0IGluIGppZmZpZXMgKi8KKyNkZWZpbmUgQ1RSTF9USU1FT1VUIDIwMDAKKyNkZWZpbmUgREFUQV9USU1FT1VUIDIwMDAKKworI2RlZmluZSBPRkZTRVRfNyAgMAkJLyogc2l6ZSAxICovCisjZGVmaW5lIE9GRlNFVF9iICAxCQkvKiBzaXplIDggKi8KKyNkZWZpbmUgT0ZGU0VUX2QgIDkJCS8qIHNpemUgNCAqLworI2RlZmluZSBPRkZTRVRfZSAxMwkJLyogc2l6ZSAxICovCisjZGVmaW5lIE9GRlNFVF9mIDE0CQkvKiBzaXplIDEgKi8KKyNkZWZpbmUgVE9UQUwgICAgMTUKKworI2RlZmluZSBTSVpFXzcgMQorI2RlZmluZSBTSVpFX2IgOAorI2RlZmluZSBTSVpFX2QgNAorI2RlZmluZSBTSVpFX2UgMQorI2RlZmluZSBTSVpFX2YgMQorCitzdGF0aWMgaW50IGRsXzUxMl9maXJzdCA9IDA7CitzdGF0aWMgaW50IHN3X2J1ZmZlcmluZyA9IDA7CisKK21vZHVsZV9wYXJhbShkbF81MTJfZmlyc3QsIGJvb2wsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhkbF81MTJfZmlyc3QsICJSZWFkIDUxMiBieXRlcyBiZWZvcmUgc2VuZGluZyBmaXJtd2FyZSIpOworCittb2R1bGVfcGFyYW0oc3dfYnVmZmVyaW5nLCB1aW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc3dfYnVmZmVyaW5nLCAiRW5hYmxlIHNvZnR3YXJlIGJ1ZmZlcmluZyIpOworCisjZGVmaW5lIFVEU0xfSU9DVExfTElORV9VUAkJMQorI2RlZmluZSBVRFNMX0lPQ1RMX0xJTkVfRE9XTgkJMgorCisjZGVmaW5lIFNQRUVEVENIX0VORFBPSU5UX0lOVAkJMHg4MQorI2RlZmluZSBTUEVFRFRDSF9FTkRQT0lOVF9EQVRBCQkweDA3CisjZGVmaW5lIFNQRUVEVENIX0VORFBPSU5UX0ZJUk1XQVJFCTB4MDUKKworI2RlZmluZSBoZXgyaW50KGMpICggKGMgPj0gJzAnKSAmJiAoYyA8PSAnOScpID8gKGMgLSAnMCcpIDogKChjICYgMHhmKSArIDkpICkKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHNwZWVkdGNoX3VzYl9pZHNbXSA9IHsKKwl7VVNCX0RFVklDRShTUEVFRFRPVUNIX1ZFTkRPUklELCBTUEVFRFRPVUNIX1BST0RVQ1RJRCl9LAorCXt9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgc3BlZWR0Y2hfdXNiX2lkcyk7CisKK3N0cnVjdCBzcGVlZHRjaF9pbnN0YW5jZV9kYXRhIHsKKwlzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhIHU7CisKKwkvKiBTdGF0dXMgKi8KKwlzdHJ1Y3QgdXJiICppbnRfdXJiOworCXVuc2lnbmVkIGNoYXIgaW50X2RhdGFbMTZdOworCXN0cnVjdCB3b3JrX3N0cnVjdCBwb2xsX3dvcms7CisJc3RydWN0IHRpbWVyX2xpc3QgcG9sbF90aW1lcjsKK307CisvKiBVU0IgKi8KKworc3RhdGljIGludCBzcGVlZHRjaF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIHZvaWQgc3BlZWR0Y2hfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworc3RhdGljIGludCBzcGVlZHRjaF91c2JfaW9jdGwoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHVuc2lnbmVkIGludCBjb2RlLAorCQkJICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKK3N0YXRpYyB2b2lkIHNwZWVkdGNoX2hhbmRsZV9pbnQoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBzcGVlZHRjaF9wb2xsX3N0YXR1cyhzdHJ1Y3Qgc3BlZWR0Y2hfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc3BlZWR0Y2hfdXNiX2RyaXZlciA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCT0gc3BlZWR0Y2hfZHJpdmVyX25hbWUsCisJLnByb2JlCQk9IHNwZWVkdGNoX3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IHNwZWVkdGNoX3VzYl9kaXNjb25uZWN0LAorCS5pb2N0bAkJPSBzcGVlZHRjaF91c2JfaW9jdGwsCisJLmlkX3RhYmxlCT0gc3BlZWR0Y2hfdXNiX2lkcywKK307CisKKy8qKioqKioqKioqKioqKioKKyoqICBmaXJtd2FyZSAgKioKKyoqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgc3BlZWR0Y2hfZ290X2Zpcm13YXJlKHN0cnVjdCBzcGVlZHRjaF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSwKKwkJCQkgIGludCBnb3RfaXQpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKworCWRvd24oJmluc3RhbmNlLT51LnNlcmlhbGl6ZSk7CS8qIHZzIHNlbGYsIHNwZWVkdGNoX2Zpcm13YXJlX3N0YXJ0ICovCisJaWYgKGluc3RhbmNlLT51LnN0YXR1cyA9PSBVRFNMX0xPQURFRF9GSVJNV0FSRSkKKwkJZ290byBvdXQ7CisJaWYgKCFnb3RfaXQpIHsKKwkJaW5zdGFuY2UtPnUuc3RhdHVzID0gVURTTF9OT19GSVJNV0FSRTsKKwkJZ290byBvdXQ7CisJfQorCWlmICgoZXJyID0gdXNiX3NldF9pbnRlcmZhY2UoaW5zdGFuY2UtPnUudXNiX2RldiwgMSwgMSkpIDwgMCkgeworCQlkYmcoInNwZWVkdGNoX2dvdF9maXJtd2FyZTogdXNiX3NldF9pbnRlcmZhY2UgcmV0dXJuZWQgJWQhIiwgZXJyKTsKKwkJaW5zdGFuY2UtPnUuc3RhdHVzID0gVURTTF9OT19GSVJNV0FSRTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogU2V0IHVwIGludGVycnVwdCBlbmRwb2ludCAqLworCWludGYgPSB1c2JfaWZudW1fdG9faWYoaW5zdGFuY2UtPnUudXNiX2RldiwgMCk7CisJaWYgKGludGYgJiYgIXVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKCZzcGVlZHRjaF91c2JfZHJpdmVyLCBpbnRmLCBOVUxMKSkgeworCisJCWluc3RhbmNlLT5pbnRfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGluc3RhbmNlLT5pbnRfdXJiKSB7CisKKwkJCXVzYl9maWxsX2ludF91cmIoaW5zdGFuY2UtPmludF91cmIsIGluc3RhbmNlLT51LnVzYl9kZXYsCisJCQkJCSB1c2JfcmN2aW50cGlwZShpbnN0YW5jZS0+dS51c2JfZGV2LCBTUEVFRFRDSF9FTkRQT0lOVF9JTlQpLAorCQkJCQkgaW5zdGFuY2UtPmludF9kYXRhLAorCQkJCQkgc2l6ZW9mKGluc3RhbmNlLT5pbnRfZGF0YSksCisJCQkJCSBzcGVlZHRjaF9oYW5kbGVfaW50LCBpbnN0YW5jZSwgNTApOworCQkJZXJyID0gdXNiX3N1Ym1pdF91cmIoaW5zdGFuY2UtPmludF91cmIsIEdGUF9LRVJORUwpOworCQkJaWYgKGVycikgeworCQkJCS8qIERvZXNuJ3QgbWF0dGVyOyB3ZSdsbCBwb2xsIGFueXdheSAqLworCQkJCWRiZygic3BlZWR0Y2hfZ290X2Zpcm13YXJlOiBTdWJtaXNzaW9uIG9mIGludGVycnVwdCBVUkIgZmFpbGVkICVkIiwgZXJyKTsKKwkJCQl1c2JfZnJlZV91cmIoaW5zdGFuY2UtPmludF91cmIpOworCQkJCWluc3RhbmNlLT5pbnRfdXJiID0gTlVMTDsKKwkJCQl1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlKCZzcGVlZHRjaF91c2JfZHJpdmVyLCBpbnRmKTsKKwkJCX0KKwkJfQorCX0KKwkvKiBTdGFydCBzdGF0dXMgcG9sbGluZyAqLworCW1vZF90aW1lcigmaW5zdGFuY2UtPnBvbGxfdGltZXIsIGppZmZpZXMgKyAoMSAqIEhaKSk7CisKKwlpbnN0YW5jZS0+dS5zdGF0dXMgPSBVRFNMX0xPQURFRF9GSVJNV0FSRTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZpbnN0YW5jZS0+dS5yZWNlaXZlX3Rhc2tsZXQpOworIG91dDoKKwl1cCgmaW5zdGFuY2UtPnUuc2VyaWFsaXplKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluc3RhbmNlLT51LmZpcm13YXJlX3dhaXRlcnMpOworfQorCitzdGF0aWMgaW50IHNwZWVkdGNoX3NldF9zd2J1ZmYoc3RydWN0IHNwZWVkdGNoX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlLAorCQkJICAgICAgIGludCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW5zdGFuY2UtPnUudXNiX2RldjsKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkgICAgICAweDMyLCAweDQwLCBzdGF0ZSA/IDB4MDEgOiAweDAwLAorCQkJICAgICAgMHgwMCwgTlVMTCwgMCwgMTAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoIldhcm5pbmc6ICVzYWJsaW5nIFNXIGJ1ZmZlcmluZzogdXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLAorCQkgICAgIHN0YXRlID8gIkVuIiA6ICJEaXMiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRiZygic3BlZWR0Y2hfc2V0X3N3YnVmZjogJXNibGVkIFNXIGJ1ZmZlcmluZyIsIHN0YXRlID8gIkVuIiA6ICJEaXMiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3BlZWR0Y2hfdGVzdF9zZXF1ZW5jZShzdHJ1Y3Qgc3BlZWR0Y2hfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGluc3RhbmNlLT51LnVzYl9kZXY7CisJdW5zaWduZWQgY2hhciBidWZbMTBdOworCWludCByZXQ7CisKKwkvKiBVUkIgMTQ3ICovCisJYnVmWzBdID0gMHgxYzsKKwlidWZbMV0gPSAweDUwOworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJICAgICAgMHgwMSwgMHg0MCwgMHgwYiwgMHgwMCwgYnVmLCAyLCAxMDApOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyBmYWlsZWQgb24gVVJCMTQ3OiAlZFxuIiwgX19mdW5jX18sIHJldCk7CisKKwkvKiBVUkIgMTQ4ICovCisJYnVmWzBdID0gMHgzMjsKKwlidWZbMV0gPSAweDAwOworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJICAgICAgMHgwMSwgMHg0MCwgMHgwMiwgMHgwMCwgYnVmLCAyLCAxMDApOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyBmYWlsZWQgb24gVVJCMTQ4OiAlZFxuIiwgX19mdW5jX18sIHJldCk7CisKKwkvKiBVUkIgMTQ5ICovCisJYnVmWzBdID0gMHgwMTsKKwlidWZbMV0gPSAweDAwOworCWJ1ZlsyXSA9IDB4MDE7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkgICAgICAweDAxLCAweDQwLCAweDAzLCAweDAwLCBidWYsIDMsIDEwMCk7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzIGZhaWxlZCBvbiBVUkIxNDk6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKworCS8qIFVSQiAxNTAgKi8KKwlidWZbMF0gPSAweDAxOworCWJ1ZlsxXSA9IDB4MDA7CisJYnVmWzJdID0gMHgwMTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCSAgICAgIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIGJ1ZiwgMywgMTAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgZmFpbGVkIG9uIFVSQjE1MDogJWRcbiIsIF9fZnVuY19fLCByZXQpOworfQorCitzdGF0aWMgaW50IHNwZWVkdGNoX3N0YXJ0X3N5bmNocm8oc3RydWN0IHNwZWVkdGNoX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnN0YW5jZS0+dS51c2JfZGV2OworCXVuc2lnbmVkIGNoYXIgYnVmWzJdOworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwKKwkJCSAgICAgIDB4MTIsIDB4YzAsIDB4MDQsIDB4MDAsCisJCQkgICAgICBidWYsIHNpemVvZihidWYpLCBDVFJMX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNwZWVkVG91Y2g6IEZhaWxlZCB0byBzdGFydCBBRFNMIHN5bmNocm9uaXNhdGlvbjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZGJnKCJzcGVlZHRjaF9zdGFydF9zeW5jaHJvOiBtb2RlbSBwcm9kZGVkLiAlZCBCeXRlcyByZXR1cm5lZDogJTAyeCAlMDJ4IiwgcmV0LCBidWZbMF0sIGJ1ZlsxXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNwZWVkdGNoX2hhbmRsZV9pbnQoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgc3BlZWR0Y2hfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UgPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgaW50IGNvdW50ID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCWludCByZXQ7CisKKwkvKiBUaGUgbWFnaWMgaW50ZXJydXB0IGZvciAidXAgc3RhdGUiICovCisJY29uc3Qgc3RhdGljIHVuc2lnbmVkIGNoYXIgdXBfaW50WzZdICAgPSB7IDB4YTEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKwkvKiBUaGUgbWFnaWMgaW50ZXJydXB0IGZvciAiZG93biBzdGF0ZSIgKi8KKwljb25zdCBzdGF0aWMgdW5zaWduZWQgY2hhciBkb3duX2ludFs2XSA9IHsgMHhhMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQ7IGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGNvdW50IDwgNikgeworCQlkYmcoIiVzIC0gaW50IHBhY2tldCB0b28gc2hvcnQiLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoIW1lbWNtcCh1cF9pbnQsIGluc3RhbmNlLT5pbnRfZGF0YSwgNikpIHsKKwkJZGVsX3RpbWVyKCZpbnN0YW5jZS0+cG9sbF90aW1lcik7CisJCXByaW50ayhLRVJOX05PVElDRSAiRFNMIGxpbmUgZ29lcyB1cFxuIik7CisJfSBlbHNlIGlmICghbWVtY21wKGRvd25faW50LCBpbnN0YW5jZS0+aW50X2RhdGEsIDYpKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAiRFNMIGxpbmUgZ29lcyBkb3duXG4iKTsKKwl9IGVsc2UgeworCQlpbnQgaTsKKworCQlwcmludGsoS0VSTl9ERUJVRyAiVW5rbm93biBpbnRlcnJ1cHQgcGFja2V0IG9mICVkIGJ5dGVzOiIsIGNvdW50KTsKKwkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisJCQlwcmludGsoIiAlMDJ4IiwgaW5zdGFuY2UtPmludF9kYXRhW2ldKTsKKwkJcHJpbnRrKCJcbiIpOworCX0KKwlzY2hlZHVsZV93b3JrKCZpbnN0YW5jZS0+cG9sbF93b3JrKTsKKworIGV4aXQ6CisJcm1iKCk7CisJaWYgKCFpbnN0YW5jZS0+aW50X3VyYikKKwkJcmV0dXJuOworCisJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0KQorCQllcnIoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwgX19mdW5jX18sIHJldCk7Cit9CisKK3N0YXRpYyBpbnQgc3BlZWR0Y2hfZ2V0X3N0YXR1cyhzdHJ1Y3Qgc3BlZWR0Y2hfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UsCisJCQkgICAgICAgdW5zaWduZWQgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnN0YW5jZS0+dS51c2JfZGV2OworCWludCByZXQ7CisKKwltZW1zZXQoYnVmLCAwLCBUT1RBTCk7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwKKwkJCSAgICAgIDB4MTIsIDB4YzAsIDB4MDcsIDB4MDAsIGJ1ZiArIE9GRlNFVF83LCBTSVpFXzcsCisJCQkgICAgICBDVFJMX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKSB7CisJCWRiZygiTVNHIDcgZmFpbGVkIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCisJCQkgICAgICAweDEyLCAweGMwLCAweDBiLCAweDAwLCBidWYgKyBPRkZTRVRfYiwgU0laRV9iLAorCQkJICAgICAgQ1RSTF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlkYmcoIk1TRyBCIGZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLAorCQkJICAgICAgMHgxMiwgMHhjMCwgMHgwZCwgMHgwMCwgYnVmICsgT0ZGU0VUX2QsIFNJWkVfZCwKKwkJCSAgICAgIENUUkxfVElNRU9VVCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGJnKCJNU0cgRCBmYWlsZWQiKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwKKwkJCSAgICAgIDB4MDEsIDB4YzAsIDB4MGUsIDB4MDAsIGJ1ZiArIE9GRlNFVF9lLCBTSVpFX2UsCisJCQkgICAgICBDVFJMX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKSB7CisJCWRiZygiTVNHIEUgZmFpbGVkIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCisJCQkgICAgICAweDAxLCAweGMwLCAweDBmLCAweDAwLCBidWYgKyBPRkZTRVRfZiwgU0laRV9mLAorCQkJICAgICAgQ1RSTF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlkYmcoIk1TRyBGIGZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzcGVlZHRjaF9wb2xsX3N0YXR1cyhzdHJ1Y3Qgc3BlZWR0Y2hfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UpCit7CisJdW5zaWduZWQgY2hhciBidWZbVE9UQUxdOworCWludCByZXQ7CisKKwlyZXQgPSBzcGVlZHRjaF9nZXRfc3RhdHVzKGluc3RhbmNlLCBidWYpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIlNwZWVkVG91Y2g6IEVycm9yICVkIGZldGNoaW5nIGRldmljZSBzdGF0dXNcbiIsIHJldCk7CisJCXJldHVybjsKKwl9CisKKwlkYmcoIkxpbmUgc3RhdGUgJTAyeCIsIGJ1ZltPRkZTRVRfN10pOworCisJc3dpdGNoIChidWZbT0ZGU0VUXzddKSB7CisJY2FzZSAwOgorCQlpZiAoaW5zdGFuY2UtPnUuYXRtX2Rldi0+c2lnbmFsICE9IEFUTV9QSFlfU0lHX0xPU1QpIHsKKwkJCWluc3RhbmNlLT51LmF0bV9kZXYtPnNpZ25hbCA9IEFUTV9QSFlfU0lHX0xPU1Q7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIkFEU0wgbGluZSBpcyBkb3duXG4iKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgMHgwODoKKwkJaWYgKGluc3RhbmNlLT51LmF0bV9kZXYtPnNpZ25hbCAhPSBBVE1fUEhZX1NJR19VTktOT1dOKSB7CisJCQlpbnN0YW5jZS0+dS5hdG1fZGV2LT5zaWduYWwgPSBBVE1fUEhZX1NJR19VTktOT1dOOworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJBRFNMIGxpbmUgaXMgYmxvY2tlZD9cbiIpOworCQl9CisJCWJyZWFrOworCisJY2FzZSAweDEwOgorCQlpZiAoaW5zdGFuY2UtPnUuYXRtX2Rldi0+c2lnbmFsICE9IEFUTV9QSFlfU0lHX0xPU1QpIHsKKwkJCWluc3RhbmNlLT51LmF0bV9kZXYtPnNpZ25hbCA9IEFUTV9QSFlfU0lHX0xPU1Q7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIkFEU0wgbGluZSBpcyBzeW5jaHJvbmlzaW5nXG4iKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgMHgyMDoKKwkJaWYgKGluc3RhbmNlLT51LmF0bV9kZXYtPnNpZ25hbCAhPSBBVE1fUEhZX1NJR19GT1VORCkgeworCQkJaW50IGRvd25fc3BlZWQgPSBidWZbT0ZGU0VUX2JdIHwgKGJ1ZltPRkZTRVRfYiArIDFdIDw8IDgpCisJCQkJfCAoYnVmW09GRlNFVF9iICsgMl0gPDwgMTYpIHwgKGJ1ZltPRkZTRVRfYiArIDNdIDw8IDI0KTsKKwkJCWludCB1cF9zcGVlZCA9IGJ1ZltPRkZTRVRfYiArIDRdIHwgKGJ1ZltPRkZTRVRfYiArIDVdIDw8IDgpCisJCQkJfCAoYnVmW09GRlNFVF9iICsgNl0gPDwgMTYpIHwgKGJ1ZltPRkZTRVRfYiArIDddIDw8IDI0KTsKKworCQkJaWYgKCEoZG93bl9zcGVlZCAmIDB4MDAwMGZmZmYpICYmCisJCQkgICAgISh1cF9zcGVlZCAmIDB4MDAwMGZmZmYpKSB7CisJCQkJZG93bl9zcGVlZCA+Pj0gMTY7CisJCQkJdXBfc3BlZWQgPj49IDE2OworCQkJfQorCQkJaW5zdGFuY2UtPnUuYXRtX2Rldi0+bGlua19yYXRlID0gZG93bl9zcGVlZCAqIDEwMDAgLyA0MjQ7CisJCQlpbnN0YW5jZS0+dS5hdG1fZGV2LT5zaWduYWwgPSBBVE1fUEhZX1NJR19GT1VORDsKKworCQkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkgICAgICAgIkFEU0wgbGluZSBpcyB1cCAoJWQgS2liL3MgZG93biB8ICVkIEtpYi9zIHVwKVxuIiwKKwkJCSAgICAgICBkb3duX3NwZWVkLCB1cF9zcGVlZCk7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlpZiAoaW5zdGFuY2UtPnUuYXRtX2Rldi0+c2lnbmFsICE9IEFUTV9QSFlfU0lHX1VOS05PV04pIHsKKwkJCWluc3RhbmNlLT51LmF0bV9kZXYtPnNpZ25hbCA9IEFUTV9QSFlfU0lHX1VOS05PV047CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIlVua25vd24gbGluZSBzdGF0ZSAlMDJ4XG4iLCBidWZbT0ZGU0VUXzddKTsKKwkJfQorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNwZWVkdGNoX3RpbWVyX3BvbGwodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBzcGVlZHRjaF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSA9ICh2b2lkICopZGF0YTsKKworCXNjaGVkdWxlX3dvcmsoJmluc3RhbmNlLT5wb2xsX3dvcmspOworCW1vZF90aW1lcigmaW5zdGFuY2UtPnBvbGxfdGltZXIsIGppZmZpZXMgKyAoNSAqIEhaKSk7Cit9CisKKyNpZmRlZiBVU0VfRldfTE9BREVSCitzdGF0aWMgdm9pZCBzcGVlZHRjaF91cGxvYWRfZmlybXdhcmUoc3RydWN0IHNwZWVkdGNoX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzEsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3MikKK3sKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBpbnN0YW5jZS0+dS51c2JfZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCWludCBhY3R1YWxfbGVuZ3RoLCByZXQ7CisJaW50IG9mZnNldDsKKworCWRiZygic3BlZWR0Y2hfdXBsb2FkX2Zpcm13YXJlIik7CisKKwlpZiAoIShpbnRmID0gdXNiX2lmbnVtX3RvX2lmKHVzYl9kZXYsIDIpKSkgeworCQlkYmcoInNwZWVkdGNoX3VwbG9hZF9maXJtd2FyZTogaW50ZXJmYWNlIG5vdCBmb3VuZCEiKTsKKwkJZ290byBmYWlsOworCX0KKworCWlmICghKGJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpKSkgeworCQlkYmcoInNwZWVkdGNoX3VwbG9hZF9maXJtd2FyZTogbm8gbWVtb3J5IGZvciBidWZmZXIhIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBBIHVzZXItc3BhY2UgZmlybXdhcmUgbG9hZGVyIG1heSBhbHJlYWR5IGhhdmUgY2xhaW1lZCBpbnRlcmZhY2UgIzIgKi8KKwlpZiAoKHJldCA9CisJICAgICB1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmc3BlZWR0Y2hfdXNiX2RyaXZlciwgaW50ZiwgTlVMTCkpIDwgMCkgeworCQlkYmcoInNwZWVkdGNoX3VwbG9hZF9maXJtd2FyZTogaW50ZXJmYWNlIGluIHVzZSAoJWQpISIsIHJldCk7CisJCWdvdG8gZmFpbF9mcmVlOworCX0KKworCS8qIFVSQiA3ICovCisJaWYgKGRsXzUxMl9maXJzdCkgewkvKiBzb21lIG1vZGVtcyBuZWVkIGEgcmVhZCBiZWZvcmUgd3JpdGluZyB0aGUgZmlybXdhcmUgKi8KKwkJcmV0ID0gdXNiX2J1bGtfbXNnKHVzYl9kZXYsIHVzYl9yY3ZidWxrcGlwZSh1c2JfZGV2LCBTUEVFRFRDSF9FTkRQT0lOVF9GSVJNV0FSRSksCisJCQkJICAgYnVmZmVyLCAweDIwMCwgJmFjdHVhbF9sZW5ndGgsIDIwMDApOworCisJCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRVRJTUVET1VUKQorCQkJZGJnKCJzcGVlZHRjaF91cGxvYWRfZmlybXdhcmU6IHJlYWQgQkxPQ0swIGZyb20gbW9kZW0gZmFpbGVkICglZCkhIiwgcmV0KTsKKwkJZWxzZQorCQkJZGJnKCJzcGVlZHRjaF91cGxvYWRfZmlybXdhcmU6IEJMT0NLMCBkb3dubG9hZGVkICglZCBieXRlcykiLCByZXQpOworCX0KKworCS8qIFVSQiA4IDogYm90aCBsZWRzIGFyZSBzdGF0aWMgZ3JlZW4gKi8KKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IGZ3MS0+c2l6ZTsgb2Zmc2V0ICs9IFBBR0VfU0laRSkgeworCQlpbnQgdGhpc2xlbiA9IG1pbl90KGludCwgUEFHRV9TSVpFLCBmdzEtPnNpemUgLSBvZmZzZXQpOworCQltZW1jcHkoYnVmZmVyLCBmdzEtPmRhdGEgKyBvZmZzZXQsIHRoaXNsZW4pOworCisJCXJldCA9IHVzYl9idWxrX21zZyh1c2JfZGV2LCB1c2Jfc25kYnVsa3BpcGUodXNiX2RldiwgU1BFRURUQ0hfRU5EUE9JTlRfRklSTVdBUkUpLAorCQkJCSAgIGJ1ZmZlciwgdGhpc2xlbiwgJmFjdHVhbF9sZW5ndGgsIERBVEFfVElNRU9VVCk7CisKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRiZygic3BlZWR0Y2hfdXBsb2FkX2Zpcm13YXJlOiB3cml0ZSBCTE9DSzEgdG8gbW9kZW0gZmFpbGVkICglZCkhIiwgcmV0KTsKKwkJCWdvdG8gZmFpbF9yZWxlYXNlOworCQl9CisJCWRiZygic3BlZWR0Y2hfdXBsb2FkX2Zpcm13YXJlOiBCTE9DSzEgdXBsb2FkZWQgKCV6dSBieXRlcykiLCBmdzEtPnNpemUpOworCX0KKworCS8qIFVTQiBsZWQgYmxpbmtpbmcgZ3JlZW4sIEFEU0wgbGVkIG9mZiAqLworCisJLyogVVJCIDExICovCisJcmV0ID0gdXNiX2J1bGtfbXNnKHVzYl9kZXYsIHVzYl9yY3ZidWxrcGlwZSh1c2JfZGV2LCBTUEVFRFRDSF9FTkRQT0lOVF9GSVJNV0FSRSksCisJCQkgICBidWZmZXIsIDB4MjAwLCAmYWN0dWFsX2xlbmd0aCwgREFUQV9USU1FT1VUKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWRiZygic3BlZWR0Y2hfdXBsb2FkX2Zpcm13YXJlOiByZWFkIEJMT0NLMiBmcm9tIG1vZGVtIGZhaWxlZCAoJWQpISIsIHJldCk7CisJCWdvdG8gZmFpbF9yZWxlYXNlOworCX0KKwlkYmcoInNwZWVkdGNoX3VwbG9hZF9maXJtd2FyZTogQkxPQ0syIGRvd25sb2FkZWQgKCVkIGJ5dGVzKSIsIGFjdHVhbF9sZW5ndGgpOworCisJLyogVVJCcyAxMiB0byAxMzkgLSBVU0IgbGVkIGJsaW5raW5nIGdyZWVuLCBBRFNMIGxlZCBvZmYgKi8KKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IGZ3Mi0+c2l6ZTsgb2Zmc2V0ICs9IFBBR0VfU0laRSkgeworCQlpbnQgdGhpc2xlbiA9IG1pbl90KGludCwgUEFHRV9TSVpFLCBmdzItPnNpemUgLSBvZmZzZXQpOworCQltZW1jcHkoYnVmZmVyLCBmdzItPmRhdGEgKyBvZmZzZXQsIHRoaXNsZW4pOworCisJCXJldCA9IHVzYl9idWxrX21zZyh1c2JfZGV2LCB1c2Jfc25kYnVsa3BpcGUodXNiX2RldiwgU1BFRURUQ0hfRU5EUE9JTlRfRklSTVdBUkUpLAorCQkJCSAgIGJ1ZmZlciwgdGhpc2xlbiwgJmFjdHVhbF9sZW5ndGgsIERBVEFfVElNRU9VVCk7CisKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRiZygic3BlZWR0Y2hfdXBsb2FkX2Zpcm13YXJlOiB3cml0ZSBCTE9DSzMgdG8gbW9kZW0gZmFpbGVkICglZCkhIiwgcmV0KTsKKwkJCWdvdG8gZmFpbF9yZWxlYXNlOworCQl9CisJfQorCWRiZygic3BlZWR0Y2hfdXBsb2FkX2Zpcm13YXJlOiBCTE9DSzMgdXBsb2FkZWQgKCV6dSBieXRlcykiLCBmdzItPnNpemUpOworCisJLyogVVNCIGxlZCBzdGF0aWMgZ3JlZW4sIEFEU0wgbGVkIHN0YXRpYyByZWQgKi8KKworCS8qIFVSQiAxNDIgKi8KKwlyZXQgPSB1c2JfYnVsa19tc2codXNiX2RldiwgdXNiX3JjdmJ1bGtwaXBlKHVzYl9kZXYsIFNQRUVEVENIX0VORFBPSU5UX0ZJUk1XQVJFKSwKKwkJCSAgIGJ1ZmZlciwgMHgyMDAsICZhY3R1YWxfbGVuZ3RoLCBEQVRBX1RJTUVPVVQpOworCisJaWYgKHJldCA8IDApIHsKKwkJZGJnKCJzcGVlZHRjaF91cGxvYWRfZmlybXdhcmU6IHJlYWQgQkxPQ0s0IGZyb20gbW9kZW0gZmFpbGVkICglZCkhIiwgcmV0KTsKKwkJZ290byBmYWlsX3JlbGVhc2U7CisJfQorCisJLyogc3VjY2VzcyAqLworCWRiZygic3BlZWR0Y2hfdXBsb2FkX2Zpcm13YXJlOiBCTE9DSzQgZG93bmxvYWRlZCAoJWQgYnl0ZXMpIiwgYWN0dWFsX2xlbmd0aCk7CisKKwkvKiBEZWxheSB0byBhbGxvdyBmaXJtd2FyZSB0byBzdGFydCB1cC4gV2UgY2FuIGRvIHRoaXMgaGVyZQorCSAgIGJlY2F1c2Ugd2UncmUgaW4gb3VyIG93biBrZXJuZWwgdGhyZWFkIGFueXdheS4gKi8KKwltc2xlZXAoMTAwMCk7CisKKwkvKiBFbmFibGUgc29mdHdhcmUgYnVmZmVyaW5nLCBpZiByZXF1ZXN0ZWQgKi8KKwlpZiAoc3dfYnVmZmVyaW5nKQorCQlzcGVlZHRjaF9zZXRfc3didWZmKGluc3RhbmNlLCAxKTsKKworCS8qIE1hZ2ljIHNwZWxsOyBkb24ndCBhc2sgdXMgd2hhdCB0aGlzIGRvZXMgKi8KKwlzcGVlZHRjaF90ZXN0X3NlcXVlbmNlKGluc3RhbmNlKTsKKworCS8qIFN0YXJ0IG1vZGVtIHN5bmNocm9uaXNhdGlvbiAqLworCWlmIChzcGVlZHRjaF9zdGFydF9zeW5jaHJvKGluc3RhbmNlKSkKKwkJZGJnKCJzcGVlZHRjaF9zdGFydF9zeW5jaHJvOiBmYWlsZWQiKTsKKworCXNwZWVkdGNoX2dvdF9maXJtd2FyZShpbnN0YW5jZSwgMSk7CisKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmZmVyKTsKKwlyZXR1cm47CisKKyBmYWlsX3JlbGVhc2U6CisJLyogT25seSByZWxlYXNlIGludGVyZmFjZSAjMiBpZiB1cGxvYWRpbmcgZmFpbGVkOyB3ZSBkb24ndCByZWxlYXNlIGl0CisJICAgd2Ugc3VjY2VlZGVkLiAgVGhpcyBwcmV2ZW50cyB0aGUgdXNlcnNwYWNlIHRvb2xzIGZyb20gdHJ5aW5nIHRvIGxvYWQKKwkgICB0aGUgZmlybXdhcmUgdGhlbXNlbHZlcyAqLworCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoJnNwZWVkdGNoX3VzYl9kcml2ZXIsIGludGYpOworIGZhaWxfZnJlZToKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmZmVyKTsKKyBmYWlsOgorCXNwZWVkdGNoX2dvdF9maXJtd2FyZShpbnN0YW5jZSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgc3BlZWR0Y2hfZmluZF9maXJtd2FyZShzdHJ1Y3Qgc3BlZWR0Y2hfaW5zdGFuY2VfZGF0YQorCQkJCSAgKmluc3RhbmNlLCBpbnQgcGhhc2UsCisJCQkJICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmd19wKQoreworCWNoYXIgYnVmWzI0XTsKKwljb25zdCB1MTYgYmNkRGV2aWNlID0gbGUxNl90b19jcHUoaW5zdGFuY2UtPnUudXNiX2Rldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworCWNvbnN0IHU4IG1ham9yX3JldmlzaW9uID0gYmNkRGV2aWNlID4+IDg7CisJY29uc3QgdTggbWlub3JfcmV2aXNpb24gPSBiY2REZXZpY2UgJiAweGZmOworCisJc3ByaW50ZihidWYsICJzcGVlZHRjaC0lZC5iaW4uJXguJTAyeCIsIHBoYXNlLCBtYWpvcl9yZXZpc2lvbiwgbWlub3JfcmV2aXNpb24pOworCWRiZygic3BlZWR0Y2hfZmluZF9maXJtd2FyZTogbG9va2luZyBmb3IgJXMiLCBidWYpOworCisJaWYgKHJlcXVlc3RfZmlybXdhcmUoZndfcCwgYnVmLCAmaW5zdGFuY2UtPnUudXNiX2Rldi0+ZGV2KSkgeworCQlzcHJpbnRmKGJ1ZiwgInNwZWVkdGNoLSVkLmJpbi4leCIsIHBoYXNlLCBtYWpvcl9yZXZpc2lvbik7CisJCWRiZygic3BlZWR0Y2hfZmluZF9maXJtd2FyZTogbG9va2luZyBmb3IgJXMiLCBidWYpOworCisJCWlmIChyZXF1ZXN0X2Zpcm13YXJlKGZ3X3AsIGJ1ZiwgJmluc3RhbmNlLT51LnVzYl9kZXYtPmRldikpIHsKKwkJCXNwcmludGYoYnVmLCAic3BlZWR0Y2gtJWQuYmluIiwgcGhhc2UpOworCQkJZGJnKCJzcGVlZHRjaF9maW5kX2Zpcm13YXJlOiBsb29raW5nIGZvciAlcyIsIGJ1Zik7CisKKwkJCWlmIChyZXF1ZXN0X2Zpcm13YXJlKGZ3X3AsIGJ1ZiwgJmluc3RhbmNlLT51LnVzYl9kZXYtPmRldikpIHsKKwkJCQlkZXZfd2FybigmaW5zdGFuY2UtPnUudXNiX2Rldi0+ZGV2LCAibm8gc3RhZ2UgJWQgZmlybXdhcmUgZm91bmQhIiwgcGhhc2UpOworCQkJCXJldHVybiAtRU5PRU5UOworCQkJfQorCQl9CisJfQorCisJZGV2X2luZm8oJmluc3RhbmNlLT51LnVzYl9kZXYtPmRldiwgImZvdW5kIHN0YWdlICVkIGZpcm13YXJlICVzXG4iLCBwaGFzZSwgYnVmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNwZWVkdGNoX2xvYWRfZmlybXdhcmUodm9pZCAqYXJnKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncxLCAqZncyOworCXN0cnVjdCBzcGVlZHRjaF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSA9IGFyZzsKKworCUJVR19PTighaW5zdGFuY2UpOworCisJZGFlbW9uaXplKCJmaXJtd2FyZS9zcGVlZHRjaCIpOworCisJaWYgKCFzcGVlZHRjaF9maW5kX2Zpcm13YXJlKGluc3RhbmNlLCAxLCAmZncxKSkgeworCQlpZiAoIXNwZWVkdGNoX2ZpbmRfZmlybXdhcmUoaW5zdGFuY2UsIDIsICZmdzIpKSB7CisJCQlzcGVlZHRjaF91cGxvYWRfZmlybXdhcmUoaW5zdGFuY2UsIGZ3MSwgZncyKTsKKwkJCXJlbGVhc2VfZmlybXdhcmUoZncyKTsKKwkJfQorCQlyZWxlYXNlX2Zpcm13YXJlKGZ3MSk7CisJfQorCisJLyogSW4gY2FzZSB3ZSBmYWlsZWQsIHNldCBzdGF0ZSBiYWNrIHRvIE5PX0ZJUk1XQVJFIHNvIHRoYXQKKwkgICBhbm90aGVyIGxhdGVyIGF0dGVtcHQgbWF5IHdvcmsuIE90aGVyd2lzZSwgd2UgbmV2ZXIgYWN0dWFsbHkKKwkgICBtYW5hZ2UgdG8gcmVjb3ZlciBpZiwgZm9yIGV4YW1wbGUsIHRoZSBmaXJtd2FyZSBpcyBvbiAvdXNyIGFuZAorCSAgIHdlIGxvb2sgZm9yIGl0IHRvbyBlYXJseS4gKi8KKwlzcGVlZHRjaF9nb3RfZmlybXdhcmUoaW5zdGFuY2UsIDApOworCisJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CisJdWRzbF9wdXRfaW5zdGFuY2UoJmluc3RhbmNlLT51KTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBVU0VfRldfTE9BREVSICovCisKK3N0YXRpYyB2b2lkIHNwZWVkdGNoX2Zpcm13YXJlX3N0YXJ0KHN0cnVjdCBzcGVlZHRjaF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSkKK3sKKyNpZmRlZiBVU0VfRldfTE9BREVSCisJaW50IHJldDsKKyNlbmRpZgorCisJZGJnKCJzcGVlZHRjaF9maXJtd2FyZV9zdGFydCIpOworCisJZG93bigmaW5zdGFuY2UtPnUuc2VyaWFsaXplKTsJLyogdnMgc2VsZiwgc3BlZWR0Y2hfZ290X2Zpcm13YXJlICovCisKKwlpZiAoaW5zdGFuY2UtPnUuc3RhdHVzID49IFVEU0xfTE9BRElOR19GSVJNV0FSRSkgeworCQl1cCgmaW5zdGFuY2UtPnUuc2VyaWFsaXplKTsKKwkJcmV0dXJuOworCX0KKworCWluc3RhbmNlLT51LnN0YXR1cyA9IFVEU0xfTE9BRElOR19GSVJNV0FSRTsKKwl1cCgmaW5zdGFuY2UtPnUuc2VyaWFsaXplKTsKKworI2lmZGVmIFVTRV9GV19MT0FERVIKKwl1ZHNsX2dldF9pbnN0YW5jZSgmaW5zdGFuY2UtPnUpOworCXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTsKKworCXJldCA9IGtlcm5lbF90aHJlYWQoc3BlZWR0Y2hfbG9hZF9maXJtd2FyZSwgaW5zdGFuY2UsCisJCQkgICAgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyk7CisKKwlpZiAocmV0ID49IDApCisJCXJldHVybjsJCS8qIE9LICovCisKKwlkYmcoInNwZWVkdGNoX2Zpcm13YXJlX3N0YXJ0OiBrZXJuZWxfdGhyZWFkIGZhaWxlZCAoJWQpISIsIHJldCk7CisKKwltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKKwl1ZHNsX3B1dF9pbnN0YW5jZSgmaW5zdGFuY2UtPnUpOworCS8qIEp1c3QgcHJldGVuZCBpdCBuZXZlciBoYXBwZW5lZC4uLiBob3BlIG1vZGVtX3J1biBoYXBwZW5zICovCisjZW5kaWYJCQkJLyogVVNFX0ZXX0xPQURFUiAqLworCisJc3BlZWR0Y2hfZ290X2Zpcm13YXJlKGluc3RhbmNlLCAwKTsKK30KKworc3RhdGljIGludCBzcGVlZHRjaF9maXJtd2FyZV93YWl0KHN0cnVjdCB1ZHNsX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlKQoreworCXNwZWVkdGNoX2Zpcm13YXJlX3N0YXJ0KCh2b2lkICopaW5zdGFuY2UpOworCisJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShpbnN0YW5jZS0+ZmlybXdhcmVfd2FpdGVycywgaW5zdGFuY2UtPnN0YXR1cyAhPSBVRFNMX0xPQURJTkdfRklSTVdBUkUpIDwgMCkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCXJldHVybiAoaW5zdGFuY2UtPnN0YXR1cyA9PSBVRFNMX0xPQURFRF9GSVJNV0FSRSkgPyAwIDogLUVBR0FJTjsKK30KKworLyoqKioqKioqKioKKyoqICBVU0IgICoqCisqKioqKioqKioqLworCitzdGF0aWMgaW50IHNwZWVkdGNoX3VzYl9pb2N0bChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgdW5zaWduZWQgaW50IGNvZGUsCisJCQkgICAgICB2b2lkICp1c2VyX2RhdGEpCit7CisJc3RydWN0IHNwZWVkdGNoX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWRiZygic3BlZWR0Y2hfdXNiX2lvY3RsIGVudGVyZWQiKTsKKworCWlmICghaW5zdGFuY2UpIHsKKwkJZGJnKCJzcGVlZHRjaF91c2JfaW9jdGw6IE5VTEwgaW5zdGFuY2UhIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXN3aXRjaCAoY29kZSkgeworCWNhc2UgVURTTF9JT0NUTF9MSU5FX1VQOgorCQlpbnN0YW5jZS0+dS5hdG1fZGV2LT5zaWduYWwgPSBBVE1fUEhZX1NJR19GT1VORDsKKwkJc3BlZWR0Y2hfZ290X2Zpcm13YXJlKGluc3RhbmNlLCAxKTsKKwkJcmV0dXJuIChpbnN0YW5jZS0+dS5zdGF0dXMgPT0gVURTTF9MT0FERURfRklSTVdBUkUpID8gMCA6IC1FSU87CisJY2FzZSBVRFNMX0lPQ1RMX0xJTkVfRE9XTjoKKwkJaW5zdGFuY2UtPnUuYXRtX2Rldi0+c2lnbmFsID0gQVRNX1BIWV9TSUdfTE9TVDsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorfQorCitzdGF0aWMgaW50IHNwZWVkdGNoX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlpbnQgaWZudW0gPSBpbnRmLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisJc3RydWN0IHNwZWVkdGNoX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlOworCXVuc2lnbmVkIGNoYXIgbWFjX3N0clsxM107CisJaW50IHJldCwgaTsKKwljaGFyIGJ1ZjdbU0laRV83XTsKKworCWRiZygic3BlZWR0Y2hfdXNiX3Byb2JlOiB0cnlpbmcgZGV2aWNlIHdpdGggdmVuZG9yPTB4JXgsIHByb2R1Y3Q9MHgleCwgaWZudW0gJWQiLAorCSAgICBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCSAgICBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSwgaWZudW0pOworCisJaWYgKChkZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzICE9IFVTQl9DTEFTU19WRU5ET1JfU1BFQykgfHwgCisJICAgIChpZm51bSAhPSAxKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkYmcoInNwZWVkdGNoX3VzYl9wcm9iZTogZGV2aWNlIGFjY2VwdGVkIik7CisKKwkvKiBpbnN0YW5jZSBpbml0ICovCisJaW5zdGFuY2UgPSBrbWFsbG9jKHNpemVvZigqaW5zdGFuY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluc3RhbmNlKSB7CisJCWRiZygic3BlZWR0Y2hfdXNiX3Byb2JlOiBubyBtZW1vcnkgZm9yIGluc3RhbmNlIGRhdGEhIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChpbnN0YW5jZSwgMCwgc2l6ZW9mKHN0cnVjdCBzcGVlZHRjaF9pbnN0YW5jZV9kYXRhKSk7CisKKwlpZiAoKHJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKGRldiwgMCwgMCkpIDwgMCkKKwkJZ290byBmYWlsOworCisJaWYgKChyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShkZXYsIDIsIDApKSA8IDApCisJCWdvdG8gZmFpbDsKKworCWluc3RhbmNlLT51LmRhdGFfZW5kcG9pbnQgPSBTUEVFRFRDSF9FTkRQT0lOVF9EQVRBOworCWluc3RhbmNlLT51LmZpcm13YXJlX3dhaXQgPSBzcGVlZHRjaF9maXJtd2FyZV93YWl0OworCWluc3RhbmNlLT51LmRyaXZlcl9uYW1lID0gc3BlZWR0Y2hfZHJpdmVyX25hbWU7CisKKwlyZXQgPSB1ZHNsX2luc3RhbmNlX3NldHVwKGRldiwgJmluc3RhbmNlLT51KTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwlpbml0X3RpbWVyKCZpbnN0YW5jZS0+cG9sbF90aW1lcik7CisJaW5zdGFuY2UtPnBvbGxfdGltZXIuZnVuY3Rpb24gPSBzcGVlZHRjaF90aW1lcl9wb2xsOworCWluc3RhbmNlLT5wb2xsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylpbnN0YW5jZTsKKworCUlOSVRfV09SSygmaW5zdGFuY2UtPnBvbGxfd29yaywgKHZvaWQgKilzcGVlZHRjaF9wb2xsX3N0YXR1cywgaW5zdGFuY2UpOworCisJLyogc2V0IE1BQyBhZGRyZXNzLCBpdCBpcyBzdG9yZWQgaW4gdGhlIHNlcmlhbCBudW1iZXIgKi8KKwltZW1zZXQoaW5zdGFuY2UtPnUuYXRtX2Rldi0+ZXNpLCAwLCBzaXplb2YoaW5zdGFuY2UtPnUuYXRtX2Rldi0+ZXNpKSk7CisJaWYgKHVzYl9zdHJpbmcoZGV2LCBkZXYtPmRlc2NyaXB0b3IuaVNlcmlhbE51bWJlciwgbWFjX3N0ciwgc2l6ZW9mKG1hY19zdHIpKSA9PSAxMikgeworCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQkJaW5zdGFuY2UtPnUuYXRtX2Rldi0+ZXNpW2ldID0KKwkJCQkoaGV4MmludChtYWNfc3RyW2kgKiAyXSkgKiAxNikgKyAoaGV4MmludChtYWNfc3RyW2kgKiAyICsgMV0pKTsKKwl9CisKKwkvKiBGaXJzdCBjaGVjayB3aGV0aGVyIHRoZSBtb2RlbSBhbHJlYWR5IHNlZW1zIHRvIGJlIGFsaXZlICovCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCisJCQkgICAgICAweDEyLCAweGMwLCAweDA3LCAweDAwLCBidWY3LCBTSVpFXzcsIDUwMCk7CisKKwlpZiAocmV0ID09IFNJWkVfNykgeworCQlkYmcoImZpcm13YXJlIGFwcGVhcnMgdG8gYmUgYWxyZWFkeSBsb2FkZWQiKTsKKwkJc3BlZWR0Y2hfZ290X2Zpcm13YXJlKGluc3RhbmNlLCAxKTsKKwkJc3BlZWR0Y2hfcG9sbF9zdGF0dXMoaW5zdGFuY2UpOworCX0gZWxzZSB7CisJCXNwZWVkdGNoX2Zpcm13YXJlX3N0YXJ0KGluc3RhbmNlKTsKKwl9CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGluc3RhbmNlKTsKKworCXJldHVybiAwOworCisgZmFpbDoKKwlrZnJlZShpbnN0YW5jZSk7CisKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgc3BlZWR0Y2hfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHNwZWVkdGNoX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWRiZygic3BlZWR0Y2hfdXNiX2Rpc2Nvbm5lY3QgZW50ZXJlZCIpOworCisJaWYgKCFpbnN0YW5jZSkgeworCQlkYmcoInNwZWVkdGNoX3VzYl9kaXNjb25uZWN0OiBOVUxMIGluc3RhbmNlISIpOworCQlyZXR1cm47CisJfQorCisvKlFRIG5lZWQgdG8gaGFuZGxlIGRpc2Nvbm5lY3RzIG9uIGludGVyZmFjZSAjMiB3aGlsZSB1cGxvYWRpbmcgZmlybXdhcmUgKi8KKy8qUVEgYW5kIHdoYXQgYWJvdXQgaW50ZXJmYWNlICMxPyAqLworCisJaWYgKGluc3RhbmNlLT5pbnRfdXJiKSB7CisJCXN0cnVjdCB1cmIgKmludF91cmIgPSBpbnN0YW5jZS0+aW50X3VyYjsKKwkJaW5zdGFuY2UtPmludF91cmIgPSBOVUxMOworCQl3bWIoKTsKKwkJdXNiX3VubGlua191cmIoaW50X3VyYik7CisJCXVzYl9mcmVlX3VyYihpbnRfdXJiKTsKKwl9CisKKwlpbnN0YW5jZS0+aW50X2RhdGFbMF0gPSAxOworCWRlbF90aW1lcl9zeW5jKCZpbnN0YW5jZS0+cG9sbF90aW1lcik7CisJd21iKCk7CisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCXVkc2xfaW5zdGFuY2VfZGlzY29ubmVjdCgmaW5zdGFuY2UtPnUpOworCisJLyogY2xlYW4gdXAgKi8KKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCXVkc2xfcHV0X2luc3RhbmNlKCZpbnN0YW5jZS0+dSk7Cit9CisKKy8qKioqKioqKioqKgorKiogIGluaXQgICoqCisqKioqKioqKioqKi8KKworc3RhdGljIGludCBfX2luaXQgc3BlZWR0Y2hfdXNiX2luaXQodm9pZCkKK3sKKwlkYmcoInNwZWVkdGNoX3VzYl9pbml0OiBkcml2ZXIgdmVyc2lvbiAiIERSSVZFUl9WRVJTSU9OKTsKKworCXJldHVybiB1c2JfcmVnaXN0ZXIoJnNwZWVkdGNoX3VzYl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc3BlZWR0Y2hfdXNiX2NsZWFudXAodm9pZCkKK3sKKwlkYmcoInNwZWVkdGNoX3VzYl9jbGVhbnVwIGVudGVyZWQiKTsKKworCXVzYl9kZXJlZ2lzdGVyKCZzcGVlZHRjaF91c2JfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc3BlZWR0Y2hfdXNiX2luaXQpOworbW9kdWxlX2V4aXQoc3BlZWR0Y2hfdXNiX2NsZWFudXApOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS91c2JfYXRtLmMgYi9kcml2ZXJzL3VzYi9hdG0vdXNiX2F0bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0Y2Q0NDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9hdG0vdXNiX2F0bS5jCkBAIC0wLDAgKzEsMTE4OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIHVzYl9hdG0uYyAtIEdlbmVyaWMgVVNCIHhEU0wgZHJpdmVyIGNvcmUKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLCBBbGNhdGVsCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCBEdW5jYW4gU2FuZHMsIFNvbE5lZ3JvLCBKb3NlcCBDb21hcworICogIENvcHlyaWdodCAoQykgMjAwNCwgRGF2aWQgV29vZGhvdXNlCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiAgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqICBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogIFdyaXR0ZW4gYnkgSm9oYW4gVmVycmVwdCwgbWFpbnRhaW5lZCBieSBEdW5jYW4gU2FuZHMgKGR1bmNhbi5zYW5kc0BmcmVlLmZyKQorICoKKyAqICAxLjcrOgktIFNlZSB0aGUgY2hlY2staW4gbG9ncworICoKKyAqICAxLjY6CS0gTm8gbG9uZ2VyIG9wZW5zIGEgY29ubmVjdGlvbiBpZiB0aGUgZmlybXdhcmUgaXMgbm90IGxvYWRlZAorICogIAkJLSBBZGRlZCBzdXBwb3J0IGZvciB0aGUgc3BlZWR0b3VjaCAzMzAKKyAqICAJCS0gUmVtb3ZlZCB0aGUgbGltaXQgb24gdGhlIG51bWJlciBvZiBkZXZpY2VzCisgKiAgCQktIE1vZHVsZSBub3cgYXV0b2xvYWRzIG9uIGRldmljZSBwbHVnaW4KKyAqICAJCS0gTWVyZ2VkIHJlbGV2YW50IHBhcnRzIG9mIHNhcmxpYgorICogIAkJLSBSZXBsYWNlZCB0aGUga2VybmVsIHRocmVhZCB3aXRoIGEgdGFza2xldAorICogIAkJLSBOZXcgcGFja2V0IHRyYW5zbWlzc2lvbiBjb2RlCisgKiAgCQktIENoYW5nZWQgcHJvYyBmaWxlIGNvbnRlbnRzCisgKiAgCQktIEZpeGVkIGFsbCBrbm93biBTTVAgcmFjZXMKKyAqICAJCS0gTWFueSBmaXhlcyBhbmQgY2xlYW51cHMKKyAqICAJCS0gVmFyaW91cyBmaXhlcyBieSBPbGl2ZXIgTmV1a3VtIChvbGl2ZXJAbmV1a3VtLm5hbWUpCisgKgorICogIDEuNUE6CS0gVmVyc2lvbiBmb3IgaW5jbHVzaW9uIGluIDIuNSBzZXJpZXMga2VybmVsCisgKgkJLSBNb2RpZmljYXRpb25zIGJ5IFJpY2hhcmQgUHVyZGllIChycHVyZGllQHJwc3lzLm5ldCkKKyAqCQktIG1hZGUgY29tcGF0aWJsZSB3aXRoIGtlcm5lbCAyLjUuNiBvbndhcmRzIGJ5IGNoYW5naW5nCisgKgkJdWRzbF91c2Jfc2VuZF9kYXRhX2NvbnRleHQtPnVyYiB0byBhIHBvaW50ZXIgYW5kIGFkZGluZyBjb2RlCisgKgkJdG8gYWxsb2MgYW5kIGZyZWUgaXQKKyAqCQktIHJlbW92ZV93YWl0X3F1ZXVlKCkgYWRkZWQgdG8gdWRzbF9hdG1fcHJvY2Vzc3F1ZXVlX3RocmVhZCgpCisgKgorICogIDEuNToJLSBmaXhlZCBtZW1vcnkgbGVhayB3aGVuIGF0bXNhcl9kZWNvZGVfYWFsNSByZXR1cm5lZCBOVUxMLgorICoJCShyZXBvcnRlZCBieSBzdGVwaGVuLnJvYmluc29uQHplbi5jby51aykKKyAqCisgKiAgMS40OgktIGNoYW5nZWQgdGhlIHNwaW5fbG9jaygpIHVuZGVyIGludGVycnVwdCB0byBzcGluX2xvY2tfaXJxc2F2ZSgpCisgKgkJLSB1bmxpbmsgYWxsIGFjdGl2ZSBzZW5kIHVyYnMgb2YgYSB2Y2MgdGhhdCBpcyBiZWluZyBjbG9zZWQuCisgKgorICogIDEuMy4xOgktIGFkZGVkIHRoZSB2ZXJzaW9uIG51bWJlcgorICoKKyAqICAxLjM6CS0gQWRkZWQgbXVsdGlwbGUgc2VuZCB1cmIgc3VwcG9ydAorICoJCS0gZml4ZWQgbWVtb3J5IGxlYWsgYW5kIHZjYy0+dHhfaW51c2Ugc3RhcnZhdGlvbiBidWcKKyAqCQkgIHdoZW4gbm90IGVub3VnaCBtZW1vcnkgbGVmdCBpbiB2Y2MuCisgKgorICogIDEuMjoJLSBGaXhlZCByYWNlIGNvbmRpdGlvbiBpbiB1ZHNsX3VzYl9zZW5kX2RhdGEoKQorICogIDEuMToJLSBUdXJuZWQgb2ZmIHBhY2tldCBkZWJ1Z2dpbmcKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG0uaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorCisjaW5jbHVkZSAidXNiX2F0bS5oIgorCisjaWZkZWYgVkVSQk9TRV9ERUJVRworc3RhdGljIGludCB1ZHNsX3ByaW50X3BhY2tldChjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuKTsKKyNkZWZpbmUgUEFDS0VUREVCVUcoYXJnLi4uKQl1ZHNsX3ByaW50X3BhY2tldCAoYXJnKQorI2RlZmluZSB2ZGJnKGFyZy4uLikJCWRiZyAoYXJnKQorI2Vsc2UKKyNkZWZpbmUgUEFDS0VUREVCVUcoYXJnLi4uKQorI2RlZmluZSB2ZGJnKGFyZy4uLikKKyNlbmRpZgorCisjZGVmaW5lIERSSVZFUl9BVVRIT1IJIkpvaGFuIFZlcnJlcHQsIER1bmNhbiBTYW5kcyA8ZHVuY2FuLnNhbmRzQGZyZWUuZnI+IgorI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMS44IgorI2RlZmluZSBEUklWRVJfREVTQwkiR2VuZXJpYyBVU0IgQVRNL0RTTCBJL08sIHZlcnNpb24gIiBEUklWRVJfVkVSU0lPTgorCitzdGF0aWMgdW5zaWduZWQgaW50IG51bV9yY3ZfdXJicyA9IFVEU0xfREVGQVVMVF9SQ1ZfVVJCUzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnVtX3NuZF91cmJzID0gVURTTF9ERUZBVUxUX1NORF9VUkJTOworc3RhdGljIHVuc2lnbmVkIGludCBudW1fcmN2X2J1ZnMgPSBVRFNMX0RFRkFVTFRfUkNWX0JVRlM7CitzdGF0aWMgdW5zaWduZWQgaW50IG51bV9zbmRfYnVmcyA9IFVEU0xfREVGQVVMVF9TTkRfQlVGUzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmN2X2J1Zl9zaXplID0gVURTTF9ERUZBVUxUX1JDVl9CVUZfU0laRTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc25kX2J1Zl9zaXplID0gVURTTF9ERUZBVUxUX1NORF9CVUZfU0laRTsKKworbW9kdWxlX3BhcmFtKG51bV9yY3ZfdXJicywgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG51bV9yY3ZfdXJicywKKwkJICJOdW1iZXIgb2YgdXJicyB1c2VkIGZvciByZWNlcHRpb24gKHJhbmdlOiAwLSIKKwkJIF9fTU9EVUxFX1NUUklORyhVRFNMX01BWF9SQ1ZfVVJCUykgIiwgZGVmYXVsdDogIgorCQkgX19NT0RVTEVfU1RSSU5HKFVEU0xfREVGQVVMVF9SQ1ZfVVJCUykgIikiKTsKKworbW9kdWxlX3BhcmFtKG51bV9zbmRfdXJicywgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG51bV9zbmRfdXJicywKKwkJICJOdW1iZXIgb2YgdXJicyB1c2VkIGZvciB0cmFuc21pc3Npb24gKHJhbmdlOiAwLSIKKwkJIF9fTU9EVUxFX1NUUklORyhVRFNMX01BWF9TTkRfVVJCUykgIiwgZGVmYXVsdDogIgorCQkgX19NT0RVTEVfU1RSSU5HKFVEU0xfREVGQVVMVF9TTkRfVVJCUykgIikiKTsKKworbW9kdWxlX3BhcmFtKG51bV9yY3ZfYnVmcywgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG51bV9yY3ZfYnVmcywKKwkJICJOdW1iZXIgb2YgYnVmZmVycyB1c2VkIGZvciByZWNlcHRpb24gKHJhbmdlOiAwLSIKKwkJIF9fTU9EVUxFX1NUUklORyhVRFNMX01BWF9SQ1ZfQlVGUykgIiwgZGVmYXVsdDogIgorCQkgX19NT0RVTEVfU1RSSU5HKFVEU0xfREVGQVVMVF9SQ1ZfQlVGUykgIikiKTsKKworbW9kdWxlX3BhcmFtKG51bV9zbmRfYnVmcywgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG51bV9zbmRfYnVmcywKKwkJICJOdW1iZXIgb2YgYnVmZmVycyB1c2VkIGZvciB0cmFuc21pc3Npb24gKHJhbmdlOiAwLSIKKwkJIF9fTU9EVUxFX1NUUklORyhVRFNMX01BWF9TTkRfQlVGUykgIiwgZGVmYXVsdDogIgorCQkgX19NT0RVTEVfU1RSSU5HKFVEU0xfREVGQVVMVF9TTkRfQlVGUykgIikiKTsKKworbW9kdWxlX3BhcmFtKHJjdl9idWZfc2l6ZSwgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJjdl9idWZfc2l6ZSwKKwkJICJTaXplIG9mIHRoZSBidWZmZXJzIHVzZWQgZm9yIHJlY2VwdGlvbiAocmFuZ2U6IDAtIgorCQkgX19NT0RVTEVfU1RSSU5HKFVEU0xfTUFYX1JDVl9CVUZfU0laRSkgIiwgZGVmYXVsdDogIgorCQkgX19NT0RVTEVfU1RSSU5HKFVEU0xfREVGQVVMVF9SQ1ZfQlVGX1NJWkUpICIpIik7CisKK21vZHVsZV9wYXJhbShzbmRfYnVmX3NpemUsIHVpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhzbmRfYnVmX3NpemUsCisJCSAiU2l6ZSBvZiB0aGUgYnVmZmVycyB1c2VkIGZvciB0cmFuc21pc3Npb24gKHJhbmdlOiAwLSIKKwkJIF9fTU9EVUxFX1NUUklORyhVRFNMX01BWF9TTkRfQlVGX1NJWkUpICIsIGRlZmF1bHQ6ICIKKwkJIF9fTU9EVUxFX1NUUklORyhVRFNMX0RFRkFVTFRfU05EX0JVRl9TSVpFKSAiKSIpOworCisvKiBBVE0gKi8KKworc3RhdGljIHZvaWQgdWRzbF9hdG1fZGV2X2Nsb3NlKHN0cnVjdCBhdG1fZGV2ICpkZXYpOworc3RhdGljIGludCB1ZHNsX2F0bV9vcGVuKHN0cnVjdCBhdG1fdmNjICp2Y2MpOworc3RhdGljIHZvaWQgdWRzbF9hdG1fY2xvc2Uoc3RydWN0IGF0bV92Y2MgKnZjYyk7CitzdGF0aWMgaW50IHVkc2xfYXRtX2lvY3RsKHN0cnVjdCBhdG1fZGV2ICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICogYXJnKTsKK3N0YXRpYyBpbnQgdWRzbF9hdG1fc2VuZChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3N0YXRpYyBpbnQgdWRzbF9hdG1fcHJvY19yZWFkKHN0cnVjdCBhdG1fZGV2ICphdG1fZGV2LCBsb2ZmX3QgKiBwb3MsIGNoYXIgKnBhZ2UpOworCitzdGF0aWMgc3RydWN0IGF0bWRldl9vcHMgdWRzbF9hdG1fZGV2b3BzID0geworCS5kZXZfY2xvc2UJPSB1ZHNsX2F0bV9kZXZfY2xvc2UsCisJLm9wZW4JCT0gdWRzbF9hdG1fb3BlbiwKKwkuY2xvc2UJCT0gdWRzbF9hdG1fY2xvc2UsCisJLmlvY3RsCQk9IHVkc2xfYXRtX2lvY3RsLAorCS5zZW5kCQk9IHVkc2xfYXRtX3NlbmQsCisJLnByb2NfcmVhZAk9IHVkc2xfYXRtX3Byb2NfcmVhZCwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCit9OworCisvKioqKioqKioqKioKKyoqICBtaXNjICAqKgorKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1ZHNsX3BvcChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmICh2Y2MtPnBvcCkKKwkJdmNjLT5wb3AodmNjLCBza2IpOworCWVsc2UKKwkJZGV2X2tmcmVlX3NrYihza2IpOworfQorCisvKioqKioqKioqKioqKgorKiogIGRlY29kZSAgKioKKyoqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVkc2xfdmNjX2RhdGEgKnVkc2xfZmluZF92Y2Moc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UsCisJCQkJCQkgIHNob3J0IHZwaSwgaW50IHZjaSkKK3sKKwlzdHJ1Y3QgdWRzbF92Y2NfZGF0YSAqdmNjOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh2Y2MsICZpbnN0YW5jZS0+dmNjX2xpc3QsIGxpc3QpCisJCWlmICgodmNjLT52Y2kgPT0gdmNpKSAmJiAodmNjLT52cGkgPT0gdnBpKSkKKwkJCXJldHVybiB2Y2M7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHVkc2xfZXh0cmFjdF9jZWxscyhzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSwKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpzb3VyY2UsIHVuc2lnbmVkIGludCBob3dtYW55KQoreworCXN0cnVjdCB1ZHNsX3ZjY19kYXRhICpjYWNoZWRfdmNjID0gTlVMTDsKKwlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOworCXN0cnVjdCBza19idWZmICpzYXJiOworCXN0cnVjdCB1ZHNsX3ZjY19kYXRhICp2Y2NfZGF0YTsKKwlpbnQgY2FjaGVkX3ZjaSA9IDA7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHB0aTsKKwlpbnQgdmNpOworCXNob3J0IGNhY2hlZF92cGkgPSAwOworCXNob3J0IHZwaTsKKworCWZvciAoaSA9IDA7IGkgPCBob3dtYW55OworCSAgICAgaSsrLCBzb3VyY2UgKz0gQVRNX0NFTExfU0laRSArIGluc3RhbmNlLT5yY3ZfcGFkZGluZykgeworCQl2cGkgPSAoKHNvdXJjZVswXSAmIDB4MGYpIDw8IDQpIHwgKHNvdXJjZVsxXSA+PiA0KTsKKwkJdmNpID0gKChzb3VyY2VbMV0gJiAweDBmKSA8PCAxMikgfCAoc291cmNlWzJdIDw8IDQpIHwgKHNvdXJjZVszXSA+PiA0KTsKKwkJcHRpID0gKHNvdXJjZVszXSAmIDB4MikgIT0gMDsKKworCQl2ZGJnKCJ1ZHNsX2V4dHJhY3RfY2VsbHM6IHZwaSAlaGQsIHZjaSAlZCwgcHRpICVkIiwgdnBpLCB2Y2ksIHB0aSk7CisKKwkJaWYgKGNhY2hlZF92Y2MgJiYgKHZjaSA9PSBjYWNoZWRfdmNpKSAmJiAodnBpID09IGNhY2hlZF92cGkpKQorCQkJdmNjX2RhdGEgPSBjYWNoZWRfdmNjOworCQllbHNlIGlmICgodmNjX2RhdGEgPSB1ZHNsX2ZpbmRfdmNjKGluc3RhbmNlLCB2cGksIHZjaSkpKSB7CisJCQljYWNoZWRfdmNjID0gdmNjX2RhdGE7CisJCQljYWNoZWRfdnBpID0gdnBpOworCQkJY2FjaGVkX3ZjaSA9IHZjaTsKKwkJfSBlbHNlIHsKKwkJCWRiZygidWRzbF9leHRyYWN0X2NlbGxzOiB1bmtub3duIHZwaS92Y2kgKCVoZC8lZCkhIiwgdnBpLCB2Y2kpOworCQkJY29udGludWU7CisJCX0KKworCQl2Y2MgPSB2Y2NfZGF0YS0+dmNjOworCQlzYXJiID0gdmNjX2RhdGEtPnNhcmI7CisKKwkJaWYgKHNhcmItPnRhaWwgKyBBVE1fQ0VMTF9QQVlMT0FEID4gc2FyYi0+ZW5kKSB7CisJCQlkYmcoInVkc2xfZXh0cmFjdF9jZWxsczogYnVmZmVyIG92ZXJydW4gKHNhcmItPmxlbiAldSwgdmNjOiAweCVwKSEiLCBzYXJiLT5sZW4sIHZjYyk7CisJCQkvKiBkaXNjYXJkIGNlbGxzIGFscmVhZHkgcmVjZWl2ZWQgKi8KKwkJCXNrYl90cmltKHNhcmIsIDApOworCQl9CisKKwkJbWVtY3B5KHNhcmItPnRhaWwsIHNvdXJjZSArIEFUTV9DRUxMX0hFQURFUiwgQVRNX0NFTExfUEFZTE9BRCk7CisJCV9fc2tiX3B1dChzYXJiLCBBVE1fQ0VMTF9QQVlMT0FEKTsKKworCQlpZiAocHRpKSB7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQkJdW5zaWduZWQgaW50IGxlbmd0aDsKKwkJCXVuc2lnbmVkIGludCBwZHVfbGVuZ3RoOworCisJCQlsZW5ndGggPSAoc291cmNlW0FUTV9DRUxMX1NJWkUgLSA2XSA8PCA4KSArIHNvdXJjZVtBVE1fQ0VMTF9TSVpFIC0gNV07CisKKwkJCS8qIGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3cgKi8KKwkJCWlmIChsZW5ndGggPiBBVE1fTUFYX0FBTDVfUERVKSB7CisJCQkJZGJnKCJ1ZHNsX2V4dHJhY3RfY2VsbHM6IGJvZ3VzIGxlbmd0aCAldSAodmNjOiAweCVwKSEiLCBsZW5ndGgsIHZjYyk7CisJCQkJYXRvbWljX2luYygmdmNjLT5zdGF0cy0+cnhfZXJyKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJcGR1X2xlbmd0aCA9IFVEU0xfTlVNX0NFTExTKGxlbmd0aCkgKiBBVE1fQ0VMTF9QQVlMT0FEOworCisJCQlpZiAoc2FyYi0+bGVuIDwgcGR1X2xlbmd0aCkgeworCQkJCWRiZygidWRzbF9leHRyYWN0X2NlbGxzOiBib2d1cyBwZHVfbGVuZ3RoICV1IChzYXJiLT5sZW46ICV1LCB2Y2M6IDB4JXApISIsIHBkdV9sZW5ndGgsIHNhcmItPmxlbiwgdmNjKTsKKwkJCQlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT5yeF9lcnIpOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQlpZiAoY3JjMzJfYmUofjAsIHNhcmItPnRhaWwgLSBwZHVfbGVuZ3RoLCBwZHVfbGVuZ3RoKSAhPSAweGM3MDRkZDdiKSB7CisJCQkJZGJnKCJ1ZHNsX2V4dHJhY3RfY2VsbHM6IHBhY2tldCBmYWlsZWQgY3JjIGNoZWNrICh2Y2M6IDB4JXApISIsIHZjYyk7CisJCQkJYXRvbWljX2luYygmdmNjLT5zdGF0cy0+cnhfZXJyKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJdmRiZygidWRzbF9leHRyYWN0X2NlbGxzOiBnb3QgcGFja2V0IChsZW5ndGg6ICV1LCBwZHVfbGVuZ3RoOiAldSwgdmNjOiAweCVwKSIsIGxlbmd0aCwgcGR1X2xlbmd0aCwgdmNjKTsKKworCQkJaWYgKCEoc2tiID0gZGV2X2FsbG9jX3NrYihsZW5ndGgpKSkgeworCQkJCWRiZygidWRzbF9leHRyYWN0X2NlbGxzOiBubyBtZW1vcnkgZm9yIHNrYiAobGVuZ3RoOiAldSkhIiwgbGVuZ3RoKTsKKwkJCQlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT5yeF9kcm9wKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJdmRiZygidWRzbF9leHRyYWN0X2NlbGxzOiBhbGxvY2F0ZWQgbmV3IHNrX2J1ZmYgKHNrYjogMHglcCwgc2tiLT50cnVlc2l6ZTogJXUpIiwgc2tiLCBza2ItPnRydWVzaXplKTsKKworCQkJaWYgKCFhdG1fY2hhcmdlKHZjYywgc2tiLT50cnVlc2l6ZSkpIHsKKwkJCQlkYmcoInVkc2xfZXh0cmFjdF9jZWxsczogZmFpbGVkIGF0bV9jaGFyZ2UgKHNrYi0+dHJ1ZXNpemU6ICV1KSEiLCBza2ItPnRydWVzaXplKTsKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQkJZ290byBvdXQ7CS8qIGF0bV9jaGFyZ2UgaW5jcmVtZW50cyByeF9kcm9wICovCisJCQl9CisKKwkJCW1lbWNweShza2ItPmRhdGEsIHNhcmItPnRhaWwgLSBwZHVfbGVuZ3RoLCBsZW5ndGgpOworCQkJX19za2JfcHV0KHNrYiwgbGVuZ3RoKTsKKworCQkJdmRiZygidWRzbF9leHRyYWN0X2NlbGxzOiBzZW5kaW5nIHNrYiAweCVwLCBza2ItPmxlbiAldSwgc2tiLT50cnVlc2l6ZSAldSIsIHNrYiwgc2tiLT5sZW4sIHNrYi0+dHJ1ZXNpemUpOworCisJCQlQQUNLRVRERUJVRyhza2ItPmRhdGEsIHNrYi0+bGVuKTsKKworCQkJdmNjLT5wdXNoKHZjYywgc2tiKTsKKworCQkJYXRvbWljX2luYygmdmNjLT5zdGF0cy0+cngpOworCQlvdXQ6CisJCQlza2JfdHJpbShzYXJiLCAwKTsKKwkJfQorCX0KK30KKworLyoqKioqKioqKioqKioKKyoqICBlbmNvZGUgICoqCisqKioqKioqKioqKioqLworCitzdGF0aWMgaW5saW5lIHZvaWQgdWRzbF9maWxsX2NlbGxfaGVhZGVyKHVuc2lnbmVkIGNoYXIgKnRhcmdldCwgc3RydWN0IGF0bV92Y2MgKnZjYykKK3sKKwl0YXJnZXRbMF0gPSB2Y2MtPnZwaSA+PiA0OworCXRhcmdldFsxXSA9ICh2Y2MtPnZwaSA8PCA0KSB8ICh2Y2MtPnZjaSA+PiAxMik7CisJdGFyZ2V0WzJdID0gdmNjLT52Y2kgPj4gNDsKKwl0YXJnZXRbM10gPSB2Y2MtPnZjaSA8PCA0OworCXRhcmdldFs0XSA9IDB4ZWM7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHplcm9zW0FUTV9DRUxMX1BBWUxPQURdOworCitzdGF0aWMgdm9pZCB1ZHNsX2dyb29tX3NrYihzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCB1ZHNsX2NvbnRyb2wgKmN0cmwgPSBVRFNMX1NLQihza2IpOworCXVuc2lnbmVkIGludCB6ZXJvX3BhZGRpbmc7CisJdTMyIGNyYzsKKworCWN0cmwtPmF0bV9kYXRhLnZjYyA9IHZjYzsKKworCWN0cmwtPm51bV9jZWxscyA9IFVEU0xfTlVNX0NFTExTKHNrYi0+bGVuKTsKKwljdHJsLT5udW1fZW50aXJlID0gc2tiLT5sZW4gLyBBVE1fQ0VMTF9QQVlMT0FEOworCisJemVyb19wYWRkaW5nID0gY3RybC0+bnVtX2NlbGxzICogQVRNX0NFTExfUEFZTE9BRCAtIHNrYi0+bGVuIC0gQVRNX0FBTDVfVFJBSUxFUjsKKworCWlmIChjdHJsLT5udW1fZW50aXJlICsgMSA8IGN0cmwtPm51bV9jZWxscykKKwkJY3RybC0+cGR1X3BhZGRpbmcgPSB6ZXJvX3BhZGRpbmcgLSAoQVRNX0NFTExfUEFZTE9BRCAtIEFUTV9BQUw1X1RSQUlMRVIpOworCWVsc2UKKwkJY3RybC0+cGR1X3BhZGRpbmcgPSB6ZXJvX3BhZGRpbmc7CisKKwljdHJsLT5hYWw1X3RyYWlsZXJbMF0gPSAwOwkvKiBVVSA9IDAgKi8KKwljdHJsLT5hYWw1X3RyYWlsZXJbMV0gPSAwOwkvKiBDUEkgPSAwICovCisJY3RybC0+YWFsNV90cmFpbGVyWzJdID0gc2tiLT5sZW4gPj4gODsKKwljdHJsLT5hYWw1X3RyYWlsZXJbM10gPSBza2ItPmxlbjsKKworCWNyYyA9IGNyYzMyX2JlKH4wLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwljcmMgPSBjcmMzMl9iZShjcmMsIHplcm9zLCB6ZXJvX3BhZGRpbmcpOworCWNyYyA9IGNyYzMyX2JlKGNyYywgY3RybC0+YWFsNV90cmFpbGVyLCA0KTsKKwljcmMgPSB+Y3JjOworCisJY3RybC0+YWFsNV90cmFpbGVyWzRdID0gY3JjID4+IDI0OworCWN0cmwtPmFhbDVfdHJhaWxlcls1XSA9IGNyYyA+PiAxNjsKKwljdHJsLT5hYWw1X3RyYWlsZXJbNl0gPSBjcmMgPj4gODsKKwljdHJsLT5hYWw1X3RyYWlsZXJbN10gPSBjcmM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdWRzbF93cml0ZV9jZWxscyhzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBob3dtYW55LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgdW5zaWduZWQgY2hhciAqKnRhcmdldF9wKQoreworCXN0cnVjdCB1ZHNsX2NvbnRyb2wgKmN0cmwgPSBVRFNMX1NLQihza2IpOworCXVuc2lnbmVkIGNoYXIgKnRhcmdldCA9ICp0YXJnZXRfcDsKKwl1bnNpZ25lZCBpbnQgbmMsIG5lLCBpOworCisJdmRiZygidWRzbF93cml0ZV9jZWxsczogaG93bWFueT0ldSwgc2tiLT5sZW49JWQsIG51bV9jZWxscz0ldSwgbnVtX2VudGlyZT0ldSwgcGR1X3BhZGRpbmc9JXUiLCBob3dtYW55LCBza2ItPmxlbiwgY3RybC0+bnVtX2NlbGxzLCBjdHJsLT5udW1fZW50aXJlLCBjdHJsLT5wZHVfcGFkZGluZyk7CisKKwluYyA9IGN0cmwtPm51bV9jZWxsczsKKwluZSA9IG1pbihob3dtYW55LCBjdHJsLT5udW1fZW50aXJlKTsKKworCWZvciAoaSA9IDA7IGkgPCBuZTsgaSsrKSB7CisJCXVkc2xfZmlsbF9jZWxsX2hlYWRlcih0YXJnZXQsIGN0cmwtPmF0bV9kYXRhLnZjYyk7CisJCXRhcmdldCArPSBBVE1fQ0VMTF9IRUFERVI7CisJCW1lbWNweSh0YXJnZXQsIHNrYi0+ZGF0YSwgQVRNX0NFTExfUEFZTE9BRCk7CisJCXRhcmdldCArPSBBVE1fQ0VMTF9QQVlMT0FEOworCQlpZiAoaW5zdGFuY2UtPnNuZF9wYWRkaW5nKSB7CisJCQltZW1zZXQodGFyZ2V0LCAwLCBpbnN0YW5jZS0+c25kX3BhZGRpbmcpOworCQkJdGFyZ2V0ICs9IGluc3RhbmNlLT5zbmRfcGFkZGluZzsKKwkJfQorCQlfX3NrYl9wdWxsKHNrYiwgQVRNX0NFTExfUEFZTE9BRCk7CisJfQorCisJY3RybC0+bnVtX2VudGlyZSAtPSBuZTsKKworCWlmICghKGN0cmwtPm51bV9jZWxscyAtPSBuZSkgfHwgIShob3dtYW55IC09IG5lKSkKKwkJZ290byBvdXQ7CisKKwl1ZHNsX2ZpbGxfY2VsbF9oZWFkZXIodGFyZ2V0LCBjdHJsLT5hdG1fZGF0YS52Y2MpOworCXRhcmdldCArPSBBVE1fQ0VMTF9IRUFERVI7CisJbWVtY3B5KHRhcmdldCwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJdGFyZ2V0ICs9IHNrYi0+bGVuOworCV9fc2tiX3B1bGwoc2tiLCBza2ItPmxlbik7CisJbWVtc2V0KHRhcmdldCwgMCwgY3RybC0+cGR1X3BhZGRpbmcpOworCXRhcmdldCArPSBjdHJsLT5wZHVfcGFkZGluZzsKKworCWlmICgtLWN0cmwtPm51bV9jZWxscykgeworCQlpZiAoIS0taG93bWFueSkgeworCQkJY3RybC0+cGR1X3BhZGRpbmcgPSBBVE1fQ0VMTF9QQVlMT0FEIC0gQVRNX0FBTDVfVFJBSUxFUjsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKGluc3RhbmNlLT5zbmRfcGFkZGluZykgeworCQkJbWVtc2V0KHRhcmdldCwgMCwgaW5zdGFuY2UtPnNuZF9wYWRkaW5nKTsKKwkJCXRhcmdldCArPSBpbnN0YW5jZS0+c25kX3BhZGRpbmc7CisJCX0KKwkJdWRzbF9maWxsX2NlbGxfaGVhZGVyKHRhcmdldCwgY3RybC0+YXRtX2RhdGEudmNjKTsKKwkJdGFyZ2V0ICs9IEFUTV9DRUxMX0hFQURFUjsKKwkJbWVtc2V0KHRhcmdldCwgMCwgQVRNX0NFTExfUEFZTE9BRCAtIEFUTV9BQUw1X1RSQUlMRVIpOworCQl0YXJnZXQgKz0gQVRNX0NFTExfUEFZTE9BRCAtIEFUTV9BQUw1X1RSQUlMRVI7CisKKwkJLS1jdHJsLT5udW1fY2VsbHM7CisJCVVEU0xfQVNTRVJUKCFjdHJsLT5udW1fY2VsbHMpOworCX0KKworCW1lbWNweSh0YXJnZXQsIGN0cmwtPmFhbDVfdHJhaWxlciwgQVRNX0FBTDVfVFJBSUxFUik7CisJdGFyZ2V0ICs9IEFUTV9BQUw1X1RSQUlMRVI7CisJLyogc2V0IHB0aSBiaXQgaW4gbGFzdCBjZWxsICovCisJKih0YXJnZXQgKyAzIC0gQVRNX0NFTExfU0laRSkgfD0gMHgyOworCWlmIChpbnN0YW5jZS0+c25kX3BhZGRpbmcpIHsKKwkJbWVtc2V0KHRhcmdldCwgMCwgaW5zdGFuY2UtPnNuZF9wYWRkaW5nKTsKKwkJdGFyZ2V0ICs9IGluc3RhbmNlLT5zbmRfcGFkZGluZzsKKwl9Cisgb3V0OgorCSp0YXJnZXRfcCA9IHRhcmdldDsKKwlyZXR1cm4gbmMgLSBjdHJsLT5udW1fY2VsbHM7Cit9CisKKy8qKioqKioqKioqKioqKgorKiogIHJlY2VpdmUgICoqCisqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgdWRzbF9jb21wbGV0ZV9yZWNlaXZlKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVkc2xfcmVjZWl2ZV9idWZmZXIgKmJ1ZjsKKwlzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZTsKKwlzdHJ1Y3QgdWRzbF9yZWNlaXZlciAqcmN2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXVyYiB8fCAhKHJjdiA9IHVyYi0+Y29udGV4dCkpIHsKKwkJZGJnKCJ1ZHNsX2NvbXBsZXRlX3JlY2VpdmU6IGJhZCB1cmIhIik7CisJCXJldHVybjsKKwl9CisKKwlpbnN0YW5jZSA9IHJjdi0+aW5zdGFuY2U7CisJYnVmID0gcmN2LT5idWZmZXI7CisKKwlidWYtPmZpbGxlZF9jZWxscyA9IHVyYi0+YWN0dWFsX2xlbmd0aCAvIChBVE1fQ0VMTF9TSVpFICsgaW5zdGFuY2UtPnJjdl9wYWRkaW5nKTsKKworCXZkYmcoInVkc2xfY29tcGxldGVfcmVjZWl2ZTogdXJiIDB4JXAsIHN0YXR1cyAlZCwgYWN0dWFsX2xlbmd0aCAlZCwgZmlsbGVkX2NlbGxzICV1LCByY3YgMHglcCwgYnVmIDB4JXAiLCB1cmIsIHVyYi0+c3RhdHVzLCB1cmItPmFjdHVhbF9sZW5ndGgsIGJ1Zi0+ZmlsbGVkX2NlbGxzLCByY3YsIGJ1Zik7CisKKwlVRFNMX0FTU0VSVChidWYtPmZpbGxlZF9jZWxscyA8PSByY3ZfYnVmX3NpemUpOworCisJLyogbWF5IG5vdCBiZSBpbl9pbnRlcnJ1cHQoKSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+cmVjZWl2ZV9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGQoJnJjdi0+bGlzdCwgJmluc3RhbmNlLT5zcGFyZV9yZWNlaXZlcnMpOworCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+bGlzdCwgJmluc3RhbmNlLT5maWxsZWRfcmVjZWl2ZV9idWZmZXJzKTsKKwlpZiAobGlrZWx5KCF1cmItPnN0YXR1cykpCisJCXRhc2tsZXRfc2NoZWR1bGUoJmluc3RhbmNlLT5yZWNlaXZlX3Rhc2tsZXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5yZWNlaXZlX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgdWRzbF9wcm9jZXNzX3JlY2VpdmUodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCB1ZHNsX3JlY2VpdmVfYnVmZmVyICpidWY7CisJc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UgPSAoc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqKWRhdGE7CisJc3RydWN0IHVkc2xfcmVjZWl2ZXIgKnJjdjsKKwlpbnQgZXJyOworCisgbWFkZV9wcm9ncmVzczoKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmluc3RhbmNlLT5zcGFyZV9yZWNlaXZlX2J1ZmZlcnMpKSB7CisJCXNwaW5fbG9ja19pcnEoJmluc3RhbmNlLT5yZWNlaXZlX2xvY2spOworCQlpZiAobGlzdF9lbXB0eSgmaW5zdGFuY2UtPnNwYXJlX3JlY2VpdmVycykpIHsKKwkJCXNwaW5fdW5sb2NrX2lycSgmaW5zdGFuY2UtPnJlY2VpdmVfbG9jayk7CisJCQlicmVhazsKKwkJfQorCQlyY3YgPSBsaXN0X2VudHJ5KGluc3RhbmNlLT5zcGFyZV9yZWNlaXZlcnMubmV4dCwKKwkJCQkgc3RydWN0IHVkc2xfcmVjZWl2ZXIsIGxpc3QpOworCQlsaXN0X2RlbCgmcmN2LT5saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZpbnN0YW5jZS0+cmVjZWl2ZV9sb2NrKTsKKworCQlidWYgPSBsaXN0X2VudHJ5KGluc3RhbmNlLT5zcGFyZV9yZWNlaXZlX2J1ZmZlcnMubmV4dCwKKwkJCQkgc3RydWN0IHVkc2xfcmVjZWl2ZV9idWZmZXIsIGxpc3QpOworCQlsaXN0X2RlbCgmYnVmLT5saXN0KTsKKworCQlyY3YtPmJ1ZmZlciA9IGJ1ZjsKKworCQl1c2JfZmlsbF9idWxrX3VyYihyY3YtPnVyYiwgaW5zdGFuY2UtPnVzYl9kZXYsCisJCQkJICB1c2JfcmN2YnVsa3BpcGUoaW5zdGFuY2UtPnVzYl9kZXYsIGluc3RhbmNlLT5kYXRhX2VuZHBvaW50KSwKKwkJCQkgIGJ1Zi0+YmFzZSwKKwkJCQkgIHJjdl9idWZfc2l6ZSAqIChBVE1fQ0VMTF9TSVpFICsgaW5zdGFuY2UtPnJjdl9wYWRkaW5nKSwKKwkJCQkgIHVkc2xfY29tcGxldGVfcmVjZWl2ZSwgcmN2KTsKKworCQl2ZGJnKCJ1ZHNsX3Byb2Nlc3NfcmVjZWl2ZTogc2VuZGluZyB1cmIgMHglcCwgcmN2IDB4JXAsIGJ1ZiAweCVwIiwKKwkJICAgICByY3YtPnVyYiwgcmN2LCBidWYpOworCisJCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIocmN2LT51cmIsIEdGUF9BVE9NSUMpKSA8IDApIHsKKwkJCWRiZygidWRzbF9wcm9jZXNzX3JlY2VpdmU6IHVyYiBzdWJtaXNzaW9uIGZhaWxlZCAoJWQpISIsIGVycik7CisJCQlsaXN0X2FkZCgmYnVmLT5saXN0LCAmaW5zdGFuY2UtPnNwYXJlX3JlY2VpdmVfYnVmZmVycyk7CisJCQlzcGluX2xvY2tfaXJxKCZpbnN0YW5jZS0+cmVjZWl2ZV9sb2NrKTsKKwkJCWxpc3RfYWRkKCZyY3YtPmxpc3QsICZpbnN0YW5jZS0+c3BhcmVfcmVjZWl2ZXJzKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmaW5zdGFuY2UtPnJlY2VpdmVfbG9jayk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXNwaW5fbG9ja19pcnEoJmluc3RhbmNlLT5yZWNlaXZlX2xvY2spOworCWlmIChsaXN0X2VtcHR5KCZpbnN0YW5jZS0+ZmlsbGVkX3JlY2VpdmVfYnVmZmVycykpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZpbnN0YW5jZS0+cmVjZWl2ZV9sb2NrKTsKKwkJcmV0dXJuOwkJLyogZG9uZSAtIG5vIG1vcmUgYnVmZmVycyAqLworCX0KKwlidWYgPSBsaXN0X2VudHJ5KGluc3RhbmNlLT5maWxsZWRfcmVjZWl2ZV9idWZmZXJzLm5leHQsCisJCQkgc3RydWN0IHVkc2xfcmVjZWl2ZV9idWZmZXIsIGxpc3QpOworCWxpc3RfZGVsKCZidWYtPmxpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmaW5zdGFuY2UtPnJlY2VpdmVfbG9jayk7CisKKwl2ZGJnKCJ1ZHNsX3Byb2Nlc3NfcmVjZWl2ZTogcHJvY2Vzc2luZyBidWYgMHglcCIsIGJ1Zik7CisJdWRzbF9leHRyYWN0X2NlbGxzKGluc3RhbmNlLCBidWYtPmJhc2UsIGJ1Zi0+ZmlsbGVkX2NlbGxzKTsKKwlsaXN0X2FkZCgmYnVmLT5saXN0LCAmaW5zdGFuY2UtPnNwYXJlX3JlY2VpdmVfYnVmZmVycyk7CisJZ290byBtYWRlX3Byb2dyZXNzOworfQorCisvKioqKioqKioqKioKKyoqICBzZW5kICAqKgorKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIHVkc2xfY29tcGxldGVfc2VuZChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1ZHNsX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlOworCXN0cnVjdCB1ZHNsX3NlbmRlciAqc25kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXVyYiB8fCAhKHNuZCA9IHVyYi0+Y29udGV4dCkgfHwgIShpbnN0YW5jZSA9IHNuZC0+aW5zdGFuY2UpKSB7CisJCWRiZygidWRzbF9jb21wbGV0ZV9zZW5kOiBiYWQgdXJiISIpOworCQlyZXR1cm47CisJfQorCisJdmRiZygidWRzbF9jb21wbGV0ZV9zZW5kOiB1cmIgMHglcCwgc3RhdHVzICVkLCBzbmQgMHglcCwgYnVmIDB4JXAiLCB1cmIsCisJICAgICB1cmItPnN0YXR1cywgc25kLCBzbmQtPmJ1ZmZlcik7CisKKwkvKiBtYXkgbm90IGJlIGluX2ludGVycnVwdCgpICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmluc3RhbmNlLT5zZW5kX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmc25kLT5saXN0LCAmaW5zdGFuY2UtPnNwYXJlX3NlbmRlcnMpOworCWxpc3RfYWRkKCZzbmQtPmJ1ZmZlci0+bGlzdCwgJmluc3RhbmNlLT5zcGFyZV9zZW5kX2J1ZmZlcnMpOworCXRhc2tsZXRfc2NoZWR1bGUoJmluc3RhbmNlLT5zZW5kX3Rhc2tsZXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5zZW5kX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgdWRzbF9wcm9jZXNzX3NlbmQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCB1ZHNsX3NlbmRfYnVmZmVyICpidWY7CisJc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UgPSAoc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqKWRhdGE7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgdWRzbF9zZW5kZXIgKnNuZDsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGludCBudW1fd3JpdHRlbjsKKworIG1hZGVfcHJvZ3Jlc3M6CisJc3Bpbl9sb2NrX2lycSgmaW5zdGFuY2UtPnNlbmRfbG9jayk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZpbnN0YW5jZS0+c3BhcmVfc2VuZGVycykpIHsKKwkJaWYgKCFsaXN0X2VtcHR5KCZpbnN0YW5jZS0+ZmlsbGVkX3NlbmRfYnVmZmVycykpIHsKKwkJCWJ1ZiA9IGxpc3RfZW50cnkoaW5zdGFuY2UtPmZpbGxlZF9zZW5kX2J1ZmZlcnMubmV4dCwKKwkJCQkJIHN0cnVjdCB1ZHNsX3NlbmRfYnVmZmVyLCBsaXN0KTsKKwkJCWxpc3RfZGVsKCZidWYtPmxpc3QpOworCQl9IGVsc2UgaWYgKChidWYgPSBpbnN0YW5jZS0+Y3VycmVudF9idWZmZXIpKSB7CisJCQlpbnN0YW5jZS0+Y3VycmVudF9idWZmZXIgPSBOVUxMOworCQl9IGVsc2UJCS8qIGFsbCBidWZmZXJzIGVtcHR5ICovCisJCQlicmVhazsKKworCQlzbmQgPSBsaXN0X2VudHJ5KGluc3RhbmNlLT5zcGFyZV9zZW5kZXJzLm5leHQsCisJCQkJIHN0cnVjdCB1ZHNsX3NlbmRlciwgbGlzdCk7CisJCWxpc3RfZGVsKCZzbmQtPmxpc3QpOworCQlzcGluX3VubG9ja19pcnEoJmluc3RhbmNlLT5zZW5kX2xvY2spOworCisJCXNuZC0+YnVmZmVyID0gYnVmOworCQl1c2JfZmlsbF9idWxrX3VyYihzbmQtPnVyYiwgaW5zdGFuY2UtPnVzYl9kZXYsCisJCQkJICB1c2Jfc25kYnVsa3BpcGUoaW5zdGFuY2UtPnVzYl9kZXYsIGluc3RhbmNlLT5kYXRhX2VuZHBvaW50KSwKKwkJCQkgIGJ1Zi0+YmFzZSwKKwkJCQkgIChzbmRfYnVmX3NpemUgLSBidWYtPmZyZWVfY2VsbHMpICogKEFUTV9DRUxMX1NJWkUgKyBpbnN0YW5jZS0+c25kX3BhZGRpbmcpLAorCQkJCSAgdWRzbF9jb21wbGV0ZV9zZW5kLCBzbmQpOworCisJCXZkYmcoInVkc2xfcHJvY2Vzc19zZW5kOiBzdWJtaXR0aW5nIHVyYiAweCVwICglZCBjZWxscyksIHNuZCAweCVwLCBidWYgMHglcCIsCisJCSAgICAgc25kLT51cmIsIHNuZF9idWZfc2l6ZSAtIGJ1Zi0+ZnJlZV9jZWxscywgc25kLCBidWYpOworCisJCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIoc25kLT51cmIsIEdGUF9BVE9NSUMpKSA8IDApIHsKKwkJCWRiZygidWRzbF9wcm9jZXNzX3NlbmQ6IHVyYiBzdWJtaXNzaW9uIGZhaWxlZCAoJWQpISIsIGVycik7CisJCQlzcGluX2xvY2tfaXJxKCZpbnN0YW5jZS0+c2VuZF9sb2NrKTsKKwkJCWxpc3RfYWRkKCZzbmQtPmxpc3QsICZpbnN0YW5jZS0+c3BhcmVfc2VuZGVycyk7CisJCQlzcGluX3VubG9ja19pcnEoJmluc3RhbmNlLT5zZW5kX2xvY2spOworCQkJbGlzdF9hZGQoJmJ1Zi0+bGlzdCwgJmluc3RhbmNlLT5maWxsZWRfc2VuZF9idWZmZXJzKTsKKwkJCXJldHVybjsJLyogYmFpbCBvdXQgKi8KKwkJfQorCisJCXNwaW5fbG9ja19pcnEoJmluc3RhbmNlLT5zZW5kX2xvY2spOworCX0JCQkvKiB3aGlsZSAqLworCXNwaW5fdW5sb2NrX2lycSgmaW5zdGFuY2UtPnNlbmRfbG9jayk7CisKKwlpZiAoIWluc3RhbmNlLT5jdXJyZW50X3NrYikKKwkJaW5zdGFuY2UtPmN1cnJlbnRfc2tiID0gc2tiX2RlcXVldWUoJmluc3RhbmNlLT5zbmRxdWV1ZSk7CisJaWYgKCFpbnN0YW5jZS0+Y3VycmVudF9za2IpCisJCXJldHVybjsJCS8qIGRvbmUgLSBubyBtb3JlIHNrYnMgKi8KKworCXNrYiA9IGluc3RhbmNlLT5jdXJyZW50X3NrYjsKKworCWlmICghKGJ1ZiA9IGluc3RhbmNlLT5jdXJyZW50X2J1ZmZlcikpIHsKKwkJc3Bpbl9sb2NrX2lycSgmaW5zdGFuY2UtPnNlbmRfbG9jayk7CisJCWlmIChsaXN0X2VtcHR5KCZpbnN0YW5jZS0+c3BhcmVfc2VuZF9idWZmZXJzKSkgeworCQkJaW5zdGFuY2UtPmN1cnJlbnRfYnVmZmVyID0gTlVMTDsKKwkJCXNwaW5fdW5sb2NrX2lycSgmaW5zdGFuY2UtPnNlbmRfbG9jayk7CisJCQlyZXR1cm47CS8qIGRvbmUgLSBubyBtb3JlIGJ1ZmZlcnMgKi8KKwkJfQorCQlidWYgPSBsaXN0X2VudHJ5KGluc3RhbmNlLT5zcGFyZV9zZW5kX2J1ZmZlcnMubmV4dCwKKwkJCSAgICAgICBzdHJ1Y3QgdWRzbF9zZW5kX2J1ZmZlciwgbGlzdCk7CisJCWxpc3RfZGVsKCZidWYtPmxpc3QpOworCQlzcGluX3VubG9ja19pcnEoJmluc3RhbmNlLT5zZW5kX2xvY2spOworCisJCWJ1Zi0+ZnJlZV9zdGFydCA9IGJ1Zi0+YmFzZTsKKwkJYnVmLT5mcmVlX2NlbGxzID0gc25kX2J1Zl9zaXplOworCisJCWluc3RhbmNlLT5jdXJyZW50X2J1ZmZlciA9IGJ1ZjsKKwl9CisKKwludW1fd3JpdHRlbiA9IHVkc2xfd3JpdGVfY2VsbHMoaW5zdGFuY2UsIGJ1Zi0+ZnJlZV9jZWxscywgc2tiLCAmYnVmLT5mcmVlX3N0YXJ0KTsKKworCXZkYmcoInVkc2xfcHJvY2Vzc19zZW5kOiB3cm90ZSAldSBjZWxscyBmcm9tIHNrYiAweCVwIHRvIGJ1ZmZlciAweCVwIiwKKwkgICAgIG51bV93cml0dGVuLCBza2IsIGJ1Zik7CisKKwlpZiAoIShidWYtPmZyZWVfY2VsbHMgLT0gbnVtX3dyaXR0ZW4pKSB7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+bGlzdCwgJmluc3RhbmNlLT5maWxsZWRfc2VuZF9idWZmZXJzKTsKKwkJaW5zdGFuY2UtPmN1cnJlbnRfYnVmZmVyID0gTlVMTDsKKwl9CisKKwl2ZGJnKCJ1ZHNsX3Byb2Nlc3Nfc2VuZDogYnVmZmVyIGNvbnRhaW5zICVkIGNlbGxzLCAlZCBsZWZ0IiwKKwkgICAgIHNuZF9idWZfc2l6ZSAtIGJ1Zi0+ZnJlZV9jZWxscywgYnVmLT5mcmVlX2NlbGxzKTsKKworCWlmICghVURTTF9TS0Ioc2tiKS0+bnVtX2NlbGxzKSB7CisJCXN0cnVjdCBhdG1fdmNjICp2Y2MgPSBVRFNMX1NLQihza2IpLT5hdG1fZGF0YS52Y2M7CisKKwkJdWRzbF9wb3AodmNjLCBza2IpOworCQlpbnN0YW5jZS0+Y3VycmVudF9za2IgPSBOVUxMOworCisJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnR4KTsKKwl9CisKKwlnb3RvIG1hZGVfcHJvZ3Jlc3M7Cit9CisKK3N0YXRpYyB2b2lkIHVkc2xfY2FuY2VsX3NlbmQoc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UsCisJCQkgICAgIHN0cnVjdCBhdG1fdmNjICp2Y2MpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm47CisKKwlkYmcoInVkc2xfY2FuY2VsX3NlbmQgZW50ZXJlZCIpOworCXNwaW5fbG9ja19pcnEoJmluc3RhbmNlLT5zbmRxdWV1ZS5sb2NrKTsKKwlmb3IgKHNrYiA9IGluc3RhbmNlLT5zbmRxdWV1ZS5uZXh0LCBuID0gc2tiLT5uZXh0OworCSAgICAgc2tiICE9IChzdHJ1Y3Qgc2tfYnVmZiAqKSZpbnN0YW5jZS0+c25kcXVldWU7CisJICAgICBza2IgPSBuLCBuID0gc2tiLT5uZXh0KQorCQlpZiAoVURTTF9TS0Ioc2tiKS0+YXRtX2RhdGEudmNjID09IHZjYykgeworCQkJZGJnKCJ1ZHNsX2NhbmNlbF9zZW5kOiBwb3BwaW5nIHNrYiAweCVwIiwgc2tiKTsKKwkJCV9fc2tiX3VubGluayhza2IsICZpbnN0YW5jZS0+c25kcXVldWUpOworCQkJdWRzbF9wb3AodmNjLCBza2IpOworCQl9CisJc3Bpbl91bmxvY2tfaXJxKCZpbnN0YW5jZS0+c25kcXVldWUubG9jayk7CisKKwl0YXNrbGV0X2Rpc2FibGUoJmluc3RhbmNlLT5zZW5kX3Rhc2tsZXQpOworCWlmICgoc2tiID0gaW5zdGFuY2UtPmN1cnJlbnRfc2tiKSAmJiAoVURTTF9TS0Ioc2tiKS0+YXRtX2RhdGEudmNjID09IHZjYykpIHsKKwkJZGJnKCJ1ZHNsX2NhbmNlbF9zZW5kOiBwb3BwaW5nIGN1cnJlbnQgc2tiICgweCVwKSIsIHNrYik7CisJCWluc3RhbmNlLT5jdXJyZW50X3NrYiA9IE5VTEw7CisJCXVkc2xfcG9wKHZjYywgc2tiKTsKKwl9CisJdGFza2xldF9lbmFibGUoJmluc3RhbmNlLT5zZW5kX3Rhc2tsZXQpOworCWRiZygidWRzbF9jYW5jZWxfc2VuZCBkb25lIik7Cit9CisKK3N0YXRpYyBpbnQgdWRzbF9hdG1fc2VuZChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCB1ZHNsX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlID0gdmNjLT5kZXYtPmRldl9kYXRhOworCWludCBlcnI7CisKKwl2ZGJnKCJ1ZHNsX2F0bV9zZW5kIGNhbGxlZCAoc2tiIDB4JXAsIGxlbiAldSkiLCBza2IsIHNrYi0+bGVuKTsKKworCWlmICghaW5zdGFuY2UpIHsKKwkJZGJnKCJ1ZHNsX2F0bV9zZW5kOiBOVUxMIGRhdGEhIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlpZiAodmNjLT5xb3MuYWFsICE9IEFUTV9BQUw1KSB7CisJCWRiZygidWRzbF9hdG1fc2VuZDogdW5zdXBwb3J0ZWQgQVRNIHR5cGUgJWQhIiwgdmNjLT5xb3MuYWFsKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBmYWlsOworCX0KKworCWlmIChza2ItPmxlbiA+IEFUTV9NQVhfQUFMNV9QRFUpIHsKKwkJZGJnKCJ1ZHNsX2F0bV9zZW5kOiBwYWNrZXQgdG9vIGxvbmcgKCVkIHZzICVkKSEiLCBza2ItPmxlbiwKKwkJICAgIEFUTV9NQVhfQUFMNV9QRFUpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGZhaWw7CisJfQorCisJUEFDS0VUREVCVUcoc2tiLT5kYXRhLCBza2ItPmxlbik7CisKKwl1ZHNsX2dyb29tX3NrYih2Y2MsIHNrYik7CisJc2tiX3F1ZXVlX3RhaWwoJmluc3RhbmNlLT5zbmRxdWV1ZSwgc2tiKTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZpbnN0YW5jZS0+c2VuZF90YXNrbGV0KTsKKworCXJldHVybiAwOworCisgZmFpbDoKKwl1ZHNsX3BvcCh2Y2MsIHNrYik7CisJcmV0dXJuIGVycjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqCisqKiAgYmVhbiBjb3VudGluZyAgKioKKyoqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCB1ZHNsX2Rlc3Ryb3lfaW5zdGFuY2Uoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UgPQorCSAgICBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSwgcmVmY291bnQpOworCisJdGFza2xldF9raWxsKCZpbnN0YW5jZS0+cmVjZWl2ZV90YXNrbGV0KTsKKwl0YXNrbGV0X2tpbGwoJmluc3RhbmNlLT5zZW5kX3Rhc2tsZXQpOworCXVzYl9wdXRfZGV2KGluc3RhbmNlLT51c2JfZGV2KTsKKwlrZnJlZShpbnN0YW5jZSk7Cit9CisKK3ZvaWQgdWRzbF9nZXRfaW5zdGFuY2Uoc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UpCit7CisJa3JlZl9nZXQoJmluc3RhbmNlLT5yZWZjb3VudCk7Cit9CisKK3ZvaWQgdWRzbF9wdXRfaW5zdGFuY2Uoc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UpCit7CisJa3JlZl9wdXQoJmluc3RhbmNlLT5yZWZjb3VudCwgdWRzbF9kZXN0cm95X2luc3RhbmNlKTsKK30KKworLyoqKioqKioqKioKKyoqICBBVE0gICoqCisqKioqKioqKioqLworCitzdGF0aWMgdm9pZCB1ZHNsX2F0bV9kZXZfY2xvc2Uoc3RydWN0IGF0bV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSA9IGRldi0+ZGV2X2RhdGE7CisKKwlkZXYtPmRldl9kYXRhID0gTlVMTDsKKwl1ZHNsX3B1dF9pbnN0YW5jZShpbnN0YW5jZSk7Cit9CisKK3N0YXRpYyBpbnQgdWRzbF9hdG1fcHJvY19yZWFkKHN0cnVjdCBhdG1fZGV2ICphdG1fZGV2LCBsb2ZmX3QgKiBwb3MsIGNoYXIgKnBhZ2UpCit7CisJc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UgPSBhdG1fZGV2LT5kZXZfZGF0YTsKKwlpbnQgbGVmdCA9ICpwb3M7CisKKwlpZiAoIWluc3RhbmNlKSB7CisJCWRiZygidWRzbF9hdG1fcHJvY19yZWFkOiBOVUxMIGluc3RhbmNlISIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoIWxlZnQtLSkKKwkJcmV0dXJuIHNwcmludGYocGFnZSwgIiVzXG4iLCBpbnN0YW5jZS0+ZGVzY3JpcHRpb24pOworCisJaWYgKCFsZWZ0LS0pCisJCXJldHVybiBzcHJpbnRmKHBhZ2UsICJNQUM6ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJICAgICAgIGF0bV9kZXYtPmVzaVswXSwgYXRtX2Rldi0+ZXNpWzFdLAorCQkJICAgICAgIGF0bV9kZXYtPmVzaVsyXSwgYXRtX2Rldi0+ZXNpWzNdLAorCQkJICAgICAgIGF0bV9kZXYtPmVzaVs0XSwgYXRtX2Rldi0+ZXNpWzVdKTsKKworCWlmICghbGVmdC0tKQorCQlyZXR1cm4gc3ByaW50ZihwYWdlLAorCQkJICAgICAgICJBQUw1OiB0eCAlZCAoICVkIGVyciApLCByeCAlZCAoICVkIGVyciwgJWQgZHJvcCApXG4iLAorCQkJICAgICAgIGF0b21pY19yZWFkKCZhdG1fZGV2LT5zdGF0cy5hYWw1LnR4KSwKKwkJCSAgICAgICBhdG9taWNfcmVhZCgmYXRtX2Rldi0+c3RhdHMuYWFsNS50eF9lcnIpLAorCQkJICAgICAgIGF0b21pY19yZWFkKCZhdG1fZGV2LT5zdGF0cy5hYWw1LnJ4KSwKKwkJCSAgICAgICBhdG9taWNfcmVhZCgmYXRtX2Rldi0+c3RhdHMuYWFsNS5yeF9lcnIpLAorCQkJICAgICAgIGF0b21pY19yZWFkKCZhdG1fZGV2LT5zdGF0cy5hYWw1LnJ4X2Ryb3ApKTsKKworCWlmICghbGVmdC0tKSB7CisJCXN3aXRjaCAoYXRtX2Rldi0+c2lnbmFsKSB7CisJCWNhc2UgQVRNX1BIWV9TSUdfRk9VTkQ6CisJCQlzcHJpbnRmKHBhZ2UsICJMaW5lIHVwIik7CisJCQlicmVhazsKKwkJY2FzZSBBVE1fUEhZX1NJR19MT1NUOgorCQkJc3ByaW50ZihwYWdlLCAiTGluZSBkb3duIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNwcmludGYocGFnZSwgIkxpbmUgc3RhdGUgdW5rbm93biIpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaW5zdGFuY2UtPnVzYl9kZXYtPnN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCkKKwkJCXN0cmNhdChwYWdlLCAiLCBkaXNjb25uZWN0ZWRcbiIpOworCQllbHNlIHsKKwkJCWlmIChpbnN0YW5jZS0+c3RhdHVzID09IFVEU0xfTE9BREVEX0ZJUk1XQVJFKQorCQkJCXN0cmNhdChwYWdlLCAiLCBmaXJtd2FyZSBsb2FkZWRcbiIpOworCQkJZWxzZSBpZiAoaW5zdGFuY2UtPnN0YXR1cyA9PSBVRFNMX0xPQURJTkdfRklSTVdBUkUpCisJCQkJc3RyY2F0KHBhZ2UsICIsIGZpcm13YXJlIGxvYWRpbmdcbiIpOworCQkJZWxzZQorCQkJCXN0cmNhdChwYWdlLCAiLCBubyBmaXJtd2FyZVxuIik7CisJCX0KKworCQlyZXR1cm4gc3RybGVuKHBhZ2UpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVkc2xfYXRtX29wZW4oc3RydWN0IGF0bV92Y2MgKnZjYykKK3sKKwlzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSA9IHZjYy0+ZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3QgdWRzbF92Y2NfZGF0YSAqbmV3OworCXVuc2lnbmVkIGludCBtYXhfcGR1OworCWludCB2Y2kgPSB2Y2MtPnZjaTsKKwlzaG9ydCB2cGkgPSB2Y2MtPnZwaTsKKwlpbnQgZXJyOworCisJZGJnKCJ1ZHNsX2F0bV9vcGVuOiB2cGkgJWhkLCB2Y2kgJWQiLCB2cGksIHZjaSk7CisKKwlpZiAoIWluc3RhbmNlKSB7CisJCWRiZygidWRzbF9hdG1fb3BlbjogTlVMTCBkYXRhISIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBvbmx5IHN1cHBvcnQgQUFMNSAqLworCWlmICgodmNjLT5xb3MuYWFsICE9IEFUTV9BQUw1KSB8fCAodmNjLT5xb3Mucnh0cC5tYXhfc2R1IDwgMCkKKwkgICAgfHwgKHZjYy0+cW9zLnJ4dHAubWF4X3NkdSA+IEFUTV9NQVhfQUFMNV9QRFUpKSB7CisJCWRiZygidWRzbF9hdG1fb3BlbjogdW5zdXBwb3J0ZWQgQVRNIHR5cGUgJWQhIiwgdmNjLT5xb3MuYWFsKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGluc3RhbmNlLT5maXJtd2FyZV93YWl0ICYmCisJICAgIChlcnIgPSBpbnN0YW5jZS0+ZmlybXdhcmVfd2FpdChpbnN0YW5jZSkpIDwgMCkgeworCQlkYmcoInVkc2xfYXRtX29wZW46IGZpcm13YXJlIG5vdCBsb2FkZWQgKCVkKSEiLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWRvd24oJmluc3RhbmNlLT5zZXJpYWxpemUpOwkvKiB2cyBzZWxmLCB1ZHNsX2F0bV9jbG9zZSAqLworCisJaWYgKHVkc2xfZmluZF92Y2MoaW5zdGFuY2UsIHZwaSwgdmNpKSkgeworCQlkYmcoInVkc2xfYXRtX29wZW46ICVoZC8lZCBhbHJlYWR5IGluIHVzZSEiLCB2cGksIHZjaSk7CisJCXVwKCZpbnN0YW5jZS0+c2VyaWFsaXplKTsKKwkJcmV0dXJuIC1FQUREUklOVVNFOworCX0KKworCWlmICghKG5ldyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1ZHNsX3ZjY19kYXRhKSwgR0ZQX0tFUk5FTCkpKSB7CisJCWRiZygidWRzbF9hdG1fb3Blbjogbm8gbWVtb3J5IGZvciB2Y2NfZGF0YSEiKTsKKwkJdXAoJmluc3RhbmNlLT5zZXJpYWxpemUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1zZXQobmV3LCAwLCBzaXplb2Yoc3RydWN0IHVkc2xfdmNjX2RhdGEpKTsKKwluZXctPnZjYyA9IHZjYzsKKwluZXctPnZwaSA9IHZwaTsKKwluZXctPnZjaSA9IHZjaTsKKworCS8qIHVkc2xfZXh0cmFjdF9jZWxscyByZXF1aXJlcyBhdCBsZWFzdCBvbmUgY2VsbCAqLworCW1heF9wZHUgPSBtYXgoMSwgVURTTF9OVU1fQ0VMTFModmNjLT5xb3Mucnh0cC5tYXhfc2R1KSkgKiBBVE1fQ0VMTF9QQVlMT0FEOworCWlmICghKG5ldy0+c2FyYiA9IGFsbG9jX3NrYihtYXhfcGR1LCBHRlBfS0VSTkVMKSkpIHsKKwkJZGJnKCJ1ZHNsX2F0bV9vcGVuOiBubyBtZW1vcnkgZm9yIFNBUiBidWZmZXIhIik7CisJCWtmcmVlKG5ldyk7CisJCXVwKCZpbnN0YW5jZS0+c2VyaWFsaXplKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdmNjLT5kZXZfZGF0YSA9IG5ldzsKKworCXRhc2tsZXRfZGlzYWJsZSgmaW5zdGFuY2UtPnJlY2VpdmVfdGFza2xldCk7CisJbGlzdF9hZGQoJm5ldy0+bGlzdCwgJmluc3RhbmNlLT52Y2NfbGlzdCk7CisJdGFza2xldF9lbmFibGUoJmluc3RhbmNlLT5yZWNlaXZlX3Rhc2tsZXQpOworCisJc2V0X2JpdChBVE1fVkZfQUREUiwgJnZjYy0+ZmxhZ3MpOworCXNldF9iaXQoQVRNX1ZGX1BBUlRJQUwsICZ2Y2MtPmZsYWdzKTsKKwlzZXRfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpOworCisJdXAoJmluc3RhbmNlLT5zZXJpYWxpemUpOworCisJdGFza2xldF9zY2hlZHVsZSgmaW5zdGFuY2UtPnJlY2VpdmVfdGFza2xldCk7CisKKwlkYmcoInVkc2xfYXRtX29wZW46IGFsbG9jYXRlZCB2Y2MgZGF0YSAweCVwIChtYXhfcGR1OiAldSkiLCBuZXcsIG1heF9wZHUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVkc2xfYXRtX2Nsb3NlKHN0cnVjdCBhdG1fdmNjICp2Y2MpCit7CisJc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UgPSB2Y2MtPmRldi0+ZGV2X2RhdGE7CisJc3RydWN0IHVkc2xfdmNjX2RhdGEgKnZjY19kYXRhID0gdmNjLT5kZXZfZGF0YTsKKworCWRiZygidWRzbF9hdG1fY2xvc2UgY2FsbGVkIik7CisKKwlpZiAoIWluc3RhbmNlIHx8ICF2Y2NfZGF0YSkgeworCQlkYmcoInVkc2xfYXRtX2Nsb3NlOiBOVUxMIGRhdGEhIik7CisJCXJldHVybjsKKwl9CisKKwlkYmcoInVkc2xfYXRtX2Nsb3NlOiBkZWFsbG9jYXRpbmcgdmNjIDB4JXAgd2l0aCB2cGkgJWQgdmNpICVkIiwKKwkgICAgdmNjX2RhdGEsIHZjY19kYXRhLT52cGksIHZjY19kYXRhLT52Y2kpOworCisJdWRzbF9jYW5jZWxfc2VuZChpbnN0YW5jZSwgdmNjKTsKKworCWRvd24oJmluc3RhbmNlLT5zZXJpYWxpemUpOwkvKiB2cyBzZWxmLCB1ZHNsX2F0bV9vcGVuICovCisKKwl0YXNrbGV0X2Rpc2FibGUoJmluc3RhbmNlLT5yZWNlaXZlX3Rhc2tsZXQpOworCWxpc3RfZGVsKCZ2Y2NfZGF0YS0+bGlzdCk7CisJdGFza2xldF9lbmFibGUoJmluc3RhbmNlLT5yZWNlaXZlX3Rhc2tsZXQpOworCisJa2ZyZWVfc2tiKHZjY19kYXRhLT5zYXJiKTsKKwl2Y2NfZGF0YS0+c2FyYiA9IE5VTEw7CisKKwlrZnJlZSh2Y2NfZGF0YSk7CisJdmNjLT5kZXZfZGF0YSA9IE5VTEw7CisKKwl2Y2MtPnZwaSA9IEFUTV9WUElfVU5TUEVDOworCXZjYy0+dmNpID0gQVRNX1ZDSV9VTlNQRUM7CisJY2xlYXJfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpOworCWNsZWFyX2JpdChBVE1fVkZfUEFSVElBTCwgJnZjYy0+ZmxhZ3MpOworCWNsZWFyX2JpdChBVE1fVkZfQUREUiwgJnZjYy0+ZmxhZ3MpOworCisJdXAoJmluc3RhbmNlLT5zZXJpYWxpemUpOworCisJZGJnKCJ1ZHNsX2F0bV9jbG9zZSBzdWNjZXNzZnVsIik7Cit9CisKK3N0YXRpYyBpbnQgdWRzbF9hdG1faW9jdGwoc3RydWN0IGF0bV9kZXYgKmRldiwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgdm9pZCBfX3VzZXIgKiBhcmcpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEFUTV9RVUVSWUxPT1A6CisJCXJldHVybiBwdXRfdXNlcihBVE1fTE1fTk9ORSwgKGludCBfX3VzZXIgKilhcmcpID8gLUVGQVVMVCA6IDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9Cit9CisKKy8qKioqKioqKioqCisqKiAgVVNCICAqKgorKioqKioqKioqKi8KKworaW50IHVkc2xfaW5zdGFuY2Vfc2V0dXAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCB1ZHNsX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlKQoreworCWNoYXIgKmJ1ZjsKKwlpbnQgaSwgbGVuZ3RoOworCisJa3JlZl9pbml0KCZpbnN0YW5jZS0+cmVmY291bnQpOwkvKiBvbmUgZm9yIFVTQiAqLworCXVkc2xfZ2V0X2luc3RhbmNlKGluc3RhbmNlKTsJLyogb25lIGZvciBBVE0gKi8KKworCWluaXRfTVVURVgoJmluc3RhbmNlLT5zZXJpYWxpemUpOworCisJaW5zdGFuY2UtPnVzYl9kZXYgPSBkZXY7CisKKwlJTklUX0xJU1RfSEVBRCgmaW5zdGFuY2UtPnZjY19saXN0KTsKKworCWluc3RhbmNlLT5zdGF0dXMgPSBVRFNMX05PX0ZJUk1XQVJFOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluc3RhbmNlLT5maXJtd2FyZV93YWl0ZXJzKTsKKworCXNwaW5fbG9ja19pbml0KCZpbnN0YW5jZS0+cmVjZWl2ZV9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmaW5zdGFuY2UtPnNwYXJlX3JlY2VpdmVycyk7CisJSU5JVF9MSVNUX0hFQUQoJmluc3RhbmNlLT5maWxsZWRfcmVjZWl2ZV9idWZmZXJzKTsKKworCXRhc2tsZXRfaW5pdCgmaW5zdGFuY2UtPnJlY2VpdmVfdGFza2xldCwgdWRzbF9wcm9jZXNzX3JlY2VpdmUsICh1bnNpZ25lZCBsb25nKWluc3RhbmNlKTsKKwlJTklUX0xJU1RfSEVBRCgmaW5zdGFuY2UtPnNwYXJlX3JlY2VpdmVfYnVmZmVycyk7CisKKwlza2JfcXVldWVfaGVhZF9pbml0KCZpbnN0YW5jZS0+c25kcXVldWUpOworCisJc3Bpbl9sb2NrX2luaXQoJmluc3RhbmNlLT5zZW5kX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZpbnN0YW5jZS0+c3BhcmVfc2VuZGVycyk7CisJSU5JVF9MSVNUX0hFQUQoJmluc3RhbmNlLT5zcGFyZV9zZW5kX2J1ZmZlcnMpOworCisJdGFza2xldF9pbml0KCZpbnN0YW5jZS0+c2VuZF90YXNrbGV0LCB1ZHNsX3Byb2Nlc3Nfc2VuZCwKKwkJICAgICAodW5zaWduZWQgbG9uZylpbnN0YW5jZSk7CisJSU5JVF9MSVNUX0hFQUQoJmluc3RhbmNlLT5maWxsZWRfc2VuZF9idWZmZXJzKTsKKworCS8qIHJlY2VpdmUgaW5pdCAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fcmN2X3VyYnM7IGkrKykgeworCQlzdHJ1Y3QgdWRzbF9yZWNlaXZlciAqcmN2ID0gJihpbnN0YW5jZS0+cmVjZWl2ZXJzW2ldKTsKKworCQlpZiAoIShyY3YtPnVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCkpKSB7CisJCQlkYmcoInVkc2xfdXNiX3Byb2JlOiBubyBtZW1vcnkgZm9yIHJlY2VpdmUgdXJiICVkISIsIGkpOworCQkJZ290byBmYWlsOworCQl9CisKKwkJcmN2LT5pbnN0YW5jZSA9IGluc3RhbmNlOworCisJCWxpc3RfYWRkKCZyY3YtPmxpc3QsICZpbnN0YW5jZS0+c3BhcmVfcmVjZWl2ZXJzKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Jjdl9idWZzOyBpKyspIHsKKwkJc3RydWN0IHVkc2xfcmVjZWl2ZV9idWZmZXIgKmJ1ZiA9CisJCSAgICAmKGluc3RhbmNlLT5yZWNlaXZlX2J1ZmZlcnNbaV0pOworCisJCWJ1Zi0+YmFzZSA9IGttYWxsb2MocmN2X2J1Zl9zaXplICogKEFUTV9DRUxMX1NJWkUgKyBpbnN0YW5jZS0+cmN2X3BhZGRpbmcpLAorCQkJCSAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFidWYtPmJhc2UpIHsKKwkJCWRiZygidWRzbF91c2JfcHJvYmU6IG5vIG1lbW9yeSBmb3IgcmVjZWl2ZSBidWZmZXIgJWQhIiwgaSk7CisJCQlnb3RvIGZhaWw7CisJCX0KKworCQlsaXN0X2FkZCgmYnVmLT5saXN0LCAmaW5zdGFuY2UtPnNwYXJlX3JlY2VpdmVfYnVmZmVycyk7CisJfQorCisJLyogc2VuZCBpbml0ICovCisJZm9yIChpID0gMDsgaSA8IG51bV9zbmRfdXJiczsgaSsrKSB7CisJCXN0cnVjdCB1ZHNsX3NlbmRlciAqc25kID0gJihpbnN0YW5jZS0+c2VuZGVyc1tpXSk7CisKKwkJaWYgKCEoc25kLT51cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpKSkgeworCQkJZGJnKCJ1ZHNsX3VzYl9wcm9iZTogbm8gbWVtb3J5IGZvciBzZW5kIHVyYiAlZCEiLCBpKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCXNuZC0+aW5zdGFuY2UgPSBpbnN0YW5jZTsKKworCQlsaXN0X2FkZCgmc25kLT5saXN0LCAmaW5zdGFuY2UtPnNwYXJlX3NlbmRlcnMpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1fc25kX2J1ZnM7IGkrKykgeworCQlzdHJ1Y3QgdWRzbF9zZW5kX2J1ZmZlciAqYnVmID0gJihpbnN0YW5jZS0+c2VuZF9idWZmZXJzW2ldKTsKKworCQlidWYtPmJhc2UgPSBrbWFsbG9jKHNuZF9idWZfc2l6ZSAqIChBVE1fQ0VMTF9TSVpFICsgaW5zdGFuY2UtPnNuZF9wYWRkaW5nKSwKKwkJCQkgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghYnVmLT5iYXNlKSB7CisJCQlkYmcoInVkc2xfdXNiX3Byb2JlOiBubyBtZW1vcnkgZm9yIHNlbmQgYnVmZmVyICVkISIsIGkpOworCQkJZ290byBmYWlsOworCQl9CisKKwkJbGlzdF9hZGQoJmJ1Zi0+bGlzdCwgJmluc3RhbmNlLT5zcGFyZV9zZW5kX2J1ZmZlcnMpOworCX0KKworCS8qIEFUTSBpbml0ICovCisJaW5zdGFuY2UtPmF0bV9kZXYgPSBhdG1fZGV2X3JlZ2lzdGVyKGluc3RhbmNlLT5kcml2ZXJfbmFtZSwKKwkJCQkJICAgICAmdWRzbF9hdG1fZGV2b3BzLCAtMSwgTlVMTCk7CisJaWYgKCFpbnN0YW5jZS0+YXRtX2RldikgeworCQlkYmcoInVkc2xfdXNiX3Byb2JlOiBmYWlsZWQgdG8gcmVnaXN0ZXIgQVRNIGRldmljZSEiKTsKKwkJZ290byBmYWlsOworCX0KKworCWluc3RhbmNlLT5hdG1fZGV2LT5jaV9yYW5nZS52cGlfYml0cyA9IEFUTV9DSV9NQVg7CisJaW5zdGFuY2UtPmF0bV9kZXYtPmNpX3JhbmdlLnZjaV9iaXRzID0gQVRNX0NJX01BWDsKKwlpbnN0YW5jZS0+YXRtX2Rldi0+c2lnbmFsID0gQVRNX1BIWV9TSUdfVU5LTk9XTjsKKworCS8qIHRlbXAgaW5pdCBBVE0gZGV2aWNlLCBzZXQgdG8gMTI4a2JpdCAqLworCWluc3RhbmNlLT5hdG1fZGV2LT5saW5rX3JhdGUgPSAxMjggKiAxMDAwIC8gNDI0OworCisJLyogZGV2aWNlIGRlc2NyaXB0aW9uICovCisJYnVmID0gaW5zdGFuY2UtPmRlc2NyaXB0aW9uOworCWxlbmd0aCA9IHNpemVvZihpbnN0YW5jZS0+ZGVzY3JpcHRpb24pOworCisJaWYgKChpID0gdXNiX3N0cmluZyhkZXYsIGRldi0+ZGVzY3JpcHRvci5pUHJvZHVjdCwgYnVmLCBsZW5ndGgpKSA8IDApCisJCWdvdG8gZmluaXNoOworCisJYnVmICs9IGk7CisJbGVuZ3RoIC09IGk7CisKKwlpID0gc2NucHJpbnRmKGJ1ZiwgbGVuZ3RoLCAiICgiKTsKKwlidWYgKz0gaTsKKwlsZW5ndGggLT0gaTsKKworCWlmIChsZW5ndGggPD0gMCB8fCAoaSA9IHVzYl9tYWtlX3BhdGgoZGV2LCBidWYsIGxlbmd0aCkpIDwgMCkKKwkJZ290byBmaW5pc2g7CisKKwlidWYgKz0gaTsKKwlsZW5ndGggLT0gaTsKKworCXNucHJpbnRmKGJ1ZiwgbGVuZ3RoLCAiKSIpOworCisgZmluaXNoOgorCS8qIHJlYWR5IGZvciBBVE0gY2FsbGJhY2tzICovCisJd21iKCk7CisJaW5zdGFuY2UtPmF0bV9kZXYtPmRldl9kYXRhID0gaW5zdGFuY2U7CisKKwl1c2JfZ2V0X2RldihkZXYpOworCisJcmV0dXJuIDA7CisKKyBmYWlsOgorCWZvciAoaSA9IDA7IGkgPCBudW1fc25kX2J1ZnM7IGkrKykKKwkJa2ZyZWUoaW5zdGFuY2UtPnNlbmRfYnVmZmVyc1tpXS5iYXNlKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fc25kX3VyYnM7IGkrKykKKwkJdXNiX2ZyZWVfdXJiKGluc3RhbmNlLT5zZW5kZXJzW2ldLnVyYik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Jjdl9idWZzOyBpKyspCisJCWtmcmVlKGluc3RhbmNlLT5yZWNlaXZlX2J1ZmZlcnNbaV0uYmFzZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Jjdl91cmJzOyBpKyspCisJCXVzYl9mcmVlX3VyYihpbnN0YW5jZS0+cmVjZWl2ZXJzW2ldLnVyYik7CisKKwlyZXR1cm4gLUVOT01FTTsKK30KKwordm9pZCB1ZHNsX2luc3RhbmNlX2Rpc2Nvbm5lY3Qoc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UpCit7CisJaW50IGk7CisKKwlkYmcoInVkc2xfaW5zdGFuY2VfZGlzY29ubmVjdCBlbnRlcmVkIik7CisKKwlpZiAoIWluc3RhbmNlKSB7CisJCWRiZygidWRzbF9pbnN0YW5jZV9kaXNjb25uZWN0OiBOVUxMIGluc3RhbmNlISIpOworCQlyZXR1cm47CisJfQorCisJLyogcmVjZWl2ZSBmaW5hbGl6ZSAqLworCXRhc2tsZXRfZGlzYWJsZSgmaW5zdGFuY2UtPnJlY2VpdmVfdGFza2xldCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Jjdl91cmJzOyBpKyspCisJCXVzYl9raWxsX3VyYihpbnN0YW5jZS0+cmVjZWl2ZXJzW2ldLnVyYik7CisKKwkvKiBubyBuZWVkIHRvIHRha2UgdGhlIHNwaW5sb2NrICovCisJSU5JVF9MSVNUX0hFQUQoJmluc3RhbmNlLT5maWxsZWRfcmVjZWl2ZV9idWZmZXJzKTsKKwlJTklUX0xJU1RfSEVBRCgmaW5zdGFuY2UtPnNwYXJlX3JlY2VpdmVfYnVmZmVycyk7CisKKwl0YXNrbGV0X2VuYWJsZSgmaW5zdGFuY2UtPnJlY2VpdmVfdGFza2xldCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Jjdl91cmJzOyBpKyspCisJCXVzYl9mcmVlX3VyYihpbnN0YW5jZS0+cmVjZWl2ZXJzW2ldLnVyYik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Jjdl9idWZzOyBpKyspCisJCWtmcmVlKGluc3RhbmNlLT5yZWNlaXZlX2J1ZmZlcnNbaV0uYmFzZSk7CisKKwkvKiBzZW5kIGZpbmFsaXplICovCisJdGFza2xldF9kaXNhYmxlKCZpbnN0YW5jZS0+c2VuZF90YXNrbGV0KTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fc25kX3VyYnM7IGkrKykKKwkJdXNiX2tpbGxfdXJiKGluc3RhbmNlLT5zZW5kZXJzW2ldLnVyYik7CisKKwkvKiBubyBuZWVkIHRvIHRha2UgdGhlIHNwaW5sb2NrICovCisJSU5JVF9MSVNUX0hFQUQoJmluc3RhbmNlLT5zcGFyZV9zZW5kZXJzKTsKKwlJTklUX0xJU1RfSEVBRCgmaW5zdGFuY2UtPnNwYXJlX3NlbmRfYnVmZmVycyk7CisJaW5zdGFuY2UtPmN1cnJlbnRfYnVmZmVyID0gTlVMTDsKKworCXRhc2tsZXRfZW5hYmxlKCZpbnN0YW5jZS0+c2VuZF90YXNrbGV0KTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fc25kX3VyYnM7IGkrKykKKwkJdXNiX2ZyZWVfdXJiKGluc3RhbmNlLT5zZW5kZXJzW2ldLnVyYik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3NuZF9idWZzOyBpKyspCisJCWtmcmVlKGluc3RhbmNlLT5zZW5kX2J1ZmZlcnNbaV0uYmFzZSk7CisKKwkvKiBBVE0gZmluYWxpemUgKi8KKwlzaHV0ZG93bl9hdG1fZGV2KGluc3RhbmNlLT5hdG1fZGV2KTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwodWRzbF9nZXRfaW5zdGFuY2UpOworRVhQT1JUX1NZTUJPTF9HUEwodWRzbF9wdXRfaW5zdGFuY2UpOworRVhQT1JUX1NZTUJPTF9HUEwodWRzbF9pbnN0YW5jZV9zZXR1cCk7CitFWFBPUlRfU1lNQk9MX0dQTCh1ZHNsX2luc3RhbmNlX2Rpc2Nvbm5lY3QpOworCisvKioqKioqKioqKioKKyoqICBpbml0ICAqKgorKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgX19pbml0IHVkc2xfdXNiX2luaXQodm9pZCkKK3sKKwlkYmcoInVkc2xfdXNiX2luaXQ6IGRyaXZlciB2ZXJzaW9uICIgRFJJVkVSX1ZFUlNJT04pOworCisJaWYgKHNpemVvZihzdHJ1Y3QgdWRzbF9jb250cm9sKSA+IHNpemVvZigoKHN0cnVjdCBza19idWZmICopIDApLT5jYikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIF9fRklMRV9fICI6IHVudXNhYmxlIHdpdGggdGhpcyBrZXJuZWwhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKChudW1fcmN2X3VyYnMgPiBVRFNMX01BWF9SQ1ZfVVJCUykKKwkgICAgfHwgKG51bV9zbmRfdXJicyA+IFVEU0xfTUFYX1NORF9VUkJTKQorCSAgICB8fCAobnVtX3Jjdl9idWZzID4gVURTTF9NQVhfUkNWX0JVRlMpCisJICAgIHx8IChudW1fc25kX2J1ZnMgPiBVRFNMX01BWF9TTkRfQlVGUykKKwkgICAgfHwgKHJjdl9idWZfc2l6ZSA+IFVEU0xfTUFYX1JDVl9CVUZfU0laRSkKKwkgICAgfHwgKHNuZF9idWZfc2l6ZSA+IFVEU0xfTUFYX1NORF9CVUZfU0laRSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1ZHNsX3VzYl9leGl0KHZvaWQpCit7Cit9CisKK21vZHVsZV9pbml0KHVkc2xfdXNiX2luaXQpOworbW9kdWxlX2V4aXQodWRzbF91c2JfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOworCisvKioqKioqKioqKioqCisqKiAgZGVidWcgICoqCisqKioqKioqKioqKiovCisKKyNpZmRlZiBWRVJCT1NFX0RFQlVHCitzdGF0aWMgaW50IHVkc2xfcHJpbnRfcGFja2V0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4pCit7CisJdW5zaWduZWQgY2hhciBidWZmZXJbMjU2XTsKKwlpbnQgaSA9IDAsIGogPSAwOworCisJZm9yIChpID0gMDsgaSA8IGxlbjspIHsKKwkJYnVmZmVyWzBdID0gJ1wwJzsKKwkJc3ByaW50ZihidWZmZXIsICIlLjNkIDoiLCBpKTsKKwkJZm9yIChqID0gMDsgKGogPCAxNikgJiYgKGkgPCBsZW4pOyBqKyssIGkrKykgeworCQkJc3ByaW50ZihidWZmZXIsICIlcyAlMi4yeCIsIGJ1ZmZlciwgZGF0YVtpXSk7CisJCX0KKwkJZGJnKCIlcyIsIGJ1ZmZlcik7CisJfQorCXJldHVybiBpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vdXNiX2F0bS5oIGIvZHJpdmVycy91c2IvYXRtL3VzYl9hdG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjhjNTMyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvYXRtL3VzYl9hdG0uaApAQCAtMCwwICsxLDE3NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIHVzYl9hdG0uaCAtIEdlbmVyaWMgVVNCIHhEU0wgZHJpdmVyIGNvcmUKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLCBBbGNhdGVsCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCBEdW5jYW4gU2FuZHMsIFNvbE5lZ3JvLCBKb3NlcCBDb21hcworICogIENvcHlyaWdodCAoQykgMjAwNCwgRGF2aWQgV29vZGhvdXNlCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiAgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqICBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG0uaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1kZXYuaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisKKy8qCisjZGVmaW5lIERFQlVHCisjZGVmaW5lIFZFUkJPU0VfREVCVUcKKyovCisKKyNpZiAhZGVmaW5lZCAoREVCVUcpICYmIGRlZmluZWQgKENPTkZJR19VU0JfREVCVUcpCisjCWRlZmluZSBERUJVRworI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2lmZGVmIERFQlVHCisjZGVmaW5lIFVEU0xfQVNTRVJUKHgpCUJVR19PTighKHgpKQorI2Vsc2UKKyNkZWZpbmUgVURTTF9BU1NFUlQoeCkJZG8geyBpZiAoISh4KSkgd2FybigiZmFpbGVkIGFzc2VydGlvbiAnIiAjeCAiJyBhdCBsaW5lICVkIiwgX19MSU5FX18pOyB9IHdoaWxlKDApCisjZW5kaWYKKworI2RlZmluZSBVRFNMX01BWF9SQ1ZfVVJCUwkJNAorI2RlZmluZSBVRFNMX01BWF9TTkRfVVJCUwkJNAorI2RlZmluZSBVRFNMX01BWF9SQ1ZfQlVGUwkJOAorI2RlZmluZSBVRFNMX01BWF9TTkRfQlVGUwkJOAorI2RlZmluZSBVRFNMX01BWF9SQ1ZfQlVGX1NJWkUJCTEwMjQJLyogQVRNIGNlbGxzICovCisjZGVmaW5lIFVEU0xfTUFYX1NORF9CVUZfU0laRQkJMTAyNAkvKiBBVE0gY2VsbHMgKi8KKyNkZWZpbmUgVURTTF9ERUZBVUxUX1JDVl9VUkJTCQkyCisjZGVmaW5lIFVEU0xfREVGQVVMVF9TTkRfVVJCUwkJMgorI2RlZmluZSBVRFNMX0RFRkFVTFRfUkNWX0JVRlMJCTQKKyNkZWZpbmUgVURTTF9ERUZBVUxUX1NORF9CVUZTCQk0CisjZGVmaW5lIFVEU0xfREVGQVVMVF9SQ1ZfQlVGX1NJWkUJNjQJLyogQVRNIGNlbGxzICovCisjZGVmaW5lIFVEU0xfREVGQVVMVF9TTkRfQlVGX1NJWkUJNjQJLyogQVRNIGNlbGxzICovCisKKyNkZWZpbmUgQVRNX0NFTExfSEVBREVSCQkJKEFUTV9DRUxMX1NJWkUgLSBBVE1fQ0VMTF9QQVlMT0FEKQorI2RlZmluZSBVRFNMX05VTV9DRUxMUyh4KQkJKCgoeCkgKyBBVE1fQUFMNV9UUkFJTEVSICsgQVRNX0NFTExfUEFZTE9BRCAtIDEpIC8gQVRNX0NFTExfUEFZTE9BRCkKKworLyogcmVjZWl2ZSAqLworCitzdHJ1Y3QgdWRzbF9yZWNlaXZlX2J1ZmZlciB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXVuc2lnbmVkIGNoYXIgKmJhc2U7CisJdW5zaWduZWQgaW50IGZpbGxlZF9jZWxsczsKK307CisKK3N0cnVjdCB1ZHNsX3JlY2VpdmVyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHVkc2xfcmVjZWl2ZV9idWZmZXIgKmJ1ZmZlcjsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgdWRzbF92Y2NfZGF0YSB7CisJLyogdnBpL3ZjaSBsb29rdXAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc2hvcnQgdnBpOworCWludCB2Y2k7CisJc3RydWN0IGF0bV92Y2MgKnZjYzsKKworCS8qIHJhdyBjZWxsIHJlYXNzZW1ibHkgKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2FyYjsKK307CisKKy8qIHNlbmQgKi8KKworc3RydWN0IHVkc2xfc2VuZF9idWZmZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1bnNpZ25lZCBjaGFyICpiYXNlOworCXVuc2lnbmVkIGNoYXIgKmZyZWVfc3RhcnQ7CisJdW5zaWduZWQgaW50IGZyZWVfY2VsbHM7Cit9OworCitzdHJ1Y3QgdWRzbF9zZW5kZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgdWRzbF9zZW5kX2J1ZmZlciAqYnVmZmVyOworCXN0cnVjdCB1cmIgKnVyYjsKKwlzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZTsKK307CisKK3N0cnVjdCB1ZHNsX2NvbnRyb2wgeworCXN0cnVjdCBhdG1fc2tiX2RhdGEgYXRtX2RhdGE7CisJdW5zaWduZWQgaW50IG51bV9jZWxsczsKKwl1bnNpZ25lZCBpbnQgbnVtX2VudGlyZTsKKwl1bnNpZ25lZCBpbnQgcGR1X3BhZGRpbmc7CisJdW5zaWduZWQgY2hhciBhYWw1X3RyYWlsZXJbQVRNX0FBTDVfVFJBSUxFUl07Cit9OworCisjZGVmaW5lIFVEU0xfU0tCKHgpCQkoKHN0cnVjdCB1ZHNsX2NvbnRyb2wgKikoeCktPmNiKQorCisvKiBtYWluIGRyaXZlciBkYXRhICovCisKK2VudW0gdWRzbF9zdGF0dXMgeworCVVEU0xfTk9fRklSTVdBUkUsCisJVURTTF9MT0FESU5HX0ZJUk1XQVJFLAorCVVEU0xfTE9BREVEX0ZJUk1XQVJFCit9OworCitzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhIHsKKwlzdHJ1Y3Qga3JlZiByZWZjb3VudDsKKwlzdHJ1Y3Qgc2VtYXBob3JlIHNlcmlhbGl6ZTsKKworCS8qIFVTQiBkZXZpY2UgcGFydCAqLworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OworCWNoYXIgZGVzY3JpcHRpb25bNjRdOworCWludCBkYXRhX2VuZHBvaW50OworCWludCBzbmRfcGFkZGluZzsKKwlpbnQgcmN2X3BhZGRpbmc7CisJY29uc3QgY2hhciAqZHJpdmVyX25hbWU7CisKKwkvKiBBVE0gZGV2aWNlIHBhcnQgKi8KKwlzdHJ1Y3QgYXRtX2RldiAqYXRtX2RldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHZjY19saXN0OworCisJLyogZmlybXdhcmUgKi8KKwlpbnQgKCpmaXJtd2FyZV93YWl0KSAoc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqKTsKKwllbnVtIHVkc2xfc3RhdHVzIHN0YXR1czsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBmaXJtd2FyZV93YWl0ZXJzOworCisJLyogcmVjZWl2ZSAqLworCXN0cnVjdCB1ZHNsX3JlY2VpdmVyIHJlY2VpdmVyc1tVRFNMX01BWF9SQ1ZfVVJCU107CisJc3RydWN0IHVkc2xfcmVjZWl2ZV9idWZmZXIgcmVjZWl2ZV9idWZmZXJzW1VEU0xfTUFYX1JDVl9CVUZTXTsKKworCXNwaW5sb2NrX3QgcmVjZWl2ZV9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgc3BhcmVfcmVjZWl2ZXJzOworCXN0cnVjdCBsaXN0X2hlYWQgZmlsbGVkX3JlY2VpdmVfYnVmZmVyczsKKworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCByZWNlaXZlX3Rhc2tsZXQ7CisJc3RydWN0IGxpc3RfaGVhZCBzcGFyZV9yZWNlaXZlX2J1ZmZlcnM7CisKKwkvKiBzZW5kICovCisJc3RydWN0IHVkc2xfc2VuZGVyIHNlbmRlcnNbVURTTF9NQVhfU05EX1VSQlNdOworCXN0cnVjdCB1ZHNsX3NlbmRfYnVmZmVyIHNlbmRfYnVmZmVyc1tVRFNMX01BWF9TTkRfQlVGU107CisKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNuZHF1ZXVlOworCisJc3BpbmxvY2tfdCBzZW5kX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBzcGFyZV9zZW5kZXJzOworCXN0cnVjdCBsaXN0X2hlYWQgc3BhcmVfc2VuZF9idWZmZXJzOworCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHNlbmRfdGFza2xldDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqY3VycmVudF9za2I7CQkJLyogYmVpbmcgZW1wdGllZCAqLworCXN0cnVjdCB1ZHNsX3NlbmRfYnVmZmVyICpjdXJyZW50X2J1ZmZlcjsJLyogYmVpbmcgZmlsbGVkICovCisJc3RydWN0IGxpc3RfaGVhZCBmaWxsZWRfc2VuZF9idWZmZXJzOworfTsKKworZXh0ZXJuIGludCB1ZHNsX2luc3RhbmNlX3NldHVwKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UpOworZXh0ZXJuIHZvaWQgdWRzbF9pbnN0YW5jZV9kaXNjb25uZWN0KHN0cnVjdCB1ZHNsX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlKTsKK2V4dGVybiB2b2lkIHVkc2xfZ2V0X2luc3RhbmNlKHN0cnVjdCB1ZHNsX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlKTsKK2V4dGVybiB2b2lkIHVkc2xfcHV0X2luc3RhbmNlKHN0cnVjdCB1ZHNsX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL0tjb25maWcgYi9kcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NjFkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnCkBAIC0wLDAgKzEsODYgQEAKKyMKKyMgVVNCIENsYXNzIGRyaXZlciBjb25maWd1cmF0aW9uCisjCitjb21tZW50ICJVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMiCisJZGVwZW5kcyBvbiBVU0IKKworY29uZmlnIFVTQl9BVURJTworCXRyaXN0YXRlICJVU0IgQXVkaW8gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBTT1VORAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBVU0IgYXVkaW8gZXF1aXBtZW50IHN1Y2ggYXMKKwkgIHNwZWFrZXJzIHRvIHlvdXIgY29tcHV0ZXIncyBVU0IgcG9ydC4gWW91IG9ubHkgbmVlZCB0aGlzIGlmIHlvdSB1c2UKKwkgIHRoZSBPU1Mgc291bmQgZHJpdmVyOyBBTFNBIGhhcyBpdHMgb3duIG9wdGlvbiBmb3IgdXNiIGF1ZGlvIHN1cHBvcnQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGF1ZGlvLgorCitjb21tZW50ICJVU0IgQmx1ZXRvb3RoIFRUWSBjYW4gb25seSBiZSB1c2VkIHdpdGggZGlzYWJsZWQgQmx1ZXRvb3RoIHN1YnN5c3RlbSIKKwlkZXBlbmRzIG9uIFVTQiAmJiBCVAorCitjb25maWcgVVNCX0JMVUVUT09USF9UVFkKKwl0cmlzdGF0ZSAiVVNCIEJsdWV0b290aCBUVFkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBCVD1uCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBhIG5vbnN0YW5kYXJkIHR0eSBpbnRlcmZhY2UgdG8gYSBCbHVldG9vdGgKKwkgIGRldmljZSB0aGF0IGNhbiBiZSB1c2VkIG9ubHkgYnkgc3BlY2lhbGl6ZWQgQmx1ZXRvb3RoIEhDSSBzb2Z0d2FyZS4KKworCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgT3BlbkJUIEJsdWV0b290aCBzdGFjayAoYXZhaWxhYmxlCisJICBhdCA8aHR0cDovL2RldmVsb3Blci5heGlzLmNvbS9zb2Z0d2FyZT4pLCBvciBvdGhlciBUVFkgYmFzZWQKKwkgIEJsdWV0b290aCBzdGFja3MsIGFuZCB3YW50IHRvIGNvbm5lY3QgYSBVU0IgQmx1ZXRvb3RoIGRldmljZQorCSAgdG8geW91ciBjb21wdXRlcidzIFVTQiBwb3J0LgorCisJICBEbyAqbm90KiBlbmFibGUgdGhpcyBkcml2ZXIgaWYgeW91IHdhbnQgdG8gdXNlIGdlbmVyaWMgTGludXgKKwkgIEJsdWV0b290aCBzdXBwb3J0LgorCisJICBJZiBpbiBkb3VidCwgc2F5IE4gaGVyZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYmx1ZXR0eS4KKworY29uZmlnIFVTQl9NSURJCisJdHJpc3RhdGUgIlVTQiBNSURJIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgU09VTkQKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBVU0IgTUlESSBkZXZpY2UgdG8geW91cgorCSAgY29tcHV0ZXIncyBVU0IgcG9ydC4gVGhpcyBkcml2ZXIgaXMgZm9yIGRldmljZXMgdGhhdCBjb21wbHkgd2l0aAorCSAgJ1VuaXZlcnNhbCBTZXJpYWwgQnVzIERldmljZSBDbGFzcyBEZWZpbml0aW9uIGZvciBNSURJIERldmljZScuCisKKwkgIFRoZSBmb2xsb3dpbmcgZGV2aWNlcyBhcmUga25vd24gdG8gd29yazoKKwkgICogU3RlaW5iZXJnIFVTQjJNSURJCisJICAqIFJvbGFuZCBNUFU2NAorCSAgKiBSb2xhbmQgUEMtMzAwCisJICAqIFJvbGFuZCBTQzg4NTAKKwkgICogUm9sYW5kIFVNLTEKKwkgICogUm9sYW5kIFVNLTIKKwkgICogUm9sYW5kIFVBLTEwMAorCSAgKiBZYW1haGEgTVUxMDAwCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYi1taWRpLgorCitjb25maWcgVVNCX0FDTQorCXRyaXN0YXRlICJVU0IgTW9kZW0gKENEQyBBQ00pIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBVU0IgbW9kZW1zIGFuZCBJU0ROIGFkYXB0ZXJzIHdoaWNoIHN1cHBvcnQgdGhlCisJICBDb21tdW5pY2F0aW9uIERldmljZSBDbGFzcyBBYnN0cmFjdCBDb250cm9sIE1vZGVsIGludGVyZmFjZS4KKwkgIFBsZWFzZSByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL2FjbS50eHQ+IGZvciBkZXRhaWxzLgorCisJICBJZiB5b3VyIG1vZGVtIG9ubHkgcmVwb3J0cyAiQ2xzPWZmKHZlbmQuKSIgaW4gdGhlIGRlc2NyaXB0b3JzIGluCisJICAvcHJvYy9idXMvdXNiL2RldmljZXMsIHRoZW4geW91ciBtb2RlbSB3aWxsIG5vdCB3b3JrIHdpdGggdGhpcworCSAgZHJpdmVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjZGMtYWNtLgorCitjb25maWcgVVNCX1BSSU5URVIKKwl0cmlzdGF0ZSAiVVNCIFByaW50ZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIFVTQiBwcmludGVyIHRvIHlvdXIgY29tcHV0ZXIncworCSAgVVNCIHBvcnQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYmxwLgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2NsYXNzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MWU1NDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9NYWtlZmlsZQpAQCAtMCwwICsxLDEwIEBACisjCisjIE1ha2VmaWxlIGZvciBVU0IgQ2xhc3MgZHJpdmVycworIyAob25lIHN0ZXAgdXAgZnJvbSB0aGUgbWlzYyBjYXRlZ29yeSkKKyMKKworb2JqLSQoQ09ORklHX1VTQl9BQ00pCQkrPSBjZGMtYWNtLm8KK29iai0kKENPTkZJR19VU0JfQVVESU8pCQkrPSBhdWRpby5vCitvYmotJChDT05GSUdfVVNCX0JMVUVUT09USF9UVFkpCSs9IGJsdWV0dHkubworb2JqLSQoQ09ORklHX1VTQl9NSURJKQkJKz0gdXNiLW1pZGkubworb2JqLSQoQ09ORklHX1VTQl9QUklOVEVSKQkrPSB1c2JscC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9hdWRpby5jIGIvZHJpdmVycy91c2IvY2xhc3MvYXVkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDMyYjdkNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2F1ZGlvLmMKQEAgLTAsMCArMSwzODgyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglhdWRpby5jICAtLSAgVVNCIEF1ZGlvIENsYXNzIGRyaXZlcgorICoKKyAqCUNvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNAorICoJICAgIEFsYW4gQ294IChhbGFuQGx4b3JndWsudWt1dS5vcmcudWspCisgKgkgICAgVGhvbWFzIFNhaWxlciAoc2FpbGVyQGlmZS5lZS5ldGh6LmNoKQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRGVidWdnaW5nOgorICogCVVzZSB0aGUgJ2xzdXNiJyB1dGlsaXR5IHRvIGR1bXAgdGhlIGRlc2NyaXB0b3JzLgorICoKKyAqIDE5OTktMDktMDc6ICBBbGFuIENveAorICoJCVBhcnNpbmcgQXVkaW8gZGVzY3JpcHRvciBwYXRjaAorICogMTk5OS0wOS0wODogIFRob21hcyBTYWlsZXIKKyAqCQlBZGRlZCBPU1MgY29tcGF0aWJsZSBkYXRhIGlvIGZ1bmN0aW9uczsgYm90aCBwYXJ0cyBvZiB0aGUKKyAqCQlkcml2ZXIgcmVtYWluIHRvIGJlIGdsdWVkIHRvZ2V0aGVyCisgKiAxOTk5LTA5LTEwOiAgVGhvbWFzIFNhaWxlcgorICoJCUJlYXV0aWZpZWQgdGhlIGRyaXZlci4gQWRkZWQgc2FtcGxlIGZvcm1hdCBjb252ZXJzaW9ucy4KKyAqCQlTdGlsbCBub3QgcHJvcGVybHkgZ2x1ZWQgd2l0aCB0aGUgcGFyc2luZyBjb2RlLgorICoJCVRoZSBwYXJzaW5nIGNvZGUgc2VlbXMgdG8gaGF2ZSBpdHMgcHJvYmxlbXMgYnR3LAorICoJCVNpbmNlIGl0IHBhcnNlcyBhbGwgYXZhaWxhYmxlIGNvbmZpZ3MgYnV0IGRvZXNuJ3QKKyAqCQlzdG9yZSB3aGljaCBpZmFjZS9hbHRzZXR0aW5nIGJlbG9uZ3MgdG8gd2hpY2ggY29uZmlnLgorICogMTk5OS0wOS0yMDogIFRob21hcyBTYWlsZXIKKyAqCQlUaHJldyBvdXQgQWxhbidzIHBhcnNpbmcgY29kZSBhbmQgaW1wbGVtZW50ZWQgbXkgb3duIG9uZS4KKyAqCQlZb3UgY2Fubm90IHJlYXNvbm5hYmx5IGxpbmVhcmx5IHBhcnNlIGF1ZGlvIGRlc2NyaXB0b3JzLAorICoJCWVzcGVjaWFsbHkgdGhlIEF1ZGlvQ2xhc3MgZGVzY3JpcHRvcnMgaGF2ZSB0byBiZSBjb25zaWRlcmVkCisgKgkJcG9pbnRlciBsaXN0cy4gTWl4ZXIgcGFyc2luZyB1bnRlc3RlZCwgZHVlIHRvIGxhY2sgb2YgZGV2aWNlLgorICoJCUZpcnN0IHN0YWIgYXQgc3luY2ggcGlwZSBpbXBsZW1lbnRhdGlvbiwgdGhlIERhbGxhcyBVU0IgREFDCisgKgkJd2FudHMgdG8gdXNlIGFuIEFzeW5jaCBvdXQgcGlwZS4gdXNiX2F1ZGlvX3N0YXRlIG5vdyBiYXNpY2FsbHkKKyAqCQlvbmx5IGNvbnRhaW5zIGxpc3RzIG9mIG1peGVyIGFuZCB3YXZlIGRldmljZXMuIFdlIGNhbiB0aGVyZWZvcmUKKyAqCQlub3cgaGF2ZSBtdWx0aXBsZSBtaXhlci93YXZlIGRldmljZXMgcGVyIFVTQiBkZXZpY2UuCisgKiAxOTk5LTEwLTI4OiAgVGhvbWFzIFNhaWxlcgorICoJCUNvbnZlcnRlZCB0byBVUkIgQVBJLiBGaXhlZCBhIHRhc2tzdGF0ZS93YWtldXAgc2VtYW50aWNzIG1pc3Rha2UKKyAqCQl0aGF0IG1hZGUgdGhlIGRyaXZlciBjb25zdW1lIGFsbCBhdmFpbGFibGUgQ1BVIGN5Y2xlcy4KKyAqCQlOb3cgcnVucyBzdGFibGUgb24gVUhDSS1BY2hlci9GbGllZ2wvU2FpbGVyLgorICogMTk5OS0xMC0zMTogIFRob21hcyBTYWlsZXIKKyAqCQlBdWRpbyBjYW4gbm93IGJlIHVubG9hZGVkIGlmIGl0IGlzIG5vdCBpbiB1c2UgYnkgYW55IG1peGVyCisgKgkJb3IgZHNwIGNsaWVudCAoZm9ybWVybHkgeW91IGhhZCB0byBkaXNjb25uZWN0IHRoZSBhdWRpbyBkZXZpY2VzCisgKgkJZnJvbSB0aGUgVVNCIHBvcnQpCisgKgkJRmluYWxseSwgYWJvdXQgdGhyZWUgbW9udGhzIGFmdGVyIG9yZGVyaW5nLCBteSAiTWF4eHRybyBTUEsyMjIiCisgKgkJc3BlYWtlcnMgYXJyaXZlZCwgaXNuJ3QgZGlzZGF0YSBhIGdyZWF0IG1haWwgb3JkZXIgY29tcGFueSA4LSkKKyAqCQlQYXJzZSBjbGFzcyBzcGVjaWZpYyBlbmRwb2ludCBkZXNjcmlwdG9yIG9mIHRoZSBhdWRpb3N0cmVhbWluZworICoJCWludGVyZmFjZXMgYW5kIHRha2UgdGhlIGVuZHBvaW50IGF0dHJpYnV0ZXMgZnJvbSB0aGVyZS4KKyAqCQlVbmJlbGlldmFibHksIHRoZSBQaGlsaXBzIFVTQiBEQUMgaGFzIGEgc2FtcGxpbmcgcmF0ZSByYW5nZQorICoJCW9mIG92ZXIgYSBkZWNhZGUsIHlldCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBzYW1wbGluZyByYXRlIGNvbnRyb2whCisgKgkJTm8gd29uZGVyIGl0IHNvdW5kcyBzbyBiYWQsIGhhcyB2ZXJ5IGF1ZGlibGUgc2FtcGxpbmcgcmF0ZQorICoJCWNvbnZlcnNpb24gZGlzdG9ydGlvbi4gRG9uJ3QgdHJ5IHRvIGxpc3RlbiB0byBpdCB1c2luZworICoJCWRlY2VudCBoZWFkcGhvbmVzIQorICoJCSJMZXQncyBtYWtlIHRoaW5ncyBiZXR0ZXIiIC0+IGJ1dCBwbGVhc2UgUGhpbGlwcyBzdGFydCB3aXRoIHlvdXIKKyAqCQlvd24gc3R1ZmYhISEhCisgKiAxOTk5LTExLTAyOiAgVGhvbWFzIFNhaWxlcgorICoJCUl0IHRha2VzIHRoZSBQaGlsaXBzIGJveGVzIHNldmVyYWwgc2Vjb25kcyB0byBhY3F1aXJlIHN5bmNocm9uaXNhdGlvbgorICoJCXRoYXQgbWVhbnMgdGhleSB3b24ndCBwbGF5IHNob3J0IHNvdW5kcy4gU2hvdWxkIHByb2JhYmx5IG1haW50YWluCisgKgkJdGhlIElTTyBkYXRhc3RyZWFtIGV2ZW4gaWYgdGhlcmUncyBub3RoaW5nIHRvIHBsYXkuCisgKgkJRml4IGNvdW50aW5nIHRoZSB0b3RhbF9ieXRlcyBjb3VudGVyLCBSZWFsUGxheWVyIEcyIGRlcGVuZHMgb24gaXQuCisgKiAxOTk5LTEyLTIwOiAgVGhvbWFzIFNhaWxlcgorICoJCUZpeCBiYWQgYnVnIGluIGNvbnZlcnNpb24gdG8gcGVyIGludGVyZmFjZSBwcm9iaW5nLgorICoJCWRpc2Nvbm5lY3Qgd2FzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgdGhlIGF1ZGlvIGRldmljZSwKKyAqCQlsZWFkaW5nIHRvIGEgcHJlbWF0dXJlIGZyZWVpbmcgb2YgdGhlIGF1ZGlvIHN0cnVjdHVyZXMKKyAqIDIwMDAtMDUtMTM6ICBUaG9tYXMgU2FpbGVyCisgKgkJSSBkb24ndCByZW1lbWJlciB3aG8gY2hhbmdlZCB0aGUgZmluZF9mb3JtYXQgcm91dGluZSwKKyAqICAgICAgICAgICAgICBidXQgdGhlIGNoYW5nZSB3YXMgY29tcGxldGVseSBicm9rZW4gZm9yIHRoZSBEYWxsYXMKKyAqICAgICAgICAgICAgICBjaGlwLiBBbnl3YXkgdGFraW5nIHNhbXBsaW5nIHJhdGUgaW50byBhY2NvdW50IGluIGZpbmRfZm9ybWF0CisgKiAgICAgICAgICAgICAgaXMgYmFkIGFuZCBzaG91bGQgbm90IGJlIGRvbmUgdW5sZXNzIHRoZXJlIGFyZSBkZXZpY2VzIHdpdGgKKyAqICAgICAgICAgICAgICBjb21wbGV0ZWx5IGJyb2tlbiBhdWRpbyBkZXNjcmlwdG9ycy4gVW5sZXNzIHNvbWVvbmUgc2hvd3MKKyAqICAgICAgICAgICAgICBtZSBzdWNoIGEgZGVzY3JpcHRvciwgSSB3aWxsIG5vdCBhbGxvdyBmaW5kX2Zvcm1hdCB0bworICogICAgICAgICAgICAgIHRha2UgdGhlIHNhbXBsaW5nIHJhdGUgaW50byBhY2NvdW50LgorICogICAgICAgICAgICAgIEFsc28sIHRoZSBmb3JtZXIgZmluZF9mb3JtYXQgbWFkZToKKyAqICAgICAgICAgICAgICAtIG1wZzEyMyBwbGF5IG1vbm8gaW5zdGVhZCBvZiBzdGVyZW8KKyAqICAgICAgICAgICAgICAtIHNveCBjb21wbGV0ZWx5IGZhaWwgZm9yIHdhdidzIHdpdGggc2FtcGxlIHJhdGVzIDwgNDQuMWtIegorICogICAgICAgICAgICAgICAgICBmb3IgdGhlIERhbGxhcyBjaGlwLgorICogICAgICAgICAgICAgIEFsc28gZml4IGEgcmF0aGVyIGxvbmcgc3RhbmRpbmcgcHJvYmxlbSB3aXRoIGFwcGxpY2F0aW9ucyB0aGF0CisgKiAgICAgICAgICAgICAgdXNlICJzbWFsbCIgd3JpdGVzIHByb2R1Y2luZyBubyBzb3VuZCBhdCBhbGwuCisgKiAyMDAwLTA1LTE1OiAgVGhvbWFzIFNhaWxlcgorICoJCU15IGZlYXJzIGNhbWUgdHJ1ZSwgdGhlIFBoaWxpcHMgY2FtZXJhIGluZGVlZCBoYXMgcHJldHR5IHN0dXBpZAorICogICAgICAgICAgICAgIGF1ZGlvIGRlc2NyaXB0b3JzLgorICogMjAwMC0wNS0xNzogIFRob21hcyBTYWlsZXIKKyAqCQlOZW1zb2Z0IHNwb3R0ZWQgbXkgc3R1cGlkIGxhc3QgbWludXRlIGNoYW5nZSwgdGhhbmtzCisgKiAyMDAwLTA1LTE5OiAgVGhvbWFzIFNhaWxlcgorICoJCUZpeGVkIEZFQVRVUkVfVU5JVCB0aGlua29zIGZvdW5kIHRoYW5rcyB0byB0aGUgS0MgVGVjaG5vbG9neQorICogICAgICAgICAgICAgIFh0ZW5kIGRldmljZS4gQmFzaWNhbGx5IHRoZSBkcml2ZXIgdHJlYXRlZCBGRUFUVVJFX1VOSVQncyBzb3VyY2VkCisgKiAgICAgICAgICAgICAgYnkgbW9ubyB0ZXJtaW5hbHMgYXMgc3RlcmVvLgorICogMjAwMC0wNS0yMDogIFRob21hcyBTYWlsZXIKKyAqCQlTRUxFQ1RPUiBzdXBwb3J0IChhbmQgdGh1cyBzZWxlY3RpbmcgcmVjb3JkIGNoYW5uZWxzIGZyb20gdGhlIG1peGVyKS4KKyAqICAgICAgICAgICAgICBTb21ld2hhdCBwZWN1bGlhciBkdWUgdG8gT1NTIGludGVyZmFjZSBsaW1pdGF0aW9ucy4gT25seSB3b3JrcworICogICAgICAgICAgICAgIGZvciBjaGFubmVscyB3aGVyZSBhICJzbGlkZXIiIGlzIGFscmVhZHkgaW4gZnJvbnQgb2YgaXQgKGkuZS4KKyAqICAgICAgICAgICAgICBhIE1JWEVSIHVuaXQgb3IgYSBGRUFUVVJFIHVuaXQgd2l0aCB2b2x1bWUgY2FwYWJpbGl0eSkuCisgKiAyMDAwLTExLTI2OiAgVGhvbWFzIFNhaWxlcgorICogICAgICAgICAgICAgIFdvcmthcm91bmQgZm9yIERhbGxhcyBEUzQyMDEuIFRoZSBEUzQyMDEgdXNlcyBQQ004IGFzIGZvcm1hdCB0YWcgZm9yCisgKiAgICAgICAgICAgICAgaXRzIDggYml0IG1vZGVzLCBidXQgZXhwZWN0cyBzaWduZWQgZGF0YSAoYW5kIHNob3VsZCB0aGVyZWZvcmUgaGF2ZSB1c2VkIFBDTSkuCisgKiAyMDAxLTAzLTEwOiAgVGhvbWFzIFNhaWxlcgorICogICAgICAgICAgICAgIHByb3ZpZGUgYWJzIGZ1bmN0aW9uLCBwcmV2ZW50IHBpY2tpbmcgdXAgYSBib2d1cyBrZXJuZWwgbWFjcm8KKyAqICAgICAgICAgICAgICBmb3IgYWJzLiBCdWcgcmVwb3J0IGJ5IEFuZHJldyBNb3J0b24gPGFuZHJld21AdW93LmVkdS5hdT4KKyAqIDIwMDEtMDYtMTY6ICBCcnljZSBOZXNiaXR0IDxicnljZUBvYnZpb3VzbHkuY29tPgorICogICAgICAgICAgICAgIEZpeCBTTkRDVExfRFNQX1NURVJFTyBBUEkgdmlvbGF0aW9uCisgKiAyMDAzLTA0LTA4OglPbGl2ZXIgTmV1a3VtIChvbGl2ZXJAbmV1a3VtLm5hbWUpOgorICoJCVNldHRpbmcgYSBjb25maWd1cmF0aW9uIGlzIGRvbmUgYnkgdXNiY29yZSBhbmQgbXVzdCBub3QgYmUgb3ZlcnJpZGRlbgorICogMjAwNC0wMi0yNzogIFdvcmthcm91bmQgZm9yIGJyb2tlbiBzeW5jaCBkZXNjcmlwdG9ycworICogMjAwNC0wMy0wNzoJQWxhbiBTdGVybiA8c3Rlcm5Acm93bGFuZC5oYXJ2YXJkLmVkdT4KKyAqCQlBZGQgdXNiX2lmbnVtX3RvX2lmKCkgYW5kIHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZygpIHN1cHBvcnQuCisgKgkJVXNlIHRoZSBpbi1tZW1vcnkgZGVzY3JpcHRvcnMgaW5zdGVhZCBvZiByZWFkaW5nIHRoZW0gZnJvbSB0aGUgZGV2aWNlLgorICogCisgKi8KKworLyoKKyAqIFN0cmF0ZWd5OgorICoKKyAqIEFsYW4gQ294IGFuZCBUaG9tYXMgU2FpbGVyIGFyZSBzdGFydGluZyB0byBkaWcgYXQgb3Bwb3NpdGUgZW5kcyBhbmQKKyAqIGFyZSBob3BpbmcgdG8gbWVldCBpbiB0aGUgbWlkZGxlLCBqdXN0IGxpa2UgdHVubmVsIGRpZ2dlcnMgOikKKyAqIEFsYW4gdGFja2xlcyB0aGUgZGVzY3JpcHRvciBwYXJzaW5nLCBUaG9tYXMgdGhlIGFjdHVhbCBkYXRhIElPIGFuZCB0aGUKKyAqIE9TUyBjb21wYXRpYmxlIGludGVyZmFjZS4KKyAqCisgKiBEYXRhIElPIGltcGxlbWVudGF0aW9uIGlzc3VlcworICoKKyAqIEEgbW1hcCdhYmxlIHJpbmcgYnVmZmVyIHBlciBkaXJlY3Rpb24gaXMgaW1wbGVtZW50ZWQsIGJlY2F1c2UKKyAqIGFsbW9zdCBldmVyeSBPU1MgYXBwIGV4cGVjdHMgaXQuIEl0IGlzIGhvd2V2ZXIgaW1wcmFjdGljYWwgdG8KKyAqIHRyYW5zbWl0L3JlY2VpdmUgVVNCIGRhdGEgZGlyZWN0bHkgaW50byBhbmQgb3V0IG9mIHRoZSByaW5nIGJ1ZmZlciwKKyAqIGR1ZSB0byBhbGlnbm1lbnQgYW5kIHN5bmNocm9uaXNhdGlvbiBpc3N1ZXMuIEluc3RlYWQsIHRoZSByaW5nIGJ1ZmZlcgorICogZmVlZHMgYSBjb25zdGFudCB0aW1lIGRlbGF5IGxpbmUgdGhhdCBoYW5kbGVzIHRoZSBVU0IgaXNzdWVzLgorICoKKyAqIE5vdyB3ZSBmaXJzdCB0cnkgdG8gZmluZCBhbiBhbHRlcm5hdGUgc2V0dGluZyB0aGF0IGV4YWN0bHkgbWF0Y2hlcworICogdGhlIHNhbXBsZSBmb3JtYXQgcmVxdWVzdGVkIGJ5IHRoZSB1c2VyLiBJZiB3ZSBmaW5kIG9uZSwgd2UgZG8gbm90CisgKiBuZWVkIHRvIHBlcmZvcm0gYW55IHNhbXBsZSByYXRlIGNvbnZlcnNpb25zLiBJZiB0aGVyZSBpcyBubyBtYXRjaGluZworICogYWx0c2V0dGluZywgd2UgY2hvb3NlIHRoZSBjbG9zZXN0IG9uZSBhbmQgcGVyZm9ybSBzYW1wbGUgZm9ybWF0CisgKiBjb252ZXJzaW9ucy4gV2UgbmV2ZXIgZG8gc2FtcGxlIHJhdGUgY29udmVyc2lvbjsgdGhlc2UgYXJlIHRvbworICogZXhwZW5zaXZlIHRvIGJlIHBlcmZvcm1lZCBpbiB0aGUga2VybmVsLgorICoKKyAqIEN1cnJlbnQgc3RhdHVzOiBubyBrbm93biBIQ0Qtc3BlY2lmaWMgaXNzdWVzLgorICoKKyAqIEdlbmVyYWxseTogRHVlIHRvIHRoZSBicm9rZW5uZXNzIG9mIHRoZSBBdWRpbyBDbGFzcyBzcGVjCisgKiBpdCBzZWVtcyBnZW5lcmFsbHkgaW1wb3NzaWJsZSB0byB3cml0ZSBhIGdlbmVyaWMgQXVkaW8gQ2xhc3MgZHJpdmVyLAorICogc28gYSByZWFzb25hYmxlIGRyaXZlciBzaG91bGQgaW1wbGVtZW50IHRoZSBmZWF0dXJlcyB0aGF0IGFyZSBhY3R1YWxseQorICogdXNlZC4KKyAqCisgKiBQYXJzaW5nIGltcGxlbWVudGF0aW9uIGlzc3VlcworICoKKyAqIE9uZSBjYW5ub3QgcmVhc29uYWJseSBwYXJzZSB0aGUgQXVkaW9DbGFzcyBkZXNjcmlwdG9ycyBsaW5lYXJseS4KKyAqIFRoZXJlZm9yZSB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBmZWF0dXJlcyByb3V0aW5lcyB0byBsb29rCisgKiBmb3IgYSBzcGVjaWZpYyBkZXNjcmlwdG9yIGluIHRoZSBkZXNjcmlwdG9yIGxpc3QuCisgKgorICogSG93IGRvZXMgdGhlIHBhcnNpbmcgd29yaz8gRmlyc3QsIGFsbCBpbnRlcmZhY2VzIGFyZSBzZWFyY2hlZAorICogZm9yIGFuIEF1ZGlvQ29udHJvbCBjbGFzcyBpbnRlcmZhY2UuIElmIGZvdW5kLCB0aGUgY29uZmlnIGRlc2NyaXB0b3IKKyAqIHRoYXQgYmVsb25ncyB0byB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIHNlYXJjaGVkIGFuZAorICogdGhlIEhFQURFUiBkZXNjcmlwdG9yIGlzIGZvdW5kLiBJdCBjb250YWlucyBhIGxpc3Qgb2YKKyAqIGFsbCBBdWRpb1N0cmVhbWluZyBhbmQgTUlESVN0cmVhbWluZyBkZXZpY2VzLiBUaGlzIGxpc3QgaXMgdGhlbiB3YWxrZWQsCisgKiBhbmQgYWxsIEF1ZGlvU3RyZWFtaW5nIGludGVyZmFjZXMgYXJlIGNsYXNzaWZpZWQgaW50byBpbnB1dCBhbmQgb3V0cHV0CisgKiBpbnRlcmZhY2VzIChhY2NvcmRpbmcgdG8gdGhlIGVuZHBvaW50MCBkaXJlY3Rpb24gaW4gYWx0c2V0dGluZzEpIChNSURJU3RyZWFtaW5nCisgKiBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCkuIFRoZSBpbnB1dCAmIG91dHB1dCBsaXN0IGlzIHRoZW4gdXNlZAorICogdG8gZ3JvdXAgaW5wdXRzIGFuZCBvdXRwdXRzIHRvZ2V0aGVyIGFuZCBpc3N1ZWQgcGFpcndpc2UgdG8gdGhlCisgKiBBdWRpb1N0cmVhbWluZyBjbGFzcyBwYXJzZXIuIEZpbmFsbHksIGFsbCBPVVRQVVRfVEVSTUlOQUwgZGVzY3JpcHRvcnMKKyAqIGFyZSB3YWxrZWQgYW5kIGlzc3VlZCB0byB0aGUgbWl4ZXIgY29uc3RydWN0aW9uIHJvdXRpbmUuCisgKgorICogVGhlIEF1ZGlvU3RyZWFtaW5nIHBhcnNlciBzaW1wbHkgZW51bWVyYXRlcyBhbGwgYWx0c2V0dGluZ3MgYmVsb25naW5nCisgKiB0byB0aGUgc3BlY2lmaWVkIGludGVyZmFjZS4gSXQgbG9va3MgZm9yIEFTX0dFTkVSQUwgYW5kIEZPUk1BVF9UWVBFCisgKiBjbGFzcyBzcGVjaWZpYyBkZXNjcmlwdG9ycyB0byBleHRyYWN0IHRoZSBzYW1wbGUgZm9ybWF0L3NhbXBsZSByYXRlCisgKiBkYXRhLiBPbmx5IHNhbXBsZSBmb3JtYXQgdHlwZXMgUENNIGFuZCBQQ004IGFyZSBzdXBwb3J0ZWQgcmlnaHQgbm93LCBhbmQKKyAqIG9ubHkgRk9STUFUX1RZUEVfSSBpcyBoYW5kbGVkLiBUaGUgaXNvY2hyb25vdXMgZGF0YSBlbmRwb2ludCBuZWVkcyB0bworICogYmUgdGhlIGZpcnN0IGVuZHBvaW50IG9mIHRoZSBpbnRlcmZhY2UsIGFuZCB0aGUgb3B0aW9uYWwgc3luY2hyb25pc2F0aW9uCisgKiBpc29jaHJvbm91cyBlbmRwb2ludCB0aGUgc2Vjb25kIG9uZS4KKyAqCisgKiBNaXhlciBjb25zdHJ1Y3Rpb24gd29ya3MgYXMgZm9sbG93czogVGhlIHZhcmlvdXMgVEVSTUlOQUwgYW5kIFVOSVQKKyAqIGRlc2NyaXB0b3JzIHNwYW4gYSB0cmVlIGZyb20gdGhlIHJvb3QgKE9VVFBVVF9URVJNSU5BTCkgdGhyb3VnaCB0aGUKKyAqIGludGVybWVkaWF0ZSBub2RlcyAoVU5JVHMpIHRvIHRoZSBsZWF2ZXMgKElOUFVUX1RFUk1JTkFMKS4gV2Ugd2FsaworICogdGhhdCB0cmVlIGluIGEgZGVwdGggZmlyc3QgbWFubmVyLiBGRUFUVVJFX1VOSVRzIG1heSBjb250cmlidXRlIHZvbHVtZSwKKyAqIGJhc3MgYW5kIHRyZWJsZSBzbGlkZXJzIHRvIHRoZSBtaXhlciwgTUlYRVJfVU5JVHMgdm9sdW1lIHNsaWRlcnMuCisgKiBUaGUgdGVybWluYWwgdHlwZSBlbmNvZGVkIGluIHRoZSBJTlBVVF9URVJNSU5BTHMgZmVlZHMgYSBoZXVyaXN0aWMKKyAqIHRvIGRldGVybWluZSAibWVhbmluZ2Z1bCIgT1NTIHNsaWRlciBudW1iZXJzLCBob3dldmVyIHdlIHdpbGwgc2VlCisgKiBob3cgd2VsbCB0aGlzIHdvcmtzIGluIHByYWN0aWNlLiBPdGhlciBmZWF0dXJlcyBhcmUgbm90IHVzZWQgYXQgdGhlCisgKiBtb21lbnQsIHRoZXkgc2VlbSBsZXNzIG9mdGVuIHVzZWQuIEFsc28sIGl0IHNlZW1zIGRpZmZpY3VsdCBhdCBsZWFzdAorICogdG8gY29uc3RydWN0IHJlY29yZGluZyBzb3VyY2Ugc3dpdGNoZXMgZnJvbSBTRUxFQ1RPUl9VTklUcywgYnV0CisgKiBzaW5jZSB0aGVyZSBhcmUgbm90IG1hbnkgVVNCIEFEQydzIGF2YWlsYWJsZSwgd2UgbGVhdmUgdGhhdCBmb3IgbGF0ZXIuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NvdW5kLmg+CisjaW5jbHVkZSA8bGludXgvc291bmRjYXJkLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJhdWRpby5oIgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS4wLjAiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+LCBUaG9tYXMgU2FpbGVyIChzYWlsZXJAaWZlLmVlLmV0aHouY2gpIgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIEF1ZGlvIENsYXNzIGRyaXZlciIKKworI2RlZmluZSBBVURJT19ERUJVRyAxCisKKyNkZWZpbmUgU05EX0RFVl9EU1AxNiAgIDUKKworI2RlZmluZSBkcHJpbnRrKHgpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogTGlua2VkIGxpc3Qgb2YgYWxsIGF1ZGlvIGRldmljZXMuLi4KKyAqLworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgYXVkaW9kZXZzID0gTElTVF9IRUFEX0lOSVQoYXVkaW9kZXZzKTsKK3N0YXRpYyBERUNMQVJFX01VVEVYKG9wZW5fc2VtKTsKKworLyoKKyAqIHdhaXQgcXVldWUgZm9yIHByb2Nlc3NlcyB3YW50aW5nIHRvIG9wZW4gYW4gVVNCIGF1ZGlvIGRldmljZQorICovCitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQob3Blbl93YWl0KTsKKworCisjZGVmaW5lIE1BWEZPUk1BVFMgICAgICAgIE1BWF9BTFQKKyNkZWZpbmUgRE1BQlVGU0hJRlQgICAgICAgMTcgIC8qIDEyOGsgd29ydGggb2YgRE1BIGJ1ZmZlciAqLworI2RlZmluZSBOUlNHQlVGICAgICAgICAgICAoMVU8PChETUFCVUZTSElGVC1QQUdFX1NISUZUKSkKKworLyoKKyAqIFRoaXMgaW5mbHVlbmNlczoKKyAqIC0gTGF0ZW5jeQorICogLSBJbnRlcnJ1cHQgcmF0ZQorICogLSBTeW5jaHJvbmlzYXRpb24gYmVoYXZpb3VyCisgKiBEb24ndCB0b3VjaCB0aGlzIGlmIHlvdSBkb24ndCB1bmRlcnN0YW5kIGFsbCBvZiB0aGUgYWJvdmUuCisgKi8KKyNkZWZpbmUgREVTQ0ZSQU1FUyAgNQorI2RlZmluZSBTWU5DRlJBTUVTICBERVNDRlJBTUVTCisKKyNkZWZpbmUgTUlYRkxHX1NURVJFT0lOICAgMQorI2RlZmluZSBNSVhGTEdfU1RFUkVPT1VUICAyCisKK3N0cnVjdCBtaXhlcmNoYW5uZWwgeworCV9fdTE2IHZhbHVlOworCV9fdTE2IG9zc2NoYW5uZWw7ICAvKiBudW1iZXIgb2YgdGhlIE9TUyBjaGFubmVsICovCisJX19zMTYgbWludmFsLCBtYXh2YWw7CisJX191MTYgc2xjdHVuaXRpZDsKKwlfX3U4IHVuaXRpZDsKKwlfX3U4IHNlbGVjdG9yOworCV9fdTggY2hudW07CisJX191OCBmbGFnczsKK307CisKK3N0cnVjdCBhdWRpb2Zvcm1hdCB7CisJdW5zaWduZWQgaW50IGZvcm1hdDsKKwl1bnNpZ25lZCBpbnQgc3JhdGVsbzsKKwl1bnNpZ25lZCBpbnQgc3JhdGVoaTsKKwl1bnNpZ25lZCBjaGFyIGFsdHNldHRpbmc7CisJdW5zaWduZWQgY2hhciBhdHRyaWJ1dGVzOworfTsKKworc3RydWN0IGRtYWJ1ZiB7CisJLyogYnVmZmVyIGRhdGEgZm9ybWF0ICovCisJdW5zaWduZWQgaW50IGZvcm1hdDsKKwl1bnNpZ25lZCBpbnQgc3JhdGU7CisJLyogcGh5c2ljYWwgYnVmZmVyICovCisJdW5zaWduZWQgY2hhciAqc2didWZbTlJTR0JVRl07CisJdW5zaWduZWQgYnVmc2l6ZTsKKwl1bnNpZ25lZCBudW1mcmFnOworCXVuc2lnbmVkIGZyYWdzaGlmdDsKKwl1bnNpZ25lZCB3cnB0ciwgcmRwdHI7CisJdW5zaWduZWQgdG90YWxfYnl0ZXM7CisJaW50IGNvdW50OworCXVuc2lnbmVkIGVycm9yOyAvKiBvdmVyL3VuZGVycnVuICovCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKKwkvKiByZWR1bmRhbnQsIGJ1dCBtYWtlcyBjYWxjdWxhdGlvbnMgZWFzaWVyICovCisJdW5zaWduZWQgZnJhZ3NpemU7CisJdW5zaWduZWQgZG1hc2l6ZTsKKwkvKiBPU1Mgc3R1ZmYgKi8KKwl1bnNpZ25lZCBtYXBwZWQ6MTsKKwl1bnNpZ25lZCByZWFkeToxOworCXVuc2lnbmVkIG9zc2ZyYWdzaGlmdDsKKwlpbnQgb3NzbWF4ZnJhZ3M7CisJdW5zaWduZWQgc3ViZGl2aXNpb247Cit9OworCitzdHJ1Y3QgdXNiX2F1ZGlvX3N0YXRlOworCisjZGVmaW5lIEZMR19VUkIwUlVOTklORyAgIDEKKyNkZWZpbmUgRkxHX1VSQjFSVU5OSU5HICAgMgorI2RlZmluZSBGTEdfU1lOQzBSVU5OSU5HICA0CisjZGVmaW5lIEZMR19TWU5DMVJVTk5JTkcgIDgKKyNkZWZpbmUgRkxHX1JVTk5JTkcgICAgICAxNgorI2RlZmluZSBGTEdfQ09OTkVDVEVEICAgIDMyCisKK3N0cnVjdCBteV9kYXRhX3VyYiB7CisJc3RydWN0IHVyYiAqdXJiOworfTsKKworc3RydWN0IG15X3N5bmNfdXJiIHsKKwlzdHJ1Y3QgdXJiICp1cmI7Cit9OworCisKK3N0cnVjdCB1c2JfYXVkaW9kZXYgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgdXNiX2F1ZGlvX3N0YXRlICpzdGF0ZTsKKwkKKwkvKiBzb3VuZGNvcmUgc3R1ZmYgKi8KKwlpbnQgZGV2X2F1ZGlvOworCisJLyogd2F2ZSBzdHVmZiAqLworCW1vZGVfdCBvcGVuX21vZGU7CisJc3BpbmxvY2tfdCBsb2NrOyAgICAgICAgIC8qIERNQSBidWZmZXIgYWNjZXNzIHNwaW5sb2NrICovCisKKwlzdHJ1Y3QgdXNiaW4geworCQlpbnQgaW50ZXJmYWNlOyAgICAgICAgICAgLyogSW50ZXJmYWNlIG51bWJlciwgLTEgbWVhbnMgbm90IHVzZWQgKi8KKwkJdW5zaWduZWQgaW50IGZvcm1hdDsgICAgIC8qIFVTQiBkYXRhIGZvcm1hdCAqLworCQl1bnNpZ25lZCBpbnQgZGF0YXBpcGU7ICAgLyogdGhlIGRhdGEgaW5wdXQgcGlwZSAqLworCQl1bnNpZ25lZCBpbnQgc3luY3BpcGU7ICAgLyogdGhlIHN5bmNocm9uaXNhdGlvbiBwaXBlIC0gMCBmb3IgYW55dGhpbmcgYnV0IGFkYXB0aXZlIElOIG1vZGUgKi8KKwkJdW5zaWduZWQgaW50IHN5bmNpbnRlcnZhbDsgIC8qIFAgZm9yIGFkYXB0aXZlIElOIG1vZGUsIDAgb3RoZXJ3aXNlICovCisJCXVuc2lnbmVkIGludCBmcmVxbjsgICAgICAvKiBub21pbmFsIHNhbXBsaW5nIHJhdGUgaW4gVVNCIGZvcm1hdCwgaS5lLiBmcy8xMDAwIGluIFExMC4xNCAqLworCQl1bnNpZ25lZCBpbnQgZnJlcW1heDsgICAgLyogbWF4aW11bSBzYW1wbGluZyByYXRlLCB1c2VkIGZvciBidWZmZXIgbWFuYWdlbWVudCAqLworCQl1bnNpZ25lZCBpbnQgcGhhc2U7ICAgICAgLyogcGhhc2UgYWNjdW11bGF0b3IgKi8KKwkJdW5zaWduZWQgaW50IGZsYWdzOyAgICAgIC8qIHNlZSBGTEdfIGRlZmluZXMgKi8KKwkJCisJCXN0cnVjdCBteV9kYXRhX3VyYiBkdXJiWzJdOyAgLyogSVNPIGRlc2NyaXB0b3JzIGZvciB0aGUgZGF0YSBlbmRwb2ludCAqLworCQlzdHJ1Y3QgbXlfc3luY191cmIgc3VyYlsyXTsgIC8qIElTTyBzeW5jIHBpcGUgZGVzY3JpcHRvciBpZiBuZWVkZWQgKi8KKwkJCisJCXN0cnVjdCBkbWFidWYgZG1hOworCX0gdXNiaW47CisKKwlzdHJ1Y3QgdXNib3V0IHsKKwkJaW50IGludGVyZmFjZTsgICAgICAgICAgIC8qIEludGVyZmFjZSBudW1iZXIsIC0xIG1lYW5zIG5vdCB1c2VkICovCisJCXVuc2lnbmVkIGludCBmb3JtYXQ7ICAgICAvKiBVU0IgZGF0YSBmb3JtYXQgKi8KKwkJdW5zaWduZWQgaW50IGRhdGFwaXBlOyAgIC8qIHRoZSBkYXRhIGlucHV0IHBpcGUgKi8KKwkJdW5zaWduZWQgaW50IHN5bmNwaXBlOyAgIC8qIHRoZSBzeW5jaHJvbmlzYXRpb24gcGlwZSAtIDAgZm9yIGFueXRoaW5nIGJ1dCBhc3luY2hyb25vdXMgT1VUIG1vZGUgKi8KKwkJdW5zaWduZWQgaW50IHN5bmNpbnRlcnZhbDsgIC8qIFAgZm9yIGFzeW5jaHJvbm91cyBPVVQgbW9kZSwgMCBvdGhlcndpc2UgKi8KKwkJdW5zaWduZWQgaW50IGZyZXFuOyAgICAgIC8qIG5vbWluYWwgc2FtcGxpbmcgcmF0ZSBpbiBVU0IgZm9ybWF0LCBpLmUuIGZzLzEwMDAgaW4gUTEwLjE0ICovCisJCXVuc2lnbmVkIGludCBmcmVxbTsgICAgICAvKiBtb21lbnRhcnkgc2FtcGxpbmcgcmF0ZSBpbiBVU0IgZm9ybWF0LCBpLmUuIGZzLzEwMDAgaW4gUTEwLjE0ICovCisJCXVuc2lnbmVkIGludCBmcmVxbWF4OyAgICAvKiBtYXhpbXVtIHNhbXBsaW5nIHJhdGUsIHVzZWQgZm9yIGJ1ZmZlciBtYW5hZ2VtZW50ICovCisJCXVuc2lnbmVkIGludCBwaGFzZTsgICAgICAvKiBwaGFzZSBhY2N1bXVsYXRvciAqLworCQl1bnNpZ25lZCBpbnQgZmxhZ3M7ICAgICAgLyogc2VlIEZMR18gZGVmaW5lcyAqLworCisJCXN0cnVjdCBteV9kYXRhX3VyYiBkdXJiWzJdOyAgLyogSVNPIGRlc2NyaXB0b3JzIGZvciB0aGUgZGF0YSBlbmRwb2ludCAqLworCQlzdHJ1Y3QgbXlfc3luY191cmIgc3VyYlsyXTsgIC8qIElTTyBzeW5jIHBpcGUgZGVzY3JpcHRvciBpZiBuZWVkZWQgKi8KKwkJCisJCXN0cnVjdCBkbWFidWYgZG1hOworCX0gdXNib3V0OworCisKKwl1bnNpZ25lZCBpbnQgbnVtZm10aW4sIG51bWZtdG91dDsKKwlzdHJ1Y3QgYXVkaW9mb3JtYXQgZm10aW5bTUFYRk9STUFUU107CisJc3RydWN0IGF1ZGlvZm9ybWF0IGZtdG91dFtNQVhGT1JNQVRTXTsKK307ICAKKworc3RydWN0IHVzYl9taXhlcmRldiB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKnN0YXRlOworCisJLyogc291bmRjb3JlIHN0dWZmICovCisJaW50IGRldl9taXhlcjsKKworCXVuc2lnbmVkIGNoYXIgaWZhY2U7ICAvKiBpbnRlcmZhY2UgbnVtYmVyIG9mIHRoZSBBdWRpb0NvbnRyb2wgaW50ZXJmYWNlICovCisKKwkvKiBVU0IgZm9ybWF0IGRlc2NyaXB0aW9ucyAqLworCXVuc2lnbmVkIGludCBudW1jaCwgbW9kY250OworCisJLyogbWl4Y2ggaXMgbGFzdCBhbmQgZ2V0cyBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgKi8KKwlzdHJ1Y3QgbWl4ZXJjaGFubmVsIGNoWzBdOworfTsKKworc3RydWN0IHVzYl9hdWRpb19zdGF0ZSB7CisJc3RydWN0IGxpc3RfaGVhZCBhdWRpb2RldjsKKworCS8qIFVTQiBkZXZpY2UgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCisJc3RydWN0IGxpc3RfaGVhZCBhdWRpb2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBtaXhlcmxpc3Q7CisKKwl1bnNpZ25lZCBjb3VudDsgIC8qIHVzYWdlIGNvdW50ZXI7IE5PVEU6IHRoZSB1c2Igc3RhY2sgaXMgYWxzbyBjb25zaWRlcmVkIGEgdXNlciAqLworfTsKKworLyogcHJpdmF0ZSBhdWRpbyBmb3JtYXQgZXh0ZW5zaW9ucyAqLworI2RlZmluZSBBRk1UX1NURVJFTyAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBBRk1UX0lTU1RFUkVPKHgpICAgKCh4KSAmIEFGTVRfU1RFUkVPKQorI2RlZmluZSBBRk1UX0lTMTZCSVQoeCkgICAgKCh4KSAmIChBRk1UX1MxNl9MRXxBRk1UX1MxNl9CRXxBRk1UX1UxNl9MRXxBRk1UX1UxNl9CRSkpCisjZGVmaW5lIEFGTVRfSVNVTlNJR05FRCh4KSAoKHgpICYgKEFGTVRfVTh8QUZNVF9VMTZfTEV8QUZNVF9VMTZfQkUpKQorI2RlZmluZSBBRk1UX0JZVEVTU0hJRlQoeCkgKChBRk1UX0lTU1RFUkVPKHgpID8gMSA6IDApICsgKEFGTVRfSVMxNkJJVCh4KSA/IDEgOiAwKSkKKyNkZWZpbmUgQUZNVF9CWVRFUyh4KSAgICAgICgxPDxBRk1UX0JZVEVTU0hGSVQoeCkpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxkMih1bnNpZ25lZCBpbnQgeCkKK3sKKwl1bnNpZ25lZCByID0gMDsKKwkKKwlpZiAoeCA+PSAweDEwMDAwKSB7CisJCXggPj49IDE2OworCQlyICs9IDE2OworCX0KKwlpZiAoeCA+PSAweDEwMCkgeworCQl4ID4+PSA4OworCQlyICs9IDg7CisJfQorCWlmICh4ID49IDB4MTApIHsKKwkJeCA+Pj0gNDsKKwkJciArPSA0OworCX0KKwlpZiAoeCA+PSA0KSB7CisJCXggPj49IDI7CisJCXIgKz0gMjsKKwl9CisJaWYgKHggPj0gMikKKwkJcisrOworCXJldHVybiByOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIE9TUyBjb21wYXRpYmxlIHJpbmcgYnVmZmVyIG1hbmFnZW1lbnQuIFRoZSByaW5nIGJ1ZmZlciBtYXkgYmUgbW1hcCdlZCBpbnRvCisgKiBhbiBhcHBsaWNhdGlvbiBhZGRyZXNzIHNwYWNlLgorICoKKyAqIEkgZmlyc3QgdXNlZCB0aGUgcnZtYWxsb2Mgc3R1ZmYgY29waWVkIGZyb20gYnR0di4gQWxhbiBDb3ggZGlkIG5vdCBsaWtlIGl0LCBzbworICogd2Ugbm93IHVzZSBhbiBhcnJheSBvZiBwb2ludGVycyB0byBhIHNpbmdsZSBwYWdlIGVhY2guIFRoaXMgc2F2ZXMgdXMgdGhlCisgKiBrZXJuZWwgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb25zLCBidXQgd2UgaGF2ZSB0byBkbyBhIHBhZ2UgdGFibGUgYWxpa2UgbWVjaGFuaXNtCisgKiAodGhvdWdoIG9ubHkgb25lIGluZGlyZWN0aW9uKSBpbiBzb2Z0d2FyZS4KKyAqLworCitzdGF0aWMgdm9pZCBkbWFidWZfcmVsZWFzZShzdHJ1Y3QgZG1hYnVmICpkYikKK3sKKwl1bnNpZ25lZCBpbnQgbnI7CisJdm9pZCAqcDsKKworCWZvcihuciA9IDA7IG5yIDwgTlJTR0JVRjsgbnIrKykgeworCQlpZiAoIShwID0gZGItPnNnYnVmW25yXSkpCisJCQljb250aW51ZTsKKwkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHApKTsKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXApOworCQlkYi0+c2didWZbbnJdID0gTlVMTDsKKwl9CisJZGItPm1hcHBlZCA9IGRiLT5yZWFkeSA9IDA7Cit9CisKK3N0YXRpYyBpbnQgZG1hYnVmX2luaXQoc3RydWN0IGRtYWJ1ZiAqZGIpCit7CisJdW5zaWduZWQgaW50IG5yLCBieXRlcGVyc2VjLCBidWZzOworCXZvaWQgKnA7CisKKwkvKiBpbml0aWFsaXplIHNvbWUgZmllbGRzICovCisJZGItPnJkcHRyID0gZGItPndycHRyID0gZGItPnRvdGFsX2J5dGVzID0gZGItPmNvdW50ID0gZGItPmVycm9yID0gMDsKKwkvKiBjYWxjdWxhdGUgcmVxdWlyZWQgYnVmZmVyIHNpemUgKi8KKwlieXRlcGVyc2VjID0gZGItPnNyYXRlIDw8IEFGTVRfQllURVNTSElGVChkYi0+Zm9ybWF0KTsKKwlidWZzID0gMVUgPDwgRE1BQlVGU0hJRlQ7CisJaWYgKGRiLT5vc3NmcmFnc2hpZnQpIHsKKwkJaWYgKCgxMDAwIDw8IGRiLT5vc3NmcmFnc2hpZnQpIDwgYnl0ZXBlcnNlYykKKwkJCWRiLT5mcmFnc2hpZnQgPSBsZDIoYnl0ZXBlcnNlYy8xMDAwKTsKKwkJZWxzZQorCQkJZGItPmZyYWdzaGlmdCA9IGRiLT5vc3NmcmFnc2hpZnQ7CisJfSBlbHNlIHsKKwkJZGItPmZyYWdzaGlmdCA9IGxkMihieXRlcGVyc2VjLzEwMC8oZGItPnN1YmRpdmlzaW9uID8gZGItPnN1YmRpdmlzaW9uIDogMSkpOworCQlpZiAoZGItPmZyYWdzaGlmdCA8IDMpCisJCQlkYi0+ZnJhZ3NoaWZ0ID0gMzsKKwl9CisJZGItPm51bWZyYWcgPSBidWZzID4+IGRiLT5mcmFnc2hpZnQ7CisJd2hpbGUgKGRiLT5udW1mcmFnIDwgNCAmJiBkYi0+ZnJhZ3NoaWZ0ID4gMykgeworCQlkYi0+ZnJhZ3NoaWZ0LS07CisJCWRiLT5udW1mcmFnID0gYnVmcyA+PiBkYi0+ZnJhZ3NoaWZ0OworCX0KKwlkYi0+ZnJhZ3NpemUgPSAxIDw8IGRiLT5mcmFnc2hpZnQ7CisJaWYgKGRiLT5vc3NtYXhmcmFncyA+PSA0ICYmIGRiLT5vc3NtYXhmcmFncyA8IGRiLT5udW1mcmFnKQorCQlkYi0+bnVtZnJhZyA9IGRiLT5vc3NtYXhmcmFnczsKKwlkYi0+ZG1hc2l6ZSA9IGRiLT5udW1mcmFnIDw8IGRiLT5mcmFnc2hpZnQ7CisJZm9yKG5yID0gMDsgbnIgPCBOUlNHQlVGOyBucisrKSB7CisJCWlmICghZGItPnNnYnVmW25yXSkgeworCQkJcCA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCQkJaWYgKCFwKQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJZGItPnNnYnVmW25yXSA9IHA7CisJCQlTZXRQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHApKTsKKwkJfQorCQltZW1zZXQoZGItPnNnYnVmW25yXSwgQUZNVF9JU1VOU0lHTkVEKGRiLT5mb3JtYXQpID8gMHg4MCA6IDAsIFBBR0VfU0laRSk7CisJCWlmICgobnIgPDwgUEFHRV9TSElGVCkgPj0gZGItPmRtYXNpemUpCisJCQlicmVhazsKKwl9CisJZGItPmJ1ZnNpemUgPSBuciA8PCBQQUdFX1NISUZUOworCWRiLT5yZWFkeSA9IDE7CisJZHByaW50aygoS0VSTl9ERUJVRyAidXNiYXVkaW86IGRtYWJ1Zl9pbml0IGJ5dGVwZXJzZWMgJWQgYnVmcyAlZCBvc3NmcmFnc2hpZnQgJWQgb3NzbWF4ZnJhZ3MgJWQgIgorCSAgICAgICAgICJmcmFnc2hpZnQgJWQgZnJhZ3NpemUgJWQgbnVtZnJhZyAlZCBkbWFzaXplICVkIGJ1ZnNpemUgJWQgZm10IDB4JXggc3JhdGUgJWRcbiIsCisJICAgICAgICAgYnl0ZXBlcnNlYywgYnVmcywgZGItPm9zc2ZyYWdzaGlmdCwgZGItPm9zc21heGZyYWdzLCBkYi0+ZnJhZ3NoaWZ0LCBkYi0+ZnJhZ3NpemUsCisJICAgICAgICAgZGItPm51bWZyYWcsIGRiLT5kbWFzaXplLCBkYi0+YnVmc2l6ZSwgZGItPmZvcm1hdCwgZGItPnNyYXRlKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZG1hYnVmX21tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBkbWFidWYgKmRiLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpCit7CisJdW5zaWduZWQgaW50IG5yOworCisJaWYgKCFkYi0+cmVhZHkgfHwgZGItPm1hcHBlZCB8fCAoc3RhcnQgfCBzaXplKSAmIChQQUdFX1NJWkUtMSkgfHwgc2l6ZSA+IGRiLT5idWZzaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzaXplID4+PSBQQUdFX1NISUZUOworCWZvcihuciA9IDA7IG5yIDwgc2l6ZTsgbnIrKykKKwkJaWYgKCFkYi0+c2didWZbbnJdKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJZGItPm1hcHBlZCA9IDE7CisJZm9yKG5yID0gMDsgbnIgPCBzaXplOyBucisrKSB7CisJCXVuc2lnbmVkIGxvbmcgcGZuOworCisJCXBmbiA9IHZpcnRfdG9fcGh5cyhkYi0+c2didWZbbnJdKSA+PiBQQUdFX1NISUZUOworCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBmbiwgUEFHRV9TSVpFLCBwcm90KSkKKwkJCXJldHVybiAtRUFHQUlOOworCQlzdGFydCArPSBQQUdFX1NJWkU7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkbWFidWZfY29weWluKHN0cnVjdCBkbWFidWYgKmRiLCBjb25zdCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGludCBzaXplKQoreworCXVuc2lnbmVkIGludCBwZ3JlbSwgcmVtOworCisJZGItPnRvdGFsX2J5dGVzICs9IHNpemU7CisJZm9yICg7OykgeworCQlpZiAoc2l6ZSA8PSAwKQorCQkJcmV0dXJuOworCQlwZ3JlbSA9ICgofmRiLT53cnB0cikgJiAoUEFHRV9TSVpFLTEpKSArIDE7CisJCWlmIChwZ3JlbSA+IHNpemUpCisJCQlwZ3JlbSA9IHNpemU7CisJCXJlbSA9IGRiLT5kbWFzaXplIC0gZGItPndycHRyOworCQlpZiAocGdyZW0gPiByZW0pCisJCQlwZ3JlbSA9IHJlbTsKKwkJbWVtY3B5KChkYi0+c2didWZbZGItPndycHRyID4+IFBBR0VfU0hJRlRdKSArIChkYi0+d3JwdHIgJiAoUEFHRV9TSVpFLTEpKSwgYnVmZmVyLCBwZ3JlbSk7CisJCXNpemUgLT0gcGdyZW07CisJCWJ1ZmZlciArPSBwZ3JlbTsKKwkJZGItPndycHRyICs9IHBncmVtOworCQlpZiAoZGItPndycHRyID49IGRiLT5kbWFzaXplKQorCQkJZGItPndycHRyID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRtYWJ1Zl9jb3B5b3V0KHN0cnVjdCBkbWFidWYgKmRiLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGludCBzaXplKQoreworCXVuc2lnbmVkIGludCBwZ3JlbSwgcmVtOworCisJZGItPnRvdGFsX2J5dGVzICs9IHNpemU7CisJZm9yICg7OykgeworCQlpZiAoc2l6ZSA8PSAwKQorCQkJcmV0dXJuOworCQlwZ3JlbSA9ICgofmRiLT5yZHB0cikgJiAoUEFHRV9TSVpFLTEpKSArIDE7CisJCWlmIChwZ3JlbSA+IHNpemUpCisJCQlwZ3JlbSA9IHNpemU7CisJCXJlbSA9IGRiLT5kbWFzaXplIC0gZGItPnJkcHRyOworCQlpZiAocGdyZW0gPiByZW0pCisJCQlwZ3JlbSA9IHJlbTsKKwkJbWVtY3B5KGJ1ZmZlciwgKGRiLT5zZ2J1ZltkYi0+cmRwdHIgPj4gUEFHRV9TSElGVF0pICsgKGRiLT5yZHB0ciAmIChQQUdFX1NJWkUtMSkpLCBwZ3JlbSk7CisJCXNpemUgLT0gcGdyZW07CisJCWJ1ZmZlciArPSBwZ3JlbTsKKwkJZGItPnJkcHRyICs9IHBncmVtOworCQlpZiAoZGItPnJkcHRyID49IGRiLT5kbWFzaXplKQorCQkJZGItPnJkcHRyID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZG1hYnVmX2NvcHlpbl91c2VyKHN0cnVjdCBkbWFidWYgKmRiLCB1bnNpZ25lZCBpbnQgcHRyLCBjb25zdCB2b2lkIF9fdXNlciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgcGdyZW0sIHJlbTsKKworCWlmICghZGItPnJlYWR5IHx8IGRiLT5tYXBwZWQpCisJCXJldHVybiAtRUlOVkFMOworCWZvciAoOzspIHsKKwkJaWYgKHNpemUgPD0gMCkKKwkJCXJldHVybiAwOworCQlwZ3JlbSA9ICgofnB0cikgJiAoUEFHRV9TSVpFLTEpKSArIDE7CisJCWlmIChwZ3JlbSA+IHNpemUpCisJCQlwZ3JlbSA9IHNpemU7CisJCXJlbSA9IGRiLT5kbWFzaXplIC0gcHRyOworCQlpZiAocGdyZW0gPiByZW0pCisJCQlwZ3JlbSA9IHJlbTsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKChkYi0+c2didWZbcHRyID4+IFBBR0VfU0hJRlRdKSArIChwdHIgJiAoUEFHRV9TSVpFLTEpKSwgYnVmZmVyLCBwZ3JlbSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJc2l6ZSAtPSBwZ3JlbTsKKwkJYnVmZmVyICs9IHBncmVtOworCQlwdHIgKz0gcGdyZW07CisJCWlmIChwdHIgPj0gZGItPmRtYXNpemUpCisJCQlwdHIgPSAwOworCX0KK30KKworc3RhdGljIGludCBkbWFidWZfY29weW91dF91c2VyKHN0cnVjdCBkbWFidWYgKmRiLCB1bnNpZ25lZCBpbnQgcHRyLCB2b2lkIF9fdXNlciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgcGdyZW0sIHJlbTsKKworCWlmICghZGItPnJlYWR5IHx8IGRiLT5tYXBwZWQpCisJCXJldHVybiAtRUlOVkFMOworCWZvciAoOzspIHsKKwkJaWYgKHNpemUgPD0gMCkKKwkJCXJldHVybiAwOworCQlwZ3JlbSA9ICgofnB0cikgJiAoUEFHRV9TSVpFLTEpKSArIDE7CisJCWlmIChwZ3JlbSA+IHNpemUpCisJCQlwZ3JlbSA9IHNpemU7CisJCXJlbSA9IGRiLT5kbWFzaXplIC0gcHRyOworCQlpZiAocGdyZW0gPiByZW0pCisJCQlwZ3JlbSA9IHJlbTsKKwkJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIsIChkYi0+c2didWZbcHRyID4+IFBBR0VfU0hJRlRdKSArIChwdHIgJiAoUEFHRV9TSVpFLTEpKSwgcGdyZW0pKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXNpemUgLT0gcGdyZW07CisJCWJ1ZmZlciArPSBwZ3JlbTsKKwkJcHRyICs9IHBncmVtOworCQlpZiAocHRyID49IGRiLT5kbWFzaXplKQorCQkJcHRyID0gMDsKKwl9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoKKyAqIFVTQiBJL08gY29kZS4gV2UgZG8gc2FtcGxlIGZvcm1hdCBjb252ZXJzaW9uIGlmIG5lY2Vzc2FyeQorICovCisKK3N0YXRpYyB2b2lkIHVzYmluX3N0b3Aoc3RydWN0IHVzYl9hdWRpb2RldiAqYXMpCit7CisJc3RydWN0IHVzYmluICp1ID0gJmFzLT51c2JpbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBpLCBub3RraWxsZWQgPSAxOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJdS0+ZmxhZ3MgJj0gfkZMR19SVU5OSU5HOworCWkgPSB1LT5mbGFnczsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCXdoaWxlIChpICYgKEZMR19VUkIwUlVOTklOR3xGTEdfVVJCMVJVTk5JTkd8RkxHX1NZTkMwUlVOTklOR3xGTEdfU1lOQzFSVU5OSU5HKSkgeworCQlzZXRfY3VycmVudF9zdGF0ZShub3RraWxsZWQgPyBUQVNLX0lOVEVSUlVQVElCTEUgOiBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlX3RpbWVvdXQoMSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlpID0gdS0+ZmxhZ3M7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWlmIChub3RraWxsZWQgJiYgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCWlmIChpICYgRkxHX1VSQjBSVU5OSU5HKQorCQkJCXVzYl9raWxsX3VyYih1LT5kdXJiWzBdLnVyYik7CisJCQlpZiAoaSAmIEZMR19VUkIxUlVOTklORykKKwkJCQl1c2Jfa2lsbF91cmIodS0+ZHVyYlsxXS51cmIpOworCQkJaWYgKGkgJiBGTEdfU1lOQzBSVU5OSU5HKQorCQkJCXVzYl9raWxsX3VyYih1LT5zdXJiWzBdLnVyYik7CisJCQlpZiAoaSAmIEZMR19TWU5DMVJVTk5JTkcpCisJCQkJdXNiX2tpbGxfdXJiKHUtPnN1cmJbMV0udXJiKTsKKwkJCW5vdGtpbGxlZCA9IDA7CisJCX0KKwl9CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwlpZiAodS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlcikKKwkJa2ZyZWUodS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJaWYgKHUtPmR1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIpCisJCWtmcmVlKHUtPmR1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIpOworCWlmICh1LT5zdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKQorCQlrZnJlZSh1LT5zdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwlpZiAodS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcikKKwkJa2ZyZWUodS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJdS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IHUtPmR1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIgPSAKKwkJdS0+c3VyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IHUtPnN1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIgPSBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXNiaW5fcmVsZWFzZShzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcykKK3sKKwl1c2Jpbl9zdG9wKGFzKTsKK30KKworc3RhdGljIHZvaWQgdXNiaW5fZGlzYyhzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcykKK3sKKwlzdHJ1Y3QgdXNiaW4gKnUgPSAmYXMtPnVzYmluOworCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCXUtPmZsYWdzICY9IH4oRkxHX1JVTk5JTkcgfCBGTEdfQ09OTkVDVEVEKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCXVzYmluX3N0b3AoYXMpOworfQorCitzdGF0aWMgdm9pZCBjb252ZXJzaW9uKGNvbnN0IHZvaWQgKmlidWYsIHVuc2lnbmVkIGludCBpZm10LCB2b2lkICpvYnVmLCB1bnNpZ25lZCBpbnQgb2ZtdCwgdm9pZCAqdG1wLCB1bnNpZ25lZCBpbnQgc2NudCkKK3sKKwl1bnNpZ25lZCBpbnQgY250LCBpOworCV9fczE2ICpzcCwgKnNwMiwgczsKKwl1bnNpZ25lZCBjaGFyICpicDsKKworCWNudCA9IHNjbnQ7CisJaWYgKEFGTVRfSVNTVEVSRU8oaWZtdCkpCisJCWNudCA8PD0gMTsKKwlzcCA9ICgoX19zMTYgKil0bXApICsgY250OworCXN3aXRjaCAoaWZtdCAmIH5BRk1UX1NURVJFTykgeworCWNhc2UgQUZNVF9VODoKKwkJZm9yIChicCA9ICgodW5zaWduZWQgY2hhciAqKWlidWYpK2NudCwgaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQkJYnAtLTsKKwkJCXNwLS07CisJCQkqc3AgPSAoKmJwIF4gMHg4MCkgPDwgODsKKwkJfQorCQlicmVhazsKKwkJCQorCWNhc2UgQUZNVF9TODoKKwkJZm9yIChicCA9ICgodW5zaWduZWQgY2hhciAqKWlidWYpK2NudCwgaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQkJYnAtLTsKKwkJCXNwLS07CisJCQkqc3AgPSAqYnAgPDwgODsKKwkJfQorCQlicmVhazsKKwkJCisJY2FzZSBBRk1UX1UxNl9MRToKKwkJZm9yIChicCA9ICgodW5zaWduZWQgY2hhciAqKWlidWYpKzIqY250LCBpID0gMDsgaSA8IGNudDsgaSsrKSB7CisJCQlicCAtPSAyOworCQkJc3AtLTsKKwkJCSpzcCA9IChicFswXSB8IChicFsxXSA8PCA4KSkgXiAweDgwMDA7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEFGTVRfVTE2X0JFOgorCQlmb3IgKGJwID0gKCh1bnNpZ25lZCBjaGFyICopaWJ1ZikrMipjbnQsIGkgPSAwOyBpIDwgY250OyBpKyspIHsKKwkJCWJwIC09IDI7CisJCQlzcC0tOworCQkJKnNwID0gKGJwWzFdIHwgKGJwWzBdIDw8IDgpKSBeIDB4ODAwMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQUZNVF9TMTZfTEU6CisJCWZvciAoYnAgPSAoKHVuc2lnbmVkIGNoYXIgKilpYnVmKSsyKmNudCwgaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQkJYnAgLT0gMjsKKwkJCXNwLS07CisJCQkqc3AgPSBicFswXSB8IChicFsxXSA8PCA4KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQUZNVF9TMTZfQkU6CisJCWZvciAoYnAgPSAoKHVuc2lnbmVkIGNoYXIgKilpYnVmKSsyKmNudCwgaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQkJYnAgLT0gMjsKKwkJCXNwLS07CisJCQkqc3AgPSBicFsxXSB8IChicFswXSA8PCA4KTsKKwkJfQorCQlicmVhazsKKwl9CisJaWYgKCFBRk1UX0lTU1RFUkVPKGlmbXQpICYmIEFGTVRfSVNTVEVSRU8ob2ZtdCkpIHsKKwkJLyogZXhwYW5kIGZyb20gbW9ubyB0byBzdGVyZW8gKi8KKwkJZm9yIChzcCA9ICgoX19zMTYgKil0bXApK3NjbnQsIHNwMiA9ICgoX19zMTYgKil0bXApKzIqc2NudCwgaSA9IDA7IGkgPCBzY250OyBpKyspIHsKKwkJCXNwLS07CisJCQlzcDIgLT0gMjsKKwkJCXNwMlswXSA9IHNwMlsxXSA9IHNwWzBdOworCQl9CisJfQorCWlmIChBRk1UX0lTU1RFUkVPKGlmbXQpICYmICFBRk1UX0lTU1RFUkVPKG9mbXQpKSB7CisJCS8qIGNvbnRyYWN0IGZyb20gc3RlcmVvIHRvIG1vbm8gKi8KKwkJZm9yIChzcCA9IHNwMiA9ICgoX19zMTYgKil0bXApLCBpID0gMDsgaSA8IHNjbnQ7IGkrKywgc3ArKywgc3AyICs9IDIpCisJCQlzcFswXSA9IChzcDJbMF0gKyBzcDJbMV0pID4+IDE7CisJfQorCWNudCA9IHNjbnQ7CisJaWYgKEFGTVRfSVNTVEVSRU8ob2ZtdCkpCisJCWNudCA8PD0gMTsKKwlzcCA9ICgoX19zMTYgKil0bXApOworCWJwID0gKCh1bnNpZ25lZCBjaGFyICopb2J1Zik7CisJc3dpdGNoIChvZm10ICYgfkFGTVRfU1RFUkVPKSB7CisJY2FzZSBBRk1UX1U4OgorCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyssIHNwKyssIGJwKyspCisJCQkqYnAgPSAoKnNwID4+IDgpIF4gMHg4MDsKKwkJYnJlYWs7CisKKwljYXNlIEFGTVRfUzg6CisJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgc3ArKywgYnArKykKKwkJCSpicCA9ICpzcCA+PiA4OworCQlicmVhazsKKworCWNhc2UgQUZNVF9VMTZfTEU6CisJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgc3ArKywgYnAgKz0gMikgeworCQkJcyA9ICpzcDsKKwkJCWJwWzBdID0gczsKKwkJCWJwWzFdID0gKHMgPj4gOCkgXiAweDgwOworCQl9CisJCWJyZWFrOworCisJY2FzZSBBRk1UX1UxNl9CRToKKwkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrLCBzcCsrLCBicCArPSAyKSB7CisJCQlzID0gKnNwOworCQkJYnBbMV0gPSBzOworCQkJYnBbMF0gPSAocyA+PiA4KSBeIDB4ODA7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEFGTVRfUzE2X0xFOgorCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyssIHNwKyssIGJwICs9IDIpIHsKKwkJCXMgPSAqc3A7CisJCQlicFswXSA9IHM7CisJCQlicFsxXSA9IHMgPj4gODsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQUZNVF9TMTZfQkU6CisJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgc3ArKywgYnAgKz0gMikgeworCQkJcyA9ICpzcDsKKwkJCWJwWzFdID0gczsKKwkJCWJwWzBdID0gcyA+PiA4OworCQl9CisJCWJyZWFrOworCX0KKwkKK30KKworc3RhdGljIHZvaWQgdXNiaW5fY29udmVydChzdHJ1Y3QgdXNiaW4gKnUsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IHNhbXBsZXMpCit7CisJdW5pb24geworCQlfX3MxNiBzWzY0XTsKKwkJdW5zaWduZWQgY2hhciBiWzBdOworCX0gdG1wOworCXVuc2lnbmVkIGludCBzY250LCBtYXhzLCB1Zm10c2gsIGRmbXRzaDsKKworCXVmbXRzaCA9IEFGTVRfQllURVNTSElGVCh1LT5mb3JtYXQpOworCWRmbXRzaCA9IEFGTVRfQllURVNTSElGVCh1LT5kbWEuZm9ybWF0KTsKKwltYXhzID0gKEFGTVRfSVNTVEVSRU8odS0+ZG1hLmZvcm1hdCB8IHUtPmZvcm1hdCkpID8gMzIgOiA2NDsKKwl3aGlsZSAoc2FtcGxlcyA+IDApIHsKKwkJc2NudCA9IHNhbXBsZXM7CisJCWlmIChzY250ID4gbWF4cykKKwkJCXNjbnQgPSBtYXhzOworCQljb252ZXJzaW9uKGJ1ZmZlciwgdS0+Zm9ybWF0LCB0bXAuYiwgdS0+ZG1hLmZvcm1hdCwgdG1wLmIsIHNjbnQpOworCQlkbWFidWZfY29weWluKCZ1LT5kbWEsIHRtcC5iLCBzY250IDw8IGRmbXRzaCk7CisJCWJ1ZmZlciArPSBzY250IDw8IHVmbXRzaDsKKwkJc2FtcGxlcyAtPSBzY250OworCX0KK30JCQorCitzdGF0aWMgaW50IHVzYmluX3ByZXBhcmVfZGVzYyhzdHJ1Y3QgdXNiaW4gKnUsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwl1bnNpZ25lZCBpbnQgaSwgbWF4c2l6ZSwgb2ZmczsKKworCW1heHNpemUgPSAodS0+ZnJlcW1heCArIDB4M2ZmZikgPj4gKDE0IC0gQUZNVF9CWVRFU1NISUZUKHUtPmZvcm1hdCkpOworCS8vcHJpbnRrKEtFUk5fREVCVUcgInVzYmluX3ByZXBhcmVfZGVzYzogbWF4c2l6ZSAlZCBmcmVxIDB4JXggZm9ybWF0IDB4JXhcbiIsIG1heHNpemUsIHUtPmZyZXFuLCB1LT5mb3JtYXQpOworCWZvciAoaSA9IG9mZnMgPSAwOyBpIDwgREVTQ0ZSQU1FUzsgaSsrLCBvZmZzICs9IG1heHNpemUpIHsKKwkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGggPSBtYXhzaXplOworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCA9IG9mZnM7CisJfQorCXVyYi0+aW50ZXJ2YWwgPSAxOworCXJldHVybiAwOworfQorCisvKgorICogcmV0dXJuIHZhbHVlOiAwIGlmIGRlc2NyaXB0b3Igc2hvdWxkIGJlIHJlc3RhcnRlZCwgLTEgb3RoZXJ3aXNlCisgKiBjb252ZXJ0IHNhbXBsZSBmb3JtYXQgb24gdGhlIGZseSBpZiBuZWNlc3NhcnkKKyAqLworc3RhdGljIGludCB1c2Jpbl9yZXRpcmVfZGVzYyhzdHJ1Y3QgdXNiaW4gKnUsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwl1bnNpZ25lZCBpbnQgaSwgdWZtdHNoLCBkZm10c2gsIGVyciA9IDAsIGNudCwgc2NudCwgZG1hZnJlZTsKKwl1bnNpZ25lZCBjaGFyICpjcDsKKworCXVmbXRzaCA9IEFGTVRfQllURVNTSElGVCh1LT5mb3JtYXQpOworCWRmbXRzaCA9IEFGTVRfQllURVNTSElGVCh1LT5kbWEuZm9ybWF0KTsKKwlmb3IgKGkgPSAwOyBpIDwgREVTQ0ZSQU1FUzsgaSsrKSB7CisJCWNwID0gKCh1bnNpZ25lZCBjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXIpICsgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7CisJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cykgeworCQkJZHByaW50aygoS0VSTl9ERUJVRyAidXNiaW5fcmV0aXJlX2Rlc2M6IGZyYW1lICV1IHN0YXR1cyAlZFxuIiwgaSwgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXNjbnQgPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggPj4gdWZtdHNoOworCQlpZiAoIXNjbnQpCisJCQljb250aW51ZTsKKwkJY250ID0gc2NudCA8PCBkZm10c2g7CisJCWlmICghdS0+ZG1hLm1hcHBlZCkgeworCQkJZG1hZnJlZSA9IHUtPmRtYS5kbWFzaXplIC0gdS0+ZG1hLmNvdW50OworCQkJaWYgKGNudCA+IGRtYWZyZWUpIHsKKwkJCQlzY250ID0gZG1hZnJlZSA+PiBkZm10c2g7CisJCQkJY250ID0gc2NudCA8PCBkZm10c2g7CisJCQkJZXJyKys7CisJCQl9CisJCX0KKwkJdS0+ZG1hLmNvdW50ICs9IGNudDsKKwkJaWYgKHUtPmZvcm1hdCA9PSB1LT5kbWEuZm9ybWF0KSB7CisJCQkvKiB3ZSBkbyBub3QgbmVlZCBmb3JtYXQgY29udmVyc2lvbiAqLworCQkJZHByaW50aygoS0VSTl9ERUJVRyAidXNiYXVkaW86IG5vIHNhbXBsZSBmb3JtYXQgY29udmVyc2lvblxuIikpOworCQkJZG1hYnVmX2NvcHlpbigmdS0+ZG1hLCBjcCwgY250KTsKKwkJfSBlbHNlIHsKKwkJCS8qIHdlIG5lZWQgc2FtcGxpbmcgZm9ybWF0IGNvbnZlcnNpb24gKi8KKwkJCWRwcmludGsoKEtFUk5fREVCVUcgInVzYmF1ZGlvOiBzYW1wbGUgZm9ybWF0IGNvbnZlcnNpb24gJXggIT0gJXhcbiIsIHUtPmZvcm1hdCwgdS0+ZG1hLmZvcm1hdCkpOworCQkJdXNiaW5fY29udmVydCh1LCBjcCwgc2NudCk7CisJCX0KKwl9CisJaWYgKGVycikKKwkJdS0+ZG1hLmVycm9yKys7CisJaWYgKHUtPmRtYS5jb3VudCA+PSAoc2lnbmVkKXUtPmRtYS5mcmFnc2l6ZSkKKwkJd2FrZV91cCgmdS0+ZG1hLndhaXQpOworCXJldHVybiBlcnIgPyAtMSA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYmluX2NvbXBsZXRlZChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzID0gKHN0cnVjdCB1c2JfYXVkaW9kZXYgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHVzYmluICp1ID0gJmFzLT51c2JpbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBtYXNrOworCWludCBzdXJldCA9IDA7CisKKyNpZiAwCisJcHJpbnRrKEtFUk5fREVCVUcgInVzYmluX2NvbXBsZXRlZDogc3RhdHVzICVkIGVycmNudCAlZCBmbGFncyAweCV4XG4iLCB1cmItPnN0YXR1cywgdXJiLT5lcnJvcl9jb3VudCwgdS0+ZmxhZ3MpOworI2VuZGlmCisJaWYgKHVyYiA9PSB1LT5kdXJiWzBdLnVyYikKKwkJbWFzayA9IEZMR19VUkIwUlVOTklORzsKKwllbHNlIGlmICh1cmIgPT0gdS0+ZHVyYlsxXS51cmIpCisJCW1hc2sgPSBGTEdfVVJCMVJVTk5JTkc7CisJZWxzZSB7CisJCW1hc2sgPSAwOworCQlwcmludGsoS0VSTl9FUlIgInVzYmluX2NvbXBsZXRlZDogcGFuaWM6IHVua25vd24gVVJCXG4iKTsKKwl9CisJdXJiLT5kZXYgPSBhcy0+c3RhdGUtPnVzYmRldjsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwlpZiAoIXVzYmluX3JldGlyZV9kZXNjKHUsIHVyYikgJiYKKwkgICAgdS0+ZmxhZ3MgJiBGTEdfUlVOTklORyAmJgorCSAgICAhdXNiaW5fcHJlcGFyZV9kZXNjKHUsIHVyYikgJiYgCisJICAgIChzdXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpID09IDApIHsKKwkJdS0+ZmxhZ3MgfD0gbWFzazsKKwl9IGVsc2UgeworCQl1LT5mbGFncyAmPSB+KG1hc2sgfCBGTEdfUlVOTklORyk7CisJCXdha2VfdXAoJnUtPmRtYS53YWl0KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInVzYmluX2NvbXBsZXRlZDogZGVzY3JpcHRvciBub3QgcmVzdGFydGVkICh1c2Jfc3VibWl0X3VyYjogJWQpXG4iLCBzdXJldCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiB3ZSBvdXRwdXQgc3luYyBkYXRhCisgKi8KK3N0YXRpYyBpbnQgdXNiaW5fc3luY19wcmVwYXJlX2Rlc2Moc3RydWN0IHVzYmluICp1LCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJdW5zaWduZWQgY2hhciAqY3AgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwl1bnNpZ25lZCBpbnQgaSwgb2ZmczsKKwkKKwlmb3IgKGkgPSBvZmZzID0gMDsgaSA8IFNZTkNGUkFNRVM7IGkrKywgb2ZmcyArPSAzLCBjcCArPSAzKSB7CisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID0gMzsKKwkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQgPSBvZmZzOworCQljcFswXSA9IHUtPmZyZXFuOworCQljcFsxXSA9IHUtPmZyZXFuID4+IDg7CisJCWNwWzJdID0gdS0+ZnJlcW4gPj4gMTY7CisJfQorCXVyYi0+aW50ZXJ2YWwgPSAxOworCXJldHVybiAwOworfQorCisvKgorICogcmV0dXJuIHZhbHVlOiAwIGlmIGRlc2NyaXB0b3Igc2hvdWxkIGJlIHJlc3RhcnRlZCwgLTEgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgdXNiaW5fc3luY19yZXRpcmVfZGVzYyhzdHJ1Y3QgdXNiaW4gKnUsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwkKKwlmb3IgKGkgPSAwOyBpIDwgU1lOQ0ZSQU1FUzsgaSsrKQorCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1swXS5zdGF0dXMpCisJCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2Jpbl9zeW5jX3JldGlyZV9kZXNjOiBmcmFtZSAldSBzdGF0dXMgJWRcbiIsIGksIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYmluX3N5bmNfY29tcGxldGVkKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9hdWRpb2RldiAqYXMgPSAoc3RydWN0IHVzYl9hdWRpb2RldiAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNiaW4gKnUgPSAmYXMtPnVzYmluOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IG1hc2s7CisJaW50IHN1cmV0ID0gMDsKKworI2lmIDAKKwlwcmludGsoS0VSTl9ERUJVRyAidXNiaW5fc3luY19jb21wbGV0ZWQ6IHN0YXR1cyAlZCBlcnJjbnQgJWQgZmxhZ3MgMHgleFxuIiwgdXJiLT5zdGF0dXMsIHVyYi0+ZXJyb3JfY291bnQsIHUtPmZsYWdzKTsKKyNlbmRpZgorCWlmICh1cmIgPT0gdS0+c3VyYlswXS51cmIpCisJCW1hc2sgPSBGTEdfU1lOQzBSVU5OSU5HOworCWVsc2UgaWYgKHVyYiA9PSB1LT5zdXJiWzFdLnVyYikKKwkJbWFzayA9IEZMR19TWU5DMVJVTk5JTkc7CisJZWxzZSB7CisJCW1hc2sgPSAwOworCQlwcmludGsoS0VSTl9FUlIgInVzYmluX3N5bmNfY29tcGxldGVkOiBwYW5pYzogdW5rbm93biBVUkJcbiIpOworCX0KKwl1cmItPmRldiA9IGFzLT5zdGF0ZS0+dXNiZGV2OworCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCWlmICghdXNiaW5fc3luY19yZXRpcmVfZGVzYyh1LCB1cmIpICYmCisJICAgIHUtPmZsYWdzICYgRkxHX1JVTk5JTkcgJiYKKwkgICAgIXVzYmluX3N5bmNfcHJlcGFyZV9kZXNjKHUsIHVyYikgJiYgCisJICAgIChzdXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpID09IDApIHsKKwkJdS0+ZmxhZ3MgfD0gbWFzazsKKwl9IGVsc2UgeworCQl1LT5mbGFncyAmPSB+KG1hc2sgfCBGTEdfUlVOTklORyk7CisJCXdha2VfdXAoJnUtPmRtYS53YWl0KTsKKwkJZHByaW50aygoS0VSTl9ERUJVRyAidXNiaW5fc3luY19jb21wbGV0ZWQ6IGRlc2NyaXB0b3Igbm90IHJlc3RhcnRlZCAodXNiX3N1Ym1pdF91cmI6ICVkKVxuIiwgc3VyZXQpKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCB1c2Jpbl9zdGFydChzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcykKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gYXMtPnN0YXRlLT51c2JkZXY7CisJc3RydWN0IHVzYmluICp1ID0gJmFzLT51c2JpbjsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgbWF4c3plLCBidWZzejsKKworI2lmIDAKKwlwcmludGsoS0VSTl9ERUJVRyAidXNiaW5fc3RhcnQ6IGRldmljZSAlZCB1Zm10IDB4JTA4eCBkZm10IDB4JTA4eCBzcmF0ZSAlZFxuIiwKKwkgICAgICAgZGV2LT5kZXZudW0sIHUtPmZvcm1hdCwgdS0+ZG1hLmZvcm1hdCwgdS0+ZG1hLnNyYXRlKTsKKyNlbmRpZgorCS8qIGFsbG9jYXRlIFVTQiBzdG9yYWdlIGlmIG5vdCBhbHJlYWR5IGRvbmUgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwlpZiAoISh1LT5mbGFncyAmIEZMR19DT05ORUNURUQpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoISh1LT5mbGFncyAmIEZMR19SVU5OSU5HKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCQl1LT5mcmVxbiA9ICgodS0+ZG1hLnNyYXRlIDw8IDExKSArIDYyKSAvIDEyNTsgLyogdGhpcyB3aWxsIG92ZXJmbG93IGF0IGFwcHJveCAyTVNQUyAqLworCQl1LT5mcmVxbWF4ID0gdS0+ZnJlcW4gKyAodS0+ZnJlcW4gPj4gMik7CisJCXUtPnBoYXNlID0gMDsKKwkJbWF4c3plID0gKHUtPmZyZXFtYXggKyAweDNmZmYpID4+ICgxNCAtIEFGTVRfQllURVNTSElGVCh1LT5mb3JtYXQpKTsKKwkJYnVmc3ogPSBERVNDRlJBTUVTICogbWF4c3plOworCQlpZiAodS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlcikKKwkJCWtmcmVlKHUtPmR1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQl1LT5kdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyhidWZzeiwgR0ZQX0tFUk5FTCk7CisJCXUtPmR1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gYnVmc3o7CisJCWlmICh1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKQorCQkJa2ZyZWUodS0+ZHVyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCXUtPmR1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwkJdS0+ZHVyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBidWZzejsKKwkJaWYgKHUtPnN5bmNwaXBlKSB7CisJCQlpZiAodS0+c3VyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlcikKKwkJCQlrZnJlZSh1LT5zdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJCXUtPnN1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKDMqU1lOQ0ZSQU1FUywgR0ZQX0tFUk5FTCk7CisJCQl1LT5zdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDMqU1lOQ0ZSQU1FUzsKKwkJCWlmICh1LT5zdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKQorCQkJCWtmcmVlKHUtPnN1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQkJdS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoMypTWU5DRlJBTUVTLCBHRlBfS0VSTkVMKTsKKwkJCXUtPnN1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gMypTWU5DRlJBTUVTOworCQl9CisJCWlmICghdS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciB8fCAhdS0+ZHVyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlciB8fCAKKwkJICAgICh1LT5zeW5jcGlwZSAmJiAoIXUtPnN1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIgfHwgIXUtPnN1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIpKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogY2Fubm90IHN0YXJ0IHBsYXliYWNrIGRldmljZSAlZFxuIiwgZGV2LT5kZXZudW0pOworCQkJcmV0dXJuIDA7CisJCX0KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJfQorCWlmICh1LT5kbWEuY291bnQgPj0gdS0+ZG1hLmRtYXNpemUgJiYgIXUtPmRtYS5tYXBwZWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCXUtPmZsYWdzIHw9IEZMR19SVU5OSU5HOworCWlmICghKHUtPmZsYWdzICYgRkxHX1VSQjBSVU5OSU5HKSkgeworCQl1cmIgPSB1LT5kdXJiWzBdLnVyYjsKKwkJdXJiLT5kZXYgPSBkZXY7CisJCXVyYi0+cGlwZSA9IHUtPmRhdGFwaXBlOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gREVTQ0ZSQU1FUzsKKwkJdXJiLT5jb250ZXh0ID0gYXM7CisJCXVyYi0+Y29tcGxldGUgPSB1c2Jpbl9jb21wbGV0ZWQ7CisJCWlmICghdXNiaW5fcHJlcGFyZV9kZXNjKHUsIHVyYikgJiYgIXVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCkpCisJCQl1LT5mbGFncyB8PSBGTEdfVVJCMFJVTk5JTkc7CisJCWVsc2UKKwkJCXUtPmZsYWdzICY9IH5GTEdfUlVOTklORzsKKwl9CisJaWYgKHUtPmZsYWdzICYgRkxHX1JVTk5JTkcgJiYgISh1LT5mbGFncyAmIEZMR19VUkIxUlVOTklORykpIHsKKwkJdXJiID0gdS0+ZHVyYlsxXS51cmI7CisJCXVyYi0+ZGV2ID0gZGV2OworCQl1cmItPnBpcGUgPSB1LT5kYXRhcGlwZTsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IERFU0NGUkFNRVM7CisJCXVyYi0+Y29udGV4dCA9IGFzOworCQl1cmItPmNvbXBsZXRlID0gdXNiaW5fY29tcGxldGVkOworCQlpZiAoIXVzYmluX3ByZXBhcmVfZGVzYyh1LCB1cmIpICYmICF1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpKQorCQkJdS0+ZmxhZ3MgfD0gRkxHX1VSQjFSVU5OSU5HOworCQllbHNlCisJCQl1LT5mbGFncyAmPSB+RkxHX1JVTk5JTkc7CisJfQorCWlmICh1LT5zeW5jcGlwZSkgeworCQlpZiAodS0+ZmxhZ3MgJiBGTEdfUlVOTklORyAmJiAhKHUtPmZsYWdzICYgRkxHX1NZTkMwUlVOTklORykpIHsKKwkJCXVyYiA9IHUtPnN1cmJbMF0udXJiOworCQkJdXJiLT5kZXYgPSBkZXY7CisJCQl1cmItPnBpcGUgPSB1LT5zeW5jcGlwZTsKKwkJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gU1lOQ0ZSQU1FUzsKKwkJCXVyYi0+Y29udGV4dCA9IGFzOworCQkJdXJiLT5jb21wbGV0ZSA9IHVzYmluX3N5bmNfY29tcGxldGVkOworCQkJLyogc3RyaWRlOiB1LT5zeW5jaW50ZXJ2YWwgKi8KKwkJCWlmICghdXNiaW5fc3luY19wcmVwYXJlX2Rlc2ModSwgdXJiKSAmJiAhdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKSkKKwkJCQl1LT5mbGFncyB8PSBGTEdfU1lOQzBSVU5OSU5HOworCQkJZWxzZQorCQkJCXUtPmZsYWdzICY9IH5GTEdfUlVOTklORzsKKwkJfQorCQlpZiAodS0+ZmxhZ3MgJiBGTEdfUlVOTklORyAmJiAhKHUtPmZsYWdzICYgRkxHX1NZTkMxUlVOTklORykpIHsKKwkJCXVyYiA9IHUtPnN1cmJbMV0udXJiOworCQkJdXJiLT5kZXYgPSBkZXY7CisJCQl1cmItPnBpcGUgPSB1LT5zeW5jcGlwZTsKKwkJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gU1lOQ0ZSQU1FUzsKKwkJCXVyYi0+Y29udGV4dCA9IGFzOworCQkJdXJiLT5jb21wbGV0ZSA9IHVzYmluX3N5bmNfY29tcGxldGVkOworCQkJLyogc3RyaWRlOiB1LT5zeW5jaW50ZXJ2YWwgKi8KKwkJCWlmICghdXNiaW5fc3luY19wcmVwYXJlX2Rlc2ModSwgdXJiKSAmJiAhdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKSkKKwkJCQl1LT5mbGFncyB8PSBGTEdfU1lOQzFSVU5OSU5HOworCQkJZWxzZQorCQkJCXUtPmZsYWdzICY9IH5GTEdfUlVOTklORzsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1c2JvdXRfc3RvcChzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcykKK3sKKwlzdHJ1Y3QgdXNib3V0ICp1ID0gJmFzLT51c2JvdXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaSwgbm90a2lsbGVkID0gMTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCXUtPmZsYWdzICY9IH5GTEdfUlVOTklORzsKKwlpID0gdS0+ZmxhZ3M7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwl3aGlsZSAoaSAmIChGTEdfVVJCMFJVTk5JTkd8RkxHX1VSQjFSVU5OSU5HfEZMR19TWU5DMFJVTk5JTkd8RkxHX1NZTkMxUlVOTklORykpIHsKKwkJc2V0X2N1cnJlbnRfc3RhdGUobm90a2lsbGVkID8gVEFTS19JTlRFUlJVUFRJQkxFIDogVEFTS19VTklOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZV90aW1lb3V0KDEpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwkJaSA9IHUtPmZsYWdzOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlpZiAobm90a2lsbGVkICYmIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlpZiAoaSAmIEZMR19VUkIwUlVOTklORykKKwkJCQl1c2Jfa2lsbF91cmIodS0+ZHVyYlswXS51cmIpOworCQkJaWYgKGkgJiBGTEdfVVJCMVJVTk5JTkcpCisJCQkJdXNiX2tpbGxfdXJiKHUtPmR1cmJbMV0udXJiKTsKKwkJCWlmIChpICYgRkxHX1NZTkMwUlVOTklORykKKwkJCQl1c2Jfa2lsbF91cmIodS0+c3VyYlswXS51cmIpOworCQkJaWYgKGkgJiBGTEdfU1lOQzFSVU5OSU5HKQorCQkJCXVzYl9raWxsX3VyYih1LT5zdXJiWzFdLnVyYik7CisJCQlub3RraWxsZWQgPSAwOworCQl9CisJfQorCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJaWYgKHUtPmR1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIpCisJCWtmcmVlKHUtPmR1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIpOworCWlmICh1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKQorCQlrZnJlZSh1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwlpZiAodS0+c3VyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlcikKKwkJa2ZyZWUodS0+c3VyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJaWYgKHUtPnN1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIpCisJCWtmcmVlKHUtPnN1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIpOworCXUtPmR1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIgPSB1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyID0gCisJCXUtPnN1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIgPSB1LT5zdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyID0gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVzYm91dF9yZWxlYXNlKHN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzKQoreworCXVzYm91dF9zdG9wKGFzKTsKK30KKworc3RhdGljIHZvaWQgdXNib3V0X2Rpc2Moc3RydWN0IHVzYl9hdWRpb2RldiAqYXMpCit7CisJc3RydWN0IHVzYm91dCAqdSA9ICZhcy0+dXNib3V0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwl1LT5mbGFncyAmPSB+KEZMR19SVU5OSU5HIHwgRkxHX0NPTk5FQ1RFRCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwl1c2JvdXRfc3RvcChhcyk7Cit9CisKK3N0YXRpYyB2b2lkIHVzYm91dF9jb252ZXJ0KHN0cnVjdCB1c2JvdXQgKnUsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IHNhbXBsZXMpCit7CisJdW5pb24geworCQlfX3MxNiBzWzY0XTsKKwkJdW5zaWduZWQgY2hhciBiWzBdOworCX0gdG1wOworCXVuc2lnbmVkIGludCBzY250LCBtYXhzLCB1Zm10c2gsIGRmbXRzaDsKKworCXVmbXRzaCA9IEFGTVRfQllURVNTSElGVCh1LT5mb3JtYXQpOworCWRmbXRzaCA9IEFGTVRfQllURVNTSElGVCh1LT5kbWEuZm9ybWF0KTsKKwltYXhzID0gKEFGTVRfSVNTVEVSRU8odS0+ZG1hLmZvcm1hdCB8IHUtPmZvcm1hdCkpID8gMzIgOiA2NDsKKwl3aGlsZSAoc2FtcGxlcyA+IDApIHsKKwkJc2NudCA9IHNhbXBsZXM7CisJCWlmIChzY250ID4gbWF4cykKKwkJCXNjbnQgPSBtYXhzOworCQlkbWFidWZfY29weW91dCgmdS0+ZG1hLCB0bXAuYiwgc2NudCA8PCBkZm10c2gpOworCQljb252ZXJzaW9uKHRtcC5iLCB1LT5kbWEuZm9ybWF0LCBidWZmZXIsIHUtPmZvcm1hdCwgdG1wLmIsIHNjbnQpOworCQlidWZmZXIgKz0gc2NudCA8PCB1Zm10c2g7CisJCXNhbXBsZXMgLT0gc2NudDsKKwl9Cit9CQkKKworc3RhdGljIGludCB1c2JvdXRfcHJlcGFyZV9kZXNjKHN0cnVjdCB1c2JvdXQgKnUsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwl1bnNpZ25lZCBpbnQgaSwgdWZtdHNoLCBkZm10c2gsIGVyciA9IDAsIGNudCwgc2NudCwgb2ZmczsKKwl1bnNpZ25lZCBjaGFyICpjcCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCisJdWZtdHNoID0gQUZNVF9CWVRFU1NISUZUKHUtPmZvcm1hdCk7CisJZGZtdHNoID0gQUZNVF9CWVRFU1NISUZUKHUtPmRtYS5mb3JtYXQpOworCWZvciAoaSA9IG9mZnMgPSAwOyBpIDwgREVTQ0ZSQU1FUzsgaSsrKSB7CisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0ID0gb2ZmczsKKwkJdS0+cGhhc2UgPSAodS0+cGhhc2UgJiAweDNmZmYpICsgdS0+ZnJlcW07CisJCXNjbnQgPSB1LT5waGFzZSA+PiAxNDsKKwkJaWYgKCFzY250KSB7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCQljbnQgPSBzY250IDw8IGRmbXRzaDsKKwkJaWYgKCF1LT5kbWEubWFwcGVkKSB7CisJCQlpZiAoY250ID4gdS0+ZG1hLmNvdW50KSB7CisJCQkJc2NudCA9IHUtPmRtYS5jb3VudCA+PiBkZm10c2g7CisJCQkJY250ID0gc2NudCA8PCBkZm10c2g7CisJCQkJZXJyKys7CisJCQl9CisJCQl1LT5kbWEuY291bnQgLT0gY250OworCQl9IGVsc2UKKwkJCXUtPmRtYS5jb3VudCArPSBjbnQ7CisJCWlmICh1LT5mb3JtYXQgPT0gdS0+ZG1hLmZvcm1hdCkgeworCQkJLyogd2UgZG8gbm90IG5lZWQgZm9ybWF0IGNvbnZlcnNpb24gKi8KKwkJCWRtYWJ1Zl9jb3B5b3V0KCZ1LT5kbWEsIGNwLCBjbnQpOworCQl9IGVsc2UgeworCQkJLyogd2UgbmVlZCBzYW1wbGluZyBmb3JtYXQgY29udmVyc2lvbiAqLworCQkJdXNib3V0X2NvbnZlcnQodSwgY3AsIHNjbnQpOworCQl9CisJCWNudCA9IHNjbnQgPDwgdWZtdHNoOworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCA9IGNudDsKKwkJb2ZmcyArPSBjbnQ7CisJCWNwICs9IGNudDsKKwl9CisJdXJiLT5pbnRlcnZhbCA9IDE7CisJaWYgKGVycikKKwkJdS0+ZG1hLmVycm9yKys7CisJaWYgKHUtPmRtYS5tYXBwZWQpIHsKKwkJaWYgKHUtPmRtYS5jb3VudCA+PSAoc2lnbmVkKXUtPmRtYS5mcmFnc2l6ZSkKKwkJCXdha2VfdXAoJnUtPmRtYS53YWl0KTsKKwl9IGVsc2UgeworCQlpZiAoKHNpZ25lZCl1LT5kbWEuZG1hc2l6ZSA+PSB1LT5kbWEuY291bnQgKyAoc2lnbmVkKXUtPmRtYS5mcmFnc2l6ZSkKKwkJCXdha2VfdXAoJnUtPmRtYS53YWl0KTsKKwl9CisJcmV0dXJuIGVyciA/IC0xIDogMDsKK30KKworLyoKKyAqIHJldHVybiB2YWx1ZTogMCBpZiBkZXNjcmlwdG9yIHNob3VsZCBiZSByZXN0YXJ0ZWQsIC0xIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IHVzYm91dF9yZXRpcmVfZGVzYyhzdHJ1Y3QgdXNib3V0ICp1LCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgREVTQ0ZSQU1FUzsgaSsrKSB7CisJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cykgeworCQkJZHByaW50aygoS0VSTl9ERUJVRyAidXNib3V0X3JldGlyZV9kZXNjOiBmcmFtZSAldSBzdGF0dXMgJWRcbiIsIGksIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKSk7CisJCQljb250aW51ZTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXNib3V0X2NvbXBsZXRlZChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzID0gKHN0cnVjdCB1c2JfYXVkaW9kZXYgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHVzYm91dCAqdSA9ICZhcy0+dXNib3V0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IG1hc2s7CisJaW50IHN1cmV0ID0gMDsKKworI2lmIDAKKwlwcmludGsoS0VSTl9ERUJVRyAidXNib3V0X2NvbXBsZXRlZDogc3RhdHVzICVkIGVycmNudCAlZCBmbGFncyAweCV4XG4iLCB1cmItPnN0YXR1cywgdXJiLT5lcnJvcl9jb3VudCwgdS0+ZmxhZ3MpOworI2VuZGlmCisJaWYgKHVyYiA9PSB1LT5kdXJiWzBdLnVyYikKKwkJbWFzayA9IEZMR19VUkIwUlVOTklORzsKKwllbHNlIGlmICh1cmIgPT0gdS0+ZHVyYlsxXS51cmIpCisJCW1hc2sgPSBGTEdfVVJCMVJVTk5JTkc7CisJZWxzZSB7CisJCW1hc2sgPSAwOworCQlwcmludGsoS0VSTl9FUlIgInVzYm91dF9jb21wbGV0ZWQ6IHBhbmljOiB1bmtub3duIFVSQlxuIik7CisJfQorCXVyYi0+ZGV2ID0gYXMtPnN0YXRlLT51c2JkZXY7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJaWYgKCF1c2JvdXRfcmV0aXJlX2Rlc2ModSwgdXJiKSAmJgorCSAgICB1LT5mbGFncyAmIEZMR19SVU5OSU5HICYmCisJICAgICF1c2JvdXRfcHJlcGFyZV9kZXNjKHUsIHVyYikgJiYgCisJICAgIChzdXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpID09IDApIHsKKwkJdS0+ZmxhZ3MgfD0gbWFzazsKKwl9IGVsc2UgeworCQl1LT5mbGFncyAmPSB+KG1hc2sgfCBGTEdfUlVOTklORyk7CisJCXdha2VfdXAoJnUtPmRtYS53YWl0KTsKKwkJZHByaW50aygoS0VSTl9ERUJVRyAidXNib3V0X2NvbXBsZXRlZDogZGVzY3JpcHRvciBub3QgcmVzdGFydGVkICh1c2Jfc3VibWl0X3VyYjogJWQpXG4iLCBzdXJldCkpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHVzYm91dF9zeW5jX3ByZXBhcmVfZGVzYyhzdHJ1Y3QgdXNib3V0ICp1LCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJdW5zaWduZWQgaW50IGksIG9mZnM7CisKKwlmb3IgKGkgPSBvZmZzID0gMDsgaSA8IFNZTkNGUkFNRVM7IGkrKywgb2ZmcyArPSAzKSB7CisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID0gMzsKKwkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQgPSBvZmZzOworCX0KKwl1cmItPmludGVydmFsID0gMTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHJldHVybiB2YWx1ZTogMCBpZiBkZXNjcmlwdG9yIHNob3VsZCBiZSByZXN0YXJ0ZWQsIC0xIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IHVzYm91dF9zeW5jX3JldGlyZV9kZXNjKHN0cnVjdCB1c2JvdXQgKnUsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwl1bnNpZ25lZCBjaGFyICpjcCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXVuc2lnbmVkIGludCBmLCBpOworCisJZm9yIChpID0gMDsgaSA8IFNZTkNGUkFNRVM7IGkrKywgY3AgKz0gMykgeworCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpIHsKKwkJCWRwcmludGsoKEtFUk5fREVCVUcgInVzYm91dF9zeW5jX3JldGlyZV9kZXNjOiBmcmFtZSAldSBzdGF0dXMgJWRcbiIsIGksIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoIDwgMykgeworCQkJZHByaW50aygoS0VSTl9ERUJVRyAidXNib3V0X3N5bmNfcmV0aXJlX2Rlc2M6IGZyYW1lICV1IGxlbmd0aCAlZFxuIiwgaSwgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoKSk7CisJCQljb250aW51ZTsKKwkJfQorCQlmID0gY3BbMF0gfCAoY3BbMV0gPDwgOCkgfCAoY3BbMl0gPDwgMTYpOworCQlpZiAoYWJzKGYgLSB1LT5mcmVxbikgPiAodS0+ZnJlcW4gPj4gMykgfHwgZiA+IHUtPmZyZXFtYXgpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgInVzYm91dF9zeW5jX3JldGlyZV9kZXNjOiByZXF1ZXN0ZWQgZnJlcXVlbmN5ICV1IChub21pbmFsICV1KSBvdXQgb2YgcmFuZ2UhXG4iLCBmLCB1LT5mcmVxbik7CisJCQljb250aW51ZTsKKwkJfQorCQl1LT5mcmVxbSA9IGY7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1c2JvdXRfc3luY19jb21wbGV0ZWQoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcyA9IChzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB1c2JvdXQgKnUgPSAmYXMtPnVzYm91dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBtYXNrOworCWludCBzdXJldCA9IDA7CisKKyNpZiAwCisJcHJpbnRrKEtFUk5fREVCVUcgInVzYm91dF9zeW5jX2NvbXBsZXRlZDogc3RhdHVzICVkIGVycmNudCAlZCBmbGFncyAweCV4XG4iLCB1cmItPnN0YXR1cywgdXJiLT5lcnJvcl9jb3VudCwgdS0+ZmxhZ3MpOworI2VuZGlmCisJaWYgKHVyYiA9PSB1LT5zdXJiWzBdLnVyYikKKwkJbWFzayA9IEZMR19TWU5DMFJVTk5JTkc7CisJZWxzZSBpZiAodXJiID09IHUtPnN1cmJbMV0udXJiKQorCQltYXNrID0gRkxHX1NZTkMxUlVOTklORzsKKwllbHNlIHsKKwkJbWFzayA9IDA7CisJCXByaW50ayhLRVJOX0VSUiAidXNib3V0X3N5bmNfY29tcGxldGVkOiBwYW5pYzogdW5rbm93biBVUkJcbiIpOworCX0KKwl1cmItPmRldiA9IGFzLT5zdGF0ZS0+dXNiZGV2OworCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCWlmICghdXNib3V0X3N5bmNfcmV0aXJlX2Rlc2ModSwgdXJiKSAmJgorCSAgICB1LT5mbGFncyAmIEZMR19SVU5OSU5HICYmCisJICAgICF1c2JvdXRfc3luY19wcmVwYXJlX2Rlc2ModSwgdXJiKSAmJiAKKwkgICAgKHN1cmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgPT0gMCkgeworCQl1LT5mbGFncyB8PSBtYXNrOworCX0gZWxzZSB7CisJCXUtPmZsYWdzICY9IH4obWFzayB8IEZMR19SVU5OSU5HKTsKKwkJd2FrZV91cCgmdS0+ZG1hLndhaXQpOworCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JvdXRfc3luY19jb21wbGV0ZWQ6IGRlc2NyaXB0b3Igbm90IHJlc3RhcnRlZCAodXNiX3N1Ym1pdF91cmI6ICVkKVxuIiwgc3VyZXQpKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCB1c2JvdXRfc3RhcnQoc3RydWN0IHVzYl9hdWRpb2RldiAqYXMpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGFzLT5zdGF0ZS0+dXNiZGV2OworCXN0cnVjdCB1c2JvdXQgKnUgPSAmYXMtPnVzYm91dDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgbWF4c3plLCBidWZzejsKKworI2lmIDAKKwlwcmludGsoS0VSTl9ERUJVRyAidXNib3V0X3N0YXJ0OiBkZXZpY2UgJWQgdWZtdCAweCUwOHggZGZtdCAweCUwOHggc3JhdGUgJWRcbiIsCisJICAgICAgIGRldi0+ZGV2bnVtLCB1LT5mb3JtYXQsIHUtPmRtYS5mb3JtYXQsIHUtPmRtYS5zcmF0ZSk7CisjZW5kaWYKKwkvKiBhbGxvY2F0ZSBVU0Igc3RvcmFnZSBpZiBub3QgYWxyZWFkeSBkb25lICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJaWYgKCEodS0+ZmxhZ3MgJiBGTEdfQ09OTkVDVEVEKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJaWYgKCEodS0+ZmxhZ3MgJiBGTEdfUlVOTklORykpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwkJdS0+ZnJlcW4gPSB1LT5mcmVxbSA9ICgodS0+ZG1hLnNyYXRlIDw8IDExKSArIDYyKSAvIDEyNTsgLyogdGhpcyB3aWxsIG92ZXJmbG93IGF0IGFwcHJveCAyTVNQUyAqLworCQl1LT5mcmVxbWF4ID0gdS0+ZnJlcW4gKyAodS0+ZnJlcW4gPj4gMik7CisJCXUtPnBoYXNlID0gMDsKKwkJbWF4c3plID0gKHUtPmZyZXFtYXggKyAweDNmZmYpID4+ICgxNCAtIEFGTVRfQllURVNTSElGVCh1LT5mb3JtYXQpKTsKKwkJYnVmc3ogPSBERVNDRlJBTUVTICogbWF4c3plOworCQlpZiAodS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlcikKKwkJCWtmcmVlKHUtPmR1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQl1LT5kdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyhidWZzeiwgR0ZQX0tFUk5FTCk7CisJCXUtPmR1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gYnVmc3o7CisJCWlmICh1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKQorCQkJa2ZyZWUodS0+ZHVyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCXUtPmR1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwkJdS0+ZHVyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBidWZzejsKKwkJaWYgKHUtPnN5bmNwaXBlKSB7CisJCQlpZiAodS0+c3VyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlcikKKwkJCQlrZnJlZSh1LT5zdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJCXUtPnN1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKDMqU1lOQ0ZSQU1FUywgR0ZQX0tFUk5FTCk7CisJCQl1LT5zdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDMqU1lOQ0ZSQU1FUzsKKwkJCWlmICh1LT5zdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKQorCQkJCWtmcmVlKHUtPnN1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQkJdS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoMypTWU5DRlJBTUVTLCBHRlBfS0VSTkVMKTsKKwkJCXUtPnN1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gMypTWU5DRlJBTUVTOworCQl9CisJCWlmICghdS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciB8fCAhdS0+ZHVyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlciB8fCAKKwkJICAgICh1LT5zeW5jcGlwZSAmJiAoIXUtPnN1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIgfHwgIXUtPnN1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIpKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogY2Fubm90IHN0YXJ0IHBsYXliYWNrIGRldmljZSAlZFxuIiwgZGV2LT5kZXZudW0pOworCQkJcmV0dXJuIDA7CisJCX0KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJfQorCWlmICh1LT5kbWEuY291bnQgPD0gMCAmJiAhdS0+ZG1hLm1hcHBlZCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisgICAgICAgCXUtPmZsYWdzIHw9IEZMR19SVU5OSU5HOworCWlmICghKHUtPmZsYWdzICYgRkxHX1VSQjBSVU5OSU5HKSkgeworCQl1cmIgPSB1LT5kdXJiWzBdLnVyYjsKKwkJdXJiLT5kZXYgPSBkZXY7CisJCXVyYi0+cGlwZSA9IHUtPmRhdGFwaXBlOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gREVTQ0ZSQU1FUzsKKwkJdXJiLT5jb250ZXh0ID0gYXM7CisJCXVyYi0+Y29tcGxldGUgPSB1c2JvdXRfY29tcGxldGVkOworCQlpZiAoIXVzYm91dF9wcmVwYXJlX2Rlc2ModSwgdXJiKSAmJiAhdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkKKwkJCXUtPmZsYWdzIHw9IEZMR19VUkIwUlVOTklORzsKKwkJZWxzZQorCQkJdS0+ZmxhZ3MgJj0gfkZMR19SVU5OSU5HOworCX0KKwlpZiAodS0+ZmxhZ3MgJiBGTEdfUlVOTklORyAmJiAhKHUtPmZsYWdzICYgRkxHX1VSQjFSVU5OSU5HKSkgeworCQl1cmIgPSB1LT5kdXJiWzFdLnVyYjsKKwkJdXJiLT5kZXYgPSBkZXY7CisJCXVyYi0+cGlwZSA9IHUtPmRhdGFwaXBlOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gREVTQ0ZSQU1FUzsKKwkJdXJiLT5jb250ZXh0ID0gYXM7CisJCXVyYi0+Y29tcGxldGUgPSB1c2JvdXRfY29tcGxldGVkOworCQlpZiAoIXVzYm91dF9wcmVwYXJlX2Rlc2ModSwgdXJiKSAmJiAhdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkKKwkJCXUtPmZsYWdzIHw9IEZMR19VUkIxUlVOTklORzsKKwkJZWxzZQorCQkJdS0+ZmxhZ3MgJj0gfkZMR19SVU5OSU5HOworCX0KKwlpZiAodS0+c3luY3BpcGUpIHsKKwkJaWYgKHUtPmZsYWdzICYgRkxHX1JVTk5JTkcgJiYgISh1LT5mbGFncyAmIEZMR19TWU5DMFJVTk5JTkcpKSB7CisJCQl1cmIgPSB1LT5zdXJiWzBdLnVyYjsKKwkJCXVyYi0+ZGV2ID0gZGV2OworCQkJdXJiLT5waXBlID0gdS0+c3luY3BpcGU7CisJCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IFNZTkNGUkFNRVM7CisJCQl1cmItPmNvbnRleHQgPSBhczsKKwkJCXVyYi0+Y29tcGxldGUgPSB1c2JvdXRfc3luY19jb21wbGV0ZWQ7CisJCQkvKiBzdHJpZGU6IHUtPnN5bmNpbnRlcnZhbCAqLworCQkJaWYgKCF1c2JvdXRfc3luY19wcmVwYXJlX2Rlc2ModSwgdXJiKSAmJiAhdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkKKwkJCQl1LT5mbGFncyB8PSBGTEdfU1lOQzBSVU5OSU5HOworCQkJZWxzZQorCQkJCXUtPmZsYWdzICY9IH5GTEdfUlVOTklORzsKKwkJfQorCQlpZiAodS0+ZmxhZ3MgJiBGTEdfUlVOTklORyAmJiAhKHUtPmZsYWdzICYgRkxHX1NZTkMxUlVOTklORykpIHsKKwkJCXVyYiA9IHUtPnN1cmJbMV0udXJiOworCQkJdXJiLT5kZXYgPSBkZXY7CisJCQl1cmItPnBpcGUgPSB1LT5zeW5jcGlwZTsKKwkJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gU1lOQ0ZSQU1FUzsKKwkJCXVyYi0+Y29udGV4dCA9IGFzOworCQkJdXJiLT5jb21wbGV0ZSA9IHVzYm91dF9zeW5jX2NvbXBsZXRlZDsKKwkJCS8qIHN0cmlkZTogdS0+c3luY2ludGVydmFsICovCisJCQlpZiAoIXVzYm91dF9zeW5jX3ByZXBhcmVfZGVzYyh1LCB1cmIpICYmICF1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKQorCQkJCXUtPmZsYWdzIHw9IEZMR19TWU5DMVJVTk5JTkc7CisJCQllbHNlCisJCQkJdS0+ZmxhZ3MgJj0gfkZMR19SVU5OSU5HOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IGZvcm1hdF9nb29kbmVzcyhzdHJ1Y3QgYXVkaW9mb3JtYXQgKmFmcCwgdW5zaWduZWQgaW50IGZtdCwgdW5zaWduZWQgaW50IHNyYXRlKQoreworCXVuc2lnbmVkIGludCBnID0gMDsKKworCWlmIChzcmF0ZSA8IGFmcC0+c3JhdGVsbykKKwkJZyArPSBhZnAtPnNyYXRlbG8gLSBzcmF0ZTsKKwlpZiAoc3JhdGUgPiBhZnAtPnNyYXRlaGkpCisJCWcgKz0gc3JhdGUgLSBhZnAtPnNyYXRlaGk7CisJaWYgKEFGTVRfSVNTVEVSRU8oYWZwLT5mb3JtYXQpICYmICFBRk1UX0lTU1RFUkVPKGZtdCkpCisJCWcgKz0gMHgxMDAwMDA7CisJaWYgKCFBRk1UX0lTU1RFUkVPKGFmcC0+Zm9ybWF0KSAmJiBBRk1UX0lTU1RFUkVPKGZtdCkpCisJCWcgKz0gMHg0MDAwMDA7CisJaWYgKEFGTVRfSVMxNkJJVChhZnAtPmZvcm1hdCkgJiYgIUFGTVRfSVMxNkJJVChmbXQpKQorCQlnICs9IDB4MTAwMDAwOworCWlmICghQUZNVF9JUzE2QklUKGFmcC0+Zm9ybWF0KSAmJiBBRk1UX0lTMTZCSVQoZm10KSkKKwkJZyArPSAweDQwMDAwMDsKKwlyZXR1cm4gZzsKK30KKworc3RhdGljIGludCBmaW5kX2Zvcm1hdChzdHJ1Y3QgYXVkaW9mb3JtYXQgKmFmcCwgdW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBpbnQgZm10LCB1bnNpZ25lZCBpbnQgc3JhdGUpCit7CisJdW5zaWduZWQgaW50IGksIGcsIGdiID0gfjA7CisJaW50IGogPSAtMTsgLyogZGVmYXVsdCB0byBmYWlsdXJlICovCisKKwkvKiBmaW5kICJiZXN0IiBmb3JtYXQgKGFjY29yZGluZyB0byBmb3JtYXRfZ29vZG5lc3MpICovCisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJZyA9IGZvcm1hdF9nb29kbmVzcygmYWZwW2ldLCBmbXQsIHNyYXRlKTsKKwkJaWYgKGcgPj0gZ2IpIAorCQkJY29udGludWU7CisJCWogPSBpOworCQlnYiA9IGc7CisJfQorICAgICAgIAlyZXR1cm4gajsKK30KKworc3RhdGljIGludCBzZXRfZm9ybWF0X2luKHN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBhcy0+c3RhdGUtPnVzYmRldjsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZTsKKwlzdHJ1Y3QgdXNiaW4gKnUgPSAmYXMtPnVzYmluOworCXN0cnVjdCBkbWFidWYgKmQgPSAmdS0+ZG1hOworCXN0cnVjdCBhdWRpb2Zvcm1hdCAqZm10OworCXVuc2lnbmVkIGludCBlcDsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbM107CisJaW50IGZtdG5yLCByZXQ7CisKKwlpZmFjZSA9IHVzYl9pZm51bV90b19pZihkZXYsIHUtPmludGVyZmFjZSk7CisJaWYgKCFpZmFjZSkKKwkJcmV0dXJuIDA7CisKKwlmbXRuciA9IGZpbmRfZm9ybWF0KGFzLT5mbXRpbiwgYXMtPm51bWZtdGluLCBkLT5mb3JtYXQsIGQtPnNyYXRlKTsKKwlpZiAoZm10bnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHNldF9mb3JtYXRfaW4oKTogZmFpbGVkIHRvIGZpbmQgZGVzaXJlZCBmb3JtYXQvc3BlZWQgY29tYmluYXRpb24uXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZtdCA9IGFzLT5mbXRpbiArIGZtdG5yOworCWFsdHMgPSB1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcoaWZhY2UsIGZtdC0+YWx0c2V0dGluZyk7CisJdS0+Zm9ybWF0ID0gZm10LT5mb3JtYXQ7CisJdS0+ZGF0YXBpcGUgPSB1c2JfcmN2aXNvY3BpcGUoZGV2LCBhbHRzLT5lbmRwb2ludFswXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiAweGYpOworCXUtPnN5bmNwaXBlID0gdS0+c3luY2ludGVydmFsID0gMDsKKwlpZiAoKGFsdHMtPmVuZHBvaW50WzBdLmRlc2MuYm1BdHRyaWJ1dGVzICYgMHgwYykgPT0gMHgwOCkgeworCQlpZiAoYWx0cy0+ZGVzYy5iTnVtRW5kcG9pbnRzIDwgMiB8fAorCQkgICAgYWx0cy0+ZW5kcG9pbnRbMV0uZGVzYy5ibUF0dHJpYnV0ZXMgIT0gMHgwMSB8fAorCQkgICAgYWx0cy0+ZW5kcG9pbnRbMV0uZGVzYy5iU3luY2hBZGRyZXNzICE9IDAgfHwKKwkJICAgIGFsdHMtPmVuZHBvaW50WzFdLmRlc2MuYkVuZHBvaW50QWRkcmVzcyAhPSAoYWx0cy0+ZW5kcG9pbnRbMF0uZGVzYy5iU3luY2hBZGRyZXNzICYgMHg3ZikpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgInVzYmF1ZGlvOiBkZXZpY2UgJWQgaW50ZXJmYWNlICVkIGFsdHNldHRpbmcgJWQgY2xhaW1zIGFkYXB0aXZlIGluICIKKwkJCSAgICAgICAiYnV0IGhhcyBpbnZhbGlkIHN5bmNoIHBpcGU7IHRyZWF0aW5nIGFzIGFzeW5jaHJvbm91cyBpblxuIiwKKwkJCSAgICAgICBkZXYtPmRldm51bSwgdS0+aW50ZXJmYWNlLCBmbXQtPmFsdHNldHRpbmcpOworCQl9IGVsc2UgeworCQkJdS0+c3luY3BpcGUgPSB1c2Jfc25kaXNvY3BpcGUoZGV2LCBhbHRzLT5lbmRwb2ludFsxXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiAweGYpOworCQkJdS0+c3luY2ludGVydmFsID0gYWx0cy0+ZW5kcG9pbnRbMV0uZGVzYy5iUmVmcmVzaDsKKwkJfQorCX0KKwlpZiAoZC0+c3JhdGUgPCBmbXQtPnNyYXRlbG8pCisJCWQtPnNyYXRlID0gZm10LT5zcmF0ZWxvOworCWlmIChkLT5zcmF0ZSA+IGZtdC0+c3JhdGVoaSkKKwkJZC0+c3JhdGUgPSBmbXQtPnNyYXRlaGk7CisJZHByaW50aygoS0VSTl9ERUJVRyAidXNiYXVkaW86IHNldF9mb3JtYXRfaW46IHVzYl9zZXRfaW50ZXJmYWNlICV1ICV1XG4iLAorCQkJdS0+aW50ZXJmYWNlLCBmbXQtPmFsdHNldHRpbmcpKTsKKwlpZiAodXNiX3NldF9pbnRlcmZhY2UoZGV2LCBhbHRzLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsIGZtdC0+YWx0c2V0dGluZykgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInVzYmF1ZGlvOiB1c2Jfc2V0X2ludGVyZmFjZSBmYWlsZWQsIGRldmljZSAlZCBpbnRlcmZhY2UgJWQgYWx0c2V0dGluZyAlZFxuIiwKKwkJICAgICAgIGRldi0+ZGV2bnVtLCB1LT5pbnRlcmZhY2UsIGZtdC0+YWx0c2V0dGluZyk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKGZtdC0+c3JhdGVsbyA9PSBmbXQtPnNyYXRlaGkpCisJCXJldHVybiAwOworCWVwID0gdXNiX3BpcGVlbmRwb2ludCh1LT5kYXRhcGlwZSkgfCAodS0+ZGF0YXBpcGUgJiBVU0JfRElSX0lOKTsKKwkvKiBpZiBlbmRwb2ludCBoYXMgcGl0Y2ggY29udHJvbCwgZW5hYmxlIGl0ICovCisJaWYgKGZtdC0+YXR0cmlidXRlcyAmIDB4MDIpIHsKKwkJZGF0YVswXSA9IDE7CisJCWlmICgocmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFNFVF9DVVIsIFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9FTkRQT0lOVHxVU0JfRElSX09VVCwgCisJCQkJCSAgIFBJVENIX0NPTlRST0wgPDwgOCwgZXAsIGRhdGEsIDEsIDEwMDApKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGZhaWx1cmUgKGVycm9yICVkKSB0byBzZXQgb3V0cHV0IHBpdGNoIGNvbnRyb2wgZGV2aWNlICVkIGludGVyZmFjZSAldSBlbmRwb2ludCAweCV4IHRvICV1XG4iLAorCQkJICAgICAgIHJldCwgZGV2LT5kZXZudW0sIHUtPmludGVyZmFjZSwgZXAsIGQtPnNyYXRlKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwkvKiBpZiBlbmRwb2ludCBoYXMgc2FtcGxpbmcgcmF0ZSBjb250cm9sLCBzZXQgaXQgKi8KKwlpZiAoZm10LT5hdHRyaWJ1dGVzICYgMHgwMSkgeworCQlkYXRhWzBdID0gZC0+c3JhdGU7CisJCWRhdGFbMV0gPSBkLT5zcmF0ZSA+PiA4OworCQlkYXRhWzJdID0gZC0+c3JhdGUgPj4gMTY7CisJCWlmICgocmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFNFVF9DVVIsIFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9FTkRQT0lOVHxVU0JfRElSX09VVCwgCisJCQkJCSAgIFNBTVBMSU5HX0ZSRVFfQ09OVFJPTCA8PCA4LCBlcCwgZGF0YSwgMywgMTAwMCkpIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZmFpbHVyZSAoZXJyb3IgJWQpIHRvIHNldCBpbnB1dCBzYW1wbGluZyBmcmVxdWVuY3kgZGV2aWNlICVkIGludGVyZmFjZSAldSBlbmRwb2ludCAweCV4IHRvICV1XG4iLAorCQkJICAgICAgIHJldCwgZGV2LT5kZXZudW0sIHUtPmludGVyZmFjZSwgZXAsIGQtPnNyYXRlKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAoKHJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBHRVRfQ1VSLCBVU0JfVFlQRV9DTEFTU3xVU0JfUkVDSVBfRU5EUE9JTlR8VVNCX0RJUl9JTiwKKwkJCQkJICAgU0FNUExJTkdfRlJFUV9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKSkgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBmYWlsdXJlIChlcnJvciAlZCkgdG8gZ2V0IGlucHV0IHNhbXBsaW5nIGZyZXF1ZW5jeSBkZXZpY2UgJWQgaW50ZXJmYWNlICV1IGVuZHBvaW50IDB4JXhcbiIsCisJCQkgICAgICAgcmV0LCBkZXYtPmRldm51bSwgdS0+aW50ZXJmYWNlLCBlcCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJZHByaW50aygoS0VSTl9ERUJVRyAidXNiYXVkaW86IHNldF9mb3JtYXRfaW46IGRldmljZSAlZCBpbnRlcmZhY2UgJWQgYWx0c2V0dGluZyAlZCBzcmF0ZSByZXE6ICV1IHJlYWwgJXVcbiIsCisJCSAgICAgICAgZGV2LT5kZXZudW0sIHUtPmludGVyZmFjZSwgZm10LT5hbHRzZXR0aW5nLCBkLT5zcmF0ZSwgZGF0YVswXSB8IChkYXRhWzFdIDw8IDgpIHwgKGRhdGFbMl0gPDwgMTYpKSk7CisJCWQtPnNyYXRlID0gZGF0YVswXSB8IChkYXRhWzFdIDw8IDgpIHwgKGRhdGFbMl0gPDwgMTYpOworCX0KKwlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JhdWRpbzogc2V0X2Zvcm1hdF9pbjogVVNCIGZvcm1hdCAweCV4LCBETUEgZm9ybWF0IDB4JXggc3JhdGUgJXVcbiIsIHUtPmZvcm1hdCwgZC0+Zm9ybWF0LCBkLT5zcmF0ZSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF9mb3JtYXRfb3V0KHN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBhcy0+c3RhdGUtPnVzYmRldjsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZTsJCisJc3RydWN0IHVzYm91dCAqdSA9ICZhcy0+dXNib3V0OworCXN0cnVjdCBkbWFidWYgKmQgPSAmdS0+ZG1hOworCXN0cnVjdCBhdWRpb2Zvcm1hdCAqZm10OworCXVuc2lnbmVkIGludCBlcDsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbM107CisJaW50IGZtdG5yLCByZXQ7CisKKwlpZmFjZSA9IHVzYl9pZm51bV90b19pZihkZXYsIHUtPmludGVyZmFjZSk7CisJaWYgKCFpZmFjZSkKKwkJcmV0dXJuIDA7CisKKwlmbXRuciA9IGZpbmRfZm9ybWF0KGFzLT5mbXRvdXQsIGFzLT5udW1mbXRvdXQsIGQtPmZvcm1hdCwgZC0+c3JhdGUpOworCWlmIChmbXRuciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogc2V0X2Zvcm1hdF9vdXQoKTogZmFpbGVkIHRvIGZpbmQgZGVzaXJlZCBmb3JtYXQvc3BlZWQgY29tYmluYXRpb24uXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZtdCA9IGFzLT5mbXRvdXQgKyBmbXRucjsKKwl1LT5mb3JtYXQgPSBmbXQtPmZvcm1hdDsKKwlhbHRzID0gdXNiX2FsdG51bV90b19hbHRzZXR0aW5nKGlmYWNlLCBmbXQtPmFsdHNldHRpbmcpOworCXUtPmRhdGFwaXBlID0gdXNiX3NuZGlzb2NwaXBlKGRldiwgYWx0cy0+ZW5kcG9pbnRbMF0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgMHhmKTsKKwl1LT5zeW5jcGlwZSA9IHUtPnN5bmNpbnRlcnZhbCA9IDA7CisJaWYgKChhbHRzLT5lbmRwb2ludFswXS5kZXNjLmJtQXR0cmlidXRlcyAmIDB4MGMpID09IDB4MDQpIHsKKyNpZiAwCisJCXByaW50ayhLRVJOX0RFQlVHICJiTnVtRW5kcG9pbnRzIDB4JTAyeCBlbmRwb2ludFsxXS5ibUF0dHJpYnV0ZXMgMHglMDJ4XG4iCisJCSAgICAgICBLRVJOX0RFQlVHICJlbmRwb2ludFsxXS5iU3luY2hBZGRyZXNzIDB4JTAyeCBlbmRwb2ludFsxXS5iRW5kcG9pbnRBZGRyZXNzIDB4JTAyeFxuIgorCQkgICAgICAgS0VSTl9ERUJVRyAiZW5kcG9pbnRbMF0uYlN5bmNoQWRkcmVzcyAweCUwMnhcbiIsIGFsdHMtPmJOdW1FbmRwb2ludHMsCisJCSAgICAgICBhbHRzLT5lbmRwb2ludFsxXS5ibUF0dHJpYnV0ZXMsIGFsdHMtPmVuZHBvaW50WzFdLmJTeW5jaEFkZHJlc3MsCisJCSAgICAgICBhbHRzLT5lbmRwb2ludFsxXS5iRW5kcG9pbnRBZGRyZXNzLCBhbHRzLT5lbmRwb2ludFswXS5iU3luY2hBZGRyZXNzKTsKKyNlbmRpZgorCQlpZiAoYWx0cy0+ZGVzYy5iTnVtRW5kcG9pbnRzIDwgMiB8fAorCQkgICAgYWx0cy0+ZW5kcG9pbnRbMV0uZGVzYy5ibUF0dHJpYnV0ZXMgIT0gMHgwMSB8fAorCQkgICAgYWx0cy0+ZW5kcG9pbnRbMV0uZGVzYy5iU3luY2hBZGRyZXNzICE9IDAgfHwKKwkJICAgIGFsdHMtPmVuZHBvaW50WzFdLmRlc2MuYkVuZHBvaW50QWRkcmVzcyAhPSAoYWx0cy0+ZW5kcG9pbnRbMF0uZGVzYy5iU3luY2hBZGRyZXNzIHwgMHg4MCkpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgInVzYmF1ZGlvOiBkZXZpY2UgJWQgaW50ZXJmYWNlICVkIGFsdHNldHRpbmcgJWQgY2xhaW1zIGFzeW5jaCBvdXQgIgorCQkJICAgICAgICJidXQgaGFzIGludmFsaWQgc3luY2ggcGlwZTsgdHJlYXRpbmcgYXMgYWRhcHRpdmUgb3V0XG4iLAorCQkJICAgICAgIGRldi0+ZGV2bnVtLCB1LT5pbnRlcmZhY2UsIGZtdC0+YWx0c2V0dGluZyk7CisJCX0gZWxzZSB7CisJCQl1LT5zeW5jcGlwZSA9IHVzYl9yY3Zpc29jcGlwZShkZXYsIGFsdHMtPmVuZHBvaW50WzFdLmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIDB4Zik7CisJCQl1LT5zeW5jaW50ZXJ2YWwgPSBhbHRzLT5lbmRwb2ludFsxXS5kZXNjLmJSZWZyZXNoOworCQl9CisJfQorCWlmIChkLT5zcmF0ZSA8IGZtdC0+c3JhdGVsbykKKwkJZC0+c3JhdGUgPSBmbXQtPnNyYXRlbG87CisJaWYgKGQtPnNyYXRlID4gZm10LT5zcmF0ZWhpKQorCQlkLT5zcmF0ZSA9IGZtdC0+c3JhdGVoaTsKKwlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JhdWRpbzogc2V0X2Zvcm1hdF9vdXQ6IHVzYl9zZXRfaW50ZXJmYWNlICV1ICV1XG4iLAorCQkJdS0+aW50ZXJmYWNlLCBmbXQtPmFsdHNldHRpbmcpKTsKKwlpZiAodXNiX3NldF9pbnRlcmZhY2UoZGV2LCB1LT5pbnRlcmZhY2UsIGZtdC0+YWx0c2V0dGluZykgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInVzYmF1ZGlvOiB1c2Jfc2V0X2ludGVyZmFjZSBmYWlsZWQsIGRldmljZSAlZCBpbnRlcmZhY2UgJWQgYWx0c2V0dGluZyAlZFxuIiwKKwkJICAgICAgIGRldi0+ZGV2bnVtLCB1LT5pbnRlcmZhY2UsIGZtdC0+YWx0c2V0dGluZyk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKGZtdC0+c3JhdGVsbyA9PSBmbXQtPnNyYXRlaGkpCisJCXJldHVybiAwOworCWVwID0gdXNiX3BpcGVlbmRwb2ludCh1LT5kYXRhcGlwZSkgfCAodS0+ZGF0YXBpcGUgJiBVU0JfRElSX0lOKTsKKwkvKiBpZiBlbmRwb2ludCBoYXMgcGl0Y2ggY29udHJvbCwgZW5hYmxlIGl0ICovCisJaWYgKGZtdC0+YXR0cmlidXRlcyAmIDB4MDIpIHsKKwkJZGF0YVswXSA9IDE7CisJCWlmICgocmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFNFVF9DVVIsIFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9FTkRQT0lOVHxVU0JfRElSX09VVCwgCisJCQkJCSAgIFBJVENIX0NPTlRST0wgPDwgOCwgZXAsIGRhdGEsIDEsIDEwMDApKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGZhaWx1cmUgKGVycm9yICVkKSB0byBzZXQgb3V0cHV0IHBpdGNoIGNvbnRyb2wgZGV2aWNlICVkIGludGVyZmFjZSAldSBlbmRwb2ludCAweCV4IHRvICV1XG4iLAorCQkJICAgICAgIHJldCwgZGV2LT5kZXZudW0sIHUtPmludGVyZmFjZSwgZXAsIGQtPnNyYXRlKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwkvKiBpZiBlbmRwb2ludCBoYXMgc2FtcGxpbmcgcmF0ZSBjb250cm9sLCBzZXQgaXQgKi8KKwlpZiAoZm10LT5hdHRyaWJ1dGVzICYgMHgwMSkgeworCQlkYXRhWzBdID0gZC0+c3JhdGU7CisJCWRhdGFbMV0gPSBkLT5zcmF0ZSA+PiA4OworCQlkYXRhWzJdID0gZC0+c3JhdGUgPj4gMTY7CisJCWlmICgocmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFNFVF9DVVIsIFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9FTkRQT0lOVHxVU0JfRElSX09VVCwgCisJCQkJCSAgIFNBTVBMSU5HX0ZSRVFfQ09OVFJPTCA8PCA4LCBlcCwgZGF0YSwgMywgMTAwMCkpIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZmFpbHVyZSAoZXJyb3IgJWQpIHRvIHNldCBvdXRwdXQgc2FtcGxpbmcgZnJlcXVlbmN5IGRldmljZSAlZCBpbnRlcmZhY2UgJXUgZW5kcG9pbnQgMHgleCB0byAldVxuIiwKKwkJCSAgICAgICByZXQsIGRldi0+ZGV2bnVtLCB1LT5pbnRlcmZhY2UsIGVwLCBkLT5zcmF0ZSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJaWYgKChyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX0NVUiwgVVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0VORFBPSU5UfFVTQl9ESVJfSU4sCisJCQkJCSAgIFNBTVBMSU5HX0ZSRVFfQ09OVFJPTCA8PCA4LCBlcCwgZGF0YSwgMywgMTAwMCkpIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZmFpbHVyZSAoZXJyb3IgJWQpIHRvIGdldCBvdXRwdXQgc2FtcGxpbmcgZnJlcXVlbmN5IGRldmljZSAlZCBpbnRlcmZhY2UgJXUgZW5kcG9pbnQgMHgleFxuIiwKKwkJCSAgICAgICByZXQsIGRldi0+ZGV2bnVtLCB1LT5pbnRlcmZhY2UsIGVwKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JhdWRpbzogc2V0X2Zvcm1hdF9vdXQ6IGRldmljZSAlZCBpbnRlcmZhY2UgJWQgYWx0c2V0dGluZyAlZCBzcmF0ZSByZXE6ICV1IHJlYWwgJXVcbiIsCisJCSAgICAgICAgZGV2LT5kZXZudW0sIHUtPmludGVyZmFjZSwgZm10LT5hbHRzZXR0aW5nLCBkLT5zcmF0ZSwgZGF0YVswXSB8IChkYXRhWzFdIDw8IDgpIHwgKGRhdGFbMl0gPDwgMTYpKSk7CisJCWQtPnNyYXRlID0gZGF0YVswXSB8IChkYXRhWzFdIDw8IDgpIHwgKGRhdGFbMl0gPDwgMTYpOworCX0KKwlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JhdWRpbzogc2V0X2Zvcm1hdF9vdXQ6IFVTQiBmb3JtYXQgMHgleCwgRE1BIGZvcm1hdCAweCV4IHNyYXRlICV1XG4iLCB1LT5mb3JtYXQsIGQtPmZvcm1hdCwgZC0+c3JhdGUpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfZm9ybWF0KHN0cnVjdCB1c2JfYXVkaW9kZXYgKnMsIHVuc2lnbmVkIGludCBmbW9kZSwgdW5zaWduZWQgaW50IGZtdCwgdW5zaWduZWQgaW50IHNyYXRlKQoreworCWludCByZXQxID0gMCwgcmV0MiA9IDA7CisKKwlpZiAoIShmbW9kZSAmIChGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKSkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChmbW9kZSAmIEZNT0RFX1JFQUQpIHsKKwkJdXNiaW5fc3RvcChzKTsKKwkJcy0+dXNiaW4uZG1hLnJlYWR5ID0gMDsKKwkJaWYgKGZtdCA9PSBBRk1UX1FVRVJZKQorCQkJZm10ID0gcy0+dXNiaW4uZG1hLmZvcm1hdDsKKwkJZWxzZQorCQkJcy0+dXNiaW4uZG1hLmZvcm1hdCA9IGZtdDsKKwkJaWYgKCFzcmF0ZSkKKwkJCXNyYXRlID0gcy0+dXNiaW4uZG1hLnNyYXRlOworCQllbHNlCisJCQlzLT51c2Jpbi5kbWEuc3JhdGUgPSBzcmF0ZTsKKwl9CisJaWYgKGZtb2RlICYgRk1PREVfV1JJVEUpIHsKKwkJdXNib3V0X3N0b3Aocyk7CisJCXMtPnVzYm91dC5kbWEucmVhZHkgPSAwOworCQlpZiAoZm10ID09IEFGTVRfUVVFUlkpCisJCQlmbXQgPSBzLT51c2JvdXQuZG1hLmZvcm1hdDsKKwkJZWxzZQorCQkJcy0+dXNib3V0LmRtYS5mb3JtYXQgPSBmbXQ7CisJCWlmICghc3JhdGUpCisJCQlzcmF0ZSA9IHMtPnVzYm91dC5kbWEuc3JhdGU7CisJCWVsc2UKKwkJCXMtPnVzYm91dC5kbWEuc3JhdGUgPSBzcmF0ZTsKKwl9CisJaWYgKGZtb2RlICYgRk1PREVfUkVBRCkKKwkJcmV0MSA9IHNldF9mb3JtYXRfaW4ocyk7CisJaWYgKGZtb2RlICYgRk1PREVfV1JJVEUpCisJCXJldDIgPSBzZXRfZm9ybWF0X291dChzKTsKKwlyZXR1cm4gcmV0MSA/IHJldDEgOiByZXQyOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCB3cm1peGVyKHN0cnVjdCB1c2JfbWl4ZXJkZXYgKm1zLCB1bnNpZ25lZCBtaXhjaCwgdW5zaWduZWQgdmFsdWUpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IG1zLT5zdGF0ZS0+dXNiZGV2OworCXVuc2lnbmVkIGNoYXIgZGF0YVsyXTsKKwlzdHJ1Y3QgbWl4ZXJjaGFubmVsICpjaDsKKwlpbnQgdjEsIHYyLCB2MzsKKworCWlmIChtaXhjaCA+PSBtcy0+bnVtY2gpCisJCXJldHVybiAtMTsKKwljaCA9ICZtcy0+Y2hbbWl4Y2hdOworCXYzID0gY2gtPm1heHZhbCAtIGNoLT5taW52YWw7CisJdjEgPSB2YWx1ZSAmIDB4ZmY7CisJdjIgPSAodmFsdWUgPj4gOCkgJiAweGZmOworCWlmICh2MSA+IDEwMCkKKwkJdjEgPSAxMDA7CisJaWYgKHYyID4gMTAwKQorCQl2MiA9IDEwMDsKKwlpZiAoIShjaC0+ZmxhZ3MgJiAoTUlYRkxHX1NURVJFT0lOIHwgTUlYRkxHX1NURVJFT09VVCkpKQorCQl2MiA9IHYxOworCWNoLT52YWx1ZSA9IHYxIHwgKHYyIDw8IDgpOworCXYxID0gKHYxICogdjMpIC8gMTAwICsgY2gtPm1pbnZhbDsKKwl2MiA9ICh2MiAqIHYzKSAvIDEwMCArIGNoLT5taW52YWw7CisJc3dpdGNoIChjaC0+c2VsZWN0b3IpIHsKKwljYXNlIDA6ICAvKiBtaXhlciB1bml0IHJlcXVlc3QgKi8KKwkJZGF0YVswXSA9IHYxOworCQlkYXRhWzFdID0gdjEgPj4gODsKKwkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBTRVRfQ1VSLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCwKKwkJCQkgICAgKGNoLT5jaG51bSA8PCA4KSB8IDEsIG1zLT5pZmFjZSB8IChjaC0+dW5pdGlkIDw8IDgpLCBkYXRhLCAyLCAxMDAwKSA8IDApCisJCQlnb3RvIGVycjsKKwkJaWYgKCEoY2gtPmZsYWdzICYgKE1JWEZMR19TVEVSRU9JTiB8IE1JWEZMR19TVEVSRU9PVVQpKSkKKwkJCXJldHVybiAwOworCQlkYXRhWzBdID0gdjI7CisJCWRhdGFbMV0gPSB2MiA+PiA4OworCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFNFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VULAorCQkJCSAgICAoKGNoLT5jaG51bSArICEhKGNoLT5mbGFncyAmIE1JWEZMR19TVEVSRU9JTikpIDw8IDgpIHwgKDEgKyAhIShjaC0+ZmxhZ3MgJiBNSVhGTEdfU1RFUkVPT1VUKSksCisJCQkJICAgIG1zLT5pZmFjZSB8IChjaC0+dW5pdGlkIDw8IDgpLCBkYXRhLCAyLCAxMDAwKSA8IDApCisJCQlnb3RvIGVycjsKKwkJcmV0dXJuIDA7CisKKwkJLyogdmFyaW91cyBmZWF0dXJlIHVuaXQgY29udHJvbHMgKi8KKwljYXNlIFZPTFVNRV9DT05UUk9MOgorCQlkYXRhWzBdID0gdjE7CisJCWRhdGFbMV0gPSB2MSA+PiA4OworCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFNFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VULAorCQkJCSAgICAoY2gtPnNlbGVjdG9yIDw8IDgpIHwgY2gtPmNobnVtLCBtcy0+aWZhY2UgfCAoY2gtPnVuaXRpZCA8PCA4KSwgZGF0YSwgMiwgMTAwMCkgPCAwKQorCQkJZ290byBlcnI7CisJCWlmICghKGNoLT5mbGFncyAmIChNSVhGTEdfU1RFUkVPSU4gfCBNSVhGTEdfU1RFUkVPT1VUKSkpCisJCQlyZXR1cm4gMDsKKwkJZGF0YVswXSA9IHYyOworCQlkYXRhWzFdID0gdjIgPj4gODsKKwkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBTRVRfQ1VSLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCwKKwkJCQkgICAgKGNoLT5zZWxlY3RvciA8PCA4KSB8IChjaC0+Y2hudW0gKyAxKSwgbXMtPmlmYWNlIHwgKGNoLT51bml0aWQgPDwgOCksIGRhdGEsIDIsIDEwMDApIDwgMCkKKwkJCWdvdG8gZXJyOworCQlyZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAKKwljYXNlIEJBU1NfQ09OVFJPTDoKKwljYXNlIE1JRF9DT05UUk9MOgorCWNhc2UgVFJFQkxFX0NPTlRST0w6CisJCWRhdGFbMF0gPSB2MSA+PiA4OworCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFNFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VULAorCQkJCSAgICAoY2gtPnNlbGVjdG9yIDw8IDgpIHwgY2gtPmNobnVtLCBtcy0+aWZhY2UgfCAoY2gtPnVuaXRpZCA8PCA4KSwgZGF0YSwgMSwgMTAwMCkgPCAwKQorCQkJZ290byBlcnI7CisJCWlmICghKGNoLT5mbGFncyAmIChNSVhGTEdfU1RFUkVPSU4gfCBNSVhGTEdfU1RFUkVPT1VUKSkpCisJCQlyZXR1cm4gMDsKKwkJZGF0YVswXSA9IHYyID4+IDg7CisJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQsCisJCQkJICAgIChjaC0+c2VsZWN0b3IgPDwgOCkgfCAoY2gtPmNobnVtICsgMSksIG1zLT5pZmFjZSB8IChjaC0+dW5pdGlkIDw8IDgpLCBkYXRhLCAxLCAxMDAwKSA8IDApCisJCQlnb3RvIGVycjsKKwkJcmV0dXJuIDA7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworCisgZXJyOgorCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IG1peGVyIHJlcXVlc3QgZGV2aWNlICV1IGlmICV1IHVuaXQgJXUgY2ggJXUgc2VsZWN0b3IgJXUgZmFpbGVkXG4iLCAKKwkJZGV2LT5kZXZudW0sIG1zLT5pZmFjZSwgY2gtPnVuaXRpZCwgY2gtPmNobnVtLCBjaC0+c2VsZWN0b3IpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBnZXRfcmVjX3NyYyhzdHJ1Y3QgdXNiX21peGVyZGV2ICptcykKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gbXMtPnN0YXRlLT51c2JkZXY7CisJdW5zaWduZWQgaW50IG1hc2sgPSAwLCByZXRtYXNrID0gMDsKKwl1bnNpZ25lZCBpbnQgaSwgajsKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwlpbnQgZXJyID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBtcy0+bnVtY2g7IGkrKykgeworCQlpZiAoIW1zLT5jaFtpXS5zbGN0dW5pdGlkIHx8IChtYXNrICYgKDEgPDwgaSkpKQorCQkJY29udGludWU7CisJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX0NVUiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKKwkJCQkgICAgMCwgbXMtPmlmYWNlIHwgKG1zLT5jaFtpXS5zbGN0dW5pdGlkIDw8IDgpLCAmYnVmLCAxLCAxMDAwKSA8IDApIHsKKwkJCWVyciA9IC1FSU87CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBzZWxlY3RvciByZWFkIHJlcXVlc3QgZGV2aWNlICV1IGlmICV1IHVuaXQgJXUgZmFpbGVkXG4iLCAKKwkJCSAgICAgICBkZXYtPmRldm51bSwgbXMtPmlmYWNlLCBtcy0+Y2hbaV0uc2xjdHVuaXRpZCAmIDB4ZmYpOworCQkJY29udGludWU7CisJCX0KKwkJZm9yIChqID0gaTsgaiA8IG1zLT5udW1jaDsgaisrKSB7CisJCQlpZiAoKG1zLT5jaFtpXS5zbGN0dW5pdGlkIF4gbXMtPmNoW2pdLnNsY3R1bml0aWQpICYgMHhmZikKKwkJCQljb250aW51ZTsKKwkJCW1hc2sgfD0gMSA8PCBqOworCQkJaWYgKGJ1ZiA9PSAobXMtPmNoW2pdLnNsY3R1bml0aWQgPj4gOCkpCisJCQkJcmV0bWFzayB8PSAxIDw8IG1zLT5jaFtqXS5vc3NjaGFubmVsOworCQl9CisJfQorCWlmIChlcnIpCisJCXJldHVybiAtRUlPOworCXJldHVybiByZXRtYXNrOworfQorCitzdGF0aWMgaW50IHNldF9yZWNfc3JjKHN0cnVjdCB1c2JfbWl4ZXJkZXYgKm1zLCBpbnQgc3JjbWFzaykKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gbXMtPnN0YXRlLT51c2JkZXY7CisJdW5zaWduZWQgaW50IG1hc2sgPSAwLCBzbWFzaywgYm1hc2s7CisJdW5zaWduZWQgaW50IGksIGo7CisJdW5zaWduZWQgY2hhciBidWY7CisJaW50IGVyciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXMtPm51bWNoOyBpKyspIHsKKwkJaWYgKCFtcy0+Y2hbaV0uc2xjdHVuaXRpZCB8fCAobWFzayAmICgxIDw8IGkpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCisJCQkJICAgIDAsIG1zLT5pZmFjZSB8IChtcy0+Y2hbaV0uc2xjdHVuaXRpZCA8PCA4KSwgJmJ1ZiwgMSwgMTAwMCkgPCAwKSB7CisJCQllcnIgPSAtRUlPOworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogc2VsZWN0b3IgcmVhZCByZXF1ZXN0IGRldmljZSAldSBpZiAldSB1bml0ICV1IGZhaWxlZFxuIiwgCisJCQkgICAgICAgZGV2LT5kZXZudW0sIG1zLT5pZmFjZSwgbXMtPmNoW2ldLnNsY3R1bml0aWQgJiAweGZmKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIGZpcnN0IGdlbmVyYXRlIHNtYXNrICovCisJCXNtYXNrID0gYm1hc2sgPSAwOworCQlmb3IgKGogPSBpOyBqIDwgbXMtPm51bWNoOyBqKyspIHsKKwkJCWlmICgobXMtPmNoW2ldLnNsY3R1bml0aWQgXiBtcy0+Y2hbal0uc2xjdHVuaXRpZCkgJiAweGZmKQorCQkJCWNvbnRpbnVlOworCQkJc21hc2sgfD0gMSA8PCBtcy0+Y2hbal0ub3NzY2hhbm5lbDsKKwkJCWlmIChidWYgPT0gKG1zLT5jaFtqXS5zbGN0dW5pdGlkID4+IDgpKQorCQkJCWJtYXNrIHw9IDEgPDwgbXMtPmNoW2pdLm9zc2NoYW5uZWw7CisJCQltYXNrIHw9IDEgPDwgajsKKwkJfQorCQkvKiBjaGVjayBmb3IgbXVsdGlwbGUgc2V0IHNvdXJjZXMgKi8KKwkJaiA9IGh3ZWlnaHQzMihzcmNtYXNrICYgc21hc2spOworCQlpZiAoaiA9PSAwKQorCQkJY29udGludWU7CisJCWlmIChqID4gMSkKKwkJCXNyY21hc2sgJj0gfmJtYXNrOworCQlmb3IgKGogPSBpOyBqIDwgbXMtPm51bWNoOyBqKyspIHsKKwkJCWlmICgobXMtPmNoW2ldLnNsY3R1bml0aWQgXiBtcy0+Y2hbal0uc2xjdHVuaXRpZCkgJiAweGZmKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCEoc3JjbWFzayAmICgxIDw8IG1zLT5jaFtqXS5vc3NjaGFubmVsKSkpCisJCQkJY29udGludWU7CisJCQlidWYgPSBtcy0+Y2hbal0uc2xjdHVuaXRpZCA+PiA4OworCQkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBTRVRfQ1VSLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCwKKwkJCQkgICAgMCwgbXMtPmlmYWNlIHwgKG1zLT5jaFtqXS5zbGN0dW5pdGlkIDw8IDgpLCAmYnVmLCAxLCAxMDAwKSA8IDApIHsKKwkJCQllcnIgPSAtRUlPOworCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHNlbGVjdG9yIHdyaXRlIHJlcXVlc3QgZGV2aWNlICV1IGlmICV1IHVuaXQgJXUgZmFpbGVkXG4iLCAKKwkJCQkgICAgICAgZGV2LT5kZXZudW0sIG1zLT5pZmFjZSwgbXMtPmNoW2pdLnNsY3R1bml0aWQgJiAweGZmKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gZXJyID8gLUVJTyA6IDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogc2hvdWxkIGJlIGNhbGxlZCB3aXRoIG9wZW5fc2VtIGhvbGQsIHNvIHRoYXQgbm8gbmV3IHByb2Nlc3NlcworICogbG9vayBhdCB0aGUgYXVkaW8gZGV2aWNlIHRvIGJlIGRlc3Ryb3llZAorICovCisKK3N0YXRpYyB2b2lkIHJlbGVhc2Uoc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqcykKK3sKKwlzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphczsKKwlzdHJ1Y3QgdXNiX21peGVyZGV2ICptczsKKworCXMtPmNvdW50LS07CisJaWYgKHMtPmNvdW50KSB7CisJCXVwKCZvcGVuX3NlbSk7CisJCXJldHVybjsKKwl9CisJdXAoJm9wZW5fc2VtKTsKKwl3YWtlX3VwKCZvcGVuX3dhaXQpOworCXdoaWxlICghbGlzdF9lbXB0eSgmcy0+YXVkaW9saXN0KSkgeworCQlhcyA9IGxpc3RfZW50cnkocy0+YXVkaW9saXN0Lm5leHQsIHN0cnVjdCB1c2JfYXVkaW9kZXYsIGxpc3QpOworCQlsaXN0X2RlbCgmYXMtPmxpc3QpOworCQl1c2Jpbl9yZWxlYXNlKGFzKTsKKwkJdXNib3V0X3JlbGVhc2UoYXMpOworCQlkbWFidWZfcmVsZWFzZSgmYXMtPnVzYmluLmRtYSk7CisJCWRtYWJ1Zl9yZWxlYXNlKCZhcy0+dXNib3V0LmRtYSk7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNiaW4uZHVyYlswXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYmluLmR1cmJbMV0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2Jpbi5zdXJiWzBdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNiaW4uc3VyYlsxXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYm91dC5kdXJiWzBdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNib3V0LmR1cmJbMV0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2JvdXQuc3VyYlswXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYm91dC5zdXJiWzFdLnVyYik7CisJCWtmcmVlKGFzKTsKKwl9CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZzLT5taXhlcmxpc3QpKSB7CisJCW1zID0gbGlzdF9lbnRyeShzLT5taXhlcmxpc3QubmV4dCwgc3RydWN0IHVzYl9taXhlcmRldiwgbGlzdCk7CisJCWxpc3RfZGVsKCZtcy0+bGlzdCk7CisJCWtmcmVlKG1zKTsKKwl9CisJa2ZyZWUocyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHByb2dfZG1hYnVmX2luKHN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzKQoreworCXVzYmluX3N0b3AoYXMpOworCXJldHVybiBkbWFidWZfaW5pdCgmYXMtPnVzYmluLmRtYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHByb2dfZG1hYnVmX291dChzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcykKK3sKKwl1c2JvdXRfc3RvcChhcyk7CisJcmV0dXJuIGRtYWJ1Zl9pbml0KCZhcy0+dXNib3V0LmRtYSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IHVzYl9hdWRpb19vcGVuX21peGRldihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOworCXN0cnVjdCB1c2JfbWl4ZXJkZXYgKm1zOworCXN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKnM7CisKKwlkb3duKCZvcGVuX3NlbSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzLCAmYXVkaW9kZXZzLCBhdWRpb2RldikgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1zLCAmcy0+bWl4ZXJsaXN0LCBsaXN0KSB7CisJCQlpZiAobXMtPmRldl9taXhlciA9PSBtaW5vcikKKwkJCQlnb3RvIG1peGVyX2ZvdW5kOworCQl9CisJfQorCXVwKCZvcGVuX3NlbSk7CisJcmV0dXJuIC1FTk9ERVY7CisKKyBtaXhlcl9mb3VuZDoKKwlpZiAoIXMtPnVzYmRldikgeworCQl1cCgmb3Blbl9zZW0pOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gbXM7CisJcy0+Y291bnQrKzsKKworCXVwKCZvcGVuX3NlbSk7CisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworfQorCitzdGF0aWMgaW50IHVzYl9hdWRpb19yZWxlYXNlX21peGRldihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdXNiX21peGVyZGV2ICptcyA9IChzdHJ1Y3QgdXNiX21peGVyZGV2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKnM7CisKKwlsb2NrX2tlcm5lbCgpOworCXMgPSBtcy0+c3RhdGU7CisJZG93bigmb3Blbl9zZW0pOworCXJlbGVhc2Uocyk7CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzYl9hdWRpb19pb2N0bF9taXhkZXYoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB1c2JfbWl4ZXJkZXYgKm1zID0gKHN0cnVjdCB1c2JfbWl4ZXJkZXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IGksIGosIHZhbDsKKwlpbnQgX191c2VyICp1c2VyX2FyZyA9IChpbnQgX191c2VyICopYXJnOworCisJaWYgKCFtcy0+c3RhdGUtPnVzYmRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisgIAorCWlmIChjbWQgPT0gU09VTkRfTUlYRVJfSU5GTykgeworCQltaXhlcl9pbmZvIGluZm87CisKKwkJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOworCQlzdHJuY3B5KGluZm8uaWQsICJVU0JfQVVESU8iLCBzaXplb2YoaW5mby5pZCkpOworCQlzdHJuY3B5KGluZm8ubmFtZSwgIlVTQiBBdWRpbyBDbGFzcyBEcml2ZXIiLCBzaXplb2YoaW5mby5uYW1lKSk7CisJCWluZm8ubW9kaWZ5X2NvdW50ZXIgPSBtcy0+bW9kY250OworCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmluZm8sIHNpemVvZihpbmZvKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChjbWQgPT0gU09VTkRfT0xEX01JWEVSX0lORk8pIHsKKwkJX29sZF9taXhlcl9pbmZvIGluZm87CisKKwkJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOworCQlzdHJuY3B5KGluZm8uaWQsICJVU0JfQVVESU8iLCBzaXplb2YoaW5mby5pZCkpOworCQlzdHJuY3B5KGluZm8ubmFtZSwgIlVTQiBBdWRpbyBDbGFzcyBEcml2ZXIiLCBzaXplb2YoaW5mby5uYW1lKSk7CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGNtZCA9PSBPU1NfR0VUVkVSU0lPTikKKwkJcmV0dXJuIHB1dF91c2VyKFNPVU5EX1ZFUlNJT04sIHVzZXJfYXJnKTsKKwlpZiAoX0lPQ19UWVBFKGNtZCkgIT0gJ00nIHx8IF9JT0NfU0laRShjbWQpICE9IHNpemVvZihpbnQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoX0lPQ19ESVIoY21kKSA9PSBfSU9DX1JFQUQpIHsKKwkJc3dpdGNoIChfSU9DX05SKGNtZCkpIHsKKwkJY2FzZSBTT1VORF9NSVhFUl9SRUNTUkM6IC8qIEFyZyBjb250YWlucyBhIGJpdCBmb3IgZWFjaCByZWNvcmRpbmcgc291cmNlICovCisJCQl2YWwgPSBnZXRfcmVjX3NyYyhtcyk7CisJCQlpZiAodmFsIDwgMCkKKwkJCQlyZXR1cm4gdmFsOworCQkJcmV0dXJuIHB1dF91c2VyKHZhbCwgdXNlcl9hcmcpOworCisJCWNhc2UgU09VTkRfTUlYRVJfREVWTUFTSzogLyogQXJnIGNvbnRhaW5zIGEgYml0IGZvciBlYWNoIHN1cHBvcnRlZCBkZXZpY2UgKi8KKwkJCWZvciAodmFsID0gaSA9IDA7IGkgPCBtcy0+bnVtY2g7IGkrKykKKwkJCQl2YWwgfD0gMSA8PCBtcy0+Y2hbaV0ub3NzY2hhbm5lbDsKKwkJCXJldHVybiBwdXRfdXNlcih2YWwsIHVzZXJfYXJnKTsKKworCQljYXNlIFNPVU5EX01JWEVSX1JFQ01BU0s6IC8qIEFyZyBjb250YWlucyBhIGJpdCBmb3IgZWFjaCBzdXBwb3J0ZWQgcmVjb3JkaW5nIHNvdXJjZSAqLworCQkJZm9yICh2YWwgPSBpID0gMDsgaSA8IG1zLT5udW1jaDsgaSsrKQorCQkJCWlmIChtcy0+Y2hbaV0uc2xjdHVuaXRpZCkKKwkJCQkJdmFsIHw9IDEgPDwgbXMtPmNoW2ldLm9zc2NoYW5uZWw7CisJCQlyZXR1cm4gcHV0X3VzZXIodmFsLCB1c2VyX2FyZyk7CisKKwkJY2FzZSBTT1VORF9NSVhFUl9TVEVSRU9ERVZTOiAvKiBNaXhlciBjaGFubmVscyBzdXBwb3J0aW5nIHN0ZXJlbyAqLworCQkJZm9yICh2YWwgPSBpID0gMDsgaSA8IG1zLT5udW1jaDsgaSsrKQorCQkJCWlmIChtcy0+Y2hbaV0uZmxhZ3MgJiAoTUlYRkxHX1NURVJFT0lOIHwgTUlYRkxHX1NURVJFT09VVCkpCisJCQkJCXZhbCB8PSAxIDw8IG1zLT5jaFtpXS5vc3NjaGFubmVsOworCQkJcmV0dXJuIHB1dF91c2VyKHZhbCwgdXNlcl9hcmcpOworCQkJCisJCWNhc2UgU09VTkRfTUlYRVJfQ0FQUzoKKwkJCXJldHVybiBwdXRfdXNlcihTT1VORF9DQVBfRVhDTF9JTlBVVCwgdXNlcl9hcmcpOworCisJCWRlZmF1bHQ6CisJCQlpID0gX0lPQ19OUihjbWQpOworCQkJaWYgKGkgPj0gU09VTkRfTUlYRVJfTlJERVZJQ0VTKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJZm9yIChqID0gMDsgaiA8IG1zLT5udW1jaDsgaisrKSB7CisJCQkJaWYgKG1zLT5jaFtqXS5vc3NjaGFubmVsID09IGkpIHsKKwkJCQkJcmV0dXJuIHB1dF91c2VyKG1zLT5jaFtqXS52YWx1ZSwgdXNlcl9hcmcpOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCWlmIChfSU9DX0RJUihjbWQpICE9IChfSU9DX1JFQUR8X0lPQ19XUklURSkpIAorCQlyZXR1cm4gLUVJTlZBTDsKKwltcy0+bW9kY250Kys7CisJc3dpdGNoIChfSU9DX05SKGNtZCkpIHsKKwljYXNlIFNPVU5EX01JWEVSX1JFQ1NSQzogLyogQXJnIGNvbnRhaW5zIGEgYml0IGZvciBlYWNoIHJlY29yZGluZyBzb3VyY2UgKi8KKwkJaWYgKGdldF91c2VyKHZhbCwgdXNlcl9hcmcpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiBzZXRfcmVjX3NyYyhtcywgdmFsKTsKKworCWRlZmF1bHQ6CisJCWkgPSBfSU9DX05SKGNtZCk7CisJCWlmIChpID49IFNPVU5EX01JWEVSX05SREVWSUNFUykKKwkJCXJldHVybiAtRUlOVkFMOworCQlmb3IgKGogPSAwOyBqIDwgbXMtPm51bWNoICYmIG1zLT5jaFtqXS5vc3NjaGFubmVsICE9IGk7IGorKyk7CisJCWlmIChqID49IG1zLT5udW1jaCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoZ2V0X3VzZXIodmFsLCB1c2VyX2FyZykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKHdybWl4ZXIobXMsIGosIHZhbCkpCisJCQlyZXR1cm4gLUVJTzsKKwkJcmV0dXJuIHB1dF91c2VyKG1zLT5jaFtqXS52YWx1ZSwgdXNlcl9hcmcpOworCX0KK30KKworc3RhdGljIC8qY29uc3QqLyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYl9taXhlcl9mb3BzID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5sbHNlZWsgPQlub19sbHNlZWssCisJLmlvY3RsID0JdXNiX2F1ZGlvX2lvY3RsX21peGRldiwKKwkub3BlbiA9CQl1c2JfYXVkaW9fb3Blbl9taXhkZXYsCisJLnJlbGVhc2UgPQl1c2JfYXVkaW9fcmVsZWFzZV9taXhkZXYsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBkcmFpbl9vdXQoc3RydWN0IHVzYl9hdWRpb2RldiAqYXMsIGludCBub25ibG9jaykKK3sKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjb3VudCwgdG1vOworCQorCWlmIChhcy0+dXNib3V0LmRtYS5tYXBwZWQgfHwgIWFzLT51c2JvdXQuZG1hLnJlYWR5KQorCQlyZXR1cm4gMDsKKwl1c2JvdXRfc3RhcnQoYXMpOworCWFkZF93YWl0X3F1ZXVlKCZhcy0+dXNib3V0LmRtYS53YWl0LCAmd2FpdCk7CisJZm9yICg7OykgeworCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCQljb3VudCA9IGFzLT51c2JvdXQuZG1hLmNvdW50OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlpZiAoY291bnQgPD0gMCkKKwkJCWJyZWFrOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQlicmVhazsKKwkJaWYgKG5vbmJsb2NrKSB7CisJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmYXMtPnVzYm91dC5kbWEud2FpdCwgJndhaXQpOworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkJdG1vID0gMyAqIEhaICogY291bnQgLyBhcy0+dXNib3V0LmRtYS5zcmF0ZTsKKwkJdG1vID4+PSBBRk1UX0JZVEVTU0hJRlQoYXMtPnVzYm91dC5kbWEuZm9ybWF0KTsKKwkJaWYgKCFzY2hlZHVsZV90aW1lb3V0KHRtbyArIDEpKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAidXNiYXVkaW86IGRtYSB0aW1lZCBvdXQ/P1xuIik7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZW1vdmVfd2FpdF9xdWV1ZSgmYXMtPnVzYm91dC5kbWEud2FpdCwgJndhaXQpOworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHNzaXplX3QgdXNiX2F1ZGlvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzID0gKHN0cnVjdCB1c2JfYXVkaW9kZXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisJc3NpemVfdCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHB0cjsKKwlpbnQgY250LCBlcnI7CisKKwlpZiAoYXMtPnVzYmluLmRtYS5tYXBwZWQpCisJCXJldHVybiAtRU5YSU87CisJaWYgKCFhcy0+dXNiaW4uZG1hLnJlYWR5ICYmIChyZXQgPSBwcm9nX2RtYWJ1Zl9pbihhcykpKQorCQlyZXR1cm4gcmV0OworCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgYnVmZmVyLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCWFkZF93YWl0X3F1ZXVlKCZhcy0+dXNiaW4uZG1hLndhaXQsICZ3YWl0KTsKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlwdHIgPSBhcy0+dXNiaW4uZG1hLnJkcHRyOworCQljbnQgPSBhcy0+dXNiaW4uZG1hLmNvdW50OworCQkvKiBzZXQgdGFzayBzdGF0ZSBlYXJseSB0byBhdm9pZCB3YWtldXAgcmFjZXMgKi8KKwkJaWYgKGNudCA8PSAwKQorCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlpZiAoY250ID4gY291bnQpCisJCQljbnQgPSBjb3VudDsKKwkJaWYgKGNudCA8PSAwKSB7CisJCQlpZiAodXNiaW5fc3RhcnQoYXMpKSB7CisJCQkJaWYgKCFyZXQpCisJCQkJCXJldCA9IC1FTk9ERVY7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCQlpZiAoIXJldCkKKwkJCQkJcmV0ID0gLUVBR0FJTjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXNjaGVkdWxlKCk7CisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQlpZiAoIXJldCkKKwkJCQkJcmV0ID0gLUVSRVNUQVJUU1lTOworCQkJCWJyZWFrOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJaWYgKChlcnIgPSBkbWFidWZfY29weW91dF91c2VyKCZhcy0+dXNiaW4uZG1hLCBwdHIsIGJ1ZmZlciwgY250KSkpIHsKKwkJCWlmICghcmV0KQorCQkJCXJldCA9IGVycjsKKwkJCWJyZWFrOworCQl9CisJCXB0ciArPSBjbnQ7CisJCWlmIChwdHIgPj0gYXMtPnVzYmluLmRtYS5kbWFzaXplKQorCQkJcHRyIC09IGFzLT51c2Jpbi5kbWEuZG1hc2l6ZTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWFzLT51c2Jpbi5kbWEucmRwdHIgPSBwdHI7CisJCWFzLT51c2Jpbi5kbWEuY291bnQgLT0gY250OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCQljb3VudCAtPSBjbnQ7CisJCWJ1ZmZlciArPSBjbnQ7CisJCXJldCArPSBjbnQ7CisJfQorCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmYXMtPnVzYmluLmRtYS53YWl0LCAmd2FpdCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgdXNiX2F1ZGlvX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcyA9IChzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCXNzaXplX3QgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBwdHI7CisJdW5zaWduZWQgaW50IHN0YXJ0X3RocjsKKwlpbnQgY250LCBlcnI7CisKKwlpZiAoYXMtPnVzYm91dC5kbWEubWFwcGVkKQorCQlyZXR1cm4gLUVOWElPOworCWlmICghYXMtPnVzYm91dC5kbWEucmVhZHkgJiYgKHJldCA9IHByb2dfZG1hYnVmX291dChhcykpKQorCQlyZXR1cm4gcmV0OworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBidWZmZXIsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJc3RhcnRfdGhyID0gKGFzLT51c2JvdXQuZG1hLnNyYXRlIDw8IEFGTVRfQllURVNTSElGVChhcy0+dXNib3V0LmRtYS5mb3JtYXQpKSAvICgxMDAwIC8gKDMgKiBERVNDRlJBTUVTKSk7CisJYWRkX3dhaXRfcXVldWUoJmFzLT51c2JvdXQuZG1hLndhaXQsICZ3YWl0KTsKKwl3aGlsZSAoY291bnQgPiAwKSB7CisjaWYgMAorCQlwcmludGsoS0VSTl9ERUJVRyAidXNiX2F1ZGlvX3dyaXRlOiBjb3VudCAldSBkbWE6IGNvdW50ICV1IHJkcHRyICV1IHdycHRyICV1IGRtYXNpemUgJXUgZnJhZ3NpemUgJXUgZmxhZ3MgMHglMDJ4IHRhc2tzdCAweCVseFxuIiwKKwkJICAgICAgIGNvdW50LCBhcy0+dXNib3V0LmRtYS5jb3VudCwgYXMtPnVzYm91dC5kbWEucmRwdHIsIGFzLT51c2JvdXQuZG1hLndycHRyLCBhcy0+dXNib3V0LmRtYS5kbWFzaXplLCBhcy0+dXNib3V0LmRtYS5mcmFnc2l6ZSwKKwkJICAgICAgIGFzLT51c2JvdXQuZmxhZ3MsIGN1cnJlbnQtPnN0YXRlKTsKKyNlbmRpZgorCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKGFzLT51c2JvdXQuZG1hLmNvdW50IDwgMCkgeworCQkJYXMtPnVzYm91dC5kbWEuY291bnQgPSAwOworCQkJYXMtPnVzYm91dC5kbWEucmRwdHIgPSBhcy0+dXNib3V0LmRtYS53cnB0cjsKKwkJfQorCQlwdHIgPSBhcy0+dXNib3V0LmRtYS53cnB0cjsKKwkJY250ID0gYXMtPnVzYm91dC5kbWEuZG1hc2l6ZSAtIGFzLT51c2JvdXQuZG1hLmNvdW50OworCQkvKiBzZXQgdGFzayBzdGF0ZSBlYXJseSB0byBhdm9pZCB3YWtldXAgcmFjZXMgKi8KKwkJaWYgKGNudCA8PSAwKQorCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlpZiAoY250ID4gY291bnQpCisJCQljbnQgPSBjb3VudDsKKwkJaWYgKGNudCA8PSAwKSB7CisJCQlpZiAodXNib3V0X3N0YXJ0KGFzKSkgeworCQkJCWlmICghcmV0KQorCQkJCQlyZXQgPSAtRU5PREVWOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQkJaWYgKCFyZXQpCisJCQkJCXJldCA9IC1FQUdBSU47CisJCQkJYnJlYWs7CisJCQl9CisJCQlzY2hlZHVsZSgpOworCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJaWYgKCFyZXQpCisJCQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgoZXJyID0gZG1hYnVmX2NvcHlpbl91c2VyKCZhcy0+dXNib3V0LmRtYSwgcHRyLCBidWZmZXIsIGNudCkpKSB7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSBlcnI7CisJCQlicmVhazsKKwkJfQorCQlwdHIgKz0gY250OworCQlpZiAocHRyID49IGFzLT51c2JvdXQuZG1hLmRtYXNpemUpCisJCQlwdHIgLT0gYXMtPnVzYm91dC5kbWEuZG1hc2l6ZTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWFzLT51c2JvdXQuZG1hLndycHRyID0gcHRyOworCQlhcy0+dXNib3V0LmRtYS5jb3VudCArPSBjbnQ7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWNvdW50IC09IGNudDsKKwkJYnVmZmVyICs9IGNudDsKKwkJcmV0ICs9IGNudDsKKwkJaWYgKGFzLT51c2JvdXQuZG1hLmNvdW50ID49IHN0YXJ0X3RociAmJiB1c2JvdXRfc3RhcnQoYXMpKSB7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRU5PREVWOworCQkJYnJlYWs7CisJCX0KKwl9CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZhcy0+dXNib3V0LmRtYS53YWl0LCAmd2FpdCk7CisJcmV0dXJuIHJldDsKK30KKworLyogQ2FsbGVkIHdpdGhvdXQgdGhlIGtlcm5lbCBsb2NrIC0gZmluZSAqLworc3RhdGljIHVuc2lnbmVkIGludCB1c2JfYXVkaW9fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzID0gKHN0cnVjdCB1c2JfYXVkaW9kZXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CisKKwlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKKwkJaWYgKCFhcy0+dXNib3V0LmRtYS5yZWFkeSkKKwkJCXByb2dfZG1hYnVmX291dChhcyk7CisJCXBvbGxfd2FpdChmaWxlLCAmYXMtPnVzYm91dC5kbWEud2FpdCwgd2FpdCk7CisJfQorCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7CisJCWlmICghYXMtPnVzYmluLmRtYS5yZWFkeSkKKwkJCXByb2dfZG1hYnVmX2luKGFzKTsKKwkJcG9sbF93YWl0KGZpbGUsICZhcy0+dXNiaW4uZG1hLndhaXQsIHdhaXQpOworCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgeworCQlpZiAoYXMtPnVzYmluLmRtYS5jb3VudCA+PSAoc2lnbmVkKWFzLT51c2Jpbi5kbWEuZnJhZ3NpemUpCisJCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CisJfQorCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgeworCQlpZiAoYXMtPnVzYm91dC5kbWEubWFwcGVkKSB7CisJCQlpZiAoYXMtPnVzYm91dC5kbWEuY291bnQgPj0gKHNpZ25lZClhcy0+dXNib3V0LmRtYS5mcmFnc2l6ZSkgCisJCQkJbWFzayB8PSBQT0xMT1VUIHwgUE9MTFdSTk9STTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoc2lnbmVkKWFzLT51c2JvdXQuZG1hLmRtYXNpemUgPj0gYXMtPnVzYm91dC5kbWEuY291bnQgKyAoc2lnbmVkKWFzLT51c2JvdXQuZG1hLmZyYWdzaXplKQorCQkJCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk07CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIGludCB1c2JfYXVkaW9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHVzYl9hdWRpb2RldiAqYXMgPSAoc3RydWN0IHVzYl9hdWRpb2RldiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZG1hYnVmICpkYjsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWxvY2tfa2VybmVsKCk7CisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkgeworCQlpZiAoKHJldCA9IHByb2dfZG1hYnVmX291dChhcykpICE9IDApCisJCQlnb3RvIG91dDsKKwkJZGIgPSAmYXMtPnVzYm91dC5kbWE7CisJfSBlbHNlIGlmICh2bWEtPnZtX2ZsYWdzICYgVk1fUkVBRCkgeworCQlpZiAoKHJldCA9IHByb2dfZG1hYnVmX2luKGFzKSkgIT0gMCkKKwkJCWdvdG8gb3V0OworCQlkYiA9ICZhcy0+dXNiaW4uZG1hOworCX0gZWxzZQorCQlnb3RvIG91dDsKKworCXJldCA9IC1FSU5WQUw7CisJaWYgKHZtYS0+dm1fcGdvZmYgIT0gMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBkbWFidWZfbW1hcCh2bWEsIGRiLCAgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX3BhZ2VfcHJvdCk7CitvdXQ6CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdXNiX2F1ZGlvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcyA9IChzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKnMgPSBhcy0+c3RhdGU7CisJaW50IF9fdXNlciAqdXNlcl9hcmcgPSAoaW50IF9fdXNlciAqKWFyZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWF1ZGlvX2J1Zl9pbmZvIGFiaW5mbzsKKwljb3VudF9pbmZvIGNpbmZvOworCWludCB2YWwgPSAwOworCWludCB2YWwyLCBtYXBwZWQsIHJldDsKKworCWlmICghcy0+dXNiZGV2KQorCQlyZXR1cm4gLUVJTzsKKwltYXBwZWQgPSAoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSAmJiBhcy0+dXNib3V0LmRtYS5tYXBwZWQpIHx8CisJCSgoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgJiYgYXMtPnVzYmluLmRtYS5tYXBwZWQpOworI2lmIDAKKwlpZiAoYXJnKQorCQlnZXRfdXNlcih2YWwsIChpbnQgKilhcmcpOworCXByaW50ayhLRVJOX0RFQlVHICJ1c2JhdWRpbzogdXNiX2F1ZGlvX2lvY3RsIGNtZD0leCBhcmc9JWx4ICphcmc9JWRcbiIsIGNtZCwgYXJnLCB2YWwpCisjZW5kaWYKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgT1NTX0dFVFZFUlNJT046CisJCXJldHVybiBwdXRfdXNlcihTT1VORF9WRVJTSU9OLCB1c2VyX2FyZyk7CisKKwljYXNlIFNORENUTF9EU1BfU1lOQzoKKwkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQorCQkJcmV0dXJuIGRyYWluX291dChhcywgMC8qZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0sqLyk7CisJCXJldHVybiAwOworCisJY2FzZSBTTkRDVExfRFNQX1NFVERVUExFWDoKKwkJcmV0dXJuIDA7CisKKwljYXNlIFNORENUTF9EU1BfR0VUQ0FQUzoKKwkJcmV0dXJuIHB1dF91c2VyKERTUF9DQVBfRFVQTEVYIHwgRFNQX0NBUF9SRUFMVElNRSB8IERTUF9DQVBfVFJJR0dFUiB8IAorCQkJCURTUF9DQVBfTU1BUCB8IERTUF9DQVBfQkFUQ0gsIHVzZXJfYXJnKTsKKworCWNhc2UgU05EQ1RMX0RTUF9SRVNFVDoKKwkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7CisJCQl1c2JvdXRfc3RvcChhcyk7CisJCQlhcy0+dXNib3V0LmRtYS5yZHB0ciA9IGFzLT51c2JvdXQuZG1hLndycHRyID0gYXMtPnVzYm91dC5kbWEuY291bnQgPSBhcy0+dXNib3V0LmRtYS50b3RhbF9ieXRlcyA9IDA7CisJCX0KKwkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKKwkJCXVzYmluX3N0b3AoYXMpOworCQkJYXMtPnVzYmluLmRtYS5yZHB0ciA9IGFzLT51c2Jpbi5kbWEud3JwdHIgPSBhcy0+dXNiaW4uZG1hLmNvdW50ID0gYXMtPnVzYmluLmRtYS50b3RhbF9ieXRlcyA9IDA7CisJCX0KKwkJcmV0dXJuIDA7CisKKwljYXNlIFNORENUTF9EU1BfU1BFRUQ6CisJCWlmIChnZXRfdXNlcih2YWwsIHVzZXJfYXJnKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAodmFsID49IDApIHsKKwkJCWlmICh2YWwgPCA0MDAwKQorCQkJCXZhbCA9IDQwMDA7CisJCQlpZiAodmFsID4gMTAwMDAwKQorCQkJCXZhbCA9IDEwMDAwMDsKKwkJCWlmIChzZXRfZm9ybWF0KGFzLCBmaWxlLT5mX21vZGUsIEFGTVRfUVVFUlksIHZhbCkpCisJCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJcmV0dXJuIHB1dF91c2VyKChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSA/IAorCQkJCWFzLT51c2Jpbi5kbWEuc3JhdGUgOiBhcy0+dXNib3V0LmRtYS5zcmF0ZSwKKwkJCQl1c2VyX2FyZyk7CisKKwljYXNlIFNORENUTF9EU1BfU1RFUkVPOgorCQlpZiAoZ2V0X3VzZXIodmFsLCB1c2VyX2FyZykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJdmFsMiA9IChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSA/IGFzLT51c2Jpbi5kbWEuZm9ybWF0IDogYXMtPnVzYm91dC5kbWEuZm9ybWF0OworCQlpZiAodmFsKQorCQkJdmFsMiB8PSBBRk1UX1NURVJFTzsKKwkJZWxzZQorCQkJdmFsMiAmPSB+QUZNVF9TVEVSRU87CisJCWlmIChzZXRfZm9ybWF0KGFzLCBmaWxlLT5mX21vZGUsIHZhbDIsIDApKQorCQkJcmV0dXJuIC1FSU87CisJCXJldHVybiAwOworCisJY2FzZSBTTkRDVExfRFNQX0NIQU5ORUxTOgorCQlpZiAoZ2V0X3VzZXIodmFsLCB1c2VyX2FyZykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKHZhbCAhPSAwKSB7CisJCQl2YWwyID0gKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpID8gYXMtPnVzYmluLmRtYS5mb3JtYXQgOiBhcy0+dXNib3V0LmRtYS5mb3JtYXQ7CisJCQlpZiAodmFsID09IDEpCisJCQkJdmFsMiAmPSB+QUZNVF9TVEVSRU87CisJCQllbHNlCisJCQkJdmFsMiB8PSBBRk1UX1NURVJFTzsKKwkJCWlmIChzZXRfZm9ybWF0KGFzLCBmaWxlLT5mX21vZGUsIHZhbDIsIDApKQorCQkJCXJldHVybiAtRUlPOworCQl9CisJCXZhbDIgPSAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgPyBhcy0+dXNiaW4uZG1hLmZvcm1hdCA6IGFzLT51c2JvdXQuZG1hLmZvcm1hdDsKKwkJcmV0dXJuIHB1dF91c2VyKEFGTVRfSVNTVEVSRU8odmFsMikgPyAyIDogMSwgdXNlcl9hcmcpOworCisJY2FzZSBTTkRDVExfRFNQX0dFVEZNVFM6IC8qIFJldHVybnMgYSBtYXNrICovCisJCXJldHVybiBwdXRfdXNlcihBRk1UX1U4IHwgQUZNVF9VMTZfTEUgfCBBRk1UX1UxNl9CRSB8CisJCQkJQUZNVF9TOCB8IEFGTVRfUzE2X0xFIHwgQUZNVF9TMTZfQkUsIHVzZXJfYXJnKTsKKworCWNhc2UgU05EQ1RMX0RTUF9TRVRGTVQ6IC8qIFNlbGVjdHMgT05FIGZtdCovCisJCWlmIChnZXRfdXNlcih2YWwsIHVzZXJfYXJnKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAodmFsICE9IEFGTVRfUVVFUlkpIHsKKwkJCWlmIChod2VpZ2h0MzIodmFsKSAhPSAxKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKCEodmFsICYgKEFGTVRfVTggfCBBRk1UX1UxNl9MRSB8IEFGTVRfVTE2X0JFIHwKKwkJCQkgICAgIEFGTVRfUzggfCBBRk1UX1MxNl9MRSB8IEFGTVRfUzE2X0JFKSkpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl2YWwyID0gKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpID8gYXMtPnVzYmluLmRtYS5mb3JtYXQgOiBhcy0+dXNib3V0LmRtYS5mb3JtYXQ7CisJCQl2YWwgfD0gdmFsMiAmIEFGTVRfU1RFUkVPOworCQkJaWYgKHNldF9mb3JtYXQoYXMsIGZpbGUtPmZfbW9kZSwgdmFsLCAwKSkKKwkJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQl2YWwyID0gKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpID8gYXMtPnVzYmluLmRtYS5mb3JtYXQgOiBhcy0+dXNib3V0LmRtYS5mb3JtYXQ7CisJCXJldHVybiBwdXRfdXNlcih2YWwyICYgfkFGTVRfU1RFUkVPLCB1c2VyX2FyZyk7CisKKwljYXNlIFNORENUTF9EU1BfUE9TVDoKKwkJcmV0dXJuIDA7CisKKwljYXNlIFNORENUTF9EU1BfR0VUVFJJR0dFUjoKKwkJdmFsID0gMDsKKwkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQgJiYgYXMtPnVzYmluLmZsYWdzICYgRkxHX1JVTk5JTkcpIAorCQkJdmFsIHw9IFBDTV9FTkFCTEVfSU5QVVQ7CisJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSAmJiBhcy0+dXNib3V0LmZsYWdzICYgRkxHX1JVTk5JTkcpIAorCQkJdmFsIHw9IFBDTV9FTkFCTEVfT1VUUFVUOworCQlyZXR1cm4gcHV0X3VzZXIodmFsLCB1c2VyX2FyZyk7CisKKwljYXNlIFNORENUTF9EU1BfU0VUVFJJR0dFUjoKKwkJaWYgKGdldF91c2VyKHZhbCwgdXNlcl9hcmcpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7CisJCQlpZiAodmFsICYgUENNX0VOQUJMRV9JTlBVVCkgeworCQkJCWlmICghYXMtPnVzYmluLmRtYS5yZWFkeSAmJiAocmV0ID0gcHJvZ19kbWFidWZfaW4oYXMpKSkKKwkJCQkJcmV0dXJuIHJldDsKKwkJCQlpZiAodXNiaW5fc3RhcnQoYXMpKQorCQkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0gZWxzZQorCQkJCXVzYmluX3N0b3AoYXMpOworCQl9CisJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgeworCQkJaWYgKHZhbCAmIFBDTV9FTkFCTEVfT1VUUFVUKSB7CisJCQkJaWYgKCFhcy0+dXNib3V0LmRtYS5yZWFkeSAmJiAocmV0ID0gcHJvZ19kbWFidWZfb3V0KGFzKSkpCisJCQkJCXJldHVybiByZXQ7CisJCQkJaWYgKHVzYm91dF9zdGFydChhcykpCisJCQkJCXJldHVybiAtRU5PREVWOworCQkJfSBlbHNlCisJCQkJdXNib3V0X3N0b3AoYXMpOworCQl9CisJCXJldHVybiAwOworCisJY2FzZSBTTkRDVExfRFNQX0dFVE9TUEFDRToKKwkJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghKGFzLT51c2JvdXQuZmxhZ3MgJiBGTEdfUlVOTklORykgJiYgKHZhbCA9IHByb2dfZG1hYnVmX291dChhcykpICE9IDApCisJCQlyZXR1cm4gdmFsOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwkJYWJpbmZvLmZyYWdzaXplID0gYXMtPnVzYm91dC5kbWEuZnJhZ3NpemU7CisJCWFiaW5mby5ieXRlcyA9IGFzLT51c2JvdXQuZG1hLmRtYXNpemUgLSBhcy0+dXNib3V0LmRtYS5jb3VudDsKKwkJYWJpbmZvLmZyYWdzdG90YWwgPSBhcy0+dXNib3V0LmRtYS5udW1mcmFnOworCQlhYmluZm8uZnJhZ21lbnRzID0gYWJpbmZvLmJ5dGVzID4+IGFzLT51c2JvdXQuZG1hLmZyYWdzaGlmdDsgICAgICAKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZhYmluZm8sIHNpemVvZihhYmluZm8pKSA/IC1FRkFVTFQgOiAwOworCisJY2FzZSBTTkRDVExfRFNQX0dFVElTUEFDRToKKwkJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCEoYXMtPnVzYmluLmZsYWdzICYgRkxHX1JVTk5JTkcpICYmICh2YWwgPSBwcm9nX2RtYWJ1Zl9pbihhcykpICE9IDApCisJCQlyZXR1cm4gdmFsOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwkJYWJpbmZvLmZyYWdzaXplID0gYXMtPnVzYmluLmRtYS5mcmFnc2l6ZTsKKwkJYWJpbmZvLmJ5dGVzID0gYXMtPnVzYmluLmRtYS5jb3VudDsKKwkJYWJpbmZvLmZyYWdzdG90YWwgPSBhcy0+dXNiaW4uZG1hLm51bWZyYWc7CisJCWFiaW5mby5mcmFnbWVudHMgPSBhYmluZm8uYnl0ZXMgPj4gYXMtPnVzYmluLmRtYS5mcmFnc2hpZnQ7ICAgICAgCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmYWJpbmZvLCBzaXplb2YoYWJpbmZvKSkgPyAtRUZBVUxUIDogMDsKKwkJCisJY2FzZSBTTkRDVExfRFNQX05PTkJMT0NLOgorCQlmaWxlLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7CisJCXJldHVybiAwOworCisJY2FzZSBTTkRDVExfRFNQX0dFVE9ERUxBWToKKwkJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCQl2YWwgPSBhcy0+dXNib3V0LmRtYS5jb3VudDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIHB1dF91c2VyKHZhbCwgdXNlcl9hcmcpOworCisJY2FzZSBTTkRDVExfRFNQX0dFVElQVFI6CisJCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCQljaW5mby5ieXRlcyA9IGFzLT51c2Jpbi5kbWEudG90YWxfYnl0ZXM7CisJCWNpbmZvLmJsb2NrcyA9IGFzLT51c2Jpbi5kbWEuY291bnQgPj4gYXMtPnVzYmluLmRtYS5mcmFnc2hpZnQ7CisJCWNpbmZvLnB0ciA9IGFzLT51c2Jpbi5kbWEud3JwdHI7CisJCWlmIChhcy0+dXNiaW4uZG1hLm1hcHBlZCkKKwkJCWFzLT51c2Jpbi5kbWEuY291bnQgJj0gYXMtPnVzYmluLmRtYS5mcmFnc2l6ZS0xOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmNpbmZvLCBzaXplb2YoY2luZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKworCWNhc2UgU05EQ1RMX0RTUF9HRVRPUFRSOgorCQlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWNpbmZvLmJ5dGVzID0gYXMtPnVzYm91dC5kbWEudG90YWxfYnl0ZXM7CisJCWNpbmZvLmJsb2NrcyA9IGFzLT51c2JvdXQuZG1hLmNvdW50ID4+IGFzLT51c2JvdXQuZG1hLmZyYWdzaGlmdDsKKwkJY2luZm8ucHRyID0gYXMtPnVzYm91dC5kbWEucmRwdHI7CisJCWlmIChhcy0+dXNib3V0LmRtYS5tYXBwZWQpCisJCQlhcy0+dXNib3V0LmRtYS5jb3VudCAmPSBhcy0+dXNib3V0LmRtYS5mcmFnc2l6ZS0xOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmNpbmZvLCBzaXplb2YoY2luZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKworICAgICAgIGNhc2UgU05EQ1RMX0RTUF9HRVRCTEtTSVpFOgorCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKKwkJCWlmICgodmFsID0gcHJvZ19kbWFidWZfb3V0KGFzKSkpCisJCQkJcmV0dXJuIHZhbDsKKwkJCXJldHVybiBwdXRfdXNlcihhcy0+dXNib3V0LmRtYS5mcmFnc2l6ZSwgdXNlcl9hcmcpOworCQl9CisJCWlmICgodmFsID0gcHJvZ19kbWFidWZfaW4oYXMpKSkKKwkJCXJldHVybiB2YWw7CisJCXJldHVybiBwdXRfdXNlcihhcy0+dXNiaW4uZG1hLmZyYWdzaXplLCB1c2VyX2FyZyk7CisKKwljYXNlIFNORENUTF9EU1BfU0VURlJBR01FTlQ6CisJCWlmIChnZXRfdXNlcih2YWwsIHVzZXJfYXJnKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgeworCQkJYXMtPnVzYmluLmRtYS5vc3NmcmFnc2hpZnQgPSB2YWwgJiAweGZmZmY7CisJCQlhcy0+dXNiaW4uZG1hLm9zc21heGZyYWdzID0gKHZhbCA+PiAxNikgJiAweGZmZmY7CisJCQlpZiAoYXMtPnVzYmluLmRtYS5vc3NmcmFnc2hpZnQgPCA0KQorCQkJCWFzLT51c2Jpbi5kbWEub3NzZnJhZ3NoaWZ0ID0gNDsKKwkJCWlmIChhcy0+dXNiaW4uZG1hLm9zc2ZyYWdzaGlmdCA+IDE1KQorCQkJCWFzLT51c2Jpbi5kbWEub3NzZnJhZ3NoaWZ0ID0gMTU7CisJCQlpZiAoYXMtPnVzYmluLmRtYS5vc3NtYXhmcmFncyA8IDQpCisJCQkJYXMtPnVzYmluLmRtYS5vc3NtYXhmcmFncyA9IDQ7CisJCX0KKwkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7CisJCQlhcy0+dXNib3V0LmRtYS5vc3NmcmFnc2hpZnQgPSB2YWwgJiAweGZmZmY7CisJCQlhcy0+dXNib3V0LmRtYS5vc3NtYXhmcmFncyA9ICh2YWwgPj4gMTYpICYgMHhmZmZmOworCQkJaWYgKGFzLT51c2JvdXQuZG1hLm9zc2ZyYWdzaGlmdCA8IDQpCisJCQkJYXMtPnVzYm91dC5kbWEub3NzZnJhZ3NoaWZ0ID0gNDsKKwkJCWlmIChhcy0+dXNib3V0LmRtYS5vc3NmcmFnc2hpZnQgPiAxNSkKKwkJCQlhcy0+dXNib3V0LmRtYS5vc3NmcmFnc2hpZnQgPSAxNTsKKwkJCWlmIChhcy0+dXNib3V0LmRtYS5vc3NtYXhmcmFncyA8IDQpCisJCQkJYXMtPnVzYm91dC5kbWEub3NzbWF4ZnJhZ3MgPSA0OworCQl9CisJCXJldHVybiAwOworCisJY2FzZSBTTkRDVExfRFNQX1NVQkRJVklERToKKwkJaWYgKChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEICYmIGFzLT51c2Jpbi5kbWEuc3ViZGl2aXNpb24pIHx8CisJCSAgICAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUgJiYgYXMtPnVzYm91dC5kbWEuc3ViZGl2aXNpb24pKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChnZXRfdXNlcih2YWwsIHVzZXJfYXJnKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAodmFsICE9IDEgJiYgdmFsICE9IDIgJiYgdmFsICE9IDQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCisJCQlhcy0+dXNiaW4uZG1hLnN1YmRpdmlzaW9uID0gdmFsOworCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCisJCQlhcy0+dXNib3V0LmRtYS5zdWJkaXZpc2lvbiA9IHZhbDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFNPVU5EX1BDTV9SRUFEX1JBVEU6CisJCXJldHVybiBwdXRfdXNlcigoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgPyAKKwkJCQlhcy0+dXNiaW4uZG1hLnNyYXRlIDogYXMtPnVzYm91dC5kbWEuc3JhdGUsCisJCQkJdXNlcl9hcmcpOworCisJY2FzZSBTT1VORF9QQ01fUkVBRF9DSEFOTkVMUzoKKwkJdmFsMiA9IChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSA/IGFzLT51c2Jpbi5kbWEuZm9ybWF0IDogYXMtPnVzYm91dC5kbWEuZm9ybWF0OworCQlyZXR1cm4gcHV0X3VzZXIoQUZNVF9JU1NURVJFTyh2YWwyKSA/IDIgOiAxLCB1c2VyX2FyZyk7CisKKwljYXNlIFNPVU5EX1BDTV9SRUFEX0JJVFM6CisJCXZhbDIgPSAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgPyBhcy0+dXNiaW4uZG1hLmZvcm1hdCA6IGFzLT51c2JvdXQuZG1hLmZvcm1hdDsKKwkJcmV0dXJuIHB1dF91c2VyKEFGTVRfSVMxNkJJVCh2YWwyKSA/IDE2IDogOCwgdXNlcl9hcmcpOworCisJY2FzZSBTT1VORF9QQ01fV1JJVEVfRklMVEVSOgorCWNhc2UgU05EQ1RMX0RTUF9TRVRTWU5DUk86CisJY2FzZSBTT1VORF9QQ01fUkVBRF9GSUxURVI6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JhdWRpbzogdXNiX2F1ZGlvX2lvY3RsIC0gbm8gY29tbWFuZCBmb3VuZFxuIikpOworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKK3N0YXRpYyBpbnQgdXNiX2F1ZGlvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJdW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKwlzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphczsKKwlzdHJ1Y3QgdXNiX2F1ZGlvX3N0YXRlICpzOworCisJZm9yICg7OykgeworCQlkb3duKCZvcGVuX3NlbSk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocywgJmF1ZGlvZGV2cywgYXVkaW9kZXYpIHsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoYXMsICZzLT5hdWRpb2xpc3QsIGxpc3QpIHsKKwkJCQlpZiAoISgoYXMtPmRldl9hdWRpbyBeIG1pbm9yKSAmIH4weGYpKQorCQkJCQlnb3RvIGRldmljZV9mb3VuZDsKKwkJCX0KKwkJfQorCQl1cCgmb3Blbl9zZW0pOworCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldmljZV9mb3VuZDoKKwkJaWYgKCFzLT51c2JkZXYpIHsKKwkJCXVwKCZvcGVuX3NlbSk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQkvKiB3YWl0IGZvciBkZXZpY2UgdG8gYmVjb21lIGZyZWUgKi8KKwkJaWYgKCEoYXMtPm9wZW5fbW9kZSAmIGZpbGUtPmZfbW9kZSkpCisJCQlicmVhazsKKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQl1cCgmb3Blbl9zZW0pOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCWFkZF93YWl0X3F1ZXVlKCZvcGVuX3dhaXQsICZ3YWl0KTsKKwkJdXAoJm9wZW5fc2VtKTsKKwkJc2NoZWR1bGUoKTsKKwkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQlyZW1vdmVfd2FpdF9xdWV1ZSgmb3Blbl93YWl0LCAmd2FpdCk7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJfQorCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKQorCQlhcy0+dXNiaW4uZG1hLm9zc2ZyYWdzaGlmdCA9IGFzLT51c2Jpbi5kbWEub3NzbWF4ZnJhZ3MgPSBhcy0+dXNiaW4uZG1hLnN1YmRpdmlzaW9uID0gMDsKKwlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCisJCWFzLT51c2JvdXQuZG1hLm9zc2ZyYWdzaGlmdCA9IGFzLT51c2JvdXQuZG1hLm9zc21heGZyYWdzID0gYXMtPnVzYm91dC5kbWEuc3ViZGl2aXNpb24gPSAwOworCWlmIChzZXRfZm9ybWF0KGFzLCBmaWxlLT5mX21vZGUsICgobWlub3IgJiAweGYpID09IFNORF9ERVZfRFNQMTYpID8gQUZNVF9TMTZfTEUgOiBBRk1UX1U4IC8qIEFGTVRfVUxBVyAqLywgODAwMCkpIHsKKwkJdXAoJm9wZW5fc2VtKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWZpbGUtPnByaXZhdGVfZGF0YSA9IGFzOworCWFzLT5vcGVuX21vZGUgfD0gZmlsZS0+Zl9tb2RlICYgKEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSk7CisJcy0+Y291bnQrKzsKKwl1cCgmb3Blbl9zZW0pOworCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKK30KKworc3RhdGljIGludCB1c2JfYXVkaW9fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcyA9IChzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKnM7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKworCWxvY2tfa2VybmVsKCk7CisJcyA9IGFzLT5zdGF0ZTsKKwlkZXYgPSBzLT51c2JkZXY7CisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQorCQlkcmFpbl9vdXQoYXMsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKwlkb3duKCZvcGVuX3NlbSk7CisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7CisJCXVzYm91dF9zdG9wKGFzKTsKKwkJaWYgKGRldiAmJiBhcy0+dXNib3V0LmludGVyZmFjZSA+PSAwKQorCQkJdXNiX3NldF9pbnRlcmZhY2UoZGV2LCBhcy0+dXNib3V0LmludGVyZmFjZSwgMCk7CisJCWRtYWJ1Zl9yZWxlYXNlKCZhcy0+dXNib3V0LmRtYSk7CisJCXVzYm91dF9yZWxlYXNlKGFzKTsKKwl9CisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKKwkJdXNiaW5fc3RvcChhcyk7CisJCWlmIChkZXYgJiYgYXMtPnVzYmluLmludGVyZmFjZSA+PSAwKQorCQkJdXNiX3NldF9pbnRlcmZhY2UoZGV2LCBhcy0+dXNiaW4uaW50ZXJmYWNlLCAwKTsKKwkJZG1hYnVmX3JlbGVhc2UoJmFzLT51c2Jpbi5kbWEpOworCQl1c2Jpbl9yZWxlYXNlKGFzKTsKKwl9CisJYXMtPm9wZW5fbW9kZSAmPSAofmZpbGUtPmZfbW9kZSkgJiAoRk1PREVfUkVBRHxGTU9ERV9XUklURSk7CisJcmVsZWFzZShzKTsKKwl3YWtlX3VwKCZvcGVuX3dhaXQpOworCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIC8qY29uc3QqLyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYl9hdWRpb19mb3BzID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5sbHNlZWsgPQlub19sbHNlZWssCisJLnJlYWQgPQkJdXNiX2F1ZGlvX3JlYWQsCisJLndyaXRlID0JdXNiX2F1ZGlvX3dyaXRlLAorCS5wb2xsID0JCXVzYl9hdWRpb19wb2xsLAorCS5pb2N0bCA9CXVzYl9hdWRpb19pb2N0bCwKKwkubW1hcCA9CQl1c2JfYXVkaW9fbW1hcCwKKwkub3BlbiA9CQl1c2JfYXVkaW9fb3BlbiwKKwkucmVsZWFzZSA9CXVzYl9hdWRpb19yZWxlYXNlLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgdXNiX2F1ZGlvX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgdm9pZCB1c2JfYXVkaW9fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpOworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX2F1ZGlvX2lkcyBbXSA9IHsKKyAgICB7IC5tYXRjaF9mbGFncyA9IChVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTKSwKKyAgICAgIC5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sIC5iSW50ZXJmYWNlU3ViQ2xhc3MgPSAxfSwKKyAgICB7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCB1c2JfYXVkaW9faWRzKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9hdWRpb19kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImF1ZGlvIiwKKwkucHJvYmUgPQl1c2JfYXVkaW9fcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2JfYXVkaW9fZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQl1c2JfYXVkaW9faWRzLAorfTsKKworc3RhdGljIHZvaWQgKmZpbmRfZGVzY3JpcHRvcih2b2lkICpkZXNjc3RhcnQsIHVuc2lnbmVkIGludCBkZXNjbGVuLCB2b2lkICphZnRlciwgCisJCQkgICAgIHU4IGR0eXBlLCBpbnQgaWZhY2UsIGludCBhbHRzZXR0aW5nKQoreworCXU4ICpwLCAqZW5kLCAqbmV4dDsKKwlpbnQgaWZjID0gLTEsIGFzID0gLTE7CisKKwlwID0gZGVzY3N0YXJ0OworCWVuZCA9IHAgKyBkZXNjbGVuOworCWZvciAoOyBwIDwgZW5kOykgeworCQlpZiAocFswXSA8IDIpCisJCQlyZXR1cm4gTlVMTDsKKwkJbmV4dCA9IHAgKyBwWzBdOworCQlpZiAobmV4dCA+IGVuZCkKKwkJCXJldHVybiBOVUxMOworCQlpZiAocFsxXSA9PSBVU0JfRFRfSU5URVJGQUNFKSB7CisJCQkvKiBtaW5pbXVtIGxlbmd0aCBvZiBpbnRlcmZhY2UgZGVzY3JpcHRvciAqLworCQkJaWYgKHBbMF0gPCA5KQorCQkJCXJldHVybiBOVUxMOworCQkJaWZjID0gcFsyXTsKKwkJCWFzID0gcFszXTsKKwkJfQorCQlpZiAocFsxXSA9PSBkdHlwZSAmJiAoIWFmdGVyIHx8ICh2b2lkICopcCA+IGFmdGVyKSAmJgorCQkgICAgKGlmYWNlID09IC0xIHx8IGlmYWNlID09IGlmYykgJiYgKGFsdHNldHRpbmcgPT0gLTEgfHwgYWx0c2V0dGluZyA9PSBhcykpIHsKKwkJCXJldHVybiBwOworCQl9CisJCXAgPSBuZXh0OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgKmZpbmRfY3NpbnRlcmZhY2VfZGVzY3JpcHRvcih2b2lkICpkZXNjc3RhcnQsIHVuc2lnbmVkIGludCBkZXNjbGVuLCB2b2lkICphZnRlciwgdTggZHN1YnR5cGUsIGludCBpZmFjZSwgaW50IGFsdHNldHRpbmcpCit7CisJdW5zaWduZWQgY2hhciAqcDsKKworCXAgPSBmaW5kX2Rlc2NyaXB0b3IoZGVzY3N0YXJ0LCBkZXNjbGVuLCBhZnRlciwgVVNCX0RUX0NTX0lOVEVSRkFDRSwgaWZhY2UsIGFsdHNldHRpbmcpOworCXdoaWxlIChwKSB7CisJCWlmIChwWzBdID49IDMgJiYgcFsyXSA9PSBkc3VidHlwZSkKKwkJCXJldHVybiBwOworCQlwID0gZmluZF9kZXNjcmlwdG9yKGRlc2NzdGFydCwgZGVzY2xlbiwgcCwgVVNCX0RUX0NTX0lOVEVSRkFDRSwgaWZhY2UsIGFsdHNldHRpbmcpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgKmZpbmRfYXVkaW9jb250cm9sX3VuaXQodm9pZCAqZGVzY3N0YXJ0LCB1bnNpZ25lZCBpbnQgZGVzY2xlbiwgdm9pZCAqYWZ0ZXIsIHU4IHVuaXQsIGludCBpZmFjZSkKK3sKKwl1bnNpZ25lZCBjaGFyICpwOworCisJcCA9IGZpbmRfZGVzY3JpcHRvcihkZXNjc3RhcnQsIGRlc2NsZW4sIGFmdGVyLCBVU0JfRFRfQ1NfSU5URVJGQUNFLCBpZmFjZSwgLTEpOworCXdoaWxlIChwKSB7CisJCWlmIChwWzBdID49IDQgJiYgcFsyXSA+PSBJTlBVVF9URVJNSU5BTCAmJiBwWzJdIDw9IEVYVEVOU0lPTl9VTklUICYmIHBbM10gPT0gdW5pdCkKKwkJCXJldHVybiBwOworCQlwID0gZmluZF9kZXNjcmlwdG9yKGRlc2NzdGFydCwgZGVzY2xlbiwgcCwgVVNCX0RUX0NTX0lOVEVSRkFDRSwgaWZhY2UsIC0xKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHVzYl9hdWRpb19wYXJzZXN0cmVhbWluZyhzdHJ1Y3QgdXNiX2F1ZGlvX3N0YXRlICpzLCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBidWZsZW4sIGludCBhc2lmaW4sIGludCBhc2lmb3V0KQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBzLT51c2JkZXY7CisJc3RydWN0IHVzYl9hdWRpb2RldiAqYXM7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0czsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2U7CisJc3RydWN0IGF1ZGlvZm9ybWF0ICpmcDsKKwl1bnNpZ25lZCBjaGFyICpmbXQsICpjc2VwOworCXVuc2lnbmVkIGludCBpLCBqLCBrLCBmb3JtYXQsIGlkeDsKKworCWlmICghKGFzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9hdWRpb2RldiksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuOworCW1lbXNldChhcywgMCwgc2l6ZW9mKHN0cnVjdCB1c2JfYXVkaW9kZXYpKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhcy0+dXNiaW4uZG1hLndhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFzLT51c2JvdXQuZG1hLndhaXQpOworCXNwaW5fbG9ja19pbml0KCZhcy0+bG9jayk7CisJYXMtPnVzYmluLmR1cmJbMF0udXJiID0gdXNiX2FsbG9jX3VyYiAoREVTQ0ZSQU1FUywgR0ZQX0tFUk5FTCk7CisJYXMtPnVzYmluLmR1cmJbMV0udXJiID0gdXNiX2FsbG9jX3VyYiAoREVTQ0ZSQU1FUywgR0ZQX0tFUk5FTCk7CisJYXMtPnVzYmluLnN1cmJbMF0udXJiID0gdXNiX2FsbG9jX3VyYiAoU1lOQ0ZSQU1FUywgR0ZQX0tFUk5FTCk7CisJYXMtPnVzYmluLnN1cmJbMV0udXJiID0gdXNiX2FsbG9jX3VyYiAoU1lOQ0ZSQU1FUywgR0ZQX0tFUk5FTCk7CisJYXMtPnVzYm91dC5kdXJiWzBdLnVyYiA9IHVzYl9hbGxvY191cmIgKERFU0NGUkFNRVMsIEdGUF9LRVJORUwpOworCWFzLT51c2JvdXQuZHVyYlsxXS51cmIgPSB1c2JfYWxsb2NfdXJiIChERVNDRlJBTUVTLCBHRlBfS0VSTkVMKTsKKwlhcy0+dXNib3V0LnN1cmJbMF0udXJiID0gdXNiX2FsbG9jX3VyYiAoU1lOQ0ZSQU1FUywgR0ZQX0tFUk5FTCk7CisJYXMtPnVzYm91dC5zdXJiWzFdLnVyYiA9IHVzYl9hbGxvY191cmIgKFNZTkNGUkFNRVMsIEdGUF9LRVJORUwpOworCWlmICgoIWFzLT51c2Jpbi5kdXJiWzBdLnVyYikgfHwKKwkgICAgKCFhcy0+dXNiaW4uZHVyYlsxXS51cmIpIHx8CisJICAgICghYXMtPnVzYmluLnN1cmJbMF0udXJiKSB8fAorCSAgICAoIWFzLT51c2Jpbi5zdXJiWzFdLnVyYikgfHwKKwkgICAgKCFhcy0+dXNib3V0LmR1cmJbMF0udXJiKSB8fAorCSAgICAoIWFzLT51c2JvdXQuZHVyYlsxXS51cmIpIHx8CisJICAgICghYXMtPnVzYm91dC5zdXJiWzBdLnVyYikgfHwKKwkgICAgKCFhcy0+dXNib3V0LnN1cmJbMV0udXJiKSkgeworCQl1c2JfZnJlZV91cmIoYXMtPnVzYmluLmR1cmJbMF0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2Jpbi5kdXJiWzFdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNiaW4uc3VyYlswXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYmluLnN1cmJbMV0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2JvdXQuZHVyYlswXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYm91dC5kdXJiWzFdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNib3V0LnN1cmJbMF0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2JvdXQuc3VyYlsxXS51cmIpOworCQlrZnJlZShhcyk7CisJCXJldHVybjsKKwl9CisJYXMtPnN0YXRlID0gczsKKwlhcy0+dXNiaW4uaW50ZXJmYWNlID0gYXNpZmluOworCWFzLT51c2JvdXQuaW50ZXJmYWNlID0gYXNpZm91dDsKKwkvKiBzZWFyY2ggZm9yIGlucHV0IGZvcm1hdHMgKi8KKwlpZiAoYXNpZmluID49IDApIHsKKwkJYXMtPnVzYmluLmZsYWdzID0gRkxHX0NPTk5FQ1RFRDsKKwkJaWZhY2UgPSB1c2JfaWZudW1fdG9faWYoZGV2LCBhc2lmaW4pOworCQlmb3IgKGlkeCA9IDA7IGlkeCA8IGlmYWNlLT5udW1fYWx0c2V0dGluZzsgaWR4KyspIHsKKwkJCWFsdHMgPSAmaWZhY2UtPmFsdHNldHRpbmdbaWR4XTsKKwkJCWkgPSBhbHRzLT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nOworCQkJaWYgKGFsdHMtPmRlc2MuYkludGVyZmFjZUNsYXNzICE9IFVTQl9DTEFTU19BVURJTyB8fCBhbHRzLT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyAhPSAyKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGFsdHMtPmRlc2MuYk51bUVuZHBvaW50cyA8IDEpIHsKKwkJCQlpZiAoaSAhPSAwKSB7ICAvKiBhbHRzZXR0aW5nIDAgaGFzIG5vIGVuZHBvaW50cyAoU2VjdGlvbiBCLjMuNC4xKSAqLworCQkJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXUgZG9lcyBub3QgaGF2ZSBhbiBlbmRwb2ludFxuIiwgCisJCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZmluLCBpKTsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoKGFsdHMtPmVuZHBvaW50WzBdLmRlc2MuYm1BdHRyaWJ1dGVzICYgMHgwMykgIT0gMHgwMSB8fAorCQkJICAgICEoYWx0cy0+ZW5kcG9pbnRbMF0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXUgZmlyc3QgZW5kcG9pbnQgbm90IGlzb2Nocm9ub3VzIGluXG4iLCAKKwkJCQkgICAgICAgZGV2LT5kZXZudW0sIGFzaWZpbiwgaSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlmbXQgPSBmaW5kX2NzaW50ZXJmYWNlX2Rlc2NyaXB0b3IoYnVmZmVyLCBidWZsZW4sIE5VTEwsIEFTX0dFTkVSQUwsIGFzaWZpbiwgaSk7CisJCQlpZiAoIWZtdCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSBGT1JNQVRfVFlQRSBkZXNjcmlwdG9yIG5vdCBmb3VuZFxuIiwgCisJCQkJICAgICAgIGRldi0+ZGV2bnVtLCBhc2lmaW4sIGkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGZtdFswXSA8IDcgfHwgZm10WzZdICE9IDAgfHwgKGZtdFs1XSAhPSAxICYmIGZtdFs1XSAhPSAyKSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSBmb3JtYXQgbm90IHN1cHBvcnRlZFxuIiwgCisJCQkJICAgICAgIGRldi0+ZGV2bnVtLCBhc2lmaW4sIGkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZm9ybWF0ID0gKGZtdFs1XSA9PSAyKSA/IChBRk1UX1UxNl9MRSB8IEFGTVRfVTgpIDogKEFGTVRfUzE2X0xFIHwgQUZNVF9TOCk7CisJCQlmbXQgPSBmaW5kX2NzaW50ZXJmYWNlX2Rlc2NyaXB0b3IoYnVmZmVyLCBidWZsZW4sIE5VTEwsIEZPUk1BVF9UWVBFLCBhc2lmaW4sIGkpOworCQkJaWYgKCFmbXQpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXUgRk9STUFUX1RZUEUgZGVzY3JpcHRvciBub3QgZm91bmRcbiIsIAorCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZmluLCBpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChmbXRbMF0gPCA4KzMqKGZtdFs3XSA/IGZtdFs3XSA6IDIpIHx8IGZtdFszXSAhPSAxKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZGV2aWNlICV1IGludGVyZmFjZSAldSBhbHRzZXR0aW5nICV1IEZPUk1BVF9UWVBFIGRlc2NyaXB0b3Igbm90IHN1cHBvcnRlZFxuIiwgCisJCQkJICAgICAgIGRldi0+ZGV2bnVtLCBhc2lmaW4sIGkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGZtdFs0XSA8IDEgfHwgZm10WzRdID4gMiB8fCBmbXRbNV0gPCAxIHx8IGZtdFs1XSA+IDIpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXUgdW5zdXBwb3J0ZWQgY2hhbm5lbHMgJXUgZnJhbWVzaXplICV1XG4iLCAKKwkJCQkgICAgICAgZGV2LT5kZXZudW0sIGFzaWZpbiwgaSwgZm10WzRdLCBmbXRbNV0pOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJY3NlcCA9IGZpbmRfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZmxlbiwgTlVMTCwgVVNCX0RUX0NTX0VORFBPSU5ULCBhc2lmaW4sIGkpOworCQkJaWYgKCFjc2VwIHx8IGNzZXBbMF0gPCA3IHx8IGNzZXBbMl0gIT0gRVBfR0VORVJBTCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSBubyBvciBpbnZhbGlkIGNsYXNzIHNwZWNpZmljIGVuZHBvaW50IGRlc2NyaXB0b3JcbiIsIAorCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZmluLCBpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChhcy0+bnVtZm10aW4gPj0gTUFYRk9STUFUUykKKwkJCQljb250aW51ZTsKKwkJCWZwID0gJmFzLT5mbXRpblthcy0+bnVtZm10aW4rK107CisJCQlpZiAoZm10WzVdID09IDIpCisJCQkJZm9ybWF0ICY9IChBRk1UX1UxNl9MRSB8IEFGTVRfUzE2X0xFKTsKKwkJCWVsc2UKKwkJCQlmb3JtYXQgJj0gKEFGTVRfVTggfCBBRk1UX1M4KTsKKwkJCWlmIChmbXRbNF0gPT0gMikKKwkJCQlmb3JtYXQgfD0gQUZNVF9TVEVSRU87CisJCQlmcC0+Zm9ybWF0ID0gZm9ybWF0OworCQkJZnAtPmFsdHNldHRpbmcgPSBpOworCQkJZnAtPnNyYXRlbG8gPSBmcC0+c3JhdGVoaSA9IGZtdFs4XSB8IChmbXRbOV0gPDwgOCkgfCAoZm10WzEwXSA8PCAxNik7CisJCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogdmFsaWQgaW5wdXQgc2FtcGxlIHJhdGUgJXVcbiIsIGZwLT5zcmF0ZWxvKTsKKwkJCWZvciAoaiA9IGZtdFs3XSA/IChmbXRbN10tMSkgOiAxOyBqID4gMDsgai0tKSB7CisJCQkJayA9IGZtdFs4KzMqal0gfCAoZm10WzkrMypqXSA8PCA4KSB8IChmbXRbMTArMypqXSA8PCAxNik7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiYXVkaW86IHZhbGlkIGlucHV0IHNhbXBsZSByYXRlICV1XG4iLCBrKTsKKwkJCQlpZiAoayA+IGZwLT5zcmF0ZWhpKQorCQkJCQlmcC0+c3JhdGVoaSA9IGs7CisJCQkJaWYgKGsgPCBmcC0+c3JhdGVsbykKKwkJCQkJZnAtPnNyYXRlbG8gPSBrOworCQkJfQorCQkJZnAtPmF0dHJpYnV0ZXMgPSBjc2VwWzNdOworCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldTogZm9ybWF0IDB4JTA4eCBzcmF0ZWxvICV1IHNyYXRlaGkgJXUgYXR0cmlidXRlcyAweCUwMnhcbiIsIAorCQkJICAgICAgIGRldi0+ZGV2bnVtLCBhc2lmaW4sIGksIGZwLT5mb3JtYXQsIGZwLT5zcmF0ZWxvLCBmcC0+c3JhdGVoaSwgZnAtPmF0dHJpYnV0ZXMpOworCQl9CisJfQorCS8qIHNlYXJjaCBmb3Igb3V0cHV0IGZvcm1hdHMgKi8KKwlpZiAoYXNpZm91dCA+PSAwKSB7CisJCWFzLT51c2JvdXQuZmxhZ3MgPSBGTEdfQ09OTkVDVEVEOworCQlpZmFjZSA9IHVzYl9pZm51bV90b19pZihkZXYsIGFzaWZvdXQpOworCQlmb3IgKGlkeCA9IDA7IGlkeCA8IGlmYWNlLT5udW1fYWx0c2V0dGluZzsgaWR4KyspIHsKKwkJCWFsdHMgPSAmaWZhY2UtPmFsdHNldHRpbmdbaWR4XTsKKwkJCWkgPSBhbHRzLT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nOworCQkJaWYgKGFsdHMtPmRlc2MuYkludGVyZmFjZUNsYXNzICE9IFVTQl9DTEFTU19BVURJTyB8fCBhbHRzLT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyAhPSAyKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGFsdHMtPmRlc2MuYk51bUVuZHBvaW50cyA8IDEpIHsKKwkJCQkvKiBhbHRzZXR0aW5nIDAgc2hvdWxkIG5ldmVyIGhhdmUgaXNvIEVQcyAqLworCQkJCWlmIChpICE9IDApCisJCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZGV2aWNlICV1IGludGVyZmFjZSAldSBhbHRzZXR0aW5nICV1IGRvZXMgbm90IGhhdmUgYW4gZW5kcG9pbnRcbiIsIAorCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZm91dCwgaSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoKGFsdHMtPmVuZHBvaW50WzBdLmRlc2MuYm1BdHRyaWJ1dGVzICYgMHgwMykgIT0gMHgwMSB8fAorCQkJICAgIChhbHRzLT5lbmRwb2ludFswXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSBmaXJzdCBlbmRwb2ludCBub3QgaXNvY2hyb25vdXMgb3V0XG4iLCAKKwkJCQkgICAgICAgZGV2LT5kZXZudW0sIGFzaWZvdXQsIGkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJLyogU2VlIFVTQiBhdWRpbyBmb3JtYXRzIG1hbnVhbCwgc2VjdGlvbiAyICovCisJCQlmbXQgPSBmaW5kX2NzaW50ZXJmYWNlX2Rlc2NyaXB0b3IoYnVmZmVyLCBidWZsZW4sIE5VTEwsIEFTX0dFTkVSQUwsIGFzaWZvdXQsIGkpOworCQkJaWYgKCFmbXQpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXUgRk9STUFUX1RZUEUgZGVzY3JpcHRvciBub3QgZm91bmRcbiIsIAorCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZm91dCwgaSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoZm10WzBdIDwgNyB8fCBmbXRbNl0gIT0gMCB8fCAoZm10WzVdICE9IDEgJiYgZm10WzVdICE9IDIpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZGV2aWNlICV1IGludGVyZmFjZSAldSBhbHRzZXR0aW5nICV1IGZvcm1hdCBub3Qgc3VwcG9ydGVkXG4iLCAKKwkJCQkgICAgICAgZGV2LT5kZXZudW0sIGFzaWZvdXQsIGkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZm9ybWF0ID0gKGZtdFs1XSA9PSAyKSA/IChBRk1UX1UxNl9MRSB8IEFGTVRfVTgpIDogKEFGTVRfUzE2X0xFIHwgQUZNVF9TOCk7CisJCQkvKiBEYWxsYXMgRFM0MjAxIHdvcmthcm91bmQgKi8KKwkJCWlmIChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IDB4MDRmYSAmJiAKKwkJCSAgICBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSAweDQyMDEpCisJCQkJZm9ybWF0ID0gKEFGTVRfUzE2X0xFIHwgQUZNVF9TOCk7CisJCQlmbXQgPSBmaW5kX2NzaW50ZXJmYWNlX2Rlc2NyaXB0b3IoYnVmZmVyLCBidWZsZW4sIE5VTEwsIEZPUk1BVF9UWVBFLCBhc2lmb3V0LCBpKTsKKwkJCWlmICghZm10KSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZGV2aWNlICV1IGludGVyZmFjZSAldSBhbHRzZXR0aW5nICV1IEZPUk1BVF9UWVBFIGRlc2NyaXB0b3Igbm90IGZvdW5kXG4iLCAKKwkJCQkgICAgICAgZGV2LT5kZXZudW0sIGFzaWZvdXQsIGkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGZtdFswXSA8IDgrMyooZm10WzddID8gZm10WzddIDogMikgfHwgZm10WzNdICE9IDEpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXUgRk9STUFUX1RZUEUgZGVzY3JpcHRvciBub3Qgc3VwcG9ydGVkXG4iLCAKKwkJCQkgICAgICAgZGV2LT5kZXZudW0sIGFzaWZvdXQsIGkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGZtdFs0XSA8IDEgfHwgZm10WzRdID4gMiB8fCBmbXRbNV0gPCAxIHx8IGZtdFs1XSA+IDIpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXUgdW5zdXBwb3J0ZWQgY2hhbm5lbHMgJXUgZnJhbWVzaXplICV1XG4iLCAKKwkJCQkgICAgICAgZGV2LT5kZXZudW0sIGFzaWZvdXQsIGksIGZtdFs0XSwgZm10WzVdKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWNzZXAgPSBmaW5kX2Rlc2NyaXB0b3IoYnVmZmVyLCBidWZsZW4sIE5VTEwsIFVTQl9EVF9DU19FTkRQT0lOVCwgYXNpZm91dCwgaSk7CisJCQlpZiAoIWNzZXAgfHwgY3NlcFswXSA8IDcgfHwgY3NlcFsyXSAhPSBFUF9HRU5FUkFMKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZGV2aWNlICV1IGludGVyZmFjZSAldSBhbHRzZXR0aW5nICV1IG5vIG9yIGludmFsaWQgY2xhc3Mgc3BlY2lmaWMgZW5kcG9pbnQgZGVzY3JpcHRvclxuIiwgCisJCQkJICAgICAgIGRldi0+ZGV2bnVtLCBhc2lmb3V0LCBpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChhcy0+bnVtZm10b3V0ID49IE1BWEZPUk1BVFMpCisJCQkJY29udGludWU7CisJCQlmcCA9ICZhcy0+Zm10b3V0W2FzLT5udW1mbXRvdXQrK107CisJCQlpZiAoZm10WzVdID09IDIpCisJCQkJZm9ybWF0ICY9IChBRk1UX1UxNl9MRSB8IEFGTVRfUzE2X0xFKTsKKwkJCWVsc2UKKwkJCQlmb3JtYXQgJj0gKEFGTVRfVTggfCBBRk1UX1M4KTsKKwkJCWlmIChmbXRbNF0gPT0gMikKKwkJCQlmb3JtYXQgfD0gQUZNVF9TVEVSRU87CisJCQlmcC0+Zm9ybWF0ID0gZm9ybWF0OworCQkJZnAtPmFsdHNldHRpbmcgPSBpOworCQkJZnAtPnNyYXRlbG8gPSBmcC0+c3JhdGVoaSA9IGZtdFs4XSB8IChmbXRbOV0gPDwgOCkgfCAoZm10WzEwXSA8PCAxNik7CisJCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogdmFsaWQgb3V0cHV0IHNhbXBsZSByYXRlICV1XG4iLCBmcC0+c3JhdGVsbyk7CisJCQlmb3IgKGogPSBmbXRbN10gPyAoZm10WzddLTEpIDogMTsgaiA+IDA7IGotLSkgeworCQkJCWsgPSBmbXRbOCszKmpdIHwgKGZtdFs5KzMqal0gPDwgOCkgfCAoZm10WzEwKzMqal0gPDwgMTYpOworCQkJCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiB2YWxpZCBvdXRwdXQgc2FtcGxlIHJhdGUgJXVcbiIsIGspOworCQkJCWlmIChrID4gZnAtPnNyYXRlaGkpCisJCQkJCWZwLT5zcmF0ZWhpID0gazsKKwkJCQlpZiAoayA8IGZwLT5zcmF0ZWxvKQorCQkJCQlmcC0+c3JhdGVsbyA9IGs7CisJCQl9CisJCQlmcC0+YXR0cmlidXRlcyA9IGNzZXBbM107CisJCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogZGV2aWNlICV1IGludGVyZmFjZSAldSBhbHRzZXR0aW5nICV1OiBmb3JtYXQgMHglMDh4IHNyYXRlbG8gJXUgc3JhdGVoaSAldSBhdHRyaWJ1dGVzIDB4JTAyeFxuIiwgCisJCQkgICAgICAgZGV2LT5kZXZudW0sIGFzaWZvdXQsIGksIGZwLT5mb3JtYXQsIGZwLT5zcmF0ZWxvLCBmcC0+c3JhdGVoaSwgZnAtPmF0dHJpYnV0ZXMpOworCQl9CisJfQorCWlmIChhcy0+bnVtZm10aW4gPT0gMCAmJiBhcy0+bnVtZm10b3V0ID09IDApIHsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2Jpbi5kdXJiWzBdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNiaW4uZHVyYlsxXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYmluLnN1cmJbMF0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2Jpbi5zdXJiWzFdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNib3V0LmR1cmJbMF0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2JvdXQuZHVyYlsxXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYm91dC5zdXJiWzBdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNib3V0LnN1cmJbMV0udXJiKTsKKwkJa2ZyZWUoYXMpOworCQlyZXR1cm47CisJfQorCWlmICgoYXMtPmRldl9hdWRpbyA9IHJlZ2lzdGVyX3NvdW5kX2RzcCgmdXNiX2F1ZGlvX2ZvcHMsIC0xKSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGNhbm5vdCByZWdpc3RlciBkc3BcbiIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYmluLmR1cmJbMF0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2Jpbi5kdXJiWzFdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNiaW4uc3VyYlswXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYmluLnN1cmJbMV0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2JvdXQuZHVyYlswXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYm91dC5kdXJiWzFdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNib3V0LnN1cmJbMF0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2JvdXQuc3VyYlsxXS51cmIpOworCQlrZnJlZShhcyk7CisJCXJldHVybjsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyAidXNiYXVkaW86IHJlZ2lzdGVyZWQgZHNwIDE0LCVkXG4iLCBhcy0+ZGV2X2F1ZGlvKTsKKwkvKiBldmVyeXRoaW5nIHN1Y2Nlc3NmdWwgKi8KKwlsaXN0X2FkZF90YWlsKCZhcy0+bGlzdCwgJnMtPmF1ZGlvbGlzdCk7Cit9CisKK3N0cnVjdCBjb25zbWl4c3RhdGUgeworCXN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKnM7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGludCBidWZsZW47CisJdW5zaWduZWQgaW50IGN0cmxpZjsKKwlzdHJ1Y3QgbWl4ZXJjaGFubmVsIG1peGNoW1NPVU5EX01JWEVSX05SREVWSUNFU107CisJdW5zaWduZWQgaW50IG5ybWl4Y2g7CisJdW5zaWduZWQgaW50IG1peGNobWFzazsKKwl1bnNpZ25lZCBsb25nIHVuaXRiaXRtYXBbMzIvc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXTsKKwkvKiByZXR1cm4gdmFsdWVzICovCisJdW5zaWduZWQgaW50IG5yY2hhbm5lbHM7CisJdW5zaWduZWQgaW50IHRlcm10eXBlOworCXVuc2lnbmVkIGludCBjaGNvbmZpZzsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWl4ZXJjaGFubmVsICpnZXRtaXhjaGFubmVsKHN0cnVjdCBjb25zbWl4c3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBpbnQgbnIpCit7CisJc3RydWN0IG1peGVyY2hhbm5lbCAqYzsKKworCWlmIChuciA+PSBTT1VORF9NSVhFUl9OUkRFVklDRVMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogaW52YWxpZCBPU1MgbWl4ZXIgY2hhbm5lbCAldVxuIiwgbnIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaWYgKCEoc3RhdGUtPm1peGNobWFzayAmICgxIDw8IG5yKSkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiYXVkaW86IE9TUyBtaXhlciBjaGFubmVsICV1IGFscmVhZHkgaW4gdXNlXG4iLCBucik7CisJCXJldHVybiBOVUxMOworCX0KKwljID0gJnN0YXRlLT5taXhjaFtzdGF0ZS0+bnJtaXhjaCsrXTsKKwljLT5vc3NjaGFubmVsID0gbnI7CisJc3RhdGUtPm1peGNobWFzayAmPSB+KDEgPDwgbnIpOworCXJldHVybiBjOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGdldHZvbGNoYW5uZWwoc3RydWN0IGNvbnNtaXhzdGF0ZSAqc3RhdGUpCit7CisJdW5zaWduZWQgaW50IHU7CisKKwlpZiAoKHN0YXRlLT50ZXJtdHlwZSAmIDB4ZmYwMCkgPT0gMHgwMDAwICYmIChzdGF0ZS0+bWl4Y2htYXNrICYgU09VTkRfTUFTS19WT0xVTUUpKQorCQlyZXR1cm4gU09VTkRfTUlYRVJfVk9MVU1FOworCWlmICgoc3RhdGUtPnRlcm10eXBlICYgMHhmZjAwKSA9PSAweDAxMDApIHsKKwkJaWYgKHN0YXRlLT5taXhjaG1hc2sgJiBTT1VORF9NQVNLX1BDTSkKKwkJCXJldHVybiBTT1VORF9NSVhFUl9QQ007CisJCWlmIChzdGF0ZS0+bWl4Y2htYXNrICYgU09VTkRfTUFTS19BTFRQQ00pCisJCQlyZXR1cm4gU09VTkRfTUlYRVJfQUxUUENNOworCX0KKwlpZiAoKHN0YXRlLT50ZXJtdHlwZSAmIDB4ZmYwMCkgPT0gMHgwMjAwICYmIChzdGF0ZS0+bWl4Y2htYXNrICYgU09VTkRfTUFTS19NSUMpKQorCQlyZXR1cm4gU09VTkRfTUlYRVJfTUlDOworCWlmICgoc3RhdGUtPnRlcm10eXBlICYgMHhmZjAwKSA9PSAweDAzMDAgJiYgKHN0YXRlLT5taXhjaG1hc2sgJiBTT1VORF9NQVNLX1NQRUFLRVIpKQorCQlyZXR1cm4gU09VTkRfTUlYRVJfU1BFQUtFUjsKKwlpZiAoKHN0YXRlLT50ZXJtdHlwZSAmIDB4ZmYwMCkgPT0gMHgwNTAwKSB7CisJCWlmIChzdGF0ZS0+bWl4Y2htYXNrICYgU09VTkRfTUFTS19QSE9ORUlOKQorCQkJcmV0dXJuIFNPVU5EX01JWEVSX1BIT05FSU47CisJCWlmIChzdGF0ZS0+bWl4Y2htYXNrICYgU09VTkRfTUFTS19QSE9ORU9VVCkKKwkJCXJldHVybiBTT1VORF9NSVhFUl9QSE9ORU9VVDsKKwl9CisJaWYgKHN0YXRlLT50ZXJtdHlwZSA+PSAweDcxMCAmJiBzdGF0ZS0+dGVybXR5cGUgPD0gMHg3MTEgJiYgKHN0YXRlLT5taXhjaG1hc2sgJiBTT1VORF9NQVNLX1JBRElPKSkKKwkJcmV0dXJuIFNPVU5EX01JWEVSX1JBRElPOworCWlmIChzdGF0ZS0+dGVybXR5cGUgPj0gMHg3MDkgJiYgc3RhdGUtPnRlcm10eXBlIDw9IDB4NzBmICYmIChzdGF0ZS0+bWl4Y2htYXNrICYgU09VTkRfTUFTS19WSURFTykpCisJCXJldHVybiBTT1VORF9NSVhFUl9WSURFTzsKKwl1ID0gZmZzKHN0YXRlLT5taXhjaG1hc2sgJiAoU09VTkRfTUFTS19MSU5FIHwgU09VTkRfTUFTS19DRCB8IFNPVU5EX01BU0tfTElORTEgfCBTT1VORF9NQVNLX0xJTkUyIHwgU09VTkRfTUFTS19MSU5FMyB8CisJCQkJICAgIFNPVU5EX01BU0tfRElHSVRBTDEgfCBTT1VORF9NQVNLX0RJR0lUQUwyIHwgU09VTkRfTUFTS19ESUdJVEFMMykpOworCXJldHVybiB1LTE7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBtaXhjaChzdHJ1Y3QgY29uc21peHN0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gc3RhdGUtPnMtPnVzYmRldjsKKwlzdHJ1Y3QgbWl4ZXJjaGFubmVsICpjaDsKKwl1bnNpZ25lZCBjaGFyICpidWY7CisJX19zMTYgdjE7CisJdW5zaWduZWQgaW50IHYyLCB2MzsKKworCWlmICghc3RhdGUtPm5ybWl4Y2ggfHwgc3RhdGUtPm5ybWl4Y2ggPiBTT1VORF9NSVhFUl9OUkRFVklDRVMpCisJCXJldHVybjsKKwlidWYgPSBrbWFsbG9jKHNpemVvZigqYnVmKSAqIDIsIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCXByaW50ayhLRVJOX0VSUiAicHJlcG1peGNoOiBvdXQgb2YgbWVtb3J5XG4iKSA7CisJCXJldHVybjsKKwl9CisKKwljaCA9ICZzdGF0ZS0+bWl4Y2hbc3RhdGUtPm5ybWl4Y2gtMV07CisJc3dpdGNoIChjaC0+c2VsZWN0b3IpIHsKKwljYXNlIDA6ICAvKiBtaXhlciB1bml0IHJlcXVlc3QgKi8KKwkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBHRVRfTUlOLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOLAorCQkJCSAgICAoY2gtPmNobnVtIDw8IDgpIHwgMSwgc3RhdGUtPmN0cmxpZiB8IChjaC0+dW5pdGlkIDw8IDgpLCBidWYsIDIsIDEwMDApIDwgMCkKKwkJCWdvdG8gZXJyOworCQljaC0+bWludmFsID0gYnVmWzBdIHwgKGJ1ZlsxXSA8PCA4KTsKKwkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBHRVRfTUFYLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOLAorCQkJCSAgICAoY2gtPmNobnVtIDw8IDgpIHwgMSwgc3RhdGUtPmN0cmxpZiB8IChjaC0+dW5pdGlkIDw8IDgpLCBidWYsIDIsIDEwMDApIDwgMCkKKwkJCWdvdG8gZXJyOworCQljaC0+bWF4dmFsID0gYnVmWzBdIHwgKGJ1ZlsxXSA8PCA4KTsKKwkJdjIgPSBjaC0+bWF4dmFsIC0gY2gtPm1pbnZhbDsKKwkJaWYgKCF2MikKKwkJCXYyID0gMTsKKwkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBHRVRfQ1VSLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOLAorCQkJCSAgICAoY2gtPmNobnVtIDw8IDgpIHwgMSwgc3RhdGUtPmN0cmxpZiB8IChjaC0+dW5pdGlkIDw8IDgpLCBidWYsIDIsIDEwMDApIDwgMCkKKwkJCWdvdG8gZXJyOworCQl2MSA9IGJ1ZlswXSB8IChidWZbMV0gPDwgOCk7CisJCXYzID0gdjEgLSBjaC0+bWludmFsOworCQl2MyA9IDEwMCAqIHYzIC8gdjI7CisJCWlmICh2MyA+IDEwMCkKKwkJCXYzID0gMTAwOworCQljaC0+dmFsdWUgPSB2MzsKKwkJaWYgKGNoLT5mbGFncyAmIChNSVhGTEdfU1RFUkVPSU4gfCBNSVhGTEdfU1RFUkVPT1VUKSkgeworCQkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBHRVRfQ1VSLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOLAorCQkJCQkgICAgKChjaC0+Y2hudW0gKyAhIShjaC0+ZmxhZ3MgJiBNSVhGTEdfU1RFUkVPSU4pKSA8PCA4KSB8ICgxICsgISEoY2gtPmZsYWdzICYgTUlYRkxHX1NURVJFT09VVCkpLAorCQkJCQkgICAgc3RhdGUtPmN0cmxpZiB8IChjaC0+dW5pdGlkIDw8IDgpLCBidWYsIDIsIDEwMDApIDwgMCkKKwkJCWdvdG8gZXJyOworCQkJdjEgPSBidWZbMF0gfCAoYnVmWzFdIDw8IDgpOworCQkJdjMgPSB2MSAtIGNoLT5taW52YWw7CisJCQl2MyA9IDEwMCAqIHYzIC8gdjI7CisJCQlpZiAodjMgPiAxMDApCisJCQkJdjMgPSAxMDA7CisJCX0KKwkJY2gtPnZhbHVlIHw9IHYzIDw8IDg7CisJCWJyZWFrOworCisJCS8qIHZhcmlvdXMgZmVhdHVyZSB1bml0IGNvbnRyb2xzICovCisJY2FzZSBWT0xVTUVfQ09OVFJPTDoKKwkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBHRVRfTUlOLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOLAorCQkJCSAgICAoY2gtPnNlbGVjdG9yIDw8IDgpIHwgY2gtPmNobnVtLCBzdGF0ZS0+Y3RybGlmIHwgKGNoLT51bml0aWQgPDwgOCksIGJ1ZiwgMiwgMTAwMCkgPCAwKQorCQkJZ290byBlcnI7CisJCWNoLT5taW52YWwgPSBidWZbMF0gfCAoYnVmWzFdIDw8IDgpOworCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9NQVgsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCisJCQkJICAgIChjaC0+c2VsZWN0b3IgPDwgOCkgfCBjaC0+Y2hudW0sIHN0YXRlLT5jdHJsaWYgfCAoY2gtPnVuaXRpZCA8PCA4KSwgYnVmLCAyLCAxMDAwKSA8IDApCisJCQlnb3RvIGVycjsKKwkJY2gtPm1heHZhbCA9IGJ1ZlswXSB8IChidWZbMV0gPDwgOCk7CisJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX0NVUiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKKwkJCQkgICAgKGNoLT5zZWxlY3RvciA8PCA4KSB8IGNoLT5jaG51bSwgc3RhdGUtPmN0cmxpZiB8IChjaC0+dW5pdGlkIDw8IDgpLCBidWYsIDIsIDEwMDApIDwgMCkKKwkJCWdvdG8gZXJyOworCQl2MSA9IGJ1ZlswXSB8IChidWZbMV0gPDwgOCk7CisJCXYyID0gY2gtPm1heHZhbCAtIGNoLT5taW52YWw7CisJCXYzID0gdjEgLSBjaC0+bWludmFsOworCQlpZiAoIXYyKQorCQkJdjIgPSAxOworCQl2MyA9IDEwMCAqIHYzIC8gdjI7CisJCWlmICh2MyA+IDEwMCkKKwkJCXYzID0gMTAwOworCQljaC0+dmFsdWUgPSB2MzsKKwkJaWYgKGNoLT5mbGFncyAmIChNSVhGTEdfU1RFUkVPSU4gfCBNSVhGTEdfU1RFUkVPT1VUKSkgeworCQkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBHRVRfQ1VSLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOLAorCQkJCQkgICAgKGNoLT5zZWxlY3RvciA8PCA4KSB8IChjaC0+Y2hudW0gKyAxKSwgc3RhdGUtPmN0cmxpZiB8IChjaC0+dW5pdGlkIDw8IDgpLCBidWYsIDIsIDEwMDApIDwgMCkKKwkJCQlnb3RvIGVycjsKKwkJCXYxID0gYnVmWzBdIHwgKGJ1ZlsxXSA8PCA4KTsKKwkJCXYzID0gdjEgLSBjaC0+bWludmFsOworCQkJdjMgPSAxMDAgKiB2MyAvIHYyOworCQkJaWYgKHYzID4gMTAwKQorCQkJCXYzID0gMTAwOworCQl9CisJCWNoLT52YWx1ZSB8PSB2MyA8PCA4OworCQlicmVhazsKKwkJCisJY2FzZSBCQVNTX0NPTlRST0w6CisJY2FzZSBNSURfQ09OVFJPTDoKKwljYXNlIFRSRUJMRV9DT05UUk9MOgorCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9NSU4sIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCisJCQkJICAgIChjaC0+c2VsZWN0b3IgPDwgOCkgfCBjaC0+Y2hudW0sIHN0YXRlLT5jdHJsaWYgfCAoY2gtPnVuaXRpZCA8PCA4KSwgYnVmLCAxLCAxMDAwKSA8IDApCisJCQlnb3RvIGVycjsKKwkJY2gtPm1pbnZhbCA9IGJ1ZlswXSA8PCA4OworCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9NQVgsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCisJCQkJICAgIChjaC0+c2VsZWN0b3IgPDwgOCkgfCBjaC0+Y2hudW0sIHN0YXRlLT5jdHJsaWYgfCAoY2gtPnVuaXRpZCA8PCA4KSwgYnVmLCAxLCAxMDAwKSA8IDApCisJCQlnb3RvIGVycjsKKwkJY2gtPm1heHZhbCA9IGJ1ZlswXSA8PCA4OworCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCisJCQkJICAgIChjaC0+c2VsZWN0b3IgPDwgOCkgfCBjaC0+Y2hudW0sIHN0YXRlLT5jdHJsaWYgfCAoY2gtPnVuaXRpZCA8PCA4KSwgYnVmLCAxLCAxMDAwKSA8IDApCisJCQlnb3RvIGVycjsKKwkJdjEgPSBidWZbMF0gPDwgODsKKwkJdjIgPSBjaC0+bWF4dmFsIC0gY2gtPm1pbnZhbDsKKwkJdjMgPSB2MSAtIGNoLT5taW52YWw7CisJCWlmICghdjIpCisJCQl2MiA9IDE7CisJCXYzID0gMTAwICogdjMgLyB2MjsKKwkJaWYgKHYzID4gMTAwKQorCQkJdjMgPSAxMDA7CisJCWNoLT52YWx1ZSA9IHYzOworCQlpZiAoY2gtPmZsYWdzICYgKE1JWEZMR19TVEVSRU9JTiB8IE1JWEZMR19TVEVSRU9PVVQpKSB7CisJCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCisJCQkJCSAgICAoY2gtPnNlbGVjdG9yIDw8IDgpIHwgKGNoLT5jaG51bSArIDEpLCBzdGF0ZS0+Y3RybGlmIHwgKGNoLT51bml0aWQgPDwgOCksIGJ1ZiwgMSwgMTAwMCkgPCAwKQorCQkJCWdvdG8gZXJyOworCQkJdjEgPSBidWZbMF0gPDwgODsKKwkJCXYzID0gdjEgLSBjaC0+bWludmFsOworCQkJdjMgPSAxMDAgKiB2MyAvIHYyOworCQkJaWYgKHYzID4gMTAwKQorCQkJCXYzID0gMTAwOworCQl9CisJCWNoLT52YWx1ZSB8PSB2MyA8PCA4OworCQlicmVhazsKKwkJCisJZGVmYXVsdDoKKwkJZ290byBlcnI7CisJfQorCisgZnJlZWJ1ZjoKKwlrZnJlZShidWYpOworCXJldHVybjsKKyBlcnI6CisJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogbWl4ZXIgcmVxdWVzdCBkZXZpY2UgJXUgaWYgJXUgdW5pdCAldSBjaCAldSBzZWxlY3RvciAldSBmYWlsZWRcbiIsIAorCSAgICAgICBkZXYtPmRldm51bSwgc3RhdGUtPmN0cmxpZiwgY2gtPnVuaXRpZCwgY2gtPmNobnVtLCBjaC0+c2VsZWN0b3IpOworCWlmIChzdGF0ZS0+bnJtaXhjaCkKKwkJc3RhdGUtPm5ybWl4Y2gtLTsKKwlnb3RvIGZyZWVidWY7Cit9CisKKworc3RhdGljIHZvaWQgdXNiX2F1ZGlvX3JlY3Vyc2V1bml0KHN0cnVjdCBjb25zbWl4c3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBjaGFyIHVuaXRpZCk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrbWl4Ym1hcCh1bnNpZ25lZCBjaGFyICpibWFwLCB1bnNpZ25lZCBjaGFyIGZsZywgdW5zaWduZWQgaW50IGluaWR4LCB1bnNpZ25lZCBpbnQgbnVtb2NoKQoreworCXVuc2lnbmVkIGludCBpZHg7CisKKwlpZHggPSBpbmlkeCpudW1vY2g7CisJaWYgKCEoYm1hcFstKGlkeCA+PiAzKV0gJiAoMHg4MCA+PiAoaWR4ICYgNykpKSkKKwkJcmV0dXJuIDA7CisJaWYgKCEoZmxnICYgKE1JWEZMR19TVEVSRU9JTiB8IE1JWEZMR19TVEVSRU9PVVQpKSkKKwkJcmV0dXJuIDE7CisJaWR4ID0gKGluaWR4KyEhKGZsZyAmIE1JWEZMR19TVEVSRU9JTikpKm51bW9jaCshIShmbGcgJiBNSVhGTEdfU1RFUkVPT1VUKTsKKwlpZiAoIShibWFwWy0oaWR4ID4+IDMpXSAmICgweDgwID4+IChpZHggJiA3KSkpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgdXNiX2F1ZGlvX21peGVydW5pdChzdHJ1Y3QgY29uc21peHN0YXRlICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqbWl4ZXIpCit7CisJdW5zaWduZWQgaW50IG5yb3V0Y2ggPSBtaXhlcls1K21peGVyWzRdXTsKKwl1bnNpZ25lZCBpbnQgY2hpZHhbU09VTkRfTUlYRVJfTlJERVZJQ0VTKzFdOworCXVuc2lnbmVkIGludCB0ZXJtdFtTT1VORF9NSVhFUl9OUkRFVklDRVNdOworCXVuc2lnbmVkIGNoYXIgZmxnID0gKG5yb3V0Y2ggPj0gMikgPyBNSVhGTEdfU1RFUkVPT1VUIDogMDsKKwl1bnNpZ25lZCBjaGFyICpibWFwID0gJm1peGVyWzkrbWl4ZXJbNF1dOworCXVuc2lnbmVkIGludCBibWFwc2l6ZTsKKwlzdHJ1Y3QgbWl4ZXJjaGFubmVsICpjaDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmICghbWl4ZXJbNF0pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogdW5pdCAldSBpbnZhbGlkIE1JWEVSX1VOSVQgZGVzY3JpcHRvclxuIiwgbWl4ZXJbM10pOworCQlyZXR1cm47CisJfQorCWlmIChtaXhlcls0XSA+IFNPVU5EX01JWEVSX05SREVWSUNFUykgeworCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBtaXhlciB1bml0ICV1OiB0b28gbWFueSBpbnB1dCBwaW5zXG4iLCBtaXhlclszXSk7CisJCXJldHVybjsKKwl9CisJY2hpZHhbMF0gPSAwOworCWZvciAoaSA9IDA7IGkgPCBtaXhlcls0XTsgaSsrKSB7CisJCXVzYl9hdWRpb19yZWN1cnNldW5pdChzdGF0ZSwgbWl4ZXJbNStpXSk7CisJCWNoaWR4W2krMV0gPSBjaGlkeFtpXSArIHN0YXRlLT5ucmNoYW5uZWxzOworCQl0ZXJtdFtpXSA9IHN0YXRlLT50ZXJtdHlwZTsKKwl9CisJc3RhdGUtPnRlcm10eXBlID0gMDsKKwlzdGF0ZS0+Y2hjb25maWcgPSBtaXhlcls2K21peGVyWzRdXSB8IChtaXhlcls3K21peGVyWzRdXSA8PCA4KTsKKwlibWFwc2l6ZSA9IChucm91dGNoICogY2hpZHhbbWl4ZXJbNF1dICsgNykgPj4gMzsKKwlibWFwICs9IGJtYXBzaXplIC0gMTsKKwlpZiAobWl4ZXJbMF0gPCAxMCttaXhlcls0XStibWFwc2l6ZSkgeworCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiB1bml0ICV1IGludmFsaWQgTUlYRVJfVU5JVCBkZXNjcmlwdG9yIChiaXRtYXAgdG9vIHNtYWxsKVxuIiwgbWl4ZXJbM10pOworCQlyZXR1cm47CisJfQorCWZvciAoaSA9IDA7IGkgPCBtaXhlcls0XTsgaSsrKSB7CisJCXN0YXRlLT50ZXJtdHlwZSA9IHRlcm10W2ldOworCQlpZiAoY2hpZHhbaSsxXS1jaGlkeFtpXSA+PSAyKSB7CisJCQlmbGcgfD0gTUlYRkxHX1NURVJFT0lOOworCQkJaWYgKGNoZWNrbWl4Ym1hcChibWFwLCBmbGcsIGNoaWR4W2ldLCBucm91dGNoKSkgeworCQkJCWNoID0gZ2V0bWl4Y2hhbm5lbChzdGF0ZSwgZ2V0dm9sY2hhbm5lbChzdGF0ZSkpOworCQkJCWlmIChjaCkgeworCQkJCQljaC0+dW5pdGlkID0gbWl4ZXJbM107CisJCQkJCWNoLT5zZWxlY3RvciA9IDA7CisJCQkJCWNoLT5jaG51bSA9IGNoaWR4W2ldKzE7CisJCQkJCWNoLT5mbGFncyA9IGZsZzsKKwkJCQkJcHJlcG1peGNoKHN0YXRlKTsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJZmxnICY9IH5NSVhGTEdfU1RFUkVPSU47CisJCWlmIChjaGVja21peGJtYXAoYm1hcCwgZmxnLCBjaGlkeFtpXSwgbnJvdXRjaCkpIHsKKwkJCWNoID0gZ2V0bWl4Y2hhbm5lbChzdGF0ZSwgZ2V0dm9sY2hhbm5lbChzdGF0ZSkpOworCQkJaWYgKGNoKSB7CisJCQkJY2gtPnVuaXRpZCA9IG1peGVyWzNdOworCQkJCWNoLT5zZWxlY3RvciA9IDA7CisJCQkJY2gtPmNobnVtID0gY2hpZHhbaV0rMTsKKwkJCQljaC0+ZmxhZ3MgPSBmbGc7CisJCQkJcHJlcG1peGNoKHN0YXRlKTsKKwkJCX0KKwkJfQorCX0JCisJc3RhdGUtPnRlcm10eXBlID0gMDsKK30KKworc3RhdGljIHN0cnVjdCBtaXhlcmNoYW5uZWwgKnNsY3RzcmNfZmluZHVuaXQoc3RydWN0IGNvbnNtaXhzdGF0ZSAqc3RhdGUsIF9fdTggdW5pdGlkKQoreworCXVuc2lnbmVkIGludCBpOworCQorCWZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bnJtaXhjaDsgaSsrKQorCQlpZiAoc3RhdGUtPm1peGNoW2ldLnVuaXRpZCA9PSB1bml0aWQpCisJCQlyZXR1cm4gJnN0YXRlLT5taXhjaFtpXTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgdXNiX2F1ZGlvX3NlbGVjdG9ydW5pdChzdHJ1Y3QgY29uc21peHN0YXRlICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqc2VsZWN0b3IpCit7CisJdW5zaWduZWQgaW50IGNobnVtLCBpLCBtaXhjaDsKKwlzdHJ1Y3QgbWl4ZXJjaGFubmVsICptY2g7CisKKwlpZiAoIXNlbGVjdG9yWzRdKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJXUgaW52YWxpZCBTRUxFQ1RPUl9VTklUIGRlc2NyaXB0b3JcbiIsIHNlbGVjdG9yWzNdKTsKKwkJcmV0dXJuOworCX0KKwltaXhjaCA9IHN0YXRlLT5ucm1peGNoOworCXVzYl9hdWRpb19yZWN1cnNldW5pdChzdGF0ZSwgc2VsZWN0b3JbNV0pOworCWlmIChzdGF0ZS0+bnJtaXhjaCAhPSBtaXhjaCkgeworCQltY2ggPSAmc3RhdGUtPm1peGNoW3N0YXRlLT5ucm1peGNoLTFdOworCQltY2gtPnNsY3R1bml0aWQgPSBzZWxlY3RvclszXSB8ICgxIDw8IDgpOworCX0gZWxzZSBpZiAoKG1jaCA9IHNsY3RzcmNfZmluZHVuaXQoc3RhdGUsIHNlbGVjdG9yWzVdKSkpIHsKKwkJbWNoLT5zbGN0dW5pdGlkID0gc2VsZWN0b3JbM10gfCAoMSA8PCA4KTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogc2VsZWN0b3IgdW5pdCAldTogaWdub3JpbmcgY2hhbm5lbCAxXG4iLCBzZWxlY3RvclszXSk7CisJfQorCWNobnVtID0gc3RhdGUtPm5yY2hhbm5lbHM7CisJZm9yIChpID0gMTsgaSA8IHNlbGVjdG9yWzRdOyBpKyspIHsKKwkJbWl4Y2ggPSBzdGF0ZS0+bnJtaXhjaDsKKwkJdXNiX2F1ZGlvX3JlY3Vyc2V1bml0KHN0YXRlLCBzZWxlY3Rvcls1K2ldKTsKKwkJaWYgKGNobnVtICE9IHN0YXRlLT5ucmNoYW5uZWxzKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBzZWxlY3RvciB1bml0ICV1OiBpbnB1dCBwaW5zIHdpdGggdmFyeWluZyBjaGFubmVsIG51bWJlcnNcbiIsIHNlbGVjdG9yWzNdKTsKKwkJCXN0YXRlLT50ZXJtdHlwZSA9IDA7CisJCQlzdGF0ZS0+Y2hjb25maWcgPSAwOworCQkJc3RhdGUtPm5yY2hhbm5lbHMgPSAwOworCQkJcmV0dXJuOworCQl9CisJCWlmIChzdGF0ZS0+bnJtaXhjaCAhPSBtaXhjaCkgeworCQkJbWNoID0gJnN0YXRlLT5taXhjaFtzdGF0ZS0+bnJtaXhjaC0xXTsKKwkJCW1jaC0+c2xjdHVuaXRpZCA9IHNlbGVjdG9yWzNdIHwgKChpICsgMSkgPDwgOCk7CisJCX0gZWxzZSBpZiAoKG1jaCA9IHNsY3RzcmNfZmluZHVuaXQoc3RhdGUsIHNlbGVjdG9yWzUraV0pKSkgeworCQkJbWNoLT5zbGN0dW5pdGlkID0gc2VsZWN0b3JbM10gfCAoKGkgKyAxKSA8PCA4KTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiBzZWxlY3RvciB1bml0ICV1OiBpZ25vcmluZyBjaGFubmVsICV1XG4iLCBzZWxlY3RvclszXSwgaSsxKTsKKwkJfQorCX0KKwlzdGF0ZS0+dGVybXR5cGUgPSAwOworCXN0YXRlLT5jaGNvbmZpZyA9IDA7Cit9CisKKy8qIGluIHRoZSBmdXR1cmUgd2UgbWlnaHQgdHJ5IHRvIGhhbmRsZSAzRCBldGMuIGVmZmVjdCB1bml0cyAqLworCitzdGF0aWMgdm9pZCB1c2JfYXVkaW9fcHJvY2Vzc2luZ3VuaXQoc3RydWN0IGNvbnNtaXhzdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKnByb2MpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJvY1s2XTsgaSsrKQorCQl1c2JfYXVkaW9fcmVjdXJzZXVuaXQoc3RhdGUsIHByb2NbNytpXSk7CisJc3RhdGUtPm5yY2hhbm5lbHMgPSBwcm9jWzcrcHJvY1s2XV07CisJc3RhdGUtPnRlcm10eXBlID0gMDsKKwlzdGF0ZS0+Y2hjb25maWcgPSBwcm9jWzgrcHJvY1s2XV0gfCAocHJvY1s5K3Byb2NbNl1dIDw8IDgpOworfQorCisKKy8qIFNlZSBBdWRpbyBDbGFzcyBTcGVjLCBzZWN0aW9uIDQuMy4yLjUgKi8KK3N0YXRpYyB2b2lkIHVzYl9hdWRpb19mZWF0dXJldW5pdChzdHJ1Y3QgY29uc21peHN0YXRlICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqZnRyKQoreworCXN0cnVjdCBtaXhlcmNoYW5uZWwgKmNoOworCXVuc2lnbmVkIHNob3J0IGNoZnRyLCBtY2hmdHI7CisjaWYgMAorCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBzdGF0ZS0+cy0+dXNiZGV2OworCXVuc2lnbmVkIGNoYXIgZGF0YVsxXTsKKyNlbmRpZgorCXVuc2lnbmVkIGNoYXIgbnJfbG9naWNhbF9jaGFubmVscywgaTsKKworCXVzYl9hdWRpb19yZWN1cnNldW5pdChzdGF0ZSwgZnRyWzRdKTsKKworCWlmIChmdHJbNV0gPT0gMCApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogd3JvbmcgY29udHJvbHMgc2l6ZSBpbiBmZWF0dXJlIHVuaXQgJXVcbiIsZnRyWzNdKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChzdGF0ZS0+bnJjaGFubmVscyA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGZlYXR1cmUgdW5pdCAldSBzb3VyY2UgaGFzIG5vIGNoYW5uZWxzXG4iLCBmdHJbM10pOworCQlyZXR1cm47CisJfQorCWlmIChzdGF0ZS0+bnJjaGFubmVscyA+IDIpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgInVzYmF1ZGlvOiBmZWF0dXJlIHVuaXQgJXU6IE9TUyBtaXhlciBpbnRlcmZhY2UgZG9lcyBub3Qgc3VwcG9ydCBtb3JlIHRoYW4gMiBjaGFubmVsc1xuIiwgZnRyWzNdKTsKKworCW5yX2xvZ2ljYWxfY2hhbm5lbHM9KGZ0clswXS03KS9mdHJbNV0tMTsKKworCWlmIChucl9sb2dpY2FsX2NoYW5uZWxzICE9IHN0YXRlLT5ucmNoYW5uZWxzKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInVzYmF1ZGlvOiB3YXJuaW5nOiBmb3VuZCAlZCBvZiAlZCBsb2dpY2FsIGNoYW5uZWxzLlxuIiwgc3RhdGUtPm5yY2hhbm5lbHMsbnJfbG9naWNhbF9jaGFubmVscyk7CisKKwkJaWYgKHN0YXRlLT5ucmNoYW5uZWxzID09IDEgJiYgbnJfbG9naWNhbF9jaGFubmVscz09MCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiYXVkaW86IGFzc3VtaW5nIHRoZSBjaGFubmVsIGZvdW5kIGlzIHRoZSBtYXN0ZXIgY2hhbm5lbCAoZ290IGEgUGhpbGlwcyBjYW1lcmE/KS4gU2hvdWxkIGJlIGZpbmUuXG4iKTsKKwkJfSBlbHNlIGlmIChzdGF0ZS0+bnJjaGFubmVscyA9PSAxICYmIG5yX2xvZ2ljYWxfY2hhbm5lbHM9PTIpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiBhc3N1bWluZyB0aGF0IGEgc3RlcmVvIGNoYW5uZWwgY29ubmVjdGVkIGRpcmVjdGx5IHRvIGEgbWl4ZXIgaXMgbWlzc2luZyBpbiBzZWFyY2ggKGdvdCBMYWJ0ZWMgaGVhZHNldD8pLiBTaG91bGQgYmUgZmluZS5cbiIpOworCQkJc3RhdGUtPm5yY2hhbm5lbHM9bnJfbG9naWNhbF9jaGFubmVsczsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgInVzYmF1ZGlvOiBubyBpZGVhIHdoYXQncyBnb2luZyBvbi4uLiwgY29udGFjdCBsaW51eC11c2ItZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0XG4iKTsKKwkJfQorCX0KKworCS8qIFRoZXJlIGlzIGFsd2F5cyBhIG1hc3RlciBjaGFubmVsICovCisJbWNoZnRyID0gZnRyWzZdOworCS8qIEJpbmFyeSBBTkQgb3ZlciBsb2dpY2FsIGNoYW5uZWxzIGlmIHRoZXkgZXhpc3QgKi8KKwlpZiAobnJfbG9naWNhbF9jaGFubmVscykgeworCQljaGZ0ciA9IGZ0cls2K2Z0cls1XV07CisJCWZvciAoaSA9IDI7IGkgPD0gbnJfbG9naWNhbF9jaGFubmVsczsgaSsrKQorCQkJY2hmdHIgJj0gZnRyWzYraSpmdHJbNV1dOworCX0gZWxzZSB7CisJCWNoZnRyID0gMDsKKwl9CisKKwkvKiB2b2x1bWUgY29udHJvbCAqLworCWlmIChjaGZ0ciAmIDIpIHsKKwkJY2ggPSBnZXRtaXhjaGFubmVsKHN0YXRlLCBnZXR2b2xjaGFubmVsKHN0YXRlKSk7CisJCWlmIChjaCkgeworCQkJY2gtPnVuaXRpZCA9IGZ0clszXTsKKwkJCWNoLT5zZWxlY3RvciA9IFZPTFVNRV9DT05UUk9MOworCQkJY2gtPmNobnVtID0gMTsKKwkJCWNoLT5mbGFncyA9IChzdGF0ZS0+bnJjaGFubmVscyA+IDEpID8gKE1JWEZMR19TVEVSRU9JTiB8IE1JWEZMR19TVEVSRU9PVVQpIDogMDsKKwkJCXByZXBtaXhjaChzdGF0ZSk7CisJCX0KKwl9IGVsc2UgaWYgKG1jaGZ0ciAmIDIpIHsKKwkJY2ggPSBnZXRtaXhjaGFubmVsKHN0YXRlLCBnZXR2b2xjaGFubmVsKHN0YXRlKSk7CisJCWlmIChjaCkgeworCQkJY2gtPnVuaXRpZCA9IGZ0clszXTsKKwkJCWNoLT5zZWxlY3RvciA9IFZPTFVNRV9DT05UUk9MOworCQkJY2gtPmNobnVtID0gMDsKKwkJCWNoLT5mbGFncyA9IDA7CisJCQlwcmVwbWl4Y2goc3RhdGUpOworCQl9CisJfQorCS8qIGJhc3MgY29udHJvbCAqLworCWlmIChjaGZ0ciAmIDQpIHsKKwkJY2ggPSBnZXRtaXhjaGFubmVsKHN0YXRlLCBTT1VORF9NSVhFUl9CQVNTKTsKKwkJaWYgKGNoKSB7CisJCQljaC0+dW5pdGlkID0gZnRyWzNdOworCQkJY2gtPnNlbGVjdG9yID0gQkFTU19DT05UUk9MOworCQkJY2gtPmNobnVtID0gMTsKKwkJCWNoLT5mbGFncyA9IChzdGF0ZS0+bnJjaGFubmVscyA+IDEpID8gKE1JWEZMR19TVEVSRU9JTiB8IE1JWEZMR19TVEVSRU9PVVQpIDogMDsKKwkJCXByZXBtaXhjaChzdGF0ZSk7CisJCX0KKwl9IGVsc2UgaWYgKG1jaGZ0ciAmIDQpIHsKKwkJY2ggPSBnZXRtaXhjaGFubmVsKHN0YXRlLCBTT1VORF9NSVhFUl9CQVNTKTsKKwkJaWYgKGNoKSB7CisJCQljaC0+dW5pdGlkID0gZnRyWzNdOworCQkJY2gtPnNlbGVjdG9yID0gQkFTU19DT05UUk9MOworCQkJY2gtPmNobnVtID0gMDsKKwkJCWNoLT5mbGFncyA9IDA7CisJCQlwcmVwbWl4Y2goc3RhdGUpOworCQl9CisJfQorCS8qIHRyZWJsZSBjb250cm9sICovCisJaWYgKGNoZnRyICYgMTYpIHsKKwkJY2ggPSBnZXRtaXhjaGFubmVsKHN0YXRlLCBTT1VORF9NSVhFUl9UUkVCTEUpOworCQlpZiAoY2gpIHsKKwkJCWNoLT51bml0aWQgPSBmdHJbM107CisJCQljaC0+c2VsZWN0b3IgPSBUUkVCTEVfQ09OVFJPTDsKKwkJCWNoLT5jaG51bSA9IDE7CisJCQljaC0+ZmxhZ3MgPSAoc3RhdGUtPm5yY2hhbm5lbHMgPiAxKSA/IChNSVhGTEdfU1RFUkVPSU4gfCBNSVhGTEdfU1RFUkVPT1VUKSA6IDA7CisJCQlwcmVwbWl4Y2goc3RhdGUpOworCQl9CisJfSBlbHNlIGlmIChtY2hmdHIgJiAxNikgeworCQljaCA9IGdldG1peGNoYW5uZWwoc3RhdGUsIFNPVU5EX01JWEVSX1RSRUJMRSk7CisJCWlmIChjaCkgeworCQkJY2gtPnVuaXRpZCA9IGZ0clszXTsKKwkJCWNoLT5zZWxlY3RvciA9IFRSRUJMRV9DT05UUk9MOworCQkJY2gtPmNobnVtID0gMDsKKwkJCWNoLT5mbGFncyA9IDA7CisJCQlwcmVwbWl4Y2goc3RhdGUpOworCQl9CisJfQorI2lmIDAKKwkvKiBpZiB0aGVyZSBhcmUgbXV0ZSBjb250cm9scywgdW5tdXRlIHRoZW0gKi8KKwkvKiBkb2VzIG5vdCBzZWVtIHRvIGJlIG5lY2Vzc2FyeSwgYW5kIHRoZSBEYWxsYXMgY2hpcCBkb2VzIG5vdCBzZWVtIHRvIHN1cHBvcnQgdGhlICJhbGwiIGNoYW5uZWwgKDI1NSkgKi8KKwlpZiAoKGNoZnRyICYgMSkgfHwgKG1jaGZ0ciAmIDEpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJ1c2JhdWRpbzogdW5tdXRpbmcgZmVhdHVyZSB1bml0ICV1IGludGVyZmFjZSAldVxuIiwgZnRyWzNdLCBzdGF0ZS0+Y3RybGlmKTsKKwkJZGF0YVswXSA9IDA7CisJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQsCisJCQkJICAgIChNVVRFX0NPTlRST0wgPDwgOCkgfCAweGZmLCBzdGF0ZS0+Y3RybGlmIHwgKGZ0clszXSA8PCA4KSwgZGF0YSwgMSwgMTAwMCkgPCAwKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiYXVkaW86IGZhaWx1cmUgdG8gdW5tdXRlIGZlYXR1cmUgdW5pdCAldSBpbnRlcmZhY2UgJXVcbiIsIGZ0clszXSwgc3RhdGUtPmN0cmxpZik7CisgCX0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCB1c2JfYXVkaW9fcmVjdXJzZXVuaXQoc3RydWN0IGNvbnNtaXhzdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgdW5pdGlkKQoreworCXVuc2lnbmVkIGNoYXIgKnAxOworCXVuc2lnbmVkIGludCBpLCBqOworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQodW5pdGlkLCBzdGF0ZS0+dW5pdGJpdG1hcCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAidXNiYXVkaW86IG1peGVyIHBhdGggcmV2aXNpdHMgdW5pdCAlZFxuIiwgdW5pdGlkKTsKKwkJcmV0dXJuOworCX0KKwlwMSA9IGZpbmRfYXVkaW9jb250cm9sX3VuaXQoc3RhdGUtPmJ1ZmZlciwgc3RhdGUtPmJ1ZmxlbiwgTlVMTCwgdW5pdGlkLCBzdGF0ZS0+Y3RybGlmKTsKKwlpZiAoIXAxKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJWQgbm90IGZvdW5kIVxuIiwgdW5pdGlkKTsKKwkJcmV0dXJuOworCX0KKwlzdGF0ZS0+bnJjaGFubmVscyA9IDA7CisJc3RhdGUtPnRlcm10eXBlID0gMDsKKwlzdGF0ZS0+Y2hjb25maWcgPSAwOworCXN3aXRjaCAocDFbMl0pIHsKKwljYXNlIElOUFVUX1RFUk1JTkFMOgorCQlpZiAocDFbMF0gPCAxMikgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogdW5pdCAldTogaW52YWxpZCBJTlBVVF9URVJNSU5BTCBkZXNjcmlwdG9yXG4iLCB1bml0aWQpOworCQkJcmV0dXJuOworCQl9CisJCXN0YXRlLT5ucmNoYW5uZWxzID0gcDFbN107CisJCXN0YXRlLT50ZXJtdHlwZSA9IHAxWzRdIHwgKHAxWzVdIDw8IDgpOworCQlzdGF0ZS0+Y2hjb25maWcgPSBwMVs4XSB8IChwMVs5XSA8PCA4KTsKKwkJcmV0dXJuOworCisJY2FzZSBNSVhFUl9VTklUOgorCQlpZiAocDFbMF0gPCAxMCB8fCBwMVswXSA8IDEwK3AxWzRdKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiB1bml0ICV1OiBpbnZhbGlkIE1JWEVSX1VOSVQgZGVzY3JpcHRvclxuIiwgdW5pdGlkKTsKKwkJCXJldHVybjsKKwkJfQorCQl1c2JfYXVkaW9fbWl4ZXJ1bml0KHN0YXRlLCBwMSk7CisJCXJldHVybjsKKworCWNhc2UgU0VMRUNUT1JfVU5JVDoKKwkJaWYgKHAxWzBdIDwgNiB8fCBwMVswXSA8IDYrcDFbNF0pIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJXU6IGludmFsaWQgU0VMRUNUT1JfVU5JVCBkZXNjcmlwdG9yXG4iLCB1bml0aWQpOworCQkJcmV0dXJuOworCQl9CisJCXVzYl9hdWRpb19zZWxlY3RvcnVuaXQoc3RhdGUsIHAxKTsKKwkJcmV0dXJuOworCisJY2FzZSBGRUFUVVJFX1VOSVQ6IC8qIFNlZSBVU0IgQXVkaW8gQ2xhc3MgU3BlYyA0LjMuMi41ICovCisJCWlmIChwMVswXSA8IDcgfHwgcDFbMF0gPCA3K3AxWzVdKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiB1bml0ICV1OiBpbnZhbGlkIEZFQVRVUkVfVU5JVCBkZXNjcmlwdG9yXG4iLCB1bml0aWQpOworCQkJcmV0dXJuOworCQl9CisJCXVzYl9hdWRpb19mZWF0dXJldW5pdChzdGF0ZSwgcDEpOworCQlyZXR1cm47CQkKKworCWNhc2UgUFJPQ0VTU0lOR19VTklUOgorCQlpZiAocDFbMF0gPCAxMyB8fCBwMVswXSA8IDEzK3AxWzZdIHx8IHAxWzBdIDwgMTMrcDFbNl0rcDFbMTErcDFbNl1dKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiB1bml0ICV1OiBpbnZhbGlkIFBST0NFU1NJTkdfVU5JVCBkZXNjcmlwdG9yXG4iLCB1bml0aWQpOworCQkJcmV0dXJuOworCQl9CisJCXVzYl9hdWRpb19wcm9jZXNzaW5ndW5pdChzdGF0ZSwgcDEpOworCQlyZXR1cm47CQkKKworCWNhc2UgRVhURU5TSU9OX1VOSVQ6CisJCWlmIChwMVswXSA8IDEzIHx8IHAxWzBdIDwgMTMrcDFbNl0gfHwgcDFbMF0gPCAxMytwMVs2XStwMVsxMStwMVs2XV0pIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJXU6IGludmFsaWQgRVhURU5TSU9OX1VOSVQgZGVzY3JpcHRvclxuIiwgdW5pdGlkKTsKKwkJCXJldHVybjsKKwkJfQorCQlmb3IgKGogPSBpID0gMDsgaSA8IHAxWzZdOyBpKyspIHsKKwkJCXVzYl9hdWRpb19yZWN1cnNldW5pdChzdGF0ZSwgcDFbNytpXSk7CisJCQlpZiAoIWkpCisJCQkJaiA9IHN0YXRlLT50ZXJtdHlwZTsKKwkJCWVsc2UgaWYgKGogIT0gc3RhdGUtPnRlcm10eXBlKQorCQkJCWogPSAwOworCQl9CisJCXN0YXRlLT5ucmNoYW5uZWxzID0gcDFbNytwMVs2XV07CisJCXN0YXRlLT5jaGNvbmZpZyA9IHAxWzgrcDFbNl1dIHwgKHAxWzkrcDFbNl1dIDw8IDgpOworCQlzdGF0ZS0+dGVybXR5cGUgPSBqOworCQlyZXR1cm47CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiB1bml0ICV1OiB1bmV4cGVjdGVkIHR5cGUgMHglMDJ4XG4iLCB1bml0aWQsIHAxWzJdKTsKKwkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHZvaWQgdXNiX2F1ZGlvX2NvbnN0cnVjdG1peGVyKHN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKnMsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGJ1ZmxlbiwgdW5zaWduZWQgaW50IGN0cmxpZiwgdW5zaWduZWQgY2hhciAqb3Rlcm0pCit7CisJc3RydWN0IHVzYl9taXhlcmRldiAqbXM7CisJc3RydWN0IGNvbnNtaXhzdGF0ZSBzdGF0ZTsKKworCW1lbXNldCgmc3RhdGUsIDAsIHNpemVvZihzdGF0ZSkpOworCXN0YXRlLnMgPSBzOworCXN0YXRlLm5ybWl4Y2ggPSAwOworCXN0YXRlLm1peGNobWFzayA9IH4wOworCXN0YXRlLmJ1ZmZlciA9IGJ1ZmZlcjsKKwlzdGF0ZS5idWZsZW4gPSBidWZsZW47CisJc3RhdGUuY3RybGlmID0gY3RybGlmOworCXNldF9iaXQob3Rlcm1bM10sIHN0YXRlLnVuaXRiaXRtYXApOyAgLyogbWFyayB0ZXJtaW5hbCBJRCBhcyB2aXNpdGVkICovCisJcHJpbnRrKEtFUk5fREVCVUcgInVzYmF1ZGlvOiBjb25zdHJ1Y3RpbmcgbWl4ZXIgZm9yIFRlcm1pbmFsICV1IHR5cGUgMHglMDR4XG4iLAorCSAgICAgICBvdGVybVszXSwgb3Rlcm1bNF0gfCAob3Rlcm1bNV0gPDwgOCkpOworCXVzYl9hdWRpb19yZWN1cnNldW5pdCgmc3RhdGUsIG90ZXJtWzddKTsKKwlpZiAoIXN0YXRlLm5ybWl4Y2gpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAidXNiYXVkaW86IG5vIG1peGVyIGNvbnRyb2xzIGZvdW5kIGZvciBUZXJtaW5hbCAldVxuIiwgb3Rlcm1bM10pOworCQlyZXR1cm47CisJfQorCWlmICghKG1zID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9taXhlcmRldikrc3RhdGUubnJtaXhjaCpzaXplb2Yoc3RydWN0IG1peGVyY2hhbm5lbCksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuOworCW1lbXNldChtcywgMCwgc2l6ZW9mKHN0cnVjdCB1c2JfbWl4ZXJkZXYpKTsKKwltZW1jcHkoJm1zLT5jaCwgJnN0YXRlLm1peGNoLCBzdGF0ZS5ucm1peGNoKnNpemVvZihzdHJ1Y3QgbWl4ZXJjaGFubmVsKSk7CisJbXMtPnN0YXRlID0gczsKKwltcy0+aWZhY2UgPSBjdHJsaWY7CisJbXMtPm51bWNoID0gc3RhdGUubnJtaXhjaDsKKwlpZiAoKG1zLT5kZXZfbWl4ZXIgPSByZWdpc3Rlcl9zb3VuZF9taXhlcigmdXNiX21peGVyX2ZvcHMsIC0xKSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGNhbm5vdCByZWdpc3RlciBtaXhlclxuIik7CisJCWtmcmVlKG1zKTsKKwkJcmV0dXJuOworCX0KKwlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogcmVnaXN0ZXJlZCBtaXhlciAxNCwlZFxuIiwgbXMtPmRldl9taXhlcik7CisJbGlzdF9hZGRfdGFpbCgmbXMtPmxpc3QsICZzLT5taXhlcmxpc3QpOworfQorCisvKiBhcmJpdHJhcnkgbGltaXQsIHdlIHdvbid0IGNoZWNrIG1vcmUgaW50ZXJmYWNlcyB0aGFuIHRoaXMgKi8KKyNkZWZpbmUgVVNCX01BWElOVEVSRkFDRVMJMzIKKworc3RhdGljIHN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKnVzYl9hdWRpb19wYXJzZWNvbnRyb2woc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgYnVmbGVuLCB1bnNpZ25lZCBpbnQgY3RybGlmKQoreworCXN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKnM7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdDsKKwl1bnNpZ25lZCBjaGFyIGlmaW5bVVNCX01BWElOVEVSRkFDRVNdLCBpZm91dFtVU0JfTUFYSU5URVJGQUNFU107CisJdW5zaWduZWQgY2hhciAqcDE7CisJdW5zaWduZWQgaW50IGksIGosIGssIG51bWlmaW4gPSAwLCBudW1pZm91dCA9IDA7CisJCisJaWYgKCEocyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfYXVkaW9fc3RhdGUpLCBHRlBfS0VSTkVMKSkpCisJCXJldHVybiBOVUxMOworCW1lbXNldChzLCAwLCBzaXplb2Yoc3RydWN0IHVzYl9hdWRpb19zdGF0ZSkpOworCUlOSVRfTElTVF9IRUFEKCZzLT5hdWRpb2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZzLT5taXhlcmxpc3QpOworCXMtPnVzYmRldiA9IGRldjsKKwlzLT5jb3VudCA9IDE7CisKKwkvKiBmaW5kIGF1ZGlvY29udHJvbCBpbnRlcmZhY2UgKi8KKwlpZiAoIShwMSA9IGZpbmRfY3NpbnRlcmZhY2VfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZmxlbiwgTlVMTCwgSEVBREVSLCBjdHJsaWYsIC0xKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZGV2aWNlICVkIGF1ZGlvY29udHJvbCBpbnRlcmZhY2UgJXUgbm8gSEVBREVSIGZvdW5kXG4iLAorCQkgICAgICAgZGV2LT5kZXZudW0sIGN0cmxpZik7CisJCWdvdG8gcmV0OworCX0KKwlpZiAocDFbMF0gPCA4ICsgcDFbN10pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZGV2aWNlICVkIGF1ZGlvY29udHJvbCBpbnRlcmZhY2UgJXUgSEVBREVSIGVycm9yXG4iLAorCQkgICAgICAgZGV2LT5kZXZudW0sIGN0cmxpZik7CisJCWdvdG8gcmV0OworCX0KKwlpZiAoIXAxWzddKQorCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogZGV2aWNlICVkIGF1ZGlvY29udHJvbCBpbnRlcmZhY2UgJXUgaGFzIG5vIEF1ZGlvU3RyZWFtaW5nIGFuZCBNaWRpU3RyZWFtaW5nIGludGVyZmFjZXNcbiIsCisJCSAgICAgICBkZXYtPmRldm51bSwgY3RybGlmKTsKKwlmb3IgKGkgPSAwOyBpIDwgcDFbN107IGkrKykgeworCQlqID0gcDFbOCtpXTsKKwkJaWZhY2UgPSB1c2JfaWZudW1fdG9faWYoZGV2LCBqKTsKKwkJaWYgKCFpZmFjZSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZGV2aWNlICVkIGF1ZGlvY29udHJvbCBpbnRlcmZhY2UgJXUgaW50ZXJmYWNlICV1IGRvZXMgbm90IGV4aXN0XG4iLAorCQkJICAgICAgIGRldi0+ZGV2bnVtLCBjdHJsaWYsIGopOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGlmYWNlLT5udW1fYWx0c2V0dGluZyA9PSAxKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBoYXMgb25seSAxIGFsdHNldHRpbmcuXG4iLCBkZXYtPmRldm51bSwgY3RybGlmKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWFsdCA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpZmFjZSwgMCk7CisJCWlmICghYWx0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBpbnRlcmZhY2UgJXUgaGFzIG5vIGFsdHNldHRpbmcgMFxuIiwKKwkJCSAgICAgICBkZXYtPmRldm51bSwgY3RybGlmLCBqKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChhbHQtPmRlc2MuYkludGVyZmFjZUNsYXNzICE9IFVTQl9DTEFTU19BVURJTykgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZGV2aWNlICVkIGF1ZGlvY29udHJvbCBpbnRlcmZhY2UgJXUgaW50ZXJmYWNlICV1IGlzIG5vdCBhbiBBdWRpb0NsYXNzIGludGVyZmFjZVxuIiwKKwkJCSAgICAgICBkZXYtPmRldm51bSwgY3RybGlmLCBqKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChhbHQtPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzID09IDMpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBpbnRlcmZhY2UgJXUgTUlESVN0cmVhbWluZyBub3Qgc3VwcG9ydGVkXG4iLAorCQkJICAgICAgIGRldi0+ZGV2bnVtLCBjdHJsaWYsIGopOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGFsdC0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgIT0gMikgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZGV2aWNlICVkIGF1ZGlvY29udHJvbCBpbnRlcmZhY2UgJXUgaW50ZXJmYWNlICV1IGludmFsaWQgQXVkaW9DbGFzcyBzdWJ0eXBlXG4iLAorCQkJICAgICAgIGRldi0+ZGV2bnVtLCBjdHJsaWYsIGopOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGFsdC0+ZGVzYy5iTnVtRW5kcG9pbnRzID4gMCkgeworCQkJLyogQ2hlY2sgYWxsIGVuZHBvaW50czsgc2hvdWxkIHRoZXkgYWxsIGhhdmUgYSBiYW5kd2lkdGggb2YgMCA/ICovCisJCQlmb3IgKGsgPSAwOyBrIDwgYWx0LT5kZXNjLmJOdW1FbmRwb2ludHM7IGsrKykgeworCQkJCWlmIChsZTE2X3RvX2NwdShhbHQtPmVuZHBvaW50W2tdLmRlc2Mud01heFBhY2tldFNpemUpID4gMCkgeworCQkJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBlbmRwb2ludCAlZCBkb2VzIG5vdCBoYXZlIDAgYmFuZHdpZHRoIGF0IGFsdFswXVxuIiwgZGV2LT5kZXZudW0sIGN0cmxpZiwgayk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChrIDwgYWx0LT5kZXNjLmJOdW1FbmRwb2ludHMpCisJCQkJY29udGludWU7CisJCX0KKworCQlhbHQgPSB1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcoaWZhY2UsIDEpOworCQlpZiAoIWFsdCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZGV2aWNlICVkIGF1ZGlvY29udHJvbCBpbnRlcmZhY2UgJXUgaW50ZXJmYWNlICV1IGhhcyBubyBhbHRzZXR0aW5nIDFcbiIsCisJCQkgICAgICAgZGV2LT5kZXZudW0sIGN0cmxpZiwgaik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoYWx0LT5kZXNjLmJOdW1FbmRwb2ludHMgPCAxKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBpbnRlcmZhY2UgJXUgaGFzIG5vIGVuZHBvaW50XG4iLAorCQkJICAgICAgIGRldi0+ZGV2bnVtLCBjdHJsaWYsIGopOworCQkJY29udGludWU7CisJCX0KKwkJLyogbm90ZTogdGhpcyByZXF1aXJlcyB0aGUgZGF0YSBlbmRwb2ludCB0byBiZSBlcDAgYW5kIHRoZSBvcHRpb25hbCBzeW5jCisJCSAgIGVwIHRvIGJlIGVwMSwgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGNhc2UgKi8KKwkJaWYgKGFsdC0+ZW5kcG9pbnRbMF0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgeworCQkJaWYgKG51bWlmaW4gPCBVU0JfTUFYSU5URVJGQUNFUykgeworCQkJCWlmaW5bbnVtaWZpbisrXSA9IGo7CisJCQkJdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2UoJnVzYl9hdWRpb19kcml2ZXIsIGlmYWNlLCAodm9pZCAqKS0xKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChudW1pZm91dCA8IFVTQl9NQVhJTlRFUkZBQ0VTKSB7CisJCQkJaWZvdXRbbnVtaWZvdXQrK10gPSBqOworCQkJCXVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKCZ1c2JfYXVkaW9fZHJpdmVyLCBpZmFjZSwgKHZvaWQgKiktMSk7CisJCQl9CisJCX0KKwl9CisJcHJpbnRrKEtFUk5fSU5GTyAidXNiYXVkaW86IGRldmljZSAlZCBhdWRpb2NvbnRyb2wgaW50ZXJmYWNlICV1IGhhcyAldSBpbnB1dCBhbmQgJXUgb3V0cHV0IEF1ZGlvU3RyZWFtaW5nIGludGVyZmFjZXNcbiIsCisJICAgICAgIGRldi0+ZGV2bnVtLCBjdHJsaWYsIG51bWlmaW4sIG51bWlmb3V0KTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtaWZpbiAmJiBpIDwgbnVtaWZvdXQ7IGkrKykKKwkJdXNiX2F1ZGlvX3BhcnNlc3RyZWFtaW5nKHMsIGJ1ZmZlciwgYnVmbGVuLCBpZmluW2ldLCBpZm91dFtpXSk7CisJZm9yIChqID0gaTsgaiA8IG51bWlmaW47IGorKykKKwkJdXNiX2F1ZGlvX3BhcnNlc3RyZWFtaW5nKHMsIGJ1ZmZlciwgYnVmbGVuLCBpZmluW2ldLCAtMSk7CisJZm9yIChqID0gaTsgaiA8IG51bWlmb3V0OyBqKyspCisJCXVzYl9hdWRpb19wYXJzZXN0cmVhbWluZyhzLCBidWZmZXIsIGJ1ZmxlbiwgLTEsIGlmb3V0W2ldKTsKKwkvKiBub3cgd2FsayB0aHJvdWdoIGFsbCBPVVRQVVRfVEVSTUlOQUwgZGVzY3JpcHRvcnMgdG8gc2VhcmNoIGZvciBtaXhlcnMgKi8KKwlwMSA9IGZpbmRfY3NpbnRlcmZhY2VfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZmxlbiwgTlVMTCwgT1VUUFVUX1RFUk1JTkFMLCBjdHJsaWYsIC0xKTsKKwl3aGlsZSAocDEpIHsKKwkJaWYgKHAxWzBdID49IDkpCisJCQl1c2JfYXVkaW9fY29uc3RydWN0bWl4ZXIocywgYnVmZmVyLCBidWZsZW4sIGN0cmxpZiwgcDEpOworCQlwMSA9IGZpbmRfY3NpbnRlcmZhY2VfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZmxlbiwgcDEsIE9VVFBVVF9URVJNSU5BTCwgY3RybGlmLCAtMSk7CisJfQorCityZXQ6CisJaWYgKGxpc3RfZW1wdHkoJnMtPmF1ZGlvbGlzdCkgJiYgbGlzdF9lbXB0eSgmcy0+bWl4ZXJsaXN0KSkgeworCQlrZnJlZShzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCS8qIGV2ZXJ5dGhpbmcgc3VjY2Vzc2Z1bCAqLworCWRvd24oJm9wZW5fc2VtKTsKKwlsaXN0X2FkZF90YWlsKCZzLT5hdWRpb2RldiwgJmF1ZGlvZGV2cyk7CisJdXAoJm9wZW5fc2VtKTsKKwlwcmludGsoS0VSTl9ERUJVRyAidXNiX2F1ZGlvX3BhcnNlY29udHJvbDogdXNiX2F1ZGlvX3N0YXRlIGF0ICVwXG4iLCBzKTsKKwlyZXR1cm4gczsKK30KKworLyogd2Ugb25seSBjYXJlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBjb25maWd1cmF0aW9uICovCisKK3N0YXRpYyBpbnQgdXNiX2F1ZGlvX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpbnRmKTsKKwlzdHJ1Y3QgdXNiX2F1ZGlvX3N0YXRlICpzOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBpbnQgYnVmbGVuOworCisjaWYgMAorCXByaW50ayhLRVJOX0RFQlVHICJ1c2JhdWRpbzogUHJvYmluZyBpZiAlaTogSUMgJXgsIElTQyAleFxuIiwgaWZudW0sCisJICAgICAgIGNvbmZpZy0+aW50ZXJmYWNlW2lmbnVtXS5hbHRzZXR0aW5nWzBdLmRlc2MuYkludGVyZmFjZUNsYXNzLAorCSAgICAgICBjb25maWctPmludGVyZmFjZVtpZm51bV0uYWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyk7CisjZW5kaWYKKworCS8qCisJICogYXVkaW9jb250cm9sIGludGVyZmFjZSBmb3VuZAorCSAqIGZpbmQgd2hpY2ggY29uZmlndXJhdGlvbiBudW1iZXIgaXMgYWN0aXZlCisJICovCisJYnVmZmVyID0gZGV2LT5yYXdkZXNjcmlwdG9yc1tkZXYtPmFjdGNvbmZpZyAtIGRldi0+Y29uZmlnXTsKKwlidWZsZW4gPSBsZTE2X3RvX2NwdShkZXYtPmFjdGNvbmZpZy0+ZGVzYy53VG90YWxMZW5ndGgpOworCXMgPSB1c2JfYXVkaW9fcGFyc2Vjb250cm9sKGRldiwgYnVmZmVyLCBidWZsZW4sIGludGYtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcik7CisJaWYgKHMpIHsKKwkJdXNiX3NldF9pbnRmZGF0YSAoaW50Ziwgcyk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVOT0RFVjsKK30KKworCisvKiBhIHJldm9rZSBmYWNpbGl0eSB3b3VsZCBtYWtlIHRoaW5ncyBzaW1wbGVyICovCisKK3N0YXRpYyB2b2lkIHVzYl9hdWRpb19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKnMgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKwlzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphczsKKwlzdHJ1Y3QgdXNiX21peGVyZGV2ICptczsKKworCWlmICghcykKKwkJcmV0dXJuOworCisJLyogd2UgZ2V0IGNhbGxlZCB3aXRoIC0xIGZvciBldmVyeSBhdWRpb3N0cmVhbWluZyBpbnRlcmZhY2UgcmVnaXN0ZXJlZCAqLworCWlmIChzID09IChzdHJ1Y3QgdXNiX2F1ZGlvX3N0YXRlICopLTEpIHsKKwkJZHByaW50aygoS0VSTl9ERUJVRyAidXNiYXVkaW86IG5vdGUsIHVzYl9hdWRpb19kaXNjb25uZWN0IGNhbGxlZCB3aXRoIC0xXG4iKSk7CisJCXJldHVybjsKKwl9CisJaWYgKCFzLT51c2JkZXYpIHsKKwkJZHByaW50aygoS0VSTl9ERUJVRyAidXNiYXVkaW86IGVycm9yLCAgdXNiX2F1ZGlvX2Rpc2Nvbm5lY3QgYWxyZWFkeSBjYWxsZWQgZm9yICVwIVxuIiwgcykpOworCQlyZXR1cm47CisJfQorCWRvd24oJm9wZW5fc2VtKTsKKwlsaXN0X2RlbF9pbml0KCZzLT5hdWRpb2Rldik7CisJcy0+dXNiZGV2ID0gTlVMTDsKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKKworCS8qIGRlcmVnaXN0ZXIgYWxsIGF1ZGlvIGFuZCBtaXhlciBkZXZpY2VzLCBzbyBubyBuZXcgcHJvY2Vzc2VzIGNhbiBvcGVuIHRoaXMgZGV2aWNlICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShhcywgJnMtPmF1ZGlvbGlzdCwgbGlzdCkgeworCQl1c2Jpbl9kaXNjKGFzKTsKKwkJdXNib3V0X2Rpc2MoYXMpOworCQl3YWtlX3VwKCZhcy0+dXNiaW4uZG1hLndhaXQpOworCQl3YWtlX3VwKCZhcy0+dXNib3V0LmRtYS53YWl0KTsKKwkJaWYgKGFzLT5kZXZfYXVkaW8gPj0gMCkgeworCQkJdW5yZWdpc3Rlcl9zb3VuZF9kc3AoYXMtPmRldl9hdWRpbyk7CisJCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogdW5yZWdpc3RlciBkc3AgMTQsJWRcbiIsIGFzLT5kZXZfYXVkaW8pOworCQl9CisJCWFzLT5kZXZfYXVkaW8gPSAtMTsKKwl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeShtcywgJnMtPm1peGVybGlzdCwgbGlzdCkgeworCQlpZiAobXMtPmRldl9taXhlciA+PSAwKSB7CisJCQl1bnJlZ2lzdGVyX3NvdW5kX21peGVyKG1zLT5kZXZfbWl4ZXIpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiYXVkaW86IHVucmVnaXN0ZXIgbWl4ZXIgMTQsJWRcbiIsIG1zLT5kZXZfbWl4ZXIpOworCQl9CisJCW1zLT5kZXZfbWl4ZXIgPSAtMTsKKwl9CisJcmVsZWFzZShzKTsKKwl3YWtlX3VwKCZvcGVuX3dhaXQpOworfQorCitzdGF0aWMgaW50IF9faW5pdCB1c2JfYXVkaW9faW5pdCh2b2lkKQoreworCWludCByZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJnVzYl9hdWRpb19kcml2ZXIpOworCWlmIChyZXN1bHQgPT0gMCkgCisJCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2JfYXVkaW9fY2xlYW51cCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZ1c2JfYXVkaW9fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNiX2F1ZGlvX2luaXQpOworbW9kdWxlX2V4aXQodXNiX2F1ZGlvX2NsZWFudXApOworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2F1ZGlvLmggYi9kcml2ZXJzL3VzYi9jbGFzcy9hdWRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OTE2ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9hdWRpby5oCkBAIC0wLDAgKzEsMTEwIEBACisjZGVmaW5lIENTX0FVRElPX1VOREVGSU5FRAkJMHgyMAorI2RlZmluZSBDU19BVURJT19ERVZJQ0UJCQkweDIxCisjZGVmaW5lIENTX0FVRElPX0NPTkZJR1VSQVRJT04JCTB4MjIKKyNkZWZpbmUgQ1NfQVVESU9fU1RSSU5HCQkJMHgyMworI2RlZmluZSBDU19BVURJT19JTlRFUkZBQ0UJCTB4MjQKKyNkZWZpbmUgQ1NfQVVESU9fRU5EUE9JTlQJCTB4MjUKKworI2RlZmluZSBIRUFERVIJCQkJMHgwMQorI2RlZmluZSBJTlBVVF9URVJNSU5BTAkJCTB4MDIKKyNkZWZpbmUgT1VUUFVUX1RFUk1JTkFMCQkJMHgwMworI2RlZmluZSBNSVhFUl9VTklUCQkJMHgwNAorI2RlZmluZSBTRUxFQ1RPUl9VTklUCQkJMHgwNQorI2RlZmluZSBGRUFUVVJFX1VOSVQJCQkweDA2CisjZGVmaW5lIFBST0NFU1NJTkdfVU5JVAkJCTB4MDcKKyNkZWZpbmUgRVhURU5TSU9OX1VOSVQJCQkweDA4CisKKyNkZWZpbmUgQVNfR0VORVJBTAkJCTB4MDEKKyNkZWZpbmUgRk9STUFUX1RZUEUJCQkweDAyCisjZGVmaW5lIEZPUk1BVF9TUEVDSUZJQwkJCTB4MDMKKworI2RlZmluZSBFUF9HRU5FUkFMCQkJMHgwMQorCisjZGVmaW5lIE1BWF9DSEFOCQkJOQorI2RlZmluZSBNQVhfRlJFUQkJCTE2CisjZGVmaW5lIE1BWF9JRkFDRQkJCTgKKyNkZWZpbmUgTUFYX0ZPUk1BVAkJCTgKKyNkZWZpbmUgTUFYX0FMVAkJCQkzMiAJLyogU29ycnksIHdlIG5lZWQgcXVpdGUgYSBmZXcgZm9yIHRoZSBQaGlsaXBzIHdlYmNhbXMgKi8KKworc3RydWN0IHVzYl9hdWRpb190ZXJtaW5hbAorewkKKwl1OAlmbGFnczsKKwl1OAlhc3NvYzsKKwl1MTYJdHlwZTsJCQkvKiBNaWMgZXRjICovCisJdTgJY2hhbm5lbHM7CisJdTgJc291cmNlOworCXUxNgljaGFuY2ZnOworfTsKKworc3RydWN0IHVzYl9hdWRpb19mb3JtYXQKK3sKKwl1OAl0eXBlOworCXU4CWNoYW5uZWxzOworCXU4CW51bV9mcmVxOworCXU4CXNmejsKKwl1OAliaXRzOworCXUxNglmcmVxW01BWF9GUkVRXTsKK307CisKK3N0cnVjdCB1c2JfYXVkaW9faW50ZXJmYWNlCit7CisJdTgJdGVybWluYWw7CisJdTgJZGVsYXk7CisJdTE2CW51bV9mb3JtYXRzOworCXUxNglmb3JtYXRfdHlwZTsKKwl1OAlmbGFnczsKKwl1OAlpZGxlY29uZjsJLyogSWRsZSBjb25maWcgKi8KKyNkZWZpbmUgQVVfSUZBQ0VfRk9VTkQJMQorCXN0cnVjdCAgdXNiX2F1ZGlvX2Zvcm1hdCBmb3JtYXRbTUFYX0ZPUk1BVF07Cit9OworCitzdHJ1Y3QgdXNiX2F1ZGlvX2RldmljZQoreworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1OAltaXhlcjsKKwl1OAlzZWxlY3RvcjsKKwl2b2lkCSppcnFfaGFuZGxlOworCXU4CW51bV9jaGFubmVsczsKKwl1OAludW1fZHNwX2lmYWNlOworCXU4CWNoYW5uZWxfbWFwW01BWF9DSEFOXTsKKwlzdHJ1Y3QgdXNiX2F1ZGlvX3Rlcm1pbmFsIHRlcm1pbmFsW01BWF9DSEFOXTsKKwlzdHJ1Y3QgdXNiX2F1ZGlvX2ludGVyZmFjZSBpbnRlcmZhY2VbTUFYX0lGQUNFXVtNQVhfQUxUXTsKK307CisKKworCisvKiBBdWRpbyBDbGFzcyBzcGVjaWZpYyBSZXF1ZXN0IENvZGVzICovCisKKyNkZWZpbmUgU0VUX0NVUiAgICAweDAxCisjZGVmaW5lIEdFVF9DVVIgICAgMHg4MQorI2RlZmluZSBTRVRfTUlOICAgIDB4MDIKKyNkZWZpbmUgR0VUX01JTiAgICAweDgyCisjZGVmaW5lIFNFVF9NQVggICAgMHgwMworI2RlZmluZSBHRVRfTUFYICAgIDB4ODMKKyNkZWZpbmUgU0VUX1JFUyAgICAweDA0CisjZGVmaW5lIEdFVF9SRVMgICAgMHg4NAorI2RlZmluZSBTRVRfTUVNICAgIDB4MDUKKyNkZWZpbmUgR0VUX01FTSAgICAweDg1CisjZGVmaW5lIEdFVF9TVEFUICAgMHhmZgorCisvKiBUZXJtaW5hbCBDb250cm9sIFNlbGVjdG9ycyAqLworCisjZGVmaW5lIENPUFlfUFJPVEVDVF9DT05UUk9MICAgICAgIDB4MDEKKworLyogRmVhdHVyZSBVbml0IENvbnRyb2wgU2VsZWN0b3JzICovCisKKyNkZWZpbmUgTVVURV9DT05UUk9MICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBWT0xVTUVfQ09OVFJPTCAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEJBU1NfQ09OVFJPTCAgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgTUlEX0NPTlRST0wgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBUUkVCTEVfQ09OVFJPTCAgICAgICAgICAgICAweDA1CisjZGVmaW5lIEdSQVBISUNfRVFVQUxJWkVSX0NPTlRST0wgIDB4MDYKKyNkZWZpbmUgQVVUT01BVElDX0dBSU5fQ09OVFJPTCAgICAgMHgwNworI2RlZmluZSBERUxBWV9DT05UUk9MICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIEJBU1NfQk9PU1RfQ09OVFJPTCAgICAgICAgIDB4MDkKKyNkZWZpbmUgTE9VRE5FU1NfQ09OVFJPTCAgICAgICAgICAgMHgwYQorCisvKiBFbmRwb2ludCBDb250cm9sIFNlbGVjdG9ycyAqLworCisjZGVmaW5lIFNBTVBMSU5HX0ZSRVFfQ09OVFJPTCAgICAgIDB4MDEKKyNkZWZpbmUgUElUQ0hfQ09OVFJPTCAgICAgICAgICAgICAgMHgwMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvYmx1ZXR0eS5jIGIvZHJpdmVycy91c2IvY2xhc3MvYmx1ZXR0eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYWM2NWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9ibHVldHR5LmMKQEAgLTAsMCArMSwxMjc5IEBACisvKgorICogYmx1ZXR0eS5jICAgVmVyc2lvbiAwLjEzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxIEdyZWcgS3JvYWgtSGFydG1hbgk8Z3JlZ0Brcm9haC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTWFyayBEb3VnbGFzIENvcm5lcgk8bWNvcm5lckB1bWljaC5lZHU+CisgKgorICogVVNCIEJsdWV0b290aCBUVFkgZHJpdmVyLCBiYXNlZCBvbiB0aGUgQmx1ZXRvb3RoIFNwZWMgdmVyc2lvbiAxLjBCCisgKiAKKyAqICgyMDAxLzExLzMwKSBWZXJzaW9uIDAuMTMgZ2toCisgKgktIGFkZGVkIGxvY2tpbmcgcGF0Y2ggZnJvbSBNYXNvb2R1ciBSYWhtYW4gPHJtYXNvb2R1QGluLmlibS5jb20+CisgKgktIHJlbW92ZWQgYWN0aXZlIHZhcmlhYmxlLCBhcyBvcGVuX2NvdW50IHdpbGwgZG8uCisgKgorICogKDIwMDEvMDcvMDkpIFZlcnNpb24gMC4xMiBna2gKKyAqCS0gcmVtb3ZlZCBpbl9pbnRlcnJ1cHQoKSBjYWxsLCBhcyBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gZG8gCisgKgkgIHRoYXQgYW55bW9yZS4KKyAqCisgKiAoMjAwMS8wNi8wNSkgVmVyc2lvbiAwLjExIGdraAorICoJLSBGaXhlZCBwcm9ibGVtIHdpdGggcmVhZCB1cmIgc3RhdHVzIHNheWluZyB0aGF0IHdlIGhhdmUgc2h1dGRvd24sCisgKgkgIGFuZCB0aGF0IHdlIHNob3VsZG4ndCByZXN1Ym1pdCB0aGUgdXJiLiAgUGF0Y2ggZnJvbSB1bmtub3duLgorICoKKyAqICgyMDAxLzA1LzI4KSBWZXJzaW9uIDAuMTAgZ2toCisgKgktIEZpeGVkIHByb2JsZW0gd2l0aCB1c2luZyBkYXRhIGZyb20gdXNlcnNwYWNlIGluIHRoZSBibHVldG9vdGhfd3JpdGUKKyAqCSAgZnVuY3Rpb24gYXMgZm91bmQgYnkgdGhlIENIRUNLRVIgcHJvamVjdC4KKyAqCS0gQWRkZWQgYSBidWZmZXIgdG8gdGhlIHdyaXRlX3VyYl9wb29sIHdoaWNoIHJlZHVjZXMgdGhlIG51bWJlciBvZgorICoJICBidWZmZXJzIGJlaW5nIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCBmb3IgZXZlciB3cml0ZS4gIEFsc28gY2xlYW5zCisgKgkgIHVwIHRoZSBsb2dpYyBhIGJpdC4KKyAqCS0gQWRkZWQgYSBidWZmZXIgdG8gdGhlIGNvbnRyb2xfdXJiX3Bvb2wgd2hpY2ggZml4ZXMgYSBtZW1vcnkgbGVhaworICoJICB3aGVuIHRoZSBkZXZpY2UgaXMgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0uCisgKgorICogKDIwMDEvMDUvMjgpIFZlcnNpb24gMC45IGdraAorICoJRml4ZWQgcHJvYmxlbSB3aXRoIGJsdWV0b290aD09TlVMTCBmb3IgYmx1ZXRvb3RoX3JlYWRfYnVsa19jYWxsYmFjaworICoJd2hpY2ggd2FzIGZvdW5kIGJ5IGJvdGggdGhlIENIRUNLRVIgcHJvamVjdCBhbmQgTWlra28gUmFoa29uZW4uCisgKgorICogKDA4LzA0LzIwMDEpIGdiCisgKglJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgorICoKKyAqICgyMDAxLzAzLzEwKSBWZXJzaW9uIDAuOCBna2gKKyAqCUZpeGVkIHByb2JsZW0gd2l0aCBub3QgdW5saW5raW5nIGludGVycnVwdCB1cmIgb24gZGV2aWNlIGNsb3NlCisgKglhbmQgcmVzdWJtaXR0aW5nIHRoZSByZWFkIHVyYiBvbiBlcnJvciB3aXRoIGJsdWV0b290aCBzdHJ1Y3QuCisgKglUaGFua3MgdG8gTmFyYXlhbiBNb2hhbnJhbSA8bmFyYXlhbkBSb3ZpbmdOZXR3b3Jrcy5jb20+IGZvciB0aGUKKyAqCWZpeGVzLgorICoKKyAqICgxMS8yOS8yMDAwKSBWZXJzaW9uIDAuNyBna2gKKyAqCUZpeGVkIHByb2JsZW0gd2l0aCBvdmVycnVubmluZyB0aGUgdHR5IGZsaXAgYnVmZmVyLgorICoJUmVtb3ZlZCB1bm5lZWRlZCBOVUxMIHBvaW50ZXIgaW5pdGlhbGl6YXRpb24uCisgKgorICogKDEwLzA1LzIwMDApIFZlcnNpb24gMC42IGdraAorICoJRml4ZWQgYnVnIHdpdGggdXJiLT5kZXYgbm90IGJlaW5nIHNldCBwcm9wZXJseSwgbm93IHRoYXQgdGhlIHVzYgorICoJY29yZSBuZWVkcyBpdC4KKyAqCUdvdCBhIHJlYWwgbWFqb3IgaWQgbnVtYmVyIGFuZCBuYW1lLgorICoKKyAqICgwOC8wNi8yMDAwKSBWZXJzaW9uIDAuNSBna2gKKyAqCUZpeGVkIHByb2JsZW0gb2Ygbm90IHJlc3VibWl0dGluZyB0aGUgYnVsayByZWFkIHVyYiBpZiB0aGVyZSBpcworICoJYW4gZXJyb3IgaW4gdGhlIGNhbGxiYWNrLiAgRXJpY3Nzb24gZGV2aWNlcyBzZWVtIHRvIG5lZWQgdGhpcy4KKyAqCisgKiAoMDcvMTEvMjAwMCkgVmVyc2lvbiAwLjQgZ2toCisgKglGaXhlZCBidWcgaW4gZGlzY29ubmVjdCBmb3Igd2hlbiB3ZSBjYWxsIHR0eV9oYW5ndXAKKyAqCUZpeGVkIGJ1ZyBpbiBibHVldG9vdGhfY3RybF9tc2cgd2hlcmUgdGhlIGJsdWV0b290aCBzdHJ1Y3Qgd2FzIG5vdAorICoJZ2V0dGluZyBhdHRhY2hlZCB0byB0aGUgY29udHJvbCB1cmIgcHJvcGVybHkuCisgKglGaXhlZCBidWcgaW4gYmx1ZXRvb3RoX3dyaXRlIHdoZXJlIHdlIHBheSBhdHRlbnRpb24gdG8gdGhlIHJlc3VsdAorICoJb2YgYmx1ZXRvb3RoX2N0cmxfbXNnLgorICoKKyAqICgwOC8wMy8yMDAwKSBWZXJzaW9uIDAuMyBna2ggbWRjCisgKglNZXJnZWQgaW4gTWFyaydzIGNoYW5nZXMgdG8gbWFrZSB0aGUgZHJpdmVyIHBsYXkgbmljZSB3aXRoIHRoZSBBeGlzCisgKglzdGFjay4KKyAqCU1hZGUgdGhlIHdyaXRlIGJ1bGsgdXNlIGFuIHVyYiBwb29sIHRvIGVuYWJsZSBsYXJnZXIgdHJhbnNmZXJzIHdpdGgKKyAqCWZld2VyIGNhbGxzIHRvIHRoZSBkcml2ZXIuCisgKglGaXhlZCBvZmYgYnkgb25lIGJ1ZyBpbiBhY2wgcGt0IHJlY2VpdmUKKyAqCU1hZGUgcGFja2V0IGNvdW50ZXJzIHNwZWNpZmljIHRvIGVhY2ggYmx1ZXRvb3RoIGRldmljZSAKKyAqCUFkZGVkIGNoZWNrcyBmb3IgemVybyBsZW5ndGggY2FsbGJhY2tzCisgKglBZGRlZCBidWZmZXJzIGZvciBpbnQgYW5kIGJ1bGsgcGFja2V0cy4gIEhhZCB0byBkbyB0aGlzIG90aGVyd2lzZSAKKyAqCXBhY2tldCB0eXBlcyBjb3VsZCBpbnRlcm1pbmdsZS4KKyAqCU1hZGUgYSBjb250cm9sIHVyYiBwb29sIGZvciB0aGUgY29udHJvbCBtZXNzYWdlcy4KKyAqCisgKiAoMDcvMTEvMjAwMCkgVmVyc2lvbiAwLjIgZ2toCisgKglGaXhlZCBhIHNtYWxsIGJ1ZyBmb3VuZCBieSBOaWxzIEZhZXJiZXIgaW4gdGhlIHVzYl9ibHVldG9vdGhfcHJvYmUgCisgKglmdW5jdGlvbi4KKyAqCisgKiAoMDcvMDkvMjAwMCkgVmVyc2lvbiAwLjEgZ2toCisgKglJbml0aWFsIHJlbGVhc2UuIEhhcyBzdXBwb3J0IGZvciBzZW5kaW5nIEFDTCBkYXRhICh3aGljaCBpcyByZWFsbHkganVzdAorICoJYSBIQ0kgZnJhbWUuKSBSYXcgSENJIGNvbW1hbmRzIGFuZCBIQ0kgZXZlbnRzIGFyZSBub3Qgc3VwcG9ydGVkLgorICoJQSBpb2N0bCB3aWxsIHByb2JhYmx5IGJlIG5lZWRlZCBmb3IgdGhlIEhDSSBjb21tYW5kcyBhbmQgZXZlbnRzIGluIHRoZQorICoJZnV0dXJlLiBBbGwgaXNvY2ggZW5kcG9pbnRzIGFyZSBpZ25vcmVkIGF0IHRoaXMgdGltZSBhbHNvLgorICoJVGhpcyBkcml2ZXIgc2hvdWxkIHdvcmsgZm9yIGFsbCBjdXJyZW50bHkgc2hpcHBpbmcgVVNCIEJsdWV0b290aCAKKyAqCWRldmljZXMgYXQgdGhpcyB0aW1lIDopCisgKiAKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2RlZmluZSBERUJVRworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC4xMyIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiR3JlZyBLcm9haC1IYXJ0bWFuLCBNYXJrIERvdWdsYXMgQ29ybmVyIgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIEJsdWV0b290aCB0dHkgZHJpdmVyIgorCisvKiBkZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBnb29kICovCisvKiNkZWZpbmUJQlRCVUdHWUhBUkRXQVJFICovCisKKy8qIENsYXNzLCBTdWJDbGFzcywgYW5kIFByb3RvY29sIGNvZGVzIHRoYXQgZGVzY3JpYmUgYSBCbHVldG9vdGggZGV2aWNlICovCisjZGVmaW5lIFdJUkVMRVNTX0NMQVNTX0NPREUJCQkweGUwCisjZGVmaW5lIFJGX1NVQkNMQVNTX0NPREUJCQkweDAxCisjZGVmaW5lIEJMVUVUT09USF9QUk9HUkFNTUlOR19QUk9UT0NPTF9DT0RFCTB4MDEKKworCisjZGVmaW5lIEJMVUVUT09USF9UVFlfTUFKT1IJMjE2CS8qIHJlYWwgZGV2aWNlIG5vZGUgbWFqb3IgaWQgKi8KKyNkZWZpbmUgQkxVRVRPT1RIX1RUWV9NSU5PUlMJMjU2CS8qIHdob2xlIGxvdHRhIGJsdWV0b290aCBkZXZpY2VzICovCisKKyNkZWZpbmUgVVNCX0JMVUVUT09USF9NQUdJQwkweDZkMDIJLyogbWFnaWMgbnVtYmVyIGZvciBibHVldG9vdGggc3RydWN0ICovCisKKyNkZWZpbmUgQkxVRVRPT1RIX0NPTlRST0xfUkVRVUVTVF9UWVBFCTB4MjAKKworLyogQmx1ZXRvb3RoIHBhY2tldCB0eXBlcyAqLworI2RlZmluZSBDTURfUEtUCQkJMHgwMQorI2RlZmluZSBBQ0xfUEtUCQkJMHgwMgorI2RlZmluZSBTQ09fUEtUCQkJMHgwMworI2RlZmluZSBFVkVOVF9QS1QJCTB4MDQKKyNkZWZpbmUgRVJST1JfUEtUCQkweDA1CisjZGVmaW5lIE5FR19QS1QJCQkweDA2CisKKy8qIE1lc3NhZ2Ugc2l6ZXMgKi8KKyNkZWZpbmUgTUFYX0VWRU5UX1NJWkUJCTB4RkYKKyNkZWZpbmUgRVZFTlRfSERSX1NJWkUJCTMJLyogMiBmb3IgdGhlIGhlYWRlciArIDEgZm9yIHRoZSB0eXBlIGluZGljYXRvciAqLworI2RlZmluZSBFVkVOVF9CVUZGRVJfU0laRQkoTUFYX0VWRU5UX1NJWkUgKyBFVkVOVF9IRFJfU0laRSkKKworI2RlZmluZSBNQVhfQUNMX1NJWkUJCTB4RkZGRgorI2RlZmluZSBBQ0xfSERSX1NJWkUJCTUJLyogNCBmb3IgdGhlIGhlYWRlciArIDEgZm9yIHRoZSB0eXBlIGluZGljYXRvciAqLworI2RlZmluZSBBQ0xfQlVGRkVSX1NJWkUJCShNQVhfQUNMX1NJWkUgKyBBQ0xfSERSX1NJWkUpCisKKy8qIHBhcml0eSBjaGVjayBmbGFnICovCisjZGVmaW5lIFJFTEVWQU5UX0lGTEFHKGlmbGFnKQkoaWZsYWcgJiAoSUdOQlJLfEJSS0lOVHxJR05QQVJ8UEFSTVJLfElOUENLKSkKKworI2RlZmluZSBDSEFSMklOVDE2KGMxLGMwKQkoKCh1MzIpKChjMSkgJiAweGZmKSA8PCA4KSArICh1MzIpKChjMCkgJiAweGZmKSkKKworI2RlZmluZSBOVU1fQlVMS19VUkJTCQkyNAorI2RlZmluZSBOVU1fQ09OVFJPTF9VUkJTCTE2CisKK3N0cnVjdCB1c2JfYmx1ZXRvb3RoIHsKKwlpbnQJCQltYWdpYzsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqCWRldjsKKwlzdHJ1Y3QgdHR5X2RyaXZlciAqCXR0eV9kcml2ZXI7CS8qIHRoZSB0dHlfZHJpdmVyIGZvciB0aGlzIGRldmljZSAqLworCXN0cnVjdCB0dHlfc3RydWN0ICoJdHR5OwkJLyogdGhlIGNvcnJlc3BvbmRpbmcgdHR5IGZvciB0aGlzIHBvcnQgKi8KKworCXVuc2lnbmVkIGNoYXIJCW1pbm9yOwkJLyogdGhlIHN0YXJ0aW5nIG1pbm9yIG51bWJlciBmb3IgdGhpcyBkZXZpY2UgKi8KKwlpbnQJCQl0aHJvdHRsZTsJLyogdGhyb3R0bGVkIGJ5IHR0eSBsYXllciAqLworCWludAkJCW9wZW5fY291bnQ7CisJCisJX191OAkJCWNvbnRyb2xfb3V0X2JJbnRlcmZhY2VOdW07CisJc3RydWN0IHVyYiAqCQljb250cm9sX3VyYl9wb29sW05VTV9DT05UUk9MX1VSQlNdOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJZHJbTlVNX0NPTlRST0xfVVJCU107CisKKwl1bnNpZ25lZCBjaGFyICoJCWludGVycnVwdF9pbl9idWZmZXI7CisJc3RydWN0IHVyYiAqCQlpbnRlcnJ1cHRfaW5fdXJiOworCV9fdTgJCQlpbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzOworCV9fdTgJCQlpbnRlcnJ1cHRfaW5faW50ZXJ2YWw7CisJaW50CQkJaW50ZXJydXB0X2luX2J1ZmZlcl9zaXplOworCisJdW5zaWduZWQgY2hhciAqCQlidWxrX2luX2J1ZmZlcjsKKwlzdHJ1Y3QgdXJiICoJCXJlYWRfdXJiOworCV9fdTgJCQlidWxrX2luX2VuZHBvaW50QWRkcmVzczsKKwlpbnQJCQlidWxrX2luX2J1ZmZlcl9zaXplOworCisJaW50CQkJYnVsa19vdXRfYnVmZmVyX3NpemU7CisJX191OAkJCWJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzczsKKworCXdhaXRfcXVldWVfaGVhZF90CXdyaXRlX3dhaXQ7CisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCQl3b3JrOwkvKiB3b3JrIHF1ZXVlIGVudHJ5IGZvciBsaW5lIGRpc2NpcGxpbmUgd2FraW5nIHVwICovCisJCisJdW5zaWduZWQgaW50CQlpbnRfcGFja2V0X3BvczsKKwl1bnNpZ25lZCBjaGFyCQlpbnRfYnVmZmVyW0VWRU5UX0JVRkZFUl9TSVpFXTsKKwl1bnNpZ25lZCBpbnQJCWJ1bGtfcGFja2V0X3BvczsKKwl1bnNpZ25lZCBjaGFyCQlidWxrX2J1ZmZlcltBQ0xfQlVGRkVSX1NJWkVdOwkvKiA2NGsgcHJlYWxsb2NhdGVkLCBmaXg/ICovCisJc3RydWN0IHNlbWFwaG9yZQlsb2NrOworfTsKKworCisvKiBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzICovCitzdGF0aWMgaW50ICBibHVldG9vdGhfb3BlbgkJKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIGJsdWV0b290aF9jbG9zZQkJKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIGJsdWV0b290aF93cml0ZQkJKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKK3N0YXRpYyBpbnQgIGJsdWV0b290aF93cml0ZV9yb29tCShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyBpbnQgIGJsdWV0b290aF9jaGFyc19pbl9idWZmZXIJKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworc3RhdGljIHZvaWQgYmx1ZXRvb3RoX3Rocm90dGxlCQkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgdm9pZCBibHVldG9vdGhfdW50aHJvdHRsZQkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgaW50ICBibHVldG9vdGhfaW9jdGwJCShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIHZvaWQgYmx1ZXRvb3RoX3NldF90ZXJtaW9zCShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqb2xkKTsKKworc3RhdGljIHZvaWQgYmx1ZXRvb3RoX2ludF9jYWxsYmFjawkJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgYmx1ZXRvb3RoX2N0cmxfY2FsbGJhY2sJCShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIGJsdWV0b290aF9yZWFkX2J1bGtfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgYmx1ZXRvb3RoX3dyaXRlX2J1bGtfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCitzdGF0aWMgaW50IHVzYl9ibHVldG9vdGhfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCAKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIHZvaWQgdXNiX2JsdWV0b290aF9kaXNjb25uZWN0CShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl9ibHVldG9vdGhfaWRzIFtdID0geworCXsgVVNCX0RFVklDRV9JTkZPKFdJUkVMRVNTX0NMQVNTX0NPREUsIFJGX1NVQkNMQVNTX0NPREUsIEJMVUVUT09USF9QUk9HUkFNTUlOR19QUk9UT0NPTF9DT0RFKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHVzYl9ibHVldG9vdGhfaWRzKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9ibHVldG9vdGhfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJibHVldHR5IiwKKwkucHJvYmUgPQl1c2JfYmx1ZXRvb3RoX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX2JsdWV0b290aF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CXVzYl9ibHVldG9vdGhfaWRzLAorfTsKKworc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyCSpibHVldG9vdGhfdHR5X2RyaXZlcjsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2JsdWV0b290aAkqYmx1ZXRvb3RoX3RhYmxlW0JMVUVUT09USF9UVFlfTUlOT1JTXTsKKworCitzdGF0aWMgaW5saW5lIGludCBibHVldG9vdGhfcGFyYW5vaWFfY2hlY2sgKHN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGgsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uKQoreworCWlmICghYmx1ZXRvb3RoKSB7CisJCWRiZygiJXMgLSBibHVldG9vdGggPT0gTlVMTCIsIGZ1bmN0aW9uKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoYmx1ZXRvb3RoLT5tYWdpYyAhPSBVU0JfQkxVRVRPT1RIX01BR0lDKSB7CisJCWRiZygiJXMgLSBiYWQgbWFnaWMgbnVtYmVyIGZvciBibHVldG9vdGgiLCBmdW5jdGlvbik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2JfYmx1ZXRvb3RoKiBnZXRfdXNiX2JsdWV0b290aCAoc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCwgY29uc3QgY2hhciAqZnVuY3Rpb24pCit7CisJaWYgKCFibHVldG9vdGggfHwgCisJICAgIGJsdWV0b290aF9wYXJhbm9pYV9jaGVjayAoYmx1ZXRvb3RoLCBmdW5jdGlvbikpIHsgCisJCS8qIHRoZW4gc2F5IHRoYXQgd2UgZG9uJ3QgaGF2ZSBhIHZhbGlkIHVzYl9ibHVldG9vdGggdGhpbmcsIHdoaWNoIHdpbGwKKwkJICogZW5kIHVwIGdlbmVyYXRpbmcgLUVOT0RFViByZXR1cm4gdmFsdWVzICovCisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBibHVldG9vdGg7Cit9CisKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNiX2JsdWV0b290aCAqZ2V0X2JsdWV0b290aF9ieV9pbmRleCAoaW50IGluZGV4KQoreworCXJldHVybiBibHVldG9vdGhfdGFibGVbaW5kZXhdOworfQorCisKK3N0YXRpYyBpbnQgYmx1ZXRvb3RoX2N0cmxfbXNnIChzdHJ1Y3QgdXNiX2JsdWV0b290aCAqYmx1ZXRvb3RoLCBpbnQgcmVxdWVzdCwgaW50IHZhbHVlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IHVyYiAqdXJiID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpkciA9IE5VTEw7CisJaW50IGk7CisJaW50IHN0YXR1czsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCS8qIHRyeSB0byBmaW5kIGEgZnJlZSB1cmIgaW4gb3VyIGxpc3QgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPTlRST0xfVVJCUzsgKytpKSB7CisJCWlmIChibHVldG9vdGgtPmNvbnRyb2xfdXJiX3Bvb2xbaV0tPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpIHsKKwkJCXVyYiA9IGJsdWV0b290aC0+Y29udHJvbF91cmJfcG9vbFtpXTsKKwkJCWRyID0gJmJsdWV0b290aC0+ZHJbaV07CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAodXJiID09IE5VTEwpIHsKKwkJZGJnICgiJXMgLSBubyBmcmVlIHVyYnMiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBrZWVwIGluY3JlYXNpbmcgdGhlIHVyYiB0cmFuc2ZlciBidWZmZXIgdG8gZml0IHRoZSBzaXplIG9mIHRoZSBtZXNzYWdlICovCisJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpIHsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jIChsZW4sIEdGUF9LRVJORUwpOworCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgeworCQkJZXJyICgiJXMgLSBvdXQgb2YgbWVtb3J5IiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPCBsZW4pIHsKKwkJa2ZyZWUgKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jIChsZW4sIEdGUF9LRVJORUwpOworCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgeworCQkJZXJyICgiJXMgLSBvdXQgb2YgbWVtb3J5IiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCW1lbWNweSAodXJiLT50cmFuc2Zlcl9idWZmZXIsIGJ1ZiwgbGVuKTsKKworCWRyLT5iUmVxdWVzdFR5cGU9IEJMVUVUT09USF9DT05UUk9MX1JFUVVFU1RfVFlQRTsKKwlkci0+YlJlcXVlc3QgPSByZXF1ZXN0OworCWRyLT53VmFsdWUgPSBjcHVfdG9fbGUxNigodTE2KSB2YWx1ZSk7CisJZHItPndJbmRleCA9IGNwdV90b19sZTE2KCh1MTYpIGJsdWV0b290aC0+Y29udHJvbF9vdXRfYkludGVyZmFjZU51bSk7CisJZHItPndMZW5ndGggPSBjcHVfdG9fbGUxNigodTE2KSBsZW4pOworCQorCXVzYl9maWxsX2NvbnRyb2xfdXJiICh1cmIsIGJsdWV0b290aC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoYmx1ZXRvb3RoLT5kZXYsIDApLAorCQkJICAodW5zaWduZWQgY2hhciopZHIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBsZW4sIGJsdWV0b290aF9jdHJsX2NhbGxiYWNrLCBibHVldG9vdGgpOworCisJLyogc2VuZCBpdCBkb3duIHRoZSBwaXBlICovCisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdHVzKQorCQlkYmcoIiVzIC0gdXNiX3N1Ym1pdF91cmIoY29udHJvbCkgZmFpbGVkIHdpdGggc3RhdHVzID0gJWQiLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCisJcmV0dXJuIHN0YXR1czsKK30KKworCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERyaXZlciB0dHkgaW50ZXJmYWNlIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBibHVldG9vdGhfb3BlbiAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKQoreworCXN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGg7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJLyogaW5pdGlhbGl6ZSB0aGUgcG9pbnRlciBpbmNhc2Ugc29tZXRoaW5nIGZhaWxzICovCisJdHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7CisKKwkvKiBnZXQgdGhlIGJsdWV0b290aCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdHR5IHBvaW50ZXIgKi8KKwlibHVldG9vdGggPSBnZXRfYmx1ZXRvb3RoX2J5X2luZGV4ICh0dHktPmluZGV4KTsKKworCWlmIChibHVldG9vdGhfcGFyYW5vaWFfY2hlY2sgKGJsdWV0b290aCwgX19GVU5DVElPTl9fKSkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkb3duICgmYmx1ZXRvb3RoLT5sb2NrKTsKKyAKKwkrK2JsdWV0b290aC0+b3Blbl9jb3VudDsKKwlpZiAoYmx1ZXRvb3RoLT5vcGVuX2NvdW50ID09IDEpIHsKKwkJLyogc2V0IHVwIG91ciBzdHJ1Y3R1cmUgbWFraW5nIHRoZSB0dHkgZHJpdmVyIHJlbWVtYmVyIG91ciBvYmplY3QsIGFuZCB1cyBpdCAqLworCQl0dHktPmRyaXZlcl9kYXRhID0gYmx1ZXRvb3RoOworCQlibHVldG9vdGgtPnR0eSA9IHR0eTsKKworCQkvKiBmb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMgdGhlIGRhdGEgdGhyb3VnaCwgCisJIAkqIG90aGVyd2lzZSBpdCBpcyBzY2hlZHVsZWQsIGFuZCB3aXRoIGhpZ2ggZGF0YSByYXRlcyAobGlrZSB3aXRoIE9IQ0kpIGRhdGEKKwkgCSogY2FuIGdldCBsb3N0LiAqLworCQlibHVldG9vdGgtPnR0eS0+bG93X2xhdGVuY3kgPSAxOworCQorCQkvKiBSZXNldCB0aGUgcGFja2V0IHBvc2l0aW9uIGNvdW50ZXJzICovCisJCWJsdWV0b290aC0+aW50X3BhY2tldF9wb3MgPSAwOworCQlibHVldG9vdGgtPmJ1bGtfcGFja2V0X3BvcyA9IDA7CisKKyNpZm5kZWYgQlRCVUdHWUhBUkRXQVJFCisJCS8qIFN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCisJCXVzYl9maWxsX2J1bGtfdXJiIChibHVldG9vdGgtPnJlYWRfdXJiLCBibHVldG9vdGgtPmRldiwgCisJCQkgICAgICAgdXNiX3JjdmJ1bGtwaXBlKGJsdWV0b290aC0+ZGV2LCBibHVldG9vdGgtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgICAgICBibHVldG9vdGgtPmJ1bGtfaW5fYnVmZmVyLAorCQkJICAgICAgIGJsdWV0b290aC0+YnVsa19pbl9idWZmZXJfc2l6ZSwKKwkJCSAgICAgICBibHVldG9vdGhfcmVhZF9idWxrX2NhbGxiYWNrLCBibHVldG9vdGgpOworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihibHVldG9vdGgtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihyZWFkIGJ1bGspIGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKyNlbmRpZgorCQl1c2JfZmlsbF9pbnRfdXJiIChibHVldG9vdGgtPmludGVycnVwdF9pbl91cmIsIGJsdWV0b290aC0+ZGV2LAorCQkJICAgICAgdXNiX3JjdmludHBpcGUoYmx1ZXRvb3RoLT5kZXYsIGJsdWV0b290aC0+aW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzcyksCisJCQkgICAgICBibHVldG9vdGgtPmludGVycnVwdF9pbl9idWZmZXIsCisJCQkgICAgICBibHVldG9vdGgtPmludGVycnVwdF9pbl9idWZmZXJfc2l6ZSwKKwkJCSAgICAgIGJsdWV0b290aF9pbnRfY2FsbGJhY2ssIGJsdWV0b290aCwKKwkJCSAgICAgIGJsdWV0b290aC0+aW50ZXJydXB0X2luX2ludGVydmFsKTsKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIoYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihpbnRlcnJ1cHQgaW4pIGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwl9CisJCisJdXAoJmJsdWV0b290aC0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBibHVldG9vdGhfY2xvc2UgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlscCkKK3sKKwlzdHJ1Y3QgdXNiX2JsdWV0b290aCAqYmx1ZXRvb3RoID0gZ2V0X3VzYl9ibHVldG9vdGggKChzdHJ1Y3QgdXNiX2JsdWV0b290aCAqKXR0eS0+ZHJpdmVyX2RhdGEsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoIWJsdWV0b290aCkgeworCQlyZXR1cm47CisJfQorCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoIWJsdWV0b290aC0+b3Blbl9jb3VudCkgeworCQlkYmcgKCIlcyAtIGRldmljZSBub3Qgb3BlbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWRvd24gKCZibHVldG9vdGgtPmxvY2spOworIAorCS0tYmx1ZXRvb3RoLT5vcGVuX2NvdW50OworCWlmIChibHVldG9vdGgtPm9wZW5fY291bnQgPD0gMCkgeworCQlibHVldG9vdGgtPm9wZW5fY291bnQgPSAwOworCisJCS8qIHNodXRkb3duIGFueSBpbi1mbGlnaHQgdXJicyB0aGF0IHdlIGtub3cgYWJvdXQgKi8KKwkJdXNiX2tpbGxfdXJiIChibHVldG9vdGgtPnJlYWRfdXJiKTsKKwkJdXNiX2tpbGxfdXJiIChibHVldG9vdGgtPmludGVycnVwdF9pbl91cmIpOworCX0KKwl1cCgmYmx1ZXRvb3RoLT5sb2NrKTsKK30KKworCitzdGF0aWMgaW50IGJsdWV0b290aF93cml0ZSAoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGggPSBnZXRfdXNiX2JsdWV0b290aCAoKHN0cnVjdCB1c2JfYmx1ZXRvb3RoICopdHR5LT5kcml2ZXJfZGF0YSwgX19GVU5DVElPTl9fKTsKKwlzdHJ1Y3QgdXJiICp1cmIgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgKnRlbXBfYnVmZmVyID0gTlVMTDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpjdXJyZW50X2J1ZmZlcjsKKwl1bnNpZ25lZCBjaGFyICp1cmJfYnVmZmVyOworCWludCBpOworCWludCByZXR2YWwgPSAwOworCisJaWYgKCFibHVldG9vdGgpIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGJnKCIlcyAtICVkIGJ5dGUocykiLCBfX0ZVTkNUSU9OX18sIGNvdW50KTsKKworCWlmICghYmx1ZXRvb3RoLT5vcGVuX2NvdW50KSB7CisJCWRiZyAoIiVzIC0gZGV2aWNlIG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY291bnQgPT0gMCkgeworCQlkYmcoIiVzIC0gd3JpdGUgcmVxdWVzdCBvZiAwIGJ5dGVzIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChjb3VudCA9PSAxKSB7CisJCWRiZygiJXMgLSB3cml0ZSByZXF1ZXN0IG9ubHkgaW5jbHVkZWQgdHlwZSAlZCIsIF9fRlVOQ1RJT05fXywgYnVmWzBdKTsKKwkJcmV0dXJuIDE7CisJfQorCisjaWZkZWYgREVCVUcKKwlwcmludGsgKEtFUk5fREVCVUcgX19GSUxFX18gIjogJXMgLSBsZW5ndGggPSAlZCwgZGF0YSA9ICIsIF9fRlVOQ1RJT05fXywgY291bnQpOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisJCXByaW50ayAoIiUuMnggIiwgYnVmW2ldKTsKKwl9CisJcHJpbnRrICgiXG4iKTsKKyNlbmRpZgorCisJY3VycmVudF9idWZmZXIgPSBidWY7CisKKwlzd2l0Y2ggKCpjdXJyZW50X2J1ZmZlcikgeworCQkvKiBGaXJzdCBieXRlIGluZGljYXRlcyB0aGUgdHlwZSBvZiBwYWNrZXQgKi8KKwkJY2FzZSBDTURfUEtUOgorCQkJLyogZGJnKCIlcy0gU2VuZCBjbWRfcGt0IGxlbjolZCIsIF9fRlVOQ1RJT05fXywgY291bnQpOyovCisKKwkJCXJldHZhbCA9IGJsdWV0b290aF9jdHJsX21zZyAoYmx1ZXRvb3RoLCAweDAwLCAweDAwLCAmY3VycmVudF9idWZmZXJbMV0sIGNvdW50LTEpOworCQkJaWYgKHJldHZhbCkgeworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJCXJldHZhbCA9IGNvdW50OworCQkJYnJlYWs7CisKKwkJY2FzZSBBQ0xfUEtUOgorCQkJKytjdXJyZW50X2J1ZmZlcjsKKwkJCS0tY291bnQ7CisKKwkJCXVyYl9idWZmZXIgPSBrbWFsbG9jIChjb3VudCwgR0ZQX0FUT01JQyk7CisJCQlpZiAoIXVyYl9idWZmZXIpIHsKKwkJCQlkZXZfZXJyKCZibHVldG9vdGgtPmRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCQlnb3RvIGV4aXQ7CisJCQl9CisKKwkJCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CisJCQlpZiAoIXVyYikgeworCQkJCWRldl9lcnIoJmJsdWV0b290aC0+ZGV2LT5kZXYsICJubyBtb3JlIGZyZWUgdXJic1xuIik7CisJCQkJa2ZyZWUodXJiX2J1ZmZlcik7CisJCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCQlnb3RvIGV4aXQ7CisJCQl9CisJCQltZW1jcHkgKHVyYl9idWZmZXIsIGN1cnJlbnRfYnVmZmVyLCBjb3VudCk7CisKKwkJCS8qIGJ1aWxkIHVwIG91ciB1cmIgKi8KKwkJCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgYmx1ZXRvb3RoLT5kZXYsIAorCQkJCQkgIHVzYl9zbmRidWxrcGlwZShibHVldG9vdGgtPmRldiwKKwkJCQkJCSAgCSAgYmx1ZXRvb3RoLT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAorCQkJCQkgIHVyYl9idWZmZXIsCisJCQkJCSAgY291bnQsCisJCQkJCSAgYmx1ZXRvb3RoX3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJCQkJCSAgYmx1ZXRvb3RoKTsKKworCisJCQkvKiBzZW5kIGl0IGRvd24gdGhlIHBpcGUgKi8KKwkJCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZCB3aXRoIGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJCQkJZ290byBleGl0OworCQkJfQorCisJCQkvKiB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgdXJiLCBzbyBsZXQgdGhlIGhvc3QgZHJpdmVyCisJCQkgKiByZWFsbHkgZnJlZSBpdCB3aGVuIGl0IGlzIGZpbmlzaGVkIHdpdGggaXQgKi8KKwkJCXVzYl9mcmVlX3VyYiAodXJiKTsKKwkJCXJldHZhbCA9IGNvdW50ICsgMTsKKwkJCWJyZWFrOworCQkKKwkJZGVmYXVsdCA6CisJCQlkYmcoIiVzIC0gdW5zdXBwb3J0ZWQgKGF0IHRoaXMgdGltZSkgd3JpdGUgdHlwZSIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJfQorCitleGl0OgorCWtmcmVlICh0ZW1wX2J1ZmZlcik7CisKKwlyZXR1cm4gcmV0dmFsOworfSAKKworCitzdGF0aWMgaW50IGJsdWV0b290aF93cml0ZV9yb29tIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KSAKK3sKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCS8qCisJICogV2UgcmVhbGx5IGNhbiB0YWtlIGFueXRoaW5nIHRoZSB1c2VyIHRocm93cyBhdCB1cworCSAqIGJ1dCBsZXQncyBwaWNrIGEgbmljZSBiaWcgbnVtYmVyIHRvIHRlbGwgdGhlIHR0eQorCSAqIGxheWVyIHRoYXQgd2UgaGF2ZSBsb3RzIG9mIGZyZWUgc3BhY2UKKwkgKi8KKwlyZXR1cm4gMjA0ODsKK30KKworCitzdGF0aWMgaW50IGJsdWV0b290aF9jaGFyc19pbl9idWZmZXIgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpIAoreworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJLyogCisJICogV2UgY2FuJ3QgcmVhbGx5IGFjY291bnQgZm9yIGhvdyBtdWNoIGRhdGEgd2UKKwkgKiBoYXZlIHNlbnQgb3V0LCBidXQgaGFzbid0IG1hZGUgaXQgdGhyb3VnaCB0byB0aGUKKwkgKiBkZXZpY2UsIHNvIGp1c3QgdGVsbCB0aGUgdHR5IGxheWVyIHRoYXQgZXZlcnl0aGluZworCSAqIGlzIGZsdXNoZWQuCisJICovCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgYmx1ZXRvb3RoX3Rocm90dGxlIChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSkKK3sKKwlzdHJ1Y3QgdXNiX2JsdWV0b290aCAqYmx1ZXRvb3RoID0gZ2V0X3VzYl9ibHVldG9vdGggKChzdHJ1Y3QgdXNiX2JsdWV0b290aCAqKXR0eS0+ZHJpdmVyX2RhdGEsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoIWJsdWV0b290aCkgeworCQlyZXR1cm47CisJfQorCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoIWJsdWV0b290aC0+b3Blbl9jb3VudCkgeworCQlkYmcgKCIlcyAtIGRldmljZSBub3Qgb3BlbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJCisJZGJnKCIlcyB1bnN1cHBvcnRlZCAoYXQgdGhpcyB0aW1lKSIsIF9fRlVOQ1RJT05fXyk7CisKKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQgYmx1ZXRvb3RoX3VudGhyb3R0bGUgKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KQoreworCXN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGggPSBnZXRfdXNiX2JsdWV0b290aCAoKHN0cnVjdCB1c2JfYmx1ZXRvb3RoICopdHR5LT5kcml2ZXJfZGF0YSwgX19GVU5DVElPTl9fKTsKKworCWlmICghYmx1ZXRvb3RoKSB7CisJCXJldHVybjsKKwl9CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmICghYmx1ZXRvb3RoLT5vcGVuX2NvdW50KSB7CisJCWRiZyAoIiVzIC0gZGV2aWNlIG5vdCBvcGVuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWRiZygiJXMgdW5zdXBwb3J0ZWQgKGF0IHRoaXMgdGltZSkiLCBfX0ZVTkNUSU9OX18pOworfQorCisKK3N0YXRpYyBpbnQgYmx1ZXRvb3RoX2lvY3RsIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGggPSBnZXRfdXNiX2JsdWV0b290aCAoKHN0cnVjdCB1c2JfYmx1ZXRvb3RoICopdHR5LT5kcml2ZXJfZGF0YSwgX19GVU5DVElPTl9fKTsKKworCWlmICghYmx1ZXRvb3RoKSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRiZygiJXMgLSBjbWQgMHglLjR4IiwgX19GVU5DVElPTl9fLCBjbWQpOworCisJaWYgKCFibHVldG9vdGgtPm9wZW5fY291bnQpIHsKKwkJZGJnICgiJXMgLSBkZXZpY2Ugbm90IG9wZW4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBGSVhNRSEhISAqLworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKKworc3RhdGljIHZvaWQgYmx1ZXRvb3RoX3NldF90ZXJtaW9zIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqIG9sZCkKK3sKKwlzdHJ1Y3QgdXNiX2JsdWV0b290aCAqYmx1ZXRvb3RoID0gZ2V0X3VzYl9ibHVldG9vdGggKChzdHJ1Y3QgdXNiX2JsdWV0b290aCAqKXR0eS0+ZHJpdmVyX2RhdGEsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoIWJsdWV0b290aCkgeworCQlyZXR1cm47CisJfQorCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoIWJsdWV0b290aC0+b3Blbl9jb3VudCkgeworCQlkYmcgKCIlcyAtIGRldmljZSBub3Qgb3BlbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBGSVhNRSEhISAqLworCisJcmV0dXJuOworfQorCisKKyNpZmRlZiBCVEJVR0dZSEFSRFdBUkUKK3ZvaWQgYnR1c2JfZW5hYmxlX2J1bGtfcmVhZChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KXsKKwlzdHJ1Y3QgdXNiX2JsdWV0b290aCAqYmx1ZXRvb3RoID0gZ2V0X3VzYl9ibHVldG9vdGggKChzdHJ1Y3QgdXNiX2JsdWV0b290aCAqKXR0eS0+ZHJpdmVyX2RhdGEsIF9fRlVOQ1RJT05fXyk7CisJaW50IHJlc3VsdDsKKworCWlmICghYmx1ZXRvb3RoKSB7CisJCXJldHVybjsKKwl9CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmICghYmx1ZXRvb3RoLT5vcGVuX2NvdW50KSB7CisJCWRiZyAoIiVzIC0gZGV2aWNlIG5vdCBvcGVuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChibHVldG9vdGgtPnJlYWRfdXJiKSB7CisJCXVzYl9maWxsX2J1bGtfdXJiKGJsdWV0b290aC0+cmVhZF91cmIsIGJsdWV0b290aC0+ZGV2LCAKKwkJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShibHVldG9vdGgtPmRldiwgYmx1ZXRvb3RoLT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQkgICAgICBibHVldG9vdGgtPmJ1bGtfaW5fYnVmZmVyLCBibHVldG9vdGgtPmJ1bGtfaW5fYnVmZmVyX3NpemUsIAorCQkJICAgICAgYmx1ZXRvb3RoX3JlYWRfYnVsa19jYWxsYmFjaywgYmx1ZXRvb3RoKTsKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIoYmx1ZXRvb3RoLT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZXN1bHQpCisJCQllcnIgKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwl9Cit9CisKK3ZvaWQgYnR1c2JfZGlzYWJsZV9idWxrX3JlYWQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSl7CisJc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCA9IGdldF91c2JfYmx1ZXRvb3RoICgoc3RydWN0IHVzYl9ibHVldG9vdGggKil0dHktPmRyaXZlcl9kYXRhLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKCFibHVldG9vdGgpIHsKKwkJcmV0dXJuOworCX0KKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKCFibHVldG9vdGgtPm9wZW5fY291bnQpIHsKKwkJZGJnICgiJXMgLSBkZXZpY2Ugbm90IG9wZW4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKChibHVldG9vdGgtPnJlYWRfdXJiKSAmJiAoYmx1ZXRvb3RoLT5yZWFkX3VyYi0+YWN0dWFsX2xlbmd0aCkpCisJCXVzYl9raWxsX3VyYihibHVldG9vdGgtPnJlYWRfdXJiKTsKK30KKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogdXJiIGNhbGxiYWNrIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3N0YXRpYyB2b2lkIGJsdWV0b290aF9pbnRfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCA9IGdldF91c2JfYmx1ZXRvb3RoICgoc3RydWN0IHVzYl9ibHVldG9vdGggKil1cmItPmNvbnRleHQsIF9fRlVOQ1RJT05fXyk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBjb3VudCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwl1bnNpZ25lZCBpbnQgcGFja2V0X3NpemU7CisJaW50IHN0YXR1czsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKCFibHVldG9vdGgpIHsKKwkJZGJnKCIlcyAtIGJhZCBibHVldG9vdGggcG9pbnRlciwgZXhpdGluZyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCWlmICghY291bnQpIHsKKwkJZGJnKCIlcyAtIHplcm8gbGVuZ3RoIGludCIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKworI2lmZGVmIERFQlVHCisJaWYgKGNvdW50KSB7CisJCXByaW50ayAoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiAlcy0gbGVuZ3RoID0gJWQsIGRhdGEgPSAiLCBfX0ZVTkNUSU9OX18sIGNvdW50KTsKKwkJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKwkJCXByaW50ayAoIiUuMnggIiwgZGF0YVtpXSk7CisJCX0KKwkJcHJpbnRrICgiXG4iKTsKKwl9CisjZW5kaWYKKworI2lmZGVmIEJUQlVHR1lIQVJEV0FSRQorCWlmICgoY291bnQgPj0gMikgJiYgKGRhdGFbMF0gPT0gMHhGRikgJiYgKGRhdGFbMV0gPT0gMHgwMCkpIHsKKwkJZGF0YSArPSAyOworCQljb3VudCAtPSAyOworCX0KKwlpZiAoY291bnQgPT0gMCkgeworCQl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCQlnb3RvIGV4aXQ7CisJfQorI2VuZGlmCisJLyogV2UgYWRkICBhIHBhY2tldCB0eXBlIGlkZW50aWZpZXIgdG8gdGhlIGJlZ2lubmluZyBvZiBlYWNoCisJICAgSENJIGZyYW1lLiAgVGhpcyBtYWtlcyB0aGUgZGF0YSBpbiB0aGUgdHR5IGxvb2sgbGlrZSBhCisJICAgc2VyaWFsIFVTQiBkZXZpY2VzLiAgRWFjaCBIQ0kgZnJhbWUgY2FuIGJlIGJyb2tlbiBhY3Jvc3MKKwkgICBtdWx0aXBsZSBVUkJzIHNvIHdlIGJ1ZmZlciB0aGVtIHVudGlsIHdlIGhhdmUgYSBmdWxsIGhjaQorCSAgIHBhY2tldCAqLworCisJaWYgKCFibHVldG9vdGgtPmludF9wYWNrZXRfcG9zKSB7CisJCWJsdWV0b290aC0+aW50X2J1ZmZlclswXSA9IEVWRU5UX1BLVDsKKwkJYmx1ZXRvb3RoLT5pbnRfcGFja2V0X3BvcysrOworCX0KKwkKKwlpZiAoYmx1ZXRvb3RoLT5pbnRfcGFja2V0X3BvcyArIGNvdW50ID4gRVZFTlRfQlVGRkVSX1NJWkUpIHsKKwkJZXJyKCIlcyAtIGV4Y2VlZGVkIEVWRU5UX0JVRkZFUl9TSVpFIiwgX19GVU5DVElPTl9fKTsKKwkJYmx1ZXRvb3RoLT5pbnRfcGFja2V0X3BvcyA9IDA7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltZW1jcHkgKCZibHVldG9vdGgtPmludF9idWZmZXJbYmx1ZXRvb3RoLT5pbnRfcGFja2V0X3Bvc10sCisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLCBjb3VudCk7CisJYmx1ZXRvb3RoLT5pbnRfcGFja2V0X3BvcyArPSBjb3VudDsKKwl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCisJaWYgKGJsdWV0b290aC0+aW50X3BhY2tldF9wb3MgPj0gRVZFTlRfSERSX1NJWkUpCisJCXBhY2tldF9zaXplID0gYmx1ZXRvb3RoLT5pbnRfYnVmZmVyWzJdOworCWVsc2UKKwkJZ290byBleGl0OworCisJaWYgKHBhY2tldF9zaXplICsgRVZFTlRfSERSX1NJWkUgPCBibHVldG9vdGgtPmludF9wYWNrZXRfcG9zKSB7CisJCWVycigiJXMgLSBwYWNrZXQgd2FzIHRvbyBsb25nIiwgX19GVU5DVElPTl9fKTsKKwkJYmx1ZXRvb3RoLT5pbnRfcGFja2V0X3BvcyA9IDA7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAocGFja2V0X3NpemUgKyBFVkVOVF9IRFJfU0laRSA9PSBibHVldG9vdGgtPmludF9wYWNrZXRfcG9zKSB7CisJCWZvciAoaSA9IDA7IGkgPCBibHVldG9vdGgtPmludF9wYWNrZXRfcG9zOyArK2kpIHsKKwkJCS8qIGlmIHdlIGluc2VydCBtb3JlIHRoYW4gVFRZX0ZMSVBCVUZfU0laRSBjaGFyYWN0ZXJzLCB3ZSBkcm9wIHRoZW0gKi8KKwkJCWlmIChibHVldG9vdGgtPnR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2goYmx1ZXRvb3RoLT50dHkpOworCQkJfQorCQkJdHR5X2luc2VydF9mbGlwX2NoYXIoYmx1ZXRvb3RoLT50dHksIGJsdWV0b290aC0+aW50X2J1ZmZlcltpXSwgMCk7CisJCX0KKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2goYmx1ZXRvb3RoLT50dHkpOworCisJCWJsdWV0b290aC0+aW50X3BhY2tldF9wb3MgPSAwOworCX0KKworZXhpdDoKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKQorCQllcnIgKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCisJCSAgICAgX19GVU5DVElPTl9fLCBzdGF0dXMpOworfQorCisKK3N0YXRpYyB2b2lkIGJsdWV0b290aF9jdHJsX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGggPSBnZXRfdXNiX2JsdWV0b290aCAoKHN0cnVjdCB1c2JfYmx1ZXRvb3RoICopdXJiLT5jb250ZXh0LCBfX0ZVTkNUSU9OX18pOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoIWJsdWV0b290aCkgeworCQlkYmcoIiVzIC0gYmFkIGJsdWV0b290aCBwb2ludGVyLCBleGl0aW5nIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorfQorCisKK3N0YXRpYyB2b2lkIGJsdWV0b290aF9yZWFkX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCA9IGdldF91c2JfYmx1ZXRvb3RoICgoc3RydWN0IHVzYl9ibHVldG9vdGggKil1cmItPmNvbnRleHQsIF9fRlVOQ1RJT05fXyk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXVuc2lnbmVkIGludCBjb3VudCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgcGFja2V0X3NpemU7CisJaW50IHJlc3VsdDsKKworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoIWJsdWV0b290aCkgeworCQlkYmcoIiVzIC0gYmFkIGJsdWV0b290aCBwb2ludGVyLCBleGl0aW5nIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCkgeyAgICAgICAgICAgICAgICAgICAKKwkJCWRiZygiJXMgLSBVUkIgY2FuY2VsZWQsIHdvbid0IHJlc2NoZWR1bGUiLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuOworCQl9CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoIWNvdW50KSB7CisJCWRiZygiJXMgLSB6ZXJvIGxlbmd0aCByZWFkIGJ1bGsiLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisjaWZkZWYgREVCVUcKKwlpZiAoY291bnQpIHsKKwkJcHJpbnRrIChLRVJOX0RFQlVHIF9fRklMRV9fICI6ICVzLSBsZW5ndGggPSAlZCwgZGF0YSA9ICIsIF9fRlVOQ1RJT05fXywgY291bnQpOworCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworCQkJcHJpbnRrICgiJS4yeCAiLCBkYXRhW2ldKTsKKwkJfQorCQlwcmludGsgKCJcbiIpOworCX0KKyNlbmRpZgorI2lmZGVmIEJUQlVHR1lIQVJEV0FSRQorCWlmICgoY291bnQgPT0gNCkgJiYgKGRhdGFbMF0gPT0gMHgwMCkgJiYgKGRhdGFbMV0gPT0gMHgwMCkKKwkgICAgJiYgKGRhdGFbMl0gPT0gMHgwMCkgJiYgKGRhdGFbM10gPT0gMHgwMCkpIHsKKwkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKwkJdXNiX2ZpbGxfYnVsa191cmIoYmx1ZXRvb3RoLT5yZWFkX3VyYiwgYmx1ZXRvb3RoLT5kZXYsIAorCQkJICAgICAgdXNiX3JjdmJ1bGtwaXBlKGJsdWV0b290aC0+ZGV2LCBibHVldG9vdGgtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgICAgIGJsdWV0b290aC0+YnVsa19pbl9idWZmZXIsIGJsdWV0b290aC0+YnVsa19pbl9idWZmZXJfc2l6ZSwgCisJCQkgICAgICBibHVldG9vdGhfcmVhZF9idWxrX2NhbGxiYWNrLCBibHVldG9vdGgpOworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihibHVldG9vdGgtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWVyciAoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCS8qIFdlIGFkZCAgYSBwYWNrZXQgdHlwZSBpZGVudGlmaWVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgZWFjaAorCSAgIEhDSSBmcmFtZS4gIFRoaXMgbWFrZXMgdGhlIGRhdGEgaW4gdGhlIHR0eSBsb29rIGxpa2UgYQorCSAgIHNlcmlhbCBVU0IgZGV2aWNlcy4gIEVhY2ggSENJIGZyYW1lIGNhbiBiZSBicm9rZW4gYWNyb3NzCisJICAgbXVsdGlwbGUgVVJCcyBzbyB3ZSBidWZmZXIgdGhlbSB1bnRpbCB3ZSBoYXZlIGEgZnVsbCBoY2kKKwkgICBwYWNrZXQgKi8KKwkKKwlpZiAoIWJsdWV0b290aC0+YnVsa19wYWNrZXRfcG9zKSB7CisJCWJsdWV0b290aC0+YnVsa19idWZmZXJbMF0gPSBBQ0xfUEtUOworCQlibHVldG9vdGgtPmJ1bGtfcGFja2V0X3BvcysrOworCX0KKworCWlmIChibHVldG9vdGgtPmJ1bGtfcGFja2V0X3BvcyArIGNvdW50ID4gQUNMX0JVRkZFUl9TSVpFKSB7CisJCWVycigiJXMgLSBleGNlZWRlZCBBQ0xfQlVGRkVSX1NJWkUiLCBfX0ZVTkNUSU9OX18pOworCQlibHVldG9vdGgtPmJ1bGtfcGFja2V0X3BvcyA9IDA7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltZW1jcHkgKCZibHVldG9vdGgtPmJ1bGtfYnVmZmVyW2JsdWV0b290aC0+YnVsa19wYWNrZXRfcG9zXSwKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIsIGNvdW50KTsKKwlibHVldG9vdGgtPmJ1bGtfcGFja2V0X3BvcyArPSBjb3VudDsKKwl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCisJaWYgKGJsdWV0b290aC0+YnVsa19wYWNrZXRfcG9zID49IEFDTF9IRFJfU0laRSkgeworCQlwYWNrZXRfc2l6ZSA9IENIQVIySU5UMTYoYmx1ZXRvb3RoLT5idWxrX2J1ZmZlcls0XSxibHVldG9vdGgtPmJ1bGtfYnVmZmVyWzNdKTsKKwl9IGVsc2UgeworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHBhY2tldF9zaXplICsgQUNMX0hEUl9TSVpFIDwgYmx1ZXRvb3RoLT5idWxrX3BhY2tldF9wb3MpIHsKKwkJZXJyKCIlcyAtIHBhY2tldCB3YXMgdG9vIGxvbmciLCBfX0ZVTkNUSU9OX18pOworCQlibHVldG9vdGgtPmJ1bGtfcGFja2V0X3BvcyA9IDA7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAocGFja2V0X3NpemUgKyBBQ0xfSERSX1NJWkUgPT0gYmx1ZXRvb3RoLT5idWxrX3BhY2tldF9wb3MpIHsKKwkJZm9yIChpID0gMDsgaSA8IGJsdWV0b290aC0+YnVsa19wYWNrZXRfcG9zOyArK2kpIHsKKwkJCS8qIGlmIHdlIGluc2VydCBtb3JlIHRoYW4gVFRZX0ZMSVBCVUZfU0laRSBjaGFyYWN0ZXJzLCB3ZSBkcm9wIHRoZW0uICovCisJCQlpZiAoYmx1ZXRvb3RoLT50dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkgeworCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKGJsdWV0b290aC0+dHR5KTsKKwkJCX0KKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKGJsdWV0b290aC0+dHR5LCBibHVldG9vdGgtPmJ1bGtfYnVmZmVyW2ldLCAwKTsKKwkJfQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaChibHVldG9vdGgtPnR0eSk7CisJCWJsdWV0b290aC0+YnVsa19wYWNrZXRfcG9zID0gMDsKKwl9CQorCitleGl0OgorCWlmICghYmx1ZXRvb3RoIHx8ICFibHVldG9vdGgtPm9wZW5fY291bnQpCisJCXJldHVybjsKKworCXVzYl9maWxsX2J1bGtfdXJiKGJsdWV0b290aC0+cmVhZF91cmIsIGJsdWV0b290aC0+ZGV2LCAKKwkJICAgICAgdXNiX3JjdmJ1bGtwaXBlKGJsdWV0b290aC0+ZGV2LCBibHVldG9vdGgtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJICAgICAgYmx1ZXRvb3RoLT5idWxrX2luX2J1ZmZlciwgYmx1ZXRvb3RoLT5idWxrX2luX2J1ZmZlcl9zaXplLCAKKwkJICAgICAgYmx1ZXRvb3RoX3JlYWRfYnVsa19jYWxsYmFjaywgYmx1ZXRvb3RoKTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihibHVldG9vdGgtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmVzdWx0KQorCQllcnIgKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCisJcmV0dXJuOworfQorCisKK3N0YXRpYyB2b2lkIGJsdWV0b290aF93cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGggPSBnZXRfdXNiX2JsdWV0b290aCAoKHN0cnVjdCB1c2JfYmx1ZXRvb3RoICopdXJiLT5jb250ZXh0LCBfX0ZVTkNUSU9OX18pOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBmcmVlIHVwIHRoZSB0cmFuc2ZlciBidWZmZXIsIGFzIHVzYl9mcmVlX3VyYigpIGRvZXMgbm90IGRvIHRoaXMgKi8KKwlrZnJlZSh1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisKKwlpZiAoIWJsdWV0b290aCkgeworCQlkYmcoIiVzIC0gYmFkIGJsdWV0b290aCBwb2ludGVyLCBleGl0aW5nIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHdha2UgdXAgb3VyIGxpdHRsZSBmdW5jdGlvbiB0byBsZXQgdGhlIHR0eSBsYXllciBrbm93IHRoYXQgc29tZXRoaW5nIGhhcHBlbmVkICovCisJc2NoZWR1bGVfd29yaygmYmx1ZXRvb3RoLT53b3JrKTsKK30KKworCitzdGF0aWMgdm9pZCBibHVldG9vdGhfc29mdGludCh2b2lkICpwcml2YXRlKQoreworCXN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGggPSBnZXRfdXNiX2JsdWV0b290aCAoKHN0cnVjdCB1c2JfYmx1ZXRvb3RoICopcHJpdmF0ZSwgX19GVU5DVElPTl9fKTsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKCFibHVldG9vdGgpCisJCXJldHVybjsKKworCXR0eV93YWtldXAoYmx1ZXRvb3RoLT50dHkpOworfQorCisKK3N0YXRpYyBpbnQgdXNiX2JsdWV0b290aF9wcm9iZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldiAoaW50Zik7CisJc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCA9IE5VTEw7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICppbnRlcnJ1cHRfaW5fZW5kcG9pbnRbOF07CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpidWxrX2luX2VuZHBvaW50WzhdOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqYnVsa19vdXRfZW5kcG9pbnRbOF07CisJaW50IGNvbnRyb2xfb3V0X2VuZHBvaW50OworCisJaW50IG1pbm9yOworCWludCBidWZmZXJfc2l6ZTsKKwlpbnQgaTsKKwlpbnQgbnVtX2ludGVycnVwdF9pbiA9IDA7CisJaW50IG51bV9idWxrX2luID0gMDsKKwlpbnQgbnVtX2J1bGtfb3V0ID0gMDsKKworCWludGVyZmFjZSA9IGludGYtPmN1cl9hbHRzZXR0aW5nOworCWNvbnRyb2xfb3V0X2VuZHBvaW50ID0gaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisKKwkvKiBmaW5kIHRoZSBlbmRwb2ludHMgdGhhdCB3ZSBuZWVkICovCisJZm9yIChpID0gMDsgaSA8IGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzOyArK2kpIHsKKwkJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFtpXS5kZXNjOworCisJCWlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSAmJgorCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMikpIHsKKwkJCS8qIHdlIGZvdW5kIGEgYnVsayBpbiBlbmRwb2ludCAqLworCQkJZGJnKCJmb3VuZCBidWxrIGluIik7CisJCQlidWxrX2luX2VuZHBvaW50W251bV9idWxrX2luXSA9IGVuZHBvaW50OworCQkJKytudW1fYnVsa19pbjsKKwkJfQorCisJCWlmICgoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkgPT0gMHgwMCkgJiYKKwkJICAgICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIDMpID09IDB4MDIpKSB7CisJCQkvKiB3ZSBmb3VuZCBhIGJ1bGsgb3V0IGVuZHBvaW50ICovCisJCQlkYmcoImZvdW5kIGJ1bGsgb3V0Iik7CisJCQlidWxrX291dF9lbmRwb2ludFtudW1fYnVsa19vdXRdID0gZW5kcG9pbnQ7CisJCQkrK251bV9idWxrX291dDsKKwkJfQorCisJCWlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSAmJgorCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMykpIHsKKwkJCS8qIHdlIGZvdW5kIGEgaW50ZXJydXB0IGluIGVuZHBvaW50ICovCisJCQlkYmcoImZvdW5kIGludGVycnVwdCBpbiIpOworCQkJaW50ZXJydXB0X2luX2VuZHBvaW50W251bV9pbnRlcnJ1cHRfaW5dID0gZW5kcG9pbnQ7CisJCQkrK251bV9pbnRlcnJ1cHRfaW47CisJCX0KKwl9CisKKwkvKiBhY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHdlIGNhbiBvbmx5IGhhdmUgMSBidWxrX2luLCAxIGJ1bGtfb3V0LCBhbmQgMSBpbnRlcnJ1cHRfaW4gZW5kcG9pbnRzICovCisJaWYgKChudW1fYnVsa19pbiAhPSAxKSB8fAorCSAgICAobnVtX2J1bGtfb3V0ICE9IDEpIHx8CisJICAgIChudW1faW50ZXJydXB0X2luICE9IDEpKSB7CisJCWRiZyAoIiVzIC0gaW1wcm9wZXIgbnVtYmVyIG9mIGVuZHBvaW50cy4gQmx1ZXRvb3RoIGRyaXZlciBub3QgYm91bmQuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaW5mbygiVVNCIEJsdWV0b290aCBjb252ZXJ0ZXIgZGV0ZWN0ZWQiKTsKKworCWZvciAobWlub3IgPSAwOyBtaW5vciA8IEJMVUVUT09USF9UVFlfTUlOT1JTICYmIGJsdWV0b290aF90YWJsZVttaW5vcl07ICsrbWlub3IpCisJCTsKKwlpZiAoYmx1ZXRvb3RoX3RhYmxlW21pbm9yXSkgeworCQllcnIoIk5vIG1vcmUgZnJlZSBCbHVldG9vdGggZGV2aWNlcyIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoIShibHVldG9vdGggPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX2JsdWV0b290aCksIEdGUF9LRVJORUwpKSkgeworCQllcnIoIk91dCBvZiBtZW1vcnkiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtc2V0KGJsdWV0b290aCwgMCwgc2l6ZW9mKHN0cnVjdCB1c2JfYmx1ZXRvb3RoKSk7CisKKwlibHVldG9vdGgtPm1hZ2ljID0gVVNCX0JMVUVUT09USF9NQUdJQzsKKwlibHVldG9vdGgtPmRldiA9IGRldjsKKwlibHVldG9vdGgtPm1pbm9yID0gbWlub3I7CisJSU5JVF9XT1JLKCZibHVldG9vdGgtPndvcmssIGJsdWV0b290aF9zb2Z0aW50LCBibHVldG9vdGgpOworCWluaXRfTVVURVgoJmJsdWV0b290aC0+bG9jayk7CisKKwkvKiByZWNvcmQgdGhlIGludGVyZmFjZSBudW1iZXIgZm9yIHRoZSBjb250cm9sIG91dCAqLworCWJsdWV0b290aC0+Y29udHJvbF9vdXRfYkludGVyZmFjZU51bSA9IGNvbnRyb2xfb3V0X2VuZHBvaW50OworCQorCS8qIGNyZWF0ZSBvdXIgY29udHJvbCBvdXQgdXJiIHBvb2wgKi8gCisJZm9yIChpID0gMDsgaSA8IE5VTV9DT05UUk9MX1VSQlM7ICsraSkgeworCQlzdHJ1Y3QgdXJiICAqdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHVyYiA9PSBOVUxMKSB7CisJCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKKwkJCWdvdG8gcHJvYmVfZXJyb3I7CisJCX0KKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBOVUxMOworCQlibHVldG9vdGgtPmNvbnRyb2xfdXJiX3Bvb2xbaV0gPSB1cmI7CisJfQorCisJLyogc2V0IHVwIHRoZSBlbmRwb2ludCBpbmZvcm1hdGlvbiAqLworCWVuZHBvaW50ID0gYnVsa19pbl9lbmRwb2ludFswXTsKKwlibHVldG9vdGgtPnJlYWRfdXJiID0gdXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibHVldG9vdGgtPnJlYWRfdXJiKSB7CisJCWVycigiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZSIpOworCQlnb3RvIHByb2JlX2Vycm9yOworCX0KKwlibHVldG9vdGgtPmJ1bGtfaW5fYnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZSA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSk7CisJYmx1ZXRvb3RoLT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCWJsdWV0b290aC0+YnVsa19pbl9idWZmZXIgPSBrbWFsbG9jIChidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibHVldG9vdGgtPmJ1bGtfaW5fYnVmZmVyKSB7CisJCWVycigiQ291bGRuJ3QgYWxsb2NhdGUgYnVsa19pbl9idWZmZXIiKTsKKwkJZ290byBwcm9iZV9lcnJvcjsKKwl9CisJdXNiX2ZpbGxfYnVsa191cmIoYmx1ZXRvb3RoLT5yZWFkX3VyYiwgZGV2LCB1c2JfcmN2YnVsa3BpcGUoZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCSAgICAgIGJsdWV0b290aC0+YnVsa19pbl9idWZmZXIsIGJ1ZmZlcl9zaXplLCBibHVldG9vdGhfcmVhZF9idWxrX2NhbGxiYWNrLCBibHVldG9vdGgpOworCisJZW5kcG9pbnQgPSBidWxrX291dF9lbmRwb2ludFswXTsKKwlibHVldG9vdGgtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCWJsdWV0b290aC0+YnVsa19vdXRfYnVmZmVyX3NpemUgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpICogMjsKKworCWVuZHBvaW50ID0gaW50ZXJydXB0X2luX2VuZHBvaW50WzBdOworCWJsdWV0b290aC0+aW50ZXJydXB0X2luX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibHVldG9vdGgtPmludGVycnVwdF9pbl91cmIpIHsKKwkJZXJyKCJObyBmcmVlIHVyYnMgYXZhaWxhYmxlIik7CisJCWdvdG8gcHJvYmVfZXJyb3I7CisJfQorCWJsdWV0b290aC0+aW50ZXJydXB0X2luX2J1ZmZlcl9zaXplID0gYnVmZmVyX3NpemUgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOworCWJsdWV0b290aC0+aW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzcyA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCWJsdWV0b290aC0+aW50ZXJydXB0X2luX2ludGVydmFsID0gZW5kcG9pbnQtPmJJbnRlcnZhbDsKKwlibHVldG9vdGgtPmludGVycnVwdF9pbl9idWZmZXIgPSBrbWFsbG9jIChidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibHVldG9vdGgtPmludGVycnVwdF9pbl9idWZmZXIpIHsKKwkJZXJyKCJDb3VsZG4ndCBhbGxvY2F0ZSBpbnRlcnJ1cHRfaW5fYnVmZmVyIik7CisJCWdvdG8gcHJvYmVfZXJyb3I7CisJfQorCXVzYl9maWxsX2ludF91cmIoYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fdXJiLCBkZXYsIHVzYl9yY3ZpbnRwaXBlKGRldiwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkgICAgIGJsdWV0b290aC0+aW50ZXJydXB0X2luX2J1ZmZlciwgYnVmZmVyX3NpemUsIGJsdWV0b290aF9pbnRfY2FsbGJhY2ssCisJCSAgICAgYmx1ZXRvb3RoLCBlbmRwb2ludC0+YkludGVydmFsKTsKKworCS8qIGluaXRpYWxpemUgdGhlIGRldmZzIG5vZGVzIGZvciB0aGlzIGRldmljZSBhbmQgbGV0IHRoZSB1c2VyIGtub3cgd2hhdCBibHVldG9vdGhzIHdlIGFyZSBib3VuZCB0byAqLworCXR0eV9yZWdpc3Rlcl9kZXZpY2UgKGJsdWV0b290aF90dHlfZHJpdmVyLCBtaW5vciwgJmludGYtPmRldik7CisJaW5mbygiQmx1ZXRvb3RoIGNvbnZlcnRlciBub3cgYXR0YWNoZWQgdG8gdHR5VUIlZCAob3IgdXNiL3R0dWIvJWQgZm9yIGRldmZzKSIsIG1pbm9yLCBtaW5vcik7CisKKwlibHVldG9vdGhfdGFibGVbbWlub3JdID0gYmx1ZXRvb3RoOworCisJLyogc3VjY2VzcyAqLworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIGJsdWV0b290aCk7CisJcmV0dXJuIDA7CisKK3Byb2JlX2Vycm9yOgorCWlmIChibHVldG9vdGgtPnJlYWRfdXJiKQorCQl1c2JfZnJlZV91cmIgKGJsdWV0b290aC0+cmVhZF91cmIpOworCWlmIChibHVldG9vdGgtPmJ1bGtfaW5fYnVmZmVyKQorCQlrZnJlZSAoYmx1ZXRvb3RoLT5idWxrX2luX2J1ZmZlcik7CisJaWYgKGJsdWV0b290aC0+aW50ZXJydXB0X2luX3VyYikKKwkJdXNiX2ZyZWVfdXJiIChibHVldG9vdGgtPmludGVycnVwdF9pbl91cmIpOworCWlmIChibHVldG9vdGgtPmludGVycnVwdF9pbl9idWZmZXIpCisJCWtmcmVlIChibHVldG9vdGgtPmludGVycnVwdF9pbl9idWZmZXIpOworCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09OVFJPTF9VUkJTOyArK2kpIAorCQlpZiAoYmx1ZXRvb3RoLT5jb250cm9sX3VyYl9wb29sW2ldKSB7CisJCQlpZiAoYmx1ZXRvb3RoLT5jb250cm9sX3VyYl9wb29sW2ldLT50cmFuc2Zlcl9idWZmZXIpCisJCQkJa2ZyZWUgKGJsdWV0b290aC0+Y29udHJvbF91cmJfcG9vbFtpXS0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJCXVzYl9mcmVlX3VyYiAoYmx1ZXRvb3RoLT5jb250cm9sX3VyYl9wb29sW2ldKTsKKwkJfQorCisJYmx1ZXRvb3RoX3RhYmxlW21pbm9yXSA9IE5VTEw7CisKKwkvKiBmcmVlIHVwIGFueSBtZW1vcnkgdGhhdCB3ZSBhbGxvY2F0ZWQgKi8KKwlrZnJlZSAoYmx1ZXRvb3RoKTsKKwlyZXR1cm4gLUVJTzsKK30KKworCitzdGF0aWMgdm9pZCB1c2JfYmx1ZXRvb3RoX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCWludCBpOworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisJaWYgKGJsdWV0b290aCkgeworCQlpZiAoKGJsdWV0b290aC0+b3Blbl9jb3VudCkgJiYgKGJsdWV0b290aC0+dHR5KSkKKwkJCXR0eV9oYW5ndXAoYmx1ZXRvb3RoLT50dHkpOworCisJCWJsdWV0b290aC0+b3Blbl9jb3VudCA9IDA7CisKKwkJaWYgKGJsdWV0b290aC0+cmVhZF91cmIpIHsKKwkJCXVzYl9raWxsX3VyYiAoYmx1ZXRvb3RoLT5yZWFkX3VyYik7CisJCQl1c2JfZnJlZV91cmIgKGJsdWV0b290aC0+cmVhZF91cmIpOworCQl9CisJCWlmIChibHVldG9vdGgtPmJ1bGtfaW5fYnVmZmVyKQorCQkJa2ZyZWUgKGJsdWV0b290aC0+YnVsa19pbl9idWZmZXIpOworCisJCWlmIChibHVldG9vdGgtPmludGVycnVwdF9pbl91cmIpIHsKKwkJCXVzYl9raWxsX3VyYiAoYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwkJCXVzYl9mcmVlX3VyYiAoYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwkJfQorCQlpZiAoYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fYnVmZmVyKQorCQkJa2ZyZWUgKGJsdWV0b290aC0+aW50ZXJydXB0X2luX2J1ZmZlcik7CisKKwkJdHR5X3VucmVnaXN0ZXJfZGV2aWNlIChibHVldG9vdGhfdHR5X2RyaXZlciwgYmx1ZXRvb3RoLT5taW5vcik7CisKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9DT05UUk9MX1VSQlM7ICsraSkgeworCQkJaWYgKGJsdWV0b290aC0+Y29udHJvbF91cmJfcG9vbFtpXSkgeworCQkJCXVzYl9raWxsX3VyYiAoYmx1ZXRvb3RoLT5jb250cm9sX3VyYl9wb29sW2ldKTsKKwkJCQlpZiAoYmx1ZXRvb3RoLT5jb250cm9sX3VyYl9wb29sW2ldLT50cmFuc2Zlcl9idWZmZXIpCisJCQkJCWtmcmVlIChibHVldG9vdGgtPmNvbnRyb2xfdXJiX3Bvb2xbaV0tPnRyYW5zZmVyX2J1ZmZlcik7CisJCQkJdXNiX2ZyZWVfdXJiIChibHVldG9vdGgtPmNvbnRyb2xfdXJiX3Bvb2xbaV0pOworCQkJfQorCQl9CisJCQorCQlpbmZvKCJCbHVldG9vdGggY29udmVydGVyIG5vdyBkaXNjb25uZWN0ZWQgZnJvbSB0dHlVQiVkIiwgYmx1ZXRvb3RoLT5taW5vcik7CisKKwkJYmx1ZXRvb3RoX3RhYmxlW2JsdWV0b290aC0+bWlub3JdID0gTlVMTDsKKworCQkvKiBmcmVlIHVwIGFueSBtZW1vcnkgdGhhdCB3ZSBhbGxvY2F0ZWQgKi8KKwkJa2ZyZWUgKGJsdWV0b290aCk7CisJfSBlbHNlIHsKKwkJaW5mbygiZGV2aWNlIGRpc2Nvbm5lY3RlZCIpOworCX0KK30KKworc3RhdGljIHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBibHVldG9vdGhfb3BzID0geworCS5vcGVuID0JCQlibHVldG9vdGhfb3BlbiwKKwkuY2xvc2UgPQkJYmx1ZXRvb3RoX2Nsb3NlLAorCS53cml0ZSA9CQlibHVldG9vdGhfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJYmx1ZXRvb3RoX3dyaXRlX3Jvb20sCisJLmlvY3RsID0JCWJsdWV0b290aF9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkJYmx1ZXRvb3RoX3NldF90ZXJtaW9zLAorCS50aHJvdHRsZSA9CQlibHVldG9vdGhfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUgPQkJYmx1ZXRvb3RoX3VudGhyb3R0bGUsCisJLmNoYXJzX2luX2J1ZmZlciA9CWJsdWV0b290aF9jaGFyc19pbl9idWZmZXIsCit9OworCitzdGF0aWMgaW50IHVzYl9ibHVldG9vdGhfaW5pdCh2b2lkKQoreworCWludCBpOworCWludCByZXN1bHQ7CisKKwkvKiBJbml0aWFsaXplIG91ciBnbG9iYWwgZGF0YSAqLworCWZvciAoaSA9IDA7IGkgPCBCTFVFVE9PVEhfVFRZX01JTk9SUzsgKytpKSB7CisJCWJsdWV0b290aF90YWJsZVtpXSA9IE5VTEw7CisJfQorCisJaW5mbyAoIlVTQiBCbHVldG9vdGggc3VwcG9ydCByZWdpc3RlcmVkIik7CisKKwlibHVldG9vdGhfdHR5X2RyaXZlciA9IGFsbG9jX3R0eV9kcml2ZXIoQkxVRVRPT1RIX1RUWV9NSU5PUlMpOworCWlmICghYmx1ZXRvb3RoX3R0eV9kcml2ZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJYmx1ZXRvb3RoX3R0eV9kcml2ZXItPm93bmVyID0gVEhJU19NT0RVTEU7CisJYmx1ZXRvb3RoX3R0eV9kcml2ZXItPmRyaXZlcl9uYW1lID0gInVzYi1ibHVldG9vdGgiOworCWJsdWV0b290aF90dHlfZHJpdmVyLT5uYW1lID0gInR0eVVCIjsKKwlibHVldG9vdGhfdHR5X2RyaXZlci0+ZGV2ZnNfbmFtZSA9ICJ1c2IvdHR1Yi8iOworCWJsdWV0b290aF90dHlfZHJpdmVyLT5tYWpvciA9IEJMVUVUT09USF9UVFlfTUFKT1I7CisJYmx1ZXRvb3RoX3R0eV9kcml2ZXItPm1pbm9yX3N0YXJ0ID0gMDsKKwlibHVldG9vdGhfdHR5X2RyaXZlci0+dHlwZSA9IFRUWV9EUklWRVJfVFlQRV9TRVJJQUw7CisJYmx1ZXRvb3RoX3R0eV9kcml2ZXItPnN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUw7CisJYmx1ZXRvb3RoX3R0eV9kcml2ZXItPmZsYWdzID0gVFRZX0RSSVZFUl9SRUFMX1JBVyB8IFRUWV9EUklWRVJfTk9fREVWRlM7CisJYmx1ZXRvb3RoX3R0eV9kcml2ZXItPmluaXRfdGVybWlvcyA9IHR0eV9zdGRfdGVybWlvczsKKwlibHVldG9vdGhfdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcgPSBCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7CisJdHR5X3NldF9vcGVyYXRpb25zKGJsdWV0b290aF90dHlfZHJpdmVyLCAmYmx1ZXRvb3RoX29wcyk7CisJaWYgKHR0eV9yZWdpc3Rlcl9kcml2ZXIgKGJsdWV0b290aF90dHlfZHJpdmVyKSkgeworCQllcnIoIiVzIC0gZmFpbGVkIHRvIHJlZ2lzdGVyIHR0eSBkcml2ZXIiLCBfX0ZVTkNUSU9OX18pOworCQlwdXRfdHR5X2RyaXZlcihibHVldG9vdGhfdHR5X2RyaXZlcik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiByZWdpc3RlciB0aGUgVVNCIGRyaXZlciAqLworCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmdXNiX2JsdWV0b290aF9kcml2ZXIpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXR0eV91bnJlZ2lzdGVyX2RyaXZlcihibHVldG9vdGhfdHR5X2RyaXZlcik7CisJCXB1dF90dHlfZHJpdmVyKGJsdWV0b290aF90dHlfZHJpdmVyKTsKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkIGZvciB0aGUgVVNCIGJsdWV0b290aCBkcml2ZXIuIEVycm9yIG51bWJlciAlZCIsIHJlc3VsdCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCB1c2JfYmx1ZXRvb3RoX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmdXNiX2JsdWV0b290aF9kcml2ZXIpOworCXR0eV91bnJlZ2lzdGVyX2RyaXZlcihibHVldG9vdGhfdHR5X2RyaXZlcik7CisJcHV0X3R0eV9kcml2ZXIoYmx1ZXRvb3RoX3R0eV9kcml2ZXIpOworfQorCisKK21vZHVsZV9pbml0KHVzYl9ibHVldG9vdGhfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2JfYmx1ZXRvb3RoX2V4aXQpOworCisvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMWY5YjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKQEAgLTAsMCArMSw5NDIgQEAKKy8qCisgKiBjZGMtYWNtLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTkgQXJtaW4gRnVlcnN0CTxmdWVyc3RAaW4udHVtLmRlPgorICogQ29weXJpZ2h0IChjKSAxOTk5IFBhdmVsIE1hY2hlawk8cGF2ZWxAc3VzZS5jej4KKyAqIENvcHlyaWdodCAoYykgMTk5OSBKb2hhbm5lcyBFcmRmZWx0CTxqb2hhbm5lc0BlcmRmZWx0LmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwMCBWb2p0ZWNoIFBhdmxpawk8dm9qdGVjaEBzdXNlLmN6PgorICogQ29weXJpZ2h0IChjKSAyMDA0IE9saXZlciBOZXVrdW0JPG9saXZlckBuZXVrdW0ubmFtZT4KKyAqCisgKiBVU0IgQWJzdHJhY3QgQ29udHJvbCBNb2RlbCBkcml2ZXIgZm9yIFVTQiBtb2RlbXMgYW5kIElTRE4gYWRhcHRlcnMKKyAqCisgKiBTcG9uc29yZWQgYnkgU3VTRQorICoKKyAqIENoYW5nZUxvZzoKKyAqCXYwLjkgIC0gdGhvcm91Z2ggY2xlYW5pbmcsIFVSQmlmaWNhdGlvbiwgYWxtb3N0IGEgcmV3cml0ZQorICoJdjAuMTAgLSBzb21lIG1vcmUgY2xlYW51cHMKKyAqCXYwLjExIC0gZml4ZWQgZmxvdyBjb250cm9sLCByZWFkIGVycm9yIGRvZXNuJ3Qgc3RvcCByZWFkcworICoJdjAuMTIgLSBhZGRlZCBUSU9DTSBpb2N0bHMsIGFkZGVkIGJyZWFrIGhhbmRsaW5nLCBtYWRlIHN0cnVjdCBhY20ga21hbGxvY2VkCisgKgl2MC4xMyAtIGFkZGVkIHRlcm1pb3MsIGFkZGVkIGhhbmd1cAorICoJdjAuMTQgLSBzaXplZCBkb3duIHN0cnVjdCBhY20KKyAqCXYwLjE1IC0gZml4ZWQgZmxvdyBjb250cm9sIGFnYWluIC0gY2hhcmFjdGVycyBjb3VsZCBiZSBsb3N0CisgKgl2MC4xNiAtIGFkZGVkIGNvZGUgZm9yIG1vZGVtcyB3aXRoIHN3YXBwZWQgZGF0YSBhbmQgY29udHJvbCBpbnRlcmZhY2VzCisgKgl2MC4xNyAtIGFkZGVkIG5ldyBzdHlsZSBwcm9iaW5nCisgKgl2MC4xOCAtIGZpeGVkIG5ldyBzdHlsZSBwcm9iaW5nIGZvciBkZXZpY2VzIHdpdGggbW9yZSBjb25maWd1cmF0aW9ucworICoJdjAuMTkgLSBmaXhlZCBDTE9DQUwgaGFuZGxpbmcgKHRoYW5rcyB0byBSaWNoYXJkIFNoaWgtUGluZyBDaGFuKQorICoJdjAuMjAgLSBzd2l0Y2hlZCB0byBwcm9iaW5nIG9uIGludGVyZmFjZSAocmF0aGVyIHRoYW4gZGV2aWNlKSBjbGFzcworICoJdjAuMjEgLSByZXZlcnQgdG8gcHJvYmluZyBvbiBkZXZpY2UgZm9yIGRldmljZXMgd2l0aCBtdWx0aXBsZSBjb25maWdzCisgKgl2MC4yMiAtIHByb2JlIG9ubHkgdGhlIGNvbnRyb2wgaW50ZXJmYWNlLiBpZiB1c2Jjb3JlIGRvZXNuJ3QgY2hvb3NlIHRoZQorICoJCWNvbmZpZyB3ZSB3YW50LCBzeXNhZG1pbiBjaGFuZ2VzIGJDb25maWd1cmF0aW9uVmFsdWUgaW4gc3lzZnMuCisgKgl2MC4yMyAtIHVzZSBzb2Z0aXJxIGZvciByeCBwcm9jZXNzaW5nLCBhcyBuZWVkZWQgYnkgdHR5IGxheWVyCisgKgl2MC4yNCAtIGNoYW5nZSBwcm9iZSBtZXRob2QgdG8gZXZhbHVhdGUgQ0RDIHVuaW9uIGRlc2NyaXB0b3IKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjdW5kZWYgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiX2NkYy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKKyNpbmNsdWRlICJjZGMtYWNtLmgiCisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjIzIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJBcm1pbiBGdWVyc3QsIFBhdmVsIE1hY2hlaywgSm9oYW5uZXMgRXJkZmVsdCwgVm9qdGVjaCBQYXZsaWsiCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgQWJzdHJhY3QgQ29udHJvbCBNb2RlbCBkcml2ZXIgZm9yIFVTQiBtb2RlbXMgYW5kIElTRE4gYWRhcHRlcnMiCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhY21fZHJpdmVyOworc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICphY21fdHR5X2RyaXZlcjsKK3N0YXRpYyBzdHJ1Y3QgYWNtICphY21fdGFibGVbQUNNX1RUWV9NSU5PUlNdOworCitzdGF0aWMgREVDTEFSRV9NVVRFWChvcGVuX3NlbSk7CisKKyNkZWZpbmUgQUNNX1JFQURZKGFjbSkJKGFjbSAmJiBhY20tPmRldiAmJiBhY20tPnVzZWQpCisKKy8qCisgKiBGdW5jdGlvbnMgZm9yIEFDTSBjb250cm9sIG1lc3NhZ2VzLgorICovCisKK3N0YXRpYyBpbnQgYWNtX2N0cmxfbXNnKHN0cnVjdCBhY20gKmFjbSwgaW50IHJlcXVlc3QsIGludCB2YWx1ZSwgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworCWludCByZXR2YWwgPSB1c2JfY29udHJvbF9tc2coYWNtLT5kZXYsIHVzYl9zbmRjdHJscGlwZShhY20tPmRldiwgMCksCisJCXJlcXVlc3QsIFVTQl9SVF9BQ00sIHZhbHVlLAorCQlhY20tPmNvbnRyb2wtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorCQlidWYsIGxlbiwgNTAwMCk7CisJZGJnKCJhY21fY29udHJvbF9tc2c6IHJxOiAweCUwMnggdmFsOiAlI3ggbGVuOiAlI3ggcmVzdWx0OiAlZCIsIHJlcXVlc3QsIHZhbHVlLCBsZW4sIHJldHZhbCk7CisJcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOworfQorCisvKiBkZXZpY2VzIGFyZW4ndCByZXF1aXJlZCB0byBzdXBwb3J0IHRoZXNlIHJlcXVlc3RzLgorICogdGhlIGNkYyBhY20gZGVzY3JpcHRvciB0ZWxscyB3aGV0aGVyIHRoZXkgZG8uLi4KKyAqLworI2RlZmluZSBhY21fc2V0X2NvbnRyb2woYWNtLCBjb250cm9sKSBcCisJYWNtX2N0cmxfbXNnKGFjbSwgVVNCX0NEQ19SRVFfU0VUX0NPTlRST0xfTElORV9TVEFURSwgY29udHJvbCwgTlVMTCwgMCkKKyNkZWZpbmUgYWNtX3NldF9saW5lKGFjbSwgbGluZSkgXAorCWFjbV9jdHJsX21zZyhhY20sIFVTQl9DRENfUkVRX1NFVF9MSU5FX0NPRElORywgMCwgbGluZSwgc2l6ZW9mICoobGluZSkpCisjZGVmaW5lIGFjbV9zZW5kX2JyZWFrKGFjbSwgbXMpIFwKKwlhY21fY3RybF9tc2coYWNtLCBVU0JfQ0RDX1JFUV9TRU5EX0JSRUFLLCBtcywgTlVMTCwgMCkKKworLyoKKyAqIEludGVycnVwdCBoYW5kbGVycyBmb3IgdmFyaW91cyBBQ00gZGV2aWNlIHJlc3BvbnNlcworICovCisKKy8qIGNvbnRyb2wgaW50ZXJmYWNlIHJlcG9ydHMgc3RhdHVzIGNoYW5nZXMgd2l0aCAiaW50ZXJydXB0IiB0cmFuc2ZlcnMgKi8KK3N0YXRpYyB2b2lkIGFjbV9jdHJsX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBhY20gKmFjbSA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNiX2NkY19ub3RpZmljYXRpb24gKmRyID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKKwlpbnQgbmV3Y3RybDsKKwlpbnQgc3RhdHVzOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoIUFDTV9SRUFEWShhY20pKQorCQlnb3RvIGV4aXQ7CisKKwlkYXRhID0gKHVuc2lnbmVkIGNoYXIgKikoZHIgKyAxKTsKKwlzd2l0Y2ggKGRyLT5iTm90aWZpY2F0aW9uVHlwZSkgeworCisJCWNhc2UgVVNCX0NEQ19OT1RJRllfTkVUV09SS19DT05ORUNUSU9OOgorCisJCQlkYmcoIiVzIG5ldHdvcmsiLCBkci0+d1ZhbHVlID8gImNvbm5lY3RlZCB0byIgOiAiZGlzY29ubmVjdGVkIGZyb20iKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVVNCX0NEQ19OT1RJRllfU0VSSUFMX1NUQVRFOgorCisJCQluZXdjdHJsID0gbGUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTE2ICopIGRhdGEpKTsKKworCQkJaWYgKGFjbS0+dHR5ICYmICFhY20tPmNsb2NhbCAmJiAoYWNtLT5jdHJsaW4gJiB+bmV3Y3RybCAmIEFDTV9DVFJMX0RDRCkpIHsKKwkJCQlkYmcoImNhbGxpbmcgaGFuZ3VwIik7CisJCQkJdHR5X2hhbmd1cChhY20tPnR0eSk7CisJCQl9CisKKwkJCWFjbS0+Y3RybGluID0gbmV3Y3RybDsKKworCQkJZGJnKCJpbnB1dCBjb250cm9sIGxpbmVzOiBkY2QlYyBkc3IlYyBicmVhayVjIHJpbmclYyBmcmFtaW5nJWMgcGFyaXR5JWMgb3ZlcnJ1biVjIiwKKwkJCQlhY20tPmN0cmxpbiAmIEFDTV9DVFJMX0RDRCA/ICcrJyA6ICctJywJYWNtLT5jdHJsaW4gJiBBQ01fQ1RSTF9EU1IgPyAnKycgOiAnLScsCisJCQkJYWNtLT5jdHJsaW4gJiBBQ01fQ1RSTF9CUksgPyAnKycgOiAnLScsCWFjbS0+Y3RybGluICYgQUNNX0NUUkxfUkkgID8gJysnIDogJy0nLAorCQkJCWFjbS0+Y3RybGluICYgQUNNX0NUUkxfRlJBTUlORyA/ICcrJyA6ICctJywJYWNtLT5jdHJsaW4gJiBBQ01fQ1RSTF9QQVJJVFkgPyAnKycgOiAnLScsCisJCQkJYWNtLT5jdHJsaW4gJiBBQ01fQ1RSTF9PVkVSUlVOID8gJysnIDogJy0nKTsKKworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWRiZygidW5rbm93biBub3RpZmljYXRpb24gJWQgcmVjZWl2ZWQ6IGluZGV4ICVkIGxlbiAlZCBkYXRhMCAlZCBkYXRhMSAlZCIsCisJCQkJZHItPmJOb3RpZmljYXRpb25UeXBlLCBkci0+d0luZGV4LAorCQkJCWRyLT53TGVuZ3RoLCBkYXRhWzBdLCBkYXRhWzFdKTsKKwkJCWJyZWFrOworCX0KK2V4aXQ6CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cykKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKK30KKworLyogZGF0YSBpbnRlcmZhY2UgcmV0dXJucyBpbmNvbWluZyBieXRlcywgb3Igd2UgZ290IHVudGhyb3R0bGVkICovCitzdGF0aWMgdm9pZCBhY21fcmVhZF9idWxrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGFjbSAqYWNtID0gdXJiLT5jb250ZXh0OworCWRiZygiRW50ZXJpbmcgYWNtX3JlYWRfYnVsayB3aXRoIHN0YXR1cyAlZFxuIiwgdXJiLT5zdGF0dXMpOworCisJaWYgKCFBQ01fUkVBRFkoYWNtKSkKKwkJcmV0dXJuOworCisJaWYgKHVyYi0+c3RhdHVzKQorCQlkZXZfZGJnKCZhY20tPmRhdGEtPmRldiwgImJ1bGsgcnggc3RhdHVzICVkXG4iLCB1cmItPnN0YXR1cyk7CisKKwkvKiBjYWxsaW5nIHR0eV9mbGlwX2J1ZmZlcl9wdXNoKCkgaW5faXJxKCkgaXNuJ3QgYWxsb3dlZCAqLworCXRhc2tsZXRfc2NoZWR1bGUoJmFjbS0+YmgpOworfQorCitzdGF0aWMgdm9pZCBhY21fcnhfdGFza2xldCh1bnNpZ25lZCBsb25nIF9hY20pCit7CisJc3RydWN0IGFjbSAqYWNtID0gKHZvaWQgKilfYWNtOworCXN0cnVjdCB1cmIgKnVyYiA9IGFjbS0+cmVhZHVyYjsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gYWNtLT50dHk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCBpID0gMDsKKwlkYmcoIkVudGVyaW5nIGFjbV9yeF90YXNrbGV0Iik7CisKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID4gMCAmJiAhYWNtLT50aHJvdHRsZSkgIHsKKwkJZm9yIChpID0gMDsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aCAmJiAhYWNtLT50aHJvdHRsZTsgaSsrKSB7CisJCQkvKiBpZiB3ZSBpbnNlcnQgbW9yZSB0aGFuIFRUWV9GTElQQlVGX1NJWkUgY2hhcmFjdGVycywKKwkJCSAqIHdlIGRyb3AgdGhlbS4gKi8KKwkJCWlmICh0dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkgeworCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQl9CisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIDApOworCQl9CisJCWRiZygiSGFuZGVkICVkIGJ5dGVzIHRvIHR0eSBsYXllciIsIGkrMSk7CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJfQorCisJc3Bpbl9sb2NrKCZhY20tPnRocm90dGxlX2xvY2spOworCWlmIChhY20tPnRocm90dGxlKSB7CisJCWRiZygiVGhyb3R0ZWxpbmcgbm90aWNlZCIpOworCQltZW1tb3ZlKGRhdGEsIGRhdGEgKyBpLCB1cmItPmFjdHVhbF9sZW5ndGggLSBpKTsKKwkJdXJiLT5hY3R1YWxfbGVuZ3RoIC09IGk7CisJCWFjbS0+cmVzdWJtaXRfdG9fdW50aHJvdHRsZSA9IDE7CisJCXNwaW5fdW5sb2NrKCZhY20tPnRocm90dGxlX2xvY2spOworCQlyZXR1cm47CisJfQorCXNwaW5fdW5sb2NrKCZhY20tPnRocm90dGxlX2xvY2spOworCisJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKwl1cmItPmRldiA9IGFjbS0+ZGV2OworCisJaSA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKGkpCisJCWRldl9kYmcoJmFjbS0+ZGF0YS0+ZGV2LCAiYnVsayByeCByZXN1Ym1pdCAlZFxuIiwgaSk7Cit9CisKKy8qIGRhdGEgaW50ZXJmYWNlIHdyb3RlIHRob3NlIG91dGdvaW5nIGJ5dGVzICovCitzdGF0aWMgdm9pZCBhY21fd3JpdGVfYnVsayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBhY20gKmFjbSA9IChzdHJ1Y3QgYWNtICopdXJiLT5jb250ZXh0OworCWRiZygiRW50ZXJpbmcgYWNtX3dyaXRlX2J1bGsgd2l0aCBzdGF0dXMgJWRcbiIsIHVyYi0+c3RhdHVzKTsKKworCWlmICghQUNNX1JFQURZKGFjbSkpCisJCWdvdG8gb3V0OworCisJaWYgKHVyYi0+c3RhdHVzKQorCQlkYmcoIm5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgdXJiLT5zdGF0dXMpOworCisJc2NoZWR1bGVfd29yaygmYWNtLT53b3JrKTsKK291dDoKKwlhY20tPnJlYWR5X2Zvcl93cml0ZSA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIGFjbV9zb2Z0aW50KHZvaWQgKnByaXZhdGUpCit7CisJc3RydWN0IGFjbSAqYWNtID0gcHJpdmF0ZTsKKwlkYmcoIkVudGVyaW5nIGFjbV9zb2Z0aW50LlxuIik7CisJCisJaWYgKCFBQ01fUkVBRFkoYWNtKSkKKwkJcmV0dXJuOworCXR0eV93YWtldXAoYWNtLT50dHkpOworfQorCisvKgorICogVFRZIGhhbmRsZXJzCisgKi8KKworc3RhdGljIGludCBhY21fdHR5X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGFjbSAqYWNtOworCWludCBydiA9IC1FSU5WQUw7CisJZGJnKCJFbnRlcmluZyBhY21fdHR5X29wZW4uXG4iKTsKKwkKKwlkb3duKCZvcGVuX3NlbSk7CisKKwlhY20gPSBhY21fdGFibGVbdHR5LT5pbmRleF07CisJaWYgKCFhY20gfHwgIWFjbS0+ZGV2KQorCQlnb3RvIGVycl9vdXQ7CisJZWxzZQorCQlydiA9IDA7CisKKwl0dHktPmRyaXZlcl9kYXRhID0gYWNtOworCWFjbS0+dHR5ID0gdHR5OworCisKKworCWlmIChhY20tPnVzZWQrKykgeworCQlnb3RvIGRvbmU7CisgICAgICAgIH0KKworCWFjbS0+Y3RybHVyYi0+ZGV2ID0gYWNtLT5kZXY7CisJaWYgKHVzYl9zdWJtaXRfdXJiKGFjbS0+Y3RybHVyYiwgR0ZQX0tFUk5FTCkpIHsKKwkJZGJnKCJ1c2Jfc3VibWl0X3VyYihjdHJsIGlycSkgZmFpbGVkIik7CisJCWdvdG8gYmFpbF9vdXQ7CisJfQorCisJYWNtLT5yZWFkdXJiLT5kZXYgPSBhY20tPmRldjsKKwlpZiAodXNiX3N1Ym1pdF91cmIoYWNtLT5yZWFkdXJiLCBHRlBfS0VSTkVMKSkgeworCQlkYmcoInVzYl9zdWJtaXRfdXJiKHJlYWQgYnVsaykgZmFpbGVkIik7CisJCWdvdG8gYmFpbF9vdXRfYW5kX3VubGluazsKKwl9CisKKwlpZiAoMCA+IGFjbV9zZXRfY29udHJvbChhY20sIGFjbS0+Y3RybG91dCA9IEFDTV9DVFJMX0RUUiB8IEFDTV9DVFJMX1JUUykpCisJCWdvdG8gZnVsbF9iYWlsb3V0OworCisJLyogZm9yY2UgbG93X2xhdGVuY3kgb24gc28gdGhhdCBvdXIgdHR5X3B1c2ggYWN0dWFsbHkgZm9yY2VzIHRoZSBkYXRhIHRocm91Z2gsIAorCSAgIG90aGVyd2lzZSBpdCBpcyBzY2hlZHVsZWQsIGFuZCB3aXRoIGhpZ2ggZGF0YSByYXRlcyBkYXRhIGNhbiBnZXQgbG9zdC4gKi8KKwl0dHktPmxvd19sYXRlbmN5ID0gMTsKKworZG9uZToKK2Vycl9vdXQ6CisJdXAoJm9wZW5fc2VtKTsKKwlyZXR1cm4gcnY7CisKK2Z1bGxfYmFpbG91dDoKKwl1c2Jfa2lsbF91cmIoYWNtLT5yZWFkdXJiKTsKK2JhaWxfb3V0X2FuZF91bmxpbms6CisJdXNiX2tpbGxfdXJiKGFjbS0+Y3RybHVyYik7CitiYWlsX291dDoKKwlhY20tPnVzZWQtLTsKKwl1cCgmb3Blbl9zZW0pOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgdm9pZCBhY21fdHR5X2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBhY20gKmFjbSA9IHR0eS0+ZHJpdmVyX2RhdGE7CisKKwlpZiAoIWFjbSB8fCAhYWNtLT51c2VkKQorCQlyZXR1cm47CisKKwlkb3duKCZvcGVuX3NlbSk7CisJaWYgKCEtLWFjbS0+dXNlZCkgeworCQlpZiAoYWNtLT5kZXYpIHsKKwkJCWFjbV9zZXRfY29udHJvbChhY20sIGFjbS0+Y3RybG91dCA9IDApOworCQkJdXNiX2tpbGxfdXJiKGFjbS0+Y3RybHVyYik7CisJCQl1c2Jfa2lsbF91cmIoYWNtLT53cml0ZXVyYik7CisJCQl1c2Jfa2lsbF91cmIoYWNtLT5yZWFkdXJiKTsKKwkJfSBlbHNlIHsKKwkJCXR0eV91bnJlZ2lzdGVyX2RldmljZShhY21fdHR5X2RyaXZlciwgYWNtLT5taW5vcik7CisJCQlhY21fdGFibGVbYWNtLT5taW5vcl0gPSBOVUxMOworCQkJdXNiX2ZyZWVfdXJiKGFjbS0+Y3RybHVyYik7CisJCQl1c2JfZnJlZV91cmIoYWNtLT5yZWFkdXJiKTsKKwkJCXVzYl9mcmVlX3VyYihhY20tPndyaXRldXJiKTsKKwkJCWtmcmVlKGFjbSk7CisJCX0KKwl9CisJdXAoJm9wZW5fc2VtKTsKK30KKworc3RhdGljIGludCBhY21fdHR5X3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXN0cnVjdCBhY20gKmFjbSA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJaW50IHN0YXQ7CisJZGJnKCJFbnRlcmluZyBhY21fdHR5X3dyaXRlIHRvIHdyaXRlICVkIGJ5dGVzLFxuIiwgY291bnQpOworCisJaWYgKCFBQ01fUkVBRFkoYWNtKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFhY20tPnJlYWR5X2Zvcl93cml0ZSkKKwkJcmV0dXJuIDA7CisJaWYgKCFjb3VudCkKKwkJcmV0dXJuIDA7CisKKwljb3VudCA9IChjb3VudCA+IGFjbS0+d3JpdGVzaXplKSA/IGFjbS0+d3JpdGVzaXplIDogY291bnQ7CisKKwlkYmcoIkdldCAlZCBieXRlcy4uLiIsIGNvdW50KTsKKwltZW1jcHkoYWNtLT53cml0ZV9idWZmZXIsIGJ1ZiwgY291bnQpOworCWRiZygiICBTdWNjZXNzZnVsbHkgY29waWVkLlxuIik7CisKKwlhY20tPndyaXRldXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gY291bnQ7CisJYWNtLT53cml0ZXVyYi0+ZGV2ID0gYWNtLT5kZXY7CisKKwlhY20tPnJlYWR5X2Zvcl93cml0ZSA9IDA7CisJc3RhdCA9IHVzYl9zdWJtaXRfdXJiKGFjbS0+d3JpdGV1cmIsIEdGUF9BVE9NSUMpOworCWlmIChzdGF0IDwgMCkgeworCQlkYmcoInVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZCIpOworCQlhY20tPnJlYWR5X2Zvcl93cml0ZSA9IDE7CisJCXJldHVybiBzdGF0OworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludCBhY21fdHR5X3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgYWNtICphY20gPSB0dHktPmRyaXZlcl9kYXRhOworCWlmICghQUNNX1JFQURZKGFjbSkpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAhYWNtLT5yZWFkeV9mb3Jfd3JpdGUgPyAwIDogYWNtLT53cml0ZXNpemU7Cit9CisKK3N0YXRpYyBpbnQgYWNtX3R0eV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgYWNtICphY20gPSB0dHktPmRyaXZlcl9kYXRhOworCWlmICghQUNNX1JFQURZKGFjbSkpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAhYWNtLT5yZWFkeV9mb3Jfd3JpdGUgPyBhY20tPndyaXRldXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIDogMDsKK30KKworc3RhdGljIHZvaWQgYWNtX3R0eV90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCBhY20gKmFjbSA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJaWYgKCFBQ01fUkVBRFkoYWNtKSkKKwkJcmV0dXJuOworCXNwaW5fbG9ja19iaCgmYWNtLT50aHJvdHRsZV9sb2NrKTsKKwlhY20tPnRocm90dGxlID0gMTsKKwlzcGluX3VubG9ja19iaCgmYWNtLT50aHJvdHRsZV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgYWNtX3R0eV91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IGFjbSAqYWNtID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlpZiAoIUFDTV9SRUFEWShhY20pKQorCQlyZXR1cm47CisJc3Bpbl9sb2NrX2JoKCZhY20tPnRocm90dGxlX2xvY2spOworCWFjbS0+dGhyb3R0bGUgPSAwOworCXNwaW5fdW5sb2NrX2JoKCZhY20tPnRocm90dGxlX2xvY2spOworCWlmIChhY20tPnJlc3VibWl0X3RvX3VudGhyb3R0bGUpIHsKKwkJYWNtLT5yZXN1Ym1pdF90b191bnRocm90dGxlID0gMDsKKwkJYWNtX3JlYWRfYnVsayhhY20tPnJlYWR1cmIsIE5VTEwpOworCX0KK30KKworc3RhdGljIHZvaWQgYWNtX3R0eV9icmVha19jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHN0YXRlKQoreworCXN0cnVjdCBhY20gKmFjbSA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJaWYgKCFBQ01fUkVBRFkoYWNtKSkKKwkJcmV0dXJuOworCWlmIChhY21fc2VuZF9icmVhayhhY20sIHN0YXRlID8gMHhmZmZmIDogMCkpCisJCWRiZygic2VuZCBicmVhayBmYWlsZWQiKTsKK30KKworc3RhdGljIGludCBhY21fdHR5X3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBhY20gKmFjbSA9IHR0eS0+ZHJpdmVyX2RhdGE7CisKKwlpZiAoIUFDTV9SRUFEWShhY20pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAoYWNtLT5jdHJsb3V0ICYgQUNNX0NUUkxfRFRSID8gVElPQ01fRFRSIDogMCkgfAorCSAgICAgICAoYWNtLT5jdHJsb3V0ICYgQUNNX0NUUkxfUlRTID8gVElPQ01fUlRTIDogMCkgfAorCSAgICAgICAoYWNtLT5jdHJsaW4gICYgQUNNX0NUUkxfRFNSID8gVElPQ01fRFNSIDogMCkgfAorCSAgICAgICAoYWNtLT5jdHJsaW4gICYgQUNNX0NUUkxfUkkgID8gVElPQ01fUkkgIDogMCkgfAorCSAgICAgICAoYWNtLT5jdHJsaW4gICYgQUNNX0NUUkxfRENEID8gVElPQ01fQ0QgIDogMCkgfAorCSAgICAgICBUSU9DTV9DVFM7Cit9CisKK3N0YXRpYyBpbnQgYWNtX3R0eV90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJc3RydWN0IGFjbSAqYWNtID0gdHR5LT5kcml2ZXJfZGF0YTsKKwl1bnNpZ25lZCBpbnQgbmV3Y3RybDsKKworCWlmICghQUNNX1JFQURZKGFjbSkpCisJCXJldHVybiAtRUlOVkFMOworCisJbmV3Y3RybCA9IGFjbS0+Y3RybG91dDsKKwlzZXQgPSAoc2V0ICYgVElPQ01fRFRSID8gQUNNX0NUUkxfRFRSIDogMCkgfCAoc2V0ICYgVElPQ01fUlRTID8gQUNNX0NUUkxfUlRTIDogMCk7CisJY2xlYXIgPSAoY2xlYXIgJiBUSU9DTV9EVFIgPyBBQ01fQ1RSTF9EVFIgOiAwKSB8IChjbGVhciAmIFRJT0NNX1JUUyA/IEFDTV9DVFJMX1JUUyA6IDApOworCisJbmV3Y3RybCA9IChuZXdjdHJsICYgfmNsZWFyKSB8IHNldDsKKworCWlmIChhY20tPmN0cmxvdXQgPT0gbmV3Y3RybCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGFjbV9zZXRfY29udHJvbChhY20sIGFjbS0+Y3RybG91dCA9IG5ld2N0cmwpOworfQorCitzdGF0aWMgaW50IGFjbV90dHlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBhY20gKmFjbSA9IHR0eS0+ZHJpdmVyX2RhdGE7CisKKwlpZiAoIUFDTV9SRUFEWShhY20pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKK3N0YXRpYyBfX3UzMiBhY21fdHR5X3NwZWVkW10gPSB7CisJMCwgNTAsIDc1LCAxMTAsIDEzNCwgMTUwLCAyMDAsIDMwMCwgNjAwLAorCTEyMDAsIDE4MDAsIDI0MDAsIDQ4MDAsIDk2MDAsIDE5MjAwLCAzODQwMCwKKwk1NzYwMCwgMTE1MjAwLCAyMzA0MDAsIDQ2MDgwMCwgNTAwMDAwLCA1NzYwMDAsCisJOTIxNjAwLCAxMDAwMDAwLCAxMTUyMDAwLCAxNTAwMDAwLCAyMDAwMDAwLAorCTI1MDAwMDAsIDMwMDAwMDAsIDM1MDAwMDAsIDQwMDAwMDAKK307CisKK3N0YXRpYyBfX3U4IGFjbV90dHlfc2l6ZVtdID0geworCTUsIDYsIDcsIDgKK307CisKK3N0YXRpYyB2b2lkIGFjbV90dHlfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKnRlcm1pb3Nfb2xkKQoreworCXN0cnVjdCBhY20gKmFjbSA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHRlcm1pb3MgKnRlcm1pb3MgPSB0dHktPnRlcm1pb3M7CisJc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgbmV3bGluZTsKKwlpbnQgbmV3Y3RybCA9IGFjbS0+Y3RybG91dDsKKworCWlmICghQUNNX1JFQURZKGFjbSkpCisJCXJldHVybjsKKworCW5ld2xpbmUuZHdEVEVSYXRlID0gY3B1X3RvX2xlMzJwKGFjbV90dHlfc3BlZWQgKworCQkodGVybWlvcy0+Y19jZmxhZyAmIENCQVVEICYgfkNCQVVERVgpICsgKHRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVREVYID8gMTUgOiAwKSk7CisJbmV3bGluZS5iQ2hhckZvcm1hdCA9IHRlcm1pb3MtPmNfY2ZsYWcgJiBDU1RPUEIgPyAyIDogMDsKKwluZXdsaW5lLmJQYXJpdHlUeXBlID0gdGVybWlvcy0+Y19jZmxhZyAmIFBBUkVOQiA/CisJCSh0ZXJtaW9zLT5jX2NmbGFnICYgUEFST0REID8gMSA6IDIpICsgKHRlcm1pb3MtPmNfY2ZsYWcgJiBDTVNQQVIgPyAyIDogMCkgOiAwOworCW5ld2xpbmUuYkRhdGFCaXRzID0gYWNtX3R0eV9zaXplWyh0ZXJtaW9zLT5jX2NmbGFnICYgQ1NJWkUpID4+IDRdOworCisJYWNtLT5jbG9jYWwgPSAoKHRlcm1pb3MtPmNfY2ZsYWcgJiBDTE9DQUwpICE9IDApOworCisJaWYgKCFuZXdsaW5lLmR3RFRFUmF0ZSkgeworCQluZXdsaW5lLmR3RFRFUmF0ZSA9IGFjbS0+bGluZS5kd0RURVJhdGU7CisJCW5ld2N0cmwgJj0gfkFDTV9DVFJMX0RUUjsKKwl9IGVsc2UgIG5ld2N0cmwgfD0gIEFDTV9DVFJMX0RUUjsKKworCWlmIChuZXdjdHJsICE9IGFjbS0+Y3RybG91dCkKKwkJYWNtX3NldF9jb250cm9sKGFjbSwgYWNtLT5jdHJsb3V0ID0gbmV3Y3RybCk7CisKKwlpZiAobWVtY21wKCZhY20tPmxpbmUsICZuZXdsaW5lLCBzaXplb2YgbmV3bGluZSkpIHsKKwkJbWVtY3B5KCZhY20tPmxpbmUsICZuZXdsaW5lLCBzaXplb2YgbmV3bGluZSk7CisJCWRiZygic2V0IGxpbmU6ICVkICVkICVkICVkIiwgbGUzMl90b19jcHUobmV3bGluZS5kd0RURVJhdGUpLAorCQkJbmV3bGluZS5iQ2hhckZvcm1hdCwgbmV3bGluZS5iUGFyaXR5VHlwZSwKKwkJCW5ld2xpbmUuYkRhdGFCaXRzKTsKKwkJYWNtX3NldF9saW5lKGFjbSwgJmFjbS0+bGluZSk7CisJfQorfQorCisvKgorICogVVNCIHByb2JlIGFuZCBkaXNjb25uZWN0IHJvdXRpbmVzLgorICovCisKK3N0YXRpYyBpbnQgYWNtX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfY2RjX3VuaW9uX2Rlc2MgKnVuaW9uX2hlYWRlciA9IE5VTEw7CisJY2hhciAqYnVmZmVyID0gaW50Zi0+YWx0c2V0dGluZy0+ZXh0cmE7CisJaW50IGJ1ZmxlbiA9IGludGYtPmFsdHNldHRpbmctPmV4dHJhbGVuOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICpjb250cm9sX2ludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqZGF0YV9pbnRlcmZhY2U7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGN0cmw7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcHJlYWQ7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcHdyaXRlOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgYWNtICphY207CisJaW50IG1pbm9yOworCWludCBjdHJsc2l6ZSxyZWFkc2l6ZTsKKwl1OCAqYnVmOworCXU4IGFjX21hbmFnZW1lbnRfZnVuY3Rpb24gPSAwOworCXU4IGNhbGxfbWFuYWdlbWVudF9mdW5jdGlvbiA9IDA7CisJaW50IGNhbGxfaW50ZXJmYWNlX251bSA9IC0xOworCWludCBkYXRhX2ludGVyZmFjZV9udW07CisJdW5zaWduZWQgbG9uZyBxdWlya3M7CisKKwkvKiBoYW5kbGUgcXVpcmtzIGRlYWRseSB0byBub3JtYWwgcHJvYmluZyovCisJcXVpcmtzID0gKHVuc2lnbmVkIGxvbmcpaWQtPmRyaXZlcl9pbmZvOworCWlmIChxdWlya3MgPT0gTk9fVU5JT05fTk9STUFMKSB7CisJCWRhdGFfaW50ZXJmYWNlID0gdXNiX2lmbnVtX3RvX2lmKHVzYl9kZXYsIDEpOworCQljb250cm9sX2ludGVyZmFjZSA9IHVzYl9pZm51bV90b19pZih1c2JfZGV2LCAwKTsKKwkJZ290byBza2lwX25vcm1hbF9wcm9iZTsKKwl9CisJCisJLyogbm9ybWFsIHByb2JpbmcqLworCWlmICghYnVmZmVyKSB7CisJCWVycigiV2llcmQgZGVzY3JpcHRvciByZWZlcmVuY2VzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFidWZsZW4pIHsKKwkJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludC0+ZXh0cmFsZW4gJiYgaW50Zi0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50LT5leHRyYSkgeworCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCJTZWVraW5nIGV4dHJhIGRlc2NyaXB0b3JzIG9uIGVuZHBvaW50XG4iKTsKKwkJCWJ1ZmxlbiA9IGludGYtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludC0+ZXh0cmFsZW47CisJCQlidWZmZXIgPSBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnQtPmV4dHJhOworCQl9IGVsc2UgeworCQkJZXJyKCJaZXJvIGxlbmd0aCBkZXNjcmlwdG9yIHJlZmVyZW5jZXNcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwl3aGlsZSAoYnVmbGVuID4gMCkgeworCQlpZiAoYnVmZmVyIFsxXSAhPSBVU0JfRFRfQ1NfSU5URVJGQUNFKSB7CisJCQllcnIoInNraXBwaW5nIGdhcmJhZ2VcbiIpOworCQkJZ290byBuZXh0X2Rlc2M7CisJCX0KKworCQlzd2l0Y2ggKGJ1ZmZlciBbMl0pIHsKKwkJCWNhc2UgVVNCX0NEQ19VTklPTl9UWVBFOiAvKiB3ZSd2ZSBmb3VuZCBpdCAqLworCQkJCWlmICh1bmlvbl9oZWFkZXIpIHsKKwkJCQkJZXJyKCJNb3JlIHRoYW4gb25lIHVuaW9uIGRlc2NyaXB0b3IsIHNraXBwaW5nIC4uLiIpOworCQkJCQlnb3RvIG5leHRfZGVzYzsKKwkJCQl9CisJCQkJdW5pb25faGVhZGVyID0gKHN0cnVjdCB1c2JfY2RjX3VuaW9uX2Rlc2MgKikKKwkJCQkJCQlidWZmZXI7CisJCQkJYnJlYWs7CisJCQljYXNlIFVTQl9DRENfQ09VTlRSWV9UWVBFOiAvKiBtYXliZSBzb21laG93IGV4cG9ydCAqLworCQkJCWJyZWFrOyAvKiBmb3Igbm93IHdlIGlnbm9yZSBpdCAqLworCQkJY2FzZSBVU0JfQ0RDX0hFQURFUl9UWVBFOiAvKiBtYXliZSBjaGVjayB2ZXJzaW9uICovIAorCQkJCWJyZWFrOyAvKiBmb3Igbm93IHdlIGlnbm9yZSBpdCAqLyAKKwkJCWNhc2UgVVNCX0NEQ19BQ01fVFlQRToKKwkJCQlhY19tYW5hZ2VtZW50X2Z1bmN0aW9uID0gYnVmZmVyWzNdOworCQkJCWJyZWFrOworCQkJY2FzZSBVU0JfQ0RDX0NBTExfTUFOQUdFTUVOVF9UWVBFOgorCQkJCWNhbGxfbWFuYWdlbWVudF9mdW5jdGlvbiA9IGJ1ZmZlclszXTsKKwkJCQljYWxsX2ludGVyZmFjZV9udW0gPSBidWZmZXJbNF07CisJCQkJaWYgKChjYWxsX21hbmFnZW1lbnRfZnVuY3Rpb24gJiAzKSAhPSAzKQorCQkJCQllcnIoIlRoaXMgZGV2aWNlIGNhbm5vdCBkbyBjYWxscyBvbiBpdHMgb3duLiBJdCBpcyBubyBtb2RlbS4iKTsKKwkJCQlicmVhazsKKwkJCQkKKwkJCWRlZmF1bHQ6CisJCQkJZXJyKCJJZ25vcmluZyBleHRyYSBoZWFkZXIsIHR5cGUgJWQsIGxlbmd0aCAlZCIsIGJ1ZmZlclsyXSwgYnVmZmVyWzBdKTsKKwkJCQlicmVhazsKKwkJCX0KK25leHRfZGVzYzoKKwkJYnVmbGVuIC09IGJ1ZmZlclswXTsKKwkJYnVmZmVyICs9IGJ1ZmZlclswXTsKKwl9CisKKwlpZiAoIXVuaW9uX2hlYWRlcikgeworCQlpZiAoY2FsbF9pbnRlcmZhY2VfbnVtID4gMCkgeworCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCJObyB1bmlvbiBkZXNjcmlwdG9yLCB1c2luZyBjYWxsIG1hbmFnZW1lbnQgZGVzY3JpcHRvclxuIik7CisJCQlkYXRhX2ludGVyZmFjZSA9IHVzYl9pZm51bV90b19pZih1c2JfZGV2LCAoZGF0YV9pbnRlcmZhY2VfbnVtID0gY2FsbF9pbnRlcmZhY2VfbnVtKSk7CisJCQljb250cm9sX2ludGVyZmFjZSA9IGludGY7CisJCX0gZWxzZSB7CisJCQlkZXZfZGJnKCZpbnRmLT5kZXYsIk5vIHVuaW9uIGRlc2NyaXB0b3IsIGdpdmluZyB1cFxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0gZWxzZSB7CisJCWNvbnRyb2xfaW50ZXJmYWNlID0gdXNiX2lmbnVtX3RvX2lmKHVzYl9kZXYsIHVuaW9uX2hlYWRlci0+Yk1hc3RlckludGVyZmFjZTApOworCQlkYXRhX2ludGVyZmFjZSA9IHVzYl9pZm51bV90b19pZih1c2JfZGV2LCAoZGF0YV9pbnRlcmZhY2VfbnVtID0gdW5pb25faGVhZGVyLT5iU2xhdmVJbnRlcmZhY2UwKSk7CisJCWlmICghY29udHJvbF9pbnRlcmZhY2UgfHwgIWRhdGFfaW50ZXJmYWNlKSB7CisJCQlkZXZfZGJnKCZpbnRmLT5kZXYsIm5vIGludGVyZmFjZXNcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CisJCisJaWYgKGRhdGFfaW50ZXJmYWNlX251bSAhPSBjYWxsX2ludGVyZmFjZV9udW0pCisJCWRldl9kYmcoJmludGYtPmRldiwiU2VwZXJhdGUgY2FsbCBjb250cm9sIGludGVyZmFjZS4gVGhhdCBpcyBub3QgZnVsbHkgc3VwcG9ydGVkLlxuIik7CisKK3NraXBfbm9ybWFsX3Byb2JlOgorCisJLyp3b3JrYXJvdW5kIGZvciBzd2l0Y2hlZCBpbnRlcmZhY2VzICovCisJaWYgKGRhdGFfaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gQ0RDX0RBVEFfSU5URVJGQUNFX1RZUEUpIHsKKwkJaWYgKGNvbnRyb2xfaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgPT0gQ0RDX0RBVEFfSU5URVJGQUNFX1RZUEUpIHsKKwkJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICp0OworCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCJZb3VyIGRldmljZSBoYXMgc3dpdGNoZWQgaW50ZXJmYWNlcy5cbiIpOworCisJCQl0ID0gY29udHJvbF9pbnRlcmZhY2U7CisJCQljb250cm9sX2ludGVyZmFjZSA9IGRhdGFfaW50ZXJmYWNlOworCQkJZGF0YV9pbnRlcmZhY2UgPSB0OworCQl9IGVsc2UgeworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJCisJaWYgKHVzYl9pbnRlcmZhY2VfY2xhaW1lZChkYXRhX2ludGVyZmFjZSkpIHsgLyogdmFsaWQgaW4gdGhpcyBjb250ZXh0ICovCisJCWRldl9kYmcoJmludGYtPmRldiwiVGhlIGRhdGEgaW50ZXJmYWNlIGlzbid0IGF2YWlsYWJsZVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisKKwlpZiAoZGF0YV9pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHMgPCAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVwY3RybCA9ICZjb250cm9sX2ludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50WzBdLmRlc2M7CisJZXByZWFkID0gJmRhdGFfaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnRbMF0uZGVzYzsKKwllcHdyaXRlID0gJmRhdGFfaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnRbMV0uZGVzYzsKKworCisJLyogd29ya2Fyb3VuZCBmb3Igc3dpdGNoZWQgZW5kcG9pbnRzICovCisJaWYgKChlcHJlYWQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSAhPSBVU0JfRElSX0lOKSB7CisJCS8qIGRlc2NyaXB0b3JzIGFyZSBzd2FwcGVkICovCisJCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqdDsKKwkJZGV2X2RiZygmaW50Zi0+ZGV2LCJUaGUgZGF0YSBpbnRlcmZhY2UgaGFzIHN3aXRjaGVkIGVuZHBvaW50c1xuIik7CisJCQorCQl0ID0gZXByZWFkOworCQllcHJlYWQgPSBlcHdyaXRlOworCQllcHdyaXRlID0gdDsKKwl9CisJZGJnKCJpbnRlcmZhY2VzIGFyZSB2YWxpZCIpOworCWZvciAobWlub3IgPSAwOyBtaW5vciA8IEFDTV9UVFlfTUlOT1JTICYmIGFjbV90YWJsZVttaW5vcl07IG1pbm9yKyspOworCisJaWYgKG1pbm9yID09IEFDTV9UVFlfTUlOT1JTKSB7CisJCWVycigibm8gbW9yZSBmcmVlIGFjbSBkZXZpY2VzIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICghKGFjbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY20pLCBHRlBfS0VSTkVMKSkpIHsKKwkJZGV2X2RiZygmaW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSAoYWNtIGttYWxsb2MpXG4iKTsKKwkJZ290byBhbGxvY19mYWlsOworCX0KKwltZW1zZXQoYWNtLCAwLCBzaXplb2Yoc3RydWN0IGFjbSkpOworCisJY3RybHNpemUgPSBsZTE2X3RvX2NwdShlcGN0cmwtPndNYXhQYWNrZXRTaXplKTsKKwlyZWFkc2l6ZSA9IGxlMTZfdG9fY3B1KGVwcmVhZC0+d01heFBhY2tldFNpemUpOworCWFjbS0+d3JpdGVzaXplID0gbGUxNl90b19jcHUoZXB3cml0ZS0+d01heFBhY2tldFNpemUpOworCWFjbS0+Y29udHJvbCA9IGNvbnRyb2xfaW50ZXJmYWNlOworCWFjbS0+ZGF0YSA9IGRhdGFfaW50ZXJmYWNlOworCWFjbS0+bWlub3IgPSBtaW5vcjsKKwlhY20tPmRldiA9IHVzYl9kZXY7CisJYWNtLT5jdHJsX2NhcHMgPSBhY19tYW5hZ2VtZW50X2Z1bmN0aW9uOworCWFjbS0+Y3RybHNpemUgPSBjdHJsc2l6ZTsKKwlhY20tPnJlYWRzaXplID0gcmVhZHNpemU7CisJYWNtLT5iaC5mdW5jID0gYWNtX3J4X3Rhc2tsZXQ7CisJYWNtLT5iaC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGFjbTsKKwlJTklUX1dPUksoJmFjbS0+d29yaywgYWNtX3NvZnRpbnQsIGFjbSk7CisJc3Bpbl9sb2NrX2luaXQoJmFjbS0+dGhyb3R0bGVfbG9jayk7CisJYWNtLT5yZWFkeV9mb3Jfd3JpdGUgPSAxOworCisJYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyh1c2JfZGV2LCBjdHJsc2l6ZSwgR0ZQX0tFUk5FTCwgJmFjbS0+Y3RybF9kbWEpOworCWlmICghYnVmKSB7CisJCWRldl9kYmcoJmludGYtPmRldiwgIm91dCBvZiBtZW1vcnkgKGN0cmwgYnVmZmVyIGFsbG9jKVxuIik7CisJCWdvdG8gYWxsb2NfZmFpbDI7CisJfQorCWFjbS0+Y3RybF9idWZmZXIgPSBidWY7CisKKwlidWYgPSB1c2JfYnVmZmVyX2FsbG9jKHVzYl9kZXYsIHJlYWRzaXplLCBHRlBfS0VSTkVMLCAmYWNtLT5yZWFkX2RtYSk7CisJaWYgKCFidWYpIHsKKwkJZGV2X2RiZygmaW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSAocmVhZCBidWZmZXIgYWxsb2MpXG4iKTsKKwkJZ290byBhbGxvY19mYWlsMzsKKwl9CisJYWNtLT5yZWFkX2J1ZmZlciA9IGJ1ZjsKKworCWJ1ZiA9IHVzYl9idWZmZXJfYWxsb2ModXNiX2RldiwgYWNtLT53cml0ZXNpemUsIEdGUF9LRVJORUwsICZhY20tPndyaXRlX2RtYSk7CisJaWYgKCFidWYpIHsKKwkJZGV2X2RiZygmaW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSAod3JpdGUgYnVmZmVyIGFsbG9jKVxuIik7CisJCWdvdG8gYWxsb2NfZmFpbDQ7CisJfQorCWFjbS0+d3JpdGVfYnVmZmVyID0gYnVmOwkKKworCWFjbS0+Y3RybHVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY20tPmN0cmx1cmIpIHsKKwkJZGV2X2RiZygmaW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSAoY3RybHVyYiBrbWFsbG9jKVxuIik7CisJCWdvdG8gYWxsb2NfZmFpbDU7CisJfQorCWFjbS0+cmVhZHVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY20tPnJlYWR1cmIpIHsKKwkJZGV2X2RiZygmaW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSAocmVhZHVyYiBrbWFsbG9jKVxuIik7CisJCWdvdG8gYWxsb2NfZmFpbDY7CisJfQorCWFjbS0+d3JpdGV1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghYWNtLT53cml0ZXVyYikgeworCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5ICh3cml0ZXVyYiBrbWFsbG9jKVxuIik7CisJCWdvdG8gYWxsb2NfZmFpbDc7CisJfQorCisJdXNiX2ZpbGxfaW50X3VyYihhY20tPmN0cmx1cmIsIHVzYl9kZXYsIHVzYl9yY3ZpbnRwaXBlKHVzYl9kZXYsIGVwY3RybC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkgYWNtLT5jdHJsX2J1ZmZlciwgY3RybHNpemUsIGFjbV9jdHJsX2lycSwgYWNtLCBlcGN0cmwtPmJJbnRlcnZhbCk7CisJYWNtLT5jdHJsdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwlhY20tPmN0cmx1cmItPnRyYW5zZmVyX2RtYSA9IGFjbS0+Y3RybF9kbWE7CisKKwl1c2JfZmlsbF9idWxrX3VyYihhY20tPnJlYWR1cmIsIHVzYl9kZXYsIHVzYl9yY3ZidWxrcGlwZSh1c2JfZGV2LCBlcHJlYWQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJICBhY20tPnJlYWRfYnVmZmVyLCByZWFkc2l6ZSwgYWNtX3JlYWRfYnVsaywgYWNtKTsKKwlhY20tPnJlYWR1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19GU0JSIHwgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJYWNtLT5yZWFkdXJiLT50cmFuc2Zlcl9kbWEgPSBhY20tPnJlYWRfZG1hOworCisJdXNiX2ZpbGxfYnVsa191cmIoYWNtLT53cml0ZXVyYiwgdXNiX2RldiwgdXNiX3NuZGJ1bGtwaXBlKHVzYl9kZXYsIGVwd3JpdGUtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJICBhY20tPndyaXRlX2J1ZmZlciwgYWNtLT53cml0ZXNpemUsIGFjbV93cml0ZV9idWxrLCBhY20pOworCWFjbS0+d3JpdGV1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19GU0JSIHwgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJYWNtLT53cml0ZXVyYi0+dHJhbnNmZXJfZG1hID0gYWNtLT53cml0ZV9kbWE7CisKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAidHR5QUNNJWQ6IFVTQiBBQ00gZGV2aWNlXG4iLCBtaW5vcik7CisKKwlhY21fc2V0X2NvbnRyb2woYWNtLCBhY20tPmN0cmxvdXQpOworCisJYWNtLT5saW5lLmR3RFRFUmF0ZSA9IGNwdV90b19sZTMyKDk2MDApOworCWFjbS0+bGluZS5iRGF0YUJpdHMgPSA4OworCWFjbV9zZXRfbGluZShhY20sICZhY20tPmxpbmUpOworCisJdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2UoJmFjbV9kcml2ZXIsIGRhdGFfaW50ZXJmYWNlLCBhY20pOworCisJdHR5X3JlZ2lzdGVyX2RldmljZShhY21fdHR5X2RyaXZlciwgbWlub3IsICZpbnRmLT5kZXYpOworCisJYWNtX3RhYmxlW21pbm9yXSA9IGFjbTsKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBhY20pOworCXJldHVybiAwOworCithbGxvY19mYWlsNzoKKwl1c2JfZnJlZV91cmIoYWNtLT5yZWFkdXJiKTsKK2FsbG9jX2ZhaWw2OgorCXVzYl9mcmVlX3VyYihhY20tPmN0cmx1cmIpOworYWxsb2NfZmFpbDU6CisJdXNiX2J1ZmZlcl9mcmVlKHVzYl9kZXYsIGFjbS0+d3JpdGVzaXplLCBhY20tPndyaXRlX2J1ZmZlciwgYWNtLT53cml0ZV9kbWEpOworYWxsb2NfZmFpbDQ6CisJdXNiX2J1ZmZlcl9mcmVlKHVzYl9kZXYsIHJlYWRzaXplLCBhY20tPnJlYWRfYnVmZmVyLCBhY20tPnJlYWRfZG1hKTsKK2FsbG9jX2ZhaWwzOgorCXVzYl9idWZmZXJfZnJlZSh1c2JfZGV2LCBjdHJsc2l6ZSwgYWNtLT5jdHJsX2J1ZmZlciwgYWNtLT5jdHJsX2RtYSk7CithbGxvY19mYWlsMjoKKwlrZnJlZShhY20pOworYWxsb2NfZmFpbDoKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgYWNtX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGFjbSAqYWNtID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCisJaWYgKCFhY20gfHwgIWFjbS0+ZGV2KSB7CisJCWRiZygiZGlzY29ubmVjdCBvbiBub25leGlzdGluZyBpbnRlcmZhY2UiKTsKKwkJcmV0dXJuOworCX0KKworCWRvd24oJm9wZW5fc2VtKTsKKwlhY20tPmRldiA9IE5VTEw7CisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisKKwl1c2Jfa2lsbF91cmIoYWNtLT5jdHJsdXJiKTsKKwl1c2Jfa2lsbF91cmIoYWNtLT5yZWFkdXJiKTsKKwl1c2Jfa2lsbF91cmIoYWNtLT53cml0ZXVyYik7CisKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOyAvKiB3YWl0IGZvciBhY21fc29mdGludCAqLworCisJdXNiX2J1ZmZlcl9mcmVlKHVzYl9kZXYsIGFjbS0+d3JpdGVzaXplLCBhY20tPndyaXRlX2J1ZmZlciwgYWNtLT53cml0ZV9kbWEpOworCXVzYl9idWZmZXJfZnJlZSh1c2JfZGV2LCBhY20tPnJlYWRzaXplLCBhY20tPnJlYWRfYnVmZmVyLCBhY20tPnJlYWRfZG1hKTsKKwl1c2JfYnVmZmVyX2ZyZWUodXNiX2RldiwgYWNtLT5jdHJsc2l6ZSwgYWNtLT5jdHJsX2J1ZmZlciwgYWNtLT5jdHJsX2RtYSk7CisKKwl1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlKCZhY21fZHJpdmVyLCBhY20tPmRhdGEpOworCisJaWYgKCFhY20tPnVzZWQpIHsKKwkJdHR5X3VucmVnaXN0ZXJfZGV2aWNlKGFjbV90dHlfZHJpdmVyLCBhY20tPm1pbm9yKTsKKwkJYWNtX3RhYmxlW2FjbS0+bWlub3JdID0gTlVMTDsKKwkJdXNiX2ZyZWVfdXJiKGFjbS0+Y3RybHVyYik7CisJCXVzYl9mcmVlX3VyYihhY20tPnJlYWR1cmIpOworCQl1c2JfZnJlZV91cmIoYWNtLT53cml0ZXVyYik7CisJCWtmcmVlKGFjbSk7CisJCXVwKCZvcGVuX3NlbSk7CisJCXJldHVybjsKKwl9CisKKwl1cCgmb3Blbl9zZW0pOworCisJaWYgKGFjbS0+dHR5KQorCQl0dHlfaGFuZ3VwKGFjbS0+dHR5KTsKK30KKworLyoKKyAqIFVTQiBkcml2ZXIgc3RydWN0dXJlLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBhY21faWRzW10gPSB7CisJLyogcXVpcmt5IGFuZCBicm9rZW4gZGV2aWNlcyAqLworCXsgVVNCX0RFVklDRSgweDA4NzAsIDB4MDAwMSksIC8qIE1ldHJpY29tIEdTIE1vZGVtICovCisJLmRyaXZlcl9pbmZvID0gTk9fVU5JT05fTk9STUFMLCAvKiBoYXMgbm8gdW5pb24gZGVzY3JpcHRvciAqLworCX0sCisJLyogY29udHJvbCBpbnRlcmZhY2VzIHdpdGggdmFyaW91cyBBVC1jb21tYW5kIHNldHMgKi8KKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfQ09NTSwgVVNCX0NEQ19TVUJDTEFTU19BQ00sCisJCVVTQl9DRENfQUNNX1BST1RPX0FUX1YyNVRFUikgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfQ09NTSwgVVNCX0NEQ19TVUJDTEFTU19BQ00sCisJCVVTQl9DRENfQUNNX1BST1RPX0FUX1BDQ0ExMDEpIH0sCisJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX0NPTU0sIFVTQl9DRENfU1VCQ0xBU1NfQUNNLAorCQlVU0JfQ0RDX0FDTV9QUk9UT19BVF9QQ0NBMTAxX1dBS0UpIH0sCisJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX0NPTU0sIFVTQl9DRENfU1VCQ0xBU1NfQUNNLAorCQlVU0JfQ0RDX0FDTV9QUk9UT19BVF9HU00pIH0sCisJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX0NPTU0sIFVTQl9DRENfU1VCQ0xBU1NfQUNNLAorCQlVU0JfQ0RDX0FDTV9QUk9UT19BVF8zRwkpIH0sCisJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX0NPTU0sIFVTQl9DRENfU1VCQ0xBU1NfQUNNLAorCQlVU0JfQ0RDX0FDTV9QUk9UT19BVF9DRE1BKSB9LAorCisJLyogTk9URTogIENPTU0vQUNNLzB4ZmYgaXMgbGlrZWx5IE1TRlQgUk5ESVMgLi4uIE5PVCBhIG1vZGVtISEgKi8KKwl7IH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgYWNtX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhY21fZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJjZGNfYWNtIiwKKwkucHJvYmUgPQlhY21fcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQlhY21fZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlhY21faWRzLAorfTsKKworLyoKKyAqIFRUWSBkcml2ZXIgc3RydWN0dXJlcy4KKyAqLworCitzdGF0aWMgc3RydWN0IHR0eV9vcGVyYXRpb25zIGFjbV9vcHMgPSB7CisJLm9wZW4gPQkJCWFjbV90dHlfb3BlbiwKKwkuY2xvc2UgPQkJYWNtX3R0eV9jbG9zZSwKKwkud3JpdGUgPQkJYWNtX3R0eV93cml0ZSwKKwkud3JpdGVfcm9vbSA9CQlhY21fdHR5X3dyaXRlX3Jvb20sCisJLmlvY3RsID0JCWFjbV90dHlfaW9jdGwsCisJLnRocm90dGxlID0JCWFjbV90dHlfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUgPQkJYWNtX3R0eV91bnRocm90dGxlLAorCS5jaGFyc19pbl9idWZmZXIgPQlhY21fdHR5X2NoYXJzX2luX2J1ZmZlciwKKwkuYnJlYWtfY3RsID0JCWFjbV90dHlfYnJlYWtfY3RsLAorCS5zZXRfdGVybWlvcyA9CQlhY21fdHR5X3NldF90ZXJtaW9zLAorCS50aW9jbWdldCA9CQlhY21fdHR5X3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9CQlhY21fdHR5X3Rpb2Ntc2V0LAorfTsKKworLyoKKyAqIEluaXQgLyBleGl0LgorICovCisKK3N0YXRpYyBpbnQgX19pbml0IGFjbV9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKwlhY21fdHR5X2RyaXZlciA9IGFsbG9jX3R0eV9kcml2ZXIoQUNNX1RUWV9NSU5PUlMpOworCWlmICghYWNtX3R0eV9kcml2ZXIpCisJCXJldHVybiAtRU5PTUVNOworCWFjbV90dHlfZHJpdmVyLT5vd25lciA9IFRISVNfTU9EVUxFLAorCWFjbV90dHlfZHJpdmVyLT5kcml2ZXJfbmFtZSA9ICJhY20iLAorCWFjbV90dHlfZHJpdmVyLT5uYW1lID0gInR0eUFDTSIsCisJYWNtX3R0eV9kcml2ZXItPmRldmZzX25hbWUgPSAidXNiL2FjbS8iLAorCWFjbV90dHlfZHJpdmVyLT5tYWpvciA9IEFDTV9UVFlfTUFKT1IsCisJYWNtX3R0eV9kcml2ZXItPm1pbm9yX3N0YXJ0ID0gMCwKKwlhY21fdHR5X2RyaXZlci0+dHlwZSA9IFRUWV9EUklWRVJfVFlQRV9TRVJJQUwsCisJYWNtX3R0eV9kcml2ZXItPnN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUwsCisJYWNtX3R0eV9kcml2ZXItPmZsYWdzID0gVFRZX0RSSVZFUl9SRUFMX1JBVyB8IFRUWV9EUklWRVJfTk9fREVWRlMsCisJYWNtX3R0eV9kcml2ZXItPmluaXRfdGVybWlvcyA9IHR0eV9zdGRfdGVybWlvczsKKwlhY21fdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcgPSBCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7CisJdHR5X3NldF9vcGVyYXRpb25zKGFjbV90dHlfZHJpdmVyLCAmYWNtX29wcyk7CisKKwlyZXR2YWwgPSB0dHlfcmVnaXN0ZXJfZHJpdmVyKGFjbV90dHlfZHJpdmVyKTsKKwlpZiAocmV0dmFsKSB7CisJCXB1dF90dHlfZHJpdmVyKGFjbV90dHlfZHJpdmVyKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmFjbV9kcml2ZXIpOworCWlmIChyZXR2YWwpIHsKKwkJdHR5X3VucmVnaXN0ZXJfZHJpdmVyKGFjbV90dHlfZHJpdmVyKTsKKwkJcHV0X3R0eV9kcml2ZXIoYWNtX3R0eV9kcml2ZXIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWNtX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmYWNtX2RyaXZlcik7CisJdHR5X3VucmVnaXN0ZXJfZHJpdmVyKGFjbV90dHlfZHJpdmVyKTsKKwlwdXRfdHR5X2RyaXZlcihhY21fdHR5X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGFjbV9pbml0KTsKK21vZHVsZV9leGl0KGFjbV9leGl0KTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmggYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAwOTExNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uaApAQCAtMCwwICsxLDgyIEBACisvKgorICoKKyAqIEluY2x1ZGVzIGZvciBjZGMtYWNtLmMKKyAqCisgKiBNYWlubHkgdGFrZSBmcm9tIHVzYm5ldCdzIGNkYy1ldGhlciBwYXJ0CisgKgorICovCisKKy8qCisgKiBDTVNQQVIsIHNvbWUgYXJjaGl0ZWN0dXJlcyBjYW4ndCBoYXZlIHNwYWNlIGFuZCBtYXJrIHBhcml0eS4KKyAqLworCisjaWZuZGVmIENNU1BBUgorI2RlZmluZSBDTVNQQVIJCQkwCisjZW5kaWYKKworLyoKKyAqIE1ham9yIGFuZCBtaW5vciBudW1iZXJzLgorICovCisKKyNkZWZpbmUgQUNNX1RUWV9NQUpPUgkJMTY2CisjZGVmaW5lIEFDTV9UVFlfTUlOT1JTCQkzMgorCisvKgorICogUmVxdWVzdHMuCisgKi8KKworI2RlZmluZSBVU0JfUlRfQUNNCQkoVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFKQorCisvKgorICogT3V0cHV0IGNvbnRyb2wgbGluZXMuCisgKi8KKworI2RlZmluZSBBQ01fQ1RSTF9EVFIJCTB4MDEKKyNkZWZpbmUgQUNNX0NUUkxfUlRTCQkweDAyCisKKy8qCisgKiBJbnB1dCBjb250cm9sIGxpbmVzIGFuZCBsaW5lIGVycm9ycy4KKyAqLworCisjZGVmaW5lIEFDTV9DVFJMX0RDRAkJMHgwMQorI2RlZmluZSBBQ01fQ1RSTF9EU1IJCTB4MDIKKyNkZWZpbmUgQUNNX0NUUkxfQlJLCQkweDA0CisjZGVmaW5lIEFDTV9DVFJMX1JJCQkweDA4CisKKyNkZWZpbmUgQUNNX0NUUkxfRlJBTUlORwkweDEwCisjZGVmaW5lIEFDTV9DVFJMX1BBUklUWQkJMHgyMAorI2RlZmluZSBBQ01fQ1RSTF9PVkVSUlVOCTB4NDAKKworLyoKKyAqIEludGVybmFsIGRyaXZlciBzdHJ1Y3R1cmVzLgorICovCisKK3N0cnVjdCBhY20geworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CQkJCS8qIHRoZSBjb3JyZXNwb25kaW5nIHVzYiBkZXZpY2UgKi8KKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqY29udHJvbDsJCQkvKiBjb250cm9sIGludGVyZmFjZSAqLworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICpkYXRhOwkJCS8qIGRhdGEgaW50ZXJmYWNlICovCisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsJCQkJLyogdGhlIGNvcnJlc3BvbmRpbmcgdHR5ICovCisJc3RydWN0IHVyYiAqY3RybHVyYiwgKnJlYWR1cmIsICp3cml0ZXVyYjsJLyogdXJicyAqLworCXU4ICpjdHJsX2J1ZmZlciwgKnJlYWRfYnVmZmVyLCAqd3JpdGVfYnVmZmVyOwkvKiBidWZmZXJzIG9mIHVyYnMgKi8KKwlkbWFfYWRkcl90IGN0cmxfZG1hLCByZWFkX2RtYSwgd3JpdGVfZG1hOwkvKiBkbWEgaGFuZGxlcyBvZiBidWZmZXJzICovCisJc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgbGluZTsJCS8qIGJpdHMsIHN0b3AsIHBhcml0eSAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwkJCS8qIHdvcmsgcXVldWUgZW50cnkgZm9yIGxpbmUgZGlzY2lwbGluZSB3YWtpbmcgdXAgKi8KKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgYmg7CQkJLyogcnggcHJvY2Vzc2luZyAqLworCXNwaW5sb2NrX3QgdGhyb3R0bGVfbG9jazsJCQkvKiBzeW5jaHJvbml6ZSB0aHJvdHRlbGluZyBhbmQgcmVhZCBjYWxsYmFjayAqLworCXVuc2lnbmVkIGludCBjdHJsaW47CQkJCS8qIGlucHV0IGNvbnRyb2wgbGluZXMgKERDRCwgRFNSLCBSSSwgYnJlYWssIG92ZXJydW5zKSAqLworCXVuc2lnbmVkIGludCBjdHJsb3V0OwkJCQkvKiBvdXRwdXQgY29udHJvbCBsaW5lcyAoRFRSLCBSVFMpICovCisJdW5zaWduZWQgaW50IHdyaXRlc2l6ZTsJCQkJLyogbWF4IHBhY2tldCBzaXplIGZvciB0aGUgb3V0cHV0IGJ1bGsgZW5kcG9pbnQgKi8KKwl1bnNpZ25lZCBpbnQgcmVhZHNpemUsY3RybHNpemU7CQkJLyogYnVmZmVyIHNpemVzIGZvciBmcmVlaW5nICovCisJdW5zaWduZWQgaW50IHVzZWQ7CQkJCS8qIHNvbWVvbmUgaGFzIHRoaXMgYWNtJ3MgZGV2aWNlIG9wZW4gKi8KKwl1bnNpZ25lZCBpbnQgbWlub3I7CQkJCS8qIGFjbSBtaW5vciBudW1iZXIgKi8KKwl1bnNpZ25lZCBjaGFyIHRocm90dGxlOwkJCQkvKiB0aHJvdHRsZWQgYnkgdHR5IGxheWVyICovCisJdW5zaWduZWQgY2hhciBjbG9jYWw7CQkJCS8qIHRlcm1pb3MgQ0xPQ0FMICovCisJdW5zaWduZWQgY2hhciByZWFkeV9mb3Jfd3JpdGU7CQkJLyogd3JpdGUgdXJiIGNhbiBiZSB1c2VkICovCisJdW5zaWduZWQgY2hhciByZXN1Ym1pdF90b191bnRocm90dGxlOwkJLyogdGhyb3R0ZWxpbmcgaGFzIGRpc2FibGVkIHRoZSByZWFkIHVyYiAqLworCXVuc2lnbmVkIGludCBjdHJsX2NhcHM7CQkJCS8qIGNvbnRyb2wgY2FwYWJpbGl0aWVzIGZyb20gdGhlIGNsYXNzIHNwZWNpZmljIGhlYWRlciAqLworfTsKKworI2RlZmluZSBDRENfREFUQV9JTlRFUkZBQ0VfVFlQRQkweDBhCisKKy8qIGNvbnN0YW50cyBkZXNjcmliaW5nIHZhcmlvdXMgcXVpcmtzIGFuZCBlcnJvcnMgKi8KKyNkZWZpbmUgTk9fVU5JT05fTk9STUFMCQkJMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNiLW1pZGkuYyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYi1taWRpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY4YWYzNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYi1taWRpLmMKQEAgLTAsMCArMSwyMTU0IEBACisvKgorICB1c2ItbWlkaS5jICAtLSAgVVNCLU1JREkgZHJpdmVyCisKKyAgQ29weXJpZ2h0IChDKSAyMDAxIAorICAgICAgTkFHQU5PIERhaXN1a2UgPGJyZWV6ZS5uYWdhbm9AbmlmdHkubmUuanA+CisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisgIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uOgorICAgIC0gJ1VuaXZlcnNhbCBTZXJpYWwgQnVzIERldmljZSBDbGFzcyBEZWZpbml0aW9uIGZvciBNSURJIERldmljZScKKyAgICAtIGxpbnV4L2RyaXZlcnMvc291bmQvZXMxMzcxLmMsIGxpbnV4L2RyaXZlcnMvdXNiL2F1ZGlvLmMKKyAgICAtIGFsc2EvbG93bGV2ZWwvcGNpL2NzNjR4eC5jCisgICAgLSB1bWlkaS5jIGZvciBOZXRCU0QKKyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc291bmQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorCisjaW5jbHVkZSAidXNiLW1pZGkuaCIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBNb3JlIHZlcmJvc2Ugb24gc3lzbG9nICovCisjdW5kZWYgTUlESV9ERUJVRworCisjZGVmaW5lIE1JRElfSU5fQlVGU0laIDEwMjQKKworI2RlZmluZSBIQVZFX1NVUFBPUlRfVVNCX01JRElfQ0xBU1MKKworI3VuZGVmIEhBVkVfU1VQUE9SVF9BTFNBCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBzaW5nbGVieXRlID0gMDsKK21vZHVsZV9wYXJhbShzaW5nbGVieXRlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhzaW5nbGVieXRlLCJFbmFibGUgc2VuZGluZyBNSURJIG1lc3NhZ2VzIHdpdGggc2luZ2xlIG1lc3NhZ2UgcGFja2V0Iik7CisKK3N0YXRpYyBpbnQgbWF4ZGV2aWNlcyA9IDQ7Cittb2R1bGVfcGFyYW0obWF4ZGV2aWNlcywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobWF4ZGV2aWNlcywiTWF4IG51bWJlciBvZiBhbGxvY2F0YWJsZSBNSURJIGRldmljZSIpOworCitzdGF0aWMgaW50IHV2ZW5kb3IgICAgID0gLTE7Cittb2R1bGVfcGFyYW0odXZlbmRvciwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModXZlbmRvciwgIlRoZSBVU0IgVmVuZG9yIElEIG9mIGEgc2VtaS1jb21wbGlhbnQgaW50ZXJmYWNlIik7CisKK3N0YXRpYyBpbnQgdXByb2R1Y3QgICAgPSAtMTsKK21vZHVsZV9wYXJhbSh1cHJvZHVjdCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModXByb2R1Y3QsICJUaGUgVVNCIFByb2R1Y3QgSUQgb2YgYSBzZW1pLWNvbXBsaWFudCBpbnRlcmZhY2UiKTsKKworc3RhdGljIGludCB1aW50ZXJmYWNlICA9IC0xOworbW9kdWxlX3BhcmFtKHVpbnRlcmZhY2UsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHVpbnRlcmZhY2UsICJUaGUgSW50ZXJmYWNlIG51bWJlciBvZiBhIHNlbWktY29tcGxpYW50IGludGVyZmFjZSIpOworCitzdGF0aWMgaW50IHVhbHQgICAgICAgID0gLTE7Cittb2R1bGVfcGFyYW0odWFsdCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModWFsdCwgIlRoZSBvcHRpb25hbCBhbHRlcm5hdGl2ZSBzZXR0aW5nIG9mIGEgc2VtaS1jb21wbGlhbnQgaW50ZXJmYWNlIik7CisKK3N0YXRpYyBpbnQgdW1pbiAgICAgICAgPSAtMTsKK21vZHVsZV9wYXJhbSh1bWluLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh1bWluLCAiVGhlIGlucHV0IGVuZHBvaW50IG9mIGEgc2VtaS1jb21wbGlhbnQgaW50ZXJmYWNlIik7CisKK3N0YXRpYyBpbnQgdW1vdXQgICAgICAgPSAtMTsKK21vZHVsZV9wYXJhbSh1bW91dCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModW1vdXQsICJUaGUgb3V0cHV0IGVuZHBvaW50IG9mIGEgc2VtaS1jb21wbGlhbnQgaW50ZXJmYWNlIik7CisKK3N0YXRpYyBpbnQgdWNhYmxlICAgICAgPSAtMTsKK21vZHVsZV9wYXJhbSh1Y2FibGUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHVjYWJsZSwgIlRoZSBjYWJsZSBudW1iZXIgdXNlZCBmb3IgYSBzZW1pLWNvbXBsaWFudCBpbnRlcmZhY2UiKTsKKworLyoqIE5vdGUgLS0gdGhlIHVzYl9zdHJpbmcoKSByZXR1cm5zIG9ubHkgTGF0aW4tMSBjaGFyYWN0ZXJzLgorICogKHVuaWNvZGUgY2hhcnMgPD0gMjU1KS4gVG8gc3VwcG9ydCBKYXBhbmVzZSwgYSB1bmljb2RlMTZMRS10by1FVUMgb3IKKyAqIHVuaWNvZGUxNkxFLXRvLUpJUyByb3V0aW5lIGlzIG5lZWRlZCB0byB3cmFwIGFyb3VuZCB1c2JfZ2V0X3N0cmluZygpLgorICoqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IHVsYW5naWQgICAgICA9IDB4MDQwOTsgLyoqIDB4MDQxMSBmb3IgSmFwYW5lc2UgKiovCittb2R1bGVfcGFyYW0odWxhbmdpZCwgdXNob3J0LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModWxhbmdpZCwgIlRoZSBvcHRpb25hbCBwcmVmZXJyZWQgVVNCIExhbmd1YWdlIElEIGZvciBhbGwgZGV2aWNlcyIpOworCitNT0RVTEVfQVVUSE9SKCJOQUdBTk8gRGFpc3VrZSA8YnJlZXplLm5hZ2Fub0BuaWZ0eS5uZS5qcD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVVNCLU1JREkgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqIE1JRElTdHJlYW1pbmcgQ2xhc3MtU3BlY2lmaWMgSW50ZXJmYWNlIERlc2NyaXB0b3IgU3VidHlwZXMgKiovCisKKyNkZWZpbmUgTVNfREVTQ1JJUFRPUl9VTkRFRklORUQJMAorI2RlZmluZSBNU19IRUFERVIJCTEKKyNkZWZpbmUgTUlESV9JTl9KQUNLCQkyCisjZGVmaW5lIE1JRElfT1VUX0pBQ0sJCTMKKy8qIFNwZWMgcmVhZHM6IEVMRU1FTlQgKi8KKyNkZWZpbmUgRUxFTUVOVF9ERVNDUklQVE9SICAgCTQKKworI2RlZmluZSBNU19IRUFERVJfTEVOR1RICTcKKworLyoqIE1JRElTdHJlYW1pbmcgQ2xhc3MtU3BlY2lmaWMgRW5kcG9pbnQgRGVzY3JpcHRvciBTdWJ0eXBlcyAqKi8KKworI2RlZmluZSBERVNDUklQVE9SX1VOREVGSU5FRAkwCisvKiBTcGVjIHJlYWRzOiBNU19HRU5FUkFMICovCisjZGVmaW5lIE1TX0dFTkVSQUxfRU5EUE9JTlQJMQorCisvKiogTUlESVN0cmVhbWluZyBNSURJIElOIGFuZCBPVVQgSmFjayBUeXBlcyAqKi8KKworI2RlZmluZSBKQUNLX1RZUEVfVU5ERUZJTkVECTAKKy8qIFNwZWMgcmVhZHM6IEVNQkVEREVEICovCisjZGVmaW5lIEVNQkVEREVEX0pBQ0sJCTEKKy8qIFNwZWMgcmVhZHM6IEVYVEVSTkFMICovCisjZGVmaW5lIEVYVEVSTkFMX0pBQ0sJCTIKKworCisvKiBzdHJ1Y3R1cmUgc3VtbWFyeQorICAKKyAgICAgIHVzYl9taWRpX3N0YXRlICAgICB1c2JfZGV2aWNlCisgICAgICAgfCAgICAgICAgIHwKKyAgICAgICp8ICAgICAgICAqfCAgICAgICBwZXIgZXAKKyAgICAgaW5fZXAgICAgIG91dF9lcAorICAgICAgIHwgICAgICAgICB8CisgICAgICAqfCAgICAgICAgKnwgICAgICAgcGVyIGNhYmxlCisgICAgICBtaW4gICAgICAgbW91dAorICAgICAgIHwgICAgICAgICB8ICAgICAgIChjYWJsZSB0byBkZXZpY2UgcGFpcmluZyBtYWdpYykKKyAgICAgICB8ICAgICAgICAgfAorICAgICAgIHVzYl9taWRpX2RldiAgICAgIGRldl9pZCAobWFqb3IsbWlub3IpID09IGZpbGUtPnByaXZhdGVfZGF0YQorCisqLworCisvKiB1c2JfbWlkaV9zdGF0ZTogY29ycmVzcG9uZHMgdG8gYSBVU0ItTUlESSBtb2R1bGUgKi8KK3N0cnVjdCB1c2JfbWlkaV9zdGF0ZSB7CisJc3RydWN0IGxpc3RfaGVhZCAgIG1pZGlkZXY7CisJCisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKKwkKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgbWlkaURldkxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCAgIGluRW5kcG9pbnRMaXN0OworCXN0cnVjdCBsaXN0X2hlYWQgICBvdXRFbmRwb2ludExpc3Q7CisJCisJc3BpbmxvY2tfdCAgICAgICAgIGxvY2s7CisJCisJdW5zaWduZWQgaW50ICAgICAgIGNvdW50OyAvKiB1c2FnZSBjb3VudGVyICovCit9OworCisvKiBtaWRpX291dF9lbmRwb2ludDogY29ycmVzcG9uZHMgdG8gYW4gb3V0cHV0IGVuZHBvaW50ICovCitzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQgeworCXN0cnVjdCBsaXN0X2hlYWQgIGxpc3Q7CisJCisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKKwlpbnQgICAgICAgICAgICAgICAgZW5kcG9pbnQ7CisJc3BpbmxvY2tfdCAgICAgICAgIGxvY2s7CisJd2FpdF9xdWV1ZV9oZWFkX3QgIHdhaXQ7CisJCisJdW5zaWduZWQgY2hhciAgICAgKmJ1ZjsKKwlpbnQgICAgICAgICAgICAgICAgYnVmV3JQdHI7CisJaW50ICAgICAgICAgICAgICAgIGJ1ZlNpemU7CisJCisJc3RydWN0IHVyYiAgICAgICAqdXJiOworfTsKKworLyogbWlkaV9pbl9lbmRwb2ludDogY29ycmVzcG9uZHMgdG8gYW4gaW5wdXQgZW5kcG9pbnQgKi8KK3N0cnVjdCBtaWRpX2luX2VuZHBvaW50IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgbGlzdDsKKworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CisJaW50ICAgICAgICAgICAgICAgIGVuZHBvaW50OworCXNwaW5sb2NrX3QgICAgICAgICBsb2NrOworCXdhaXRfcXVldWVfaGVhZF90ICB3YWl0OworCisJc3RydWN0IHVzYl9taWRpZGV2ICpjYWJsZXNbMTZdOwkvLyBjYWJsZXMgb3BlbiBmb3IgcmVhZAorCWludCAgICAgICAgICAgICAgICAgcmVhZGVyczsJLy8gbnVtYmVyIG9mIGNhYmxlcyBvcGVuIGZvciByZWFkCisKKwlzdHJ1Y3QgdXJiICAgICAgICAqdXJiOworCXVuc2lnbmVkIGNoYXIgICAgICpyZWN2QnVmOworCWludCAgICAgICAgICAgICAgICByZWN2QnVmU2l6ZTsKKwlpbnQgICAgICAgICAgICAgICAgdXJiU3VibWl0dGVkOwkvL0ZJWE1FOiA9PSByZWFkZXJzID4gMAorfTsKKworLyogdXNiX21pZGlkZXY6IGNvcnJlc3BvbmRzIHRvIGEgbG9naWNhbCBkZXZpY2UgKi8KK3N0cnVjdCB1c2JfbWlkaWRldiB7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICBsaXN0OworCisJc3RydWN0IHVzYl9taWRpX3N0YXRlICptaWRpOworCWludCAgICAgICAgICAgICAgICAgICAgZGV2X21pZGk7CisJbW9kZV90ICAgICAgICAgICAgICAgICBvcGVuX21vZGU7CisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgbWlkaV9pbl9lbmRwb2ludCAqZXA7CisJCWludCAgICAgICAgICAgICAgY2FibGVJZDsKKwkJCisvLyBhcyB3ZSBhcmUgcHVzaGluZyBkYXRhIGZyb20gdXNiX2J1bGtfcmVhZCB0byB1c2JfbWlkaV9yZWFkLAorLy8gd2UgbmVlZCBhIGxhcmdlciwgY3ljbGljIGJ1ZmZlciBoZXJlLgorCQl1bnNpZ25lZCBjaGFyICAgIGJ1ZltNSURJX0lOX0JVRlNJWl07CisJCWludCAgICAgICAgICAgICAgYnVmUmRQdHI7CisJCWludCAgICAgICAgICAgICAgYnVmV3JQdHI7CisJCWludCAgICAgICAgICAgICAgYnVmUmVtYWluczsKKwl9IG1pbjsKKworCXN0cnVjdCB7CisJCXN0cnVjdCBtaWRpX291dF9lbmRwb2ludCAqZXA7CisJCWludCAgICAgICAgICAgICAgY2FibGVJZDsKKwkJCisJCXVuc2lnbmVkIGNoYXIgICAgYnVmWzNdOworCQlpbnQgICAgICAgICAgICAgIGJ1ZlB0cjsKKwkJaW50ICAgICAgICAgICAgICBidWZSZW1haW5zOworCQkKKwkJaW50ICAgICAgICAgICAgICBpc0luRXhjbHVzaXZlOworCQl1bnNpZ25lZCBjaGFyICAgIGxhc3RFdmVudDsKKwl9IG1vdXQ7CisKKwlpbnQgc2luZ2xlYnl0ZTsKK307CisKKy8qKiBNYXAgdGhlIGhpZ2ggbnliYmxlIG9mIE1JREkgdm9pY2UgbWVzc2FnZXMgdG8gbnVtYmVyIG9mIE1lc3NhZ2UgYnl0ZXMuCisgKiBIaWdoIG55YmxlIHJhbmdlcyBmcm9tIDB4OCB0byAweGUKKyAqLworCitzdGF0aWMgaW50IHJlbWFpbnNfODBlMFtdID0geworCTMsCS8qKiAweDhYIE5vdGUgT2ZmICoqLworCTMsCS8qKiAweDlYIE5vdGUgT24gKiovCisJMywJLyoqIDB4QVggUG9seS1rZXkgcHJlc3N1cmUgKiovCisJMywJLyoqIDB4QlggQ29udHJvbCBDaGFuZ2UgKiovCisJMiwJLyoqIDB4Q1ggUHJvZ3JhbSBDaGFuZ2UgKiovCisJMiwJLyoqIDB4RFggQ2hhbm5lbCBwcmVzc3VyZSAqKi8KKwkzIAkvKiogMHhFWCBQaXRjaEJlbmQgQ2hhbmdlICoqLworfTsKKworLyoqIE1hcCB0aGUgbWVzc2FnZXMgdG8gYSBudW1iZXIgb2YgTWVzc2FnZSBieXRlcy4KKyAqCisgKiovCitzdGF0aWMgaW50IHJlbWFpbnNfZjBmNltdID0geworCTAsCS8qKiAweEYwICoqLworCTIsCS8qKiAwWEYxICoqLworCTMsCS8qKiAwWEYyICoqLworCTIsCS8qKiAwWEYzICoqLworCTIsCS8qKiAwWEY0IChVbmRlZmluZWQgYnkgTUlESSBTcGVjLCBhbmQgc3ViamVjdCB0byBjaGFuZ2UpICoqLworCTIsCS8qKiAwWEY1IChVbmRlZmluZWQgYnkgTUlESSBTcGVjLCBhbmQgc3ViamVjdCB0byBjaGFuZ2UpICoqLworCTEJLyoqIDBYRjYgKiovCit9OworCisvKiogTWFwIHRoZSBtZXNzYWdlcyB0byBhIENJTiAoQ29kZSBJbmRleCBOdW1iZXIpLgorICoKKyAqKi8KK3N0YXRpYyBpbnQgY2luX2YwZmZbXSA9IHsKKwk0LAkvKiogMHhGMCBTeXN0ZW0gRXhjbHVzaXZlIE1lc3NhZ2UgU3RhcnQgKHNwZWNpYWwgY2FzZXMgbWF5IGJlIDYgb3IgNykgKi8KKwkyLAkvKiogMHhGMSAqKi8KKwkzLAkvKiogMHhGMiAqKi8KKwkyLAkvKiogMHhGMyAqKi8KKwkyLAkvKiogMHhGNCAqKi8KKwkyLAkvKiogMHhGNSAqKi8KKwk1LAkvKiogMHhGNiAqKi8KKwk1LAkvKiogMHhGNyBFbmQgb2YgU3lzdGVtIEV4Y2x1c2l2ZSBNZXNzYWdlIChNYXkgYmUgNiBvciA3KSAqKi8KKwk1LAkvKiogMHhGOCAqKi8KKwk1LAkvKiogMHhGOSAqKi8KKwk1LAkvKiogMHhGQSAqKi8KKwk1LAkvKiogMHhGQiAqKi8KKwk1LAkvKiogMHhGQyAqKi8KKwk1LAkvKiogMHhGRCAqKi8KKwk1LAkvKiogMHhGRSAqKi8KKwk1CS8qKiAweEZGICoqLworfTsKKworLyoqIE1hcCBNSURJU3RyZWFtaW5nIEV2ZW50IHBhY2tldCBDb2RlIEluZGV4IE51bWJlciAobG93IG55YmJsZSBvZiBieXRlIDApCisgKiB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIHZhbGlkIE1JREkgZGF0YS4KKyAqCisgKiBDSU4gb2YgMCBhbmQgMSBhcmUgTk9UIFVTRUQgaW4gTUlESVN0cmVhbWluZyAxLjAuCisgKgorICoqLworc3RhdGljIGludCBjaW5fdG9fbGVuW10gPSB7CisJMCwgMCwgMiwgMywKKwkzLCAxLCAyLCAzLAorCTMsIDMsIDMsIDMsCisJMiwgMiwgMywgMQorfTsKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIG1pZGlkZXZzID0gTElTVF9IRUFEX0lOSVQobWlkaWRldnMpOworCitzdGF0aWMgREVDTEFSRV9NVVRFWChvcGVuX3NlbSk7CitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQob3Blbl93YWl0KTsKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkIHVzYl93cml0ZV9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBtaWRpX291dF9lbmRwb2ludCAqZXAgPSAoc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50ICopdXJiLT5jb250ZXh0OworCisJaWYgKCB3YWl0cXVldWVfYWN0aXZlKCAmZXAtPndhaXQgKSApCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSggJmVwLT53YWl0ICk7Cit9CisKKworc3RhdGljIGludCB1c2Jfd3JpdGUoIHN0cnVjdCBtaWRpX291dF9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbiApCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmQ7CisJaW50IHBpcGU7CisJaW50IHJldCA9IDA7CisJaW50IHN0YXR1czsKKwlpbnQgbWF4cmV0cnkgPSA1MDsKKwkKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LGN1cnJlbnQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmVwLT53YWl0KTsKKworCWQgPSBlcC0+dXNiZGV2OworCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUoZCwgZXAtPmVuZHBvaW50KTsKKwl1c2JfZmlsbF9idWxrX3VyYiggZXAtPnVyYiwgZCwgcGlwZSwgKHVuc2lnbmVkIGNoYXIqKWJ1ZiwgbGVuLAorCQkgICAgICAgdXNiX3dyaXRlX2NhbGxiYWNrLCBlcCApOworCisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIoZXAtPnVyYiwgR0ZQX0tFUk5FTCk7CisgICAgCisJaWYgKHN0YXR1cykgeworCQlwcmludGsoS0VSTl9FUlIgInVzYm1pZGk6IENhbm5vdCBzdWJtaXQgdXJiICglZClcbiIsc3RhdHVzKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlhZGRfd2FpdF9xdWV1ZSggJmVwLT53YWl0LCAmd2FpdCApOworCXNldF9jdXJyZW50X3N0YXRlKCBUQVNLX0lOVEVSUlVQVElCTEUgKTsKKworCXdoaWxlKCBlcC0+dXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTICkgeworCQlpZiAoIG1heHJldHJ5LS0gPCAwICkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JtaWRpOiB1c2JfYnVsa19tc2cgdGltZWQgb3V0XG4iKTsKKwkJCXJldCA9IC1FVElNRTsKKwkJCWJyZWFrOworCQl9CisJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCggJmVwLT53YWl0LCAxMCApOworCX0KKwlzZXRfY3VycmVudF9zdGF0ZSggVEFTS19SVU5OSU5HICk7CisJcmVtb3ZlX3dhaXRfcXVldWUoICZlcC0+d2FpdCwgJndhaXQgKTsKKworZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworCisvKiogQ29weSBkYXRhIGZyb20gVVJCIHRvIEluIGVuZHBvaW50IGJ1Zi4KKyAqIERpc2NhcmQgaWYgQ0lOID09IDAgb3IgQ0lOID0gMS4KKyAqCisgKgorICoqLworCitzdGF0aWMgdm9pZCB1c2JfYnVsa19yZWFkKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQgKmVwID0gKHN0cnVjdCBtaWRpX2luX2VuZHBvaW50ICopKHVyYi0+Y29udGV4dCk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCBpLCBqLCB3YWtlOworCisJaWYgKCAhZXAtPnVyYlN1Ym1pdHRlZCApIHsKKwkJcmV0dXJuOworCX0KKworCWlmICggKHVyYi0+c3RhdHVzID09IDApICYmICh1cmItPmFjdHVhbF9sZW5ndGggPiAwKSApIHsKKwkJd2FrZSA9IDA7CisJCXNwaW5fbG9jayggJmVwLT5sb2NrICk7CisKKwkJZm9yKGogPSAwOyBqIDwgdXJiLT5hY3R1YWxfbGVuZ3RoOyBqICs9IDQpIHsKKwkJCWludCBjaW4gPSAoZGF0YVtqXT4+MCkmMHhmOworCQkJaW50IGNhYiA9IChkYXRhW2pdPj40KSYweGY7CisJCQlzdHJ1Y3QgdXNiX21pZGlkZXYgKmNhYmxlID0gZXAtPmNhYmxlc1tjYWJdOworCQkJaWYgKCBjYWJsZSApIHsKKwkJCQlpbnQgbGVuID0gY2luX3RvX2xlbltjaW5dOyAvKiogbGVuZ3RoIG9mIE1JREkgZGF0YSAqKi8KKwkJCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJCQkJY2FibGUtPm1pbi5idWZbY2FibGUtPm1pbi5idWZXclB0cl0gPSBkYXRhWzEraStqXTsKKwkJCQkJY2FibGUtPm1pbi5idWZXclB0ciA9IChjYWJsZS0+bWluLmJ1ZldyUHRyKzEpJU1JRElfSU5fQlVGU0laOworCQkJCQlpZiAoY2FibGUtPm1pbi5idWZSZW1haW5zIDwgTUlESV9JTl9CVUZTSVopCisJCQkJCQljYWJsZS0+bWluLmJ1ZlJlbWFpbnMgKz0gMTsKKwkJCQkJZWxzZSAvKiogbmVlZCB0byBkcm9wIGRhdGEgKiovCisJCQkJCQljYWJsZS0+bWluLmJ1ZlJkUHRyICs9IChjYWJsZS0+bWluLmJ1ZlJkUHRyKzEpJU1JRElfSU5fQlVGU0laOworCQkJCQl3YWtlID0gMTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlzcGluX3VubG9jayAoICZlcC0+bG9jayApOworCQlpZiAoIHdha2UgKSB7CisJCQl3YWtlX3VwKCAmZXAtPndhaXQgKTsKKwkJfQorCX0KKworCS8qIHVyYi0+ZGV2IG11c3QgYmUgcmVpbml0aWFsaXplZCBvbiAyLjQueCBrZXJuZWxzICovCisJdXJiLT5kZXYgPSBlcC0+dXNiZGV2OworCisJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKwl1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworfQorCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBUaGlzIHJvdXRpbmUgbXVzdCBiZSBjYWxsZWQgd2l0aCBzcGluX2xvY2sgKi8KKworLyoqIFdyYXBwZXIgYXJvdW5kIHVzYl93cml0ZSgpLgorICogIFRoaXMgcm91dGluZSBtdXN0IGJlIGNhbGxlZCB3aXRoIHNwaW5fbG9jayBoZWxkIG9uIGVwLgorICogIENhbGxlZCBieSBtaWRpV3JpdGUoKSwgcHV0T25lTWlkaUV2ZW50KCksIGFuZCAgdXNiX21pZGlfd3JpdGUoKTsKKyAqKi8KK3N0YXRpYyBpbnQgZmx1c2hfbWlkaV9idWZmZXIoIHN0cnVjdCBtaWRpX291dF9lbmRwb2ludCAqZXAgKQoreworCWludCByZXQ9MDsKKworCWlmICggZXAtPmJ1ZldyUHRyID4gMCApIHsKKwkJcmV0ID0gdXNiX3dyaXRlKCBlcCwgZXAtPmJ1ZiwgZXAtPmJ1ZldyUHRyICk7CisJCWVwLT5idWZXclB0ciA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworLyoqIEdpdmVuIGEgTUlESSBFdmVudCwgZGV0ZXJtaW5lIHNpemUgb2YgZGF0YSB0byBiZSBhdHRhY2hlZCB0byAKKyAqIFVTQi1NSURJIHBhY2tldC4KKyAqIFJldHVybnMgMSwgMiBvciAzLgorICogQ2FsbGVkIGJ5IG1pZGlXcml0ZSgpOworICogVXNlcyByZW1haW5zXzgwZTAgYW5kIHJlbWFpbnNfZjBmNjsKKyAqKi8KK3N0YXRpYyBpbnQgZ2V0X3JlbWFpbnMoaW50IGV2ZW50KQoreworCWludCByZXQ7CisKKwlpZiAoIGV2ZW50ICA8IDB4ODAgKSB7CisJCXJldCA9IDE7CisJfSBlbHNlIGlmICggZXZlbnQgPCAweGYwICkgeworCQlyZXQgPSByZW1haW5zXzgwZTBbKChldmVudC0weDgwKT4+NCkmMHgwZl07CisJfSBlbHNlIGlmICggZXZlbnQgPCAweGY3ICkgeworCQlyZXQgPSByZW1haW5zX2YwZjZbZXZlbnQtMHhmMF07CisJfSBlbHNlIHsKKwkJcmV0ID0gMTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKiogR2l2ZW4gdGhlIG91dHB1dCBNSURJIGRhdGEgaW4gdGhlIG91dHB1dCBidWZmZXIsIGNvbXB1dGVzIGEgcmVhc29uYWJsZSAKKyAqIENJTi4KKyAqIENhbGxlZCBieSBwdXRPbmVNaWRpRXZlbnQoKS4KKyAqKi8KK3N0YXRpYyBpbnQgZ2V0X0NJTiggc3RydWN0IHVzYl9taWRpZGV2ICptICkKK3sKKwlpbnQgY2luOworCisJaWYgKCBtLT5tb3V0LmJ1ZlswXSA9PSAweGY3ICkgeworCQljaW4gPSA1OworCX0KKwllbHNlIGlmICggbS0+bW91dC5idWZbMV0gPT0gMHhmNyApIHsKKwkJY2luID0gNjsKKwl9CisJZWxzZSBpZiAoIG0tPm1vdXQuYnVmWzJdID09IDB4ZjcgKSB7CisJCWNpbiA9IDc7CisJfQorCWVsc2UgeworCQlpZiAoIG0tPm1vdXQuaXNJbkV4Y2x1c2l2ZSA9PSAxICkgeworCQkJY2luID0gNDsKKwkJfSBlbHNlIGlmICggbS0+bW91dC5idWZbMF0gPCAweDgwICkgeworCQkJLyoqIE9uZSBieXRlIHRoYXQgd2Uga25vdyBub3RoaW5nIGFib3V0LiAqKi8KKwkJCWNpbiA9IDB4RjsgCisJCX0gZWxzZSBpZiAoIG0tPm1vdXQuYnVmWzBdIDwgMHhmMCApIHsKKwkJCS8qKiBNSURJIFZvaWNlIG1lc3NhZ2VzIDB4OFggdG8gMHhFWCBtYXAgdG8gY2luIDB4OCB0byAweEUuICoqLworCQkJY2luID0gKG0tPm1vdXQuYnVmWzBdPj40KSYweDBmOyAKKwkJfQorCQllbHNlIHsKKwkJCS8qKiBTcGVjaWFsIGxvb2t1cCB0YWJsZSBleGlzdHMgZm9yIHJlYWwtdGltZSBldmVudHMuICoqLworCQkJY2luID0gY2luX2YwZmZbbS0+bW91dC5idWZbMF0tMHhmMF07CisJCX0KKwl9CisKKwlyZXR1cm4gY2luOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisKKy8qKiBNb3ZlIGRhdGEgdG8gVVNCIGVuZHBvaW50IGJ1ZmZlci4KKyAqCisgKiovCitzdGF0aWMgaW50IHB1dF9vbmVfbWlkaV9ldmVudChzdHJ1Y3QgdXNiX21pZGlkZXYgKm0pCit7CisJaW50IGNpbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBtaWRpX291dF9lbmRwb2ludCAqZXAgPSBtLT5tb3V0LmVwOworCWludCByZXQ9MDsKKworCWNpbiA9IGdldF9DSU4oIG0gKTsKKwlpZiAoIGNpbiA+IDB4MGYgfHwgY2luIDwgMCApIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoICZlcC0+bG9jaywgZmxhZ3MgKTsKKwllcC0+YnVmW2VwLT5idWZXclB0cisrXSA9IChtLT5tb3V0LmNhYmxlSWQ8PDQpIHwgY2luOworCWVwLT5idWZbZXAtPmJ1ZldyUHRyKytdID0gbS0+bW91dC5idWZbMF07CisJZXAtPmJ1ZltlcC0+YnVmV3JQdHIrK10gPSBtLT5tb3V0LmJ1ZlsxXTsKKwllcC0+YnVmW2VwLT5idWZXclB0cisrXSA9IG0tPm1vdXQuYnVmWzJdOworCWlmICggZXAtPmJ1ZldyUHRyID49IGVwLT5idWZTaXplICkgeworCQlyZXQgPSBmbHVzaF9taWRpX2J1ZmZlciggZXAgKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJmVwLT5sb2NrLCBmbGFncyk7CisKKwltLT5tb3V0LmJ1ZlswXSA9IG0tPm1vdXQuYnVmWzFdID0gbS0+bW91dC5idWZbMl0gPSAwOworCW0tPm1vdXQuYnVmUHRyID0gMDsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKiBXcml0ZSB0aGUgTUlESSBtZXNzYWdlIHYgb24gdGhlIG1pZGkgZGV2aWNlLgorICogIENhbGxlZCBieSB1c2JfbWlkaV93cml0ZSgpOworICogIFJlc3BvbnNpYmxlIGZvciBwYWNrYWdpbmcgYSBNSURJIGRhdGEgc3RyZWFtIGludG8gVVNCLU1JREkgcGFja2V0cy4KKyAqKi8KKworc3RhdGljIGludCBtaWRpX3dyaXRlKCBzdHJ1Y3QgdXNiX21pZGlkZXYgKm0sIGludCB2ICkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBtaWRpX291dF9lbmRwb2ludCAqZXAgPSBtLT5tb3V0LmVwOworCWludCByZXQ9MDsKKwl1bnNpZ25lZCBjaGFyIGMgPSAodW5zaWduZWQgY2hhcil2OworCXVuc2lnbmVkIGNoYXIgc3lzcnRfYnVmWzRdOworCisJaWYgKCBtLT5zaW5nbGVieXRlICE9IDAgKSB7CisJCS8qKiBTaW1wbGUgY29kZSB0byBoYW5kbGUgdGhlIHNpbmdsZS1ieXRlIFVTQi1NSURJIHByb3RvY29sLiAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSggJmVwLT5sb2NrLCBmbGFncyApOworCQlpZiAoIGVwLT5idWZXclB0cis0ID4gZXAtPmJ1ZlNpemUgKSB7CisJCQlyZXQgPSBmbHVzaF9taWRpX2J1ZmZlciggZXAgKTsKKwkJCWlmICggIXJldCApIHsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmZXAtPmxvY2ssIGZsYWdzICk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCQllcC0+YnVmW2VwLT5idWZXclB0cisrXSA9IChtLT5tb3V0LmNhYmxlSWQ8PDQpIHwgIDB4MGY7IC8qIHNpbmdsZSBieXRlICovCisJCWVwLT5idWZbZXAtPmJ1ZldyUHRyKytdID0gYzsKKwkJZXAtPmJ1ZltlcC0+YnVmV3JQdHIrK10gPSAwOworCQllcC0+YnVmW2VwLT5idWZXclB0cisrXSA9IDA7CisJCWlmICggZXAtPmJ1ZldyUHRyID49IGVwLT5idWZTaXplICkgeworCQkJcmV0ID0gZmx1c2hfbWlkaV9idWZmZXIoIGVwICk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJmVwLT5sb2NrLCBmbGFncyApOworCisJCXJldHVybiByZXQ7CisJfQorCS8qKiBOb3JtYWwgVVNCLU1JREkgcHJvdG9jb2wgYmVnaW5zIGhlcmUuICovCisKKwlpZiAoIGMgPiAweGY3ICkgewkvKiBzeXN0ZW06IFJlYWx0aW1lIG1lc3NhZ2VzICovCisJCS8qKiBSZWFsdGltZSBtZXNzYWdlcyBhcmUgd3JpdHRlbiBJTU1FRElBVEVMWS4gKi8KKwkJc3lzcnRfYnVmWzBdID0gKG0tPm1vdXQuY2FibGVJZDw8NCkgfCAweDBmOworCQlzeXNydF9idWZbMV0gPSBjOworCQlzeXNydF9idWZbMl0gPSAwOworCQlzeXNydF9idWZbM10gPSAwOworCQlzcGluX2xvY2tfaXJxc2F2ZSggJmVwLT5sb2NrLCBmbGFncyApOworCQlyZXQgPSB1c2Jfd3JpdGUoIGVwLCBzeXNydF9idWYsIDQgKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJmVwLT5sb2NrLCBmbGFncyApOworCQkvKiBtLT5tb3V0Lmxhc3RFdmVudCA9IDA7ICovCisKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoIGMgPj0gMHg4MCApIHsKKwkJaWYgKCBjIDwgMHhmMCApIHsKKwkJCW0tPm1vdXQubGFzdEV2ZW50ID0gYzsKKwkJCW0tPm1vdXQuaXNJbkV4Y2x1c2l2ZSA9IDA7CisJCQltLT5tb3V0LmJ1ZlJlbWFpbnMgPSBnZXRfcmVtYWlucyhjKTsKKwkJfSBlbHNlIGlmICggYyA9PSAweGYwICkgeworCQkJLyogbS0+bW91dC5sYXN0RXZlbnQgPSAwOyAqLworCQkJbS0+bW91dC5pc0luRXhjbHVzaXZlID0gMTsKKwkJCW0tPm1vdXQuYnVmUmVtYWlucyA9IGdldF9yZW1haW5zKGMpOworCQl9IGVsc2UgaWYgKCBjID09IDB4ZjcgJiYgbS0+bW91dC5pc0luRXhjbHVzaXZlID09IDEgKSB7CisJCQkvKiBtLT5tb3V0Lmxhc3RFdmVudCA9IDA7ICovCisJCQltLT5tb3V0LmlzSW5FeGNsdXNpdmUgPSAwOworCQkJbS0+bW91dC5idWZSZW1haW5zID0gMTsKKwkJfSBlbHNlIGlmICggYyA+IDB4ZjAgKSB7CisJCQkvKiBtLT5tb3V0Lmxhc3RFdmVudCA9IDA7ICovCisJCQltLT5tb3V0LmlzSW5FeGNsdXNpdmUgPSAwOworCQkJbS0+bW91dC5idWZSZW1haW5zID0gZ2V0X3JlbWFpbnMoYyk7CisJCX0KKyAgICAKKwl9IGVsc2UgaWYgKCBtLT5tb3V0LmJ1ZlJlbWFpbnMgPT0gMCAmJiBtLT5tb3V0LmlzSW5FeGNsdXNpdmUgPT0gMCApIHsKKwkJaWYgKCBtLT5tb3V0Lmxhc3RFdmVudCA9PSAwICkgeworCQkJcmV0dXJuIDA7IC8qIGRpc2NhcmQsIHdhaXRpbmcgZm9yIHRoZSBmaXJzdCBldmVudCAqLworCQl9CisJCS8qKiB0cmFjayBzdGF0dXMgKiovCisJCW0tPm1vdXQuYnVmWzBdID0gbS0+bW91dC5sYXN0RXZlbnQ7CisJCW0tPm1vdXQuYnVmUHRyID0gMTsKKwkJbS0+bW91dC5idWZSZW1haW5zID0gZ2V0X3JlbWFpbnMobS0+bW91dC5sYXN0RXZlbnQpLTE7CisJfQorICAKKwltLT5tb3V0LmJ1ZlttLT5tb3V0LmJ1ZlB0cisrXSA9IGM7CisJbS0+bW91dC5idWZSZW1haW5zLS07CisJaWYgKCBtLT5tb3V0LmJ1ZlJlbWFpbnMgPT0gMCB8fCBtLT5tb3V0LmJ1ZlB0ciA+PSAzKSB7CisJCXJldCA9IHB1dF9vbmVfbWlkaV9ldmVudChtKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqIEJhc2ljIG9wZXJhdGlvbiBvbiAvZGV2L21pZGlYWCBhcyByZWdpc3RlcmVkIHRocm91Z2ggc3RydWN0IGZpbGVfb3BlcmF0aW9ucy4KKyAqCisgKiAgQmFzaWMgY29udHJhY3Q6IFVzZWQgdG8gY2hhbmdlIHRoZSBjdXJyZW50IHJlYWQvd3JpdGUgcG9zaXRpb24gaW4gYSBmaWxlLgorICogIE9uIHN1Y2Nlc3MsIHRoZSBub24tbmVnYXRpdmUgcG9zaXRpb24gaXMgcmVwb3J0ZWQuCisgKiAgT24gZmFpbHVyZSwgdGhlIG5lZ2F0aXZlIG9mIGFuIGVycm9yIGNvZGUgaXMgcmVwb3J0ZWQuCisgKgorICogIEJlY2F1c2UgYSBNSURJU3RyZWFtIGlzIG5vdCBhIGZpbGUsIGFsbCBzZWVrIG9wZXJhdGlvbnMgYXJlIGRvb21lZCB0byBmYWlsLgorICoKKyAqKi8KK3N0YXRpYyBsb2ZmX3QgdXNiX21pZGlfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZ2luKQoreworCS8qKiBUZWxsIHVzZXIgeW91IGNhbm5vdCBzZWVrIG9uIGEgUElQRS1saWtlIGRldmljZS4gKiovCisJcmV0dXJuIC1FU1BJUEU7Cit9CisKKworLyoqIEJhc2ljIG9wZXJhdGlvbiBvbiAvZGV2L21pZGlYWCBhcyByZWdpc3RlcmVkIHRocm91Z2ggc3RydWN0IGZpbGVfb3BlcmF0aW9ucy4KKyAqCisgKiBCYXNpYyBjb250cmFjdDogQmxvY2sgdW50aWwgY291bnQgYnl0ZXMgaGF2ZSBiZWVuIHJlYWQgb3IgYW4gZXJyb3Igb2NjdXJzLgorICoKKyAqKi8KKworc3RhdGljIHNzaXplX3QgdXNiX21pZGlfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHVzYl9taWRpZGV2ICptID0gKHN0cnVjdCB1c2JfbWlkaWRldiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbWlkaV9pbl9lbmRwb2ludCAqZXAgPSBtLT5taW4uZXA7CisJc3NpemVfdCByZXQ7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisKKwlpZiAoICFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGJ1ZmZlciwgY291bnQpICkgeworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKCBjb3VudCA9PSAwICkgeworCQlyZXR1cm4gMDsKKwl9CisKKwlhZGRfd2FpdF9xdWV1ZSggJmVwLT53YWl0LCAmd2FpdCApOworCXJldCA9IDA7CisJd2hpbGUoIGNvdW50ID4gMCApIHsKKwkJaW50IGNudDsKKwkJaW50IGQgPSAoaW50KWNvdW50OworCisJCWNudCA9IG0tPm1pbi5idWZSZW1haW5zOworCQlpZiAoIGNudCA+IGQgKSB7CisJCQljbnQgPSBkOworCQl9CisKKwkJaWYgKCBjbnQgPD0gMCApIHsKKwkJCWlmICggZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0sgKSB7CisJCQkJaWYgKCFyZXQpIAorCQkJCQlyZXQgPSAtRUFHQUlOOworCQkJCWJyZWFrOworCQkJfQorCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJc2NoZWR1bGUoKTsKKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCWlmKCFyZXQpCisJCQkJCXJldD0tRVJFU1RBUlRTWVM7CisJCQkJYnJlYWs7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCXsKKwkJCWludCBpOworCQkJdW5zaWduZWQgbG9uZyBmbGFnczsgLyogdXNlZCB0byBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gdGhlIGVuZHBvaW50ICovCisJCQlzcGluX2xvY2tfaXJxc2F2ZSggJmVwLT5sb2NrLCBmbGFncyApOworCQkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKSB7CisJCQkJaWYgKCBjb3B5X3RvX3VzZXIoIGJ1ZmZlcitpLCBtLT5taW4uYnVmK20tPm1pbi5idWZSZFB0ciwgMSApICkgeworCQkJCQlpZiAoICFyZXQgKQorCQkJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCW0tPm1pbi5idWZSZFB0ciA9IChtLT5taW4uYnVmUmRQdHIrMSklTUlESV9JTl9CVUZTSVo7CisJCQkJbS0+bWluLmJ1ZlJlbWFpbnMgLT0gMTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZlcC0+bG9jaywgZmxhZ3MgKTsKKwkJfQorCisJCWNvdW50LT1jbnQ7CisJCWJ1ZmZlcis9Y250OworCQlyZXQrPWNudDsKKworCQlicmVhazsKKwl9CisKKwlyZW1vdmVfd2FpdF9xdWV1ZSggJmVwLT53YWl0LCAmd2FpdCApOworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qKiBCYXNpYyBvcGVyYXRpb24gb24gL2Rldi9taWRpWFggYXMgcmVnaXN0ZXJlZCB0aHJvdWdoIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMuCisgKgorICogIEJhc2ljIENvbnRyYWN0OiBUYWtlIE1JREkgZGF0YSBieXRlLWJ5LWJ5dGUgYW5kIHBhc3MgaXQgdG8KKyAqICB3cml0ZU1pZGkoKSB3aGljaCBwYWNrYWdlcyBNSURJIGRhdGEgaW50byBVU0ItTUlESSBzdHJlYW0uCisgKiAgVGhlbiBmbHVzaE1pZGlEYXRhKCkgaXMgY2FsbGVkIHRvIGVuc3VyZSBhbGwgYnl0ZXMgaGF2ZSBiZWVuIHdyaXR0ZW4KKyAqICBpbiBhIHRpbWVseSBmYXNoaW9uLgorICoKKyAqKi8KKworc3RhdGljIHNzaXplX3QgdXNiX21pZGlfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB1c2JfbWlkaWRldiAqbSA9IChzdHJ1Y3QgdXNiX21pZGlkZXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3NpemVfdCByZXQ7CisJdW5zaWduZWQgbG9uZyBpbnQgZmxhZ3M7CisKKwlpZiAoICFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGJ1ZmZlciwgY291bnQpICkgeworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKCBjb3VudCA9PSAwICkgeworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSAwOworCXdoaWxlKCBjb3VudCA+IDAgKSB7CisJCXVuc2lnbmVkIGNoYXIgYzsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoKHVuc2lnbmVkIGNoYXIgKikmYywgYnVmZmVyLCAxKSkgeworCQkJaWYgKCByZXQgPT0gMCApCisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisJCWlmKCBtaWRpX3dyaXRlKG0sIChpbnQpYykgKSB7CisJCQlpZiAoIHJldCA9PSAwICkKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwkJY291bnQtLTsKKwkJYnVmZmVyKys7CisJCXJldCsrOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCAmbS0+bW91dC5lcC0+bG9jaywgZmxhZ3MgKTsKKwlpZiAoIGZsdXNoX21pZGlfYnVmZmVyKG0tPm1vdXQuZXApIDwgMCApIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJm0tPm1vdXQuZXAtPmxvY2ssIGZsYWdzICk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiogQmFzaWMgb3BlcmF0aW9uIG9uIC9kZXYvbWlkaVhYIGFzIHJlZ2lzdGVyZWQgdGhyb3VnaCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zLgorICoKKyAqIEJhc2ljIGNvbnRyYWN0OiAgV2FpdCAoc3BpbikgdW50aWwgcmVhZHkgdG8gcmVhZCBvciB3cml0ZSBvbiB0aGUgZmlsZS4KKyAqCisgKiovCitzdGF0aWMgdW5zaWduZWQgaW50IHVzYl9taWRpX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKK3sKKwlzdHJ1Y3QgdXNiX21pZGlkZXYgKm0gPSAoc3RydWN0IHVzYl9taWRpZGV2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtaWRpX2luX2VuZHBvaW50ICppZXAgPSBtLT5taW4uZXA7CisJc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50ICpvZXAgPSBtLT5tb3V0LmVwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IG1hc2sgPSAwOworICAKKwlpZiAoIGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQgKSB7CisJCXBvbGxfd2FpdCggZmlsZSwgJmllcC0+d2FpdCwgd2FpdCApOworCQlzcGluX2xvY2tfaXJxc2F2ZSggJmllcC0+bG9jaywgZmxhZ3MgKTsKKwkJaWYgKCBtLT5taW4uYnVmUmVtYWlucyA+IDAgKQorCQkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmaWVwLT5sb2NrLCBmbGFncyApOworCX0KKworCWlmICggZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUgKSB7CisJCXBvbGxfd2FpdCggZmlsZSwgJm9lcC0+d2FpdCwgd2FpdCApOworCQlzcGluX2xvY2tfaXJxc2F2ZSggJm9lcC0+bG9jaywgZmxhZ3MgKTsKKwkJaWYgKCBvZXAtPmJ1ZldyUHRyIDwgb2VwLT5idWZTaXplICkKKwkJCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk07CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZvZXAtPmxvY2ssIGZsYWdzICk7CisJfQorCisJcmV0dXJuIG1hc2s7Cit9CisKKworLyoqIEJhc2ljIG9wZXJhdGlvbiBvbiAvZGV2L21pZGlYWCBhcyByZWdpc3RlcmVkIHRocm91Z2ggc3RydWN0IGZpbGVfb3BlcmF0aW9ucy4KKyAqCisgKiBCYXNpYyBjb250cmFjdDogVGhpcyBpcyBhbHdheXMgdGhlIGZpcnN0IG9wZXJhdGlvbiBwZXJmb3JtZWQgb24gdGhlCisgKiBkZXZpY2Ugbm9kZS4gSWYgbm8gbWV0aG9kIGlzIGRlZmluZWQsIHRoZSBvcGVuIHN1Y2NlZWRzIHdpdGhvdXQgYW55CisgKiBub3RpZmljYXRpb24gZ2l2ZW4gdG8gdGhlIG1vZHVsZS4KKyAqCisgKiovCisKK3N0YXRpYyBpbnQgdXNiX21pZGlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCXN0cnVjdCB1c2JfbWlkaV9zdGF0ZSAqczsKKwlzdHJ1Y3QgdXNiX21pZGlkZXYgICAgKm07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc3VjY2VlZCA9IDA7CisKKyNpZiAwCisJcHJpbnRrKEtFUk5fSU5GTyAidXNiLW1pZGk6IE9wZW4gbWlub3I9ICVkLlxuIiwgbWlub3IpOworI2VuZGlmCisKKwlmb3IoOzspIHsKKwkJZG93bigmb3Blbl9zZW0pOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHMsICZtaWRpZGV2cywgbWlkaWRldikgeworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShtLCAmcy0+bWlkaURldkxpc3QsIGxpc3QpIHsKKwkJCQlpZiAoICEoKG0tPmRldl9taWRpIF4gbWlub3IpICYgfjB4ZikgKQorCQkJCQlnb3RvIGRldmljZV9mb3VuZDsKKwkJCX0KKwkJfQorCQl1cCgmb3Blbl9zZW0pOworCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldmljZV9mb3VuZDoKKwkJaWYgKCAhcy0+dXNiZGV2ICkgeworCQkJdXAoJm9wZW5fc2VtKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWlmICggIShtLT5vcGVuX21vZGUgJiBmaWxlLT5mX21vZGUpICkgeworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyApIHsKKwkJCXVwKCZvcGVuX3NlbSk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJYWRkX3dhaXRfcXVldWUoICZvcGVuX3dhaXQsICZ3YWl0ICk7CisJCXVwKCZvcGVuX3NlbSk7CisJCXNjaGVkdWxlKCk7CisJCXJlbW92ZV93YWl0X3F1ZXVlKCAmb3Blbl93YWl0LCAmd2FpdCApOworCQlpZiAoIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpICkgeworCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJfQorCX0KKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IG07CisJc3Bpbl9sb2NrX2lycXNhdmUoICZzLT5sb2NrLCBmbGFncyApOworCisJaWYgKCAhKG0tPm9wZW5fbW9kZSAmIChGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUpKSApIHsKKwkJLy9GSVhNRTogaW50ZW50ZWQgc2VtYW50aWNzIHVuY2xlYXIgaGVyZQorCQltLT5taW4uYnVmUmRQdHIgICAgICAgPSAwOworCQltLT5taW4uYnVmV3JQdHIgICAgICAgPSAwOworCQltLT5taW4uYnVmUmVtYWlucyAgICAgPSAwOworCQlzcGluX2xvY2tfaW5pdCgmbS0+bWluLmVwLT5sb2NrKTsKKworCQltLT5tb3V0LmJ1ZlB0ciAgICAgICAgPSAwOworCQltLT5tb3V0LmJ1ZlJlbWFpbnMgICAgPSAwOworCQltLT5tb3V0LmlzSW5FeGNsdXNpdmUgPSAwOworCQltLT5tb3V0Lmxhc3RFdmVudCAgICAgPSAwOworCQlzcGluX2xvY2tfaW5pdCgmbS0+bW91dC5lcC0+bG9jayk7CisJfQorCisJaWYgKCAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgJiYgbS0+bWluLmVwICE9IE5VTEwgKSB7CisJCXVuc2lnbmVkIGxvbmcgaW50IGZsYWdzZXA7CisJCXNwaW5fbG9ja19pcnFzYXZlKCAmbS0+bWluLmVwLT5sb2NrLCBmbGFnc2VwICk7CisJCW0tPm1pbi5lcC0+Y2FibGVzW20tPm1pbi5jYWJsZUlkXSA9IG07CisJCW0tPm1pbi5lcC0+cmVhZGVycyArPSAxOworCQltLT5taW4uYnVmUmRQdHIgICAgICAgPSAwOworCQltLT5taW4uYnVmV3JQdHIgICAgICAgPSAwOworCQltLT5taW4uYnVmUmVtYWlucyAgICAgPSAwOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmbS0+bWluLmVwLT5sb2NrLCBmbGFnc2VwICk7CisKKwkJaWYgKCAhKG0tPm1pbi5lcC0+dXJiU3VibWl0dGVkKSkgeworCisJCQkvKiB1cmItPmRldiBtdXN0IGJlIHJlaW5pdGlhbGl6ZWQgb24gMi40Lngga2VybmVscyAqLworCQkJbS0+bWluLmVwLT51cmItPmRldiA9IG0tPm1pbi5lcC0+dXNiZGV2OworCisJCQlpZiAoIHVzYl9zdWJtaXRfdXJiKG0tPm1pbi5lcC0+dXJiLCBHRlBfQVRPTUlDKSApIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgInVzYm1pZGk6IENhbm5vdCBzdWJtaXQgdXJiIGZvciBNSURJLUlOXG4iKTsKKwkJCX0KKwkJCW0tPm1pbi5lcC0+dXJiU3VibWl0dGVkID0gMTsKKwkJfQorCQltLT5vcGVuX21vZGUgfD0gRk1PREVfUkVBRDsKKwkJc3VjY2VlZCA9IDE7CisJfQorCisJaWYgKCAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpICYmIG0tPm1vdXQuZXAgIT0gTlVMTCApIHsKKwkJbS0+bW91dC5idWZQdHIgICAgICAgID0gMDsKKwkJbS0+bW91dC5idWZSZW1haW5zICAgID0gMDsKKwkJbS0+bW91dC5pc0luRXhjbHVzaXZlID0gMDsKKwkJbS0+bW91dC5sYXN0RXZlbnQgICAgID0gMDsKKwkJbS0+b3Blbl9tb2RlIHw9IEZNT0RFX1dSSVRFOworCQlzdWNjZWVkID0gMTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmcy0+bG9jaywgZmxhZ3MgKTsKKworCXMtPmNvdW50Kys7CisJdXAoJm9wZW5fc2VtKTsKKworCS8qKiBDaGFuZ2VkIHRvIHByZXZlbnQgZXh0cmEgaW5jcmVtZW50cyB0byBVU0VfQ09VTlQuICoqLworCWlmICghc3VjY2VlZCkgeworCQlyZXR1cm4gLUVCVVNZOworCX0KKworI2lmIDAKKwlwcmludGsoS0VSTl9JTkZPICJ1c2ItbWlkaTogT3BlbiBTdWNjZWVkZWQuIG1pbm9yPSAlZC5cbiIsIG1pbm9yKTsKKyNlbmRpZgorCisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOyAvKiogU3VjY2Vzcy4gKiovCit9CisKKworLyoqIEJhc2ljIG9wZXJhdGlvbiBvbiAvZGV2L21pZGlYWCBhcyByZWdpc3RlcmVkIHRocm91Z2ggc3RydWN0IGZpbGVfb3BlcmF0aW9ucy4KKyAqCisgKiAgQmFzaWMgY29udHJhY3Q6IENsb3NlIGFuIG9wZW5lZCBmaWxlIGFuZCBkZWFsbG9jYXRlIGFueXRoaW5nIHdlIGFsbG9jYXRlZC4KKyAqICBMaWtlIG9wZW4oKSwgdGhpcyBjYW4gYmUgbWlzc2luZy4gSWYgb3BlbiBzZXQgZmlsZS0+cHJpdmF0ZV9kYXRhLAorICogIHJlbGVhc2UoKSBtdXN0IGNsZWFyIGl0LgorICoKKyAqKi8KKworc3RhdGljIGludCB1c2JfbWlkaV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2JfbWlkaWRldiAqbSA9IChzdHJ1Y3QgdXNiX21pZGlkZXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9taWRpX3N0YXRlICpzID0gKHN0cnVjdCB1c2JfbWlkaV9zdGF0ZSAqKW0tPm1pZGk7CisKKyNpZiAwCisJcHJpbnRrKEtFUk5fSU5GTyAidXNiLW1pZGk6IENsb3NlLlxuIik7CisjZW5kaWYKKworCWRvd24oJm9wZW5fc2VtKTsKKworCWlmICggbS0+b3Blbl9tb2RlICYgRk1PREVfV1JJVEUgKSB7CisJCW0tPm9wZW5fbW9kZSAmPSB+Rk1PREVfV1JJVEU7CisJCXVzYl9raWxsX3VyYiggbS0+bW91dC5lcC0+dXJiICk7CisJfQorCisJaWYgKCBtLT5vcGVuX21vZGUgJiBGTU9ERV9SRUFEICkgeworCSAgICAgICAgdW5zaWduZWQgbG9uZyBpbnQgZmxhZ3NlcDsKKwkgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCAmbS0+bWluLmVwLT5sb2NrLCBmbGFnc2VwICk7CisgICAgICAgICAgICAgICAgbS0+bWluLmVwLT5jYWJsZXNbbS0+bWluLmNhYmxlSWRdID0gTlVMTDsgLy8gZGlzY2FyZCBjYWJsZQorICAgICAgICAgICAgICAgIG0tPm1pbi5lcC0+cmVhZGVycyAtPSAxOworCQltLT5vcGVuX21vZGUgJj0gfkZNT0RFX1JFQUQ7CisJCWlmICggbS0+bWluLmVwLT5yZWFkZXJzID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgIG0tPm1pbi5lcC0+dXJiU3VibWl0dGVkICkgeworCQkJbS0+bWluLmVwLT51cmJTdWJtaXR0ZWQgPSAwOworCQkJdXNiX2tpbGxfdXJiKG0tPm1pbi5lcC0+dXJiKTsKKwkJfQorCSAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJm0tPm1pbi5lcC0+bG9jaywgZmxhZ3NlcCApOworCX0KKworCXMtPmNvdW50LS07CisKKwl1cCgmb3Blbl9zZW0pOworCXdha2VfdXAoJm9wZW5fd2FpdCk7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2JfbWlkaV9mb3BzID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5sbHNlZWsgPQl1c2JfbWlkaV9sbHNlZWssCisJLnJlYWQgPQkJdXNiX21pZGlfcmVhZCwKKwkud3JpdGUgPQl1c2JfbWlkaV93cml0ZSwKKwkucG9sbCA9CQl1c2JfbWlkaV9wb2xsLAorCS5vcGVuID0JCXVzYl9taWRpX29wZW4sCisJLnJlbGVhc2UgPQl1c2JfbWlkaV9yZWxlYXNlLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiogUmV0dXJucyBmaWxsZWQgbWlkaV9pbl9lbmRwb2ludCBzdHJ1Y3R1cmUgb3IgbnVsbCBvbiBmYWlsdXJlLgorICoKKyAqIFBhcmFtZXRlcnM6CisgKglkICAgICAgICAtIGEgdXNiX2RldmljZQorICoJZW5kUG9pbnQgLSBBbiB1c2IgZW5kcG9pbnQgaW4gdGhlIHJhbmdlIDAgdG8gMTUuCisgKiBDYWxsZWQgYnkgYWxsb2NVc2JNaWRpRGV2KCk7CisgKgorICoqLworCitzdGF0aWMgc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQgKmFsbG9jX21pZGlfaW5fZW5kcG9pbnQoIHN0cnVjdCB1c2JfZGV2aWNlICpkLCBpbnQgZW5kUG9pbnQgKQoreworCXN0cnVjdCBtaWRpX2luX2VuZHBvaW50ICplcDsKKwlpbnQgYnVmU2l6ZTsKKwlpbnQgcGlwZTsKKworCWVuZFBvaW50ICY9IDB4MGY7IC8qIFNpbGVudGx5IGZvcmNlIGVuZFBvaW50IHRvIGxpZSBpbiByYW5nZSAwIHRvIDE1LiAqLworCisJcGlwZSA9ICB1c2JfcmN2YnVsa3BpcGUoIGQsIGVuZFBvaW50ICk7CisJYnVmU2l6ZSA9IHVzYl9tYXhwYWNrZXQoIGQsIHBpcGUsIDAgKTsKKwkvKiB1c2JfcGlwZWluKCkgPSAhIHVzYl9waXBlb3V0KCkgPSB0cnVlIGZvciBhbiBpbiBFbmRwb2ludCAqLworCisJZXAgPSAoc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWlkaV9pbl9lbmRwb2ludCksIEdGUF9LRVJORUwpOworCWlmICggIWVwICkgeworCQlwcmludGsoS0VSTl9FUlIgInVzYm1pZGk6IG5vIG1lbW9yeSBmb3IgbWlkaSBpbi1lbmRwb2ludFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKwltZW1zZXQoIGVwLCAwLCBzaXplb2Yoc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQpICk7CisvLyAgICAgIHRoaXMgc2V0cyBjYWJsZXNbXSBhbmQgcmVhZGVycyB0byAwLCB0b28uCisvLyAgICAgIGZvciAoaT0wOyBpPDE2OyBpKyspIGVwLT5jYWJsZXNbaV0gPSAwOyAvLyBkaXNjYXJkIGNhYmxlCisvLyAgICAgIGVwLT5yZWFkZXJzID0gMDsKKworCWVwLT5lbmRwb2ludCA9IGVuZFBvaW50OworCisJZXAtPnJlY3ZCdWYgPSAodW5zaWduZWQgY2hhciAqKWttYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGNoYXIpKihidWZTaXplKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCAhZXAtPnJlY3ZCdWYgKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNibWlkaTogbm8gbWVtb3J5IGZvciBtaWRpIGluLWVuZHBvaW50IGJ1ZmZlclxuIik7CisJCWtmcmVlKGVwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZXAtPnVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7IC8qIG5vIElTTyAqLworCWlmICggIWVwLT51cmIgKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNibWlkaTogbm8gbWVtb3J5IGZvciBtaWRpIGluLWVuZHBvaW50IHVyYlxuIik7CisJCWtmcmVlKGVwLT5yZWN2QnVmKTsKKwkJa2ZyZWUoZXApOworCQlyZXR1cm4gTlVMTDsKKwl9CisJdXNiX2ZpbGxfYnVsa191cmIoIGVwLT51cmIsIGQsIAorCQkgICAgICAgdXNiX3JjdmJ1bGtwaXBlKGQsIGVuZFBvaW50KSwKKwkJICAgICAgICh1bnNpZ25lZCBjaGFyICopZXAtPnJlY3ZCdWYsIGJ1ZlNpemUsCisJCSAgICAgICB1c2JfYnVsa19yZWFkLCBlcCApOworCisJLyogZXAtPmJ1ZlJkUHRyICAgICA9IDA7ICovCisJLyogZXAtPmJ1ZldyUHRyICAgICA9IDA7ICovCisJLyogZXAtPmJ1ZlJlbWFpbnMgICA9IDA7ICovCisJLyogZXAtPnVyYlN1Ym1pdHRlZCA9IDA7ICovCisJZXAtPnJlY3ZCdWZTaXplICA9IGJ1ZlNpemU7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZlcC0+d2FpdCk7CisKKwlyZXR1cm4gZXA7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX21pZGlfaW5fZW5kcG9pbnQoIHN0cnVjdCBtaWRpX2luX2VuZHBvaW50ICptaW4gKQoreworCXVzYl9raWxsX3VyYiggbWluLT51cmIgKTsKKwl1c2JfZnJlZV91cmIoIG1pbi0+dXJiICk7CisJa2ZyZWUoIG1pbi0+cmVjdkJ1ZiApOworCWtmcmVlKCBtaW4gKTsKKworCXJldHVybiAwOworfQorCisvKiogUmV0dXJucyBmaWxsZWQgbWlkaV9vdXRfZW5kcG9pbnQgc3RydWN0dXJlIG9yIG51bGwgb24gZmFpbHVyZS4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJZCAgICAgICAgLSBhIHVzYl9kZXZpY2UKKyAqCWVuZFBvaW50IC0gQW4gdXNiIGVuZHBvaW50IGluIHRoZSByYW5nZSAwIHRvIDE1LgorICogQ2FsbGVkIGJ5IGFsbG9jVXNiTWlkaURldigpOworICoKKyAqKi8KK3N0YXRpYyBzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQgKmFsbG9jX21pZGlfb3V0X2VuZHBvaW50KCBzdHJ1Y3QgdXNiX2RldmljZSAqZCwgaW50IGVuZFBvaW50ICkKK3sKKwlzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQgKmVwID0gTlVMTDsKKwlpbnQgcGlwZTsKKwlpbnQgYnVmU2l6ZTsKKworCWVuZFBvaW50ICY9IDB4MGY7CisJcGlwZSA9ICB1c2Jfc25kYnVsa3BpcGUoIGQsIGVuZFBvaW50ICk7CisJYnVmU2l6ZSA9IHVzYl9tYXhwYWNrZXQoIGQsIHBpcGUsIDEgKTsKKworCWVwID0gKHN0cnVjdCBtaWRpX291dF9lbmRwb2ludCAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWRpX291dF9lbmRwb2ludCksIEdGUF9LRVJORUwpOworCWlmICggIWVwICkgeworCQlwcmludGsoS0VSTl9FUlIgInVzYm1pZGk6IG5vIG1lbW9yeSBmb3IgbWlkaSBvdXQtZW5kcG9pbnRcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJbWVtc2V0KCBlcCwgMCwgc2l6ZW9mKHN0cnVjdCBtaWRpX291dF9lbmRwb2ludCkgKTsKKworCWVwLT5lbmRwb2ludCA9IGVuZFBvaW50OworCWVwLT5idWYgPSAodW5zaWduZWQgY2hhciAqKWttYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGNoYXIpKmJ1ZlNpemUsIEdGUF9LRVJORUwpOworCWlmICggIWVwLT5idWYgKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNibWlkaTogbm8gbWVtb3J5IGZvciBtaWRpIG91dC1lbmRwb2ludCBidWZmZXJcbiIpOworCQlrZnJlZShlcCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWVwLT51cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOyAvKiBubyBJU08gKi8KKwlpZiAoICFlcC0+dXJiICkgeworCQlwcmludGsoS0VSTl9FUlIgInVzYm1pZGk6IG5vIG1lbW9yeSBmb3IgbWlkaSBvdXQtZW5kcG9pbnQgdXJiXG4iKTsKKwkJa2ZyZWUoZXAtPmJ1Zik7CisJCWtmcmVlKGVwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZXAtPmJ1ZlNpemUgICAgICAgPSBidWZTaXplOworCS8qIGVwLT5idWZXclB0ciAgICAgID0gMDsgKi8KKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmVwLT53YWl0KTsKKworCXJldHVybiBlcDsKK30KKworCitzdGF0aWMgaW50IHJlbW92ZV9taWRpX291dF9lbmRwb2ludCggc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50ICptb3V0ICkKK3sKKwl1c2Jfa2lsbF91cmIoIG1vdXQtPnVyYiApOworCXVzYl9mcmVlX3VyYiggbW91dC0+dXJiICk7CisJa2ZyZWUoIG1vdXQtPmJ1ZiApOworCWtmcmVlKCBtb3V0ICk7CisKKwlyZXR1cm4gMDsKK30KKworCisvKiogUmV0dXJucyBhIGZpbGxlZCB1c2JfbWlkaWRldiBzdHJ1Y3R1cmUsIHJlZ2lzdGVyZWQgYXMgYSBMaW51eCBNSURJIGRldmljZS4KKyAqCisgKiBSZXR1cm5zIG51bGwgaWYgbWVtb3J5IGlzIG5vdCBhdmFpbGFibGUgb3IgdGhlIGRldmljZSBjYW5ub3QgYmUgcmVnaXN0ZXJlZC4KKyAqIENhbGxlZCBieSBhbGxvY1VzYk1pZGlEZXYoKTsKKyAqCisgKiovCitzdGF0aWMgc3RydWN0IHVzYl9taWRpZGV2ICphbGxvY01pZGlEZXYoCisJc3RydWN0IHVzYl9taWRpX3N0YXRlICpzLAorCXN0cnVjdCBtaWRpX2luX2VuZHBvaW50ICptaW4sCisJc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50ICptb3V0LAorCWludCBpbkNhYmxlSWQsCisJaW50IG91dENhYmxlSWQgKQoreworCXN0cnVjdCB1c2JfbWlkaWRldiAqbTsKKworCW0gPSAoc3RydWN0IHVzYl9taWRpZGV2ICopa21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9taWRpZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNibWlkaTogbm8gbWVtb3J5IGZvciBtaWRpIGRldmljZVxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCW1lbXNldChtLCAwLCBzaXplb2Yoc3RydWN0IHVzYl9taWRpZGV2KSk7CisKKwlpZiAoKG0tPmRldl9taWRpID0gcmVnaXN0ZXJfc291bmRfbWlkaSgmdXNiX21pZGlfZm9wcywgLTEpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JtaWRpOiBjYW5ub3QgcmVnaXN0ZXIgbWlkaSBkZXZpY2VcbiIpOworCQlrZnJlZShtKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbS0+bWlkaSAgICAgICAgICAgICAgID0gczsKKwkvKiBtLT5vcGVuX21vZGUgICAgICAgICAgPSAwOyAqLworCisJaWYgKCBtaW4gKSB7CisJCW0tPm1pbi5lcCAgICAgICAgICAgICA9IG1pbjsKKwkJbS0+bWluLmVwLT51c2JkZXYgICAgID0gcy0+dXNiZGV2OworCQltLT5taW4uY2FibGVJZCAgICAgICAgPSBpbkNhYmxlSWQ7CisJfQorCS8qIG0tPm1pbi5idWZQdHIgICAgICAgICA9IDA7ICovCisJLyogbS0+bWluLmJ1ZlJlbWFpbnMgICAgID0gMDsgKi8KKworCWlmICggbW91dCApIHsKKwkJbS0+bW91dC5lcCAgICAgICAgICAgID0gbW91dDsKKwkJbS0+bW91dC5lcC0+dXNiZGV2ICAgID0gcy0+dXNiZGV2OworCQltLT5tb3V0LmNhYmxlSWQgICAgICAgPSBvdXRDYWJsZUlkOworCX0KKwkvKiBtLT5tb3V0LmJ1ZlB0ciAgICAgICAgPSAwOyAqLworCS8qIG0tPm1vdXQuYnVmUmVtYWlucyAgICA9IDA7ICovCisJLyogbS0+bW91dC5pc0luRXhjbHVzaXZlID0gMDsgKi8KKwkvKiBtLT5tb3V0Lmxhc3RFdmVudCAgICAgPSAwOyAqLworCisJbS0+c2luZ2xlYnl0ZSAgICAgICAgID0gc2luZ2xlYnl0ZTsKKworCXJldHVybiBtOworfQorCisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfbWlkaV9kZXZpY2UoIHN0cnVjdCB1c2JfbWlkaV9zdGF0ZSAqcyApCit7CisJc3RydWN0IHVzYl9taWRpZGV2ICptOworCXN0cnVjdCBtaWRpX2luX2VuZHBvaW50ICptaW47CisJc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50ICptb3V0OworCisJaWYgKCBzLT5jb3VudCA+IDAgKSB7CisJCXVwKCZvcGVuX3NlbSk7CisJCXJldHVybjsKKwl9CisJdXAoICZvcGVuX3NlbSApOworCXdha2VfdXAoICZvcGVuX3dhaXQgKTsKKworCXdoaWxlKCFsaXN0X2VtcHR5KCZzLT5pbkVuZHBvaW50TGlzdCkpIHsKKwkJbWluID0gbGlzdF9lbnRyeShzLT5pbkVuZHBvaW50TGlzdC5uZXh0LCBzdHJ1Y3QgbWlkaV9pbl9lbmRwb2ludCwgbGlzdCk7CisJCWxpc3RfZGVsKCZtaW4tPmxpc3QpOworCQlyZW1vdmVfbWlkaV9pbl9lbmRwb2ludChtaW4pOworCX0KKworCXdoaWxlKCFsaXN0X2VtcHR5KCZzLT5vdXRFbmRwb2ludExpc3QpKSB7CisJCW1vdXQgPSBsaXN0X2VudHJ5KHMtPm91dEVuZHBvaW50TGlzdC5uZXh0LCBzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQsIGxpc3QpOworCQlsaXN0X2RlbCgmbW91dC0+bGlzdCk7CisJCXJlbW92ZV9taWRpX291dF9lbmRwb2ludChtb3V0KTsKKwl9CisKKwl3aGlsZSghbGlzdF9lbXB0eSgmcy0+bWlkaURldkxpc3QpKSB7CisJCW0gPSBsaXN0X2VudHJ5KHMtPm1pZGlEZXZMaXN0Lm5leHQsIHN0cnVjdCB1c2JfbWlkaWRldiwgbGlzdCk7CisJCWxpc3RfZGVsKCZtLT5saXN0KTsKKwkJa2ZyZWUobSk7CisJfQorCisJa2ZyZWUocyk7CisKKwlyZXR1cm47Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiogVXRpbGl0eSByb3V0aW5lIHRvIGZpbmQgYSBkZXNjcmlwdG9yIGluIGEgZHVtcCBvZiBtYW55IGRlc2NyaXB0b3JzLgorICogUmV0dXJucyBzdGFydCBvZiBkZXNjcmlwdG9yIG9yIE5VTEwgaWYgbm90IGZvdW5kLiAKKyAqIGRlc2NTdGFydCBwb2ludGVyIHRvIGxpc3Qgb2YgaW50ZXJmYWNlcy4KKyAqIGRlc2NMZW5ndGggbGVuZ3RoIChpbiBieXRlcykgb2YgZHVtcAorICogYWZ0ZXIgKGlnbm9yZWQgaWYgTlVMTCkgdGhpcyByb3V0aW5lIHJldHVybnMgb25seSBkZXNjcmlwdG9ycyBhZnRlciAiYWZ0ZXIiCisgKiBkdHlwZSAobWFuZGF0b3J5KSBUaGUgZGVzY3JpcHRvciB0eXBlLgorICogaWZhY2UgKGlnbm9yZWQgaWYgLTEpIHJldHVybnMgZGVzY3JpcHRvciBhdC9mb2xsb3dpbmcgZ2l2ZW4gaW50ZXJmYWNlCisgKiBhbHRTZXR0aW5nIChpZ25vcmVkIGlmIC0xKSByZXR1cm5zIGRlc2NyaXB0b3IgYXQvZm9sbG93aW5nIGdpdmVuIGFsdFNldHRpbmcKKyAqCisgKgorICogIENhbGxlZCBieSBwYXJzZURlc2NyaXB0b3IoKSwgZmluZF9jc2ludGVyZmFjZV9kZXNjcmlwdG9yKCk7CisgKgorICovCitzdGF0aWMgdm9pZCAqZmluZF9kZXNjcmlwdG9yKCB2b2lkICpkZXNjU3RhcnQsIHVuc2lnbmVkIGludCBkZXNjTGVuZ3RoLCB2b2lkICphZnRlciwgdW5zaWduZWQgY2hhciBkdHlwZSwgaW50IGlmYWNlLCBpbnQgYWx0U2V0dGluZyApCit7CisJdW5zaWduZWQgY2hhciAqcCwgKmVuZCwgKm5leHQ7CisJaW50IGludGVyZmFjZU51bWJlciA9IC0xLCBhbHRTZXQgPSAtMTsKKworCXAgPSBkZXNjU3RhcnQ7CisJZW5kID0gcCArIGRlc2NMZW5ndGg7CisJZm9yKCA7IHAgPCBlbmQ7ICkgeworCQlpZiAoIHBbMF0gPCAyICkKKwkJCXJldHVybiBOVUxMOworCQluZXh0ID0gcCArIHBbMF07CisJCWlmICggbmV4dCA+IGVuZCApCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKCBwWzFdID09IFVTQl9EVF9JTlRFUkZBQ0UgKSB7CisJCQlpZiAoIHBbMF0gPCBVU0JfRFRfSU5URVJGQUNFX1NJWkUgKQorCQkJCXJldHVybiBOVUxMOworCQkJaW50ZXJmYWNlTnVtYmVyID0gcFsyXTsKKwkJCWFsdFNldCA9IHBbM107CisJCX0KKwkJaWYgKCBwWzFdID09IGR0eXBlICYmCisJCSAgICAgKCAhYWZ0ZXIgfHwgKCBwID4gKHVuc2lnbmVkIGNoYXIgKilhZnRlcikgKSAmJgorCQkgICAgICggKCBpZmFjZSA9PSAtMSkgfHwgKGlmYWNlID09IGludGVyZmFjZU51bWJlcikgKSAmJgorCQkgICAgICggKGFsdFNldHRpbmcgPT0gLTEpIHx8IChhbHRTZXR0aW5nID09IGFsdFNldCkgKSkgeworCQkJcmV0dXJuIHA7CisJCX0KKwkJcCA9IG5leHQ7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiogVXRpbGl0eSB0byBmaW5kIGEgY2xhc3Mtc3BlY2lmaWMgaW50ZXJmYWNlIGRlc2NyaXB0b3IuCisgKiAgZHN1YnR5cGUgaXMgYSBkZXNjcmlwdG9yIHN1YnR5cGUKKyAqICBDYWxsZWQgYnkgcGFyc2VEZXNjcmlwdG9yKCk7CisgKiovCitzdGF0aWMgdm9pZCAqZmluZF9jc2ludGVyZmFjZV9kZXNjcmlwdG9yKHZvaWQgKmRlc2NTdGFydCwgdW5zaWduZWQgaW50IGRlc2NMZW5ndGgsIHZvaWQgKmFmdGVyLCB1OCBkc3VidHlwZSwgaW50IGlmYWNlLCBpbnQgYWx0U2V0dGluZykKK3sKKwl1bnNpZ25lZCBjaGFyICpwOworICAKKwlwID0gZmluZF9kZXNjcmlwdG9yKCBkZXNjU3RhcnQsIGRlc2NMZW5ndGgsIGFmdGVyLCBVU0JfRFRfQ1NfSU5URVJGQUNFLCBpZmFjZSwgYWx0U2V0dGluZyApOworCXdoaWxlICggcCApIHsKKwkJaWYgKCBwWzBdID49IDMgJiYgcFsyXSA9PSBkc3VidHlwZSApCisJCQlyZXR1cm4gcDsKKwkJcCA9IGZpbmRfZGVzY3JpcHRvciggZGVzY1N0YXJ0LCBkZXNjTGVuZ3RoLCBwLCBVU0JfRFRfQ1NfSU5URVJGQUNFLCAKKwkJCQkgICAgIGlmYWNlLCBhbHRTZXR0aW5nICk7CisJfQorCXJldHVybiBOVUxMOworfQorCisKKy8qKiBUaGUgbWFnaWMgb2YgbWFraW5nIGEgbmV3IHVzYl9taWRpX2RldmljZSBmcm9tIGNvbmZpZyBoYXBwZW5zIGhlcmUuCisgKgorICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZS1pbmcgdGhpcyByZXR1cm4gdmFsdWUgKGlmIG5vdCBOVUxMKS4KKyAqCisgKiovCitzdGF0aWMgc3RydWN0IHVzYl9taWRpX2RldmljZSAqcGFyc2VfZGVzY3JpcHRvciggc3RydWN0IHVzYl9kZXZpY2UgKmQsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZlNpemUsIHVuc2lnbmVkIGludCBpZm51bSAsIHVuc2lnbmVkIGludCBhbHRTZXR0aW5nLCBpbnQgcXVpcmtzKQoreworCXN0cnVjdCB1c2JfbWlkaV9kZXZpY2UgKnU7CisJdW5zaWduZWQgY2hhciAqcDE7CisJdW5zaWduZWQgY2hhciAqcDI7CisJdW5zaWduZWQgY2hhciAqbmV4dDsKKwlpbnQgaWVwLCBvZXA7CisJaW50IGxlbmd0aDsKKwl1bnNpZ25lZCBsb25nIGxvbmdCaXRzOworCWludCBwaW5zLCBuYnl0ZXMsIG9mZnNldCwgc2hpZnQsIGphY2s7CisjaWZkZWYgSEFWRV9KQUNLX1NUUklOR1MKKwkvKiogSmFja3MgY2FuIGhhdmUgYXNzb2NpYXRlZCBuYW1lcy4gICoqLworCXVuc2lnbmVkIGNoYXIgamFjazJzdHJpbmdbMjU2XTsKKyNlbmRpZgorCisJdSA9IE5VTEw7CisJLyogZmluZCBhdWRpb2NvbnRyb2wgaW50ZXJmYWNlICovCisJcDEgPSBmaW5kX2NzaW50ZXJmYWNlX2Rlc2NyaXB0b3IoIGJ1ZmZlciwgYnVmU2l6ZSwgTlVMTCwKKwkJCQkJICBNU19IRUFERVIsIGlmbnVtLCBhbHRTZXR0aW5nKTsKKworCWlmICggIXAxICkgeworCQlnb3RvIGVycm9yX2VuZDsKKwl9CisKKwlpZiAoIHAxWzBdIDwgTVNfSEVBREVSX0xFTkdUSCApIHsKKwkJZ290byBlcnJvcl9lbmQ7CisJfQorCisJLyogQXNzdW1lIHN1Y2Nlc3MuIFNpbmNlIHRoZSBkZXZpY2UgY29ycmVzcG9uZHMgdG8gVVNCLU1JREkgc3BlYywgd2UgYXNzdW1lCisJICAgdGhhdCB0aGUgcmVzdCBvZiB0aGUgVVNCIDIuMCBzcGVjIGlzIG9iZXllZC4gKi8KKworCXUgPSAoc3RydWN0IHVzYl9taWRpX2RldmljZSAqKWttYWxsb2MoIHNpemVvZihzdHJ1Y3QgdXNiX21pZGlfZGV2aWNlKSwgR0ZQX0tFUk5FTCApOworCWlmICggIXUgKSB7CisJCXJldHVybiBOVUxMOworCX0KKwl1LT5kZXZpY2VOYW1lID0gTlVMTDsKKwl1LT5pZFZlbmRvciA9IGxlMTZfdG9fY3B1KGQtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOworCXUtPmlkUHJvZHVjdCA9IGxlMTZfdG9fY3B1KGQtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwl1LT5pbnRlcmZhY2UgPSBpZm51bTsKKwl1LT5hbHRTZXR0aW5nID0gYWx0U2V0dGluZzsKKwl1LT5pblswXS5lbmRwb2ludCA9IC0xOworCXUtPmluWzBdLmNhYmxlSWQgPSAtMTsKKwl1LT5vdXRbMF0uZW5kcG9pbnQgPSAtMTsKKwl1LT5vdXRbMF0uY2FibGVJZCA9IC0xOworCisKKwlwcmludGsoS0VSTl9JTkZPICJ1c2ItbWlkaTogRm91bmQgTUlESVN0cmVhbWluZyBkZXZpY2UgY29ycmVzcG9uZGluZyB0byBSZWxlYXNlICVkLiUwMmQgb2Ygc3BlYy5cbiIsCisJICAgICAgIChwMVs0XSA+PiA0KSAqIDEwICsgKHAxWzRdICYgMHgwZiApLAorCSAgICAgICAocDFbM10gPj4gNCkgKiAxMCArIChwMVszXSAmIDB4MGYgKQorCQkpOworCisJbGVuZ3RoID0gcDFbNV0gfCAocDFbNl0gPDwgOCk7CisKKyNpZmRlZiBIQVZFX0pBQ0tfU1RSSU5HUworCW1lbXNldChqYWNrMnN0cmluZywgMCwgc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogMjU2KTsKKyNlbmRpZgorCisJbGVuZ3RoIC09IHAxWzBdOworCWZvciAocDIgPSBwMSArIHAxWzBdOyBsZW5ndGggPiAwOyBwMiA9IG5leHQpIHsKKwkJbmV4dCA9IHAyICsgcDJbMF07CisJCWxlbmd0aCAtPSBwMlswXTsKKworCQlpZiAocDJbMF0gPCAyICkKKwkJCWJyZWFrOworCQlpZiAocDJbMV0gIT0gVVNCX0RUX0NTX0lOVEVSRkFDRSkKKwkJCWJyZWFrOworCQlpZiAocDJbMl0gPT0gTUlESV9JTl9KQUNLICYmIHAyWzBdID49IDYgKSB7CisJCQlqYWNrID0gcDJbNF07CisjaWZkZWYgSEFWRV9KQUNLX1NUUklOR1MKKwkJCWphY2syc3RyaW5nW2phY2tdID0gcDJbNV07CisjZW5kaWYKKwkJCXByaW50ayhLRVJOX0lORk8gInVzYi1taWRpOiBGb3VuZCBJTiBKYWNrIDB4JTAyeCAlc1xuIiwKKwkJCSAgICAgICBqYWNrLCAocDJbM10gPT0gRU1CRURERURfSkFDSyk/IkVNQkVEREVEIjoiRVhURVJOQUwiICk7CisJCX0gZWxzZSBpZiAoIHAyWzJdID09IE1JRElfT1VUX0pBQ0sgJiYgcDJbMF0gPj0gNikgeworCQkJcGlucyA9IHAyWzVdOworCQkJaWYgKCBwMlswXSA8ICg2ICsgMiAqIHBpbnMpICkKKwkJCQljb250aW51ZTsKKwkJCWphY2sgPSBwMls0XTsKKyNpZmRlZiBIQVZFX0pBQ0tfU1RSSU5HUworCQkJamFjazJzdHJpbmdbamFja10gPSBwMls1ICsgMiAqIHBpbnNdOworI2VuZGlmCisJCQlwcmludGsoS0VSTl9JTkZPICJ1c2ItbWlkaTogRm91bmQgT1VUIEphY2sgMHglMDJ4ICVzLCAlZCBwaW5zXG4iLAorCQkJICAgICAgIGphY2ssIChwMlszXSA9PSBFTUJFRERFRF9KQUNLKT8iRU1CRURERUQiOiJFWFRFUk5BTCIsIHBpbnMgKTsKKwkJfSBlbHNlIGlmICggcDJbMl0gPT0gRUxFTUVOVF9ERVNDUklQVE9SICAmJiBwMlswXSAgPj0gMTApIHsKKwkJCXBpbnMgPSBwMls0XTsKKwkJCWlmICggcDJbMF0gPCAoOSArIDIgKiBwaW5zICkgKQorCQkJCWNvbnRpbnVlOworCQkJbmJ5dGVzID0gcDJbOCArIDIgKiBwaW5zIF07CisJCQlpZiAoIHAyWzBdIDwgKDEwICsgMiAqIHBpbnMgKyBuYnl0ZXMpICkKKwkJCQljb250aW51ZTsKKwkJCWxvbmdCaXRzID0gMEw7CisJCQlmb3IgKCBvZmZzZXQgPSAwLCBzaGlmdCA9IDA7IG9mZnNldCA8IG5ieXRlcyAmJiBvZmZzZXQgPCA4OyBvZmZzZXQgKyssIHNoaWZ0ICs9IDgpIHsKKwkJCQlsb25nQml0cyB8PSAoKGxvbmcpKHAyWzkgKyAyICogcGlucyArIG9mZnNldF0pKSA8PCBzaGlmdDsKKwkJCX0KKwkJCWphY2sgPSBwMlszXTsKKyNpZmRlZiBIQVZFX0pBQ0tfU1RSSU5HUworCQkJamFjazJzdHJpbmdbamFja10gPSBwMls5ICsgMiAqIHBpbnMgKyBuYnl0ZXNdOworI2VuZGlmCisJCQlwcmludGsoS0VSTl9JTkZPICJ1c2ItbWlkaTogRm91bmQgRUxFTUVOVCAweCUwMngsICVkLyVkIHBpbnMgaW4vb3V0LCBiaXRzOiAweCUwMTZseFxuIiwKKwkJCSAgICAgICBqYWNrLCBwaW5zLCAoaW50KShwMls1ICsgMiAqIHBpbnNdKSwgKGxvbmcpbG9uZ0JpdHMgKTsKKwkJfSBlbHNlIHsKKwkJfQorCX0KKworCWllcD0wOworCW9lcD0wOworCisJaWYgKHF1aXJrcz09MCkgeworCQkvKiBNSURJU1RSRUFNICovCisJCXAyID0gTlVMTDsKKwkJZm9yIChwMSA9IGZpbmRfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZlNpemUsIE5VTEwsIFVTQl9EVF9FTkRQT0lOVCwKKwkJCQkJICBpZm51bSwgYWx0U2V0dGluZyApOyBwMTsgcDEgPSBuZXh0ICkgeworCQkJbmV4dCA9IGZpbmRfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZlNpemUsIHAxLCBVU0JfRFRfRU5EUE9JTlQsCisJCQkJCSAgICAgICBpZm51bSwgYWx0U2V0dGluZyApOyAKKwkJCXAyID0gZmluZF9kZXNjcmlwdG9yKGJ1ZmZlciwgYnVmU2l6ZSwgcDEsIFVTQl9EVF9DU19FTkRQT0lOVCwKKwkJCQkJICAgICBpZm51bSwgYWx0U2V0dGluZyApOyAKKworCQkJaWYgKCBwMiAmJiBuZXh0ICYmICggcDIgPiBuZXh0ICkgKQorCQkJCXAyID0gTlVMTDsKKworCQkJaWYgKCBwMVswXSA8IDkgfHwgIXAyIHx8IHAyWzBdIDwgNCApCisJCQkJY29udGludWU7CisKKwkJCWlmICggKHAxWzJdICYgMHg4MCkgPT0gMHg4MCApIHsKKwkJCQlpZiAoIGllcCA8IDE1ICkgeworCQkJCQlwaW5zID0gcDJbM107IC8qIG5vdCBwaW5zIC0tIGFjdHVhbGx5ICJjYWJsZXMiICovCisJCQkJCWlmICggcGlucyA+IDE2ICkKKwkJCQkJCXBpbnMgPSAxNjsKKwkJCQkJdS0+aW5baWVwXS5lbmRwb2ludCA9IHAxWzJdOworCQkJCQl1LT5pbltpZXBdLmNhYmxlSWQgPSAoIDEgPDwgcGlucyApIC0gMTsKKwkJCQkJaWYgKCB1LT5pbltpZXBdLmNhYmxlSWQgKQorCQkJCQkJaWVwICsrOworCQkJCQlpZiAoIGllcCA8IDE1ICkgeworCQkJCQkJdS0+aW5baWVwXS5lbmRwb2ludCA9IC0xOworCQkJCQkJdS0+aW5baWVwXS5jYWJsZUlkID0gLTE7CisJCQkJCX0KKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmICggb2VwIDwgMTUgKSB7CisJCQkJCXBpbnMgPSBwMlszXTsgLyogbm90IHBpbnMgLS0gYWN0dWFsbHkgImNhYmxlcyIgKi8KKwkJCQkJaWYgKCBwaW5zID4gMTYgKQorCQkJCQkJcGlucyA9IDE2OworCQkJCQl1LT5vdXRbb2VwXS5lbmRwb2ludCA9IHAxWzJdOworCQkJCQl1LT5vdXRbb2VwXS5jYWJsZUlkID0gKCAxIDw8IHBpbnMgKSAtIDE7CisJCQkJCWlmICggdS0+b3V0W29lcF0uY2FibGVJZCApCisJCQkJCQlvZXAgKys7CisJCQkJCWlmICggb2VwIDwgMTUgKSB7CisJCQkJCQl1LT5vdXRbb2VwXS5lbmRwb2ludCA9IC0xOworCQkJCQkJdS0+b3V0W29lcF0uY2FibGVJZCA9IC0xOworCQkJCQl9CisJCQkJfQorCQkJfQorCQorCQl9CisJfSBlbHNlIGlmIChxdWlya3M9PTEpIHsKKwkJLyogWUFNQUhBIHF1aXJrcyAqLworCQlmb3IgKHAxID0gZmluZF9kZXNjcmlwdG9yKGJ1ZmZlciwgYnVmU2l6ZSwgTlVMTCwgVVNCX0RUX0VORFBPSU5ULAorCQkJCQkgIGlmbnVtLCBhbHRTZXR0aW5nICk7IHAxOyBwMSA9IG5leHQgKSB7CisJCQluZXh0ID0gZmluZF9kZXNjcmlwdG9yKGJ1ZmZlciwgYnVmU2l6ZSwgcDEsIFVTQl9EVF9FTkRQT0lOVCwKKwkJCQkJICAgICAgIGlmbnVtLCBhbHRTZXR0aW5nICk7IAorCQorCQkJaWYgKCBwMVswXSA8IDcgKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoIChwMVsyXSAmIDB4ODApID09IDB4ODAgKSB7CisJCQkJaWYgKCBpZXAgPCAxNSApIHsKKwkJCQkJcGlucyA9IGllcCsxOworCQkJCQlpZiAoIHBpbnMgPiAxNiApCisJCQkJCQlwaW5zID0gMTY7CisJCQkJCXUtPmluW2llcF0uZW5kcG9pbnQgPSBwMVsyXTsKKwkJCQkJdS0+aW5baWVwXS5jYWJsZUlkID0gKCAxIDw8IHBpbnMgKSAtIDE7CisJCQkJCWlmICggdS0+aW5baWVwXS5jYWJsZUlkICkKKwkJCQkJCWllcCArKzsKKwkJCQkJaWYgKCBpZXAgPCAxNSApIHsKKwkJCQkJCXUtPmluW2llcF0uZW5kcG9pbnQgPSAtMTsKKwkJCQkJCXUtPmluW2llcF0uY2FibGVJZCA9IC0xOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoIG9lcCA8IDE1ICkgeworCQkJCQlwaW5zID0gb2VwKzE7CisJCQkJCXUtPm91dFtvZXBdLmVuZHBvaW50ID0gcDFbMl07CisJCQkJCXUtPm91dFtvZXBdLmNhYmxlSWQgPSAoIDEgPDwgcGlucyApIC0gMTsKKwkJCQkJaWYgKCB1LT5vdXRbb2VwXS5jYWJsZUlkICkKKwkJCQkJCW9lcCArKzsKKwkJCQkJaWYgKCBvZXAgPCAxNSApIHsKKwkJCQkJCXUtPm91dFtvZXBdLmVuZHBvaW50ID0gLTE7CisJCQkJCQl1LT5vdXRbb2VwXS5jYWJsZUlkID0gLTE7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCisJCX0KKwl9CisKKwlpZiAoICFpZXAgJiYgISBvZXAgKSB7CisJCWdvdG8gZXJyb3JfZW5kOworCX0KKworCXJldHVybiB1OworCitlcnJvcl9lbmQ6CisJa2ZyZWUodSk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqIFJldHVybnMgbnVtYmVyIGJldHdlZW4gMCBhbmQgMTYuCisgKgorICoqLworc3RhdGljIGludCBvbl9iaXRzKCB1bnNpZ25lZCBzaG9ydCB2ICkKK3sKKwlpbnQgaTsKKwlpbnQgcmV0PTA7CisKKwlmb3IgKCBpPTAgOyBpPDE2IDsgaSsrICkgeworCQlpZiAoIHYgJiAoMTw8aSkgKQorCQkJcmV0Kys7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworCisvKiogVVNCLWRldmljZSB3aWxsIGJlIGludGVycm9nYXRlZCBmb3IgYWx0U2V0dGluZy4KKyAqCisgKiBSZXR1cm5zIG5lZ2F0aXZlIG9uIGVycm9yLgorICogQ2FsbGVkIGJ5IGFsbG9jVXNiTWlkaURldigpOworICoKKyAqKi8KKworc3RhdGljIGludCBnZXRfYWx0X3NldHRpbmcoIHN0cnVjdCB1c2JfZGV2aWNlICpkLCBpbnQgaWZudW0gKQoreworCWludCBhbHRzLCBhbHQ9MDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2U7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXA7CisJaW50IGVwaW4sIGVwb3V0OworCWludCBpOworCisJaWZhY2UgPSB1c2JfaWZudW1fdG9faWYoIGQsIGlmbnVtICk7CisJYWx0cyA9IGlmYWNlLT5udW1fYWx0c2V0dGluZzsKKworCWZvciAoIGFsdD0wIDsgYWx0PGFsdHMgOyBhbHQrKyApIHsKKwkJaW50ZXJmYWNlID0gJmlmYWNlLT5hbHRzZXR0aW5nW2FsdF07CisJCWVwaW4gPSAtMTsKKwkJZXBvdXQgPSAtMTsKKworCQlmb3IgKCBpPTAgOyBpPGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzIDsgaSsrICkgeworCQkJZXAgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFtpXS5kZXNjOworCQkJaWYgKCAoZXAtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSAhPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLICkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCAoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSAmJiBlcGluIDwgMCApIHsKKwkJCQllcGluID0gaTsKKwkJCX0gZWxzZSBpZiAoIGVwb3V0IDwgMCApIHsKKwkJCQllcG91dCA9IGk7CisJCQl9CisJCQlpZiAoIGVwaW4gPj0gMCAmJiBlcG91dCA+PSAwICkgeworCQkJCXJldHVybiBpbnRlcmZhY2UtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmc7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworLyoqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsIGluIGFsbG9jYXRpbmcgYW5kIHJlZ2lzdGVyaW5nIGludGVybmFsIHN0cnVjdHVyZXMuCisgKiBSZXR1cm5zIG5lZ2F0aXZlIG9uIGZhaWx1cmUuCisgKiBDYWxscyBhbGxvY01pZGlEZXYgd2hpY2ggYWRkaXRpb25hbGx5IHJlZ2lzdGVycyAvZGV2L21pZGlYWCBkZXZpY2VzLgorICogV3JpdGVzIG1lc3NhZ2VzIG9uIHN1Y2Nlc3MgdG8gaW5kaWNhdGUgd2hpY2ggL2Rldi9taWRpWFggaXMgd2hpY2ggcGh5c2ljYWwKKyAqIGVuZHBvaW50LgorICoKKyAqKi8KK3N0YXRpYyBpbnQgYWxsb2NfdXNiX21pZGlfZGV2aWNlKCBzdHJ1Y3QgdXNiX2RldmljZSAqZCwgc3RydWN0IHVzYl9taWRpX3N0YXRlICpzLCBzdHJ1Y3QgdXNiX21pZGlfZGV2aWNlICp1ICkKK3sKKwlzdHJ1Y3QgdXNiX21pZGlkZXYgKiptZGV2cz1OVUxMOworCXN0cnVjdCBtaWRpX2luX2VuZHBvaW50ICptaW5zWzE1XSwgKm1pbjsKKwlzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQgKm1vdXRzWzE1XSwgKm1vdXQ7CisJaW50IGluRGV2cz0wLCBvdXREZXZzPTA7CisJaW50IGluRW5kcG9pbnRzPTAsIG91dEVuZHBvaW50cz0wOworCWludCBpbkVuZHBvaW50LCBvdXRFbmRwb2ludDsKKwlpbnQgaW5DYWJsZUlkLCBvdXRDYWJsZUlkOworCWludCBpOworCWludCBkZXZpY2VzID0gMDsKKwlpbnQgYWx0ID0gMDsKKworCS8qIE9idGFpbiBhbHRTZXR0aW5nIG9yIGRpZS4uICovCisJYWx0ID0gdS0+YWx0U2V0dGluZzsKKwlpZiAoIGFsdCA8IDAgKSB7CisJCWFsdCA9IGdldF9hbHRfc2V0dGluZyggZCwgdS0+aW50ZXJmYWNlICk7CisJfQorCWlmICggYWx0IDwgMCApCisJCXJldHVybiAtRU5YSU87CisKKwkvKiBDb25maWd1cmUgaW50ZXJmYWNlICovCisJaWYgKCB1c2Jfc2V0X2ludGVyZmFjZSggZCwgdS0+aW50ZXJmYWNlLCBhbHQgKSA8IDAgKSB7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJZm9yICggaSA9IDAgOyBpIDwgMTUgOyBpKysgKSB7CisJCW1pbnNbaV0gPSBOVUxMOworCQltb3V0c1tpXSA9IE5VTEw7CisJfQorCisJLyogQmVnaW4gQWxsb2NhdGlvbiAqLworCXdoaWxlKCBpbkVuZHBvaW50cyA8IDE1CisJICAgICAgICYmIGluRGV2cyA8IG1heGRldmljZXMKKwkgICAgICAgJiYgdS0+aW5baW5FbmRwb2ludHNdLmNhYmxlSWQgPj0gMCApIHsKKwkJaW5EZXZzICs9IG9uX2JpdHMoKHVuc2lnbmVkIHNob3J0KXUtPmluW2luRW5kcG9pbnRzXS5jYWJsZUlkKTsKKwkJbWluc1tpbkVuZHBvaW50c10gPSBhbGxvY19taWRpX2luX2VuZHBvaW50KCBkLCB1LT5pbltpbkVuZHBvaW50c10uZW5kcG9pbnQgKTsKKwkJaWYgKCBtaW5zW2luRW5kcG9pbnRzXSA9PSBOVUxMICkKKwkJCWdvdG8gZXJyb3JfZW5kOworCQlpbkVuZHBvaW50cysrOworCX0KKworCXdoaWxlKCBvdXRFbmRwb2ludHMgPCAxNQorCSAgICAgICAmJiBvdXREZXZzIDwgbWF4ZGV2aWNlcworCSAgICAgICAmJiB1LT5vdXRbb3V0RW5kcG9pbnRzXS5jYWJsZUlkID49IDAgKSB7CisJCW91dERldnMgKz0gb25fYml0cygodW5zaWduZWQgc2hvcnQpdS0+b3V0W291dEVuZHBvaW50c10uY2FibGVJZCk7CisJCW1vdXRzW291dEVuZHBvaW50c10gPSBhbGxvY19taWRpX291dF9lbmRwb2ludCggZCwgdS0+b3V0W291dEVuZHBvaW50c10uZW5kcG9pbnQgKTsKKwkJaWYgKCBtb3V0c1tvdXRFbmRwb2ludHNdID09IE5VTEwgKQorCQkJZ290byBlcnJvcl9lbmQ7CisJCW91dEVuZHBvaW50cysrOworCX0KKworCWRldmljZXMgPSBpbkRldnMgPiBvdXREZXZzID8gaW5EZXZzIDogb3V0RGV2czsKKwlkZXZpY2VzID0gbWF4ZGV2aWNlcyA+IGRldmljZXMgPyBkZXZpY2VzIDogbWF4ZGV2aWNlczsKKworCS8qIG9idGFpbiBzcGFjZSBmb3IgZGV2aWNlIG5hbWUgKGlQcm9kdWN0KSBpZiBub3Qga25vd24uICovCisJaWYgKCAhIHUtPmRldmljZU5hbWUgKSB7CisJCW1kZXZzID0gKHN0cnVjdCB1c2JfbWlkaWRldiAqKikKKwkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfbWlkaWRldnMgKikqZGV2aWNlcworCQkJCSsgc2l6ZW9mKGNoYXIpICogMjU2LCBHRlBfS0VSTkVMKTsKKwl9IGVsc2UgeworCQltZGV2cyA9IChzdHJ1Y3QgdXNiX21pZGlkZXYgKiopCisJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX21pZGlkZXZzICopKmRldmljZXMsIEdGUF9LRVJORUwpOworCX0KKworCWlmICggIW1kZXZzICkgeworCQkvKiBkZXZpY2VzID0gMDsgKi8KKwkJLyogbWRldnMgPSBOVUxMOyAqLworCQlnb3RvIGVycm9yX2VuZDsKKwl9CisJZm9yICggaT0wIDsgaTxkZXZpY2VzIDsgaSsrICkgeworCQltZGV2c1tpXSA9IE5VTEw7CisJfQorCisJLyogb2J0YWluIGRldmljZSBuYW1lIChpUHJvZHVjdCkgaWYgbm90IGtub3duLiAqLworCWlmICggISB1LT5kZXZpY2VOYW1lICkgeworCQl1LT5kZXZpY2VOYW1lID0gKGNoYXIgKikgKG1kZXZzICsgZGV2aWNlcyk7CisJCWlmICggISBkLT5oYXZlX2xhbmdpZCAmJiBkLT5kZXNjcmlwdG9yLmlQcm9kdWN0KSB7CisJCQlhbHQgPSB1c2JfZ2V0X3N0cmluZyhkLCAwLCAwLCB1LT5kZXZpY2VOYW1lLCAyNTApOworCQkJaWYgKGFsdCA8IDApIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJlcnJvciBnZXR0aW5nIHN0cmluZyBkZXNjcmlwdG9yIDAgKGVycm9yPSVkKVxuIiwgYWx0KTsKKwkJCX0gZWxzZSBpZiAodS0+ZGV2aWNlTmFtZVswXSA8IDQpIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJzdHJpbmcgZGVzY3JpcHRvciAwIHRvbyBzaG9ydCAobGVuZ3RoID0gJWQpXG4iLCBhbHQpOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJzdHJpbmcgZGVzY3JpcHRvciAwIGZvdW5kIChsZW5ndGggPSAlZClcbiIsIGFsdCk7CisJCQkJZm9yKDsgYWx0ID49IDQ7IGFsdCAtPSAyKSB7CisJCQkJCWkgPSB1LT5kZXZpY2VOYW1lW2FsdC0yXSB8ICh1LT5kZXZpY2VOYW1lW2FsdC0xXTw8IDgpOworCQkJCQlwcmludGsoS0VSTl9JTkZPICJ1c2ItbWlkaTogbGFuZ2lkKCVkKSAweCUwNHhcbiIsCisJCQkJCSAgICAgICAoYWx0LTQpID4+IDEsIGkpOworCQkJCQlpZiAoICggKCBpIF4gdWxhbmdpZCApICYgMHhmZiApID09IDAgKSB7CisJCQkJCQlkLT5oYXZlX2xhbmdpZCA9IDE7CisJCQkJCQlkLT5zdHJpbmdfbGFuZ2lkID0gaTsKKwkJCQkJCXByaW50ayhLRVJOX0lORk8gInVzYi1taWRpOiBsYW5naWQobWF0Y2gpIDB4JTA0eFxuIiwgaSk7CisJCQkJCQlpZiAoIGkgPT0gdWxhbmdpZCApCisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJdS0+ZGV2aWNlTmFtZVswXSA9IChjaGFyKSAwOworCQlpZiAoZC0+ZGVzY3JpcHRvci5pUHJvZHVjdCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiLW1pZGk6IGZldGNoU3RyaW5nKCVkKVxuIiwgZC0+ZGVzY3JpcHRvci5pUHJvZHVjdCk7CisJCQlhbHQgPSB1c2Jfc3RyaW5nKGQsIGQtPmRlc2NyaXB0b3IuaVByb2R1Y3QsIHUtPmRldmljZU5hbWUsIDI1NSk7CisJCQlpZiggYWx0IDwgMCApIHsKKwkJCQl1LT5kZXZpY2VOYW1lWzBdID0gKGNoYXIpIDA7CisJCQl9CisJCQlwcmludGsoS0VSTl9JTkZPICJ1c2ItbWlkaTogZmV0Y2hTdHJpbmcgPSAlZFxuIiwgYWx0KTsKKwkJfSAKKwkJLyogRmFpbHNhZmUgKi8KKwkJaWYgKCAhdS0+ZGV2aWNlTmFtZVswXSApIHsKKwkJCWlmIChsZTE2X3RvX2NwdShkLT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBVU0JfVkVORE9SX0lEX1JPTEFORCApIHsKKwkJCQlzdHJjcHkodS0+ZGV2aWNlTmFtZSwgIlVua25vd24gUm9sYW5kIik7CisJCQl9IGVsc2UgaWYgKGxlMTZfdG9fY3B1KGQtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFVTQl9WRU5ET1JfSURfU1RFSU5CRVJHICApIHsKKwkJCQlzdHJjcHkodS0+ZGV2aWNlTmFtZSwgIlVua25vd24gU3RlaW5iZXJnIik7CisJCQl9IGVsc2UgaWYgKGxlMTZfdG9fY3B1KGQtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFVTQl9WRU5ET1JfSURfWUFNQUhBICkgeworCQkJCXN0cmNweSh1LT5kZXZpY2VOYW1lLCAiVW5rbm93biBZYW1haGEiKTsKKwkJCX0gZWxzZSB7CisJCQkJc3RyY3B5KHUtPmRldmljZU5hbWUsICJVbmtub3duIik7CisJCQl9CisJCX0KKwl9CisKKwlpbkVuZHBvaW50ICA9IDA7IGluQ2FibGVJZCAgPSAtMTsKKwlvdXRFbmRwb2ludCA9IDA7IG91dENhYmxlSWQgPSAtMTsKKworCWZvciAoIGk9MCA7IGk8ZGV2aWNlcyA7IGkrKyApIHsKKwkJZm9yICggaW5DYWJsZUlkICsrIDsKKwkJICAgICAgaW5FbmRwb2ludCA8MTUKKwkJCSAgICAgICYmIG1pbnNbaW5FbmRwb2ludF0gCisJCQkgICAgICAmJiAhKHUtPmluW2luRW5kcG9pbnRdLmNhYmxlSWQgJiAoMTw8aW5DYWJsZUlkKSkgOworCQkgICAgICBpbkNhYmxlSWQrKyApIHsKKwkJCWlmICggaW5DYWJsZUlkID49IDE2ICkgeworCQkJCWluRW5kcG9pbnQgICsrOworCQkJCWluQ2FibGVJZCAgPSAwOworCQkJfQorCQl9CisJCW1pbiAgPSBtaW5zW2luRW5kcG9pbnRdOworCQlmb3IgKCBvdXRDYWJsZUlkICsrIDsKKwkJICAgICAgb3V0RW5kcG9pbnQgPDE1CisJCQkgICAgICAmJiBtb3V0c1tvdXRFbmRwb2ludF0gCisJCQkgICAgICAmJiAhKHUtPm91dFtvdXRFbmRwb2ludF0uY2FibGVJZCAmICgxPDxvdXRDYWJsZUlkKSkgOworCQkgICAgICBvdXRDYWJsZUlkKysgKSB7CisJCQlpZiAoIG91dENhYmxlSWQgPj0gMTYgKSB7CisJCQkJb3V0RW5kcG9pbnQgICsrOworCQkJCW91dENhYmxlSWQgID0gMDsKKwkJCX0KKwkJfQorCQltb3V0ID0gbW91dHNbb3V0RW5kcG9pbnRdOworCisJCW1kZXZzW2ldID0gYWxsb2NNaWRpRGV2KCBzLCBtaW4sIG1vdXQsIGluQ2FibGVJZCwgb3V0Q2FibGVJZCApOworCQlpZiAoIG1kZXZzW2ldID09IE5VTEwgKQorCQkJZ290byBlcnJvcl9lbmQ7CisKKwl9CisKKwkvKiBTdWNjZXNzISAqLworCWZvciAoIGk9MCA7IGk8ZGV2aWNlcyA7IGkrKyApIHsKKwkJbGlzdF9hZGRfdGFpbCggJm1kZXZzW2ldLT5saXN0LCAmcy0+bWlkaURldkxpc3QgKTsKKwl9CisJZm9yICggaT0wIDsgaTxpbkVuZHBvaW50cyA7IGkrKyApIHsKKwkJbGlzdF9hZGRfdGFpbCggJm1pbnNbaV0tPmxpc3QsICZzLT5pbkVuZHBvaW50TGlzdCApOworCX0KKwlmb3IgKCBpPTAgOyBpPG91dEVuZHBvaW50cyA7IGkrKyApIHsKKwkJbGlzdF9hZGRfdGFpbCggJm1vdXRzW2ldLT5saXN0LCAmcy0+b3V0RW5kcG9pbnRMaXN0ICk7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAidXNibWlkaTogZm91bmQgWyAlcyBdICgweCUwNHg6MHglMDR4KSwgYXR0YWNoZWQ6XG4iLCB1LT5kZXZpY2VOYW1lLCB1LT5pZFZlbmRvciwgdS0+aWRQcm9kdWN0ICk7CisJZm9yICggaT0wIDsgaTxkZXZpY2VzIDsgaSsrICkgeworCQlpbnQgZG0gPSAobWRldnNbaV0tPmRldl9taWRpLTIpPj40OworCQlpZiAoIG1kZXZzW2ldLT5tb3V0LmVwICE9IE5VTEwgJiYgbWRldnNbaV0tPm1pbi5lcCAhPSBOVUxMICkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNibWlkaTogL2Rldi9taWRpJTAyZDogaW4gKGVwOiUwMnggY2lkOiUyZCBidWZzaXo6JTJkKSBvdXQgKGVwOiUwMnggY2lkOiUyZCBidWZzaXo6JTJkKVxuIiwgCisJCQkgICAgICAgZG0sCisJCQkgICAgICAgbWRldnNbaV0tPm1pbi5lcC0+ZW5kcG9pbnR8VVNCX0RJUl9JTiwgbWRldnNbaV0tPm1pbi5jYWJsZUlkLCBtZGV2c1tpXS0+bWluLmVwLT5yZWN2QnVmU2l6ZSwKKwkJCSAgICAgICBtZGV2c1tpXS0+bW91dC5lcC0+ZW5kcG9pbnQsIG1kZXZzW2ldLT5tb3V0LmNhYmxlSWQsIG1kZXZzW2ldLT5tb3V0LmVwLT5idWZTaXplKTsKKwkJfSBlbHNlIGlmICggbWRldnNbaV0tPm1pbi5lcCAhPSBOVUxMICkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNibWlkaTogL2Rldi9taWRpJTAyZDogaW4gKGVwOiUwMnggY2lkOiUyZCBidWZzaXo6JTAyZClcbiIsIAorCQkJICAgICAgIGRtLAorCQkJICAgICAgIG1kZXZzW2ldLT5taW4uZXAtPmVuZHBvaW50fFVTQl9ESVJfSU4sIG1kZXZzW2ldLT5taW4uY2FibGVJZCwgbWRldnNbaV0tPm1pbi5lcC0+cmVjdkJ1ZlNpemUpOworCQl9IGVsc2UgaWYgKCBtZGV2c1tpXS0+bW91dC5lcCAhPSBOVUxMICkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNibWlkaTogL2Rldi9taWRpJTAyZDogb3V0IChlcDolMDJ4IGNpZDolMmQgYnVmc2l6OiUwMmQpXG4iLCAKKwkJCSAgICAgICBkbSwKKwkJCSAgICAgICBtZGV2c1tpXS0+bW91dC5lcC0+ZW5kcG9pbnQsIG1kZXZzW2ldLT5tb3V0LmNhYmxlSWQsIG1kZXZzW2ldLT5tb3V0LmVwLT5idWZTaXplKTsKKwkJfQorCX0KKworCWtmcmVlKG1kZXZzKTsKKwlyZXR1cm4gMDsKKworIGVycm9yX2VuZDoKKwlpZiAoIG1kZXZzICE9IE5VTEwgKSB7CisJCWZvciAoIGk9MCA7IGk8ZGV2aWNlcyA7IGkrKyApIHsKKwkJCWlmICggbWRldnNbaV0gIT0gTlVMTCApIHsKKwkJCQl1bnJlZ2lzdGVyX3NvdW5kX21pZGkoIG1kZXZzW2ldLT5kZXZfbWlkaSApOworCQkJCWtmcmVlKG1kZXZzW2ldKTsKKwkJCX0KKwkJfQorCQlrZnJlZShtZGV2cyk7CisJfQorCisJZm9yICggaT0wIDsgaTwxNSA7IGkrKyApIHsKKwkJaWYgKCBtaW5zW2ldICE9IE5VTEwgKSB7CisJCQlyZW1vdmVfbWlkaV9pbl9lbmRwb2ludCggbWluc1tpXSApOworCQl9CisJCWlmICggbW91dHNbaV0gIT0gTlVMTCApIHsKKwkJCXJlbW92ZV9taWRpX291dF9lbmRwb2ludCggbW91dHNbaV0gKTsKKwkJfQorCX0KKworCXJldHVybiAtRU5PTUVNOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKiBBdHRlbXB0IHRvIHNjYW4gWUFNQUhBJ3MgZGV2aWNlIGRlc2NyaXB0b3IgYW5kIGRldGVjdCBjb3JyZWN0IHZhbHVlcyBvZgorICogIHRoZW0uCisgKiAgUmV0dXJuIDAgb24gc3VjY2VzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlLgorICogIENhbGxlZCBieSB1c2JfbWlkaV9wcm9iZSgpOworICoqLworCitzdGF0aWMgaW50IGRldGVjdF95YW1haGFfZGV2aWNlKCBzdHJ1Y3QgdXNiX2RldmljZSAqZCwKKwkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlLCB1bnNpZ25lZCBpbnQgaWZudW0sCisJCXN0cnVjdCB1c2JfbWlkaV9zdGF0ZSAqcykKK3sKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJc3RydWN0IHVzYl9taWRpX2RldmljZSAqdTsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJaW50IGJ1ZlNpemU7CisJaW50IGk7CisJaW50IGFsdHM9LTE7CisJaW50IHJldDsKKworCWlmIChsZTE2X3RvX2NwdShkLT5kZXNjcmlwdG9yLmlkVmVuZG9yKSAhPSBVU0JfVkVORE9SX0lEX1lBTUFIQSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKCBpPTAgOyBpIDwgaWZhY2UtPm51bV9hbHRzZXR0aW5nOyBpKysgKSB7CisJCWludGVyZmFjZSA9IGlmYWNlLT5hbHRzZXR0aW5nICsgaTsKKworCQlpZiAoIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gMjU1IHx8CisJCSAgICAgaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyAhPSAwICkKKwkJCWNvbnRpbnVlOworCQlhbHRzID0gaW50ZXJmYWNlLT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nOworCX0KKwlpZiAoIGFsdHMgPT0gLTEgKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXByaW50ayhLRVJOX0lORk8gInVzYi1taWRpOiBGb3VuZCBZQU1BSEEgVVNCLU1JREkgZGV2aWNlIG9uIGRldiAlMDR4OiUwNHgsIGlmYWNlICVkXG4iLAorCSAgICAgICBsZTE2X3RvX2NwdShkLT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkgICAgICAgbGUxNl90b19jcHUoZC0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpLCBpZm51bSk7CisKKwlpID0gZC0+YWN0Y29uZmlnIC0gZC0+Y29uZmlnOworCWJ1ZmZlciA9IGQtPnJhd2Rlc2NyaXB0b3JzW2ldOworCWJ1ZlNpemUgPSBsZTE2X3RvX2NwdShkLT5hY3Rjb25maWctPmRlc2Mud1RvdGFsTGVuZ3RoKTsKKworCXUgPSBwYXJzZV9kZXNjcmlwdG9yKCBkLCBidWZmZXIsIGJ1ZlNpemUsIGlmbnVtLCBhbHRzLCAxKTsKKwlpZiAoIHUgPT0gTlVMTCApIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gYWxsb2NfdXNiX21pZGlfZGV2aWNlKCBkLCBzLCB1ICk7CisKKwlrZnJlZSh1KTsKKworCXJldHVybiByZXQ7Cit9CisKKworLyoqIFNjYW4gdGFibGUgb2Yga25vd24gZGV2aWNlcyB3aGljaCBhcmUgb25seSBwYXJ0aWFsbHkgY29tcGxpYW50IHdpdGggCisgKiB0aGUgTUlESVN0cmVhbWluZyBzcGVjaWZpY2F0aW9uLgorICogQ2FsbGVkIGJ5IHVzYl9taWRpX3Byb2JlKCk7CisgKgorICoqLworCitzdGF0aWMgaW50IGRldGVjdF92ZW5kb3Jfc3BlY2lmaWNfZGV2aWNlKCBzdHJ1Y3QgdXNiX2RldmljZSAqZCwgdW5zaWduZWQgaW50IGlmbnVtLCBzdHJ1Y3QgdXNiX21pZGlfc3RhdGUgKnMgKQoreworCXN0cnVjdCB1c2JfbWlkaV9kZXZpY2UgKnU7CisJaW50IGk7CisJaW50IHJldCA9IC1FTlhJTzsKKworCWZvciAoIGk9MDsgaTxWRU5ET1JfU1BFQ0lGSUNfVVNCX01JRElfREVWSUNFUyA7IGkrKyApIHsKKwkJdT0mKHVzYl9taWRpX2RldmljZXNbaV0pOworICAgIAorCQlpZiAoIGxlMTZfdG9fY3B1KGQtPmRlc2NyaXB0b3IuaWRWZW5kb3IpICE9IHUtPmlkVmVuZG9yIHx8CisJCSAgICAgbGUxNl90b19jcHUoZC0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IHUtPmlkUHJvZHVjdCB8fAorCQkgICAgIGlmbnVtICE9IHUtPmludGVyZmFjZSApCisJCQljb250aW51ZTsKKworCQlyZXQgPSBhbGxvY191c2JfbWlkaV9kZXZpY2UoIGQsIHMsIHUgKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworCisvKiogQXR0ZW1wdCB0byBtYXRjaCBhbnkgY29uZmlnIG9mIGFuIGludGVyZmFjZSB0byBhIE1JRElTVFJFQU1JTkcgaW50ZXJmYWNlLgorICogIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlLgorICogQ2FsbGVkIGJ5IHVzYl9taWRpX3Byb2JlKCk7CisgKiovCitzdGF0aWMgaW50IGRldGVjdF9taWRpX3N1YmNsYXNzKHN0cnVjdCB1c2JfZGV2aWNlICpkLAorCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIHVuc2lnbmVkIGludCBpZm51bSwKKwkJc3RydWN0IHVzYl9taWRpX3N0YXRlICpzKQoreworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX21pZGlfZGV2aWNlICp1OworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwlpbnQgYnVmU2l6ZTsKKwlpbnQgaTsKKwlpbnQgYWx0cz0tMTsKKwlpbnQgcmV0OworCisJZm9yICggaT0wIDsgaSA8IGlmYWNlLT5udW1fYWx0c2V0dGluZzsgaSsrICkgeworCQlpbnRlcmZhY2UgPSBpZmFjZS0+YWx0c2V0dGluZyArIGk7CisKKwkJaWYgKCBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZUNsYXNzICE9IFVTQl9DTEFTU19BVURJTyB8fAorCQkgICAgIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgIT0gVVNCX1NVQkNMQVNTX01JRElTVFJFQU1JTkcgKQorCQkJY29udGludWU7CisJCWFsdHMgPSBpbnRlcmZhY2UtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmc7CisJfQorCWlmICggYWx0cyA9PSAtMSApIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAidXNiLW1pZGk6IEZvdW5kIE1JRElTVFJFQU1JTkcgb24gZGV2ICUwNHg6JTA0eCwgaWZhY2UgJWRcbiIsCisJICAgICAgIGxlMTZfdG9fY3B1KGQtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLCAKKwkgICAgICAgbGUxNl90b19jcHUoZC0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpLCBpZm51bSk7CisKKworCS8qIEZyb20gVVNCIFNwZWMgdjIuMCwgU2VjdGlvbiA5LjUuCisJICAgSWYgdGhlIGNsYXNzIG9yIHZlbmRvciBzcGVjaWZpYyBkZXNjcmlwdG9ycyB1c2UgdGhlIHNhbWUgZm9ybWF0CisJICAgYXMgc3RhbmRhcmQgZGVzY3JpcHRvcnMgKGUuZy4sIHN0YXJ0IHdpdGggYSBsZW5ndGggYnl0ZSBhbmQKKwkgICBmb2xsb3dlZCBieSBhIHR5cGUgYnl0ZSksIHRoZXkgbXVzdCBiZSByZXR1cm5lZCBpbnRlcmxlYXZlZCB3aXRoCisJICAgc3RhbmRhcmQgZGVzY3JpcHRvcnMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gcmV0dXJuZWQgYnkKKwkgICBhIEdldERlc2NyaXB0b3IoQ29uZmlndXJhdGlvbikgcmVxdWVzdC4gSW4gdGhpcyBjYXNlLCB0aGUgY2xhc3MKKwkgICBvciB2ZW5kb3Itc3BlY2lmaWMgZGVzY3JpcHRvcnMgbXVzdCBmb2xsb3cgYSByZWxhdGVkIHN0YW5kYXJkCisJICAgZGVzY3JpcHRvciB0aGV5IG1vZGlmeSBvciBleHRlbmQuCisJKi8KKworCWkgPSBkLT5hY3Rjb25maWcgLSBkLT5jb25maWc7CisJYnVmZmVyID0gZC0+cmF3ZGVzY3JpcHRvcnNbaV07CisJYnVmU2l6ZSA9IGxlMTZfdG9fY3B1KGQtPmFjdGNvbmZpZy0+ZGVzYy53VG90YWxMZW5ndGgpOworCisJdSA9IHBhcnNlX2Rlc2NyaXB0b3IoIGQsIGJ1ZmZlciwgYnVmU2l6ZSwgaWZudW0sIGFsdHMsIDApOworCWlmICggdSA9PSBOVUxMICkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBhbGxvY191c2JfbWlkaV9kZXZpY2UoIGQsIHMsIHUgKTsKKworCWtmcmVlKHUpOworCisJcmV0dXJuIHJldDsKK30KKworCisvKiogV2hlbiB1c2VyIGhhcyByZXF1ZXN0ZWQgYSBzcGVjaWZpYyBkZXZpY2UsIG1hdGNoIGl0IGV4YWN0bHkuCisgKgorICogVXNlcyB1dmVuZG9yLCB1cHJvZHVjdCwgdWludGVyZmFjZSwgdWFsdCwgdW1pbiwgdW1vdXQgYW5kIHVjYWJsZS4KKyAqIENhbGxlZCBieSB1c2JfbWlkaV9wcm9iZSgpOworICoKKyAqKi8KK3N0YXRpYyBpbnQgZGV0ZWN0X2J5X2hhbmQoc3RydWN0IHVzYl9kZXZpY2UgKmQsIHVuc2lnbmVkIGludCBpZm51bSwgc3RydWN0IHVzYl9taWRpX3N0YXRlICpzKQoreworCXN0cnVjdCB1c2JfbWlkaV9kZXZpY2UgdTsKKworCWlmICggbGUxNl90b19jcHUoZC0+ZGVzY3JpcHRvci5pZFZlbmRvcikgIT0gdXZlbmRvciB8fAorCSAgICAgbGUxNl90b19jcHUoZC0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IHVwcm9kdWN0IHx8CisJICAgICBpZm51bSAhPSB1aW50ZXJmYWNlICkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIHVhbHQgPCAwICkKKwkJdWFsdCA9IC0xOworCisJaWYgKCB1bWluICAgPCAwIHx8IHVtaW4gICA+IDE1ICkKKwkJdW1pbiAgID0gMHgwMSB8IFVTQl9ESVJfSU47CisJaWYgKCB1bW91dCAgPCAwIHx8IHVtb3V0ICA+IDE1ICkKKwkJdW1vdXQgID0gMHgwMTsKKwlpZiAoIHVjYWJsZSA8IDAgfHwgdWNhYmxlID4gMTUgKQorCQl1Y2FibGUgPSAwOworCisJdS5kZXZpY2VOYW1lID0gTlVMTDsgLyogQSBmbGFnIGZvciBhbGxvY191c2JfbWlkaV9kZXZpY2UgdG8gZ2V0IGRldmljZQorCQkJCW5hbWUgZnJvbSBkZXZpY2UuICovCisJdS5pZFZlbmRvciAgID0gdXZlbmRvcjsKKwl1LmlkUHJvZHVjdCAgPSB1cHJvZHVjdDsKKwl1LmludGVyZmFjZSAgPSB1aW50ZXJmYWNlOworCXUuYWx0U2V0dGluZyA9IHVhbHQ7CisKKwl1LmluWzBdLmVuZHBvaW50ICAgID0gdW1pbjsKKwl1LmluWzBdLmNhYmxlSWQgICAgID0gKDE8PHVjYWJsZSk7CisKKwl1Lm91dFswXS5lbmRwb2ludCAgID0gdW1vdXQ7CisJdS5vdXRbMF0uY2FibGVJZCAgICA9ICgxPDx1Y2FibGUpOworCisJcmV0dXJuIGFsbG9jX3VzYl9taWRpX2RldmljZSggZCwgcywgJnUgKTsKK30KKworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCB1c2JfbWlkaV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgCisJCQkgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX21pZGlfc3RhdGUgKnM7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJaW50IGlmbnVtID0gaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKworCXMgPSAoc3RydWN0IHVzYl9taWRpX3N0YXRlICopa21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9taWRpX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCAhcyApCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KCBzLCAwLCBzaXplb2Yoc3RydWN0IHVzYl9taWRpX3N0YXRlKSApOworCUlOSVRfTElTVF9IRUFEKCZzLT5taWRpRGV2TGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnMtPmluRW5kcG9pbnRMaXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcy0+b3V0RW5kcG9pbnRMaXN0KTsKKwlzLT51c2JkZXYgPSBkZXY7CisJcy0+Y291bnQgID0gMDsKKwlzcGluX2xvY2tfaW5pdCgmcy0+bG9jayk7CisKKwlpZiAoCisJCWRldGVjdF9ieV9oYW5kKCBkZXYsIGlmbnVtLCBzICkgJiYKKwkJZGV0ZWN0X21pZGlfc3ViY2xhc3MoIGRldiwgaW50ZiwgaWZudW0sIHMgKSAmJgorCQlkZXRlY3RfdmVuZG9yX3NwZWNpZmljX2RldmljZSggZGV2LCBpZm51bSwgcyApICYmCisJCWRldGVjdF95YW1haGFfZGV2aWNlKCBkZXYsIGludGYsIGlmbnVtLCBzKSApIHsKKwkJa2ZyZWUocyk7CisJCXJldHVybiAtRUlPOworCX0KKworCWRvd24oJm9wZW5fc2VtKTsKKwlsaXN0X2FkZF90YWlsKCZzLT5taWRpZGV2LCAmbWlkaWRldnMpOworCXVwKCZvcGVuX3NlbSk7CisKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBzKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCB1c2JfbWlkaV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JfbWlkaV9zdGF0ZSAqcyA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCXN0cnVjdCB1c2JfbWlkaWRldiAgICAqbTsKKworCWlmICggIXMgKQorCQlyZXR1cm47CisKKwlpZiAoIHMgPT0gKHN0cnVjdCB1c2JfbWlkaV9zdGF0ZSAqKS0xICkgeworCQlyZXR1cm47CisJfQorCWlmICggIXMtPnVzYmRldiApIHsKKwkJcmV0dXJuOworCX0KKwlkb3duKCZvcGVuX3NlbSk7CisJbGlzdF9kZWwoJnMtPm1pZGlkZXYpOworCUlOSVRfTElTVF9IRUFEKCZzLT5taWRpZGV2KTsKKwlzLT51c2JkZXYgPSBOVUxMOworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShtLCAmcy0+bWlkaURldkxpc3QsIGxpc3QpIHsKKwkJd2FrZV91cCgmKG0tPm1pbi5lcC0+d2FpdCkpOworCQl3YWtlX3VwKCYobS0+bW91dC5lcC0+d2FpdCkpOworCQlpZiAoIG0tPmRldl9taWRpID49IDAgKSB7CisJCQl1bnJlZ2lzdGVyX3NvdW5kX21pZGkobS0+ZGV2X21pZGkpOworCQl9CisJCW0tPmRldl9taWRpID0gLTE7CisJfQorCXJlbGVhc2VfbWlkaV9kZXZpY2Uocyk7CisJd2FrZV91cCgmb3Blbl93YWl0KTsKK30KKworLyogd2Ugd2FudCB0byBsb29rIGF0IGFsbCBkZXZpY2VzIGJ5IGhhbmQgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0geworCXsuZHJpdmVyX2luZm8gPSA0Mn0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2JfbWlkaV9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJIm1pZGkiLAorCS5wcm9iZSA9CXVzYl9taWRpX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX21pZGlfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZSwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBfX2luaXQgdXNiX21pZGlfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJnVzYl9taWRpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2JfbWlkaV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnVzYl9taWRpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHVzYl9taWRpX2luaXQpIDsKK21vZHVsZV9leGl0KHVzYl9taWRpX2V4aXQpIDsKKworI2lmZGVmIEhBVkVfQUxTQV9TVVBQT1JUCisjZGVmaW5lIFNORFJWX01BSU5fT0JKRUNUX0ZJTEUKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2RyaXZlci5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvY29udHJvbC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvaW5mby5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvY3M0Nnh4LmgiCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBzbmRfdXNibWlkaV9pbnB1dF9jbG9zZShzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfdXNibWlkaV9pbnB1dF9vcGVuKHNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtICkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc25kX3VzYm1pZGlfaW5wdXRfdHJpZ2dlcihzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSwgaW50IHVwKQoreworCXJldHVybiAwOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBzbmRfdXNibWlkaV9vdXRwdXRfY2xvc2Uoc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3VzYm1pZGlfb3V0cHV0X29wZW4oc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF91c2JfbWlkaV9vdXRwdXRfdHJpZ2dlcihzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSwKKwkJCQkJaW50IHVwKQoreworCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzbmRfcmF3bWlkaV9vcHNfdCBzbmRfdXNibWlkaV9vdXRwdXQgPQoreworICAgICAgICAub3BlbiA9ICAgICAgICAgc25kX3VzYm1pZGlfb3V0cHV0X29wZW4sCisgICAgICAgIC5jbG9zZSA9ICAgICAgICBzbmRfdXNibWlkaV9vdXRwdXRfY2xvc2UsCisgICAgICAgIC50cmlnZ2VyID0gICAgICBzbmRfdXNibWlkaV9vdXRwdXRfdHJpZ2dlciwKK307CitzdGF0aWMgc25kX3Jhd21pZGlfb3BzX3Qgc25kX3VzYm1pZGlfaW5wdXQgPQoreworICAgICAgICAub3BlbiA9ICAgICAgICAgc25kX3VzYm1pZGlfaW5wdXRfb3BlbiwKKyAgICAgICAgLmNsb3NlID0gICAgICAgIHNuZF91c2JtaWRpX2lucHV0X2Nsb3NlLAorICAgICAgICAudHJpZ2dlciA9ICAgICAgc25kX3VzYm1pZGlfaW5wdXRfdHJpZ2dlciwKK307CisKK2ludCBzbmRfdXNibWlkaV9taWRpKGNzNDZ4eF90ICpjaGlwLCBpbnQgZGV2aWNlLCBzbmRfcmF3bWlkaV90ICoqcnJhd21pZGkpCit7CisJc25kX3Jhd21pZGlfdCAqcm1pZGk7CisJaW50IGVycjsKKworCWlmIChycmF3bWlkaSkKKwkJKnJyYXdtaWRpID0gTlVMTDsKKwlpZiAoKGVyciA9IHNuZF9yYXdtaWRpX25ldyhjaGlwLT5jYXJkLCAiVVNCLU1JREkiLCBkZXZpY2UsIDEsIDEsICZybWlkaSkpIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlzdHJjcHkocm1pZGktPm5hbWUsICJVU0ItTUlESSIpOworCisJc25kX3Jhd21pZGlfc2V0X29wcyggcm1pZGksIFNORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVCwgJnNuZF91c2JtaWRpX291dHB1dCApOworCXNuZF9yYXdtaWRpX3NldF9vcHMoIHJtaWRpLCBTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCwgJnNuZF91c2JtaWRpX2lucHV0ICk7CisKKwlybWlkaS0+aW5mb19mbGFncyB8PSBTTkRSVl9SQVdNSURJX0lORk9fT1VUUFVUIHwgU05EUlZfUkFXTUlESV9JTkZPX0lOUFVUIHwgU05EUlZfUkFXTUlESV9JTkZPX0RVUExFWDsKKworCXJtaWRpLT5wcml2YXRlX2RhdGEgPSBjaGlwOworCWNoaXAtPnJtaWRpID0gcm1pZGk7CisJaWYgKHJyYXdtaWRpKQorCQkqcnJhd21pZGkgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzbmRfdXNibWlkaV9jcmVhdGUoIHNuZF9jYXJkX3QgKiBjYXJkLAorCQkJc3RydWN0IHBjaV9kZXYgKiBwY2ksCisJCQl1c2JtaWRpX3QgKiogcmNoaXAgKQoreworCXVzYm1pZGlfdCAqY2hpcDsKKwlpbnQgZXJyLCBpZHg7CisJc25kX3JlZ2lvbl90ICpyZWdpb247CisJc3RhdGljIHNuZF9kZXZpY2Vfb3B0X3Qgb3BzID0geworCQkuZGV2X2ZyZWUgPSBzbmRfdXNibWlkaV9kZXZfZnJlZSwKKwl9OworCisJKnJjaGlwID0gTlVMTDsKKwljaGlwID0gc25kX21hZ2ljX2tjYWxsb2MoIHVzYm1pZGlfdCwgMCwgR0ZQX0tFUk5FTCApOworCWlmICggY2hpcCA9PSBOVUxMICkKKwkJcmV0dXJuIC1FTk9NRU07Cit9CisKK0VYUE9SVF9TWU1CT0woc25kX3VzYm1pZGlfY3JlYXRlKTsKK0VYUE9SVF9TWU1CT0woc25kX3VzYm1pZGlfbWlkaSk7CisjZW5kaWYgLyogSEFWRV9BTFNBX1NVUFBPUlQgKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNiLW1pZGkuaCBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYi1taWRpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU4Y2RlZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYi1taWRpLmgKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgIHVzYi1taWRpLmggIC0tICBVU0ItTUlESSBkcml2ZXIKKworICBDb3B5cmlnaHQgKEMpIDIwMDEKKyAgICAgIE5BR0FOTyBEYWlzdWtlIDxicmVlemUubmFnYW5vQG5pZnR5Lm5lLmpwPgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgX1VTQl9NSURJX0hfCisjZGVmaW5lIF9VU0JfTUlESV9IXworCisjaWZuZGVmIFVTQl9TVUJDTEFTU19NSURJU1RSRUFNSU5HCisjZGVmaW5lIFVTQl9TVUJDTEFTU19NSURJU1RSRUFNSU5HCTMKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBSb2xhbmQgTUlESSBEZXZpY2VzICovCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9ST0xBTkQJCTB4MDU4MgorI2RlZmluZSBVU0JNSURJX1JPTEFORF9VQTEwMEcJCTB4MDAwMAorI2RlZmluZSBVU0JNSURJX1JPTEFORF9NUFU2NAkJMHgwMDAyCisjZGVmaW5lIFVTQk1JRElfUk9MQU5EX1NDODg1MAkJMHgwMDAzCisjZGVmaW5lIFVTQk1JRElfUk9MQU5EX1NDODgyMAkJMHgwMDA3CisjZGVmaW5lIFVTQk1JRElfUk9MQU5EX1VNMgkJMHgwMDA1CisjZGVmaW5lIFVTQk1JRElfUk9MQU5EX1VNMQkJMHgwMDA5CisjZGVmaW5lIFVTQk1JRElfUk9MQU5EX1BDMzAwCQkweDAwMDgKKworLyogWUFNQUhBIE1JREkgRGV2aWNlcyAqLworI2RlZmluZSBVU0JfVkVORE9SX0lEX1lBTUFIQQkJMHgwNDk5CisjZGVmaW5lIFVTQk1JRElfWUFNQUhBX01VMTAwMAkJMHgxMDAxCisKKy8qIFN0ZWluYmVyZyBNSURJIERldmljZXMgKi8KKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TVEVJTkJFUkcJCTB4MDc2MworI2RlZmluZSBVU0JNSURJX1NURUlOQkVSR19VU0IyTUlESQkweDEwMDEKKworLyogTWFyayBvZiB0aGUgVW5pY29ybiBNSURJIERldmljZXMgKi8KKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9NT1RVCQkweDA3ZmQKKyNkZWZpbmUgVVNCTUlESV9NT1RVX0ZBU1RMQU5FCQkweDAwMDEKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogU3VwcG9ydGVkIGRldmljZXMgKi8KKworc3RydWN0IHVzYl9taWRpX2VuZHBvaW50IHsKKwlpbnQgIGVuZHBvaW50OworCWludCAgY2FibGVJZDsgLyogaWYgYml0LW4gPT0gMSB0aGVuIGNhYmxlSWQtbiBpcyBlbmFibGVkIChuOiAwIC0gMTUpICovCit9OworCitzdHJ1Y3QgdXNiX21pZGlfZGV2aWNlIHsKKwljaGFyICAqZGV2aWNlTmFtZTsKKworCXUxNiAgICBpZFZlbmRvcjsKKwl1MTYgICAgaWRQcm9kdWN0OworCWludCAgICBpbnRlcmZhY2U7CisJaW50ICAgIGFsdFNldHRpbmc7IC8qIC0xOiBhdXRvIGRldGVjdCAqLworCisJc3RydWN0IHVzYl9taWRpX2VuZHBvaW50IGluWzE1XTsKKwlzdHJ1Y3QgdXNiX21pZGlfZW5kcG9pbnQgb3V0WzE1XTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX21pZGlfZGV2aWNlIHVzYl9taWRpX2RldmljZXNbXSA9IHsKKyAgeyAvKiBSb2xhbmQgVU0tMSAqLworICAgICJSb2xhbmQgVU0tMSIsCisgICAgVVNCX1ZFTkRPUl9JRF9ST0xBTkQsIFVTQk1JRElfUk9MQU5EX1VNMSwgMiwgLTEsCisgICAgeyB7IDB4ODEsIDEgfSwgey0xLCAtMX0gfSwKKyAgICB7IHsgMHgwMSwgMSx9LCB7LTEsIC0xfSB9LAorICB9LAorCisgIHsgLyogUm9sYW5kIFVNLTIgKi8KKyAgICAiUm9sYW5kIFVNLTIiICwKKyAgICBVU0JfVkVORE9SX0lEX1JPTEFORCwgVVNCTUlESV9ST0xBTkRfVU0yLCAyLCAtMSwKKyAgICB7IHsgMHg4MSwgMyB9LCB7LTEsIC0xfSB9LAorICAgIHsgeyAweDAxLCAzLH0sIHstMSwgLTF9IH0sCisgIH0sCisKKy8qKiBOZXh0IGVudHJ5IGNvdXJ0ZXN5IHJlc2VhcmNoIGJ5IE1pY2hhZWwgTWlubiA8bWljaGFlbEBtaWNoYWVsbWlubi5jb20+ICoqLworICB7IC8qIFJvbGFuZCBVQS0xMDAgKi8KKyAgICAiUm9sYW5kIFVBLTEwMCIsCisgICAgVVNCX1ZFTkRPUl9JRF9ST0xBTkQsIFVTQk1JRElfUk9MQU5EX1VBMTAwRywgMiwgLTEsCisgICAgeyB7IDB4ODIsIDcgfSwgey0xLCAtMX0gfSwgLyoqIGNhYmxlcyAwLDEgYW5kIDIgZm9yIFNZU0VYICoqLworICAgIHsgeyAweDAyLCA3IH0sIHstMSwgLTF9IH0sCisgIH0sCisKKy8qKiBOZXh0IGVudHJ5IGNvdXJ0ZXN5IHJlc2VhcmNoIGJ5IE1pY2hhZWwgTWlubiA8bWljaGFlbEBtaWNoYWVsbWlubi5jb20+ICoqLworICB7IC8qIFJvbGFuZCBTQzg4NTAgKi8KKyAgICAiUm9sYW5kIFNDODg1MCIsCisgICAgVVNCX1ZFTkRPUl9JRF9ST0xBTkQsIFVTQk1JRElfUk9MQU5EX1NDODg1MCwgMiwgLTEsCisgICAgeyB7IDB4ODEsIDB4M2YgfSwgey0xLCAtMX0gfSwKKyAgICB7IHsgMHgwMSwgMHgzZiB9LCB7LTEsIC0xfSB9LAorICB9LAorCisgIHsgLyogUm9sYW5kIFNDODgyMCAqLworICAgICJSb2xhbmQgU0M4ODIwIiwKKyAgICBVU0JfVkVORE9SX0lEX1JPTEFORCwgVVNCTUlESV9ST0xBTkRfU0M4ODIwLCAyLCAtMSwKKyAgICB7IHsgMHg4MSwgMHgxMyB9LCB7LTEsIC0xfSB9LAorICAgIHsgeyAweDAxLCAweDEzIH0sIHstMSwgLTF9IH0sCisgIH0sCisKKyAgeyAvKiBSb2xhbmQgU0M4ODIwICovCisgICAgIlJvbGFuZCBTQzg4MjAiLAorICAgIFVTQl9WRU5ET1JfSURfUk9MQU5ELCBVU0JNSURJX1JPTEFORF9TQzg4MjAsIDIsIC0xLAorICAgIHsgeyAweDgxLCAxNyB9LCB7LTEsIC0xfSB9LAorICAgIHsgeyAweDAxLCAxNyB9LCB7LTEsIC0xfSB9LAorICB9LAorCisgIHsgLyogWUFNQUhBIE1VMTAwMCAqLworICAgICJZQU1BSEEgTVUxMDAwIiwKKyAgICBVU0JfVkVORE9SX0lEX1lBTUFIQSwgVVNCTUlESV9ZQU1BSEFfTVUxMDAwLCAwLCAtMSwgCisgICAgeyB7IDB4ODEsIDEgfSwgey0xLCAtMX0gfSwKKyAgICB7IHsgMHgwMSwgMTUgfSwgey0xLCAtMX0gfSwKKyAgfSwKKyAgeyAvKiBSb2xhbmQgUEMtMzAwICovCisgICAgIlJvbGFuZCBQQy0zMDAiLAorICAgIFVTQl9WRU5ET1JfSURfUk9MQU5ELCBVU0JNSURJX1JPTEFORF9QQzMwMCwgMiwgLTEsIAorICAgIHsgeyAweDgxLCAxIH0sIHstMSwgLTF9IH0sCisgICAgeyB7IDB4MDEsIDEgfSwgey0xLCAtMX0gfSwKKyAgfSwKKyAgeyAvKiBNT1RVIEZhc3RsYW5lIFVTQiAqLworICAgICJNT1RVIEZhc3RsYW5lIFVTQiIsCisgICAgVVNCX1ZFTkRPUl9JRF9NT1RVLCBVU0JNSURJX01PVFVfRkFTVExBTkUsIDEsIDAsCisgICAgeyB7IDB4ODIsIDMgfSwgey0xLCAtMX0gfSwKKyAgICB7IHsgMHgwMiwgMyB9LCB7LTEsIC0xfSB9LAorICB9Cit9OworCisjZGVmaW5lIFZFTkRPUl9TUEVDSUZJQ19VU0JfTUlESV9ERVZJQ0VTIChzaXplb2YodXNiX21pZGlfZGV2aWNlcykvc2l6ZW9mKHN0cnVjdCB1c2JfbWlkaV9kZXZpY2UpKQorCisvKiBmb3IgSG90LVBsdWdnaW5nICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfbWlkaV9pZHMgW10gPSB7CisJeyAubWF0Y2hfZmxhZ3MgPSAoVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MgfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUyksCisJICAuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLCAuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX01JRElTVFJFQU1JTkd9LAorCXsgVVNCX0RFVklDRSggVVNCX1ZFTkRPUl9JRF9ST0xBTkQsIFVTQk1JRElfUk9MQU5EX1VNMSAgICApIH0sCisJeyBVU0JfREVWSUNFKCBVU0JfVkVORE9SX0lEX1JPTEFORCwgVVNCTUlESV9ST0xBTkRfVU0yICAgICkgfSwKKwl7IFVTQl9ERVZJQ0UoIFVTQl9WRU5ET1JfSURfUk9MQU5ELCBVU0JNSURJX1JPTEFORF9VQTEwMEcgKSB9LAorCXsgVVNCX0RFVklDRSggVVNCX1ZFTkRPUl9JRF9ST0xBTkQsIFVTQk1JRElfUk9MQU5EX1BDMzAwICkgfSwKKwl7IFVTQl9ERVZJQ0UoIFVTQl9WRU5ET1JfSURfUk9MQU5ELCBVU0JNSURJX1JPTEFORF9TQzg4NTAgKSB9LAorCXsgVVNCX0RFVklDRSggVVNCX1ZFTkRPUl9JRF9ST0xBTkQsIFVTQk1JRElfUk9MQU5EX1NDODgyMCApIH0sCisJeyBVU0JfREVWSUNFKCBVU0JfVkVORE9SX0lEX1lBTUFIQSwgVVNCTUlESV9ZQU1BSEFfTVUxMDAwICkgfSwKKwl7IFVTQl9ERVZJQ0UoIFVTQl9WRU5ET1JfSURfTU9UVSwgICBVU0JNSURJX01PVFVfRkFTVExBTkUgKSB9LAorLyoJeyBVU0JfREVWSUNFKCBVU0JfVkVORE9SX0lEX1NURUlOQkVSRywgVVNCTUlESV9TVEVJTkJFUkdfVVNCMk1JREkgKSB9LCovCisJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHVzYl9taWRpX2lkcyk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNlbmRpZiAvKiBfVVNCX01JRElfSF8gKi8KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jIGIvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmEyMmU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYwpAQCAtMCwwICsxLDEyMTQgQEAKKy8qCisgKiB1c2JscC5jICBWZXJzaW9uIDAuMTMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTkgTWljaGFlbCBHZWUJPG1pY2hhZWxAbGludXhzcGVjaWZpYy5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDE5OTkgUGF2ZWwgTWFjaGVrCTxwYXZlbEBzdXNlLmN6PgorICogQ29weXJpZ2h0IChjKSAyMDAwIFJhbmR5IER1bmxhcAk8cmRkdW5sYXBAb3NkbC5vcmc+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDAgVm9qdGVjaCBQYXZsaWsJPHZvanRlY2hAc3VzZS5jej4KKyAjIENvcHlyaWdodCAoYykgMjAwMSBQZXRlIFphaXRjZXYJPHphaXRjZXZAcmVkaGF0LmNvbT4KKyAjIENvcHlyaWdodCAoYykgMjAwMSBEYXZpZCBQYXNjaGFsCTxwYXNjaGFsQHJjc2lzLmNvbT4KKyAqCisgKiBVU0IgUHJpbnRlciBEZXZpY2UgQ2xhc3MgZHJpdmVyIGZvciBVU0IgcHJpbnRlcnMgYW5kIHByaW50ZXIgY2FibGVzCisgKgorICogU3BvbnNvcmVkIGJ5IFN1U0UKKyAqCisgKiBDaGFuZ2VMb2c6CisgKgl2MC4xIC0gdGhvcm91Z2ggY2xlYW5pbmcsIFVSQmlmaWNhdGlvbiwgYWxtb3N0IGEgcmV3cml0ZQorICoJdjAuMiAtIHNvbWUgbW9yZSBjbGVhbnVwcworICoJdjAuMyAtIGNsZWFuZXIgYWdhaW4sIHdhaXRxdWV1ZSBmaXhlcworICoJdjAuNCAtIGZpeGVzIGluIHVuaWRpcmVjdGlvbmFsIG1vZGUKKyAqCXYwLjUgLSBhZGQgREVWSUNFX0lEIHN0cmluZyBzdXBwb3J0CisgKgl2MC42IC0gbmV2ZXIgdGltZSBvdXQKKyAqCXYwLjcgLSBmaXhlZCBidWxrLUlOIHJlYWQgYW5kIHBvbGwgKERhdmlkIFBhc2NoYWwpCisgKgl2MC44IC0gYWRkIGRldmZzIHN1cHBvcnQKKyAqCXYwLjkgLSBmaXggdW5wbHVnLXdoaWxlLW9wZW4gcGF0aHMKKyAqCXYwLjEwLSByZW1vdmUgc2xlZXBfb24sIGZpeCBlcnJvciBvbiBvb20gKG9saXZlckBuZXVrdW0ub3JnKQorICoJdjAuMTEgLSBhZGQgcHJvdG9fYmlhcyBvcHRpb24gKFBldGUgWmFpdGNldikKKyAqCXYwLjEyIC0gYWRkIGhwb2ouc291cmNlZm9yZ2UubmV0IGlvY3RscyAoRGF2aWQgUGFzY2hhbCkKKyAqCXYwLjEzIC0gYWxsb2Mgc3BhY2UgZm9yIHN0YXR1c2J1ZiAoPHN0YXR1cz4gbm90IG9uIHN0YWNrKTsKKyAqCQl1c2UgdXNiX2J1ZmZlcl9hbGxvYygpIGZvciByZWFkIGJ1ZiAmIHdyaXRlIGJ1ZjsKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2xwLmg+CisjdW5kZWYgREVCVUcKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuMTMiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIk1pY2hhZWwgR2VlLCBQYXZlbCBNYWNoZWssIFZvanRlY2ggUGF2bGlrLCBSYW5keSBEdW5sYXAsIFBldGUgWmFpdGNldiwgRGF2aWQgUGFzY2hhbCIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBQcmludGVyIERldmljZSBDbGFzcyBkcml2ZXIiCisKKyNkZWZpbmUgVVNCTFBfQlVGX1NJWkUJCTgxOTIKKyNkZWZpbmUgVVNCTFBfREVWSUNFX0lEX1NJWkUJMTAyNAorCisvKiBpb2N0bHM6ICovCisjZGVmaW5lIExQR0VUU1RBVFVTCQkweDA2MGIJCS8qIHNhbWUgYXMgaW4gZHJpdmVycy9jaGFyL2xwLmMgKi8KKyNkZWZpbmUgSU9DTlJfR0VUX0RFVklDRV9JRAkJMQorI2RlZmluZSBJT0NOUl9HRVRfUFJPVE9DT0xTCQkyCisjZGVmaW5lIElPQ05SX1NFVF9QUk9UT0NPTAkJMworI2RlZmluZSBJT0NOUl9IUF9TRVRfQ0hBTk5FTAkJNAorI2RlZmluZSBJT0NOUl9HRVRfQlVTX0FERFJFU1MJCTUKKyNkZWZpbmUgSU9DTlJfR0VUX1ZJRF9QSUQJCTYKKyNkZWZpbmUgSU9DTlJfU09GVF9SRVNFVAkJNworLyogR2V0IGRldmljZV9pZCBzdHJpbmc6ICovCisjZGVmaW5lIExQSU9DX0dFVF9ERVZJQ0VfSUQobGVuKSBfSU9DKF9JT0NfUkVBRCwgJ1AnLCBJT0NOUl9HRVRfREVWSUNFX0lELCBsZW4pCisvKiBUaGUgZm9sbG93aW5nIGlvY3RscyB3ZXJlIGFkZGVkIGZvciBodHRwOi8vaHBvai5zb3VyY2Vmb3JnZS5uZXQ6ICovCisvKiBHZXQgdHdvLWludCBhcnJheToKKyAqIFswXT1jdXJyZW50IHByb3RvY29sICgxPTcvMS8xLCAyPTcvMS8yLCAzPTcvMS8zKSwKKyAqIFsxXT1zdXBwb3J0ZWQgcHJvdG9jb2wgbWFzayAobWFzayYoMTw8bikhPTAgbWVhbnMgNy8xL24gc3VwcG9ydGVkKTogKi8KKyNkZWZpbmUgTFBJT0NfR0VUX1BST1RPQ09MUyhsZW4pIF9JT0MoX0lPQ19SRUFELCAnUCcsIElPQ05SX0dFVF9QUk9UT0NPTFMsIGxlbikKKy8qIFNldCBwcm90b2NvbCAoYXJnOiAxPTcvMS8xLCAyPTcvMS8yLCAzPTcvMS8zKTogKi8KKyNkZWZpbmUgTFBJT0NfU0VUX1BST1RPQ09MIF9JT0MoX0lPQ19XUklURSwgJ1AnLCBJT0NOUl9TRVRfUFJPVE9DT0wsIDApCisvKiBTZXQgY2hhbm5lbCBudW1iZXIgKEhQIFZlbmRvci1zcGVjaWZpYyBjb21tYW5kKTogKi8KKyNkZWZpbmUgTFBJT0NfSFBfU0VUX0NIQU5ORUwgX0lPQyhfSU9DX1dSSVRFLCAnUCcsIElPQ05SX0hQX1NFVF9DSEFOTkVMLCAwKQorLyogR2V0IHR3by1pbnQgYXJyYXk6IFswXT1idXMgbnVtYmVyLCBbMV09ZGV2aWNlIGFkZHJlc3M6ICovCisjZGVmaW5lIExQSU9DX0dFVF9CVVNfQUREUkVTUyhsZW4pIF9JT0MoX0lPQ19SRUFELCAnUCcsIElPQ05SX0dFVF9CVVNfQUREUkVTUywgbGVuKQorLyogR2V0IHR3by1pbnQgYXJyYXk6IFswXT12ZW5kb3IgSUQsIFsxXT1wcm9kdWN0IElEOiAqLworI2RlZmluZSBMUElPQ19HRVRfVklEX1BJRChsZW4pIF9JT0MoX0lPQ19SRUFELCAnUCcsIElPQ05SX0dFVF9WSURfUElELCBsZW4pCisvKiBQZXJmb3JtIGNsYXNzIHNwZWNpZmljIHNvZnQgcmVzZXQgKi8KKyNkZWZpbmUgTFBJT0NfU09GVF9SRVNFVCBfSU9DKF9JT0NfTk9ORSwgJ1AnLCBJT0NOUl9TT0ZUX1JFU0VULCAwKTsKKworLyoKKyAqIEEgREVWSUNFX0lEIHN0cmluZyBtYXkgaW5jbHVkZSB0aGUgcHJpbnRlcidzIHNlcmlhbCBudW1iZXIuCisgKiBJdCBzaG91bGQgZW5kIHdpdGggYSBzZW1pLWNvbG9uICgnOycpLgorICogQW4gZXhhbXBsZSBmcm9tIGFuIEhQIDk3MEMgRGVza0pldCBwcmludGVyIGlzICh0aGlzIGlzIG9uZSBsb25nIHN0cmluZywKKyAqIHdpdGggdGhlIHNlcmlhbCBudW1iZXIgY2hhbmdlZCk6CitNRkc6SEVXTEVUVC1QQUNLQVJEO01ETDpERVNLSkVUIDk3MEM7Q01EOk1MQyxQQ0wsUE1MO0NMQVNTOlBSSU5URVI7REVTQ1JJUFRJT046SGV3bGV0dC1QYWNrYXJkIERlc2tKZXQgOTcwQztTRVJOOlVTOTcwQ1NFUFJPRjtWU1RBVFVTOiRIQjAkTkMwLGZmLEROLElETEUsQ1VULEsxLEMwLERQLE5SLEtQMDAwLENQMDI3O1ZQOjA4MDAsRkwsQjA7Vko6ICAgICAgICAgICAgICAgICAgICA7CisgKi8KKworLyoKKyAqIFVTQiBQcmludGVyIFJlcXVlc3RzCisgKi8KKworI2RlZmluZSBVU0JMUF9SRVFfR0VUX0lECQkJMHgwMAorI2RlZmluZSBVU0JMUF9SRVFfR0VUX1NUQVRVUwkJCTB4MDEKKyNkZWZpbmUgVVNCTFBfUkVRX1JFU0VUCQkJCTB4MDIKKyNkZWZpbmUgVVNCTFBfUkVRX0hQX0NIQU5ORUxfQ0hBTkdFX1JFUVVFU1QJMHgwMAkvKiBIUCBWZW5kb3Itc3BlY2lmaWMgKi8KKworI2RlZmluZSBVU0JMUF9NSU5PUlMJCTE2CisjZGVmaW5lIFVTQkxQX01JTk9SX0JBU0UJMAorCisjZGVmaW5lIFVTQkxQX1dSSVRFX1RJTUVPVVQJKDUwMDApCQkJLyogNSBzZWNvbmRzICovCisKKyNkZWZpbmUgVVNCTFBfRklSU1RfUFJPVE9DT0wJMQorI2RlZmluZSBVU0JMUF9MQVNUX1BST1RPQ09MCTMKKyNkZWZpbmUgVVNCTFBfTUFYX1BST1RPQ09MUwkoVVNCTFBfTEFTVF9QUk9UT0NPTCsxKQorCisvKgorICogc29tZSBhcmJpdHJhcnkgc3RhdHVzIGJ1ZmZlciBzaXplOworICogbmVlZCBhIHN0YXR1cyBidWZmZXIgdGhhdCBpcyBhbGxvY2F0ZWQgdmlhIGttYWxsb2MoKSwgbm90IG9uIHN0YWNrCisgKi8KKyNkZWZpbmUgU1RBVFVTX0JVRl9TSVpFCQk4CisKK3N0cnVjdCB1c2JscCB7CisJc3RydWN0IHVzYl9kZXZpY2UgCSpkZXY7CQkJLyogVVNCIGRldmljZSAqLworCXN0cnVjdCBzZW1hcGhvcmUJc2VtOwkJCS8qIGxvY2tzIHRoaXMgc3RydWN0LCBlc3BlY2lhbGx5ICJkZXYiICovCisJY2hhcgkJCSp3cml0ZWJ1ZjsJCS8qIHdyaXRlIHRyYW5zZmVyX2J1ZmZlciAqLworCWNoYXIJCQkqcmVhZGJ1ZjsJCS8qIHJlYWQgdHJhbnNmZXJfYnVmZmVyICovCisJY2hhcgkJCSpzdGF0dXNidWY7CQkvKiBzdGF0dXMgdHJhbnNmZXJfYnVmZmVyICovCisJc3RydWN0IHVyYgkJKnJlYWR1cmIsICp3cml0ZXVyYjsJLyogVGhlIHVyYnMgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OwkJCS8qIFp6enp6IC4uLiAqLworCWludAkJCXJlYWRjb3VudDsJCS8qIENvdW50ZXIgZm9yIHJlYWRzICovCisJaW50CQkJaWZudW07CQkJLyogSW50ZXJmYWNlIG51bWJlciAqLworCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSppbnRmOwkJCS8qIFRoZSBpbnRlcmZhY2UgKi8KKwkvKiBBbHRlcm5hdGUtc2V0dGluZyBudW1iZXJzIGFuZCBlbmRwb2ludHMgZm9yIGVhY2ggcHJvdG9jb2wKKwkgKiAoNy8xL3tpbmRleD0xLDIsM30pIHRoYXQgdGhlIGRldmljZSBzdXBwb3J0czogKi8KKwlzdHJ1Y3QgeworCQlpbnQJCQkJYWx0X3NldHRpbmc7CisJCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqZXB3cml0ZTsKKwkJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSplcHJlYWQ7CisJfQkJCXByb3RvY29sW1VTQkxQX01BWF9QUk9UT0NPTFNdOworCWludAkJCWN1cnJlbnRfcHJvdG9jb2w7CisJaW50CQkJbWlub3I7CQkJLyogbWlub3IgbnVtYmVyIG9mIGRldmljZSAqLworCWludAkJCXdjb21wbGV0ZTsJCS8qIHdyaXRpbmcgaXMgY29tcGxldGVkICovCisJaW50CQkJcmNvbXBsZXRlOwkJLyogcmVhZGluZyBpcyBjb21wbGV0ZWQgKi8KKwl1bnNpZ25lZCBpbnQJCXF1aXJrczsJCQkvKiBxdWlya3MgZmxhZ3MgKi8KKwl1bnNpZ25lZCBjaGFyCQl1c2VkOwkJCS8qIFRydWUgaWYgb3BlbiAqLworCXVuc2lnbmVkIGNoYXIJCXByZXNlbnQ7CQkvKiBUcnVlIGlmIG5vdCBkaXNjb25uZWN0ZWQgKi8KKwl1bnNpZ25lZCBjaGFyCQliaWRpcjsJCQkvKiBpbnRlcmZhY2UgaXMgYmlkaXJlY3Rpb25hbCAqLworCXVuc2lnbmVkIGNoYXIJCSpkZXZpY2VfaWRfc3RyaW5nOwkvKiBJRUVFIDEyODQgREVWSUNFIElEIHN0cmluZyAocHRyKSAqLworCQkJCQkJCS8qIGZpcnN0IDIgYnl0ZXMgYXJlIChiaWctZW5kaWFuKSBsZW5ndGggKi8KK307CisKKyNpZmRlZiBERUJVRworc3RhdGljIHZvaWQgdXNibHBfZHVtcChzdHJ1Y3QgdXNibHAgKnVzYmxwKSB7CisJaW50IHA7CisKKwlkYmcoInVzYmxwPTB4JXAiLCB1c2JscCk7CisJZGJnKCJkZXY9MHglcCIsIHVzYmxwLT5kZXYpOworCWRiZygicHJlc2VudD0lZCIsIHVzYmxwLT5wcmVzZW50KTsKKwlkYmcoInJlYWRidWY9MHglcCIsIHVzYmxwLT5yZWFkYnVmKTsKKwlkYmcoIndyaXRlYnVmPTB4JXAiLCB1c2JscC0+d3JpdGVidWYpOworCWRiZygicmVhZHVyYj0weCVwIiwgdXNibHAtPnJlYWR1cmIpOworCWRiZygid3JpdGV1cmI9MHglcCIsIHVzYmxwLT53cml0ZXVyYik7CisJZGJnKCJyZWFkY291bnQ9JWQiLCB1c2JscC0+cmVhZGNvdW50KTsKKwlkYmcoImlmbnVtPSVkIiwgdXNibHAtPmlmbnVtKTsKKyAgICBmb3IgKHAgPSBVU0JMUF9GSVJTVF9QUk9UT0NPTDsgcCA8PSBVU0JMUF9MQVNUX1BST1RPQ09MOyBwKyspIHsKKwlkYmcoInByb3RvY29sWyVkXS5hbHRfc2V0dGluZz0lZCIsIHAsIHVzYmxwLT5wcm90b2NvbFtwXS5hbHRfc2V0dGluZyk7CisJZGJnKCJwcm90b2NvbFslZF0uZXB3cml0ZT0lcCIsIHAsIHVzYmxwLT5wcm90b2NvbFtwXS5lcHdyaXRlKTsKKwlkYmcoInByb3RvY29sWyVkXS5lcHJlYWQ9JXAiLCBwLCB1c2JscC0+cHJvdG9jb2xbcF0uZXByZWFkKTsKKyAgICB9CisJZGJnKCJjdXJyZW50X3Byb3RvY29sPSVkIiwgdXNibHAtPmN1cnJlbnRfcHJvdG9jb2wpOworCWRiZygibWlub3I9JWQiLCB1c2JscC0+bWlub3IpOworCWRiZygid2NvbXBsZXRlPSVkIiwgdXNibHAtPndjb21wbGV0ZSk7CisJZGJnKCJyY29tcGxldGU9JWQiLCB1c2JscC0+cmNvbXBsZXRlKTsKKwlkYmcoInF1aXJrcz0lZCIsIHVzYmxwLT5xdWlya3MpOworCWRiZygidXNlZD0lZCIsIHVzYmxwLT51c2VkKTsKKwlkYmcoImJpZGlyPSVkIiwgdXNibHAtPmJpZGlyKTsKKwlkYmcoImRldmljZV9pZF9zdHJpbmc9XCIlc1wiIiwKKwkJdXNibHAtPmRldmljZV9pZF9zdHJpbmcgPworCQkJdXNibHAtPmRldmljZV9pZF9zdHJpbmcgKyAyIDoKKwkJCSh1bnNpZ25lZCBjaGFyICopIihudWxsKSIpOworfQorI2VuZGlmCisKKy8qIFF1aXJrczogdmFyaW91cyBwcmludGVyIHF1aXJrcyBhcmUgaGFuZGxlZCBieSB0aGlzIHRhYmxlICYgaXRzIGZsYWdzLiAqLworCitzdHJ1Y3QgcXVpcmtfcHJpbnRlcl9zdHJ1Y3QgeworCV9fdTE2IHZlbmRvcklkOworCV9fdTE2IHByb2R1Y3RJZDsKKwl1bnNpZ25lZCBpbnQgcXVpcmtzOworfTsKKworI2RlZmluZSBVU0JMUF9RVUlSS19CSURJUgkweDEJLyogcmVwb3J0cyBiaWRpciBidXQgcmVxdWlyZXMgdW5pZGlyZWN0aW9uYWwgbW9kZSAobm8gSU5zL3JlYWRzKSAqLworI2RlZmluZSBVU0JMUF9RVUlSS19VU0JfSU5JVAkweDIJLyogbmVlZHMgdmVuZG9yIFVTQiBpbml0IHN0cmluZyAqLworCitzdGF0aWMgc3RydWN0IHF1aXJrX3ByaW50ZXJfc3RydWN0IHF1aXJrX3ByaW50ZXJzW10gPSB7CisJeyAweDAzZjAsIDB4MDAwNCwgVVNCTFBfUVVJUktfQklESVIgfSwgLyogSFAgRGVza0pldCA4OTVDICovCisJeyAweDAzZjAsIDB4MDEwNCwgVVNCTFBfUVVJUktfQklESVIgfSwgLyogSFAgRGVza0pldCA4ODBDICovCisJeyAweDAzZjAsIDB4MDIwNCwgVVNCTFBfUVVJUktfQklESVIgfSwgLyogSFAgRGVza0pldCA4MTVDICovCisJeyAweDAzZjAsIDB4MDMwNCwgVVNCTFBfUVVJUktfQklESVIgfSwgLyogSFAgRGVza0pldCA4MTBDLzgxMkMgKi8KKwl7IDB4MDNmMCwgMHgwNDA0LCBVU0JMUF9RVUlSS19CSURJUiB9LCAvKiBIUCBEZXNrSmV0IDgzMEMgKi8KKwl7IDB4MDNmMCwgMHgwNTA0LCBVU0JMUF9RVUlSS19CSURJUiB9LCAvKiBIUCBEZXNrSmV0IDg4NUMgKi8KKwl7IDB4MDNmMCwgMHgwNjA0LCBVU0JMUF9RVUlSS19CSURJUiB9LCAvKiBIUCBEZXNrSmV0IDg0MEMgKi8gICAKKwl7IDB4MDNmMCwgMHgwODA0LCBVU0JMUF9RVUlSS19CSURJUiB9LCAvKiBIUCBEZXNrSmV0IDgxNkMgKi8gICAKKwl7IDB4MDNmMCwgMHgxMTA0LCBVU0JMUF9RVUlSS19CSURJUiB9LCAvKiBIUCBEZXNramV0IDk1OUMgKi8KKwl7IDB4MDQwOSwgMHhlZmJlLCBVU0JMUF9RVUlSS19CSURJUiB9LCAvKiBORUMgUGljdHk5MDAgKEhQIE9FTSkgKi8KKwl7IDB4MDQwOSwgMHhiZWY0LCBVU0JMUF9RVUlSS19CSURJUiB9LCAvKiBORUMgUGljdHk3NjAgKEhQIE9FTSkgKi8KKwl7IDB4MDQwOSwgMHhmMGJlLCBVU0JMUF9RVUlSS19CSURJUiB9LCAvKiBORUMgUGljdHk5MjAgKEhQIE9FTSkgKi8KKwl7IDB4MDQwOSwgMHhmMWJlLCBVU0JMUF9RVUlSS19CSURJUiB9LCAvKiBORUMgUGljdHk4MDAgKEhQIE9FTSkgKi8KKwl7IDAsIDAgfQorfTsKKworc3RhdGljIGludCB1c2JscF9zZWxlY3RfYWx0cyhzdHJ1Y3QgdXNibHAgKnVzYmxwKTsKK3N0YXRpYyBpbnQgdXNibHBfc2V0X3Byb3RvY29sKHN0cnVjdCB1c2JscCAqdXNibHAsIGludCBwcm90b2NvbCk7CitzdGF0aWMgaW50IHVzYmxwX2NhY2hlX2RldmljZV9pZF9zdHJpbmcoc3RydWN0IHVzYmxwICp1c2JscCk7CisKKy8qIGZvcndhcmQgcmVmZXJlbmNlIHRvIG1ha2Ugb3VyIGxpdmVzIGVhc2llciAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYmxwX2RyaXZlcjsKK3N0YXRpYyBERUNMQVJFX01VVEVYKHVzYmxwX3NlbSk7CS8qIGxvY2tzIHRoZSBleGlzdGVuY2Ugb2YgdXNibHAncyAqLworCisvKgorICogRnVuY3Rpb25zIGZvciB1c2JscCBjb250cm9sIG1lc3NhZ2VzLgorICovCisKK3N0YXRpYyBpbnQgdXNibHBfY3RybF9tc2coc3RydWN0IHVzYmxwICp1c2JscCwgaW50IHJlcXVlc3QsIGludCB0eXBlLCBpbnQgZGlyLCBpbnQgcmVjaXAsIGludCB2YWx1ZSwgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworCWludCByZXR2YWw7CisJaW50IGluZGV4ID0gdXNibHAtPmlmbnVtOworCisJLyogSGlnaCBieXRlIGhhcyB0aGUgaW50ZXJmYWNlIGluZGV4LgorCSAgIExvdyBieXRlIGhhcyB0aGUgYWx0ZXJuYXRlIHNldHRpbmcuCisJICovCisJaWYgKChyZXF1ZXN0ID09IFVTQkxQX1JFUV9HRVRfSUQpICYmICh0eXBlID09IFVTQl9UWVBFX0NMQVNTKSkgeworCSAgaW5kZXggPSAodXNibHAtPmlmbnVtPDw4KXx1c2JscC0+cHJvdG9jb2xbdXNibHAtPmN1cnJlbnRfcHJvdG9jb2xdLmFsdF9zZXR0aW5nOworCX0KKworCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyh1c2JscC0+ZGV2LAorCQlkaXIgPyB1c2JfcmN2Y3RybHBpcGUodXNibHAtPmRldiwgMCkgOiB1c2Jfc25kY3RybHBpcGUodXNibHAtPmRldiwgMCksCisJCXJlcXVlc3QsIHR5cGUgfCBkaXIgfCByZWNpcCwgdmFsdWUsIGluZGV4LCBidWYsIGxlbiwgVVNCTFBfV1JJVEVfVElNRU9VVCk7CisJZGJnKCJ1c2JscF9jb250cm9sX21zZzogcnE6IDB4JTAyeCBkaXI6ICVkIHJlY2lwOiAlZCB2YWx1ZTogJWQgaWR4OiAlZCBsZW46ICUjeCByZXN1bHQ6ICVkIiwKKwkJcmVxdWVzdCwgISFkaXIsIHJlY2lwLCB2YWx1ZSwgaW5kZXgsIGxlbiwgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsIDwgMCA/IHJldHZhbCA6IDA7Cit9CisKKyNkZWZpbmUgdXNibHBfcmVhZF9zdGF0dXModXNibHAsIHN0YXR1cylcCisJdXNibHBfY3RybF9tc2codXNibHAsIFVTQkxQX1JFUV9HRVRfU1RBVFVTLCBVU0JfVFlQRV9DTEFTUywgVVNCX0RJUl9JTiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgMCwgc3RhdHVzLCAxKQorI2RlZmluZSB1c2JscF9nZXRfaWQodXNibHAsIGNvbmZpZywgaWQsIG1heGxlbilcCisJdXNibHBfY3RybF9tc2codXNibHAsIFVTQkxQX1JFUV9HRVRfSUQsIFVTQl9UWVBFX0NMQVNTLCBVU0JfRElSX0lOLCBVU0JfUkVDSVBfSU5URVJGQUNFLCBjb25maWcsIGlkLCBtYXhsZW4pCisjZGVmaW5lIHVzYmxwX3Jlc2V0KHVzYmxwKVwKKwl1c2JscF9jdHJsX21zZyh1c2JscCwgVVNCTFBfUkVRX1JFU0VULCBVU0JfVFlQRV9DTEFTUywgVVNCX0RJUl9PVVQsIFVTQl9SRUNJUF9PVEhFUiwgMCwgTlVMTCwgMCkKKworI2RlZmluZSB1c2JscF9ocF9jaGFubmVsX2NoYW5nZV9yZXF1ZXN0KHVzYmxwLCBjaGFubmVsLCBidWZmZXIpIFwKKwl1c2JscF9jdHJsX21zZyh1c2JscCwgVVNCTFBfUkVRX0hQX0NIQU5ORUxfQ0hBTkdFX1JFUVVFU1QsIFVTQl9UWVBFX1ZFTkRPUiwgVVNCX0RJUl9JTiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgY2hhbm5lbCwgYnVmZmVyLCAxKQorCisvKgorICogU2VlIHRoZSBkZXNjcmlwdGlvbiBmb3IgdXNibHBfc2VsZWN0X2FsdHMoKSBiZWxvdyBmb3IgdGhlIHVzYWdlCisgKiBleHBsYW5hdGlvbi4gIExvb2sgaW50byB5b3VyIC9wcm9jL2J1cy91c2IvZGV2aWNlcyBhbmQgZG1lc2cgaW4KKyAqIGNhc2Ugb2YgYW55IHRyb3VibGUuCisgKi8KK3N0YXRpYyBpbnQgcHJvdG9fYmlhcyA9IC0xOworCisvKgorICogVVJCIGNhbGxiYWNrLgorICovCisKK3N0YXRpYyB2b2lkIHVzYmxwX2J1bGtfcmVhZChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2JscCAqdXNibHAgPSB1cmItPmNvbnRleHQ7CisKKwlpZiAoIXVzYmxwIHx8ICF1c2JscC0+ZGV2IHx8ICF1c2JscC0+dXNlZCB8fCAhdXNibHAtPnByZXNlbnQpCisJCXJldHVybjsKKworCWlmICh1bmxpa2VseSh1cmItPnN0YXR1cykpCisJCXdhcm4oInVzYmxwJWQ6IG5vbnplcm8gcmVhZC93cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkJdXNibHAtPm1pbm9yLCB1cmItPnN0YXR1cyk7CisJdXNibHAtPnJjb21wbGV0ZSA9IDE7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ1c2JscC0+d2FpdCk7Cit9CisKK3N0YXRpYyB2b2lkIHVzYmxwX2J1bGtfd3JpdGUoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNibHAgKnVzYmxwID0gdXJiLT5jb250ZXh0OworCisJaWYgKCF1c2JscCB8fCAhdXNibHAtPmRldiB8fCAhdXNibHAtPnVzZWQgfHwgIXVzYmxwLT5wcmVzZW50KQorCQlyZXR1cm47CisKKwlpZiAodW5saWtlbHkodXJiLT5zdGF0dXMpKQorCQl3YXJuKCJ1c2JscCVkOiBub256ZXJvIHJlYWQvd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJCXVzYmxwLT5taW5vciwgdXJiLT5zdGF0dXMpOworCXVzYmxwLT53Y29tcGxldGUgPSAxOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdXNibHAtPndhaXQpOworfQorCisvKgorICogR2V0IGFuZCBwcmludCBwcmludGVyIGVycm9ycy4KKyAqLworCitzdGF0aWMgY2hhciAqdXNibHBfbWVzc2FnZXNbXSA9IHsgIm9rIiwgIm91dCBvZiBwYXBlciIsICJvZmYtbGluZSIsICJvbiBmaXJlIiB9OworCitzdGF0aWMgaW50IHVzYmxwX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgdXNibHAgKnVzYmxwLCBpbnQgZXJyKQoreworCXVuc2lnbmVkIGNoYXIgc3RhdHVzLCBuZXdlcnIgPSAwOworCWludCBlcnJvcjsKKworCWVycm9yID0gdXNibHBfcmVhZF9zdGF0dXMgKHVzYmxwLCB1c2JscC0+c3RhdHVzYnVmKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCWVycigidXNibHAlZDogZXJyb3IgJWQgcmVhZGluZyBwcmludGVyIHN0YXR1cyIsCisJCQl1c2JscC0+bWlub3IsIGVycm9yKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3RhdHVzID0gKnVzYmxwLT5zdGF0dXNidWY7CisKKwlpZiAofnN0YXR1cyAmIExQX1BFUlJPUlApCisJCW5ld2VyciA9IDM7CisJaWYgKHN0YXR1cyAmIExQX1BPVVRQQSkKKwkJbmV3ZXJyID0gMTsKKwlpZiAofnN0YXR1cyAmIExQX1BTRUxFQ0QpCisJCW5ld2VyciA9IDI7CisKKwlpZiAobmV3ZXJyICE9IGVycikKKwkJaW5mbygidXNibHAlZDogJXMiLCB1c2JscC0+bWlub3IsIHVzYmxwX21lc3NhZ2VzW25ld2Vycl0pOworCisJcmV0dXJuIG5ld2VycjsKK30KKworLyoKKyAqIEZpbGUgb3AgZnVuY3Rpb25zLgorICovCisKK3N0YXRpYyBpbnQgdXNibHBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOworCXN0cnVjdCB1c2JscCAqdXNibHA7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisJaW50IHJldHZhbDsKKworCWlmIChtaW5vciA8IDApCisJCXJldHVybiAtRU5PREVWOworCisJZG93biAoJnVzYmxwX3NlbSk7CisKKwlyZXR2YWwgPSAtRU5PREVWOworCWludGYgPSB1c2JfZmluZF9pbnRlcmZhY2UoJnVzYmxwX2RyaXZlciwgbWlub3IpOworCWlmICghaW50ZikgeworCQlnb3RvIG91dDsKKwl9CisJdXNibHAgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKwlpZiAoIXVzYmxwIHx8ICF1c2JscC0+ZGV2IHx8ICF1c2JscC0+cHJlc2VudCkKKwkJZ290byBvdXQ7CisKKwlyZXR2YWwgPSAtRUJVU1k7CisJaWYgKHVzYmxwLT51c2VkKQorCQlnb3RvIG91dDsKKworCS8qCisJICogVE9ETzogbmVlZCB0byBpbXBsZW1lbnQgTFBfQUJPUlRPUEVOICsgT19OT05CTE9DSyBhcyBpbiBkcml2ZXJzL2NoYXIvbHAuYyA/Pz8KKwkgKiBUaGlzIGlzICNpZiAwLWVkIGJlY2F1c2Ugd2UgKmRvbid0KiB3YW50IHRvIGZhaWwgYW4gb3BlbgorCSAqIGp1c3QgYmVjYXVzZSB0aGUgcHJpbnRlciBpcyBvZmYtbGluZS4KKwkgKi8KKyNpZiAwCisJaWYgKChyZXR2YWwgPSB1c2JscF9jaGVja19zdGF0dXModXNibHAsIDApKSkgeworCQlyZXR2YWwgPSByZXR2YWwgPiAxID8gLUVJTyA6IC1FTk9TUEM7CisJCWdvdG8gb3V0OworCX0KKyNlbHNlCisJcmV0dmFsID0gMDsKKyNlbmRpZgorCisJdXNibHAtPnVzZWQgPSAxOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IHVzYmxwOworCisJdXNibHAtPndyaXRldXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gMDsKKwl1c2JscC0+d2NvbXBsZXRlID0gMTsgLyogd2UgYmVnaW4gd3JpdGVhYmxlICovCisJdXNibHAtPnJjb21wbGV0ZSA9IDA7CisKKwlpZiAodXNibHAtPmJpZGlyKSB7CisJCXVzYmxwLT5yZWFkY291bnQgPSAwOworCQl1c2JscC0+cmVhZHVyYi0+ZGV2ID0gdXNibHAtPmRldjsKKwkJaWYgKHVzYl9zdWJtaXRfdXJiKHVzYmxwLT5yZWFkdXJiLCBHRlBfS0VSTkVMKSA8IDApIHsKKwkJCXJldHZhbCA9IC1FSU87CisJCQl1c2JscC0+dXNlZCA9IDA7CisJCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCQl9CisJfQorb3V0OgorCXVwICgmdXNibHBfc2VtKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCB1c2JscF9jbGVhbnVwIChzdHJ1Y3QgdXNibHAgKnVzYmxwKQoreworCWluZm8oInVzYmxwJWQ6IHJlbW92ZWQiLCB1c2JscC0+bWlub3IpOworCisJa2ZyZWUgKHVzYmxwLT5kZXZpY2VfaWRfc3RyaW5nKTsKKwlrZnJlZSAodXNibHAtPnN0YXR1c2J1Zik7CisJdXNiX2ZyZWVfdXJiKHVzYmxwLT53cml0ZXVyYik7CisJdXNiX2ZyZWVfdXJiKHVzYmxwLT5yZWFkdXJiKTsKKwlrZnJlZSAodXNibHApOworfQorCitzdGF0aWMgdm9pZCB1c2JscF91bmxpbmtfdXJicyhzdHJ1Y3QgdXNibHAgKnVzYmxwKQoreworCXVzYl9raWxsX3VyYih1c2JscC0+d3JpdGV1cmIpOworCWlmICh1c2JscC0+YmlkaXIpCisJCXVzYl9raWxsX3VyYih1c2JscC0+cmVhZHVyYik7Cit9CisKK3N0YXRpYyBpbnQgdXNibHBfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdXNibHAgKnVzYmxwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJZG93biAoJnVzYmxwX3NlbSk7CisJdXNibHAtPnVzZWQgPSAwOworCWlmICh1c2JscC0+cHJlc2VudCkgeworCQl1c2JscF91bmxpbmtfdXJicyh1c2JscCk7CisJfSBlbHNlIAkJLyogZmluaXNoIGNsZWFudXAgZnJvbSBkaXNjb25uZWN0ICovCisJCXVzYmxwX2NsZWFudXAgKHVzYmxwKTsKKwl1cCAoJnVzYmxwX3NlbSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIE5vIGtlcm5lbCBsb2NrIC0gZmluZSAqLworc3RhdGljIHVuc2lnbmVkIGludCB1c2JscF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCit7CisJc3RydWN0IHVzYmxwICp1c2JscCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlwb2xsX3dhaXQoZmlsZSwgJnVzYmxwLT53YWl0LCB3YWl0KTsKKyAJcmV0dXJuICgoIXVzYmxwLT5iaWRpciB8fCAhdXNibHAtPnJjb21wbGV0ZSkgPyAwIDogUE9MTElOICB8IFBPTExSRE5PUk0pCisgCQkJICAgICAgIHwgKCF1c2JscC0+d2NvbXBsZXRlID8gMCA6IFBPTExPVVQgfCBQT0xMV1JOT1JNKTsKK30KKworc3RhdGljIGludCB1c2JscF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHVzYmxwICp1c2JscCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgbGVuZ3RoLCBlcnIsIGk7CisJdW5zaWduZWQgY2hhciBuZXdDaGFubmVsOworCWludCBzdGF0dXM7CisJaW50IHR3b2ludHNbMl07CisJaW50IHJldHZhbCA9IDA7CisKKwlkb3duICgmdXNibHAtPnNlbSk7CisJaWYgKCF1c2JscC0+cHJlc2VudCkgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGRvbmU7CisJfQorCisJZGJnKCJ1c2JscF9pb2N0bDogY21kPTB4JXggKCVjIG5yPSVkIGxlbj0lZCBkaXI9JWQpIiwgY21kLCBfSU9DX1RZUEUoY21kKSwKKwkJX0lPQ19OUihjbWQpLCBfSU9DX1NJWkUoY21kKSwgX0lPQ19ESVIoY21kKSApOworCisJaWYgKF9JT0NfVFlQRShjbWQpID09ICdQJykJLyogbmV3LXN0eWxlIGlvY3RsIG51bWJlciAqLworCisJCXN3aXRjaCAoX0lPQ19OUihjbWQpKSB7CisKKwkJCWNhc2UgSU9DTlJfR0VUX0RFVklDRV9JRDogLyogZ2V0IHRoZSBERVZJQ0VfSUQgc3RyaW5nICovCisJCQkJaWYgKF9JT0NfRElSKGNtZCkgIT0gX0lPQ19SRUFEKSB7CisJCQkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQkJCWdvdG8gZG9uZTsKKwkJCQl9CisKKwkJCQlsZW5ndGggPSB1c2JscF9jYWNoZV9kZXZpY2VfaWRfc3RyaW5nKHVzYmxwKTsKKwkJCQlpZiAobGVuZ3RoIDwgMCkgeworCQkJCQlyZXR2YWwgPSBsZW5ndGg7CisJCQkJCWdvdG8gZG9uZTsKKwkJCQl9CisJCQkJaWYgKGxlbmd0aCA+IF9JT0NfU0laRShjbWQpKQorCQkJCQlsZW5ndGggPSBfSU9DX1NJWkUoY21kKTsgLyogdHJ1bmNhdGUgKi8KKworCQkJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopIGFyZywKKwkJCQkJCXVzYmxwLT5kZXZpY2VfaWRfc3RyaW5nLAorCQkJCQkJKHVuc2lnbmVkIGxvbmcpIGxlbmd0aCkpIHsKKwkJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCQkJZ290byBkb25lOworCQkJCX0KKworCQkJCWJyZWFrOworCisJCQljYXNlIElPQ05SX0dFVF9QUk9UT0NPTFM6CisJCQkJaWYgKF9JT0NfRElSKGNtZCkgIT0gX0lPQ19SRUFEIHx8CisJCQkJICAgIF9JT0NfU0laRShjbWQpIDwgc2l6ZW9mKHR3b2ludHMpKSB7CisJCQkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQkJCWdvdG8gZG9uZTsKKwkJCQl9CisKKwkJCQl0d29pbnRzWzBdID0gdXNibHAtPmN1cnJlbnRfcHJvdG9jb2w7CisJCQkJdHdvaW50c1sxXSA9IDA7CisJCQkJZm9yIChpID0gVVNCTFBfRklSU1RfUFJPVE9DT0w7CisJCQkJICAgICBpIDw9IFVTQkxQX0xBU1RfUFJPVE9DT0w7IGkrKykgeworCQkJCQlpZiAodXNibHAtPnByb3RvY29sW2ldLmFsdF9zZXR0aW5nID49IDApCisJCQkJCQl0d29pbnRzWzFdIHw9ICgxPDxpKTsKKwkJCQl9CisKKwkJCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywKKwkJCQkJCSh1bnNpZ25lZCBjaGFyICopdHdvaW50cywKKwkJCQkJCXNpemVvZih0d29pbnRzKSkpIHsKKwkJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCQkJZ290byBkb25lOworCQkJCX0KKworCQkJCWJyZWFrOworCisJCQljYXNlIElPQ05SX1NFVF9QUk9UT0NPTDoKKwkJCQlpZiAoX0lPQ19ESVIoY21kKSAhPSBfSU9DX1dSSVRFKSB7CisJCQkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQkJCWdvdG8gZG9uZTsKKwkJCQl9CisKKyNpZmRlZiBERUJVRworCQkJCWlmIChhcmcgPT0gLTEwKSB7CisJCQkJCXVzYmxwX2R1bXAodXNibHApOworCQkJCQlicmVhazsKKwkJCQl9CisjZW5kaWYKKworCQkJCXVzYmxwX3VubGlua191cmJzKHVzYmxwKTsKKwkJCQlyZXR2YWwgPSB1c2JscF9zZXRfcHJvdG9jb2wodXNibHAsIGFyZyk7CisJCQkJaWYgKHJldHZhbCA8IDApIHsKKwkJCQkJdXNibHBfc2V0X3Byb3RvY29sKHVzYmxwLAorCQkJCQkJdXNibHAtPmN1cnJlbnRfcHJvdG9jb2wpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBJT0NOUl9IUF9TRVRfQ0hBTk5FTDoKKwkJCQlpZiAoX0lPQ19ESVIoY21kKSAhPSBfSU9DX1dSSVRFIHx8CisJCQkJICAgIGxlMTZfdG9fY3B1KHVzYmxwLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpICE9IDB4MDNGMCB8fAorCQkJCSAgICB1c2JscC0+cXVpcmtzICYgVVNCTFBfUVVJUktfQklESVIpIHsKKwkJCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCQkJZ290byBkb25lOworCQkJCX0KKworCQkJCWVyciA9IHVzYmxwX2hwX2NoYW5uZWxfY2hhbmdlX3JlcXVlc3QodXNibHAsCisJCQkJCWFyZywgJm5ld0NoYW5uZWwpOworCQkJCWlmIChlcnIgPCAwKSB7CisJCQkJCWVycigidXNibHAlZDogZXJyb3IgPSAlZCBzZXR0aW5nICIKKwkJCQkJCSJIUCBjaGFubmVsIiwKKwkJCQkJCXVzYmxwLT5taW5vciwgZXJyKTsKKwkJCQkJcmV0dmFsID0gLUVJTzsKKwkJCQkJZ290byBkb25lOworCQkJCX0KKworCQkJCWRiZygidXNibHAlZCByZXF1ZXN0ZWQvZ290IEhQIGNoYW5uZWwgJWxkLyVkIiwKKwkJCQkJdXNibHAtPm1pbm9yLCBhcmcsIG5ld0NoYW5uZWwpOworCQkJCWJyZWFrOworCisJCQljYXNlIElPQ05SX0dFVF9CVVNfQUREUkVTUzoKKwkJCQlpZiAoX0lPQ19ESVIoY21kKSAhPSBfSU9DX1JFQUQgfHwKKwkJCQkgICAgX0lPQ19TSVpFKGNtZCkgPCBzaXplb2YodHdvaW50cykpIHsKKwkJCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCQkJZ290byBkb25lOworCQkJCX0KKworCQkJCXR3b2ludHNbMF0gPSB1c2JscC0+ZGV2LT5idXMtPmJ1c251bTsKKwkJCQl0d29pbnRzWzFdID0gdXNibHAtPmRldi0+ZGV2bnVtOworCQkJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLAorCQkJCQkJKHVuc2lnbmVkIGNoYXIgKil0d29pbnRzLAorCQkJCQkJc2l6ZW9mKHR3b2ludHMpKSkgeworCQkJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJCQlnb3RvIGRvbmU7CisJCQkJfQorCisJCQkJZGJnKCJ1c2JscCVkIGlzIGJ1cz0lZCwgZGV2aWNlPSVkIiwKKwkJCQkJdXNibHAtPm1pbm9yLCB0d29pbnRzWzBdLCB0d29pbnRzWzFdKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBJT0NOUl9HRVRfVklEX1BJRDoKKwkJCQlpZiAoX0lPQ19ESVIoY21kKSAhPSBfSU9DX1JFQUQgfHwKKwkJCQkgICAgX0lPQ19TSVpFKGNtZCkgPCBzaXplb2YodHdvaW50cykpIHsKKwkJCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCQkJZ290byBkb25lOworCQkJCX0KKworCQkJCXR3b2ludHNbMF0gPSBsZTE2X3RvX2NwdSh1c2JscC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwkJCQl0d29pbnRzWzFdID0gbGUxNl90b19jcHUodXNibHAtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCQkJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLAorCQkJCQkJKHVuc2lnbmVkIGNoYXIgKil0d29pbnRzLAorCQkJCQkJc2l6ZW9mKHR3b2ludHMpKSkgeworCQkJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJCQlnb3RvIGRvbmU7CisJCQkJfQorCisJCQkJZGJnKCJ1c2JscCVkIGlzIFZJRD0weCU0LjRYLCBQSUQ9MHglNC40WCIsCisJCQkJCXVzYmxwLT5taW5vciwgdHdvaW50c1swXSwgdHdvaW50c1sxXSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSU9DTlJfU09GVF9SRVNFVDoKKwkJCQlpZiAoX0lPQ19ESVIoY21kKSAhPSBfSU9DX05PTkUpIHsKKwkJCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCQkJZ290byBkb25lOworCQkJCX0KKwkJCQlyZXR2YWwgPSB1c2JscF9yZXNldCh1c2JscCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJldHZhbCA9IC1FTk9UVFk7CisJCX0KKwllbHNlCS8qIG9sZC1zdHlsZSBpb2N0bCB2YWx1ZSAqLworCQlzd2l0Y2ggKGNtZCkgeworCisJCQljYXNlIExQR0VUU1RBVFVTOgorCQkJCWlmICh1c2JscF9yZWFkX3N0YXR1cyh1c2JscCwgdXNibHAtPnN0YXR1c2J1ZikpIHsKKwkJCQkJZXJyKCJ1c2JscCVkOiBmYWlsZWQgcmVhZGluZyBwcmludGVyIHN0YXR1cyIsIHVzYmxwLT5taW5vcik7CisJCQkJCXJldHZhbCA9IC1FSU87CisJCQkJCWdvdG8gZG9uZTsKKwkJCQl9CisJCQkJc3RhdHVzID0gKnVzYmxwLT5zdGF0dXNidWY7CisJCQkJaWYgKGNvcHlfdG9fdXNlciAoKHZvaWQgX191c2VyICopYXJnLCAmc3RhdHVzLCBzaXplb2YoaW50KSkpCisJCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dmFsID0gLUVOT1RUWTsKKwkJfQorCitkb25lOgorCXVwICgmdXNibHAtPnNlbSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHNzaXplX3QgdXNibHBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCXN0cnVjdCB1c2JscCAqdXNibHAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IHRpbWVvdXQsIGVyciA9IDAsIHRyYW5zZmVyX2xlbmd0aCA9IDA7CisJc2l6ZV90IHdyaXRlY291bnQgPSAwOworCisJd2hpbGUgKHdyaXRlY291bnQgPCBjb3VudCkgeworCQlpZiAoIXVzYmxwLT53Y29tcGxldGUpIHsKKwkJCWJhcnJpZXIoKTsKKwkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJCXdyaXRlY291bnQgKz0gdHJhbnNmZXJfbGVuZ3RoOworCQkJCXJldHVybiB3cml0ZWNvdW50ID8gd3JpdGVjb3VudCA6IC1FQUdBSU47CisJCQl9CisKKwkJCXRpbWVvdXQgPSBVU0JMUF9XUklURV9USU1FT1VUOworCQkJYWRkX3dhaXRfcXVldWUoJnVzYmxwLT53YWl0LCAmd2FpdCk7CisJCQl3aGlsZSAoIDE9PTEgKSB7CisKKwkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQkJcmVtb3ZlX3dhaXRfcXVldWUoJnVzYmxwLT53YWl0LCAmd2FpdCk7CisJCQkJCXJldHVybiB3cml0ZWNvdW50ID8gd3JpdGVjb3VudCA6IC1FSU5UUjsKKwkJCQl9CisJCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCQlpZiAodGltZW91dCAmJiAhdXNibHAtPndjb21wbGV0ZSkgeworCQkJCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKKwkJCQl9IGVsc2UgeworCQkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmdXNibHAtPndhaXQsICZ3YWl0KTsKKwkJfQorCisJCWRvd24gKCZ1c2JscC0+c2VtKTsKKwkJaWYgKCF1c2JscC0+cHJlc2VudCkgeworCQkJdXAgKCZ1c2JscC0+c2VtKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJaWYgKHVzYmxwLT53cml0ZXVyYi0+c3RhdHVzICE9IDApIHsKKwkJCWlmICh1c2JscC0+cXVpcmtzICYgVVNCTFBfUVVJUktfQklESVIpIHsKKwkJCQlpZiAoIXVzYmxwLT53Y29tcGxldGUpCisJCQkJCWVycigidXNibHAlZDogZXJyb3IgJWQgd3JpdGluZyB0byBwcmludGVyIiwKKwkJCQkJCXVzYmxwLT5taW5vciwgdXNibHAtPndyaXRldXJiLT5zdGF0dXMpOworCQkJCWVyciA9IHVzYmxwLT53cml0ZXVyYi0+c3RhdHVzOworCQkJfSBlbHNlCisJCQkJZXJyID0gdXNibHBfY2hlY2tfc3RhdHVzKHVzYmxwLCBlcnIpOworCQkJdXAgKCZ1c2JscC0+c2VtKTsKKworCQkJLyogaWYgdGhlIGZhdWx0IHdhcyBkdWUgdG8gZGlzY29ubmVjdCwgbGV0IGtodWJkJ3MKKwkJCSAqIGNhbGwgdG8gdXNibHBfZGlzY29ubmVjdCgpIGdyYWIgdXNibHAtPnNlbSAuLi4KKwkJCSAqLworCQkJc2NoZWR1bGUgKCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFdlIG11c3QgaW5jcmVtZW50IHdyaXRlY291bnQgaGVyZSwgYW5kIG5vdCBhdCB0aGUKKwkJICogZW5kIG9mIHRoZSBsb29wLiBPdGhlcndpc2UsIHRoZSBmaW5hbCBsb29wIGl0ZXJhdGlvbiBtYXkKKwkJICogYmUgc2tpcHBlZCwgbGVhZGluZyB0byBpbmNvbXBsZXRlIHByaW50ZXIgb3V0cHV0LgorCQkgKi8KKwkJd3JpdGVjb3VudCArPSB0cmFuc2Zlcl9sZW5ndGg7CisJCWlmICh3cml0ZWNvdW50ID09IGNvdW50KSB7CisJCQl1cCgmdXNibHAtPnNlbSk7CisJCQlicmVhazsKKwkJfQorCisJCXRyYW5zZmVyX2xlbmd0aD0oY291bnQgLSB3cml0ZWNvdW50KTsKKwkJaWYgKHRyYW5zZmVyX2xlbmd0aCA+IFVTQkxQX0JVRl9TSVpFKQorCQkJdHJhbnNmZXJfbGVuZ3RoID0gVVNCTFBfQlVGX1NJWkU7CisKKwkJdXNibHAtPndyaXRldXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gdHJhbnNmZXJfbGVuZ3RoOworCisJCWlmIChjb3B5X2Zyb21fdXNlcih1c2JscC0+d3JpdGV1cmItPnRyYW5zZmVyX2J1ZmZlciwgCisJCQkJICAgYnVmZmVyICsgd3JpdGVjb3VudCwgdHJhbnNmZXJfbGVuZ3RoKSkgeworCQkJdXAoJnVzYmxwLT5zZW0pOworCQkJcmV0dXJuIHdyaXRlY291bnQgPyB3cml0ZWNvdW50IDogLUVGQVVMVDsKKwkJfQorCisJCXVzYmxwLT53cml0ZXVyYi0+ZGV2ID0gdXNibHAtPmRldjsKKwkJdXNibHAtPndjb21wbGV0ZSA9IDA7CisJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVzYmxwLT53cml0ZXVyYiwgR0ZQX0tFUk5FTCk7CisJCWlmIChlcnIpIHsKKwkJCWlmIChlcnIgIT0gLUVOT01FTSkKKwkJCQljb3VudCA9IC1FSU87CisJCQllbHNlCisJCQkJY291bnQgPSB3cml0ZWNvdW50ID8gd3JpdGVjb3VudCA6IC1FTk9NRU07CisJCQl1cCAoJnVzYmxwLT5zZW0pOworCQkJYnJlYWs7CisJCX0KKwkJdXAgKCZ1c2JscC0+c2VtKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHVzYmxwX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB1c2JscCAqdXNibHAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisKKwlpZiAoIXVzYmxwLT5iaWRpcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkb3duICgmdXNibHAtPnNlbSk7CisJaWYgKCF1c2JscC0+cHJlc2VudCkgeworCQljb3VudCA9IC1FTk9ERVY7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoIXVzYmxwLT5yY29tcGxldGUpIHsKKwkJYmFycmllcigpOworCisJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJY291bnQgPSAtRUFHQUlOOworCQkJZ290byBkb25lOworCQl9CisKKwkJYWRkX3dhaXRfcXVldWUoJnVzYmxwLT53YWl0LCAmd2FpdCk7CisJCXdoaWxlICgxPT0xKSB7CisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQljb3VudCA9IC1FSU5UUjsKKwkJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmdXNibHAtPndhaXQsICZ3YWl0KTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCQl1cCAoJnVzYmxwLT5zZW0pOworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCWlmICghdXNibHAtPnJjb21wbGV0ZSkgeworCQkJCXNjaGVkdWxlKCk7CisJCQl9IGVsc2UgeworCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlkb3duICgmdXNibHAtPnNlbSk7CisJCX0KKwkJcmVtb3ZlX3dhaXRfcXVldWUoJnVzYmxwLT53YWl0LCAmd2FpdCk7CisJfQorCisJaWYgKCF1c2JscC0+cHJlc2VudCkgeworCQljb3VudCA9IC1FTk9ERVY7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAodXNibHAtPnJlYWR1cmItPnN0YXR1cykgeworCQllcnIoInVzYmxwJWQ6IGVycm9yICVkIHJlYWRpbmcgZnJvbSBwcmludGVyIiwKKwkJCXVzYmxwLT5taW5vciwgdXNibHAtPnJlYWR1cmItPnN0YXR1cyk7CisJCXVzYmxwLT5yZWFkdXJiLT5kZXYgPSB1c2JscC0+ZGV2OworIAkJdXNibHAtPnJlYWRjb3VudCA9IDA7CisJCXVzYmxwLT5yY29tcGxldGUgPSAwOworCQlpZiAodXNiX3N1Ym1pdF91cmIodXNibHAtPnJlYWR1cmIsIEdGUF9LRVJORUwpIDwgMCkKKwkJCWRiZygiZXJyb3Igc3VibWl0dGluZyB1cmIiKTsKKwkJY291bnQgPSAtRUlPOworCQlnb3RvIGRvbmU7CisJfQorCisJY291bnQgPSBjb3VudCA8IHVzYmxwLT5yZWFkdXJiLT5hY3R1YWxfbGVuZ3RoIC0gdXNibHAtPnJlYWRjb3VudCA/CisJCWNvdW50IDoJdXNibHAtPnJlYWR1cmItPmFjdHVhbF9sZW5ndGggLSB1c2JscC0+cmVhZGNvdW50OworCisJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIsIHVzYmxwLT5yZWFkdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1c2JscC0+cmVhZGNvdW50LCBjb3VudCkpIHsKKwkJY291bnQgPSAtRUZBVUxUOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKCh1c2JscC0+cmVhZGNvdW50ICs9IGNvdW50KSA9PSB1c2JscC0+cmVhZHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQl1c2JscC0+cmVhZGNvdW50ID0gMDsKKwkJdXNibHAtPnJlYWR1cmItPmRldiA9IHVzYmxwLT5kZXY7CisJCXVzYmxwLT5yY29tcGxldGUgPSAwOworCQlpZiAodXNiX3N1Ym1pdF91cmIodXNibHAtPnJlYWR1cmIsIEdGUF9LRVJORUwpKSB7CisJCQljb3VudCA9IC1FSU87CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKK2RvbmU6CisJdXAgKCZ1c2JscC0+c2VtKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBDaGVja3MgZm9yIHByaW50ZXJzIHRoYXQgaGF2ZSBxdWlya3MsIHN1Y2ggYXMgcmVxdWlyaW5nIHVuaWRpcmVjdGlvbmFsCisgKiBjb21tdW5pY2F0aW9uIGJ1dCByZXBvcnRpbmcgYmlkaXJlY3Rpb25hbDsgY3VycmVudGx5IHNvbWUgSFAgcHJpbnRlcnMKKyAqIGhhdmUgdGhpcyBmbGF3IChIUCA4MTAsIDg4MCwgODk1LCBldGMuKSwgb3IgbmVlZGluZyBhbiBpbml0IHN0cmluZworICogc2VudCBhdCBlYWNoIG9wZW4gKGxpa2Ugc29tZSBFcHNvbnMpLgorICogUmV0dXJucyAxIGlmIGZvdW5kLCAwIGlmIG5vdCBmb3VuZC4KKyAqCisgKiBIUCByZWNvbW1lbmRlZCB0aGF0IHdlIHVzZSB0aGUgYmlkaXJlY3Rpb25hbCBpbnRlcmZhY2UgYnV0CisgKiBkb24ndCBhdHRlbXB0IGFueSBidWxrIElOIHRyYW5zZmVycyBmcm9tIHRoZSBJTiBlbmRwb2ludC4KKyAqIEhlcmUncyBzb21lIG1vcmUgZGV0YWlsIG9uIHRoZSBwcm9ibGVtOgorICogVGhlIHByb2JsZW0gaXMgbm90IHRoYXQgaXQgaXNuJ3QgYmlkaXJlY3Rpb25hbCB0aG91Z2guIFRoZSBwcm9ibGVtCisgKiBpcyB0aGF0IGlmIHlvdSByZXF1ZXN0IGEgZGV2aWNlIElELCBvciBzdGF0dXMgaW5mb3JtYXRpb24sIHdoaWxlCisgKiB0aGUgYnVmZmVycyBhcmUgZnVsbCwgdGhlIHJldHVybiBkYXRhIHdpbGwgZW5kIHVwIGluIHRoZSBwcmludCBkYXRhCisgKiBidWZmZXIuIEZvciBleGFtcGxlIGlmIHlvdSBtYWtlIHN1cmUgeW91IG5ldmVyIHJlcXVlc3QgdGhlIGRldmljZSBJRAorICogd2hpbGUgeW91IGFyZSBzZW5kaW5nIHByaW50IGRhdGEsIGFuZCB5b3UgZG9uJ3QgdHJ5IHRvIHF1ZXJ5IHRoZQorICogcHJpbnRlciBzdGF0dXMgZXZlcnkgY291cGxlIG9mIG1pbGxpc2Vjb25kcywgeW91IHdpbGwgcHJvYmFibHkgYmUgT0suCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdXNibHBfcXVpcmtzIChfX3UxNiB2ZW5kb3IsIF9fdTE2IHByb2R1Y3QpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBxdWlya19wcmludGVyc1tpXS52ZW5kb3JJZDsgaSsrKSB7CisJCWlmICh2ZW5kb3IgPT0gcXVpcmtfcHJpbnRlcnNbaV0udmVuZG9ySWQgJiYKKwkJICAgIHByb2R1Y3QgPT0gcXVpcmtfcHJpbnRlcnNbaV0ucHJvZHVjdElkKQorCQkJcmV0dXJuIHF1aXJrX3ByaW50ZXJzW2ldLnF1aXJrczsKKyAJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2JscF9mb3BzID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5yZWFkID0JCXVzYmxwX3JlYWQsCisJLndyaXRlID0JdXNibHBfd3JpdGUsCisJLnBvbGwgPQkJdXNibHBfcG9sbCwKKwkuaW9jdGwgPQl1c2JscF9pb2N0bCwKKwkub3BlbiA9CQl1c2JscF9vcGVuLAorCS5yZWxlYXNlID0JdXNibHBfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciB1c2JscF9jbGFzcyA9IHsKKwkubmFtZSA9CQkidXNiL2xwJWQiLAorCS5mb3BzID0JCSZ1c2JscF9mb3BzLAorCS5tb2RlID0JCVNfSUZDSFIgfCBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lXR1JQLAorCS5taW5vcl9iYXNlID0JVVNCTFBfTUlOT1JfQkFTRSwKK307CisKK3N0YXRpYyBpbnQgdXNibHBfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOworCXN0cnVjdCB1c2JscCAqdXNibHAgPSBOVUxMOworCWludCBwcm90b2NvbDsKKwlpbnQgcmV0dmFsOworCisJLyogTWFsbG9jIGFuZCBzdGFydCBpbml0aWFsaXppbmcgdXNibHAgc3RydWN0dXJlIHNvIHdlIGNhbiB1c2UgaXQKKwkgKiBkaXJlY3RseS4gKi8KKwlpZiAoISh1c2JscCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JscCksIEdGUF9LRVJORUwpKSkgeworCQllcnIoIm91dCBvZiBtZW1vcnkgZm9yIHVzYmxwIik7CisJCWdvdG8gYWJvcnQ7CisJfQorCW1lbXNldCh1c2JscCwgMCwgc2l6ZW9mKHN0cnVjdCB1c2JscCkpOworCXVzYmxwLT5kZXYgPSBkZXY7CisJaW5pdF9NVVRFWCAoJnVzYmxwLT5zZW0pOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnVzYmxwLT53YWl0KTsKKwl1c2JscC0+aWZudW0gPSBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCXVzYmxwLT5pbnRmID0gaW50ZjsKKworCXVzYmxwLT53cml0ZXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1c2JscC0+d3JpdGV1cmIpIHsKKwkJZXJyKCJvdXQgb2YgbWVtb3J5Iik7CisJCWdvdG8gYWJvcnQ7CisJfQorCXVzYmxwLT5yZWFkdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVzYmxwLT5yZWFkdXJiKSB7CisJCWVycigib3V0IG9mIG1lbW9yeSIpOworCQlnb3RvIGFib3J0OworCX0KKworCS8qIE1hbGxvYyBkZXZpY2UgSUQgc3RyaW5nIGJ1ZmZlciB0byB0aGUgbGFyZ2VzdCBleHBlY3RlZCBsZW5ndGgsCisJICogc2luY2Ugd2UgY2FuIHJlLXF1ZXJ5IGl0IG9uIGFuIGlvY3RsIGFuZCBhIGR5bmFtaWMgc3RyaW5nCisJICogY291bGQgY2hhbmdlIGluIGxlbmd0aC4gKi8KKwlpZiAoISh1c2JscC0+ZGV2aWNlX2lkX3N0cmluZyA9IGttYWxsb2MoVVNCTFBfREVWSUNFX0lEX1NJWkUsIEdGUF9LRVJORUwpKSkgeworCQllcnIoIm91dCBvZiBtZW1vcnkgZm9yIGRldmljZV9pZF9zdHJpbmciKTsKKwkJZ290byBhYm9ydDsKKwl9CisKKwl1c2JscC0+d3JpdGVidWYgPSB1c2JscC0+cmVhZGJ1ZiA9IE5VTEw7CisJdXNibHAtPndyaXRldXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCXVzYmxwLT5yZWFkdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCS8qIE1hbGxvYyB3cml0ZSAmIHJlYWQgYnVmZmVycy4gIFdlIHNvbWV3aGF0IHdhc3RlZnVsbHkKKwkgKiBtYWxsb2MgYm90aCByZWdhcmRsZXNzIG9mIGJpZGlyZWN0aW9uYWxpdHksIGJlY2F1c2UgdGhlCisJICogYWx0ZXJuYXRlIHNldHRpbmcgY2FuIGJlIGNoYW5nZWQgbGF0ZXIgdmlhIGFuIGlvY3RsLiAqLworCWlmICghKHVzYmxwLT53cml0ZWJ1ZiA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCBVU0JMUF9CVUZfU0laRSwKKwkJCQlHRlBfS0VSTkVMLCAmdXNibHAtPndyaXRldXJiLT50cmFuc2Zlcl9kbWEpKSkgeworCQllcnIoIm91dCBvZiBtZW1vcnkgZm9yIHdyaXRlIGJ1ZiIpOworCQlnb3RvIGFib3J0OworCX0KKwlpZiAoISh1c2JscC0+cmVhZGJ1ZiA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCBVU0JMUF9CVUZfU0laRSwKKwkJCQlHRlBfS0VSTkVMLCAmdXNibHAtPnJlYWR1cmItPnRyYW5zZmVyX2RtYSkpKSB7CisJCWVycigib3V0IG9mIG1lbW9yeSBmb3IgcmVhZCBidWYiKTsKKwkJZ290byBhYm9ydDsKKwl9CisKKwkvKiBBbGxvY2F0ZSBidWZmZXIgZm9yIHByaW50ZXIgc3RhdHVzICovCisJdXNibHAtPnN0YXR1c2J1ZiA9IGttYWxsb2MoU1RBVFVTX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVzYmxwLT5zdGF0dXNidWYpIHsKKwkJZXJyKCJvdXQgb2YgbWVtb3J5IGZvciBzdGF0dXNidWYiKTsKKwkJZ290byBhYm9ydDsKKwl9CisKKwkvKiBMb29rdXAgcXVpcmtzIGZvciB0aGlzIHByaW50ZXIuICovCisJdXNibHAtPnF1aXJrcyA9IHVzYmxwX3F1aXJrcygKKwkJbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkJbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOworCisJLyogQW5hbHl6ZSBhbmQgcGljayBpbml0aWFsIGFsdGVybmF0ZSBzZXR0aW5ncyBhbmQgZW5kcG9pbnRzLiAqLworCXByb3RvY29sID0gdXNibHBfc2VsZWN0X2FsdHModXNibHApOworCWlmIChwcm90b2NvbCA8IDApIHsKKwkJZGJnKCJpbmNvbXBhdGlibGUgcHJpbnRlci1jbGFzcyBkZXZpY2UgMHglNC40WC8weCU0LjRYIiwKKwkJCWxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCQlsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisJCWdvdG8gYWJvcnQ7CisJfQorCisJLyogU2V0dXAgdGhlIHNlbGVjdGVkIGFsdGVybmF0ZSBzZXR0aW5nIGFuZCBlbmRwb2ludHMuICovCisJaWYgKHVzYmxwX3NldF9wcm90b2NvbCh1c2JscCwgcHJvdG9jb2wpIDwgMCkKKwkJZ290byBhYm9ydDsKKworCS8qIFJldHJpZXZlIGFuZCBzdG9yZSB0aGUgZGV2aWNlIElEIHN0cmluZy4gKi8KKwl1c2JscF9jYWNoZV9kZXZpY2VfaWRfc3RyaW5nKHVzYmxwKTsKKworI2lmZGVmIERFQlVHCisJdXNibHBfY2hlY2tfc3RhdHVzKHVzYmxwLCAwKTsKKyNlbmRpZgorCisJaW5mbygidXNibHAlZDogVVNCICVzZGlyZWN0aW9uYWwgcHJpbnRlciBkZXYgJWQgIgorCQkiaWYgJWQgYWx0ICVkIHByb3RvICVkIHZpZCAweCU0LjRYIHBpZCAweCU0LjRYIiwKKwkJdXNibHAtPm1pbm9yLCB1c2JscC0+YmlkaXIgPyAiQmkiIDogIlVuaSIsIGRldi0+ZGV2bnVtLAorCQl1c2JscC0+aWZudW0sCisJCXVzYmxwLT5wcm90b2NvbFt1c2JscC0+Y3VycmVudF9wcm90b2NvbF0uYWx0X3NldHRpbmcsCisJCXVzYmxwLT5jdXJyZW50X3Byb3RvY29sLAorCQlsZTE2X3RvX2NwdSh1c2JscC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkJbGUxNl90b19jcHUodXNibHAtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIHVzYmxwKTsKKworCXVzYmxwLT5wcmVzZW50ID0gMTsKKworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJnVzYmxwX2NsYXNzKTsKKwlpZiAocmV0dmFsKSB7CisJCWVycigiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLiIpOworCQlnb3RvIGFib3J0X2ludGZkYXRhOworCX0KKwl1c2JscC0+bWlub3IgPSBpbnRmLT5taW5vcjsKKworCXJldHVybiAwOworCithYm9ydF9pbnRmZGF0YToKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKK2Fib3J0OgorCWlmICh1c2JscCkgeworCQlpZiAodXNibHAtPndyaXRlYnVmKQorCQkJdXNiX2J1ZmZlcl9mcmVlICh1c2JscC0+ZGV2LCBVU0JMUF9CVUZfU0laRSwKKwkJCQl1c2JscC0+d3JpdGVidWYsIHVzYmxwLT53cml0ZXVyYi0+dHJhbnNmZXJfZG1hKTsKKwkJaWYgKHVzYmxwLT5yZWFkYnVmKQorCQkJdXNiX2J1ZmZlcl9mcmVlICh1c2JscC0+ZGV2LCBVU0JMUF9CVUZfU0laRSwKKwkJCQl1c2JscC0+cmVhZGJ1ZiwgdXNibHAtPndyaXRldXJiLT50cmFuc2Zlcl9kbWEpOworCQlrZnJlZSh1c2JscC0+c3RhdHVzYnVmKTsKKwkJa2ZyZWUodXNibHAtPmRldmljZV9pZF9zdHJpbmcpOworCQl1c2JfZnJlZV91cmIodXNibHAtPndyaXRldXJiKTsKKwkJdXNiX2ZyZWVfdXJiKHVzYmxwLT5yZWFkdXJiKTsKKwkJa2ZyZWUodXNibHApOworCX0KKwlyZXR1cm4gLUVJTzsKK30KKworLyoKKyAqIFdlIGFyZSBhICJuZXciIHN0eWxlIGRyaXZlciB3aXRoIHVzYl9kZXZpY2VfaWQgdGFibGUsCisgKiBidXQgb3VyIHJlcXVpcmVtZW50cyBhcmUgdG9vIGludHJpY2F0ZSBmb3Igc2ltcGxlIG1hdGNoIHRvIGhhbmRsZS4KKyAqCisgKiBUaGUgInByb3RvX2JpYXMiIG9wdGlvbiBtYXkgYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBwcmVmZXJyZWQgcHJvdG9jb2wKKyAqIGZvciBhbGwgVVNCIHByaW50ZXJzICgxPTcvMS8xLCAyPTcvMS8yLCAzPTcvMS8zKS4gIElmIHRoZSBkZXZpY2UKKyAqIHN1cHBvcnRzIHRoZSBwcmVmZXJyZWQgcHJvdG9jb2wsIHRoZW4gd2UgYmluZCB0byBpdC4KKyAqCisgKiBUaGUgYmVzdCBpbnRlcmZhY2UgZm9yIHVzIGlzIDcvMS8yLCBiZWNhdXNlIGl0IGlzIGNvbXBhdGlibGUKKyAqIHdpdGggYSBzdHJlYW0gb2YgY2hhcmFjdGVycy4gSWYgd2UgZmluZCBpdCwgd2UgYmluZCB0byBpdC4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIHBlb3BsZSBmcm9tIGhwb2ouc291cmNlZm9yZ2UubmV0IG5lZWQgdG8gYmUgYWJsZSB0bworICogYmluZCB0byA3LzEvMyAoTUxDLzEyODQuNCksIHNvIHdlIHByb3ZpZGUgdGhlbSBpb2N0bHMgZm9yIHRoaXMgcHVycG9zZS4KKyAqCisgKiBGYWlsaW5nIDcvMS8yLCB3ZSBsb29rIGZvciA3LzEvMywgZXZlbiB0aG91Z2ggaXQncyBwcm9iYWJseSBub3QKKyAqIHN0cmVhbS1jb21wYXRpYmxlLCBiZWNhdXNlIHRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3VyIG9mIHRoZSBvbGQgY29kZS4KKyAqCisgKiBJZiBub3RoaW5nIGVsc2UsIHdlIGJpbmQgdG8gNy8xLzEgLSB0aGUgdW5pZGlyZWN0aW9uYWwgaW50ZXJmYWNlLgorICovCitzdGF0aWMgaW50IHVzYmxwX3NlbGVjdF9hbHRzKHN0cnVjdCB1c2JscCAqdXNibHApCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmX2FsdDsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmQ7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQsICplcHdyaXRlLCAqZXByZWFkOworCWludCBwLCBpLCBlOworCisJaWZfYWx0ID0gdXNibHAtPmludGY7CisKKwlmb3IgKHAgPSAwOyBwIDwgVVNCTFBfTUFYX1BST1RPQ09MUzsgcCsrKQorCQl1c2JscC0+cHJvdG9jb2xbcF0uYWx0X3NldHRpbmcgPSAtMTsKKworCS8qIEZpbmQgb3V0IHdoYXQgd2UgaGF2ZS4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgaWZfYWx0LT5udW1fYWx0c2V0dGluZzsgaSsrKSB7CisJCWlmZCA9ICZpZl9hbHQtPmFsdHNldHRpbmdbaV07CisKKwkJaWYgKGlmZC0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gNyB8fCBpZmQtPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzICE9IDEpCisJCQljb250aW51ZTsKKworCQlpZiAoaWZkLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbCA8IFVTQkxQX0ZJUlNUX1BST1RPQ09MIHx8CisJCSAgICBpZmQtPmRlc2MuYkludGVyZmFjZVByb3RvY29sID4gVVNCTFBfTEFTVF9QUk9UT0NPTCkKKwkJCWNvbnRpbnVlOworCisJCS8qIExvb2sgZm9yIGJ1bGsgT1VUIGFuZCBJTiBlbmRwb2ludHMuICovCisJCWVwd3JpdGUgPSBlcHJlYWQgPSBOVUxMOworCQlmb3IgKGUgPSAwOyBlIDwgaWZkLT5kZXNjLmJOdW1FbmRwb2ludHM7IGUrKykgeworCQkJZXBkID0gJmlmZC0+ZW5kcG9pbnRbZV0uZGVzYzsKKworCQkJaWYgKChlcGQtPmJtQXR0cmlidXRlcyZVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykhPQorCQkJICAgIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspCisJCQkJY29udGludWU7CisKKwkJCWlmICghKGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykpIHsKKwkJCQlpZiAoIWVwd3JpdGUpCisJCQkJCWVwd3JpdGUgPSBlcGQ7CisKKwkJCX0gZWxzZSB7CisJCQkJaWYgKCFlcHJlYWQpCisJCQkJCWVwcmVhZCA9IGVwZDsKKwkJCX0KKwkJfQorCisJCS8qIElnbm9yZSBidWdneSBoYXJkd2FyZSB3aXRob3V0IHRoZSByaWdodCBlbmRwb2ludHMuICovCisJCWlmICghZXB3cml0ZSB8fCAoaWZkLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbCA+IDEgJiYgIWVwcmVhZCkpCisJCQljb250aW51ZTsKKworCQkvKiBUdXJuIG9mZiByZWFkcyBmb3IgNy8xLzEgKHVuaWRpcmVjdGlvbmFsKSBpbnRlcmZhY2VzCisJCSAqIGFuZCBidWdneSBiaWRpcmVjdGlvbmFsIHByaW50ZXJzLiAqLworCQlpZiAoaWZkLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbCA9PSAxKSB7CisJCQllcHJlYWQgPSBOVUxMOworCQl9IGVsc2UgaWYgKHVzYmxwLT5xdWlya3MgJiBVU0JMUF9RVUlSS19CSURJUikgeworCQkJaW5mbygiRGlzYWJsaW5nIHJlYWRzIGZyb20gcHJvYmxlbSBiaWRpcmVjdGlvbmFsICIKKwkJCQkicHJpbnRlciBvbiB1c2JscCVkIiwgdXNibHAtPm1pbm9yKTsKKwkJCWVwcmVhZCA9IE5VTEw7CisJCX0KKworCQl1c2JscC0+cHJvdG9jb2xbaWZkLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbF0uYWx0X3NldHRpbmcgPQorCQkJCWlmZC0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZzsKKwkJdXNibHAtPnByb3RvY29sW2lmZC0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2xdLmVwd3JpdGUgPSBlcHdyaXRlOworCQl1c2JscC0+cHJvdG9jb2xbaWZkLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbF0uZXByZWFkID0gZXByZWFkOworCX0KKworCS8qIElmIG91ciByZXF1ZXN0ZWQgcHJvdG9jb2wgaXMgc3VwcG9ydGVkLCB0aGVuIHVzZSBpdC4gKi8KKwlpZiAocHJvdG9fYmlhcyA+PSBVU0JMUF9GSVJTVF9QUk9UT0NPTCAmJgorCSAgICBwcm90b19iaWFzIDw9IFVTQkxQX0xBU1RfUFJPVE9DT0wgJiYKKwkgICAgdXNibHAtPnByb3RvY29sW3Byb3RvX2JpYXNdLmFsdF9zZXR0aW5nICE9IC0xKQorCQlyZXR1cm4gcHJvdG9fYmlhczsKKworCS8qIE9yZGVyaW5nIGlzIGltcG9ydGFudCBoZXJlLiAqLworCWlmICh1c2JscC0+cHJvdG9jb2xbMl0uYWx0X3NldHRpbmcgIT0gLTEpCisJCXJldHVybiAyOworCWlmICh1c2JscC0+cHJvdG9jb2xbMV0uYWx0X3NldHRpbmcgIT0gLTEpCisJCXJldHVybiAxOworCWlmICh1c2JscC0+cHJvdG9jb2xbM10uYWx0X3NldHRpbmcgIT0gLTEpCisJCXJldHVybiAzOworCisJLyogSWYgbm90aGluZyBpcyBhdmFpbGFibGUsIHRoZW4gZG9uJ3QgYmluZCB0byB0aGlzIGRldmljZS4gKi8KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgdXNibHBfc2V0X3Byb3RvY29sKHN0cnVjdCB1c2JscCAqdXNibHAsIGludCBwcm90b2NvbCkKK3sKKwlpbnQgciwgYWx0czsKKworCWlmIChwcm90b2NvbCA8IFVTQkxQX0ZJUlNUX1BST1RPQ09MIHx8IHByb3RvY29sID4gVVNCTFBfTEFTVF9QUk9UT0NPTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhbHRzID0gdXNibHAtPnByb3RvY29sW3Byb3RvY29sXS5hbHRfc2V0dGluZzsKKwlpZiAoYWx0cyA8IDApCisJCXJldHVybiAtRUlOVkFMOworCXIgPSB1c2Jfc2V0X2ludGVyZmFjZSh1c2JscC0+ZGV2LCB1c2JscC0+aWZudW0sIGFsdHMpOworCWlmIChyIDwgMCkgeworCQllcnIoImNhbid0IHNldCBkZXNpcmVkIGFsdHNldHRpbmcgJWQgb24gaW50ZXJmYWNlICVkIiwKKwkJCWFsdHMsIHVzYmxwLT5pZm51bSk7CisJCXJldHVybiByOworCX0KKworCXVzYl9maWxsX2J1bGtfdXJiKHVzYmxwLT53cml0ZXVyYiwgdXNibHAtPmRldiwKKwkJdXNiX3NuZGJ1bGtwaXBlKHVzYmxwLT5kZXYsCisJCSAgdXNibHAtPnByb3RvY29sW3Byb3RvY29sXS5lcHdyaXRlLT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJdXNibHAtPndyaXRlYnVmLCAwLAorCQl1c2JscF9idWxrX3dyaXRlLCB1c2JscCk7CisKKwl1c2JscC0+YmlkaXIgPSAodXNibHAtPnByb3RvY29sW3Byb3RvY29sXS5lcHJlYWQgIT0gTlVMTCk7CisJaWYgKHVzYmxwLT5iaWRpcikKKwkJdXNiX2ZpbGxfYnVsa191cmIodXNibHAtPnJlYWR1cmIsIHVzYmxwLT5kZXYsCisJCQl1c2JfcmN2YnVsa3BpcGUodXNibHAtPmRldiwKKwkJCSAgdXNibHAtPnByb3RvY29sW3Byb3RvY29sXS5lcHJlYWQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJdXNibHAtPnJlYWRidWYsIFVTQkxQX0JVRl9TSVpFLAorCQkJdXNibHBfYnVsa19yZWFkLCB1c2JscCk7CisKKwl1c2JscC0+Y3VycmVudF9wcm90b2NvbCA9IHByb3RvY29sOworCWRiZygidXNibHAlZCBzZXQgcHJvdG9jb2wgJWQiLCB1c2JscC0+bWlub3IsIHByb3RvY29sKTsKKwlyZXR1cm4gMDsKK30KKworLyogUmV0cmlldmVzIGFuZCBjYWNoZXMgZGV2aWNlIElEIHN0cmluZy4KKyAqIFJldHVybnMgbGVuZ3RoLCBpbmNsdWRpbmcgbGVuZ3RoIGJ5dGVzIGJ1dCBub3QgbnVsbCB0ZXJtaW5hdG9yLgorICogT24gZXJyb3IsIHJldHVybnMgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZS4gKi8KK3N0YXRpYyBpbnQgdXNibHBfY2FjaGVfZGV2aWNlX2lkX3N0cmluZyhzdHJ1Y3QgdXNibHAgKnVzYmxwKQoreworCWludCBlcnIsIGxlbmd0aDsKKworCWVyciA9IHVzYmxwX2dldF9pZCh1c2JscCwgMCwgdXNibHAtPmRldmljZV9pZF9zdHJpbmcsIFVTQkxQX0RFVklDRV9JRF9TSVpFIC0gMSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGJnKCJ1c2JscCVkOiBlcnJvciA9ICVkIHJlYWRpbmcgSUVFRS0xMjg0IERldmljZSBJRCBzdHJpbmciLAorCQkJdXNibHAtPm1pbm9yLCBlcnIpOworCQl1c2JscC0+ZGV2aWNlX2lkX3N0cmluZ1swXSA9IHVzYmxwLT5kZXZpY2VfaWRfc3RyaW5nWzFdID0gJ1wwJzsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogRmlyc3QgdHdvIGJ5dGVzIGFyZSBsZW5ndGggaW4gYmlnLWVuZGlhbi4KKwkgKiBUaGV5IGNvdW50IHRoZW1zZWx2ZXMsIGFuZCB3ZSBjb3B5IHRoZW0gaW50bworCSAqIHRoZSB1c2VyJ3MgYnVmZmVyLiAqLworCWxlbmd0aCA9IGJlMTZfdG9fY3B1KCooKF9fYmUxNiAqKXVzYmxwLT5kZXZpY2VfaWRfc3RyaW5nKSk7CisJaWYgKGxlbmd0aCA8IDIpCisJCWxlbmd0aCA9IDI7CisJZWxzZSBpZiAobGVuZ3RoID49IFVTQkxQX0RFVklDRV9JRF9TSVpFKQorCQlsZW5ndGggPSBVU0JMUF9ERVZJQ0VfSURfU0laRSAtIDE7CisJdXNibHAtPmRldmljZV9pZF9zdHJpbmdbbGVuZ3RoXSA9ICdcMCc7CisKKwlkYmcoInVzYmxwJWQgRGV2aWNlIElEIHN0cmluZyBbbGVuPSVkXT1cIiVzXCIiLAorCQl1c2JscC0+bWlub3IsIGxlbmd0aCwgJnVzYmxwLT5kZXZpY2VfaWRfc3RyaW5nWzJdKTsKKworCXJldHVybiBsZW5ndGg7Cit9CisKK3N0YXRpYyB2b2lkIHVzYmxwX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYmxwICp1c2JscCA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCisJdXNiX2RlcmVnaXN0ZXJfZGV2KGludGYsICZ1c2JscF9jbGFzcyk7CisKKwlpZiAoIXVzYmxwIHx8ICF1c2JscC0+ZGV2KSB7CisJCWVycigiYm9ndXMgZGlzY29ubmVjdCIpOworCQlCVUcgKCk7CisJfQorCisJZG93biAoJnVzYmxwX3NlbSk7CisJZG93biAoJnVzYmxwLT5zZW0pOworCXVzYmxwLT5wcmVzZW50ID0gMDsKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKKworCXVzYmxwX3VubGlua191cmJzKHVzYmxwKTsKKwl1c2JfYnVmZmVyX2ZyZWUgKHVzYmxwLT5kZXYsIFVTQkxQX0JVRl9TSVpFLAorCQkJdXNibHAtPndyaXRlYnVmLCB1c2JscC0+d3JpdGV1cmItPnRyYW5zZmVyX2RtYSk7CisJdXNiX2J1ZmZlcl9mcmVlICh1c2JscC0+ZGV2LCBVU0JMUF9CVUZfU0laRSwKKwkJCXVzYmxwLT5yZWFkYnVmLCB1c2JscC0+cmVhZHVyYi0+dHJhbnNmZXJfZG1hKTsKKwl1cCAoJnVzYmxwLT5zZW0pOworCisJaWYgKCF1c2JscC0+dXNlZCkKKwkJdXNibHBfY2xlYW51cCAodXNibHApOworCXVwICgmdXNibHBfc2VtKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYmxwX2lkcyBbXSA9IHsKKwl7IFVTQl9ERVZJQ0VfSU5GTyg3LCAxLCAxKSB9LAorCXsgVVNCX0RFVklDRV9JTkZPKDcsIDEsIDIpIH0sCisJeyBVU0JfREVWSUNFX0lORk8oNywgMSwgMykgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyg3LCAxLCAxKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKDcsIDEsIDIpIH0sCisJeyBVU0JfSU5URVJGQUNFX0lORk8oNywgMSwgMykgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCB1c2JscF9pZHMpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNibHBfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJ1c2JscCIsCisJLnByb2JlID0JdXNibHBfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2JscF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CXVzYmxwX2lkcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVzYmxwX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmdXNibHBfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG91dDsKKwlpbmZvKERSSVZFUl9WRVJTSU9OICI6ICIgRFJJVkVSX0RFU0MpOworb3V0OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2JscF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnVzYmxwX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHVzYmxwX2luaXQpOworbW9kdWxlX2V4aXQodXNibHBfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK21vZHVsZV9wYXJhbShwcm90b19iaWFzLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MocHJvdG9fYmlhcywgIkZhdm91cml0ZSBwcm90b2NvbCBudW1iZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2NvcmUvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTlmZjYxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY29yZS9LY29uZmlnCkBAIC0wLDAgKzEsOTkgQEAKKyMKKyMgVVNCIENvcmUgY29uZmlndXJhdGlvbgorIworY29uZmlnIFVTQl9ERUJVRworCWJvb2wgIlVTQiB2ZXJib3NlIGRlYnVnIG1lc3NhZ2VzIgorCWRlcGVuZHMgb24gVVNCCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0aGUgVVNCIGNvcmUgJiBodWIgZHJpdmVycyB0byBwcm9kdWNlIGEgYnVuY2gKKwkgIG9mIGRlYnVnIG1lc3NhZ2VzIHRvIHRoZSBzeXN0ZW0gbG9nLiBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIGhhdmluZyBhCisJICBwcm9ibGVtIHdpdGggVVNCIHN1cHBvcnQgYW5kIHdhbnQgdG8gc2VlIG1vcmUgb2Ygd2hhdCBpcyBnb2luZyBvbi4KKworY29tbWVudCAiTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucyIKKwlkZXBlbmRzIG9uIFVTQgorCitjb25maWcgVVNCX0RFVklDRUZTCisJYm9vbCAiVVNCIGRldmljZSBmaWxlc3lzdGVtIgorCWRlcGVuZHMgb24gVVNCCisJLS0taGVscC0tLQorCSAgSWYgeW91IHNheSBZIGhlcmUgKGFuZCB0byAiL3Byb2MgZmlsZSBzeXN0ZW0gc3VwcG9ydCIgaW4gdGhlICJGaWxlCisJICBzeXN0ZW1zIiBzZWN0aW9uLCBhYm92ZSksIHlvdSB3aWxsIGdldCBhIGZpbGUgL3Byb2MvYnVzL3VzYi9kZXZpY2VzCisJICB3aGljaCBsaXN0cyB0aGUgZGV2aWNlcyBjdXJyZW50bHkgY29ubmVjdGVkIHRvIHlvdXIgVVNCIGJ1cyBvcgorCSAgYnVzc2VzLCBhbmQgZm9yIGV2ZXJ5IGNvbm5lY3RlZCBkZXZpY2UgYSBmaWxlIG5hbWVkCisJICAiL3Byb2MvYnVzL3VzYi94eHgveXl5Iiwgd2hlcmUgeHh4IGlzIHRoZSBidXMgbnVtYmVyIGFuZCB5eXkgdGhlCisJICBkZXZpY2UgbnVtYmVyOyB0aGUgbGF0dGVyIGZpbGVzIGNhbiBiZSB1c2VkIGJ5IHVzZXIgc3BhY2UgcHJvZ3JhbXMKKwkgIHRvIHRhbGsgZGlyZWN0bHkgdG8gdGhlIGRldmljZS4gVGhlc2UgZmlsZXMgYXJlICJ2aXJ0dWFsIiwgbWVhbmluZworCSAgdGhleSBhcmUgZ2VuZXJhdGVkIG9uIHRoZSBmbHkgYW5kIG5vdCBzdG9yZWQgb24gdGhlIGhhcmQgZHJpdmUuCisKKwkgIFlvdSBtYXkgbmVlZCB0byBtb3VudCB0aGUgdXNiZnMgZmlsZSBzeXN0ZW0gdG8gc2VlIHRoZSBmaWxlcywgdXNlCisJICBtb3VudCAtdCB1c2JmcyBub25lIC9wcm9jL2J1cy91c2IKKworCSAgRm9yIHRoZSBmb3JtYXQgb2YgdGhlIHZhcmlvdXMgL3Byb2MvYnVzL3VzYi8gZmlsZXMsIHBsZWFzZSByZWFkCisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9wcm9jX3VzYl9pbmZvLnR4dD4uCisKKwkgIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBjb2RlIGlzIGNvbXBsZXRlbHkgdW5yZWxhdGVkIHRvIGRldmZzLCB0aGUKKwkgICIvZGV2IGZpbGUgc3lzdGVtIHN1cHBvcnQiLgorCisJICBNb3N0IHVzZXJzIHdhbnQgdG8gc2F5IFkgaGVyZS4KKworY29uZmlnIFVTQl9CQU5EV0lEVEgKKwlib29sICJFbmZvcmNlIFVTQiBiYW5kd2lkdGggYWxsb2NhdGlvbiAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQiAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIFVTQiBzdWJzeXN0ZW0gZW5mb3JjZXMgVVNCIGJhbmR3aWR0aAorCSAgYWxsb2NhdGlvbiBhbmQgd2lsbCBwcmV2ZW50IHNvbWUgZGV2aWNlIG9wZW5zIGZyb20gc3VjY2VlZGluZworCSAgaWYgdGhleSB3b3VsZCBjYXVzZSBVU0IgYmFuZHdpZHRoIHVzYWdlIHRvIGdvIGFib3ZlIDkwJSBvZgorCSAgdGhlIGJ1cyBiYW5kd2lkdGguCisKKwkgIElmIHlvdSBzYXkgTiBoZXJlLCB0aGVzZSBjb25kaXRpb25zIHdpbGwgY2F1c2Ugd2FybmluZyBtZXNzYWdlcworCSAgYWJvdXQgVVNCIGJhbmR3aWR0aCB1c2FnZSB0byBiZSBsb2dnZWQgYW5kIHNvbWUgZGV2aWNlcyBvcgorCSAgZHJpdmVycyBtYXkgbm90IHdvcmsgY29ycmVjdGx5LgorCitjb25maWcgVVNCX0RZTkFNSUNfTUlOT1JTCisJYm9vbCAiRHluYW1pYyBVU0IgbWlub3IgYWxsb2NhdGlvbiAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQiAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIFVTQiBzdWJzeXN0ZW0gd2lsbCB1c2UgZHluYW1pYyBtaW5vcgorCSAgYWxsb2NhdGlvbiBmb3IgYW55IGRldmljZSB0aGF0IHVzZXMgdGhlIFVTQiBtYWpvciBudW1iZXIuCisJICBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiBoYXZlIG1vcmUgdGhhbiAxNiBvZiBhIHNpbmdsZSB0eXBlCisJICBvZiBkZXZpY2UgKGxpa2UgVVNCIHByaW50ZXJzKS4KKworCSAgSWYgeW91IGFyZSB1bnN1cmUgYWJvdXQgdGhpcywgc2F5IE4gaGVyZS4KKworY29uZmlnIFVTQl9TVVNQRU5ECisJYm9vbCAiVVNCIHN1c3BlbmQvcmVzdW1lIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCICYmIFBNICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3UgY2FuIHVzZSBkcml2ZXIgY2FsbHMgb3IgdGhlIHN5c2ZzCisJICAicG93ZXIvc3RhdGUiIGZpbGUgdG8gc3VzcGVuZCBvciByZXN1bWUgaW5kaXZpZHVhbCBVU0IKKwkgIHBlcmlwaGVyYWxzLiAgVGhlcmUgYXJlIG1hbnkgcmVsYXRlZCBmZWF0dXJlcywgc3VjaCBhcworCSAgcmVtb3RlIHdha2V1cCBhbmQgZHJpdmVyLXNwZWNpZmljIHN1c3BlbmQgcHJvY2Vzc2luZywgdGhhdAorCSAgbWF5IG5vdCB5ZXQgd29yayBhcyBleHBlY3RlZC4KKworCSAgSWYgeW91IGFyZSB1bnN1cmUgYWJvdXQgdGhpcywgc2F5IE4gaGVyZS4KKworCitjb25maWcgVVNCX09URworCWJvb2wKKwlkZXBlbmRzIG9uIFVTQiAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgVVNCX1NVU1BFTkQKKwlkZWZhdWx0IG4KKworCitjb25maWcgVVNCX09UR19XSElURUxJU1QKKwlib29sICJSZWx5IG9uIE9URyBUYXJnZXRlZCBQZXJpcGhlcmFscyBMaXN0IgorCWRlcGVuZHMgb24gVVNCX09URworCWRlZmF1bHQgeQorCWhlbHAKKwkgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGUgIm90Z193aGl0ZWxpc3QuaCIgZmlsZSB3aWxsIGJlIHVzZWQgYXMgYQorCSAgcHJvZHVjdCB3aGl0ZWxpc3QsIHNvIFVTQiBwZXJpcGhlcmFscyBub3QgbGlzdGVkIHRoZXJlIHdpbGwgYmUKKwkgIHJlamVjdGVkIGR1cmluZyBlbnVtZXJhdGlvbi4gIFRoaXMgYmVoYXZpb3IgaXMgcmVxdWlyZWQgYnkgdGhlCisJICBVU0IgT1RHIHNwZWNpZmljYXRpb24gZm9yIGFsbCBkZXZpY2VzIG5vdCBvbiB5b3VyIHByb2R1Y3QncworCSAgIlRhcmdldGVkIFBlcmlwaGVyYWxzIExpc3QiLgorCisJICBPdGhlcndpc2UsIHBlcmlwaGVyYWxzIG5vdCBsaXN0ZWQgdGhlcmUgd2lsbCBvbmx5IGdlbmVyYXRlIGEKKwkgIHdhcm5pbmcgYW5kIGVudW1lcmF0aW9uIHdpbGwgY29udGludWUuICBUaGF0J3MgbW9yZSBsaWtlIHdoYXQKKwkgIG5vcm1hbCBMaW51eC1VU0IgaG9zdHMgZG8gKG90aGVyIHRoYW4gdGhlIHdhcm5pbmcpLCBhbmQgaXMKKwkgIGNvbnZlbmllbnQgZm9yIG1hbnkgc3RhZ2VzIG9mIHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4YzM3NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGUKQEAgLTAsMCArMSwxNiBAQAorIworIyBNYWtlZmlsZSBmb3IgVVNCIENvcmUgZmlsZXMgYW5kIGZpbGVzeXN0ZW0KKyMKKwordXNiY29yZS1vYmpzCTo9IHVzYi5vIGh1Yi5vIGhjZC5vIHVyYi5vIG1lc3NhZ2UubyBcCisJCQljb25maWcubyBmaWxlLm8gYnVmZmVyLm8gc3lzZnMubworCitpZmVxICgkKENPTkZJR19QQ0kpLHkpCisJdXNiY29yZS1vYmpzCSs9IGhjZC1wY2kubworZW5kaWYKKworaWZlcSAoJChDT05GSUdfVVNCX0RFVklDRUZTKSx5KQorCXVzYmNvcmUtb2JqcwkrPSBkZXZpby5vIGlub2RlLm8gZGV2aWNlcy5vCitlbmRpZgorCitvYmotJChDT05GSUdfVVNCKQkrPSB1c2Jjb3JlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvYnVmZmVyLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2J1ZmZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ODI3ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL2J1ZmZlci5jCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogRE1BIG1lbW9yeSBtYW5hZ2VtZW50IGZvciBmcmFtZXdvcmsgbGV2ZWwgSENEIGNvZGUgKGhjX2RyaXZlcikKKyAqCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIHBsdWdzIGluIHRocm91Z2ggZ2VuZXJpYyAidXNiX2J1cyIgbGV2ZWwgbWV0aG9kcywKKyAqIGFuZCBzaG91bGQgd29yayB3aXRoIGFsbCBVU0IgY29udHJvbGxlcnMsIHJlZ2FyZGxlcyBvZiBidXMgdHlwZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CisKKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKwkjZGVmaW5lIERFQlVHCisjZWxzZQorCSN1bmRlZiBERUJVRworI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJoY2QuaCIKKworCisvKgorICogRE1BLUNvaGVyZW50IEJ1ZmZlcnMKKyAqLworCisvKiBGSVhNRSB0dW5lIHRoZXNlIGJhc2VkIG9uIHBvb2wgc3RhdGlzdGljcyAuLi4gKi8KK3N0YXRpYyBjb25zdCBzaXplX3QJcG9vbF9tYXggW0hDRF9CVUZGRVJfUE9PTFNdID0geworCS8qIHBsYXRmb3JtcyB3aXRob3V0IGRtYS1mcmllbmRseSBjYWNoZXMgbWlnaHQgbmVlZCB0bworCSAqIHByZXZlbnQgY2FjaGVsaW5lIHNoYXJpbmcuLi4KKwkgKi8KKwkzMiwKKwkxMjgsCisJNTEyLAorCVBBR0VfU0laRSAvIDIKKwkvKiBiaWdnZXIgLS0+IGFsbG9jYXRlIHBhZ2VzICovCit9OworCisKKy8qIFNFVFVQIHByaW1pdGl2ZXMgKi8KKworLyoqCisgKiBoY2RfYnVmZmVyX2NyZWF0ZSAtIGluaXRpYWxpemUgYnVmZmVyIHBvb2xzCisgKiBAaGNkOiB0aGUgYnVzIHdob3NlIGJ1ZmZlciBwb29scyBhcmUgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIENhbGwgdGhpcyBhcyBwYXJ0IG9mIGluaXRpYWxpemluZyBhIGhvc3QgY29udHJvbGxlciB0aGF0IHVzZXMgdGhlIGRtYQorICogbWVtb3J5IGFsbG9jYXRvcnMuICBJdCBpbml0aWFsaXplcyBzb21lIHBvb2xzIG9mIGRtYS1jb2hlcmVudCBtZW1vcnkgdGhhdAorICogd2lsbCBiZSBzaGFyZWQgYnkgYWxsIGRyaXZlcnMgdXNpbmcgdGhhdCBjb250cm9sbGVyLCBvciByZXR1cm5zIGEgbmVnYXRpdmUKKyAqIGVycm5vIHZhbHVlIG9uIGVycm9yLgorICoKKyAqIENhbGwgaGNkX2J1ZmZlcl9kZXN0cm95KCkgdG8gY2xlYW4gdXAgYWZ0ZXIgdXNpbmcgdGhvc2UgcG9vbHMuCisgKi8KK2ludCBoY2RfYnVmZmVyX2NyZWF0ZSAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwljaGFyCQluYW1lIFsxNl07CisJaW50IAkJaSwgc2l6ZTsKKworCWZvciAoaSA9IDA7IGkgPCBIQ0RfQlVGRkVSX1BPT0xTOyBpKyspIHsgCisJCWlmICghKHNpemUgPSBwb29sX21heCBbaV0pKQorCQkJY29udGludWU7CisJCXNucHJpbnRmIChuYW1lLCBzaXplb2YgbmFtZSwgImJ1ZmZlci0lZCIsIHNpemUpOworCQloY2QtPnBvb2wgW2ldID0gZG1hX3Bvb2xfY3JlYXRlIChuYW1lLCBoY2QtPnNlbGYuY29udHJvbGxlciwKKwkJCQlzaXplLCBzaXplLCAwKTsKKwkJaWYgKCFoY2QtPnBvb2wgW2ldKSB7CisJCQloY2RfYnVmZmVyX2Rlc3Ryb3kgKGhjZCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIGhjZF9idWZmZXJfZGVzdHJveSAtIGRlYWxsb2NhdGUgYnVmZmVyIHBvb2xzCisgKiBAaGNkOiB0aGUgYnVzIHdob3NlIGJ1ZmZlciBwb29scyBhcmUgdG8gYmUgZGVzdHJveWVkCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBUaGlzIGZyZWVzIHRoZSBidWZmZXIgcG9vbHMgY3JlYXRlZCBieSBoY2RfYnVmZmVyX2NyZWF0ZSgpLgorICovCit2b2lkIGhjZF9idWZmZXJfZGVzdHJveSAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlpbnQJCWk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSENEX0JVRkZFUl9QT09MUzsgaSsrKSB7IAorCQlzdHJ1Y3QgZG1hX3Bvb2wJCSpwb29sID0gaGNkLT5wb29sIFtpXTsKKwkJaWYgKHBvb2wpIHsKKwkJCWRtYV9wb29sX2Rlc3Ryb3kgKHBvb2wpOworCQkJaGNkLT5wb29sW2ldID0gTlVMTDsKKwkJfQorCX0KK30KKworCisvKiBzb21ldGltZXMgYWxsb2MvZnJlZSBjb3VsZCB1c2Uga21hbGxvYyB3aXRoIFNMQUJfRE1BLCBmb3IKKyAqIGJldHRlciBzaGFyaW5nIGFuZCB0byBsZXZlcmFnZSBtbS9zbGFiLmMgaW50ZWxsaWdlbmNlLgorICovCisKK3ZvaWQgKmhjZF9idWZmZXJfYWxsb2MgKAorCXN0cnVjdCB1c2JfYnVzIAkJKmJ1cywKKwlzaXplX3QJCQlzaXplLAorCWludAkJCW1lbV9mbGFncywKKwlkbWFfYWRkcl90CQkqZG1hCispCit7CisJc3RydWN0IHVzYl9oY2QJCSpoY2QgPSBidXMtPmhjcHJpdjsKKwlpbnQgCQkJaTsKKworCS8qIHNvbWUgVVNCIGhvc3RzIGp1c3QgdXNlIFBJTyAqLworCWlmICghYnVzLT5jb250cm9sbGVyLT5kbWFfbWFzaykgeworCQkqZG1hID0gfihkbWFfYWRkcl90KSAwOworCQlyZXR1cm4ga21hbGxvYyAoc2l6ZSwgbWVtX2ZsYWdzKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgSENEX0JVRkZFUl9QT09MUzsgaSsrKSB7CisJCWlmIChzaXplIDw9IHBvb2xfbWF4IFtpXSkKKwkJCXJldHVybiBkbWFfcG9vbF9hbGxvYyAoaGNkLT5wb29sIFtpXSwgbWVtX2ZsYWdzLCBkbWEpOworCX0KKwlyZXR1cm4gZG1hX2FsbG9jX2NvaGVyZW50IChoY2QtPnNlbGYuY29udHJvbGxlciwgc2l6ZSwgZG1hLCAwKTsKK30KKwordm9pZCBoY2RfYnVmZmVyX2ZyZWUgKAorCXN0cnVjdCB1c2JfYnVzIAkJKmJ1cywKKwlzaXplX3QJCQlzaXplLAorCXZvaWQgCQkJKmFkZHIsCisJZG1hX2FkZHJfdAkJZG1hCispCit7CisJc3RydWN0IHVzYl9oY2QJCSpoY2QgPSBidXMtPmhjcHJpdjsKKwlpbnQgCQkJaTsKKworCWlmICghYWRkcikKKwkJcmV0dXJuOworCisJaWYgKCFidXMtPmNvbnRyb2xsZXItPmRtYV9tYXNrKSB7CisJCWtmcmVlIChhZGRyKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBIQ0RfQlVGRkVSX1BPT0xTOyBpKyspIHsKKwkJaWYgKHNpemUgPD0gcG9vbF9tYXggW2ldKSB7CisJCQlkbWFfcG9vbF9mcmVlIChoY2QtPnBvb2wgW2ldLCBhZGRyLCBkbWEpOworCQkJcmV0dXJuOworCQl9CisJfQorCWRtYV9mcmVlX2NvaGVyZW50IChoY2QtPnNlbGYuY29udHJvbGxlciwgc2l6ZSwgYWRkciwgZG1hKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvY29uZmlnLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMDkyYmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL2NvbmZpZy5jCkBAIC0wLDAgKzEsNTM0IEBACisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCisjZGVmaW5lIERFQlVHCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisKKyNkZWZpbmUgVVNCX01BWEFMVFNFVFRJTkcJCTEyOAkvKiBIYXJkIGxpbWl0ICovCisjZGVmaW5lIFVTQl9NQVhFTkRQT0lOVFMJCTMwCS8qIEhhcmQgbGltaXQgKi8KKworI2RlZmluZSBVU0JfTUFYQ09ORklHCQkJOAkvKiBBcmJpdHJhcnkgbGltaXQgKi8KKworCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnBsdXJhbChpbnQgbikKK3sKKwlyZXR1cm4gKG4gPT0gMSA/ICIiIDogInMiKTsKK30KKworc3RhdGljIGludCBmaW5kX25leHRfZGVzY3JpcHRvcih1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBzaXplLAorICAgIGludCBkdDEsIGludCBkdDIsIGludCAqbnVtX3NraXBwZWQpCit7CisJc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaDsKKwlpbnQgbiA9IDA7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyMCA9IGJ1ZmZlcjsKKworCS8qIEZpbmQgdGhlIG5leHQgZGVzY3JpcHRvciBvZiB0eXBlIGR0MSBvciBkdDIgKi8KKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJaCA9IChzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopIGJ1ZmZlcjsKKwkJaWYgKGgtPmJEZXNjcmlwdG9yVHlwZSA9PSBkdDEgfHwgaC0+YkRlc2NyaXB0b3JUeXBlID09IGR0MikKKwkJCWJyZWFrOworCQlidWZmZXIgKz0gaC0+Ykxlbmd0aDsKKwkJc2l6ZSAtPSBoLT5iTGVuZ3RoOworCQkrK247CisJfQorCisJLyogU3RvcmUgdGhlIG51bWJlciBvZiBkZXNjcmlwdG9ycyBza2lwcGVkIGFuZCByZXR1cm4gdGhlCisJICogbnVtYmVyIG9mIGJ5dGVzIHNraXBwZWQgKi8KKwlpZiAobnVtX3NraXBwZWQpCisJCSpudW1fc2tpcHBlZCA9IG47CisJcmV0dXJuIGJ1ZmZlciAtIGJ1ZmZlcjA7Cit9CisKK3N0YXRpYyBpbnQgdXNiX3BhcnNlX2VuZHBvaW50KHN0cnVjdCBkZXZpY2UgKmRkZXYsIGludCBjZmdubywgaW50IGludW0sCisgICAgaW50IGFzbnVtLCBzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZnAsIGludCBudW1fZXAsCisgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBjaGFyICpidWZmZXIwID0gYnVmZmVyOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZDsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVuZHBvaW50OworCWludCBuLCBpOworCisJZCA9IChzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKikgYnVmZmVyOworCWJ1ZmZlciArPSBkLT5iTGVuZ3RoOworCXNpemUgLT0gZC0+Ykxlbmd0aDsKKworCWlmIChkLT5iTGVuZ3RoID49IFVTQl9EVF9FTkRQT0lOVF9BVURJT19TSVpFKQorCQluID0gVVNCX0RUX0VORFBPSU5UX0FVRElPX1NJWkU7CisJZWxzZSBpZiAoZC0+Ykxlbmd0aCA+PSBVU0JfRFRfRU5EUE9JTlRfU0laRSkKKwkJbiA9IFVTQl9EVF9FTkRQT0lOVF9TSVpFOworCWVsc2UgeworCQlkZXZfd2FybihkZGV2LCAiY29uZmlnICVkIGludGVyZmFjZSAlZCBhbHRzZXR0aW5nICVkIGhhcyBhbiAiCisJCSAgICAiaW52YWxpZCBlbmRwb2ludCBkZXNjcmlwdG9yIG9mIGxlbmd0aCAlZCwgc2tpcHBpbmdcbiIsCisJCSAgICBjZmdubywgaW51bSwgYXNudW0sIGQtPmJMZW5ndGgpOworCQlnb3RvIHNraXBfdG9fbmV4dF9lbmRwb2ludF9vcl9pbnRlcmZhY2VfZGVzY3JpcHRvcjsKKwl9CisKKwlpID0gZC0+YkVuZHBvaW50QWRkcmVzcyAmIH5VU0JfRU5EUE9JTlRfRElSX01BU0s7CisJaWYgKGkgPj0gMTYgfHwgaSA9PSAwKSB7CisJCWRldl93YXJuKGRkZXYsICJjb25maWcgJWQgaW50ZXJmYWNlICVkIGFsdHNldHRpbmcgJWQgaGFzIGFuICIKKwkJICAgICJpbnZhbGlkIGVuZHBvaW50IHdpdGggYWRkcmVzcyAweCVYLCBza2lwcGluZ1xuIiwKKwkJICAgIGNmZ25vLCBpbnVtLCBhc251bSwgZC0+YkVuZHBvaW50QWRkcmVzcyk7CisJCWdvdG8gc2tpcF90b19uZXh0X2VuZHBvaW50X29yX2ludGVyZmFjZV9kZXNjcmlwdG9yOworCX0KKworCS8qIE9ubHkgc3RvcmUgYXMgbWFueSBlbmRwb2ludHMgYXMgd2UgaGF2ZSByb29tIGZvciAqLworCWlmIChpZnAtPmRlc2MuYk51bUVuZHBvaW50cyA+PSBudW1fZXApCisJCWdvdG8gc2tpcF90b19uZXh0X2VuZHBvaW50X29yX2ludGVyZmFjZV9kZXNjcmlwdG9yOworCisJZW5kcG9pbnQgPSAmaWZwLT5lbmRwb2ludFtpZnAtPmRlc2MuYk51bUVuZHBvaW50c107CisJKytpZnAtPmRlc2MuYk51bUVuZHBvaW50czsKKworCW1lbWNweSgmZW5kcG9pbnQtPmRlc2MsIGQsIG4pOworCUlOSVRfTElTVF9IRUFEKCZlbmRwb2ludC0+dXJiX2xpc3QpOworCisJLyogU2tpcCBvdmVyIGFueSBDbGFzcyBTcGVjaWZpYyBvciBWZW5kb3IgU3BlY2lmaWMgZGVzY3JpcHRvcnM7CisJICogZmluZCB0aGUgbmV4dCBlbmRwb2ludCBvciBpbnRlcmZhY2UgZGVzY3JpcHRvciAqLworCWVuZHBvaW50LT5leHRyYSA9IGJ1ZmZlcjsKKwlpID0gZmluZF9uZXh0X2Rlc2NyaXB0b3IoYnVmZmVyLCBzaXplLCBVU0JfRFRfRU5EUE9JTlQsCisJICAgIFVTQl9EVF9JTlRFUkZBQ0UsICZuKTsKKwllbmRwb2ludC0+ZXh0cmFsZW4gPSBpOworCWlmIChuID4gMCkKKwkJZGV2X2RiZyhkZGV2LCAic2tpcHBlZCAlZCBkZXNjcmlwdG9yJXMgYWZ0ZXIgJXNcbiIsCisJCSAgICBuLCBwbHVyYWwobiksICJlbmRwb2ludCIpOworCXJldHVybiBidWZmZXIgLSBidWZmZXIwICsgaTsKKworc2tpcF90b19uZXh0X2VuZHBvaW50X29yX2ludGVyZmFjZV9kZXNjcmlwdG9yOgorCWkgPSBmaW5kX25leHRfZGVzY3JpcHRvcihidWZmZXIsIHNpemUsIFVTQl9EVF9FTkRQT0lOVCwKKwkgICAgVVNCX0RUX0lOVEVSRkFDRSwgTlVMTCk7CisJcmV0dXJuIGJ1ZmZlciAtIGJ1ZmZlcjAgKyBpOworfQorCit2b2lkIHVzYl9yZWxlYXNlX2ludGVyZmFjZV9jYWNoZShzdHJ1Y3Qga3JlZiAqcmVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2NhY2hlICppbnRmYyA9IHJlZl90b191c2JfaW50ZXJmYWNlX2NhY2hlKHJlZik7CisJaW50IGo7CisKKwlmb3IgKGogPSAwOyBqIDwgaW50ZmMtPm51bV9hbHRzZXR0aW5nOyBqKyspCisJCWtmcmVlKGludGZjLT5hbHRzZXR0aW5nW2pdLmVuZHBvaW50KTsKKwlrZnJlZShpbnRmYyk7Cit9CisKK3N0YXRpYyBpbnQgdXNiX3BhcnNlX2ludGVyZmFjZShzdHJ1Y3QgZGV2aWNlICpkZGV2LCBpbnQgY2Znbm8sCisgICAgc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBzaXplLAorICAgIHU4IGludW1zW10sIHU4IG5hbHRzW10pCit7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyMCA9IGJ1ZmZlcjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yCSpkOworCWludCBpbnVtLCBhc251bTsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9jYWNoZSAqaW50ZmM7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0OworCWludCBpLCBuOworCWludCBsZW4sIHJldHZhbDsKKwlpbnQgbnVtX2VwLCBudW1fZXBfb3JpZzsKKworCWQgPSAoc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqKSBidWZmZXI7CisJYnVmZmVyICs9IGQtPmJMZW5ndGg7CisJc2l6ZSAtPSBkLT5iTGVuZ3RoOworCisJaWYgKGQtPmJMZW5ndGggPCBVU0JfRFRfSU5URVJGQUNFX1NJWkUpCisJCWdvdG8gc2tpcF90b19uZXh0X2ludGVyZmFjZV9kZXNjcmlwdG9yOworCisJLyogV2hpY2ggaW50ZXJmYWNlIGVudHJ5IGlzIHRoaXM/ICovCisJaW50ZmMgPSBOVUxMOworCWludW0gPSBkLT5iSW50ZXJmYWNlTnVtYmVyOworCWZvciAoaSA9IDA7IGkgPCBjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7ICsraSkgeworCQlpZiAoaW51bXNbaV0gPT0gaW51bSkgeworCQkJaW50ZmMgPSBjb25maWctPmludGZfY2FjaGVbaV07CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoIWludGZjIHx8IGludGZjLT5udW1fYWx0c2V0dGluZyA+PSBuYWx0c1tpXSkKKwkJZ290byBza2lwX3RvX25leHRfaW50ZXJmYWNlX2Rlc2NyaXB0b3I7CisKKwkvKiBDaGVjayBmb3IgZHVwbGljYXRlIGFsdHNldHRpbmcgZW50cmllcyAqLworCWFzbnVtID0gZC0+YkFsdGVybmF0ZVNldHRpbmc7CisJZm9yICgoaSA9IDAsIGFsdCA9ICZpbnRmYy0+YWx0c2V0dGluZ1swXSk7CisJICAgICAgaSA8IGludGZjLT5udW1fYWx0c2V0dGluZzsKKwkgICAgICgrK2ksICsrYWx0KSkgeworCQlpZiAoYWx0LT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nID09IGFzbnVtKSB7CisJCQlkZXZfd2FybihkZGV2LCAiRHVwbGljYXRlIGRlc2NyaXB0b3IgZm9yIGNvbmZpZyAlZCAiCisJCQkgICAgImludGVyZmFjZSAlZCBhbHRzZXR0aW5nICVkLCBza2lwcGluZ1xuIiwKKwkJCSAgICBjZmdubywgaW51bSwgYXNudW0pOworCQkJZ290byBza2lwX3RvX25leHRfaW50ZXJmYWNlX2Rlc2NyaXB0b3I7CisJCX0KKwl9CisKKwkrK2ludGZjLT5udW1fYWx0c2V0dGluZzsKKwltZW1jcHkoJmFsdC0+ZGVzYywgZCwgVVNCX0RUX0lOVEVSRkFDRV9TSVpFKTsKKworCS8qIFNraXAgb3ZlciBhbnkgQ2xhc3MgU3BlY2lmaWMgb3IgVmVuZG9yIFNwZWNpZmljIGRlc2NyaXB0b3JzOworCSAqIGZpbmQgdGhlIGZpcnN0IGVuZHBvaW50IG9yIGludGVyZmFjZSBkZXNjcmlwdG9yICovCisJYWx0LT5leHRyYSA9IGJ1ZmZlcjsKKwlpID0gZmluZF9uZXh0X2Rlc2NyaXB0b3IoYnVmZmVyLCBzaXplLCBVU0JfRFRfRU5EUE9JTlQsCisJICAgIFVTQl9EVF9JTlRFUkZBQ0UsICZuKTsKKwlhbHQtPmV4dHJhbGVuID0gaTsKKwlpZiAobiA+IDApCisJCWRldl9kYmcoZGRldiwgInNraXBwZWQgJWQgZGVzY3JpcHRvciVzIGFmdGVyICVzXG4iLAorCQkgICAgbiwgcGx1cmFsKG4pLCAiaW50ZXJmYWNlIik7CisJYnVmZmVyICs9IGk7CisJc2l6ZSAtPSBpOworCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSByaWdodCg/KSBudW1iZXIgb2YgZW5kcG9pbnRzICovCisJbnVtX2VwID0gbnVtX2VwX29yaWcgPSBhbHQtPmRlc2MuYk51bUVuZHBvaW50czsKKwlhbHQtPmRlc2MuYk51bUVuZHBvaW50cyA9IDA7CQkvLyBVc2UgYXMgYSBjb3VudGVyCisJaWYgKG51bV9lcCA+IFVTQl9NQVhFTkRQT0lOVFMpIHsKKwkJZGV2X3dhcm4oZGRldiwgInRvbyBtYW55IGVuZHBvaW50cyBmb3IgY29uZmlnICVkIGludGVyZmFjZSAlZCAiCisJCSAgICAiYWx0c2V0dGluZyAlZDogJWQsIHVzaW5nIG1heGltdW0gYWxsb3dlZDogJWRcbiIsCisJCSAgICBjZmdubywgaW51bSwgYXNudW0sIG51bV9lcCwgVVNCX01BWEVORFBPSU5UUyk7CisJCW51bV9lcCA9IFVTQl9NQVhFTkRQT0lOVFM7CisJfQorCisJbGVuID0gc2l6ZW9mKHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCkgKiBudW1fZXA7CisJYWx0LT5lbmRwb2ludCA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFsdC0+ZW5kcG9pbnQpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChhbHQtPmVuZHBvaW50LCAwLCBsZW4pOworCisJLyogUGFyc2UgYWxsIHRoZSBlbmRwb2ludCBkZXNjcmlwdG9ycyAqLworCW4gPSAwOworCXdoaWxlIChzaXplID4gMCkgeworCQlpZiAoKChzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopIGJ1ZmZlciktPmJEZXNjcmlwdG9yVHlwZQorCQkgICAgID09IFVTQl9EVF9JTlRFUkZBQ0UpCisJCQlicmVhazsKKwkJcmV0dmFsID0gdXNiX3BhcnNlX2VuZHBvaW50KGRkZXYsIGNmZ25vLCBpbnVtLCBhc251bSwgYWx0LAorCQkgICAgbnVtX2VwLCBidWZmZXIsIHNpemUpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCXJldHVybiByZXR2YWw7CisJCSsrbjsKKworCQlidWZmZXIgKz0gcmV0dmFsOworCQlzaXplIC09IHJldHZhbDsKKwl9CisKKwlpZiAobiAhPSBudW1fZXBfb3JpZykKKwkJZGV2X3dhcm4oZGRldiwgImNvbmZpZyAlZCBpbnRlcmZhY2UgJWQgYWx0c2V0dGluZyAlZCBoYXMgJWQgIgorCQkgICAgImVuZHBvaW50IGRlc2NyaXB0b3IlcywgZGlmZmVyZW50IGZyb20gdGhlIGludGVyZmFjZSAiCisJCSAgICAiZGVzY3JpcHRvcidzIHZhbHVlOiAlZFxuIiwKKwkJICAgIGNmZ25vLCBpbnVtLCBhc251bSwgbiwgcGx1cmFsKG4pLCBudW1fZXBfb3JpZyk7CisJcmV0dXJuIGJ1ZmZlciAtIGJ1ZmZlcjA7CisKK3NraXBfdG9fbmV4dF9pbnRlcmZhY2VfZGVzY3JpcHRvcjoKKwlpID0gZmluZF9uZXh0X2Rlc2NyaXB0b3IoYnVmZmVyLCBzaXplLCBVU0JfRFRfSU5URVJGQUNFLAorCSAgICBVU0JfRFRfSU5URVJGQUNFLCBOVUxMKTsKKwlyZXR1cm4gYnVmZmVyIC0gYnVmZmVyMCArIGk7Cit9CisKK3N0YXRpYyBpbnQgdXNiX3BhcnNlX2NvbmZpZ3VyYXRpb24oc3RydWN0IGRldmljZSAqZGRldiwgaW50IGNmZ2lkeCwKKyAgICBzdHJ1Y3QgdXNiX2hvc3RfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IHNpemUpCit7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyMCA9IGJ1ZmZlcjsKKwlpbnQgY2Znbm87CisJaW50IG5pbnRmLCBuaW50Zl9vcmlnOworCWludCBpLCBqLCBuOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2NhY2hlICppbnRmYzsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXIyOworCWludCBzaXplMjsKKwlzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoZWFkZXI7CisJaW50IGxlbiwgcmV0dmFsOworCXU4IGludW1zW1VTQl9NQVhJTlRFUkZBQ0VTXSwgbmFsdHNbVVNCX01BWElOVEVSRkFDRVNdOworCisJbWVtY3B5KCZjb25maWctPmRlc2MsIGJ1ZmZlciwgVVNCX0RUX0NPTkZJR19TSVpFKTsKKwlpZiAoY29uZmlnLT5kZXNjLmJEZXNjcmlwdG9yVHlwZSAhPSBVU0JfRFRfQ09ORklHIHx8CisJICAgIGNvbmZpZy0+ZGVzYy5iTGVuZ3RoIDwgVVNCX0RUX0NPTkZJR19TSVpFKSB7CisJCWRldl9lcnIoZGRldiwgImludmFsaWQgZGVzY3JpcHRvciBmb3IgY29uZmlnIGluZGV4ICVkOiAiCisJCSAgICAidHlwZSA9IDB4JVgsIGxlbmd0aCA9ICVkXG4iLCBjZmdpZHgsCisJCSAgICBjb25maWctPmRlc2MuYkRlc2NyaXB0b3JUeXBlLCBjb25maWctPmRlc2MuYkxlbmd0aCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwljZmdubyA9IGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlOworCisJYnVmZmVyICs9IGNvbmZpZy0+ZGVzYy5iTGVuZ3RoOworCXNpemUgLT0gY29uZmlnLT5kZXNjLmJMZW5ndGg7CisKKwluaW50ZiA9IG5pbnRmX29yaWcgPSBjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7CisJaWYgKG5pbnRmID4gVVNCX01BWElOVEVSRkFDRVMpIHsKKwkJZGV2X3dhcm4oZGRldiwgImNvbmZpZyAlZCBoYXMgdG9vIG1hbnkgaW50ZXJmYWNlczogJWQsICIKKwkJICAgICJ1c2luZyBtYXhpbXVtIGFsbG93ZWQ6ICVkXG4iLAorCQkgICAgY2Znbm8sIG5pbnRmLCBVU0JfTUFYSU5URVJGQUNFUyk7CisJCW5pbnRmID0gVVNCX01BWElOVEVSRkFDRVM7CisJfQorCisJLyogR28gdGhyb3VnaCB0aGUgZGVzY3JpcHRvcnMsIGNoZWNraW5nIHRoZWlyIGxlbmd0aCBhbmQgY291bnRpbmcgdGhlCisJICogbnVtYmVyIG9mIGFsdHNldHRpbmdzIGZvciBlYWNoIGludGVyZmFjZSAqLworCW4gPSAwOworCWZvciAoKGJ1ZmZlcjIgPSBidWZmZXIsIHNpemUyID0gc2l6ZSk7CisJICAgICAgc2l6ZTIgPiAwOworCSAgICAgKGJ1ZmZlcjIgKz0gaGVhZGVyLT5iTGVuZ3RoLCBzaXplMiAtPSBoZWFkZXItPmJMZW5ndGgpKSB7CisKKwkJaWYgKHNpemUyIDwgc2l6ZW9mKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIpKSB7CisJCQlkZXZfd2FybihkZGV2LCAiY29uZmlnICVkIGRlc2NyaXB0b3IgaGFzICVkIGV4Y2VzcyAiCisJCQkgICAgImJ5dGUlcywgaWdub3JpbmdcbiIsCisJCQkgICAgY2Znbm8sIHNpemUyLCBwbHVyYWwoc2l6ZTIpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaGVhZGVyID0gKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgYnVmZmVyMjsKKwkJaWYgKChoZWFkZXItPmJMZW5ndGggPiBzaXplMikgfHwgKGhlYWRlci0+Ykxlbmd0aCA8IDIpKSB7CisJCQlkZXZfd2FybihkZGV2LCAiY29uZmlnICVkIGhhcyBhbiBpbnZhbGlkIGRlc2NyaXB0b3IgIgorCQkJICAgICJvZiBsZW5ndGggJWQsIHNraXBwaW5nIHJlbWFpbmRlciBvZiB0aGUgY29uZmlnXG4iLAorCQkJICAgIGNmZ25vLCBoZWFkZXItPmJMZW5ndGgpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaGVhZGVyLT5iRGVzY3JpcHRvclR5cGUgPT0gVVNCX0RUX0lOVEVSRkFDRSkgeworCQkJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqZDsKKwkJCWludCBpbnVtOworCisJCQlkID0gKHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKikgaGVhZGVyOworCQkJaWYgKGQtPmJMZW5ndGggPCBVU0JfRFRfSU5URVJGQUNFX1NJWkUpIHsKKwkJCQlkZXZfd2FybihkZGV2LCAiY29uZmlnICVkIGhhcyBhbiBpbnZhbGlkICIKKwkJCQkgICAgImludGVyZmFjZSBkZXNjcmlwdG9yIG9mIGxlbmd0aCAlZCwgIgorCQkJCSAgICAic2tpcHBpbmdcbiIsIGNmZ25vLCBkLT5iTGVuZ3RoKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaW51bSA9IGQtPmJJbnRlcmZhY2VOdW1iZXI7CisJCQlpZiAoaW51bSA+PSBuaW50Zl9vcmlnKQorCQkJCWRldl93YXJuKGRkZXYsICJjb25maWcgJWQgaGFzIGFuIGludmFsaWQgIgorCQkJCSAgICAiaW50ZXJmYWNlIG51bWJlcjogJWQgYnV0IG1heCBpcyAlZFxuIiwKKwkJCQkgICAgY2Znbm8sIGludW0sIG5pbnRmX29yaWcgLSAxKTsKKworCQkJLyogSGF2ZSB3ZSBhbHJlYWR5IGVuY291bnRlcmVkIHRoaXMgaW50ZXJmYWNlPworCQkJICogQ291bnQgaXRzIGFsdHNldHRpbmdzICovCisJCQlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7CisJCQkJaWYgKGludW1zW2ldID09IGludW0pCisJCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGkgPCBuKSB7CisJCQkJaWYgKG5hbHRzW2ldIDwgMjU1KQorCQkJCQkrK25hbHRzW2ldOworCQkJfSBlbHNlIGlmIChuIDwgVVNCX01BWElOVEVSRkFDRVMpIHsKKwkJCQlpbnVtc1tuXSA9IGludW07CisJCQkJbmFsdHNbbl0gPSAxOworCQkJCSsrbjsKKwkJCX0KKworCQl9IGVsc2UgaWYgKGhlYWRlci0+YkRlc2NyaXB0b3JUeXBlID09IFVTQl9EVF9ERVZJQ0UgfHwKKwkJCSAgICBoZWFkZXItPmJEZXNjcmlwdG9yVHlwZSA9PSBVU0JfRFRfQ09ORklHKQorCQkJZGV2X3dhcm4oZGRldiwgImNvbmZpZyAlZCBjb250YWlucyBhbiB1bmV4cGVjdGVkICIKKwkJCSAgICAiZGVzY3JpcHRvciBvZiB0eXBlIDB4JVgsIHNraXBwaW5nXG4iLAorCQkJICAgIGNmZ25vLCBoZWFkZXItPmJEZXNjcmlwdG9yVHlwZSk7CisKKwl9CS8qIGZvciAoKGJ1ZmZlcjIgPSBidWZmZXIsIHNpemUyID0gc2l6ZSk7IC4uLikgKi8KKwlzaXplID0gYnVmZmVyMiAtIGJ1ZmZlcjsKKwljb25maWctPmRlc2Mud1RvdGFsTGVuZ3RoID0gY3B1X3RvX2xlMTYoYnVmZmVyMiAtIGJ1ZmZlcjApOworCisJaWYgKG4gIT0gbmludGYpCisJCWRldl93YXJuKGRkZXYsICJjb25maWcgJWQgaGFzICVkIGludGVyZmFjZSVzLCBkaWZmZXJlbnQgZnJvbSAiCisJCSAgICAidGhlIGRlc2NyaXB0b3IncyB2YWx1ZTogJWRcbiIsCisJCSAgICBjZmdubywgbiwgcGx1cmFsKG4pLCBuaW50Zl9vcmlnKTsKKwllbHNlIGlmIChuID09IDApCisJCWRldl93YXJuKGRkZXYsICJjb25maWcgJWQgaGFzIG5vIGludGVyZmFjZXM/XG4iLCBjZmdubyk7CisJY29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzID0gbmludGYgPSBuOworCisJLyogQ2hlY2sgZm9yIG1pc3NpbmcgaW50ZXJmYWNlIG51bWJlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmludGY7ICsraSkgeworCQlmb3IgKGogPSAwOyBqIDwgbmludGY7ICsraikgeworCQkJaWYgKGludW1zW2pdID09IGkpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGogPj0gbmludGYpCisJCQlkZXZfd2FybihkZGV2LCAiY29uZmlnICVkIGhhcyBubyBpbnRlcmZhY2UgbnVtYmVyICIKKwkJCSAgICAiJWRcbiIsIGNmZ25vLCBpKTsKKwl9CisKKwkvKiBBbGxvY2F0ZSB0aGUgdXNiX2ludGVyZmFjZV9jYWNoZXMgYW5kIGFsdHNldHRpbmcgYXJyYXlzICovCisJZm9yIChpID0gMDsgaSA8IG5pbnRmOyArK2kpIHsKKwkJaiA9IG5hbHRzW2ldOworCQlpZiAoaiA+IFVTQl9NQVhBTFRTRVRUSU5HKSB7CisJCQlkZXZfd2FybihkZGV2LCAidG9vIG1hbnkgYWx0ZXJuYXRlIHNldHRpbmdzIGZvciAiCisJCQkgICAgImNvbmZpZyAlZCBpbnRlcmZhY2UgJWQ6ICVkLCAiCisJCQkgICAgInVzaW5nIG1heGltdW0gYWxsb3dlZDogJWRcbiIsCisJCQkgICAgY2Znbm8sIGludW1zW2ldLCBqLCBVU0JfTUFYQUxUU0VUVElORyk7CisJCQluYWx0c1tpXSA9IGogPSBVU0JfTUFYQUxUU0VUVElORzsKKwkJfQorCisJCWxlbiA9IHNpemVvZigqaW50ZmMpICsgc2l6ZW9mKHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UpICogajsKKwkJY29uZmlnLT5pbnRmX2NhY2hlW2ldID0gaW50ZmMgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICghaW50ZmMpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJbWVtc2V0KGludGZjLCAwLCBsZW4pOworCQlrcmVmX2luaXQoJmludGZjLT5yZWYpOworCX0KKworCS8qIFNraXAgb3ZlciBhbnkgQ2xhc3MgU3BlY2lmaWMgb3IgVmVuZG9yIFNwZWNpZmljIGRlc2NyaXB0b3JzOworCSAqIGZpbmQgdGhlIGZpcnN0IGludGVyZmFjZSBkZXNjcmlwdG9yICovCisJY29uZmlnLT5leHRyYSA9IGJ1ZmZlcjsKKwlpID0gZmluZF9uZXh0X2Rlc2NyaXB0b3IoYnVmZmVyLCBzaXplLCBVU0JfRFRfSU5URVJGQUNFLAorCSAgICBVU0JfRFRfSU5URVJGQUNFLCAmbik7CisJY29uZmlnLT5leHRyYWxlbiA9IGk7CisJaWYgKG4gPiAwKQorCQlkZXZfZGJnKGRkZXYsICJza2lwcGVkICVkIGRlc2NyaXB0b3IlcyBhZnRlciAlc1xuIiwKKwkJICAgIG4sIHBsdXJhbChuKSwgImNvbmZpZ3VyYXRpb24iKTsKKwlidWZmZXIgKz0gaTsKKwlzaXplIC09IGk7CisKKwkvKiBQYXJzZSBhbGwgdGhlIGludGVyZmFjZS9hbHRzZXR0aW5nIGRlc2NyaXB0b3JzICovCisJd2hpbGUgKHNpemUgPiAwKSB7CisJCXJldHZhbCA9IHVzYl9wYXJzZV9pbnRlcmZhY2UoZGRldiwgY2Znbm8sIGNvbmZpZywKKwkJICAgIGJ1ZmZlciwgc2l6ZSwgaW51bXMsIG5hbHRzKTsKKwkJaWYgKHJldHZhbCA8IDApCisJCQlyZXR1cm4gcmV0dmFsOworCisJCWJ1ZmZlciArPSByZXR2YWw7CisJCXNpemUgLT0gcmV0dmFsOworCX0KKworCS8qIENoZWNrIGZvciBtaXNzaW5nIGFsdHNldHRpbmdzICovCisJZm9yIChpID0gMDsgaSA8IG5pbnRmOyArK2kpIHsKKwkJaW50ZmMgPSBjb25maWctPmludGZfY2FjaGVbaV07CisJCWZvciAoaiA9IDA7IGogPCBpbnRmYy0+bnVtX2FsdHNldHRpbmc7ICsraikgeworCQkJZm9yIChuID0gMDsgbiA8IGludGZjLT5udW1fYWx0c2V0dGluZzsgKytuKSB7CisJCQkJaWYgKGludGZjLT5hbHRzZXR0aW5nW25dLmRlc2MuCisJCQkJICAgIGJBbHRlcm5hdGVTZXR0aW5nID09IGopCisJCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKG4gPj0gaW50ZmMtPm51bV9hbHRzZXR0aW5nKQorCQkJCWRldl93YXJuKGRkZXYsICJjb25maWcgJWQgaW50ZXJmYWNlICVkIGhhcyBubyAiCisJCQkJICAgICJhbHRzZXR0aW5nICVkXG4iLCBjZmdubywgaW51bXNbaV0sIGopOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8vIGh1Yi1vbmx5ISEgLi4uIGFuZCBvbmx5IGV4cG9ydGVkIGZvciByZXNldC9yZWluaXQgcGF0aC4KKy8vIG90aGVyd2lzZSB1c2VkIGludGVybmFsbHkgb24gZGlzY29ubmVjdC9kZXN0cm95IHBhdGgKK3ZvaWQgdXNiX2Rlc3Ryb3lfY29uZmlndXJhdGlvbihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQoreworCWludCBjLCBpOworCisJaWYgKCFkZXYtPmNvbmZpZykKKwkJcmV0dXJuOworCisJaWYgKGRldi0+cmF3ZGVzY3JpcHRvcnMpIHsKKwkJZm9yIChpID0gMDsgaSA8IGRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnM7IGkrKykKKwkJCWtmcmVlKGRldi0+cmF3ZGVzY3JpcHRvcnNbaV0pOworCisJCWtmcmVlKGRldi0+cmF3ZGVzY3JpcHRvcnMpOworCQlkZXYtPnJhd2Rlc2NyaXB0b3JzID0gTlVMTDsKKwl9CisKKwlmb3IgKGMgPSAwOyBjIDwgZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9uczsgYysrKSB7CisJCXN0cnVjdCB1c2JfaG9zdF9jb25maWcgKmNmID0gJmRldi0+Y29uZmlnW2NdOworCisJCWtmcmVlKGNmLT5zdHJpbmcpOworCQljZi0+c3RyaW5nID0gTlVMTDsKKworCQlmb3IgKGkgPSAwOyBpIDwgY2YtPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgeworCQkJaWYgKGNmLT5pbnRmX2NhY2hlW2ldKQorCQkJCWtyZWZfcHV0KCZjZi0+aW50Zl9jYWNoZVtpXS0+cmVmLCAKKwkJCQkJICB1c2JfcmVsZWFzZV9pbnRlcmZhY2VfY2FjaGUpOworCQl9CisJfQorCWtmcmVlKGRldi0+Y29uZmlnKTsKKwlkZXYtPmNvbmZpZyA9IE5VTEw7Cit9CisKKworLy8gaHViLW9ubHkhISAuLi4gYW5kIG9ubHkgaW4gcmVzZXQgcGF0aCwgb3IgdXNiX25ld19kZXZpY2UoKQorLy8gKHVzZWQgYnkgcmVhbCBodWJzIGFuZCB2aXJ0dWFsIHJvb3QgaHVicykKK2ludCB1c2JfZ2V0X2NvbmZpZ3VyYXRpb24oc3RydWN0IHVzYl9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZGV2ID0gJmRldi0+ZGV2OworCWludCBuY2ZnID0gZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9uczsKKwlpbnQgcmVzdWx0ID0gLUVOT01FTTsKKwl1bnNpZ25lZCBpbnQgY2Znbm8sIGxlbmd0aDsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJdW5zaWduZWQgY2hhciAqYmlnYnVmZmVyOworIAlzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yICpkZXNjOworCisJaWYgKG5jZmcgPiBVU0JfTUFYQ09ORklHKSB7CisJCWRldl93YXJuKGRkZXYsICJ0b28gbWFueSBjb25maWd1cmF0aW9uczogJWQsICIKKwkJICAgICJ1c2luZyBtYXhpbXVtIGFsbG93ZWQ6ICVkXG4iLCBuY2ZnLCBVU0JfTUFYQ09ORklHKTsKKwkJZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyA9IG5jZmcgPSBVU0JfTUFYQ09ORklHOworCX0KKworCWlmIChuY2ZnIDwgMSkgeworCQlkZXZfZXJyKGRkZXYsICJubyBjb25maWd1cmF0aW9uc1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWxlbmd0aCA9IG5jZmcgKiBzaXplb2Yoc3RydWN0IHVzYl9ob3N0X2NvbmZpZyk7CisJZGV2LT5jb25maWcgPSBrbWFsbG9jKGxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPmNvbmZpZykKKwkJZ290byBlcnIyOworCW1lbXNldChkZXYtPmNvbmZpZywgMCwgbGVuZ3RoKTsKKworCWxlbmd0aCA9IG5jZmcgKiBzaXplb2YoY2hhciAqKTsKKwlkZXYtPnJhd2Rlc2NyaXB0b3JzID0ga21hbGxvYyhsZW5ndGgsIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5yYXdkZXNjcmlwdG9ycykKKwkJZ290byBlcnIyOworCW1lbXNldChkZXYtPnJhd2Rlc2NyaXB0b3JzLCAwLCBsZW5ndGgpOworCisJYnVmZmVyID0ga21hbGxvYyhVU0JfRFRfQ09ORklHX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlnb3RvIGVycjI7CisJZGVzYyA9IChzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yICopYnVmZmVyOworCisJZm9yIChjZmdubyA9IDA7IGNmZ25vIDwgbmNmZzsgY2Znbm8rKykgeworCQkvKiBXZSBncmFiIGp1c3QgdGhlIGZpcnN0IGRlc2NyaXB0b3Igc28gd2Uga25vdyBob3cgbG9uZworCQkgKiB0aGUgd2hvbGUgY29uZmlndXJhdGlvbiBpcyAqLworCQlyZXN1bHQgPSB1c2JfZ2V0X2Rlc2NyaXB0b3IoZGV2LCBVU0JfRFRfQ09ORklHLCBjZmdubywKKwkJICAgIGJ1ZmZlciwgVVNCX0RUX0NPTkZJR19TSVpFKTsKKwkJaWYgKHJlc3VsdCA8IDApIHsKKwkJCWRldl9lcnIoZGRldiwgInVuYWJsZSB0byByZWFkIGNvbmZpZyBpbmRleCAlZCAiCisJCQkgICAgImRlc2NyaXB0b3IvJXNcbiIsIGNmZ25vLCAic3RhcnQiKTsKKwkJCWdvdG8gZXJyOworCQl9IGVsc2UgaWYgKHJlc3VsdCA8IDQpIHsKKwkJCWRldl9lcnIoZGRldiwgImNvbmZpZyBpbmRleCAlZCBkZXNjcmlwdG9yIHRvbyBzaG9ydCAiCisJCQkgICAgIihleHBlY3RlZCAlaSwgZ290ICVpKVxuIiwgY2Znbm8sCisJCQkgICAgVVNCX0RUX0NPTkZJR19TSVpFLCByZXN1bHQpOworCQkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZXJyOworCQl9CisJCWxlbmd0aCA9IG1heCgoaW50KSBsZTE2X3RvX2NwdShkZXNjLT53VG90YWxMZW5ndGgpLAorCQkgICAgVVNCX0RUX0NPTkZJR19TSVpFKTsKKworCQkvKiBOb3cgdGhhdCB3ZSBrbm93IHRoZSBsZW5ndGgsIGdldCB0aGUgd2hvbGUgdGhpbmcgKi8KKwkJYmlnYnVmZmVyID0ga21hbGxvYyhsZW5ndGgsIEdGUF9LRVJORUwpOworCQlpZiAoIWJpZ2J1ZmZlcikgeworCQkJcmVzdWx0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyOworCQl9CisJCXJlc3VsdCA9IHVzYl9nZXRfZGVzY3JpcHRvcihkZXYsIFVTQl9EVF9DT05GSUcsIGNmZ25vLAorCQkgICAgYmlnYnVmZmVyLCBsZW5ndGgpOworCQlpZiAocmVzdWx0IDwgMCkgeworCQkJZGV2X2VycihkZGV2LCAidW5hYmxlIHRvIHJlYWQgY29uZmlnIGluZGV4ICVkICIKKwkJCSAgICAiZGVzY3JpcHRvci8lc1xuIiwgY2Znbm8sICJhbGwiKTsKKwkJCWtmcmVlKGJpZ2J1ZmZlcik7CisJCQlnb3RvIGVycjsKKwkJfQorCQlpZiAocmVzdWx0IDwgbGVuZ3RoKSB7CisJCQlkZXZfd2FybihkZGV2LCAiY29uZmlnIGluZGV4ICVkIGRlc2NyaXB0b3IgdG9vIHNob3J0ICIKKwkJCSAgICAiKGV4cGVjdGVkICVpLCBnb3QgJWkpXG4iLCBjZmdubywgbGVuZ3RoLCByZXN1bHQpOworCQkJbGVuZ3RoID0gcmVzdWx0OworCQl9CisKKwkJZGV2LT5yYXdkZXNjcmlwdG9yc1tjZmdub10gPSBiaWdidWZmZXI7CisKKwkJcmVzdWx0ID0gdXNiX3BhcnNlX2NvbmZpZ3VyYXRpb24oJmRldi0+ZGV2LCBjZmdubywKKwkJICAgICZkZXYtPmNvbmZpZ1tjZmdub10sIGJpZ2J1ZmZlciwgbGVuZ3RoKTsKKwkJaWYgKHJlc3VsdCA8IDApIHsKKwkJCSsrY2Znbm87CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKwlyZXN1bHQgPSAwOworCitlcnI6CisJa2ZyZWUoYnVmZmVyKTsKKwlkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zID0gY2Znbm87CitlcnIyOgorCWlmIChyZXN1bHQgPT0gLUVOT01FTSkKKwkJZGV2X2VycihkZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jIGIvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI2MWJjZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jCkBAIC0wLDAgKzEsNjc3IEBACisvKgorICogZGV2aWNlcy5jCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgUmFuZHkgRHVubGFwLgorICogKEMpIENvcHlyaWdodCAxOTk5LDIwMDAgVGhvbWFzIFNhaWxlciA8c2FpbGVyQGlmZS5lZS5ldGh6LmNoPi4gKHByb2MgZmlsZSBwZXIgZGV2aWNlKQorICogKEMpIENvcHlyaWdodCAxOTk5IERldGkgRmxpZWdsIChuZXcgVVNCIGFyY2hpdGVjdHVyZSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiA8bW91bnRwb2ludD4vZGV2aWNlcyBjb250YWlucyBVU0IgdG9wb2xvZ3ksIGRldmljZSwgY29uZmlnLCBjbGFzcywKKyAqIGludGVyZmFjZSwgJiBlbmRwb2ludCBkYXRhLgorICoKKyAqIEkgY29uc2lkZXJlZCB1c2luZyAvcHJvYy9idXMvdXNiL2RldmljZXMvZGV2aWNlIyBmb3IgZWFjaCBkZXZpY2UKKyAqIGFzIGl0IGlzIGF0dGFjaGVkIG9yIGRldGFjaGVkLCBidXQgSSBkaWRuJ3QgbGlrZSB0aGlzIGZvciBzb21lCisgKiByZWFzb24gLS0gbWF5YmUgaXQncyBqdXN0IHRvbyBkZWVwIG9mIGEgZGlyZWN0b3J5IHN0cnVjdHVyZS4KKyAqIEkgYWxzbyBkb24ndCBsaWtlIGxvb2tpbmcgaW4gbXVsdGlwbGUgcGxhY2VzIHRvIGdhdGhlciBhbmQgdmlldworICogdGhlIGRhdGEuICBIYXZpbmcgb25seSBvbmUgZmlsZSBmb3IgLi9kZXZpY2VzIGFsc28gcHJldmVudHMgcmFjZQorICogY29uZGl0aW9ucyB0aGF0IGNvdWxkIGFyaXNlIGlmIGEgcHJvZ3JhbSB3YXMgcmVhZGluZyBkZXZpY2UgaW5mbworICogZm9yIGRldmljZXMgdGhhdCBhcmUgYmVpbmcgcmVtb3ZlZCAodW5wbHVnZ2VkKS4gIChUaGF0IGlzLCB0aGUKKyAqIHByb2dyYW0gbWF5IGZpbmQgYSBkaXJlY3RvcnkgZm9yIGRldm51bV8xMiB0aGVuIHRyeSB0byBvcGVuIGl0LAorICogYnV0IGl0IHdhcyBqdXN0IHVucGx1Z2dlZCwgc28gdGhlIGRpcmVjdG9yeSBpcyBub3cgZGVsZXRlZC4KKyAqIEJ1dCBwcm9ncmFtcyB3b3VsZCBqdXN0IGhhdmUgdG8gYmUgcHJlcGFyZWQgZm9yIHNpdHVhdGlvbnMgbGlrZQorICogdGhpcyBpbiBhbnkgcGx1Zy1hbmQtcGxheSBlbnZpcm9ubWVudC4pCisgKgorICogMTk5OS0xMi0xNjogVGhvbWFzIFNhaWxlciA8c2FpbGVyQGlmZS5lZS5ldGh6LmNoPgorICogICBDb252ZXJ0ZWQgdGhlIHdob2xlIHByb2Mgc3R1ZmYgdG8gcmVhbAorICogICByZWFkIG1ldGhvZHMuIE5vdyBub3QgdGhlIHdob2xlIGRldmljZSBsaXN0IG5lZWRzIHRvIGZpdAorICogICBpbnRvIG9uZSBwYWdlLCBvbmx5IHRoZSBkZXZpY2UgbGlzdCBmb3Igb25lIGJ1cy4KKyAqICAgQWRkZWQgYSBwb2xsIG1ldGhvZCB0byAvcHJvYy9idXMvdXNiL2RldmljZXMsIHRvIHdha2UKKyAqICAgdXAgYW4gZXZlbnR1YWwgdXNiZAorICogMjAwMC0wMS0wNDogVGhvbWFzIFNhaWxlciA8c2FpbGVyQGlmZS5lZS5ldGh6LmNoPgorICogICBUdXJuZWQgaW50byBpdHMgb3duIGZpbGVzeXN0ZW0KKyAqIDIwMDAtMDctMDU6IEFzaGxleSBNb250YW5hcm8gPGFzaGxleUBjb21wc29jLm1hbi5hYy51az4KKyAqICAgQ29udmVydGVkIGZpbGUgcmVhZGluZyByb3V0aW5lIHRvIGR1bXAgdG8gYnVmZmVyIG9uY2UKKyAqICAgcGVyIGRldmljZSwgbm90IHBlciBidXMKKyAqCisgKiAkSWQ6IGRldmljZXMuYyx2IDEuNSAyMDAwLzAxLzExIDEzOjU4OjIxIHRvbSBFeHAgJAorICovCisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYmRldmljZV9mcy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJoY2QuaCIKKworI2RlZmluZSBNQVhfVE9QT19MRVZFTAkJNgorCisvKiBEZWZpbmUgQUxMT1dfU0VSSUFMX05VTUJFUiBpZiB5b3Ugd2FudCB0byBzZWUgdGhlIHNlcmlhbCBudW1iZXIgb2YgZGV2aWNlcyAqLworI2RlZmluZSBBTExPV19TRVJJQUxfTlVNQkVSCisKK3N0YXRpYyBjaGFyICpmb3JtYXRfdG9wbyA9CisvKiBUOiAgQnVzPWRkIExldj1kZCBQcm50PWRkIFBvcnQ9ZGQgQ250PWRkIERldiM9ZGRkIFNwZD1kZGQgTXhDaD1kZCAqLworIlxuVDogIEJ1cz0lMi4yZCBMZXY9JTIuMmQgUHJudD0lMi4yZCBQb3J0PSUyLjJkIENudD0lMi4yZCBEZXYjPSUzZCBTcGQ9JTNzIE14Q2g9JTJkXG4iOworCitzdGF0aWMgY2hhciAqZm9ybWF0X3N0cmluZ19tYW51ZmFjdHVyZXIgPQorLyogUzogIE1hbnVmYWN0dXJlcj14eHh4ICovCisgICJTOiAgTWFudWZhY3R1cmVyPSUuMTAwc1xuIjsKKworc3RhdGljIGNoYXIgKmZvcm1hdF9zdHJpbmdfcHJvZHVjdCA9CisvKiBTOiAgUHJvZHVjdD14eHh4ICovCisgICJTOiAgUHJvZHVjdD0lLjEwMHNcbiI7CisKKyNpZmRlZiBBTExPV19TRVJJQUxfTlVNQkVSCitzdGF0aWMgY2hhciAqZm9ybWF0X3N0cmluZ19zZXJpYWxudW1iZXIgPQorLyogUzogIFNlcmlhbE51bWJlcj14eHh4ICovCisgICJTOiAgU2VyaWFsTnVtYmVyPSUuMTAwc1xuIjsKKyNlbmRpZgorCitzdGF0aWMgY2hhciAqZm9ybWF0X2JhbmR3aWR0aCA9CisvKiBCOiAgQWxsb2M9ZGRkL2RkZCB1cyAoeHglKSwgI0ludD1kZGQsICNJc289ZGRkICovCisgICJCOiAgQWxsb2M9JTNkLyUzZCB1cyAoJTJkJSUpLCAjSW50PSUzZCwgI0lzbz0lM2RcbiI7CisgIAorc3RhdGljIGNoYXIgKmZvcm1hdF9kZXZpY2UxID0KKy8qIEQ6ICBWZXI9eHgueHggQ2xzPXh4KHNzc3NzKSBTdWI9eHggUHJvdD14eCBNeFBTPWRkICNDZmdzPWRkICovCisgICJEOiAgVmVyPSUyeC4lMDJ4IENscz0lMDJ4KCUtNXMpIFN1Yj0lMDJ4IFByb3Q9JTAyeCBNeFBTPSUyZCAjQ2Zncz0lM2RcbiI7CisKK3N0YXRpYyBjaGFyICpmb3JtYXRfZGV2aWNlMiA9CisvKiBQOiAgVmVuZG9yPXh4eHggUHJvZElEPXh4eHggUmV2PXh4Lnh4ICovCisgICJQOiAgVmVuZG9yPSUwNHggUHJvZElEPSUwNHggUmV2PSUyeC4lMDJ4XG4iOworCitzdGF0aWMgY2hhciAqZm9ybWF0X2NvbmZpZyA9CisvKiBDOiAgI0lmcz1kZCBDZmcjPWRkIEF0cj14eCBNUHdyPWRkZG1BICovCisgICJDOiVjICNJZnM9JTJkIENmZyM9JTJkIEF0cj0lMDJ4IE14UHdyPSUzZG1BXG4iOworICAKK3N0YXRpYyBjaGFyICpmb3JtYXRfaWZhY2UgPQorLyogSTogIElmIz1kZCBBbHQ9ZGQgI0VQcz1kZCBDbHM9eHgoc3Nzc3MpIFN1Yj14eCBQcm90PXh4IERyaXZlcj14eHh4Ki8KKyAgIkk6ICBJZiM9JTJkIEFsdD0lMmQgI0VQcz0lMmQgQ2xzPSUwMngoJS01cykgU3ViPSUwMnggUHJvdD0lMDJ4IERyaXZlcj0lc1xuIjsKKworc3RhdGljIGNoYXIgKmZvcm1hdF9lbmRwdCA9CisvKiBFOiAgQWQ9eHgocykgQXRyPXh4KHNzc3MpIE14UFM9ZGRkZCBJdmw9RD9zICovCisgICJFOiAgQWQ9JTAyeCglYykgQXRyPSUwMngoJS00cykgTXhQUz0lNGQgSXZsPSVkJWNzXG4iOworCisKKy8qCisgKiBOZWVkIGFjY2VzcyB0byB0aGUgZHJpdmVyIGFuZCBVU0IgYnVzIGxpc3RzLgorICogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdXNiX2J1c19saXN0OworICogSG93ZXZlciwgdGhlc2Ugd2lsbCBjb21lIGZyb20gZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHB0cnMgdG8gZWFjaCBvZiB0aGVtLgorICovCisKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChkZXZpY2Vjb25uZGlzY3dxKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29ubmRpc2NldmNudCA9IDA7CisKKy8qIHRoaXMgc3RydWN0IHN0b3JlcyB0aGUgcG9sbCBzdGF0ZSBmb3IgPG1vdW50cG9pbnQ+L2RldmljZXMgcG9sbGVycyAqLworc3RydWN0IHVzYl9kZXZpY2Vfc3RhdHVzIHsKKwl1bnNpZ25lZCBpbnQgbGFzdGV2OworfTsKKworc3RydWN0IGNsYXNzX2luZm8geworCWludCBjbGFzczsKKwljaGFyICpjbGFzc19uYW1lOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzc19pbmZvIGNsYXNfaW5mb1tdID0KK3sJCQkJCS8qIG1heC4gNSBjaGFycy4gcGVyIG5hbWUgc3RyaW5nICovCisJe1VTQl9DTEFTU19QRVJfSU5URVJGQUNFLAkiPmlmYyJ9LAorCXtVU0JfQ0xBU1NfQVVESU8sCQkiYXVkaW8ifSwKKwl7VVNCX0NMQVNTX0NPTU0sCQkiY29tbS4ifSwKKwl7VVNCX0NMQVNTX0hJRCwJCQkiSElEIn0sCisJe1VTQl9DTEFTU19IVUIsCQkJImh1YiJ9LAorCXtVU0JfQ0xBU1NfUEhZU0lDQUwsCQkiUElEIn0sCisJe1VTQl9DTEFTU19QUklOVEVSLAkJInByaW50In0sCisJe1VTQl9DTEFTU19NQVNTX1NUT1JBR0UsCSJzdG9yLiJ9LAorCXtVU0JfQ0xBU1NfQ0RDX0RBVEEsCQkiZGF0YSJ9LAorCXtVU0JfQ0xBU1NfQVBQX1NQRUMsCQkiYXBwLiJ9LAorCXtVU0JfQ0xBU1NfVkVORE9SX1NQRUMsCQkidmVuZC4ifSwKKwl7VVNCX0NMQVNTX1NUSUxMX0lNQUdFLAkJInN0aWxsIn0sCisJe1VTQl9DTEFTU19DU0NJRCwJCSJzY2FyZCJ9LAorCXtVU0JfQ0xBU1NfQ09OVEVOVF9TRUMsCQkiYy1zZWMifSwKKwl7LTEsCQkJCSJ1bmsuIn0JCS8qIGxlYXZlIGFzIGxhc3QgKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCB1c2Jmc19jb25uX2Rpc2NfZXZlbnQodm9pZCkKK3sKKwljb25uZGlzY2V2Y250Kys7CisJd2FrZV91cCgmZGV2aWNlY29ubmRpc2N3cSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpjbGFzc19kZWNvZGUoY29uc3QgaW50IGNsYXNzKQoreworCWludCBpeDsKKworCWZvciAoaXggPSAwOyBjbGFzX2luZm9baXhdLmNsYXNzICE9IC0xOyBpeCsrKQorCQlpZiAoY2xhc19pbmZvW2l4XS5jbGFzcyA9PSBjbGFzcykKKwkJCWJyZWFrOworCXJldHVybiAoY2xhc19pbmZvW2l4XS5jbGFzc19uYW1lKTsKK30KKworc3RhdGljIGNoYXIgKnVzYl9kdW1wX2VuZHBvaW50X2Rlc2NyaXB0b3IgKAorCWludCBzcGVlZCwKKwljaGFyICpzdGFydCwKKwljaGFyICplbmQsCisJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjCispCit7CisJY2hhciBkaXIsIHVuaXQsICp0eXBlOworCXVuc2lnbmVkIGludGVydmFsLCBpbiwgYmFuZHdpZHRoID0gMTsKKworCWlmIChzdGFydCA+IGVuZCkKKwkJcmV0dXJuIHN0YXJ0OworCWluID0gKGRlc2MtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKTsKKwlkaXIgPSBpbiA/ICdJJyA6ICdPJzsKKwlpZiAoc3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIHsKKwkJc3dpdGNoIChsZTE2X3RvX2NwdShkZXNjLT53TWF4UGFja2V0U2l6ZSkgJiAoMHgwMyA8PCAxMSkpIHsKKwkJY2FzZSAxIDw8IDExOgliYW5kd2lkdGggPSAyOyBicmVhazsKKwkJY2FzZSAyIDw8IDExOgliYW5kd2lkdGggPSAzOyBicmVhazsKKwkJfQorCX0KKworCS8qIHRoaXMgaXNuJ3QgY2hlY2tpbmcgZm9yIGlsbGVnYWwgdmFsdWVzICovCisJc3dpdGNoIChkZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgeworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTDoKKwkJdHlwZSA9ICJDdHJsIjsKKwkJaWYgKHNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSAJLyogdWZyYW1lcyBwZXIgTkFLICovCisJCQlpbnRlcnZhbCA9IGRlc2MtPmJJbnRlcnZhbDsKKwkJZWxzZQorCQkJaW50ZXJ2YWwgPSAwOworCQlkaXIgPSAnQic7CQkJLyogY3RybCBpcyBiaWRpcmVjdGlvbmFsICovCisJCWJyZWFrOworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoKKwkJdHlwZSA9ICJJc29jIjsKKwkJaW50ZXJ2YWwgPSAxIDw8IChkZXNjLT5iSW50ZXJ2YWwgLSAxKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLOgorCQl0eXBlID0gIkJ1bGsiOworCQlpZiAoc3BlZWQgPT0gVVNCX1NQRUVEX0hJR0ggJiYgIWluKQkvKiB1ZnJhbWVzIHBlciBOQUsgKi8KKwkJCWludGVydmFsID0gZGVzYy0+YkludGVydmFsOworCQllbHNlCisJCQlpbnRlcnZhbCA9IDA7CisJCWJyZWFrOworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOgorCQl0eXBlID0gIkludC4iOworCQlpZiAoc3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIHsKKwkJCWludGVydmFsID0gMSA8PCAoZGVzYy0+YkludGVydmFsIC0gMSk7CisJCX0gZWxzZQorCQkJaW50ZXJ2YWwgPSBkZXNjLT5iSW50ZXJ2YWw7CisJCWJyZWFrOworCWRlZmF1bHQ6CS8qICJjYW4ndCBoYXBwZW4iICovCisJCXJldHVybiBzdGFydDsKKwl9CisJaW50ZXJ2YWwgKj0gKHNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSA/IDEyNSA6IDEwMDA7CisJaWYgKGludGVydmFsICUgMTAwMCkKKwkJdW5pdCA9ICd1JzsKKwllbHNlIHsKKwkJdW5pdCA9ICdtJzsKKwkJaW50ZXJ2YWwgLz0gMTAwMDsKKwl9CisKKwlzdGFydCArPSBzcHJpbnRmKHN0YXJ0LCBmb3JtYXRfZW5kcHQsIGRlc2MtPmJFbmRwb2ludEFkZHJlc3MsIGRpciwKKwkJCSBkZXNjLT5ibUF0dHJpYnV0ZXMsIHR5cGUsCisJCQkgKGxlMTZfdG9fY3B1KGRlc2MtPndNYXhQYWNrZXRTaXplKSAmIDB4MDdmZikgKiBiYW5kd2lkdGgsCisJCQkgaW50ZXJ2YWwsIHVuaXQpOworCXJldHVybiBzdGFydDsKK30KKworc3RhdGljIGNoYXIgKnVzYl9kdW1wX2ludGVyZmFjZV9kZXNjcmlwdG9yKGNoYXIgKnN0YXJ0LCBjaGFyICplbmQsCisJY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2VfY2FjaGUgKmludGZjLAorCWNvbnN0IHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwKKwlpbnQgc2V0bm8pCit7CisJY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqZGVzYyA9ICZpbnRmYy0+YWx0c2V0dGluZ1tzZXRub10uZGVzYzsKKwljaGFyICpkcml2ZXJfbmFtZSA9ICIiOworCisJaWYgKHN0YXJ0ID4gZW5kKQorCQlyZXR1cm4gc3RhcnQ7CisJZG93bl9yZWFkKCZ1c2JfYnVzX3R5cGUuc3Vic3lzLnJ3c2VtKTsKKwlpZiAoaWZhY2UpCisJCWRyaXZlcl9uYW1lID0gKGlmYWNlLT5kZXYuZHJpdmVyCisJCQkJPyBpZmFjZS0+ZGV2LmRyaXZlci0+bmFtZQorCQkJCTogIihub25lKSIpOworCXN0YXJ0ICs9IHNwcmludGYoc3RhcnQsIGZvcm1hdF9pZmFjZSwKKwkJCSBkZXNjLT5iSW50ZXJmYWNlTnVtYmVyLAorCQkJIGRlc2MtPmJBbHRlcm5hdGVTZXR0aW5nLAorCQkJIGRlc2MtPmJOdW1FbmRwb2ludHMsCisJCQkgZGVzYy0+YkludGVyZmFjZUNsYXNzLAorCQkJIGNsYXNzX2RlY29kZShkZXNjLT5iSW50ZXJmYWNlQ2xhc3MpLAorCQkJIGRlc2MtPmJJbnRlcmZhY2VTdWJDbGFzcywKKwkJCSBkZXNjLT5iSW50ZXJmYWNlUHJvdG9jb2wsCisJCQkgZHJpdmVyX25hbWUpOworCXVwX3JlYWQoJnVzYl9idXNfdHlwZS5zdWJzeXMucndzZW0pOworCXJldHVybiBzdGFydDsKK30KKworc3RhdGljIGNoYXIgKnVzYl9kdW1wX2ludGVyZmFjZSgKKwlpbnQgc3BlZWQsCisJY2hhciAqc3RhcnQsCisJY2hhciAqZW5kLAorCWNvbnN0IHN0cnVjdCB1c2JfaW50ZXJmYWNlX2NhY2hlICppbnRmYywKKwljb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsCisJaW50IHNldG5vCispIHsKKwljb25zdCBzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICpkZXNjID0gJmludGZjLT5hbHRzZXR0aW5nW3NldG5vXTsKKwlpbnQgaTsKKworCXN0YXJ0ID0gdXNiX2R1bXBfaW50ZXJmYWNlX2Rlc2NyaXB0b3Ioc3RhcnQsIGVuZCwgaW50ZmMsIGlmYWNlLCBzZXRubyk7CisJZm9yIChpID0gMDsgaSA8IGRlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgaSsrKSB7CisJCWlmIChzdGFydCA+IGVuZCkKKwkJCXJldHVybiBzdGFydDsKKwkJc3RhcnQgPSB1c2JfZHVtcF9lbmRwb2ludF9kZXNjcmlwdG9yKHNwZWVkLAorCQkJCXN0YXJ0LCBlbmQsICZkZXNjLT5lbmRwb2ludFtpXS5kZXNjKTsKKwl9CisJcmV0dXJuIHN0YXJ0OworfQorCisvKiBUQkQ6CisgKiAwLiBUQkRzCisgKiAxLiBtYXJraW5nIGFjdGl2ZSBpbnRlcmZhY2UgYWx0c2V0dGluZ3MgKGNvZGUgbGlzdHMgYWxsLCBidXQgc2hvdWxkIG1hcmsKKyAqICAgIHdoaWNoIG9uZXMgYXJlIGFjdGl2ZSwgaWYgYW55KQorICovCisKK3N0YXRpYyBjaGFyICp1c2JfZHVtcF9jb25maWdfZGVzY3JpcHRvcihjaGFyICpzdGFydCwgY2hhciAqZW5kLCBjb25zdCBzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yICpkZXNjLCBpbnQgYWN0aXZlKQoreworCWlmIChzdGFydCA+IGVuZCkKKwkJcmV0dXJuIHN0YXJ0OworCXN0YXJ0ICs9IHNwcmludGYoc3RhcnQsIGZvcm1hdF9jb25maWcsCisJCQkgYWN0aXZlID8gJyonIDogJyAnLAkvKiBtYXJrIGFjdGl2ZS9hY3R1YWwvY3VycmVudCBjZmcuICovCisJCQkgZGVzYy0+Yk51bUludGVyZmFjZXMsCisJCQkgZGVzYy0+YkNvbmZpZ3VyYXRpb25WYWx1ZSwKKwkJCSBkZXNjLT5ibUF0dHJpYnV0ZXMsCisJCQkgZGVzYy0+Yk1heFBvd2VyICogMik7CisJcmV0dXJuIHN0YXJ0OworfQorCitzdGF0aWMgY2hhciAqdXNiX2R1bXBfY29uZmlnICgKKwlpbnQgc3BlZWQsCisJY2hhciAqc3RhcnQsCisJY2hhciAqZW5kLAorCWNvbnN0IHN0cnVjdCB1c2JfaG9zdF9jb25maWcgKmNvbmZpZywKKwlpbnQgYWN0aXZlCispCit7CisJaW50IGksIGo7CisJc3RydWN0IHVzYl9pbnRlcmZhY2VfY2FjaGUgKmludGZjOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CisKKwlpZiAoc3RhcnQgPiBlbmQpCisJCXJldHVybiBzdGFydDsKKwlpZiAoIWNvbmZpZykJCS8qIGdldHRpbmcgdGhlc2Ugc29tZSBpbiAyLjMuNzsgbm9uZSBpbiAyLjMuNiAqLworCQlyZXR1cm4gc3RhcnQgKyBzcHJpbnRmKHN0YXJ0LCAiKG51bGwgQ2ZnLiBkZXNjLilcbiIpOworCXN0YXJ0ID0gdXNiX2R1bXBfY29uZmlnX2Rlc2NyaXB0b3Ioc3RhcnQsIGVuZCwgJmNvbmZpZy0+ZGVzYywgYWN0aXZlKTsKKwlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOyBpKyspIHsKKwkJaW50ZmMgPSBjb25maWctPmludGZfY2FjaGVbaV07CisJCWludGVyZmFjZSA9IGNvbmZpZy0+aW50ZXJmYWNlW2ldOworCQlmb3IgKGogPSAwOyBqIDwgaW50ZmMtPm51bV9hbHRzZXR0aW5nOyBqKyspIHsKKwkJCWlmIChzdGFydCA+IGVuZCkKKwkJCQlyZXR1cm4gc3RhcnQ7CisJCQlzdGFydCA9IHVzYl9kdW1wX2ludGVyZmFjZShzcGVlZCwKKwkJCQlzdGFydCwgZW5kLCBpbnRmYywgaW50ZXJmYWNlLCBqKTsKKwkJfQorCX0KKwlyZXR1cm4gc3RhcnQ7Cit9CisKKy8qCisgKiBEdW1wIHRoZSBkaWZmZXJlbnQgVVNCIGRlc2NyaXB0b3JzLgorICovCitzdGF0aWMgY2hhciAqdXNiX2R1bXBfZGV2aWNlX2Rlc2NyaXB0b3IoY2hhciAqc3RhcnQsIGNoYXIgKmVuZCwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvciAqZGVzYykKK3sKKwl1MTYgYmNkVVNCID0gbGUxNl90b19jcHUoZGVzYy0+YmNkVVNCKTsKKwl1MTYgYmNkRGV2aWNlID0gbGUxNl90b19jcHUoZGVzYy0+YmNkRGV2aWNlKTsKKworCWlmIChzdGFydCA+IGVuZCkKKwkJcmV0dXJuIHN0YXJ0OworCXN0YXJ0ICs9IHNwcmludGYgKHN0YXJ0LCBmb3JtYXRfZGV2aWNlMSwKKwkJCSAgYmNkVVNCID4+IDgsIGJjZFVTQiAmIDB4ZmYsCisJCQkgIGRlc2MtPmJEZXZpY2VDbGFzcywKKwkJCSAgY2xhc3NfZGVjb2RlIChkZXNjLT5iRGV2aWNlQ2xhc3MpLAorCQkJICBkZXNjLT5iRGV2aWNlU3ViQ2xhc3MsCisJCQkgIGRlc2MtPmJEZXZpY2VQcm90b2NvbCwKKwkJCSAgZGVzYy0+Yk1heFBhY2tldFNpemUwLAorCQkJICBkZXNjLT5iTnVtQ29uZmlndXJhdGlvbnMpOworCWlmIChzdGFydCA+IGVuZCkKKwkJcmV0dXJuIHN0YXJ0OworCXN0YXJ0ICs9IHNwcmludGYoc3RhcnQsIGZvcm1hdF9kZXZpY2UyLAorCQkJIGxlMTZfdG9fY3B1KGRlc2MtPmlkVmVuZG9yKSwKKwkJCSBsZTE2X3RvX2NwdShkZXNjLT5pZFByb2R1Y3QpLAorCQkJIGJjZERldmljZSA+PiA4LCBiY2REZXZpY2UgJiAweGZmKTsKKwlyZXR1cm4gc3RhcnQ7Cit9CisKKy8qCisgKiBEdW1wIHRoZSBkaWZmZXJlbnQgc3RyaW5ncyB0aGF0IHRoaXMgZGV2aWNlIGhvbGRzLgorICovCitzdGF0aWMgY2hhciAqdXNiX2R1bXBfZGV2aWNlX3N0cmluZ3MgKGNoYXIgKnN0YXJ0LCBjaGFyICplbmQsIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJaWYgKHN0YXJ0ID4gZW5kKQorCQlyZXR1cm4gc3RhcnQ7CisJaWYgKGRldi0+bWFudWZhY3R1cmVyKQorCQlzdGFydCArPSBzcHJpbnRmKHN0YXJ0LCBmb3JtYXRfc3RyaW5nX21hbnVmYWN0dXJlciwgZGV2LT5tYW51ZmFjdHVyZXIpOworCWlmIChzdGFydCA+IGVuZCkKKwkJZ290byBvdXQ7CisJaWYgKGRldi0+cHJvZHVjdCkKKwkJc3RhcnQgKz0gc3ByaW50ZihzdGFydCwgZm9ybWF0X3N0cmluZ19wcm9kdWN0LCBkZXYtPnByb2R1Y3QpOworCWlmIChzdGFydCA+IGVuZCkKKwkJZ290byBvdXQ7CisjaWZkZWYgQUxMT1dfU0VSSUFMX05VTUJFUgorCWlmIChkZXYtPnNlcmlhbCkKKwkJc3RhcnQgKz0gc3ByaW50ZihzdGFydCwgZm9ybWF0X3N0cmluZ19zZXJpYWxudW1iZXIsIGRldi0+c2VyaWFsKTsKKyNlbmRpZgorIG91dDoKKwlyZXR1cm4gc3RhcnQ7Cit9CisKK3N0YXRpYyBjaGFyICp1c2JfZHVtcF9kZXNjKGNoYXIgKnN0YXJ0LCBjaGFyICplbmQsIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJaW50IGk7CisKKwlpZiAoc3RhcnQgPiBlbmQpCisJCXJldHVybiBzdGFydDsKKwkJCisJc3RhcnQgPSB1c2JfZHVtcF9kZXZpY2VfZGVzY3JpcHRvcihzdGFydCwgZW5kLCAmZGV2LT5kZXNjcmlwdG9yKTsKKworCWlmIChzdGFydCA+IGVuZCkKKwkJcmV0dXJuIHN0YXJ0OworCQorCXN0YXJ0ID0gdXNiX2R1bXBfZGV2aWNlX3N0cmluZ3MgKHN0YXJ0LCBlbmQsIGRldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9uczsgaSsrKSB7CisJCWlmIChzdGFydCA+IGVuZCkKKwkJCXJldHVybiBzdGFydDsKKwkJc3RhcnQgPSB1c2JfZHVtcF9jb25maWcoZGV2LT5zcGVlZCwKKwkJCQlzdGFydCwgZW5kLCBkZXYtPmNvbmZpZyArIGksCisJCQkJLyogYWN0aXZlID8gKi8KKwkJCQkoZGV2LT5jb25maWcgKyBpKSA9PSBkZXYtPmFjdGNvbmZpZyk7CisJfQorCXJldHVybiBzdGFydDsKK30KKworCisjaWZkZWYgUFJPQ19FWFRSQSAvKiBUQkQ6IG1heSB3YW50IHRvIGFkZCB0aGlzIGNvZGUgbGF0ZXIgKi8KKworc3RhdGljIGNoYXIgKnVzYl9kdW1wX2h1Yl9kZXNjcmlwdG9yKGNoYXIgKnN0YXJ0LCBjaGFyICplbmQsIGNvbnN0IHN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgKiBkZXNjKQoreworCWludCBsZW5nID0gVVNCX0RUX0hVQl9OT05WQVJfU0laRTsKKwl1bnNpZ25lZCBjaGFyICpwdHIgPSAodW5zaWduZWQgY2hhciAqKWRlc2M7CisKKwlpZiAoc3RhcnQgPiBlbmQpCisJCXJldHVybiBzdGFydDsKKwlzdGFydCArPSBzcHJpbnRmKHN0YXJ0LCAiSW50ZXJmYWNlOiIpOworCXdoaWxlIChsZW5nICYmIHN0YXJ0IDw9IGVuZCkgeworCQlzdGFydCArPSBzcHJpbnRmKHN0YXJ0LCAiICUwMngiLCAqcHRyKTsKKwkJcHRyKys7IGxlbmctLTsKKwl9CisJKnN0YXJ0KysgPSAnXG4nOworCXJldHVybiBzdGFydDsKK30KKworc3RhdGljIGNoYXIgKnVzYl9kdW1wX3N0cmluZyhjaGFyICpzdGFydCwgY2hhciAqZW5kLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBjaGFyICppZCwgaW50IGluZGV4KQoreworCWlmIChzdGFydCA+IGVuZCkKKwkJcmV0dXJuIHN0YXJ0OworCXN0YXJ0ICs9IHNwcmludGYoc3RhcnQsICJJbnRlcmZhY2U6Iik7CisJaWYgKGluZGV4IDw9IGRldi0+bWF4c3RyaW5nICYmIGRldi0+c3RyaW5naW5kZXggJiYgZGV2LT5zdHJpbmdpbmRleFtpbmRleF0pCisJCXN0YXJ0ICs9IHNwcmludGYoc3RhcnQsICIlczogJS4xMDBzICIsIGlkLCBkZXYtPnN0cmluZ2luZGV4W2luZGV4XSk7CisJcmV0dXJuIHN0YXJ0OworfQorCisjZW5kaWYgLyogUFJPQ19FWFRSQSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgaXMgYSByZWN1cnNpdmUgZnVuY3Rpb24uIFBhcmFtZXRlcnM6CisgKiBidWZmZXIgLSB0aGUgdXNlci1zcGFjZSBidWZmZXIgdG8gd3JpdGUgZGF0YSBpbnRvCisgKiBuYnl0ZXMgLSB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKKyAqIHNraXBfYnl0ZXMgLSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAgYmVmb3JlIHdyaXRpbmcgYW55dGhpbmcKKyAqIGZpbGVfb2Zmc2V0IC0gdGhlIG9mZnNldCBpbnRvIHRoZSBkZXZpY2VzIGZpbGUgb24gY29tcGxldGlvbgorICogVGhlIGNhbGxlciBtdXN0IG93biB0aGUgZGV2aWNlIGxvY2suCisgKi8KK3N0YXRpYyBzc2l6ZV90IHVzYl9kZXZpY2VfZHVtcChjaGFyIF9fdXNlciAqKmJ1ZmZlciwgc2l6ZV90ICpuYnl0ZXMsIGxvZmZfdCAqc2tpcF9ieXRlcywgbG9mZl90ICpmaWxlX29mZnNldCwKKwkJCQlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2LCBzdHJ1Y3QgdXNiX2J1cyAqYnVzLCBpbnQgbGV2ZWwsIGludCBpbmRleCwgaW50IGNvdW50KQoreworCWludCBjaGl4OworCWludCByZXQsIGNudCA9IDA7CisJaW50IHBhcmVudF9kZXZudW0gPSAwOworCWNoYXIgKnBhZ2VzX3N0YXJ0LCAqZGF0YV9lbmQsICpzcGVlZDsKKwl1bnNpZ25lZCBpbnQgbGVuZ3RoOworCXNzaXplX3QgdG90YWxfd3JpdHRlbiA9IDA7CisJCisJLyogZG9uJ3QgYm90aGVyIHdpdGggYW55dGhpbmcgZWxzZSBpZiB3ZSdyZSBub3Qgd3JpdGluZyBhbnkgZGF0YSAqLworCWlmICgqbmJ5dGVzIDw9IDApCisJCXJldHVybiAwOworCQorCWlmIChsZXZlbCA+IE1BWF9UT1BPX0xFVkVMKQorCQlyZXR1cm4gMDsKKwkvKiBhbGxvY2F0ZSAyXjEgcGFnZXMgPSA4SyAob24gaTM4Nik7IHNob3VsZCBiZSBtb3JlIHRoYW4gZW5vdWdoIGZvciBvbmUgZGV2aWNlICovCisgICAgICAgIGlmICghKHBhZ2VzX3N0YXJ0ID0gKGNoYXIqKSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsMSkpKQorICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworCQkKKwlpZiAodXNiZGV2LT5wYXJlbnQgJiYgdXNiZGV2LT5wYXJlbnQtPmRldm51bSAhPSAtMSkKKwkJcGFyZW50X2Rldm51bSA9IHVzYmRldi0+cGFyZW50LT5kZXZudW07CisJLyoKKwkgKiBTbyB0aGUgcm9vdCBodWIncyBwYXJlbnQgaXMgMCBhbmQgYW55IGRldmljZSB0aGF0IGlzCisJICogcGx1Z2dlZCBpbnRvIHRoZSByb290IGh1YiBoYXMgYSBwYXJlbnQgb2YgMC4KKwkgKi8KKwlzd2l0Y2ggKHVzYmRldi0+c3BlZWQpIHsKKwljYXNlIFVTQl9TUEVFRF9MT1c6CisJCXNwZWVkID0gIjEuNSI7IGJyZWFrOworCWNhc2UgVVNCX1NQRUVEX1VOS05PV046CQkvKiB1c2IgMS4xIHJvb3QgaHViIGNvZGUgKi8KKwljYXNlIFVTQl9TUEVFRF9GVUxMOgorCQlzcGVlZCA9ICIxMiAiOyBicmVhazsKKwljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQlzcGVlZCA9ICI0ODAiOyBicmVhazsKKwlkZWZhdWx0OgorCQlzcGVlZCA9ICI/PyAiOworCX0KKwlkYXRhX2VuZCA9IHBhZ2VzX3N0YXJ0ICsgc3ByaW50ZihwYWdlc19zdGFydCwgZm9ybWF0X3RvcG8sCisJCQlidXMtPmJ1c251bSwgbGV2ZWwsIHBhcmVudF9kZXZudW0sCisJCQlpbmRleCwgY291bnQsIHVzYmRldi0+ZGV2bnVtLAorCQkJc3BlZWQsIHVzYmRldi0+bWF4Y2hpbGQpOworCS8qCisJICogbGV2ZWwgPSB0b3BvbG9neS10aWVyIGxldmVsOworCSAqIHBhcmVudF9kZXZudW0gPSBwYXJlbnQgZGV2aWNlIG51bWJlcjsKKwkgKiBpbmRleCA9IHBhcmVudCdzIGNvbm5lY3RvciBudW1iZXI7CisJICogY291bnQgPSBkZXZpY2UgY291bnQgYXQgdGhpcyBsZXZlbAorCSAqLworCS8qIElmIHRoaXMgaXMgdGhlIHJvb3QgaHViLCBkaXNwbGF5IHRoZSBiYW5kd2lkdGggaW5mb3JtYXRpb24gKi8KKwlpZiAobGV2ZWwgPT0gMCkgeworCQlpbnQJbWF4OworCisJCS8qIGhpZ2ggc3BlZWQgcmVzZXJ2ZXMgODAlLCBmdWxsL2xvdyByZXNlcnZlcyA5MCUgKi8KKwkJaWYgKHVzYmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCisJCQltYXggPSA4MDA7CisJCWVsc2UKKwkJCW1heCA9IEZSQU1FX1RJTUVfTUFYX1VTRUNTX0FMTE9DOworCisJCS8qIHJlcG9ydCAiYXZlcmFnZSIgcGVyaW9kaWMgYWxsb2NhdGlvbiBvdmVyIGEgbWljcm9zZWNvbmQuCisJCSAqIHRoZSBzY2hlZHVsZXMgYXJlIGFjdHVhbGx5IGJ1cnN0eSwgSENEcyBuZWVkIHRvIGRlYWwgd2l0aAorCQkgKiB0aGF0IGFuZCBqdXN0IGNvbXB1dGUvcmVwb3J0IHRoaXMgYXZlcmFnZS4KKwkJICovCisJCWRhdGFfZW5kICs9IHNwcmludGYoZGF0YV9lbmQsIGZvcm1hdF9iYW5kd2lkdGgsCisJCQkJYnVzLT5iYW5kd2lkdGhfYWxsb2NhdGVkLCBtYXgsCisJCQkJKDEwMCAqIGJ1cy0+YmFuZHdpZHRoX2FsbG9jYXRlZCArIG1heCAvIDIpCisJCQkJCS8gbWF4LAorCQkJICAgICAgICAgYnVzLT5iYW5kd2lkdGhfaW50X3JlcXMsCisJCQkJIGJ1cy0+YmFuZHdpZHRoX2lzb2NfcmVxcyk7CisJCisJfQorCWRhdGFfZW5kID0gdXNiX2R1bXBfZGVzYyhkYXRhX2VuZCwgcGFnZXNfc3RhcnQgKyAoMiAqIFBBR0VfU0laRSkgLSAyNTYsIHVzYmRldik7CisJCisJaWYgKGRhdGFfZW5kID4gKHBhZ2VzX3N0YXJ0ICsgKDIgKiBQQUdFX1NJWkUpIC0gMjU2KSkKKwkJZGF0YV9lbmQgKz0gc3ByaW50ZihkYXRhX2VuZCwgIih0cnVuY2F0ZWQpXG4iKTsKKwkKKwlsZW5ndGggPSBkYXRhX2VuZCAtIHBhZ2VzX3N0YXJ0OworCS8qIGlmIHdlIGNhbiBzdGFydCBjb3B5aW5nIHNvbWUgZGF0YSB0byB0aGUgdXNlciAqLworCWlmIChsZW5ndGggPiAqc2tpcF9ieXRlcykgeworCQlsZW5ndGggLT0gKnNraXBfYnl0ZXM7CisJCWlmIChsZW5ndGggPiAqbmJ5dGVzKQorCQkJbGVuZ3RoID0gKm5ieXRlczsKKwkJaWYgKGNvcHlfdG9fdXNlcigqYnVmZmVyLCBwYWdlc19zdGFydCArICpza2lwX2J5dGVzLCBsZW5ndGgpKSB7CisJCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBhZ2VzX3N0YXJ0LCAxKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJCSpuYnl0ZXMgLT0gbGVuZ3RoOworCQkqZmlsZV9vZmZzZXQgKz0gbGVuZ3RoOworCQl0b3RhbF93cml0dGVuICs9IGxlbmd0aDsKKwkJKmJ1ZmZlciArPSBsZW5ndGg7CisJCSpza2lwX2J5dGVzID0gMDsKKwl9IGVsc2UKKwkJKnNraXBfYnl0ZXMgLT0gbGVuZ3RoOworCQorCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcGFnZXNfc3RhcnQsIDEpOworCQorCS8qIE5vdyBsb29rIGF0IGFsbCBvZiB0aGlzIGRldmljZSdzIGNoaWxkcmVuLiAqLworCWZvciAoY2hpeCA9IDA7IGNoaXggPCB1c2JkZXYtPm1heGNoaWxkOyBjaGl4KyspIHsKKwkJc3RydWN0IHVzYl9kZXZpY2UgKmNoaWxkZGV2ID0gdXNiZGV2LT5jaGlsZHJlbltjaGl4XTsKKworCQlpZiAoY2hpbGRkZXYpIHsKKwkJCWRvd24oJmNoaWxkZGV2LT5zZXJpYWxpemUpOworCQkJcmV0ID0gdXNiX2RldmljZV9kdW1wKGJ1ZmZlciwgbmJ5dGVzLCBza2lwX2J5dGVzLCBmaWxlX29mZnNldCwgY2hpbGRkZXYsCisJCQkJCWJ1cywgbGV2ZWwgKyAxLCBjaGl4LCArK2NudCk7CisJCQl1cCgmY2hpbGRkZXYtPnNlcmlhbGl6ZSk7CisJCQlpZiAocmV0ID09IC1FRkFVTFQpCisJCQkJcmV0dXJuIHRvdGFsX3dyaXR0ZW47CisJCQl0b3RhbF93cml0dGVuICs9IHJldDsKKwkJfQorCX0KKwlyZXR1cm4gdG90YWxfd3JpdHRlbjsKK30KKworc3RhdGljIHNzaXplX3QgdXNiX2RldmljZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHVzYl9idXMgKmJ1czsKKwlzc2l6ZV90IHJldCwgdG90YWxfd3JpdHRlbiA9IDA7CisJbG9mZl90IHNraXBfYnl0ZXMgPSAqcHBvczsKKworCWlmICgqcHBvcyA8IDApCisJCXJldHVybiAtRUlOVkFMOworCWlmIChuYnl0ZXMgPD0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBidWYsIG5ieXRlcykpCisJCXJldHVybiAtRUZBVUxUOworCisJZG93biAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKwkvKiBwcmludCBkZXZpY2VzIGZvciBhbGwgYnVzc2VzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShidXMsICZ1c2JfYnVzX2xpc3QsIGJ1c19saXN0KSB7CisJCS8qIHJlY3Vyc2UgdGhyb3VnaCBhbGwgY2hpbGRyZW4gb2YgdGhlIHJvb3QgaHViICovCisJCWlmICghYnVzLT5yb290X2h1YikKKwkJCWNvbnRpbnVlOworCQl1c2JfbG9ja19kZXZpY2UoYnVzLT5yb290X2h1Yik7CisJCXJldCA9IHVzYl9kZXZpY2VfZHVtcCgmYnVmLCAmbmJ5dGVzLCAmc2tpcF9ieXRlcywgcHBvcywgYnVzLT5yb290X2h1YiwgYnVzLCAwLCAwLCAwKTsKKwkJdXNiX3VubG9ja19kZXZpY2UoYnVzLT5yb290X2h1Yik7CisJCWlmIChyZXQgPCAwKSB7CisJCQl1cCgmdXNiX2J1c19saXN0X2xvY2spOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQl0b3RhbF93cml0dGVuICs9IHJldDsKKwl9CisJdXAgKCZ1c2JfYnVzX2xpc3RfbG9jayk7CisJcmV0dXJuIHRvdGFsX3dyaXR0ZW47Cit9CisKKy8qIEtlcm5lbCBsb2NrIGZvciAibGFzdGV2IiBwcm90ZWN0aW9uICovCitzdGF0aWMgdW5zaWduZWQgaW50IHVzYl9kZXZpY2VfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0cnVjdCB1c2JfZGV2aWNlX3N0YXR1cyAqc3QgPSAoc3RydWN0IHVzYl9kZXZpY2Vfc3RhdHVzICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKKworCWxvY2tfa2VybmVsKCk7CisJaWYgKCFzdCkgeworCQlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfZGV2aWNlX3N0YXR1cyksIEdGUF9LRVJORUwpOworCQlpZiAoIXN0KSB7CisJCQl1bmxvY2tfa2VybmVsKCk7CisJCQlyZXR1cm4gUE9MTElOOworCQl9CisJCQorCQkvKiB3ZSBtYXkgaGF2ZSBkcm9wcGVkIEJLTCAtIG5lZWQgdG8gY2hlY2sgZm9yIGhhdmluZyBsb3N0IHRoZSByYWNlICovCisJCWlmIChmaWxlLT5wcml2YXRlX2RhdGEpIHsKKwkJCWtmcmVlKHN0KTsKKwkJCXN0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCQkJZ290byBsb3N0X3JhY2U7CisJCX0KKworCQkvKgorCQkgKiBuZWVkIHRvIHByZXZlbnQgdGhlIG1vZHVsZSBmcm9tIGJlaW5nIHVubG9hZGVkLCBzaW5jZQorCQkgKiBwcm9jX3VucmVnaXN0ZXIgZG9lcyBub3QgY2FsbCB0aGUgcmVsZWFzZSBtZXRob2QgYW5kCisJCSAqIHdlIHdvdWxkIGhhdmUgYSBtZW1vcnkgbGVhaworCQkgKi8KKwkJc3QtPmxhc3RldiA9IGNvbm5kaXNjZXZjbnQ7CisJCWZpbGUtPnByaXZhdGVfZGF0YSA9IHN0OworCQltYXNrID0gUE9MTElOOworCX0KK2xvc3RfcmFjZToKKwlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkKKyAgICAgICAgICAgICAgICBwb2xsX3dhaXQoZmlsZSwgJmRldmljZWNvbm5kaXNjd3EsIHdhaXQpOworCWlmIChzdC0+bGFzdGV2ICE9IGNvbm5kaXNjZXZjbnQpCisJCW1hc2sgfD0gUE9MTElOOworCXN0LT5sYXN0ZXYgPSBjb25uZGlzY2V2Y250OworCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIGludCB1c2JfZGV2aWNlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisgICAgICAgIGZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzYl9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhKSB7CisJCWtmcmVlKGZpbGUtPnByaXZhdGVfZGF0YSk7CisJCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJfQorCisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgbG9mZl90IHVzYl9kZXZpY2VfbHNlZWsoc3RydWN0IGZpbGUgKiBmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZykKK3sKKwlsb2ZmX3QgcmV0OworCisJbG9ja19rZXJuZWwoKTsKKworCXN3aXRjaCAob3JpZykgeworCWNhc2UgMDoKKwkJZmlsZS0+Zl9wb3MgPSBvZmZzZXQ7CisJCXJldCA9IGZpbGUtPmZfcG9zOworCQlicmVhazsKKwljYXNlIDE6CisJCWZpbGUtPmZfcG9zICs9IG9mZnNldDsKKwkJcmV0ID0gZmlsZS0+Zl9wb3M7CisJCWJyZWFrOworCWNhc2UgMjoKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCX0KKworCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYmZzX2RldmljZXNfZm9wcyA9IHsKKwkubGxzZWVrID0JdXNiX2RldmljZV9sc2VlaywKKwkucmVhZCA9CQl1c2JfZGV2aWNlX3JlYWQsCisJLnBvbGwgPQkJdXNiX2RldmljZV9wb2xsLAorCS5vcGVuID0JCXVzYl9kZXZpY2Vfb3BlbiwKKwkucmVsZWFzZSA9CXVzYl9kZXZpY2VfcmVsZWFzZSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA0N2JjMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwpAQCAtMCwwICsxLDE0ODMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqICAgICAgZGV2aW8uYyAgLS0gIFVzZXIgc3BhY2UgY29tbXVuaWNhdGlvbiB3aXRoIFVTQiBkZXZpY2VzLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgIFRob21hcyBTYWlsZXIgKHNhaWxlckBpZmUuZWUuZXRoei5jaCkKKyAqCisgKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogICRJZDogZGV2aW8uYyx2IDEuNyAyMDAwLzAyLzAxIDE3OjI4OjQ4IGZsaWVnbCBFeHAgJAorICoKKyAqICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgdXNiZnMveC95IGZpbGVzLCB3aGVyZQorICogIHggaXMgdGhlIGJ1cyBudW1iZXIgYW5kIHkgdGhlIGRldmljZSBudW1iZXIuCisgKgorICogIEl0IGFsbG93cyB1c2VyIHNwYWNlIHByb2dyYW1zLyJkcml2ZXJzIiB0byBjb21tdW5pY2F0ZSBkaXJlY3RseQorICogIHdpdGggVVNCIGRldmljZXMgd2l0aG91dCBpbnRlcnZlbmluZyBrZXJuZWwgZHJpdmVyLgorICoKKyAqICBSZXZpc2lvbiBoaXN0b3J5CisgKiAgICAyMi4xMi4xOTk5ICAgMC4xICAgSW5pdGlhbCByZWxlYXNlIChzcGxpdCBmcm9tIHByb2NfdXNiLmMpCisgKiAgICAwNC4wMS4yMDAwICAgMC4yICAgVHVybmVkIGludG8gaXRzIG93biBmaWxlc3lzdGVtCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JkZXZpY2VfZnMuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorCisjaW5jbHVkZSAiaGNkLmgiCS8qIGZvciB1c2Jjb3JlIGludGVybmFscyAqLworI2luY2x1ZGUgInVzYi5oIgorCitzdHJ1Y3QgYXN5bmMgeworCXN0cnVjdCBsaXN0X2hlYWQgYXN5bmNsaXN0OworCXN0cnVjdCBkZXZfc3RhdGUgKnBzOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwl1bnNpZ25lZCBpbnQgc2lnbnI7CisJdW5zaWduZWQgaW50IGlmbnVtOworCXZvaWQgX191c2VyICp1c2VyYnVmZmVyOworCXZvaWQgX191c2VyICp1c2VydXJiOworCXN0cnVjdCB1cmIgKnVyYjsKK307CisKK3N0YXRpYyBpbnQgdXNiZnNfc25vb3AgPSAwOworbW9kdWxlX3BhcmFtICh1c2Jmc19zbm9vcCwgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyAodXNiZnNfc25vb3AsICJ0cnVlIHRvIGxvZyBhbGwgdXNiZnMgdHJhZmZpYyIpOworCisjZGVmaW5lIHNub29wKGRldiwgZm9ybWF0LCBhcmcuLi4pCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJaWYgKHVzYmZzX3Nub29wKQkJCQlcCisJCQlkZXZfaW5mbyggZGV2ICwgZm9ybWF0ICwgIyMgYXJnKTsJXAorCX0gd2hpbGUgKDApCisKKworI2RlZmluZQlNQVhfVVNCRlNfQlVGRkVSX1NJWkUJMTYzODQKKworc3RhdGljIGlubGluZSBpbnQgY29ubmVjdGVkIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPnN0YXRlICE9IFVTQl9TVEFURV9OT1RBVFRBQ0hFRDsKK30KKworc3RhdGljIGxvZmZfdCB1c2JkZXZfbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnKQoreworCWxvZmZfdCByZXQ7CisKKwlsb2NrX2tlcm5lbCgpOworCisJc3dpdGNoIChvcmlnKSB7CisJY2FzZSAwOgorCQlmaWxlLT5mX3BvcyA9IG9mZnNldDsKKwkJcmV0ID0gZmlsZS0+Zl9wb3M7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZmlsZS0+Zl9wb3MgKz0gb2Zmc2V0OworCQlyZXQgPSBmaWxlLT5mX3BvczsKKwkJYnJlYWs7CisJY2FzZSAyOgorCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHVzYmRldl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGRldl9zdGF0ZSAqcHMgPSAoc3RydWN0IGRldl9zdGF0ZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcHMtPmRldjsKKwlzc2l6ZV90IHJldCA9IDA7CisJdW5zaWduZWQgbGVuOworCWxvZmZfdCBwb3M7CisJaW50IGk7CisKKwlwb3MgPSAqcHBvczsKKwl1c2JfbG9ja19kZXZpY2UoZGV2KTsKKwlpZiAoIWNvbm5lY3RlZChkZXYpKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyOworCX0gZWxzZSBpZiAocG9zIDwgMCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKKwlpZiAocG9zIDwgc2l6ZW9mKHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IpKSB7CisJCXN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgKmRlc2MgPSBrbWFsbG9jKHNpemVvZigqZGVzYyksIEdGUF9LRVJORUwpOworCQlpZiAoIWRlc2MpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycjsKKwkJfQorCQltZW1jcHkoZGVzYywgJmRldi0+ZGVzY3JpcHRvciwgc2l6ZW9mKGRldi0+ZGVzY3JpcHRvcikpOworCQlsZTE2X3RvX2NwdXMoJmRlc2MtPmJjZFVTQik7CisJCWxlMTZfdG9fY3B1cygmZGVzYy0+aWRWZW5kb3IpOworCQlsZTE2X3RvX2NwdXMoJmRlc2MtPmlkUHJvZHVjdCk7CisJCWxlMTZfdG9fY3B1cygmZGVzYy0+YmNkRGV2aWNlKTsKKworCQlsZW4gPSBzaXplb2Yoc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvcikgLSBwb3M7CisJCWlmIChsZW4gPiBuYnl0ZXMpCisJCQlsZW4gPSBuYnl0ZXM7CisJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCAoKGNoYXIgKilkZXNjKSArIHBvcywgbGVuKSkgeworCQkJa2ZyZWUoZGVzYyk7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBlcnI7CisJCX0KKwkJa2ZyZWUoZGVzYyk7CisKKwkJKnBwb3MgKz0gbGVuOworCQlidWYgKz0gbGVuOworCQluYnl0ZXMgLT0gbGVuOworCQlyZXQgKz0gbGVuOworCX0KKworCXBvcyA9IHNpemVvZihzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yKTsKKwlmb3IgKGkgPSAwOyBuYnl0ZXMgJiYgaSA8IGRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnM7IGkrKykgeworCQlzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yICpjb25maWcgPQorCQkJKHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgKilkZXYtPnJhd2Rlc2NyaXB0b3JzW2ldOworCQl1bnNpZ25lZCBpbnQgbGVuZ3RoID0gbGUxNl90b19jcHUoY29uZmlnLT53VG90YWxMZW5ndGgpOworCisJCWlmICgqcHBvcyA8IHBvcyArIGxlbmd0aCkgeworCisJCQkvKiBUaGUgZGVzY3JpcHRvciBtYXkgY2xhaW0gdG8gYmUgbG9uZ2VyIHRoYW4gaXQKKwkJCSAqIHJlYWxseSBpcy4gIEhlcmUgaXMgdGhlIGFjdHVhbCBhbGxvY2F0ZWQgbGVuZ3RoLiAqLworCQkJdW5zaWduZWQgYWxsb2NsZW4gPQorCQkJCWxlMTZfdG9fY3B1KGRldi0+Y29uZmlnW2ldLmRlc2Mud1RvdGFsTGVuZ3RoKTsKKworCQkJbGVuID0gbGVuZ3RoIC0gKCpwcG9zIC0gcG9zKTsKKwkJCWlmIChsZW4gPiBuYnl0ZXMpCisJCQkJbGVuID0gbmJ5dGVzOworCisJCQkvKiBTaW1wbHkgZG9uJ3Qgd3JpdGUgKHNraXAgb3ZlcikgdW5hbGxvY2F0ZWQgcGFydHMgKi8KKwkJCWlmIChhbGxvY2xlbiA+ICgqcHBvcyAtIHBvcykpIHsKKwkJCQlhbGxvY2xlbiAtPSAoKnBwb3MgLSBwb3MpOworCQkJCWlmIChjb3B5X3RvX3VzZXIoYnVmLAorCQkJCSAgICBkZXYtPnJhd2Rlc2NyaXB0b3JzW2ldICsgKCpwcG9zIC0gcG9zKSwKKwkJCQkgICAgbWluKGxlbiwgYWxsb2NsZW4pKSkgeworCQkJCQlyZXQgPSAtRUZBVUxUOworCQkJCQlnb3RvIGVycjsKKwkJCQl9CisJCQl9CisKKwkJCSpwcG9zICs9IGxlbjsKKwkJCWJ1ZiArPSBsZW47CisJCQluYnl0ZXMgLT0gbGVuOworCQkJcmV0ICs9IGxlbjsKKwkJfQorCisJCXBvcyArPSBsZW5ndGg7CisJfQorCitlcnI6CisJdXNiX3VubG9ja19kZXZpY2UoZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogYXN5bmMgbGlzdCBoYW5kbGluZworICovCisKK3N0YXRpYyBzdHJ1Y3QgYXN5bmMgKmFsbG9jX2FzeW5jKHVuc2lnbmVkIGludCBudW1pc29mcmFtZXMpCit7CisgICAgICAgIHVuc2lnbmVkIGludCBhc3NpemUgPSBzaXplb2Yoc3RydWN0IGFzeW5jKSArIG51bWlzb2ZyYW1lcyAqIHNpemVvZihzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvcik7CisgICAgICAgIHN0cnVjdCBhc3luYyAqYXMgPSBrbWFsbG9jKGFzc2l6ZSwgR0ZQX0tFUk5FTCk7CisgICAgICAgIGlmICghYXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIG1lbXNldChhcywgMCwgYXNzaXplKTsKKwlhcy0+dXJiID0gdXNiX2FsbG9jX3VyYihudW1pc29mcmFtZXMsIEdGUF9LRVJORUwpOworCWlmICghYXMtPnVyYikgeworCQlrZnJlZShhcyk7CisJCXJldHVybiBOVUxMOworCX0KKyAgICAgICAgcmV0dXJuIGFzOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2FzeW5jKHN0cnVjdCBhc3luYyAqYXMpCit7CisgICAgICAgIGlmIChhcy0+dXJiLT50cmFuc2Zlcl9idWZmZXIpCisgICAgICAgICAgICAgICAga2ZyZWUoYXMtPnVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKyAgICAgICAgaWYgKGFzLT51cmItPnNldHVwX3BhY2tldCkKKyAgICAgICAgICAgICAgICBrZnJlZShhcy0+dXJiLT5zZXR1cF9wYWNrZXQpOworCXVzYl9mcmVlX3VyYihhcy0+dXJiKTsKKyAgICAgICAga2ZyZWUoYXMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXN5bmNfbmV3cGVuZGluZyhzdHJ1Y3QgYXN5bmMgKmFzKQoreworICAgICAgICBzdHJ1Y3QgZGV2X3N0YXRlICpwcyA9IGFzLT5wczsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICAgICAgCisgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZwcy0+bG9jaywgZmxhZ3MpOworICAgICAgICBsaXN0X2FkZF90YWlsKCZhcy0+YXN5bmNsaXN0LCAmcHMtPmFzeW5jX3BlbmRpbmcpOworICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcy0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXN5bmNfcmVtb3ZlcGVuZGluZyhzdHJ1Y3QgYXN5bmMgKmFzKQoreworICAgICAgICBzdHJ1Y3QgZGV2X3N0YXRlICpwcyA9IGFzLT5wczsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICAgICAgCisgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZwcy0+bG9jaywgZmxhZ3MpOworICAgICAgICBsaXN0X2RlbF9pbml0KCZhcy0+YXN5bmNsaXN0KTsKKyAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHMtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYXN5bmMgKmFzeW5jX2dldGNvbXBsZXRlZChzdHJ1Y3QgZGV2X3N0YXRlICpwcykKK3sKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICAgICAgc3RydWN0IGFzeW5jICphcyA9IE5VTEw7CisKKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnBzLT5sb2NrLCBmbGFncyk7CisgICAgICAgIGlmICghbGlzdF9lbXB0eSgmcHMtPmFzeW5jX2NvbXBsZXRlZCkpIHsKKyAgICAgICAgICAgICAgICBhcyA9IGxpc3RfZW50cnkocHMtPmFzeW5jX2NvbXBsZXRlZC5uZXh0LCBzdHJ1Y3QgYXN5bmMsIGFzeW5jbGlzdCk7CisgICAgICAgICAgICAgICAgbGlzdF9kZWxfaW5pdCgmYXMtPmFzeW5jbGlzdCk7CisgICAgICAgIH0KKyAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHMtPmxvY2ssIGZsYWdzKTsKKyAgICAgICAgcmV0dXJuIGFzOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhc3luYyAqYXN5bmNfZ2V0cGVuZGluZyhzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKnVzZXJ1cmIpCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAgICAgIHN0cnVjdCBhc3luYyAqYXM7CisKKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnBzLT5sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShhcywgJnBzLT5hc3luY19wZW5kaW5nLCBhc3luY2xpc3QpCisJCWlmIChhcy0+dXNlcnVyYiA9PSB1c2VydXJiKSB7CisJCQlsaXN0X2RlbF9pbml0KCZhcy0+YXN5bmNsaXN0KTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBzLT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gYXM7CisJCX0KKyAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHMtPmxvY2ssIGZsYWdzKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGFzeW5jX2NvbXBsZXRlZChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworICAgICAgICBzdHJ1Y3QgYXN5bmMgKmFzID0gKHN0cnVjdCBhc3luYyAqKXVyYi0+Y29udGV4dDsKKyAgICAgICAgc3RydWN0IGRldl9zdGF0ZSAqcHMgPSBhcy0+cHM7CisJc3RydWN0IHNpZ2luZm8gc2luZm87CisKKyAgICAgICAgc3Bpbl9sb2NrKCZwcy0+bG9jayk7CisgICAgICAgIGxpc3RfbW92ZV90YWlsKCZhcy0+YXN5bmNsaXN0LCAmcHMtPmFzeW5jX2NvbXBsZXRlZCk7CisgICAgICAgIHNwaW5fdW5sb2NrKCZwcy0+bG9jayk7CisJaWYgKGFzLT5zaWducikgeworCQlzaW5mby5zaV9zaWdubyA9IGFzLT5zaWducjsKKwkJc2luZm8uc2lfZXJybm8gPSBhcy0+dXJiLT5zdGF0dXM7CisJCXNpbmZvLnNpX2NvZGUgPSBTSV9BU1lOQ0lPOworCQlzaW5mby5zaV9hZGRyID0gYXMtPnVzZXJ1cmI7CisJCXNlbmRfc2lnX2luZm8oYXMtPnNpZ25yLCAmc2luZm8sIGFzLT50YXNrKTsKKwl9CisgICAgICAgIHdha2VfdXAoJnBzLT53YWl0KTsKK30KKworc3RhdGljIHZvaWQgZGVzdHJveV9hc3luYyAoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IGFzeW5jICphczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBzLT5sb2NrLCBmbGFncyk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KGxpc3QpKSB7CisJCWFzID0gbGlzdF9lbnRyeShsaXN0LT5uZXh0LCBzdHJ1Y3QgYXN5bmMsIGFzeW5jbGlzdCk7CisJCWxpc3RfZGVsX2luaXQoJmFzLT5hc3luY2xpc3QpOworCisJCS8qIGRyb3AgdGhlIHNwaW5sb2NrIHNvIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgY2FuIHJ1biAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcy0+bG9jaywgZmxhZ3MpOworCQl1c2Jfa2lsbF91cmIoYXMtPnVyYik7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcy0+bG9jaywgZmxhZ3MpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcy0+bG9jaywgZmxhZ3MpOworCWFzID0gYXN5bmNfZ2V0Y29tcGxldGVkKHBzKTsKKwl3aGlsZSAoYXMpIHsKKwkJZnJlZV9hc3luYyhhcyk7CisJCWFzID0gYXN5bmNfZ2V0Y29tcGxldGVkKHBzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfYXN5bmNfb25faW50ZXJmYWNlIChzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdW5zaWduZWQgaW50IGlmbnVtKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnAsICpxLCBoaXRsaXN0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlJTklUX0xJU1RfSEVBRCgmaGl0bGlzdCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBzLT5sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIHEsICZwcy0+YXN5bmNfcGVuZGluZykKKwkJaWYgKGlmbnVtID09IGxpc3RfZW50cnkocCwgc3RydWN0IGFzeW5jLCBhc3luY2xpc3QpLT5pZm51bSkKKwkJCWxpc3RfbW92ZV90YWlsKHAsICZoaXRsaXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcy0+bG9jaywgZmxhZ3MpOworCWRlc3Ryb3lfYXN5bmMocHMsICZoaXRsaXN0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlc3Ryb3lfYWxsX2FzeW5jKHN0cnVjdCBkZXZfc3RhdGUgKnBzKQoreworCSAgICAgICAgZGVzdHJveV9hc3luYyhwcywgJnBzLT5hc3luY19wZW5kaW5nKTsKK30KKworLyoKKyAqIGludGVyZmFjZSBjbGFpbXMgYXJlIG1hZGUgb25seSBhdCB0aGUgcmVxdWVzdCBvZiB1c2VyIGxldmVsIGNvZGUsCisgKiB3aGljaCBjYW4gYWxzbyByZWxlYXNlIHRoZW0gKGV4cGxpY2l0bHkgb3IgYnkgY2xvc2luZyBmaWxlcykuCisgKiB0aGV5J3JlIGFsc28gdW5kb25lIHdoZW4gZGV2aWNlcyBkaXNjb25uZWN0LgorICovCisKK3N0YXRpYyBpbnQgZHJpdmVyX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyB2b2lkIGRyaXZlcl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBkZXZfc3RhdGUgKnBzID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJdW5zaWduZWQgaW50IGlmbnVtID0gaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCisJaWYgKCFwcykKKwkJcmV0dXJuOworCisJLyogTk9URTogIHRoaXMgcmVsaWVzIG9uIHVzYmNvcmUgaGF2aW5nIGNhbmNlbGVkIGFuZCBjb21wbGV0ZWQKKwkgKiBhbGwgcGVuZGluZyBJL08gcmVxdWVzdHM7IDIuNiBkb2VzIHRoYXQuCisJICovCisKKwlpZiAobGlrZWx5KGlmbnVtIDwgOCpzaXplb2YocHMtPmlmY2xhaW1lZCkpKQorCQljbGVhcl9iaXQoaWZudW0sICZwcy0+aWZjbGFpbWVkKTsKKwllbHNlCisJCXdhcm4oImludGVyZmFjZSBudW1iZXIgJXUgb3V0IG9mIHJhbmdlIiwgaWZudW0pOworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisKKwkvKiBmb3JjZSBhc3luYyByZXF1ZXN0cyB0byBjb21wbGV0ZSAqLworCWRlc3Ryb3lfYXN5bmNfb25faW50ZXJmYWNlKHBzLCBpZm51bSk7Cit9CisKK3N0cnVjdCB1c2JfZHJpdmVyIHVzYmZzX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkidXNiZnMiLAorCS5wcm9iZSA9CWRyaXZlcl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CWRyaXZlcl9kaXNjb25uZWN0LAorfTsKKworc3RhdGljIGludCBjbGFpbWludGYoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHVuc2lnbmVkIGludCBpZm51bSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcHMtPmRldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlpbnQgZXJyOworCisJaWYgKGlmbnVtID49IDgqc2l6ZW9mKHBzLT5pZmNsYWltZWQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBhbHJlYWR5IGNsYWltZWQgKi8KKwlpZiAodGVzdF9iaXQoaWZudW0sICZwcy0+aWZjbGFpbWVkKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBsb2NrIGFnYWluc3Qgb3RoZXIgY2hhbmdlcyB0byBkcml2ZXIgYmluZGluZ3MgKi8KKwlkb3duX3dyaXRlKCZ1c2JfYnVzX3R5cGUuc3Vic3lzLnJ3c2VtKTsKKwlpbnRmID0gdXNiX2lmbnVtX3RvX2lmKGRldiwgaWZudW0pOworCWlmICghaW50ZikKKwkJZXJyID0gLUVOT0VOVDsKKwllbHNlCisJCWVyciA9IHVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKCZ1c2Jmc19kcml2ZXIsIGludGYsIHBzKTsKKwl1cF93cml0ZSgmdXNiX2J1c190eXBlLnN1YnN5cy5yd3NlbSk7CisJaWYgKGVyciA9PSAwKQorCQlzZXRfYml0KGlmbnVtLCAmcHMtPmlmY2xhaW1lZCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCByZWxlYXNlaW50ZihzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdW5zaWduZWQgaW50IGlmbnVtKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisJaW50IGVycjsKKworCWVyciA9IC1FSU5WQUw7CisJaWYgKGlmbnVtID49IDgqc2l6ZW9mKHBzLT5pZmNsYWltZWQpKQorCQlyZXR1cm4gZXJyOworCWRldiA9IHBzLT5kZXY7CisJLyogbG9jayBhZ2FpbnN0IG90aGVyIGNoYW5nZXMgdG8gZHJpdmVyIGJpbmRpbmdzICovCisJZG93bl93cml0ZSgmdXNiX2J1c190eXBlLnN1YnN5cy5yd3NlbSk7CisJaW50ZiA9IHVzYl9pZm51bV90b19pZihkZXYsIGlmbnVtKTsKKwlpZiAoIWludGYpCisJCWVyciA9IC1FTk9FTlQ7CisJZWxzZSBpZiAodGVzdF9hbmRfY2xlYXJfYml0KGlmbnVtLCAmcHMtPmlmY2xhaW1lZCkpIHsKKwkJdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZSgmdXNiZnNfZHJpdmVyLCBpbnRmKTsKKwkJZXJyID0gMDsKKwl9CisJdXBfd3JpdGUoJnVzYl9idXNfdHlwZS5zdWJzeXMucndzZW0pOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tpbnRmKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB1bnNpZ25lZCBpbnQgaWZudW0pCit7CisJaWYgKHBzLT5kZXYtPnN0YXRlICE9IFVTQl9TVEFURV9DT05GSUdVUkVEKQorCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKKwlpZiAoaWZudW0gPj0gOCpzaXplb2YocHMtPmlmY2xhaW1lZCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICh0ZXN0X2JpdChpZm51bSwgJnBzLT5pZmNsYWltZWQpKQorCQlyZXR1cm4gMDsKKwkvKiBpZiBub3QgeWV0IGNsYWltZWQsIGNsYWltIGl0IGZvciB0aGUgZHJpdmVyICovCisJZGV2X3dhcm4oJnBzLT5kZXYtPmRldiwgInVzYmZzOiBwcm9jZXNzICVkICglcykgZGlkIG5vdCBjbGFpbSBpbnRlcmZhY2UgJXUgYmVmb3JlIHVzZVxuIiwKKwkgICAgICAgY3VycmVudC0+cGlkLCBjdXJyZW50LT5jb21tLCBpZm51bSk7CisJcmV0dXJuIGNsYWltaW50ZihwcywgaWZudW0pOworfQorCitzdGF0aWMgaW50IGZpbmRpbnRmZXAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVwKQoreworCXVuc2lnbmVkIGludCBpLCBqLCBlOworICAgICAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcHQ7CisKKwlpZiAoZXAgJiB+KFVTQl9ESVJfSU58MHhmKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFkZXYtPmFjdGNvbmZpZykKKwkJcmV0dXJuIC1FU1JDSDsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgeworCQlpbnRmID0gZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVtpXTsKKwkJZm9yIChqID0gMDsgaiA8IGludGYtPm51bV9hbHRzZXR0aW5nOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsdHMgPSAmaW50Zi0+YWx0c2V0dGluZ1tqXTsKKwkJCWZvciAoZSA9IDA7IGUgPCBhbHRzLT5kZXNjLmJOdW1FbmRwb2ludHM7IGUrKykgeworCQkJCWVuZHB0ID0gJmFsdHMtPmVuZHBvaW50W2VdLmRlc2M7CisJCQkJaWYgKGVuZHB0LT5iRW5kcG9pbnRBZGRyZXNzID09IGVwKQorCQkJCQlyZXR1cm4gYWx0cy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCQkJfQorCQl9CisJfQorCXJldHVybiAtRU5PRU5UOyAKK30KKworc3RhdGljIGludCBjaGVja19jdHJscmVjaXAoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHVuc2lnbmVkIGludCByZXF1ZXN0dHlwZSwgdW5zaWduZWQgaW50IGluZGV4KQoreworCWludCByZXQgPSAwOworCisJaWYgKHBzLT5kZXYtPnN0YXRlICE9IFVTQl9TVEFURV9DT05GSUdVUkVEKQorCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKKwlpZiAoVVNCX1RZUEVfVkVORE9SID09IChVU0JfVFlQRV9NQVNLICYgcmVxdWVzdHR5cGUpKQorCQlyZXR1cm4gMDsKKworCWluZGV4ICY9IDB4ZmY7CisJc3dpdGNoIChyZXF1ZXN0dHlwZSAmIFVTQl9SRUNJUF9NQVNLKSB7CisJY2FzZSBVU0JfUkVDSVBfRU5EUE9JTlQ6CisJCWlmICgocmV0ID0gZmluZGludGZlcChwcy0+ZGV2LCBpbmRleCkpID49IDApCisJCQlyZXQgPSBjaGVja2ludGYocHMsIHJldCk7CisJCWJyZWFrOworCisJY2FzZSBVU0JfUkVDSVBfSU5URVJGQUNFOgorCQlyZXQgPSBjaGVja2ludGYocHMsIGluZGV4KTsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBmaWxlIG9wZXJhdGlvbnMKKyAqLworc3RhdGljIGludCB1c2JkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OworCXN0cnVjdCBkZXZfc3RhdGUgKnBzOworCWludCByZXQ7CisKKwkvKiAKKwkgKiBubyBsb2NraW5nIG5lY2Vzc2FyeSBoZXJlLCBhcyBjaHJkZXZfb3BlbiBoYXMgdGhlIGtlcm5lbCBsb2NrCisJICogKHN0aWxsIGFjcXVpcmUgdGhlIGtlcm5lbCBsb2NrIGZvciBzYWZldHkpCisJICovCisJcmV0ID0gLUVOT01FTTsKKwlpZiAoIShwcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZfc3RhdGUpLCBHRlBfS0VSTkVMKSkpCisJCWdvdG8gb3V0X25vbG9jazsKKworCWxvY2tfa2VybmVsKCk7CisJcmV0ID0gLUVOT0VOVDsKKwlkZXYgPSB1c2JfZ2V0X2Rldihpbm9kZS0+dS5nZW5lcmljX2lwKTsKKwlpZiAoIWRldikgeworCQlrZnJlZShwcyk7CisJCWdvdG8gb3V0OworCX0KKwlyZXQgPSAwOworCXBzLT5kZXYgPSBkZXY7CisJcHMtPmZpbGUgPSBmaWxlOworCXNwaW5fbG9ja19pbml0KCZwcy0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnBzLT5hc3luY19wZW5kaW5nKTsKKwlJTklUX0xJU1RfSEVBRCgmcHMtPmFzeW5jX2NvbXBsZXRlZCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcHMtPndhaXQpOworCXBzLT5kaXNjc2lnbnIgPSAwOworCXBzLT5kaXNjdGFzayA9IGN1cnJlbnQ7CisJcHMtPmRpc2Njb250ZXh0ID0gTlVMTDsKKwlwcy0+aWZjbGFpbWVkID0gMDsKKwl3bWIoKTsKKwlsaXN0X2FkZF90YWlsKCZwcy0+bGlzdCwgJmRldi0+ZmlsZWxpc3QpOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IHBzOworIG91dDoKKwl1bmxvY2tfa2VybmVsKCk7Cisgb3V0X25vbG9jazoKKyAgICAgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB1c2JkZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZGV2X3N0YXRlICpwcyA9IChzdHJ1Y3QgZGV2X3N0YXRlICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwcy0+ZGV2OworCXVuc2lnbmVkIGludCBpZm51bTsKKworCXVzYl9sb2NrX2RldmljZShkZXYpOworCWxpc3RfZGVsX2luaXQoJnBzLT5saXN0KTsKKwlmb3IgKGlmbnVtID0gMDsgcHMtPmlmY2xhaW1lZCAmJiBpZm51bSA8IDgqc2l6ZW9mKHBzLT5pZmNsYWltZWQpOworCQkJaWZudW0rKykgeworCQlpZiAodGVzdF9iaXQoaWZudW0sICZwcy0+aWZjbGFpbWVkKSkKKwkJCXJlbGVhc2VpbnRmKHBzLCBpZm51bSk7CisJfQorCWRlc3Ryb3lfYWxsX2FzeW5jKHBzKTsKKwl1c2JfdW5sb2NrX2RldmljZShkZXYpOworCXVzYl9wdXRfZGV2KGRldik7CisJcHMtPmRldiA9IE5VTEw7CisJa2ZyZWUocHMpOworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jX2NvbnRyb2woc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBzLT5kZXY7CisJc3RydWN0IHVzYmRldmZzX2N0cmx0cmFuc2ZlciBjdHJsOworCXVuc2lnbmVkIGludCB0bW87CisJdW5zaWduZWQgY2hhciAqdGJ1ZjsKKwlpbnQgaSwgaiwgcmV0OworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjdHJsLCBhcmcsIHNpemVvZihjdHJsKSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmICgocmV0ID0gY2hlY2tfY3RybHJlY2lwKHBzLCBjdHJsLmJSZXF1ZXN0VHlwZSwgY3RybC53SW5kZXgpKSkKKwkJcmV0dXJuIHJldDsKKwlpZiAoY3RybC53TGVuZ3RoID4gUEFHRV9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoISh0YnVmID0gKHVuc2lnbmVkIGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm4gLUVOT01FTTsKKwl0bW8gPSBjdHJsLnRpbWVvdXQ7CisJaWYgKGN0cmwuYlJlcXVlc3RUeXBlICYgMHg4MCkgeworCQlpZiAoY3RybC53TGVuZ3RoICYmICFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBjdHJsLmRhdGEsIGN0cmwud0xlbmd0aCkpIHsKKwkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl0YnVmKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXNub29wKCZkZXYtPmRldiwgImNvbnRyb2wgcmVhZDogYlJlcXVlc3Q9JTAyeCBiUnJlcXVlc3RUeXBlPSUwMnggd1ZhbHVlPSUwNHggd0luZGV4PSUwNHhcbiIsIAorCQkJY3RybC5iUmVxdWVzdCwgY3RybC5iUmVxdWVzdFR5cGUsIGN0cmwud1ZhbHVlLCBjdHJsLndJbmRleCk7CisKKwkJdXNiX3VubG9ja19kZXZpY2UoZGV2KTsKKwkJaSA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBjdHJsLmJSZXF1ZXN0LCBjdHJsLmJSZXF1ZXN0VHlwZSwKKwkJCQkgICAgICAgY3RybC53VmFsdWUsIGN0cmwud0luZGV4LCB0YnVmLCBjdHJsLndMZW5ndGgsIHRtbyk7CisJCXVzYl9sb2NrX2RldmljZShkZXYpOworCQlpZiAoKGkgPiAwKSAmJiBjdHJsLndMZW5ndGgpIHsKKwkJCWlmICh1c2Jmc19zbm9vcCkgeworCQkJCWRldl9pbmZvKCZkZXYtPmRldiwgImNvbnRyb2wgcmVhZDogZGF0YSAiKTsKKwkJCQlmb3IgKGogPSAwOyBqIDwgY3RybC53TGVuZ3RoOyArK2opCisJCQkJCXByaW50ayAoIiUwMnggIiwgKHVuc2lnbmVkIGNoYXIpKHRidWYpW2pdKTsKKwkJCQlwcmludGsoIlxuIik7CisJCQl9CisJCQlpZiAoY29weV90b191c2VyKGN0cmwuZGF0YSwgdGJ1ZiwgY3RybC53TGVuZ3RoKSkgeworCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl0YnVmKTsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWlmIChjdHJsLndMZW5ndGgpIHsKKwkJCWlmIChjb3B5X2Zyb21fdXNlcih0YnVmLCBjdHJsLmRhdGEsIGN0cmwud0xlbmd0aCkpIHsKKwkJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdGJ1Zik7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisJCX0KKwkJc25vb3AoJmRldi0+ZGV2LCAiY29udHJvbCB3cml0ZTogYlJlcXVlc3Q9JTAyeCBiUnJlcXVlc3RUeXBlPSUwMnggd1ZhbHVlPSUwNHggd0luZGV4PSUwNHhcbiIsIAorCQkJY3RybC5iUmVxdWVzdCwgY3RybC5iUmVxdWVzdFR5cGUsIGN0cmwud1ZhbHVlLCBjdHJsLndJbmRleCk7CisJCWlmICh1c2Jmc19zbm9vcCkgeworCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiY29udHJvbCB3cml0ZTogZGF0YTogIik7CisJCQlmb3IgKGogPSAwOyBqIDwgY3RybC53TGVuZ3RoOyArK2opCisJCQkJcHJpbnRrICgiJTAyeCAiLCAodW5zaWduZWQgY2hhcikodGJ1Zilbal0pOworCQkJcHJpbnRrKCJcbiIpOworCQl9CisJCXVzYl91bmxvY2tfZGV2aWNlKGRldik7CisJCWkgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgY3RybC5iUmVxdWVzdCwgY3RybC5iUmVxdWVzdFR5cGUsCisJCQkJICAgICAgIGN0cmwud1ZhbHVlLCBjdHJsLndJbmRleCwgdGJ1ZiwgY3RybC53TGVuZ3RoLCB0bW8pOworCQl1c2JfbG9ja19kZXZpY2UoZGV2KTsKKwl9CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXRidWYpOworCWlmIChpPDAgJiYgaSAhPSAtRVBJUEUpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsICJ1c2JmczogVVNCREVWRlNfQ09OVFJPTCAiCisJCQkgICAiZmFpbGVkIGNtZCAlcyBycXQgJXUgcnEgJXUgbGVuICV1IHJldCAlZFxuIiwKKwkJCSAgIGN1cnJlbnQtPmNvbW0sIGN0cmwuYlJlcXVlc3RUeXBlLCBjdHJsLmJSZXF1ZXN0LAorCQkJICAgY3RybC53TGVuZ3RoLCBpKTsKKwl9CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgcHJvY19idWxrKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwcy0+ZGV2OworCXN0cnVjdCB1c2JkZXZmc19idWxrdHJhbnNmZXIgYnVsazsKKwl1bnNpZ25lZCBpbnQgdG1vLCBsZW4xLCBwaXBlOworCWludCBsZW4yOworCXVuc2lnbmVkIGNoYXIgKnRidWY7CisJaW50IGksIHJldDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYnVsaywgYXJnLCBzaXplb2YoYnVsaykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoKHJldCA9IGZpbmRpbnRmZXAocHMtPmRldiwgYnVsay5lcCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAoKHJldCA9IGNoZWNraW50ZihwcywgcmV0KSkpCisJCXJldHVybiByZXQ7CisJaWYgKGJ1bGsuZXAgJiBVU0JfRElSX0lOKQorCQlwaXBlID0gdXNiX3JjdmJ1bGtwaXBlKGRldiwgYnVsay5lcCAmIDB4N2YpOworCWVsc2UKKwkJcGlwZSA9IHVzYl9zbmRidWxrcGlwZShkZXYsIGJ1bGsuZXAgJiAweDdmKTsKKwlpZiAoIXVzYl9tYXhwYWNrZXQoZGV2LCBwaXBlLCAhKGJ1bGsuZXAgJiBVU0JfRElSX0lOKSkpCisJCXJldHVybiAtRUlOVkFMOworCWxlbjEgPSBidWxrLmxlbjsKKwlpZiAobGVuMSA+IE1BWF9VU0JGU19CVUZGRVJfU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCEodGJ1ZiA9IGttYWxsb2MobGVuMSwgR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm4gLUVOT01FTTsKKwl0bW8gPSBidWxrLnRpbWVvdXQ7CisJaWYgKGJ1bGsuZXAgJiAweDgwKSB7CisJCWlmIChsZW4xICYmICFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBidWxrLmRhdGEsIGxlbjEpKSB7CisJCQlrZnJlZSh0YnVmKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXVzYl91bmxvY2tfZGV2aWNlKGRldik7CisJCWkgPSB1c2JfYnVsa19tc2coZGV2LCBwaXBlLCB0YnVmLCBsZW4xLCAmbGVuMiwgdG1vKTsKKwkJdXNiX2xvY2tfZGV2aWNlKGRldik7CisJCWlmICghaSAmJiBsZW4yKSB7CisJCQlpZiAoY29weV90b191c2VyKGJ1bGsuZGF0YSwgdGJ1ZiwgbGVuMikpIHsKKwkJCQlrZnJlZSh0YnVmKTsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWlmIChsZW4xKSB7CisJCQlpZiAoY29weV9mcm9tX3VzZXIodGJ1ZiwgYnVsay5kYXRhLCBsZW4xKSkgeworCQkJCWtmcmVlKHRidWYpOworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQl9CisJCXVzYl91bmxvY2tfZGV2aWNlKGRldik7CisJCWkgPSB1c2JfYnVsa19tc2coZGV2LCBwaXBlLCB0YnVmLCBsZW4xLCAmbGVuMiwgdG1vKTsKKwkJdXNiX2xvY2tfZGV2aWNlKGRldik7CisJfQorCWtmcmVlKHRidWYpOworCWlmIChpIDwgMCkKKwkJcmV0dXJuIGk7CisJcmV0dXJuIGxlbjI7Cit9CisKK3N0YXRpYyBpbnQgcHJvY19yZXNldGVwKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXVuc2lnbmVkIGludCBlcDsKKwlpbnQgcmV0OworCisJaWYgKGdldF91c2VyKGVwLCAodW5zaWduZWQgaW50IF9fdXNlciAqKWFyZykpCisJCXJldHVybiAtRUZBVUxUOworCWlmICgocmV0ID0gZmluZGludGZlcChwcy0+ZGV2LCBlcCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAoKHJldCA9IGNoZWNraW50ZihwcywgcmV0KSkpCisJCXJldHVybiByZXQ7CisJdXNiX3NldHRvZ2dsZShwcy0+ZGV2LCBlcCAmIDB4ZiwgIShlcCAmIFVTQl9ESVJfSU4pLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jX2NsZWFyaGFsdChzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwl1bnNpZ25lZCBpbnQgZXA7CisJaW50IHBpcGU7CisJaW50IHJldDsKKworCWlmIChnZXRfdXNlcihlcCwgKHVuc2lnbmVkIGludCBfX3VzZXIgKilhcmcpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoKHJldCA9IGZpbmRpbnRmZXAocHMtPmRldiwgZXApKSA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKChyZXQgPSBjaGVja2ludGYocHMsIHJldCkpKQorCQlyZXR1cm4gcmV0OworCWlmIChlcCAmIFVTQl9ESVJfSU4pCisgICAgICAgICAgICAgICAgcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShwcy0+ZGV2LCBlcCAmIDB4N2YpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcGlwZSA9IHVzYl9zbmRidWxrcGlwZShwcy0+ZGV2LCBlcCAmIDB4N2YpOworCisJcmV0dXJuIHVzYl9jbGVhcl9oYWx0KHBzLT5kZXYsIHBpcGUpOworfQorCQkKKworc3RhdGljIGludCBwcm9jX2dldGRyaXZlcihzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgdXNiZGV2ZnNfZ2V0ZHJpdmVyIGdkOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCWludCByZXQ7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmdkLCBhcmcsIHNpemVvZihnZCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlkb3duX3JlYWQoJnVzYl9idXNfdHlwZS5zdWJzeXMucndzZW0pOworCWludGYgPSB1c2JfaWZudW1fdG9faWYocHMtPmRldiwgZ2QuaW50ZXJmYWNlKTsKKwlpZiAoIWludGYgfHwgIWludGYtPmRldi5kcml2ZXIpCisJCXJldCA9IC1FTk9EQVRBOworCWVsc2UgeworCQlzdHJuY3B5KGdkLmRyaXZlciwgaW50Zi0+ZGV2LmRyaXZlci0+bmFtZSwKKwkJCQlzaXplb2YoZ2QuZHJpdmVyKSk7CisJCXJldCA9IChjb3B5X3RvX3VzZXIoYXJnLCAmZ2QsIHNpemVvZihnZCkpID8gLUVGQVVMVCA6IDApOworCX0KKwl1cF9yZWFkKCZ1c2JfYnVzX3R5cGUuc3Vic3lzLnJ3c2VtKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHByb2NfY29ubmVjdGluZm8oc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IHVzYmRldmZzX2Nvbm5lY3RpbmZvIGNpOworCisJY2kuZGV2bnVtID0gcHMtPmRldi0+ZGV2bnVtOworCWNpLnNsb3cgPSBwcy0+ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfTE9XOworCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmY2ksIHNpemVvZihjaSkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jX3Jlc2V0ZGV2aWNlKHN0cnVjdCBkZXZfc3RhdGUgKnBzKQoreworCXJldHVybiB1c2JfcmVzZXRfZGV2aWNlKHBzLT5kZXYpOworCit9CisKK3N0YXRpYyBpbnQgcHJvY19zZXRpbnRmKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCB1c2JkZXZmc19zZXRpbnRlcmZhY2Ugc2V0aW50ZjsKKwlpbnQgcmV0OworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZzZXRpbnRmLCBhcmcsIHNpemVvZihzZXRpbnRmKSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmICgocmV0ID0gY2hlY2tpbnRmKHBzLCBzZXRpbnRmLmludGVyZmFjZSkpKQorCQlyZXR1cm4gcmV0OworCXJldHVybiB1c2Jfc2V0X2ludGVyZmFjZShwcy0+ZGV2LCBzZXRpbnRmLmludGVyZmFjZSwKKwkJCXNldGludGYuYWx0c2V0dGluZyk7Cit9CisKK3N0YXRpYyBpbnQgcHJvY19zZXRjb25maWcoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCit7CisJdW5zaWduZWQgaW50IHU7CisJaW50IHN0YXR1cyA9IDA7CisgCXN0cnVjdCB1c2JfaG9zdF9jb25maWcgKmFjdGNvbmZpZzsKKworCWlmIChnZXRfdXNlcih1LCAodW5zaWduZWQgaW50IF9fdXNlciAqKWFyZykpCisJCXJldHVybiAtRUZBVUxUOworCisgCWFjdGNvbmZpZyA9IHBzLT5kZXYtPmFjdGNvbmZpZzsKKyAKKyAJLyogRG9uJ3QgdG91Y2ggdGhlIGRldmljZSBpZiBhbnkgaW50ZXJmYWNlcyBhcmUgY2xhaW1lZC4KKyAJICogSXQgY291bGQgaW50ZXJmZXJlIHdpdGggb3RoZXIgZHJpdmVycycgb3BlcmF0aW9ucywgYW5kIGlmCisJICogYW4gaW50ZXJmYWNlIGlzIGNsYWltZWQgYnkgdXNiZnMgaXQgY291bGQgZWFzaWx5IGRlYWRsb2NrLgorCSAqLworIAlpZiAoYWN0Y29uZmlnKSB7CisgCQlpbnQgaTsKKyAKKyAJCWZvciAoaSA9IDA7IGkgPCBhY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7ICsraSkgeworIAkJCWlmICh1c2JfaW50ZXJmYWNlX2NsYWltZWQoYWN0Y29uZmlnLT5pbnRlcmZhY2VbaV0pKSB7CisJCQkJZGV2X3dhcm4gKCZwcy0+ZGV2LT5kZXYsCisJCQkJCSJ1c2JmczogaW50ZXJmYWNlICVkIGNsYWltZWQgIgorCQkJCQkid2hpbGUgJyVzJyBzZXRzIGNvbmZpZyAjJWRcbiIsCisJCQkJCWFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldCisJCQkJCQktPmN1cl9hbHRzZXR0aW5nCisJCQkJCQktPmRlc2MuYkludGVyZmFjZU51bWJlciwKKwkJCQkJY3VycmVudC0+Y29tbSwgdSk7CisjaWYgMAkvKiBGSVhNRTogIGVuYWJsZSBpbiAyLjYuMTAgb3Igc28gKi8KKyAJCQkJc3RhdHVzID0gLUVCVVNZOworCQkJCWJyZWFrOworI2VuZGlmCisJCQl9CisgCQl9CisgCX0KKworCS8qIFNFVF9DT05GSUdVUkFUSU9OIGlzIG9mdGVuIGFidXNlZCBhcyBhICJjaGVhcCIgZHJpdmVyIHJlc2V0LAorCSAqIHNvIGF2b2lkIHVzYl9zZXRfY29uZmlndXJhdGlvbigpJ3Mga2ljayB0byBzeXNmcworCSAqLworCWlmIChzdGF0dXMgPT0gMCkgeworCQlpZiAoYWN0Y29uZmlnICYmIGFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlID09IHUpCisJCQlzdGF0dXMgPSB1c2JfcmVzZXRfY29uZmlndXJhdGlvbihwcy0+ZGV2KTsKKwkJZWxzZQorCQkJc3RhdHVzID0gdXNiX3NldF9jb25maWd1cmF0aW9uKHBzLT5kZXYsIHUpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKworc3RhdGljIGludCBwcm9jX2RvX3N1Ym1pdHVyYihzdHJ1Y3QgZGV2X3N0YXRlICpwcywgc3RydWN0IHVzYmRldmZzX3VyYiAqdXVyYiwKKwkJCSAgICAgc3RydWN0IHVzYmRldmZzX2lzb19wYWNrZXRfZGVzYyBfX3VzZXIgKmlzb19mcmFtZV9kZXNjLAorCQkJICAgICB2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCB1c2JkZXZmc19pc29fcGFja2V0X2Rlc2MgKmlzb3BrdCA9IE5VTEw7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKwlzdHJ1Y3QgYXN5bmMgKmFzOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmRyID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgdSwgdG90bGVuLCBpc29mcm1sZW47CisJaW50IHJldCwgaW50ZXJ2YWwgPSAwLCBpZm51bSA9IC0xOworCisJaWYgKHV1cmItPmZsYWdzICYgfihVU0JERVZGU19VUkJfSVNPX0FTQVB8VVNCREVWRlNfVVJCX1NIT1JUX05PVF9PS3wKKwkJCSAgIFVSQl9OT19GU0JSfFVSQl9aRVJPX1BBQ0tFVCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghdXVyYi0+YnVmZmVyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAodXVyYi0+c2lnbnIgIT0gMCAmJiAodXVyYi0+c2lnbnIgPCBTSUdSVE1JTiB8fCB1dXJiLT5zaWduciA+IFNJR1JUTUFYKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCEodXVyYi0+dHlwZSA9PSBVU0JERVZGU19VUkJfVFlQRV9DT05UUk9MICYmICh1dXJiLT5lbmRwb2ludCAmIH5VU0JfRU5EUE9JTlRfRElSX01BU0spID09IDApKSB7CisJCWlmICgoaWZudW0gPSBmaW5kaW50ZmVwKHBzLT5kZXYsIHV1cmItPmVuZHBvaW50KSkgPCAwKQorCQkJcmV0dXJuIGlmbnVtOworCQlpZiAoKHJldCA9IGNoZWNraW50ZihwcywgaWZudW0pKSkKKwkJCXJldHVybiByZXQ7CisJfQorCWlmICgodXVyYi0+ZW5kcG9pbnQgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spICE9IDApCisJCWVwID0gcHMtPmRldi0+ZXBfaW4gW3V1cmItPmVuZHBvaW50ICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLXTsKKwllbHNlCisJCWVwID0gcHMtPmRldi0+ZXBfb3V0IFt1dXJiLT5lbmRwb2ludCAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTS107CisJaWYgKCFlcCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJc3dpdGNoKHV1cmItPnR5cGUpIHsKKwljYXNlIFVTQkRFVkZTX1VSQl9UWVBFX0NPTlRST0w6CisJCWlmICgoZXAtPmRlc2MuYm1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCisJCQkJIT0gVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCkKKwkJCXJldHVybiAtRUlOVkFMOworCQkvKiBtaW4gOCBieXRlIHNldHVwIHBhY2tldCwgbWF4IGFyYml0cmFyeSAqLworCQlpZiAodXVyYi0+YnVmZmVyX2xlbmd0aCA8IDggfHwgdXVyYi0+YnVmZmVyX2xlbmd0aCA+IFBBR0VfU0laRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoIShkciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpLCBHRlBfS0VSTkVMKSkpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGRyLCB1dXJiLT5idWZmZXIsIDgpKSB7CisJCQlrZnJlZShkcik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQlpZiAodXVyYi0+YnVmZmVyX2xlbmd0aCA8IChsZTE2X3RvX2NwdXAoJmRyLT53TGVuZ3RoKSArIDgpKSB7CisJCQlrZnJlZShkcik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAoKHJldCA9IGNoZWNrX2N0cmxyZWNpcChwcywgZHItPmJSZXF1ZXN0VHlwZSwgbGUxNl90b19jcHVwKCZkci0+d0luZGV4KSkpKSB7CisJCQlrZnJlZShkcik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCXV1cmItPmVuZHBvaW50ID0gKHV1cmItPmVuZHBvaW50ICYgflVTQl9FTkRQT0lOVF9ESVJfTUFTSykgfCAoZHItPmJSZXF1ZXN0VHlwZSAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSyk7CisJCXV1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gMDsKKwkJdXVyYi0+YnVmZmVyX2xlbmd0aCA9IGxlMTZfdG9fY3B1cCgmZHItPndMZW5ndGgpOworCQl1dXJiLT5idWZmZXIgKz0gODsKKwkJaWYgKCFhY2Nlc3Nfb2soKHV1cmItPmVuZHBvaW50ICYgVVNCX0RJUl9JTikgPyAgVkVSSUZZX1dSSVRFIDogVkVSSUZZX1JFQUQsIHV1cmItPmJ1ZmZlciwgdXVyYi0+YnVmZmVyX2xlbmd0aCkpIHsKKwkJCWtmcmVlKGRyKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJCWJyZWFrOworCisJY2FzZSBVU0JERVZGU19VUkJfVFlQRV9CVUxLOgorCQlzd2l0Y2ggKGVwLT5kZXNjLmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSB7CisJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTDoKKwkJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DOgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCS8qIGFsbG93IHNpbmdsZS1zaG90IGludGVycnVwdCB0cmFuc2ZlcnMsIGF0IGJvZ3VzIHJhdGVzICovCisJCX0KKwkJdXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSAwOworCQlpZiAodXVyYi0+YnVmZmVyX2xlbmd0aCA+IE1BWF9VU0JGU19CVUZGRVJfU0laRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoIWFjY2Vzc19vaygodXVyYi0+ZW5kcG9pbnQgJiBVU0JfRElSX0lOKSA/IFZFUklGWV9XUklURSA6IFZFUklGWV9SRUFELCB1dXJiLT5idWZmZXIsIHV1cmItPmJ1ZmZlcl9sZW5ndGgpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCisJY2FzZSBVU0JERVZGU19VUkJfVFlQRV9JU086CisJCS8qIGFyYml0cmFyeSBsaW1pdCAqLworCQlpZiAodXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPCAxIHx8IHV1cmItPm51bWJlcl9vZl9wYWNrZXRzID4gMTI4KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICgoZXAtPmRlc2MuYm1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCisJCQkJIT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykKKwkJCXJldHVybiAtRUlOVkFMOworCQlpbnRlcnZhbCA9IDEgPDwgbWluICgxNSwgZXAtPmRlc2MuYkludGVydmFsIC0gMSk7CisJCWlzb2ZybWxlbiA9IHNpemVvZihzdHJ1Y3QgdXNiZGV2ZnNfaXNvX3BhY2tldF9kZXNjKSAqIHV1cmItPm51bWJlcl9vZl9wYWNrZXRzOworCQlpZiAoIShpc29wa3QgPSBrbWFsbG9jKGlzb2ZybWxlbiwgR0ZQX0tFUk5FTCkpKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWlmIChjb3B5X2Zyb21fdXNlcihpc29wa3QsIGlzb19mcmFtZV9kZXNjLCBpc29mcm1sZW4pKSB7CisJCQlrZnJlZShpc29wa3QpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJZm9yICh0b3RsZW4gPSB1ID0gMDsgdSA8IHV1cmItPm51bWJlcl9vZl9wYWNrZXRzOyB1KyspIHsKKwkJCWlmIChpc29wa3RbdV0ubGVuZ3RoID4gMTAyMykgeworCQkJCWtmcmVlKGlzb3BrdCk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQl0b3RsZW4gKz0gaXNvcGt0W3VdLmxlbmd0aDsKKwkJfQorCQlpZiAodG90bGVuID4gMzI3NjgpIHsKKwkJCWtmcmVlKGlzb3BrdCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQl1dXJiLT5idWZmZXJfbGVuZ3RoID0gdG90bGVuOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfVVJCX1RZUEVfSU5URVJSVVBUOgorCQl1dXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IDA7CisJCWlmICgoZXAtPmRlc2MuYm1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCisJCQkJIT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChwcy0+ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJCWludGVydmFsID0gMSA8PCBtaW4gKDE1LCBlcC0+ZGVzYy5iSW50ZXJ2YWwgLSAxKTsKKwkJZWxzZQorCQkJaW50ZXJ2YWwgPSBlcC0+ZGVzYy5iSW50ZXJ2YWw7CisJCWlmICh1dXJiLT5idWZmZXJfbGVuZ3RoID4gTUFYX1VTQkZTX0JVRkZFUl9TSVpFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghYWNjZXNzX29rKCh1dXJiLT5lbmRwb2ludCAmIFVTQl9ESVJfSU4pID8gVkVSSUZZX1dSSVRFIDogVkVSSUZZX1JFQUQsIHV1cmItPmJ1ZmZlciwgdXVyYi0+YnVmZmVyX2xlbmd0aCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKCEoYXMgPSBhbGxvY19hc3luYyh1dXJiLT5udW1iZXJfb2ZfcGFja2V0cykpKSB7CisJCWlmIChpc29wa3QpCisJCQlrZnJlZShpc29wa3QpOworCQlpZiAoZHIpCisJCQlrZnJlZShkcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlpZiAoIShhcy0+dXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKHV1cmItPmJ1ZmZlcl9sZW5ndGgsIEdGUF9LRVJORUwpKSkgeworCQlpZiAoaXNvcGt0KQorCQkJa2ZyZWUoaXNvcGt0KTsKKwkJaWYgKGRyKQorCQkJa2ZyZWUoZHIpOworCQlmcmVlX2FzeW5jKGFzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorICAgICAgICBhcy0+dXJiLT5kZXYgPSBwcy0+ZGV2OworICAgICAgICBhcy0+dXJiLT5waXBlID0gKHV1cmItPnR5cGUgPDwgMzApIHwgX19jcmVhdGVfcGlwZShwcy0+ZGV2LCB1dXJiLT5lbmRwb2ludCAmIDB4ZikgfCAodXVyYi0+ZW5kcG9pbnQgJiBVU0JfRElSX0lOKTsKKyAgICAgICAgYXMtPnVyYi0+dHJhbnNmZXJfZmxhZ3MgPSB1dXJiLT5mbGFnczsKKwlhcy0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gdXVyYi0+YnVmZmVyX2xlbmd0aDsKKwlhcy0+dXJiLT5zZXR1cF9wYWNrZXQgPSAodW5zaWduZWQgY2hhciopZHI7CisJYXMtPnVyYi0+c3RhcnRfZnJhbWUgPSB1dXJiLT5zdGFydF9mcmFtZTsKKwlhcy0+dXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IHV1cmItPm51bWJlcl9vZl9wYWNrZXRzOworCWFzLT51cmItPmludGVydmFsID0gaW50ZXJ2YWw7CisgICAgICAgIGFzLT51cmItPmNvbnRleHQgPSBhczsKKyAgICAgICAgYXMtPnVyYi0+Y29tcGxldGUgPSBhc3luY19jb21wbGV0ZWQ7CisJZm9yICh0b3RsZW4gPSB1ID0gMDsgdSA8IHV1cmItPm51bWJlcl9vZl9wYWNrZXRzOyB1KyspIHsKKwkJYXMtPnVyYi0+aXNvX2ZyYW1lX2Rlc2NbdV0ub2Zmc2V0ID0gdG90bGVuOworCQlhcy0+dXJiLT5pc29fZnJhbWVfZGVzY1t1XS5sZW5ndGggPSBpc29wa3RbdV0ubGVuZ3RoOworCQl0b3RsZW4gKz0gaXNvcGt0W3VdLmxlbmd0aDsKKwl9CisJaWYgKGlzb3BrdCkKKwkJa2ZyZWUoaXNvcGt0KTsKKwlhcy0+cHMgPSBwczsKKyAgICAgICAgYXMtPnVzZXJ1cmIgPSBhcmc7CisJaWYgKHV1cmItPmVuZHBvaW50ICYgVVNCX0RJUl9JTikKKwkJYXMtPnVzZXJidWZmZXIgPSB1dXJiLT5idWZmZXI7CisJZWxzZQorCQlhcy0+dXNlcmJ1ZmZlciA9IE5VTEw7CisJYXMtPnNpZ25yID0gdXVyYi0+c2lnbnI7CisJYXMtPmlmbnVtID0gaWZudW07CisJYXMtPnRhc2sgPSBjdXJyZW50OworCWlmICghKHV1cmItPmVuZHBvaW50ICYgVVNCX0RJUl9JTikpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGFzLT51cmItPnRyYW5zZmVyX2J1ZmZlciwgdXVyYi0+YnVmZmVyLCBhcy0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSkgeworCQkJZnJlZV9hc3luYyhhcyk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCX0KKyAgICAgICAgYXN5bmNfbmV3cGVuZGluZyhhcyk7CisgICAgICAgIGlmICgocmV0ID0gdXNiX3N1Ym1pdF91cmIoYXMtPnVyYiwgR0ZQX0tFUk5FTCkpKSB7CisJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBzLT5kZXYtPmRldiwgInVzYmZzOiB1c2Jfc3VibWl0X3VyYiByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKyAgICAgICAgICAgICAgICBhc3luY19yZW1vdmVwZW5kaW5nKGFzKTsKKyAgICAgICAgICAgICAgICBmcmVlX2FzeW5jKGFzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2Nfc3VibWl0dXJiKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCB1c2JkZXZmc191cmIgdXVyYjsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmdXVyYiwgYXJnLCBzaXplb2YodXVyYikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBwcm9jX2RvX3N1Ym1pdHVyYihwcywgJnV1cmIsICgoKHN0cnVjdCB1c2JkZXZmc191cmIgX191c2VyICopYXJnKS0+aXNvX2ZyYW1lX2Rlc2MpLCBhcmcpOworfQorCitzdGF0aWMgaW50IHByb2NfdW5saW5rdXJiKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCBhc3luYyAqYXM7CisKKwlhcyA9IGFzeW5jX2dldHBlbmRpbmcocHMsIGFyZyk7CisJaWYgKCFhcykKKwkJcmV0dXJuIC1FSU5WQUw7CisJdXNiX2tpbGxfdXJiKGFzLT51cmIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2Nlc3Njb21wbChzdHJ1Y3QgYXN5bmMgKmFzLCB2b2lkIF9fdXNlciAqIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCB1cmIgKnVyYiA9IGFzLT51cmI7CisJc3RydWN0IHVzYmRldmZzX3VyYiBfX3VzZXIgKnVzZXJ1cmIgPSBhcy0+dXNlcnVyYjsKKwl2b2lkIF9fdXNlciAqYWRkciA9IGFzLT51c2VydXJiOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKGFzLT51c2VyYnVmZmVyKQorCQlpZiAoY29weV90b191c2VyKGFzLT51c2VyYnVmZmVyLCB1cmItPnRyYW5zZmVyX2J1ZmZlciwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSkKKwkJCXJldHVybiAtRUZBVUxUOworCWlmIChwdXRfdXNlcih1cmItPnN0YXR1cywgJnVzZXJ1cmItPnN0YXR1cykpCisJCXJldHVybiAtRUZBVUxUOworCWlmIChwdXRfdXNlcih1cmItPmFjdHVhbF9sZW5ndGgsICZ1c2VydXJiLT5hY3R1YWxfbGVuZ3RoKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKHB1dF91c2VyKHVyYi0+ZXJyb3JfY291bnQsICZ1c2VydXJiLT5lcnJvcl9jb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKCEodXNiX3BpcGVpc29jKHVyYi0+cGlwZSkpKQorCQlyZXR1cm4gMDsKKwlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CisJCWlmIChwdXRfdXNlcih1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGgsCisJCQkgICAgICZ1c2VydXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAocHV0X3VzZXIodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMsCisJCQkgICAgICZ1c2VydXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJZnJlZV9hc3luYyhhcyk7CisKKwlpZiAocHV0X3VzZXIoYWRkciwgKHZvaWQgX191c2VyICogX191c2VyICopYXJnKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXN5bmMqIHJlYXBfYXMoc3RydWN0IGRldl9zdGF0ZSAqcHMpCit7CisgICAgICAgIERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCXN0cnVjdCBhc3luYyAqYXMgPSBOVUxMOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwcy0+ZGV2OworCisJYWRkX3dhaXRfcXVldWUoJnBzLT53YWl0LCAmd2FpdCk7CisJZm9yICg7OykgeworCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCWlmICgoYXMgPSBhc3luY19nZXRjb21wbGV0ZWQocHMpKSkKKwkJCWJyZWFrOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQlicmVhazsKKwkJdXNiX3VubG9ja19kZXZpY2UoZGV2KTsKKwkJc2NoZWR1bGUoKTsKKwkJdXNiX2xvY2tfZGV2aWNlKGRldik7CisJfQorCXJlbW92ZV93YWl0X3F1ZXVlKCZwcy0+d2FpdCwgJndhaXQpOworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJcmV0dXJuIGFzOworfQorCitzdGF0aWMgaW50IHByb2NfcmVhcHVyYihzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgYXN5bmMgKmFzID0gcmVhcF9hcyhwcyk7CisJaWYgKGFzKQorCQlyZXR1cm4gcHJvY2Vzc2NvbXBsKGFzLCAodm9pZCBfX3VzZXIgKiBfX3VzZXIgKilhcmcpOworCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJcmV0dXJuIC1FSU5UUjsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBwcm9jX3JlYXB1cmJub25ibG9jayhzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgYXN5bmMgKmFzOworCisJaWYgKCEoYXMgPSBhc3luY19nZXRjb21wbGV0ZWQocHMpKSkKKwkJcmV0dXJuIC1FQUdBSU47CisJcmV0dXJuIHByb2Nlc3Njb21wbChhcywgKHZvaWQgX191c2VyICogX191c2VyICopYXJnKTsKK30KKworI2lmZGVmIENPTkZJR19DT01QQVQKKworc3RhdGljIGludCBnZXRfdXJiMzIoc3RydWN0IHVzYmRldmZzX3VyYiAqa3VyYiwKKwkJICAgICBzdHJ1Y3QgdXNiZGV2ZnNfdXJiMzIgX191c2VyICp1dXJiKQoreworCV9fdTMyICB1cHRyOworCWlmIChnZXRfdXNlcihrdXJiLT50eXBlLCAmdXVyYi0+dHlwZSkgfHwKKwkgICAgX19nZXRfdXNlcihrdXJiLT5lbmRwb2ludCwgJnV1cmItPmVuZHBvaW50KSB8fAorCSAgICBfX2dldF91c2VyKGt1cmItPnN0YXR1cywgJnV1cmItPnN0YXR1cykgfHwKKwkgICAgX19nZXRfdXNlcihrdXJiLT5mbGFncywgJnV1cmItPmZsYWdzKSB8fAorCSAgICBfX2dldF91c2VyKGt1cmItPmJ1ZmZlcl9sZW5ndGgsICZ1dXJiLT5idWZmZXJfbGVuZ3RoKSB8fAorCSAgICBfX2dldF91c2VyKGt1cmItPmFjdHVhbF9sZW5ndGgsICZ1dXJiLT5hY3R1YWxfbGVuZ3RoKSB8fAorCSAgICBfX2dldF91c2VyKGt1cmItPnN0YXJ0X2ZyYW1lLCAmdXVyYi0+c3RhcnRfZnJhbWUpIHx8CisJICAgIF9fZ2V0X3VzZXIoa3VyYi0+bnVtYmVyX29mX3BhY2tldHMsICZ1dXJiLT5udW1iZXJfb2ZfcGFja2V0cykgfHwKKwkgICAgX19nZXRfdXNlcihrdXJiLT5lcnJvcl9jb3VudCwgJnV1cmItPmVycm9yX2NvdW50KSB8fAorCSAgICBfX2dldF91c2VyKGt1cmItPnNpZ25yLCAmdXVyYi0+c2lnbnIpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChfX2dldF91c2VyKHVwdHIsICZ1dXJiLT5idWZmZXIpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlrdXJiLT5idWZmZXIgPSBjb21wYXRfcHRyKHVwdHIpOworCWlmIChfX2dldF91c2VyKHVwdHIsICZ1dXJiLT5idWZmZXIpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlrdXJiLT51c2VyY29udGV4dCA9IGNvbXBhdF9wdHIodXB0cik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jX3N1Ym1pdHVyYl9jb21wYXQoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IHVzYmRldmZzX3VyYiB1dXJiOworCisJaWYgKGdldF91cmIzMigmdXVyYiwoc3RydWN0IHVzYmRldmZzX3VyYjMyICopYXJnKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gcHJvY19kb19zdWJtaXR1cmIocHMsICZ1dXJiLCAoKHN0cnVjdCB1c2JkZXZmc191cmIgX191c2VyICopYXJnKS0+aXNvX2ZyYW1lX2Rlc2MsIGFyZyk7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc2NvbXBsX2NvbXBhdChzdHJ1Y3QgYXN5bmMgKmFzLCB2b2lkIF9fdXNlciAqIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCB1cmIgKnVyYiA9IGFzLT51cmI7CisJc3RydWN0IHVzYmRldmZzX3VyYjMyIF9fdXNlciAqdXNlcnVyYiA9IGFzLT51c2VydXJiOworCXZvaWQgX191c2VyICphZGRyID0gYXMtPnVzZXJ1cmI7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoYXMtPnVzZXJidWZmZXIpCisJCWlmIChjb3B5X3RvX3VzZXIoYXMtPnVzZXJidWZmZXIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKHB1dF91c2VyKHVyYi0+c3RhdHVzLCAmdXNlcnVyYi0+c3RhdHVzKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKHB1dF91c2VyKHVyYi0+YWN0dWFsX2xlbmd0aCwgJnVzZXJ1cmItPmFjdHVhbF9sZW5ndGgpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAocHV0X3VzZXIodXJiLT5lcnJvcl9jb3VudCwgJnVzZXJ1cmItPmVycm9yX2NvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoISh1c2JfcGlwZWlzb2ModXJiLT5waXBlKSkpCisJCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJaWYgKHB1dF91c2VyKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCwKKwkJCSAgICAgJnVzZXJ1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGgpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChwdXRfdXNlcih1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cywKKwkJCSAgICAgJnVzZXJ1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlmcmVlX2FzeW5jKGFzKTsKKwlpZiAocHV0X3VzZXIoKHUzMikodTY0KWFkZHIsICh1MzIgX191c2VyICopYXJnKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY19yZWFwdXJiX2NvbXBhdChzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgYXN5bmMgKmFzID0gcmVhcF9hcyhwcyk7CisJaWYgKGFzKQorCQlyZXR1cm4gcHJvY2Vzc2NvbXBsX2NvbXBhdChhcywgKHZvaWQgX191c2VyICogX191c2VyICopYXJnKTsKKwlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCXJldHVybiAtRUlOVFI7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgcHJvY19yZWFwdXJibm9uYmxvY2tfY29tcGF0KHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCBhc3luYyAqYXM7CisKKwlwcmludGsoInJlYXB1cmJuYmxvY2tcbiIpOworCWlmICghKGFzID0gYXN5bmNfZ2V0Y29tcGxldGVkKHBzKSkpCisJCXJldHVybiAtRUFHQUlOOworCXByaW50aygicmVhcCBnb3QgYXMgJXBcbiIsIGFzKTsKKwlyZXR1cm4gcHJvY2Vzc2NvbXBsX2NvbXBhdChhcywgKHZvaWQgX191c2VyICogX191c2VyICopYXJnKTsKK30KKworI2VuZGlmCisKK3N0YXRpYyBpbnQgcHJvY19kaXNjb25uZWN0c2lnbmFsKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCB1c2JkZXZmc19kaXNjb25uZWN0c2lnbmFsIGRzOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZkcywgYXJnLCBzaXplb2YoZHMpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKGRzLnNpZ25yICE9IDAgJiYgKGRzLnNpZ25yIDwgU0lHUlRNSU4gfHwgZHMuc2lnbnIgPiBTSUdSVE1BWCkpCisJCXJldHVybiAtRUlOVkFMOworCXBzLT5kaXNjc2lnbnIgPSBkcy5zaWducjsKKwlwcy0+ZGlzY2NvbnRleHQgPSBkcy5jb250ZXh0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2NfY2xhaW1pbnRlcmZhY2Uoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCit7CisJdW5zaWduZWQgaW50IGlmbnVtOworCisJaWYgKGdldF91c2VyKGlmbnVtLCAodW5zaWduZWQgaW50IF9fdXNlciAqKWFyZykpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiBjbGFpbWludGYocHMsIGlmbnVtKTsKK30KKworc3RhdGljIGludCBwcm9jX3JlbGVhc2VpbnRlcmZhY2Uoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCit7CisJdW5zaWduZWQgaW50IGlmbnVtOworCWludCByZXQ7CisKKwlpZiAoZ2V0X3VzZXIoaWZudW0sICh1bnNpZ25lZCBpbnQgX191c2VyICopYXJnKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKChyZXQgPSByZWxlYXNlaW50ZihwcywgaWZudW0pKSA8IDApCisJCXJldHVybiByZXQ7CisJZGVzdHJveV9hc3luY19vbl9pbnRlcmZhY2UgKHBzLCBpZm51bSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY19pb2N0bCAoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IHVzYmRldmZzX2lvY3RsCWN0cmw7CisJaW50CQkJc2l6ZTsKKwl2b2lkCQkJKmJ1ZiA9IE5VTEw7CisJaW50CQkJcmV0dmFsID0gMDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAgICAqaW50ZiA9IE5VTEw7CisJc3RydWN0IHVzYl9kcml2ZXIgICAgICAgKmRyaXZlciA9IE5VTEw7CisJaW50CQkJaTsKKworCS8qIGdldCBpbnB1dCBwYXJhbWV0ZXJzIGFuZCBhbGxvYyBidWZmZXIgKi8KKwlpZiAoY29weV9mcm9tX3VzZXIoJmN0cmwsIGFyZywgc2l6ZW9mIChjdHJsKSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmICgoc2l6ZSA9IF9JT0NfU0laRSAoY3RybC5pb2N0bF9jb2RlKSkgPiAwKSB7CisJCWlmICgoYnVmID0ga21hbGxvYyAoc2l6ZSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJaWYgKChfSU9DX0RJUihjdHJsLmlvY3RsX2NvZGUpICYgX0lPQ19XUklURSkpIHsKKwkJCWlmIChjb3B5X2Zyb21fdXNlciAoYnVmLCBjdHJsLmRhdGEsIHNpemUpKSB7CisJCQkJa2ZyZWUgKGJ1Zik7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQltZW1zZXQgKGJ1ZiwgMCwgc2l6ZSk7CisJCX0KKwl9CisKKwlpZiAoIWNvbm5lY3RlZChwcy0+ZGV2KSkgeworCQlpZiAoYnVmKQorCQkJa2ZyZWUoYnVmKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHBzLT5kZXYtPnN0YXRlICE9IFVTQl9TVEFURV9DT05GSUdVUkVEKQorCQlyZXR2YWwgPSAtRUhPU1RVTlJFQUNIOworCWVsc2UgaWYgKCEoaW50ZiA9IHVzYl9pZm51bV90b19pZiAocHMtPmRldiwgY3RybC5pZm5vKSkpCisgICAgICAgICAgICAgICByZXR2YWwgPSAtRUlOVkFMOworCWVsc2Ugc3dpdGNoIChjdHJsLmlvY3RsX2NvZGUpIHsKKworCS8qIGRpc2Nvbm5lY3Qga2VybmVsIGRyaXZlciBmcm9tIGludGVyZmFjZSAqLworCWNhc2UgVVNCREVWRlNfRElTQ09OTkVDVDoKKworCQkvKiBkb24ndCBhbGxvdyB0aGUgdXNlciB0byB1bmJpbmQgdGhlIGh1YiBkcml2ZXIgZnJvbQorCQkgKiBhIGh1YiB3aXRoIGNoaWxkcmVuIHRvIG1hbmFnZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgcHMtPmRldi0+bWF4Y2hpbGQ7ICsraSkgeworCQkJaWYgKHBzLT5kZXYtPmNoaWxkcmVuW2ldKQorCQkJCXJldHZhbCA9IC1FQlVTWTsKKwkJfQorCQlpZiAocmV0dmFsKQorCQkJYnJlYWs7CisKKwkJZG93bl93cml0ZSgmdXNiX2J1c190eXBlLnN1YnN5cy5yd3NlbSk7CisJCWlmIChpbnRmLT5kZXYuZHJpdmVyKSB7CisJCQlkcml2ZXIgPSB0b191c2JfZHJpdmVyKGludGYtPmRldi5kcml2ZXIpOworCQkJZGV2X2RiZyAoJmludGYtPmRldiwgImRpc2Nvbm5lY3QgYnkgdXNiZnNcbiIpOworCQkJdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZShkcml2ZXIsIGludGYpOworCQl9IGVsc2UKKwkJCXJldHZhbCA9IC1FTk9EQVRBOworCQl1cF93cml0ZSgmdXNiX2J1c190eXBlLnN1YnN5cy5yd3NlbSk7CisJCWJyZWFrOworCisJLyogbGV0IGtlcm5lbCBkcml2ZXJzIHRyeSB0byAocmUpYmluZCB0byB0aGUgaW50ZXJmYWNlICovCisJY2FzZSBVU0JERVZGU19DT05ORUNUOgorCQl1c2JfdW5sb2NrX2RldmljZShwcy0+ZGV2KTsKKwkJdXNiX2xvY2tfYWxsX2RldmljZXMoKTsKKwkJYnVzX3Jlc2Nhbl9kZXZpY2VzKGludGYtPmRldi5idXMpOworCQl1c2JfdW5sb2NrX2FsbF9kZXZpY2VzKCk7CisJCXVzYl9sb2NrX2RldmljZShwcy0+ZGV2KTsKKwkJYnJlYWs7CisKKwkvKiB0YWxrIGRpcmVjdGx5IHRvIHRoZSBpbnRlcmZhY2UncyBkcml2ZXIgKi8KKwlkZWZhdWx0OgorCQlkb3duX3JlYWQoJnVzYl9idXNfdHlwZS5zdWJzeXMucndzZW0pOworCQlpZiAoaW50Zi0+ZGV2LmRyaXZlcikKKwkJCWRyaXZlciA9IHRvX3VzYl9kcml2ZXIoaW50Zi0+ZGV2LmRyaXZlcik7CisJCWlmIChkcml2ZXIgPT0gTlVMTCB8fCBkcml2ZXItPmlvY3RsID09IE5VTEwpIHsKKwkJCXJldHZhbCA9IC1FTk9UVFk7CisJCX0gZWxzZSB7CisJCQlyZXR2YWwgPSBkcml2ZXItPmlvY3RsIChpbnRmLCBjdHJsLmlvY3RsX2NvZGUsIGJ1Zik7CisJCQlpZiAocmV0dmFsID09IC1FTk9JT0NUTENNRCkKKwkJCQlyZXR2YWwgPSAtRU5PVFRZOworCQl9CisJCXVwX3JlYWQoJnVzYl9idXNfdHlwZS5zdWJzeXMucndzZW0pOworCX0KKworCS8qIGNsZWFudXAgYW5kIHJldHVybiAqLworCWlmIChyZXR2YWwgPj0gMAorCQkJJiYgKF9JT0NfRElSIChjdHJsLmlvY3RsX2NvZGUpICYgX0lPQ19SRUFEKSAhPSAwCisJCQkmJiBzaXplID4gMAorCQkJJiYgY29weV90b191c2VyIChjdHJsLmRhdGEsIGJ1Ziwgc2l6ZSkgIT0gMCkKKwkJcmV0dmFsID0gLUVGQVVMVDsKKwlpZiAoYnVmICE9IE5VTEwpCisJCWtmcmVlIChidWYpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBOT1RFOiAgQWxsIHJlcXVlc3RzIGhlcmUgdGhhdCBoYXZlIGludGVyZmFjZSBudW1iZXJzIGFzIHBhcmFtZXRlcnMKKyAqIGFyZSBhc3N1bWluZyB0aGF0IHNvbWVob3cgdGhlIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gcHJldmVudGVkIGZyb20KKyAqIGNoYW5naW5nLiAgQnV0IHRoZXJlJ3Mgbm8gbWVjaGFuaXNtIHRvIGVuc3VyZSB0aGF0Li4uCisgKi8KK3N0YXRpYyBpbnQgdXNiZGV2X2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgZGV2X3N0YXRlICpwcyA9IChzdHJ1Y3QgZGV2X3N0YXRlICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwcy0+ZGV2OworCXZvaWQgX191c2VyICpwID0gKHZvaWQgX191c2VyICopYXJnOworCWludCByZXQgPSAtRU5PVFRZOworCisJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKQorCQlyZXR1cm4gLUVQRVJNOworCXVzYl9sb2NrX2RldmljZShkZXYpOworCWlmICghY29ubmVjdGVkKGRldikpIHsKKwkJdXNiX3VubG9ja19kZXZpY2UoZGV2KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFVTQkRFVkZTX0NPTlRST0w6CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBDT05UUk9MXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXQgPSBwcm9jX2NvbnRyb2wocHMsIHApOworCQlpZiAocmV0ID49IDApCisJCQlpbm9kZS0+aV9tdGltZSA9IENVUlJFTlRfVElNRTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQkRFVkZTX0JVTEs6CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBCVUxLXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXQgPSBwcm9jX2J1bGsocHMsIHApOworCQlpZiAocmV0ID49IDApCisJCQlpbm9kZS0+aV9tdGltZSA9IENVUlJFTlRfVElNRTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQkRFVkZTX1JFU0VURVA6CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBSRVNFVEVQXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXQgPSBwcm9jX3Jlc2V0ZXAocHMsIHApOworCQlpZiAocmV0ID49IDApCisJCQlpbm9kZS0+aV9tdGltZSA9IENVUlJFTlRfVElNRTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQkRFVkZTX1JFU0VUOgorCQlzbm9vcCgmZGV2LT5kZXYsICIlczogUkVTRVRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2NfcmVzZXRkZXZpY2UocHMpOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfQ0xFQVJfSEFMVDoKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IENMRUFSX0hBTFRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2NfY2xlYXJoYWx0KHBzLCBwKTsKKwkJaWYgKHJldCA+PSAwKQorCQkJaW5vZGUtPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUU7CisJCWJyZWFrOworCisJY2FzZSBVU0JERVZGU19HRVREUklWRVI6CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBHRVREUklWRVJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2NfZ2V0ZHJpdmVyKHBzLCBwKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQkRFVkZTX0NPTk5FQ1RJTkZPOgorCQlzbm9vcCgmZGV2LT5kZXYsICIlczogQ09OTkVDVElORk9cbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2NfY29ubmVjdGluZm8ocHMsIHApOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfU0VUSU5URVJGQUNFOgorCQlzbm9vcCgmZGV2LT5kZXYsICIlczogU0VUSU5URVJGQUNFXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXQgPSBwcm9jX3NldGludGYocHMsIHApOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfU0VUQ09ORklHVVJBVElPTjoKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IFNFVENPTkZJR1VSQVRJT05cbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2Nfc2V0Y29uZmlnKHBzLCBwKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQkRFVkZTX1NVQk1JVFVSQjoKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IFNVQk1JVFVSQlxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gcHJvY19zdWJtaXR1cmIocHMsIHApOworCQlpZiAocmV0ID49IDApCisJCQlpbm9kZS0+aV9tdGltZSA9IENVUlJFTlRfVElNRTsKKwkJYnJlYWs7CisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisKKwljYXNlIFVTQkRFVkZTX1NVQk1JVFVSQjMyOgorCQlzbm9vcCgmZGV2LT5kZXYsICIlczogU1VCTUlUVVJCMzJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2Nfc3VibWl0dXJiX2NvbXBhdChwcywgcCk7CisJCWlmIChyZXQgPj0gMCkKKwkJCWlub2RlLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfUkVBUFVSQjMyOgorCQlzbm9vcCgmZGV2LT5kZXYsICIlczogUkVBUFVSQjMyXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXQgPSBwcm9jX3JlYXB1cmJfY29tcGF0KHBzLCBwKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQkRFVkZTX1JFQVBVUkJOREVMQVkzMjoKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IFJFQVBVUkJERUxBWTMyXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXQgPSBwcm9jX3JlYXB1cmJub25ibG9ja19jb21wYXQocHMsIHApOworCQlicmVhazsKKworI2VuZGlmCisKKwljYXNlIFVTQkRFVkZTX0RJU0NBUkRVUkI6CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBESVNDQVJEVVJCXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXQgPSBwcm9jX3VubGlua3VyYihwcywgcCk7CisJCWJyZWFrOworCisJY2FzZSBVU0JERVZGU19SRUFQVVJCOgorCQlzbm9vcCgmZGV2LT5kZXYsICIlczogUkVBUFVSQlxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gcHJvY19yZWFwdXJiKHBzLCBwKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQkRFVkZTX1JFQVBVUkJOREVMQVk6CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBSRUFQVVJCREVMQVlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2NfcmVhcHVyYm5vbmJsb2NrKHBzLCBwKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQkRFVkZTX0RJU0NTSUdOQUw6CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBESVNDU0lHTkFMXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXQgPSBwcm9jX2Rpc2Nvbm5lY3RzaWduYWwocHMsIHApOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfQ0xBSU1JTlRFUkZBQ0U6CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBDTEFJTUlOVEVSRkFDRVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gcHJvY19jbGFpbWludGVyZmFjZShwcywgcCk7CisJCWJyZWFrOworCisJY2FzZSBVU0JERVZGU19SRUxFQVNFSU5URVJGQUNFOgorCQlzbm9vcCgmZGV2LT5kZXYsICIlczogUkVMRUFTRUlOVEVSRkFDRVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gcHJvY19yZWxlYXNlaW50ZXJmYWNlKHBzLCBwKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQkRFVkZTX0lPQ1RMOgorCQlzbm9vcCgmZGV2LT5kZXYsICIlczogSU9DVExcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2NfaW9jdGwocHMsIHApOworCQlicmVhazsKKwl9CisJdXNiX3VubG9ja19kZXZpY2UoZGV2KTsKKwlpZiAocmV0ID49IDApCisJCWlub2RlLT5pX2F0aW1lID0gQ1VSUkVOVF9USU1FOworCXJldHVybiByZXQ7Cit9CisKKy8qIE5vIGtlcm5lbCBsb2NrIC0gZmluZSAqLworc3RhdGljIHVuc2lnbmVkIGludCB1c2JkZXZfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0cnVjdCBkZXZfc3RhdGUgKnBzID0gKHN0cnVjdCBkZXZfc3RhdGUgKilmaWxlLT5wcml2YXRlX2RhdGE7CisgICAgICAgIHVuc2lnbmVkIGludCBtYXNrID0gMDsKKworCXBvbGxfd2FpdChmaWxlLCAmcHMtPndhaXQsIHdhaXQpOworCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSAmJiAhbGlzdF9lbXB0eSgmcHMtPmFzeW5jX2NvbXBsZXRlZCkpCisJCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk07CisJaWYgKCFjb25uZWN0ZWQocHMtPmRldikpCisJCW1hc2sgfD0gUE9MTEVSUiB8IFBPTExIVVA7CisJcmV0dXJuIG1hc2s7Cit9CisKK3N0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiZnNfZGV2aWNlX2ZpbGVfb3BlcmF0aW9ucyA9IHsKKwkubGxzZWVrID0JdXNiZGV2X2xzZWVrLAorCS5yZWFkID0JCXVzYmRldl9yZWFkLAorCS5wb2xsID0JCXVzYmRldl9wb2xsLAorCS5pb2N0bCA9CXVzYmRldl9pb2N0bCwKKwkub3BlbiA9CQl1c2JkZXZfb3BlbiwKKwkucmVsZWFzZSA9CXVzYmRldl9yZWxlYXNlLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jIGIvZHJpdmVycy91c2IvY29yZS9maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBjZTk2NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jCkBAIC0wLDAgKzEsMjI3IEBACisvKgorICogZHJpdmVycy91c2IvZmlsZS5jCisgKgorICogKEMpIENvcHlyaWdodCBMaW51cyBUb3J2YWxkcyAxOTk5CisgKiAoQykgQ29weXJpZ2h0IEpvaGFubmVzIEVyZGZlbHQgMTk5OS0yMDAxCisgKiAoQykgQ29weXJpZ2h0IEFuZHJlYXMgR2FsIDE5OTkKKyAqIChDKSBDb3B5cmlnaHQgR3JlZ29yeSBQLiBTbWl0aCAxOTk5CisgKiAoQykgQ29weXJpZ2h0IERldGkgRmxpZWdsIDE5OTkgKG5ldyBVU0IgYXJjaGl0ZWN0dXJlKQorICogKEMpIENvcHlyaWdodCBSYW5keSBEdW5sYXAgMjAwMAorICogKEMpIENvcHlyaWdodCBEYXZpZCBCcm93bmVsbCAyMDAwLTIwMDEgKGtlcm5lbCBob3RwbHVnLCB1c2JfZGV2aWNlX2lkLAorIAltb3JlIGRvY3MsIGV0YykKKyAqIChDKSBDb3B5cmlnaHQgWWdnZHJhc2lsIENvbXB1dGluZywgSW5jLiAyMDAwCisgKiAgICAgKHVzYl9kZXZpY2VfaWQgbWF0Y2hpbmcgY2hhbmdlcyBieSBBZGFtIEouIFJpY2h0ZXIpCisgKiAoQykgQ29weXJpZ2h0IEdyZWcgS3JvYWgtSGFydG1hbiAyMDAyLTIwMDMKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKwkjZGVmaW5lIERFQlVHCisjZWxzZQorCSN1bmRlZiBERUJVRworI2VuZGlmCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNkZWZpbmUgTUFYX1VTQl9NSU5PUlMJMjU2CitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqdXNiX21pbm9yc1tNQVhfVVNCX01JTk9SU107CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1pbm9yX2xvY2spOworCitzdGF0aWMgaW50IHVzYl9vcGVuKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpCit7CisJaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKKwlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpjOworCWludCBlcnIgPSAtRU5PREVWOworCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKm9sZF9mb3BzLCAqbmV3X2ZvcHMgPSBOVUxMOworCisJc3Bpbl9sb2NrICgmbWlub3JfbG9jayk7CisJYyA9IHVzYl9taW5vcnNbbWlub3JdOworCisJaWYgKCFjIHx8ICEobmV3X2ZvcHMgPSBmb3BzX2dldChjKSkpIHsKKwkJc3Bpbl91bmxvY2soJm1pbm9yX2xvY2spOworCQlyZXR1cm4gZXJyOworCX0KKwlzcGluX3VubG9jaygmbWlub3JfbG9jayk7CisKKwlvbGRfZm9wcyA9IGZpbGUtPmZfb3A7CisJZmlsZS0+Zl9vcCA9IG5ld19mb3BzOworCS8qIEN1cmlvdXNlciBhbmQgY3VyaW91c2VyLi4uIE5VTEwgLT5vcGVuKCkgYXMgIm5vIGRldmljZSIgPyAqLworCWlmIChmaWxlLT5mX29wLT5vcGVuKQorCQllcnIgPSBmaWxlLT5mX29wLT5vcGVuKGlub2RlLGZpbGUpOworCWlmIChlcnIpIHsKKwkJZm9wc19wdXQoZmlsZS0+Zl9vcCk7CisJCWZpbGUtPmZfb3AgPSBmb3BzX2dldChvbGRfZm9wcyk7CisJfQorCWZvcHNfcHV0KG9sZF9mb3BzKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2JfZm9wcyA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkub3BlbiA9CQl1c2Jfb3BlbiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xhc3Nfc2ltcGxlICp1c2JfY2xhc3M7CisKK2ludCB1c2JfbWFqb3JfaW5pdCh2b2lkKQoreworCWludCBlcnJvcjsKKworCWVycm9yID0gcmVnaXN0ZXJfY2hyZGV2KFVTQl9NQUpPUiwgInVzYiIsICZ1c2JfZm9wcyk7CisJaWYgKGVycm9yKSB7CisJCWVycigidW5hYmxlIHRvIGdldCBtYWpvciAlZCBmb3IgdXNiIGRldmljZXMiLCBVU0JfTUFKT1IpOworCQlnb3RvIG91dDsKKwl9CisKKwl1c2JfY2xhc3MgPSBjbGFzc19zaW1wbGVfY3JlYXRlKFRISVNfTU9EVUxFLCAidXNiIik7CisJaWYgKElTX0VSUih1c2JfY2xhc3MpKSB7CisJCWVycigiY2xhc3Nfc2ltcGxlX2NyZWF0ZSBmYWlsZWQgZm9yIHVzYiBkZXZpY2VzIik7CisJCXVucmVnaXN0ZXJfY2hyZGV2KFVTQl9NQUpPUiwgInVzYiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlkZXZmc19ta19kaXIoInVzYiIpOworCitvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCit2b2lkIHVzYl9tYWpvcl9jbGVhbnVwKHZvaWQpCit7CisJY2xhc3Nfc2ltcGxlX2Rlc3Ryb3kodXNiX2NsYXNzKTsKKwlkZXZmc19yZW1vdmUoInVzYiIpOworCXVucmVnaXN0ZXJfY2hyZGV2KFVTQl9NQUpPUiwgInVzYiIpOworfQorCisvKioKKyAqIHVzYl9yZWdpc3Rlcl9kZXYgLSByZWdpc3RlciBhIFVTQiBkZXZpY2UsIGFuZCBhc2sgZm9yIGEgbWlub3IgbnVtYmVyCisgKiBAaW50ZjogcG9pbnRlciB0byB0aGUgdXNiX2ludGVyZmFjZSB0aGF0IGlzIGJlaW5nIHJlZ2lzdGVyZWQKKyAqIEBjbGFzc19kcml2ZXI6IHBvaW50ZXIgdG8gdGhlIHVzYl9jbGFzc19kcml2ZXIgZm9yIHRoaXMgZGV2aWNlCisgKgorICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJ5IGFsbCBVU0IgZHJpdmVycyB0aGF0IHVzZSB0aGUgVVNCIG1ham9yIG51bWJlci4KKyAqIElmIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgZW5hYmxlZCwgdGhlIG1pbm9yIG51bWJlciB3aWxsIGJlCisgKiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgb3V0IG9mIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBvbmVzLiAgSWYgaXQgaXMgbm90CisgKiBlbmFibGVkLCB0aGUgbWlub3IgbnVtYmVyIHdpbGwgYmUgYmFzZWQgb24gdGhlIG5leHQgYXZhaWxhYmxlIGZyZWUgbWlub3IsCisgKiBzdGFydGluZyBhdCB0aGUgY2xhc3NfZHJpdmVyLT5taW5vcl9iYXNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxzbyBjcmVhdGVzIHRoZSBkZXZmcyBmaWxlIGZvciB0aGUgdXNiIGRldmljZSwgaWYgZGV2ZnMKKyAqIGlzIGVuYWJsZWQsIGFuZCBjcmVhdGVzIGEgdXNiIGNsYXNzIGRldmljZSBpbiB0aGUgc3lzZnMgdHJlZS4KKyAqCisgKiB1c2JfZGVyZWdpc3Rlcl9kZXYoKSBtdXN0IGJlIGNhbGxlZCB3aGVuIHRoZSBkcml2ZXIgaXMgZG9uZSB3aXRoCisgKiB0aGUgbWlub3IgbnVtYmVycyBnaXZlbiBvdXQgYnkgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBSZXR1cm5zIC1FSU5WQUwgaWYgc29tZXRoaW5nIGJhZCBoYXBwZW5zIHdpdGggdHJ5aW5nIHRvIHJlZ2lzdGVyIGEKKyAqIGRldmljZSwgYW5kIDAgb24gc3VjY2Vzcy4KKyAqLworaW50IHVzYl9yZWdpc3Rlcl9kZXYoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCSAgICAgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgKmNsYXNzX2RyaXZlcikKK3sKKwlpbnQgcmV0dmFsID0gLUVJTlZBTDsKKwlpbnQgbWlub3JfYmFzZSA9IGNsYXNzX2RyaXZlci0+bWlub3JfYmFzZTsKKwlpbnQgbWlub3IgPSAwOworCWNoYXIgbmFtZVtCVVNfSURfU0laRV07CisJY2hhciAqdGVtcDsKKworI2lmZGVmIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMKKwkvKiAKKwkgKiBXZSBkb24ndCBjYXJlIHdoYXQgdGhlIGRldmljZSB0cmllcyB0byBzdGFydCBhdCwgd2Ugd2FudCB0byBzdGFydAorCSAqIGF0IHplcm8gdG8gcGFjayB0aGUgZGV2aWNlcyBpbnRvIHRoZSBzbWFsbGVzdCBhdmFpbGFibGUgc3BhY2Ugd2l0aAorCSAqIG5vIGhvbGVzIGluIHRoZSBtaW5vciByYW5nZS4KKwkgKi8KKwltaW5vcl9iYXNlID0gMDsKKyNlbmRpZgorCWludGYtPm1pbm9yID0gLTE7CisKKwlkYmcgKCJsb29raW5nIGZvciBhIG1pbm9yLCBzdGFydGluZyBhdCAlZCIsIG1pbm9yX2Jhc2UpOworCisJaWYgKGNsYXNzX2RyaXZlci0+Zm9wcyA9PSBOVUxMKQorCQlnb3RvIGV4aXQ7CisKKwlzcGluX2xvY2sgKCZtaW5vcl9sb2NrKTsKKwlmb3IgKG1pbm9yID0gbWlub3JfYmFzZTsgbWlub3IgPCBNQVhfVVNCX01JTk9SUzsgKyttaW5vcikgeworCQlpZiAodXNiX21pbm9yc1ttaW5vcl0pCisJCQljb250aW51ZTsKKworCQl1c2JfbWlub3JzW21pbm9yXSA9IGNsYXNzX2RyaXZlci0+Zm9wczsKKworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2sgKCZtaW5vcl9sb2NrKTsKKworCWlmIChyZXR2YWwpCisJCWdvdG8gZXhpdDsKKworCWludGYtPm1pbm9yID0gbWlub3I7CisKKwkvKiBoYW5kbGUgdGhlIGRldmZzIHJlZ2lzdHJhdGlvbiAqLworCXNucHJpbnRmKG5hbWUsIEJVU19JRF9TSVpFLCBjbGFzc19kcml2ZXItPm5hbWUsIG1pbm9yIC0gbWlub3JfYmFzZSk7CisJZGV2ZnNfbWtfY2RldihNS0RFVihVU0JfTUFKT1IsIG1pbm9yKSwgY2xhc3NfZHJpdmVyLT5tb2RlLCBuYW1lKTsKKworCS8qIGNyZWF0ZSBhIHVzYiBjbGFzcyBkZXZpY2UgZm9yIHRoaXMgdXNiIGludGVyZmFjZSAqLworCXRlbXAgPSBzdHJyY2hyKG5hbWUsICcvJyk7CisJaWYgKHRlbXAgJiYgKHRlbXBbMV0gIT0gMHgwMCkpCisJCSsrdGVtcDsKKwllbHNlCisJCXRlbXAgPSBuYW1lOworCWludGYtPmNsYXNzX2RldiA9IGNsYXNzX3NpbXBsZV9kZXZpY2VfYWRkKHVzYl9jbGFzcywgTUtERVYoVVNCX01BSk9SLCBtaW5vciksICZpbnRmLT5kZXYsICIlcyIsIHRlbXApOworCWlmIChJU19FUlIoaW50Zi0+Y2xhc3NfZGV2KSkgeworCQlzcGluX2xvY2sgKCZtaW5vcl9sb2NrKTsKKwkJdXNiX21pbm9yc1tpbnRmLT5taW5vcl0gPSBOVUxMOworCQlzcGluX3VubG9jayAoJm1pbm9yX2xvY2spOworCQlkZXZmc19yZW1vdmUgKG5hbWUpOworCQlyZXR2YWwgPSBQVFJfRVJSKGludGYtPmNsYXNzX2Rldik7CisJfQorZXhpdDoKKwlyZXR1cm4gcmV0dmFsOworfQorRVhQT1JUX1NZTUJPTCh1c2JfcmVnaXN0ZXJfZGV2KTsKKworLyoqCisgKiB1c2JfZGVyZWdpc3Rlcl9kZXYgLSBkZXJlZ2lzdGVyIGEgVVNCIGRldmljZSdzIGR5bmFtaWMgbWlub3IuCisgKiBAaW50ZjogcG9pbnRlciB0byB0aGUgdXNiX2ludGVyZmFjZSB0aGF0IGlzIGJlaW5nIGRlcmVnaXN0ZXJlZAorICogQGNsYXNzX2RyaXZlcjogcG9pbnRlciB0byB0aGUgdXNiX2NsYXNzX2RyaXZlciBmb3IgdGhpcyBkZXZpY2UKKyAqCisgKiBVc2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdXNiX3JlZ2lzdGVyX2RldigpLiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQKKyAqIHdoZW4gdGhlIFVTQiBkcml2ZXIgaXMgZmluaXNoZWQgd2l0aCB0aGUgbWlub3IgbnVtYmVycyBnb3R0ZW4gZnJvbSBhCisgKiBjYWxsIHRvIHVzYl9yZWdpc3Rlcl9kZXYoKSAodXN1YWxseSB3aGVuIHRoZSBkZXZpY2UgaXMgZGlzY29ubmVjdGVkCisgKiBmcm9tIHRoZSBzeXN0ZW0uKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxzbyBjbGVhbnMgdXAgdGhlIGRldmZzIGZpbGUgZm9yIHRoZSB1c2IgZGV2aWNlLCBpZiBkZXZmcworICogaXMgZW5hYmxlZCwgYW5kIHJlbW92ZXMgdGhlIHVzYiBjbGFzcyBkZXZpY2UgZnJvbSB0aGUgc3lzZnMgdHJlZS4KKyAqIAorICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJ5IGFsbCBkcml2ZXJzIHRoYXQgdXNlIHRoZSBVU0IgbWFqb3IgbnVtYmVyLgorICovCit2b2lkIHVzYl9kZXJlZ2lzdGVyX2RldihzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCXN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyICpjbGFzc19kcml2ZXIpCit7CisJaW50IG1pbm9yX2Jhc2UgPSBjbGFzc19kcml2ZXItPm1pbm9yX2Jhc2U7CisJY2hhciBuYW1lW0JVU19JRF9TSVpFXTsKKworI2lmZGVmIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMKKwltaW5vcl9iYXNlID0gMDsKKyNlbmRpZgorCisJaWYgKGludGYtPm1pbm9yID09IC0xKQorCQlyZXR1cm47CisKKwlkYmcgKCJyZW1vdmluZyAlZCBtaW5vciIsIGludGYtPm1pbm9yKTsKKworCXNwaW5fbG9jayAoJm1pbm9yX2xvY2spOworCXVzYl9taW5vcnNbaW50Zi0+bWlub3JdID0gTlVMTDsKKwlzcGluX3VubG9jayAoJm1pbm9yX2xvY2spOworCisJc25wcmludGYobmFtZSwgQlVTX0lEX1NJWkUsIGNsYXNzX2RyaXZlci0+bmFtZSwgaW50Zi0+bWlub3IgLSBtaW5vcl9iYXNlKTsKKwlkZXZmc19yZW1vdmUgKG5hbWUpOworCWNsYXNzX3NpbXBsZV9kZXZpY2VfcmVtb3ZlKE1LREVWKFVTQl9NQUpPUiwgaW50Zi0+bWlub3IpKTsKKwlpbnRmLT5jbGFzc19kZXYgPSBOVUxMOworCWludGYtPm1pbm9yID0gLTE7Cit9CitFWFBPUlRfU1lNQk9MKHVzYl9kZXJlZ2lzdGVyX2Rldik7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWEzZGFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKQEAgLTAsMCArMSwzNTggQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IERhdmlkIEJyb3duZWxsIDIwMDAtMjAwMgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCisJI2RlZmluZSBERUJVRworI2Vsc2UKKwkjdW5kZWYgREVCVUcKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgImhjZC5oIgorCisKKy8qIFBDSS1iYXNlZCBIQ3MgYXJlIG5vcm1hbCwgYnV0IGN1c3RvbSBidXMgZ2x1ZSBzaG91bGQgYmUgb2sgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBjb25maWd1cmUgc28gYW4gSEMgZGV2aWNlIGFuZCBpZCBhcmUgYWx3YXlzIHByb3ZpZGVkICovCisvKiBhbHdheXMgY2FsbGVkIHdpdGggcHJvY2VzcyBjb250ZXh0OyBzbGVlcGluZyBpcyBPSyAqLworCisvKioKKyAqIHVzYl9oY2RfcGNpX3Byb2JlIC0gaW5pdGlhbGl6ZSBQQ0ktYmFzZWQgSENEcworICogQGRldjogVVNCIEhvc3QgQ29udHJvbGxlciBiZWluZyBwcm9iZWQKKyAqIEBpZDogcGNpIGhvdHBsdWcgaWQgY29ubmVjdGluZyBjb250cm9sbGVyIHRvIEhDRCBmcmFtZXdvcmsKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIEFsbG9jYXRlcyBiYXNpYyBQQ0kgcmVzb3VyY2VzIGZvciB0aGlzIFVTQiBob3N0IGNvbnRyb2xsZXIsIGFuZAorICogdGhlbiBpbnZva2VzIHRoZSBzdGFydCgpIG1ldGhvZCBmb3IgdGhlIEhDRCBhc3NvY2lhdGVkIHdpdGggaXQKKyAqIHRocm91Z2ggdGhlIGhvdHBsdWcgZW50cnkncyBkcml2ZXJfZGF0YS4KKyAqCisgKiBTdG9yZSB0aGlzIGZ1bmN0aW9uIGluIHRoZSBIQ0QncyBzdHJ1Y3QgcGNpX2RyaXZlciBhcyBwcm9iZSgpLgorICovCitpbnQgdXNiX2hjZF9wY2lfcHJvYmUgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgaGNfZHJpdmVyCSpkcml2ZXI7CisJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CisJaW50CQkJcmV0dmFsOworCisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghaWQgfHwgIShkcml2ZXIgPSAoc3RydWN0IGhjX2RyaXZlciAqKSBpZC0+ZHJpdmVyX2RhdGEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwY2lfZW5hYmxlX2RldmljZSAoZGV2KSA8IDApCisJCXJldHVybiAtRU5PREVWOworCWRldi0+Y3VycmVudF9zdGF0ZSA9IDA7CisJZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSAwOworCQorICAgICAgICBpZiAoIWRldi0+aXJxKSB7CisgICAgICAgIAlkZXZfZXJyICgmZGV2LT5kZXYsCisJCQkiRm91bmQgSEMgd2l0aCBubyBJUlEuICBDaGVjayBCSU9TL1BDSSAlcyBzZXR1cCFcbiIsCisJCQlwY2lfbmFtZShkZXYpKTsKKyAgIAkgICAgICAgIHJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyMTsKKyAgICAgICAgfQorCisJaGNkID0gdXNiX2NyZWF0ZV9oY2QgKGRyaXZlciwgJmRldi0+ZGV2LCBwY2lfbmFtZShkZXYpKTsKKwlpZiAoIWhjZCkgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycjE7CisJfQorCisJaWYgKGRyaXZlci0+ZmxhZ3MgJiBIQ0RfTUVNT1JZKSB7CS8vIEVIQ0ksIE9IQ0kKKwkJaGNkLT5yc3JjX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0IChkZXYsIDApOworCQloY2QtPnJzcmNfbGVuID0gcGNpX3Jlc291cmNlX2xlbiAoZGV2LCAwKTsKKwkJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24gKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwKKwkJCQlkcml2ZXItPmRlc2NyaXB0aW9uKSkgeworCQkJZGV2X2RiZyAoJmRldi0+ZGV2LCAiY29udHJvbGxlciBhbHJlYWR5IGluIHVzZVxuIik7CisJCQlyZXR2YWwgPSAtRUJVU1k7CisJCQlnb3RvIGVycjI7CisJCX0KKwkJaGNkLT5yZWdzID0gaW9yZW1hcF9ub2NhY2hlIChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCQlpZiAoaGNkLT5yZWdzID09IE5VTEwpIHsKKwkJCWRldl9kYmcgKCZkZXYtPmRldiwgImVycm9yIG1hcHBpbmcgbWVtb3J5XG4iKTsKKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQlnb3RvIGVycjM7CisJCX0KKworCX0gZWxzZSB7IAkJCQkvLyBVSENJCisJCWludAlyZWdpb247CisKKwkJZm9yIChyZWdpb24gPSAwOyByZWdpb24gPCBQQ0lfUk9NX1JFU09VUkNFOyByZWdpb24rKykgeworCQkJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzIChkZXYsIHJlZ2lvbikgJgorCQkJCQlJT1JFU09VUkNFX0lPKSkKKwkJCQljb250aW51ZTsKKworCQkJaGNkLT5yc3JjX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0IChkZXYsIHJlZ2lvbik7CisJCQloY2QtPnJzcmNfbGVuID0gcGNpX3Jlc291cmNlX2xlbiAoZGV2LCByZWdpb24pOworCQkJaWYgKHJlcXVlc3RfcmVnaW9uIChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4sCisJCQkJCWRyaXZlci0+ZGVzY3JpcHRpb24pKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChyZWdpb24gPT0gUENJX1JPTV9SRVNPVVJDRSkgeworCQkJZGV2X2RiZyAoJmRldi0+ZGV2LCAibm8gaS9vIHJlZ2lvbnMgYXZhaWxhYmxlXG4iKTsKKwkJCXJldHZhbCA9IC1FQlVTWTsKKwkJCWdvdG8gZXJyMTsKKwkJfQorCX0KKworI2lmZGVmIENPTkZJR19QQ0lfTkFNRVMKKwloY2QtPnByb2R1Y3RfZGVzYyA9IGRldi0+cHJldHR5X25hbWU7CisjZW5kaWYKKworCXBjaV9zZXRfbWFzdGVyIChkZXYpOworCisJcmV0dmFsID0gdXNiX2FkZF9oY2QgKGhjZCwgZGV2LT5pcnEsIFNBX1NISVJRKTsKKwlpZiAocmV0dmFsICE9IDApCisJCWdvdG8gZXJyNDsKKwlyZXR1cm4gcmV0dmFsOworCisgZXJyNDoKKwlpZiAoZHJpdmVyLT5mbGFncyAmIEhDRF9NRU1PUlkpIHsKKwkJaW91bm1hcCAoaGNkLT5yZWdzKTsKKyBlcnIzOgorCQlyZWxlYXNlX21lbV9yZWdpb24gKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJfSBlbHNlCisJCXJlbGVhc2VfcmVnaW9uIChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworIGVycjI6CisJdXNiX3B1dF9oY2QgKGhjZCk7CisgZXJyMToKKwlwY2lfZGlzYWJsZV9kZXZpY2UgKGRldik7CisJZGV2X2VyciAoJmRldi0+ZGV2LCAiaW5pdCAlcyBmYWlsLCAlZFxuIiwgcGNpX25hbWUoZGV2KSwgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfSAKK0VYUE9SVF9TWU1CT0wgKHVzYl9oY2RfcGNpX3Byb2JlKTsKKworCisvKiBtYXkgYmUgY2FsbGVkIHdpdGhvdXQgY29udHJvbGxlciBlbGVjdHJpY2FsbHkgcHJlc2VudCAqLworLyogbWF5IGJlIGNhbGxlZCB3aXRoIGNvbnRyb2xsZXIsIGJ1cywgYW5kIGRldmljZXMgYWN0aXZlICovCisKKy8qKgorICogdXNiX2hjZF9wY2lfcmVtb3ZlIC0gc2h1dGRvd24gcHJvY2Vzc2luZyBmb3IgUENJLWJhc2VkIEhDRHMKKyAqIEBkZXY6IFVTQiBIb3N0IENvbnRyb2xsZXIgYmVpbmcgcmVtb3ZlZAorICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogUmV2ZXJzZXMgdGhlIGVmZmVjdCBvZiB1c2JfaGNkX3BjaV9wcm9iZSgpLCBmaXJzdCBpbnZva2luZworICogdGhlIEhDRCdzIHN0b3AoKSBtZXRob2QuICBJdCBpcyBhbHdheXMgY2FsbGVkIGZyb20gYSB0aHJlYWQKKyAqIGNvbnRleHQsIG5vcm1hbGx5ICJybW1vZCIsICJhcG1kIiwgb3Igc29tZXRoaW5nIHNpbWlsYXIuCisgKgorICogU3RvcmUgdGhpcyBmdW5jdGlvbiBpbiB0aGUgSENEJ3Mgc3RydWN0IHBjaV9kcml2ZXIgYXMgcmVtb3ZlKCkuCisgKi8KK3ZvaWQgdXNiX2hjZF9wY2lfcmVtb3ZlIChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCisJaGNkID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJaWYgKCFoY2QpCisJCXJldHVybjsKKworCXVzYl9yZW1vdmVfaGNkIChoY2QpOworCWlmIChoY2QtPmRyaXZlci0+ZmxhZ3MgJiBIQ0RfTUVNT1JZKSB7CisJCWlvdW5tYXAgKGhjZC0+cmVncyk7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbiAoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwl9IGVsc2UgeworCQlyZWxlYXNlX3JlZ2lvbiAoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwl9CisJdXNiX3B1dF9oY2QgKGhjZCk7CisJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7Cit9CitFWFBPUlRfU1lNQk9MICh1c2JfaGNkX3BjaV9yZW1vdmUpOworCisKKyNpZmRlZglDT05GSUdfUE0KKworc3RhdGljIGNoYXIgX19hdHRyaWJ1dGVfdXNlZF9fICpwY2lfc3RhdGUodTMyIHN0YXRlKQoreworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIDA6CQlyZXR1cm4gIkQwIjsKKwljYXNlIDE6CQlyZXR1cm4gIkQxIjsKKwljYXNlIDI6CQlyZXR1cm4gIkQyIjsKKwljYXNlIDM6CQlyZXR1cm4gIkQzaG90IjsKKwljYXNlIDQ6CQlyZXR1cm4gIkQzY29sZCI7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIHVzYl9oY2RfcGNpX3N1c3BlbmQgLSBwb3dlciBtYW5hZ2VtZW50IHN1c3BlbmQgb2YgYSBQQ0ktYmFzZWQgSENECisgKiBAZGV2OiBVU0IgSG9zdCBDb250cm9sbGVyIGJlaW5nIHN1c3BlbmRlZAorICogQHN0YXRlOiBzdGF0ZSB0aGF0IHRoZSBjb250cm9sbGVyIGlzIGdvaW5nIGludG8KKyAqCisgKiBTdG9yZSB0aGlzIGZ1bmN0aW9uIGluIHRoZSBIQ0QncyBzdHJ1Y3QgcGNpX2RyaXZlciBhcyBzdXNwZW5kKCkuCisgKi8KK2ludCB1c2JfaGNkX3BjaV9zdXNwZW5kIChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MzIgc3RhdGUpCit7CisJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CisJaW50CQkJcmV0dmFsID0gMDsKKwlpbnQJCQloYXNfcGNpX3BtOworCisJaGNkID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisKKwkvKiBldmVuIHdoZW4gdGhlIFBDSSBsYXllciByZWplY3RzIHNvbWUgb2YgdGhlIFBDSSBjYWxscworCSAqIGJlbG93LCBIQ3MgY2FuIHRyeSBnbG9iYWwgc3VzcGVuZCBhbmQgcmVkdWNlIERNQSB0cmFmZmljLgorCSAqIFBNLXNlbnNpdGl2ZSBIQ0RzIG1heSBhbHJlYWR5IGhhdmUgZG9uZSB0aGlzLgorCSAqLworCWhhc19wY2lfcG0gPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9QTSk7CisJaWYgKHN0YXRlID4gNCkKKwkJc3RhdGUgPSA0OworCisJc3dpdGNoIChoY2QtPnN0YXRlKSB7CisKKwkvKiBlbnRyeSBpZiByb290IGh1YiB3YXNuJ3QgeWV0IHN1c3BlbmRlZCAuLi4gZnJvbSBzeXNmcywKKwkgKiB3aXRob3V0IGF1dG9zdXNwZW5kLCBvciBpZiBVU0JfU1VTUEVORCBpc24ndCBjb25maWd1cmVkLgorCSAqLworCWNhc2UgSENfU1RBVEVfUlVOTklORzoKKwkJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1FVSUVTQ0lORzsKKwkJcmV0dmFsID0gaGNkLT5kcml2ZXItPnN1c3BlbmQgKGhjZCwgc3RhdGUpOworCQlpZiAocmV0dmFsKSB7CisJCQlkZXZfZGJnIChoY2QtPnNlbGYuY29udHJvbGxlciwgCisJCQkJCSJzdXNwZW5kIGZhaWwsIHJldHZhbCAlZFxuIiwKKwkJCQkJcmV0dmFsKTsKKwkJCWJyZWFrOworCQl9CisJCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9TVVNQRU5ERUQ7CisJCS8qIEZBTExUSFJPVUdIICovCisKKwkvKiBlbnRyeSB3aXRoIENPTkZJR19VU0JfU1VTUEVORCwgb3IgaGNkcyB0aGF0IGF1dG9zdXNwZW5kOiB0aGUKKwkgKiBjb250cm9sbGVyIGFuZC9vciByb290IGh1YiB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIHN1c3BlbmRlZCwKKwkgKiBidXQgaXQgd29uJ3QgYmUgcmVhZHkgZm9yIGEgUENJIHJlc3VtZSBjYWxsLgorCSAqCisJICogRklYTUUgb25seSBDT05GSUdfVVNCX1NVU1BFTkQgZ3VhcmFudGVlcyBodWJfc3VzcGVuZCgpIHdpbGwKKwkgKiBoYXZlIGJlZW4gY2FsbGVkLCBvdGhlcndpc2Ugcm9vdCBodWIgdGltZXJzIHN0aWxsIHJ1biAuLi4KKwkgKi8KKwljYXNlIEhDX1NUQVRFX1NVU1BFTkRFRDoKKwkJaWYgKHN0YXRlIDw9IGRldi0+Y3VycmVudF9zdGF0ZSkKKwkJCWJyZWFrOworCisJCS8qIG5vIERNQSBvciBJUlFzIGV4Y2VwdCBpbiBEMCAqLworCQlpZiAoIWRldi0+Y3VycmVudF9zdGF0ZSkgeworCQkJcGNpX3NhdmVfc3RhdGUgKGRldik7CisJCQlwY2lfZGlzYWJsZV9kZXZpY2UgKGRldik7CisJCQlmcmVlX2lycSAoaGNkLT5pcnEsIGhjZCk7CisJCX0KKworCQlpZiAoIWhhc19wY2lfcG0pIHsKKwkJCWRldl9kYmcgKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiLS0+IFBDSSBEMC9sZWdhY3lcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBQT0xJQ1k6IGlnbm9yZSBEMS9EMi9EM2hvdCBkaWZmZXJlbmNlczsKKwkJICogd2Uga25vdyBEM2hvdCB3aWxsIGFsd2F5cyB3b3JrLgorCQkgKi8KKwkJcmV0dmFsID0gcGNpX3NldF9wb3dlcl9zdGF0ZSAoZGV2LCBzdGF0ZSk7CisJCWlmIChyZXR2YWwgPCAwICYmIHN0YXRlIDwgMykgeworCQkJcmV0dmFsID0gcGNpX3NldF9wb3dlcl9zdGF0ZSAoZGV2LCAzKTsKKwkJCWlmIChyZXR2YWwgPT0gMCkKKwkJCQlzdGF0ZSA9IDM7CisJCX0KKwkJaWYgKHJldHZhbCA9PSAwKSB7CisJCQlkZXZfZGJnIChoY2QtPnNlbGYuY29udHJvbGxlciwgIi0tPiBQQ0kgJXNcbiIsCisJCQkJCXBjaV9zdGF0ZShkZXYtPmN1cnJlbnRfc3RhdGUpKTsKKyNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKKwkJCXBjaV9lbmFibGVfd2FrZSAoZGV2LCBzdGF0ZSwgaGNkLT5yZW1vdGVfd2FrZXVwKTsKKwkJCXBjaV9lbmFibGVfd2FrZSAoZGV2LCA0LCBoY2QtPnJlbW90ZV93YWtldXApOworI2VuZGlmCisJCX0gZWxzZSBpZiAocmV0dmFsIDwgMCkgeworCQkJZGV2X2RiZyAoJmRldi0+ZGV2LCAiUENJICVzIHN1c3BlbmQgZmFpbCwgJWRcbiIsCisJCQkJCXBjaV9zdGF0ZShzdGF0ZSksIHJldHZhbCk7CisJCQkodm9pZCkgdXNiX2hjZF9wY2lfcmVzdW1lIChkZXYpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2RiZyAoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJoY2Qgc3RhdGUgJWQ7IG5vdCBzdXNwZW5kZWRcbiIsCisJCQloY2QtPnN0YXRlKTsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJLyogdXBkYXRlIHBvd2VyX3N0YXRlICoqT05MWSoqIHRvIG1ha2Ugc3lzZnMgaGFwcGllciAqLworCWlmIChyZXR2YWwgPT0gMCkKKwkJZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKKwlyZXR1cm4gcmV0dmFsOworfQorRVhQT1JUX1NZTUJPTCAodXNiX2hjZF9wY2lfc3VzcGVuZCk7CisKKy8qKgorICogdXNiX2hjZF9wY2lfcmVzdW1lIC0gcG93ZXIgbWFuYWdlbWVudCByZXN1bWUgb2YgYSBQQ0ktYmFzZWQgSENECisgKiBAZGV2OiBVU0IgSG9zdCBDb250cm9sbGVyIGJlaW5nIHJlc3VtZWQKKyAqCisgKiBTdG9yZSB0aGlzIGZ1bmN0aW9uIGluIHRoZSBIQ0QncyBzdHJ1Y3QgcGNpX2RyaXZlciBhcyByZXN1bWUoKS4KKyAqLworaW50IHVzYl9oY2RfcGNpX3Jlc3VtZSAoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKwlpbnQJCQlyZXR2YWw7CisJaW50CQkJaGFzX3BjaV9wbTsKKworCWhjZCA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCWlmIChoY2QtPnN0YXRlICE9IEhDX1NUQVRFX1NVU1BFTkRFRCkgeworCQlkZXZfZGJnIChoY2QtPnNlbGYuY29udHJvbGxlciwgCisJCQkJImNhbid0IHJlc3VtZSwgbm90IHN1c3BlbmRlZCFcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaGFzX3BjaV9wbSA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX1BNKTsKKworCS8qIEQzY29sZCByZXN1bWUgaXNuJ3QgdXN1YWxseSByZXBvcnRlZCB0aGlzIHdheS4uLiAqLworCWRldl9kYmcoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJyZXN1bWUgZnJvbSBQQ0kgJXMlc1xuIiwKKwkJCXBjaV9zdGF0ZShkZXYtPmN1cnJlbnRfc3RhdGUpLAorCQkJaGFzX3BjaV9wbSA/ICIiIDogIiAobGVnYWN5KSIpOworCisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JFU1VNSU5HOworCisJaWYgKGhhc19wY2lfcG0pCisJCXBjaV9zZXRfcG93ZXJfc3RhdGUgKGRldiwgMCk7CisJZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSAwOworCXJldHZhbCA9IHJlcXVlc3RfaXJxIChkZXYtPmlycSwgdXNiX2hjZF9pcnEsIFNBX1NISVJRLAorCQkJCWhjZC0+ZHJpdmVyLT5kZXNjcmlwdGlvbiwgaGNkKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkZXZfZXJyIChoY2QtPnNlbGYuY29udHJvbGxlciwKKwkJCSJjYW4ndCByZXN0b3JlIElSUSBhZnRlciByZXN1bWUhXG4iKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJaGNkLT5zYXdfaXJxID0gMDsKKwlwY2lfcmVzdG9yZV9zdGF0ZSAoZGV2KTsKKyNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKKwlwY2lfZW5hYmxlX3dha2UgKGRldiwgZGV2LT5jdXJyZW50X3N0YXRlLCAwKTsKKwlwY2lfZW5hYmxlX3dha2UgKGRldiwgNCwgMCk7CisjZW5kaWYKKworCXJldHZhbCA9IGhjZC0+ZHJpdmVyLT5yZXN1bWUgKGhjZCk7CisJaWYgKCFIQ19JU19SVU5OSU5HIChoY2QtPnN0YXRlKSkgeworCQlkZXZfZGJnIChoY2QtPnNlbGYuY29udHJvbGxlciwgCisJCQkJInJlc3VtZSBmYWlsLCByZXR2YWwgJWRcbiIsIHJldHZhbCk7CisJCXVzYl9oY19kaWVkIChoY2QpOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CitFWFBPUlRfU1lNQk9MICh1c2JfaGNkX3BjaV9yZXN1bWUpOworCisjZW5kaWYJLyogQ09ORklHX1BNICovCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY2ZTllMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKQEAgLTAsMCArMSwxODQwIEBACisvKgorICogKEMpIENvcHlyaWdodCBMaW51cyBUb3J2YWxkcyAxOTk5CisgKiAoQykgQ29weXJpZ2h0IEpvaGFubmVzIEVyZGZlbHQgMTk5OS0yMDAxCisgKiAoQykgQ29weXJpZ2h0IEFuZHJlYXMgR2FsIDE5OTkKKyAqIChDKSBDb3B5cmlnaHQgR3JlZ29yeSBQLiBTbWl0aCAxOTk5CisgKiAoQykgQ29weXJpZ2h0IERldGkgRmxpZWdsIDE5OTkKKyAqIChDKSBDb3B5cmlnaHQgUmFuZHkgRHVubGFwIDIwMDAKKyAqIChDKSBDb3B5cmlnaHQgRGF2aWQgQnJvd25lbGwgMjAwMC0yMDAyCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKyNkZWZpbmUgREVCVUcKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJ1c2IuaCIKKyNpbmNsdWRlICJoY2QuaCIKKyNpbmNsdWRlICJodWIuaCIKKworCisvLyAjZGVmaW5lIFVTQl9CQU5EV0lEVEhfTUVTU0FHRVMKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVyIGZyYW1ld29yaworICoKKyAqIFBsdWdzIGludG8gdXNiY29yZSAodXNiX2J1cykgYW5kIGxldHMgSENEcyBzaGFyZSBjb2RlLCBtaW5pbWl6aW5nCisgKiBIQ0Qtc3BlY2lmaWMgYmVoYXZpb3JzL2J1Z3MuCisgKgorICogVGhpcyBkb2VzIGVycm9yIGNoZWNrcywgdHJhY2tzIGRldmljZXMgYW5kIHVyYnMsIGFuZCBkZWxlZ2F0ZXMgdG8gYQorICogImhjX2RyaXZlciIgb25seSBmb3IgY29kZSAoYW5kIGRhdGEpIHRoYXQgcmVhbGx5IG5lZWRzIHRvIGtub3cgYWJvdXQKKyAqIGhhcmR3YXJlIGRpZmZlcmVuY2VzLiAgVGhhdCBpbmNsdWRlcyByb290IGh1YiByZWdpc3RlcnMsIGkvbyBxdWV1ZXMsCisgKiBhbmQgc28gb24gLi4uIGJ1dCBhcyBsaXR0bGUgZWxzZSBhcyBwb3NzaWJsZS4KKyAqCisgKiBTaGFyZWQgY29kZSBpbmNsdWRlcyBtb3N0IG9mIHRoZSAicm9vdCBodWIiIGNvZGUgKHRoZXNlIGFyZSBlbXVsYXRlZCwKKyAqIHRob3VnaCBlYWNoIEhDJ3MgaGFyZHdhcmUgd29ya3MgZGlmZmVyZW50bHkpIGFuZCBQQ0kgZ2x1ZSwgcGx1cyByZXF1ZXN0CisgKiB0cmFja2luZyBvdmVyaGVhZC4gIFRoZSBIQ0QgY29kZSBzaG91bGQgb25seSBibG9jayBvbiBzcGlubG9ja3Mgb3Igb24KKyAqIGhhcmR3YXJlIGhhbmRzaGFraW5nOyBibG9ja2luZyBvbiBzb2Z0d2FyZSBldmVudHMgKHN1Y2ggYXMgb3RoZXIga2VybmVsCisgKiB0aHJlYWRzIHJlbGVhc2luZyByZXNvdXJjZXMsIG9yIGNvbXBsZXRpbmcgYWN0aW9ucykgaXMgYWxsIGdlbmVyaWMuCisgKgorICogSGFwcGVucyB0aGUgVVNCIDIuMCBzcGVjIHNheXMgdGhpcyB3b3VsZCBiZSBpbnZpc2libGUgaW5zaWRlIHRoZSAiVVNCRCIsCisgKiBhbmQgaW5jbHVkZXMgbW9zdGx5IGEgIkhDREkiIChIQ0QgSW50ZXJmYWNlKSBhbG9uZyB3aXRoIHNvbWUgQVBJcyB1c2VkCisgKiBvbmx5IGJ5IHRoZSBodWIgZHJpdmVyIC4uLiBhbmQgdGhhdCBuZWl0aGVyIHNob3VsZCBiZSBzZWVuIG9yIHVzZWQgYnkKKyAqIHVzYiBjbGllbnQgZGV2aWNlIGRyaXZlcnMuCisgKgorICogQ29udHJpYnV0b3JzIG9mIGlkZWFzIG9yIHVuYXR0cmlidXRlZCBwYXRjaGVzIGluY2x1ZGU6IERhdmlkIEJyb3duZWxsLAorICogUm9tYW4gV2Vpc3NnYWVyYmVyLCBSb3J5IEJvbHQsIEdyZWcgS3JvYWgtSGFydG1hbiwgLi4uCisgKgorICogSElTVE9SWToKKyAqIDIwMDItMDItMjEJUHVsbCBpbiBtb3N0IG9mIHRoZSB1c2JfYnVzIHN1cHBvcnQgZnJvbSB1c2IuYzsgc29tZQorICoJCWFzc29jaWF0ZWQgY2xlYW51cC4gICJ1c2JfaGNkIiBzdGlsbCAhPSAidXNiX2J1cyIuCisgKiAyMDAxLTEyLTEyCUluaXRpYWwgcGF0Y2ggdmVyc2lvbiBmb3IgTGludXggMi41LjEga2VybmVsLgorICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGhvc3QgY29udHJvbGxlcnMgd2UgbWFuYWdlICovCitMSVNUX0hFQUQgKHVzYl9idXNfbGlzdCk7CitFWFBPUlRfU1lNQk9MX0dQTCAodXNiX2J1c19saXN0KTsKKworLyogdXNlZCB3aGVuIGFsbG9jYXRpbmcgYnVzIG51bWJlcnMgKi8KKyNkZWZpbmUgVVNCX01BWEJVUwkJNjQKK3N0cnVjdCB1c2JfYnVzbWFwIHsKKwl1bnNpZ25lZCBsb25nIGJ1c21hcCBbVVNCX01BWEJVUyAvICg4KnNpemVvZiAodW5zaWduZWQgbG9uZykpXTsKK307CitzdGF0aWMgc3RydWN0IHVzYl9idXNtYXAgYnVzbWFwOworCisvKiB1c2VkIHdoZW4gdXBkYXRpbmcgbGlzdCBvZiBoY2RzICovCitERUNMQVJFX01VVEVYICh1c2JfYnVzX2xpc3RfbG9jayk7CS8qIGV4cG9ydGVkIG9ubHkgZm9yIHVzYmZzICovCitFWFBPUlRfU1lNQk9MX0dQTCAodXNiX2J1c19saXN0X2xvY2spOworCisvKiB1c2VkIGZvciBjb250cm9sbGluZyBhY2Nlc3MgdG8gdmlydHVhbCByb290IGh1YnMgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soaGNkX3Jvb3RfaHViX2xvY2spOworCisvKiB1c2VkIHdoZW4gdXBkYXRpbmcgaGNkIGRhdGEgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soaGNkX2RhdGFfbG9jayk7CisKKy8qIHdhaXQgcXVldWUgZm9yIHN5bmNocm9ub3VzIHVubGlua3MgKi8KK0RFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHVzYl9raWxsX3VyYl9xdWV1ZSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBTaGFyYWJsZSBjaHVua3Mgb2Ygcm9vdCBodWIgY29kZS4KKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIEtFUk5FTF9SRUwJKChMSU5VWF9WRVJTSU9OX0NPREUgPj4gMTYpICYgMHgwZmYpCisjZGVmaW5lIEtFUk5FTF9WRVIJKChMSU5VWF9WRVJTSU9OX0NPREUgPj4gOCkgJiAweDBmZikKKworLyogdXNiIDIuMCByb290IGh1YiBkZXZpY2UgZGVzY3JpcHRvciAqLworc3RhdGljIGNvbnN0IHU4IHVzYjJfcmhfZGV2X2Rlc2NyaXB0b3IgWzE4XSA9IHsKKwkweDEyLCAgICAgICAvKiAgX191OCAgYkxlbmd0aDsgKi8KKwkweDAxLCAgICAgICAvKiAgX191OCAgYkRlc2NyaXB0b3JUeXBlOyBEZXZpY2UgKi8KKwkweDAwLCAweDAyLCAvKiAgX19sZTE2IGJjZFVTQjsgdjIuMCAqLworCisJMHgwOSwJICAgIC8qICBfX3U4ICBiRGV2aWNlQ2xhc3M7IEhVQl9DTEFTU0NPREUgKi8KKwkweDAwLAkgICAgLyogIF9fdTggIGJEZXZpY2VTdWJDbGFzczsgKi8KKwkweDAxLCAgICAgICAvKiAgX191OCAgYkRldmljZVByb3RvY29sOyBbIHVzYiAyLjAgc2luZ2xlIFRUIF0qLworCTB4MDgsICAgICAgIC8qICBfX3U4ICBiTWF4UGFja2V0U2l6ZTA7IDggQnl0ZXMgKi8KKworCTB4MDAsIDB4MDAsIC8qICBfX2xlMTYgaWRWZW5kb3I7ICovCisgCTB4MDAsIDB4MDAsIC8qICBfX2xlMTYgaWRQcm9kdWN0OyAqLworCUtFUk5FTF9WRVIsIEtFUk5FTF9SRUwsIC8qICBfX2xlMTYgYmNkRGV2aWNlICovCisKKwkweDAzLCAgICAgICAvKiAgX191OCAgaU1hbnVmYWN0dXJlcjsgKi8KKwkweDAyLCAgICAgICAvKiAgX191OCAgaVByb2R1Y3Q7ICovCisJMHgwMSwgICAgICAgLyogIF9fdTggIGlTZXJpYWxOdW1iZXI7ICovCisJMHgwMSAgICAgICAgLyogIF9fdTggIGJOdW1Db25maWd1cmF0aW9uczsgKi8KK307CisKKy8qIG5vIHVzYiAyLjAgcm9vdCBodWIgImRldmljZSBxdWFsaWZpZXIiIGRlc2NyaXB0b3I6IG9uZSBzcGVlZCBvbmx5ICovCisKKy8qIHVzYiAxLjEgcm9vdCBodWIgZGV2aWNlIGRlc2NyaXB0b3IgKi8KK3N0YXRpYyBjb25zdCB1OCB1c2IxMV9yaF9kZXZfZGVzY3JpcHRvciBbMThdID0geworCTB4MTIsICAgICAgIC8qICBfX3U4ICBiTGVuZ3RoOyAqLworCTB4MDEsICAgICAgIC8qICBfX3U4ICBiRGVzY3JpcHRvclR5cGU7IERldmljZSAqLworCTB4MTAsIDB4MDEsIC8qICBfX2xlMTYgYmNkVVNCOyB2MS4xICovCisKKwkweDA5LAkgICAgLyogIF9fdTggIGJEZXZpY2VDbGFzczsgSFVCX0NMQVNTQ09ERSAqLworCTB4MDAsCSAgICAvKiAgX191OCAgYkRldmljZVN1YkNsYXNzOyAqLworCTB4MDAsICAgICAgIC8qICBfX3U4ICBiRGV2aWNlUHJvdG9jb2w7IFsgbG93L2Z1bGwgc3BlZWRzIG9ubHkgXSAqLworCTB4MDgsICAgICAgIC8qICBfX3U4ICBiTWF4UGFja2V0U2l6ZTA7IDggQnl0ZXMgKi8KKworCTB4MDAsIDB4MDAsIC8qICBfX2xlMTYgaWRWZW5kb3I7ICovCisgCTB4MDAsIDB4MDAsIC8qICBfX2xlMTYgaWRQcm9kdWN0OyAqLworCUtFUk5FTF9WRVIsIEtFUk5FTF9SRUwsIC8qICBfX2xlMTYgYmNkRGV2aWNlICovCisKKwkweDAzLCAgICAgICAvKiAgX191OCAgaU1hbnVmYWN0dXJlcjsgKi8KKwkweDAyLCAgICAgICAvKiAgX191OCAgaVByb2R1Y3Q7ICovCisJMHgwMSwgICAgICAgLyogIF9fdTggIGlTZXJpYWxOdW1iZXI7ICovCisJMHgwMSAgICAgICAgLyogIF9fdTggIGJOdW1Db25maWd1cmF0aW9uczsgKi8KK307CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogQ29uZmlndXJhdGlvbiBkZXNjcmlwdG9ycyBmb3Igb3VyIHJvb3QgaHVicyAqLworCitzdGF0aWMgY29uc3QgdTggZnNfcmhfY29uZmlnX2Rlc2NyaXB0b3IgW10gPSB7CisKKwkvKiBvbmUgY29uZmlndXJhdGlvbiAqLworCTB4MDksICAgICAgIC8qICBfX3U4ICBiTGVuZ3RoOyAqLworCTB4MDIsICAgICAgIC8qICBfX3U4ICBiRGVzY3JpcHRvclR5cGU7IENvbmZpZ3VyYXRpb24gKi8KKwkweDE5LCAweDAwLCAvKiAgX19sZTE2IHdUb3RhbExlbmd0aDsgKi8KKwkweDAxLCAgICAgICAvKiAgX191OCAgYk51bUludGVyZmFjZXM7ICgxKSAqLworCTB4MDEsICAgICAgIC8qICBfX3U4ICBiQ29uZmlndXJhdGlvblZhbHVlOyAqLworCTB4MDAsICAgICAgIC8qICBfX3U4ICBpQ29uZmlndXJhdGlvbjsgKi8KKwkweGMwLCAgICAgICAvKiAgX191OCAgYm1BdHRyaWJ1dGVzOyAKKwkJCQkgQml0IDc6IG11c3QgYmUgc2V0LAorCQkJCSAgICAgNjogU2VsZi1wb3dlcmVkLAorCQkJCSAgICAgNTogUmVtb3RlIHdha2V1cCwKKwkJCQkgICAgIDQuLjA6IHJlc3ZkICovCisJMHgwMCwgICAgICAgLyogIF9fdTggIE1heFBvd2VyOyAqLworICAgICAgCisJLyogVVNCIDEuMToKKwkgKiBVU0IgMi4wLCBzaW5nbGUgVFQgb3JnYW5pemF0aW9uIChtYW5kYXRvcnkpOgorCSAqCW9uZSBpbnRlcmZhY2UsIHByb3RvY29sIDAKKwkgKgorCSAqIFVTQiAyLjAsIG11bHRpcGxlIFRUIG9yZ2FuaXphdGlvbiAob3B0aW9uYWwpOgorCSAqCXR3byBpbnRlcmZhY2VzLCBwcm90b2NvbHMgMSAobGlrZSBzaW5nbGUgVFQpCisJICoJYW5kIDIgKG11bHRpcGxlIFRUIG1vZGUpIC4uLiBjb25maWcgaXMKKwkgKglzb21ldGltZXMgc2V0dGFibGUKKwkgKglOT1QgSU1QTEVNRU5URUQKKwkgKi8KKworCS8qIG9uZSBpbnRlcmZhY2UgKi8KKwkweDA5LCAgICAgICAvKiAgX191OCAgaWZfYkxlbmd0aDsgKi8KKwkweDA0LCAgICAgICAvKiAgX191OCAgaWZfYkRlc2NyaXB0b3JUeXBlOyBJbnRlcmZhY2UgKi8KKwkweDAwLCAgICAgICAvKiAgX191OCAgaWZfYkludGVyZmFjZU51bWJlcjsgKi8KKwkweDAwLCAgICAgICAvKiAgX191OCAgaWZfYkFsdGVybmF0ZVNldHRpbmc7ICovCisJMHgwMSwgICAgICAgLyogIF9fdTggIGlmX2JOdW1FbmRwb2ludHM7ICovCisJMHgwOSwgICAgICAgLyogIF9fdTggIGlmX2JJbnRlcmZhY2VDbGFzczsgSFVCX0NMQVNTQ09ERSAqLworCTB4MDAsICAgICAgIC8qICBfX3U4ICBpZl9iSW50ZXJmYWNlU3ViQ2xhc3M7ICovCisJMHgwMCwgICAgICAgLyogIF9fdTggIGlmX2JJbnRlcmZhY2VQcm90b2NvbDsgW3VzYjEuMSBvciBzaW5nbGUgdHRdICovCisJMHgwMCwgICAgICAgLyogIF9fdTggIGlmX2lJbnRlcmZhY2U7ICovCisgICAgIAorCS8qIG9uZSBlbmRwb2ludCAoc3RhdHVzIGNoYW5nZSBlbmRwb2ludCkgKi8KKwkweDA3LCAgICAgICAvKiAgX191OCAgZXBfYkxlbmd0aDsgKi8KKwkweDA1LCAgICAgICAvKiAgX191OCAgZXBfYkRlc2NyaXB0b3JUeXBlOyBFbmRwb2ludCAqLworCTB4ODEsICAgICAgIC8qICBfX3U4ICBlcF9iRW5kcG9pbnRBZGRyZXNzOyBJTiBFbmRwb2ludCAxICovCisgCTB4MDMsICAgICAgIC8qICBfX3U4ICBlcF9ibUF0dHJpYnV0ZXM7IEludGVycnVwdCAqLworIAkweDAyLCAweDAwLCAvKiAgX19sZTE2IGVwX3dNYXhQYWNrZXRTaXplOyAxICsgKE1BWF9ST09UX1BPUlRTIC8gOCkgKi8KKwkweGZmICAgICAgICAvKiAgX191OCAgZXBfYkludGVydmFsOyAoMjU1bXMgLS0gdXNiIDIuMCBzcGVjKSAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IGhzX3JoX2NvbmZpZ19kZXNjcmlwdG9yIFtdID0geworCisJLyogb25lIGNvbmZpZ3VyYXRpb24gKi8KKwkweDA5LCAgICAgICAvKiAgX191OCAgYkxlbmd0aDsgKi8KKwkweDAyLCAgICAgICAvKiAgX191OCAgYkRlc2NyaXB0b3JUeXBlOyBDb25maWd1cmF0aW9uICovCisJMHgxOSwgMHgwMCwgLyogIF9fbGUxNiB3VG90YWxMZW5ndGg7ICovCisJMHgwMSwgICAgICAgLyogIF9fdTggIGJOdW1JbnRlcmZhY2VzOyAoMSkgKi8KKwkweDAxLCAgICAgICAvKiAgX191OCAgYkNvbmZpZ3VyYXRpb25WYWx1ZTsgKi8KKwkweDAwLCAgICAgICAvKiAgX191OCAgaUNvbmZpZ3VyYXRpb247ICovCisJMHhjMCwgICAgICAgLyogIF9fdTggIGJtQXR0cmlidXRlczsgCisJCQkJIEJpdCA3OiBtdXN0IGJlIHNldCwKKwkJCQkgICAgIDY6IFNlbGYtcG93ZXJlZCwKKwkJCQkgICAgIDU6IFJlbW90ZSB3YWtldXAsCisJCQkJICAgICA0Li4wOiByZXN2ZCAqLworCTB4MDAsICAgICAgIC8qICBfX3U4ICBNYXhQb3dlcjsgKi8KKyAgICAgIAorCS8qIFVTQiAxLjE6CisJICogVVNCIDIuMCwgc2luZ2xlIFRUIG9yZ2FuaXphdGlvbiAobWFuZGF0b3J5KToKKwkgKglvbmUgaW50ZXJmYWNlLCBwcm90b2NvbCAwCisJICoKKwkgKiBVU0IgMi4wLCBtdWx0aXBsZSBUVCBvcmdhbml6YXRpb24gKG9wdGlvbmFsKToKKwkgKgl0d28gaW50ZXJmYWNlcywgcHJvdG9jb2xzIDEgKGxpa2Ugc2luZ2xlIFRUKQorCSAqCWFuZCAyIChtdWx0aXBsZSBUVCBtb2RlKSAuLi4gY29uZmlnIGlzCisJICoJc29tZXRpbWVzIHNldHRhYmxlCisJICoJTk9UIElNUExFTUVOVEVECisJICovCisKKwkvKiBvbmUgaW50ZXJmYWNlICovCisJMHgwOSwgICAgICAgLyogIF9fdTggIGlmX2JMZW5ndGg7ICovCisJMHgwNCwgICAgICAgLyogIF9fdTggIGlmX2JEZXNjcmlwdG9yVHlwZTsgSW50ZXJmYWNlICovCisJMHgwMCwgICAgICAgLyogIF9fdTggIGlmX2JJbnRlcmZhY2VOdW1iZXI7ICovCisJMHgwMCwgICAgICAgLyogIF9fdTggIGlmX2JBbHRlcm5hdGVTZXR0aW5nOyAqLworCTB4MDEsICAgICAgIC8qICBfX3U4ICBpZl9iTnVtRW5kcG9pbnRzOyAqLworCTB4MDksICAgICAgIC8qICBfX3U4ICBpZl9iSW50ZXJmYWNlQ2xhc3M7IEhVQl9DTEFTU0NPREUgKi8KKwkweDAwLCAgICAgICAvKiAgX191OCAgaWZfYkludGVyZmFjZVN1YkNsYXNzOyAqLworCTB4MDAsICAgICAgIC8qICBfX3U4ICBpZl9iSW50ZXJmYWNlUHJvdG9jb2w7IFt1c2IxLjEgb3Igc2luZ2xlIHR0XSAqLworCTB4MDAsICAgICAgIC8qICBfX3U4ICBpZl9pSW50ZXJmYWNlOyAqLworICAgICAKKwkvKiBvbmUgZW5kcG9pbnQgKHN0YXR1cyBjaGFuZ2UgZW5kcG9pbnQpICovCisJMHgwNywgICAgICAgLyogIF9fdTggIGVwX2JMZW5ndGg7ICovCisJMHgwNSwgICAgICAgLyogIF9fdTggIGVwX2JEZXNjcmlwdG9yVHlwZTsgRW5kcG9pbnQgKi8KKwkweDgxLCAgICAgICAvKiAgX191OCAgZXBfYkVuZHBvaW50QWRkcmVzczsgSU4gRW5kcG9pbnQgMSAqLworIAkweDAzLCAgICAgICAvKiAgX191OCAgZXBfYm1BdHRyaWJ1dGVzOyBJbnRlcnJ1cHQgKi8KKyAJMHgwMiwgMHgwMCwgLyogIF9fbGUxNiBlcF93TWF4UGFja2V0U2l6ZTsgMSArIChNQVhfUk9PVF9QT1JUUyAvIDgpICovCisJMHgwYyAgICAgICAgLyogIF9fdTggIGVwX2JJbnRlcnZhbDsgKDI1Nm1zIC0tIHVzYiAyLjAgc3BlYykgKi8KK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBoZWxwZXIgcm91dGluZSBmb3IgcmV0dXJuaW5nIHN0cmluZyBkZXNjcmlwdG9ycyBpbiBVVEYtMTZMRQorICogaW5wdXQgY2FuIGFjdHVhbGx5IGJlIElTTy04ODU5LTE7IEFTQ0lJIGlzIGl0cyA3LWJpdCBzdWJzZXQKKyAqLworc3RhdGljIGludCBhc2NpaTJ1dGYgKGNoYXIgKnMsIHU4ICp1dGYsIGludCB1dGZtYXgpCit7CisJaW50IHJldHZhbDsKKworCWZvciAocmV0dmFsID0gMDsgKnMgJiYgdXRmbWF4ID4gMTsgdXRmbWF4IC09IDIsIHJldHZhbCArPSAyKSB7CisJCSp1dGYrKyA9ICpzKys7CisJCSp1dGYrKyA9IDA7CisJfQorCWlmICh1dGZtYXggPiAwKSB7CisJCSp1dGYgPSAqczsKKwkJKytyZXR2YWw7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiByaF9zdHJpbmcgLSBwcm92aWRlcyBtYW51ZmFjdHVyZXIsIHByb2R1Y3QgYW5kIHNlcmlhbCBzdHJpbmdzIGZvciByb290IGh1YgorICogQGlkOiB0aGUgc3RyaW5nIElEIG51bWJlciAoMTogc2VyaWFsIG51bWJlciwgMjogcHJvZHVjdCwgMzogdmVuZG9yKQorICogQGhjZDogdGhlIGhvc3QgY29udHJvbGxlciBmb3IgdGhpcyByb290IGh1YgorICogQHR5cGU6IHN0cmluZyBkZXNjcmliaW5nIG91ciBkcml2ZXIgCisgKiBAZGF0YTogcmV0dXJuIHBhY2tldCBpbiBVVEYtMTYgTEUKKyAqIEBsZW46IGxlbmd0aCBvZiB0aGUgcmV0dXJuIHBhY2tldAorICoKKyAqIFByb2R1Y2VzIGVpdGhlciBhIG1hbnVmYWN0dXJlciwgcHJvZHVjdCBvciBzZXJpYWwgbnVtYmVyIHN0cmluZyBmb3IgdGhlCisgKiB2aXJ0dWFsIHJvb3QgaHViIGRldmljZS4KKyAqLworc3RhdGljIGludCByaF9zdHJpbmcgKAorCWludAkJaWQsCisJc3RydWN0IHVzYl9oY2QJKmhjZCwKKwl1OAkJKmRhdGEsCisJaW50CQlsZW4KKykgeworCWNoYXIgYnVmIFsxMDBdOworCisJLy8gbGFuZ3VhZ2UgaWRzCisJaWYgKGlkID09IDApIHsKKwkJYnVmWzBdID0gNDsgICAgYnVmWzFdID0gMzsJLyogNCBieXRlcyBzdHJpbmcgZGF0YSAqLworCQlidWZbMl0gPSAweDA5OyBidWZbM10gPSAweDA0OwkvKiBNU0ZULXNwZWFrIGZvciAiZW4tdXMiICovCisJCWxlbiA9IG1pbiAobGVuLCA0KTsKKwkJbWVtY3B5IChkYXRhLCBidWYsIGxlbik7CisJCXJldHVybiBsZW47CisKKwkvLyBzZXJpYWwgbnVtYmVyCisJfSBlbHNlIGlmIChpZCA9PSAxKSB7CisJCXN0cmxjcHkgKGJ1ZiwgaGNkLT5zZWxmLmJ1c19uYW1lLCBzaXplb2YgYnVmKTsKKworCS8vIHByb2R1Y3QgZGVzY3JpcHRpb24KKwl9IGVsc2UgaWYgKGlkID09IDIpIHsKKwkJc3RybGNweSAoYnVmLCBoY2QtPnByb2R1Y3RfZGVzYywgc2l6ZW9mIGJ1Zik7CisKKyAJLy8gaWQgMyA9PSB2ZW5kb3IgZGVzY3JpcHRpb24KKwl9IGVsc2UgaWYgKGlkID09IDMpIHsKKwkJc25wcmludGYgKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIiVzICVzICVzIiwgc3lzdGVtX3V0c25hbWUuc3lzbmFtZSwKKwkJCXN5c3RlbV91dHNuYW1lLnJlbGVhc2UsIGhjZC0+ZHJpdmVyLT5kZXNjcmlwdGlvbik7CisKKwkvLyB1bnN1cHBvcnRlZCBJRHMgLS0+ICJwcm90b2NvbCBzdGFsbCIKKwl9IGVsc2UKKwkJcmV0dXJuIC1FUElQRTsKKworCXN3aXRjaCAobGVuKSB7CQkvKiBBbGwgY2FzZXMgZmFsbCB0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJbGVuID0gMiArIGFzY2lpMnV0ZiAoYnVmLCBkYXRhICsgMiwgbGVuIC0gMik7CisJY2FzZSAyOgorCQlkYXRhIFsxXSA9IDM7CS8qIHR5cGUgPT0gc3RyaW5nICovCisJY2FzZSAxOgorCQlkYXRhIFswXSA9IDIgKiAoc3RybGVuIChidWYpICsgMSk7CisJY2FzZSAwOgorCQk7CQkvKiBDb21waWxlciB3YW50cyBhIHN0YXRlbWVudCBoZXJlICovCisJfQorCXJldHVybiBsZW47Cit9CisKKworLyogUm9vdCBodWIgY29udHJvbCB0cmFuc2ZlcnMgZXhlY3V0ZSBzeW5jaHJvbm91c2x5ICovCitzdGF0aWMgaW50IHJoX2NhbGxfY29udHJvbCAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmNtZDsKKyAJdTE2CQl0eXBlUmVxLCB3VmFsdWUsIHdJbmRleCwgd0xlbmd0aDsKKwl1OAkJKnVidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwl1OAkJdGJ1ZiBbc2l6ZW9mIChzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yKV07CisJY29uc3QgdTgJKmJ1ZnAgPSB0YnVmOworCWludAkJbGVuID0gMDsKKwlpbnQJCXBhdGNoX3dha2V1cCA9IDA7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwlpbnQJCXN0YXR1cyA9IDA7CisJaW50CQluOworCisJY21kID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikgdXJiLT5zZXR1cF9wYWNrZXQ7CisJdHlwZVJlcSAgPSAoY21kLT5iUmVxdWVzdFR5cGUgPDwgOCkgfCBjbWQtPmJSZXF1ZXN0OworCXdWYWx1ZSAgID0gbGUxNl90b19jcHUgKGNtZC0+d1ZhbHVlKTsKKwl3SW5kZXggICA9IGxlMTZfdG9fY3B1IChjbWQtPndJbmRleCk7CisJd0xlbmd0aCAgPSBsZTE2X3RvX2NwdSAoY21kLT53TGVuZ3RoKTsKKworCWlmICh3TGVuZ3RoID4gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKQorCQlnb3RvIGVycm9yOworCisJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKwlzd2l0Y2ggKHR5cGVSZXEpIHsKKworCS8qIERFVklDRSBSRVFVRVNUUyAqLworCisJY2FzZSBEZXZpY2VSZXF1ZXN0IHwgVVNCX1JFUV9HRVRfU1RBVFVTOgorCQl0YnVmIFswXSA9IChoY2QtPnJlbW90ZV93YWtldXAgPDwgVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQKQorCQkJCXwgKDEgPDwgVVNCX0RFVklDRV9TRUxGX1BPV0VSRUQpOworCQl0YnVmIFsxXSA9IDA7CisJCWxlbiA9IDI7CisJCWJyZWFrOworCWNhc2UgRGV2aWNlT3V0UmVxdWVzdCB8IFVTQl9SRVFfQ0xFQVJfRkVBVFVSRToKKwkJaWYgKHdWYWx1ZSA9PSBVU0JfREVWSUNFX1JFTU9URV9XQUtFVVApCisJCQloY2QtPnJlbW90ZV93YWtldXAgPSAwOworCQllbHNlCisJCQlnb3RvIGVycm9yOworCQlicmVhazsKKwljYXNlIERldmljZU91dFJlcXVlc3QgfCBVU0JfUkVRX1NFVF9GRUFUVVJFOgorCQlpZiAoaGNkLT5jYW5fd2FrZXVwICYmIHdWYWx1ZSA9PSBVU0JfREVWSUNFX1JFTU9URV9XQUtFVVApCisJCQloY2QtPnJlbW90ZV93YWtldXAgPSAxOworCQllbHNlCisJCQlnb3RvIGVycm9yOworCQlicmVhazsKKwljYXNlIERldmljZVJlcXVlc3QgfCBVU0JfUkVRX0dFVF9DT05GSUdVUkFUSU9OOgorCQl0YnVmIFswXSA9IDE7CisJCWxlbiA9IDE7CisJCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgRGV2aWNlT3V0UmVxdWVzdCB8IFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT046CisJCWJyZWFrOworCWNhc2UgRGV2aWNlUmVxdWVzdCB8IFVTQl9SRVFfR0VUX0RFU0NSSVBUT1I6CisJCXN3aXRjaCAod1ZhbHVlICYgMHhmZjAwKSB7CisJCWNhc2UgVVNCX0RUX0RFVklDRSA8PCA4OgorCQkJaWYgKGhjZC0+ZHJpdmVyLT5mbGFncyAmIEhDRF9VU0IyKQorCQkJCWJ1ZnAgPSB1c2IyX3JoX2Rldl9kZXNjcmlwdG9yOworCQkJZWxzZSBpZiAoaGNkLT5kcml2ZXItPmZsYWdzICYgSENEX1VTQjExKQorCQkJCWJ1ZnAgPSB1c2IxMV9yaF9kZXZfZGVzY3JpcHRvcjsKKwkJCWVsc2UKKwkJCQlnb3RvIGVycm9yOworCQkJbGVuID0gMTg7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfRFRfQ09ORklHIDw8IDg6CisJCQlpZiAoaGNkLT5kcml2ZXItPmZsYWdzICYgSENEX1VTQjIpIHsKKwkJCQlidWZwID0gaHNfcmhfY29uZmlnX2Rlc2NyaXB0b3I7CisJCQkJbGVuID0gc2l6ZW9mIGhzX3JoX2NvbmZpZ19kZXNjcmlwdG9yOworCQkJfSBlbHNlIHsKKwkJCQlidWZwID0gZnNfcmhfY29uZmlnX2Rlc2NyaXB0b3I7CisJCQkJbGVuID0gc2l6ZW9mIGZzX3JoX2NvbmZpZ19kZXNjcmlwdG9yOworCQkJfQorCQkJaWYgKGhjZC0+Y2FuX3dha2V1cCkKKwkJCQlwYXRjaF93YWtldXAgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX0RUX1NUUklORyA8PCA4OgorCQkJbiA9IHJoX3N0cmluZyAod1ZhbHVlICYgMHhmZiwgaGNkLCB1YnVmLCB3TGVuZ3RoKTsKKwkJCWlmIChuIDwgMCkKKwkJCQlnb3RvIGVycm9yOworCQkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gbjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBlcnJvcjsKKwkJfQorCQlicmVhazsKKwljYXNlIERldmljZVJlcXVlc3QgfCBVU0JfUkVRX0dFVF9JTlRFUkZBQ0U6CisJCXRidWYgWzBdID0gMDsKKwkJbGVuID0gMTsKKwkJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBEZXZpY2VPdXRSZXF1ZXN0IHwgVVNCX1JFUV9TRVRfSU5URVJGQUNFOgorCQlicmVhazsKKwljYXNlIERldmljZU91dFJlcXVlc3QgfCBVU0JfUkVRX1NFVF9BRERSRVNTOgorCQkvLyB3VmFsdWUgPT0gdXJiLT5kZXYtPmRldmFkZHIKKwkJZGV2X2RiZyAoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJyb290IGh1YiBkZXZpY2UgYWRkcmVzcyAlZFxuIiwKKwkJCXdWYWx1ZSk7CisJCWJyZWFrOworCisJLyogSU5URVJGQUNFIFJFUVVFU1RTIChubyBkZWZpbmVkIGZlYXR1cmUvc3RhdHVzIGZsYWdzKSAqLworCisJLyogRU5EUE9JTlQgUkVRVUVTVFMgKi8KKworCWNhc2UgRW5kcG9pbnRSZXF1ZXN0IHwgVVNCX1JFUV9HRVRfU1RBVFVTOgorCQkvLyBFTkRQT0lOVF9IQUxUIGZsYWcKKwkJdGJ1ZiBbMF0gPSAwOworCQl0YnVmIFsxXSA9IDA7CisJCWxlbiA9IDI7CisJCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgRW5kcG9pbnRPdXRSZXF1ZXN0IHwgVVNCX1JFUV9DTEVBUl9GRUFUVVJFOgorCWNhc2UgRW5kcG9pbnRPdXRSZXF1ZXN0IHwgVVNCX1JFUV9TRVRfRkVBVFVSRToKKwkJZGV2X2RiZyAoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJubyBlbmRwb2ludCBmZWF0dXJlcyB5ZXRcbiIpOworCQlicmVhazsKKworCS8qIENMQVNTIFJFUVVFU1RTIChhbmQgZXJyb3JzKSAqLworCisJZGVmYXVsdDoKKwkJLyogbm9uLWdlbmVyaWMgcmVxdWVzdCAqLworCQlpZiAoSENfSVNfU1VTUEVOREVEIChoY2QtPnN0YXRlKSkKKwkJCXN0YXR1cyA9IC1FQUdBSU47CisJCWVsc2UgeworCQkJc3dpdGNoICh0eXBlUmVxKSB7CisJCQljYXNlIEdldEh1YlN0YXR1czoKKwkJCWNhc2UgR2V0UG9ydFN0YXR1czoKKwkJCQlsZW4gPSA0OworCQkJCWJyZWFrOworCQkJY2FzZSBHZXRIdWJEZXNjcmlwdG9yOgorCQkJCWxlbiA9IHNpemVvZiAoc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvcik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlzdGF0dXMgPSBoY2QtPmRyaXZlci0+aHViX2NvbnRyb2wgKGhjZCwKKwkJCQl0eXBlUmVxLCB3VmFsdWUsIHdJbmRleCwKKwkJCQl0YnVmLCB3TGVuZ3RoKTsKKwkJfQorCQlicmVhazsKK2Vycm9yOgorCQkvKiAicHJvdG9jb2wgc3RhbGwiIG9uIGVycm9yICovCisJCXN0YXR1cyA9IC1FUElQRTsKKwl9CisKKwlpZiAoc3RhdHVzKSB7CisJCWxlbiA9IDA7CisJCWlmIChzdGF0dXMgIT0gLUVQSVBFKSB7CisJCQlkZXZfZGJnIChoY2QtPnNlbGYuY29udHJvbGxlciwKKwkJCQkiQ1RSTDogVHlwZVJlcT0weCV4IHZhbD0weCV4ICIKKwkJCQkiaWR4PTB4JXggbGVuPSVkID09PiAlZFxuIiwKKwkJCQl0eXBlUmVxLCB3VmFsdWUsIHdJbmRleCwKKwkJCQl3TGVuZ3RoLCB1cmItPnN0YXR1cyk7CisJCX0KKwl9CisJaWYgKGxlbikgeworCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIDwgbGVuKQorCQkJbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCQl1cmItPmFjdHVhbF9sZW5ndGggPSBsZW47CisJCS8vIGFsd2F5cyBVU0JfRElSX0lOLCB0b3dhcmQgaG9zdAorCQltZW1jcHkgKHVidWYsIGJ1ZnAsIGxlbik7CisKKwkJLyogcmVwb3J0IHdoZXRoZXIgUkggaGFyZHdhcmUgc3VwcG9ydHMgcmVtb3RlIHdha2V1cCAqLworCQlpZiAocGF0Y2hfd2FrZXVwICYmCisJCQkJbGVuID4gb2Zmc2V0b2YgKHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IsCisJCQkJCQlibUF0dHJpYnV0ZXMpKQorCQkJKChzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yICopdWJ1ZiktPmJtQXR0cmlidXRlcworCQkJCXw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKKwl9CisKKwkvKiBhbnkgZXJyb3JzIGdldCByZXR1cm5lZCB0aHJvdWdoIHRoZSB1cmIgY29tcGxldGlvbiAqLworCWxvY2FsX2lycV9zYXZlIChmbGFncyk7CisJc3Bpbl9sb2NrICgmdXJiLT5sb2NrKTsKKwlpZiAodXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKQorCQl1cmItPnN0YXR1cyA9IHN0YXR1czsKKwlzcGluX3VubG9jayAoJnVyYi0+bG9jayk7CisJdXNiX2hjZF9naXZlYmFja191cmIgKGhjZCwgdXJiLCBOVUxMKTsKKwlsb2NhbF9pcnFfcmVzdG9yZSAoZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogUm9vdCBIdWIgaW50ZXJydXB0IHRyYW5zZmVycyBhcmUgc3ludGhlc2l6ZWQgd2l0aCBhIHRpbWVyLgorICogQ29tcGxldGlvbnMgYXJlIGNhbGxlZCBpbl9pbnRlcnJ1cHQoKSBidXQgbm90IGluX2lycSgpLgorICoKKyAqIE5vdGU6IHNvbWUgcm9vdCBodWJzIChpbmNsdWRpbmcgY29tbW9uIFVIQ0kgYmFzZWQgZGVzaWducykgY2FuJ3QKKyAqIGNvcnJlY3RseSBpc3N1ZSBwb3J0IGNoYW5nZSBJUlFzLiAgVGhleSdyZSB0aGUgb25lcyB0aGF0IF9uZWVkXyBhCisgKiB0aW1lcjsgbW9zdCBvdGhlciByb290IGh1YnMgZG9uJ3QuICBTb21lIHN5c3RlbXMgY291bGQgc2F2ZSBhCisgKiBsb3Qgb2YgYmF0dGVyeSBwb3dlciBieSBlbGltaW5hdGluZyB0aGVzZSByb290IGh1YiB0aW1lciBJUlFzLgorICovCisKK3N0YXRpYyB2b2lkIHJoX3JlcG9ydF9zdGF0dXMgKHVuc2lnbmVkIGxvbmcgcHRyKTsKKworc3RhdGljIGludCByaF9zdGF0dXNfdXJiIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIpIAoreworCWludAlsZW4gPSAxICsgKHVyYi0+ZGV2LT5tYXhjaGlsZCAvIDgpOworCisJLyogcmhfdGltZXIgcHJvdGVjdGVkIGJ5IGhjZF9kYXRhX2xvY2sgKi8KKwlpZiAoaGNkLT5yaF90aW1lci5kYXRhIHx8IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA8IGxlbikgeworCQlkZXZfZGJnIChoY2QtPnNlbGYuY29udHJvbGxlciwKKwkJCQkibm90IHF1ZXVpbmcgcmggc3RhdHVzIHVyYiwgc3RhdCAlZFxuIiwKKwkJCQl1cmItPnN0YXR1cyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWluaXRfdGltZXIgKCZoY2QtPnJoX3RpbWVyKTsKKwloY2QtPnJoX3RpbWVyLmZ1bmN0aW9uID0gcmhfcmVwb3J0X3N0YXR1czsKKwloY2QtPnJoX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgdXJiOworCS8qIFVTQiAyLjAgc3BlYyBzYXlzIDI1Nm1zZWM7IHRoaXMgaXMgY2xvc2UgZW5vdWdoICovCisJaGNkLT5yaF90aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaLzQ7CisJYWRkX3RpbWVyICgmaGNkLT5yaF90aW1lcik7CisJdXJiLT5oY3ByaXYgPSBoY2Q7CS8qIG5vbnplcm8gdG8gaW5kaWNhdGUgaXQncyBxdWV1ZWQgKi8KKwlyZXR1cm4gMDsKK30KKworLyogdGltZXIgY2FsbGJhY2sgKi8KKworc3RhdGljIHZvaWQgcmhfcmVwb3J0X3N0YXR1cyAodW5zaWduZWQgbG9uZyBwdHIpCit7CisJc3RydWN0IHVyYgkqdXJiOworCXN0cnVjdCB1c2JfaGNkCSpoY2Q7CisJaW50CQlsZW5ndGggPSAwOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwl1cmIgPSAoc3RydWN0IHVyYiAqKSBwdHI7CisJbG9jYWxfaXJxX3NhdmUgKGZsYWdzKTsKKwlzcGluX2xvY2sgKCZ1cmItPmxvY2spOworCisJLyogZG8gbm90aGluZyBpZiB0aGUgdXJiJ3MgYmVlbiB1bmxpbmtlZCAqLworCWlmICghdXJiLT5kZXYKKwkJCXx8IHVyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUworCQkJfHwgKGhjZCA9IHVyYi0+ZGV2LT5idXMtPmhjcHJpdikgPT0gTlVMTCkgeworCQlzcGluX3VubG9jayAoJnVyYi0+bG9jayk7CisJCWxvY2FsX2lycV9yZXN0b3JlIChmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBjb21wbGV0ZSB0aGUgc3RhdHVzIHVyYiwgb3IgcmV0cmlnZ2VyIHRoZSB0aW1lciAqLworCXNwaW5fbG9jayAoJmhjZF9kYXRhX2xvY2spOworCWlmICh1cmItPmRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX0NPTkZJR1VSRUQpIHsKKwkJbGVuZ3RoID0gaGNkLT5kcml2ZXItPmh1Yl9zdGF0dXNfZGF0YSAoCisJCQkJCWhjZCwgdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQlpZiAobGVuZ3RoID4gMCkgeworCQkJaGNkLT5yaF90aW1lci5kYXRhID0gMDsKKwkJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IGxlbmd0aDsKKwkJCXVyYi0+c3RhdHVzID0gMDsKKwkJCXVyYi0+aGNwcml2ID0gTlVMTDsKKwkJfSBlbHNlCisJCQltb2RfdGltZXIgKCZoY2QtPnJoX3RpbWVyLCBqaWZmaWVzICsgSFovNCk7CisJfQorCXNwaW5fdW5sb2NrICgmaGNkX2RhdGFfbG9jayk7CisJc3Bpbl91bmxvY2sgKCZ1cmItPmxvY2spOworCisJLyogbG9jYWwgaXJxcyBhcmUgYWx3YXlzIGJsb2NrZWQgaW4gY29tcGxldGlvbnMgKi8KKwlpZiAobGVuZ3RoID4gMCkKKwkJdXNiX2hjZF9naXZlYmFja191cmIgKGhjZCwgdXJiLCBOVUxMKTsKKwlsb2NhbF9pcnFfcmVzdG9yZSAoZmxhZ3MpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHJoX3VyYl9lbnF1ZXVlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJaWYgKHVzYl9waXBlaW50ICh1cmItPnBpcGUpKSB7CisJCWludAkJcmV0dmFsOworCQl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlICgmaGNkX2RhdGFfbG9jaywgZmxhZ3MpOworCQlyZXR2YWwgPSByaF9zdGF0dXNfdXJiIChoY2QsIHVyYik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZoY2RfZGF0YV9sb2NrLCBmbGFncyk7CisJCXJldHVybiByZXR2YWw7CisJfQorCWlmICh1c2JfcGlwZWNvbnRyb2wgKHVyYi0+cGlwZSkpCisJCXJldHVybiByaF9jYWxsX2NvbnRyb2wgKGhjZCwgdXJiKTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHVzYl9yaF91cmJfZGVxdWV1ZSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwkvKiBub3RlOiAgYWx3YXlzIGEgc3luY2hyb25vdXMgdW5saW5rICovCisJaWYgKCh1bnNpZ25lZCBsb25nKSB1cmIgPT0gaGNkLT5yaF90aW1lci5kYXRhKSB7CisJCWRlbF90aW1lcl9zeW5jICgmaGNkLT5yaF90aW1lcik7CisJCWhjZC0+cmhfdGltZXIuZGF0YSA9IDA7CisKKwkJbG9jYWxfaXJxX3NhdmUgKGZsYWdzKTsKKwkJdXJiLT5oY3ByaXYgPSBOVUxMOworCQl1c2JfaGNkX2dpdmViYWNrX3VyYiAoaGNkLCB1cmIsIE5VTEwpOworCQlsb2NhbF9pcnFfcmVzdG9yZSAoZmxhZ3MpOworCisJfSBlbHNlIGlmICh1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSkgPT0gMCkgeworCQlzcGluX2xvY2tfaXJxKCZ1cmItPmxvY2spOwkvKiBmcm9tIHVzYl9raWxsX3VyYiAqLworCQkrK3VyYi0+cmVqZWN0OworCQlzcGluX3VubG9ja19pcnEoJnVyYi0+bG9jayk7CisKKwkJd2FpdF9ldmVudCh1c2Jfa2lsbF91cmJfcXVldWUsCisJCQkJYXRvbWljX3JlYWQoJnVyYi0+dXNlX2NvdW50KSA9PSAwKTsKKworCQlzcGluX2xvY2tfaXJxKCZ1cmItPmxvY2spOworCQktLXVyYi0+cmVqZWN0OworCQlzcGluX3VubG9ja19pcnEoJnVyYi0+bG9jayk7CisJfSBlbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGV4cG9ydGVkIG9ubHkgd2l0aGluIHVzYmNvcmUgKi8KK3N0cnVjdCB1c2JfYnVzICp1c2JfYnVzX2dldCAoc3RydWN0IHVzYl9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlICp0bXA7CisKKwlpZiAoIWJ1cykKKwkJcmV0dXJuIE5VTEw7CisKKwl0bXAgPSBjbGFzc19kZXZpY2VfZ2V0KCZidXMtPmNsYXNzX2Rldik7CisJaWYgKHRtcCkgICAgICAgIAorCQlyZXR1cm4gdG9fdXNiX2J1cyh0bXApOworCWVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CisKKy8qIGV4cG9ydGVkIG9ubHkgd2l0aGluIHVzYmNvcmUgKi8KK3ZvaWQgdXNiX2J1c19wdXQgKHN0cnVjdCB1c2JfYnVzICpidXMpCit7CisJaWYgKGJ1cykKKwkJY2xhc3NfZGV2aWNlX3B1dCgmYnVzLT5jbGFzc19kZXYpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCB1c2JfaG9zdF9yZWxlYXNlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldikKK3sKKwlzdHJ1Y3QgdXNiX2J1cyAqYnVzID0gdG9fdXNiX2J1cyhjbGFzc19kZXYpOworCisJaWYgKGJ1cy0+cmVsZWFzZSkKKwkJYnVzLT5yZWxlYXNlKGJ1cyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xhc3MgdXNiX2hvc3RfY2xhc3MgPSB7CisJLm5hbWUJCT0gInVzYl9ob3N0IiwKKwkucmVsZWFzZQk9ICZ1c2JfaG9zdF9yZWxlYXNlLAorfTsKKworaW50IHVzYl9ob3N0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gY2xhc3NfcmVnaXN0ZXIoJnVzYl9ob3N0X2NsYXNzKTsKK30KKwordm9pZCB1c2JfaG9zdF9jbGVhbnVwKHZvaWQpCit7CisJY2xhc3NfdW5yZWdpc3RlcigmdXNiX2hvc3RfY2xhc3MpOworfQorCisvKioKKyAqIHVzYl9idXNfaW5pdCAtIHNoYXJlZCBpbml0aWFsaXphdGlvbiBjb2RlCisgKiBAYnVzOiB0aGUgYnVzIHN0cnVjdHVyZSBiZWluZyBpbml0aWFsaXplZAorICoKKyAqIFRoaXMgY29kZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgYSB1c2JfYnVzIHN0cnVjdHVyZSwgbWVtb3J5IGZvciB3aGljaCBpcworICogc2VwYXJhdGVseSBtYW5hZ2VkLgorICovCitzdGF0aWMgdm9pZCB1c2JfYnVzX2luaXQgKHN0cnVjdCB1c2JfYnVzICpidXMpCit7CisJbWVtc2V0ICgmYnVzLT5kZXZtYXAsIDAsIHNpemVvZihzdHJ1Y3QgdXNiX2Rldm1hcCkpOworCisJYnVzLT5kZXZudW1fbmV4dCA9IDE7CisKKwlidXMtPnJvb3RfaHViID0gTlVMTDsKKwlidXMtPmhjcHJpdiA9IE5VTEw7CisJYnVzLT5idXNudW0gPSAtMTsKKwlidXMtPmJhbmR3aWR0aF9hbGxvY2F0ZWQgPSAwOworCWJ1cy0+YmFuZHdpZHRoX2ludF9yZXFzICA9IDA7CisJYnVzLT5iYW5kd2lkdGhfaXNvY19yZXFzID0gMDsKKworCUlOSVRfTElTVF9IRUFEICgmYnVzLT5idXNfbGlzdCk7CisKKwljbGFzc19kZXZpY2VfaW5pdGlhbGl6ZSgmYnVzLT5jbGFzc19kZXYpOworCWJ1cy0+Y2xhc3NfZGV2LmNsYXNzID0gJnVzYl9ob3N0X2NsYXNzOworfQorCisvKioKKyAqIHVzYl9hbGxvY19idXMgLSBjcmVhdGVzIGEgbmV3IFVTQiBob3N0IGNvbnRyb2xsZXIgc3RydWN0dXJlCisgKiBAb3A6IHBvaW50ZXIgdG8gYSBzdHJ1Y3QgdXNiX29wZXJhdGlvbnMgdGhhdCB0aGlzIGJ1cyBzdHJ1Y3R1cmUgc2hvdWxkIHVzZQorICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogQ3JlYXRlcyBhIFVTQiBob3N0IGNvbnRyb2xsZXIgYnVzIHN0cnVjdHVyZSB3aXRoIHRoZSBzcGVjaWZpZWQgCisgKiB1c2Jfb3BlcmF0aW9ucyBhbmQgaW5pdGlhbGl6ZXMgYWxsIHRoZSBuZWNlc3NhcnkgaW50ZXJuYWwgb2JqZWN0cy4KKyAqCisgKiBJZiBubyBtZW1vcnkgaXMgYXZhaWxhYmxlLCBOVUxMIGlzIHJldHVybmVkLgorICoKKyAqIFRoZSBjYWxsZXIgc2hvdWxkIGNhbGwgdXNiX3B1dF9idXMoKSB3aGVuIGl0IGlzIGZpbmlzaGVkIHdpdGggdGhlIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IHVzYl9idXMgKnVzYl9hbGxvY19idXMgKHN0cnVjdCB1c2Jfb3BlcmF0aW9ucyAqb3ApCit7CisJc3RydWN0IHVzYl9idXMgKmJ1czsKKworCWJ1cyA9IGttYWxsb2MgKHNpemVvZiAqYnVzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1cykKKwkJcmV0dXJuIE5VTEw7CisJbWVtc2V0KGJ1cywgMCwgc2l6ZW9mKHN0cnVjdCB1c2JfYnVzKSk7CisJdXNiX2J1c19pbml0IChidXMpOworCWJ1cy0+b3AgPSBvcDsKKwlyZXR1cm4gYnVzOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIHVzYl9yZWdpc3Rlcl9idXMgLSByZWdpc3RlcnMgdGhlIFVTQiBob3N0IGNvbnRyb2xsZXIgd2l0aCB0aGUgdXNiIGNvcmUKKyAqIEBidXM6IHBvaW50ZXIgdG8gdGhlIGJ1cyB0byByZWdpc3RlcgorICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogQXNzaWducyBhIGJ1cyBudW1iZXIsIGFuZCBsaW5rcyB0aGUgY29udHJvbGxlciBpbnRvIHVzYmNvcmUgZGF0YQorICogc3RydWN0dXJlcyBzbyB0aGF0IGl0IGNhbiBiZSBzZWVuIGJ5IHNjYW5uaW5nIHRoZSBidXMgbGlzdC4KKyAqLworc3RhdGljIGludCB1c2JfcmVnaXN0ZXJfYnVzKHN0cnVjdCB1c2JfYnVzICpidXMpCit7CisJaW50IGJ1c251bTsKKwlpbnQgcmV0dmFsOworCisJZG93biAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKwlidXNudW0gPSBmaW5kX25leHRfemVyb19iaXQgKGJ1c21hcC5idXNtYXAsIFVTQl9NQVhCVVMsIDEpOworCWlmIChidXNudW0gPCBVU0JfTUFYQlVTKSB7CisJCXNldF9iaXQgKGJ1c251bSwgYnVzbWFwLmJ1c21hcCk7CisJCWJ1cy0+YnVzbnVtID0gYnVzbnVtOworCX0gZWxzZSB7CisJCXByaW50ayAoS0VSTl9FUlIgIiVzOiB0b28gbWFueSBidXNlc1xuIiwgdXNiY29yZV9uYW1lKTsKKwkJdXAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKwkJcmV0dXJuIC1FMkJJRzsKKwl9CisKKwlzbnByaW50ZihidXMtPmNsYXNzX2Rldi5jbGFzc19pZCwgQlVTX0lEX1NJWkUsICJ1c2IlZCIsIGJ1c251bSk7CisJYnVzLT5jbGFzc19kZXYuZGV2ID0gYnVzLT5jb250cm9sbGVyOworCXJldHZhbCA9IGNsYXNzX2RldmljZV9hZGQoJmJ1cy0+Y2xhc3NfZGV2KTsKKwlpZiAocmV0dmFsKSB7CisJCWNsZWFyX2JpdChidXNudW0sIGJ1c21hcC5idXNtYXApOworCQl1cCgmdXNiX2J1c19saXN0X2xvY2spOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCS8qIEFkZCBpdCB0byB0aGUgbG9jYWwgbGlzdCBvZiBidXNlcyAqLworCWxpc3RfYWRkICgmYnVzLT5idXNfbGlzdCwgJnVzYl9idXNfbGlzdCk7CisJdXAgKCZ1c2JfYnVzX2xpc3RfbG9jayk7CisKKwl1c2Jmc19hZGRfYnVzIChidXMpOworCXVzYm1vbl9ub3RpZnlfYnVzX2FkZCAoYnVzKTsKKworCWRldl9pbmZvIChidXMtPmNvbnRyb2xsZXIsICJuZXcgVVNCIGJ1cyByZWdpc3RlcmVkLCBhc3NpZ25lZCBidXMgbnVtYmVyICVkXG4iLCBidXMtPmJ1c251bSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdXNiX2RlcmVnaXN0ZXJfYnVzIC0gZGVyZWdpc3RlcnMgdGhlIFVTQiBob3N0IGNvbnRyb2xsZXIKKyAqIEBidXM6IHBvaW50ZXIgdG8gdGhlIGJ1cyB0byBkZXJlZ2lzdGVyCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBSZWN5Y2xlcyB0aGUgYnVzIG51bWJlciwgYW5kIHVubGlua3MgdGhlIGNvbnRyb2xsZXIgZnJvbSB1c2Jjb3JlIGRhdGEKKyAqIHN0cnVjdHVyZXMgc28gdGhhdCBpdCB3b24ndCBiZSBzZWVuIGJ5IHNjYW5uaW5nIHRoZSBidXMgbGlzdC4KKyAqLworc3RhdGljIHZvaWQgdXNiX2RlcmVnaXN0ZXJfYnVzIChzdHJ1Y3QgdXNiX2J1cyAqYnVzKQoreworCWRldl9pbmZvIChidXMtPmNvbnRyb2xsZXIsICJVU0IgYnVzICVkIGRlcmVnaXN0ZXJlZFxuIiwgYnVzLT5idXNudW0pOworCisJLyoKKwkgKiBOT1RFOiBtYWtlIHN1cmUgdGhhdCBhbGwgdGhlIGRldmljZXMgYXJlIHJlbW92ZWQgYnkgdGhlCisJICogY29udHJvbGxlciBjb2RlLCBhcyB3ZWxsIGFzIGhhdmluZyBpdCBjYWxsIHRoaXMgd2hlbiBjbGVhbmluZworCSAqIGl0c2VsZiB1cAorCSAqLworCWRvd24gKCZ1c2JfYnVzX2xpc3RfbG9jayk7CisJbGlzdF9kZWwgKCZidXMtPmJ1c19saXN0KTsKKwl1cCAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKworCXVzYm1vbl9ub3RpZnlfYnVzX3JlbW92ZSAoYnVzKTsKKwl1c2Jmc19yZW1vdmVfYnVzIChidXMpOworCisJY2xlYXJfYml0IChidXMtPmJ1c251bSwgYnVzbWFwLmJ1c21hcCk7CisKKwljbGFzc19kZXZpY2VfZGVsKCZidXMtPmNsYXNzX2Rldik7Cit9CisKKy8qKgorICogdXNiX2hjZF9yZWdpc3Rlcl9yb290X2h1YiAtIGNhbGxlZCBieSBIQ0QgdG8gcmVnaXN0ZXIgaXRzIHJvb3QgaHViIAorICogQHVzYl9kZXY6IHRoZSB1c2Igcm9vdCBodWIgZGV2aWNlIHRvIGJlIHJlZ2lzdGVyZWQuCisgKiBAaGNkOiBob3N0IGNvbnRyb2xsZXIgZm9yIHRoaXMgcm9vdCBodWIKKyAqCisgKiBUaGUgVVNCIGhvc3QgY29udHJvbGxlciBjYWxscyB0aGlzIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyIHRoZSByb290IGh1YgorICogcHJvcGVybHkgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbS4gIEl0IHNldHMgdXAgdGhlIGRldmljZSBwcm9wZXJseSBpbgorICogdGhlIGRldmljZSB0cmVlIGFuZCBzdG9yZXMgdGhlIHJvb3RfaHViIHBvaW50ZXIgaW4gdGhlIGJ1cyBzdHJ1Y3R1cmUsCisgKiB0aGVuIGNhbGxzIHVzYl9uZXdfZGV2aWNlKCkgdG8gcmVnaXN0ZXIgdGhlIHVzYiBkZXZpY2UuICBJdCBhbHNvCisgKiBhc3NpZ25zIHRoZSByb290IGh1YidzIFVTQiBhZGRyZXNzIChhbHdheXMgMSkuCisgKi8KK2ludCB1c2JfaGNkX3JlZ2lzdGVyX3Jvb3RfaHViIChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2Rldiwgc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpwYXJlbnRfZGV2ID0gaGNkLT5zZWxmLmNvbnRyb2xsZXI7CisJY29uc3QgaW50IGRldm51bSA9IDE7CisJaW50IHJldHZhbDsKKworCS8qIGhjZC0+ZHJpdmVyLT5zdGFydCgpIHJlcG9ydGVkIGNhbl93YWtldXAsIHByb2JhYmx5IHdpdGgKKwkgKiBhc3Npc3RhbmNlIGZyb20gYm9hcmQncyBib290IGZpcm13YXJlLgorCSAqIE5PVEU6ICBub3JtYWwgZGV2aWNlcyB3b24ndCBlbmFibGUgd2FrZXVwIGJ5IGRlZmF1bHQuCisJICovCisJaWYgKGhjZC0+Y2FuX3dha2V1cCkKKwkJZGV2X2RiZyAocGFyZW50X2RldiwgInN1cHBvcnRzIFVTQiByZW1vdGUgd2FrZXVwXG4iKTsKKwloY2QtPnJlbW90ZV93YWtldXAgPSBoY2QtPmNhbl93YWtldXA7CisKKwl1c2JfZGV2LT5kZXZudW0gPSBkZXZudW07CisJdXNiX2Rldi0+YnVzLT5kZXZudW1fbmV4dCA9IGRldm51bSArIDE7CisJbWVtc2V0ICgmdXNiX2Rldi0+YnVzLT5kZXZtYXAuZGV2aWNlbWFwLCAwLAorCQkJc2l6ZW9mIHVzYl9kZXYtPmJ1cy0+ZGV2bWFwLmRldmljZW1hcCk7CisJc2V0X2JpdCAoZGV2bnVtLCB1c2JfZGV2LT5idXMtPmRldm1hcC5kZXZpY2VtYXApOworCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVzYl9kZXYsIFVTQl9TVEFURV9BRERSRVNTKTsKKworCWRvd24gKCZ1c2JfYnVzX2xpc3RfbG9jayk7CisJdXNiX2Rldi0+YnVzLT5yb290X2h1YiA9IHVzYl9kZXY7CisKKwl1c2JfZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNjQpOworCXJldHZhbCA9IHVzYl9nZXRfZGV2aWNlX2Rlc2NyaXB0b3IodXNiX2RldiwgVVNCX0RUX0RFVklDRV9TSVpFKTsKKwlpZiAocmV0dmFsICE9IHNpemVvZiB1c2JfZGV2LT5kZXNjcmlwdG9yKSB7CisJCXVzYl9kZXYtPmJ1cy0+cm9vdF9odWIgPSBOVUxMOworCQl1cCAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKwkJZGV2X2RiZyAocGFyZW50X2RldiwgImNhbid0IHJlYWQgJXMgZGV2aWNlIGRlc2NyaXB0b3IgJWRcbiIsCisJCQkJdXNiX2Rldi0+ZGV2LmJ1c19pZCwgcmV0dmFsKTsKKwkJcmV0dXJuIChyZXR2YWwgPCAwKSA/IHJldHZhbCA6IC1FTVNHU0laRTsKKwl9CisKKwl1c2JfbG9ja19kZXZpY2UgKHVzYl9kZXYpOworCXJldHZhbCA9IHVzYl9uZXdfZGV2aWNlICh1c2JfZGV2KTsKKwl1c2JfdW5sb2NrX2RldmljZSAodXNiX2Rldik7CisJaWYgKHJldHZhbCkgeworCQl1c2JfZGV2LT5idXMtPnJvb3RfaHViID0gTlVMTDsKKwkJZGV2X2VyciAocGFyZW50X2RldiwgImNhbid0IHJlZ2lzdGVyIHJvb3QgaHViIGZvciAlcywgJWRcbiIsCisJCQkJdXNiX2Rldi0+ZGV2LmJ1c19pZCwgcmV0dmFsKTsKKwl9CisJdXAgKCZ1c2JfYnVzX2xpc3RfbG9jayk7CisKKwlpZiAocmV0dmFsID09IDApIHsKKwkJc3Bpbl9sb2NrX2lycSAoJmhjZF9yb290X2h1Yl9sb2NrKTsKKwkJaGNkLT5yaF9yZWdpc3RlcmVkID0gMTsKKwkJc3Bpbl91bmxvY2tfaXJxICgmaGNkX3Jvb3RfaHViX2xvY2spOworCisJCS8qIERpZCB0aGUgSEMgZGllIGJlZm9yZSB0aGUgcm9vdCBodWIgd2FzIHJlZ2lzdGVyZWQ/ICovCisJCWlmIChoY2QtPnN0YXRlID09IEhDX1NUQVRFX0hBTFQpCisJCQl1c2JfaGNfZGllZCAoaGNkKTsJLyogVGhpcyB0aW1lIGNsZWFuIHVwICovCisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9oY2RfcmVnaXN0ZXJfcm9vdF9odWIpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogdXNiX2NhbGNfYnVzX3RpbWUgLSBhcHByb3hpbWF0ZSBwZXJpb2RpYyB0cmFuc2FjdGlvbiB0aW1lIGluIG5hbm9zZWNvbmRzCisgKiBAc3BlZWQ6IGZyb20gZGV2LT5zcGVlZDsgVVNCX1NQRUVEX3tMT1csRlVMTCxISUdIfQorICogQGlzX2lucHV0OiB0cnVlIGlmZiB0aGUgdHJhbnNhY3Rpb24gc2VuZHMgZGF0YSB0byB0aGUgaG9zdAorICogQGlzb2M6IHRydWUgZm9yIGlzb2Nocm9ub3VzIHRyYW5zYWN0aW9ucywgZmFsc2UgZm9yIGludGVycnVwdCBvbmVzCisgKiBAYnl0ZWNvdW50OiBob3cgbWFueSBieXRlcyBpbiB0aGUgdHJhbnNhY3Rpb24uCisgKgorICogUmV0dXJucyBhcHByb3hpbWF0ZSBidXMgdGltZSBpbiBuYW5vc2Vjb25kcyBmb3IgYSBwZXJpb2RpYyB0cmFuc2FjdGlvbi4KKyAqIFNlZSBVU0IgMi4wIHNwZWMgc2VjdGlvbiA1LjExLjM7IG9ubHkgcGVyaW9kaWMgdHJhbnNmZXJzIG5lZWQgdG8gYmUKKyAqIHNjaGVkdWxlZCBpbiBzb2Z0d2FyZSwgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVzZWQgZm9yIHN1Y2ggc2NoZWR1bGluZy4KKyAqLworbG9uZyB1c2JfY2FsY19idXNfdGltZSAoaW50IHNwZWVkLCBpbnQgaXNfaW5wdXQsIGludCBpc29jLCBpbnQgYnl0ZWNvdW50KQoreworCXVuc2lnbmVkIGxvbmcJdG1wOworCisJc3dpdGNoIChzcGVlZCkgeworCWNhc2UgVVNCX1NQRUVEX0xPVzogCS8qIElOVFIgb25seSAqLworCQlpZiAoaXNfaW5wdXQpIHsKKwkJCXRtcCA9ICg2NzY2N0wgKiAoMzFMICsgMTBMICogQml0VGltZSAoYnl0ZWNvdW50KSkpIC8gMTAwMEw7CisJCQlyZXR1cm4gKDY0MDYwTCArICgyICogQldfSFVCX0xTX1NFVFVQKSArIEJXX0hPU1RfREVMQVkgKyB0bXApOworCQl9IGVsc2UgeworCQkJdG1wID0gKDY2NzAwTCAqICgzMUwgKyAxMEwgKiBCaXRUaW1lIChieXRlY291bnQpKSkgLyAxMDAwTDsKKwkJCXJldHVybiAoNjQxMDdMICsgKDIgKiBCV19IVUJfTFNfU0VUVVApICsgQldfSE9TVF9ERUxBWSArIHRtcCk7CisJCX0KKwljYXNlIFVTQl9TUEVFRF9GVUxMOgkvKiBJU09DIG9yIElOVFIgKi8KKwkJaWYgKGlzb2MpIHsKKwkJCXRtcCA9ICg4MzU0TCAqICgzMUwgKyAxMEwgKiBCaXRUaW1lIChieXRlY291bnQpKSkgLyAxMDAwTDsKKwkJCXJldHVybiAoKChpc19pbnB1dCkgPyA3MjY4TCA6IDYyNjVMKSArIEJXX0hPU1RfREVMQVkgKyB0bXApOworCQl9IGVsc2UgeworCQkJdG1wID0gKDgzNTRMICogKDMxTCArIDEwTCAqIEJpdFRpbWUgKGJ5dGVjb3VudCkpKSAvIDEwMDBMOworCQkJcmV0dXJuICg5MTA3TCArIEJXX0hPU1RfREVMQVkgKyB0bXApOworCQl9CisJY2FzZSBVU0JfU1BFRURfSElHSDoJLyogSVNPQyBvciBJTlRSICovCisJCS8vIEZJWE1FIGFkanVzdCBmb3IgaW5wdXQgdnMgb3V0cHV0CisJCWlmIChpc29jKQorCQkJdG1wID0gSFNfVVNFQ1MgKGJ5dGVjb3VudCk7CisJCWVsc2UKKwkJCXRtcCA9IEhTX1VTRUNTX0lTTyAoYnl0ZWNvdW50KTsKKwkJcmV0dXJuIHRtcDsKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZyAoIiVzOiBib2d1cyBkZXZpY2Ugc3BlZWQhXG4iLCB1c2Jjb3JlX25hbWUpOworCQlyZXR1cm4gLTE7CisJfQorfQorRVhQT1JUX1NZTUJPTCAodXNiX2NhbGNfYnVzX3RpbWUpOworCisvKgorICogdXNiX2NoZWNrX2JhbmR3aWR0aCgpOgorICoKKyAqIG9sZF9hbGxvYyBpcyBmcm9tIGhvc3RfY29udHJvbGxlci0+YmFuZHdpZHRoX2FsbG9jYXRlZCBpbiBtaWNyb3NlY29uZHM7CisgKiBidXN0aW1lIGlzIGZyb20gY2FsY19idXNfdGltZSgpLCBidXQgY29udmVydGVkIHRvIG1pY3Jvc2Vjb25kcy4KKyAqCisgKiByZXR1cm5zIDxidXN0aW1lIGluIHVzPiBpZiBzdWNjZXNzZnVsLAorICogb3IgLUVOT1NQQyBpZiBiYW5kd2lkdGggcmVxdWVzdCBmYWlscy4KKyAqCisgKiBGSVhNRToKKyAqIFRoaXMgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCB1c2UgRW5kcG9pbnQuYkludGVydmFsCisgKiBpbiBtYW5hZ2luZyBiYW5kd2lkdGggYWxsb2NhdGlvbi4KKyAqIEl0IHByb2JhYmx5IG5lZWRzIHRvIGJlIGV4cGFuZGVkIHRvIHVzZSBFbmRwb2ludC5iSW50ZXJ2YWwuCisgKiBUaGlzIGNhbiBiZSBkb25lIGFzIGEgbGF0ZXIgZW5oYW5jZW1lbnQgKGNvcnJlY3Rpb24pLgorICoKKyAqIFRoaXMgd2lsbCBhbHNvIHByb2JhYmx5IHJlcXVpcmUgc29tZSBraW5kIG9mCisgKiBmcmFtZSBhbGxvY2F0aW9uIHRyYWNraW5nLi4ubWVhbmluZywgZm9yIGV4YW1wbGUsCisgKiB0aGF0IGlmIG11bHRpcGxlIGRyaXZlcnMgcmVxdWVzdCBpbnRlcnJ1cHRzIGV2ZXJ5IDEwIFVTQiBmcmFtZXMsCisgKiB0aGV5IGRvbid0IGFsbCBoYXZlIHRvIGJlIGFsbG9jYXRlZCBhdAorICogZnJhbWUgbnVtYmVycyBOLCBOKzEwLCBOKzIwLCBldGMuICBTb21lIG9mIHRoZW0gY291bGQgYmUgYXQKKyAqIE4rMTEsIE4rMjEsIE4rMzEsIGV0Yy4sIGFuZCBvdGhlcnMgYXQKKyAqIE4rMTIsIE4rMjIsIE4rMzIsIGV0Yy4KKyAqCisgKiBTaW1pbGFybHkgZm9yIGlzb2Nocm9ub3VzIHRyYW5zZmVycy4uLgorICoKKyAqIEluZGl2aWR1YWwgSENEcyBjYW4gc2NoZWR1bGUgbW9yZSBkaXJlY3RseSAuLi4gdGhpcyBsb2dpYworICogaXMgbm90IGNvcnJlY3QgZm9yIGhpZ2ggc3BlZWQgdHJhbnNmZXJzLgorICovCitpbnQgdXNiX2NoZWNrX2JhbmR3aWR0aCAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkIGludAlwaXBlID0gdXJiLT5waXBlOworCWxvbmcJCWJ1c3RpbWU7CisJaW50CQlpc19pbiA9IHVzYl9waXBlaW4gKHBpcGUpOworCWludAkJaXNfaXNvID0gdXNiX3BpcGVpc29jIChwaXBlKTsKKwlpbnQJCW9sZF9hbGxvYyA9IGRldi0+YnVzLT5iYW5kd2lkdGhfYWxsb2NhdGVkOworCWludAkJbmV3X2FsbG9jOworCisKKwlidXN0aW1lID0gTlNfVE9fVVMgKHVzYl9jYWxjX2J1c190aW1lIChkZXYtPnNwZWVkLCBpc19pbiwgaXNfaXNvLAorCQkJdXNiX21heHBhY2tldCAoZGV2LCBwaXBlLCAhaXNfaW4pKSk7CisJaWYgKGlzX2lzbykKKwkJYnVzdGltZSAvPSB1cmItPm51bWJlcl9vZl9wYWNrZXRzOworCisJbmV3X2FsbG9jID0gb2xkX2FsbG9jICsgKGludCkgYnVzdGltZTsKKwlpZiAobmV3X2FsbG9jID4gRlJBTUVfVElNRV9NQVhfVVNFQ1NfQUxMT0MpIHsKKyNpZmRlZglERUJVRworCQljaGFyCSptb2RlID0gCisjaWZkZWYgQ09ORklHX1VTQl9CQU5EV0lEVEgKKwkJCSIiOworI2Vsc2UKKwkJCSJ3b3VsZCBoYXZlICI7CisjZW5kaWYKKwkJZGV2X2RiZyAoJmRldi0+ZGV2LCAidXNiX2NoZWNrX2JhbmR3aWR0aCAlc0ZBSUxFRDogJWQgKyAlbGQgPSAlZCB1c2VjXG4iLAorCQkJbW9kZSwgb2xkX2FsbG9jLCBidXN0aW1lLCBuZXdfYWxsb2MpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1VTQl9CQU5EV0lEVEgKKwkJYnVzdGltZSA9IC1FTk9TUEM7CS8qIHJlcG9ydCBlcnJvciAqLworI2VuZGlmCisJfQorCisJcmV0dXJuIGJ1c3RpbWU7Cit9CitFWFBPUlRfU1lNQk9MICh1c2JfY2hlY2tfYmFuZHdpZHRoKTsKKworCisvKioKKyAqIHVzYl9jbGFpbV9iYW5kd2lkdGggLSByZWNvcmRzIGJhbmR3aWR0aCBmb3IgYSBwZXJpb2RpYyB0cmFuc2ZlcgorICogQGRldjogc291cmNlL3RhcmdldCBvZiByZXF1ZXN0CisgKiBAdXJiOiByZXF1ZXN0ICh1cmItPmRldiA9PSBkZXYpCisgKiBAYnVzdGltZTogYmFuZHdpZHRoIGNvbnN1bWVkLCBpbiAoYXZlcmFnZSkgbWljcm9zZWNvbmRzIHBlciBmcmFtZQorICogQGlzb2M6IHRydWUgaWZmIHRoZSByZXF1ZXN0IGlzIGlzb2Nocm9ub3VzCisgKgorICogQnVzIGJhbmR3aWR0aCByZXNlcnZhdGlvbnMgYXJlIHJlY29yZGVkIHB1cmVseSBmb3IgZGlhZ25vc3RpYyBwdXJwb3Nlcy4KKyAqIEhDRHMgYXJlIGV4cGVjdGVkIG5vdCB0byBvdmVyY29tbWl0IHBlcmlvZGljIGJhbmR3aWR0aCwgYW5kIHRvIHJlY29yZCBzdWNoCisgKiByZXNlcnZhdGlvbnMgd2hlbmV2ZXIgZW5kcG9pbnRzIGFyZSBhZGRlZCB0byB0aGUgcGVyaW9kaWMgc2NoZWR1bGUuCisgKgorICogRklYTUUgYXZlcmFnaW5nIHBlci1mcmFtZSBpcyBzdWJvcHRpbWFsLiAgQmV0dGVyIHRvIHN1bSBvdmVyIHRoZSBIQ0QncworICogZW50aXJlIHBlcmlvZGljIHNjaGVkdWxlIC4uLiAzMiBmcmFtZXMgZm9yIE9IQ0ksIDEwMjQgZm9yIFVIQ0ksIHNldHRhYmxlCisgKiBmb3IgRUhDSSAoMjU2LzUxMi8xMDI0IGZyYW1lcywgZGVmYXVsdCAxMDI0KSBhbmQgaGF2ZSB0aGUgYnVzIGV4cG9zZSBob3cKKyAqIGxhcmdlIGl0cyBwZXJpb2RpYyBzY2hlZHVsZSBpcy4KKyAqLwordm9pZCB1c2JfY2xhaW1fYmFuZHdpZHRoIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIsIGludCBidXN0aW1lLCBpbnQgaXNvYykKK3sKKwlkZXYtPmJ1cy0+YmFuZHdpZHRoX2FsbG9jYXRlZCArPSBidXN0aW1lOworCWlmIChpc29jKQorCQlkZXYtPmJ1cy0+YmFuZHdpZHRoX2lzb2NfcmVxcysrOworCWVsc2UKKwkJZGV2LT5idXMtPmJhbmR3aWR0aF9pbnRfcmVxcysrOworCXVyYi0+YmFuZHdpZHRoID0gYnVzdGltZTsKKworI2lmZGVmIFVTQl9CQU5EV0lEVEhfTUVTU0FHRVMKKwlkZXZfZGJnICgmZGV2LT5kZXYsICJiYW5kd2lkdGggYWxsb2MgaW5jcmVhc2VkIGJ5ICVkICglcykgdG8gJWQgZm9yICVkIHJlcXVlc3RlcnNcbiIsCisJCWJ1c3RpbWUsCisJCWlzb2MgPyAiSVNPQyIgOiAiSU5UUiIsCisJCWRldi0+YnVzLT5iYW5kd2lkdGhfYWxsb2NhdGVkLAorCQlkZXYtPmJ1cy0+YmFuZHdpZHRoX2ludF9yZXFzICsgZGV2LT5idXMtPmJhbmR3aWR0aF9pc29jX3JlcXMpOworI2VuZGlmCit9CitFWFBPUlRfU1lNQk9MICh1c2JfY2xhaW1fYmFuZHdpZHRoKTsKKworCisvKioKKyAqIHVzYl9yZWxlYXNlX2JhbmR3aWR0aCAtIHJldmVyc2VzIGVmZmVjdCBvZiB1c2JfY2xhaW1fYmFuZHdpZHRoKCkKKyAqIEBkZXY6IHNvdXJjZS90YXJnZXQgb2YgcmVxdWVzdAorICogQHVyYjogcmVxdWVzdCAodXJiLT5kZXYgPT0gZGV2KQorICogQGlzb2M6IHRydWUgaWZmIHRoZSByZXF1ZXN0IGlzIGlzb2Nocm9ub3VzCisgKgorICogVGhpcyByZWNvcmRzIHRoYXQgcHJldmlvdXNseSBhbGxvY2F0ZWQgYmFuZHdpZHRoIGhhcyBiZWVuIHJlbGVhc2VkLgorICogQmFuZHdpZHRoIGlzIHJlbGVhc2VkIHdoZW4gZW5kcG9pbnRzIGFyZSByZW1vdmVkIGZyb20gdGhlIGhvc3QgY29udHJvbGxlcidzCisgKiBwZXJpb2RpYyBzY2hlZHVsZS4KKyAqLwordm9pZCB1c2JfcmVsZWFzZV9iYW5kd2lkdGggKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHN0cnVjdCB1cmIgKnVyYiwgaW50IGlzb2MpCit7CisJZGV2LT5idXMtPmJhbmR3aWR0aF9hbGxvY2F0ZWQgLT0gdXJiLT5iYW5kd2lkdGg7CisJaWYgKGlzb2MpCisJCWRldi0+YnVzLT5iYW5kd2lkdGhfaXNvY19yZXFzLS07CisJZWxzZQorCQlkZXYtPmJ1cy0+YmFuZHdpZHRoX2ludF9yZXFzLS07CisKKyNpZmRlZiBVU0JfQkFORFdJRFRIX01FU1NBR0VTCisJZGV2X2RiZyAoJmRldi0+ZGV2LCAiYmFuZHdpZHRoIGFsbG9jIHJlZHVjZWQgYnkgJWQgKCVzKSB0byAlZCBmb3IgJWQgcmVxdWVzdGVyc1xuIiwKKwkJdXJiLT5iYW5kd2lkdGgsCisJCWlzb2MgPyAiSVNPQyIgOiAiSU5UUiIsCisJCWRldi0+YnVzLT5iYW5kd2lkdGhfYWxsb2NhdGVkLAorCQlkZXYtPmJ1cy0+YmFuZHdpZHRoX2ludF9yZXFzICsgZGV2LT5idXMtPmJhbmR3aWR0aF9pc29jX3JlcXMpOworI2VuZGlmCisJdXJiLT5iYW5kd2lkdGggPSAwOworfQorRVhQT1JUX1NZTUJPTCAodXNiX3JlbGVhc2VfYmFuZHdpZHRoKTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogR2VuZXJpYyBIQyBvcGVyYXRpb25zLgorICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHVyYl91bmxpbmsgKHN0cnVjdCB1cmIgKnVyYikKK3sKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCS8qIFJlbGVhc2UgYW55IHBlcmlvZGljIHRyYW5zZmVyIGJhbmR3aWR0aCAqLworCWlmICh1cmItPmJhbmR3aWR0aCkKKwkJdXNiX3JlbGVhc2VfYmFuZHdpZHRoICh1cmItPmRldiwgdXJiLAorCQkJdXNiX3BpcGVpc29jICh1cmItPnBpcGUpKTsKKworCS8qIGNsZWFyIGFsbCBzdGF0ZSBsaW5raW5nIHVyYiB0byB0aGlzIGRldiAoYW5kIGhjZCkgKi8KKworCXNwaW5fbG9ja19pcnFzYXZlICgmaGNkX2RhdGFfbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsX2luaXQgKCZ1cmItPnVyYl9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmaGNkX2RhdGFfbG9jaywgZmxhZ3MpOworCXVzYl9wdXRfZGV2ICh1cmItPmRldik7Cit9CisKKworLyogbWF5IGJlIGNhbGxlZCBpbiBhbnkgY29udGV4dCB3aXRoIGEgdmFsaWQgdXJiLT5kZXYgdXNlY291bnQKKyAqIGNhbGxlciBzdXJyZW5kZXJzICJvd25lcnNoaXAiIG9mIHVyYgorICogZXhwZWN0cyB1c2Jfc3VibWl0X3VyYigpIHRvIGhhdmUgc2FuaXR5IGNoZWNrZWQgYW5kIGNvbmRpdGlvbmVkIGFsbAorICogaW5wdXRzIGluIHRoZSB1cmIKKyAqLworc3RhdGljIGludCBoY2Rfc3VibWl0X3VyYiAoc3RydWN0IHVyYiAqdXJiLCBpbnQgbWVtX2ZsYWdzKQoreworCWludAkJCXN0YXR1czsKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IHVyYi0+ZGV2LT5idXMtPmhjcHJpdjsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJaWYgKCFoY2QpCisJCXJldHVybiAtRU5PREVWOworCisJdXNibW9uX3VyYl9zdWJtaXQoJmhjZC0+c2VsZiwgdXJiKTsKKworCS8qCisJICogQXRvbWljYWxseSBxdWV1ZSB0aGUgdXJiLCAgZmlyc3QgdG8gb3VyIHJlY29yZHMsIHRoZW4gdG8gdGhlIEhDRC4KKwkgKiBBY2Nlc3MgdG8gdXJiLT5zdGF0dXMgaXMgY29udHJvbGxlZCBieSB1cmItPmxvY2sgLi4uIGNoYW5nZXMgb24KKwkgKiBpL28gY29tcGxldGlvbiAobm9ybWFsIG9yIGZhdWx0KSBvciB1bmxpbmtpbmcuCisJICovCisKKwkvLyBGSVhNRTogIHZlcmlmeSB0aGF0IHF1aWVzY2luZyBoYyB3b3JrcyByaWdodCAoUkggY2xlYW5zIHVwKQorCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZoY2RfZGF0YV9sb2NrLCBmbGFncyk7CisJZXAgPSAodXNiX3BpcGVpbih1cmItPnBpcGUpID8gdXJiLT5kZXYtPmVwX2luIDogdXJiLT5kZXYtPmVwX291dCkKKwkJCVt1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSldOworCWlmICh1bmxpa2VseSAoIWVwKSkKKwkJc3RhdHVzID0gLUVOT0VOVDsKKwllbHNlIGlmICh1bmxpa2VseSAodXJiLT5yZWplY3QpKQorCQlzdGF0dXMgPSAtRVBFUk07CisJZWxzZSBzd2l0Y2ggKGhjZC0+c3RhdGUpIHsKKwljYXNlIEhDX1NUQVRFX1JVTk5JTkc6CisJY2FzZSBIQ19TVEFURV9SRVNVTUlORzoKKwkJdXNiX2dldF9kZXYgKHVyYi0+ZGV2KTsKKwkJbGlzdF9hZGRfdGFpbCAoJnVyYi0+dXJiX2xpc3QsICZlcC0+dXJiX2xpc3QpOworCQlzdGF0dXMgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzdGF0dXMgPSAtRVNIVVRET1dOOworCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmhjZF9kYXRhX2xvY2ssIGZsYWdzKTsKKwlpZiAoc3RhdHVzKSB7CisJCUlOSVRfTElTVF9IRUFEICgmdXJiLT51cmJfbGlzdCk7CisJCXVzYm1vbl91cmJfc3VibWl0X2Vycm9yKCZoY2QtPnNlbGYsIHVyYiwgc3RhdHVzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwkvKiBpbmNyZW1lbnQgdXJiJ3MgcmVmZXJlbmNlIGNvdW50IGFzIHBhcnQgb2YgZ2l2aW5nIGl0IHRvIHRoZSBIQ0QKKwkgKiAod2hpY2ggbm93IGNvbnRyb2xzIGl0KS4gIEhDRCBndWFyYW50ZWVzIHRoYXQgaXQgZWl0aGVyIHJldHVybnMKKwkgKiBhbiBlcnJvciBvciBjYWxscyBnaXZlYmFjaygpLCBidXQgbm90IGJvdGguCisJICovCisJdXJiID0gdXNiX2dldF91cmIgKHVyYik7CisJYXRvbWljX2luYyAoJnVyYi0+dXNlX2NvdW50KTsKKworCWlmICh1cmItPmRldiA9PSBoY2QtPnNlbGYucm9vdF9odWIpIHsKKwkJLyogTk9URTogIHJlcXVpcmVtZW50IG9uIGh1YiBjYWxsZXJzICh1c2JmcyBhbmQgdGhlIGh1YgorCQkgKiBkcml2ZXIsIGZvciBub3cpIHRoYXQgVVJCcycgdXJiLT50cmFuc2Zlcl9idWZmZXIgYmUKKwkJICogdmFsaWQgYW5kIHVzYl9idWZmZXJfe3N5bmMsdW5tYXB9KCkgbm90IGJlIG5lZWRlZCwgc2luY2UKKwkJICogdGhleSBjb3VsZCBjbG9iYmVyIHJvb3QgaHViIHJlc3BvbnNlIGRhdGEuCisJCSAqLworCQlzdGF0dXMgPSByaF91cmJfZW5xdWV1ZSAoaGNkLCB1cmIpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogbG93ZXIgbGV2ZWwgaGNkIGNvZGUgc2hvdWxkIHVzZSAqX2RtYSBleGNsdXNpdmVseSwKKwkgKiB1bmxlc3MgaXQgdXNlcyBwaW8gb3IgdGFsa3MgdG8gYW5vdGhlciB0cmFuc3BvcnQuCisJICovCisJaWYgKGhjZC0+c2VsZi5jb250cm9sbGVyLT5kbWFfbWFzaykgeworCQlpZiAodXNiX3BpcGVjb250cm9sICh1cmItPnBpcGUpCisJCQkmJiAhKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfTk9fU0VUVVBfRE1BX01BUCkpCisJCQl1cmItPnNldHVwX2RtYSA9IGRtYV9tYXBfc2luZ2xlICgKKwkJCQkJaGNkLT5zZWxmLmNvbnRyb2xsZXIsCisJCQkJCXVyYi0+c2V0dXBfcGFja2V0LAorCQkJCQlzaXplb2YgKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpLAorCQkJCQlETUFfVE9fREVWSUNFKTsKKwkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAhPSAwCisJCQkmJiAhKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUCkpCisJCQl1cmItPnRyYW5zZmVyX2RtYSA9IGRtYV9tYXBfc2luZ2xlICgKKwkJCQkJaGNkLT5zZWxmLmNvbnRyb2xsZXIsCisJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJCXVzYl9waXBlaW4gKHVyYi0+cGlwZSkKKwkJCQkJICAgID8gRE1BX0ZST01fREVWSUNFCisJCQkJCSAgICA6IERNQV9UT19ERVZJQ0UpOworCX0KKworCXN0YXR1cyA9IGhjZC0+ZHJpdmVyLT51cmJfZW5xdWV1ZSAoaGNkLCBlcCwgdXJiLCBtZW1fZmxhZ3MpOworZG9uZToKKwlpZiAodW5saWtlbHkgKHN0YXR1cykpIHsKKwkJdXJiX3VubGluayAodXJiKTsKKwkJYXRvbWljX2RlYyAoJnVyYi0+dXNlX2NvdW50KTsKKwkJaWYgKHVyYi0+cmVqZWN0KQorCQkJd2FrZV91cCAoJnVzYl9raWxsX3VyYl9xdWV1ZSk7CisJCXVzYl9wdXRfdXJiICh1cmIpOworCQl1c2Jtb25fdXJiX3N1Ym1pdF9lcnJvcigmaGNkLT5zZWxmLCB1cmIsIHN0YXR1cyk7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGNhbGxlZCBpbiBhbnkgY29udGV4dCAqLworc3RhdGljIGludCBoY2RfZ2V0X2ZyYW1lX251bWJlciAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJc3RydWN0IHVzYl9oY2QJKmhjZCA9IChzdHJ1Y3QgdXNiX2hjZCAqKXVkZXYtPmJ1cy0+aGNwcml2OworCWlmICghSENfSVNfUlVOTklORyAoaGNkLT5zdGF0ZSkpCisJCXJldHVybiAtRVNIVVRET1dOOworCXJldHVybiBoY2QtPmRyaXZlci0+Z2V0X2ZyYW1lX251bWJlciAoaGNkKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogdGhpcyBtYWtlcyB0aGUgaGNkIGdpdmViYWNrKCkgdGhlIHVyYiBtb3JlIHF1aWNrbHksIGJ5IGtpY2tpbmcgaXQKKyAqIG9mZiBoYXJkd2FyZSBxdWV1ZXMgKHdoaWNoIG1heSB0YWtlIGEgd2hpbGUpIGFuZCByZXR1cm5pbmcgaXQgYXMKKyAqIHNvb24gYXMgcHJhY3RpY2FsLiAgd2UndmUgYWxyZWFkeSBzZXQgdXAgdGhlIHVyYidzIHJldHVybiBzdGF0dXMsCisgKiBidXQgd2UgY2FuJ3Qga25vdyBpZiB0aGUgY2FsbGJhY2sgY29tcGxldGVkIGFscmVhZHkuCisgKi8KK3N0YXRpYyBpbnQKK3VubGluazEgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpbnQJCXZhbHVlOworCisJaWYgKHVyYi0+ZGV2ID09IGhjZC0+c2VsZi5yb290X2h1YikKKwkJdmFsdWUgPSB1c2JfcmhfdXJiX2RlcXVldWUgKGhjZCwgdXJiKTsKKwllbHNlIHsKKworCQkvKiBUaGUgb25seSByZWFzb24gYW4gSENEIG1pZ2h0IGZhaWwgdGhpcyBjYWxsIGlzIGlmCisJCSAqIGl0IGhhcyBub3QgeWV0IGZ1bGx5IHF1ZXVlZCB0aGUgdXJiIHRvIGJlZ2luIHdpdGguCisJCSAqIFN1Y2ggZmFpbHVyZXMgc2hvdWxkIGJlIGhhcm1sZXNzLiAqLworCQl2YWx1ZSA9IGhjZC0+ZHJpdmVyLT51cmJfZGVxdWV1ZSAoaGNkLCB1cmIpOworCX0KKworCWlmICh2YWx1ZSAhPSAwKQorCQlkZXZfZGJnIChoY2QtPnNlbGYuY29udHJvbGxlciwgImRlcXVldWUgJXAgLS0+ICVkXG4iLAorCQkJCXVyYiwgdmFsdWUpOworCXJldHVybiB2YWx1ZTsKK30KKworLyoKKyAqIGNhbGxlZCBpbiBhbnkgY29udGV4dAorICoKKyAqIGNhbGxlciBndWFyYW50ZWVzIHVyYiB3b24ndCBiZSByZWN5Y2xlZCB0aWxsIGJvdGggdW5saW5rKCkKKyAqIGFuZCB0aGUgdXJiJ3MgY29tcGxldGlvbiBmdW5jdGlvbiByZXR1cm4KKyAqLworc3RhdGljIGludCBoY2RfdW5saW5rX3VyYiAoc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludAkqZXA7CisJc3RydWN0IHVzYl9oY2QJCQkqaGNkID0gTlVMTDsKKwlzdHJ1Y3QgZGV2aWNlCQkJKnN5cyA9IE5VTEw7CisJdW5zaWduZWQgbG9uZwkJCWZsYWdzOworCXN0cnVjdCBsaXN0X2hlYWQJCSp0bXA7CisJaW50CQkJCXJldHZhbDsKKworCWlmICghdXJiKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXVyYi0+ZGV2IHx8ICF1cmItPmRldi0+YnVzKQorCQlyZXR1cm4gLUVOT0RFVjsKKwllcCA9ICh1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyB1cmItPmRldi0+ZXBfaW4gOiB1cmItPmRldi0+ZXBfb3V0KQorCQkJW3VzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKV07CisJaWYgKCFlcCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKgorCSAqIHdlIGNvbnRlbmQgZm9yIHVyYi0+c3RhdHVzIHdpdGggdGhlIGhjZCBjb3JlLAorCSAqIHdoaWNoIGNoYW5nZXMgaXQgd2hpbGUgcmV0dXJuaW5nIHRoZSB1cmIuCisJICoKKwkgKiBDYWxsZXIgZ3VhcmFudGVlZCB0aGF0IHRoZSB1cmIgcG9pbnRlciBoYXNuJ3QgYmVlbiBmcmVlZCwgYW5kCisJICogdGhhdCBpdCB3YXMgc3VibWl0dGVkLiAgQnV0IGFzIGEgcnVsZSBpdCBjYW4ndCBrbm93IHdoZXRoZXIgb3IKKwkgKiBub3QgaXQncyBhbHJlYWR5IGJlZW4gdW5saW5rZWQgLi4uIHNvIHdlIHJlc3BlY3QgdGhlIHJldmVyc2VkCisJICogbG9jayBzZXF1ZW5jZSBuZWVkZWQgZm9yIHRoZSB1c2JfaGNkX2dpdmViYWNrX3VyYigpIGNvZGUgcGF0aHMKKwkgKiAodXJiIGxvY2ssIHRoZW4gaGNkX2RhdGFfbG9jaykgaW4gY2FzZSBzb21lIG90aGVyIENQVSBpcyBub3cKKwkgKiB1bmxpbmtpbmcgaXQuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZ1cmItPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2sgKCZoY2RfZGF0YV9sb2NrKTsKKworCXN5cyA9ICZ1cmItPmRldi0+ZGV2OworCWhjZCA9IHVyYi0+ZGV2LT5idXMtPmhjcHJpdjsKKwlpZiAoaGNkID09IE5VTEwpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBkb25lOworCX0KKworCS8qIHJ1bm5pbmcgfj0gaGMgdW5saW5rIGhhbmRzaGFrZSB3b3JrcyAoaXJxLCB0aW1lciwgZXRjKQorCSAqIGhhbHRlZCB+PSBubyB1bmxpbmsgaGFuZHNoYWtlIGlzIG5lZWRlZAorCSAqIHN1c3BlbmRlZCwgcmVzdW1pbmcgPT0gc2hvdWxkIG5ldmVyIGhhcHBlbgorCSAqLworCVdBUk5fT04gKCFIQ19JU19SVU5OSU5HIChoY2QtPnN0YXRlKSAmJiBoY2QtPnN0YXRlICE9IEhDX1NUQVRFX0hBTFQpOworCisJLyogaW5zaXN0IHRoZSB1cmIgaXMgc3RpbGwgcXVldWVkICovCisJbGlzdF9mb3JfZWFjaCh0bXAsICZlcC0+dXJiX2xpc3QpIHsKKwkJaWYgKHRtcCA9PSAmdXJiLT51cmJfbGlzdCkKKwkJCWJyZWFrOworCX0KKwlpZiAodG1wICE9ICZ1cmItPnVyYl9saXN0KSB7CisJCXJldHZhbCA9IC1FSURSTTsKKwkJZ290byBkb25lOworCX0KKworCS8qIEFueSBzdGF0dXMgZXhjZXB0IC1FSU5QUk9HUkVTUyBtZWFucyBzb21ldGhpbmcgYWxyZWFkeSBzdGFydGVkIHRvCisJICogdW5saW5rIHRoaXMgVVJCIGZyb20gdGhlIGhhcmR3YXJlLiAgU28gdGhlcmUncyBubyBtb3JlIHdvcmsgdG8gZG8uCisJICovCisJaWYgKHVyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBJUlEgc2V0dXAgY2FuIGVhc2lseSBiZSBicm9rZW4gc28gdGhhdCBVU0IgY29udHJvbGxlcnMKKwkgKiBuZXZlciBnZXQgY29tcGxldGlvbiBJUlFzIC4uLiBtYXliZSBldmVuIHRoZSBvbmVzIHdlIG5lZWQgdG8KKwkgKiBmaW5pc2ggdW5saW5raW5nIHRoZSBpbml0aWFsIGZhaWxlZCB1c2Jfc2V0X2FkZHJlc3MoKQorCSAqIG9yIGRldmljZSBkZXNjcmlwdG9yIGZldGNoLgorCSAqLworCWlmICghaGNkLT5zYXdfaXJxICYmIGhjZC0+c2VsZi5yb290X2h1YiAhPSB1cmItPmRldikgeworCQlkZXZfd2FybiAoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJVbmxpbmsgYWZ0ZXIgbm8tSVJRPyAgIgorCQkJIkNvbnRyb2xsZXIgaXMgcHJvYmFibHkgdXNpbmcgdGhlIHdyb25nIElSUS4iCisJCQkiXG4iKTsKKwkJaGNkLT5zYXdfaXJxID0gMTsKKwl9CisKKwl1cmItPnN0YXR1cyA9IHN0YXR1czsKKworCXNwaW5fdW5sb2NrICgmaGNkX2RhdGFfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnVyYi0+bG9jaywgZmxhZ3MpOworCisJcmV0dmFsID0gdW5saW5rMSAoaGNkLCB1cmIpOworCWlmIChyZXR2YWwgPT0gMCkKKwkJcmV0dmFsID0gLUVJTlBST0dSRVNTOworCXJldHVybiByZXR2YWw7CisKK2RvbmU6CisJc3Bpbl91bmxvY2sgKCZoY2RfZGF0YV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmdXJiLT5sb2NrLCBmbGFncyk7CisJaWYgKHJldHZhbCAhPSAtRUlEUk0gJiYgc3lzICYmIHN5cy0+ZHJpdmVyKQorCQlkZXZfZGJnIChzeXMsICJoY2RfdW5saW5rX3VyYiAlcCBmYWlsICVkXG4iLCB1cmIsIHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogZGlzYWJsZXMgdGhlIGVuZHBvaW50OiBjYW5jZWxzIGFueSBwZW5kaW5nIHVyYnMsIHRoZW4gc3luY2hyb25pemVzIHdpdGgKKyAqIHRoZSBoY2QgdG8gbWFrZSBzdXJlIGFsbCBlbmRwb2ludCBzdGF0ZSBpcyBnb25lIGZyb20gaGFyZHdhcmUuIHVzZSBmb3IKKyAqIHNldF9jb25maWd1cmF0aW9uLCBzZXRfaW50ZXJmYWNlLCBkcml2ZXIgcmVtb3ZhbCwgcGh5c2ljYWwgZGlzY29ubmVjdC4KKyAqCisgKiBleGFtcGxlOiAgYSBxaCBzdG9yZWQgaW4gZXAtPmhjcHJpdiwgaG9sZGluZyBzdGF0ZSByZWxhdGVkIHRvIGVuZHBvaW50CisgKiB0eXBlLCBtYXhwYWNrZXQgc2l6ZSwgdG9nZ2xlLCBoYWx0IHN0YXR1cywgYW5kIHNjaGVkdWxpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitoY2RfZW5kcG9pbnRfZGlzYWJsZSAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXApCit7CisJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CisJc3RydWN0IHVyYgkJKnVyYjsKKworCWhjZCA9IHVkZXYtPmJ1cy0+aGNwcml2OworCisJV0FSTl9PTiAoIUhDX0lTX1JVTk5JTkcgKGhjZC0+c3RhdGUpICYmIGhjZC0+c3RhdGUgIT0gSENfU1RBVEVfSEFMVCk7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSAoKTsKKworCS8qIEZJWE1FIG1vdmUgbW9zdCBvZiB0aGlzIGludG8gbWVzc2FnZS5jIGFzIHBhcnQgb2YgaXRzCisJICogZW5kcG9pbnQgZGlzYWJsZSBsb2dpYworCSAqLworCisJLyogZXAgaXMgYWxyZWFkeSBnb25lIGZyb20gdWRldi0+ZXBfe2luLG91dH1bXTsgbm8gbW9yZSBzdWJtaXRzICovCityZXNjYW46CisJc3Bpbl9sb2NrICgmaGNkX2RhdGFfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSAodXJiLCAmZXAtPnVyYl9saXN0LCB1cmJfbGlzdCkgeworCQlpbnQJdG1wOworCisJCS8qIGFub3RoZXIgY3B1IG1heSBiZSBpbiBoY2QsIHNwaW5uaW5nIG9uIGhjZF9kYXRhX2xvY2sKKwkJICogdG8gZ2l2ZWJhY2soKSB0aGlzIHVyYi4gIHRoZSByYWNlcyBoZXJlIHNob3VsZCBiZQorCQkgKiBzbWFsbCwgYnV0IGEgZnVsbCBmaXggbmVlZHMgYSBuZXcgImNhbid0IHN1Ym1pdCIKKwkJICogdXJiIHN0YXRlLgorCQkgKiBGSVhNRSB1cmItPnJlamVjdCBzaG91bGQgYWxsb3cgdGhhdC4uLgorCQkgKi8KKwkJaWYgKHVyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykKKwkJCWNvbnRpbnVlOworCQl1c2JfZ2V0X3VyYiAodXJiKTsKKwkJc3Bpbl91bmxvY2sgKCZoY2RfZGF0YV9sb2NrKTsKKworCQlzcGluX2xvY2sgKCZ1cmItPmxvY2spOworCQl0bXAgPSB1cmItPnN0YXR1czsKKwkJaWYgKHRtcCA9PSAtRUlOUFJPR1JFU1MpCisJCQl1cmItPnN0YXR1cyA9IC1FU0hVVERPV047CisJCXNwaW5fdW5sb2NrICgmdXJiLT5sb2NrKTsKKworCQkvKiBraWNrIGhjZCB1bmxlc3MgaXQncyBhbHJlYWR5IHJldHVybmluZyB0aGlzICovCisJCWlmICh0bXAgPT0gLUVJTlBST0dSRVNTKSB7CisJCQl0bXAgPSB1cmItPnBpcGU7CisJCQl1bmxpbmsxIChoY2QsIHVyYik7CisJCQlkZXZfZGJnIChoY2QtPnNlbGYuY29udHJvbGxlciwKKwkJCQkic2h1dGRvd24gdXJiICVwIHBpcGUgJTA4eCBlcCVkJXMlc1xuIiwKKwkJCQl1cmIsIHRtcCwgdXNiX3BpcGVlbmRwb2ludCAodG1wKSwKKwkJCQkodG1wICYgVVNCX0RJUl9JTikgPyAiaW4iIDogIm91dCIsCisJCQkJKHsgY2hhciAqczsgXAorCQkJCSBzd2l0Y2ggKHVzYl9waXBldHlwZSAodG1wKSkgeyBcCisJCQkJIGNhc2UgUElQRV9DT05UUk9MOglzID0gIiI7IGJyZWFrOyBcCisJCQkJIGNhc2UgUElQRV9CVUxLOglzID0gIi1idWxrIjsgYnJlYWs7IFwKKwkJCQkgY2FzZSBQSVBFX0lOVEVSUlVQVDoJcyA9ICItaW50ciI7IGJyZWFrOyBcCisJCQkJIGRlZmF1bHQ6IAkJcyA9ICItaXNvIjsgYnJlYWs7IFwKKwkJCQl9OyBzO30pKTsKKwkJfQorCQl1c2JfcHV0X3VyYiAodXJiKTsKKworCQkvKiBsaXN0IGNvbnRlbnRzIG1heSBoYXZlIGNoYW5nZWQgKi8KKwkJZ290byByZXNjYW47CisJfQorCXNwaW5fdW5sb2NrICgmaGNkX2RhdGFfbG9jayk7CisJbG9jYWxfaXJxX2VuYWJsZSAoKTsKKworCS8qIHN5bmNocm9uaXplIHdpdGggdGhlIGhhcmR3YXJlLCBzbyBvbGQgY29uZmlndXJhdGlvbiBzdGF0ZQorCSAqIGNsZWFycyBvdXQgaW1tZWRpYXRlbHkgKGFuZCB3aWxsIGJlIGZyZWVkKS4KKwkgKi8KKwltaWdodF9zbGVlcCAoKTsKKwlpZiAoaGNkLT5kcml2ZXItPmVuZHBvaW50X2Rpc2FibGUpCisJCWhjZC0+ZHJpdmVyLT5lbmRwb2ludF9kaXNhYmxlIChoY2QsIGVwKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAorCitzdGF0aWMgaW50IGhjZF9odWJfc3VzcGVuZCAoc3RydWN0IHVzYl9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKworCWhjZCA9IGNvbnRhaW5lcl9vZiAoYnVzLCBzdHJ1Y3QgdXNiX2hjZCwgc2VsZik7CisJaWYgKGhjZC0+ZHJpdmVyLT5odWJfc3VzcGVuZCkKKwkJcmV0dXJuIGhjZC0+ZHJpdmVyLT5odWJfc3VzcGVuZCAoaGNkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoY2RfaHViX3Jlc3VtZSAoc3RydWN0IHVzYl9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKworCWhjZCA9IGNvbnRhaW5lcl9vZiAoYnVzLCBzdHJ1Y3QgdXNiX2hjZCwgc2VsZik7CisJaWYgKGhjZC0+ZHJpdmVyLT5odWJfcmVzdW1lKQorCQlyZXR1cm4gaGNkLT5kcml2ZXItPmh1Yl9yZXN1bWUgKGhjZCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIgLSBjYWxsZWQgYnkgSENEIHRvIHJlc3VtZSBpdHMgcm9vdCBodWIgCisgKiBAaGNkOiBob3N0IGNvbnRyb2xsZXIgZm9yIHRoaXMgcm9vdCBodWIKKyAqCisgKiBUaGUgVVNCIGhvc3QgY29udHJvbGxlciBjYWxscyB0aGlzIGZ1bmN0aW9uIHdoZW4gaXRzIHJvb3QgaHViIGlzCisgKiBzdXNwZW5kZWQgKHdpdGggdGhlIHJlbW90ZSB3YWtldXAgZmVhdHVyZSBlbmFibGVkKSBhbmQgYSByZW1vdGUKKyAqIHdha2V1cCByZXF1ZXN0IGlzIHJlY2VpdmVkLiAgSXQgcXVldWVzIGEgcmVxdWVzdCBmb3Iga2h1YmQgdG8KKyAqIHJlc3VtZSB0aGUgcm9vdCBodWIuCisgKi8KK3ZvaWQgdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmaGNkX3Jvb3RfaHViX2xvY2ssIGZsYWdzKTsKKwlpZiAoaGNkLT5yaF9yZWdpc3RlcmVkKQorCQl1c2JfcmVzdW1lX3Jvb3RfaHViIChoY2QtPnNlbGYucm9vdF9odWIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZoY2Rfcm9vdF9odWJfbG9jaywgZmxhZ3MpOworfQorCisjZWxzZQordm9pZCB1c2JfaGNkX3Jlc3VtZV9yb290X2h1YiAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKK30KKyNlbmRpZgorRVhQT1JUX1NZTUJPTF9HUEwodXNiX2hjZF9yZXN1bWVfcm9vdF9odWIpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYJQ09ORklHX1VTQl9PVEcKKworLyoqCisgKiB1c2JfYnVzX3N0YXJ0X2VudW0gLSBzdGFydCBpbW1lZGlhdGUgZW51bWVyYXRpb24gKGZvciBPVEcpCisgKiBAYnVzOiB0aGUgYnVzIChtdXN0IHVzZSBoY2QgZnJhbWV3b3JrKQorICogQHBvcnRfbnVtOiAxLWJhc2VkIG51bWJlciBvZiBwb3J0OyB1c3VhbGx5IGJ1cy0+b3RnX3BvcnQKKyAqIENvbnRleHQ6IGluX2ludGVycnVwdCgpCisgKgorICogU3RhcnRzIGVudW1lcmF0aW9uLCB3aXRoIGFuIGltbWVkaWF0ZSByZXNldCBmb2xsb3dlZCBsYXRlciBieQorICoga2h1YmQgaWRlbnRpZnlpbmcgYW5kIHBvc3NpYmx5IGNvbmZpZ3VyaW5nIHRoZSBkZXZpY2UuCisgKiBUaGlzIGlzIG5lZWRlZCBieSBPVEcgY29udHJvbGxlciBkcml2ZXJzLCB3aGVyZSBpdCBoZWxwcyBtZWV0CisgKiBITlAgcHJvdG9jb2wgdGltaW5nIHJlcXVpcmVtZW50cyBmb3Igc3RhcnRpbmcgYSBwb3J0IHJlc2V0LgorICovCitpbnQgdXNiX2J1c19zdGFydF9lbnVtKHN0cnVjdCB1c2JfYnVzICpidXMsIHVuc2lnbmVkIHBvcnRfbnVtKQoreworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCWludAkJCXN0YXR1cyA9IC1FT1BOT1RTVVBQOworCisJLyogTk9URTogc2luY2UgSE5QIGNhbid0IHN0YXJ0IGJ5IGdyYWJiaW5nIHRoZSBidXMncyBhZGRyZXNzMF9zZW0sCisJICogYm9hcmRzIHdpdGggcm9vdCBodWJzIGhvb2tlZCB1cCB0byBpbnRlcm5hbCBkZXZpY2VzIChpbnN0ZWFkIG9mCisJICoganVzdCB0aGUgT1RHIHBvcnQpIG1heSBuZWVkIG1vcmUgYXR0ZW50aW9uIHRvIHJlc2V0dGluZy4uLgorCSAqLworCWhjZCA9IGNvbnRhaW5lcl9vZiAoYnVzLCBzdHJ1Y3QgdXNiX2hjZCwgc2VsZik7CisJaWYgKHBvcnRfbnVtICYmIGhjZC0+ZHJpdmVyLT5zdGFydF9wb3J0X3Jlc2V0KQorCQlzdGF0dXMgPSBoY2QtPmRyaXZlci0+c3RhcnRfcG9ydF9yZXNldChoY2QsIHBvcnRfbnVtKTsKKworCS8qIHJ1biBraHViZCBzaG9ydGx5IGFmdGVyIChmaXJzdCkgcm9vdCBwb3J0IHJlc2V0IGZpbmlzaGVzOworCSAqIGl0IG1heSBpc3N1ZSBvdGhlcnMsIHVudGlsIGF0IGxlYXN0IDUwIG1zZWNzIGhhdmUgcGFzc2VkLgorCSAqLworCWlmIChzdGF0dXMgPT0gMCkKKwkJbW9kX3RpbWVyKCZoY2QtPnJoX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMCkpOworCXJldHVybiBzdGF0dXM7Cit9CitFWFBPUlRfU1lNQk9MICh1c2JfYnVzX3N0YXJ0X2VudW0pOworCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIHVzYl9oY2Rfb3BlcmF0aW9ucyAtIGFkYXB0cyB1c2JfYnVzIGZyYW1ld29yayB0byBIQ0QgZnJhbWV3b3JrIChidXMgZ2x1ZSkKKyAqLworc3RhdGljIHN0cnVjdCB1c2Jfb3BlcmF0aW9ucyB1c2JfaGNkX29wZXJhdGlvbnMgPSB7CisJLmdldF9mcmFtZV9udW1iZXIgPQloY2RfZ2V0X2ZyYW1lX251bWJlciwKKwkuc3VibWl0X3VyYiA9CQloY2Rfc3VibWl0X3VyYiwKKwkudW5saW5rX3VyYiA9CQloY2RfdW5saW5rX3VyYiwKKwkuYnVmZmVyX2FsbG9jID0JCWhjZF9idWZmZXJfYWxsb2MsCisJLmJ1ZmZlcl9mcmVlID0JCWhjZF9idWZmZXJfZnJlZSwKKwkuZGlzYWJsZSA9CQloY2RfZW5kcG9pbnRfZGlzYWJsZSwKKyNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKKwkuaHViX3N1c3BlbmQgPQkJaGNkX2h1Yl9zdXNwZW5kLAorCS5odWJfcmVzdW1lID0JCWhjZF9odWJfcmVzdW1lLAorI2VuZGlmCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIHVzYl9oY2RfZ2l2ZWJhY2tfdXJiIC0gcmV0dXJuIFVSQiBmcm9tIEhDRCB0byBkZXZpY2UgZHJpdmVyCisgKiBAaGNkOiBob3N0IGNvbnRyb2xsZXIgcmV0dXJuaW5nIHRoZSBVUkIKKyAqIEB1cmI6IHVyYiBiZWluZyByZXR1cm5lZCB0byB0aGUgVVNCIGRldmljZSBkcml2ZXIuCisgKiBAcmVnczogcHRfcmVncywgcGFzc2VkIGRvd24gdG8gdGhlIFVSQiBjb21wbGV0aW9uIGhhbmRsZXIKKyAqIENvbnRleHQ6IGluX2ludGVycnVwdCgpCisgKgorICogVGhpcyBoYW5kcyB0aGUgVVJCIGZyb20gSENEIHRvIGl0cyBVU0IgZGV2aWNlIGRyaXZlciwgdXNpbmcgaXRzCisgKiBjb21wbGV0aW9uIGZ1bmN0aW9uLiAgVGhlIEhDRCBoYXMgZnJlZWQgYWxsIHBlci11cmIgcmVzb3VyY2VzCisgKiAoYW5kIGlzIGRvbmUgdXNpbmcgdXJiLT5oY3ByaXYpLiAgSXQgYWxzbyByZWxlYXNlZCBhbGwgSENEIGxvY2tzOworICogdGhlIGRldmljZSBkcml2ZXIgd29uJ3QgY2F1c2UgcHJvYmxlbXMgaWYgaXQgZnJlZXMsIG1vZGlmaWVzLAorICogb3IgcmVzdWJtaXRzIHRoaXMgVVJCLgorICovCit2b2lkIHVzYl9oY2RfZ2l2ZWJhY2tfdXJiIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBhdF9yb290X2h1YjsKKworCWF0X3Jvb3RfaHViID0gKHVyYi0+ZGV2ID09IGhjZC0+c2VsZi5yb290X2h1Yik7CisJdXJiX3VubGluayAodXJiKTsKKworCS8qIGxvd2VyIGxldmVsIGhjZCBjb2RlIHNob3VsZCB1c2UgKl9kbWEgZXhjbHVzaXZlbHkgKi8KKwlpZiAoaGNkLT5zZWxmLmNvbnRyb2xsZXItPmRtYV9tYXNrICYmICFhdF9yb290X2h1YikgeworCQlpZiAodXNiX3BpcGVjb250cm9sICh1cmItPnBpcGUpCisJCQkmJiAhKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfTk9fU0VUVVBfRE1BX01BUCkpCisJCQlkbWFfdW5tYXBfc2luZ2xlIChoY2QtPnNlbGYuY29udHJvbGxlciwgdXJiLT5zZXR1cF9kbWEsCisJCQkJCXNpemVvZiAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksCisJCQkJCURNQV9UT19ERVZJQ0UpOworCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoICE9IDAKKwkJCSYmICEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQKSkKKwkJCWRtYV91bm1hcF9zaW5nbGUgKGhjZC0+c2VsZi5jb250cm9sbGVyLCAKKwkJCQkJdXJiLT50cmFuc2Zlcl9kbWEsCisJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQkJdXNiX3BpcGVpbiAodXJiLT5waXBlKQorCQkJCQkgICAgPyBETUFfRlJPTV9ERVZJQ0UKKwkJCQkJICAgIDogRE1BX1RPX0RFVklDRSk7CisJfQorCisJdXNibW9uX3VyYl9jb21wbGV0ZSAoJmhjZC0+c2VsZiwgdXJiKTsKKwkvKiBwYXNzIG93bmVyc2hpcCB0byB0aGUgY29tcGxldGlvbiBoYW5kbGVyICovCisJdXJiLT5jb21wbGV0ZSAodXJiLCByZWdzKTsKKwlhdG9taWNfZGVjICgmdXJiLT51c2VfY291bnQpOworCWlmICh1bmxpa2VseSAodXJiLT5yZWplY3QpKQorCQl3YWtlX3VwICgmdXNiX2tpbGxfdXJiX3F1ZXVlKTsKKwl1c2JfcHV0X3VyYiAodXJiKTsKK30KK0VYUE9SVF9TWU1CT0wgKHVzYl9oY2RfZ2l2ZWJhY2tfdXJiKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiB1c2JfaGNkX2lycSAtIGhvb2sgSVJRcyB0byBIQ0QgZnJhbWV3b3JrIChidXMgZ2x1ZSkKKyAqIEBpcnE6IHRoZSBJUlEgYmVpbmcgcmFpc2VkCisgKiBAX19oY2Q6IHBvaW50ZXIgdG8gdGhlIEhDRCB3aG9zZSBJUlEgaXMgYmVpbmcgc2lnbmFsZWQKKyAqIEByOiBzYXZlZCBoYXJkd2FyZSByZWdpc3RlcnMKKyAqCisgKiBJZiB0aGUgY29udHJvbGxlciBpc24ndCBIQUxUZWQsIGNhbGxzIHRoZSBkcml2ZXIncyBpcnEgaGFuZGxlci4KKyAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb250cm9sbGVyIGlzIG5vdyBkZWFkLgorICovCitpcnFyZXR1cm5fdCB1c2JfaGNkX2lycSAoaW50IGlycSwgdm9pZCAqX19oY2QsIHN0cnVjdCBwdF9yZWdzICogcikKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IF9faGNkOworCWludAkJCXN0YXJ0ID0gaGNkLT5zdGF0ZTsKKworCWlmIChzdGFydCA9PSBIQ19TVEFURV9IQUxUKQorCQlyZXR1cm4gSVJRX05PTkU7CisJaWYgKGhjZC0+ZHJpdmVyLT5pcnEgKGhjZCwgcikgPT0gSVJRX05PTkUpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWhjZC0+c2F3X2lycSA9IDE7CisJaWYgKGhjZC0+c3RhdGUgIT0gc3RhcnQgJiYgaGNkLT5zdGF0ZSA9PSBIQ19TVEFURV9IQUxUKQorCQl1c2JfaGNfZGllZCAoaGNkKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogdXNiX2hjX2RpZWQgLSByZXBvcnQgYWJub3JtYWwgc2h1dGRvd24gb2YgYSBob3N0IGNvbnRyb2xsZXIgKGJ1cyBnbHVlKQorICogQGhjZDogcG9pbnRlciB0byB0aGUgSENEIHJlcHJlc2VudGluZyB0aGUgY29udHJvbGxlcgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGJ5IGJ1cyBnbHVlIHRvIHJlcG9ydCBhIFVTQiBob3N0IGNvbnRyb2xsZXIgdGhhdCBkaWVkCisgKiB3aGlsZSBvcGVyYXRpb25zIG1heSBzdGlsbCBoYXZlIGJlZW4gcGVuZGluZy4gIEl0J3MgY2FsbGVkIGF1dG9tYXRpY2FsbHkKKyAqIGJ5IHRoZSBQQ0kgZ2x1ZSwgc28gb25seSBnbHVlIGZvciBub24tUENJIGJ1c3NlcyBzaG91bGQgbmVlZCB0byBjYWxsIGl0LiAKKyAqLwordm9pZCB1c2JfaGNfZGllZCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGV2X2VyciAoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJIQyBkaWVkOyBjbGVhbmluZyB1cFxuIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmhjZF9yb290X2h1Yl9sb2NrLCBmbGFncyk7CisJaWYgKGhjZC0+cmhfcmVnaXN0ZXJlZCkgeworCisJCS8qIG1ha2Uga2h1YmQgY2xlYW4gdXAgb2xkIHVyYnMgYW5kIGRldmljZXMgKi8KKwkJdXNiX3NldF9kZXZpY2Vfc3RhdGUgKGhjZC0+c2VsZi5yb290X2h1YiwKKwkJCQlVU0JfU1RBVEVfTk9UQVRUQUNIRUQpOworCQl1c2Jfa2lja19raHViZCAoaGNkLT5zZWxmLnJvb3RfaHViKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmhjZF9yb290X2h1Yl9sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCAodXNiX2hjX2RpZWQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBoY2RfcmVsZWFzZSAoc3RydWN0IHVzYl9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCisJaGNkID0gY29udGFpbmVyX29mKGJ1cywgc3RydWN0IHVzYl9oY2QsIHNlbGYpOworCWtmcmVlKGhjZCk7Cit9CisKKy8qKgorICogdXNiX2NyZWF0ZV9oY2QgLSBjcmVhdGUgYW5kIGluaXRpYWxpemUgYW4gSENEIHN0cnVjdHVyZQorICogQGRyaXZlcjogSEMgZHJpdmVyIHRoYXQgd2lsbCB1c2UgdGhpcyBoY2QKKyAqIEBkZXY6IGRldmljZSBmb3IgdGhpcyBIQywgc3RvcmVkIGluIGhjZC0+c2VsZi5jb250cm9sbGVyCisgKiBAYnVzX25hbWU6IHZhbHVlIHRvIHN0b3JlIGluIGhjZC0+c2VsZi5idXNfbmFtZQorICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogQWxsb2NhdGUgYSBzdHJ1Y3QgdXNiX2hjZCwgd2l0aCBleHRyYSBzcGFjZSBhdCB0aGUgZW5kIGZvciB0aGUKKyAqIEhDIGRyaXZlcidzIHByaXZhdGUgZGF0YS4gIEluaXRpYWxpemUgdGhlIGdlbmVyaWMgbWVtYmVycyBvZiB0aGUKKyAqIGhjZCBzdHJ1Y3R1cmUuCisgKgorICogSWYgbWVtb3J5IGlzIHVuYXZhaWxhYmxlLCByZXR1cm5zIE5VTEwuCisgKi8KK3N0cnVjdCB1c2JfaGNkICp1c2JfY3JlYXRlX2hjZCAoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAorCQlzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1c19uYW1lKQoreworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisKKwloY2QgPSBrY2FsbG9jKDEsIHNpemVvZigqaGNkKSArIGRyaXZlci0+aGNkX3ByaXZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFoY2QpIHsKKwkJZGV2X2RiZyAoZGV2LCAiaGNkIGFsbG9jIGZhaWxlZFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBoY2QpOworCisJdXNiX2J1c19pbml0KCZoY2QtPnNlbGYpOworCWhjZC0+c2VsZi5vcCA9ICZ1c2JfaGNkX29wZXJhdGlvbnM7CisJaGNkLT5zZWxmLmhjcHJpdiA9IGhjZDsKKwloY2QtPnNlbGYucmVsZWFzZSA9ICZoY2RfcmVsZWFzZTsKKwloY2QtPnNlbGYuY29udHJvbGxlciA9IGRldjsKKwloY2QtPnNlbGYuYnVzX25hbWUgPSBidXNfbmFtZTsKKworCWluaXRfdGltZXIoJmhjZC0+cmhfdGltZXIpOworCisJaGNkLT5kcml2ZXIgPSBkcml2ZXI7CisJaGNkLT5wcm9kdWN0X2Rlc2MgPSAoZHJpdmVyLT5wcm9kdWN0X2Rlc2MpID8gZHJpdmVyLT5wcm9kdWN0X2Rlc2MgOgorCQkJIlVTQiBIb3N0IENvbnRyb2xsZXIiOworCisJcmV0dXJuIGhjZDsKK30KK0VYUE9SVF9TWU1CT0wgKHVzYl9jcmVhdGVfaGNkKTsKKwordm9pZCB1c2JfcHV0X2hjZCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlkZXZfc2V0X2RydmRhdGEoaGNkLT5zZWxmLmNvbnRyb2xsZXIsIE5VTEwpOworCXVzYl9idXNfcHV0KCZoY2QtPnNlbGYpOworfQorRVhQT1JUX1NZTUJPTCAodXNiX3B1dF9oY2QpOworCisvKioKKyAqIHVzYl9hZGRfaGNkIC0gZmluaXNoIGdlbmVyaWMgSENEIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0ZXIKKyAqIEBoY2Q6IHRoZSB1c2JfaGNkIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCisgKiBAaXJxbnVtOiBJbnRlcnJ1cHQgbGluZSB0byBhbGxvY2F0ZQorICogQGlycWZsYWdzOiBJbnRlcnJ1cHQgdHlwZSBmbGFncworICoKKyAqIEZpbmlzaCB0aGUgcmVtYWluaW5nIHBhcnRzIG9mIGdlbmVyaWMgSENEIGluaXRpYWxpemF0aW9uOiBhbGxvY2F0ZSB0aGUKKyAqIGJ1ZmZlcnMgb2YgY29uc2lzdGVudCBtZW1vcnksIHJlZ2lzdGVyIHRoZSBidXMsIHJlcXVlc3QgdGhlIElSUSBsaW5lLAorICogYW5kIGNhbGwgdGhlIGRyaXZlcidzIHJlc2V0KCkgYW5kIHN0YXJ0KCkgcm91dGluZXMuCisgKi8KK2ludCB1c2JfYWRkX2hjZChzdHJ1Y3QgdXNiX2hjZCAqaGNkLAorCQl1bnNpZ25lZCBpbnQgaXJxbnVtLCB1bnNpZ25lZCBsb25nIGlycWZsYWdzKQoreworCWludAlyZXR2YWw7CisKKwlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgIiVzXG4iLCBoY2QtPnByb2R1Y3RfZGVzYyk7CisKKwkvKiB0aWxsIG5vdyBIQyBoYXMgYmVlbiBpbiBhbiBpbmRldGVybWluYXRlIHN0YXRlIC4uLiAqLworCWlmIChoY2QtPmRyaXZlci0+cmVzZXQgJiYgKHJldHZhbCA9IGhjZC0+ZHJpdmVyLT5yZXNldChoY2QpKSA8IDApIHsKKwkJZGV2X2VycihoY2QtPnNlbGYuY29udHJvbGxlciwgImNhbid0IHJlc2V0XG4iKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlpZiAoKHJldHZhbCA9IGhjZF9idWZmZXJfY3JlYXRlKGhjZCkpICE9IDApIHsKKwkJZGV2X2RiZyhoY2QtPnNlbGYuY29udHJvbGxlciwgInBvb2wgYWxsb2MgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlpZiAoKHJldHZhbCA9IHVzYl9yZWdpc3Rlcl9idXMoJmhjZC0+c2VsZikpIDwgMCkKKwkJZ290byBlcnIxOworCisJaWYgKGhjZC0+ZHJpdmVyLT5pcnEpIHsKKwkJY2hhcglidWZbOF0sICpidWZwID0gYnVmOworCisjaWZkZWYgX19zcGFyY19fCisJCWJ1ZnAgPSBfX2lycV9pdG9hKGlycW51bSk7CisjZWxzZQorCQlzcHJpbnRmKGJ1ZiwgIiVkIiwgaXJxbnVtKTsKKyNlbmRpZgorCisJCXNucHJpbnRmKGhjZC0+aXJxX2Rlc2NyLCBzaXplb2YoaGNkLT5pcnFfZGVzY3IpLCAiJXM6dXNiJWQiLAorCQkJCWhjZC0+ZHJpdmVyLT5kZXNjcmlwdGlvbiwgaGNkLT5zZWxmLmJ1c251bSk7CisJCWlmICgocmV0dmFsID0gcmVxdWVzdF9pcnEoaXJxbnVtLCAmdXNiX2hjZF9pcnEsIGlycWZsYWdzLAorCQkJCWhjZC0+aXJxX2Rlc2NyLCBoY2QpKSAhPSAwKSB7CisJCQlkZXZfZXJyKGhjZC0+c2VsZi5jb250cm9sbGVyLAorCQkJCQkicmVxdWVzdCBpbnRlcnJ1cHQgJXMgZmFpbGVkXG4iLCBidWZwKTsKKwkJCWdvdG8gZXJyMjsKKwkJfQorCQloY2QtPmlycSA9IGlycW51bTsKKwkJZGV2X2luZm8oaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJpcnEgJXMsICVzIDB4JTA4bGx4XG4iLCBidWZwLAorCQkJCShoY2QtPmRyaXZlci0+ZmxhZ3MgJiBIQ0RfTUVNT1JZKSA/CisJCQkJCSJpbyBtZW0iIDogImlvIGJhc2UiLAorCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKWhjZC0+cnNyY19zdGFydCk7CisJfSBlbHNlIHsKKwkJaGNkLT5pcnEgPSAtMTsKKwkJaWYgKGhjZC0+cnNyY19zdGFydCkKKwkJCWRldl9pbmZvKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiJXMgMHglMDhsbHhcbiIsCisJCQkJCShoY2QtPmRyaXZlci0+ZmxhZ3MgJiBIQ0RfTUVNT1JZKSA/CisJCQkJCSJpbyBtZW0iIDogImlvIGJhc2UiLAorCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKWhjZC0+cnNyY19zdGFydCk7CisJfQorCisJaWYgKChyZXR2YWwgPSBoY2QtPmRyaXZlci0+c3RhcnQoaGNkKSkgPCAwKSB7CisJCWRldl9lcnIoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJzdGFydHVwIGVycm9yICVkXG4iLCByZXR2YWwpOworCQlnb3RvIGVycjM7CisJfQorCisJcmV0dXJuIHJldHZhbDsKKworIGVycjM6CisJaWYgKGhjZC0+aXJxID49IDApCisJCWZyZWVfaXJxKGlycW51bSwgaGNkKTsKKyBlcnIyOgorCXVzYl9kZXJlZ2lzdGVyX2J1cygmaGNkLT5zZWxmKTsKKyBlcnIxOgorCWhjZF9idWZmZXJfZGVzdHJveShoY2QpOworCXJldHVybiByZXR2YWw7Cit9IAorRVhQT1JUX1NZTUJPTCAodXNiX2FkZF9oY2QpOworCisvKioKKyAqIHVzYl9yZW1vdmVfaGNkIC0gc2h1dGRvd24gcHJvY2Vzc2luZyBmb3IgZ2VuZXJpYyBIQ0RzCisgKiBAaGNkOiB0aGUgdXNiX2hjZCBzdHJ1Y3R1cmUgdG8gcmVtb3ZlCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBEaXNjb25uZWN0cyB0aGUgcm9vdCBodWIsIHRoZW4gcmV2ZXJzZXMgdGhlIGVmZmVjdHMgb2YgdXNiX2FkZF9oY2QoKSwKKyAqIGludm9raW5nIHRoZSBIQ0QncyBzdG9wKCkgbWV0aG9kLgorICovCit2b2lkIHVzYl9yZW1vdmVfaGNkKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJZGV2X2luZm8oaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJyZW1vdmUsIHN0YXRlICV4XG4iLCBoY2QtPnN0YXRlKTsKKworCWlmIChIQ19JU19SVU5OSU5HIChoY2QtPnN0YXRlKSkKKwkJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1FVSUVTQ0lORzsKKworCWRldl9kYmcoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJyb290aHViIGdyYWNlZnVsIGRpc2Nvbm5lY3RcbiIpOworCXNwaW5fbG9ja19pcnEgKCZoY2Rfcm9vdF9odWJfbG9jayk7CisJaGNkLT5yaF9yZWdpc3RlcmVkID0gMDsKKwlzcGluX3VubG9ja19pcnEgKCZoY2Rfcm9vdF9odWJfbG9jayk7CisJdXNiX2Rpc2Nvbm5lY3QoJmhjZC0+c2VsZi5yb290X2h1Yik7CisKKwloY2QtPmRyaXZlci0+c3RvcChoY2QpOworCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9IQUxUOworCisJaWYgKGhjZC0+aXJxID49IDApCisJCWZyZWVfaXJxKGhjZC0+aXJxLCBoY2QpOworCXVzYl9kZXJlZ2lzdGVyX2J1cygmaGNkLT5zZWxmKTsKKwloY2RfYnVmZmVyX2Rlc3Ryb3koaGNkKTsKK30KK0VYUE9SVF9TWU1CT0wgKHVzYl9yZW1vdmVfaGNkKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9NT04pIHx8IGRlZmluZWQoQ09ORklHX1VTQl9NT05fTU9EVUxFKQorCitzdHJ1Y3QgdXNiX21vbl9vcGVyYXRpb25zICptb25fb3BzOworCisvKgorICogVGhlIHJlZ2lzdHJhdGlvbiBpcyB1bmxvY2tlZC4KKyAqIFdlIGRvIGl0IHRoaXMgd2F5IGJlY2F1c2Ugd2UgZG8gbm90IHdhbnQgdG8gbG9jayBpbiBob3QgcGF0aHMuCisgKgorICogTm90aWNlIHRoYXQgdGhlIGNvZGUgaXMgbWluaW1hbGx5IGVycm9yLXByb29mLiBCZWNhdXNlIHVzYm1vbiBuZWVkcworICogc3ltYm9scyBmcm9tIHVzYmNvcmUsIHVzYmNvcmUgZ2V0cyByZWZlcmVuY2VkIGFuZCBjYW5ub3QgYmUgdW5sb2FkZWQgZmlyc3QuCisgKi8KKyAKK2ludCB1c2JfbW9uX3JlZ2lzdGVyIChzdHJ1Y3QgdXNiX21vbl9vcGVyYXRpb25zICpvcHMpCit7CisKKwlpZiAobW9uX29wcykKKwkJcmV0dXJuIC1FQlVTWTsKKworCW1vbl9vcHMgPSBvcHM7CisJbWIoKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMICh1c2JfbW9uX3JlZ2lzdGVyKTsKKwordm9pZCB1c2JfbW9uX2RlcmVnaXN0ZXIgKHZvaWQpCit7CisKKwlpZiAobW9uX29wcyA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVVNCOiBtb25pdG9yIHdhcyBub3QgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybjsKKwl9CisJbW9uX29wcyA9IE5VTEw7CisJbWIoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMICh1c2JfbW9uX2RlcmVnaXN0ZXIpOworCisjZW5kaWYgLyogQ09ORklHX1VTQl9NT04gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmggYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNjI1YjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oCkBAIC0wLDAgKzEsNDc2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDIgYnkgRGF2aWQgQnJvd25lbGwKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qIFRoaXMgZmlsZSBjb250YWlucyBkZWNsYXJhdGlvbnMgb2YgdXNiY29yZSBpbnRlcm5hbHMgdGhhdCBhcmUgbW9zdGx5CisgKiB1c2VkIG9yIGV4cG9zZWQgYnkgSG9zdCBDb250cm9sbGVyIERyaXZlcnMuCisgKi8KKworLyoKKyAqIFVTQiBQYWNrZXQgSURzIChQSURzKQorICovCisjZGVmaW5lIFVTQl9QSURfVU5ERUZfMAkJCTB4ZjAKKyNkZWZpbmUgVVNCX1BJRF9PVVQJCQkweGUxCisjZGVmaW5lIFVTQl9QSURfQUNLCQkJMHhkMgorI2RlZmluZSBVU0JfUElEX0RBVEEwCQkJMHhjMworI2RlZmluZSBVU0JfUElEX1BJTkcJCQkweGI0CS8qIFVTQiAyLjAgKi8KKyNkZWZpbmUgVVNCX1BJRF9TT0YJCQkweGE1CisjZGVmaW5lIFVTQl9QSURfTllFVAkJCTB4OTYJLyogVVNCIDIuMCAqLworI2RlZmluZSBVU0JfUElEX0RBVEEyCQkJMHg4NwkvKiBVU0IgMi4wICovCisjZGVmaW5lIFVTQl9QSURfU1BMSVQJCQkweDc4CS8qIFVTQiAyLjAgKi8KKyNkZWZpbmUgVVNCX1BJRF9JTgkJCTB4NjkKKyNkZWZpbmUgVVNCX1BJRF9OQUsJCQkweDVhCisjZGVmaW5lIFVTQl9QSURfREFUQTEJCQkweDRiCisjZGVmaW5lIFVTQl9QSURfUFJFQU1CTEUJCTB4M2MJLyogVG9rZW4gbW9kZSAqLworI2RlZmluZSBVU0JfUElEX0VSUgkJCTB4M2MJLyogVVNCIDIuMDogaGFuZHNoYWtlIG1vZGUgKi8KKyNkZWZpbmUgVVNCX1BJRF9TRVRVUAkJCTB4MmQKKyNkZWZpbmUgVVNCX1BJRF9TVEFMTAkJCTB4MWUKKyNkZWZpbmUgVVNCX1BJRF9NREFUQQkJCTB4MGYJLyogVVNCIDIuMCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXIgKHVzYl9oY2QpIGZyYW1ld29yaworICoKKyAqIFNpbmNlICJzdHJ1Y3QgdXNiX2J1cyIgaXMgc28gdGhpbiwgeW91IGNhbid0IHNoYXJlIG11Y2ggY29kZSBpbiBpdC4KKyAqIFRoaXMgZnJhbWV3b3JrIGlzIGEgbGF5ZXIgb3ZlciB0aGF0LCBhbmQgc2hvdWxkIGJlIG1vcmUgc2hhcmFibGUuCisgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RydWN0IHVzYl9oY2QgewkvKiB1c2JfYnVzLmhjcHJpdiBwb2ludHMgdG8gdGhpcyAqLworCisJLyoKKwkgKiBob3VzZWtlZXBpbmcKKwkgKi8KKwlzdHJ1Y3QgdXNiX2J1cwkJc2VsZjsJCS8qIGhjZCBpcy1hIGJ1cyAqLworCisJY29uc3QgY2hhcgkJKnByb2R1Y3RfZGVzYzsJLyogcHJvZHVjdC92ZW5kb3Igc3RyaW5nICovCisJY2hhcgkJCWlycV9kZXNjclsyNF07CS8qIGRyaXZlciArIGJ1cyAjICovCisKKwlzdHJ1Y3QgdGltZXJfbGlzdAlyaF90aW1lcjsJLyogZHJpdmVzIHJvb3QgaHViICovCisKKwkvKgorCSAqIGhhcmR3YXJlIGluZm8vc3RhdGUKKwkgKi8KKwljb25zdCBzdHJ1Y3QgaGNfZHJpdmVyCSpkcml2ZXI7CS8qIGh3LXNwZWNpZmljIGhvb2tzICovCisJdW5zaWduZWQJCXNhd19pcnEgOiAxOworCXVuc2lnbmVkCQljYW5fd2FrZXVwOjE7CS8qIGh3IHN1cHBvcnRzIHdha2V1cD8gKi8KKwl1bnNpZ25lZAkJcmVtb3RlX3dha2V1cDoxOy8qIHN3IHNob3VsZCB1c2Ugd2FrZXVwPyAqLworCXVuc2lnbmVkCQlyaF9yZWdpc3RlcmVkOjE7LyogaXMgcm9vdCBodWIgcmVnaXN0ZXJlZD8gKi8KKworCWludAkJCWlycTsJCS8qIGlycSBhbGxvY2F0ZWQgKi8KKwl2b2lkIF9faW9tZW0JCSpyZWdzOwkJLyogZGV2aWNlIG1lbW9yeS9pbyAqLworCXU2NAkJCXJzcmNfc3RhcnQ7CS8qIG1lbW9yeS9pbyByZXNvdXJjZSBzdGFydCAqLworCXU2NAkJCXJzcmNfbGVuOwkvKiBtZW1vcnkvaW8gcmVzb3VyY2UgbGVuZ3RoICovCisKKyNkZWZpbmUgSENEX0JVRkZFUl9QT09MUwk0CisJc3RydWN0IGRtYV9wb29sCQkqcG9vbCBbSENEX0JVRkZFUl9QT09MU107CisKKwlpbnQJCQlzdGF0ZTsKKyMJZGVmaW5lCV9fQUNUSVZFCQkweDAxCisjCWRlZmluZQlfX1NVU1BFTkQJCTB4MDQKKyMJZGVmaW5lCV9fVFJBTlNJRU5UCQkweDgwCisKKyMJZGVmaW5lCUhDX1NUQVRFX0hBTFQJCTAKKyMJZGVmaW5lCUhDX1NUQVRFX1JVTk5JTkcJKF9fQUNUSVZFKQorIwlkZWZpbmUJSENfU1RBVEVfUVVJRVNDSU5HCShfX1NVU1BFTkR8X19UUkFOU0lFTlR8X19BQ1RJVkUpCisjCWRlZmluZQlIQ19TVEFURV9SRVNVTUlORwkoX19TVVNQRU5EfF9fVFJBTlNJRU5UKQorIwlkZWZpbmUJSENfU1RBVEVfU1VTUEVOREVECShfX1NVU1BFTkQpCisKKyNkZWZpbmUJSENfSVNfUlVOTklORyhzdGF0ZSkgKChzdGF0ZSkgJiBfX0FDVElWRSkKKyNkZWZpbmUJSENfSVNfU1VTUEVOREVEKHN0YXRlKSAoKHN0YXRlKSAmIF9fU1VTUEVORCkKKworCS8qIG1vcmUgc2hhcmVkIHF1ZXVpbmcgY29kZSB3b3VsZCBiZSBnb29kOyBpdCBzaG91bGQgc3VwcG9ydAorCSAqIHNtYXJ0ZXIgc2NoZWR1bGluZywgaGFuZGxlIHRyYW5zYWN0aW9uIHRyYW5zbGF0b3JzLCBldGM7CisJICogaW5wdXQgc2l6ZSBvZiBwZXJpb2RpYyB0YWJsZSB0byBhbiBpbnRlcnJ1cHQgc2NoZWR1bGVyLiAKKwkgKiAob2hjaSAzMiwgdWhjaSAxMDI0LCBlaGNpIDI1Ni81MTIvMTAyNCkuCisJICovCisKKwkvKiBUaGUgSEMgZHJpdmVyJ3MgcHJpdmF0ZSBkYXRhIGlzIHN0b3JlZCBhdCB0aGUgZW5kIG9mCisJICogdGhpcyBzdHJ1Y3R1cmUuCisJICovCisJdW5zaWduZWQgbG9uZyBoY2RfcHJpdlswXQorCQkJX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKHNpemVvZih1bnNpZ25lZCBsb25nKSkpKTsKK307CisKKy8qIDIuNCBkb2VzIHRoaXMgYSBiaXQgZGlmZmVyZW50bHkgLi4uICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2JfYnVzICpoY2RfdG9fYnVzIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXJldHVybiAmaGNkLT5zZWxmOworfQorCisKKy8vIHVyYi5oY3ByaXYgaXMgcmVhbGx5IGhhcmR3YXJlLXNwZWNpZmljCisKK3N0cnVjdCBoY2RfdGltZW91dCB7CS8qIHRpbWVvdXRzIHdlIGFsbG9jYXRlICovCisJc3RydWN0IGxpc3RfaGVhZAl0aW1lb3V0X2xpc3Q7CisJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7Cit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogRklYTUUgdXNiX29wZXJhdGlvbnMgc2hvdWxkIHZhbmlzaCBvciBiZWNvbWUgaGNfZHJpdmVyLAorICogd2hlbiB1c2JfYnVzIGFuZCB1c2JfaGNkIGJlY29tZSB0aGUgc2FtZSB0aGluZy4KKyAqLworCitzdHJ1Y3QgdXNiX29wZXJhdGlvbnMgeworCWludCAoKmdldF9mcmFtZV9udW1iZXIpIChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2Rldik7CisJaW50ICgqc3VibWl0X3VyYikgKHN0cnVjdCB1cmIgKnVyYiwgaW50IG1lbV9mbGFncyk7CisJaW50ICgqdW5saW5rX3VyYikgKHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cyk7CisKKwkvKiBhbGxvY2F0ZSBkbWEtY29uc2lzdGVudCBidWZmZXIgZm9yIFVSQl9ETUFfTk9NQVBQSU5HICovCisJdm9pZCAqKCpidWZmZXJfYWxsb2MpKHN0cnVjdCB1c2JfYnVzICpidXMsIHNpemVfdCBzaXplLAorCQkJaW50IG1lbV9mbGFncywKKwkJCWRtYV9hZGRyX3QgKmRtYSk7CisJdm9pZCAoKmJ1ZmZlcl9mcmVlKShzdHJ1Y3QgdXNiX2J1cyAqYnVzLCBzaXplX3Qgc2l6ZSwKKwkJCXZvaWQgKmFkZHIsIGRtYV9hZGRyX3QgZG1hKTsKKworCXZvaWQgKCpkaXNhYmxlKShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXApOworCisJLyogZ2xvYmFsIHN1c3BlbmQvcmVzdW1lIG9mIGJ1cyAqLworCWludCAoKmh1Yl9zdXNwZW5kKShzdHJ1Y3QgdXNiX2J1cyAqKTsKKwlpbnQgKCpodWJfcmVzdW1lKShzdHJ1Y3QgdXNiX2J1cyAqKTsKK307CisKKy8qIGVhY2ggZHJpdmVyIHByb3ZpZGVzIG9uZSBvZiB0aGVzZSwgYW5kIGhhcmR3YXJlIGluaXQgc3VwcG9ydCAqLworCitzdHJ1Y3QgcHRfcmVnczsKKworc3RydWN0IGhjX2RyaXZlciB7CisJY29uc3QgY2hhcgkqZGVzY3JpcHRpb247CS8qICJlaGNpLWhjZCIgZXRjICovCisJY29uc3QgY2hhcgkqcHJvZHVjdF9kZXNjOwkvKiBwcm9kdWN0L3ZlbmRvciBzdHJpbmcgKi8KKwlzaXplX3QJCWhjZF9wcml2X3NpemU7CS8qIHNpemUgb2YgcHJpdmF0ZSBkYXRhICovCisKKwkvKiBpcnEgaGFuZGxlciAqLworCWlycXJldHVybl90CSgqaXJxKSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisJaW50CWZsYWdzOworI2RlZmluZQlIQ0RfTUVNT1JZCTB4MDAwMQkJLyogSEMgcmVncyB1c2UgbWVtb3J5IChlbHNlIEkvTykgKi8KKyNkZWZpbmUJSENEX1VTQjExCTB4MDAxMAkJLyogVVNCIDEuMSAqLworI2RlZmluZQlIQ0RfVVNCMgkweDAwMjAJCS8qIFVTQiAyLjAgKi8KKworCS8qIGNhbGxlZCB0byBpbml0IEhDRCBhbmQgcm9vdCBodWIgKi8KKwlpbnQJKCpyZXNldCkgKHN0cnVjdCB1c2JfaGNkICpoY2QpOworCWludAkoKnN0YXJ0KSAoc3RydWN0IHVzYl9oY2QgKmhjZCk7CisKKwkvKiBOT1RFOiAgdGhlc2Ugc3VzcGVuZC9yZXN1bWUgY2FsbHMgcmVsYXRlIHRvIHRoZSBIQyBhcworCSAqIGEgd2hvbGUsIG5vdCBqdXN0IHRoZSByb290IGh1YjsgdGhleSdyZSBmb3IgYnVzIGdsdWUuCisJICovCisJLyogY2FsbGVkIGFmdGVyIGFsbCBkZXZpY2VzIHdlcmUgc3VzcGVuZGVkICovCisJaW50CSgqc3VzcGVuZCkgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHUzMiBzdGF0ZSk7CisKKwkvKiBjYWxsZWQgYmVmb3JlIGFueSBkZXZpY2VzIGdldCByZXN1bWVkICovCisJaW50CSgqcmVzdW1lKSAoc3RydWN0IHVzYl9oY2QgKmhjZCk7CisKKwkvKiBjbGVhbmx5IG1ha2UgSENEIHN0b3Agd3JpdGluZyBtZW1vcnkgYW5kIGRvaW5nIEkvTyAqLworCXZvaWQJKCpzdG9wKSAoc3RydWN0IHVzYl9oY2QgKmhjZCk7CisKKwkvKiByZXR1cm4gY3VycmVudCBmcmFtZSBudW1iZXIgKi8KKwlpbnQJKCpnZXRfZnJhbWVfbnVtYmVyKSAoc3RydWN0IHVzYl9oY2QgKmhjZCk7CisKKwkvKiBtYW5hZ2UgaS9vIHJlcXVlc3RzLCBkZXZpY2Ugc3RhdGUgKi8KKwlpbnQJKCp1cmJfZW5xdWV1ZSkgKHN0cnVjdCB1c2JfaGNkICpoY2QsCisJCQkJCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXAsCisJCQkJCXN0cnVjdCB1cmIgKnVyYiwKKwkJCQkJaW50IG1lbV9mbGFncyk7CisJaW50CSgqdXJiX2RlcXVldWUpIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIpOworCisJLyogaHcgc3luY2gsIGZyZWVpbmcgZW5kcG9pbnQgcmVzb3VyY2VzIHRoYXQgdXJiX2RlcXVldWUgY2FuJ3QgKi8KKwl2b2lkIAkoKmVuZHBvaW50X2Rpc2FibGUpKHN0cnVjdCB1c2JfaGNkICpoY2QsCisJCQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKTsKKworCS8qIHJvb3QgaHViIHN1cHBvcnQgKi8KKwlpbnQJCSgqaHViX3N0YXR1c19kYXRhKSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgY2hhciAqYnVmKTsKKwlpbnQJCSgqaHViX2NvbnRyb2wpIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLAorCQkJCXUxNiB0eXBlUmVxLCB1MTYgd1ZhbHVlLCB1MTYgd0luZGV4LAorCQkJCWNoYXIgKmJ1ZiwgdTE2IHdMZW5ndGgpOworCWludAkJKCpodWJfc3VzcGVuZCkoc3RydWN0IHVzYl9oY2QgKik7CisJaW50CQkoKmh1Yl9yZXN1bWUpKHN0cnVjdCB1c2JfaGNkICopOworCWludAkJKCpzdGFydF9wb3J0X3Jlc2V0KShzdHJ1Y3QgdXNiX2hjZCAqLCB1bnNpZ25lZCBwb3J0X251bSk7Cit9OworCitleHRlcm4gdm9pZCB1c2JfaGNkX2dpdmViYWNrX3VyYiAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK2V4dGVybiBzdHJ1Y3QgdXNiX2hjZCAqdXNiX2NyZWF0ZV9oY2QgKGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlciwKKwkJc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidXNfbmFtZSk7CitleHRlcm4gdm9pZCB1c2JfcHV0X2hjZCAoc3RydWN0IHVzYl9oY2QgKmhjZCk7CitleHRlcm4gaW50IHVzYl9hZGRfaGNkKHN0cnVjdCB1c2JfaGNkICpoY2QsCisJCXVuc2lnbmVkIGludCBpcnFudW0sIHVuc2lnbmVkIGxvbmcgaXJxZmxhZ3MpOworZXh0ZXJuIHZvaWQgdXNiX3JlbW92ZV9oY2Qoc3RydWN0IHVzYl9oY2QgKmhjZCk7CisKKyNpZmRlZiBDT05GSUdfUENJCitzdHJ1Y3QgcGNpX2RldjsKK3N0cnVjdCBwY2lfZGV2aWNlX2lkOworZXh0ZXJuIGludCB1c2JfaGNkX3BjaV9wcm9iZSAoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpOworZXh0ZXJuIHZvaWQgdXNiX2hjZF9wY2lfcmVtb3ZlIChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKworI2lmZGVmIENPTkZJR19QTQorZXh0ZXJuIGludCB1c2JfaGNkX3BjaV9zdXNwZW5kIChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MzIgc3RhdGUpOworZXh0ZXJuIGludCB1c2JfaGNkX3BjaV9yZXN1bWUgKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworI2VuZGlmIC8qIENPTkZJR19QTSAqLworCisjZW5kaWYgLyogQ09ORklHX1BDSSAqLworCisvKiBwY2ktaXNoIChwZGV2IG51bGwgaXMgb2spIGJ1ZmZlciBhbGxvYy9tYXBwaW5nIHN1cHBvcnQgKi8KK2ludCBoY2RfYnVmZmVyX2NyZWF0ZSAoc3RydWN0IHVzYl9oY2QgKmhjZCk7Cit2b2lkIGhjZF9idWZmZXJfZGVzdHJveSAoc3RydWN0IHVzYl9oY2QgKmhjZCk7CisKK3ZvaWQgKmhjZF9idWZmZXJfYWxsb2MgKHN0cnVjdCB1c2JfYnVzICpidXMsIHNpemVfdCBzaXplLAorCWludCBtZW1fZmxhZ3MsIGRtYV9hZGRyX3QgKmRtYSk7Cit2b2lkIGhjZF9idWZmZXJfZnJlZSAoc3RydWN0IHVzYl9idXMgKmJ1cywgc2l6ZV90IHNpemUsCisJdm9pZCAqYWRkciwgZG1hX2FkZHJfdCBkbWEpOworCisvKiBnZW5lcmljIGJ1cyBnbHVlLCBuZWVkZWQgZm9yIGhvc3QgY29udHJvbGxlcnMgdGhhdCBkb24ndCB1c2UgUENJICovCitleHRlcm4gaXJxcmV0dXJuX3QgdXNiX2hjZF9pcnEgKGludCBpcnEsIHZvaWQgKl9faGNkLCBzdHJ1Y3QgcHRfcmVncyAqcik7CitleHRlcm4gdm9pZCB1c2JfaGNfZGllZCAoc3RydWN0IHVzYl9oY2QgKmhjZCk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEVudW1lcmF0aW9uIGlzIG9ubHkgZm9yIHRoZSBodWIgZHJpdmVyLCBvciBIQ0QgdmlydHVhbCByb290IGh1YnMgKi8KK2V4dGVybiBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2FsbG9jX2RldihzdHJ1Y3QgdXNiX2RldmljZSAqcGFyZW50LAorCQkJCQlzdHJ1Y3QgdXNiX2J1cyAqLCB1bnNpZ25lZCBwb3J0KTsKK2V4dGVybiBpbnQgdXNiX25ld19kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCB1c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2RldmljZSAqKik7CisKK2V4dGVybiBpbnQgdXNiX2dldF9jb25maWd1cmF0aW9uKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgdXNiX2Rlc3Ryb3lfY29uZmlndXJhdGlvbihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEhDRCBSb290IEh1YiBzdXBwb3J0CisgKi8KKworI2luY2x1ZGUgImh1Yi5oIgorCisvKiAoc2hpZnRlZCkgZGlyZWN0aW9uL3R5cGUvcmVjaXBpZW50IGZyb20gdGhlIFVTQiAyLjAgc3BlYywgdGFibGUgOS4yICovCisjZGVmaW5lIERldmljZVJlcXVlc3QgXAorCSgoVVNCX0RJUl9JTnxVU0JfVFlQRV9TVEFOREFSRHxVU0JfUkVDSVBfREVWSUNFKTw8OCkKKyNkZWZpbmUgRGV2aWNlT3V0UmVxdWVzdCBcCisJKChVU0JfRElSX09VVHxVU0JfVFlQRV9TVEFOREFSRHxVU0JfUkVDSVBfREVWSUNFKTw8OCkKKworI2RlZmluZSBJbnRlcmZhY2VSZXF1ZXN0IFwKKwkoKFVTQl9ESVJfSU58VVNCX1RZUEVfU1RBTkRBUkR8VVNCX1JFQ0lQX0lOVEVSRkFDRSk8PDgpCisKKyNkZWZpbmUgRW5kcG9pbnRSZXF1ZXN0IFwKKwkoKFVTQl9ESVJfSU58VVNCX1RZUEVfU1RBTkRBUkR8VVNCX1JFQ0lQX0lOVEVSRkFDRSk8PDgpCisjZGVmaW5lIEVuZHBvaW50T3V0UmVxdWVzdCBcCisJKChVU0JfRElSX09VVHxVU0JfVFlQRV9TVEFOREFSRHxVU0JfUkVDSVBfSU5URVJGQUNFKTw8OCkKKworLyogY2xhc3MgcmVxdWVzdHMgZnJvbSB0aGUgVVNCIDIuMCBodWIgc3BlYywgdGFibGUgMTEtMTUgKi8KKy8qIEdldEJ1c1N0YXRlIGFuZCBTZXRIdWJEZXNjcmlwdG9yIGFyZSBvcHRpb25hbCwgb21pdHRlZCAqLworI2RlZmluZSBDbGVhckh1YkZlYXR1cmUJCSgweDIwMDAgfCBVU0JfUkVRX0NMRUFSX0ZFQVRVUkUpCisjZGVmaW5lIENsZWFyUG9ydEZlYXR1cmUJKDB4MjMwMCB8IFVTQl9SRVFfQ0xFQVJfRkVBVFVSRSkKKyNkZWZpbmUgR2V0SHViRGVzY3JpcHRvcgkoMHhhMDAwIHwgVVNCX1JFUV9HRVRfREVTQ1JJUFRPUikKKyNkZWZpbmUgR2V0SHViU3RhdHVzCQkoMHhhMDAwIHwgVVNCX1JFUV9HRVRfU1RBVFVTKQorI2RlZmluZSBHZXRQb3J0U3RhdHVzCQkoMHhhMzAwIHwgVVNCX1JFUV9HRVRfU1RBVFVTKQorI2RlZmluZSBTZXRIdWJGZWF0dXJlCQkoMHgyMDAwIHwgVVNCX1JFUV9TRVRfRkVBVFVSRSkKKyNkZWZpbmUgU2V0UG9ydEZlYXR1cmUJCSgweDIzMDAgfCBVU0JfUkVRX1NFVF9GRUFUVVJFKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBHZW5lcmljIGJhbmR3aWR0aCBhbGxvY2F0aW9uIGNvbnN0YW50cy9zdXBwb3J0CisgKi8KKyNkZWZpbmUgRlJBTUVfVElNRV9VU0VDUwkxMDAwTAorI2RlZmluZSBCaXRUaW1lKGJ5dGVjb3VudCkgICg3ICogOCAqIGJ5dGVjb3VudCAvIDYpICAvKiB3aXRoIGludGVnZXIgdHJ1bmNhdGlvbiAqLworCQkvKiBUcnlpbmcgbm90IHRvIHVzZSB3b3JzdC1jYXNlIGJpdC1zdHVmZmluZworICAgICAgICAgICAgICAgICAgIG9mICg3LzYgKiA4ICogYnl0ZWNvdW50KSA9IDkuMzMgKiBieXRlY291bnQgKi8KKwkJLyogYnl0ZWNvdW50ID0gZGF0YSBwYXlsb2FkIGJ5dGUgY291bnQgKi8KKworI2RlZmluZSBOU19UT19VUyhucykJKChucyArIDUwMEwpIC8gMTAwMEwpCisJCQkvKiBjb252ZXJ0ICYgcm91bmQgbmFub3NlY29uZHMgdG8gbWljcm9zZWNvbmRzICovCisKK2V4dGVybiB2b2lkIHVzYl9jbGFpbV9iYW5kd2lkdGggKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHN0cnVjdCB1cmIgKnVyYiwKKwkJaW50IGJ1c3RpbWUsIGludCBpc29jKTsKK2V4dGVybiB2b2lkIHVzYl9yZWxlYXNlX2JhbmR3aWR0aCAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgc3RydWN0IHVyYiAqdXJiLAorCQlpbnQgaXNvYyk7CisKKy8qCisgKiBGdWxsL2xvdyBzcGVlZCBiYW5kd2lkdGggYWxsb2NhdGlvbiBjb25zdGFudHMvc3VwcG9ydC4KKyAqLworI2RlZmluZSBCV19IT1NUX0RFTEFZCTEwMDBMCQkvKiBuYW5vc2Vjb25kcyAqLworI2RlZmluZSBCV19IVUJfTFNfU0VUVVAJMzMzTAkJLyogbmFub3NlY29uZHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQgZnVsbC1zcGVlZCBiaXQgdGltZXMgKGVzdC4pICovCisKKyNkZWZpbmUgRlJBTUVfVElNRV9CSVRTICAgICAgICAgMTIwMDBMCQkvKiBmcmFtZSA9IDEgbWlsbGlzZWNvbmQgKi8KKyNkZWZpbmUgRlJBTUVfVElNRV9NQVhfQklUU19BTExPQwkoOTBMICogRlJBTUVfVElNRV9CSVRTIC8gMTAwTCkKKyNkZWZpbmUgRlJBTUVfVElNRV9NQVhfVVNFQ1NfQUxMT0MJKDkwTCAqIEZSQU1FX1RJTUVfVVNFQ1MgLyAxMDBMKQorCitleHRlcm4gaW50IHVzYl9jaGVja19iYW5kd2lkdGggKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHN0cnVjdCB1cmIgKnVyYik7CisKKy8qCisgKiBDZWlsaW5nIG1pY3Jvc2Vjb25kcyAodHlwaWNhbCkgZm9yIHRoYXQgbWFueSBieXRlcyBhdCBoaWdoIHNwZWVkCisgKiBJU08gaXMgYSBiaXQgbGVzcywgbm8gQUNLIC4uLiBmcm9tIFVTQiAyLjAgc3BlYywgNS4xMS4zIChhbmQgbmVlZGVkCisgKiB0byBwcmVhbGxvY2F0ZSBiYW5kd2lkdGgpCisgKi8KKyNkZWZpbmUgVVNCMl9IT1NUX0RFTEFZCTUJLyogbnNlYywgZ3Vlc3MgKi8KKyNkZWZpbmUgSFNfVVNFQ1MoYnl0ZXMpIE5TX1RPX1VTICggKCg1NSAqIDggKiAyMDgzKS8xMDAwKSBcCisJKyAoKDIwODNVTCAqICgzMTY3ICsgQml0VGltZSAoYnl0ZXMpKSkvMTAwMCkgXAorCSsgVVNCMl9IT1NUX0RFTEFZKQorI2RlZmluZSBIU19VU0VDU19JU08oYnl0ZXMpIE5TX1RPX1VTICggKCgzOCAqIDggKiAyMDgzKS8xMDAwKSBcCisJKyAoKDIwODNVTCAqICgzMTY3ICsgQml0VGltZSAoYnl0ZXMpKSkvMTAwMCkgXAorCSsgVVNCMl9IT1NUX0RFTEFZKQorCitleHRlcm4gbG9uZyB1c2JfY2FsY19idXNfdGltZSAoaW50IHNwZWVkLCBpbnQgaXNfaW5wdXQsCisJCQlpbnQgaXNvYywgaW50IGJ5dGVjb3VudCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2V4dGVybiBzdHJ1Y3QgdXNiX2J1cyAqdXNiX2FsbG9jX2J1cyAoc3RydWN0IHVzYl9vcGVyYXRpb25zICopOworCitleHRlcm4gaW50IHVzYl9oY2RfcmVnaXN0ZXJfcm9vdF9odWIgKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LAorCQlzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKworZXh0ZXJuIHZvaWQgdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIgKHN0cnVjdCB1c2JfaGNkICpoY2QpOworCitleHRlcm4gdm9pZCB1c2Jfc2V0X2RldmljZV9zdGF0ZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJZW51bSB1c2JfZGV2aWNlX3N0YXRlIG5ld19zdGF0ZSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGV4cG9ydGVkIG9ubHkgd2l0aGluIHVzYmNvcmUgKi8KKworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdXNiX2J1c19saXN0OworZXh0ZXJuIHN0cnVjdCBzZW1hcGhvcmUgdXNiX2J1c19saXN0X2xvY2s7CitleHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgdXNiX2tpbGxfdXJiX3F1ZXVlOworCitleHRlcm4gc3RydWN0IHVzYl9idXMgKnVzYl9idXNfZ2V0IChzdHJ1Y3QgdXNiX2J1cyAqYnVzKTsKK2V4dGVybiB2b2lkIHVzYl9idXNfcHV0IChzdHJ1Y3QgdXNiX2J1cyAqYnVzKTsKKworZXh0ZXJuIGludCB1c2JfZmluZF9pbnRlcmZhY2VfZHJpdmVyIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOworCisjZGVmaW5lIHVzYl9lbmRwb2ludF9vdXQoZXBfZGlyKQkoISgoZXBfZGlyKSAmIFVTQl9ESVJfSU4pKQorCisvKgorICogVVNCIGRldmljZSBmcyBzdHVmZgorICovCisKKyNpZmRlZiBDT05GSUdfVVNCX0RFVklDRUZTCisKKy8qCisgKiB0aGVzZSBhcmUgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGZyb20gdGhlIFVTQiBjb3JlL2h1YiB0aHJlYWQKKyAqIHdpdGggdGhlIGtlcm5lbCBsb2NrIGhlbGQKKyAqLworZXh0ZXJuIHZvaWQgdXNiZnNfYWRkX2J1cyhzdHJ1Y3QgdXNiX2J1cyAqYnVzKTsKK2V4dGVybiB2b2lkIHVzYmZzX3JlbW92ZV9idXMoc3RydWN0IHVzYl9idXMgKmJ1cyk7CitleHRlcm4gdm9pZCB1c2Jmc19hZGRfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgdXNiZnNfcmVtb3ZlX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHVzYmZzX3VwZGF0ZV9zcGVjaWFsICh2b2lkKTsKKworZXh0ZXJuIGludCB1c2Jmc19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgdXNiZnNfY2xlYW51cCh2b2lkKTsKKworI2Vsc2UgLyogQ09ORklHX1VTQl9ERVZJQ0VGUyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgdXNiZnNfYWRkX2J1cyhzdHJ1Y3QgdXNiX2J1cyAqYnVzKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHVzYmZzX3JlbW92ZV9idXMoc3RydWN0IHVzYl9idXMgKmJ1cykge30KK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jmc19hZGRfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgdXNiZnNfcmVtb3ZlX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KSB7fQorc3RhdGljIGlubGluZSB2b2lkIHVzYmZzX3VwZGF0ZV9zcGVjaWFsICh2b2lkKSB7fQorCitzdGF0aWMgaW5saW5lIGludCB1c2Jmc19pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jmc19jbGVhbnVwKHZvaWQpIHsgfQorCisjZW5kaWYgLyogQ09ORklHX1VTQl9ERVZJQ0VGUyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX01PTikgfHwgZGVmaW5lZChDT05GSUdfVVNCX01PTl9NT0RVTEUpCisKK3N0cnVjdCB1c2JfbW9uX29wZXJhdGlvbnMgeworCXZvaWQgKCp1cmJfc3VibWl0KShzdHJ1Y3QgdXNiX2J1cyAqYnVzLCBzdHJ1Y3QgdXJiICp1cmIpOworCXZvaWQgKCp1cmJfc3VibWl0X2Vycm9yKShzdHJ1Y3QgdXNiX2J1cyAqYnVzLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBlcnIpOworCXZvaWQgKCp1cmJfY29tcGxldGUpKHN0cnVjdCB1c2JfYnVzICpidXMsIHN0cnVjdCB1cmIgKnVyYik7CisJLyogdm9pZCAoKnVyYl91bmxpbmspKHN0cnVjdCB1c2JfYnVzICpidXMsIHN0cnVjdCB1cmIgKnVyYik7ICovCisJdm9pZCAoKmJ1c19hZGQpKHN0cnVjdCB1c2JfYnVzICpidXMpOworCXZvaWQgKCpidXNfcmVtb3ZlKShzdHJ1Y3QgdXNiX2J1cyAqYnVzKTsKK307CisKK2V4dGVybiBzdHJ1Y3QgdXNiX21vbl9vcGVyYXRpb25zICptb25fb3BzOworCitzdGF0aWMgaW5saW5lIHZvaWQgdXNibW9uX3VyYl9zdWJtaXQoc3RydWN0IHVzYl9idXMgKmJ1cywgc3RydWN0IHVyYiAqdXJiKQoreworCWlmIChidXMtPm1vbml0b3JlZCkKKwkJKCptb25fb3BzLT51cmJfc3VibWl0KShidXMsIHVyYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jtb25fdXJiX3N1Ym1pdF9lcnJvcihzdHJ1Y3QgdXNiX2J1cyAqYnVzLCBzdHJ1Y3QgdXJiICp1cmIsCisgICAgaW50IGVycm9yKQoreworCWlmIChidXMtPm1vbml0b3JlZCkKKwkJKCptb25fb3BzLT51cmJfc3VibWl0X2Vycm9yKShidXMsIHVyYiwgZXJyb3IpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXNibW9uX3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXNiX2J1cyAqYnVzLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJaWYgKGJ1cy0+bW9uaXRvcmVkKQorCQkoKm1vbl9vcHMtPnVyYl9jb21wbGV0ZSkoYnVzLCB1cmIpOworfQorIAorc3RhdGljIGlubGluZSB2b2lkIHVzYm1vbl9ub3RpZnlfYnVzX2FkZChzdHJ1Y3QgdXNiX2J1cyAqYnVzKQoreworCWlmIChtb25fb3BzKQorCQkoKm1vbl9vcHMtPmJ1c19hZGQpKGJ1cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jtb25fbm90aWZ5X2J1c19yZW1vdmUoc3RydWN0IHVzYl9idXMgKmJ1cykKK3sKKwlpZiAobW9uX29wcykKKwkJKCptb25fb3BzLT5idXNfcmVtb3ZlKShidXMpOworfQorCitpbnQgdXNiX21vbl9yZWdpc3RlcihzdHJ1Y3QgdXNiX21vbl9vcGVyYXRpb25zICpvcHMpOwordm9pZCB1c2JfbW9uX2RlcmVnaXN0ZXIodm9pZCk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jtb25fdXJiX3N1Ym1pdChzdHJ1Y3QgdXNiX2J1cyAqYnVzLCBzdHJ1Y3QgdXJiICp1cmIpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgdXNibW9uX3VyYl9zdWJtaXRfZXJyb3Ioc3RydWN0IHVzYl9idXMgKmJ1cywgc3RydWN0IHVyYiAqdXJiLAorICAgIGludCBlcnJvcikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jtb25fdXJiX2NvbXBsZXRlKHN0cnVjdCB1c2JfYnVzICpidXMsIHN0cnVjdCB1cmIgKnVyYikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jtb25fbm90aWZ5X2J1c19hZGQoc3RydWN0IHVzYl9idXMgKmJ1cykge30KK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jtb25fbm90aWZ5X2J1c19yZW1vdmUoc3RydWN0IHVzYl9idXMgKmJ1cykge30KKworI2VuZGlmIC8qIENPTkZJR19VU0JfTU9OICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGh1Yi5oIC4uLiBEZXZpY2VSZW1vdmFibGUgaW4gMi40LjItYWMxMSwgZ29uZSBpbiAyLjQuMTAgKi8KKy8vIGJsZWVjaCAtLSByZXN1cmZhY2VkIGluIDIuNC4xMSBvciAyLjQuMTIKKyNkZWZpbmUgYml0bWFwIAlEZXZpY2VSZW1vdmFibGUKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiByYW5kb20gc3R1ZmYgKi8KKworI2RlZmluZQlSVU5fQ09OVEVYVCAoaW5faXJxICgpID8gImluX2lycSIgXAorCQk6IChpbl9pbnRlcnJ1cHQgKCkgPyAiaW5faW50ZXJydXB0IiA6ICJjYW4gc2xlZXAiKSkKKworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTBkYzRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpAQCAtMCwwICsxLDMwNTcgQEAKKy8qCisgKiBVU0IgaHViIGRyaXZlci4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgTGludXMgVG9ydmFsZHMKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBKb2hhbm5lcyBFcmRmZWx0CisgKiAoQykgQ29weXJpZ2h0IDE5OTkgR3JlZ29yeSBQLiBTbWl0aAorICogKEMpIENvcHlyaWdodCAyMDAxIEJyYWQgSGFyZHMgKGJoYXJkc0BiaWdwb25kLm5ldC5hdSkKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKwkjZGVmaW5lIERFQlVHCisjZWxzZQorCSN1bmRlZiBERUJVRworI2VuZGlmCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYmRldmljZV9mcy5oPgorCisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjaW5jbHVkZSAidXNiLmgiCisjaW5jbHVkZSAiaGNkLmgiCisjaW5jbHVkZSAiaHViLmgiCisKKy8qIFByb3RlY3Qgc3RydWN0IHVzYl9kZXZpY2UtPnN0YXRlIGFuZCAtPmNoaWxkcmVuIG1lbWJlcnMKKyAqIE5vdGU6IEJvdGggYXJlIGFsc28gcHJvdGVjdGVkIGJ5IC0+c2VyaWFsaXplLCBleGNlcHQgdGhhdCAtPnN0YXRlIGNhbgorICogY2hhbmdlIHRvIFVTQl9TVEFURV9OT1RBVFRBQ0hFRCBldmVuIHdoZW4gdGhlIHNlbWFwaG9yZSBpc24ndCBoZWxkLiAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhkZXZpY2Vfc3RhdGVfbG9jayk7CisKKy8qIGtodWJkJ3Mgd29ya2xpc3QgYW5kIGl0cyBsb2NrICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGh1Yl9ldmVudF9sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQoaHViX2V2ZW50X2xpc3QpOwkvKiBMaXN0IG9mIGh1YnMgbmVlZGluZyBzZXJ2aWNpbmcgKi8KKworLyogV2FrZXMgdXAga2h1YmQgKi8KK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChraHViZF93YWl0KTsKKworc3RhdGljIHBpZF90IGtodWJkX3BpZCA9IDA7CQkJLyogUElEIG9mIGtodWJkICovCitzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGtodWJkX2V4aXRlZCk7CisKKy8qIGN5Y2xlIGxlZHMgb24gaHVicyB0aGF0IGFyZW4ndCBibGlua2luZyBmb3IgYXR0ZW50aW9uICovCitzdGF0aWMgaW50IGJsaW5rZW5saWdodHMgPSAwOworbW9kdWxlX3BhcmFtIChibGlua2VubGlnaHRzLCBib29sLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MgKGJsaW5rZW5saWdodHMsICJ0cnVlIHRvIGN5Y2xlIGxlZHMgb24gaHVicyIpOworCisvKgorICogQXMgb2YgMi42LjEwIHdlIGludHJvZHVjZSBhIG5ldyBVU0IgZGV2aWNlIGluaXRpYWxpemF0aW9uIHNjaGVtZSB3aGljaAorICogY2xvc2VseSByZXNlbWJsZXMgdGhlIHdheSBXaW5kb3dzIHdvcmtzLiAgSG9wZWZ1bGx5IGl0IHdpbGwgYmUgY29tcGF0aWJsZQorICogd2l0aCBhIHdpZGVyIHJhbmdlIG9mIGRldmljZXMgdGhhbiB0aGUgb2xkIHNjaGVtZS4gIEhvd2V2ZXIgc29tZSBwcmV2aW91c2x5CisgKiB3b3JraW5nIGRldmljZXMgbWF5IHN0YXJ0IGdpdmluZyByaXNlIHRvICJkZXZpY2Ugbm90IGFjY2VwdGluZyBhZGRyZXNzIgorICogZXJyb3JzOyBpZiB0aGF0IGhhcHBlbnMgdGhlIHVzZXIgY2FuIHRyeSB0aGUgb2xkIHNjaGVtZSBieSBhZGp1c3RpbmcgdGhlCisgKiBmb2xsb3dpbmcgbW9kdWxlIHBhcmFtZXRlcnMuCisgKgorICogRm9yIG1heGltdW0gZmxleGliaWxpdHkgdGhlcmUgYXJlIHR3byBib29sZWFuIHBhcmFtZXRlcnMgdG8gY29udHJvbCB0aGUKKyAqIGh1YiBkcml2ZXIncyBiZWhhdmlvci4gIE9uIHRoZSBmaXJzdCBpbml0aWFsaXphdGlvbiBhdHRlbXB0LCBpZiB0aGUKKyAqICJvbGRfc2NoZW1lX2ZpcnN0IiBwYXJhbWV0ZXIgaXMgc2V0IHRoZW4gdGhlIG9sZCBzY2hlbWUgd2lsbCBiZSB1c2VkLAorICogb3RoZXJ3aXNlIHRoZSBuZXcgc2NoZW1lIGlzIHVzZWQuICBJZiB0aGF0IGZhaWxzIGFuZCAidXNlX2JvdGhfc2NoZW1lcyIKKyAqIGlzIHNldCwgdGhlbiB0aGUgZHJpdmVyIHdpbGwgbWFrZSBhbm90aGVyIGF0dGVtcHQsIHVzaW5nIHRoZSBvdGhlciBzY2hlbWUuCisgKi8KK3N0YXRpYyBpbnQgb2xkX3NjaGVtZV9maXJzdCA9IDA7Cittb2R1bGVfcGFyYW0ob2xkX3NjaGVtZV9maXJzdCwgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhvbGRfc2NoZW1lX2ZpcnN0LAorCQkgInN0YXJ0IHdpdGggdGhlIG9sZCBkZXZpY2UgaW5pdGlhbGl6YXRpb24gc2NoZW1lIik7CisKK3N0YXRpYyBpbnQgdXNlX2JvdGhfc2NoZW1lcyA9IDE7Cittb2R1bGVfcGFyYW0odXNlX2JvdGhfc2NoZW1lcywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyh1c2VfYm90aF9zY2hlbWVzLAorCQkidHJ5IHRoZSBvdGhlciBkZXZpY2UgaW5pdGlhbGl6YXRpb24gc2NoZW1lIGlmIHRoZSAiCisJCSJmaXJzdCBvbmUgZmFpbHMiKTsKKworCisjaWZkZWYJREVCVUcKK3N0YXRpYyBpbmxpbmUgY2hhciAqcG9ydHNwZWVkIChpbnQgcG9ydHN0YXR1cykKK3sKKwlpZiAocG9ydHN0YXR1cyAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfSElHSFNQRUVEKSkKKyAgICAJCXJldHVybiAiNDgwIE1iL3MiOworCWVsc2UgaWYgKHBvcnRzdGF0dXMgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX0xPV1NQRUVEKSkKKwkJcmV0dXJuICIxLjUgTWIvcyI7CisJZWxzZQorCQlyZXR1cm4gIjEyIE1iL3MiOworfQorI2VuZGlmCisKKy8qIE5vdGUgdGhhdCBoZGV2IG9yIG9uZSBvZiBpdHMgY2hpbGRyZW4gbXVzdCBiZSBsb2NrZWQhICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2JfaHViICpoZGV2X3RvX2h1YihzdHJ1Y3QgdXNiX2RldmljZSAqaGRldikKK3sKKwlyZXR1cm4gdXNiX2dldF9pbnRmZGF0YShoZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVswXSk7Cit9CisKKy8qIFVTQiAyLjAgc3BlYyBTZWN0aW9uIDExLjI0LjQuNSAqLworc3RhdGljIGludCBnZXRfaHViX2Rlc2NyaXB0b3Ioc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsIHZvaWQgKmRhdGEsIGludCBzaXplKQoreworCWludCBpLCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXJldCA9IHVzYl9jb250cm9sX21zZyhoZGV2LCB1c2JfcmN2Y3RybHBpcGUoaGRldiwgMCksCisJCQlVU0JfUkVRX0dFVF9ERVNDUklQVE9SLCBVU0JfRElSX0lOIHwgVVNCX1JUX0hVQiwKKwkJCVVTQl9EVF9IVUIgPDwgOCwgMCwgZGF0YSwgc2l6ZSwKKwkJCVVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwkJaWYgKHJldCA+PSAoVVNCX0RUX0hVQl9OT05WQVJfU0laRSArIDIpKQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiBVU0IgMi4wIHNwZWMgU2VjdGlvbiAxMS4yNC4yLjEKKyAqLworc3RhdGljIGludCBjbGVhcl9odWJfZmVhdHVyZShzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiwgaW50IGZlYXR1cmUpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhoZGV2LCB1c2Jfc25kY3RybHBpcGUoaGRldiwgMCksCisJCVVTQl9SRVFfQ0xFQVJfRkVBVFVSRSwgVVNCX1JUX0hVQiwgZmVhdHVyZSwgMCwgTlVMTCwgMCwgMTAwMCk7Cit9CisKKy8qCisgKiBVU0IgMi4wIHNwZWMgU2VjdGlvbiAxMS4yNC4yLjIKKyAqLworc3RhdGljIGludCBjbGVhcl9wb3J0X2ZlYXR1cmUoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsIGludCBwb3J0MSwgaW50IGZlYXR1cmUpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhoZGV2LCB1c2Jfc25kY3RybHBpcGUoaGRldiwgMCksCisJCVVTQl9SRVFfQ0xFQVJfRkVBVFVSRSwgVVNCX1JUX1BPUlQsIGZlYXR1cmUsIHBvcnQxLAorCQlOVUxMLCAwLCAxMDAwKTsKK30KKworLyoKKyAqIFVTQiAyLjAgc3BlYyBTZWN0aW9uIDExLjI0LjIuMTMKKyAqLworc3RhdGljIGludCBzZXRfcG9ydF9mZWF0dXJlKHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2LCBpbnQgcG9ydDEsIGludCBmZWF0dXJlKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2coaGRldiwgdXNiX3NuZGN0cmxwaXBlKGhkZXYsIDApLAorCQlVU0JfUkVRX1NFVF9GRUFUVVJFLCBVU0JfUlRfUE9SVCwgZmVhdHVyZSwgcG9ydDEsCisJCU5VTEwsIDAsIDEwMDApOworfQorCisvKgorICogVVNCIDIuMCBzcGVjIFNlY3Rpb24gMTEuMjQuMi43LjEuMTAgYW5kIHRhYmxlIDExLTcKKyAqIGZvciBpbmZvIGFib3V0IHVzaW5nIHBvcnQgaW5kaWNhdG9ycworICovCitzdGF0aWMgdm9pZCBzZXRfcG9ydF9sZWQoCisJc3RydWN0IHVzYl9odWIgKmh1YiwKKwlpbnQgcG9ydDEsCisJaW50IHNlbGVjdG9yCispCit7CisJaW50IHN0YXR1cyA9IHNldF9wb3J0X2ZlYXR1cmUoaHViLT5oZGV2LCAoc2VsZWN0b3IgPDwgOCkgfCBwb3J0MSwKKwkJCVVTQl9QT1JUX0ZFQVRfSU5ESUNBVE9SKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZGV2X2RiZyAoaHViLT5pbnRmZGV2LAorCQkJInBvcnQgJWQgaW5kaWNhdG9yICVzIHN0YXR1cyAlZFxuIiwKKwkJCXBvcnQxLAorCQkJKHsgY2hhciAqczsgc3dpdGNoIChzZWxlY3RvcikgeworCQkJY2FzZSBIVUJfTEVEX0FNQkVSOiBzID0gImFtYmVyIjsgYnJlYWs7CisJCQljYXNlIEhVQl9MRURfR1JFRU46IHMgPSAiZ3JlZW4iOyBicmVhazsKKwkJCWNhc2UgSFVCX0xFRF9PRkY6IHMgPSAib2ZmIjsgYnJlYWs7CisJCQljYXNlIEhVQl9MRURfQVVUTzogcyA9ICJhdXRvIjsgYnJlYWs7CisJCQlkZWZhdWx0OiBzID0gIj8/IjsgYnJlYWs7CisJCQl9OyBzOyB9KSwKKwkJCXN0YXR1cyk7Cit9CisKKyNkZWZpbmUJTEVEX0NZQ0xFX1BFUklPRAkoKDIqSFopLzMpCisKK3N0YXRpYyB2b2lkIGxlZF93b3JrICh2b2lkICpfX2h1YikKK3sKKwlzdHJ1Y3QgdXNiX2h1YgkJKmh1YiA9IF9faHViOworCXN0cnVjdCB1c2JfZGV2aWNlCSpoZGV2ID0gaHViLT5oZGV2OworCXVuc2lnbmVkCQlpOworCXVuc2lnbmVkCQljaGFuZ2VkID0gMDsKKwlpbnQJCQljdXJzb3IgPSAtMTsKKworCWlmIChoZGV2LT5zdGF0ZSAhPSBVU0JfU1RBVEVfQ09ORklHVVJFRCB8fCBodWItPnF1aWVzY2luZykKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGh1Yi0+ZGVzY3JpcHRvci0+Yk5iclBvcnRzOyBpKyspIHsKKwkJdW5zaWduZWQJc2VsZWN0b3IsIG1vZGU7CisKKwkJLyogMzAlLTUwJSBkdXR5IGN5Y2xlICovCisKKwkJc3dpdGNoIChodWItPmluZGljYXRvcltpXSkgeworCQkvKiBjeWNsZSBtYXJrZXIgKi8KKwkJY2FzZSBJTkRJQ0FUT1JfQ1lDTEU6CisJCQljdXJzb3IgPSBpOworCQkJc2VsZWN0b3IgPSBIVUJfTEVEX0FVVE87CisJCQltb2RlID0gSU5ESUNBVE9SX0FVVE87CisJCQlicmVhazsKKwkJLyogYmxpbmtpbmcgZ3JlZW4gPSBzdyBhdHRlbnRpb24gKi8KKwkJY2FzZSBJTkRJQ0FUT1JfR1JFRU5fQkxJTks6CisJCQlzZWxlY3RvciA9IEhVQl9MRURfR1JFRU47CisJCQltb2RlID0gSU5ESUNBVE9SX0dSRUVOX0JMSU5LX09GRjsKKwkJCWJyZWFrOworCQljYXNlIElORElDQVRPUl9HUkVFTl9CTElOS19PRkY6CisJCQlzZWxlY3RvciA9IEhVQl9MRURfT0ZGOworCQkJbW9kZSA9IElORElDQVRPUl9HUkVFTl9CTElOSzsKKwkJCWJyZWFrOworCQkvKiBibGlua2luZyBhbWJlciA9IGh3IGF0dGVudGlvbiAqLworCQljYXNlIElORElDQVRPUl9BTUJFUl9CTElOSzoKKwkJCXNlbGVjdG9yID0gSFVCX0xFRF9BTUJFUjsKKwkJCW1vZGUgPSBJTkRJQ0FUT1JfQU1CRVJfQkxJTktfT0ZGOworCQkJYnJlYWs7CisJCWNhc2UgSU5ESUNBVE9SX0FNQkVSX0JMSU5LX09GRjoKKwkJCXNlbGVjdG9yID0gSFVCX0xFRF9PRkY7CisJCQltb2RlID0gSU5ESUNBVE9SX0FNQkVSX0JMSU5LOworCQkJYnJlYWs7CisJCS8qIGJsaW5rIGdyZWVuL2FtYmVyID0gcmVzZXJ2ZWQgKi8KKwkJY2FzZSBJTkRJQ0FUT1JfQUxUX0JMSU5LOgorCQkJc2VsZWN0b3IgPSBIVUJfTEVEX0dSRUVOOworCQkJbW9kZSA9IElORElDQVRPUl9BTFRfQkxJTktfT0ZGOworCQkJYnJlYWs7CisJCWNhc2UgSU5ESUNBVE9SX0FMVF9CTElOS19PRkY6CisJCQlzZWxlY3RvciA9IEhVQl9MRURfQU1CRVI7CisJCQltb2RlID0gSU5ESUNBVE9SX0FMVF9CTElOSzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNlbGVjdG9yICE9IEhVQl9MRURfQVVUTykKKwkJCWNoYW5nZWQgPSAxOworCQlzZXRfcG9ydF9sZWQoaHViLCBpICsgMSwgc2VsZWN0b3IpOworCQlodWItPmluZGljYXRvcltpXSA9IG1vZGU7CisJfQorCWlmICghY2hhbmdlZCAmJiBibGlua2VubGlnaHRzKSB7CisJCWN1cnNvcisrOworCQljdXJzb3IgJT0gaHViLT5kZXNjcmlwdG9yLT5iTmJyUG9ydHM7CisJCXNldF9wb3J0X2xlZChodWIsIGN1cnNvciArIDEsIEhVQl9MRURfR1JFRU4pOworCQlodWItPmluZGljYXRvcltjdXJzb3JdID0gSU5ESUNBVE9SX0NZQ0xFOworCQljaGFuZ2VkKys7CisJfQorCWlmIChjaGFuZ2VkKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmh1Yi0+bGVkcywgTEVEX0NZQ0xFX1BFUklPRCk7Cit9CisKKy8qIHVzZSBhIHNob3J0IHRpbWVvdXQgZm9yIGh1Yi9wb3J0IHN0YXR1cyBmZXRjaGVzICovCisjZGVmaW5lCVVTQl9TVFNfVElNRU9VVAkJMTAwMAorI2RlZmluZQlVU0JfU1RTX1JFVFJJRVMJCTUKKworLyoKKyAqIFVTQiAyLjAgc3BlYyBTZWN0aW9uIDExLjI0LjIuNgorICovCitzdGF0aWMgaW50IGdldF9odWJfc3RhdHVzKHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2LAorCQlzdHJ1Y3QgdXNiX2h1Yl9zdGF0dXMgKmRhdGEpCit7CisJaW50IGksIHN0YXR1cyA9IC1FVElNRURPVVQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgVVNCX1NUU19SRVRSSUVTICYmIHN0YXR1cyA9PSAtRVRJTUVET1VUOyBpKyspIHsKKwkJc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnKGhkZXYsIHVzYl9yY3ZjdHJscGlwZShoZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX1NUQVRVUywgVVNCX0RJUl9JTiB8IFVTQl9SVF9IVUIsIDAsIDAsCisJCQlkYXRhLCBzaXplb2YoKmRhdGEpLCBVU0JfU1RTX1RJTUVPVVQpOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogVVNCIDIuMCBzcGVjIFNlY3Rpb24gMTEuMjQuMi43CisgKi8KK3N0YXRpYyBpbnQgZ2V0X3BvcnRfc3RhdHVzKHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2LCBpbnQgcG9ydDEsCisJCXN0cnVjdCB1c2JfcG9ydF9zdGF0dXMgKmRhdGEpCit7CisJaW50IGksIHN0YXR1cyA9IC1FVElNRURPVVQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgVVNCX1NUU19SRVRSSUVTICYmIHN0YXR1cyA9PSAtRVRJTUVET1VUOyBpKyspIHsKKwkJc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnKGhkZXYsIHVzYl9yY3ZjdHJscGlwZShoZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX1NUQVRVUywgVVNCX0RJUl9JTiB8IFVTQl9SVF9QT1JULCAwLCBwb3J0MSwKKwkJCWRhdGEsIHNpemVvZigqZGF0YSksIFVTQl9TVFNfVElNRU9VVCk7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIGtpY2tfa2h1YmQoc3RydWN0IHVzYl9odWIgKmh1YikKK3sKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh1Yl9ldmVudF9sb2NrLCBmbGFncyk7CisJaWYgKGxpc3RfZW1wdHkoJmh1Yi0+ZXZlbnRfbGlzdCkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmaHViLT5ldmVudF9saXN0LCAmaHViX2V2ZW50X2xpc3QpOworCQl3YWtlX3VwKCZraHViZF93YWl0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHViX2V2ZW50X2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCB1c2Jfa2lja19raHViZChzdHJ1Y3QgdXNiX2RldmljZSAqaGRldikKK3sKKwlraWNrX2todWJkKGhkZXZfdG9faHViKGhkZXYpKTsKK30KKworCisvKiBjb21wbGV0aW9uIGZ1bmN0aW9uLCBmaXJlcyBvbiBwb3J0IHN0YXR1cyBjaGFuZ2VzIGFuZCB2YXJpb3VzIGZhdWx0cyAqLworc3RhdGljIHZvaWQgaHViX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2JfaHViICpodWIgPSAoc3RydWN0IHVzYl9odWIgKil1cmItPmNvbnRleHQ7CisJaW50IHN0YXR1czsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGJpdHM7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAtRU5PRU5UOgkJLyogc3luY2hyb25vdXMgdW5saW5rICovCisJY2FzZSAtRUNPTk5SRVNFVDoJLyogYXN5bmMgdW5saW5rICovCisJY2FzZSAtRVNIVVRET1dOOgkvKiBoYXJkd2FyZSBnb2luZyBhd2F5ICovCisJCXJldHVybjsKKworCWRlZmF1bHQ6CQkvKiBwcmVzdW1hYmx5IGFuIGVycm9yICovCisJCS8qIENhdXNlIGEgaHViIHJlc2V0IGFmdGVyIDEwIGNvbnNlY3V0aXZlIGVycm9ycyAqLworCQlkZXZfZGJnIChodWItPmludGZkZXYsICJ0cmFuc2ZlciAtLT4gJWRcbiIsIHVyYi0+c3RhdHVzKTsKKwkJaWYgKCgrK2h1Yi0+bmVycm9ycyA8IDEwKSB8fCBodWItPmVycm9yKQorCQkJZ290byByZXN1Ym1pdDsKKwkJaHViLT5lcnJvciA9IHVyYi0+c3RhdHVzOworCQkvKiBGQUxMIFRIUk9VR0ggKi8KKwkKKwkvKiBsZXQga2h1YmQgaGFuZGxlIHRoaW5ncyAqLworCWNhc2UgMDoJCQkvKiB3ZSBnb3QgZGF0YTogIHBvcnQgc3RhdHVzIGNoYW5nZWQgKi8KKwkJYml0cyA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCB1cmItPmFjdHVhbF9sZW5ndGg7ICsraSkKKwkJCWJpdHMgfD0gKCh1bnNpZ25lZCBsb25nKSAoKCpodWItPmJ1ZmZlcilbaV0pKQorCQkJCQk8PCAoaSo4KTsKKwkJaHViLT5ldmVudF9iaXRzWzBdID0gYml0czsKKwkJYnJlYWs7CisJfQorCisJaHViLT5uZXJyb3JzID0gMDsKKworCS8qIFNvbWV0aGluZyBoYXBwZW5lZCwgbGV0IGtodWJkIGZpZ3VyZSBpdCBvdXQgKi8KKwlraWNrX2todWJkKGh1Yik7CisKK3Jlc3VibWl0OgorCWlmIChodWItPnF1aWVzY2luZykKKwkJcmV0dXJuOworCisJaWYgKChzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAoaHViLT51cmIsIEdGUF9BVE9NSUMpKSAhPSAwCisJCQkmJiBzdGF0dXMgIT0gLUVOT0RFViAmJiBzdGF0dXMgIT0gLUVQRVJNKQorCQlkZXZfZXJyIChodWItPmludGZkZXYsICJyZXN1Ym1pdCAtLT4gJWRcbiIsIHN0YXR1cyk7Cit9CisKKy8qIFVTQiAyLjAgc3BlYyBTZWN0aW9uIDExLjI0LjIuMyAqLworc3RhdGljIGlubGluZSBpbnQKK2h1Yl9jbGVhcl90dF9idWZmZXIgKHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2LCB1MTYgZGV2aW5mbywgdTE2IHR0KQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2coaGRldiwgdXNiX3JjdmN0cmxwaXBlKGhkZXYsIDApLAorCQkJICAgICAgIEhVQl9DTEVBUl9UVF9CVUZGRVIsIFVTQl9SVF9QT1JULCBkZXZpbmZvLAorCQkJICAgICAgIHR0LCBOVUxMLCAwLCAxMDAwKTsKK30KKworLyoKKyAqIGVudW1lcmF0aW9uIGJsb2NrcyBraHViZCBmb3IgYSBsb25nIHRpbWUuIHdlIHVzZSBrZXZlbnRkIGluc3RlYWQsIHNpbmNlCisgKiBsb25nIGJsb2NraW5nIHRoZXJlIGlzIHRoZSBleGNlcHRpb24sIG5vdCB0aGUgcnVsZS4gIGFjY29yZGluZ2x5LCBIQ0RzCisgKiB0YWxraW5nIHRvIFRUcyBtdXN0IHF1ZXVlIGNvbnRyb2wgdHJhbnNmZXJzIChub3QganVzdCBidWxrIGFuZCBpc28pLCBzbworICogYm90aCBjYW4gdGFsayB0byB0aGUgc2FtZSBodWIgY29uY3VycmVudGx5LgorICovCitzdGF0aWMgdm9pZCBodWJfdHRfa2V2ZW50ICh2b2lkICphcmcpCit7CisJc3RydWN0IHVzYl9odWIJCSpodWIgPSBhcmc7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmh1Yi0+dHQubG9jaywgZmxhZ3MpOworCXdoaWxlICghbGlzdF9lbXB0eSAoJmh1Yi0+dHQuY2xlYXJfbGlzdCkpIHsKKwkJc3RydWN0IGxpc3RfaGVhZAkqdGVtcDsKKwkJc3RydWN0IHVzYl90dF9jbGVhcgkqY2xlYXI7CisJCXN0cnVjdCB1c2JfZGV2aWNlCSpoZGV2ID0gaHViLT5oZGV2OworCQlpbnQJCQlzdGF0dXM7CisKKwkJdGVtcCA9IGh1Yi0+dHQuY2xlYXJfbGlzdC5uZXh0OworCQljbGVhciA9IGxpc3RfZW50cnkgKHRlbXAsIHN0cnVjdCB1c2JfdHRfY2xlYXIsIGNsZWFyX2xpc3QpOworCQlsaXN0X2RlbCAoJmNsZWFyLT5jbGVhcl9saXN0KTsKKworCQkvKiBkcm9wIGxvY2sgc28gSENEIGNhbiBjb25jdXJyZW50bHkgcmVwb3J0IG90aGVyIFRUIGVycm9ycyAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmaHViLT50dC5sb2NrLCBmbGFncyk7CisJCXN0YXR1cyA9IGh1Yl9jbGVhcl90dF9idWZmZXIgKGhkZXYsIGNsZWFyLT5kZXZpbmZvLCBjbGVhci0+dHQpOworCQlzcGluX2xvY2tfaXJxc2F2ZSAoJmh1Yi0+dHQubG9jaywgZmxhZ3MpOworCisJCWlmIChzdGF0dXMpCisJCQlkZXZfZXJyICgmaGRldi0+ZGV2LAorCQkJCSJjbGVhciB0dCAlZCAoJTA0eCkgZXJyb3IgJWRcbiIsCisJCQkJY2xlYXItPnR0LCBjbGVhci0+ZGV2aW5mbywgc3RhdHVzKTsKKwkJa2ZyZWUgKGNsZWFyKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmh1Yi0+dHQubG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIHVzYl9odWJfdHRfY2xlYXJfYnVmZmVyIC0gY2xlYXIgY29udHJvbC9idWxrIFRUIHN0YXRlIGluIGhpZ2ggc3BlZWQgaHViCisgKiBAdWRldjogdGhlIGRldmljZSB3aG9zZSBzcGxpdCB0cmFuc2FjdGlvbiBmYWlsZWQKKyAqIEBwaXBlOiBpZGVudGlmaWVzIHRoZSBlbmRwb2ludCBvZiB0aGUgZmFpbGVkIHRyYW5zYWN0aW9uCisgKgorICogSGlnaCBzcGVlZCBIQ0RzIHVzZSB0aGlzIHRvIHRlbGwgdGhlIGh1YiBkcml2ZXIgdGhhdCBzb21lIHNwbGl0IGNvbnRyb2wgb3IKKyAqIGJ1bGsgdHJhbnNhY3Rpb24gZmFpbGVkIGluIGEgd2F5IHRoYXQgcmVxdWlyZXMgY2xlYXJpbmcgaW50ZXJuYWwgc3RhdGUgb2YKKyAqIGEgdHJhbnNhY3Rpb24gdHJhbnNsYXRvci4gIFRoaXMgaXMgbm9ybWFsbHkgZGV0ZWN0ZWQgKGFuZCByZXBvcnRlZCkgZnJvbQorICogaW50ZXJydXB0IGNvbnRleHQuCisgKgorICogSXQgbWF5IG5vdCBiZSBwb3NzaWJsZSBmb3IgdGhhdCBodWIgdG8gaGFuZGxlIGFkZGl0aW9uYWwgZnVsbCAob3IgbG93KQorICogc3BlZWQgdHJhbnNhY3Rpb25zIHVudGlsIHRoYXQgc3RhdGUgaXMgZnVsbHkgY2xlYXJlZCBvdXQuCisgKi8KK3ZvaWQgdXNiX2h1Yl90dF9jbGVhcl9idWZmZXIgKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgcGlwZSkKK3sKKwlzdHJ1Y3QgdXNiX3R0CQkqdHQgPSB1ZGV2LT50dDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlzdHJ1Y3QgdXNiX3R0X2NsZWFyCSpjbGVhcjsKKworCS8qIHdlJ3ZlIGdvdCB0byBjb3BlIHdpdGggYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBwZW5kaW5nIFRUIGNsZWFycywKKwkgKiBzaW5jZSBlYWNoIFRUIGhhcyAiYXQgbGVhc3QgdHdvIiBidWZmZXJzIHRoYXQgY2FuIG5lZWQgaXQgKGFuZAorCSAqIHRoZXJlIGNhbiBiZSBtYW55IFRUcyBwZXIgaHViKS4gIGV2ZW4gaWYgdGhleSdyZSB1bmNvbW1vbi4KKwkgKi8KKwlpZiAoKGNsZWFyID0ga21hbGxvYyAoc2l6ZW9mICpjbGVhciwgU0xBQl9BVE9NSUMpKSA9PSBOVUxMKSB7CisJCWRldl9lcnIgKCZ1ZGV2LT5kZXYsICJjYW4ndCBzYXZlIENMRUFSX1RUX0JVRkZFUiBzdGF0ZVxuIik7CisJCS8qIEZJWE1FIHJlY292ZXIgc29tZWhvdyAuLi4gUkVTRVRfVFQ/ICovCisJCXJldHVybjsKKwl9CisKKwkvKiBpbmZvIHRoYXQgQ0xFQVJfVFRfQlVGRkVSIG5lZWRzICovCisJY2xlYXItPnR0ID0gdHQtPm11bHRpID8gdWRldi0+dHRwb3J0IDogMTsKKwljbGVhci0+ZGV2aW5mbyA9IHVzYl9waXBlZW5kcG9pbnQgKHBpcGUpOworCWNsZWFyLT5kZXZpbmZvIHw9IHVkZXYtPmRldm51bSA8PCA0OworCWNsZWFyLT5kZXZpbmZvIHw9IHVzYl9waXBlY29udHJvbCAocGlwZSkKKwkJCT8gKFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wgPDwgMTEpCisJCQk6IChVU0JfRU5EUE9JTlRfWEZFUl9CVUxLIDw8IDExKTsKKwlpZiAodXNiX3BpcGVpbiAocGlwZSkpCisJCWNsZWFyLT5kZXZpbmZvIHw9IDEgPDwgMTU7CisJCisJLyogdGVsbCBrZXZlbnRkIHRvIGNsZWFyIHN0YXRlIGZvciB0aGlzIFRUICovCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZ0dC0+bG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwgKCZjbGVhci0+Y2xlYXJfbGlzdCwgJnR0LT5jbGVhcl9saXN0KTsKKwlzY2hlZHVsZV93b3JrICgmdHQtPmtldmVudCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnR0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGh1Yl9wb3dlcl9vbihzdHJ1Y3QgdXNiX2h1YiAqaHViKQoreworCWludCBwb3J0MTsKKworCS8qIGlmIGh1YiBzdXBwb3J0cyBwb3dlciBzd2l0Y2hpbmcsIGVuYWJsZSBwb3dlciBvbiBlYWNoIHBvcnQgKi8KKwlpZiAoKGh1Yi0+ZGVzY3JpcHRvci0+d0h1YkNoYXJhY3RlcmlzdGljcyAmIEhVQl9DSEFSX0xQU00pIDwgMikgeworCQlkZXZfZGJnKGh1Yi0+aW50ZmRldiwgImVuYWJsaW5nIHBvd2VyIG9uIGFsbCBwb3J0c1xuIik7CisJCWZvciAocG9ydDEgPSAxOyBwb3J0MSA8PSBodWItPmRlc2NyaXB0b3ItPmJOYnJQb3J0czsgcG9ydDErKykKKwkJCXNldF9wb3J0X2ZlYXR1cmUoaHViLT5oZGV2LCBwb3J0MSwKKwkJCQkJVVNCX1BPUlRfRkVBVF9QT1dFUik7CisJfQorCisJLyogV2FpdCBmb3IgcG93ZXIgdG8gYmUgZW5hYmxlZCAqLworCW1zbGVlcChodWItPmRlc2NyaXB0b3ItPmJQd3JPbjJQd3JHb29kICogMik7Cit9CisKK3N0YXRpYyB2b2lkIGh1Yl9xdWllc2NlKHN0cnVjdCB1c2JfaHViICpodWIpCit7CisJLyogc3RvcCBraHViZCBhbmQgcmVsYXRlZCBhY3Rpdml0eSAqLworCWh1Yi0+cXVpZXNjaW5nID0gMTsKKwl1c2Jfa2lsbF91cmIoaHViLT51cmIpOworCWlmIChodWItPmhhc19pbmRpY2F0b3JzKQorCQljYW5jZWxfZGVsYXllZF93b3JrKCZodWItPmxlZHMpOworCWlmIChodWItPmhhc19pbmRpY2F0b3JzIHx8IGh1Yi0+dHQuaHViKQorCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworfQorCitzdGF0aWMgdm9pZCBodWJfYWN0aXZhdGUoc3RydWN0IHVzYl9odWIgKmh1YikKK3sKKwlpbnQJc3RhdHVzOworCisJaHViLT5xdWllc2NpbmcgPSAwOworCWh1Yi0+YWN0aXZhdGluZyA9IDE7CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIoaHViLT51cmIsIEdGUF9OT0lPKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZGV2X2VycihodWItPmludGZkZXYsICJhY3RpdmF0ZSAtLT4gJWRcbiIsIHN0YXR1cyk7CisJaWYgKGh1Yi0+aGFzX2luZGljYXRvcnMgJiYgYmxpbmtlbmxpZ2h0cykKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZodWItPmxlZHMsIExFRF9DWUNMRV9QRVJJT0QpOworCisJLyogc2NhbiBhbGwgcG9ydHMgQVNBUCAqLworCWtpY2tfa2h1YmQoaHViKTsKK30KKworc3RhdGljIGludCBodWJfaHViX3N0YXR1cyhzdHJ1Y3QgdXNiX2h1YiAqaHViLAorCQl1MTYgKnN0YXR1cywgdTE2ICpjaGFuZ2UpCit7CisJaW50IHJldDsKKworCXJldCA9IGdldF9odWJfc3RhdHVzKGh1Yi0+aGRldiwgJmh1Yi0+c3RhdHVzLT5odWIpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyIChodWItPmludGZkZXYsCisJCQkiJXMgZmFpbGVkIChlcnIgPSAlZClcbiIsIF9fRlVOQ1RJT05fXywgcmV0KTsKKwllbHNlIHsKKwkJKnN0YXR1cyA9IGxlMTZfdG9fY3B1KGh1Yi0+c3RhdHVzLT5odWIud0h1YlN0YXR1cyk7CisJCSpjaGFuZ2UgPSBsZTE2X3RvX2NwdShodWItPnN0YXR1cy0+aHViLndIdWJDaGFuZ2UpOyAKKwkJcmV0ID0gMDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBodWJfY29uZmlndXJlKHN0cnVjdCB1c2JfaHViICpodWIsCisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IGh1Yi0+aGRldjsKKwlzdHJ1Y3QgZGV2aWNlICpodWJfZGV2ID0gaHViLT5pbnRmZGV2OworCXUxNiBodWJzdGF0dXMsIGh1YmNoYW5nZTsKKwl1bnNpZ25lZCBpbnQgcGlwZTsKKwlpbnQgbWF4cCwgcmV0OworCWNoYXIgKm1lc3NhZ2U7CisKKwlodWItPmJ1ZmZlciA9IHVzYl9idWZmZXJfYWxsb2MoaGRldiwgc2l6ZW9mKCpodWItPmJ1ZmZlciksIEdGUF9LRVJORUwsCisJCQkmaHViLT5idWZmZXJfZG1hKTsKKwlpZiAoIWh1Yi0+YnVmZmVyKSB7CisJCW1lc3NhZ2UgPSAiY2FuJ3QgYWxsb2NhdGUgaHViIGlycSBidWZmZXIiOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJaHViLT5zdGF0dXMgPSBrbWFsbG9jKHNpemVvZigqaHViLT5zdGF0dXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWh1Yi0+c3RhdHVzKSB7CisJCW1lc3NhZ2UgPSAiY2FuJ3Qga21hbGxvYyBodWIgc3RhdHVzIGJ1ZmZlciI7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisKKwlodWItPmRlc2NyaXB0b3IgPSBrbWFsbG9jKHNpemVvZigqaHViLT5kZXNjcmlwdG9yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFodWItPmRlc2NyaXB0b3IpIHsKKwkJbWVzc2FnZSA9ICJjYW4ndCBrbWFsbG9jIGh1YiBkZXNjcmlwdG9yIjsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCS8qIFJlcXVlc3QgdGhlIGVudGlyZSBodWIgZGVzY3JpcHRvci4KKwkgKiBodWItPmRlc2NyaXB0b3IgY2FuIGhhbmRsZSBVU0JfTUFYQ0hJTERSRU4gcG9ydHMsCisJICogYnV0IHRoZSBodWIgY2FuL3dpbGwgcmV0dXJuIGZld2VyIGJ5dGVzIGhlcmUuCisJICovCisJcmV0ID0gZ2V0X2h1Yl9kZXNjcmlwdG9yKGhkZXYsIGh1Yi0+ZGVzY3JpcHRvciwKKwkJCXNpemVvZigqaHViLT5kZXNjcmlwdG9yKSk7CisJaWYgKHJldCA8IDApIHsKKwkJbWVzc2FnZSA9ICJjYW4ndCByZWFkIGh1YiBkZXNjcmlwdG9yIjsKKwkJZ290byBmYWlsOworCX0gZWxzZSBpZiAoaHViLT5kZXNjcmlwdG9yLT5iTmJyUG9ydHMgPiBVU0JfTUFYQ0hJTERSRU4pIHsKKwkJbWVzc2FnZSA9ICJodWIgaGFzIHRvbyBtYW55IHBvcnRzISI7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbDsKKwl9CisKKwloZGV2LT5tYXhjaGlsZCA9IGh1Yi0+ZGVzY3JpcHRvci0+Yk5iclBvcnRzOworCWRldl9pbmZvIChodWJfZGV2LCAiJWQgcG9ydCVzIGRldGVjdGVkXG4iLCBoZGV2LT5tYXhjaGlsZCwKKwkJKGhkZXYtPm1heGNoaWxkID09IDEpID8gIiIgOiAicyIpOworCisJbGUxNl90b19jcHVzKCZodWItPmRlc2NyaXB0b3ItPndIdWJDaGFyYWN0ZXJpc3RpY3MpOworCisJaWYgKGh1Yi0+ZGVzY3JpcHRvci0+d0h1YkNoYXJhY3RlcmlzdGljcyAmIEhVQl9DSEFSX0NPTVBPVU5EKSB7CisJCWludAlpOworCQljaGFyCXBvcnRzdHIgW1VTQl9NQVhDSElMRFJFTiArIDFdOworCisJCWZvciAoaSA9IDA7IGkgPCBoZGV2LT5tYXhjaGlsZDsgaSsrKQorCQkJcG9ydHN0cltpXSA9IGh1Yi0+ZGVzY3JpcHRvci0+RGV2aWNlUmVtb3ZhYmxlCisJCQkJICAgIFsoKGkgKyAxKSAvIDgpXSAmICgxIDw8ICgoaSArIDEpICUgOCkpCisJCQkJPyAnRicgOiAnUic7CisJCXBvcnRzdHJbaGRldi0+bWF4Y2hpbGRdID0gMDsKKwkJZGV2X2RiZyhodWJfZGV2LCAiY29tcG91bmQgZGV2aWNlOyBwb3J0IHJlbW92YWJsZSBzdGF0dXM6ICVzXG4iLCBwb3J0c3RyKTsKKwl9IGVsc2UKKwkJZGV2X2RiZyhodWJfZGV2LCAic3RhbmRhbG9uZSBodWJcbiIpOworCisJc3dpdGNoIChodWItPmRlc2NyaXB0b3ItPndIdWJDaGFyYWN0ZXJpc3RpY3MgJiBIVUJfQ0hBUl9MUFNNKSB7CisJCWNhc2UgMHgwMDoKKwkJCWRldl9kYmcoaHViX2RldiwgImdhbmdlZCBwb3dlciBzd2l0Y2hpbmdcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgMHgwMToKKwkJCWRldl9kYmcoaHViX2RldiwgImluZGl2aWR1YWwgcG9ydCBwb3dlciBzd2l0Y2hpbmdcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgMHgwMjoKKwkJY2FzZSAweDAzOgorCQkJZGV2X2RiZyhodWJfZGV2LCAibm8gcG93ZXIgc3dpdGNoaW5nICh1c2IgMS4wKVxuIik7CisJCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGh1Yi0+ZGVzY3JpcHRvci0+d0h1YkNoYXJhY3RlcmlzdGljcyAmIEhVQl9DSEFSX09DUE0pIHsKKwkJY2FzZSAweDAwOgorCQkJZGV2X2RiZyhodWJfZGV2LCAiZ2xvYmFsIG92ZXItY3VycmVudCBwcm90ZWN0aW9uXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIDB4MDg6CisJCQlkZXZfZGJnKGh1Yl9kZXYsICJpbmRpdmlkdWFsIHBvcnQgb3Zlci1jdXJyZW50IHByb3RlY3Rpb25cbiIpOworCQkJYnJlYWs7CisJCWNhc2UgMHgxMDoKKwkJY2FzZSAweDE4OgorCQkJZGV2X2RiZyhodWJfZGV2LCAibm8gb3Zlci1jdXJyZW50IHByb3RlY3Rpb25cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJfQorCisJc3Bpbl9sb2NrX2luaXQgKCZodWItPnR0LmxvY2spOworCUlOSVRfTElTVF9IRUFEICgmaHViLT50dC5jbGVhcl9saXN0KTsKKwlJTklUX1dPUksgKCZodWItPnR0LmtldmVudCwgaHViX3R0X2tldmVudCwgaHViKTsKKwlzd2l0Y2ggKGhkZXYtPmRlc2NyaXB0b3IuYkRldmljZVByb3RvY29sKSB7CisJCWNhc2UgMDoKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlkZXZfZGJnKGh1Yl9kZXYsICJTaW5nbGUgVFRcbiIpOworCQkJaHViLT50dC5odWIgPSBoZGV2OworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKGhkZXYsIDAsIDEpOworCQkJaWYgKHJldCA9PSAwKSB7CisJCQkJZGV2X2RiZyhodWJfZGV2LCAiVFQgcGVyIHBvcnRcbiIpOworCQkJCWh1Yi0+dHQubXVsdGkgPSAxOworCQkJfSBlbHNlCisJCQkJZGV2X2VycihodWJfZGV2LCAiVXNpbmcgc2luZ2xlIFRUIChlcnIgJWQpXG4iLAorCQkJCQlyZXQpOworCQkJaHViLT50dC5odWIgPSBoZGV2OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZGJnKGh1Yl9kZXYsICJVbnJlY29nbml6ZWQgaHViIHByb3RvY29sICVkXG4iLAorCQkJCWhkZXYtPmRlc2NyaXB0b3IuYkRldmljZVByb3RvY29sKTsKKwkJCWJyZWFrOworCX0KKworCXN3aXRjaCAoaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzICYgSFVCX0NIQVJfVFRUVCkgeworCQljYXNlIDB4MDA6CisJCQlpZiAoaGRldi0+ZGVzY3JpcHRvci5iRGV2aWNlUHJvdG9jb2wgIT0gMCkKKwkJCQlkZXZfZGJnKGh1Yl9kZXYsICJUVCByZXF1aXJlcyBhdCBtb3N0IDggRlMgYml0IHRpbWVzXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIDB4MjA6CisJCQlkZXZfZGJnKGh1Yl9kZXYsICJUVCByZXF1aXJlcyBhdCBtb3N0IDE2IEZTIGJpdCB0aW1lc1xuIik7CisJCQlicmVhazsKKwkJY2FzZSAweDQwOgorCQkJZGV2X2RiZyhodWJfZGV2LCAiVFQgcmVxdWlyZXMgYXQgbW9zdCAyNCBGUyBiaXQgdGltZXNcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgMHg2MDoKKwkJCWRldl9kYmcoaHViX2RldiwgIlRUIHJlcXVpcmVzIGF0IG1vc3QgMzIgRlMgYml0IHRpbWVzXG4iKTsKKwkJCWJyZWFrOworCX0KKworCS8qIHByb2JlKCkgemVyb2VzIGh1Yi0+aW5kaWNhdG9yW10gKi8KKwlpZiAoaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzICYgSFVCX0NIQVJfUE9SVElORCkgeworCQlodWItPmhhc19pbmRpY2F0b3JzID0gMTsKKwkJZGV2X2RiZyhodWJfZGV2LCAiUG9ydCBpbmRpY2F0b3JzIGFyZSBzdXBwb3J0ZWRcbiIpOworCX0KKworCWRldl9kYmcoaHViX2RldiwgInBvd2VyIG9uIHRvIHBvd2VyIGdvb2QgdGltZTogJWRtc1xuIiwKKwkJaHViLT5kZXNjcmlwdG9yLT5iUHdyT24yUHdyR29vZCAqIDIpOworCisJLyogcG93ZXIgYnVkZ2V0aW5nIG1vc3RseSBtYXR0ZXJzIHdpdGggYnVzLXBvd2VyZWQgaHVicywKKwkgKiBhbmQgYmF0dGVyeS1wb3dlcmVkIHJvb3QgaHVicyAobWF5IHByb3ZpZGUganVzdCA4IG1BKS4KKwkgKi8KKwlyZXQgPSB1c2JfZ2V0X3N0YXR1cyhoZGV2LCBVU0JfUkVDSVBfREVWSUNFLCAwLCAmaHVic3RhdHVzKTsKKwlpZiAocmV0IDwgMCkgeworCQltZXNzYWdlID0gImNhbid0IGdldCBodWIgc3RhdHVzIjsKKwkJZ290byBmYWlsOworCX0KKwljcHVfdG9fbGUxNnMoJmh1YnN0YXR1cyk7CisJaWYgKChodWJzdGF0dXMgJiAoMSA8PCBVU0JfREVWSUNFX1NFTEZfUE9XRVJFRCkpID09IDApIHsKKwkJZGV2X2RiZyhodWJfZGV2LCAiaHViIGNvbnRyb2xsZXIgY3VycmVudCByZXF1aXJlbWVudDogJWRtQVxuIiwKKwkJCWh1Yi0+ZGVzY3JpcHRvci0+Ykh1YkNvbnRyQ3VycmVudCk7CisJCWh1Yi0+cG93ZXJfYnVkZ2V0ID0gKDUwMSAtIGh1Yi0+ZGVzY3JpcHRvci0+Ykh1YkNvbnRyQ3VycmVudCkKKwkJCQkJLyAyOworCQlkZXZfZGJnKGh1Yl9kZXYsICIlZG1BIGJ1cyBwb3dlciBidWRnZXQgZm9yIGNoaWxkcmVuXG4iLAorCQkJaHViLT5wb3dlcl9idWRnZXQgKiAyKTsKKwl9CisKKworCXJldCA9IGh1Yl9odWJfc3RhdHVzKGh1YiwgJmh1YnN0YXR1cywgJmh1YmNoYW5nZSk7CisJaWYgKHJldCA8IDApIHsKKwkJbWVzc2FnZSA9ICJjYW4ndCBnZXQgaHViIHN0YXR1cyI7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBsb2NhbCBwb3dlciBzdGF0dXMgcmVwb3J0cyBhcmVuJ3QgYWx3YXlzIGNvcnJlY3QgKi8KKwlpZiAoaGRldi0+YWN0Y29uZmlnLT5kZXNjLmJtQXR0cmlidXRlcyAmIFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUikKKwkJZGV2X2RiZyhodWJfZGV2LCAibG9jYWwgcG93ZXIgc291cmNlIGlzICVzXG4iLAorCQkJKGh1YnN0YXR1cyAmIEhVQl9TVEFUVVNfTE9DQUxfUE9XRVIpCisJCQk/ICJsb3N0IChpbmFjdGl2ZSkiIDogImdvb2QiKTsKKworCWlmICgoaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzICYgSFVCX0NIQVJfT0NQTSkgPT0gMCkKKwkJZGV2X2RiZyhodWJfZGV2LCAiJXNvdmVyLWN1cnJlbnQgY29uZGl0aW9uIGV4aXN0c1xuIiwKKwkJCShodWJzdGF0dXMgJiBIVUJfU1RBVFVTX09WRVJDVVJSRU5UKSA/ICIiIDogIm5vICIpOworCisJLyogc2V0IHVwIHRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQgKi8KKwlwaXBlID0gdXNiX3JjdmludHBpcGUoaGRldiwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpOworCW1heHAgPSB1c2JfbWF4cGFja2V0KGhkZXYsIHBpcGUsIHVzYl9waXBlb3V0KHBpcGUpKTsKKworCWlmIChtYXhwID4gc2l6ZW9mKCpodWItPmJ1ZmZlcikpCisJCW1heHAgPSBzaXplb2YoKmh1Yi0+YnVmZmVyKTsKKworCWh1Yi0+dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWh1Yi0+dXJiKSB7CisJCW1lc3NhZ2UgPSAiY291bGRuJ3QgYWxsb2NhdGUgaW50ZXJydXB0IHVyYiI7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisKKwl1c2JfZmlsbF9pbnRfdXJiKGh1Yi0+dXJiLCBoZGV2LCBwaXBlLCAqaHViLT5idWZmZXIsIG1heHAsIGh1Yl9pcnEsCisJCWh1YiwgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisJaHViLT51cmItPnRyYW5zZmVyX2RtYSA9IGh1Yi0+YnVmZmVyX2RtYTsKKwlodWItPnVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwkvKiBtYXliZSBjeWNsZSB0aGUgaHViIGxlZHMgKi8KKwlpZiAoaHViLT5oYXNfaW5kaWNhdG9ycyAmJiBibGlua2VubGlnaHRzKQorCQlodWItPmluZGljYXRvciBbMF0gPSBJTkRJQ0FUT1JfQ1lDTEU7CisKKwlodWJfcG93ZXJfb24oaHViKTsKKwlodWJfYWN0aXZhdGUoaHViKTsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlkZXZfZXJyIChodWJfZGV2LCAiY29uZmlnIGZhaWxlZCwgJXMgKGVyciAlZClcbiIsCisJCQltZXNzYWdlLCByZXQpOworCS8qIGh1Yl9kaXNjb25uZWN0KCkgZnJlZXMgdXJiIGFuZCBkZXNjcmlwdG9yICovCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHVuc2lnbmVkIGhpZ2hzcGVlZF9odWJzOworCitzdGF0aWMgdm9pZCBodWJfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX2h1YiAqaHViID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJc3RydWN0IHVzYl9kZXZpY2UgKmhkZXY7CisKKwlpZiAoIWh1YikKKwkJcmV0dXJuOworCWhkZXYgPSBodWItPmhkZXY7CisKKwlpZiAoaGRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCisJCWhpZ2hzcGVlZF9odWJzLS07CisKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKKworCWh1Yl9xdWllc2NlKGh1Yik7CisJdXNiX2ZyZWVfdXJiKGh1Yi0+dXJiKTsKKwlodWItPnVyYiA9IE5VTEw7CisKKwlzcGluX2xvY2tfaXJxKCZodWJfZXZlbnRfbG9jayk7CisJbGlzdF9kZWxfaW5pdCgmaHViLT5ldmVudF9saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJmh1Yl9ldmVudF9sb2NrKTsKKworCWlmIChodWItPmRlc2NyaXB0b3IpIHsKKwkJa2ZyZWUoaHViLT5kZXNjcmlwdG9yKTsKKwkJaHViLT5kZXNjcmlwdG9yID0gTlVMTDsKKwl9CisKKwlpZiAoaHViLT5zdGF0dXMpIHsKKwkJa2ZyZWUoaHViLT5zdGF0dXMpOworCQlodWItPnN0YXR1cyA9IE5VTEw7CisJfQorCisJaWYgKGh1Yi0+YnVmZmVyKSB7CisJCXVzYl9idWZmZXJfZnJlZShoZGV2LCBzaXplb2YoKmh1Yi0+YnVmZmVyKSwgaHViLT5idWZmZXIsCisJCQkJaHViLT5idWZmZXJfZG1hKTsKKwkJaHViLT5idWZmZXIgPSBOVUxMOworCX0KKworCS8qIEZyZWUgdGhlIG1lbW9yeSAqLworCWtmcmVlKGh1Yik7Cit9CisKK3N0YXRpYyBpbnQgaHViX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqZGVzYzsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCXN0cnVjdCB1c2JfZGV2aWNlICpoZGV2OworCXN0cnVjdCB1c2JfaHViICpodWI7CisKKwlkZXNjID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJaGRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisKKwkvKiBTb21lIGh1YnMgaGF2ZSBhIHN1YmNsYXNzIG9mIDEsIHdoaWNoIEFGQUlDVCBhY2NvcmRpbmcgdG8gdGhlICovCisJLyogIHNwZWNzIGlzIG5vdCBkZWZpbmVkLCBidXQgaXQgd29ya3MgKi8KKwlpZiAoKGRlc2MtPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzICE9IDApICYmCisJICAgIChkZXNjLT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyAhPSAxKSkgeworZGVzY3JpcHRvcl9lcnJvcjoKKwkJZGV2X2VyciAoJmludGYtPmRldiwgImJhZCBkZXNjcmlwdG9yLCBpZ25vcmluZyBodWJcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBNdWx0aXBsZSBlbmRwb2ludHM/IFdoYXQga2luZCBvZiBtdXRhbnQgbmluamEtaHViIGlzIHRoaXM/ICovCisJaWYgKGRlc2MtPmRlc2MuYk51bUVuZHBvaW50cyAhPSAxKQorCQlnb3RvIGRlc2NyaXB0b3JfZXJyb3I7CisKKwllbmRwb2ludCA9ICZkZXNjLT5lbmRwb2ludFswXS5kZXNjOworCisJLyogT3V0cHV0IGVuZHBvaW50PyBDdXJpb3VzZXIgYW5kIGN1cmlvdXNlci4uICovCisJaWYgKCEoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSkKKwkJZ290byBkZXNjcmlwdG9yX2Vycm9yOworCisJLyogSWYgaXQncyBub3QgYW4gaW50ZXJydXB0IGVuZHBvaW50LCB3ZSdkIGJldHRlciBwdW50ISAqLworCWlmICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQorCQkJIT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKQorCQlnb3RvIGRlc2NyaXB0b3JfZXJyb3I7CisKKwkvKiBXZSBmb3VuZCBhIGh1YiAqLworCWRldl9pbmZvICgmaW50Zi0+ZGV2LCAiVVNCIGh1YiBmb3VuZFxuIik7CisKKwlodWIgPSBrbWFsbG9jKHNpemVvZigqaHViKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFodWIpIHsKKwkJZGV2X2RiZyAoJmludGYtPmRldiwgImNvdWxkbid0IGttYWxsb2MgaHViIHN0cnVjdFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChodWIsIDAsIHNpemVvZigqaHViKSk7CisKKwlJTklUX0xJU1RfSEVBRCgmaHViLT5ldmVudF9saXN0KTsKKwlodWItPmludGZkZXYgPSAmaW50Zi0+ZGV2OworCWh1Yi0+aGRldiA9IGhkZXY7CisJSU5JVF9XT1JLKCZodWItPmxlZHMsIGxlZF93b3JrLCBodWIpOworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgaHViKTsKKworCWlmIChoZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJaGlnaHNwZWVkX2h1YnMrKzsKKworCWlmIChodWJfY29uZmlndXJlKGh1YiwgZW5kcG9pbnQpID49IDApCisJCXJldHVybiAwOworCisJaHViX2Rpc2Nvbm5lY3QgKGludGYpOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50CitodWJfaW9jdGwoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHVuc2lnbmVkIGludCBjb2RlLCB2b2lkICp1c2VyX2RhdGEpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpbnRmKTsKKworCS8qIGFzc2VydCBpZm5vID09IDAgKHBhcnQgb2YgaHViIHNwZWMpICovCisJc3dpdGNoIChjb2RlKSB7CisJY2FzZSBVU0JERVZGU19IVUJfUE9SVElORk86IHsKKwkJc3RydWN0IHVzYmRldmZzX2h1Yl9wb3J0aW5mbyAqaW5mbyA9IHVzZXJfZGF0YTsKKwkJaW50IGk7CisKKwkJc3Bpbl9sb2NrX2lycSgmZGV2aWNlX3N0YXRlX2xvY2spOworCQlpZiAoaGRldi0+ZGV2bnVtIDw9IDApCisJCQlpbmZvLT5ucG9ydHMgPSAwOworCQllbHNlIHsKKwkJCWluZm8tPm5wb3J0cyA9IGhkZXYtPm1heGNoaWxkOworCQkJZm9yIChpID0gMDsgaSA8IGluZm8tPm5wb3J0czsgaSsrKSB7CisJCQkJaWYgKGhkZXYtPmNoaWxkcmVuW2ldID09IE5VTEwpCisJCQkJCWluZm8tPnBvcnRbaV0gPSAwOworCQkJCWVsc2UKKwkJCQkJaW5mby0+cG9ydFtpXSA9CisJCQkJCQloZGV2LT5jaGlsZHJlbltpXS0+ZGV2bnVtOworCQkJfQorCQl9CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2aWNlX3N0YXRlX2xvY2spOworCisJCXJldHVybiBpbmZvLT5ucG9ydHMgKyAxOworCQl9CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT1NZUzsKKwl9Cit9CisKKy8qIGNhbGxlciBoYXMgbG9ja2VkIHRoZSBodWIgZGV2aWNlICovCitzdGF0aWMgdm9pZCBodWJfcHJlX3Jlc2V0KHN0cnVjdCB1c2JfaHViICpodWIpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYgPSBodWItPmhkZXY7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaGRldi0+bWF4Y2hpbGQ7ICsraSkgeworCQlpZiAoaGRldi0+Y2hpbGRyZW5baV0pCisJCQl1c2JfZGlzY29ubmVjdCgmaGRldi0+Y2hpbGRyZW5baV0pOworCX0KKwlodWJfcXVpZXNjZShodWIpOworfQorCisvKiBjYWxsZXIgaGFzIGxvY2tlZCB0aGUgaHViIGRldmljZSAqLworc3RhdGljIHZvaWQgaHViX3Bvc3RfcmVzZXQoc3RydWN0IHVzYl9odWIgKmh1YikKK3sKKwlodWJfYWN0aXZhdGUoaHViKTsKKwlodWJfcG93ZXJfb24oaHViKTsKK30KKworCisvKiBncmFiIGRldmljZS9wb3J0IGxvY2ssIHJldHVybmluZyBpbmRleCBvZiB0aGF0IHBvcnQgKHplcm8gYmFzZWQpLgorICogcHJvdGVjdHMgdGhlIHVwc3RyZWFtIGxpbmsgdXNlZCBieSB0aGlzIGRldmljZSBmcm9tIGNvbmN1cnJlbnQKKyAqIHRyZWUgb3BlcmF0aW9ucyBsaWtlIHN1c3BlbmQsIHJlc3VtZSwgcmVzZXQsIGFuZCBkaXNjb25uZWN0LCB3aGljaAorICogYXBwbHkgdG8gZXZlcnl0aGluZyBkb3duc3RyZWFtIG9mIGEgZ2l2ZW4gcG9ydC4KKyAqLworc3RhdGljIGludCBsb2NrdHJlZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpbnQJCQl0OworCXN0cnVjdCB1c2JfZGV2aWNlCSpoZGV2OworCisJaWYgKCF1ZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIHJvb3QgaHViIGlzIGFsd2F5cyB0aGUgZmlyc3QgbG9jayBpbiB0aGUgc2VyaWVzICovCisJaGRldiA9IHVkZXYtPnBhcmVudDsKKwlpZiAoIWhkZXYpIHsKKwkJdXNiX2xvY2tfZGV2aWNlKHVkZXYpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBvbiB0aGUgcGF0aCBmcm9tIHJvb3QgdG8gdXMsIGxvY2sgZXZlcnl0aGluZyBmcm9tCisJICogdG9wIGRvd24sIGRyb3BwaW5nIHBhcmVudCBsb2NrcyB3aGVuIG5vdCBuZWVkZWQKKwkgKi8KKwl0ID0gbG9ja3RyZWUoaGRldik7CisJaWYgKHQgPCAwKQorCQlyZXR1cm4gdDsKKwlmb3IgKHQgPSAwOyB0IDwgaGRldi0+bWF4Y2hpbGQ7IHQrKykgeworCQlpZiAoaGRldi0+Y2hpbGRyZW5bdF0gPT0gdWRldikgeworCQkJLyogZXZlcnl0aGluZyBpcyBmYWlsLWZhc3Qgb25jZSBkaXNjb25uZWN0CisJCQkgKiBwcm9jZXNzaW5nIHN0YXJ0cworCQkJICovCisJCQlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKQorCQkJCWJyZWFrOworCisJCQkvKiB3aGVuIGV2ZXJ5b25lIGdyYWJzIGxvY2tzIHRvcC0+Ym90dG9tLAorCQkJICogbm9uLW92ZXJsYXBwaW5nIHdvcmsgbWF5IGJlIGNvbmN1cnJlbnQKKwkJCSAqLworCQkJZG93bigmdWRldi0+c2VyaWFsaXplKTsKKwkJCXVwKCZoZGV2LT5zZXJpYWxpemUpOworCQkJcmV0dXJuIHQgKyAxOworCQl9CisJfQorCXVzYl91bmxvY2tfZGV2aWNlKGhkZXYpOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgdm9pZCByZWN1cnNpdmVseV9tYXJrX05PVEFUVEFDSEVEKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHVkZXYtPm1heGNoaWxkOyArK2kpIHsKKwkJaWYgKHVkZXYtPmNoaWxkcmVuW2ldKQorCQkJcmVjdXJzaXZlbHlfbWFya19OT1RBVFRBQ0hFRCh1ZGV2LT5jaGlsZHJlbltpXSk7CisJfQorCXVkZXYtPnN0YXRlID0gVVNCX1NUQVRFX05PVEFUVEFDSEVEOworfQorCisvKioKKyAqIHVzYl9zZXRfZGV2aWNlX3N0YXRlIC0gY2hhbmdlIGEgZGV2aWNlJ3MgY3VycmVudCBzdGF0ZSAodXNiY29yZSwgaGNkcykKKyAqIEB1ZGV2OiBwb2ludGVyIHRvIGRldmljZSB3aG9zZSBzdGF0ZSBzaG91bGQgYmUgY2hhbmdlZAorICogQG5ld19zdGF0ZTogbmV3IHN0YXRlIHZhbHVlIHRvIGJlIHN0b3JlZAorICoKKyAqIHVkZXYtPnN0YXRlIGlzIF9ub3RfIGZ1bGx5IHByb3RlY3RlZCBieSB0aGUgZGV2aWNlIGxvY2suICBBbHRob3VnaAorICogbW9zdCB0cmFuc2l0aW9ucyBhcmUgbWFkZSBvbmx5IHdoaWxlIGhvbGRpbmcgdGhlIGxvY2ssIHRoZSBzdGF0ZSBjYW4KKyAqIGNhbiBjaGFuZ2UgdG8gVVNCX1NUQVRFX05PVEFUVEFDSEVEIGF0IGFsbW9zdCBhbnkgdGltZS4gIFRoaXMKKyAqIGlzIHNvIHRoYXQgZGV2aWNlcyBjYW4gYmUgbWFya2VkIGFzIGRpc2Nvbm5lY3RlZCBhcyBzb29uIGFzIHBvc3NpYmxlLAorICogd2l0aG91dCBoYXZpbmcgdG8gd2FpdCBmb3IgYW55IHNlbWFwaG9yZXMgdG8gYmUgcmVsZWFzZWQuICBBcyBhIHJlc3VsdCwKKyAqIGFsbCBjaGFuZ2VzIHRvIGFueSBkZXZpY2UncyBzdGF0ZSBtdXN0IGJlIHByb3RlY3RlZCBieSB0aGUKKyAqIGRldmljZV9zdGF0ZV9sb2NrIHNwaW5sb2NrLgorICoKKyAqIE9uY2UgYSBkZXZpY2UgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGRldmljZSB0cmVlLCBhbGwgY2hhbmdlcyB0byBpdHMgc3RhdGUKKyAqIHNob3VsZCBiZSBtYWRlIHVzaW5nIHRoaXMgcm91dGluZS4gIFRoZSBzdGF0ZSBzaG91bGQgX25vdF8gYmUgc2V0IGRpcmVjdGx5LgorICoKKyAqIElmIHVkZXYtPnN0YXRlIGlzIGFscmVhZHkgVVNCX1NUQVRFX05PVEFUVEFDSEVEIHRoZW4gbm8gY2hhbmdlIGlzIG1hZGUuCisgKiBPdGhlcndpc2UgdWRldi0+c3RhdGUgaXMgc2V0IHRvIG5ld19zdGF0ZSwgYW5kIGlmIG5ld19zdGF0ZSBpcworICogVVNCX1NUQVRFX05PVEFUVEFDSEVEIHRoZW4gYWxsIG9mIHVkZXYncyBkZXNjZW5kYW50cycgc3RhdGVzIGFyZSBhbHNvIHNldAorICogdG8gVVNCX1NUQVRFX05PVEFUVEFDSEVELgorICovCit2b2lkIHVzYl9zZXRfZGV2aWNlX3N0YXRlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQllbnVtIHVzYl9kZXZpY2Vfc3RhdGUgbmV3X3N0YXRlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2aWNlX3N0YXRlX2xvY2ssIGZsYWdzKTsKKwlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKQorCQk7CS8qIGRvIG5vdGhpbmcgKi8KKwllbHNlIGlmIChuZXdfc3RhdGUgIT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKQorCQl1ZGV2LT5zdGF0ZSA9IG5ld19zdGF0ZTsKKwllbHNlCisJCXJlY3Vyc2l2ZWx5X21hcmtfTk9UQVRUQUNIRUQodWRldik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2aWNlX3N0YXRlX2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0wodXNiX3NldF9kZXZpY2Vfc3RhdGUpOworCisKK3N0YXRpYyB2b2lkIGNob29zZV9hZGRyZXNzKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWludAkJZGV2bnVtOworCXN0cnVjdCB1c2JfYnVzCSpidXMgPSB1ZGV2LT5idXM7CisKKwkvKiBJZiBraHViZCBldmVyIGJlY29tZXMgbXVsdGl0aHJlYWRlZCwgdGhpcyB3aWxsIG5lZWQgYSBsb2NrICovCisKKwkvKiBUcnkgdG8gYWxsb2NhdGUgdGhlIG5leHQgZGV2bnVtIGJlZ2lubmluZyBhdCBidXMtPmRldm51bV9uZXh0LiAqLworCWRldm51bSA9IGZpbmRfbmV4dF96ZXJvX2JpdChidXMtPmRldm1hcC5kZXZpY2VtYXAsIDEyOCwKKwkJCWJ1cy0+ZGV2bnVtX25leHQpOworCWlmIChkZXZudW0gPj0gMTI4KQorCQlkZXZudW0gPSBmaW5kX25leHRfemVyb19iaXQoYnVzLT5kZXZtYXAuZGV2aWNlbWFwLCAxMjgsIDEpOworCisJYnVzLT5kZXZudW1fbmV4dCA9ICggZGV2bnVtID49IDEyNyA/IDEgOiBkZXZudW0gKyAxKTsKKworCWlmIChkZXZudW0gPCAxMjgpIHsKKwkJc2V0X2JpdChkZXZudW0sIGJ1cy0+ZGV2bWFwLmRldmljZW1hcCk7CisJCXVkZXYtPmRldm51bSA9IGRldm51bTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfYWRkcmVzcyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpZiAodWRldi0+ZGV2bnVtID4gMCkgeworCQljbGVhcl9iaXQodWRldi0+ZGV2bnVtLCB1ZGV2LT5idXMtPmRldm1hcC5kZXZpY2VtYXApOworCQl1ZGV2LT5kZXZudW0gPSAtMTsKKwl9Cit9CisKKy8qKgorICogdXNiX2Rpc2Nvbm5lY3QgLSBkaXNjb25uZWN0IGEgZGV2aWNlICh1c2Jjb3JlLWludGVybmFsKQorICogQHBkZXY6IHBvaW50ZXIgdG8gZGV2aWNlIGJlaW5nIGRpc2Nvbm5lY3RlZAorICogQ29udGV4dDogIWluX2ludGVycnVwdCAoKQorICoKKyAqIFNvbWV0aGluZyBnb3QgZGlzY29ubmVjdGVkLiBHZXQgcmlkIG9mIGl0IGFuZCBhbGwgb2YgaXRzIGNoaWxkcmVuLgorICoKKyAqIElmICpwZGV2IGlzIGEgbm9ybWFsIGRldmljZSB0aGVuIHRoZSBwYXJlbnQgaHViIG11c3QgYWxyZWFkeSBiZSBsb2NrZWQuCisgKiBJZiAqcGRldiBpcyBhIHJvb3QgaHViIHRoZW4gdGhpcyByb3V0aW5lIHdpbGwgYWNxdWlyZSB0aGUKKyAqIHVzYl9idXNfbGlzdF9sb2NrIG9uIGJlaGFsZiBvZiB0aGUgY2FsbGVyLgorICoKKyAqIE9ubHkgaHViIGRyaXZlcnMgKGluY2x1ZGluZyB2aXJ0dWFsIHJvb3QgaHViIGRyaXZlcnMgZm9yIGhvc3QKKyAqIGNvbnRyb2xsZXJzKSBzaG91bGQgZXZlciBjYWxsIHRoaXMuCisgKgorICogVGhpcyBjYWxsIGlzIHN5bmNocm9ub3VzLCBhbmQgbWF5IG5vdCBiZSB1c2VkIGluIGFuIGludGVycnVwdCBjb250ZXh0LgorICovCit2b2lkIHVzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfZGV2aWNlICoqcGRldikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9ICpwZGV2OworCWludAkJCWk7CisKKwlpZiAoIXVkZXYpIHsKKwkJcHJfZGVidWcgKCIlcyBub2RldlxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCS8qIG1hcmsgdGhlIGRldmljZSBhcyBpbmFjdGl2ZSwgc28gYW55IGZ1cnRoZXIgdXJiIHN1Ym1pc3Npb25zIGZvcgorCSAqIHRoaXMgZGV2aWNlIChhbmQgYW55IG9mIGl0cyBjaGlsZHJlbikgd2lsbCBmYWlsIGltbWVkaWF0ZWx5LgorCSAqIHRoaXMgcXVpZXNjZXMgZXZlcnl0aW5nIGV4Y2VwdCBwZW5kaW5nIHVyYnMuCisJICovCisJdXNiX3NldF9kZXZpY2Vfc3RhdGUodWRldiwgVVNCX1NUQVRFX05PVEFUVEFDSEVEKTsKKworCS8qIGxvY2sgdGhlIGJ1cyBsaXN0IG9uIGJlaGFsZiBvZiBIQ0RzIHVucmVnaXN0ZXJpbmcgdGhlaXIgcm9vdCBodWJzICovCisJaWYgKCF1ZGV2LT5wYXJlbnQpIHsKKwkJZG93bigmdXNiX2J1c19saXN0X2xvY2spOworCQl1c2JfbG9ja19kZXZpY2UodWRldik7CisJfSBlbHNlCisJCWRvd24oJnVkZXYtPnNlcmlhbGl6ZSk7CisKKwlkZXZfaW5mbyAoJnVkZXYtPmRldiwgIlVTQiBkaXNjb25uZWN0LCBhZGRyZXNzICVkXG4iLCB1ZGV2LT5kZXZudW0pOworCisJLyogRnJlZSB1cCBhbGwgdGhlIGNoaWxkcmVuIGJlZm9yZSB3ZSByZW1vdmUgdGhpcyBkZXZpY2UgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVVNCX01BWENISUxEUkVOOyBpKyspIHsKKwkJaWYgKHVkZXYtPmNoaWxkcmVuW2ldKQorCQkJdXNiX2Rpc2Nvbm5lY3QoJnVkZXYtPmNoaWxkcmVuW2ldKTsKKwl9CisKKwkvKiBkZWFsbG9jYXRlIGhjZC9oYXJkd2FyZSBzdGF0ZSAuLi4gbnVraW5nIGFsbCBwZW5kaW5nIHVyYnMgYW5kCisJICogY2xlYW5pbmcgdXAgYWxsIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uCisJICogc28gdGhhdCB0aGUgaGFyZHdhcmUgaXMgbm93IGZ1bGx5IHF1aWVzY2VkLgorCSAqLworCXVzYl9kaXNhYmxlX2RldmljZSh1ZGV2LCAwKTsKKworCS8qIEZyZWUgdGhlIGRldmljZSBudW1iZXIsIHJlbW92ZSB0aGUgL3Byb2MvYnVzL3VzYiBlbnRyeSBhbmQKKwkgKiB0aGUgc3lzZnMgYXR0cmlidXRlcywgYW5kIGRlbGV0ZSB0aGUgcGFyZW50J3MgY2hpbGRyZW5bXQorCSAqIChvciByb290X2h1YikgcG9pbnRlci4KKwkgKi8KKwlkZXZfZGJnICgmdWRldi0+ZGV2LCAidW5yZWdpc3RlcmluZyBkZXZpY2VcbiIpOworCXJlbGVhc2VfYWRkcmVzcyh1ZGV2KTsKKwl1c2Jmc19yZW1vdmVfZGV2aWNlKHVkZXYpOworCXVzYl9yZW1vdmVfc3lzZnNfZGV2X2ZpbGVzKHVkZXYpOworCisJLyogQXZvaWQgcmFjZXMgd2l0aCByZWN1cnNpdmVseV9tYXJrX05PVEFUVEFDSEVEKCkgKi8KKwlzcGluX2xvY2tfaXJxKCZkZXZpY2Vfc3RhdGVfbG9jayk7CisJKnBkZXYgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycSgmZGV2aWNlX3N0YXRlX2xvY2spOworCisJaWYgKCF1ZGV2LT5wYXJlbnQpIHsKKwkJdXNiX3VubG9ja19kZXZpY2UodWRldik7CisJCXVwKCZ1c2JfYnVzX2xpc3RfbG9jayk7CisJfSBlbHNlCisJCXVwKCZ1ZGV2LT5zZXJpYWxpemUpOworCisJZGV2aWNlX3VucmVnaXN0ZXIoJnVkZXYtPmRldik7Cit9CisKK3N0YXRpYyBpbnQgY2hvb3NlX2NvbmZpZ3VyYXRpb24oc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJaW50IGMsIGk7CisKKwkvKiBOT1RFOiB0aGlzIHNob3VsZCBpbnRlcmFjdCB3aXRoIGh1YiBwb3dlciBidWRnZXRpbmcgKi8KKworCWMgPSB1ZGV2LT5jb25maWdbMF0uZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlOworCWlmICh1ZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKSB7CisJCWZvciAoaSA9IDA7IGkgPCB1ZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9uczsgaSsrKSB7CisJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yCSpkZXNjOworCisJCQkvKiBoZXVyaXN0aWM6ICBMaW51eCBpcyBtb3JlIGxpa2VseSB0byBoYXZlIGNsYXNzCisJCQkgKiBkcml2ZXJzLCBzbyBhdm9pZCB2ZW5kb3Itc3BlY2lmaWMgaW50ZXJmYWNlcy4KKwkJCSAqLworCQkJZGVzYyA9ICZ1ZGV2LT5jb25maWdbaV0uaW50Zl9jYWNoZVswXQorCQkJCQktPmFsdHNldHRpbmctPmRlc2M7CisJCQlpZiAoZGVzYy0+YkludGVyZmFjZUNsYXNzID09IFVTQl9DTEFTU19WRU5ET1JfU1BFQykKKwkJCQljb250aW51ZTsKKwkJCS8qIENPTU0vMi9hbGwgaXMgQ0RDIEFDTSwgZXhjZXB0IDB4ZmYgaXMgTVNGVCBSTkRJUy4KKwkJCSAqIE1TRlQgbmVlZHMgdGhpcyB0byBiZSB0aGUgZmlyc3QgY29uZmlnOyBuZXZlciB1c2UKKwkJCSAqIGl0IGFzIHRoZSBkZWZhdWx0IHVubGVzcyBMaW51eCBoYXMgaG9zdC1zaWRlIFJORElTLgorCQkJICogQSBzZWNvbmQgY29uZmlnIHdvdWxkIGlkZWFsbHkgYmUgQ0RDLUV0aGVybmV0LCBidXQKKwkJCSAqIG1heSBpbnN0ZWFkIGJlIHRoZSAidmVuZG9yIHNwZWNpZmljIiBDREMgc3Vic2V0CisJCQkgKiBsb25nIHVzZWQgYnkgQVJNIExpbnV4IGZvciBzYTExMDAgb3IgcHhhMjU1LgorCQkJICovCisJCQlpZiAoZGVzYy0+YkludGVyZmFjZUNsYXNzID09IFVTQl9DTEFTU19DT01NCisJCQkJCSYmIGRlc2MtPmJJbnRlcmZhY2VTdWJDbGFzcyA9PSAyCisJCQkJCSYmIGRlc2MtPmJJbnRlcmZhY2VQcm90b2NvbCA9PSAweGZmKSB7CisJCQkJYyA9IHVkZXYtPmNvbmZpZ1sxXS5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWU7CisJCQkJY29udGludWU7CisJCQl9CisJCQljID0gdWRldi0+Y29uZmlnW2ldLmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZTsKKwkJCWJyZWFrOworCQl9CisJCWRldl9pbmZvKCZ1ZGV2LT5kZXYsCisJCQkiY29uZmlndXJhdGlvbiAjJWQgY2hvc2VuIGZyb20gJWQgY2hvaWNlc1xuIiwKKwkJCWMsIHVkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zKTsKKwl9CisJcmV0dXJuIGM7Cit9CisKKyNpZmRlZiBERUJVRworc3RhdGljIHZvaWQgc2hvd19zdHJpbmcoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGNoYXIgKmlkLCBjaGFyICpzdHJpbmcpCit7CisJaWYgKCFzdHJpbmcpCisJCXJldHVybjsKKwlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnVkZXYtPmRldiwgIiVzOiAlc1xuIiwgaWQsIHN0cmluZyk7Cit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgc2hvd19zdHJpbmcoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGNoYXIgKmlkLCBjaGFyICpzdHJpbmcpCit7fQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGdldF9zdHJpbmcoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGNoYXIgKipzdHJpbmcsIGludCBpbmRleCkKK3sKKwljaGFyICpidWY7CisKKwlpZiAoIWluZGV4KQorCQlyZXR1cm47CisJYnVmID0ga21hbGxvYygyNTYsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm47CisJaWYgKHVzYl9zdHJpbmcodWRldiwgaW5kZXgsIGJ1ZiwgMjU2KSA+IDApCisJCSpzdHJpbmcgPSBidWY7CisJZWxzZQorCQlrZnJlZShidWYpOworfQorCisKKyNpZmRlZglDT05GSUdfVVNCX09URworI2luY2x1ZGUgIm90Z193aGl0ZWxpc3QuaCIKKyNlbmRpZgorCisvKioKKyAqIHVzYl9uZXdfZGV2aWNlIC0gcGVyZm9ybSBpbml0aWFsIGRldmljZSBzZXR1cCAodXNiY29yZS1pbnRlcm5hbCkKKyAqIEB1ZGV2OiBuZXdseSBhZGRyZXNzZWQgZGV2aWNlIChpbiBBRERSRVNTIHN0YXRlKQorICoKKyAqIFRoaXMgaXMgY2FsbGVkIHdpdGggZGV2aWNlcyB3aGljaCBoYXZlIGJlZW4gZW51bWVyYXRlZCwgYnV0IG5vdCB5ZXQKKyAqIGNvbmZpZ3VyZWQuICBUaGUgZGV2aWNlIGRlc2NyaXB0b3IgaXMgYXZhaWxhYmxlLCBidXQgbm90IGRlc2NyaXB0b3JzCisgKiBmb3IgYW55IGRldmljZSBjb25maWd1cmF0aW9uLiAgVGhlIGNhbGxlciBtdXN0IGhhdmUgbG9ja2VkIHVkZXYgYW5kCisgKiBlaXRoZXIgdGhlIHBhcmVudCBodWIgKGlmIHVkZXYgaXMgYSBub3JtYWwgZGV2aWNlKSBvciBlbHNlIHRoZQorICogdXNiX2J1c19saXN0X2xvY2sgKGlmIHVkZXYgaXMgYSByb290IGh1YikuICBUaGUgcGFyZW50J3MgcG9pbnRlciB0bworICogdWRldiBoYXMgYWxyZWFkeSBiZWVuIGluc3RhbGxlZCwgYnV0IHVkZXYgaXMgbm90IHlldCB2aXNpYmxlIHRocm91Z2gKKyAqIHN5c2ZzIG9yIG90aGVyIGZpbGVzeXN0ZW0gY29kZS4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MgKGRldmljZSBpcyBjb25maWd1cmVkIGFuZCBsaXN0ZWQsIHdpdGggaXRzCisgKiBpbnRlcmZhY2VzLCBpbiBzeXNmcyk7IGVsc2UgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZS4KKyAqCisgKiBUaGlzIGNhbGwgaXMgc3luY2hyb25vdXMsIGFuZCBtYXkgbm90IGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQuCisgKgorICogT25seSB0aGUgaHViIGRyaXZlciBzaG91bGQgZXZlciBjYWxsIHRoaXM7IHJvb3QgaHViIHJlZ2lzdHJhdGlvbgorICogdXNlcyBpdCBpbmRpcmVjdGx5LgorICovCitpbnQgdXNiX25ld19kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJaW50IGVycjsKKwlpbnQgYzsKKworCWVyciA9IHVzYl9nZXRfY29uZmlndXJhdGlvbih1ZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJjYW4ndCByZWFkIGNvbmZpZ3VyYXRpb25zLCBlcnJvciAlZFxuIiwKKwkJCWVycik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiByZWFkIHRoZSBzdGFuZGFyZCBzdHJpbmdzIGFuZCBjYWNoZSB0aGVtIGlmIHByZXNlbnQgKi8KKwlnZXRfc3RyaW5nKHVkZXYsICZ1ZGV2LT5wcm9kdWN0LCB1ZGV2LT5kZXNjcmlwdG9yLmlQcm9kdWN0KTsKKwlnZXRfc3RyaW5nKHVkZXYsICZ1ZGV2LT5tYW51ZmFjdHVyZXIsIHVkZXYtPmRlc2NyaXB0b3IuaU1hbnVmYWN0dXJlcik7CisJZ2V0X3N0cmluZyh1ZGV2LCAmdWRldi0+c2VyaWFsLCB1ZGV2LT5kZXNjcmlwdG9yLmlTZXJpYWxOdW1iZXIpOworCisJLyogVGVsbCB0aGUgd29ybGQhICovCisJZGV2X2RiZygmdWRldi0+ZGV2LCAibmV3IGRldmljZSBzdHJpbmdzOiBNZnI9JWQsIFByb2R1Y3Q9JWQsICIKKwkJCSJTZXJpYWxOdW1iZXI9JWRcbiIsCisJCQl1ZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIsCisJCQl1ZGV2LT5kZXNjcmlwdG9yLmlQcm9kdWN0LAorCQkJdWRldi0+ZGVzY3JpcHRvci5pU2VyaWFsTnVtYmVyKTsKKwlzaG93X3N0cmluZyh1ZGV2LCAiUHJvZHVjdCIsIHVkZXYtPnByb2R1Y3QpOworCXNob3dfc3RyaW5nKHVkZXYsICJNYW51ZmFjdHVyZXIiLCB1ZGV2LT5tYW51ZmFjdHVyZXIpOworCXNob3dfc3RyaW5nKHVkZXYsICJTZXJpYWxOdW1iZXIiLCB1ZGV2LT5zZXJpYWwpOworCisjaWZkZWYJQ09ORklHX1VTQl9PVEcKKwkvKgorCSAqIE9URy1hd2FyZSBkZXZpY2VzIG9uIE9URy1jYXBhYmxlIHJvb3QgaHVicyBtYXkgYmUgYWJsZSB0byB1c2UgU1JQLAorCSAqIHRvIHdha2UgdXMgYWZ0ZXIgd2UndmUgcG93ZXJlZCBvZmYgVkJVUzsgYW5kIEhOUCwgc3dpdGNoaW5nIHJvbGVzCisJICogImhvc3QiIHRvICJwZXJpcGhlcmFsIi4gIFRoZSBPVEcgZGVzY3JpcHRvciBoZWxwcyBmaWd1cmUgdGhpcyBvdXQuCisJICovCisJaWYgKCF1ZGV2LT5idXMtPmlzX2JfaG9zdAorCQkJJiYgdWRldi0+Y29uZmlnCisJCQkmJiB1ZGV2LT5wYXJlbnQgPT0gdWRldi0+YnVzLT5yb290X2h1YikgeworCQlzdHJ1Y3QgdXNiX290Z19kZXNjcmlwdG9yCSpkZXNjID0gMDsKKwkJc3RydWN0IHVzYl9idXMJCQkqYnVzID0gdWRldi0+YnVzOworCisJCS8qIGRlc2NyaXB0b3IgbWF5IGFwcGVhciBhbnl3aGVyZSBpbiBjb25maWcgKi8KKwkJaWYgKF9fdXNiX2dldF9leHRyYV9kZXNjcmlwdG9yICh1ZGV2LT5yYXdkZXNjcmlwdG9yc1swXSwKKwkJCQkJbGUxNl90b19jcHUodWRldi0+Y29uZmlnWzBdLmRlc2Mud1RvdGFsTGVuZ3RoKSwKKwkJCQkJVVNCX0RUX09URywgKHZvaWQgKiopICZkZXNjKSA9PSAwKSB7CisJCQlpZiAoZGVzYy0+Ym1BdHRyaWJ1dGVzICYgVVNCX09UR19ITlApIHsKKwkJCQl1bnNpZ25lZAkJcG9ydDE7CisJCQkJc3RydWN0IHVzYl9kZXZpY2UJKnJvb3QgPSB1ZGV2LT5wYXJlbnQ7CisJCQkJCisJCQkJZm9yIChwb3J0MSA9IDE7IHBvcnQxIDw9IHJvb3QtPm1heGNoaWxkOworCQkJCQkJcG9ydDErKykgeworCQkJCQlpZiAocm9vdC0+Y2hpbGRyZW5bcG9ydDEtMV0gPT0gdWRldikKKwkJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCWRldl9pbmZvKCZ1ZGV2LT5kZXYsCisJCQkJCSJEdWFsLVJvbGUgT1RHIGRldmljZSBvbiAlc0hOUCBwb3J0XG4iLAorCQkJCQkocG9ydDEgPT0gYnVzLT5vdGdfcG9ydCkKKwkJCQkJCT8gIiIgOiAibm9uLSIpOworCisJCQkJLyogZW5hYmxlIEhOUCBiZWZvcmUgc3VzcGVuZCwgaXQncyBzaW1wbGVyICovCisJCQkJaWYgKHBvcnQxID09IGJ1cy0+b3RnX3BvcnQpCisJCQkJCWJ1cy0+Yl9obnBfZW5hYmxlID0gMTsKKwkJCQllcnIgPSB1c2JfY29udHJvbF9tc2codWRldiwKKwkJCQkJdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLAorCQkJCQlVU0JfUkVRX1NFVF9GRUFUVVJFLCAwLAorCQkJCQlidXMtPmJfaG5wX2VuYWJsZQorCQkJCQkJPyBVU0JfREVWSUNFX0JfSE5QX0VOQUJMRQorCQkJCQkJOiBVU0JfREVWSUNFX0FfQUxUX0hOUF9TVVBQT1JULAorCQkJCQkwLCBOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJCQkJaWYgKGVyciA8IDApIHsKKwkJCQkJLyogT1RHIE1FU1NBR0U6IHJlcG9ydCBlcnJvcnMgaGVyZSwKKwkJCQkJICogY3VzdG9taXplIHRvIG1hdGNoIHlvdXIgcHJvZHVjdC4KKwkJCQkJICovCisJCQkJCWRldl9pbmZvKCZ1ZGV2LT5kZXYsCisJCQkJCQkiY2FuJ3Qgc2V0IEhOUCBtb2RlOyAlZFxuIiwKKwkJCQkJCWVycik7CisJCQkJCWJ1cy0+Yl9obnBfZW5hYmxlID0gMDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlpZiAoIWlzX3RhcmdldGVkKHVkZXYpKSB7CisKKwkJLyogTWF5YmUgaXQgY2FuIHRhbGsgdG8gdXMsIHRob3VnaCB3ZSBjYW4ndCB0YWxrIHRvIGl0LgorCQkgKiAoSW5jbHVkZXMgSE5QIHRlc3QgZGV2aWNlLikKKwkJICovCisJCWlmICh1ZGV2LT5idXMtPmJfaG5wX2VuYWJsZSB8fCB1ZGV2LT5idXMtPmlzX2JfaG9zdCkgeworCQkJc3RhdGljIGludCBfX3VzYl9zdXNwZW5kX2RldmljZSAoc3RydWN0IHVzYl9kZXZpY2UgKiwKKwkJCQkJCWludCBwb3J0MSwgcG1fbWVzc2FnZV90IHN0YXRlKTsKKwkJCWVyciA9IF9fdXNiX3N1c3BlbmRfZGV2aWNlKHVkZXYsCisJCQkJCXVkZXYtPmJ1cy0+b3RnX3BvcnQsCisJCQkJCVBNU0dfU1VTUEVORCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJITlAgZmFpbCwgJWRcbiIsIGVycik7CisJCX0KKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBmYWlsOworCX0KKyNlbmRpZgorCisJLyogcHV0IGRldmljZS1zcGVjaWZpYyBmaWxlcyBpbnRvIHN5c2ZzICovCisJZXJyID0gZGV2aWNlX2FkZCAoJnVkZXYtPmRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJjYW4ndCBkZXZpY2VfYWRkLCBlcnJvciAlZFxuIiwgZXJyKTsKKwkJZ290byBmYWlsOworCX0KKwl1c2JfY3JlYXRlX3N5c2ZzX2Rldl9maWxlcyAodWRldik7CisKKwkvKiBjaG9vc2UgYW5kIHNldCB0aGUgY29uZmlndXJhdGlvbi4gdGhhdCByZWdpc3RlcnMgdGhlIGludGVyZmFjZXMKKwkgKiB3aXRoIHRoZSBkcml2ZXIgY29yZSwgYW5kIGxldHMgdXNiIGRldmljZSBkcml2ZXJzIGJpbmQgdG8gdGhlbS4KKwkgKi8KKwljID0gY2hvb3NlX2NvbmZpZ3VyYXRpb24odWRldik7CisJaWYgKGMgPCAwKQorCQlkZXZfd2FybigmdWRldi0+ZGV2LAorCQkJCSJjYW4ndCBjaG9vc2UgYW4gaW5pdGlhbCBjb25maWd1cmF0aW9uXG4iKTsKKwllbHNlIHsKKwkJZXJyID0gdXNiX3NldF9jb25maWd1cmF0aW9uKHVkZXYsIGMpOworCQlpZiAoZXJyKSB7CisJCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJjYW4ndCBzZXQgY29uZmlnICMlZCwgZXJyb3IgJWRcbiIsCisJCQkJCWMsIGVycik7CisJCQl1c2JfcmVtb3ZlX3N5c2ZzX2Rldl9maWxlcyh1ZGV2KTsKKwkJCWRldmljZV9kZWwoJnVkZXYtPmRldik7CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisKKwkvKiBVU0IgZGV2aWNlIHN0YXRlID09IGNvbmZpZ3VyZWQgLi4uIHVzYWJsZSAqLworCisJLyogYWRkIGEgL3Byb2MvYnVzL3VzYiBlbnRyeSAqLworCXVzYmZzX2FkZF9kZXZpY2UodWRldik7CisJcmV0dXJuIDA7CisKK2ZhaWw6CisJdXNiX3NldF9kZXZpY2Vfc3RhdGUodWRldiwgVVNCX1NUQVRFX05PVEFUVEFDSEVEKTsKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgaHViX3BvcnRfc3RhdHVzKHN0cnVjdCB1c2JfaHViICpodWIsIGludCBwb3J0MSwKKwkJCSAgICAgICB1MTYgKnN0YXR1cywgdTE2ICpjaGFuZ2UpCit7CisJaW50IHJldDsKKworCXJldCA9IGdldF9wb3J0X3N0YXR1cyhodWItPmhkZXYsIHBvcnQxLCAmaHViLT5zdGF0dXMtPnBvcnQpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyIChodWItPmludGZkZXYsCisJCQkiJXMgZmFpbGVkIChlcnIgPSAlZClcbiIsIF9fRlVOQ1RJT05fXywgcmV0KTsKKwllbHNlIHsKKwkJKnN0YXR1cyA9IGxlMTZfdG9fY3B1KGh1Yi0+c3RhdHVzLT5wb3J0LndQb3J0U3RhdHVzKTsKKwkJKmNoYW5nZSA9IGxlMTZfdG9fY3B1KGh1Yi0+c3RhdHVzLT5wb3J0LndQb3J0Q2hhbmdlKTsgCisJCXJldCA9IDA7CisJfQorCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgUE9SVF9SRVNFVF9UUklFUwk1CisjZGVmaW5lIFNFVF9BRERSRVNTX1RSSUVTCTIKKyNkZWZpbmUgR0VUX0RFU0NSSVBUT1JfVFJJRVMJMgorI2RlZmluZSBTRVRfQ09ORklHX1RSSUVTCSgyICogKHVzZV9ib3RoX3NjaGVtZXMgKyAxKSkKKyNkZWZpbmUgVVNFX05FV19TQ0hFTUUoaSkJKChpKSAvIDIgPT0gb2xkX3NjaGVtZV9maXJzdCkKKworI2RlZmluZSBIVUJfUk9PVF9SRVNFVF9USU1FCTUwCS8qIHRpbWVzIGFyZSBpbiBtc2VjICovCisjZGVmaW5lIEhVQl9TSE9SVF9SRVNFVF9USU1FCTEwCisjZGVmaW5lIEhVQl9MT05HX1JFU0VUX1RJTUUJMjAwCisjZGVmaW5lIEhVQl9SRVNFVF9USU1FT1VUCTUwMAorCitzdGF0aWMgaW50IGh1Yl9wb3J0X3dhaXRfcmVzZXQoc3RydWN0IHVzYl9odWIgKmh1YiwgaW50IHBvcnQxLAorCQkJCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1bnNpZ25lZCBpbnQgZGVsYXkpCit7CisJaW50IGRlbGF5X3RpbWUsIHJldDsKKwl1MTYgcG9ydHN0YXR1czsKKwl1MTYgcG9ydGNoYW5nZTsKKworCWZvciAoZGVsYXlfdGltZSA9IDA7CisJCQlkZWxheV90aW1lIDwgSFVCX1JFU0VUX1RJTUVPVVQ7CisJCQlkZWxheV90aW1lICs9IGRlbGF5KSB7CisJCS8qIHdhaXQgdG8gZ2l2ZSB0aGUgZGV2aWNlIGEgY2hhbmNlIHRvIHJlc2V0ICovCisJCW1zbGVlcChkZWxheSk7CisKKwkJLyogcmVhZCBhbmQgZGVjb2RlIHBvcnQgc3RhdHVzICovCisJCXJldCA9IGh1Yl9wb3J0X3N0YXR1cyhodWIsIHBvcnQxLCAmcG9ydHN0YXR1cywgJnBvcnRjaGFuZ2UpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJLyogRGV2aWNlIHdlbnQgYXdheT8gKi8KKwkJaWYgKCEocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTikpCisJCQlyZXR1cm4gLUVOT1RDT05OOworCisJCS8qIGJvbWIgb3V0IGNvbXBsZXRlbHkgaWYgc29tZXRoaW5nIHdlaXJkIGhhcHBlbmVkICovCisJCWlmICgocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19DT05ORUNUSU9OKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCS8qIGlmIHdlYHZlIGZpbmlzaGVkIHJlc2V0dGluZywgdGhlbiBicmVhayBvdXQgb2YgdGhlIGxvb3AgKi8KKwkJaWYgKCEocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfUkVTRVQpICYmCisJCSAgICAocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfRU5BQkxFKSkgeworCQkJaWYgKHBvcnRzdGF0dXMgJiBVU0JfUE9SVF9TVEFUX0hJR0hfU1BFRUQpCisJCQkJdWRldi0+c3BlZWQgPSBVU0JfU1BFRURfSElHSDsKKwkJCWVsc2UgaWYgKHBvcnRzdGF0dXMgJiBVU0JfUE9SVF9TVEFUX0xPV19TUEVFRCkKKwkJCQl1ZGV2LT5zcGVlZCA9IFVTQl9TUEVFRF9MT1c7CisJCQllbHNlCisJCQkJdWRldi0+c3BlZWQgPSBVU0JfU1BFRURfRlVMTDsKKwkJCXJldHVybiAwOworCQl9CisKKwkJLyogc3dpdGNoIHRvIHRoZSBsb25nIGRlbGF5IGFmdGVyIHR3byBzaG9ydCBkZWxheSBmYWlsdXJlcyAqLworCQlpZiAoZGVsYXlfdGltZSA+PSAyICogSFVCX1NIT1JUX1JFU0VUX1RJTUUpCisJCQlkZWxheSA9IEhVQl9MT05HX1JFU0VUX1RJTUU7CisKKwkJZGV2X2RiZyAoaHViLT5pbnRmZGV2LAorCQkJInBvcnQgJWQgbm90IHJlc2V0IHlldCwgd2FpdGluZyAlZG1zXG4iLAorCQkJcG9ydDEsIGRlbGF5KTsKKwl9CisKKwlyZXR1cm4gLUVCVVNZOworfQorCitzdGF0aWMgaW50IGh1Yl9wb3J0X3Jlc2V0KHN0cnVjdCB1c2JfaHViICpodWIsIGludCBwb3J0MSwKKwkJCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdW5zaWduZWQgaW50IGRlbGF5KQoreworCWludCBpLCBzdGF0dXM7CisKKwkvKiBSZXNldCB0aGUgcG9ydCAqLworCWZvciAoaSA9IDA7IGkgPCBQT1JUX1JFU0VUX1RSSUVTOyBpKyspIHsKKwkJc3RhdHVzID0gc2V0X3BvcnRfZmVhdHVyZShodWItPmhkZXYsCisJCQkJcG9ydDEsIFVTQl9QT1JUX0ZFQVRfUkVTRVQpOworCQlpZiAoc3RhdHVzKQorCQkJZGV2X2VycihodWItPmludGZkZXYsCisJCQkJCSJjYW5ub3QgcmVzZXQgcG9ydCAlZCAoZXJyID0gJWQpXG4iLAorCQkJCQlwb3J0MSwgc3RhdHVzKTsKKwkJZWxzZSB7CisJCQlzdGF0dXMgPSBodWJfcG9ydF93YWl0X3Jlc2V0KGh1YiwgcG9ydDEsIHVkZXYsIGRlbGF5KTsKKwkJCWlmIChzdGF0dXMpCisJCQkJZGV2X2RiZyhodWItPmludGZkZXYsCisJCQkJCQkicG9ydF93YWl0X3Jlc2V0OiBlcnIgPSAlZFxuIiwKKwkJCQkJCXN0YXR1cyk7CisJCX0KKworCQkvKiByZXR1cm4gb24gZGlzY29ubmVjdCBvciByZXNldCAqLworCQlzd2l0Y2ggKHN0YXR1cykgeworCQljYXNlIDA6CisJCQkvKiBUUlNUUkNZID0gMTAgbXMgKi8KKwkJCW1zbGVlcCgxMCk7CisJCQkvKiBGQUxMIFRIUk9VR0ggKi8KKwkJY2FzZSAtRU5PVENPTk46CisJCWNhc2UgLUVOT0RFVjoKKwkJCWNsZWFyX3BvcnRfZmVhdHVyZShodWItPmhkZXYsCisJCQkJcG9ydDEsIFVTQl9QT1JUX0ZFQVRfQ19SRVNFVCk7CisJCQkvKiBGSVhNRSBuZWVkIGRpc2Nvbm5lY3QoKSBmb3IgTk9UQVRUQUNIRUQgZGV2aWNlICovCisJCQl1c2Jfc2V0X2RldmljZV9zdGF0ZSh1ZGV2LCBzdGF0dXMKKwkJCQkJPyBVU0JfU1RBVEVfTk9UQVRUQUNIRUQKKwkJCQkJOiBVU0JfU1RBVEVfREVGQVVMVCk7CisJCQlyZXR1cm4gc3RhdHVzOworCQl9CisKKwkJZGV2X2RiZyAoaHViLT5pbnRmZGV2LAorCQkJInBvcnQgJWQgbm90IGVuYWJsZWQsIHRyeWluZyByZXNldCBhZ2Fpbi4uLlxuIiwKKwkJCXBvcnQxKTsKKwkJZGVsYXkgPSBIVUJfTE9OR19SRVNFVF9USU1FOworCX0KKworCWRldl9lcnIgKGh1Yi0+aW50ZmRldiwKKwkJIkNhbm5vdCBlbmFibGUgcG9ydCAlaS4gIE1heWJlIHRoZSBVU0IgY2FibGUgaXMgYmFkP1xuIiwKKwkJcG9ydDEpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBodWJfcG9ydF9kaXNhYmxlKHN0cnVjdCB1c2JfaHViICpodWIsIGludCBwb3J0MSwgaW50IHNldF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IGh1Yi0+aGRldjsKKwlpbnQgcmV0OworCisJaWYgKGhkZXYtPmNoaWxkcmVuW3BvcnQxLTFdICYmIHNldF9zdGF0ZSkgeworCQl1c2Jfc2V0X2RldmljZV9zdGF0ZShoZGV2LT5jaGlsZHJlbltwb3J0MS0xXSwKKwkJCQlVU0JfU1RBVEVfTk9UQVRUQUNIRUQpOworCX0KKwlyZXQgPSBjbGVhcl9wb3J0X2ZlYXR1cmUoaGRldiwgcG9ydDEsIFVTQl9QT1JUX0ZFQVRfRU5BQkxFKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGh1Yi0+aW50ZmRldiwgImNhbm5vdCBkaXNhYmxlIHBvcnQgJWQgKGVyciA9ICVkKVxuIiwKKwkJCXBvcnQxLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERpc2FibGUgYSBwb3J0IGFuZCBtYXJrIGEgbG9naWNhbCBjb25ubmVjdC1jaGFuZ2UgZXZlbnQsIHNvIHRoYXQgc29tZQorICogdGltZSBsYXRlciBraHViZCB3aWxsIGRpc2Nvbm5lY3QoKSBhbnkgZXhpc3RpbmcgdXNiX2RldmljZSBvbiB0aGUgcG9ydAorICogYW5kIHdpbGwgcmUtZW51bWVyYXRlIGlmIHRoZXJlIGFjdHVhbGx5IGlzIGEgZGV2aWNlIGF0dGFjaGVkLgorICovCitzdGF0aWMgdm9pZCBodWJfcG9ydF9sb2dpY2FsX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9odWIgKmh1YiwgaW50IHBvcnQxKQoreworCWRldl9kYmcoaHViLT5pbnRmZGV2LCAibG9naWNhbCBkaXNjb25uZWN0IG9uIHBvcnQgJWRcbiIsIHBvcnQxKTsKKwlodWJfcG9ydF9kaXNhYmxlKGh1YiwgcG9ydDEsIDEpOworCisJLyogRklYTUUgbGV0IGNhbGxlciBhc2sgdG8gcG93ZXIgZG93biB0aGUgcG9ydDoKKwkgKiAgLSBzb21lIGRldmljZXMgd29uJ3QgZW51bWVyYXRlIHdpdGhvdXQgYSBWQlVTIHBvd2VyIGN5Y2xlCisJICogIC0gU1JQIHNhdmVzIHBvd2VyIHRoYXQgd2F5CisJICogIC0gdXNiX3N1c3BlbmRfZGV2aWNlKGRldixQTV9TVVNQRU5EX0RJU0spCisJICogVGhhdCdzIGVhc3kgaWYgdGhpcyBodWIgY2FuIHN3aXRjaCBwb3dlciBwZXItcG9ydCwgYW5kCisJICoga2h1YmQgcmVhY3RpdmF0ZXMgdGhlIHBvcnQgbGF0ZXIgKHRpbWVyLCBTUlAsIGV0YykuCisJICogUG93ZXJkb3duIG11c3QgYmUgb3B0aW9uYWwsIGJlY2F1c2Ugb2YgcmVzZXQvREZVLgorCSAqLworCisJc2V0X2JpdChwb3J0MSwgaHViLT5jaGFuZ2VfYml0cyk7CisgCWtpY2tfa2h1YmQoaHViKTsKK30KKworCisjaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECisKKy8qCisgKiBTZWxlY3RpdmUgcG9ydCBzdXNwZW5kIHJlZHVjZXMgcG93ZXI7IG1vc3Qgc3VzcGVuZGVkIGRldmljZXMgZHJhdworICogbGVzcyB0aGFuIDUwMCB1QS4gIEl0J3MgYWxzbyB1c2VkIGluIE9URywgYWxvbmcgd2l0aCByZW1vdGUgd2FrZXVwLgorICogQWxsIGRldmljZXMgYmVsb3cgdGhlIHN1c3BlbmRlZCBwb3J0IGFyZSBhbHNvIHN1c3BlbmRlZC4KKyAqCisgKiBEZXZpY2VzIGxlYXZlIHN1c3BlbmQgc3RhdGUgd2hlbiB0aGUgaG9zdCB3YWtlcyB0aGVtIHVwLiAgU29tZSBkZXZpY2VzCisgKiBhbHNvIHN1cHBvcnQgInJlbW90ZSB3YWtldXAiLCB3aGVyZSB0aGUgZGV2aWNlIGNhbiBhY3RpdmF0ZSB0aGUgVVNCCisgKiB0cmVlIGFib3ZlIHRoZW0gdG8gZGVsaXZlciBkYXRhLCBzdWNoIGFzIGEga2V5cHJlc3Mgb3IgcGFja2V0LiAgSW4KKyAqIHNvbWUgY2FzZXMsIHRoaXMgd2FrZXMgdGhlIFVTQiBob3N0LgorICovCitzdGF0aWMgaW50IGh1Yl9wb3J0X3N1c3BlbmQoc3RydWN0IHVzYl9odWIgKmh1YiwgaW50IHBvcnQxLAorCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpbnQJc3RhdHVzOworCisJLy8gZGV2X2RiZyhodWItPmludGZkZXYsICJzdXNwZW5kIHBvcnQgJWRcbiIsIHBvcnQxKTsKKworCS8qIGVuYWJsZSByZW1vdGUgd2FrZXVwIHdoZW4gYXBwcm9wcmlhdGU7IHRoaXMgbGV0cyB0aGUgZGV2aWNlCisJICogd2FrZSB1cCB0aGUgdXBzdHJlYW0gaHViIChpbmNsdWRpbmcgbWF5YmUgdGhlIHJvb3QgaHViKS4KKwkgKgorCSAqIE5PVEU6ICBPVEcgZGV2aWNlcyBtYXkgaXNzdWUgcmVtb3RlIHdha2V1cCAob3IgU1JQKSBldmVuIHdoZW4KKwkgKiB3ZSBkb24ndCBleHBsaWNpdGx5IGVuYWJsZSBpdCBoZXJlLgorCSAqLworCWlmICh1ZGV2LT5hY3Rjb25maWcKKwkJCS8vICYmIEZJWE1FIChyZW1vdGUgd2FrZXVwIGVuYWJsZWQgb24gdGhpcyBidXMpCisJCQkvLyAuLi4gY3VycmVudGx5IGFzc3VtaW5nIGl0J3MgYWx3YXlzIGFwcHJvcHJpYXRlCisJCQkmJiAodWRldi0+YWN0Y29uZmlnLT5kZXNjLmJtQXR0cmlidXRlcworCQkJCSYgVVNCX0NPTkZJR19BVFRfV0FLRVVQKSAhPSAwKSB7CisJCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJCQkJVVNCX1JFUV9TRVRfRkVBVFVSRSwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCQlVU0JfREVWSUNFX1JFTU9URV9XQUtFVVAsIDAsCisJCQkJTlVMTCwgMCwKKwkJCQlVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJCWlmIChzdGF0dXMpCisJCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsCisJCQkJIndvbid0IHJlbW90ZSB3YWtldXAsIHN0YXR1cyAlZFxuIiwKKwkJCQlzdGF0dXMpOworCX0KKworCS8qIHNlZSA3LjEuNy42ICovCisJc3RhdHVzID0gc2V0X3BvcnRfZmVhdHVyZShodWItPmhkZXYsIHBvcnQxLCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2RiZyhodWItPmludGZkZXYsCisJCQkiY2FuJ3Qgc3VzcGVuZCBwb3J0ICVkLCBzdGF0dXMgJWRcbiIsCisJCQlwb3J0MSwgc3RhdHVzKTsKKwkJLyogcGFyYW5vaWE6ICAic2hvdWxkIG5vdCBoYXBwZW4iICovCisJCSh2b2lkKSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLAorCQkJCVVTQl9SRVFfQ0xFQVJfRkVBVFVSRSwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCQlVU0JfREVWSUNFX1JFTU9URV9XQUtFVVAsIDAsCisJCQkJTlVMTCwgMCwKKwkJCQlVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJfSBlbHNlIHsKKwkJLyogZGV2aWNlIGhhcyB1cCB0byAxMCBtc2VjIHRvIGZ1bGx5IHN1c3BlbmQgKi8KKwkJZGV2X2RiZygmdWRldi0+ZGV2LCAidXNiIHN1c3BlbmRcbiIpOworCQl1c2Jfc2V0X2RldmljZV9zdGF0ZSh1ZGV2LCBVU0JfU1RBVEVfU1VTUEVOREVEKTsKKwkJbXNsZWVwKDEwKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIERldmljZXMgb24gVVNCIGh1YiBwb3J0cyBoYXZlIG9ubHkgb25lICJzdXNwZW5kIiBzdGF0ZSwgY29ycmVzcG9uZGluZworICogdG8gQUNQSSBEMiAoUE1fU1VTUEVORF9NRU0pLCAibWF5IGNhdXNlIHRoZSBkZXZpY2UgdG8gbG9zZSBzb21lIGNvbnRleHQiLgorICogU3RhdGUgdHJhbnNpdGlvbnMgaW5jbHVkZToKKyAqCisgKiAgIC0gc3VzcGVuZCwgcmVzdW1lIC4uLiB3aGVuIHRoZSBWQlVTIHBvd2VyIGxpbmsgc3RheXMgbGl2ZQorICogICAtIHN1c3BlbmQsIGRpc2Nvbm5lY3QgLi4uIFZCVVMgbG9zdAorICoKKyAqIE9uY2UgVkJVUyBkcm9wIGJyZWFrcyB0aGUgY2lyY3VpdCwgdGhlIHBvcnQgaXQncyB1c2luZyBoYXMgdG8gZ28gdGhyb3VnaAorICogbm9ybWFsIHJlLWVudW1lcmF0aW9uIHByb2NlZHVyZXMsIHN0YXJ0aW5nIHdpdGggZW5hYmxpbmcgVkJVUyBwb3dlci4KKyAqIE90aGVyIHRoYW4gcmUtaW5pdGlhbGl6aW5nIHRoZSBodWIgKHBsdWcvdW5wbHVnLCBleGNlcHQgZm9yIHJvb3QgaHVicyksCisgKiBMaW51eCAoMi42KSBjdXJyZW50bHkgaGFzIE5PIG1lY2hhbmlzbXMgdG8gaW5pdGlhdGUgdGhhdDogIG5vIGtodWJkCisgKiB0aW1lciwgbm8gU1JQLCBubyByZXF1ZXN0cyB0aHJvdWdoIHN5c2ZzLgorICovCitzdGF0aWMgaW50IF9fdXNiX3N1c3BlbmRfZGV2aWNlIChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50IHBvcnQxLAorCQkJCSBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJaW50CXN0YXR1czsKKworCS8qIGNhbGxlciBvd25zIHRoZSB1ZGV2IGRldmljZSBsb2NrICovCisJaWYgKHBvcnQxIDwgMCkKKwkJcmV0dXJuIHBvcnQxOworCisJaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQKKwkJCXx8IHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCkgeworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBzdXNwZW5kIGludGVyZmFjZSBkcml2ZXJzOyBpZiB0aGlzIGlzIGEgaHViLCBpdAorCSAqIHN1c3BlbmRzIHRoZSBjaGlsZCBkZXZpY2VzCisJICovCisJaWYgKHVkZXYtPmFjdGNvbmZpZykgeworCQlpbnQJaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgdWRldi0+YWN0Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOyBpKyspIHsKKwkJCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSppbnRmOworCQkJc3RydWN0IHVzYl9kcml2ZXIJKmRyaXZlcjsKKworCQkJaW50ZiA9IHVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldOworCQkJaWYgKHN0YXRlIDw9IGludGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSkKKwkJCQljb250aW51ZTsKKwkJCWlmICghaW50Zi0+ZGV2LmRyaXZlcikKKwkJCQljb250aW51ZTsKKwkJCWRyaXZlciA9IHRvX3VzYl9kcml2ZXIoaW50Zi0+ZGV2LmRyaXZlcik7CisKKwkJCWlmIChkcml2ZXItPnN1c3BlbmQpIHsKKwkJCQlzdGF0dXMgPSBkcml2ZXItPnN1c3BlbmQoaW50Ziwgc3RhdGUpOworCQkJCWlmIChpbnRmLT5kZXYucG93ZXIucG93ZXJfc3RhdGUgIT0gc3RhdGUKKwkJCQkJCXx8IHN0YXR1cykKKwkJCQkJZGV2X2VycigmaW50Zi0+ZGV2LAorCQkJCQkJInN1c3BlbmQgJWQgZmFpbCwgY29kZSAlZFxuIiwKKwkJCQkJCXN0YXRlLCBzdGF0dXMpOworCQkJfQorCisJCQkvKiBvbmx5IGRyaXZlcnMgd2l0aCBzdXNwZW5kKCkgY2FuIGV2ZXIgcmVzdW1lKCk7CisJCQkgKiBhbmQgYWZ0ZXIgcG93ZXIgbG9zcywgZXZlbiB0aGV5IHdvbid0LgorCQkJICogYnVzX3Jlc2Nhbl9kZXZpY2VzKCkgY2FuIHJlYmluZCBkcml2ZXJzIGxhdGVyLgorCQkJICoKKwkJCSAqIEZJWE1FIHRoZSBQTSBjb3JlIHNlbGYtZGVhZGxvY2tzIHdoZW4gdW5iaW5kaW5nCisJCQkgKiBkcml2ZXJzIGR1cmluZyBzdXNwZW5kL3Jlc3VtZSAuLi4gZXZlcnl0aGluZyBncmFicworCQkJICogZHBtX3NlbSAobm90IGEgc3BpbmxvY2ssIHVnaCkuICB3ZSB3YW50IHRvIHVuYmluZCwKKwkJCSAqIHNpbmNlIHdlIGtub3cgZXZlcnkgZHJpdmVyJ3MgcHJvYmUvZGlzY29ubmVjdCB3b3JrcworCQkJICogZXZlbiBmb3IgZHJpdmVycyB0aGF0IGNhbid0IHN1c3BlbmQuCisJCQkgKi8KKwkJCWlmICghZHJpdmVyLT5zdXNwZW5kIHx8IHN0YXRlID4gUE1fU1VTUEVORF9NRU0pIHsKKyNpZiAxCisJCQkJZGV2X3dhcm4oJmludGYtPmRldiwgInJlc3VtZSBpcyB1bnNhZmUhXG4iKTsKKyNlbHNlCisJCQkJZG93bl93cml0ZSgmdXNiX2J1c190eXBlLnJ3c2VtKTsKKwkJCQlkZXZpY2VfcmVsZWFzZV9kcml2ZXIoJmludGYtPmRldik7CisJCQkJdXBfd3JpdGUoJnVzYl9idXNfdHlwZS5yd3NlbSk7CisjZW5kaWYKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogRklYTUUgdGhpcyBuZWVkcyBwb3J0IHBvd2VyIG9mZiBjYWxsIHBhdGhzIHRvbywgdG8gaGVscCBmb3JjZQorCSAqIFVTQiBpbnRvIHRoZSAiZ2VuZXJpYyIgUE0gbW9kZWwuICBBdCBsZWFzdCBmb3IgZGV2aWNlcyBvbgorCSAqIHBvcnRzIHRoYXQgYXJlbid0IHVzaW5nIGdhbmdlZCBzd2l0Y2hpbmcgKHVzdWFsbHkgcm9vdCBodWJzKS4KKwkgKgorCSAqIE5PVEU6IFNSUC1jYXBhYmxlIGxpbmtzIHNob3VsZCBhZG9wdCBtb3JlIGFnZ3Jlc3NpdmUgcG93ZXJvZmYKKwkgKiBwb2xpY2llcyAod2hlbiBITlAgZG9lc24ndCBhcHBseSkgb25jZSB3ZSBoYXZlIG1lY2hhbmlzbXMgdG8KKwkgKiB0dXJuIHBvd2VyIGJhY2sgb24hICAoTGlrZWx5IG5vdCBiZWZvcmUgMi43Li4uKQorCSAqLworCWlmIChzdGF0ZSA+IFBNX1NVU1BFTkRfTUVNKSB7CisJCWRldl93YXJuKCZ1ZGV2LT5kZXYsICJubyBwb3dlcm9mZiB5ZXQsIHN1c3BlbmRpbmcgaW5zdGVhZFxuIik7CisJfQorCisJLyogImdsb2JhbCBzdXNwZW5kIiBvZiB0aGUgSEMtdG8tVVNCIGludGVyZmFjZSAocm9vdCBodWIpLCBvcgorCSAqICJzZWxlY3RpdmUgc3VzcGVuZCIgb2YganVzdCBvbmUgaHViLWRldmljZSBsaW5rLgorCSAqLworCWlmICghdWRldi0+cGFyZW50KSB7CisJCXN0cnVjdCB1c2JfYnVzCSpidXMgPSB1ZGV2LT5idXM7CisJCWlmIChidXMgJiYgYnVzLT5vcC0+aHViX3N1c3BlbmQpIHsKKwkJCXN0YXR1cyA9IGJ1cy0+b3AtPmh1Yl9zdXNwZW5kIChidXMpOworCQkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQkJZGV2X2RiZygmdWRldi0+ZGV2LCAidXNiIHN1c3BlbmRcbiIpOworCQkJCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVkZXYsCisJCQkJCQlVU0JfU1RBVEVfU1VTUEVOREVEKTsKKwkJCX0KKwkJfSBlbHNlCisJCQlzdGF0dXMgPSAtRU9QTk9UU1VQUDsKKwl9IGVsc2UKKwkJc3RhdHVzID0gaHViX3BvcnRfc3VzcGVuZChoZGV2X3RvX2h1Yih1ZGV2LT5wYXJlbnQpLCBwb3J0MSwKKwkJCQl1ZGV2KTsKKworCWlmIChzdGF0dXMgPT0gMCkKKwkJdWRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gc3RhdGU7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiB1c2Jfc3VzcGVuZF9kZXZpY2UgLSBzdXNwZW5kIGEgdXNiIGRldmljZQorICogQHVkZXY6IGRldmljZSB0aGF0J3Mgbm8gbG9uZ2VyIGluIGFjdGl2ZSB1c2UKKyAqIEBzdGF0ZTogUE1TR19TVVNQRU5EIHRvIHN1c3BlbmQKKyAqIENvbnRleHQ6IG11c3QgYmUgYWJsZSB0byBzbGVlcDsgZGV2aWNlIG5vdCBsb2NrZWQKKyAqCisgKiBTdXNwZW5kcyBhIFVTQiBkZXZpY2UgdGhhdCBpc24ndCBpbiBhY3RpdmUgdXNlLCBjb25zZXJ2aW5nIHBvd2VyLgorICogRGV2aWNlcyBtYXkgd2FrZSBvdXQgb2YgYSBzdXNwZW5kLCBpZiBhbnl0aGluZyBpbXBvcnRhbnQgaGFwcGVucywKKyAqIHVzaW5nIHRoZSByZW1vdGUgd2FrZXVwIG1lY2hhbmlzbS4gIFRoZXkgbWF5IGFsc28gYmUgdGFrZW4gb3V0IG9mCisgKiBzdXNwZW5kIGJ5IHRoZSBob3N0LCB1c2luZyB1c2JfcmVzdW1lX2RldmljZSgpLiAgSXQncyBhbHNvIHJvdXRpbmUKKyAqIHRvIGRpc2Nvbm5lY3QgZGV2aWNlcyB3aGlsZSB0aGV5IGFyZSBzdXNwZW5kZWQuCisgKgorICogU3VzcGVuZGluZyBPVEcgZGV2aWNlcyBtYXkgdHJpZ2dlciBITlAsIGlmIHRoYXQncyBiZWVuIGVuYWJsZWQKKyAqIGJldHdlZW4gYSBwYWlyIG9mIGR1YWwtcm9sZSBkZXZpY2VzLiAgVGhhdCB3aWxsIGNoYW5nZSByb2xlcywgc3VjaAorICogYXMgZnJvbSBBLUhvc3QgdG8gQS1QZXJpcGhlcmFsIG9yIGZyb20gQi1Ib3N0IGJhY2sgdG8gQi1QZXJpcGhlcmFsLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlbHNlIG5lZ2F0aXZlIGVycm5vLgorICovCitpbnQgdXNiX3N1c3BlbmRfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJaW50CXBvcnQxLCBzdGF0dXM7CisKKwlwb3J0MSA9IGxvY2t0cmVlKHVkZXYpOworCWlmIChwb3J0MSA8IDApCisJCXJldHVybiBwb3J0MTsKKworCXN0YXR1cyA9IF9fdXNiX3N1c3BlbmRfZGV2aWNlKHVkZXYsIHBvcnQxLCBzdGF0ZSk7CisJdXNiX3VubG9ja19kZXZpY2UodWRldik7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIGhhcmR3YXJlIHJlc3VtZSBzaWduYWxpbmcgaXMgZmluaXNoZWQsIGVpdGhlciBiZWNhdXNlIG9mIHNlbGVjdGl2ZQorICogcmVzdW1lIChieSBob3N0KSBvciByZW1vdGUgd2FrZXVwIChieSBkZXZpY2UpIC4uLiBub3cgc2VlIHdoYXQgY2hhbmdlZAorICogaW4gdGhlIHRyZWUgdGhhdCdzIHJvb3RlZCBhdCB0aGlzIGRldmljZS4KKyAqLworc3RhdGljIGludCBmaW5pc2hfcG9ydF9yZXN1bWUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJaW50CXN0YXR1czsKKwl1MTYJZGV2c3RhdHVzOworCisJLyogY2FsbGVyIG93bnMgdGhlIHVkZXYgZGV2aWNlIGxvY2sgKi8KKwlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJ1c2IgcmVzdW1lXG4iKTsKKworCS8qIHVzYiBjaDkgaWRlbnRpZmllcyBmb3VyIHZhcmlhbnRzIG9mIFNVU1BFTkRFRCwgYmFzZWQgb24gd2hhdAorCSAqIHN0YXRlIHRoZSBkZXZpY2UgcmVzdW1lcyB0by4gIExpbnV4IGN1cnJlbnRseSB3b24ndCBzZWUgdGhlCisJICogZmlyc3QgdHdvIG9uIHRoZSBob3N0IHNpZGU7IHRoZXknZCBiZSBpbnNpZGUgaHViX3BvcnRfaW5pdCgpCisJICogZHVyaW5nIG1hbnkgdGltZW91dHMsIGJ1dCBraHViZCBjYW4ndCBzdXNwZW5kIHVudGlsIGxhdGVyLgorCSAqLworCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVkZXYsIHVkZXYtPmFjdGNvbmZpZworCQkJPyBVU0JfU1RBVEVfQ09ORklHVVJFRAorCQkJOiBVU0JfU1RBVEVfQUREUkVTUyk7CisJdWRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKKworIAkvKiAxMC41LjQuNSBzYXlzIGJlIHN1cmUgZGV2aWNlcyBpbiB0aGUgdHJlZSBhcmUgc3RpbGwgdGhlcmUuCisgCSAqIEZvciBub3cgbGV0J3MgYXNzdW1lIHRoZSBkZXZpY2UgZGlkbid0IGdvIGNyYXp5IG9uIHJlc3VtZSwKKwkgKiBhbmQgZGV2aWNlIGRyaXZlcnMgd2lsbCBrbm93IGFib3V0IGFueSByZXN1bWUgcXVpcmtzLgorCSAqLworCXN0YXR1cyA9IHVzYl9nZXRfc3RhdHVzKHVkZXYsIFVTQl9SRUNJUF9ERVZJQ0UsIDAsICZkZXZzdGF0dXMpOworCWlmIChzdGF0dXMgPCAwKQorCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsCisJCQkiZ29uZSBhZnRlciB1c2IgcmVzdW1lPyBzdGF0dXMgJWRcbiIsCisJCQlzdGF0dXMpOworCWVsc2UgaWYgKHVkZXYtPmFjdGNvbmZpZykgeworCQl1bnNpZ25lZAlpOworCisJCWxlMTZfdG9fY3B1cygmZGV2c3RhdHVzKTsKKwkJaWYgKGRldnN0YXR1cyAmICgxIDw8IFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCkpIHsKKwkJCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LAorCQkJCQl1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJCQkJCVVTQl9SRVFfQ0xFQVJfRkVBVFVSRSwKKwkJCQkJCVVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJCVVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCwgMCwKKwkJCQkJTlVMTCwgMCwKKwkJCQkJVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCQkJaWYgKHN0YXR1cykgeworCQkJCWRldl9kYmcoJnVkZXYtPmRldiwgImRpc2FibGUgcmVtb3RlICIKKwkJCQkJIndha2V1cCwgc3RhdHVzICVkXG4iLCBzdGF0dXMpOworCQkJCXN0YXR1cyA9IDA7CisJCQl9CisJCX0KKworCQkvKiByZXN1bWUgaW50ZXJmYWNlIGRyaXZlcnM7IGlmIHRoaXMgaXMgYSBodWIsIGl0CisJCSAqIHJlc3VtZXMgdGhlIGNoaWxkIGRldmljZXMKKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCB1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgeworCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGY7CisJCQlzdHJ1Y3QgdXNiX2RyaXZlcgkqZHJpdmVyOworCisJCQlpbnRmID0gdWRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbaV07CisJCQlpZiAoaW50Zi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID09IFBNX1NVU1BFTkRfT04pCisJCQkJY29udGludWU7CisJCQlpZiAoIWludGYtPmRldi5kcml2ZXIpIHsKKwkJCQkvKiBGSVhNRSBtYXliZSBmb3JjZSB0byBhbHQgMCAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZHJpdmVyID0gdG9fdXNiX2RyaXZlcihpbnRmLT5kZXYuZHJpdmVyKTsKKworCQkJLyogYnVzX3Jlc2Nhbl9kZXZpY2VzKCkgbWF5IHJlYmluZCBkcml2ZXJzICovCisJCQlpZiAoIWRyaXZlci0+cmVzdW1lKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBjYW4gd2UgZG8gYmV0dGVyIHRoYW4ganVzdCBsb2dnaW5nIGVycm9ycz8gKi8KKwkJCXN0YXR1cyA9IGRyaXZlci0+cmVzdW1lKGludGYpOworCQkJaWYgKGludGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSAhPSBQTV9TVVNQRU5EX09OCisJCQkJCXx8IHN0YXR1cykKKwkJCQlkZXZfZGJnKCZpbnRmLT5kZXYsCisJCQkJCSJyZXN1bWUgZmFpbCwgc3RhdGUgJWQgY29kZSAlZFxuIiwKKwkJCQkJaW50Zi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLCBzdGF0dXMpOworCQl9CisJCXN0YXR1cyA9IDA7CisKKwl9IGVsc2UgaWYgKHVkZXYtPmRldm51bSA8PSAwKSB7CisJCWRldl9kYmcoJnVkZXYtPmRldiwgImJvZ3VzIHJlc3VtZSFcbiIpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50CitodWJfcG9ydF9yZXN1bWUoc3RydWN0IHVzYl9odWIgKmh1YiwgaW50IHBvcnQxLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpbnQJc3RhdHVzOworCisJLy8gZGV2X2RiZyhodWItPmludGZkZXYsICJyZXN1bWUgcG9ydCAlZFxuIiwgcG9ydDEpOworCisJLyogc2VlIDcuMS43Ljc7IGFmZmVjdHMgcG93ZXIgdXNhZ2UsIGJ1dCBub3QgYnVkZ2V0aW5nICovCisJc3RhdHVzID0gY2xlYXJfcG9ydF9mZWF0dXJlKGh1Yi0+aGRldiwKKwkJCXBvcnQxLCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2RiZyhodWItPmludGZkZXYsCisJCQkiY2FuJ3QgcmVzdW1lIHBvcnQgJWQsIHN0YXR1cyAlZFxuIiwKKwkJCXBvcnQxLCBzdGF0dXMpOworCX0gZWxzZSB7CisJCXUxNgkJZGV2c3RhdHVzOworCQl1MTYJCXBvcnRjaGFuZ2U7CisKKwkJLyogZHJpdmUgcmVzdW1lIGZvciBhdCBsZWFzdCAyMCBtc2VjICovCisJCWlmICh1ZGV2KQorCQkJZGV2X2RiZygmdWRldi0+ZGV2LCAiUkVTVU1FXG4iKTsKKwkJbXNsZWVwKDI1KTsKKworI2RlZmluZSBMSVZFX0ZMQUdTCSggVVNCX1BPUlRfU1RBVF9QT1dFUiBcCisJCQl8IFVTQl9QT1JUX1NUQVRfRU5BQkxFIFwKKwkJCXwgVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OKQorCisJCS8qIFZpcnR1YWwgcm9vdCBodWJzIGNhbiB0cmlnZ2VyIG9uIEdFVF9QT1JUX1NUQVRVUyB0bworCQkgKiBzdG9wIHJlc3VtZSBzaWduYWxpbmcuICBUaGVuIGZpbmlzaCB0aGUgcmVzdW1lCisJCSAqIHNlcXVlbmNlLgorCQkgKi8KKwkJZGV2c3RhdHVzID0gcG9ydGNoYW5nZSA9IDA7CisJCXN0YXR1cyA9IGh1Yl9wb3J0X3N0YXR1cyhodWIsIHBvcnQxLAorCQkJCSZkZXZzdGF0dXMsICZwb3J0Y2hhbmdlKTsKKwkJaWYgKHN0YXR1cyA8IDAKKwkJCQl8fCAoZGV2c3RhdHVzICYgTElWRV9GTEFHUykgIT0gTElWRV9GTEFHUworCQkJCXx8IChkZXZzdGF0dXMgJiBVU0JfUE9SVF9TVEFUX1NVU1BFTkQpICE9IDAKKwkJCQkpIHsKKwkJCWRldl9kYmcoaHViLT5pbnRmZGV2LAorCQkJCSJwb3J0ICVkIHN0YXR1cyAlMDR4LiUwNHggYWZ0ZXIgcmVzdW1lLCAlZFxuIiwKKwkJCQlwb3J0MSwgcG9ydGNoYW5nZSwgZGV2c3RhdHVzLCBzdGF0dXMpOworCQl9IGVsc2UgeworCQkJLyogVFJTTVJDWSA9IDEwIG1zZWMgKi8KKwkJCW1zbGVlcCgxMCk7CisJCQlpZiAodWRldikKKwkJCQlzdGF0dXMgPSBmaW5pc2hfcG9ydF9yZXN1bWUodWRldik7CisJCX0KKwl9CisJaWYgKHN0YXR1cyA8IDApCisJCWh1Yl9wb3J0X2xvZ2ljYWxfZGlzY29ubmVjdChodWIsIHBvcnQxKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgaHViX3Jlc3VtZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworCisvKioKKyAqIHVzYl9yZXN1bWVfZGV2aWNlIC0gcmUtYWN0aXZhdGUgYSBzdXNwZW5kZWQgdXNiIGRldmljZQorICogQHVkZXY6IGRldmljZSB0byByZS1hY3RpdmF0ZQorICogQ29udGV4dDogbXVzdCBiZSBhYmxlIHRvIHNsZWVwOyBkZXZpY2Ugbm90IGxvY2tlZAorICoKKyAqIFRoaXMgd2lsbCByZS1hY3RpdmF0ZSB0aGUgc3VzcGVuZGVkIGRldmljZSwgaW5jcmVhc2luZyBwb3dlciB1c2FnZQorICogd2hpbGUgbGV0dGluZyBkcml2ZXJzIGNvbW11bmljYXRlIGFnYWluIHdpdGggaXRzIGVuZHBvaW50cy4KKyAqIFVTQiByZXN1bWUgZXhwbGljaXRseSBndWFyYW50ZWVzIHRoYXQgdGhlIHBvd2VyIHNlc3Npb24gYmV0d2VlbgorICogdGhlIGhvc3QgYW5kIHRoZSBkZXZpY2UgaXMgdGhlIHNhbWUgYXMgaXQgd2FzIHdoZW4gdGhlIGRldmljZQorICogc3VzcGVuZGVkLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlbHNlIG5lZ2F0aXZlIGVycm5vLgorICovCitpbnQgdXNiX3Jlc3VtZV9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJaW50CXBvcnQxLCBzdGF0dXM7CisKKwlwb3J0MSA9IGxvY2t0cmVlKHVkZXYpOworCWlmIChwb3J0MSA8IDApCisJCXJldHVybiBwb3J0MTsKKworCS8qICJnbG9iYWwgcmVzdW1lIiBvZiB0aGUgSEMtdG8tVVNCIGludGVyZmFjZSAocm9vdCBodWIpLCBvcgorCSAqIHNlbGVjdGl2ZSByZXN1bWUgb2Ygb25lIGh1Yi10by1kZXZpY2UgcG9ydAorCSAqLworCWlmICghdWRldi0+cGFyZW50KSB7CisJCXN0cnVjdCB1c2JfYnVzCSpidXMgPSB1ZGV2LT5idXM7CisJCWlmIChidXMgJiYgYnVzLT5vcC0+aHViX3Jlc3VtZSkgeworCQkJc3RhdHVzID0gYnVzLT5vcC0+aHViX3Jlc3VtZSAoYnVzKTsKKwkJfSBlbHNlCisJCQlzdGF0dXMgPSAtRU9QTk9UU1VQUDsKKwkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJ1c2IgcmVzdW1lXG4iKTsKKwkJCS8qIFRSU01SQ1kgPSAxMCBtc2VjICovCisJCQltc2xlZXAoMTApOworCQkJdXNiX3NldF9kZXZpY2Vfc3RhdGUgKHVkZXYsIFVTQl9TVEFURV9DT05GSUdVUkVEKTsKKwkJCXVkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CisJCQlzdGF0dXMgPSBodWJfcmVzdW1lICh1ZGV2CisJCQkJCS0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbMF0pOworCQl9CisJfSBlbHNlIGlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKSB7CisJCS8vIE5PVEUgdGhpcyBmYWlscyBpZiBwYXJlbnQgaXMgYWxzbyBzdXNwZW5kZWQuLi4KKwkJc3RhdHVzID0gaHViX3BvcnRfcmVzdW1lKGhkZXZfdG9faHViKHVkZXYtPnBhcmVudCksCisJCQkJcG9ydDEsIHVkZXYpOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IDA7CisJfQorCWlmIChzdGF0dXMgPCAwKSB7CisJCWRldl9kYmcoJnVkZXYtPmRldiwgImNhbid0IHJlc3VtZSwgc3RhdHVzICVkXG4iLAorCQkJc3RhdHVzKTsKKwl9CisKKwl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKKworCS8qIHJlYmluZCBkcml2ZXJzIHRoYXQgaGFkIG5vIHN1c3BlbmQoKSAqLworCWlmIChzdGF0dXMgPT0gMCkgeworCQl1c2JfbG9ja19hbGxfZGV2aWNlcygpOworCQlidXNfcmVzY2FuX2RldmljZXMoJnVzYl9idXNfdHlwZSk7CisJCXVzYl91bmxvY2tfYWxsX2RldmljZXMoKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCByZW1vdGVfd2FrZXVwKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWludAlzdGF0dXMgPSAwOworCisJLyogZG9uJ3QgcmVwZWF0IFJFU1VNRSBzZXF1ZW5jZSBpZiB0aGlzIGRldmljZQorCSAqIHdhcyBhbHJlYWR5IHdva2VuIHVwIGJ5IHNvbWUgb3RoZXIgdGFzaworCSAqLworCWRvd24oJnVkZXYtPnNlcmlhbGl6ZSk7CisJaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpIHsKKwkJZGV2X2RiZygmdWRldi0+ZGV2LCAiUkVTVU1FICh3YWtldXApXG4iKTsKKwkJLyogVFJTTVJDWSA9IDEwIG1zZWMgKi8KKwkJbXNsZWVwKDEwKTsKKwkJc3RhdHVzID0gZmluaXNoX3BvcnRfcmVzdW1lKHVkZXYpOworCX0KKwl1cCgmdWRldi0+c2VyaWFsaXplKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGh1Yl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHVzYl9odWIJCSpodWIgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqaGRldiA9IGh1Yi0+aGRldjsKKwl1bnNpZ25lZAkJcG9ydDE7CisJaW50CQkJc3RhdHVzOworCisJLyogc3RvcCBraHViZCBhbmQgcmVsYXRlZCBhY3Rpdml0eSAqLworCWh1Yl9xdWllc2NlKGh1Yik7CisKKwkvKiB0aGVuIHN1c3BlbmQgZXZlcnkgcG9ydCAqLworCWZvciAocG9ydDEgPSAxOyBwb3J0MSA8PSBoZGV2LT5tYXhjaGlsZDsgcG9ydDErKykgeworCQlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKKworCQl1ZGV2ID0gaGRldi0+Y2hpbGRyZW4gW3BvcnQxLTFdOworCQlpZiAoIXVkZXYpCisJCQljb250aW51ZTsKKwkJZG93bigmdWRldi0+c2VyaWFsaXplKTsKKwkJc3RhdHVzID0gX191c2Jfc3VzcGVuZF9kZXZpY2UodWRldiwgcG9ydDEsIHN0YXRlKTsKKwkJdXAoJnVkZXYtPnNlcmlhbGl6ZSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCAic3VzcGVuZCBwb3J0ICVkIC0tPiAlZFxuIiwKKwkJCQlwb3J0MSwgc3RhdHVzKTsKKwl9CisKKwlpbnRmLT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBodWJfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JfZGV2aWNlCSpoZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgdXNiX2h1YgkJKmh1YiA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCXVuc2lnbmVkCQlwb3J0MTsKKwlpbnQJCQlzdGF0dXM7CisKKwlpZiAoaW50Zi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID09IFBNX1NVU1BFTkRfT04pCisJCXJldHVybiAwOworCisJZm9yIChwb3J0MSA9IDE7IHBvcnQxIDw9IGhkZXYtPm1heGNoaWxkOyBwb3J0MSsrKSB7CisJCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OworCQl1MTYJCQlwb3J0c3RhdCwgcG9ydGNoYW5nZTsKKworCQl1ZGV2ID0gaGRldi0+Y2hpbGRyZW4gW3BvcnQxLTFdOworCQlzdGF0dXMgPSBodWJfcG9ydF9zdGF0dXMoaHViLCBwb3J0MSwgJnBvcnRzdGF0LCAmcG9ydGNoYW5nZSk7CisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJaWYgKHBvcnRjaGFuZ2UgJiBVU0JfUE9SVF9TVEFUX0NfU1VTUEVORCkgeworCQkJCWNsZWFyX3BvcnRfZmVhdHVyZShoZGV2LCBwb3J0MSwKKwkJCQkJVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQpOworCQkJCXBvcnRjaGFuZ2UgJj0gflVTQl9QT1JUX1NUQVRfQ19TVVNQRU5EOworCQkJfQorCisJCQkvKiBsZXQga2h1YmQgaGFuZGxlIGRpc2Nvbm5lY3RzIGV0YyAqLworCQkJaWYgKHBvcnRjaGFuZ2UpCisJCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIXVkZXYgfHwgc3RhdHVzIDwgMCkKKwkJCWNvbnRpbnVlOworCQlkb3duICgmdWRldi0+c2VyaWFsaXplKTsKKwkJaWYgKHBvcnRzdGF0ICYgVVNCX1BPUlRfU1RBVF9TVVNQRU5EKQorCQkJc3RhdHVzID0gaHViX3BvcnRfcmVzdW1lKGh1YiwgcG9ydDEsIHVkZXYpOworCQllbHNlIHsKKwkJCXN0YXR1cyA9IGZpbmlzaF9wb3J0X3Jlc3VtZSh1ZGV2KTsKKwkJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCAicmVzdW1lIHBvcnQgJWQgLS0+ICVkXG4iLAorCQkJCQlwb3J0MSwgc3RhdHVzKTsKKwkJCQlodWJfcG9ydF9sb2dpY2FsX2Rpc2Nvbm5lY3QoaHViLCBwb3J0MSk7CisJCQl9CisJCX0KKwkJdXAoJnVkZXYtPnNlcmlhbGl6ZSk7CisJfQorCWludGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CisKKwlodWItPnJlc3VtZV9yb290X2h1YiA9IDA7CisJaHViX2FjdGl2YXRlKGh1Yik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdXNiX3Jlc3VtZV9yb290X2h1YihzdHJ1Y3QgdXNiX2RldmljZSAqaGRldikKK3sKKwlzdHJ1Y3QgdXNiX2h1YiAqaHViID0gaGRldl90b19odWIoaGRldik7CisKKwlodWItPnJlc3VtZV9yb290X2h1YiA9IDE7CisJa2lja19raHViZChodWIpOworfQorCisjZWxzZQkvKiAhQ09ORklHX1VTQl9TVVNQRU5EICovCisKK2ludCB1c2Jfc3VzcGVuZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IHVzYl9yZXN1bWVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXJldHVybiAwOworfQorCisjZGVmaW5lCWh1Yl9zdXNwZW5kCQlOVUxMCisjZGVmaW5lCWh1Yl9yZXN1bWUJCU5VTEwKKyNkZWZpbmUJcmVtb3RlX3dha2V1cCh4KQkwCisKKyNlbmRpZgkvKiBDT05GSUdfVVNCX1NVU1BFTkQgKi8KKworRVhQT1JUX1NZTUJPTCh1c2Jfc3VzcGVuZF9kZXZpY2UpOworRVhQT1JUX1NZTUJPTCh1c2JfcmVzdW1lX2RldmljZSk7CisKKworCisvKiBVU0IgMi4wIHNwZWMsIDcuMS43LjMgLyBmaWcgNy0yOToKKyAqCisgKiBCZXR3ZWVuIGNvbm5lY3QgZGV0ZWN0aW9uIGFuZCByZXNldCBzaWduYWxpbmcgdGhlcmUgbXVzdCBiZSBhIGRlbGF5CisgKiBvZiAxMDBtcyBhdCBsZWFzdCBmb3IgZGVib3VuY2UgYW5kIHBvd2VyLXNldHRsaW5nLiAgVGhlIGNvcnJlc3BvbmRpbmcKKyAqIHRpbWVyIHNoYWxsIHJlc3RhcnQgd2hlbmV2ZXIgdGhlIGRvd25zdHJlYW0gcG9ydCBkZXRlY3RzIGEgZGlzY29ubmVjdC4KKyAqIAorICogQXBwYXJlbnRseSB0aGVyZSBhcmUgc29tZSBibHVldG9vdGggYW5kIGlyZGEtZG9uZ2xlcyBhbmQgYSBudW1iZXIgb2YKKyAqIGxvdy1zcGVlZCBkZXZpY2VzIGZvciB3aGljaCB0aGlzIGRlYm91bmNlIHBlcmlvZCBtYXkgbGFzdCBvdmVyIGEgc2Vjb25kLgorICogTm90IGNvdmVyZWQgYnkgdGhlIHNwZWMgLSBidXQgZWFzeSB0byBkZWFsIHdpdGguCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiB1c2VzIGEgMTUwMG1zIHRvdGFsIGRlYm91bmNlIHRpbWVvdXQ7IGlmIHRoZQorICogY29ubmVjdGlvbiBpc24ndCBzdGFibGUgYnkgdGhlbiBpdCByZXR1cm5zIC1FVElNRURPVVQuICBJdCBjaGVja3MKKyAqIGV2ZXJ5IDI1bXMgZm9yIHRyYW5zaWVudCBkaXNjb25uZWN0cy4gIFdoZW4gdGhlIHBvcnQgc3RhdHVzIGhhcyBiZWVuCisgKiB1bmNoYW5nZWQgZm9yIDEwMG1zIGl0IHJldHVybnMgdGhlIHBvcnQgc3RhdHVzLgorICovCisKKyNkZWZpbmUgSFVCX0RFQk9VTkNFX1RJTUVPVVQJMTUwMAorI2RlZmluZSBIVUJfREVCT1VOQ0VfU1RFUAkgIDI1CisjZGVmaW5lIEhVQl9ERUJPVU5DRV9TVEFCTEUJIDEwMAorCitzdGF0aWMgaW50IGh1Yl9wb3J0X2RlYm91bmNlKHN0cnVjdCB1c2JfaHViICpodWIsIGludCBwb3J0MSkKK3sKKwlpbnQgcmV0OworCWludCB0b3RhbF90aW1lLCBzdGFibGVfdGltZSA9IDA7CisJdTE2IHBvcnRjaGFuZ2UsIHBvcnRzdGF0dXM7CisJdW5zaWduZWQgY29ubmVjdGlvbiA9IDB4ZmZmZjsKKworCWZvciAodG90YWxfdGltZSA9IDA7IDsgdG90YWxfdGltZSArPSBIVUJfREVCT1VOQ0VfU1RFUCkgeworCQlyZXQgPSBodWJfcG9ydF9zdGF0dXMoaHViLCBwb3J0MSwgJnBvcnRzdGF0dXMsICZwb3J0Y2hhbmdlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCWlmICghKHBvcnRjaGFuZ2UgJiBVU0JfUE9SVF9TVEFUX0NfQ09OTkVDVElPTikgJiYKKwkJICAgICAocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTikgPT0gY29ubmVjdGlvbikgeworCQkJc3RhYmxlX3RpbWUgKz0gSFVCX0RFQk9VTkNFX1NURVA7CisJCQlpZiAoc3RhYmxlX3RpbWUgPj0gSFVCX0RFQk9VTkNFX1NUQUJMRSkKKwkJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCXN0YWJsZV90aW1lID0gMDsKKwkJCWNvbm5lY3Rpb24gPSBwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OOworCQl9CisKKwkJaWYgKHBvcnRjaGFuZ2UgJiBVU0JfUE9SVF9TVEFUX0NfQ09OTkVDVElPTikgeworCQkJY2xlYXJfcG9ydF9mZWF0dXJlKGh1Yi0+aGRldiwgcG9ydDEsCisJCQkJCVVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OKTsKKwkJfQorCisJCWlmICh0b3RhbF90aW1lID49IEhVQl9ERUJPVU5DRV9USU1FT1VUKQorCQkJYnJlYWs7CisJCW1zbGVlcChIVUJfREVCT1VOQ0VfU1RFUCk7CisJfQorCisJZGV2X2RiZyAoaHViLT5pbnRmZGV2LAorCQkiZGVib3VuY2U6IHBvcnQgJWQ6IHRvdGFsICVkbXMgc3RhYmxlICVkbXMgc3RhdHVzIDB4JXhcbiIsCisJCXBvcnQxLCB0b3RhbF90aW1lLCBzdGFibGVfdGltZSwgcG9ydHN0YXR1cyk7CisKKwlpZiAoc3RhYmxlX3RpbWUgPCBIVUJfREVCT1VOQ0VfU1RBQkxFKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwlyZXR1cm4gcG9ydHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgZXAwX3JlaW5pdChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwl1c2JfZGlzYWJsZV9lbmRwb2ludCh1ZGV2LCAwICsgVVNCX0RJUl9JTik7CisJdXNiX2Rpc2FibGVfZW5kcG9pbnQodWRldiwgMCArIFVTQl9ESVJfT1VUKTsKKwl1ZGV2LT5lcF9pblswXSA9IHVkZXYtPmVwX291dFswXSA9ICZ1ZGV2LT5lcDA7Cit9CisKKyNkZWZpbmUgdXNiX3NuZGFkZHIwcGlwZSgpCShQSVBFX0NPTlRST0wgPDwgMzApCisjZGVmaW5lIHVzYl9yY3ZhZGRyMHBpcGUoKQkoKFBJUEVfQ09OVFJPTCA8PCAzMCkgfCBVU0JfRElSX0lOKQorCitzdGF0aWMgaW50IGh1Yl9zZXRfYWRkcmVzcyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpbnQgcmV0dmFsOworCisJaWYgKHVkZXYtPmRldm51bSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX0FERFJFU1MpCisJCXJldHVybiAwOworCWlmICh1ZGV2LT5zdGF0ZSAhPSBVU0JfU1RBVEVfREVGQVVMVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRhZGRyMHBpcGUoKSwKKwkJVVNCX1JFUV9TRVRfQUREUkVTUywgMCwgdWRldi0+ZGV2bnVtLCAwLAorCQlOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJaWYgKHJldHZhbCA9PSAwKSB7CisJCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVkZXYsIFVTQl9TVEFURV9BRERSRVNTKTsKKwkJZXAwX3JlaW5pdCh1ZGV2KTsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworLyogUmVzZXQgZGV2aWNlLCAocmUpYXNzaWduIGFkZHJlc3MsIGdldCBkZXZpY2UgZGVzY3JpcHRvci4KKyAqIERldmljZSBjb25uZWN0aW9uIG11c3QgYmUgc3RhYmxlLCBubyBtb3JlIGRlYm91bmNpbmcgbmVlZGVkLgorICogUmV0dXJucyBkZXZpY2UgaW4gVVNCX1NUQVRFX0FERFJFU1MsIGV4Y2VwdCBvbiBlcnJvci4KKyAqCisgKiBJZiB0aGlzIGlzIGNhbGxlZCBmb3IgYW4gYWxyZWFkeS1leGlzdGluZyBkZXZpY2UgKGFzIHBhcnQgb2YKKyAqIHVzYl9yZXNldF9kZXZpY2UpLCB0aGUgY2FsbGVyIG11c3Qgb3duIHRoZSBkZXZpY2UgbG9jay4gIEZvciBhCisgKiBuZXdseSBkZXRlY3RlZCBkZXZpY2UgdGhhdCBpcyBub3QgYWNjZXNzaWJsZSB0aHJvdWdoIGFueSBnbG9iYWwKKyAqIHBvaW50ZXJzLCBpdCdzIG5vdCBuZWNlc3NhcnkgdG8gbG9jayB0aGUgZGV2aWNlLgorICovCitzdGF0aWMgaW50CitodWJfcG9ydF9pbml0IChzdHJ1Y3QgdXNiX2h1YiAqaHViLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50IHBvcnQxLAorCQlpbnQgcmV0cnlfY291bnRlcikKK3sKKwlzdGF0aWMgREVDTEFSRV9NVVRFWCh1c2JfYWRkcmVzczBfc2VtKTsKKworCXN0cnVjdCB1c2JfZGV2aWNlCSpoZGV2ID0gaHViLT5oZGV2OworCWludAkJCWksIGosIHJldHZhbDsKKwl1bnNpZ25lZAkJZGVsYXkgPSBIVUJfU0hPUlRfUkVTRVRfVElNRTsKKwllbnVtIHVzYl9kZXZpY2Vfc3BlZWQJb2xkc3BlZWQgPSB1ZGV2LT5zcGVlZDsKKworCS8qIHJvb3QgaHViIHBvcnRzIGhhdmUgYSBzbGlnaHRseSBsb25nZXIgcmVzZXQgcGVyaW9kCisJICogKGZyb20gVVNCIDIuMCBzcGVjLCBzZWN0aW9uIDcuMS43LjUpCisJICovCisJaWYgKCFoZGV2LT5wYXJlbnQpIHsKKwkJZGVsYXkgPSBIVUJfUk9PVF9SRVNFVF9USU1FOworCQlpZiAocG9ydDEgPT0gaGRldi0+YnVzLT5vdGdfcG9ydCkKKwkJCWhkZXYtPmJ1cy0+Yl9obnBfZW5hYmxlID0gMDsKKwl9CisKKwkvKiBTb21lIGxvdyBzcGVlZCBkZXZpY2VzIGhhdmUgcHJvYmxlbXMgd2l0aCB0aGUgcXVpY2sgZGVsYXksIHNvICovCisJLyogIGJlIGEgYml0IHBlc3NpbWlzdGljIHdpdGggdGhvc2UgZGV2aWNlcy4gUkhidWcgIzIzNjcwICovCisJaWYgKG9sZHNwZWVkID09IFVTQl9TUEVFRF9MT1cpCisJCWRlbGF5ID0gSFVCX0xPTkdfUkVTRVRfVElNRTsKKworCWRvd24oJnVzYl9hZGRyZXNzMF9zZW0pOworCisJLyogUmVzZXQgdGhlIGRldmljZTsgZnVsbCBzcGVlZCBtYXkgbW9ycGggdG8gaGlnaCBzcGVlZCAqLworCXJldHZhbCA9IGh1Yl9wb3J0X3Jlc2V0KGh1YiwgcG9ydDEsIHVkZXYsIGRlbGF5KTsKKwlpZiAocmV0dmFsIDwgMCkJCS8qIGVycm9yIG9yIGRpc2Nvbm5lY3QgKi8KKwkJZ290byBmYWlsOworCQkJCS8qIHN1Y2Nlc3MsIHNwZWVkIGlzIGtub3duICovCisJcmV0dmFsID0gLUVOT0RFVjsKKworCWlmIChvbGRzcGVlZCAhPSBVU0JfU1BFRURfVU5LTk9XTiAmJiBvbGRzcGVlZCAhPSB1ZGV2LT5zcGVlZCkgeworCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJkZXZpY2UgcmVzZXQgY2hhbmdlZCBzcGVlZCFcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCW9sZHNwZWVkID0gdWRldi0+c3BlZWQ7CisgIAorCS8qIFVTQiAyLjAgc2VjdGlvbiA1LjUuMyB0YWxrcyBhYm91dCBlcDAgbWF4cGFja2V0IC4uLgorCSAqIGl0J3MgZml4ZWQgc2l6ZSBleGNlcHQgZm9yIGZ1bGwgc3BlZWQgZGV2aWNlcy4KKwkgKi8KKwlzd2l0Y2ggKHVkZXYtPnNwZWVkKSB7CisJY2FzZSBVU0JfU1BFRURfSElHSDoJCS8qIGZpeGVkIGF0IDY0ICovCisJCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig2NCk7CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CQkvKiA4LCAxNiwgMzIsIG9yIDY0ICovCisJCS8qIHRvIGRldGVybWluZSB0aGUgZXAwIG1heHBhY2tldCBzaXplLCB0cnkgdG8gcmVhZAorCQkgKiB0aGUgZGV2aWNlIGRlc2NyaXB0b3IgdG8gZ2V0IGJNYXhQYWNrZXRTaXplMCBhbmQKKwkJICogdGhlbiBjb3JyZWN0IG91ciBpbml0aWFsIGd1ZXNzLgorCQkgKi8KKwkJdWRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDY0KTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfU1BFRURfTE9XOgkJLyogZml4ZWQgYXQgOCAqLworCQl1ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoOCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdvdG8gZmFpbDsKKwl9CisgCisJZGV2X2luZm8gKCZ1ZGV2LT5kZXYsCisJCQkiJXMgJXMgc3BlZWQgVVNCIGRldmljZSB1c2luZyAlcyBhbmQgYWRkcmVzcyAlZFxuIiwKKwkJCSh1ZGV2LT5jb25maWcpID8gInJlc2V0IiA6ICJuZXciLAorCQkJKHsgY2hhciAqc3BlZWQ7IHN3aXRjaCAodWRldi0+c3BlZWQpIHsKKwkJCWNhc2UgVVNCX1NQRUVEX0xPVzoJc3BlZWQgPSAibG93IjsJYnJlYWs7CisJCQljYXNlIFVTQl9TUEVFRF9GVUxMOglzcGVlZCA9ICJmdWxsIjsJYnJlYWs7CisJCQljYXNlIFVTQl9TUEVFRF9ISUdIOglzcGVlZCA9ICJoaWdoIjsJYnJlYWs7CisJCQlkZWZhdWx0OiAJCXNwZWVkID0gIj8iOwlicmVhazsKKwkJCX07IHNwZWVkO30pLAorCQkJdWRldi0+YnVzLT5jb250cm9sbGVyLT5kcml2ZXItPm5hbWUsCisJCQl1ZGV2LT5kZXZudW0pOworCisJLyogU2V0IHVwIFRUIHJlY29yZHMsIGlmIG5lZWRlZCAgKi8KKwlpZiAoaGRldi0+dHQpIHsKKwkJdWRldi0+dHQgPSBoZGV2LT50dDsKKwkJdWRldi0+dHRwb3J0ID0gaGRldi0+dHRwb3J0OworCX0gZWxzZSBpZiAodWRldi0+c3BlZWQgIT0gVVNCX1NQRUVEX0hJR0gKKwkJCSYmIGhkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSB7CisJCXVkZXYtPnR0ID0gJmh1Yi0+dHQ7CisJCXVkZXYtPnR0cG9ydCA9IHBvcnQxOworCX0KKyAKKwkvKiBXaHkgaW50ZXJsZWF2ZSBHRVRfREVTQ1JJUFRPUiBhbmQgU0VUX0FERFJFU1MgdGhpcyB3YXk/CisJICogQmVjYXVzZSBkZXZpY2UgaGFyZHdhcmUgYW5kIGZpcm13YXJlIGlzIHNvbWV0aW1lcyBidWdneSBpbgorCSAqIHRoaXMgYXJlYSwgYW5kIHRoaXMgaXMgaG93IExpbnV4IGhhcyBkb25lIGl0IGZvciBhZ2VzLgorCSAqIENoYW5nZSBpdCBjYXV0aW91c2x5LgorCSAqCisJICogTk9URTogIElmIFVTRV9ORVdfU0NIRU1FKCkgaXMgdHJ1ZSB3ZSB3aWxsIHN0YXJ0IGJ5IGlzc3VpbmcKKwkgKiBhIDY0LWJ5dGUgR0VUX0RFU0NSSVBUT1IgcmVxdWVzdC4gIFRoaXMgaXMgd2hhdCBXaW5kb3dzIGRvZXMsCisJICogc28gaXQgbWF5IGhlbHAgd2l0aCBzb21lIG5vbi1zdGFuZGFyZHMtY29tcGxpYW50IGRldmljZXMuCisJICogT3RoZXJ3aXNlIHdlIHN0YXJ0IHdpdGggU0VUX0FERFJFU1MgYW5kIHRoZW4gdHJ5IHRvIHJlYWQgdGhlCisJICogZmlyc3QgOCBieXRlcyBvZiB0aGUgZGV2aWNlIGRlc2NyaXB0b3IgdG8gZ2V0IHRoZSBlcDAgbWF4cGFja2V0CisJICogdmFsdWUuCisJICovCisJZm9yIChpID0gMDsgaSA8IEdFVF9ERVNDUklQVE9SX1RSSUVTOyAoKytpLCBtc2xlZXAoMTAwKSkpIHsKKwkJaWYgKFVTRV9ORVdfU0NIRU1FKHJldHJ5X2NvdW50ZXIpKSB7CisJCQlzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yICpidWY7CisJCQlpbnQgciA9IDA7CisKKyNkZWZpbmUgR0VUX0RFU0NSSVBUT1JfQlVGU0laRQk2NAorCQkJYnVmID0ga21hbGxvYyhHRVRfREVTQ1JJUFRPUl9CVUZTSVpFLCBHRlBfTk9JTyk7CisJCQlpZiAoIWJ1ZikgeworCQkJCXJldHZhbCA9IC1FTk9NRU07CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIFVzZSBhIHNob3J0IHRpbWVvdXQgdGhlIGZpcnN0IHRpbWUgdGhyb3VnaCwKKwkJCSAqIHNvIHRoYXQgcmVjYWxjaXRyYW50IGZ1bGwtc3BlZWQgZGV2aWNlcyB3aXRoCisJCQkgKiA4LSBvciAxNi1ieXRlIGVwMC1tYXhwYWNrZXRzIHdvbid0IHNsb3cgdGhpbmdzCisJCQkgKiBkb3duIHRyZW1lbmRvdXNseSBieSBOQUtpbmcgdGhlIHVuZXhwZWN0ZWRseQorCQkJICogZWFybHkgc3RhdHVzIHN0YWdlLiAgQWxzbywgcmV0cnkgb24gYWxsIGVycm9yczsKKwkJCSAqIHNvbWUgZGV2aWNlcyBhcmUgZmxha2V5LgorCQkJICovCisJCQlmb3IgKGogPSAwOyBqIDwgMzsgKytqKSB7CisJCQkJYnVmLT5iTWF4UGFja2V0U2l6ZTAgPSAwOworCQkJCXIgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmFkZHIwcGlwZSgpLAorCQkJCQlVU0JfUkVRX0dFVF9ERVNDUklQVE9SLCBVU0JfRElSX0lOLAorCQkJCQlVU0JfRFRfREVWSUNFIDw8IDgsIDAsCisJCQkJCWJ1ZiwgR0VUX0RFU0NSSVBUT1JfQlVGU0laRSwKKwkJCQkJKGkgPyBVU0JfQ1RSTF9HRVRfVElNRU9VVCA6IDEwMDApKTsKKwkJCQlzd2l0Y2ggKGJ1Zi0+Yk1heFBhY2tldFNpemUwKSB7CisJCQkJY2FzZSA4OiBjYXNlIDE2OiBjYXNlIDMyOiBjYXNlIDY0OgorCQkJCQlpZiAoYnVmLT5iRGVzY3JpcHRvclR5cGUgPT0KKwkJCQkJCQlVU0JfRFRfREVWSUNFKSB7CisJCQkJCQlyID0gMDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCS8qIEZBTEwgVEhST1VHSCAqLworCQkJCWRlZmF1bHQ6CisJCQkJCWlmIChyID09IDApCisJCQkJCQlyID0gLUVQUk9UTzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChyID09IDApCisJCQkJCWJyZWFrOworCQkJfQorCQkJdWRldi0+ZGVzY3JpcHRvci5iTWF4UGFja2V0U2l6ZTAgPQorCQkJCQlidWYtPmJNYXhQYWNrZXRTaXplMDsKKwkJCWtmcmVlKGJ1Zik7CisKKwkJCXJldHZhbCA9IGh1Yl9wb3J0X3Jlc2V0KGh1YiwgcG9ydDEsIHVkZXYsIGRlbGF5KTsKKwkJCWlmIChyZXR2YWwgPCAwKQkJLyogZXJyb3Igb3IgZGlzY29ubmVjdCAqLworCQkJCWdvdG8gZmFpbDsKKwkJCWlmIChvbGRzcGVlZCAhPSB1ZGV2LT5zcGVlZCkgeworCQkJCWRldl9kYmcoJnVkZXYtPmRldiwKKwkJCQkJImRldmljZSByZXNldCBjaGFuZ2VkIHNwZWVkIVxuIik7CisJCQkJcmV0dmFsID0gLUVOT0RFVjsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisJCQlpZiAocikgeworCQkJCWRldl9lcnIoJnVkZXYtPmRldiwgImRldmljZSBkZXNjcmlwdG9yICIKKwkJCQkJCSJyZWFkLyVzLCBlcnJvciAlZFxuIiwKKwkJCQkJCSI2NCIsIHIpOworCQkJCXJldHZhbCA9IC1FTVNHU0laRTsKKwkJCQljb250aW51ZTsKKwkJCX0KKyN1bmRlZiBHRVRfREVTQ1JJUFRPUl9CVUZTSVpFCisJCX0KKworCQlmb3IgKGogPSAwOyBqIDwgU0VUX0FERFJFU1NfVFJJRVM7ICsraikgeworCQkJcmV0dmFsID0gaHViX3NldF9hZGRyZXNzKHVkZXYpOworCQkJaWYgKHJldHZhbCA+PSAwKQorCQkJCWJyZWFrOworCQkJbXNsZWVwKDIwMCk7CisJCX0KKwkJaWYgKHJldHZhbCA8IDApIHsKKwkJCWRldl9lcnIoJnVkZXYtPmRldiwKKwkJCQkiZGV2aWNlIG5vdCBhY2NlcHRpbmcgYWRkcmVzcyAlZCwgZXJyb3IgJWRcbiIsCisJCQkJdWRldi0+ZGV2bnVtLCByZXR2YWwpOworCQkJZ290byBmYWlsOworCQl9CisgCisJCS8qIGNvcGUgd2l0aCBoYXJkd2FyZSBxdWlya2luZXNzOgorCQkgKiAgLSBsZXQgU0VUX0FERFJFU1Mgc2V0dGxlLCBzb21lIGRldmljZSBoYXJkd2FyZSB3YW50cyBpdAorCQkgKiAgLSByZWFkIGVwMCBtYXhwYWNrZXQgZXZlbiBmb3IgaGlnaCBhbmQgbG93IHNwZWVkLAorICAJCSAqLworCQltc2xlZXAoMTApOworCQlpZiAoVVNFX05FV19TQ0hFTUUocmV0cnlfY291bnRlcikpCisJCQlicmVhazsKKworCQlyZXR2YWwgPSB1c2JfZ2V0X2RldmljZV9kZXNjcmlwdG9yKHVkZXYsIDgpOworCQlpZiAocmV0dmFsIDwgOCkgeworCQkJZGV2X2VycigmdWRldi0+ZGV2LCAiZGV2aWNlIGRlc2NyaXB0b3IgIgorCQkJCQkicmVhZC8lcywgZXJyb3IgJWRcbiIsCisJCQkJCSI4IiwgcmV0dmFsKTsKKwkJCWlmIChyZXR2YWwgPj0gMCkKKwkJCQlyZXR2YWwgPSAtRU1TR1NJWkU7CisJCX0gZWxzZSB7CisJCQlyZXR2YWwgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsOworCisJaSA9IHVkZXYtPmRlc2NyaXB0b3IuYk1heFBhY2tldFNpemUwOworCWlmIChsZTE2X3RvX2NwdSh1ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSkgIT0gaSkgeworCQlpZiAodWRldi0+c3BlZWQgIT0gVVNCX1NQRUVEX0ZVTEwgfHwKKwkJCQkhKGkgPT0gOCB8fCBpID09IDE2IHx8IGkgPT0gMzIgfHwgaSA9PSA2NCkpIHsKKwkJCWRldl9lcnIoJnVkZXYtPmRldiwgImVwMCBtYXhwYWNrZXQgPSAlZFxuIiwgaSk7CisJCQlyZXR2YWwgPSAtRU1TR1NJWkU7CisJCQlnb3RvIGZhaWw7CisJCX0KKwkJZGV2X2RiZygmdWRldi0+ZGV2LCAiZXAwIG1heHBhY2tldCA9ICVkXG4iLCBpKTsKKwkJdWRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBjcHVfdG9fbGUxNihpKTsKKwkJZXAwX3JlaW5pdCh1ZGV2KTsKKwl9CisgIAorCXJldHZhbCA9IHVzYl9nZXRfZGV2aWNlX2Rlc2NyaXB0b3IodWRldiwgVVNCX0RUX0RFVklDRV9TSVpFKTsKKwlpZiAocmV0dmFsIDwgKHNpZ25lZClzaXplb2YodWRldi0+ZGVzY3JpcHRvcikpIHsKKwkJZGV2X2VycigmdWRldi0+ZGV2LCAiZGV2aWNlIGRlc2NyaXB0b3IgcmVhZC8lcywgZXJyb3IgJWRcbiIsCisJCQkiYWxsIiwgcmV0dmFsKTsKKwkJaWYgKHJldHZhbCA+PSAwKQorCQkJcmV0dmFsID0gLUVOT01TRzsKKwkJZ290byBmYWlsOworCX0KKworCXJldHZhbCA9IDA7CisKK2ZhaWw6CisJaWYgKHJldHZhbCkKKwkJaHViX3BvcnRfZGlzYWJsZShodWIsIHBvcnQxLCAwKTsKKwl1cCgmdXNiX2FkZHJlc3MwX3NlbSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQKK2NoZWNrX2hpZ2hzcGVlZCAoc3RydWN0IHVzYl9odWIgKmh1Yiwgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCBwb3J0MSkKK3sKKwlzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yCSpxdWFsOworCWludAkJCQlzdGF0dXM7CisKKwlxdWFsID0ga21hbGxvYyAoc2l6ZW9mICpxdWFsLCBTTEFCX0tFUk5FTCk7CisJaWYgKHF1YWwgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJc3RhdHVzID0gdXNiX2dldF9kZXNjcmlwdG9yICh1ZGV2LCBVU0JfRFRfREVWSUNFX1FVQUxJRklFUiwgMCwKKwkJCXF1YWwsIHNpemVvZiAqcXVhbCk7CisJaWYgKHN0YXR1cyA9PSBzaXplb2YgKnF1YWwpIHsKKwkJZGV2X2luZm8oJnVkZXYtPmRldiwgIm5vdCBydW5uaW5nIGF0IHRvcCBzcGVlZDsgIgorCQkJImNvbm5lY3QgdG8gYSBoaWdoIHNwZWVkIGh1YlxuIik7CisJCS8qIGh1YiBMRURzIGFyZSBwcm9iYWJseSBoYXJkZXIgdG8gbWlzcyB0aGFuIHN5c2xvZyAqLworCQlpZiAoaHViLT5oYXNfaW5kaWNhdG9ycykgeworCQkJaHViLT5pbmRpY2F0b3JbcG9ydDEtMV0gPSBJTkRJQ0FUT1JfR1JFRU5fQkxJTks7CisJCQlzY2hlZHVsZV93b3JrICgmaHViLT5sZWRzKTsKKwkJfQorCX0KKwlrZnJlZSAocXVhbCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZAoraHViX3Bvd2VyX3JlbWFpbmluZyAoc3RydWN0IHVzYl9odWIgKmh1YikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IGh1Yi0+aGRldjsKKwlpbnQgcmVtYWluaW5nOworCXVuc2lnbmVkIGk7CisKKwlyZW1haW5pbmcgPSBodWItPnBvd2VyX2J1ZGdldDsKKwlpZiAoIXJlbWFpbmluZykJCS8qIHNlbGYtcG93ZXJlZCAqLworCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBoZGV2LT5tYXhjaGlsZDsgaSsrKSB7CisJCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gaGRldi0+Y2hpbGRyZW5baV07CisJCWludAkJCWRlbHRhLCBjZWlsaW5nOworCisJCWlmICghdWRldikKKwkJCWNvbnRpbnVlOworCisJCS8qIDEwMG1BIHBlci1wb3J0IGNlaWxpbmcsIG9yIDhtQSBmb3IgT1RHIHBvcnRzICovCisJCWlmIChpICE9ICh1ZGV2LT5idXMtPm90Z19wb3J0IC0gMSkgfHwgaGRldi0+cGFyZW50KQorCQkJY2VpbGluZyA9IDUwOworCQllbHNlCisJCQljZWlsaW5nID0gNDsKKworCQlpZiAodWRldi0+YWN0Y29uZmlnKQorCQkJZGVsdGEgPSB1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk1heFBvd2VyOworCQllbHNlCisJCQlkZWx0YSA9IGNlaWxpbmc7CisJCS8vIGRldl9kYmcoJnVkZXYtPmRldiwgImJ1ZGdldGVkICVkbUFcbiIsIDIgKiBkZWx0YSk7CisJCWlmIChkZWx0YSA+IGNlaWxpbmcpCisJCQlkZXZfd2FybigmdWRldi0+ZGV2LCAiJWRtQSBvdmVyICVkbUEgYnVkZ2V0IVxuIiwKKwkJCQkyICogKGRlbHRhIC0gY2VpbGluZyksIDIgKiBjZWlsaW5nKTsKKwkJcmVtYWluaW5nIC09IGRlbHRhOworCX0KKwlpZiAocmVtYWluaW5nIDwgMCkgeworCQlkZXZfd2FybihodWItPmludGZkZXYsCisJCQkiJWRtQSBvdmVyIHBvd2VyIGJ1ZGdldCFcbiIsCisJCQktMiAqIHJlbWFpbmluZyk7CisJCXJlbWFpbmluZyA9IDA7CisJfQorCXJldHVybiByZW1haW5pbmc7Cit9CisKKy8qIEhhbmRsZSBwaHlzaWNhbCBvciBsb2dpY2FsIGNvbm5lY3Rpb24gY2hhbmdlIGV2ZW50cy4KKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbjoKKyAqIAlhIHBvcnQgY29ubmVjdGlvbi1jaGFuZ2Ugb2NjdXJzOworICoJYSBwb3J0IGVuYWJsZS1jaGFuZ2Ugb2NjdXJzIChvZnRlbiBjYXVzZWQgYnkgRU1JKTsKKyAqCXVzYl9yZXNldF9kZXZpY2UoKSBlbmNvdW50ZXJzIGNoYW5nZWQgZGVzY3JpcHRvcnMgKGFzIGZyb20KKyAqCQlhIGZpcm13YXJlIGRvd25sb2FkKQorICogY2FsbGVyIGFscmVhZHkgbG9ja2VkIHRoZSBodWIKKyAqLworc3RhdGljIHZvaWQgaHViX3BvcnRfY29ubmVjdF9jaGFuZ2Uoc3RydWN0IHVzYl9odWIgKmh1YiwgaW50IHBvcnQxLAorCQkJCQl1MTYgcG9ydHN0YXR1cywgdTE2IHBvcnRjaGFuZ2UpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYgPSBodWItPmhkZXY7CisJc3RydWN0IGRldmljZSAqaHViX2RldiA9IGh1Yi0+aW50ZmRldjsKKwlpbnQgc3RhdHVzLCBpOworIAorCWRldl9kYmcgKGh1Yl9kZXYsCisJCSJwb3J0ICVkLCBzdGF0dXMgJTA0eCwgY2hhbmdlICUwNHgsICVzXG4iLAorCQlwb3J0MSwgcG9ydHN0YXR1cywgcG9ydGNoYW5nZSwgcG9ydHNwZWVkIChwb3J0c3RhdHVzKSk7CisKKwlpZiAoaHViLT5oYXNfaW5kaWNhdG9ycykgeworCQlzZXRfcG9ydF9sZWQoaHViLCBwb3J0MSwgSFVCX0xFRF9BVVRPKTsKKwkJaHViLT5pbmRpY2F0b3JbcG9ydDEtMV0gPSBJTkRJQ0FUT1JfQVVUTzsKKwl9CisgCisJLyogRGlzY29ubmVjdCBhbnkgZXhpc3RpbmcgZGV2aWNlcyB1bmRlciB0aGlzIHBvcnQgKi8KKwlpZiAoaGRldi0+Y2hpbGRyZW5bcG9ydDEtMV0pCisJCXVzYl9kaXNjb25uZWN0KCZoZGV2LT5jaGlsZHJlbltwb3J0MS0xXSk7CisJY2xlYXJfYml0KHBvcnQxLCBodWItPmNoYW5nZV9iaXRzKTsKKworI2lmZGVmCUNPTkZJR19VU0JfT1RHCisJLyogZHVyaW5nIEhOUCwgZG9uJ3QgcmVwZWF0IHRoZSBkZWJvdW5jZSAqLworCWlmIChoZGV2LT5idXMtPmlzX2JfaG9zdCkKKwkJcG9ydGNoYW5nZSAmPSB+VVNCX1BPUlRfU1RBVF9DX0NPTk5FQ1RJT047CisjZW5kaWYKKworCWlmIChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RBVF9DX0NPTk5FQ1RJT04pIHsKKwkJc3RhdHVzID0gaHViX3BvcnRfZGVib3VuY2UoaHViLCBwb3J0MSk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlkZXZfZXJyIChodWJfZGV2LAorCQkJCSJjb25uZWN0LWRlYm91bmNlIGZhaWxlZCwgcG9ydCAlZCBkaXNhYmxlZFxuIiwKKwkJCQlwb3J0MSk7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJcG9ydHN0YXR1cyA9IHN0YXR1czsKKwl9CisKKwkvKiBSZXR1cm4gbm93IGlmIG5vdGhpbmcgaXMgY29ubmVjdGVkICovCisJaWYgKCEocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTikpIHsKKworCQkvKiBtYXliZSBzd2l0Y2ggcG93ZXIgYmFjayBvbiAoZS5nLiByb290IGh1YiB3YXMgcmVzZXQpICovCisJCWlmICgoaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzCisJCQkJCSYgSFVCX0NIQVJfTFBTTSkgPCAyCisJCQkJJiYgIShwb3J0c3RhdHVzICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9QT1dFUikpKQorCQkJc2V0X3BvcnRfZmVhdHVyZShoZGV2LCBwb3J0MSwgVVNCX1BPUlRfRkVBVF9QT1dFUik7CisgCisJCWlmIChwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9FTkFCTEUpCisgIAkJCWdvdG8gZG9uZTsKKwkJcmV0dXJuOworCX0KKworI2lmZGVmICBDT05GSUdfVVNCX1NVU1BFTkQKKwkvKiBJZiBzb21ldGhpbmcgaXMgY29ubmVjdGVkLCBidXQgdGhlIHBvcnQgaXMgc3VzcGVuZGVkLCB3YWtlIGl0IHVwLiAqLworCWlmIChwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9TVVNQRU5EKSB7CisJCXN0YXR1cyA9IGh1Yl9wb3J0X3Jlc3VtZShodWIsIHBvcnQxLCBOVUxMKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRldl9kYmcoaHViX2RldiwKKwkJCQkiY2FuJ3QgY2xlYXIgc3VzcGVuZCBvbiBwb3J0ICVkOyAlZFxuIiwKKwkJCQlwb3J0MSwgc3RhdHVzKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKyNlbmRpZgorCisJZm9yIChpID0gMDsgaSA8IFNFVF9DT05GSUdfVFJJRVM7IGkrKykgeworCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKworCQkvKiByZWFsbG9jYXRlIGZvciBlYWNoIGF0dGVtcHQsIHNpbmNlIHJlZmVyZW5jZXMKKwkJICogdG8gdGhlIHByZXZpb3VzIG9uZSBjYW4gZXNjYXBlIGluIHZhcmlvdXMgd2F5cworCQkgKi8KKwkJdWRldiA9IHVzYl9hbGxvY19kZXYoaGRldiwgaGRldi0+YnVzLCBwb3J0MSk7CisJCWlmICghdWRldikgeworCQkJZGV2X2VyciAoaHViX2RldiwKKwkJCQkiY291bGRuJ3QgYWxsb2NhdGUgcG9ydCAlZCB1c2JfZGV2aWNlXG4iLAorCQkJCXBvcnQxKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVkZXYsIFVTQl9TVEFURV9QT1dFUkVEKTsKKwkJdWRldi0+c3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKyAKKwkJLyogc2V0IHRoZSBhZGRyZXNzICovCisJCWNob29zZV9hZGRyZXNzKHVkZXYpOworCQlpZiAodWRldi0+ZGV2bnVtIDw9IDApIHsKKwkJCXN0YXR1cyA9IC1FTk9UQ09OTjsJLyogRG9uJ3QgcmV0cnkgKi8KKwkJCWdvdG8gbG9vcDsKKwkJfQorCisJCS8qIHJlc2V0IGFuZCBnZXQgZGVzY3JpcHRvciAqLworCQlzdGF0dXMgPSBodWJfcG9ydF9pbml0KGh1YiwgdWRldiwgcG9ydDEsIGkpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gbG9vcDsKKworCQkvKiBjb25zZWN1dGl2ZSBidXMtcG93ZXJlZCBodWJzIGFyZW4ndCByZWxpYWJsZTsgdGhleSBjYW4KKwkJICogdmlvbGF0ZSB0aGUgdm9sdGFnZSBkcm9wIGJ1ZGdldC4gIGlmIHRoZSBuZXcgY2hpbGQgaGFzCisJCSAqIGEgInBvd2VyZWQiIExFRCwgdXNlcnMgc2hvdWxkIG5vdGljZSB3ZSBkaWRuJ3QgZW5hYmxlIGl0CisJCSAqICh3aXRob3V0IHJlYWRpbmcgc3lzbG9nKSwgZXZlbiB3aXRob3V0IHBlci1wb3J0IExFRHMKKwkJICogb24gdGhlIHBhcmVudC4KKwkJICovCisJCWlmICh1ZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcyA9PSBVU0JfQ0xBU1NfSFVCCisJCQkJJiYgaHViLT5wb3dlcl9idWRnZXQpIHsKKwkJCXUxNglkZXZzdGF0OworCisJCQlzdGF0dXMgPSB1c2JfZ2V0X3N0YXR1cyh1ZGV2LCBVU0JfUkVDSVBfREVWSUNFLCAwLAorCQkJCQkmZGV2c3RhdCk7CisJCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJCWRldl9kYmcoJnVkZXYtPmRldiwgImdldCBzdGF0dXMgJWQgP1xuIiwgc3RhdHVzKTsKKwkJCQlnb3RvIGxvb3BfZGlzYWJsZTsKKwkJCX0KKwkJCWNwdV90b19sZTE2cygmZGV2c3RhdCk7CisJCQlpZiAoKGRldnN0YXQgJiAoMSA8PCBVU0JfREVWSUNFX1NFTEZfUE9XRVJFRCkpID09IDApIHsKKwkJCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsCisJCQkJCSJjYW4ndCBjb25uZWN0IGJ1cy1wb3dlcmVkIGh1YiAiCisJCQkJCSJ0byB0aGlzIHBvcnRcbiIpOworCQkJCWlmIChodWItPmhhc19pbmRpY2F0b3JzKSB7CisJCQkJCWh1Yi0+aW5kaWNhdG9yW3BvcnQxLTFdID0KKwkJCQkJCUlORElDQVRPUl9BTUJFUl9CTElOSzsKKwkJCQkJc2NoZWR1bGVfd29yayAoJmh1Yi0+bGVkcyk7CisJCQkJfQorCQkJCXN0YXR1cyA9IC1FTk9UQ09OTjsJLyogRG9uJ3QgcmV0cnkgKi8KKwkJCQlnb3RvIGxvb3BfZGlzYWJsZTsKKwkJCX0KKwkJfQorIAorCQkvKiBjaGVjayBmb3IgZGV2aWNlcyBydW5uaW5nIHNsb3dlciB0aGFuIHRoZXkgY291bGQgKi8KKwkJaWYgKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuYmNkVVNCKSA+PSAweDAyMDAKKwkJCQkmJiB1ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfRlVMTAorCQkJCSYmIGhpZ2hzcGVlZF9odWJzICE9IDApCisJCQljaGVja19oaWdoc3BlZWQgKGh1YiwgdWRldiwgcG9ydDEpOworCisJCS8qIFN0b3JlIHRoZSBwYXJlbnQncyBjaGlsZHJlbltdIHBvaW50ZXIuICBBdCB0aGlzIHBvaW50CisJCSAqIHVkZXYgYmVjb21lcyBnbG9iYWxseSBhY2Nlc3NpYmxlLCBhbHRob3VnaCBwcmVzdW1hYmx5CisJCSAqIG5vIG9uZSB3aWxsIGxvb2sgYXQgaXQgdW50aWwgaGRldiBpcyB1bmxvY2tlZC4KKwkJICovCisJCWRvd24gKCZ1ZGV2LT5zZXJpYWxpemUpOworCQlzdGF0dXMgPSAwOworCisJCS8qIFdlIG11c3RuJ3QgYWRkIG5ldyBkZXZpY2VzIGlmIHRoZSBwYXJlbnQgaHViIGhhcworCQkgKiBiZWVuIGRpc2Nvbm5lY3RlZDsgd2Ugd291bGQgcmFjZSB3aXRoIHRoZQorCQkgKiByZWN1cnNpdmVseV9tYXJrX05PVEFUVEFDSEVEKCkgcm91dGluZS4KKwkJICovCisJCXNwaW5fbG9ja19pcnEoJmRldmljZV9zdGF0ZV9sb2NrKTsKKwkJaWYgKGhkZXYtPnN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCkKKwkJCXN0YXR1cyA9IC1FTk9UQ09OTjsKKwkJZWxzZQorCQkJaGRldi0+Y2hpbGRyZW5bcG9ydDEtMV0gPSB1ZGV2OworCQlzcGluX3VubG9ja19pcnEoJmRldmljZV9zdGF0ZV9sb2NrKTsKKworCQkvKiBSdW4gaXQgdGhyb3VnaCB0aGUgaG9vcHMgKGZpbmQgYSBkcml2ZXIsIGV0YykgKi8KKwkJaWYgKCFzdGF0dXMpIHsKKwkJCXN0YXR1cyA9IHVzYl9uZXdfZGV2aWNlKHVkZXYpOworCQkJaWYgKHN0YXR1cykgeworCQkJCXNwaW5fbG9ja19pcnEoJmRldmljZV9zdGF0ZV9sb2NrKTsKKwkJCQloZGV2LT5jaGlsZHJlbltwb3J0MS0xXSA9IE5VTEw7CisJCQkJc3Bpbl91bmxvY2tfaXJxKCZkZXZpY2Vfc3RhdGVfbG9jayk7CisJCQl9CisJCX0KKworCQl1cCAoJnVkZXYtPnNlcmlhbGl6ZSk7CisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGxvb3BfZGlzYWJsZTsKKworCQlzdGF0dXMgPSBodWJfcG93ZXJfcmVtYWluaW5nKGh1Yik7CisJCWlmIChzdGF0dXMpCisJCQlkZXZfZGJnKGh1Yl9kZXYsCisJCQkJIiVkbUEgcG93ZXIgYnVkZ2V0IGxlZnRcbiIsCisJCQkJMiAqIHN0YXR1cyk7CisKKwkJcmV0dXJuOworCitsb29wX2Rpc2FibGU6CisJCWh1Yl9wb3J0X2Rpc2FibGUoaHViLCBwb3J0MSwgMSk7Citsb29wOgorCQllcDBfcmVpbml0KHVkZXYpOworCQlyZWxlYXNlX2FkZHJlc3ModWRldik7CisJCXVzYl9wdXRfZGV2KHVkZXYpOworCQlpZiAoc3RhdHVzID09IC1FTk9UQ09OTikKKwkJCWJyZWFrOworCX0KKyAKK2RvbmU6CisJaHViX3BvcnRfZGlzYWJsZShodWIsIHBvcnQxLCAxKTsKK30KKworc3RhdGljIHZvaWQgaHViX2V2ZW50cyh2b2lkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlzdHJ1Y3QgdXNiX2h1YiAqaHViOworCXN0cnVjdCBkZXZpY2UgKmh1Yl9kZXY7CisJdTE2IGh1YnN0YXR1czsKKwl1MTYgaHViY2hhbmdlOworCXUxNiBwb3J0c3RhdHVzOworCXUxNiBwb3J0Y2hhbmdlOworCWludCBpLCByZXQ7CisJaW50IGNvbm5lY3RfY2hhbmdlOworCisJLyoKKwkgKiAgV2UgcmVzdGFydCB0aGUgbGlzdCBldmVyeSB0aW1lIHRvIGF2b2lkIGEgZGVhZGxvY2sgd2l0aAorCSAqIGRlbGV0aW5nIGh1YnMgZG93bnN0cmVhbSBmcm9tIHRoaXMgb25lLiBUaGlzIHNob3VsZCBiZQorCSAqIHNhZmUgc2luY2Ugd2UgZGVsZXRlIHRoZSBodWIgZnJvbSB0aGUgZXZlbnQgbGlzdC4KKwkgKiBOb3QgdGhlIG1vc3QgZWZmaWNpZW50LCBidXQgYXZvaWRzIGRlYWRsb2Nrcy4KKwkgKi8KKwl3aGlsZSAoMSkgeworCisJCS8qIEdyYWIgdGhlIGZpcnN0IGVudHJ5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QgKi8KKwkJc3Bpbl9sb2NrX2lycSgmaHViX2V2ZW50X2xvY2spOworCQlpZiAobGlzdF9lbXB0eSgmaHViX2V2ZW50X2xpc3QpKSB7CisJCQlzcGluX3VubG9ja19pcnEoJmh1Yl9ldmVudF9sb2NrKTsKKwkJCWJyZWFrOworCQl9CisKKwkJdG1wID0gaHViX2V2ZW50X2xpc3QubmV4dDsKKwkJbGlzdF9kZWxfaW5pdCh0bXApOworCisJCWh1YiA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgdXNiX2h1YiwgZXZlbnRfbGlzdCk7CisJCWhkZXYgPSBodWItPmhkZXY7CisJCWludGYgPSB0b191c2JfaW50ZXJmYWNlKGh1Yi0+aW50ZmRldik7CisJCWh1Yl9kZXYgPSAmaW50Zi0+ZGV2OworCisJCWRldl9kYmcoaHViX2RldiwgInN0YXRlICVkIHBvcnRzICVkIGNoZyAlMDR4IGV2dCAlMDR4XG4iLAorCQkJCWhkZXYtPnN0YXRlLCBodWItPmRlc2NyaXB0b3IKKwkJCQkJPyBodWItPmRlc2NyaXB0b3ItPmJOYnJQb3J0cworCQkJCQk6IDAsCisJCQkJLyogTk9URTogZXhwZWN0cyBtYXggMTUgcG9ydHMuLi4gKi8KKwkJCQkodTE2KSBodWItPmNoYW5nZV9iaXRzWzBdLAorCQkJCSh1MTYpIGh1Yi0+ZXZlbnRfYml0c1swXSk7CisKKwkJdXNiX2dldF9pbnRmKGludGYpOworCQlpID0gaHViLT5yZXN1bWVfcm9vdF9odWI7CisJCXNwaW5fdW5sb2NrX2lycSgmaHViX2V2ZW50X2xvY2spOworCisJCS8qIElzIHRoaXMgaXMgYSByb290IGh1YiB3YW50aW5nIHRvIGJlIHJlc3VtZWQ/ICovCisJCWlmIChpKQorCQkJdXNiX3Jlc3VtZV9kZXZpY2UoaGRldik7CisKKwkJLyogTG9jayB0aGUgZGV2aWNlLCB0aGVuIGNoZWNrIHRvIHNlZSBpZiB3ZSB3ZXJlCisJCSAqIGRpc2Nvbm5lY3RlZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbG9jayB0byBzdWNjZWVkLiAqLworCQlpZiAobG9ja3RyZWUoaGRldikgPCAwKSB7CisJCQl1c2JfcHV0X2ludGYoaW50Zik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoaHViICE9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZikpCisJCQlnb3RvIGxvb3A7CisKKwkJLyogSWYgdGhlIGh1YiBoYXMgZGllZCwgY2xlYW4gdXAgYWZ0ZXIgaXQgKi8KKwkJaWYgKGhkZXYtPnN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCkgeworCQkJaHViX3ByZV9yZXNldChodWIpOworCQkJZ290byBsb29wOworCQl9CisKKwkJLyogSWYgdGhpcyBpcyBhbiBpbmFjdGl2ZSBvciBzdXNwZW5kZWQgaHViLCBkbyBub3RoaW5nICovCisJCWlmIChodWItPnF1aWVzY2luZykKKwkJCWdvdG8gbG9vcDsKKworCQlpZiAoaHViLT5lcnJvcikgeworCQkJZGV2X2RiZyAoaHViX2RldiwgInJlc2V0dGluZyBmb3IgZXJyb3IgJWRcbiIsCisJCQkJaHViLT5lcnJvcik7CisKKwkJCXJldCA9IHVzYl9yZXNldF9kZXZpY2UoaGRldik7CisJCQlpZiAocmV0KSB7CisJCQkJZGV2X2RiZyAoaHViX2RldiwKKwkJCQkJImVycm9yIHJlc2V0dGluZyBodWI6ICVkXG4iLCByZXQpOworCQkJCWdvdG8gbG9vcDsKKwkJCX0KKworCQkJaHViLT5uZXJyb3JzID0gMDsKKwkJCWh1Yi0+ZXJyb3IgPSAwOworCQl9CisKKwkJLyogZGVhbCB3aXRoIHBvcnQgc3RhdHVzIGNoYW5nZXMgKi8KKwkJZm9yIChpID0gMTsgaSA8PSBodWItPmRlc2NyaXB0b3ItPmJOYnJQb3J0czsgaSsrKSB7CisJCQlpZiAodGVzdF9iaXQoaSwgaHViLT5idXN5X2JpdHMpKQorCQkJCWNvbnRpbnVlOworCQkJY29ubmVjdF9jaGFuZ2UgPSB0ZXN0X2JpdChpLCBodWItPmNoYW5nZV9iaXRzKTsKKwkJCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KGksIGh1Yi0+ZXZlbnRfYml0cykgJiYKKwkJCQkJIWNvbm5lY3RfY2hhbmdlICYmICFodWItPmFjdGl2YXRpbmcpCisJCQkJY29udGludWU7CisKKwkJCXJldCA9IGh1Yl9wb3J0X3N0YXR1cyhodWIsIGksCisJCQkJCSZwb3J0c3RhdHVzLCAmcG9ydGNoYW5nZSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKGh1Yi0+YWN0aXZhdGluZyAmJiAhaGRldi0+Y2hpbGRyZW5baS0xXSAmJgorCQkJCQkocG9ydHN0YXR1cyAmCisJCQkJCQlVU0JfUE9SVF9TVEFUX0NPTk5FQ1RJT04pKQorCQkJCWNvbm5lY3RfY2hhbmdlID0gMTsKKworCQkJaWYgKHBvcnRjaGFuZ2UgJiBVU0JfUE9SVF9TVEFUX0NfQ09OTkVDVElPTikgeworCQkJCWNsZWFyX3BvcnRfZmVhdHVyZShoZGV2LCBpLAorCQkJCQlVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTik7CisJCQkJY29ubmVjdF9jaGFuZ2UgPSAxOworCQkJfQorCisJCQlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19FTkFCTEUpIHsKKwkJCQlpZiAoIWNvbm5lY3RfY2hhbmdlKQorCQkJCQlkZXZfZGJnIChodWJfZGV2LAorCQkJCQkJInBvcnQgJWQgZW5hYmxlIGNoYW5nZSwgIgorCQkJCQkJInN0YXR1cyAlMDh4XG4iLAorCQkJCQkJaSwgcG9ydHN0YXR1cyk7CisJCQkJY2xlYXJfcG9ydF9mZWF0dXJlKGhkZXYsIGksCisJCQkJCVVTQl9QT1JUX0ZFQVRfQ19FTkFCTEUpOworCisJCQkJLyoKKwkJCQkgKiBFTSBpbnRlcmZlcmVuY2Ugc29tZXRpbWVzIGNhdXNlcyBiYWRseQorCQkJCSAqIHNoaWVsZGVkIFVTQiBkZXZpY2VzIHRvIGJlIHNodXRkb3duIGJ5CisJCQkJICogdGhlIGh1YiwgdGhpcyBoYWNrIGVuYWJsZXMgdGhlbSBhZ2Fpbi4KKwkJCQkgKiBXb3JrcyBhdCBsZWFzdCB3aXRoIG1vdXNlIGRyaXZlci4gCisJCQkJICovCisJCQkJaWYgKCEocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfRU5BQkxFKQorCQkJCSAgICAmJiAhY29ubmVjdF9jaGFuZ2UKKwkJCQkgICAgJiYgaGRldi0+Y2hpbGRyZW5baS0xXSkgeworCQkJCQlkZXZfZXJyIChodWJfZGV2LAorCQkJCQkgICAgInBvcnQgJWkgIgorCQkJCQkgICAgImRpc2FibGVkIGJ5IGh1YiAoRU1JPyksICIKKwkJCQkJICAgICJyZS1lbmFibGluZy4uLlxuIiwKKwkJCQkJCWkpOworCQkJCQljb25uZWN0X2NoYW5nZSA9IDE7CisJCQkJfQorCQkJfQorCisJCQlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19TVVNQRU5EKSB7CisJCQkJY2xlYXJfcG9ydF9mZWF0dXJlKGhkZXYsIGksCisJCQkJCVVTQl9QT1JUX0ZFQVRfQ19TVVNQRU5EKTsKKwkJCQlpZiAoaGRldi0+Y2hpbGRyZW5baS0xXSkgeworCQkJCQlyZXQgPSByZW1vdGVfd2FrZXVwKGhkZXYtPgorCQkJCQkJCWNoaWxkcmVuW2ktMV0pOworCQkJCQlpZiAocmV0IDwgMCkKKwkJCQkJCWNvbm5lY3RfY2hhbmdlID0gMTsKKwkJCQl9IGVsc2UgeworCQkJCQlyZXQgPSAtRU5PREVWOworCQkJCQlodWJfcG9ydF9kaXNhYmxlKGh1YiwgaSwgMSk7CisJCQkJfQorCQkJCWRldl9kYmcgKGh1Yl9kZXYsCisJCQkJCSJyZXN1bWUgb24gcG9ydCAlZCwgc3RhdHVzICVkXG4iLAorCQkJCQlpLCByZXQpOworCQkJfQorCQkJCisJCQlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19PVkVSQ1VSUkVOVCkgeworCQkJCWRldl9lcnIgKGh1Yl9kZXYsCisJCQkJCSJvdmVyLWN1cnJlbnQgY2hhbmdlIG9uIHBvcnQgJWRcbiIsCisJCQkJCWkpOworCQkJCWNsZWFyX3BvcnRfZmVhdHVyZShoZGV2LCBpLAorCQkJCQlVU0JfUE9SVF9GRUFUX0NfT1ZFUl9DVVJSRU5UKTsKKwkJCQlodWJfcG93ZXJfb24oaHViKTsKKwkJCX0KKworCQkJaWYgKHBvcnRjaGFuZ2UgJiBVU0JfUE9SVF9TVEFUX0NfUkVTRVQpIHsKKwkJCQlkZXZfZGJnIChodWJfZGV2LAorCQkJCQkicmVzZXQgY2hhbmdlIG9uIHBvcnQgJWRcbiIsCisJCQkJCWkpOworCQkJCWNsZWFyX3BvcnRfZmVhdHVyZShoZGV2LCBpLAorCQkJCQlVU0JfUE9SVF9GRUFUX0NfUkVTRVQpOworCQkJfQorCisJCQlpZiAoY29ubmVjdF9jaGFuZ2UpCisJCQkJaHViX3BvcnRfY29ubmVjdF9jaGFuZ2UoaHViLCBpLAorCQkJCQkJcG9ydHN0YXR1cywgcG9ydGNoYW5nZSk7CisJCX0gLyogZW5kIGZvciBpICovCisKKwkJLyogZGVhbCB3aXRoIGh1YiBzdGF0dXMgY2hhbmdlcyAqLworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KDAsIGh1Yi0+ZXZlbnRfYml0cykgPT0gMCkKKwkJCTsJLyogZG8gbm90aGluZyAqLworCQllbHNlIGlmIChodWJfaHViX3N0YXR1cyhodWIsICZodWJzdGF0dXMsICZodWJjaGFuZ2UpIDwgMCkKKwkJCWRldl9lcnIgKGh1Yl9kZXYsICJnZXRfaHViX3N0YXR1cyBmYWlsZWRcbiIpOworCQllbHNlIHsKKwkJCWlmIChodWJjaGFuZ2UgJiBIVUJfQ0hBTkdFX0xPQ0FMX1BPV0VSKSB7CisJCQkJZGV2X2RiZyAoaHViX2RldiwgInBvd2VyIGNoYW5nZVxuIik7CisJCQkJY2xlYXJfaHViX2ZlYXR1cmUoaGRldiwgQ19IVUJfTE9DQUxfUE9XRVIpOworCQkJfQorCQkJaWYgKGh1YmNoYW5nZSAmIEhVQl9DSEFOR0VfT1ZFUkNVUlJFTlQpIHsKKwkJCQlkZXZfZGJnIChodWJfZGV2LCAib3ZlcmN1cnJlbnQgY2hhbmdlXG4iKTsKKwkJCQltc2xlZXAoNTAwKTsJLyogQ29vbCBkb3duICovCisJCQkJY2xlYXJfaHViX2ZlYXR1cmUoaGRldiwgQ19IVUJfT1ZFUl9DVVJSRU5UKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAlodWJfcG93ZXJfb24oaHViKTsKKwkJCX0KKwkJfQorCisJCWh1Yi0+YWN0aXZhdGluZyA9IDA7CisKK2xvb3A6CisJCXVzYl91bmxvY2tfZGV2aWNlKGhkZXYpOworCQl1c2JfcHV0X2ludGYoaW50Zik7CisKKyAgICAgICAgfSAvKiBlbmQgd2hpbGUgKDEpICovCit9CisKK3N0YXRpYyBpbnQgaHViX3RocmVhZCh2b2lkICpfX3VudXNlZCkKK3sKKwkvKgorCSAqIFRoaXMgdGhyZWFkIGRvZXNuJ3QgbmVlZCBhbnkgdXNlci1sZXZlbCBhY2Nlc3MsCisJICogc28gZ2V0IHJpZCBvZiBhbGwgb3VyIHJlc291cmNlcworCSAqLworCisJZGFlbW9uaXplKCJraHViZCIpOworCWFsbG93X3NpZ25hbChTSUdLSUxMKTsKKworCS8qIFNlbmQgbWUgYSBzaWduYWwgdG8gZ2V0IG1lIGRpZSAoZm9yIGRlYnVnZ2luZykgKi8KKwlkbyB7CisJCWh1Yl9ldmVudHMoKTsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGtodWJkX3dhaXQsICFsaXN0X2VtcHR5KCZodWJfZXZlbnRfbGlzdCkpOyAKKwkJdHJ5X3RvX2ZyZWV6ZShQRl9GUkVFWkUpOworCX0gd2hpbGUgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSk7CisKKwlwcl9kZWJ1ZyAoIiVzOiBraHViZCBleGl0aW5nXG4iLCB1c2Jjb3JlX25hbWUpOworCWNvbXBsZXRlX2FuZF9leGl0KCZraHViZF9leGl0ZWQsIDApOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaHViX2lkX3RhYmxlIFtdID0geworICAgIHsgLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfQ0xBU1MsCisgICAgICAuYkRldmljZUNsYXNzID0gVVNCX0NMQVNTX0hVQn0sCisgICAgeyAubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUywKKyAgICAgIC5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfSFVCfSwKKyAgICB7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBodWJfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaHViX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiaHViIiwKKwkucHJvYmUgPQlodWJfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQlodWJfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CWh1Yl9zdXNwZW5kLAorCS5yZXN1bWUgPQlodWJfcmVzdW1lLAorCS5pb2N0bCA9CWh1Yl9pb2N0bCwKKwkuaWRfdGFibGUgPQlodWJfaWRfdGFibGUsCit9OworCitpbnQgdXNiX2h1Yl9pbml0KHZvaWQpCit7CisJcGlkX3QgcGlkOworCisJaWYgKHVzYl9yZWdpc3RlcigmaHViX2RyaXZlcikgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IHJlZ2lzdGVyIGh1YiBkcml2ZXJcbiIsCisJCQl1c2Jjb3JlX25hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCisJcGlkID0ga2VybmVsX3RocmVhZChodWJfdGhyZWFkLCBOVUxMLCBDTE9ORV9LRVJORUwpOworCWlmIChwaWQgPj0gMCkgeworCQlraHViZF9waWQgPSBwaWQ7CisKKwkJcmV0dXJuIDA7CisJfQorCisJLyogRmFsbCB0aHJvdWdoIGlmIGtlcm5lbF90aHJlYWQgZmFpbGVkICovCisJdXNiX2RlcmVnaXN0ZXIoJmh1Yl9kcml2ZXIpOworCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IHN0YXJ0IGtodWJkXG4iLCB1c2Jjb3JlX25hbWUpOworCisJcmV0dXJuIC0xOworfQorCit2b2lkIHVzYl9odWJfY2xlYW51cCh2b2lkKQoreworCWludCByZXQ7CisKKwkvKiBLaWxsIHRoZSB0aHJlYWQgKi8KKwlyZXQgPSBraWxsX3Byb2Moa2h1YmRfcGlkLCBTSUdLSUxMLCAxKTsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmtodWJkX2V4aXRlZCk7CisKKwkvKgorCSAqIEh1YiByZXNvdXJjZXMgYXJlIGZyZWVkIGZvciB1cyBieSB1c2JfZGVyZWdpc3Rlci4gSXQgY2FsbHMKKwkgKiB1c2JfZHJpdmVyX3B1cmdlIG9uIGV2ZXJ5IGRldmljZSB3aGljaCBpbiB0dXJuIGNhbGxzIHRoYXQKKwkgKiBkZXZpY2VzIGRpc2Nvbm5lY3QgZnVuY3Rpb24gaWYgaXQgaXMgdXNpbmcgdGhpcyBkcml2ZXIuCisJICogVGhlIGh1Yl9kaXNjb25uZWN0IGZ1bmN0aW9uIHRha2VzIGNhcmUgb2YgcmVsZWFzaW5nIHRoZQorCSAqIGluZGl2aWR1YWwgaHViIHJlc291cmNlcy4gLWdyZWcKKwkgKi8KKwl1c2JfZGVyZWdpc3RlcigmaHViX2RyaXZlcik7Cit9IC8qIHVzYl9odWJfY2xlYW51cCgpICovCisKKworc3RhdGljIGludCBjb25maWdfZGVzY3JpcHRvcnNfY2hhbmdlZChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwl1bnNpZ25lZAkJCWluZGV4OworCXVuc2lnbmVkCQkJbGVuID0gMDsKKwlzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yCSpidWY7CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB1ZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9uczsgaW5kZXgrKykgeworCQlpZiAobGVuIDwgbGUxNl90b19jcHUodWRldi0+Y29uZmlnW2luZGV4XS5kZXNjLndUb3RhbExlbmd0aCkpCisJCQlsZW4gPSBsZTE2X3RvX2NwdSh1ZGV2LT5jb25maWdbaW5kZXhdLmRlc2Mud1RvdGFsTGVuZ3RoKTsKKwl9CisJYnVmID0ga21hbGxvYyAobGVuLCBTTEFCX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnVkZXYtPmRldiwgIm5vIG1lbSB0byByZS1yZWFkIGNvbmZpZ3MgYWZ0ZXIgcmVzZXRcbiIpOworCQkvKiBhc3N1bWUgdGhlIHdvcnN0ICovCisJCXJldHVybiAxOworCX0KKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB1ZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9uczsgaW5kZXgrKykgeworCQlpbnQgbGVuZ3RoOworCQlpbnQgb2xkX2xlbmd0aCA9IGxlMTZfdG9fY3B1KHVkZXYtPmNvbmZpZ1tpbmRleF0uZGVzYy53VG90YWxMZW5ndGgpOworCisJCWxlbmd0aCA9IHVzYl9nZXRfZGVzY3JpcHRvcih1ZGV2LCBVU0JfRFRfQ09ORklHLCBpbmRleCwgYnVmLAorCQkJCW9sZF9sZW5ndGgpOworCQlpZiAobGVuZ3RoIDwgb2xkX2xlbmd0aCkgeworCQkJZGV2X2RiZygmdWRldi0+ZGV2LCAiY29uZmlnIGluZGV4ICVkLCBlcnJvciAlZFxuIiwKKwkJCQkJaW5kZXgsIGxlbmd0aCk7CisJCQlicmVhazsKKwkJfQorCQlpZiAobWVtY21wIChidWYsIHVkZXYtPnJhd2Rlc2NyaXB0b3JzW2luZGV4XSwgb2xkX2xlbmd0aCkKKwkJCQkhPSAwKSB7CisJCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJjb25maWcgaW5kZXggJWQgY2hhbmdlZCAoIyVkKVxuIiwKKwkJCQlpbmRleCwgYnVmLT5iQ29uZmlndXJhdGlvblZhbHVlKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIGluZGV4ICE9IHVkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zOworfQorCisvKioKKyAqIHVzYl9yZXNldF9kZXZpY2UgLSBwZXJmb3JtIGEgVVNCIHBvcnQgcmVzZXQgdG8gcmVpbml0aWFsaXplIGEgZGV2aWNlCisgKiBAdWRldjogZGV2aWNlIHRvIHJlc2V0IChub3QgaW4gU1VTUEVOREVEIG9yIE5PVEFUVEFDSEVEIHN0YXRlKQorICoKKyAqIFdBUk5JTkcgLSBkb24ndCByZXNldCBhbnkgZGV2aWNlIHVubGVzcyBkcml2ZXJzIGZvciBhbGwgb2YgaXRzCisgKiBpbnRlcmZhY2VzIGFyZSBleHBlY3RpbmcgdGhhdCByZXNldCEgIE1heWJlIHNvbWUgZHJpdmVyLT5yZXNldCgpCisgKiBtZXRob2Qgc2hvdWxkIGV2ZW50dWFsbHkgaGVscCBlbnN1cmUgc3VmZmljaWVudCBjb29wZXJhdGlvbi4KKyAqCisgKiBEbyBhIHBvcnQgcmVzZXQsIHJlYXNzaWduIHRoZSBkZXZpY2UncyBhZGRyZXNzLCBhbmQgZXN0YWJsaXNoIGl0cworICogZm9ybWVyIG9wZXJhdGluZyBjb25maWd1cmF0aW9uLiAgSWYgdGhlIHJlc2V0IGZhaWxzLCBvciB0aGUgZGV2aWNlJ3MKKyAqIGRlc2NyaXB0b3JzIGNoYW5nZSBmcm9tIHRoZWlyIHZhbHVlcyBiZWZvcmUgdGhlIHJlc2V0LCBvciB0aGUgb3JpZ2luYWwKKyAqIGNvbmZpZ3VyYXRpb24gYW5kIGFsdHNldHRpbmdzIGNhbm5vdCBiZSByZXN0b3JlZCwgYSBmbGFnIHdpbGwgYmUgc2V0CisgKiB0ZWxsaW5nIGtodWJkIHRvIHByZXRlbmQgdGhlIGRldmljZSBoYXMgYmVlbiBkaXNjb25uZWN0ZWQgYW5kIHRoZW4KKyAqIHJlLWNvbm5lY3RlZC4gIEFsbCBkcml2ZXJzIHdpbGwgYmUgdW5ib3VuZCwgYW5kIHRoZSBkZXZpY2Ugd2lsbCBiZQorICogcmUtZW51bWVyYXRlZCBhbmQgcHJvYmVkIGFsbCBvdmVyIGFnYWluLgorICoKKyAqIFJldHVybnMgMCBpZiB0aGUgcmVzZXQgc3VjY2VlZGVkLCAtRU5PREVWIGlmIHRoZSBkZXZpY2UgaGFzIGJlZW4KKyAqIGZsYWdnZWQgZm9yIGxvZ2ljYWwgZGlzY29ubmVjdGlvbiwgb3Igc29tZSBvdGhlciBuZWdhdGl2ZSBlcnJvciBjb2RlCisgKiBpZiB0aGUgcmVzZXQgd2Fzbid0IGV2ZW4gYXR0ZW1wdGVkLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBvd24gdGhlIGRldmljZSBsb2NrLiAgRm9yIGV4YW1wbGUsIGl0J3Mgc2FmZSB0byB1c2UKKyAqIHRoaXMgZnJvbSBhIGRyaXZlciBwcm9iZSgpIHJvdXRpbmUgYWZ0ZXIgZG93bmxvYWRpbmcgbmV3IGZpcm13YXJlLgorICogRm9yIGNhbGxzIHRoYXQgbWlnaHQgbm90IG9jY3VyIGR1cmluZyBwcm9iZSgpLCBkcml2ZXJzIHNob3VsZCBsb2NrCisgKiB0aGUgZGV2aWNlIHVzaW5nIHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQoKS4KKyAqLworaW50IHVzYl9yZXNldF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJc3RydWN0IHVzYl9kZXZpY2UJCSpwYXJlbnRfaGRldiA9IHVkZXYtPnBhcmVudDsKKwlzdHJ1Y3QgdXNiX2h1YgkJCSpwYXJlbnRfaHViOworCXN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IJZGVzY3JpcHRvciA9IHVkZXYtPmRlc2NyaXB0b3I7CisJc3RydWN0IHVzYl9odWIJCQkqaHViID0gTlVMTDsKKwlpbnQgCQkJCWksIHJldCA9IDAsIHBvcnQxID0gLTE7CisKKwlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEIHx8CisJCQl1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKSB7CisJCWRldl9kYmcoJnVkZXYtPmRldiwgImRldmljZSByZXNldCBub3QgYWxsb3dlZCBpbiBzdGF0ZSAlZFxuIiwKKwkJCQl1ZGV2LT5zdGF0ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghcGFyZW50X2hkZXYpIHsKKwkJLyogdGhpcyByZXF1aXJlcyBoY2Qtc3BlY2lmaWMgbG9naWM7IHNlZSBPSENJIGhjX3Jlc3RhcnQoKSAqLworCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICIlcyBmb3Igcm9vdCBodWIhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJU0RJUjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcGFyZW50X2hkZXYtPm1heGNoaWxkOyBpKyspCisJCWlmIChwYXJlbnRfaGRldi0+Y2hpbGRyZW5baV0gPT0gdWRldikgeworCQkJcG9ydDEgPSBpICsgMTsKKwkJCWJyZWFrOworCQl9CisKKwlpZiAocG9ydDEgPCAwKSB7CisJCS8qIElmIHRoaXMgZXZlciBoYXBwZW5zLCBpdCdzIHZlcnkgYmFkICovCisJCWRldl9lcnIoJnVkZXYtPmRldiwgIkNhbid0IGxvY2F0ZSBkZXZpY2UncyBwb3J0IVxuIik7CisJCXJldHVybiAtRU5PRU5UOworCX0KKwlwYXJlbnRfaHViID0gaGRldl90b19odWIocGFyZW50X2hkZXYpOworCisJLyogSWYgd2UncmUgcmVzZXR0aW5nIGFuIGFjdGl2ZSBodWIsIHRha2Ugc29tZSBzcGVjaWFsIGFjdGlvbnMgKi8KKwlpZiAodWRldi0+YWN0Y29uZmlnICYmCisJCQl1ZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVswXS0+ZGV2LmRyaXZlciA9PQorCQkJCSZodWJfZHJpdmVyLmRyaXZlciAmJgorCQkJKGh1YiA9IGhkZXZfdG9faHViKHVkZXYpKSAhPSBOVUxMKSB7CisJCWh1Yl9wcmVfcmVzZXQoaHViKTsKKwl9CisKKwlzZXRfYml0KHBvcnQxLCBwYXJlbnRfaHViLT5idXN5X2JpdHMpOworCWZvciAoaSA9IDA7IGkgPCBTRVRfQ09ORklHX1RSSUVTOyArK2kpIHsKKworCQkvKiBlcDAgbWF4cGFja2V0IHNpemUgbWF5IGNoYW5nZTsgbGV0IHRoZSBIQ0Qga25vdyBhYm91dCBpdC4KKwkJICogT3RoZXIgZW5kcG9pbnRzIHdpbGwgYmUgaGFuZGxlZCBieSByZS1lbnVtZXJhdGlvbi4gKi8KKwkJZXAwX3JlaW5pdCh1ZGV2KTsKKwkJcmV0ID0gaHViX3BvcnRfaW5pdChwYXJlbnRfaHViLCB1ZGV2LCBwb3J0MSwgaSk7CisJCWlmIChyZXQgPj0gMCkKKwkJCWJyZWFrOworCX0KKwljbGVhcl9iaXQocG9ydDEsIHBhcmVudF9odWItPmJ1c3lfYml0cyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gcmVfZW51bWVyYXRlOworIAorCS8qIERldmljZSBtaWdodCBoYXZlIGNoYW5nZWQgZmlybXdhcmUgKERGVSBvciBzaW1pbGFyKSAqLworCWlmIChtZW1jbXAoJnVkZXYtPmRlc2NyaXB0b3IsICZkZXNjcmlwdG9yLCBzaXplb2YgZGVzY3JpcHRvcikKKwkJCXx8IGNvbmZpZ19kZXNjcmlwdG9yc19jaGFuZ2VkICh1ZGV2KSkgeworCQlkZXZfaW5mbygmdWRldi0+ZGV2LCAiZGV2aWNlIGZpcm13YXJlIGNoYW5nZWRcbiIpOworCQl1ZGV2LT5kZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsJLyogZm9yIGRpc2Nvbm5lY3QoKSBjYWxscyAqLworCQlnb3RvIHJlX2VudW1lcmF0ZTsKKyAgCX0KKyAgCisJaWYgKCF1ZGV2LT5hY3Rjb25maWcpCisJCWdvdG8gZG9uZTsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJCQlVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OLCAwLAorCQkJdWRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUsIDAsCisJCQlOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmdWRldi0+ZGV2LAorCQkJImNhbid0IHJlc3RvcmUgY29uZmlndXJhdGlvbiAjJWQgKGVycm9yPSVkKVxuIiwKKwkJCXVkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlLCByZXQpOworCQlnb3RvIHJlX2VudW1lcmF0ZTsKKyAgCX0KKwl1c2Jfc2V0X2RldmljZV9zdGF0ZSh1ZGV2LCBVU0JfU1RBVEVfQ09ORklHVVJFRCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdWRldi0+YWN0Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOyBpKyspIHsKKwkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB1ZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVtpXTsKKwkJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqZGVzYzsKKworCQkvKiBzZXRfaW50ZXJmYWNlIHJlc2V0cyBob3N0IHNpZGUgdG9nZ2xlIGV2ZW4KKwkJICogZm9yIGFsdHNldHRpbmcgemVyby4gIHRoZSBpbnRlcmZhY2UgbWF5IGhhdmUgbm8gZHJpdmVyLgorCQkgKi8KKwkJZGVzYyA9ICZpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYzsKKwkJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UodWRldiwgZGVzYy0+YkludGVyZmFjZU51bWJlciwKKwkJCWRlc2MtPmJBbHRlcm5hdGVTZXR0aW5nKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoJnVkZXYtPmRldiwgImZhaWxlZCB0byByZXN0b3JlIGludGVyZmFjZSAlZCAiCisJCQkJImFsdHNldHRpbmcgJWQgKGVycm9yPSVkKVxuIiwKKwkJCQlkZXNjLT5iSW50ZXJmYWNlTnVtYmVyLAorCQkJCWRlc2MtPmJBbHRlcm5hdGVTZXR0aW5nLAorCQkJCXJldCk7CisJCQlnb3RvIHJlX2VudW1lcmF0ZTsKKwkJfQorCX0KKworZG9uZToKKwlpZiAoaHViKQorCQlodWJfcG9zdF9yZXNldChodWIpOworCXJldHVybiAwOworIAorcmVfZW51bWVyYXRlOgorCWh1Yl9wb3J0X2xvZ2ljYWxfZGlzY29ubmVjdChwYXJlbnRfaHViLCBwb3J0MSk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5oIGIvZHJpdmVycy91c2IvY29yZS9odWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTE0Yjg0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuaApAQCAtMCwwICsxLDIzOCBAQAorI2lmbmRlZiBfX0xJTlVYX0hVQl9ICisjZGVmaW5lIF9fTElOVVhfSFVCX0gKKworLyoKKyAqIEh1YiBwcm90b2NvbCBhbmQgZHJpdmVyIGRhdGEgc3RydWN0dXJlcy4KKyAqCisgKiBTb21lIG9mIHRoZXNlIGFyZSBrbm93biB0byB0aGUgInZpcnR1YWwgcm9vdCBodWIiIGNvZGUKKyAqIGluIGhvc3QgY29udHJvbGxlciBkcml2ZXJzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4JLyogbGlrZWx5KCkvdW5saWtlbHkoKSAqLworCisvKgorICogSHViIHJlcXVlc3QgdHlwZXMKKyAqLworCisjZGVmaW5lIFVTQl9SVF9IVUIJKFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0RFVklDRSkKKyNkZWZpbmUgVVNCX1JUX1BPUlQJKFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX09USEVSKQorCisvKgorICogSHViIGNsYXNzIHJlcXVlc3RzCisgKiBTZWUgVVNCIDIuMCBzcGVjIFRhYmxlIDExLTE2CisgKi8KKyNkZWZpbmUgSFVCX0NMRUFSX1RUX0JVRkZFUgk4CisjZGVmaW5lIEhVQl9SRVNFVF9UVAkJOQorI2RlZmluZSBIVUJfR0VUX1RUX1NUQVRFCTEwCisjZGVmaW5lIEhVQl9TVE9QX1RUCQkxMQorCisvKgorICogSHViIENsYXNzIGZlYXR1cmUgbnVtYmVycworICogU2VlIFVTQiAyLjAgc3BlYyBUYWJsZSAxMS0xNworICovCisjZGVmaW5lIENfSFVCX0xPQ0FMX1BPV0VSCTAKKyNkZWZpbmUgQ19IVUJfT1ZFUl9DVVJSRU5UCTEKKworLyoKKyAqIFBvcnQgZmVhdHVyZSBudW1iZXJzCisgKiBTZWUgVVNCIDIuMCBzcGVjIFRhYmxlIDExLTE3CisgKi8KKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9DT05ORUNUSU9OCTAKKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9FTkFCTEUJCTEKKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9TVVNQRU5ECQkyCisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfT1ZFUl9DVVJSRU5UCTMKKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9SRVNFVAkJNAorI2RlZmluZSBVU0JfUE9SVF9GRUFUX1BPV0VSCQk4CisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfTE9XU1BFRUQJCTkKKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9ISUdIU1BFRUQJCTEwCisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OCTE2CisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfQ19FTkFCTEUJCTE3CisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfQ19TVVNQRU5ECQkxOAorI2RlZmluZSBVU0JfUE9SVF9GRUFUX0NfT1ZFUl9DVVJSRU5UCTE5CisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfQ19SRVNFVAkJMjAKKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9URVNUICAgICAgICAgICAgICAyMQorI2RlZmluZSBVU0JfUE9SVF9GRUFUX0lORElDQVRPUiAgICAgICAgIDIyCisKKy8qIAorICogSHViIFN0YXR1cyBhbmQgSHViIENoYW5nZSByZXN1bHRzCisgKiBTZWUgVVNCIDIuMCBzcGVjIFRhYmxlIDExLTE5IGFuZCBUYWJsZSAxMS0yMAorICovCitzdHJ1Y3QgdXNiX3BvcnRfc3RhdHVzIHsKKwlfX2xlMTYgd1BvcnRTdGF0dXM7CisJX19sZTE2IHdQb3J0Q2hhbmdlOwkKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiAKKyAqIHdQb3J0U3RhdHVzIGJpdCBmaWVsZAorICogU2VlIFVTQiAyLjAgc3BlYyBUYWJsZSAxMS0yMQorICovCisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTgkweDAwMDEKKyNkZWZpbmUgVVNCX1BPUlRfU1RBVF9FTkFCTEUJCTB4MDAwMgorI2RlZmluZSBVU0JfUE9SVF9TVEFUX1NVU1BFTkQJCTB4MDAwNAorI2RlZmluZSBVU0JfUE9SVF9TVEFUX09WRVJDVVJSRU5UCTB4MDAwOAorI2RlZmluZSBVU0JfUE9SVF9TVEFUX1JFU0VUCQkweDAwMTAKKy8qIGJpdHMgNSB0byA3IGFyZSByZXNlcnZlZCAqLworI2RlZmluZSBVU0JfUE9SVF9TVEFUX1BPV0VSCQkweDAxMDAKKyNkZWZpbmUgVVNCX1BPUlRfU1RBVF9MT1dfU1BFRUQJCTB4MDIwMAorI2RlZmluZSBVU0JfUE9SVF9TVEFUX0hJR0hfU1BFRUQgICAgICAgIDB4MDQwMAorI2RlZmluZSBVU0JfUE9SVF9TVEFUX1RFU1QgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBVU0JfUE9SVF9TVEFUX0lORElDQVRPUiAgICAgICAgIDB4MTAwMAorLyogYml0cyAxMyB0byAxNSBhcmUgcmVzZXJ2ZWQgKi8KKworLyogCisgKiB3UG9ydENoYW5nZSBiaXQgZmllbGQKKyAqIFNlZSBVU0IgMi4wIHNwZWMgVGFibGUgMTEtMjIKKyAqIEJpdHMgMCB0byA0IHNob3duLCBiaXRzIDUgdG8gMTUgYXJlIHJlc2VydmVkCisgKi8KKyNkZWZpbmUgVVNCX1BPUlRfU1RBVF9DX0NPTk5FQ1RJT04JMHgwMDAxCisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfQ19FTkFCTEUJCTB4MDAwMgorI2RlZmluZSBVU0JfUE9SVF9TVEFUX0NfU1VTUEVORAkJMHgwMDA0CisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfQ19PVkVSQ1VSUkVOVAkweDAwMDgKKyNkZWZpbmUgVVNCX1BPUlRfU1RBVF9DX1JFU0VUCQkweDAwMTAKKworLyoKKyAqIHdIdWJDaGFyYWN0ZXJpc3RpY3MgKG1hc2tzKSAKKyAqIFNlZSBVU0IgMi4wIHNwZWMgVGFibGUgMTEtMTMsIG9mZnNldCAzCisgKi8KKyNkZWZpbmUgSFVCX0NIQVJfTFBTTQkJMHgwMDAzIC8qIEQxIC4uIEQwICovCisjZGVmaW5lIEhVQl9DSEFSX0NPTVBPVU5ECTB4MDAwNCAvKiBEMiAgICAgICAqLworI2RlZmluZSBIVUJfQ0hBUl9PQ1BNCQkweDAwMTggLyogRDQgLi4gRDMgKi8KKyNkZWZpbmUgSFVCX0NIQVJfVFRUVCAgICAgICAgICAgMHgwMDYwIC8qIEQ2IC4uIEQ1ICovCisjZGVmaW5lIEhVQl9DSEFSX1BPUlRJTkQgICAgICAgIDB4MDA4MCAvKiBENyAgICAgICAqLworCitzdHJ1Y3QgdXNiX2h1Yl9zdGF0dXMgeworCV9fbGUxNiB3SHViU3RhdHVzOworCV9fbGUxNiB3SHViQ2hhbmdlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBIdWIgU3RhdHVzICYgSHViIENoYW5nZSBiaXQgbWFza3MKKyAqIFNlZSBVU0IgMi4wIHNwZWMgVGFibGUgMTEtMTkgYW5kIFRhYmxlIDExLTIwCisgKiBCaXRzIDAgYW5kIDEgZm9yIHdIdWJTdGF0dXMgYW5kIHdIdWJDaGFuZ2UKKyAqIEJpdHMgMiB0byAxNSBhcmUgcmVzZXJ2ZWQgZm9yIGJvdGgKKyAqLworI2RlZmluZSBIVUJfU1RBVFVTX0xPQ0FMX1BPV0VSCTB4MDAwMQorI2RlZmluZSBIVUJfU1RBVFVTX09WRVJDVVJSRU5UCTB4MDAwMgorI2RlZmluZSBIVUJfQ0hBTkdFX0xPQ0FMX1BPV0VSCTB4MDAwMQorI2RlZmluZSBIVUJfQ0hBTkdFX09WRVJDVVJSRU5UCTB4MDAwMgorCisKKy8qIAorICogSHViIGRlc2NyaXB0b3IgCisgKiBTZWUgVVNCIDIuMCBzcGVjIFRhYmxlIDExLTEzCisgKi8KKworI2RlZmluZSBVU0JfRFRfSFVCCQkJKFVTQl9UWVBFX0NMQVNTIHwgMHgwOSkKKyNkZWZpbmUgVVNCX0RUX0hVQl9OT05WQVJfU0laRQkJNworCitzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yIHsKKwlfX3U4ICBiRGVzY0xlbmd0aDsKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CisJX191OCAgYk5iclBvcnRzOworCV9fdTE2IHdIdWJDaGFyYWN0ZXJpc3RpY3M7CisJX191OCAgYlB3ck9uMlB3ckdvb2Q7CisJX191OCAgYkh1YkNvbnRyQ3VycmVudDsKKwkgICAgCS8qIGFkZCAxIGJpdCBmb3IgaHViIHN0YXR1cyBjaGFuZ2U7IHJvdW5kIHRvIGJ5dGVzICovCisJX191OCAgRGV2aWNlUmVtb3ZhYmxlWyhVU0JfTUFYQ0hJTERSRU4gKyAxICsgNykgLyA4XTsKKwlfX3U4ICBQb3J0UHdyQ3RybE1hc2tbKFVTQl9NQVhDSElMRFJFTiArIDEgKyA3KSAvIDhdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworLyogcG9ydCBpbmRpY2F0b3Igc3RhdHVzIHNlbGVjdG9ycywgdGFibGVzIDExLTcgYW5kIDExLTI1ICovCisjZGVmaW5lIEhVQl9MRURfQVVUTwkwCisjZGVmaW5lIEhVQl9MRURfQU1CRVIJMQorI2RlZmluZSBIVUJfTEVEX0dSRUVOCTIKKyNkZWZpbmUgSFVCX0xFRF9PRkYJMworCitlbnVtIGh1Yl9sZWRfbW9kZSB7CisJSU5ESUNBVE9SX0FVVE8gPSAwLAorCUlORElDQVRPUl9DWUNMRSwKKwkvKiBzb2Z0d2FyZSBibGlua3MgZm9yIGF0dGVudGlvbjogIHNvZnR3YXJlLCBoYXJkd2FyZSwgcmVzZXJ2ZWQgKi8KKwlJTkRJQ0FUT1JfR1JFRU5fQkxJTkssIElORElDQVRPUl9HUkVFTl9CTElOS19PRkYsCisJSU5ESUNBVE9SX0FNQkVSX0JMSU5LLCBJTkRJQ0FUT1JfQU1CRVJfQkxJTktfT0ZGLAorCUlORElDQVRPUl9BTFRfQkxJTkssIElORElDQVRPUl9BTFRfQkxJTktfT0ZGCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHVzYl9kZXZpY2U7CisKKy8qCisgKiBBcyBvZiBVU0IgMi4wLCBmdWxsL2xvdyBzcGVlZCBkZXZpY2VzIGFyZSBzZWdyZWdhdGVkIGludG8gdHJlZXMuCisgKiBPbmUgdHlwZSBncm93cyBmcm9tIFVTQiAxLjEgaG9zdCBjb250cm9sbGVycyAoT0hDSSwgVUhDSSBldGMpLgorICogVGhlIG90aGVyIHR5cGUgZ3Jvd3MgZnJvbSBoaWdoIHNwZWVkIGh1YnMgd2hlbiB0aGV5IGNvbm5lY3QgdG8KKyAqIGZ1bGwvbG93IHNwZWVkIGRldmljZXMgdXNpbmcgIlRyYW5zYWN0aW9uIFRyYW5zbGF0b3JzIiAoVFRzKS4KKyAqCisgKiBUVHMgc2hvdWxkIG9ubHkgYmUga25vd24gdG8gdGhlIGh1YiBkcml2ZXIsIGFuZCBoaWdoIHNwZWVkIGJ1cworICogZHJpdmVycyAob25seSBFSENJIGZvciBub3cpLiAgVGhleSBhZmZlY3QgcGVyaW9kaWMgc2NoZWR1bGluZyBhbmQKKyAqIHNvbWV0aW1lcyBjb250cm9sL2J1bGsgZXJyb3IgcmVjb3ZlcnkuCisgKi8KK3N0cnVjdCB1c2JfdHQgeworCXN0cnVjdCB1c2JfZGV2aWNlCSpodWI7CS8qIHVwc3RyZWFtIGhpZ2hzcGVlZCBodWIgKi8KKwlpbnQJCQltdWx0aTsJLyogdHJ1ZSBtZWFucyBvbmUgVFQgcGVyIHBvcnQgKi8KKworCS8qIGZvciBjb250cm9sL2J1bGsgZXJyb3IgcmVjb3ZlcnkgKENMRUFSX1RUX0JVRkZFUikgKi8KKwlzcGlubG9ja190CQlsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQJY2xlYXJfbGlzdDsJLyogb2YgdXNiX3R0X2NsZWFyICovCisJc3RydWN0IHdvcmtfc3RydWN0CQkJa2V2ZW50OworfTsKKworc3RydWN0IHVzYl90dF9jbGVhciB7CisJc3RydWN0IGxpc3RfaGVhZAljbGVhcl9saXN0OworCXVuc2lnbmVkCQl0dDsKKwl1MTYJCQlkZXZpbmZvOworfTsKKworZXh0ZXJuIHZvaWQgdXNiX2h1Yl90dF9jbGVhcl9idWZmZXIgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBwaXBlKTsKKworc3RydWN0IHVzYl9odWIgeworCXN0cnVjdCBkZXZpY2UJCSppbnRmZGV2OwkvKiB0aGUgImludGVyZmFjZSIgZGV2aWNlICovCisJc3RydWN0IHVzYl9kZXZpY2UJKmhkZXY7CisJc3RydWN0IHVyYgkJKnVyYjsJCS8qIGZvciBpbnRlcnJ1cHQgcG9sbGluZyBwaXBlICovCisKKwkvKiBidWZmZXIgZm9yIHVyYiAuLi4gd2l0aCBleHRyYSBzcGFjZSBpbiBjYXNlIG9mIGJhYmJsZSAqLworCWNoYXIJCQkoKmJ1ZmZlcilbOF07CisJZG1hX2FkZHJfdAkJYnVmZmVyX2RtYTsJLyogRE1BIGFkZHJlc3MgZm9yIGJ1ZmZlciAqLworCXVuaW9uIHsKKwkJc3RydWN0IHVzYl9odWJfc3RhdHVzCWh1YjsKKwkJc3RydWN0IHVzYl9wb3J0X3N0YXR1cwlwb3J0OworCX0JCQkqc3RhdHVzOwkvKiBidWZmZXIgZm9yIHN0YXR1cyByZXBvcnRzICovCisKKwlpbnQJCQllcnJvcjsJCS8qIGxhc3QgcmVwb3J0ZWQgZXJyb3IgKi8KKwlpbnQJCQluZXJyb3JzOwkvKiB0cmFjayBjb25zZWN1dGl2ZSBlcnJvcnMgKi8KKworCXN0cnVjdCBsaXN0X2hlYWQJZXZlbnRfbGlzdDsJLyogaHVicyB3L2RhdGEgb3IgZXJycyByZWFkeSAqLworCXVuc2lnbmVkIGxvbmcJCWV2ZW50X2JpdHNbMV07CS8qIHN0YXR1cyBjaGFuZ2UgYml0bWFzayAqLworCXVuc2lnbmVkIGxvbmcJCWNoYW5nZV9iaXRzWzFdOwkvKiBwb3J0cyB3aXRoIGxvZ2ljYWwgY29ubmVjdAorCQkJCQkJCXN0YXR1cyBjaGFuZ2UgKi8KKwl1bnNpZ25lZCBsb25nCQlidXN5X2JpdHNbMV07CS8qIHBvcnRzIGJlaW5nIHJlc2V0ICovCisjaWYgVVNCX01BWENISUxEUkVOID4gMzEgLyogOCpzaXplb2YodW5zaWduZWQgbG9uZykgLSAxICovCisjZXJyb3IgZXZlbnRfYml0c1tdIGlzIHRvbyBzaG9ydCEKKyNlbmRpZgorCisJc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqZGVzY3JpcHRvcjsJLyogY2xhc3MgZGVzY3JpcHRvciAqLworCXN0cnVjdCB1c2JfdHQJCXR0OwkJLyogVHJhbnNhY3Rpb24gVHJhbnNsYXRvciAqLworCisJdTgJCQlwb3dlcl9idWRnZXQ7CS8qIGluIDJtQSB1bml0czsgb3IgemVybyAqLworCisJdW5zaWduZWQJCXF1aWVzY2luZzoxOworCXVuc2lnbmVkCQlhY3RpdmF0aW5nOjE7CisJdW5zaWduZWQJCXJlc3VtZV9yb290X2h1YjoxOworCisJdW5zaWduZWQJCWhhc19pbmRpY2F0b3JzOjE7CisJZW51bSBodWJfbGVkX21vZGUJaW5kaWNhdG9yW1VTQl9NQVhDSElMRFJFTl07CisJc3RydWN0IHdvcmtfc3RydWN0CWxlZHM7Cit9OworCisvKiB1c2UgdGhpcyBmb3IgbG93LXBvd2VyZWQgcm9vdCBodWJzICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2h1Yl9zZXRfcG93ZXJfYnVkZ2V0IChzdHJ1Y3QgdXNiX2RldmljZSAqaHViZGV2LCB1bnNpZ25lZCBtQSkKK3sKKwlzdHJ1Y3QgdXNiX2h1YgkqaHViOworCisJaHViID0gKHN0cnVjdCB1c2JfaHViICopCisJCXVzYl9nZXRfaW50ZmRhdGEgKGh1YmRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbMF0pOworCWh1Yi0+cG93ZXJfYnVkZ2V0ID0gbWluKG1BLCh1bnNpZ25lZCk1MDApLzI7Cit9CisKKyNlbmRpZiAvKiBfX0xJTlVYX0hVQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkxMzQwNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYwpAQCAtMCwwICsxLDc2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJaW5vZGUuYyAgLS0gIElub2RlL0RlbnRyeSBmdW5jdGlvbnMgZm9yIHRoZSBVU0IgZGV2aWNlIGZpbGUgc3lzdGVtLgorICoKKyAqCUNvcHlyaWdodCAoQykgMjAwMCBUaG9tYXMgU2FpbGVyIChzYWlsZXJAaWZlLmVlLmV0aHouY2gpCisgKglDb3B5cmlnaHQgKEMpIDIwMDEsMjAwMiwyMDA0IEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKglNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKglHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICoJRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogIEhpc3Rvcnk6CisgKiAgIDAuMSAgMDQuMDEuMjAwMCAgQ3JlYXRlZAorICogICAwLjIgIDEwLjEyLjIwMDEgIGNvbnZlcnRlZCB0byB1c2UgdGhlIHZmcyBsYXllciBiZXR0ZXIKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JkZXZpY2VfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlICJ1c2IuaCIKKworc3RhdGljIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHVzYmZzX29wczsKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZmF1bHRfZmlsZV9vcGVyYXRpb25zOworc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHVzYmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOworc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqdXNiZnNfbW91bnQ7CitzdGF0aWMgaW50IHVzYmZzX21vdW50X2NvdW50OwkvKiA9IDAgKi8KK3N0YXRpYyBpbnQgaWdub3JlX21vdW50ID0gMDsKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmRldmljZXNfdXNiZnNfZGVudHJ5Oworc3RhdGljIGludCBudW1fYnVzZXM7CS8qID0gMCAqLworCitzdGF0aWMgdWlkX3QgZGV2dWlkOwkvKiA9IDAgKi8KK3N0YXRpYyB1aWRfdCBidXN1aWQ7CS8qID0gMCAqLworc3RhdGljIHVpZF90IGxpc3R1aWQ7CS8qID0gMCAqLworc3RhdGljIGdpZF90IGRldmdpZDsJLyogPSAwICovCitzdGF0aWMgZ2lkX3QgYnVzZ2lkOwkvKiA9IDAgKi8KK3N0YXRpYyBnaWRfdCBsaXN0Z2lkOwkvKiA9IDAgKi8KK3N0YXRpYyB1bW9kZV90IGRldm1vZGUgPSBTX0lXVVNSIHwgU19JUlVHTzsKK3N0YXRpYyB1bW9kZV90IGJ1c21vZGUgPSBTX0lYVUdPIHwgU19JUlVHTzsKK3N0YXRpYyB1bW9kZV90IGxpc3Rtb2RlID0gU19JUlVHTzsKKworZW51bSB7CisJT3B0X2RldnVpZCwgT3B0X2RldmdpZCwgT3B0X2Rldm1vZGUsCisJT3B0X2J1c3VpZCwgT3B0X2J1c2dpZCwgT3B0X2J1c21vZGUsCisJT3B0X2xpc3R1aWQsIE9wdF9saXN0Z2lkLCBPcHRfbGlzdG1vZGUsCisJT3B0X2VyciwKK307CisKK3N0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKKwl7T3B0X2RldnVpZCwgImRldnVpZD0ldSJ9LAorCXtPcHRfZGV2Z2lkLCAiZGV2Z2lkPSV1In0sCisJe09wdF9kZXZtb2RlLCAiZGV2bW9kZT0lbyJ9LAorCXtPcHRfYnVzdWlkLCAiYnVzdWlkPSV1In0sCisJe09wdF9idXNnaWQsICJidXNnaWQ9JXUifSwKKwl7T3B0X2J1c21vZGUsICJidXNtb2RlPSVvIn0sCisJe09wdF9saXN0dWlkLCAibGlzdHVpZD0ldSJ9LAorCXtPcHRfbGlzdGdpZCwgImxpc3RnaWQ9JXUifSwKKwl7T3B0X2xpc3Rtb2RlLCAibGlzdG1vZGU9JW8ifSwKKwl7T3B0X2VyciwgTlVMTH0KK307CisKK3N0YXRpYyBpbnQgcGFyc2Vfb3B0aW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIGNoYXIgKmRhdGEpCit7CisJY2hhciAqcDsKKwlpbnQgb3B0aW9uOworCisJLyogKHJlKXNldCB0byBkZWZhdWx0cy4gKi8KKwlkZXZ1aWQgPSAwOworCWJ1c3VpZCA9IDA7CisJbGlzdHVpZCA9IDA7CisJZGV2Z2lkID0gMDsKKwlidXNnaWQgPSAwOworCWxpc3RnaWQgPSAwOworCWRldm1vZGUgPSBTX0lXVVNSIHwgU19JUlVHTzsKKwlidXNtb2RlID0gU19JWFVHTyB8IFNfSVJVR087CisJbGlzdG1vZGUgPSBTX0lSVUdPOworCisJd2hpbGUgKChwID0gc3Ryc2VwKCZkYXRhLCAiLCIpKSAhPSBOVUxMKSB7CisJCXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsKKwkJaW50IHRva2VuOworCQlpZiAoISpwKQorCQkJY29udGludWU7CisKKwkJdG9rZW4gPSBtYXRjaF90b2tlbihwLCB0b2tlbnMsIGFyZ3MpOworCQlzd2l0Y2ggKHRva2VuKSB7CisJCWNhc2UgT3B0X2RldnVpZDoKKwkJCWlmIChtYXRjaF9pbnQoJmFyZ3NbMF0sICZvcHRpb24pKQorCQkJICAgICAgIHJldHVybiAtRUlOVkFMOworCQkJZGV2dWlkID0gb3B0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2RldmdpZDoKKwkJCWlmIChtYXRjaF9pbnQoJmFyZ3NbMF0sICZvcHRpb24pKQorCQkJICAgICAgIHJldHVybiAtRUlOVkFMOworCQkJZGV2Z2lkID0gb3B0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2Rldm1vZGU6CisJCQlpZiAobWF0Y2hfb2N0YWwoJmFyZ3NbMF0sICZvcHRpb24pKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJZGV2bW9kZSA9IG9wdGlvbiAmIFNfSVJXWFVHTzsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9idXN1aWQ6CisJCQlpZiAobWF0Y2hfaW50KCZhcmdzWzBdLCAmb3B0aW9uKSkKKwkJCSAgICAgICByZXR1cm4gLUVJTlZBTDsKKwkJCWJ1c3VpZCA9IG9wdGlvbjsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9idXNnaWQ6CisJCQlpZiAobWF0Y2hfaW50KCZhcmdzWzBdLCAmb3B0aW9uKSkKKwkJCSAgICAgICByZXR1cm4gLUVJTlZBTDsKKwkJCWJ1c2dpZCA9IG9wdGlvbjsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9idXNtb2RlOgorCQkJaWYgKG1hdGNoX29jdGFsKCZhcmdzWzBdLCAmb3B0aW9uKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJ1c21vZGUgPSBvcHRpb24gJiBTX0lSV1hVR087CisJCQlicmVhazsKKwkJY2FzZSBPcHRfbGlzdHVpZDoKKwkJCWlmIChtYXRjaF9pbnQoJmFyZ3NbMF0sICZvcHRpb24pKQorCQkJICAgICAgIHJldHVybiAtRUlOVkFMOworCQkJbGlzdHVpZCA9IG9wdGlvbjsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9saXN0Z2lkOgorCQkJaWYgKG1hdGNoX2ludCgmYXJnc1swXSwgJm9wdGlvbikpCisJCQkgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJCQlsaXN0Z2lkID0gb3B0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2xpc3Rtb2RlOgorCQkJaWYgKG1hdGNoX29jdGFsKCZhcmdzWzBdLCAmb3B0aW9uKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWxpc3Rtb2RlID0gb3B0aW9uICYgU19JUldYVUdPOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnIoInVzYmZzOiB1bnJlY29nbmlzZWQgbW91bnQgb3B0aW9uIFwiJXNcIiAiCisJCQkgICAgIm9yIG1pc3NpbmcgdmFsdWVcbiIsIHApOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3NwZWNpYWwoc3RydWN0IGRlbnRyeSAqc3BlY2lhbCkKK3sKKwlzcGVjaWFsLT5kX2lub2RlLT5pX3VpZCA9IGxpc3R1aWQ7CisJc3BlY2lhbC0+ZF9pbm9kZS0+aV9naWQgPSBsaXN0Z2lkOworCXNwZWNpYWwtPmRfaW5vZGUtPmlfbW9kZSA9IFNfSUZSRUcgfCBsaXN0bW9kZTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2RldihzdHJ1Y3QgZGVudHJ5ICpkZXYpCit7CisJZGV2LT5kX2lub2RlLT5pX3VpZCA9IGRldnVpZDsKKwlkZXYtPmRfaW5vZGUtPmlfZ2lkID0gZGV2Z2lkOworCWRldi0+ZF9pbm9kZS0+aV9tb2RlID0gU19JRlJFRyB8IGRldm1vZGU7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9idXMoc3RydWN0IGRlbnRyeSAqYnVzKQoreworCXN0cnVjdCBkZW50cnkgKmRldiA9IE5VTEw7CisKKwlidXMtPmRfaW5vZGUtPmlfdWlkID0gYnVzdWlkOworCWJ1cy0+ZF9pbm9kZS0+aV9naWQgPSBidXNnaWQ7CisJYnVzLT5kX2lub2RlLT5pX21vZGUgPSBTX0lGRElSIHwgYnVzbW9kZTsKKworCWRvd24oJmJ1cy0+ZF9pbm9kZS0+aV9zZW0pOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRfc3ViZGlycywgZF9jaGlsZCkKKwkJaWYgKGRldi0+ZF9pbm9kZSkKKwkJCXVwZGF0ZV9kZXYoZGV2KTsKKworCXVwKCZidXMtPmRfaW5vZGUtPmlfc2VtKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGRlbnRyeSAqcm9vdCA9IHNiLT5zX3Jvb3Q7CisJc3RydWN0IGRlbnRyeSAqYnVzID0gTlVMTDsKKworCWlmICghcm9vdCkKKwkJcmV0dXJuOworCisJZG93bigmcm9vdC0+ZF9pbm9kZS0+aV9zZW0pOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShidXMsICZyb290LT5kX3N1YmRpcnMsIGRfY2hpbGQpIHsKKwkJaWYgKGJ1cy0+ZF9pbm9kZSkgeworCQkJc3dpdGNoIChTX0lGTVQgJiBidXMtPmRfaW5vZGUtPmlfbW9kZSkgeworCQkJY2FzZSBTX0lGRElSOgorCQkJCXVwZGF0ZV9idXMoYnVzKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU19JRlJFRzoKKwkJCQl1cGRhdGVfc3BlY2lhbChidXMpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQl3YXJuKCJVbmtub3duIG5vZGUgJXMgbW9kZSAleCBmb3VuZCBvbiByZW1vdW50IVxuIixidXMtPmRfbmFtZS5uYW1lLGJ1cy0+ZF9pbm9kZS0+aV9tb2RlKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXVwKCZyb290LT5kX2lub2RlLT5pX3NlbSk7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFyICpkYXRhKQoreworCS8qIElmIHRoaXMgaXMgbm90IGEgcmVhbCBtb3VudCwKKwkgKiBpLmUuIGl0J3MgYSBzaW1wbGVfcGluX2ZzIGZyb20gY3JlYXRlX3NwZWNpYWxfZmlsZXMsCisJICogdGhlbiBpZ25vcmUgaXQuCisJICovCisJaWYgKGlnbm9yZV9tb3VudCkKKwkJcmV0dXJuIDA7CisKKwlpZiAocGFyc2Vfb3B0aW9ucyhzYiwgZGF0YSkpIHsKKwkJd2FybigidXNiZnM6IG1vdW50IHBhcmFtZXRlciBlcnJvcjoiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVzYmZzX21vdW50ICYmIHVzYmZzX21vdW50LT5tbnRfc2IpCisJCXVwZGF0ZV9zYih1c2Jmc19tb3VudC0+bW50X3NiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlub2RlICp1c2Jmc19nZXRfaW5vZGUgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBtb2RlLCBkZXZfdCBkZXYpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IG5ld19pbm9kZShzYik7CisKKwlpZiAoaW5vZGUpIHsKKwkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CisJCWlub2RlLT5pX3VpZCA9IGN1cnJlbnQtPmZzdWlkOworCQlpbm9kZS0+aV9naWQgPSBjdXJyZW50LT5mc2dpZDsKKwkJaW5vZGUtPmlfYmxrc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRTsKKwkJaW5vZGUtPmlfYmxvY2tzID0gMDsKKwkJaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCQlzd2l0Y2ggKG1vZGUgJiBTX0lGTVQpIHsKKwkJZGVmYXVsdDoKKwkJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgbW9kZSwgZGV2KTsKKwkJCWJyZWFrOworCQljYXNlIFNfSUZSRUc6CisJCQlpbm9kZS0+aV9mb3AgPSAmZGVmYXVsdF9maWxlX29wZXJhdGlvbnM7CisJCQlicmVhazsKKwkJY2FzZSBTX0lGRElSOgorCQkJaW5vZGUtPmlfb3AgPSAmdXNiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CisJCQlpbm9kZS0+aV9mb3AgPSAmc2ltcGxlX2Rpcl9vcGVyYXRpb25zOworCisJCQkvKiBkaXJlY3RvcnkgaW5vZGVzIHN0YXJ0IG9mZiB3aXRoIGlfbmxpbmsgPT0gMiAoZm9yICIuIiBlbnRyeSkgKi8KKwkJCWlub2RlLT5pX25saW5rKys7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gaW5vZGU7IAorfQorCisvKiBTTVAtc2FmZSAqLworc3RhdGljIGludCB1c2Jmc19ta25vZCAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsCisJCQlkZXZfdCBkZXYpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IHVzYmZzX2dldF9pbm9kZShkaXItPmlfc2IsIG1vZGUsIGRldik7CisJaW50IGVycm9yID0gLUVQRVJNOworCisJaWYgKGRlbnRyeS0+ZF9pbm9kZSkKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlpZiAoaW5vZGUpIHsKKwkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKKwkJZGdldChkZW50cnkpOworCQllcnJvciA9IDA7CisJfQorCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCB1c2Jmc19ta2RpciAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpCit7CisJaW50IHJlczsKKworCW1vZGUgPSAobW9kZSAmIChTX0lSV1hVR08gfCBTX0lTVlRYKSkgfCBTX0lGRElSOworCXJlcyA9IHVzYmZzX21rbm9kIChkaXIsIGRlbnRyeSwgbW9kZSwgMCk7CisJaWYgKCFyZXMpCisJCWRpci0+aV9ubGluaysrOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgdXNiZnNfY3JlYXRlIChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSkKK3sKKwltb2RlID0gKG1vZGUgJiBTX0lBTExVR08pIHwgU19JRlJFRzsKKwlyZXR1cm4gdXNiZnNfbWtub2QgKGRpciwgZGVudHJ5LCBtb2RlLCAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdXNiZnNfcG9zaXRpdmUgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlyZXR1cm4gZGVudHJ5LT5kX2lub2RlICYmICFkX3VuaGFzaGVkKGRlbnRyeSk7Cit9CisKK3N0YXRpYyBpbnQgdXNiZnNfZW1wdHkgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCisJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoKGxpc3QsICZkZW50cnktPmRfc3ViZGlycykgeworCQlzdHJ1Y3QgZGVudHJ5ICpkZSA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGRlbnRyeSwgZF9jaGlsZCk7CisJCWlmICh1c2Jmc19wb3NpdGl2ZShkZSkpIHsKKwkJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdXNiZnNfdW5saW5rIChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJZG93bigmaW5vZGUtPmlfc2VtKTsKKwlkZW50cnktPmRfaW5vZGUtPmlfbmxpbmstLTsKKwlkcHV0KGRlbnRyeSk7CisJdXAoJmlub2RlLT5pX3NlbSk7CisJZF9kZWxldGUoZGVudHJ5KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1c2Jmc19ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCWludCBlcnJvciA9IC1FTk9URU1QVFk7CisJc3RydWN0IGlub2RlICogaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisKKwlkb3duKCZpbm9kZS0+aV9zZW0pOworCWRlbnRyeV91bmhhc2goZGVudHJ5KTsKKwlpZiAodXNiZnNfZW1wdHkoZGVudHJ5KSkgeworCQlkZW50cnktPmRfaW5vZGUtPmlfbmxpbmsgLT0gMjsKKwkJZHB1dChkZW50cnkpOworCQlpbm9kZS0+aV9mbGFncyB8PSBTX0RFQUQ7CisJCWRpci0+aV9ubGluay0tOworCQllcnJvciA9IDA7CisJfQorCXVwKCZpbm9kZS0+aV9zZW0pOworCWlmICghZXJyb3IpCisJCWRfZGVsZXRlKGRlbnRyeSk7CisJZHB1dChkZW50cnkpOworCXJldHVybiBlcnJvcjsKK30KKworCisvKiBkZWZhdWx0IGZpbGUgb3BlcmF0aW9ucyAqLworc3RhdGljIHNzaXplX3QgZGVmYXVsdF9yZWFkX2ZpbGUgKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGRlZmF1bHRfd3JpdGVfZmlsZSAoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgbG9mZl90IGRlZmF1bHRfZmlsZV9sc2VlayAoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnKQoreworCWxvZmZfdCByZXR2YWwgPSAtRUlOVkFMOworCisJZG93bigmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKwlzd2l0Y2gob3JpZykgeworCWNhc2UgMDoKKwkJaWYgKG9mZnNldCA+IDApIHsKKwkJCWZpbGUtPmZfcG9zID0gb2Zmc2V0OworCQkJcmV0dmFsID0gZmlsZS0+Zl9wb3M7CisJCX0gCisJCWJyZWFrOworCWNhc2UgMToKKwkJaWYgKChvZmZzZXQgKyBmaWxlLT5mX3BvcykgPiAwKSB7CisJCQlmaWxlLT5mX3BvcyArPSBvZmZzZXQ7CisJCQlyZXR2YWwgPSBmaWxlLT5mX3BvczsKKwkJfSAKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXVwKCZmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgZGVmYXVsdF9vcGVuIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpZiAoaW5vZGUtPnUuZ2VuZXJpY19pcCkKKwkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPnUuZ2VuZXJpY19pcDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZhdWx0X2ZpbGVfb3BlcmF0aW9ucyA9IHsKKwkucmVhZCA9CQlkZWZhdWx0X3JlYWRfZmlsZSwKKwkud3JpdGUgPQlkZWZhdWx0X3dyaXRlX2ZpbGUsCisJLm9wZW4gPQkJZGVmYXVsdF9vcGVuLAorCS5sbHNlZWsgPQlkZWZhdWx0X2ZpbGVfbHNlZWssCit9OworCitzdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdXNiZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7CisJLmxvb2t1cCA9CXNpbXBsZV9sb29rdXAsCit9OworCitzdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgdXNiZnNfb3BzID0geworCS5zdGF0ZnMgPQlzaW1wbGVfc3RhdGZzLAorCS5kcm9wX2lub2RlID0JZ2VuZXJpY19kZWxldGVfaW5vZGUsCisJLnJlbW91bnRfZnMgPQlyZW1vdW50LAorfTsKKworc3RhdGljIGludCB1c2Jmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEsIGludCBzaWxlbnQpCit7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgZGVudHJ5ICpyb290OworCisJc2ItPnNfYmxvY2tzaXplID0gUEFHRV9DQUNIRV9TSVpFOworCXNiLT5zX2Jsb2Nrc2l6ZV9iaXRzID0gUEFHRV9DQUNIRV9TSElGVDsKKwlzYi0+c19tYWdpYyA9IFVTQkRFVklDRV9TVVBFUl9NQUdJQzsKKwlzYi0+c19vcCA9ICZ1c2Jmc19vcHM7CisJc2ItPnNfdGltZV9ncmFuID0gMTsKKwlpbm9kZSA9IHVzYmZzX2dldF9pbm9kZShzYiwgU19JRkRJUiB8IDA3NTUsIDApOworCisJaWYgKCFpbm9kZSkgeworCQlkYmcoIiVzOiBjb3VsZCBub3QgZ2V0IGlub2RlISIsX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcm9vdCA9IGRfYWxsb2Nfcm9vdChpbm9kZSk7CisJaWYgKCFyb290KSB7CisJCWRiZygiJXM6IGNvdWxkIG5vdCBnZXQgcm9vdCBkZW50cnkhIixfX0ZVTkNUSU9OX18pOworCQlpcHV0KGlub2RlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXNiLT5zX3Jvb3QgPSByb290OworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqIGdldF9kZW50cnkoc3RydWN0IGRlbnRyeSAqcGFyZW50LCBjb25zdCBjaGFyICpuYW1lKQoreyAgICAgICAgICAgICAgIAorCXN0cnVjdCBxc3RyIHFzdHI7CisKKwlxc3RyLm5hbWUgPSBuYW1lOworCXFzdHIubGVuID0gc3RybGVuKG5hbWUpOworCXFzdHIuaGFzaCA9IGZ1bGxfbmFtZV9oYXNoKG5hbWUscXN0ci5sZW4pOworCXJldHVybiBsb29rdXBfaGFzaCgmcXN0cixwYXJlbnQpOworfSAgICAgICAgICAgICAgIAorCisKKy8qCisgKiBmc19jcmVhdGVfYnlfbmFtZSAtIGNyZWF0ZSBhIGZpbGUsIGdpdmVuIGEgbmFtZQorICogQG5hbWU6CW5hbWUgb2YgZmlsZQorICogQG1vZGU6CXR5cGUgb2YgZmlsZQorICogQHBhcmVudDoJZGVudHJ5IG9mIGRpcmVjdG9yeSB0byBjcmVhdGUgaXQgaW4KKyAqIEBkZW50cnk6CXJlc3VsdGluZyBkZW50cnkgb2YgZmlsZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBib3RoIHJlZ3VsYXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgorICovCitzdGF0aWMgaW50IGZzX2NyZWF0ZV9ieV9uYW1lIChjb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwKKwkJCSAgICAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqKmRlbnRyeSkKK3sKKwlpbnQgZXJyb3IgPSAwOworCisJLyogSWYgdGhlIHBhcmVudCBpcyBub3Qgc3BlY2lmaWVkLCB3ZSBjcmVhdGUgaXQgaW4gdGhlIHJvb3QuCisJICogV2UgbmVlZCB0aGUgcm9vdCBkZW50cnkgdG8gZG8gdGhpcywgd2hpY2ggaXMgaW4gdGhlIHN1cGVyIAorCSAqIGJsb2NrLiBBIHBvaW50ZXIgdG8gdGhhdCBpcyBpbiB0aGUgc3RydWN0IHZmc21vdW50IHRoYXQgd2UKKwkgKiBoYXZlIGFyb3VuZC4KKwkgKi8KKwlpZiAoIXBhcmVudCApIHsKKwkJaWYgKHVzYmZzX21vdW50ICYmIHVzYmZzX21vdW50LT5tbnRfc2IpIHsKKwkJCXBhcmVudCA9IHVzYmZzX21vdW50LT5tbnRfc2ItPnNfcm9vdDsKKwkJfQorCX0KKworCWlmICghcGFyZW50KSB7CisJCWRiZygiQWghIGNhbiBub3QgZmluZCBhIHBhcmVudCEiKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJKmRlbnRyeSA9IE5VTEw7CisJZG93bigmcGFyZW50LT5kX2lub2RlLT5pX3NlbSk7CisJKmRlbnRyeSA9IGdldF9kZW50cnkgKHBhcmVudCwgbmFtZSk7CisJaWYgKCFJU19FUlIoZGVudHJ5KSkgeworCQlpZiAoKG1vZGUgJiBTX0lGTVQpID09IFNfSUZESVIpCisJCQllcnJvciA9IHVzYmZzX21rZGlyIChwYXJlbnQtPmRfaW5vZGUsICpkZW50cnksIG1vZGUpOworCQllbHNlIAorCQkJZXJyb3IgPSB1c2Jmc19jcmVhdGUgKHBhcmVudC0+ZF9pbm9kZSwgKmRlbnRyeSwgbW9kZSk7CisJfSBlbHNlCisJCWVycm9yID0gUFRSX0VSUihkZW50cnkpOworCXVwKCZwYXJlbnQtPmRfaW5vZGUtPmlfc2VtKTsKKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmZzX2NyZWF0ZV9maWxlIChjb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwKKwkJCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHZvaWQgKmRhdGEsCisJCQkJICAgICAgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcywKKwkJCQkgICAgICB1aWRfdCB1aWQsIGdpZF90IGdpZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisJaW50IGVycm9yOworCisJZGJnKCJjcmVhdGluZyBmaWxlICclcyciLG5hbWUpOworCisJZXJyb3IgPSBmc19jcmVhdGVfYnlfbmFtZSAobmFtZSwgbW9kZSwgcGFyZW50LCAmZGVudHJ5KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGVudHJ5ID0gTlVMTDsKKwl9IGVsc2UgeworCQlpZiAoZGVudHJ5LT5kX2lub2RlKSB7CisJCQlpZiAoZGF0YSkKKwkJCQlkZW50cnktPmRfaW5vZGUtPnUuZ2VuZXJpY19pcCA9IGRhdGE7CisJCQlpZiAoZm9wcykKKwkJCQlkZW50cnktPmRfaW5vZGUtPmlfZm9wID0gZm9wczsKKwkJCWRlbnRyeS0+ZF9pbm9kZS0+aV91aWQgPSB1aWQ7CisJCQlkZW50cnktPmRfaW5vZGUtPmlfZ2lkID0gZ2lkOworCQl9CisJfQorCisJcmV0dXJuIGRlbnRyeTsKK30KKworc3RhdGljIHZvaWQgZnNfcmVtb3ZlX2ZpbGUgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQgPSBkZW50cnktPmRfcGFyZW50OworCQorCWlmICghcGFyZW50IHx8ICFwYXJlbnQtPmRfaW5vZGUpCisJCXJldHVybjsKKworCWRvd24oJnBhcmVudC0+ZF9pbm9kZS0+aV9zZW0pOworCWlmICh1c2Jmc19wb3NpdGl2ZShkZW50cnkpKSB7CisJCWlmIChkZW50cnktPmRfaW5vZGUpIHsKKwkJCWlmIChTX0lTRElSKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkKKwkJCQl1c2Jmc19ybWRpcihwYXJlbnQtPmRfaW5vZGUsIGRlbnRyeSk7CisJCQllbHNlCisJCQkJdXNiZnNfdW5saW5rKHBhcmVudC0+ZF9pbm9kZSwgZGVudHJ5KTsKKwkJZHB1dChkZW50cnkpOworCQl9CisJfQorCXVwKCZwYXJlbnQtPmRfaW5vZGUtPmlfc2VtKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnVzYl9nZXRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCisJaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gZ2V0X3NiX3NpbmdsZShmc190eXBlLCBmbGFncywgZGF0YSwgdXNiZnNfZmlsbF9zdXBlcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSB1c2JfZnNfdHlwZSA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkidXNiZnMiLAorCS5nZXRfc2IgPQl1c2JfZ2V0X3NiLAorCS5raWxsX3NiID0Ja2lsbF9saXR0ZXJfc3VwZXIsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBjcmVhdGVfc3BlY2lhbF9maWxlcyAodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7CisJaW50IHJldHZhbDsKKworCS8qIHRoZSBzaW1wbGVfcGluX2ZzIGNhbGxzIHdpbGwgY2FsbCByZW1vdW50IHdpdGggbm8gb3B0aW9ucworCSAqIHdpdGhvdXQgdGhpcyBmbGFnIHRoYXQgd291bGQgb3ZlcndyaXRlIHRoZSByZWFsIG1vdW50IG9wdGlvbnMgKGlmIGFueSkKKwkgKi8KKwlpZ25vcmVfbW91bnQgPSAxOworCisJLyogY3JlYXRlIHRoZSBkZXZpY2VzIHNwZWNpYWwgZmlsZSAqLworCXJldHZhbCA9IHNpbXBsZV9waW5fZnMoInVzYmZzIiwgJnVzYmZzX21vdW50LCAmdXNiZnNfbW91bnRfY291bnQpOworCWlmIChyZXR2YWwpIHsKKwkJZXJyICgiVW5hYmxlIHRvIGdldCB1c2JmcyBtb3VudCIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWdub3JlX21vdW50ID0gMDsKKworCXBhcmVudCA9IHVzYmZzX21vdW50LT5tbnRfc2ItPnNfcm9vdDsKKwlkZXZpY2VzX3VzYmZzX2RlbnRyeSA9IGZzX2NyZWF0ZV9maWxlICgiZGV2aWNlcyIsCisJCQkJCSAgICAgICBsaXN0bW9kZSB8IFNfSUZSRUcsIHBhcmVudCwKKwkJCQkJICAgICAgIE5VTEwsICZ1c2Jmc19kZXZpY2VzX2ZvcHMsCisJCQkJCSAgICAgICBsaXN0dWlkLCBsaXN0Z2lkKTsKKwlpZiAoZGV2aWNlc191c2Jmc19kZW50cnkgPT0gTlVMTCkgeworCQllcnIgKCJVbmFibGUgdG8gY3JlYXRlIGRldmljZXMgdXNiZnMgZmlsZSIpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycm9yX2NsZWFuX21vdW50czsKKwl9CisKKwlnb3RvIGV4aXQ7CisJCitlcnJvcl9jbGVhbl9tb3VudHM6CisJc2ltcGxlX3JlbGVhc2VfZnMoJnVzYmZzX21vdW50LCAmdXNiZnNfbW91bnRfY291bnQpOworZXhpdDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfc3BlY2lhbF9maWxlcyAodm9pZCkKK3sKKwlpZiAoZGV2aWNlc191c2Jmc19kZW50cnkpCisJCWZzX3JlbW92ZV9maWxlIChkZXZpY2VzX3VzYmZzX2RlbnRyeSk7CisJZGV2aWNlc191c2Jmc19kZW50cnkgPSBOVUxMOworCXNpbXBsZV9yZWxlYXNlX2ZzKCZ1c2Jmc19tb3VudCwgJnVzYmZzX21vdW50X2NvdW50KTsKK30KKwordm9pZCB1c2Jmc191cGRhdGVfc3BlY2lhbCAodm9pZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCisJaWYgKGRldmljZXNfdXNiZnNfZGVudHJ5KSB7CisJCWlub2RlID0gZGV2aWNlc191c2Jmc19kZW50cnktPmRfaW5vZGU7CisJCWlmIChpbm9kZSkKKwkJCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKKwl9Cit9CisKK3ZvaWQgdXNiZnNfYWRkX2J1cyhzdHJ1Y3QgdXNiX2J1cyAqYnVzKQoreworCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKKwljaGFyIG5hbWVbOF07CisJaW50IHJldHZhbDsKKworCS8qIGNyZWF0ZSB0aGUgc3BlY2lhbCBmaWxlcyBpZiB0aGlzIGlzIHRoZSBmaXJzdCBidXMgYWRkZWQgKi8KKwlpZiAobnVtX2J1c2VzID09IDApIHsKKwkJcmV0dmFsID0gY3JlYXRlX3NwZWNpYWxfZmlsZXMoKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybjsKKwl9CisJKytudW1fYnVzZXM7CisKKwlzcHJpbnRmIChuYW1lLCAiJTAzZCIsIGJ1cy0+YnVzbnVtKTsKKworCXBhcmVudCA9IHVzYmZzX21vdW50LT5tbnRfc2ItPnNfcm9vdDsKKwlidXMtPnVzYmZzX2RlbnRyeSA9IGZzX2NyZWF0ZV9maWxlIChuYW1lLCBidXNtb2RlIHwgU19JRkRJUiwgcGFyZW50LAorCQkJCQkgICAgYnVzLCBOVUxMLCBidXN1aWQsIGJ1c2dpZCk7CisJaWYgKGJ1cy0+dXNiZnNfZGVudHJ5ID09IE5VTEwpIHsKKwkJZXJyICgiZXJyb3IgY3JlYXRpbmcgdXNiZnMgYnVzIGVudHJ5Iik7CisJCXJldHVybjsKKwl9CisKKwl1c2Jmc191cGRhdGVfc3BlY2lhbCgpOworCXVzYmZzX2Nvbm5fZGlzY19ldmVudCgpOworfQorCit2b2lkIHVzYmZzX3JlbW92ZV9idXMoc3RydWN0IHVzYl9idXMgKmJ1cykKK3sKKwlpZiAoYnVzLT51c2Jmc19kZW50cnkpIHsKKwkJZnNfcmVtb3ZlX2ZpbGUgKGJ1cy0+dXNiZnNfZGVudHJ5KTsKKwkJYnVzLT51c2Jmc19kZW50cnkgPSBOVUxMOworCX0KKworCS0tbnVtX2J1c2VzOworCWlmIChudW1fYnVzZXMgPD0gMCkgeworCQlyZW1vdmVfc3BlY2lhbF9maWxlcygpOworCQludW1fYnVzZXMgPSAwOworCX0KKworCXVzYmZzX3VwZGF0ZV9zcGVjaWFsKCk7CisJdXNiZnNfY29ubl9kaXNjX2V2ZW50KCk7Cit9CisKK3ZvaWQgdXNiZnNfYWRkX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQoreworCWNoYXIgbmFtZVs4XTsKKwlpbnQgaTsKKwlpbnQgaV9zaXplOworCisJc3ByaW50ZiAobmFtZSwgIiUwM2QiLCBkZXYtPmRldm51bSk7CisJZGV2LT51c2Jmc19kZW50cnkgPSBmc19jcmVhdGVfZmlsZSAobmFtZSwgZGV2bW9kZSB8IFNfSUZSRUcsCisJCQkJCSAgICBkZXYtPmJ1cy0+dXNiZnNfZGVudHJ5LCBkZXYsCisJCQkJCSAgICAmdXNiZnNfZGV2aWNlX2ZpbGVfb3BlcmF0aW9ucywKKwkJCQkJICAgIGRldnVpZCwgZGV2Z2lkKTsKKwlpZiAoZGV2LT51c2Jmc19kZW50cnkgPT0gTlVMTCkgeworCQllcnIgKCJlcnJvciBjcmVhdGluZyB1c2JmcyBkZXZpY2UgZW50cnkiKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFNldCB0aGUgc2l6ZSBvZiB0aGUgZGV2aWNlJ3MgZmlsZSB0byBiZQorCSAqIGVxdWFsIHRvIHRoZSBzaXplIG9mIHRoZSBkZXZpY2UgZGVzY3JpcHRvcnMuICovCisJaV9zaXplID0gc2l6ZW9mIChzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9uczsgKytpKSB7CisJCXN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgKmNvbmZpZyA9CisJCQkoc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvciAqKWRldi0+cmF3ZGVzY3JpcHRvcnNbaV07CisJCWlfc2l6ZSArPSBsZTE2X3RvX2NwdShjb25maWctPndUb3RhbExlbmd0aCk7CisJfQorCWlmIChkZXYtPnVzYmZzX2RlbnRyeS0+ZF9pbm9kZSkKKwkJZGV2LT51c2Jmc19kZW50cnktPmRfaW5vZGUtPmlfc2l6ZSA9IGlfc2l6ZTsKKworCXVzYmZzX3VwZGF0ZV9zcGVjaWFsKCk7CisJdXNiZnNfY29ubl9kaXNjX2V2ZW50KCk7Cit9CisKK3ZvaWQgdXNiZnNfcmVtb3ZlX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZfc3RhdGUgKmRzOworCXN0cnVjdCBzaWdpbmZvIHNpbmZvOworCisJaWYgKGRldi0+dXNiZnNfZGVudHJ5KSB7CisJCWZzX3JlbW92ZV9maWxlIChkZXYtPnVzYmZzX2RlbnRyeSk7CisJCWRldi0+dXNiZnNfZGVudHJ5ID0gTlVMTDsKKwl9CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZkZXYtPmZpbGVsaXN0KSkgeworCQlkcyA9IGxpc3RfZW50cnkoZGV2LT5maWxlbGlzdC5uZXh0LCBzdHJ1Y3QgZGV2X3N0YXRlLCBsaXN0KTsKKwkJd2FrZV91cF9hbGwoJmRzLT53YWl0KTsKKwkJbGlzdF9kZWxfaW5pdCgmZHMtPmxpc3QpOworCQlpZiAoZHMtPmRpc2NzaWducikgeworCQkJc2luZm8uc2lfc2lnbm8gPSBTSUdQSVBFOworCQkJc2luZm8uc2lfZXJybm8gPSBFUElQRTsKKwkJCXNpbmZvLnNpX2NvZGUgPSBTSV9BU1lOQ0lPOworCQkJc2luZm8uc2lfYWRkciA9IGRzLT5kaXNjY29udGV4dDsKKwkJCXNlbmRfc2lnX2luZm8oZHMtPmRpc2NzaWduciwgJnNpbmZvLCBkcy0+ZGlzY3Rhc2spOworCQl9CisJfQorCXVzYmZzX3VwZGF0ZV9zcGVjaWFsKCk7CisJdXNiZnNfY29ubl9kaXNjX2V2ZW50KCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICp1c2JkaXIgPSBOVUxMOworCitpbnQgX19pbml0IHVzYmZzX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ1c2Jmc19kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZ1c2JfZnNfdHlwZSk7CisJaWYgKHJldHZhbCkgeworCQl1c2JfZGVyZWdpc3RlcigmdXNiZnNfZHJpdmVyKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkvKiBjcmVhdGUgbW91bnQgcG9pbnQgZm9yIHVzYmZzICovCisJdXNiZGlyID0gcHJvY19ta2RpcigidXNiIiwgcHJvY19idXMpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdXNiZnNfY2xlYW51cCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZ1c2Jmc19kcml2ZXIpOworCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmdXNiX2ZzX3R5cGUpOworCWlmICh1c2JkaXIpCisJCXJlbW92ZV9wcm9jX2VudHJ5KCJ1c2IiLCBwcm9jX2J1cyk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBiZGIzOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCkBAIC0wLDAgKzEsMTQ4MCBAQAorLyoKKyAqIG1lc3NhZ2UuYyAtIHN5bmNocm9ub3VzIG1lc3NhZ2UgaGFuZGxpbmcKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCisJI2RlZmluZSBERUJVRworI2Vsc2UKKwkjdW5kZWYgREVCVUcKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CS8qIGZvciBzY2F0dGVybGlzdCBtYWNyb3MgKi8KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2luY2x1ZGUgImhjZC5oIgkvKiBmb3IgdXNiY29yZSBpbnRlcm5hbHMgKi8KKyNpbmNsdWRlICJ1c2IuaCIKKworc3RhdGljIHZvaWQgdXNiX2FwaV9ibG9ja2luZ19jb21wbGV0aW9uKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJY29tcGxldGUoKHN0cnVjdCBjb21wbGV0aW9uICopdXJiLT5jb250ZXh0KTsKK30KKworCitzdGF0aWMgdm9pZCB0aW1lb3V0X2tpbGwodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCB1cmIJKnVyYiA9IChzdHJ1Y3QgdXJiICopIGRhdGE7CisKKwl1c2JfdW5saW5rX3VyYih1cmIpOworfQorCisvLyBTdGFydHMgdXJiIGFuZCB3YWl0cyBmb3IgY29tcGxldGlvbiBvciB0aW1lb3V0CisvLyBub3RlIHRoYXQgdGhpcyBjYWxsIGlzIE5PVCBpbnRlcnJ1cHRpYmxlLCB3aGlsZQorLy8gbWFueSBkZXZpY2UgZHJpdmVyIGkvbyByZXF1ZXN0cyBzaG91bGQgYmUgaW50ZXJydXB0aWJsZQorc3RhdGljIGludCB1c2Jfc3RhcnRfd2FpdF91cmIoc3RydWN0IHVyYiAqdXJiLCBpbnQgdGltZW91dCwgaW50KiBhY3R1YWxfbGVuZ3RoKQoreyAKKwlzdHJ1Y3QgY29tcGxldGlvbglkb25lOworCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOworCWludAkJCXN0YXR1czsKKworCWluaXRfY29tcGxldGlvbigmZG9uZSk7IAkKKwl1cmItPmNvbnRleHQgPSAmZG9uZTsKKwl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9BU1lOQ19VTkxJTks7CisJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9OT0lPKTsKKworCWlmIChzdGF0dXMgPT0gMCkgeworCQlpZiAodGltZW91dCA+IDApIHsKKwkJCWluaXRfdGltZXIoJnRpbWVyKTsKKwkJCXRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKKwkJCXRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyl1cmI7CisJCQl0aW1lci5mdW5jdGlvbiA9IHRpbWVvdXRfa2lsbDsKKwkJCS8qIGdyci4gIHRpbWVvdXQgX3Nob3VsZF8gaW5jbHVkZSBzdWJtaXQgZGVsYXlzLiAqLworCQkJYWRkX3RpbWVyKCZ0aW1lcik7CisJCX0KKwkJd2FpdF9mb3JfY29tcGxldGlvbigmZG9uZSk7CisJCXN0YXR1cyA9IHVyYi0+c3RhdHVzOworCQkvKiBub3RlOiAgSENEcyByZXR1cm4gRVRJTUVET1VUIGZvciBvdGhlciByZWFzb25zIHRvbyAqLworCQlpZiAoc3RhdHVzID09IC1FQ09OTlJFU0VUKSB7CisJCQlkZXZfZGJnKCZ1cmItPmRldi0+ZGV2LAorCQkJCSIlcyB0aW1lZCBvdXQgb24gZXAlZCVzIGxlbj0lZC8lZFxuIiwKKwkJCQljdXJyZW50LT5jb21tLAorCQkJCXVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKKwkJCQl1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIsCisJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLAorCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aAorCQkJCSk7CisJCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID4gMCkKKwkJCQlzdGF0dXMgPSAwOworCQkJZWxzZQorCQkJCXN0YXR1cyA9IC1FVElNRURPVVQ7CisJCX0KKwkJaWYgKHRpbWVvdXQgPiAwKQorCQkJZGVsX3RpbWVyX3N5bmMoJnRpbWVyKTsKKwl9CisKKwlpZiAoYWN0dWFsX2xlbmd0aCkKKwkJKmFjdHVhbF9sZW5ndGggPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJdXNiX2ZyZWVfdXJiKHVyYik7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8vIHJldHVybnMgc3RhdHVzIChuZWdhdGl2ZSkgb3IgbGVuZ3RoIChwb3NpdGl2ZSkKK3N0YXRpYyBpbnQgdXNiX2ludGVybmFsX2NvbnRyb2xfbXNnKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgcGlwZSwgCisJCQkJICAgIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmNtZCwKKwkJCQkgICAgdm9pZCAqZGF0YSwgaW50IGxlbiwgaW50IHRpbWVvdXQpCit7CisJc3RydWN0IHVyYiAqdXJiOworCWludCByZXR2OworCWludCBsZW5ndGg7CisKKwl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9OT0lPKTsKKwlpZiAoIXVyYikKKwkJcmV0dXJuIC1FTk9NRU07CisgIAorCXVzYl9maWxsX2NvbnRyb2xfdXJiKHVyYiwgdXNiX2RldiwgcGlwZSwgKHVuc2lnbmVkIGNoYXIgKiljbWQsIGRhdGEsCisJCQkgICAgIGxlbiwgdXNiX2FwaV9ibG9ja2luZ19jb21wbGV0aW9uLCBOVUxMKTsKKworCXJldHYgPSB1c2Jfc3RhcnRfd2FpdF91cmIodXJiLCB0aW1lb3V0LCAmbGVuZ3RoKTsKKwlpZiAocmV0diA8IDApCisJCXJldHVybiByZXR2OworCWVsc2UKKwkJcmV0dXJuIGxlbmd0aDsKK30KKworLyoqCisgKgl1c2JfY29udHJvbF9tc2cgLSBCdWlsZHMgYSBjb250cm9sIHVyYiwgc2VuZHMgaXQgb2ZmIGFuZCB3YWl0cyBmb3IgY29tcGxldGlvbgorICoJQGRldjogcG9pbnRlciB0byB0aGUgdXNiIGRldmljZSB0byBzZW5kIHRoZSBtZXNzYWdlIHRvCisgKglAcGlwZTogZW5kcG9pbnQgInBpcGUiIHRvIHNlbmQgdGhlIG1lc3NhZ2UgdG8KKyAqCUByZXF1ZXN0OiBVU0IgbWVzc2FnZSByZXF1ZXN0IHZhbHVlCisgKglAcmVxdWVzdHR5cGU6IFVTQiBtZXNzYWdlIHJlcXVlc3QgdHlwZSB2YWx1ZQorICoJQHZhbHVlOiBVU0IgbWVzc2FnZSB2YWx1ZQorICoJQGluZGV4OiBVU0IgbWVzc2FnZSBpbmRleCB2YWx1ZQorICoJQGRhdGE6IHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gc2VuZAorICoJQHNpemU6IGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZGF0YSB0byBzZW5kCisgKglAdGltZW91dDogdGltZSBpbiBtc2VjcyB0byB3YWl0IGZvciB0aGUgbWVzc2FnZSB0byBjb21wbGV0ZSBiZWZvcmUKKyAqCQl0aW1pbmcgb3V0IChpZiAwIHRoZSB3YWl0IGlzIGZvcmV2ZXIpCisgKglDb250ZXh0OiAhaW5faW50ZXJydXB0ICgpCisgKgorICoJVGhpcyBmdW5jdGlvbiBzZW5kcyBhIHNpbXBsZSBjb250cm9sIG1lc3NhZ2UgdG8gYSBzcGVjaWZpZWQgZW5kcG9pbnQKKyAqCWFuZCB3YWl0cyBmb3IgdGhlIG1lc3NhZ2UgdG8gY29tcGxldGUsIG9yIHRpbWVvdXQuCisgKgkKKyAqCUlmIHN1Y2Nlc3NmdWwsIGl0IHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCwgb3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyLgorICoKKyAqCURvbid0IHVzZSB0aGlzIGZ1bmN0aW9uIGZyb20gd2l0aGluIGFuIGludGVycnVwdCBjb250ZXh0LCBsaWtlIGEKKyAqCWJvdHRvbSBoYWxmIGhhbmRsZXIuICBJZiB5b3UgbmVlZCBhbiBhc3luY2hyb25vdXMgbWVzc2FnZSwgb3IgbmVlZCB0byBzZW5kCisgKglhIG1lc3NhZ2UgZnJvbSB3aXRoaW4gaW50ZXJydXB0IGNvbnRleHQsIHVzZSB1c2Jfc3VibWl0X3VyYigpCisgKiAgICAgIElmIGEgdGhyZWFkIGluIHlvdXIgZHJpdmVyIHVzZXMgdGhpcyBjYWxsLCBtYWtlIHN1cmUgeW91ciBkaXNjb25uZWN0KCkKKyAqICAgICAgbWV0aG9kIGNhbiB3YWl0IGZvciBpdCB0byBjb21wbGV0ZS4gIFNpbmNlIHlvdSBkb24ndCBoYXZlIGEgaGFuZGxlIG9uCisgKiAgICAgIHRoZSBVUkIgdXNlZCwgeW91IGNhbid0IGNhbmNlbCB0aGUgcmVxdWVzdC4KKyAqLworaW50IHVzYl9jb250cm9sX21zZyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSwgX191OCByZXF1ZXN0LCBfX3U4IHJlcXVlc3R0eXBlLAorCQkJIF9fdTE2IHZhbHVlLCBfX3UxNiBpbmRleCwgdm9pZCAqZGF0YSwgX191MTYgc2l6ZSwgaW50IHRpbWVvdXQpCit7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqZHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KSwgR0ZQX05PSU8pOworCWludCByZXQ7CisJCisJaWYgKCFkcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkci0+YlJlcXVlc3RUeXBlPSByZXF1ZXN0dHlwZTsKKwlkci0+YlJlcXVlc3QgPSByZXF1ZXN0OworCWRyLT53VmFsdWUgPSBjcHVfdG9fbGUxNnAoJnZhbHVlKTsKKwlkci0+d0luZGV4ID0gY3B1X3RvX2xlMTZwKCZpbmRleCk7CisJZHItPndMZW5ndGggPSBjcHVfdG9fbGUxNnAoJnNpemUpOworCisJLy9kYmcoInVzYl9jb250cm9sX21zZyIpOwkKKworCXJldCA9IHVzYl9pbnRlcm5hbF9jb250cm9sX21zZyhkZXYsIHBpcGUsIGRyLCBkYXRhLCBzaXplLCB0aW1lb3V0KTsKKworCWtmcmVlKGRyKTsKKworCXJldHVybiByZXQ7Cit9CisKKworLyoqCisgKgl1c2JfYnVsa19tc2cgLSBCdWlsZHMgYSBidWxrIHVyYiwgc2VuZHMgaXQgb2ZmIGFuZCB3YWl0cyBmb3IgY29tcGxldGlvbgorICoJQHVzYl9kZXY6IHBvaW50ZXIgdG8gdGhlIHVzYiBkZXZpY2UgdG8gc2VuZCB0aGUgbWVzc2FnZSB0bworICoJQHBpcGU6IGVuZHBvaW50ICJwaXBlIiB0byBzZW5kIHRoZSBtZXNzYWdlIHRvCisgKglAZGF0YTogcG9pbnRlciB0byB0aGUgZGF0YSB0byBzZW5kCisgKglAbGVuOiBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGRhdGEgdG8gc2VuZAorICoJQGFjdHVhbF9sZW5ndGg6IHBvaW50ZXIgdG8gYSBsb2NhdGlvbiB0byBwdXQgdGhlIGFjdHVhbCBsZW5ndGggdHJhbnNmZXJyZWQgaW4gYnl0ZXMKKyAqCUB0aW1lb3V0OiB0aW1lIGluIG1zZWNzIHRvIHdhaXQgZm9yIHRoZSBtZXNzYWdlIHRvIGNvbXBsZXRlIGJlZm9yZQorICoJCXRpbWluZyBvdXQgKGlmIDAgdGhlIHdhaXQgaXMgZm9yZXZlcikKKyAqCUNvbnRleHQ6ICFpbl9pbnRlcnJ1cHQgKCkKKyAqCisgKglUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgc2ltcGxlIGJ1bGsgbWVzc2FnZSB0byBhIHNwZWNpZmllZCBlbmRwb2ludAorICoJYW5kIHdhaXRzIGZvciB0aGUgbWVzc2FnZSB0byBjb21wbGV0ZSwgb3IgdGltZW91dC4KKyAqCQorICoJSWYgc3VjY2Vzc2Z1bCwgaXQgcmV0dXJucyAwLCBvdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCisgKglUaGUgbnVtYmVyIG9mIGFjdHVhbCBieXRlcyB0cmFuc2ZlcnJlZCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgCisgKglhY3R1YWxfbGVuZ3RoIHBhcmFtYXRlci4KKyAqCisgKglEb24ndCB1c2UgdGhpcyBmdW5jdGlvbiBmcm9tIHdpdGhpbiBhbiBpbnRlcnJ1cHQgY29udGV4dCwgbGlrZSBhCisgKglib3R0b20gaGFsZiBoYW5kbGVyLiAgSWYgeW91IG5lZWQgYW4gYXN5bmNocm9ub3VzIG1lc3NhZ2UsIG9yIG5lZWQgdG8KKyAqCXNlbmQgYSBtZXNzYWdlIGZyb20gd2l0aGluIGludGVycnVwdCBjb250ZXh0LCB1c2UgdXNiX3N1Ym1pdF91cmIoKQorICogICAgICBJZiBhIHRocmVhZCBpbiB5b3VyIGRyaXZlciB1c2VzIHRoaXMgY2FsbCwgbWFrZSBzdXJlIHlvdXIgZGlzY29ubmVjdCgpCisgKiAgICAgIG1ldGhvZCBjYW4gd2FpdCBmb3IgaXQgdG8gY29tcGxldGUuICBTaW5jZSB5b3UgZG9uJ3QgaGF2ZSBhIGhhbmRsZSBvbgorICogICAgICB0aGUgVVJCIHVzZWQsIHlvdSBjYW4ndCBjYW5jZWwgdGhlIHJlcXVlc3QuCisgKi8KK2ludCB1c2JfYnVsa19tc2coc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsIHVuc2lnbmVkIGludCBwaXBlLCAKKwkJCXZvaWQgKmRhdGEsIGludCBsZW4sIGludCAqYWN0dWFsX2xlbmd0aCwgaW50IHRpbWVvdXQpCit7CisJc3RydWN0IHVyYiAqdXJiOworCisJaWYgKGxlbiA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJdXJiPXVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1cmIpCisJCXJldHVybiAtRU5PTUVNOworCisJdXNiX2ZpbGxfYnVsa191cmIodXJiLCB1c2JfZGV2LCBwaXBlLCBkYXRhLCBsZW4sCisJCQkgIHVzYl9hcGlfYmxvY2tpbmdfY29tcGxldGlvbiwgTlVMTCk7CisKKwlyZXR1cm4gdXNiX3N0YXJ0X3dhaXRfdXJiKHVyYiwgdGltZW91dCwgYWN0dWFsX2xlbmd0aCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHNnX2NsZWFuIChzdHJ1Y3QgdXNiX3NnX3JlcXVlc3QgKmlvKQoreworCWlmIChpby0+dXJicykgeworCQl3aGlsZSAoaW8tPmVudHJpZXMtLSkKKwkJCXVzYl9mcmVlX3VyYiAoaW8tPnVyYnMgW2lvLT5lbnRyaWVzXSk7CisJCWtmcmVlIChpby0+dXJicyk7CisJCWlvLT51cmJzID0gTlVMTDsKKwl9CisJaWYgKGlvLT5kZXYtPmRldi5kbWFfbWFzayAhPSBOVUxMKQorCQl1c2JfYnVmZmVyX3VubWFwX3NnIChpby0+ZGV2LCBpby0+cGlwZSwgaW8tPnNnLCBpby0+bmVudHMpOworCWlvLT5kZXYgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBzZ19jb21wbGV0ZSAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NnX3JlcXVlc3QJKmlvID0gKHN0cnVjdCB1c2Jfc2dfcmVxdWVzdCAqKSB1cmItPmNvbnRleHQ7CisKKwlzcGluX2xvY2sgKCZpby0+bG9jayk7CisKKwkvKiBJbiAyLjUgd2UgcmVxdWlyZSBoY2RzJyBlbmRwb2ludCBxdWV1ZXMgbm90IHRvIHByb2dyZXNzIGFmdGVyIGZhdWx0CisJICogcmVwb3J0cywgdW50aWwgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgKHRoaXMhKSByZXR1cm5zLiAgVGhhdCBsZXRzCisJICogZGV2aWNlIGRyaXZlciBjb2RlIChsaWtlIHRoaXMgcm91dGluZSkgdW5saW5rIHF1ZXVlZCB1cmJzIGZpcnN0LAorCSAqIGlmIGl0IG5lZWRzIHRvLCBzaW5jZSB0aGUgSEMgd29uJ3Qgd29yayBvbiB0aGVtIGF0IGFsbC4gIFNvIGl0J3MKKwkgKiBub3QgcG9zc2libGUgZm9yIHBhZ2UgTisxIHRvIG92ZXJ3cml0ZSBwYWdlIE4sIGFuZCBzbyBvbi4KKwkgKgorCSAqIFRoYXQncyBvbmx5IGZvciAiaGFyZCIgZmF1bHRzOyAic29mdCIgZmF1bHRzICh1bmxpbmtzKSBzb21ldGltZXMKKwkgKiBjb21wbGV0ZSBiZWZvcmUgdGhlIEhDRCBjYW4gZ2V0IHJlcXVlc3RzIGF3YXkgZnJvbSBoYXJkd2FyZSwKKwkgKiB0aG91Z2ggbmV2ZXIgZHVyaW5nIGNsZWFudXAgYWZ0ZXIgYSBoYXJkIGZhdWx0LgorCSAqLworCWlmIChpby0+c3RhdHVzCisJCQkmJiAoaW8tPnN0YXR1cyAhPSAtRUNPTk5SRVNFVAorCQkJCXx8IHVyYi0+c3RhdHVzICE9IC1FQ09OTlJFU0VUKQorCQkJJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCWRldl9lcnIgKGlvLT5kZXYtPmJ1cy0+Y29udHJvbGxlciwKKwkJCSJkZXYgJXMgZXAlZCVzIHNjYXR0ZXJsaXN0IGVycm9yICVkLyVkXG4iLAorCQkJaW8tPmRldi0+ZGV2cGF0aCwKKwkJCXVzYl9waXBlZW5kcG9pbnQgKHVyYi0+cGlwZSksCisJCQl1c2JfcGlwZWluICh1cmItPnBpcGUpID8gImluIiA6ICJvdXQiLAorCQkJdXJiLT5zdGF0dXMsIGlvLT5zdGF0dXMpOworCQkvLyBCVUcgKCk7CisJfQorCisJaWYgKGlvLT5zdGF0dXMgPT0gMCAmJiB1cmItPnN0YXR1cyAmJiB1cmItPnN0YXR1cyAhPSAtRUNPTk5SRVNFVCkgeworCQlpbnQJCWksIGZvdW5kLCBzdGF0dXM7CisKKwkJaW8tPnN0YXR1cyA9IHVyYi0+c3RhdHVzOworCisJCS8qIHRoZSBwcmV2aW91cyB1cmJzLCBhbmQgdGhpcyBvbmUsIGNvbXBsZXRlZCBhbHJlYWR5LgorCQkgKiB1bmxpbmsgcGVuZGluZyB1cmJzIHNvIHRoZXkgd29uJ3QgcngvdHggYmFkIGRhdGEuCisJCSAqIGNhcmVmdWw6IHVubGluayBjYW4gc29tZXRpbWVzIGJlIHN5bmNocm9ub3VzLi4uCisJCSAqLworCQlzcGluX3VubG9jayAoJmlvLT5sb2NrKTsKKwkJZm9yIChpID0gMCwgZm91bmQgPSAwOyBpIDwgaW8tPmVudHJpZXM7IGkrKykgeworCQkJaWYgKCFpby0+dXJicyBbaV0gfHwgIWlvLT51cmJzIFtpXS0+ZGV2KQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGZvdW5kKSB7CisJCQkJc3RhdHVzID0gdXNiX3VubGlua191cmIgKGlvLT51cmJzIFtpXSk7CisJCQkJaWYgKHN0YXR1cyAhPSAtRUlOUFJPR1JFU1MgJiYgc3RhdHVzICE9IC1FQlVTWSkKKwkJCQkJZGV2X2VyciAoJmlvLT5kZXYtPmRldiwKKwkJCQkJCSIlcywgdW5saW5rIC0tPiAlZFxuIiwKKwkJCQkJCV9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJCX0gZWxzZSBpZiAodXJiID09IGlvLT51cmJzIFtpXSkKKwkJCQlmb3VuZCA9IDE7CisJCX0KKwkJc3Bpbl9sb2NrICgmaW8tPmxvY2spOworCX0KKwl1cmItPmRldiA9IE5VTEw7CisKKwkvKiBvbiB0aGUgbGFzdCBjb21wbGV0aW9uLCBzaWduYWwgdXNiX3NnX3dhaXQoKSAqLworCWlvLT5ieXRlcyArPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJaW8tPmNvdW50LS07CisJaWYgKCFpby0+Y291bnQpCisJCWNvbXBsZXRlICgmaW8tPmNvbXBsZXRlKTsKKworCXNwaW5fdW5sb2NrICgmaW8tPmxvY2spOworfQorCisKKy8qKgorICogdXNiX3NnX2luaXQgLSBpbml0aWFsaXplcyBzY2F0dGVybGlzdC1iYXNlZCBidWxrL2ludGVycnVwdCBJL08gcmVxdWVzdAorICogQGlvOiByZXF1ZXN0IGJsb2NrIGJlaW5nIGluaXRpYWxpemVkLiAgdW50aWwgdXNiX3NnX3dhaXQoKSByZXR1cm5zLAorICoJdHJlYXQgdGhpcyBhcyBhIHBvaW50ZXIgdG8gYW4gb3BhcXVlIGJsb2NrIG9mIG1lbW9yeSwKKyAqIEBkZXY6IHRoZSB1c2IgZGV2aWNlIHRoYXQgd2lsbCBzZW5kIG9yIHJlY2VpdmUgdGhlIGRhdGEKKyAqIEBwaXBlOiBlbmRwb2ludCAicGlwZSIgdXNlZCB0byB0cmFuc2ZlciB0aGUgZGF0YQorICogQHBlcmlvZDogcG9sbGluZyByYXRlIGZvciBpbnRlcnJ1cHQgZW5kcG9pbnRzLCBpbiBmcmFtZXMgb3IKKyAqIAkoZm9yIGhpZ2ggc3BlZWQgZW5kcG9pbnRzKSBtaWNyb2ZyYW1lczsgaWdub3JlZCBmb3IgYnVsaworICogQHNnOiBzY2F0dGVybGlzdCBlbnRyaWVzCisgKiBAbmVudHM6IGhvdyBtYW55IGVudHJpZXMgaW4gdGhlIHNjYXR0ZXJsaXN0CisgKiBAbGVuZ3RoOiBob3cgbWFueSBieXRlcyB0byBzZW5kIGZyb20gdGhlIHNjYXR0ZXJsaXN0LCBvciB6ZXJvIHRvCisgKiAJc2VuZCBldmVyeSBieXRlIGlkZW50aWZpZWQgaW4gdGhlIGxpc3QuCisgKiBAbWVtX2ZsYWdzOiBTTEFCXyogZmxhZ3MgYWZmZWN0aW5nIG1lbW9yeSBhbGxvY2F0aW9ucyBpbiB0aGlzIGNhbGwKKyAqCisgKiBSZXR1cm5zIHplcm8gZm9yIHN1Y2Nlc3MsIGVsc2UgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZS4gIFRoaXMgaW5pdGlhbGl6ZXMgYQorICogc2NhdHRlci9nYXRoZXIgcmVxdWVzdCwgYWxsb2NhdGluZyByZXNvdXJjZXMgc3VjaCBhcyBJL08gbWFwcGluZ3MgYW5kIHVyYgorICogbWVtb3J5IChleGNlcHQgbWF5YmUgbWVtb3J5IHVzZWQgYnkgVVNCIGNvbnRyb2xsZXIgZHJpdmVycykuCisgKgorICogVGhlIHJlcXVlc3QgbXVzdCBiZSBpc3N1ZWQgdXNpbmcgdXNiX3NnX3dhaXQoKSwgd2hpY2ggd2FpdHMgZm9yIHRoZSBJL08gdG8KKyAqIGNvbXBsZXRlIChvciB0byBiZSBjYW5jZWxlZCkgYW5kIHRoZW4gY2xlYW5zIHVwIGFsbCByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5CisgKiB1c2Jfc2dfaW5pdCgpLgorICoKKyAqIFRoZSByZXF1ZXN0IG1heSBiZSBjYW5jZWxlZCB3aXRoIHVzYl9zZ19jYW5jZWwoKSwgZWl0aGVyIGJlZm9yZSBvciBhZnRlcgorICogdXNiX3NnX3dhaXQoKSBpcyBjYWxsZWQuCisgKi8KK2ludCB1c2Jfc2dfaW5pdCAoCisJc3RydWN0IHVzYl9zZ19yZXF1ZXN0CSppbywKKwlzdHJ1Y3QgdXNiX2RldmljZQkqZGV2LAorCXVuc2lnbmVkCQlwaXBlLCAKKwl1bnNpZ25lZAkJcGVyaW9kLAorCXN0cnVjdCBzY2F0dGVybGlzdAkqc2csCisJaW50CQkJbmVudHMsCisJc2l6ZV90CQkJbGVuZ3RoLAorCWludAkJCW1lbV9mbGFncworKQoreworCWludAkJCWk7CisJaW50CQkJdXJiX2ZsYWdzOworCWludAkJCWRtYTsKKworCWlmICghaW8gfHwgIWRldiB8fCAhc2cKKwkJCXx8IHVzYl9waXBlY29udHJvbCAocGlwZSkKKwkJCXx8IHVzYl9waXBlaXNvYyAocGlwZSkKKwkJCXx8IG5lbnRzIDw9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2luaXQgKCZpby0+bG9jayk7CisJaW8tPmRldiA9IGRldjsKKwlpby0+cGlwZSA9IHBpcGU7CisJaW8tPnNnID0gc2c7CisJaW8tPm5lbnRzID0gbmVudHM7CisKKwkvKiBub3QgYWxsIGhvc3QgY29udHJvbGxlcnMgdXNlIERNQSAobGlrZSB0aGUgbWFpbnN0cmVhbSBwY2kgb25lcyk7CisJICogdGhleSBjYW4gdXNlIFBJTyAoc2w4MTEpIG9yIGJlIHNvZnR3YXJlIG92ZXIgYW5vdGhlciB0cmFuc3BvcnQuCisJICovCisJZG1hID0gKGRldi0+ZGV2LmRtYV9tYXNrICE9IE5VTEwpOworCWlmIChkbWEpCisJCWlvLT5lbnRyaWVzID0gdXNiX2J1ZmZlcl9tYXBfc2cgKGRldiwgcGlwZSwgc2csIG5lbnRzKTsKKwllbHNlCisJCWlvLT5lbnRyaWVzID0gbmVudHM7CisKKwkvKiBpbml0aWFsaXplIGFsbCB0aGUgdXJicyB3ZSdsbCB1c2UgKi8KKwlpZiAoaW8tPmVudHJpZXMgPD0gMCkKKwkJcmV0dXJuIGlvLT5lbnRyaWVzOworCisJaW8tPmNvdW50ID0gaW8tPmVudHJpZXM7CisJaW8tPnVyYnMgPSBrbWFsbG9jIChpby0+ZW50cmllcyAqIHNpemVvZiAqaW8tPnVyYnMsIG1lbV9mbGFncyk7CisJaWYgKCFpby0+dXJicykKKwkJZ290byBub21lbTsKKworCXVyYl9mbGFncyA9IFVSQl9BU1lOQ19VTkxJTksgfCBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUAorCQkJfCBVUkJfTk9fSU5URVJSVVBUOworCWlmICh1c2JfcGlwZWluIChwaXBlKSkKKwkJdXJiX2ZsYWdzIHw9IFVSQl9TSE9SVF9OT1RfT0s7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW8tPmVudHJpZXM7IGkrKykgeworCQl1bnNpZ25lZAkJbGVuOworCisJCWlvLT51cmJzIFtpXSA9IHVzYl9hbGxvY191cmIgKDAsIG1lbV9mbGFncyk7CisJCWlmICghaW8tPnVyYnMgW2ldKSB7CisJCQlpby0+ZW50cmllcyA9IGk7CisJCQlnb3RvIG5vbWVtOworCQl9CisKKwkJaW8tPnVyYnMgW2ldLT5kZXYgPSBOVUxMOworCQlpby0+dXJicyBbaV0tPnBpcGUgPSBwaXBlOworCQlpby0+dXJicyBbaV0tPmludGVydmFsID0gcGVyaW9kOworCQlpby0+dXJicyBbaV0tPnRyYW5zZmVyX2ZsYWdzID0gdXJiX2ZsYWdzOworCisJCWlvLT51cmJzIFtpXS0+Y29tcGxldGUgPSBzZ19jb21wbGV0ZTsKKwkJaW8tPnVyYnMgW2ldLT5jb250ZXh0ID0gaW87CisJCWlvLT51cmJzIFtpXS0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCQlpby0+dXJicyBbaV0tPmFjdHVhbF9sZW5ndGggPSAwOworCisJCWlmIChkbWEpIHsKKwkJCS8qIGhjIG1heSB1c2UgX29ubHlfIHRyYW5zZmVyX2RtYSAqLworCQkJaW8tPnVyYnMgW2ldLT50cmFuc2Zlcl9kbWEgPSBzZ19kbWFfYWRkcmVzcyAoc2cgKyBpKTsKKwkJCWxlbiA9IHNnX2RtYV9sZW4gKHNnICsgaSk7CisJCX0gZWxzZSB7CisJCQkvKiBoYyBtYXkgdXNlIF9vbmx5XyB0cmFuc2Zlcl9idWZmZXIgKi8KKwkJCWlvLT51cmJzIFtpXS0+dHJhbnNmZXJfYnVmZmVyID0KKwkJCQlwYWdlX2FkZHJlc3MgKHNnIFtpXS5wYWdlKSArIHNnIFtpXS5vZmZzZXQ7CisJCQlsZW4gPSBzZyBbaV0ubGVuZ3RoOworCQl9CisKKwkJaWYgKGxlbmd0aCkgeworCQkJbGVuID0gbWluX3QgKHVuc2lnbmVkLCBsZW4sIGxlbmd0aCk7CisJCQlsZW5ndGggLT0gbGVuOworCQkJaWYgKGxlbmd0aCA9PSAwKQorCQkJCWlvLT5lbnRyaWVzID0gaSArIDE7CisJCX0KKwkJaW8tPnVyYnMgW2ldLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gbGVuOworCX0KKwlpby0+dXJicyBbLS1pXS0+dHJhbnNmZXJfZmxhZ3MgJj0gflVSQl9OT19JTlRFUlJVUFQ7CisKKwkvKiB0cmFuc2FjdGlvbiBzdGF0ZSAqLworCWlvLT5zdGF0dXMgPSAwOworCWlvLT5ieXRlcyA9IDA7CisJaW5pdF9jb21wbGV0aW9uICgmaW8tPmNvbXBsZXRlKTsKKwlyZXR1cm4gMDsKKworbm9tZW06CisJc2dfY2xlYW4gKGlvKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworCisvKioKKyAqIHVzYl9zZ193YWl0IC0gc3luY2hyb25vdXNseSBleGVjdXRlIHNjYXR0ZXIvZ2F0aGVyIHJlcXVlc3QKKyAqIEBpbzogcmVxdWVzdCBibG9jayBoYW5kbGUsIGFzIGluaXRpYWxpemVkIHdpdGggdXNiX3NnX2luaXQoKS4KKyAqIAlzb21lIGZpZWxkcyBiZWNvbWUgYWNjZXNzaWJsZSB3aGVuIHRoaXMgY2FsbCByZXR1cm5zLgorICogQ29udGV4dDogIWluX2ludGVycnVwdCAoKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gYmxvY2tzIHVudGlsIHRoZSBzcGVjaWZpZWQgSS9PIG9wZXJhdGlvbiBjb21wbGV0ZXMuICBJdAorICogbGV2ZXJhZ2VzIHRoZSBncm91cGluZyBvZiB0aGUgcmVsYXRlZCBJL08gcmVxdWVzdHMgdG8gZ2V0IGdvb2QgdHJhbnNmZXIKKyAqIHJhdGVzLCBieSBxdWV1ZWluZyB0aGUgcmVxdWVzdHMuICBBdCBoaWdoZXIgc3BlZWRzLCBzdWNoIHF1ZXVpbmcgY2FuCisgKiBzaWduaWZpY2FudGx5IGltcHJvdmUgVVNCIHRocm91Z2hwdXQuCisgKgorICogVGhlcmUgYXJlIHRocmVlIGtpbmRzIG9mIGNvbXBsZXRpb24gZm9yIHRoaXMgZnVuY3Rpb24uCisgKiAoMSkgc3VjY2Vzcywgd2hlcmUgaW8tPnN0YXR1cyBpcyB6ZXJvLiAgVGhlIG51bWJlciBvZiBpby0+Ynl0ZXMKKyAqICAgICB0cmFuc2ZlcnJlZCBpcyBhcyByZXF1ZXN0ZWQuCisgKiAoMikgZXJyb3IsIHdoZXJlIGlvLT5zdGF0dXMgaXMgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZS4gIFRoZSBudW1iZXIKKyAqICAgICBvZiBpby0+Ynl0ZXMgdHJhbnNmZXJyZWQgYmVmb3JlIHRoZSBlcnJvciBpcyB1c3VhbGx5IGxlc3MKKyAqICAgICB0aGFuIHJlcXVlc3RlZCwgYW5kIGNhbiBiZSBub256ZXJvLgorICogKDMpIGNhbmNlbGF0aW9uLCBhIHR5cGUgb2YgZXJyb3Igd2l0aCBzdGF0dXMgLUVDT05OUkVTRVQgdGhhdAorICogICAgIGlzIGluaXRpYXRlZCBieSB1c2Jfc2dfY2FuY2VsKCkuCisgKgorICogV2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIGFsbCBtZW1vcnkgYWxsb2NhdGVkIHRocm91Z2ggdXNiX3NnX2luaXQoKSBvcgorICogdGhpcyBjYWxsIHdpbGwgaGF2ZSBiZWVuIGZyZWVkLiAgVGhlIHJlcXVlc3QgYmxvY2sgcGFyYW1ldGVyIG1heSBzdGlsbCBiZQorICogcGFzc2VkIHRvIHVzYl9zZ19jYW5jZWwoKSwgb3IgaXQgbWF5IGJlIGZyZWVkLiAgSXQgY291bGQgYWxzbyBiZQorICogcmVpbml0aWFsaXplZCBhbmQgdGhlbiByZXVzZWQuCisgKgorICogRGF0YSBUcmFuc2ZlciBSYXRlczoKKyAqCisgKiBCdWxrIHRyYW5zZmVycyBhcmUgdmFsaWQgZm9yIGZ1bGwgb3IgaGlnaCBzcGVlZCBlbmRwb2ludHMuCisgKiBUaGUgYmVzdCBmdWxsIHNwZWVkIGRhdGEgcmF0ZSBpcyAxOSBwYWNrZXRzIG9mIDY0IGJ5dGVzIGVhY2gKKyAqIHBlciBmcmFtZSwgb3IgMTIxNiBieXRlcyBwZXIgbWlsbGlzZWNvbmQuCisgKiBUaGUgYmVzdCBoaWdoIHNwZWVkIGRhdGEgcmF0ZSBpcyAxMyBwYWNrZXRzIG9mIDUxMiBieXRlcyBlYWNoCisgKiBwZXIgbWljcm9mcmFtZSwgb3IgNTIgS0J5dGVzIHBlciBtaWxsaXNlY29uZC4KKyAqCisgKiBUaGUgcmVhc29uIHRvIHVzZSBpbnRlcnJ1cHQgdHJhbnNmZXJzIHRocm91Z2ggdGhpcyBBUEkgd291bGQgbW9zdCBsaWtlbHkKKyAqIGJlIHRvIHJlc2VydmUgaGlnaCBzcGVlZCBiYW5kd2lkdGgsIHdoZXJlIHVwIHRvIDI0IEtCeXRlcyBwZXIgbWlsbGlzZWNvbmQKKyAqIGNvdWxkIGJlIHRyYW5zZmVycmVkLiAgVGhhdCBjYXBhYmlsaXR5IGlzIGxlc3MgdXNlZnVsIGZvciBsb3cgb3IgZnVsbAorICogc3BlZWQgaW50ZXJydXB0IGVuZHBvaW50cywgd2hpY2ggYWxsb3cgYXQgbW9zdCBvbmUgcGFja2V0IHBlciBtaWxsaXNlY29uZCwKKyAqIG9mIGF0IG1vc3QgOCBvciA2NCBieXRlcyAocmVzcGVjdGl2ZWx5KS4KKyAqLwordm9pZCB1c2Jfc2dfd2FpdCAoc3RydWN0IHVzYl9zZ19yZXF1ZXN0ICppbykKK3sKKwlpbnQJCWksIGVudHJpZXMgPSBpby0+ZW50cmllczsKKworCS8qIHF1ZXVlIHRoZSB1cmJzLiAgKi8KKwlzcGluX2xvY2tfaXJxICgmaW8tPmxvY2spOworCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzICYmICFpby0+c3RhdHVzOyBpKyspIHsKKwkJaW50CXJldHZhbDsKKworCQlpby0+dXJicyBbaV0tPmRldiA9IGlvLT5kZXY7CisJCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiIChpby0+dXJicyBbaV0sIFNMQUJfQVRPTUlDKTsKKworCQkvKiBhZnRlciB3ZSBzdWJtaXQsIGxldCBjb21wbGV0aW9ucyBvciBjYW5jZWxhdGlvbnMgZmlyZTsKKwkJICogd2UgaGFuZHNoYWtlIHVzaW5nIGlvLT5zdGF0dXMuCisJCSAqLworCQlzcGluX3VubG9ja19pcnEgKCZpby0+bG9jayk7CisJCXN3aXRjaCAocmV0dmFsKSB7CisJCQkvKiBtYXliZSB3ZSByZXRyeWluZyB3aWxsIHJlY292ZXIgKi8KKwkJY2FzZSAtRU5YSU86CS8vIGhjIGRpZG4ndCBxdWV1ZSB0aGlzIG9uZQorCQljYXNlIC1FQUdBSU46CisJCWNhc2UgLUVOT01FTToKKwkJCWlvLT51cmJzW2ldLT5kZXYgPSBOVUxMOworCQkJcmV0dmFsID0gMDsKKwkJCWktLTsKKwkJCXlpZWxkICgpOworCQkJYnJlYWs7CisKKwkJCS8qIG5vIGVycm9yPyBjb250aW51ZSBpbW1lZGlhdGVseS4KKwkJCSAqCisJCQkgKiBOT1RFOiB0byB3b3JrIGJldHRlciB3aXRoIFVIQ0kgKDRLIEkvTyBidWZmZXIgbWF5CisJCQkgKiBuZWVkIDNLIG9mIFREcykgaXQgbWF5IGJlIGdvb2QgdG8gbGltaXQgaG93IG1hbnkKKwkJCSAqIFVSQnMgYXJlIHF1ZXVlZCBhdCBvbmNlOyBOIG1pbGxpc2Vjb25kcz8KKwkJCSAqLworCQljYXNlIDA6CisJCQljcHVfcmVsYXggKCk7CisJCQlicmVhazsKKworCQkJLyogZmFpbCBhbnkgdW5jb21wbGV0ZWQgdXJicyAqLworCQlkZWZhdWx0OgorCQkJaW8tPnVyYnMgW2ldLT5kZXYgPSBOVUxMOworCQkJaW8tPnVyYnMgW2ldLT5zdGF0dXMgPSByZXR2YWw7CisJCQlkZXZfZGJnICgmaW8tPmRldi0+ZGV2LCAiJXMsIHN1Ym1pdCAtLT4gJWRcbiIsCisJCQkJX19GVU5DVElPTl9fLCByZXR2YWwpOworCQkJdXNiX3NnX2NhbmNlbCAoaW8pOworCQl9CisJCXNwaW5fbG9ja19pcnEgKCZpby0+bG9jayk7CisJCWlmIChyZXR2YWwgJiYgKGlvLT5zdGF0dXMgPT0gMCB8fCBpby0+c3RhdHVzID09IC1FQ09OTlJFU0VUKSkKKwkJCWlvLT5zdGF0dXMgPSByZXR2YWw7CisJfQorCWlvLT5jb3VudCAtPSBlbnRyaWVzIC0gaTsKKwlpZiAoaW8tPmNvdW50ID09IDApCisJCWNvbXBsZXRlICgmaW8tPmNvbXBsZXRlKTsKKwlzcGluX3VubG9ja19pcnEgKCZpby0+bG9jayk7CisKKwkvKiBPSywgeWVzLCB0aGlzIGNvdWxkIGJlIHBhY2thZ2VkIGFzIG5vbi1ibG9ja2luZy4KKwkgKiBTbyBjb3VsZCB0aGUgc3VibWl0IGxvb3AgYWJvdmUgLi4uIGJ1dCBpdCdzIGVhc2llciB0bworCSAqIHNvbHZlIG5laXRoZXIgcHJvYmxlbSB0aGFuIHRvIHNvbHZlIGJvdGghCisJICovCisJd2FpdF9mb3JfY29tcGxldGlvbiAoJmlvLT5jb21wbGV0ZSk7CisKKwlzZ19jbGVhbiAoaW8pOworfQorCisvKioKKyAqIHVzYl9zZ19jYW5jZWwgLSBzdG9wIHNjYXR0ZXIvZ2F0aGVyIGkvbyBpc3N1ZWQgYnkgdXNiX3NnX3dhaXQoKQorICogQGlvOiByZXF1ZXN0IGJsb2NrLCBpbml0aWFsaXplZCB3aXRoIHVzYl9zZ19pbml0KCkKKyAqCisgKiBUaGlzIHN0b3BzIGEgcmVxdWVzdCBhZnRlciBpdCBoYXMgYmVlbiBzdGFydGVkIGJ5IHVzYl9zZ193YWl0KCkuCisgKiBJdCBjYW4gYWxzbyBwcmV2ZW50cyBvbmUgaW5pdGlhbGl6ZWQgYnkgdXNiX3NnX2luaXQoKSBmcm9tIHN0YXJ0aW5nLAorICogc28gdGhhdCBjYWxsIGp1c3QgZnJlZXMgcmVzb3VyY2VzIGFsbG9jYXRlZCB0byB0aGUgcmVxdWVzdC4KKyAqLwordm9pZCB1c2Jfc2dfY2FuY2VsIChzdHJ1Y3QgdXNiX3NnX3JlcXVlc3QgKmlvKQoreworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmlvLT5sb2NrLCBmbGFncyk7CisKKwkvKiBzaHV0IGV2ZXJ5dGhpbmcgZG93biwgaWYgaXQgZGlkbid0IGFscmVhZHkgKi8KKwlpZiAoIWlvLT5zdGF0dXMpIHsKKwkJaW50CWk7CisKKwkJaW8tPnN0YXR1cyA9IC1FQ09OTlJFU0VUOworCQlzcGluX3VubG9jayAoJmlvLT5sb2NrKTsKKwkJZm9yIChpID0gMDsgaSA8IGlvLT5lbnRyaWVzOyBpKyspIHsKKwkJCWludAlyZXR2YWw7CisKKwkJCWlmICghaW8tPnVyYnMgW2ldLT5kZXYpCisJCQkJY29udGludWU7CisJCQlyZXR2YWwgPSB1c2JfdW5saW5rX3VyYiAoaW8tPnVyYnMgW2ldKTsKKwkJCWlmIChyZXR2YWwgIT0gLUVJTlBST0dSRVNTICYmIHJldHZhbCAhPSAtRUJVU1kpCisJCQkJZGV2X3dhcm4gKCZpby0+ZGV2LT5kZXYsICIlcywgdW5saW5rIC0tPiAlZFxuIiwKKwkJCQkJX19GVU5DVElPTl9fLCByZXR2YWwpOworCQl9CisJCXNwaW5fbG9jayAoJmlvLT5sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmlvLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogdXNiX2dldF9kZXNjcmlwdG9yIC0gaXNzdWVzIGEgZ2VuZXJpYyBHRVRfREVTQ1JJUFRPUiByZXF1ZXN0CisgKiBAZGV2OiB0aGUgZGV2aWNlIHdob3NlIGRlc2NyaXB0b3IgaXMgYmVpbmcgcmV0cmlldmVkCisgKiBAdHlwZTogdGhlIGRlc2NyaXB0b3IgdHlwZSAoVVNCX0RUXyopCisgKiBAaW5kZXg6IHRoZSBudW1iZXIgb2YgdGhlIGRlc2NyaXB0b3IKKyAqIEBidWY6IHdoZXJlIHRvIHB1dCB0aGUgZGVzY3JpcHRvcgorICogQHNpemU6IGhvdyBiaWcgaXMgImJ1ZiI/CisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0ICgpCisgKgorICogR2V0cyBhIFVTQiBkZXNjcmlwdG9yLiAgQ29udmVuaWVuY2UgZnVuY3Rpb25zIGV4aXN0IHRvIHNpbXBsaWZ5CisgKiBnZXR0aW5nIHNvbWUgdHlwZXMgb2YgZGVzY3JpcHRvcnMuICBVc2UKKyAqIHVzYl9nZXRfc3RyaW5nKCkgb3IgdXNiX3N0cmluZygpIGZvciBVU0JfRFRfU1RSSU5HLgorICogRGV2aWNlIChVU0JfRFRfREVWSUNFKSBhbmQgY29uZmlndXJhdGlvbiBkZXNjcmlwdG9ycyAoVVNCX0RUX0NPTkZJRykKKyAqIGFyZSBwYXJ0IG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlLgorICogSW4gYWRkaXRpb24gdG8gYSBudW1iZXIgb2YgVVNCLXN0YW5kYXJkIGRlc2NyaXB0b3JzLCBzb21lCisgKiBkZXZpY2VzIGFsc28gdXNlIGNsYXNzLXNwZWNpZmljIG9yIHZlbmRvci1zcGVjaWZpYyBkZXNjcmlwdG9ycy4KKyAqCisgKiBUaGlzIGNhbGwgaXMgc3luY2hyb25vdXMsIGFuZCBtYXkgbm90IGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIG9uIHN1Y2Nlc3MsIG9yIGVsc2UgdGhlIHN0YXR1cyBjb2RlCisgKiByZXR1cm5lZCBieSB0aGUgdW5kZXJseWluZyB1c2JfY29udHJvbF9tc2coKSBjYWxsLgorICovCitpbnQgdXNiX2dldF9kZXNjcmlwdG9yKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgdHlwZSwgdW5zaWduZWQgY2hhciBpbmRleCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSkKK3sKKwlpbnQgaTsKKwlpbnQgcmVzdWx0OworCQorCW1lbXNldChidWYsMCxzaXplKTsJLy8gTWFrZSBzdXJlIHdlIHBhcnNlIHJlYWxseSByZWNlaXZlZCBkYXRhCisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgKytpKSB7CisJCS8qIHJldHJ5IG9uIGxlbmd0aCAwIG9yIHN0YWxsOyBzb21lIGRldmljZXMgYXJlIGZsYWtleSAqLworCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwKKwkJCQlVU0JfUkVRX0dFVF9ERVNDUklQVE9SLCBVU0JfRElSX0lOLAorCQkJCSh0eXBlIDw8IDgpICsgaW5kZXgsIDAsIGJ1Ziwgc2l6ZSwKKwkJCQlVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJCWlmIChyZXN1bHQgPT0gMCB8fCByZXN1bHQgPT0gLUVQSVBFKQorCQkJY29udGludWU7CisJCWlmIChyZXN1bHQgPiAxICYmICgodTggKilidWYpWzFdICE9IHR5cGUpIHsKKwkJCXJlc3VsdCA9IC1FUFJPVE87CisJCQljb250aW51ZTsKKwkJfQorCQlicmVhazsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiB1c2JfZ2V0X3N0cmluZyAtIGdldHMgYSBzdHJpbmcgZGVzY3JpcHRvcgorICogQGRldjogdGhlIGRldmljZSB3aG9zZSBzdHJpbmcgZGVzY3JpcHRvciBpcyBiZWluZyByZXRyaWV2ZWQKKyAqIEBsYW5naWQ6IGNvZGUgZm9yIGxhbmd1YWdlIGNob3NlbiAoZnJvbSBzdHJpbmcgZGVzY3JpcHRvciB6ZXJvKQorICogQGluZGV4OiB0aGUgbnVtYmVyIG9mIHRoZSBkZXNjcmlwdG9yCisgKiBAYnVmOiB3aGVyZSB0byBwdXQgdGhlIHN0cmluZworICogQHNpemU6IGhvdyBiaWcgaXMgImJ1ZiI/CisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0ICgpCisgKgorICogUmV0cmlldmVzIGEgc3RyaW5nLCBlbmNvZGVkIHVzaW5nIFVURi0xNkxFIChVbmljb2RlLCAxNiBiaXRzIHBlciBjaGFyYWN0ZXIsCisgKiBpbiBsaXR0bGUtZW5kaWFuIGJ5dGUgb3JkZXIpLgorICogVGhlIHVzYl9zdHJpbmcoKSBmdW5jdGlvbiB3aWxsIG9mdGVuIGJlIGEgY29udmVuaWVudCB3YXkgdG8gdHVybgorICogdGhlc2Ugc3RyaW5ncyBpbnRvIGtlcm5lbC1wcmludGFibGUgZm9ybS4KKyAqCisgKiBTdHJpbmdzIG1heSBiZSByZWZlcmVuY2VkIGluIGRldmljZSwgY29uZmlndXJhdGlvbiwgaW50ZXJmYWNlLCBvciBvdGhlcgorICogZGVzY3JpcHRvcnMsIGFuZCBjb3VsZCBhbHNvIGJlIHVzZWQgaW4gdmVuZG9yLXNwZWNpZmljIHdheXMuCisgKgorICogVGhpcyBjYWxsIGlzIHN5bmNocm9ub3VzLCBhbmQgbWF5IG5vdCBiZSB1c2VkIGluIGFuIGludGVycnVwdCBjb250ZXh0LgorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWNlaXZlZCBvbiBzdWNjZXNzLCBvciBlbHNlIHRoZSBzdGF0dXMgY29kZQorICogcmV0dXJuZWQgYnkgdGhlIHVuZGVybHlpbmcgdXNiX2NvbnRyb2xfbXNnKCkgY2FsbC4KKyAqLworaW50IHVzYl9nZXRfc3RyaW5nKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IGxhbmdpZCwKKwkJdW5zaWduZWQgY2hhciBpbmRleCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSkKK3sKKwlpbnQgaTsKKwlpbnQgcmVzdWx0OworCisJZm9yIChpID0gMDsgaSA8IDM7ICsraSkgeworCQkvKiByZXRyeSBvbiBsZW5ndGggMCBvciBzdGFsbDsgc29tZSBkZXZpY2VzIGFyZSBmbGFrZXkgKi8KKwkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCisJCQlVU0JfUkVRX0dFVF9ERVNDUklQVE9SLCBVU0JfRElSX0lOLAorCQkJKFVTQl9EVF9TVFJJTkcgPDwgOCkgKyBpbmRleCwgbGFuZ2lkLCBidWYsIHNpemUsCisJCQlVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJCWlmICghKHJlc3VsdCA9PSAwIHx8IHJlc3VsdCA9PSAtRVBJUEUpKQorCQkJYnJlYWs7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIHVzYl90cnlfc3RyaW5nX3dvcmthcm91bmRzKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50ICpsZW5ndGgpCit7CisJaW50IG5ld2xlbmd0aCwgb2xkbGVuZ3RoID0gKmxlbmd0aDsKKworCWZvciAobmV3bGVuZ3RoID0gMjsgbmV3bGVuZ3RoICsgMSA8IG9sZGxlbmd0aDsgbmV3bGVuZ3RoICs9IDIpCisJCWlmICghaXNwcmludChidWZbbmV3bGVuZ3RoXSkgfHwgYnVmW25ld2xlbmd0aCArIDFdKQorCQkJYnJlYWs7CisKKwlpZiAobmV3bGVuZ3RoID4gMikgeworCQlidWZbMF0gPSBuZXdsZW5ndGg7CisJCSpsZW5ndGggPSBuZXdsZW5ndGg7CisJfQorfQorCitzdGF0aWMgaW50IHVzYl9zdHJpbmdfc3ViKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBsYW5naWQsCisJCXVuc2lnbmVkIGludCBpbmRleCwgdW5zaWduZWQgY2hhciAqYnVmKQoreworCWludCByYzsKKworCS8qIFRyeSB0byByZWFkIHRoZSBzdHJpbmcgZGVzY3JpcHRvciBieSBhc2tpbmcgZm9yIHRoZSBtYXhpbXVtCisJICogcG9zc2libGUgbnVtYmVyIG9mIGJ5dGVzICovCisJcmMgPSB1c2JfZ2V0X3N0cmluZyhkZXYsIGxhbmdpZCwgaW5kZXgsIGJ1ZiwgMjU1KTsKKworCS8qIElmIHRoYXQgZmFpbGVkIHRyeSB0byByZWFkIHRoZSBkZXNjcmlwdG9yIGxlbmd0aCwgdGhlbgorCSAqIGFzayBmb3IganVzdCB0aGF0IG1hbnkgYnl0ZXMgKi8KKwlpZiAocmMgPCAyKSB7CisJCXJjID0gdXNiX2dldF9zdHJpbmcoZGV2LCBsYW5naWQsIGluZGV4LCBidWYsIDIpOworCQlpZiAocmMgPT0gMikKKwkJCXJjID0gdXNiX2dldF9zdHJpbmcoZGV2LCBsYW5naWQsIGluZGV4LCBidWYsIGJ1ZlswXSk7CisJfQorCisJaWYgKHJjID49IDIpIHsKKwkJaWYgKCFidWZbMF0gJiYgIWJ1ZlsxXSkKKwkJCXVzYl90cnlfc3RyaW5nX3dvcmthcm91bmRzKGJ1ZiwgJnJjKTsKKworCQkvKiBUaGVyZSBtaWdodCBiZSBleHRyYSBqdW5rIGF0IHRoZSBlbmQgb2YgdGhlIGRlc2NyaXB0b3IgKi8KKwkJaWYgKGJ1ZlswXSA8IHJjKQorCQkJcmMgPSBidWZbMF07CisKKwkJcmMgPSByYyAtIChyYyAmIDEpOyAvKiBmb3JjZSBhIG11bHRpcGxlIG9mIHR3byAqLworCX0KKworCWlmIChyYyA8IDIpCisJCXJjID0gKHJjIDwgMCA/IHJjIDogLUVJTlZBTCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogdXNiX3N0cmluZyAtIHJldHVybnMgSVNPIDg4NTktMSB2ZXJzaW9uIG9mIGEgc3RyaW5nIGRlc2NyaXB0b3IKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugd2hvc2Ugc3RyaW5nIGRlc2NyaXB0b3IgaXMgYmVpbmcgcmV0cmlldmVkCisgKiBAaW5kZXg6IHRoZSBudW1iZXIgb2YgdGhlIGRlc2NyaXB0b3IKKyAqIEBidWY6IHdoZXJlIHRvIHB1dCB0aGUgc3RyaW5nCisgKiBAc2l6ZTogaG93IGJpZyBpcyAiYnVmIj8KKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQgKCkKKyAqIAorICogVGhpcyBjb252ZXJ0cyB0aGUgVVRGLTE2TEUgZW5jb2RlZCBzdHJpbmdzIHJldHVybmVkIGJ5IGRldmljZXMsIGZyb20KKyAqIHVzYl9nZXRfc3RyaW5nX2Rlc2NyaXB0b3IoKSwgdG8gbnVsbC10ZXJtaW5hdGVkIElTTy04ODU5LTEgZW5jb2RlZCBvbmVzCisgKiB0aGF0IGFyZSBtb3JlIHVzYWJsZSBpbiBtb3N0IGtlcm5lbCBjb250ZXh0cy4gIE5vdGUgdGhhdCBhbGwgY2hhcmFjdGVycworICogaW4gdGhlIGNob3NlbiBkZXNjcmlwdG9yIHRoYXQgY2FuJ3QgYmUgZW5jb2RlZCB1c2luZyBJU08tODg1OS0xCisgKiBhcmUgY29udmVydGVkIHRvIHRoZSBxdWVzdGlvbiBtYXJrICgiPyIpIGNoYXJhY3RlciwgYW5kIHRoaXMgZnVuY3Rpb24KKyAqIGNob29zZXMgc3RyaW5ncyBpbiB0aGUgZmlyc3QgbGFuZ3VhZ2Ugc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UuCisgKgorICogVGhlIEFTQ0lJIChvciwgcmVkdW5kYW50bHksICJVUy1BU0NJSSIpIGNoYXJhY3RlciBzZXQgaXMgdGhlIHNldmVuLWJpdAorICogc3Vic2V0IG9mIElTTyA4ODU5LTEuIElTTy04ODU5LTEgaXMgdGhlIGVpZ2h0LWJpdCBzdWJzZXQgb2YgVW5pY29kZSwKKyAqIGFuZCBpcyBhcHByb3ByaWF0ZSBmb3IgdXNlIG1hbnkgdXNlcyBvZiBFbmdsaXNoIGFuZCBzZXZlcmFsIG90aGVyCisgKiBXZXN0ZXJuIEV1cm9wZWFuIGxhbmd1YWdlcy4gIChCdXQgaXQgZG9lc24ndCBpbmNsdWRlIHRoZSAiRXVybyIgc3ltYm9sLikKKyAqCisgKiBUaGlzIGNhbGwgaXMgc3luY2hyb25vdXMsIGFuZCBtYXkgbm90IGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQuCisgKgorICogUmV0dXJucyBsZW5ndGggb2YgdGhlIHN0cmluZyAoPj0gMCkgb3IgdXNiX2NvbnRyb2xfbXNnIHN0YXR1cyAoPCAwKS4KKyAqLworaW50IHVzYl9zdHJpbmcoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IGluZGV4LCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXVuc2lnbmVkIGNoYXIgKnRidWY7CisJaW50IGVycjsKKwl1bnNpZ25lZCBpbnQgdSwgaWR4OworCisJaWYgKGRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKKwkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CisJaWYgKHNpemUgPD0gMCB8fCAhYnVmIHx8ICFpbmRleCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJYnVmWzBdID0gMDsKKwl0YnVmID0ga21hbGxvYygyNTYsIEdGUF9LRVJORUwpOworCWlmICghdGJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBnZXQgbGFuZ2lkIGZvciBzdHJpbmdzIGlmIGl0J3Mgbm90IHlldCBrbm93biAqLworCWlmICghZGV2LT5oYXZlX2xhbmdpZCkgeworCQllcnIgPSB1c2Jfc3RyaW5nX3N1YihkZXYsIDAsIDAsIHRidWYpOworCQlpZiAoZXJyIDwgMCkgeworCQkJZGV2X2VyciAoJmRldi0+ZGV2LAorCQkJCSJzdHJpbmcgZGVzY3JpcHRvciAwIHJlYWQgZXJyb3I6ICVkXG4iLAorCQkJCWVycik7CisJCQlnb3RvIGVycm91dDsKKwkJfSBlbHNlIGlmIChlcnIgPCA0KSB7CisJCQlkZXZfZXJyICgmZGV2LT5kZXYsICJzdHJpbmcgZGVzY3JpcHRvciAwIHRvbyBzaG9ydFxuIik7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBlcnJvdXQ7CisJCX0gZWxzZSB7CisJCQlkZXYtPmhhdmVfbGFuZ2lkID0gLTE7CisJCQlkZXYtPnN0cmluZ19sYW5naWQgPSB0YnVmWzJdIHwgKHRidWZbM108PCA4KTsKKwkJCQkvKiBhbHdheXMgdXNlIHRoZSBmaXJzdCBsYW5naWQgbGlzdGVkICovCisJCQlkZXZfZGJnICgmZGV2LT5kZXYsICJkZWZhdWx0IGxhbmd1YWdlIDB4JTA0eFxuIiwKKwkJCQlkZXYtPnN0cmluZ19sYW5naWQpOworCQl9CisJfQorCQorCWVyciA9IHVzYl9zdHJpbmdfc3ViKGRldiwgZGV2LT5zdHJpbmdfbGFuZ2lkLCBpbmRleCwgdGJ1Zik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyb3V0OworCisJc2l6ZS0tOwkJLyogbGVhdmUgcm9vbSBmb3IgdHJhaWxpbmcgTlVMTCBjaGFyIGluIG91dHB1dCBidWZmZXIgKi8KKwlmb3IgKGlkeCA9IDAsIHUgPSAyOyB1IDwgZXJyOyB1ICs9IDIpIHsKKwkJaWYgKGlkeCA+PSBzaXplKQorCQkJYnJlYWs7CisJCWlmICh0YnVmW3UrMV0pCQkJLyogaGlnaCBieXRlICovCisJCQlidWZbaWR4KytdID0gJz8nOyAgLyogbm9uIElTTy04ODU5LTEgY2hhcmFjdGVyICovCisJCWVsc2UKKwkJCWJ1ZltpZHgrK10gPSB0YnVmW3VdOworCX0KKwlidWZbaWR4XSA9IDA7CisJZXJyID0gaWR4OworCisJaWYgKHRidWZbMV0gIT0gVVNCX0RUX1NUUklORykKKwkJZGV2X2RiZygmZGV2LT5kZXYsICJ3cm9uZyBkZXNjcmlwdG9yIHR5cGUgJTAyeCBmb3Igc3RyaW5nICVkIChcIiVzXCIpXG4iLCB0YnVmWzFdLCBpbmRleCwgYnVmKTsKKworIGVycm91dDoKKwlrZnJlZSh0YnVmKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogdXNiX2dldF9kZXZpY2VfZGVzY3JpcHRvciAtIChyZSlyZWFkcyB0aGUgZGV2aWNlIGRlc2NyaXB0b3IgKHVzYmNvcmUpCisgKiBAZGV2OiB0aGUgZGV2aWNlIHdob3NlIGRldmljZSBkZXNjcmlwdG9yIGlzIGJlaW5nIHVwZGF0ZWQKKyAqIEBzaXplOiBob3cgbXVjaCBvZiB0aGUgZGVzY3JpcHRvciB0byByZWFkCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0ICgpCisgKgorICogVXBkYXRlcyB0aGUgY29weSBvZiB0aGUgZGV2aWNlIGRlc2NyaXB0b3Igc3RvcmVkIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLAorICogd2hpY2ggZGVkaWNhdGVzIHNwYWNlIGZvciB0aGlzIHB1cnBvc2UuICBOb3RlIHRoYXQgc2V2ZXJhbCBmaWVsZHMgYXJlCisgKiBjb252ZXJ0ZWQgdG8gdGhlIGhvc3QgQ1BVJ3MgYnl0ZSBvcmRlcjogIHRoZSBVU0IgdmVyc2lvbiAoYmNkVVNCKSwgYW5kCisgKiB2ZW5kb3JzIHByb2R1Y3QgYW5kIHZlcnNpb24gZmllbGRzIChpZFZlbmRvciwgaWRQcm9kdWN0LCBhbmQgYmNkRGV2aWNlKS4KKyAqIFRoYXQgbGV0cyBkZXZpY2UgZHJpdmVycyBjb21wYXJlIGFnYWluc3Qgbm9uLWJ5dGVzd2FwcGVkIGNvbnN0YW50cy4KKyAqCisgKiBOb3QgZXhwb3J0ZWQsIG9ubHkgZm9yIHVzZSBieSB0aGUgY29yZS4gIElmIGRyaXZlcnMgcmVhbGx5IHdhbnQgdG8gcmVhZAorICogdGhlIGRldmljZSBkZXNjcmlwdG9yIGRpcmVjdGx5LCB0aGV5IGNhbiBjYWxsIHVzYl9nZXRfZGVzY3JpcHRvcigpIHdpdGgKKyAqIHR5cGUgPSBVU0JfRFRfREVWSUNFIGFuZCBpbmRleCA9IDAuCisgKgorICogVGhpcyBjYWxsIGlzIHN5bmNocm9ub3VzLCBhbmQgbWF5IG5vdCBiZSB1c2VkIGluIGFuIGludGVycnVwdCBjb250ZXh0LgorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWNlaXZlZCBvbiBzdWNjZXNzLCBvciBlbHNlIHRoZSBzdGF0dXMgY29kZQorICogcmV0dXJuZWQgYnkgdGhlIHVuZGVybHlpbmcgdXNiX2NvbnRyb2xfbXNnKCkgY2FsbC4KKyAqLworaW50IHVzYl9nZXRfZGV2aWNlX2Rlc2NyaXB0b3Ioc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHNpemUpCit7CisJc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvciAqZGVzYzsKKwlpbnQgcmV0OworCisJaWYgKHNpemUgPiBzaXplb2YoKmRlc2MpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlkZXNjID0ga21hbGxvYyhzaXplb2YoKmRlc2MpLCBHRlBfTk9JTyk7CisJaWYgKCFkZXNjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHVzYl9nZXRfZGVzY3JpcHRvcihkZXYsIFVTQl9EVF9ERVZJQ0UsIDAsIGRlc2MsIHNpemUpOworCWlmIChyZXQgPj0gMCkgCisJCW1lbWNweSgmZGV2LT5kZXNjcmlwdG9yLCBkZXNjLCBzaXplKTsKKwlrZnJlZShkZXNjKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHVzYl9nZXRfc3RhdHVzIC0gaXNzdWVzIGEgR0VUX1NUQVRVUyBjYWxsCisgKiBAZGV2OiB0aGUgZGV2aWNlIHdob3NlIHN0YXR1cyBpcyBiZWluZyBjaGVja2VkCisgKiBAdHlwZTogVVNCX1JFQ0lQXyo7IGZvciBkZXZpY2UsIGludGVyZmFjZSwgb3IgZW5kcG9pbnQKKyAqIEB0YXJnZXQ6IHplcm8gKGZvciBkZXZpY2UpLCBlbHNlIGludGVyZmFjZSBvciBlbmRwb2ludCBudW1iZXIKKyAqIEBkYXRhOiBwb2ludGVyIHRvIHR3byBieXRlcyBvZiBiaXRtYXAgZGF0YQorICogQ29udGV4dDogIWluX2ludGVycnVwdCAoKQorICoKKyAqIFJldHVybnMgZGV2aWNlLCBpbnRlcmZhY2UsIG9yIGVuZHBvaW50IHN0YXR1cy4gIE5vcm1hbGx5IG9ubHkgb2YKKyAqIGludGVyZXN0IHRvIHNlZSBpZiB0aGUgZGV2aWNlIGlzIHNlbGYgcG93ZXJlZCwgb3IgaGFzIGVuYWJsZWQgdGhlCisgKiByZW1vdGUgd2FrZXVwIGZhY2lsaXR5OyBvciB3aGV0aGVyIGEgYnVsayBvciBpbnRlcnJ1cHQgZW5kcG9pbnQKKyAqIGlzIGhhbHRlZCAoInN0YWxsZWQiKS4KKyAqCisgKiBCaXRzIGluIHRoZXNlIHN0YXR1cyBiaXRtYXBzIGFyZSBzZXQgdXNpbmcgdGhlIFNFVF9GRUFUVVJFIHJlcXVlc3QsCisgKiBhbmQgY2xlYXJlZCB1c2luZyB0aGUgQ0xFQVJfRkVBVFVSRSByZXF1ZXN0LiAgVGhlIHVzYl9jbGVhcl9oYWx0KCkKKyAqIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIHRvIGNsZWFyIGhhbHQgKCJzdGFsbCIpIHN0YXR1cy4KKyAqCisgKiBUaGlzIGNhbGwgaXMgc3luY2hyb25vdXMsIGFuZCBtYXkgbm90IGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIG9uIHN1Y2Nlc3MsIG9yIGVsc2UgdGhlIHN0YXR1cyBjb2RlCisgKiByZXR1cm5lZCBieSB0aGUgdW5kZXJseWluZyB1c2JfY29udHJvbF9tc2coKSBjYWxsLgorICovCitpbnQgdXNiX2dldF9zdGF0dXMoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IHR5cGUsIGludCB0YXJnZXQsIHZvaWQgKmRhdGEpCit7CisJaW50IHJldDsKKwl1MTYgKnN0YXR1cyA9IGttYWxsb2Moc2l6ZW9mKCpzdGF0dXMpLCBHRlBfS0VSTkVMKTsKKworCWlmICghc3RhdHVzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLAorCQlVU0JfUkVRX0dFVF9TVEFUVVMsIFVTQl9ESVJfSU4gfCB0eXBlLCAwLCB0YXJnZXQsIHN0YXR1cywKKwkJc2l6ZW9mKCpzdGF0dXMpLCBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisKKwkqKHUxNiAqKWRhdGEgPSAqc3RhdHVzOworCWtmcmVlKHN0YXR1cyk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB1c2JfY2xlYXJfaGFsdCAtIHRlbGxzIGRldmljZSB0byBjbGVhciBlbmRwb2ludCBoYWx0L3N0YWxsIGNvbmRpdGlvbgorICogQGRldjogZGV2aWNlIHdob3NlIGVuZHBvaW50IGlzIGhhbHRlZAorICogQHBpcGU6IGVuZHBvaW50ICJwaXBlIiBiZWluZyBjbGVhcmVkCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0ICgpCisgKgorICogVGhpcyBpcyB1c2VkIHRvIGNsZWFyIGhhbHQgY29uZGl0aW9ucyBmb3IgYnVsayBhbmQgaW50ZXJydXB0IGVuZHBvaW50cywKKyAqIGFzIHJlcG9ydGVkIGJ5IFVSQiBjb21wbGV0aW9uIHN0YXR1cy4gIEVuZHBvaW50cyB0aGF0IGFyZSBoYWx0ZWQgYXJlCisgKiBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgYmVpbmcgInN0YWxsZWQiLiAgU3VjaCBlbmRwb2ludHMgYXJlIHVuYWJsZQorICogdG8gdHJhbnNtaXQgb3IgcmVjZWl2ZSBkYXRhIHVudGlsIHRoZSBoYWx0IHN0YXR1cyBpcyBjbGVhcmVkLiAgQW55IFVSQnMKKyAqIHF1ZXVlZCBmb3Igc3VjaCBhbiBlbmRwb2ludCBzaG91bGQgbm9ybWFsbHkgYmUgdW5saW5rZWQgYnkgdGhlIGRyaXZlcgorICogYmVmb3JlIGNsZWFyaW5nIHRoZSBoYWx0IGNvbmRpdGlvbiwgYXMgZGVzY3JpYmVkIGluIHNlY3Rpb25zIDUuNy41CisgKiBhbmQgNS44LjUgb2YgdGhlIFVTQiAyLjAgc3BlYy4KKyAqCisgKiBOb3RlIHRoYXQgY29udHJvbCBhbmQgaXNvY2hyb25vdXMgZW5kcG9pbnRzIGRvbid0IGhhbHQsIGFsdGhvdWdoIGNvbnRyb2wKKyAqIGVuZHBvaW50cyByZXBvcnQgInByb3RvY29sIHN0YWxsIiAoZm9yIHVuc3VwcG9ydGVkIHJlcXVlc3RzKSB1c2luZyB0aGUKKyAqIHNhbWUgc3RhdHVzIGNvZGUgdXNlZCB0byByZXBvcnQgYSB0cnVlIHN0YWxsLgorICoKKyAqIFRoaXMgY2FsbCBpcyBzeW5jaHJvbm91cywgYW5kIG1heSBub3QgYmUgdXNlZCBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3IgZWxzZSB0aGUgc3RhdHVzIGNvZGUgcmV0dXJuZWQgYnkgdGhlCisgKiB1bmRlcmx5aW5nIHVzYl9jb250cm9sX21zZygpIGNhbGwuCisgKi8KK2ludCB1c2JfY2xlYXJfaGFsdChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgcGlwZSkKK3sKKwlpbnQgcmVzdWx0OworCWludCBlbmRwID0gdXNiX3BpcGVlbmRwb2ludChwaXBlKTsKKwkKKwlpZiAodXNiX3BpcGVpbiAocGlwZSkpCisJCWVuZHAgfD0gVVNCX0RJUl9JTjsKKworCS8qIHdlIGRvbid0IGNhcmUgaWYgaXQgd2Fzbid0IGhhbHRlZCBmaXJzdC4gaW4gZmFjdCBzb21lIGRldmljZXMKKwkgKiAobGlrZSBzb21lIGlibWNhbSBtb2RlbCAxIHVuaXRzKSBzZWVtIHRvIGV4cGVjdCBob3N0cyB0byBtYWtlCisJICogdGhpcyByZXF1ZXN0IGZvciBpc28gZW5kcG9pbnRzLCB3aGljaCBjYW4ndCBoYWx0IQorCSAqLworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQlVU0JfUkVRX0NMRUFSX0ZFQVRVUkUsIFVTQl9SRUNJUF9FTkRQT0lOVCwKKwkJVVNCX0VORFBPSU5UX0hBTFQsIGVuZHAsIE5VTEwsIDAsCisJCVVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKworCS8qIGRvbid0IHVuLWhhbHQgb3IgZm9yY2UgdG8gREFUQTAgZXhjZXB0IG9uIHN1Y2Nlc3MgKi8KKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCS8qIE5PVEU6ICBzZWVtcyBsaWtlIE1pY3Jvc29mdCBhbmQgQXBwbGUgZG9uJ3QgYm90aGVyIHZlcmlmeWluZworCSAqIHRoZSBjbGVhciAidG9vayIsIHNvIHNvbWUgZGV2aWNlcyBjb3VsZCBsb2NrIHVwIGlmIHlvdSBjaGVjay4uLgorCSAqIHN1Y2ggYXMgdGhlIEhhZ2l3YXJhIEZsYXNoR2F0ZSBEVUFMLiAgU28gd2Ugd29uJ3QgYm90aGVyLgorCSAqCisJICogTk9URTogIG1ha2Ugc3VyZSB0aGUgbG9naWMgaGVyZSBkb2Vzbid0IGRpdmVyZ2UgbXVjaCBmcm9tCisJICogdGhlIGNvcHkgaW4gdXNiLXN0b3JhZ2UsIGZvciBhcyBsb25nIGFzIHdlIG5lZWQgdHdvIGNvcGllcy4KKwkgKi8KKworCS8qIHRvZ2dsZSB3YXMgcmVzZXQgYnkgdGhlIGNsZWFyICovCisJdXNiX3NldHRvZ2dsZShkZXYsIHVzYl9waXBlZW5kcG9pbnQocGlwZSksIHVzYl9waXBlb3V0KHBpcGUpLCAwKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHVzYl9kaXNhYmxlX2VuZHBvaW50IC0tIERpc2FibGUgYW4gZW5kcG9pbnQgYnkgYWRkcmVzcworICogQGRldjogdGhlIGRldmljZSB3aG9zZSBlbmRwb2ludCBpcyBiZWluZyBkaXNhYmxlZAorICogQGVwYWRkcjogdGhlIGVuZHBvaW50J3MgYWRkcmVzcy4gIEVuZHBvaW50IG51bWJlciBmb3Igb3V0cHV0LAorICoJZW5kcG9pbnQgbnVtYmVyICsgVVNCX0RJUl9JTiBmb3IgaW5wdXQKKyAqCisgKiBEZWFsbG9jYXRlcyBoY2QvaGFyZHdhcmUgc3RhdGUgZm9yIHRoaXMgZW5kcG9pbnQgLi4uIGFuZCBudWtlcyBhbGwKKyAqIHBlbmRpbmcgdXJicy4KKyAqCisgKiBJZiB0aGUgSENEIGhhc24ndCByZWdpc3RlcmVkIGEgZGlzYWJsZSgpIGZ1bmN0aW9uLCB0aGlzIHNldHMgdGhlCisgKiBlbmRwb2ludCdzIG1heHBhY2tldCBzaXplIHRvIDAgdG8gcHJldmVudCBmdXJ0aGVyIHN1Ym1pc3Npb25zLgorICovCit2b2lkIHVzYl9kaXNhYmxlX2VuZHBvaW50KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlcGFkZHIpCit7CisJdW5zaWduZWQgaW50IGVwbnVtID0gZXBhZGRyICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLOworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuOworCisJaWYgKHVzYl9lbmRwb2ludF9vdXQoZXBhZGRyKSkgeworCQllcCA9IGRldi0+ZXBfb3V0W2VwbnVtXTsKKwkJZGV2LT5lcF9vdXRbZXBudW1dID0gTlVMTDsKKwl9IGVsc2UgeworCQllcCA9IGRldi0+ZXBfaW5bZXBudW1dOworCQlkZXYtPmVwX2luW2VwbnVtXSA9IE5VTEw7CisJfQorCWlmIChlcCAmJiBkZXYtPmJ1cyAmJiBkZXYtPmJ1cy0+b3AgJiYgZGV2LT5idXMtPm9wLT5kaXNhYmxlKQorCQlkZXYtPmJ1cy0+b3AtPmRpc2FibGUoZGV2LCBlcCk7Cit9CisKKy8qKgorICogdXNiX2Rpc2FibGVfaW50ZXJmYWNlIC0tIERpc2FibGUgYWxsIGVuZHBvaW50cyBmb3IgYW4gaW50ZXJmYWNlCisgKiBAZGV2OiB0aGUgZGV2aWNlIHdob3NlIGludGVyZmFjZSBpcyBiZWluZyBkaXNhYmxlZAorICogQGludGY6IHBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSBkZXNjcmlwdG9yCisgKgorICogRGlzYWJsZXMgYWxsIHRoZSBlbmRwb2ludHMgZm9yIHRoZSBpbnRlcmZhY2UncyBjdXJyZW50IGFsdHNldHRpbmcuCisgKi8KK3ZvaWQgdXNiX2Rpc2FibGVfaW50ZXJmYWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdCA9IGludGYtPmN1cl9hbHRzZXR0aW5nOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGFsdC0+ZGVzYy5iTnVtRW5kcG9pbnRzOyArK2kpIHsKKwkJdXNiX2Rpc2FibGVfZW5kcG9pbnQoZGV2LAorCQkJCWFsdC0+ZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKKwl9Cit9CisKKy8qCisgKiB1c2JfZGlzYWJsZV9kZXZpY2UgLSBEaXNhYmxlIGFsbCB0aGUgZW5kcG9pbnRzIGZvciBhIFVTQiBkZXZpY2UKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugd2hvc2UgZW5kcG9pbnRzIGFyZSBiZWluZyBkaXNhYmxlZAorICogQHNraXBfZXAwOiAwIHRvIGRpc2FibGUgZW5kcG9pbnQgMCwgMSB0byBza2lwIGl0LgorICoKKyAqIERpc2FibGVzIGFsbCB0aGUgZGV2aWNlJ3MgZW5kcG9pbnRzLCBwb3RlbnRpYWxseSBpbmNsdWRpbmcgZW5kcG9pbnQgMC4KKyAqIERlYWxsb2NhdGVzIGhjZC9oYXJkd2FyZSBzdGF0ZSBmb3IgdGhlIGVuZHBvaW50cyAobnVraW5nIGFsbCBvciBtb3N0CisgKiBwZW5kaW5nIHVyYnMpIGFuZCB1c2Jjb3JlIHN0YXRlIGZvciB0aGUgaW50ZXJmYWNlcywgc28gdGhhdCB1c2Jjb3JlCisgKiBtdXN0IHVzYl9zZXRfY29uZmlndXJhdGlvbigpIGJlZm9yZSBhbnkgaW50ZXJmYWNlcyBjb3VsZCBiZSB1c2VkLgorICovCit2b2lkIHVzYl9kaXNhYmxlX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgc2tpcF9lcDApCit7CisJaW50IGk7CisKKwlkZXZfZGJnKCZkZXYtPmRldiwgIiVzIG51a2luZyAlcyBVUkJzXG4iLCBfX0ZVTkNUSU9OX18sCisJCQlza2lwX2VwMCA/ICJub24tZXAwIiA6ICJhbGwiKTsKKwlmb3IgKGkgPSBza2lwX2VwMDsgaSA8IDE2OyArK2kpIHsKKwkJdXNiX2Rpc2FibGVfZW5kcG9pbnQoZGV2LCBpKTsKKwkJdXNiX2Rpc2FibGVfZW5kcG9pbnQoZGV2LCBpICsgVVNCX0RJUl9JTik7CisJfQorCWRldi0+dG9nZ2xlWzBdID0gZGV2LT50b2dnbGVbMV0gPSAwOworCisJLyogZ2V0dGluZyByaWQgb2YgaW50ZXJmYWNlcyB3aWxsIGRpc2Nvbm5lY3QKKwkgKiBhbnkgZHJpdmVycyBib3VuZCB0byB0aGVtIChhIGtleSBzaWRlIGVmZmVjdCkKKwkgKi8KKwlpZiAoZGV2LT5hY3Rjb25maWcpIHsKKwkJZm9yIChpID0gMDsgaSA8IGRldi0+YWN0Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOyBpKyspIHsKKwkJCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSppbnRlcmZhY2U7CisKKwkJCS8qIHJlbW92ZSB0aGlzIGludGVyZmFjZSAqLworCQkJaW50ZXJmYWNlID0gZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVtpXTsKKwkJCWRldl9kYmcgKCZkZXYtPmRldiwgInVucmVnaXN0ZXJpbmcgaW50ZXJmYWNlICVzXG4iLAorCQkJCWludGVyZmFjZS0+ZGV2LmJ1c19pZCk7CisJCQl1c2JfcmVtb3ZlX3N5c2ZzX2ludGZfZmlsZXMoaW50ZXJmYWNlKTsKKwkJCWtmcmVlKGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPnN0cmluZyk7CisJCQlpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5zdHJpbmcgPSBOVUxMOworCQkJZGV2aWNlX2RlbCAoJmludGVyZmFjZS0+ZGV2KTsKKwkJfQorCisJCS8qIE5vdyB0aGF0IHRoZSBpbnRlcmZhY2VzIGFyZSB1bmJvdW5kLCBub2JvZHkgc2hvdWxkCisJCSAqIHRyeSB0byBhY2Nlc3MgdGhlbS4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKSB7CisJCQlwdXRfZGV2aWNlICgmZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVtpXS0+ZGV2KTsKKwkJCWRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbaV0gPSBOVUxMOworCQl9CisJCWRldi0+YWN0Y29uZmlnID0gTlVMTDsKKwkJaWYgKGRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX0NPTkZJR1VSRUQpCisJCQl1c2Jfc2V0X2RldmljZV9zdGF0ZShkZXYsIFVTQl9TVEFURV9BRERSRVNTKTsKKwl9Cit9CisKKworLyoKKyAqIHVzYl9lbmFibGVfZW5kcG9pbnQgLSBFbmFibGUgYW4gZW5kcG9pbnQgZm9yIFVTQiBjb21tdW5pY2F0aW9ucworICogQGRldjogdGhlIGRldmljZSB3aG9zZSBpbnRlcmZhY2UgaXMgYmVpbmcgZW5hYmxlZAorICogQGVwOiB0aGUgZW5kcG9pbnQKKyAqCisgKiBSZXNldHMgdGhlIGVuZHBvaW50IHRvZ2dsZSwgYW5kIHNldHMgZGV2LT5lcF97aW4sb3V0fSBwb2ludGVycy4KKyAqIEZvciBjb250cm9sIGVuZHBvaW50cywgYm90aCB0aGUgaW5wdXQgYW5kIG91dHB1dCBzaWRlcyBhcmUgaGFuZGxlZC4KKyAqLworc3RhdGljIHZvaWQKK3VzYl9lbmFibGVfZW5kcG9pbnQoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCkKK3sKKwl1bnNpZ25lZCBpbnQgZXBhZGRyID0gZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzczsKKwl1bnNpZ25lZCBpbnQgZXBudW0gPSBlcGFkZHIgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0s7CisJaW50IGlzX2NvbnRyb2w7CisKKwlpc19jb250cm9sID0gKChlcC0+ZGVzYy5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKKwkJCT09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpOworCWlmICh1c2JfZW5kcG9pbnRfb3V0KGVwYWRkcikgfHwgaXNfY29udHJvbCkgeworCQl1c2Jfc2V0dG9nZ2xlKGRldiwgZXBudW0sIDEsIDApOworCQlkZXYtPmVwX291dFtlcG51bV0gPSBlcDsKKwl9CisJaWYgKCF1c2JfZW5kcG9pbnRfb3V0KGVwYWRkcikgfHwgaXNfY29udHJvbCkgeworCQl1c2Jfc2V0dG9nZ2xlKGRldiwgZXBudW0sIDAsIDApOworCQlkZXYtPmVwX2luW2VwbnVtXSA9IGVwOworCX0KK30KKworLyoKKyAqIHVzYl9lbmFibGVfaW50ZXJmYWNlIC0gRW5hYmxlIGFsbCB0aGUgZW5kcG9pbnRzIGZvciBhbiBpbnRlcmZhY2UKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugd2hvc2UgaW50ZXJmYWNlIGlzIGJlaW5nIGVuYWJsZWQKKyAqIEBpbnRmOiBwb2ludGVyIHRvIHRoZSBpbnRlcmZhY2UgZGVzY3JpcHRvcgorICoKKyAqIEVuYWJsZXMgYWxsIHRoZSBlbmRwb2ludHMgZm9yIHRoZSBpbnRlcmZhY2UncyBjdXJyZW50IGFsdHNldHRpbmcuCisgKi8KK3N0YXRpYyB2b2lkIHVzYl9lbmFibGVfaW50ZXJmYWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdCA9IGludGYtPmN1cl9hbHRzZXR0aW5nOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGFsdC0+ZGVzYy5iTnVtRW5kcG9pbnRzOyArK2kpCisJCXVzYl9lbmFibGVfZW5kcG9pbnQoZGV2LCAmYWx0LT5lbmRwb2ludFtpXSk7Cit9CisKKy8qKgorICogdXNiX3NldF9pbnRlcmZhY2UgLSBNYWtlcyBhIHBhcnRpY3VsYXIgYWx0ZXJuYXRlIHNldHRpbmcgYmUgY3VycmVudAorICogQGRldjogdGhlIGRldmljZSB3aG9zZSBpbnRlcmZhY2UgaXMgYmVpbmcgdXBkYXRlZAorICogQGludGVyZmFjZTogdGhlIGludGVyZmFjZSBiZWluZyB1cGRhdGVkCisgKiBAYWx0ZXJuYXRlOiB0aGUgc2V0dGluZyBiZWluZyBjaG9zZW4uCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0ICgpCisgKgorICogVGhpcyBpcyB1c2VkIHRvIGVuYWJsZSBkYXRhIHRyYW5zZmVycyBvbiBpbnRlcmZhY2VzIHRoYXQgbWF5IG5vdAorICogYmUgZW5hYmxlZCBieSBkZWZhdWx0LiAgTm90IGFsbCBkZXZpY2VzIHN1cHBvcnQgc3VjaCBjb25maWd1cmFiaWxpdHkuCisgKiBPbmx5IHRoZSBkcml2ZXIgYm91bmQgdG8gYW4gaW50ZXJmYWNlIG1heSBjaGFuZ2UgaXRzIHNldHRpbmcuCisgKgorICogV2l0aGluIGFueSBnaXZlbiBjb25maWd1cmF0aW9uLCBlYWNoIGludGVyZmFjZSBtYXkgaGF2ZSBzZXZlcmFsCisgKiBhbHRlcm5hdGl2ZSBzZXR0aW5ncy4gIFRoZXNlIGFyZSBvZnRlbiB1c2VkIHRvIGNvbnRyb2wgbGV2ZWxzIG9mCisgKiBiYW5kd2lkdGggY29uc3VtcHRpb24uICBGb3IgZXhhbXBsZSwgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgYSBoaWdoCisgKiBzcGVlZCBpbnRlcnJ1cHQgZW5kcG9pbnQgbWF5IG5vdCBzZW5kIG1vcmUgdGhhbiA2NCBieXRlcyBwZXIgbWljcm9mcmFtZSwKKyAqIHdoaWxlIGludGVycnVwdCB0cmFuc2ZlcnMgb2YgdXAgdG8gM0tCeXRlcyBwZXIgbWljcm9mcmFtZSBhcmUgbGVnYWwuCisgKiBBbHNvLCBpc29jaHJvbm91cyBlbmRwb2ludHMgbWF5IG5ldmVyIGJlIHBhcnQgb2YgYW4KKyAqIGludGVyZmFjZSdzIGRlZmF1bHQgc2V0dGluZy4gIFRvIGFjY2VzcyBzdWNoIGJhbmR3aWR0aCwgYWx0ZXJuYXRlCisgKiBpbnRlcmZhY2Ugc2V0dGluZ3MgbXVzdCBiZSBtYWRlIGN1cnJlbnQuCisgKgorICogTm90ZSB0aGF0IGluIHRoZSBMaW51eCBVU0Igc3Vic3lzdGVtLCBiYW5kd2lkdGggYXNzb2NpYXRlZCB3aXRoCisgKiBhbiBlbmRwb2ludCBpbiBhIGdpdmVuIGFsdGVybmF0ZSBzZXR0aW5nIGlzIG5vdCByZXNlcnZlZCB1bnRpbCBhbiBVUkIKKyAqIGlzIHN1Ym1pdHRlZCB0aGF0IG5lZWRzIHRoYXQgYmFuZHdpZHRoLiAgU29tZSBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcworICogYWxsb2NhdGUgYmFuZHdpZHRoIGVhcmx5LCB3aGVuIGEgY29uZmlndXJhdGlvbiBpcyBjaG9zZW4uCisgKgorICogVGhpcyBjYWxsIGlzIHN5bmNocm9ub3VzLCBhbmQgbWF5IG5vdCBiZSB1c2VkIGluIGFuIGludGVycnVwdCBjb250ZXh0LgorICogQWxzbywgZHJpdmVycyBtdXN0IG5vdCBjaGFuZ2UgYWx0c2V0dGluZ3Mgd2hpbGUgdXJicyBhcmUgc2NoZWR1bGVkIGZvcgorICogZW5kcG9pbnRzIGluIHRoYXQgaW50ZXJmYWNlOyBhbGwgc3VjaCB1cmJzIG11c3QgZmlyc3QgYmUgY29tcGxldGVkCisgKiAocGVyaGFwcyBmb3JjZWQgYnkgdW5saW5raW5nKS4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3IgZWxzZSB0aGUgc3RhdHVzIGNvZGUgcmV0dXJuZWQgYnkgdGhlCisgKiB1bmRlcmx5aW5nIHVzYl9jb250cm9sX21zZygpIGNhbGwuCisgKi8KK2ludCB1c2Jfc2V0X2ludGVyZmFjZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgaW50ZXJmYWNlLCBpbnQgYWx0ZXJuYXRlKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQ7CisJaW50IHJldDsKKwlpbnQgbWFudWFsID0gMDsKKworCWlmIChkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpCisJCXJldHVybiAtRUhPU1RVTlJFQUNIOworCisJaWZhY2UgPSB1c2JfaWZudW1fdG9faWYoZGV2LCBpbnRlcmZhY2UpOworCWlmICghaWZhY2UpIHsKKwkJZGV2X2RiZygmZGV2LT5kZXYsICJzZWxlY3RpbmcgaW52YWxpZCBpbnRlcmZhY2UgJWRcbiIsCisJCQlpbnRlcmZhY2UpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlhbHQgPSB1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcoaWZhY2UsIGFsdGVybmF0ZSk7CisJaWYgKCFhbHQpIHsKKwkJd2Fybigic2VsZWN0aW5nIGludmFsaWQgYWx0c2V0dGluZyAlZCIsIGFsdGVybmF0ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJCSAgIFVTQl9SRVFfU0VUX0lOVEVSRkFDRSwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCQkgICBhbHRlcm5hdGUsIGludGVyZmFjZSwgTlVMTCwgMCwgNTAwMCk7CisKKwkvKiA5LjQuMTAgc2F5cyBkZXZpY2VzIGRvbid0IG5lZWQgdGhpcyBhbmQgYXJlIGZyZWUgdG8gU1RBTEwgdGhlCisJICogcmVxdWVzdCBpZiB0aGUgaW50ZXJmYWNlIG9ubHkgaGFzIG9uZSBhbHRlcm5hdGUgc2V0dGluZy4KKwkgKi8KKwlpZiAocmV0ID09IC1FUElQRSAmJiBpZmFjZS0+bnVtX2FsdHNldHRpbmcgPT0gMSkgeworCQlkZXZfZGJnKCZkZXYtPmRldiwKKwkJCSJtYW51YWwgc2V0X2ludGVyZmFjZSBmb3IgaWZhY2UgJWQsIGFsdCAlZFxuIiwKKwkJCWludGVyZmFjZSwgYWx0ZXJuYXRlKTsKKwkJbWFudWFsID0gMTsKKwl9IGVsc2UgaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBGSVhNRSBkcml2ZXJzIHNob3VsZG4ndCBuZWVkIHRvIHJlcGxpY2F0ZS9idWdmaXggdGhlIGxvZ2ljIGhlcmUKKwkgKiB3aGVuIHRoZXkgaW1wbGVtZW50IGFzeW5jIG9yIGVhc2lseS1raWxsYWJsZSB2ZXJzaW9ucyBvZiB0aGlzIG9yCisJICogb3RoZXIgInNob3VsZC1iZS1pbnRlcm5hbCIgZnVuY3Rpb25zIChsaWtlIGNsZWFyX2hhbHQpLgorCSAqIHNob3VsZCBoY2QrdXNiY29yZSBwb3N0cHJvY2VzcyBjb250cm9sIHJlcXVlc3RzPworCSAqLworCisJLyogcHJldmVudCBzdWJtaXNzaW9ucyB1c2luZyBwcmV2aW91cyBlbmRwb2ludCBzZXR0aW5ncyAqLworCXVzYl9kaXNhYmxlX2ludGVyZmFjZShkZXYsIGlmYWNlKTsKKworCS8qIDkuMS4xLjUgc2F5czoKKwkgKgorCSAqCUNvbmZpZ3VyaW5nIGEgZGV2aWNlIG9yIGNoYW5naW5nIGFuIGFsdGVybmF0ZSBzZXR0aW5nCisJICoJY2F1c2VzIGFsbCBvZiB0aGUgc3RhdHVzIGFuZCBjb25maWd1cmF0aW9uIHZhbHVlcworCSAqCWFzc29jaWF0ZWQgd2l0aCBlbmRwb2ludHMgaW4gdGhlIGFmZmVjdGVkIGludGVyZmFjZXMgdG8KKwkgKgliZSBzZXQgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuIFRoaXMgaW5jbHVkZXMgc2V0dGluZworCSAqCXRoZSBkYXRhIHRvZ2dsZSBvZiBhbnkgZW5kcG9pbnQgdXNpbmcgZGF0YSB0b2dnbGVzIHRvCisJICoJdGhlIHZhbHVlIERBVEEwLgorCSAqCisJICogU29tZSBkZXZpY2VzIHRha2UgdGhpcyB0b28gbGl0ZXJhbGx5IGFuZCBkb24ndCByZXNldCB0aGUgZGF0YQorCSAqIHRvZ2dsZXMgaWYgdGhlIG5ldyBhbHRzZXR0aW5nIGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lICh0aGUKKwkgKiBjb21tYW5kIGlzbid0ICJjaGFuZ2luZyIgYW4gYWx0ZXJuYXRlIHNldHRpbmcpLiAgV2Ugd2lsbCBtYW51YWxseQorCSAqIHJlc2V0IHRoZSB0b2dnbGVzIHdoZW4gdGhlIG5ldyBhbmQgb2xkIGFsdHNldHRpbmdzIGFyZSB0aGUgc2FtZS4KKwkgKiBNb3N0IGRldmljZXMgd29uJ3QgbmVlZCB0aGlzLCBidXQgZm9ydHVuYXRlbHkgaXQgZG9lc24ndCBoYXBwZW4KKwkgKiBvZnRlbi4KKwkgKi8KKwlpZiAoaWZhY2UtPmN1cl9hbHRzZXR0aW5nID09IGFsdCkKKwkJbWFudWFsID0gMTsKKwlpZmFjZS0+Y3VyX2FsdHNldHRpbmcgPSBhbHQ7CisKKwkvKiBJZiB0aGUgaW50ZXJmYWNlIG9ubHkgaGFzIG9uZSBhbHRzZXR0aW5nIGFuZCB0aGUgZGV2aWNlIGRpZG4ndAorCSAqIGFjY2VwdCB0aGUgcmVxdWVzdCAob3Igd2hlbmV2ZXIgdGhlIG9sZCBhbHRzZXR0aW5nIGlzIHRoZSBzYW1lCisJICogYXMgdGhlIG5ldyBvbmUpLCB3ZSBhdHRlbXB0IHRvIGNhcnJ5IG91dCB0aGUgZXF1aXZhbGVudCBhY3Rpb24KKwkgKiBieSBtYW51YWxseSBjbGVhcmluZyB0aGUgSEFMVCBmZWF0dXJlIGZvciBlYWNoIGVuZHBvaW50IGluIHRoZQorCSAqIG5ldyBhbHRzZXR0aW5nLgorCSAqLworCWlmIChtYW51YWwpIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IGFsdC0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBpKyspIHsKKwkJCXVuc2lnbmVkIGludCBlcGFkZHIgPQorCQkJCWFsdC0+ZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCQkJdW5zaWduZWQgaW50IHBpcGUgPQorCV9fY3JlYXRlX3BpcGUoZGV2LCBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0sgJiBlcGFkZHIpCisJfCAodXNiX2VuZHBvaW50X291dChlcGFkZHIpID8gVVNCX0RJUl9PVVQgOiBVU0JfRElSX0lOKTsKKworCQkJdXNiX2NsZWFyX2hhbHQoZGV2LCBwaXBlKTsKKwkJfQorCX0KKworCS8qIDkuMS4xLjU6IHJlc2V0IHRvZ2dsZXMgZm9yIGFsbCBlbmRwb2ludHMgaW4gdGhlIG5ldyBhbHRzZXR0aW5nCisJICoKKwkgKiBOb3RlOgorCSAqIERlc3BpdGUgRVAwIGlzIGFsd2F5cyBwcmVzZW50IGluIGFsbCBpbnRlcmZhY2VzL0FTLCB0aGUgbGlzdCBvZgorCSAqIGVuZHBvaW50cyBmcm9tIHRoZSBkZXNjcmlwdG9yIGRvZXMgbm90IGNvbnRhaW4gRVAwLiBEdWUgdG8gaXRzCisJICogb21uaXByZXNlbmNlIG9uZSBtaWdodCBleHBlY3QgRVAwIGJlaW5nIGNvbnNpZGVyZWQgImFmZmVjdGVkIiBieQorCSAqIGFueSBTZXRJbnRlcmZhY2UgcmVxdWVzdCBhbmQgaGVuY2UgYXNzdW1lIHRvZ2dsZXMgbmVlZCB0byBiZSByZXNldC4KKwkgKiBIb3dldmVyLCBFUDAgdG9nZ2xlcyBhcmUgcmUtc3luY2VkIGZvciBldmVyeSBpbmRpdmlkdWFsIHRyYW5zZmVyCisJICogZHVyaW5nIHRoZSBTRVRVUCBzdGFnZSAtIGhlbmNlIEVQMCB0b2dnbGVzIGFyZSAiZG9uJ3QgY2FyZSIgaGVyZS4KKwkgKiAoTGlrZXdpc2UsIEVQMCBuZXZlciAiaGFsdHMiIG9uIHdlbGwgZGVzaWduZWQgZGV2aWNlcy4pCisJICovCisJdXNiX2VuYWJsZV9pbnRlcmZhY2UoZGV2LCBpZmFjZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB1c2JfcmVzZXRfY29uZmlndXJhdGlvbiAtIGxpZ2h0d2VpZ2h0IGRldmljZSByZXNldAorICogQGRldjogdGhlIGRldmljZSB3aG9zZSBjb25maWd1cmF0aW9uIGlzIGJlaW5nIHJlc2V0CisgKgorICogVGhpcyBpc3N1ZXMgYSBzdGFuZGFyZCBTRVRfQ09ORklHVVJBVElPTiByZXF1ZXN0IHRvIHRoZSBkZXZpY2UgdXNpbmcKKyAqIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uICBUaGUgZWZmZWN0IGlzIHRvIHJlc2V0IG1vc3QgVVNCLXJlbGF0ZWQKKyAqIHN0YXRlIGluIHRoZSBkZXZpY2UsIGluY2x1ZGluZyBpbnRlcmZhY2UgYWx0c2V0dGluZ3MgKHJlc2V0IHRvIHplcm8pLAorICogZW5kcG9pbnQgaGFsdHMgKGNsZWFyZWQpLCBhbmQgZGF0YSB0b2dnbGUgKG9ubHkgZm9yIGJ1bGsgYW5kIGludGVycnVwdAorICogZW5kcG9pbnRzKS4gIE90aGVyIHVzYmNvcmUgc3RhdGUgaXMgdW5jaGFuZ2VkLCBpbmNsdWRpbmcgYmluZGluZ3Mgb2YKKyAqIHVzYiBkZXZpY2UgZHJpdmVycyB0byBpbnRlcmZhY2VzLgorICoKKyAqIEJlY2F1c2UgdGhpcyBhZmZlY3RzIG11bHRpcGxlIGludGVyZmFjZXMsIGF2b2lkIHVzaW5nIHRoaXMgd2l0aCBjb21wb3NpdGUKKyAqIChtdWx0aS1pbnRlcmZhY2UpIGRldmljZXMuICBJbnN0ZWFkLCB0aGUgZHJpdmVyIGZvciBlYWNoIGludGVyZmFjZSBtYXkKKyAqIHVzZSB1c2Jfc2V0X2ludGVyZmFjZSgpIG9uIHRoZSBpbnRlcmZhY2VzIGl0IGNsYWltcy4gIFJlc2V0dGluZyB0aGUgd2hvbGUKKyAqIGNvbmZpZ3VyYXRpb24gd291bGQgYWZmZWN0IG90aGVyIGRyaXZlcnMnIGludGVyZmFjZXMuCisgKgorICogVGhlIGNhbGxlciBtdXN0IG93biB0aGUgZGV2aWNlIGxvY2suCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCitpbnQgdXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24oc3RydWN0IHVzYl9kZXZpY2UgKmRldikKK3sKKwlpbnQJCQlpLCByZXR2YWw7CisJc3RydWN0IHVzYl9ob3N0X2NvbmZpZwkqY29uZmlnOworCisJaWYgKGRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKKwkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CisKKwkvKiBjYWxsZXIgbXVzdCBoYXZlIGxvY2tlZCB0aGUgZGV2aWNlIGFuZCBtdXN0IG93bgorCSAqIHRoZSB1c2IgYnVzIHJlYWRsb2NrIChzbyBkcml2ZXIgYmluZGluZ3MgYXJlIHN0YWJsZSk7CisJICogY2FsbHMgZHVyaW5nIHByb2JlKCkgYXJlIGZpbmUKKwkgKi8KKworCWZvciAoaSA9IDE7IGkgPCAxNjsgKytpKSB7CisJCXVzYl9kaXNhYmxlX2VuZHBvaW50KGRldiwgaSk7CisJCXVzYl9kaXNhYmxlX2VuZHBvaW50KGRldiwgaSArIFVTQl9ESVJfSU4pOworCX0KKworCWNvbmZpZyA9IGRldi0+YWN0Y29uZmlnOworCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTiwgMCwKKwkJCWNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlLCAwLAorCQkJTlVMTCwgMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCXVzYl9zZXRfZGV2aWNlX3N0YXRlKGRldiwgVVNCX1NUQVRFX0FERFJFU1MpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWRldi0+dG9nZ2xlWzBdID0gZGV2LT50b2dnbGVbMV0gPSAwOworCisJLyogcmUtaW5pdCBoYy9oY2QgaW50ZXJmYWNlL2VuZHBvaW50IHN0YXRlICovCisJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKSB7CisJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gY29uZmlnLT5pbnRlcmZhY2VbaV07CisJCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdDsKKworCQlhbHQgPSB1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcoaW50ZiwgMCk7CisKKwkJLyogTm8gYWx0c2V0dGluZyAwPyAgV2UnbGwgYXNzdW1lIHRoZSBmaXJzdCBhbHRzZXR0aW5nLgorCQkgKiBXZSBjb3VsZCB1c2UgYSBHZXRJbnRlcmZhY2UgY2FsbCwgYnV0IGlmIGEgZGV2aWNlIGlzCisJCSAqIHNvIG5vbi1jb21wbGlhbnQgdGhhdCBpdCBkb2Vzbid0IGhhdmUgYWx0c2V0dGluZyAwCisJCSAqIHRoZW4gSSB3b3VsZG4ndCB0cnVzdCBpdHMgcmVwbHkgYW55d2F5LgorCQkgKi8KKwkJaWYgKCFhbHQpCisJCQlhbHQgPSAmaW50Zi0+YWx0c2V0dGluZ1swXTsKKworCQlpbnRmLT5jdXJfYWx0c2V0dGluZyA9IGFsdDsKKwkJdXNiX2VuYWJsZV9pbnRlcmZhY2UoZGV2LCBpbnRmKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfaW50ZXJmYWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9jYWNoZSAqaW50ZmMgPQorCQkJYWx0c2V0dGluZ190b191c2JfaW50ZXJmYWNlX2NhY2hlKGludGYtPmFsdHNldHRpbmcpOworCisJa3JlZl9wdXQoJmludGZjLT5yZWYsIHVzYl9yZWxlYXNlX2ludGVyZmFjZV9jYWNoZSk7CisJa2ZyZWUoaW50Zik7Cit9CisKKy8qCisgKiB1c2Jfc2V0X2NvbmZpZ3VyYXRpb24gLSBNYWtlcyBhIHBhcnRpY3VsYXIgZGV2aWNlIHNldHRpbmcgYmUgY3VycmVudAorICogQGRldjogdGhlIGRldmljZSB3aG9zZSBjb25maWd1cmF0aW9uIGlzIGJlaW5nIHVwZGF0ZWQKKyAqIEBjb25maWd1cmF0aW9uOiB0aGUgY29uZmlndXJhdGlvbiBiZWluZyBjaG9zZW4uCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCksIGNhbGxlciBvd25zIHRoZSBkZXZpY2UgbG9jaworICoKKyAqIFRoaXMgaXMgdXNlZCB0byBlbmFibGUgbm9uLWRlZmF1bHQgZGV2aWNlIG1vZGVzLiAgTm90IGFsbCBkZXZpY2VzCisgKiB1c2UgdGhpcyBraW5kIG9mIGNvbmZpZ3VyYWJpbGl0eTsgbWFueSBkZXZpY2VzIG9ubHkgaGF2ZSBvbmUKKyAqIGNvbmZpZ3VyYXRpb24uCisgKgorICogVVNCIGRldmljZSBjb25maWd1cmF0aW9ucyBtYXkgYWZmZWN0IExpbnV4IGludGVyb3BlcmFiaWxpdHksCisgKiBwb3dlciBjb25zdW1wdGlvbiBhbmQgdGhlIGZ1bmN0aW9uYWxpdHkgYXZhaWxhYmxlLiAgRm9yIGV4YW1wbGUsCisgKiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIGxpbWl0ZWQgdG8gdXNpbmcgMTAwbUEgb2YgYnVzIHBvd2VyLAorICogc28gdGhhdCB3aGVuIGNlcnRhaW4gZGV2aWNlIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZXMgbW9yZSBwb3dlciwKKyAqIGFuZCB0aGUgZGV2aWNlIGlzIGJ1cyBwb3dlcmVkLCB0aGF0IGZ1bmN0aW9uYWxpdHkgc2hvdWxkIGJlIGluIHNvbWUKKyAqIG5vbi1kZWZhdWx0IGRldmljZSBjb25maWd1cmF0aW9uLiAgT3RoZXIgZGV2aWNlIG1vZGVzIG1heSBhbHNvIGJlCisgKiByZWZsZWN0ZWQgYXMgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzdWNoIGFzIHdoZXRoZXIgdHdvIElTRE4KKyAqIGNoYW5uZWxzIGFyZSBhdmFpbGFibGUgaW5kZXBlbmRlbnRseTsgYW5kIGNob29zaW5nIGJldHdlZW4gb3BlbgorICogc3RhbmRhcmQgZGV2aWNlIHByb3RvY29scyAobGlrZSBDREMpIG9yIHByb3ByaWV0YXJ5IG9uZXMuCisgKgorICogTm90ZSB0aGF0IFVTQiBoYXMgYW4gYWRkaXRpb25hbCBsZXZlbCBvZiBkZXZpY2UgY29uZmlndXJhYmlsaXR5LAorICogYXNzb2NpYXRlZCB3aXRoIGludGVyZmFjZXMuICBUaGF0IGNvbmZpZ3VyYWJpbGl0eSBpcyBhY2Nlc3NlZCB1c2luZworICogdXNiX3NldF9pbnRlcmZhY2UoKS4KKyAqCisgKiBUaGlzIGNhbGwgaXMgc3luY2hyb25vdXMuIFRoZSBjYWxsaW5nIGNvbnRleHQgbXVzdCBiZSBhYmxlIHRvIHNsZWVwLAorICogbXVzdCBvd24gdGhlIGRldmljZSBsb2NrLCBhbmQgbXVzdCBub3QgaG9sZCB0aGUgZHJpdmVyIG1vZGVsJ3MgVVNCCisgKiBidXMgcndzZW07IHVzYiBkZXZpY2UgZHJpdmVyIHByb2JlKCkgbWV0aG9kcyBjYW5ub3QgdXNlIHRoaXMgcm91dGluZS4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3IgZWxzZSB0aGUgc3RhdHVzIGNvZGUgcmV0dXJuZWQgYnkgdGhlCisgKiB1bmRlcmx5aW5nIGNhbGwgdGhhdCBmYWlsZWQuICBPbiBzdWNjZXNmdWwgY29tcGxldGlvbiwgZWFjaCBpbnRlcmZhY2UKKyAqIGluIHRoZSBvcmlnaW5hbCBkZXZpY2UgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBkZXN0cm95ZWQsIGFuZCBlYWNoIG9uZQorICogaW4gdGhlIG5ldyBjb25maWd1cmF0aW9uIGhhcyBiZWVuIHByb2JlZCBieSBhbGwgcmVsZXZhbnQgdXNiIGRldmljZQorICogZHJpdmVycyBjdXJyZW50bHkga25vd24gdG8gdGhlIGtlcm5lbC4KKyAqLworaW50IHVzYl9zZXRfY29uZmlndXJhdGlvbihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgY29uZmlndXJhdGlvbikKK3sKKwlpbnQgaSwgcmV0OworCXN0cnVjdCB1c2JfaG9zdF9jb25maWcgKmNwID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqKm5ld19pbnRlcmZhY2VzID0gTlVMTDsKKwlpbnQgbiwgbmludGY7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9uczsgaSsrKSB7CisJCWlmIChkZXYtPmNvbmZpZ1tpXS5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUgPT0gY29uZmlndXJhdGlvbikgeworCQkJY3AgPSAmZGV2LT5jb25maWdbaV07CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoKCFjcCAmJiBjb25maWd1cmF0aW9uICE9IDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFRoZSBVU0Igc3BlYyBzYXlzIGNvbmZpZ3VyYXRpb24gMCBtZWFucyB1bmNvbmZpZ3VyZWQuCisJICogQnV0IGlmIGEgZGV2aWNlIGluY2x1ZGVzIGEgY29uZmlndXJhdGlvbiBudW1iZXJlZCAwLAorCSAqIHdlIHdpbGwgYWNjZXB0IGl0IGFzIGEgY29ycmVjdGx5IGNvbmZpZ3VyZWQgc3RhdGUuCisJICovCisJaWYgKGNwICYmIGNvbmZpZ3VyYXRpb24gPT0gMCkKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiY29uZmlnIDAgZGVzY3JpcHRvcj8/XG4iKTsKKworCWlmIChkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpCisJCXJldHVybiAtRUhPU1RVTlJFQUNIOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBuZXcgaW50ZXJmYWNlcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZSwKKwkgKiBzbyB0aGF0IGlmIHdlIHJ1biBvdXQgdGhlbiBub3RoaW5nIHdpbGwgaGF2ZSBjaGFuZ2VkLiAqLworCW4gPSBuaW50ZiA9IDA7CisJaWYgKGNwKSB7CisJCW5pbnRmID0gY3AtPmRlc2MuYk51bUludGVyZmFjZXM7CisJCW5ld19pbnRlcmZhY2VzID0ga21hbGxvYyhuaW50ZiAqIHNpemVvZigqbmV3X2ludGVyZmFjZXMpLAorCQkJCUdGUF9LRVJORUwpOworCQlpZiAoIW5ld19pbnRlcmZhY2VzKSB7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIk91dCBvZiBtZW1vcnkiKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJZm9yICg7IG4gPCBuaW50ZjsgKytuKSB7CisJCQluZXdfaW50ZXJmYWNlc1tuXSA9IGttYWxsb2MoCisJCQkJCXNpemVvZihzdHJ1Y3QgdXNiX2ludGVyZmFjZSksCisJCQkJCUdGUF9LRVJORUwpOworCQkJaWYgKCFuZXdfaW50ZXJmYWNlc1tuXSkgeworCQkJCWRldl9lcnIoJmRldi0+ZGV2LCAiT3V0IG9mIG1lbW9yeSIpOworCQkJCXJldCA9IC1FTk9NRU07CitmcmVlX2ludGVyZmFjZXM6CisJCQkJd2hpbGUgKC0tbiA+PSAwKQorCQkJCQlrZnJlZShuZXdfaW50ZXJmYWNlc1tuXSk7CisJCQkJa2ZyZWUobmV3X2ludGVyZmFjZXMpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0KKwl9CisKKwkvKiBpZiBpdCdzIGFscmVhZHkgY29uZmlndXJlZCwgY2xlYXIgb3V0IG9sZCBzdGF0ZSBmaXJzdC4KKwkgKiBnZXR0aW5nIHJpZCBvZiBvbGQgaW50ZXJmYWNlcyBtZWFucyB1bmJpbmRpbmcgdGhlaXIgZHJpdmVycy4KKwkgKi8KKwlpZiAoZGV2LT5zdGF0ZSAhPSBVU0JfU1RBVEVfQUREUkVTUykKKwkJdXNiX2Rpc2FibGVfZGV2aWNlIChkZXYsIDEpOwkvLyBTa2lwIGVwMAorCisJaWYgKChyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCVVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04sIDAsIGNvbmZpZ3VyYXRpb24sIDAsCisJCQlOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCkpIDwgMCkKKwkJZ290byBmcmVlX2ludGVyZmFjZXM7CisKKwlkZXYtPmFjdGNvbmZpZyA9IGNwOworCWlmICghY3ApCisJCXVzYl9zZXRfZGV2aWNlX3N0YXRlKGRldiwgVVNCX1NUQVRFX0FERFJFU1MpOworCWVsc2UgeworCQl1c2Jfc2V0X2RldmljZV9zdGF0ZShkZXYsIFVTQl9TVEFURV9DT05GSUdVUkVEKTsKKworCQkvKiBJbml0aWFsaXplIHRoZSBuZXcgaW50ZXJmYWNlIHN0cnVjdHVyZXMgYW5kIHRoZQorCQkgKiBoYy9oY2QvdXNiY29yZSBpbnRlcmZhY2UvZW5kcG9pbnQgc3RhdGUuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgbmludGY7ICsraSkgeworCQkJc3RydWN0IHVzYl9pbnRlcmZhY2VfY2FjaGUgKmludGZjOworCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisJCQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQ7CisKKwkJCWNwLT5pbnRlcmZhY2VbaV0gPSBpbnRmID0gbmV3X2ludGVyZmFjZXNbaV07CisJCQltZW1zZXQoaW50ZiwgMCwgc2l6ZW9mKCppbnRmKSk7CisJCQlpbnRmYyA9IGNwLT5pbnRmX2NhY2hlW2ldOworCQkJaW50Zi0+YWx0c2V0dGluZyA9IGludGZjLT5hbHRzZXR0aW5nOworCQkJaW50Zi0+bnVtX2FsdHNldHRpbmcgPSBpbnRmYy0+bnVtX2FsdHNldHRpbmc7CisJCQlrcmVmX2dldCgmaW50ZmMtPnJlZik7CisKKwkJCWFsdCA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpbnRmLCAwKTsKKworCQkJLyogTm8gYWx0c2V0dGluZyAwPyAgV2UnbGwgYXNzdW1lIHRoZSBmaXJzdCBhbHRzZXR0aW5nLgorCQkJICogV2UgY291bGQgdXNlIGEgR2V0SW50ZXJmYWNlIGNhbGwsIGJ1dCBpZiBhIGRldmljZSBpcworCQkJICogc28gbm9uLWNvbXBsaWFudCB0aGF0IGl0IGRvZXNuJ3QgaGF2ZSBhbHRzZXR0aW5nIDAKKwkJCSAqIHRoZW4gSSB3b3VsZG4ndCB0cnVzdCBpdHMgcmVwbHkgYW55d2F5LgorCQkJICovCisJCQlpZiAoIWFsdCkKKwkJCQlhbHQgPSAmaW50Zi0+YWx0c2V0dGluZ1swXTsKKworCQkJaW50Zi0+Y3VyX2FsdHNldHRpbmcgPSBhbHQ7CisJCQl1c2JfZW5hYmxlX2ludGVyZmFjZShkZXYsIGludGYpOworCQkJaW50Zi0+ZGV2LnBhcmVudCA9ICZkZXYtPmRldjsKKwkJCWludGYtPmRldi5kcml2ZXIgPSBOVUxMOworCQkJaW50Zi0+ZGV2LmJ1cyA9ICZ1c2JfYnVzX3R5cGU7CisJCQlpbnRmLT5kZXYuZG1hX21hc2sgPSBkZXYtPmRldi5kbWFfbWFzazsKKwkJCWludGYtPmRldi5yZWxlYXNlID0gcmVsZWFzZV9pbnRlcmZhY2U7CisJCQlkZXZpY2VfaW5pdGlhbGl6ZSAoJmludGYtPmRldik7CisJCQlzcHJpbnRmICgmaW50Zi0+ZGV2LmJ1c19pZFswXSwgIiVkLSVzOiVkLiVkIiwKKwkJCQkgZGV2LT5idXMtPmJ1c251bSwgZGV2LT5kZXZwYXRoLAorCQkJCSBjb25maWd1cmF0aW9uLAorCQkJCSBhbHQtPmRlc2MuYkludGVyZmFjZU51bWJlcik7CisJCX0KKwkJa2ZyZWUobmV3X2ludGVyZmFjZXMpOworCisJCWlmICgoY3AtPmRlc2MuaUNvbmZpZ3VyYXRpb24pICYmCisJCSAgICAoY3AtPnN0cmluZyA9PSBOVUxMKSkgeworCQkJY3AtPnN0cmluZyA9IGttYWxsb2MoMjU2LCBHRlBfS0VSTkVMKTsKKwkJCWlmIChjcC0+c3RyaW5nKQorCQkJCXVzYl9zdHJpbmcoZGV2LCBjcC0+ZGVzYy5pQ29uZmlndXJhdGlvbiwgY3AtPnN0cmluZywgMjU2KTsKKwkJfQorCisJCS8qIE5vdyB0aGF0IGFsbCB0aGUgaW50ZXJmYWNlcyBhcmUgc2V0IHVwLCByZWdpc3RlciB0aGVtCisJCSAqIHRvIHRyaWdnZXIgYmluZGluZyBvZiBkcml2ZXJzIHRvIGludGVyZmFjZXMuICBwcm9iZSgpCisJCSAqIHJvdXRpbmVzIG1heSBpbnN0YWxsIGRpZmZlcmVudCBhbHRzZXR0aW5ncyBhbmQgbWF5CisJCSAqIGNsYWltKCkgYW55IGludGVyZmFjZXMgbm90IHlldCBib3VuZC4gIE1hbnkgY2xhc3MgZHJpdmVycworCQkgKiBuZWVkIHRoYXQ6IENEQywgYXVkaW8sIHZpZGVvLCBldGMuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgbmludGY7ICsraSkgeworCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSBjcC0+aW50ZXJmYWNlW2ldOworCQkJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqZGVzYzsKKworCQkJZGVzYyA9ICZpbnRmLT5hbHRzZXR0aW5nIFswXS5kZXNjOworCQkJZGV2X2RiZyAoJmRldi0+ZGV2LAorCQkJCSJhZGRpbmcgJXMgKGNvbmZpZyAjJWQsIGludGVyZmFjZSAlZClcbiIsCisJCQkJaW50Zi0+ZGV2LmJ1c19pZCwgY29uZmlndXJhdGlvbiwKKwkJCQlkZXNjLT5iSW50ZXJmYWNlTnVtYmVyKTsKKwkJCXJldCA9IGRldmljZV9hZGQgKCZpbnRmLT5kZXYpOworCQkJaWYgKHJldCAhPSAwKSB7CisJCQkJZGV2X2VycigmZGV2LT5kZXYsCisJCQkJCSJkZXZpY2VfYWRkKCVzKSAtLT4gJWRcbiIsCisJCQkJCWludGYtPmRldi5idXNfaWQsCisJCQkJCXJldCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmlJbnRlcmZhY2UpICYmCisJCQkgICAgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5zdHJpbmcgPT0gTlVMTCkpIHsKKwkJCQlpbnRmLT5jdXJfYWx0c2V0dGluZy0+c3RyaW5nID0ga21hbGxvYygyNTYsIEdGUF9LRVJORUwpOworCQkJCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+c3RyaW5nKQorCQkJCQl1c2Jfc3RyaW5nKGRldiwgaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuaUludGVyZmFjZSwKKwkJCQkJCSAgIGludGYtPmN1cl9hbHRzZXR0aW5nLT5zdHJpbmcsIDI1Nik7CisJCQl9CisJCQl1c2JfY3JlYXRlX3N5c2ZzX2ludGZfZmlsZXMgKGludGYpOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLy8gc3luY2hyb25vdXMgcmVxdWVzdCBjb21wbGV0aW9uIG1vZGVsCitFWFBPUlRfU1lNQk9MKHVzYl9jb250cm9sX21zZyk7CitFWFBPUlRfU1lNQk9MKHVzYl9idWxrX21zZyk7CisKK0VYUE9SVF9TWU1CT0wodXNiX3NnX2luaXQpOworRVhQT1JUX1NZTUJPTCh1c2Jfc2dfY2FuY2VsKTsKK0VYUE9SVF9TWU1CT0wodXNiX3NnX3dhaXQpOworCisvLyBzeW5jaHJvbm91cyBjb250cm9sIG1lc3NhZ2UgY29udmVuaWVuY2Ugcm91dGluZXMKK0VYUE9SVF9TWU1CT0wodXNiX2dldF9kZXNjcmlwdG9yKTsKK0VYUE9SVF9TWU1CT0wodXNiX2dldF9zdGF0dXMpOworRVhQT1JUX1NZTUJPTCh1c2JfZ2V0X3N0cmluZyk7CitFWFBPUlRfU1lNQk9MKHVzYl9zdHJpbmcpOworCisvLyBzeW5jaHJvbm91cyBjYWxscyB0aGF0IGFsc28gbWFpbnRhaW4gdXNiY29yZSBzdGF0ZQorRVhQT1JUX1NZTUJPTCh1c2JfY2xlYXJfaGFsdCk7CitFWFBPUlRfU1lNQk9MKHVzYl9yZXNldF9jb25maWd1cmF0aW9uKTsKK0VYUE9SVF9TWU1CT0wodXNiX3NldF9pbnRlcmZhY2UpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL290Z193aGl0ZWxpc3QuaCBiL2RyaXZlcnMvdXNiL2NvcmUvb3RnX3doaXRlbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyN2E1YTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL290Z193aGl0ZWxpc3QuaApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIGRyaXZlcnMvdXNiL2NvcmUvb3RnX3doaXRlbGlzdC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFRleGFzIEluc3RydW1lbnRzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvKgorICogVGhpcyBPVEcgV2hpdGVsaXN0IGlzIHRoZSBPVEcgIlRhcmdldGVkIFBlcmlwaGVyYWwgTGlzdCIuICBJdCBzaG91bGQKKyAqIG1vc3RseSB1c2Ugb2YgVVNCX0RFVklDRSgpIG9yIFVTQl9ERVZJQ0VfVkVSKCkgZW50cmllcy4uCisgKgorICogWU9VIF9TSE9VTERfIENIQU5HRSBUSElTIExJU1QgVE8gTUFUQ0ggWU9VUiBQUk9EVUNUIEFORCBJVFMgVEVTVElORyEKKyAqLyAKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHdoaXRlbGlzdF90YWJsZSBbXSA9IHsKKworLyogaHVicyBhcmUgb3B0aW9uYWwgaW4gT1RHLCBidXQgdmVyeSBoYW5keSAuLi4gKi8KK3sgVVNCX0RFVklDRV9JTkZPKFVTQl9DTEFTU19IVUIsIDAsIDApLCB9LAoreyBVU0JfREVWSUNFX0lORk8oVVNCX0NMQVNTX0hVQiwgMCwgMSksIH0sCisKKyNpZmRlZglDT05GSUdfVVNCX1BSSU5URVIJCS8qIGlnbm9yaW5nIG5vbnN0YXRpYyBsaW5rYWdlISAqLworLyogRklYTUUgYWN0dWFsbHksIHByaW50ZXJzIGFyZSBOT1Qgc3VwcG9zZWQgdG8gdXNlIGRldmljZSBjbGFzc2VzOworICogdGhleSdyZSBzdXBwb3NlZCB0byB1c2UgaW50ZXJmYWNlIGNsYXNzZXMuLi4KKyAqLworeyBVU0JfREVWSUNFX0lORk8oNywgMSwgMSkgfSwKK3sgVVNCX0RFVklDRV9JTkZPKDcsIDEsIDIpIH0sCit7IFVTQl9ERVZJQ0VfSU5GTyg3LCAxLCAzKSB9LAorI2VuZGlmCisKKyNpZmRlZglDT05GSUdfVVNCX0NEQ0VUSEVSCisvKiBMaW51eC1VU0IgQ0RDIEV0aGVybmV0IGdhZGdldCAqLworeyBVU0JfREVWSUNFKDB4MDUyNSwgMHhhNGExKSwgfSwKKy8qIExpbnV4LVVTQiBDREMgRXRoZXJuZXQgKyBSTkRJUyBnYWRnZXQgKi8KK3sgVVNCX0RFVklDRSgweDA1MjUsIDB4YTRhMiksIH0sCisjZW5kaWYKKworI2lmCWRlZmluZWQoQ09ORklHX1VTQl9URVNUKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfVEVTVF9NT0RVTEUpCisvKiBnYWRnZXQgemVybywgZm9yIHRlc3RpbmcgKi8KK3sgVVNCX0RFVklDRSgweDA1MjUsIDB4YTRhMCksIH0sCisjZW5kaWYKKworeyB9CS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitzdGF0aWMgaW50IGlzX3RhcmdldGVkKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVzYl9kZXZpY2VfaWQJKmlkID0gd2hpdGVsaXN0X3RhYmxlOworCisJLyogcG9zc2libGUgaW4gZGV2ZWxvcGVyIGNvbmZpZ3Mgb25seSEgKi8KKwlpZiAoIWRldi0+YnVzLT5vdGdfcG9ydCkKKwkJcmV0dXJuIDE7CisKKwkvKiBITlAgdGVzdCBkZXZpY2UgaXMgX25ldmVyXyB0YXJnZXRlZCAoc2VlIE9URyBzcGVjIDYuNi42KSAqLworCWlmICgobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSAweDFhMGEgJiYgCisJICAgICBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSAweGJhZGQpKQorCQlyZXR1cm4gMDsKKworCS8qIE5PVEU6IGNhbid0IHVzZSB1c2JfbWF0Y2hfaWQoKSBzaW5jZSBpbnRlcmZhY2UgY2FjaGVzCisJICogYXJlbid0IHNldCB1cCB5ZXQuIHRoaXMgaXMgY3V0L3Bhc3RlIGZyb20gdGhhdCBjb2RlLgorCSAqLworCWZvciAoaWQgPSB3aGl0ZWxpc3RfdGFibGU7IGlkLT5tYXRjaF9mbGFnczsgaWQrKykgeworCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfVkVORE9SKSAmJgorCQkgICAgaWQtPmlkVmVuZG9yICE9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikpCisJCQljb250aW51ZTsKKworCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfUFJPRFVDVCkgJiYKKwkJICAgIGlkLT5pZFByb2R1Y3QgIT0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpCisJCQljb250aW51ZTsKKworCQkvKiBObyBuZWVkIHRvIHRlc3QgaWQtPmJjZERldmljZV9sbyAhPSAwLCBzaW5jZSAwIGlzIG5ldmVyCisJCSAgIGdyZWF0ZXIgdGhhbiBhbnkgdW5zaWduZWQgbnVtYmVyLiAqLworCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0xPKSAmJgorCQkgICAgKGlkLT5iY2REZXZpY2VfbG8gPiBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSkpCisJCQljb250aW51ZTsKKworCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0hJKSAmJgorCQkgICAgKGlkLT5iY2REZXZpY2VfaGkgPCBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSkpCisJCQljb250aW51ZTsKKworCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0NMQVNTKSAmJgorCQkgICAgKGlkLT5iRGV2aWNlQ2xhc3MgIT0gZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcykpCisJCQljb250aW51ZTsKKworCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX1NVQkNMQVNTKSAmJgorCQkgICAgKGlkLT5iRGV2aWNlU3ViQ2xhc3MhPSBkZXYtPmRlc2NyaXB0b3IuYkRldmljZVN1YkNsYXNzKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfUFJPVE9DT0wpICYmCisJCSAgICAoaWQtPmJEZXZpY2VQcm90b2NvbCAhPSBkZXYtPmRlc2NyaXB0b3IuYkRldmljZVByb3RvY29sKSkKKwkJCWNvbnRpbnVlOworCisJCXJldHVybiAxOworCX0KKworCS8qIGFkZCBvdGhlciBtYXRjaCBjcml0ZXJpYSBoZXJlIC4uLiAqLworCisKKwkvKiBPVEcgTUVTU0FHRTogcmVwb3J0IGVycm9ycyBoZXJlLCBjdXN0b21pemUgdG8gbWF0Y2ggeW91ciBwcm9kdWN0ICovCisJZGV2X2VycigmZGV2LT5kZXYsICJkZXZpY2UgdiUwNHggcCUwNHggaXMgbm90IHN1cHBvcnRlZFxuIiwKKwkJbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkJbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOworI2lmZGVmCUNPTkZJR19VU0JfT1RHX1dISVRFTElTVAorCXJldHVybiAwOworI2Vsc2UKKwlyZXR1cm4gMTsKKyNlbmRpZgorfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5YjNiZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYwpAQCAtMCwwICsxLDMxOCBAQAorLyoKKyAqIGRyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYworICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMiBEYXZpZCBCcm93bmVsbAorICogKEMpIENvcHlyaWdodCAyMDAyLDIwMDQgR3JlZyBLcm9haC1IYXJ0bWFuCisgKiAoQykgQ29weXJpZ2h0IDIwMDIsMjAwNCBJQk0gQ29ycC4KKyAqCisgKiBBbGwgb2YgdGhlIHN5c2ZzIGZpbGUgYXR0cmlidXRlcyBmb3IgdXNiIGRldmljZXMgYW5kIGludGVyZmFjZXMuCisgKgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworCSNkZWZpbmUgREVCVUcKKyNlbHNlCisJI3VuZGVmIERFQlVHCisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgInVzYi5oIgorCisvKiBBY3RpdmUgY29uZmlndXJhdGlvbiBmaWVsZHMgKi8KKyNkZWZpbmUgdXNiX2FjdGNvbmZpZ19zaG93KGZpZWxkLCBtdWx0aXBsaWVyLCBmb3JtYXRfc3RyaW5nKQkJXAorc3RhdGljIHNzaXplX3QgIHNob3dfIyNmaWVsZCAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwkJCQkJXAorCXN0cnVjdCB1c2JfaG9zdF9jb25maWcgKmFjdGNvbmZpZzsJCQkJXAorCQkJCQkJCQkJXAorCXVkZXYgPSB0b191c2JfZGV2aWNlIChkZXYpOwkJCQkJXAorCWFjdGNvbmZpZyA9IHVkZXYtPmFjdGNvbmZpZzsJCQkJCVwKKwlpZiAoYWN0Y29uZmlnKQkJCQkJCQlcCisJCXJldHVybiBzcHJpbnRmIChidWYsIGZvcm1hdF9zdHJpbmcsCQkJXAorCQkJCWFjdGNvbmZpZy0+ZGVzYy5maWVsZCAqIG11bHRpcGxpZXIpOwlcCisJZWxzZQkJCQkJCQkJXAorCQlyZXR1cm4gMDsJCQkJCQlcCit9CQkJCQkJCQkJXAorCisjZGVmaW5lIHVzYl9hY3Rjb25maWdfYXR0cihmaWVsZCwgbXVsdGlwbGllciwgZm9ybWF0X3N0cmluZykJCVwKK3VzYl9hY3Rjb25maWdfc2hvdyhmaWVsZCwgbXVsdGlwbGllciwgZm9ybWF0X3N0cmluZykJCQlcCitzdGF0aWMgREVWSUNFX0FUVFIoZmllbGQsIFNfSVJVR08sIHNob3dfIyNmaWVsZCwgTlVMTCk7CisKK3VzYl9hY3Rjb25maWdfYXR0ciAoYk51bUludGVyZmFjZXMsIDEsICIlMmRcbiIpCit1c2JfYWN0Y29uZmlnX2F0dHIgKGJtQXR0cmlidXRlcywgMSwgIiUyeFxuIikKK3VzYl9hY3Rjb25maWdfYXR0ciAoYk1heFBvd2VyLCAyLCAiJTNkbUFcbiIpCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfY29uZmlndXJhdGlvbl9zdHJpbmcoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqYWN0Y29uZmlnOworCWludCBsZW47CisKKwl1ZGV2ID0gdG9fdXNiX2RldmljZSAoZGV2KTsKKwlhY3Rjb25maWcgPSB1ZGV2LT5hY3Rjb25maWc7CisJaWYgKCghYWN0Y29uZmlnKSB8fCAoIWFjdGNvbmZpZy0+c3RyaW5nKSkKKwkJcmV0dXJuIDA7CisJbGVuID0gc3ByaW50ZihidWYsIGFjdGNvbmZpZy0+c3RyaW5nLCBQQUdFX1NJWkUpOworCWlmIChsZW4gPCAwKQorCQlyZXR1cm4gMDsKKwlidWZbbGVuXSA9ICdcbic7CisJYnVmW2xlbisxXSA9IDA7CisJcmV0dXJuIGxlbisxOworfQorc3RhdGljIERFVklDRV9BVFRSKGNvbmZpZ3VyYXRpb24sIFNfSVJVR08sIHNob3dfY29uZmlndXJhdGlvbl9zdHJpbmcsIE5VTEwpOworCisvKiBjb25maWd1cmF0aW9uIHZhbHVlIGlzIGFsd2F5cyBwcmVzZW50LCBhbmQgci93ICovCit1c2JfYWN0Y29uZmlnX3Nob3coYkNvbmZpZ3VyYXRpb25WYWx1ZSwgMSwgIiV1XG4iKTsKKworc3RhdGljIHNzaXplX3QKK3NldF9iQ29uZmlndXJhdGlvblZhbHVlIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gdWRldiA9IHRvX3VzYl9kZXZpY2UgKGRldik7CisJaW50CQkJY29uZmlnLCB2YWx1ZTsKKworCWlmIChzc2NhbmYgKGJ1ZiwgIiV1IiwgJmNvbmZpZykgIT0gMSB8fCBjb25maWcgPiAyNTUpCisJCXJldHVybiAtRUlOVkFMOworCXVzYl9sb2NrX2RldmljZSh1ZGV2KTsKKwl2YWx1ZSA9IHVzYl9zZXRfY29uZmlndXJhdGlvbiAodWRldiwgY29uZmlnKTsKKwl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKKwlyZXR1cm4gKHZhbHVlIDwgMCkgPyB2YWx1ZSA6IGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoYkNvbmZpZ3VyYXRpb25WYWx1ZSwgU19JUlVHTyB8IFNfSVdVU1IsIAorCQlzaG93X2JDb25maWd1cmF0aW9uVmFsdWUsIHNldF9iQ29uZmlndXJhdGlvblZhbHVlKTsKKworLyogU3RyaW5nIGZpZWxkcyAqLworI2RlZmluZSB1c2Jfc3RyaW5nX2F0dHIobmFtZSkJCQkJCQlcCitzdGF0aWMgc3NpemVfdCAgc2hvd18jI25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwkJCQkJXAorCWludCBsZW47CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwl1ZGV2ID0gdG9fdXNiX2RldmljZSAoZGV2KTsJCQkJCVwKKwlsZW4gPSBzbnByaW50ZihidWYsIDI1NiwgIiVzIiwgdWRldi0+bmFtZSk7CQkJXAorCWlmIChsZW4gPCAwKQkJCQkJCQlcCisJCXJldHVybiAwOwkJCQkJCVwKKwlidWZbbGVuXSA9ICdcbic7CQkJCQkJXAorCWJ1ZltsZW4rMV0gPSAwOwkJCQkJCQlcCisJcmV0dXJuIGxlbisxOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfIyNuYW1lLCBOVUxMKTsKKwordXNiX3N0cmluZ19hdHRyKHByb2R1Y3QpOwordXNiX3N0cmluZ19hdHRyKG1hbnVmYWN0dXJlcik7Cit1c2Jfc3RyaW5nX2F0dHIoc2VyaWFsKTsKKworc3RhdGljIHNzaXplX3QKK3Nob3dfc3BlZWQgKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCWNoYXIgKnNwZWVkOworCisJdWRldiA9IHRvX3VzYl9kZXZpY2UgKGRldik7CisKKwlzd2l0Y2ggKHVkZXYtPnNwZWVkKSB7CisJY2FzZSBVU0JfU1BFRURfTE9XOgorCQlzcGVlZCA9ICIxLjUiOworCQlicmVhazsKKwljYXNlIFVTQl9TUEVFRF9VTktOT1dOOgorCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCXNwZWVkID0gIjEyIjsKKwkJYnJlYWs7CisJY2FzZSBVU0JfU1BFRURfSElHSDoKKwkJc3BlZWQgPSAiNDgwIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3BlZWQgPSAidW5rbm93biI7CisJfQorCXJldHVybiBzcHJpbnRmIChidWYsICIlc1xuIiwgc3BlZWQpOworfQorc3RhdGljIERFVklDRV9BVFRSKHNwZWVkLCBTX0lSVUdPLCBzaG93X3NwZWVkLCBOVUxMKTsKKworc3RhdGljIHNzaXplX3QKK3Nob3dfZGV2bnVtIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKworCXVkZXYgPSB0b191c2JfZGV2aWNlIChkZXYpOworCXJldHVybiBzcHJpbnRmIChidWYsICIlZFxuIiwgdWRldi0+ZGV2bnVtKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihkZXZudW0sIFNfSVJVR08sIHNob3dfZGV2bnVtLCBOVUxMKTsKKworc3RhdGljIHNzaXplX3QKK3Nob3dfdmVyc2lvbiAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJdTE2IGJjZFVTQjsKKworCXVkZXYgPSB0b191c2JfZGV2aWNlKGRldik7CisJYmNkVVNCID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5iY2RVU0IpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiUyeC4lMDJ4XG4iLCBiY2RVU0IgPj4gOCwgYmNkVVNCICYgMHhmZik7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIodmVyc2lvbiwgU19JUlVHTywgc2hvd192ZXJzaW9uLCBOVUxMKTsKKworc3RhdGljIHNzaXplX3QKK3Nob3dfbWF4Y2hpbGQgKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCisJdWRldiA9IHRvX3VzYl9kZXZpY2UgKGRldik7CisJcmV0dXJuIHNwcmludGYgKGJ1ZiwgIiVkXG4iLCB1ZGV2LT5tYXhjaGlsZCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobWF4Y2hpbGQsIFNfSVJVR08sIHNob3dfbWF4Y2hpbGQsIE5VTEwpOworCisvKiBEZXNjcmlwdG9yIGZpZWxkcyAqLworI2RlZmluZSB1c2JfZGVzY3JpcHRvcl9hdHRyX2xlMTYoZmllbGQsIGZvcm1hdF9zdHJpbmcpCQkJXAorc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKK3Nob3dfIyNmaWVsZCAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCQkJCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CQkJCQlcCisJCQkJCQkJCQlcCisJdWRldiA9IHRvX3VzYl9kZXZpY2UgKGRldik7CQkJCQlcCisJcmV0dXJuIHNwcmludGYgKGJ1ZiwgZm9ybWF0X3N0cmluZywgCQkJCVwKKwkJCWxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuZmllbGQpKTsJCVwKK30JCQkJCQkJCQlcCitzdGF0aWMgREVWSUNFX0FUVFIoZmllbGQsIFNfSVJVR08sIHNob3dfIyNmaWVsZCwgTlVMTCk7CisKK3VzYl9kZXNjcmlwdG9yX2F0dHJfbGUxNihpZFZlbmRvciwgIiUwNHhcbiIpCit1c2JfZGVzY3JpcHRvcl9hdHRyX2xlMTYoaWRQcm9kdWN0LCAiJTA0eFxuIikKK3VzYl9kZXNjcmlwdG9yX2F0dHJfbGUxNihiY2REZXZpY2UsICIlMDR4XG4iKQorCisjZGVmaW5lIHVzYl9kZXNjcmlwdG9yX2F0dHIoZmllbGQsIGZvcm1hdF9zdHJpbmcpCQkJXAorc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKK3Nob3dfIyNmaWVsZCAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCQkJCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CQkJCQlcCisJCQkJCQkJCQlcCisJdWRldiA9IHRvX3VzYl9kZXZpY2UgKGRldik7CQkJCQlcCisJcmV0dXJuIHNwcmludGYgKGJ1ZiwgZm9ybWF0X3N0cmluZywgdWRldi0+ZGVzY3JpcHRvci5maWVsZCk7CVwKK30JCQkJCQkJCQlcCitzdGF0aWMgREVWSUNFX0FUVFIoZmllbGQsIFNfSVJVR08sIHNob3dfIyNmaWVsZCwgTlVMTCk7CisKK3VzYl9kZXNjcmlwdG9yX2F0dHIgKGJEZXZpY2VDbGFzcywgIiUwMnhcbiIpCit1c2JfZGVzY3JpcHRvcl9hdHRyIChiRGV2aWNlU3ViQ2xhc3MsICIlMDJ4XG4iKQordXNiX2Rlc2NyaXB0b3JfYXR0ciAoYkRldmljZVByb3RvY29sLCAiJTAyeFxuIikKK3VzYl9kZXNjcmlwdG9yX2F0dHIgKGJOdW1Db25maWd1cmF0aW9ucywgIiVkXG4iKQorCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGV2X2F0dHJzW10gPSB7CisJLyogY3VycmVudCBjb25maWd1cmF0aW9uJ3MgYXR0cmlidXRlcyAqLworCSZkZXZfYXR0cl9iTnVtSW50ZXJmYWNlcy5hdHRyLAorCSZkZXZfYXR0cl9iQ29uZmlndXJhdGlvblZhbHVlLmF0dHIsCisJJmRldl9hdHRyX2JtQXR0cmlidXRlcy5hdHRyLAorCSZkZXZfYXR0cl9iTWF4UG93ZXIuYXR0ciwKKwkvKiBkZXZpY2UgYXR0cmlidXRlcyAqLworCSZkZXZfYXR0cl9pZFZlbmRvci5hdHRyLAorCSZkZXZfYXR0cl9pZFByb2R1Y3QuYXR0ciwKKwkmZGV2X2F0dHJfYmNkRGV2aWNlLmF0dHIsCisJJmRldl9hdHRyX2JEZXZpY2VDbGFzcy5hdHRyLAorCSZkZXZfYXR0cl9iRGV2aWNlU3ViQ2xhc3MuYXR0ciwKKwkmZGV2X2F0dHJfYkRldmljZVByb3RvY29sLmF0dHIsCisJJmRldl9hdHRyX2JOdW1Db25maWd1cmF0aW9ucy5hdHRyLAorCSZkZXZfYXR0cl9zcGVlZC5hdHRyLAorCSZkZXZfYXR0cl9kZXZudW0uYXR0ciwKKwkmZGV2X2F0dHJfdmVyc2lvbi5hdHRyLAorCSZkZXZfYXR0cl9tYXhjaGlsZC5hdHRyLAorCU5VTEwsCit9Oworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZGV2X2F0dHJfZ3JwID0geworCS5hdHRycyA9IGRldl9hdHRycywKK307CisKK3ZvaWQgdXNiX2NyZWF0ZV9zeXNmc19kZXZfZmlsZXMgKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1ZGV2LT5kZXY7CisKKwlzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJmRldl9hdHRyX2dycCk7CisKKwlpZiAodWRldi0+bWFudWZhY3R1cmVyKQorCQlkZXZpY2VfY3JlYXRlX2ZpbGUgKGRldiwgJmRldl9hdHRyX21hbnVmYWN0dXJlcik7CisJaWYgKHVkZXYtPnByb2R1Y3QpCisJCWRldmljZV9jcmVhdGVfZmlsZSAoZGV2LCAmZGV2X2F0dHJfcHJvZHVjdCk7CisJaWYgKHVkZXYtPnNlcmlhbCkKKwkJZGV2aWNlX2NyZWF0ZV9maWxlIChkZXYsICZkZXZfYXR0cl9zZXJpYWwpOworCWRldmljZV9jcmVhdGVfZmlsZSAoZGV2LCAmZGV2X2F0dHJfY29uZmlndXJhdGlvbik7Cit9CisKK3ZvaWQgdXNiX3JlbW92ZV9zeXNmc19kZXZfZmlsZXMgKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1ZGV2LT5kZXY7CisKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmRldl9hdHRyX2dycCk7CisKKwlpZiAodWRldi0+ZGVzY3JpcHRvci5pTWFudWZhY3R1cmVyKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWFudWZhY3R1cmVyKTsKKwlpZiAodWRldi0+ZGVzY3JpcHRvci5pUHJvZHVjdCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3Byb2R1Y3QpOworCWlmICh1ZGV2LT5kZXNjcmlwdG9yLmlTZXJpYWxOdW1iZXIpCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zZXJpYWwpOworCWRldmljZV9yZW1vdmVfZmlsZSAoZGV2LCAmZGV2X2F0dHJfY29uZmlndXJhdGlvbik7Cit9CisKKy8qIEludGVyZmFjZSBmaWVsZHMgKi8KKyNkZWZpbmUgdXNiX2ludGZfYXR0cihmaWVsZCwgZm9ybWF0X3N0cmluZykJCQkJXAorc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKK3Nob3dfIyNmaWVsZCAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCQkJCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlIChkZXYpOwkJXAorCQkJCQkJCQkJXAorCXJldHVybiBzcHJpbnRmIChidWYsIGZvcm1hdF9zdHJpbmcsIGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmZpZWxkKTsgXAorfQkJCQkJCQkJCVwKK3N0YXRpYyBERVZJQ0VfQVRUUihmaWVsZCwgU19JUlVHTywgc2hvd18jI2ZpZWxkLCBOVUxMKTsKKwordXNiX2ludGZfYXR0ciAoYkludGVyZmFjZU51bWJlciwgIiUwMnhcbiIpCit1c2JfaW50Zl9hdHRyIChiQWx0ZXJuYXRlU2V0dGluZywgIiUyZFxuIikKK3VzYl9pbnRmX2F0dHIgKGJOdW1FbmRwb2ludHMsICIlMDJ4XG4iKQordXNiX2ludGZfYXR0ciAoYkludGVyZmFjZUNsYXNzLCAiJTAyeFxuIikKK3VzYl9pbnRmX2F0dHIgKGJJbnRlcmZhY2VTdWJDbGFzcywgIiUwMnhcbiIpCit1c2JfaW50Zl9hdHRyIChiSW50ZXJmYWNlUHJvdG9jb2wsICIlMDJ4XG4iKQorCitzdGF0aWMgc3NpemVfdCBzaG93X2ludGVyZmFjZV9zdHJpbmcoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJaW50IGxlbjsKKworCWludGYgPSB0b191c2JfaW50ZXJmYWNlIChkZXYpOworCXVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpbnRmKTsKKwlsZW4gPSBzbnByaW50ZihidWYsIDI1NiwgIiVzIiwgaW50Zi0+Y3VyX2FsdHNldHRpbmctPnN0cmluZyk7CisJaWYgKGxlbiA8IDApCisJCXJldHVybiAwOworCWJ1ZltsZW5dID0gJ1xuJzsKKwlidWZbbGVuKzFdID0gMDsKKwlyZXR1cm4gbGVuKzE7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoaW50ZXJmYWNlLCBTX0lSVUdPLCBzaG93X2ludGVyZmFjZV9zdHJpbmcsIE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaW50Zl9hdHRyc1tdID0geworCSZkZXZfYXR0cl9iSW50ZXJmYWNlTnVtYmVyLmF0dHIsCisJJmRldl9hdHRyX2JBbHRlcm5hdGVTZXR0aW5nLmF0dHIsCisJJmRldl9hdHRyX2JOdW1FbmRwb2ludHMuYXR0ciwKKwkmZGV2X2F0dHJfYkludGVyZmFjZUNsYXNzLmF0dHIsCisJJmRldl9hdHRyX2JJbnRlcmZhY2VTdWJDbGFzcy5hdHRyLAorCSZkZXZfYXR0cl9iSW50ZXJmYWNlUHJvdG9jb2wuYXR0ciwKKwlOVUxMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGludGZfYXR0cl9ncnAgPSB7CisJLmF0dHJzID0gaW50Zl9hdHRycywKK307CisKK3ZvaWQgdXNiX2NyZWF0ZV9zeXNmc19pbnRmX2ZpbGVzIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzeXNmc19jcmVhdGVfZ3JvdXAoJmludGYtPmRldi5rb2JqLCAmaW50Zl9hdHRyX2dycCk7CisKKwlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPnN0cmluZykKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9pbnRlcmZhY2UpOworCQkKK30KKwordm9pZCB1c2JfcmVtb3ZlX3N5c2ZzX2ludGZfZmlsZXMgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN5c2ZzX3JlbW92ZV9ncm91cCgmaW50Zi0+ZGV2LmtvYmosICZpbnRmX2F0dHJfZ3JwKTsKKworCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+c3RyaW5nKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2ludGVyZmFjZSk7CisKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjODM4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jCkBAIC0wLDAgKzEsNTExIEBACisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKwkjZGVmaW5lIERFQlVHCisjZWxzZQorCSN1bmRlZiBERUJVRworI2VuZGlmCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAiaGNkLmgiCisKKyNkZWZpbmUgdG9fdXJiKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgdXJiLCBrcmVmKQorCitzdGF0aWMgdm9pZCB1cmJfZGVzdHJveShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgdXJiICp1cmIgPSB0b191cmIoa3JlZik7CisJa2ZyZWUodXJiKTsKK30KKworLyoqCisgKiB1c2JfaW5pdF91cmIgLSBpbml0aWFsaXplcyBhIHVyYiBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGJ5IGEgVVNCIGRyaXZlcgorICogQHVyYjogcG9pbnRlciB0byB0aGUgdXJiIHRvIGluaXRpYWxpemUKKyAqCisgKiBJbml0aWFsaXplcyBhIHVyYiBzbyB0aGF0IHRoZSBVU0Igc3Vic3lzdGVtIGNhbiB1c2UgaXQgcHJvcGVybHkuCisgKgorICogSWYgYSB1cmIgaXMgY3JlYXRlZCB3aXRoIGEgY2FsbCB0byB1c2JfYWxsb2NfdXJiKCkgaXQgaXMgbm90CisgKiBuZWNlc3NhcnkgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLiAgT25seSB1c2UgdGhpcyBpZiB5b3UgYWxsb2NhdGUgdGhlCisgKiBzcGFjZSBmb3IgYSBzdHJ1Y3QgdXJiIG9uIHlvdXIgb3duLiAgSWYgeW91IGNhbGwgdGhpcyBmdW5jdGlvbiwgYmUKKyAqIGNhcmVmdWwgd2hlbiBmcmVlaW5nIHRoZSBtZW1vcnkgZm9yIHlvdXIgdXJiIHRoYXQgaXQgaXMgbm8gbG9uZ2VyIGluCisgKiB1c2UgYnkgdGhlIFVTQiBjb3JlLgorICoKKyAqIE9ubHkgdXNlIHRoaXMgZnVuY3Rpb24gaWYgeW91IF9yZWFsbHlfIHVuZGVyc3RhbmQgd2hhdCB5b3UgYXJlIGRvaW5nLgorICovCit2b2lkIHVzYl9pbml0X3VyYihzdHJ1Y3QgdXJiICp1cmIpCit7CisJaWYgKHVyYikgeworCQltZW1zZXQodXJiLCAwLCBzaXplb2YoKnVyYikpOworCQlrcmVmX2luaXQoJnVyYi0+a3JlZik7CisJCXNwaW5fbG9ja19pbml0KCZ1cmItPmxvY2spOworCX0KK30KKworLyoqCisgKiB1c2JfYWxsb2NfdXJiIC0gY3JlYXRlcyBhIG5ldyB1cmIgZm9yIGEgVVNCIGRyaXZlciB0byB1c2UKKyAqIEBpc29fcGFja2V0czogbnVtYmVyIG9mIGlzbyBwYWNrZXRzIGZvciB0aGlzIHVyYgorICogQG1lbV9mbGFnczogdGhlIHR5cGUgb2YgbWVtb3J5IHRvIGFsbG9jYXRlLCBzZWUga21hbGxvYygpIGZvciBhIGxpc3Qgb2YKKyAqCXZhbGlkIG9wdGlvbnMgZm9yIHRoaXMuCisgKgorICogQ3JlYXRlcyBhbiB1cmIgZm9yIHRoZSBVU0IgZHJpdmVyIHRvIHVzZSwgaW5pdGlhbGl6ZXMgYSBmZXcgaW50ZXJuYWwKKyAqIHN0cnVjdHVyZXMsIGluY3JlbWVudGVzIHRoZSB1c2FnZSBjb3VudGVyLCBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gaXQuCisgKgorICogSWYgbm8gbWVtb3J5IGlzIGF2YWlsYWJsZSwgTlVMTCBpcyByZXR1cm5lZC4KKyAqCisgKiBJZiB0aGUgZHJpdmVyIHdhbnQgdG8gdXNlIHRoaXMgdXJiIGZvciBpbnRlcnJ1cHQsIGNvbnRyb2wsIG9yIGJ1bGsKKyAqIGVuZHBvaW50cywgcGFzcyAnMCcgYXMgdGhlIG51bWJlciBvZiBpc28gcGFja2V0cy4KKyAqCisgKiBUaGUgZHJpdmVyIG11c3QgY2FsbCB1c2JfZnJlZV91cmIoKSB3aGVuIGl0IGlzIGZpbmlzaGVkIHdpdGggdGhlIHVyYi4KKyAqLworc3RydWN0IHVyYiAqdXNiX2FsbG9jX3VyYihpbnQgaXNvX3BhY2tldHMsIGludCBtZW1fZmxhZ3MpCit7CisJc3RydWN0IHVyYiAqdXJiOworCisJdXJiID0gKHN0cnVjdCB1cmIgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXJiKSArIAorCQlpc29fcGFja2V0cyAqIHNpemVvZihzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciksCisJCW1lbV9mbGFncyk7CisJaWYgKCF1cmIpIHsKKwkJZXJyKCJhbGxvY191cmI6IGttYWxsb2MgZmFpbGVkIik7CisJCXJldHVybiBOVUxMOworCX0KKwl1c2JfaW5pdF91cmIodXJiKTsKKwlyZXR1cm4gdXJiOworfQorCisvKioKKyAqIHVzYl9mcmVlX3VyYiAtIGZyZWVzIHRoZSBtZW1vcnkgdXNlZCBieSBhIHVyYiB3aGVuIGFsbCB1c2VycyBvZiBpdCBhcmUgZmluaXNoZWQKKyAqIEB1cmI6IHBvaW50ZXIgdG8gdGhlIHVyYiB0byBmcmVlLCBtYXkgYmUgTlVMTAorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdoZW4gYSB1c2VyIG9mIGEgdXJiIGlzIGZpbmlzaGVkIHdpdGggaXQuICBXaGVuIHRoZSBsYXN0IHVzZXIKKyAqIG9mIHRoZSB1cmIgY2FsbHMgdGhpcyBmdW5jdGlvbiwgdGhlIG1lbW9yeSBvZiB0aGUgdXJiIGlzIGZyZWVkLgorICoKKyAqIE5vdGU6IFRoZSB0cmFuc2ZlciBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSB1cmIgaXMgbm90IGZyZWVkLCB0aGF0IG11c3QgYmUKKyAqIGRvbmUgZWxzZXdoZXJlLgorICovCit2b2lkIHVzYl9mcmVlX3VyYihzdHJ1Y3QgdXJiICp1cmIpCit7CisJaWYgKHVyYikKKwkJa3JlZl9wdXQoJnVyYi0+a3JlZiwgdXJiX2Rlc3Ryb3kpOworfQorCisvKioKKyAqIHVzYl9nZXRfdXJiIC0gaW5jcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSB1cmIKKyAqIEB1cmI6IHBvaW50ZXIgdG8gdGhlIHVyYiB0byBtb2RpZnksIG1heSBiZSBOVUxMCisgKgorICogVGhpcyBtdXN0IGJlICBjYWxsZWQgd2hlbmV2ZXIgYSB1cmIgaXMgdHJhbnNmZXJyZWQgZnJvbSBhIGRldmljZSBkcml2ZXIgdG8gYQorICogaG9zdCBjb250cm9sbGVyIGRyaXZlci4gIFRoaXMgYWxsb3dzIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgdG8gaGFwcGVuCisgKiBmb3IgdXJicy4KKyAqCisgKiBBIHBvaW50ZXIgdG8gdGhlIHVyYiB3aXRoIHRoZSBpbmNyZW1lbnRlZCByZWZlcmVuY2UgY291bnRlciBpcyByZXR1cm5lZC4KKyAqLworc3RydWN0IHVyYiAqIHVzYl9nZXRfdXJiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpZiAodXJiKQorCQlrcmVmX2dldCgmdXJiLT5rcmVmKTsKKwlyZXR1cm4gdXJiOworfQorCQkKKwkJCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIHVzYl9zdWJtaXRfdXJiIC0gaXNzdWUgYW4gYXN5bmNocm9ub3VzIHRyYW5zZmVyIHJlcXVlc3QgZm9yIGFuIGVuZHBvaW50CisgKiBAdXJiOiBwb2ludGVyIHRvIHRoZSB1cmIgZGVzY3JpYmluZyB0aGUgcmVxdWVzdAorICogQG1lbV9mbGFnczogdGhlIHR5cGUgb2YgbWVtb3J5IHRvIGFsbG9jYXRlLCBzZWUga21hbGxvYygpIGZvciBhIGxpc3QKKyAqCW9mIHZhbGlkIG9wdGlvbnMgZm9yIHRoaXMuCisgKgorICogVGhpcyBzdWJtaXRzIGEgdHJhbnNmZXIgcmVxdWVzdCwgYW5kIHRyYW5zZmVycyBjb250cm9sIG9mIHRoZSBVUkIKKyAqIGRlc2NyaWJpbmcgdGhhdCByZXF1ZXN0IHRvIHRoZSBVU0Igc3Vic3lzdGVtLiAgUmVxdWVzdCBjb21wbGV0aW9uIHdpbGwKKyAqIGJlIGluZGljYXRlZCBsYXRlciwgYXN5bmNocm9ub3VzbHksIGJ5IGNhbGxpbmcgdGhlIGNvbXBsZXRpb24gaGFuZGxlci4KKyAqIFRoZSB0aHJlZSB0eXBlcyBvZiBjb21wbGV0aW9uIGFyZSBzdWNjZXNzLCBlcnJvciwgYW5kIHVubGluaworICogKGEgc29mdHdhcmUtaW5kdWNlZCBmYXVsdCwgYWxzbyBjYWxsZWQgInJlcXVlc3QgY2FuY2VsYXRpb24iKS4gIAorICoKKyAqIFVSQnMgbWF5IGJlIHN1Ym1pdHRlZCBpbiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgaGF2ZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgdGhlIFVSQiBiZWZvcmUgc3VibWl0dGluZworICogaXQuICBGdW5jdGlvbnMgc3VjaCBhcyB1c2JfZmlsbF9idWxrX3VyYigpIGFuZCB1c2JfZmlsbF9jb250cm9sX3VyYigpIGFyZQorICogYXZhaWxhYmxlIHRvIGVuc3VyZSB0aGF0IG1vc3QgZmllbGRzIGFyZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQsIGZvcgorICogdGhlIHBhcnRpY3VsYXIga2luZCBvZiB0cmFuc2ZlciwgYWx0aG91Z2ggdGhleSB3aWxsIG5vdCBpbml0aWFsaXplCisgKiBhbnkgdHJhbnNmZXIgZmxhZ3MuCisgKgorICogU3VjY2Vzc2Z1bCBzdWJtaXNzaW9ucyByZXR1cm4gMDsgb3RoZXJ3aXNlIHRoaXMgcm91dGluZSByZXR1cm5zIGEKKyAqIG5lZ2F0aXZlIGVycm9yIG51bWJlci4gIElmIHRoZSBzdWJtaXNzaW9uIGlzIHN1Y2Nlc3NmdWwsIHRoZSBjb21wbGV0ZSgpCisgKiBjYWxsYmFjayBmcm9tIHRoZSBVUkIgd2lsbCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlLCB3aGVuIHRoZSBVU0IgY29yZSBhbmQKKyAqIEhvc3QgQ29udHJvbGxlciBEcml2ZXIgKEhDRCkgYXJlIGZpbmlzaGVkIHdpdGggdGhlIFVSQi4gIFdoZW4gdGhlIGNvbXBsZXRpb24KKyAqIGZ1bmN0aW9uIGlzIGNhbGxlZCwgY29udHJvbCBvZiB0aGUgVVJCIGlzIHJldHVybmVkIHRvIHRoZSBkZXZpY2UKKyAqIGRyaXZlciB3aGljaCBpc3N1ZWQgdGhlIHJlcXVlc3QuICBUaGUgY29tcGxldGlvbiBoYW5kbGVyIG1heSB0aGVuCisgKiBpbW1lZGlhdGVseSBmcmVlIG9yIHJldXNlIHRoYXQgVVJCLgorICoKKyAqIFdpdGggZmV3IGV4Y2VwdGlvbnMsIFVTQiBkZXZpY2UgZHJpdmVycyBzaG91bGQgbmV2ZXIgYWNjZXNzIFVSQiBmaWVsZHMKKyAqIHByb3ZpZGVkIGJ5IHVzYmNvcmUgb3IgdGhlIEhDRCB1bnRpbCBpdHMgY29tcGxldGUoKSBpcyBjYWxsZWQuCisgKiBUaGUgZXhjZXB0aW9ucyByZWxhdGUgdG8gcGVyaW9kaWMgdHJhbnNmZXIgc2NoZWR1bGluZy4gIEZvciBib3RoCisgKiBpbnRlcnJ1cHQgYW5kIGlzb2Nocm9ub3VzIHVyYnMsIGFzIHBhcnQgb2Ygc3VjY2Vzc2Z1bCBVUkIgc3VibWlzc2lvbgorICogdXJiLT5pbnRlcnZhbCBpcyBtb2RpZmllZCB0byByZWZsZWN0IHRoZSBhY3R1YWwgdHJhbnNmZXIgcGVyaW9kIHVzZWQKKyAqIChub3JtYWxseSBzb21lIHBvd2VyIG9mIHR3byB1bml0cykuICBBbmQgZm9yIGlzb2Nocm9ub3VzIHVyYnMsCisgKiB1cmItPnN0YXJ0X2ZyYW1lIGlzIG1vZGlmaWVkIHRvIHJlZmxlY3Qgd2hlbiB0aGUgVVJCJ3MgdHJhbnNmZXJzIHdlcmUKKyAqIHNjaGVkdWxlZCB0byBzdGFydC4gIE5vdCBhbGwgaXNvY2hyb25vdXMgdHJhbnNmZXIgc2NoZWR1bGluZyBwb2xpY2llcworICogd2lsbCB3b3JrLCBidXQgbW9zdCBob3N0IGNvbnRyb2xsZXIgZHJpdmVycyBzaG91bGQgZWFzaWx5IGhhbmRsZSBJU08KKyAqIHF1ZXVlcyBnb2luZyBmcm9tIG5vdyB1bnRpbCAxMC0yMDAgbXNlYyBpbnRvIHRoZSBmdXR1cmUuCisgKgorICogRm9yIGNvbnRyb2wgZW5kcG9pbnRzLCB0aGUgc3luY2hyb25vdXMgdXNiX2NvbnRyb2xfbXNnKCkgY2FsbCBpcworICogb2Z0ZW4gdXNlZCAoaW4gbm9uLWludGVycnVwdCBjb250ZXh0KSBpbnN0ZWFkIG9mIHRoaXMgY2FsbC4KKyAqIFRoYXQgaXMgb2Z0ZW4gdXNlZCB0aHJvdWdoIGNvbnZlbmllbmNlIHdyYXBwZXJzLCBmb3IgdGhlIHJlcXVlc3RzCisgKiB0aGF0IGFyZSBzdGFuZGFyZGl6ZWQgaW4gdGhlIFVTQiAyLjAgc3BlY2lmaWNhdGlvbi4gIEZvciBidWxrCisgKiBlbmRwb2ludHMsIGEgc3luY2hyb25vdXMgdXNiX2J1bGtfbXNnKCkgY2FsbCBpcyBhdmFpbGFibGUuCisgKgorICogUmVxdWVzdCBRdWV1aW5nOgorICoKKyAqIFVSQnMgbWF5IGJlIHN1Ym1pdHRlZCB0byBlbmRwb2ludHMgYmVmb3JlIHByZXZpb3VzIG9uZXMgY29tcGxldGUsIHRvCisgKiBtaW5pbWl6ZSB0aGUgaW1wYWN0IG9mIGludGVycnVwdCBsYXRlbmNpZXMgYW5kIHN5c3RlbSBvdmVyaGVhZCBvbiBkYXRhCisgKiB0aHJvdWdocHV0LiAgV2l0aCB0aGF0IHF1ZXVpbmcgcG9saWN5LCBhbiBlbmRwb2ludCdzIHF1ZXVlIHdvdWxkIG5ldmVyCisgKiBiZSBlbXB0eS4gIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNvbnRpbnVvdXMgaXNvY2hyb25vdXMgZGF0YSBzdHJlYW1zLAorICogYW5kIG1heSBhbHNvIGJlIHJlcXVpcmVkIGZvciBzb21lIGtpbmRzIG9mIGludGVycnVwdCB0cmFuc2ZlcnMuIFN1Y2gKKyAqIHF1ZXVpbmcgYWxzbyBtYXhpbWl6ZXMgYmFuZHdpZHRoIHV0aWxpemF0aW9uIGJ5IGxldHRpbmcgVVNCIGNvbnRyb2xsZXJzCisgKiBzdGFydCB3b3JrIG9uIGxhdGVyIHJlcXVlc3RzIGJlZm9yZSBkcml2ZXIgc29mdHdhcmUgaGFzIGZpbmlzaGVkIHRoZQorICogY29tcGxldGlvbiBwcm9jZXNzaW5nIGZvciBlYXJsaWVyIChzdWNjZXNzZnVsKSByZXF1ZXN0cy4KKyAqCisgKiBBcyBvZiBMaW51eCAyLjYsIGFsbCBVU0IgZW5kcG9pbnQgdHJhbnNmZXIgcXVldWVzIHN1cHBvcnQgZGVwdGhzIGdyZWF0ZXIKKyAqIHRoYW4gb25lLiAgVGhpcyB3YXMgcHJldmlvdXNseSBhIEhDRC1zcGVjaWZpYyBiZWhhdmlvciwgZXhjZXB0IGZvciBJU08KKyAqIHRyYW5zZmVycy4gIE5vbi1pc29jaHJvbm91cyBlbmRwb2ludCBxdWV1ZXMgYXJlIGluYWN0aXZlIGR1cmluZyBjbGVhbnVwCisgKiBhZnRlciBmYXVsdHMgKHRyYW5zZmVyIGVycm9ycyBvciBjYW5jZWxhdGlvbikuCisgKgorICogUmVzZXJ2ZWQgQmFuZHdpZHRoIFRyYW5zZmVyczoKKyAqCisgKiBQZXJpb2RpYyB0cmFuc2ZlcnMgKGludGVycnVwdCBvciBpc29jaHJvbm91cykgYXJlIHBlcmZvcm1lZCByZXBlYXRlZGx5LAorICogdXNpbmcgdGhlIGludGVydmFsIHNwZWNpZmllZCBpbiB0aGUgdXJiLiAgU3VibWl0dGluZyB0aGUgZmlyc3QgdXJiIHRvCisgKiB0aGUgZW5kcG9pbnQgcmVzZXJ2ZXMgdGhlIGJhbmR3aWR0aCBuZWNlc3NhcnkgdG8gbWFrZSB0aG9zZSB0cmFuc2ZlcnMuCisgKiBJZiB0aGUgVVNCIHN1YnN5c3RlbSBjYW4ndCBhbGxvY2F0ZSBzdWZmaWNpZW50IGJhbmR3aWR0aCB0byBwZXJmb3JtCisgKiB0aGUgcGVyaW9kaWMgcmVxdWVzdCwgc3VibWl0dGluZyBzdWNoIGEgcGVyaW9kaWMgcmVxdWVzdCBzaG91bGQgZmFpbC4KKyAqCisgKiBEZXZpY2UgZHJpdmVycyBtdXN0IGV4cGxpY2l0bHkgcmVxdWVzdCB0aGF0IHJlcGV0aXRpb24sIGJ5IGVuc3VyaW5nIHRoYXQKKyAqIHNvbWUgVVJCIGlzIGFsd2F5cyBvbiB0aGUgZW5kcG9pbnQncyBxdWV1ZSAoZXhjZXB0IHBvc3NpYmx5IGZvciBzaG9ydAorICogcGVyaW9kcyBkdXJpbmcgY29tcGxldGlvbiBjYWxsYWNrcykuICBXaGVuIHRoZXJlIGlzIG5vIGxvbmdlciBhbiB1cmIKKyAqIHF1ZXVlZCwgdGhlIGVuZHBvaW50J3MgYmFuZHdpZHRoIHJlc2VydmF0aW9uIGlzIGNhbmNlbGVkLiAgVGhpcyBtZWFucworICogZHJpdmVycyBjYW4gdXNlIHRoZWlyIGNvbXBsZXRpb24gaGFuZGxlcnMgdG8gZW5zdXJlIHRoZXkga2VlcCBiYW5kd2lkdGgKKyAqIHRoZXkgbmVlZCwgYnkgcmVpbml0aWFsaXppbmcgYW5kIHJlc3VibWl0dGluZyB0aGUganVzdC1jb21wbGV0ZWQgdXJiCisgKiB1bnRpbCB0aGUgZHJpdmVyIGxvbmdlciBuZWVkcyB0aGF0IHBlcmlvZGljIGJhbmR3aWR0aC4KKyAqCisgKiBNZW1vcnkgRmxhZ3M6CisgKgorICogVGhlIGdlbmVyYWwgcnVsZXMgZm9yIGhvdyB0byBkZWNpZGUgd2hpY2ggbWVtX2ZsYWdzIHRvIHVzZQorICogYXJlIHRoZSBzYW1lIGFzIGZvciBrbWFsbG9jLiAgVGhlcmUgYXJlIGZvdXIKKyAqIGRpZmZlcmVudCBwb3NzaWJsZSB2YWx1ZXM7IEdGUF9LRVJORUwsIEdGUF9OT0ZTLCBHRlBfTk9JTyBhbmQKKyAqIEdGUF9BVE9NSUMuCisgKgorICogR0ZQX05PRlMgaXMgbm90IGV2ZXIgdXNlZCwgYXMgaXQgaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkIHlldC4KKyAqCisgKiBHRlBfQVRPTUlDIGlzIHVzZWQgd2hlbgorICogICAoYSkgeW91IGFyZSBpbnNpZGUgYSBjb21wbGV0aW9uIGhhbmRsZXIsIGFuIGludGVycnVwdCwgYm90dG9tIGhhbGYsCisgKiAgICAgICB0YXNrbGV0IG9yIHRpbWVyLCBvcgorICogICAoYikgeW91IGFyZSBob2xkaW5nIGEgc3BpbmxvY2sgb3Igcndsb2NrIChkb2VzIG5vdCBhcHBseSB0bworICogICAgICAgc2VtYXBob3JlcyksIG9yCisgKiAgIChjKSBjdXJyZW50LT5zdGF0ZSAhPSBUQVNLX1JVTk5JTkcsIHRoaXMgaXMgdGhlIGNhc2Ugb25seSBhZnRlcgorICogICAgICAgeW91J3ZlIGNoYW5nZWQgaXQuCisgKiAKKyAqIEdGUF9OT0lPIGlzIHVzZWQgaW4gdGhlIGJsb2NrIGlvIHBhdGggYW5kIGVycm9yIGhhbmRsaW5nIG9mIHN0b3JhZ2UKKyAqIGRldmljZXMuCisgKgorICogQWxsIG90aGVyIHNpdHVhdGlvbnMgdXNlIEdGUF9LRVJORUwuCisgKgorICogU29tZSBtb3JlIHNwZWNpZmljIHJ1bGVzIGZvciBtZW1fZmxhZ3MgY2FuIGJlIGluZmVycmVkLCBzdWNoIGFzCisgKiAgKDEpIHN0YXJ0X3htaXQsIHRpbWVvdXQsIGFuZCByZWNlaXZlIG1ldGhvZHMgb2YgbmV0d29yayBkcml2ZXJzIG11c3QKKyAqICAgICAgdXNlIEdGUF9BVE9NSUMgKHRoZXkgYXJlIGNhbGxlZCB3aXRoIGEgc3BpbmxvY2sgaGVsZCk7CisgKiAgKDIpIHF1ZXVlY29tbWFuZCBtZXRob2RzIG9mIHNjc2kgZHJpdmVycyBtdXN0IHVzZSBHRlBfQVRPTUlDIChhbHNvCisgKiAgICAgIGNhbGxlZCB3aXRoIGEgc3BpbmxvY2sgaGVsZCk7CisgKiAgKDMpIElmIHlvdSB1c2UgYSBrZXJuZWwgdGhyZWFkIHdpdGggYSBuZXR3b3JrIGRyaXZlciB5b3UgbXVzdCB1c2UKKyAqICAgICAgR0ZQX05PSU8sIHVubGVzcyAoYikgb3IgKGMpIGFwcGx5OworICogICg0KSBhZnRlciB5b3UgaGF2ZSBkb25lIGEgZG93bigpIHlvdSBjYW4gdXNlIEdGUF9LRVJORUwsIHVubGVzcyAoYikgb3IgKGMpCisgKiAgICAgIGFwcGx5IG9yIHlvdXIgYXJlIGluIGEgc3RvcmFnZSBkcml2ZXIncyBibG9jayBpbyBwYXRoOworICogICg1KSBVU0IgcHJvYmUgYW5kIGRpc2Nvbm5lY3QgY2FuIHVzZSBHRlBfS0VSTkVMIHVubGVzcyAoYikgb3IgKGMpIGFwcGx5OyBhbmQKKyAqICAoNikgY2hhbmdpbmcgZmlybXdhcmUgb24gYSBydW5uaW5nIHN0b3JhZ2Ugb3IgbmV0IGRldmljZSB1c2VzCisgKiAgICAgIEdGUF9OT0lPLCB1bmxlc3MgYikgb3IgYykgYXBwbHkKKyAqCisgKi8KK2ludCB1c2Jfc3VibWl0X3VyYihzdHJ1Y3QgdXJiICp1cmIsIGludCBtZW1fZmxhZ3MpCit7CisJaW50CQkJcGlwZSwgdGVtcCwgbWF4OworCXN0cnVjdCB1c2JfZGV2aWNlCSpkZXY7CisJc3RydWN0IHVzYl9vcGVyYXRpb25zCSpvcDsKKwlpbnQJCQlpc19vdXQ7CisKKwlpZiAoIXVyYiB8fCB1cmItPmhjcHJpdiB8fCAhdXJiLT5jb21wbGV0ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCEoZGV2ID0gdXJiLT5kZXYpIHx8CisJICAgIChkZXYtPnN0YXRlIDwgVVNCX1NUQVRFX0RFRkFVTFQpIHx8CisJICAgICghZGV2LT5idXMpIHx8IChkZXYtPmRldm51bSA8PSAwKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKGRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKKwkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CisJaWYgKCEob3AgPSBkZXYtPmJ1cy0+b3ApIHx8ICFvcC0+c3VibWl0X3VyYikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl1cmItPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKwl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCXVyYi0+YmFuZHdpZHRoID0gMDsKKworCS8qIExvdHMgb2Ygc2FuaXR5IGNoZWNrcywgc28gSENEcyBjYW4gcmVseSBvbiBjbGVhbiBkYXRhCisJICogYW5kIGRvbid0IG5lZWQgdG8gZHVwbGljYXRlIHRlc3RzCisJICovCisJcGlwZSA9IHVyYi0+cGlwZTsKKwl0ZW1wID0gdXNiX3BpcGV0eXBlIChwaXBlKTsKKwlpc19vdXQgPSB1c2JfcGlwZW91dCAocGlwZSk7CisKKwlpZiAoIXVzYl9waXBlY29udHJvbCAocGlwZSkgJiYgZGV2LT5zdGF0ZSA8IFVTQl9TVEFURV9DT05GSUdVUkVEKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIEZJWE1FIHRoZXJlIHNob3VsZCBiZSBhIHNoYXJhYmxlIGxvY2sgcHJvdGVjdGluZyB1cyBhZ2FpbnN0CisJICogY29uZmlnL2FsdHNldHRpbmcgY2hhbmdlcyBhbmQgZGlzY29ubmVjdHMsIGtpY2tpbmcgaW4gaGVyZS4KKwkgKiAoaGVyZSA9PSBiZWZvcmUgbWF4cGFja2V0LCBhbmQgZXZlbnR1YWxseSBlbmRwb2ludCB0eXBlLAorCSAqIGNoZWNrcyBnZXQgbWFkZS4pCisJICovCisKKwltYXggPSB1c2JfbWF4cGFja2V0IChkZXYsIHBpcGUsIGlzX291dCk7CisJaWYgKG1heCA8PSAwKSB7CisJCWRldl9kYmcoJmRldi0+ZGV2LAorCQkJImJvZ3VzIGVuZHBvaW50IGVwJWQlcyBpbiAlcyAoYmFkIG1heHBhY2tldCAlZClcbiIsCisJCQl1c2JfcGlwZWVuZHBvaW50IChwaXBlKSwgaXNfb3V0ID8gIm91dCIgOiAiaW4iLAorCQkJX19GVU5DVElPTl9fLCBtYXgpOworCQlyZXR1cm4gLUVNU0dTSVpFOworCX0KKworCS8qIHBlcmlvZGljIHRyYW5zZmVycyBsaW1pdCBzaXplIHBlciBmcmFtZS91ZnJhbWUsCisJICogYnV0IGRyaXZlcnMgb25seSBjb250cm9sIHRob3NlIHNpemVzIGZvciBJU08uCisJICogd2hpbGUgd2UncmUgY2hlY2tpbmcsIGluaXRpYWxpemUgcmV0dXJuIHN0YXR1cy4KKwkgKi8KKwlpZiAodGVtcCA9PSBQSVBFX0lTT0NIUk9OT1VTKSB7CisJCWludAluLCBsZW47CisKKwkJLyogImhpZ2ggYmFuZHdpZHRoIiBtb2RlLCAxLTMgcGFja2V0cy91ZnJhbWU/ICovCisJCWlmIChkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSB7CisJCQlpbnQJbXVsdCA9IDEgKyAoKG1heCA+PiAxMSkgJiAweDAzKTsKKwkJCW1heCAmPSAweDA3ZmY7CisJCQltYXggKj0gbXVsdDsKKwkJfQorCisJCWlmICh1cmItPm51bWJlcl9vZl9wYWNrZXRzIDw9IDApCQkgICAgCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZm9yIChuID0gMDsgbiA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IG4rKykgeworCQkJbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzYyBbbl0ubGVuZ3RoOworCQkJaWYgKGxlbiA8IDAgfHwgbGVuID4gbWF4KSAKKwkJCQlyZXR1cm4gLUVNU0dTSVpFOworCQkJdXJiLT5pc29fZnJhbWVfZGVzYyBbbl0uc3RhdHVzID0gLUVYREVWOworCQkJdXJiLT5pc29fZnJhbWVfZGVzYyBbbl0uYWN0dWFsX2xlbmd0aCA9IDA7CisJCX0KKwl9CisKKwkvKiB0aGUgSS9PIGJ1ZmZlciBtdXN0IGJlIG1hcHBlZC91bm1hcHBlZCwgZXhjZXB0IHdoZW4gbGVuZ3RoPTAgKi8KKwlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIDwgMCkKKwkJcmV0dXJuIC1FTVNHU0laRTsKKworI2lmZGVmIERFQlVHCisJLyogc3R1ZmYgdGhhdCBkcml2ZXJzIHNob3VsZG4ndCBkbywgYnV0IHdoaWNoIHNob3VsZG4ndAorCSAqIGNhdXNlIHByb2JsZW1zIGluIEhDRHMgaWYgdGhleSBnZXQgaXQgd3JvbmcuCisJICovCisJeworCXVuc2lnbmVkIGludAlvcmlnX2ZsYWdzID0gdXJiLT50cmFuc2Zlcl9mbGFnczsKKwl1bnNpZ25lZCBpbnQJYWxsb3dlZDsKKworCS8qIGVuZm9yY2Ugc2ltcGxlL3N0YW5kYXJkIHBvbGljeSAqLworCWFsbG93ZWQgPSBVUkJfQVNZTkNfVU5MSU5LOwkvLyBhZmZlY3RzIGxhdGVyIHVubGlua3MKKwlhbGxvd2VkIHw9IChVUkJfTk9fVFJBTlNGRVJfRE1BX01BUCB8IFVSQl9OT19TRVRVUF9ETUFfTUFQKTsKKwlhbGxvd2VkIHw9IFVSQl9OT19JTlRFUlJVUFQ7CisJc3dpdGNoICh0ZW1wKSB7CisJY2FzZSBQSVBFX0JVTEs6CisJCWlmIChpc19vdXQpCisJCQlhbGxvd2VkIHw9IFVSQl9aRVJPX1BBQ0tFVDsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwljYXNlIFBJUEVfQ09OVFJPTDoKKwkJYWxsb3dlZCB8PSBVUkJfTk9fRlNCUjsJLyogb25seSBhZmZlY3RzIFVIQ0kgKi8KKwkJLyogRkFMTFRIUk9VR0ggKi8KKwlkZWZhdWx0OgkJCS8qIGFsbCBub24taXNvIGVuZHBvaW50cyAqLworCQlpZiAoIWlzX291dCkKKwkJCWFsbG93ZWQgfD0gVVJCX1NIT1JUX05PVF9PSzsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQlhbGxvd2VkIHw9IFVSQl9JU09fQVNBUDsKKwkJYnJlYWs7CisJfQorCXVyYi0+dHJhbnNmZXJfZmxhZ3MgJj0gYWxsb3dlZDsKKworCS8qIGZhaWwgaWYgc3VibWl0dGVyIGdhdmUgYm9ndXMgZmxhZ3MgKi8KKwlpZiAodXJiLT50cmFuc2Zlcl9mbGFncyAhPSBvcmlnX2ZsYWdzKSB7CisJCWVyciAoIkJPR1VTIHVyYiBmbGFncywgJXggLS0+ICV4IiwKKwkJCW9yaWdfZmxhZ3MsIHVyYi0+dHJhbnNmZXJfZmxhZ3MpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJfQorI2VuZGlmCisJLyoKKwkgKiBGb3JjZSBwZXJpb2RpYyB0cmFuc2ZlciBpbnRlcnZhbHMgdG8gYmUgbGVnYWwgdmFsdWVzIHRoYXQgYXJlCisJICogYSBwb3dlciBvZiB0d28gKHNvIEhDRHMgZG9uJ3QgbmVlZCB0bykuCisJICoKKwkgKiBGSVhNRSB3YW50IGJ1cy0+e2ludHIsaXNvfV9zY2hlZF9ob3Jpem9uIHZhbHVlcyBoZXJlLiAgRWFjaCBIQworCSAqIHN1cHBvcnRzIGRpZmZlcmVudCB2YWx1ZXMuLi4gdGhpcyB1c2VzIEVIQ0kvVUhDSSBkZWZhdWx0cyAoYW5kCisJICogRUhDSSBjYW4gdXNlIHNtYWxsZXIgbm9uLWRlZmF1bHQgdmFsdWVzKS4KKwkgKi8KKwlzd2l0Y2ggKHRlbXApIHsKKwljYXNlIFBJUEVfSVNPQ0hST05PVVM6CisJY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwkJLyogdG9vIHNtYWxsPyAqLworCQlpZiAodXJiLT5pbnRlcnZhbCA8PSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCS8qIHRvbyBiaWc/ICovCisJCXN3aXRjaCAoZGV2LT5zcGVlZCkgeworCQljYXNlIFVTQl9TUEVFRF9ISUdIOgkvKiB1bml0cyBhcmUgbWljcm9mcmFtZXMgKi8KKwkJCS8vIE5PVEUgdXNiIGhhbmRsZXMgMl4xNQorCQkJaWYgKHVyYi0+aW50ZXJ2YWwgPiAoMTAyNCAqIDgpKQorCQkJCXVyYi0+aW50ZXJ2YWwgPSAxMDI0ICogODsKKwkJCXRlbXAgPSAxMDI0ICogODsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9TUEVFRF9GVUxMOgkvKiB1bml0cyBhcmUgZnJhbWVzL21zZWMgKi8KKwkJY2FzZSBVU0JfU1BFRURfTE9XOgorCQkJaWYgKHRlbXAgPT0gUElQRV9JTlRFUlJVUFQpIHsKKwkJCQlpZiAodXJiLT5pbnRlcnZhbCA+IDI1NSkKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJLy8gTk9URSBvaGNpIG9ubHkgaGFuZGxlcyB1cCB0byAzMgorCQkJCXRlbXAgPSAxMjg7CisJCQl9IGVsc2UgeworCQkJCWlmICh1cmItPmludGVydmFsID4gMTAyNCkKKwkJCQkJdXJiLT5pbnRlcnZhbCA9IDEwMjQ7CisJCQkJLy8gTk9URSB1c2IgYW5kIG9oY2kgaGFuZGxlIHVwIHRvIDJeMTUKKwkJCQl0ZW1wID0gMTAyNDsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJLyogcG93ZXIgb2YgdHdvPyAqLworCQl3aGlsZSAodGVtcCA+IHVyYi0+aW50ZXJ2YWwpCisJCQl0ZW1wID4+PSAxOworCQl1cmItPmludGVydmFsID0gdGVtcDsKKwl9CisKKwlyZXR1cm4gb3AtPnN1Ym1pdF91cmIgKHVyYiwgbWVtX2ZsYWdzKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiB1c2JfdW5saW5rX3VyYiAtIGFib3J0L2NhbmNlbCBhIHRyYW5zZmVyIHJlcXVlc3QgZm9yIGFuIGVuZHBvaW50CisgKiBAdXJiOiBwb2ludGVyIHRvIHVyYiBkZXNjcmliaW5nIGEgcHJldmlvdXNseSBzdWJtaXR0ZWQgcmVxdWVzdCwKKyAqCW1heSBiZSBOVUxMCisgKgorICogVGhpcyByb3V0aW5lIGNhbmNlbHMgYW4gaW4tcHJvZ3Jlc3MgcmVxdWVzdC4gIFVSQnMgY29tcGxldGUgb25seQorICogb25jZSBwZXIgc3VibWlzc2lvbiwgYW5kIG1heSBiZSBjYW5jZWxlZCBvbmx5IG9uY2UgcGVyIHN1Ym1pc3Npb24uCisgKiBTdWNjZXNzZnVsIGNhbmNlbGF0aW9uIG1lYW5zIHRoZSByZXF1ZXN0cydzIGNvbXBsZXRpb24gaGFuZGxlciB3aWxsCisgKiBiZSBjYWxsZWQgd2l0aCBhIHN0YXR1cyBjb2RlIGluZGljYXRpbmcgdGhhdCB0aGUgcmVxdWVzdCBoYXMgYmVlbgorICogY2FuY2VsZWQgKHJhdGhlciB0aGFuIGFueSBvdGhlciBjb2RlKSBhbmQgd2lsbCBxdWlja2x5IGJlIHJlbW92ZWQKKyAqIGZyb20gaG9zdCBjb250cm9sbGVyIGRhdGEgc3RydWN0dXJlcy4KKyAqCisgKiBJbiB0aGUgcGFzdCwgY2xlYXJpbmcgdGhlIFVSQl9BU1lOQ19VTkxJTksgdHJhbnNmZXIgZmxhZyBmb3IgdGhlCisgKiBVUkIgaW5kaWNhdGVkIHRoYXQgdGhlIHJlcXVlc3Qgd2FzIHN5bmNocm9ub3VzLiAgVGhpcyB1c2FnZSBpcyBub3cKKyAqIGRlcHJlY2F0ZWQ7IGlmIHRoZSBmbGFnIGlzIGNsZWFyIHRoZSBjYWxsIHdpbGwgYmUgZm9yd2FyZGVkIHRvCisgKiB1c2Jfa2lsbF91cmIoKSBhbmQgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIDAuICBJbiB0aGUgZnV0dXJlLCBkcml2ZXJzCisgKiBzaG91bGQgY2FsbCB1c2Jfa2lsbF91cmIoKSBkaXJlY3RseSBmb3Igc3luY2hyb25vdXMgdW5saW5raW5nLgorICoKKyAqIFdoZW4gdGhlIFVSQl9BU1lOQ19VTkxJTksgdHJhbnNmZXIgZmxhZyBmb3IgdGhlIFVSQiBpcyBzZXQsIHRoaXMKKyAqIHJlcXVlc3QgaXMgYXN5bmNocm9ub3VzLiAgU3VjY2VzcyBpcyBpbmRpY2F0ZWQgYnkgcmV0dXJuaW5nIC1FSU5QUk9HUkVTUywKKyAqIGF0IHdoaWNoIHRpbWUgdGhlIFVSQiB3aWxsIG5vcm1hbGx5IGhhdmUgYmVlbiB1bmxpbmtlZCBidXQgbm90IHlldAorICogZ2l2ZW4gYmFjayB0byB0aGUgZGV2aWNlIGRyaXZlci4gIFdoZW4gaXQgaXMgY2FsbGVkLCB0aGUgY29tcGxldGlvbgorICogZnVuY3Rpb24gd2lsbCBzZWUgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQuICBGYWlsdXJlIGlzIGluZGljYXRlZAorICogYnkgYW55IG90aGVyIHJldHVybiB2YWx1ZS4gIFVubGlua2luZyB3aWxsIGZhaWwgd2hlbiB0aGUgVVJCIGlzIG5vdAorICogY3VycmVudGx5ICJsaW5rZWQiIChpLmUuLCBpdCB3YXMgbmV2ZXIgc3VibWl0dGVkLCBvciBpdCB3YXMgdW5saW5rZWQKKyAqIGJlZm9yZSwgb3IgdGhlIGhhcmR3YXJlIGlzIGFscmVhZHkgZmluaXNoZWQgd2l0aCBpdCksIGV2ZW4gaWYgdGhlCisgKiBjb21wbGV0aW9uIGhhbmRsZXIgaGFzIG5vdCB5ZXQgcnVuLgorICoKKyAqIFVubGlua2luZyBhbmQgRW5kcG9pbnQgUXVldWVzOgorICoKKyAqIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzIChIQ0RzKSBwbGFjZSBhbGwgdGhlIFVSQnMgZm9yIGEgcGFydGljdWxhcgorICogZW5kcG9pbnQgaW4gYSBxdWV1ZS4gIE5vcm1hbGx5IHRoZSBxdWV1ZSBhZHZhbmNlcyBhcyB0aGUgY29udHJvbGxlcgorICogaGFyZHdhcmUgcHJvY2Vzc2VzIGVhY2ggcmVxdWVzdC4gIEJ1dCB3aGVuIGFuIFVSQiB0ZXJtaW5hdGVzIHdpdGggYW55CisgKiBmYXVsdCAoc3VjaCBhcyBhbiBlcnJvciwgb3IgYmVpbmcgdW5saW5rZWQpIGl0cyBxdWV1ZSBzdG9wcywgYXQgbGVhc3QKKyAqIHVudGlsIHRoYXQgVVJCJ3MgY29tcGxldGlvbiByb3V0aW5lIHJldHVybnMuICBJdCBpcyBndWFyYW50ZWVkIHRoYXQKKyAqIHRoZSBxdWV1ZSB3aWxsIG5vdCByZXN0YXJ0IHVudGlsIGFsbCBpdHMgdW5saW5rZWQgVVJCcyBoYXZlIGJlZW4gZnVsbHkKKyAqIHJldGlyZWQsIHdpdGggdGhlaXIgY29tcGxldGlvbiByb3V0aW5lcyBydW4sIGV2ZW4gaWYgdGhhdCdzIG5vdCB1bnRpbAorICogc29tZSB0aW1lIGFmdGVyIHRoZSBvcmlnaW5hbCBjb21wbGV0aW9uIGhhbmRsZXIgcmV0dXJucy4KKyAqCisgKiBUaGlzIG1lYW5zIHRoYXQgVVNCIGRldmljZSBkcml2ZXJzIGNhbiBzYWZlbHkgYnVpbGQgZGVlcCBxdWV1ZXMgZm9yCisgKiBsYXJnZSBvciBjb21wbGV4IHRyYW5zZmVycywgYW5kIGNsZWFuIHRoZW0gdXAgcmVsaWFibHkgYWZ0ZXIgYW55IHNvcnQKKyAqIG9mIGFib3J0ZWQgdHJhbnNmZXIgYnkgdW5saW5raW5nIGFsbCBwZW5kaW5nIFVSQnMgYXQgdGhlIGZpcnN0IGZhdWx0LgorICoKKyAqIE5vdGUgdGhhdCBhbiBVUkIgdGVybWluYXRpbmcgZWFybHkgYmVjYXVzZSBhIHNob3J0IHBhY2tldCB3YXMgcmVjZWl2ZWQKKyAqIHdpbGwgY291bnQgYXMgYW4gZXJyb3IgaWYgYW5kIG9ubHkgaWYgdGhlIFVSQl9TSE9SVF9OT1RfT0sgZmxhZyBpcyBzZXQuCisgKiBBbHNvLCB0aGF0IGFsbCB1bmxpbmtzIHBlcmZvcm1lZCBpbiBhbnkgVVJCIGNvbXBsZXRpb24gaGFuZGxlciBtdXN0CisgKiBiZSBhc3luY2hyb25vdXMuCisgKgorICogUXVldWVzIGZvciBpc29jaHJvbm91cyBlbmRwb2ludHMgYXJlIHRyZWF0ZWQgZGlmZmVyZW50bHksIGJlY2F1c2UgdGhleQorICogYWR2YW5jZSBhdCBmaXhlZCByYXRlcy4gIFN1Y2ggcXVldWVzIGRvIG5vdCBzdG9wIHdoZW4gYW4gVVJCIGlzIHVubGlua2VkLgorICogQW4gdW5saW5rZWQgVVJCIG1heSBsZWF2ZSBhIGdhcCBpbiB0aGUgc3RyZWFtIG9mIHBhY2tldHMuICBJdCBpcyB1bmRlZmluZWQKKyAqIHdoZXRoZXIgc3VjaCBnYXBzIGNhbiBiZSBmaWxsZWQgaW4uCisgKgorICogV2hlbiBhIGNvbnRyb2wgVVJCIHRlcm1pbmF0ZXMgd2l0aCBhbiBlcnJvciwgaXQgaXMgbGlrZWx5IHRoYXQgdGhlCisgKiBzdGF0dXMgc3RhZ2Ugb2YgdGhlIHRyYW5zZmVyIHdpbGwgbm90IHRha2UgcGxhY2UsIGV2ZW4gaWYgaXQgaXMgbWVyZWx5CisgKiBhIHNvZnQgZXJyb3IgcmVzdWx0aW5nIGZyb20gYSBzaG9ydC1wYWNrZXQgd2l0aCBVUkJfU0hPUlRfTk9UX09LIHNldC4KKyAqLworaW50IHVzYl91bmxpbmtfdXJiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpZiAoIXVyYikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9BU1lOQ19VTkxJTkspKSB7CisjaWZkZWYgQ09ORklHX0RFQlVHX0tFUk5FTAorCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgInVzYl91bmxpbmtfdXJiKCkgaXMgZGVwcmVjYXRlZCBmb3IgIgorCQkJCSJzeW5jaHJvbm91cyB1bmxpbmtzLiAgVXNlIHVzYl9raWxsX3VyYigpIGluc3RlYWQuXG4iKTsKKwkJCVdBUk5fT04oMSk7CisJCX0KKyNlbmRpZgorCQl1c2Jfa2lsbF91cmIodXJiKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghKHVyYi0+ZGV2ICYmIHVyYi0+ZGV2LT5idXMgJiYgdXJiLT5kZXYtPmJ1cy0+b3ApKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR1cm4gdXJiLT5kZXYtPmJ1cy0+b3AtPnVubGlua191cmIodXJiLCAtRUNPTk5SRVNFVCk7Cit9CisKKy8qKgorICogdXNiX2tpbGxfdXJiIC0gY2FuY2VsIGEgdHJhbnNmZXIgcmVxdWVzdCBhbmQgd2FpdCBmb3IgaXQgdG8gZmluaXNoCisgKiBAdXJiOiBwb2ludGVyIHRvIFVSQiBkZXNjcmliaW5nIGEgcHJldmlvdXNseSBzdWJtaXR0ZWQgcmVxdWVzdCwKKyAqCW1heSBiZSBOVUxMCisgKgorICogVGhpcyByb3V0aW5lIGNhbmNlbHMgYW4gaW4tcHJvZ3Jlc3MgcmVxdWVzdC4gIEl0IGlzIGd1YXJhbnRlZWQgdGhhdAorICogdXBvbiByZXR1cm4gYWxsIGNvbXBsZXRpb24gaGFuZGxlcnMgd2lsbCBoYXZlIGZpbmlzaGVkIGFuZCB0aGUgVVJCCisgKiB3aWxsIGJlIHRvdGFsbHkgaWRsZSBhbmQgYXZhaWxhYmxlIGZvciByZXVzZS4gIFRoZXNlIGZlYXR1cmVzIG1ha2UKKyAqIHRoaXMgYW4gaWRlYWwgd2F5IHRvIHN0b3AgSS9PIGluIGEgZGlzY29ubmVjdCgpIGNhbGxiYWNrIG9yIGNsb3NlKCkKKyAqIGZ1bmN0aW9uLiAgSWYgdGhlIHJlcXVlc3QgaGFzIG5vdCBhbHJlYWR5IGZpbmlzaGVkIG9yIGJlZW4gdW5saW5rZWQKKyAqIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgd2lsbCBzZWUgdXJiLT5zdGF0dXMgPT0gLUVOT0VOVC4KKyAqCisgKiBXaGlsZSB0aGUgcm91dGluZSBpcyBydW5uaW5nLCBhdHRlbXB0cyB0byByZXN1Ym1pdCB0aGUgVVJCIHdpbGwgZmFpbAorICogd2l0aCBlcnJvciAtRVBFUk0uICBUaHVzIGV2ZW4gaWYgdGhlIFVSQidzIGNvbXBsZXRpb24gaGFuZGxlciBhbHdheXMKKyAqIHRyaWVzIHRvIHJlc3VibWl0LCBpdCB3aWxsIG5vdCBzdWNjZWVkIGFuZCB0aGUgVVJCIHdpbGwgYmVjb21lIGlkbGUuCisgKgorICogVGhpcyByb3V0aW5lIG1heSBub3QgYmUgdXNlZCBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dCAoc3VjaCBhcyBhIGJvdHRvbQorICogaGFsZiBvciBhIGNvbXBsZXRpb24gaGFuZGxlciksIG9yIHdoZW4gaG9sZGluZyBhIHNwaW5sb2NrLCBvciBpbiBvdGhlcgorICogc2l0dWF0aW9ucyB3aGVyZSB0aGUgY2FsbGVyIGNhbid0IHNjaGVkdWxlKCkuCisgKi8KK3ZvaWQgdXNiX2tpbGxfdXJiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpZiAoISh1cmIgJiYgdXJiLT5kZXYgJiYgdXJiLT5kZXYtPmJ1cyAmJiB1cmItPmRldi0+YnVzLT5vcCkpCisJCXJldHVybjsKKwlzcGluX2xvY2tfaXJxKCZ1cmItPmxvY2spOworCSsrdXJiLT5yZWplY3Q7CisJc3Bpbl91bmxvY2tfaXJxKCZ1cmItPmxvY2spOworCisJdXJiLT5kZXYtPmJ1cy0+b3AtPnVubGlua191cmIodXJiLCAtRU5PRU5UKTsKKwl3YWl0X2V2ZW50KHVzYl9raWxsX3VyYl9xdWV1ZSwgYXRvbWljX3JlYWQoJnVyYi0+dXNlX2NvdW50KSA9PSAwKTsKKworCXNwaW5fbG9ja19pcnEoJnVyYi0+bG9jayk7CisJLS11cmItPnJlamVjdDsKKwlzcGluX3VubG9ja19pcnEoJnVyYi0+bG9jayk7Cit9CisKK0VYUE9SVF9TWU1CT0wodXNiX2luaXRfdXJiKTsKK0VYUE9SVF9TWU1CT0wodXNiX2FsbG9jX3VyYik7CitFWFBPUlRfU1lNQk9MKHVzYl9mcmVlX3VyYik7CitFWFBPUlRfU1lNQk9MKHVzYl9nZXRfdXJiKTsKK0VYUE9SVF9TWU1CT0wodXNiX3N1Ym1pdF91cmIpOworRVhQT1JUX1NZTUJPTCh1c2JfdW5saW5rX3VyYik7CitFWFBPUlRfU1lNQk9MKHVzYl9raWxsX3VyYik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNTM0ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCkBAIC0wLDAgKzEsMTU3MyBAQAorLyoKKyAqIGRyaXZlcnMvdXNiL3VzYi5jCisgKgorICogKEMpIENvcHlyaWdodCBMaW51cyBUb3J2YWxkcyAxOTk5CisgKiAoQykgQ29weXJpZ2h0IEpvaGFubmVzIEVyZGZlbHQgMTk5OS0yMDAxCisgKiAoQykgQ29weXJpZ2h0IEFuZHJlYXMgR2FsIDE5OTkKKyAqIChDKSBDb3B5cmlnaHQgR3JlZ29yeSBQLiBTbWl0aCAxOTk5CisgKiAoQykgQ29weXJpZ2h0IERldGkgRmxpZWdsIDE5OTkgKG5ldyBVU0IgYXJjaGl0ZWN0dXJlKQorICogKEMpIENvcHlyaWdodCBSYW5keSBEdW5sYXAgMjAwMAorICogKEMpIENvcHlyaWdodCBEYXZpZCBCcm93bmVsbCAyMDAwLTIwMDQKKyAqIChDKSBDb3B5cmlnaHQgWWdnZHJhc2lsIENvbXB1dGluZywgSW5jLiAyMDAwCisgKiAgICAgKHVzYl9kZXZpY2VfaWQgbWF0Y2hpbmcgY2hhbmdlcyBieSBBZGFtIEouIFJpY2h0ZXIpCisgKiAoQykgQ29weXJpZ2h0IEdyZWcgS3JvYWgtSGFydG1hbiAyMDAyLTIwMDMKKyAqCisgKiBOT1RFISBUaGlzIGlzIG5vdCBhY3R1YWxseSBhIGRyaXZlciBhdCBhbGwsIHJhdGhlciB0aGlzIGlzCisgKiBqdXN0IGEgY29sbGVjdGlvbiBvZiBoZWxwZXIgcm91dGluZXMgdGhhdCBpbXBsZW1lbnQgdGhlCisgKiBnZW5lcmljIFVTQiB0aGluZ3MgdGhhdCB0aGUgcmVhbCBkcml2ZXJzIGNhbiB1c2UuLgorICoKKyAqIFRoaW5rIG9mIHRoaXMgYXMgYSAiVVNCIGxpYnJhcnkiIHJhdGhlciB0aGFuIGFueXRoaW5nIGVsc2UuCisgKiBJdCBzaG91bGQgYmUgY29uc2lkZXJlZCBhIHNsYXZlLCB3aXRoIG5vIGNhbGxiYWNrcy4gQ2FsbGJhY2tzCisgKiBhcmUgZXZpbC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCisJI2RlZmluZSBERUJVRworI2Vsc2UKKwkjdW5kZWYgREVCVUcKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPiAgLyogZm9yIGluX2ludGVycnVwdCgpICovCisjaW5jbHVkZSA8bGludXgva21vZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSAiaGNkLmgiCisjaW5jbHVkZSAidXNiLmgiCisKK2V4dGVybiBpbnQgIHVzYl9odWJfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHVzYl9odWJfY2xlYW51cCh2b2lkKTsKK2V4dGVybiBpbnQgdXNiX21ham9yX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCB1c2JfbWFqb3JfY2xlYW51cCh2b2lkKTsKK2V4dGVybiBpbnQgdXNiX2hvc3RfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHVzYl9ob3N0X2NsZWFudXAodm9pZCk7CisKKworY29uc3QgY2hhciAqdXNiY29yZV9uYW1lID0gInVzYmNvcmUiOworCitzdGF0aWMgaW50IG5vdXNiOwkvKiBEaXNhYmxlIFVTQiB3aGVuIGJ1aWx0IGludG8ga2VybmVsIGltYWdlICovCisJCQkvKiBOb3QgaG9ub3JlZCBvbiBtb2R1bGFyIGJ1aWxkICovCisKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHVzYl9hbGxfZGV2aWNlc19yd3NlbSk7CisKKworc3RhdGljIGludCBnZW5lcmljX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50IGdlbmVyaWNfcmVtb3ZlIChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB1c2JfZ2VuZXJpY19kcml2ZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPQkidXNiIiwKKwkuYnVzID0gJnVzYl9idXNfdHlwZSwKKwkucHJvYmUgPSBnZW5lcmljX3Byb2JlLAorCS5yZW1vdmUgPSBnZW5lcmljX3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgdXNiX2dlbmVyaWNfZHJpdmVyX2RhdGE7CisKKy8qIGNhbGxlZCBmcm9tIGRyaXZlciBjb3JlIHdpdGggdXNiX2J1c190eXBlLnN1YnN5cyB3cml0ZWxvY2sgKi8KK3N0YXRpYyBpbnQgdXNiX3Byb2JlX2ludGVyZmFjZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKiBpbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfZHJpdmVyICogZHJpdmVyID0gdG9fdXNiX2RyaXZlcihkZXYtPmRyaXZlcik7CisJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkOworCWludCBlcnJvciA9IC1FTk9ERVY7CisKKwlkZXZfZGJnKGRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKCFkcml2ZXItPnByb2JlKQorCQlyZXR1cm4gZXJyb3I7CisJLyogRklYTUUgd2UnZCBtdWNoIHByZWZlciB0byBqdXN0IHJlc3VtZSBpdCAuLi4gKi8KKwlpZiAoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKS0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKKwkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CisKKwlpZCA9IHVzYl9tYXRjaF9pZCAoaW50ZiwgZHJpdmVyLT5pZF90YWJsZSk7CisJaWYgKGlkKSB7CisJCWRldl9kYmcgKGRldiwgIiVzIC0gZ290IGlkXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpbnRmLT5jb25kaXRpb24gPSBVU0JfSU5URVJGQUNFX0JJTkRJTkc7CisJCWVycm9yID0gZHJpdmVyLT5wcm9iZSAoaW50ZiwgaWQpOworCQlpbnRmLT5jb25kaXRpb24gPSBlcnJvciA/IFVTQl9JTlRFUkZBQ0VfVU5CT1VORCA6CisJCQkJVVNCX0lOVEVSRkFDRV9CT1VORDsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qIGNhbGxlZCBmcm9tIGRyaXZlciBjb3JlIHdpdGggdXNiX2J1c190eXBlLnN1YnN5cyB3cml0ZWxvY2sgKi8KK3N0YXRpYyBpbnQgdXNiX3VuYmluZF9pbnRlcmZhY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfZHJpdmVyICpkcml2ZXIgPSB0b191c2JfZHJpdmVyKGludGYtPmRldi5kcml2ZXIpOworCisJaW50Zi0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9VTkJJTkRJTkc7CisKKwkvKiByZWxlYXNlIGFsbCB1cmJzIGZvciB0aGlzIGludGVyZmFjZSAqLworCXVzYl9kaXNhYmxlX2ludGVyZmFjZShpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCBpbnRmKTsKKworCWlmIChkcml2ZXIgJiYgZHJpdmVyLT5kaXNjb25uZWN0KQorCQlkcml2ZXItPmRpc2Nvbm5lY3QoaW50Zik7CisKKwkvKiByZXNldCBvdGhlciBpbnRlcmZhY2Ugc3RhdGUgKi8KKwl1c2Jfc2V0X2ludGVyZmFjZShpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLAorCQkJaW50Zi0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsCisJCQkwKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCWludGYtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfVU5CT1VORDsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHVzYl9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgVVNCIGRyaXZlcgorICogQG5ld19kcml2ZXI6IFVTQiBvcGVyYXRpb25zIGZvciB0aGUgZHJpdmVyCisgKgorICogUmVnaXN0ZXJzIGEgVVNCIGRyaXZlciB3aXRoIHRoZSBVU0IgY29yZS4gIFRoZSBsaXN0IG9mIHVuYXR0YWNoZWQKKyAqIGludGVyZmFjZXMgd2lsbCBiZSByZXNjYW5uZWQgd2hlbmV2ZXIgYSBuZXcgZHJpdmVyIGlzIGFkZGVkLCBhbGxvd2luZworICogdGhlIG5ldyBkcml2ZXIgdG8gYXR0YWNoIHRvIGFueSByZWNvZ25pemVkIGRldmljZXMuCisgKiBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlIGFuZCAwIG9uIHN1Y2Nlc3MuCisgKiAKKyAqIE5PVEU6IGlmIHlvdSB3YW50IHlvdXIgZHJpdmVyIHRvIHVzZSB0aGUgVVNCIG1ham9yIG51bWJlciwgeW91IG11c3QgY2FsbAorICogdXNiX3JlZ2lzdGVyX2RldigpIHRvIGVuYWJsZSB0aGF0IGZ1bmN0aW9uYWxpdHkuICBUaGlzIGZ1bmN0aW9uIG5vIGxvbmdlcgorICogdGFrZXMgY2FyZSBvZiB0aGF0LgorICovCitpbnQgdXNiX3JlZ2lzdGVyKHN0cnVjdCB1c2JfZHJpdmVyICpuZXdfZHJpdmVyKQoreworCWludCByZXR2YWwgPSAwOworCisJaWYgKG5vdXNiKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW5ld19kcml2ZXItPmRyaXZlci5uYW1lID0gKGNoYXIgKiluZXdfZHJpdmVyLT5uYW1lOworCW5ld19kcml2ZXItPmRyaXZlci5idXMgPSAmdXNiX2J1c190eXBlOworCW5ld19kcml2ZXItPmRyaXZlci5wcm9iZSA9IHVzYl9wcm9iZV9pbnRlcmZhY2U7CisJbmV3X2RyaXZlci0+ZHJpdmVyLnJlbW92ZSA9IHVzYl91bmJpbmRfaW50ZXJmYWNlOworCW5ld19kcml2ZXItPmRyaXZlci5vd25lciA9IG5ld19kcml2ZXItPm93bmVyOworCisJdXNiX2xvY2tfYWxsX2RldmljZXMoKTsKKwlyZXR2YWwgPSBkcml2ZXJfcmVnaXN0ZXIoJm5ld19kcml2ZXItPmRyaXZlcik7CisJdXNiX3VubG9ja19hbGxfZGV2aWNlcygpOworCisJaWYgKCFyZXR2YWwpIHsKKwkJcHJfaW5mbygiJXM6IHJlZ2lzdGVyZWQgbmV3IGRyaXZlciAlc1xuIiwKKwkJCXVzYmNvcmVfbmFtZSwgbmV3X2RyaXZlci0+bmFtZSk7CisJCXVzYmZzX3VwZGF0ZV9zcGVjaWFsKCk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgJWQgcmVnaXN0ZXJpbmcgZHJpdmVyICVzXG4iLAorCQkJdXNiY29yZV9uYW1lLCByZXR2YWwsIG5ld19kcml2ZXItPm5hbWUpOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKgorICogdXNiX2RlcmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIGEgVVNCIGRyaXZlcgorICogQGRyaXZlcjogVVNCIG9wZXJhdGlvbnMgb2YgdGhlIGRyaXZlciB0byB1bnJlZ2lzdGVyCisgKiBDb250ZXh0OiBtdXN0IGJlIGFibGUgdG8gc2xlZXAKKyAqCisgKiBVbmxpbmtzIHRoZSBzcGVjaWZpZWQgZHJpdmVyIGZyb20gdGhlIGludGVybmFsIFVTQiBkcml2ZXIgbGlzdC4KKyAqIAorICogTk9URTogSWYgeW91IGNhbGxlZCB1c2JfcmVnaXN0ZXJfZGV2KCksIHlvdSBzdGlsbCBuZWVkIHRvIGNhbGwKKyAqIHVzYl9kZXJlZ2lzdGVyX2RldigpIHRvIGNsZWFuIHVwIHlvdXIgZHJpdmVyJ3MgYWxsb2NhdGVkIG1pbm9yIG51bWJlcnMsCisgKiB0aGlzICogY2FsbCB3aWxsIG5vIGxvbmdlciBkbyBpdCBmb3IgeW91LgorICovCit2b2lkIHVzYl9kZXJlZ2lzdGVyKHN0cnVjdCB1c2JfZHJpdmVyICpkcml2ZXIpCit7CisJcHJfaW5mbygiJXM6IGRlcmVnaXN0ZXJpbmcgZHJpdmVyICVzXG4iLCB1c2Jjb3JlX25hbWUsIGRyaXZlci0+bmFtZSk7CisKKwl1c2JfbG9ja19hbGxfZGV2aWNlcygpOworCWRyaXZlcl91bnJlZ2lzdGVyICgmZHJpdmVyLT5kcml2ZXIpOworCXVzYl91bmxvY2tfYWxsX2RldmljZXMoKTsKKworCXVzYmZzX3VwZGF0ZV9zcGVjaWFsKCk7Cit9CisKKy8qKgorICogdXNiX2lmbnVtX3RvX2lmIC0gZ2V0IHRoZSBpbnRlcmZhY2Ugb2JqZWN0IHdpdGggYSBnaXZlbiBpbnRlcmZhY2UgbnVtYmVyCisgKiBAZGV2OiB0aGUgZGV2aWNlIHdob3NlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBjb25zaWRlcmVkCisgKiBAaWZudW06IHRoZSBkZXNpcmVkIGludGVyZmFjZQorICoKKyAqIFRoaXMgd2Fsa3MgdGhlIGRldmljZSBkZXNjcmlwdG9yIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBjb25maWd1cmF0aW9uCisgKiBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSB3aXRoIHRoYXQgcGFydGljdWxhciBpbnRlcmZhY2UKKyAqIG51bWJlciwgb3IgbnVsbC4KKyAqCisgKiBOb3RlIHRoYXQgY29uZmlndXJhdGlvbiBkZXNjcmlwdG9ycyBhcmUgbm90IHJlcXVpcmVkIHRvIGFzc2lnbiBpbnRlcmZhY2UKKyAqIG51bWJlcnMgc2VxdWVudGlhbGx5LCBzbyB0aGF0IGl0IHdvdWxkIGJlIGluY29ycmVjdCB0byBhc3N1bWUgdGhhdAorICogdGhlIGZpcnN0IGludGVyZmFjZSBpbiB0aGF0IGRlc2NyaXB0b3IgY29ycmVzcG9uZHMgdG8gaW50ZXJmYWNlIHplcm8uCisgKiBUaGlzIHJvdXRpbmUgaGVscHMgZGV2aWNlIGRyaXZlcnMgYXZvaWQgc3VjaCBtaXN0YWtlcy4KKyAqIEhvd2V2ZXIsIHlvdSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgeW91IGRvIHRoZSByaWdodCB0aGluZyB3aXRoIGFueQorICogYWx0ZXJuYXRlIHNldHRpbmdzIGF2YWlsYWJsZSBmb3IgdGhpcyBpbnRlcmZhY2VzLgorICoKKyAqIERvbid0IGNhbGwgdGhpcyBmdW5jdGlvbiB1bmxlc3MgeW91IGFyZSBib3VuZCB0byBvbmUgb2YgdGhlIGludGVyZmFjZXMKKyAqIG9uIHRoaXMgZGV2aWNlIG9yIHlvdSBoYXZlIGxvY2tlZCB0aGUgZGV2aWNlIQorICovCitzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdXNiX2lmbnVtX3RvX2lmKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGlmbnVtKQoreworCXN0cnVjdCB1c2JfaG9zdF9jb25maWcgKmNvbmZpZyA9IGRldi0+YWN0Y29uZmlnOworCWludCBpOworCisJaWYgKCFjb25maWcpCisJCXJldHVybiBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykKKwkJaWYgKGNvbmZpZy0+aW50ZXJmYWNlW2ldLT5hbHRzZXR0aW5nWzBdCisJCQkJLmRlc2MuYkludGVyZmFjZU51bWJlciA9PSBpZm51bSkKKwkJCXJldHVybiBjb25maWctPmludGVyZmFjZVtpXTsKKworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyAtIGdldCB0aGUgYWx0c2V0dGluZyBzdHJ1Y3R1cmUgd2l0aCBhIGdpdmVuCisgKglhbHRlcm5hdGUgc2V0dGluZyBudW1iZXIuCisgKiBAaW50ZjogdGhlIGludGVyZmFjZSBjb250YWluaW5nIHRoZSBhbHRzZXR0aW5nIGluIHF1ZXN0aW9uCisgKiBAYWx0bnVtOiB0aGUgZGVzaXJlZCBhbHRlcm5hdGUgc2V0dGluZyBudW1iZXIKKyAqCisgKiBUaGlzIHNlYXJjaGVzIHRoZSBhbHRzZXR0aW5nIGFycmF5IG9mIHRoZSBzcGVjaWZpZWQgaW50ZXJmYWNlIGZvcgorICogYW4gZW50cnkgd2l0aCB0aGUgY29ycmVjdCBiQWx0ZXJuYXRlU2V0dGluZyB2YWx1ZSBhbmQgcmV0dXJucyBhIHBvaW50ZXIKKyAqIHRvIHRoYXQgZW50cnksIG9yIG51bGwuCisgKgorICogTm90ZSB0aGF0IGFsdHNldHRpbmdzIG5lZWQgbm90IGJlIHN0b3JlZCBzZXF1ZW50aWFsbHkgYnkgbnVtYmVyLCBzbworICogaXQgd291bGQgYmUgaW5jb3JyZWN0IHRvIGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBhbHRzZXR0aW5nIGVudHJ5IGluCisgKiB0aGUgYXJyYXkgY29ycmVzcG9uZHMgdG8gYWx0c2V0dGluZyB6ZXJvLiAgVGhpcyByb3V0aW5lIGhlbHBzIGRldmljZQorICogZHJpdmVycyBhdm9pZCBzdWNoIG1pc3Rha2VzLgorICoKKyAqIERvbid0IGNhbGwgdGhpcyBmdW5jdGlvbiB1bmxlc3MgeW91IGFyZSBib3VuZCB0byB0aGUgaW50ZiBpbnRlcmZhY2UKKyAqIG9yIHlvdSBoYXZlIGxvY2tlZCB0aGUgZGV2aWNlIQorICovCitzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICp1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCXVuc2lnbmVkIGludCBhbHRudW0pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW50Zi0+bnVtX2FsdHNldHRpbmc7IGkrKykgeworCQlpZiAoaW50Zi0+YWx0c2V0dGluZ1tpXS5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nID09IGFsdG51bSkKKwkJCXJldHVybiAmaW50Zi0+YWx0c2V0dGluZ1tpXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2UgLSBiaW5kIGEgZHJpdmVyIHRvIGFuIGludGVyZmFjZQorICogQGRyaXZlcjogdGhlIGRyaXZlciB0byBiZSBib3VuZAorICogQGlmYWNlOiB0aGUgaW50ZXJmYWNlIHRvIHdoaWNoIGl0IHdpbGwgYmUgYm91bmQ7IG11c3QgYmUgaW4gdGhlCisgKgl1c2IgZGV2aWNlJ3MgYWN0aXZlIGNvbmZpZ3VyYXRpb24KKyAqIEBwcml2OiBkcml2ZXIgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhhdCBpbnRlcmZhY2UKKyAqCisgKiBUaGlzIGlzIHVzZWQgYnkgdXNiIGRldmljZSBkcml2ZXJzIHRoYXQgbmVlZCB0byBjbGFpbSBtb3JlIHRoYW4gb25lCisgKiBpbnRlcmZhY2Ugb24gYSBkZXZpY2Ugd2hlbiBwcm9iaW5nIChhdWRpbyBhbmQgYWNtIGFyZSBjdXJyZW50IGV4YW1wbGVzKS4KKyAqIE5vIGRldmljZSBkcml2ZXIgc2hvdWxkIGRpcmVjdGx5IG1vZGlmeSBpbnRlcm5hbCB1c2JfaW50ZXJmYWNlIG9yCisgKiB1c2JfZGV2aWNlIHN0cnVjdHVyZSBtZW1iZXJzLgorICoKKyAqIEZldyBkcml2ZXJzIHNob3VsZCBuZWVkIHRvIHVzZSB0aGlzIHJvdXRpbmUsIHNpbmNlIHRoZSBtb3N0IG5hdHVyYWwKKyAqIHdheSB0byBiaW5kIHRvIGFuIGludGVyZmFjZSBpcyB0byByZXR1cm4gdGhlIHByaXZhdGUgZGF0YSBmcm9tCisgKiB0aGUgZHJpdmVyJ3MgcHJvYmUoKSBtZXRob2QuCisgKgorICogQ2FsbGVycyBtdXN0IG93biB0aGUgZGV2aWNlIGxvY2sgYW5kIHRoZSBkcml2ZXIgbW9kZWwncyB1c2JfYnVzX3R5cGUuc3Vic3lzCisgKiB3cml0ZWxvY2suICBTbyBkcml2ZXIgcHJvYmUoKSBlbnRyaWVzIGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZywKKyAqIGJ1dCBvdGhlciBjYWxsIGNvbnRleHRzIG1heSBuZWVkIHRvIGV4cGxpY2l0bHkgY2xhaW0gdGhvc2UgbG9ja3MuCisgKi8KK2ludCB1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZShzdHJ1Y3QgdXNiX2RyaXZlciAqZHJpdmVyLAorCQkJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgdm9pZCogcHJpdikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaWZhY2UtPmRldjsKKworCWlmIChkZXYtPmRyaXZlcikKKwkJcmV0dXJuIC1FQlVTWTsKKworCWRldi0+ZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOworCXVzYl9zZXRfaW50ZmRhdGEoaWZhY2UsIHByaXYpOworCWlmYWNlLT5jb25kaXRpb24gPSBVU0JfSU5URVJGQUNFX0JPVU5EOworCisJLyogaWYgaW50ZXJmYWNlIHdhcyBhbHJlYWR5IGFkZGVkLCBiaW5kIG5vdzsgZWxzZSBsZXQKKwkgKiB0aGUgZnV0dXJlIGRldmljZV9hZGQoKSBiaW5kIGl0LCBieXBhc3NpbmcgcHJvYmUoKQorCSAqLworCWlmICghbGlzdF9lbXB0eSAoJmRldi0+YnVzX2xpc3QpKQorCQlkZXZpY2VfYmluZF9kcml2ZXIoZGV2KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UgLSB1bmJpbmQgYSBkcml2ZXIgZnJvbSBhbiBpbnRlcmZhY2UKKyAqIEBkcml2ZXI6IHRoZSBkcml2ZXIgdG8gYmUgdW5ib3VuZAorICogQGlmYWNlOiB0aGUgaW50ZXJmYWNlIGZyb20gd2hpY2ggaXQgd2lsbCBiZSB1bmJvdW5kCisgKgorICogVGhpcyBjYW4gYmUgdXNlZCBieSBkcml2ZXJzIHRvIHJlbGVhc2UgYW4gaW50ZXJmYWNlIHdpdGhvdXQgd2FpdGluZworICogZm9yIHRoZWlyIGRpc2Nvbm5lY3QoKSBtZXRob2RzIHRvIGJlIGNhbGxlZC4gIEluIHR5cGljYWwgY2FzZXMgdGhpcworICogYWxzbyBjYXVzZXMgdGhlIGRyaXZlciBkaXNjb25uZWN0KCkgbWV0aG9kIHRvIGJlIGNhbGxlZC4KKyAqCisgKiBUaGlzIGNhbGwgaXMgc3luY2hyb25vdXMsIGFuZCBtYXkgbm90IGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQuCisgKiBDYWxsZXJzIG11c3Qgb3duIHRoZSBkZXZpY2UgbG9jayBhbmQgdGhlIGRyaXZlciBtb2RlbCdzIHVzYl9idXNfdHlwZS5zdWJzeXMKKyAqIHdyaXRlbG9jay4gIFNvIGRyaXZlciBkaXNjb25uZWN0KCkgZW50cmllcyBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcsCisgKiBidXQgb3RoZXIgY2FsbCBjb250ZXh0cyBtYXkgbmVlZCB0byBleHBsaWNpdGx5IGNsYWltIHRob3NlIGxvY2tzLgorICovCit2b2lkIHVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2Uoc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlciwKKwkJCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpZmFjZS0+ZGV2OworCisJLyogdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBkb24ndCByZWxlYXNlIHNvbWV0aGluZyB0aGF0J3Mgbm90IG91cnMgKi8KKwlpZiAoIWRldi0+ZHJpdmVyIHx8IGRldi0+ZHJpdmVyICE9ICZkcml2ZXItPmRyaXZlcikKKwkJcmV0dXJuOworCisJLyogZG9uJ3QgZGlzY29ubmVjdCBmcm9tIGRpc2Nvbm5lY3QoKSwgb3IgYmVmb3JlIGRldl9hZGQoKSAqLworCWlmICghbGlzdF9lbXB0eSAoJmRldi0+ZHJpdmVyX2xpc3QpICYmICFsaXN0X2VtcHR5ICgmZGV2LT5idXNfbGlzdCkpCisJCWRldmljZV9yZWxlYXNlX2RyaXZlcihkZXYpOworCisJZGV2LT5kcml2ZXIgPSBOVUxMOworCXVzYl9zZXRfaW50ZmRhdGEoaWZhY2UsIE5VTEwpOworCWlmYWNlLT5jb25kaXRpb24gPSBVU0JfSU5URVJGQUNFX1VOQk9VTkQ7Cit9CisKKy8qKgorICogdXNiX21hdGNoX2lkIC0gZmluZCBmaXJzdCB1c2JfZGV2aWNlX2lkIG1hdGNoaW5nIGRldmljZSBvciBpbnRlcmZhY2UKKyAqIEBpbnRlcmZhY2U6IHRoZSBpbnRlcmZhY2Ugb2YgaW50ZXJlc3QKKyAqIEBpZDogYXJyYXkgb2YgdXNiX2RldmljZV9pZCBzdHJ1Y3R1cmVzLCB0ZXJtaW5hdGVkIGJ5IHplcm8gZW50cnkKKyAqCisgKiB1c2JfbWF0Y2hfaWQgc2VhcmNoZXMgYW4gYXJyYXkgb2YgdXNiX2RldmljZV9pZCdzIGFuZCByZXR1cm5zCisgKiB0aGUgZmlyc3Qgb25lIG1hdGNoaW5nIHRoZSBkZXZpY2Ugb3IgaW50ZXJmYWNlLCBvciBudWxsLgorICogVGhpcyBpcyB1c2VkIHdoZW4gYmluZGluZyAob3IgcmViaW5kaW5nKSBhIGRyaXZlciB0byBhbiBpbnRlcmZhY2UuCisgKiBNb3N0IFVTQiBkZXZpY2UgZHJpdmVycyB3aWxsIHVzZSB0aGlzIGluZGlyZWN0bHksIHRocm91Z2ggdGhlIHVzYiBjb3JlLAorICogYnV0IHNvbWUgbGF5ZXJlZCBkcml2ZXIgZnJhbWV3b3JrcyB1c2UgaXQgZGlyZWN0bHkuCisgKiBUaGVzZSBkZXZpY2UgdGFibGVzIGFyZSBleHBvcnRlZCB3aXRoIE1PRFVMRV9ERVZJQ0VfVEFCTEUsIHRocm91Z2gKKyAqIG1vZHV0aWxzIGFuZCAibW9kdWxlcy51c2JtYXAiLCB0byBzdXBwb3J0IHRoZSBkcml2ZXIgbG9hZGluZworICogZnVuY3Rpb25hbGl0eSBvZiBVU0IgaG90cGx1Z2dpbmcuCisgKgorICogV2hhdCBNYXRjaGVzOgorICoKKyAqIFRoZSAibWF0Y2hfZmxhZ3MiIGVsZW1lbnQgaW4gYSB1c2JfZGV2aWNlX2lkIGNvbnRyb2xzIHdoaWNoCisgKiBtZW1iZXJzIGFyZSB1c2VkLiAgSWYgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGlzIHNldCwgdGhlCisgKiB2YWx1ZSBpbiB0aGUgZGV2aWNlX2lkIG11c3QgbWF0Y2ggaXRzIGNvcnJlc3BvbmRpbmcgbWVtYmVyCisgKiBpbiB0aGUgZGV2aWNlIG9yIGludGVyZmFjZSBkZXNjcmlwdG9yLCBvciBlbHNlIHRoZSBkZXZpY2VfaWQKKyAqIGRvZXMgbm90IG1hdGNoLgorICoKKyAqICJkcml2ZXJfaW5mbyIgaXMgbm9ybWFsbHkgdXNlZCBvbmx5IGJ5IGRldmljZSBkcml2ZXJzLAorICogYnV0IHlvdSBjYW4gY3JlYXRlIGEgd2lsZGNhcmQgIm1hdGNoZXMgYW55dGhpbmciIHVzYl9kZXZpY2VfaWQKKyAqIGFzIGEgZHJpdmVyJ3MgIm1vZHVsZXMudXNibWFwIiBlbnRyeSBpZiB5b3UgcHJvdmlkZSBhbiBpZCB3aXRoCisgKiBvbmx5IGEgbm9uemVybyAiZHJpdmVyX2luZm8iIGZpZWxkLiAgSWYgeW91IGRvIHRoaXMsIHRoZSBVU0IgZGV2aWNlCisgKiBkcml2ZXIncyBwcm9iZSgpIHJvdXRpbmUgc2hvdWxkIHVzZSBhZGRpdGlvbmFsIGludGVsbGlnZW5jZSB0bworICogZGVjaWRlIHdoZXRoZXIgdG8gYmluZCB0byB0aGUgc3BlY2lmaWVkIGludGVyZmFjZS4KKyAqIAorICogV2hhdCBNYWtlcyBHb29kIHVzYl9kZXZpY2VfaWQgVGFibGVzOgorICoKKyAqIFRoZSBtYXRjaCBhbGdvcml0aG0gaXMgdmVyeSBzaW1wbGUsIHNvIHRoYXQgaW50ZWxsaWdlbmNlIGluCisgKiBkcml2ZXIgc2VsZWN0aW9uIG11c3QgY29tZSBmcm9tIHNtYXJ0IGRyaXZlciBpZCByZWNvcmRzLgorICogVW5sZXNzIHlvdSBoYXZlIGdvb2QgcmVhc29ucyB0byB1c2UgYW5vdGhlciBzZWxlY3Rpb24gcG9saWN5LAorICogcHJvdmlkZSBtYXRjaCBlbGVtZW50cyBvbmx5IGluIHJlbGF0ZWQgZ3JvdXBzLCBhbmQgb3JkZXIgbWF0Y2gKKyAqIHNwZWNpZmllcnMgZnJvbSBzcGVjaWZpYyB0byBnZW5lcmFsLiAgVXNlIHRoZSBtYWNyb3MgcHJvdmlkZWQKKyAqIGZvciB0aGF0IHB1cnBvc2UgaWYgeW91IGNhbi4KKyAqCisgKiBUaGUgbW9zdCBzcGVjaWZpYyBtYXRjaCBzcGVjaWZpZXJzIHVzZSBkZXZpY2UgZGVzY3JpcHRvcgorICogZGF0YS4gIFRoZXNlIGFyZSBjb21tb25seSB1c2VkIHdpdGggcHJvZHVjdC1zcGVjaWZpYyBtYXRjaGVzOworICogdGhlIFVTQl9ERVZJQ0UgbWFjcm8gbGV0cyB5b3UgcHJvdmlkZSB2ZW5kb3IgYW5kIHByb2R1Y3QgSURzLAorICogYW5kIHlvdSBjYW4gYWxzbyBtYXRjaCBhZ2FpbnN0IHJhbmdlcyBvZiBwcm9kdWN0IHJldmlzaW9ucy4KKyAqIFRoZXNlIGFyZSB3aWRlbHkgdXNlZCBmb3IgZGV2aWNlcyB3aXRoIGFwcGxpY2F0aW9uIG9yIHZlbmRvcgorICogc3BlY2lmaWMgYkRldmljZUNsYXNzIHZhbHVlcy4KKyAqCisgKiBNYXRjaGVzIGJhc2VkIG9uIGRldmljZSBjbGFzcy9zdWJjbGFzcy9wcm90b2NvbCBzcGVjaWZpY2F0aW9ucworICogYXJlIHNsaWdodGx5IG1vcmUgZ2VuZXJhbDsgdXNlIHRoZSBVU0JfREVWSUNFX0lORk8gbWFjcm8sIG9yCisgKiBpdHMgc2libGluZ3MuICBUaGVzZSBhcmUgdXNlZCB3aXRoIHNpbmdsZS1mdW5jdGlvbiBkZXZpY2VzCisgKiB3aGVyZSBiRGV2aWNlQ2xhc3MgZG9lc24ndCBzcGVjaWZ5IHRoYXQgZWFjaCBpbnRlcmZhY2UgaGFzCisgKiBpdHMgb3duIGNsYXNzLiAKKyAqCisgKiBNYXRjaGVzIGJhc2VkIG9uIGludGVyZmFjZSBjbGFzcy9zdWJjbGFzcy9wcm90b2NvbCBhcmUgdGhlCisgKiBtb3N0IGdlbmVyYWw7IHRoZXkgbGV0IGRyaXZlcnMgYmluZCB0byBhbnkgaW50ZXJmYWNlIG9uIGEKKyAqIG11bHRpcGxlLWZ1bmN0aW9uIGRldmljZS4gIFVzZSB0aGUgVVNCX0lOVEVSRkFDRV9JTkZPCisgKiBtYWNybywgb3IgaXRzIHNpYmxpbmdzLCB0byBtYXRjaCBjbGFzcy1wZXItaW50ZXJmYWNlIHN0eWxlIAorICogZGV2aWNlcyAoYXMgcmVjb3JkZWQgaW4gYkRldmljZUNsYXNzKS4KKyAqICAKKyAqIFdpdGhpbiB0aG9zZSBncm91cHMsIHJlbWVtYmVyIHRoYXQgbm90IGFsbCBjb21iaW5hdGlvbnMgYXJlCisgKiBtZWFuaW5nZnVsLiAgRm9yIGV4YW1wbGUsIGRvbid0IGdpdmUgYSBwcm9kdWN0IHZlcnNpb24gcmFuZ2UKKyAqIHdpdGhvdXQgdmVuZG9yIGFuZCBwcm9kdWN0IElEczsgb3Igc3BlY2lmeSBhIHByb3RvY29sIHdpdGhvdXQKKyAqIGl0cyBhc3NvY2lhdGVkIGNsYXNzIGFuZCBzdWJjbGFzcy4KKyAqLyAgIAorY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKgordXNiX21hdGNoX2lkKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisKKwkvKiBwcm9jX2Nvbm5lY3RpbmZvIGluIGRldmlvLmMgbWF5IGNhbGwgdXMgd2l0aCBpZCA9PSBOVUxMLiAqLworCWlmIChpZCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWludGYgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOworCWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKworCS8qIEl0IGlzIGltcG9ydGFudCB0byBjaGVjayB0aGF0IGlkLT5kcml2ZXJfaW5mbyBpcyBub256ZXJvLAorCSAgIHNpbmNlIGFuIGVudHJ5IHRoYXQgaXMgYWxsIHplcm9lcyBleGNlcHQgZm9yIGEgbm9uemVybworCSAgIGlkLT5kcml2ZXJfaW5mbyBpcyB0aGUgd2F5IHRvIGNyZWF0ZSBhbiBlbnRyeSB0aGF0CisJICAgaW5kaWNhdGVzIHRoYXQgdGhlIGRyaXZlciB3YW50IHRvIGV4YW1pbmUgZXZlcnkKKwkgICBkZXZpY2UgYW5kIGludGVyZmFjZS4gKi8KKwlmb3IgKDsgaWQtPmlkVmVuZG9yIHx8IGlkLT5iRGV2aWNlQ2xhc3MgfHwgaWQtPmJJbnRlcmZhY2VDbGFzcyB8fAorCSAgICAgICBpZC0+ZHJpdmVyX2luZm87IGlkKyspIHsKKworCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfVkVORE9SKSAmJgorCQkgICAgaWQtPmlkVmVuZG9yICE9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikpCisJCQljb250aW51ZTsKKworCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfUFJPRFVDVCkgJiYKKwkJICAgIGlkLT5pZFByb2R1Y3QgIT0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpCisJCQljb250aW51ZTsKKworCQkvKiBObyBuZWVkIHRvIHRlc3QgaWQtPmJjZERldmljZV9sbyAhPSAwLCBzaW5jZSAwIGlzIG5ldmVyCisJCSAgIGdyZWF0ZXIgdGhhbiBhbnkgdW5zaWduZWQgbnVtYmVyLiAqLworCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0xPKSAmJgorCQkgICAgKGlkLT5iY2REZXZpY2VfbG8gPiBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSkpCisJCQljb250aW51ZTsKKworCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0hJKSAmJgorCQkgICAgKGlkLT5iY2REZXZpY2VfaGkgPCBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSkpCisJCQljb250aW51ZTsKKworCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0NMQVNTKSAmJgorCQkgICAgKGlkLT5iRGV2aWNlQ2xhc3MgIT0gZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcykpCisJCQljb250aW51ZTsKKworCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX1NVQkNMQVNTKSAmJgorCQkgICAgKGlkLT5iRGV2aWNlU3ViQ2xhc3MhPSBkZXYtPmRlc2NyaXB0b3IuYkRldmljZVN1YkNsYXNzKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfUFJPVE9DT0wpICYmCisJCSAgICAoaWQtPmJEZXZpY2VQcm90b2NvbCAhPSBkZXYtPmRlc2NyaXB0b3IuYkRldmljZVByb3RvY29sKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MpICYmCisJCSAgICAoaWQtPmJJbnRlcmZhY2VDbGFzcyAhPSBpbnRmLT5kZXNjLmJJbnRlcmZhY2VDbGFzcykpCisJCQljb250aW51ZTsKKworCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTKSAmJgorCQkgICAgKGlkLT5iSW50ZXJmYWNlU3ViQ2xhc3MgIT0gaW50Zi0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MpKQorCQkJY29udGludWU7CisKKwkJaWYgKChpZC0+bWF0Y2hfZmxhZ3MgJiBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9QUk9UT0NPTCkgJiYKKwkJICAgIChpZC0+YkludGVyZmFjZVByb3RvY29sICE9IGludGYtPmRlc2MuYkludGVyZmFjZVByb3RvY29sKSkKKwkJCWNvbnRpbnVlOworCisJCXJldHVybiBpZDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiB1c2JfZmluZF9pbnRlcmZhY2UgLSBmaW5kIHVzYl9pbnRlcmZhY2UgcG9pbnRlciBmb3IgZHJpdmVyIGFuZCBkZXZpY2UKKyAqIEBkcnY6IHRoZSBkcml2ZXIgd2hvc2UgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIGNvbnNpZGVyZWQKKyAqIEBtaW5vcjogdGhlIG1pbm9yIG51bWJlciBvZiB0aGUgZGVzaXJlZCBkZXZpY2UKKyAqCisgKiBUaGlzIHdhbGtzIHRoZSBkcml2ZXIgZGV2aWNlIGxpc3QgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBpbnRlcmZhY2UgCisgKiB3aXRoIHRoZSBtYXRjaGluZyBtaW5vci4gIE5vdGUsIHRoaXMgb25seSB3b3JrcyBmb3IgZGV2aWNlcyB0aGF0IHNoYXJlIHRoZQorICogVVNCIG1ham9yIG51bWJlci4KKyAqLworc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVzYl9maW5kX2ludGVyZmFjZShzdHJ1Y3QgdXNiX2RyaXZlciAqZHJ2LCBpbnQgbWlub3IpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCisJbGlzdF9mb3JfZWFjaChlbnRyeSwgJmRydi0+ZHJpdmVyLmRldmljZXMpIHsKKwkJZGV2ID0gY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgZGV2aWNlLCBkcml2ZXJfbGlzdCk7CisKKwkJLyogY2FuJ3QgbG9vayBhdCB1c2IgZGV2aWNlcywgb25seSBpbnRlcmZhY2VzICovCisJCWlmIChkZXYtPmRyaXZlciA9PSAmdXNiX2dlbmVyaWNfZHJpdmVyKQorCQkJY29udGludWU7CisKKwkJaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwkJaWYgKGludGYtPm1pbm9yID09IC0xKQorCQkJY29udGludWU7CisJCWlmIChpbnRmLT5taW5vciA9PSBtaW5vcikKKwkJCXJldHVybiBpbnRmOworCX0KKworCS8qIG5vIGRldmljZSBmb3VuZCB0aGF0IG1hdGNoZXMgKi8KKwlyZXR1cm4gTlVMTDsJCit9CisKK3N0YXRpYyBpbnQgdXNiX2RldmljZV9tYXRjaCAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCB1c2JfZHJpdmVyICp1c2JfZHJ2OworCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZDsKKworCS8qIGNoZWNrIGZvciBnZW5lcmljIGRyaXZlciwgd2hpY2ggd2UgZG9uJ3QgbWF0Y2ggYW55IGRldmljZSB3aXRoICovCisJaWYgKGRydiA9PSAmdXNiX2dlbmVyaWNfZHJpdmVyKQorCQlyZXR1cm4gMDsKKworCWludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJdXNiX2RydiA9IHRvX3VzYl9kcml2ZXIoZHJ2KTsKKwkKKwlpZCA9IHVzYl9tYXRjaF9pZCAoaW50ZiwgdXNiX2Rydi0+aWRfdGFibGUpOworCWlmIChpZCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworCisjaWZkZWYJQ09ORklHX0hPVFBMVUcKKworLyoKKyAqIFVTQiBob3RwbHVnZ2luZyBpbnZva2VzIHdoYXQgL3Byb2Mvc3lzL2tlcm5lbC9ob3RwbHVnIHNheXMKKyAqIChub3JtYWxseSAvc2Jpbi9ob3RwbHVnKSB3aGVuIFVTQiBkZXZpY2VzIGdldCBhZGRlZCBvciByZW1vdmVkLgorICoKKyAqIFRoaXMgaW52b2tlcyBhIHVzZXIgbW9kZSBwb2xpY3kgYWdlbnQsIHR5cGljYWxseSBoZWxwaW5nIHRvIGxvYWQgZHJpdmVyCisgKiBvciBvdGhlciBtb2R1bGVzLCBjb25maWd1cmUgdGhlIGRldmljZSwgYW5kIG1vcmUuICBEcml2ZXJzIGNhbiBwcm92aWRlCisgKiBhIE1PRFVMRV9ERVZJQ0VfVEFCTEUgdG8gaGVscCB3aXRoIG1vZHVsZSBsb2FkaW5nIHN1YnRhc2tzLgorICoKKyAqIFdlJ3JlIGNhbGxlZCBlaXRoZXIgZnJvbSBraHViZCAodGhlIHR5cGljYWwgY2FzZSkgb3IgZnJvbSByb290IGh1YgorICogKGluaXQsIGthcG1kLCBtb2Rwcm9iZSwgcm1tb2QsIGV0YyksIGJ1dCB0aGUgYWdlbnRzIG5lZWQgdG8gaGFuZGxlCisgKiBkZWxheXMgaW4gZXZlbnQgZGVsaXZlcnkuICBVc2Ugc3lzZnMgKGFuZCBERVZQQVRIKSB0byBtYWtlIHN1cmUgdGhlCisgKiBkZXZpY2UgKGFuZCB0aGlzIGNvbmZpZ3VyYXRpb24hKSBhcmUgc3RpbGwgcHJlc2VudC4KKyAqLworc3RhdGljIGludCB1c2JfaG90cGx1ZyAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICoqZW52cCwgaW50IG51bV9lbnZwLAorCQkJY2hhciAqYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXY7CisJaW50IGkgPSAwOworCWludCBsZW5ndGggPSAwOworCisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJLyogZHJpdmVyIGlzIG9mdGVuIG51bGwgaGVyZTsgZGV2X2RiZygpIHdvdWxkIG9vcHMgKi8KKwlwcl9kZWJ1ZyAoInVzYiAlczogaG90cGx1Z1xuIiwgZGV2LT5idXNfaWQpOworCisJLyogTXVzdCBjaGVjayBkcml2ZXJfZGF0YSBoZXJlLCBhcyBvbiByZW1vdmUgZHJpdmVyIGlzIGFsd2F5cyBOVUxMICovCisJaWYgKChkZXYtPmRyaXZlciA9PSAmdXNiX2dlbmVyaWNfZHJpdmVyKSB8fCAKKwkgICAgKGRldi0+ZHJpdmVyX2RhdGEgPT0gJnVzYl9nZW5lcmljX2RyaXZlcl9kYXRhKSkKKwkJcmV0dXJuIDA7CisKKwlpbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpbnRmKTsKKwkKKwlpZiAodXNiX2Rldi0+ZGV2bnVtIDwgMCkgeworCQlwcl9kZWJ1ZyAoInVzYiAlczogYWxyZWFkeSBkZWxldGVkP1xuIiwgZGV2LT5idXNfaWQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKCF1c2JfZGV2LT5idXMpIHsKKwkJcHJfZGVidWcgKCJ1c2IgJXM6IGJ1cyByZW1vdmVkP1xuIiwgZGV2LT5idXNfaWQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKyNpZmRlZglDT05GSUdfVVNCX0RFVklDRUZTCisJLyogSWYgdGhpcyBpcyBhdmFpbGFibGUsIHVzZXJzcGFjZSBwcm9ncmFtcyBjYW4gZGlyZWN0bHkgcmVhZAorCSAqIGFsbCB0aGUgZGV2aWNlIGRlc2NyaXB0b3JzIHdlIGRvbid0IHRlbGwgdGhlbSBhYm91dC4gIE9yCisJICogZXZlbiBhY3QgYXMgdXNlcm1vZGUgZHJpdmVycy4KKwkgKgorCSAqIEZJWE1FIHJlZHVjZSBoYXJkd2lyZWQgaW50ZWxsaWdlbmNlIGhlcmUKKwkgKi8KKwlpZiAoYWRkX2hvdHBsdWdfZW52X3ZhcihlbnZwLCBudW1fZW52cCwgJmksCisJCQkJYnVmZmVyLCBidWZmZXJfc2l6ZSwgJmxlbmd0aCwKKwkJCQkiREVWSUNFPS9wcm9jL2J1cy91c2IvJTAzZC8lMDNkIiwKKwkJCQl1c2JfZGV2LT5idXMtPmJ1c251bSwgdXNiX2Rldi0+ZGV2bnVtKSkKKwkJcmV0dXJuIC1FTk9NRU07CisjZW5kaWYKKworCS8qIHBlci1kZXZpY2UgY29uZmlndXJhdGlvbnMgYXJlIGNvbW1vbiAqLworCWlmIChhZGRfaG90cGx1Z19lbnZfdmFyKGVudnAsIG51bV9lbnZwLCAmaSwKKwkJCQlidWZmZXIsIGJ1ZmZlcl9zaXplLCAmbGVuZ3RoLAorCQkJCSJQUk9EVUNUPSV4LyV4LyV4IiwKKwkJCQlsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkJCQlsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCksCisJCQkJbGUxNl90b19jcHUodXNiX2Rldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBjbGFzcy1iYXNlZCBkcml2ZXIgYmluZGluZyBtb2RlbHMgKi8KKwlpZiAoYWRkX2hvdHBsdWdfZW52X3ZhcihlbnZwLCBudW1fZW52cCwgJmksCisJCQkJYnVmZmVyLCBidWZmZXJfc2l6ZSwgJmxlbmd0aCwKKwkJCQkiVFlQRT0lZC8lZC8lZCIsCisJCQkJdXNiX2Rldi0+ZGVzY3JpcHRvci5iRGV2aWNlQ2xhc3MsCisJCQkJdXNiX2Rldi0+ZGVzY3JpcHRvci5iRGV2aWNlU3ViQ2xhc3MsCisJCQkJdXNiX2Rldi0+ZGVzY3JpcHRvci5iRGV2aWNlUHJvdG9jb2wpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICh1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcyA9PSAwKSB7CisJCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdCA9IGludGYtPmN1cl9hbHRzZXR0aW5nOworCisJCS8qIDIuNCBvbmx5IGV4cG9zZWQgaW50ZXJmYWNlIHplcm8uICBpbiAyLjUsIGhvdHBsdWcKKwkJICogYWdlbnRzIGFyZSBjYWxsZWQgZm9yIGFsbCBpbnRlcmZhY2VzLCBhbmQgY2FuIHVzZQorCQkgKiAkREVWUEFUSC9iSW50ZXJmYWNlTnVtYmVyIGlmIG5lY2Vzc2FyeS4KKwkJICovCisJCWlmIChhZGRfaG90cGx1Z19lbnZfdmFyKGVudnAsIG51bV9lbnZwLCAmaSwKKwkJCQkJYnVmZmVyLCBidWZmZXJfc2l6ZSwgJmxlbmd0aCwKKwkJCQkJIklOVEVSRkFDRT0lZC8lZC8lZCIsCisJCQkJCWFsdC0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MsCisJCQkJCWFsdC0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MsCisJCQkJCWFsdC0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wpKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJaWYgKGFkZF9ob3RwbHVnX2Vudl92YXIoZW52cCwgbnVtX2VudnAsICZpLAorCQkJCQlidWZmZXIsIGJ1ZmZlcl9zaXplLCAmbGVuZ3RoLAorCQkJCQkiTU9EQUxJQVM9dXNiOnYlMDRYcCUwNFhkbCUwNFhkaCUwNFhkYyUwMlhkc2MlMDJYZHAlMDJYaWMlMDJYaXNjJTAyWGlwJTAyWCIsCisJCQkJCWxlMTZfdG9fY3B1KHVzYl9kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQkJCQlsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCksCisJCQkJCWxlMTZfdG9fY3B1KHVzYl9kZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSwKKwkJCQkJbGUxNl90b19jcHUodXNiX2Rldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpLAorCQkJCQl1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcywKKwkJCQkJdXNiX2Rldi0+ZGVzY3JpcHRvci5iRGV2aWNlU3ViQ2xhc3MsCisJCQkJCXVzYl9kZXYtPmRlc2NyaXB0b3IuYkRldmljZVByb3RvY29sLAorCQkJCQlhbHQtPmRlc2MuYkludGVyZmFjZUNsYXNzLAorCQkJCQlhbHQtPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzLAorCQkJCQlhbHQtPmRlc2MuYkludGVyZmFjZVByb3RvY29sKSkKKwkJCXJldHVybiAtRU5PTUVNOworIAl9IGVsc2UgeworCQlpZiAoYWRkX2hvdHBsdWdfZW52X3ZhcihlbnZwLCBudW1fZW52cCwgJmksCisJCQkJCWJ1ZmZlciwgYnVmZmVyX3NpemUsICZsZW5ndGgsCisJCQkJCSJNT0RBTElBUz11c2I6diUwNFhwJTA0WGRsJTA0WGRoJTA0WGRjJTAyWGRzYyUwMlhkcCUwMlhpYyppc2MqaXAqIiwKKwkJCQkJbGUxNl90b19jcHUodXNiX2Rldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCQkJCWxlMTZfdG9fY3B1KHVzYl9kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSwKKwkJCQkJbGUxNl90b19jcHUodXNiX2Rldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpLAorCQkJCQlsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSksCisJCQkJCXVzYl9kZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzLAorCQkJCQl1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VTdWJDbGFzcywKKwkJCQkJdXNiX2Rldi0+ZGVzY3JpcHRvci5iRGV2aWNlUHJvdG9jb2wpKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZW52cFtpXSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKworc3RhdGljIGludCB1c2JfaG90cGx1ZyAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICoqZW52cCwKKwkJCWludCBudW1fZW52cCwgY2hhciAqYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpCit7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKKyNlbmRpZgkvKiBDT05GSUdfSE9UUExVRyAqLworCisvKioKKyAqIHVzYl9yZWxlYXNlX2RldiAtIGZyZWUgYSB1c2IgZGV2aWNlIHN0cnVjdHVyZSB3aGVuIGFsbCB1c2VycyBvZiBpdCBhcmUgZmluaXNoZWQuCisgKiBAZGV2OiBkZXZpY2UgdGhhdCdzIGJlZW4gZGlzY29ubmVjdGVkCisgKgorICogV2lsbCBiZSBjYWxsZWQgb25seSBieSB0aGUgZGV2aWNlIGNvcmUgd2hlbiBhbGwgdXNlcnMgb2YgdGhpcyB1c2IgZGV2aWNlIGFyZQorICogZG9uZS4KKyAqLworc3RhdGljIHZvaWQgdXNiX3JlbGVhc2VfZGV2KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKworCXVkZXYgPSB0b191c2JfZGV2aWNlKGRldik7CisKKwl1c2JfZGVzdHJveV9jb25maWd1cmF0aW9uKHVkZXYpOworCXVzYl9idXNfcHV0KHVkZXYtPmJ1cyk7CisJa2ZyZWUodWRldi0+cHJvZHVjdCk7CisJa2ZyZWUodWRldi0+bWFudWZhY3R1cmVyKTsKKwlrZnJlZSh1ZGV2LT5zZXJpYWwpOworCWtmcmVlKHVkZXYpOworfQorCisvKioKKyAqIHVzYl9hbGxvY19kZXYgLSB1c2IgZGV2aWNlIGNvbnN0cnVjdG9yICh1c2Jjb3JlLWludGVybmFsKQorICogQHBhcmVudDogaHViIHRvIHdoaWNoIGRldmljZSBpcyBjb25uZWN0ZWQ7IG51bGwgdG8gYWxsb2NhdGUgYSByb290IGh1YgorICogQGJ1czogYnVzIHVzZWQgdG8gYWNjZXNzIHRoZSBkZXZpY2UKKyAqIEBwb3J0MTogb25lLWJhc2VkIGluZGV4IG9mIHBvcnQ7IGlnbm9yZWQgZm9yIHJvb3QgaHVicworICogQ29udGV4dDogIWluX2ludGVycnVwdCAoKQorICoKKyAqIE9ubHkgaHViIGRyaXZlcnMgKGluY2x1ZGluZyB2aXJ0dWFsIHJvb3QgaHViIGRyaXZlcnMgZm9yIGhvc3QKKyAqIGNvbnRyb2xsZXJzKSBzaG91bGQgZXZlciBjYWxsIHRoaXMuCisgKgorICogVGhpcyBjYWxsIG1heSBub3QgYmUgdXNlZCBpbiBhIG5vbi1zbGVlcGluZyBjb250ZXh0LgorICovCitzdHJ1Y3QgdXNiX2RldmljZSAqCit1c2JfYWxsb2NfZGV2KHN0cnVjdCB1c2JfZGV2aWNlICpwYXJlbnQsIHN0cnVjdCB1c2JfYnVzICpidXMsIHVuc2lnbmVkIHBvcnQxKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisKKwlkZXYgPSBrbWFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYpCisJCXJldHVybiBOVUxMOworCisJbWVtc2V0KGRldiwgMCwgc2l6ZW9mKCpkZXYpKTsKKworCWJ1cyA9IHVzYl9idXNfZ2V0KGJ1cyk7CisJaWYgKCFidXMpIHsKKwkJa2ZyZWUoZGV2KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZGV2aWNlX2luaXRpYWxpemUoJmRldi0+ZGV2KTsKKwlkZXYtPmRldi5idXMgPSAmdXNiX2J1c190eXBlOworCWRldi0+ZGV2LmRtYV9tYXNrID0gYnVzLT5jb250cm9sbGVyLT5kbWFfbWFzazsKKwlkZXYtPmRldi5kcml2ZXJfZGF0YSA9ICZ1c2JfZ2VuZXJpY19kcml2ZXJfZGF0YTsKKwlkZXYtPmRldi5kcml2ZXIgPSAmdXNiX2dlbmVyaWNfZHJpdmVyOworCWRldi0+ZGV2LnJlbGVhc2UgPSB1c2JfcmVsZWFzZV9kZXY7CisJZGV2LT5zdGF0ZSA9IFVTQl9TVEFURV9BVFRBQ0hFRDsKKworCUlOSVRfTElTVF9IRUFEKCZkZXYtPmVwMC51cmJfbGlzdCk7CisJZGV2LT5lcDAuZGVzYy5iTGVuZ3RoID0gVVNCX0RUX0VORFBPSU5UX1NJWkU7CisJZGV2LT5lcDAuZGVzYy5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfRU5EUE9JTlQ7CisJLyogZXAwIG1heHBhY2tldCBjb21lcyBsYXRlciwgZnJvbSBkZXZpY2UgZGVzY3JpcHRvciAqLworCWRldi0+ZXBfaW5bMF0gPSBkZXYtPmVwX291dFswXSA9ICZkZXYtPmVwMDsKKworCS8qIFNhdmUgcmVhZGFibGUgYW5kIHN0YWJsZSB0b3BvbG9neSBpZCwgZGlzdGluZ3Vpc2hpbmcgZGV2aWNlcworCSAqIGJ5IGxvY2F0aW9uIGZvciBkaWFnbm9zdGljcywgdG9vbHMsIGRyaXZlciBtb2RlbCwgZXRjLiAgVGhlCisJICogc3RyaW5nIGlzIGEgcGF0aCBhbG9uZyBodWIgcG9ydHMsIGZyb20gdGhlIHJvb3QuICBFYWNoIGRldmljZSdzCisJICogZGV2LT5kZXZwYXRoIHdpbGwgYmUgc3RhYmxlIHVudGlsIFVTQiBpcyByZS1jYWJsZWQsIGFuZCBodWJzCisJICogYXJlIG9mdGVuIGxhYmVsZWQgd2l0aCB0aGVzZSBwb3J0IG51bWJlcnMuICBUaGUgYnVzX2lkIGlzbid0CisJICogYXMgc3RhYmxlOiAgYnVzLT5idXNudW0gY2hhbmdlcyBlYXNpbHkgZnJvbSBtb2Rwcm9iZSBvcmRlciwKKwkgKiBjYXJkYnVzIG9yIHBjaSBob3RwbHVnZ2luZywgYW5kIHNvIG9uLgorCSAqLworCWlmICh1bmxpa2VseSAoIXBhcmVudCkpIHsKKwkJZGV2LT5kZXZwYXRoIFswXSA9ICcwJzsKKworCQlkZXYtPmRldi5wYXJlbnQgPSBidXMtPmNvbnRyb2xsZXI7CisJCXNwcmludGYgKCZkZXYtPmRldi5idXNfaWRbMF0sICJ1c2IlZCIsIGJ1cy0+YnVzbnVtKTsKKwl9IGVsc2UgeworCQkvKiBtYXRjaCBhbnkgbGFiZWxpbmcgb24gdGhlIGh1YnM7IGl0J3Mgb25lLWJhc2VkICovCisJCWlmIChwYXJlbnQtPmRldnBhdGggWzBdID09ICcwJykKKwkJCXNucHJpbnRmIChkZXYtPmRldnBhdGgsIHNpemVvZiBkZXYtPmRldnBhdGgsCisJCQkJIiVkIiwgcG9ydDEpOworCQllbHNlCisJCQlzbnByaW50ZiAoZGV2LT5kZXZwYXRoLCBzaXplb2YgZGV2LT5kZXZwYXRoLAorCQkJCSIlcy4lZCIsIHBhcmVudC0+ZGV2cGF0aCwgcG9ydDEpOworCisJCWRldi0+ZGV2LnBhcmVudCA9ICZwYXJlbnQtPmRldjsKKwkJc3ByaW50ZiAoJmRldi0+ZGV2LmJ1c19pZFswXSwgIiVkLSVzIiwKKwkJCWJ1cy0+YnVzbnVtLCBkZXYtPmRldnBhdGgpOworCisJCS8qIGh1YiBkcml2ZXIgc2V0cyB1cCBUVCByZWNvcmRzICovCisJfQorCisJZGV2LT5idXMgPSBidXM7CisJZGV2LT5wYXJlbnQgPSBwYXJlbnQ7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+ZmlsZWxpc3QpOworCisJaW5pdF9NVVRFWCgmZGV2LT5zZXJpYWxpemUpOworCisJcmV0dXJuIGRldjsKK30KKworLyoqCisgKiB1c2JfZ2V0X2RldiAtIGluY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgdXNiIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBkZXY6IHRoZSBkZXZpY2UgYmVpbmcgcmVmZXJlbmNlZAorICoKKyAqIEVhY2ggbGl2ZSByZWZlcmVuY2UgdG8gYSBkZXZpY2Ugc2hvdWxkIGJlIHJlZmNvdW50ZWQuCisgKgorICogRHJpdmVycyBmb3IgVVNCIGludGVyZmFjZXMgc2hvdWxkIG5vcm1hbGx5IHJlY29yZCBzdWNoIHJlZmVyZW5jZXMgaW4KKyAqIHRoZWlyIHByb2JlKCkgbWV0aG9kcywgd2hlbiB0aGV5IGJpbmQgdG8gYW4gaW50ZXJmYWNlLCBhbmQgcmVsZWFzZQorICogdGhlbSBieSBjYWxsaW5nIHVzYl9wdXRfZGV2KCksIGluIHRoZWlyIGRpc2Nvbm5lY3QoKSBtZXRob2RzLgorICoKKyAqIEEgcG9pbnRlciB0byB0aGUgZGV2aWNlIHdpdGggdGhlIGluY3JlbWVudGVkIHJlZmVyZW5jZSBjb3VudGVyIGlzIHJldHVybmVkLgorICovCitzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2dldF9kZXYoc3RydWN0IHVzYl9kZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2KQorCQlnZXRfZGV2aWNlKCZkZXYtPmRldik7CisJcmV0dXJuIGRldjsKK30KKworLyoqCisgKiB1c2JfcHV0X2RldiAtIHJlbGVhc2UgYSB1c2Ugb2YgdGhlIHVzYiBkZXZpY2Ugc3RydWN0dXJlCisgKiBAZGV2OiBkZXZpY2UgdGhhdCdzIGJlZW4gZGlzY29ubmVjdGVkCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2hlbiBhIHVzZXIgb2YgYSBkZXZpY2UgaXMgZmluaXNoZWQgd2l0aCBpdC4gIFdoZW4gdGhlIGxhc3QKKyAqIHVzZXIgb2YgdGhlIGRldmljZSBjYWxscyB0aGlzIGZ1bmN0aW9uLCB0aGUgbWVtb3J5IG9mIHRoZSBkZXZpY2UgaXMgZnJlZWQuCisgKi8KK3ZvaWQgdXNiX3B1dF9kZXYoc3RydWN0IHVzYl9kZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2KQorCQlwdXRfZGV2aWNlKCZkZXYtPmRldik7Cit9CisKKy8qKgorICogdXNiX2dldF9pbnRmIC0gaW5jcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSB1c2IgaW50ZXJmYWNlIHN0cnVjdHVyZQorICogQGludGY6IHRoZSBpbnRlcmZhY2UgYmVpbmcgcmVmZXJlbmNlZAorICoKKyAqIEVhY2ggbGl2ZSByZWZlcmVuY2UgdG8gYSBpbnRlcmZhY2UgbXVzdCBiZSByZWZjb3VudGVkLgorICoKKyAqIERyaXZlcnMgZm9yIFVTQiBpbnRlcmZhY2VzIHNob3VsZCBub3JtYWxseSByZWNvcmQgc3VjaCByZWZlcmVuY2VzIGluCisgKiB0aGVpciBwcm9iZSgpIG1ldGhvZHMsIHdoZW4gdGhleSBiaW5kIHRvIGFuIGludGVyZmFjZSwgYW5kIHJlbGVhc2UKKyAqIHRoZW0gYnkgY2FsbGluZyB1c2JfcHV0X2ludGYoKSwgaW4gdGhlaXIgZGlzY29ubmVjdCgpIG1ldGhvZHMuCisgKgorICogQSBwb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugd2l0aCB0aGUgaW5jcmVtZW50ZWQgcmVmZXJlbmNlIGNvdW50ZXIgaXMKKyAqIHJldHVybmVkLgorICovCitzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdXNiX2dldF9pbnRmKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCWlmIChpbnRmKQorCQlnZXRfZGV2aWNlKCZpbnRmLT5kZXYpOworCXJldHVybiBpbnRmOworfQorCisvKioKKyAqIHVzYl9wdXRfaW50ZiAtIHJlbGVhc2UgYSB1c2Ugb2YgdGhlIHVzYiBpbnRlcmZhY2Ugc3RydWN0dXJlCisgKiBAaW50ZjogaW50ZXJmYWNlIHRoYXQncyBiZWVuIGRlY3JlbWVudGVkCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2hlbiBhIHVzZXIgb2YgYW4gaW50ZXJmYWNlIGlzIGZpbmlzaGVkIHdpdGggaXQuICBXaGVuIHRoZQorICogbGFzdCB1c2VyIG9mIHRoZSBpbnRlcmZhY2UgY2FsbHMgdGhpcyBmdW5jdGlvbiwgdGhlIG1lbW9yeSBvZiB0aGUgaW50ZXJmYWNlCisgKiBpcyBmcmVlZC4KKyAqLwordm9pZCB1c2JfcHV0X2ludGYoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJaWYgKGludGYpCisJCXB1dF9kZXZpY2UoJmludGYtPmRldik7Cit9CisKKworLyoJCQlVU0IgZGV2aWNlIGxvY2tpbmcKKyAqCisgKiBBbHRob3VnaCBsb2NraW5nIFVTQiBkZXZpY2VzIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQsIGl0IGlzCisgKiBjb21wbGljYXRlZCBieSB0aGUgd2F5IHRoZSBkcml2ZXItbW9kZWwgY29yZSB3b3Jrcy4gIFdoZW4gYSBuZXcgVVNCCisgKiBkcml2ZXIgaXMgcmVnaXN0ZXJlZCBvciB1bnJlZ2lzdGVyZWQsIHRoZSBjb3JlIHdpbGwgYXV0b21hdGljYWxseQorICogcHJvYmUgb3IgZGlzY29ubmVjdCBhbGwgbWF0Y2hpbmcgaW50ZXJmYWNlcyBvbiBhbGwgVVNCIGRldmljZXMgd2hpbGUKKyAqIGhvbGRpbmcgdGhlIFVTQiBzdWJzeXN0ZW0gd3JpdGVsb2NrLiAgVGhlcmUncyBubyBnb29kIHdheSBmb3IgdXMgdG8KKyAqIHRlbGwgd2hpY2ggZGV2aWNlcyB3aWxsIGJlIHVzZWQgb3IgdG8gbG9jayB0aGVtIGJlZm9yZWhhbmQ7IG91ciBvbmx5CisgKiBvcHRpb24gaXMgdG8gZWZmZWN0aXZlbHkgbG9jayBhbGwgdGhlIFVTQiBkZXZpY2VzLgorICoKKyAqIFdlIGRvIHRoYXQgYnkgdXNpbmcgYSBwcml2YXRlIHJ3LXNlbWFwaG9yZSwgdXNiX2FsbF9kZXZpY2VzX3J3c2VtLgorICogV2hlbiBsb2NraW5nIGFuIGluZGl2aWR1YWwgZGV2aWNlIHlvdSBtdXN0IGZpcnN0IGFjcXVpcmUgdGhlIHJ3c2VtJ3MKKyAqIHJlYWRsb2NrLiAgV2hlbiBhIGRyaXZlciBpcyByZWdpc3RlcmVkIG9yIHVucmVnaXN0ZXJlZCB0aGUgd3JpdGVsb2NrCisgKiBtdXN0IGJlIGhlbGQuICBUaGVzZSBhY3Rpb25zIGFyZSBlbmNhcHN1bGF0ZWQgaW4gdGhlIHN1YnJvdXRpbmVzCisgKiBiZWxvdywgc28gYWxsIGEgZHJpdmVyIG5lZWRzIHRvIGRvIGlzIGNhbGwgdXNiX2xvY2tfZGV2aWNlKCkgYW5kCisgKiB1c2JfdW5sb2NrX2RldmljZSgpLgorICoKKyAqIENvbXBsaWNhdGlvbnMgYXJpc2Ugd2hlbiBzZXZlcmFsIGRldmljZXMgYXJlIHRvIGJlIGxvY2tlZCBhdCB0aGUgc2FtZQorICogdGltZS4gIE9ubHkgaHViLWF3YXJlIGRyaXZlcnMgdGhhdCBhcmUgcGFydCBvZiB1c2Jjb3JlIGV2ZXIgaGF2ZSB0bworICogZG8gdGhpczsgbm9ib2R5IGVsc2UgbmVlZHMgdG8gd29ycnkgYWJvdXQgaXQuICBUaGUgcHJvYmxlbSBpcyB0aGF0CisgKiB1c2JfbG9ja19kZXZpY2UoKSBtdXN0IG5vdCBiZSBjYWxsZWQgdG8gbG9jayBhIHNlY29uZCBkZXZpY2Ugc2luY2UgaXQKKyAqIHdvdWxkIGFjcXVpcmUgdGhlIHJ3c2VtJ3MgcmVhZGxvY2sgcmVlbnRyYW50bHksIGxlYWRpbmcgdG8gZGVhZGxvY2sgaWYKKyAqIGFub3RoZXIgdGhyZWFkIHdhcyB3YWl0aW5nIGZvciB0aGUgd3JpdGVsb2NrLiAgVGhlIHNvbHV0aW9uIGlzIHNpbXBsZToKKyAqCisgKglXaGVuIGxvY2tpbmcgbW9yZSB0aGFuIG9uZSBkZXZpY2UsIGNhbGwgdXNiX2xvY2tfZGV2aWNlKCkKKyAqCXRvIGxvY2sgdGhlIGZpcnN0IG9uZS4gIExvY2sgdGhlIG90aGVycyBieSBjYWxsaW5nCisgKglkb3duKCZ1ZGV2LT5zZXJpYWxpemUpIGRpcmVjdGx5LgorICoKKyAqCVdoZW4gdW5sb2NraW5nIG11bHRpcGxlIGRldmljZXMsIHVzZSB1cCgmdWRldi0+c2VyaWFsaXplKQorICoJdG8gdW5sb2NrIGFsbCBidXQgdGhlIGxhc3Qgb25lLiAgVW5sb2NrIHRoZSBsYXN0IG9uZSBieQorICoJY2FsbGluZyB1c2JfdW5sb2NrX2RldmljZSgpLgorICoKKyAqCVdoZW4gbG9ja2luZyBib3RoIGEgZGV2aWNlIGFuZCBpdHMgcGFyZW50LCBhbHdheXMgbG9jayB0aGUKKyAqCXRoZSBwYXJlbnQgZmlyc3QuCisgKi8KKworLyoqCisgKiB1c2JfbG9ja19kZXZpY2UgLSBhY3F1aXJlIHRoZSBsb2NrIGZvciBhIHVzYiBkZXZpY2Ugc3RydWN0dXJlCisgKiBAdWRldjogZGV2aWNlIHRoYXQncyBiZWluZyBsb2NrZWQKKyAqCisgKiBVc2UgdGhpcyByb3V0aW5lIHdoZW4geW91IGRvbid0IGhvbGQgYW55IG90aGVyIGRldmljZSBsb2NrczsKKyAqIHRvIGFjcXVpcmUgbmVzdGVkIGlubmVyIGxvY2tzIGNhbGwgZG93bigmdWRldi0+c2VyaWFsaXplKSBkaXJlY3RseS4KKyAqIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBwcm9wZXIgaW50ZXJhY3Rpb24gd2l0aCB1c2JfbG9ja19hbGxfZGV2aWNlcygpLgorICovCit2b2lkIHVzYl9sb2NrX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlkb3duX3JlYWQoJnVzYl9hbGxfZGV2aWNlc19yd3NlbSk7CisJZG93bigmdWRldi0+c2VyaWFsaXplKTsKK30KKworLyoqCisgKiB1c2JfdHJ5bG9ja19kZXZpY2UgLSBhdHRlbXB0IHRvIGFjcXVpcmUgdGhlIGxvY2sgZm9yIGEgdXNiIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEB1ZGV2OiBkZXZpY2UgdGhhdCdzIGJlaW5nIGxvY2tlZAorICoKKyAqIERvbid0IHVzZSB0aGlzIHJvdXRpbmUgaWYgeW91IGFscmVhZHkgaG9sZCBhIGRldmljZSBsb2NrOworICogdXNlIGRvd25fdHJ5bG9jaygmdWRldi0+c2VyaWFsaXplKSBpbnN0ZWFkLgorICogVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHByb3BlciBpbnRlcmFjdGlvbiB3aXRoIHVzYl9sb2NrX2FsbF9kZXZpY2VzKCkuCisgKgorICogUmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwsIDAgaWYgY29udGVudGlvbi4KKyAqLworaW50IHVzYl90cnlsb2NrX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpZiAoIWRvd25fcmVhZF90cnlsb2NrKCZ1c2JfYWxsX2RldmljZXNfcndzZW0pKQorCQlyZXR1cm4gMDsKKwlpZiAoZG93bl90cnlsb2NrKCZ1ZGV2LT5zZXJpYWxpemUpKSB7CisJCXVwX3JlYWQoJnVzYl9hbGxfZGV2aWNlc19yd3NlbSk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0IC0gY2F1dGlvdXNseSBhY3F1aXJlIHRoZSBsb2NrIGZvciBhCisgKgl1c2IgZGV2aWNlIHN0cnVjdHVyZQorICogQHVkZXY6IGRldmljZSB0aGF0J3MgYmVpbmcgbG9ja2VkCisgKiBAaWZhY2U6IGludGVyZmFjZSBib3VuZCB0byB0aGUgZHJpdmVyIG1ha2luZyB0aGUgcmVxdWVzdCAob3B0aW9uYWwpCisgKgorICogQXR0ZW1wdHMgdG8gYWNxdWlyZSB0aGUgZGV2aWNlIGxvY2ssIGJ1dCBmYWlscyBpZiB0aGUgZGV2aWNlIGlzCisgKiBOT1RBVFRBQ0hFRCBvciBTVVNQRU5ERUQsIG9yIGlmIGlmYWNlIGlzIHNwZWNpZmllZCBhbmQgdGhlIGludGVyZmFjZQorICogaXMgbmVpdGhlciBCSU5ESU5HIG5vciBCT1VORC4gIFJhdGhlciB0aGFuIHNsZWVwaW5nIHRvIHdhaXQgZm9yIHRoZQorICogbG9jaywgdGhlIHJvdXRpbmUgcG9sbHMgcmVwZWF0ZWRseS4gIFRoaXMgaXMgdG8gcHJldmVudCBkZWFkbG9jayB3aXRoCisgKiBkaXNjb25uZWN0OyBpbiBzb21lIGRyaXZlcnMgKHN1Y2ggYXMgdXNiLXN0b3JhZ2UpIHRoZSBkaXNjb25uZWN0KCkKKyAqIGNhbGxiYWNrIHdpbGwgYmxvY2sgd2FpdGluZyBmb3IgYSBkZXZpY2UgcmVzZXQgdG8gY29tcGxldGUuCisgKgorICogUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgZm9yIGZhaWx1cmUsIG90aGVyd2lzZSAxIG9yIDAgdG8gaW5kaWNhdGUKKyAqIHRoYXQgdGhlIGRldmljZSB3aWxsIG9yIHdpbGwgbm90IGhhdmUgdG8gYmUgdW5sb2NrZWQuICAoMCBjYW4gYmUKKyAqIHJldHVybmVkIHdoZW4gYW4gaW50ZXJmYWNlIGlzIGdpdmVuIGFuZCBpcyBCSU5ESU5HLCBiZWNhdXNlIGluIHRoYXQKKyAqIGNhc2UgdGhlIGRyaXZlciBhbHJlYWR5IG93bnMgdGhlIGRldmljZSBsb2NrLikKKyAqLworaW50IHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKK3sKKwlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKKwkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CisJaWYgKGlmYWNlKSB7CisJCXN3aXRjaCAoaWZhY2UtPmNvbmRpdGlvbikgeworCQkgIGNhc2UgVVNCX0lOVEVSRkFDRV9CSU5ESU5HOgorCQkJcmV0dXJuIDA7CisJCSAgY2FzZSBVU0JfSU5URVJGQUNFX0JPVU5EOgorCQkJYnJlYWs7CisJCSAgZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVFI7CisJCX0KKwl9CisKKwl3aGlsZSAoIXVzYl90cnlsb2NrX2RldmljZSh1ZGV2KSkgeworCQltc2xlZXAoMTUpOworCQlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKQorCQkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CisJCWlmIChpZmFjZSAmJiBpZmFjZS0+Y29uZGl0aW9uICE9IFVTQl9JTlRFUkZBQ0VfQk9VTkQpCisJCQlyZXR1cm4gLUVJTlRSOworCX0KKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiB1c2JfdW5sb2NrX2RldmljZSAtIHJlbGVhc2UgdGhlIGxvY2sgZm9yIGEgdXNiIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEB1ZGV2OiBkZXZpY2UgdGhhdCdzIGJlaW5nIHVubG9ja2VkCisgKgorICogVXNlIHRoaXMgcm91dGluZSB3aGVuIHJlbGVhc2luZyB0aGUgb25seSBkZXZpY2UgbG9jayB5b3UgaG9sZDsKKyAqIHRvIHJlbGVhc2UgaW5uZXIgbmVzdGVkIGxvY2tzIGNhbGwgdXAoJnVkZXYtPnNlcmlhbGl6ZSkgZGlyZWN0bHkuCisgKiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgcHJvcGVyIGludGVyYWN0aW9uIHdpdGggdXNiX2xvY2tfYWxsX2RldmljZXMoKS4KKyAqLwordm9pZCB1c2JfdW5sb2NrX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwl1cCgmdWRldi0+c2VyaWFsaXplKTsKKwl1cF9yZWFkKCZ1c2JfYWxsX2RldmljZXNfcndzZW0pOworfQorCisvKioKKyAqIHVzYl9sb2NrX2FsbF9kZXZpY2VzIC0gYWNxdWlyZSB0aGUgbG9jayBmb3IgYWxsIHVzYiBkZXZpY2Ugc3RydWN0dXJlcworICoKKyAqIFRoaXMgaXMgbmVjZXNzYXJ5IHdoZW4gcmVnaXN0ZXJpbmcgYSBuZXcgZHJpdmVyIG9yIHByb2JpbmcgYSBidXMsCisgKiBzaW5jZSB0aGUgZHJpdmVyLW1vZGVsIGNvcmUgbWF5IHRyeSB0byB1c2UgYW55IHVzYl9kZXZpY2UuCisgKi8KK3ZvaWQgdXNiX2xvY2tfYWxsX2RldmljZXModm9pZCkKK3sKKwlkb3duX3dyaXRlKCZ1c2JfYWxsX2RldmljZXNfcndzZW0pOworfQorCisvKioKKyAqIHVzYl91bmxvY2tfYWxsX2RldmljZXMgLSByZWxlYXNlIHRoZSBsb2NrIGZvciBhbGwgdXNiIGRldmljZSBzdHJ1Y3R1cmVzCisgKi8KK3ZvaWQgdXNiX3VubG9ja19hbGxfZGV2aWNlcyh2b2lkKQoreworCXVwX3dyaXRlKCZ1c2JfYWxsX2RldmljZXNfcndzZW0pOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZSAqbWF0Y2hfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHUxNiB2ZW5kb3JfaWQsIHUxNiBwcm9kdWN0X2lkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpyZXRfZGV2ID0gTlVMTDsKKwlpbnQgY2hpbGQ7CisKKwlkZXZfZGJnKCZkZXYtPmRldiwgImNoZWNrIGZvciB2ZW5kb3IgJTA0eCwgcHJvZHVjdCAlMDR4IC4uLlxuIiwKKwkgICAgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkgICAgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOworCisJLyogc2VlIGlmIHRoaXMgZGV2aWNlIG1hdGNoZXMgKi8KKwlpZiAoKHZlbmRvcl9pZCA9PSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpKSAmJgorCSAgICAocHJvZHVjdF9pZCA9PSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSkpIHsKKwkJZGV2X2RiZyAoJmRldi0+ZGV2LCAibWF0Y2hlZCB0aGlzIGRldmljZSFcbiIpOworCQlyZXRfZGV2ID0gdXNiX2dldF9kZXYoZGV2KTsKKwkJZ290byBleGl0OworCX0KKworCS8qIGxvb2sgdGhyb3VnaCBhbGwgb2YgdGhlIGNoaWxkcmVuIG9mIHRoaXMgZGV2aWNlICovCisJZm9yIChjaGlsZCA9IDA7IGNoaWxkIDwgZGV2LT5tYXhjaGlsZDsgKytjaGlsZCkgeworCQlpZiAoZGV2LT5jaGlsZHJlbltjaGlsZF0pIHsKKwkJCWRvd24oJmRldi0+Y2hpbGRyZW5bY2hpbGRdLT5zZXJpYWxpemUpOworCQkJcmV0X2RldiA9IG1hdGNoX2RldmljZShkZXYtPmNoaWxkcmVuW2NoaWxkXSwKKwkJCQkJICAgICAgIHZlbmRvcl9pZCwgcHJvZHVjdF9pZCk7CisJCQl1cCgmZGV2LT5jaGlsZHJlbltjaGlsZF0tPnNlcmlhbGl6ZSk7CisJCQlpZiAocmV0X2RldikKKwkJCQlnb3RvIGV4aXQ7CisJCX0KKwl9CitleGl0OgorCXJldHVybiByZXRfZGV2OworfQorCisvKioKKyAqIHVzYl9maW5kX2RldmljZSAtIGZpbmQgYSBzcGVjaWZpYyB1c2IgZGV2aWNlIGluIHRoZSBzeXN0ZW0KKyAqIEB2ZW5kb3JfaWQ6IHRoZSB2ZW5kb3IgaWQgb2YgdGhlIGRldmljZSB0byBmaW5kCisgKiBAcHJvZHVjdF9pZDogdGhlIHByb2R1Y3QgaWQgb2YgdGhlIGRldmljZSB0byBmaW5kCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgdXNiX2RldmljZSBpZiBzdWNoIGEgc3BlY2lmaWVkIHVzYgorICogZGV2aWNlIGlzIHByZXNlbnQgaW4gdGhlIHN5c3RlbSBjdXJyZW50bHkuICBUaGUgdXNhZ2UgY291bnQgb2YgdGhlCisgKiBkZXZpY2Ugd2lsbCBiZSBpbmNyZW1lbnRlZCBpZiBhIGRldmljZSBpcyBmb3VuZC4gIE1ha2Ugc3VyZSB0byBjYWxsCisgKiB1c2JfcHV0X2RldigpIHdoZW4gdGhlIGNhbGxlciBpcyBmaW5pc2hlZCB3aXRoIHRoZSBkZXZpY2UuCisgKgorICogSWYgYSBkZXZpY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHZlbmRvciBhbmQgcHJvZHVjdCBpZCBpcyBub3QgZm91bmQsCisgKiBOVUxMIGlzIHJldHVybmVkLgorICovCitzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2ZpbmRfZGV2aWNlKHUxNiB2ZW5kb3JfaWQsIHUxNiBwcm9kdWN0X2lkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmJ1c2xpc3Q7CisJc3RydWN0IHVzYl9idXMgKmJ1czsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gTlVMTDsKKwkKKwlkb3duKCZ1c2JfYnVzX2xpc3RfbG9jayk7CisJZm9yIChidXNsaXN0ID0gdXNiX2J1c19saXN0Lm5leHQ7CisJICAgICBidXNsaXN0ICE9ICZ1c2JfYnVzX2xpc3Q7IAorCSAgICAgYnVzbGlzdCA9IGJ1c2xpc3QtPm5leHQpIHsKKwkJYnVzID0gY29udGFpbmVyX29mKGJ1c2xpc3QsIHN0cnVjdCB1c2JfYnVzLCBidXNfbGlzdCk7CisJCWlmICghYnVzLT5yb290X2h1YikKKwkJCWNvbnRpbnVlOworCQl1c2JfbG9ja19kZXZpY2UoYnVzLT5yb290X2h1Yik7CisJCWRldiA9IG1hdGNoX2RldmljZShidXMtPnJvb3RfaHViLCB2ZW5kb3JfaWQsIHByb2R1Y3RfaWQpOworCQl1c2JfdW5sb2NrX2RldmljZShidXMtPnJvb3RfaHViKTsKKwkJaWYgKGRldikKKwkJCWdvdG8gZXhpdDsKKwl9CitleGl0OgorCXVwKCZ1c2JfYnVzX2xpc3RfbG9jayk7CisJcmV0dXJuIGRldjsKK30KKworLyoqCisgKiB1c2JfZ2V0X2N1cnJlbnRfZnJhbWVfbnVtYmVyIC0gcmV0dXJuIGN1cnJlbnQgYnVzIGZyYW1lIG51bWJlcgorICogQGRldjogdGhlIGRldmljZSB3aG9zZSBidXMgaXMgYmVpbmcgcXVlcmllZAorICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgZnJhbWUgbnVtYmVyIGZvciB0aGUgVVNCIGhvc3QgY29udHJvbGxlcgorICogdXNlZCB3aXRoIHRoZSBnaXZlbiBVU0IgZGV2aWNlLiAgVGhpcyBjYW4gYmUgdXNlZCB3aGVuIHNjaGVkdWxpbmcKKyAqIGlzb2Nocm9ub3VzIHJlcXVlc3RzLgorICoKKyAqIE5vdGUgdGhhdCBkaWZmZXJlbnQga2luZHMgb2YgaG9zdCBjb250cm9sbGVyIGhhdmUgZGlmZmVyZW50CisgKiAic2NoZWR1bGluZyBob3Jpem9ucyIuICBXaGlsZSBvbmUgdHlwZSBtaWdodCBzdXBwb3J0IHNjaGVkdWxpbmcgb25seQorICogMzIgZnJhbWVzIGludG8gdGhlIGZ1dHVyZSwgb3RoZXJzIGNvdWxkIHN1cHBvcnQgc2NoZWR1bGluZyB1cCB0bworICogMTAyNCBmcmFtZXMgaW50byB0aGUgZnV0dXJlLgorICovCitpbnQgdXNiX2dldF9jdXJyZW50X2ZyYW1lX251bWJlcihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPmJ1cy0+b3AtPmdldF9mcmFtZV9udW1iZXIgKGRldik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogX191c2JfZ2V0X2V4dHJhX2Rlc2NyaXB0b3IoKSBmaW5kcyBhIGRlc2NyaXB0b3Igb2Ygc3BlY2lmaWMgdHlwZSBpbiB0aGUKKyAqIGV4dHJhIGZpZWxkIG9mIHRoZSBpbnRlcmZhY2UgYW5kIGVuZHBvaW50IGRlc2NyaXB0b3Igc3RydWN0cy4KKyAqLworCitpbnQgX191c2JfZ2V0X2V4dHJhX2Rlc2NyaXB0b3IoY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBzaXplLAorCXVuc2lnbmVkIGNoYXIgdHlwZSwgdm9pZCAqKnB0cikKK3sKKwlzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoZWFkZXI7CisKKwl3aGlsZSAoc2l6ZSA+PSBzaXplb2Yoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlcikpIHsKKwkJaGVhZGVyID0gKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKilidWZmZXI7CisKKwkJaWYgKGhlYWRlci0+Ykxlbmd0aCA8IDIpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSIlczogYm9ndXMgZGVzY3JpcHRvciwgdHlwZSAlZCBsZW5ndGggJWRcbiIsCisJCQkJdXNiY29yZV9uYW1lLAorCQkJCWhlYWRlci0+YkRlc2NyaXB0b3JUeXBlLCAKKwkJCQloZWFkZXItPmJMZW5ndGgpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKGhlYWRlci0+YkRlc2NyaXB0b3JUeXBlID09IHR5cGUpIHsKKwkJCSpwdHIgPSBoZWFkZXI7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWJ1ZmZlciArPSBoZWFkZXItPmJMZW5ndGg7CisJCXNpemUgLT0gaGVhZGVyLT5iTGVuZ3RoOworCX0KKwlyZXR1cm4gLTE7Cit9CisKKy8qKgorICogdXNiX2J1ZmZlcl9hbGxvYyAtIGFsbG9jYXRlIGRtYS1jb25zaXN0ZW50IGJ1ZmZlciBmb3IgVVJCX05PX3h4eF9ETUFfTUFQCisgKiBAZGV2OiBkZXZpY2UgdGhlIGJ1ZmZlciB3aWxsIGJlIHVzZWQgd2l0aAorICogQHNpemU6IHJlcXVlc3RlZCBidWZmZXIgc2l6ZQorICogQG1lbV9mbGFnczogYWZmZWN0IHdoZXRoZXIgYWxsb2NhdGlvbiBtYXkgYmxvY2sKKyAqIEBkbWE6IHVzZWQgdG8gcmV0dXJuIERNQSBhZGRyZXNzIG9mIGJ1ZmZlcgorICoKKyAqIFJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCAoaW5kaWNhdGluZyBubyBidWZmZXIgY291bGQgYmUgYWxsb2NhdGVkKSwgb3IKKyAqIHRoZSBjcHUtc3BhY2UgcG9pbnRlciB0byBhIGJ1ZmZlciB0aGF0IG1heSBiZSB1c2VkIHRvIHBlcmZvcm0gRE1BIHRvIHRoZQorICogc3BlY2lmaWVkIGRldmljZS4gIFN1Y2ggY3B1LXNwYWNlIGJ1ZmZlcnMgYXJlIHJldHVybmVkIGFsb25nIHdpdGggdGhlIERNQQorICogYWRkcmVzcyAodGhyb3VnaCB0aGUgcG9pbnRlciBwcm92aWRlZCkuCisgKgorICogVGhlc2UgYnVmZmVycyBhcmUgdXNlZCB3aXRoIFVSQl9OT194eHhfRE1BX01BUCBzZXQgaW4gdXJiLT50cmFuc2Zlcl9mbGFncworICogdG8gYXZvaWQgYmVoYXZpb3JzIGxpa2UgdXNpbmcgIkRNQSBib3VuY2UgYnVmZmVycyIsIG9yIHR5aW5nIGRvd24gSS9PCisgKiBtYXBwaW5nIGhhcmR3YXJlIGZvciBsb25nIGlkbGUgcGVyaW9kcy4gIFRoZSBpbXBsZW1lbnRhdGlvbiB2YXJpZXMgYmV0d2VlbgorICogcGxhdGZvcm1zLCBkZXBlbmRpbmcgb24gZGV0YWlscyBvZiBob3cgRE1BIHdpbGwgd29yayB0byB0aGlzIGRldmljZS4KKyAqIFVzaW5nIHRoZXNlIGJ1ZmZlcnMgYWxzbyBoZWxwcyBwcmV2ZW50IGNhY2hlbGluZSBzaGFyaW5nIHByb2JsZW1zIG9uCisgKiBhcmNoaXRlY3R1cmVzIHdoZXJlIENQVSBjYWNoZXMgYXJlIG5vdCBETUEtY29oZXJlbnQuCisgKgorICogV2hlbiB0aGUgYnVmZmVyIGlzIG5vIGxvbmdlciB1c2VkLCBmcmVlIGl0IHdpdGggdXNiX2J1ZmZlcl9mcmVlKCkuCisgKi8KK3ZvaWQgKnVzYl9idWZmZXJfYWxsb2MgKAorCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCisJc2l6ZV90IHNpemUsCisJaW50IG1lbV9mbGFncywKKwlkbWFfYWRkcl90ICpkbWEKKykKK3sKKwlpZiAoIWRldiB8fCAhZGV2LT5idXMgfHwgIWRldi0+YnVzLT5vcCB8fCAhZGV2LT5idXMtPm9wLT5idWZmZXJfYWxsb2MpCisJCXJldHVybiBOVUxMOworCXJldHVybiBkZXYtPmJ1cy0+b3AtPmJ1ZmZlcl9hbGxvYyAoZGV2LT5idXMsIHNpemUsIG1lbV9mbGFncywgZG1hKTsKK30KKworLyoqCisgKiB1c2JfYnVmZmVyX2ZyZWUgLSBmcmVlIG1lbW9yeSBhbGxvY2F0ZWQgd2l0aCB1c2JfYnVmZmVyX2FsbG9jKCkKKyAqIEBkZXY6IGRldmljZSB0aGUgYnVmZmVyIHdhcyB1c2VkIHdpdGgKKyAqIEBzaXplOiByZXF1ZXN0ZWQgYnVmZmVyIHNpemUKKyAqIEBhZGRyOiBDUFUgYWRkcmVzcyBvZiBidWZmZXIKKyAqIEBkbWE6IERNQSBhZGRyZXNzIG9mIGJ1ZmZlcgorICoKKyAqIFRoaXMgcmVjbGFpbXMgYW4gSS9PIGJ1ZmZlciwgbGV0dGluZyBpdCBiZSByZXVzZWQuICBUaGUgbWVtb3J5IG11c3QgaGF2ZQorICogYmVlbiBhbGxvY2F0ZWQgdXNpbmcgdXNiX2J1ZmZlcl9hbGxvYygpLCBhbmQgdGhlIHBhcmFtZXRlcnMgbXVzdCBtYXRjaAorICogdGhvc2UgcHJvdmlkZWQgaW4gdGhhdCBhbGxvY2F0aW9uIHJlcXVlc3QuIAorICovCit2b2lkIHVzYl9idWZmZXJfZnJlZSAoCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKKwlzaXplX3Qgc2l6ZSwKKwl2b2lkICphZGRyLAorCWRtYV9hZGRyX3QgZG1hCispCit7CisJaWYgKCFkZXYgfHwgIWRldi0+YnVzIHx8ICFkZXYtPmJ1cy0+b3AgfHwgIWRldi0+YnVzLT5vcC0+YnVmZmVyX2ZyZWUpCisJICAgIAlyZXR1cm47CisJZGV2LT5idXMtPm9wLT5idWZmZXJfZnJlZSAoZGV2LT5idXMsIHNpemUsIGFkZHIsIGRtYSk7Cit9CisKKy8qKgorICogdXNiX2J1ZmZlcl9tYXAgLSBjcmVhdGUgRE1BIG1hcHBpbmcocykgZm9yIGFuIHVyYgorICogQHVyYjogdXJiIHdob3NlIHRyYW5zZmVyX2J1ZmZlci9zZXR1cF9wYWNrZXQgd2lsbCBiZSBtYXBwZWQKKyAqCisgKiBSZXR1cm4gdmFsdWUgaXMgZWl0aGVyIG51bGwgKGluZGljYXRpbmcgbm8gYnVmZmVyIGNvdWxkIGJlIG1hcHBlZCksIG9yCisgKiB0aGUgcGFyYW1ldGVyLiAgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVAgYW5kIFVSQl9OT19TRVRVUF9ETUFfTUFQIGFyZQorICogYWRkZWQgdG8gdXJiLT50cmFuc2Zlcl9mbGFncyBpZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRzLiAgSWYgdGhlIGRldmljZQorICogaXMgY29ubmVjdGVkIHRvIHRoaXMgc3lzdGVtIHRocm91Z2ggYSBub24tRE1BIGNvbnRyb2xsZXIsIHRoaXMgb3BlcmF0aW9uCisgKiBhbHdheXMgc3VjY2VlZHMuCisgKgorICogVGhpcyBjYWxsIHdvdWxkIG5vcm1hbGx5IGJlIHVzZWQgZm9yIGFuIHVyYiB3aGljaCBpcyByZXVzZWQsIHBlcmhhcHMKKyAqIGFzIHRoZSB0YXJnZXQgb2YgYSBsYXJnZSBwZXJpb2RpYyB0cmFuc2Zlciwgd2l0aCB1c2JfYnVmZmVyX2RtYXN5bmMoKQorICogY2FsbHMgdG8gc3luY2hyb25pemUgbWVtb3J5IGFuZCBkbWEgc3RhdGUuCisgKgorICogUmV2ZXJzZSB0aGUgZWZmZWN0IG9mIHRoaXMgY2FsbCB3aXRoIHVzYl9idWZmZXJfdW5tYXAoKS4KKyAqLworI2lmIDAKK3N0cnVjdCB1cmIgKnVzYl9idWZmZXJfbWFwIChzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9idXMJCSpidXM7CisJc3RydWN0IGRldmljZQkJKmNvbnRyb2xsZXI7CisKKwlpZiAoIXVyYgorCQkJfHwgIXVyYi0+ZGV2CisJCQl8fCAhKGJ1cyA9IHVyYi0+ZGV2LT5idXMpCisJCQl8fCAhKGNvbnRyb2xsZXIgPSBidXMtPmNvbnRyb2xsZXIpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChjb250cm9sbGVyLT5kbWFfbWFzaykgeworCQl1cmItPnRyYW5zZmVyX2RtYSA9IGRtYV9tYXBfc2luZ2xlIChjb250cm9sbGVyLAorCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCXVzYl9waXBlaW4gKHVyYi0+cGlwZSkKKwkJCQk/IERNQV9GUk9NX0RFVklDRSA6IERNQV9UT19ERVZJQ0UpOworCQlpZiAodXNiX3BpcGVjb250cm9sICh1cmItPnBpcGUpKQorCQkJdXJiLT5zZXR1cF9kbWEgPSBkbWFfbWFwX3NpbmdsZSAoY29udHJvbGxlciwKKwkJCQkJdXJiLT5zZXR1cF9wYWNrZXQsCisJCQkJCXNpemVvZiAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksCisJCQkJCURNQV9UT19ERVZJQ0UpOworCS8vIEZJWE1FIGdlbmVyaWMgYXBpIGJyb2tlbiBsaWtlIHBjaSwgY2FuJ3QgcmVwb3J0IGVycm9ycworCS8vIGlmICh1cmItPnRyYW5zZmVyX2RtYSA9PSBETUFfQUREUl9JTlZBTElEKSByZXR1cm4gMDsKKwl9IGVsc2UKKwkJdXJiLT50cmFuc2Zlcl9kbWEgPSB+MDsKKwl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IChVUkJfTk9fVFJBTlNGRVJfRE1BX01BUAorCQkJCXwgVVJCX05PX1NFVFVQX0RNQV9NQVApOworCXJldHVybiB1cmI7Cit9CisjZW5kaWYgIC8qICAwICAqLworCisvKiBYWFggRElTQUJMRUQsIG5vIHVzZXJzIGN1cnJlbnRseS4gIElmIHlvdSB3aXNoIHRvIHJlLWVuYWJsZSB0aGlzCisgKiBYWFggcGxlYXNlIGRldGVybWluZSB3aGV0aGVyIHRoZSBzeW5jIGlzIHRvIHRyYW5zZmVyIG93bmVyc2hpcCBvZgorICogWFhYIHRoZSBidWZmZXIgZnJvbSBkZXZpY2UgdG8gY3B1IG9yIHZpY2UgdmVyc2UsIGFuZCB0aHVzbHkgdXNlIHRoZQorICogWFhYIGFwcHJvcHJpYXRlIF9mb3Jfe2NwdSxkZXZpY2V9KCkgbWV0aG9kLiAgLURhdmVNCisgKi8KKyNpZiAwCisKKy8qKgorICogdXNiX2J1ZmZlcl9kbWFzeW5jIC0gc3luY2hyb25pemUgRE1BIGFuZCBDUFUgdmlldyBvZiBidWZmZXIocykKKyAqIEB1cmI6IHVyYiB3aG9zZSB0cmFuc2Zlcl9idWZmZXIvc2V0dXBfcGFja2V0IHdpbGwgYmUgc3luY2hyb25pemVkCisgKi8KK3ZvaWQgdXNiX2J1ZmZlcl9kbWFzeW5jIChzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9idXMJCSpidXM7CisJc3RydWN0IGRldmljZQkJKmNvbnRyb2xsZXI7CisKKwlpZiAoIXVyYgorCQkJfHwgISh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVApCisJCQl8fCAhdXJiLT5kZXYKKwkJCXx8ICEoYnVzID0gdXJiLT5kZXYtPmJ1cykKKwkJCXx8ICEoY29udHJvbGxlciA9IGJ1cy0+Y29udHJvbGxlcikpCisJCXJldHVybjsKKworCWlmIChjb250cm9sbGVyLT5kbWFfbWFzaykgeworCQlkbWFfc3luY19zaW5nbGUgKGNvbnRyb2xsZXIsCisJCQl1cmItPnRyYW5zZmVyX2RtYSwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJdXNiX3BpcGVpbiAodXJiLT5waXBlKQorCQkJCT8gRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRSk7CisJCWlmICh1c2JfcGlwZWNvbnRyb2wgKHVyYi0+cGlwZSkpCisJCQlkbWFfc3luY19zaW5nbGUgKGNvbnRyb2xsZXIsCisJCQkJCXVyYi0+c2V0dXBfZG1hLAorCQkJCQlzaXplb2YgKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpLAorCQkJCQlETUFfVE9fREVWSUNFKTsKKwl9Cit9CisjZW5kaWYKKworLyoqCisgKiB1c2JfYnVmZmVyX3VubWFwIC0gZnJlZSBETUEgbWFwcGluZyhzKSBmb3IgYW4gdXJiCisgKiBAdXJiOiB1cmIgd2hvc2UgdHJhbnNmZXJfYnVmZmVyIHdpbGwgYmUgdW5tYXBwZWQKKyAqCisgKiBSZXZlcnNlcyB0aGUgZWZmZWN0IG9mIHVzYl9idWZmZXJfbWFwKCkuCisgKi8KKyNpZiAwCit2b2lkIHVzYl9idWZmZXJfdW5tYXAgKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXNiX2J1cwkJKmJ1czsKKwlzdHJ1Y3QgZGV2aWNlCQkqY29udHJvbGxlcjsKKworCWlmICghdXJiCisJCQl8fCAhKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUCkKKwkJCXx8ICF1cmItPmRldgorCQkJfHwgIShidXMgPSB1cmItPmRldi0+YnVzKQorCQkJfHwgIShjb250cm9sbGVyID0gYnVzLT5jb250cm9sbGVyKSkKKwkJcmV0dXJuOworCisJaWYgKGNvbnRyb2xsZXItPmRtYV9tYXNrKSB7CisJCWRtYV91bm1hcF9zaW5nbGUgKGNvbnRyb2xsZXIsCisJCQl1cmItPnRyYW5zZmVyX2RtYSwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJdXNiX3BpcGVpbiAodXJiLT5waXBlKQorCQkJCT8gRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRSk7CisJCWlmICh1c2JfcGlwZWNvbnRyb2wgKHVyYi0+cGlwZSkpCisJCQlkbWFfdW5tYXBfc2luZ2xlIChjb250cm9sbGVyLAorCQkJCQl1cmItPnNldHVwX2RtYSwKKwkJCQkJc2l6ZW9mIChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KSwKKwkJCQkJRE1BX1RPX0RFVklDRSk7CisJfQorCXVyYi0+dHJhbnNmZXJfZmxhZ3MgJj0gfihVUkJfTk9fVFJBTlNGRVJfRE1BX01BUAorCQkJCXwgVVJCX05PX1NFVFVQX0RNQV9NQVApOworfQorI2VuZGlmICAvKiAgMCAgKi8KKworLyoqCisgKiB1c2JfYnVmZmVyX21hcF9zZyAtIGNyZWF0ZSBzY2F0dGVybGlzdCBETUEgbWFwcGluZyhzKSBmb3IgYW4gZW5kcG9pbnQKKyAqIEBkZXY6IGRldmljZSB0byB3aGljaCB0aGUgc2NhdHRlcmxpc3Qgd2lsbCBiZSBtYXBwZWQKKyAqIEBwaXBlOiBlbmRwb2ludCBkZWZpbmluZyB0aGUgbWFwcGluZyBkaXJlY3Rpb24KKyAqIEBzZzogdGhlIHNjYXR0ZXJsaXN0IHRvIG1hcAorICogQG5lbnRzOiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHNjYXR0ZXJsaXN0CisgKgorICogUmV0dXJuIHZhbHVlIGlzIGVpdGhlciA8IDAgKGluZGljYXRpbmcgbm8gYnVmZmVycyBjb3VsZCBiZSBtYXBwZWQpLCBvcgorICogdGhlIG51bWJlciBvZiBETUEgbWFwcGluZyBhcnJheSBlbnRyaWVzIGluIHRoZSBzY2F0dGVybGlzdC4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBwbGFjaW5nIHRoZSByZXN1bHRpbmcgRE1BIGFkZHJlc3NlcyBmcm9tCisgKiB0aGUgc2NhdHRlcmxpc3QgaW50byBVUkIgdHJhbnNmZXIgYnVmZmVyIHBvaW50ZXJzLCBhbmQgZm9yIHNldHRpbmcgdGhlCisgKiBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUCB0cmFuc2ZlciBmbGFnIGluIGVhY2ggb2YgdGhvc2UgVVJCcy4KKyAqCisgKiBUb3AgSS9PIHJhdGVzIGNvbWUgZnJvbSBxdWV1aW5nIFVSQnMsIGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgZWFjaCBvbmUKKyAqIHRvIGNvbXBsZXRlIGJlZm9yZSBzdGFydGluZyB0aGUgbmV4dCBJL08uICAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgZWFzeQorICogdG8gZG8gd2l0aCBzY2F0dGVybGlzdHMuICBKdXN0IGFsbG9jYXRlIGFuZCBzdWJtaXQgb25lIFVSQiBmb3IgZWFjaCBETUEKKyAqIG1hcHBpbmcgZW50cnkgcmV0dXJuZWQsIHN0b3BwaW5nIG9uIHRoZSBmaXJzdCBlcnJvciBvciB3aGVuIGFsbCBzdWNjZWVkLgorICogQmV0dGVyIHlldCwgdXNlIHRoZSB1c2Jfc2dfKigpIGNhbGxzLCB3aGljaCBkbyB0aGF0IChhbmQgbW9yZSkgZm9yIHlvdS4KKyAqCisgKiBUaGlzIGNhbGwgd291bGQgbm9ybWFsbHkgYmUgdXNlZCB3aGVuIHRyYW5zbGF0aW5nIHNjYXR0ZXJsaXN0IHJlcXVlc3RzLAorICogcmF0aGVyIHRoYW4gdXNiX2J1ZmZlcl9tYXAoKSwgc2luY2Ugb24gc29tZSBoYXJkd2FyZSAod2l0aCBJT01NVXMpIGl0CisgKiBtYXkgYmUgYWJsZSB0byBjb2FsZXNjZSBtYXBwaW5ncyBmb3IgaW1wcm92ZWQgSS9PIGVmZmljaWVuY3kuCisgKgorICogUmV2ZXJzZSB0aGUgZWZmZWN0IG9mIHRoaXMgY2FsbCB3aXRoIHVzYl9idWZmZXJfdW5tYXBfc2coKS4KKyAqLworaW50IHVzYl9idWZmZXJfbWFwX3NnIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBwaXBlLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMpCit7CisJc3RydWN0IHVzYl9idXMJCSpidXM7CisJc3RydWN0IGRldmljZQkJKmNvbnRyb2xsZXI7CisKKwlpZiAoIWRldgorCQkJfHwgdXNiX3BpcGVjb250cm9sIChwaXBlKQorCQkJfHwgIShidXMgPSBkZXYtPmJ1cykKKwkJCXx8ICEoY29udHJvbGxlciA9IGJ1cy0+Y29udHJvbGxlcikKKwkJCXx8ICFjb250cm9sbGVyLT5kbWFfbWFzaykKKwkJcmV0dXJuIC0xOworCisJLy8gRklYTUUgZ2VuZXJpYyBhcGkgYnJva2VuIGxpa2UgcGNpLCBjYW4ndCByZXBvcnQgZXJyb3JzCisJcmV0dXJuIGRtYV9tYXBfc2cgKGNvbnRyb2xsZXIsIHNnLCBuZW50cywKKwkJCXVzYl9waXBlaW4gKHBpcGUpID8gRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRSk7Cit9CisKKy8qIFhYWCBESVNBQkxFRCwgbm8gdXNlcnMgY3VycmVudGx5LiAgSWYgeW91IHdpc2ggdG8gcmUtZW5hYmxlIHRoaXMKKyAqIFhYWCBwbGVhc2UgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHN5bmMgaXMgdG8gdHJhbnNmZXIgb3duZXJzaGlwIG9mCisgKiBYWFggdGhlIGJ1ZmZlciBmcm9tIGRldmljZSB0byBjcHUgb3IgdmljZSB2ZXJzZSwgYW5kIHRodXNseSB1c2UgdGhlCisgKiBYWFggYXBwcm9wcmlhdGUgX2Zvcl97Y3B1LGRldmljZX0oKSBtZXRob2QuICAtRGF2ZU0KKyAqLworI2lmIDAKKworLyoqCisgKiB1c2JfYnVmZmVyX2RtYXN5bmNfc2cgLSBzeW5jaHJvbml6ZSBETUEgYW5kIENQVSB2aWV3IG9mIHNjYXR0ZXJsaXN0IGJ1ZmZlcihzKQorICogQGRldjogZGV2aWNlIHRvIHdoaWNoIHRoZSBzY2F0dGVybGlzdCB3aWxsIGJlIG1hcHBlZAorICogQHBpcGU6IGVuZHBvaW50IGRlZmluaW5nIHRoZSBtYXBwaW5nIGRpcmVjdGlvbgorICogQHNnOiB0aGUgc2NhdHRlcmxpc3QgdG8gc3luY2hyb25pemUKKyAqIEBuX2h3X2VudHM6IHRoZSBwb3NpdGl2ZSByZXR1cm4gdmFsdWUgZnJvbSB1c2JfYnVmZmVyX21hcF9zZworICoKKyAqIFVzZSB0aGlzIHdoZW4geW91IGFyZSByZS11c2luZyBhIHNjYXR0ZXJsaXN0J3MgZGF0YSBidWZmZXJzIGZvcgorICogYW5vdGhlciBVU0IgcmVxdWVzdC4KKyAqLwordm9pZCB1c2JfYnVmZmVyX2RtYXN5bmNfc2cgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHBpcGUsCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuX2h3X2VudHMpCit7CisJc3RydWN0IHVzYl9idXMJCSpidXM7CisJc3RydWN0IGRldmljZQkJKmNvbnRyb2xsZXI7CisKKwlpZiAoIWRldgorCQkJfHwgIShidXMgPSBkZXYtPmJ1cykKKwkJCXx8ICEoY29udHJvbGxlciA9IGJ1cy0+Y29udHJvbGxlcikKKwkJCXx8ICFjb250cm9sbGVyLT5kbWFfbWFzaykKKwkJcmV0dXJuOworCisJZG1hX3N5bmNfc2cgKGNvbnRyb2xsZXIsIHNnLCBuX2h3X2VudHMsCisJCQl1c2JfcGlwZWluIChwaXBlKSA/IERNQV9GUk9NX0RFVklDRSA6IERNQV9UT19ERVZJQ0UpOworfQorI2VuZGlmCisKKy8qKgorICogdXNiX2J1ZmZlcl91bm1hcF9zZyAtIGZyZWUgRE1BIG1hcHBpbmcocykgZm9yIGEgc2NhdHRlcmxpc3QKKyAqIEBkZXY6IGRldmljZSB0byB3aGljaCB0aGUgc2NhdHRlcmxpc3Qgd2lsbCBiZSBtYXBwZWQKKyAqIEBwaXBlOiBlbmRwb2ludCBkZWZpbmluZyB0aGUgbWFwcGluZyBkaXJlY3Rpb24KKyAqIEBzZzogdGhlIHNjYXR0ZXJsaXN0IHRvIHVubWFwCisgKiBAbl9od19lbnRzOiB0aGUgcG9zaXRpdmUgcmV0dXJuIHZhbHVlIGZyb20gdXNiX2J1ZmZlcl9tYXBfc2cKKyAqCisgKiBSZXZlcnNlcyB0aGUgZWZmZWN0IG9mIHVzYl9idWZmZXJfbWFwX3NnKCkuCisgKi8KK3ZvaWQgdXNiX2J1ZmZlcl91bm1hcF9zZyAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgcGlwZSwKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5faHdfZW50cykKK3sKKwlzdHJ1Y3QgdXNiX2J1cwkJKmJ1czsKKwlzdHJ1Y3QgZGV2aWNlCQkqY29udHJvbGxlcjsKKworCWlmICghZGV2CisJCQl8fCAhKGJ1cyA9IGRldi0+YnVzKQorCQkJfHwgIShjb250cm9sbGVyID0gYnVzLT5jb250cm9sbGVyKQorCQkJfHwgIWNvbnRyb2xsZXItPmRtYV9tYXNrKQorCQlyZXR1cm47CisKKwlkbWFfdW5tYXBfc2cgKGNvbnRyb2xsZXIsIHNnLCBuX2h3X2VudHMsCisJCQl1c2JfcGlwZWluIChwaXBlKSA/IERNQV9GUk9NX0RFVklDRSA6IERNQV9UT19ERVZJQ0UpOworfQorCitzdGF0aWMgaW50IHVzYl9nZW5lcmljX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgc3RhdGUpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisJc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlcjsKKworCWlmIChkZXYtPmRyaXZlciA9PSAmdXNiX2dlbmVyaWNfZHJpdmVyKQorCQlyZXR1cm4gdXNiX3N1c3BlbmRfZGV2aWNlICh0b191c2JfZGV2aWNlKGRldiksIHN0YXRlKTsKKworCWlmICgoZGV2LT5kcml2ZXIgPT0gTlVMTCkgfHwKKwkgICAgKGRldi0+ZHJpdmVyX2RhdGEgPT0gJnVzYl9nZW5lcmljX2RyaXZlcl9kYXRhKSkKKwkJcmV0dXJuIDA7CisKKwlpbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCWRyaXZlciA9IHRvX3VzYl9kcml2ZXIoZGV2LT5kcml2ZXIpOworCisJLyogdGhlcmUncyBvbmx5IG9uZSBVU0Igc3VzcGVuZCBzdGF0ZSAqLworCWlmIChpbnRmLT5kZXYucG93ZXIucG93ZXJfc3RhdGUpCisJCXJldHVybiAwOworCisJaWYgKGRyaXZlci0+c3VzcGVuZCkKKwkJcmV0dXJuIGRyaXZlci0+c3VzcGVuZChpbnRmLCBzdGF0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNiX2dlbmVyaWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlzdHJ1Y3QgdXNiX2RyaXZlciAqZHJpdmVyOworCisJLyogZGV2aWNlcyByZXN1bWUgdGhyb3VnaCB0aGVpciBodWIgKi8KKwlpZiAoZGV2LT5kcml2ZXIgPT0gJnVzYl9nZW5lcmljX2RyaXZlcikKKwkJcmV0dXJuIHVzYl9yZXN1bWVfZGV2aWNlICh0b191c2JfZGV2aWNlKGRldikpOworCisJaWYgKChkZXYtPmRyaXZlciA9PSBOVUxMKSB8fAorCSAgICAoZGV2LT5kcml2ZXJfZGF0YSA9PSAmdXNiX2dlbmVyaWNfZHJpdmVyX2RhdGEpKQorCQlyZXR1cm4gMDsKKworCWludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJZHJpdmVyID0gdG9fdXNiX2RyaXZlcihkZXYtPmRyaXZlcik7CisKKwlpZiAoZHJpdmVyLT5yZXN1bWUpCisJCXJldHVybiBkcml2ZXItPnJlc3VtZShpbnRmKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGJ1c190eXBlIHVzYl9idXNfdHlwZSA9IHsKKwkubmFtZSA9CQkidXNiIiwKKwkubWF0Y2ggPQl1c2JfZGV2aWNlX21hdGNoLAorCS5ob3RwbHVnID0JdXNiX2hvdHBsdWcsCisJLnN1c3BlbmQgPQl1c2JfZ2VuZXJpY19zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2JfZ2VuZXJpY19yZXN1bWUsCit9OworCisjaWZuZGVmIE1PRFVMRQorCitzdGF0aWMgaW50IF9faW5pdCB1c2Jfc2V0dXBfZGlzYWJsZShjaGFyICpzdHIpCit7CisJbm91c2IgPSAxOworCXJldHVybiAxOworfQorCisvKiBmb3JtYXQgdG8gZGlzYWJsZSBVU0Igb24ga2VybmVsIGNvbW1hbmQgbGluZSBpczogbm91c2IgKi8KK19fc2V0dXAoIm5vdXNiIiwgdXNiX3NldHVwX2Rpc2FibGUpOworCisjZW5kaWYKKworLyoKKyAqIGZvciBleHRlcm5hbCByZWFkIGFjY2VzcyB0byA8bm91c2I+CisgKi8KK2ludCB1c2JfZGlzYWJsZWQodm9pZCkKK3sKKwlyZXR1cm4gbm91c2I7Cit9CisKKy8qCisgKiBJbml0CisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHVzYl9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKwlpZiAobm91c2IpIHsKKwkJcHJfaW5mbyAoIiVzOiBVU0Igc3VwcG9ydCBkaXNhYmxlZFxuIiwgdXNiY29yZV9uYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dmFsID0gYnVzX3JlZ2lzdGVyKCZ1c2JfYnVzX3R5cGUpOworCWlmIChyZXR2YWwpIAorCQlnb3RvIG91dDsKKwlyZXR2YWwgPSB1c2JfaG9zdF9pbml0KCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBob3N0X2luaXRfZmFpbGVkOworCXJldHZhbCA9IHVzYl9tYWpvcl9pbml0KCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBtYWpvcl9pbml0X2ZhaWxlZDsKKwlyZXR2YWwgPSB1c2Jmc19pbml0KCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmc19pbml0X2ZhaWxlZDsKKwlyZXR2YWwgPSB1c2JfaHViX2luaXQoKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGh1Yl9pbml0X2ZhaWxlZDsKKworCXJldHZhbCA9IGRyaXZlcl9yZWdpc3RlcigmdXNiX2dlbmVyaWNfZHJpdmVyKTsKKwlpZiAoIXJldHZhbCkKKwkJZ290byBvdXQ7CisKKwl1c2JfaHViX2NsZWFudXAoKTsKK2h1Yl9pbml0X2ZhaWxlZDoKKwl1c2Jmc19jbGVhbnVwKCk7Citmc19pbml0X2ZhaWxlZDoKKwl1c2JfbWFqb3JfY2xlYW51cCgpOwkKK21ham9yX2luaXRfZmFpbGVkOgorCXVzYl9ob3N0X2NsZWFudXAoKTsKK2hvc3RfaW5pdF9mYWlsZWQ6CisJYnVzX3VucmVnaXN0ZXIoJnVzYl9idXNfdHlwZSk7CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIENsZWFudXAKKyAqLworc3RhdGljIHZvaWQgX19leGl0IHVzYl9leGl0KHZvaWQpCit7CisJLyogVGhpcyB3aWxsIG1hdHRlciBpZiBzaHV0ZG93bi9yZWJvb3QgZG9lcyBleGl0Y2FsbHMuICovCisJaWYgKG5vdXNiKQorCQlyZXR1cm47CisKKwlkcml2ZXJfdW5yZWdpc3RlcigmdXNiX2dlbmVyaWNfZHJpdmVyKTsKKwl1c2JfbWFqb3JfY2xlYW51cCgpOworCXVzYmZzX2NsZWFudXAoKTsKKwl1c2JfaHViX2NsZWFudXAoKTsKKwl1c2JfaG9zdF9jbGVhbnVwKCk7CisJYnVzX3VucmVnaXN0ZXIoJnVzYl9idXNfdHlwZSk7Cit9CisKK3N1YnN5c19pbml0Y2FsbCh1c2JfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2JfZXhpdCk7CisKKy8qCisgKiBVU0IgbWF5IGJlIGJ1aWx0IGludG8gdGhlIGtlcm5lbCBvciBiZSBidWlsdCBhcyBtb2R1bGVzLgorICogVGhlc2Ugc3ltYm9scyBhcmUgZXhwb3J0ZWQgZm9yIGRldmljZSAob3IgaG9zdCBjb250cm9sbGVyKQorICogZHJpdmVyIG1vZHVsZXMgdG8gdXNlLgorICovCisKK0VYUE9SVF9TWU1CT0wodXNiX3JlZ2lzdGVyKTsKK0VYUE9SVF9TWU1CT0wodXNiX2RlcmVnaXN0ZXIpOworRVhQT1JUX1NZTUJPTCh1c2JfZGlzYWJsZWQpOworCitFWFBPUlRfU1lNQk9MKHVzYl9hbGxvY19kZXYpOworRVhQT1JUX1NZTUJPTCh1c2JfcHV0X2Rldik7CitFWFBPUlRfU1lNQk9MKHVzYl9nZXRfZGV2KTsKK0VYUE9SVF9TWU1CT0wodXNiX2h1Yl90dF9jbGVhcl9idWZmZXIpOworCitFWFBPUlRfU1lNQk9MKHVzYl9sb2NrX2RldmljZSk7CitFWFBPUlRfU1lNQk9MKHVzYl90cnlsb2NrX2RldmljZSk7CitFWFBPUlRfU1lNQk9MKHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQpOworRVhQT1JUX1NZTUJPTCh1c2JfdW5sb2NrX2RldmljZSk7CisKK0VYUE9SVF9TWU1CT0wodXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2UpOworRVhQT1JUX1NZTUJPTCh1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlKTsKK0VYUE9SVF9TWU1CT0wodXNiX21hdGNoX2lkKTsKK0VYUE9SVF9TWU1CT0wodXNiX2ZpbmRfaW50ZXJmYWNlKTsKK0VYUE9SVF9TWU1CT0wodXNiX2lmbnVtX3RvX2lmKTsKK0VYUE9SVF9TWU1CT0wodXNiX2FsdG51bV90b19hbHRzZXR0aW5nKTsKKworRVhQT1JUX1NZTUJPTCh1c2JfcmVzZXRfZGV2aWNlKTsKK0VYUE9SVF9TWU1CT0wodXNiX2Rpc2Nvbm5lY3QpOworCitFWFBPUlRfU1lNQk9MKF9fdXNiX2dldF9leHRyYV9kZXNjcmlwdG9yKTsKKworRVhQT1JUX1NZTUJPTCh1c2JfZmluZF9kZXZpY2UpOworRVhQT1JUX1NZTUJPTCh1c2JfZ2V0X2N1cnJlbnRfZnJhbWVfbnVtYmVyKTsKKworRVhQT1JUX1NZTUJPTCAodXNiX2J1ZmZlcl9hbGxvYyk7CitFWFBPUlRfU1lNQk9MICh1c2JfYnVmZmVyX2ZyZWUpOworCisjaWYgMAorRVhQT1JUX1NZTUJPTCAodXNiX2J1ZmZlcl9tYXApOworRVhQT1JUX1NZTUJPTCAodXNiX2J1ZmZlcl9kbWFzeW5jKTsKK0VYUE9SVF9TWU1CT0wgKHVzYl9idWZmZXJfdW5tYXApOworI2VuZGlmCisKK0VYUE9SVF9TWU1CT0wgKHVzYl9idWZmZXJfbWFwX3NnKTsKKyNpZiAwCitFWFBPUlRfU1lNQk9MICh1c2JfYnVmZmVyX2RtYXN5bmNfc2cpOworI2VuZGlmCitFWFBPUlRfU1lNQk9MICh1c2JfYnVmZmVyX3VubWFwX3NnKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS91c2IuaCBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMzM2VlZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmgKQEAgLTAsMCArMSw0NiBAQAorLyogRnVuY3Rpb25zIGxvY2FsIHRvIGRyaXZlcnMvdXNiL2NvcmUvICovCisKK2V4dGVybiB2b2lkIHVzYl9jcmVhdGVfc3lzZnNfZGV2X2ZpbGVzIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHVzYl9yZW1vdmVfc3lzZnNfZGV2X2ZpbGVzIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHVzYl9jcmVhdGVfc3lzZnNfaW50Zl9maWxlcyAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworZXh0ZXJuIHZvaWQgdXNiX3JlbW92ZV9zeXNmc19pbnRmX2ZpbGVzIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CisKK2V4dGVybiB2b2lkIHVzYl9kaXNhYmxlX2VuZHBvaW50IChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZXBhZGRyKTsKK2V4dGVybiB2b2lkIHVzYl9kaXNhYmxlX2ludGVyZmFjZSAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKKwkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworZXh0ZXJuIHZvaWQgdXNiX3JlbGVhc2VfaW50ZXJmYWNlX2NhY2hlKHN0cnVjdCBrcmVmICpyZWYpOworZXh0ZXJuIHZvaWQgdXNiX2Rpc2FibGVfZGV2aWNlIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgc2tpcF9lcDApOworCitleHRlcm4gaW50IHVzYl9nZXRfZGV2aWNlX2Rlc2NyaXB0b3Ioc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKKwkJdW5zaWduZWQgaW50IHNpemUpOworZXh0ZXJuIGludCB1c2Jfc2V0X2NvbmZpZ3VyYXRpb24oc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IGNvbmZpZ3VyYXRpb24pOworCitleHRlcm4gdm9pZCB1c2JfbG9ja19hbGxfZGV2aWNlcyh2b2lkKTsKK2V4dGVybiB2b2lkIHVzYl91bmxvY2tfYWxsX2RldmljZXModm9pZCk7CisKK2V4dGVybiB2b2lkIHVzYl9raWNrX2todWJkKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgdXNiX3Jlc3VtZV9yb290X2h1YihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKKworLyogZm9yIGxhYmVsaW5nIGRpYWdub3N0aWNzICovCitleHRlcm4gY29uc3QgY2hhciAqdXNiY29yZV9uYW1lOworCisvKiB1c2JmcyBzdHVmZiAqLworZXh0ZXJuIHN0cnVjdCB1c2JfZHJpdmVyIHVzYmZzX2RyaXZlcjsKK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYmZzX2RldmljZXNfZm9wczsKK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYmZzX2RldmljZV9maWxlX29wZXJhdGlvbnM7CitleHRlcm4gdm9pZCB1c2Jmc19jb25uX2Rpc2NfZXZlbnQodm9pZCk7CisKK3N0cnVjdCBkZXZfc3RhdGUgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgICAgICAvKiBzdGF0ZSBsaXN0ICovCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlzcGlubG9ja190IGxvY2s7ICAgICAgICAgICAgLyogcHJvdGVjdHMgdGhlIGFzeW5jIHVyYiBsaXN0cyAqLworCXN0cnVjdCBsaXN0X2hlYWQgYXN5bmNfcGVuZGluZzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGFzeW5jX2NvbXBsZXRlZDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OyAgICAgLyogd2FrZSB1cCBpZiBhIHJlcXVlc3QgY29tcGxldGVkICovCisJdW5zaWduZWQgaW50IGRpc2NzaWducjsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRpc2N0YXNrOworCXZvaWQgX191c2VyICpkaXNjY29udGV4dDsKKwl1bnNpZ25lZCBsb25nIGlmY2xhaW1lZDsKK307CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IyNGY5ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCkBAIC0wLDAgKzEsMzg5IEBACisjCisjIFVTQiBHYWRnZXQgc3VwcG9ydCBvbiBhIHN5c3RlbSBpbnZvbHZlcworIyAgICAoYSkgYSBwZXJpcGhlcmFsIGNvbnRyb2xsZXIsIGFuZAorIyAgICAoYikgdGhlIGdhZGdldCBkcml2ZXIgdXNpbmcgaXQuCisjCisjIE5PVEU6ICBHYWRnZXQgc3VwcG9ydCAqKiBET0VTIE5PVCAqKiBkZXBlbmQgb24gaG9zdC1zaWRlIENPTkZJR19VU0IgISEKKyMKKyMgIC0gSG9zdCBzeXN0ZW1zIChsaWtlIFBDcykgbmVlZCBDT05GSUdfVVNCICh3aXRoICJBIiBqYWNrcykuCisjICAtIFBlcmlwaGVyYWxzIChsaWtlIFBEQXMpIG5lZWQgQ09ORklHX1VTQl9HQURHRVQgKHdpdGggIkIiIGphY2tzKS4KKyMgIC0gU29tZSBzeXN0ZW1zIGhhdmUgYm90aCBraW5kcyBvZiBvZiBjb250cm9sbGVyLgorIworIyBXaXRoIGhlbHAgZnJvbSBhIHNwZWNpYWwgdHJhbnNjZWl2ZXIgYW5kIGEgIk1pbmktQUIiIGphY2ssIHN5c3RlbXMgd2l0aAorIyBib3RoIGtpbmRzIG9mIGNvbnRyb2xsZXIgY2FuIGFsc28gc3VwcG9ydCAiVVNCIE9uLXRoZS1HbyIgKENPTkZJR19VU0JfT1RHKS4KKyMKK21lbnUgIlVTQiBHYWRnZXQgU3VwcG9ydCIKKworY29uZmlnIFVTQl9HQURHRVQKKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgVVNCIEdhZGdldHMiCisJaGVscAorCSAgIFVTQiBpcyBhIG1hc3Rlci9zbGF2ZSBwcm90b2NvbCwgb3JnYW5pemVkIHdpdGggb25lIG1hc3RlcgorCSAgIGhvc3QgKHN1Y2ggYXMgYSBQQykgY29udHJvbGxpbmcgdXAgdG8gMTI3IHBlcmlwaGVyYWwgZGV2aWNlcy4KKwkgICBUaGUgVVNCIGhhcmR3YXJlIGlzIGFzeW1tZXRyaWMsIHdoaWNoIG1ha2VzIGl0IGVhc2llciB0byBzZXQgdXA6CisJICAgeW91IGNhbid0IGNvbm5lY3QgYSAidG8tdGhlLWhvc3QiIGNvbm5lY3RvciB0byBhIHBlcmlwaGVyYWwuCisKKwkgICBMaW51eCBjYW4gcnVuIGluIHRoZSBob3N0LCBvciBpbiB0aGUgcGVyaXBoZXJhbC4gIEluIGJvdGggY2FzZXMKKwkgICB5b3UgbmVlZCBhIGxvdyBsZXZlbCBidXMgY29udHJvbGxlciBkcml2ZXIsIGFuZCBzb21lIHNvZnR3YXJlCisJICAgdGFsa2luZyB0byBpdC4gIFBlcmlwaGVyYWwgY29udHJvbGxlcnMgYXJlIG9mdGVuIGRpc2NyZXRlIHNpbGljb24sCisJICAgb3IgYXJlIGludGVncmF0ZWQgd2l0aCB0aGUgQ1BVIGluIGEgbWljcm9jb250cm9sbGVyLiAgVGhlIG1vcmUKKwkgICBmYW1pbGlhciBob3N0IHNpZGUgY29udHJvbGxlcnMgaGF2ZSBuYW1lcyBsaWtlIGxpa2UgIkVIQ0kiLCAiT0hDSSIsCisJICAgb3IgIlVIQ0kiLCBhbmQgYXJlIHVzdWFsbHkgaW50ZWdyYXRlZCBpbnRvIHNvdXRoYnJpZGdlcyBvbiBQQworCSAgIG1vdGhlcmJvYXJkcy4KKworCSAgIEVuYWJsZSB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlmIHlvdSB3YW50IHRvIHJ1biBMaW51eCBpbnNpZGUKKwkgICBhIFVTQiBwZXJpcGhlcmFsIGRldmljZS4gIENvbmZpZ3VyZSBvbmUgaGFyZHdhcmUgZHJpdmVyIGZvciB5b3VyCisJICAgcGVyaXBoZXJhbC9kZXZpY2Ugc2lkZSBidXMgY29udHJvbGxlciwgYW5kIGEgImdhZGdldCBkcml2ZXIiIGZvcgorCSAgIHlvdXIgcGVyaXBoZXJhbCBwcm90b2NvbC4gIChJZiB5b3UgdXNlIG1vZHVsYXIgZ2FkZ2V0IGRyaXZlcnMsCisJICAgeW91IG1heSBjb25maWd1cmUgbW9yZSB0aGFuIG9uZS4pCisKKwkgICBJZiBpbiBkb3VidCwgc2F5ICJOIiBhbmQgZG9uJ3QgZW5hYmxlIHRoZXNlIGRyaXZlcnM7IG1vc3QgcGVvcGxlCisJICAgZG9uJ3QgaGF2ZSB0aGlzIGtpbmQgb2YgaGFyZHdhcmUgKGV4Y2VwdCBtYXliZSBpbnNpZGUgTGludXggUERBcykuCisKKwkgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIDxodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmcvZ2FkZ2V0PiBhbmQKKwkgICB0aGUga2VybmVsIERvY0Jvb2sgZG9jdW1lbnRhdGlvbiBmb3IgdGhpcyBBUEkuCisKK2NvbmZpZyBVU0JfR0FER0VUX0RFQlVHX0ZJTEVTCisJYm9vbGVhbiAiRGVidWdnaW5nIGluZm9ybWF0aW9uIGZpbGVzIgorCWRlcGVuZHMgb24gVVNCX0dBREdFVCAmJiBQUk9DX0ZTCisJaGVscAorCSAgIFNvbWUgb2YgdGhlIGRyaXZlcnMgaW4gdGhlICJnYWRnZXQiIGZyYW1ld29yayBjYW4gZXhwb3NlCisJICAgZGVidWdnaW5nIGluZm9ybWF0aW9uIGluIGZpbGVzIHN1Y2ggYXMgL3Byb2MvZHJpdmVyL3VkYworCSAgIChmb3IgYSBwZXJpcGhlcmFsIGNvbnRyb2xsZXIpLiAgVGhlIGluZm9ybWF0aW9uIGluIHRoZXNlCisJICAgZmlsZXMgbWF5IGhlbHAgd2hlbiB5b3UncmUgdHJvdWJsZXNob290aW5nIG9yIGJyaW5naW5nIHVwIGEKKwkgICBkcml2ZXIgb24gYSBuZXcgYm9hcmQuICAgRW5hYmxlIHRoZXNlIGZpbGVzIGJ5IGNob29zaW5nICJZIgorCSAgIGhlcmUuICBJZiBpbiBkb3VidCwgb3IgdG8gY29uc2VydmUga2VybmVsIG1lbW9yeSwgc2F5ICJOIi4KKworIworIyBVU0IgUGVyaXBoZXJhbCBDb250cm9sbGVyIFN1cHBvcnQKKyMKK2Nob2ljZQorCXByb21wdCAiVVNCIFBlcmlwaGVyYWwgQ29udHJvbGxlciIKKwlkZXBlbmRzIG9uIFVTQl9HQURHRVQKKwloZWxwCisJICAgQSBVU0IgZGV2aWNlIHVzZXMgYSBjb250cm9sbGVyIHRvIHRhbGsgdG8gaXRzIGhvc3QuCisJICAgU3lzdGVtcyBzaG91bGQgaGF2ZSBvbmx5IG9uZSBzdWNoIHVwc3RyZWFtIGxpbmsuCisJICAgTWFueSBjb250cm9sbGVyIGRyaXZlcnMgYXJlIHBsYXRmb3JtLXNwZWNpZmljOyB0aGVzZQorCSAgIG9mdGVuIG5lZWQgYm9hcmQtc3BlY2lmaWMgaG9va3MuCisKK2NvbmZpZyBVU0JfR0FER0VUX05FVDIyODAKKwlib29sZWFuICJOZXRDaGlwIDIyODAiCisJZGVwZW5kcyBvbiBQQ0kKKwlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKKwloZWxwCisJICAgTmV0Q2hpcCAyMjgwIGlzIGEgUENJIGJhc2VkIFVTQiBwZXJpcGhlcmFsIGNvbnRyb2xsZXIgd2hpY2gKKwkgICBzdXBwb3J0cyBib3RoIGZ1bGwgYW5kIGhpZ2ggc3BlZWQgVVNCIDIuMCBkYXRhIHRyYW5zZmVycy4gIAorCSAgIAorCSAgIEl0IGhhcyBzaXggY29uZmlndXJhYmxlIGVuZHBvaW50cywgYXMgd2VsbCBhcyBlbmRwb2ludCB6ZXJvCisJICAgKGZvciBjb250cm9sIHRyYW5zZmVycykgYW5kIHNldmVyYWwgZW5kcG9pbnRzIHdpdGggZGVkaWNhdGVkCisJICAgZnVuY3Rpb25zLgorCisJICAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKKwkgICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAibmV0MjI4MCIgYW5kIGZvcmNlIGFsbAorCSAgIGdhZGdldCBkcml2ZXJzIHRvIGFsc28gYmUgZHluYW1pY2FsbHkgbGlua2VkLgorCitjb25maWcgVVNCX05FVDIyODAKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9ORVQyMjgwCisJZGVmYXVsdCBVU0JfR0FER0VUCisKK2NvbmZpZyBVU0JfR0FER0VUX1BYQTJYWAorCWJvb2xlYW4gIlBYQSAyNXggb3IgSVhQIDR4eCIKKwlkZXBlbmRzIG9uIChBUkNIX1BYQSAmJiBQWEEyNXgpIHx8IEFSQ0hfSVhQNFhYCisJaGVscAorCSAgIEludGVsJ3MgUFhBIDI1eCBzZXJpZXMgWFNjYWxlIEFSTS01VEUgcHJvY2Vzc29ycyBpbmNsdWRlCisJICAgYW4gaW50ZWdyYXRlZCBmdWxsIHNwZWVkIFVTQiAxLjEgZGV2aWNlIGNvbnRyb2xsZXIuICBUaGUKKwkgICBjb250cm9sbGVyIGluIHRoZSBJWFAgNHh4IHNlcmllcyBpcyByZWdpc3Rlci1jb21wYXRpYmxlLgorCisJICAgSXQgaGFzIGZpZnRlZW4gZml4ZWQtZnVuY3Rpb24gZW5kcG9pbnRzLCBhcyB3ZWxsIGFzIGVuZHBvaW50CisJICAgemVybyAoZm9yIGNvbnRyb2wgdHJhbnNmZXJzKS4KKworCSAgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCisJICAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgInB4YTJ4eF91ZGMiIGFuZCBmb3JjZSBhbGwKKwkgICBnYWRnZXQgZHJpdmVycyB0byBhbHNvIGJlIGR5bmFtaWNhbGx5IGxpbmtlZC4KKworY29uZmlnIFVTQl9QWEEyWFgKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9QWEEyWFgKKwlkZWZhdWx0IFVTQl9HQURHRVQKKworIyBpZiB0aGVyZSdzIG9ubHkgb25lIGdhZGdldCBkcml2ZXIsIHVzaW5nIG9ubHkgdHdvIGJ1bGsgZW5kcG9pbnRzLAorIyBkb24ndCB3YXN0ZSBtZW1vcnkgZm9yIHRoZSBvdGhlciBlbmRwb2ludHMKK2NvbmZpZyBVU0JfUFhBMlhYX1NNQUxMCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX1BYQTJYWAorCWJvb2wKKwlkZWZhdWx0IG4gaWYgVVNCX0VUSF9STkRJUworCWRlZmF1bHQgeSBpZiBVU0JfWkVSTworCWRlZmF1bHQgeSBpZiBVU0JfRVRICisJZGVmYXVsdCB5IGlmIFVTQl9HX1NFUklBTAorCitjb25maWcgVVNCX0dBREdFVF9HT0tVCisJYm9vbGVhbiAiVG9zaGliYSBUQzg2QzAwMSAnR29rdS1TJyIKKwlkZXBlbmRzIG9uIFBDSQorCWhlbHAKKwkgICBUaGUgVG9zaGliYSBUQzg2QzAwMSBpcyBhIFBDSSBkZXZpY2Ugd2hpY2ggaW5jbHVkZXMgY29udHJvbGxlcnMKKwkgICBmb3IgZnVsbCBzcGVlZCBVU0IgZGV2aWNlcywgSURFLCBJMkMsIFNJTywgcGx1cyBhIFVTQiBob3N0IChPSENJKS4KKwkgICAKKwkgICBUaGUgZGV2aWNlIGNvbnRyb2xsZXIgaGFzIHRocmVlIGNvbmZpZ3VyYWJsZSAoYnVsayBvciBpbnRlcnJ1cHQpCisJICAgZW5kcG9pbnRzLCBwbHVzIGVuZHBvaW50IHplcm8gKGZvciBjb250cm9sIHRyYW5zZmVycykuCisKKwkgICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQorCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJnb2t1X3VkYyIgYW5kIHRvIGZvcmNlIGFsbAorCSAgIGdhZGdldCBkcml2ZXJzIHRvIGFsc28gYmUgZHluYW1pY2FsbHkgbGlua2VkLgorCitjb25maWcgVVNCX0dPS1UKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9HT0tVCisJZGVmYXVsdCBVU0JfR0FER0VUCisKKworY29uZmlnIFVTQl9HQURHRVRfTEg3QTQwWAorCWJvb2xlYW4gIkxIN0E0MFgiCisJZGVwZW5kcyBvbiBBUkNIX0xIN0E0MFgKKwloZWxwCisgICAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgVVNCIERldmljZSBDb250cm9sbGVyIGRyaXZlciBmb3IgTEg3QTQweAorCitjb25maWcgVVNCX0xIN0E0MFgKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9MSDdBNDBYCisJZGVmYXVsdCBVU0JfR0FER0VUCisKKworY29uZmlnIFVTQl9HQURHRVRfT01BUAorCWJvb2xlYW4gIk9NQVAgVVNCIERldmljZSBDb250cm9sbGVyIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQCisJc2VsZWN0IElTUDEzMDFfT01BUCBpZiBNQUNIX09NQVBfSDIgfHwgTUFDSF9PTUFQX0gzCisJaGVscAorCSAgIE1hbnkgVGV4YXMgSW5zdHJ1bWVudHMgT01BUCBwcm9jZXNzb3JzIGhhdmUgZmxleGlibGUgZnVsbAorCSAgIHNwZWVkIFVTQiBkZXZpY2UgY29udHJvbGxlcnMsIHdpdGggc3VwcG9ydCBmb3IgdXAgdG8gMzAKKwkgICBlbmRwb2ludHMgKHBsdXMgZW5kcG9pbnQgemVybykuICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUKKwkgICBjb250cm9sbGVyIGluIHRoZSBPTUFQIDE2MTEsIGFuZCBzaG91bGQgd29yayB3aXRoIGNvbnRyb2xsZXJzCisJICAgaW4gb3RoZXIgT01BUCBwcm9jZXNzb3JzIHRvbywgZ2l2ZW4gbWlub3IgdHdlYWtzLgorCisJICAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKKwkgICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAib21hcF91ZGMiIGFuZCBmb3JjZSBhbGwKKwkgICBnYWRnZXQgZHJpdmVycyB0byBhbHNvIGJlIGR5bmFtaWNhbGx5IGxpbmtlZC4KKworY29uZmlnIFVTQl9PTUFQCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIFVTQl9HQURHRVRfT01BUAorCWRlZmF1bHQgVVNCX0dBREdFVAorCitjb25maWcgVVNCX09URworCWJvb2xlYW4gIk9URyBTdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9PTUFQICYmIEFSQ0hfT01BUF9PVEcgJiYgVVNCX09IQ0lfSENECisJaGVscAorCSAgIFRoZSBtb3N0IG5vdGFibGUgZmVhdHVyZSBvZiBVU0IgT1RHIGlzIHN1cHBvcnQgZm9yIGEKKwkgICAiRHVhbC1Sb2xlIiBkZXZpY2UsIHdoaWNoIGNhbiBhY3QgYXMgZWl0aGVyIGEgZGV2aWNlCisJICAgb3IgYSBob3N0LiAgVGhlIGluaXRpYWwgcm9sZSBjaG9pY2UgY2FuIGJlIGNoYW5nZWQKKwkgICBsYXRlciwgd2hlbiB0d28gZHVhbC1yb2xlIGRldmljZXMgdGFsayB0byBlYWNoIG90aGVyLgorCisJICAgU2VsZWN0IHRoaXMgb25seSBpZiB5b3VyIE9NQVAgYm9hcmQgaGFzIGEgTWluaS1BQiBjb25uZWN0b3IuCisKKworY29uZmlnIFVTQl9HQURHRVRfRFVNTVlfSENECisJYm9vbGVhbiAiRHVtbXkgSENEIChERVZFTE9QTUVOVCkiCisJZGVwZW5kcyBvbiBVU0IgJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECisJaGVscAorCSAgVGhpcyBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIGVtdWxhdGVzIFVTQiwgbG9vcGluZyBhbGwgZGF0YSB0cmFuc2ZlcgorCSAgcmVxdWVzdHMgYmFjayB0byBhIFVTQiAiZ2FkZ2V0IGRyaXZlciIgaW4gdGhlIHNhbWUgaG9zdC4gIFRoZSBob3N0CisJICBzaWRlIGlzIHRoZSBtYXN0ZXI7IHRoZSBnYWRnZXQgc2lkZSBpcyB0aGUgc2xhdmUuICBHYWRnZXQgZHJpdmVycworCSAgY2FuIGJlIGhpZ2gsIGZ1bGwsIG9yIGxvdyBzcGVlZDsgYW5kIHRoZXkgaGF2ZSBhY2Nlc3MgdG8gZW5kcG9pbnRzCisJICBsaWtlIHRob3NlIGZyb20gTkVUMjI4MCwgUFhBMnh4LCBvciBTQTExMDAgaGFyZHdhcmUuCisJICAKKwkgIFRoaXMgbWF5IGhlbHAgaW4gc29tZSBzdGFnZXMgb2YgY3JlYXRpbmcgYSBkcml2ZXIgdG8gZW1iZWQgaW4gYQorCSAgTGludXggZGV2aWNlLCBzaW5jZSBpdCBsZXRzIHlvdSBkZWJ1ZyBzZXZlcmFsIHBhcnRzIG9mIHRoZSBnYWRnZXQKKwkgIGRyaXZlciB3aXRob3V0IGl0cyBoYXJkd2FyZSBvciBkcml2ZXJzIGJlaW5nIGludm9sdmVkLgorCSAgCisJICBTaW5jZSBzdWNoIGEgZ2FkZ2V0IHNpZGUgZHJpdmVyIG5lZWRzIHRvIGludGVyb3BlcmF0ZSB3aXRoIGEgaG9zdAorCSAgc2lkZSBMaW51eC1VU0IgZGV2aWNlIGRyaXZlciwgdGhpcyBtYXkgaGVscCB0byBkZWJ1ZyBib3RoIHNpZGVzCisJICBvZiBhIFVTQiBwcm90b2NvbCBzdGFjay4KKworCSAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKKwkgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJkdW1teV9oY2QiIGFuZCBmb3JjZSBhbGwKKwkgIGdhZGdldCBkcml2ZXJzIHRvIGFsc28gYmUgZHluYW1pY2FsbHkgbGlua2VkLgorCitjb25maWcgVVNCX0RVTU1ZX0hDRAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX0RVTU1ZX0hDRAorCWRlZmF1bHQgVVNCX0dBREdFVAorCisjIE5PVEU6ICBQbGVhc2Uga2VlcCBkdW1teV9oY2QgTEFTVCBzbyB0aGF0ICJyZWFsIGhhcmR3YXJlIiBhcHBlYXJzCisjIGZpcnN0IGFuZCB3aWxsIGJlIHNlbGVjdGVkIGJ5IGRlZmF1bHQuCisKK2VuZGNob2ljZQorCitjb25maWcgVVNCX0dBREdFVF9EVUFMU1BFRUQKKwlib29sCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUCisJZGVmYXVsdCBuCisJaGVscAorCSAgTWVhbnMgdGhhdCBnYWRnZXQgZHJpdmVycyBzaG91bGQgaW5jbHVkZSBleHRyYSBkZXNjcmlwdG9ycworCSAgYW5kIGNvZGUgdG8gaGFuZGxlIGR1YWwtc3BlZWQgY29udHJvbGxlcnMuCisKKyMKKyMgVVNCIEdhZGdldCBEcml2ZXJzCisjCitjaG9pY2UKKwl0cmlzdGF0ZSAiVVNCIEdhZGdldCBEcml2ZXJzIgorCWRlcGVuZHMgb24gVVNCX0dBREdFVAorCWRlZmF1bHQgVVNCX0VUSAorCWhlbHAKKwkgIEEgTGludXggIkdhZGdldCBEcml2ZXIiIHRhbGtzIHRvIHRoZSBVU0IgUGVyaXBoZXJhbCBDb250cm9sbGVyCisJICBkcml2ZXIgdGhyb3VnaCB0aGUgYWJzdHJhY3QgImdhZGdldCIgQVBJLiAgU29tZSBvdGhlciBvcGVyYXRpbmcKKwkgIHN5c3RlbXMgY2FsbCB0aGVzZSAiY2xpZW50IiBkcml2ZXJzLCBvZiB3aGljaCAiY2xhc3MgZHJpdmVycyIKKwkgIGFyZSBhIHN1YnNldCAoaW1wbGVtZW50aW5nIGEgVVNCIGRldmljZSBjbGFzcyBzcGVjaWZpY2F0aW9uKS4KKwkgIEEgZ2FkZ2V0IGRyaXZlciBpbXBsZW1lbnRzIG9uZSBvciBtb3JlIFVTQiBmdW5jdGlvbnMgdXNpbmcKKwkgIHRoZSBwZXJpcGhlcmFsIGhhcmR3YXJlLgorCisJICBHYWRnZXQgZHJpdmVycyBhcmUgaGFyZHdhcmUtbmV1dHJhbCwgb3IgInBsYXRmb3JtIGluZGVwZW5kZW50IiwKKwkgIGV4Y2VwdCB0aGF0IHRoZXkgc29tZXRpbWVzIG11c3QgdW5kZXJzdGFuZCBxdWlya3Mgb3IgbGltaXRhdGlvbnMKKwkgIG9mIHRoZSBwYXJ0aWN1bGFyIGNvbnRyb2xsZXJzIHRoZXkgd29yayB3aXRoLiAgRm9yIGV4YW1wbGUsIHdoZW4KKwkgIGEgY29udHJvbGxlciBkb2Vzbid0IHN1cHBvcnQgYWx0ZXJuYXRlIGNvbmZpZ3VyYXRpb25zIG9yIHByb3ZpZGUKKwkgIGVub3VnaCBvZiB0aGUgcmlnaHQgdHlwZXMgb2YgZW5kcG9pbnRzLCB0aGUgZ2FkZ2V0IGRyaXZlciBtaWdodAorCSAgbm90IGJlIGFibGUgd29yayB3aXRoIHRoYXQgY29udHJvbGxlciwgb3IgbWlnaHQgbmVlZCB0byBpbXBsZW1lbnQKKwkgIGEgbGVzcyBjb21tb24gdmFyaWFudCBvZiBhIGRldmljZSBjbGFzcyBwcm90b2NvbC4KKworIyB0aGlzIGZpcnN0IHNldCBvZiBkcml2ZXJzIGFsbCBkZXBlbmQgb24gYnVsay1jYXBhYmxlIGhhcmR3YXJlLgorCitjb25maWcgVVNCX1pFUk8KKwl0cmlzdGF0ZSAiR2FkZ2V0IFplcm8gKERFVkVMT1BNRU5UKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIEdhZGdldCBaZXJvIGlzIGEgdHdvLWNvbmZpZ3VyYXRpb24gZGV2aWNlLiAgSXQgZWl0aGVyIHNpbmtzIGFuZAorCSAgc291cmNlcyBidWxrIGRhdGE7IG9yIGl0IGxvb3BzIGJhY2sgYSBjb25maWd1cmFibGUgbnVtYmVyIG9mCisJICB0cmFuc2ZlcnMuICBJdCBhbHNvIGltcGxlbWVudHMgY29udHJvbCByZXF1ZXN0cywgZm9yICJjaGFwdGVyIDkiCisJICBjb25mb3JtYW5jZS4gIFRoZSBkcml2ZXIgbmVlZHMgb25seSB0d28gYnVsay1jYXBhYmxlIGVuZHBvaW50cywgc28KKwkgIGl0IGNhbiB3b3JrIG9uIHRvcCBvZiBtb3N0IGRldmljZS1zaWRlIHVzYiBjb250cm9sbGVycy4gIEl0J3MKKwkgIHVzZWZ1bCBmb3IgdGVzdGluZywgYW5kIGlzIGFsc28gYSB3b3JraW5nIGV4YW1wbGUgc2hvd2luZyBob3cKKwkgIFVTQiAiZ2FkZ2V0IGRyaXZlcnMiIGNhbiBiZSB3cml0dGVuLgorCisJICBNYWtlIHRoaXMgYmUgdGhlIGZpcnN0IGRyaXZlciB5b3UgdHJ5IHVzaW5nIG9uIHRvcCBvZiBhbnkgbmV3CisJICBVU0IgcGVyaXBoZXJhbCBjb250cm9sbGVyIGRyaXZlci4gIFRoZW4geW91IGNhbiB1c2UgaG9zdC1zaWRlCisJICB0ZXN0IHNvZnR3YXJlLCBsaWtlIHRoZSAidXNidGVzdCIgZHJpdmVyLCB0byBwdXQgeW91ciBoYXJkd2FyZQorCSAgYW5kIGl0cyBkcml2ZXIgdGhyb3VnaCBhIGJhc2ljIHNldCBvZiBmdW5jdGlvbmFsIHRlc3RzLgorCisJICBHYWRnZXQgWmVybyBhbHNvIHdvcmtzIHdpdGggdGhlIGhvc3Qtc2lkZSAidXNiLXNrZWxldG9uIiBkcml2ZXIsCisJICBhbmQgd2l0aCBtYW55IGtpbmRzIG9mIGhvc3Qtc2lkZSB0ZXN0IHNvZnR3YXJlLiAgWW91IG1heSBuZWVkCisJICB0byB0d2VhayBwcm9kdWN0IGFuZCB2ZW5kb3IgSURzIGJlZm9yZSBob3N0IHNvZnR3YXJlIGtub3dzIGFib3V0CisJICB0aGlzIGRldmljZSwgYW5kIGFycmFuZ2UgdG8gc2VsZWN0IGFuIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb24uCisKKwkgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCisJICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAiZ196ZXJvIi4KKworY29uZmlnIFVTQl9aRVJPX0hOUFRFU1QKKwlib29sZWFuICJITlAgVGVzdCBEZXZpY2UiCisJZGVwZW5kcyBvbiBVU0JfWkVSTyAmJiBVU0JfT1RHCisJaGVscAorCSAgWW91IGNhbiBjb25maWd1cmUgdGhpcyBkZXZpY2UgdG8gZW51bWVyYXRlIHVzaW5nIHRoZSBkZXZpY2UKKwkgIGlkZW50aWZpZXJzIG9mIHRoZSBVU0ItT1RHIHRlc3QgZGV2aWNlLiAgVGhhdCBtZWFucyB0aGF0IHdoZW4KKwkgIHRoaXMgZ2FkZ2V0IGNvbm5lY3RzIHRvIGFub3RoZXIgT1RHIGRldmljZSwgd2l0aCB0aGlzIG9uZSB1c2luZworCSAgdGhlICJCLVBlcmlwaGVyYWwiIHJvbGUsIHRoYXQgZGV2aWNlIHdpbGwgdXNlIEhOUCB0byBsZXQgdGhpcworCSAgb25lIHNlcnZlIGFzIHRoZSBVU0IgaG9zdCBpbnN0ZWFkIChpbiB0aGUgIkItSG9zdCIgcm9sZSkuCisKK2NvbmZpZyBVU0JfRVRICisJdHJpc3RhdGUgIkV0aGVybmV0IEdhZGdldCAod2l0aCBDREMgRXRoZXJuZXQgc3VwcG9ydCkiCisJZGVwZW5kcyBvbiBORVQKKwloZWxwCisJICBUaGlzIGRyaXZlciBpbXBsZW1lbnRzIEV0aGVybmV0IHN0eWxlIGNvbW11bmljYXRpb24sIGluIGVpdGhlcgorCSAgb2YgdHdvIHdheXM6CisJICAKKwkgICAtIFRoZSAiQ29tbXVuaWNhdGlvbiBEZXZpY2UgQ2xhc3MiIChDREMpIEV0aGVybmV0IENvbnRyb2wgTW9kZWwuCisJICAgICBUaGF0IHByb3RvY29sIGlzIG9mdGVuIGF2b2lkZWQgd2l0aCBwdXJlIEV0aGVybmV0IGFkYXB0ZXJzLCBpbgorCSAgICAgZmF2b3Igb2Ygc2ltcGxlciB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUsIGJ1dCBpcyB3aWRlbHkKKwkgICAgIHN1cHBvcnRlZCBieSBmaXJtd2FyZSBmb3Igc21hcnQgbmV0d29yayBkZXZpY2VzLgorCisJICAgLSBPbiBoYXJkd2FyZSBjYW4ndCBpbXBsZW1lbnQgdGhhdCBwcm90b2NvbCwgYSBzaW1wbGUgQ0RDIHN1YnNldAorCSAgICAgaXMgdXNlZCwgcGxhY2luZyBmZXdlciBkZW1hbmRzIG9uIFVTQi4KKworCSAgUk5ESVMgc3VwcG9ydCBpcyBhIHRoaXJkIG9wdGlvbiwgbW9yZSBkZW1hbmRpbmcgdGhhbiB0aGF0IHN1YnNldC4KKworCSAgV2l0aGluIHRoZSBVU0IgZGV2aWNlLCB0aGlzIGdhZGdldCBkcml2ZXIgZXhwb3NlcyBhIG5ldHdvcmsgZGV2aWNlCisJICAidXNiWCIsIHdoZXJlIFggZGVwZW5kcyBvbiB3aGF0IG90aGVyIG5ldHdvcmtpbmcgZGV2aWNlcyB5b3UgaGF2ZS4KKwkgIFRyZWF0IGl0IGxpa2UgYSB0d28tbm9kZSBFdGhlcm5ldCBsaW5rOiAgaG9zdCwgYW5kIGdhZGdldC4KKworCSAgVGhlIExpbnV4LVVTQiBob3N0LXNpZGUgInVzYm5ldCIgZHJpdmVyIGludGVyb3BlcmF0ZXMgd2l0aCB0aGlzCisJICBkcml2ZXIsIHNvIHRoYXQgZGVlcCBJL08gcXVldWVzIGNhbiBiZSBzdXBwb3J0ZWQuICBPbiAyLjQga2VybmVscywKKwkgIHVzZSAiQ0RDRXRoZXIiIGluc3RlYWQsIGlmIHlvdSdyZSB1c2luZyB0aGUgQ0RDIG9wdGlvbi4gVGhhdCBDREMKKwkgIG1vZGUgc2hvdWxkIGFsc28gaW50ZXJvcGVyYXRlIHdpdGggc3RhbmRhcmQgQ0RDIEV0aGVybmV0IGNsYXNzCisJICBkcml2ZXJzIG9uIG90aGVyIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbXMuCisKKwkgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCisJICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAiZ19ldGhlciIuCisKK2NvbmZpZyBVU0JfRVRIX1JORElTCisJYm9vbCAiUk5ESVMgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQl9FVEggJiYgRVhQRVJJTUVOVEFMCisJZGVmYXVsdCB5CisJaGVscAorCSAgIE1pY3Jvc29mdCBXaW5kb3dzIFhQIGJ1bmRsZXMgdGhlICJSZW1vdGUgTkRJUyIgKFJORElTKSBwcm90b2NvbCwKKwkgICBhbmQgTWljcm9zb2Z0IHByb3ZpZGVzIHJlZGlzdHJpYnV0YWJsZSBiaW5hcnkgUk5ESVMgZHJpdmVycyBmb3IKKwkgICBvbGRlciB2ZXJzaW9ucyBvZiBXaW5kb3dzLgorCisJICAgSWYgeW91IHNheSAieSIgaGVyZSwgdGhlIEV0aGVybmV0IGdhZGdldCBkcml2ZXIgd2lsbCB0cnkgdG8gcHJvdmlkZQorCSAgIGEgc2Vjb25kIGRldmljZSBjb25maWd1cmF0aW9uLCBzdXBwb3J0aW5nIFJORElTIHRvIHRhbGsgdG8gc3VjaAorCSAgIE1pY3Jvc29mdCBVU0IgaG9zdHMuCisJICAgCisJICAgVG8gbWFrZSBNUy1XaW5kb3dzIHdvcmsgd2l0aCB0aGlzLCB1c2UgRG9jdW1lbnRhdGlvbi91c2IvbGludXguaW5mCisJICAgYXMgdGhlICJkcml2ZXIgaW5mbyBmaWxlIi4gIEZvciB2ZXJzaW9ucyBvZiBNUy1XaW5kb3dzIG9sZGVyIHRoYW4KKwkgICBYUCwgeW91J2xsIG5lZWQgdG8gZG93bmxvYWQgZHJpdmVycyBmcm9tIE1pY3Jvc29mdCdzIHdlYnNpdGU7IGEgVVJMCisJICAgaXMgZ2l2ZW4gaW4gY29tbWVudHMgZm91bmQgaW4gdGhhdCBpbmZvIGZpbGUuCisKK2NvbmZpZyBVU0JfR0FER0VURlMKKwl0cmlzdGF0ZSAiR2FkZ2V0IEZpbGVzeXN0ZW0gKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBhIGZpbGVzeXN0ZW0gYmFzZWQgQVBJIHRoYXQgbGV0cyB1c2VyIG1vZGUKKwkgIHByb2dyYW1zIGltcGxlbWVudCBhIHNpbmdsZS1jb25maWd1cmF0aW9uIFVTQiBkZXZpY2UsIGluY2x1ZGluZworCSAgZW5kcG9pbnQgSS9PIGFuZCBjb250cm9sIHJlcXVlc3RzIHRoYXQgZG9uJ3QgcmVsYXRlIHRvIGVudW1lcmF0aW9uLgorCSAgQWxsIGVuZHBvaW50cywgdHJhbnNmZXIgc3BlZWRzLCBhbmQgdHJhbnNmZXIgdHlwZXMgc3VwcG9ydGVkIGJ5CisJICB0aGUgaGFyZHdhcmUgYXJlIGF2YWlsYWJsZSwgdGhyb3VnaCByZWFkKCkgYW5kIHdyaXRlKCkgY2FsbHMuCisKKwkgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCisJICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAiZ2FkZ2V0ZnMiLgorCitjb25maWcgVVNCX0ZJTEVfU1RPUkFHRQorCXRyaXN0YXRlICJGaWxlLWJhY2tlZCBTdG9yYWdlIEdhZGdldCIKKwloZWxwCisJICBUaGUgRmlsZS1iYWNrZWQgU3RvcmFnZSBHYWRnZXQgYWN0cyBhcyBhIFVTQiBNYXNzIFN0b3JhZ2UKKwkgIGRpc2sgZHJpdmUuICBBcyBpdHMgc3RvcmFnZSByZXBvc2l0b3J5IGl0IGNhbiB1c2UgYSByZWd1bGFyCisJICBmaWxlIG9yIGEgYmxvY2sgZGV2aWNlIChpbiBtdWNoIHRoZSBzYW1lIHdheSBhcyB0aGUgImxvb3AiCisJICBkZXZpY2UgZHJpdmVyKSwgc3BlY2lmaWVkIGFzIGEgbW9kdWxlIHBhcmFtZXRlci4KKworCSAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKKwkgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJnX2ZpbGVfc3RvcmFnZSIuCisKK2NvbmZpZyBVU0JfRklMRV9TVE9SQUdFX1RFU1QKKwlib29sICJGaWxlLWJhY2tlZCBTdG9yYWdlIEdhZGdldCB0ZXN0aW5nIHZlcnNpb24iCisJZGVwZW5kcyBvbiBVU0JfRklMRV9TVE9SQUdFCisJZGVmYXVsdCBuCisJaGVscAorCSAgU2F5ICJ5IiB0byBnZW5lcmF0ZSB0aGUgbGFyZ2VyIHRlc3RpbmcgdmVyc2lvbiBvZiB0aGUKKwkgIEZpbGUtYmFja2VkIFN0b3JhZ2UgR2FkZ2V0LCB1c2VmdWwgZm9yIHByb2JpbmcgdGhlCisJICBiZWhhdmlvciBvZiBVU0IgTWFzcyBTdG9yYWdlIGhvc3RzLiAgTm90IG5lZWRlZCBmb3IKKwkgIG5vcm1hbCBvcGVyYXRpb24uCisKK2NvbmZpZyBVU0JfR19TRVJJQUwKKwl0cmlzdGF0ZSAiU2VyaWFsIEdhZGdldCAod2l0aCBDREMgQUNNIHN1cHBvcnQpIgorCWhlbHAKKwkgIFRoZSBTZXJpYWwgR2FkZ2V0IHRhbGtzIHRvIHRoZSBMaW51eC1VU0IgZ2VuZXJpYyBzZXJpYWwgZHJpdmVyLgorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgYSBDREMtQUNNIG1vZHVsZSBvcHRpb24sIHdoaWNoIGNhbiBiZSB1c2VkCisJICB0byBpbnRlcm9wZXJhdGUgd2l0aCBNUy1XaW5kb3dzIGhvc3RzIG9yIHdpdGggdGhlIExpbnV4LVVTQgorCSAgImNkYy1hY20iIGRyaXZlci4KKworCSAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKKwkgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJnX3NlcmlhbCIuCisKKwkgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgRG9jdW1lbnRhdGlvbi91c2IvZ2FkZ2V0X3NlcmlhbC50eHQKKwkgIHdoaWNoIGluY2x1ZGVzIGluc3RydWN0aW9ucyBhbmQgYSAiZHJpdmVyIGluZm8gZmlsZSIgbmVlZGVkIHRvCisJICBtYWtlIE1TLVdpbmRvd3Mgd29yayB3aXRoIHRoaXMgZHJpdmVyLgorCisKKyMgcHV0IGRyaXZlcnMgdGhhdCBuZWVkIGlzb2Nocm9ub3VzIHRyYW5zZmVyIHN1cHBvcnQgKGZvciBhdWRpbworIyBvciB2aWRlbyBjbGFzcyBnYWRnZXQgZHJpdmVycyksIG9yIHNwZWNpZmljIGhhcmR3YXJlLCBoZXJlLgorCisjIC0gbm9uZSB5ZXQKKworZW5kY2hvaWNlCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWZkMDRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L01ha2VmaWxlCkBAIC0wLDAgKzEsMzAgQEAKKyMKKyMgVVNCIHBlcmlwaGVyYWwgY29udHJvbGxlciBkcml2ZXJzCisjCitvYmotJChDT05GSUdfVVNCX0RVTU1ZX0hDRCkJKz0gZHVtbXlfaGNkLm8KK29iai0kKENPTkZJR19VU0JfTkVUMjI4MCkJKz0gbmV0MjI4MC5vCitvYmotJChDT05GSUdfVVNCX1BYQTJYWCkJKz0gcHhhMnh4X3VkYy5vCitvYmotJChDT05GSUdfVVNCX0dPS1UpCQkrPSBnb2t1X3VkYy5vCitvYmotJChDT05GSUdfVVNCX09NQVApCQkrPSBvbWFwX3VkYy5vCitvYmotJChDT05GSUdfVVNCX0xIN0E0MFgpCSs9IGxoN2E0MHhfdWRjLm8KKworIworIyBVU0IgZ2FkZ2V0IGRyaXZlcnMKKyMKK2dfemVyby1vYmpzCQkJOj0gemVyby5vIHVzYnN0cmluZy5vIGNvbmZpZy5vIGVwYXV0b2NvbmYubworZ19ldGhlci1vYmpzCQkJOj0gZXRoZXIubyB1c2JzdHJpbmcubyBjb25maWcubyBlcGF1dG9jb25mLm8KK2dfc2VyaWFsLW9ianMJCQk6PSBzZXJpYWwubyB1c2JzdHJpbmcubyBjb25maWcubyBlcGF1dG9jb25mLm8KK2dhZGdldGZzLW9ianMJCQk6PSBpbm9kZS5vCitnX2ZpbGVfc3RvcmFnZS1vYmpzCQk6PSBmaWxlX3N0b3JhZ2UubyB1c2JzdHJpbmcubyBjb25maWcubyBcCisJCQkJCWVwYXV0b2NvbmYubworCitpZmVxICgkKENPTkZJR19VU0JfRVRIX1JORElTKSx5KQorCWdfZXRoZXItb2JqcwkJKz0gcm5kaXMubworZW5kaWYKKyAKK29iai0kKENPTkZJR19VU0JfWkVSTykJCSs9IGdfemVyby5vCitvYmotJChDT05GSUdfVVNCX0VUSCkJCSs9IGdfZXRoZXIubworb2JqLSQoQ09ORklHX1VTQl9HQURHRVRGUykJKz0gZ2FkZ2V0ZnMubworb2JqLSQoQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UpCSs9IGdfZmlsZV9zdG9yYWdlLm8KK29iai0kKENPTkZJR19VU0JfR19TRVJJQUwpCSs9IGdfc2VyaWFsLm8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbmZpZy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYjQ4NjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY29uZmlnLmMKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiB1c2IvZ2FkZ2V0L2NvbmZpZy5jIC0tIHNpbXBsaWZ5IGJ1aWxkaW5nIGNvbmZpZyBkZXNjcmlwdG9ycworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBCcm93bmVsbAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxsaW51eC91c2JfY2g5Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiX2dhZGdldC5oPgorCisKKy8qKgorICogdXNiX2Rlc2NyaXB0b3JfZmlsbGJ1ZiAtIGZpbGwgYnVmZmVyIHdpdGggZGVzY3JpcHRvcnMKKyAqIEBidWY6IEJ1ZmZlciB0byBiZSBmaWxsZWQKKyAqIEBidWZsZW46IFNpemUgb2YgYnVmCisgKiBAc3JjOiBBcnJheSBvZiBkZXNjcmlwdG9yIHBvaW50ZXJzLCB0ZXJtaW5hdGVkIGJ5IG51bGwgcG9pbnRlci4KKyAqCisgKiBDb3BpZXMgZGVzY3JpcHRvcnMgaW50byB0aGUgYnVmZmVyLCByZXR1cm5pbmcgdGhlIGxlbmd0aCBvciBhCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXkgY2FuJ3QgYWxsIGJlIGNvcGllZC4gIFVzZWZ1bCB3aGVuCisgKiBhc3NlbWJsaW5nIGRlc2NyaXB0b3JzIGZvciBhbiBhc3NvY2lhdGVkIHNldCBvZiBpbnRlcmZhY2VzIHVzZWQKKyAqIGFzIHBhcnQgb2YgY29uZmlndXJpbmcgYSBjb21wb3NpdGUgZGV2aWNlOyBvciBpbiBvdGhlciBjYXNlcyB3aGVyZQorICogc2V0cyBvZiBkZXNjcmlwdG9ycyBuZWVkIHRvIGJlIG1hcnNoYWxlZC4KKyAqLworaW50Cit1c2JfZGVzY3JpcHRvcl9maWxsYnVmKHZvaWQgKmJ1ZiwgdW5zaWduZWQgYnVmbGVuLAorCQljb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICoqc3JjKQoreworCXU4CSpkZXN0ID0gYnVmOworCisJaWYgKCFzcmMpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogZmlsbCBidWZmZXIgZnJvbSBzcmNbXSB1bnRpbCBudWxsIGRlc2NyaXB0b3IgcHRyICovCisJZm9yICg7IDAgIT0gKnNyYzsgc3JjKyspIHsKKwkJdW5zaWduZWQJCWxlbiA9ICgqc3JjKS0+Ykxlbmd0aDsKKworCQlpZiAobGVuID4gYnVmbGVuKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW1lbWNweShkZXN0LCAqc3JjLCBsZW4pOworCQlidWZsZW4gLT0gbGVuOworCQlkZXN0ICs9IGxlbjsKKwl9CisJcmV0dXJuIGRlc3QgLSAodTggKilidWY7Cit9CisKKworLyoqCisgKiB1c2JfZ2FkZ2V0X2NvbmZpZ19idWYgLSBidWlsdHMgYSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3IKKyAqIEBjb25maWc6IEhlYWRlciBmb3IgdGhlIGRlc2NyaXB0b3IsIGluY2x1ZGluZyBjaGFyYWN0ZXJpc3RpY3Mgc3VjaAorICoJYXMgcG93ZXIgcmVxdWlyZW1lbnRzIGFuZCBudW1iZXIgb2YgaW50ZXJmYWNlcy4KKyAqIEBkZXNjOiBOdWxsLXRlcm1pbmF0ZWQgdmVjdG9yIG9mIHBvaW50ZXJzIHRvIHRoZSBkZXNjcmlwdG9ycyAoaW50ZXJmYWNlLAorICoJZW5kcG9pbnQsIGV0YykgZGVmaW5pbmcgYWxsIGZ1bmN0aW9ucyBpbiB0aGlzIGRldmljZSBjb25maWd1cmF0aW9uLgorICogQGJ1ZjogQnVmZmVyIGZvciB0aGUgcmVzdWx0aW5nIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvci4KKyAqIEBsZW5ndGg6IExlbmd0aCBvZiBidWZmZXIuICBJZiB0aGlzIGlzIG5vdCBiaWcgZW5vdWdoIHRvIGhvbGQgdGhlCisgKgllbnRpcmUgY29uZmlndXJhdGlvbiBkZXNjcmlwdG9yLCBhbiBlcnJvciBjb2RlIHdpbGwgYmUgcmV0dXJuZWQuCisgKgorICogVGhpcyBjb3BpZXMgZGVzY3JpcHRvcnMgaW50byB0aGUgcmVzcG9uc2UgYnVmZmVyLCBidWlsZGluZyBhIGRlc2NyaXB0b3IKKyAqIGZvciB0aGF0IGNvbmZpZ3VyYXRpb24uICBJdCByZXR1cm5zIHRoZSBidWZmZXIgbGVuZ3RoIG9yIGEgbmVnYXRpdmUKKyAqIHN0YXR1cyBjb2RlLiAgVGhlIGNvbmZpZy53VG90YWxMZW5ndGggZmllbGQgaXMgc2V0IHRvIG1hdGNoIHRoZSBsZW5ndGgKKyAqIG9mIHRoZSByZXN1bHQsIGJ1dCBvdGhlciBkZXNjcmlwdG9yIGZpZWxkcyAoaW5jbHVkaW5nIHBvd2VyIHVzYWdlIGFuZAorICogaW50ZXJmYWNlIGNvdW50KSBtdXN0IGJlIHNldCBieSB0aGUgY2FsbGVyLgorICoKKyAqIEdhZGdldCBkcml2ZXJzIGNvdWxkIHVzZSB0aGlzIHdoZW4gY29uc3RydWN0aW5nIGEgY29uZmlnIGRlc2NyaXB0b3IKKyAqIGluIHJlc3BvbnNlIHRvIFVTQl9SRVFfR0VUX0RFU0NSSVBUT1IuICBUaGV5IHdpbGwgbmVlZCB0byBwYXRjaCB0aGUKKyAqIHJlc3VsdGluZyBiRGVzY3JpcHRvclR5cGUgdmFsdWUgaWYgVVNCX0RUX09USEVSX1NQRUVEX0NPTkZJRyBpcyBuZWVkZWQuCisgKi8KK2ludCB1c2JfZ2FkZ2V0X2NvbmZpZ19idWYoCisJY29uc3Qgc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvcgkqY29uZmlnLAorCXZvaWQJCQkJCSpidWYsCisJdW5zaWduZWQJCQkJbGVuZ3RoLAorCWNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIJKipkZXNjCispCit7CisJc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvcgkJKmNwID0gYnVmOworCWludAkJCQkJbGVuOworCisJLyogY29uZmlnIGRlc2NyaXB0b3IgZmlyc3QgKi8KKwlpZiAobGVuZ3RoIDwgVVNCX0RUX0NPTkZJR19TSVpFIHx8ICFkZXNjKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqY3AgPSAqY29uZmlnOyAKKworCS8qIHRoZW4gaW50ZXJmYWNlL2VuZHBvaW50L2NsYXNzL3ZlbmRvci8uLi4gKi8KKwlsZW4gPSB1c2JfZGVzY3JpcHRvcl9maWxsYnVmKFVTQl9EVF9DT05GSUdfU0laRSArICh1OCopYnVmLAorCQkJbGVuZ3RoIC0gVVNCX0RUX0NPTkZJR19TSVpFLCBkZXNjKTsKKwlpZiAobGVuIDwgMCkKKwkJcmV0dXJuIGxlbjsKKwlsZW4gKz0gVVNCX0RUX0NPTkZJR19TSVpFOworCWlmIChsZW4gPiAweGZmZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogcGF0Y2ggdXAgdGhlIGNvbmZpZyBkZXNjcmlwdG9yICovCisJY3AtPmJMZW5ndGggPSBVU0JfRFRfQ09ORklHX1NJWkU7CisJY3AtPmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9DT05GSUc7CisJY3AtPndUb3RhbExlbmd0aCA9IGNwdV90b19sZTE2KGxlbik7CisJY3AtPmJtQXR0cmlidXRlcyB8PSBVU0JfQ09ORklHX0FUVF9PTkU7CisJcmV0dXJuIGxlbjsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZjhhOWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKQEAgLTAsMCArMSwxNzkzIEBACisvKgorICogZHVtbXlfaGNkLmMgLS0gRHVtbXkvTG9vcGJhY2sgVVNCIGhvc3QgYW5kIGRldmljZSBlbXVsYXRvciBkcml2ZXIuCisgKgorICogTWFpbnRhaW5lcjogQWxhbiBTdGVybiA8c3Rlcm5Acm93bGFuZC5oYXJ2YXJkLmVkdT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgRGF2aWQgQnJvd25lbGwKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA1IEFsYW4gU3Rlcm4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworCisvKgorICogVGhpcyBleHBvc2VzIGEgZGV2aWNlIHNpZGUgIlVTQiBnYWRnZXQiIEFQSSwgZHJpdmVuIGJ5IHJlcXVlc3RzIHRvIGEKKyAqIExpbnV4LVVTQiBob3N0IGNvbnRyb2xsZXIgZHJpdmVyLiAgVVNCIHRyYWZmaWMgaXMgc2ltdWxhdGVkOyB0aGVyZSdzCisgKiBubyBuZWVkIGZvciBVU0IgaGFyZHdhcmUuICBVc2UgdGhpcyB3aXRoIHR3byBvdGhlciBkcml2ZXJzOgorICoKKyAqICAtIEdhZGdldCBkcml2ZXIsIHJlc3BvbmRpbmcgdG8gcmVxdWVzdHMgKHNsYXZlKTsKKyAqICAtIEhvc3Qtc2lkZSBkZXZpY2UgZHJpdmVyLCBhcyBhbHJlYWR5IGZhbWlsaWFyIGluIExpbnV4LgorICoKKyAqIEhhdmluZyB0aGlzIGFsbCBpbiBvbmUga2VybmVsIGNhbiBoZWxwIHNvbWUgc3RhZ2VzIG9mIGRldmVsb3BtZW50LAorICogYnlwYXNzaW5nIHNvbWUgaGFyZHdhcmUgKGFuZCBkcml2ZXIpIGlzc3Vlcy4gIFVNTCBjb3VsZCBoZWxwIHRvby4KKyAqLworCisjZGVmaW5lIERFQlVHCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiX2dhZGdldC5oPgorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisKKyNpbmNsdWRlICIuLi9jb3JlL2hjZC5oIgorCisKKyNkZWZpbmUgRFJJVkVSX0RFU0MJIlVTQiBIb3N0K0dhZGdldCBFbXVsYXRvciIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjE3IERlYyAyMDA0IgorCitzdGF0aWMgY29uc3QgY2hhcglkcml2ZXJfbmFtZSBbXSA9ICJkdW1teV9oY2QiOworc3RhdGljIGNvbnN0IGNoYXIJZHJpdmVyX2Rlc2MgW10gPSAiVVNCIEhvc3QrR2FkZ2V0IEVtdWxhdG9yIjsKKworc3RhdGljIGNvbnN0IGNoYXIJZ2FkZ2V0X25hbWUgW10gPSAiZHVtbXlfdWRjIjsKKworTU9EVUxFX0RFU0NSSVBUSU9OIChEUklWRVJfREVTQyk7CitNT0RVTEVfQVVUSE9SICgiRGF2aWQgQnJvd25lbGwiKTsKK01PRFVMRV9MSUNFTlNFICgiR1BMIik7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGdhZGdldCBzaWRlIGRyaXZlciBkYXRhIHN0cnVjdHJlcyAqLworc3RydWN0IGR1bW15X2VwIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlxdWV1ZTsKKwl1bnNpZ25lZCBsb25nCQkJbGFzdF9pbzsJLyogamlmZmllcyB0aW1lc3RhbXAgKi8KKwlzdHJ1Y3QgdXNiX2dhZGdldAkJKmdhZGdldDsKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2M7CisJc3RydWN0IHVzYl9lcAkJCWVwOworCXVuc2lnbmVkCQkJaGFsdGVkIDogMTsKKwl1bnNpZ25lZAkJCWFscmVhZHlfc2VlbiA6IDE7CisJdW5zaWduZWQJCQlzZXR1cF9zdGFnZSA6IDE7Cit9OworCitzdHJ1Y3QgZHVtbXlfcmVxdWVzdCB7CisJc3RydWN0IGxpc3RfaGVhZAkJcXVldWU7CQkvKiBlcCdzIHJlcXVlc3RzICovCisJc3RydWN0IHVzYl9yZXF1ZXN0CQlyZXE7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdW1teV9lcCAqdXNiX2VwX3RvX2R1bW15X2VwIChzdHJ1Y3QgdXNiX2VwICpfZXApCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZiAoX2VwLCBzdHJ1Y3QgZHVtbXlfZXAsIGVwKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHVtbXlfcmVxdWVzdCAqdXNiX3JlcXVlc3RfdG9fZHVtbXlfcmVxdWVzdAorCQkoc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXJldHVybiBjb250YWluZXJfb2YgKF9yZXEsIHN0cnVjdCBkdW1teV9yZXF1ZXN0LCByZXEpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogRXZlcnkgZGV2aWNlIGhhcyBlcDAgZm9yIGNvbnRyb2wgcmVxdWVzdHMsIHBsdXMgdXAgdG8gMzAgbW9yZSBlbmRwb2ludHMsCisgKiBpbiBvbmUgb2YgdHdvIHR5cGVzOgorICoKKyAqICAgLSBDb25maWd1cmFibGU6ICBkaXJlY3Rpb24gKGluL291dCksIHR5cGUgKGJ1bGssIGlzbywgZXRjKSwgYW5kIGVuZHBvaW50CisgKiAgICAgbnVtYmVyIGNhbiBiZSBjaGFuZ2VkLiAgTmFtZXMgbGlrZSAiZXAtYSIgYXJlIHVzZWQgZm9yIHRoaXMgdHlwZS4KKyAqCisgKiAgIC0gRml4ZWQgRnVuY3Rpb246ICBpbiBvdGhlciBjYXNlcy4gIHNvbWUgY2hhcmFjdGVyaXN0aWNzIG1heSBiZSBtdXRhYmxlOworICogICAgIHRoYXQnZCBiZSBoYXJkd2FyZS1zcGVjaWZpYy4gIE5hbWVzIGxpa2UgImVwMTJvdXQtYnVsayIgYXJlIHVzZWQuCisgKgorICogR2FkZ2V0IGRyaXZlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBub3Qgc2V0dGluZyB1cCBjb25mbGljdGluZyBlbmRwb2ludAorICogY29uZmlndXJhdGlvbnMsIGlsbGVnYWwgb3IgdW5zdXBwb3J0ZWQgcGFja2V0IGxlbmd0aHMsIGFuZCBzbyBvbi4KKyAqLworCitzdGF0aWMgY29uc3QgY2hhciBlcDBuYW1lIFtdID0gImVwMCI7CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBlcF9uYW1lIFtdID0geworCWVwMG5hbWUsCQkJCS8qIGV2ZXJ5b25lIGhhcyBlcDAgKi8KKworCS8qIGFjdCBsaWtlIGEgbmV0MjI4MDogaGlnaCBzcGVlZCwgc2l4IGNvbmZpZ3VyYWJsZSBlbmRwb2ludHMgKi8KKwkiZXAtYSIsICJlcC1iIiwgImVwLWMiLCAiZXAtZCIsICJlcC1lIiwgImVwLWYiLAorCisJLyogb3IgbGlrZSBweGEyNTA6IGZpZnRlZW4gZml4ZWQgZnVuY3Rpb24gZW5kcG9pbnRzICovCisJImVwMWluLWJ1bGsiLCAiZXAyb3V0LWJ1bGsiLCAiZXAzaW4taXNvIiwgImVwNG91dC1pc28iLCAiZXA1aW4taW50IiwKKwkiZXA2aW4tYnVsayIsICJlcDdvdXQtYnVsayIsICJlcDhpbi1pc28iLCAiZXA5b3V0LWlzbyIsICJlcDEwaW4taW50IiwKKwkiZXAxMWluLWJ1bGsiLCAiZXAxMm91dC1idWxrIiwgImVwMTNpbi1pc28iLCAiZXAxNG91dC1pc28iLAorCQkiZXAxNWluLWludCIsCisKKwkvKiBvciBsaWtlIHNhMTEwMDogdHdvIGZpeGVkIGZ1bmN0aW9uIGVuZHBvaW50cyAqLworCSJlcDFvdXQtYnVsayIsICJlcDJpbi1idWxrIiwKK307CisjZGVmaW5lIERVTU1ZX0VORFBPSU5UUwkoc2l6ZW9mKGVwX25hbWUpL3NpemVvZihjaGFyICopKQorCisjZGVmaW5lIEZJRk9fU0laRQkJNjQKKworc3RydWN0IHVyYnAgeworCXN0cnVjdCB1cmIJCSp1cmI7CisJc3RydWN0IGxpc3RfaGVhZAl1cmJwX2xpc3Q7Cit9OworCitzdHJ1Y3QgZHVtbXkgeworCXNwaW5sb2NrX3QJCQlsb2NrOworCisJLyoKKwkgKiBTTEFWRS9HQURHRVQgc2lkZSBzdXBwb3J0CisJICovCisJc3RydWN0IGR1bW15X2VwCQkJZXAgW0RVTU1ZX0VORFBPSU5UU107CisJaW50CQkJCWFkZHJlc3M7CisJc3RydWN0IHVzYl9nYWRnZXQJCWdhZGdldDsKKwlzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIJKmRyaXZlcjsKKwlzdHJ1Y3QgZHVtbXlfcmVxdWVzdAkJZmlmb19yZXE7CisJdTgJCQkJZmlmb19idWYgW0ZJRk9fU0laRV07CisJdTE2CQkJCWRldnN0YXR1czsKKworCS8qCisJICogTUFTVEVSL0hPU1Qgc2lkZSBzdXBwb3J0CisJICovCisJc3RydWN0IHRpbWVyX2xpc3QJCXRpbWVyOworCXUzMgkJCQlwb3J0X3N0YXR1czsKKwl1bnNpZ25lZAkJCXJlc3VtaW5nOjE7CisJdW5zaWduZWQgbG9uZwkJCXJlX3RpbWVvdXQ7CisKKwlzdHJ1Y3QgdXNiX2RldmljZQkJKnVkZXY7CisJc3RydWN0IGxpc3RfaGVhZAkJdXJicF9saXN0OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHVtbXkgKmhjZF90b19kdW1teSAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlyZXR1cm4gKHN0cnVjdCBkdW1teSAqKSAoaGNkLT5oY2RfcHJpdik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9oY2QgKmR1bW15X3RvX2hjZCAoc3RydWN0IGR1bW15ICpkdW0pCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZigodm9pZCAqKSBkdW0sIHN0cnVjdCB1c2JfaGNkLCBoY2RfcHJpdik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZSAqZHVtbXlfZGV2IChzdHJ1Y3QgZHVtbXkgKmR1bSkKK3sKKwlyZXR1cm4gZHVtbXlfdG9faGNkKGR1bSktPnNlbGYuY29udHJvbGxlcjsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHVtbXkgKmVwX3RvX2R1bW15IChzdHJ1Y3QgZHVtbXlfZXAgKmVwKQoreworCXJldHVybiBjb250YWluZXJfb2YgKGVwLT5nYWRnZXQsIHN0cnVjdCBkdW1teSwgZ2FkZ2V0KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHVtbXkgKmdhZGdldF90b19kdW1teSAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mIChnYWRnZXQsIHN0cnVjdCBkdW1teSwgZ2FkZ2V0KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHVtbXkgKmdhZGdldF9kZXZfdG9fZHVtbXkgKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mIChkZXYsIHN0cnVjdCBkdW1teSwgZ2FkZ2V0LmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHVtbXkJCQkqdGhlX2NvbnRyb2xsZXI7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBUaGlzICJoYXJkd2FyZSIgbWF5IGxvb2sgYSBiaXQgb2RkIGluIGRpYWdub3N0aWNzIHNpbmNlIGl0J3MgZ290IGJvdGgKKyAqIGhvc3QgYW5kIGRldmljZSBzaWRlczsgYW5kIGl0IGJpbmRzIGRpZmZlcmVudCBkcml2ZXJzIHRvIGVhY2ggc2lkZS4KKyAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJCXRoZV9wZGV2OworCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgZHVtbXlfZHJpdmVyID0geworCS5uYW1lCQk9IChjaGFyICopIGRyaXZlcl9uYW1lLAorCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogU0xBVkUvR0FER0VUIFNJREUgRFJJVkVSCisgKgorICogVGhpcyBvbmx5IHRyYWNrcyBnYWRnZXQgc3RhdGUuICBBbGwgdGhlIHdvcmsgaXMgZG9uZSB3aGVuIHRoZSBob3N0CisgKiBzaWRlIHRyaWVzIHNvbWUgKGVtdWxhdGVkKSBpL28gb3BlcmF0aW9uLiAgUmVhbCBkZXZpY2UgY29udHJvbGxlcgorICogZHJpdmVycyB3b3VsZCBkbyByZWFsIGkvbyB1c2luZyBkbWEsIGZpZm9zLCBpcnFzLCB0aW1lcnMsIGV0Yy4KKyAqLworCisjZGVmaW5lIGlzX2VuYWJsZWQoZHVtKSBcCisJKGR1bS0+cG9ydF9zdGF0dXMgJiBVU0JfUE9SVF9TVEFUX0VOQUJMRSkKKworc3RhdGljIGludAorZHVtbXlfZW5hYmxlIChzdHJ1Y3QgdXNiX2VwICpfZXAsIGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYykKK3sKKwlzdHJ1Y3QgZHVtbXkJCSpkdW07CisJc3RydWN0IGR1bW15X2VwCQkqZXA7CisJdW5zaWduZWQJCW1heDsKKwlpbnQJCQlyZXR2YWw7CisKKwllcCA9IHVzYl9lcF90b19kdW1teV9lcCAoX2VwKTsKKwlpZiAoIV9lcCB8fCAhZGVzYyB8fCBlcC0+ZGVzYyB8fCBfZXAtPm5hbWUgPT0gZXAwbmFtZQorCQkJfHwgZGVzYy0+YkRlc2NyaXB0b3JUeXBlICE9IFVTQl9EVF9FTkRQT0lOVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZHVtID0gZXBfdG9fZHVtbXkgKGVwKTsKKwlpZiAoIWR1bS0+ZHJpdmVyIHx8ICFpc19lbmFibGVkIChkdW0pKQorCQlyZXR1cm4gLUVTSFVURE9XTjsKKwltYXggPSBsZTE2X3RvX2NwdShkZXNjLT53TWF4UGFja2V0U2l6ZSkgJiAweDNmZjsKKworCS8qIGRyaXZlcnMgbXVzdCBub3QgcmVxdWVzdCBiYWQgc2V0dGluZ3MsIHNpbmNlIGxvd2VyIGxldmVscworCSAqIChoYXJkd2FyZSBvciBpdHMgZHJpdmVycykgbWF5IG5vdCBjaGVjay4gIHNvbWUgZW5kcG9pbnRzCisJICogY2FuJ3QgZG8gaXNvLCBtYW55IGhhdmUgbWF4cGFja2V0IGxpbWl0YXRpb25zLCBldGMuCisJICoKKwkgKiBzaW5jZSB0aGlzICJoYXJkd2FyZSIgZHJpdmVyIGlzIGhlcmUgdG8gaGVscCBkZWJ1Z2dpbmcsIHdlCisJICogaGF2ZSBzb21lIGV4dHJhIHNhbml0eSBjaGVja3MuICAodGhlcmUgY291bGQgYmUgbW9yZSB0aG91Z2gsCisJICogZXNwZWNpYWxseSBmb3IgImVwOW91dCIgc3R5bGUgZml4ZWQgZnVuY3Rpb24gb25lcy4pCisJICovCisJcmV0dmFsID0gLUVJTlZBTDsKKwlzd2l0Y2ggKGRlc2MtPmJtQXR0cmlidXRlcyAmIDB4MDMpIHsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEs6CisJCWlmIChzdHJzdHIgKGVwLT5lcC5uYW1lLCAiLWlzbyIpCisJCQkJfHwgc3Ryc3RyIChlcC0+ZXAubmFtZSwgIi1pbnQiKSkgeworCQkJZ290byBkb25lOworCQl9CisJCXN3aXRjaCAoZHVtLT5nYWRnZXQuc3BlZWQpIHsKKwkJY2FzZSBVU0JfU1BFRURfSElHSDoKKwkJCWlmIChtYXggPT0gNTEyKQorCQkJCWJyZWFrOworCQkJLyogY29uc2VydmUgcmV0dXJuIHN0YXRlbWVudHMgKi8KKwkJZGVmYXVsdDoKKwkJCXN3aXRjaCAobWF4KSB7CisJCQljYXNlIDg6IGNhc2UgMTY6IGNhc2UgMzI6IGNhc2UgNjQ6CisJCQkJLyogd2UnbGwgZmFrZSBhbnkgbGVnYWwgc2l6ZSAqLworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJY2FzZSBVU0JfU1BFRURfTE9XOgorCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lOVDoKKwkJaWYgKHN0cnN0ciAoZXAtPmVwLm5hbWUsICItaXNvIikpIC8qIGJ1bGsgaXMgb2sgKi8KKwkJCWdvdG8gZG9uZTsKKwkJLyogcmVhbCBoYXJkd2FyZSBtaWdodCBub3QgaGFuZGxlIGFsbCBwYWNrZXQgc2l6ZXMgKi8KKwkJc3dpdGNoIChkdW0tPmdhZGdldC5zcGVlZCkgeworCQljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQkJaWYgKG1heCA8PSAxMDI0KQorCQkJCWJyZWFrOworCQkJLyogc2F2ZSBhIHJldHVybiBzdGF0ZW1lbnQgKi8KKwkJY2FzZSBVU0JfU1BFRURfRlVMTDoKKwkJCWlmIChtYXggPD0gNjQpCisJCQkJYnJlYWs7CisJCQkvKiBzYXZlIGEgcmV0dXJuIHN0YXRlbWVudCAqLworCQlkZWZhdWx0OgorCQkJaWYgKG1heCA8PSA4KQorCQkJCWJyZWFrOworCQkJZ290byBkb25lOworCQl9CisJCWJyZWFrOworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoKKwkJaWYgKHN0cnN0ciAoZXAtPmVwLm5hbWUsICItYnVsayIpCisJCQkJfHwgc3Ryc3RyIChlcC0+ZXAubmFtZSwgIi1pbnQiKSkKKwkJCWdvdG8gZG9uZTsKKwkJLyogcmVhbCBoYXJkd2FyZSBtaWdodCBub3QgaGFuZGxlIGFsbCBwYWNrZXQgc2l6ZXMgKi8KKwkJc3dpdGNoIChkdW0tPmdhZGdldC5zcGVlZCkgeworCQljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQkJaWYgKG1heCA8PSAxMDI0KQorCQkJCWJyZWFrOworCQkJLyogc2F2ZSBhIHJldHVybiBzdGF0ZW1lbnQgKi8KKwkJY2FzZSBVU0JfU1BFRURfRlVMTDoKKwkJCWlmIChtYXggPD0gMTAyMykKKwkJCQlicmVhazsKKwkJCS8qIHNhdmUgYSByZXR1cm4gc3RhdGVtZW50ICovCisJCWRlZmF1bHQ6CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogZmV3IGNoaXBzIHN1cHBvcnQgY29udHJvbCBleGNlcHQgb24gZXAwICovCisJCWdvdG8gZG9uZTsKKwl9CisKKwlfZXAtPm1heHBhY2tldCA9IG1heDsKKwllcC0+ZGVzYyA9IGRlc2M7CisKKwlkZXZfZGJnIChkdW1teV9kZXYoZHVtKSwgImVuYWJsZWQgJXMgKGVwJWQlcy0lcykgbWF4cGFja2V0ICVkXG4iLAorCQlfZXAtPm5hbWUsCisJCWRlc2MtPmJFbmRwb2ludEFkZHJlc3MgJiAweDBmLAorCQkoZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pID8gImluIiA6ICJvdXQiLAorCQkoeyBjaGFyICp2YWw7CisJCSBzd2l0Y2ggKGRlc2MtPmJtQXR0cmlidXRlcyAmIDB4MDMpIHsKKwkJIGNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQlVMSzogdmFsID0gImJ1bGsiOyBicmVhazsKKwkJIGNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzogdmFsID0gImlzbyI7IGJyZWFrOworCQkgY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ6IHZhbCA9ICJpbnRyIjsgYnJlYWs7CisJCSBkZWZhdWx0OiB2YWwgPSAiY3RybCI7IGJyZWFrOworCQkgfTsgdmFsOyB9KSwKKwkJbWF4KTsKKworCS8qIGF0IHRoaXMgcG9pbnQgcmVhbCBoYXJkd2FyZSBzaG91bGQgYmUgTkFLaW5nIHRyYW5zZmVycworCSAqIHRvIHRoYXQgZW5kcG9pbnQsIHVudGlsIGEgYnVmZmVyIGlzIHF1ZXVlZCB0byBpdC4KKwkgKi8KKwlyZXR2YWwgPSAwOworZG9uZToKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiBjYWxsZWQgd2l0aCBzcGlubG9jayBoZWxkICovCitzdGF0aWMgdm9pZCBudWtlIChzdHJ1Y3QgZHVtbXkgKmR1bSwgc3RydWN0IGR1bW15X2VwICplcCkKK3sKKwl3aGlsZSAoIWxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKSB7CisJCXN0cnVjdCBkdW1teV9yZXF1ZXN0CSpyZXE7CisKKwkJcmVxID0gbGlzdF9lbnRyeSAoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBkdW1teV9yZXF1ZXN0LCBxdWV1ZSk7CisJCWxpc3RfZGVsX2luaXQgKCZyZXEtPnF1ZXVlKTsKKwkJcmVxLT5yZXEuc3RhdHVzID0gLUVTSFVURE9XTjsKKworCQlzcGluX3VubG9jayAoJmR1bS0+bG9jayk7CisJCXJlcS0+cmVxLmNvbXBsZXRlICgmZXAtPmVwLCAmcmVxLT5yZXEpOworCQlzcGluX2xvY2sgKCZkdW0tPmxvY2spOworCX0KK30KKworc3RhdGljIGludCBkdW1teV9kaXNhYmxlIChzdHJ1Y3QgdXNiX2VwICpfZXApCit7CisJc3RydWN0IGR1bW15X2VwCQkqZXA7CisJc3RydWN0IGR1bW15CQkqZHVtOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCWludAkJCXJldHZhbDsKKworCWVwID0gdXNiX2VwX3RvX2R1bW15X2VwIChfZXApOworCWlmICghX2VwIHx8ICFlcC0+ZGVzYyB8fCBfZXAtPm5hbWUgPT0gZXAwbmFtZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZHVtID0gZXBfdG9fZHVtbXkgKGVwKTsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZHVtLT5sb2NrLCBmbGFncyk7CisJZXAtPmRlc2MgPSBOVUxMOworCXJldHZhbCA9IDA7CisJbnVrZSAoZHVtLCBlcCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmR1bS0+bG9jaywgZmxhZ3MpOworCisJZGV2X2RiZyAoZHVtbXlfZGV2KGR1bSksICJkaXNhYmxlZCAlc1xuIiwgX2VwLT5uYW1lKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9yZXF1ZXN0ICoKK2R1bW15X2FsbG9jX3JlcXVlc3QgKHN0cnVjdCB1c2JfZXAgKl9lcCwgaW50IG1lbV9mbGFncykKK3sKKwlzdHJ1Y3QgZHVtbXlfZXAJCSplcDsKKwlzdHJ1Y3QgZHVtbXlfcmVxdWVzdAkqcmVxOworCisJaWYgKCFfZXApCisJCXJldHVybiBOVUxMOworCWVwID0gdXNiX2VwX3RvX2R1bW15X2VwIChfZXApOworCisJcmVxID0ga21hbGxvYyAoc2l6ZW9mICpyZXEsIG1lbV9mbGFncyk7CisJaWYgKCFyZXEpCisJCXJldHVybiBOVUxMOworCW1lbXNldCAocmVxLCAwLCBzaXplb2YgKnJlcSk7CisJSU5JVF9MSVNUX0hFQUQgKCZyZXEtPnF1ZXVlKTsKKwlyZXR1cm4gJnJlcS0+cmVxOworfQorCitzdGF0aWMgdm9pZAorZHVtbXlfZnJlZV9yZXF1ZXN0IChzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSkKK3sKKwlzdHJ1Y3QgZHVtbXlfZXAJCSplcDsKKwlzdHJ1Y3QgZHVtbXlfcmVxdWVzdAkqcmVxOworCisJZXAgPSB1c2JfZXBfdG9fZHVtbXlfZXAgKF9lcCk7CisJaWYgKCFlcCB8fCAhX3JlcSB8fCAoIWVwLT5kZXNjICYmIF9lcC0+bmFtZSAhPSBlcDBuYW1lKSkKKwkJcmV0dXJuOworCisJcmVxID0gdXNiX3JlcXVlc3RfdG9fZHVtbXlfcmVxdWVzdCAoX3JlcSk7CisJV0FSTl9PTiAoIWxpc3RfZW1wdHkgKCZyZXEtPnF1ZXVlKSk7CisJa2ZyZWUgKHJlcSk7Cit9CisKK3N0YXRpYyB2b2lkICoKK2R1bW15X2FsbG9jX2J1ZmZlciAoCisJc3RydWN0IHVzYl9lcCAqX2VwLAorCXVuc2lnbmVkIGJ5dGVzLAorCWRtYV9hZGRyX3QgKmRtYSwKKwlpbnQgbWVtX2ZsYWdzCispIHsKKwljaGFyCQkJKnJldHZhbDsKKwlzdHJ1Y3QgZHVtbXlfZXAJCSplcDsKKwlzdHJ1Y3QgZHVtbXkJCSpkdW07CisKKwllcCA9IHVzYl9lcF90b19kdW1teV9lcCAoX2VwKTsKKwlkdW0gPSBlcF90b19kdW1teSAoZXApOworCisJaWYgKCFkdW0tPmRyaXZlcikKKwkJcmV0dXJuIE5VTEw7CisJcmV0dmFsID0ga21hbGxvYyAoYnl0ZXMsIG1lbV9mbGFncyk7CisJKmRtYSA9IChkbWFfYWRkcl90KSByZXR2YWw7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQKK2R1bW15X2ZyZWVfYnVmZmVyICgKKwlzdHJ1Y3QgdXNiX2VwICpfZXAsCisJdm9pZCAqYnVmLAorCWRtYV9hZGRyX3QgZG1hLAorCXVuc2lnbmVkIGJ5dGVzCispIHsKKwlpZiAoYnl0ZXMpCisJCWtmcmVlIChidWYpOworfQorCitzdGF0aWMgdm9pZAorZmlmb19jb21wbGV0ZSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworfQorCitzdGF0aWMgaW50CitkdW1teV9xdWV1ZSAoc3RydWN0IHVzYl9lcCAqX2VwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKl9yZXEsIGludCBtZW1fZmxhZ3MpCit7CisJc3RydWN0IGR1bW15X2VwCQkqZXA7CisJc3RydWN0IGR1bW15X3JlcXVlc3QJKnJlcTsKKwlzdHJ1Y3QgZHVtbXkJCSpkdW07CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwlyZXEgPSB1c2JfcmVxdWVzdF90b19kdW1teV9yZXF1ZXN0IChfcmVxKTsKKwlpZiAoIV9yZXEgfHwgIWxpc3RfZW1wdHkgKCZyZXEtPnF1ZXVlKSB8fCAhX3JlcS0+Y29tcGxldGUpCisJCXJldHVybiAtRUlOVkFMOworCisJZXAgPSB1c2JfZXBfdG9fZHVtbXlfZXAgKF9lcCk7CisJaWYgKCFfZXAgfHwgKCFlcC0+ZGVzYyAmJiBfZXAtPm5hbWUgIT0gZXAwbmFtZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJZHVtID0gZXBfdG9fZHVtbXkgKGVwKTsKKwlpZiAoIWR1bS0+ZHJpdmVyIHx8ICFpc19lbmFibGVkIChkdW0pKQorCQlyZXR1cm4gLUVTSFVURE9XTjsKKworI2lmIDAKKwlkZXZfZGJnIChkdW1teV9kZXYoZHVtKSwgImVwICVwIHF1ZXVlIHJlcSAlcCB0byAlcywgbGVuICVkIGJ1ZiAlcFxuIiwKKwkJCWVwLCBfcmVxLCBfZXAtPm5hbWUsIF9yZXEtPmxlbmd0aCwgX3JlcS0+YnVmKTsKKyNlbmRpZgorCisJX3JlcS0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCV9yZXEtPmFjdHVhbCA9IDA7CisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkdW0tPmxvY2ssIGZsYWdzKTsKKworCS8qIGltcGxlbWVudCBhbiBlbXVsYXRlZCBzaW5nbGUtcmVxdWVzdCBGSUZPICovCisJaWYgKGVwLT5kZXNjICYmIChlcC0+ZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pICYmCisJCQlsaXN0X2VtcHR5ICgmZHVtLT5maWZvX3JlcS5xdWV1ZSkgJiYKKwkJCWxpc3RfZW1wdHkgKCZlcC0+cXVldWUpICYmCisJCQlfcmVxLT5sZW5ndGggPD0gRklGT19TSVpFKSB7CisJCXJlcSA9ICZkdW0tPmZpZm9fcmVxOworCQlyZXEtPnJlcSA9ICpfcmVxOworCQlyZXEtPnJlcS5idWYgPSBkdW0tPmZpZm9fYnVmOworCQltZW1jcHkgKGR1bS0+Zmlmb19idWYsIF9yZXEtPmJ1ZiwgX3JlcS0+bGVuZ3RoKTsKKwkJcmVxLT5yZXEuY29udGV4dCA9IGR1bTsKKwkJcmVxLT5yZXEuY29tcGxldGUgPSBmaWZvX2NvbXBsZXRlOworCisJCXNwaW5fdW5sb2NrICgmZHVtLT5sb2NrKTsKKwkJX3JlcS0+YWN0dWFsID0gX3JlcS0+bGVuZ3RoOworCQlfcmVxLT5zdGF0dXMgPSAwOworCQlfcmVxLT5jb21wbGV0ZSAoX2VwLCBfcmVxKTsKKwkJc3Bpbl9sb2NrICgmZHVtLT5sb2NrKTsKKwl9CisJbGlzdF9hZGRfdGFpbCAoJnJlcS0+cXVldWUsICZlcC0+cXVldWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkdW0tPmxvY2ssIGZsYWdzKTsKKworCS8qIHJlYWwgaGFyZHdhcmUgd291bGQgbGlrZWx5IGVuYWJsZSB0cmFuc2ZlcnMgaGVyZSwgaW4gY2FzZQorCSAqIGl0J2QgYmVlbiBsZWZ0IE5BS2luZy4KKwkgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkdW1teV9kZXF1ZXVlIChzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSkKK3sKKwlzdHJ1Y3QgZHVtbXlfZXAJCSplcDsKKwlzdHJ1Y3QgZHVtbXkJCSpkdW07CisJaW50CQkJcmV0dmFsID0gLUVJTlZBTDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlzdHJ1Y3QgZHVtbXlfcmVxdWVzdAkqcmVxID0gTlVMTDsKKworCWlmICghX2VwIHx8ICFfcmVxKQorCQlyZXR1cm4gcmV0dmFsOworCWVwID0gdXNiX2VwX3RvX2R1bW15X2VwIChfZXApOworCWR1bSA9IGVwX3RvX2R1bW15IChlcCk7CisKKwlpZiAoIWR1bS0+ZHJpdmVyKQorCQlyZXR1cm4gLUVTSFVURE9XTjsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZHVtLT5sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSAocmVxLCAmZXAtPnF1ZXVlLCBxdWV1ZSkgeworCQlpZiAoJnJlcS0+cmVxID09IF9yZXEpIHsKKwkJCWxpc3RfZGVsX2luaXQgKCZyZXEtPnF1ZXVlKTsKKwkJCV9yZXEtPnN0YXR1cyA9IC1FQ09OTlJFU0VUOworCQkJcmV0dmFsID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkdW0tPmxvY2ssIGZsYWdzKTsKKworCWlmIChyZXR2YWwgPT0gMCkgeworCQlkZXZfZGJnIChkdW1teV9kZXYoZHVtKSwKKwkJCQkiZGVxdWV1ZWQgcmVxICVwIGZyb20gJXMsIGxlbiAlZCBidWYgJXBcbiIsCisJCQkJcmVxLCBfZXAtPm5hbWUsIF9yZXEtPmxlbmd0aCwgX3JlcS0+YnVmKTsKKwkJX3JlcS0+Y29tcGxldGUgKF9lcCwgX3JlcSk7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQKK2R1bW15X3NldF9oYWx0IChzdHJ1Y3QgdXNiX2VwICpfZXAsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZHVtbXlfZXAJCSplcDsKKwlzdHJ1Y3QgZHVtbXkJCSpkdW07CisKKwlpZiAoIV9lcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZXAgPSB1c2JfZXBfdG9fZHVtbXlfZXAgKF9lcCk7CisJZHVtID0gZXBfdG9fZHVtbXkgKGVwKTsKKwlpZiAoIWR1bS0+ZHJpdmVyKQorCQlyZXR1cm4gLUVTSFVURE9XTjsKKwlpZiAoIXZhbHVlKQorCQllcC0+aGFsdGVkID0gMDsKKwllbHNlIGlmIChlcC0+ZGVzYyAmJiAoZXAtPmRlc2MtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSAmJgorCQkJIWxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKQorCQlyZXR1cm4gLUVBR0FJTjsKKwllbHNlCisJCWVwLT5oYWx0ZWQgPSAxOworCS8qIEZJWE1FIGNsZWFyIGVtdWxhdGVkIGRhdGEgdG9nZ2xlIHRvbyAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9lcF9vcHMgZHVtbXlfZXBfb3BzID0geworCS5lbmFibGUJCT0gZHVtbXlfZW5hYmxlLAorCS5kaXNhYmxlCT0gZHVtbXlfZGlzYWJsZSwKKworCS5hbGxvY19yZXF1ZXN0CT0gZHVtbXlfYWxsb2NfcmVxdWVzdCwKKwkuZnJlZV9yZXF1ZXN0CT0gZHVtbXlfZnJlZV9yZXF1ZXN0LAorCisJLmFsbG9jX2J1ZmZlcgk9IGR1bW15X2FsbG9jX2J1ZmZlciwKKwkuZnJlZV9idWZmZXIJPSBkdW1teV9mcmVlX2J1ZmZlciwKKwkvKiBtYXAsIHVubWFwLCAuLi4gZXZlbnR1YWxseSBob29rIHRoZSAiZ2VuZXJpYyIgZG1hIGNhbGxzICovCisKKwkucXVldWUJCT0gZHVtbXlfcXVldWUsCisJLmRlcXVldWUJPSBkdW1teV9kZXF1ZXVlLAorCisJLnNldF9oYWx0CT0gZHVtbXlfc2V0X2hhbHQsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiB0aGVyZSBhcmUgYm90aCBob3N0IGFuZCBkZXZpY2Ugc2lkZSB2ZXJzaW9ucyBvZiB0aGlzIGNhbGwgLi4uICovCitzdGF0aWMgaW50IGR1bW15X2dfZ2V0X2ZyYW1lIChzdHJ1Y3QgdXNiX2dhZGdldCAqX2dhZGdldCkKK3sKKwlzdHJ1Y3QgdGltZXZhbAl0djsKKworCWRvX2dldHRpbWVvZmRheSAoJnR2KTsKKwlyZXR1cm4gdHYudHZfdXNlYyAvIDEwMDA7Cit9CisKK3N0YXRpYyBpbnQgZHVtbXlfd2FrZXVwIChzdHJ1Y3QgdXNiX2dhZGdldCAqX2dhZGdldCkKK3sKKwlzdHJ1Y3QgZHVtbXkJKmR1bTsKKworCWR1bSA9IGdhZGdldF90b19kdW1teSAoX2dhZGdldCk7CisJaWYgKChkdW0tPmRldnN0YXR1cyAmICgxIDw8IFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCkpID09IDAKKwkJCXx8ICEoZHVtLT5wb3J0X3N0YXR1cyAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfU1VTUEVORCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGh1YiBub3RpY2VzIG91ciByZXF1ZXN0LCBpc3N1ZXMgZG93bnN0cmVhbSByZXN1bWUsIGV0YyAqLworCWR1bS0+cmVzdW1pbmcgPSAxOworCWR1bS0+cG9ydF9zdGF0dXMgfD0gKDEgPDwgVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR1bW15X3NldF9zZWxmcG93ZXJlZCAoc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZHVtbXkJKmR1bTsKKworCWR1bSA9IGdhZGdldF90b19kdW1teSAoX2dhZGdldCk7CisJaWYgKHZhbHVlKQorCQlkdW0tPmRldnN0YXR1cyB8PSAoMSA8PCBVU0JfREVWSUNFX1NFTEZfUE9XRVJFRCk7CisJZWxzZQorCQlkdW0tPmRldnN0YXR1cyAmPSB+KDEgPDwgVVNCX0RFVklDRV9TRUxGX1BPV0VSRUQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9nYWRnZXRfb3BzIGR1bW15X29wcyA9IHsKKwkuZ2V0X2ZyYW1lCT0gZHVtbXlfZ19nZXRfZnJhbWUsCisJLndha2V1cAkJPSBkdW1teV93YWtldXAsCisJLnNldF9zZWxmcG93ZXJlZCA9IGR1bW15X3NldF9zZWxmcG93ZXJlZCwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qICJmdW5jdGlvbiIgc3lzZnMgYXR0cmlidXRlICovCitzdGF0aWMgc3NpemVfdAorc2hvd19mdW5jdGlvbiAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGR1bW15CSpkdW0gPSBnYWRnZXRfZGV2X3RvX2R1bW15IChkZXYpOworCisJaWYgKCFkdW0tPmRyaXZlciB8fCAhZHVtLT5kcml2ZXItPmZ1bmN0aW9uKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gc2NucHJpbnRmIChidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBkdW0tPmRyaXZlci0+ZnVuY3Rpb24pOworfQorREVWSUNFX0FUVFIgKGZ1bmN0aW9uLCBTX0lSVUdPLCBzaG93X2Z1bmN0aW9uLCBOVUxMKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIERyaXZlciByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24uCisgKgorICogVGhpcyBpcyBiYXNpY2FsbHkgaGFyZHdhcmUtc3BlY2lmaWM7IHRoZXJlJ3MgdXN1YWxseSBvbmx5IG9uZSByZWFsIFVTQgorICogZGV2aWNlIChub3QgaG9zdCkgY29udHJvbGxlciBzaW5jZSB0aGF0J3MgaG93IFVTQiBkZXZpY2VzIGFyZSBpbnRlbmRlZAorICogdG8gd29yay4gIFNvIG1vc3QgaW1wbGVtZW50YXRpb25zIG9mIHRoZXNlIGFwaSBjYWxscyB3aWxsIHJlbHkgb24gdGhlCisgKiBmYWN0IHRoYXQgb25seSBvbmUgZHJpdmVyIHdpbGwgZXZlciBiaW5kIHRvIHRoZSBoYXJkd2FyZS4gIEJ1dCBjdXJpb3VzCisgKiBoYXJkd2FyZSBjYW4gYmUgYnVpbHQgd2l0aCBkaXNjcmV0ZSBjb21wb25lbnRzLCBzbyB0aGUgZ2FkZ2V0IEFQSSBkb2Vzbid0CisgKiByZXF1aXJlIHRoYXQgYXNzdW1wdGlvbi4KKyAqCisgKiBGb3IgdGhpcyBlbXVsYXRvciwgaXQgbWlnaHQgYmUgY29udmVuaWVudCB0byBjcmVhdGUgYSB1c2Igc2xhdmUgZGV2aWNlCisgKiBmb3IgZWFjaCBkcml2ZXIgdGhhdCByZWdpc3RlcnM6ICBqdXN0IGFkZCB0byBhIGJpZyByb290IGh1Yi4KKyAqLworCitzdGF0aWMgdm9pZAorZHVtbXlfdWRjX3JlbGVhc2UgKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKK30KKworc3RhdGljIHZvaWQKK2R1bW15X3BkZXZfcmVsZWFzZSAoc3RydWN0IGRldmljZSAqZGV2KQoreworfQorCitzdGF0aWMgaW50CitkdW1teV9yZWdpc3Rlcl91ZGMgKHN0cnVjdCBkdW1teSAqZHVtKQoreworCWludAkJcmM7CisKKwlzdHJjcHkgKGR1bS0+Z2FkZ2V0LmRldi5idXNfaWQsICJ1ZGMiKTsKKwlkdW0tPmdhZGdldC5kZXYucGFyZW50ID0gZHVtbXlfZGV2KGR1bSk7CisJZHVtLT5nYWRnZXQuZGV2LnJlbGVhc2UgPSBkdW1teV91ZGNfcmVsZWFzZTsKKworCXJjID0gZGV2aWNlX3JlZ2lzdGVyICgmZHVtLT5nYWRnZXQuZGV2KTsKKwlpZiAocmMgPT0gMCkKKwkJZGV2aWNlX2NyZWF0ZV9maWxlICgmZHVtLT5nYWRnZXQuZGV2LCAmZGV2X2F0dHJfZnVuY3Rpb24pOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQKK2R1bW15X3VucmVnaXN0ZXJfdWRjIChzdHJ1Y3QgZHVtbXkgKmR1bSkKK3sKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUgKCZkdW0tPmdhZGdldC5kZXYsICZkZXZfYXR0cl9mdW5jdGlvbik7CisJZGV2aWNlX3VucmVnaXN0ZXIgKCZkdW0tPmdhZGdldC5kZXYpOworfQorCitpbnQKK3VzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyIChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwlzdHJ1Y3QgZHVtbXkJKmR1bSA9IHRoZV9jb250cm9sbGVyOworCWludAkJcmV0dmFsLCBpOworCisJaWYgKCFkdW0pCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkdW0tPmRyaXZlcikKKwkJcmV0dXJuIC1FQlVTWTsKKwlpZiAoIWRyaXZlci0+YmluZCB8fCAhZHJpdmVyLT51bmJpbmQgfHwgIWRyaXZlci0+c2V0dXAKKwkJCXx8IGRyaXZlci0+c3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBTTEFWRSBzaWRlIGluaXQgLi4uIHRoZSBsYXllciBhYm92ZSBoYXJkd2FyZSwgd2hpY2gKKwkgKiBjYW4ndCBlbnVtZXJhdGUgd2l0aG91dCBoZWxwIGZyb20gdGhlIGRyaXZlciB3ZSdyZSBiaW5kaW5nLgorCSAqLworCWR1bS0+Z2FkZ2V0Lm5hbWUgPSBnYWRnZXRfbmFtZTsKKwlkdW0tPmdhZGdldC5vcHMgPSAmZHVtbXlfb3BzOworCWR1bS0+Z2FkZ2V0LmlzX2R1YWxzcGVlZCA9IDE7CisKKwlkdW0tPmRldnN0YXR1cyA9IDA7CisJZHVtLT5yZXN1bWluZyA9IDA7CisKKwlJTklUX0xJU1RfSEVBRCAoJmR1bS0+Z2FkZ2V0LmVwX2xpc3QpOworCWZvciAoaSA9IDA7IGkgPCBEVU1NWV9FTkRQT0lOVFM7IGkrKykgeworCQlzdHJ1Y3QgZHVtbXlfZXAJKmVwID0gJmR1bS0+ZXAgW2ldOworCisJCWlmICghZXBfbmFtZSBbaV0pCisJCQlicmVhazsKKwkJZXAtPmVwLm5hbWUgPSBlcF9uYW1lIFtpXTsKKwkJZXAtPmVwLm9wcyA9ICZkdW1teV9lcF9vcHM7CisJCWxpc3RfYWRkX3RhaWwgKCZlcC0+ZXAuZXBfbGlzdCwgJmR1bS0+Z2FkZ2V0LmVwX2xpc3QpOworCQllcC0+aGFsdGVkID0gZXAtPmFscmVhZHlfc2VlbiA9IGVwLT5zZXR1cF9zdGFnZSA9IDA7CisJCWVwLT5lcC5tYXhwYWNrZXQgPSB+MDsKKwkJZXAtPmxhc3RfaW8gPSBqaWZmaWVzOworCQllcC0+Z2FkZ2V0ID0gJmR1bS0+Z2FkZ2V0OworCQllcC0+ZGVzYyA9IE5VTEw7CisJCUlOSVRfTElTVF9IRUFEICgmZXAtPnF1ZXVlKTsKKwl9CisKKwlkdW0tPmdhZGdldC5lcDAgPSAmZHVtLT5lcCBbMF0uZXA7CisJZHVtLT5lcCBbMF0uZXAubWF4cGFja2V0ID0gNjQ7CisJbGlzdF9kZWxfaW5pdCAoJmR1bS0+ZXAgWzBdLmVwLmVwX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZkdW0tPmZpZm9fcmVxLnF1ZXVlKTsKKworCWR1bS0+ZHJpdmVyID0gZHJpdmVyOworCWR1bS0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAmZHJpdmVyLT5kcml2ZXI7CisJZGV2X2RiZyAoZHVtbXlfZGV2KGR1bSksICJiaW5kaW5nIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwKKwkJCWRyaXZlci0+ZHJpdmVyLm5hbWUpOworCWlmICgocmV0dmFsID0gZHJpdmVyLT5iaW5kICgmZHVtLT5nYWRnZXQpKSAhPSAwKSB7CisJCWR1bS0+ZHJpdmVyID0gTlVMTDsKKwkJZHVtLT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJLy8gRklYTUU6IENoZWNrIHRoZXNlIGNhbGxzIGZvciBlcnJvcnMgYW5kIHJlLW9yZGVyCisJZHJpdmVyLT5kcml2ZXIuYnVzID0gZHVtLT5nYWRnZXQuZGV2LnBhcmVudC0+YnVzOworCWRyaXZlcl9yZWdpc3RlciAoJmRyaXZlci0+ZHJpdmVyKTsKKworCWRldmljZV9iaW5kX2RyaXZlciAoJmR1bS0+Z2FkZ2V0LmRldik7CisKKwkvKiBraHViZCB3aWxsIGVudW1lcmF0ZSB0aGlzIGluIGEgd2hpbGUgKi8KKwlkdW0tPnBvcnRfc3RhdHVzIHw9IFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTgorCQl8ICgxIDw8IFVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wgKHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKTsKKworLyogY2FsbGVyIG11c3QgaG9sZCBsb2NrICovCitzdGF0aWMgdm9pZAorc3RvcF9hY3Rpdml0eSAoc3RydWN0IGR1bW15ICpkdW0sIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQoreworCXN0cnVjdCBkdW1teV9lcAkqZXA7CisKKwkvKiBwcmV2ZW50IGFueSBtb3JlIHJlcXVlc3RzICovCisJZHVtLT5hZGRyZXNzID0gMDsKKworCS8qIFRoZSB0aW1lciBpcyBsZWZ0IHJ1bm5pbmcgc28gdGhhdCBvdXRzdGFuZGluZyBVUkJzIGNhbiBmYWlsICovCisKKwkvKiBudWtlIGFueSBwZW5kaW5nIHJlcXVlc3RzIGZpcnN0LCBzbyBkcml2ZXIgaS9vIGlzIHF1aWVzY2VkICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeSAoZXAsICZkdW0tPmdhZGdldC5lcF9saXN0LCBlcC5lcF9saXN0KQorCQludWtlIChkdW0sIGVwKTsKKworCS8qIGRyaXZlciBub3cgZG9lcyBhbnkgbm9uLXVzYiBxdWllc2NpbmcgbmVjZXNzYXJ5ICovCisJaWYgKGRyaXZlcikgeworCQlzcGluX3VubG9jayAoJmR1bS0+bG9jayk7CisJCWRyaXZlci0+ZGlzY29ubmVjdCAoJmR1bS0+Z2FkZ2V0KTsKKwkJc3Bpbl9sb2NrICgmZHVtLT5sb2NrKTsKKwl9Cit9CisKK2ludAordXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciAoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCit7CisJc3RydWN0IGR1bW15CSpkdW0gPSB0aGVfY29udHJvbGxlcjsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJaWYgKCFkdW0pCisJCXJldHVybiAtRU5PREVWOworCWlmICghZHJpdmVyIHx8IGRyaXZlciAhPSBkdW0tPmRyaXZlcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXZfZGJnIChkdW1teV9kZXYoZHVtKSwgInVucmVnaXN0ZXIgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLAorCQkJZHJpdmVyLT5kcml2ZXIubmFtZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmR1bS0+bG9jaywgZmxhZ3MpOworCXN0b3BfYWN0aXZpdHkgKGR1bSwgZHJpdmVyKTsKKwlkdW0tPnBvcnRfc3RhdHVzICY9IH4oVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OIHwgVVNCX1BPUlRfU1RBVF9FTkFCTEUgfAorCQkJVVNCX1BPUlRfU1RBVF9MT1dfU1BFRUQgfCBVU0JfUE9SVF9TVEFUX0hJR0hfU1BFRUQpOworCWR1bS0+cG9ydF9zdGF0dXMgfD0gKDEgPDwgVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT04pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkdW0tPmxvY2ssIGZsYWdzKTsKKworCWRyaXZlci0+dW5iaW5kICgmZHVtLT5nYWRnZXQpOworCWR1bS0+ZHJpdmVyID0gTlVMTDsKKworCWRldmljZV9yZWxlYXNlX2RyaXZlciAoJmR1bS0+Z2FkZ2V0LmRldik7CisKKwlkcml2ZXJfdW5yZWdpc3RlciAoJmRyaXZlci0+ZHJpdmVyKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCAodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7CisKKyN1bmRlZiBpc19lbmFibGVkCisKK2ludCBuZXQyMjgwX3NldF9maWZvX21vZGUgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGludCBtb2RlKQoreworCXJldHVybiAtRU5PU1lTOworfQorRVhQT1JUX1NZTUJPTCAobmV0MjI4MF9zZXRfZmlmb19tb2RlKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogTUFTVEVSL0hPU1QgU0lERSBEUklWRVIKKyAqCisgKiB0aGlzIHVzZXMgdGhlIGhjZCBmcmFtZXdvcmsgdG8gaG9vayB1cCB0byBob3N0IHNpZGUgZHJpdmVycy4KKyAqIGl0cyByb290IGh1YiB3aWxsIG9ubHkgaGF2ZSBvbmUgZGV2aWNlLCBvdGhlcndpc2UgaXQgYWN0cyBsaWtlCisgKiBhIG5vcm1hbCBob3N0IGNvbnRyb2xsZXIuCisgKgorICogd2hlbiB1cmJzIGFyZSBxdWV1ZWQsIHRoZXkncmUganVzdCBzdHVjayBvbiBhIGxpc3QgdGhhdCB3ZQorICogc2NhbiBpbiBhIHRpbWVyIGNhbGxiYWNrLiAgdGhhdCBjYWxsYmFjayBjb25uZWN0cyB3cml0ZXMgZnJvbQorICogdGhlIGhvc3Qgd2l0aCByZWFkcyBmcm9tIHRoZSBkZXZpY2UsIGFuZCBzbyBvbiwgYmFzZWQgb24gdGhlCisgKiB1c2IgMi4wIHJ1bGVzLgorICovCisKK3N0YXRpYyBpbnQgZHVtbXlfdXJiX2VucXVldWUgKAorCXN0cnVjdCB1c2JfaGNkCQkJKmhjZCwKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQJKmVwLAorCXN0cnVjdCB1cmIJCQkqdXJiLAorCWludAkJCQltZW1fZmxhZ3MKKykgeworCXN0cnVjdCBkdW1teQkqZHVtOworCXN0cnVjdCB1cmJwCSp1cmJwOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlpZiAoIXVyYi0+dHJhbnNmZXJfYnVmZmVyICYmIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl1cmJwID0ga21hbGxvYyAoc2l6ZW9mICp1cmJwLCBtZW1fZmxhZ3MpOworCWlmICghdXJicCkKKwkJcmV0dXJuIC1FTk9NRU07CisJdXJicC0+dXJiID0gdXJiOworCisJZHVtID0gaGNkX3RvX2R1bW15IChoY2QpOworCXNwaW5fbG9ja19pcnFzYXZlICgmZHVtLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoIWR1bS0+dWRldikgeworCQlkdW0tPnVkZXYgPSB1cmItPmRldjsKKwkJdXNiX2dldF9kZXYgKGR1bS0+dWRldik7CisJfSBlbHNlIGlmICh1bmxpa2VseSAoZHVtLT51ZGV2ICE9IHVyYi0+ZGV2KSkKKwkJZGV2X2VyciAoZHVtbXlfZGV2KGR1bSksICJ1c2JfZGV2aWNlIGFkZHJlc3MgaGFzIGNoYW5nZWQhXG4iKTsKKworCWxpc3RfYWRkX3RhaWwgKCZ1cmJwLT51cmJwX2xpc3QsICZkdW0tPnVyYnBfbGlzdCk7CisJdXJiLT5oY3ByaXYgPSB1cmJwOworCWlmICh1c2JfcGlwZXR5cGUgKHVyYi0+cGlwZSkgPT0gUElQRV9DT05UUk9MKQorCQl1cmItPmVycm9yX2NvdW50ID0gMTsJCS8qIG1hcmsgYXMgYSBuZXcgdXJiICovCisKKwkvKiBraWNrIHRoZSBzY2hlZHVsZXIsIGl0J2xsIGRvIHRoZSByZXN0ICovCisJaWYgKCF0aW1lcl9wZW5kaW5nICgmZHVtLT50aW1lcikpCisJCW1vZF90aW1lciAoJmR1bS0+dGltZXIsIGppZmZpZXMgKyAxKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkdW0tPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkdW1teV91cmJfZGVxdWV1ZSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiKQoreworCS8qIGdpdmViYWNrIGhhcHBlbnMgYXV0b21hdGljYWxseSBpbiB0aW1lciBjYWxsYmFjayAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtYXliZV9zZXRfc3RhdHVzIChzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpCit7CisJc3Bpbl9sb2NrICgmdXJiLT5sb2NrKTsKKwlpZiAodXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKQorCQl1cmItPnN0YXR1cyA9IHN0YXR1czsKKwlzcGluX3VubG9jayAoJnVyYi0+bG9jayk7Cit9CisKKy8qIHRyYW5zZmVyIHVwIHRvIGEgZnJhbWUncyB3b3J0aDsgY2FsbGVyIG11c3Qgb3duIGxvY2sgKi8KK3N0YXRpYyBpbnQKK3RyYW5zZmVyIChzdHJ1Y3QgZHVtbXkgKmR1bSwgc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgZHVtbXlfZXAgKmVwLCBpbnQgbGltaXQpCit7CisJc3RydWN0IGR1bW15X3JlcXVlc3QJKnJlcTsKKwordG9wOgorCS8qIGlmIHRoZXJlJ3Mgbm8gcmVxdWVzdCBxdWV1ZWQsIHRoZSBkZXZpY2UgaXMgTkFLaW5nOyByZXR1cm4gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7CisJCXVuc2lnbmVkCWhvc3RfbGVuLCBkZXZfbGVuLCBsZW47CisJCWludAkJaXNfc2hvcnQsIHRvX2hvc3Q7CisJCWludAkJcmVzY2FuID0gMDsKKworCQkvKiAxLi5OIHBhY2tldHMgb2YgZXAtPmVwLm1heHBhY2tldCBlYWNoIC4uLiB0aGUgbGFzdCBvbmUKKwkJICogbWF5IGJlIHNob3J0IChpbmNsdWRpbmcgemVybyBsZW5ndGgpLgorCQkgKgorCQkgKiB3cml0ZXIgY2FuIHNlbmQgYSB6bHAgZXhwbGljaXRseSAobGVuZ3RoIDApIG9yIGltcGxpY2l0bHkKKwkJICogKGxlbmd0aCBtb2QgbWF4cGFja2V0IHplcm8sIGFuZCAnemVybycgZmxhZyk7IHRoZXkgYWx3YXlzCisJCSAqIHRlcm1pbmF0ZSByZWFkcy4KKwkJICovCisJCWhvc3RfbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCQlkZXZfbGVuID0gcmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsOworCQlsZW4gPSBtaW4gKGhvc3RfbGVuLCBkZXZfbGVuKTsKKworCQkvKiBGSVhNRSB1cGRhdGUgZW11bGF0ZWQgZGF0YSB0b2dnbGUgdG9vICovCisKKwkJdG9faG9zdCA9IHVzYl9waXBlaW4gKHVyYi0+cGlwZSk7CisJCWlmICh1bmxpa2VseSAobGVuID09IDApKQorCQkJaXNfc2hvcnQgPSAxOworCQllbHNlIHsKKwkJCWNoYXIJCSp1YnVmLCAqcmJ1ZjsKKworCQkJLyogbm90IGVub3VnaCBiYW5kd2lkdGggbGVmdD8gKi8KKwkJCWlmIChsaW1pdCA8IGVwLT5lcC5tYXhwYWNrZXQgJiYgbGltaXQgPCBsZW4pCisJCQkJYnJlYWs7CisJCQlsZW4gPSBtaW4gKGxlbiwgKHVuc2lnbmVkKSBsaW1pdCk7CisJCQlpZiAobGVuID09IDApCisJCQkJYnJlYWs7CisKKwkJCS8qIHVzZSBhbiBleHRyYSBwYXNzIGZvciB0aGUgZmluYWwgc2hvcnQgcGFja2V0ICovCisJCQlpZiAobGVuID4gZXAtPmVwLm1heHBhY2tldCkgeworCQkJCXJlc2NhbiA9IDE7CisJCQkJbGVuIC09IChsZW4gJSBlcC0+ZXAubWF4cGFja2V0KTsKKwkJCX0KKwkJCWlzX3Nob3J0ID0gKGxlbiAlIGVwLT5lcC5tYXhwYWNrZXQpICE9IDA7CisKKwkJCS8qIGVsc2UgdHJhbnNmZXIgcGFja2V0KHMpICovCisJCQl1YnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmFjdHVhbF9sZW5ndGg7CisJCQlyYnVmID0gcmVxLT5yZXEuYnVmICsgcmVxLT5yZXEuYWN0dWFsOworCQkJaWYgKHRvX2hvc3QpCisJCQkJbWVtY3B5ICh1YnVmLCByYnVmLCBsZW4pOworCQkJZWxzZQorCQkJCW1lbWNweSAocmJ1ZiwgdWJ1ZiwgbGVuKTsKKwkJCWVwLT5sYXN0X2lvID0gamlmZmllczsKKworCQkJbGltaXQgLT0gbGVuOworCQkJdXJiLT5hY3R1YWxfbGVuZ3RoICs9IGxlbjsKKwkJCXJlcS0+cmVxLmFjdHVhbCArPSBsZW47CisJCX0KKworCQkvKiBzaG9ydCBwYWNrZXRzIHRlcm1pbmF0ZSwgbWF5YmUgd2l0aCBvdmVyZmxvdy91bmRlcmZsb3cuCisJCSAqIGl0J3Mgb25seSByZWFsbHkgYW4gZXJyb3IgdG8gd3JpdGUgdG9vIG11Y2guCisJCSAqCisJCSAqIHBhcnRpYWxseSBmaWxsaW5nIGEgYnVmZmVyIG9wdGlvbmFsbHkgYmxvY2tzIHF1ZXVlIGFkdmFuY2VzCisJCSAqIChzbyBjb21wbGV0aW9uIGhhbmRsZXJzIGNhbiBjbGVhbiB1cCB0aGUgcXVldWUpIGJ1dCB3ZSBkb24ndAorCQkgKiBuZWVkIHRvIGVtdWxhdGUgc3VjaCBkYXRhLWluLWZsaWdodC4gIHNvIHdlIG9ubHkgc2hvdyBwYXJ0CisJCSAqIG9mIHRoZSBVUkJfU0hPUlRfTk9UX09LIGVmZmVjdDogY29tcGxldGlvbiBzdGF0dXMuCisJCSAqLworCQlpZiAoaXNfc2hvcnQpIHsKKwkJCWlmIChob3N0X2xlbiA9PSBkZXZfbGVuKSB7CisJCQkJcmVxLT5yZXEuc3RhdHVzID0gMDsKKwkJCQltYXliZV9zZXRfc3RhdHVzICh1cmIsIDApOworCQkJfSBlbHNlIGlmICh0b19ob3N0KSB7CisJCQkJcmVxLT5yZXEuc3RhdHVzID0gMDsKKwkJCQlpZiAoZGV2X2xlbiA+IGhvc3RfbGVuKQorCQkJCQltYXliZV9zZXRfc3RhdHVzICh1cmIsIC1FT1ZFUkZMT1cpOworCQkJCWVsc2UKKwkJCQkJbWF5YmVfc2V0X3N0YXR1cyAodXJiLAorCQkJCQkJKHVyYi0+dHJhbnNmZXJfZmxhZ3MKKwkJCQkJCQkmIFVSQl9TSE9SVF9OT1RfT0spCisJCQkJCQk/IC1FUkVNT1RFSU8gOiAwKTsKKwkJCX0gZWxzZSBpZiAoIXRvX2hvc3QpIHsKKwkJCQltYXliZV9zZXRfc3RhdHVzICh1cmIsIDApOworCQkJCWlmIChob3N0X2xlbiA+IGRldl9sZW4pCisJCQkJCXJlcS0+cmVxLnN0YXR1cyA9IC1FT1ZFUkZMT1c7CisJCQkJZWxzZQorCQkJCQlyZXEtPnJlcS5zdGF0dXMgPSAwOworCQkJfQorCisJCS8qIG1hbnkgcmVxdWVzdHMgdGVybWluYXRlIHdpdGhvdXQgYSBzaG9ydCBwYWNrZXQgKi8KKwkJfSBlbHNlIHsKKwkJCWlmIChyZXEtPnJlcS5sZW5ndGggPT0gcmVxLT5yZXEuYWN0dWFsCisJCQkJCSYmICFyZXEtPnJlcS56ZXJvKQorCQkJCXJlcS0+cmVxLnN0YXR1cyA9IDA7CisJCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID09IHVyYi0+YWN0dWFsX2xlbmd0aAorCQkJCQkmJiAhKHVyYi0+dHJhbnNmZXJfZmxhZ3MKKwkJCQkJCSYgVVJCX1pFUk9fUEFDS0VUKSkgeworCQkJCW1heWJlX3NldF9zdGF0dXMgKHVyYiwgMCk7CisJCQl9CisJCX0KKworCQkvKiBkZXZpY2Ugc2lkZSBjb21wbGV0aW9uIC0tPiBjb250aW51YWJsZSAqLworCQlpZiAocmVxLT5yZXEuc3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCQkJbGlzdF9kZWxfaW5pdCAoJnJlcS0+cXVldWUpOworCisJCQlzcGluX3VubG9jayAoJmR1bS0+bG9jayk7CisJCQlyZXEtPnJlcS5jb21wbGV0ZSAoJmVwLT5lcCwgJnJlcS0+cmVxKTsKKwkJCXNwaW5fbG9jayAoJmR1bS0+bG9jayk7CisKKwkJCS8qIHJlcXVlc3RzIG1pZ2h0IGhhdmUgYmVlbiB1bmxpbmtlZC4uLiAqLworCQkJcmVzY2FuID0gMTsKKwkJfQorCisJCS8qIGhvc3Qgc2lkZSBjb21wbGV0aW9uIC0tPiB0ZXJtaW5hdGUgKi8KKwkJaWYgKHVyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykKKwkJCWJyZWFrOworCisJCS8qIHJlc2NhbiB0byBjb250aW51ZSB3aXRoIGFueSBvdGhlciBxdWV1ZWQgaS9vICovCisJCWlmIChyZXNjYW4pCisJCQlnb3RvIHRvcDsKKwl9CisJcmV0dXJuIGxpbWl0OworfQorCitzdGF0aWMgaW50IHBlcmlvZGljX2J5dGVzIChzdHJ1Y3QgZHVtbXkgKmR1bSwgc3RydWN0IGR1bW15X2VwICplcCkKK3sKKwlpbnQJbGltaXQgPSBlcC0+ZXAubWF4cGFja2V0OworCisJaWYgKGR1bS0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSB7CisJCWludAl0bXA7CisKKwkJLyogaGlnaCBiYW5kd2lkdGggbW9kZSAqLworCQl0bXAgPSBsZTE2X3RvX2NwdShlcC0+ZGVzYy0+d01heFBhY2tldFNpemUpOworCQl0bXAgPSBsZTE2X3RvX2NwdSAodG1wKTsKKwkJdG1wID0gKHRtcCA+PiAxMSkgJiAweDAzOworCQl0bXAgKj0gOCAvKiBhcHBsaWVzIHRvIGVudGlyZSBmcmFtZSAqLzsKKwkJbGltaXQgKz0gbGltaXQgKiB0bXA7CisJfQorCXJldHVybiBsaW1pdDsKK30KKworI2RlZmluZSBpc19hY3RpdmUoZHVtKQkoKGR1bS0+cG9ydF9zdGF0dXMgJiBcCisJCShVU0JfUE9SVF9TVEFUX0NPTk5FQ1RJT04gfCBVU0JfUE9SVF9TVEFUX0VOQUJMRSB8IFwKKwkJCVVTQl9QT1JUX1NUQVRfU1VTUEVORCkpIFwKKwkJPT0gKFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTiB8IFVTQl9QT1JUX1NUQVRfRU5BQkxFKSkKKworc3RhdGljIHN0cnVjdCBkdW1teV9lcCAqZmluZF9lbmRwb2ludCAoc3RydWN0IGR1bW15ICpkdW0sIHU4IGFkZHJlc3MpCit7CisJaW50CQlpOworCisJaWYgKCFpc19hY3RpdmUgKGR1bSkpCisJCXJldHVybiBOVUxMOworCWlmICgoYWRkcmVzcyAmIH5VU0JfRElSX0lOKSA9PSAwKQorCQlyZXR1cm4gJmR1bS0+ZXAgWzBdOworCWZvciAoaSA9IDE7IGkgPCBEVU1NWV9FTkRQT0lOVFM7IGkrKykgeworCQlzdHJ1Y3QgZHVtbXlfZXAJKmVwID0gJmR1bS0+ZXAgW2ldOworCisJCWlmICghZXAtPmRlc2MpCisJCQljb250aW51ZTsKKwkJaWYgKGVwLT5kZXNjLT5iRW5kcG9pbnRBZGRyZXNzID09IGFkZHJlc3MpCisJCQlyZXR1cm4gZXA7CisJfQorCXJldHVybiBOVUxMOworfQorCisjdW5kZWYgaXNfYWN0aXZlCisKKyNkZWZpbmUgRGV2X1JlcXVlc3QJKFVTQl9UWVBFX1NUQU5EQVJEIHwgVVNCX1JFQ0lQX0RFVklDRSkKKyNkZWZpbmUgRGV2X0luUmVxdWVzdAkoRGV2X1JlcXVlc3QgfCBVU0JfRElSX0lOKQorI2RlZmluZSBJbnRmX1JlcXVlc3QJKFVTQl9UWVBFX1NUQU5EQVJEIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSkKKyNkZWZpbmUgSW50Zl9JblJlcXVlc3QJKEludGZfUmVxdWVzdCB8IFVTQl9ESVJfSU4pCisjZGVmaW5lIEVwX1JlcXVlc3QJKFVTQl9UWVBFX1NUQU5EQVJEIHwgVVNCX1JFQ0lQX0VORFBPSU5UKQorI2RlZmluZSBFcF9JblJlcXVlc3QJKEVwX1JlcXVlc3QgfCBVU0JfRElSX0lOKQorCisvKiBkcml2ZSBib3RoIHNpZGVzIG9mIHRoZSB0cmFuc2ZlcnM7IGxvb2tzIGxpa2UgaXJxIGhhbmRsZXJzIHRvCisgKiBib3RoIGRyaXZlcnMgZXhjZXB0IHRoZSBjYWxsYmFja3MgYXJlbid0IGluX2lycSgpLgorICovCitzdGF0aWMgdm9pZCBkdW1teV90aW1lciAodW5zaWduZWQgbG9uZyBfZHVtKQoreworCXN0cnVjdCBkdW1teQkJKmR1bSA9IChzdHJ1Y3QgZHVtbXkgKikgX2R1bTsKKwlzdHJ1Y3QgdXJicAkJKnVyYnAsICp0bXA7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJaW50CQkJbGltaXQsIHRvdGFsOworCWludAkJCWk7CisKKwkvKiBzaW1wbGlzdGljIG1vZGVsIGZvciBvbmUgZnJhbWUncyBiYW5kd2lkdGggKi8KKwlzd2l0Y2ggKGR1bS0+Z2FkZ2V0LnNwZWVkKSB7CisJY2FzZSBVU0JfU1BFRURfTE9XOgorCQl0b3RhbCA9IDgvKmJ5dGVzKi8gKiAxMi8qcGFja2V0cyovOworCQlicmVhazsKKwljYXNlIFVTQl9TUEVFRF9GVUxMOgorCQl0b3RhbCA9IDY0LypieXRlcyovICogMTkvKnBhY2tldHMqLzsKKwkJYnJlYWs7CisJY2FzZSBVU0JfU1BFRURfSElHSDoKKwkJdG90YWwgPSA1MTIvKmJ5dGVzKi8gKiAxMy8qcGFja2V0cyovICogOC8qdWZyYW1lcyovOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyIChkdW1teV9kZXYoZHVtKSwgImJvZ3VzIGRldmljZSBzcGVlZFxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBGSVhNRSBpZiBIWiAhPSAxMDAwIHRoaXMgd2lsbCBwcm9iYWJseSBtaXNiZWhhdmUgLi4uICovCisKKwkvKiBsb29rIGF0IGVhY2ggdXJiIHF1ZXVlZCBieSB0aGUgaG9zdCBzaWRlIGRyaXZlciAqLworCXNwaW5fbG9ja19pcnFzYXZlICgmZHVtLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoIWR1bS0+dWRldikgeworCQlkZXZfZXJyIChkdW1teV9kZXYoZHVtKSwKKwkJCQkidGltZXIgZmlyZWQgd2l0aCBubyBVUkJzIHBlbmRpbmc/XG4iKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmR1bS0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMDsgaSA8IERVTU1ZX0VORFBPSU5UUzsgaSsrKSB7CisJCWlmICghZXBfbmFtZSBbaV0pCisJCQlicmVhazsKKwkJZHVtLT5lcCBbaV0uYWxyZWFkeV9zZWVuID0gMDsKKwl9CisKK3Jlc3RhcnQ6CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlICh1cmJwLCB0bXAsICZkdW0tPnVyYnBfbGlzdCwgdXJicF9saXN0KSB7CisJCXN0cnVjdCB1cmIJCSp1cmI7CisJCXN0cnVjdCBkdW1teV9yZXF1ZXN0CSpyZXE7CisJCXU4CQkJYWRkcmVzczsKKwkJc3RydWN0IGR1bW15X2VwCQkqZXAgPSBOVUxMOworCQlpbnQJCQl0eXBlOworCisJCXVyYiA9IHVyYnAtPnVyYjsKKwkJaWYgKHVyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCQkJLyogbGlrZWx5IGl0IHdhcyBqdXN0IHVubGlua2VkICovCisJCQlnb3RvIHJldHVybl91cmI7CisJCX0KKwkJdHlwZSA9IHVzYl9waXBldHlwZSAodXJiLT5waXBlKTsKKworCQkvKiB1c2VkIHVwIHRoaXMgZnJhbWUncyBub24tcGVyaW9kaWMgYmFuZHdpZHRoPworCQkgKiBGSVhNRSB0aGVyZSdzIGluZmluaXRlIGJhbmR3aWR0aCBmb3IgY29udHJvbCBhbmQKKwkJICogcGVyaW9kaWMgdHJhbnNmZXJzIC4uLiB1bnJlYWxpc3RpYy4KKwkJICovCisJCWlmICh0b3RhbCA8PSAwICYmIHR5cGUgPT0gUElQRV9CVUxLKQorCQkJY29udGludWU7CisKKwkJLyogZmluZCB0aGUgZ2FkZ2V0J3MgZXAgZm9yIHRoaXMgcmVxdWVzdCAoaWYgY29uZmlndXJlZCkgKi8KKwkJYWRkcmVzcyA9IHVzYl9waXBlZW5kcG9pbnQgKHVyYi0+cGlwZSk7CisJCWlmICh1c2JfcGlwZWluICh1cmItPnBpcGUpKQorCQkJYWRkcmVzcyB8PSBVU0JfRElSX0lOOworCQllcCA9IGZpbmRfZW5kcG9pbnQoZHVtLCBhZGRyZXNzKTsKKwkJaWYgKCFlcCkgeworCQkJLyogc2V0X2NvbmZpZ3VyYXRpb24oKSBkaXNhZ3JlZW1lbnQgKi8KKwkJCWRldl9kYmcgKGR1bW15X2RldihkdW0pLAorCQkJCSJubyBlcCBjb25maWd1cmVkIGZvciB1cmIgJXBcbiIsCisJCQkJdXJiKTsKKwkJCW1heWJlX3NldF9zdGF0dXMgKHVyYiwgLUVQUk9UTyk7CisJCQlnb3RvIHJldHVybl91cmI7CisJCX0KKworCQlpZiAoZXAtPmFscmVhZHlfc2VlbikKKwkJCWNvbnRpbnVlOworCQllcC0+YWxyZWFkeV9zZWVuID0gMTsKKwkJaWYgKGVwID09ICZkdW0tPmVwIFswXSAmJiB1cmItPmVycm9yX2NvdW50KSB7CisJCQllcC0+c2V0dXBfc3RhZ2UgPSAxOwkvKiBhIG5ldyB1cmIgKi8KKwkJCXVyYi0+ZXJyb3JfY291bnQgPSAwOworCQl9CisJCWlmIChlcC0+aGFsdGVkICYmICFlcC0+c2V0dXBfc3RhZ2UpIHsKKwkJCS8qIE5PVEU6IG11c3Qgbm90IGJlIGlzbyEgKi8KKwkJCWRldl9kYmcgKGR1bW15X2RldihkdW0pLCAiZXAgJXMgaGFsdGVkLCB1cmIgJXBcbiIsCisJCQkJCWVwLT5lcC5uYW1lLCB1cmIpOworCQkJbWF5YmVfc2V0X3N0YXR1cyAodXJiLCAtRVBJUEUpOworCQkJZ290byByZXR1cm5fdXJiOworCQl9CisJCS8qIEZJWE1FIG1ha2Ugc3VyZSBib3RoIGVuZHMgYWdyZWUgb24gbWF4cGFja2V0ICovCisKKwkJLyogaGFuZGxlIGNvbnRyb2wgcmVxdWVzdHMgKi8KKwkJaWYgKGVwID09ICZkdW0tPmVwIFswXSAmJiBlcC0+c2V0dXBfc3RhZ2UpIHsKKwkJCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJCXNldHVwOworCQkJaW50CQkJCXZhbHVlID0gMTsKKwkJCXN0cnVjdCBkdW1teV9lcAkJCSplcDI7CisKKwkJCXNldHVwID0gKihzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KikgdXJiLT5zZXR1cF9wYWNrZXQ7CisJCQlsZTE2X3RvX2NwdXMgKCZzZXR1cC53SW5kZXgpOworCQkJbGUxNl90b19jcHVzICgmc2V0dXAud1ZhbHVlKTsKKwkJCWxlMTZfdG9fY3B1cyAoJnNldHVwLndMZW5ndGgpOworCQkJaWYgKHNldHVwLndMZW5ndGggIT0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSB7CisJCQkJbWF5YmVfc2V0X3N0YXR1cyAodXJiLCAtRU9WRVJGTE9XKTsKKwkJCQlnb3RvIHJldHVybl91cmI7CisJCQl9CisKKwkJCS8qIHBhcmFub2lhLCBpbiBjYXNlIG9mIHN0YWxlIHF1ZXVlZCBkYXRhICovCisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5IChyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7CisJCQkJbGlzdF9kZWxfaW5pdCAoJnJlcS0+cXVldWUpOworCQkJCXJlcS0+cmVxLnN0YXR1cyA9IC1FT1ZFUkZMT1c7CisJCQkJZGV2X2RiZyAoZHVtbXlfZGV2KGR1bSksICJzdGFsZSByZXEgPSAlcFxuIiwKKwkJCQkJCXJlcSk7CisKKwkJCQlzcGluX3VubG9jayAoJmR1bS0+bG9jayk7CisJCQkJcmVxLT5yZXEuY29tcGxldGUgKCZlcC0+ZXAsICZyZXEtPnJlcSk7CisJCQkJc3Bpbl9sb2NrICgmZHVtLT5sb2NrKTsKKwkJCQllcC0+YWxyZWFkeV9zZWVuID0gMDsKKwkJCQlnb3RvIHJlc3RhcnQ7CisJCQl9CisKKwkJCS8qIGdhZGdldCBkcml2ZXIgbmV2ZXIgc2VlcyBzZXRfYWRkcmVzcyBvciBvcGVyYXRpb25zCisJCQkgKiBvbiBzdGFuZGFyZCBmZWF0dXJlIGZsYWdzLiAgc29tZSBoYXJkd2FyZSBkb2Vzbid0CisJCQkgKiBldmVuIGV4cG9zZSB0aGVtLgorCQkJICovCisJCQllcC0+bGFzdF9pbyA9IGppZmZpZXM7CisJCQllcC0+c2V0dXBfc3RhZ2UgPSAwOworCQkJZXAtPmhhbHRlZCA9IDA7CisJCQlzd2l0Y2ggKHNldHVwLmJSZXF1ZXN0KSB7CisJCQljYXNlIFVTQl9SRVFfU0VUX0FERFJFU1M6CisJCQkJaWYgKHNldHVwLmJSZXF1ZXN0VHlwZSAhPSBEZXZfUmVxdWVzdCkKKwkJCQkJYnJlYWs7CisJCQkJZHVtLT5hZGRyZXNzID0gc2V0dXAud1ZhbHVlOworCQkJCW1heWJlX3NldF9zdGF0dXMgKHVyYiwgMCk7CisJCQkJZGV2X2RiZyAoZHVtbXlfZGV2KGR1bSksICJzZXRfYWRkcmVzcyA9ICVkXG4iLAorCQkJCQkJc2V0dXAud1ZhbHVlKTsKKwkJCQl2YWx1ZSA9IDA7CisJCQkJYnJlYWs7CisJCQljYXNlIFVTQl9SRVFfU0VUX0ZFQVRVUkU6CisJCQkJaWYgKHNldHVwLmJSZXF1ZXN0VHlwZSA9PSBEZXZfUmVxdWVzdCkgeworCQkJCQl2YWx1ZSA9IDA7CisJCQkJCXN3aXRjaCAoc2V0dXAud1ZhbHVlKSB7CisJCQkJCWNhc2UgVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQOgorCQkJCQkJYnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQl2YWx1ZSA9IC1FT1BOT1RTVVBQOworCQkJCQl9CisJCQkJCWlmICh2YWx1ZSA9PSAwKSB7CisJCQkJCQlkdW0tPmRldnN0YXR1cyB8PQorCQkJCQkJCSgxIDw8IHNldHVwLndWYWx1ZSk7CisJCQkJCQltYXliZV9zZXRfc3RhdHVzICh1cmIsIDApOworCQkJCQl9CisKKwkJCQl9IGVsc2UgaWYgKHNldHVwLmJSZXF1ZXN0VHlwZSA9PSBFcF9SZXF1ZXN0KSB7CisJCQkJCS8vIGVuZHBvaW50IGhhbHQKKwkJCQkJZXAyID0gZmluZF9lbmRwb2ludCAoZHVtLAorCQkJCQkJCXNldHVwLndJbmRleCk7CisJCQkJCWlmICghZXAyKSB7CisJCQkJCQl2YWx1ZSA9IC1FT1BOT1RTVVBQOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZXAyLT5oYWx0ZWQgPSAxOworCQkJCQl2YWx1ZSA9IDA7CisJCQkJCW1heWJlX3NldF9zdGF0dXMgKHVyYiwgMCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBVU0JfUkVRX0NMRUFSX0ZFQVRVUkU6CisJCQkJaWYgKHNldHVwLmJSZXF1ZXN0VHlwZSA9PSBEZXZfUmVxdWVzdCkgeworCQkJCQlzd2l0Y2ggKHNldHVwLndWYWx1ZSkgeworCQkJCQljYXNlIFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUDoKKwkJCQkJCWR1bS0+ZGV2c3RhdHVzICY9IH4oMSA8PAorCQkJCQkJCVVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCk7CisJCQkJCQl2YWx1ZSA9IDA7CisJCQkJCQltYXliZV9zZXRfc3RhdHVzICh1cmIsIDApOworCQkJCQkJYnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQl2YWx1ZSA9IC1FT1BOT1RTVVBQOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKHNldHVwLmJSZXF1ZXN0VHlwZSA9PSBFcF9SZXF1ZXN0KSB7CisJCQkJCS8vIGVuZHBvaW50IGhhbHQKKwkJCQkJZXAyID0gZmluZF9lbmRwb2ludCAoZHVtLAorCQkJCQkJCXNldHVwLndJbmRleCk7CisJCQkJCWlmICghZXAyKSB7CisJCQkJCQl2YWx1ZSA9IC1FT1BOT1RTVVBQOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZXAyLT5oYWx0ZWQgPSAwOworCQkJCQl2YWx1ZSA9IDA7CisJCQkJCW1heWJlX3NldF9zdGF0dXMgKHVyYiwgMCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBVU0JfUkVRX0dFVF9TVEFUVVM6CisJCQkJaWYgKHNldHVwLmJSZXF1ZXN0VHlwZSA9PSBEZXZfSW5SZXF1ZXN0CisJCQkJCQl8fCBzZXR1cC5iUmVxdWVzdFR5cGUKKwkJCQkJCQk9PSBJbnRmX0luUmVxdWVzdAorCQkJCQkJfHwgc2V0dXAuYlJlcXVlc3RUeXBlCisJCQkJCQkJPT0gRXBfSW5SZXF1ZXN0CisJCQkJCQkpIHsKKwkJCQkJY2hhciAqYnVmOworCisJCQkJCS8vIGRldmljZTogcmVtb3RlIHdha2V1cCwgc2VsZnBvd2VyZWQKKwkJCQkJLy8gaW50ZXJmYWNlOiBub3RoaW5nCisJCQkJCS8vIGVuZHBvaW50OiBoYWx0CisJCQkJCWJ1ZiA9IChjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJCQkJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiAwKSB7CisJCQkJCQlpZiAoc2V0dXAuYlJlcXVlc3RUeXBlID09CisJCQkJCQkJCUVwX0luUmVxdWVzdCkgeworCWVwMiA9IGZpbmRfZW5kcG9pbnQgKGR1bSwgc2V0dXAud0luZGV4KTsKKwlpZiAoIWVwMikgeworCQl2YWx1ZSA9IC1FT1BOT1RTVVBQOworCQlicmVhazsKKwl9CisJYnVmIFswXSA9IGVwMi0+aGFsdGVkOworCQkJCQkJfSBlbHNlIGlmIChzZXR1cC5iUmVxdWVzdFR5cGUgPT0KKwkJCQkJCQkJRGV2X0luUmVxdWVzdCkgeworCQkJCQkJCWJ1ZiBbMF0gPSAodTgpCisJCQkJCQkJCWR1bS0+ZGV2c3RhdHVzOworCQkJCQkJfSBlbHNlCisJCQkJCQkJYnVmIFswXSA9IDA7CisJCQkJCX0KKwkJCQkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IDEpCisJCQkJCQlidWYgWzFdID0gMDsKKwkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gbWluICgyLAorCQkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwkJCQkJdmFsdWUgPSAwOworCQkJCQltYXliZV9zZXRfc3RhdHVzICh1cmIsIDApOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogZ2FkZ2V0IGRyaXZlciBoYW5kbGVzIGFsbCBvdGhlciByZXF1ZXN0cy4gIGJsb2NrCisJCQkgKiB1bnRpbCBzZXR1cCgpIHJldHVybnM7IG5vIHJlZW50cmFuY3kgaXNzdWVzIGV0Yy4KKwkJCSAqLworCQkJaWYgKHZhbHVlID4gMCkgeworCQkJCXNwaW5fdW5sb2NrICgmZHVtLT5sb2NrKTsKKwkJCQl2YWx1ZSA9IGR1bS0+ZHJpdmVyLT5zZXR1cCAoJmR1bS0+Z2FkZ2V0LAorCQkJCQkJJnNldHVwKTsKKwkJCQlzcGluX2xvY2sgKCZkdW0tPmxvY2spOworCisJCQkJaWYgKHZhbHVlID49IDApIHsKKwkJCQkJLyogbm8gZGVsYXlzIChtYXggNjRLQiBkYXRhIHN0YWdlKSAqLworCQkJCQlsaW1pdCA9IDY0KjEwMjQ7CisJCQkJCWdvdG8gdHJlYXRfY29udHJvbF9saWtlX2J1bGs7CisJCQkJfQorCQkJCS8qIGVycm9yLCBzZWUgYmVsb3cgKi8KKwkJCX0KKworCQkJaWYgKHZhbHVlIDwgMCkgeworCQkJCWlmICh2YWx1ZSAhPSAtRU9QTk9UU1VQUCkKKwkJCQkJZGV2X2RiZyAoZHVtbXlfZGV2KGR1bSksCisJCQkJCQkic2V0dXAgLS0+ICVkXG4iLAorCQkJCQkJdmFsdWUpOworCQkJCW1heWJlX3NldF9zdGF0dXMgKHVyYiwgLUVQSVBFKTsKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCQkJfQorCisJCQlnb3RvIHJldHVybl91cmI7CisJCX0KKworCQkvKiBub24tY29udHJvbCByZXF1ZXN0cyAqLworCQlsaW1pdCA9IHRvdGFsOworCQlzd2l0Y2ggKHVzYl9waXBldHlwZSAodXJiLT5waXBlKSkgeworCQljYXNlIFBJUEVfSVNPQ0hST05PVVM6CisJCQkvKiBGSVhNRSBpcyBpdCB1cmItPmludGVydmFsIHNpbmNlIHRoZSBsYXN0IHhmZXI/CisJCQkgKiB1c2UgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS4KKwkJCSAqIGNvbXBsZXRlIHdoZXRoZXIgb3Igbm90IGVwIGhhcyByZXF1ZXN0cyBxdWV1ZWQuCisJCQkgKiByZXBvcnQgcmFuZG9tIGVycm9ycywgdG8gZGVidWcgZHJpdmVycy4KKwkJCSAqLworCQkJbGltaXQgPSBtYXggKGxpbWl0LCBwZXJpb2RpY19ieXRlcyAoZHVtLCBlcCkpOworCQkJbWF5YmVfc2V0X3N0YXR1cyAodXJiLCAtRU5PU1lTKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUElQRV9JTlRFUlJVUFQ6CisJCQkvKiBGSVhNRSBpcyBpdCB1cmItPmludGVydmFsIHNpbmNlIHRoZSBsYXN0IHhmZXI/CisJCQkgKiB0aGlzIGFsbW9zdCBjZXJ0YWlubHkgcG9sbHMgdG9vIGZhc3QuCisJCQkgKi8KKwkJCWxpbWl0ID0gbWF4IChsaW1pdCwgcGVyaW9kaWNfYnl0ZXMgKGR1bSwgZXApKTsKKwkJCS8qIEZBTExUSFJPVUdIICovCisKKwkJLy8gY2FzZSBQSVBFX0JVTEs6ICBjYXNlIFBJUEVfQ09OVFJPTDoKKwkJZGVmYXVsdDoKKwkJdHJlYXRfY29udHJvbF9saWtlX2J1bGs6CisJCQllcC0+bGFzdF9pbyA9IGppZmZpZXM7CisJCQl0b3RhbCA9IHRyYW5zZmVyIChkdW0sIHVyYiwgZXAsIGxpbWl0KTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogaW5jb21wbGV0ZSB0cmFuc2Zlcj8gKi8KKwkJaWYgKHVyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykKKwkJCWNvbnRpbnVlOworCityZXR1cm5fdXJiOgorCQl1cmItPmhjcHJpdiA9IE5VTEw7CisJCWxpc3RfZGVsICgmdXJicC0+dXJicF9saXN0KTsKKwkJa2ZyZWUgKHVyYnApOworCQlpZiAoZXApCisJCQllcC0+YWxyZWFkeV9zZWVuID0gZXAtPnNldHVwX3N0YWdlID0gMDsKKworCQlzcGluX3VubG9jayAoJmR1bS0+bG9jayk7CisJCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiIChkdW1teV90b19oY2QoZHVtKSwgdXJiLCBOVUxMKTsKKwkJc3Bpbl9sb2NrICgmZHVtLT5sb2NrKTsKKworCQlnb3RvIHJlc3RhcnQ7CisJfQorCisJLyogd2FudCBhIDEgbXNlYyBkZWxheSBoZXJlICovCisJaWYgKCFsaXN0X2VtcHR5ICgmZHVtLT51cmJwX2xpc3QpKQorCQltb2RfdGltZXIgKCZkdW0tPnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxKSk7CisJZWxzZSB7CisJCXVzYl9wdXRfZGV2IChkdW0tPnVkZXYpOworCQlkdW0tPnVkZXYgPSBOVUxMOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkdW0tPmxvY2ssIGZsYWdzKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBQT1JUX0NfTUFTSyBcCisJICgoMSA8PCBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTikgXAorCXwgKDEgPDwgVVNCX1BPUlRfRkVBVF9DX0VOQUJMRSkgXAorCXwgKDEgPDwgVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQpIFwKKwl8ICgxIDw8IFVTQl9QT1JUX0ZFQVRfQ19PVkVSX0NVUlJFTlQpIFwKKwl8ICgxIDw8IFVTQl9QT1JUX0ZFQVRfQ19SRVNFVCkpCisKK3N0YXRpYyBpbnQgZHVtbXlfaHViX3N0YXR1cyAoc3RydWN0IHVzYl9oY2QgKmhjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBkdW1teQkJKmR1bTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlpbnQJCQlyZXR2YWw7CisKKwlkdW0gPSBoY2RfdG9fZHVtbXkgKGhjZCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmR1bS0+bG9jaywgZmxhZ3MpOworCWlmICghKGR1bS0+cG9ydF9zdGF0dXMgJiBQT1JUX0NfTUFTSykpCisJCXJldHZhbCA9IDA7CisJZWxzZSB7CisJCSpidWYgPSAoMSA8PCAxKTsKKwkJZGV2X2RiZyAoZHVtbXlfZGV2KGR1bSksICJwb3J0IHN0YXR1cyAweCUwOHggaGFzIGNoYW5nZXNcbiIsCisJCQlkdW0tPnBvcnRfc3RhdHVzKTsKKwkJcmV0dmFsID0gMTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmR1bS0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraHViX2Rlc2NyaXB0b3IgKHN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJbWVtc2V0IChkZXNjLCAwLCBzaXplb2YgKmRlc2MpOworCWRlc2MtPmJEZXNjcmlwdG9yVHlwZSA9IDB4Mjk7CisJZGVzYy0+YkRlc2NMZW5ndGggPSA5OworCWRlc2MtPndIdWJDaGFyYWN0ZXJpc3RpY3MgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAwMDEpOworCWRlc2MtPmJOYnJQb3J0cyA9IDE7CisJZGVzYy0+Yml0bWFwIFswXSA9IDB4ZmY7CisJZGVzYy0+Yml0bWFwIFsxXSA9IDB4ZmY7Cit9CisKK3N0YXRpYyBpbnQgZHVtbXlfaHViX2NvbnRyb2wgKAorCXN0cnVjdCB1c2JfaGNkCSpoY2QsCisJdTE2CQl0eXBlUmVxLAorCXUxNgkJd1ZhbHVlLAorCXUxNgkJd0luZGV4LAorCWNoYXIJCSpidWYsCisJdTE2CQl3TGVuZ3RoCispIHsKKwlzdHJ1Y3QgZHVtbXkJKmR1bTsKKwlpbnQJCXJldHZhbCA9IDA7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCWR1bSA9IGhjZF90b19kdW1teSAoaGNkKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmR1bS0+bG9jaywgZmxhZ3MpOworCXN3aXRjaCAodHlwZVJlcSkgeworCWNhc2UgQ2xlYXJIdWJGZWF0dXJlOgorCQlicmVhazsKKwljYXNlIENsZWFyUG9ydEZlYXR1cmU6CisJCXN3aXRjaCAod1ZhbHVlKSB7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9TVVNQRU5EOgorCQkJaWYgKGR1bS0+cG9ydF9zdGF0dXMgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQpKSB7CisJCQkJLyogMjBtc2VjIHJlc3VtZSBzaWduYWxpbmcgKi8KKwkJCQlkdW0tPnJlc3VtaW5nID0gMTsKKwkJCQlkdW0tPnJlX3RpbWVvdXQgPSBqaWZmaWVzICsKKwkJCQkJCQltc2Vjc190b19qaWZmaWVzKDIwKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfUE9XRVI6CisJCQlkdW0tPnBvcnRfc3RhdHVzID0gMDsKKwkJCWR1bS0+cmVzdW1pbmcgPSAwOworCQkJc3RvcF9hY3Rpdml0eShkdW0sIGR1bS0+ZHJpdmVyKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZHVtLT5wb3J0X3N0YXR1cyAmPSB+KDEgPDwgd1ZhbHVlKTsKKwkJfQorCQlicmVhazsKKwljYXNlIEdldEh1YkRlc2NyaXB0b3I6CisJCWh1Yl9kZXNjcmlwdG9yICgoc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqKSBidWYpOworCQlicmVhazsKKwljYXNlIEdldEh1YlN0YXR1czoKKwkJKih1MzIgKikgYnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCWJyZWFrOworCWNhc2UgR2V0UG9ydFN0YXR1czoKKwkJaWYgKHdJbmRleCAhPSAxKQorCQkJcmV0dmFsID0gLUVQSVBFOworCisJCS8qIHdob2V2ZXIgcmVzZXRzIG9yIHJlc3VtZXMgbXVzdCBHZXRQb3J0U3RhdHVzIHRvCisJCSAqIGNvbXBsZXRlIGl0ISEKKwkJICovCisJCWlmIChkdW0tPnJlc3VtaW5nICYmIHRpbWVfYWZ0ZXIgKGppZmZpZXMsIGR1bS0+cmVfdGltZW91dCkpIHsKKwkJCWR1bS0+cG9ydF9zdGF0dXMgfD0gKDEgPDwgVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQpOworCQkJZHVtLT5wb3J0X3N0YXR1cyAmPSB+KDEgPDwgVVNCX1BPUlRfRkVBVF9TVVNQRU5EKTsKKwkJCWR1bS0+cmVzdW1pbmcgPSAwOworCQkJZHVtLT5yZV90aW1lb3V0ID0gMDsKKwkJCWlmIChkdW0tPmRyaXZlciAmJiBkdW0tPmRyaXZlci0+cmVzdW1lKSB7CisJCQkJc3Bpbl91bmxvY2sgKCZkdW0tPmxvY2spOworCQkJCWR1bS0+ZHJpdmVyLT5yZXN1bWUgKCZkdW0tPmdhZGdldCk7CisJCQkJc3Bpbl9sb2NrICgmZHVtLT5sb2NrKTsKKwkJCX0KKwkJfQorCQlpZiAoKGR1bS0+cG9ydF9zdGF0dXMgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX1JFU0VUKSkgIT0gMAorCQkJCSYmIHRpbWVfYWZ0ZXIgKGppZmZpZXMsIGR1bS0+cmVfdGltZW91dCkpIHsKKwkJCWR1bS0+cG9ydF9zdGF0dXMgfD0gKDEgPDwgVVNCX1BPUlRfRkVBVF9DX1JFU0VUKTsKKwkJCWR1bS0+cG9ydF9zdGF0dXMgJj0gfigxIDw8IFVTQl9QT1JUX0ZFQVRfUkVTRVQpOworCQkJZHVtLT5yZV90aW1lb3V0ID0gMDsKKwkJCWlmIChkdW0tPmRyaXZlcikgeworCQkJCWR1bS0+cG9ydF9zdGF0dXMgfD0gVVNCX1BPUlRfU1RBVF9FTkFCTEU7CisJCQkJLyogZ2l2ZSBpdCB0aGUgYmVzdCBzcGVlZCB3ZSBhZ3JlZSBvbiAqLworCQkJCWR1bS0+Z2FkZ2V0LnNwZWVkID0gZHVtLT5kcml2ZXItPnNwZWVkOworCQkJCWR1bS0+Z2FkZ2V0LmVwMC0+bWF4cGFja2V0ID0gNjQ7CisJCQkJc3dpdGNoIChkdW0tPmdhZGdldC5zcGVlZCkgeworCQkJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCQkJCWR1bS0+cG9ydF9zdGF0dXMgfD0KKwkJCQkJCVVTQl9QT1JUX1NUQVRfSElHSF9TUEVFRDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBVU0JfU1BFRURfTE9XOgorCQkJCQlkdW0tPmdhZGdldC5lcDAtPm1heHBhY2tldCA9IDg7CisJCQkJCWR1bS0+cG9ydF9zdGF0dXMgfD0KKwkJCQkJCVVTQl9QT1JUX1NUQVRfTE9XX1NQRUVEOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlkdW0tPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwkJKCh1MTYgKikgYnVmKVswXSA9IGNwdV90b19sZTE2IChkdW0tPnBvcnRfc3RhdHVzKTsKKwkJKCh1MTYgKikgYnVmKVsxXSA9IGNwdV90b19sZTE2IChkdW0tPnBvcnRfc3RhdHVzID4+IDE2KTsKKwkJYnJlYWs7CisJY2FzZSBTZXRIdWJGZWF0dXJlOgorCQlyZXR2YWwgPSAtRVBJUEU7CisJCWJyZWFrOworCWNhc2UgU2V0UG9ydEZlYXR1cmU6CisJCXN3aXRjaCAod1ZhbHVlKSB7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9TVVNQRU5EOgorCQkJaWYgKChkdW0tPnBvcnRfc3RhdHVzICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9TVVNQRU5EKSkKKwkJCQkJPT0gMCkgeworCQkJCWR1bS0+cG9ydF9zdGF0dXMgfD0KKwkJCQkJCSgxIDw8IFVTQl9QT1JUX0ZFQVRfU1VTUEVORCk7CisJCQkJaWYgKGR1bS0+ZHJpdmVyICYmIGR1bS0+ZHJpdmVyLT5zdXNwZW5kKSB7CisJCQkJCXNwaW5fdW5sb2NrICgmZHVtLT5sb2NrKTsKKwkJCQkJZHVtLT5kcml2ZXItPnN1c3BlbmQgKCZkdW0tPmdhZGdldCk7CisJCQkJCXNwaW5fbG9jayAoJmR1bS0+bG9jayk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9SRVNFVDoKKwkJCS8qIGlmIGl0J3MgYWxyZWFkeSBydW5uaW5nLCBkaXNjb25uZWN0IGZpcnN0ICovCisJCQlpZiAoZHVtLT5wb3J0X3N0YXR1cyAmIFVTQl9QT1JUX1NUQVRfRU5BQkxFKSB7CisJCQkJZHVtLT5wb3J0X3N0YXR1cyAmPSB+KFVTQl9QT1JUX1NUQVRfRU5BQkxFCisJCQkJCQl8IFVTQl9QT1JUX1NUQVRfTE9XX1NQRUVECisJCQkJCQl8IFVTQl9QT1JUX1NUQVRfSElHSF9TUEVFRCk7CisJCQkJaWYgKGR1bS0+ZHJpdmVyKSB7CisJCQkJCWRldl9kYmcgKGR1bW15X2RldihkdW0pLAorCQkJCQkJCSJkaXNjb25uZWN0XG4iKTsKKwkJCQkJc3RvcF9hY3Rpdml0eSAoZHVtLCBkdW0tPmRyaXZlcik7CisJCQkJfQorCisJCQkJLyogRklYTUUgdGVzdCB0aGF0IGNvZGUgcGF0aCEgKi8KKwkJCX0KKwkJCS8qIDUwbXNlYyByZXNldCBzaWduYWxpbmcgKi8KKwkJCWR1bS0+cmVfdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUwKTsKKwkJCS8qIEZBTExUSFJPVUdIICovCisJCWRlZmF1bHQ6CisJCQlkdW0tPnBvcnRfc3RhdHVzIHw9ICgxIDw8IHdWYWx1ZSk7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZGJnIChkdW1teV9kZXYoZHVtKSwKKwkJCSJodWIgY29udHJvbCByZXElMDR4IHYlMDR4IGklMDR4IGwlZFxuIiwKKwkJCXR5cGVSZXEsIHdWYWx1ZSwgd0luZGV4LCB3TGVuZ3RoKTsKKworCQkvKiAicHJvdG9jb2wgc3RhbGwiIG9uIGVycm9yICovCisJCXJldHZhbCA9IC1FUElQRTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmR1bS0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBzc2l6ZV90CitzaG93X3VyYiAoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHVyYiAqdXJiKQoreworCWludCBlcCA9IHVzYl9waXBlZW5kcG9pbnQgKHVyYi0+cGlwZSk7CisKKwlyZXR1cm4gc25wcmludGYgKGJ1Ziwgc2l6ZSwKKwkJInVyYi8lcCAlcyBlcCVkJXMlcyBsZW4gJWQvJWRcbiIsCisJCXVyYiwKKwkJKHsgY2hhciAqczsKKwkJIHN3aXRjaCAodXJiLT5kZXYtPnNwZWVkKSB7CisJCSBjYXNlIFVTQl9TUEVFRF9MT1c6CXMgPSAibHMiOyBicmVhazsKKwkJIGNhc2UgVVNCX1NQRUVEX0ZVTEw6CXMgPSAiZnMiOyBicmVhazsKKwkJIGNhc2UgVVNCX1NQRUVEX0hJR0g6CXMgPSAiaHMiOyBicmVhazsKKwkJIGRlZmF1bHQ6CQlzID0gIj8iOyBicmVhazsKKwkJIH07IHM7IH0pLAorCQllcCwgZXAgPyAodXNiX3BpcGVpbiAodXJiLT5waXBlKSA/ICJpbiIgOiAib3V0IikgOiAiIiwKKwkJKHsgY2hhciAqczsgXAorCQkgc3dpdGNoICh1c2JfcGlwZXR5cGUgKHVyYi0+cGlwZSkpIHsgXAorCQkgY2FzZSBQSVBFX0NPTlRST0w6CXMgPSAiIjsgYnJlYWs7IFwKKwkJIGNhc2UgUElQRV9CVUxLOglzID0gIi1idWxrIjsgYnJlYWs7IFwKKwkJIGNhc2UgUElQRV9JTlRFUlJVUFQ6CXMgPSAiLWludCI7IGJyZWFrOyBcCisJCSBkZWZhdWx0OiAJCXMgPSAiLWlzbyI7IGJyZWFrOyBcCisJCX07IHM7fSksCisJCXVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKK30KKworc3RhdGljIHNzaXplX3QKK3Nob3dfdXJicyAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9oY2QJCSpoY2QgPSBkZXZfZ2V0X2RydmRhdGEgKGRldik7CisJc3RydWN0IGR1bW15CQkqZHVtID0gaGNkX3RvX2R1bW15IChoY2QpOworCXN0cnVjdCB1cmJwCQkqdXJicDsKKwlzaXplX3QJCQlzaXplID0gMDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZHVtLT5sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSAodXJicCwgJmR1bS0+dXJicF9saXN0LCB1cmJwX2xpc3QpIHsKKwkJc2l6ZV90CQl0ZW1wOworCisJCXRlbXAgPSBzaG93X3VyYiAoYnVmLCBQQUdFX1NJWkUgLSBzaXplLCB1cmJwLT51cmIpOworCQlidWYgKz0gdGVtcDsKKwkJc2l6ZSArPSB0ZW1wOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZHVtLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gc2l6ZTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUiAodXJicywgU19JUlVHTywgc2hvd191cmJzLCBOVUxMKTsKKworc3RhdGljIGludCBkdW1teV9zdGFydCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgZHVtbXkJCSpkdW07CisJc3RydWN0IHVzYl9kZXZpY2UJKnJvb3Q7CisJaW50CQkJcmV0dmFsOworCisJZHVtID0gaGNkX3RvX2R1bW15IChoY2QpOworCisJLyoKKwkgKiBNQVNURVIgc2lkZSBpbml0IC4uLiB3ZSBlbXVsYXRlIGEgcm9vdCBodWIgdGhhdCdsbCBvbmx5IGV2ZXIKKwkgKiB0YWxrIHRvIG9uZSBkZXZpY2UgKHRoZSBzbGF2ZSBzaWRlKS4gIEFsc28gYXBwZWFycyBpbiBzeXNmcywKKwkgKiBqdXN0IGxpa2UgbW9yZSBmYW1pbGlhciBwY2ktYmFzZWQgSENEcy4KKwkgKi8KKwlzcGluX2xvY2tfaW5pdCAoJmR1bS0+bG9jayk7CisJaW5pdF90aW1lciAoJmR1bS0+dGltZXIpOworCWR1bS0+dGltZXIuZnVuY3Rpb24gPSBkdW1teV90aW1lcjsKKwlkdW0tPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgZHVtOworCisJSU5JVF9MSVNUX0hFQUQgKCZkdW0tPnVyYnBfbGlzdCk7CisKKwlyb290ID0gdXNiX2FsbG9jX2RldiAoTlVMTCwgJmhjZC0+c2VsZiwgMCk7CisJaWYgKCFyb290KQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIHJvb3QgaHViIGVudGVycyBhZGRyZXNzZWQgc3RhdGUuLi4gKi8KKwloY2QtPnN0YXRlID0gSENfU1RBVEVfUlVOTklORzsKKwlyb290LT5zcGVlZCA9IFVTQl9TUEVFRF9ISUdIOworCisJLyogLi4udGhlbiBjb25maWd1cmVkLCBzbyBraHViZCBzZWVzIHVzLiAqLworCWlmICgocmV0dmFsID0gdXNiX2hjZF9yZWdpc3Rlcl9yb290X2h1YiAocm9vdCwgaGNkKSkgIT0gMCkgeworCQlnb3RvIGVycjE7CisJfQorCisJLyogb25seSBzaG93IGEgbG93LXBvd2VyIHBvcnQ6IGp1c3QgOG1BICovCisJaHViX3NldF9wb3dlcl9idWRnZXQgKHJvb3QsIDgpOworCisJaWYgKChyZXR2YWwgPSBkdW1teV9yZWdpc3Rlcl91ZGMgKGR1bSkpICE9IDApCisJCWdvdG8gZXJyMjsKKworCS8qIEZJWE1FICd1cmJzJyBzaG91bGQgYmUgYSBwZXItZGV2aWNlIHRoaW5nLCBtYXliZSBpbiB1c2Jjb3JlICovCisJZGV2aWNlX2NyZWF0ZV9maWxlIChkdW1teV9kZXYoZHVtKSwgJmRldl9hdHRyX3VyYnMpOworCXJldHVybiAwOworCisgZXJyMjoKKwl1c2JfZGlzY29ubmVjdCAoJmhjZC0+c2VsZi5yb290X2h1Yik7CisgZXJyMToKKwl1c2JfcHV0X2RldiAocm9vdCk7CisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1FVSUVTQ0lORzsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBkdW1teV9zdG9wIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBkdW1teQkJKmR1bTsKKworCWR1bSA9IGhjZF90b19kdW1teSAoaGNkKTsKKworCWRldmljZV9yZW1vdmVfZmlsZSAoZHVtbXlfZGV2KGR1bSksICZkZXZfYXR0cl91cmJzKTsKKworCXVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIgKGR1bS0+ZHJpdmVyKTsKKwlkdW1teV91bnJlZ2lzdGVyX3VkYyAoZHVtKTsKKworCWRldl9pbmZvIChkdW1teV9kZXYoZHVtKSwgInN0b3BwZWRcbiIpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IGR1bW15X2hfZ2V0X2ZyYW1lIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXJldHVybiBkdW1teV9nX2dldF9mcmFtZSAoTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIGR1bW15X2hjZCA9IHsKKwkuZGVzY3JpcHRpb24gPQkJKGNoYXIgKikgZHJpdmVyX25hbWUsCisJLnByb2R1Y3RfZGVzYyA9CQkiRHVtbXkgaG9zdCBjb250cm9sbGVyIiwKKwkuaGNkX3ByaXZfc2l6ZSA9CXNpemVvZihzdHJ1Y3QgZHVtbXkpLAorCisJLmZsYWdzID0JCUhDRF9VU0IyLAorCisJLnN0YXJ0ID0JCWR1bW15X3N0YXJ0LAorCS5zdG9wID0JCQlkdW1teV9zdG9wLAorCisJLnVyYl9lbnF1ZXVlID0gCQlkdW1teV91cmJfZW5xdWV1ZSwKKwkudXJiX2RlcXVldWUgPSAJCWR1bW15X3VyYl9kZXF1ZXVlLAorCisJLmdldF9mcmFtZV9udW1iZXIgPSAJZHVtbXlfaF9nZXRfZnJhbWUsCisKKwkuaHViX3N0YXR1c19kYXRhID0gCWR1bW15X2h1Yl9zdGF0dXMsCisJLmh1Yl9jb250cm9sID0gCQlkdW1teV9odWJfY29udHJvbCwKK307CisKK3N0YXRpYyBpbnQgZHVtbXlfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKwlpbnQJCQlyZXR2YWw7CisKKwlkZXZfaW5mbyAoZGV2LCAiJXMsIGRyaXZlciAiIERSSVZFUl9WRVJTSU9OICJcbiIsIGRyaXZlcl9kZXNjKTsKKworCWhjZCA9IHVzYl9jcmVhdGVfaGNkICgmZHVtbXlfaGNkLCBkZXYsIGRldi0+YnVzX2lkKTsKKwlpZiAoIWhjZCkKKwkJcmV0dXJuIC1FTk9NRU07CisJdGhlX2NvbnRyb2xsZXIgPSBoY2RfdG9fZHVtbXkgKGhjZCk7CisKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIDAsIDApOworCWlmIChyZXR2YWwgIT0gMCkgeworCQl1c2JfcHV0X2hjZCAoaGNkKTsKKwkJdGhlX2NvbnRyb2xsZXIgPSBOVUxMOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBkdW1teV9yZW1vdmUgKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKworCWhjZCA9IGRldl9nZXRfZHJ2ZGF0YSAoZGV2KTsKKwl1c2JfcmVtb3ZlX2hjZCAoaGNkKTsKKwl1c2JfcHV0X2hjZCAoaGNkKTsKKwl0aGVfY29udHJvbGxlciA9IE5VTEw7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgZHVtbXlfcGRldl9kZXRlY3QgKHZvaWQpCit7CisJaW50CQkJcmV0dmFsOworCisJcmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyICgmZHVtbXlfZHJpdmVyKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXRoZV9wZGV2Lm5hbWUgPSAiaGMiOworCXRoZV9wZGV2LmRldi5kcml2ZXIgPSAmZHVtbXlfZHJpdmVyOworCXRoZV9wZGV2LmRldi5yZWxlYXNlID0gZHVtbXlfcGRldl9yZWxlYXNlOworCisJcmV0dmFsID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyICgmdGhlX3BkZXYpOworCWlmIChyZXR2YWwgPCAwKQorCQlkcml2ZXJfdW5yZWdpc3RlciAoJmR1bW15X2RyaXZlcik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgZHVtbXlfcGRldl9yZW1vdmUgKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIgKCZ0aGVfcGRldik7CisJZHJpdmVyX3VucmVnaXN0ZXIgKCZkdW1teV9kcml2ZXIpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9faW5pdCBpbml0ICh2b2lkKQoreworCWludAlyZXR2YWw7CisKKwlpZiAodXNiX2Rpc2FibGVkICgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoKHJldHZhbCA9IGR1bW15X3BkZXZfZGV0ZWN0ICgpKSAhPSAwKQorCQlyZXR1cm4gcmV0dmFsOworCWlmICgocmV0dmFsID0gZHVtbXlfcHJvYmUgKCZ0aGVfcGRldi5kZXYpKSAhPSAwKQorCQlkdW1teV9wZGV2X3JlbW92ZSAoKTsKKwlyZXR1cm4gcmV0dmFsOworfQorbW9kdWxlX2luaXQgKGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cCAodm9pZCkKK3sKKwlkdW1teV9yZW1vdmUgKCZ0aGVfcGRldi5kZXYpOworCWR1bW15X3BkZXZfcmVtb3ZlICgpOworfQorbW9kdWxlX2V4aXQgKGNsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2VwYXV0b2NvbmYuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9lcGF1dG9jb25mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdjNmQ3NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9lcGF1dG9jb25mLmMKQEAgLTAsMCArMSwzMTAgQEAKKy8qCisgKiBlcGF1dG9jb25mLmMgLS0gZW5kcG9pbnQgYXV0b2NvbmZpZ3VyYXRpb24gZm9yIHVzYiBnYWRnZXQgZHJpdmVycworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBEYXZpZCBCcm93bmVsbAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2luY2x1ZGUgPGxpbnV4L3VzYl9jaDkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfZ2FkZ2V0Lmg+CisKKyNpbmNsdWRlICJnYWRnZXRfY2hpcHMuaCIKKworCisvKiB3ZSBtdXN0IGFzc2lnbiBhZGRyZXNzZXMgZm9yIGNvbmZpZ3VyYWJsZSBlbmRwb2ludHMgKGxpa2UgbmV0MjI4MCkgKi8KK3N0YXRpYyBfX2luaXRkYXRhIHVuc2lnbmVkIGVwbnVtOworCisvLyAjZGVmaW5lIE1BTllfRU5EUE9JTlRTCisjaWZkZWYgTUFOWV9FTkRQT0lOVFMKKy8qIG1vcmUgdGhhbiAxNSBjb25maWd1cmFibGUgZW5kcG9pbnRzICovCitzdGF0aWMgX19pbml0ZGF0YSB1bnNpZ25lZCBpbl9lcG51bTsKKyNlbmRpZgorCisKKy8qCisgKiBUaGlzIHNob3VsZCB3b3JrIHdpdGggZW5kcG9pbnRzIGZyb20gY29udHJvbGxlciBkcml2ZXJzIHNoYXJpbmcgdGhlCisgKiBzYW1lIGVuZHBvaW50IG5hbWluZyBjb252ZW50aW9uLiAgQnkgZXhhbXBsZToKKyAqCisgKgktIGVwMSwgZXAyLCAuLi4gYWRkcmVzcyBpcyBmaXhlZCwgbm90IGRpcmVjdGlvbiBvciB0eXBlCisgKgktIGVwMWluLCBlcDJvdXQsIC4uLiBhZGRyZXNzIGFuZCBkaXJlY3Rpb24gYXJlIGZpeGVkLCBub3QgdHlwZQorICoJLSBlcDEtYnVsaywgZXAyLWJ1bGssIC4uLiBhZGRyZXNzIGFuZCB0eXBlIGFyZSBmaXhlZCwgbm90IGRpcmVjdGlvbgorICoJLSBlcDFpbi1idWxrLCBlcDJvdXQtaXNvLCAuLi4gYWxsIHRocmVlIGFyZSBmaXhlZAorICoJLSBlcC0qIC4uLiBubyBmdW5jdGlvbmFsaXR5IHJlc3RyaWN0aW9ucworICoKKyAqIFR5cGUgc3VmZml4ZXMgYXJlICItYnVsayIsICItaXNvIiwgb3IgIi1pbnQiLiAgTnVtYmVycyBhcmUgZGVjaW1hbC4KKyAqIExlc3MgY29tbW9uIHJlc3RyaWN0aW9ucyBhcmUgaW1wbGllZCBieSBnYWRnZXRfaXNfKigpLgorICoKKyAqIE5PVEU6ICBlYWNoIGVuZHBvaW50IGlzIHVuaWRpcmVjdGlvbmFsLCBhcyBzcGVjaWZpZWQgYnkgaXRzIFVTQgorICogZGVzY3JpcHRvcjsgYW5kIGlzbid0IHNwZWNpZmljIHRvIGEgY29uZmlndXJhdGlvbiBvciBhbHRzZXR0aW5nLgorICovCitzdGF0aWMgaW50IF9faW5pdAorZXBfbWF0Y2hlcyAoCisJc3RydWN0IHVzYl9nYWRnZXQJCSpnYWRnZXQsCisJc3RydWN0IHVzYl9lcAkJCSplcCwKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmRlc2MKKykKK3sKKwl1OAkJdHlwZTsKKwljb25zdCBjaGFyCSp0bXA7CisJdTE2CQltYXg7CisKKwkvKiBlbmRwb2ludCBhbHJlYWR5IGNsYWltZWQ/ICovCisJaWYgKDAgIT0gZXAtPmRyaXZlcl9kYXRhKQorCQlyZXR1cm4gMDsKKwkJCisJLyogb25seSBzdXBwb3J0IGVwMCBmb3IgcG9ydGFibGUgQ09OVFJPTCB0cmFmZmljICovCisJdHlwZSA9IGRlc2MtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLOworCWlmIChVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MID09IHR5cGUpCisJCXJldHVybiAwOworCisJLyogc29tZSBvdGhlciBuYW1pbmcgY29udmVudGlvbiAqLworCWlmICgnZScgIT0gZXAtPm5hbWVbMF0pCisJCXJldHVybiAwOworCisJLyogdHlwZS1yZXN0cmljdGlvbjogICItaXNvIiwgIi1idWxrIiwgb3IgIi1pbnQiLgorCSAqIGRpcmVjdGlvbi1yZXN0cmljdGlvbjogICJpbiIsICJvdXQiLgorCSAqLworCWlmICgnLScgIT0gZXAtPm5hbWVbMl0pIHsKKwkJdG1wID0gc3RycmNociAoZXAtPm5hbWUsICctJyk7CisJCWlmICh0bXApIHsKKwkJCXN3aXRjaCAodHlwZSkgeworCQkJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ6CisJCQkJLyogYnVsayBlbmRwb2ludHMgaGFuZGxlIGludGVycnVwdCB0cmFuc2ZlcnMsCisJCQkJICogZXhjZXB0IHRoZSB0b2dnbGUtcXVpcmt5IGlzby1zeW5jaCBraW5kCisJCQkJICovCisJCQkJaWYgKCdzJyA9PSB0bXBbMl0pCS8vID09ICItaXNvIgorCQkJCQlyZXR1cm4gMDsKKwkJCQkvKiBmb3Igbm93LCBhdm9pZCBQWEEgImludGVycnVwdC1pbiI7CisJCQkJICogaXQncyBkb2N1bWVudGVkIGFzIG5ldmVyIHVzaW5nIERBVEExLgorCQkJCSAqLworCQkJCWlmIChnYWRnZXRfaXNfcHhhIChnYWRnZXQpCisJCQkJCQkmJiAnaScgPT0gdG1wIFsxXSkKKwkJCQkJcmV0dXJuIDA7CisJCQkJYnJlYWs7CisJCQljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEs6CisJCQkJaWYgKCdiJyAhPSB0bXBbMV0pCS8vICE9ICItYnVsayIKKwkJCQkJcmV0dXJuIDA7CisJCQkJYnJlYWs7CisJCQljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0M6CisJCQkJaWYgKCdzJyAhPSB0bXBbMl0pCS8vICE9ICItaXNvIgorCQkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXRtcCA9IGVwLT5uYW1lICsgc3RybGVuIChlcC0+bmFtZSk7CisJCX0KKworCQkvKiBkaXJlY3Rpb24tcmVzdHJpY3Rpb246ICAiLi5pbi0uLiIsICJvdXQtLi4iICovCisJCXRtcC0tOworCQlpZiAoIWlzZGlnaXQgKCp0bXApKSB7CisJCQlpZiAoZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pIHsKKwkJCQlpZiAoJ24nICE9ICp0bXApCisJCQkJCXJldHVybiAwOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoJ3QnICE9ICp0bXApCisJCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCisJLyogZW5kcG9pbnQgbWF4cGFja2V0IHNpemUgaXMgYW4gaW5wdXQgcGFyYW1ldGVyLCBleGNlcHQgZm9yIGJ1bGsKKwkgKiB3aGVyZSBpdCdzIGFuIG91dHB1dCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHRoZSBmdWxsIHNwZWVkIGxpbWl0LgorCSAqIHRoZSB1c2Igc3BlYyBmaXhlcyBoaWdoIHNwZWVkIGJ1bGsgbWF4cGFja2V0IGF0IDUxMiBieXRlcy4KKwkgKi8KKwltYXggPSAweDdmZiAmIGxlMTZfdG9fY3B1cCAoJmRlc2MtPndNYXhQYWNrZXRTaXplKTsKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lOVDoKKwkJLyogSU5UOiAgbGltaXQgNjQgYnl0ZXMgZnVsbCBzcGVlZCwgMTAyNCBoaWdoIHNwZWVkICovCisJCWlmICghZ2FkZ2V0LT5pc19kdWFsc3BlZWQgJiYgbWF4ID4gNjQpCisJCQlyZXR1cm4gMDsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoKKwkJLyogSVNPOiAgbGltaXQgMTAyMyBieXRlcyBmdWxsIHNwZWVkLCAxMDI0IGhpZ2ggc3BlZWQgKi8KKwkJaWYgKGVwLT5tYXhwYWNrZXQgPCBtYXgpCisJCQlyZXR1cm4gMDsKKwkJaWYgKCFnYWRnZXQtPmlzX2R1YWxzcGVlZCAmJiBtYXggPiAxMDIzKQorCQkJcmV0dXJuIDA7CisKKwkJLyogQk9USDogICJoaWdoIGJhbmR3aWR0aCIgd29ya3Mgb25seSBhdCBoaWdoIHNwZWVkICovCisJCWlmICgoZGVzYy0+d01heFBhY2tldFNpemUgJiBfX2NvbnN0YW50X2NwdV90b19sZTE2KDM8PDExKSkpIHsKKwkJCWlmICghZ2FkZ2V0LT5pc19kdWFsc3BlZWQpCisJCQkJcmV0dXJuIDA7CisJCQkvKiBjb25maWd1cmUgeW91ciBoYXJkd2FyZSB3aXRoIGVub3VnaCBidWZmZXJpbmchISAqLworCQl9CisJCWJyZWFrOworCX0KKworCS8qIE1BVENIISEgKi8KKworCS8qIHJlcG9ydCBhZGRyZXNzICovCisJaWYgKGlzZGlnaXQgKGVwLT5uYW1lIFsyXSkpIHsKKwkJdTgJbnVtID0gc2ltcGxlX3N0cnRvbCAoJmVwLT5uYW1lIFsyXSwgTlVMTCwgMTApOworCQlkZXNjLT5iRW5kcG9pbnRBZGRyZXNzIHw9IG51bTsKKyNpZmRlZglNQU5ZX0VORFBPSU5UUworCX0gZWxzZSBpZiAoZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pIHsKKwkJaWYgKCsraW5fZXBudW0gPiAxNSkKKwkJCXJldHVybiAwOworCQlkZXNjLT5iRW5kcG9pbnRBZGRyZXNzID0gVVNCX0RJUl9JTiB8IGluX2VwbnVtOworI2VuZGlmCisJfSBlbHNlIHsKKwkJaWYgKCsrZXBudW0gPiAxNSkKKwkJCXJldHVybiAwOworCQlkZXNjLT5iRW5kcG9pbnRBZGRyZXNzIHw9IGVwbnVtOworCX0KKworCS8qIHJlcG9ydCAodmFyaWFibGUpIGZ1bGwgc3BlZWQgYnVsayBtYXhwYWNrZXQgKi8KKwlpZiAoVVNCX0VORFBPSU5UX1hGRVJfQlVMSyA9PSB0eXBlKSB7CisJCWludCBzaXplID0gZXAtPm1heHBhY2tldDsKKworCQkvKiBtaW4oKSBkb2Vzbid0IHdvcmsgb24gYml0ZmllbGRzIHdpdGggZ2NjLTMuNSAqLworCQlpZiAoc2l6ZSA+IDY0KQorCQkJc2l6ZSA9IDY0OworCQlkZXNjLT53TWF4UGFja2V0U2l6ZSA9IGNwdV90b19sZTE2KHNpemUpOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZXAgKiBfX2luaXQKK2ZpbmRfZXAgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHVzYl9lcAkqZXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChlcCwgJmdhZGdldC0+ZXBfbGlzdCwgZXBfbGlzdCkgeworCQlpZiAoMCA9PSBzdHJjbXAgKGVwLT5uYW1lLCBuYW1lKSkKKwkJCXJldHVybiBlcDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogdXNiX2VwX2F1dG9jb25maWcgLSBjaG9vc2UgYW4gZW5kcG9pbnQgbWF0Y2hpbmcgdGhlIGRlc2NyaXB0b3IKKyAqIEBnYWRnZXQ6IFRoZSBkZXZpY2UgdG8gd2hpY2ggdGhlIGVuZHBvaW50IG11c3QgYmVsb25nLgorICogQGRlc2M6IEVuZHBvaW50IGRlc2NyaXB0b3IsIHdpdGggZW5kcG9pbnQgZGlyZWN0aW9uIGFuZCB0cmFuc2ZlciBtb2RlCisgKglpbml0aWFsaXplZC4gIEZvciBwZXJpb2RpYyB0cmFuc2ZlcnMsIHRoZSBtYXhpbXVtIHBhY2tldAorICoJc2l6ZSBtdXN0IGFsc28gYmUgaW5pdGlhbGl6ZWQuICBUaGlzIGlzIG1vZGlmaWVkIG9uIHN1Y2Nlc3MuCisgKgorICogQnkgY2hvb3NpbmcgYW4gZW5kcG9pbnQgdG8gdXNlIHdpdGggdGhlIHNwZWNpZmllZCBkZXNjcmlwdG9yLCB0aGlzCisgKiByb3V0aW5lIHNpbXBsaWZpZXMgd3JpdGluZyBnYWRnZXQgZHJpdmVycyB0aGF0IHdvcmsgd2l0aCBtdWx0aXBsZQorICogVVNCIGRldmljZSBjb250cm9sbGVycy4gIFRoZSBlbmRwb2ludCB3b3VsZCBiZSBwYXNzZWQgbGF0ZXIgdG8KKyAqIHVzYl9lcF9lbmFibGUoKSwgYWxvbmcgd2l0aCBzb21lIGRlc2NyaXB0b3IuCisgKgorICogVGhhdCBzZWNvbmQgZGVzY3JpcHRvciB3b24ndCBhbHdheXMgYmUgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IG9uZS4KKyAqIEZvciBleGFtcGxlLCBpc29jaHJvbm91cyBlbmRwb2ludHMgY2FuIGJlIGF1dG9jb25maWd1cmVkIGZvciBoaWdoCisgKiBiYW5kd2lkdGgsIGFuZCB0aGVuIHVzZWQgaW4gc2V2ZXJhbCBsb3dlciBiYW5kd2lkdGggYWx0c2V0dGluZ3MuCisgKiBBbHNvLCBoaWdoIGFuZCBmdWxsIHNwZWVkIGRlc2NyaXB0b3JzIHdpbGwgYmUgZGlmZmVyZW50LgorICoKKyAqIEJlIHN1cmUgdG8gZXhhbWluZSBhbmQgdGVzdCB0aGUgcmVzdWx0cyBvZiBhdXRvY29uZmlndXJhdGlvbiBvbiB5b3VyCisgKiBoYXJkd2FyZS4gIFRoaXMgY29kZSBtYXkgbm90IG1ha2UgdGhlIGJlc3QgY2hvaWNlcyBhYm91dCBob3cgdG8gdXNlIHRoZQorICogVVNCIGNvbnRyb2xsZXIsIGFuZCBpdCBjYW4ndCBrbm93IGFsbCB0aGUgcmVzdHJpY3Rpb25zIHRoYXQgbWF5IGFwcGx5LgorICogU29tZSBjb21iaW5hdGlvbnMgb2YgZHJpdmVyIGFuZCBoYXJkd2FyZSB3b24ndCBiZSBhYmxlIHRvIGF1dG9jb25maWd1cmUuCisgKgorICogT24gc3VjY2VzcywgdGhpcyByZXR1cm5zIGFuIHVuLWNsYWltZWQgdXNiX2VwLCBhbmQgbW9kaWZpZXMgdGhlIGVuZHBvaW50CisgKiBkZXNjcmlwdG9yIGJFbmRwb2ludEFkZHJlc3MuICBGb3IgYnVsayBlbmRwb2ludHMsIHRoZSB3TWF4UGFja2V0IHZhbHVlCisgKiBpcyBpbml0aWFsaXplZCBhcyBpZiB0aGUgZW5kcG9pbnQgd2VyZSB1c2VkIGF0IGZ1bGwgc3BlZWQuICBUbyBwcmV2ZW50CisgKiB0aGUgZW5kcG9pbnQgZnJvbSBiZWluZyByZXR1cm5lZCBieSBhIGxhdGVyIGF1dG9jb25maWcgY2FsbCwgY2xhaW0gaXQKKyAqIGJ5IGFzc2lnbmluZyBlcC0+ZHJpdmVyX2RhdGEgdG8gc29tZSBub24tbnVsbCB2YWx1ZS4KKyAqCisgKiBPbiBmYWlsdXJlLCB0aGlzIHJldHVybnMgYSBudWxsIGVuZHBvaW50IGRlc2NyaXB0b3IuCisgKi8KK3N0cnVjdCB1c2JfZXAgKiBfX2luaXQgdXNiX2VwX2F1dG9jb25maWcgKAorCXN0cnVjdCB1c2JfZ2FkZ2V0CQkqZ2FkZ2V0LAorCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqZGVzYworKQoreworCXN0cnVjdCB1c2JfZXAJKmVwOworCXU4CQl0eXBlOworCisJdHlwZSA9IGRlc2MtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLOworCisJLyogRmlyc3QsIGFwcGx5IGNoaXAtc3BlY2lmaWMgImJlc3QgdXNhZ2UiIGtub3dsZWRnZS4KKwkgKiBUaGlzIG1pZ2h0IG1ha2UgYSBnb29kIHVzYl9nYWRnZXRfb3BzIGhvb2sgLi4uCisJICovCisJaWYgKGdhZGdldF9pc19uZXQyMjgwIChnYWRnZXQpICYmIHR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKSB7CisJCS8qIGVwLWUsIGVwLWYgYXJlIFBJTyB3aXRoIG9ubHkgNjQgYnl0ZSBmaWZvcyAqLworCQllcCA9IGZpbmRfZXAgKGdhZGdldCwgImVwLWUiKTsKKwkJaWYgKGVwICYmIGVwX21hdGNoZXMgKGdhZGdldCwgZXAsIGRlc2MpKQorCQkJcmV0dXJuIGVwOworCQllcCA9IGZpbmRfZXAgKGdhZGdldCwgImVwLWYiKTsKKwkJaWYgKGVwICYmIGVwX21hdGNoZXMgKGdhZGdldCwgZXAsIGRlc2MpKQorCQkJcmV0dXJuIGVwOworCisJfSBlbHNlIGlmIChnYWRnZXRfaXNfZ29rdSAoZ2FkZ2V0KSkgeworCQlpZiAoVVNCX0VORFBPSU5UX1hGRVJfSU5UID09IHR5cGUpIHsKKwkJCS8qIHNpbmdsZSBidWZmZXJpbmcgaXMgZW5vdWdoICovCisJCQllcCA9IGZpbmRfZXAgKGdhZGdldCwgImVwMy1idWxrIik7CisJCQlpZiAoZXAgJiYgZXBfbWF0Y2hlcyAoZ2FkZ2V0LCBlcCwgZGVzYykpCisJCQkJcmV0dXJuIGVwOworCQl9IGVsc2UgaWYgKFVTQl9FTkRQT0lOVF9YRkVSX0JVTEsgPT0gdHlwZQorCQkJCSYmIChVU0JfRElSX0lOICYgZGVzYy0+YkVuZHBvaW50QWRkcmVzcykpIHsKKwkJCS8qIERNQSBtYXkgYmUgYXZhaWxhYmxlICovCisJCQllcCA9IGZpbmRfZXAgKGdhZGdldCwgImVwMi1idWxrIik7CisJCQlpZiAoZXAgJiYgZXBfbWF0Y2hlcyAoZ2FkZ2V0LCBlcCwgZGVzYykpCisJCQkJcmV0dXJuIGVwOworCQl9CisKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19zaCAoZ2FkZ2V0KSAmJiBVU0JfRU5EUE9JTlRfWEZFUl9JTlQgPT0gdHlwZSkgeworCQkvKiBzaW5nbGUgYnVmZmVyaW5nIGlzIGVub3VnaDsgbWF5YmUgOCBieXRlIGZpZm8gaXMgdG9vICovCisJCWVwID0gZmluZF9lcCAoZ2FkZ2V0LCAiZXAzaW4tYnVsayIpOworCQlpZiAoZXAgJiYgZXBfbWF0Y2hlcyAoZ2FkZ2V0LCBlcCwgZGVzYykpCisJCQlyZXR1cm4gZXA7CisKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19tcTExeHggKGdhZGdldCkgJiYgVVNCX0VORFBPSU5UX1hGRVJfSU5UID09IHR5cGUpIHsKKwkJZXAgPSBmaW5kX2VwIChnYWRnZXQsICJlcDEtYnVsayIpOworCQlpZiAoZXAgJiYgZXBfbWF0Y2hlcyAoZ2FkZ2V0LCBlcCwgZGVzYykpCisJCQlyZXR1cm4gZXA7CisJfQorCisJLyogU2Vjb25kLCBsb29rIGF0IGVuZHBvaW50cyB1bnRpbCBhbiB1bmNsYWltZWQgb25lIGxvb2tzIHVzYWJsZSAqLyAKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChlcCwgJmdhZGdldC0+ZXBfbGlzdCwgZXBfbGlzdCkgeworCQlpZiAoZXBfbWF0Y2hlcyAoZ2FkZ2V0LCBlcCwgZGVzYykpCisJCQlyZXR1cm4gZXA7CisJfQorCisJLyogRmFpbCAqLworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIHVzYl9lcF9hdXRvY29uZmlnX3Jlc2V0IC0gcmVzZXQgZW5kcG9pbnQgYXV0b2NvbmZpZyBzdGF0ZQorICogQGdhZGdldDogZGV2aWNlIGZvciB3aGljaCBhdXRvY29uZmlnIHN0YXRlIHdpbGwgYmUgcmVzZXQKKyAqCisgKiBVc2UgdGhpcyBmb3IgZGV2aWNlcyB3aGVyZSBvbmUgY29uZmlndXJhdGlvbiBtYXkgbmVlZCB0byBhc3NpZ24KKyAqIGVuZHBvaW50IHJlc291cmNlcyB2ZXJ5IGRpZmZlcmVudGx5IGZyb20gdGhlIG5leHQgb25lLiAgSXQgY2xlYXJzCisgKiBzdGF0ZSBzdWNoIGFzIGVwLT5kcml2ZXJfZGF0YSBhbmQgdGhlIHJlY29yZCBvZiBhc3NpZ25lZCBlbmRwb2ludHMKKyAqIHVzZWQgYnkgdXNiX2VwX2F1dG9jb25maWcoKS4KKyAqLwordm9pZCBfX2luaXQgdXNiX2VwX2F1dG9jb25maWdfcmVzZXQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IHVzYl9lcAkqZXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChlcCwgJmdhZGdldC0+ZXBfbGlzdCwgZXBfbGlzdCkgeworCQllcC0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCX0KKyNpZmRlZglNQU5ZX0VORFBPSU5UUworCWluX2VwbnVtID0gMDsKKyNlbmRpZgorCWVwbnVtID0gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmY5ZmIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKQEAgLTAsMCArMSwyNjYwIEBACisvKgorICogZXRoZXIuYyAtLSBFdGhlcm5ldCBnYWRnZXQgZHJpdmVyLCB3aXRoIENEQyBhbmQgbm9uLUNEQyBvcHRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUgRGF2aWQgQnJvd25lbGwKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IFJvYmVydCBTY2h3ZWJlbCwgQmVuZWRpa3QgU3ByYW5nZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworCisvLyAjZGVmaW5lIERFQlVHIDEKKy8vICNkZWZpbmUgVkVSQk9TRQorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2luY2x1ZGUgPGxpbnV4L3VzYl9jaDkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfY2RjLmg+CisjaW5jbHVkZSA8bGludXgvdXNiX2dhZGdldC5oPgorCisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisKKyNpbmNsdWRlICJnYWRnZXRfY2hpcHMuaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEV0aGVybmV0IGdhZGdldCBkcml2ZXIgLS0gd2l0aCBDREMgYW5kIG5vbi1DREMgb3B0aW9ucworICogQnVpbGRzIG9uIGhhcmR3YXJlIHN1cHBvcnQgZm9yIGEgZnVsbCBkdXBsZXggbGluay4KKyAqCisgKiBDREMgRXRoZXJuZXQgaXMgdGhlIHN0YW5kYXJkIFVTQiBzb2x1dGlvbiBmb3Igc2VuZGluZyBFdGhlcm5ldCBmcmFtZXMKKyAqIHVzaW5nIFVTQi4gIFJlYWwgaGFyZHdhcmUgdGVuZHMgdG8gdXNlIHRoZSBzYW1lIGZyYW1pbmcgcHJvdG9jb2wgYnV0IGxvb2sKKyAqIGRpZmZlcmVudCBmb3IgY29udHJvbCBmZWF0dXJlcy4gIFRoaXMgZHJpdmVyIHN0cm9uZ2x5IHByZWZlcnMgdG8gdXNlCisgKiB0aGlzIFVTQi1JRiBzdGFuZGFyZCBhcyBpdHMgb3Blbi1zeXN0ZW1zIGludGVyb3BlcmFiaWxpdHkgc29sdXRpb247CisgKiBtb3N0IGhvc3Qgc2lkZSBVU0Igc3RhY2tzIChleGNlcHQgZnJvbSBNaWNyb3NvZnQpIHN1cHBvcnQgaXQuCisgKgorICogVGhlcmUncyBzb21lIGhhcmR3YXJlIHRoYXQgY2FuJ3QgdGFsayBDREMuICBXZSBtYWtlIHRoYXQgaGFyZHdhcmUKKyAqIGltcGxlbWVudCBhICJtaW5pbWFsaXN0IiB2ZW5kb3ItYWdub3N0aWMgQ0RDIGNvcmU6ICBzYW1lIGZyYW1pbmcsIGJ1dAorICogbGluay1sZXZlbCBzZXR1cCBvbmx5IHJlcXVpcmVzIGFjdGl2YXRpbmcgdGhlIGNvbmZpZ3VyYXRpb24uCisgKiBMaW51eCBzdXBwb3J0cyBpdCwgYnV0IG90aGVyIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbXMgbWF5IG5vdC4KKyAqIChUaGlzIGlzIGEgc3Vic2V0IG9mIENEQyBFdGhlcm5ldC4pCisgKgorICogQSB0aGlyZCBvcHRpb24gaXMgYWxzbyBpbiB1c2UuICBSYXRoZXIgdGhhbiBDREMgRXRoZXJuZXQsIG9yIHNvbWV0aGluZworICogc2ltcGxlciwgTWljcm9zb2Z0IHB1c2hlcyB0aGVpciBvd24gYXBwcm9hY2g6IFJORElTLiAgVGhlIHB1Ymxpc2hlZAorICogUk5ESVMgc3BlY3MgYXJlIGFtYmlndW91cyBhbmQgYXBwZWFyIHRvIGJlIGluY29tcGxldGUsIGFuZCBhcmUgYWxzbworICogbmVlZGxlc3NseSBjb21wbGV4LgorICovCisKKyNkZWZpbmUgRFJJVkVSX0RFU0MJCSJFdGhlcm5ldCBHYWRnZXQiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkiRXF1aW5veCAyMDA0IgorCitzdGF0aWMgY29uc3QgY2hhciBzaG9ydG5hbWUgW10gPSAiZXRoZXIiOworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX2Rlc2MgW10gPSBEUklWRVJfREVTQzsKKworI2RlZmluZSBSWF9FWFRSQQkyMAkJLyogZ3VhcmQgYWdhaW5zdCByeCBvdmVyZmxvd3MgKi8KKworI2lmZGVmCUNPTkZJR19VU0JfRVRIX1JORElTCisjaW5jbHVkZSAicm5kaXMuaCIKKyNlbHNlCisjZGVmaW5lIHJuZGlzX2luaXQoKSAwCisjZGVmaW5lIHJuZGlzX2V4aXQoKSBkb3t9d2hpbGUoMCkKKyNlbmRpZgorCisvKiBDREMgYW5kIFJORElTIHN1cHBvcnQgdGhlIHNhbWUgaG9zdC1jaG9zZW4gb3V0Z29pbmcgcGFja2V0IGZpbHRlcnMuICovCisjZGVmaW5lCURFRkFVTFRfRklMVEVSCShVU0JfQ0RDX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVCBcCisgCQkJfFVTQl9DRENfUEFDS0VUX1RZUEVfRElSRUNURUQpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RydWN0IGV0aF9kZXYgeworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldDsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcTsJCS8qIGZvciBjb250cm9sIHJlc3BvbnNlcyAqLworCXN0cnVjdCB1c2JfcmVxdWVzdAkqc3RhdF9yZXE7CS8qIGZvciBjZGMgJiBybmRpcyBzdGF0dXMgKi8KKworCXU4CQkJY29uZmlnOworCXN0cnVjdCB1c2JfZXAJCSppbl9lcCwgKm91dF9lcCwgKnN0YXR1c19lcDsKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKKwkJCQkqaW4sICpvdXQsICpzdGF0dXM7CisJc3RydWN0IGxpc3RfaGVhZAl0eF9yZXFzLCByeF9yZXFzOworCisJc3RydWN0IG5ldF9kZXZpY2UJKm5ldDsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKKwlhdG9taWNfdAkJdHhfcWxlbjsKKworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOworCXVuc2lnbmVkCQl6bHA6MTsKKwl1bnNpZ25lZAkJY2RjOjE7CisJdW5zaWduZWQJCXJuZGlzOjE7CisJdW5zaWduZWQJCXN1c3BlbmRlZDoxOworCXUxNgkJCWNkY19maWx0ZXI7CisJdW5zaWduZWQgbG9uZwkJdG9kbzsKKyNkZWZpbmUJV09SS19SWF9NRU1PUlkJCTAKKwlpbnQJCQlybmRpc19jb25maWc7CisJdTgJCQlob3N0X21hYyBbRVRIX0FMRU5dOworfTsKKworLyogVGhpcyB2ZXJzaW9uIGF1dG9jb25maWd1cmVzIGFzIG11Y2ggYXMgcG9zc2libGUgYXQgcnVuLXRpbWUuCisgKgorICogSXQgYWxzbyBBU1NVTUVTIGEgc2VsZi1wb3dlcmVkIGRldmljZSwgd2l0aG91dCByZW1vdGUgd2FrZXVwLAorICogYWx0aG91Z2ggcmVtb3RlIHdha2V1cCBzdXBwb3J0IHdvdWxkIG1ha2Ugc2Vuc2UuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpFUF9JTl9OQU1FOworc3RhdGljIGNvbnN0IGNoYXIgKkVQX09VVF9OQU1FOworc3RhdGljIGNvbnN0IGNoYXIgKkVQX1NUQVRVU19OQU1FOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBETyBOT1QgUkVVU0UgVEhFU0UgSURzIHdpdGggYSBwcm90b2NvbC1pbmNvbXBhdGlibGUgZHJpdmVyISEgIEV2ZXIhIQorICogSW5zdGVhZDogIGFsbG9jYXRlIHlvdXIgb3duLCB1c2luZyBub3JtYWwgVVNCLUlGIHByb2NlZHVyZXMuCisgKi8KKworLyogVGhhbmtzIHRvIE5ldENoaXAgVGVjaG5vbG9naWVzIGZvciBkb25hdGluZyB0aGlzIHByb2R1Y3QgSUQuCisgKiBJdCdzIGZvciBkZXZpY2VzIHdpdGggb25seSBDREMgRXRoZXJuZXQgY29uZmlndXJhdGlvbnMuCisgKi8KKyNkZWZpbmUgQ0RDX1ZFTkRPUl9OVU0JMHgwNTI1CQkvKiBOZXRDaGlwICovCisjZGVmaW5lIENEQ19QUk9EVUNUX05VTQkweGE0YTEJCS8qIExpbnV4LVVTQiBFdGhlcm5ldCBHYWRnZXQgKi8KKworLyogRm9yIGhhcmR3YXJlIHRoYXQgY2FuJ3QgdGFsayBDREMsIHdlIHVzZSB0aGUgc2FtZSB2ZW5kb3IgSUQgdGhhdAorICogQVJNIExpbnV4IGhhcyB1c2VkIGZvciBldGhlcm5ldC1vdmVyLXVzYiwgYm90aCB3aXRoIHNhMTEwMCBhbmQKKyAqIHdpdGggcHhhMjUwLiAgV2UncmUgcHJvdG9jb2wtY29tcGF0aWJsZSwgaWYgdGhlIGhvc3Qtc2lkZSBkcml2ZXJzCisgKiB1c2UgdGhlIGVuZHBvaW50IGRlc2NyaXB0b3JzLiAgYmNkRGV2aWNlICh2ZXJzaW9uKSBpcyBub256ZXJvLCBzbworICogZHJpdmVycyB0aGF0IG5lZWQgdG8gaGFyZC13aXJlIGVuZHBvaW50IG51bWJlcnMgaGF2ZSBhIGhvb2suCisgKgorICogVGhlIHByb3RvY29sIGlzIGEgbWluaW1hbCBzdWJzZXQgb2YgQ0RDIEV0aGVyLCB3aGljaCB3b3JrcyBvbiBhbnkgYnVsaworICogaGFyZHdhcmUgdGhhdCdzIG5vdCBkZWVwbHkgYnJva2VuIC4uLiBldmVuIG9uIGhhcmR3YXJlIHRoYXQgY2FuJ3QgdGFsaworICogUk5ESVMgKGxpa2UgU0EtMTEwMCwgd2l0aCBubyBpbnRlcnJ1cHQgZW5kcG9pbnQsIG9yIGFueXRoaW5nIHRoYXQKKyAqIGRvZXNuJ3QgaGFuZGxlIGNvbnRyb2wtT1VUKS4KKyAqLworI2RlZmluZQlTSU1QTEVfVkVORE9SX05VTQkweDA0OWYKKyNkZWZpbmUJU0lNUExFX1BST0RVQ1RfTlVNCTB4NTA1YQorCisvKiBGb3IgaGFyZHdhcmUgdGhhdCBjYW4gdGFsayBSTkRJUyBhbmQgZWl0aGVyIG9mIHRoZSBhYm92ZSBwcm90b2NvbHMsCisgKiB1c2UgdGhpcyBJRCAuLi4gdGhlIHdpbmRvd3MgSU5GIGZpbGVzIHdpbGwga25vdyBpdC4gIFVubGVzcyBpdCdzCisgKiB1c2VkIHdpdGggQ0RDIEV0aGVybmV0LCBMaW51eCAyLjQgaG9zdHMgd2lsbCBuZWVkIHVwZGF0ZXMgdG8gY2hvb3NlCisgKiB0aGUgbm9uLVJORElTIGNvbmZpZ3VyYXRpb24uCisgKi8KKyNkZWZpbmUgUk5ESVNfVkVORE9SX05VTQkweDA1MjUJLyogTmV0Q2hpcCAqLworI2RlZmluZSBSTkRJU19QUk9EVUNUX05VTQkweGE0YTIJLyogRXRoZXJuZXQvUk5ESVMgR2FkZ2V0ICovCisKKworLyogU29tZSBzeXN0ZW1zIHdpbGwgd2FudCBkaWZmZXJlbnQgcHJvZHVjdCBpZGVudGlmZXJzIHB1Ymxpc2hlZCBpbiB0aGUKKyAqIGRldmljZSBkZXNjcmlwdG9yLCBlaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIG9yIGJvdGguICBUaGVzZSBzdHJpbmcKKyAqIHBhcmFtZXRlcnMgYXJlIGluIFVURi04IChzdXBlcnNldCBvZiBBU0NJSSdzIDcgYml0IGNoYXJhY3RlcnMpLgorICovCisKK3N0YXRpYyB1c2hvcnQgX19pbml0ZGF0YSBpZFZlbmRvcjsKK21vZHVsZV9wYXJhbShpZFZlbmRvciwgdXNob3J0LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaWRWZW5kb3IsICJVU0IgVmVuZG9yIElEIik7CisKK3N0YXRpYyB1c2hvcnQgX19pbml0ZGF0YSBpZFByb2R1Y3Q7Cittb2R1bGVfcGFyYW0oaWRQcm9kdWN0LCB1c2hvcnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpZFByb2R1Y3QsICJVU0IgUHJvZHVjdCBJRCIpOworCitzdGF0aWMgdXNob3J0IF9faW5pdGRhdGEgYmNkRGV2aWNlOworbW9kdWxlX3BhcmFtKGJjZERldmljZSwgdXNob3J0LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoYmNkRGV2aWNlLCAiVVNCIERldmljZSB2ZXJzaW9uIChCQ0QpIik7CisKK3N0YXRpYyBjaGFyICpfX2luaXRkYXRhIGlNYW51ZmFjdHVyZXI7Cittb2R1bGVfcGFyYW0oaU1hbnVmYWN0dXJlciwgY2hhcnAsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpTWFudWZhY3R1cmVyLCAiVVNCIE1hbnVmYWN0dXJlciBzdHJpbmciKTsKKworc3RhdGljIGNoYXIgKl9faW5pdGRhdGEgaVByb2R1Y3Q7Cittb2R1bGVfcGFyYW0oaVByb2R1Y3QsIGNoYXJwLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaVByb2R1Y3QsICJVU0IgUHJvZHVjdCBzdHJpbmciKTsKKworLyogaW5pdGlhbCB2YWx1ZSwgY2hhbmdlZCBieSAiaWZjb25maWcgdXNiMCBodyBldGhlciB4eDp4eDp4eDp4eDp4eDp4eCIgKi8KK3N0YXRpYyBjaGFyICpfX2luaXRkYXRhIGRldl9hZGRyOworbW9kdWxlX3BhcmFtKGRldl9hZGRyLCBjaGFycCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGRldl9hZGRyLCAiRGV2aWNlIEV0aGVybmV0IEFkZHJlc3MiKTsKKworLyogdGhpcyBhZGRyZXNzIGlzIGludmlzaWJsZSB0byBpZmNvbmZpZyAqLworc3RhdGljIGNoYXIgKl9faW5pdGRhdGEgaG9zdF9hZGRyOworbW9kdWxlX3BhcmFtKGhvc3RfYWRkciwgY2hhcnAsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhob3N0X2FkZHIsICJIb3N0IEV0aGVybmV0IEFkZHJlc3MiKTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBJbmNsdWRlIENEQyBzdXBwb3J0IGlmIHdlIGNvdWxkIHJ1biBvbiBDREMtY2FwYWJsZSBoYXJkd2FyZS4gKi8KKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAKKyNkZWZpbmUJREVWX0NPTkZJR19DREMKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENECisjZGVmaW5lCURFVl9DT05GSUdfQ0RDCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0dPS1UKKyNkZWZpbmUJREVWX0NPTkZJR19DREMKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWAorI2RlZmluZSBERVZfQ09ORklHX0NEQworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NUTExWFgKKyNkZWZpbmUJREVWX0NPTkZJR19DREMKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfT01BUAorI2RlZmluZQlERVZfQ09ORklHX0NEQworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9OOTYwNAorI2RlZmluZQlERVZfQ09ORklHX0NEQworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1gKKyNkZWZpbmUgREVWX0NPTkZJR19DREMKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfQVQ5MQorI2RlZmluZSBERVZfQ09ORklHX0NEQworI2VuZGlmCisKKworLyogRm9yIENEQy1pbmNhcGFibGUgaGFyZHdhcmUsIGNob29zZSB0aGUgc2ltcGxlIGNkYyBzdWJzZXQuCisgKiBBbnl0aGluZyB0aGF0IHRhbGtzIGJ1bGsgKHdpdGhvdXQgbm90YWJsZSBidWdzKSBjYW4gZG8gdGhpcy4KKyAqLworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWAorI2RlZmluZQlERVZfQ09ORklHX1NVQlNFVAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9TSAorI2RlZmluZQlERVZfQ09ORklHX1NVQlNFVAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9TQTExMDAKKy8qIHVzZSBub24tQ0RDIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZQlERVZfQ09ORklHX1NVQlNFVAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwCisjZGVmaW5lIERFVl9DT05GSUdfQ0RDCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogIm1haW4iIGNvbmZpZyBpcyBlaXRoZXIgQ0RDLCBvciBpdHMgc2ltcGxlIHN1YnNldCAqLworc3RhdGljIGlubGluZSBpbnQgaXNfY2RjKHN0cnVjdCBldGhfZGV2ICpkZXYpCit7CisjaWYJIWRlZmluZWQoREVWX0NPTkZJR19TVUJTRVQpCisJcmV0dXJuIDE7CQkvKiBvbmx5IGNkYyBwb3NzaWJsZSAqLworI2VsaWYJIWRlZmluZWQgKERFVl9DT05GSUdfQ0RDKQorCXJldHVybiAwOwkJLyogb25seSBzdWJzZXQgcG9zc2libGUgKi8KKyNlbHNlCisJcmV0dXJuIGRldi0+Y2RjOwkvKiBkZXBlbmRzIG9uIHdoYXQgaGFyZHdhcmUgd2UgZm91bmQgKi8KKyNlbmRpZgorfQorCisvKiAic2Vjb25kYXJ5IiBSTkRJUyBjb25maWcgbWF5IHNvbWV0aW1lcyBiZSBhY3RpdmF0ZWQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHJuZGlzX2FjdGl2ZShzdHJ1Y3QgZXRoX2RldiAqZGV2KQoreworI2lmZGVmCUNPTkZJR19VU0JfRVRIX1JORElTCisJcmV0dXJuIGRldi0+cm5kaXM7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisKKyNkZWZpbmUJc3Vic2V0X2FjdGl2ZShkZXYpCSghaXNfY2RjKGRldikgJiYgIXJuZGlzX2FjdGl2ZShkZXYpKQorI2RlZmluZQljZGNfYWN0aXZlKGRldikJCSggaXNfY2RjKGRldikgJiYgIXJuZGlzX2FjdGl2ZShkZXYpKQorCisKKworI2RlZmluZSBERUZBVUxUX1FMRU4JMgkvKiBkb3VibGUgYnVmZmVyaW5nIGJ5IGRlZmF1bHQgKi8KKworLyogcGVhayBidWxrIHRyYW5zZmVyIGJpdHMtcGVyLXNlY29uZCAqLworI2RlZmluZQlIU19CUFMgCQkoMTMgKiA1MTIgKiA4ICogMTAwMCAqIDgpCisjZGVmaW5lCUZTX0JQUwkJKDE5ICogIDY0ICogMSAqIDEwMDAgKiA4KQorCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECisKK3N0YXRpYyB1bnNpZ25lZCBxbXVsdCA9IDU7Cittb2R1bGVfcGFyYW0gKHFtdWx0LCB1aW50LCBTX0lSVUdPfFNfSVdVU1IpOworCisKKy8qIGZvciBkdWFsLXNwZWVkIGhhcmR3YXJlLCB1c2UgZGVlcGVyIHF1ZXVlcyBhdCBoaWdoc3BlZWQgKi8KKyNkZWZpbmUgcWxlbihnYWRnZXQpIFwKKwkoREVGQVVMVF9RTEVOKigoZ2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgPyBxbXVsdCA6IDEpKQorCisvKiBhbHNvIGRlZmVyIElSUXMgb24gaGlnaHNwZWVkIFRYICovCisjZGVmaW5lIFRYX0RFTEFZCXFtdWx0CisKKyNkZWZpbmUJQklUUkFURShnKQkoKChnKS0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpID8gSFNfQlBTIDogRlNfQlBTKQorCisjZWxzZQkvKiBmdWxsIHNwZWVkIChsb3cgc3BlZWQgZG9lc24ndCBkbyBidWxrKSAqLworI2RlZmluZSBxbGVuKGdhZGdldCkgREVGQVVMVF9RTEVOCisKKyNkZWZpbmUJQklUUkFURShnKQlGU19CUFMKKyNlbmRpZgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgeHByaW50ayhkLGxldmVsLGZtdCxhcmdzLi4uKSBcCisJcHJpbnRrKGxldmVsICIlczogIiBmbXQgLCAoZCktPm5ldC0+bmFtZSAsICMjIGFyZ3MpCisKKyNpZmRlZiBERUJVRworI3VuZGVmIERFQlVHCisjZGVmaW5lIERFQlVHKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9ERUJVRyAsIGZtdCAsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBERUJVRyhkZXYsZm10LGFyZ3MuLi4pIFwKKwlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogREVCVUcgKi8KKworI2lmZGVmIFZFUkJPU0UKKyNkZWZpbmUgVkRFQlVHCURFQlVHCisjZWxzZQorI2RlZmluZSBWREVCVUcoZGV2LGZtdCxhcmdzLi4uKSBcCisJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmIC8qIERFQlVHICovCisKKyNkZWZpbmUgRVJST1IoZGV2LGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX0VSUiAsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIFdBUk4oZGV2LGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX1dBUk5JTkcgLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBJTkZPKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9JTkZPICwgZm10ICwgIyMgYXJncykKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVVNCIERSSVZFUiBIT09LVVAgKHRvIHRoZSBoYXJkd2FyZSBkcml2ZXIsIGJlbG93IHVzKSwgbW9zdGx5CisgKiBlcDAgaW1wbGVtZW50YXRpb246ICBkZXNjcmlwdG9ycywgY29uZmlnIG1hbmFnZW1lbnQsIHNldHVwKCkuCisgKiBhbHNvIG9wdGlvbmFsIGNsYXNzLXNwZWNpZmljIG5vdGlmaWNhdGlvbiBpbnRlcnJ1cHQgdHJhbnNmZXIuCisgKi8KKworLyoKKyAqIERFU0NSSVBUT1JTIC4uLiBtb3N0IGFyZSBzdGF0aWMsIGJ1dCBzdHJpbmdzIGFuZCAoZnVsbCkgY29uZmlndXJhdGlvbgorICogZGVzY3JpcHRvcnMgYXJlIGJ1aWx0IG9uIGRlbWFuZC4gIEZvciBub3cgd2UgZG8gZWl0aGVyIGZ1bGwgQ0RDLCBvcgorICogb3VyIHNpbXBsZSBzdWJzZXQsIHdpdGggUk5ESVMgYXMgYW4gb3B0aW9uYWwgc2Vjb25kIGNvbmZpZ3VyYXRpb24uCisgKgorICogUk5ESVMgaW5jbHVkZXMgc29tZSBDREMgQUNNIGRlc2NyaXB0b3JzIC4uLiBsaWtlIENEQyBFdGhlcm5ldC4gIEJ1dAorICogdGhlIGNsYXNzIGRlc2NyaXB0b3JzIG1hdGNoIGEgbW9kZW0gKHRoZXkncmUgaWdub3JlZDsgaXQncyByZWFsbHkganVzdAorICogRXRoZXJuZXQgZnVuY3Rpb25hbGl0eSksIHRoZXkgZG9uJ3QgbmVlZCB0aGUgTk9QIGFsdHNldHRpbmcsIGFuZCB0aGUKKyAqIHN0YXR1cyB0cmFuc2ZlciBlbmRwb2ludCBpc24ndCBvcHRpb25hbC4KKyAqLworCisjZGVmaW5lIFNUUklOR19NQU5VRkFDVFVSRVIJCTEKKyNkZWZpbmUgU1RSSU5HX1BST0RVQ1QJCQkyCisjZGVmaW5lIFNUUklOR19FVEhBRERSCQkJMworI2RlZmluZSBTVFJJTkdfREFUQQkJCTQKKyNkZWZpbmUgU1RSSU5HX0NPTlRST0wJCQk1CisjZGVmaW5lIFNUUklOR19STkRJU19DT05UUk9MCQk2CisjZGVmaW5lIFNUUklOR19DREMJCQk3CisjZGVmaW5lIFNUUklOR19TVUJTRVQJCQk4CisjZGVmaW5lIFNUUklOR19STkRJUwkJCTkKKworI2RlZmluZSBVU0JfQlVGU0laCTI1NgkJLyogaG9sZHMgb3VyIGJpZ2dlc3QgZGVzY3JpcHRvciAqLworCisvKgorICogVGhpcyBkZXZpY2UgYWR2ZXJ0aXNlcyBvbmUgY29uZmlndXJhdGlvbiwgZXRoX2NvbmZpZywgdW5sZXNzIFJORElTCisgKiBpcyBlbmFibGVkIChybmRpc19jb25maWcpIG9uIGhhcmR3YXJlIHN1cHBvcnRpbmcgYXQgbGVhc3QgdHdvIGNvbmZpZ3MuCisgKgorICogTk9URTogIENvbnRyb2xsZXJzIGxpa2Ugc3VwZXJoX3VkYyBzaG91bGQgcHJvYmFibHkgYmUgYWJsZSB0byB1c2UKKyAqIGFuIFJORElTLW9ubHkgY29uZmlndXJhdGlvbi4KKyAqCisgKiBGSVhNRSBkZWZpbmUgc29tZSBoaWdoZXItcG93ZXJlZCBjb25maWd1cmF0aW9ucyB0byBtYWtlIGl0IGVhc2llcgorICogdG8gcmVjaGFyZ2UgYmF0dGVyaWVzIC4uLgorICovCisKKyNkZWZpbmUgREVWX0NPTkZJR19WQUxVRQkxCS8qIGNkYyBvciBzdWJzZXQgKi8KKyNkZWZpbmUgREVWX1JORElTX0NPTkZJR19WQUxVRQkyCS8qIHJuZGlzOyBvcHRpb25hbCAqLworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvcgorZGV2aWNlX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGRldmljZV9kZXNjLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFLAorCisJLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDApLAorCisJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfQ09NTSwKKwkuYkRldmljZVN1YkNsYXNzID0JMCwKKwkuYkRldmljZVByb3RvY29sID0JMCwKKworCS5pZFZlbmRvciA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2IChDRENfVkVORE9SX05VTSksCisJLmlkUHJvZHVjdCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2IChDRENfUFJPRFVDVF9OVU0pLAorCS5pTWFudWZhY3R1cmVyID0JU1RSSU5HX01BTlVGQUNUVVJFUiwKKwkuaVByb2R1Y3QgPQkJU1RSSU5HX1BST0RVQ1QsCisJLmJOdW1Db25maWd1cmF0aW9ucyA9CTEsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9vdGdfZGVzY3JpcHRvcgorb3RnX2Rlc2NyaXB0b3IgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIG90Z19kZXNjcmlwdG9yLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfT1RHLAorCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfT1RHX1NSUCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yCitldGhfY29uZmlnID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBldGhfY29uZmlnLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ09ORklHLAorCisJLyogY29tcHV0ZSB3VG90YWxMZW5ndGggb24gdGhlIGZseSAqLworCS5iTnVtSW50ZXJmYWNlcyA9CTIsCisJLmJDb25maWd1cmF0aW9uVmFsdWUgPQlERVZfQ09ORklHX1ZBTFVFLAorCS5pQ29uZmlndXJhdGlvbiA9CVNUUklOR19DREMsCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfQ09ORklHX0FUVF9PTkUgfCBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCisJLmJNYXhQb3dlciA9CQk1MCwKK307CisKKyNpZmRlZglDT05GSUdfVVNCX0VUSF9STkRJUworc3RhdGljIHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgCitybmRpc19jb25maWcgPSB7CisJLmJMZW5ndGggPSAgICAgICAgICAgICAgc2l6ZW9mIHJuZGlzX2NvbmZpZywKKwkuYkRlc2NyaXB0b3JUeXBlID0gICAgICBVU0JfRFRfQ09ORklHLAorCisJLyogY29tcHV0ZSB3VG90YWxMZW5ndGggb24gdGhlIGZseSAqLworCS5iTnVtSW50ZXJmYWNlcyA9ICAgICAgIDIsCisJLmJDb25maWd1cmF0aW9uVmFsdWUgPSAgREVWX1JORElTX0NPTkZJR19WQUxVRSwKKwkuaUNvbmZpZ3VyYXRpb24gPSAgICAgICBTVFJJTkdfUk5ESVMsCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfQ09ORklHX0FUVF9PTkUgfCBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCisJLmJNYXhQb3dlciA9ICAgICAgICAgICAgNTAsCit9OworI2VuZGlmCisKKy8qCisgKiBDb21wYXJlZCB0byB0aGUgc2ltcGxlIENEQyBzdWJzZXQsIHRoZSBmdWxsIENEQyBFdGhlcm5ldCBtb2RlbCBhZGRzCisgKiB0aHJlZSBjbGFzcyBkZXNjcmlwdG9ycywgdHdvIGludGVyZmFjZSBkZXNjcmlwdG9ycywgb3B0aW9uYWwgc3RhdHVzCisgKiBlbmRwb2ludC4gIEJvdGggaGF2ZSBhICJkYXRhIiBpbnRlcmZhY2UgYW5kIHR3byBidWxrIGVuZHBvaW50cy4KKyAqIFRoZXJlIGFyZSBhbHNvIGRpZmZlcmVuY2VzIGluIGhvdyBjb250cm9sIHJlcXVlc3RzIGFyZSBoYW5kbGVkLgorICoKKyAqIFJORElTIHNoYXJlcyBhIGxvdCB3aXRoIENEQy1FdGhlcm5ldCwgc2luY2UgaXQncyBhIHZhcmlhbnQgb2YKKyAqIHRoZSBDREMtQUNNIChtb2RlbSkgc3BlYy4KKyAqLworCisjaWZkZWYJREVWX0NPTkZJR19DREMKK3N0YXRpYyBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yCitjb250cm9sX2ludGYgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGNvbnRyb2xfaW50ZiwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0lOVEVSRkFDRSwKKworCS5iSW50ZXJmYWNlTnVtYmVyID0JMCwKKwkvKiBzdGF0dXMgZW5kcG9pbnQgaXMgb3B0aW9uYWw7IHRoaXMgbWF5IGJlIHBhdGNoZWQgbGF0ZXIgKi8KKwkuYk51bUVuZHBvaW50cyA9CTEsCisJLmJJbnRlcmZhY2VDbGFzcyA9CVVTQl9DTEFTU19DT01NLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPQlVU0JfQ0RDX1NVQkNMQVNTX0VUSEVSTkVULAorCS5iSW50ZXJmYWNlUHJvdG9jb2wgPQlVU0JfQ0RDX1BST1RPX05PTkUsCisJLmlJbnRlcmZhY2UgPQkJU1RSSU5HX0NPTlRST0wsCit9OworI2VuZGlmCisKKyNpZmRlZglDT05GSUdfVVNCX0VUSF9STkRJUworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IKK3JuZGlzX2NvbnRyb2xfaW50ZiA9IHsKKwkuYkxlbmd0aCA9ICAgICAgICAgICAgICBzaXplb2Ygcm5kaXNfY29udHJvbF9pbnRmLAorCS5iRGVzY3JpcHRvclR5cGUgPSAgICAgIFVTQl9EVF9JTlRFUkZBQ0UsCisJICAKKwkuYkludGVyZmFjZU51bWJlciA9ICAgICAwLAorCS5iTnVtRW5kcG9pbnRzID0gICAgICAgIDEsCisJLmJJbnRlcmZhY2VDbGFzcyA9ICAgICAgVVNCX0NMQVNTX0NPTU0sCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9ICAgVVNCX0NEQ19TVUJDTEFTU19BQ00sCisJLmJJbnRlcmZhY2VQcm90b2NvbCA9ICAgVVNCX0NEQ19BQ01fUFJPVE9fVkVORE9SLAorCS5pSW50ZXJmYWNlID0gICAgICAgICAgIFNUUklOR19STkRJU19DT05UUk9MLAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChERVZfQ09ORklHX0NEQykgfHwgZGVmaW5lZChDT05GSUdfVVNCX0VUSF9STkRJUykKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfY2RjX2hlYWRlcl9kZXNjIGhlYWRlcl9kZXNjID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBoZWFkZXJfZGVzYywKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19IRUFERVJfVFlQRSwKKworCS5iY2RDREMgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMTEwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2NkY191bmlvbl9kZXNjIHVuaW9uX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIHVuaW9uX2Rlc2MsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCisJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfVU5JT05fVFlQRSwKKworCS5iTWFzdGVySW50ZXJmYWNlMCA9CTAsCS8qIGluZGV4IG9mIGNvbnRyb2wgaW50ZXJmYWNlICovCisJLmJTbGF2ZUludGVyZmFjZTAgPQkxLAkvKiBpbmRleCBvZiBEQVRBIGludGVyZmFjZSAqLworfTsKKworI2VuZGlmCS8qIENEQyB8fCBSTkRJUyAqLworCisjaWZkZWYJQ09ORklHX1VTQl9FVEhfUk5ESVMKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfY2RjX2NhbGxfbWdtdF9kZXNjcmlwdG9yIGNhbGxfbWdtdF9kZXNjcmlwdG9yID0geworCS5iTGVuZ3RoID0gIAkJc2l6ZW9mIGNhbGxfbWdtdF9kZXNjcmlwdG9yLAorCS5iRGVzY3JpcHRvclR5cGUgPSAJVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlID0gCVVTQl9DRENfQ0FMTF9NQU5BR0VNRU5UX1RZUEUsCisKKwkuYm1DYXBhYmlsaXRpZXMgPSAJMHgwMCwKKwkuYkRhdGFJbnRlcmZhY2UgPSAJMHgwMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NkY19hY21fZGVzY3JpcHRvciBhY21fZGVzY3JpcHRvciA9IHsKKwkuYkxlbmd0aCA9ICAJCXNpemVvZiBhY21fZGVzY3JpcHRvciwKKwkuYkRlc2NyaXB0b3JUeXBlID0gCVVTQl9EVF9DU19JTlRFUkZBQ0UsCisJLmJEZXNjcmlwdG9yU3ViVHlwZSA9IAlVU0JfQ0RDX0FDTV9UWVBFLAorCisJLmJtQ2FwYWJpbGl0aWVzID0gCTB4MDAsCit9OworCisjZW5kaWYKKworI2lmZGVmCURFVl9DT05GSUdfQ0RDCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2NkY19ldGhlcl9kZXNjIGV0aGVyX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGV0aGVyX2Rlc2MsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCisJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfRVRIRVJORVRfVFlQRSwKKworCS8qIHRoaXMgZGVzY3JpcHRvciBhY3R1YWxseSBhZGRzIHZhbHVlLCBzdXJwcmlzZSEgKi8KKwkuaU1BQ0FkZHJlc3MgPQkJU1RSSU5HX0VUSEFERFIsCisJLmJtRXRoZXJuZXRTdGF0aXN0aWNzID0JX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCksIC8qIG5vIHN0YXRpc3RpY3MgKi8KKwkud01heFNlZ21lbnRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNiAoRVRIX0ZSQU1FX0xFTiksCisJLndOdW1iZXJNQ0ZpbHRlcnMgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2ICgwKSwKKwkuYk51bWJlclBvd2VyRmlsdGVycyA9CTAsCit9OworCisjZW5kaWYKKworI2lmIGRlZmluZWQoREVWX0NPTkZJR19DREMpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9FVEhfUk5ESVMpCisKKy8qIGluY2x1ZGUgdGhlIHN0YXR1cyBlbmRwb2ludCBpZiB3ZSBjYW4sIGV2ZW4gd2hlcmUgaXQncyBvcHRpb25hbC4KKyAqIHVzZSB3TWF4UGFja2V0U2l6ZSBiaWcgZW5vdWdoIHRvIGZpdCBDRENfTk9USUZZX1NQRUVEX0NIQU5HRSBpbiBvbmUKKyAqIHBhY2tldCwgdG8gc2ltcGxpZnkgY2FuY2VsYXRpb247IGFuZCBhIGJpZyB0cmFuc2ZlciBpbnRlcnZhbCwgdG8KKyAqIHdhc3RlIGxlc3MgYmFuZHdpZHRoLgorICoKKyAqIHNvbWUgZHJpdmVycyAobGlrZSBMaW51eCAyLjQgY2RjLWV0aGVyISkgIm5lZWQiIGl0IHRvIGV4aXN0IGV2ZW4KKyAqIGlmIHRoZXkgaWdub3JlIHRoZSBjb25uZWN0L2Rpc2Nvbm5lY3Qgbm90aWZpY2F0aW9ucyB0aGF0IHJlYWwgYWV0aGVyCisgKiBjYW4gcHJvdmlkZS4gIG1vcmUgYWR2YW5jZWQgY2RjIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IHdhbnQgdG8gc3VwcG9ydAorICogZW5jYXBzdWxhdGVkIGNvbW1hbmRzICh2ZW5kb3Itc3BlY2lmaWMsIHVzaW5nIGNvbnRyb2wtT1VUKS4KKyAqCisgKiBSTkRJUyByZXF1aXJlcyB0aGUgc3RhdHVzIGVuZHBvaW50LCBzaW5jZSBpdCB1c2VzIHRoYXQgZW5jYXBzdWxhdGlvbgorICogbWVjaGFuaXNtIGZvciBpdHMgZnVua3kgUlBDIHNjaGVtZS4KKyAqLworIAorI2RlZmluZSBMT0cyX1NUQVRVU19JTlRFUlZBTF9NU0VDCTUJLyogMSA8PCA1ID09IDMyIG1zZWMgKi8KKyNkZWZpbmUgU1RBVFVTX0JZVEVDT1VOVAkJMTYJLyogOCBieXRlIGhlYWRlciArIGRhdGEgKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgorZnNfc3RhdHVzX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2IChTVEFUVVNfQllURUNPVU5UKSwKKwkuYkludGVydmFsID0JCTEgPDwgTE9HMl9TVEFUVVNfSU5URVJWQUxfTVNFQywKK307CisjZW5kaWYKKworI2lmZGVmCURFVl9DT05GSUdfQ0RDCisKKy8qIHRoZSBkZWZhdWx0IGRhdGEgaW50ZXJmYWNlIGhhcyBubyBlbmRwb2ludHMgLi4uICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yCitkYXRhX25vcF9pbnRmID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBkYXRhX25vcF9pbnRmLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAorCisJLmJJbnRlcmZhY2VOdW1iZXIgPQkxLAorCS5iQWx0ZXJuYXRlU2V0dGluZyA9CTAsCisJLmJOdW1FbmRwb2ludHMgPQkwLAorCS5iSW50ZXJmYWNlQ2xhc3MgPQlVU0JfQ0xBU1NfQ0RDX0RBVEEsCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9CTAsCisJLmJJbnRlcmZhY2VQcm90b2NvbCA9CTAsCit9OworCisvKiAuLi4gYnV0IHRoZSAicmVhbCIgZGF0YSBpbnRlcmZhY2UgaGFzIHR3byBidWxrIGVuZHBvaW50cyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcgorZGF0YV9pbnRmID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBkYXRhX2ludGYsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9JTlRFUkZBQ0UsCisKKwkuYkludGVyZmFjZU51bWJlciA9CTEsCisJLmJBbHRlcm5hdGVTZXR0aW5nID0JMSwKKwkuYk51bUVuZHBvaW50cyA9CTIsCisJLmJJbnRlcmZhY2VDbGFzcyA9CVVTQl9DTEFTU19DRENfREFUQSwKKwkuYkludGVyZmFjZVN1YkNsYXNzID0JMCwKKwkuYkludGVyZmFjZVByb3RvY29sID0JMCwKKwkuaUludGVyZmFjZSA9CQlTVFJJTkdfREFUQSwKK307CisKKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX1VTQl9FVEhfUk5ESVMKKworLyogUk5ESVMgZG9lc24ndCBhY3RpdmF0ZSBieSBjaGFuZ2luZyB0byB0aGUgInJlYWwiIGFsdHNldHRpbmcgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IKK3JuZGlzX2RhdGFfaW50ZiA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2Ygcm5kaXNfZGF0YV9pbnRmLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAorCisJLmJJbnRlcmZhY2VOdW1iZXIgPQkxLAorCS5iQWx0ZXJuYXRlU2V0dGluZyA9CTAsCisJLmJOdW1FbmRwb2ludHMgPQkyLAorCS5iSW50ZXJmYWNlQ2xhc3MgPQlVU0JfQ0xBU1NfQ0RDX0RBVEEsCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9CTAsCisJLmJJbnRlcmZhY2VQcm90b2NvbCA9CTAsCisJLmlJbnRlcmZhY2UgPQkJU1RSSU5HX0RBVEEsCit9OworCisjZW5kaWYKKworI2lmZGVmIERFVl9DT05GSUdfU1VCU0VUCisKKy8qCisgKiAiU2ltcGxlIiBDREMtc3Vic2V0IG9wdGlvbiBpcyBhIHNpbXBsZSB2ZW5kb3ItbmV1dHJhbCBtb2RlbCB0aGF0IG1vc3QKKyAqIGZ1bGwgc3BlZWQgY29udHJvbGxlcnMgY2FuIGhhbmRsZTogIG9uZSBpbnRlcmZhY2UsIHR3byBidWxrIGVuZHBvaW50cy4KKyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcgorc3Vic2V0X2RhdGFfaW50ZiA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2Ygc3Vic2V0X2RhdGFfaW50ZiwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0lOVEVSRkFDRSwKKworCS5iSW50ZXJmYWNlTnVtYmVyID0JMCwKKwkuYkFsdGVybmF0ZVNldHRpbmcgPQkwLAorCS5iTnVtRW5kcG9pbnRzID0JMiwKKwkuYkludGVyZmFjZUNsYXNzID0JVVNCX0NMQVNTX1ZFTkRPUl9TUEVDLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPQkwLAorCS5iSW50ZXJmYWNlUHJvdG9jb2wgPQkwLAorCS5pSW50ZXJmYWNlID0JCVNUUklOR19EQVRBLAorfTsKKworI2VuZGlmCS8qIFNVQlNFVCAqLworCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKK2ZzX3NvdXJjZV9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgorZnNfc2lua19kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfT1VULAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpmc19ldGhfZnVuY3Rpb24gWzExXSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb3RnX2Rlc2NyaXB0b3IsCisjaWZkZWYgREVWX0NPTkZJR19DREMKKwkvKiAiY2RjIiBtb2RlIGRlc2NyaXB0b3JzICovCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmNvbnRyb2xfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaGVhZGVyX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJnVuaW9uX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmV0aGVyX2Rlc2MsCisJLyogTk9URTogc3RhdHVzIGVuZHBvaW50IG1heSBuZWVkIHRvIGJlIHJlbW92ZWQgKi8KKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc3RhdHVzX2Rlc2MsCisJLyogZGF0YSBpbnRlcmZhY2UsIHdpdGggYWx0c2V0dGluZyAqLworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZkYXRhX25vcF9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZkYXRhX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3NvdXJjZV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19zaW5rX2Rlc2MsCisJTlVMTCwKKyNlbmRpZiAvKiBERVZfQ09ORklHX0NEQyAqLworfTsKKworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBmc19zdWJzZXRfZGVzY3JpcHRvcnModm9pZCkKK3sKKyNpZmRlZiBERVZfQ09ORklHX1NVQlNFVAorCWZzX2V0aF9mdW5jdGlvblsxXSA9IChzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZzdWJzZXRfZGF0YV9pbnRmOworCWZzX2V0aF9mdW5jdGlvblsyXSA9IChzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19zb3VyY2VfZGVzYzsKKwlmc19ldGhfZnVuY3Rpb25bM10gPSAoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc2lua19kZXNjOworCWZzX2V0aF9mdW5jdGlvbls0XSA9IE5VTEw7CisjZWxzZQorCWZzX2V0aF9mdW5jdGlvblsxXSA9IE5VTEw7CisjZW5kaWYKK30KKworI2lmZGVmCUNPTkZJR19VU0JfRVRIX1JORElTCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZnNfcm5kaXNfZnVuY3Rpb24gW10gPSB7CisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm90Z19kZXNjcmlwdG9yLAorCS8qIGNvbnRyb2wgaW50ZXJmYWNlIG1hdGNoZXMgQUNNLCBub3QgRXRoZXJuZXQgKi8KKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmcm5kaXNfY29udHJvbF9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmY2FsbF9tZ210X2Rlc2NyaXB0b3IsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmFjbV9kZXNjcmlwdG9yLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZ1bmlvbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19zdGF0dXNfZGVzYywKKwkvKiBkYXRhIGludGVyZmFjZSBoYXMgbm8gYWx0c2V0dGluZyAqLworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZybmRpc19kYXRhX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3NvdXJjZV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19zaW5rX2Rlc2MsCisJTlVMTCwKK307CisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCisvKgorICogdXNiIDIuMCBkZXZpY2VzIG5lZWQgdG8gZXhwb3NlIGJvdGggaGlnaCBzcGVlZCBhbmQgZnVsbCBzcGVlZAorICogZGVzY3JpcHRvcnMsIHVubGVzcyB0aGV5IG9ubHkgcnVuIGF0IGZ1bGwgc3BlZWQuCisgKi8KKworI2lmIGRlZmluZWQoREVWX0NPTkZJR19DREMpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9FVEhfUk5ESVMpCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCitoc19zdGF0dXNfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCisJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNiAoU1RBVFVTX0JZVEVDT1VOVCksCisJLmJJbnRlcnZhbCA9CQlMT0cyX1NUQVRVU19JTlRFUlZBTF9NU0VDICsgNCwKK307CisjZW5kaWYgLyogREVWX0NPTkZJR19DREMgKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgoraHNfc291cmNlX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2ICg1MTIpLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgoraHNfc2lua19kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNiAoNTEyKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yCitkZXZfcXVhbGlmaWVyID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZfcXVhbGlmaWVyLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFX1FVQUxJRklFUiwKKworCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjAwKSwKKwkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19DT01NLAorCisJLmJOdW1Db25maWd1cmF0aW9ucyA9CTEsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfZXRoX2Z1bmN0aW9uIFsxMV0gPSB7CisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm90Z19kZXNjcmlwdG9yLAorI2lmZGVmIERFVl9DT05GSUdfQ0RDCisJLyogImNkYyIgbW9kZSBkZXNjcmlwdG9ycyAqLworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZjb250cm9sX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhlYWRlcl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZ1bmlvbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZldGhlcl9kZXNjLAorCS8qIE5PVEU6IHN0YXR1cyBlbmRwb2ludCBtYXkgbmVlZCB0byBiZSByZW1vdmVkICovCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX3N0YXR1c19kZXNjLAorCS8qIGRhdGEgaW50ZXJmYWNlLCB3aXRoIGFsdHNldHRpbmcgKi8KKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZGF0YV9ub3BfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZGF0YV9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19zb3VyY2VfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfc2lua19kZXNjLAorCU5VTEwsCisjZW5kaWYgLyogREVWX0NPTkZJR19DREMgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgaHNfc3Vic2V0X2Rlc2NyaXB0b3JzKHZvaWQpCit7CisjaWZkZWYgREVWX0NPTkZJR19TVUJTRVQKKwloc19ldGhfZnVuY3Rpb25bMV0gPSAoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmc3Vic2V0X2RhdGFfaW50ZjsKKwloc19ldGhfZnVuY3Rpb25bMl0gPSAoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc291cmNlX2Rlc2M7CisJaHNfZXRoX2Z1bmN0aW9uWzNdID0gKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3NpbmtfZGVzYzsKKwloc19ldGhfZnVuY3Rpb25bNF0gPSBOVUxMOworI2Vsc2UKKwloc19ldGhfZnVuY3Rpb25bMV0gPSBOVUxMOworI2VuZGlmCit9CisKKyNpZmRlZglDT05GSUdfVVNCX0VUSF9STkRJUworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmhzX3JuZGlzX2Z1bmN0aW9uIFtdID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvdGdfZGVzY3JpcHRvciwKKwkvKiBjb250cm9sIGludGVyZmFjZSBtYXRjaGVzIEFDTSwgbm90IEV0aGVybmV0ICovCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJnJuZGlzX2NvbnRyb2xfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaGVhZGVyX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmNhbGxfbWdtdF9kZXNjcmlwdG9yLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZhY21fZGVzY3JpcHRvciwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmdW5pb25fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfc3RhdHVzX2Rlc2MsCisJLyogZGF0YSBpbnRlcmZhY2UgaGFzIG5vIGFsdHNldHRpbmcgKi8KKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmcm5kaXNfZGF0YV9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19zb3VyY2VfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfc2lua19kZXNjLAorCU5VTEwsCit9OworI2VuZGlmCisKKworLyogbWF4cGFja2V0IGFuZCBvdGhlciB0cmFuc2ZlciBjaGFyYWN0ZXJpc3RpY3MgdmFyeSBieSBzcGVlZC4gKi8KKyNkZWZpbmUgZXBfZGVzYyhnLGhzLGZzKSAoKChnKS0+c3BlZWQ9PVVTQl9TUEVFRF9ISUdIKT8oaHMpOihmcykpCisKKyNlbHNlCisKKy8qIGlmIHRoZXJlJ3Mgbm8gaGlnaCBzcGVlZCBzdXBwb3J0LCBtYXhwYWNrZXQgZG9lc24ndCBjaGFuZ2UuICovCisjZGVmaW5lIGVwX2Rlc2MoZyxocyxmcykgZnMKKworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBoc19zdWJzZXRfZGVzY3JpcHRvcnModm9pZCkKK3sKK30KKworI2VuZGlmCS8qICFDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogZGVzY3JpcHRvcnMgdGhhdCBhcmUgYnVpbHQgb24tZGVtYW5kICovCisKK3N0YXRpYyBjaGFyCQkJCW1hbnVmYWN0dXJlciBbNTBdOworc3RhdGljIGNoYXIJCQkJcHJvZHVjdF9kZXNjIFs0MF0gPSBEUklWRVJfREVTQzsKKworI2lmZGVmCURFVl9DT05GSUdfQ0RDCisvKiBhZGRyZXNzIHRoYXQgdGhlIGhvc3Qgd2lsbCB1c2UgLi4uIHVzdWFsbHkgYXNzaWduZWQgYXQgcmFuZG9tICovCitzdGF0aWMgY2hhcgkJCQlldGhhZGRyIFsyICogRVRIX0FMRU4gKyAxXTsKKyNlbmRpZgorCisvKiBzdGF0aWMgc3RyaW5ncywgaW4gVVRGLTggKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX3N0cmluZwkJc3RyaW5ncyBbXSA9IHsKKwl7IFNUUklOR19NQU5VRkFDVFVSRVIsCW1hbnVmYWN0dXJlciwgfSwKKwl7IFNUUklOR19QUk9EVUNULAlwcm9kdWN0X2Rlc2MsIH0sCisJeyBTVFJJTkdfREFUQSwJCSJFdGhlcm5ldCBEYXRhIiwgfSwKKyNpZmRlZglERVZfQ09ORklHX0NEQworCXsgU1RSSU5HX0NEQywJCSJDREMgRXRoZXJuZXQiLCB9LAorCXsgU1RSSU5HX0VUSEFERFIsCWV0aGFkZHIsIH0sCisJeyBTVFJJTkdfQ09OVFJPTCwJIkNEQyBDb21tdW5pY2F0aW9ucyBDb250cm9sIiwgfSwKKyNlbmRpZgorI2lmZGVmCURFVl9DT05GSUdfU1VCU0VUCisJeyBTVFJJTkdfU1VCU0VULAkiQ0RDIEV0aGVybmV0IFN1YnNldCIsIH0sCisjZW5kaWYKKyNpZmRlZglDT05GSUdfVVNCX0VUSF9STkRJUworCXsgU1RSSU5HX1JORElTLAkJIlJORElTIiwgfSwKKwl7IFNUUklOR19STkRJU19DT05UUk9MLAkiUk5ESVMgQ29tbXVuaWNhdGlvbnMgQ29udHJvbCIsIH0sCisjZW5kaWYKKwl7ICB9CQkvKiBlbmQgb2YgbGlzdCAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MJc3RyaW5ndGFiID0geworCS5sYW5ndWFnZQk9IDB4MDQwOSwJLyogZW4tdXMgKi8KKwkuc3RyaW5ncwk9IHN0cmluZ3MsCit9OworCisvKgorICogb25lIGNvbmZpZywgdHdvIGludGVyZmFjZXM6ICBjb250cm9sLCBkYXRhLgorICogY29tcGxpY2F0aW9uczogY2xhc3MgZGVzY3JpcHRvcnMsIGFuZCBhbiBhbHRzZXR0aW5nLgorICovCitzdGF0aWMgaW50Citjb25maWdfYnVmIChlbnVtIHVzYl9kZXZpY2Vfc3BlZWQgc3BlZWQsCisJdTggKmJ1ZiwgdTggdHlwZSwKKwl1bnNpZ25lZCBpbmRleCwgaW50IGlzX290ZykKK3sKKwlpbnQJCQkJCWxlbjsKKwljb25zdCBzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yCSpjb25maWc7CisJY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlcgkqKmZ1bmN0aW9uOworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCWludAkJCQlocyA9IChzcGVlZCA9PSBVU0JfU1BFRURfSElHSCk7CisKKwlpZiAodHlwZSA9PSBVU0JfRFRfT1RIRVJfU1BFRURfQ09ORklHKQorCQlocyA9ICFoczsKKyNkZWZpbmUgd2hpY2hfZm4odCkJKGhzID8gaHNfICMjIHQgIyMgX2Z1bmN0aW9uIDogZnNfICMjIHQgIyMgX2Z1bmN0aW9uKQorI2Vsc2UKKyNkZWZpbmUJd2hpY2hfZm4odCkJKGZzXyAjIyB0ICMjIF9mdW5jdGlvbikKKyNlbmRpZgorCisJaWYgKGluZGV4ID49IGRldmljZV9kZXNjLmJOdW1Db25maWd1cmF0aW9ucykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKyNpZmRlZglDT05GSUdfVVNCX0VUSF9STkRJUworCS8qIGxpc3QgdGhlIFJORElTIGNvbmZpZyBmaXJzdCwgdG8gbWFrZSBNaWNyb3NvZnQncyBkcml2ZXJzCisJICogaGFwcHkuIERPQ1NJUyAxLjAgbmVlZHMgdGhpcyB0b28uCisJICovCisJaWYgKGRldmljZV9kZXNjLmJOdW1Db25maWd1cmF0aW9ucyA9PSAyICYmIGluZGV4ID09IDApIHsKKwkJY29uZmlnID0gJnJuZGlzX2NvbmZpZzsKKwkJZnVuY3Rpb24gPSB3aGljaF9mbiAocm5kaXMpOworCX0gZWxzZQorI2VuZGlmCisJeworCQljb25maWcgPSAmZXRoX2NvbmZpZzsKKwkJZnVuY3Rpb24gPSB3aGljaF9mbiAoZXRoKTsKKwl9CisKKwkvKiBmb3Igbm93LCBkb24ndCBhZHZlcnRpc2Ugc3JwLW9ubHkgZGV2aWNlcyAqLworCWlmICghaXNfb3RnKQorCQlmdW5jdGlvbisrOworCisJbGVuID0gdXNiX2dhZGdldF9jb25maWdfYnVmIChjb25maWcsIGJ1ZiwgVVNCX0JVRlNJWiwgZnVuY3Rpb24pOworCWlmIChsZW4gPCAwKQorCQlyZXR1cm4gbGVuOworCSgoc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvciAqKSBidWYpLT5iRGVzY3JpcHRvclR5cGUgPSB0eXBlOworCXJldHVybiBsZW47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIGV0aF9zdGFydCAoc3RydWN0IGV0aF9kZXYgKmRldiwgaW50IGdmcF9mbGFncyk7CitzdGF0aWMgaW50IGFsbG9jX3JlcXVlc3RzIChzdHJ1Y3QgZXRoX2RldiAqZGV2LCB1bnNpZ25lZCBuLCBpbnQgZ2ZwX2ZsYWdzKTsKKworI2lmZGVmCURFVl9DT05GSUdfQ0RDCitzdGF0aWMgaW5saW5lIGludCBldGhlcl9hbHRfZXBfc2V0dXAgKHN0cnVjdCBldGhfZGV2ICpkZXYsIHN0cnVjdCB1c2JfZXAgKmVwKQoreworCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqZDsKKworCS8qIFdpdGggQ0RDLCAgdGhlIGhvc3QgaXNuJ3QgYWxsb3dlZCB0byB1c2UgdGhlc2UgdHdvIGRhdGEKKwkgKiBlbmRwb2ludHMgaW4gdGhlIGRlZmF1bHQgYWx0c2V0dGluZyBmb3IgdGhlIGludGVyZmFjZS4KKwkgKiBzbyB3ZSBkb24ndCBhY3RpdmF0ZSB0aGVtIHlldC4gIFJlc2V0IGZyb20gU0VUX0lOVEVSRkFDRS4KKwkgKgorCSAqIFN0cmljdGx5IHNwZWFraW5nIFJORElTIHNob3VsZCB3b3JrIHRoZSBzYW1lOiBhY3RpdmF0aW9uIGlzCisJICogYSBzaWRlIGVmZmVjdCBvZiBzZXR0aW5nIGEgcGFja2V0IGZpbHRlci4gIERlYWN0aXZhdGlvbiBpcworCSAqIGZyb20gUkVNT1RFX05ESVNfSEFMVF9NU0csIHJlc2V0IGZyb20gUkVNT1RFX05ESVNfUkVTRVRfTVNHLgorCSAqLworCisJLyogb25lIGVuZHBvaW50IHdyaXRlcyBkYXRhIGJhY2sgSU4gdG8gdGhlIGhvc3QgKi8KKwlpZiAoc3RyY21wIChlcC0+bmFtZSwgRVBfSU5fTkFNRSkgPT0gMCkgeworCQlkID0gZXBfZGVzYyAoZGV2LT5nYWRnZXQsICZoc19zb3VyY2VfZGVzYywgJmZzX3NvdXJjZV9kZXNjKTsKKwkJZXAtPmRyaXZlcl9kYXRhID0gZGV2OworCQlkZXYtPmluID0gZDsKKworCS8qIG9uZSBlbmRwb2ludCBqdXN0IHJlYWRzIE9VVCBwYWNrZXRzICovCisJfSBlbHNlIGlmIChzdHJjbXAgKGVwLT5uYW1lLCBFUF9PVVRfTkFNRSkgPT0gMCkgeworCQlkID0gZXBfZGVzYyAoZGV2LT5nYWRnZXQsICZoc19zaW5rX2Rlc2MsICZmc19zaW5rX2Rlc2MpOworCQllcC0+ZHJpdmVyX2RhdGEgPSBkZXY7CisJCWRldi0+b3V0ID0gZDsKKworCS8qIG9wdGlvbmFsIHN0YXR1cy9ub3RpZmljYXRpb24gZW5kcG9pbnQgKi8KKwl9IGVsc2UgaWYgKEVQX1NUQVRVU19OQU1FICYmCisJCQlzdHJjbXAgKGVwLT5uYW1lLCBFUF9TVEFUVVNfTkFNRSkgPT0gMCkgeworCQlpbnQJCQlyZXN1bHQ7CisKKwkJZCA9IGVwX2Rlc2MgKGRldi0+Z2FkZ2V0LCAmaHNfc3RhdHVzX2Rlc2MsICZmc19zdGF0dXNfZGVzYyk7CisJCXJlc3VsdCA9IHVzYl9lcF9lbmFibGUgKGVwLCBkKTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlyZXR1cm4gcmVzdWx0OworCisJCWVwLT5kcml2ZXJfZGF0YSA9IGRldjsKKwkJZGV2LT5zdGF0dXMgPSBkOworCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisjaWYJZGVmaW5lZChERVZfQ09ORklHX1NVQlNFVCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX0VUSF9STkRJUykKK3N0YXRpYyBpbmxpbmUgaW50IGV0aGVyX2VwX3NldHVwIChzdHJ1Y3QgZXRoX2RldiAqZGV2LCBzdHJ1Y3QgdXNiX2VwICplcCkKK3sKKwlpbnQJCQkJCXJlc3VsdDsKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmQ7CisKKwkvKiBDREMgc3Vic2V0IGlzIHNpbXBsZXI6ICBpZiB0aGUgZGV2aWNlIGlzIHRoZXJlLAorCSAqIGl0J3MgbGl2ZSB3aXRoIHJ4IGFuZCB0eCBlbmRwb2ludHMuCisJICoKKwkgKiBEbyB0aGlzIGFzIGEgc2hvcnRjdXQgZm9yIFJORElTIHRvby4KKwkgKi8KKworCS8qIG9uZSBlbmRwb2ludCB3cml0ZXMgZGF0YSBiYWNrIElOIHRvIHRoZSBob3N0ICovCisJaWYgKHN0cmNtcCAoZXAtPm5hbWUsIEVQX0lOX05BTUUpID09IDApIHsKKwkJZCA9IGVwX2Rlc2MgKGRldi0+Z2FkZ2V0LCAmaHNfc291cmNlX2Rlc2MsICZmc19zb3VyY2VfZGVzYyk7CisJCXJlc3VsdCA9IHVzYl9lcF9lbmFibGUgKGVwLCBkKTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlyZXR1cm4gcmVzdWx0OworCisJCWVwLT5kcml2ZXJfZGF0YSA9IGRldjsKKwkJZGV2LT5pbiA9IGQ7CisKKwkvKiBvbmUgZW5kcG9pbnQganVzdCByZWFkcyBPVVQgcGFja2V0cyAqLworCX0gZWxzZSBpZiAoc3RyY21wIChlcC0+bmFtZSwgRVBfT1VUX05BTUUpID09IDApIHsKKwkJZCA9IGVwX2Rlc2MgKGRldi0+Z2FkZ2V0LCAmaHNfc2lua19kZXNjLCAmZnNfc2lua19kZXNjKTsKKwkJcmVzdWx0ID0gdXNiX2VwX2VuYWJsZSAoZXAsIGQpOworCQlpZiAocmVzdWx0IDwgMCkKKwkJCXJldHVybiByZXN1bHQ7CisKKwkJZXAtPmRyaXZlcl9kYXRhID0gZGV2OworCQlkZXYtPm91dCA9IGQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludAorc2V0X2V0aGVyX2NvbmZpZyAoc3RydWN0IGV0aF9kZXYgKmRldiwgaW50IGdmcF9mbGFncykKK3sKKwlpbnQJCQlyZXN1bHQgPSAwOworCXN0cnVjdCB1c2JfZXAJCSplcDsKKwlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0ID0gZGV2LT5nYWRnZXQ7CisKKwlnYWRnZXRfZm9yX2VhY2hfZXAgKGVwLCBnYWRnZXQpIHsKKyNpZmRlZglERVZfQ09ORklHX0NEQworCQlpZiAoIWRldi0+cm5kaXMgJiYgZGV2LT5jZGMpIHsKKwkJCXJlc3VsdCA9IGV0aGVyX2FsdF9lcF9zZXR1cCAoZGV2LCBlcCk7CisJCQlpZiAocmVzdWx0ID09IDApCisJCQkJY29udGludWU7CisJCX0KKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX1VTQl9FVEhfUk5ESVMKKwkJaWYgKGRldi0+cm5kaXMgJiYgc3RyY21wIChlcC0+bmFtZSwgRVBfU1RBVFVTX05BTUUpID09IDApIHsKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqZDsKKwkJCWQgPSBlcF9kZXNjIChnYWRnZXQsICZoc19zdGF0dXNfZGVzYywgJmZzX3N0YXR1c19kZXNjKTsKKwkJCXJlc3VsdCA9IHVzYl9lcF9lbmFibGUgKGVwLCBkKTsKKwkJCWlmIChyZXN1bHQgPT0gMCkgeworCQkJCWVwLT5kcml2ZXJfZGF0YSA9IGRldjsKKwkJCQlkZXYtPnN0YXR1cyA9IGQ7CisJCQkJY29udGludWU7CisJCQl9CisJCX0gZWxzZQorI2VuZGlmCisKKwkJeworI2lmCWRlZmluZWQoREVWX0NPTkZJR19TVUJTRVQpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9FVEhfUk5ESVMpCisJCQlyZXN1bHQgPSBldGhlcl9lcF9zZXR1cCAoZGV2LCBlcCk7CisJCQlpZiAocmVzdWx0ID09IDApCisJCQkJY29udGludWU7CisjZW5kaWYKKwkJfQorCisJCS8qIHN0b3Agb24gZXJyb3IgKi8KKwkJRVJST1IgKGRldiwgImNhbid0IGVuYWJsZSAlcywgcmVzdWx0ICVkXG4iLCBlcC0+bmFtZSwgcmVzdWx0KTsKKwkJYnJlYWs7CisJfQorCWlmICghcmVzdWx0ICYmICghZGV2LT5pbl9lcCB8fCAhZGV2LT5vdXRfZXApKQorCQlyZXN1bHQgPSAtRU5PREVWOworCisJaWYgKHJlc3VsdCA9PSAwKQorCQlyZXN1bHQgPSBhbGxvY19yZXF1ZXN0cyAoZGV2LCBxbGVuIChnYWRnZXQpLCBnZnBfZmxhZ3MpOworCisJLyogb24gZXJyb3IsIGRpc2FibGUgYW55IGVuZHBvaW50cyAgKi8KKwlpZiAocmVzdWx0IDwgMCkgeworI2lmIGRlZmluZWQoREVWX0NPTkZJR19DREMpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9FVEhfUk5ESVMpCisJCWlmIChkZXYtPnN0YXR1cykKKwkJCSh2b2lkKSB1c2JfZXBfZGlzYWJsZSAoZGV2LT5zdGF0dXNfZXApOworI2VuZGlmCisJCWRldi0+c3RhdHVzID0gTlVMTDsKKyNpZiBkZWZpbmVkKERFVl9DT05GSUdfU1VCU0VUKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfRVRIX1JORElTKQorCQlpZiAoZGV2LT5ybmRpcyB8fCAhZGV2LT5jZGMpIHsKKwkJCWlmIChkZXYtPmluKQorCQkJCSh2b2lkKSB1c2JfZXBfZGlzYWJsZSAoZGV2LT5pbl9lcCk7CisJCQlpZiAoZGV2LT5vdXQpCisJCQkJKHZvaWQpIHVzYl9lcF9kaXNhYmxlIChkZXYtPm91dF9lcCk7CisJCX0KKyNlbmRpZgorCQlkZXYtPmluID0gTlVMTDsKKwkJZGV2LT5vdXQgPSBOVUxMOworCX0gZWxzZQorCisJLyogYWN0aXZhdGUgbm9uLUNEQyBjb25maWdzIHJpZ2h0IGF3YXkKKwkgKiB0aGlzIGlzbid0IHN0cmljdGx5IGFjY29yZGluZyB0byB0aGUgUk5ESVMgc3BlYworCSAqLworI2lmIGRlZmluZWQoREVWX0NPTkZJR19TVUJTRVQpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9FVEhfUk5ESVMpCisJaWYgKGRldi0+cm5kaXMgfHwgIWRldi0+Y2RjKSB7CisJCW5ldGlmX2NhcnJpZXJfb24gKGRldi0+bmV0KTsKKwkJaWYgKG5ldGlmX3J1bm5pbmcgKGRldi0+bmV0KSkgeworCQkJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOworCQkJZXRoX3N0YXJ0IChkZXYsIEdGUF9BVE9NSUMpOworCQkJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKKwkJfQorCX0KKyNlbmRpZgorCisJaWYgKHJlc3VsdCA9PSAwKQorCQlERUJVRyAoZGV2LCAicWxlbiAlZFxuIiwgcWxlbiAoZ2FkZ2V0KSk7CisKKwkvKiBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFudXAgb24gZXJyb3IgKi8KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBldGhfcmVzZXRfY29uZmlnIChzdHJ1Y3QgZXRoX2RldiAqZGV2KQoreworCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxOworCisJaWYgKGRldi0+Y29uZmlnID09IDApCisJCXJldHVybjsKKworCURFQlVHIChkZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCW5ldGlmX3N0b3BfcXVldWUgKGRldi0+bmV0KTsKKwluZXRpZl9jYXJyaWVyX29mZiAoZGV2LT5uZXQpOworCisJLyogZGlzYWJsZSBlbmRwb2ludHMsIGZvcmNpbmcgKHN5bmNocm9ub3VzKSBjb21wbGV0aW9uIG9mCisJICogcGVuZGluZyBpL28uICB0aGVuIGZyZWUgdGhlIHJlcXVlc3RzLgorCSAqLworCWlmIChkZXYtPmluKSB7CisJCXVzYl9lcF9kaXNhYmxlIChkZXYtPmluX2VwKTsKKwkJd2hpbGUgKGxpa2VseSAoIWxpc3RfZW1wdHkgKCZkZXYtPnR4X3JlcXMpKSkgeworCQkJcmVxID0gY29udGFpbmVyX29mIChkZXYtPnR4X3JlcXMubmV4dCwKKwkJCQkJCXN0cnVjdCB1c2JfcmVxdWVzdCwgbGlzdCk7CisJCQlsaXN0X2RlbCAoJnJlcS0+bGlzdCk7CisJCQl1c2JfZXBfZnJlZV9yZXF1ZXN0IChkZXYtPmluX2VwLCByZXEpOworCQl9CisJfQorCWlmIChkZXYtPm91dCkgeworCQl1c2JfZXBfZGlzYWJsZSAoZGV2LT5vdXRfZXApOworCQl3aGlsZSAobGlrZWx5ICghbGlzdF9lbXB0eSAoJmRldi0+cnhfcmVxcykpKSB7CisJCQlyZXEgPSBjb250YWluZXJfb2YgKGRldi0+cnhfcmVxcy5uZXh0LAorCQkJCQkJc3RydWN0IHVzYl9yZXF1ZXN0LCBsaXN0KTsKKwkJCWxpc3RfZGVsICgmcmVxLT5saXN0KTsKKwkJCXVzYl9lcF9mcmVlX3JlcXVlc3QgKGRldi0+b3V0X2VwLCByZXEpOworCQl9CisJfQorCisJaWYgKGRldi0+c3RhdHVzKSB7CisJCXVzYl9lcF9kaXNhYmxlIChkZXYtPnN0YXR1c19lcCk7CisJfQorCWRldi0+Y29uZmlnID0gMDsKK30KKworLyogY2hhbmdlIG91ciBvcGVyYXRpb25hbCBjb25maWcuICBtdXN0IGFncmVlIHdpdGggdGhlIGNvZGUKKyAqIHRoYXQgcmV0dXJucyBjb25maWcgZGVzY3JpcHRvcnMsIGFuZCBhbHRzZXR0aW5nIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQKK2V0aF9zZXRfY29uZmlnIChzdHJ1Y3QgZXRoX2RldiAqZGV2LCB1bnNpZ25lZCBudW1iZXIsIGludCBnZnBfZmxhZ3MpCit7CisJaW50CQkJcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0ID0gZGV2LT5nYWRnZXQ7CisKKwlpZiAobnVtYmVyID09IGRldi0+Y29uZmlnKQorCQlyZXR1cm4gMDsKKworCWlmIChnYWRnZXRfaXNfc2ExMTAwIChnYWRnZXQpCisJCQkmJiBkZXYtPmNvbmZpZworCQkJJiYgYXRvbWljX3JlYWQgKCZkZXYtPnR4X3FsZW4pICE9IDApIHsKKwkJLyogdHggZmlmbyBpcyBmdWxsLCBidXQgd2UgY2FuJ3QgY2xlYXIgaXQuLi4qLworCQlJTkZPIChkZXYsICJjYW4ndCBjaGFuZ2UgY29uZmlndXJhdGlvbnNcbiIpOworCQlyZXR1cm4gLUVTUElQRTsKKwl9CisJZXRoX3Jlc2V0X2NvbmZpZyAoZGV2KTsKKworCS8qIGRlZmF1bHQ6ICBwYXNzIGFsbCBwYWNrZXRzLCBubyBtdWx0aWNhc3QgZmlsdGVyaW5nICovCisJZGV2LT5jZGNfZmlsdGVyID0gMHgwMDBmOworCisJc3dpdGNoIChudW1iZXIpIHsKKwljYXNlIERFVl9DT05GSUdfVkFMVUU6CisJCWRldi0+cm5kaXMgPSAwOworCQlyZXN1bHQgPSBzZXRfZXRoZXJfY29uZmlnIChkZXYsIGdmcF9mbGFncyk7CisJCWJyZWFrOworI2lmZGVmCUNPTkZJR19VU0JfRVRIX1JORElTCisJY2FzZSBERVZfUk5ESVNfQ09ORklHX1ZBTFVFOgorCQlkZXYtPnJuZGlzID0gMTsKKwkJcmVzdWx0ID0gc2V0X2V0aGVyX2NvbmZpZyAoZGV2LCBnZnBfZmxhZ3MpOworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCS8qIEZBTEwgVEhST1VHSCAqLworCWNhc2UgMDoKKwkJYnJlYWs7CisJfQorCisJaWYgKHJlc3VsdCkgeworCQlpZiAobnVtYmVyKQorCQkJZXRoX3Jlc2V0X2NvbmZpZyAoZGV2KTsKKwkJdXNiX2dhZGdldF92YnVzX2RyYXcoZGV2LT5nYWRnZXQsCisJCQkJZGV2LT5nYWRnZXQtPmlzX290ZyA/IDggOiAxMDApOworCX0gZWxzZSB7CisJCWNoYXIgKnNwZWVkOworCQl1bnNpZ25lZCBwb3dlcjsKKworCQlwb3dlciA9IDIgKiBldGhfY29uZmlnLmJNYXhQb3dlcjsKKwkJdXNiX2dhZGdldF92YnVzX2RyYXcoZGV2LT5nYWRnZXQsIHBvd2VyKTsKKworCQlzd2l0Y2ggKGdhZGdldC0+c3BlZWQpIHsKKwkJY2FzZSBVU0JfU1BFRURfRlVMTDoJc3BlZWQgPSAiZnVsbCI7IGJyZWFrOworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCQljYXNlIFVTQl9TUEVFRF9ISUdIOglzcGVlZCA9ICJoaWdoIjsgYnJlYWs7CisjZW5kaWYKKwkJZGVmYXVsdDogCQlzcGVlZCA9ICI/IjsgYnJlYWs7CisJCX0KKworCQlkZXYtPmNvbmZpZyA9IG51bWJlcjsKKwkJSU5GTyAoZGV2LCAiJXMgc3BlZWQgY29uZmlnICMlZDogJWQgbUEsICVzLCB1c2luZyAlc1xuIiwKKwkJCQlzcGVlZCwgbnVtYmVyLCBwb3dlciwgZHJpdmVyX2Rlc2MsCisJCQkJZGV2LT5ybmRpcworCQkJCQk/ICJSTkRJUyIKKwkJCQkJOiAoZGV2LT5jZGMKKwkJCQkJCT8gIkNEQyBFdGhlcm5ldCIKKwkJCQkJCTogIkNEQyBFdGhlcm5ldCBTdWJzZXQiKSk7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZglERVZfQ09ORklHX0NEQworCitzdGF0aWMgdm9pZCBldGhfc3RhdHVzX2NvbXBsZXRlIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IHVzYl9jZGNfbm90aWZpY2F0aW9uCSpldmVudCA9IHJlcS0+YnVmOworCWludAkJCQl2YWx1ZSA9IHJlcS0+c3RhdHVzOworCXN0cnVjdCBldGhfZGV2CQkJKmRldiA9IGVwLT5kcml2ZXJfZGF0YTsKKworCS8qIGlzc3VlIHRoZSBzZWNvbmQgbm90aWZpY2F0aW9uIGlmIGhvc3QgcmVhZHMgdGhlIGZpcnN0ICovCisJaWYgKGV2ZW50LT5iTm90aWZpY2F0aW9uVHlwZSA9PSBVU0JfQ0RDX05PVElGWV9ORVRXT1JLX0NPTk5FQ1RJT04KKwkJCSYmIHZhbHVlID09IDApIHsKKwkJX19sZTMyCSpkYXRhID0gcmVxLT5idWYgKyBzaXplb2YgKmV2ZW50OworCisJCWV2ZW50LT5ibVJlcXVlc3RUeXBlID0gMHhBMTsKKwkJZXZlbnQtPmJOb3RpZmljYXRpb25UeXBlID0gVVNCX0NEQ19OT1RJRllfU1BFRURfQ0hBTkdFOworCQlldmVudC0+d1ZhbHVlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMCk7CisJCWV2ZW50LT53SW5kZXggPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgxKTsKKwkJZXZlbnQtPndMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICg4KTsKKworCQkvKiBTUEVFRF9DSEFOR0UgZGF0YSBpcyB1cC9kb3duIHNwZWVkcyBpbiBiaXRzL3NlYyAqLworCQlkYXRhIFswXSA9IGRhdGEgWzFdID0gY3B1X3RvX2xlMzIgKEJJVFJBVEUgKGRldi0+Z2FkZ2V0KSk7CisKKwkJcmVxLT5sZW5ndGggPSBTVEFUVVNfQllURUNPVU5UOworCQl2YWx1ZSA9IHVzYl9lcF9xdWV1ZSAoZXAsIHJlcSwgR0ZQX0FUT01JQyk7CisJCURFQlVHIChkZXYsICJzZW5kIFNQRUVEX0NIQU5HRSAtLT4gJWRcbiIsIHZhbHVlKTsKKwkJaWYgKHZhbHVlID09IDApCisJCQlyZXR1cm47CisJfSBlbHNlIGlmICh2YWx1ZSAhPSAtRUNPTk5SRVNFVCkKKwkJREVCVUcgKGRldiwgImV2ZW50ICUwMnggLS0+ICVkXG4iLAorCQkJZXZlbnQtPmJOb3RpZmljYXRpb25UeXBlLCB2YWx1ZSk7CisJZXZlbnQtPmJtUmVxdWVzdFR5cGUgPSAweGZmOworfQorCitzdGF0aWMgdm9pZCBpc3N1ZV9zdGFydF9zdGF0dXMgKHN0cnVjdCBldGhfZGV2ICpkZXYpCit7CisJc3RydWN0IHVzYl9yZXF1ZXN0CQkqcmVxID0gZGV2LT5zdGF0X3JlcTsKKwlzdHJ1Y3QgdXNiX2NkY19ub3RpZmljYXRpb24JKmV2ZW50OworCWludAkJCQl2YWx1ZTsKKyAKKwlERUJVRyAoZGV2LCAiJXMsIGZsdXNoIG9sZCBzdGF0dXMgZmlyc3RcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBmbHVzaCBvbGQgc3RhdHVzCisJICoKKwkgKiBGSVhNRSB1Z2x5IGlkaW9tLCBtYXliZSB3ZSdkIGJlIGJldHRlciB3aXRoIGp1c3QKKwkgKiBhICJjYW5jZWwgdGhlIHdob2xlIHF1ZXVlIiBwcmltaXRpdmUgc2luY2UgYW55CisJICogdW5saW5rLW9uZSBwcmltaXRpdmUgaGFzIHdheSB0b28gbWFueSBlcnJvciBtb2Rlcy4KKwkgKiBoZXJlLCB3ZSAia25vdyIgdG9nZ2xlIGlzIGFscmVhZHkgY2xlYXIuLi4KKwkgKi8KKwl1c2JfZXBfZGlzYWJsZSAoZGV2LT5zdGF0dXNfZXApOworCXVzYl9lcF9lbmFibGUgKGRldi0+c3RhdHVzX2VwLCBkZXYtPnN0YXR1cyk7CisKKwkvKiAzLjguMSBzYXlzIHRvIGlzc3VlIGZpcnN0IE5FVFdPUktfQ09OTkVDVElPTiwgdGhlbgorCSAqIGEgU1BFRURfQ0hBTkdFLiAgY291bGQgYmUgdXNlZnVsIGluIHNvbWUgY29uZmlncy4KKwkgKi8KKwlldmVudCA9IHJlcS0+YnVmOworCWV2ZW50LT5ibVJlcXVlc3RUeXBlID0gMHhBMTsKKwlldmVudC0+Yk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX05PVElGWV9ORVRXT1JLX0NPTk5FQ1RJT047CisJZXZlbnQtPndWYWx1ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDEpOwkvKiBjb25uZWN0ZWQgKi8KKwlldmVudC0+d0luZGV4ID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMSk7CisJZXZlbnQtPndMZW5ndGggPSAwOworCisJcmVxLT5sZW5ndGggPSBzaXplb2YgKmV2ZW50OworCXJlcS0+Y29tcGxldGUgPSBldGhfc3RhdHVzX2NvbXBsZXRlOworCXZhbHVlID0gdXNiX2VwX3F1ZXVlIChkZXYtPnN0YXR1c19lcCwgcmVxLCBHRlBfQVRPTUlDKTsKKwlpZiAodmFsdWUgPCAwKQorCQlERUJVRyAoZGV2LCAic3RhdHVzIGJ1ZiBxdWV1ZSAtLT4gJWRcbiIsIHZhbHVlKTsKK30KKworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIGV0aF9zZXR1cF9jb21wbGV0ZSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCWlmIChyZXEtPnN0YXR1cyB8fCByZXEtPmFjdHVhbCAhPSByZXEtPmxlbmd0aCkKKwkJREVCVUcgKChzdHJ1Y3QgZXRoX2RldiAqKSBlcC0+ZHJpdmVyX2RhdGEsCisJCQkJInNldHVwIGNvbXBsZXRlIC0tPiAlZCwgJWQvJWRcbiIsCisJCQkJcmVxLT5zdGF0dXMsIHJlcS0+YWN0dWFsLCByZXEtPmxlbmd0aCk7Cit9CisKKyNpZmRlZiBDT05GSUdfVVNCX0VUSF9STkRJUworCitzdGF0aWMgdm9pZCBybmRpc19yZXNwb25zZV9jb21wbGV0ZSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCWlmIChyZXEtPnN0YXR1cyB8fCByZXEtPmFjdHVhbCAhPSByZXEtPmxlbmd0aCkKKwkJREVCVUcgKChzdHJ1Y3QgZXRoX2RldiAqKSBlcC0+ZHJpdmVyX2RhdGEsCisJCQkicm5kaXMgcmVzcG9uc2UgY29tcGxldGUgLS0+ICVkLCAlZC8lZFxuIiwKKwkJCXJlcS0+c3RhdHVzLCByZXEtPmFjdHVhbCwgcmVxLT5sZW5ndGgpOworCisJLyogZG9uZSBzZW5kaW5nIGFmdGVyIFVTQl9DRENfR0VUX0VOQ0FQU1VMQVRFRF9SRVNQT05TRSAqLworfQorCitzdGF0aWMgdm9pZCBybmRpc19jb21tYW5kX2NvbXBsZXRlIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGV0aF9kZXYgICAgICAgICAgKmRldiA9IGVwLT5kcml2ZXJfZGF0YTsKKwlpbnQJCQlzdGF0dXM7CisJCisJLyogcmVjZWl2ZWQgUk5ESVMgY29tbWFuZCBmcm9tIFVTQl9DRENfU0VORF9FTkNBUFNVTEFURURfQ09NTUFORCAqLworCXNwaW5fbG9jaygmZGV2LT5sb2NrKTsKKwlzdGF0dXMgPSBybmRpc19tc2dfcGFyc2VyIChkZXYtPnJuZGlzX2NvbmZpZywgKHU4ICopIHJlcS0+YnVmKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJRVJST1IoZGV2LCAiJXM6IHJuZGlzIHBhcnNlIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJc3Bpbl91bmxvY2soJmRldi0+bG9jayk7Cit9CisKKyNlbmRpZgkvKiBSTkRJUyAqLworCisvKgorICogVGhlIHNldHVwKCkgY2FsbGJhY2sgaW1wbGVtZW50cyBhbGwgdGhlIGVwMCBmdW5jdGlvbmFsaXR5IHRoYXQncyBub3QKKyAqIGhhbmRsZWQgbG93ZXIgZG93bi4gIENEQyBoYXMgYSBudW1iZXIgb2YgbGVzcy1jb21tb24gZmVhdHVyZXM6CisgKgorICogIC0gdHdvIGludGVyZmFjZXM6ICBjb250cm9sLCBhbmQgZXRoZXJuZXQgZGF0YQorICogIC0gRXRoZXJuZXQgZGF0YSBpbnRlcmZhY2UgaGFzIHR3byBhbHRzZXR0aW5nczogIGRlZmF1bHQsIGFuZCBhY3RpdmUKKyAqICAtIGNsYXNzLXNwZWNpZmljIGRlc2NyaXB0b3JzIGZvciB0aGUgY29udHJvbCBpbnRlcmZhY2UKKyAqICAtIGNsYXNzLXNwZWNpZmljIGNvbnRyb2wgcmVxdWVzdHMKKyAqLworc3RhdGljIGludAorZXRoX3NldHVwIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LCBjb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKQoreworCXN0cnVjdCBldGhfZGV2CQkqZGV2ID0gZ2V0X2dhZGdldF9kYXRhIChnYWRnZXQpOworCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxID0gZGV2LT5yZXE7CisJaW50CQkJdmFsdWUgPSAtRU9QTk9UU1VQUDsKKwl1MTYJCQl3SW5kZXggPSBjdHJsLT53SW5kZXg7CisJdTE2CQkJd1ZhbHVlID0gY3RybC0+d1ZhbHVlOworCXUxNgkJCXdMZW5ndGggPSBjdHJsLT53TGVuZ3RoOworCisJLyogZGVzY3JpcHRvcnMganVzdCBnbyBpbnRvIHRoZSBwcmUtYWxsb2NhdGVkIGVwMCBidWZmZXIsCisJICogd2hpbGUgY29uZmlnIGNoYW5nZSBldmVudHMgbWF5IGVuYWJsZSBuZXR3b3JrIHRyYWZmaWMuCisJICovCisJcmVxLT5jb21wbGV0ZSA9IGV0aF9zZXR1cF9jb21wbGV0ZTsKKwlzd2l0Y2ggKGN0cmwtPmJSZXF1ZXN0KSB7CisKKwljYXNlIFVTQl9SRVFfR0VUX0RFU0NSSVBUT1I6CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gVVNCX0RJUl9JTikKKwkJCWJyZWFrOworCQlzd2l0Y2ggKHdWYWx1ZSA+PiA4KSB7CisKKwkJY2FzZSBVU0JfRFRfREVWSUNFOgorCQkJdmFsdWUgPSBtaW4gKHdMZW5ndGgsICh1MTYpIHNpemVvZiBkZXZpY2VfZGVzYyk7CisJCQltZW1jcHkgKHJlcS0+YnVmLCAmZGV2aWNlX2Rlc2MsIHZhbHVlKTsKKwkJCWJyZWFrOworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCQljYXNlIFVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSOgorCQkJaWYgKCFnYWRnZXQtPmlzX2R1YWxzcGVlZCkKKwkJCQlicmVhazsKKwkJCXZhbHVlID0gbWluICh3TGVuZ3RoLCAodTE2KSBzaXplb2YgZGV2X3F1YWxpZmllcik7CisJCQltZW1jcHkgKHJlcS0+YnVmLCAmZGV2X3F1YWxpZmllciwgdmFsdWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBVU0JfRFRfT1RIRVJfU1BFRURfQ09ORklHOgorCQkJaWYgKCFnYWRnZXQtPmlzX2R1YWxzcGVlZCkKKwkJCQlicmVhazsKKwkJCS8vIEZBTExUSFJPVUdICisjZW5kaWYgLyogQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEICovCisJCWNhc2UgVVNCX0RUX0NPTkZJRzoKKwkJCXZhbHVlID0gY29uZmlnX2J1ZiAoZ2FkZ2V0LT5zcGVlZCwgcmVxLT5idWYsCisJCQkJCXdWYWx1ZSA+PiA4LAorCQkJCQl3VmFsdWUgJiAweGZmLAorCQkJCQlnYWRnZXQtPmlzX290Zyk7CisJCQlpZiAodmFsdWUgPj0gMCkKKwkJCQl2YWx1ZSA9IG1pbiAod0xlbmd0aCwgKHUxNikgdmFsdWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBVU0JfRFRfU1RSSU5HOgorCQkJdmFsdWUgPSB1c2JfZ2FkZ2V0X2dldF9zdHJpbmcgKCZzdHJpbmd0YWIsCisJCQkJCXdWYWx1ZSAmIDB4ZmYsIHJlcS0+YnVmKTsKKwkJCWlmICh2YWx1ZSA+PSAwKQorCQkJCXZhbHVlID0gbWluICh3TGVuZ3RoLCAodTE2KSB2YWx1ZSk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWNhc2UgVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTjoKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAwKQorCQkJYnJlYWs7CisJCWlmIChnYWRnZXQtPmFfaG5wX3N1cHBvcnQpCisJCQlERUJVRyAoZGV2LCAiSE5QIGF2YWlsYWJsZVxuIik7CisJCWVsc2UgaWYgKGdhZGdldC0+YV9hbHRfaG5wX3N1cHBvcnQpCisJCQlERUJVRyAoZGV2LCAiSE5QIG5lZWRzIGEgZGlmZmVyZW50IHJvb3QgcG9ydFxuIik7CisJCXNwaW5fbG9jayAoJmRldi0+bG9jayk7CisJCXZhbHVlID0gZXRoX3NldF9jb25maWcgKGRldiwgd1ZhbHVlLCBHRlBfQVRPTUlDKTsKKwkJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOworCQlicmVhazsKKwljYXNlIFVTQl9SRVFfR0VUX0NPTkZJR1VSQVRJT046CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gVVNCX0RJUl9JTikKKwkJCWJyZWFrOworCQkqKHU4ICopcmVxLT5idWYgPSBkZXYtPmNvbmZpZzsKKwkJdmFsdWUgPSBtaW4gKHdMZW5ndGgsICh1MTYpIDEpOworCQlicmVhazsKKworCWNhc2UgVVNCX1JFUV9TRVRfSU5URVJGQUNFOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IFVTQl9SRUNJUF9JTlRFUkZBQ0UKKwkJCQl8fCAhZGV2LT5jb25maWcKKwkJCQl8fCB3SW5kZXggPiAxKQorCQkJYnJlYWs7CisJCWlmICghZGV2LT5jZGMgJiYgd0luZGV4ICE9IDApCisJCQlicmVhazsKKwkJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKKworCQkvKiBQWEEgaGFyZHdhcmUgcGFydGlhbGx5IGhhbmRsZXMgU0VUX0lOVEVSRkFDRTsKKwkJICogd2UgbmVlZCB0byBrbHVnZSBhcm91bmQgdGhhdCBpbnRlcmZlcmVuY2UuCisJCSAqLworCQlpZiAoZ2FkZ2V0X2lzX3B4YSAoZ2FkZ2V0KSkgeworCQkJdmFsdWUgPSBldGhfc2V0X2NvbmZpZyAoZGV2LCBERVZfQ09ORklHX1ZBTFVFLAorCQkJCQkJR0ZQX0FUT01JQyk7CisJCQlnb3RvIGRvbmVfc2V0X2ludGY7CisJCX0KKworI2lmZGVmIERFVl9DT05GSUdfQ0RDCisJCXN3aXRjaCAod0luZGV4KSB7CisJCWNhc2UgMDoJCS8qIGNvbnRyb2wvbWFzdGVyIGludGYgKi8KKwkJCWlmICh3VmFsdWUgIT0gMCkKKwkJCQlicmVhazsKKwkJCWlmIChkZXYtPnN0YXR1cykgeworCQkJCXVzYl9lcF9kaXNhYmxlIChkZXYtPnN0YXR1c19lcCk7CisJCQkJdXNiX2VwX2VuYWJsZSAoZGV2LT5zdGF0dXNfZXAsIGRldi0+c3RhdHVzKTsKKwkJCX0KKwkJCXZhbHVlID0gMDsKKwkJCWJyZWFrOworCQljYXNlIDE6CQkvKiBkYXRhIGludGYgKi8KKwkJCWlmICh3VmFsdWUgPiAxKQorCQkJCWJyZWFrOworCQkJdXNiX2VwX2Rpc2FibGUgKGRldi0+aW5fZXApOworCQkJdXNiX2VwX2Rpc2FibGUgKGRldi0+b3V0X2VwKTsKKworCQkJLyogQ0RDIHJlcXVpcmVzIHRoZSBkYXRhIHRyYW5zZmVycyBub3QgYmUgZG9uZSBmcm9tCisJCQkgKiB0aGUgZGVmYXVsdCBpbnRlcmZhY2Ugc2V0dGluZyAuLi4gYWxzbywgc2V0dGluZworCQkJICogdGhlIG5vbi1kZWZhdWx0IGludGVyZmFjZSBjbGVhcnMgZmlsdGVycyBldGMuCisJCQkgKi8KKwkJCWlmICh3VmFsdWUgPT0gMSkgeworCQkJCXVzYl9lcF9lbmFibGUgKGRldi0+aW5fZXAsIGRldi0+aW4pOworCQkJCXVzYl9lcF9lbmFibGUgKGRldi0+b3V0X2VwLCBkZXYtPm91dCk7CisJCQkJZGV2LT5jZGNfZmlsdGVyID0gREVGQVVMVF9GSUxURVI7CisJCQkJbmV0aWZfY2Fycmllcl9vbiAoZGV2LT5uZXQpOworCQkJCWlmIChkZXYtPnN0YXR1cykKKwkJCQkJaXNzdWVfc3RhcnRfc3RhdHVzIChkZXYpOworCQkJCWlmIChuZXRpZl9ydW5uaW5nIChkZXYtPm5ldCkpIHsKKwkJCQkJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOworCQkJCQlldGhfc3RhcnQgKGRldiwgR0ZQX0FUT01JQyk7CisJCQkJCXNwaW5fbG9jayAoJmRldi0+bG9jayk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQluZXRpZl9zdG9wX3F1ZXVlIChkZXYtPm5ldCk7CisJCQkJbmV0aWZfY2Fycmllcl9vZmYgKGRldi0+bmV0KTsKKwkJCX0KKwkJCXZhbHVlID0gMDsKKwkJCWJyZWFrOworCQl9CisjZWxzZQorCQkvKiBGSVhNRSB0aGlzIGlzIHdyb25nLCBhcyBpcyB0aGUgYXNzdW1wdGlvbiB0aGF0CisJCSAqIGFsbCBub24tUFhBIGhhcmR3YXJlIHRhbGtzIHJlYWwgQ0RDIC4uLgorCQkgKi8KKwkJZGV2X3dhcm4gKCZnYWRnZXQtPmRldiwgInNldF9pbnRlcmZhY2UgaWdub3JlZCFcbiIpOworI2VuZGlmIC8qIERFVl9DT05GSUdfQ0RDICovCisKK2RvbmVfc2V0X2ludGY6CisJCXNwaW5fdW5sb2NrICgmZGV2LT5sb2NrKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfUkVRX0dFVF9JTlRFUkZBQ0U6CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gKFVTQl9ESVJfSU58VVNCX1JFQ0lQX0lOVEVSRkFDRSkKKwkJCQl8fCAhZGV2LT5jb25maWcKKwkJCQl8fCB3SW5kZXggPiAxKQorCQkJYnJlYWs7CisJCWlmICghKGRldi0+Y2RjIHx8IGRldi0+cm5kaXMpICYmIHdJbmRleCAhPSAwKQorCQkJYnJlYWs7CisKKwkJLyogZm9yIENEQywgaWZmIGNhcnJpZXIgaXMgb24sIGRhdGEgaW50ZXJmYWNlIGlzIGFjdGl2ZS4gKi8KKwkJaWYgKGRldi0+cm5kaXMgfHwgd0luZGV4ICE9IDEpCisJCQkqKHU4ICopcmVxLT5idWYgPSAwOworCQllbHNlCisJCQkqKHU4ICopcmVxLT5idWYgPSBuZXRpZl9jYXJyaWVyX29rIChkZXYtPm5ldCkgPyAxIDogMDsKKwkJdmFsdWUgPSBtaW4gKHdMZW5ndGgsICh1MTYpIDEpOworCQlicmVhazsKKworI2lmZGVmIERFVl9DT05GSUdfQ0RDCisJY2FzZSBVU0JfQ0RDX1NFVF9FVEhFUk5FVF9QQUNLRVRfRklMVEVSOgorCQkvKiBzZWUgNi4yLjMwOiBubyBkYXRhLCB3SW5kZXggPSBpbnRlcmZhY2UsCisJCSAqIHdWYWx1ZSA9IHBhY2tldCBmaWx0ZXIgYml0bWFwCisJCSAqLworCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IChVU0JfVFlQRV9DTEFTU3xVU0JfUkVDSVBfSU5URVJGQUNFKQorCQkJCXx8ICFkZXYtPmNkYworCQkJCXx8IGRldi0+cm5kaXMKKwkJCQl8fCB3TGVuZ3RoICE9IDAKKwkJCQl8fCB3SW5kZXggPiAxKQorCQkJYnJlYWs7CisJCURFQlVHIChkZXYsICJwYWNrZXQgZmlsdGVyICUwMnhcbiIsIHdWYWx1ZSk7CisJCWRldi0+Y2RjX2ZpbHRlciA9IHdWYWx1ZTsKKwkJdmFsdWUgPSAwOworCQlicmVhazsKKworCS8qIGFuZCBwb3RlbnRpYWxseToKKwkgKiBjYXNlIFVTQl9DRENfU0VUX0VUSEVSTkVUX01VTFRJQ0FTVF9GSUxURVJTOgorCSAqIGNhc2UgVVNCX0NEQ19TRVRfRVRIRVJORVRfUE1fUEFUVEVSTl9GSUxURVI6CisJICogY2FzZSBVU0JfQ0RDX0dFVF9FVEhFUk5FVF9QTV9QQVRURVJOX0ZJTFRFUjoKKwkgKiBjYXNlIFVTQl9DRENfR0VUX0VUSEVSTkVUX1NUQVRJU1RJQzoKKwkgKi8KKworI2VuZGlmIC8qIERFVl9DT05GSUdfQ0RDICovCisKKyNpZmRlZiBDT05GSUdfVVNCX0VUSF9STkRJUwkJCisJLyogUk5ESVMgdXNlcyB0aGUgQ0RDIGNvbW1hbmQgZW5jYXBzdWxhdGlvbiBtZWNoYW5pc20gdG8gaW1wbGVtZW50CisJICogYW4gUlBDIHNjaGVtZSwgd2l0aCBtdWNoIGdldHRpbmcvc2V0dGluZyBvZiBhdHRyaWJ1dGVzIGJ5IE9JRC4KKwkgKi8KKwljYXNlIFVTQl9DRENfU0VORF9FTkNBUFNVTEFURURfQ09NTUFORDoKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAoVVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0lOVEVSRkFDRSkKKwkJCQl8fCAhZGV2LT5ybmRpcworCQkJCXx8IHdMZW5ndGggPiBVU0JfQlVGU0laCisJCQkJfHwgd1ZhbHVlCisJCQkJfHwgcm5kaXNfY29udHJvbF9pbnRmLmJJbnRlcmZhY2VOdW1iZXIKKwkJCQkJIT0gd0luZGV4KQorCQkJYnJlYWs7CisJCS8qIHJlYWQgdGhlIHJlcXVlc3QsIHRoZW4gcHJvY2VzcyBpdCAqLworCQl2YWx1ZSA9IHdMZW5ndGg7CisJCXJlcS0+Y29tcGxldGUgPSBybmRpc19jb21tYW5kX2NvbXBsZXRlOworCQkvKiBsYXRlciwgcm5kaXNfY29udHJvbF9hY2sgKCkgc2VuZHMgYSBub3RpZmljYXRpb24gKi8KKwkJYnJlYWs7CisJCQorCWNhc2UgVVNCX0NEQ19HRVRfRU5DQVBTVUxBVEVEX1JFU1BPTlNFOgorCQlpZiAoKFVTQl9ESVJfSU58VVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0lOVEVSRkFDRSkKKwkJCQkJPT0gY3RybC0+YlJlcXVlc3RUeXBlCisJCQkJJiYgZGV2LT5ybmRpcworCQkJCS8vICYmIHdMZW5ndGggPj0gMHgwNDAwCisJCQkJJiYgIXdWYWx1ZQorCQkJCSYmIHJuZGlzX2NvbnRyb2xfaW50Zi5iSW50ZXJmYWNlTnVtYmVyCisJCQkJCT09IHdJbmRleCkgeworCQkJdTggKmJ1ZjsKKworCQkJLyogcmV0dXJuIHRoZSByZXN1bHQgKi8KKwkJCWJ1ZiA9IHJuZGlzX2dldF9uZXh0X3Jlc3BvbnNlIChkZXYtPnJuZGlzX2NvbmZpZywKKwkJCQkJCSAgICAgICAmdmFsdWUpOworCQkJaWYgKGJ1ZikgeworCQkJCW1lbWNweSAocmVxLT5idWYsIGJ1ZiwgdmFsdWUpOworCQkJCXJlcS0+Y29tcGxldGUgPSBybmRpc19yZXNwb25zZV9jb21wbGV0ZTsKKwkJCQlybmRpc19mcmVlX3Jlc3BvbnNlKGRldi0+cm5kaXNfY29uZmlnLCBidWYpOworCQkJfQorCQkJLyogZWxzZSBzdGFsbHMgLi4uIHNwZWMgc2F5cyB0byBhdm9pZCB0aGF0ICovCisJCX0KKwkJYnJlYWs7CisjZW5kaWYJLyogUk5ESVMgKi8KKworCWRlZmF1bHQ6CisJCVZERUJVRyAoZGV2LAorCQkJInVua25vd24gY29udHJvbCByZXElMDJ4LiUwMnggdiUwNHggaSUwNHggbCVkXG4iLAorCQkJY3RybC0+YlJlcXVlc3RUeXBlLCBjdHJsLT5iUmVxdWVzdCwKKwkJCXdWYWx1ZSwgd0luZGV4LCB3TGVuZ3RoKTsKKwl9CisKKwkvKiByZXNwb25kIHdpdGggZGF0YSB0cmFuc2ZlciBiZWZvcmUgc3RhdHVzIHBoYXNlPyAqLworCWlmICh2YWx1ZSA+PSAwKSB7CisJCXJlcS0+bGVuZ3RoID0gdmFsdWU7CisJCXJlcS0+emVybyA9IHZhbHVlIDwgd0xlbmd0aAorCQkJCSYmICh2YWx1ZSAlIGdhZGdldC0+ZXAwLT5tYXhwYWNrZXQpID09IDA7CisJCXZhbHVlID0gdXNiX2VwX3F1ZXVlIChnYWRnZXQtPmVwMCwgcmVxLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHZhbHVlIDwgMCkgeworCQkJREVCVUcgKGRldiwgImVwX3F1ZXVlIC0tPiAlZFxuIiwgdmFsdWUpOworCQkJcmVxLT5zdGF0dXMgPSAwOworCQkJZXRoX3NldHVwX2NvbXBsZXRlIChnYWRnZXQtPmVwMCwgcmVxKTsKKwkJfQorCX0KKworCS8qIGhvc3QgZWl0aGVyIHN0YWxscyAodmFsdWUgPCAwKSBvciByZXBvcnRzIHN1Y2Nlc3MgKi8KKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkCitldGhfZGlzY29ubmVjdCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgZXRoX2RldgkJKmRldiA9IGdldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0KTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZGV2LT5sb2NrLCBmbGFncyk7CisJbmV0aWZfc3RvcF9xdWV1ZSAoZGV2LT5uZXQpOworCW5ldGlmX2NhcnJpZXJfb2ZmIChkZXYtPm5ldCk7CisJZXRoX3Jlc2V0X2NvbmZpZyAoZGV2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwkvKiBGSVhNRSBSTkRJUyBzaG91bGQgZW50ZXIgUk5ESVNfVU5JTklUSUFMSVpFRCAqLworCisJLyogbmV4dCB3ZSBtYXkgZ2V0IHNldHVwKCkgY2FsbHMgdG8gZW51bWVyYXRlIG5ldyBjb25uZWN0aW9uczsKKwkgKiBvciBhbiB1bmJpbmQoKSBkdXJpbmcgc2h1dGRvd24gKGluY2x1ZGluZyByZW1vdmluZyBtb2R1bGUpLgorCSAqLworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBORVRXT1JLIERSSVZFUiBIT09LVVAgKHRvIHRoZSBsYXllciBhYm92ZSB0aGlzIGRyaXZlcikgKi8KKworc3RhdGljIGludCBldGhfY2hhbmdlX210dSAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgaW50IG5ld19tdHUpCit7CisJc3RydWN0IGV0aF9kZXYJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisKKwkvLyBGSVhNRSBpZiBybmRpcywgZG9uJ3QgY2hhbmdlIHdoaWxlIGxpbmsncyBsaXZlCisKKwlpZiAobmV3X210dSA8PSBFVEhfSExFTiB8fCBuZXdfbXR1ID4gRVRIX0ZSQU1FX0xFTikKKwkJcmV0dXJuIC1FUkFOR0U7CisJLyogbm8gemVyby1sZW5ndGggcGFja2V0IHJlYWQgd2FudGVkIGFmdGVyIG10dS1zaXplZCBwYWNrZXRzICovCisJaWYgKCgobmV3X210dSArIHNpemVvZiAoc3RydWN0IGV0aGhkcikpICUgZGV2LT5pbl9lcC0+bWF4cGFja2V0KSA9PSAwKQorCQlyZXR1cm4gLUVET007CisJbmV0LT5tdHUgPSBuZXdfbXR1OworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmV0aF9nZXRfc3RhdHMgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJcmV0dXJuICYoKHN0cnVjdCBldGhfZGV2ICopbmV0ZGV2X3ByaXYobmV0KSktPnN0YXRzOworfQorCitzdGF0aWMgdm9pZCBldGhfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqcCkKK3sKKwlzdHJ1Y3QgZXRoX2RldgkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlzdHJsY3B5KHAtPmRyaXZlciwgc2hvcnRuYW1lLCBzaXplb2YgcC0+ZHJpdmVyKTsKKwlzdHJsY3B5KHAtPnZlcnNpb24sIERSSVZFUl9WRVJTSU9OLCBzaXplb2YgcC0+dmVyc2lvbik7CisJc3RybGNweShwLT5md192ZXJzaW9uLCBkZXYtPmdhZGdldC0+bmFtZSwgc2l6ZW9mIHAtPmZ3X3ZlcnNpb24pOworCXN0cmxjcHkgKHAtPmJ1c19pbmZvLCBkZXYtPmdhZGdldC0+ZGV2LmJ1c19pZCwgc2l6ZW9mIHAtPmJ1c19pbmZvKTsKK30KKworc3RhdGljIHUzMiBldGhfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlzdHJ1Y3QgZXRoX2RldgkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlyZXR1cm4gZGV2LT5nYWRnZXQtPnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOOworfQorCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKKwkuZ2V0X2RydmluZm8gPSBldGhfZ2V0X2RydmluZm8sCisJLmdldF9saW5rID0gZXRoX2dldF9saW5rCit9OworCitzdGF0aWMgdm9pZCBkZWZlcl9rZXZlbnQgKHN0cnVjdCBldGhfZGV2ICpkZXYsIGludCBmbGFnKQoreworCWlmICh0ZXN0X2FuZF9zZXRfYml0IChmbGFnLCAmZGV2LT50b2RvKSkKKwkJcmV0dXJuOworCWlmICghc2NoZWR1bGVfd29yayAoJmRldi0+d29yaykpCisJCUVSUk9SIChkZXYsICJrZXZlbnQgJWQgbWF5IGhhdmUgYmVlbiBkcm9wcGVkXG4iLCBmbGFnKTsKKwllbHNlCisJCURFQlVHIChkZXYsICJrZXZlbnQgJWQgc2NoZWR1bGVkXG4iLCBmbGFnKTsKK30KKworc3RhdGljIHZvaWQgcnhfY29tcGxldGUgKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSk7CisKK3N0YXRpYyBpbnQKK3J4X3N1Ym1pdCAoc3RydWN0IGV0aF9kZXYgKmRldiwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEsIGludCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IHNrX2J1ZmYJCSpza2I7CisJaW50CQkJcmV0dmFsID0gLUVOT01FTTsKKwlzaXplX3QJCQlzaXplOworCisJLyogUGFkZGluZyB1cCB0byBSWF9FWFRSQSBoYW5kbGVzIG1pbm9yIGRpc2FncmVlbWVudHMgd2l0aCBob3N0LgorCSAqIE5vcm1hbGx5IHdlIHVzZSB0aGUgVVNCICJ0ZXJtaW5hdGUgb24gc2hvcnQgcmVhZCIgY29udmVudGlvbjsKKwkgKiBzbyBhbGxvdyB1cCB0byAoTiptYXhwYWNrZXQpLCBzaW5jZSB0aGF0IG1lbW9yeSBpcyBub3JtYWxseQorCSAqIGFscmVhZHkgYWxsb2NhdGVkLiAgU29tZSBoYXJkd2FyZSBkb2Vzbid0IGRlYWwgd2VsbCB3aXRoIHNob3J0CisJICogcmVhZHMgKGUuZy4gRE1BIG11c3QgYmUgTiptYXhwYWNrZXQpLCBzbyBmb3Igbm93IGRvbid0IHRyaW0gYQorCSAqIGJ5dGUgb2ZmIHRoZSBlbmQgKHRvIGZvcmNlIGhhcmR3YXJlIGVycm9ycyBvbiBvdmVyZmxvdykuCisJICoKKwkgKiBSTkRJUyB1c2VzIGludGVybmFsIGZyYW1pbmcsIGFuZCBleHBsaWNpdGx5IGFsbG93cyBzZW5kZXJzIHRvCisJICogcGFkIHRvIGVuZC1vZi1wYWNrZXQuICBUaGF0J3MgcG90ZW50aWFsbHkgbmljZSBmb3Igc3BlZWQsCisJICogYnV0IG1lYW5zIHJlY2VpdmVycyBjYW4ndCByZWNvdmVyIHN5bmNoIG9uIHRoZWlyIG93bi4KKwkgKi8KKwlzaXplID0gKHNpemVvZiAoc3RydWN0IGV0aGhkcikgKyBkZXYtPm5ldC0+bXR1ICsgUlhfRVhUUkEpOworCXNpemUgKz0gZGV2LT5vdXRfZXAtPm1heHBhY2tldCAtIDE7CisjaWZkZWYgQ09ORklHX1VTQl9FVEhfUk5ESVMKKwlpZiAoZGV2LT5ybmRpcykKKwkJc2l6ZSArPSBzaXplb2YgKHN0cnVjdCBybmRpc19wYWNrZXRfbXNnX3R5cGUpOworI2VuZGlmCQorCXNpemUgLT0gc2l6ZSAlIGRldi0+b3V0X2VwLT5tYXhwYWNrZXQ7CisKKwlpZiAoKHNrYiA9IGFsbG9jX3NrYiAoc2l6ZSArIE5FVF9JUF9BTElHTiwgZ2ZwX2ZsYWdzKSkgPT0gMCkgeworCQlERUJVRyAoZGV2LCAibm8gcnggc2tiXG4iKTsKKwkJZ290byBlbm9tZW07CisJfQorCQorCS8qIFNvbWUgcGxhdGZvcm1zIHBlcmZvcm0gYmV0dGVyIHdoZW4gSVAgcGFja2V0cyBhcmUgYWxpZ25lZCwKKwkgKiBidXQgb24gYXQgbGVhc3Qgb25lLCBjaGVja3N1bW1pbmcgZmFpbHMgb3RoZXJ3aXNlLiAgTm90ZToKKwkgKiB0aGlzIGRvZXNuJ3QgYWNjb3VudCBmb3IgdmFyaWFibGUtc2l6ZWQgUk5ESVMgaGVhZGVycy4KKwkgKi8KKwlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CisKKwlyZXEtPmJ1ZiA9IHNrYi0+ZGF0YTsKKwlyZXEtPmxlbmd0aCA9IHNpemU7CisJcmVxLT5jb21wbGV0ZSA9IHJ4X2NvbXBsZXRlOworCXJlcS0+Y29udGV4dCA9IHNrYjsKKworCXJldHZhbCA9IHVzYl9lcF9xdWV1ZSAoZGV2LT5vdXRfZXAsIHJlcSwgZ2ZwX2ZsYWdzKTsKKwlpZiAocmV0dmFsID09IC1FTk9NRU0pCitlbm9tZW06CisJCWRlZmVyX2tldmVudCAoZGV2LCBXT1JLX1JYX01FTU9SWSk7CisJaWYgKHJldHZhbCkgeworCQlERUJVRyAoZGV2LCAicnggc3VibWl0IC0tPiAlZFxuIiwgcmV0dmFsKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkgKHNrYik7CisJCXNwaW5fbG9jayAoJmRldi0+bG9jayk7CisJCWxpc3RfYWRkICgmcmVxLT5saXN0LCAmZGV2LT5yeF9yZXFzKTsKKwkJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCByeF9jb21wbGV0ZSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBza19idWZmCSpza2IgPSByZXEtPmNvbnRleHQ7CisJc3RydWN0IGV0aF9kZXYJKmRldiA9IGVwLT5kcml2ZXJfZGF0YTsKKwlpbnQJCXN0YXR1cyA9IHJlcS0+c3RhdHVzOworCisJc3dpdGNoIChzdGF0dXMpIHsKKworCS8qIG5vcm1hbCBjb21wbGV0aW9uICovCisJY2FzZSAwOgorCQlza2JfcHV0IChza2IsIHJlcS0+YWN0dWFsKTsKKyNpZmRlZiBDT05GSUdfVVNCX0VUSF9STkRJUworCQkvKiB3ZSBrbm93IE1heFBhY2tldHNQZXJUcmFuc2ZlciA9PSAxIGhlcmUgKi8KKwkJaWYgKGRldi0+cm5kaXMpCisJCQlybmRpc19ybV9oZHIgKHJlcS0+YnVmLCAmKHNrYi0+bGVuKSk7CisjZW5kaWYKKwkJaWYgKEVUSF9ITEVOID4gc2tiLT5sZW4gfHwgc2tiLT5sZW4gPiBFVEhfRlJBTUVfTEVOKSB7CisJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQlERUJVRyAoZGV2LCAicnggbGVuZ3RoICVkXG4iLCBza2ItPmxlbik7CisJCQlicmVhazsKKwkJfQorCisJCXNrYi0+ZGV2ID0gZGV2LT5uZXQ7CisJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyAoc2tiLCBkZXYtPm5ldCk7CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCisJCS8qIG5vIGJ1ZmZlciBjb3BpZXMgbmVlZGVkLCB1bmxlc3MgaGFyZHdhcmUgY2FuJ3QKKwkJICogdXNlIHNrYiBidWZmZXJzLgorCQkgKi8KKwkJc3RhdHVzID0gbmV0aWZfcnggKHNrYik7CisJCXNrYiA9IE5VTEw7CisJCWJyZWFrOworCisJLyogc29mdHdhcmUtZHJpdmVuIGludGVyZmFjZSBzaHV0ZG93biAqLworCWNhc2UgLUVDT05OUkVTRVQ6CQkvLyB1bmxpbmsKKwljYXNlIC1FU0hVVERPV046CQkvLyBkaXNjb25uZWN0IGV0YworCQlWREVCVUcgKGRldiwgInJ4IHNodXRkb3duLCBjb2RlICVkXG4iLCBzdGF0dXMpOworCQlnb3RvIHF1aWVzY2U7CisKKwkvKiBmb3IgaGFyZHdhcmUgYXV0b21hZ2ljIChzdWNoIGFzIHB4YSkgKi8KKwljYXNlIC1FQ09OTkFCT1JURUQ6CQkvLyBlbmRwb2ludCByZXNldAorCQlERUJVRyAoZGV2LCAicnggJXMgcmVzZXRcbiIsIGVwLT5uYW1lKTsKKwkJZGVmZXJfa2V2ZW50IChkZXYsIFdPUktfUlhfTUVNT1JZKTsKK3F1aWVzY2U6CisJCWRldl9rZnJlZV9za2JfYW55IChza2IpOworCQlnb3RvIGNsZWFuOworCisJLyogZGF0YSBvdmVycnVuICovCisJY2FzZSAtRU9WRVJGTE9XOgorCQlkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCS8vIEZBTExUSFJPVUdICisJICAgIAorCWRlZmF1bHQ6CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCURFQlVHIChkZXYsICJyeCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJCWJyZWFrOworCX0KKworCWlmIChza2IpCisJCWRldl9rZnJlZV9za2JfYW55IChza2IpOworCWlmICghbmV0aWZfcnVubmluZyAoZGV2LT5uZXQpKSB7CitjbGVhbjoKKwkJLyogbm9ib2R5IHJlYWRpbmcgcnhfcmVxcywgc28gbm8gZGV2LT5sb2NrICovCisJCWxpc3RfYWRkICgmcmVxLT5saXN0LCAmZGV2LT5yeF9yZXFzKTsKKwkJcmVxID0gTlVMTDsKKwl9CisJaWYgKHJlcSkKKwkJcnhfc3VibWl0IChkZXYsIHJlcSwgR0ZQX0FUT01JQyk7Cit9CisKK3N0YXRpYyBpbnQgcHJlYWxsb2MgKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHN0cnVjdCB1c2JfZXAgKmVwLAorCQkJdW5zaWduZWQgbiwgaW50IGdmcF9mbGFncykKK3sKKwl1bnNpZ25lZAkJaTsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcTsKKworCWlmICghbikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBxdWV1ZS9yZWN5Y2xlIHVwIHRvIE4gcmVxdWVzdHMgKi8KKwlpID0gbjsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChyZXEsIGxpc3QsIGxpc3QpIHsKKwkJaWYgKGktLSA9PSAwKQorCQkJZ290byBleHRyYTsKKwl9CisJd2hpbGUgKGktLSkgeworCQlyZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdCAoZXAsIGdmcF9mbGFncyk7CisJCWlmICghcmVxKQorCQkJcmV0dXJuIGxpc3RfZW1wdHkgKGxpc3QpID8gLUVOT01FTSA6IDA7CisJCWxpc3RfYWRkICgmcmVxLT5saXN0LCBsaXN0KTsKKwl9CisJcmV0dXJuIDA7CisKK2V4dHJhOgorCS8qIGZyZWUgZXh0cmFzICovCisJZm9yICg7OykgeworCQlzdHJ1Y3QgbGlzdF9oZWFkCSpuZXh0OworCisJCW5leHQgPSByZXEtPmxpc3QubmV4dDsKKwkJbGlzdF9kZWwgKCZyZXEtPmxpc3QpOworCQl1c2JfZXBfZnJlZV9yZXF1ZXN0IChlcCwgcmVxKTsKKworCQlpZiAobmV4dCA9PSBsaXN0KQorCQkJYnJlYWs7CisKKwkJcmVxID0gY29udGFpbmVyX29mIChuZXh0LCBzdHJ1Y3QgdXNiX3JlcXVlc3QsIGxpc3QpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbGxvY19yZXF1ZXN0cyAoc3RydWN0IGV0aF9kZXYgKmRldiwgdW5zaWduZWQgbiwgaW50IGdmcF9mbGFncykKK3sKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gcHJlYWxsb2MgKCZkZXYtPnR4X3JlcXMsIGRldi0+aW5fZXAsIG4sIGdmcF9mbGFncyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZmFpbDsKKwlzdGF0dXMgPSBwcmVhbGxvYyAoJmRldi0+cnhfcmVxcywgZGV2LT5vdXRfZXAsIG4sIGdmcF9mbGFncyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZmFpbDsKKwlyZXR1cm4gMDsKK2ZhaWw6CisJREVCVUcgKGRldiwgImNhbid0IGFsbG9jIHJlcXVlc3RzXG4iKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCByeF9maWxsIChzdHJ1Y3QgZXRoX2RldiAqZGV2LCBpbnQgZ2ZwX2ZsYWdzKQoreworCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJY2xlYXJfYml0IChXT1JLX1JYX01FTU9SWSwgJmRldi0+dG9kbyk7CisKKwkvKiBmaWxsIHVudXNlZCByeHEgc2xvdHMgd2l0aCBzb21lIHNrYiAqLworCXNwaW5fbG9ja19pcnFzYXZlICgmZGV2LT5sb2NrLCBmbGFncyk7CisJd2hpbGUgKCFsaXN0X2VtcHR5ICgmZGV2LT5yeF9yZXFzKSkgeworCQlyZXEgPSBjb250YWluZXJfb2YgKGRldi0+cnhfcmVxcy5uZXh0LAorCQkJCXN0cnVjdCB1c2JfcmVxdWVzdCwgbGlzdCk7CisJCWxpc3RfZGVsX2luaXQgKCZyZXEtPmxpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwkJaWYgKHJ4X3N1Ym1pdCAoZGV2LCByZXEsIGdmcF9mbGFncykgPCAwKSB7CisJCQlkZWZlcl9rZXZlbnQgKGRldiwgV09SS19SWF9NRU1PUlkpOworCQkJcmV0dXJuOworCQl9CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBldGhfd29yayAodm9pZCAqX2RldikKK3sKKwlzdHJ1Y3QgZXRoX2RldgkJKmRldiA9IF9kZXY7CisKKwlpZiAodGVzdF9iaXQgKFdPUktfUlhfTUVNT1JZLCAmZGV2LT50b2RvKSkgeworCQlpZiAobmV0aWZfcnVubmluZyAoZGV2LT5uZXQpKQorCQkJcnhfZmlsbCAoZGV2LCBHRlBfS0VSTkVMKTsKKwkJZWxzZQorCQkJY2xlYXJfYml0IChXT1JLX1JYX01FTU9SWSwgJmRldi0+dG9kbyk7CisJfQorCisJaWYgKGRldi0+dG9kbykKKwkJREVCVUcgKGRldiwgIndvcmsgZG9uZSwgZmxhZ3MgPSAweCVseFxuIiwgZGV2LT50b2RvKTsKK30KKworc3RhdGljIHZvaWQgdHhfY29tcGxldGUgKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZgkqc2tiID0gcmVxLT5jb250ZXh0OworCXN0cnVjdCBldGhfZGV2CSpkZXYgPSBlcC0+ZHJpdmVyX2RhdGE7CisKKwlzd2l0Y2ggKHJlcS0+c3RhdHVzKSB7CisJZGVmYXVsdDoKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJVkRFQlVHIChkZXYsICJ0eCBlcnIgJWRcbiIsIHJlcS0+c3RhdHVzKTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwljYXNlIC1FQ09OTlJFU0VUOgkJLy8gdW5saW5rCisJY2FzZSAtRVNIVVRET1dOOgkJLy8gZGlzY29ubmVjdCBldGMKKwkJYnJlYWs7CisJY2FzZSAwOgorCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCX0KKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKworCXNwaW5fbG9jayAoJmRldi0+bG9jayk7CisJbGlzdF9hZGQgKCZyZXEtPmxpc3QsICZkZXYtPnR4X3JlcXMpOworCXNwaW5fdW5sb2NrICgmZGV2LT5sb2NrKTsKKwlkZXZfa2ZyZWVfc2tiX2FueSAoc2tiKTsKKworCWF0b21pY19kZWMgKCZkZXYtPnR4X3FsZW4pOworCWlmIChuZXRpZl9jYXJyaWVyX29rIChkZXYtPm5ldCkpCisJCW5ldGlmX3dha2VfcXVldWUgKGRldi0+bmV0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZXRoX2lzX3Byb21pc2MgKHN0cnVjdCBldGhfZGV2ICpkZXYpCit7CisJLyogbm8gZmlsdGVycyBmb3IgdGhlIENEQyBzdWJzZXQ7IGFsd2F5cyBwcm9taXNjICovCisJaWYgKHN1YnNldF9hY3RpdmUgKGRldikpCisJCXJldHVybiAxOworCXJldHVybiBkZXYtPmNkY19maWx0ZXIgJiBVU0JfQ0RDX1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTOworfQorCitzdGF0aWMgaW50IGV0aF9zdGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCBldGhfZGV2CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlpbnQJCQlsZW5ndGggPSBza2ItPmxlbjsKKwlpbnQJCQlyZXR2YWw7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXEgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJLyogYXBwbHkgb3V0Z29pbmcgQ0RDIG9yIFJORElTIGZpbHRlcnMgKi8KKwlpZiAoIWV0aF9pc19wcm9taXNjIChkZXYpKSB7CisJCXU4CQkqZGVzdCA9IHNrYi0+ZGF0YTsKKworCQlpZiAoZGVzdCBbMF0gJiAweDAxKSB7CisJCQl1MTYJdHlwZTsKKworCQkJLyogaWdub3JlcyBVU0JfQ0RDX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVCBhbmQgaG9zdAorCQkJICogU0VUX0VUSEVSTkVUX01VTFRJQ0FTVF9GSUxURVJTIHJlcXVlc3RzCisJCQkgKi8KKwkJCWlmIChtZW1jbXAgKGRlc3QsIG5ldC0+YnJvYWRjYXN0LCBFVEhfQUxFTikgPT0gMCkKKwkJCQl0eXBlID0gVVNCX0NEQ19QQUNLRVRfVFlQRV9CUk9BRENBU1Q7CisJCQllbHNlCisJCQkJdHlwZSA9IFVTQl9DRENfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVDsKKwkJCWlmICghKGRldi0+Y2RjX2ZpbHRlciAmIHR5cGUpKSB7CisJCQkJZGV2X2tmcmVlX3NrYl9hbnkgKHNrYik7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwkJLyogaWdub3JlcyBVU0JfQ0RDX1BBQ0tFVF9UWVBFX0RJUkVDVEVEICovCisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwlyZXEgPSBjb250YWluZXJfb2YgKGRldi0+dHhfcmVxcy5uZXh0LCBzdHJ1Y3QgdXNiX3JlcXVlc3QsIGxpc3QpOworCWxpc3RfZGVsICgmcmVxLT5saXN0KTsKKwlpZiAobGlzdF9lbXB0eSAoJmRldi0+dHhfcmVxcykpCisJCW5ldGlmX3N0b3BfcXVldWUgKG5ldCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCisJLyogbm8gYnVmZmVyIGNvcGllcyBuZWVkZWQsIHVubGVzcyB0aGUgbmV0d29yayBzdGFjayBkaWQgaXQKKwkgKiBvciB0aGUgaGFyZHdhcmUgY2FuJ3QgdXNlIHNrYiBidWZmZXJzLgorCSAqIG9yIHRoZXJlJ3Mgbm90IGVub3VnaCBzcGFjZSBmb3IgYW55IFJORElTIGhlYWRlcnMgd2UgbmVlZAorCSAqLworI2lmZGVmIENPTkZJR19VU0JfRVRIX1JORElTCisJaWYgKGRldi0+cm5kaXMpIHsKKwkJc3RydWN0IHNrX2J1ZmYJKnNrYl9ybmRpczsKKworCQlza2Jfcm5kaXMgPSBza2JfcmVhbGxvY19oZWFkcm9vbSAoc2tiLAorCQkJCXNpemVvZiAoc3RydWN0IHJuZGlzX3BhY2tldF9tc2dfdHlwZSkpOworCQlpZiAoIXNrYl9ybmRpcykKKwkJCWdvdG8gZHJvcDsKKwkKKwkJZGV2X2tmcmVlX3NrYl9hbnkgKHNrYik7CisJCXNrYiA9IHNrYl9ybmRpczsKKwkJcm5kaXNfYWRkX2hkciAoc2tiKTsKKwkJbGVuZ3RoID0gc2tiLT5sZW47CisJfQorI2VuZGlmCisJcmVxLT5idWYgPSBza2ItPmRhdGE7CisJcmVxLT5jb250ZXh0ID0gc2tiOworCXJlcS0+Y29tcGxldGUgPSB0eF9jb21wbGV0ZTsKKworCS8qIHVzZSB6bHAgZnJhbWluZyBvbiB0eCBmb3Igc3RyaWN0IENEQy1FdGhlciBjb25mb3JtYW5jZSwKKwkgKiB0aG91Z2ggYW55IHJvYnVzdCBuZXR3b3JrIHJ4IHBhdGggaWdub3JlcyBleHRyYSBwYWRkaW5nLgorCSAqIGFuZCBzb21lIGhhcmR3YXJlIGRvZXNuJ3QgbGlrZSB0byB3cml0ZSB6bHBzLgorCSAqLworCXJlcS0+emVybyA9IDE7CisJaWYgKCFkZXYtPnpscCAmJiAobGVuZ3RoICUgZGV2LT5pbl9lcC0+bWF4cGFja2V0KSA9PSAwKQorCQlsZW5ndGgrKzsKKworCXJlcS0+bGVuZ3RoID0gbGVuZ3RoOworCisjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECisJLyogdGhyb3R0bGUgaGlnaHNwZWVkIElSUSByYXRlIGJhY2sgc2xpZ2h0bHkgKi8KKwlyZXEtPm5vX2ludGVycnVwdCA9IChkZXYtPmdhZGdldC0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCisJCT8gKChhdG9taWNfcmVhZCAoJmRldi0+dHhfcWxlbikgJSBUWF9ERUxBWSkgIT0gMCkKKwkJOiAwOworI2VuZGlmCisKKwlyZXR2YWwgPSB1c2JfZXBfcXVldWUgKGRldi0+aW5fZXAsIHJlcSwgR0ZQX0FUT01JQyk7CisJc3dpdGNoIChyZXR2YWwpIHsKKwlkZWZhdWx0OgorCQlERUJVRyAoZGV2LCAidHggcXVldWUgZXJyICVkXG4iLCByZXR2YWwpOworCQlicmVhazsKKwljYXNlIDA6CisJCW5ldC0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQlhdG9taWNfaW5jICgmZGV2LT50eF9xbGVuKTsKKwl9CisKKwlpZiAocmV0dmFsKSB7CisjaWZkZWYgQ09ORklHX1VTQl9FVEhfUk5ESVMKK2Ryb3A6CisjZW5kaWYKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCWRldl9rZnJlZV9za2JfYW55IChza2IpOworCQlzcGluX2xvY2tfaXJxc2F2ZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCQlpZiAobGlzdF9lbXB0eSAoJmRldi0+dHhfcmVxcykpCisJCQluZXRpZl9zdGFydF9xdWV1ZSAobmV0KTsKKwkJbGlzdF9hZGQgKCZyZXEtPmxpc3QsICZkZXYtPnR4X3JlcXMpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT5sb2NrLCBmbGFncyk7CisJfQorCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgQ09ORklHX1VTQl9FVEhfUk5ESVMKKworc3RhdGljIHZvaWQgcm5kaXNfc2VuZF9tZWRpYV9zdGF0ZSAoc3RydWN0IGV0aF9kZXYgKmRldiwgaW50IGNvbm5lY3QpCit7CisJaWYgKCFkZXYpCisJCXJldHVybjsKKwkKKwlpZiAoY29ubmVjdCkgeworCQlpZiAocm5kaXNfc2lnbmFsX2Nvbm5lY3QgKGRldi0+cm5kaXNfY29uZmlnKSkKKwkJCXJldHVybjsKKwl9IGVsc2UgeworCQlpZiAocm5kaXNfc2lnbmFsX2Rpc2Nvbm5lY3QgKGRldi0+cm5kaXNfY29uZmlnKSkKKwkJCXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitybmRpc19jb250cm9sX2Fja19jb21wbGV0ZSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCWlmIChyZXEtPnN0YXR1cyB8fCByZXEtPmFjdHVhbCAhPSByZXEtPmxlbmd0aCkKKwkJREVCVUcgKChzdHJ1Y3QgZXRoX2RldiAqKSBlcC0+ZHJpdmVyX2RhdGEsCisJCQkicm5kaXMgY29udHJvbCBhY2sgY29tcGxldGUgLS0+ICVkLCAlZC8lZFxuIiwKKwkJCXJlcS0+c3RhdHVzLCByZXEtPmFjdHVhbCwgcmVxLT5sZW5ndGgpOworCisJdXNiX2VwX2ZyZWVfYnVmZmVyKGVwLCByZXEtPmJ1ZiwgcmVxLT5kbWEsIDgpOworCXVzYl9lcF9mcmVlX3JlcXVlc3QoZXAsIHJlcSk7Cit9CisKK3N0YXRpYyBpbnQgcm5kaXNfY29udHJvbF9hY2sgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IGV0aF9kZXYgICAgICAgICAgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisJdTMyICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOworCXN0cnVjdCB1c2JfcmVxdWVzdCAgICAgICpyZXNwOworCQorCS8qIGluIGNhc2UgUk5ESVMgY2FsbHMgdGhpcyBhZnRlciBkaXNjb25uZWN0ICovCisJaWYgKCFkZXYtPnN0YXR1c19lcCkgeworCQlERUJVRyAoZGV2LCAic3RhdHVzIEVOT0RFVlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3Igbm90aWZpY2F0aW9uIGllLiBBQ0sgKi8KKwlyZXNwID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QgKGRldi0+c3RhdHVzX2VwLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXJlc3ApIHsKKwkJREVCVUcgKGRldiwgInN0YXR1cyBFTk9NRU1cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJCisJcmVzcC0+YnVmID0gdXNiX2VwX2FsbG9jX2J1ZmZlciAoZGV2LT5zdGF0dXNfZXAsIDgsCisJCQkJCSAmcmVzcC0+ZG1hLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXJlc3AtPmJ1ZikgeworCQlERUJVRyAoZGV2LCAic3RhdHVzIGJ1ZiBFTk9NRU1cbiIpOworCQl1c2JfZXBfZnJlZV9yZXF1ZXN0IChkZXYtPnN0YXR1c19lcCwgcmVzcCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwkKKwkvKiBTZW5kIFJORElTIFJFU1BPTlNFX0FWQUlMQUJMRSBub3RpZmljYXRpb247CisJICogVVNCX0NEQ19OT1RJRllfUkVTUE9OU0VfQVZBSUxBQkxFIHNob3VsZCB3b3JrIHRvbworCSAqLworCXJlc3AtPmxlbmd0aCA9IDg7CisJcmVzcC0+Y29tcGxldGUgPSBybmRpc19jb250cm9sX2Fja19jb21wbGV0ZTsKKwkKKwkqKChfX2xlMzIgKikgcmVzcC0+YnVmKSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEpOworCSooKF9fbGUzMiAqKSByZXNwLT5idWYgKyAxKSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQorCWxlbmd0aCA9IHVzYl9lcF9xdWV1ZSAoZGV2LT5zdGF0dXNfZXAsIHJlc3AsIEdGUF9BVE9NSUMpOworCWlmIChsZW5ndGggPCAwKSB7CisJCXJlc3AtPnN0YXR1cyA9IDA7CisJCXJuZGlzX2NvbnRyb2xfYWNrX2NvbXBsZXRlIChkZXYtPnN0YXR1c19lcCwgcmVzcCk7CisJfQorCQorCXJldHVybiAwOworfQorCisjZW5kaWYJLyogUk5ESVMgKi8KKworc3RhdGljIHZvaWQgZXRoX3N0YXJ0IChzdHJ1Y3QgZXRoX2RldiAqZGV2LCBpbnQgZ2ZwX2ZsYWdzKQoreworCURFQlVHIChkZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCS8qIGZpbGwgdGhlIHJ4IHF1ZXVlICovCisJcnhfZmlsbCAoZGV2LCBnZnBfZmxhZ3MpOworCisJLyogYW5kIG9wZW4gdGhlIHR4IGZsb29kZ2F0ZXMgKi8gCisJYXRvbWljX3NldCAoJmRldi0+dHhfcWxlbiwgMCk7CisJbmV0aWZfd2FrZV9xdWV1ZSAoZGV2LT5uZXQpOworI2lmZGVmIENPTkZJR19VU0JfRVRIX1JORElTCisJaWYgKGRldi0+cm5kaXMpIHsKKwkJcm5kaXNfc2V0X3BhcmFtX21lZGl1bSAoZGV2LT5ybmRpc19jb25maWcsCisJCQkJCU5ESVNfTUVESVVNXzgwMl8zLAorCQkJCQlCSVRSQVRFKGRldi0+Z2FkZ2V0KSk7CisJCXJuZGlzX3NlbmRfbWVkaWFfc3RhdGUgKGRldiwgMSk7CisJfQorI2VuZGlmCQorfQorCitzdGF0aWMgaW50IGV0aF9vcGVuIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCBldGhfZGV2CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCURFQlVHIChkZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlpZiAobmV0aWZfY2Fycmllcl9vayAoZGV2LT5uZXQpKQorCQlldGhfc3RhcnQgKGRldiwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXRoX3N0b3AgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IGV0aF9kZXYJCSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCisJVkRFQlVHIChkZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwluZXRpZl9zdG9wX3F1ZXVlIChuZXQpOworCisJREVCVUcgKGRldiwgInN0b3Agc3RhdHM6IHJ4L3R4ICVsZC8lbGQsIGVycnMgJWxkLyVsZFxuIiwKKwkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzLCBkZXYtPnN0YXRzLnR4X3BhY2tldHMsIAorCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycywgZGV2LT5zdGF0cy50eF9lcnJvcnMKKwkJKTsKKworCS8qIGVuc3VyZSB0aGVyZSBhcmUgbm8gbW9yZSBhY3RpdmUgcmVxdWVzdHMgKi8KKwlpZiAoZGV2LT5jb25maWcpIHsKKwkJdXNiX2VwX2Rpc2FibGUgKGRldi0+aW5fZXApOworCQl1c2JfZXBfZGlzYWJsZSAoZGV2LT5vdXRfZXApOworCQlpZiAobmV0aWZfY2Fycmllcl9vayAoZGV2LT5uZXQpKSB7CisJCQlERUJVRyAoZGV2LCAiaG9zdCBzdGlsbCB1c2luZyBpbi9vdXQgZW5kcG9pbnRzXG4iKTsKKwkJCS8vIEZJWE1FIGlkaW9tIG1heSBsZWF2ZSB0b2dnbGUgd3JvbmcgaGVyZQorCQkJdXNiX2VwX2VuYWJsZSAoZGV2LT5pbl9lcCwgZGV2LT5pbik7CisJCQl1c2JfZXBfZW5hYmxlIChkZXYtPm91dF9lcCwgZGV2LT5vdXQpOworCQl9CisJCWlmIChkZXYtPnN0YXR1c19lcCkgeworCQkJdXNiX2VwX2Rpc2FibGUgKGRldi0+c3RhdHVzX2VwKTsKKwkJCXVzYl9lcF9lbmFibGUgKGRldi0+c3RhdHVzX2VwLCBkZXYtPnN0YXR1cyk7CisJCX0KKwl9CisJCisjaWZkZWYJQ09ORklHX1VTQl9FVEhfUk5ESVMKKwlpZiAoZGV2LT5ybmRpcykgeworCQlybmRpc19zZXRfcGFyYW1fbWVkaXVtIChkZXYtPnJuZGlzX2NvbmZpZywKKwkJCQkJTkRJU19NRURJVU1fODAyXzMsIDApOworCQlybmRpc19zZW5kX21lZGlhX3N0YXRlIChkZXYsIDApOworCX0KKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3JlcXVlc3QgKmV0aF9yZXFfYWxsb2MgKHN0cnVjdCB1c2JfZXAgKmVwLCB1bnNpZ25lZCBzaXplKQoreworCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxOworCisJcmVxID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QgKGVwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXEtPmJ1ZiA9IGttYWxsb2MgKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghcmVxLT5idWYpIHsKKwkJdXNiX2VwX2ZyZWVfcmVxdWVzdCAoZXAsIHJlcSk7CisJCXJlcSA9IE5VTEw7CisJfQorCXJldHVybiByZXE7Cit9CisKK3N0YXRpYyB2b2lkCitldGhfcmVxX2ZyZWUgKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlrZnJlZSAocmVxLT5idWYpOworCXVzYl9lcF9mcmVlX3JlcXVlc3QgKGVwLCByZXEpOworfQorCisKK3N0YXRpYyB2b2lkCitldGhfdW5iaW5kIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCBldGhfZGV2CQkqZGV2ID0gZ2V0X2dhZGdldF9kYXRhIChnYWRnZXQpOworCisJREVCVUcgKGRldiwgInVuYmluZFxuIik7CisjaWZkZWYgQ09ORklHX1VTQl9FVEhfUk5ESVMKKwlybmRpc19kZXJlZ2lzdGVyIChkZXYtPnJuZGlzX2NvbmZpZyk7CisJcm5kaXNfZXhpdCAoKTsKKyNlbmRpZgorCisJLyogd2UndmUgYWxyZWFkeSBiZWVuIGRpc2Nvbm5lY3RlZCAuLi4gbm8gaS9vIGlzIGFjdGl2ZSAqLworCWlmIChkZXYtPnJlcSkgeworCQlldGhfcmVxX2ZyZWUgKGdhZGdldC0+ZXAwLCBkZXYtPnJlcSk7CisJCWRldi0+cmVxID0gTlVMTDsKKwl9CisJaWYgKGRldi0+c3RhdF9yZXEpIHsKKwkJZXRoX3JlcV9mcmVlIChkZXYtPnN0YXR1c19lcCwgZGV2LT5zdGF0X3JlcSk7CisJCWRldi0+c3RhdF9yZXEgPSBOVUxMOworCX0KKworCXVucmVnaXN0ZXJfbmV0ZGV2IChkZXYtPm5ldCk7CisJZnJlZV9uZXRkZXYoZGV2LT5uZXQpOworCisJLyogYXNzdW1pbmcgd2UgdXNlZCBrZXZlbnRkLCBpdCBtdXN0IHF1aWVzY2UgdG9vICovCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsgKCk7CisJc2V0X2dhZGdldF9kYXRhIChnYWRnZXQsIE5VTEwpOworfQorCitzdGF0aWMgdTggX19pbml0IG5pYmJsZSAodW5zaWduZWQgY2hhciBjKQoreworCWlmIChsaWtlbHkgKGlzZGlnaXQgKGMpKSkKKwkJcmV0dXJuIGMgLSAnMCc7CisJYyA9IHRvdXBwZXIgKGMpOworCWlmIChsaWtlbHkgKGlzeGRpZ2l0IChjKSkpCisJCXJldHVybiAxMCArIGMgLSAnQSc7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBnZXRfZXRoZXJfYWRkciAoY29uc3QgY2hhciAqc3RyLCB1OCAqZGV2X2FkZHIpCit7CisJaWYgKHN0cikgeworCQl1bnNpZ25lZAlpOworCisJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKwkJCXVuc2lnbmVkIGNoYXIgbnVtOworCisJCQlpZigoKnN0ciA9PSAnLicpIHx8ICgqc3RyID09ICc6JykpCisJCQkJc3RyKys7CisJCQludW0gPSBuaWJibGUoKnN0cisrKSA8PCA0OworCQkJbnVtIHw9IChuaWJibGUoKnN0cisrKSk7CisJCQlkZXZfYWRkciBbaV0gPSBudW07CisJCX0KKwkJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIgKGRldl9hZGRyKSkKKwkJCXJldHVybjsKKwl9CisJcmFuZG9tX2V0aGVyX2FkZHIoZGV2X2FkZHIpOworfQorCitzdGF0aWMgaW50IF9faW5pdAorZXRoX2JpbmQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IGV0aF9kZXYJCSpkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UJKm5ldDsKKwl1OAkJCWNkYyA9IDEsIHpscCA9IDEsIHJuZGlzID0gMTsKKwlzdHJ1Y3QgdXNiX2VwCQkqaW5fZXAsICpvdXRfZXAsICpzdGF0dXNfZXAgPSBOVUxMOworCWludAkJCXN0YXR1cyA9IC1FTk9NRU07CisKKwkvKiB0aGVzZSBmbGFncyBhcmUgb25seSBldmVyIGNsZWFyZWQ7IGNvbXBpbGVyIHRha2Ugbm90ZSAqLworI2lmbmRlZglERVZfQ09ORklHX0NEQworCWNkYyA9IDA7CisjZW5kaWYKKyNpZm5kZWYJQ09ORklHX1VTQl9FVEhfUk5ESVMKKwlybmRpcyA9IDA7CisjZW5kaWYKKworCS8qIEJlY2F1c2UgbW9zdCBob3N0IHNpZGUgVVNCIHN0YWNrcyBoYW5kbGUgQ0RDIEV0aGVybmV0LCB0aGF0CisJICogc3RhbmRhcmQgcHJvdG9jb2wgaXMgX3N0cm9uZ2x5XyBwcmVmZXJyZWQgZm9yIGludGVyb3AgcHVycG9zZXMuCisJICogKEJ5IGV2ZXJ5b25lIGV4Y2VwdCBNaWNyb3NvZnQuKQorCSAqLworCWlmIChnYWRnZXRfaXNfbmV0MjI4MCAoZ2FkZ2V0KSkgeworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDEpOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX2R1bW15IChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwMik7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfcHhhIChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwMyk7CisJCS8qIHB4YSBkb2Vzbid0IHN1cHBvcnQgYWx0c2V0dGluZ3MgKi8KKwkJY2RjID0gMDsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19zaChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwNCk7CisJCS8qIHNoIGRvZXNuJ3Qgc3VwcG9ydCBtdWx0aXBsZSBpbnRlcmZhY2VzIG9yIGNvbmZpZ3MgKi8KKwkJY2RjID0gMDsKKwkJcm5kaXMgPSAwOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX3NhMTEwMCAoZ2FkZ2V0KSkgeworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDUpOworCQkvKiBoYXJkd2FyZSBjYW4ndCB3cml0ZSB6bHBzICovCisJCXpscCA9IDA7CisJCS8qIHNhMTEwMCBDQU4gZG8gQ0RDLCB3aXRob3V0IHN0YXR1cyBlbmRwb2ludCAuLi4gd2UgdXNlCisJCSAqIG5vbi1DREMgdG8gYmUgY29tcGF0aWJsZSB3aXRoIEFSTSBMaW51eC0yLjQgInVzYi1ldGgiLgorCQkgKi8KKwkJY2RjID0gMDsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19nb2t1IChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwNik7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfbXExMXh4IChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwNyk7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfb21hcCAoZ2FkZ2V0KSkgeworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDgpOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX2xoN2E0MHgoZ2FkZ2V0KSkgeworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDkpOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX245NjA0KGdhZGdldCkpIHsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjEwKTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19weGEyN3goZ2FkZ2V0KSkgeworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMTEpOworIAl9IGVsc2UgaWYgKGdhZGdldF9pc19zM2MyNDEwKGdhZGdldCkpIHsKKyAJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIxMik7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfYXQ5MShnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIxMyk7CisJfSBlbHNlIHsKKwkJLyogY2FuJ3QgYXNzdW1lIENEQyB3b3Jrcy4gIGRvbid0IHdhbnQgdG8gZGVmYXVsdCB0bworCQkgKiBhbnl0aGluZyBsZXNzIGZ1bmN0aW9uYWwgb24gQ0RDLWNhcGFibGUgaGFyZHdhcmUsCisJCSAqIHNvIHdlIGZhaWwgaW4gdGhpcyBjYXNlLgorCQkgKi8KKwkJZGV2X2VyciAoJmdhZGdldC0+ZGV2LAorCQkJImNvbnRyb2xsZXIgJyVzJyBub3QgcmVjb2duaXplZFxuIiwKKwkJCWdhZGdldC0+bmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlzbnByaW50ZiAobWFudWZhY3R1cmVyLCBzaXplb2YgbWFudWZhY3R1cmVyLCAiJXMgJXMvJXMiLAorCQlzeXN0ZW1fdXRzbmFtZS5zeXNuYW1lLCBzeXN0ZW1fdXRzbmFtZS5yZWxlYXNlLAorCQlnYWRnZXQtPm5hbWUpOworCisJLyogSWYgdGhlcmUncyBhbiBSTkRJUyBjb25maWd1cmF0aW9uLCB0aGF0J3Mgd2hhdCBXaW5kb3dzIHdhbnRzIHRvCisJICogYmUgdXNpbmcgLi4uIHNvIHVzZSB0aGVzZSBwcm9kdWN0IElEcyBoZXJlIGFuZCBpbiB0aGUgImxpbnV4LmluZiIKKwkgKiBuZWVkZWQgdG8gaW5zdGFsbCBNU0ZUIGRyaXZlcnMuICBDdXJyZW50IExpbnV4IGtlcm5lbHMgd2lsbCB1c2UKKwkgKiB0aGUgc2Vjb25kIGNvbmZpZ3VyYXRpb24gaWYgaXQncyBDREMgRXRoZXJuZXQsIGFuZCBuZWVkIHNvbWUgaGVscAorCSAqIHRvIGNob29zZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvdGhlcndpc2UuCisJICovCisJaWYgKHJuZGlzKSB7CisJCWRldmljZV9kZXNjLmlkVmVuZG9yID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoUk5ESVNfVkVORE9SX05VTSk7CisJCWRldmljZV9kZXNjLmlkUHJvZHVjdCA9CisJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFJORElTX1BST0RVQ1RfTlVNKTsKKwkJc25wcmludGYgKHByb2R1Y3RfZGVzYywgc2l6ZW9mIHByb2R1Y3RfZGVzYywKKwkJCSJSTkRJUy8lcyIsIGRyaXZlcl9kZXNjKTsKKworCS8qIENEQyBzdWJzZXQgLi4uIHJlY29nbml6ZWQgYnkgTGludXggc2luY2UgMi40LjEwLCBidXQgV2luZG93cworCSAqIGRyaXZlcnMgYXJlbid0IHdpZGVseSBhdmFpbGFibGUuCisJICovCisJfSBlbHNlIGlmICghY2RjKSB7CisJCWRldmljZV9kZXNjLmJEZXZpY2VDbGFzcyA9IFVTQl9DTEFTU19WRU5ET1JfU1BFQzsKKwkJZGV2aWNlX2Rlc2MuaWRWZW5kb3IgPQorCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihTSU1QTEVfVkVORE9SX05VTSk7CisJCWRldmljZV9kZXNjLmlkUHJvZHVjdCA9CisJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFNJTVBMRV9QUk9EVUNUX05VTSk7CisJfQorCisJLyogc3VwcG9ydCBvcHRpb25hbCB2ZW5kb3IvZGlzdHJvIGN1c3RvbWl6YXRpb24gKi8KKwlpZiAoaWRWZW5kb3IpIHsKKwkJaWYgKCFpZFByb2R1Y3QpIHsKKwkJCWRldl9lcnIgKCZnYWRnZXQtPmRldiwgImlkVmVuZG9yIG5lZWRzIGlkUHJvZHVjdCFcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJZGV2aWNlX2Rlc2MuaWRWZW5kb3IgPSBjcHVfdG9fbGUxNihpZFZlbmRvcik7CisJCWRldmljZV9kZXNjLmlkUHJvZHVjdCA9IGNwdV90b19sZTE2KGlkUHJvZHVjdCk7CisJCWlmIChiY2REZXZpY2UpCisJCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBjcHVfdG9fbGUxNihiY2REZXZpY2UpOworCX0KKwlpZiAoaU1hbnVmYWN0dXJlcikKKwkJc3RybGNweSAobWFudWZhY3R1cmVyLCBpTWFudWZhY3R1cmVyLCBzaXplb2YgbWFudWZhY3R1cmVyKTsKKwlpZiAoaVByb2R1Y3QpCisJCXN0cmxjcHkgKHByb2R1Y3RfZGVzYywgaVByb2R1Y3QsIHNpemVvZiBwcm9kdWN0X2Rlc2MpOworCisJLyogYWxsIHdlIHJlYWxseSBuZWVkIGlzIGJ1bGsgSU4vT1VUICovCisJdXNiX2VwX2F1dG9jb25maWdfcmVzZXQgKGdhZGdldCk7CisJaW5fZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyAoZ2FkZ2V0LCAmZnNfc291cmNlX2Rlc2MpOworCWlmICghaW5fZXApIHsKK2F1dG9jb25mX2ZhaWw6CisJCWRldl9lcnIgKCZnYWRnZXQtPmRldiwKKwkJCSJjYW4ndCBhdXRvY29uZmlndXJlIG9uICVzXG4iLAorCQkJZ2FkZ2V0LT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCUVQX0lOX05BTUUgPSBpbl9lcC0+bmFtZTsKKwlpbl9lcC0+ZHJpdmVyX2RhdGEgPSBpbl9lcDsJLyogY2xhaW0gKi8KKwkKKwlvdXRfZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyAoZ2FkZ2V0LCAmZnNfc2lua19kZXNjKTsKKwlpZiAoIW91dF9lcCkKKwkJZ290byBhdXRvY29uZl9mYWlsOworCUVQX09VVF9OQU1FID0gb3V0X2VwLT5uYW1lOworCW91dF9lcC0+ZHJpdmVyX2RhdGEgPSBvdXRfZXA7CS8qIGNsYWltICovCisKKyNpZiBkZWZpbmVkKERFVl9DT05GSUdfQ0RDKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfRVRIX1JORElTKQorCS8qIENEQyBFdGhlcm5ldCBjb250cm9sIGludGVyZmFjZSBkb2Vzbid0IHJlcXVpcmUgYSBzdGF0dXMgZW5kcG9pbnQuCisJICogU2luY2Ugc29tZSBob3N0cyBleHBlY3Qgb25lLCB0cnkgdG8gYWxsb2NhdGUgb25lIGFueXdheS4KKwkgKi8KKwlpZiAoY2RjIHx8IHJuZGlzKSB7CisJCXN0YXR1c19lcCA9IHVzYl9lcF9hdXRvY29uZmlnIChnYWRnZXQsICZmc19zdGF0dXNfZGVzYyk7CisJCWlmIChzdGF0dXNfZXApIHsKKwkJCUVQX1NUQVRVU19OQU1FID0gc3RhdHVzX2VwLT5uYW1lOworCQkJc3RhdHVzX2VwLT5kcml2ZXJfZGF0YSA9IHN0YXR1c19lcDsJLyogY2xhaW0gKi8KKwkJfSBlbHNlIGlmIChybmRpcykgeworCQkJZGV2X2VyciAoJmdhZGdldC0+ZGV2LAorCQkJCSJjYW4ndCBydW4gUk5ESVMgb24gJXNcbiIsCisJCQkJZ2FkZ2V0LT5uYW1lKTsKKwkJCXJldHVybiAtRU5PREVWOworI2lmZGVmIERFVl9DT05GSUdfQ0RDCisJCS8qIHB4YTI1eCBvbmx5IGRvZXMgQ0RDIHN1YnNldDsgb2Z0ZW4gdXNlZCB3aXRoIFJORElTICovCisJCX0gZWxzZSBpZiAoY2RjKSB7CisJCQljb250cm9sX2ludGYuYk51bUVuZHBvaW50cyA9IDA7CisJCQkvKiBGSVhNRSByZW1vdmUgZW5kcG9pbnQgZnJvbSBkZXNjcmlwdG9yIGxpc3QgKi8KKyNlbmRpZgorCQl9CisJfQorI2VuZGlmCisKKwkvKiBvbmUgY29uZmlnOiAgY2RjLCBlbHNlIG1pbmltYWwgc3Vic2V0ICovCisJaWYgKCFjZGMpIHsKKwkJZXRoX2NvbmZpZy5iTnVtSW50ZXJmYWNlcyA9IDE7CisJCWV0aF9jb25maWcuaUNvbmZpZ3VyYXRpb24gPSBTVFJJTkdfU1VCU0VUOworCQlmc19zdWJzZXRfZGVzY3JpcHRvcnMoKTsKKwkJaHNfc3Vic2V0X2Rlc2NyaXB0b3JzKCk7CisJfQorCisJLyogRm9yIG5vdyBSTkRJUyBpcyBhbHdheXMgYSBzZWNvbmQgY29uZmlnICovCisJaWYgKHJuZGlzKQorCQlkZXZpY2VfZGVzYy5iTnVtQ29uZmlndXJhdGlvbnMgPSAyOworCisjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECisJaWYgKHJuZGlzKQorCQlkZXZfcXVhbGlmaWVyLmJOdW1Db25maWd1cmF0aW9ucyA9IDI7CisJZWxzZSBpZiAoIWNkYykKKwkJZGV2X3F1YWxpZmllci5iRGV2aWNlQ2xhc3MgPSBVU0JfQ0xBU1NfVkVORE9SX1NQRUM7CisKKwkvKiBhc3N1bWVzIGVwMCB1c2VzIHRoZSBzYW1lIHZhbHVlIGZvciBib3RoIHNwZWVkcyAuLi4gKi8KKwlkZXZfcXVhbGlmaWVyLmJNYXhQYWNrZXRTaXplMCA9IGRldmljZV9kZXNjLmJNYXhQYWNrZXRTaXplMDsKKworCS8qIGFuZCB0aGF0IGFsbCBlbmRwb2ludHMgYXJlIGR1YWwtc3BlZWQgKi8KKwloc19zb3VyY2VfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0gZnNfc291cmNlX2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKwloc19zaW5rX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9IGZzX3NpbmtfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworI2lmIGRlZmluZWQoREVWX0NPTkZJR19DREMpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9FVEhfUk5ESVMpCisJaWYgKEVQX1NUQVRVU19OQU1FKQorCQloc19zdGF0dXNfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJCQlmc19zdGF0dXNfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworI2VuZGlmCisjZW5kaWYJLyogRFVBTFNQRUVEICovCisKKwlkZXZpY2VfZGVzYy5iTWF4UGFja2V0U2l6ZTAgPSBnYWRnZXQtPmVwMC0+bWF4cGFja2V0OworCXVzYl9nYWRnZXRfc2V0X3NlbGZwb3dlcmVkIChnYWRnZXQpOworCisJaWYgKGdhZGdldC0+aXNfb3RnKSB7CisJCW90Z19kZXNjcmlwdG9yLmJtQXR0cmlidXRlcyB8PSBVU0JfT1RHX0hOUCwKKwkJZXRoX2NvbmZpZy5ibUF0dHJpYnV0ZXMgfD0gVVNCX0NPTkZJR19BVFRfV0FLRVVQOworCQlldGhfY29uZmlnLmJNYXhQb3dlciA9IDQ7CisjaWZkZWYJQ09ORklHX1VTQl9FVEhfUk5ESVMKKwkJcm5kaXNfY29uZmlnLmJtQXR0cmlidXRlcyB8PSBVU0JfQ09ORklHX0FUVF9XQUtFVVA7CisJCXJuZGlzX2NvbmZpZy5iTWF4UG93ZXIgPSA0OworI2VuZGlmCisJfQorCisgCW5ldCA9IGFsbG9jX2V0aGVyZGV2IChzaXplb2YgKmRldik7CisgCWlmICghbmV0KQorCQlyZXR1cm4gc3RhdHVzOworCWRldiA9IG5ldGRldl9wcml2KG5ldCk7CisJc3Bpbl9sb2NrX2luaXQgKCZkZXYtPmxvY2spOworCUlOSVRfV09SSyAoJmRldi0+d29yaywgZXRoX3dvcmssIGRldik7CisJSU5JVF9MSVNUX0hFQUQgKCZkZXYtPnR4X3JlcXMpOworCUlOSVRfTElTVF9IRUFEICgmZGV2LT5yeF9yZXFzKTsKKworCS8qIG5ldHdvcmsgZGV2aWNlIHNldHVwICovCisJZGV2LT5uZXQgPSBuZXQ7CisJU0VUX01PRFVMRV9PV05FUiAobmV0KTsKKwlzdHJjcHkgKG5ldC0+bmFtZSwgInVzYiVkIik7CisJZGV2LT5jZGMgPSBjZGM7CisJZGV2LT56bHAgPSB6bHA7CisKKwlkZXYtPmluX2VwID0gaW5fZXA7CisJZGV2LT5vdXRfZXAgPSBvdXRfZXA7CisJZGV2LT5zdGF0dXNfZXAgPSBzdGF0dXNfZXA7CisKKwkvKiBNb2R1bGUgcGFyYW1zIGZvciB0aGVzZSBhZGRyZXNzZXMgc2hvdWxkIGNvbWUgZnJvbSBJRCBwcm9tcy4KKwkgKiBUaGUgaG9zdCBzaWRlIGFkZHJlc3MgaXMgdXNlZCB3aXRoIENEQyBhbmQgUk5ESVMsIGFuZCBjb21tb25seQorCSAqIGVuZHMgdXAgaW4gYSBwZXJzaXN0ZW50IGNvbmZpZyBkYXRhYmFzZS4KKwkgKi8KKwlnZXRfZXRoZXJfYWRkcihkZXZfYWRkciwgbmV0LT5kZXZfYWRkcik7CisJaWYgKGNkYyB8fCBybmRpcykgeworCQlnZXRfZXRoZXJfYWRkcihob3N0X2FkZHIsIGRldi0+aG9zdF9tYWMpOworI2lmZGVmCURFVl9DT05GSUdfQ0RDCisJCXNucHJpbnRmIChldGhhZGRyLCBzaXplb2YgZXRoYWRkciwgIiUwMlglMDJYJTAyWCUwMlglMDJYJTAyWCIsCisJCQlkZXYtPmhvc3RfbWFjIFswXSwgZGV2LT5ob3N0X21hYyBbMV0sCisJCQlkZXYtPmhvc3RfbWFjIFsyXSwgZGV2LT5ob3N0X21hYyBbM10sCisJCQlkZXYtPmhvc3RfbWFjIFs0XSwgZGV2LT5ob3N0X21hYyBbNV0pOworI2VuZGlmCisJfQorCisJaWYgKHJuZGlzKSB7CisJCXN0YXR1cyA9IHJuZGlzX2luaXQoKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRldl9lcnIgKCZnYWRnZXQtPmRldiwgImNhbid0IGluaXQgUk5ESVMsICVkXG4iLAorCQkJCXN0YXR1cyk7CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisKKwluZXQtPmNoYW5nZV9tdHUgPSBldGhfY2hhbmdlX210dTsKKwluZXQtPmdldF9zdGF0cyA9IGV0aF9nZXRfc3RhdHM7CisJbmV0LT5oYXJkX3N0YXJ0X3htaXQgPSBldGhfc3RhcnRfeG1pdDsKKwluZXQtPm9wZW4gPSBldGhfb3BlbjsKKwluZXQtPnN0b3AgPSBldGhfc3RvcDsKKwkvLyB3YXRjaGRvZ190aW1lbywgdHhfdGltZW91dCAuLi4KKwkvLyBzZXRfbXVsdGljYXN0X2xpc3QKKwlTRVRfRVRIVE9PTF9PUFMobmV0LCAmb3BzKTsKKworCS8qIHByZWFsbG9jYXRlIGNvbnRyb2wgbWVzc2FnZSBkYXRhIGFuZCBidWZmZXIgKi8KKwlkZXYtPnJlcSA9IGV0aF9yZXFfYWxsb2MgKGdhZGdldC0+ZXAwLCBVU0JfQlVGU0laKTsKKwlpZiAoIWRldi0+cmVxKQorCQlnb3RvIGZhaWw7CisJZGV2LT5yZXEtPmNvbXBsZXRlID0gZXRoX3NldHVwX2NvbXBsZXRlOworCisJLyogLi4uIGFuZCBtYXliZSBsaWtld2lzZSBmb3Igc3RhdHVzIHRyYW5zZmVyICovCisJaWYgKGRldi0+c3RhdHVzX2VwKSB7CisJCWRldi0+c3RhdF9yZXEgPSBldGhfcmVxX2FsbG9jIChkZXYtPnN0YXR1c19lcCwKKwkJCQkJU1RBVFVTX0JZVEVDT1VOVCk7CisJCWlmICghZGV2LT5zdGF0X3JlcSkgeworCQkJZXRoX3JlcV9mcmVlIChnYWRnZXQtPmVwMCwgZGV2LT5yZXEpOworCQkJZ290byBmYWlsOworCQl9CisJfQorCisJLyogZmluaXNoIGhvb2t1cCB0byBsb3dlciBsYXllciAuLi4gKi8KKwlkZXYtPmdhZGdldCA9IGdhZGdldDsKKwlzZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCwgZGV2KTsKKwlnYWRnZXQtPmVwMC0+ZHJpdmVyX2RhdGEgPSBkZXY7CisJCisJLyogdHdvIGtpbmRzIG9mIGhvc3QtaW5pdGlhdGVkIHN0YXRlIGNoYW5nZXM6CisJICogIC0gaWZmIERBVEEgdHJhbnNmZXIgaXMgYWN0aXZlLCBjYXJyaWVyIGlzICJvbiIKKwkgKiAgLSB0eCBxdWV1ZWluZyBlbmFibGVkIGlmIG9wZW4gKmFuZCogY2FycmllciBpcyAib24iCisJICovCisJbmV0aWZfc3RvcF9xdWV1ZSAoZGV2LT5uZXQpOworCW5ldGlmX2NhcnJpZXJfb2ZmIChkZXYtPm5ldCk7CisKKyAJLy8gU0VUX05FVERFVl9ERVYgKGRldi0+bmV0LCAmZ2FkZ2V0LT5kZXYpOworIAlzdGF0dXMgPSByZWdpc3Rlcl9uZXRkZXYgKGRldi0+bmV0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsMTsKKworCUlORk8gKGRldiwgIiVzLCB2ZXJzaW9uOiAiIERSSVZFUl9WRVJTSU9OICJcbiIsIGRyaXZlcl9kZXNjKTsKKwlJTkZPIChkZXYsICJ1c2luZyAlcywgT1VUICVzIElOICVzJXMlc1xuIiwgZ2FkZ2V0LT5uYW1lLAorCQlFUF9PVVRfTkFNRSwgRVBfSU5fTkFNRSwKKwkJRVBfU1RBVFVTX05BTUUgPyAiIFNUQVRVUyAiIDogIiIsCisJCUVQX1NUQVRVU19OQU1FID8gRVBfU1RBVFVTX05BTUUgOiAiIgorCQkpOworCUlORk8gKGRldiwgIk1BQyAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJbmV0LT5kZXZfYWRkciBbMF0sIG5ldC0+ZGV2X2FkZHIgWzFdLAorCQluZXQtPmRldl9hZGRyIFsyXSwgbmV0LT5kZXZfYWRkciBbM10sCisJCW5ldC0+ZGV2X2FkZHIgWzRdLCBuZXQtPmRldl9hZGRyIFs1XSk7CisKKwlpZiAoY2RjIHx8IHJuZGlzKQorCQlJTkZPIChkZXYsICJIT1NUIE1BQyAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJCWRldi0+aG9zdF9tYWMgWzBdLCBkZXYtPmhvc3RfbWFjIFsxXSwKKwkJCWRldi0+aG9zdF9tYWMgWzJdLCBkZXYtPmhvc3RfbWFjIFszXSwKKwkJCWRldi0+aG9zdF9tYWMgWzRdLCBkZXYtPmhvc3RfbWFjIFs1XSk7CisKKyNpZmRlZglDT05GSUdfVVNCX0VUSF9STkRJUworCWlmIChybmRpcykgeworCQl1MzIJdmVuZG9ySUQgPSAwOworCisJCS8qIEZJWE1FIFJORElTIHZlbmRvciBpZCA9PSAidmVuZG9yIE5JQyBjb2RlIiA9PSA/ICovCisJCQorCQlkZXYtPnJuZGlzX2NvbmZpZyA9IHJuZGlzX3JlZ2lzdGVyIChybmRpc19jb250cm9sX2Fjayk7CisJCWlmIChkZXYtPnJuZGlzX2NvbmZpZyA8IDApIHsKK2ZhaWwwOgorCQkJdW5yZWdpc3Rlcl9uZXRkZXYgKGRldi0+bmV0KTsKKwkJCXN0YXR1cyA9IC1FTk9ERVY7CisJCQlnb3RvIGZhaWw7CisJCX0KKwkJCisJCS8qIHRoZXNlIHNldCB1cCBhIGxvdCBvZiB0aGUgT0lEcyB0aGF0IFJORElTIG5lZWRzICovCisJCXJuZGlzX3NldF9ob3N0X21hYyAoZGV2LT5ybmRpc19jb25maWcsIGRldi0+aG9zdF9tYWMpOworCQlpZiAocm5kaXNfc2V0X3BhcmFtX2RldiAoZGV2LT5ybmRpc19jb25maWcsIGRldi0+bmV0LAorCQkJCQkgJmRldi0+c3RhdHMpKQorCQkJZ290byBmYWlsMDsKKwkJaWYgKHJuZGlzX3NldF9wYXJhbV92ZW5kb3IgKGRldi0+cm5kaXNfY29uZmlnLCB2ZW5kb3JJRCwKKwkJCQkJICAgIG1hbnVmYWN0dXJlcikpCisJCQlnb3RvIGZhaWwwOworCQlpZiAocm5kaXNfc2V0X3BhcmFtX21lZGl1bSAoZGV2LT5ybmRpc19jb25maWcsCisJCQkJCSAgICBORElTX01FRElVTV84MDJfMywKKwkJCQkJICAgIDApKQorCQkJZ290byBmYWlsMDsKKwkJSU5GTyAoZGV2LCAiUk5ESVMgcmVhZHlcbiIpOworCX0KKyNlbmRpZgkKKworCXJldHVybiBzdGF0dXM7CisKK2ZhaWwxOgorCWRldl9kYmcoJmdhZGdldC0+ZGV2LCAicmVnaXN0ZXJfbmV0ZGV2IGZhaWxlZCwgJWRcbiIsIHN0YXR1cyk7CitmYWlsOgorCWV0aF91bmJpbmQgKGdhZGdldCk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQKK2V0aF9zdXNwZW5kIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCBldGhfZGV2CQkqZGV2ID0gZ2V0X2dhZGdldF9kYXRhIChnYWRnZXQpOworCisJREVCVUcgKGRldiwgInN1c3BlbmRcbiIpOworCWRldi0+c3VzcGVuZGVkID0gMTsKK30KKworc3RhdGljIHZvaWQKK2V0aF9yZXN1bWUgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IGV0aF9kZXYJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCk7CisKKwlERUJVRyAoZGV2LCAicmVzdW1lXG4iKTsKKwlkZXYtPnN1c3BlbmRlZCA9IDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgZXRoX2RyaXZlciA9IHsKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKwkuc3BlZWQJCT0gVVNCX1NQRUVEX0hJR0gsCisjZWxzZQorCS5zcGVlZAkJPSBVU0JfU1BFRURfRlVMTCwKKyNlbmRpZgorCS5mdW5jdGlvbgk9IChjaGFyICopIGRyaXZlcl9kZXNjLAorCS5iaW5kCQk9IGV0aF9iaW5kLAorCS51bmJpbmQJCT0gZXRoX3VuYmluZCwKKworCS5zZXR1cAkJPSBldGhfc2V0dXAsCisJLmRpc2Nvbm5lY3QJPSBldGhfZGlzY29ubmVjdCwKKworCS5zdXNwZW5kCT0gZXRoX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBldGhfcmVzdW1lLAorCisJLmRyaXZlciAJPSB7CisJCS5uYW1lCQk9IChjaGFyICopIHNob3J0bmFtZSwKKwkJLy8gLnNodXRkb3duID0gLi4uCisJCS8vIC5zdXNwZW5kID0gLi4uCisJCS8vIC5yZXN1bWUgPSAuLi4KKwl9LAorfTsKKworTU9EVUxFX0RFU0NSSVBUSU9OIChEUklWRVJfREVTQyk7CitNT0RVTEVfQVVUSE9SICgiRGF2aWQgQnJvd25lbGwsIEJlbmVkaWt0IFNwYW5nZXIiKTsKK01PRFVMRV9MSUNFTlNFICgiR1BMIik7CisKKworc3RhdGljIGludCBfX2luaXQgaW5pdCAodm9pZCkKK3sKKwlyZXR1cm4gdXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIgKCZldGhfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0IChpbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXAgKHZvaWQpCit7CisJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciAoJmV0aF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQgKGNsZWFudXApOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg1N2YwZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwpAQCAtMCwwICsxLDQxMzkgQEAKKy8qCisgKiBmaWxlX3N0b3JhZ2UuYyAtLSBGaWxlLWJhY2tlZCBVU0IgU3RvcmFnZSBHYWRnZXQsIGZvciBVU0IgZGV2ZWxvcG1lbnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSBBbGFuIFN0ZXJuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbWF5IG5vdCBiZSB1c2VkCisgKiAgICB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFMVEVSTkFUSVZFTFksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoYXQgTGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUworICogSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworLyoKKyAqIFRoZSBGaWxlLWJhY2tlZCBTdG9yYWdlIEdhZGdldCBhY3RzIGFzIGEgVVNCIE1hc3MgU3RvcmFnZSBkZXZpY2UsCisgKiBhcHBlYXJpbmcgdG8gdGhlIGhvc3QgYXMgYSBkaXNrIGRyaXZlLiAgSW4gYWRkaXRpb24gdG8gcHJvdmlkaW5nIGFuCisgKiBleGFtcGxlIG9mIGEgZ2VudWluZWx5IHVzZWZ1bCBnYWRnZXQgZHJpdmVyIGZvciBhIFVTQiBkZXZpY2UsIGl0IGFsc28KKyAqIGlsbHVzdHJhdGVzIGEgdGVjaG5pcXVlIG9mIGRvdWJsZS1idWZmZXJpbmcgZm9yIGluY3JlYXNlZCB0aHJvdWdocHV0LgorICogTGFzdCBidXQgbm90IGxlYXN0LCBpdCBnaXZlcyBhbiBlYXN5IHdheSB0byBwcm9iZSB0aGUgYmVoYXZpb3Igb2YgdGhlCisgKiBNYXNzIFN0b3JhZ2UgZHJpdmVycyBpbiBhIFVTQiBob3N0LgorICoKKyAqIEJhY2tpbmcgc3RvcmFnZSBpcyBwcm92aWRlZCBieSBhIHJlZ3VsYXIgZmlsZSBvciBhIGJsb2NrIGRldmljZSwgc3BlY2lmaWVkCisgKiBieSB0aGUgImZpbGUiIG1vZHVsZSBwYXJhbWV0ZXIuICBBY2Nlc3MgY2FuIGJlIGxpbWl0ZWQgdG8gcmVhZC1vbmx5IGJ5CisgKiBzZXR0aW5nIHRoZSBvcHRpb25hbCAicm8iIG1vZHVsZSBwYXJhbWV0ZXIuICBUaGUgZ2FkZ2V0IHdpbGwgaW5kaWNhdGUgdGhhdAorICogaXQgaGFzIHJlbW92YWJsZSBtZWRpYSBpZiB0aGUgb3B0aW9uYWwgInJlbW92YWJsZSIgbW9kdWxlIHBhcmFtZXRlciBpcyBzZXQuCisgKgorICogVGhlIGdhZGdldCBzdXBwb3J0cyB0aGUgQ29udHJvbC1CdWxrIChDQiksIENvbnRyb2wtQnVsay1JbnRlcnJ1cHQgKENCSSksCisgKiBhbmQgQnVsay1Pbmx5IChhbHNvIGtub3duIGFzIEJ1bGstQnVsay1CdWxrIG9yIEJCQikgdHJhbnNwb3J0cywgc2VsZWN0ZWQKKyAqIGJ5IHRoZSBvcHRpb25hbCAidHJhbnNwb3J0IiBtb2R1bGUgcGFyYW1ldGVyLiAgSXQgYWxzbyBzdXBwb3J0cyB0aGUKKyAqIGZvbGxvd2luZyBwcm90b2NvbHM6IFJCQyAoMHgwMSksIEFUQVBJIG9yIFNGRi04MDIwaSAoMHgwMiksIFFJQy0xNTcgKDBjMDMpLAorICogVUZJICgweDA0KSwgU0ZGLTgwNzBpICgweDA1KSwgYW5kIHRyYW5zcGFyZW50IFNDU0kgKDB4MDYpLCBzZWxlY3RlZCBieQorICogdGhlIG9wdGlvbmFsICJwcm90b2NvbCIgbW9kdWxlIHBhcmFtZXRlci4gIEluIGFkZGl0aW9uLCB0aGUgZGVmYXVsdAorICogVmVuZG9yIElELCBQcm9kdWN0IElELCBhbmQgcmVsZWFzZSBudW1iZXIgY2FuIGJlIG92ZXJyaWRkZW4uCisgKgorICogVGhlcmUgaXMgc3VwcG9ydCBmb3IgbXVsdGlwbGUgbG9naWNhbCB1bml0cyAoTFVOcyksIGVhY2ggb2Ygd2hpY2ggaGFzCisgKiBpdHMgb3duIGJhY2tpbmcgZmlsZS4gIFRoZSBudW1iZXIgb2YgTFVOcyBjYW4gYmUgc2V0IHVzaW5nIHRoZSBvcHRpb25hbAorICogImx1bnMiIG1vZHVsZSBwYXJhbWV0ZXIgKGFueXdoZXJlIGZyb20gMSB0byA4KSwgYW5kIHRoZSBjb3JyZXNwb25kaW5nCisgKiBmaWxlcyBhcmUgc3BlY2lmaWVkIHVzaW5nIGNvbW1hLXNlcGFyYXRlZCBsaXN0cyBmb3IgImZpbGUiIGFuZCAicm8iLgorICogVGhlIGRlZmF1bHQgbnVtYmVyIG9mIExVTnMgaXMgdGFrZW4gZnJvbSB0aGUgbnVtYmVyIG9mICJmaWxlIiBlbGVtZW50czsKKyAqIGl0IGlzIDEgaWYgImZpbGUiIGlzIG5vdCBnaXZlbi4gIElmICJyZW1vdmFibGUiIGlzIG5vdCBzZXQgdGhlbiBhIGJhY2tpbmcKKyAqIGZpbGUgbXVzdCBiZSBzcGVjaWZpZWQgZm9yIGVhY2ggTFVOLiAgSWYgaXQgaXMgc2V0LCB0aGVuIGFuIHVuc3BlY2lmaWVkCisgKiBvciBlbXB0eSBiYWNraW5nIGZpbGVuYW1lIG1lYW5zIHRoZSBMVU4ncyBtZWRpdW0gaXMgbm90IGxvYWRlZC4KKyAqCisgKiBSZXF1aXJlbWVudHMgYXJlIG1vZGVzdDsgb25seSBhIGJ1bGstaW4gYW5kIGEgYnVsay1vdXQgZW5kcG9pbnQgYXJlCisgKiBuZWVkZWQgKGFuIGludGVycnVwdC1vdXQgZW5kcG9pbnQgaXMgYWxzbyBuZWVkZWQgZm9yIENCSSkuICBUaGUgbWVtb3J5CisgKiByZXF1aXJlbWVudCBhbW91bnRzIHRvIHR3byAxNksgYnVmZmVycywgc2l6ZSBjb25maWd1cmFibGUgYnkgYSBwYXJhbWV0ZXIuCisgKiBTdXBwb3J0IGlzIGluY2x1ZGVkIGZvciBib3RoIGZ1bGwtc3BlZWQgYW5kIGhpZ2gtc3BlZWQgb3BlcmF0aW9uLgorICoKKyAqIE1vZHVsZSBvcHRpb25zOgorICoKKyAqCWZpbGU9ZmlsZW5hbWVbLGZpbGVuYW1lLi4uXQorICoJCQkJUmVxdWlyZWQgaWYgInJlbW92YWJsZSIgaXMgbm90IHNldCwgbmFtZXMgb2YKKyAqCQkJCQl0aGUgZmlsZXMgb3IgYmxvY2sgZGV2aWNlcyB1c2VkIGZvcgorICoJCQkJCWJhY2tpbmcgc3RvcmFnZQorICoJcm89YlssYi4uLl0JCURlZmF1bHQgZmFsc2UsIGJvb2xlYW5zIGZvciByZWFkLW9ubHkgYWNjZXNzCisgKglyZW1vdmFibGUJCURlZmF1bHQgZmFsc2UsIGJvb2xlYW4gZm9yIHJlbW92YWJsZSBtZWRpYQorICoJbHVucz1OCQkJRGVmYXVsdCBOID0gbnVtYmVyIG9mIGZpbGVuYW1lcywgbnVtYmVyIG9mCisgKgkJCQkJTFVOcyB0byBzdXBwb3J0CisgKgl0cmFuc3BvcnQ9WFhYCQlEZWZhdWx0IEJCQiwgdHJhbnNwb3J0IG5hbWUgKENCLCBDQkksIG9yIEJCQikKKyAqCXByb3RvY29sPVlZWQkJRGVmYXVsdCBTQ1NJLCBwcm90b2NvbCBuYW1lIChSQkMsIDgwMjAgb3IKKyAqCQkJCQlBVEFQSSwgUUlDLCBVRkksIDgwNzAsIG9yIFNDU0k7CisgKgkJCQkJYWxzbyAxIC0gNikKKyAqCXZlbmRvcj0weFZWVlYJCURlZmF1bHQgMHgwNTI1IChOZXRDaGlwKSwgVVNCIFZlbmRvciBJRAorICoJcHJvZHVjdD0weFBQUFAJCURlZmF1bHQgMHhhNGE1IChGU0cpLCBVU0IgUHJvZHVjdCBJRAorICoJcmVsZWFzZT0weFJSUlIJCU92ZXJyaWRlIHRoZSBVU0IgcmVsZWFzZSBudW1iZXIgKGJjZERldmljZSkKKyAqCWJ1Zmxlbj1OCQlEZWZhdWx0IE49MTYzODQsIGJ1ZmZlciBzaXplIHVzZWQgKHdpbGwgYmUKKyAqCQkJCQlyb3VuZGVkIGRvd24gdG8gYSBtdWx0aXBsZSBvZgorICoJCQkJCVBBR0VfQ0FDSEVfU0laRSkKKyAqCXN0YWxsCQkJRGVmYXVsdCBkZXRlcm1pbmVkIGFjY29yZGluZyB0byB0aGUgdHlwZSBvZgorICoJCQkJCVVTQiBkZXZpY2UgY29udHJvbGxlciAodXN1YWxseSB0cnVlKSwKKyAqCQkJCQlib29sZWFuIHRvIHBlcm1pdCB0aGUgZHJpdmVyIHRvIGhhbHQKKyAqCQkJCQlidWxrIGVuZHBvaW50cworICoKKyAqIElmIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgaXMgbm90IHNldCwgb25seSB0aGUgImZpbGUiLCAicm8iLAorICogInJlbW92YWJsZSIsIGFuZCAibHVucyIgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOyBkZWZhdWx0IHZhbHVlcyBhcmUgdXNlZAorICogZm9yIGV2ZXJ5dGhpbmcgZWxzZS4KKyAqCisgKiBUaGUgcGF0aG5hbWVzIG9mIHRoZSBiYWNraW5nIGZpbGVzIGFuZCB0aGUgcm8gc2V0dGluZ3MgYXJlIGF2YWlsYWJsZSBpbgorICogdGhlIGF0dHJpYnV0ZSBmaWxlcyAiZmlsZSIgYW5kICJybyIgaW4gdGhlIGx1bjxuPiBzdWJkaXJlY3Rvcnkgb2YgdGhlCisgKiBnYWRnZXQncyBzeXNmcyBkaXJlY3RvcnkuICBJZiB0aGUgInJlbW92YWJsZSIgb3B0aW9uIGlzIHNldCwgd3JpdGluZyB0bworICogdGhlc2UgZmlsZXMgd2lsbCBzaW11bGF0ZSBlamVjdGluZy9sb2FkaW5nIHRoZSBtZWRpdW0gKHdyaXRpbmcgYW4gZW1wdHkKKyAqIGxpbmUgbWVhbnMgZWplY3QpIGFuZCBhZGp1c3RpbmcgYSB3cml0ZS1lbmFibGUgdGFiLiAgQ2hhbmdlcyB0byB0aGUgcm8KKyAqIHNldHRpbmcgYXJlIG5vdCBhbGxvd2VkIHdoZW4gdGhlIG1lZGl1bSBpcyBsb2FkZWQuCisgKgorICogVGhpcyBnYWRnZXQgZHJpdmVyIGlzIGhlYXZpbHkgYmFzZWQgb24gIkdhZGdldCBaZXJvIiBieSBEYXZpZCBCcm93bmVsbC4KKyAqLworCisKKy8qCisgKgkJCQlEcml2ZXIgRGVzaWduCisgKgorICogVGhlIEZTRyBkcml2ZXIgaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4gIFRoZXJlIGlzIGEgbWFpbiBrZXJuZWwKKyAqIHRocmVhZCB0aGF0IGhhbmRsZXMgbW9zdCBvZiB0aGUgd29yay4gIEludGVycnVwdCByb3V0aW5lcyBmaWVsZAorICogY2FsbGJhY2tzIGZyb20gdGhlIGNvbnRyb2xsZXIgZHJpdmVyOiBidWxrLSBhbmQgaW50ZXJydXB0LXJlcXVlc3QKKyAqIGNvbXBsZXRpb24gbm90aWZpY2F0aW9ucywgZW5kcG9pbnQtMCBldmVudHMsIGFuZCBkaXNjb25uZWN0IGV2ZW50cy4KKyAqIENvbXBsZXRpb24gZXZlbnRzIGFyZSBwYXNzZWQgdG8gdGhlIG1haW4gdGhyZWFkIGJ5IHdha2V1cCBjYWxscy4gIE1hbnkKKyAqIGVwMCByZXF1ZXN0cyBhcmUgaGFuZGxlZCBhdCBpbnRlcnJ1cHQgdGltZSwgYnV0IFNldEludGVyZmFjZSwKKyAqIFNldENvbmZpZ3VyYXRpb24sIGFuZCBkZXZpY2UgcmVzZXQgcmVxdWVzdHMgYXJlIGZvcndhcmRlZCB0byB0aGUKKyAqIHRocmVhZCBpbiB0aGUgZm9ybSBvZiAiZXhjZXB0aW9ucyIgdXNpbmcgU0lHVVNSMSBzaWduYWxzIChzaW5jZSB0aGV5CisgKiBzaG91bGQgaW50ZXJydXB0IGFueSBvbmdvaW5nIGZpbGUgSS9PIG9wZXJhdGlvbnMpLgorICoKKyAqIFRoZSB0aHJlYWQncyBtYWluIHJvdXRpbmUgaW1wbGVtZW50cyB0aGUgc3RhbmRhcmQgY29tbWFuZC9kYXRhL3N0YXR1cworICogcGFydHMgb2YgYSBTQ1NJIGludGVyYWN0aW9uLiAgSXQgYW5kIGl0cyBzdWJyb3V0aW5lcyBhcmUgZnVsbCBvZiB0ZXN0cworICogZm9yIHBlbmRpbmcgc2lnbmFscy9leGNlcHRpb25zIC0tIGFsbCB0aGlzIHBvbGxpbmcgaXMgbmVjZXNzYXJ5IHNpbmNlCisgKiB0aGUga2VybmVsIGhhcyBubyBzZXRqbXAvbG9uZ2ptcCBlcXVpdmFsZW50cy4gIChNYXliZSB0aGlzIGlzIGFuCisgKiBpbmRpY2F0aW9uIHRoYXQgdGhlIGRyaXZlciByZWFsbHkgd2FudHMgdG8gYmUgcnVubmluZyBpbiB1c2Vyc3BhY2UuKQorICogQW4gaW1wb3J0YW50IHBvaW50IGlzIHRoYXQgc28gbG9uZyBhcyB0aGUgdGhyZWFkIGlzIGFsaXZlIGl0IGtlZXBzIGFuCisgKiBvcGVuIHJlZmVyZW5jZSB0byB0aGUgYmFja2luZyBmaWxlLiAgVGhpcyB3aWxsIHByZXZlbnQgdW5tb3VudGluZworICogdGhlIGJhY2tpbmcgZmlsZSdzIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBhbmQgY291bGQgY2F1c2UgcHJvYmxlbXMKKyAqIGR1cmluZyBzeXN0ZW0gc2h1dGRvd24sIGZvciBleGFtcGxlLiAgVG8gcHJldmVudCBzdWNoIHByb2JsZW1zLCB0aGUKKyAqIHRocmVhZCBjYXRjaGVzIElOVCwgVEVSTSwgYW5kIEtJTEwgc2lnbmFscyBhbmQgY29udmVydHMgdGhlbSBpbnRvCisgKiBhbiBFWElUIGV4Y2VwdGlvbi4KKyAqCisgKiBJbiBub3JtYWwgb3BlcmF0aW9uIHRoZSBtYWluIHRocmVhZCBpcyBzdGFydGVkIGR1cmluZyB0aGUgZ2FkZ2V0J3MKKyAqIGZzZ19iaW5kKCkgY2FsbGJhY2sgYW5kIHN0b3BwZWQgZHVyaW5nIGZzZ191bmJpbmQoKS4gIEJ1dCBpdCBjYW4gYWxzbworICogZXhpdCB3aGVuIGl0IHJlY2VpdmVzIGEgc2lnbmFsLCBhbmQgdGhlcmUncyBubyBwb2ludCBsZWF2aW5nIHRoZQorICogZ2FkZ2V0IHJ1bm5pbmcgd2hlbiB0aGUgdGhyZWFkIGlzIGRlYWQuICBTbyBqdXN0IGJlZm9yZSB0aGUgdGhyZWFkCisgKiBleGl0cywgaXQgZGVyZWdpc3RlcnMgdGhlIGdhZGdldCBkcml2ZXIuICBUaGlzIG1ha2VzIHRoaW5ncyBhIGxpdHRsZQorICogdHJpY2t5OiBUaGUgZHJpdmVyIGlzIGRlcmVnaXN0ZXJlZCBhdCB0d28gcGxhY2VzLCBhbmQgdGhlIGV4aXRpbmcKKyAqIHRocmVhZCBjYW4gaW5kaXJlY3RseSBjYWxsIGZzZ191bmJpbmQoKSB3aGljaCBpbiB0dXJuIGNhbiB0ZWxsIHRoZQorICogdGhyZWFkIHRvIGV4aXQuICBUaGUgZmlyc3QgcHJvYmxlbSBpcyByZXNvbHZlZCB0aHJvdWdoIHRoZSB1c2Ugb2YgdGhlCisgKiBSRUdJU1RFUkVEIGF0b21pYyBiaXRmbGFnOyB0aGUgZHJpdmVyIHdpbGwgb25seSBiZSBkZXJlZ2lzdGVyZWQgb25jZS4KKyAqIFRoZSBzZWNvbmQgcHJvYmxlbSBpcyByZXNvbHZlZCBieSBoYXZpbmcgZnNnX3VuYmluZCgpIGNoZWNrCisgKiBmc2ctPnN0YXRlOyBpdCB3b24ndCB0cnkgdG8gc3RvcCB0aGUgdGhyZWFkIGlmIHRoZSBzdGF0ZSBpcyBhbHJlYWR5CisgKiBGU0dfU1RBVEVfVEVSTUlOQVRFRC4KKyAqCisgKiBUbyBwcm92aWRlIG1heGltdW0gdGhyb3VnaHB1dCwgdGhlIGRyaXZlciB1c2VzIGEgY2lyY3VsYXIgcGlwZWxpbmUgb2YKKyAqIGJ1ZmZlciBoZWFkcyAoc3RydWN0IGZzZ19idWZmaGQpLiAgSW4gcHJpbmNpcGxlIHRoZSBwaXBlbGluZSBjYW4gYmUKKyAqIGFyYml0cmFyaWx5IGxvbmc7IGluIHByYWN0aWNlIHRoZSBiZW5lZml0cyBkb24ndCBqdXN0aWZ5IGhhdmluZyBtb3JlCisgKiB0aGFuIDIgc3RhZ2VzIChpLmUuLCBkb3VibGUgYnVmZmVyaW5nKS4gIEJ1dCBpdCBoZWxwcyB0byB0aGluayBvZiB0aGUKKyAqIHBpcGVsaW5lIGFzIGJlaW5nIGEgbG9uZyBvbmUuICBFYWNoIGJ1ZmZlciBoZWFkIGNvbnRhaW5zIGEgYnVsay1pbiBhbmQKKyAqIGEgYnVsay1vdXQgcmVxdWVzdCBwb2ludGVyIChzaW5jZSB0aGUgYnVmZmVyIGNhbiBiZSB1c2VkIGZvciBib3RoCisgKiBvdXRwdXQgYW5kIGlucHV0IC0tIGRpcmVjdGlvbnMgYWx3YXlzIGFyZSBnaXZlbiBmcm9tIHRoZSBob3N0J3MKKyAqIHBvaW50IG9mIHZpZXcpIGFzIHdlbGwgYXMgYSBwb2ludGVyIHRvIHRoZSBidWZmZXIgYW5kIHZhcmlvdXMgc3RhdGUKKyAqIHZhcmlhYmxlcy4KKyAqCisgKiBVc2Ugb2YgdGhlIHBpcGVsaW5lIGZvbGxvd3MgYSBzaW1wbGUgcHJvdG9jb2wuICBUaGVyZSBpcyBhIHZhcmlhYmxlCisgKiAoZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsKSB0aGF0IHBvaW50cyB0byB0aGUgbmV4dCBidWZmZXIgaGVhZCB0byB1c2UuCisgKiBBdCBhbnkgdGltZSB0aGF0IGJ1ZmZlciBoZWFkIG1heSBzdGlsbCBiZSBpbiB1c2UgZnJvbSBhbiBlYXJsaWVyCisgKiByZXF1ZXN0LCBzbyBlYWNoIGJ1ZmZlciBoZWFkIGhhcyBhIHN0YXRlIHZhcmlhYmxlIGluZGljYXRpbmcgd2hldGhlcgorICogaXQgaXMgRU1QVFksIEZVTEwsIG9yIEJVU1kuICBUeXBpY2FsIHVzZSBpbnZvbHZlcyB3YWl0aW5nIGZvciB0aGUKKyAqIGJ1ZmZlciBoZWFkIHRvIGJlIEVNUFRZLCBmaWxsaW5nIHRoZSBidWZmZXIgZWl0aGVyIGJ5IGZpbGUgSS9PIG9yIGJ5CisgKiBVU0IgSS9PIChkdXJpbmcgd2hpY2ggdGhlIGJ1ZmZlciBoZWFkIGlzIEJVU1kpLCBhbmQgbWFya2luZyB0aGUgYnVmZmVyCisgKiBoZWFkIEZVTEwgd2hlbiB0aGUgSS9PIGlzIGNvbXBsZXRlLiAgVGhlbiB0aGUgYnVmZmVyIHdpbGwgYmUgZW1wdGllZAorICogKGFnYWluIHBvc3NpYmx5IGJ5IFVTQiBJL08sIGR1cmluZyB3aGljaCBpdCBpcyBtYXJrZWQgQlVTWSkgYW5kCisgKiBmaW5hbGx5IG1hcmtlZCBFTVBUWSBhZ2FpbiAocG9zc2libHkgYnkgYSBjb21wbGV0aW9uIHJvdXRpbmUpLgorICoKKyAqIEEgbW9kdWxlIHBhcmFtZXRlciB0ZWxscyB0aGUgZHJpdmVyIHRvIGF2b2lkIHN0YWxsaW5nIHRoZSBidWxrCisgKiBlbmRwb2ludHMgd2hlcmV2ZXIgdGhlIHRyYW5zcG9ydCBzcGVjaWZpY2F0aW9uIGFsbG93cy4gIFRoaXMgaXMKKyAqIG5lY2Vzc2FyeSBmb3Igc29tZSBVRENzIGxpa2UgdGhlIFN1cGVySCwgd2hpY2ggY2Fubm90IHJlbGlhYmx5IGNsZWFyIGEKKyAqIGhhbHQgb24gYSBidWxrIGVuZHBvaW50LiAgSG93ZXZlciwgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzIHRoZQorICogQnVsay1vbmx5IHNwZWNpZmljYXRpb24gcmVxdWlyZXMgYSBzdGFsbC4gIEluIHN1Y2ggY2FzZXMgdGhlIGRyaXZlcgorICogd2lsbCBoYWx0IHRoZSBlbmRwb2ludCBhbmQgc2V0IGEgZmxhZyBpbmRpY2F0aW5nIHRoYXQgaXQgc2hvdWxkIGNsZWFyCisgKiB0aGUgaGFsdCBpbiBzb2Z0d2FyZSBkdXJpbmcgdGhlIG5leHQgZGV2aWNlIHJlc2V0LiAgSG9wZWZ1bGx5IHRoaXMKKyAqIHdpbGwgcGVybWl0IGV2ZXJ5dGhpbmcgdG8gd29yayBjb3JyZWN0bHkuICBGdXJ0aGVybW9yZSwgYWx0aG91Z2ggdGhlCisgKiBzcGVjaWZpY2F0aW9uIGFsbG93cyB0aGUgYnVsay1vdXQgZW5kcG9pbnQgdG8gaGFsdCB3aGVuIHRoZSBob3N0IHNlbmRzCisgKiB0b28gbXVjaCBkYXRhLCBpbXBsZW1lbnRpbmcgdGhpcyB3b3VsZCBjYXVzZSBhbiB1bmF2b2lkYWJsZSByYWNlLgorICogVGhlIGRyaXZlciB3aWxsIGFsd2F5cyB1c2UgdGhlICJuby1zdGFsbCIgYXBwcm9hY2ggZm9yIE9VVCB0cmFuc2ZlcnMuCisgKgorICogT25lIHN1YnRsZSBwb2ludCBjb25jZXJucyBzZW5kaW5nIHN0YXR1cy1zdGFnZSByZXNwb25zZXMgZm9yIGVwMAorICogcmVxdWVzdHMuICBTb21lIG9mIHRoZXNlIHJlcXVlc3RzLCBzdWNoIGFzIGRldmljZSByZXNldCwgY2FuIGludm9sdmUKKyAqIGludGVycnVwdGluZyBhbiBvbmdvaW5nIGZpbGUgSS9PIG9wZXJhdGlvbiwgd2hpY2ggbWlnaHQgdGFrZSBhbgorICogYXJiaXRyYXJpbHkgbG9uZyB0aW1lLiAgRHVyaW5nIHRoYXQgZGVsYXkgdGhlIGhvc3QgbWlnaHQgZ2l2ZSB1cCBvbgorICogdGhlIG9yaWdpbmFsIGVwMCByZXF1ZXN0IGFuZCBpc3N1ZSBhIG5ldyBvbmUuICBXaGVuIHRoYXQgaGFwcGVucyB0aGUKKyAqIGRyaXZlciBzaG91bGQgbm90IG5vdGlmeSB0aGUgaG9zdCBhYm91dCBjb21wbGV0aW9uIG9mIHRoZSBvcmlnaW5hbAorICogcmVxdWVzdCwgYXMgdGhlIGhvc3Qgd2lsbCBubyBsb25nZXIgYmUgd2FpdGluZyBmb3IgaXQuICBTbyB0aGUgZHJpdmVyCisgKiBhc3NpZ25zIHRvIGVhY2ggZXAwIHJlcXVlc3QgYSB1bmlxdWUgdGFnLCBhbmQgaXQga2VlcHMgdHJhY2sgb2YgdGhlCisgKiB0YWcgdmFsdWUgb2YgdGhlIHJlcXVlc3QgYXNzb2NpYXRlZCB3aXRoIGEgbG9uZy1ydW5uaW5nIGV4Y2VwdGlvbgorICogKGRldmljZS1yZXNldCwgaW50ZXJmYWNlLWNoYW5nZSwgb3IgY29uZmlndXJhdGlvbi1jaGFuZ2UpLiAgV2hlbiB0aGUKKyAqIGV4Y2VwdGlvbiBoYW5kbGVyIGlzIGZpbmlzaGVkLCB0aGUgc3RhdHVzLXN0YWdlIHJlc3BvbnNlIGlzIHN1Ym1pdHRlZAorICogb25seSBpZiB0aGUgY3VycmVudCBlcDAgcmVxdWVzdCB0YWcgaXMgZXF1YWwgdG8gdGhlIGV4Y2VwdGlvbiByZXF1ZXN0CisgKiB0YWcuICBUaHVzIG9ubHkgdGhlIG1vc3QgcmVjZW50bHkgcmVjZWl2ZWQgZXAwIHJlcXVlc3Qgd2lsbCBnZXQgYQorICogc3RhdHVzLXN0YWdlIHJlc3BvbnNlLgorICoKKyAqIFdhcm5pbmc6IFRoaXMgZHJpdmVyIHNvdXJjZSBmaWxlIGlzIHRvbyBsb25nLiAgSXQgb3VnaHQgdG8gYmUgc3BsaXQgdXAKKyAqIGludG8gYSBoZWFkZXIgZmlsZSBwbHVzIGFib3V0IDMgc2VwYXJhdGUgLmMgZmlsZXMsIHRvIGhhbmRsZSB0aGUgZGV0YWlscworICogb2YgdGhlIEdhZGdldCwgVVNCIE1hc3MgU3RvcmFnZSwgYW5kIFNDU0kgcHJvdG9jb2xzLgorICovCisKKworI3VuZGVmIERFQlVHCisjdW5kZWYgVkVSQk9TRQorI3VuZGVmIERVTVBfTVNHUworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L3VzYl9jaDkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfZ2FkZ2V0Lmg+CisKKyNpbmNsdWRlICJnYWRnZXRfY2hpcHMuaCIKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIERSSVZFUl9ERVNDCQkiRmlsZS1iYWNrZWQgU3RvcmFnZSBHYWRnZXQiCisjZGVmaW5lIERSSVZFUl9OQU1FCQkiZ19maWxlX3N0b3JhZ2UiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkiMjAgT2N0b2JlciAyMDA0IgorCitzdGF0aWMgY29uc3QgY2hhciBsb25nbmFtZVtdID0gRFJJVkVSX0RFU0M7CitzdGF0aWMgY29uc3QgY2hhciBzaG9ydG5hbWVbXSA9IERSSVZFUl9OQU1FOworCitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0FVVEhPUigiQWxhbiBTdGVybiIpOworTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOworCisvKiBUaGFua3MgdG8gTmV0Q2hpcCBUZWNobm9sb2dpZXMgZm9yIGRvbmF0aW5nIHRoaXMgcHJvZHVjdCBJRC4KKyAqCisgKiBETyBOT1QgUkVVU0UgVEhFU0UgSURzIHdpdGggYW55IG90aGVyIGRyaXZlciEhICBFdmVyISEKKyAqIEluc3RlYWQ6ICBhbGxvY2F0ZSB5b3VyIG93biwgdXNpbmcgbm9ybWFsIFVTQi1JRiBwcm9jZWR1cmVzLiAqLworI2RlZmluZSBEUklWRVJfVkVORE9SX0lECTB4MDUyNQkvLyBOZXRDaGlwCisjZGVmaW5lIERSSVZFUl9QUk9EVUNUX0lECTB4YTRhNQkvLyBMaW51eC1VU0IgRmlsZS1iYWNrZWQgU3RvcmFnZSBHYWRnZXQKKworCisvKgorICogVGhpcyBkcml2ZXIgYXNzdW1lcyBzZWxmLXBvd2VyZWQgaGFyZHdhcmUgYW5kIGhhcyBubyB3YXkgZm9yIHVzZXJzIHRvCisgKiB0cmlnZ2VyIHJlbW90ZSB3YWtldXAuICBJdCB1c2VzIGF1dG9jb25maWd1cmF0aW9uIHRvIHNlbGVjdCBlbmRwb2ludHMKKyAqIGFuZCBlbmRwb2ludCBhZGRyZXNzZXMuCisgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIHhwcmludGsoZixsZXZlbCxmbXQsYXJncy4uLikgXAorCWRldl9wcmludGsobGV2ZWwgLCAmKGYpLT5nYWRnZXQtPmRldiAsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIHlwcmludGsobCxsZXZlbCxmbXQsYXJncy4uLikgXAorCWRldl9wcmludGsobGV2ZWwgLCAmKGwpLT5kZXYgLCBmbXQgLCAjIyBhcmdzKQorCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgREJHKGZzZyxmbXQsYXJncy4uLikgXAorCXhwcmludGsoZnNnICwgS0VSTl9ERUJVRyAsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIExEQkcobHVuLGZtdCxhcmdzLi4uKSBcCisJeXByaW50ayhsdW4gLCBLRVJOX0RFQlVHICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgTURCRyhmbXQsYXJncy4uLikgXAorCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6ICIgZm10ICwgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIERCRyhmc2csZm10LGFyZ3MuLi4pIFwKKwlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIExEQkcobHVuLGZtdCxhcmdzLi4uKSBcCisJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBNREJHKGZtdCxhcmdzLi4uKSBcCisJZG8geyB9IHdoaWxlICgwKQorI3VuZGVmIFZFUkJPU0UKKyN1bmRlZiBEVU1QX01TR1MKKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgVkVSQk9TRQorI2RlZmluZSBWREJHCURCRworI2RlZmluZSBWTERCRwlMREJHCisjZWxzZQorI2RlZmluZSBWREJHKGZzZyxmbXQsYXJncy4uLikgXAorCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgVkxEQkcobHVuLGZtdCxhcmdzLi4uKSBcCisJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmIC8qIFZFUkJPU0UgKi8KKworI2RlZmluZSBFUlJPUihmc2csZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGZzZyAsIEtFUk5fRVJSICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgTEVSUk9SKGx1bixmbXQsYXJncy4uLikgXAorCXlwcmludGsobHVuICwgS0VSTl9FUlIgLCBmbXQgLCAjIyBhcmdzKQorCisjZGVmaW5lIFdBUk4oZnNnLGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhmc2cgLCBLRVJOX1dBUk5JTkcgLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBMV0FSTihsdW4sZm10LGFyZ3MuLi4pIFwKKwl5cHJpbnRrKGx1biAsIEtFUk5fV0FSTklORyAsIGZtdCAsICMjIGFyZ3MpCisKKyNkZWZpbmUgSU5GTyhmc2csZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGZzZyAsIEtFUk5fSU5GTyAsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIExJTkZPKGx1bixmbXQsYXJncy4uLikgXAorCXlwcmludGsobHVuICwgS0VSTl9JTkZPICwgZm10ICwgIyMgYXJncykKKworI2RlZmluZSBNSU5GTyhmbXQsYXJncy4uLikgXAorCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIjogIiBmbXQgLCAjIyBhcmdzKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEVuY2Fwc3VsYXRlIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHNldHRpbmdzICovCisKKyNkZWZpbmUgTUFYX0xVTlMJOAorCisJLyogQXJnZ2ghICBUaGVyZSBzaG91bGQgYmUgYSBtb2R1bGVfcGFyYW1fYXJyYXlfbmFtZWQgbWFjcm8hICovCitzdGF0aWMgY2hhcgkJKmZpbGVbTUFYX0xVTlNdID0ge05VTEwsIH07CitzdGF0aWMgaW50CQlyb1tNQVhfTFVOU10gPSB7MCwgfTsKKworc3RhdGljIHN0cnVjdCB7CisJaW50CQludW1fZmlsZW5hbWVzOworCWludAkJbnVtX3JvczsKKwl1bnNpZ25lZCBpbnQJbmx1bnM7CisKKwljaGFyCQkqdHJhbnNwb3J0X3Bhcm07CisJY2hhcgkJKnByb3RvY29sX3Bhcm07CisJaW50CQlyZW1vdmFibGU7CisJdW5zaWduZWQgc2hvcnQJdmVuZG9yOworCXVuc2lnbmVkIHNob3J0CXByb2R1Y3Q7CisJdW5zaWduZWQgc2hvcnQJcmVsZWFzZTsKKwl1bnNpZ25lZCBpbnQJYnVmbGVuOworCWludAkJY2FuX3N0YWxsOworCisJaW50CQl0cmFuc3BvcnRfdHlwZTsKKwljaGFyCQkqdHJhbnNwb3J0X25hbWU7CisJaW50CQlwcm90b2NvbF90eXBlOworCWNoYXIJCSpwcm90b2NvbF9uYW1lOworCit9IG1vZF9kYXRhID0gewkJCQkJLy8gRGVmYXVsdCB2YWx1ZXMKKwkudHJhbnNwb3J0X3Bhcm0JCT0gIkJCQiIsCisJLnByb3RvY29sX3Bhcm0JCT0gIlNDU0kiLAorCS5yZW1vdmFibGUJCT0gMCwKKwkudmVuZG9yCQkJPSBEUklWRVJfVkVORE9SX0lELAorCS5wcm9kdWN0CQk9IERSSVZFUl9QUk9EVUNUX0lELAorCS5yZWxlYXNlCQk9IDB4ZmZmZiwJLy8gVXNlIGNvbnRyb2xsZXIgY2hpcCB0eXBlCisJLmJ1ZmxlbgkJCT0gMTYzODQsCisJLmNhbl9zdGFsbAkJPSAxLAorCX07CisKKworbW9kdWxlX3BhcmFtX2FycmF5KGZpbGUsIGNoYXJwLCAmbW9kX2RhdGEubnVtX2ZpbGVuYW1lcywgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGZpbGUsICJuYW1lcyBvZiBiYWNraW5nIGZpbGVzIG9yIGRldmljZXMiKTsKKworbW9kdWxlX3BhcmFtX2FycmF5KHJvLCBib29sLCAmbW9kX2RhdGEubnVtX3JvcywgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHJvLCAidHJ1ZSB0byBmb3JjZSByZWFkLW9ubHkiKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKGx1bnMsIG1vZF9kYXRhLm5sdW5zLCB1aW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MobHVucywgIm51bWJlciBvZiBMVU5zIik7CisKK21vZHVsZV9wYXJhbV9uYW1lZChyZW1vdmFibGUsIG1vZF9kYXRhLnJlbW92YWJsZSwgYm9vbCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHJlbW92YWJsZSwgInRydWUgdG8gc2ltdWxhdGUgcmVtb3ZhYmxlIG1lZGlhIik7CisKKworLyogSW4gdGhlIG5vbi1URVNUIHZlcnNpb24sIG9ubHkgdGhlIG1vZHVsZSBwYXJhbWV0ZXJzIGxpc3RlZCBhYm92ZQorICogYXJlIGF2YWlsYWJsZS4gKi8KKyNpZmRlZiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUCisKK21vZHVsZV9wYXJhbV9uYW1lZCh0cmFuc3BvcnQsIG1vZF9kYXRhLnRyYW5zcG9ydF9wYXJtLCBjaGFycCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHRyYW5zcG9ydCwgInR5cGUgb2YgdHJhbnNwb3J0IChCQkIsIENCSSwgb3IgQ0IpIik7CisKK21vZHVsZV9wYXJhbV9uYW1lZChwcm90b2NvbCwgbW9kX2RhdGEucHJvdG9jb2xfcGFybSwgY2hhcnAsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhwcm90b2NvbCwgInR5cGUgb2YgcHJvdG9jb2wgKFJCQywgODAyMCwgUUlDLCBVRkksICIKKwkJIjgwNzAsIG9yIFNDU0kpIik7CisKK21vZHVsZV9wYXJhbV9uYW1lZCh2ZW5kb3IsIG1vZF9kYXRhLnZlbmRvciwgdXNob3J0LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0ModmVuZG9yLCAiVVNCIFZlbmRvciBJRCIpOworCittb2R1bGVfcGFyYW1fbmFtZWQocHJvZHVjdCwgbW9kX2RhdGEucHJvZHVjdCwgdXNob3J0LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MocHJvZHVjdCwgIlVTQiBQcm9kdWN0IElEIik7CisKK21vZHVsZV9wYXJhbV9uYW1lZChyZWxlYXNlLCBtb2RfZGF0YS5yZWxlYXNlLCB1c2hvcnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhyZWxlYXNlLCAiVVNCIHJlbGVhc2UgbnVtYmVyIik7CisKK21vZHVsZV9wYXJhbV9uYW1lZChidWZsZW4sIG1vZF9kYXRhLmJ1ZmxlbiwgdWludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGJ1ZmxlbiwgIkkvTyBidWZmZXIgc2l6ZSIpOworCittb2R1bGVfcGFyYW1fbmFtZWQoc3RhbGwsIG1vZF9kYXRhLmNhbl9zdGFsbCwgYm9vbCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHN0YWxsLCAiZmFsc2UgdG8gcHJldmVudCBidWxrIHN0YWxscyIpOworCisjZW5kaWYgLyogQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFVTQiBwcm90b2NvbCB2YWx1ZSA9IHRoZSB0cmFuc3BvcnQgbWV0aG9kICovCisjZGVmaW5lIFVTQl9QUl9DQkkJMHgwMAkJLy8gQ29udHJvbC9CdWxrL0ludGVycnVwdAorI2RlZmluZSBVU0JfUFJfQ0IJMHgwMQkJLy8gQ29udHJvbC9CdWxrIHcvbyBpbnRlcnJ1cHQKKyNkZWZpbmUgVVNCX1BSX0JVTEsJMHg1MAkJLy8gQnVsay1vbmx5CisKKy8qIFVTQiBzdWJjbGFzcyB2YWx1ZSA9IHRoZSBwcm90b2NvbCBlbmNhcHN1bGF0aW9uICovCisjZGVmaW5lIFVTQl9TQ19SQkMJMHgwMQkJLy8gUmVkdWNlZCBCbG9jayBDb21tYW5kcyAoZmxhc2gpCisjZGVmaW5lIFVTQl9TQ184MDIwCTB4MDIJCS8vIFNGRi04MDIwaSwgTU1DLTIsIEFUQVBJIChDRC1ST00pCisjZGVmaW5lIFVTQl9TQ19RSUMJMHgwMwkJLy8gUUlDLTE1NyAodGFwZSkKKyNkZWZpbmUgVVNCX1NDX1VGSQkweDA0CQkvLyBVRkkgKGZsb3BweSkKKyNkZWZpbmUgVVNCX1NDXzgwNzAJMHgwNQkJLy8gU0ZGLTgwNzBpIChyZW1vdmFibGUpCisjZGVmaW5lIFVTQl9TQ19TQ1NJCTB4MDYJCS8vIFRyYW5zcGFyZW50IFNDU0kKKworLyogQnVsay1vbmx5IGRhdGEgc3RydWN0dXJlcyAqLworCisvKiBDb21tYW5kIEJsb2NrIFdyYXBwZXIgKi8KK3N0cnVjdCBidWxrX2NiX3dyYXAgeworCV9fbGUzMglTaWduYXR1cmU7CQkvLyBDb250YWlucyAnVVNCQycKKwl1MzIJVGFnOwkJCS8vIFVuaXF1ZSBwZXIgY29tbWFuZCBpZAorCV9fbGUzMglEYXRhVHJhbnNmZXJMZW5ndGg7CS8vIFNpemUgb2YgdGhlIGRhdGEKKwl1OAlGbGFnczsJCQkvLyBEaXJlY3Rpb24gaW4gYml0IDcKKwl1OAlMdW47CQkJLy8gTFVOIChub3JtYWxseSAwKQorCXU4CUxlbmd0aDsJCQkvLyBPZiB0aGUgQ0RCLCA8PSBNQVhfQ09NTUFORF9TSVpFCisJdTgJQ0RCWzE2XTsJCS8vIENvbW1hbmQgRGF0YSBCbG9jaworfTsKKworI2RlZmluZSBVU0JfQlVMS19DQl9XUkFQX0xFTgkzMQorI2RlZmluZSBVU0JfQlVMS19DQl9TSUcJCTB4NDM0MjUzNTUJLy8gU3BlbGxzIG91dCBVU0JDCisjZGVmaW5lIFVTQl9CVUxLX0lOX0ZMQUcJMHg4MAorCisvKiBDb21tYW5kIFN0YXR1cyBXcmFwcGVyICovCitzdHJ1Y3QgYnVsa19jc193cmFwIHsKKwlfX2xlMzIJU2lnbmF0dXJlOwkJLy8gU2hvdWxkID0gJ1VTQlMnCisJdTMyCVRhZzsJCQkvLyBTYW1lIGFzIG9yaWdpbmFsIGNvbW1hbmQKKwlfX2xlMzIJUmVzaWR1ZTsJCS8vIEFtb3VudCBub3QgdHJhbnNmZXJyZWQKKwl1OAlTdGF0dXM7CQkJLy8gU2VlIGJlbG93Cit9OworCisjZGVmaW5lIFVTQl9CVUxLX0NTX1dSQVBfTEVOCTEzCisjZGVmaW5lIFVTQl9CVUxLX0NTX1NJRwkJMHg1MzQyNTM1NQkvLyBTcGVsbHMgb3V0ICdVU0JTJworI2RlZmluZSBVU0JfU1RBVFVTX1BBU1MJCTAKKyNkZWZpbmUgVVNCX1NUQVRVU19GQUlMCQkxCisjZGVmaW5lIFVTQl9TVEFUVVNfUEhBU0VfRVJST1IJMgorCisvKiBCdWxrLW9ubHkgY2xhc3Mgc3BlY2lmaWMgcmVxdWVzdHMgKi8KKyNkZWZpbmUgVVNCX0JVTEtfUkVTRVRfUkVRVUVTVAkJMHhmZgorI2RlZmluZSBVU0JfQlVMS19HRVRfTUFYX0xVTl9SRVFVRVNUCTB4ZmUKKworCisvKiBDQkkgSW50ZXJydXB0IGRhdGEgc3RydWN0dXJlICovCitzdHJ1Y3QgaW50ZXJydXB0X2RhdGEgeworCXU4CWJUeXBlOworCXU4CWJWYWx1ZTsKK307CisKKyNkZWZpbmUgQ0JJX0lOVEVSUlVQVF9EQVRBX0xFTgkJMgorCisvKiBDQkkgQWNjZXB0IERldmljZS1TcGVjaWZpYyBDb21tYW5kIHJlcXVlc3QgKi8KKyNkZWZpbmUgVVNCX0NCSV9BRFNDX1JFUVVFU1QJCTB4MDAKKworCisjZGVmaW5lIE1BWF9DT01NQU5EX1NJWkUJMTYJLy8gTGVuZ3RoIG9mIGEgU0NTSSBDb21tYW5kIERhdGEgQmxvY2sKKworLyogU0NTSSBjb21tYW5kcyB0aGF0IHdlIHJlY29nbml6ZSAqLworI2RlZmluZSBTQ19GT1JNQVRfVU5JVAkJCTB4MDQKKyNkZWZpbmUgU0NfSU5RVUlSWQkJCTB4MTIKKyNkZWZpbmUgU0NfTU9ERV9TRUxFQ1RfNgkJMHgxNQorI2RlZmluZSBTQ19NT0RFX1NFTEVDVF8xMAkJMHg1NQorI2RlZmluZSBTQ19NT0RFX1NFTlNFXzYJCQkweDFhCisjZGVmaW5lIFNDX01PREVfU0VOU0VfMTAJCTB4NWEKKyNkZWZpbmUgU0NfUFJFVkVOVF9BTExPV19NRURJVU1fUkVNT1ZBTAkweDFlCisjZGVmaW5lIFNDX1JFQURfNgkJCTB4MDgKKyNkZWZpbmUgU0NfUkVBRF8xMAkJCTB4MjgKKyNkZWZpbmUgU0NfUkVBRF8xMgkJCTB4YTgKKyNkZWZpbmUgU0NfUkVBRF9DQVBBQ0lUWQkJMHgyNQorI2RlZmluZSBTQ19SRUFEX0ZPUk1BVF9DQVBBQ0lUSUVTCTB4MjMKKyNkZWZpbmUgU0NfUkVMRUFTRQkJCTB4MTcKKyNkZWZpbmUgU0NfUkVRVUVTVF9TRU5TRQkJMHgwMworI2RlZmluZSBTQ19SRVNFUlZFCQkJMHgxNgorI2RlZmluZSBTQ19TRU5EX0RJQUdOT1NUSUMJCTB4MWQKKyNkZWZpbmUgU0NfU1RBUlRfU1RPUF9VTklUCQkweDFiCisjZGVmaW5lIFNDX1NZTkNIUk9OSVpFX0NBQ0hFCQkweDM1CisjZGVmaW5lIFNDX1RFU1RfVU5JVF9SRUFEWQkJMHgwMAorI2RlZmluZSBTQ19WRVJJRlkJCQkweDJmCisjZGVmaW5lIFNDX1dSSVRFXzYJCQkweDBhCisjZGVmaW5lIFNDX1dSSVRFXzEwCQkJMHgyYQorI2RlZmluZSBTQ19XUklURV8xMgkJCTB4YWEKKworLyogU0NTSSBTZW5zZSBLZXkvQWRkaXRpb25hbCBTZW5zZSBDb2RlL0FTQyBRdWFsaWZpZXIgdmFsdWVzICovCisjZGVmaW5lIFNTX05PX1NFTlNFCQkJCTAKKyNkZWZpbmUgU1NfQ09NTVVOSUNBVElPTl9GQUlMVVJFCQkweDA0MDgwMAorI2RlZmluZSBTU19JTlZBTElEX0NPTU1BTkQJCQkweDA1MjAwMAorI2RlZmluZSBTU19JTlZBTElEX0ZJRUxEX0lOX0NEQgkJCTB4MDUyNDAwCisjZGVmaW5lIFNTX0xPR0lDQUxfQkxPQ0tfQUREUkVTU19PVVRfT0ZfUkFOR0UJMHgwNTIxMDAKKyNkZWZpbmUgU1NfTE9HSUNBTF9VTklUX05PVF9TVVBQT1JURUQJCTB4MDUyNTAwCisjZGVmaW5lIFNTX01FRElVTV9OT1RfUFJFU0VOVAkJCTB4MDIzYTAwCisjZGVmaW5lIFNTX01FRElVTV9SRU1PVkFMX1BSRVZFTlRFRAkJMHgwNTUzMDIKKyNkZWZpbmUgU1NfTk9UX1JFQURZX1RPX1JFQURZX1RSQU5TSVRJT04JMHgwNjI4MDAKKyNkZWZpbmUgU1NfUkVTRVRfT0NDVVJSRUQJCQkweDA2MjkwMAorI2RlZmluZSBTU19TQVZJTkdfUEFSQU1FVEVSU19OT1RfU1VQUE9SVEVECTB4MDUzOTAwCisjZGVmaW5lIFNTX1VOUkVDT1ZFUkVEX1JFQURfRVJST1IJCTB4MDMxMTAwCisjZGVmaW5lIFNTX1dSSVRFX0VSUk9SCQkJCTB4MDMwYzAyCisjZGVmaW5lIFNTX1dSSVRFX1BST1RFQ1RFRAkJCTB4MDcyNzAwCisKKyNkZWZpbmUgU0soeCkJCSgodTgpICgoeCkgPj4gMTYpKQkvLyBTZW5zZSBLZXkgYnl0ZSwgZXRjLgorI2RlZmluZSBBU0MoeCkJCSgodTgpICgoeCkgPj4gOCkpCisjZGVmaW5lIEFTQ1EoeCkJCSgodTgpICh4KSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogVGhlc2UgZGVmaW5pdGlvbnMgd2lsbCBwZXJtaXQgdGhlIGNvbXBpbGVyIHRvIGF2b2lkIGdlbmVyYXRpbmcgY29kZSBmb3IKKyAqIHBhcnRzIG9mIHRoZSBkcml2ZXIgdGhhdCBhcmVuJ3QgdXNlZCBpbiB0aGUgbm9uLVRFU1QgdmVyc2lvbi4gIEV2ZW4gZ2NjCisgKiBjYW4gcmVjb2duaXplIHdoZW4gYSB0ZXN0IG9mIGEgY29uc3RhbnQgZXhwcmVzc2lvbiB5aWVsZHMgYSBkZWFkIGNvZGUKKyAqIHBhdGguCisgKi8KKworI2lmZGVmIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QKKworI2RlZmluZSB0cmFuc3BvcnRfaXNfYmJiKCkJKG1vZF9kYXRhLnRyYW5zcG9ydF90eXBlID09IFVTQl9QUl9CVUxLKQorI2RlZmluZSB0cmFuc3BvcnRfaXNfY2JpKCkJKG1vZF9kYXRhLnRyYW5zcG9ydF90eXBlID09IFVTQl9QUl9DQkkpCisjZGVmaW5lIHByb3RvY29sX2lzX3Njc2koKQkobW9kX2RhdGEucHJvdG9jb2xfdHlwZSA9PSBVU0JfU0NfU0NTSSkKKworI2Vsc2UKKworI2RlZmluZSB0cmFuc3BvcnRfaXNfYmJiKCkJMQorI2RlZmluZSB0cmFuc3BvcnRfaXNfY2JpKCkJMAorI2RlZmluZSBwcm90b2NvbF9pc19zY3NpKCkJMQorCisjZW5kaWYgLyogQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCAqLworCisKK3N0cnVjdCBsdW4geworCXN0cnVjdCBmaWxlCSpmaWxwOworCWxvZmZfdAkJZmlsZV9sZW5ndGg7CisJbG9mZl90CQludW1fc2VjdG9yczsKKworCXVuc2lnbmVkIGludAlybyA6IDE7CisJdW5zaWduZWQgaW50CXByZXZlbnRfbWVkaXVtX3JlbW92YWwgOiAxOworCXVuc2lnbmVkIGludAlyZWdpc3RlcmVkIDogMTsKKworCXUzMgkJc2Vuc2VfZGF0YTsKKwl1MzIJCXNlbnNlX2RhdGFfaW5mbzsKKwl1MzIJCXVuaXRfYXR0ZW50aW9uX2RhdGE7CisKKwlzdHJ1Y3QgZGV2aWNlCWRldjsKK307CisKKyNkZWZpbmUgYmFja2luZ19maWxlX2lzX29wZW4oY3VybHVuKQkoKGN1cmx1biktPmZpbHAgIT0gTlVMTCkKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbHVuICpkZXZfdG9fbHVuKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGx1biwgZGV2KTsKK30KKworCisvKiBCaWcgZW5vdWdoIHRvIGhvbGQgb3VyIGJpZ2dlc3QgZGVzY3JpcHRvciAqLworI2RlZmluZSBFUDBfQlVGU0laRQkyNTYKKyNkZWZpbmUgREVMQVlFRF9TVEFUVVMJKEVQMF9CVUZTSVpFICsgOTk5KQkvLyBBbiBpbXBvc3NpYmx5IGxhcmdlIHZhbHVlCisKKy8qIE51bWJlciBvZiBidWZmZXJzIHdlIHdpbGwgdXNlLiAgMiBpcyBlbm91Z2ggZm9yIGRvdWJsZS1idWZmZXJpbmcgKi8KKyNkZWZpbmUgTlVNX0JVRkZFUlMJMgorCitlbnVtIGZzZ19idWZmZXJfc3RhdGUgeworCUJVRl9TVEFURV9FTVBUWSA9IDAsCisJQlVGX1NUQVRFX0ZVTEwsCisJQlVGX1NUQVRFX0JVU1kKK307CisKK3N0cnVjdCBmc2dfYnVmZmhkIHsKKwl2b2lkCQkJCSpidWY7CisJZG1hX2FkZHJfdAkJCWRtYTsKKwl2b2xhdGlsZSBlbnVtIGZzZ19idWZmZXJfc3RhdGUJc3RhdGU7CisJc3RydWN0IGZzZ19idWZmaGQJCSpuZXh0OworCisJLyogVGhlIE5ldENoaXAgMjI4MCBpcyBmYXN0ZXIsIGFuZCBoYW5kbGVzIHNvbWUgcHJvdG9jb2wgZmF1bHRzCisJICogYmV0dGVyLCBpZiB3ZSBkb24ndCBzdWJtaXQgYW55IHNob3J0IGJ1bGstb3V0IHJlYWQgcmVxdWVzdHMuCisJICogU28gd2Ugd2lsbCByZWNvcmQgdGhlIGludGVuZGVkIHJlcXVlc3QgbGVuZ3RoIGhlcmUuICovCisJdW5zaWduZWQgaW50CQkJYnVsa19vdXRfaW50ZW5kZWRfbGVuZ3RoOworCisJc3RydWN0IHVzYl9yZXF1ZXN0CQkqaW5yZXE7CisJdm9sYXRpbGUgaW50CQkJaW5yZXFfYnVzeTsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJCSpvdXRyZXE7CisJdm9sYXRpbGUgaW50CQkJb3V0cmVxX2J1c3k7Cit9OworCitlbnVtIGZzZ19zdGF0ZSB7CisJRlNHX1NUQVRFX0NPTU1BTkRfUEhBU0UgPSAtMTAsCQkvLyBUaGlzIG9uZSBpc24ndCB1c2VkIGFueXdoZXJlCisJRlNHX1NUQVRFX0RBVEFfUEhBU0UsCisJRlNHX1NUQVRFX1NUQVRVU19QSEFTRSwKKworCUZTR19TVEFURV9JRExFID0gMCwKKwlGU0dfU1RBVEVfQUJPUlRfQlVMS19PVVQsCisJRlNHX1NUQVRFX1JFU0VULAorCUZTR19TVEFURV9JTlRFUkZBQ0VfQ0hBTkdFLAorCUZTR19TVEFURV9DT05GSUdfQ0hBTkdFLAorCUZTR19TVEFURV9ESVNDT05ORUNULAorCUZTR19TVEFURV9FWElULAorCUZTR19TVEFURV9URVJNSU5BVEVECit9OworCitlbnVtIGRhdGFfZGlyZWN0aW9uIHsKKwlEQVRBX0RJUl9VTktOT1dOID0gMCwKKwlEQVRBX0RJUl9GUk9NX0hPU1QsCisJREFUQV9ESVJfVE9fSE9TVCwKKwlEQVRBX0RJUl9OT05FCit9OworCitzdHJ1Y3QgZnNnX2RldiB7CisJLyogbG9jayBwcm90ZWN0czogc3RhdGUsIGFsbCB0aGUgcmVxX2J1c3kncywgYW5kIGNiYnVmX2NtbmQgKi8KKwlzcGlubG9ja190CQlsb2NrOworCXN0cnVjdCB1c2JfZ2FkZ2V0CSpnYWRnZXQ7CisKKwkvKiBmaWxlc2VtIHByb3RlY3RzOiBiYWNraW5nIGZpbGVzIGluIHVzZSAqLworCXN0cnVjdCByd19zZW1hcGhvcmUJZmlsZXNlbTsKKworCXN0cnVjdCB1c2JfZXAJCSplcDA7CQkvLyBIYW5keSBjb3B5IG9mIGdhZGdldC0+ZXAwCisJc3RydWN0IHVzYl9yZXF1ZXN0CSplcDByZXE7CS8vIEZvciBjb250cm9sIHJlc3BvbnNlcworCXZvbGF0aWxlIHVuc2lnbmVkIGludAllcDBfcmVxX3RhZzsKKwljb25zdCBjaGFyCQkqZXAwcmVxX25hbWU7CisKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKmludHJlcTsJLy8gRm9yIGludGVycnVwdCByZXNwb25zZXMKKwl2b2xhdGlsZSBpbnQJCWludHJlcV9idXN5OworCXN0cnVjdCBmc2dfYnVmZmhkCSppbnRyX2J1ZmZoZDsKKworIAl1bnNpZ25lZCBpbnQJCWJ1bGtfb3V0X21heHBhY2tldDsKKwllbnVtIGZzZ19zdGF0ZQkJc3RhdGU7CQkvLyBGb3IgZXhjZXB0aW9uIGhhbmRsaW5nCisJdW5zaWduZWQgaW50CQlleGNlcHRpb25fcmVxX3RhZzsKKworCXU4CQkJY29uZmlnLCBuZXdfY29uZmlnOworCisJdW5zaWduZWQgaW50CQlydW5uaW5nIDogMTsKKwl1bnNpZ25lZCBpbnQJCWJ1bGtfaW5fZW5hYmxlZCA6IDE7CisJdW5zaWduZWQgaW50CQlidWxrX291dF9lbmFibGVkIDogMTsKKwl1bnNpZ25lZCBpbnQJCWludHJfaW5fZW5hYmxlZCA6IDE7CisJdW5zaWduZWQgaW50CQlwaGFzZV9lcnJvciA6IDE7CisJdW5zaWduZWQgaW50CQlzaG9ydF9wYWNrZXRfcmVjZWl2ZWQgOiAxOworCXVuc2lnbmVkIGludAkJYmFkX2x1bl9va2F5IDogMTsKKworCXVuc2lnbmVkIGxvbmcJCWF0b21pY19iaXRmbGFnczsKKyNkZWZpbmUgUkVHSVNURVJFRAkJMAorI2RlZmluZSBDTEVBUl9CVUxLX0hBTFRTCTEKKyNkZWZpbmUgU1VTUEVOREVECQkyCisKKwlzdHJ1Y3QgdXNiX2VwCQkqYnVsa19pbjsKKwlzdHJ1Y3QgdXNiX2VwCQkqYnVsa19vdXQ7CisJc3RydWN0IHVzYl9lcAkJKmludHJfaW47CisKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAkqbmV4dF9idWZmaGRfdG9fZmlsbDsKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAkqbmV4dF9idWZmaGRfdG9fZHJhaW47CisJc3RydWN0IGZzZ19idWZmaGQJYnVmZmhkc1tOVU1fQlVGRkVSU107CisKKwl3YWl0X3F1ZXVlX2hlYWRfdAl0aHJlYWRfd3FoOworCWludAkJCXRocmVhZF93YWtldXBfbmVlZGVkOworCXN0cnVjdCBjb21wbGV0aW9uCXRocmVhZF9ub3RpZmllcjsKKwlpbnQJCQl0aHJlYWRfcGlkOworCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGhyZWFkX3Rhc2s7CisJc2lnc2V0X3QJCXRocmVhZF9zaWduYWxfbWFzazsKKworCWludAkJCWNtbmRfc2l6ZTsKKwl1OAkJCWNtbmRbTUFYX0NPTU1BTkRfU0laRV07CisJZW51bSBkYXRhX2RpcmVjdGlvbglkYXRhX2RpcjsKKwl1MzIJCQlkYXRhX3NpemU7CisJdTMyCQkJZGF0YV9zaXplX2Zyb21fY21uZDsKKwl1MzIJCQl0YWc7CisJdW5zaWduZWQgaW50CQlsdW47CisJdTMyCQkJcmVzaWR1ZTsKKwl1MzIJCQl1c2JfYW1vdW50X2xlZnQ7CisKKwkvKiBUaGUgQ0IgcHJvdG9jb2wgb2ZmZXJzIG5vIHdheSBmb3IgYSBob3N0IHRvIGtub3cgd2hlbiBhIGNvbW1hbmQKKwkgKiBoYXMgY29tcGxldGVkLiAgQXMgYSByZXN1bHQgdGhlIG5leHQgY29tbWFuZCBtYXkgYXJyaXZlIGVhcmx5LAorCSAqIGFuZCB3ZSB3aWxsIHN0aWxsIGhhdmUgdG8gaGFuZGxlIGl0LiAgRm9yIHRoYXQgcmVhc29uIHdlIG5lZWQKKwkgKiBhIGJ1ZmZlciB0byBzdG9yZSBuZXcgY29tbWFuZHMgd2hlbiB1c2luZyBDQiAob3IgQ0JJLCB3aGljaAorCSAqIGRvZXMgbm90IG9ibGlnZSBhIGhvc3QgdG8gd2FpdCBmb3IgY29tbWFuZCBjb21wbGV0aW9uIGVpdGhlcikuICovCisJaW50CQkJY2JidWZfY21uZF9zaXplOworCXU4CQkJY2JidWZfY21uZFtNQVhfQ09NTUFORF9TSVpFXTsKKworCXVuc2lnbmVkIGludAkJbmx1bnM7CisJc3RydWN0IGx1bgkJKmx1bnM7CisJc3RydWN0IGx1bgkJKmN1cmx1bjsKKwlzdHJ1Y3QgY29tcGxldGlvbglsdW5fcmVsZWFzZWQ7Cit9OworCit0eXBlZGVmIHZvaWQgKCpmc2dfcm91dGluZV90KShzdHJ1Y3QgZnNnX2RldiAqKTsKKworc3RhdGljIGludCBpbmxpbmUgZXhjZXB0aW9uX2luX3Byb2dyZXNzKHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJcmV0dXJuIChmc2ctPnN0YXRlID4gRlNHX1NUQVRFX0lETEUpOworfQorCisvKiBNYWtlIGJ1bGstb3V0IHJlcXVlc3RzIGJlIGRpdmlzaWJsZSBieSB0aGUgbWF4cGFja2V0IHNpemUgKi8KK3N0YXRpYyB2b2lkIGlubGluZSBzZXRfYnVsa19vdXRfcmVxX2xlbmd0aChzdHJ1Y3QgZnNnX2RldiAqZnNnLAorCQlzdHJ1Y3QgZnNnX2J1ZmZoZCAqYmgsIHVuc2lnbmVkIGludCBsZW5ndGgpCit7CisJdW5zaWduZWQgaW50CXJlbTsKKworCWJoLT5idWxrX291dF9pbnRlbmRlZF9sZW5ndGggPSBsZW5ndGg7CisJcmVtID0gbGVuZ3RoICUgZnNnLT5idWxrX291dF9tYXhwYWNrZXQ7CisJaWYgKHJlbSA+IDApCisJCWxlbmd0aCArPSBmc2ctPmJ1bGtfb3V0X21heHBhY2tldCAtIHJlbTsKKwliaC0+b3V0cmVxLT5sZW5ndGggPSBsZW5ndGg7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZnNnX2RldgkJCSp0aGVfZnNnOworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlcgkJZnNnX2RyaXZlcjsKKworc3RhdGljIHZvaWQJY2xvc2VfYmFja2luZ19maWxlKHN0cnVjdCBsdW4gKmN1cmx1bik7CitzdGF0aWMgdm9pZAljbG9zZV9hbGxfYmFja2luZ19maWxlcyhzdHJ1Y3QgZnNnX2RldiAqZnNnKTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgRFVNUF9NU0dTCisKK3N0YXRpYyB2b2lkIGR1bXBfbXNnKHN0cnVjdCBmc2dfZGV2ICpmc2csIGNvbnN0IGNoYXIgKmxhYmVsLAorCQljb25zdCB1OCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworCXVuc2lnbmVkIGludAlzdGFydCwgbnVtLCBpOworCWNoYXIJCWxpbmVbNTJdLCAqcDsKKworCWlmIChsZW5ndGggPj0gNTEyKQorCQlyZXR1cm47CisJREJHKGZzZywgIiVzLCBsZW5ndGggJXU6XG4iLCBsYWJlbCwgbGVuZ3RoKTsKKworCXN0YXJ0ID0gMDsKKwl3aGlsZSAobGVuZ3RoID4gMCkgeworCQludW0gPSBtaW4obGVuZ3RoLCAxNnUpOworCQlwID0gbGluZTsKKwkJZm9yIChpID0gMDsgaSA8IG51bTsgKytpKSB7CisJCQlpZiAoaSA9PSA4KQorCQkJCSpwKysgPSAnICc7CisJCQlzcHJpbnRmKHAsICIgJTAyeCIsIGJ1ZltpXSk7CisJCQlwICs9IDM7CisJCX0KKwkJKnAgPSAwOworCQlwcmludGsoS0VSTl9ERUJVRyAiJTZ4OiAlc1xuIiwgc3RhcnQsIGxpbmUpOworCQlidWYgKz0gbnVtOworCQlzdGFydCArPSBudW07CisJCWxlbmd0aCAtPSBudW07CisJfQorfQorCitzdGF0aWMgdm9pZCBpbmxpbmUgZHVtcF9jZGIoc3RydWN0IGZzZ19kZXYgKmZzZykKK3t9CisKKyNlbHNlCisKK3N0YXRpYyB2b2lkIGlubGluZSBkdW1wX21zZyhzdHJ1Y3QgZnNnX2RldiAqZnNnLCBjb25zdCBjaGFyICpsYWJlbCwKKwkJY29uc3QgdTggKmJ1ZiwgdW5zaWduZWQgaW50IGxlbmd0aCkKK3t9CisKK3N0YXRpYyB2b2lkIGlubGluZSBkdW1wX2NkYihzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCWludAlpOworCWNoYXIJY21kYnVmWzMqTUFYX0NPTU1BTkRfU0laRSArIDFdOworCisJZm9yIChpID0gMDsgaSA8IGZzZy0+Y21uZF9zaXplOyArK2kpCisJCXNwcmludGYoY21kYnVmICsgaSozLCAiICUwMngiLCBmc2ctPmNtbmRbaV0pOworCVZEQkcoZnNnLCAiU0NTSSBDREI6ICVzXG4iLCBjbWRidWYpOworfQorCisjZW5kaWYgLyogRFVNUF9NU0dTICovCisKKworc3RhdGljIGludCBmc2dfc2V0X2hhbHQoc3RydWN0IGZzZ19kZXYgKmZzZywgc3RydWN0IHVzYl9lcCAqZXApCit7CisJY29uc3QgY2hhcgkqbmFtZTsKKworCWlmIChlcCA9PSBmc2ctPmJ1bGtfaW4pCisJCW5hbWUgPSAiYnVsay1pbiI7CisJZWxzZSBpZiAoZXAgPT0gZnNnLT5idWxrX291dCkKKwkJbmFtZSA9ICJidWxrLW91dCI7CisJZWxzZQorCQluYW1lID0gZXAtPm5hbWU7CisJREJHKGZzZywgIiVzIHNldCBoYWx0XG4iLCBuYW1lKTsKKwlyZXR1cm4gdXNiX2VwX3NldF9oYWx0KGVwKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBSb3V0aW5lcyBmb3IgdW5hbGlnbmVkIGRhdGEgYWNjZXNzICovCisKK3N0YXRpYyB1MTYgaW5saW5lIGdldF9iZTE2KHU4ICpidWYpCit7CisJcmV0dXJuICgodTE2KSBidWZbMF0gPDwgOCkgfCAoKHUxNikgYnVmWzFdKTsKK30KKworc3RhdGljIHUzMiBpbmxpbmUgZ2V0X2JlMzIodTggKmJ1ZikKK3sKKwlyZXR1cm4gKCh1MzIpIGJ1ZlswXSA8PCAyNCkgfCAoKHUzMikgYnVmWzFdIDw8IDE2KSB8CisJCQkoKHUzMikgYnVmWzJdIDw8IDgpIHwgKCh1MzIpIGJ1ZlszXSk7Cit9CisKK3N0YXRpYyB2b2lkIGlubGluZSBwdXRfYmUxNih1OCAqYnVmLCB1MTYgdmFsKQoreworCWJ1ZlswXSA9IHZhbCA+PiA4OworCWJ1ZlsxXSA9IHZhbDsKK30KKworc3RhdGljIHZvaWQgaW5saW5lIHB1dF9iZTMyKHU4ICpidWYsIHUzMiB2YWwpCit7CisJYnVmWzBdID0gdmFsID4+IDI0OworCWJ1ZlsxXSA9IHZhbCA+PiAxNjsKKwlidWZbMl0gPSB2YWwgPj4gODsKKwlidWZbM10gPSB2YWw7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIERFU0NSSVBUT1JTIC4uLiBtb3N0IGFyZSBzdGF0aWMsIGJ1dCBzdHJpbmdzIGFuZCAoZnVsbCkgY29uZmlndXJhdGlvbgorICogZGVzY3JpcHRvcnMgYXJlIGJ1aWx0IG9uIGRlbWFuZC4gIEFsc28gdGhlIChzdGF0aWMpIGNvbmZpZyBhbmQgaW50ZXJmYWNlCisgKiBkZXNjcmlwdG9ycyBhcmUgYWRqdXN0ZWQgZHVyaW5nIGZzZ19iaW5kKCkuCisgKi8KKyNkZWZpbmUgU1RSSU5HX01BTlVGQUNUVVJFUgkxCisjZGVmaW5lIFNUUklOR19QUk9EVUNUCQkyCisjZGVmaW5lIFNUUklOR19TRVJJQUwJCTMKKyNkZWZpbmUgU1RSSU5HX0NPTkZJRwkJNAorI2RlZmluZSBTVFJJTkdfSU5URVJGQUNFCTUKKworLyogVGhlcmUgaXMgb25seSBvbmUgY29uZmlndXJhdGlvbi4gKi8KKyNkZWZpbmUJQ09ORklHX1ZBTFVFCQkxCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yCitkZXZpY2VfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2YgZGV2aWNlX2Rlc2MsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0UsCisKKwkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19QRVJfSU5URVJGQUNFLAorCisJLyogVGhlIG5leHQgdGhyZWUgdmFsdWVzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IG1vZHVsZSBwYXJhbWV0ZXJzICovCisJLmlkVmVuZG9yID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRFJJVkVSX1ZFTkRPUl9JRCksCisJLmlkUHJvZHVjdCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KERSSVZFUl9QUk9EVUNUX0lEKSwKKwkuYmNkRGV2aWNlID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHhmZmZmKSwKKworCS5pTWFudWZhY3R1cmVyID0JU1RSSU5HX01BTlVGQUNUVVJFUiwKKwkuaVByb2R1Y3QgPQkJU1RSSU5HX1BST0RVQ1QsCisJLmlTZXJpYWxOdW1iZXIgPQlTVFJJTkdfU0VSSUFMLAorCS5iTnVtQ29uZmlndXJhdGlvbnMgPQkxLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IKK2NvbmZpZ19kZXNjID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBjb25maWdfZGVzYywKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NPTkZJRywKKworCS8qIHdUb3RhbExlbmd0aCBjb21wdXRlZCBieSB1c2JfZ2FkZ2V0X2NvbmZpZ19idWYoKSAqLworCS5iTnVtSW50ZXJmYWNlcyA9CTEsCisJLmJDb25maWd1cmF0aW9uVmFsdWUgPQlDT05GSUdfVkFMVUUsCisJLmlDb25maWd1cmF0aW9uID0JU1RSSU5HX0NPTkZJRywKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9DT05GSUdfQVRUX09ORSB8IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKKwkuYk1heFBvd2VyID0JCTEsCS8vIHNlbGYtcG93ZXJlZAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfb3RnX2Rlc2NyaXB0b3IKK290Z19kZXNjID0geworCS5iTGVuZ3RoID0JCXNpemVvZihvdGdfZGVzYyksCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9PVEcsCisKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9PVEdfU1JQLAorfTsKKworLyogVGhlcmUgaXMgb25seSBvbmUgaW50ZXJmYWNlLiAqLworCitzdGF0aWMgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcgoraW50Zl9kZXNjID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBpbnRmX2Rlc2MsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9JTlRFUkZBQ0UsCisKKwkuYk51bUVuZHBvaW50cyA9CTIsCQkvLyBBZGp1c3RlZCBkdXJpbmcgZnNnX2JpbmQoKQorCS5iSW50ZXJmYWNlQ2xhc3MgPQlVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPQlVU0JfU0NfU0NTSSwJLy8gQWRqdXN0ZWQgZHVyaW5nIGZzZ19iaW5kKCkKKwkuYkludGVyZmFjZVByb3RvY29sID0JVVNCX1BSX0JVTEssCS8vIEFkanVzdGVkIGR1cmluZyBmc2dfYmluZCgpCisJLmlJbnRlcmZhY2UgPQkJU1RSSU5HX0lOVEVSRkFDRSwKK307CisKKy8qIFRocmVlIGZ1bGwtc3BlZWQgZW5kcG9pbnQgZGVzY3JpcHRvcnM6IGJ1bGstaW4sIGJ1bGstb3V0LAorICogYW5kIGludGVycnVwdC1pbi4gKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgorZnNfYnVsa19pbl9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCS8qIHdNYXhQYWNrZXRTaXplIHNldCBieSBhdXRvY29uZmlndXJhdGlvbiAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgorZnNfYnVsa19vdXRfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCisJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX09VVCwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLyogd01heFBhY2tldFNpemUgc2V0IGJ5IGF1dG9jb25maWd1cmF0aW9uICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCitmc19pbnRyX2luX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDIpLAorCS5iSW50ZXJ2YWwgPQkJMzIsCS8vIGZyYW1lcyAtPiAzMiBtcworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmZzX2Z1bmN0aW9uW10gPSB7CisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm90Z19kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZpbnRmX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX2J1bGtfaW5fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfYnVsa19vdXRfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfaW50cl9pbl9kZXNjLAorCU5VTEwsCit9OworI2RlZmluZSBGU19GVU5DVElPTl9QUkVfRVBfRU5UUklFUwkyCisKKworI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCisvKgorICogVVNCIDIuMCBkZXZpY2VzIG5lZWQgdG8gZXhwb3NlIGJvdGggaGlnaCBzcGVlZCBhbmQgZnVsbCBzcGVlZAorICogZGVzY3JpcHRvcnMsIHVubGVzcyB0aGV5IG9ubHkgcnVuIGF0IGZ1bGwgc3BlZWQuCisgKgorICogVGhhdCBtZWFucyBhbHRlcm5hdGUgZW5kcG9pbnQgZGVzY3JpcHRvcnMgKGJpZ2dlciBwYWNrZXRzKQorICogYW5kIGEgImRldmljZSBxdWFsaWZpZXIiIC4uLiBwbHVzIG1vcmUgY29uc3RydWN0aW9uIG9wdGlvbnMKKyAqIGZvciB0aGUgY29uZmlnIGRlc2NyaXB0b3IuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yCitkZXZfcXVhbGlmaWVyID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZfcXVhbGlmaWVyLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFX1FVQUxJRklFUiwKKworCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX1BFUl9JTlRFUkZBQ0UsCisKKwkuYk51bUNvbmZpZ3VyYXRpb25zID0JMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKK2hzX2J1bGtfaW5fZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCisJLyogYkVuZHBvaW50QWRkcmVzcyBjb3BpZWQgZnJvbSBmc19idWxrX2luX2Rlc2MgZHVyaW5nIGZzZ19iaW5kKCkgKi8KKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgoraHNfYnVsa19vdXRfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCisJLyogYkVuZHBvaW50QWRkcmVzcyBjb3BpZWQgZnJvbSBmc19idWxrX291dF9kZXNjIGR1cmluZyBmc2dfYmluZCgpICovCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkuYkludGVydmFsID0JCTEsCS8vIE5BSyBldmVyeSAxIHVmcmFtZQorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgoraHNfaW50cl9pbl9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkvKiBiRW5kcG9pbnRBZGRyZXNzIGNvcGllZCBmcm9tIGZzX2ludHJfaW5fZGVzYyBkdXJpbmcgZnNnX2JpbmQoKSAqLworCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAorCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMiksCisJLmJJbnRlcnZhbCA9CQk5LAkvLyAyKiooOS0xKSA9IDI1NiB1ZnJhbWVzIC0+IDMyIG1zCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfZnVuY3Rpb25bXSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb3RnX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmludGZfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfYnVsa19pbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19idWxrX291dF9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19pbnRyX2luX2Rlc2MsCisJTlVMTCwKK307CisjZGVmaW5lIEhTX0ZVTkNUSU9OX1BSRV9FUF9FTlRSSUVTCTIKKworLyogTWF4cGFja2V0IGFuZCBvdGhlciB0cmFuc2ZlciBjaGFyYWN0ZXJpc3RpY3MgdmFyeSBieSBzcGVlZC4gKi8KKyNkZWZpbmUgZXBfZGVzYyhnLGZzLGhzKQkoKChnKS0+c3BlZWQ9PVVTQl9TUEVFRF9ISUdIKSA/IChocykgOiAoZnMpKQorCisjZWxzZQorCisvKiBJZiB0aGVyZSdzIG5vIGhpZ2ggc3BlZWQgc3VwcG9ydCwgYWx3YXlzIHVzZSB0aGUgZnVsbC1zcGVlZCBkZXNjcmlwdG9yLiAqLworI2RlZmluZSBlcF9kZXNjKGcsZnMsaHMpCWZzCisKKyNlbmRpZgkvKiAhQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEICovCisKKworLyogVGhlIENCSSBzcGVjaWZpY2F0aW9uIGxpbWl0cyB0aGUgc2VyaWFsIHN0cmluZyB0byAxMiB1cHBlcmNhc2UgaGV4YWRlY2ltYWwKKyAqIGNoYXJhY3RlcnMuICovCitzdGF0aWMgY2hhcgkJCQltYW51ZmFjdHVyZXJbNjRdOworc3RhdGljIGNoYXIJCQkJc2VyaWFsWzEzXTsKKworLyogU3RhdGljIHN0cmluZ3MsIGluIFVURi04IChmb3Igc2ltcGxpY2l0eSB3ZSB1c2Ugb25seSBBU0NJSSBjaGFyYWN0ZXJzKSAqLworc3RhdGljIHN0cnVjdCB1c2Jfc3RyaW5nCQlzdHJpbmdzW10gPSB7CisJe1NUUklOR19NQU5VRkFDVFVSRVIsCW1hbnVmYWN0dXJlcn0sCisJe1NUUklOR19QUk9EVUNULAlsb25nbmFtZX0sCisJe1NUUklOR19TRVJJQUwsCQlzZXJpYWx9LAorCXtTVFJJTkdfQ09ORklHLAkJIlNlbGYtcG93ZXJlZCJ9LAorCXtTVFJJTkdfSU5URVJGQUNFLAkiTWFzcyBTdG9yYWdlIn0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzCXN0cmluZ3RhYiA9IHsKKwkubGFuZ3VhZ2UJPSAweDA0MDksCQkvLyBlbi11cworCS5zdHJpbmdzCT0gc3RyaW5ncywKK307CisKKworLyoKKyAqIENvbmZpZyBkZXNjcmlwdG9ycyBtdXN0IGFncmVlIHdpdGggdGhlIGNvZGUgdGhhdCBzZXRzIGNvbmZpZ3VyYXRpb25zCisgKiBhbmQgd2l0aCBjb2RlIG1hbmFnaW5nIGludGVyZmFjZXMgYW5kIHRoZWlyIGFsdHNldHRpbmdzLiAgVGhleSBtdXN0CisgKiBhbHNvIGhhbmRsZSBkaWZmZXJlbnQgc3BlZWRzIGFuZCBvdGhlci1zcGVlZCByZXF1ZXN0cy4KKyAqLworc3RhdGljIGludCBwb3B1bGF0ZV9jb25maWdfYnVmKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsCisJCXU4ICpidWYsIHU4IHR5cGUsIHVuc2lnbmVkIGluZGV4KQoreworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCWVudW0gdXNiX2RldmljZV9zcGVlZAkJCXNwZWVkID0gZ2FkZ2V0LT5zcGVlZDsKKyNlbmRpZgorCWludAkJCQkJbGVuOworCWNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIJKipmdW5jdGlvbjsKKworCWlmIChpbmRleCA+IDApCisJCXJldHVybiAtRUlOVkFMOworCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECisJaWYgKHR5cGUgPT0gVVNCX0RUX09USEVSX1NQRUVEX0NPTkZJRykKKwkJc3BlZWQgPSAoVVNCX1NQRUVEX0ZVTEwgKyBVU0JfU1BFRURfSElHSCkgLSBzcGVlZDsKKwlpZiAoc3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCisJCWZ1bmN0aW9uID0gaHNfZnVuY3Rpb247CisJZWxzZQorI2VuZGlmCisJCWZ1bmN0aW9uID0gZnNfZnVuY3Rpb247CisKKwkvKiBmb3Igbm93LCBkb24ndCBhZHZlcnRpc2Ugc3JwLW9ubHkgZGV2aWNlcyAqLworCWlmICghZ2FkZ2V0LT5pc19vdGcpCisJCWZ1bmN0aW9uKys7CisKKwlsZW4gPSB1c2JfZ2FkZ2V0X2NvbmZpZ19idWYoJmNvbmZpZ19kZXNjLCBidWYsIEVQMF9CVUZTSVpFLCBmdW5jdGlvbik7CisJKChzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yICopIGJ1ZiktPmJEZXNjcmlwdG9yVHlwZSA9IHR5cGU7CisJcmV0dXJuIGxlbjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBUaGVzZSByb3V0aW5lcyBtYXkgYmUgY2FsbGVkIGluIHByb2Nlc3MgY29udGV4dCBvciBpbl9pcnEgKi8KKworc3RhdGljIHZvaWQgd2FrZXVwX3RocmVhZChzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCS8qIFRlbGwgdGhlIG1haW4gdGhyZWFkIHRoYXQgc29tZXRoaW5nIGhhcyBoYXBwZW5lZCAqLworCWZzZy0+dGhyZWFkX3dha2V1cF9uZWVkZWQgPSAxOworCXdha2VfdXBfYWxsKCZmc2ctPnRocmVhZF93cWgpOworfQorCisKK3N0YXRpYyB2b2lkIHJhaXNlX2V4Y2VwdGlvbihzdHJ1Y3QgZnNnX2RldiAqZnNnLCBlbnVtIGZzZ19zdGF0ZSBuZXdfc3RhdGUpCit7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJc3RydWN0IHRhc2tfc3RydWN0CSp0aHJlYWRfdGFzazsKKworCS8qIERvIG5vdGhpbmcgaWYgYSBoaWdoZXItcHJpb3JpdHkgZXhjZXB0aW9uIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MuCisJICogSWYgYSBsb3dlci1vci1lcXVhbCBwcmlvcml0eSBleGNlcHRpb24gaXMgaW4gcHJvZ3Jlc3MsIHByZWVtcHQgaXQKKwkgKiBhbmQgbm90aWZ5IHRoZSBtYWluIHRocmVhZCBieSBzZW5kaW5nIGl0IGEgc2lnbmFsLiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZmc2ctPmxvY2ssIGZsYWdzKTsKKwlpZiAoZnNnLT5zdGF0ZSA8PSBuZXdfc3RhdGUpIHsKKwkJZnNnLT5leGNlcHRpb25fcmVxX3RhZyA9IGZzZy0+ZXAwX3JlcV90YWc7CisJCWZzZy0+c3RhdGUgPSBuZXdfc3RhdGU7CisJCXRocmVhZF90YXNrID0gZnNnLT50aHJlYWRfdGFzazsKKwkJaWYgKHRocmVhZF90YXNrKQorCQkJc2VuZF9zaWdfaW5mbyhTSUdVU1IxLCBTRU5EX1NJR19GT1JDRUQsIHRocmVhZF90YXNrKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnNnLT5sb2NrLCBmbGFncyk7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVGhlIGRpc2Nvbm5lY3QgY2FsbGJhY2sgYW5kIGVwMCByb3V0aW5lcy4gIFRoZXNlIGFsd2F5cyBydW4gaW5faXJxLAorICogZXhjZXB0IHRoYXQgZXAwX3F1ZXVlKCkgaXMgY2FsbGVkIGluIHRoZSBtYWluIHRocmVhZCB0byBhY2tub3dsZWRnZQorICogY29tcGxldGlvbiBvZiB2YXJpb3VzIHJlcXVlc3RzOiBzZXQgY29uZmlnLCBzZXQgaW50ZXJmYWNlLCBhbmQKKyAqIEJ1bGstb25seSBkZXZpY2UgcmVzZXQuICovCisKK3N0YXRpYyB2b2lkIGZzZ19kaXNjb25uZWN0KHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IGZzZ19kZXYJCSpmc2cgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTsKKworCURCRyhmc2csICJkaXNjb25uZWN0IG9yIHBvcnQgcmVzZXRcbiIpOworCXJhaXNlX2V4Y2VwdGlvbihmc2csIEZTR19TVEFURV9ESVNDT05ORUNUKTsKK30KKworCitzdGF0aWMgaW50IGVwMF9xdWV1ZShzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCWludAlyYzsKKworCXJjID0gdXNiX2VwX3F1ZXVlKGZzZy0+ZXAwLCBmc2ctPmVwMHJlcSwgR0ZQX0FUT01JQyk7CisJaWYgKHJjICE9IDAgJiYgcmMgIT0gLUVTSFVURE9XTikgeworCisJCS8qIFdlIGNhbid0IGRvIG11Y2ggbW9yZSB0aGFuIHdhaXQgZm9yIGEgcmVzZXQgKi8KKwkJV0FSTihmc2csICJlcnJvciBpbiBzdWJtaXNzaW9uOiAlcyAtLT4gJWRcbiIsCisJCQkJZnNnLT5lcDAtPm5hbWUsIHJjKTsKKwl9CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBlcDBfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBmc2dfZGV2CQkqZnNnID0gKHN0cnVjdCBmc2dfZGV2ICopIGVwLT5kcml2ZXJfZGF0YTsKKworCWlmIChyZXEtPmFjdHVhbCA+IDApCisJCWR1bXBfbXNnKGZzZywgZnNnLT5lcDByZXFfbmFtZSwgcmVxLT5idWYsIHJlcS0+YWN0dWFsKTsKKwlpZiAocmVxLT5zdGF0dXMgfHwgcmVxLT5hY3R1YWwgIT0gcmVxLT5sZW5ndGgpCisJCURCRyhmc2csICIlcyAtLT4gJWQsICV1LyV1XG4iLCBfX0ZVTkNUSU9OX18sCisJCQkJcmVxLT5zdGF0dXMsIHJlcS0+YWN0dWFsLCByZXEtPmxlbmd0aCk7CisJaWYgKHJlcS0+c3RhdHVzID09IC1FQ09OTlJFU0VUKQkJLy8gUmVxdWVzdCB3YXMgY2FuY2VsbGVkCisJCXVzYl9lcF9maWZvX2ZsdXNoKGVwKTsKKworCWlmIChyZXEtPnN0YXR1cyA9PSAwICYmIHJlcS0+Y29udGV4dCkKKwkJKChmc2dfcm91dGluZV90KSAocmVxLT5jb250ZXh0KSkoZnNnKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBCdWxrIGFuZCBpbnRlcnJ1cHQgZW5kcG9pbnQgY29tcGxldGlvbiBoYW5kbGVycy4KKyAqIFRoZXNlIGFsd2F5cyBydW4gaW5faXJxLiAqLworCitzdGF0aWMgdm9pZCBidWxrX2luX2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgZnNnX2RldgkJKmZzZyA9IChzdHJ1Y3QgZnNnX2RldiAqKSBlcC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGZzZ19idWZmaGQJKmJoID0gKHN0cnVjdCBmc2dfYnVmZmhkICopIHJlcS0+Y29udGV4dDsKKworCWlmIChyZXEtPnN0YXR1cyB8fCByZXEtPmFjdHVhbCAhPSByZXEtPmxlbmd0aCkKKwkJREJHKGZzZywgIiVzIC0tPiAlZCwgJXUvJXVcbiIsIF9fRlVOQ1RJT05fXywKKwkJCQlyZXEtPnN0YXR1cywgcmVxLT5hY3R1YWwsIHJlcS0+bGVuZ3RoKTsKKwlpZiAocmVxLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQpCQkvLyBSZXF1ZXN0IHdhcyBjYW5jZWxsZWQKKwkJdXNiX2VwX2ZpZm9fZmx1c2goZXApOworCisJLyogSG9sZCB0aGUgbG9jayB3aGlsZSB3ZSB1cGRhdGUgdGhlIHJlcXVlc3QgYW5kIGJ1ZmZlciBzdGF0ZXMgKi8KKwlzcGluX2xvY2soJmZzZy0+bG9jayk7CisJYmgtPmlucmVxX2J1c3kgPSAwOworCWJoLT5zdGF0ZSA9IEJVRl9TVEFURV9FTVBUWTsKKwlzcGluX3VubG9jaygmZnNnLT5sb2NrKTsKKwl3YWtldXBfdGhyZWFkKGZzZyk7Cit9CisKK3N0YXRpYyB2b2lkIGJ1bGtfb3V0X2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgZnNnX2RldgkJKmZzZyA9IChzdHJ1Y3QgZnNnX2RldiAqKSBlcC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGZzZ19idWZmaGQJKmJoID0gKHN0cnVjdCBmc2dfYnVmZmhkICopIHJlcS0+Y29udGV4dDsKKworCWR1bXBfbXNnKGZzZywgImJ1bGstb3V0IiwgcmVxLT5idWYsIHJlcS0+YWN0dWFsKTsKKwlpZiAocmVxLT5zdGF0dXMgfHwgcmVxLT5hY3R1YWwgIT0gYmgtPmJ1bGtfb3V0X2ludGVuZGVkX2xlbmd0aCkKKwkJREJHKGZzZywgIiVzIC0tPiAlZCwgJXUvJXVcbiIsIF9fRlVOQ1RJT05fXywKKwkJCQlyZXEtPnN0YXR1cywgcmVxLT5hY3R1YWwsCisJCQkJYmgtPmJ1bGtfb3V0X2ludGVuZGVkX2xlbmd0aCk7CisJaWYgKHJlcS0+c3RhdHVzID09IC1FQ09OTlJFU0VUKQkJLy8gUmVxdWVzdCB3YXMgY2FuY2VsbGVkCisJCXVzYl9lcF9maWZvX2ZsdXNoKGVwKTsKKworCS8qIEhvbGQgdGhlIGxvY2sgd2hpbGUgd2UgdXBkYXRlIHRoZSByZXF1ZXN0IGFuZCBidWZmZXIgc3RhdGVzICovCisJc3Bpbl9sb2NrKCZmc2ctPmxvY2spOworCWJoLT5vdXRyZXFfYnVzeSA9IDA7CisJYmgtPnN0YXRlID0gQlVGX1NUQVRFX0ZVTEw7CisJc3Bpbl91bmxvY2soJmZzZy0+bG9jayk7CisJd2FrZXVwX3RocmVhZChmc2cpOworfQorCisKKyNpZmRlZiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUCitzdGF0aWMgdm9pZCBpbnRyX2luX2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgZnNnX2RldgkJKmZzZyA9IChzdHJ1Y3QgZnNnX2RldiAqKSBlcC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGZzZ19idWZmaGQJKmJoID0gKHN0cnVjdCBmc2dfYnVmZmhkICopIHJlcS0+Y29udGV4dDsKKworCWlmIChyZXEtPnN0YXR1cyB8fCByZXEtPmFjdHVhbCAhPSByZXEtPmxlbmd0aCkKKwkJREJHKGZzZywgIiVzIC0tPiAlZCwgJXUvJXVcbiIsIF9fRlVOQ1RJT05fXywKKwkJCQlyZXEtPnN0YXR1cywgcmVxLT5hY3R1YWwsIHJlcS0+bGVuZ3RoKTsKKwlpZiAocmVxLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQpCQkvLyBSZXF1ZXN0IHdhcyBjYW5jZWxsZWQKKwkJdXNiX2VwX2ZpZm9fZmx1c2goZXApOworCisJLyogSG9sZCB0aGUgbG9jayB3aGlsZSB3ZSB1cGRhdGUgdGhlIHJlcXVlc3QgYW5kIGJ1ZmZlciBzdGF0ZXMgKi8KKwlzcGluX2xvY2soJmZzZy0+bG9jayk7CisJZnNnLT5pbnRyZXFfYnVzeSA9IDA7CisJYmgtPnN0YXRlID0gQlVGX1NUQVRFX0VNUFRZOworCXNwaW5fdW5sb2NrKCZmc2ctPmxvY2spOworCXdha2V1cF90aHJlYWQoZnNnKTsKK30KKworI2Vsc2UKK3N0YXRpYyB2b2lkIGludHJfaW5fY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQore30KKyNlbmRpZiAvKiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRXAwIGNsYXNzLXNwZWNpZmljIGhhbmRsZXJzLiAgVGhlc2UgYWx3YXlzIHJ1biBpbl9pcnEuICovCisKKyNpZmRlZiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUCitzdGF0aWMgdm9pZCByZWNlaXZlZF9jYmlfYWRzYyhzdHJ1Y3QgZnNnX2RldiAqZnNnLCBzdHJ1Y3QgZnNnX2J1ZmZoZCAqYmgpCit7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXEgPSBmc2ctPmVwMHJlcTsKKwlzdGF0aWMgdTgJCWNiaV9yZXNldF9jbW5kWzZdID0geworCQkJU0NfU0VORF9ESUFHTk9TVElDLCA0LCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKKworCS8qIEVycm9yIGluIGNvbW1hbmQgdHJhbnNmZXI/ICovCisJaWYgKHJlcS0+c3RhdHVzIHx8IHJlcS0+bGVuZ3RoICE9IHJlcS0+YWN0dWFsIHx8CisJCQlyZXEtPmFjdHVhbCA8IDYgfHwgcmVxLT5hY3R1YWwgPiBNQVhfQ09NTUFORF9TSVpFKSB7CisKKwkJLyogTm90IGFsbCBjb250cm9sbGVycyBhbGxvdyBhIHByb3RvY29sIHN0YWxsIGFmdGVyCisJCSAqIHJlY2VpdmluZyBjb250cm9sLW91dCBkYXRhLCBidXQgd2UnbGwgdHJ5IGFueXdheS4gKi8KKwkJZnNnX3NldF9oYWx0KGZzZywgZnNnLT5lcDApOworCQlyZXR1cm47CQkJLy8gV2FpdCBmb3IgcmVzZXQKKwl9CisKKwkvKiBJcyBpdCB0aGUgc3BlY2lhbCByZXNldCBjb21tYW5kPyAqLworCWlmIChyZXEtPmFjdHVhbCA+PSBzaXplb2YgY2JpX3Jlc2V0X2NtbmQgJiYKKwkJCW1lbWNtcChyZXEtPmJ1ZiwgY2JpX3Jlc2V0X2NtbmQsCisJCQkJc2l6ZW9mIGNiaV9yZXNldF9jbW5kKSA9PSAwKSB7CisKKwkJLyogUmFpc2UgYW4gZXhjZXB0aW9uIHRvIHN0b3AgdGhlIGN1cnJlbnQgb3BlcmF0aW9uCisJCSAqIGFuZCByZWluaXRpYWxpemUgb3VyIHN0YXRlLiAqLworCQlEQkcoZnNnLCAiY2JpIHJlc2V0IHJlcXVlc3RcbiIpOworCQlyYWlzZV9leGNlcHRpb24oZnNnLCBGU0dfU1RBVEVfUkVTRVQpOworCQlyZXR1cm47CisJfQorCisJVkRCRyhmc2csICJDQltJXSBhY2NlcHQgZGV2aWNlLXNwZWNpZmljIGNvbW1hbmRcbiIpOworCXNwaW5fbG9jaygmZnNnLT5sb2NrKTsKKworCS8qIFNhdmUgdGhlIGNvbW1hbmQgZm9yIGxhdGVyICovCisJaWYgKGZzZy0+Y2JidWZfY21uZF9zaXplKQorCQlXQVJOKGZzZywgIkNCW0ldIG92ZXJ3cml0aW5nIHByZXZpb3VzIGNvbW1hbmRcbiIpOworCWZzZy0+Y2JidWZfY21uZF9zaXplID0gcmVxLT5hY3R1YWw7CisJbWVtY3B5KGZzZy0+Y2JidWZfY21uZCwgcmVxLT5idWYsIGZzZy0+Y2JidWZfY21uZF9zaXplKTsKKworCXNwaW5fdW5sb2NrKCZmc2ctPmxvY2spOworCXdha2V1cF90aHJlYWQoZnNnKTsKK30KKworI2Vsc2UKK3N0YXRpYyB2b2lkIHJlY2VpdmVkX2NiaV9hZHNjKHN0cnVjdCBmc2dfZGV2ICpmc2csIHN0cnVjdCBmc2dfYnVmZmhkICpiaCkKK3t9CisjZW5kaWYgLyogQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCAqLworCisKK3N0YXRpYyBpbnQgY2xhc3Nfc2V0dXBfcmVxKHN0cnVjdCBmc2dfZGV2ICpmc2csCisJCWNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpCit7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXEgPSBmc2ctPmVwMHJlcTsKKwlpbnQJCQl2YWx1ZSA9IC1FT1BOT1RTVVBQOworCXUxNgkJCXdfaW5kZXggPSBjdHJsLT53SW5kZXg7CisJdTE2CQkJd19sZW5ndGggPSBjdHJsLT53TGVuZ3RoOworCisJaWYgKCFmc2ctPmNvbmZpZykKKwkJcmV0dXJuIHZhbHVlOworCisJLyogSGFuZGxlIEJ1bGstb25seSBjbGFzcy1zcGVjaWZpYyByZXF1ZXN0cyAqLworCWlmICh0cmFuc3BvcnRfaXNfYmJiKCkpIHsKKwkJc3dpdGNoIChjdHJsLT5iUmVxdWVzdCkgeworCisJCWNhc2UgVVNCX0JVTEtfUkVTRVRfUkVRVUVTVDoKKwkJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gKFVTQl9ESVJfT1VUIHwKKwkJCQkJVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFKSkKKwkJCQlicmVhazsKKwkJCWlmICh3X2luZGV4ICE9IDApIHsKKwkJCQl2YWx1ZSA9IC1FRE9NOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBSYWlzZSBhbiBleGNlcHRpb24gdG8gc3RvcCB0aGUgY3VycmVudCBvcGVyYXRpb24KKwkJCSAqIGFuZCByZWluaXRpYWxpemUgb3VyIHN0YXRlLiAqLworCQkJREJHKGZzZywgImJ1bGsgcmVzZXQgcmVxdWVzdFxuIik7CisJCQlyYWlzZV9leGNlcHRpb24oZnNnLCBGU0dfU1RBVEVfUkVTRVQpOworCQkJdmFsdWUgPSBERUxBWUVEX1NUQVRVUzsKKwkJCWJyZWFrOworCisJCWNhc2UgVVNCX0JVTEtfR0VUX01BWF9MVU5fUkVRVUVTVDoKKwkJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gKFVTQl9ESVJfSU4gfAorCQkJCQlVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UpKQorCQkJCWJyZWFrOworCQkJaWYgKHdfaW5kZXggIT0gMCkgeworCQkJCXZhbHVlID0gLUVET007CisJCQkJYnJlYWs7CisJCQl9CisJCQlWREJHKGZzZywgImdldCBtYXggTFVOXG4iKTsKKwkJCSoodTggKikgcmVxLT5idWYgPSBmc2ctPm5sdW5zIC0gMTsKKwkJCXZhbHVlID0gbWluKHdfbGVuZ3RoLCAodTE2KSAxKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogSGFuZGxlIENCSSBjbGFzcy1zcGVjaWZpYyByZXF1ZXN0cyAqLworCWVsc2UgeworCQlzd2l0Y2ggKGN0cmwtPmJSZXF1ZXN0KSB7CisKKwkJY2FzZSBVU0JfQ0JJX0FEU0NfUkVRVUVTVDoKKwkJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gKFVTQl9ESVJfT1VUIHwKKwkJCQkJVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFKSkKKwkJCQlicmVhazsKKwkJCWlmICh3X2luZGV4ICE9IDApIHsKKwkJCQl2YWx1ZSA9IC1FRE9NOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHdfbGVuZ3RoID4gTUFYX0NPTU1BTkRfU0laRSkgeworCQkJCXZhbHVlID0gLUVPVkVSRkxPVzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXZhbHVlID0gd19sZW5ndGg7CisJCQlmc2ctPmVwMHJlcS0+Y29udGV4dCA9IHJlY2VpdmVkX2NiaV9hZHNjOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAodmFsdWUgPT0gLUVPUE5PVFNVUFApCisJCVZEQkcoZnNnLAorCQkJInVua25vd24gY2xhc3Mtc3BlY2lmaWMgY29udHJvbCByZXEgIgorCQkJIiUwMnguJTAyeCB2JTA0eCBpJTA0eCBsJXVcbiIsCisJCQljdHJsLT5iUmVxdWVzdFR5cGUsIGN0cmwtPmJSZXF1ZXN0LAorCQkJY3RybC0+d1ZhbHVlLCB3X2luZGV4LCB3X2xlbmd0aCk7CisJcmV0dXJuIHZhbHVlOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEVwMCBzdGFuZGFyZCByZXF1ZXN0IGhhbmRsZXJzLiAgVGhlc2UgYWx3YXlzIHJ1biBpbl9pcnEuICovCisKK3N0YXRpYyBpbnQgc3RhbmRhcmRfc2V0dXBfcmVxKHN0cnVjdCBmc2dfZGV2ICpmc2csCisJCWNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpCit7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXEgPSBmc2ctPmVwMHJlcTsKKwlpbnQJCQl2YWx1ZSA9IC1FT1BOT1RTVVBQOworCXUxNgkJCXdfaW5kZXggPSBjdHJsLT53SW5kZXg7CisJdTE2CQkJd192YWx1ZSA9IGN0cmwtPndWYWx1ZTsKKwl1MTYJCQl3X2xlbmd0aCA9IGN0cmwtPndMZW5ndGg7CisKKwkvKiBVc3VhbGx5IHRoaXMganVzdCBzdG9yZXMgcmVwbHkgZGF0YSBpbiB0aGUgcHJlLWFsbG9jYXRlZCBlcDAgYnVmZmVyLAorCSAqIGJ1dCBjb25maWcgY2hhbmdlIGV2ZW50cyB3aWxsIGFsc28gcmVjb25maWd1cmUgaGFyZHdhcmUuICovCisJc3dpdGNoIChjdHJsLT5iUmVxdWVzdCkgeworCisJY2FzZSBVU0JfUkVRX0dFVF9ERVNDUklQVE9SOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IChVU0JfRElSX0lOIHwgVVNCX1RZUEVfU1RBTkRBUkQgfAorCQkJCVVTQl9SRUNJUF9ERVZJQ0UpKQorCQkJYnJlYWs7CisJCXN3aXRjaCAod192YWx1ZSA+PiA4KSB7CisKKwkJY2FzZSBVU0JfRFRfREVWSUNFOgorCQkJVkRCRyhmc2csICJnZXQgZGV2aWNlIGRlc2NyaXB0b3JcbiIpOworCQkJdmFsdWUgPSBtaW4od19sZW5ndGgsICh1MTYpIHNpemVvZiBkZXZpY2VfZGVzYyk7CisJCQltZW1jcHkocmVxLT5idWYsICZkZXZpY2VfZGVzYywgdmFsdWUpOworCQkJYnJlYWs7CisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECisJCWNhc2UgVVNCX0RUX0RFVklDRV9RVUFMSUZJRVI6CisJCQlWREJHKGZzZywgImdldCBkZXZpY2UgcXVhbGlmaWVyXG4iKTsKKwkJCWlmICghZnNnLT5nYWRnZXQtPmlzX2R1YWxzcGVlZCkKKwkJCQlicmVhazsKKwkJCXZhbHVlID0gbWluKHdfbGVuZ3RoLCAodTE2KSBzaXplb2YgZGV2X3F1YWxpZmllcik7CisJCQltZW1jcHkocmVxLT5idWYsICZkZXZfcXVhbGlmaWVyLCB2YWx1ZSk7CisJCQlicmVhazsKKworCQljYXNlIFVTQl9EVF9PVEhFUl9TUEVFRF9DT05GSUc6CisJCQlWREJHKGZzZywgImdldCBvdGhlci1zcGVlZCBjb25maWcgZGVzY3JpcHRvclxuIik7CisJCQlpZiAoIWZzZy0+Z2FkZ2V0LT5pc19kdWFsc3BlZWQpCisJCQkJYnJlYWs7CisJCQlnb3RvIGdldF9jb25maWc7CisjZW5kaWYKKwkJY2FzZSBVU0JfRFRfQ09ORklHOgorCQkJVkRCRyhmc2csICJnZXQgY29uZmlndXJhdGlvbiBkZXNjcmlwdG9yXG4iKTsKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKwkJZ2V0X2NvbmZpZzoKKyNlbmRpZgorCQkJdmFsdWUgPSBwb3B1bGF0ZV9jb25maWdfYnVmKGZzZy0+Z2FkZ2V0LAorCQkJCQlyZXEtPmJ1ZiwKKwkJCQkJd192YWx1ZSA+PiA4LAorCQkJCQl3X3ZhbHVlICYgMHhmZik7CisJCQlpZiAodmFsdWUgPj0gMCkKKwkJCQl2YWx1ZSA9IG1pbih3X2xlbmd0aCwgKHUxNikgdmFsdWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBVU0JfRFRfU1RSSU5HOgorCQkJVkRCRyhmc2csICJnZXQgc3RyaW5nIGRlc2NyaXB0b3JcbiIpOworCisJCQkvKiB3SW5kZXggPT0gbGFuZ3VhZ2UgY29kZSAqLworCQkJdmFsdWUgPSB1c2JfZ2FkZ2V0X2dldF9zdHJpbmcoJnN0cmluZ3RhYiwKKwkJCQkJd192YWx1ZSAmIDB4ZmYsIHJlcS0+YnVmKTsKKwkJCWlmICh2YWx1ZSA+PSAwKQorCQkJCXZhbHVlID0gbWluKHdfbGVuZ3RoLCAodTE2KSB2YWx1ZSk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCS8qIE9uZSBjb25maWcsIHR3byBzcGVlZHMgKi8KKwljYXNlIFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT046CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfU1RBTkRBUkQgfAorCQkJCVVTQl9SRUNJUF9ERVZJQ0UpKQorCQkJYnJlYWs7CisJCVZEQkcoZnNnLCAic2V0IGNvbmZpZ3VyYXRpb25cbiIpOworCQlpZiAod192YWx1ZSA9PSBDT05GSUdfVkFMVUUgfHwgd192YWx1ZSA9PSAwKSB7CisJCQlmc2ctPm5ld19jb25maWcgPSB3X3ZhbHVlOworCisJCQkvKiBSYWlzZSBhbiBleGNlcHRpb24gdG8gd2lwZSBvdXQgcHJldmlvdXMgdHJhbnNhY3Rpb24KKwkJCSAqIHN0YXRlIChxdWV1ZWQgYnVmcywgZXRjKSBhbmQgc2V0IHRoZSBuZXcgY29uZmlnLiAqLworCQkJcmFpc2VfZXhjZXB0aW9uKGZzZywgRlNHX1NUQVRFX0NPTkZJR19DSEFOR0UpOworCQkJdmFsdWUgPSBERUxBWUVEX1NUQVRVUzsKKwkJfQorCQlicmVhazsKKwljYXNlIFVTQl9SRVFfR0VUX0NPTkZJR1VSQVRJT046CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9TVEFOREFSRCB8CisJCQkJVVNCX1JFQ0lQX0RFVklDRSkpCisJCQlicmVhazsKKwkJVkRCRyhmc2csICJnZXQgY29uZmlndXJhdGlvblxuIik7CisJCSoodTggKikgcmVxLT5idWYgPSBmc2ctPmNvbmZpZzsKKwkJdmFsdWUgPSBtaW4od19sZW5ndGgsICh1MTYpIDEpOworCQlicmVhazsKKworCWNhc2UgVVNCX1JFUV9TRVRfSU5URVJGQUNFOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IChVU0JfRElSX09VVHwgVVNCX1RZUEVfU1RBTkRBUkQgfAorCQkJCVVTQl9SRUNJUF9JTlRFUkZBQ0UpKQorCQkJYnJlYWs7CisJCWlmIChmc2ctPmNvbmZpZyAmJiB3X2luZGV4ID09IDApIHsKKworCQkJLyogUmFpc2UgYW4gZXhjZXB0aW9uIHRvIHdpcGUgb3V0IHByZXZpb3VzIHRyYW5zYWN0aW9uCisJCQkgKiBzdGF0ZSAocXVldWVkIGJ1ZnMsIGV0YykgYW5kIGluc3RhbGwgdGhlIG5ldworCQkJICogaW50ZXJmYWNlIGFsdHNldHRpbmcuICovCisJCQlyYWlzZV9leGNlcHRpb24oZnNnLCBGU0dfU1RBVEVfSU5URVJGQUNFX0NIQU5HRSk7CisJCQl2YWx1ZSA9IERFTEFZRURfU1RBVFVTOworCQl9CisJCWJyZWFrOworCWNhc2UgVVNCX1JFUV9HRVRfSU5URVJGQUNFOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IChVU0JfRElSX0lOIHwgVVNCX1RZUEVfU1RBTkRBUkQgfAorCQkJCVVTQl9SRUNJUF9JTlRFUkZBQ0UpKQorCQkJYnJlYWs7CisJCWlmICghZnNnLT5jb25maWcpCisJCQlicmVhazsKKwkJaWYgKHdfaW5kZXggIT0gMCkgeworCQkJdmFsdWUgPSAtRURPTTsKKwkJCWJyZWFrOworCQl9CisJCVZEQkcoZnNnLCAiZ2V0IGludGVyZmFjZVxuIik7CisJCSoodTggKikgcmVxLT5idWYgPSAwOworCQl2YWx1ZSA9IG1pbih3X2xlbmd0aCwgKHUxNikgMSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJVkRCRyhmc2csCisJCQkidW5rbm93biBjb250cm9sIHJlcSAlMDJ4LiUwMnggdiUwNHggaSUwNHggbCV1XG4iLAorCQkJY3RybC0+YlJlcXVlc3RUeXBlLCBjdHJsLT5iUmVxdWVzdCwKKwkJCXdfdmFsdWUsIHdfaW5kZXgsIHdfbGVuZ3RoKTsKKwl9CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKKworc3RhdGljIGludCBmc2dfc2V0dXAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwKKwkJY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCkKK3sKKwlzdHJ1Y3QgZnNnX2RldgkJKmZzZyA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOworCWludAkJCXJjOworCisJKytmc2ctPmVwMF9yZXFfdGFnOwkJLy8gUmVjb3JkIGFycml2YWwgb2YgYSBuZXcgcmVxdWVzdAorCWZzZy0+ZXAwcmVxLT5jb250ZXh0ID0gTlVMTDsKKwlmc2ctPmVwMHJlcS0+bGVuZ3RoID0gMDsKKwlkdW1wX21zZyhmc2csICJlcDAtc2V0dXAiLCAodTggKikgY3RybCwgc2l6ZW9mKCpjdHJsKSk7CisKKwlpZiAoKGN0cmwtPmJSZXF1ZXN0VHlwZSAmIFVTQl9UWVBFX01BU0spID09IFVTQl9UWVBFX0NMQVNTKQorCQlyYyA9IGNsYXNzX3NldHVwX3JlcShmc2csIGN0cmwpOworCWVsc2UKKwkJcmMgPSBzdGFuZGFyZF9zZXR1cF9yZXEoZnNnLCBjdHJsKTsKKworCS8qIFJlc3BvbmQgd2l0aCBkYXRhL3N0YXR1cyBvciBkZWZlciB1bnRpbCBsYXRlcj8gKi8KKwlpZiAocmMgPj0gMCAmJiByYyAhPSBERUxBWUVEX1NUQVRVUykgeworCQlmc2ctPmVwMHJlcS0+bGVuZ3RoID0gcmM7CisJCWZzZy0+ZXAwcmVxLT56ZXJvID0gKHJjIDwgY3RybC0+d0xlbmd0aCAmJgorCQkJCShyYyAlIGdhZGdldC0+ZXAwLT5tYXhwYWNrZXQpID09IDApOworCQlmc2ctPmVwMHJlcV9uYW1lID0gKGN0cmwtPmJSZXF1ZXN0VHlwZSAmIFVTQl9ESVJfSU4gPworCQkJCSJlcDAtaW4iIDogImVwMC1vdXQiKTsKKwkJcmMgPSBlcDBfcXVldWUoZnNnKTsKKwl9CisKKwkvKiBEZXZpY2UgZWl0aGVyIHN0YWxscyAocmMgPCAwKSBvciByZXBvcnRzIHN1Y2Nlc3MgKi8KKwlyZXR1cm4gcmM7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogQWxsIHRoZSBmb2xsb3dpbmcgcm91dGluZXMgcnVuIGluIHByb2Nlc3MgY29udGV4dCAqLworCisKKy8qIFVzZSB0aGlzIGZvciBidWxrIG9yIGludGVycnVwdCB0cmFuc2ZlcnMsIG5vdCBlcDAgKi8KK3N0YXRpYyB2b2lkIHN0YXJ0X3RyYW5zZmVyKHN0cnVjdCBmc2dfZGV2ICpmc2csIHN0cnVjdCB1c2JfZXAgKmVwLAorCQlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSwgdm9sYXRpbGUgaW50ICpwYnVzeSwKKwkJdm9sYXRpbGUgZW51bSBmc2dfYnVmZmVyX3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQJcmM7CisKKwlpZiAoZXAgPT0gZnNnLT5idWxrX2luKQorCQlkdW1wX21zZyhmc2csICJidWxrLWluIiwgcmVxLT5idWYsIHJlcS0+bGVuZ3RoKTsKKwllbHNlIGlmIChlcCA9PSBmc2ctPmludHJfaW4pCisJCWR1bXBfbXNnKGZzZywgImludHItaW4iLCByZXEtPmJ1ZiwgcmVxLT5sZW5ndGgpOworCSpwYnVzeSA9IDE7CisJKnN0YXRlID0gQlVGX1NUQVRFX0JVU1k7CisJcmMgPSB1c2JfZXBfcXVldWUoZXAsIHJlcSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJjICE9IDApIHsKKwkJKnBidXN5ID0gMDsKKwkJKnN0YXRlID0gQlVGX1NUQVRFX0VNUFRZOworCisJCS8qIFdlIGNhbid0IGRvIG11Y2ggbW9yZSB0aGFuIHdhaXQgZm9yIGEgcmVzZXQgKi8KKworCQkvKiBOb3RlOiBjdXJyZW50bHkgdGhlIG5ldDIyODAgZHJpdmVyIGZhaWxzIHplcm8tbGVuZ3RoCisJCSAqIHN1Ym1pc3Npb25zIGlmIERNQSBpcyBlbmFibGVkLiAqLworCQlpZiAocmMgIT0gLUVTSFVURE9XTiAmJiAhKHJjID09IC1FT1BOT1RTVVBQICYmCisJCQkJCQlyZXEtPmxlbmd0aCA9PSAwKSkKKwkJCVdBUk4oZnNnLCAiZXJyb3IgaW4gc3VibWlzc2lvbjogJXMgLS0+ICVkXG4iLAorCQkJCQllcC0+bmFtZSwgcmMpOworCX0KK30KKworCitzdGF0aWMgaW50IHNsZWVwX3RocmVhZChzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCWludAlyYzsKKworCS8qIFdhaXQgdW50aWwgYSBzaWduYWwgYXJyaXZlcyBvciB3ZSBhcmUgd29rZW4gdXAgKi8KKwlyYyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShmc2ctPnRocmVhZF93cWgsCisJCQlmc2ctPnRocmVhZF93YWtldXBfbmVlZGVkKTsKKwlmc2ctPnRocmVhZF93YWtldXBfbmVlZGVkID0gMDsKKwlpZiAoY3VycmVudC0+ZmxhZ3MgJiBQRl9GUkVFWkUpCisJCXJlZnJpZ2VyYXRvcihQRl9GUkVFWkUpOworCXJldHVybiAocmMgPyAtRUlOVFIgOiAwKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IGRvX3JlYWQoc3RydWN0IGZzZ19kZXYgKmZzZykKK3sKKwlzdHJ1Y3QgbHVuCQkqY3VybHVuID0gZnNnLT5jdXJsdW47CisJdTMyCQkJbGJhOworCXN0cnVjdCBmc2dfYnVmZmhkCSpiaDsKKwlpbnQJCQlyYzsKKwl1MzIJCQlhbW91bnRfbGVmdDsKKwlsb2ZmX3QJCQlmaWxlX29mZnNldCwgZmlsZV9vZmZzZXRfdG1wOworCXVuc2lnbmVkIGludAkJYW1vdW50OworCXVuc2lnbmVkIGludAkJcGFydGlhbF9wYWdlOworCXNzaXplX3QJCQlucmVhZDsKKworCS8qIEdldCB0aGUgc3RhcnRpbmcgTG9naWNhbCBCbG9jayBBZGRyZXNzIGFuZCBjaGVjayB0aGF0IGl0J3MKKwkgKiBub3QgdG9vIGJpZyAqLworCWlmIChmc2ctPmNtbmRbMF0gPT0gU0NfUkVBRF82KQorCQlsYmEgPSAoZnNnLT5jbW5kWzFdIDw8IDE2KSB8IGdldF9iZTE2KCZmc2ctPmNtbmRbMl0pOworCWVsc2UgeworCQlsYmEgPSBnZXRfYmUzMigmZnNnLT5jbW5kWzJdKTsKKworCQkvKiBXZSBhbGxvdyBEUE8gKERpc2FibGUgUGFnZSBPdXQgPSBkb24ndCBzYXZlIGRhdGEgaW4gdGhlCisJCSAqIGNhY2hlKSBhbmQgRlVBIChGb3JjZSBVbml0IEFjY2VzcyA9IGRvbid0IHJlYWQgZnJvbSB0aGUKKwkJICogY2FjaGUpLCBidXQgd2UgZG9uJ3QgaW1wbGVtZW50IHRoZW0uICovCisJCWlmICgoZnNnLT5jbW5kWzFdICYgfjB4MTgpICE9IDApIHsKKwkJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0lOVkFMSURfRklFTERfSU5fQ0RCOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJaWYgKGxiYSA+PSBjdXJsdW4tPm51bV9zZWN0b3JzKSB7CisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0xPR0lDQUxfQkxPQ0tfQUREUkVTU19PVVRfT0ZfUkFOR0U7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlmaWxlX29mZnNldCA9ICgobG9mZl90KSBsYmEpIDw8IDk7CisKKwkvKiBDYXJyeSBvdXQgdGhlIGZpbGUgcmVhZHMgKi8KKwlhbW91bnRfbGVmdCA9IGZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZDsKKwlpZiAodW5saWtlbHkoYW1vdW50X2xlZnQgPT0gMCkpCisJCXJldHVybiAtRUlPOwkJLy8gTm8gZGVmYXVsdCByZXBseQorCisJZm9yICg7OykgeworCisJCS8qIEZpZ3VyZSBvdXQgaG93IG11Y2ggd2UgbmVlZCB0byByZWFkOgorCQkgKiBUcnkgdG8gcmVhZCB0aGUgcmVtYWluaW5nIGFtb3VudC4KKwkJICogQnV0IGRvbid0IHJlYWQgbW9yZSB0aGFuIHRoZSBidWZmZXIgc2l6ZS4KKwkJICogQW5kIGRvbid0IHRyeSB0byByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKwkJICogRmluYWxseSwgaWYgd2UncmUgbm90IGF0IGEgcGFnZSBib3VuZGFyeSwgZG9uJ3QgcmVhZCBwYXN0CisJCSAqCXRoZSBuZXh0IHBhZ2UuCisJCSAqIElmIHRoaXMgbWVhbnMgcmVhZGluZyAwIHRoZW4gd2Ugd2VyZSBhc2tlZCB0byByZWFkIHBhc3QKKwkJICoJdGhlIGVuZCBvZiBmaWxlLiAqLworCQlhbW91bnQgPSBtaW4oKHVuc2lnbmVkIGludCkgYW1vdW50X2xlZnQsIG1vZF9kYXRhLmJ1Zmxlbik7CisJCWFtb3VudCA9IG1pbigobG9mZl90KSBhbW91bnQsCisJCQkJY3VybHVuLT5maWxlX2xlbmd0aCAtIGZpbGVfb2Zmc2V0KTsKKwkJcGFydGlhbF9wYWdlID0gZmlsZV9vZmZzZXQgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CisJCWlmIChwYXJ0aWFsX3BhZ2UgPiAwKQorCQkJYW1vdW50ID0gbWluKGFtb3VudCwgKHVuc2lnbmVkIGludCkgUEFHRV9DQUNIRV9TSVpFIC0KKwkJCQkJcGFydGlhbF9wYWdlKTsKKworCQkvKiBXYWl0IGZvciB0aGUgbmV4dCBidWZmZXIgdG8gYmVjb21lIGF2YWlsYWJsZSAqLworCQliaCA9IGZzZy0+bmV4dF9idWZmaGRfdG9fZmlsbDsKKwkJd2hpbGUgKGJoLT5zdGF0ZSAhPSBCVUZfU1RBVEVfRU1QVFkpIHsKKwkJCWlmICgocmMgPSBzbGVlcF90aHJlYWQoZnNnKSkgIT0gMCkKKwkJCQlyZXR1cm4gcmM7CisJCX0KKworCQkvKiBJZiB3ZSB3ZXJlIGFza2VkIHRvIHJlYWQgcGFzdCB0aGUgZW5kIG9mIGZpbGUsCisJCSAqIGVuZCB3aXRoIGFuIGVtcHR5IGJ1ZmZlci4gKi8KKwkJaWYgKGFtb3VudCA9PSAwKSB7CisJCQljdXJsdW4tPnNlbnNlX2RhdGEgPQorCQkJCQlTU19MT0dJQ0FMX0JMT0NLX0FERFJFU1NfT1VUX09GX1JBTkdFOworCQkJY3VybHVuLT5zZW5zZV9kYXRhX2luZm8gPSBmaWxlX29mZnNldCA+PiA5OworCQkJYmgtPmlucmVxLT5sZW5ndGggPSAwOworCQkJYmgtPnN0YXRlID0gQlVGX1NUQVRFX0ZVTEw7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFBlcmZvcm0gdGhlIHJlYWQgKi8KKwkJZmlsZV9vZmZzZXRfdG1wID0gZmlsZV9vZmZzZXQ7CisJCW5yZWFkID0gdmZzX3JlYWQoY3VybHVuLT5maWxwLAorCQkJCShjaGFyIF9fdXNlciAqKSBiaC0+YnVmLAorCQkJCWFtb3VudCwgJmZpbGVfb2Zmc2V0X3RtcCk7CisJCVZMREJHKGN1cmx1biwgImZpbGUgcmVhZCAldSBAICVsbHUgLT4gJWRcbiIsIGFtb3VudCwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBmaWxlX29mZnNldCwKKwkJCQkoaW50KSBucmVhZCk7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCXJldHVybiAtRUlOVFI7CisKKwkJaWYgKG5yZWFkIDwgMCkgeworCQkJTERCRyhjdXJsdW4sICJlcnJvciBpbiBmaWxlIHJlYWQ6ICVkXG4iLAorCQkJCQkoaW50KSBucmVhZCk7CisJCQlucmVhZCA9IDA7CisJCX0gZWxzZSBpZiAobnJlYWQgPCBhbW91bnQpIHsKKwkJCUxEQkcoY3VybHVuLCAicGFydGlhbCBmaWxlIHJlYWQ6ICVkLyV1XG4iLAorCQkJCQkoaW50KSBucmVhZCwgYW1vdW50KTsKKwkJCW5yZWFkIC09IChucmVhZCAmIDUxMSk7CS8vIFJvdW5kIGRvd24gdG8gYSBibG9jaworCQl9CisJCWZpbGVfb2Zmc2V0ICArPSBucmVhZDsKKwkJYW1vdW50X2xlZnQgIC09IG5yZWFkOworCQlmc2ctPnJlc2lkdWUgLT0gbnJlYWQ7CisJCWJoLT5pbnJlcS0+bGVuZ3RoID0gbnJlYWQ7CisJCWJoLT5zdGF0ZSA9IEJVRl9TVEFURV9GVUxMOworCisJCS8qIElmIGFuIGVycm9yIG9jY3VycmVkLCByZXBvcnQgaXQgYW5kIGl0cyBwb3NpdGlvbiAqLworCQlpZiAobnJlYWQgPCBhbW91bnQpIHsKKwkJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX1VOUkVDT1ZFUkVEX1JFQURfRVJST1I7CisJCQljdXJsdW4tPnNlbnNlX2RhdGFfaW5mbyA9IGZpbGVfb2Zmc2V0ID4+IDk7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChhbW91bnRfbGVmdCA9PSAwKQorCQkJYnJlYWs7CQkvLyBObyBtb3JlIGxlZnQgdG8gcmVhZAorCisJCS8qIFNlbmQgdGhpcyBidWZmZXIgYW5kIGdvIHJlYWQgc29tZSBtb3JlICovCisJCWJoLT5pbnJlcS0+emVybyA9IDA7CisJCXN0YXJ0X3RyYW5zZmVyKGZzZywgZnNnLT5idWxrX2luLCBiaC0+aW5yZXEsCisJCQkJJmJoLT5pbnJlcV9idXN5LCAmYmgtPnN0YXRlKTsKKwkJZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsID0gYmgtPm5leHQ7CisJfQorCisJcmV0dXJuIC1FSU87CQkvLyBObyBkZWZhdWx0IHJlcGx5Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBkb193cml0ZShzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCXN0cnVjdCBsdW4JCSpjdXJsdW4gPSBmc2ctPmN1cmx1bjsKKwl1MzIJCQlsYmE7CisJc3RydWN0IGZzZ19idWZmaGQJKmJoOworCWludAkJCWdldF9zb21lX21vcmU7CisJdTMyCQkJYW1vdW50X2xlZnRfdG9fcmVxLCBhbW91bnRfbGVmdF90b193cml0ZTsKKwlsb2ZmX3QJCQl1c2Jfb2Zmc2V0LCBmaWxlX29mZnNldCwgZmlsZV9vZmZzZXRfdG1wOworCXVuc2lnbmVkIGludAkJYW1vdW50OworCXVuc2lnbmVkIGludAkJcGFydGlhbF9wYWdlOworCXNzaXplX3QJCQlud3JpdHRlbjsKKwlpbnQJCQlyYzsKKworCWlmIChjdXJsdW4tPnJvKSB7CisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX1dSSVRFX1BST1RFQ1RFRDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWN1cmx1bi0+ZmlscC0+Zl9mbGFncyAmPSB+T19TWU5DOwkvLyBEZWZhdWx0IGlzIG5vdCB0byB3YWl0CisKKwkvKiBHZXQgdGhlIHN0YXJ0aW5nIExvZ2ljYWwgQmxvY2sgQWRkcmVzcyBhbmQgY2hlY2sgdGhhdCBpdCdzCisJICogbm90IHRvbyBiaWcgKi8KKwlpZiAoZnNnLT5jbW5kWzBdID09IFNDX1dSSVRFXzYpCisJCWxiYSA9IChmc2ctPmNtbmRbMV0gPDwgMTYpIHwgZ2V0X2JlMTYoJmZzZy0+Y21uZFsyXSk7CisJZWxzZSB7CisJCWxiYSA9IGdldF9iZTMyKCZmc2ctPmNtbmRbMl0pOworCisJCS8qIFdlIGFsbG93IERQTyAoRGlzYWJsZSBQYWdlIE91dCA9IGRvbid0IHNhdmUgZGF0YSBpbiB0aGUKKwkJICogY2FjaGUpIGFuZCBGVUEgKEZvcmNlIFVuaXQgQWNjZXNzID0gd3JpdGUgZGlyZWN0bHkgdG8gdGhlCisJCSAqIG1lZGl1bSkuICBXZSBkb24ndCBpbXBsZW1lbnQgRFBPOyB3ZSBpbXBsZW1lbnQgRlVBIGJ5CisJCSAqIHBlcmZvcm1pbmcgc3luY2hyb25vdXMgb3V0cHV0LiAqLworCQlpZiAoKGZzZy0+Y21uZFsxXSAmIH4weDE4KSAhPSAwKSB7CisJCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19JTlZBTElEX0ZJRUxEX0lOX0NEQjsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChmc2ctPmNtbmRbMV0gJiAweDA4KQkvLyBGVUEKKwkJCWN1cmx1bi0+ZmlscC0+Zl9mbGFncyB8PSBPX1NZTkM7CisJfQorCWlmIChsYmEgPj0gY3VybHVuLT5udW1fc2VjdG9ycykgeworCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19MT0dJQ0FMX0JMT0NLX0FERFJFU1NfT1VUX09GX1JBTkdFOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBDYXJyeSBvdXQgdGhlIGZpbGUgd3JpdGVzICovCisJZ2V0X3NvbWVfbW9yZSA9IDE7CisJZmlsZV9vZmZzZXQgPSB1c2Jfb2Zmc2V0ID0gKChsb2ZmX3QpIGxiYSkgPDwgOTsKKwlhbW91bnRfbGVmdF90b19yZXEgPSBhbW91bnRfbGVmdF90b193cml0ZSA9IGZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZDsKKworCXdoaWxlIChhbW91bnRfbGVmdF90b193cml0ZSA+IDApIHsKKworCQkvKiBRdWV1ZSBhIHJlcXVlc3QgZm9yIG1vcmUgZGF0YSBmcm9tIHRoZSBob3N0ICovCisJCWJoID0gZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsOworCQlpZiAoYmgtPnN0YXRlID09IEJVRl9TVEFURV9FTVBUWSAmJiBnZXRfc29tZV9tb3JlKSB7CisKKwkJCS8qIEZpZ3VyZSBvdXQgaG93IG11Y2ggd2Ugd2FudCB0byBnZXQ6CisJCQkgKiBUcnkgdG8gZ2V0IHRoZSByZW1haW5pbmcgYW1vdW50LgorCQkJICogQnV0IGRvbid0IGdldCBtb3JlIHRoYW4gdGhlIGJ1ZmZlciBzaXplLgorCQkJICogQW5kIGRvbid0IHRyeSB0byBnbyBwYXN0IHRoZSBlbmQgb2YgdGhlIGZpbGUuCisJCQkgKiBJZiB3ZSdyZSBub3QgYXQgYSBwYWdlIGJvdW5kYXJ5LAorCQkJICoJZG9uJ3QgZ28gcGFzdCB0aGUgbmV4dCBwYWdlLgorCQkJICogSWYgdGhpcyBtZWFucyBnZXR0aW5nIDAsIHRoZW4gd2Ugd2VyZSBhc2tlZAorCQkJICoJdG8gd3JpdGUgcGFzdCB0aGUgZW5kIG9mIGZpbGUuCisJCQkgKiBGaW5hbGx5LCByb3VuZCBkb3duIHRvIGEgYmxvY2sgYm91bmRhcnkuICovCisJCQlhbW91bnQgPSBtaW4oYW1vdW50X2xlZnRfdG9fcmVxLCBtb2RfZGF0YS5idWZsZW4pOworCQkJYW1vdW50ID0gbWluKChsb2ZmX3QpIGFtb3VudCwgY3VybHVuLT5maWxlX2xlbmd0aCAtCisJCQkJCXVzYl9vZmZzZXQpOworCQkJcGFydGlhbF9wYWdlID0gdXNiX29mZnNldCAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKKwkJCWlmIChwYXJ0aWFsX3BhZ2UgPiAwKQorCQkJCWFtb3VudCA9IG1pbihhbW91bnQsCisJKHVuc2lnbmVkIGludCkgUEFHRV9DQUNIRV9TSVpFIC0gcGFydGlhbF9wYWdlKTsKKworCQkJaWYgKGFtb3VudCA9PSAwKSB7CisJCQkJZ2V0X3NvbWVfbW9yZSA9IDA7CisJCQkJY3VybHVuLT5zZW5zZV9kYXRhID0KKwkJCQkJU1NfTE9HSUNBTF9CTE9DS19BRERSRVNTX09VVF9PRl9SQU5HRTsKKwkJCQljdXJsdW4tPnNlbnNlX2RhdGFfaW5mbyA9IHVzYl9vZmZzZXQgPj4gOTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWFtb3VudCAtPSAoYW1vdW50ICYgNTExKTsKKwkJCWlmIChhbW91bnQgPT0gMCkgeworCisJCQkJLyogV2h5IHdlcmUgd2Ugd2VyZSBhc2tlZCB0byB0cmFuc2ZlciBhCisJCQkJICogcGFydGlhbCBibG9jaz8gKi8KKwkJCQlnZXRfc29tZV9tb3JlID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogR2V0IHRoZSBuZXh0IGJ1ZmZlciAqLworCQkJdXNiX29mZnNldCArPSBhbW91bnQ7CisJCQlmc2ctPnVzYl9hbW91bnRfbGVmdCAtPSBhbW91bnQ7CisJCQlhbW91bnRfbGVmdF90b19yZXEgLT0gYW1vdW50OworCQkJaWYgKGFtb3VudF9sZWZ0X3RvX3JlcSA9PSAwKQorCQkJCWdldF9zb21lX21vcmUgPSAwOworCisJCQkvKiBhbW91bnQgaXMgYWx3YXlzIGRpdmlzaWJsZSBieSA1MTIsIGhlbmNlIGJ5CisJCQkgKiB0aGUgYnVsay1vdXQgbWF4cGFja2V0IHNpemUgKi8KKwkJCWJoLT5vdXRyZXEtPmxlbmd0aCA9IGJoLT5idWxrX291dF9pbnRlbmRlZF9sZW5ndGggPQorCQkJCQlhbW91bnQ7CisJCQlzdGFydF90cmFuc2Zlcihmc2csIGZzZy0+YnVsa19vdXQsIGJoLT5vdXRyZXEsCisJCQkJCSZiaC0+b3V0cmVxX2J1c3ksICZiaC0+c3RhdGUpOworCQkJZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsID0gYmgtPm5leHQ7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFdyaXRlIHRoZSByZWNlaXZlZCBkYXRhIHRvIHRoZSBiYWNraW5nIGZpbGUgKi8KKwkJYmggPSBmc2ctPm5leHRfYnVmZmhkX3RvX2RyYWluOworCQlpZiAoYmgtPnN0YXRlID09IEJVRl9TVEFURV9FTVBUWSAmJiAhZ2V0X3NvbWVfbW9yZSkKKwkJCWJyZWFrOwkJCS8vIFdlIHN0b3BwZWQgZWFybHkKKwkJaWYgKGJoLT5zdGF0ZSA9PSBCVUZfU1RBVEVfRlVMTCkgeworCQkJZnNnLT5uZXh0X2J1ZmZoZF90b19kcmFpbiA9IGJoLT5uZXh0OworCQkJYmgtPnN0YXRlID0gQlVGX1NUQVRFX0VNUFRZOworCisJCQkvKiBEaWQgc29tZXRoaW5nIGdvIHdyb25nIHdpdGggdGhlIHRyYW5zZmVyPyAqLworCQkJaWYgKGJoLT5vdXRyZXEtPnN0YXR1cyAhPSAwKSB7CisJCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfQ09NTVVOSUNBVElPTl9GQUlMVVJFOworCQkJCWN1cmx1bi0+c2Vuc2VfZGF0YV9pbmZvID0gZmlsZV9vZmZzZXQgPj4gOTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJYW1vdW50ID0gYmgtPm91dHJlcS0+YWN0dWFsOworCQkJaWYgKGN1cmx1bi0+ZmlsZV9sZW5ndGggLSBmaWxlX29mZnNldCA8IGFtb3VudCkgeworCQkJCUxFUlJPUihjdXJsdW4sCisJIndyaXRlICV1IEAgJWxsdSBiZXlvbmQgZW5kICVsbHVcbiIsCisJYW1vdW50LCAodW5zaWduZWQgbG9uZyBsb25nKSBmaWxlX29mZnNldCwKKwkodW5zaWduZWQgbG9uZyBsb25nKSBjdXJsdW4tPmZpbGVfbGVuZ3RoKTsKKwkJCQlhbW91bnQgPSBjdXJsdW4tPmZpbGVfbGVuZ3RoIC0gZmlsZV9vZmZzZXQ7CisJCQl9CisKKwkJCS8qIFBlcmZvcm0gdGhlIHdyaXRlICovCisJCQlmaWxlX29mZnNldF90bXAgPSBmaWxlX29mZnNldDsKKwkJCW53cml0dGVuID0gdmZzX3dyaXRlKGN1cmx1bi0+ZmlscCwKKwkJCQkJKGNoYXIgX191c2VyICopIGJoLT5idWYsCisJCQkJCWFtb3VudCwgJmZpbGVfb2Zmc2V0X3RtcCk7CisJCQlWTERCRyhjdXJsdW4sICJmaWxlIHdyaXRlICV1IEAgJWxsdSAtPiAlZFxuIiwgYW1vdW50LAorCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBmaWxlX29mZnNldCwKKwkJCQkJKGludCkgbndyaXR0ZW4pOworCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJCXJldHVybiAtRUlOVFI7CQkvLyBJbnRlcnJ1cHRlZCEKKworCQkJaWYgKG53cml0dGVuIDwgMCkgeworCQkJCUxEQkcoY3VybHVuLCAiZXJyb3IgaW4gZmlsZSB3cml0ZTogJWRcbiIsCisJCQkJCQkoaW50KSBud3JpdHRlbik7CisJCQkJbndyaXR0ZW4gPSAwOworCQkJfSBlbHNlIGlmIChud3JpdHRlbiA8IGFtb3VudCkgeworCQkJCUxEQkcoY3VybHVuLCAicGFydGlhbCBmaWxlIHdyaXRlOiAlZC8ldVxuIiwKKwkJCQkJCShpbnQpIG53cml0dGVuLCBhbW91bnQpOworCQkJCW53cml0dGVuIC09IChud3JpdHRlbiAmIDUxMSk7CisJCQkJCQkvLyBSb3VuZCBkb3duIHRvIGEgYmxvY2sKKwkJCX0KKwkJCWZpbGVfb2Zmc2V0ICs9IG53cml0dGVuOworCQkJYW1vdW50X2xlZnRfdG9fd3JpdGUgLT0gbndyaXR0ZW47CisJCQlmc2ctPnJlc2lkdWUgLT0gbndyaXR0ZW47CisKKwkJCS8qIElmIGFuIGVycm9yIG9jY3VycmVkLCByZXBvcnQgaXQgYW5kIGl0cyBwb3NpdGlvbiAqLworCQkJaWYgKG53cml0dGVuIDwgYW1vdW50KSB7CisJCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfV1JJVEVfRVJST1I7CisJCQkJY3VybHVuLT5zZW5zZV9kYXRhX2luZm8gPSBmaWxlX29mZnNldCA+PiA5OworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBEaWQgdGhlIGhvc3QgZGVjaWRlIHRvIHN0b3AgZWFybHk/ICovCisJCQlpZiAoYmgtPm91dHJlcS0+YWN0dWFsICE9IGJoLT5vdXRyZXEtPmxlbmd0aCkgeworCQkJCWZzZy0+c2hvcnRfcGFja2V0X3JlY2VpdmVkID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogV2FpdCBmb3Igc29tZXRoaW5nIHRvIGhhcHBlbiAqLworCQlpZiAoKHJjID0gc2xlZXBfdGhyZWFkKGZzZykpICE9IDApCisJCQlyZXR1cm4gcmM7CisJfQorCisJcmV0dXJuIC1FSU87CQkvLyBObyBkZWZhdWx0IHJlcGx5Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogU3luYyB0aGUgZmlsZSBkYXRhLCBkb24ndCBib3RoZXIgd2l0aCB0aGUgbWV0YWRhdGEuCisgKiBUaGlzIGNvZGUgd2FzIGNvcGllZCBmcm9tIGZzL2J1ZmZlci5jOnN5c19mZGF0YXN5bmMoKS4gKi8KK3N0YXRpYyBpbnQgZnN5bmNfc3ViKHN0cnVjdCBsdW4gKmN1cmx1bikKK3sKKwlzdHJ1Y3QgZmlsZQkqZmlscCA9IGN1cmx1bi0+ZmlscDsKKwlzdHJ1Y3QgaW5vZGUJKmlub2RlOworCWludAkJcmMsIGVycjsKKworCWlmIChjdXJsdW4tPnJvIHx8ICFmaWxwKQorCQlyZXR1cm4gMDsKKwlpZiAoIWZpbHAtPmZfb3AtPmZzeW5jKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJZG93bigmaW5vZGUtPmlfc2VtKTsKKwljdXJyZW50LT5mbGFncyB8PSBQRl9TWU5DV1JJVEU7CisJcmMgPSBmaWxlbWFwX2ZkYXRhd3JpdGUoaW5vZGUtPmlfbWFwcGluZyk7CisJZXJyID0gZmlscC0+Zl9vcC0+ZnN5bmMoZmlscCwgZmlscC0+Zl9kZW50cnksIDEpOworCWlmICghcmMpCisJCXJjID0gZXJyOworCWVyciA9IGZpbGVtYXBfZmRhdGF3YWl0KGlub2RlLT5pX21hcHBpbmcpOworCWlmICghcmMpCisJCXJjID0gZXJyOworCWN1cnJlbnQtPmZsYWdzICY9IH5QRl9TWU5DV1JJVEU7CisJdXAoJmlub2RlLT5pX3NlbSk7CisJVkxEQkcoY3VybHVuLCAiZmRhdGFzeW5jIC0+ICVkXG4iLCByYyk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBmc3luY19hbGwoc3RydWN0IGZzZ19kZXYgKmZzZykKK3sKKwlpbnQJaTsKKworCWZvciAoaSA9IDA7IGkgPCBmc2ctPm5sdW5zOyArK2kpCisJCWZzeW5jX3N1YigmZnNnLT5sdW5zW2ldKTsKK30KKworc3RhdGljIGludCBkb19zeW5jaHJvbml6ZV9jYWNoZShzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCXN0cnVjdCBsdW4JKmN1cmx1biA9IGZzZy0+Y3VybHVuOworCWludAkJcmM7CisKKwkvKiBXZSBpZ25vcmUgdGhlIHJlcXVlc3RlZCBMQkEgYW5kIHdyaXRlIG91dCBhbGwgZmlsZSdzCisJICogZGlydHkgZGF0YSBidWZmZXJzLiAqLworCXJjID0gZnN5bmNfc3ViKGN1cmx1bik7CisJaWYgKHJjKQorCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19XUklURV9FUlJPUjsKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3N1YihzdHJ1Y3QgbHVuICpjdXJsdW4pCit7CisJc3RydWN0IGZpbGUJKmZpbHAgPSBjdXJsdW4tPmZpbHA7CisJc3RydWN0IGlub2RlCSppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXVuc2lnbmVkIGxvbmcJcmM7CisKKwlyYyA9IGludmFsaWRhdGVfaW5vZGVfcGFnZXMoaW5vZGUtPmlfbWFwcGluZyk7CisJVkxEQkcoY3VybHVuLCAiaW52YWxpZGF0ZV9pbm9kZV9wYWdlcyAtPiAlbGRcbiIsIHJjKTsKK30KKworc3RhdGljIGludCBkb192ZXJpZnkoc3RydWN0IGZzZ19kZXYgKmZzZykKK3sKKwlzdHJ1Y3QgbHVuCQkqY3VybHVuID0gZnNnLT5jdXJsdW47CisJdTMyCQkJbGJhOworCXUzMgkJCXZlcmlmaWNhdGlvbl9sZW5ndGg7CisJc3RydWN0IGZzZ19idWZmaGQJKmJoID0gZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsOworCWxvZmZfdAkJCWZpbGVfb2Zmc2V0LCBmaWxlX29mZnNldF90bXA7CisJdTMyCQkJYW1vdW50X2xlZnQ7CisJdW5zaWduZWQgaW50CQlhbW91bnQ7CisJc3NpemVfdAkJCW5yZWFkOworCisJLyogR2V0IHRoZSBzdGFydGluZyBMb2dpY2FsIEJsb2NrIEFkZHJlc3MgYW5kIGNoZWNrIHRoYXQgaXQncworCSAqIG5vdCB0b28gYmlnICovCisJbGJhID0gZ2V0X2JlMzIoJmZzZy0+Y21uZFsyXSk7CisJaWYgKGxiYSA+PSBjdXJsdW4tPm51bV9zZWN0b3JzKSB7CisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0xPR0lDQUxfQkxPQ0tfQUREUkVTU19PVVRfT0ZfUkFOR0U7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFdlIGFsbG93IERQTyAoRGlzYWJsZSBQYWdlIE91dCA9IGRvbid0IHNhdmUgZGF0YSBpbiB0aGUKKwkgKiBjYWNoZSkgYnV0IHdlIGRvbid0IGltcGxlbWVudCBpdC4gKi8KKwlpZiAoKGZzZy0+Y21uZFsxXSAmIH4weDEwKSAhPSAwKSB7CisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0lOVkFMSURfRklFTERfSU5fQ0RCOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2ZXJpZmljYXRpb25fbGVuZ3RoID0gZ2V0X2JlMTYoJmZzZy0+Y21uZFs3XSk7CisJaWYgKHVubGlrZWx5KHZlcmlmaWNhdGlvbl9sZW5ndGggPT0gMCkpCisJCXJldHVybiAtRUlPOwkJLy8gTm8gZGVmYXVsdCByZXBseQorCisJLyogUHJlcGFyZSB0byBjYXJyeSBvdXQgdGhlIGZpbGUgdmVyaWZ5ICovCisJYW1vdW50X2xlZnQgPSB2ZXJpZmljYXRpb25fbGVuZ3RoIDw8IDk7CisJZmlsZV9vZmZzZXQgPSAoKGxvZmZfdCkgbGJhKSA8PCA5OworCisJLyogV3JpdGUgb3V0IGFsbCB0aGUgZGlydHkgYnVmZmVycyBiZWZvcmUgaW52YWxpZGF0aW5nIHRoZW0gKi8KKwlmc3luY19zdWIoY3VybHVuKTsKKwlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCXJldHVybiAtRUlOVFI7CisKKwlpbnZhbGlkYXRlX3N1YihjdXJsdW4pOworCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJcmV0dXJuIC1FSU5UUjsKKworCS8qIEp1c3QgdHJ5IHRvIHJlYWQgdGhlIHJlcXVlc3RlZCBibG9ja3MgKi8KKwl3aGlsZSAoYW1vdW50X2xlZnQgPiAwKSB7CisKKwkJLyogRmlndXJlIG91dCBob3cgbXVjaCB3ZSBuZWVkIHRvIHJlYWQ6CisJCSAqIFRyeSB0byByZWFkIHRoZSByZW1haW5pbmcgYW1vdW50LCBidXQgbm90IG1vcmUgdGhhbgorCQkgKiB0aGUgYnVmZmVyIHNpemUuCisJCSAqIEFuZCBkb24ndCB0cnkgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGZpbGUuCisJCSAqIElmIHRoaXMgbWVhbnMgcmVhZGluZyAwIHRoZW4gd2Ugd2VyZSBhc2tlZCB0byByZWFkCisJCSAqIHBhc3QgdGhlIGVuZCBvZiBmaWxlLiAqLworCQlhbW91bnQgPSBtaW4oKHVuc2lnbmVkIGludCkgYW1vdW50X2xlZnQsIG1vZF9kYXRhLmJ1Zmxlbik7CisJCWFtb3VudCA9IG1pbigobG9mZl90KSBhbW91bnQsCisJCQkJY3VybHVuLT5maWxlX2xlbmd0aCAtIGZpbGVfb2Zmc2V0KTsKKwkJaWYgKGFtb3VudCA9PSAwKSB7CisJCQljdXJsdW4tPnNlbnNlX2RhdGEgPQorCQkJCQlTU19MT0dJQ0FMX0JMT0NLX0FERFJFU1NfT1VUX09GX1JBTkdFOworCQkJY3VybHVuLT5zZW5zZV9kYXRhX2luZm8gPSBmaWxlX29mZnNldCA+PiA5OworCQkJYnJlYWs7CisJCX0KKworCQkvKiBQZXJmb3JtIHRoZSByZWFkICovCisJCWZpbGVfb2Zmc2V0X3RtcCA9IGZpbGVfb2Zmc2V0OworCQlucmVhZCA9IHZmc19yZWFkKGN1cmx1bi0+ZmlscCwKKwkJCQkoY2hhciBfX3VzZXIgKikgYmgtPmJ1ZiwKKwkJCQlhbW91bnQsICZmaWxlX29mZnNldF90bXApOworCQlWTERCRyhjdXJsdW4sICJmaWxlIHJlYWQgJXUgQCAlbGx1IC0+ICVkXG4iLCBhbW91bnQsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgZmlsZV9vZmZzZXQsCisJCQkJKGludCkgbnJlYWQpOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQlyZXR1cm4gLUVJTlRSOworCisJCWlmIChucmVhZCA8IDApIHsKKwkJCUxEQkcoY3VybHVuLCAiZXJyb3IgaW4gZmlsZSB2ZXJpZnk6ICVkXG4iLAorCQkJCQkoaW50KSBucmVhZCk7CisJCQlucmVhZCA9IDA7CisJCX0gZWxzZSBpZiAobnJlYWQgPCBhbW91bnQpIHsKKwkJCUxEQkcoY3VybHVuLCAicGFydGlhbCBmaWxlIHZlcmlmeTogJWQvJXVcbiIsCisJCQkJCShpbnQpIG5yZWFkLCBhbW91bnQpOworCQkJbnJlYWQgLT0gKG5yZWFkICYgNTExKTsJLy8gUm91bmQgZG93biB0byBhIHNlY3RvcgorCQl9CisJCWlmIChucmVhZCA9PSAwKSB7CisJCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19VTlJFQ09WRVJFRF9SRUFEX0VSUk9SOworCQkJY3VybHVuLT5zZW5zZV9kYXRhX2luZm8gPSBmaWxlX29mZnNldCA+PiA5OworCQkJYnJlYWs7CisJCX0KKwkJZmlsZV9vZmZzZXQgKz0gbnJlYWQ7CisJCWFtb3VudF9sZWZ0IC09IG5yZWFkOworCX0KKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IGRvX2lucXVpcnkoc3RydWN0IGZzZ19kZXYgKmZzZywgc3RydWN0IGZzZ19idWZmaGQgKmJoKQoreworCXU4CSpidWYgPSAodTggKikgYmgtPmJ1ZjsKKworCXN0YXRpYyBjaGFyIHZlbmRvcl9pZFtdID0gIkxpbnV4ICAgIjsKKwlzdGF0aWMgY2hhciBwcm9kdWN0X2lkW10gPSAiRmlsZS1TdG9yIEdhZGdldCI7CisKKwlpZiAoIWZzZy0+Y3VybHVuKSB7CQkvLyBVbnN1cHBvcnRlZCBMVU5zIGFyZSBva2F5CisJCWZzZy0+YmFkX2x1bl9va2F5ID0gMTsKKwkJbWVtc2V0KGJ1ZiwgMCwgMzYpOworCQlidWZbMF0gPSAweDdmOwkJLy8gVW5zdXBwb3J0ZWQsIG5vIGRldmljZS10eXBlCisJCXJldHVybiAzNjsKKwl9CisKKwltZW1zZXQoYnVmLCAwLCA4KTsJLy8gTm9uLXJlbW92YWJsZSwgZGlyZWN0LWFjY2VzcyBkZXZpY2UKKwlpZiAobW9kX2RhdGEucmVtb3ZhYmxlKQorCQlidWZbMV0gPSAweDgwOworCWJ1ZlsyXSA9IDI7CQkvLyBBTlNJIFNDU0kgbGV2ZWwgMgorCWJ1ZlszXSA9IDI7CQkvLyBTQ1NJLTIgSU5RVUlSWSBkYXRhIGZvcm1hdAorCWJ1Zls0XSA9IDMxOwkJLy8gQWRkaXRpb25hbCBsZW5ndGgKKwkJCQkvLyBObyBzcGVjaWFsIG9wdGlvbnMKKwlzcHJpbnRmKGJ1ZiArIDgsICIlLThzJS0xNnMlMDR4IiwgdmVuZG9yX2lkLCBwcm9kdWN0X2lkLAorCQkJbW9kX2RhdGEucmVsZWFzZSk7CisJcmV0dXJuIDM2OworfQorCisKK3N0YXRpYyBpbnQgZG9fcmVxdWVzdF9zZW5zZShzdHJ1Y3QgZnNnX2RldiAqZnNnLCBzdHJ1Y3QgZnNnX2J1ZmZoZCAqYmgpCit7CisJc3RydWN0IGx1bgkqY3VybHVuID0gZnNnLT5jdXJsdW47CisJdTgJCSpidWYgPSAodTggKikgYmgtPmJ1ZjsKKwl1MzIJCXNkLCBzZGluZm87CisKKwkvKgorCSAqIEZyb20gdGhlIFNDU0ktMiBzcGVjLiwgc2VjdGlvbiA3LjkgKFVuaXQgYXR0ZW50aW9uIGNvbmRpdGlvbik6CisJICoKKwkgKiBJZiBhIFJFUVVFU1QgU0VOU0UgY29tbWFuZCBpcyByZWNlaXZlZCBmcm9tIGFuIGluaXRpYXRvcgorCSAqIHdpdGggYSBwZW5kaW5nIHVuaXQgYXR0ZW50aW9uIGNvbmRpdGlvbiAoYmVmb3JlIHRoZSB0YXJnZXQKKwkgKiBnZW5lcmF0ZXMgdGhlIGNvbnRpbmdlbnQgYWxsZWdpYW5jZSBjb25kaXRpb24pLCB0aGVuIHRoZQorCSAqIHRhcmdldCBzaGFsbCBlaXRoZXI6CisJICogICBhKSByZXBvcnQgYW55IHBlbmRpbmcgc2Vuc2UgZGF0YSBhbmQgcHJlc2VydmUgdGhlIHVuaXQKKwkgKglhdHRlbnRpb24gY29uZGl0aW9uIG9uIHRoZSBsb2dpY2FsIHVuaXQsIG9yLAorCSAqICAgYikgcmVwb3J0IHRoZSB1bml0IGF0dGVudGlvbiBjb25kaXRpb24sIG1heSBkaXNjYXJkIGFueQorCSAqCXBlbmRpbmcgc2Vuc2UgZGF0YSwgYW5kIGNsZWFyIHRoZSB1bml0IGF0dGVudGlvbgorCSAqCWNvbmRpdGlvbiBvbiB0aGUgbG9naWNhbCB1bml0IGZvciB0aGF0IGluaXRpYXRvci4KKwkgKgorCSAqIEZTRyBub3JtYWxseSB1c2VzIG9wdGlvbiBhKTsgZW5hYmxlIHRoaXMgY29kZSB0byB1c2Ugb3B0aW9uIGIpLgorCSAqLworI2lmIDAKKwlpZiAoY3VybHVuICYmIGN1cmx1bi0+dW5pdF9hdHRlbnRpb25fZGF0YSAhPSBTU19OT19TRU5TRSkgeworCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBjdXJsdW4tPnVuaXRfYXR0ZW50aW9uX2RhdGE7CisJCWN1cmx1bi0+dW5pdF9hdHRlbnRpb25fZGF0YSA9IFNTX05PX1NFTlNFOworCX0KKyNlbmRpZgorCisJaWYgKCFjdXJsdW4pIHsJCS8vIFVuc3VwcG9ydGVkIExVTnMgYXJlIG9rYXkKKwkJZnNnLT5iYWRfbHVuX29rYXkgPSAxOworCQlzZCA9IFNTX0xPR0lDQUxfVU5JVF9OT1RfU1VQUE9SVEVEOworCQlzZGluZm8gPSAwOworCX0gZWxzZSB7CisJCXNkID0gY3VybHVuLT5zZW5zZV9kYXRhOworCQlzZGluZm8gPSBjdXJsdW4tPnNlbnNlX2RhdGFfaW5mbzsKKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfTk9fU0VOU0U7CisJCWN1cmx1bi0+c2Vuc2VfZGF0YV9pbmZvID0gMDsKKwl9CisKKwltZW1zZXQoYnVmLCAwLCAxOCk7CisJYnVmWzBdID0gMHg4MCB8IDB4NzA7CQkJLy8gVmFsaWQsIGN1cnJlbnQgZXJyb3IKKwlidWZbMl0gPSBTSyhzZCk7CisJcHV0X2JlMzIoJmJ1ZlszXSwgc2RpbmZvKTsJCS8vIFNlbnNlIGluZm9ybWF0aW9uCisJYnVmWzddID0gMTggLSA4OwkJCS8vIEFkZGl0aW9uYWwgc2Vuc2UgbGVuZ3RoCisJYnVmWzEyXSA9IEFTQyhzZCk7CisJYnVmWzEzXSA9IEFTQ1Eoc2QpOworCXJldHVybiAxODsKK30KKworCitzdGF0aWMgaW50IGRvX3JlYWRfY2FwYWNpdHkoc3RydWN0IGZzZ19kZXYgKmZzZywgc3RydWN0IGZzZ19idWZmaGQgKmJoKQoreworCXN0cnVjdCBsdW4JKmN1cmx1biA9IGZzZy0+Y3VybHVuOworCXUzMgkJbGJhID0gZ2V0X2JlMzIoJmZzZy0+Y21uZFsyXSk7CisJaW50CQlwbWkgPSBmc2ctPmNtbmRbOF07CisJdTgJCSpidWYgPSAodTggKikgYmgtPmJ1ZjsKKworCS8qIENoZWNrIHRoZSBQTUkgYW5kIExCQSBmaWVsZHMgKi8KKwlpZiAocG1pID4gMSB8fCAocG1pID09IDAgJiYgbGJhICE9IDApKSB7CisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0lOVkFMSURfRklFTERfSU5fQ0RCOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwdXRfYmUzMigmYnVmWzBdLCBjdXJsdW4tPm51bV9zZWN0b3JzIC0gMSk7CS8vIE1heCBsb2dpY2FsIGJsb2NrCisJcHV0X2JlMzIoJmJ1Zls0XSwgNTEyKTsJCQkJLy8gQmxvY2sgbGVuZ3RoCisJcmV0dXJuIDg7Cit9CisKKworc3RhdGljIGludCBkb19tb2RlX3NlbnNlKHN0cnVjdCBmc2dfZGV2ICpmc2csIHN0cnVjdCBmc2dfYnVmZmhkICpiaCkKK3sKKwlzdHJ1Y3QgbHVuCSpjdXJsdW4gPSBmc2ctPmN1cmx1bjsKKwlpbnQJCW1zY21uZCA9IGZzZy0+Y21uZFswXTsKKwl1OAkJKmJ1ZiA9ICh1OCAqKSBiaC0+YnVmOworCXU4CQkqYnVmMCA9IGJ1ZjsKKwlpbnQJCXBjLCBwYWdlX2NvZGU7CisJaW50CQljaGFuZ2VhYmxlX3ZhbHVlcywgYWxsX3BhZ2VzOworCWludAkJdmFsaWRfcGFnZSA9IDA7CisJaW50CQlsZW4sIGxpbWl0OworCisJaWYgKChmc2ctPmNtbmRbMV0gJiB+MHgwOCkgIT0gMCkgewkJLy8gTWFzayBhd2F5IERCRAorCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19JTlZBTElEX0ZJRUxEX0lOX0NEQjsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXBjID0gZnNnLT5jbW5kWzJdID4+IDY7CisJcGFnZV9jb2RlID0gZnNnLT5jbW5kWzJdICYgMHgzZjsKKwlpZiAocGMgPT0gMykgeworCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19TQVZJTkdfUEFSQU1FVEVSU19OT1RfU1VQUE9SVEVEOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJY2hhbmdlYWJsZV92YWx1ZXMgPSAocGMgPT0gMSk7CisJYWxsX3BhZ2VzID0gKHBhZ2VfY29kZSA9PSAweDNmKTsKKworCS8qIFdyaXRlIHRoZSBtb2RlIHBhcmFtZXRlciBoZWFkZXIuICBGaXhlZCB2YWx1ZXMgYXJlOiBkZWZhdWx0CisJICogbWVkaXVtIHR5cGUsIG5vIGNhY2hlIGNvbnRyb2wgKERQT0ZVQSksIGFuZCBubyBibG9jayBkZXNjcmlwdG9ycy4KKwkgKiBUaGUgb25seSB2YXJpYWJsZSB2YWx1ZSBpcyB0aGUgV3JpdGVQcm90ZWN0IGJpdC4gIFdlIHdpbGwgZmlsbCBpbgorCSAqIHRoZSBtb2RlIGRhdGEgbGVuZ3RoIGxhdGVyLiAqLworCW1lbXNldChidWYsIDAsIDgpOworCWlmIChtc2NtbmQgPT0gU0NfTU9ERV9TRU5TRV82KSB7CisJCWJ1ZlsyXSA9IChjdXJsdW4tPnJvID8gMHg4MCA6IDB4MDApOwkJLy8gV1AsIERQT0ZVQQorCQlidWYgKz0gNDsKKwkJbGltaXQgPSAyNTU7CisJfSBlbHNlIHsJCQkvLyBTQ19NT0RFX1NFTlNFXzEwCisJCWJ1ZlszXSA9IChjdXJsdW4tPnJvID8gMHg4MCA6IDB4MDApOwkJLy8gV1AsIERQT0ZVQQorCQlidWYgKz0gODsKKwkJbGltaXQgPSA2NTUzNTsJCS8vIFNob3VsZCByZWFsbHkgYmUgbW9kX2RhdGEuYnVmbGVuCisJfQorCisJLyogTm8gYmxvY2sgZGVzY3JpcHRvcnMgKi8KKworCS8qIFRoZSBtb2RlIHBhZ2VzLCBpbiBudW1lcmljYWwgb3JkZXIuICBUaGUgb25seSBwYWdlIHdlIHN1cHBvcnQKKwkgKiBpcyB0aGUgQ2FjaGluZyBwYWdlLiAqLworCWlmIChwYWdlX2NvZGUgPT0gMHgwOCB8fCBhbGxfcGFnZXMpIHsKKwkJdmFsaWRfcGFnZSA9IDE7CisJCWJ1ZlswXSA9IDB4MDg7CQkvLyBQYWdlIGNvZGUKKwkJYnVmWzFdID0gMTA7CQkvLyBQYWdlIGxlbmd0aAorCQltZW1zZXQoYnVmKzIsIDAsIDEwKTsJLy8gTm9uZSBvZiB0aGUgZmllbGRzIGFyZSBjaGFuZ2VhYmxlCisKKwkJaWYgKCFjaGFuZ2VhYmxlX3ZhbHVlcykgeworCQkJYnVmWzJdID0gMHgwNDsJLy8gV3JpdGUgY2FjaGUgZW5hYmxlLAorCQkJCQkvLyBSZWFkIGNhY2hlIG5vdCBkaXNhYmxlZAorCQkJCQkvLyBObyBjYWNoZSByZXRlbnRpb24gcHJpb3JpdGllcworCQkJcHV0X2JlMTYoJmJ1Zls0XSwgMHhmZmZmKTsgIC8vIERvbid0IGRpc2FibGUgcHJlZmV0Y2gKKwkJCQkJLy8gTWluaW11bSBwcmVmZXRjaCA9IDAKKwkJCXB1dF9iZTE2KCZidWZbOF0sIDB4ZmZmZik7ICAvLyBNYXhpbXVtIHByZWZldGNoCisJCQlwdXRfYmUxNigmYnVmWzEwXSwgMHhmZmZmKTsgLy8gTWF4aW11bSBwcmVmZXRjaCBjZWlsaW5nCisJCX0KKwkJYnVmICs9IDEyOworCX0KKworCS8qIENoZWNrIHRoYXQgYSB2YWxpZCBwYWdlIHdhcyByZXF1ZXN0ZWQgYW5kIHRoZSBtb2RlIGRhdGEgbGVuZ3RoCisJICogaXNuJ3QgdG9vIGxvbmcuICovCisJbGVuID0gYnVmIC0gYnVmMDsKKwlpZiAoIXZhbGlkX3BhZ2UgfHwgbGVuID4gbGltaXQpIHsKKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9GSUVMRF9JTl9DREI7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qICBTdG9yZSB0aGUgbW9kZSBkYXRhIGxlbmd0aCAqLworCWlmIChtc2NtbmQgPT0gU0NfTU9ERV9TRU5TRV82KQorCQlidWYwWzBdID0gbGVuIC0gMTsKKwllbHNlCisJCXB1dF9iZTE2KGJ1ZjAsIGxlbiAtIDIpOworCXJldHVybiBsZW47Cit9CisKKworc3RhdGljIGludCBkb19zdGFydF9zdG9wKHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJc3RydWN0IGx1bgkqY3VybHVuID0gZnNnLT5jdXJsdW47CisJaW50CQlsb2VqLCBzdGFydDsKKworCWlmICghbW9kX2RhdGEucmVtb3ZhYmxlKSB7CisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0lOVkFMSURfQ09NTUFORDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLy8gaW50IGltbWVkID0gZnNnLT5jbW5kWzFdICYgMHgwMTsKKwlsb2VqID0gZnNnLT5jbW5kWzRdICYgMHgwMjsKKwlzdGFydCA9IGZzZy0+Y21uZFs0XSAmIDB4MDE7CisKKyNpZmRlZiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUCisJaWYgKChmc2ctPmNtbmRbMV0gJiB+MHgwMSkgIT0gMCB8fAkJLy8gTWFzayBhd2F5IEltbWVkCisJCQkoZnNnLT5jbW5kWzRdICYgfjB4MDMpICE9IDApIHsJLy8gTWFzayBMb0VqLCBTdGFydAorCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19JTlZBTElEX0ZJRUxEX0lOX0NEQjsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFzdGFydCkgeworCisJCS8qIEFyZSB3ZSBhbGxvd2VkIHRvIHVubG9hZCB0aGUgbWVkaWE/ICovCisJCWlmIChjdXJsdW4tPnByZXZlbnRfbWVkaXVtX3JlbW92YWwpIHsKKwkJCUxEQkcoY3VybHVuLCAidW5sb2FkIGF0dGVtcHQgcHJldmVudGVkXG4iKTsKKwkJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX01FRElVTV9SRU1PVkFMX1BSRVZFTlRFRDsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChsb2VqKSB7CQkvLyBTaW11bGF0ZSBhbiB1bmxvYWQvZWplY3QKKwkJCXVwX3JlYWQoJmZzZy0+ZmlsZXNlbSk7CisJCQlkb3duX3dyaXRlKCZmc2ctPmZpbGVzZW0pOworCQkJY2xvc2VfYmFja2luZ19maWxlKGN1cmx1bik7CisJCQl1cF93cml0ZSgmZnNnLT5maWxlc2VtKTsKKwkJCWRvd25fcmVhZCgmZnNnLT5maWxlc2VtKTsKKwkJfQorCX0gZWxzZSB7CisKKwkJLyogT3VyIGVtdWxhdGlvbiBkb2Vzbid0IHN1cHBvcnQgbW91bnRpbmc7IHRoZSBtZWRpdW0gaXMKKwkJICogYXZhaWxhYmxlIGZvciB1c2UgYXMgc29vbiBhcyBpdCBpcyBsb2FkZWQuICovCisJCWlmICghYmFja2luZ19maWxlX2lzX29wZW4oY3VybHVuKSkgeworCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfTUVESVVNX05PVF9QUkVTRU5UOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGRvX3ByZXZlbnRfYWxsb3coc3RydWN0IGZzZ19kZXYgKmZzZykKK3sKKwlzdHJ1Y3QgbHVuCSpjdXJsdW4gPSBmc2ctPmN1cmx1bjsKKwlpbnQJCXByZXZlbnQ7CisKKwlpZiAoIW1vZF9kYXRhLnJlbW92YWJsZSkgeworCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19JTlZBTElEX0NPTU1BTkQ7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXByZXZlbnQgPSBmc2ctPmNtbmRbNF0gJiAweDAxOworCWlmICgoZnNnLT5jbW5kWzRdICYgfjB4MDEpICE9IDApIHsJCS8vIE1hc2sgYXdheSBQcmV2ZW50CisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0lOVkFMSURfRklFTERfSU5fQ0RCOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY3VybHVuLT5wcmV2ZW50X21lZGl1bV9yZW1vdmFsICYmICFwcmV2ZW50KQorCQlmc3luY19zdWIoY3VybHVuKTsKKwljdXJsdW4tPnByZXZlbnRfbWVkaXVtX3JlbW92YWwgPSBwcmV2ZW50OworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgZG9fcmVhZF9mb3JtYXRfY2FwYWNpdGllcyhzdHJ1Y3QgZnNnX2RldiAqZnNnLAorCQkJc3RydWN0IGZzZ19idWZmaGQgKmJoKQoreworCXN0cnVjdCBsdW4JKmN1cmx1biA9IGZzZy0+Y3VybHVuOworCXU4CQkqYnVmID0gKHU4ICopIGJoLT5idWY7CisKKwlidWZbMF0gPSBidWZbMV0gPSBidWZbMl0gPSAwOworCWJ1ZlszXSA9IDg7CQkvLyBPbmx5IHRoZSBDdXJyZW50L01heGltdW0gQ2FwYWNpdHkgRGVzY3JpcHRvcgorCWJ1ZiArPSA0OworCisJcHV0X2JlMzIoJmJ1ZlswXSwgY3VybHVuLT5udW1fc2VjdG9ycyk7CQkvLyBOdW1iZXIgb2YgYmxvY2tzCisJcHV0X2JlMzIoJmJ1Zls0XSwgNTEyKTsJCQkJLy8gQmxvY2sgbGVuZ3RoCisJYnVmWzRdID0gMHgwMjsJCQkJCS8vIEN1cnJlbnQgY2FwYWNpdHkKKwlyZXR1cm4gMTI7Cit9CisKKworc3RhdGljIGludCBkb19tb2RlX3NlbGVjdChzdHJ1Y3QgZnNnX2RldiAqZnNnLCBzdHJ1Y3QgZnNnX2J1ZmZoZCAqYmgpCit7CisJc3RydWN0IGx1bgkqY3VybHVuID0gZnNnLT5jdXJsdW47CisKKwkvKiBXZSBkb24ndCBzdXBwb3J0IE1PREUgU0VMRUNUICovCisJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9DT01NQU5EOworCXJldHVybiAtRUlOVkFMOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgaGFsdF9idWxrX2luX2VuZHBvaW50KHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJaW50CXJjOworCisJcmMgPSBmc2dfc2V0X2hhbHQoZnNnLCBmc2ctPmJ1bGtfaW4pOworCWlmIChyYyA9PSAtRUFHQUlOKQorCQlWREJHKGZzZywgImRlbGF5ZWQgYnVsay1pbiBlbmRwb2ludCBoYWx0XG4iKTsKKwl3aGlsZSAocmMgIT0gMCkgeworCQlpZiAocmMgIT0gLUVBR0FJTikgeworCQkJV0FSTihmc2csICJ1c2JfZXBfc2V0X2hhbHQgLT4gJWRcbiIsIHJjKTsKKwkJCXJjID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogV2FpdCBmb3IgYSBzaG9ydCB0aW1lIGFuZCB0aGVuIHRyeSBhZ2FpbiAqLworCQlpZiAobXNsZWVwX2ludGVycnVwdGlibGUoMTAwKSAhPSAwKQorCQkJcmV0dXJuIC1FSU5UUjsKKwkJcmMgPSB1c2JfZXBfc2V0X2hhbHQoZnNnLT5idWxrX2luKTsKKwl9CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHBhZF93aXRoX3plcm9zKHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJc3RydWN0IGZzZ19idWZmaGQJKmJoID0gZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsOworCXUzMgkJCW5rZWVwID0gYmgtPmlucmVxLT5sZW5ndGg7CisJdTMyCQkJbnNlbmQ7CisJaW50CQkJcmM7CisKKwliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRU1QVFk7CQkvLyBGb3IgdGhlIGZpcnN0IGl0ZXJhdGlvbgorCWZzZy0+dXNiX2Ftb3VudF9sZWZ0ID0gbmtlZXAgKyBmc2ctPnJlc2lkdWU7CisJd2hpbGUgKGZzZy0+dXNiX2Ftb3VudF9sZWZ0ID4gMCkgeworCisJCS8qIFdhaXQgZm9yIHRoZSBuZXh0IGJ1ZmZlciB0byBiZSBmcmVlICovCisJCXdoaWxlIChiaC0+c3RhdGUgIT0gQlVGX1NUQVRFX0VNUFRZKSB7CisJCQlpZiAoKHJjID0gc2xlZXBfdGhyZWFkKGZzZykpICE9IDApCisJCQkJcmV0dXJuIHJjOworCQl9CisKKwkJbnNlbmQgPSBtaW4oZnNnLT51c2JfYW1vdW50X2xlZnQsICh1MzIpIG1vZF9kYXRhLmJ1Zmxlbik7CisJCW1lbXNldChiaC0+YnVmICsgbmtlZXAsIDAsIG5zZW5kIC0gbmtlZXApOworCQliaC0+aW5yZXEtPmxlbmd0aCA9IG5zZW5kOworCQliaC0+aW5yZXEtPnplcm8gPSAwOworCQlzdGFydF90cmFuc2Zlcihmc2csIGZzZy0+YnVsa19pbiwgYmgtPmlucmVxLAorCQkJCSZiaC0+aW5yZXFfYnVzeSwgJmJoLT5zdGF0ZSk7CisJCWJoID0gZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsID0gYmgtPm5leHQ7CisJCWZzZy0+dXNiX2Ftb3VudF9sZWZ0IC09IG5zZW5kOworCQlua2VlcCA9IDA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRocm93X2F3YXlfZGF0YShzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCXN0cnVjdCBmc2dfYnVmZmhkCSpiaDsKKwl1MzIJCQlhbW91bnQ7CisJaW50CQkJcmM7CisKKwl3aGlsZSAoKGJoID0gZnNnLT5uZXh0X2J1ZmZoZF90b19kcmFpbiktPnN0YXRlICE9IEJVRl9TVEFURV9FTVBUWSB8fAorCQkJZnNnLT51c2JfYW1vdW50X2xlZnQgPiAwKSB7CisKKwkJLyogVGhyb3cgYXdheSB0aGUgZGF0YSBpbiBhIGZpbGxlZCBidWZmZXIgKi8KKwkJaWYgKGJoLT5zdGF0ZSA9PSBCVUZfU1RBVEVfRlVMTCkgeworCQkJYmgtPnN0YXRlID0gQlVGX1NUQVRFX0VNUFRZOworCQkJZnNnLT5uZXh0X2J1ZmZoZF90b19kcmFpbiA9IGJoLT5uZXh0OworCisJCQkvKiBBIHNob3J0IHBhY2tldCBvciBhbiBlcnJvciBlbmRzIGV2ZXJ5dGhpbmcgKi8KKwkJCWlmIChiaC0+b3V0cmVxLT5hY3R1YWwgIT0gYmgtPm91dHJlcS0+bGVuZ3RoIHx8CisJCQkJCWJoLT5vdXRyZXEtPnN0YXR1cyAhPSAwKSB7CisJCQkJcmFpc2VfZXhjZXB0aW9uKGZzZywgRlNHX1NUQVRFX0FCT1JUX0JVTEtfT1VUKTsKKwkJCQlyZXR1cm4gLUVJTlRSOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQkvKiBUcnkgdG8gc3VibWl0IGFub3RoZXIgcmVxdWVzdCBpZiB3ZSBuZWVkIG9uZSAqLworCQliaCA9IGZzZy0+bmV4dF9idWZmaGRfdG9fZmlsbDsKKwkJaWYgKGJoLT5zdGF0ZSA9PSBCVUZfU1RBVEVfRU1QVFkgJiYgZnNnLT51c2JfYW1vdW50X2xlZnQgPiAwKSB7CisJCQlhbW91bnQgPSBtaW4oZnNnLT51c2JfYW1vdW50X2xlZnQsCisJCQkJCSh1MzIpIG1vZF9kYXRhLmJ1Zmxlbik7CisKKwkJCS8qIGFtb3VudCBpcyBhbHdheXMgZGl2aXNpYmxlIGJ5IDUxMiwgaGVuY2UgYnkKKwkJCSAqIHRoZSBidWxrLW91dCBtYXhwYWNrZXQgc2l6ZSAqLworCQkJYmgtPm91dHJlcS0+bGVuZ3RoID0gYmgtPmJ1bGtfb3V0X2ludGVuZGVkX2xlbmd0aCA9CisJCQkJCWFtb3VudDsKKwkJCXN0YXJ0X3RyYW5zZmVyKGZzZywgZnNnLT5idWxrX291dCwgYmgtPm91dHJlcSwKKwkJCQkJJmJoLT5vdXRyZXFfYnVzeSwgJmJoLT5zdGF0ZSk7CisJCQlmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKKwkJCWZzZy0+dXNiX2Ftb3VudF9sZWZ0IC09IGFtb3VudDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogT3RoZXJ3aXNlIHdhaXQgZm9yIHNvbWV0aGluZyB0byBoYXBwZW4gKi8KKwkJaWYgKChyYyA9IHNsZWVwX3RocmVhZChmc2cpKSAhPSAwKQorCQkJcmV0dXJuIHJjOworCX0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGZpbmlzaF9yZXBseShzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCXN0cnVjdCBmc2dfYnVmZmhkCSpiaCA9IGZzZy0+bmV4dF9idWZmaGRfdG9fZmlsbDsKKwlpbnQJCQlyYyA9IDA7CisKKwlzd2l0Y2ggKGZzZy0+ZGF0YV9kaXIpIHsKKwljYXNlIERBVEFfRElSX05PTkU6CisJCWJyZWFrOwkJCS8vIE5vdGhpbmcgdG8gc2VuZAorCisJLyogSWYgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSBob3N0IHdhbnRzIHRvIHJlYWQgb3Igd3JpdGUsCisJICogdGhpcyBtdXN0IGJlIENCIG9yIENCSSB3aXRoIGFuIHVua25vd24gY29tbWFuZC4gIFdlIG11c3RuJ3QKKwkgKiB0cnkgdG8gc2VuZCBvciByZWNlaXZlIGFueSBkYXRhLiAgU28gc3RhbGwgYm90aCBidWxrIHBpcGVzCisJICogaWYgd2UgY2FuIGFuZCB3YWl0IGZvciBhIHJlc2V0LiAqLworCWNhc2UgREFUQV9ESVJfVU5LTk9XTjoKKwkJaWYgKG1vZF9kYXRhLmNhbl9zdGFsbCkgeworCQkJZnNnX3NldF9oYWx0KGZzZywgZnNnLT5idWxrX291dCk7CisJCQlyYyA9IGhhbHRfYnVsa19pbl9lbmRwb2ludChmc2cpOworCQl9CisJCWJyZWFrOworCisJLyogQWxsIGJ1dCB0aGUgbGFzdCBidWZmZXIgb2YgZGF0YSBtdXN0IGhhdmUgYWxyZWFkeSBiZWVuIHNlbnQgKi8KKwljYXNlIERBVEFfRElSX1RPX0hPU1Q6CisJCWlmIChmc2ctPmRhdGFfc2l6ZSA9PSAwKQorCQkJOwkJLy8gTm90aGluZyB0byBzZW5kCisKKwkJLyogSWYgdGhlcmUncyBubyByZXNpZHVlLCBzaW1wbHkgc2VuZCB0aGUgbGFzdCBidWZmZXIgKi8KKwkJZWxzZSBpZiAoZnNnLT5yZXNpZHVlID09IDApIHsKKwkJCWJoLT5pbnJlcS0+emVybyA9IDA7CisJCQlzdGFydF90cmFuc2Zlcihmc2csIGZzZy0+YnVsa19pbiwgYmgtPmlucmVxLAorCQkJCQkmYmgtPmlucmVxX2J1c3ksICZiaC0+c3RhdGUpOworCQkJZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsID0gYmgtPm5leHQ7CisJCX0KKworCQkvKiBUaGVyZSBpcyBhIHJlc2lkdWUuICBGb3IgQ0IgYW5kIENCSSwgc2ltcGx5IG1hcmsgdGhlIGVuZAorCQkgKiBvZiB0aGUgZGF0YSB3aXRoIGEgc2hvcnQgcGFja2V0LiAgSG93ZXZlciwgaWYgd2UgYXJlCisJCSAqIGFsbG93ZWQgdG8gc3RhbGwsIHRoZXJlIHdhcyBubyBkYXRhIGF0IGFsbCAocmVzaWR1ZSA9PQorCQkgKiBkYXRhX3NpemUpLCBhbmQgdGhlIGNvbW1hbmQgZmFpbGVkIChpbnZhbGlkIExVTiBvcgorCQkgKiBzZW5zZSBkYXRhIGlzIHNldCksIHRoZW4gaGFsdCB0aGUgYnVsay1pbiBlbmRwb2ludAorCQkgKiBpbnN0ZWFkLiAqLworCQllbHNlIGlmICghdHJhbnNwb3J0X2lzX2JiYigpKSB7CisJCQlpZiAobW9kX2RhdGEuY2FuX3N0YWxsICYmCisJCQkJCWZzZy0+cmVzaWR1ZSA9PSBmc2ctPmRhdGFfc2l6ZSAmJgorCSghZnNnLT5jdXJsdW4gfHwgZnNnLT5jdXJsdW4tPnNlbnNlX2RhdGEgIT0gU1NfTk9fU0VOU0UpKSB7CisJCQkJYmgtPnN0YXRlID0gQlVGX1NUQVRFX0VNUFRZOworCQkJCXJjID0gaGFsdF9idWxrX2luX2VuZHBvaW50KGZzZyk7CisJCQl9IGVsc2UgeworCQkJCWJoLT5pbnJlcS0+emVybyA9IDE7CisJCQkJc3RhcnRfdHJhbnNmZXIoZnNnLCBmc2ctPmJ1bGtfaW4sIGJoLT5pbnJlcSwKKwkJCQkJCSZiaC0+aW5yZXFfYnVzeSwgJmJoLT5zdGF0ZSk7CisJCQkJZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsID0gYmgtPm5leHQ7CisJCQl9CisJCX0KKworCQkvKiBGb3IgQnVsay1vbmx5LCBpZiB3ZSdyZSBhbGxvd2VkIHRvIHN0YWxsIHRoZW4gc2VuZCB0aGUKKwkJICogc2hvcnQgcGFja2V0IGFuZCBoYWx0IHRoZSBidWxrLWluIGVuZHBvaW50LiAgSWYgd2UgY2FuJ3QKKwkJICogc3RhbGwsIHBhZCBvdXQgdGhlIHJlbWFpbmluZyBkYXRhIHdpdGggMCdzLiAqLworCQllbHNlIHsKKwkJCWlmIChtb2RfZGF0YS5jYW5fc3RhbGwpIHsKKwkJCQliaC0+aW5yZXEtPnplcm8gPSAxOworCQkJCXN0YXJ0X3RyYW5zZmVyKGZzZywgZnNnLT5idWxrX2luLCBiaC0+aW5yZXEsCisJCQkJCQkmYmgtPmlucmVxX2J1c3ksICZiaC0+c3RhdGUpOworCQkJCWZzZy0+bmV4dF9idWZmaGRfdG9fZmlsbCA9IGJoLT5uZXh0OworCQkJCXJjID0gaGFsdF9idWxrX2luX2VuZHBvaW50KGZzZyk7CisJCQl9IGVsc2UKKwkJCQlyYyA9IHBhZF93aXRoX3plcm9zKGZzZyk7CisJCX0KKwkJYnJlYWs7CisKKwkvKiBXZSBoYXZlIHByb2Nlc3NlZCBhbGwgd2Ugd2FudCBmcm9tIHRoZSBkYXRhIHRoZSBob3N0IGhhcyBzZW50LgorCSAqIFRoZXJlIG1heSBzdGlsbCBiZSBvdXRzdGFuZGluZyBidWxrLW91dCByZXF1ZXN0cy4gKi8KKwljYXNlIERBVEFfRElSX0ZST01fSE9TVDoKKwkJaWYgKGZzZy0+cmVzaWR1ZSA9PSAwKQorCQkJOwkJLy8gTm90aGluZyB0byByZWNlaXZlCisKKwkJLyogRGlkIHRoZSBob3N0IHN0b3Agc2VuZGluZyB1bmV4cGVjdGVkbHkgZWFybHk/ICovCisJCWVsc2UgaWYgKGZzZy0+c2hvcnRfcGFja2V0X3JlY2VpdmVkKSB7CisJCQlyYWlzZV9leGNlcHRpb24oZnNnLCBGU0dfU1RBVEVfQUJPUlRfQlVMS19PVVQpOworCQkJcmMgPSAtRUlOVFI7CisJCX0KKworCQkvKiBXZSBoYXZlbid0IHByb2Nlc3NlZCBhbGwgdGhlIGluY29taW5nIGRhdGEuICBFdmVuIHRob3VnaAorCQkgKiB3ZSBtYXkgYmUgYWxsb3dlZCB0byBzdGFsbCwgZG9pbmcgc28gd291bGQgY2F1c2UgYSByYWNlLgorCQkgKiBUaGUgY29udHJvbGxlciBtYXkgYWxyZWFkeSBoYXZlIEFDSydlZCBhbGwgdGhlIHJlbWFpbmluZworCQkgKiBidWxrLW91dCBwYWNrZXRzLCBpbiB3aGljaCBjYXNlIHRoZSBob3N0IHdvdWxkbid0IHNlZSBhCisJCSAqIFNUQUxMLiAgTm90IHJlYWxpemluZyB0aGUgZW5kcG9pbnQgd2FzIGhhbHRlZCwgaXQgd291bGRuJ3QKKwkJICogY2xlYXIgdGhlIGhhbHQgLS0gbGVhZGluZyB0byBwcm9ibGVtcyBsYXRlciBvbi4gKi8KKyNpZiAwCisJCWVsc2UgaWYgKG1vZF9kYXRhLmNhbl9zdGFsbCkgeworCQkJZnNnX3NldF9oYWx0KGZzZywgZnNnLT5idWxrX291dCk7CisJCQlyYWlzZV9leGNlcHRpb24oZnNnLCBGU0dfU1RBVEVfQUJPUlRfQlVMS19PVVQpOworCQkJcmMgPSAtRUlOVFI7CisJCX0KKyNlbmRpZgorCisJCS8qIFdlIGNhbid0IHN0YWxsLiAgUmVhZCBpbiB0aGUgZXhjZXNzIGRhdGEgYW5kIHRocm93IGl0CisJCSAqIGFsbCBhd2F5LiAqLworCQllbHNlCisJCQlyYyA9IHRocm93X2F3YXlfZGF0YShmc2cpOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJjOworfQorCisKK3N0YXRpYyBpbnQgc2VuZF9zdGF0dXMoc3RydWN0IGZzZ19kZXYgKmZzZykKK3sKKwlzdHJ1Y3QgbHVuCQkqY3VybHVuID0gZnNnLT5jdXJsdW47CisJc3RydWN0IGZzZ19idWZmaGQJKmJoOworCWludAkJCXJjOworCXU4CQkJc3RhdHVzID0gVVNCX1NUQVRVU19QQVNTOworCXUzMgkJCXNkLCBzZGluZm8gPSAwOworCisJLyogV2FpdCBmb3IgdGhlIG5leHQgYnVmZmVyIHRvIGJlY29tZSBhdmFpbGFibGUgKi8KKwliaCA9IGZzZy0+bmV4dF9idWZmaGRfdG9fZmlsbDsKKwl3aGlsZSAoYmgtPnN0YXRlICE9IEJVRl9TVEFURV9FTVBUWSkgeworCQlpZiAoKHJjID0gc2xlZXBfdGhyZWFkKGZzZykpICE9IDApCisJCQlyZXR1cm4gcmM7CisJfQorCisJaWYgKGN1cmx1bikgeworCQlzZCA9IGN1cmx1bi0+c2Vuc2VfZGF0YTsKKwkJc2RpbmZvID0gY3VybHVuLT5zZW5zZV9kYXRhX2luZm87CisJfSBlbHNlIGlmIChmc2ctPmJhZF9sdW5fb2theSkKKwkJc2QgPSBTU19OT19TRU5TRTsKKwllbHNlCisJCXNkID0gU1NfTE9HSUNBTF9VTklUX05PVF9TVVBQT1JURUQ7CisKKwlpZiAoZnNnLT5waGFzZV9lcnJvcikgeworCQlEQkcoZnNnLCAic2VuZGluZyBwaGFzZS1lcnJvciBzdGF0dXNcbiIpOworCQlzdGF0dXMgPSBVU0JfU1RBVFVTX1BIQVNFX0VSUk9SOworCQlzZCA9IFNTX0lOVkFMSURfQ09NTUFORDsKKwl9IGVsc2UgaWYgKHNkICE9IFNTX05PX1NFTlNFKSB7CisJCURCRyhmc2csICJzZW5kaW5nIGNvbW1hbmQtZmFpbHVyZSBzdGF0dXNcbiIpOworCQlzdGF0dXMgPSBVU0JfU1RBVFVTX0ZBSUw7CisJCVZEQkcoZnNnLCAiICBzZW5zZSBkYXRhOiBTSyB4JTAyeCwgQVNDIHglMDJ4LCBBU0NRIHglMDJ4OyIKKwkJCQkiICBpbmZvIHgleFxuIiwKKwkJCQlTSyhzZCksIEFTQyhzZCksIEFTQ1Eoc2QpLCBzZGluZm8pOworCX0KKworCWlmICh0cmFuc3BvcnRfaXNfYmJiKCkpIHsKKwkJc3RydWN0IGJ1bGtfY3Nfd3JhcAkqY3N3ID0gKHN0cnVjdCBidWxrX2NzX3dyYXAgKikgYmgtPmJ1ZjsKKworCQkvKiBTdG9yZSBhbmQgc2VuZCB0aGUgQnVsay1vbmx5IENTVyAqLworCQljc3ctPlNpZ25hdHVyZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoVVNCX0JVTEtfQ1NfU0lHKTsKKwkJY3N3LT5UYWcgPSBmc2ctPnRhZzsKKwkJY3N3LT5SZXNpZHVlID0gY3B1X3RvX2xlMzIoZnNnLT5yZXNpZHVlKTsKKwkJY3N3LT5TdGF0dXMgPSBzdGF0dXM7CisKKwkJYmgtPmlucmVxLT5sZW5ndGggPSBVU0JfQlVMS19DU19XUkFQX0xFTjsKKwkJYmgtPmlucmVxLT56ZXJvID0gMDsKKwkJc3RhcnRfdHJhbnNmZXIoZnNnLCBmc2ctPmJ1bGtfaW4sIGJoLT5pbnJlcSwKKwkJCQkmYmgtPmlucmVxX2J1c3ksICZiaC0+c3RhdGUpOworCisJfSBlbHNlIGlmIChtb2RfZGF0YS50cmFuc3BvcnRfdHlwZSA9PSBVU0JfUFJfQ0IpIHsKKworCQkvKiBDb250cm9sLUJ1bGsgdHJhbnNwb3J0IGhhcyBubyBzdGF0dXMgcGhhc2UhICovCisJCXJldHVybiAwOworCisJfSBlbHNlIHsJCQkvLyBVU0JfUFJfQ0JJCisJCXN0cnVjdCBpbnRlcnJ1cHRfZGF0YQkqYnVmID0gKHN0cnVjdCBpbnRlcnJ1cHRfZGF0YSAqKQorCQkJCQkJYmgtPmJ1ZjsKKworCQkvKiBTdG9yZSBhbmQgc2VuZCB0aGUgSW50ZXJydXB0IGRhdGEuICBVRkkgc2VuZHMgdGhlIEFTQworCQkgKiBhbmQgQVNDUSBieXRlcy4gIEV2ZXJ5dGhpbmcgZWxzZSBzZW5kcyBhIFR5cGUgKHdoaWNoCisJCSAqIGlzIGFsd2F5cyAwKSBhbmQgdGhlIHN0YXR1cyBWYWx1ZS4gKi8KKwkJaWYgKG1vZF9kYXRhLnByb3RvY29sX3R5cGUgPT0gVVNCX1NDX1VGSSkgeworCQkJYnVmLT5iVHlwZSA9IEFTQyhzZCk7CisJCQlidWYtPmJWYWx1ZSA9IEFTQ1Eoc2QpOworCQl9IGVsc2UgeworCQkJYnVmLT5iVHlwZSA9IDA7CisJCQlidWYtPmJWYWx1ZSA9IHN0YXR1czsKKwkJfQorCQlmc2ctPmludHJlcS0+bGVuZ3RoID0gQ0JJX0lOVEVSUlVQVF9EQVRBX0xFTjsKKworCQlmc2ctPmludHJfYnVmZmhkID0gYmg7CQkvLyBQb2ludCB0byB0aGUgcmlnaHQgYnVmZmhkCisJCWZzZy0+aW50cmVxLT5idWYgPSBiaC0+aW5yZXEtPmJ1ZjsKKwkJZnNnLT5pbnRyZXEtPmRtYSA9IGJoLT5pbnJlcS0+ZG1hOworCQlmc2ctPmludHJlcS0+Y29udGV4dCA9IGJoOworCQlzdGFydF90cmFuc2Zlcihmc2csIGZzZy0+aW50cl9pbiwgZnNnLT5pbnRyZXEsCisJCQkJJmZzZy0+aW50cmVxX2J1c3ksICZiaC0+c3RhdGUpOworCX0KKworCWZzZy0+bmV4dF9idWZmaGRfdG9fZmlsbCA9IGJoLT5uZXh0OworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIENoZWNrIHdoZXRoZXIgdGhlIGNvbW1hbmQgaXMgcHJvcGVybHkgZm9ybWVkIGFuZCB3aGV0aGVyIGl0cyBkYXRhIHNpemUKKyAqIGFuZCBkaXJlY3Rpb24gYWdyZWUgd2l0aCB0aGUgdmFsdWVzIHdlIGFscmVhZHkgaGF2ZS4gKi8KK3N0YXRpYyBpbnQgY2hlY2tfY29tbWFuZChzdHJ1Y3QgZnNnX2RldiAqZnNnLCBpbnQgY21uZF9zaXplLAorCQllbnVtIGRhdGFfZGlyZWN0aW9uIGRhdGFfZGlyLCB1bnNpZ25lZCBpbnQgbWFzaywKKwkJaW50IG5lZWRzX21lZGl1bSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQJCQlpOworCWludAkJCWx1biA9IGZzZy0+Y21uZFsxXSA+PiA1OworCXN0YXRpYyBjb25zdCBjaGFyCWRpcmxldHRlcls0XSA9IHsndScsICdvJywgJ2knLCAnbid9OworCWNoYXIJCQloZGxlblsyMF07CisJc3RydWN0IGx1bgkJKmN1cmx1bjsKKworCS8qIEFkanVzdCB0aGUgZXhwZWN0ZWQgY21uZF9zaXplIGZvciBwcm90b2NvbCBlbmNhcHN1bGF0aW9uIHBhZGRpbmcuCisJICogVHJhbnNwYXJlbnQgU0NTSSBkb2Vzbid0IHBhZC4gKi8KKwlpZiAocHJvdG9jb2xfaXNfc2NzaSgpKQorCQk7CisKKwkvKiBUaGVyZSdzIHNvbWUgZGlzYWdyZWVtZW50IGFzIHRvIHdoZXRoZXIgUkJDIHBhZHMgY29tbWFuZHMgb3Igbm90LgorCSAqIFdlJ2xsIHBsYXkgaXQgc2FmZSBhbmQgYWNjZXB0IGVpdGhlciBmb3JtLiAqLworCWVsc2UgaWYgKG1vZF9kYXRhLnByb3RvY29sX3R5cGUgPT0gVVNCX1NDX1JCQykgeworCQlpZiAoZnNnLT5jbW5kX3NpemUgPT0gMTIpCisJCQljbW5kX3NpemUgPSAxMjsKKworCS8qIEFsbCB0aGUgb3RoZXIgcHJvdG9jb2xzIHBhZCB0byAxMiBieXRlcyAqLworCX0gZWxzZQorCQljbW5kX3NpemUgPSAxMjsKKworCWhkbGVuWzBdID0gMDsKKwlpZiAoZnNnLT5kYXRhX2RpciAhPSBEQVRBX0RJUl9VTktOT1dOKQorCQlzcHJpbnRmKGhkbGVuLCAiLCBIJWM9JXUiLCBkaXJsZXR0ZXJbKGludCkgZnNnLT5kYXRhX2Rpcl0sCisJCQkJZnNnLT5kYXRhX3NpemUpOworCVZEQkcoZnNnLCAiU0NTSSBjb21tYW5kOiAlczsgIERjPSVkLCBEJWM9JXU7ICBIYz0lZCVzXG4iLAorCQkJbmFtZSwgY21uZF9zaXplLCBkaXJsZXR0ZXJbKGludCkgZGF0YV9kaXJdLAorCQkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kLCBmc2ctPmNtbmRfc2l6ZSwgaGRsZW4pOworCisJLyogV2UgY2FuJ3QgcmVwbHkgYXQgYWxsIHVudGlsIHdlIGtub3cgdGhlIGNvcnJlY3QgZGF0YSBkaXJlY3Rpb24KKwkgKiBhbmQgc2l6ZS4gKi8KKwlpZiAoZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID09IDApCisJCWRhdGFfZGlyID0gREFUQV9ESVJfTk9ORTsKKwlpZiAoZnNnLT5kYXRhX2RpciA9PSBEQVRBX0RJUl9VTktOT1dOKSB7CS8vIENCIG9yIENCSQorCQlmc2ctPmRhdGFfZGlyID0gZGF0YV9kaXI7CisJCWZzZy0+ZGF0YV9zaXplID0gZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kOworCisJfSBlbHNlIHsJCQkJCS8vIEJ1bGstb25seQorCQlpZiAoZnNnLT5kYXRhX3NpemUgPCBmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQpIHsKKworCQkJLyogSG9zdCBkYXRhIHNpemUgPCBEZXZpY2UgZGF0YSBzaXplIGlzIGEgcGhhc2UgZXJyb3IuCisJCQkgKiBDYXJyeSBvdXQgdGhlIGNvbW1hbmQsIGJ1dCBvbmx5IHRyYW5zZmVyIGFzIG11Y2gKKwkJCSAqIGFzIHdlIGFyZSBhbGxvd2VkLiAqLworCQkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gZnNnLT5kYXRhX3NpemU7CisJCQlmc2ctPnBoYXNlX2Vycm9yID0gMTsKKwkJfQorCX0KKwlmc2ctPnJlc2lkdWUgPSBmc2ctPnVzYl9hbW91bnRfbGVmdCA9IGZzZy0+ZGF0YV9zaXplOworCisJLyogQ29uZmxpY3RpbmcgZGF0YSBkaXJlY3Rpb25zIGlzIGEgcGhhc2UgZXJyb3IgKi8KKwlpZiAoZnNnLT5kYXRhX2RpciAhPSBkYXRhX2RpciAmJiBmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPiAwKSB7CisJCWZzZy0+cGhhc2VfZXJyb3IgPSAxOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBWZXJpZnkgdGhlIGxlbmd0aCBvZiB0aGUgY29tbWFuZCBpdHNlbGYgKi8KKwlpZiAoY21uZF9zaXplICE9IGZzZy0+Y21uZF9zaXplKSB7CisKKwkJLyogU3BlY2lhbCBjYXNlIHdvcmthcm91bmQ6IE1TLVdpbmRvd3MgaXNzdWVzIFJFUVVFU1QgU0VOU0UKKwkJICogd2l0aCBjYnctPkxlbmd0aCA9PSAxMiAoaXQgc2hvdWxkIGJlIDYpLiAqLworCQlpZiAoZnNnLT5jbW5kWzBdID09IFNDX1JFUVVFU1RfU0VOU0UgJiYgZnNnLT5jbW5kX3NpemUgPT0gMTIpCisJCQljbW5kX3NpemUgPSBmc2ctPmNtbmRfc2l6ZTsKKwkJZWxzZSB7CisJCQlmc2ctPnBoYXNlX2Vycm9yID0gMTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJLyogQ2hlY2sgdGhhdCB0aGUgTFVOIHZhbHVlcyBhcmUgb29uc2lzdGVudCAqLworCWlmICh0cmFuc3BvcnRfaXNfYmJiKCkpIHsKKwkJaWYgKGZzZy0+bHVuICE9IGx1bikKKwkJCURCRyhmc2csICJ1c2luZyBMVU4gJWQgZnJvbSBDQlcsICIKKwkJCQkJIm5vdCBMVU4gJWQgZnJvbSBDREJcbiIsCisJCQkJCWZzZy0+bHVuLCBsdW4pOworCX0gZWxzZQorCQlmc2ctPmx1biA9IGx1bjsJCS8vIFVzZSBMVU4gZnJvbSB0aGUgY29tbWFuZAorCisJLyogQ2hlY2sgdGhlIExVTiAqLworCWlmIChmc2ctPmx1biA+PSAwICYmIGZzZy0+bHVuIDwgZnNnLT5ubHVucykgeworCQlmc2ctPmN1cmx1biA9IGN1cmx1biA9ICZmc2ctPmx1bnNbZnNnLT5sdW5dOworCQlpZiAoZnNnLT5jbW5kWzBdICE9IFNDX1JFUVVFU1RfU0VOU0UpIHsKKwkJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX05PX1NFTlNFOworCQkJY3VybHVuLT5zZW5zZV9kYXRhX2luZm8gPSAwOworCQl9CisJfSBlbHNlIHsKKwkJZnNnLT5jdXJsdW4gPSBjdXJsdW4gPSBOVUxMOworCQlmc2ctPmJhZF9sdW5fb2theSA9IDA7CisKKwkJLyogSU5RVUlSWSBhbmQgUkVRVUVTVCBTRU5TRSBjb21tYW5kcyBhcmUgZXhwbGljaXRseSBhbGxvd2VkCisJCSAqIHRvIHVzZSB1bnN1cHBvcnRlZCBMVU5zOyBhbGwgb3RoZXJzIG1heSBub3QuICovCisJCWlmIChmc2ctPmNtbmRbMF0gIT0gU0NfSU5RVUlSWSAmJgorCQkJCWZzZy0+Y21uZFswXSAhPSBTQ19SRVFVRVNUX1NFTlNFKSB7CisJCQlEQkcoZnNnLCAidW5zdXBwb3J0ZWQgTFVOICVkXG4iLCBmc2ctPmx1bik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCS8qIElmIGEgdW5pdCBhdHRlbnRpb24gY29uZGl0aW9uIGV4aXN0cywgb25seSBJTlFVSVJZIGFuZAorCSAqIFJFUVVFU1QgU0VOU0UgY29tbWFuZHMgYXJlIGFsbG93ZWQ7IGFueXRoaW5nIGVsc2UgbXVzdCBmYWlsLiAqLworCWlmIChjdXJsdW4gJiYgY3VybHVuLT51bml0X2F0dGVudGlvbl9kYXRhICE9IFNTX05PX1NFTlNFICYmCisJCQlmc2ctPmNtbmRbMF0gIT0gU0NfSU5RVUlSWSAmJgorCQkJZnNnLT5jbW5kWzBdICE9IFNDX1JFUVVFU1RfU0VOU0UpIHsKKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gY3VybHVuLT51bml0X2F0dGVudGlvbl9kYXRhOworCQljdXJsdW4tPnVuaXRfYXR0ZW50aW9uX2RhdGEgPSBTU19OT19TRU5TRTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ2hlY2sgdGhhdCBvbmx5IGNvbW1hbmQgYnl0ZXMgbGlzdGVkIGluIHRoZSBtYXNrIGFyZSBub24temVybyAqLworCWZzZy0+Y21uZFsxXSAmPSAweDFmOwkJCS8vIE1hc2sgYXdheSB0aGUgTFVOCisJZm9yIChpID0gMTsgaSA8IGNtbmRfc2l6ZTsgKytpKSB7CisJCWlmIChmc2ctPmNtbmRbaV0gJiYgIShtYXNrICYgKDEgPDwgaSkpKSB7CisJCQlpZiAoY3VybHVuKQorCQkJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0lOVkFMSURfRklFTERfSU5fQ0RCOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwkvKiBJZiB0aGUgbWVkaXVtIGlzbid0IG1vdW50ZWQgYW5kIHRoZSBjb21tYW5kIG5lZWRzIHRvIGFjY2VzcworCSAqIGl0LCByZXR1cm4gYW4gZXJyb3IuICovCisJaWYgKGN1cmx1biAmJiAhYmFja2luZ19maWxlX2lzX29wZW4oY3VybHVuKSAmJiBuZWVkc19tZWRpdW0pIHsKKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfTUVESVVNX05PVF9QUkVTRU5UOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGRvX3Njc2lfY29tbWFuZChzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCXN0cnVjdCBmc2dfYnVmZmhkCSpiaDsKKwlpbnQJCQlyYzsKKwlpbnQJCQlyZXBseSA9IC1FSU5WQUw7CisJaW50CQkJaTsKKwlzdGF0aWMgY2hhcgkJdW5rbm93blsxNl07CisKKwlkdW1wX2NkYihmc2cpOworCisJLyogV2FpdCBmb3IgdGhlIG5leHQgYnVmZmVyIHRvIGJlY29tZSBhdmFpbGFibGUgZm9yIGRhdGEgb3Igc3RhdHVzICovCisJYmggPSBmc2ctPm5leHRfYnVmZmhkX3RvX2RyYWluID0gZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsOworCXdoaWxlIChiaC0+c3RhdGUgIT0gQlVGX1NUQVRFX0VNUFRZKSB7CisJCWlmICgocmMgPSBzbGVlcF90aHJlYWQoZnNnKSkgIT0gMCkKKwkJCXJldHVybiByYzsKKwkJfQorCWZzZy0+cGhhc2VfZXJyb3IgPSAwOworCWZzZy0+c2hvcnRfcGFja2V0X3JlY2VpdmVkID0gMDsKKworCWRvd25fcmVhZCgmZnNnLT5maWxlc2VtKTsJLy8gV2UncmUgdXNpbmcgdGhlIGJhY2tpbmcgZmlsZQorCXN3aXRjaCAoZnNnLT5jbW5kWzBdKSB7CisKKwljYXNlIFNDX0lOUVVJUlk6CisJCWZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IGZzZy0+Y21uZFs0XTsKKwkJaWYgKChyZXBseSA9IGNoZWNrX2NvbW1hbmQoZnNnLCA2LCBEQVRBX0RJUl9UT19IT1NULAorCQkJCSgxPDw0KSwgMCwKKwkJCQkiSU5RVUlSWSIpKSA9PSAwKQorCQkJcmVwbHkgPSBkb19pbnF1aXJ5KGZzZywgYmgpOworCQlicmVhazsKKworCWNhc2UgU0NfTU9ERV9TRUxFQ1RfNjoKKwkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gZnNnLT5jbW5kWzRdOworCQlpZiAoKHJlcGx5ID0gY2hlY2tfY29tbWFuZChmc2csIDYsIERBVEFfRElSX0ZST01fSE9TVCwKKwkJCQkoMTw8MSkgfCAoMTw8NCksIDAsCisJCQkJIk1PREUgU0VMRUNUKDYpIikpID09IDApCisJCQlyZXBseSA9IGRvX21vZGVfc2VsZWN0KGZzZywgYmgpOworCQlicmVhazsKKworCWNhc2UgU0NfTU9ERV9TRUxFQ1RfMTA6CisJCWZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IGdldF9iZTE2KCZmc2ctPmNtbmRbN10pOworCQlpZiAoKHJlcGx5ID0gY2hlY2tfY29tbWFuZChmc2csIDEwLCBEQVRBX0RJUl9GUk9NX0hPU1QsCisJCQkJKDE8PDEpIHwgKDM8PDcpLCAwLAorCQkJCSJNT0RFIFNFTEVDVCgxMCkiKSkgPT0gMCkKKwkJCXJlcGx5ID0gZG9fbW9kZV9zZWxlY3QoZnNnLCBiaCk7CisJCWJyZWFrOworCisJY2FzZSBTQ19NT0RFX1NFTlNFXzY6CisJCWZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IGZzZy0+Y21uZFs0XTsKKwkJaWYgKChyZXBseSA9IGNoZWNrX2NvbW1hbmQoZnNnLCA2LCBEQVRBX0RJUl9UT19IT1NULAorCQkJCSgxPDwxKSB8ICgxPDwyKSB8ICgxPDw0KSwgMCwKKwkJCQkiTU9ERSBTRU5TRSg2KSIpKSA9PSAwKQorCQkJcmVwbHkgPSBkb19tb2RlX3NlbnNlKGZzZywgYmgpOworCQlicmVhazsKKworCWNhc2UgU0NfTU9ERV9TRU5TRV8xMDoKKwkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gZ2V0X2JlMTYoJmZzZy0+Y21uZFs3XSk7CisJCWlmICgocmVwbHkgPSBjaGVja19jb21tYW5kKGZzZywgMTAsIERBVEFfRElSX1RPX0hPU1QsCisJCQkJKDE8PDEpIHwgKDE8PDIpIHwgKDM8PDcpLCAwLAorCQkJCSJNT0RFIFNFTlNFKDEwKSIpKSA9PSAwKQorCQkJcmVwbHkgPSBkb19tb2RlX3NlbnNlKGZzZywgYmgpOworCQlicmVhazsKKworCWNhc2UgU0NfUFJFVkVOVF9BTExPV19NRURJVU1fUkVNT1ZBTDoKKwkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gMDsKKwkJaWYgKChyZXBseSA9IGNoZWNrX2NvbW1hbmQoZnNnLCA2LCBEQVRBX0RJUl9OT05FLAorCQkJCSgxPDw0KSwgMCwKKwkJCQkiUFJFVkVOVC1BTExPVyBNRURJVU0gUkVNT1ZBTCIpKSA9PSAwKQorCQkJcmVwbHkgPSBkb19wcmV2ZW50X2FsbG93KGZzZyk7CisJCWJyZWFrOworCisJY2FzZSBTQ19SRUFEXzY6CisJCWkgPSBmc2ctPmNtbmRbNF07CisJCWZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IChpID09IDAgPyAyNTYgOiBpKSA8PCA5OworCQlpZiAoKHJlcGx5ID0gY2hlY2tfY29tbWFuZChmc2csIDYsIERBVEFfRElSX1RPX0hPU1QsCisJCQkJKDc8PDEpIHwgKDE8PDQpLCAxLAorCQkJCSJSRUFEKDYpIikpID09IDApCisJCQlyZXBseSA9IGRvX3JlYWQoZnNnKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDX1JFQURfMTA6CisJCWZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IGdldF9iZTE2KCZmc2ctPmNtbmRbN10pIDw8IDk7CisJCWlmICgocmVwbHkgPSBjaGVja19jb21tYW5kKGZzZywgMTAsIERBVEFfRElSX1RPX0hPU1QsCisJCQkJKDE8PDEpIHwgKDB4Zjw8MikgfCAoMzw8NyksIDEsCisJCQkJIlJFQUQoMTApIikpID09IDApCisJCQlyZXBseSA9IGRvX3JlYWQoZnNnKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDX1JFQURfMTI6CisJCWZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IGdldF9iZTMyKCZmc2ctPmNtbmRbNl0pIDw8IDk7CisJCWlmICgocmVwbHkgPSBjaGVja19jb21tYW5kKGZzZywgMTIsIERBVEFfRElSX1RPX0hPU1QsCisJCQkJKDE8PDEpIHwgKDB4Zjw8MikgfCAoMHhmPDw2KSwgMSwKKwkJCQkiUkVBRCgxMikiKSkgPT0gMCkKKwkJCXJlcGx5ID0gZG9fcmVhZChmc2cpOworCQlicmVhazsKKworCWNhc2UgU0NfUkVBRF9DQVBBQ0lUWToKKwkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gODsKKwkJaWYgKChyZXBseSA9IGNoZWNrX2NvbW1hbmQoZnNnLCAxMCwgREFUQV9ESVJfVE9fSE9TVCwKKwkJCQkoMHhmPDwyKSB8ICgxPDw4KSwgMSwKKwkJCQkiUkVBRCBDQVBBQ0lUWSIpKSA9PSAwKQorCQkJcmVwbHkgPSBkb19yZWFkX2NhcGFjaXR5KGZzZywgYmgpOworCQlicmVhazsKKworCWNhc2UgU0NfUkVBRF9GT1JNQVRfQ0FQQUNJVElFUzoKKwkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gZ2V0X2JlMTYoJmZzZy0+Y21uZFs3XSk7CisJCWlmICgocmVwbHkgPSBjaGVja19jb21tYW5kKGZzZywgMTAsIERBVEFfRElSX1RPX0hPU1QsCisJCQkJKDM8PDcpLCAxLAorCQkJCSJSRUFEIEZPUk1BVCBDQVBBQ0lUSUVTIikpID09IDApCisJCQlyZXBseSA9IGRvX3JlYWRfZm9ybWF0X2NhcGFjaXRpZXMoZnNnLCBiaCk7CisJCWJyZWFrOworCisJY2FzZSBTQ19SRVFVRVNUX1NFTlNFOgorCQlmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSBmc2ctPmNtbmRbNF07CisJCWlmICgocmVwbHkgPSBjaGVja19jb21tYW5kKGZzZywgNiwgREFUQV9ESVJfVE9fSE9TVCwKKwkJCQkoMTw8NCksIDAsCisJCQkJIlJFUVVFU1QgU0VOU0UiKSkgPT0gMCkKKwkJCXJlcGx5ID0gZG9fcmVxdWVzdF9zZW5zZShmc2csIGJoKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDX1NUQVJUX1NUT1BfVU5JVDoKKwkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gMDsKKwkJaWYgKChyZXBseSA9IGNoZWNrX2NvbW1hbmQoZnNnLCA2LCBEQVRBX0RJUl9OT05FLAorCQkJCSgxPDwxKSB8ICgxPDw0KSwgMCwKKwkJCQkiU1RBUlQtU1RPUCBVTklUIikpID09IDApCisJCQlyZXBseSA9IGRvX3N0YXJ0X3N0b3AoZnNnKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDX1NZTkNIUk9OSVpFX0NBQ0hFOgorCQlmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSAwOworCQlpZiAoKHJlcGx5ID0gY2hlY2tfY29tbWFuZChmc2csIDEwLCBEQVRBX0RJUl9OT05FLAorCQkJCSgweGY8PDIpIHwgKDM8PDcpLCAxLAorCQkJCSJTWU5DSFJPTklaRSBDQUNIRSIpKSA9PSAwKQorCQkJcmVwbHkgPSBkb19zeW5jaHJvbml6ZV9jYWNoZShmc2cpOworCQlicmVhazsKKworCWNhc2UgU0NfVEVTVF9VTklUX1JFQURZOgorCQlmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSAwOworCQlyZXBseSA9IGNoZWNrX2NvbW1hbmQoZnNnLCA2LCBEQVRBX0RJUl9OT05FLAorCQkJCTAsIDEsCisJCQkJIlRFU1QgVU5JVCBSRUFEWSIpOworCQlicmVhazsKKworCS8qIEFsdGhvdWdoIG9wdGlvbmFsLCB0aGlzIGNvbW1hbmQgaXMgdXNlZCBieSBNUy1XaW5kb3dzLiAgV2UKKwkgKiBzdXBwb3J0IGEgbWluaW1hbCB2ZXJzaW9uOiBCeXRDaGsgbXVzdCBiZSAwLiAqLworCWNhc2UgU0NfVkVSSUZZOgorCQlmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSAwOworCQlpZiAoKHJlcGx5ID0gY2hlY2tfY29tbWFuZChmc2csIDEwLCBEQVRBX0RJUl9OT05FLAorCQkJCSgxPDwxKSB8ICgweGY8PDIpIHwgKDM8PDcpLCAxLAorCQkJCSJWRVJJRlkiKSkgPT0gMCkKKwkJCXJlcGx5ID0gZG9fdmVyaWZ5KGZzZyk7CisJCWJyZWFrOworCisJY2FzZSBTQ19XUklURV82OgorCQlpID0gZnNnLT5jbW5kWzRdOworCQlmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSAoaSA9PSAwID8gMjU2IDogaSkgPDwgOTsKKwkJaWYgKChyZXBseSA9IGNoZWNrX2NvbW1hbmQoZnNnLCA2LCBEQVRBX0RJUl9GUk9NX0hPU1QsCisJCQkJKDc8PDEpIHwgKDE8PDQpLCAxLAorCQkJCSJXUklURSg2KSIpKSA9PSAwKQorCQkJcmVwbHkgPSBkb193cml0ZShmc2cpOworCQlicmVhazsKKworCWNhc2UgU0NfV1JJVEVfMTA6CisJCWZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IGdldF9iZTE2KCZmc2ctPmNtbmRbN10pIDw8IDk7CisJCWlmICgocmVwbHkgPSBjaGVja19jb21tYW5kKGZzZywgMTAsIERBVEFfRElSX0ZST01fSE9TVCwKKwkJCQkoMTw8MSkgfCAoMHhmPDwyKSB8ICgzPDw3KSwgMSwKKwkJCQkiV1JJVEUoMTApIikpID09IDApCisJCQlyZXBseSA9IGRvX3dyaXRlKGZzZyk7CisJCWJyZWFrOworCisJY2FzZSBTQ19XUklURV8xMjoKKwkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gZ2V0X2JlMzIoJmZzZy0+Y21uZFs2XSkgPDwgOTsKKwkJaWYgKChyZXBseSA9IGNoZWNrX2NvbW1hbmQoZnNnLCAxMiwgREFUQV9ESVJfRlJPTV9IT1NULAorCQkJCSgxPDwxKSB8ICgweGY8PDIpIHwgKDB4Zjw8NiksIDEsCisJCQkJIldSSVRFKDEyKSIpKSA9PSAwKQorCQkJcmVwbHkgPSBkb193cml0ZShmc2cpOworCQlicmVhazsKKworCS8qIFNvbWUgbWFuZGF0b3J5IGNvbW1hbmRzIHRoYXQgd2UgcmVjb2duaXplIGJ1dCBkb24ndCBpbXBsZW1lbnQuCisJICogVGhleSBkb24ndCBtZWFuIG11Y2ggaW4gdGhpcyBzZXR0aW5nLiAgSXQncyBsZWZ0IGFzIGFuIGV4ZXJjaXNlCisJICogZm9yIGFueW9uZSBpbnRlcmVzdGVkIHRvIGltcGxlbWVudCBSRVNFUlZFIGFuZCBSRUxFQVNFIGluIHRlcm1zCisJICogb2YgUG9zaXggbG9ja3MuICovCisJY2FzZSBTQ19GT1JNQVRfVU5JVDoKKwljYXNlIFNDX1JFTEVBU0U6CisJY2FzZSBTQ19SRVNFUlZFOgorCWNhc2UgU0NfU0VORF9ESUFHTk9TVElDOgorCQkvLyBGYWxsIHRocm91Z2gKKworCWRlZmF1bHQ6CisJCWZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IDA7CisJCXNwcmludGYodW5rbm93biwgIlVua25vd24geCUwMngiLCBmc2ctPmNtbmRbMF0pOworCQlpZiAoKHJlcGx5ID0gY2hlY2tfY29tbWFuZChmc2csIGZzZy0+Y21uZF9zaXplLAorCQkJCURBVEFfRElSX1VOS05PV04sIDB4ZmYsIDAsIHVua25vd24pKSA9PSAwKSB7CisJCQlmc2ctPmN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0lOVkFMSURfQ09NTUFORDsKKwkJCXJlcGx5ID0gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwl9CisJdXBfcmVhZCgmZnNnLT5maWxlc2VtKTsKKworCWlmIChyZXBseSA9PSAtRUlOVFIgfHwgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCXJldHVybiAtRUlOVFI7CisKKwkvKiBTZXQgdXAgdGhlIHNpbmdsZSByZXBseSBidWZmZXIgZm9yIGZpbmlzaF9yZXBseSgpICovCisJaWYgKHJlcGx5ID09IC1FSU5WQUwpCisJCXJlcGx5ID0gMDsJCS8vIEVycm9yIHJlcGx5IGxlbmd0aAorCWlmIChyZXBseSA+PSAwICYmIGZzZy0+ZGF0YV9kaXIgPT0gREFUQV9ESVJfVE9fSE9TVCkgeworCQlyZXBseSA9IG1pbigodTMyKSByZXBseSwgZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kKTsKKwkJYmgtPmlucmVxLT5sZW5ndGggPSByZXBseTsKKwkJYmgtPnN0YXRlID0gQlVGX1NUQVRFX0ZVTEw7CisJCWZzZy0+cmVzaWR1ZSAtPSByZXBseTsKKwl9CQkJCS8vIE90aGVyd2lzZSBpdCdzIGFscmVhZHkgc2V0CisKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHJlY2VpdmVkX2NidyhzdHJ1Y3QgZnNnX2RldiAqZnNnLCBzdHJ1Y3QgZnNnX2J1ZmZoZCAqYmgpCit7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXEgPSBiaC0+b3V0cmVxOworCXN0cnVjdCBidWxrX2NiX3dyYXAJKmNidyA9IChzdHJ1Y3QgYnVsa19jYl93cmFwICopIHJlcS0+YnVmOworCisJLyogV2FzIHRoaXMgYSByZWFsIHBhY2tldD8gKi8KKwlpZiAocmVxLT5zdGF0dXMpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogSXMgdGhlIENCVyB2YWxpZD8gKi8KKwlpZiAocmVxLT5hY3R1YWwgIT0gVVNCX0JVTEtfQ0JfV1JBUF9MRU4gfHwKKwkJCWNidy0+U2lnbmF0dXJlICE9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoCisJCQkJVVNCX0JVTEtfQ0JfU0lHKSkgeworCQlEQkcoZnNnLCAiaW52YWxpZCBDQlc6IGxlbiAldSBzaWcgMHgleFxuIiwKKwkJCQlyZXEtPmFjdHVhbCwKKwkJCQlsZTMyX3RvX2NwdShjYnctPlNpZ25hdHVyZSkpOworCisJCS8qIFRoZSBCdWxrLW9ubHkgc3BlYyBzYXlzIHdlIE1VU1Qgc3RhbGwgdGhlIGJ1bGsgcGlwZXMhCisJCSAqIElmIHdlIHdhbnQgdG8gYXZvaWQgc3RhbGxzLCBzZXQgYSBmbGFnIHNvIHRoYXQgd2Ugd2lsbAorCQkgKiBjbGVhciB0aGUgZW5kcG9pbnQgaGFsdHMgYXQgdGhlIG5leHQgcmVzZXQuICovCisJCWlmICghbW9kX2RhdGEuY2FuX3N0YWxsKQorCQkJc2V0X2JpdChDTEVBUl9CVUxLX0hBTFRTLCAmZnNnLT5hdG9taWNfYml0ZmxhZ3MpOworCQlmc2dfc2V0X2hhbHQoZnNnLCBmc2ctPmJ1bGtfb3V0KTsKKwkJaGFsdF9idWxrX2luX2VuZHBvaW50KGZzZyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIElzIHRoZSBDQlcgbWVhbmluZ2Z1bD8gKi8KKwlpZiAoY2J3LT5MdW4gPj0gTUFYX0xVTlMgfHwgY2J3LT5GbGFncyAmIH5VU0JfQlVMS19JTl9GTEFHIHx8CisJCQljYnctPkxlbmd0aCA8IDYgfHwgY2J3LT5MZW5ndGggPiBNQVhfQ09NTUFORF9TSVpFKSB7CisJCURCRyhmc2csICJub24tbWVhbmluZ2Z1bCBDQlc6IGx1biA9ICV1LCBmbGFncyA9IDB4JXgsICIKKwkJCQkiY21kbGVuICV1XG4iLAorCQkJCWNidy0+THVuLCBjYnctPkZsYWdzLCBjYnctPkxlbmd0aCk7CisKKwkJLyogV2UgY2FuIGRvIGFueXRoaW5nIHdlIHdhbnQgaGVyZSwgc28gbGV0J3Mgc3RhbGwgdGhlCisJCSAqIGJ1bGsgcGlwZXMgaWYgd2UgYXJlIGFsbG93ZWQgdG8uICovCisJCWlmIChtb2RfZGF0YS5jYW5fc3RhbGwpIHsKKwkJCWZzZ19zZXRfaGFsdChmc2csIGZzZy0+YnVsa19vdXQpOworCQkJaGFsdF9idWxrX2luX2VuZHBvaW50KGZzZyk7CisJCX0KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogU2F2ZSB0aGUgY29tbWFuZCBmb3IgbGF0ZXIgKi8KKwlmc2ctPmNtbmRfc2l6ZSA9IGNidy0+TGVuZ3RoOworCW1lbWNweShmc2ctPmNtbmQsIGNidy0+Q0RCLCBmc2ctPmNtbmRfc2l6ZSk7CisJaWYgKGNidy0+RmxhZ3MgJiBVU0JfQlVMS19JTl9GTEFHKQorCQlmc2ctPmRhdGFfZGlyID0gREFUQV9ESVJfVE9fSE9TVDsKKwllbHNlCisJCWZzZy0+ZGF0YV9kaXIgPSBEQVRBX0RJUl9GUk9NX0hPU1Q7CisJZnNnLT5kYXRhX3NpemUgPSBsZTMyX3RvX2NwdShjYnctPkRhdGFUcmFuc2Zlckxlbmd0aCk7CisJaWYgKGZzZy0+ZGF0YV9zaXplID09IDApCisJCWZzZy0+ZGF0YV9kaXIgPSBEQVRBX0RJUl9OT05FOworCWZzZy0+bHVuID0gY2J3LT5MdW47CisJZnNnLT50YWcgPSBjYnctPlRhZzsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGdldF9uZXh0X2NvbW1hbmQoc3RydWN0IGZzZ19kZXYgKmZzZykKK3sKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmg7CisJaW50CQkJcmMgPSAwOworCisJaWYgKHRyYW5zcG9ydF9pc19iYmIoKSkgeworCisJCS8qIFdhaXQgZm9yIHRoZSBuZXh0IGJ1ZmZlciB0byBiZWNvbWUgYXZhaWxhYmxlICovCisJCWJoID0gZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsOworCQl3aGlsZSAoYmgtPnN0YXRlICE9IEJVRl9TVEFURV9FTVBUWSkgeworCQkJaWYgKChyYyA9IHNsZWVwX3RocmVhZChmc2cpKSAhPSAwKQorCQkJCXJldHVybiByYzsKKwkJCX0KKworCQkvKiBRdWV1ZSBhIHJlcXVlc3QgdG8gcmVhZCBhIEJ1bGstb25seSBDQlcgKi8KKwkJc2V0X2J1bGtfb3V0X3JlcV9sZW5ndGgoZnNnLCBiaCwgVVNCX0JVTEtfQ0JfV1JBUF9MRU4pOworCQlzdGFydF90cmFuc2Zlcihmc2csIGZzZy0+YnVsa19vdXQsIGJoLT5vdXRyZXEsCisJCQkJJmJoLT5vdXRyZXFfYnVzeSwgJmJoLT5zdGF0ZSk7CisKKwkJLyogV2Ugd2lsbCBkcmFpbiB0aGUgYnVmZmVyIGluIHNvZnR3YXJlLCB3aGljaCBtZWFucyB3ZQorCQkgKiBjYW4gcmV1c2UgaXQgZm9yIHRoZSBuZXh0IGZpbGxpbmcuICBObyBuZWVkIHRvIGFkdmFuY2UKKwkJICogbmV4dF9idWZmaGRfdG9fZmlsbC4gKi8KKworCQkvKiBXYWl0IGZvciB0aGUgQ0JXIHRvIGFycml2ZSAqLworCQl3aGlsZSAoYmgtPnN0YXRlICE9IEJVRl9TVEFURV9GVUxMKSB7CisJCQlpZiAoKHJjID0gc2xlZXBfdGhyZWFkKGZzZykpICE9IDApCisJCQkJcmV0dXJuIHJjOworCQkJfQorCQlyYyA9IHJlY2VpdmVkX2Nidyhmc2csIGJoKTsKKwkJYmgtPnN0YXRlID0gQlVGX1NUQVRFX0VNUFRZOworCisJfSBlbHNlIHsJCS8vIFVTQl9QUl9DQiBvciBVU0JfUFJfQ0JJCisKKwkJLyogV2FpdCBmb3IgdGhlIG5leHQgY29tbWFuZCB0byBhcnJpdmUgKi8KKwkJd2hpbGUgKGZzZy0+Y2JidWZfY21uZF9zaXplID09IDApIHsKKwkJCWlmICgocmMgPSBzbGVlcF90aHJlYWQoZnNnKSkgIT0gMCkKKwkJCQlyZXR1cm4gcmM7CisJCQl9CisKKwkJLyogSXMgdGhlIHByZXZpb3VzIHN0YXR1cyBpbnRlcnJ1cHQgcmVxdWVzdCBzdGlsbCBidXN5PworCQkgKiBUaGUgaG9zdCBpcyBhbGxvd2VkIHRvIHNraXAgcmVhZGluZyB0aGUgc3RhdHVzLAorCQkgKiBzbyB3ZSBtdXN0IGNhbmNlbCBpdC4gKi8KKwkJaWYgKGZzZy0+aW50cmVxX2J1c3kpCisJCQl1c2JfZXBfZGVxdWV1ZShmc2ctPmludHJfaW4sIGZzZy0+aW50cmVxKTsKKworCQkvKiBDb3B5IHRoZSBjb21tYW5kIGFuZCBtYXJrIHRoZSBidWZmZXIgZW1wdHkgKi8KKwkJZnNnLT5kYXRhX2RpciA9IERBVEFfRElSX1VOS05PV047CisJCXNwaW5fbG9ja19pcnEoJmZzZy0+bG9jayk7CisJCWZzZy0+Y21uZF9zaXplID0gZnNnLT5jYmJ1Zl9jbW5kX3NpemU7CisJCW1lbWNweShmc2ctPmNtbmQsIGZzZy0+Y2JidWZfY21uZCwgZnNnLT5jbW5kX3NpemUpOworCQlmc2ctPmNiYnVmX2NtbmRfc2l6ZSA9IDA7CisJCXNwaW5fdW5sb2NrX2lycSgmZnNnLT5sb2NrKTsKKwl9CisJcmV0dXJuIHJjOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgZW5hYmxlX2VuZHBvaW50KHN0cnVjdCBmc2dfZGV2ICpmc2csIHN0cnVjdCB1c2JfZXAgKmVwLAorCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmQpCit7CisJaW50CXJjOworCisJZXAtPmRyaXZlcl9kYXRhID0gZnNnOworCXJjID0gdXNiX2VwX2VuYWJsZShlcCwgZCk7CisJaWYgKHJjKQorCQlFUlJPUihmc2csICJjYW4ndCBlbmFibGUgJXMsIHJlc3VsdCAlZFxuIiwgZXAtPm5hbWUsIHJjKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfcmVxdWVzdChzdHJ1Y3QgZnNnX2RldiAqZnNnLCBzdHJ1Y3QgdXNiX2VwICplcCwKKwkJc3RydWN0IHVzYl9yZXF1ZXN0ICoqcHJlcSkKK3sKKwkqcHJlcSA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0KGVwLCBHRlBfQVRPTUlDKTsKKwlpZiAoKnByZXEpCisJCXJldHVybiAwOworCUVSUk9SKGZzZywgImNhbid0IGFsbG9jYXRlIHJlcXVlc3QgZm9yICVzXG4iLCBlcC0+bmFtZSk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qCisgKiBSZXNldCBpbnRlcmZhY2Ugc2V0dGluZyBhbmQgcmUtaW5pdCBlbmRwb2ludCBzdGF0ZSAodG9nZ2xlIGV0YykuCisgKiBDYWxsIHdpdGggYWx0c2V0dGluZyA8IDAgdG8gZGlzYWJsZSB0aGUgaW50ZXJmYWNlLiAgVGhlIG9ubHkgb3RoZXIKKyAqIGF2YWlsYWJsZSBhbHRzZXR0aW5nIGlzIDAsIHdoaWNoIGVuYWJsZXMgdGhlIGludGVyZmFjZS4KKyAqLworc3RhdGljIGludCBkb19zZXRfaW50ZXJmYWNlKHN0cnVjdCBmc2dfZGV2ICpmc2csIGludCBhbHRzZXR0aW5nKQoreworCWludAlyYyA9IDA7CisJaW50CWk7CisJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpkOworCisJaWYgKGZzZy0+cnVubmluZykKKwkJREJHKGZzZywgInJlc2V0IGludGVyZmFjZVxuIik7CisKK3Jlc2V0OgorCS8qIERlYWxsb2NhdGUgdGhlIHJlcXVlc3RzICovCisJZm9yIChpID0gMDsgaSA8IE5VTV9CVUZGRVJTOyArK2kpIHsKKwkJc3RydWN0IGZzZ19idWZmaGQgKmJoID0gJmZzZy0+YnVmZmhkc1tpXTsKKworCQlpZiAoYmgtPmlucmVxKSB7CisJCQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGZzZy0+YnVsa19pbiwgYmgtPmlucmVxKTsKKwkJCWJoLT5pbnJlcSA9IE5VTEw7CisJCX0KKwkJaWYgKGJoLT5vdXRyZXEpIHsKKwkJCXVzYl9lcF9mcmVlX3JlcXVlc3QoZnNnLT5idWxrX291dCwgYmgtPm91dHJlcSk7CisJCQliaC0+b3V0cmVxID0gTlVMTDsKKwkJfQorCX0KKwlpZiAoZnNnLT5pbnRyZXEpIHsKKwkJdXNiX2VwX2ZyZWVfcmVxdWVzdChmc2ctPmludHJfaW4sIGZzZy0+aW50cmVxKTsKKwkJZnNnLT5pbnRyZXEgPSBOVUxMOworCX0KKworCS8qIERpc2FibGUgdGhlIGVuZHBvaW50cyAqLworCWlmIChmc2ctPmJ1bGtfaW5fZW5hYmxlZCkgeworCQl1c2JfZXBfZGlzYWJsZShmc2ctPmJ1bGtfaW4pOworCQlmc2ctPmJ1bGtfaW5fZW5hYmxlZCA9IDA7CisJfQorCWlmIChmc2ctPmJ1bGtfb3V0X2VuYWJsZWQpIHsKKwkJdXNiX2VwX2Rpc2FibGUoZnNnLT5idWxrX291dCk7CisJCWZzZy0+YnVsa19vdXRfZW5hYmxlZCA9IDA7CisJfQorCWlmIChmc2ctPmludHJfaW5fZW5hYmxlZCkgeworCQl1c2JfZXBfZGlzYWJsZShmc2ctPmludHJfaW4pOworCQlmc2ctPmludHJfaW5fZW5hYmxlZCA9IDA7CisJfQorCisJZnNnLT5ydW5uaW5nID0gMDsKKwlpZiAoYWx0c2V0dGluZyA8IDAgfHwgcmMgIT0gMCkKKwkJcmV0dXJuIHJjOworCisJREJHKGZzZywgInNldCBpbnRlcmZhY2UgJWRcbiIsIGFsdHNldHRpbmcpOworCisJLyogRW5hYmxlIHRoZSBlbmRwb2ludHMgKi8KKwlkID0gZXBfZGVzYyhmc2ctPmdhZGdldCwgJmZzX2J1bGtfaW5fZGVzYywgJmhzX2J1bGtfaW5fZGVzYyk7CisJaWYgKChyYyA9IGVuYWJsZV9lbmRwb2ludChmc2csIGZzZy0+YnVsa19pbiwgZCkpICE9IDApCisJCWdvdG8gcmVzZXQ7CisJZnNnLT5idWxrX2luX2VuYWJsZWQgPSAxOworCisJZCA9IGVwX2Rlc2MoZnNnLT5nYWRnZXQsICZmc19idWxrX291dF9kZXNjLCAmaHNfYnVsa19vdXRfZGVzYyk7CisJaWYgKChyYyA9IGVuYWJsZV9lbmRwb2ludChmc2csIGZzZy0+YnVsa19vdXQsIGQpKSAhPSAwKQorCQlnb3RvIHJlc2V0OworCWZzZy0+YnVsa19vdXRfZW5hYmxlZCA9IDE7CisJZnNnLT5idWxrX291dF9tYXhwYWNrZXQgPSBsZTE2X3RvX2NwdShkLT53TWF4UGFja2V0U2l6ZSk7CisKKwlpZiAodHJhbnNwb3J0X2lzX2NiaSgpKSB7CisJCWQgPSBlcF9kZXNjKGZzZy0+Z2FkZ2V0LCAmZnNfaW50cl9pbl9kZXNjLCAmaHNfaW50cl9pbl9kZXNjKTsKKwkJaWYgKChyYyA9IGVuYWJsZV9lbmRwb2ludChmc2csIGZzZy0+aW50cl9pbiwgZCkpICE9IDApCisJCQlnb3RvIHJlc2V0OworCQlmc2ctPmludHJfaW5fZW5hYmxlZCA9IDE7CisJfQorCisJLyogQWxsb2NhdGUgdGhlIHJlcXVlc3RzICovCisJZm9yIChpID0gMDsgaSA8IE5VTV9CVUZGRVJTOyArK2kpIHsKKwkJc3RydWN0IGZzZ19idWZmaGQJKmJoID0gJmZzZy0+YnVmZmhkc1tpXTsKKworCQlpZiAoKHJjID0gYWxsb2NfcmVxdWVzdChmc2csIGZzZy0+YnVsa19pbiwgJmJoLT5pbnJlcSkpICE9IDApCisJCQlnb3RvIHJlc2V0OworCQlpZiAoKHJjID0gYWxsb2NfcmVxdWVzdChmc2csIGZzZy0+YnVsa19vdXQsICZiaC0+b3V0cmVxKSkgIT0gMCkKKwkJCWdvdG8gcmVzZXQ7CisJCWJoLT5pbnJlcS0+YnVmID0gYmgtPm91dHJlcS0+YnVmID0gYmgtPmJ1ZjsKKwkJYmgtPmlucmVxLT5kbWEgPSBiaC0+b3V0cmVxLT5kbWEgPSBiaC0+ZG1hOworCQliaC0+aW5yZXEtPmNvbnRleHQgPSBiaC0+b3V0cmVxLT5jb250ZXh0ID0gYmg7CisJCWJoLT5pbnJlcS0+Y29tcGxldGUgPSBidWxrX2luX2NvbXBsZXRlOworCQliaC0+b3V0cmVxLT5jb21wbGV0ZSA9IGJ1bGtfb3V0X2NvbXBsZXRlOworCX0KKwlpZiAodHJhbnNwb3J0X2lzX2NiaSgpKSB7CisJCWlmICgocmMgPSBhbGxvY19yZXF1ZXN0KGZzZywgZnNnLT5pbnRyX2luLCAmZnNnLT5pbnRyZXEpKSAhPSAwKQorCQkJZ290byByZXNldDsKKwkJZnNnLT5pbnRyZXEtPmNvbXBsZXRlID0gaW50cl9pbl9jb21wbGV0ZTsKKwl9CisKKwlmc2ctPnJ1bm5pbmcgPSAxOworCWZvciAoaSA9IDA7IGkgPCBmc2ctPm5sdW5zOyArK2kpCisJCWZzZy0+bHVuc1tpXS51bml0X2F0dGVudGlvbl9kYXRhID0gU1NfUkVTRVRfT0NDVVJSRUQ7CisJcmV0dXJuIHJjOworfQorCisKKy8qCisgKiBDaGFuZ2Ugb3VyIG9wZXJhdGlvbmFsIGNvbmZpZ3VyYXRpb24uICBUaGlzIGNvZGUgbXVzdCBhZ3JlZSB3aXRoIHRoZSBjb2RlCisgKiB0aGF0IHJldHVybnMgY29uZmlnIGRlc2NyaXB0b3JzLCBhbmQgd2l0aCBpbnRlcmZhY2UgYWx0c2V0dGluZyBjb2RlLgorICoKKyAqIEl0J3MgYWxzbyByZXNwb25zaWJsZSBmb3IgcG93ZXIgbWFuYWdlbWVudCBpbnRlcmFjdGlvbnMuICBTb21lCisgKiBjb25maWd1cmF0aW9ucyBtaWdodCBub3Qgd29yayB3aXRoIG91ciBjdXJyZW50IHBvd2VyIHNvdXJjZXMuCisgKiBGb3Igbm93IHdlIGp1c3QgYXNzdW1lIHRoZSBnYWRnZXQgaXMgYWx3YXlzIHNlbGYtcG93ZXJlZC4KKyAqLworc3RhdGljIGludCBkb19zZXRfY29uZmlnKHN0cnVjdCBmc2dfZGV2ICpmc2csIHU4IG5ld19jb25maWcpCit7CisJaW50CXJjID0gMDsKKworCS8qIERpc2FibGUgdGhlIHNpbmdsZSBpbnRlcmZhY2UgKi8KKwlpZiAoZnNnLT5jb25maWcgIT0gMCkgeworCQlEQkcoZnNnLCAicmVzZXQgY29uZmlnXG4iKTsKKwkJZnNnLT5jb25maWcgPSAwOworCQlyYyA9IGRvX3NldF9pbnRlcmZhY2UoZnNnLCAtMSk7CisJfQorCisJLyogRW5hYmxlIHRoZSBpbnRlcmZhY2UgKi8KKwlpZiAobmV3X2NvbmZpZyAhPSAwKSB7CisJCWZzZy0+Y29uZmlnID0gbmV3X2NvbmZpZzsKKwkJaWYgKChyYyA9IGRvX3NldF9pbnRlcmZhY2UoZnNnLCAwKSkgIT0gMCkKKwkJCWZzZy0+Y29uZmlnID0gMDsJLy8gUmVzZXQgb24gZXJyb3JzCisJCWVsc2UgeworCQkJY2hhciAqc3BlZWQ7CisKKwkJCXN3aXRjaCAoZnNnLT5nYWRnZXQtPnNwZWVkKSB7CisJCQljYXNlIFVTQl9TUEVFRF9MT1c6CXNwZWVkID0gImxvdyI7CWJyZWFrOworCQkJY2FzZSBVU0JfU1BFRURfRlVMTDoJc3BlZWQgPSAiZnVsbCI7CWJyZWFrOworCQkJY2FzZSBVU0JfU1BFRURfSElHSDoJc3BlZWQgPSAiaGlnaCI7CWJyZWFrOworCQkJZGVmYXVsdDogCQlzcGVlZCA9ICI/IjsJYnJlYWs7CisJCQl9CisJCQlJTkZPKGZzZywgIiVzIHNwZWVkIGNvbmZpZyAjJWRcbiIsIHNwZWVkLCBmc2ctPmNvbmZpZyk7CisJCX0KKwl9CisJcmV0dXJuIHJjOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIGhhbmRsZV9leGNlcHRpb24oc3RydWN0IGZzZ19kZXYgKmZzZykKK3sKKwlzaWdpbmZvX3QJCWluZm87CisJaW50CQkJc2lnOworCWludAkJCWk7CisJaW50CQkJbnVtX2FjdGl2ZTsKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmg7CisJZW51bSBmc2dfc3RhdGUJCW9sZF9zdGF0ZTsKKwl1OAkJCW5ld19jb25maWc7CisJc3RydWN0IGx1bgkJKmN1cmx1bjsKKwl1bnNpZ25lZCBpbnQJCWV4Y2VwdGlvbl9yZXFfdGFnOworCWludAkJCXJjOworCisJLyogQ2xlYXIgdGhlIGV4aXN0aW5nIHNpZ25hbHMuICBBbnl0aGluZyBidXQgU0lHVVNSMSBpcyBjb252ZXJ0ZWQKKwkgKiBpbnRvIGEgaGlnaC1wcmlvcml0eSBFWElUIGV4Y2VwdGlvbi4gKi8KKwlmb3IgKDs7KSB7CisJCXNpZyA9IGRlcXVldWVfc2lnbmFsX2xvY2soY3VycmVudCwgJmZzZy0+dGhyZWFkX3NpZ25hbF9tYXNrLAorCQkJCSZpbmZvKTsKKwkJaWYgKCFzaWcpCisJCQlicmVhazsKKwkJaWYgKHNpZyAhPSBTSUdVU1IxKSB7CisJCQlpZiAoZnNnLT5zdGF0ZSA8IEZTR19TVEFURV9FWElUKQorCQkJCURCRyhmc2csICJNYWluIHRocmVhZCBleGl0aW5nIG9uIHNpZ25hbFxuIik7CisJCQlyYWlzZV9leGNlcHRpb24oZnNnLCBGU0dfU1RBVEVfRVhJVCk7CisJCX0KKwl9CisKKwkvKiBDYW5jZWwgYWxsIHRoZSBwZW5kaW5nIHRyYW5zZmVycyAqLworCWlmIChmc2ctPmludHJlcV9idXN5KQorCQl1c2JfZXBfZGVxdWV1ZShmc2ctPmludHJfaW4sIGZzZy0+aW50cmVxKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0JVRkZFUlM7ICsraSkgeworCQliaCA9ICZmc2ctPmJ1ZmZoZHNbaV07CisJCWlmIChiaC0+aW5yZXFfYnVzeSkKKwkJCXVzYl9lcF9kZXF1ZXVlKGZzZy0+YnVsa19pbiwgYmgtPmlucmVxKTsKKwkJaWYgKGJoLT5vdXRyZXFfYnVzeSkKKwkJCXVzYl9lcF9kZXF1ZXVlKGZzZy0+YnVsa19vdXQsIGJoLT5vdXRyZXEpOworCX0KKworCS8qIFdhaXQgdW50aWwgZXZlcnl0aGluZyBpcyBpZGxlICovCisJZm9yICg7OykgeworCQludW1fYWN0aXZlID0gZnNnLT5pbnRyZXFfYnVzeTsKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9CVUZGRVJTOyArK2kpIHsKKwkJCWJoID0gJmZzZy0+YnVmZmhkc1tpXTsKKwkJCW51bV9hY3RpdmUgKz0gYmgtPmlucmVxX2J1c3kgKyBiaC0+b3V0cmVxX2J1c3k7CisJCX0KKwkJaWYgKG51bV9hY3RpdmUgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAoc2xlZXBfdGhyZWFkKGZzZykpCisJCQlyZXR1cm47CisJfQorCisJLyogQ2xlYXIgb3V0IHRoZSBjb250cm9sbGVyJ3MgZmlmb3MgKi8KKwlpZiAoZnNnLT5idWxrX2luX2VuYWJsZWQpCisJCXVzYl9lcF9maWZvX2ZsdXNoKGZzZy0+YnVsa19pbik7CisJaWYgKGZzZy0+YnVsa19vdXRfZW5hYmxlZCkKKwkJdXNiX2VwX2ZpZm9fZmx1c2goZnNnLT5idWxrX291dCk7CisJaWYgKGZzZy0+aW50cl9pbl9lbmFibGVkKQorCQl1c2JfZXBfZmlmb19mbHVzaChmc2ctPmludHJfaW4pOworCisJLyogUmVzZXQgdGhlIEkvTyBidWZmZXIgc3RhdGVzIGFuZCBwb2ludGVycywgdGhlIFNDU0kKKwkgKiBzdGF0ZSwgYW5kIHRoZSBleGNlcHRpb24uICBUaGVuIGludm9rZSB0aGUgaGFuZGxlci4gKi8KKwlzcGluX2xvY2tfaXJxKCZmc2ctPmxvY2spOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9CVUZGRVJTOyArK2kpIHsKKwkJYmggPSAmZnNnLT5idWZmaGRzW2ldOworCQliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRU1QVFk7CisJfQorCWZzZy0+bmV4dF9idWZmaGRfdG9fZmlsbCA9IGZzZy0+bmV4dF9idWZmaGRfdG9fZHJhaW4gPQorCQkJJmZzZy0+YnVmZmhkc1swXTsKKworCWV4Y2VwdGlvbl9yZXFfdGFnID0gZnNnLT5leGNlcHRpb25fcmVxX3RhZzsKKwluZXdfY29uZmlnID0gZnNnLT5uZXdfY29uZmlnOworCW9sZF9zdGF0ZSA9IGZzZy0+c3RhdGU7CisKKwlpZiAob2xkX3N0YXRlID09IEZTR19TVEFURV9BQk9SVF9CVUxLX09VVCkKKwkJZnNnLT5zdGF0ZSA9IEZTR19TVEFURV9TVEFUVVNfUEhBU0U7CisJZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBmc2ctPm5sdW5zOyArK2kpIHsKKwkJCWN1cmx1biA9ICZmc2ctPmx1bnNbaV07CisJCQljdXJsdW4tPnByZXZlbnRfbWVkaXVtX3JlbW92YWwgPSAwOworCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gY3VybHVuLT51bml0X2F0dGVudGlvbl9kYXRhID0KKwkJCQkJU1NfTk9fU0VOU0U7CisJCQljdXJsdW4tPnNlbnNlX2RhdGFfaW5mbyA9IDA7CisJCX0KKwkJZnNnLT5zdGF0ZSA9IEZTR19TVEFURV9JRExFOworCX0KKwlzcGluX3VubG9ja19pcnEoJmZzZy0+bG9jayk7CisKKwkvKiBDYXJyeSBvdXQgYW55IGV4dHJhIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBleGNlcHRpb24gKi8KKwlzd2l0Y2ggKG9sZF9zdGF0ZSkgeworCWRlZmF1bHQ6CisJCWJyZWFrOworCisJY2FzZSBGU0dfU1RBVEVfQUJPUlRfQlVMS19PVVQ6CisJCXNlbmRfc3RhdHVzKGZzZyk7CisJCXNwaW5fbG9ja19pcnEoJmZzZy0+bG9jayk7CisJCWlmIChmc2ctPnN0YXRlID09IEZTR19TVEFURV9TVEFUVVNfUEhBU0UpCisJCQlmc2ctPnN0YXRlID0gRlNHX1NUQVRFX0lETEU7CisJCXNwaW5fdW5sb2NrX2lycSgmZnNnLT5sb2NrKTsKKwkJYnJlYWs7CisKKwljYXNlIEZTR19TVEFURV9SRVNFVDoKKwkJLyogSW4gY2FzZSB3ZSB3ZXJlIGZvcmNlZCBhZ2FpbnN0IG91ciB3aWxsIHRvIGhhbHQgYQorCQkgKiBidWxrIGVuZHBvaW50LCBjbGVhciB0aGUgaGFsdCBub3cuICAoVGhlIFN1cGVySCBVREMKKwkJICogcmVxdWlyZXMgdGhpcy4pICovCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ0xFQVJfQlVMS19IQUxUUywKKwkJCQkmZnNnLT5hdG9taWNfYml0ZmxhZ3MpKSB7CisJCQl1c2JfZXBfY2xlYXJfaGFsdChmc2ctPmJ1bGtfaW4pOworCQkJdXNiX2VwX2NsZWFyX2hhbHQoZnNnLT5idWxrX291dCk7CisJCX0KKworCQlpZiAodHJhbnNwb3J0X2lzX2JiYigpKSB7CisJCQlpZiAoZnNnLT5lcDBfcmVxX3RhZyA9PSBleGNlcHRpb25fcmVxX3RhZykKKwkJCQllcDBfcXVldWUoZnNnKTsJLy8gQ29tcGxldGUgdGhlIHN0YXR1cyBzdGFnZQorCisJCX0gZWxzZSBpZiAodHJhbnNwb3J0X2lzX2NiaSgpKQorCQkJc2VuZF9zdGF0dXMoZnNnKTsJLy8gU3RhdHVzIGJ5IGludGVycnVwdCBwaXBlCisKKwkJLyogVGVjaG5pY2FsbHkgdGhpcyBzaG91bGQgZ28gaGVyZSwgYnV0IGl0IHdvdWxkIG9ubHkgYmUKKwkJICogYSB3YXN0ZSBvZiB0aW1lLiAgRGl0dG8gZm9yIHRoZSBJTlRFUkZBQ0VfQ0hBTkdFIGFuZAorCQkgKiBDT05GSUdfQ0hBTkdFIGNhc2VzLiAqLworCQkvLyBmb3IgKGkgPSAwOyBpIDwgZnNnLT5ubHVuczsgKytpKQorCQkvLwlmc2ctPmx1bnNbaV0udW5pdF9hdHRlbnRpb25fZGF0YSA9IFNTX1JFU0VUX09DQ1VSUkVEOworCQlicmVhazsKKworCWNhc2UgRlNHX1NUQVRFX0lOVEVSRkFDRV9DSEFOR0U6CisJCXJjID0gZG9fc2V0X2ludGVyZmFjZShmc2csIDApOworCQlpZiAoZnNnLT5lcDBfcmVxX3RhZyAhPSBleGNlcHRpb25fcmVxX3RhZykKKwkJCWJyZWFrOworCQlpZiAocmMgIT0gMCkJCQkvLyBTVEFMTCBvbiBlcnJvcnMKKwkJCWZzZ19zZXRfaGFsdChmc2csIGZzZy0+ZXAwKTsKKwkJZWxzZQkJCQkvLyBDb21wbGV0ZSB0aGUgc3RhdHVzIHN0YWdlCisJCQllcDBfcXVldWUoZnNnKTsKKwkJYnJlYWs7CisKKwljYXNlIEZTR19TVEFURV9DT05GSUdfQ0hBTkdFOgorCQlyYyA9IGRvX3NldF9jb25maWcoZnNnLCBuZXdfY29uZmlnKTsKKwkJaWYgKGZzZy0+ZXAwX3JlcV90YWcgIT0gZXhjZXB0aW9uX3JlcV90YWcpCisJCQlicmVhazsKKwkJaWYgKHJjICE9IDApCQkJLy8gU1RBTEwgb24gZXJyb3JzCisJCQlmc2dfc2V0X2hhbHQoZnNnLCBmc2ctPmVwMCk7CisJCWVsc2UJCQkJLy8gQ29tcGxldGUgdGhlIHN0YXR1cyBzdGFnZQorCQkJZXAwX3F1ZXVlKGZzZyk7CisJCWJyZWFrOworCisJY2FzZSBGU0dfU1RBVEVfRElTQ09OTkVDVDoKKwkJZnN5bmNfYWxsKGZzZyk7CisJCWRvX3NldF9jb25maWcoZnNnLCAwKTsJCS8vIFVuY29uZmlndXJlZCBzdGF0ZQorCQlicmVhazsKKworCWNhc2UgRlNHX1NUQVRFX0VYSVQ6CisJY2FzZSBGU0dfU1RBVEVfVEVSTUlOQVRFRDoKKwkJZG9fc2V0X2NvbmZpZyhmc2csIDApOwkJCS8vIEZyZWUgcmVzb3VyY2VzCisJCXNwaW5fbG9ja19pcnEoJmZzZy0+bG9jayk7CisJCWZzZy0+c3RhdGUgPSBGU0dfU1RBVEVfVEVSTUlOQVRFRDsJLy8gU3RvcCB0aGUgdGhyZWFkCisJCXNwaW5fdW5sb2NrX2lycSgmZnNnLT5sb2NrKTsKKwkJYnJlYWs7CisJfQorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgZnNnX21haW5fdGhyZWFkKHZvaWQgKmZzZ18pCit7CisJc3RydWN0IGZzZ19kZXYJCSpmc2cgPSAoc3RydWN0IGZzZ19kZXYgKikgZnNnXzsKKworCWZzZy0+dGhyZWFkX3Rhc2sgPSBjdXJyZW50OworCisJLyogUmVsZWFzZSBhbGwgb3VyIHVzZXJzcGFjZSByZXNvdXJjZXMgKi8KKwlkYWVtb25pemUoImZpbGUtc3RvcmFnZS1nYWRnZXQiKTsKKworCS8qIEFsbG93IHRoZSB0aHJlYWQgdG8gYmUga2lsbGVkIGJ5IGEgc2lnbmFsLCBidXQgc2V0IHRoZSBzaWduYWwgbWFzaworCSAqIHRvIGJsb2NrIGV2ZXJ5dGhpbmcgYnV0IElOVCwgVEVSTSwgS0lMTCwgYW5kIFVTUjEuICovCisJc2lnaW5pdHNldGludigmZnNnLT50aHJlYWRfc2lnbmFsX21hc2ssIHNpZ21hc2soU0lHSU5UKSB8CisJCQlzaWdtYXNrKFNJR1RFUk0pIHwgc2lnbWFzayhTSUdLSUxMKSB8CisJCQlzaWdtYXNrKFNJR1VTUjEpKTsKKwlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJmZzZy0+dGhyZWFkX3NpZ25hbF9tYXNrLCBOVUxMKTsKKworCS8qIEFycmFuZ2UgZm9yIHVzZXJzcGFjZSByZWZlcmVuY2VzIHRvIGJlIGludGVycHJldGVkIGFzIGtlcm5lbAorCSAqIHBvaW50ZXJzLiAgVGhhdCB3YXkgd2UgY2FuIHBhc3MgYSBrZXJuZWwgcG9pbnRlciB0byBhIHJvdXRpbmUKKwkgKiB0aGF0IGV4cGVjdHMgYSBfX3VzZXIgcG9pbnRlciBhbmQgaXQgd2lsbCB3b3JrIG9rYXkuICovCisJc2V0X2ZzKGdldF9kcygpKTsKKworCS8qIFdhaXQgZm9yIHRoZSBnYWRnZXQgcmVnaXN0cmF0aW9uIHRvIGZpbmlzaCB1cCAqLworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmZzZy0+dGhyZWFkX25vdGlmaWVyKTsKKworCS8qIFRoZSBtYWluIGxvb3AgKi8KKwl3aGlsZSAoZnNnLT5zdGF0ZSAhPSBGU0dfU1RBVEVfVEVSTUlOQVRFRCkgeworCQlpZiAoZXhjZXB0aW9uX2luX3Byb2dyZXNzKGZzZykgfHwgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCWhhbmRsZV9leGNlcHRpb24oZnNnKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFmc2ctPnJ1bm5pbmcpIHsKKwkJCXNsZWVwX3RocmVhZChmc2cpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoZ2V0X25leHRfY29tbWFuZChmc2cpKQorCQkJY29udGludWU7CisKKwkJc3Bpbl9sb2NrX2lycSgmZnNnLT5sb2NrKTsKKwkJaWYgKCFleGNlcHRpb25faW5fcHJvZ3Jlc3MoZnNnKSkKKwkJCWZzZy0+c3RhdGUgPSBGU0dfU1RBVEVfREFUQV9QSEFTRTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZmc2ctPmxvY2spOworCisJCWlmIChkb19zY3NpX2NvbW1hbmQoZnNnKSB8fCBmaW5pc2hfcmVwbHkoZnNnKSkKKwkJCWNvbnRpbnVlOworCisJCXNwaW5fbG9ja19pcnEoJmZzZy0+bG9jayk7CisJCWlmICghZXhjZXB0aW9uX2luX3Byb2dyZXNzKGZzZykpCisJCQlmc2ctPnN0YXRlID0gRlNHX1NUQVRFX1NUQVRVU19QSEFTRTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZmc2ctPmxvY2spOworCisJCWlmIChzZW5kX3N0YXR1cyhmc2cpKQorCQkJY29udGludWU7CisKKwkJc3Bpbl9sb2NrX2lycSgmZnNnLT5sb2NrKTsKKwkJaWYgKCFleGNlcHRpb25faW5fcHJvZ3Jlc3MoZnNnKSkKKwkJCWZzZy0+c3RhdGUgPSBGU0dfU1RBVEVfSURMRTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZmc2ctPmxvY2spOworCQl9CisKKwlmc2ctPnRocmVhZF90YXNrID0gTlVMTDsKKwlmbHVzaF9zaWduYWxzKGN1cnJlbnQpOworCisJLyogSW4gY2FzZSB3ZSBhcmUgZXhpdGluZyBiZWNhdXNlIG9mIGEgc2lnbmFsLCB1bnJlZ2lzdGVyIHRoZQorCSAqIGdhZGdldCBkcml2ZXIgYW5kIGNsb3NlIHRoZSBiYWNraW5nIGZpbGUuICovCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRUdJU1RFUkVELCAmZnNnLT5hdG9taWNfYml0ZmxhZ3MpKSB7CisJCXVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoJmZzZ19kcml2ZXIpOworCQljbG9zZV9hbGxfYmFja2luZ19maWxlcyhmc2cpOworCX0KKworCS8qIExldCB0aGUgdW5iaW5kIGFuZCBjbGVhbnVwIHJvdXRpbmVzIGtub3cgdGhlIHRocmVhZCBoYXMgZXhpdGVkICovCisJY29tcGxldGVfYW5kX2V4aXQoJmZzZy0+dGhyZWFkX25vdGlmaWVyLCAwKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBJZiB0aGUgbmV4dCB0d28gcm91dGluZXMgYXJlIGNhbGxlZCB3aGlsZSB0aGUgZ2FkZ2V0IGlzIHJlZ2lzdGVyZWQsCisgKiB0aGUgY2FsbGVyIG11c3Qgb3duIGZzZy0+ZmlsZXNlbSBmb3Igd3JpdGluZy4gKi8KKworc3RhdGljIGludCBvcGVuX2JhY2tpbmdfZmlsZShzdHJ1Y3QgbHVuICpjdXJsdW4sIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWludAkJCQlybzsKKwlzdHJ1Y3QgZmlsZQkJCSpmaWxwID0gTlVMTDsKKwlpbnQJCQkJcmMgPSAtRUlOVkFMOworCXN0cnVjdCBpbm9kZQkJCSppbm9kZSA9IE5VTEw7CisJbG9mZl90CQkJCXNpemU7CisJbG9mZl90CQkJCW51bV9zZWN0b3JzOworCisJLyogUi9XIGlmIHdlIGNhbiwgUi9PIGlmIHdlIG11c3QgKi8KKwlybyA9IGN1cmx1bi0+cm87CisJaWYgKCFybykgeworCQlmaWxwID0gZmlscF9vcGVuKGZpbGVuYW1lLCBPX1JEV1IgfCBPX0xBUkdFRklMRSwgMCk7CisJCWlmICgtRVJPRlMgPT0gUFRSX0VSUihmaWxwKSkKKwkJCXJvID0gMTsKKwl9CisJaWYgKHJvKQorCQlmaWxwID0gZmlscF9vcGVuKGZpbGVuYW1lLCBPX1JET05MWSB8IE9fTEFSR0VGSUxFLCAwKTsKKwlpZiAoSVNfRVJSKGZpbHApKSB7CisJCUxJTkZPKGN1cmx1biwgInVuYWJsZSB0byBvcGVuIGJhY2tpbmcgZmlsZTogJXNcbiIsIGZpbGVuYW1lKTsKKwkJcmV0dXJuIFBUUl9FUlIoZmlscCk7CisJfQorCisJaWYgKCEoZmlscC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKQorCQlybyA9IDE7CisKKwlpZiAoZmlscC0+Zl9kZW50cnkpCisJCWlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJaWYgKGlub2RlICYmIFNfSVNCTEsoaW5vZGUtPmlfbW9kZSkpIHsKKwkJaWYgKGJkZXZfcmVhZF9vbmx5KGlub2RlLT5pX2JkZXYpKQorCQkJcm8gPSAxOworCX0gZWxzZSBpZiAoIWlub2RlIHx8ICFTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7CisJCUxJTkZPKGN1cmx1biwgImludmFsaWQgZmlsZSB0eXBlOiAlc1xuIiwgZmlsZW5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBJZiB3ZSBjYW4ndCByZWFkIHRoZSBmaWxlLCBpdCdzIG5vIGdvb2QuCisJICogSWYgd2UgY2FuJ3Qgd3JpdGUgdGhlIGZpbGUsIHVzZSBpdCByZWFkLW9ubHkuICovCisJaWYgKCFmaWxwLT5mX29wIHx8ICEoZmlscC0+Zl9vcC0+cmVhZCB8fCBmaWxwLT5mX29wLT5haW9fcmVhZCkpIHsKKwkJTElORk8oY3VybHVuLCAiZmlsZSBub3QgcmVhZGFibGU6ICVzXG4iLCBmaWxlbmFtZSk7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoIShmaWxwLT5mX29wLT53cml0ZSB8fCBmaWxwLT5mX29wLT5haW9fd3JpdGUpKQorCQlybyA9IDE7CisKKwlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUtPmlfbWFwcGluZy0+aG9zdCk7CisJaWYgKHNpemUgPCAwKSB7CisJCUxJTkZPKGN1cmx1biwgInVuYWJsZSB0byBmaW5kIGZpbGUgc2l6ZTogJXNcbiIsIGZpbGVuYW1lKTsKKwkJcmMgPSAoaW50KSBzaXplOworCQlnb3RvIG91dDsKKwl9CisJbnVtX3NlY3RvcnMgPSBzaXplID4+IDk7CS8vIEZpbGUgc2l6ZSBpbiA1MTItYnl0ZSBzZWN0b3JzCisJaWYgKG51bV9zZWN0b3JzID09IDApIHsKKwkJTElORk8oY3VybHVuLCAiZmlsZSB0b28gc21hbGw6ICVzXG4iLCBmaWxlbmFtZSk7CisJCXJjID0gLUVUT09TTUFMTDsKKwkJZ290byBvdXQ7CisJfQorCisJZ2V0X2ZpbGUoZmlscCk7CisJY3VybHVuLT5ybyA9IHJvOworCWN1cmx1bi0+ZmlscCA9IGZpbHA7CisJY3VybHVuLT5maWxlX2xlbmd0aCA9IHNpemU7CisJY3VybHVuLT5udW1fc2VjdG9ycyA9IG51bV9zZWN0b3JzOworCUxEQkcoY3VybHVuLCAib3BlbiBiYWNraW5nIGZpbGU6ICVzXG4iLCBmaWxlbmFtZSk7CisJcmMgPSAwOworCitvdXQ6CisJZmlscF9jbG9zZShmaWxwLCBjdXJyZW50LT5maWxlcyk7CisJcmV0dXJuIHJjOworfQorCisKK3N0YXRpYyB2b2lkIGNsb3NlX2JhY2tpbmdfZmlsZShzdHJ1Y3QgbHVuICpjdXJsdW4pCit7CisJaWYgKGN1cmx1bi0+ZmlscCkgeworCQlMREJHKGN1cmx1biwgImNsb3NlIGJhY2tpbmcgZmlsZVxuIik7CisJCWZwdXQoY3VybHVuLT5maWxwKTsKKwkJY3VybHVuLT5maWxwID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNsb3NlX2FsbF9iYWNraW5nX2ZpbGVzKHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJaW50CWk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnNnLT5ubHVuczsgKytpKQorCQljbG9zZV9iYWNraW5nX2ZpbGUoJmZzZy0+bHVuc1tpXSk7Cit9CisKKworc3RhdGljIHNzaXplX3Qgc2hvd19ybyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbHVuCSpjdXJsdW4gPSBkZXZfdG9fbHVuKGRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgY3VybHVuLT5ybyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbHVuCSpjdXJsdW4gPSBkZXZfdG9fbHVuKGRldik7CisJc3RydWN0IGZzZ19kZXYJKmZzZyA9IChzdHJ1Y3QgZnNnX2RldiAqKSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwljaGFyCQkqcDsKKwlzc2l6ZV90CQlyYzsKKworCWRvd25fcmVhZCgmZnNnLT5maWxlc2VtKTsKKwlpZiAoYmFja2luZ19maWxlX2lzX29wZW4oY3VybHVuKSkgewkvLyBHZXQgdGhlIGNvbXBsZXRlIHBhdGhuYW1lCisJCXAgPSBkX3BhdGgoY3VybHVuLT5maWxwLT5mX2RlbnRyeSwgY3VybHVuLT5maWxwLT5mX3Zmc21udCwKKwkJCQlidWYsIFBBR0VfU0laRSAtIDEpOworCQlpZiAoSVNfRVJSKHApKQorCQkJcmMgPSBQVFJfRVJSKHApOworCQllbHNlIHsKKwkJCXJjID0gc3RybGVuKHApOworCQkJbWVtbW92ZShidWYsIHAsIHJjKTsKKwkJCWJ1ZltyY10gPSAnXG4nOwkJLy8gQWRkIGEgbmV3bGluZQorCQkJYnVmWysrcmNdID0gMDsKKwkJfQorCX0gZWxzZSB7CQkJCS8vIE5vIGZpbGUsIHJldHVybiAwIGJ5dGVzCisJCSpidWYgPSAwOworCQlyYyA9IDA7CisJfQorCXVwX3JlYWQoJmZzZy0+ZmlsZXNlbSk7CisJcmV0dXJuIHJjOworfQorCisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3JvKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3NpemVfdAkJcmMgPSBjb3VudDsKKwlzdHJ1Y3QgbHVuCSpjdXJsdW4gPSBkZXZfdG9fbHVuKGRldik7CisJc3RydWN0IGZzZ19kZXYJKmZzZyA9IChzdHJ1Y3QgZnNnX2RldiAqKSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQJCWk7CisKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJmkpICE9IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQWxsb3cgdGhlIHdyaXRlLWVuYWJsZSBzdGF0dXMgdG8gY2hhbmdlIG9ubHkgd2hpbGUgdGhlIGJhY2tpbmcgZmlsZQorCSAqIGlzIGNsb3NlZC4gKi8KKwlkb3duX3JlYWQoJmZzZy0+ZmlsZXNlbSk7CisJaWYgKGJhY2tpbmdfZmlsZV9pc19vcGVuKGN1cmx1bikpIHsKKwkJTERCRyhjdXJsdW4sICJyZWFkLW9ubHkgc3RhdHVzIGNoYW5nZSBwcmV2ZW50ZWRcbiIpOworCQlyYyA9IC1FQlVTWTsKKwl9IGVsc2UgeworCQljdXJsdW4tPnJvID0gISFpOworCQlMREJHKGN1cmx1biwgInJlYWQtb25seSBzdGF0dXMgc2V0IHRvICVkXG4iLCBjdXJsdW4tPnJvKTsKKwl9CisJdXBfcmVhZCgmZnNnLT5maWxlc2VtKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgbHVuCSpjdXJsdW4gPSBkZXZfdG9fbHVuKGRldik7CisJc3RydWN0IGZzZ19kZXYJKmZzZyA9IChzdHJ1Y3QgZnNnX2RldiAqKSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQJCXJjID0gMDsKKworCWlmIChjdXJsdW4tPnByZXZlbnRfbWVkaXVtX3JlbW92YWwgJiYgYmFja2luZ19maWxlX2lzX29wZW4oY3VybHVuKSkgeworCQlMREJHKGN1cmx1biwgImVqZWN0IGF0dGVtcHQgcHJldmVudGVkXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsJCQkJLy8gIkRvb3IgaXMgbG9ja2VkIgorCX0KKworCS8qIFJlbW92ZSBhIHRyYWlsaW5nIG5ld2xpbmUgKi8KKwlpZiAoY291bnQgPiAwICYmIGJ1Zltjb3VudC0xXSA9PSAnXG4nKQorCQkoKGNoYXIgKikgYnVmKVtjb3VudC0xXSA9IDA7CQkvLyBVZ2ghCisKKwkvKiBFamVjdCBjdXJyZW50IG1lZGl1bSAqLworCWRvd25fd3JpdGUoJmZzZy0+ZmlsZXNlbSk7CisJaWYgKGJhY2tpbmdfZmlsZV9pc19vcGVuKGN1cmx1bikpIHsKKwkJY2xvc2VfYmFja2luZ19maWxlKGN1cmx1bik7CisJCWN1cmx1bi0+dW5pdF9hdHRlbnRpb25fZGF0YSA9IFNTX01FRElVTV9OT1RfUFJFU0VOVDsKKwl9CisKKwkvKiBMb2FkIG5ldyBtZWRpdW0gKi8KKwlpZiAoY291bnQgPiAwICYmIGJ1ZlswXSkgeworCQlyYyA9IG9wZW5fYmFja2luZ19maWxlKGN1cmx1biwgYnVmKTsKKwkJaWYgKHJjID09IDApCisJCQljdXJsdW4tPnVuaXRfYXR0ZW50aW9uX2RhdGEgPQorCQkJCQlTU19OT1RfUkVBRFlfVE9fUkVBRFlfVFJBTlNJVElPTjsKKwl9CisJdXBfd3JpdGUoJmZzZy0+ZmlsZXNlbSk7CisJcmV0dXJuIChyYyA8IDAgPyByYyA6IGNvdW50KTsKK30KKworCisvKiBUaGUgd3JpdGUgcGVybWlzc2lvbnMgYW5kIHN0b3JlX3h4eCBwb2ludGVycyBhcmUgc2V0IGluIGZzZ19iaW5kKCkgKi8KK3N0YXRpYyBERVZJQ0VfQVRUUihybywgMDQ0NCwgc2hvd19ybywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZmlsZSwgMDQ0NCwgc2hvd19maWxlLCBOVUxMKTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBsdW5fcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZzZ19kZXYJKmZzZyA9IChzdHJ1Y3QgZnNnX2RldiAqKSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWNvbXBsZXRlKCZmc2ctPmx1bl9yZWxlYXNlZCk7Cit9CisKK3N0YXRpYyB2b2lkIGZzZ191bmJpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgZnNnX2RldgkJKmZzZyA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOworCWludAkJCWk7CisJc3RydWN0IGx1bgkJKmN1cmx1bjsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcSA9IGZzZy0+ZXAwcmVxOworCisJREJHKGZzZywgInVuYmluZFxuIik7CisJY2xlYXJfYml0KFJFR0lTVEVSRUQsICZmc2ctPmF0b21pY19iaXRmbGFncyk7CisKKwkvKiBVbnJlZ2lzdGVyIHRoZSBzeXNmcyBhdHRyaWJ1dGUgZmlsZXMgYW5kIHRoZSBMVU5zICovCisJaW5pdF9jb21wbGV0aW9uKCZmc2ctPmx1bl9yZWxlYXNlZCk7CisJZm9yIChpID0gMDsgaSA8IGZzZy0+bmx1bnM7ICsraSkgeworCQljdXJsdW4gPSAmZnNnLT5sdW5zW2ldOworCQlpZiAoY3VybHVuLT5yZWdpc3RlcmVkKSB7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmN1cmx1bi0+ZGV2LCAmZGV2X2F0dHJfcm8pOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKCZjdXJsdW4tPmRldiwgJmRldl9hdHRyX2ZpbGUpOworCQkJZGV2aWNlX3VucmVnaXN0ZXIoJmN1cmx1bi0+ZGV2KTsKKwkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmZzZy0+bHVuX3JlbGVhc2VkKTsKKwkJCWN1cmx1bi0+cmVnaXN0ZXJlZCA9IDA7CisJCX0KKwl9CisKKwkvKiBJZiB0aGUgdGhyZWFkIGlzbid0IGFscmVhZHkgZGVhZCwgdGVsbCBpdCB0byBleGl0IG5vdyAqLworCWlmIChmc2ctPnN0YXRlICE9IEZTR19TVEFURV9URVJNSU5BVEVEKSB7CisJCXJhaXNlX2V4Y2VwdGlvbihmc2csIEZTR19TVEFURV9FWElUKTsKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmZnNnLT50aHJlYWRfbm90aWZpZXIpOworCisJCS8qIFRoZSBjbGVhbnVwIHJvdXRpbmUgd2FpdHMgZm9yIHRoaXMgY29tcGxldGlvbiBhbHNvICovCisJCWNvbXBsZXRlKCZmc2ctPnRocmVhZF9ub3RpZmllcik7CisJfQorCisJLyogRnJlZSB0aGUgZGF0YSBidWZmZXJzICovCisJZm9yIChpID0gMDsgaSA8IE5VTV9CVUZGRVJTOyArK2kpIHsKKwkJc3RydWN0IGZzZ19idWZmaGQJKmJoID0gJmZzZy0+YnVmZmhkc1tpXTsKKworCQlpZiAoYmgtPmJ1ZikKKwkJCXVzYl9lcF9mcmVlX2J1ZmZlcihmc2ctPmJ1bGtfaW4sIGJoLT5idWYsIGJoLT5kbWEsCisJCQkJCW1vZF9kYXRhLmJ1Zmxlbik7CisJfQorCisJLyogRnJlZSB0aGUgcmVxdWVzdCBhbmQgYnVmZmVyIGZvciBlbmRwb2ludCAwICovCisJaWYgKHJlcSkgeworCQlpZiAocmVxLT5idWYpCisJCQl1c2JfZXBfZnJlZV9idWZmZXIoZnNnLT5lcDAsIHJlcS0+YnVmLAorCQkJCQlyZXEtPmRtYSwgRVAwX0JVRlNJWkUpOworCQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGZzZy0+ZXAwLCByZXEpOworCX0KKworCXNldF9nYWRnZXRfZGF0YShnYWRnZXQsIE5VTEwpOworfQorCisKK3N0YXRpYyBpbnQgX19pbml0IGNoZWNrX3BhcmFtZXRlcnMoc3RydWN0IGZzZ19kZXYgKmZzZykKK3sKKwlpbnQJcHJvdDsKKworCS8qIFN0b3JlIHRoZSBkZWZhdWx0IHZhbHVlcyAqLworCW1vZF9kYXRhLnRyYW5zcG9ydF90eXBlID0gVVNCX1BSX0JVTEs7CisJbW9kX2RhdGEudHJhbnNwb3J0X25hbWUgPSAiQnVsay1vbmx5IjsKKwltb2RfZGF0YS5wcm90b2NvbF90eXBlID0gVVNCX1NDX1NDU0k7CisJbW9kX2RhdGEucHJvdG9jb2xfbmFtZSA9ICJUcmFuc3BhcmVudCBTQ1NJIjsKKworCWlmIChnYWRnZXRfaXNfc2goZnNnLT5nYWRnZXQpKQorCQltb2RfZGF0YS5jYW5fc3RhbGwgPSAwOworCisJaWYgKG1vZF9kYXRhLnJlbGVhc2UgPT0gMHhmZmZmKSB7CS8vIFBhcmFtZXRlciB3YXNuJ3Qgc2V0CisJCWlmIChnYWRnZXRfaXNfbmV0MjI4MChmc2ctPmdhZGdldCkpCisJCQltb2RfZGF0YS5yZWxlYXNlID0gMHgwMzAxOworCQllbHNlIGlmIChnYWRnZXRfaXNfZHVtbXkoZnNnLT5nYWRnZXQpKQorCQkJbW9kX2RhdGEucmVsZWFzZSA9IDB4MDMwMjsKKwkJZWxzZSBpZiAoZ2FkZ2V0X2lzX3B4YShmc2ctPmdhZGdldCkpCisJCQltb2RfZGF0YS5yZWxlYXNlID0gMHgwMzAzOworCQllbHNlIGlmIChnYWRnZXRfaXNfc2goZnNnLT5nYWRnZXQpKQorCQkJbW9kX2RhdGEucmVsZWFzZSA9IDB4MDMwNDsKKworCQkvKiBUaGUgc2ExMTAwIGNvbnRyb2xsZXIgaXMgbm90IHN1cHBvcnRlZCAqLworCisJCWVsc2UgaWYgKGdhZGdldF9pc19nb2t1KGZzZy0+Z2FkZ2V0KSkKKwkJCW1vZF9kYXRhLnJlbGVhc2UgPSAweDAzMDY7CisJCWVsc2UgaWYgKGdhZGdldF9pc19tcTExeHgoZnNnLT5nYWRnZXQpKQorCQkJbW9kX2RhdGEucmVsZWFzZSA9IDB4MDMwNzsKKwkJZWxzZSBpZiAoZ2FkZ2V0X2lzX29tYXAoZnNnLT5nYWRnZXQpKQorCQkJbW9kX2RhdGEucmVsZWFzZSA9IDB4MDMwODsKKwkJZWxzZSBpZiAoZ2FkZ2V0X2lzX2xoN2E0MHgoZnNnLT5nYWRnZXQpKQorCQkJbW9kX2RhdGEucmVsZWFzZSA9IDB4MDMwOTsKKwkJZWxzZSBpZiAoZ2FkZ2V0X2lzX245NjA0KGZzZy0+Z2FkZ2V0KSkKKwkJCW1vZF9kYXRhLnJlbGVhc2UgPSAweDAzMTA7CisJCWVsc2UgaWYgKGdhZGdldF9pc19weGEyN3goZnNnLT5nYWRnZXQpKQorCQkJbW9kX2RhdGEucmVsZWFzZSA9IDB4MDMxMTsKKwkJZWxzZSBpZiAoZ2FkZ2V0X2lzX3MzYzI0MTAoZ2FkZ2V0KSkKKwkJCW1vZF9kYXRhLnJlbGVhc2UgPSAweDAzMTI7CisJCWVsc2UgaWYgKGdhZGdldF9pc19hdDkxKGZzZy0+Z2FkZ2V0KSkKKwkJCW1vZF9kYXRhLnJlbGVhc2UgPSAweDAzMTM7CisJCWVsc2UgeworCQkJV0FSTihmc2csICJjb250cm9sbGVyICclcycgbm90IHJlY29nbml6ZWRcbiIsCisJCQkJZnNnLT5nYWRnZXQtPm5hbWUpOworCQkJbW9kX2RhdGEucmVsZWFzZSA9IDB4MDM5OTsKKwkJfQorCX0KKworCXByb3QgPSBzaW1wbGVfc3RydG9sKG1vZF9kYXRhLnByb3RvY29sX3Bhcm0sIE5VTEwsIDApOworCisjaWZkZWYgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVAorCWlmIChzdHJuaWNtcChtb2RfZGF0YS50cmFuc3BvcnRfcGFybSwgIkJCQiIsIDEwKSA9PSAwKSB7CisJCTsJCS8vIFVzZSBkZWZhdWx0IHNldHRpbmcKKwl9IGVsc2UgaWYgKHN0cm5pY21wKG1vZF9kYXRhLnRyYW5zcG9ydF9wYXJtLCAiQ0IiLCAxMCkgPT0gMCkgeworCQltb2RfZGF0YS50cmFuc3BvcnRfdHlwZSA9IFVTQl9QUl9DQjsKKwkJbW9kX2RhdGEudHJhbnNwb3J0X25hbWUgPSAiQ29udHJvbC1CdWxrIjsKKwl9IGVsc2UgaWYgKHN0cm5pY21wKG1vZF9kYXRhLnRyYW5zcG9ydF9wYXJtLCAiQ0JJIiwgMTApID09IDApIHsKKwkJbW9kX2RhdGEudHJhbnNwb3J0X3R5cGUgPSBVU0JfUFJfQ0JJOworCQltb2RfZGF0YS50cmFuc3BvcnRfbmFtZSA9ICJDb250cm9sLUJ1bGstSW50ZXJydXB0IjsKKwl9IGVsc2UgeworCQlFUlJPUihmc2csICJpbnZhbGlkIHRyYW5zcG9ydDogJXNcbiIsIG1vZF9kYXRhLnRyYW5zcG9ydF9wYXJtKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHN0cm5pY21wKG1vZF9kYXRhLnByb3RvY29sX3Bhcm0sICJTQ1NJIiwgMTApID09IDAgfHwKKwkJCXByb3QgPT0gVVNCX1NDX1NDU0kpIHsKKwkJOwkJLy8gVXNlIGRlZmF1bHQgc2V0dGluZworCX0gZWxzZSBpZiAoc3RybmljbXAobW9kX2RhdGEucHJvdG9jb2xfcGFybSwgIlJCQyIsIDEwKSA9PSAwIHx8CisJCQlwcm90ID09IFVTQl9TQ19SQkMpIHsKKwkJbW9kX2RhdGEucHJvdG9jb2xfdHlwZSA9IFVTQl9TQ19SQkM7CisJCW1vZF9kYXRhLnByb3RvY29sX25hbWUgPSAiUkJDIjsKKwl9IGVsc2UgaWYgKHN0cm5pY21wKG1vZF9kYXRhLnByb3RvY29sX3Bhcm0sICI4MDIwIiwgNCkgPT0gMCB8fAorCQkJc3RybmljbXAobW9kX2RhdGEucHJvdG9jb2xfcGFybSwgIkFUQVBJIiwgMTApID09IDAgfHwKKwkJCXByb3QgPT0gVVNCX1NDXzgwMjApIHsKKwkJbW9kX2RhdGEucHJvdG9jb2xfdHlwZSA9IFVTQl9TQ184MDIwOworCQltb2RfZGF0YS5wcm90b2NvbF9uYW1lID0gIjgwMjBpIChBVEFQSSkiOworCX0gZWxzZSBpZiAoc3RybmljbXAobW9kX2RhdGEucHJvdG9jb2xfcGFybSwgIlFJQyIsIDMpID09IDAgfHwKKwkJCXByb3QgPT0gVVNCX1NDX1FJQykgeworCQltb2RfZGF0YS5wcm90b2NvbF90eXBlID0gVVNCX1NDX1FJQzsKKwkJbW9kX2RhdGEucHJvdG9jb2xfbmFtZSA9ICJRSUMtMTU3IjsKKwl9IGVsc2UgaWYgKHN0cm5pY21wKG1vZF9kYXRhLnByb3RvY29sX3Bhcm0sICJVRkkiLCAxMCkgPT0gMCB8fAorCQkJcHJvdCA9PSBVU0JfU0NfVUZJKSB7CisJCW1vZF9kYXRhLnByb3RvY29sX3R5cGUgPSBVU0JfU0NfVUZJOworCQltb2RfZGF0YS5wcm90b2NvbF9uYW1lID0gIlVGSSI7CisJfSBlbHNlIGlmIChzdHJuaWNtcChtb2RfZGF0YS5wcm90b2NvbF9wYXJtLCAiODA3MCIsIDQpID09IDAgfHwKKwkJCXByb3QgPT0gVVNCX1NDXzgwNzApIHsKKwkJbW9kX2RhdGEucHJvdG9jb2xfdHlwZSA9IFVTQl9TQ184MDcwOworCQltb2RfZGF0YS5wcm90b2NvbF9uYW1lID0gIjgwNzBpIjsKKwl9IGVsc2UgeworCQlFUlJPUihmc2csICJpbnZhbGlkIHByb3RvY29sOiAlc1xuIiwgbW9kX2RhdGEucHJvdG9jb2xfcGFybSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1vZF9kYXRhLmJ1ZmxlbiAmPSBQQUdFX0NBQ0hFX01BU0s7CisJaWYgKG1vZF9kYXRhLmJ1ZmxlbiA8PSAwKSB7CisJCUVSUk9SKGZzZywgImludmFsaWQgYnVmbGVuXG4iKTsKKwkJcmV0dXJuIC1FVE9PU01BTEw7CisJfQorI2VuZGlmIC8qIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgKi8KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgX19pbml0IGZzZ19iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IGZzZ19kZXYJCSpmc2cgPSB0aGVfZnNnOworCWludAkJCXJjOworCWludAkJCWk7CisJc3RydWN0IGx1bgkJKmN1cmx1bjsKKwlzdHJ1Y3QgdXNiX2VwCQkqZXA7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7CisJY2hhcgkJCSpwYXRoYnVmLCAqcDsKKworCWZzZy0+Z2FkZ2V0ID0gZ2FkZ2V0OworCXNldF9nYWRnZXRfZGF0YShnYWRnZXQsIGZzZyk7CisJZnNnLT5lcDAgPSBnYWRnZXQtPmVwMDsKKwlmc2ctPmVwMC0+ZHJpdmVyX2RhdGEgPSBmc2c7CisKKwlpZiAoKHJjID0gY2hlY2tfcGFyYW1ldGVycyhmc2cpKSAhPSAwKQorCQlnb3RvIG91dDsKKworCWlmIChtb2RfZGF0YS5yZW1vdmFibGUpIHsJLy8gRW5hYmxlIHRoZSBzdG9yZV94eHggYXR0cmlidXRlcworCQlkZXZfYXR0cl9yby5hdHRyLm1vZGUgPSBkZXZfYXR0cl9maWxlLmF0dHIubW9kZSA9IDA2NDQ7CisJCWRldl9hdHRyX3JvLnN0b3JlID0gc3RvcmVfcm87CisJCWRldl9hdHRyX2ZpbGUuc3RvcmUgPSBzdG9yZV9maWxlOworCX0KKworCS8qIEZpbmQgb3V0IGhvdyBtYW55IExVTnMgdGhlcmUgc2hvdWxkIGJlICovCisJaSA9IG1vZF9kYXRhLm5sdW5zOworCWlmIChpID09IDApCisJCWkgPSBtYXgobW9kX2RhdGEubnVtX2ZpbGVuYW1lcywgMSk7CisJaWYgKGkgPiBNQVhfTFVOUykgeworCQlFUlJPUihmc2csICJpbnZhbGlkIG51bWJlciBvZiBMVU5zOiAlZFxuIiwgaSk7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogQ3JlYXRlIHRoZSBMVU5zLCBvcGVuIHRoZWlyIGJhY2tpbmcgZmlsZXMsIGFuZCByZWdpc3RlciB0aGUKKwkgKiBMVU4gZGV2aWNlcyBpbiBzeXNmcy4gKi8KKwlmc2ctPmx1bnMgPSBrbWFsbG9jKGkgKiBzaXplb2Yoc3RydWN0IGx1biksIEdGUF9LRVJORUwpOworCWlmICghZnNnLT5sdW5zKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCW1lbXNldChmc2ctPmx1bnMsIDAsIGkgKiBzaXplb2Yoc3RydWN0IGx1bikpOworCWZzZy0+bmx1bnMgPSBpOworCisJZm9yIChpID0gMDsgaSA8IGZzZy0+bmx1bnM7ICsraSkgeworCQljdXJsdW4gPSAmZnNnLT5sdW5zW2ldOworCQljdXJsdW4tPnJvID0gcm9baV07CisJCWN1cmx1bi0+ZGV2LnBhcmVudCA9ICZnYWRnZXQtPmRldjsKKwkJY3VybHVuLT5kZXYuZHJpdmVyID0gJmZzZ19kcml2ZXIuZHJpdmVyOworCQlkZXZfc2V0X2RydmRhdGEoJmN1cmx1bi0+ZGV2LCBmc2cpOworCQlzbnByaW50ZihjdXJsdW4tPmRldi5idXNfaWQsIEJVU19JRF9TSVpFLAorCQkJCSIlcy1sdW4lZCIsIGdhZGdldC0+ZGV2LmJ1c19pZCwgaSk7CisKKwkJaWYgKChyYyA9IGRldmljZV9yZWdpc3RlcigmY3VybHVuLT5kZXYpKSAhPSAwKQorCQkJSU5GTyhmc2csICJmYWlsZWQgdG8gcmVnaXN0ZXIgTFVOJWQ6ICVkXG4iLCBpLCByYyk7CisJCWVsc2UgeworCQkJY3VybHVuLT5yZWdpc3RlcmVkID0gMTsKKwkJCWN1cmx1bi0+ZGV2LnJlbGVhc2UgPSBsdW5fcmVsZWFzZTsKKwkJCWRldmljZV9jcmVhdGVfZmlsZSgmY3VybHVuLT5kZXYsICZkZXZfYXR0cl9ybyk7CisJCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmN1cmx1bi0+ZGV2LCAmZGV2X2F0dHJfZmlsZSk7CisJCX0KKworCQlpZiAoZmlsZVtpXSAmJiAqZmlsZVtpXSkgeworCQkJaWYgKChyYyA9IG9wZW5fYmFja2luZ19maWxlKGN1cmx1biwgZmlsZVtpXSkpICE9IDApCisJCQkJZ290byBvdXQ7CisJCX0gZWxzZSBpZiAoIW1vZF9kYXRhLnJlbW92YWJsZSkgeworCQkJRVJST1IoZnNnLCAibm8gZmlsZSBnaXZlbiBmb3IgTFVOJWRcbiIsIGkpOworCQkJcmMgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBGaW5kIGFsbCB0aGUgZW5kcG9pbnRzIHdlIHdpbGwgdXNlICovCisJdXNiX2VwX2F1dG9jb25maWdfcmVzZXQoZ2FkZ2V0KTsKKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGdhZGdldCwgJmZzX2J1bGtfaW5fZGVzYyk7CisJaWYgKCFlcCkKKwkJZ290byBhdXRvY29uZl9mYWlsOworCWVwLT5kcml2ZXJfZGF0YSA9IGZzZzsJCS8vIGNsYWltIHRoZSBlbmRwb2ludAorCWZzZy0+YnVsa19pbiA9IGVwOworCisJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhnYWRnZXQsICZmc19idWxrX291dF9kZXNjKTsKKwlpZiAoIWVwKQorCQlnb3RvIGF1dG9jb25mX2ZhaWw7CisJZXAtPmRyaXZlcl9kYXRhID0gZnNnOwkJLy8gY2xhaW0gdGhlIGVuZHBvaW50CisJZnNnLT5idWxrX291dCA9IGVwOworCisJaWYgKHRyYW5zcG9ydF9pc19jYmkoKSkgeworCQllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGdhZGdldCwgJmZzX2ludHJfaW5fZGVzYyk7CisJCWlmICghZXApCisJCQlnb3RvIGF1dG9jb25mX2ZhaWw7CisJCWVwLT5kcml2ZXJfZGF0YSA9IGZzZzsJCS8vIGNsYWltIHRoZSBlbmRwb2ludAorCQlmc2ctPmludHJfaW4gPSBlcDsKKwl9CisKKwkvKiBGaXggdXAgdGhlIGRlc2NyaXB0b3JzICovCisJZGV2aWNlX2Rlc2MuYk1heFBhY2tldFNpemUwID0gZnNnLT5lcDAtPm1heHBhY2tldDsKKwlkZXZpY2VfZGVzYy5pZFZlbmRvciA9IGNwdV90b19sZTE2KG1vZF9kYXRhLnZlbmRvcik7CisJZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0gY3B1X3RvX2xlMTYobW9kX2RhdGEucHJvZHVjdCk7CisJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gY3B1X3RvX2xlMTYobW9kX2RhdGEucmVsZWFzZSk7CisKKwlpID0gKHRyYW5zcG9ydF9pc19jYmkoKSA/IDMgOiAyKTsJLy8gTnVtYmVyIG9mIGVuZHBvaW50cworCWludGZfZGVzYy5iTnVtRW5kcG9pbnRzID0gaTsKKwlpbnRmX2Rlc2MuYkludGVyZmFjZVN1YkNsYXNzID0gbW9kX2RhdGEucHJvdG9jb2xfdHlwZTsKKwlpbnRmX2Rlc2MuYkludGVyZmFjZVByb3RvY29sID0gbW9kX2RhdGEudHJhbnNwb3J0X3R5cGU7CisJZnNfZnVuY3Rpb25baSArIEZTX0ZVTkNUSU9OX1BSRV9FUF9FTlRSSUVTXSA9IE5VTEw7CisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKwloc19mdW5jdGlvbltpICsgSFNfRlVOQ1RJT05fUFJFX0VQX0VOVFJJRVNdID0gTlVMTDsKKworCS8qIEFzc3VtZSBlcDAgdXNlcyB0aGUgc2FtZSBtYXhwYWNrZXQgdmFsdWUgZm9yIGJvdGggc3BlZWRzICovCisJZGV2X3F1YWxpZmllci5iTWF4UGFja2V0U2l6ZTAgPSBmc2ctPmVwMC0+bWF4cGFja2V0OworCisJLyogQXNzdW1lIHRoYXQgYWxsIGVuZHBvaW50IGFkZHJlc3NlcyBhcmUgdGhlIHNhbWUgZm9yIGJvdGggc3BlZWRzICovCisJaHNfYnVsa19pbl9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPSBmc19idWxrX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKwloc19idWxrX291dF9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPSBmc19idWxrX291dF9kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJaHNfaW50cl9pbl9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPSBmc19pbnRyX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKyNlbmRpZgorCisJaWYgKGdhZGdldC0+aXNfb3RnKSB7CisJCW90Z19kZXNjLmJtQXR0cmlidXRlcyB8PSBVU0JfT1RHX0hOUCwKKwkJY29uZmlnX2Rlc2MuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKKwl9CisKKwlyYyA9IC1FTk9NRU07CisKKwkvKiBBbGxvY2F0ZSB0aGUgcmVxdWVzdCBhbmQgYnVmZmVyIGZvciBlbmRwb2ludCAwICovCisJZnNnLT5lcDByZXEgPSByZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdChmc2ctPmVwMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXEpCisJCWdvdG8gb3V0OworCXJlcS0+YnVmID0gdXNiX2VwX2FsbG9jX2J1ZmZlcihmc2ctPmVwMCwgRVAwX0JVRlNJWkUsCisJCQkmcmVxLT5kbWEsIEdGUF9LRVJORUwpOworCWlmICghcmVxLT5idWYpCisJCWdvdG8gb3V0OworCXJlcS0+Y29tcGxldGUgPSBlcDBfY29tcGxldGU7CisKKwkvKiBBbGxvY2F0ZSB0aGUgZGF0YSBidWZmZXJzICovCisJZm9yIChpID0gMDsgaSA8IE5VTV9CVUZGRVJTOyArK2kpIHsKKwkJc3RydWN0IGZzZ19idWZmaGQJKmJoID0gJmZzZy0+YnVmZmhkc1tpXTsKKworCQliaC0+YnVmID0gdXNiX2VwX2FsbG9jX2J1ZmZlcihmc2ctPmJ1bGtfaW4sIG1vZF9kYXRhLmJ1ZmxlbiwKKwkJCQkmYmgtPmRtYSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYmgtPmJ1ZikKKwkJCWdvdG8gb3V0OworCQliaC0+bmV4dCA9IGJoICsgMTsKKwl9CisJZnNnLT5idWZmaGRzW05VTV9CVUZGRVJTIC0gMV0ubmV4dCA9ICZmc2ctPmJ1ZmZoZHNbMF07CisKKwkvKiBUaGlzIHNob3VsZCByZWZsZWN0IHRoZSBhY3R1YWwgZ2FkZ2V0IHBvd2VyIHNvdXJjZSAqLworCXVzYl9nYWRnZXRfc2V0X3NlbGZwb3dlcmVkKGdhZGdldCk7CisKKwlzbnByaW50ZihtYW51ZmFjdHVyZXIsIHNpemVvZiBtYW51ZmFjdHVyZXIsICIlcyAlcyB3aXRoICVzIiwKKwkJCXN5c3RlbV91dHNuYW1lLnN5c25hbWUsIHN5c3RlbV91dHNuYW1lLnJlbGVhc2UsCisJCQlnYWRnZXQtPm5hbWUpOworCisJLyogT24gYSByZWFsIGRldmljZSwgc2VyaWFsW10gd291bGQgYmUgbG9hZGVkIGZyb20gcGVybWFuZW50CisJICogc3RvcmFnZS4gIFdlIGp1c3QgZW5jb2RlIGl0IGZyb20gdGhlIGRyaXZlciB2ZXJzaW9uIHN0cmluZy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHNlcmlhbCkgLSAyOyBpICs9IDIpIHsKKwkJdW5zaWduZWQgY2hhcgkJYyA9IERSSVZFUl9WRVJTSU9OW2kgLyAyXTsKKworCQlpZiAoIWMpCisJCQlicmVhazsKKwkJc3ByaW50Zigmc2VyaWFsW2ldLCAiJTAyWCIsIGMpOworCX0KKworCWlmICgocmMgPSBrZXJuZWxfdGhyZWFkKGZzZ19tYWluX3RocmVhZCwgZnNnLCAoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8CisJCQlDTE9ORV9GSUxFUykpKSA8IDApCisJCWdvdG8gb3V0OworCWZzZy0+dGhyZWFkX3BpZCA9IHJjOworCisJSU5GTyhmc2csIERSSVZFUl9ERVNDICIsIHZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04gIlxuIik7CisJSU5GTyhmc2csICJOdW1iZXIgb2YgTFVOcz0lZFxuIiwgZnNnLT5ubHVucyk7CisKKwlwYXRoYnVmID0ga21hbGxvYyhQQVRIX01BWCwgR0ZQX0tFUk5FTCk7CisJZm9yIChpID0gMDsgaSA8IGZzZy0+bmx1bnM7ICsraSkgeworCQljdXJsdW4gPSAmZnNnLT5sdW5zW2ldOworCQlpZiAoYmFja2luZ19maWxlX2lzX29wZW4oY3VybHVuKSkgeworCQkJcCA9IE5VTEw7CisJCQlpZiAocGF0aGJ1ZikgeworCQkJCXAgPSBkX3BhdGgoY3VybHVuLT5maWxwLT5mX2RlbnRyeSwKKwkJCQkJY3VybHVuLT5maWxwLT5mX3Zmc21udCwKKwkJCQkJcGF0aGJ1ZiwgUEFUSF9NQVgpOworCQkJCWlmIChJU19FUlIocCkpCisJCQkJCXAgPSBOVUxMOworCQkJfQorCQkJTElORk8oY3VybHVuLCAicm89JWQsIGZpbGU6ICVzXG4iLAorCQkJCQljdXJsdW4tPnJvLCAocCA/IHAgOiAiKGVycm9yKSIpKTsKKwkJfQorCX0KKwlrZnJlZShwYXRoYnVmKTsKKworCURCRyhmc2csICJ0cmFuc3BvcnQ9JXMgKHglMDJ4KVxuIiwKKwkJCW1vZF9kYXRhLnRyYW5zcG9ydF9uYW1lLCBtb2RfZGF0YS50cmFuc3BvcnRfdHlwZSk7CisJREJHKGZzZywgInByb3RvY29sPSVzICh4JTAyeClcbiIsCisJCQltb2RfZGF0YS5wcm90b2NvbF9uYW1lLCBtb2RfZGF0YS5wcm90b2NvbF90eXBlKTsKKwlEQkcoZnNnLCAiVmVuZG9ySUQ9eCUwNHgsIFByb2R1Y3RJRD14JTA0eCwgUmVsZWFzZT14JTA0eFxuIiwKKwkJCW1vZF9kYXRhLnZlbmRvciwgbW9kX2RhdGEucHJvZHVjdCwgbW9kX2RhdGEucmVsZWFzZSk7CisJREJHKGZzZywgInJlbW92YWJsZT0lZCwgc3RhbGw9JWQsIGJ1Zmxlbj0ldVxuIiwKKwkJCW1vZF9kYXRhLnJlbW92YWJsZSwgbW9kX2RhdGEuY2FuX3N0YWxsLAorCQkJbW9kX2RhdGEuYnVmbGVuKTsKKwlEQkcoZnNnLCAiSS9PIHRocmVhZCBwaWQ6ICVkXG4iLCBmc2ctPnRocmVhZF9waWQpOworCXJldHVybiAwOworCithdXRvY29uZl9mYWlsOgorCUVSUk9SKGZzZywgInVuYWJsZSB0byBhdXRvY29uZmlndXJlIGFsbCBlbmRwb2ludHNcbiIpOworCXJjID0gLUVOT1RTVVBQOworCitvdXQ6CisJZnNnLT5zdGF0ZSA9IEZTR19TVEFURV9URVJNSU5BVEVEOwkvLyBUaGUgdGhyZWFkIGlzIGRlYWQKKwlmc2dfdW5iaW5kKGdhZGdldCk7CisJY2xvc2VfYWxsX2JhY2tpbmdfZmlsZXMoZnNnKTsKKwlyZXR1cm4gcmM7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgZnNnX3N1c3BlbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgZnNnX2RldgkJKmZzZyA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOworCisJREJHKGZzZywgInN1c3BlbmRcbiIpOworCXNldF9iaXQoU1VTUEVOREVELCAmZnNnLT5hdG9taWNfYml0ZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBmc2dfcmVzdW1lKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IGZzZ19kZXYJCSpmc2cgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTsKKworCURCRyhmc2csICJyZXN1bWVcbiIpOworCWNsZWFyX2JpdChTVVNQRU5ERUQsICZmc2ctPmF0b21pY19iaXRmbGFncyk7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlcgkJZnNnX2RyaXZlciA9IHsKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKwkuc3BlZWQJCT0gVVNCX1NQRUVEX0hJR0gsCisjZWxzZQorCS5zcGVlZAkJPSBVU0JfU1BFRURfRlVMTCwKKyNlbmRpZgorCS5mdW5jdGlvbgk9IChjaGFyICopIGxvbmduYW1lLAorCS5iaW5kCQk9IGZzZ19iaW5kLAorCS51bmJpbmQJCT0gZnNnX3VuYmluZCwKKwkuZGlzY29ubmVjdAk9IGZzZ19kaXNjb25uZWN0LAorCS5zZXR1cAkJPSBmc2dfc2V0dXAsCisJLnN1c3BlbmQJPSBmc2dfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGZzZ19yZXN1bWUsCisKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJCT0gKGNoYXIgKikgc2hvcnRuYW1lLAorCQkvLyAucmVsZWFzZSA9IC4uLgorCQkvLyAuc3VzcGVuZCA9IC4uLgorCQkvLyAucmVzdW1lID0gLi4uCisJfSwKK307CisKKworc3RhdGljIGludCBfX2luaXQgZnNnX2FsbG9jKHZvaWQpCit7CisJc3RydWN0IGZzZ19kZXYJCSpmc2c7CisKKwlmc2cgPSBrbWFsbG9jKHNpemVvZiAqZnNnLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZzZykKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KGZzZywgMCwgc2l6ZW9mICpmc2cpOworCXNwaW5fbG9ja19pbml0KCZmc2ctPmxvY2spOworCWluaXRfcndzZW0oJmZzZy0+ZmlsZXNlbSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZnNnLT50aHJlYWRfd3FoKTsKKwlpbml0X2NvbXBsZXRpb24oJmZzZy0+dGhyZWFkX25vdGlmaWVyKTsKKworCXRoZV9mc2cgPSBmc2c7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgZnNnX2ZyZWUoc3RydWN0IGZzZ19kZXYgKmZzZykKK3sKKwlrZnJlZShmc2ctPmx1bnMpOworCWtmcmVlKGZzZyk7Cit9CisKKworc3RhdGljIGludCBfX2luaXQgZnNnX2luaXQodm9pZCkKK3sKKwlpbnQJCXJjOworCXN0cnVjdCBmc2dfZGV2CSpmc2c7CisKKwlpZiAoKHJjID0gZnNnX2FsbG9jKCkpICE9IDApCisJCXJldHVybiByYzsKKwlmc2cgPSB0aGVfZnNnOworCWlmICgocmMgPSB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcigmZnNnX2RyaXZlcikpICE9IDApIHsKKwkJZnNnX2ZyZWUoZnNnKTsKKwkJcmV0dXJuIHJjOworCX0KKwlzZXRfYml0KFJFR0lTVEVSRUQsICZmc2ctPmF0b21pY19iaXRmbGFncyk7CisKKwkvKiBUZWxsIHRoZSB0aHJlYWQgdG8gc3RhcnQgd29ya2luZyAqLworCWNvbXBsZXRlKCZmc2ctPnRocmVhZF9ub3RpZmllcik7CisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdChmc2dfaW5pdCk7CisKKworc3RhdGljIHZvaWQgX19leGl0IGZzZ19jbGVhbnVwKHZvaWQpCit7CisJc3RydWN0IGZzZ19kZXYJKmZzZyA9IHRoZV9mc2c7CisKKwkvKiBVbnJlZ2lzdGVyIHRoZSBkcml2ZXIgaWZmIHRoZSB0aHJlYWQgaGFzbid0IGFscmVhZHkgZG9uZSBzbyAqLworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkVHSVNURVJFRCwgJmZzZy0+YXRvbWljX2JpdGZsYWdzKSkKKwkJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcigmZnNnX2RyaXZlcik7CisKKwkvKiBXYWl0IGZvciB0aGUgdGhyZWFkIHRvIGZpbmlzaCB1cCAqLworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmZzZy0+dGhyZWFkX25vdGlmaWVyKTsKKworCWNsb3NlX2FsbF9iYWNraW5nX2ZpbGVzKGZzZyk7CisJZnNnX2ZyZWUoZnNnKTsKK30KK21vZHVsZV9leGl0KGZzZ19jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nYWRnZXRfY2hpcHMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9nYWRnZXRfY2hpcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTJlYjUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dhZGdldF9jaGlwcy5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBVU0IgZGV2aWNlIGNvbnRyb2xsZXJzIGhhdmUgbG90cyBvZiBxdWlya3MuICBVc2UgdGhlc2UgbWFjcm9zIGluCisgKiBnYWRnZXQgZHJpdmVycyBvciBvdGhlciBjb2RlIHRoYXQgbmVlZHMgdG8gZGVhbCB3aXRoIHRoZW0sIGFuZCB3aGljaAorICogYXV0b2NvbmZpZ3VyZXMgaW5zdGVhZCBvZiB1c2luZyBlYXJseSBiaW5kaW5nIHRvIHRoZSBoYXJkd2FyZS4KKyAqCisgKiBUaGlzIGNvdWxkIGV2ZW50dWFsbHkgd29yayBsaWtlIHRoZSBBUk0gbWFjaF9pc18qKCkgc3R1ZmYsIGRyaXZlbiBieQorICogc29tZSBjb25maWcgZmlsZSB0aGF0IGdldHMgdXBkYXRlZCBhcyBuZXcgaGFyZHdhcmUgaXMgc3VwcG9ydGVkLgorICoKKyAqIE5PVEU6ICBzb21lIG9mIHRoZXNlIGNvbnRyb2xsZXIgZHJpdmVycyBtYXkgbm90IGJlIGF2YWlsYWJsZSB5ZXQuCisgKi8KKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwCisjZGVmaW5lCWdhZGdldF9pc19uZXQyMjgwKGcpCSFzdHJjbXAoIm5ldDIyODAiLCAoZyktPm5hbWUpCisjZWxzZQorI2RlZmluZQlnYWRnZXRfaXNfbmV0MjI4MChnKQkwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRAorI2RlZmluZQlnYWRnZXRfaXNfZHVtbXkoZykJIXN0cmNtcCgiZHVtbXlfdWRjIiwgKGcpLT5uYW1lKQorI2Vsc2UKKyNkZWZpbmUJZ2FkZ2V0X2lzX2R1bW15KGcpCTAKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYCisjZGVmaW5lCWdhZGdldF9pc19weGEoZykJIXN0cmNtcCgicHhhMnh4X3VkYyIsIChnKS0+bmFtZSkKKyNlbHNlCisjZGVmaW5lCWdhZGdldF9pc19weGEoZykJMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9HT0tVCisjZGVmaW5lCWdhZGdldF9pc19nb2t1KGcpCSFzdHJjbXAoImdva3VfdWRjIiwgKGcpLT5uYW1lKQorI2Vsc2UKKyNkZWZpbmUJZ2FkZ2V0X2lzX2dva3UoZykJMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9TVVBFUkgKKyNkZWZpbmUJZ2FkZ2V0X2lzX3NoKGcpCQkhc3RyY21wKCJzaF91ZGMiLCAoZyktPm5hbWUpCisjZWxzZQorI2RlZmluZQlnYWRnZXRfaXNfc2goZykJCTAKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfU0ExMTAwCisjZGVmaW5lCWdhZGdldF9pc19zYTExMDAoZykJIXN0cmNtcCgic2ExMTAwX3VkYyIsIChnKS0+bmFtZSkKKyNlbHNlCisjZGVmaW5lCWdhZGdldF9pc19zYTExMDAoZykJMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYCisjZGVmaW5lCWdhZGdldF9pc19saDdhNDB4KGcpCSFzdHJjbXAoImxoN2E0MHhfdWRjIiwgKGcpLT5uYW1lKQorI2Vsc2UKKyNkZWZpbmUJZ2FkZ2V0X2lzX2xoN2E0MHgoZykJMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NUTExWFgKKyNkZWZpbmUJZ2FkZ2V0X2lzX21xMTF4eChnKQkhc3RyY21wKCJtcTExeHhfdWRjIiwgKGcpLT5uYW1lKQorI2Vsc2UKKyNkZWZpbmUJZ2FkZ2V0X2lzX21xMTF4eChnKQkwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX09NQVAKKyNkZWZpbmUJZ2FkZ2V0X2lzX29tYXAoZykJIXN0cmNtcCgib21hcF91ZGMiLCAoZyktPm5hbWUpCisjZWxzZQorI2RlZmluZQlnYWRnZXRfaXNfb21hcChnKQkwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX045NjA0CisjZGVmaW5lCWdhZGdldF9pc19uOTYwNChnKQkhc3RyY21wKCJuOTYwNF91ZGMiLCAoZyktPm5hbWUpCisjZWxzZQorI2RlZmluZQlnYWRnZXRfaXNfbjk2MDQoZykJMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1gKKyNkZWZpbmUJZ2FkZ2V0X2lzX3B4YTI3eChnKQkhc3RyY21wKCJweGEyN3hfdWRjIiwgKGcpLT5uYW1lKQorI2Vsc2UKKyNkZWZpbmUJZ2FkZ2V0X2lzX3B4YTI3eChnKQkwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAKKyNkZWZpbmUgZ2FkZ2V0X2lzX3MzYzI0MTAoZykgICAgIXN0cmNtcCgiczNjMjQxMF91ZGMiLCAoZyktPm5hbWUpCisjZWxzZQorI2RlZmluZSBnYWRnZXRfaXNfczNjMjQxMChnKSAgICAwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0FUOTEKKyNkZWZpbmUgZ2FkZ2V0X2lzX2F0OTEoZykJIXN0cmNtcCgiYXQ5MV91ZGMiLCAoZyktPm5hbWUpCisjZWxzZQorI2RlZmluZSBnYWRnZXRfaXNfYXQ5MShnKQkwCisjZW5kaWYKKworLy8gQ09ORklHX1VTQl9HQURHRVRfU1gyCisvLyBDT05GSUdfVVNCX0dBREdFVF9BVTFYMDAKKy8vIC4uLgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNWRiN2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYwpAQCAtMCwwICsxLDE5ODQgQEAKKy8qCisgKiBUb3NoaWJhIFRDODZDMDAxICgiR29rdS1TIikgVVNCIERldmljZSBDb250cm9sbGVyIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIExpbmVvCisgKiAgICAgIGJ5IFN0dWFydCBMeW5uZSwgVG9tIFJ1c2h3b3J0aCwgYW5kIEJydWNlIEJhbGRlbgorICogQ29weXJpZ2h0IChDKSAyMDAyIFRvc2hpYmEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwMyBNb250YVZpc3RhIFNvZnR3YXJlIChzb3VyY2VAbXZpc3RhLmNvbSkKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisvKgorICogVGhpcyBkZXZpY2UgaGFzIGVwMCBhbmQgdGhyZWUgc2VtaS1jb25maWd1cmFibGUgYnVsay9pbnRlcnJ1cHQgZW5kcG9pbnRzLgorICoKKyAqICAtIEVuZHBvaW50IG51bWJlcmluZyBpcyBmaXhlZDogZXB7MSwyLDN9LWJ1bGsKKyAqICAtIEdhZGdldCBkcml2ZXJzIGNhbiBjaG9vc2UgZXAgbWF4cGFja2V0ICg4LzE2LzMyLzY0KQorICogIC0gR2FkZ2V0IGRyaXZlcnMgY2FuIGNob29zZSBkaXJlY3Rpb24gKElOLCBPVVQpCisgKiAgLSBETUEgd29ya3Mgd2l0aCBlcDEgKE9VVCB0cmFuc2ZlcnMpIGFuZCBlcDIgKElOIHRyYW5zZmVycykuCisgKi8KKworI3VuZGVmIERFQlVHCisvLyAjZGVmaW5lCVZFUkJPU0UJCS8qIGV4dHJhIGRlYnVnIG1lc3NhZ2VzIChzdWNjZXNzIHRvbykgKi8KKy8vICNkZWZpbmUJVVNCX1RSQUNFCS8qIHBhY2tldC1sZXZlbCBzdWNjZXNzIG1lc3NhZ2VzICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl9jaDkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfZ2FkZ2V0Lmg+CisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKKworI2luY2x1ZGUgImdva3VfdWRjLmgiCisKKyNkZWZpbmUJRFJJVkVSX0RFU0MJCSJUQzg2QzAwMSBVU0IgRGV2aWNlIENvbnRyb2xsZXIiCisjZGVmaW5lCURSSVZFUl9WRVJTSU9OCQkiMzAtT2N0IDIwMDMiCisKKyNkZWZpbmUJRE1BX0FERFJfSU5WQUxJRAkofihkbWFfYWRkcl90KTApCisKK3N0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9uYW1lIFtdID0gImdva3VfdWRjIjsKK3N0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9kZXNjIFtdID0gRFJJVkVSX0RFU0M7CisKK01PRFVMRV9BVVRIT1IoInNvdXJjZUBtdmlzdGEuY29tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisKKy8qCisgKiBJTiBkbWEgYmVoYXZlcyBvayB1bmRlciB0ZXN0aW5nLCB0aG91Z2ggdGhlIElOLWRtYSBhYm9ydCBwYXRocyBkb24ndAorICogc2VlbSB0byBiZWhhdmUgcXVpdGUgYXMgZXhwZWN0ZWQuICBVc2VkIGJ5IGRlZmF1bHQuCisgKgorICogT1VUIGRtYSBkb2N1bWVudHMgZGVzaWduIHByb2JsZW1zIGhhbmRsaW5nIHRoZSBjb21tb24gInNob3J0IHBhY2tldCIKKyAqIHRyYW5zZmVyIHRlcm1pbmF0aW9uIHBvbGljeTsgaXQgY291bGRuJ3QgZW5hYmxlZCBieSBkZWZhdWx0LCBldmVuCisgKiBpZiB0aGUgT1VULWRtYSBhYm9ydCBwcm9ibGVtcyBoYWQgYSByZXNvbHV0aW9uLgorICovCitzdGF0aWMgdW5zaWduZWQgdXNlX2RtYSA9IDE7CisKKyNpZiAwCisvLyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorLyogIm1vZHByb2JlIGdva3VfdWRjIHVzZV9kbWE9MSIgZXRjCisgKgkwIHRvIGRpc2FibGUgZG1hCisgKgkxIHRvIHVzZSBJTiBkbWEgb25seSAobm9ybWFsIG9wZXJhdGlvbikKKyAqCTIgdG8gdXNlIElOIGFuZCBPVVQgZG1hCisgKi8KK21vZHVsZV9wYXJhbSh1c2VfZG1hLCB1aW50LCBTX0lSVUdPKTsKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBudWtlKHN0cnVjdCBnb2t1X2VwICosIGludCBzdGF0dXMpOworCitzdGF0aWMgaW5saW5lIHZvaWQKK2NvbW1hbmQoc3RydWN0IGdva3VfdWRjX3JlZ3MgX19pb21lbSAqcmVncywgaW50IGNvbW1hbmQsIHVuc2lnbmVkIGVwbnVtKQoreworCXdyaXRlbChDT01NQU5EX0VQKGVwbnVtKSB8IGNvbW1hbmQsICZyZWdzLT5Db21tYW5kKTsKKwl1ZGVsYXkoMzAwKTsKK30KKworc3RhdGljIGludAorZ29rdV9lcF9lbmFibGUoc3RydWN0IHVzYl9lcCAqX2VwLCBjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJc3RydWN0IGdva3VfdWRjCSpkZXY7CisJc3RydWN0IGdva3VfZXAJKmVwOworCXUzMgkJbW9kZTsKKwl1MTYJCW1heDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgZ29rdV9lcCwgZXApOworCWlmICghX2VwIHx8ICFkZXNjIHx8IGVwLT5kZXNjCisJCQl8fCBkZXNjLT5iRGVzY3JpcHRvclR5cGUgIT0gVVNCX0RUX0VORFBPSU5UKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlkZXYgPSBlcC0+ZGV2OworCWlmIChlcCA9PSAmZGV2LT5lcFswXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFkZXYtPmRyaXZlciB8fCBkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJcmV0dXJuIC1FU0hVVERPV047CisJaWYgKGVwLT5udW0gIT0gKGRlc2MtPmJFbmRwb2ludEFkZHJlc3MgJiAweDBmKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGRlc2MtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSB7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLOgorCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoKHJlYWRsKGVwLT5yZWdfc3RhdHVzKSAmIEVQeFNUQVRVU19FUF9NQVNLKQorCQkJIT0gRVB4U1RBVFVTX0VQX0lOVkFMSUQpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBlbmFibGluZyB0aGUgbm8tdG9nZ2xlIGludGVycnVwdCBtb2RlIHdvdWxkIG5lZWQgYW4gYXBpIGhvb2sgKi8KKwltb2RlID0gMDsKKwltYXggPSBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKCZkZXNjLT53TWF4UGFja2V0U2l6ZSkpOworCXN3aXRjaCAobWF4KSB7CisJY2FzZSA2NDoJbW9kZSsrOworCWNhc2UgMzI6CW1vZGUrKzsKKwljYXNlIDE2Ogltb2RlKys7CisJY2FzZSA4OgkJbW9kZSA8PD0gMzsKKwkJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwltb2RlIHw9IDIgPDwgMTsJCS8qIGJ1bGssIG9yIGludHItd2l0aC10b2dnbGUgKi8KKworCS8qIGVwMS9lcDIgZG1hIGRpcmVjdGlvbiBpcyBjaG9zZW4gZWFybHk7IGl0IHdvcmtzIGluIHRoZSBvdGhlcgorCSAqIGRpcmVjdGlvbiwgd2l0aCBwaW8uICBiZSBjYXV0aW91cyB3aXRoIG91dC1kbWEuCisJICovCisJZXAtPmlzX2luID0gKFVTQl9ESVJfSU4gJiBkZXNjLT5iRW5kcG9pbnRBZGRyZXNzKSAhPSAwOworCWlmIChlcC0+aXNfaW4pIHsKKwkJbW9kZSB8PSAxOworCQllcC0+ZG1hID0gKHVzZV9kbWEgIT0gMCkgJiYgKGVwLT5udW0gPT0gVURDX01TVFJEX0VORFBPSU5UKTsKKwl9IGVsc2UgeworCQllcC0+ZG1hID0gKHVzZV9kbWEgPT0gMikgJiYgKGVwLT5udW0gPT0gVURDX01TVFdSX0VORFBPSU5UKTsKKwkJaWYgKGVwLT5kbWEpCisJCQlEQkcoZGV2LCAiJXMgb3V0LWRtYSBoaWRlcyBzaG9ydCBwYWNrZXRzXG4iLAorCQkJCWVwLT5lcC5uYW1lKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCisJLyogZXAxIGFuZCBlcDIgY2FuIGRvIGRvdWJsZSBidWZmZXJpbmcgYW5kL29yIGRtYSAqLworCWlmIChlcC0+bnVtIDwgMykgeworCQlzdHJ1Y3QgZ29rdV91ZGNfcmVncyBfX2lvbWVtCSpyZWdzID0gZXAtPmRldi0+cmVnczsKKwkJdTMyCQkJCXRtcDsKKworCQkvKiBkb3VibGUgYnVmZmVyIGV4Y2VwdCAoZm9yIG5vdykgd2l0aCBwaW8gaW4gKi8KKwkJdG1wID0gKChlcC0+ZG1hIHx8ICFlcC0+aXNfaW4pCisJCQkJPyAweDEwCS8qIGRvdWJsZSBidWZmZXJlZCAqLworCQkJCTogMHgxMQkvKiBzaW5nbGUgYnVmZmVyICovCisJCQkpIDw8IGVwLT5udW07CisJCXRtcCB8PSByZWFkbCgmcmVncy0+RVB4U2luZ2xlKTsKKwkJd3JpdGVsKHRtcCwgJnJlZ3MtPkVQeFNpbmdsZSk7CisKKwkJdG1wID0gKGVwLT5kbWEgPyAweDEwLypkbWEqLyA6IDB4MTEvKnBpbyovKSA8PCBlcC0+bnVtOworCQl0bXAgfD0gcmVhZGwoJnJlZ3MtPkVQeEJDUyk7CisJCXdyaXRlbCh0bXAsICZyZWdzLT5FUHhCQ1MpOworCX0KKwl3cml0ZWwobW9kZSwgZXAtPnJlZ19tb2RlKTsKKwljb21tYW5kKGVwLT5kZXYtPnJlZ3MsIENPTU1BTkRfUkVTRVQsIGVwLT5udW0pOworCWVwLT5lcC5tYXhwYWNrZXQgPSBtYXg7CisJZXAtPnN0b3BwZWQgPSAwOworCWVwLT5kZXNjID0gZGVzYzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CisKKwlEQkcoZGV2LCAiZW5hYmxlICVzICVzICVzIG1heHBhY2tldCAldVxuIiwgZXAtPmVwLm5hbWUsCisJCWVwLT5pc19pbiA/ICJJTiIgOiAiT1VUIiwKKwkJZXAtPmRtYSA/ICJkbWEiIDogInBpbyIsCisJCW1heCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXBfcmVzZXQoc3RydWN0IGdva3VfdWRjX3JlZ3MgX19pb21lbSAqcmVncywgc3RydWN0IGdva3VfZXAgKmVwKQoreworCXN0cnVjdCBnb2t1X3VkYwkJKmRldiA9IGVwLT5kZXY7CisKKwlpZiAocmVncykgeworCQljb21tYW5kKHJlZ3MsIENPTU1BTkRfSU5WQUxJRCwgZXAtPm51bSk7CisJCWlmIChlcC0+bnVtKSB7CisJCQlpZiAoZXAtPm51bSA9PSBVRENfTVNUV1JfRU5EUE9JTlQpCisJCQkJZGV2LT5pbnRfZW5hYmxlICY9IH4oSU5UX01TVFdSRU5ECisJCQkJCQkJfElOVF9NU1RXUlRNT1VUKTsKKwkJCWVsc2UgaWYgKGVwLT5udW0gPT0gVURDX01TVFJEX0VORFBPSU5UKQorCQkJCWRldi0+aW50X2VuYWJsZSAmPSB+SU5UX01TVFJERU5EOworCQkJZGV2LT5pbnRfZW5hYmxlICY9IH5JTlRfRVB4REFUQVNFVCAoZXAtPm51bSk7CisJCX0gZWxzZQorCQkJZGV2LT5pbnRfZW5hYmxlICY9IH5JTlRfRVAwOworCQl3cml0ZWwoZGV2LT5pbnRfZW5hYmxlLCAmcmVncy0+aW50X2VuYWJsZSk7CisJCXJlYWRsKCZyZWdzLT5pbnRfZW5hYmxlKTsKKwkJaWYgKGVwLT5udW0gPCAzKSB7CisJCQlzdHJ1Y3QgZ29rdV91ZGNfcmVncyBfX2lvbWVtCSpyID0gZXAtPmRldi0+cmVnczsKKwkJCXUzMgkJCQl0bXA7CisKKwkJCXRtcCA9IHJlYWRsKCZyLT5FUHhTaW5nbGUpOworCQkJdG1wICY9IH4oMHgxMSA8PCBlcC0+bnVtKTsKKwkJCXdyaXRlbCh0bXAsICZyLT5FUHhTaW5nbGUpOworCisJCQl0bXAgPSByZWFkbCgmci0+RVB4QkNTKTsKKwkJCXRtcCAmPSB+KDB4MTEgPDwgZXAtPm51bSk7CisJCQl3cml0ZWwodG1wLCAmci0+RVB4QkNTKTsKKwkJfQorCQkvKiByZXNldCBkbWEgaW4gY2FzZSB3ZSdyZSBzdGlsbCB1c2luZyBpdCAqLworCQlpZiAoZXAtPmRtYSkgeworCQkJdTMyCW1hc3RlcjsKKworCQkJbWFzdGVyID0gcmVhZGwoJnJlZ3MtPmRtYV9tYXN0ZXIpICYgTVNUX1JXX0JJVFM7CisJCQlpZiAoZXAtPm51bSA9PSBVRENfTVNUV1JfRU5EUE9JTlQpIHsKKwkJCQltYXN0ZXIgJj0gfk1TVF9XX0JJVFM7CisJCQkJbWFzdGVyIHw9IE1TVF9XUl9SRVNFVDsKKwkJCX0gZWxzZSB7CisJCQkJbWFzdGVyICY9IH5NU1RfUl9CSVRTOworCQkJCW1hc3RlciB8PSBNU1RfUkRfUkVTRVQ7CisJCQl9CisJCQl3cml0ZWwobWFzdGVyLCAmcmVncy0+ZG1hX21hc3Rlcik7CisJCX0KKwl9CisKKwllcC0+ZXAubWF4cGFja2V0ID0gTUFYX0ZJRk9fU0laRTsKKwllcC0+ZGVzYyA9IE5VTEw7CisJZXAtPnN0b3BwZWQgPSAxOworCWVwLT5pcnFzID0gMDsKKwllcC0+ZG1hID0gMDsKK30KKworc3RhdGljIGludCBnb2t1X2VwX2Rpc2FibGUoc3RydWN0IHVzYl9lcCAqX2VwKQoreworCXN0cnVjdCBnb2t1X2VwCSplcDsKKwlzdHJ1Y3QgZ29rdV91ZGMJKmRldjsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgZ29rdV9lcCwgZXApOworCWlmICghX2VwIHx8ICFlcC0+ZGVzYykKKwkJcmV0dXJuIC1FTk9ERVY7CisJZGV2ID0gZXAtPmRldjsKKwlpZiAoZGV2LT5lcDBzdGF0ZSA9PSBFUDBfU1VTUEVORCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCVZEQkcoZGV2LCAiZGlzYWJsZSAlc1xuIiwgX2VwLT5uYW1lKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwludWtlKGVwLCAtRVNIVVRET1dOKTsKKwllcF9yZXNldChkZXYtPnJlZ3MsIGVwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHVzYl9yZXF1ZXN0ICoKK2dva3VfYWxsb2NfcmVxdWVzdChzdHJ1Y3QgdXNiX2VwICpfZXAsIGludCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IGdva3VfcmVxdWVzdAkqcmVxOworCisJaWYgKCFfZXApCisJCXJldHVybiBOVUxMOworCXJlcSA9IGttYWxsb2Moc2l6ZW9mICpyZXEsIGdmcF9mbGFncyk7CisJaWYgKCFyZXEpCisJCXJldHVybiBOVUxMOworCisJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mICpyZXEpOworCXJlcS0+cmVxLmRtYSA9IERNQV9BRERSX0lOVkFMSUQ7CisJSU5JVF9MSVNUX0hFQUQoJnJlcS0+cXVldWUpOworCXJldHVybiAmcmVxLT5yZXE7Cit9CisKK3N0YXRpYyB2b2lkCitnb2t1X2ZyZWVfcmVxdWVzdChzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSkKK3sKKwlzdHJ1Y3QgZ29rdV9yZXF1ZXN0CSpyZXE7CisKKwlpZiAoIV9lcCB8fCAhX3JlcSkKKwkJcmV0dXJuOworCisJcmVxID0gY29udGFpbmVyX29mKF9yZXEsIHN0cnVjdCBnb2t1X3JlcXVlc3QsIHJlcSk7CisJV0FSTl9PTighbGlzdF9lbXB0eSgmcmVxLT5xdWV1ZSkpOworCWtmcmVlKHJlcSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyN1bmRlZiBVU0VfS01BTExPQworCisvKiBtYW55IGNvbW1vbiBwbGF0Zm9ybXMgaGF2ZSBkbWEtY29oZXJlbnQgY2FjaGVzLCB3aGljaCBtZWFucyB0aGF0IGl0J3MKKyAqIHNhZmUgdG8gdXNlIGttYWxsb2MoKSBtZW1vcnkgZm9yIGFsbCBpL28gYnVmZmVycyB3aXRob3V0IHVzaW5nIGFueQorICogY2FjaGUgZmx1c2hpbmcgY2FsbHMuICAodW5sZXNzIHlvdSdyZSB0cnlpbmcgdG8gc2hhcmUgY2FjaGUgbGluZXMKKyAqIGJldHdlZW4gZG1hIGFuZCBub24tZG1hIGFjdGl2aXRpZXMsIHdoaWNoIGlzIGEgc2xvdyBpZGVhIGluIGFueSBjYXNlLikKKyAqCisgKiBvdGhlciBwbGF0Zm9ybXMgbmVlZCBtb3JlIGNhcmUsIHdpdGggMi42IGhhdmluZyBhIG1vZGVyYXRlbHkgZ2VuZXJhbAorICogc29sdXRpb24gZXhjZXB0IGZvciB0aGUgY29tbW9uICJidWZmZXIgaXMgc21hbGxlciB0aGFuIGEgcGFnZSIgY2FzZS4KKyAqLworI2lmCWRlZmluZWQoQ09ORklHX1g4NikKKyNkZWZpbmUgVVNFX0tNQUxMT0MKKworI2VsaWYJZGVmaW5lZChDT05GSUdfTUlQUykgJiYgIWRlZmluZWQoQ09ORklHX05PTkNPSEVSRU5UX0lPKQorI2RlZmluZSBVU0VfS01BTExPQworCisjZWxpZglkZWZpbmVkKENPTkZJR19QUEMpICYmICFkZWZpbmVkKENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUpCisjZGVmaW5lIFVTRV9LTUFMTE9DCisKKyNlbmRpZgorCisvKiBhbGxvY2F0aW5nIGJ1ZmZlcnMgdGhpcyB3YXkgZWxpbWluYXRlcyBkbWEgbWFwcGluZyBvdmVyaGVhZCwgd2hpY2gKKyAqIG9uIHNvbWUgcGxhdGZvcm1zIHdpbGwgbWVhbiBlbGltaW5hdGluZyBhIHBlci1pbyBidWZmZXIgY29weS4gIHdpdGgKKyAqIHNvbWUga2luZHMgb2Ygc3lzdGVtIGNhY2hlcywgZnVydGhlciB0d2Vha3MgbWF5IHN0aWxsIGJlIG5lZWRlZC4KKyAqLworc3RhdGljIHZvaWQgKgorZ29rdV9hbGxvY19idWZmZXIoc3RydWN0IHVzYl9lcCAqX2VwLCB1bnNpZ25lZCBieXRlcywKKwkJCWRtYV9hZGRyX3QgKmRtYSwgaW50ICBnZnBfZmxhZ3MpCit7CisJdm9pZAkJKnJldHZhbDsKKwlzdHJ1Y3QgZ29rdV9lcAkqZXA7CisKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBnb2t1X2VwLCBlcCk7CisJaWYgKCFfZXApCisJCXJldHVybiBOVUxMOworCSpkbWEgPSBETUFfQUREUl9JTlZBTElEOworCisjaWYJZGVmaW5lZChVU0VfS01BTExPQykKKwlyZXR2YWwgPSBrbWFsbG9jKGJ5dGVzLCBnZnBfZmxhZ3MpOworCWlmIChyZXR2YWwpCisJCSpkbWEgPSB2aXJ0X3RvX3BoeXMocmV0dmFsKTsKKyNlbHNlCisJaWYgKGVwLT5kbWEpIHsKKwkJLyogdGhlIG1haW4gcHJvYmxlbSB3aXRoIHRoaXMgY2FsbCBpcyB0aGF0IGl0IHdhc3RlcyBtZW1vcnkKKwkJICogb24gdHlwaWNhbCAxL04gcGFnZSBhbGxvY2F0aW9uczogaXQgYWxsb2NhdGVzIDEtTiBwYWdlcy4KKwkJICovCisjd2FybmluZyBVc2luZyBkbWFfYWxsb2NfY29oZXJlbnQgZXZlbiB3aXRoIGJ1ZmZlcnMgc21hbGxlciB0aGFuIGEgcGFnZS4KKwkJcmV0dmFsID0gZG1hX2FsbG9jX2NvaGVyZW50KCZlcC0+ZGV2LT5wZGV2LT5kZXYsCisJCQkJYnl0ZXMsIGRtYSwgZ2ZwX2ZsYWdzKTsKKwl9IGVsc2UKKwkJcmV0dmFsID0ga21hbGxvYyhieXRlcywgZ2ZwX2ZsYWdzKTsKKyNlbmRpZgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkCitnb2t1X2ZyZWVfYnVmZmVyKHN0cnVjdCB1c2JfZXAgKl9lcCwgdm9pZCAqYnVmLCBkbWFfYWRkcl90IGRtYSwgdW5zaWduZWQgYnl0ZXMpCit7CisJLyogZnJlZSBtZW1vcnkgaW50byB0aGUgcmlnaHQgYWxsb2NhdG9yICovCisjaWZuZGVmCVVTRV9LTUFMTE9DCisJaWYgKGRtYSAhPSBETUFfQUREUl9JTlZBTElEKSB7CisJCXN0cnVjdCBnb2t1X2VwCSplcDsKKworCQllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBnb2t1X2VwLCBlcCk7CisJCWlmICghX2VwKQorCQkJcmV0dXJuOworCQlkbWFfZnJlZV9jb2hlcmVudCgmZXAtPmRldi0+cGRldi0+ZGV2LCBieXRlcywgYnVmLCBkbWEpOworCX0gZWxzZQorI2VuZGlmCisJCWtmcmVlIChidWYpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZAorZG9uZShzdHJ1Y3QgZ29rdV9lcCAqZXAsIHN0cnVjdCBnb2t1X3JlcXVlc3QgKnJlcSwgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgZ29rdV91ZGMJCSpkZXY7CisJdW5zaWduZWQJCXN0b3BwZWQgPSBlcC0+c3RvcHBlZDsKKworCWxpc3RfZGVsX2luaXQoJnJlcS0+cXVldWUpOworCisJaWYgKGxpa2VseShyZXEtPnJlcS5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSkKKwkJcmVxLT5yZXEuc3RhdHVzID0gc3RhdHVzOworCWVsc2UKKwkJc3RhdHVzID0gcmVxLT5yZXEuc3RhdHVzOworCisJZGV2ID0gZXAtPmRldjsKKwlpZiAocmVxLT5tYXBwZWQpIHsKKwkJcGNpX3VubWFwX3NpbmdsZShkZXYtPnBkZXYsIHJlcS0+cmVxLmRtYSwgcmVxLT5yZXEubGVuZ3RoLAorCQkJZXAtPmlzX2luID8gUENJX0RNQV9UT0RFVklDRSA6IFBDSV9ETUFfRlJPTURFVklDRSk7CisJCXJlcS0+cmVxLmRtYSA9IERNQV9BRERSX0lOVkFMSUQ7CisJCXJlcS0+bWFwcGVkID0gMDsKKwl9CisKKyNpZm5kZWYgVVNCX1RSQUNFCisJaWYgKHN0YXR1cyAmJiBzdGF0dXMgIT0gLUVTSFVURE9XTikKKyNlbmRpZgorCQlWREJHKGRldiwgImNvbXBsZXRlICVzIHJlcSAlcCBzdGF0ICVkIGxlbiAldS8ldVxuIiwKKwkJCWVwLT5lcC5uYW1lLCAmcmVxLT5yZXEsIHN0YXR1cywKKwkJCXJlcS0+cmVxLmFjdHVhbCwgcmVxLT5yZXEubGVuZ3RoKTsKKworCS8qIGRvbid0IG1vZGlmeSBxdWV1ZSBoZWFkcyBkdXJpbmcgY29tcGxldGlvbiBjYWxsYmFjayAqLworCWVwLT5zdG9wcGVkID0gMTsKKwlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsKKwlyZXEtPnJlcS5jb21wbGV0ZSgmZXAtPmVwLCAmcmVxLT5yZXEpOworCXNwaW5fbG9jaygmZGV2LT5sb2NrKTsKKwllcC0+c3RvcHBlZCA9IHN0b3BwZWQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgaW50Cit3cml0ZV9wYWNrZXQodTMyIF9faW9tZW0gKmZpZm8sIHU4ICpidWYsIHN0cnVjdCBnb2t1X3JlcXVlc3QgKnJlcSwgdW5zaWduZWQgbWF4KQoreworCXVuc2lnbmVkCWxlbmd0aCwgY291bnQ7CisKKwlsZW5ndGggPSBtaW4ocmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsLCBtYXgpOworCXJlcS0+cmVxLmFjdHVhbCArPSBsZW5ndGg7CisKKwljb3VudCA9IGxlbmd0aDsKKwl3aGlsZSAobGlrZWx5KGNvdW50LS0pKQorCQl3cml0ZWwoKmJ1ZisrLCBmaWZvKTsKKwlyZXR1cm4gbGVuZ3RoOworfQorCisvLyByZXR1cm46ICAwID0gc3RpbGwgcnVubmluZywgMSA9IGNvbXBsZXRlZCwgbmVnYXRpdmUgPSBlcnJubworc3RhdGljIGludCB3cml0ZV9maWZvKHN0cnVjdCBnb2t1X2VwICplcCwgc3RydWN0IGdva3VfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBnb2t1X3VkYwkqZGV2ID0gZXAtPmRldjsKKwl1MzIJCXRtcDsKKwl1OAkJKmJ1ZjsKKwl1bnNpZ25lZAljb3VudDsKKwlpbnQJCWlzX2xhc3Q7CisKKwl0bXAgPSByZWFkbCgmZGV2LT5yZWdzLT5EYXRhU2V0KTsKKwlidWYgPSByZXEtPnJlcS5idWYgKyByZXEtPnJlcS5hY3R1YWw7CisJcHJlZmV0Y2goYnVmKTsKKworCWRldiA9IGVwLT5kZXY7CisJaWYgKHVubGlrZWx5KGVwLT5udW0gPT0gMCAmJiBkZXYtPmVwMHN0YXRlICE9IEVQMF9JTikpCisJCXJldHVybiAtRUwySExUOworCisJLyogTk9URTogIGp1c3Qgc2luZ2xlLWJ1ZmZlcmVkIFBJTy1JTiBmb3Igbm93LiAgKi8KKwlpZiAodW5saWtlbHkoKHRtcCAmIERBVEFTRVRfQShlcC0+bnVtKSkgIT0gMCkpCisJCXJldHVybiAwOworCisJLyogY2xlYXIgb3VyICJwYWNrZXQgYXZhaWxhYmxlIiBpcnEgKi8KKwlpZiAoZXAtPm51bSAhPSAwKQorCQl3cml0ZWwofklOVF9FUHhEQVRBU0VUKGVwLT5udW0pLCAmZGV2LT5yZWdzLT5pbnRfc3RhdHVzKTsKKworCWNvdW50ID0gd3JpdGVfcGFja2V0KGVwLT5yZWdfZmlmbywgYnVmLCByZXEsIGVwLT5lcC5tYXhwYWNrZXQpOworCisJLyogbGFzdCBwYWNrZXQgb2Z0ZW4gc2hvcnQgKHNvbWV0aW1lcyBhIHpscCwgZXNwZWNpYWxseSBvbiBlcDApICovCisJaWYgKHVubGlrZWx5KGNvdW50ICE9IGVwLT5lcC5tYXhwYWNrZXQpKSB7CisJCXdyaXRlbCh+KDE8PGVwLT5udW0pLCAmZGV2LT5yZWdzLT5FT1ApOworCQlpZiAoZXAtPm51bSA9PSAwKSB7CisJCQlkZXYtPmVwWzBdLnN0b3BwZWQgPSAxOworCQkJZGV2LT5lcDBzdGF0ZSA9IEVQMF9TVEFUVVM7CisJCX0KKwkJaXNfbGFzdCA9IDE7CisJfSBlbHNlIHsKKwkJaWYgKGxpa2VseShyZXEtPnJlcS5sZW5ndGggIT0gcmVxLT5yZXEuYWN0dWFsKQorCQkJCXx8IHJlcS0+cmVxLnplcm8pCisJCQlpc19sYXN0ID0gMDsKKwkJZWxzZQorCQkJaXNfbGFzdCA9IDE7CisJfQorI2lmIDAJCS8qIHByaW50ayBzZWVtZWQgdG8gdHJhc2ggaXNfbGFzdC4uLiovCisvLyNpZmRlZiBVU0JfVFJBQ0UKKwlWREJHKGRldiwgIndyb3RlICVzICV1IGJ5dGVzJXMgSU4gJXUgbGVmdCAlcFxuIiwKKwkJZXAtPmVwLm5hbWUsIGNvdW50LCBpc19sYXN0ID8gIi9sYXN0IiA6ICIiLAorCQlyZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWwsIHJlcSk7CisjZW5kaWYKKworCS8qIHJlcXVlc3RzIGNvbXBsZXRlIHdoZW4gYWxsIElOIGRhdGEgaXMgaW4gdGhlIEZJRk8sCisJICogb3Igc29tZXRpbWVzIGxhdGVyLCBpZiBhIHpscCB3YXMgbmVlZGVkLgorCSAqLworCWlmIChpc19sYXN0KSB7CisJCWRvbmUoZXAsIHJlcSwgMCk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfZmlmbyhzdHJ1Y3QgZ29rdV9lcCAqZXAsIHN0cnVjdCBnb2t1X3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgZ29rdV91ZGNfcmVncyBfX2lvbWVtCSpyZWdzOworCXUzMgkJCQlzaXplLCBzZXQ7CisJdTgJCQkJKmJ1ZjsKKwl1bnNpZ25lZAkJCWJ1ZmZlcnNwYWNlLCBpc19zaG9ydCwgZGJ1ZmY7CisKKwlyZWdzID0gZXAtPmRldi0+cmVnczsKK3RvcDoKKwlidWYgPSByZXEtPnJlcS5idWYgKyByZXEtPnJlcS5hY3R1YWw7CisJcHJlZmV0Y2h3KGJ1Zik7CisKKwlpZiAodW5saWtlbHkoZXAtPm51bSA9PSAwICYmIGVwLT5kZXYtPmVwMHN0YXRlICE9IEVQMF9PVVQpKQorCQlyZXR1cm4gLUVMMkhMVDsKKworCWRidWZmID0gKGVwLT5udW0gPT0gMSB8fCBlcC0+bnVtID09IDIpOworCWRvIHsKKwkJLyogYWNrIGRhdGFzZXQgaXJxIG1hdGNoaW5nIHRoZSBzdGF0dXMgd2UnbGwgaGFuZGxlICovCisJCWlmIChlcC0+bnVtICE9IDApCisJCQl3cml0ZWwofklOVF9FUHhEQVRBU0VUKGVwLT5udW0pLCAmcmVncy0+aW50X3N0YXR1cyk7CisKKwkJc2V0ID0gcmVhZGwoJnJlZ3MtPkRhdGFTZXQpICYgREFUQVNFVF9BQihlcC0+bnVtKTsKKwkJc2l6ZSA9IHJlYWRsKCZyZWdzLT5FUHhTaXplTEFbZXAtPm51bV0pOworCQlidWZmZXJzcGFjZSA9IHJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbDsKKworCQkvKiB1c3VhbGx5IGRvIG5vdGhpbmcgd2l0aG91dCBhbiBPVVQgcGFja2V0ICovCisJCWlmIChsaWtlbHkoZXAtPm51bSAhPSAwIHx8IGJ1ZmZlcnNwYWNlICE9IDApKSB7CisJCQlpZiAodW5saWtlbHkoc2V0ID09IDApKQorCQkJCWJyZWFrOworCQkJLyogdXNlIGVwMS9lcDIgZG91YmxlLWJ1ZmZlcmluZyBmb3IgT1VUICovCisJCQlpZiAoIShzaXplICYgUEFDS0VUX0FDVElWRSkpCisJCQkJc2l6ZSA9IHJlYWRsKCZyZWdzLT5FUHhTaXplTEJbZXAtPm51bV0pOworCQkJaWYgKCEoc2l6ZSAmIFBBQ0tFVF9BQ1RJVkUpKSAJLy8gImNhbid0IGhhcHBlbiIKKwkJCQlicmVhazsKKwkJCXNpemUgJj0gREFUQVNJWkU7CS8qIEVQeFNpemVIID09IDAgKi8KKworCQkvKiBlcDBvdXQgbm8tb3V0LWRhdGEgY2FzZSBmb3Igc2V0X2NvbmZpZywgZXRjICovCisJCX0gZWxzZQorCQkJc2l6ZSA9IDA7CisKKwkJLyogcmVhZCBhbGwgYnl0ZXMgZnJvbSB0aGlzIHBhY2tldCAqLworCQlyZXEtPnJlcS5hY3R1YWwgKz0gc2l6ZTsKKwkJaXNfc2hvcnQgPSAoc2l6ZSA8IGVwLT5lcC5tYXhwYWNrZXQpOworI2lmZGVmIFVTQl9UUkFDRQorCQlWREJHKGVwLT5kZXYsICJyZWFkICVzICV1IGJ5dGVzJXMgT1VUIHJlcSAlcCAldS8ldVxuIiwKKwkJCWVwLT5lcC5uYW1lLCBzaXplLCBpc19zaG9ydCA/ICIvUyIgOiAiIiwKKwkJCXJlcSwgcmVxLT5yZXEuYWN0dWFsLCByZXEtPnJlcS5sZW5ndGgpOworI2VuZGlmCisJCXdoaWxlIChsaWtlbHkoc2l6ZS0tICE9IDApKSB7CisJCQl1OAlieXRlID0gKHU4KSByZWFkbChlcC0+cmVnX2ZpZm8pOworCisJCQlpZiAodW5saWtlbHkoYnVmZmVyc3BhY2UgPT0gMCkpIHsKKwkJCQkvKiB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgZHJpdmVyJ3MgYnVmZmVyCisJCQkJICogaXMgc21hbGxlciB0aGFuIHdoYXQgdGhlIGhvc3Qgc2VudC4KKwkJCQkgKiBkaXNjYXJkIHRoZSBleHRyYSBkYXRhIGluIHRoaXMgcGFja2V0LgorCQkJCSAqLworCQkJCWlmIChyZXEtPnJlcS5zdGF0dXMgIT0gLUVPVkVSRkxPVykKKwkJCQkJREJHKGVwLT5kZXYsICIlcyBvdmVyZmxvdyAldVxuIiwKKwkJCQkJCWVwLT5lcC5uYW1lLCBzaXplKTsKKwkJCQlyZXEtPnJlcS5zdGF0dXMgPSAtRU9WRVJGTE9XOworCQkJfSBlbHNlIHsKKwkJCQkqYnVmKysgPSBieXRlOworCQkJCWJ1ZmZlcnNwYWNlLS07CisJCQl9CisJCX0KKworCQkvKiBjb21wbGV0aW9uICovCisJCWlmICh1bmxpa2VseShpc19zaG9ydCB8fCByZXEtPnJlcS5hY3R1YWwgPT0gcmVxLT5yZXEubGVuZ3RoKSkgeworCQkJaWYgKHVubGlrZWx5KGVwLT5udW0gPT0gMCkpIHsKKwkJCQkvKiBub24tY29udHJvbCBlbmRwb2ludHMgbm93IHVzYWJsZT8gKi8KKwkJCQlpZiAoZXAtPmRldi0+cmVxX2NvbmZpZykKKwkJCQkJd3JpdGVsKGVwLT5kZXYtPmNvbmZpZ3VyZWQKKwkJCQkJCQk/IFVTQlNUQVRFX0NPTkZJR1VSRUQKKwkJCQkJCQk6IDAsCisJCQkJCQkmcmVncy0+VXNiU3RhdGUpOworCQkJCS8qIGVwMG91dCBzdGF0dXMgc3RhZ2UgKi8KKwkJCQl3cml0ZWwofigxPDwwKSwgJnJlZ3MtPkVPUCk7CisJCQkJZXAtPnN0b3BwZWQgPSAxOworCQkJCWVwLT5kZXYtPmVwMHN0YXRlID0gRVAwX1NUQVRVUzsKKwkJCX0KKwkJCWRvbmUoZXAsIHJlcSwgMCk7CisKKwkJCS8qIGVtcHR5IHRoZSBzZWNvbmQgYnVmZmVyIGFzYXAgKi8KKwkJCWlmIChkYnVmZiAmJiAhbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQkJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsCisJCQkJCQlzdHJ1Y3QgZ29rdV9yZXF1ZXN0LCBxdWV1ZSk7CisJCQkJZ290byB0b3A7CisJCQl9CisJCQlyZXR1cm4gMTsKKwkJfQorCX0gd2hpbGUgKGRidWZmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitwaW9faXJxX2VuYWJsZShzdHJ1Y3QgZ29rdV91ZGMgKmRldiwKKwkJc3RydWN0IGdva3VfdWRjX3JlZ3MgX19pb21lbSAqcmVncywgaW50IGVwbnVtKQoreworCWRldi0+aW50X2VuYWJsZSB8PSBJTlRfRVB4REFUQVNFVCAoZXBudW0pOworCXdyaXRlbChkZXYtPmludF9lbmFibGUsICZyZWdzLT5pbnRfZW5hYmxlKTsKKwkvKiB3cml0ZSBtYXkgc3RpbGwgYmUgcG9zdGVkICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGlvX2lycV9kaXNhYmxlKHN0cnVjdCBnb2t1X3VkYyAqZGV2LAorCQlzdHJ1Y3QgZ29rdV91ZGNfcmVncyBfX2lvbWVtICpyZWdzLCBpbnQgZXBudW0pCit7CisJZGV2LT5pbnRfZW5hYmxlICY9IH5JTlRfRVB4REFUQVNFVCAoZXBudW0pOworCXdyaXRlbChkZXYtPmludF9lbmFibGUsICZyZWdzLT5pbnRfZW5hYmxlKTsKKwkvKiB3cml0ZSBtYXkgc3RpbGwgYmUgcG9zdGVkICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGlvX2FkdmFuY2Uoc3RydWN0IGdva3VfZXAgKmVwKQoreworCXN0cnVjdCBnb2t1X3JlcXVlc3QJKnJlcTsKKworCWlmICh1bmxpa2VseShsaXN0X2VtcHR5ICgmZXAtPnF1ZXVlKSkpCisJCXJldHVybjsKKwlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgZ29rdV9yZXF1ZXN0LCBxdWV1ZSk7CisJKGVwLT5pc19pbiA/IHdyaXRlX2ZpZm8gOiByZWFkX2ZpZm8pKGVwLCByZXEpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8vIHJldHVybjogIDAgPSBxIHJ1bm5pbmcsIDEgPSBxIHN0b3BwZWQsIG5lZ2F0aXZlID0gZXJybm8KK3N0YXRpYyBpbnQgc3RhcnRfZG1hKHN0cnVjdCBnb2t1X2VwICplcCwgc3RydWN0IGdva3VfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBnb2t1X3VkY19yZWdzIF9faW9tZW0JKnJlZ3MgPSBlcC0+ZGV2LT5yZWdzOworCXUzMgkJCQltYXN0ZXI7CisJdTMyCQkJCXN0YXJ0ID0gcmVxLT5yZXEuZG1hOworCXUzMgkJCQllbmQgPSBzdGFydCArIHJlcS0+cmVxLmxlbmd0aCAtIDE7CisKKwltYXN0ZXIgPSByZWFkbCgmcmVncy0+ZG1hX21hc3RlcikgJiBNU1RfUldfQklUUzsKKworCS8qIHJlLWluaXQgdGhlIGJpdHMgYWZmZWN0aW5nIElOIGRtYTsgY2FyZWZ1bCB3aXRoIHpscHMgKi8KKwlpZiAobGlrZWx5KGVwLT5pc19pbikpIHsKKwkJaWYgKHVubGlrZWx5KG1hc3RlciAmIE1TVF9SRF9FTkEpKSB7CisJCQlEQkcgKGVwLT5kZXYsICJzdGFydCwgSU4gYWN0aXZlIGRtYSAlMDN4ISFcbiIsCisJCQkJbWFzdGVyKTsKKy8vCQkJcmV0dXJuIC1FTDJITFQ7CisJCX0KKwkJd3JpdGVsKGVuZCwgJnJlZ3MtPmluX2RtYV9lbmQpOworCQl3cml0ZWwoc3RhcnQsICZyZWdzLT5pbl9kbWFfc3RhcnQpOworCisJCW1hc3RlciAmPSB+TVNUX1JfQklUUzsKKwkJaWYgKHVubGlrZWx5KHJlcS0+cmVxLmxlbmd0aCA9PSAwKSkKKwkJCW1hc3RlciA9IE1TVF9SRF9FTkEgfCBNU1RfUkRfRU9QQjsKKwkJZWxzZSBpZiAoKHJlcS0+cmVxLmxlbmd0aCAlIGVwLT5lcC5tYXhwYWNrZXQpICE9IDAKKwkJCQkJfHwgcmVxLT5yZXEuemVybykKKwkJCW1hc3RlciA9IE1TVF9SRF9FTkEgfCBNU1RfRU9QQl9FTkE7CisJCWVsc2UKKwkJCW1hc3RlciA9IE1TVF9SRF9FTkEgfCBNU1RfRU9QQl9ESVM7CisKKwkJZXAtPmRldi0+aW50X2VuYWJsZSB8PSBJTlRfTVNUUkRFTkQ7CisKKwkvKiBHb2t1IERNQS1PVVQgbWVyZ2VzIHNob3J0IHBhY2tldHMsIHdoaWNoIHBsYXlzIHBvb3JseSB3aXRoCisJICogcHJvdG9jb2xzIHdoZXJlIHNob3J0IHBhY2tldHMgbWFyayB0aGUgdHJhbnNmZXIgYm91bmRhcmllcy4KKwkgKiBUaGUgY2hpcCBzdXBwb3J0cyBhIG5vbnN0YW5kYXJkIHBvbGljeSB3aXRoIElOVF9NU1RXUlRNT1VULAorCSAqIGVuZGluZyB0cmFuc2ZlcnMgYWZ0ZXIgMyBTT0ZzOyB3ZSBkb24ndCB0dXJuIGl0IG9uLgorCSAqLworCX0gZWxzZSB7CisJCWlmICh1bmxpa2VseShtYXN0ZXIgJiBNU1RfV1JfRU5BKSkgeworCQkJREJHIChlcC0+ZGV2LCAic3RhcnQsIE9VVCBhY3RpdmUgZG1hICUwM3ghIVxuIiwKKwkJCQltYXN0ZXIpOworLy8JCQlyZXR1cm4gLUVMMkhMVDsKKwkJfQorCQl3cml0ZWwoZW5kLCAmcmVncy0+b3V0X2RtYV9lbmQpOworCQl3cml0ZWwoc3RhcnQsICZyZWdzLT5vdXRfZG1hX3N0YXJ0KTsKKworCQltYXN0ZXIgJj0gfk1TVF9XX0JJVFM7CisJCW1hc3RlciB8PSBNU1RfV1JfRU5BIHwgTVNUX1RJTUVPVVRfRElTOworCisJCWVwLT5kZXYtPmludF9lbmFibGUgfD0gSU5UX01TVFdSRU5EfElOVF9NU1RXUlRNT1VUOworCX0KKworCXdyaXRlbChtYXN0ZXIsICZyZWdzLT5kbWFfbWFzdGVyKTsKKwl3cml0ZWwoZXAtPmRldi0+aW50X2VuYWJsZSwgJnJlZ3MtPmludF9lbmFibGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkbWFfYWR2YW5jZShzdHJ1Y3QgZ29rdV91ZGMgKmRldiwgc3RydWN0IGdva3VfZXAgKmVwKQoreworCXN0cnVjdCBnb2t1X3JlcXVlc3QJCSpyZXE7CisJc3RydWN0IGdva3VfdWRjX3JlZ3MgX19pb21lbQkqcmVncyA9IGVwLT5kZXYtPnJlZ3M7CisJdTMyCQkJCW1hc3RlcjsKKworCW1hc3RlciA9IHJlYWRsKCZyZWdzLT5kbWFfbWFzdGVyKTsKKworCWlmICh1bmxpa2VseShsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSkgeworc3RvcDoKKwkJaWYgKGVwLT5pc19pbikKKwkJCWRldi0+aW50X2VuYWJsZSAmPSB+SU5UX01TVFJERU5EOworCQllbHNlCisJCQlkZXYtPmludF9lbmFibGUgJj0gfihJTlRfTVNUV1JFTkR8SU5UX01TVFdSVE1PVVQpOworCQl3cml0ZWwoZGV2LT5pbnRfZW5hYmxlLCAmcmVncy0+aW50X2VuYWJsZSk7CisJCXJldHVybjsKKwl9CisJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IGdva3VfcmVxdWVzdCwgcXVldWUpOworCisJLyogbm9ybWFsIGh3IGRtYSBjb21wbGV0aW9uIChub3QgYWJvcnQpICovCisJaWYgKGxpa2VseShlcC0+aXNfaW4pKSB7CisJCWlmICh1bmxpa2VseShtYXN0ZXIgJiBNU1RfUkRfRU5BKSkKKwkJCXJldHVybjsKKwkJcmVxLT5yZXEuYWN0dWFsID0gcmVhZGwoJnJlZ3MtPmluX2RtYV9jdXJyZW50KTsKKwl9IGVsc2UgeworCQlpZiAodW5saWtlbHkobWFzdGVyICYgTVNUX1dSX0VOQSkpCisJCQlyZXR1cm47CisKKwkJLyogaGFyZHdhcmUgbWVyZ2VzIHNob3J0IHBhY2tldHMsIGFuZCBhbHNvIGhpZGVzIHBhY2tldAorCQkgKiBvdmVycnVucy4gIGEgcGFydGlhbCBwYWNrZXQgTUFZIGJlIGluIHRoZSBmaWZvIGhlcmUuCisJCSAqLworCQlyZXEtPnJlcS5hY3R1YWwgPSByZWFkbCgmcmVncy0+b3V0X2RtYV9jdXJyZW50KTsKKwl9CisJcmVxLT5yZXEuYWN0dWFsIC09IHJlcS0+cmVxLmRtYTsKKwlyZXEtPnJlcS5hY3R1YWwrKzsKKworI2lmZGVmIFVTQl9UUkFDRQorCVZEQkcoZGV2LCAiZG9uZSAlcyAlcyBkbWEsICV1LyV1IGJ5dGVzLCByZXEgJXBcbiIsCisJCWVwLT5lcC5uYW1lLCBlcC0+aXNfaW4gPyAiSU4iIDogIk9VVCIsCisJCXJlcS0+cmVxLmFjdHVhbCwgcmVxLT5yZXEubGVuZ3RoLCByZXEpOworI2VuZGlmCisJZG9uZShlcCwgcmVxLCAwKTsKKwlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkKKwkJZ290byBzdG9wOworCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBnb2t1X3JlcXVlc3QsIHF1ZXVlKTsKKwkodm9pZCkgc3RhcnRfZG1hKGVwLCByZXEpOworfQorCitzdGF0aWMgdm9pZCBhYm9ydF9kbWEoc3RydWN0IGdva3VfZXAgKmVwLCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCBnb2t1X3VkY19yZWdzIF9faW9tZW0JKnJlZ3MgPSBlcC0+ZGV2LT5yZWdzOworCXN0cnVjdCBnb2t1X3JlcXVlc3QJCSpyZXE7CisJdTMyCQkJCWN1cnIsIG1hc3RlcjsKKworCS8qIE5BSyBmdXR1cmUgaG9zdCByZXF1ZXN0cywgaG9waW5nIHRoZSBpbXBsaWNpdCBkZWxheSBsZXRzIHRoZQorCSAqIGRtYSBlbmdpbmUgZmluaXNoIHJlYWRpbmcgKG9yIHdyaXRpbmcpIGl0cyBsYXRlc3QgcGFja2V0IGFuZAorCSAqIGVtcHR5IHRoZSBkbWEgYnVmZmVyICh1cCB0byAxNiBieXRlcykuCisJICoKKwkgKiBUaGlzIGF2b2lkcyBuZWVkaW5nIHRvIGNsZWFuIHVwIGEgcGFydGlhbCBwYWNrZXQgaW4gdGhlIGZpZm87CisJICogd2UgY2FuJ3QgZG8gdGhhdCBmb3IgSU4gd2l0aG91dCBzaWRlIGVmZmVjdHMgdG8gSEFMVCBhbmQgVE9HR0xFLgorCSAqLworCWNvbW1hbmQocmVncywgQ09NTUFORF9GSUZPX0RJU0FCTEUsIGVwLT5udW0pOworCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBnb2t1X3JlcXVlc3QsIHF1ZXVlKTsKKwltYXN0ZXIgPSByZWFkbCgmcmVncy0+ZG1hX21hc3RlcikgJiBNU1RfUldfQklUUzsKKworCS8qIEZJWE1FIHVzaW5nIHRoZXNlIHJlc2V0cyBpc24ndCB1c2FibHkgZG9jdW1lbnRlZC4gdGhpcyBtYXkKKwkgKiBub3Qgd29yayB1bmxlc3MgaXQncyBmb2xsb3dlZCBieSBkaXNhYmxpbmcgdGhlIGVuZHBvaW50LgorCSAqCisJICogRklYTUUgdGhlIE9VVCByZXNldCBwYXRoIGRvZXNuJ3QgZXZlbiBiZWhhdmUgY29uc2lzdGVudGx5LgorCSAqLworCWlmIChlcC0+aXNfaW4pIHsKKwkJaWYgKHVubGlrZWx5KChyZWFkbCgmcmVncy0+ZG1hX21hc3RlcikgJiBNU1RfUkRfRU5BKSA9PSAwKSkKKwkJCWdvdG8gZmluaXNoZWQ7CisJCWN1cnIgPSByZWFkbCgmcmVncy0+aW5fZG1hX2N1cnJlbnQpOworCisJCXdyaXRlbChjdXJyLCAmcmVncy0+aW5fZG1hX2VuZCk7CisJCXdyaXRlbChjdXJyLCAmcmVncy0+aW5fZG1hX3N0YXJ0KTsKKworCQltYXN0ZXIgJj0gfk1TVF9SX0JJVFM7CisJCW1hc3RlciB8PSBNU1RfUkRfUkVTRVQ7CisJCXdyaXRlbChtYXN0ZXIsICZyZWdzLT5kbWFfbWFzdGVyKTsKKworCQlpZiAocmVhZGwoJnJlZ3MtPmRtYV9tYXN0ZXIpICYgTVNUX1JEX0VOQSkKKwkJCURCRyhlcC0+ZGV2LCAiSU4gZG1hIGFjdGl2ZSBhZnRlciByZXNldCFcbiIpOworCisJfSBlbHNlIHsKKwkJaWYgKHVubGlrZWx5KChyZWFkbCgmcmVncy0+ZG1hX21hc3RlcikgJiBNU1RfV1JfRU5BKSA9PSAwKSkKKwkJCWdvdG8gZmluaXNoZWQ7CisJCWN1cnIgPSByZWFkbCgmcmVncy0+b3V0X2RtYV9jdXJyZW50KTsKKworCQl3cml0ZWwoY3VyciwgJnJlZ3MtPm91dF9kbWFfZW5kKTsKKwkJd3JpdGVsKGN1cnIsICZyZWdzLT5vdXRfZG1hX3N0YXJ0KTsKKworCQltYXN0ZXIgJj0gfk1TVF9XX0JJVFM7CisJCW1hc3RlciB8PSBNU1RfV1JfUkVTRVQ7CisJCXdyaXRlbChtYXN0ZXIsICZyZWdzLT5kbWFfbWFzdGVyKTsKKworCQlpZiAocmVhZGwoJnJlZ3MtPmRtYV9tYXN0ZXIpICYgTVNUX1dSX0VOQSkKKwkJCURCRyhlcC0+ZGV2LCAiT1VUIGRtYSBhY3RpdmUgYWZ0ZXIgcmVzZXQhXG4iKTsKKwl9CisJcmVxLT5yZXEuYWN0dWFsID0gKGN1cnIgLSByZXEtPnJlcS5kbWEpICsgMTsKKwlyZXEtPnJlcS5zdGF0dXMgPSBzdGF0dXM7CisKKwlWREJHKGVwLT5kZXYsICIlcyAlcyAlcyAlZC8lZFxuIiwgX19GVU5DVElPTl9fLCBlcC0+ZXAubmFtZSwKKwkJZXAtPmlzX2luID8gIklOIiA6ICJPVVQiLAorCQlyZXEtPnJlcS5hY3R1YWwsIHJlcS0+cmVxLmxlbmd0aCk7CisKKwljb21tYW5kKHJlZ3MsIENPTU1BTkRfRklGT19FTkFCTEUsIGVwLT5udW0pOworCisJcmV0dXJuOworCitmaW5pc2hlZDoKKwkvKiBkbWEgYWxyZWFkeSBjb21wbGV0ZWQ7IG5vIGFib3J0IG5lZWRlZCAqLworCWNvbW1hbmQocmVncywgQ09NTUFORF9GSUZPX0VOQUJMRSwgZXAtPm51bSk7CisJcmVxLT5yZXEuYWN0dWFsID0gcmVxLT5yZXEubGVuZ3RoOworCXJlcS0+cmVxLnN0YXR1cyA9IDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQKK2dva3VfcXVldWUoc3RydWN0IHVzYl9lcCAqX2VwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKl9yZXEsIGludCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IGdva3VfcmVxdWVzdAkqcmVxOworCXN0cnVjdCBnb2t1X2VwCQkqZXA7CisJc3RydWN0IGdva3VfdWRjCQkqZGV2OworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCWludAkJCXN0YXR1czsKKworCS8qIGFsd2F5cyByZXF1aXJlIGEgY3B1LXZpZXcgYnVmZmVyIHNvIHBpbyB3b3JrcyAqLworCXJlcSA9IGNvbnRhaW5lcl9vZihfcmVxLCBzdHJ1Y3QgZ29rdV9yZXF1ZXN0LCByZXEpOworCWlmICh1bmxpa2VseSghX3JlcSB8fCAhX3JlcS0+Y29tcGxldGUKKwkJCXx8ICFfcmVxLT5idWYgfHwgIWxpc3RfZW1wdHkoJnJlcS0+cXVldWUpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgZ29rdV9lcCwgZXApOworCWlmICh1bmxpa2VseSghX2VwIHx8ICghZXAtPmRlc2MgJiYgZXAtPm51bSAhPSAwKSkpCisJCXJldHVybiAtRUlOVkFMOworCWRldiA9IGVwLT5kZXY7CisJaWYgKHVubGlrZWx5KCFkZXYtPmRyaXZlciB8fCBkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikpCisJCXJldHVybiAtRVNIVVRET1dOOworCisJLyogY2FuJ3QgdG91Y2ggcmVnaXN0ZXJzIHdoZW4gc3VzcGVuZGVkICovCisJaWYgKGRldi0+ZXAwc3RhdGUgPT0gRVAwX1NVU1BFTkQpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBzZXQgdXAgZG1hIG1hcHBpbmcgaW4gY2FzZSB0aGUgY2FsbGVyIGRpZG4ndCAqLworCWlmIChlcC0+ZG1hICYmIF9yZXEtPmRtYSA9PSBETUFfQUREUl9JTlZBTElEKSB7CisJCV9yZXEtPmRtYSA9IHBjaV9tYXBfc2luZ2xlKGRldi0+cGRldiwgX3JlcS0+YnVmLCBfcmVxLT5sZW5ndGgsCisJCQllcC0+aXNfaW4gPyBQQ0lfRE1BX1RPREVWSUNFIDogUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJcmVxLT5tYXBwZWQgPSAxOworCX0KKworI2lmZGVmIFVTQl9UUkFDRQorCVZEQkcoZGV2LCAiJXMgcXVldWUgcmVxICVwLCBsZW4gJXUgYnVmICVwXG4iLAorCQkJX2VwLT5uYW1lLCBfcmVxLCBfcmVxLT5sZW5ndGgsIF9yZXEtPmJ1Zik7CisjZW5kaWYKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCV9yZXEtPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKwlfcmVxLT5hY3R1YWwgPSAwOworCisJLyogZm9yIGVwMCBJTiB3aXRob3V0IHByZW1hdHVyZSBzdGF0dXMsIHpscCBpcyByZXF1aXJlZCBhbmQKKwkgKiB3cml0aW5nIEVPUCBzdGFydHMgdGhlIHN0YXR1cyBzdGFnZSAoT1VUKS4KKwkgKi8KKwlpZiAodW5saWtlbHkoZXAtPm51bSA9PSAwICYmIGVwLT5pc19pbikpCisJCV9yZXEtPnplcm8gPSAxOworCisJLyoga2lja3N0YXJ0IHRoaXMgaS9vIHF1ZXVlPyAqLworCXN0YXR1cyA9IDA7CisJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkgJiYgbGlrZWx5KCFlcC0+c3RvcHBlZCkpIHsKKwkJLyogZG1hOiAgZG9uZSBhZnRlciBkbWEgY29tcGxldGlvbiBJUlEgKG9yIGVycm9yKQorCQkgKiBwaW86ICBkb25lIGFmdGVyIGxhc3QgZmlmbyBvcGVyYXRpb24KKwkJICovCisJCWlmIChlcC0+ZG1hKQorCQkJc3RhdHVzID0gc3RhcnRfZG1hKGVwLCByZXEpOworCQllbHNlCisJCQlzdGF0dXMgPSAoZXAtPmlzX2luID8gd3JpdGVfZmlmbyA6IHJlYWRfZmlmbykoZXAsIHJlcSk7CisKKwkJaWYgKHVubGlrZWx5KHN0YXR1cyAhPSAwKSkgeworCQkJaWYgKHN0YXR1cyA+IDApCisJCQkJc3RhdHVzID0gMDsKKwkJCXJlcSA9IE5VTEw7CisJCX0KKworCX0gLyogZWxzZSBwaW8gb3IgZG1hIGlycSBoYW5kbGVyIGFkdmFuY2VzIHRoZSBxdWV1ZS4gKi8KKworCWlmIChsaWtlbHkocmVxICE9IDApKQorCQlsaXN0X2FkZF90YWlsKCZyZXEtPnF1ZXVlLCAmZXAtPnF1ZXVlKTsKKworCWlmIChsaWtlbHkoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCisJCQkmJiBsaWtlbHkoZXAtPm51bSAhPSAwKQorCQkJJiYgIWVwLT5kbWEKKwkJCSYmICEoZGV2LT5pbnRfZW5hYmxlICYgSU5UX0VQeERBVEFTRVQgKGVwLT5udW0pKSkKKwkJcGlvX2lycV9lbmFibGUoZGV2LCBkZXYtPnJlZ3MsIGVwLT5udW0pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwkvKiBwY2kgd3JpdGVzIG1heSBzdGlsbCBiZSBwb3N0ZWQgKi8KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBkZXF1ZXVlIEFMTCByZXF1ZXN0cyAqLworc3RhdGljIHZvaWQgbnVrZShzdHJ1Y3QgZ29rdV9lcCAqZXAsIGludCBzdGF0dXMpCit7CisJc3RydWN0IGdva3VfcmVxdWVzdAkqcmVxOworCisJZXAtPnN0b3BwZWQgPSAxOworCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQlyZXR1cm47CisJaWYgKGVwLT5kbWEpCisJCWFib3J0X2RtYShlcCwgc3RhdHVzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IGdva3VfcmVxdWVzdCwgcXVldWUpOworCQlkb25lKGVwLCByZXEsIHN0YXR1cyk7CisJfQorfQorCisvKiBkZXF1ZXVlIEpVU1QgT05FIHJlcXVlc3QgKi8KK3N0YXRpYyBpbnQgZ29rdV9kZXF1ZXVlKHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBnb2t1X3JlcXVlc3QJKnJlcTsKKwlzdHJ1Y3QgZ29rdV9lcAkJKmVwOworCXN0cnVjdCBnb2t1X3VkYwkJKmRldjsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IGdva3VfZXAsIGVwKTsKKwlpZiAoIV9lcCB8fCAhX3JlcSB8fCAoIWVwLT5kZXNjICYmIGVwLT5udW0gIT0gMCkpCisJCXJldHVybiAtRUlOVkFMOworCWRldiA9IGVwLT5kZXY7CisJaWYgKCFkZXYtPmRyaXZlcikKKwkJcmV0dXJuIC1FU0hVVERPV047CisKKwkvKiB3ZSBjYW4ndCB0b3VjaCAoZG1hKSByZWdpc3RlcnMgd2hlbiBzdXNwZW5kZWQgKi8KKwlpZiAoZGV2LT5lcDBzdGF0ZSA9PSBFUDBfU1VTUEVORCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCVZEQkcoZGV2LCAiJXMgJXMgJXMgJXMgJXBcbiIsIF9fRlVOQ1RJT05fXywgX2VwLT5uYW1lLAorCQllcC0+aXNfaW4gPyAiSU4iIDogIk9VVCIsCisJCWVwLT5kbWEgPyAiZG1hIiA6ICJwaW8iLAorCQlfcmVxKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCS8qIG1ha2Ugc3VyZSBpdCdzIGFjdHVhbGx5IHF1ZXVlZCBvbiB0aGlzIGVuZHBvaW50ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeSAocmVxLCAmZXAtPnF1ZXVlLCBxdWV1ZSkgeworCQlpZiAoJnJlcS0+cmVxID09IF9yZXEpCisJCQlicmVhazsKKwl9CisJaWYgKCZyZXEtPnJlcSAhPSBfcmVxKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGVwLT5kbWEgJiYgZXAtPnF1ZXVlLm5leHQgPT0gJnJlcS0+cXVldWUgJiYgIWVwLT5zdG9wcGVkKSB7CisJCWFib3J0X2RtYShlcCwgLUVDT05OUkVTRVQpOworCQlkb25lKGVwLCByZXEsIC1FQ09OTlJFU0VUKTsKKwkJZG1hX2FkdmFuY2UoZGV2LCBlcCk7CisJfSBlbHNlIGlmICghbGlzdF9lbXB0eSgmcmVxLT5xdWV1ZSkpCisJCWRvbmUoZXAsIHJlcSwgLUVDT05OUkVTRVQpOworCWVsc2UKKwkJcmVxID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXEgPyAwIDogLUVPUE5PVFNVUFA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIGdva3VfY2xlYXJfaGFsdChzdHJ1Y3QgZ29rdV9lcCAqZXApCit7CisJLy8gYXNzZXJ0IChlcC0+bnVtICE9MCkKKwlWREJHKGVwLT5kZXYsICIlcyBjbGVhciBoYWx0XG4iLCBlcC0+ZXAubmFtZSk7CisJY29tbWFuZChlcC0+ZGV2LT5yZWdzLCBDT01NQU5EX1NFVERBVEEwLCBlcC0+bnVtKTsKKwljb21tYW5kKGVwLT5kZXYtPnJlZ3MsIENPTU1BTkRfU1RBTExfQ0xFQVIsIGVwLT5udW0pOworCWlmIChlcC0+c3RvcHBlZCkgeworCQllcC0+c3RvcHBlZCA9IDA7CisJCWlmIChlcC0+ZG1hKSB7CisJCQlzdHJ1Y3QgZ29rdV9yZXF1ZXN0CSpyZXE7CisKKwkJCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQkJCXJldHVybjsKKwkJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBnb2t1X3JlcXVlc3QsCisJCQkJCQlxdWV1ZSk7CisJCQkodm9pZCkgc3RhcnRfZG1hKGVwLCByZXEpOworCQl9IGVsc2UKKwkJCXBpb19hZHZhbmNlKGVwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ29rdV9zZXRfaGFsdChzdHJ1Y3QgdXNiX2VwICpfZXAsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZ29rdV9lcAkqZXA7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwlpbnQJCXJldHZhbCA9IDA7CisKKwlpZiAoIV9lcCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJZXAgPSBjb250YWluZXJfb2YgKF9lcCwgc3RydWN0IGdva3VfZXAsIGVwKTsKKworCWlmIChlcC0+bnVtID09IDApIHsKKwkJaWYgKHZhbHVlKSB7CisJCQllcC0+ZGV2LT5lcDBzdGF0ZSA9IEVQMF9TVEFMTDsKKwkJCWVwLT5kZXYtPmVwWzBdLnN0b3BwZWQgPSAxOworCQl9IGVsc2UKKwkJCXJldHVybiAtRUlOVkFMOworCisJLyogZG9uJ3QgY2hhbmdlIEVQeFNUQVRVU19FUF9JTlZBTElEIHRvIFJFQURZICovCisJfSBlbHNlIGlmICghZXAtPmRlc2MpIHsKKwkJREJHKGVwLT5kZXYsICIlcyAlcyBpbmFjdGl2ZT9cbiIsIF9fRlVOQ1RJT05fXywgZXAtPmVwLm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCWlmICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkKKwkJcmV0dmFsID0gLUVBR0FJTjsKKwllbHNlIGlmIChlcC0+aXNfaW4gJiYgdmFsdWUKKwkJCS8qIGRhdGEgaW4gKGVpdGhlcikgcGFja2V0IGJ1ZmZlcj8gKi8KKwkJCSYmIChyZWFkbCgmZXAtPmRldi0+cmVncy0+RGF0YVNldCkKKwkJCQkJJiBEQVRBU0VUX0FCKGVwLT5udW0pKSkKKwkJcmV0dmFsID0gLUVBR0FJTjsKKwllbHNlIGlmICghdmFsdWUpCisJCWdva3VfY2xlYXJfaGFsdChlcCk7CisJZWxzZSB7CisJCWVwLT5zdG9wcGVkID0gMTsKKwkJVkRCRyhlcC0+ZGV2LCAiJXMgc2V0IGhhbHRcbiIsIGVwLT5lcC5uYW1lKTsKKwkJY29tbWFuZChlcC0+ZGV2LT5yZWdzLCBDT01NQU5EX1NUQUxMLCBlcC0+bnVtKTsKKwkJcmVhZGwoZXAtPnJlZ19zdGF0dXMpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBnb2t1X2ZpZm9fc3RhdHVzKHN0cnVjdCB1c2JfZXAgKl9lcCkKK3sKKwlzdHJ1Y3QgZ29rdV9lcAkJCSplcDsKKwlzdHJ1Y3QgZ29rdV91ZGNfcmVncyBfX2lvbWVtCSpyZWdzOworCXUzMgkJCQlzaXplOworCisJaWYgKCFfZXApCisJCXJldHVybiAtRU5PREVWOworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IGdva3VfZXAsIGVwKTsKKworCS8qIHNpemUgaXMgb25seSByZXBvcnRlZCBzYW5lbHkgZm9yIE9VVCAqLworCWlmIChlcC0+aXNfaW4pCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCS8qIGlnbm9yZXMgMTYtYnl0ZSBkbWEgYnVmZmVyOyBTaXplSCA9PSAwICovCisJcmVncyA9IGVwLT5kZXYtPnJlZ3M7CisJc2l6ZSA9IHJlYWRsKCZyZWdzLT5FUHhTaXplTEFbZXAtPm51bV0pICYgREFUQVNJWkU7CisJc2l6ZSArPSByZWFkbCgmcmVncy0+RVB4U2l6ZUxCW2VwLT5udW1dKSAmIERBVEFTSVpFOworCVZEQkcoZXAtPmRldiwgIiVzICVzICV1XG4iLCBfX0ZVTkNUSU9OX18sIGVwLT5lcC5uYW1lLCBzaXplKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIHZvaWQgZ29rdV9maWZvX2ZsdXNoKHN0cnVjdCB1c2JfZXAgKl9lcCkKK3sKKwlzdHJ1Y3QgZ29rdV9lcAkJCSplcDsKKwlzdHJ1Y3QgZ29rdV91ZGNfcmVncyBfX2lvbWVtCSpyZWdzOworCXUzMgkJCQlzaXplOworCisJaWYgKCFfZXApCisJCXJldHVybjsKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBnb2t1X2VwLCBlcCk7CisJVkRCRyhlcC0+ZGV2LCAiJXMgJXNcbiIsIF9fRlVOQ1RJT05fXywgZXAtPmVwLm5hbWUpOworCisJLyogZG9uJ3QgY2hhbmdlIEVQeFNUQVRVU19FUF9JTlZBTElEIHRvIFJFQURZICovCisJaWYgKCFlcC0+ZGVzYyAmJiBlcC0+bnVtICE9IDApIHsKKwkJREJHKGVwLT5kZXYsICIlcyAlcyBpbmFjdGl2ZT9cbiIsIF9fRlVOQ1RJT05fXywgZXAtPmVwLm5hbWUpOworCQlyZXR1cm47CisJfQorCisJcmVncyA9IGVwLT5kZXYtPnJlZ3M7CisJc2l6ZSA9IHJlYWRsKCZyZWdzLT5FUHhTaXplTEFbZXAtPm51bV0pOworCXNpemUgJj0gREFUQVNJWkU7CisKKwkvKiBOb24tZGVzaXJhYmxlIGJlaGF2aW9yOiAgRklGT19DTEVBUiBhbHNvIGNsZWFycyB0aGUKKwkgKiBlbmRwb2ludCBoYWx0IGZlYXR1cmUuICBGb3IgT1VULCB3ZSBfY291bGRfIGp1c3QgcmVhZAorCSAqIHRoZSBieXRlcyBvdXQgKFBJTywgaWYgIWVwLT5kbWEpOyBmb3IgaW4sIG5vIGNob2ljZS4KKwkgKi8KKwlpZiAoc2l6ZSkKKwkJY29tbWFuZChyZWdzLCBDT01NQU5EX0ZJRk9fQ0xFQVIsIGVwLT5udW0pOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9lcF9vcHMgZ29rdV9lcF9vcHMgPSB7CisJLmVuYWJsZQkJPSBnb2t1X2VwX2VuYWJsZSwKKwkuZGlzYWJsZQk9IGdva3VfZXBfZGlzYWJsZSwKKworCS5hbGxvY19yZXF1ZXN0CT0gZ29rdV9hbGxvY19yZXF1ZXN0LAorCS5mcmVlX3JlcXVlc3QJPSBnb2t1X2ZyZWVfcmVxdWVzdCwKKworCS5hbGxvY19idWZmZXIJPSBnb2t1X2FsbG9jX2J1ZmZlciwKKwkuZnJlZV9idWZmZXIJPSBnb2t1X2ZyZWVfYnVmZmVyLAorCisJLnF1ZXVlCQk9IGdva3VfcXVldWUsCisJLmRlcXVldWUJPSBnb2t1X2RlcXVldWUsCisKKwkuc2V0X2hhbHQJPSBnb2t1X3NldF9oYWx0LAorCS5maWZvX3N0YXR1cwk9IGdva3VfZmlmb19zdGF0dXMsCisJLmZpZm9fZmx1c2gJPSBnb2t1X2ZpZm9fZmx1c2gsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IGdva3VfZ2V0X2ZyYW1lKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0KQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZ2FkZ2V0X29wcyBnb2t1X29wcyA9IHsKKwkuZ2V0X2ZyYW1lCT0gZ29rdV9nZXRfZnJhbWUsCisJLy8gbm8gcmVtb3RlIHdha2V1cAorCS8vIG5vdCBzZWxmcG93ZXJlZAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBjaGFyICpkbWFzdHIodm9pZCkKK3sKKwlpZiAodXNlX2RtYSA9PSAwKQorCQlyZXR1cm4gIihkbWEgZGlzYWJsZWQpIjsKKwllbHNlIGlmICh1c2VfZG1hID09IDIpCisJCXJldHVybiAiKGRtYSBJTiBhbmQgT1VUKSI7CisJZWxzZQorCQlyZXR1cm4gIihkbWEgSU4pIjsKK30KKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTCisKK3N0YXRpYyBjb25zdCBjaGFyIHByb2Nfbm9kZV9uYW1lIFtdID0gImRyaXZlci91ZGMiOworCisjZGVmaW5lIEZPVVJCSVRTICIlcyVzJXMlcyIKKyNkZWZpbmUgRUlHSFRCSVRTIEZPVVJCSVRTIEZPVVJCSVRTCisKK3N0YXRpYyB2b2lkCitkdW1wX2ludG1hc2soY29uc3QgY2hhciAqbGFiZWwsIHUzMiBtYXNrLCBjaGFyICoqbmV4dCwgdW5zaWduZWQgKnNpemUpCit7CisJaW50IHQ7CisKKwkvKiBpbnRfc3RhdHVzIGlzIHRoZSBzYW1lIGZvcm1hdCAuLi4gKi8KKwl0ID0gc2NucHJpbnRmKCpuZXh0LCAqc2l6ZSwKKwkJIiVzICUwNVggPSIgRk9VUkJJVFMgRUlHSFRCSVRTIEVJR0hUQklUUyAiXG4iLAorCQlsYWJlbCwgbWFzaywKKwkJKG1hc2sgJiBJTlRfUFdSREVURUNUKSA/ICIgcG93ZXIiIDogIiIsCisJCShtYXNrICYgSU5UX1NZU0VSUk9SKSA/ICIgc3lzIiA6ICIiLAorCQkobWFzayAmIElOVF9NU1RSREVORCkgPyAiIGluLWRtYSIgOiAiIiwKKwkJKG1hc2sgJiBJTlRfTVNUV1JUTU9VVCkgPyAiIHdydG1vIiA6ICIiLAorCisJCShtYXNrICYgSU5UX01TVFdSRU5EKSA/ICIgb3V0LWRtYSIgOiAiIiwKKwkJKG1hc2sgJiBJTlRfTVNUV1JTRVQpID8gIiB3cnNldCIgOiAiIiwKKwkJKG1hc2sgJiBJTlRfRVJSKSA/ICIgZXJyIiA6ICIiLAorCQkobWFzayAmIElOVF9TT0YpID8gIiBzb2YiIDogIiIsCisKKwkJKG1hc2sgJiBJTlRfRVAzTkFLKSA/ICIgZXAzbmFrIiA6ICIiLAorCQkobWFzayAmIElOVF9FUDJOQUspID8gIiBlcDJuYWsiIDogIiIsCisJCShtYXNrICYgSU5UX0VQMU5BSykgPyAiIGVwMW5hayIgOiAiIiwKKwkJKG1hc2sgJiBJTlRfRVAzREFUQVNFVCkgPyAiIGVwMyIgOiAiIiwKKworCQkobWFzayAmIElOVF9FUDJEQVRBU0VUKSA/ICIgZXAyIiA6ICIiLAorCQkobWFzayAmIElOVF9FUDFEQVRBU0VUKSA/ICIgZXAxIiA6ICIiLAorCQkobWFzayAmIElOVF9TVEFUVVNOQUspID8gIiBlcDBzbmFrIiA6ICIiLAorCQkobWFzayAmIElOVF9TVEFUVVMpID8gIiBlcDBzdGF0dXMiIDogIiIsCisKKwkJKG1hc2sgJiBJTlRfU0VUVVApID8gIiBzZXR1cCIgOiAiIiwKKwkJKG1hc2sgJiBJTlRfRU5EUE9JTlQwKSA/ICIgZXAwIiA6ICIiLAorCQkobWFzayAmIElOVF9VU0JSRVNFVCkgPyAiIHJlc2V0IiA6ICIiLAorCQkobWFzayAmIElOVF9TVVNQRU5EKSA/ICIgc3VzcGVuZCIgOiAiIik7CisJKnNpemUgLT0gdDsKKwkqbmV4dCArPSB0OworfQorCisKK3N0YXRpYyBpbnQKK3VkY19wcm9jX3JlYWQoY2hhciAqYnVmZmVyLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LAorCQlpbnQgKmVvZiwgdm9pZCAqX2RldikKK3sKKwljaGFyCQkJCSpidWYgPSBidWZmZXI7CisJc3RydWN0IGdva3VfdWRjCQkJKmRldiA9IF9kZXY7CisJc3RydWN0IGdva3VfdWRjX3JlZ3MgX19pb21lbQkqcmVncyA9IGRldi0+cmVnczsKKwljaGFyCQkJCSpuZXh0ID0gYnVmOworCXVuc2lnbmVkCQkJc2l6ZSA9IGNvdW50OworCXVuc2lnbmVkIGxvbmcJCQlmbGFnczsKKwlpbnQJCQkJaSwgdCwgaXNfdXNiX2Nvbm5lY3RlZDsKKwl1MzIJCQkJdG1wOworCisJaWYgKG9mZiAhPSAwKQorCQlyZXR1cm4gMDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qIGJhc2ljIGRldmljZSBzdGF0dXMgKi8KKwl0bXAgPSByZWFkbCgmcmVncy0+cG93ZXJfZGV0ZWN0KTsKKwlpc191c2JfY29ubmVjdGVkID0gdG1wICYgUFdfREVURUNUOworCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKKwkJIiVzIC0gJXNcbiIKKwkJIiVzIHZlcnNpb246ICVzICVzXG4iCisJCSJHYWRnZXQgZHJpdmVyOiAlc1xuIgorCQkiSG9zdCAlcywgJXNcbiIKKwkJIlxuIiwKKwkJcGNpX25hbWUoZGV2LT5wZGV2KSwgZHJpdmVyX2Rlc2MsCisJCWRyaXZlcl9uYW1lLCBEUklWRVJfVkVSU0lPTiwgZG1hc3RyKCksCisJCWRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPmRyaXZlci5uYW1lIDogIihub25lKSIsCisJCWlzX3VzYl9jb25uZWN0ZWQKKwkJCT8gKCh0bXAgJiBQV19QVUxMVVApID8gImZ1bGwgc3BlZWQiIDogInBvd2VyZWQiKQorCQkJOiAiZGlzY29ubmVjdGVkIiwKKwkJKHtjaGFyICp0bXA7CisJCXN3aXRjaChkZXYtPmVwMHN0YXRlKXsKKwkJY2FzZSBFUDBfRElTQ09OTkVDVDoJdG1wID0gImVwMF9kaXNjb25uZWN0IjsgYnJlYWs7CisJCWNhc2UgRVAwX0lETEU6CQl0bXAgPSAiZXAwX2lkbGUiOyBicmVhazsKKwkJY2FzZSBFUDBfSU46CQl0bXAgPSAiZXAwX2luIjsgYnJlYWs7CisJCWNhc2UgRVAwX09VVDoJCXRtcCA9ICJlcDBfb3V0IjsgYnJlYWs7CisJCWNhc2UgRVAwX1NUQVRVUzoJdG1wID0gImVwMF9zdGF0dXMiOyBicmVhazsKKwkJY2FzZSBFUDBfU1RBTEw6CQl0bXAgPSAiZXAwX3N0YWxsIjsgYnJlYWs7CisJCWNhc2UgRVAwX1NVU1BFTkQ6CXRtcCA9ICJlcDBfc3VzcGVuZCI7IGJyZWFrOworCQlkZWZhdWx0OgkJdG1wID0gImVwMF8/IjsgYnJlYWs7CisJCX0gdG1wOyB9KQorCQkpOworCXNpemUgLT0gdDsKKwluZXh0ICs9IHQ7CisKKwlkdW1wX2ludG1hc2soImludF9zdGF0dXMiLCByZWFkbCgmcmVncy0+aW50X3N0YXR1cyksICZuZXh0LCAmc2l6ZSk7CisJZHVtcF9pbnRtYXNrKCJpbnRfZW5hYmxlIiwgcmVhZGwoJnJlZ3MtPmludF9lbmFibGUpLCAmbmV4dCwgJnNpemUpOworCisJaWYgKCFpc191c2JfY29ubmVjdGVkIHx8ICFkZXYtPmRyaXZlciB8fCAodG1wICYgUFdfUFVMTFVQKSA9PSAwKQorCQlnb3RvIGRvbmU7CisKKwkvKiByZWdpc3RlcnMgZm9yIChhY3RpdmUpIGRldmljZSBhbmQgZXAwICovCisJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLCAiXG5pcnFzICVsdVxuZGF0YXNldCAlMDJ4ICIKKwkJCSJzaW5nbGUuYmNzICUwMnguJTAyeCBzdGF0ZSAleCBhZGRyICV1XG4iLAorCQkJZGV2LT5pcnFzLCByZWFkbCgmcmVncy0+RGF0YVNldCksCisJCQlyZWFkbCgmcmVncy0+RVB4U2luZ2xlKSwgcmVhZGwoJnJlZ3MtPkVQeEJDUyksCisJCQlyZWFkbCgmcmVncy0+VXNiU3RhdGUpLAorCQkJcmVhZGwoJnJlZ3MtPmFkZHJlc3MpKTsKKwlzaXplIC09IHQ7CisJbmV4dCArPSB0OworCisJdG1wID0gcmVhZGwoJnJlZ3MtPmRtYV9tYXN0ZXIpOworCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKKwkJImRtYSAlMDNYID0iIEVJR0hUQklUUyAiJXMgJXNcbiIsIHRtcCwKKwkJKHRtcCAmIE1TVF9FT1BCX0RJUykgPyAiIGVvcGItIiA6ICIiLAorCQkodG1wICYgTVNUX0VPUEJfRU5BKSA/ICIgZW9wYisiIDogIiIsCisJCSh0bXAgJiBNU1RfVElNRU9VVF9ESVMpID8gIiB0bW8tIiA6ICIiLAorCQkodG1wICYgTVNUX1RJTUVPVVRfRU5BKSA/ICIgdG1vKyIgOiAiIiwKKworCQkodG1wICYgTVNUX1JEX0VPUEIpID8gIiBlb3BiIiA6ICIiLAorCQkodG1wICYgTVNUX1JEX1JFU0VUKSA/ICIgaW5fcmVzZXQiIDogIiIsCisJCSh0bXAgJiBNU1RfV1JfUkVTRVQpID8gIiBvdXRfcmVzZXQiIDogIiIsCisJCSh0bXAgJiBNU1RfUkRfRU5BKSA/ICIgSU4iIDogIiIsCisKKwkJKHRtcCAmIE1TVF9XUl9FTkEpID8gIiBPVVQiIDogIiIsCisJCSh0bXAgJiBNU1RfQ09OTkVDVElPTikKKwkJCT8gImVwMWluL2VwMm91dCIKKwkJCTogImVwMW91dC9lcDJpbiIpOworCXNpemUgLT0gdDsKKwluZXh0ICs9IHQ7CisKKwkvKiBkdW1wIGVuZHBvaW50IHF1ZXVlcyAqLworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJc3RydWN0IGdva3VfZXAJCSplcCA9ICZkZXYtPmVwIFtpXTsKKwkJc3RydWN0IGdva3VfcmVxdWVzdAkqcmVxOworCQlpbnQJCQl0OworCisJCWlmIChpICYmICFlcC0+ZGVzYykKKwkJCWNvbnRpbnVlOworCisJCXRtcCA9IHJlYWRsKGVwLT5yZWdfc3RhdHVzKTsKKwkJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAorCQkJIiVzICVzIG1heCAldSAlcywgaXJxcyAlbHUsICIKKwkJCSJzdGF0dXMgJTAyeCAoJXMpICIgRk9VUkJJVFMgIlxuIiwKKwkJCWVwLT5lcC5uYW1lLAorCQkJZXAtPmlzX2luID8gImluIiA6ICJvdXQiLAorCQkJZXAtPmVwLm1heHBhY2tldCwKKwkJCWVwLT5kbWEgPyAiZG1hIiA6ICJwaW8iLAorCQkJZXAtPmlycXMsCisJCQl0bXAsICh7IGNoYXIgKnM7CisJCQlzd2l0Y2ggKHRtcCAmIEVQeFNUQVRVU19FUF9NQVNLKSB7CisJCQljYXNlIEVQeFNUQVRVU19FUF9SRUFEWToKKwkJCQlzID0gInJlYWR5IjsgYnJlYWs7CisJCQljYXNlIEVQeFNUQVRVU19FUF9EQVRBSU46CisJCQkJcyA9ICJwYWNrZXQiOyBicmVhazsKKwkJCWNhc2UgRVB4U1RBVFVTX0VQX0ZVTEw6CisJCQkJcyA9ICJmdWxsIjsgYnJlYWs7CisJCQljYXNlIEVQeFNUQVRVU19FUF9UWF9FUlI6CS8vIGhvc3Qgd2lsbCByZXRyeQorCQkJCXMgPSAidHhfZXJyIjsgYnJlYWs7CisJCQljYXNlIEVQeFNUQVRVU19FUF9SWF9FUlI6CisJCQkJcyA9ICJyeF9lcnIiOyBicmVhazsKKwkJCWNhc2UgRVB4U1RBVFVTX0VQX0JVU1k6CQkvKiBlcDAgb25seSAqLworCQkJCXMgPSAiYnVzeSI7IGJyZWFrOworCQkJY2FzZSBFUHhTVEFUVVNfRVBfU1RBTEw6CisJCQkJcyA9ICJzdGFsbCI7IGJyZWFrOworCQkJY2FzZSBFUHhTVEFUVVNfRVBfSU5WQUxJRDoJLy8gdGhlc2UgImNhbid0IGhhcHBlbiIKKwkJCQlzID0gImludmFsaWQiOyBicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcyA9ICI/IjsgYnJlYWs7CisJCQl9OyBzOyB9KSwKKwkJCSh0bXAgJiBFUHhTVEFUVVNfVE9HR0xFKSA/ICJkYXRhMSIgOiAiZGF0YTAiLAorCQkJKHRtcCAmIEVQeFNUQVRVU19TVVNQRU5EKSA/ICIgc3VzcGVuZCIgOiAiIiwKKwkJCSh0bXAgJiBFUHhTVEFUVVNfRklGT19ESVNBQkxFKSA/ICIgZGlzYWJsZSIgOiAiIiwKKwkJCSh0bXAgJiBFUHhTVEFUVVNfU1RBR0VfRVJST1IpID8gIiBlcDBzdGF0IiA6ICIiCisJCQkpOworCQlpZiAodCA8PSAwIHx8IHQgPiBzaXplKQorCQkJZ290byBkb25lOworCQlzaXplIC09IHQ7CisJCW5leHQgKz0gdDsKKworCQlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQkJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLCAiXHQobm90aGluZyBxdWV1ZWQpXG4iKTsKKwkJCWlmICh0IDw9IDAgfHwgdCA+IHNpemUpCisJCQkJZ290byBkb25lOworCQkJc2l6ZSAtPSB0OworCQkJbmV4dCArPSB0OworCQkJY29udGludWU7CisJCX0KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7CisJCQlpZiAoZXAtPmRtYSAmJiByZXEtPnF1ZXVlLnByZXYgPT0gJmVwLT5xdWV1ZSkgeworCQkJCWlmIChpID09IFVEQ19NU1RSRF9FTkRQT0lOVCkKKwkJCQkJdG1wID0gcmVhZGwoJnJlZ3MtPmluX2RtYV9jdXJyZW50KTsKKwkJCQllbHNlCisJCQkJCXRtcCA9IHJlYWRsKCZyZWdzLT5vdXRfZG1hX2N1cnJlbnQpOworCQkJCXRtcCAtPSByZXEtPnJlcS5kbWE7CisJCQkJdG1wKys7CisJCQl9IGVsc2UKKwkJCQl0bXAgPSByZXEtPnJlcS5hY3R1YWw7CisKKwkJCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKKwkJCQkiXHRyZXEgJXAgbGVuICV1LyV1IGJ1ZiAlcFxuIiwKKwkJCQkmcmVxLT5yZXEsIHRtcCwgcmVxLT5yZXEubGVuZ3RoLAorCQkJCXJlcS0+cmVxLmJ1Zik7CisJCQlpZiAodCA8PSAwIHx8IHQgPiBzaXplKQorCQkJCWdvdG8gZG9uZTsKKwkJCXNpemUgLT0gdDsKKwkJCW5leHQgKz0gdDsKKwkJfQorCX0KKworZG9uZToKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJKmVvZiA9IDE7CisJcmV0dXJuIGNvdW50IC0gc2l6ZTsKK30KKworI2VuZGlmCS8qIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHVkY19yZWluaXQgKHN0cnVjdCBnb2t1X3VkYyAqZGV2KQoreworCXN0YXRpYyBjaGFyICpuYW1lcyBbXSA9IHsgImVwMCIsICJlcDEtYnVsayIsICJlcDItYnVsayIsICJlcDMtYnVsayIgfTsKKwkKKwl1bnNpZ25lZCBpOworCisJSU5JVF9MSVNUX0hFQUQgKCZkZXYtPmdhZGdldC5lcF9saXN0KTsKKwlkZXYtPmdhZGdldC5lcDAgPSAmZGV2LT5lcCBbMF0uZXA7CisJZGV2LT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKwlkZXYtPmVwMHN0YXRlID0gRVAwX0RJU0NPTk5FQ1Q7CisJZGV2LT5pcnFzID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJc3RydWN0IGdva3VfZXAJKmVwID0gJmRldi0+ZXBbaV07CisKKwkJZXAtPm51bSA9IGk7CisJCWVwLT5lcC5uYW1lID0gbmFtZXNbaV07CisJCWVwLT5yZWdfZmlmbyA9ICZkZXYtPnJlZ3MtPmVwX2ZpZm8gW2ldOworCQllcC0+cmVnX3N0YXR1cyA9ICZkZXYtPnJlZ3MtPmVwX3N0YXR1cyBbaV07CisJCWVwLT5yZWdfbW9kZSA9ICZkZXYtPnJlZ3MtPmVwX21vZGVbaV07CisKKwkJZXAtPmVwLm9wcyA9ICZnb2t1X2VwX29wczsKKwkJbGlzdF9hZGRfdGFpbCAoJmVwLT5lcC5lcF9saXN0LCAmZGV2LT5nYWRnZXQuZXBfbGlzdCk7CisJCWVwLT5kZXYgPSBkZXY7CisJCUlOSVRfTElTVF9IRUFEICgmZXAtPnF1ZXVlKTsKKworCQllcF9yZXNldChOVUxMLCBlcCk7CisJfQorCisJZGV2LT5lcFswXS5yZWdfbW9kZSA9IE5VTEw7CisJZGV2LT5lcFswXS5lcC5tYXhwYWNrZXQgPSBNQVhfRVAwX1NJWkU7CisJbGlzdF9kZWxfaW5pdCAoJmRldi0+ZXBbMF0uZXAuZXBfbGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHVkY19yZXNldChzdHJ1Y3QgZ29rdV91ZGMgKmRldikKK3sKKwlzdHJ1Y3QgZ29rdV91ZGNfcmVncyBfX2lvbWVtCSpyZWdzID0gZGV2LT5yZWdzOworCisJd3JpdGVsKDAsICZyZWdzLT5wb3dlcl9kZXRlY3QpOworCXdyaXRlbCgwLCAmcmVncy0+aW50X2VuYWJsZSk7CisJcmVhZGwoJnJlZ3MtPmludF9lbmFibGUpOworCWRldi0+aW50X2VuYWJsZSA9IDA7CisKKwkvKiBkZWFzc2VydCByZXNldCwgbGVhdmUgVVNCIEQrIGF0IGhpLVogKG5vIHB1bGx1cCkKKwkgKiBkb24ndCBsZXQgSU5UX1BXUkRFVEVDVCBzZXF1ZW5jZSBiZWdpbgorCSAqLworCXVkZWxheSgyNTApOworCXdyaXRlbChQV19SRVNFVEIsICZyZWdzLT5wb3dlcl9kZXRlY3QpOworCXJlYWRsKCZyZWdzLT5pbnRfZW5hYmxlKTsKK30KKworc3RhdGljIHZvaWQgZXAwX3N0YXJ0KHN0cnVjdCBnb2t1X3VkYyAqZGV2KQoreworCXN0cnVjdCBnb2t1X3VkY19yZWdzIF9faW9tZW0JKnJlZ3MgPSBkZXYtPnJlZ3M7CisJdW5zaWduZWQJCQlpOworCisJVkRCRyhkZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCXVkY19yZXNldChkZXYpOworCXVkY19yZWluaXQgKGRldik7CisJLy93cml0ZWwoTVNUX0VPUEJfRU5BIHwgTVNUX1RJTUVPVVRfRU5BLCAmcmVncy0+ZG1hX21hc3Rlcik7CisKKwkvKiBodyBoYW5kbGVzIHNldF9hZGRyZXNzLCBzZXRfZmVhdHVyZSwgZ2V0X3N0YXR1czsgbWF5YmUgbW9yZSAqLworCXdyaXRlbCggICBHX1JFUU1PREVfU0VUX0lOVEYgfCBHX1JFUU1PREVfR0VUX0lOVEYKKwkJfCBHX1JFUU1PREVfU0VUX0NPTkYgfCBHX1JFUU1PREVfR0VUX0NPTkYKKwkJfCBHX1JFUU1PREVfR0VUX0RFU0MKKwkJfCBHX1JFUU1PREVfQ0xFQVJfRkVBVAorCQksICZyZWdzLT5yZXFtb2RlKTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWRldi0+ZXBbaV0uaXJxcyA9IDA7CisKKwkvKiBjYW4ndCBtb2RpZnkgZGVzY3JpcHRvcnMgYWZ0ZXIgd3JpdGluZyBVc2JSZWFkeSAqLworCWZvciAoaSA9IDA7IGkgPCBERVNDX0xFTjsgaSsrKQorCQl3cml0ZWwoMCwgJnJlZ3MtPmRlc2NyaXB0b3JzW2ldKTsKKwl3cml0ZWwoMCwgJnJlZ3MtPlVzYlJlYWR5KTsKKworCS8qIGV4cGVjdCBlcDAgcmVxdWVzdHMgd2hlbiB0aGUgaG9zdCBkcm9wcyByZXNldCAqLworCXdyaXRlbChQV19SRVNFVEIgfCBQV19QVUxMVVAsICZyZWdzLT5wb3dlcl9kZXRlY3QpOworCWRldi0+aW50X2VuYWJsZSA9IElOVF9ERVZXSURFIHwgSU5UX0VQMDsKKwl3cml0ZWwoZGV2LT5pbnRfZW5hYmxlLCAmZGV2LT5yZWdzLT5pbnRfZW5hYmxlKTsKKwlyZWFkbCgmcmVncy0+aW50X2VuYWJsZSk7CisJZGV2LT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfRlVMTDsKKwlkZXYtPmVwMHN0YXRlID0gRVAwX0lETEU7Cit9CisKK3N0YXRpYyB2b2lkIHVkY19lbmFibGUoc3RydWN0IGdva3VfdWRjICpkZXYpCit7CisJLyogc3RhcnQgZW51bWVyYXRpb24gbm93LCBvciBhZnRlciBwb3dlciBkZXRlY3QgaXJxICovCisJaWYgKHJlYWRsKCZkZXYtPnJlZ3MtPnBvd2VyX2RldGVjdCkgJiBQV19ERVRFQ1QpCisJCWVwMF9zdGFydChkZXYpOworCWVsc2UgeworCQlEQkcoZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWRldi0+aW50X2VuYWJsZSA9IElOVF9QV1JERVRFQ1Q7CisJCXdyaXRlbChkZXYtPmludF9lbmFibGUsICZkZXYtPnJlZ3MtPmludF9lbmFibGUpOworCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoga2VlcGluZyBpdCBzaW1wbGU6CisgKiAtIG9uZSBidXMgZHJpdmVyLCBpbml0dGVkIGZpcnN0OworICogLSBvbmUgZnVuY3Rpb24gZHJpdmVyLCBpbml0dGVkIHNlY29uZAorICovCisKK3N0YXRpYyBzdHJ1Y3QgZ29rdV91ZGMJKnRoZV9jb250cm9sbGVyOworCisvKiB3aGVuIGEgZHJpdmVyIGlzIHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkLCBpdCB3aWxsIHJlY2VpdmUKKyAqIGNvbnRyb2wgcmVxdWVzdHMgaW5jbHVkaW5nIHNldF9jb25maWd1cmF0aW9uKCksIHdoaWNoIGVuYWJsZXMKKyAqIG5vbi1jb250cm9sIHJlcXVlc3RzLiAgdGhlbiB1c2IgdHJhZmZpYyBmb2xsb3dzIHVudGlsIGEKKyAqIGRpc2Nvbm5lY3QgaXMgcmVwb3J0ZWQuICB0aGVuIGEgaG9zdCBtYXkgY29ubmVjdCBhZ2Fpbiwgb3IKKyAqIHRoZSBkcml2ZXIgbWlnaHQgZ2V0IHVuYm91bmQuCisgKi8KK2ludCB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwlzdHJ1Y3QgZ29rdV91ZGMJKmRldiA9IHRoZV9jb250cm9sbGVyOworCWludAkJCXJldHZhbDsKKworCWlmICghZHJpdmVyCisJCQl8fCBkcml2ZXItPnNwZWVkICE9IFVTQl9TUEVFRF9GVUxMCisJCQl8fCAhZHJpdmVyLT5iaW5kCisJCQl8fCAhZHJpdmVyLT51bmJpbmQKKwkJCXx8ICFkcml2ZXItPmRpc2Nvbm5lY3QKKwkJCXx8ICFkcml2ZXItPnNldHVwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKGRldi0+ZHJpdmVyKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogaG9vayB1cCB0aGUgZHJpdmVyICovCisJZHJpdmVyLT5kcml2ZXIuYnVzID0gTlVMTDsKKwlkZXYtPmRyaXZlciA9IGRyaXZlcjsKKwlkZXYtPmdhZGdldC5kZXYuZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOworCXJldHZhbCA9IGRyaXZlci0+YmluZCgmZGV2LT5nYWRnZXQpOworCWlmIChyZXR2YWwpIHsKKwkJREJHKGRldiwgImJpbmQgdG8gZHJpdmVyICVzIC0tPiBlcnJvciAlZFxuIiwKKwkJCQlkcml2ZXItPmRyaXZlci5uYW1lLCByZXR2YWwpOworCQlkZXYtPmRyaXZlciA9IE5VTEw7CisJCWRldi0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCS8qIHRoZW4gZW5hYmxlIGhvc3QgZGV0ZWN0aW9uIGFuZCBlcDA7IGFuZCB3ZSdyZSByZWFkeQorCSAqIGZvciBzZXRfY29uZmlndXJhdGlvbiBhcyB3ZWxsIGFzIGV2ZW50dWFsIGRpc2Nvbm5lY3QuCisJICovCisJdWRjX2VuYWJsZShkZXYpOworCisJREJHKGRldiwgInJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIpOworCitzdGF0aWMgdm9pZAorc3RvcF9hY3Rpdml0eShzdHJ1Y3QgZ29rdV91ZGMgKmRldiwgc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCit7CisJdW5zaWduZWQJaTsKKworCURCRyAoZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pCisJCWRyaXZlciA9IE5VTEw7CisKKwkvKiBkaXNjb25uZWN0IGdhZGdldCBkcml2ZXIgYWZ0ZXIgcXVpZXNjZWluZyBodyBhbmQgdGhlIGRyaXZlciAqLworCXVkY19yZXNldCAoZGV2KTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQludWtlKCZkZXYtPmVwIFtpXSwgLUVTSFVURE9XTik7CisJaWYgKGRyaXZlcikgeworCQlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsKKwkJZHJpdmVyLT5kaXNjb25uZWN0KCZkZXYtPmdhZGdldCk7CisJCXNwaW5fbG9jaygmZGV2LT5sb2NrKTsKKwl9CisKKwlpZiAoZGV2LT5kcml2ZXIpCisJCXVkY19lbmFibGUoZGV2KTsKK30KKworaW50IHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCit7CisJc3RydWN0IGdva3VfdWRjCSpkZXYgPSB0aGVfY29udHJvbGxlcjsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PREVWOworCWlmICghZHJpdmVyIHx8IGRyaXZlciAhPSBkZXYtPmRyaXZlcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJZGV2LT5kcml2ZXIgPSBOVUxMOworCXN0b3BfYWN0aXZpdHkoZGV2LCBkcml2ZXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJZHJpdmVyLT51bmJpbmQoJmRldi0+Z2FkZ2V0KTsKKworCURCRyhkZXYsICJ1bnJlZ2lzdGVyZWQgZHJpdmVyICclcydcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBlcDBfc2V0dXAoc3RydWN0IGdva3VfdWRjICpkZXYpCit7CisJc3RydWN0IGdva3VfdWRjX3JlZ3MgX19pb21lbQkqcmVncyA9IGRldi0+cmVnczsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0CQljdHJsOworCWludAkJCQl0bXA7CisKKwkvKiByZWFkIFNFVFVQIHBhY2tldCBhbmQgZW50ZXIgREFUQSBzdGFnZSAqLworCWN0cmwuYlJlcXVlc3RUeXBlID0gcmVhZGwoJnJlZ3MtPmJSZXF1ZXN0VHlwZSk7CisJY3RybC5iUmVxdWVzdCA9IHJlYWRsKCZyZWdzLT5iUmVxdWVzdCk7CisJY3RybC53VmFsdWUgID0gKHJlYWRsKCZyZWdzLT53VmFsdWVIKSAgPDwgOCkgfCByZWFkbCgmcmVncy0+d1ZhbHVlTCk7CisJY3RybC53SW5kZXggID0gKHJlYWRsKCZyZWdzLT53SW5kZXhIKSAgPDwgOCkgfCByZWFkbCgmcmVncy0+d0luZGV4TCk7CisJY3RybC53TGVuZ3RoID0gKHJlYWRsKCZyZWdzLT53TGVuZ3RoSCkgPDwgOCkgfCByZWFkbCgmcmVncy0+d0xlbmd0aEwpOworCXdyaXRlbCgwLCAmcmVncy0+U2V0dXBSZWN2KTsKKworCW51a2UoJmRldi0+ZXBbMF0sIDApOworCWRldi0+ZXBbMF0uc3RvcHBlZCA9IDA7CisJaWYgKGxpa2VseShjdHJsLmJSZXF1ZXN0VHlwZSAmIFVTQl9ESVJfSU4pKSB7CisJCWRldi0+ZXBbMF0uaXNfaW4gPSAxOworCQlkZXYtPmVwMHN0YXRlID0gRVAwX0lOOworCQkvKiBkZXRlY3QgZWFybHkgc3RhdHVzIHN0YWdlcyAqLworCQl3cml0ZWwoSUNPTlRST0xfU1RBVFVTTkFLLCAmZGV2LT5yZWdzLT5JbnRDb250cm9sKTsKKwl9IGVsc2UgeworCQlkZXYtPmVwWzBdLmlzX2luID0gMDsKKwkJZGV2LT5lcDBzdGF0ZSA9IEVQMF9PVVQ7CisKKwkJLyogTk9URTogIENMRUFSX0ZFQVRVUkUgaXMgZG9uZSBpbiBzb2Z0d2FyZSBzbyB0aGF0IHdlIGNhbgorCQkgKiBzeW5jaHJvbml6ZSB0cmFuc2ZlciByZXN0YXJ0cyBhZnRlciBidWxrIElOIHN0YWxscy4gIGRhdGEKKwkJICogd29uJ3QgZXZlbiBlbnRlciB0aGUgZmlmbyB1bnRpbCB0aGUgaGFsdCBpcyBjbGVhcmVkLgorCQkgKi8KKwkJc3dpdGNoIChjdHJsLmJSZXF1ZXN0KSB7CisJCWNhc2UgVVNCX1JFUV9DTEVBUl9GRUFUVVJFOgorCQkJc3dpdGNoIChjdHJsLmJSZXF1ZXN0VHlwZSkgeworCQkJY2FzZSBVU0JfUkVDSVBfRU5EUE9JTlQ6CisJCQkJdG1wID0gY3RybC53SW5kZXggJiAweDBmOworCQkJCS8qIGFjdGl2ZSBlbmRwb2ludCAqLworCQkJCWlmICh0bXAgPiAzIHx8ICghZGV2LT5lcFt0bXBdLmRlc2MgJiYgdG1wICE9IDApKQorCQkJCQlnb3RvIHN0YWxsOworCQkJCWlmIChjdHJsLndJbmRleCAmIFVTQl9ESVJfSU4pIHsKKwkJCQkJaWYgKCFkZXYtPmVwW3RtcF0uaXNfaW4pCisJCQkJCQlnb3RvIHN0YWxsOworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChkZXYtPmVwW3RtcF0uaXNfaW4pCisJCQkJCQlnb3RvIHN0YWxsOworCQkJCX0KKwkJCQlpZiAoY3RybC53VmFsdWUgIT0gVVNCX0VORFBPSU5UX0hBTFQpCisJCQkJCWdvdG8gc3RhbGw7CisJCQkJaWYgKHRtcCkKKwkJCQkJZ29rdV9jbGVhcl9oYWx0KCZkZXYtPmVwW3RtcF0pOworc3VjY2VlZDoKKwkJCQkvKiBzdGFydCBlcDBvdXQgc3RhdHVzIHN0YWdlICovCisJCQkJd3JpdGVsKH4oMTw8MCksICZyZWdzLT5FT1ApOworCQkJCWRldi0+ZXBbMF0uc3RvcHBlZCA9IDE7CisJCQkJZGV2LT5lcDBzdGF0ZSA9IEVQMF9TVEFUVVM7CisJCQkJcmV0dXJuOworCQkJY2FzZSBVU0JfUkVDSVBfREVWSUNFOgorCQkJCS8qIGRldmljZSByZW1vdGUgd2FrZXVwOiBhbHdheXMgY2xlYXIgKi8KKwkJCQlpZiAoY3RybC53VmFsdWUgIT0gMSkKKwkJCQkJZ290byBzdGFsbDsKKwkJCQlWREJHKGRldiwgImNsZWFyIGRldiByZW1vdGUgd2FrZXVwXG4iKTsKKwkJCQlnb3RvIHN1Y2NlZWQ7CisJCQljYXNlIFVTQl9SRUNJUF9JTlRFUkZBQ0U6CisJCQkJZ290byBzdGFsbDsKKwkJCWRlZmF1bHQ6CQkvKiBwYXNzIHRvIGdhZGdldCBkcml2ZXIgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKyNpZmRlZiBVU0JfVFJBQ0UKKwlWREJHKGRldiwgIlNFVFVQICUwMnguJTAyeCB2JTA0eCBpJTA0eCBsJTA0eFxuIiwKKwkJY3RybC5iUmVxdWVzdFR5cGUsIGN0cmwuYlJlcXVlc3QsCisJCWN0cmwud1ZhbHVlLCBjdHJsLndJbmRleCwgY3RybC53TGVuZ3RoKTsKKyNlbmRpZgorCisJLyogaHcgd2FudHMgdG8ga25vdyB3aGVuIHdlJ3JlIGNvbmZpZ3VyZWQgKG9yIG5vdCkgKi8KKwlkZXYtPnJlcV9jb25maWcgPSAoY3RybC5iUmVxdWVzdCA9PSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OCisJCQkJJiYgY3RybC5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0RFVklDRSk7CisJaWYgKHVubGlrZWx5KGRldi0+cmVxX2NvbmZpZykpCisJCWRldi0+Y29uZmlndXJlZCA9IChjdHJsLndWYWx1ZSAhPSAwKTsKKworCS8qIGRlbGVnYXRlIGV2ZXJ5dGhpbmcgdG8gdGhlIGdhZGdldCBkcml2ZXIuCisJICogaXQgbWF5IHJlc3BvbmQgYWZ0ZXIgdGhpcyBpcnEgaGFuZGxlciByZXR1cm5zLgorCSAqLworCXNwaW5fdW5sb2NrICgmZGV2LT5sb2NrKTsKKwl0bXAgPSBkZXYtPmRyaXZlci0+c2V0dXAoJmRldi0+Z2FkZ2V0LCAmY3RybCk7CisJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKKwlpZiAodW5saWtlbHkodG1wIDwgMCkpIHsKK3N0YWxsOgorI2lmZGVmIFVTQl9UUkFDRQorCQlWREJHKGRldiwgInJlcSAlMDJ4LiUwMnggcHJvdG9jb2wgU1RBTEw7IGVyciAlZFxuIiwKKwkJCQljdHJsLmJSZXF1ZXN0VHlwZSwgY3RybC5iUmVxdWVzdCwgdG1wKTsKKyNlbmRpZgorCQljb21tYW5kKHJlZ3MsIENPTU1BTkRfU1RBTEwsIDApOworCQlkZXYtPmVwWzBdLnN0b3BwZWQgPSAxOworCQlkZXYtPmVwMHN0YXRlID0gRVAwX1NUQUxMOworCX0KKworCS8qIGV4cGVjdCBhdCBsZWFzdCBvbmUgZGF0YSBvciBzdGF0dXMgc3RhZ2UgaXJxICovCit9CisKKyNkZWZpbmUgQUNLKGlycWJpdCkgeyBcCisJCXN0YXQgJj0gfmlycWJpdDsgXAorCQl3cml0ZWwofmlycWJpdCwgJnJlZ3MtPmludF9zdGF0dXMpOyBcCisJCWhhbmRsZWQgPSAxOyBcCisJCX0KKworc3RhdGljIGlycXJldHVybl90IGdva3VfaXJxKGludCBpcnEsIHZvaWQgKl9kZXYsIHN0cnVjdCBwdF9yZWdzICpyKQoreworCXN0cnVjdCBnb2t1X3VkYwkJCSpkZXYgPSBfZGV2OworCXN0cnVjdCBnb2t1X3VkY19yZWdzIF9faW9tZW0JKnJlZ3MgPSBkZXYtPnJlZ3M7CisJc3RydWN0IGdva3VfZXAJCQkqZXA7CisJdTMyCQkJCXN0YXQsIGhhbmRsZWQgPSAwOworCXVuc2lnbmVkCQkJaSwgcmVzY2FucyA9IDU7CisKKwlzcGluX2xvY2soJmRldi0+bG9jayk7CisKK3Jlc2NhbjoKKwlzdGF0ID0gcmVhZGwoJnJlZ3MtPmludF9zdGF0dXMpICYgZGV2LT5pbnRfZW5hYmxlOworICAgICAgICBpZiAoIXN0YXQpCisJCWdvdG8gZG9uZTsKKwlkZXYtPmlycXMrKzsKKworCS8qIGRldmljZS13aWRlIGlycXMgKi8KKwlpZiAodW5saWtlbHkoc3RhdCAmIElOVF9ERVZXSURFKSkgeworCQlpZiAoc3RhdCAmIElOVF9TWVNFUlJPUikgeworCQkJRVJST1IoZGV2LCAic3lzdGVtIGVycm9yXG4iKTsKKwkJCXN0b3BfYWN0aXZpdHkoZGV2LCBkZXYtPmRyaXZlcik7CisJCQlzdGF0ID0gMDsKKwkJCWhhbmRsZWQgPSAxOworCQkJLy8gRklYTUUgaGF2ZSBhIG5lYXRlciB3YXkgdG8gcHJldmVudCByZS1lbnVtZXJhdGlvbgorCQkJZGV2LT5kcml2ZXIgPSBOVUxMOworCQkJZ290byBkb25lOworCQl9CisJCWlmIChzdGF0ICYgSU5UX1BXUkRFVEVDVCkgeworCQkJd3JpdGVsKH5zdGF0LCAmcmVncy0+aW50X3N0YXR1cyk7CisJCQlpZiAocmVhZGwoJmRldi0+cmVncy0+cG93ZXJfZGV0ZWN0KSAmIFBXX0RFVEVDVCkgeworCQkJCVZEQkcoZGV2LCAiY29ubmVjdFxuIik7CisJCQkJZXAwX3N0YXJ0KGRldik7CisJCQl9IGVsc2UgeworCQkJCURCRyhkZXYsICJkaXNjb25uZWN0XG4iKTsKKwkJCQlpZiAoZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwpCisJCQkJCXN0b3BfYWN0aXZpdHkoZGV2LCBkZXYtPmRyaXZlcik7CisJCQkJZGV2LT5lcDBzdGF0ZSA9IEVQMF9ESVNDT05ORUNUOworCQkJCWRldi0+aW50X2VuYWJsZSA9IElOVF9ERVZXSURFOworCQkJCXdyaXRlbChkZXYtPmludF9lbmFibGUsICZkZXYtPnJlZ3MtPmludF9lbmFibGUpOworCQkJfQorCQkJc3RhdCA9IDA7CisJCQloYW5kbGVkID0gMTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlpZiAoc3RhdCAmIElOVF9TVVNQRU5EKSB7CisJCQlBQ0soSU5UX1NVU1BFTkQpOworCQkJaWYgKHJlYWRsKCZyZWdzLT5lcF9zdGF0dXNbMF0pICYgRVB4U1RBVFVTX1NVU1BFTkQpIHsKKwkJCQlzd2l0Y2ggKGRldi0+ZXAwc3RhdGUpIHsKKwkJCQljYXNlIEVQMF9ESVNDT05ORUNUOgorCQkJCWNhc2UgRVAwX1NVU1BFTkQ6CisJCQkJCWdvdG8gcG1fbmV4dDsKKwkJCQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJCQl9CisJCQkJREJHKGRldiwgIlVTQiBzdXNwZW5kXG4iKTsKKwkJCQlkZXYtPmVwMHN0YXRlID0gRVAwX1NVU1BFTkQ7CisJCQkJaWYgKGRldi0+Z2FkZ2V0LnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOCisJCQkJCQkmJiBkZXYtPmRyaXZlcgorCQkJCQkJJiYgZGV2LT5kcml2ZXItPnN1c3BlbmQpIHsKKwkJCQkJc3Bpbl91bmxvY2soJmRldi0+bG9jayk7CisJCQkJCWRldi0+ZHJpdmVyLT5zdXNwZW5kKCZkZXYtPmdhZGdldCk7CisJCQkJCXNwaW5fbG9jaygmZGV2LT5sb2NrKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmIChkZXYtPmVwMHN0YXRlICE9IEVQMF9TVVNQRU5EKSB7CisJCQkJCURCRyhkZXYsICJib2d1cyBVU0IgcmVzdW1lICVkXG4iLAorCQkJCQkJZGV2LT5lcDBzdGF0ZSk7CisJCQkJCWdvdG8gcG1fbmV4dDsKKwkJCQl9CisJCQkJREJHKGRldiwgIlVTQiByZXN1bWVcbiIpOworCQkJCWRldi0+ZXAwc3RhdGUgPSBFUDBfSURMRTsKKwkJCQlpZiAoZGV2LT5nYWRnZXQuc3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04KKwkJCQkJCSYmIGRldi0+ZHJpdmVyCisJCQkJCQkmJiBkZXYtPmRyaXZlci0+cmVzdW1lKSB7CisJCQkJCXNwaW5fdW5sb2NrKCZkZXYtPmxvY2spOworCQkJCQlkZXYtPmRyaXZlci0+cmVzdW1lKCZkZXYtPmdhZGdldCk7CisJCQkJCXNwaW5fbG9jaygmZGV2LT5sb2NrKTsKKwkJCQl9CisJCQl9CisJCX0KK3BtX25leHQ6CisJCWlmIChzdGF0ICYgSU5UX1VTQlJFU0VUKSB7CQkvKiBodWIgcmVzZXQgZG9uZSAqLworCQkJQUNLKElOVF9VU0JSRVNFVCk7CisJCQlJTkZPKGRldiwgIlVTQiByZXNldCBkb25lLCBnYWRnZXQgJXNcbiIsCisJCQkJZGV2LT5kcml2ZXItPmRyaXZlci5uYW1lKTsKKwkJfQorCQkvLyBhbmQgSU5UX0VSUiBvbiBzb21lIGVuZHBvaW50J3MgY3JjL2JpdHN0dWZmLy4uLiBwcm9ibGVtCisJfQorCisJLyogcHJvZ3Jlc3MgZXAwIHNldHVwLCBkYXRhLCBvciBzdGF0dXMgc3RhZ2VzLgorCSAqIG5vIHRyYW5zaXRpb24ge0VQMF9TVEFUVVMsIEVQMF9TVEFMTH0gLS0+IEVQMF9JRExFOyBzYXZlcyBpcnFzCisJICovCisJaWYgKHN0YXQgJiBJTlRfU0VUVVApIHsKKwkJQUNLKElOVF9TRVRVUCk7CisJCWRldi0+ZXBbMF0uaXJxcysrOworCQllcDBfc2V0dXAoZGV2KTsKKwl9CisgICAgICAgIGlmIChzdGF0ICYgSU5UX1NUQVRVU05BSykgeworCQlBQ0soSU5UX1NUQVRVU05BS3xJTlRfRU5EUE9JTlQwKTsKKwkJaWYgKGRldi0+ZXAwc3RhdGUgPT0gRVAwX0lOKSB7CisJCQllcCA9ICZkZXYtPmVwWzBdOworCQkJZXAtPmlycXMrKzsKKwkJCW51a2UoZXAsIDApOworCQkJd3JpdGVsKH4oMTw8MCksICZyZWdzLT5FT1ApOworCQkJZGV2LT5lcDBzdGF0ZSA9IEVQMF9TVEFUVVM7CisJCX0KKwl9CisgICAgICAgIGlmIChzdGF0ICYgSU5UX0VORFBPSU5UMCkgeworCQlBQ0soSU5UX0VORFBPSU5UMCk7CisJCWVwID0gJmRldi0+ZXBbMF07CisJCWVwLT5pcnFzKys7CisJCXBpb19hZHZhbmNlKGVwKTsKKyAgICAgICAgfQorCisJLyogZG1hIGNvbXBsZXRpb24gKi8KKyAgICAgICAgaWYgKHN0YXQgJiBJTlRfTVNUUkRFTkQpIHsJLyogSU4gKi8KKwkJQUNLKElOVF9NU1RSREVORCk7CisJCWVwID0gJmRldi0+ZXBbVURDX01TVFJEX0VORFBPSU5UXTsKKwkJZXAtPmlycXMrKzsKKwkJZG1hX2FkdmFuY2UoZGV2LCBlcCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXQgJiBJTlRfTVNUV1JFTkQpIHsJLyogT1VUICovCisJCUFDSyhJTlRfTVNUV1JFTkQpOworCQllcCA9ICZkZXYtPmVwW1VEQ19NU1RXUl9FTkRQT0lOVF07CisJCWVwLT5pcnFzKys7CisJCWRtYV9hZHZhbmNlKGRldiwgZXApOworICAgICAgICB9CisgICAgICAgIGlmIChzdGF0ICYgSU5UX01TVFdSVE1PVVQpIHsJLyogT1VUICovCisJCUFDSyhJTlRfTVNUV1JUTU9VVCk7CisJCWVwID0gJmRldi0+ZXBbVURDX01TVFdSX0VORFBPSU5UXTsKKwkJZXAtPmlycXMrKzsKKwkJRVJST1IoZGV2LCAiJXMgd3JpdGUgdGltZW91dCA/XG4iLCBlcC0+ZXAubmFtZSk7CisJCS8vIHJlc2V0IGRtYT8gdGhlbiBkbWFfYWR2YW5jZSgpCisgICAgICAgIH0KKworCS8qIHBpbyAqLworCWZvciAoaSA9IDE7IGkgPCA0OyBpKyspIHsKKwkJdTMyCQl0bXAgPSBJTlRfRVB4REFUQVNFVChpKTsKKworCQlpZiAoIShzdGF0ICYgdG1wKSkKKwkJCWNvbnRpbnVlOworCQllcCA9ICZkZXYtPmVwW2ldOworCQlwaW9fYWR2YW5jZShlcCk7CisJCWlmIChsaXN0X2VtcHR5ICgmZXAtPnF1ZXVlKSkKKwkJCXBpb19pcnFfZGlzYWJsZShkZXYsIHJlZ3MsIGkpOworCQlzdGF0ICY9IH50bXA7CisJCWhhbmRsZWQgPSAxOworCQllcC0+aXJxcysrOworCX0KKworCWlmIChyZXNjYW5zLS0pCisJCWdvdG8gcmVzY2FuOworCitkb25lOgorCSh2b2lkKXJlYWRsKCZyZWdzLT5pbnRfZW5hYmxlKTsKKwlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsKKwlpZiAoc3RhdCkKKwkJREJHKGRldiwgInVuaGFuZGxlZCBpcnEgc3RhdHVzOiAlMDV4ICglMDV4LCAlMDV4KVxuIiwgc3RhdCwKKwkJCQlyZWFkbCgmcmVncy0+aW50X3N0YXR1cyksIGRldi0+aW50X2VuYWJsZSk7CisJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7Cit9CisKKyN1bmRlZiBBQ0sKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgZ2FkZ2V0X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqX2RldikKK3sKKwlzdHJ1Y3QgZ29rdV91ZGMJKmRldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKworCWtmcmVlKGRldik7Cit9CisKKy8qIHRlYXIgZG93biB0aGUgYmluZGluZyBiZXR3ZWVuIHRoaXMgZHJpdmVyIGFuZCB0aGUgcGNpIGRldmljZSAqLworCitzdGF0aWMgdm9pZCBnb2t1X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgZ29rdV91ZGMJCSpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlEQkcoZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJLyogc3RhcnQgd2l0aCB0aGUgZHJpdmVyIGFib3ZlIHVzICovCisJaWYgKGRldi0+ZHJpdmVyKSB7CisJCS8qIHNob3VsZCBoYXZlIGJlZW4gZG9uZSBhbHJlYWR5IGJ5IGRyaXZlciBtb2RlbCBjb3JlICovCisJCVdBUk4oZGV2LCAicGNpIHJlbW92ZSwgZHJpdmVyICclcycgaXMgc3RpbGwgcmVnaXN0ZXJlZFxuIiwKKwkJCQlkZXYtPmRyaXZlci0+ZHJpdmVyLm5hbWUpOworCQl1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKGRldi0+ZHJpdmVyKTsKKwl9CisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUworCXJlbW92ZV9wcm9jX2VudHJ5KHByb2Nfbm9kZV9uYW1lLCBOVUxMKTsKKyNlbmRpZgorCWlmIChkZXYtPnJlZ3MpCisJCXVkY19yZXNldChkZXYpOworCWlmIChkZXYtPmdvdF9pcnEpCisJCWZyZWVfaXJxKHBkZXYtPmlycSwgZGV2KTsKKwlpZiAoZGV2LT5yZWdzKQorCQlpb3VubWFwKGRldi0+cmVncyk7CisJaWYgKGRldi0+Z290X3JlZ2lvbikKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydCAocGRldiwgMCksCisJCQkJcGNpX3Jlc291cmNlX2xlbiAocGRldiwgMCkpOworCWlmIChkZXYtPmVuYWJsZWQpCisJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlkZXZpY2VfdW5yZWdpc3RlcigmZGV2LT5nYWRnZXQuZGV2KTsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlkZXYtPnJlZ3MgPSBOVUxMOworCXRoZV9jb250cm9sbGVyID0gTlVMTDsKKworCUlORk8oZGV2LCAidW5iaW5kXG4iKTsKK30KKworLyogd3JhcCB0aGlzIGRyaXZlciBhcm91bmQgdGhlIHNwZWNpZmllZCBwY2kgZGV2aWNlLCBidXQKKyAqIGRvbid0IHJlc3BvbmQgb3ZlciBVU0IgdW50aWwgYSBnYWRnZXQgZHJpdmVyIGJpbmRzIHRvIHVzLgorICovCisKK3N0YXRpYyBpbnQgZ29rdV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBnb2t1X3VkYwkJKmRldiA9IE5VTEw7CisJdW5zaWduZWQgbG9uZwkJcmVzb3VyY2UsIGxlbjsKKwl2b2lkIF9faW9tZW0JCSpiYXNlID0gTlVMTDsKKwlpbnQJCQlyZXR2YWw7CisJY2hhcgkJCWJ1ZiBbOF0sICpidWZwOworCisJLyogaWYgeW91IHdhbnQgdG8gc3VwcG9ydCBtb3JlIHRoYW4gb25lIGNvbnRyb2xsZXIgaW4gYSBzeXN0ZW0sCisJICogdXNiX2dhZGdldF9kcml2ZXJfe3JlZ2lzdGVyLHVucmVnaXN0ZXJ9KCkgbXVzdCBjaGFuZ2UuCisJICovCisJaWYgKHRoZV9jb250cm9sbGVyKSB7CisJCVdBUk4oZGV2LCAiaWdub3JpbmcgJXNcbiIsIHBjaV9uYW1lKHBkZXYpKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJaWYgKCFwZGV2LT5pcnEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDaGVjayBQQ0kgJXMgSVJRIHNldHVwIVxuIiwgcGNpX25hbWUocGRldikpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogYWxsb2MsIGFuZCBzdGFydCBpbml0ICovCisJZGV2ID0ga21hbGxvYyAoc2l6ZW9mICpkZXYsIFNMQUJfS0VSTkVMKTsKKwlpZiAoZGV2ID09IE5VTEwpeworCQlwcl9kZWJ1ZygiZW5vbWVtICVzXG4iLCBwY2lfbmFtZShwZGV2KSk7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisKKwltZW1zZXQoZGV2LCAwLCBzaXplb2YgKmRldik7CisJc3Bpbl9sb2NrX2luaXQoJmRldi0+bG9jayk7CisJZGV2LT5wZGV2ID0gcGRldjsKKwlkZXYtPmdhZGdldC5vcHMgPSAmZ29rdV9vcHM7CisKKwkvKiB0aGUgImdhZGdldCIgYWJzdHJhY3RzL3ZpcnR1YWxpemVzIHRoZSBjb250cm9sbGVyICovCisJc3RyY3B5KGRldi0+Z2FkZ2V0LmRldi5idXNfaWQsICJnYWRnZXQiKTsKKwlkZXYtPmdhZGdldC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKwlkZXYtPmdhZGdldC5kZXYuZG1hX21hc2sgPSBwZGV2LT5kZXYuZG1hX21hc2s7CisJZGV2LT5nYWRnZXQuZGV2LnJlbGVhc2UgPSBnYWRnZXRfcmVsZWFzZTsKKwlkZXYtPmdhZGdldC5uYW1lID0gZHJpdmVyX25hbWU7CisKKwkvKiBub3cgYWxsIHRoZSBwY2kgZ29vZGllcyAuLi4gKi8KKwlyZXR2YWwgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlEQkcoZGV2LCAiY2FuJ3QgZW5hYmxlLCAlZFxuIiwgcmV0dmFsKTsKKwkJZ290byBkb25lOworCX0KKwlkZXYtPmVuYWJsZWQgPSAxOworCisJcmVzb3VyY2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXNvdXJjZSwgbGVuLCBkcml2ZXJfbmFtZSkpIHsKKwkJREJHKGRldiwgImNvbnRyb2xsZXIgYWxyZWFkeSBpbiB1c2VcbiIpOworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZG9uZTsKKwl9CisJZGV2LT5nb3RfcmVnaW9uID0gMTsKKworCWJhc2UgPSBpb3JlbWFwX25vY2FjaGUocmVzb3VyY2UsIGxlbik7CisJaWYgKGJhc2UgPT0gTlVMTCkgeworCQlEQkcoZGV2LCAiY2FuJ3QgbWFwIG1lbW9yeVxuIik7CisJCXJldHZhbCA9IC1FRkFVTFQ7CisJCWdvdG8gZG9uZTsKKwl9CisJZGV2LT5yZWdzID0gKHN0cnVjdCBnb2t1X3VkY19yZWdzIF9faW9tZW0gKikgYmFzZTsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOworCUlORk8oZGV2LCAiJXNcbiIsIGRyaXZlcl9kZXNjKTsKKwlJTkZPKGRldiwgInZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04gIiAlc1xuIiwgZG1hc3RyKCkpOworI2lmbmRlZiBfX3NwYXJjX18KKwlzY25wcmludGYoYnVmLCBzaXplb2YgYnVmLCAiJWQiLCBwZGV2LT5pcnEpOworCWJ1ZnAgPSBidWY7CisjZWxzZQorCWJ1ZnAgPSBfX2lycV9pdG9hKHBkZXYtPmlycSk7CisjZW5kaWYKKwlJTkZPKGRldiwgImlycSAlcywgcGNpIG1lbSAlcFxuIiwgYnVmcCwgYmFzZSk7CisKKwkvKiBpbml0IHRvIGtub3duIHN0YXRlLCB0aGVuIHNldHVwIGlycXMgKi8KKwl1ZGNfcmVzZXQoZGV2KTsKKwl1ZGNfcmVpbml0IChkZXYpOworCWlmIChyZXF1ZXN0X2lycShwZGV2LT5pcnEsIGdva3VfaXJxLCBTQV9TSElSUS8qfFNBX1NBTVBMRV9SQU5ET00qLywKKwkJCWRyaXZlcl9uYW1lLCBkZXYpICE9IDApIHsKKwkJREJHKGRldiwgInJlcXVlc3QgaW50ZXJydXB0ICVzIGZhaWxlZFxuIiwgYnVmcCk7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBkb25lOworCX0KKwlkZXYtPmdvdF9pcnEgPSAxOworCWlmICh1c2VfZG1hKQorCQlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMKKwljcmVhdGVfcHJvY19yZWFkX2VudHJ5KHByb2Nfbm9kZV9uYW1lLCAwLCBOVUxMLCB1ZGNfcHJvY19yZWFkLCBkZXYpOworI2VuZGlmCisKKwkvKiBkb25lICovCisJdGhlX2NvbnRyb2xsZXIgPSBkZXY7CisJZGV2aWNlX3JlZ2lzdGVyKCZkZXYtPmdhZGdldC5kZXYpOworCisJcmV0dXJuIDA7CisKK2RvbmU6CisJaWYgKGRldikKKwkJZ29rdV9yZW1vdmUgKHBkZXYpOworCXJldHVybiByZXR2YWw7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZHMgW10gPSB7IHsKKwkuY2xhc3MgPSAJKChQQ0lfQ0xBU1NfU0VSSUFMX1VTQiA8PCA4KSB8IDB4ZmUpLAorCS5jbGFzc19tYXNrID0gCX4wLAorCS52ZW5kb3IgPQkweDEwMmYsCQkvKiBUb3NoaWJhICovCisJLmRldmljZSA9CTB4MDEwNywJCS8qIHRoaXMgVURDICovCisJLnN1YnZlbmRvciA9CVBDSV9BTllfSUQsCisJLnN1YmRldmljZSA9CVBDSV9BTllfSUQsCisKK30sIHsgLyogZW5kOiBhbGwgemVyb2VzICovIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFIChwY2ksIHBjaV9pZHMpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZ29rdV9wY2lfZHJpdmVyID0geworCS5uYW1lID0JCShjaGFyICopIGRyaXZlcl9uYW1lLAorCS5pZF90YWJsZSA9CXBjaV9pZHMsCisKKwkucHJvYmUgPQlnb2t1X3Byb2JlLAorCS5yZW1vdmUgPQlnb2t1X3JlbW92ZSwKKworCS8qIEZJWE1FIGFkZCBwb3dlciBtYW5hZ2VtZW50IHN1cHBvcnQgKi8KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXQgKHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIgKCZnb2t1X3BjaV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQgKGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cCAodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgKCZnb2t1X3BjaV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQgKGNsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYThjOGU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmgKQEAgLTAsMCArMSwyOTAgQEAKKy8qCisgKiBUb3NoaWJhIFRDODZDMDAxICgiR29rdS1TIikgVVNCIERldmljZSBDb250cm9sbGVyIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIExpbmVvCisgKiAgICAgIGJ5IFN0dWFydCBMeW5uZSwgVG9tIFJ1c2h3b3J0aCwgYW5kIEJydWNlIEJhbGRlbgorICogQ29weXJpZ2h0IChDKSAyMDAyIFRvc2hpYmEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwMyBNb250YVZpc3RhIFNvZnR3YXJlIChzb3VyY2VAbXZpc3RhLmNvbSkKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisvKgorICogUENJIEJBUiAwIHBvaW50cyB0byB0aGVzZSByZWdpc3RlcnMuCisgKi8KK3N0cnVjdCBnb2t1X3VkY19yZWdzIHsKKwkvKiBpcnEgbWFuYWdlbWVudCAqLworCXUzMglpbnRfc3RhdHVzOwkJLyogMHgwMDAgKi8KKwl1MzIJaW50X2VuYWJsZTsKKyNkZWZpbmUgSU5UX1NVU1BFTkQJCTB4MDAwMDEJCS8qIG9yIHJlc3VtZSAqLworI2RlZmluZSBJTlRfVVNCUkVTRVQJCTB4MDAwMDIKKyNkZWZpbmUgSU5UX0VORFBPSU5UMAkJMHgwMDAwNAorI2RlZmluZSBJTlRfU0VUVVAJCTB4MDAwMDgKKyNkZWZpbmUgSU5UX1NUQVRVUwkJMHgwMDAxMAorI2RlZmluZSBJTlRfU1RBVFVTTkFLCQkweDAwMDIwCisjZGVmaW5lIElOVF9FUHhEQVRBU0VUKG4pCSgweDAwMDIwIDw8IChuKSkJLyogMCA8IG4gPCA0ICovCisjCWRlZmluZSBJTlRfRVAxREFUQVNFVAkJMHgwMDA0MAorIwlkZWZpbmUgSU5UX0VQMkRBVEFTRVQJCTB4MDAwODAKKyMJZGVmaW5lIElOVF9FUDNEQVRBU0VUCQkweDAwMTAwCisjZGVmaW5lIElOVF9FUG5OQUsobikJCSgweDAwMTAwIDwgKG4pKQkJLyogMCA8IG4gPCA0ICovCisjCWRlZmluZSBJTlRfRVAxTkFLCQkweDAwMjAwCisjCWRlZmluZSBJTlRfRVAyTkFLCQkweDAwNDAwCisjCWRlZmluZSBJTlRfRVAzTkFLCQkweDAwODAwCisjZGVmaW5lIElOVF9TT0YJCQkweDAxMDAwCisjZGVmaW5lIElOVF9FUlIJCQkweDAyMDAwCisjZGVmaW5lIElOVF9NU1RXUlNFVAkJMHgwNDAwMAorI2RlZmluZSBJTlRfTVNUV1JFTkQJCTB4MDgwMDAKKyNkZWZpbmUgSU5UX01TVFdSVE1PVVQJCTB4MTAwMDAKKyNkZWZpbmUgSU5UX01TVFJERU5ECQkweDIwMDAwCisjZGVmaW5lIElOVF9TWVNFUlJPUgkJMHg0MDAwMAorI2RlZmluZSBJTlRfUFdSREVURUNUCQkweDgwMDAwCisKKyNkZWZpbmUJSU5UX0RFVldJREUJCShJTlRfUFdSREVURUNUfElOVF9TWVNFUlJPUi8qfElOVF9FUlIqL3xJTlRfVVNCUkVTRVR8SU5UX1NVU1BFTkQpCisjZGVmaW5lCUlOVF9FUDAgCQkoSU5UX1NFVFVQfElOVF9FTkRQT0lOVDAvKnxJTlRfU1RBVFVTKi98SU5UX1NUQVRVU05BSykKKworCXUzMglkbWFfbWFzdGVyOworI2RlZmluZSBNU1RfRU9QQl9ESVMJCTB4MDgwMAorI2RlZmluZSBNU1RfRU9QQl9FTkEJCTB4MDQwMAorI2RlZmluZSBNU1RfVElNRU9VVF9ESVMJCTB4MDIwMAorI2RlZmluZSBNU1RfVElNRU9VVF9FTkEJCTB4MDEwMAorI2RlZmluZSBNU1RfUkRfRU9QQgkJMHgwMDgwCQkvKiB3cml0ZS1vbmx5ICovCisjZGVmaW5lIE1TVF9SRF9SRVNFVAkJMHgwMDQwCisjZGVmaW5lIE1TVF9XUl9SRVNFVAkJMHgwMDIwCisjZGVmaW5lIE1TVF9SRF9FTkEJCTB4MDAwNAkJLyogMTpzdGFydCwgMDppZ25vcmUgKi8KKyNkZWZpbmUgTVNUX1dSX0VOQQkJMHgwMDAyCQkvKiAxOnN0YXJ0LCAwOmlnbm9yZSAqLworI2RlZmluZSBNU1RfQ09OTkVDVElPTgkJMHgwMDAxCQkvKiAwIGZvciBlcDFvdXQvZXAyaW4gKi8KKworI2RlZmluZSBNU1RfUl9CSVRTCQkoTVNUX0VPUEJfRElTfE1TVF9FT1BCX0VOQSBcCisJCQkJCXxNU1RfUkRfRU5BfE1TVF9SRF9SRVNFVCkKKyNkZWZpbmUgTVNUX1dfQklUUwkJKE1TVF9USU1FT1VUX0RJU3xNU1RfVElNRU9VVF9FTkEgXAorCQkJCQl8TVNUX1dSX0VOQXxNU1RfV1JfUkVTRVQpCisjZGVmaW5lIE1TVF9SV19CSVRTCQkoTVNUX1JfQklUU3xNU1RfV19CSVRTIFwKKwkJCQkJfE1TVF9DT05ORUNUSU9OKQorCisvKiB0aGVzZSB2YWx1ZXMgYXNzdW1lIChkbWFfbWFzdGVyICYgTVNUX0NPTk5FQ1RJT04pID09IDAgKi8KKyNkZWZpbmUgVURDX01TVFdSX0VORFBPSU5UICAgICAgICAxCisjZGVmaW5lIFVEQ19NU1RSRF9FTkRQT0lOVCAgICAgICAgMgorCisJLyogZG1hIG1hc3RlciB3cml0ZSAqLworCXUzMglvdXRfZG1hX3N0YXJ0OworCXUzMglvdXRfZG1hX2VuZDsKKwl1MzIJb3V0X2RtYV9jdXJyZW50OworCisJLyogZG1hIG1hc3RlciByZWFkICovCisJdTMyCWluX2RtYV9zdGFydDsKKwl1MzIJaW5fZG1hX2VuZDsKKwl1MzIJaW5fZG1hX2N1cnJlbnQ7CisKKwl1MzIJcG93ZXJfZGV0ZWN0OworI2RlZmluZSBQV19ERVRFQ1QJCTB4MDQKKyNkZWZpbmUgUFdfUkVTRVRCCQkweDAyCisjZGVmaW5lIFBXX1BVTExVUAkJMHgwMQorCisJdTgJX3Jlc2VydmVkMCBbMHgxZDhdOworCisJLyogZW5kcG9pbnQgcmVnaXN0ZXJzICovCisJdTMyCWVwX2ZpZm8gWzRdOwkJLyogMHgyMDAgKi8KKwl1OAlfcmVzZXJ2ZWQxIFsweDEwXTsKKwl1MzIJZXBfbW9kZSBbNF07CQkvKiBvbmx5IDEtMyB2YWxpZCAqLworCXU4CV9yZXNlcnZlZDIgWzB4MTBdOworCisJdTMyCWVwX3N0YXR1cyBbNF07CisjZGVmaW5lIEVQeFNUQVRVU19UT0dHTEUJMHg0MAorI2RlZmluZSBFUHhTVEFUVVNfU1VTUEVORAkweDIwCisjZGVmaW5lIEVQeFNUQVRVU19FUF9NQVNLCSgweDA3PDwyKQorIwlkZWZpbmUgRVB4U1RBVFVTX0VQX1JFQURZCSgwPDwyKQorIwlkZWZpbmUgRVB4U1RBVFVTX0VQX0RBVEFJTgkoMTw8MikKKyMJZGVmaW5lIEVQeFNUQVRVU19FUF9GVUxMCSgyPDwyKQorIwlkZWZpbmUgRVB4U1RBVFVTX0VQX1RYX0VSUgkoMzw8MikKKyMJZGVmaW5lIEVQeFNUQVRVU19FUF9SWF9FUlIJKDQ8PDIpCisjCWRlZmluZSBFUHhTVEFUVVNfRVBfQlVTWQkoNTw8MikKKyMJZGVmaW5lIEVQeFNUQVRVU19FUF9TVEFMTAkoNjw8MikKKyMJZGVmaW5lIEVQeFNUQVRVU19FUF9JTlZBTElECSg3PDwyKQorI2RlZmluZSBFUHhTVEFUVVNfRklGT19ESVNBQkxFCTB4MDIKKyNkZWZpbmUgRVB4U1RBVFVTX1NUQUdFX0VSUk9SCTB4MDEKKworCXU4CV9yZXNlcnZlZDMgWzB4MTBdOworCXUzMglFUHhTaXplTEFbNF07CisjZGVmaW5lIFBBQ0tFVF9BQ1RJVkUJCSgxPDw3KQorI2RlZmluZSBEQVRBU0laRQkJMHg3ZgorCXU4CV9yZXNlcnZlZDNhIFsweDEwXTsKKwl1MzIJRVB4U2l6ZUxCWzRdOwkJLyogb25seSAxLDIgdmFsaWQgKi8KKwl1OAlfcmVzZXJ2ZWQzYiBbMHgxMF07CisJdTMyCUVQeFNpemVIQVs0XTsJCS8qIG9ubHkgMS0zIHZhbGlkICovCisJdTgJX3Jlc2VydmVkM2MgWzB4MTBdOworCXUzMglFUHhTaXplSEJbNF07CQkvKiBvbmx5IDEsMiB2YWxpZCAqLworCXU4CV9yZXNlcnZlZDRbMHgzMF07CisKKwkvKiBTRVRVUCBwYWNrZXQgY29udGVudHMgKi8KKwl1MzIJYlJlcXVlc3RUeXBlOwkJLyogMHgzMDAgKi8KKwl1MzIJYlJlcXVlc3Q7CisJdTMyCXdWYWx1ZUw7CisJdTMyCXdWYWx1ZUg7CisJdTMyCXdJbmRleEw7CisJdTMyCXdJbmRleEg7CisJdTMyCXdMZW5ndGhMOworCXUzMgl3TGVuZ3RoSDsKKworCS8qIGNvbW1hbmQgaW50ZXJhY3Rpb24vaGFuZHNoYWtpbmcgKi8KKwl1MzIJU2V0dXBSZWN2OwkJLyogMHgzMjAgKi8KKwl1MzIJQ3VyckNvbmZpZzsKKwl1MzIJU3RkUmVxdWVzdDsKKwl1MzIJUmVxdWVzdDsKKwl1MzIJRGF0YVNldDsKKyNkZWZpbmUgREFUQVNFVF9BKGVwbnVtKQkoMTw8KDIqKGVwbnVtKSkpCisjZGVmaW5lIERBVEFTRVRfQihlcG51bSkJKDI8PCgyKihlcG51bSkpKQorI2RlZmluZSBEQVRBU0VUX0FCKGVwbnVtKQkoMzw8KDIqKGVwbnVtKSkpCisJdTgJX3Jlc2VydmVkNVs0XTsKKworCXUzMglVc2JTdGF0ZTsKKyNkZWZpbmUgVVNCU1RBVEVfQ09ORklHVVJFRAkweDA0CisjZGVmaW5lIFVTQlNUQVRFX0FERFJFU1NFRAkweDAyCisjZGVmaW5lIFVTQlNUQVRFX0RFRkFVTFQJMHgwMQorCisJdTMyCUVPUDsKKworCXUzMglDb21tYW5kOwkJLyogMHgzNDAgKi8KKyNkZWZpbmUgQ09NTUFORF9TRVREQVRBMAkyCisjZGVmaW5lIENPTU1BTkRfUkVTRVQJCTMKKyNkZWZpbmUgQ09NTUFORF9TVEFMTAkJNAorI2RlZmluZSBDT01NQU5EX0lOVkFMSUQJCTUKKyNkZWZpbmUgQ09NTUFORF9GSUZPX0RJU0FCTEUJNworI2RlZmluZSBDT01NQU5EX0ZJRk9fRU5BQkxFCTgKKyNkZWZpbmUgQ09NTUFORF9JTklUX0RFU0NSSVBUT1IJOQorI2RlZmluZSBDT01NQU5EX0ZJRk9fQ0xFQVIJMTAJLyogYWxzbyBzdGFsbCAqLworI2RlZmluZSBDT01NQU5EX1NUQUxMX0NMRUFSCTExCisjZGVmaW5lIENPTU1BTkRfRVAobikJCSgobikgPDwgNCkKKworCXUzMglFUHhTaW5nbGU7CisJdTgJX3Jlc2VydmVkNls0XTsKKwl1MzIJRVB4QkNTOworCXU4CV9yZXNlcnZlZDdbOF07CisJdTMyCUludENvbnRyb2w7CisjZGVmaW5lIElDT05UUk9MX1NUQVRVU05BSwkxCisJdTgJX3Jlc2VydmVkOFs0XTsKKworCXUzMglyZXFtb2RlOwkvLyAweDM2MCBzdGFuZGFyZCByZXF1ZXN0IG1vZGUsIGxvdyA4IGJpdHMKKyNkZWZpbmUgR19SRVFNT0RFX1NFVF9JTlRGCSgxPDw3KQorI2RlZmluZSBHX1JFUU1PREVfR0VUX0lOVEYJKDE8PDYpCisjZGVmaW5lIEdfUkVRTU9ERV9TRVRfQ09ORgkoMTw8NSkKKyNkZWZpbmUgR19SRVFNT0RFX0dFVF9DT05GCSgxPDw0KQorI2RlZmluZSBHX1JFUU1PREVfR0VUX0RFU0MJKDE8PDMpCisjZGVmaW5lIEdfUkVRTU9ERV9TRVRfRkVBVAkoMTw8MikKKyNkZWZpbmUgR19SRVFNT0RFX0NMRUFSX0ZFQVQJKDE8PDEpCisjZGVmaW5lIEdfUkVRTU9ERV9HRVRfU1RBVFVTCSgxPDwwKQorCisJdTMyCVJlcU1vZGU7CisJdTgJX3Jlc2VydmVkOVsweDE4XTsKKwl1MzIJUG9ydFN0YXR1czsJCS8qIDB4MzgwICovCisJdTgJX3Jlc2VydmVkMTBbOF07CisJdTMyCWFkZHJlc3M7CisJdTMyCWJ1ZmZfdGVzdDsKKwl1OAlfcmVzZXJ2ZWQxMVs0XTsKKwl1MzIJVXNiUmVhZHk7CisJdTgJX3Jlc2VydmVkMTJbNF07CisJdTMyCVNldERlc2NTdGFsbDsJCS8qIDB4M2EwICovCisJdTgJX3Jlc2VydmVkMTNbMHg0NWNdOworCisJLyogaGFyZHdhcmUgY291bGQgaGFuZGxlIGxpbWl0ZWQgR0VUX0RFU0NSSVBUT1IgZHV0aWVzICovCisjZGVmaW5lCURFU0NfTEVOCTB4ODAKKwl1MzIJZGVzY3JpcHRvcnNbREVTQ19MRU5dOwkvKiAweDgwMCAqLworCXU4CV9yZXNlcnZlZDE0WzB4NjAwXTsKKworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUJTUFYX0ZJRk9fU0laRQk2NAorI2RlZmluZQlNQVhfRVAwX1NJWkUJOAkJLyogZXAwIGZpZm8gaXMgYmlnZ2VyLCB0aG91Z2ggKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBEUklWRVIgREFUQSBTVFJVQ1RVUkVTIGFuZCBVVElMSVRJRVMgKi8KKworc3RydWN0IGdva3VfZXAgeworCXN0cnVjdCB1c2JfZXAJCQkJZXA7CisJc3RydWN0IGdva3VfdWRjCQkJCSpkZXY7CisJdW5zaWduZWQgbG9uZwkJCQlpcnFzOworCisJdW5zaWduZWQJCQkJbnVtOjgsCisJCQkJCQlkbWE6MSwKKwkJCQkJCWlzX2luOjEsCisJCQkJCQlzdG9wcGVkOjE7CisKKwkvKiBhbmFsb2dvdXMgdG8gYSBob3N0LXNpZGUgcWggKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCQkJcXVldWU7CisJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpkZXNjOworCisJdTMyIF9faW9tZW0JCQkJKnJlZ19maWZvOworCXUzMiBfX2lvbWVtCQkJCSpyZWdfbW9kZTsKKwl1MzIgX19pb21lbQkJCQkqcmVnX3N0YXR1czsKK307CisKK3N0cnVjdCBnb2t1X3JlcXVlc3QgeworCXN0cnVjdCB1c2JfcmVxdWVzdAkJcmVxOworCXN0cnVjdCBsaXN0X2hlYWQJCXF1ZXVlOworCisJdW5zaWduZWQJCQltYXBwZWQ6MTsKK307CisKK2VudW0gZXAwc3RhdGUgeworCUVQMF9ESVNDT05ORUNULAkJLyogbm8gaG9zdCAqLworCUVQMF9JRExFLAkJLyogYmV0d2VlbiBTVEFUVVMgYWNrIGFuZCBTRVRVUCByZXBvcnQgKi8KKwlFUDBfSU4sIEVQMF9PVVQsIAkvKiBkYXRhIHN0YWdlICovCisJRVAwX1NUQVRVUywJCS8qIHN0YXR1cyBzdGFnZSAqLworCUVQMF9TVEFMTCwJCS8qIGRhdGEgb3Igc3RhdHVzIHN0YWdlcyAqLworCUVQMF9TVVNQRU5ELAkJLyogdXNiIHN1c3BlbmQgKi8KK307CisKK3N0cnVjdCBnb2t1X3VkYyB7CisJLyogZWFjaCBwY2kgZGV2aWNlIHByb3ZpZGVzIG9uZSBnYWRnZXQsIHNldmVyYWwgZW5kcG9pbnRzICovCisJc3RydWN0IHVzYl9nYWRnZXQJCWdhZGdldDsKKwlzcGlubG9ja190CQkJbG9jazsKKwlzdHJ1Y3QgZ29rdV9lcAkJCWVwWzRdOworCXN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAJKmRyaXZlcjsKKworCWVudW0gZXAwc3RhdGUJCQllcDBzdGF0ZTsKKwl1bnNpZ25lZAkJCWdvdF9pcnE6MSwKKwkJCQkJZ290X3JlZ2lvbjoxLAorCQkJCQlyZXFfY29uZmlnOjEsCisJCQkJCWNvbmZpZ3VyZWQ6MSwKKwkJCQkJZW5hYmxlZDoxOworCisJLyogcGNpIHN0YXRlIHVzZWQgdG8gYWNjZXNzIHRob3NlIGVuZHBvaW50cyAqLworCXN0cnVjdCBwY2lfZGV2CQkJKnBkZXY7CisJc3RydWN0IGdva3VfdWRjX3JlZ3MgX19pb21lbQkqcmVnczsKKwl1MzIJCQkJaW50X2VuYWJsZTsKKworCS8qIHN0YXRpc3RpY3MuLi4gKi8KKwl1bnNpZ25lZCBsb25nCQkJaXJxczsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgeHByaW50ayhkZXYsbGV2ZWwsZm10LGFyZ3MuLi4pIFwKKwlwcmludGsobGV2ZWwgIiVzICVzOiAiIGZtdCAsIGRyaXZlcl9uYW1lICwgXAorCQkJcGNpX25hbWUoZGV2LT5wZGV2KSAsICMjIGFyZ3MpCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBEQkcoZGV2LGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX0RFQlVHICwgZm10ICwgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIERCRyhkZXYsZm10LGFyZ3MuLi4pIFwKKwlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogREVCVUcgKi8KKworI2lmZGVmIFZFUkJPU0UKKyNkZWZpbmUgVkRCRyBEQkcKKyNlbHNlCisjZGVmaW5lIFZEQkcoZGV2LGZtdCxhcmdzLi4uKSBcCisJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCS8qIFZFUkJPU0UgKi8KKworI2RlZmluZSBFUlJPUihkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fRVJSICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgV0FSTihkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fV0FSTklORyAsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIElORk8oZGV2LGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX0lORk8gLCBmbXQgLCAjIyBhcmdzKQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZmY2N2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYwpAQCAtMCwwICsxLDIxMTAgQEAKKy8qCisgKiBpbm9kZS5jIC0tIHVzZXIgbW9kZSBmaWxlc3lzdGVtIGFwaSBmb3IgdXNiIGdhZGdldCBjb250cm9sbGVycworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IERhdmlkIEJyb3duZWxsCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgQWdpbGVudCBUZWNobm9sb2dpZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworCisvLyAjZGVmaW5lCURFQlVHIAkJCS8qIGRhdGEgdG8gaGVscCBmYXVsdCBkaWFnbm9zaXMgKi8KKy8vICNkZWZpbmUJVkVSQk9TRQkJLyogZXh0cmEgZGVidWcgbWVzc2FnZXMgKHN1Y2Nlc3MgdG9vKSAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3V0cy5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKworI2luY2x1ZGUgPGxpbnV4L3VzYl9nYWRnZXRmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl9nYWRnZXQuaD4KKworCisvKgorICogVGhlIGdhZGdldGZzIEFQSSBtYXBzIGVhY2ggZW5kcG9pbnQgdG8gYSBmaWxlIGRlc2NyaXB0b3Igc28gdGhhdCB5b3UKKyAqIGNhbiB1c2Ugc3RhbmRhcmQgc3luY2hyb25vdXMgcmVhZC93cml0ZSBjYWxscyBmb3IgSS9PLiAgVGhlcmUncyBzb21lCisgKiBPX05PTkJMT0NLIGFuZCBPX0FTWU5DL0ZBU1lOQyBzdHlsZSBpL28gc3VwcG9ydC4gIEV4YW1wbGUgdXNlcm1vZGUKKyAqIGRyaXZlcnMgc2hvdyBob3cgdGhpcyB3b3JrcyBpbiBwcmFjdGljZS4gIFlvdSBjYW4gYWxzbyB1c2UgQUlPIHRvCisgKiBlbGltaW5hdGUgSS9PIGdhcHMgYmV0d2VlbiByZXF1ZXN0cywgdG8gaGVscCB3aGVuIHN0cmVhbWluZyBkYXRhLgorICoKKyAqIEtleSBwYXJ0cyB0aGF0IG11c3QgYmUgVVNCLXNwZWNpZmljIGFyZSBwcm90b2NvbHMgZGVmaW5pbmcgaG93IHRoZQorICogcmVhZC93cml0ZSBvcGVyYXRpb25zIHJlbGF0ZSB0byB0aGUgaGFyZHdhcmUgc3RhdGUgbWFjaGluZXMuICBUaGVyZQorICogYXJlIHR3byB0eXBlcyBvZiBmaWxlcy4gIE9uZSB0eXBlIGlzIGZvciB0aGUgZGV2aWNlLCBpbXBsZW1lbnRpbmcgZXAwLgorICogVGhlIG90aGVyIHR5cGUgaXMgZm9yIGVhY2ggSU4gb3IgT1VUIGVuZHBvaW50LiAgSW4gYm90aCBjYXNlcywgdGhlCisgKiB1c2VyIG1vZGUgZHJpdmVyIG11c3QgY29uZmlndXJlIHRoZSBoYXJkd2FyZSBiZWZvcmUgdXNpbmcgaXQuCisgKgorICogLSBGaXJzdCwgZGV2X2NvbmZpZygpIGlzIGNhbGxlZCB3aGVuIC9kZXYvZ2FkZ2V0LyRDSElQIGlzIGNvbmZpZ3VyZWQKKyAqICAgKGJ5IHdyaXRpbmcgY29uZmlndXJhdGlvbiBhbmQgZGV2aWNlIGRlc2NyaXB0b3JzKS4gIEFmdGVyd2FyZHMgaXQKKyAqICAgbWF5IHNlcnZlIGFzIGEgc291cmNlIG9mIGRldmljZSBldmVudHMsIHVzZWQgdG8gaGFuZGxlIGFsbCBjb250cm9sCisgKiAgIHJlcXVlc3RzIG90aGVyIHRoYW4gYmFzaWMgZW51bWVyYXRpb24uCisgKgorICogLSBUaGVuIGVpdGhlciBpbW1lZGlhdGVseSwgb3IgYWZ0ZXIgYSBTRVRfQ09ORklHVVJBVElPTiBjb250cm9sIHJlcXVlc3QsCisgKiAgIGVwX2NvbmZpZygpIGlzIGNhbGxlZCB3aGVuIGVhY2ggL2Rldi9nYWRnZXQvZXAqIGZpbGUgaXMgY29uZmlndXJlZAorICogICAoYnkgd3JpdGluZyBlbmRwb2ludCBkZXNjcmlwdG9ycykuICBBZnRlcndhcmRzIHRoZXNlIGZpbGVzIGFyZSB1c2VkCisgKiAgIHRvIHdyaXRlKCkgSU4gZGF0YSBvciB0byByZWFkKCkgT1VUIGRhdGEuICBUbyBoYWx0IHRoZSBlbmRwb2ludCwgYQorICogICAid3JvbmcgZGlyZWN0aW9uIiByZXF1ZXN0IGlzIGlzc3VlZCAobGlrZSByZWFkaW5nIGFuIElOIGVuZHBvaW50KS4KKyAqCisgKiBVbmxpa2UgInVzYmZzIiB0aGUgb25seSBpb2N0bCgpcyBhcmUgZm9yIHRoaW5ncyB0aGF0IGFyZSByYXJlLCBhbmQgbWF5YmUKKyAqIG5vdCBwb3NzaWJsZSBvbiBhbGwgaGFyZHdhcmUuICBGb3IgZXhhbXBsZSwgcHJlY2lzZSBmYXVsdCBoYW5kbGluZyB3aXRoCisgKiByZXNwZWN0IHRvIGRhdGEgbGVmdCBpbiBlbmRwb2ludCBmaWZvcyBhZnRlciBhYm9ydGVkIG9wZXJhdGlvbnM7IG9yCisgKiBzZWxlY3RpdmUgY2xlYXJpbmcgb2YgZW5kcG9pbnQgaGFsdHMsIHRvIGltcGxlbWVudCBTRVRfSU5URVJGQUNFLgorICovCisKKyNkZWZpbmUJRFJJVkVSX0RFU0MJIlVTQiBHYWRnZXQgZmlsZXN5c3RlbSIKKyNkZWZpbmUJRFJJVkVSX1ZFUlNJT04JIjI0IEF1ZyAyMDA0IgorCitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfZGVzYyBbXSA9IERSSVZFUl9ERVNDOworc3RhdGljIGNvbnN0IGNoYXIgc2hvcnRuYW1lIFtdID0gImdhZGdldGZzIjsKKworTU9EVUxFX0RFU0NSSVBUSU9OIChEUklWRVJfREVTQyk7CitNT0RVTEVfQVVUSE9SICgiRGF2aWQgQnJvd25lbGwiKTsKK01PRFVMRV9MSUNFTlNFICgiR1BMIik7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBHQURHRVRGU19NQUdJQwkJMHhhZWU3MWVlNworI2RlZmluZSBETUFfQUREUl9JTlZBTElECSh+KGRtYV9hZGRyX3QpMCkKKworLyogL2Rldi9nYWRnZXQvJENISVAgcmVwcmVzZW50cyBlcDAgYW5kIHRoZSB3aG9sZSBkZXZpY2UgKi8KK2VudW0gZXAwX3N0YXRlIHsKKwkvKiBESVNCTEVEIGlzIHRoZSBpbml0aWFsIHN0YXRlLgorCSAqLworCVNUQVRFX0RFVl9ESVNBQkxFRCA9IDAsCisKKwkvKiBPbmx5IG9uZSBvcGVuKCkgb2YgL2Rldi9nYWRnZXQvJENISVA7IG9ubHkgb25lIGZpbGUgdHJhY2tzCisJICogZXAwL2RldmljZSBpL28gbW9kZXMgYW5kIGJpbmRpbmcgdG8gdGhlIGNvbnRyb2xsZXIuICBEcml2ZXIKKwkgKiBtdXN0IGFsd2F5cyB3cml0ZSBkZXNjcmlwdG9ycyB0byBpbml0aWFsaXplIHRoZSBkZXZpY2UsIHRoZW4KKwkgKiB0aGUgZGV2aWNlIGJlY29tZXMgVU5DT05ORUNURUQgdW50aWwgZW51bWVyYXRpb24uCisJICovCisJU1RBVEVfT1BFTkVELAorCisJLyogRnJvbSB0aGVuIG9uLCBlcDAgZmQgaXMgaW4gZWl0aGVyIG9mIHR3byBiYXNpYyBtb2RlczoKKwkgKiAtIChVTilDT05ORUNURUQ6IHJlYWQgdXNiX2dhZGdldGZzX2V2ZW50KHMpIGZyb20gaXQKKwkgKiAtIFNFVFVQOiByZWFkL3dyaXRlIHdpbGwgdHJhbnNmZXIgY29udHJvbCBkYXRhIGFuZCBzdWNjZWVkOworCSAqICAgb3IgaWYgIndyb25nIGRpcmVjdGlvbiIsIHBlcmZvcm1zIHByb3RvY29sIHN0YWxsCisJICovCisJU1RBVEVfVU5DT05ORUNURUQsCisJU1RBVEVfQ09OTkVDVEVELAorCVNUQVRFX1NFVFVQLAorCisJLyogVU5CT1VORCBtZWFucyB0aGUgZHJpdmVyIGNsb3NlZCBlcDAsIHNvIHRoZSBkZXZpY2Ugd29uJ3QgYmUKKwkgKiBhY2Nlc3NpYmxlIGFnYWluIChERVZfRElTQUJMRUQpIHVudGlsIGFsbCBmZHMgYXJlIGNsb3NlZC4KKwkgKi8KKwlTVEFURV9ERVZfVU5CT1VORCwKK307CisKKy8qIGVub3VnaCBmb3IgdGhlIHdob2xlIHF1ZXVlOiBtb3N0IGV2ZW50cyBpbnZhbGlkYXRlIG90aGVycyAqLworI2RlZmluZQlOX0VWRU5UCQkJNQorCitzdHJ1Y3QgZGV2X2RhdGEgeworCXNwaW5sb2NrX3QJCQlsb2NrOworCWF0b21pY190CQkJY291bnQ7CisJZW51bSBlcDBfc3RhdGUJCQlzdGF0ZTsKKwlzdHJ1Y3QgdXNiX2dhZGdldGZzX2V2ZW50CWV2ZW50IFtOX0VWRU5UXTsKKwl1bnNpZ25lZAkJCWV2X25leHQ7CisJc3RydWN0IGZhc3luY19zdHJ1Y3QJCSpmYXN5bmM7CisJdTgJCQkJY3VycmVudF9jb25maWc7CisKKwkvKiBkcml2ZXJzIHJlYWRpbmcgZXAwIE1VU1QgaGFuZGxlIGNvbnRyb2wgcmVxdWVzdHMgKFNFVFVQKQorCSAqIHJlcG9ydGVkIHRoYXQgd2F5OyBlbHNlIHRoZSBob3N0IHdpbGwgdGltZSBvdXQuCisJICovCisJdW5zaWduZWQJCQl1c2VybW9kZV9zZXR1cCA6IDEsCisJCQkJCXNldHVwX2luIDogMSwKKwkJCQkJc2V0dXBfY2FuX3N0YWxsIDogMSwKKwkJCQkJc2V0dXBfb3V0X3JlYWR5IDogMSwKKwkJCQkJc2V0dXBfb3V0X2Vycm9yIDogMSwKKwkJCQkJc2V0dXBfYWJvcnQgOiAxOworCisJLyogdGhlIHJlc3QgaXMgYmFzaWNhbGx5IHdyaXRlLW9uY2UgKi8KKwlzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yCSpjb25maWcsICpoc19jb25maWc7CisJc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvcgkqZGV2OworCXN0cnVjdCB1c2JfcmVxdWVzdAkJKnJlcTsKKwlzdHJ1Y3QgdXNiX2dhZGdldAkJKmdhZGdldDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQllcGZpbGVzOworCXZvaWQJCQkJKmJ1ZjsKKwl3YWl0X3F1ZXVlX2hlYWRfdAkJd2FpdDsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sJCSpzYjsKKwlzdHJ1Y3QgZGVudHJ5CQkJKmRlbnRyeTsKKworCS8qIGV4Y2VwdCB0aGlzIHNjcmF0Y2ggaS9vIGJ1ZmZlciBmb3IgZXAwICovCisJdTgJCQkJcmJ1ZiBbMjU2XTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfZGV2IChzdHJ1Y3QgZGV2X2RhdGEgKmRhdGEpCit7CisJYXRvbWljX2luYyAoJmRhdGEtPmNvdW50KTsKK30KKworc3RhdGljIHZvaWQgcHV0X2RldiAoc3RydWN0IGRldl9kYXRhICpkYXRhKQoreworCWlmIChsaWtlbHkgKCFhdG9taWNfZGVjX2FuZF90ZXN0ICgmZGF0YS0+Y291bnQpKSkKKwkJcmV0dXJuOworCS8qIG5lZWRzIG5vIG1vcmUgY2xlYW51cCAqLworCUJVR19PTiAod2FpdHF1ZXVlX2FjdGl2ZSAoJmRhdGEtPndhaXQpKTsKKwlrZnJlZSAoZGF0YSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X2RhdGEgKmRldl9uZXcgKHZvaWQpCit7CisJc3RydWN0IGRldl9kYXRhCQkqZGV2OworCisJZGV2ID0ga21hbGxvYyAoc2l6ZW9mICpkZXYsIEdGUF9LRVJORUwpOworCWlmICghZGV2KQorCQlyZXR1cm4gTlVMTDsKKwltZW1zZXQgKGRldiwgMCwgc2l6ZW9mICpkZXYpOworCWRldi0+c3RhdGUgPSBTVEFURV9ERVZfRElTQUJMRUQ7CisJYXRvbWljX3NldCAoJmRldi0+Y291bnQsIDEpOworCXNwaW5fbG9ja19pbml0ICgmZGV2LT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCAoJmRldi0+ZXBmaWxlcyk7CisJaW5pdF93YWl0cXVldWVfaGVhZCAoJmRldi0+d2FpdCk7CisJcmV0dXJuIGRldjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogb3RoZXIgL2Rldi9nYWRnZXQvJEVORFBPSU5UIGZpbGVzIHJlcHJlc2VudCBlbmRwb2ludHMgKi8KK2VudW0gZXBfc3RhdGUgeworCVNUQVRFX0VQX0RJU0FCTEVEID0gMCwKKwlTVEFURV9FUF9SRUFEWSwKKwlTVEFURV9FUF9ERUZFUl9FTkFCTEUsCisJU1RBVEVfRVBfRU5BQkxFRCwKKwlTVEFURV9FUF9VTkJPVU5ELAorfTsKKworc3RydWN0IGVwX2RhdGEgeworCXN0cnVjdCBzZW1hcGhvcmUJCWxvY2s7CisJZW51bSBlcF9zdGF0ZQkJCXN0YXRlOworCWF0b21pY190CQkJY291bnQ7CisJc3RydWN0IGRldl9kYXRhCQkJKmRldjsKKwkvKiBtdXN0IGhvbGQgZGV2LT5sb2NrIGJlZm9yZSBhY2Nlc3NpbmcgZXAgb3IgcmVxICovCisJc3RydWN0IHVzYl9lcAkJCSplcDsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJCSpyZXE7CisJc3NpemVfdAkJCQlzdGF0dXM7CisJY2hhcgkJCQluYW1lIFsxNl07CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCWRlc2MsIGhzX2Rlc2M7CisJc3RydWN0IGxpc3RfaGVhZAkJZXBmaWxlczsKKwl3YWl0X3F1ZXVlX2hlYWRfdAkJd2FpdDsKKwlzdHJ1Y3QgZGVudHJ5CQkJKmRlbnRyeTsKKwlzdHJ1Y3QgaW5vZGUJCQkqaW5vZGU7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2VwIChzdHJ1Y3QgZXBfZGF0YSAqZGF0YSkKK3sKKwlhdG9taWNfaW5jICgmZGF0YS0+Y291bnQpOworfQorCitzdGF0aWMgdm9pZCBwdXRfZXAgKHN0cnVjdCBlcF9kYXRhICpkYXRhKQoreworCWlmIChsaWtlbHkgKCFhdG9taWNfZGVjX2FuZF90ZXN0ICgmZGF0YS0+Y291bnQpKSkKKwkJcmV0dXJuOworCXB1dF9kZXYgKGRhdGEtPmRldik7CisJLyogbmVlZHMgbm8gbW9yZSBjbGVhbnVwICovCisJQlVHX09OICghbGlzdF9lbXB0eSAoJmRhdGEtPmVwZmlsZXMpKTsKKwlCVUdfT04gKHdhaXRxdWV1ZV9hY3RpdmUgKCZkYXRhLT53YWl0KSk7CisJQlVHX09OIChkb3duX3RyeWxvY2sgKCZkYXRhLT5sb2NrKSAhPSAwKTsKKwlrZnJlZSAoZGF0YSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIG1vc3QgImhvdyB0byB1c2UgdGhlIGhhcmR3YXJlIiBwb2xpY3kgY2hvaWNlcyBhcmUgaW4gdXNlcnNwYWNlOgorICogbWFwcGluZyBlbmRwb2ludCByb2xlcyAod2hpY2ggdGhlIGRyaXZlciBuZWVkcykgdG8gdGhlIGNhcGFiaWxpdGllcworICogd2hpY2ggdGhlIHVzYiBjb250cm9sbGVyIGhhcy4gIG1vc3Qgb2YgdGhvc2UgY2FwYWJpbGl0aWVzIGFyZSBleHBvc2VkCisgKiBpbXBsaWNpdGx5LCBzdGFydGluZyB3aXRoIHRoZSBkcml2ZXIgbmFtZSBhbmQgdGhlbiBlbmRwb2ludCBuYW1lcy4KKyAqLworCitzdGF0aWMgY29uc3QgY2hhciAqQ0hJUDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogTk9URTogIGRvbid0IHVzZSBkZXZfcHJpbnRrIGNhbGxzIGJlZm9yZSBiaW5kaW5nIHRvIHRoZSBnYWRnZXQKKyAqIGF0IHRoZSBlbmQgb2YgZXAwIGNvbmZpZ3VyYXRpb24sIG9yIGFmdGVyIHVuYmluZC4KKyAqLworCisvKiB0b28gd29yZHk6IGRldl9wcmludGsobGV2ZWwgLCAmKGQpLT5nYWRnZXQtPmRldiAsIGZtdCAsICMjIGFyZ3MpICovCisjZGVmaW5lIHhwcmludGsoZCxsZXZlbCxmbXQsYXJncy4uLikgXAorCXByaW50ayhsZXZlbCAiJXM6ICIgZm10ICwgc2hvcnRuYW1lICwgIyMgYXJncykKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERCRyhkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fREVCVUcgLCBmbXQgLCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREJHKGRldixmbXQsYXJncy4uLikgXAorCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgVkVSQk9TRQorI2RlZmluZSBWREVCVUcJREJHCisjZWxzZQorI2RlZmluZSBWREVCVUcoZGV2LGZtdCxhcmdzLi4uKSBcCisJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmIC8qIERFQlVHICovCisKKyNkZWZpbmUgRVJST1IoZGV2LGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX0VSUiAsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIFdBUk4oZGV2LGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX1dBUk5JTkcgLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBJTkZPKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9JTkZPICwgZm10ICwgIyMgYXJncykKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBTWU5DSFJPTk9VUyBFTkRQT0lOVCBPUEVSQVRJT05TIChidWxrL2ludHIvaXNvKQorICoKKyAqIEFmdGVyIG9wZW5pbmcsIGNvbmZpZ3VyZSBub24tY29udHJvbCBlbmRwb2ludHMuICBUaGVuIHVzZSBub3JtYWwKKyAqIHN0cmVhbSByZWFkKCkgYW5kIHdyaXRlKCkgcmVxdWVzdHM7IGFuZCBtYXliZSBpb2N0bCgpIHRvIGdldCBtb3JlCisgKiBwcmVjaXNlIEZJRk8gc3RhdHVzIHdoZW4gcmVjb3ZlcmluZyBmcm9tIGNhbmNlbGF0aW9uLgorICovCisKK3N0YXRpYyB2b2lkIGVwaW9fY29tcGxldGUgKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgZXBfZGF0YQkqZXBkYXRhID0gZXAtPmRyaXZlcl9kYXRhOworCisJaWYgKCFyZXEtPmNvbnRleHQpCisJCXJldHVybjsKKwlpZiAocmVxLT5zdGF0dXMpCisJCWVwZGF0YS0+c3RhdHVzID0gcmVxLT5zdGF0dXM7CisJZWxzZQorCQllcGRhdGEtPnN0YXR1cyA9IHJlcS0+YWN0dWFsOworCWNvbXBsZXRlICgoc3RydWN0IGNvbXBsZXRpb24gKilyZXEtPmNvbnRleHQpOworfQorCisvKiB0YXNrbG9jayBlbmRwb2ludCwgcmV0dXJuaW5nIHdoZW4gaXQncyBjb25uZWN0ZWQuCisgKiBzdGlsbCBuZWVkIGRldi0+bG9jayB0byB1c2UgZXBkYXRhLT5lcC4KKyAqLworc3RhdGljIGludAorZ2V0X3JlYWR5X2VwICh1bnNpZ25lZCBmX2ZsYWdzLCBzdHJ1Y3QgZXBfZGF0YSAqZXBkYXRhKQoreworCWludAl2YWw7CisKKwlpZiAoZl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJaWYgKGRvd25fdHJ5bG9jayAoJmVwZGF0YS0+bG9jaykgIT0gMCkKKwkJCWdvdG8gbm9uYmxvY2s7CisJCWlmIChlcGRhdGEtPnN0YXRlICE9IFNUQVRFX0VQX0VOQUJMRUQpIHsKKwkJCXVwICgmZXBkYXRhLT5sb2NrKTsKK25vbmJsb2NrOgorCQkJdmFsID0gLUVBR0FJTjsKKwkJfSBlbHNlCisJCQl2YWwgPSAwOworCQlyZXR1cm4gdmFsOworCX0KKworCWlmICgodmFsID0gZG93bl9pbnRlcnJ1cHRpYmxlICgmZXBkYXRhLT5sb2NrKSkgPCAwKQorCQlyZXR1cm4gdmFsOworbmV3c3RhdGU6CisJc3dpdGNoIChlcGRhdGEtPnN0YXRlKSB7CisJY2FzZSBTVEFURV9FUF9FTkFCTEVEOgorCQlicmVhazsKKwljYXNlIFNUQVRFX0VQX0RFRkVSX0VOQUJMRToKKwkJREJHIChlcGRhdGEtPmRldiwgIiVzIHdhaXQgZm9yIGhvc3RcbiIsIGVwZGF0YS0+bmFtZSk7CisJCWlmICgodmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlIChlcGRhdGEtPndhaXQsIAorCQkJCWVwZGF0YS0+c3RhdGUgIT0gU1RBVEVfRVBfREVGRVJfRU5BQkxFCisJCQkJfHwgZXBkYXRhLT5kZXYtPnN0YXRlID09IFNUQVRFX0RFVl9VTkJPVU5ECisJCQkJKSkgPCAwKQorCQkJZ290byBmYWlsOworCQlnb3RvIG5ld3N0YXRlOworCS8vIGNhc2UgU1RBVEVfRVBfRElTQUJMRUQ6CQkvKiAiY2FuJ3QgaGFwcGVuIiAqLworCS8vIGNhc2UgU1RBVEVfRVBfUkVBRFk6CQkJLyogImNhbid0IGhhcHBlbiIgKi8KKwlkZWZhdWx0OgkJCQkvKiBlcnJvciEgKi8KKwkJcHJfZGVidWcgKCIlczogZXAgJXAgbm90IGF2YWlsYWJsZSwgc3RhdGUgJWRcbiIsCisJCQkJc2hvcnRuYW1lLCBlcGRhdGEsIGVwZGF0YS0+c3RhdGUpOworCQkvLyBGQUxMVEhST1VHSAorCWNhc2UgU1RBVEVfRVBfVU5CT1VORDoJCQkvKiBjbGVhbiBkaXNjb25uZWN0ICovCisJCXZhbCA9IC1FTk9ERVY7CitmYWlsOgorCQl1cCAoJmVwZGF0YS0+bG9jayk7CisJfQorCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitlcF9pbyAoc3RydWN0IGVwX2RhdGEgKmVwZGF0YSwgdm9pZCAqYnVmLCB1bnNpZ25lZCBsZW4pCit7CisJREVDTEFSRV9DT01QTEVUSU9OIChkb25lKTsKKwlpbnQgdmFsdWU7CisKKwlzcGluX2xvY2tfaXJxICgmZXBkYXRhLT5kZXYtPmxvY2spOworCWlmIChsaWtlbHkgKGVwZGF0YS0+ZXAgIT0gTlVMTCkpIHsKKwkJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXEgPSBlcGRhdGEtPnJlcTsKKworCQlyZXEtPmNvbnRleHQgPSAmZG9uZTsKKwkJcmVxLT5jb21wbGV0ZSA9IGVwaW9fY29tcGxldGU7CisJCXJlcS0+YnVmID0gYnVmOworCQlyZXEtPmxlbmd0aCA9IGxlbjsKKwkJdmFsdWUgPSB1c2JfZXBfcXVldWUgKGVwZGF0YS0+ZXAsIHJlcSwgR0ZQX0FUT01JQyk7CisJfSBlbHNlCisJCXZhbHVlID0gLUVOT0RFVjsKKwlzcGluX3VubG9ja19pcnEgKCZlcGRhdGEtPmRldi0+bG9jayk7CisKKwlpZiAobGlrZWx5ICh2YWx1ZSA9PSAwKSkgeworCQl2YWx1ZSA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSAoZG9uZS53YWl0LCBkb25lLmRvbmUpOworCQlpZiAodmFsdWUgIT0gMCkgeworCQkJc3Bpbl9sb2NrX2lycSAoJmVwZGF0YS0+ZGV2LT5sb2NrKTsKKwkJCWlmIChsaWtlbHkgKGVwZGF0YS0+ZXAgIT0gTlVMTCkpIHsKKwkJCQlEQkcgKGVwZGF0YS0+ZGV2LCAiJXMgaS9vIGludGVycnVwdGVkXG4iLAorCQkJCQkJZXBkYXRhLT5uYW1lKTsKKwkJCQl1c2JfZXBfZGVxdWV1ZSAoZXBkYXRhLT5lcCwgZXBkYXRhLT5yZXEpOworCQkJCXNwaW5fdW5sb2NrX2lycSAoJmVwZGF0YS0+ZGV2LT5sb2NrKTsKKworCQkJCXdhaXRfZXZlbnQgKGRvbmUud2FpdCwgZG9uZS5kb25lKTsKKwkJCQlpZiAoZXBkYXRhLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQpCisJCQkJCWVwZGF0YS0+c3RhdHVzID0gLUVJTlRSOworCQkJfSBlbHNlIHsKKwkJCQlzcGluX3VubG9ja19pcnEgKCZlcGRhdGEtPmRldi0+bG9jayk7CisKKwkJCQlEQkcgKGVwZGF0YS0+ZGV2LCAiZW5kcG9pbnQgZ29uZVxuIik7CisJCQkJZXBkYXRhLT5zdGF0dXMgPSAtRU5PREVWOworCQkJfQorCQl9CisJCXJldHVybiBlcGRhdGEtPnN0YXR1czsKKwl9CisJcmV0dXJuIHZhbHVlOworfQorCisKKy8qIGhhbmRsZSBhIHN5bmNocm9ub3VzIE9VVCBidWxrL2ludHIvaXNvIHRyYW5zZmVyICovCitzdGF0aWMgc3NpemVfdAorZXBfcmVhZCAoc3RydWN0IGZpbGUgKmZkLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnB0cikKK3sKKwlzdHJ1Y3QgZXBfZGF0YQkJKmRhdGEgPSBmZC0+cHJpdmF0ZV9kYXRhOworCXZvaWQJCQkqa2J1ZjsKKwlzc2l6ZV90CQkJdmFsdWU7CisKKwlpZiAoKHZhbHVlID0gZ2V0X3JlYWR5X2VwIChmZC0+Zl9mbGFncywgZGF0YSkpIDwgMCkKKwkJcmV0dXJuIHZhbHVlOworCisJLyogaGFsdCBhbnkgZW5kcG9pbnQgYnkgZG9pbmcgYSAid3JvbmcgZGlyZWN0aW9uIiBpL28gY2FsbCAqLworCWlmIChkYXRhLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSB7CisJCWlmICgoZGF0YS0+ZGVzYy5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKKwkJCQk9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCURCRyAoZGF0YS0+ZGV2LCAiJXMgaGFsdFxuIiwgZGF0YS0+bmFtZSk7CisJCXNwaW5fbG9ja19pcnEgKCZkYXRhLT5kZXYtPmxvY2spOworCQlpZiAobGlrZWx5IChkYXRhLT5lcCAhPSBOVUxMKSkKKwkJCXVzYl9lcF9zZXRfaGFsdCAoZGF0YS0+ZXApOworCQlzcGluX3VubG9ja19pcnEgKCZkYXRhLT5kZXYtPmxvY2spOworCQl1cCAoJmRhdGEtPmxvY2spOworCQlyZXR1cm4gLUVCQURNU0c7CisJfQorCisJLyogRklYTUUgcmVhZGFoZWFkIGZvciBPX05PTkJMT0NLIGFuZCBwb2xsKCk7IGNhcmVmdWwgd2l0aCBaTFBzICovCisKKwl2YWx1ZSA9IC1FTk9NRU07CisJa2J1ZiA9IGttYWxsb2MgKGxlbiwgU0xBQl9LRVJORUwpOworCWlmICh1bmxpa2VseSAoIWtidWYpKQorCQlnb3RvIGZyZWUxOworCisJdmFsdWUgPSBlcF9pbyAoZGF0YSwga2J1ZiwgbGVuKTsKKwlWREVCVUcgKGRhdGEtPmRldiwgIiVzIHJlYWQgJWQgT1VULCBzdGF0dXMgJWRcbiIsCisJCWRhdGEtPm5hbWUsIGxlbiwgdmFsdWUpOworCWlmICh2YWx1ZSA+PSAwICYmIGNvcHlfdG9fdXNlciAoYnVmLCBrYnVmLCB2YWx1ZSkpCisJCXZhbHVlID0gLUVGQVVMVDsKKworZnJlZTE6CisJdXAgKCZkYXRhLT5sb2NrKTsKKwlrZnJlZSAoa2J1Zik7CisJcmV0dXJuIHZhbHVlOworfQorCisvKiBoYW5kbGUgYSBzeW5jaHJvbm91cyBJTiBidWxrL2ludHIvaXNvIHRyYW5zZmVyICovCitzdGF0aWMgc3NpemVfdAorZXBfd3JpdGUgKHN0cnVjdCBmaWxlICpmZCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgbG9mZl90ICpwdHIpCit7CisJc3RydWN0IGVwX2RhdGEJCSpkYXRhID0gZmQtPnByaXZhdGVfZGF0YTsKKwl2b2lkCQkJKmtidWY7CisJc3NpemVfdAkJCXZhbHVlOworCisJaWYgKCh2YWx1ZSA9IGdldF9yZWFkeV9lcCAoZmQtPmZfZmxhZ3MsIGRhdGEpKSA8IDApCisJCXJldHVybiB2YWx1ZTsKKworCS8qIGhhbHQgYW55IGVuZHBvaW50IGJ5IGRvaW5nIGEgIndyb25nIGRpcmVjdGlvbiIgaS9vIGNhbGwgKi8KKwlpZiAoIShkYXRhLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSkgeworCQlpZiAoKGRhdGEtPmRlc2MuYm1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCisJCQkJPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykKKwkJCXJldHVybiAtRUlOVkFMOworCQlEQkcgKGRhdGEtPmRldiwgIiVzIGhhbHRcbiIsIGRhdGEtPm5hbWUpOworCQlzcGluX2xvY2tfaXJxICgmZGF0YS0+ZGV2LT5sb2NrKTsKKwkJaWYgKGxpa2VseSAoZGF0YS0+ZXAgIT0gTlVMTCkpCisJCQl1c2JfZXBfc2V0X2hhbHQgKGRhdGEtPmVwKTsKKwkJc3Bpbl91bmxvY2tfaXJxICgmZGF0YS0+ZGV2LT5sb2NrKTsKKwkJdXAgKCZkYXRhLT5sb2NrKTsKKwkJcmV0dXJuIC1FQkFETVNHOworCX0KKworCS8qIEZJWE1FIHdyaXRlYmVoaW5kIGZvciBPX05PTkJMT0NLIGFuZCBwb2xsKCksIHFsZW4gPSAxICovCisKKwl2YWx1ZSA9IC1FTk9NRU07CisJa2J1ZiA9IGttYWxsb2MgKGxlbiwgU0xBQl9LRVJORUwpOworCWlmICgha2J1ZikKKwkJZ290byBmcmVlMTsKKwlpZiAoY29weV9mcm9tX3VzZXIgKGtidWYsIGJ1ZiwgbGVuKSkgeworCQl2YWx1ZSA9IC1FRkFVTFQ7CisJCWdvdG8gZnJlZTE7CisJfQorCisJdmFsdWUgPSBlcF9pbyAoZGF0YSwga2J1ZiwgbGVuKTsKKwlWREVCVUcgKGRhdGEtPmRldiwgIiVzIHdyaXRlICVkIElOLCBzdGF0dXMgJWRcbiIsCisJCWRhdGEtPm5hbWUsIGxlbiwgdmFsdWUpOworZnJlZTE6CisJdXAgKCZkYXRhLT5sb2NrKTsKKwlrZnJlZSAoa2J1Zik7CisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgaW50CitlcF9yZWxlYXNlIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmQpCit7CisJc3RydWN0IGVwX2RhdGEJCSpkYXRhID0gZmQtPnByaXZhdGVfZGF0YTsKKworCS8qIGNsZWFuIHVwIGlmIHRoaXMgY2FuIGJlIHJlb3BlbmVkICovCisJaWYgKGRhdGEtPnN0YXRlICE9IFNUQVRFX0VQX1VOQk9VTkQpIHsKKwkJZGF0YS0+c3RhdGUgPSBTVEFURV9FUF9ESVNBQkxFRDsKKwkJZGF0YS0+ZGVzYy5iRGVzY3JpcHRvclR5cGUgPSAwOworCQlkYXRhLT5oc19kZXNjLmJEZXNjcmlwdG9yVHlwZSA9IDA7CisJfQorCXB1dF9lcCAoZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXBfaW9jdGwgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZCwKKwkJdW5zaWduZWQgY29kZSwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZXBfZGF0YQkJKmRhdGEgPSBmZC0+cHJpdmF0ZV9kYXRhOworCWludAkJCXN0YXR1czsKKworCWlmICgoc3RhdHVzID0gZ2V0X3JlYWR5X2VwIChmZC0+Zl9mbGFncywgZGF0YSkpIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCXNwaW5fbG9ja19pcnEgKCZkYXRhLT5kZXYtPmxvY2spOworCWlmIChsaWtlbHkgKGRhdGEtPmVwICE9IE5VTEwpKSB7CisJCXN3aXRjaCAoY29kZSkgeworCQljYXNlIEdBREdFVEZTX0ZJRk9fU1RBVFVTOgorCQkJc3RhdHVzID0gdXNiX2VwX2ZpZm9fc3RhdHVzIChkYXRhLT5lcCk7CisJCQlicmVhazsKKwkJY2FzZSBHQURHRVRGU19GSUZPX0ZMVVNIOgorCQkJdXNiX2VwX2ZpZm9fZmx1c2ggKGRhdGEtPmVwKTsKKwkJCWJyZWFrOworCQljYXNlIEdBREdFVEZTX0NMRUFSX0hBTFQ6CisJCQlzdGF0dXMgPSB1c2JfZXBfY2xlYXJfaGFsdCAoZGF0YS0+ZXApOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzdGF0dXMgPSAtRU5PVFRZOworCQl9CisJfSBlbHNlCisJCXN0YXR1cyA9IC1FTk9ERVY7CisJc3Bpbl91bmxvY2tfaXJxICgmZGF0YS0+ZGV2LT5sb2NrKTsKKwl1cCAoJmRhdGEtPmxvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEFTWU5DSFJPTk9VUyBFTkRQT0lOVCBJL08gT1BFUkFUSU9OUyAoYnVsay9pbnRyL2lzbykgKi8KKworc3RydWN0IGtpb2NiX3ByaXYgeworCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxOworCXN0cnVjdCBlcF9kYXRhCQkqZXBkYXRhOworCXZvaWQJCQkqYnVmOworCWNoYXIgX191c2VyCQkqdWJ1ZjsKKwl1bnNpZ25lZAkJYWN0dWFsOworfTsKKworc3RhdGljIGludCBlcF9haW9fY2FuY2VsKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvX2V2ZW50ICplKQoreworCXN0cnVjdCBraW9jYl9wcml2CSpwcml2ID0gaW9jYi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZXBfZGF0YQkJKmVwZGF0YTsKKwlpbnQJCQl2YWx1ZTsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJZXBkYXRhID0gcHJpdi0+ZXBkYXRhOworCS8vIHNwaW5fbG9jaygmZXBkYXRhLT5kZXYtPmxvY2spOworCWtpb2NiU2V0Q2FuY2VsbGVkKGlvY2IpOworCWlmIChsaWtlbHkoZXBkYXRhICYmIGVwZGF0YS0+ZXAgJiYgcHJpdi0+cmVxKSkKKwkJdmFsdWUgPSB1c2JfZXBfZGVxdWV1ZSAoZXBkYXRhLT5lcCwgcHJpdi0+cmVxKTsKKwllbHNlCisJCXZhbHVlID0gLUVJTlZBTDsKKwkvLyBzcGluX3VubG9jaygmZXBkYXRhLT5kZXYtPmxvY2spOworCWxvY2FsX2lycV9lbmFibGUoKTsKKworCWFpb19wdXRfcmVxKGlvY2IpOworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHNzaXplX3QgZXBfYWlvX3JlYWRfcmV0cnkoc3RydWN0IGtpb2NiICppb2NiKQoreworCXN0cnVjdCBraW9jYl9wcml2CSpwcml2ID0gaW9jYi0+cHJpdmF0ZTsKKwlzc2l6ZV90CQkJc3RhdHVzID0gcHJpdi0+YWN0dWFsOworCisJLyogd2UgInJldHJ5IiB0byBnZXQgdGhlIHJpZ2h0IG1tIGNvbnRleHQgZm9yIHRoaXM6ICovCisJc3RhdHVzID0gY29weV90b191c2VyKHByaXYtPnVidWYsIHByaXYtPmJ1ZiwgcHJpdi0+YWN0dWFsKTsKKwlpZiAodW5saWtlbHkoMCAhPSBzdGF0dXMpKQorCQlzdGF0dXMgPSAtRUZBVUxUOworCWVsc2UKKwkJc3RhdHVzID0gcHJpdi0+YWN0dWFsOworCWtmcmVlKHByaXYtPmJ1Zik7CisJa2ZyZWUocHJpdik7CisJYWlvX3B1dF9yZXEoaW9jYik7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgZXBfYWlvX2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3Qga2lvY2IJCSppb2NiID0gcmVxLT5jb250ZXh0OworCXN0cnVjdCBraW9jYl9wcml2CSpwcml2ID0gaW9jYi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZXBfZGF0YQkJKmVwZGF0YSA9IHByaXYtPmVwZGF0YTsKKworCS8qIGxvY2sgYWdhaW5zdCBkaXNjb25uZWN0IChhbmQgaWRlYWxseSwgY2FuY2VsKSAqLworCXNwaW5fbG9jaygmZXBkYXRhLT5kZXYtPmxvY2spOworCXByaXYtPnJlcSA9IE5VTEw7CisJcHJpdi0+ZXBkYXRhID0gTlVMTDsKKwlpZiAoTlVMTCA9PSBpb2NiLT5raV9yZXRyeQorCQkJfHwgdW5saWtlbHkoMCA9PSByZXEtPmFjdHVhbCkKKwkJCXx8IHVubGlrZWx5KGtpb2NiSXNDYW5jZWxsZWQoaW9jYikpKSB7CisJCWtmcmVlKHJlcS0+YnVmKTsKKwkJa2ZyZWUocHJpdik7CisJCWlvY2ItPnByaXZhdGUgPSBOVUxMOworCQkvKiBhaW9fY29tcGxldGUoKSByZXBvcnRzIGJ5dGVzLXRyYW5zZmVycmVkIF9hbmRfIGZhdWx0cyAqLworCQlpZiAodW5saWtlbHkoa2lvY2JJc0NhbmNlbGxlZChpb2NiKSkpCisJCQlhaW9fcHV0X3JlcShpb2NiKTsKKwkJZWxzZQorCQkJYWlvX2NvbXBsZXRlKGlvY2IsCisJCQkJcmVxLT5hY3R1YWwgPyByZXEtPmFjdHVhbCA6IHJlcS0+c3RhdHVzLAorCQkJCXJlcS0+c3RhdHVzKTsKKwl9IGVsc2UgeworCQkvKiByZXRyeSgpIHdvbid0IHJlcG9ydCBib3RoOyBzbyB3ZSBoaWRlIHNvbWUgZmF1bHRzICovCisJCWlmICh1bmxpa2VseSgwICE9IHJlcS0+c3RhdHVzKSkKKwkJCURCRyhlcGRhdGEtPmRldiwgIiVzIGZhdWx0ICVkIGxlbiAlZFxuIiwKKwkJCQllcC0+bmFtZSwgcmVxLT5zdGF0dXMsIHJlcS0+YWN0dWFsKTsKKworCQlwcml2LT5idWYgPSByZXEtPmJ1ZjsKKwkJcHJpdi0+YWN0dWFsID0gcmVxLT5hY3R1YWw7CisJCWtpY2tfaW9jYihpb2NiKTsKKwl9CisJc3Bpbl91bmxvY2soJmVwZGF0YS0+ZGV2LT5sb2NrKTsKKworCXVzYl9lcF9mcmVlX3JlcXVlc3QoZXAsIHJlcSk7CisJcHV0X2VwKGVwZGF0YSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitlcF9haW9fcnd0YWlsKAorCXN0cnVjdCBraW9jYgkqaW9jYiwKKwljaGFyCQkqYnVmLAorCXNpemVfdAkJbGVuLAorCXN0cnVjdCBlcF9kYXRhCSplcGRhdGEsCisJY2hhciBfX3VzZXIJKnVidWYKKykKK3sKKwlzdHJ1Y3Qga2lvY2JfcHJpdgkqcHJpdiA9ICh2b2lkICopICZpb2NiLT5wcml2YXRlOworCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxOworCXNzaXplX3QJCQl2YWx1ZTsKKworCXByaXYgPSBrbWFsbG9jKHNpemVvZiAqcHJpdiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KSB7CisJCXZhbHVlID0gLUVOT01FTTsKK2ZhaWw6CisJCWtmcmVlKGJ1Zik7CisJCXJldHVybiB2YWx1ZTsKKwl9CisJaW9jYi0+cHJpdmF0ZSA9IHByaXY7CisJcHJpdi0+dWJ1ZiA9IHVidWY7CisKKwl2YWx1ZSA9IGdldF9yZWFkeV9lcChpb2NiLT5raV9maWxwLT5mX2ZsYWdzLCBlcGRhdGEpOworCWlmICh1bmxpa2VseSh2YWx1ZSA8IDApKSB7CisJCWtmcmVlKHByaXYpOworCQlnb3RvIGZhaWw7CisJfQorCisJaW9jYi0+a2lfY2FuY2VsID0gZXBfYWlvX2NhbmNlbDsKKwlnZXRfZXAoZXBkYXRhKTsKKwlwcml2LT5lcGRhdGEgPSBlcGRhdGE7CisJcHJpdi0+YWN0dWFsID0gMDsKKworCS8qIGVhY2gga2lvY2IgaXMgY291cGxlZCB0byBvbmUgdXNiX3JlcXVlc3QsIGJ1dCB3ZSBjYW4ndAorCSAqIGFsbG9jYXRlIG9yIHN1Ym1pdCB0aG9zZSBpZiB0aGUgaG9zdCBkaXNjb25uZWN0ZWQuCisJICovCisJc3Bpbl9sb2NrX2lycSgmZXBkYXRhLT5kZXYtPmxvY2spOworCWlmIChsaWtlbHkoZXBkYXRhLT5lcCkpIHsKKwkJcmVxID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QoZXBkYXRhLT5lcCwgR0ZQX0FUT01JQyk7CisJCWlmIChsaWtlbHkocmVxKSkgeworCQkJcHJpdi0+cmVxID0gcmVxOworCQkJcmVxLT5idWYgPSBidWY7CisJCQlyZXEtPmxlbmd0aCA9IGxlbjsKKwkJCXJlcS0+Y29tcGxldGUgPSBlcF9haW9fY29tcGxldGU7CisJCQlyZXEtPmNvbnRleHQgPSBpb2NiOworCQkJdmFsdWUgPSB1c2JfZXBfcXVldWUoZXBkYXRhLT5lcCwgcmVxLCBHRlBfQVRPTUlDKTsKKwkJCWlmICh1bmxpa2VseSgwICE9IHZhbHVlKSkKKwkJCQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGVwZGF0YS0+ZXAsIHJlcSk7CisJCX0gZWxzZQorCQkJdmFsdWUgPSAtRUFHQUlOOworCX0gZWxzZQorCQl2YWx1ZSA9IC1FTk9ERVY7CisJc3Bpbl91bmxvY2tfaXJxKCZlcGRhdGEtPmRldi0+bG9jayk7CisKKwl1cCgmZXBkYXRhLT5sb2NrKTsKKworCWlmICh1bmxpa2VseSh2YWx1ZSkpIHsKKwkJa2ZyZWUocHJpdik7CisJCXB1dF9lcChlcGRhdGEpOworCX0gZWxzZQorCQl2YWx1ZSA9IC1FSU9DQlFVRVVFRDsKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitlcF9haW9fcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgbykKK3sKKwlzdHJ1Y3QgZXBfZGF0YQkJKmVwZGF0YSA9IGlvY2ItPmtpX2ZpbHAtPnByaXZhdGVfZGF0YTsKKwljaGFyCQkJKmJ1ZjsKKworCWlmICh1bmxpa2VseShlcGRhdGEtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFidWYpKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpb2NiLT5raV9yZXRyeSA9IGVwX2Fpb19yZWFkX3JldHJ5OworCXJldHVybiBlcF9haW9fcnd0YWlsKGlvY2IsIGJ1ZiwgbGVuLCBlcGRhdGEsIHVidWYpOworfQorCitzdGF0aWMgc3NpemVfdAorZXBfYWlvX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBsZW4sIGxvZmZfdCBvKQoreworCXN0cnVjdCBlcF9kYXRhCQkqZXBkYXRhID0gaW9jYi0+a2lfZmlscC0+cHJpdmF0ZV9kYXRhOworCWNoYXIJCQkqYnVmOworCisJaWYgKHVubGlrZWx5KCEoZXBkYXRhLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSkpCisJCXJldHVybiAtRUlOVkFMOworCWJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIWJ1ZikpCisJCXJldHVybiAtRU5PTUVNOworCWlmICh1bmxpa2VseShjb3B5X2Zyb21fdXNlcihidWYsIHVidWYsIGxlbikgIT0gMCkpIHsKKwkJa2ZyZWUoYnVmKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCXJldHVybiBlcF9haW9fcnd0YWlsKGlvY2IsIGJ1ZiwgbGVuLCBlcGRhdGEsIE5VTEwpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiB1c2VkIGFmdGVyIGVuZHBvaW50IGNvbmZpZ3VyYXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVwX2lvX29wZXJhdGlvbnMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLmxsc2VlayA9CW5vX2xsc2VlaywKKworCS5yZWFkID0JCWVwX3JlYWQsCisJLndyaXRlID0JZXBfd3JpdGUsCisJLmlvY3RsID0JZXBfaW9jdGwsCisJLnJlbGVhc2UgPQllcF9yZWxlYXNlLAorCisJLmFpb19yZWFkID0JZXBfYWlvX3JlYWQsCisJLmFpb193cml0ZSA9CWVwX2Fpb193cml0ZSwKK307CisKKy8qIEVORFBPSU5UIElOSVRJQUxJWkFUSU9OCisgKgorICogICAgIGZkID0gb3BlbiAoIi9kZXYvZ2FkZ2V0LyRFTkRQT0lOVCIsIE9fUkRXUikKKyAqICAgICBzdGF0dXMgPSB3cml0ZSAoZmQsIGRlc2NyaXB0b3JzLCBzaXplb2YgZGVzY3JpcHRvcnMpCisgKgorICogVGhhdCB3cml0ZSBlc3RhYmxpc2hlcyB0aGUgZW5kcG9pbnQgY29uZmlndXJhdGlvbiwgY29uZmlndXJpbmcKKyAqIHRoZSBjb250cm9sbGVyIHRvIHByb2Nlc3MgYnVsaywgaW50ZXJydXB0LCBvciBpc29jaHJvbm91cyB0cmFuc2ZlcnMKKyAqIGF0IHRoZSByaWdodCBtYXhwYWNrZXQgc2l6ZSwgYW5kIHNvIG9uLgorICoKKyAqIFRoZSBkZXNjcmlwdG9ycyBhcmUgbWVzc2FnZSB0eXBlIDEsIGlkZW50aWZpZWQgYnkgYSBob3N0IG9yZGVyIHUzMgorICogYXQgdGhlIGJlZ2lubmluZyBvZiB3aGF0J3Mgd3JpdHRlbi4gIERlc2NyaXB0b3Igb3JkZXIgaXM6IGZ1bGwvbG93CisgKiBzcGVlZCBkZXNjcmlwdG9yLCB0aGVuIG9wdGlvbmFsIGhpZ2ggc3BlZWQgZGVzY3JpcHRvci4KKyAqLworc3RhdGljIHNzaXplX3QKK2VwX2NvbmZpZyAoc3RydWN0IGZpbGUgKmZkLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnB0cikKK3sKKwlzdHJ1Y3QgZXBfZGF0YQkJKmRhdGEgPSBmZC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2JfZXAJCSplcDsKKwl1MzIJCQl0YWc7CisJaW50CQkJdmFsdWU7CisKKwlpZiAoKHZhbHVlID0gZG93bl9pbnRlcnJ1cHRpYmxlICgmZGF0YS0+bG9jaykpIDwgMCkKKwkJcmV0dXJuIHZhbHVlOworCisJaWYgKGRhdGEtPnN0YXRlICE9IFNUQVRFX0VQX1JFQURZKSB7CisJCXZhbHVlID0gLUVMMkhMVDsKKwkJZ290byBmYWlsOworCX0KKworCXZhbHVlID0gbGVuOworCWlmIChsZW4gPCBVU0JfRFRfRU5EUE9JTlRfU0laRSArIDQpCisJCWdvdG8gZmFpbDA7CisKKwkvKiB3ZSBtaWdodCBuZWVkIHRvIGNoYW5nZSBtZXNzYWdlIGZvcm1hdCBzb21lZGF5ICovCisJaWYgKGNvcHlfZnJvbV91c2VyICgmdGFnLCBidWYsIDQpKSB7CisJCWdvdG8gZmFpbDE7CisJfQorCWlmICh0YWcgIT0gMSkgeworCQlEQkcoZGF0YS0+ZGV2LCAiY29uZmlnICVzLCBiYWQgdGFnICVkXG4iLCBkYXRhLT5uYW1lLCB0YWcpOworCQlnb3RvIGZhaWwwOworCX0KKwlidWYgKz0gNDsKKwlsZW4gLT0gNDsKKworCS8qIE5PVEU6ICBhdWRpbyBlbmRwb2ludCBleHRlbnNpb25zIG5vdCBhY2NlcHRlZCBoZXJlOworCSAqIGp1c3QgZG9uJ3QgaW5jbHVkZSB0aGUgZXh0cmEgYnl0ZXMuCisJICovCisKKwkvKiBmdWxsL2xvdyBzcGVlZCBkZXNjcmlwdG9yLCB0aGVuIGhpZ2ggc3BlZWQgKi8KKwlpZiAoY29weV9mcm9tX3VzZXIgKCZkYXRhLT5kZXNjLCBidWYsIFVTQl9EVF9FTkRQT0lOVF9TSVpFKSkgeworCQlnb3RvIGZhaWwxOworCX0KKwlpZiAoZGF0YS0+ZGVzYy5iTGVuZ3RoICE9IFVTQl9EVF9FTkRQT0lOVF9TSVpFCisJCQl8fCBkYXRhLT5kZXNjLmJEZXNjcmlwdG9yVHlwZSAhPSBVU0JfRFRfRU5EUE9JTlQpCisJCWdvdG8gZmFpbDA7CisJaWYgKGxlbiAhPSBVU0JfRFRfRU5EUE9JTlRfU0laRSkgeworCQlpZiAobGVuICE9IDIgKiBVU0JfRFRfRU5EUE9JTlRfU0laRSkKKwkJCWdvdG8gZmFpbDA7CisJCWlmIChjb3B5X2Zyb21fdXNlciAoJmRhdGEtPmhzX2Rlc2MsIGJ1ZiArIFVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCQkJCQlVU0JfRFRfRU5EUE9JTlRfU0laRSkpIHsKKwkJCWdvdG8gZmFpbDE7CisJCX0KKwkJaWYgKGRhdGEtPmhzX2Rlc2MuYkxlbmd0aCAhPSBVU0JfRFRfRU5EUE9JTlRfU0laRQorCQkJCXx8IGRhdGEtPmhzX2Rlc2MuYkRlc2NyaXB0b3JUeXBlCisJCQkJCSE9IFVTQl9EVF9FTkRQT0lOVCkgeworCQkJREJHKGRhdGEtPmRldiwgImNvbmZpZyAlcywgYmFkIGhzIGxlbmd0aCBvciB0eXBlXG4iLAorCQkJCQlkYXRhLT5uYW1lKTsKKwkJCWdvdG8gZmFpbDA7CisJCX0KKwl9CisJdmFsdWUgPSBsZW47CisKKwlzcGluX2xvY2tfaXJxICgmZGF0YS0+ZGV2LT5sb2NrKTsKKwlpZiAoZGF0YS0+ZGV2LT5zdGF0ZSA9PSBTVEFURV9ERVZfVU5CT1VORCkgeworCQl2YWx1ZSA9IC1FTk9FTlQ7CisJCWdvdG8gZ29uZTsKKwl9IGVsc2UgaWYgKChlcCA9IGRhdGEtPmVwKSA9PSBOVUxMKSB7CisJCXZhbHVlID0gLUVOT0RFVjsKKwkJZ290byBnb25lOworCX0KKwlzd2l0Y2ggKGRhdGEtPmRldi0+Z2FkZ2V0LT5zcGVlZCkgeworCWNhc2UgVVNCX1NQRUVEX0xPVzoKKwljYXNlIFVTQl9TUEVFRF9GVUxMOgorCQl2YWx1ZSA9IHVzYl9lcF9lbmFibGUgKGVwLCAmZGF0YS0+ZGVzYyk7CisJCWlmICh2YWx1ZSA9PSAwKQorCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9FUF9FTkFCTEVEOworCQlicmVhazsKKyNpZmRlZglISUdIU1BFRUQKKwljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQkvKiBmYWlscyBpZiBjYWxsZXIgZGlkbid0IHByb3ZpZGUgdGhhdCBkZXNjcmlwdG9yLi4uICovCisJCXZhbHVlID0gdXNiX2VwX2VuYWJsZSAoZXAsICZkYXRhLT5oc19kZXNjKTsKKwkJaWYgKHZhbHVlID09IDApCisJCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0VQX0VOQUJMRUQ7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJREJHIChkYXRhLT5kZXYsICJ1bmNvbm5lY3RlZCwgJXMgaW5pdCBkZWZlcnJlZFxuIiwKKwkJCQlkYXRhLT5uYW1lKTsKKwkJZGF0YS0+c3RhdGUgPSBTVEFURV9FUF9ERUZFUl9FTkFCTEU7CisJfQorCWlmICh2YWx1ZSA9PSAwKQorCQlmZC0+Zl9vcCA9ICZlcF9pb19vcGVyYXRpb25zOworZ29uZToKKwlzcGluX3VubG9ja19pcnEgKCZkYXRhLT5kZXYtPmxvY2spOworCWlmICh2YWx1ZSA8IDApIHsKK2ZhaWw6CisJCWRhdGEtPmRlc2MuYkRlc2NyaXB0b3JUeXBlID0gMDsKKwkJZGF0YS0+aHNfZGVzYy5iRGVzY3JpcHRvclR5cGUgPSAwOworCX0KKwl1cCAoJmRhdGEtPmxvY2spOworCXJldHVybiB2YWx1ZTsKK2ZhaWwwOgorCXZhbHVlID0gLUVJTlZBTDsKKwlnb3RvIGZhaWw7CitmYWlsMToKKwl2YWx1ZSA9IC1FRkFVTFQ7CisJZ290byBmYWlsOworfQorCitzdGF0aWMgaW50CitlcF9vcGVuIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmQpCit7CisJc3RydWN0IGVwX2RhdGEJCSpkYXRhID0gaW5vZGUtPnUuZ2VuZXJpY19pcDsKKwlpbnQJCQl2YWx1ZSA9IC1FQlVTWTsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZkYXRhLT5sb2NrKSAhPSAwKQorCQlyZXR1cm4gLUVJTlRSOworCXNwaW5fbG9ja19pcnEgKCZkYXRhLT5kZXYtPmxvY2spOworCWlmIChkYXRhLT5kZXYtPnN0YXRlID09IFNUQVRFX0RFVl9VTkJPVU5EKQorCQl2YWx1ZSA9IC1FTk9FTlQ7CisJZWxzZSBpZiAoZGF0YS0+c3RhdGUgPT0gU1RBVEVfRVBfRElTQUJMRUQpIHsKKwkJdmFsdWUgPSAwOworCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0VQX1JFQURZOworCQlnZXRfZXAgKGRhdGEpOworCQlmZC0+cHJpdmF0ZV9kYXRhID0gZGF0YTsKKwkJVkRFQlVHIChkYXRhLT5kZXYsICIlcyByZWFkeVxuIiwgZGF0YS0+bmFtZSk7CisJfSBlbHNlCisJCURCRyAoZGF0YS0+ZGV2LCAiJXMgc3RhdGUgJWRcbiIsCisJCQlkYXRhLT5uYW1lLCBkYXRhLT5zdGF0ZSk7CisJc3Bpbl91bmxvY2tfaXJxICgmZGF0YS0+ZGV2LT5sb2NrKTsKKwl1cCAoJmRhdGEtPmxvY2spOworCXJldHVybiB2YWx1ZTsKK30KKworLyogdXNlZCBiZWZvcmUgZW5kcG9pbnQgY29uZmlndXJhdGlvbiAqLworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXBfY29uZmlnX29wZXJhdGlvbnMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLmxsc2VlayA9CW5vX2xsc2VlaywKKworCS5vcGVuID0JCWVwX29wZW4sCisJLndyaXRlID0JZXBfY29uZmlnLAorCS5yZWxlYXNlID0JZXBfcmVsZWFzZSwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEVQMCBJTVBMRU1FTlRBVElPTiBjYW4gYmUgcGFydGx5IGluIHVzZXJzcGFjZS4KKyAqCisgKiBEcml2ZXJzIHRoYXQgdXNlIHRoaXMgZmFjaWxpdHkgcmVjZWl2ZSB2YXJpb3VzIGV2ZW50cywgaW5jbHVkaW5nCisgKiBjb250cm9sIHJlcXVlc3RzIHRoZSBrZXJuZWwgZG9lc24ndCBoYW5kbGUuICBEcml2ZXJzIHRoYXQgZG9uJ3QKKyAqIHVzZSB0aGlzIGZhY2lsaXR5IG1heSBiZSB0b28gc2ltcGxlLW1pbmRlZCBmb3IgcmVhbCBhcHBsaWNhdGlvbnMuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGVwMF9yZWFkYWJsZSAoc3RydWN0IGRldl9kYXRhICpkZXYpCit7CisJd2FrZV91cCAoJmRldi0+d2FpdCk7CisJa2lsbF9mYXN5bmMgKCZkZXYtPmZhc3luYywgU0lHSU8sIFBPTExfSU4pOworfQorCitzdGF0aWMgdm9pZCBjbGVhbl9yZXEgKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgZGV2X2RhdGEJCSpkZXYgPSBlcC0+ZHJpdmVyX2RhdGE7CisKKwlpZiAocmVxLT5idWYgIT0gZGV2LT5yYnVmKSB7CisJCXVzYl9lcF9mcmVlX2J1ZmZlciAoZXAsIHJlcS0+YnVmLCByZXEtPmRtYSwgcmVxLT5sZW5ndGgpOworCQlyZXEtPmJ1ZiA9IGRldi0+cmJ1ZjsKKwkJcmVxLT5kbWEgPSBETUFfQUREUl9JTlZBTElEOworCX0KKwlyZXEtPmNvbXBsZXRlID0gZXBpb19jb21wbGV0ZTsKKwlkZXYtPnNldHVwX291dF9yZWFkeSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGVwMF9jb21wbGV0ZSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBkZXZfZGF0YQkJKmRldiA9IGVwLT5kcml2ZXJfZGF0YTsKKwlpbnQJCQlmcmVlID0gMTsKKworCS8qIGZvciBjb250cm9sIE9VVCwgZGF0YSBtdXN0IHN0aWxsIGdldCB0byB1c2Vyc3BhY2UgKi8KKwlpZiAoIWRldi0+c2V0dXBfaW4pIHsKKwkJZGV2LT5zZXR1cF9vdXRfZXJyb3IgPSAocmVxLT5zdGF0dXMgIT0gMCk7CisJCWlmICghZGV2LT5zZXR1cF9vdXRfZXJyb3IpCisJCQlmcmVlID0gMDsKKwkJZGV2LT5zZXR1cF9vdXRfcmVhZHkgPSAxOworCQllcDBfcmVhZGFibGUgKGRldik7CisJfSBlbHNlIGlmIChkZXYtPnN0YXRlID09IFNUQVRFX1NFVFVQKQorCQlkZXYtPnN0YXRlID0gU1RBVEVfQ09OTkVDVEVEOworCisJLyogY2xlYW4gdXAgYXMgYXBwcm9wcmlhdGUgKi8KKwlpZiAoZnJlZSAmJiByZXEtPmJ1ZiAhPSAmZGV2LT5yYnVmKQorCQljbGVhbl9yZXEgKGVwLCByZXEpOworCXJlcS0+Y29tcGxldGUgPSBlcGlvX2NvbXBsZXRlOworfQorCitzdGF0aWMgaW50IHNldHVwX3JlcSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxLCB1MTYgbGVuKQoreworCXN0cnVjdCBkZXZfZGF0YQkqZGV2ID0gZXAtPmRyaXZlcl9kYXRhOworCisJaWYgKGRldi0+c2V0dXBfb3V0X3JlYWR5KSB7CisJCURCRyAoZGV2LCAiZXAwIHJlcXVlc3QgYnVzeSFcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlpZiAobGVuID4gc2l6ZW9mIChkZXYtPnJidWYpKQorCQlyZXEtPmJ1ZiA9IHVzYl9lcF9hbGxvY19idWZmZXIgKGVwLCBsZW4sICZyZXEtPmRtYSwgR0ZQX0FUT01JQyk7CisJaWYgKHJlcS0+YnVmID09IDApIHsKKwkJcmVxLT5idWYgPSBkZXYtPnJidWY7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXEtPmNvbXBsZXRlID0gZXAwX2NvbXBsZXRlOworCXJlcS0+bGVuZ3RoID0gbGVuOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdAorZXAwX3JlYWQgKHN0cnVjdCBmaWxlICpmZCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgbG9mZl90ICpwdHIpCit7CisJc3RydWN0IGRldl9kYXRhCQkJKmRldiA9IGZkLT5wcml2YXRlX2RhdGE7CisJc3NpemVfdAkJCQlyZXR2YWw7CisJZW51bSBlcDBfc3RhdGUJCQlzdGF0ZTsKKworCXNwaW5fbG9ja19pcnEgKCZkZXYtPmxvY2spOworCisJLyogcmVwb3J0IGZkIG1vZGUgY2hhbmdlIGJlZm9yZSBhY3Rpbmcgb24gaXQgKi8KKwlpZiAoZGV2LT5zZXR1cF9hYm9ydCkgeworCQlkZXYtPnNldHVwX2Fib3J0ID0gMDsKKwkJcmV0dmFsID0gLUVJRFJNOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogY29udHJvbCBEQVRBIHN0YWdlICovCisJaWYgKChzdGF0ZSA9IGRldi0+c3RhdGUpID09IFNUQVRFX1NFVFVQKSB7CisKKwkJaWYgKGRldi0+c2V0dXBfaW4pIHsJCS8qIHN0YWxsIElOICovCisJCQlWREVCVUcoZGV2LCAiZXAwaW4gc3RhbGxcbiIpOworCQkJKHZvaWQpIHVzYl9lcF9zZXRfaGFsdCAoZGV2LT5nYWRnZXQtPmVwMCk7CisJCQlyZXR2YWwgPSAtRUwySExUOworCQkJZGV2LT5zdGF0ZSA9IFNUQVRFX0NPTk5FQ1RFRDsKKworCQl9IGVsc2UgaWYgKGxlbiA9PSAwKSB7CQkvKiBhY2sgU0VUX0NPTkZJR1VSQVRJT04gZXRjICovCisJCQlzdHJ1Y3QgdXNiX2VwCQkqZXAgPSBkZXYtPmdhZGdldC0+ZXAwOworCQkJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXEgPSBkZXYtPnJlcTsKKworCQkJaWYgKChyZXR2YWwgPSBzZXR1cF9yZXEgKGVwLCByZXEsIDApKSA9PSAwKQorCQkJCXJldHZhbCA9IHVzYl9lcF9xdWV1ZSAoZXAsIHJlcSwgR0ZQX0FUT01JQyk7CisJCQlkZXYtPnN0YXRlID0gU1RBVEVfQ09OTkVDVEVEOworCisJCQkvKiBhc3N1bWUgdGhhdCB3YXMgU0VUX0NPTkZJR1VSQVRJT04gKi8KKwkJCWlmIChkZXYtPmN1cnJlbnRfY29uZmlnKSB7CisJCQkJdW5zaWduZWQgcG93ZXI7CisjaWZkZWYJSElHSFNQRUVECisJCQkJaWYgKGRldi0+Z2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJCQkJcG93ZXIgPSBkZXYtPmhzX2NvbmZpZy0+Yk1heFBvd2VyOworCQkJCWVsc2UKKyNlbmRpZgorCQkJCQlwb3dlciA9IGRldi0+Y29uZmlnLT5iTWF4UG93ZXI7CisJCQkJdXNiX2dhZGdldF92YnVzX2RyYXcoZGV2LT5nYWRnZXQsIDIgKiBwb3dlcik7CisJCQl9CisKKwkJfSBlbHNlIHsJCQkvKiBjb2xsZWN0IE9VVCBkYXRhICovCisJCQlpZiAoKGZkLT5mX2ZsYWdzICYgT19OT05CTE9DSykgIT0gMAorCQkJCQkmJiAhZGV2LT5zZXR1cF9vdXRfcmVhZHkpIHsKKwkJCQlyZXR2YWwgPSAtRUFHQUlOOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycSAoJmRldi0+bG9jayk7CisJCQlyZXR2YWwgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUgKGRldi0+d2FpdCwKKwkJCQkJZGV2LT5zZXR1cF9vdXRfcmVhZHkgIT0gMCk7CisKKwkJCS8qIEZJWE1FIHN0YXRlIGNvdWxkIGNoYW5nZSBmcm9tIHVuZGVyIHVzICovCisJCQlzcGluX2xvY2tfaXJxICgmZGV2LT5sb2NrKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBkb25lOworCQkJaWYgKGRldi0+c2V0dXBfb3V0X2Vycm9yKQorCQkJCXJldHZhbCA9IC1FSU87CisJCQllbHNlIHsKKwkJCQlsZW4gPSBtaW4gKGxlbiwgKHNpemVfdClkZXYtPnJlcS0+YWN0dWFsKTsKKy8vIEZJWE1FIGRvbid0IGNhbGwgdGhpcyB3aXRoIHRoZSBzcGlubG9jayBoZWxkIC4uLgorCQkJCWlmIChjb3B5X3RvX3VzZXIgKGJ1ZiwgJmRldi0+cmVxLT5idWYsIGxlbikpCisJCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQkJY2xlYW5fcmVxIChkZXYtPmdhZGdldC0+ZXAwLCBkZXYtPnJlcSk7CisJCQkJLyogTk9URSB1c2Vyc3BhY2UgY2FuJ3QgeWV0IGNob29zZSB0byBzdGFsbCAqLworCQkJfQorCQl9CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBlbHNlIG5vcm1hbDogcmV0dXJuIGV2ZW50IGRhdGEgKi8KKwlpZiAobGVuIDwgc2l6ZW9mIGRldi0+ZXZlbnQgWzBdKSB7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gZG9uZTsKKwl9CisJbGVuIC09IGxlbiAlIHNpemVvZiAoc3RydWN0IHVzYl9nYWRnZXRmc19ldmVudCk7CisJZGV2LT51c2VybW9kZV9zZXR1cCA9IDE7CisKK3NjYW46CisJLyogcmV0dXJuIHF1ZXVlZCBldmVudHMgcmlnaHQgYXdheSAqLworCWlmIChkZXYtPmV2X25leHQgIT0gMCkgeworCQl1bnNpZ25lZAkJaSwgbjsKKwkJaW50CQkJdG1wID0gZGV2LT5ldl9uZXh0OworCisJCWxlbiA9IG1pbiAobGVuLCB0bXAgKiBzaXplb2YgKHN0cnVjdCB1c2JfZ2FkZ2V0ZnNfZXZlbnQpKTsKKwkJbiA9IGxlbiAvIHNpemVvZiAoc3RydWN0IHVzYl9nYWRnZXRmc19ldmVudCk7CisKKwkJLyogZXAwIGNhbid0IGRlbGl2ZXIgZXZlbnRzIHdoZW4gU1RBVEVfU0VUVVAgKi8KKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQkJaWYgKGRldi0+ZXZlbnQgW2ldLnR5cGUgPT0gR0FER0VURlNfU0VUVVApIHsKKwkJCQlsZW4gPSBuID0gaSArIDE7CisJCQkJbGVuICo9IHNpemVvZiAoc3RydWN0IHVzYl9nYWRnZXRmc19ldmVudCk7CisJCQkJbiA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxICgmZGV2LT5sb2NrKTsKKwkJaWYgKGNvcHlfdG9fdXNlciAoYnVmLCAmZGV2LT5ldmVudCwgbGVuKSkKKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCWVsc2UKKwkJCXJldHZhbCA9IGxlbjsKKwkJaWYgKGxlbiA+IDApIHsKKwkJCWxlbiAvPSBzaXplb2YgKHN0cnVjdCB1c2JfZ2FkZ2V0ZnNfZXZlbnQpOworCisJCQkvKiBOT1RFIHRoaXMgZG9lc24ndCBndWFyZCBhZ2FpbnN0IGJyb2tlbiBkcml2ZXJzOworCQkJICogY29uY3VycmVudCBlcDAgcmVhZGVycyBtYXkgbG9zZSBldmVudHMuCisJCQkgKi8KKwkJCXNwaW5fbG9ja19pcnEgKCZkZXYtPmxvY2spOworCQkJZGV2LT5ldl9uZXh0IC09IGxlbjsKKwkJCWlmIChkZXYtPmV2X25leHQgIT0gMCkKKwkJCQltZW1tb3ZlICgmZGV2LT5ldmVudCwgJmRldi0+ZXZlbnQgW2xlbl0sCisJCQkJCXNpemVvZiAoc3RydWN0IHVzYl9nYWRnZXRmc19ldmVudCkKKwkJCQkJCSogKHRtcCAtIGxlbikpOworCQkJaWYgKG4gPT0gMCkKKwkJCQlkZXYtPnN0YXRlID0gU1RBVEVfU0VUVVA7CisJCQlzcGluX3VubG9ja19pcnEgKCZkZXYtPmxvY2spOworCQl9CisJCXJldHVybiByZXR2YWw7CisJfQorCWlmIChmZC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJcmV0dmFsID0gLUVBR0FJTjsKKwkJZ290byBkb25lOworCX0KKworCXN3aXRjaCAoc3RhdGUpIHsKKwlkZWZhdWx0OgorCQlEQkcgKGRldiwgImZhaWwgJXMsIHN0YXRlICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXRlKTsKKwkJcmV0dmFsID0gLUVTUkNIOworCQlicmVhazsKKwljYXNlIFNUQVRFX1VOQ09OTkVDVEVEOgorCWNhc2UgU1RBVEVfQ09OTkVDVEVEOgorCQlzcGluX3VubG9ja19pcnEgKCZkZXYtPmxvY2spOworCQlEQkcgKGRldiwgIiVzIHdhaXRcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkJLyogd2FpdCBmb3IgZXZlbnRzICovCisJCXJldHZhbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSAoZGV2LT53YWl0LAorCQkJCWRldi0+ZXZfbmV4dCAhPSAwKTsKKwkJaWYgKHJldHZhbCA8IDApCisJCQlyZXR1cm4gcmV0dmFsOworCQlzcGluX2xvY2tfaXJxICgmZGV2LT5sb2NrKTsKKwkJZ290byBzY2FuOworCX0KKworZG9uZToKKwlzcGluX3VubG9ja19pcnEgKCZkZXYtPmxvY2spOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldGZzX2V2ZW50ICoKK25leHRfZXZlbnQgKHN0cnVjdCBkZXZfZGF0YSAqZGV2LCBlbnVtIHVzYl9nYWRnZXRmc19ldmVudF90eXBlIHR5cGUpCit7CisJc3RydWN0IHVzYl9nYWRnZXRmc19ldmVudAkqZXZlbnQ7CisJdW5zaWduZWQJCQlpOworCisJc3dpdGNoICh0eXBlKSB7CisJLyogdGhlc2UgZXZlbnRzIHB1cmdlIHRoZSBxdWV1ZSAqLworCWNhc2UgR0FER0VURlNfRElTQ09OTkVDVDoKKwkJaWYgKGRldi0+c3RhdGUgPT0gU1RBVEVfU0VUVVApCisJCQlkZXYtPnNldHVwX2Fib3J0ID0gMTsKKwkJLy8gRkFMTCBUSFJPVUdICisJY2FzZSBHQURHRVRGU19DT05ORUNUOgorCQlkZXYtPmV2X25leHQgPSAwOworCQlicmVhazsKKwljYXNlIEdBREdFVEZTX1NFVFVQOgkJLyogcHJldmlvdXMgcmVxdWVzdCB0aW1lZCBvdXQgKi8KKwljYXNlIEdBREdFVEZTX1NVU1BFTkQ6CQkvKiBzYW1lIGVmZmVjdCAqLworCQkvKiB0aGVzZSBldmVudHMgY2FuJ3QgYmUgcmVwZWF0ZWQgKi8KKwkJZm9yIChpID0gMDsgaSAhPSBkZXYtPmV2X25leHQ7IGkrKykgeworCQkJaWYgKGRldi0+ZXZlbnQgW2ldLnR5cGUgIT0gdHlwZSkKKwkJCQljb250aW51ZTsKKwkJCURCRyAoZGV2LCAiZGlzY2FyZCBvbGQgZXZlbnQgJWRcbiIsIHR5cGUpOworCQkJZGV2LT5ldl9uZXh0LS07CisJCQlpZiAoaSA9PSBkZXYtPmV2X25leHQpCisJCQkJYnJlYWs7CisJCQkvKiBpbmRpY2VzIHN0YXJ0IGF0IHplcm8sIGZvciBzaW1wbGljaXR5ICovCisJCQltZW1tb3ZlICgmZGV2LT5ldmVudCBbaV0sICZkZXYtPmV2ZW50IFtpICsgMV0sCisJCQkJc2l6ZW9mIChzdHJ1Y3QgdXNiX2dhZGdldGZzX2V2ZW50KQorCQkJCQkqIChkZXYtPmV2X25leHQgLSBpKSk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHICgpOworCX0KKwlldmVudCA9ICZkZXYtPmV2ZW50IFtkZXYtPmV2X25leHQrK107CisJQlVHX09OIChkZXYtPmV2X25leHQgPiBOX0VWRU5UKTsKKwlWREVCVUcgKGRldiwgImV2ICVkLCBuZXh0ICVkXG4iLCB0eXBlLCBkZXYtPmV2X25leHQpOworCW1lbXNldCAoZXZlbnQsIDAsIHNpemVvZiAqZXZlbnQpOworCWV2ZW50LT50eXBlID0gdHlwZTsKKwlyZXR1cm4gZXZlbnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitlcDBfd3JpdGUgKHN0cnVjdCBmaWxlICpmZCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgbG9mZl90ICpwdHIpCit7CisJc3RydWN0IGRldl9kYXRhCQkqZGV2ID0gZmQtPnByaXZhdGVfZGF0YTsKKwlzc2l6ZV90CQkJcmV0dmFsID0gLUVTUkNIOworCisJc3Bpbl9sb2NrX2lycSAoJmRldi0+bG9jayk7CisKKwkvKiByZXBvcnQgZmQgbW9kZSBjaGFuZ2UgYmVmb3JlIGFjdGluZyBvbiBpdCAqLworCWlmIChkZXYtPnNldHVwX2Fib3J0KSB7CisJCWRldi0+c2V0dXBfYWJvcnQgPSAwOworCQlyZXR2YWwgPSAtRUlEUk07CisKKwkvKiBkYXRhIGFuZC9vciBzdGF0dXMgc3RhZ2UgZm9yIGNvbnRyb2wgcmVxdWVzdCAqLworCX0gZWxzZSBpZiAoZGV2LT5zdGF0ZSA9PSBTVEFURV9TRVRVUCkgeworCisJCS8qIElOIERBVEErU1RBVFVTIGNhbGxlciBtYWtlcyBsZW4gPD0gd0xlbmd0aCAqLworCQlpZiAoZGV2LT5zZXR1cF9pbikgeworCQkJcmV0dmFsID0gc2V0dXBfcmVxIChkZXYtPmdhZGdldC0+ZXAwLCBkZXYtPnJlcSwgbGVuKTsKKwkJCWlmIChyZXR2YWwgPT0gMCkgeworCQkJCXNwaW5fdW5sb2NrX2lycSAoJmRldi0+bG9jayk7CisJCQkJaWYgKGNvcHlfZnJvbV91c2VyIChkZXYtPnJlcS0+YnVmLCBidWYsIGxlbikpCisJCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQkJZWxzZQorCQkJCQlyZXR2YWwgPSB1c2JfZXBfcXVldWUgKAorCQkJCQkJZGV2LT5nYWRnZXQtPmVwMCwgZGV2LT5yZXEsCisJCQkJCQlHRlBfS0VSTkVMKTsKKwkJCQlpZiAocmV0dmFsIDwgMCkgeworCQkJCQlzcGluX2xvY2tfaXJxICgmZGV2LT5sb2NrKTsKKwkJCQkJY2xlYW5fcmVxIChkZXYtPmdhZGdldC0+ZXAwLCBkZXYtPnJlcSk7CisJCQkJCXNwaW5fdW5sb2NrX2lycSAoJmRldi0+bG9jayk7CisJCQkJfSBlbHNlCisJCQkJCXJldHZhbCA9IGxlbjsKKworCQkJCXJldHVybiByZXR2YWw7CisJCQl9CisKKwkJLyogY2FuIHN0YWxsIHNvbWUgT1VUIHRyYW5zZmVycyAqLworCQl9IGVsc2UgaWYgKGRldi0+c2V0dXBfY2FuX3N0YWxsKSB7CisJCQlWREVCVUcoZGV2LCAiZXAwb3V0IHN0YWxsXG4iKTsKKwkJCSh2b2lkKSB1c2JfZXBfc2V0X2hhbHQgKGRldi0+Z2FkZ2V0LT5lcDApOworCQkJcmV0dmFsID0gLUVMMkhMVDsKKwkJCWRldi0+c3RhdGUgPSBTVEFURV9DT05ORUNURUQ7CisJCX0gZWxzZSB7CisJCQlEQkcoZGV2LCAiYm9ndXMgZXAwb3V0IHN0YWxsIVxuIik7CisJCX0KKwl9IGVsc2UKKwkJREJHIChkZXYsICJmYWlsICVzLCBzdGF0ZSAlZFxuIiwgX19GVU5DVElPTl9fLCBkZXYtPnN0YXRlKTsKKworCXNwaW5fdW5sb2NrX2lycSAoJmRldi0+bG9jayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludAorZXAwX2Zhc3luYyAoaW50IGYsIHN0cnVjdCBmaWxlICpmZCwgaW50IG9uKQoreworCXN0cnVjdCBkZXZfZGF0YQkJKmRldiA9IGZkLT5wcml2YXRlX2RhdGE7CisJLy8gY2FsbGVyIG11c3QgRl9TRVRPV04gYmVmb3JlIHNpZ25hbCBkZWxpdmVyeSBoYXBwZW5zCisJVkRFQlVHIChkZXYsICIlcyAlc1xuIiwgX19GVU5DVElPTl9fLCBvbiA/ICJvbiIgOiAib2ZmIik7CisJcmV0dXJuIGZhc3luY19oZWxwZXIgKGYsIGZkLCBvbiwgJmRldi0+ZmFzeW5jKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciBnYWRnZXRmc19kcml2ZXI7CisKK3N0YXRpYyBpbnQKK2Rldl9yZWxlYXNlIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmQpCit7CisJc3RydWN0IGRldl9kYXRhCQkqZGV2ID0gZmQtPnByaXZhdGVfZGF0YTsKKworCS8qIGNsb3NpbmcgZXAwID09PSBzaHV0ZG93biBhbGwgKi8KKworCXVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIgKCZnYWRnZXRmc19kcml2ZXIpOworCisJLyogYXQgdGhpcyBwb2ludCAiZ29vZCIgaGFyZHdhcmUgaGFzIGRpc2Nvbm5lY3RlZCB0aGUKKwkgKiBkZXZpY2UgZnJvbSBVU0I7IHRoZSBob3N0IHdvbid0IHNlZSBpdCBhbnkgbW9yZS4KKwkgKiBhbHRlcm5hdGl2ZWx5LCBhbGwgaG9zdCByZXF1ZXN0cyB3aWxsIHRpbWUgb3V0LgorCSAqLworCisJZmFzeW5jX2hlbHBlciAoLTEsIGZkLCAwLCAmZGV2LT5mYXN5bmMpOworCWtmcmVlIChkZXYtPmJ1Zik7CisJZGV2LT5idWYgPSBOVUxMOworCXB1dF9kZXYgKGRldik7CisKKwkvKiBvdGhlciBlbmRwb2ludHMgd2VyZSBhbGwgZGVjb3VwbGVkIGZyb20gdGhpcyBkZXZpY2UgKi8KKwlkZXYtPnN0YXRlID0gU1RBVEVfREVWX0RJU0FCTEVEOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRldl9pb2N0bCAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkLAorCQl1bnNpZ25lZCBjb2RlLCB1bnNpZ25lZCBsb25nIHZhbHVlKQoreworCXN0cnVjdCBkZXZfZGF0YQkJKmRldiA9IGZkLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldCA9IGRldi0+Z2FkZ2V0OworCisJaWYgKGdhZGdldC0+b3BzLT5pb2N0bCkKKwkJcmV0dXJuIGdhZGdldC0+b3BzLT5pb2N0bCAoZ2FkZ2V0LCBjb2RlLCB2YWx1ZSk7CisJcmV0dXJuIC1FTk9UVFk7Cit9CisKKy8qIHVzZWQgYWZ0ZXIgZGV2aWNlIGNvbmZpZ3VyYXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVwMF9pb19vcGVyYXRpb25zID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5sbHNlZWsgPQlub19sbHNlZWssCisKKwkucmVhZCA9CQllcDBfcmVhZCwKKwkud3JpdGUgPQllcDBfd3JpdGUsCisJLmZhc3luYyA9CWVwMF9mYXN5bmMsCisJLy8gLnBvbGwgPQllcDBfcG9sbCwKKwkuaW9jdGwgPQlkZXZfaW9jdGwsCisJLnJlbGVhc2UgPQlkZXZfcmVsZWFzZSwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFRoZSBpbi1rZXJuZWwgZ2FkZ2V0IGRyaXZlciBoYW5kbGVzIG1vc3QgZXAwIGlzc3VlcywgaW4gcGFydGljdWxhcgorICogZW51bWVyYXRpbmcgdGhlIHNpbmdsZSBjb25maWd1cmF0aW9uIChhcyBwcm92aWRlZCBmcm9tIHVzZXIgc3BhY2UpLgorICoKKyAqIFVucmVjb2duaXplZCBlcDAgcmVxdWVzdHMgbWF5IGJlIGhhbmRsZWQgaW4gdXNlciBzcGFjZS4KKyAqLworCisjaWZkZWYJSElHSFNQRUVECitzdGF0aWMgdm9pZCBtYWtlX3F1YWxpZmllciAoc3RydWN0IGRldl9kYXRhICpkZXYpCit7CisJc3RydWN0IHVzYl9xdWFsaWZpZXJfZGVzY3JpcHRvcgkJcXVhbDsKKwlzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yCQkqZGVzYzsKKworCXF1YWwuYkxlbmd0aCA9IHNpemVvZiBxdWFsOworCXF1YWwuYkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX0RFVklDRV9RVUFMSUZJRVI7CisJcXVhbC5iY2RVU0IgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDApOworCisJZGVzYyA9IGRldi0+ZGV2OworCXF1YWwuYkRldmljZUNsYXNzID0gZGVzYy0+YkRldmljZUNsYXNzOworCXF1YWwuYkRldmljZVN1YkNsYXNzID0gZGVzYy0+YkRldmljZVN1YkNsYXNzOworCXF1YWwuYkRldmljZVByb3RvY29sID0gZGVzYy0+YkRldmljZVByb3RvY29sOworCisJLyogYXNzdW1lcyBlcDAgdXNlcyB0aGUgc2FtZSB2YWx1ZSBmb3IgYm90aCBzcGVlZHMgLi4uICovCisJcXVhbC5iTWF4UGFja2V0U2l6ZTAgPSBkZXNjLT5iTWF4UGFja2V0U2l6ZTA7CisKKwlxdWFsLmJOdW1Db25maWd1cmF0aW9ucyA9IDE7CisJcXVhbC5iUkVTRVJWRUQgPSAwOworCisJbWVtY3B5IChkZXYtPnJidWYsICZxdWFsLCBzaXplb2YgcXVhbCk7Cit9CisjZW5kaWYKKworc3RhdGljIGludAorY29uZmlnX2J1ZiAoc3RydWN0IGRldl9kYXRhICpkZXYsIHU4IHR5cGUsIHVuc2lnbmVkIGluZGV4KQoreworCWludAkJbGVuOworI2lmZGVmIEhJR0hTUEVFRAorCWludAkJaHM7CisjZW5kaWYKKworCS8qIG9ubHkgb25lIGNvbmZpZ3VyYXRpb24gKi8KKwlpZiAoaW5kZXggPiAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworI2lmZGVmIEhJR0hTUEVFRAorCWhzID0gKGRldi0+Z2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCk7CisJaWYgKHR5cGUgPT0gVVNCX0RUX09USEVSX1NQRUVEX0NPTkZJRykKKwkJaHMgPSAhaHM7CisJaWYgKGhzKSB7CisJCWRldi0+cmVxLT5idWYgPSBkZXYtPmhzX2NvbmZpZzsKKwkJbGVuID0gbGUxNl90b19jcHVwICgmZGV2LT5oc19jb25maWctPndUb3RhbExlbmd0aCk7CisJfSBlbHNlCisjZW5kaWYKKwl7CisJCWRldi0+cmVxLT5idWYgPSBkZXYtPmNvbmZpZzsKKwkJbGVuID0gbGUxNl90b19jcHVwICgmZGV2LT5jb25maWctPndUb3RhbExlbmd0aCk7CisJfQorCSgodTggKilkZXYtPnJlcS0+YnVmKSBbMV0gPSB0eXBlOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQKK2dhZGdldGZzX3NldHVwIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LCBjb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKQoreworCXN0cnVjdCBkZXZfZGF0YQkJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCk7CisJc3RydWN0IHVzYl9yZXF1ZXN0CQkqcmVxID0gZGV2LT5yZXE7CisJaW50CQkJCXZhbHVlID0gLUVPUE5PVFNVUFA7CisJc3RydWN0IHVzYl9nYWRnZXRmc19ldmVudAkqZXZlbnQ7CisJdTE2CQkJCXdfdmFsdWUgPSBjdHJsLT53VmFsdWU7CisJdTE2CQkJCXdfbGVuZ3RoID0gY3RybC0+d0xlbmd0aDsKKworCXNwaW5fbG9jayAoJmRldi0+bG9jayk7CisJZGV2LT5zZXR1cF9hYm9ydCA9IDA7CisJaWYgKGRldi0+c3RhdGUgPT0gU1RBVEVfVU5DT05ORUNURUQpIHsKKwkJc3RydWN0IHVzYl9lcAkqZXA7CisJCXN0cnVjdCBlcF9kYXRhCSpkYXRhOworCisJCWRldi0+c3RhdGUgPSBTVEFURV9DT05ORUNURUQ7CisJCWRldi0+ZGV2LT5iTWF4UGFja2V0U2l6ZTAgPSBnYWRnZXQtPmVwMC0+bWF4cGFja2V0OworCisjaWZkZWYJSElHSFNQRUVECisJCWlmIChnYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIICYmIGRldi0+aHNfY29uZmlnID09IDApIHsKKwkJCUVSUk9SIChkZXYsICJubyBoaWdoIHNwZWVkIGNvbmZpZz8/XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisjZW5kaWYJLyogSElHSFNQRUVEICovCisKKwkJSU5GTyAoZGV2LCAiY29ubmVjdGVkXG4iKTsKKwkJZXZlbnQgPSBuZXh0X2V2ZW50IChkZXYsIEdBREdFVEZTX0NPTk5FQ1QpOworCQlldmVudC0+dS5zcGVlZCA9IGdhZGdldC0+c3BlZWQ7CisJCWVwMF9yZWFkYWJsZSAoZGV2KTsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5IChlcCwgJmdhZGdldC0+ZXBfbGlzdCwgZXBfbGlzdCkgeworCQkJZGF0YSA9IGVwLT5kcml2ZXJfZGF0YTsKKwkJCS8qIC4uLiBkb3duX3RyeWxvY2sgKCZkYXRhLT5sb2NrKSAuLi4gKi8KKwkJCWlmIChkYXRhLT5zdGF0ZSAhPSBTVEFURV9FUF9ERUZFUl9FTkFCTEUpCisJCQkJY29udGludWU7CisjaWZkZWYJSElHSFNQRUVECisJCQlpZiAoZ2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJCQl2YWx1ZSA9IHVzYl9lcF9lbmFibGUgKGVwLCAmZGF0YS0+aHNfZGVzYyk7CisJCQllbHNlCisjZW5kaWYJLyogSElHSFNQRUVEICovCisJCQkJdmFsdWUgPSB1c2JfZXBfZW5hYmxlIChlcCwgJmRhdGEtPmRlc2MpOworCQkJaWYgKHZhbHVlKSB7CisJCQkJRVJST1IgKGRldiwgImRlZmVycmVkICVzIGVuYWJsZSAtLT4gJWRcbiIsCisJCQkJCWRhdGEtPm5hbWUsIHZhbHVlKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWRhdGEtPnN0YXRlID0gU1RBVEVfRVBfRU5BQkxFRDsKKwkJCXdha2VfdXAgKCZkYXRhLT53YWl0KTsKKwkJCURCRyAoZGV2LCAid29rZSB1cCAlcyB3YWl0ZXJzXG4iLCBkYXRhLT5uYW1lKTsKKwkJfQorCisJLyogaG9zdCBtYXkgaGF2ZSBnaXZlbiB1cCB3YWl0aW5nIGZvciByZXNwb25zZS4gIHdlIGNhbiBtaXNzIGNvbnRyb2wKKwkgKiByZXF1ZXN0cyBoYW5kbGVkIGxvd2VyIGRvd24gKGRldmljZS9lbmRwb2ludCBzdGF0dXMgYW5kIGZlYXR1cmVzKTsKKwkgKiB0aGVuIGVwMF97cmVhZCx3cml0ZX0gd2lsbCByZXBvcnQgdGhlIHdyb25nIHN0YXR1cy4gY29udHJvbGxlcgorCSAqIGRyaXZlciB3aWxsIGhhdmUgYWJvcnRlZCBwZW5kaW5nIGkvby4KKwkgKi8KKwl9IGVsc2UgaWYgKGRldi0+c3RhdGUgPT0gU1RBVEVfU0VUVVApCisJCWRldi0+c2V0dXBfYWJvcnQgPSAxOworCisJcmVxLT5idWYgPSBkZXYtPnJidWY7CisJcmVxLT5kbWEgPSBETUFfQUREUl9JTlZBTElEOworCXJlcS0+Y29udGV4dCA9IE5VTEw7CisJdmFsdWUgPSAtRU9QTk9UU1VQUDsKKwlzd2l0Y2ggKGN0cmwtPmJSZXF1ZXN0KSB7CisKKwljYXNlIFVTQl9SRVFfR0VUX0RFU0NSSVBUT1I6CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gVVNCX0RJUl9JTikKKwkJCWdvdG8gdW5yZWNvZ25pemVkOworCQlzd2l0Y2ggKHdfdmFsdWUgPj4gOCkgeworCisJCWNhc2UgVVNCX0RUX0RFVklDRToKKwkJCXZhbHVlID0gbWluICh3X2xlbmd0aCwgKHUxNikgc2l6ZW9mICpkZXYtPmRldik7CisJCQlyZXEtPmJ1ZiA9IGRldi0+ZGV2OworCQkJYnJlYWs7CisjaWZkZWYJSElHSFNQRUVECisJCWNhc2UgVVNCX0RUX0RFVklDRV9RVUFMSUZJRVI6CisJCQlpZiAoIWRldi0+aHNfY29uZmlnKQorCQkJCWJyZWFrOworCQkJdmFsdWUgPSBtaW4gKHdfbGVuZ3RoLCAodTE2KQorCQkJCXNpemVvZiAoc3RydWN0IHVzYl9xdWFsaWZpZXJfZGVzY3JpcHRvcikpOworCQkJbWFrZV9xdWFsaWZpZXIgKGRldik7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfRFRfT1RIRVJfU1BFRURfQ09ORklHOgorCQkJLy8gRkFMTFRIUk9VR0gKKyNlbmRpZgorCQljYXNlIFVTQl9EVF9DT05GSUc6CisJCQl2YWx1ZSA9IGNvbmZpZ19idWYgKGRldiwKKwkJCQkJd192YWx1ZSA+PiA4LAorCQkJCQl3X3ZhbHVlICYgMHhmZik7CisJCQlpZiAodmFsdWUgPj0gMCkKKwkJCQl2YWx1ZSA9IG1pbiAod19sZW5ndGgsICh1MTYpIHZhbHVlKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9EVF9TVFJJTkc6CisJCQlnb3RvIHVucmVjb2duaXplZDsKKworCQlkZWZhdWx0OgkJLy8gYWxsIG90aGVycyBhcmUgZXJyb3JzCisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCS8qIGN1cnJlbnRseSBvbmUgY29uZmlnLCB0d28gc3BlZWRzICovCisJY2FzZSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IDApCisJCQlicmVhazsKKwkJaWYgKDAgPT0gKHU4KSB3X3ZhbHVlKSB7CisJCQl2YWx1ZSA9IDA7CisJCQlkZXYtPmN1cnJlbnRfY29uZmlnID0gMDsKKwkJCXVzYl9nYWRnZXRfdmJ1c19kcmF3KGdhZGdldCwgOCAvKiBtQSAqLyApOworCQkJLy8gdXNlciBtb2RlIGV4cGVjdGVkIHRvIGRpc2FibGUgZW5kcG9pbnRzCisJCX0gZWxzZSB7CisJCQl1OAljb25maWcsIHBvd2VyOworI2lmZGVmCUhJR0hTUEVFRAorCQkJaWYgKGdhZGdldC0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIHsKKwkJCQljb25maWcgPSBkZXYtPmhzX2NvbmZpZy0+YkNvbmZpZ3VyYXRpb25WYWx1ZTsKKwkJCQlwb3dlciA9IGRldi0+aHNfY29uZmlnLT5iTWF4UG93ZXI7CisJCQl9IGVsc2UKKyNlbmRpZgorCQkJeworCQkJCWNvbmZpZyA9IGRldi0+Y29uZmlnLT5iQ29uZmlndXJhdGlvblZhbHVlOworCQkJCXBvd2VyID0gZGV2LT5jb25maWctPmJNYXhQb3dlcjsKKwkJCX0KKworCQkJaWYgKGNvbmZpZyA9PSAodTgpIHdfdmFsdWUpIHsKKwkJCQl2YWx1ZSA9IDA7CisJCQkJZGV2LT5jdXJyZW50X2NvbmZpZyA9IGNvbmZpZzsKKwkJCQl1c2JfZ2FkZ2V0X3ZidXNfZHJhdyhnYWRnZXQsIDIgKiBwb3dlcik7CisJCQl9CisJCX0KKworCQkvKiByZXBvcnQgU0VUX0NPTkZJR1VSQVRJT04gbGlrZSBhbnkgb3RoZXIgY29udHJvbCByZXF1ZXN0LAorCQkgKiBleGNlcHQgdGhhdCB1c2VybW9kZSBtYXkgbm90IHN0YWxsIHRoaXMuICB0aGUgbmV4dAorCQkgKiByZXF1ZXN0IG11c3RuJ3QgYmUgYWxsb3dlZCBzdGFydCB1bnRpbCB0aGlzIGZpbmlzaGVzOgorCQkgKiBlbmRwb2ludHMgYW5kIHRocmVhZHMgc2V0IHVwLCBldGMuCisJCSAqCisJCSAqIE5PVEU6ICBvbGRlciBQWEEgaGFyZHdhcmUgKGJlZm9yZSBQWEEgMjU1OiB3aXRob3V0IFVEQ0NGUikKKwkJICogaGFzIGJhZC9yYWNleSBhdXRvbWFnaWMgdGhhdCBwcmV2ZW50cyBzeW5jaHJvbml6aW5nIGhlcmUuCisJCSAqIGV2ZW4ga2VybmVsIG1vZGUgZHJpdmVycyBvZnRlbiBtaXNzIHRoZW0uCisJCSAqLworCQlpZiAodmFsdWUgPT0gMCkgeworCQkJSU5GTyAoZGV2LCAiY29uZmlndXJhdGlvbiAjJWRcbiIsIGRldi0+Y3VycmVudF9jb25maWcpOworCQkJaWYgKGRldi0+dXNlcm1vZGVfc2V0dXApIHsKKwkJCQlkZXYtPnNldHVwX2Nhbl9zdGFsbCA9IDA7CisJCQkJZ290byBkZWxlZ2F0ZTsKKwkJCX0KKwkJfQorCQlicmVhazsKKworI2lmbmRlZglDT05GSUdfVVNCX0dBREdFVEZTX1BYQTJYWAorCS8qIFBYQSBhdXRvbWFnaWNhbGx5IGhhbmRsZXMgdGhpcyByZXF1ZXN0IHRvbyAqLworCWNhc2UgVVNCX1JFUV9HRVRfQ09ORklHVVJBVElPTjoKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAweDgwKQorCQkJYnJlYWs7CisJCSoodTggKilyZXEtPmJ1ZiA9IGRldi0+Y3VycmVudF9jb25maWc7CisJCXZhbHVlID0gbWluICh3X2xlbmd0aCwgKHUxNikgMSk7CisJCWJyZWFrOworI2VuZGlmCisKKwlkZWZhdWx0OgordW5yZWNvZ25pemVkOgorCQlWREVCVUcgKGRldiwgIiVzIHJlcSUwMnguJTAyeCB2JTA0eCBpJTA0eCBsJWRcbiIsCisJCQlkZXYtPnVzZXJtb2RlX3NldHVwID8gImRlbGVnYXRlIiA6ICJmYWlsIiwKKwkJCWN0cmwtPmJSZXF1ZXN0VHlwZSwgY3RybC0+YlJlcXVlc3QsCisJCQl3X3ZhbHVlLCBsZTE2X3RvX2NwdShjdHJsLT53SW5kZXgpLCB3X2xlbmd0aCk7CisKKwkJLyogaWYgdGhlcmUncyBhbiBlcDAgcmVhZGVyLCBkb24ndCBzdGFsbCAqLworCQlpZiAoZGV2LT51c2VybW9kZV9zZXR1cCkgeworCQkJZGV2LT5zZXR1cF9jYW5fc3RhbGwgPSAxOworZGVsZWdhdGU6CisJCQlkZXYtPnNldHVwX2luID0gKGN0cmwtPmJSZXF1ZXN0VHlwZSAmIFVTQl9ESVJfSU4pCisJCQkJCQk/IDEgOiAwOworCQkJZGV2LT5zZXR1cF9vdXRfcmVhZHkgPSAwOworCQkJZGV2LT5zZXR1cF9vdXRfZXJyb3IgPSAwOworCQkJdmFsdWUgPSAwOworCisJCQkvKiByZWFkIERBVEEgc3RhZ2UgZm9yIE9VVCByaWdodCBhd2F5ICovCisJCQlpZiAodW5saWtlbHkgKCFkZXYtPnNldHVwX2luICYmIHdfbGVuZ3RoKSkgeworCQkJCXZhbHVlID0gc2V0dXBfcmVxIChnYWRnZXQtPmVwMCwgZGV2LT5yZXEsCisJCQkJCQkJd19sZW5ndGgpOworCQkJCWlmICh2YWx1ZSA8IDApCisJCQkJCWJyZWFrOworCQkJCXZhbHVlID0gdXNiX2VwX3F1ZXVlIChnYWRnZXQtPmVwMCwgZGV2LT5yZXEsCisJCQkJCQkJR0ZQX0FUT01JQyk7CisJCQkJaWYgKHZhbHVlIDwgMCkgeworCQkJCQljbGVhbl9yZXEgKGdhZGdldC0+ZXAwLCBkZXYtPnJlcSk7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCS8qIHdlIGNhbid0IGN1cnJlbnRseSBzdGFsbCB0aGVzZSAqLworCQkJCWRldi0+c2V0dXBfY2FuX3N0YWxsID0gMDsKKwkJCX0KKworCQkJLyogc3RhdGUgY2hhbmdlcyB3aGVuIHJlYWRlciBjb2xsZWN0cyBldmVudCAqLworCQkJZXZlbnQgPSBuZXh0X2V2ZW50IChkZXYsIEdBREdFVEZTX1NFVFVQKTsKKwkJCWV2ZW50LT51LnNldHVwID0gKmN0cmw7CisJCQllcDBfcmVhZGFibGUgKGRldik7CisJCQlzcGluX3VubG9jayAoJmRldi0+bG9jayk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qIHByb2NlZWQgd2l0aCBkYXRhIHRyYW5zZmVyIGFuZCBzdGF0dXMgcGhhc2VzPyAqLworCWlmICh2YWx1ZSA+PSAwICYmIGRldi0+c3RhdGUgIT0gU1RBVEVfU0VUVVApIHsKKwkJcmVxLT5sZW5ndGggPSB2YWx1ZTsKKwkJcmVxLT56ZXJvID0gdmFsdWUgPCB3X2xlbmd0aDsKKwkJdmFsdWUgPSB1c2JfZXBfcXVldWUgKGdhZGdldC0+ZXAwLCByZXEsIEdGUF9BVE9NSUMpOworCQlpZiAodmFsdWUgPCAwKSB7CisJCQlEQkcgKGRldiwgImVwX3F1ZXVlIC0tPiAlZFxuIiwgdmFsdWUpOworCQkJcmVxLT5zdGF0dXMgPSAwOworCQl9CisJfQorCisJLyogZGV2aWNlIHN0YWxscyB3aGVuIHZhbHVlIDwgMCAqLworCXNwaW5fdW5sb2NrICgmZGV2LT5sb2NrKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfZXBfZmlsZXMgKHN0cnVjdCBkZXZfZGF0YSAqZGV2KQoreworCXN0cnVjdCBsaXN0X2hlYWQJKmVudHJ5LCAqdG1wOworCisJREJHIChkZXYsICIlcyAlZFxuIiwgX19GVU5DVElPTl9fLCBkZXYtPnN0YXRlKTsKKworCS8qIGRldi0+c3RhdGUgbXVzdCBwcmV2ZW50IGludGVyZmVyZW5jZSAqLworcmVzdGFydDoKKwlzcGluX2xvY2tfaXJxICgmZGV2LT5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUgKGVudHJ5LCB0bXAsICZkZXYtPmVwZmlsZXMpIHsKKwkJc3RydWN0IGVwX2RhdGEJKmVwOworCQlzdHJ1Y3QgaW5vZGUJKnBhcmVudDsKKwkJc3RydWN0IGRlbnRyeQkqZGVudHJ5OworCisJCS8qIGJyZWFrIGxpbmsgdG8gRlMgKi8KKwkJZXAgPSBsaXN0X2VudHJ5IChlbnRyeSwgc3RydWN0IGVwX2RhdGEsIGVwZmlsZXMpOworCQlsaXN0X2RlbF9pbml0ICgmZXAtPmVwZmlsZXMpOworCQlkZW50cnkgPSBlcC0+ZGVudHJ5OworCQllcC0+ZGVudHJ5ID0gTlVMTDsKKwkJcGFyZW50ID0gZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZTsKKworCQkvKiBicmVhayBsaW5rIHRvIGNvbnRyb2xsZXIgKi8KKwkJaWYgKGVwLT5zdGF0ZSA9PSBTVEFURV9FUF9FTkFCTEVEKQorCQkJKHZvaWQpIHVzYl9lcF9kaXNhYmxlIChlcC0+ZXApOworCQllcC0+c3RhdGUgPSBTVEFURV9FUF9VTkJPVU5EOworCQl1c2JfZXBfZnJlZV9yZXF1ZXN0IChlcC0+ZXAsIGVwLT5yZXEpOworCQllcC0+ZXAgPSBOVUxMOworCQl3YWtlX3VwICgmZXAtPndhaXQpOworCQlwdXRfZXAgKGVwKTsKKworCQlzcGluX3VubG9ja19pcnEgKCZkZXYtPmxvY2spOworCisJCS8qIGJyZWFrIGxpbmsgdG8gZGNhY2hlICovCisJCWRvd24gKCZwYXJlbnQtPmlfc2VtKTsKKwkJZF9kZWxldGUgKGRlbnRyeSk7CisJCWRwdXQgKGRlbnRyeSk7CisJCXVwICgmcGFyZW50LT5pX3NlbSk7CisKKwkJLyogZmRzIG1heSBzdGlsbCBiZSBvcGVuICovCisJCWdvdG8gcmVzdGFydDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxICgmZGV2LT5sb2NrKTsKK30KKworCitzdGF0aWMgc3RydWN0IGlub2RlICoKK2dhZGdldGZzX2NyZWF0ZV9maWxlIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjaGFyIGNvbnN0ICpuYW1lLAorCQl2b2lkICpkYXRhLCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzLAorCQlzdHJ1Y3QgZGVudHJ5ICoqZGVudHJ5X3ApOworCitzdGF0aWMgaW50IGFjdGl2YXRlX2VwX2ZpbGVzIChzdHJ1Y3QgZGV2X2RhdGEgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2VwCSplcDsKKworCWdhZGdldF9mb3JfZWFjaF9lcCAoZXAsIGRldi0+Z2FkZ2V0KSB7CisJCXN0cnVjdCBlcF9kYXRhCSpkYXRhOworCisJCWRhdGEgPSBrbWFsbG9jIChzaXplb2YgKmRhdGEsIEdGUF9LRVJORUwpOworCQlpZiAoIWRhdGEpCisJCQlnb3RvIGVub21lbTsKKwkJbWVtc2V0IChkYXRhLCAwLCBzaXplb2YgZGF0YSk7CisJCWRhdGEtPnN0YXRlID0gU1RBVEVfRVBfRElTQUJMRUQ7CisJCWluaXRfTVVURVggKCZkYXRhLT5sb2NrKTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCAoJmRhdGEtPndhaXQpOworCisJCXN0cm5jcHkgKGRhdGEtPm5hbWUsIGVwLT5uYW1lLCBzaXplb2YgKGRhdGEtPm5hbWUpIC0gMSk7CisJCWF0b21pY19zZXQgKCZkYXRhLT5jb3VudCwgMSk7CisJCWRhdGEtPmRldiA9IGRldjsKKwkJZ2V0X2RldiAoZGV2KTsKKworCQlkYXRhLT5lcCA9IGVwOworCQllcC0+ZHJpdmVyX2RhdGEgPSBkYXRhOworCisJCWRhdGEtPnJlcSA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0IChlcCwgR0ZQX0tFUk5FTCk7CisJCWlmICghZGF0YS0+cmVxKQorCQkJZ290byBlbm9tZW07CisKKwkJZGF0YS0+aW5vZGUgPSBnYWRnZXRmc19jcmVhdGVfZmlsZSAoZGV2LT5zYiwgZGF0YS0+bmFtZSwKKwkJCQlkYXRhLCAmZXBfY29uZmlnX29wZXJhdGlvbnMsCisJCQkJJmRhdGEtPmRlbnRyeSk7CisJCWlmICghZGF0YS0+aW5vZGUpIHsKKwkJCWtmcmVlIChkYXRhKTsKKwkJCWdvdG8gZW5vbWVtOworCQl9CisJCWxpc3RfYWRkX3RhaWwgKCZkYXRhLT5lcGZpbGVzLCAmZGV2LT5lcGZpbGVzKTsKKwl9CisJcmV0dXJuIDA7CisKK2Vub21lbToKKwlEQkcgKGRldiwgIiVzIGVub21lbVxuIiwgX19GVU5DVElPTl9fKTsKKwlkZXN0cm95X2VwX2ZpbGVzIChkZXYpOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZAorZ2FkZ2V0ZnNfdW5iaW5kIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCBkZXZfZGF0YQkJKmRldiA9IGdldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0KTsKKworCURCRyAoZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlzcGluX2xvY2tfaXJxICgmZGV2LT5sb2NrKTsKKwlkZXYtPnN0YXRlID0gU1RBVEVfREVWX1VOQk9VTkQ7CisJc3Bpbl91bmxvY2tfaXJxICgmZGV2LT5sb2NrKTsKKworCWRlc3Ryb3lfZXBfZmlsZXMgKGRldik7CisJZ2FkZ2V0LT5lcDAtPmRyaXZlcl9kYXRhID0gTlVMTDsKKwlzZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCwgTlVMTCk7CisKKwkvKiB3ZSd2ZSBhbHJlYWR5IGJlZW4gZGlzY29ubmVjdGVkIC4uLiBubyBpL28gaXMgYWN0aXZlICovCisJaWYgKGRldi0+cmVxKQorCQl1c2JfZXBfZnJlZV9yZXF1ZXN0IChnYWRnZXQtPmVwMCwgZGV2LT5yZXEpOworCURCRyAoZGV2LCAiJXMgZG9uZVxuIiwgX19GVU5DVElPTl9fKTsKKwlwdXRfZGV2IChkZXYpOworfQorCitzdGF0aWMgc3RydWN0IGRldl9kYXRhCQkqdGhlX2RldmljZTsKKworc3RhdGljIGludAorZ2FkZ2V0ZnNfYmluZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgZGV2X2RhdGEJCSpkZXYgPSB0aGVfZGV2aWNlOworCisJaWYgKCFkZXYpCisJCXJldHVybiAtRVNSQ0g7CisJaWYgKDAgIT0gc3RyY21wIChDSElQLCBnYWRnZXQtPm5hbWUpKSB7CisJCXByaW50ayAoS0VSTl9FUlIgIiVzIGV4cGVjdGVkICVzIGNvbnRyb2xsZXIgbm90ICVzXG4iLAorCQkJc2hvcnRuYW1lLCBDSElQLCBnYWRnZXQtPm5hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCwgZGV2KTsKKwlkZXYtPmdhZGdldCA9IGdhZGdldDsKKwlnYWRnZXQtPmVwMC0+ZHJpdmVyX2RhdGEgPSBkZXY7CisJZGV2LT5kZXYtPmJNYXhQYWNrZXRTaXplMCA9IGdhZGdldC0+ZXAwLT5tYXhwYWNrZXQ7CisKKwkvKiBwcmVhbGxvY2F0ZSBjb250cm9sIHJlc3BvbnNlIGFuZCBidWZmZXIgKi8KKwlkZXYtPnJlcSA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0IChnYWRnZXQtPmVwMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPnJlcSkKKwkJZ290byBlbm9tZW07CisJZGV2LT5yZXEtPmNvbnRleHQgPSBOVUxMOworCWRldi0+cmVxLT5jb21wbGV0ZSA9IGVwaW9fY29tcGxldGU7CisKKwlpZiAoYWN0aXZhdGVfZXBfZmlsZXMgKGRldikgPCAwKQorCQlnb3RvIGVub21lbTsKKworCUlORk8gKGRldiwgImJvdW5kIHRvICVzIGRyaXZlclxuIiwgZ2FkZ2V0LT5uYW1lKTsKKwlkZXYtPnN0YXRlID0gU1RBVEVfVU5DT05ORUNURUQ7CisJZ2V0X2RldiAoZGV2KTsKKwlyZXR1cm4gMDsKKworZW5vbWVtOgorCWdhZGdldGZzX3VuYmluZCAoZ2FkZ2V0KTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQKK2dhZGdldGZzX2Rpc2Nvbm5lY3QgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IGRldl9kYXRhCQkqZGV2ID0gZ2V0X2dhZGdldF9kYXRhIChnYWRnZXQpOworCisJaWYgKGRldi0+c3RhdGUgPT0gU1RBVEVfVU5DT05ORUNURUQpIHsKKwkJREJHIChkZXYsICJhbHJlYWR5IHVuY29ubmVjdGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKwlkZXYtPnN0YXRlID0gU1RBVEVfVU5DT05ORUNURUQ7CisKKwlJTkZPIChkZXYsICJkaXNjb25uZWN0ZWRcbiIpOworCXNwaW5fbG9jayAoJmRldi0+bG9jayk7CisJbmV4dF9ldmVudCAoZGV2LCBHQURHRVRGU19ESVNDT05ORUNUKTsKKwllcDBfcmVhZGFibGUgKGRldik7CisJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOworfQorCitzdGF0aWMgdm9pZAorZ2FkZ2V0ZnNfc3VzcGVuZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgZGV2X2RhdGEJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCk7CisKKwlJTkZPIChkZXYsICJzdXNwZW5kZWQgZnJvbSBzdGF0ZSAlZFxuIiwgZGV2LT5zdGF0ZSk7CisJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKKwlzd2l0Y2ggKGRldi0+c3RhdGUpIHsKKwljYXNlIFNUQVRFX1NFVFVQOgkJLy8gVkVSWSBvZGQuLi4gaG9zdCBkaWVkPz8KKwljYXNlIFNUQVRFX0NPTk5FQ1RFRDoKKwljYXNlIFNUQVRFX1VOQ09OTkVDVEVEOgorCQluZXh0X2V2ZW50IChkZXYsIEdBREdFVEZTX1NVU1BFTkQpOworCQllcDBfcmVhZGFibGUgKGRldik7CisJCS8qIEZBTExUSFJPVUdIICovCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrICgmZGV2LT5sb2NrKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciBnYWRnZXRmc19kcml2ZXIgPSB7CisjaWZkZWYJSElHSFNQRUVECisJLnNwZWVkCQk9IFVTQl9TUEVFRF9ISUdILAorI2Vsc2UKKwkuc3BlZWQJCT0gVVNCX1NQRUVEX0ZVTEwsCisjZW5kaWYKKwkuZnVuY3Rpb24JPSAoY2hhciAqKSBkcml2ZXJfZGVzYywKKwkuYmluZAkJPSBnYWRnZXRmc19iaW5kLAorCS51bmJpbmQJCT0gZ2FkZ2V0ZnNfdW5iaW5kLAorCS5zZXR1cAkJPSBnYWRnZXRmc19zZXR1cCwKKwkuZGlzY29ubmVjdAk9IGdhZGdldGZzX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQJPSBnYWRnZXRmc19zdXNwZW5kLAorCisJLmRyaXZlciAJPSB7CisJCS5uYW1lCQk9IChjaGFyICopIHNob3J0bmFtZSwKKwkJLy8gLnNodXRkb3duID0gLi4uCisJCS8vIC5zdXNwZW5kID0gLi4uCisJCS8vIC5yZXN1bWUgPSAuLi4KKwl9LAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgZ2FkZ2V0ZnNfbm9wKHN0cnVjdCB1c2JfZ2FkZ2V0ICphcmcpIHsgfQorCitzdGF0aWMgaW50IGdhZGdldGZzX3Byb2JlIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCUNISVAgPSBnYWRnZXQtPm5hbWU7CisJcmV0dXJuIC1FSVNOQU07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgcHJvYmVfZHJpdmVyID0geworCS5zcGVlZAkJPSBVU0JfU1BFRURfSElHSCwKKwkuYmluZAkJPSBnYWRnZXRmc19wcm9iZSwKKwkudW5iaW5kCQk9IGdhZGdldGZzX25vcCwKKwkuc2V0dXAJCT0gKHZvaWQgKilnYWRnZXRmc19ub3AsCisJLmRpc2Nvbm5lY3QJPSBnYWRnZXRmc19ub3AsCisJLmRyaXZlciAJPSB7CisJCS5uYW1lCQk9ICJub3AiLAorCX0sCit9OworCisKKy8qIERFVklDRSBJTklUSUFMSVpBVElPTgorICoKKyAqICAgICBmZCA9IG9wZW4gKCIvZGV2L2dhZGdldC8kQ0hJUCIsIE9fUkRXUikKKyAqICAgICBzdGF0dXMgPSB3cml0ZSAoZmQsIGRlc2NyaXB0b3JzLCBzaXplb2YgZGVzY3JpcHRvcnMpCisgKgorICogVGhhdCB3cml0ZSBlc3RhYmxpc2hlcyB0aGUgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIHNvIHRoZSBrZXJuZWwgY2FuCisgKiBiaW5kIHRvIHRoZSBjb250cm9sbGVyIC4uLiBndWFyYW50ZWVpbmcgaXQgY2FuIGhhbmRsZSBlbnVtZXJhdGlvbgorICogYXQgYWxsIG5lY2Vzc2FyeSBzcGVlZHMuICBEZXNjcmlwdG9yIG9yZGVyIGlzOgorICoKKyAqIC4gbWVzc2FnZSB0YWcgKHUzMiwgaG9zdCBvcmRlcikgLi4uIGZvciBub3csIG11c3QgYmUgemVybzsgaXQKKyAqCXdvdWxkIGNoYW5nZSB0byBzdXBwb3J0IGZlYXR1cmVzIGxpa2UgbXVsdGktY29uZmlnIGRldmljZXMKKyAqIC4gZnVsbC9sb3cgc3BlZWQgY29uZmlnIC4uLiBhbGwgd1RvdGFsTGVuZ3RoIGJ5dGVzICh3aXRoIGludGVyZmFjZSwKKyAqCWNsYXNzLCBhbHRzZXR0aW5nLCBlbmRwb2ludCwgYW5kIG90aGVyIGRlc2NyaXB0b3JzKQorICogLiBoaWdoIHNwZWVkIGNvbmZpZyAuLi4gYWxsIGRlc2NyaXB0b3JzLCBmb3IgaGlnaCBzcGVlZCBvcGVyYXRpb247CisgKiAJdGhpcyBvbmUncyBvcHRpb25hbCBleGNlcHQgZm9yIGhpZ2gtc3BlZWQgaGFyZHdhcmUKKyAqIC4gZGV2aWNlIGRlc2NyaXB0b3IKKyAqCisgKiBFbmRwb2ludHMgYXJlIG5vdCB5ZXQgZW5hYmxlZC4gRHJpdmVycyBtYXkgd2FudCB0byBpbW1lZGlhdGVseQorICogaW5pdGlhbGl6ZSB0aGVtLCB1c2luZyB0aGUgL2Rldi9nYWRnZXQvZXAqIGZpbGVzIHRoYXQgYXJlIGF2YWlsYWJsZQorICogYXMgc29vbiBhcyB0aGUga2VybmVsIHNlZXMgdGhlIGNvbmZpZ3VyYXRpb24sIG9yIHRoZXkgY2FuIHdhaXQKKyAqIHVudGlsIGRldmljZSBjb25maWd1cmF0aW9uIGFuZCBpbnRlcmZhY2UgYWx0c2V0dGluZyBjaGFuZ2VzIGNyZWF0ZQorICogdGhlIG5lZWQgdG8gY29uZmlndXJlIChvciB1bmNvbmZpZ3VyZSkgdGhlbS4KKyAqCisgKiBBZnRlciBpbml0aWFsaXphdGlvbiwgdGhlIGRldmljZSBzdGF5cyBhY3RpdmUgZm9yIGFzIGxvbmcgYXMgdGhhdAorICogJENISVAgZmlsZSBpcyBvcGVuLiAgRXZlbnRzIG1heSB0aGVuIGJlIHJlYWQgZnJvbSB0aGF0IGRlc2NyaXB0b3IsCisgKiBzdWNoIGNvbmZpZ3VyYXRpb24gbm90aWZpY2F0aW9ucy4gIE1vcmUgY29tcGxleCBkcml2ZXJzIHdpbGwgaGFuZGxlCisgKiBzb21lIGNvbnRyb2wgcmVxdWVzdHMgaW4gdXNlciBzcGFjZS4KKyAqLworCitzdGF0aWMgaW50IGlzX3ZhbGlkX2NvbmZpZyAoc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvciAqY29uZmlnKQoreworCXJldHVybiBjb25maWctPmJEZXNjcmlwdG9yVHlwZSA9PSBVU0JfRFRfQ09ORklHCisJCSYmIGNvbmZpZy0+Ykxlbmd0aCA9PSBVU0JfRFRfQ09ORklHX1NJWkUKKwkJJiYgY29uZmlnLT5iQ29uZmlndXJhdGlvblZhbHVlICE9IDAKKwkJJiYgKGNvbmZpZy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0NPTkZJR19BVFRfT05FKSAhPSAwCisJCSYmIChjb25maWctPmJtQXR0cmlidXRlcyAmIFVTQl9DT05GSUdfQVRUX1dBS0VVUCkgPT0gMDsKKwkvKiBGSVhNRSBpZiBnYWRnZXQtPmlzX290ZywgX211c3RfIGluY2x1ZGUgYW4gb3RnIGRlc2NyaXB0b3IgKi8KKwkvKiBGSVhNRSBjaGVjayBsZW5ndGhzOiB3YWxrIHRvIGVuZCAqLworfQorCitzdGF0aWMgc3NpemVfdAorZGV2X2NvbmZpZyAoc3RydWN0IGZpbGUgKmZkLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnB0cikKK3sKKwlzdHJ1Y3QgZGV2X2RhdGEJCSpkZXYgPSBmZC0+cHJpdmF0ZV9kYXRhOworCXNzaXplX3QJCQl2YWx1ZSA9IGxlbiwgbGVuZ3RoID0gbGVuOworCXVuc2lnbmVkCQl0b3RhbDsKKwl1MzIJCQl0YWc7CisJY2hhcgkJCSprYnVmOworCisJaWYgKGRldi0+c3RhdGUgIT0gU1RBVEVfT1BFTkVEKQorCQlyZXR1cm4gLUVFWElTVDsKKworCWlmIChsZW4gPCAoVVNCX0RUX0NPTkZJR19TSVpFICsgVVNCX0RUX0RFVklDRV9TSVpFICsgNCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogd2UgbWlnaHQgbmVlZCB0byBjaGFuZ2UgbWVzc2FnZSBmb3JtYXQgc29tZWRheSAqLworCWlmIChjb3B5X2Zyb21fdXNlciAoJnRhZywgYnVmLCA0KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKHRhZyAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlidWYgKz0gNDsKKwlsZW5ndGggLT0gNDsKKworCWtidWYgPSBrbWFsbG9jIChsZW5ndGgsIFNMQUJfS0VSTkVMKTsKKwlpZiAoIWtidWYpCisJCXJldHVybiAtRU5PTUVNOworCWlmIChjb3B5X2Zyb21fdXNlciAoa2J1ZiwgYnVmLCBsZW5ndGgpKSB7CisJCWtmcmVlIChrYnVmKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJc3Bpbl9sb2NrX2lycSAoJmRldi0+bG9jayk7CisJdmFsdWUgPSAtRUlOVkFMOworCWlmIChkZXYtPmJ1ZikKKwkJZ290byBmYWlsOworCWRldi0+YnVmID0ga2J1ZjsKKworCS8qIGZ1bGwgb3IgbG93IHNwZWVkIGNvbmZpZyAqLworCWRldi0+Y29uZmlnID0gKHZvaWQgKikga2J1ZjsKKwl0b3RhbCA9IGxlMTZfdG9fY3B1cCAoJmRldi0+Y29uZmlnLT53VG90YWxMZW5ndGgpOworCWlmICghaXNfdmFsaWRfY29uZmlnIChkZXYtPmNvbmZpZykgfHwgdG90YWwgPj0gbGVuZ3RoKQorCQlnb3RvIGZhaWw7CisJa2J1ZiArPSB0b3RhbDsKKwlsZW5ndGggLT0gdG90YWw7CisKKwkvKiBvcHRpb25hbCBoaWdoIHNwZWVkIGNvbmZpZyAqLworCWlmIChrYnVmIFsxXSA9PSBVU0JfRFRfQ09ORklHKSB7CisJCWRldi0+aHNfY29uZmlnID0gKHZvaWQgKikga2J1ZjsKKwkJdG90YWwgPSBsZTE2X3RvX2NwdXAgKCZkZXYtPmhzX2NvbmZpZy0+d1RvdGFsTGVuZ3RoKTsKKwkJaWYgKCFpc192YWxpZF9jb25maWcgKGRldi0+aHNfY29uZmlnKSB8fCB0b3RhbCA+PSBsZW5ndGgpCisJCQlnb3RvIGZhaWw7CisJCWtidWYgKz0gdG90YWw7CisJCWxlbmd0aCAtPSB0b3RhbDsKKwl9CisKKwkvKiBjb3VsZCBzdXBwb3J0IG11bHRpcGxlIGNvbmZpZ3MsIHVzaW5nIGFub3RoZXIgZW5jb2RpbmchICovCisKKwkvKiBkZXZpY2UgZGVzY3JpcHRvciAodHdlYWtlZCBmb3IgcGFyYW5vaWEpICovCisJaWYgKGxlbmd0aCAhPSBVU0JfRFRfREVWSUNFX1NJWkUpCisJCWdvdG8gZmFpbDsKKwlkZXYtPmRldiA9ICh2b2lkICopa2J1ZjsKKwlpZiAoZGV2LT5kZXYtPmJMZW5ndGggIT0gVVNCX0RUX0RFVklDRV9TSVpFCisJCQl8fCBkZXYtPmRldi0+YkRlc2NyaXB0b3JUeXBlICE9IFVTQl9EVF9ERVZJQ0UKKwkJCXx8IGRldi0+ZGV2LT5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSkKKwkJZ290byBmYWlsOworCWRldi0+ZGV2LT5iTnVtQ29uZmlndXJhdGlvbnMgPSAxOworCWRldi0+ZGV2LT5iY2RVU0IgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDApOworCisJLyogdHJpZ2dlcnMgZ2FkZ2V0ZnNfYmluZCgpOyB0aGVuIHdlIGNhbiBlbnVtZXJhdGUuICovCisJc3Bpbl91bmxvY2tfaXJxICgmZGV2LT5sb2NrKTsKKwl2YWx1ZSA9IHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyICgmZ2FkZ2V0ZnNfZHJpdmVyKTsKKwlpZiAodmFsdWUgIT0gMCkgeworCQlrZnJlZSAoZGV2LT5idWYpOworCQlkZXYtPmJ1ZiA9IE5VTEw7CisJfSBlbHNlIHsKKwkJLyogYXQgdGhpcyBwb2ludCAiZ29vZCIgaGFyZHdhcmUgaGFzIGZvciB0aGUgZmlyc3QgdGltZQorCQkgKiBsZXQgdGhlIFVTQiB0aGUgaG9zdCBzZWUgdXMuICBhbHRlcm5hdGl2ZWx5LCBpZiB1c2VycworCQkgKiB1bnBsdWcvcmVwbHVnIHRoYXQgd2lsbCBjbGVhciBhbGwgdGhlIGVycm9yIHN0YXRlLgorCQkgKgorCQkgKiBub3RlOiAgZXZlcnl0aGluZyBydW5uaW5nIGJlZm9yZSBoZXJlIHdhcyBndWFyYW50ZWVkCisJCSAqIHRvIGNob2tlIGRyaXZlciBtb2RlbCBzdHlsZSBkaWFnbm9zdGljcy4gIGZyb20gaGVyZQorCQkgKiBvbiwgdGhleSBjYW4gd29yayAuLi4gZXhjZXB0IGluIGNsZWFudXAgcGF0aHMgdGhhdAorCQkgKiBraWNrIGluIGFmdGVyIHRoZSBlcDAgZGVzY3JpcHRvciBpcyBjbG9zZWQuCisJCSAqLworCQlmZC0+Zl9vcCA9ICZlcDBfaW9fb3BlcmF0aW9uczsKKwkJdmFsdWUgPSBsZW47CisJfQorCXJldHVybiB2YWx1ZTsKKworZmFpbDoKKwlzcGluX3VubG9ja19pcnEgKCZkZXYtPmxvY2spOworCXByX2RlYnVnICgiJXM6ICVzIGZhaWwgJVpkLCAlcFxuIiwgc2hvcnRuYW1lLCBfX0ZVTkNUSU9OX18sIHZhbHVlLCBkZXYpOworCWtmcmVlIChkZXYtPmJ1Zik7CisJZGV2LT5idWYgPSBOVUxMOworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIGludAorZGV2X29wZW4gKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZCkKK3sKKwlzdHJ1Y3QgZGV2X2RhdGEJCSpkZXYgPSBpbm9kZS0+dS5nZW5lcmljX2lwOworCWludAkJCXZhbHVlID0gLUVCVVNZOworCisJaWYgKGRldi0+c3RhdGUgPT0gU1RBVEVfREVWX0RJU0FCTEVEKSB7CisJCWRldi0+ZXZfbmV4dCA9IDA7CisJCWRldi0+c3RhdGUgPSBTVEFURV9PUEVORUQ7CisJCWZkLT5wcml2YXRlX2RhdGEgPSBkZXY7CisJCWdldF9kZXYgKGRldik7CisJCXZhbHVlID0gMDsKKwl9CisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZXZfaW5pdF9vcGVyYXRpb25zID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5sbHNlZWsgPQlub19sbHNlZWssCisKKwkub3BlbiA9CQlkZXZfb3BlbiwKKwkud3JpdGUgPQlkZXZfY29uZmlnLAorCS5mYXN5bmMgPQllcDBfZmFzeW5jLAorCS5pb2N0bCA9CWRldl9pb2N0bCwKKwkucmVsZWFzZSA9CWRldl9yZWxlYXNlLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRklMRVNZU1RFTSBBTkQgU1VQRVJCTE9DSyBPUEVSQVRJT05TCisgKgorICogTW91bnRpbmcgdGhlIGZpbGVzeXN0ZW0gY3JlYXRlcyBhIGNvbnRyb2xsZXIgZmlsZSwgdXNlZCBmaXJzdCBmb3IKKyAqIGRldmljZSBjb25maWd1cmF0aW9uIHRoZW4gbGF0ZXIgZm9yIGV2ZW50IG1vbml0b3JpbmcuCisgKi8KKworCisvKiBGSVhNRSBQQU0gZXRjIGNvdWxkIHNldCB0aGlzIHNlY3VyaXR5IHBvbGljeSB3aXRob3V0IG1vdW50IG9wdGlvbnMKKyAqIGlmIGVwZmlsZXMgaW5oZXJpdGVkIG93bmVyc2hpcCBhbmQgcGVybWlzc29ucyBmcm9tIGVwMCAuLi4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgZGVmYXVsdF91aWQ7CitzdGF0aWMgdW5zaWduZWQgZGVmYXVsdF9naWQ7CitzdGF0aWMgdW5zaWduZWQgZGVmYXVsdF9wZXJtID0gU19JUlVTUiB8IFNfSVdVU1I7CisKK21vZHVsZV9wYXJhbSAoZGVmYXVsdF91aWQsIHVpbnQsIDA2NDQpOworbW9kdWxlX3BhcmFtIChkZWZhdWx0X2dpZCwgdWludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0gKGRlZmF1bHRfcGVybSwgdWludCwgMDY0NCk7CisKKworc3RhdGljIHN0cnVjdCBpbm9kZSAqCitnYWRnZXRmc19tYWtlX2lub2RlIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQl2b2lkICpkYXRhLCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzLAorCQlpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmV3X2lub2RlIChzYik7CisKKwlpZiAoaW5vZGUpIHsKKwkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CisJCWlub2RlLT5pX3VpZCA9IGRlZmF1bHRfdWlkOworCQlpbm9kZS0+aV9naWQgPSBkZWZhdWx0X2dpZDsKKwkJaW5vZGUtPmlfYmxrc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRTsKKwkJaW5vZGUtPmlfYmxvY2tzID0gMDsKKwkJaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lCisJCQkJPSBDVVJSRU5UX1RJTUU7CisJCWlub2RlLT51LmdlbmVyaWNfaXAgPSBkYXRhOworCQlpbm9kZS0+aV9mb3AgPSBmb3BzOworCX0KKwlyZXR1cm4gaW5vZGU7Cit9CisKKy8qIGNyZWF0ZXMgaW4gZnMgcm9vdCBkaXJlY3RvcnksIHNvIG5vbi1yZW5hbWFibGUgYW5kIG5vbi1saW5rYWJsZS4KKyAqIHNvIGlub2RlIGFuZCBkZW50cnkgYXJlIHBhaXJlZCwgdW50aWwgZGV2aWNlIHJlY29uZmlnLgorICovCitzdGF0aWMgc3RydWN0IGlub2RlICoKK2dhZGdldGZzX2NyZWF0ZV9maWxlIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjaGFyIGNvbnN0ICpuYW1lLAorCQl2b2lkICpkYXRhLCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzLAorCQlzdHJ1Y3QgZGVudHJ5ICoqZGVudHJ5X3ApCit7CisJc3RydWN0IGRlbnRyeQkqZGVudHJ5OworCXN0cnVjdCBpbm9kZQkqaW5vZGU7CisKKwlkZW50cnkgPSBkX2FsbG9jX25hbWUoc2ItPnNfcm9vdCwgbmFtZSk7CisJaWYgKCFkZW50cnkpCisJCXJldHVybiBOVUxMOworCisJaW5vZGUgPSBnYWRnZXRmc19tYWtlX2lub2RlIChzYiwgZGF0YSwgZm9wcywKKwkJCVNfSUZSRUcgfCAoZGVmYXVsdF9wZXJtICYgU19JUldYVUdPKSk7CisJaWYgKCFpbm9kZSkgeworCQlkcHV0KGRlbnRyeSk7CisJCXJldHVybiBOVUxMOworCX0KKwlkX2FkZCAoZGVudHJ5LCBpbm9kZSk7CisJKmRlbnRyeV9wID0gZGVudHJ5OworCXJldHVybiBpbm9kZTsKK30KKworc3RhdGljIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGdhZGdldF9mc19vcGVyYXRpb25zID0geworCS5zdGF0ZnMgPQlzaW1wbGVfc3RhdGZzLAorCS5kcm9wX2lub2RlID0JZ2VuZXJpY19kZWxldGVfaW5vZGUsCit9OworCitzdGF0aWMgaW50CitnYWRnZXRmc19maWxsX3N1cGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpvcHRzLCBpbnQgc2lsZW50KQoreworCXN0cnVjdCBpbm9kZQkqaW5vZGU7CisJc3RydWN0IGRlbnRyeQkqZDsKKwlzdHJ1Y3QgZGV2X2RhdGEJKmRldjsKKworCWlmICh0aGVfZGV2aWNlKQorCQlyZXR1cm4gLUVTUkNIOworCisJLyogZmFrZSBwcm9iZSB0byBkZXRlcm1pbmUgJENISVAgKi8KKwkodm9pZCkgdXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIgKCZwcm9iZV9kcml2ZXIpOworCWlmICghQ0hJUCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBzdXBlcmJsb2NrICovCisJc2ItPnNfYmxvY2tzaXplID0gUEFHRV9DQUNIRV9TSVpFOworCXNiLT5zX2Jsb2Nrc2l6ZV9iaXRzID0gUEFHRV9DQUNIRV9TSElGVDsKKwlzYi0+c19tYWdpYyA9IEdBREdFVEZTX01BR0lDOworCXNiLT5zX29wID0gJmdhZGdldF9mc19vcGVyYXRpb25zOworCXNiLT5zX3RpbWVfZ3JhbiA9IDE7CisKKwkvKiByb290IGlub2RlICovCisJaW5vZGUgPSBnYWRnZXRmc19tYWtlX2lub2RlIChzYiwKKwkJCU5VTEwsICZzaW1wbGVfZGlyX29wZXJhdGlvbnMsCisJCQlTX0lGRElSIHwgU19JUlVHTyB8IFNfSVhVR08pOworCWlmICghaW5vZGUpCisJCXJldHVybiAtRU5PTUVNOworCWlub2RlLT5pX29wID0gJnNpbXBsZV9kaXJfaW5vZGVfb3BlcmF0aW9uczsKKwlpZiAoIShkID0gZF9hbGxvY19yb290IChpbm9kZSkpKSB7CisJCWlwdXQgKGlub2RlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXNiLT5zX3Jvb3QgPSBkOworCisJLyogdGhlIGVwMCBmaWxlIGlzIG5hbWVkIGFmdGVyIHRoZSBjb250cm9sbGVyIHdlIGV4cGVjdDsKKwkgKiB1c2VyIG1vZGUgY29kZSBjYW4gdXNlIGl0IGZvciBzYW5pdHkgY2hlY2tzLCBsaWtlIHdlIGRvLgorCSAqLworCWRldiA9IGRldl9uZXcgKCk7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2LT5zYiA9IHNiOworCWlmICghKGlub2RlID0gZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUgKHNiLCBDSElQLAorCQkJCWRldiwgJmRldl9pbml0X29wZXJhdGlvbnMsCisJCQkJJmRldi0+ZGVudHJ5KSkpIHsKKwkJcHV0X2RldihkZXYpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBvdGhlciBlbmRwb2ludCBmaWxlcyBhcmUgYXZhaWxhYmxlIGFmdGVyIGhhcmR3YXJlIHNldHVwLAorCSAqIGZyb20gYmluZGluZyB0byBhIGNvbnRyb2xsZXIuCisJICovCisJdGhlX2RldmljZSA9IGRldjsKKwlyZXR1cm4gMDsKK30KKworLyogIm1vdW50IC10IGdhZGdldGZzIHBhdGggL2Rldi9nYWRnZXQiIGVuZHMgdXAgaGVyZSAqLworc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqCitnYWRnZXRmc19nZXRfc2IgKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0LCBpbnQgZmxhZ3MsCisJCWNvbnN0IGNoYXIgKnBhdGgsIHZvaWQgKm9wdHMpCit7CisJcmV0dXJuIGdldF9zYl9zaW5nbGUgKHQsIGZsYWdzLCBvcHRzLCBnYWRnZXRmc19maWxsX3N1cGVyKTsKK30KKworc3RhdGljIHZvaWQKK2dhZGdldGZzX2tpbGxfc2IgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJa2lsbF9saXR0ZXJfc3VwZXIgKHNiKTsKKwlpZiAodGhlX2RldmljZSkgeworCQlwdXRfZGV2ICh0aGVfZGV2aWNlKTsKKwkJdGhlX2RldmljZSA9IE5VTEw7CisJfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZ2FkZ2V0ZnNfdHlwZSA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCT0gc2hvcnRuYW1lLAorCS5nZXRfc2IJCT0gZ2FkZ2V0ZnNfZ2V0X3NiLAorCS5raWxsX3NiCT0gZ2FkZ2V0ZnNfa2lsbF9zYiwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19pbml0IGluaXQgKHZvaWQpCit7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0gKCZnYWRnZXRmc190eXBlKTsKKwlpZiAoc3RhdHVzID09IDApCisJCXByX2luZm8gKCIlczogJXMsIHZlcnNpb24gIiBEUklWRVJfVkVSU0lPTiAiXG4iLAorCQkJc2hvcnRuYW1lLCBkcml2ZXJfZGVzYyk7CisJcmV0dXJuIHN0YXR1czsKK30KK21vZHVsZV9pbml0IChpbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXAgKHZvaWQpCit7CisJcHJfZGVidWcgKCJ1bnJlZ2lzdGVyICVzXG4iLCBzaG9ydG5hbWUpOworCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSAoJmdhZGdldGZzX3R5cGUpOworfQorbW9kdWxlX2V4aXQgKGNsZWFudXApOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZWY5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuYwpAQCAtMCwwICsxLDIxNjcgQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuYworICogU2hhcnAgTEg3QTQweCBvbi1jaGlwIGZ1bGwgc3BlZWQgVVNCIGRldmljZSBjb250cm9sbGVycworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWtrbyBMYWh0ZWVubWFraSwgTm9yZGljIElECisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQm8gSGVucmlrc2VuLCBOb3JkaWMgSUQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJsaDdhNDB4X3VkYy5oIgorCisvLyNkZWZpbmUgREVCVUcgcHJpbnRrCisvLyNkZWZpbmUgREVCVUdfRVAwIHByaW50aworLy8jZGVmaW5lIERFQlVHX1NFVFVQIHByaW50aworCisjaWZuZGVmIERFQlVHX0VQMAorIyBkZWZpbmUgREVCVUdfRVAwKGZtdCxhcmdzLi4uKQorI2VuZGlmCisjaWZuZGVmIERFQlVHX1NFVFVQCisjIGRlZmluZSBERUJVR19TRVRVUChmbXQsYXJncy4uLikKKyNlbmRpZgorI2lmbmRlZiBERUJVRworIyBkZWZpbmUgTk9fU1RBVEVTCisjIGRlZmluZSBERUJVRyhmbXQsYXJncy4uLikKKyNlbmRpZgorCisjZGVmaW5lCURSSVZFUl9ERVNDCQkJIkxIN0E0MHggVVNCIERldmljZSBDb250cm9sbGVyIgorI2RlZmluZQlEUklWRVJfVkVSU0lPTgkJX19EQVRFX18KKworI2lmbmRlZiBfQklUCQkJLyogRklYTUUgLSB3aGF0IGhhcHBlbmRlZCB0byBfQklUIGluIDIuNi43YmsxOD8gKi8KKyNkZWZpbmUgX0JJVCh4KSAoMTw8KHgpKQorI2VuZGlmCisKK3N0cnVjdCBsaDdhNDB4X3VkYyAqdGhlX2NvbnRyb2xsZXI7CisKK3N0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9uYW1lW10gPSAibGg3YTQweF91ZGMiOworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX2Rlc2NbXSA9IERSSVZFUl9ERVNDOworc3RhdGljIGNvbnN0IGNoYXIgZXAwbmFtZVtdID0gImVwMC1jb250cm9sIjsKKworLyoKKyAgTG9jYWwgZGVmaW5pbnRpb25zLgorKi8KKworI2lmbmRlZiBOT19TVEFURVMKK3N0YXRpYyBjaGFyICpzdGF0ZV9uYW1lc1tdID0geworCSJXQUlUX0ZPUl9TRVRVUCIsCisJIkRBVEFfU1RBVEVfWE1JVCIsCisJIkRBVEFfU1RBVEVfTkVFRF9aTFAiLAorCSJXQUlUX0ZPUl9PVVRfU1RBVFVTIiwKKwkiREFUQV9TVEFURV9SRUNWIgorfTsKKyNlbmRpZgorCisvKgorICBMb2NhbCBkZWNsYXJhdGlvbnMuCisqLworc3RhdGljIGludCBsaDdhNDB4X2VwX2VuYWJsZShzdHJ1Y3QgdXNiX2VwICplcCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICopOworc3RhdGljIGludCBsaDdhNDB4X2VwX2Rpc2FibGUoc3RydWN0IHVzYl9lcCAqZXApOworc3RhdGljIHN0cnVjdCB1c2JfcmVxdWVzdCAqbGg3YTQweF9hbGxvY19yZXF1ZXN0KHN0cnVjdCB1c2JfZXAgKmVwLCBpbnQpOworc3RhdGljIHZvaWQgbGg3YTQweF9mcmVlX3JlcXVlc3Qoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqKTsKK3N0YXRpYyB2b2lkICpsaDdhNDB4X2FsbG9jX2J1ZmZlcihzdHJ1Y3QgdXNiX2VwICplcCwgdW5zaWduZWQsIGRtYV9hZGRyX3QgKiwKKwkJCQkgIGludCk7CitzdGF0aWMgdm9pZCBsaDdhNDB4X2ZyZWVfYnVmZmVyKHN0cnVjdCB1c2JfZXAgKmVwLCB2b2lkICosIGRtYV9hZGRyX3QsCisJCQkJdW5zaWduZWQpOworc3RhdGljIGludCBsaDdhNDB4X3F1ZXVlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKiwgaW50KTsKK3N0YXRpYyBpbnQgbGg3YTQweF9kZXF1ZXVlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKik7CitzdGF0aWMgaW50IGxoN2E0MHhfc2V0X2hhbHQoc3RydWN0IHVzYl9lcCAqZXAsIGludCk7CitzdGF0aWMgaW50IGxoN2E0MHhfZmlmb19zdGF0dXMoc3RydWN0IHVzYl9lcCAqZXApOworc3RhdGljIGludCBsaDdhNDB4X2ZpZm9fc3RhdHVzKHN0cnVjdCB1c2JfZXAgKmVwKTsKK3N0YXRpYyB2b2lkIGxoN2E0MHhfZmlmb19mbHVzaChzdHJ1Y3QgdXNiX2VwICplcCk7CitzdGF0aWMgdm9pZCBsaDdhNDB4X2VwMF9raWNrKHN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2LCBzdHJ1Y3QgbGg3YTQweF9lcCAqZXApOworc3RhdGljIHZvaWQgbGg3YTQweF9oYW5kbGVfZXAwKHN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2LCB1MzIgaW50cik7CisKK3N0YXRpYyB2b2lkIGRvbmUoc3RydWN0IGxoN2E0MHhfZXAgKmVwLCBzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0ICpyZXEsCisJCSBpbnQgc3RhdHVzKTsKK3N0YXRpYyB2b2lkIHBpb19pcnFfZW5hYmxlKGludCBiRW5kcG9pbnRBZGRyZXNzKTsKK3N0YXRpYyB2b2lkIHBpb19pcnFfZGlzYWJsZShpbnQgYkVuZHBvaW50QWRkcmVzcyk7CitzdGF0aWMgdm9pZCBzdG9wX2FjdGl2aXR5KHN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2LAorCQkJICBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcik7CitzdGF0aWMgdm9pZCBmbHVzaChzdHJ1Y3QgbGg3YTQweF9lcCAqZXApOworc3RhdGljIHZvaWQgdWRjX2VuYWJsZShzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldik7CitzdGF0aWMgdm9pZCB1ZGNfc2V0X2FkZHJlc3Moc3RydWN0IGxoN2E0MHhfdWRjICpkZXYsIHVuc2lnbmVkIGNoYXIgYWRkcmVzcyk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VwX29wcyBsaDdhNDB4X2VwX29wcyA9IHsKKwkuZW5hYmxlID0gbGg3YTQweF9lcF9lbmFibGUsCisJLmRpc2FibGUgPSBsaDdhNDB4X2VwX2Rpc2FibGUsCisKKwkuYWxsb2NfcmVxdWVzdCA9IGxoN2E0MHhfYWxsb2NfcmVxdWVzdCwKKwkuZnJlZV9yZXF1ZXN0ID0gbGg3YTQweF9mcmVlX3JlcXVlc3QsCisKKwkuYWxsb2NfYnVmZmVyID0gbGg3YTQweF9hbGxvY19idWZmZXIsCisJLmZyZWVfYnVmZmVyID0gbGg3YTQweF9mcmVlX2J1ZmZlciwKKworCS5xdWV1ZSA9IGxoN2E0MHhfcXVldWUsCisJLmRlcXVldWUgPSBsaDdhNDB4X2RlcXVldWUsCisKKwkuc2V0X2hhbHQgPSBsaDdhNDB4X3NldF9oYWx0LAorCS5maWZvX3N0YXR1cyA9IGxoN2E0MHhfZmlmb19zdGF0dXMsCisJLmZpZm9fZmx1c2ggPSBsaDdhNDB4X2ZpZm9fZmx1c2gsCit9OworCisvKiBJbmxpbmUgY29kZSAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgd3JpdGVfcGFja2V0KHN0cnVjdCBsaDdhNDB4X2VwICplcCwKKwkJCQkgICBzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0ICpyZXEsIGludCBtYXgpCit7CisJdTggKmJ1ZjsKKwlpbnQgbGVuZ3RoLCBjb3VudDsKKwl2b2xhdGlsZSB1MzIgKmZpZm8gPSAodm9sYXRpbGUgdTMyICopZXAtPmZpZm87CisKKwlidWYgPSByZXEtPnJlcS5idWYgKyByZXEtPnJlcS5hY3R1YWw7CisJcHJlZmV0Y2goYnVmKTsKKworCWxlbmd0aCA9IHJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbDsKKwlsZW5ndGggPSBtaW4obGVuZ3RoLCBtYXgpOworCXJlcS0+cmVxLmFjdHVhbCArPSBsZW5ndGg7CisKKwlERUJVRygiV3JpdGUgJWQgKG1heCAlZCksIGZpZm8gJXBcbiIsIGxlbmd0aCwgbWF4LCBmaWZvKTsKKworCWNvdW50ID0gbGVuZ3RoOworCXdoaWxlIChjb3VudC0tKSB7CisJCSpmaWZvID0gKmJ1ZisrOworCX0KKworCXJldHVybiBsZW5ndGg7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgdXNiX3NldF9pbmRleCh1MzIgZXApCit7CisJKih2b2xhdGlsZSB1MzIgKilpb19wMnYoVVNCX0lOREVYKSA9IGVwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1MzIgdXNiX3JlYWQodTMyIHBvcnQpCit7CisJcmV0dXJuICoodm9sYXRpbGUgdTMyICopaW9fcDJ2KHBvcnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHVzYl93cml0ZSh1MzIgdmFsLCB1MzIgcG9ydCkKK3sKKwkqKHZvbGF0aWxlIHUzMiAqKWlvX3Aydihwb3J0KSA9IHZhbDsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCB1c2Jfc2V0KHUzMiB2YWwsIHUzMiBwb3J0KQoreworCXZvbGF0aWxlIHUzMiAqaW9wb3J0ID0gKHZvbGF0aWxlIHUzMiAqKWlvX3Aydihwb3J0KTsKKwl1MzIgYWZ0ZXIgPSAoKmlvcG9ydCkgfCB2YWw7CisJKmlvcG9ydCA9IGFmdGVyOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHVzYl9jbGVhcih1MzIgdmFsLCB1MzIgcG9ydCkKK3sKKwl2b2xhdGlsZSB1MzIgKmlvcG9ydCA9ICh2b2xhdGlsZSB1MzIgKilpb19wMnYocG9ydCk7CisJdTMyIGFmdGVyID0gKCppb3BvcnQpICYgfnZhbDsKKwkqaW9wb3J0ID0gYWZ0ZXI7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgR1BJT19QT1JUQ19EUiAJKDB4ODAwMDBFMDgpCisjZGVmaW5lIEdQSU9fUE9SVENfRERSIAkoMHg4MDAwMEUxOCkKKyNkZWZpbmUgR1BJT19QT1JUQ19QRFIgCSgweDgwMDAwRTcwKQorCisvKiBnZXQgcG9ydCBDIHBpbiBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIGdldF9wb3J0Y19wZHIoYml0KSAJCSgodXNiX3JlYWQoR1BJT19QT1JUQ19QRFIpICYgX0JJVChiaXQpKSAhPSAwKQorLyogZ2V0IHBvcnQgQyBkYXRhIGRpcmVjdGlvbiByZWdpc3RlciAqLworI2RlZmluZSBnZXRfcG9ydGNfZGRyKGJpdCkgCQkoKHVzYl9yZWFkKEdQSU9fUE9SVENfRERSKSAmIF9CSVQoYml0KSkgIT0gMCkKKy8qIHNldCBwb3J0IEMgZGF0YSByZWdpc3RlciAqLworI2RlZmluZSBzZXRfcG9ydGNfZHIoYml0LCB2YWwpIAkodmFsID8gdXNiX3NldChfQklUKGJpdCksIEdQSU9fUE9SVENfRFIpIDogdXNiX2NsZWFyKF9CSVQoYml0KSwgR1BJT19QT1JUQ19EUikpCisvKiBzZXQgcG9ydCBDIGRhdGEgZGlyZWN0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIHNldF9wb3J0Y19kZHIoYml0LCB2YWwpICh2YWwgPyB1c2Jfc2V0KF9CSVQoYml0KSwgR1BJT19QT1JUQ19ERFIpIDogdXNiX2NsZWFyKF9CSVQoYml0KSwgR1BJT19QT1JUQ19ERFIpKQorCisvKgorICogTFBEN0E0MDQgR1BJTydzOgorICogUG9ydCBDIGJpdCAxID0gVVNCIFBvcnQgMSBQb3dlciBFbmFibGUKKyAqIFBvcnQgQyBiaXQgMiA9IFVTQiBQb3J0IDEgRGF0YSBDYXJyaWVyIERldGVjdAorICovCisjZGVmaW5lIGlzX3VzYl9jb25uZWN0ZWQoKSAJCWdldF9wb3J0Y19wZHIoMikKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTCisKK3N0YXRpYyBjb25zdCBjaGFyIHByb2Nfbm9kZV9uYW1lW10gPSAiZHJpdmVyL3VkYyI7CisKK3N0YXRpYyBpbnQKK3VkY19wcm9jX3JlYWQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwKKwkgICAgICBpbnQgKmVvZiwgdm9pZCAqX2RldikKK3sKKwljaGFyICpidWYgPSBwYWdlOworCXN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2ID0gX2RldjsKKwljaGFyICpuZXh0ID0gYnVmOworCXVuc2lnbmVkIHNpemUgPSBjb3VudDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB0OworCisJaWYgKG9mZiAhPSAwKQorCQlyZXR1cm4gMDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qIGJhc2ljIGRldmljZSBzdGF0dXMgKi8KKwl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCisJCSAgICAgIERSSVZFUl9ERVNDICJcbiIKKwkJICAgICAgIiVzIHZlcnNpb246ICVzXG4iCisJCSAgICAgICJHYWRnZXQgZHJpdmVyOiAlc1xuIgorCQkgICAgICAiSG9zdDogJXNcblxuIiwKKwkJICAgICAgZHJpdmVyX25hbWUsIERSSVZFUl9WRVJTSU9OLAorCQkgICAgICBkZXYtPmRyaXZlciA/IGRldi0+ZHJpdmVyLT5kcml2ZXIubmFtZSA6ICIobm9uZSkiLAorCQkgICAgICBpc191c2JfY29ubmVjdGVkKCk/ICJmdWxsIHNwZWVkIiA6ICJkaXNjb25uZWN0ZWQiKTsKKwlzaXplIC09IHQ7CisJbmV4dCArPSB0OworCisJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAorCQkgICAgICAiR1BJTzpcbiIKKwkJICAgICAgIiBQb3J0IEMgYml0IDE6ICVkLCBkaXIgJWRcbiIKKwkJICAgICAgIiBQb3J0IEMgYml0IDI6ICVkLCBkaXIgJWRcblxuIiwKKwkJICAgICAgZ2V0X3BvcnRjX3BkcigxKSwgZ2V0X3BvcnRjX2RkcigxKSwKKwkJICAgICAgZ2V0X3BvcnRjX3BkcigyKSwgZ2V0X3BvcnRjX2RkcigyKQorCSAgICApOworCXNpemUgLT0gdDsKKwluZXh0ICs9IHQ7CisKKwl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCisJCSAgICAgICJEQ1AgcHVsbHVwOiAlZFxuXG4iLAorCQkgICAgICAodXNiX3JlYWQoVVNCX1BNKSAmIFBNX1VTQl9EQ1ApICE9IDApOworCXNpemUgLT0gdDsKKwluZXh0ICs9IHQ7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJKmVvZiA9IDE7CisJcmV0dXJuIGNvdW50IC0gc2l6ZTsKK30KKworI2RlZmluZSBjcmVhdGVfcHJvY19maWxlcygpIAljcmVhdGVfcHJvY19yZWFkX2VudHJ5KHByb2Nfbm9kZV9uYW1lLCAwLCBOVUxMLCB1ZGNfcHJvY19yZWFkLCBkZXYpCisjZGVmaW5lIHJlbW92ZV9wcm9jX2ZpbGVzKCkgCXJlbW92ZV9wcm9jX2VudHJ5KHByb2Nfbm9kZV9uYW1lLCBOVUxMKQorCisjZWxzZQkvKiAhQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgKi8KKworI2RlZmluZSBjcmVhdGVfcHJvY19maWxlcygpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSByZW1vdmVfcHJvY19maWxlcygpIGRvIHt9IHdoaWxlICgwKQorCisjZW5kaWYJLyogQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgKi8KKworLyoKKyAqIAl1ZGNfZGlzYWJsZSAtIGRpc2FibGUgVVNCIGRldmljZSBjb250cm9sbGVyCisgKi8KK3N0YXRpYyB2b2lkIHVkY19kaXNhYmxlKHN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2KQoreworCURFQlVHKCIlcywgJXBcbiIsIF9fRlVOQ1RJT05fXywgZGV2KTsKKworCXVkY19zZXRfYWRkcmVzcyhkZXYsIDApOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJdXNiX3dyaXRlKDAsIFVTQl9JTl9JTlRfRU4pOworCXVzYl93cml0ZSgwLCBVU0JfT1VUX0lOVF9FTik7CisJdXNiX3dyaXRlKDAsIFVTQl9JTlRfRU4pOworCisJLyogRGlzYWJsZSB0aGUgVVNCICovCisJdXNiX3dyaXRlKDAsIFVTQl9QTSk7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9MSDdBNDA0CisJLyogRGlzYWJsZSBVU0IgcG93ZXIgKi8KKwlzZXRfcG9ydGNfZHIoMSwgMCk7CisjZW5kaWYKKworCS8qIGlmIGhhcmR3YXJlIHN1cHBvcnRzIGl0LCBkaXNjb25uZWN0IGZyb20gdXNiICovCisJLyogbWFrZV91c2JfZGlzYXBwZWFyKCk7ICovCisKKwlkZXYtPmVwMHN0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJZGV2LT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKwlkZXYtPnVzYl9hZGRyZXNzID0gMDsKK30KKworLyoKKyAqIAl1ZGNfcmVpbml0IC0gaW5pdGlhbGl6ZSBzb2Z0d2FyZSBzdGF0ZQorICovCitzdGF0aWMgdm9pZCB1ZGNfcmVpbml0KHN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2KQoreworCXUzMiBpOworCisJREVCVUcoIiVzLCAlcFxuIiwgX19GVU5DVElPTl9fLCBkZXYpOworCisJLyogZGV2aWNlL2VwMCByZWNvcmRzIGluaXQgKi8KKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5nYWRnZXQuZXBfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+Z2FkZ2V0LmVwMC0+ZXBfbGlzdCk7CisJZGV2LT5lcDBzdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCisJLyogYmFzaWMgZW5kcG9pbnQgcmVjb3JkcyBpbml0ICovCisJZm9yIChpID0gMDsgaSA8IFVEQ19NQVhfRU5EUE9JTlRTOyBpKyspIHsKKwkJc3RydWN0IGxoN2E0MHhfZXAgKmVwID0gJmRldi0+ZXBbaV07CisKKwkJaWYgKGkgIT0gMCkKKwkJCWxpc3RfYWRkX3RhaWwoJmVwLT5lcC5lcF9saXN0LCAmZGV2LT5nYWRnZXQuZXBfbGlzdCk7CisKKwkJZXAtPmRlc2MgPSAwOworCQllcC0+c3RvcHBlZCA9IDA7CisJCUlOSVRfTElTVF9IRUFEKCZlcC0+cXVldWUpOworCQllcC0+cGlvX2lycXMgPSAwOworCX0KKworCS8qIHRoZSByZXN0IHdhcyBzdGF0aWNhbGx5IGluaXRpYWxpemVkLCBhbmQgaXMgcmVhZC1vbmx5ICovCit9CisKKyNkZWZpbmUgQllURVMyTUFYUCh4KQkoeCAvIDgpCisjZGVmaW5lIE1BWFAyQllURVMoeCkJKHggKiA4KQorCisvKiB1bnRpbCBpdCdzIGVuYWJsZWQsIHRoaXMgVURDIHNob3VsZCBiZSBjb21wbGV0ZWx5IGludmlzaWJsZQorICogdG8gYW55IFVTQiBob3N0LgorICovCitzdGF0aWMgdm9pZCB1ZGNfZW5hYmxlKHN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2KQoreworCWludCBlcDsKKworCURFQlVHKCIlcywgJXBcbiIsIF9fRlVOQ1RJT05fXywgZGV2KTsKKworCWRldi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047CisKKyNpZmRlZiBDT05GSUdfQVJDSF9MSDdBNDA0CisJLyogU2V0IFBvcnQgQyBiaXQgMSAmIDIgYXMgb3V0cHV0ICovCisJc2V0X3BvcnRjX2RkcigxLCAxKTsKKwlzZXRfcG9ydGNfZGRyKDIsIDEpOworCisJLyogRW5hYmxlIFVTQiBwb3dlciAqLworCXNldF9wb3J0Y19kcigxLCAwKTsKKyNlbmRpZgorCisJLyoKKwkgKiBDLmYgQ2hhcHRlciAxOC4xLjMuMSBJbml0aWFsaXppbmcgdGhlIFVTQgorCSAqLworCisJLyogRGlzYWJsZSB0aGUgVVNCICovCisJdXNiX2NsZWFyKFBNX1VTQl9FTkFCTEUsIFVTQl9QTSk7CisKKwkvKiBSZXNldCBBUEIgJiBJL08gc2lkZXMgb2YgdGhlIFVTQiAqLworCXVzYl9zZXQoVVNCX1JFU0VUX0FQQiB8IFVTQl9SRVNFVF9JTywgVVNCX1JFU0VUKTsKKwltZGVsYXkoNSk7CisJdXNiX2NsZWFyKFVTQl9SRVNFVF9BUEIgfCBVU0JfUkVTRVRfSU8sIFVTQl9SRVNFVCk7CisKKwkvKiBTZXQgTUFYUCB2YWx1ZXMgZm9yIGVhY2ggKi8KKwlmb3IgKGVwID0gMDsgZXAgPCBVRENfTUFYX0VORFBPSU5UUzsgZXArKykgeworCQlzdHJ1Y3QgbGg3YTQweF9lcCAqZXBfcmVnID0gJmRldi0+ZXBbZXBdOworCQl1MzIgY3NyOworCisJCXVzYl9zZXRfaW5kZXgoZXApOworCisJCXN3aXRjaCAoZXBfcmVnLT5lcF90eXBlKSB7CisJCWNhc2UgZXBfYnVsa19pbjoKKwkJY2FzZSBlcF9pbnRlcnJ1cHQ6CisJCQl1c2JfY2xlYXIoVVNCX0lOX0NTUjJfVVNCX0RNQV9FTiB8IFVTQl9JTl9DU1IyX0FVVE9fU0VULAorCQkJCSAgZXBfcmVnLT5jc3IyKTsKKwkJCS8qIEZhbGwgdGhyb3VnaCAqLworCQljYXNlIGVwX2NvbnRyb2w6CisJCQl1c2Jfd3JpdGUoQllURVMyTUFYUChlcF9tYXhwYWNrZXQoZXBfcmVnKSksCisJCQkJICBVU0JfSU5fTUFYUCk7CisJCQlicmVhazsKKwkJY2FzZSBlcF9idWxrX291dDoKKwkJCXVzYl9jbGVhcihVU0JfT1VUX0NTUjJfVVNCX0RNQV9FTiB8CisJCQkJICBVU0JfT1VUX0NTUjJfQVVUT19DTFIsIGVwX3JlZy0+Y3NyMik7CisJCQl1c2Jfd3JpdGUoQllURVMyTUFYUChlcF9tYXhwYWNrZXQoZXBfcmVnKSksCisJCQkJICBVU0JfT1VUX01BWFApOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBSZWFkICYgV3JpdGUgQ1NSMSwganVzdCBpbiBjYXNlICovCisJCWNzciA9IHVzYl9yZWFkKGVwX3JlZy0+Y3NyMSk7CisJCXVzYl93cml0ZShjc3IsIGVwX3JlZy0+Y3NyMSk7CisKKwkJZmx1c2goZXBfcmVnKTsKKwl9CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwl1c2Jfd3JpdGUoMCwgVVNCX0lOX0lOVF9FTik7CisJdXNiX3dyaXRlKDAsIFVTQl9PVVRfSU5UX0VOKTsKKwl1c2Jfd3JpdGUoMCwgVVNCX0lOVF9FTik7CisKKwkvKiBFbmFibGUgaW50ZXJydXB0cyAqLworCXVzYl9zZXQoVVNCX0lOX0lOVF9FUDAsIFVTQl9JTl9JTlRfRU4pOworCXVzYl9zZXQoVVNCX0lOVF9SRVNFVF9JTlQgfCBVU0JfSU5UX1JFU1VNRV9JTlQsIFVTQl9JTlRfRU4pOworCS8qIERvbnQgZW5hYmxlIHJlc3Qgb2YgdGhlIGludGVycnVwdHMgKi8KKwkvKiB1c2Jfc2V0KFVTQl9JTl9JTlRfRVAzIHwgVVNCX0lOX0lOVF9FUDEgfCBVU0JfSU5fSU5UX0VQMCwgVVNCX0lOX0lOVF9FTik7CisJICAgdXNiX3NldChVU0JfT1VUX0lOVF9FUDIsIFVTQl9PVVRfSU5UX0VOKTsgKi8KKworCS8qIEVuYWJsZSBTVVNQRU5EICovCisJdXNiX3NldChQTV9FTkFCTEVfU1VTUEVORCwgVVNCX1BNKTsKKworCS8qIEVuYWJsZSB0aGUgVVNCICovCisJdXNiX3NldChQTV9VU0JfRU5BQkxFLCBVU0JfUE0pOworCisjaWZkZWYgQ09ORklHX0FSQ0hfTEg3QTQwNAorCS8qIE5PVEU6IERPRVMgTk9UIFdPUkshICovCisJLyogTGV0IGhvc3QgZGV0ZWN0IFVEQzoKKwkgKiBTb2Z0d2FyZSBtdXN0IHdyaXRlIGEgMCB0byB0aGUgUE1SOkRDUF9DVFJMIGJpdCB0byB0dXJuIHRoaXMKKwkgKiB0cmFuc2lzdG9yIG9uIGFuZCBwdWxsIHRoZSBVU0JEUCBwaW4gSElHSC4KKwkgKi8KKwkvKiB1c2JfY2xlYXIoUE1fVVNCX0RDUCwgVVNCX1BNKTsKKwkgICB1c2Jfc2V0KFBNX1VTQl9EQ1AsIFVTQl9QTSk7ICovCisjZW5kaWYKK30KKworLyoKKyAgUmVnaXN0ZXIgZW50cnkgcG9pbnQgZm9yIHRoZSBwZXJpcGhlcmFsIGNvbnRyb2xsZXIgZHJpdmVyLgorKi8KK2ludCB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwlzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiA9IHRoZV9jb250cm9sbGVyOworCWludCByZXR2YWw7CisKKwlERUJVRygiJXM6ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworCisJaWYgKCFkcml2ZXIKKwkgICAgfHwgZHJpdmVyLT5zcGVlZCAhPSBVU0JfU1BFRURfRlVMTAorCSAgICB8fCAhZHJpdmVyLT5iaW5kCisJICAgIHx8ICFkcml2ZXItPnVuYmluZCB8fCAhZHJpdmVyLT5kaXNjb25uZWN0IHx8ICFkcml2ZXItPnNldHVwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKGRldi0+ZHJpdmVyKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogZmlyc3QgaG9vayB1cCB0aGUgZHJpdmVyIC4uLiAqLworCWRldi0+ZHJpdmVyID0gZHJpdmVyOworCWRldi0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAmZHJpdmVyLT5kcml2ZXI7CisKKwlkZXZpY2VfYWRkKCZkZXYtPmdhZGdldC5kZXYpOworCXJldHZhbCA9IGRyaXZlci0+YmluZCgmZGV2LT5nYWRnZXQpOworCWlmIChyZXR2YWwpIHsKKwkJcHJpbnRrKCIlczogYmluZCB0byBkcml2ZXIgJXMgLS0+IGVycm9yICVkXG4iLCBkZXYtPmdhZGdldC5uYW1lLAorCQkgICAgICAgZHJpdmVyLT5kcml2ZXIubmFtZSwgcmV0dmFsKTsKKwkJZGV2aWNlX2RlbCgmZGV2LT5nYWRnZXQuZGV2KTsKKworCQlkZXYtPmRyaXZlciA9IDA7CisJCWRldi0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAwOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCS8qIC4uLiB0aGVuIGVuYWJsZSBob3N0IGRldGVjdGlvbiBhbmQgZXAwOyBhbmQgd2UncmUgcmVhZHkKKwkgKiBmb3Igc2V0X2NvbmZpZ3VyYXRpb24gYXMgd2VsbCBhcyBldmVudHVhbCBkaXNjb25uZWN0LgorCSAqIE5PVEU6ICB0aGlzIHNob3VsZG4ndCBwb3dlciB1cCB1bnRpbCBsYXRlci4KKwkgKi8KKwlwcmludGsoIiVzOiByZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwgZGV2LT5nYWRnZXQubmFtZSwKKwkgICAgICAgZHJpdmVyLT5kcml2ZXIubmFtZSk7CisKKwl1ZGNfZW5hYmxlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcik7CisKKy8qCisgIFVucmVnaXN0ZXIgZW50cnkgcG9pbnQgZm9yIHRoZSBwZXJpcGhlcmFsIGNvbnRyb2xsZXIgZHJpdmVyLgorKi8KK2ludCB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQoreworCXN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2ID0gdGhlX2NvbnRyb2xsZXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIWRyaXZlciB8fCBkcml2ZXIgIT0gZGV2LT5kcml2ZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOworCWRldi0+ZHJpdmVyID0gMDsKKwlzdG9wX2FjdGl2aXR5KGRldiwgZHJpdmVyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCWRyaXZlci0+dW5iaW5kKCZkZXYtPmdhZGdldCk7CisJZGV2aWNlX2RlbCgmZGV2LT5nYWRnZXQuZGV2KTsKKworCXVkY19kaXNhYmxlKGRldik7CisKKwlERUJVRygidW5yZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0wodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKiBXcml0ZSByZXF1ZXN0IHRvIEZJRk8gKG1heCB3cml0ZSA9PSBtYXhwIHNpemUpCisgKiAgUmV0dXJuOiAgMCA9IHN0aWxsIHJ1bm5pbmcsIDEgPSBjb21wbGV0ZWQsIG5lZ2F0aXZlID0gZXJybm8KKyAqICBOT1RFOiBJTkRFWCByZWdpc3RlciBtdXN0IGJlIHNldCBmb3IgRVAKKyAqLworc3RhdGljIGludCB3cml0ZV9maWZvKHN0cnVjdCBsaDdhNDB4X2VwICplcCwgc3RydWN0IGxoN2E0MHhfcmVxdWVzdCAqcmVxKQoreworCXUzMiBtYXg7CisJdTMyIGNzcjsKKworCW1heCA9IGxlMTZfdG9fY3B1KGVwLT5kZXNjLT53TWF4UGFja2V0U2l6ZSk7CisKKwljc3IgPSB1c2JfcmVhZChlcC0+Y3NyMSk7CisJREVCVUcoIkNTUjogJXggJWRcbiIsIGNzciwgY3NyICYgVVNCX0lOX0NTUjFfRklGT19OT1RfRU1QVFkpOworCisJaWYgKCEoY3NyICYgVVNCX0lOX0NTUjFfRklGT19OT1RfRU1QVFkpKSB7CisJCXVuc2lnbmVkIGNvdW50OworCQlpbnQgaXNfbGFzdCwgaXNfc2hvcnQ7CisKKwkJY291bnQgPSB3cml0ZV9wYWNrZXQoZXAsIHJlcSwgbWF4KTsKKwkJdXNiX3NldChVU0JfSU5fQ1NSMV9JTl9QS1RfUkRZLCBlcC0+Y3NyMSk7CisKKwkJLyogbGFzdCBwYWNrZXQgaXMgdXN1YWxseSBzaG9ydCAob3IgYSB6bHApICovCisJCWlmICh1bmxpa2VseShjb3VudCAhPSBtYXgpKQorCQkJaXNfbGFzdCA9IGlzX3Nob3J0ID0gMTsKKwkJZWxzZSB7CisJCQlpZiAobGlrZWx5KHJlcS0+cmVxLmxlbmd0aCAhPSByZXEtPnJlcS5hY3R1YWwpCisJCQkgICAgfHwgcmVxLT5yZXEuemVybykKKwkJCQlpc19sYXN0ID0gMDsKKwkJCWVsc2UKKwkJCQlpc19sYXN0ID0gMTsKKwkJCS8qIGludGVycnVwdC9pc28gbWF4cGFja2V0IG1heSBub3QgZmlsbCB0aGUgZmlmbyAqLworCQkJaXNfc2hvcnQgPSB1bmxpa2VseShtYXggPCBlcF9tYXhwYWNrZXQoZXApKTsKKwkJfQorCisJCURFQlVHKCIlczogd3JvdGUgJXMgJWQgYnl0ZXMlcyVzICVkIGxlZnQgJXBcbiIsIF9fRlVOQ1RJT05fXywKKwkJICAgICAgZXAtPmVwLm5hbWUsIGNvdW50LAorCQkgICAgICBpc19sYXN0ID8gIi9MIiA6ICIiLCBpc19zaG9ydCA/ICIvUyIgOiAiIiwKKwkJICAgICAgcmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsLCByZXEpOworCisJCS8qIHJlcXVlc3RzIGNvbXBsZXRlIHdoZW4gYWxsIElOIGRhdGEgaXMgaW4gdGhlIEZJRk8gKi8KKwkJaWYgKGlzX2xhc3QpIHsKKwkJCWRvbmUoZXAsIHJlcSwgMCk7CisJCQlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQkJCXBpb19pcnFfZGlzYWJsZShlcF9pbmRleChlcCkpOworCQkJfQorCQkJcmV0dXJuIDE7CisJCX0KKwl9IGVsc2UgeworCQlERUJVRygiSG1tLi4gJWQgZXAgRklGTyBpcyBub3QgZW1wdHkhXG4iLCBlcF9pbmRleChlcCkpOworCX0KKworCXJldHVybiAwOworfQorCisvKiogUmVhZCB0byByZXF1ZXN0IGZyb20gRklGTyAobWF4IHJlYWQgPT0gYnl0ZXMgaW4gZmlmbykKKyAqICBSZXR1cm46ICAwID0gc3RpbGwgcnVubmluZywgMSA9IGNvbXBsZXRlZCwgbmVnYXRpdmUgPSBlcnJubworICogIE5PVEU6IElOREVYIHJlZ2lzdGVyIG11c3QgYmUgc2V0IGZvciBFUAorICovCitzdGF0aWMgaW50IHJlYWRfZmlmbyhzdHJ1Y3QgbGg3YTQweF9lcCAqZXAsIHN0cnVjdCBsaDdhNDB4X3JlcXVlc3QgKnJlcSkKK3sKKwl1MzIgY3NyOworCXU4ICpidWY7CisJdW5zaWduZWQgYnVmZmVyc3BhY2UsIGNvdW50LCBpc19zaG9ydDsKKwl2b2xhdGlsZSB1MzIgKmZpZm8gPSAodm9sYXRpbGUgdTMyICopZXAtPmZpZm87CisKKwkvKiBtYWtlIHN1cmUgdGhlcmUncyBhIHBhY2tldCBpbiB0aGUgRklGTy4gKi8KKwljc3IgPSB1c2JfcmVhZChlcC0+Y3NyMSk7CisJaWYgKCEoY3NyICYgVVNCX09VVF9DU1IxX09VVF9QS1RfUkRZKSkgeworCQlERUJVRygiJXM6IFBhY2tldCBOT1QgcmVhZHkhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlidWYgPSByZXEtPnJlcS5idWYgKyByZXEtPnJlcS5hY3R1YWw7CisJcHJlZmV0Y2h3KGJ1Zik7CisJYnVmZmVyc3BhY2UgPSByZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWw7CisKKwkvKiByZWFkIGFsbCBieXRlcyBmcm9tIHRoaXMgcGFja2V0ICovCisJY291bnQgPSB1c2JfcmVhZChVU0JfT1VUX0ZJRk9fV0MxKTsKKwlyZXEtPnJlcS5hY3R1YWwgKz0gbWluKGNvdW50LCBidWZmZXJzcGFjZSk7CisKKwlpc19zaG9ydCA9IChjb3VudCA8IGVwLT5lcC5tYXhwYWNrZXQpOworCURFQlVHKCJyZWFkICVzICUwMngsICVkIGJ5dGVzJXMgcmVxICVwICVkLyVkXG4iLAorCSAgICAgIGVwLT5lcC5uYW1lLCBjc3IsIGNvdW50LAorCSAgICAgIGlzX3Nob3J0ID8gIi9TIiA6ICIiLCByZXEsIHJlcS0+cmVxLmFjdHVhbCwgcmVxLT5yZXEubGVuZ3RoKTsKKworCXdoaWxlIChsaWtlbHkoY291bnQtLSAhPSAwKSkgeworCQl1OCBieXRlID0gKHU4KSAoKmZpZm8gJiAweGZmKTsKKworCQlpZiAodW5saWtlbHkoYnVmZmVyc3BhY2UgPT0gMCkpIHsKKwkJCS8qIHRoaXMgaGFwcGVucyB3aGVuIHRoZSBkcml2ZXIncyBidWZmZXIKKwkJCSAqIGlzIHNtYWxsZXIgdGhhbiB3aGF0IHRoZSBob3N0IHNlbnQuCisJCQkgKiBkaXNjYXJkIHRoZSBleHRyYSBkYXRhLgorCQkJICovCisJCQlpZiAocmVxLT5yZXEuc3RhdHVzICE9IC1FT1ZFUkZMT1cpCisJCQkJcHJpbnRrKCIlcyBvdmVyZmxvdyAlZFxuIiwgZXAtPmVwLm5hbWUsIGNvdW50KTsKKwkJCXJlcS0+cmVxLnN0YXR1cyA9IC1FT1ZFUkZMT1c7CisJCX0gZWxzZSB7CisJCQkqYnVmKysgPSBieXRlOworCQkJYnVmZmVyc3BhY2UtLTsKKwkJfQorCX0KKworCXVzYl9jbGVhcihVU0JfT1VUX0NTUjFfT1VUX1BLVF9SRFksIGVwLT5jc3IxKTsKKworCS8qIGNvbXBsZXRpb24gKi8KKwlpZiAoaXNfc2hvcnQgfHwgcmVxLT5yZXEuYWN0dWFsID09IHJlcS0+cmVxLmxlbmd0aCkgeworCQlkb25lKGVwLCByZXEsIDApOworCQl1c2Jfc2V0KFVTQl9PVVRfQ1NSMV9GSUZPX0ZMVVNILCBlcC0+Y3NyMSk7CisKKwkJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCisJCQlwaW9faXJxX2Rpc2FibGUoZXBfaW5kZXgoZXApKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogZmluaXNoZWQgdGhhdCBwYWNrZXQuICB0aGUgbmV4dCBvbmUgbWF5IGJlIHdhaXRpbmcuLi4gKi8KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqCWRvbmUgLSByZXRpcmUgYSByZXF1ZXN0OyBjYWxsZXIgYmxvY2tlZCBpcnFzCisgKiAgSU5ERVggcmVnaXN0ZXIgaXMgcHJlc2VydmVkIHRvIGtlZXAgc2FtZQorICovCitzdGF0aWMgdm9pZCBkb25lKHN0cnVjdCBsaDdhNDB4X2VwICplcCwgc3RydWN0IGxoN2E0MHhfcmVxdWVzdCAqcmVxLCBpbnQgc3RhdHVzKQoreworCXVuc2lnbmVkIGludCBzdG9wcGVkID0gZXAtPnN0b3BwZWQ7CisJdTMyIGluZGV4OworCisJREVCVUcoIiVzLCAlcFxuIiwgX19GVU5DVElPTl9fLCBlcCk7CisJbGlzdF9kZWxfaW5pdCgmcmVxLT5xdWV1ZSk7CisKKwlpZiAobGlrZWx5KHJlcS0+cmVxLnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpKQorCQlyZXEtPnJlcS5zdGF0dXMgPSBzdGF0dXM7CisJZWxzZQorCQlzdGF0dXMgPSByZXEtPnJlcS5zdGF0dXM7CisKKwlpZiAoc3RhdHVzICYmIHN0YXR1cyAhPSAtRVNIVVRET1dOKQorCQlERUJVRygiY29tcGxldGUgJXMgcmVxICVwIHN0YXQgJWQgbGVuICV1LyV1XG4iLAorCQkgICAgICBlcC0+ZXAubmFtZSwgJnJlcS0+cmVxLCBzdGF0dXMsCisJCSAgICAgIHJlcS0+cmVxLmFjdHVhbCwgcmVxLT5yZXEubGVuZ3RoKTsKKworCS8qIGRvbid0IG1vZGlmeSBxdWV1ZSBoZWFkcyBkdXJpbmcgY29tcGxldGlvbiBjYWxsYmFjayAqLworCWVwLT5zdG9wcGVkID0gMTsKKwkvKiBSZWFkIGN1cnJlbnQgaW5kZXggKGNvbXBsZXRpb24gbWF5IG1vZGlmeSBpdCkgKi8KKwlpbmRleCA9IHVzYl9yZWFkKFVTQl9JTkRFWCk7CisKKwlzcGluX3VubG9jaygmZXAtPmRldi0+bG9jayk7CisJcmVxLT5yZXEuY29tcGxldGUoJmVwLT5lcCwgJnJlcS0+cmVxKTsKKwlzcGluX2xvY2soJmVwLT5kZXYtPmxvY2spOworCisJLyogUmVzdG9yZSBpbmRleCAqLworCXVzYl9zZXRfaW5kZXgoaW5kZXgpOworCWVwLT5zdG9wcGVkID0gc3RvcHBlZDsKK30KKworLyoqIEVuYWJsZSBFUCBpbnRlcnJ1cHQgKi8KK3N0YXRpYyB2b2lkIHBpb19pcnFfZW5hYmxlKGludCBlcCkKK3sKKwlERUJVRygiJXM6ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGVwKTsKKworCXN3aXRjaCAoZXApIHsKKwljYXNlIDE6CisJCXVzYl9zZXQoVVNCX0lOX0lOVF9FUDEsIFVTQl9JTl9JTlRfRU4pOworCQlicmVhazsKKwljYXNlIDI6CisJCXVzYl9zZXQoVVNCX09VVF9JTlRfRVAyLCBVU0JfT1VUX0lOVF9FTik7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJdXNiX3NldChVU0JfSU5fSU5UX0VQMywgVVNCX0lOX0lOVF9FTik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURFQlVHKCJVbmtub3duIGVuZHBvaW50OiAlZFxuIiwgZXApOworCQlicmVhazsKKwl9Cit9CisKKy8qKiBEaXNhYmxlIEVQIGludGVycnVwdCAqLworc3RhdGljIHZvaWQgcGlvX2lycV9kaXNhYmxlKGludCBlcCkKK3sKKwlERUJVRygiJXM6ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGVwKTsKKworCXN3aXRjaCAoZXApIHsKKwljYXNlIDE6CisJCXVzYl9jbGVhcihVU0JfSU5fSU5UX0VQMSwgVVNCX0lOX0lOVF9FTik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdXNiX2NsZWFyKFVTQl9PVVRfSU5UX0VQMiwgVVNCX09VVF9JTlRfRU4pOworCQlicmVhazsKKwljYXNlIDM6CisJCXVzYl9jbGVhcihVU0JfSU5fSU5UX0VQMywgVVNCX0lOX0lOVF9FTik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURFQlVHKCJVbmtub3duIGVuZHBvaW50OiAlZFxuIiwgZXApOworCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiAJbnVrZSAtIGRlcXVldWUgQUxMIHJlcXVlc3RzCisgKi8KK3ZvaWQgbnVrZShzdHJ1Y3QgbGg3YTQweF9lcCAqZXAsIGludCBzdGF0dXMpCit7CisJc3RydWN0IGxoN2E0MHhfcmVxdWVzdCAqcmVxOworCisJREVCVUcoIiVzLCAlcFxuIiwgX19GVU5DVElPTl9fLCBlcCk7CisKKwkvKiBGbHVzaCBGSUZPICovCisJZmx1c2goZXApOworCisJLyogY2FsbGVkIHdpdGggaXJxcyBibG9ja2VkICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBsaDdhNDB4X3JlcXVlc3QsIHF1ZXVlKTsKKwkJZG9uZShlcCwgcmVxLCBzdGF0dXMpOworCX0KKworCS8qIERpc2FibGUgSVJRIGlmIEVQIGlzIGVuYWJsZWQgKGhhcyBkZWNyaXB0b3IpICovCisJaWYgKGVwLT5kZXNjKQorCQlwaW9faXJxX2Rpc2FibGUoZXBfaW5kZXgoZXApKTsKK30KKworLyoKK3ZvaWQgbnVrZV9hbGwoc3RydWN0IGxoN2E0MHhfdWRjICpkZXYpCit7CisJaW50IG47CisJZm9yKG49MDsgbjxVRENfTUFYX0VORFBPSU5UUzsgbisrKSB7CisJCXN0cnVjdCBsaDdhNDB4X2VwICplcCA9ICZkZXYtPmVwW25dOworCQl1c2Jfc2V0X2luZGV4KG4pOworCQludWtlKGVwLCAwKTsKKwl9Cit9Ki8KKworLyoKK3N0YXRpYyB2b2lkIGZsdXNoX2FsbChzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldikKK3sKKwlpbnQgbjsKKyAgICBmb3IgKG4gPSAwOyBuIDwgVURDX01BWF9FTkRQT0lOVFM7IG4rKykKKyAgICB7CisJCXN0cnVjdCBsaDdhNDB4X2VwICplcCA9ICZkZXYtPmVwW25dOworCQlmbHVzaChlcCk7CisgICAgfQorfQorKi8KKworLyoqIEZsdXNoIEVQCisgKiBOT1RFOiBJTkRFWCByZWdpc3RlciBtdXN0IGJlIHNldCBiZWZvcmUgdGhpcyBjYWxsCisgKi8KK3N0YXRpYyB2b2lkIGZsdXNoKHN0cnVjdCBsaDdhNDB4X2VwICplcCkKK3sKKwlERUJVRygiJXMsICVwXG4iLCBfX0ZVTkNUSU9OX18sIGVwKTsKKworCXN3aXRjaCAoZXAtPmVwX3R5cGUpIHsKKwljYXNlIGVwX2NvbnRyb2w6CisJCS8qIGNoZWNrLCBieSBpbXBsaWNhdGlvbiBjLmYuIDE1LjEuMi4xMSAqLworCQlicmVhazsKKworCWNhc2UgZXBfYnVsa19pbjoKKwljYXNlIGVwX2ludGVycnVwdDoKKwkJLyogaWYoY3NyICYgVVNCX0lOX0NTUjFfSU5fUEtUX1JEWSkgKi8KKwkJdXNiX3NldChVU0JfSU5fQ1NSMV9GSUZPX0ZMVVNILCBlcC0+Y3NyMSk7CisJCWJyZWFrOworCisJY2FzZSBlcF9idWxrX291dDoKKwkJLyogaWYoY3NyICYgVVNCX09VVF9DU1IxX09VVF9QS1RfUkRZKSAqLworCQl1c2Jfc2V0KFVTQl9PVVRfQ1NSMV9GSUZPX0ZMVVNILCBlcC0+Y3NyMSk7CisJCWJyZWFrOworCX0KK30KKworLyoqCisgKiBsaDdhNDB4X2luX2VwbiAtIGhhbmRsZSBJTiBpbnRlcnJ1cHQKKyAqLworc3RhdGljIHZvaWQgbGg3YTQweF9pbl9lcG4oc3RydWN0IGxoN2E0MHhfdWRjICpkZXYsIHUzMiBlcF9pZHgsIHUzMiBpbnRyKQoreworCXUzMiBjc3I7CisJc3RydWN0IGxoN2E0MHhfZXAgKmVwID0gJmRldi0+ZXBbZXBfaWR4XTsKKwlzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0ICpyZXE7CisKKwl1c2Jfc2V0X2luZGV4KGVwX2lkeCk7CisKKwljc3IgPSB1c2JfcmVhZChlcC0+Y3NyMSk7CisJREVCVUcoIiVzOiAlZCwgY3NyICV4XG4iLCBfX0ZVTkNUSU9OX18sIGVwX2lkeCwgY3NyKTsKKworCWlmIChjc3IgJiBVU0JfSU5fQ1NSMV9TRU5UX1NUQUxMKSB7CisJCURFQlVHKCJVU0JfSU5fQ1NSMV9TRU5UX1NUQUxMXG4iKTsKKwkJdXNiX3NldChVU0JfSU5fQ1NSMV9TRU5UX1NUQUxMIC8qfFVTQl9JTl9DU1IxX1NFTkRfU1RBTEwgKi8gLAorCQkJZXAtPmNzcjEpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFlcC0+ZGVzYykgeworCQlERUJVRygiJXM6IE5PIEVQIERFU0NcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkKKwkJcmVxID0gMDsKKwllbHNlCisJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBsaDdhNDB4X3JlcXVlc3QsIHF1ZXVlKTsKKworCURFQlVHKCJyZXE6ICVwXG4iLCByZXEpOworCisJaWYgKCFyZXEpCisJCXJldHVybjsKKworCXdyaXRlX2ZpZm8oZXAsIHJlcSk7Cit9CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogQnVsayBPVVQgKHJlY3YpCisgKi8KKworc3RhdGljIHZvaWQgbGg3YTQweF9vdXRfZXBuKHN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2LCB1MzIgZXBfaWR4LCB1MzIgaW50cikKK3sKKwlzdHJ1Y3QgbGg3YTQweF9lcCAqZXAgPSAmZGV2LT5lcFtlcF9pZHhdOworCXN0cnVjdCBsaDdhNDB4X3JlcXVlc3QgKnJlcTsKKworCURFQlVHKCIlczogJWRcbiIsIF9fRlVOQ1RJT05fXywgZXBfaWR4KTsKKworCXVzYl9zZXRfaW5kZXgoZXBfaWR4KTsKKworCWlmIChlcC0+ZGVzYykgeworCQl1MzIgY3NyOworCQljc3IgPSB1c2JfcmVhZChlcC0+Y3NyMSk7CisKKwkJd2hpbGUgKChjc3IgPQorCQkJdXNiX3JlYWQoZXAtPgorCQkJCSBjc3IxKSkgJiAoVVNCX09VVF9DU1IxX09VVF9QS1RfUkRZIHwKKwkJCQkJICAgVVNCX09VVF9DU1IxX1NFTlRfU1RBTEwpKSB7CisJCQlERUJVRygiJXM6ICV4XG4iLCBfX0ZVTkNUSU9OX18sIGNzcik7CisKKwkJCWlmIChjc3IgJiBVU0JfT1VUX0NTUjFfU0VOVF9TVEFMTCkgeworCQkJCURFQlVHKCIlczogc3RhbGwgc2VudCwgZmx1c2ggZmlmb1xuIiwKKwkJCQkgICAgICBfX0ZVTkNUSU9OX18pOworCQkJCS8qIHVzYl9zZXQoVVNCX09VVF9DU1IxX0ZJRk9fRkxVU0gsIGVwLT5jc3IxKTsgKi8KKwkJCQlmbHVzaChlcCk7CisJCQl9IGVsc2UgaWYgKGNzciAmIFVTQl9PVVRfQ1NSMV9PVVRfUEtUX1JEWSkgeworCQkJCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQkJCQlyZXEgPSAwOworCQkJCWVsc2UKKwkJCQkJcmVxID0KKwkJCQkJICAgIGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsCisJCQkJCQkgICAgICAgc3RydWN0IGxoN2E0MHhfcmVxdWVzdCwKKwkJCQkJCSAgICAgICBxdWV1ZSk7CisKKwkJCQlpZiAoIXJlcSkgeworCQkJCQlwcmludGsoIiVzOiBOVUxMIFJFUSAlZFxuIiwKKwkJCQkJICAgICAgIF9fRlVOQ1RJT05fXywgZXBfaWR4KTsKKwkJCQkJZmx1c2goZXApOworCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgeworCQkJCQlyZWFkX2ZpZm8oZXAsIHJlcSk7CisJCQkJfQorCQkJfQorCisJCX0KKworCX0gZWxzZSB7CisJCS8qIFRocm93IHBhY2tldCBhd2F5Li4gKi8KKwkJcHJpbnRrKCIlczogTm8gZGVzY3JpcHRvcj8hP1xuIiwgX19GVU5DVElPTl9fKTsKKwkJZmx1c2goZXApOworCX0KK30KKworc3RhdGljIHZvaWQgc3RvcF9hY3Rpdml0eShzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiwKKwkJCSAgc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCit7CisJaW50IGk7CisKKwkvKiBkb24ndCBkaXNjb25uZWN0IGRyaXZlcnMgbW9yZSB0aGFuIG9uY2UgKi8KKwlpZiAoZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pCisJCWRyaXZlciA9IDA7CisJZGV2LT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKworCS8qIHByZXZlbnQgbmV3IHJlcXVlc3Qgc3VibWlzc2lvbnMsIGtpbGwgYW55IG91dHN0YW5kaW5nIHJlcXVlc3RzICAqLworCWZvciAoaSA9IDA7IGkgPCBVRENfTUFYX0VORFBPSU5UUzsgaSsrKSB7CisJCXN0cnVjdCBsaDdhNDB4X2VwICplcCA9ICZkZXYtPmVwW2ldOworCQllcC0+c3RvcHBlZCA9IDE7CisKKwkJdXNiX3NldF9pbmRleChpKTsKKwkJbnVrZShlcCwgLUVTSFVURE9XTik7CisJfQorCisJLyogcmVwb3J0IGRpc2Nvbm5lY3Q7IHRoZSBkcml2ZXIgaXMgYWxyZWFkeSBxdWllc2NlZCAqLworCWlmIChkcml2ZXIpIHsKKwkJc3Bpbl91bmxvY2soJmRldi0+bG9jayk7CisJCWRyaXZlci0+ZGlzY29ubmVjdCgmZGV2LT5nYWRnZXQpOworCQlzcGluX2xvY2soJmRldi0+bG9jayk7CisJfQorCisJLyogcmUtaW5pdCBkcml2ZXItdmlzaWJsZSBkYXRhIHN0cnVjdHVyZXMgKi8KKwl1ZGNfcmVpbml0KGRldik7Cit9CisKKy8qKiBIYW5kbGUgVVNCIFJFU0VUIGludGVycnVwdAorICovCitzdGF0aWMgdm9pZCBsaDdhNDB4X3Jlc2V0X2ludHIoc3RydWN0IGxoN2E0MHhfdWRjICpkZXYpCit7CisjaWYgMAkJCQkvKiBkZWYgQ09ORklHX0FSQ0hfTEg3QTQwNCAqLworCS8qIERvZXMgbm90IHdvcmsgYWx3YXlzLi4uICovCisKKwlERUJVRygiJXM6ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGRldi0+dXNiX2FkZHJlc3MpOworCisJaWYgKCFkZXYtPnVzYl9hZGRyZXNzKSB7CisJCS8qdXNiX3NldChVU0JfUkVTRVRfSU8sIFVTQl9SRVNFVCk7CisJCSAgIG1kZWxheSg1KTsKKwkJICAgdXNiX2NsZWFyKFVTQl9SRVNFVF9JTywgVVNCX1JFU0VUKTsgKi8KKwkJcmV0dXJuOworCX0KKwkvKiBQdXQgdGhlIFVTQiBjb250cm9sbGVyIGludG8gcmVzZXQuICovCisJdXNiX3NldChVU0JfUkVTRVRfSU8sIFVTQl9SRVNFVCk7CisKKwkvKiBTZXQgRGV2aWNlIElEIHRvIDAgKi8KKwl1ZGNfc2V0X2FkZHJlc3MoZGV2LCAwKTsKKworCS8qIExldCBQTEwyIHNldHRsZSBkb3duICovCisJbWRlbGF5KDUpOworCisJLyogUmVsZWFzZSB0aGUgVVNCIGNvbnRyb2xsZXIgZnJvbSByZXNldCAqLworCXVzYl9jbGVhcihVU0JfUkVTRVRfSU8sIFVTQl9SRVNFVCk7CisKKwkvKiBSZS1lbmFibGUgVURDICovCisJdWRjX2VuYWJsZShkZXYpOworCisjZW5kaWYKKwlkZXYtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworfQorCisvKgorICoJbGg3YTQweCB1c2IgY2xpZW50IGludGVycnVwdCBoYW5kbGVyLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgbGg3YTQweF91ZGNfaXJxKGludCBpcnEsIHZvaWQgKl9kZXYsIHN0cnVjdCBwdF9yZWdzICpyKQoreworCXN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2ID0gX2RldjsKKworCURFQlVHKCJcblxuIik7CisKKwlzcGluX2xvY2soJmRldi0+bG9jayk7CisKKwlmb3IgKDs7KSB7CisJCXUzMiBpbnRyX2luID0gdXNiX3JlYWQoVVNCX0lOX0lOVCk7CisJCXUzMiBpbnRyX291dCA9IHVzYl9yZWFkKFVTQl9PVVRfSU5UKTsKKwkJdTMyIGludHJfaW50ID0gdXNiX3JlYWQoVVNCX0lOVCk7CisKKwkJLyogVGVzdCBhbHNvIGFnYWluc3QgZW5hYmxlIGJpdHMuLiAobGg3YTQweCBlcnJhdGEpLi4gU2lnaC4uICovCisJCXUzMiBpbl9lbiA9IHVzYl9yZWFkKFVTQl9JTl9JTlRfRU4pOworCQl1MzIgb3V0X2VuID0gdXNiX3JlYWQoVVNCX09VVF9JTlRfRU4pOworCisJCWlmICghaW50cl9vdXQgJiYgIWludHJfaW4gJiYgIWludHJfaW50KQorCQkJYnJlYWs7CisKKwkJREVCVUcoIiVzIChvbiBzdGF0ZSAlcylcbiIsIF9fRlVOQ1RJT05fXywKKwkJICAgICAgc3RhdGVfbmFtZXNbZGV2LT5lcDBzdGF0ZV0pOworCQlERUJVRygiaW50cl9vdXQgPSAleFxuIiwgaW50cl9vdXQpOworCQlERUJVRygiaW50cl9pbiAgPSAleFxuIiwgaW50cl9pbik7CisJCURFQlVHKCJpbnRyX2ludCA9ICV4XG4iLCBpbnRyX2ludCk7CisKKwkJaWYgKGludHJfaW4pIHsKKwkJCXVzYl93cml0ZShpbnRyX2luLCBVU0JfSU5fSU5UKTsKKworCQkJaWYgKChpbnRyX2luICYgVVNCX0lOX0lOVF9FUDEpCisJCQkgICAgJiYgKGluX2VuICYgVVNCX0lOX0lOVF9FUDEpKSB7CisJCQkJREVCVUcoIlVTQl9JTl9JTlRfRVAxXG4iKTsKKwkJCQlsaDdhNDB4X2luX2VwbihkZXYsIDEsIGludHJfaW4pOworCQkJfQorCQkJaWYgKChpbnRyX2luICYgVVNCX0lOX0lOVF9FUDMpCisJCQkgICAgJiYgKGluX2VuICYgVVNCX0lOX0lOVF9FUDMpKSB7CisJCQkJREVCVUcoIlVTQl9JTl9JTlRfRVAzXG4iKTsKKwkJCQlsaDdhNDB4X2luX2VwbihkZXYsIDMsIGludHJfaW4pOworCQkJfQorCQkJaWYgKGludHJfaW4gJiBVU0JfSU5fSU5UX0VQMCkgeworCQkJCURFQlVHKCJVU0JfSU5fSU5UX0VQMCAoY29udHJvbClcbiIpOworCQkJCWxoN2E0MHhfaGFuZGxlX2VwMChkZXYsIGludHJfaW4pOworCQkJfQorCQl9CisKKwkJaWYgKGludHJfb3V0KSB7CisJCQl1c2Jfd3JpdGUoaW50cl9vdXQsIFVTQl9PVVRfSU5UKTsKKworCQkJaWYgKChpbnRyX291dCAmIFVTQl9PVVRfSU5UX0VQMikKKwkJCSAgICAmJiAob3V0X2VuICYgVVNCX09VVF9JTlRfRVAyKSkgeworCQkJCURFQlVHKCJVU0JfT1VUX0lOVF9FUDJcbiIpOworCQkJCWxoN2E0MHhfb3V0X2VwbihkZXYsIDIsIGludHJfb3V0KTsKKwkJCX0KKwkJfQorCisJCWlmIChpbnRyX2ludCkgeworCQkJdXNiX3dyaXRlKGludHJfaW50LCBVU0JfSU5UKTsKKworCQkJaWYgKGludHJfaW50ICYgVVNCX0lOVF9SRVNFVF9JTlQpIHsKKwkJCQlsaDdhNDB4X3Jlc2V0X2ludHIoZGV2KTsKKwkJCX0KKworCQkJaWYgKGludHJfaW50ICYgVVNCX0lOVF9SRVNVTUVfSU5UKSB7CisJCQkJREVCVUcoIlVTQiByZXN1bWVcbiIpOworCisJCQkJaWYgKGRldi0+Z2FkZ2V0LnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOCisJCQkJICAgICYmIGRldi0+ZHJpdmVyCisJCQkJICAgICYmIGRldi0+ZHJpdmVyLT5yZXN1bWUKKwkJCQkgICAgJiYgaXNfdXNiX2Nvbm5lY3RlZCgpKSB7CisJCQkJCWRldi0+ZHJpdmVyLT5yZXN1bWUoJmRldi0+Z2FkZ2V0KTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChpbnRyX2ludCAmIFVTQl9JTlRfU1VTUEVORF9JTlQpIHsKKwkJCQlERUJVRygiVVNCIHN1c3BlbmQlc1xuIiwKKwkJCQkgICAgICBpc191c2JfY29ubmVjdGVkKCk/ICIiIDogIitkaXNjb25uZWN0Iik7CisJCQkJaWYgKCFpc191c2JfY29ubmVjdGVkKCkpIHsKKwkJCQkJc3RvcF9hY3Rpdml0eShkZXYsIGRldi0+ZHJpdmVyKTsKKwkJCQl9IGVsc2UgaWYgKGRldi0+Z2FkZ2V0LnNwZWVkICE9CisJCQkJCSAgIFVTQl9TUEVFRF9VTktOT1dOICYmIGRldi0+ZHJpdmVyCisJCQkJCSAgICYmIGRldi0+ZHJpdmVyLT5zdXNwZW5kKSB7CisJCQkJCWRldi0+ZHJpdmVyLT5zdXNwZW5kKCZkZXYtPmdhZGdldCk7CisJCQkJfQorCQkJfQorCisJCX0KKwl9CisKKwlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBsaDdhNDB4X2VwX2VuYWJsZShzdHJ1Y3QgdXNiX2VwICpfZXAsCisJCQkgICAgIGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYykKK3sKKwlzdHJ1Y3QgbGg3YTQweF9lcCAqZXA7CisJc3RydWN0IGxoN2E0MHhfdWRjICpkZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCURFQlVHKCIlcywgJXBcbiIsIF9fRlVOQ1RJT05fXywgX2VwKTsKKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IGxoN2E0MHhfZXAsIGVwKTsKKwlpZiAoIV9lcCB8fCAhZGVzYyB8fCBlcC0+ZGVzYyB8fCBfZXAtPm5hbWUgPT0gZXAwbmFtZQorCSAgICB8fCBkZXNjLT5iRGVzY3JpcHRvclR5cGUgIT0gVVNCX0RUX0VORFBPSU5UCisJICAgIHx8IGVwLT5iRW5kcG9pbnRBZGRyZXNzICE9IGRlc2MtPmJFbmRwb2ludEFkZHJlc3MKKwkgICAgfHwgZXBfbWF4cGFja2V0KGVwKSA8IGxlMTZfdG9fY3B1KGRlc2MtPndNYXhQYWNrZXRTaXplKSkgeworCQlERUJVRygiJXMsIGJhZCBlcCBvciBkZXNjcmlwdG9yXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiB4ZmVyIHR5cGVzIG11c3QgbWF0Y2gsIGV4Y2VwdCB0aGF0IGludGVycnVwdCB+PSBidWxrICovCisJaWYgKGVwLT5ibUF0dHJpYnV0ZXMgIT0gZGVzYy0+Ym1BdHRyaWJ1dGVzCisJICAgICYmIGVwLT5ibUF0dHJpYnV0ZXMgIT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSworCSAgICAmJiBkZXNjLT5ibUF0dHJpYnV0ZXMgIT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKSB7CisJCURFQlVHKCIlcywgJXMgdHlwZSBtaXNtYXRjaFxuIiwgX19GVU5DVElPTl9fLCBfZXAtPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBoYXJkd2FyZSBfY291bGRfIGRvIHNtYWxsZXIsIGJ1dCBkcml2ZXIgZG9lc24ndCAqLworCWlmICgoZGVzYy0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEsKKwkgICAgICYmIGxlMTZfdG9fY3B1KGRlc2MtPndNYXhQYWNrZXRTaXplKSAhPSBlcF9tYXhwYWNrZXQoZXApKQorCSAgICB8fCAhZGVzYy0+d01heFBhY2tldFNpemUpIHsKKwkJREVCVUcoIiVzLCBiYWQgJXMgbWF4cGFja2V0XG4iLCBfX0ZVTkNUSU9OX18sIF9lcC0+bmFtZSk7CisJCXJldHVybiAtRVJBTkdFOworCX0KKworCWRldiA9IGVwLT5kZXY7CisJaWYgKCFkZXYtPmRyaXZlciB8fCBkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikgeworCQlERUJVRygiJXMsIGJvZ3VzIGRldmljZSBzdGF0ZVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FU0hVVERPV047CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT5kZXYtPmxvY2ssIGZsYWdzKTsKKworCWVwLT5zdG9wcGVkID0gMDsKKwllcC0+ZGVzYyA9IGRlc2M7CisJZXAtPnBpb19pcnFzID0gMDsKKwllcC0+ZXAubWF4cGFja2V0ID0gbGUxNl90b19jcHUoZGVzYy0+d01heFBhY2tldFNpemUpOworCisJLyogUmVzZXQgaGFsdCBzdGF0ZSAoZG9lcyBmbHVzaCkgKi8KKwlsaDdhNDB4X3NldF9oYWx0KF9lcCwgMCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CisKKwlERUJVRygiJXM6IGVuYWJsZWQgJXNcbiIsIF9fRlVOQ1RJT05fXywgX2VwLT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworLyoqIERpc2FibGUgRVAKKyAqICBOT1RFOiBTZXRzIElOREVYIHJlZ2lzdGVyCisgKi8KK3N0YXRpYyBpbnQgbGg3YTQweF9lcF9kaXNhYmxlKHN0cnVjdCB1c2JfZXAgKl9lcCkKK3sKKwlzdHJ1Y3QgbGg3YTQweF9lcCAqZXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCURFQlVHKCIlcywgJXBcbiIsIF9fRlVOQ1RJT05fXywgX2VwKTsKKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IGxoN2E0MHhfZXAsIGVwKTsKKwlpZiAoIV9lcCB8fCAhZXAtPmRlc2MpIHsKKwkJREVCVUcoIiVzLCAlcyBub3QgZW5hYmxlZFxuIiwgX19GVU5DVElPTl9fLAorCQkgICAgICBfZXAgPyBlcC0+ZXAubmFtZSA6IE5VTEwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCisJdXNiX3NldF9pbmRleChlcF9pbmRleChlcCkpOworCisJLyogTnVrZSBhbGwgcGVuZGluZyByZXF1ZXN0cyAoZG9lcyBmbHVzaCkgKi8KKwludWtlKGVwLCAtRVNIVVRET1dOKTsKKworCS8qIERpc2FibGUgZXAgSVJRICovCisJcGlvX2lycV9kaXNhYmxlKGVwX2luZGV4KGVwKSk7CisKKwllcC0+ZGVzYyA9IDA7CisJZXAtPnN0b3BwZWQgPSAxOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCisJREVCVUcoIiVzOiBkaXNhYmxlZCAlc1xuIiwgX19GVU5DVElPTl9fLCBfZXAtPm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9yZXF1ZXN0ICpsaDdhNDB4X2FsbG9jX3JlcXVlc3Qoc3RydWN0IHVzYl9lcCAqZXAsCisJCQkJCQkgaW50IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0ICpyZXE7CisKKwlERUJVRygiJXMsICVwXG4iLCBfX0ZVTkNUSU9OX18sIGVwKTsKKworCXJlcSA9IGttYWxsb2Moc2l6ZW9mICpyZXEsIGdmcF9mbGFncyk7CisJaWYgKCFyZXEpCisJCXJldHVybiAwOworCisJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mICpyZXEpOworCUlOSVRfTElTVF9IRUFEKCZyZXEtPnF1ZXVlKTsKKworCXJldHVybiAmcmVxLT5yZXE7Cit9CisKK3N0YXRpYyB2b2lkIGxoN2E0MHhfZnJlZV9yZXF1ZXN0KHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKl9yZXEpCit7CisJc3RydWN0IGxoN2E0MHhfcmVxdWVzdCAqcmVxOworCisJREVCVUcoIiVzLCAlcFxuIiwgX19GVU5DVElPTl9fLCBlcCk7CisKKwlyZXEgPSBjb250YWluZXJfb2YoX3JlcSwgc3RydWN0IGxoN2E0MHhfcmVxdWVzdCwgcmVxKTsKKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZyZXEtPnF1ZXVlKSk7CisJa2ZyZWUocmVxKTsKK30KKworc3RhdGljIHZvaWQgKmxoN2E0MHhfYWxsb2NfYnVmZmVyKHN0cnVjdCB1c2JfZXAgKmVwLCB1bnNpZ25lZCBieXRlcywKKwkJCQkgIGRtYV9hZGRyX3QgKiBkbWEsIGludCBnZnBfZmxhZ3MpCit7CisJY2hhciAqcmV0dmFsOworCisJREVCVUcoIiVzICglcCwgJWQsICVkKVxuIiwgX19GVU5DVElPTl9fLCBlcCwgYnl0ZXMsIGdmcF9mbGFncyk7CisKKwlyZXR2YWwgPSBrbWFsbG9jKGJ5dGVzLCBnZnBfZmxhZ3MgJiB+KF9fR0ZQX0RNQSB8IF9fR0ZQX0hJR0hNRU0pKTsKKwlpZiAocmV0dmFsKQorCQkqZG1hID0gdmlydF90b19idXMocmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBsaDdhNDB4X2ZyZWVfYnVmZmVyKHN0cnVjdCB1c2JfZXAgKmVwLCB2b2lkICpidWYsIGRtYV9hZGRyX3QgZG1hLAorCQkJCXVuc2lnbmVkIGJ5dGVzKQoreworCURFQlVHKCIlcywgJXBcbiIsIF9fRlVOQ1RJT05fXywgZXApOworCWtmcmVlKGJ1Zik7Cit9CisKKy8qKiBRdWV1ZSBvbmUgcmVxdWVzdAorICogIEtpY2tzdGFydCB0cmFuc2ZlciBpZiBuZWVkZWQKKyAqICBOT1RFOiBTZXRzIElOREVYIHJlZ2lzdGVyCisgKi8KK3N0YXRpYyBpbnQgbGg3YTQweF9xdWV1ZShzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSwKKwkJCSBpbnQgZ2ZwX2ZsYWdzKQoreworCXN0cnVjdCBsaDdhNDB4X3JlcXVlc3QgKnJlcTsKKwlzdHJ1Y3QgbGg3YTQweF9lcCAqZXA7CisJc3RydWN0IGxoN2E0MHhfdWRjICpkZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCURFQlVHKCJcblxuXG4lcywgJXBcbiIsIF9fRlVOQ1RJT05fXywgX2VwKTsKKworCXJlcSA9IGNvbnRhaW5lcl9vZihfcmVxLCBzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0LCByZXEpOworCWlmICh1bmxpa2VseQorCSAgICAoIV9yZXEgfHwgIV9yZXEtPmNvbXBsZXRlIHx8ICFfcmVxLT5idWYKKwkgICAgIHx8ICFsaXN0X2VtcHR5KCZyZXEtPnF1ZXVlKSkpIHsKKwkJREVCVUcoIiVzLCBiYWQgcGFyYW1zXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBsaDdhNDB4X2VwLCBlcCk7CisJaWYgKHVubGlrZWx5KCFfZXAgfHwgKCFlcC0+ZGVzYyAmJiBlcC0+ZXAubmFtZSAhPSBlcDBuYW1lKSkpIHsKKwkJREVCVUcoIiVzLCBiYWQgZXBcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldiA9IGVwLT5kZXY7CisJaWYgKHVubGlrZWx5KCFkZXYtPmRyaXZlciB8fCBkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikpIHsKKwkJREVCVUcoIiVzLCBib2d1cyBkZXZpY2Ugc3RhdGUgJXBcbiIsIF9fRlVOQ1RJT05fXywgZGV2LT5kcml2ZXIpOworCQlyZXR1cm4gLUVTSFVURE9XTjsKKwl9CisKKwlERUJVRygiJXMgcXVldWUgcmVxICVwLCBsZW4gJWQgYnVmICVwXG4iLCBfZXAtPm5hbWUsIF9yZXEsIF9yZXEtPmxlbmd0aCwKKwkgICAgICBfcmVxLT5idWYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJX3JlcS0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCV9yZXEtPmFjdHVhbCA9IDA7CisKKwkvKiBraWNrc3RhcnQgdGhpcyBpL28gcXVldWU/ICovCisJREVCVUcoIkFkZCB0byAlZCBRICVkICVkXG4iLCBlcF9pbmRleChlcCksIGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSksCisJICAgICAgZXAtPnN0b3BwZWQpOworCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpICYmIGxpa2VseSghZXAtPnN0b3BwZWQpKSB7CisJCXUzMiBjc3I7CisKKwkJaWYgKHVubGlrZWx5KGVwX2luZGV4KGVwKSA9PSAwKSkgeworCQkJLyogRVAwICovCisJCQlsaXN0X2FkZF90YWlsKCZyZXEtPnF1ZXVlLCAmZXAtPnF1ZXVlKTsKKwkJCWxoN2E0MHhfZXAwX2tpY2soZGV2LCBlcCk7CisJCQlyZXEgPSAwOworCQl9IGVsc2UgaWYgKGVwX2lzX2luKGVwKSkgeworCQkJLyogRVAxICYgRVAzICovCisJCQl1c2Jfc2V0X2luZGV4KGVwX2luZGV4KGVwKSk7CisJCQljc3IgPSB1c2JfcmVhZChlcC0+Y3NyMSk7CisJCQlwaW9faXJxX2VuYWJsZShlcF9pbmRleChlcCkpOworCQkJaWYgKChjc3IgJiBVU0JfSU5fQ1NSMV9GSUZPX05PVF9FTVBUWSkgPT0gMCkgeworCQkJCWlmICh3cml0ZV9maWZvKGVwLCByZXEpID09IDEpCisJCQkJCXJlcSA9IDA7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBFUDIgKi8KKwkJCXVzYl9zZXRfaW5kZXgoZXBfaW5kZXgoZXApKTsKKwkJCWNzciA9IHVzYl9yZWFkKGVwLT5jc3IxKTsKKwkJCXBpb19pcnFfZW5hYmxlKGVwX2luZGV4KGVwKSk7CisJCQlpZiAoIShjc3IgJiBVU0JfT1VUX0NTUjFfRklGT19GVUxMKSkgeworCQkJCWlmIChyZWFkX2ZpZm8oZXAsIHJlcSkgPT0gMSkKKwkJCQkJcmVxID0gMDsKKwkJCX0KKwkJfQorCX0KKworCS8qIHBpbyBvciBkbWEgaXJxIGhhbmRsZXIgYWR2YW5jZXMgdGhlIHF1ZXVlLiAqLworCWlmIChsaWtlbHkocmVxICE9IDApKQorCQlsaXN0X2FkZF90YWlsKCZyZXEtPnF1ZXVlLCAmZXAtPnF1ZXVlKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGRlcXVldWUgSlVTVCBPTkUgcmVxdWVzdCAqLworc3RhdGljIGludCBsaDdhNDB4X2RlcXVldWUoc3RydWN0IHVzYl9lcCAqX2VwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKl9yZXEpCit7CisJc3RydWN0IGxoN2E0MHhfZXAgKmVwOworCXN0cnVjdCBsaDdhNDB4X3JlcXVlc3QgKnJlcTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJREVCVUcoIiVzLCAlcFxuIiwgX19GVU5DVElPTl9fLCBfZXApOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgbGg3YTQweF9lcCwgZXApOworCWlmICghX2VwIHx8IGVwLT5lcC5uYW1lID09IGVwMG5hbWUpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT5kZXYtPmxvY2ssIGZsYWdzKTsKKworCS8qIG1ha2Ugc3VyZSBpdCdzIGFjdHVhbGx5IHF1ZXVlZCBvbiB0aGlzIGVuZHBvaW50ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7CisJCWlmICgmcmVxLT5yZXEgPT0gX3JlcSkKKwkJCWJyZWFrOworCX0KKwlpZiAoJnJlcS0+cmVxICE9IF9yZXEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkb25lKGVwLCByZXEsIC1FQ09OTlJFU0VUKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5kZXYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyoqIEhhbHQgc3BlY2lmaWMgRVAKKyAqICBSZXR1cm4gMCBpZiBzdWNjZXNzCisgKiAgTk9URTogU2V0cyBJTkRFWCByZWdpc3RlciB0byBFUCAhCisgKi8KK3N0YXRpYyBpbnQgbGg3YTQweF9zZXRfaGFsdChzdHJ1Y3QgdXNiX2VwICpfZXAsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbGg3YTQweF9lcCAqZXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IGxoN2E0MHhfZXAsIGVwKTsKKwlpZiAodW5saWtlbHkoIV9lcCB8fCAoIWVwLT5kZXNjICYmIGVwLT5lcC5uYW1lICE9IGVwMG5hbWUpKSkgeworCQlERUJVRygiJXMsIGJhZCBlcFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdXNiX3NldF9pbmRleChlcF9pbmRleChlcCkpOworCisJREVCVUcoIiVzLCBlcCAlZCwgdmFsICVkXG4iLCBfX0ZVTkNUSU9OX18sIGVwX2luZGV4KGVwKSwgdmFsdWUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT5kZXYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChlcF9pbmRleChlcCkgPT0gMCkgeworCQkvKiBFUDAgKi8KKwkJdXNiX3NldChFUDBfU0VORF9TVEFMTCwgZXAtPmNzcjEpOworCX0gZWxzZSBpZiAoZXBfaXNfaW4oZXApKSB7CisJCXUzMiBjc3IgPSB1c2JfcmVhZChlcC0+Y3NyMSk7CisJCWlmICh2YWx1ZSAmJiAoKGNzciAmIFVTQl9JTl9DU1IxX0ZJRk9fTk9UX0VNUFRZKQorCQkJICAgICAgfHwgIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpKSB7CisJCQkvKgorCQkJICogQXR0ZW1wdHMgdG8gaGFsdCBJTiBlbmRwb2ludHMgd2lsbCBmYWlsIChyZXR1cm5pbmcgLUVBR0FJTikKKwkJCSAqIGlmIGFueSB0cmFuc2ZlciByZXF1ZXN0cyBhcmUgc3RpbGwgcXVldWVkLCBvciBpZiB0aGUgY29udHJvbGxlcgorCQkJICogRklGTyBzdGlsbCBob2xkcyBieXRlcyB0aGF0IHRoZSBob3N0IGhhc26SdCBjb2xsZWN0ZWQuCisJCQkgKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5kZXYtPmxvY2ssIGZsYWdzKTsKKwkJCURFQlVHCisJCQkgICAgKCJBdHRlbXB0IHRvIGhhbHQgSU4gZW5kcG9pbnQgZmFpbGVkIChyZXR1cm5pbmcgLUVBR0FJTikgJWQgJWRcbiIsCisJCQkgICAgIChjc3IgJiBVU0JfSU5fQ1NSMV9GSUZPX05PVF9FTVBUWSksCisJCQkgICAgICFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJCWZsdXNoKGVwKTsKKwkJaWYgKHZhbHVlKQorCQkJdXNiX3NldChVU0JfSU5fQ1NSMV9TRU5EX1NUQUxMLCBlcC0+Y3NyMSk7CisJCWVsc2UgeworCQkJdXNiX2NsZWFyKFVTQl9JTl9DU1IxX1NFTkRfU1RBTEwsIGVwLT5jc3IxKTsKKwkJCXVzYl9zZXQoVVNCX0lOX0NTUjFfQ0xSX0RBVEFfVE9HR0xFLCBlcC0+Y3NyMSk7CisJCX0KKworCX0gZWxzZSB7CisKKwkJZmx1c2goZXApOworCQlpZiAodmFsdWUpCisJCQl1c2Jfc2V0KFVTQl9PVVRfQ1NSMV9TRU5EX1NUQUxMLCBlcC0+Y3NyMSk7CisJCWVsc2UgeworCQkJdXNiX2NsZWFyKFVTQl9PVVRfQ1NSMV9TRU5EX1NUQUxMLCBlcC0+Y3NyMSk7CisJCQl1c2Jfc2V0KFVTQl9PVVRfQ1NSMV9DTFJfREFUQV9SRUcsIGVwLT5jc3IxKTsKKwkJfQorCX0KKworCWlmICh2YWx1ZSkgeworCQllcC0+c3RvcHBlZCA9IDE7CisJfSBlbHNlIHsKKwkJZXAtPnN0b3BwZWQgPSAwOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5kZXYtPmxvY2ssIGZsYWdzKTsKKworCURFQlVHKCIlcyAlcyBoYWx0ZWRcbiIsIF9lcC0+bmFtZSwgdmFsdWUgPT0gMCA/ICJOT1QiIDogIklTIik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqIFJldHVybiBieXRlcyBpbiBFUCBGSUZPCisgKiAgTk9URTogU2V0cyBJTkRFWCByZWdpc3RlciB0byBFUAorICovCitzdGF0aWMgaW50IGxoN2E0MHhfZmlmb19zdGF0dXMoc3RydWN0IHVzYl9lcCAqX2VwKQoreworCXUzMiBjc3I7CisJaW50IGNvdW50ID0gMDsKKwlzdHJ1Y3QgbGg3YTQweF9lcCAqZXA7CisKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBsaDdhNDB4X2VwLCBlcCk7CisJaWYgKCFfZXApIHsKKwkJREVCVUcoIiVzLCBiYWQgZXBcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCURFQlVHKCIlcywgJWRcbiIsIF9fRlVOQ1RJT05fXywgZXBfaW5kZXgoZXApKTsKKworCS8qIExQRCBjYW4ndCByZXBvcnQgdW5jbGFpbWVkIGJ5dGVzIGZyb20gSU4gZmlmb3MgKi8KKwlpZiAoZXBfaXNfaW4oZXApKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwl1c2Jfc2V0X2luZGV4KGVwX2luZGV4KGVwKSk7CisKKwljc3IgPSB1c2JfcmVhZChlcC0+Y3NyMSk7CisJaWYgKGVwLT5kZXYtPmdhZGdldC5zcGVlZCAhPSBVU0JfU1BFRURfVU5LTk9XTiB8fAorCSAgICBjc3IgJiBVU0JfT1VUX0NTUjFfT1VUX1BLVF9SRFkpIHsKKwkJY291bnQgPSB1c2JfcmVhZChVU0JfT1VUX0ZJRk9fV0MxKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qKiBGbHVzaCBFUCBGSUZPCisgKiAgTk9URTogU2V0cyBJTkRFWCByZWdpc3RlciB0byBFUAorICovCitzdGF0aWMgdm9pZCBsaDdhNDB4X2ZpZm9fZmx1c2goc3RydWN0IHVzYl9lcCAqX2VwKQoreworCXN0cnVjdCBsaDdhNDB4X2VwICplcDsKKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IGxoN2E0MHhfZXAsIGVwKTsKKwlpZiAodW5saWtlbHkoIV9lcCB8fCAoIWVwLT5kZXNjICYmIGVwLT5lcC5uYW1lICE9IGVwMG5hbWUpKSkgeworCQlERUJVRygiJXMsIGJhZCBlcFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCXVzYl9zZXRfaW5kZXgoZXBfaW5kZXgoZXApKTsKKwlmbHVzaChlcCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRW5kIFBvaW50IDAgcmVsYXRlZCBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogcmV0dXJuOiAgMCA9IHN0aWxsIHJ1bm5pbmcsIDEgPSBjb21wbGV0ZWQsIG5lZ2F0aXZlID0gZXJybm8gKi8KK3N0YXRpYyBpbnQgd3JpdGVfZmlmb19lcDAoc3RydWN0IGxoN2E0MHhfZXAgKmVwLCBzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0ICpyZXEpCit7CisJdTMyIG1heDsKKwl1bnNpZ25lZCBjb3VudDsKKwlpbnQgaXNfbGFzdDsKKworCW1heCA9IGVwX21heHBhY2tldChlcCk7CisKKwlERUJVR19FUDAoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJY291bnQgPSB3cml0ZV9wYWNrZXQoZXAsIHJlcSwgbWF4KTsKKworCS8qIGxhc3QgcGFja2V0IGlzIHVzdWFsbHkgc2hvcnQgKG9yIGEgemxwKSAqLworCWlmICh1bmxpa2VseShjb3VudCAhPSBtYXgpKQorCQlpc19sYXN0ID0gMTsKKwllbHNlIHsKKwkJaWYgKGxpa2VseShyZXEtPnJlcS5sZW5ndGggIT0gcmVxLT5yZXEuYWN0dWFsKSB8fCByZXEtPnJlcS56ZXJvKQorCQkJaXNfbGFzdCA9IDA7CisJCWVsc2UKKwkJCWlzX2xhc3QgPSAxOworCX0KKworCURFQlVHX0VQMCgiJXM6IHdyb3RlICVzICVkIGJ5dGVzJXMgJWQgbGVmdCAlcFxuIiwgX19GVU5DVElPTl9fLAorCQkgIGVwLT5lcC5uYW1lLCBjb3VudCwKKwkJICBpc19sYXN0ID8gIi9MIiA6ICIiLCByZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWwsIHJlcSk7CisKKwkvKiByZXF1ZXN0cyBjb21wbGV0ZSB3aGVuIGFsbCBJTiBkYXRhIGlzIGluIHRoZSBGSUZPICovCisJaWYgKGlzX2xhc3QpIHsKKwkJZG9uZShlcCwgcmVxLCAwKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBsaDdhNDB4X2ZpZm9fcmVhZChzdHJ1Y3QgbGg3YTQweF9lcCAqZXAsCisJCQkJCXVuc2lnbmVkIGNoYXIgKmNwLCBpbnQgbWF4KQoreworCWludCBieXRlczsKKwlpbnQgY291bnQgPSB1c2JfcmVhZChVU0JfT1VUX0ZJRk9fV0MxKTsKKwl2b2xhdGlsZSB1MzIgKmZpZm8gPSAodm9sYXRpbGUgdTMyICopZXAtPmZpZm87CisKKwlpZiAoY291bnQgPiBtYXgpCisJCWNvdW50ID0gbWF4OworCWJ5dGVzID0gY291bnQ7CisJd2hpbGUgKGNvdW50LS0pCisJCSpjcCsrID0gKmZpZm8gJiAweEZGOworCXJldHVybiBieXRlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBsaDdhNDB4X2ZpZm9fd3JpdGUoc3RydWN0IGxoN2E0MHhfZXAgKmVwLAorCQkJCQkgIHVuc2lnbmVkIGNoYXIgKmNwLCBpbnQgY291bnQpCit7CisJdm9sYXRpbGUgdTMyICpmaWZvID0gKHZvbGF0aWxlIHUzMiAqKWVwLT5maWZvOworCURFQlVHX0VQMCgiZmlmb193cml0ZTogJWQgJWRcbiIsIGVwX2luZGV4KGVwKSwgY291bnQpOworCXdoaWxlIChjb3VudC0tKQorCQkqZmlmbyA9ICpjcCsrOworfQorCitzdGF0aWMgaW50IHJlYWRfZmlmb19lcDAoc3RydWN0IGxoN2E0MHhfZXAgKmVwLCBzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0ICpyZXEpCit7CisJdTMyIGNzcjsKKwl1OCAqYnVmOworCXVuc2lnbmVkIGJ1ZmZlcnNwYWNlLCBjb3VudCwgaXNfc2hvcnQ7CisJdm9sYXRpbGUgdTMyICpmaWZvID0gKHZvbGF0aWxlIHUzMiAqKWVwLT5maWZvOworCisJREVCVUdfRVAwKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCWNzciA9IHVzYl9yZWFkKFVTQl9FUDBfQ1NSKTsKKwlpZiAoIShjc3IgJiBVU0JfT1VUX0NTUjFfT1VUX1BLVF9SRFkpKQorCQlyZXR1cm4gMDsKKworCWJ1ZiA9IHJlcS0+cmVxLmJ1ZiArIHJlcS0+cmVxLmFjdHVhbDsKKwlwcmVmZXRjaHcoYnVmKTsKKwlidWZmZXJzcGFjZSA9IHJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbDsKKworCS8qIHJlYWQgYWxsIGJ5dGVzIGZyb20gdGhpcyBwYWNrZXQgKi8KKwlpZiAobGlrZWx5KGNzciAmIEVQMF9PVVRfUEtUX1JEWSkpIHsKKwkJY291bnQgPSB1c2JfcmVhZChVU0JfT1VUX0ZJRk9fV0MxKTsKKwkJcmVxLT5yZXEuYWN0dWFsICs9IG1pbihjb3VudCwgYnVmZmVyc3BhY2UpOworCX0gZWxzZQkJCS8qIHpscCAqLworCQljb3VudCA9IDA7CisKKwlpc19zaG9ydCA9IChjb3VudCA8IGVwLT5lcC5tYXhwYWNrZXQpOworCURFQlVHX0VQMCgicmVhZCAlcyAlMDJ4LCAlZCBieXRlcyVzIHJlcSAlcCAlZC8lZFxuIiwKKwkJICBlcC0+ZXAubmFtZSwgY3NyLCBjb3VudCwKKwkJICBpc19zaG9ydCA/ICIvUyIgOiAiIiwgcmVxLCByZXEtPnJlcS5hY3R1YWwsIHJlcS0+cmVxLmxlbmd0aCk7CisKKwl3aGlsZSAobGlrZWx5KGNvdW50LS0gIT0gMCkpIHsKKwkJdTggYnl0ZSA9ICh1OCkgKCpmaWZvICYgMHhmZik7CisKKwkJaWYgKHVubGlrZWx5KGJ1ZmZlcnNwYWNlID09IDApKSB7CisJCQkvKiB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgZHJpdmVyJ3MgYnVmZmVyCisJCQkgKiBpcyBzbWFsbGVyIHRoYW4gd2hhdCB0aGUgaG9zdCBzZW50LgorCQkJICogZGlzY2FyZCB0aGUgZXh0cmEgZGF0YS4KKwkJCSAqLworCQkJaWYgKHJlcS0+cmVxLnN0YXR1cyAhPSAtRU9WRVJGTE9XKQorCQkJCURFQlVHX0VQMCgiJXMgb3ZlcmZsb3cgJWRcbiIsIGVwLT5lcC5uYW1lLAorCQkJCQkgIGNvdW50KTsKKwkJCXJlcS0+cmVxLnN0YXR1cyA9IC1FT1ZFUkZMT1c7CisJCX0gZWxzZSB7CisJCQkqYnVmKysgPSBieXRlOworCQkJYnVmZmVyc3BhY2UtLTsKKwkJfQorCX0KKworCS8qIGNvbXBsZXRpb24gKi8KKwlpZiAoaXNfc2hvcnQgfHwgcmVxLT5yZXEuYWN0dWFsID09IHJlcS0+cmVxLmxlbmd0aCkgeworCQlkb25lKGVwLCByZXEsIDApOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBmaW5pc2hlZCB0aGF0IHBhY2tldC4gIHRoZSBuZXh0IG9uZSBtYXkgYmUgd2FpdGluZy4uLiAqLworCXJldHVybiAwOworfQorCisvKioKKyAqIHVkY19zZXRfYWRkcmVzcyAtIHNldCB0aGUgVVNCIGFkZHJlc3MgZm9yIHRoaXMgZGV2aWNlCisgKiBAYWRkcmVzczoKKyAqCisgKiBDYWxsZWQgZnJvbSBjb250cm9sIGVuZHBvaW50IGZ1bmN0aW9uIGFmdGVyIGl0IGRlY29kZXMgYSBzZXQgYWRkcmVzcyBzZXR1cCBwYWNrZXQuCisgKi8KK3N0YXRpYyB2b2lkIHVkY19zZXRfYWRkcmVzcyhzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiwgdW5zaWduZWQgY2hhciBhZGRyZXNzKQoreworCURFQlVHX0VQMCgiJXM6ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGFkZHJlc3MpOworCS8qIGMuZi4gMTUuMS4yLjIgVGFibGUgMTUtNCBhZGRyZXNzIHdpbGwgYmUgdXNlZCBhZnRlciBEQVRBX0VORCBpcyBzZXQgKi8KKwlkZXYtPnVzYl9hZGRyZXNzID0gYWRkcmVzczsKKwl1c2Jfc2V0KChhZGRyZXNzICYgVVNCX0ZBX0ZVTkNUSU9OX0FERFIpLCBVU0JfRkEpOworCXVzYl9zZXQoVVNCX0ZBX0FERFJfVVBEQVRFIHwgKGFkZHJlc3MgJiBVU0JfRkFfRlVOQ1RJT05fQUREUiksIFVTQl9GQSk7CisJLyogdXNiX3JlYWQoVVNCX0ZBKTsgKi8KK30KKworLyoKKyAqIERBVEFfU1RBVEVfUkVDViAoT1VUX1BLVF9SRFkpCisgKiAgICAgIC0gaWYgZXJyb3IKKyAqICAgICAgICAgICAgICBzZXQgRVAwX0NMUl9PVVQgfCBFUDBfREFUQV9FTkQgfCBFUDBfU0VORF9TVEFMTCBiaXRzCisgKiAgICAgIC0gZWxzZQorICogICAgICAgICAgICAgIHNldCBFUDBfQ0xSX09VVCBiaXQKKyAJCQkJaWYgbGFzdCBzZXQgRVAwX0RBVEFfRU5EIGJpdAorICovCitzdGF0aWMgdm9pZCBsaDdhNDB4X2VwMF9vdXQoc3RydWN0IGxoN2E0MHhfdWRjICpkZXYsIHUzMiBjc3IpCit7CisJc3RydWN0IGxoN2E0MHhfcmVxdWVzdCAqcmVxOworCXN0cnVjdCBsaDdhNDB4X2VwICplcCA9ICZkZXYtPmVwWzBdOworCWludCByZXQ7CisKKwlERUJVR19FUDAoIiVzOiAleFxuIiwgX19GVU5DVElPTl9fLCBjc3IpOworCisJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCisJCXJlcSA9IDA7CisJZWxzZQorCQlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0LCBxdWV1ZSk7CisKKwlpZiAocmVxKSB7CisKKwkJaWYgKHJlcS0+cmVxLmxlbmd0aCA9PSAwKSB7CisJCQlERUJVR19FUDAoIlpFUk8gTEVOR1RIIE9VVCFcbiIpOworCQkJdXNiX3NldCgoRVAwX0NMUl9PVVQgfCBFUDBfREFUQV9FTkQpLCBVU0JfRVAwX0NTUik7CisJCQlkZXYtPmVwMHN0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJCQlyZXR1cm47CisJCX0KKwkJcmV0ID0gcmVhZF9maWZvX2VwMChlcCwgcmVxKTsKKwkJaWYgKHJldCkgeworCQkJLyogRG9uZSEgKi8KKwkJCURFQlVHX0VQMCgiJXM6IGZpbmlzaGVkLCB3YWl0aW5nIGZvciBzdGF0dXNcbiIsCisJCQkJICBfX0ZVTkNUSU9OX18pOworCisJCQl1c2Jfc2V0KChFUDBfQ0xSX09VVCB8IEVQMF9EQVRBX0VORCksIFVTQl9FUDBfQ1NSKTsKKwkJCWRldi0+ZXAwc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwkJfSBlbHNlIHsKKwkJCS8qIE5vdCBkb25lIHlldC4uICovCisJCQlERUJVR19FUDAoIiVzOiBub3QgZmluaXNoZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQl1c2Jfc2V0KEVQMF9DTFJfT1VULCBVU0JfRVAwX0NTUik7CisJCX0KKwl9IGVsc2UgeworCQlERUJVR19FUDAoIk5PIFJFUT8/IVxuIik7CisJfQorfQorCisvKgorICogREFUQV9TVEFURV9YTUlUCisgKi8KK3N0YXRpYyBpbnQgbGg3YTQweF9lcDBfaW4oc3RydWN0IGxoN2E0MHhfdWRjICpkZXYsIHUzMiBjc3IpCit7CisJc3RydWN0IGxoN2E0MHhfcmVxdWVzdCAqcmVxOworCXN0cnVjdCBsaDdhNDB4X2VwICplcCA9ICZkZXYtPmVwWzBdOworCWludCByZXQsIG5lZWRfemxwID0gMDsKKworCURFQlVHX0VQMCgiJXM6ICV4XG4iLCBfX0ZVTkNUSU9OX18sIGNzcik7CisKKwlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkKKwkJcmVxID0gMDsKKwllbHNlCisJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBsaDdhNDB4X3JlcXVlc3QsIHF1ZXVlKTsKKworCWlmICghcmVxKSB7CisJCURFQlVHX0VQMCgiJXM6IE5VTEwgUkVRXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocmVxLT5yZXEubGVuZ3RoID09IDApIHsKKworCQl1c2Jfc2V0KChFUDBfSU5fUEtUX1JEWSB8IEVQMF9EQVRBX0VORCksIFVTQl9FUDBfQ1NSKTsKKwkJZGV2LT5lcDBzdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAocmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsID09IEVQMF9QQUNLRVRTSVpFKSB7CisJCS8qIE5leHQgd3JpdGUgd2lsbCBlbmQgd2l0aCB0aGUgcGFja2V0IHNpemUsICovCisJCS8qIHNvIHdlIG5lZWQgWmVyby1sZW5ndGgtcGFja2V0ICovCisJCW5lZWRfemxwID0gMTsKKwl9CisKKwlyZXQgPSB3cml0ZV9maWZvX2VwMChlcCwgcmVxKTsKKworCWlmIChyZXQgPT0gMSAmJiAhbmVlZF96bHApIHsKKwkJLyogTGFzdCBwYWNrZXQgKi8KKwkJREVCVUdfRVAwKCIlczogZmluaXNoZWQsIHdhaXRpbmcgZm9yIHN0YXR1c1xuIiwgX19GVU5DVElPTl9fKTsKKworCQl1c2Jfc2V0KChFUDBfSU5fUEtUX1JEWSB8IEVQMF9EQVRBX0VORCksIFVTQl9FUDBfQ1NSKTsKKwkJZGV2LT5lcDBzdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCX0gZWxzZSB7CisJCURFQlVHX0VQMCgiJXM6IG5vdCBmaW5pc2hlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJdXNiX3NldChFUDBfSU5fUEtUX1JEWSwgVVNCX0VQMF9DU1IpOworCX0KKworCWlmIChuZWVkX3pscCkgeworCQlERUJVR19FUDAoIiVzOiBOZWVkIFpMUCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXVzYl9zZXQoRVAwX0lOX1BLVF9SRFksIFVTQl9FUDBfQ1NSKTsKKwkJZGV2LT5lcDBzdGF0ZSA9IERBVEFfU1RBVEVfTkVFRF9aTFA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbGg3YTQweF9oYW5kbGVfZ2V0X3N0YXR1cyhzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiwKKwkJCQkgICAgIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpCit7CisJc3RydWN0IGxoN2E0MHhfZXAgKmVwMCA9ICZkZXYtPmVwWzBdOworCXN0cnVjdCBsaDdhNDB4X2VwICpxZXA7CisJaW50IHJlcXR5cGUgPSAoY3RybC0+YlJlcXVlc3RUeXBlICYgVVNCX1JFQ0lQX01BU0spOworCXUxNiB2YWwgPSAwOworCisJaWYgKHJlcXR5cGUgPT0gVVNCX1JFQ0lQX0lOVEVSRkFDRSkgeworCQkvKiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuCisJCSAqIEFuZCBhY2NvcmRpbmcgdG8gdGhlIFVTQiBzcGVjLCB0aGlzIG9uZSBkb2VzIG5vdGhpbmcuLgorCQkgKiBKdXN0IHJldHVybiAwCisJCSAqLworCQlERUJVR19TRVRVUCgiR0VUX1NUQVRVUzogVVNCX1JFQ0lQX0lOVEVSRkFDRVxuIik7CisJfSBlbHNlIGlmIChyZXF0eXBlID09IFVTQl9SRUNJUF9ERVZJQ0UpIHsKKwkJREVCVUdfU0VUVVAoIkdFVF9TVEFUVVM6IFVTQl9SRUNJUF9ERVZJQ0VcbiIpOworCQl2YWwgfD0gKDEgPDwgMCk7CS8qIFNlbGYgcG93ZXJlZCAqLworCQkvKnZhbCB8PSAoMTw8MSk7ICovLyogUmVtb3RlIHdha2V1cCAqLworCX0gZWxzZSBpZiAocmVxdHlwZSA9PSBVU0JfUkVDSVBfRU5EUE9JTlQpIHsKKwkJaW50IGVwX251bSA9IChjdHJsLT53SW5kZXggJiB+VVNCX0RJUl9JTik7CisKKwkJREVCVUdfU0VUVVAKKwkJICAgICgiR0VUX1NUQVRVUzogVVNCX1JFQ0lQX0VORFBPSU5UICglZCksIGN0cmwtPndMZW5ndGggPSAlZFxuIiwKKwkJICAgICBlcF9udW0sIGN0cmwtPndMZW5ndGgpOworCisJCWlmIChjdHJsLT53TGVuZ3RoID4gMiB8fCBlcF9udW0gPiAzKQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJCXFlcCA9ICZkZXYtPmVwW2VwX251bV07CisJCWlmIChlcF9pc19pbihxZXApICE9ICgoY3RybC0+d0luZGV4ICYgVVNCX0RJUl9JTikgPyAxIDogMCkKKwkJICAgICYmIGVwX2luZGV4KHFlcCkgIT0gMCkgeworCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQl9CisKKwkJdXNiX3NldF9pbmRleChlcF9pbmRleChxZXApKTsKKworCQkvKiBSZXR1cm4gc3RhdHVzIG9uIG5leHQgSU4gdG9rZW4gKi8KKwkJc3dpdGNoIChxZXAtPmVwX3R5cGUpIHsKKwkJY2FzZSBlcF9jb250cm9sOgorCQkJdmFsID0KKwkJCSAgICAodXNiX3JlYWQocWVwLT5jc3IxKSAmIEVQMF9TRU5EX1NUQUxMKSA9PQorCQkJICAgIEVQMF9TRU5EX1NUQUxMOworCQkJYnJlYWs7CisJCWNhc2UgZXBfYnVsa19pbjoKKwkJY2FzZSBlcF9pbnRlcnJ1cHQ6CisJCQl2YWwgPQorCQkJICAgICh1c2JfcmVhZChxZXAtPmNzcjEpICYgVVNCX0lOX0NTUjFfU0VORF9TVEFMTCkgPT0KKwkJCSAgICBVU0JfSU5fQ1NSMV9TRU5EX1NUQUxMOworCQkJYnJlYWs7CisJCWNhc2UgZXBfYnVsa19vdXQ6CisJCQl2YWwgPQorCQkJICAgICh1c2JfcmVhZChxZXAtPmNzcjEpICYgVVNCX09VVF9DU1IxX1NFTkRfU1RBTEwpID09CisJCQkgICAgVVNCX09VVF9DU1IxX1NFTkRfU1RBTEw7CisJCQlicmVhazsKKwkJfQorCisJCS8qIEJhY2sgdG8gRVAwIGluZGV4ICovCisJCXVzYl9zZXRfaW5kZXgoMCk7CisKKwkJREVCVUdfU0VUVVAoIkdFVF9TVEFUVVMsIGVwOiAlZCAoJXgpLCB2YWwgPSAlZFxuIiwgZXBfbnVtLAorCQkJICAgIGN0cmwtPndJbmRleCwgdmFsKTsKKwl9IGVsc2UgeworCQlERUJVR19TRVRVUCgiVW5rbm93biBSRVEgVFlQRTogJWRcbiIsIHJlcXR5cGUpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJLyogQ2xlYXIgIm91dCBwYWNrZXQgcmVhZHkiICovCisJdXNiX3NldCgoRVAwX0NMUl9PVVQpLCBVU0JfRVAwX0NTUik7CisJLyogUHV0IHN0YXR1cyB0byBGSUZPICovCisJbGg3YTQweF9maWZvX3dyaXRlKGVwMCwgKHU4ICopICYgdmFsLCBzaXplb2YodmFsKSk7CisJLyogSXNzdWUgIkluIHBhY2tldCByZWFkeSIgKi8KKwl1c2Jfc2V0KChFUDBfSU5fUEtUX1JEWSB8IEVQMF9EQVRBX0VORCksIFVTQl9FUDBfQ1NSKTsKKworCXJldHVybiAwOworfQorCisvKgorICogV0FJVF9GT1JfU0VUVVAgKE9VVF9QS1RfUkRZKQorICogICAgICAtIHJlYWQgZGF0YSBwYWNrZXQgZnJvbSBFUDAgRklGTworICogICAgICAtIGRlY29kZSBjb21tYW5kCisgKiAgICAgIC0gaWYgZXJyb3IKKyAqICAgICAgICAgICAgICBzZXQgRVAwX0NMUl9PVVQgfCBFUDBfREFUQV9FTkQgfCBFUDBfU0VORF9TVEFMTCBiaXRzCisgKiAgICAgIC0gZWxzZQorICogICAgICAgICAgICAgIHNldCBFUDBfQ0xSX09VVCB8IEVQMF9EQVRBX0VORCBiaXRzCisgKi8KK3N0YXRpYyB2b2lkIGxoN2E0MHhfZXAwX3NldHVwKHN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2LCB1MzIgY3NyKQoreworCXN0cnVjdCBsaDdhNDB4X2VwICplcCA9ICZkZXYtPmVwWzBdOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgY3RybDsKKwlpbnQgaSwgYnl0ZXMsIGlzX2luOworCisJREVCVUdfU0VUVVAoIiVzOiAleFxuIiwgX19GVU5DVElPTl9fLCBjc3IpOworCisJLyogTnVrZSBhbGwgcHJldmlvdXMgdHJhbnNmZXJzICovCisJbnVrZShlcCwgLUVQUk9UTyk7CisKKwkvKiByZWFkIGNvbnRyb2wgcmVxIGZyb20gZmlmbyAoOCBieXRlcykgKi8KKwlieXRlcyA9IGxoN2E0MHhfZmlmb19yZWFkKGVwLCAodW5zaWduZWQgY2hhciAqKSZjdHJsLCA4KTsKKworCURFQlVHX1NFVFVQKCJSZWFkIENUUkwgUkVRICVkIGJ5dGVzXG4iLCBieXRlcyk7CisJREVCVUdfU0VUVVAoIkNUUkwuYlJlcXVlc3RUeXBlID0gJWQgKGlzX2luICVkKVxuIiwgY3RybC5iUmVxdWVzdFR5cGUsCisJCSAgICBjdHJsLmJSZXF1ZXN0VHlwZSA9PSBVU0JfRElSX0lOKTsKKwlERUJVR19TRVRVUCgiQ1RSTC5iUmVxdWVzdCA9ICVkXG4iLCBjdHJsLmJSZXF1ZXN0KTsKKwlERUJVR19TRVRVUCgiQ1RSTC53TGVuZ3RoID0gJWRcbiIsIGN0cmwud0xlbmd0aCk7CisJREVCVUdfU0VUVVAoIkNUUkwud1ZhbHVlID0gJWQgKCVkKVxuIiwgY3RybC53VmFsdWUsIGN0cmwud1ZhbHVlID4+IDgpOworCURFQlVHX1NFVFVQKCJDVFJMLndJbmRleCA9ICVkXG4iLCBjdHJsLndJbmRleCk7CisKKwkvKiBTZXQgZGlyZWN0aW9uIG9mIEVQMCAqLworCWlmIChsaWtlbHkoY3RybC5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKSkgeworCQllcC0+YkVuZHBvaW50QWRkcmVzcyB8PSBVU0JfRElSX0lOOworCQlpc19pbiA9IDE7CisJfSBlbHNlIHsKKwkJZXAtPmJFbmRwb2ludEFkZHJlc3MgJj0gflVTQl9ESVJfSU47CisJCWlzX2luID0gMDsKKwl9CisKKwlkZXYtPnJlcV9wZW5kaW5nID0gMTsKKworCS8qIEhhbmRsZSBzb21lIFNFVFVQIHBhY2tldHMgb3Vyc2VsdmVzICovCisJc3dpdGNoIChjdHJsLmJSZXF1ZXN0KSB7CisJY2FzZSBVU0JfUkVRX1NFVF9BRERSRVNTOgorCQlpZiAoY3RybC5iUmVxdWVzdFR5cGUgIT0gKFVTQl9UWVBFX1NUQU5EQVJEIHwgVVNCX1JFQ0lQX0RFVklDRSkpCisJCQlicmVhazsKKworCQlERUJVR19TRVRVUCgiVVNCX1JFUV9TRVRfQUREUkVTUyAoJWQpXG4iLCBjdHJsLndWYWx1ZSk7CisJCXVkY19zZXRfYWRkcmVzcyhkZXYsIGN0cmwud1ZhbHVlKTsKKwkJdXNiX3NldCgoRVAwX0NMUl9PVVQgfCBFUDBfREFUQV9FTkQpLCBVU0JfRVAwX0NTUik7CisJCXJldHVybjsKKworCWNhc2UgVVNCX1JFUV9HRVRfU1RBVFVTOnsKKwkJCWlmIChsaDdhNDB4X2hhbmRsZV9nZXRfc3RhdHVzKGRldiwgJmN0cmwpID09IDApCisJCQkJcmV0dXJuOworCisJY2FzZSBVU0JfUkVRX0NMRUFSX0ZFQVRVUkU6CisJY2FzZSBVU0JfUkVRX1NFVF9GRUFUVVJFOgorCQkJaWYgKGN0cmwuYlJlcXVlc3RUeXBlID09IFVTQl9SRUNJUF9FTkRQT0lOVCkgeworCQkJCXN0cnVjdCBsaDdhNDB4X2VwICpxZXA7CisJCQkJaW50IGVwX251bSA9IChjdHJsLndJbmRleCAmIDB4MGYpOworCisJCQkJLyogU3VwcG9ydCBvbmx5IEhBTFQgZmVhdHVyZSAqLworCQkJCWlmIChjdHJsLndWYWx1ZSAhPSAwIHx8IGN0cmwud0xlbmd0aCAhPSAwCisJCQkJICAgIHx8IGVwX251bSA+IDMgfHwgZXBfbnVtIDwgMSkKKwkJCQkJYnJlYWs7CisKKwkJCQlxZXAgPSAmZGV2LT5lcFtlcF9udW1dOworCQkJCWlmIChjdHJsLmJSZXF1ZXN0ID09IFVTQl9SRVFfU0VUX0ZFQVRVUkUpIHsKKwkJCQkJREVCVUdfU0VUVVAoIlNFVF9GRUFUVVJFICglZClcbiIsCisJCQkJCQkgICAgZXBfbnVtKTsKKwkJCQkJbGg3YTQweF9zZXRfaGFsdCgmcWVwLT5lcCwgMSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJREVCVUdfU0VUVVAoIkNMUl9GRUFUVVJFICglZClcbiIsCisJCQkJCQkgICAgZXBfbnVtKTsKKwkJCQkJbGg3YTQweF9zZXRfaGFsdCgmcWVwLT5lcCwgMCk7CisJCQkJfQorCQkJCXVzYl9zZXRfaW5kZXgoMCk7CisKKwkJCQkvKiBSZXBseSB3aXRoIGEgWkxQIG9uIG5leHQgSU4gdG9rZW4gKi8KKwkJCQl1c2Jfc2V0KChFUDBfQ0xSX09VVCB8IEVQMF9EQVRBX0VORCksCisJCQkJCVVTQl9FUDBfQ1NSKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlicmVhazsKKwkJfQorCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKGxpa2VseShkZXYtPmRyaXZlcikpIHsKKwkJLyogZGV2aWNlLTItaG9zdCAoSU4pIG9yIG5vIGRhdGEgc2V0dXAgY29tbWFuZCwgcHJvY2VzcyBpbW1lZGlhdGVseSAqLworCQlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsKKwkJaSA9IGRldi0+ZHJpdmVyLT5zZXR1cCgmZGV2LT5nYWRnZXQsICZjdHJsKTsKKwkJc3Bpbl9sb2NrKCZkZXYtPmxvY2spOworCisJCWlmIChpIDwgMCkgeworCQkJLyogc2V0dXAgcHJvY2Vzc2luZyBmYWlsZWQsIGZvcmNlIHN0YWxsICovCisJCQlERUJVR19TRVRVUAorCQkJICAgICgiICAtLT4gRVJST1I6IGdhZGdldCBzZXR1cCBGQUlMRUQgKHN0YWxsaW5nKSwgc2V0dXAgcmV0dXJuZWQgJWRcbiIsCisJCQkgICAgIGkpOworCQkJdXNiX3NldF9pbmRleCgwKTsKKwkJCXVzYl9zZXQoKEVQMF9DTFJfT1VUIHwgRVAwX0RBVEFfRU5EIHwgRVAwX1NFTkRfU1RBTEwpLAorCQkJCVVTQl9FUDBfQ1NSKTsKKworCQkJLyogZXAtPnN0b3BwZWQgPSAxOyAqLworCQkJZGV2LT5lcDBzdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCQl9CisJfQorfQorCisvKgorICogREFUQV9TVEFURV9ORUVEX1pMUAorICovCitzdGF0aWMgdm9pZCBsaDdhNDB4X2VwMF9pbl96bHAoc3RydWN0IGxoN2E0MHhfdWRjICpkZXYsIHUzMiBjc3IpCit7CisJREVCVUdfRVAwKCIlczogJXhcbiIsIF9fRlVOQ1RJT05fXywgY3NyKTsKKworCS8qIGMuZi4gVGFibGUgMTUtMTQgKi8KKwl1c2Jfc2V0KChFUDBfSU5fUEtUX1JEWSB8IEVQMF9EQVRBX0VORCksIFVTQl9FUDBfQ1NSKTsKKwlkZXYtPmVwMHN0YXRlID0gV0FJVF9GT1JfU0VUVVA7Cit9CisKKy8qCisgKiBoYW5kbGUgZXAwIGludGVycnVwdAorICovCitzdGF0aWMgdm9pZCBsaDdhNDB4X2hhbmRsZV9lcDAoc3RydWN0IGxoN2E0MHhfdWRjICpkZXYsIHUzMiBpbnRyKQoreworCXN0cnVjdCBsaDdhNDB4X2VwICplcCA9ICZkZXYtPmVwWzBdOworCXUzMiBjc3I7CisKKwkvKiBTZXQgaW5kZXggMCAqLworCXVzYl9zZXRfaW5kZXgoMCk7CisgCWNzciA9IHVzYl9yZWFkKFVTQl9FUDBfQ1NSKTsKKworCURFQlVHX0VQMCgiJXM6IGNzciA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIGNzcik7CisKKwkvKgorCSAqIEZvciBvdmVydmlldyBvZiB3aGF0IHdlIHNob3VsZCBiZSBkb2luZyBzZWUgYy5mLiBDaGFwdGVyIDE4LjEuMi40CisJICogV2Ugd2lsbCBmb2xsb3cgdGhhdCBvdXRsaW5lIGhlcmUgbW9kaWZpZWQgYnkgb3VyIG93biBnbG9iYWwgc3RhdGUKKwkgKiBpbmRpY2F0aW9uIHdoaWNoIHByb3ZpZGVzIGhpbnRzIGFzIHRvIHdoYXQgd2UgdGhpbmsgc2hvdWxkIGJlCisJICogaGFwcGVuaW5nLi4KKwkgKi8KKworCS8qCisJICogaWYgU0VOVF9TVEFMTCBpcyBzZXQKKwkgKiAgICAgIC0gY2xlYXIgdGhlIFNFTlRfU1RBTEwgYml0CisJICovCisJaWYgKGNzciAmIEVQMF9TRU5UX1NUQUxMKSB7CisJCURFQlVHX0VQMCgiJXM6IEVQMF9TRU5UX1NUQUxMIGlzIHNldDogJXhcbiIsIF9fRlVOQ1RJT05fXywgY3NyKTsKKwkJdXNiX2NsZWFyKChFUDBfU0VOVF9TVEFMTCB8IEVQMF9TRU5EX1NUQUxMKSwgVVNCX0VQMF9DU1IpOworCQludWtlKGVwLCAtRUNPTk5BQk9SVEVEKTsKKwkJZGV2LT5lcDBzdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBpZiBhIHRyYW5zZmVyIGlzIGluIHByb2dyZXNzICYmIElOX1BLVF9SRFkgYW5kIE9VVF9QS1RfUkRZIGFyZSBjbGVhcgorCSAqICAgICAgLSBmaWxsIEVQMCBGSUZPCisJICogICAgICAtIGlmIGxhc3QgcGFja2V0CisJICogICAgICAtICAgICAgIHNldCBJTl9QS1RfUkRZIHwgREFUQV9FTkQKKwkgKiAgICAgIC0gZWxzZQorCSAqICAgICAgICAgICAgICBzZXQgSU5fUEtUX1JEWQorCSAqLworCWlmICghKGNzciAmIChFUDBfSU5fUEtUX1JEWSB8IEVQMF9PVVRfUEtUX1JEWSkpKSB7CisJCURFQlVHX0VQMCgiJXM6IElOX1BLVF9SRFkgYW5kIE9VVF9QS1RfUkRZIGFyZSBjbGVhclxuIiwKKwkJCSAgX19GVU5DVElPTl9fKTsKKworCQlzd2l0Y2ggKGRldi0+ZXAwc3RhdGUpIHsKKwkJY2FzZSBEQVRBX1NUQVRFX1hNSVQ6CisJCQlERUJVR19FUDAoImNvbnRpbnVlIHdpdGggREFUQV9TVEFURV9YTUlUXG4iKTsKKwkJCWxoN2E0MHhfZXAwX2luKGRldiwgY3NyKTsKKwkJCXJldHVybjsKKwkJY2FzZSBEQVRBX1NUQVRFX05FRURfWkxQOgorCQkJREVCVUdfRVAwKCJjb250aW51ZSB3aXRoIERBVEFfU1RBVEVfTkVFRF9aTFBcbiIpOworCQkJbGg3YTQweF9lcDBfaW5femxwKGRldiwgY3NyKTsKKwkJCXJldHVybjsKKwkJZGVmYXVsdDoKKwkJCS8qIFN0YWxsPyAqLworCQkJREVCVUdfRVAwKCJPZGQgc3RhdGUhISBzdGF0ZSA9ICVzXG4iLAorCQkJCSAgc3RhdGVfbmFtZXNbZGV2LT5lcDBzdGF0ZV0pOworCQkJZGV2LT5lcDBzdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCQkJLyogbnVrZShlcCwgMCk7ICovCisJCQkvKiB1c2Jfc2V0KEVQMF9TRU5EX1NUQUxMLCBlcC0+Y3NyMSk7ICovCisJCQlicmVhazsKKwkJfQorCX0KKworCS8qCisJICogaWYgU0VUVVBfRU5EIGlzIHNldAorCSAqICAgICAgLSBhYm9ydCB0aGUgbGFzdCB0cmFuc2ZlcgorCSAqICAgICAgLSBzZXQgU0VSVklDRURfU0VUVVBfRU5EX0JJVAorCSAqLworCWlmIChjc3IgJiBFUDBfU0VUVVBfRU5EKSB7CisJCURFQlVHX0VQMCgiJXM6IEVQMF9TRVRVUF9FTkQgaXMgc2V0OiAleFxuIiwgX19GVU5DVElPTl9fLCBjc3IpOworCisJCXVzYl9zZXQoRVAwX0NMUl9TRVRVUF9FTkQsIFVTQl9FUDBfQ1NSKTsKKworCQludWtlKGVwLCAwKTsKKwkJZGV2LT5lcDBzdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCX0KKworCS8qCisJICogaWYgRVAwX09VVF9QS1RfUkRZIGlzIHNldAorCSAqICAgICAgLSByZWFkIGRhdGEgcGFja2V0IGZyb20gRVAwIEZJRk8KKwkgKiAgICAgIC0gZGVjb2RlIGNvbW1hbmQKKwkgKiAgICAgIC0gaWYgZXJyb3IKKwkgKiAgICAgICAgICAgICAgc2V0IFNFUlZJQ0VEX09VVF9QS1RfUkRZIHwgREFUQV9FTkQgYml0cyB8IFNFTkRfU1RBTEwKKwkgKiAgICAgIC0gZWxzZQorCSAqICAgICAgICAgICAgICBzZXQgU0VSVklDRURfT1VUX1BLVF9SRFkgfCBEQVRBX0VORCBiaXRzCisJICovCisJaWYgKGNzciAmIEVQMF9PVVRfUEtUX1JEWSkgeworCisJCURFQlVHX0VQMCgiJXM6IEVQMF9PVVRfUEtUX1JEWSBpcyBzZXQ6ICV4XG4iLCBfX0ZVTkNUSU9OX18sCisJCQkgIGNzcik7CisKKwkJc3dpdGNoIChkZXYtPmVwMHN0YXRlKSB7CisJCWNhc2UgV0FJVF9GT1JfU0VUVVA6CisJCQlERUJVR19FUDAoIldBSVRfRk9SX1NFVFVQXG4iKTsKKwkJCWxoN2E0MHhfZXAwX3NldHVwKGRldiwgY3NyKTsKKwkJCWJyZWFrOworCisJCWNhc2UgREFUQV9TVEFURV9SRUNWOgorCQkJREVCVUdfRVAwKCJEQVRBX1NUQVRFX1JFQ1ZcbiIpOworCQkJbGg3YTQweF9lcDBfb3V0KGRldiwgY3NyKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkvKiBzZW5kIHN0YWxsPyAqLworCQkJREVCVUdfRVAwKCJzdHJhbmdlIHN0YXRlISEgMi4gc2VuZCBzdGFsbD8gc3RhdGUgPSAlZFxuIiwKKwkJCQkgIGRldi0+ZXAwc3RhdGUpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxoN2E0MHhfZXAwX2tpY2soc3RydWN0IGxoN2E0MHhfdWRjICpkZXYsIHN0cnVjdCBsaDdhNDB4X2VwICplcCkKK3sKKwl1MzIgY3NyOworCisJdXNiX3NldF9pbmRleCgwKTsKKwljc3IgPSB1c2JfcmVhZChVU0JfRVAwX0NTUik7CisKKwlERUJVR19FUDAoIiVzOiAleFxuIiwgX19GVU5DVElPTl9fLCBjc3IpOworCisJLyogQ2xlYXIgIm91dCBwYWNrZXQgcmVhZHkiICovCisJdXNiX3NldChFUDBfQ0xSX09VVCwgVVNCX0VQMF9DU1IpOworCisJaWYgKGVwX2lzX2luKGVwKSkgeworCQlkZXYtPmVwMHN0YXRlID0gREFUQV9TVEFURV9YTUlUOworCQlsaDdhNDB4X2VwMF9pbihkZXYsIGNzcik7CisJfSBlbHNlIHsKKwkJZGV2LT5lcDBzdGF0ZSA9IERBVEFfU1RBVEVfUkVDVjsKKwkJbGg3YTQweF9lcDBfb3V0KGRldiwgY3NyKTsKKwl9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogCWRldmljZS1zY29wZWQgcGFydHMgb2YgdGhlIGFwaSB0byB0aGUgdXNiIGNvbnRyb2xsZXIgaGFyZHdhcmUKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0YXRpYyBpbnQgbGg3YTQweF91ZGNfZ2V0X2ZyYW1lKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0KQoreworCXUzMiBmcmFtZTEgPSB1c2JfcmVhZChVU0JfRlJNX05VTTEpOwkvKiBMZWFzdCBzaWduaWZpY2FudCA4IGJpdHMgKi8KKwl1MzIgZnJhbWUyID0gdXNiX3JlYWQoVVNCX0ZSTV9OVU0yKTsJLyogTW9zdCBzaWduaWZpY2FudCAzIGJpdHMgKi8KKwlERUJVRygiJXMsICVwXG4iLCBfX0ZVTkNUSU9OX18sIF9nYWRnZXQpOworCXJldHVybiAoKGZyYW1lMiAmIDB4MDcpIDw8IDgpIHwgKGZyYW1lMSAmIDB4ZmYpOworfQorCitzdGF0aWMgaW50IGxoN2E0MHhfdWRjX3dha2V1cChzdHJ1Y3QgdXNiX2dhZGdldCAqX2dhZGdldCkKK3sKKwkvKiBob3N0IG1heSBub3QgaGF2ZSBlbmFibGVkIHJlbW90ZSB3YWtldXAgKi8KKwkvKmlmICgoVURDQ1MwICYgVURDQ1MwX0RSV0YpID09IDApCisJICAgcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CisJICAgdWRjX3NldF9tYXNrX1VEQ0NSKFVEQ0NSX1JTTSk7ICovCisJcmV0dXJuIC1FTk9UU1VQUDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZ2FkZ2V0X29wcyBsaDdhNDB4X3VkY19vcHMgPSB7CisJLmdldF9mcmFtZSA9IGxoN2E0MHhfdWRjX2dldF9mcmFtZSwKKwkud2FrZXVwID0gbGg3YTQweF91ZGNfd2FrZXVwLAorCS8qIGN1cnJlbnQgdmVyc2lvbnMgbXVzdCBhbHdheXMgYmUgc2VsZi1wb3dlcmVkICovCit9OworCitzdGF0aWMgdm9pZCBub3BfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJREVCVUcoIiVzICVzXG4iLCBfX0ZVTkNUSU9OX18sIGRldi0+YnVzX2lkKTsKK30KKworc3RhdGljIHN0cnVjdCBsaDdhNDB4X3VkYyBtZW1vcnkgPSB7CisJLnVzYl9hZGRyZXNzID0gMCwKKworCS5nYWRnZXQgPSB7CisJCSAgIC5vcHMgPSAmbGg3YTQweF91ZGNfb3BzLAorCQkgICAuZXAwID0gJm1lbW9yeS5lcFswXS5lcCwKKwkJICAgLm5hbWUgPSBkcml2ZXJfbmFtZSwKKwkJICAgLmRldiA9IHsKKwkJCSAgIC5idXNfaWQgPSAiZ2FkZ2V0IiwKKwkJCSAgIC5yZWxlYXNlID0gbm9wX3JlbGVhc2UsCisJCQkgICB9LAorCQkgICB9LAorCisJLyogY29udHJvbCBlbmRwb2ludCAqLworCS5lcFswXSA9IHsKKwkJICAuZXAgPSB7CisJCQkgLm5hbWUgPSBlcDBuYW1lLAorCQkJIC5vcHMgPSAmbGg3YTQweF9lcF9vcHMsCisJCQkgLm1heHBhY2tldCA9IEVQMF9QQUNLRVRTSVpFLAorCQkJIH0sCisJCSAgLmRldiA9ICZtZW1vcnksCisKKwkJICAuYkVuZHBvaW50QWRkcmVzcyA9IDAsCisJCSAgLmJtQXR0cmlidXRlcyA9IDAsCisKKwkJICAuZXBfdHlwZSA9IGVwX2NvbnRyb2wsCisJCSAgLmZpZm8gPSBpb19wMnYoVVNCX0VQMF9GSUZPKSwKKwkJICAuY3NyMSA9IFVTQl9FUDBfQ1NSLAorCQkgIC5jc3IyID0gVVNCX0VQMF9DU1IsCisJCSAgfSwKKworCS8qIGZpcnN0IGdyb3VwIG9mIGVuZHBvaW50cyAqLworCS5lcFsxXSA9IHsKKwkJICAuZXAgPSB7CisJCQkgLm5hbWUgPSAiZXAxaW4tYnVsayIsCisJCQkgLm9wcyA9ICZsaDdhNDB4X2VwX29wcywKKwkJCSAubWF4cGFja2V0ID0gNjQsCisJCQkgfSwKKwkJICAuZGV2ID0gJm1lbW9yeSwKKworCQkgIC5iRW5kcG9pbnRBZGRyZXNzID0gVVNCX0RJUl9JTiB8IDEsCisJCSAgLmJtQXR0cmlidXRlcyA9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisKKwkJICAuZXBfdHlwZSA9IGVwX2J1bGtfaW4sCisJCSAgLmZpZm8gPSBpb19wMnYoVVNCX0VQMV9GSUZPKSwKKwkJICAuY3NyMSA9IFVTQl9JTl9DU1IxLAorCQkgIC5jc3IyID0gVVNCX0lOX0NTUjIsCisJCSAgfSwKKworCS5lcFsyXSA9IHsKKwkJICAuZXAgPSB7CisJCQkgLm5hbWUgPSAiZXAyb3V0LWJ1bGsiLAorCQkJIC5vcHMgPSAmbGg3YTQweF9lcF9vcHMsCisJCQkgLm1heHBhY2tldCA9IDY0LAorCQkJIH0sCisJCSAgLmRldiA9ICZtZW1vcnksCisKKwkJICAuYkVuZHBvaW50QWRkcmVzcyA9IDIsCisJCSAgLmJtQXR0cmlidXRlcyA9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisKKwkJICAuZXBfdHlwZSA9IGVwX2J1bGtfb3V0LAorCQkgIC5maWZvID0gaW9fcDJ2KFVTQl9FUDJfRklGTyksCisJCSAgLmNzcjEgPSBVU0JfT1VUX0NTUjEsCisJCSAgLmNzcjIgPSBVU0JfT1VUX0NTUjIsCisJCSAgfSwKKworCS5lcFszXSA9IHsKKwkJICAuZXAgPSB7CisJCQkgLm5hbWUgPSAiZXAzaW4taW50IiwKKwkJCSAub3BzID0gJmxoN2E0MHhfZXBfb3BzLAorCQkJIC5tYXhwYWNrZXQgPSA2NCwKKwkJCSB9LAorCQkgIC5kZXYgPSAmbWVtb3J5LAorCisJCSAgLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOIHwgMywKKwkJICAuYm1BdHRyaWJ1dGVzID0gVVNCX0VORFBPSU5UX1hGRVJfSU5ULAorCisJCSAgLmVwX3R5cGUgPSBlcF9pbnRlcnJ1cHQsCisJCSAgLmZpZm8gPSBpb19wMnYoVVNCX0VQM19GSUZPKSwKKwkJICAuY3NyMSA9IFVTQl9JTl9DU1IxLAorCQkgIC5jc3IyID0gVVNCX0lOX0NTUjIsCisJCSAgfSwKK307CisKKy8qCisgKiAJcHJvYmUgLSBiaW5kcyB0byB0aGUgcGxhdGZvcm0gZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgbGg3YTQweF91ZGNfcHJvYmUoc3RydWN0IGRldmljZSAqX2RldikKK3sKKwlzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiA9ICZtZW1vcnk7CisJaW50IHJldHZhbDsKKworCURFQlVHKCIlczogJXBcbiIsIF9fRlVOQ1RJT05fXywgX2Rldik7CisKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5sb2NrKTsKKwlkZXYtPmRldiA9IF9kZXY7CisKKwlkZXZpY2VfaW5pdGlhbGl6ZSgmZGV2LT5nYWRnZXQuZGV2KTsKKwlkZXYtPmdhZGdldC5kZXYucGFyZW50ID0gX2RldjsKKworCXRoZV9jb250cm9sbGVyID0gZGV2OworCWRldl9zZXRfZHJ2ZGF0YShfZGV2LCBkZXYpOworCisJdWRjX2Rpc2FibGUoZGV2KTsKKwl1ZGNfcmVpbml0KGRldik7CisKKwkvKiBpcnEgc2V0dXAgYWZ0ZXIgb2xkIGhhcmR3YXJlIHN0YXRlIGlzIGNsZWFuZWQgdXAgKi8KKwlyZXR2YWwgPQorCSAgICByZXF1ZXN0X2lycShJUlFfVVNCSU5UUiwgbGg3YTQweF91ZGNfaXJxLCBTQV9JTlRFUlJVUFQsIGRyaXZlcl9uYW1lLAorCQkJZGV2KTsKKwlpZiAocmV0dmFsICE9IDApIHsKKwkJREVCVUcoS0VSTl9FUlIgIiVzOiBjYW4ndCBnZXQgaXJxICVpLCBlcnIgJWRcbiIsIGRyaXZlcl9uYW1lLAorCQkgICAgICBJUlFfVVNCSU5UUiwgcmV0dmFsKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwljcmVhdGVfcHJvY19maWxlcygpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBsaDdhNDB4X3VkY19yZW1vdmUoc3RydWN0IGRldmljZSAqX2RldikKK3sKKwlzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiA9IF9kZXYtPmRyaXZlcl9kYXRhOworCisJREVCVUcoIiVzOiAlcFxuIiwgX19GVU5DVElPTl9fLCBkZXYpOworCisJdWRjX2Rpc2FibGUoZGV2KTsKKwlyZW1vdmVfcHJvY19maWxlcygpOworCXVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoZGV2LT5kcml2ZXIpOworCisJZnJlZV9pcnEoSVJRX1VTQklOVFIsIGRldik7CisKKwlkZXZfc2V0X2RydmRhdGEoX2RldiwgMCk7CisKKwl0aGVfY29udHJvbGxlciA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHVkY19kcml2ZXIgPSB7CisJLm5hbWUgPSAoY2hhciAqKWRyaXZlcl9uYW1lLAorCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCisJLnByb2JlID0gbGg3YTQweF91ZGNfcHJvYmUsCisJLnJlbW92ZSA9IGxoN2E0MHhfdWRjX3JlbW92ZQorCSAgICAvKiBGSVhNRSBwb3dlciBtYW5hZ2VtZW50IHN1cHBvcnQgKi8KKwkgICAgLyogLnN1c3BlbmQgPSAuLi4gZGlzYWJsZSBVREMgKi8KKwkgICAgLyogLnJlc3VtZSA9IC4uLiByZS1lbmFibGUgVURDICovCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1ZGNfaW5pdCh2b2lkKQoreworCURFQlVHKCIlczogJXMgdmVyc2lvbiAlc1xuIiwgX19GVU5DVElPTl9fLCBkcml2ZXJfbmFtZSwgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnVkY19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdWRjX2V4aXQodm9pZCkKK3sKKwlkcml2ZXJfdW5yZWdpc3RlcigmdWRjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHVkY19pbml0KTsKK21vZHVsZV9leGl0KHVkY19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9BVVRIT1IoIk1pa2tvIExhaHRlZW5tYWtpLCBCbyBIZW5yaWtzZW4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJiNDU1YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5oCkBAIC0wLDAgKzEsMjYxIEBACisvKgorICogbGludXgvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmgKKyAqIFNoYXJwIExIN0E0MHggb24tY2hpcCBmdWxsIHNwZWVkIFVTQiBkZXZpY2UgY29udHJvbGxlcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWlra28gTGFodGVlbm1ha2ksIE5vcmRpYyBJRAorICogQ29weXJpZ2h0IChDKSAyMDA0IEJvIEhlbnJpa3NlbiwgTm9yZGljIElECisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fTEg3QTQwWF9IXworI2RlZmluZSBfX0xIN0E0MFhfSF8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlIDxsaW51eC91c2JfY2g5Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiX2dhZGdldC5oPgorCisvKgorICogTWVtb3J5IG1hcAorICovCisKKyNkZWZpbmUgVVNCX0ZBCQkJCQkweDgwMDAwMjAwCS8vIGZ1bmN0aW9uIGFkZHJlc3MgcmVnaXN0ZXIKKyNkZWZpbmUgVVNCX1BNCQkJCQkweDgwMDAwMjA0CS8vIHBvd2VyIG1hbmFnZW1lbnQgcmVnaXN0ZXIKKworI2RlZmluZSBVU0JfSU5fSU5UCQkJCTB4ODAwMDAyMDgJLy8gSU4gaW50ZXJydXB0IHJlZ2lzdGVyIGJhbmsgKEVQMC1FUDMpCisjZGVmaW5lIFVTQl9PVVRfSU5UCQkJCTB4ODAwMDAyMTAJLy8gT1VUIGludGVycnVwdCByZWdpc3RlciBiYW5rIChFUDIpCisjZGVmaW5lIFVTQl9JTlQJCQkJCTB4ODAwMDAyMTgJLy8gaW50ZXJydXB0IHJlZ2lzdGVyIGJhbmsKKworI2RlZmluZSBVU0JfSU5fSU5UX0VOCQkJMHg4MDAwMDIxQwkvLyBJTiBpbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyIGJhbmsKKyNkZWZpbmUgVVNCX09VVF9JTlRfRU4JCQkweDgwMDAwMjI0CS8vIE9VVCBpbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyIGJhbmsKKyNkZWZpbmUgVVNCX0lOVF9FTgkJCQkweDgwMDAwMjJDCS8vIFVTQiBpbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyIGJhbmsKKworI2RlZmluZSBVU0JfRlJNX05VTTEJCQkweDgwMDAwMjMwCS8vIEZyYW1lIG51bWJlcjEgcmVnaXN0ZXIKKyNkZWZpbmUgVVNCX0ZSTV9OVU0yCQkJMHg4MDAwMDIzNAkvLyBGcmFtZSBudW1iZXIyIHJlZ2lzdGVyCisjZGVmaW5lIFVTQl9JTkRFWAkJCQkweDgwMDAwMjM4CS8vIGluZGV4IHJlZ2lzdGVyCisKKyNkZWZpbmUgVVNCX0lOX01BWFAJCQkJMHg4MDAwMDI0MAkvLyBJTiBNQVhQIHJlZ2lzdGVyCisjZGVmaW5lIFVTQl9JTl9DU1IxCQkJCTB4ODAwMDAyNDQJLy8gSU4gQ1NSMSByZWdpc3Rlci9FUDAgQ1NSIHJlZ2lzdGVyCisjZGVmaW5lIFVTQl9FUDBfQ1NSCQkJCTB4ODAwMDAyNDQJLy8gSU4gQ1NSMSByZWdpc3Rlci9FUDAgQ1NSIHJlZ2lzdGVyCisjZGVmaW5lIFVTQl9JTl9DU1IyCQkJCTB4ODAwMDAyNDgJLy8gSU4gQ1NSMiByZWdpc3RlcgorI2RlZmluZSBVU0JfT1VUX01BWFAJCQkweDgwMDAwMjRDCS8vIE9VVCBNQVhQIHJlZ2lzdGVyCisKKyNkZWZpbmUgVVNCX09VVF9DU1IxCQkJMHg4MDAwMDI1MAkvLyBPVVQgQ1NSMSByZWdpc3RlcgorI2RlZmluZSBVU0JfT1VUX0NTUjIJCQkweDgwMDAwMjU0CS8vIE9VVCBDU1IyIHJlZ2lzdGVyCisjZGVmaW5lIFVTQl9PVVRfRklGT19XQzEJCTB4ODAwMDAyNTgJLy8gT1VUIEZJRk8gd3JpdGUgY291bnQxIHJlZ2lzdGVyCisjZGVmaW5lIFVTQl9PVVRfRklGT19XQzIJCTB4ODAwMDAyNUMJLy8gT1VUIEZJRk8gd3JpdGUgY291bnQyIHJlZ2lzdGVyCisKKyNkZWZpbmUgVVNCX1JFU0VUCQkJCTB4ODAwMDA0NEMJLy8gVVNCIHJlc2V0IHJlZ2lzdGVyCisKKyNkZWZpbmUJVVNCX0VQMF9GSUZPCQkJMHg4MDAwMDI4MAorI2RlZmluZQlVU0JfRVAxX0ZJRk8JCQkweDgwMDAwMjg0CisjZGVmaW5lCVVTQl9FUDJfRklGTwkJCTB4ODAwMDAyODgKKyNkZWZpbmUJVVNCX0VQM19GSUZPCQkJMHg4MDAwMDI4YworCisvKgorICogVVNCIHJlc2V0IHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgVVNCX1JFU0VUX0FQQgkJCSgxPDwxKQkvL3Jlc2V0cyBVU0IgQVBCIGNvbnRyb2wgc2lkZSBXUklURQorI2RlZmluZSBVU0JfUkVTRVRfSU8JCQkoMTw8MCkJLy9yZXNldHMgVVNCIElPIHNpZGUgV1JJVEUKKworLyoKKyAqIFVTQiBmdW5jdGlvbiBhZGRyZXNzIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgVVNCX0ZBX0FERFJfVVBEQVRFCQkoMTw8NykKKyNkZWZpbmUgVVNCX0ZBX0ZVTkNUSU9OX0FERFIJKDB4N0YpCisKKy8qCisgKiBQb3dlciBNYW5hZ2VtZW50IHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgUE1fVVNCX0RDUAkJCQkoMTw8NSkKKyNkZWZpbmUgUE1fVVNCX0VOQUJMRQkJCSgxPDw0KQorI2RlZmluZSBQTV9VU0JfUkVTRVQJCQkoMTw8MykKKyNkZWZpbmUgUE1fVUNfUkVTVU1FCQkJKDE8PDIpCisjZGVmaW5lIFBNX1NVU1BFTkRfTU9ERQkJCSgxPDwxKQorI2RlZmluZSBQTV9FTkFCTEVfU1VTUEVORAkJKDE8PDApCisKKy8qCisgKiBJTiBpbnRlcnJ1cHQgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBVU0JfSU5fSU5UX0VQMwkJCQkoMTw8MykKKyNkZWZpbmUgVVNCX0lOX0lOVF9FUDEJCQkJKDE8PDEpCisjZGVmaW5lIFVTQl9JTl9JTlRfRVAwCQkJCSgxPDwwKQorCisvKgorICogT1VUIGludGVycnVwdCByZWdpc3RlcgorICovCisjZGVmaW5lIFVTQl9PVVRfSU5UX0VQMgkJCQkoMTw8MikKKworLyoKKyAqIFVTQiBpbnRlcnJ1cHQgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBVU0JfSU5UX1JFU0VUX0lOVAkJCSgxPDwyKQorI2RlZmluZSBVU0JfSU5UX1JFU1VNRV9JTlQJCQkoMTw8MSkKKyNkZWZpbmUgVVNCX0lOVF9TVVNQRU5EX0lOVAkJCSgxPDwwKQorCisvKgorICogVVNCIGludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBVU0JfSU5UX0VOX1VTQl9SRVNFVF9JTlRFUgkJKDE8PDIpCisjZGVmaW5lIFVTQl9JTlRfRU5fUkVTVU1FX0lOVEVSCQkJKDE8PDEpCisjZGVmaW5lIFVTQl9JTlRfRU5fU1VTUEVORF9JTlRFUgkJKDE8PDApCisKKy8qCisgKiBJTkNTUjEgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBVU0JfSU5fQ1NSMV9DTFJfREFUQV9UT0dHTEUJCSgxPDw2KQorI2RlZmluZSBVU0JfSU5fQ1NSMV9TRU5UX1NUQUxMCQkJKDE8PDUpCisjZGVmaW5lIFVTQl9JTl9DU1IxX1NFTkRfU1RBTEwJCQkoMTw8NCkKKyNkZWZpbmUgVVNCX0lOX0NTUjFfRklGT19GTFVTSAkJCSgxPDwzKQorI2RlZmluZSBVU0JfSU5fQ1NSMV9GSUZPX05PVF9FTVBUWQkJKDE8PDEpCisjZGVmaW5lIFVTQl9JTl9DU1IxX0lOX1BLVF9SRFkJCQkoMTw8MCkKKworLyoKKyAqIElOQ1NSMiByZWdpc3RlcgorICovCisjZGVmaW5lIFVTQl9JTl9DU1IyX0FVVE9fU0VUCQkJKDE8PDcpCisjZGVmaW5lIFVTQl9JTl9DU1IyX1VTQl9ETUFfRU4JCQkoMTw8NCkKKworLyoKKyAqIE9VVCBDU1IxIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgVVNCX09VVF9DU1IxX0NMUl9EQVRBX1JFRwkJKDE8PDcpCisjZGVmaW5lIFVTQl9PVVRfQ1NSMV9TRU5UX1NUQUxMCQkJKDE8PDYpCisjZGVmaW5lIFVTQl9PVVRfQ1NSMV9TRU5EX1NUQUxMCQkJKDE8PDUpCisjZGVmaW5lIFVTQl9PVVRfQ1NSMV9GSUZPX0ZMVVNICQkJKDE8PDQpCisjZGVmaW5lIFVTQl9PVVRfQ1NSMV9GSUZPX0ZVTEwJCQkoMTw8MSkKKyNkZWZpbmUgVVNCX09VVF9DU1IxX09VVF9QS1RfUkRZCQkoMTw8MCkKKworLyoKKyAqIE9VVCBDU1IyIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgVVNCX09VVF9DU1IyX0FVVE9fQ0xSCQkJKDE8PDcpCisjZGVmaW5lIFVTQl9PVVRfQ1NSMl9VU0JfRE1BX0VOCQkJKDE8PDQpCisKKy8qCisgKiBFUDAgQ1NSCisgKi8KKyNkZWZpbmUgRVAwX0NMUl9TRVRVUF9FTkQJCSgxPDw3KQkvKiBDbGVhciAiU2V0dXAgRW5kcyIgQml0ICh3KSAqLworI2RlZmluZSBFUDBfQ0xSX09VVAkJCQkoMTw8NikJLyogQ2xlYXIgIk91dCBwYWNrZXQgcmVhZHkiIEJpdCAodykgKi8KKyNkZWZpbmUgRVAwX1NFTkRfU1RBTEwJCQkoMTw8NSkJLyogU2VuZCBTVEFMTCBIYW5kc2hha2UgKHJ3KSAqLworI2RlZmluZSBFUDBfU0VUVVBfRU5ECQkJKDE8PDQpCS8qIFNldHVwIEVuZHMgKHIpICovCisKKyNkZWZpbmUgRVAwX0RBVEFfRU5ECQkJKDE8PDMpCS8qIERhdGEgZW5kIChydykgKi8KKyNkZWZpbmUgRVAwX1NFTlRfU1RBTEwJCQkoMTw8MikJLyogU2VudCBTdGFsbCBIYW5kc2hha2UgKHIpICovCisjZGVmaW5lIEVQMF9JTl9QS1RfUkRZCQkJKDE8PDEpCS8qIEluIHBhY2tldCByZWFkeSAocncpICovCisjZGVmaW5lIEVQMF9PVVRfUEtUX1JEWQkJCSgxPDwwKQkvKiBPdXQgcGFja2V0IHJlYWR5IChyKSAqLworCisvKiBnZW5lcmFsIENTUiAqLworI2RlZmluZSBPVVRfUEtUX1JEWQkJKDE8PDApCisjZGVmaW5lIElOX1BLVF9SRFkJCSgxPDwwKQorCisvKgorICogSU4vT1VUIE1BWFAgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBVU0JfT1VUX01BWFBfTUFYUAkJCSgweEYpCisjZGVmaW5lIFVTQl9JTl9NQVhQX01BWFAJCQkoMHhGKQorCisvLyBNYXggcGFja2V0IHNpemUKKy8vI2RlZmluZSBFUDBfUEFDS0VUU0laRSAgICAgICAgMHgxMAorI2RlZmluZSBFUDBfUEFDS0VUU0laRSAgCTB4OAorI2RlZmluZSBFUDBfTUFYUEFDS0VUU0laRSAgCTB4MTAKKworI2RlZmluZSBVRENfTUFYX0VORFBPSU5UUyAgICAgICA0CisKKyNkZWZpbmUgV0FJVF9GT1JfU0VUVVAgICAgICAgICAgMAorI2RlZmluZSBEQVRBX1NUQVRFX1hNSVQgICAgICAgICAxCisjZGVmaW5lIERBVEFfU1RBVEVfTkVFRF9aTFAgICAgIDIKKyNkZWZpbmUgV0FJVF9GT1JfT1VUX1NUQVRVUyAgICAgMworI2RlZmluZSBEQVRBX1NUQVRFX1JFQ1YgICAgICAgICA0CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogSU8KKyAqLworCit0eXBlZGVmIGVudW0gZXBfdHlwZSB7CisJZXBfY29udHJvbCwgZXBfYnVsa19pbiwgZXBfYnVsa19vdXQsIGVwX2ludGVycnVwdAorfSBlcF90eXBlX3Q7CisKK3N0cnVjdCBsaDdhNDB4X2VwIHsKKwlzdHJ1Y3QgdXNiX2VwIGVwOworCXN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2OworCisJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjOworCXN0cnVjdCBsaXN0X2hlYWQgcXVldWU7CisJdW5zaWduZWQgbG9uZyBwaW9faXJxczsKKworCXU4IHN0b3BwZWQ7CisJdTggYkVuZHBvaW50QWRkcmVzczsKKwl1OCBibUF0dHJpYnV0ZXM7CisKKwllcF90eXBlX3QgZXBfdHlwZTsKKwl1MzIgZmlmbzsKKwl1MzIgY3NyMTsKKwl1MzIgY3NyMjsKK307CisKK3N0cnVjdCBsaDdhNDB4X3JlcXVlc3QgeworCXN0cnVjdCB1c2JfcmVxdWVzdCByZXE7CisJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZTsKK307CisKK3N0cnVjdCBsaDdhNDB4X3VkYyB7CisJc3RydWN0IHVzYl9nYWRnZXQgZ2FkZ2V0OworCXN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzcGlubG9ja190IGxvY2s7CisKKwlpbnQgZXAwc3RhdGU7CisJc3RydWN0IGxoN2E0MHhfZXAgZXBbVURDX01BWF9FTkRQT0lOVFNdOworCisJdW5zaWduZWQgY2hhciB1c2JfYWRkcmVzczsKKworCXVuc2lnbmVkIHJlcV9wZW5kaW5nOjEsIHJlcV9zdGQ6MSwgcmVxX2NvbmZpZzoxOworfTsKKworZXh0ZXJuIHN0cnVjdCBsaDdhNDB4X3VkYyAqdGhlX2NvbnRyb2xsZXI7CisKKyNkZWZpbmUgZXBfaXNfaW4oRVApIAkJKCgoRVApLT5iRW5kcG9pbnRBZGRyZXNzJlVTQl9ESVJfSU4pPT1VU0JfRElSX0lOKQorI2RlZmluZSBlcF9pbmRleChFUCkgCQkoKEVQKS0+YkVuZHBvaW50QWRkcmVzcyYweEYpCisjZGVmaW5lIGVwX21heHBhY2tldChFUCkgCSgoRVApLT5lcC5tYXhwYWNrZXQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25kaXMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZGlzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU1M2JiZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZGlzLmgKQEAgLTAsMCArMSwyMTcgQEAKKy8qCisgKiBuZGlzLmggCisgKiAKKyAqIG50ZGRuZGlzLmggbW9kaWZpZWQgYnkgQmVuZWRpa3QgU3ByYW5nZXIgPGIuc3ByYW5nZXJAcGVuZ3V0cm9uaXguZGU+CisgKiAKKyAqIFRoYW5rcyB0byB0aGUgY3lnd2luIGRldmVsb3BtZW50IHRlYW0sIAorICogZXNwYWNpYWxseSB0byBDYXNwZXIgUy4gSG9ybnN0cnVwIDxjaG9ybnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIE5PVCBDT1BZUklHSFRFRAorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgb2ZmZXJlZCBmb3IgdXNlIGluIHRoZSBwdWJsaWMgZG9tYWluLiBZb3UgbWF5CisgKiB1c2UsIG1vZGlmeSBvciBkaXN0cmlidXRlIGl0IGZyZWVseS4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZLiBBTEwgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVEIEFSRSBIRVJFQlkKKyAqIERJU0NMQUlNRUQuIFRoaXMgaW5jbHVkZXMgYnV0IGlzIG5vdCBsaW1pdGVkIHRvIHdhcnJhbnRpZXMgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqCisgKi8KKworI2lmbmRlZiBfTElOVVhfTkRJU19ICisjZGVmaW5lIF9MSU5VWF9ORElTX0gKKworCisjZGVmaW5lIE5ESVNfU1RBVFVTX01VTFRJQ0FTVF9GVUxMCSAgMHhDMDAxMDAwOQorI2RlZmluZSBORElTX1NUQVRVU19NVUxUSUNBU1RfRVhJU1RTICAgICAgMHhDMDAxMDAwQQorI2RlZmluZSBORElTX1NUQVRVU19NVUxUSUNBU1RfTk9UX0ZPVU5EICAgMHhDMDAxMDAwQgorCitlbnVtIE5ESVNfREVWSUNFX1BPV0VSX1NUQVRFIHsKKwlOZGlzRGV2aWNlU3RhdGVVbnNwZWNpZmllZCA9IDAsCisJTmRpc0RldmljZVN0YXRlRDAsCisJTmRpc0RldmljZVN0YXRlRDEsCisJTmRpc0RldmljZVN0YXRlRDIsCisJTmRpc0RldmljZVN0YXRlRDMsCisJTmRpc0RldmljZVN0YXRlTWF4aW11bQorfTsKKworc3RydWN0IE5ESVNfUE1fV0FLRV9VUF9DQVBBQklMSVRJRVMgeworCWVudW0gTkRJU19ERVZJQ0VfUE9XRVJfU1RBVEUgIE1pbk1hZ2ljUGFja2V0V2FrZVVwOworCWVudW0gTkRJU19ERVZJQ0VfUE9XRVJfU1RBVEUgIE1pblBhdHRlcm5XYWtlVXA7CisJZW51bSBORElTX0RFVklDRV9QT1dFUl9TVEFURSAgTWluTGlua0NoYW5nZVdha2VVcDsKK307CisKKy8qIE5ESVNfUE5QX0NBUEFCSUxJVElFUy5GbGFncyBjb25zdGFudHMgKi8KKyNkZWZpbmUgTkRJU19ERVZJQ0VfV0FLRV9VUF9FTkFCTEUgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBORElTX0RFVklDRV9XQUtFX09OX1BBVFRFUk5fTUFUQ0hfRU5BQkxFICAweDAwMDAwMDAyCisjZGVmaW5lIE5ESVNfREVWSUNFX1dBS0VfT05fTUFHSUNfUEFDS0VUX0VOQUJMRSAgIDB4MDAwMDAwMDQKKworc3RydWN0IE5ESVNfUE5QX0NBUEFCSUxJVElFUyB7CisJdTMyCQkJCQlGbGFnczsKKwlzdHJ1Y3QgTkRJU19QTV9XQUtFX1VQX0NBUEFCSUxJVElFUwlXYWtlVXBDYXBhYmlsaXRpZXM7Cit9OworCitzdHJ1Y3QgTkRJU19QTV9QQUNLRVRfUEFUVEVSTiB7CisJdTMyCVByaW9yaXR5OworCXUzMglSZXNlcnZlZDsKKwl1MzIJTWFza1NpemU7CisJdTMyCVBhdHRlcm5PZmZzZXQ7CisJdTMyCVBhdHRlcm5TaXplOworCXUzMglQYXR0ZXJuRmxhZ3M7Cit9OworCisKKy8qIFJlcXVpcmVkIE9iamVjdCBJRHMgKE9JRHMpICovCisjZGVmaW5lIE9JRF9HRU5fU1VQUE9SVEVEX0xJU1QgICAgICAgICAgICAweDAwMDEwMTAxCisjZGVmaW5lIE9JRF9HRU5fSEFSRFdBUkVfU1RBVFVTICAgICAgICAgICAweDAwMDEwMTAyCisjZGVmaW5lIE9JRF9HRU5fTUVESUFfU1VQUE9SVEVEICAgICAgICAgICAweDAwMDEwMTAzCisjZGVmaW5lIE9JRF9HRU5fTUVESUFfSU5fVVNFICAgICAgICAgICAgICAweDAwMDEwMTA0CisjZGVmaW5lIE9JRF9HRU5fTUFYSU1VTV9MT09LQUhFQUQgICAgICAgICAweDAwMDEwMTA1CisjZGVmaW5lIE9JRF9HRU5fTUFYSU1VTV9GUkFNRV9TSVpFICAgICAgICAweDAwMDEwMTA2CisjZGVmaW5lIE9JRF9HRU5fTElOS19TUEVFRCAgICAgICAgICAgICAgICAweDAwMDEwMTA3CisjZGVmaW5lIE9JRF9HRU5fVFJBTlNNSVRfQlVGRkVSX1NQQUNFICAgICAweDAwMDEwMTA4CisjZGVmaW5lIE9JRF9HRU5fUkVDRUlWRV9CVUZGRVJfU1BBQ0UgICAgICAweDAwMDEwMTA5CisjZGVmaW5lIE9JRF9HRU5fVFJBTlNNSVRfQkxPQ0tfU0laRSAgICAgICAweDAwMDEwMTBBCisjZGVmaW5lIE9JRF9HRU5fUkVDRUlWRV9CTE9DS19TSVpFICAgICAgICAweDAwMDEwMTBCCisjZGVmaW5lIE9JRF9HRU5fVkVORE9SX0lEICAgICAgICAgICAgICAgICAweDAwMDEwMTBDCisjZGVmaW5lIE9JRF9HRU5fVkVORE9SX0RFU0NSSVBUSU9OICAgICAgICAweDAwMDEwMTBECisjZGVmaW5lIE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSICAgICAweDAwMDEwMTBFCisjZGVmaW5lIE9JRF9HRU5fQ1VSUkVOVF9MT09LQUhFQUQgICAgICAgICAweDAwMDEwMTBGCisjZGVmaW5lIE9JRF9HRU5fRFJJVkVSX1ZFUlNJT04gICAgICAgICAgICAweDAwMDEwMTEwCisjZGVmaW5lIE9JRF9HRU5fTUFYSU1VTV9UT1RBTF9TSVpFICAgICAgICAweDAwMDEwMTExCisjZGVmaW5lIE9JRF9HRU5fUFJPVE9DT0xfT1BUSU9OUyAgICAgICAgICAweDAwMDEwMTEyCisjZGVmaW5lIE9JRF9HRU5fTUFDX09QVElPTlMgICAgICAgICAgICAgICAweDAwMDEwMTEzCisjZGVmaW5lIE9JRF9HRU5fTUVESUFfQ09OTkVDVF9TVEFUVVMgICAgICAweDAwMDEwMTE0CisjZGVmaW5lIE9JRF9HRU5fTUFYSU1VTV9TRU5EX1BBQ0tFVFMgICAgICAweDAwMDEwMTE1CisjZGVmaW5lIE9JRF9HRU5fVkVORE9SX0RSSVZFUl9WRVJTSU9OICAgICAweDAwMDEwMTE2CisjZGVmaW5lIE9JRF9HRU5fU1VQUE9SVEVEX0dVSURTICAgICAgICAgICAweDAwMDEwMTE3CisjZGVmaW5lIE9JRF9HRU5fTkVUV09SS19MQVlFUl9BRERSRVNTRVMgICAweDAwMDEwMTE4CisjZGVmaW5lIE9JRF9HRU5fVFJBTlNQT1JUX0hFQURFUl9PRkZTRVQgICAweDAwMDEwMTE5CisjZGVmaW5lIE9JRF9HRU5fTUFDSElORV9OQU1FICAgICAgICAgICAgICAweDAwMDEwMjFBCisjZGVmaW5lIE9JRF9HRU5fUk5ESVNfQ09ORklHX1BBUkFNRVRFUiAgICAweDAwMDEwMjFCCisjZGVmaW5lIE9JRF9HRU5fVkxBTl9JRCAgICAgICAgICAgICAgICAgICAweDAwMDEwMjFDCisKKy8qIE9wdGlvbmFsIE9JRHMgKi8KKyNkZWZpbmUgT0lEX0dFTl9NRURJQV9DQVBBQklMSVRJRVMgICAgICAgIDB4MDAwMTAyMDEKKyNkZWZpbmUgT0lEX0dFTl9QSFlTSUNBTF9NRURJVU0gICAgICAgICAgIDB4MDAwMTAyMDIKKworLyogUmVxdWlyZWQgc3RhdGlzdGljcyBPSURzICovCisjZGVmaW5lIE9JRF9HRU5fWE1JVF9PSyAgICAgICAgICAgICAgICAgICAweDAwMDIwMTAxCisjZGVmaW5lIE9JRF9HRU5fUkNWX09LICAgICAgICAgICAgICAgICAgICAweDAwMDIwMTAyCisjZGVmaW5lIE9JRF9HRU5fWE1JVF9FUlJPUiAgICAgICAgICAgICAgICAweDAwMDIwMTAzCisjZGVmaW5lIE9JRF9HRU5fUkNWX0VSUk9SICAgICAgICAgICAgICAgICAweDAwMDIwMTA0CisjZGVmaW5lIE9JRF9HRU5fUkNWX05PX0JVRkZFUiAgICAgICAgICAgICAweDAwMDIwMTA1CisKKy8qIE9wdGlvbmFsIHN0YXRpc3RpY3MgT0lEcyAqLworI2RlZmluZSBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1hNSVQgICAgICAgMHgwMDAyMDIwMQorI2RlZmluZSBPSURfR0VOX0RJUkVDVEVEX0ZSQU1FU19YTUlUICAgICAgMHgwMDAyMDIwMgorI2RlZmluZSBPSURfR0VOX01VTFRJQ0FTVF9CWVRFU19YTUlUICAgICAgMHgwMDAyMDIwMworI2RlZmluZSBPSURfR0VOX01VTFRJQ0FTVF9GUkFNRVNfWE1JVCAgICAgMHgwMDAyMDIwNAorI2RlZmluZSBPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19YTUlUICAgICAgMHgwMDAyMDIwNQorI2RlZmluZSBPSURfR0VOX0JST0FEQ0FTVF9GUkFNRVNfWE1JVCAgICAgMHgwMDAyMDIwNgorI2RlZmluZSBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1JDViAgICAgICAgMHgwMDAyMDIwNworI2RlZmluZSBPSURfR0VOX0RJUkVDVEVEX0ZSQU1FU19SQ1YgICAgICAgMHgwMDAyMDIwOAorI2RlZmluZSBPSURfR0VOX01VTFRJQ0FTVF9CWVRFU19SQ1YgICAgICAgMHgwMDAyMDIwOQorI2RlZmluZSBPSURfR0VOX01VTFRJQ0FTVF9GUkFNRVNfUkNWICAgICAgMHgwMDAyMDIwQQorI2RlZmluZSBPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19SQ1YgICAgICAgMHgwMDAyMDIwQgorI2RlZmluZSBPSURfR0VOX0JST0FEQ0FTVF9GUkFNRVNfUkNWICAgICAgMHgwMDAyMDIwQworI2RlZmluZSBPSURfR0VOX1JDVl9DUkNfRVJST1IgICAgICAgICAgICAgMHgwMDAyMDIwRAorI2RlZmluZSBPSURfR0VOX1RSQU5TTUlUX1FVRVVFX0xFTkdUSCAgICAgMHgwMDAyMDIwRQorI2RlZmluZSBPSURfR0VOX0dFVF9USU1FX0NBUFMgICAgICAgICAgICAgMHgwMDAyMDIwRgorI2RlZmluZSBPSURfR0VOX0dFVF9ORVRDQVJEX1RJTUUgICAgICAgICAgMHgwMDAyMDIxMAorI2RlZmluZSBPSURfR0VOX05FVENBUkRfTE9BRCAgICAgICAgICAgICAgMHgwMDAyMDIxMQorI2RlZmluZSBPSURfR0VOX0RFVklDRV9QUk9GSUxFICAgICAgICAgICAgMHgwMDAyMDIxMgorI2RlZmluZSBPSURfR0VOX0lOSVRfVElNRV9NUyAgICAgICAgICAgICAgMHgwMDAyMDIxMworI2RlZmluZSBPSURfR0VOX1JFU0VUX0NPVU5UUyAgICAgICAgICAgICAgMHgwMDAyMDIxNAorI2RlZmluZSBPSURfR0VOX01FRElBX1NFTlNFX0NPVU5UUyAgICAgICAgMHgwMDAyMDIxNQorI2RlZmluZSBPSURfR0VOX0ZSSUVORExZX05BTUUgICAgICAgICAgICAgMHgwMDAyMDIxNgorI2RlZmluZSBPSURfR0VOX01JTklQT1JUX0lORk8gICAgICAgICAgICAgMHgwMDAyMDIxNworI2RlZmluZSBPSURfR0VOX1JFU0VUX1ZFUklGWV9QQVJBTUVURVJTICAgMHgwMDAyMDIxOAorCisvKiBJRUVFIDgwMi4zIChFdGhlcm5ldCkgT0lEcyAqLworI2RlZmluZSBORElTXzgwMl8zX01BQ19PUFRJT05fUFJJT1JJVFkgICAgMHgwMDAwMDAwMQorCisjZGVmaW5lIE9JRF84MDJfM19QRVJNQU5FTlRfQUREUkVTUyAgICAgICAweDAxMDEwMTAxCisjZGVmaW5lIE9JRF84MDJfM19DVVJSRU5UX0FERFJFU1MgICAgICAgICAweDAxMDEwMTAyCisjZGVmaW5lIE9JRF84MDJfM19NVUxUSUNBU1RfTElTVCAgICAgICAgICAweDAxMDEwMTAzCisjZGVmaW5lIE9JRF84MDJfM19NQVhJTVVNX0xJU1RfU0laRSAgICAgICAweDAxMDEwMTA0CisjZGVmaW5lIE9JRF84MDJfM19NQUNfT1BUSU9OUyAgICAgICAgICAgICAweDAxMDEwMTA1CisjZGVmaW5lIE9JRF84MDJfM19SQ1ZfRVJST1JfQUxJR05NRU5UICAgICAweDAxMDIwMTAxCisjZGVmaW5lIE9JRF84MDJfM19YTUlUX09ORV9DT0xMSVNJT04gICAgICAweDAxMDIwMTAyCisjZGVmaW5lIE9JRF84MDJfM19YTUlUX01PUkVfQ09MTElTSU9OUyAgICAweDAxMDIwMTAzCisjZGVmaW5lIE9JRF84MDJfM19YTUlUX0RFRkVSUkVEICAgICAgICAgICAweDAxMDIwMjAxCisjZGVmaW5lIE9JRF84MDJfM19YTUlUX01BWF9DT0xMSVNJT05TICAgICAweDAxMDIwMjAyCisjZGVmaW5lIE9JRF84MDJfM19SQ1ZfT1ZFUlJVTiAgICAgICAgICAgICAweDAxMDIwMjAzCisjZGVmaW5lIE9JRF84MDJfM19YTUlUX1VOREVSUlVOICAgICAgICAgICAweDAxMDIwMjA0CisjZGVmaW5lIE9JRF84MDJfM19YTUlUX0hFQVJUQkVBVF9GQUlMVVJFICAweDAxMDIwMjA1CisjZGVmaW5lIE9JRF84MDJfM19YTUlUX1RJTUVTX0NSU19MT1NUICAgICAweDAxMDIwMjA2CisjZGVmaW5lIE9JRF84MDJfM19YTUlUX0xBVEVfQ09MTElTSU9OUyAgICAweDAxMDIwMjA3CisKKy8qIE9JRF9HRU5fTUlOSVBPUlRfSU5GTyBjb25zdGFudHMgKi8KKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9CVVNfTUFTVEVSICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9XRE1fRFJJVkVSICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9TR19MSVNUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9TVVBQT1JUU19NRURJQV9RVUVSWSAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9JTkRJQ0FURVNfUEFDS0VUUyAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9JR05PUkVfUEFDS0VUX1FVRVVFICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9JR05PUkVfUkVRVUVTVF9RVUVVRSAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9JR05PUkVfVE9LRU5fUklOR19FUlJPUlMgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9JTlRFUk1FRElBVEVfRFJJVkVSICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9JU19ORElTXzUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9JU19DTyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9ERVNFUklBTElaRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9SRVFVSVJFU19NRURJQV9QT0xMSU5HICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9TVVBQT1JUU19NRURJQV9TRU5TRSAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9ORVRCT09UX0NBUkQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9QTV9TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9TVVBQT1JUU19NQUNfQUREUkVTU19PVkVSV1JJVEUgIDB4MDAwMTAwMDAKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9VU0VTX1NBRkVfQlVGRkVSX0FQSVMgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9ISURERU4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9TV0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9TVVJQUklTRV9SRU1PVkVfT0sgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9OT19IQUxUX09OX1NVU1BFTkQgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9IQVJEV0FSRV9ERVZJQ0UgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF9TVVBQT1JUU19DQU5DRUxfU0VORF9QQUNLRVRTICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgTkRJU19NSU5JUE9SVF82NEJJVFNfRE1BICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKworI2RlZmluZSBORElTX01FRElVTV84MDJfMwkJMHgwMDAwMDAwMAorI2RlZmluZSBORElTX01FRElVTV84MDJfNQkJMHgwMDAwMDAwMQorI2RlZmluZSBORElTX01FRElVTV9GRERJCQkweDAwMDAwMDAyCisjZGVmaW5lIE5ESVNfTUVESVVNX1dBTgkJCTB4MDAwMDAwMDMKKyNkZWZpbmUgTkRJU19NRURJVU1fTE9DQUxfVEFMSwkJMHgwMDAwMDAwNAorI2RlZmluZSBORElTX01FRElVTV9ESVgJCQkweDAwMDAwMDA1CisjZGVmaW5lIE5ESVNfTUVESVVNX0FSQ0VOVF9SQVcJCTB4MDAwMDAwMDYKKyNkZWZpbmUgTkRJU19NRURJVU1fQVJDRU5UXzg3OF8yCTB4MDAwMDAwMDcKKyNkZWZpbmUgTkRJU19NRURJVU1fQVRNCQkJMHgwMDAwMDAwOAorI2RlZmluZSBORElTX01FRElVTV9XSVJFTEVTU19MQU4JMHgwMDAwMDAwOQorI2RlZmluZSBORElTX01FRElVTV9JUkRBCQkweDAwMDAwMDBBCisjZGVmaW5lIE5ESVNfTUVESVVNX0JQQwkJCTB4MDAwMDAwMEIKKyNkZWZpbmUgTkRJU19NRURJVU1fQ09fV0FOCQkweDAwMDAwMDBDCisjZGVmaW5lIE5ESVNfTUVESVVNXzEzOTQJCTB4MDAwMDAwMEQKKworI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0RJUkVDVEVECTB4MDAwMDAwMDEKKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9NVUxUSUNBU1QJMHgwMDAwMDAwMgorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QJMHgwMDAwMDAwNAorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVAkweDAwMDAwMDA4CisjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfU09VUkNFX1JPVVRJTkcJMHgwMDAwMDAxMAorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTCTB4MDAwMDAwMjAKKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9TTVQJCTB4MDAwMDAwNDAKKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9BTExfTE9DQUwJMHgwMDAwMDA4MAorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0dST1VQCQkweDAwMDAwMTAwCisjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfQUxMX0ZVTkNUSU9OQUwJMHgwMDAwMDIwMAorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0ZVTkNUSU9OQUwJMHgwMDAwMDQwMAorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX01BQ19GUkFNRQkweDAwMDAwODAwCisKKyNkZWZpbmUgTkRJU19NRURJQV9TVEFURV9DT05ORUNURUQJMHgwMDAwMDAwMAorI2RlZmluZSBORElTX01FRElBX1NUQVRFX0RJU0NPTk5FQ1RFRAkweDAwMDAwMDAxCisKKyNkZWZpbmUgTkRJU19NQUNfT1BUSU9OX0NPUFlfTE9PS0FIRUFEX0RBVEEgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTkRJU19NQUNfT1BUSU9OX1JFQ0VJVkVfU0VSSUFMSVpFRCAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTkRJU19NQUNfT1BUSU9OX1RSQU5TRkVSU19OT1RfUEVORCAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgTkRJU19NQUNfT1BUSU9OX05PX0xPT1BCQUNLICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgTkRJU19NQUNfT1BUSU9OX0ZVTExfRFVQTEVYICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgTkRJU19NQUNfT1BUSU9OX0VPVFhfSU5ESUNBVElPTiAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgTkRJU19NQUNfT1BUSU9OXzgwMjFQX1BSSU9SSVRZICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgTkRJU19NQUNfT1BUSU9OX1JFU0VSVkVEICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKworI2VuZGlmIC8qIF9MSU5VWF9ORElTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NDU3ZjIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYwpAQCAtMCwwICsxLDI5NjcgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBQTFggTkVUMjI4MCBVU0IgZGV2aWNlIGNvbnRyb2xsZXIuCisgKiBTcGVjcyBhbmQgZXJyYXRhIGFyZSBhdmFpbGFibGUgZnJvbSA8aHR0cDovL3d3dy5wbHh0ZWNoLmNvbT4uCisgKgorICogUExYIFRlY2hub2xvZ3kgSW5jLiAoZm9ybWVybHkgTmV0Q2hpcCBUZWNobm9sb2d5KSBzdXBwb3J0ZWQgdGhlIAorICogZGV2ZWxvcG1lbnQgb2YgdGhpcyBkcml2ZXIuCisgKgorICoKKyAqIENPREUgU1RBVFVTIEhJR0hMSUdIVFMKKyAqCisgKiBUaGlzIGRyaXZlciBzaG91bGQgd29yayB3ZWxsIHdpdGggbW9zdCAiZ2FkZ2V0IiBkcml2ZXJzLCBpbmNsdWRpbmcKKyAqIHRoZSBGaWxlIFN0b3JhZ2UsIFNlcmlhbCwgYW5kIEV0aGVybmV0L1JORElTIGdhZGdldCBkcml2ZXJzCisgKiBhcyB3ZWxsIGFzIEdhZGdldCBaZXJvIGFuZCBHYWRnZXRmcy4KKyAqCisgKiBETUEgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiAgRHJpdmVycyB1c2luZyB0cmFuc2ZlciBxdWV1ZXMgbWlnaHQgdXNlCisgKiBETUEgY2hhaW5pbmcgdG8gcmVtb3ZlIElSUSBsYXRlbmNpZXMgYmV0d2VlbiB0cmFuc2ZlcnMuICAoRXhjZXB0IHdoZW4KKyAqIHNob3J0IE9VVCB0cmFuc2ZlcnMgaGFwcGVuLikgIERyaXZlcnMgY2FuIHVzZSB0aGUgcmVxLT5ub19pbnRlcnJ1cHQKKyAqIGhpbnQgdG8gY29tcGxldGVseSBlbGltaW5hdGUgc29tZSBJUlFzLCBpZiBhIGxhdGVyIElSUSBpcyBndWFyYW50ZWVkCisgKiBhbmQgRE1BIGNoYWluaW5nIGlzIGVuYWJsZWQuCisgKgorICogTm90ZSB0aGF0IGFsbW9zdCBhbGwgdGhlIGVycmF0YSB3b3JrYXJvdW5kcyBoZXJlIGFyZSBvbmx5IG5lZWRlZCBmb3IKKyAqIHJldjEgY2hpcHMuICBSZXYxYSBzaWxpY29uICgwMTEwKSBmaXhlcyBhbG1vc3QgYWxsIG9mIHRoZW0uCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBCcm93bmVsbAorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUgUExYIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI3VuZGVmCURFQlVHCQkvKiBtZXNzYWdlcyBvbiBlcnJvciBhbmQgbW9zdCBmYXVsdCBwYXRocyAqLworI3VuZGVmCVZFUkJPU0UJCS8qIGV4dHJhIGRlYnVnIG1lc3NhZ2VzIChzdWNjZXNzIHRvbykgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl9jaDkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfZ2FkZ2V0Lmg+CisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKKworI2RlZmluZQlEUklWRVJfREVTQwkJIlBMWCBORVQyMjgwIFVTQiBQZXJpcGhlcmFsIENvbnRyb2xsZXIiCisjZGVmaW5lCURSSVZFUl9WRVJTSU9OCQkiMjAwNSBGZWIgMDMiCisKKyNkZWZpbmUJRE1BX0FERFJfSU5WQUxJRAkofihkbWFfYWRkcl90KTApCisjZGVmaW5lCUVQX0RPTlRVU0UJCTEzCS8qIG5vbnplcm8gKi8KKworI2RlZmluZSBVU0VfUkRLX0xFRFMJCS8qIEdQSU8gcGlucyBjb250cm9sIHRocmVlIExFRHMgKi8KKworCitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfbmFtZSBbXSA9ICJuZXQyMjgwIjsKK3N0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9kZXNjIFtdID0gRFJJVkVSX0RFU0M7CisKK3N0YXRpYyBjb25zdCBjaGFyIGVwMG5hbWUgW10gPSAiZXAwIjsKK3N0YXRpYyBjb25zdCBjaGFyICplcF9uYW1lIFtdID0geworCWVwMG5hbWUsCisJImVwLWEiLCAiZXAtYiIsICJlcC1jIiwgImVwLWQiLAorCSJlcC1lIiwgImVwLWYiLAorfTsKKworLyogdXNlX2RtYSAtLSBnZW5lcmFsIGdvb2RuZXNzLCBmZXdlciBpbnRlcnJ1cHRzLCBsZXNzIGNwdSBsb2FkICh2cyBQSU8pCisgKiB1c2VfZG1hX2NoYWluaW5nIC0tIGRtYSBkZXNjcmlwdG9yIHF1ZXVlaW5nIGdpdmVzIGV2ZW4gbW9yZSBpcnEgcmVkdWN0aW9uCisgKgorICogVGhlIG5ldDIyODAgRE1BIGVuZ2luZXMgYXJlIG5vdCB0aWdodGx5IGludGVncmF0ZWQgd2l0aCB0aGVpciBGSUZPczsKKyAqIG5vdCBhbGwgY2FzZXMgYXJlICh5ZXQpIGhhbmRsZWQgd2VsbCBpbiB0aGlzIGRyaXZlciBvciB0aGUgc2lsaWNvbi4KKyAqIFNvbWUgZ2FkZ2V0IGRyaXZlcnMgd29yayBiZXR0ZXIgd2l0aCB0aGUgZG1hIHN1cHBvcnQgaGVyZSB0aGFuIG90aGVycy4KKyAqIFRoZXNlIHR3byBwYXJhbWV0ZXJzIGxldCB5b3UgdXNlIFBJTyBvciBtb3JlIGFnZ3Jlc3NpdmUgRE1BLgorICovCitzdGF0aWMgaW50IHVzZV9kbWEgPSAxOworc3RhdGljIGludCB1c2VfZG1hX2NoYWluaW5nID0gMDsKKworLyogIm1vZHByb2JlIG5ldDIyODAgdXNlX2RtYT1uIiBldGMgKi8KK21vZHVsZV9wYXJhbSAodXNlX2RtYSwgYm9vbCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW0gKHVzZV9kbWFfY2hhaW5pbmcsIGJvb2wsIFNfSVJVR08pOworCisKKy8qIG1vZGUgMCA9PSBlcC17YSxiLGMsZH0gMUsgZmlmbyBlYWNoCisgKiBtb2RlIDEgPT0gZXAte2EsYn0gMksgZmlmbyBlYWNoLCBlcC17YyxkfSB1bmF2YWlsYWJsZQorICogbW9kZSAyID09IGVwLWEgMksgZmlmbywgZXAte2IsY30gMUsgZWFjaCwgZXAtZCB1bmF2YWlsYWJsZQorICovCitzdGF0aWMgdXNob3J0IGZpZm9fbW9kZSA9IDA7CisKKy8qICJtb2Rwcm9iZSBuZXQyMjgwIGZpZm9fbW9kZT0xIiBldGMgKi8KK21vZHVsZV9wYXJhbSAoZmlmb19tb2RlLCB1c2hvcnQsIDA2NDQpOworCisvKiBlbmFibGVfc3VzcGVuZCAtLSBXaGVuIGVuYWJsZWQsIHRoZSBkcml2ZXIgd2lsbCByZXNwb25kIHRvCisgKiBVU0Igc3VzcGVuZCByZXF1ZXN0cyBieSBwb3dlcmluZyBkb3duIHRoZSBORVQyMjgwLiAgT3RoZXJ3aXNlLAorICogVVNCIHN1c3BlbmQgcmVxdWVzdHMgd2lsbCBiZSBpZ25vcmVkLiAgVGhpcyBpcyBhY2NlcHRpYmxlIGZvcgorICogc2VsZi1wb3dlcmVkIGRldmljZXMsIGFuZCBoZWxwcyBhdm9pZCBzb21lIHF1aXJrcy4KKyAqLworc3RhdGljIGludCBlbmFibGVfc3VzcGVuZCA9IDA7CisKKy8qICJtb2Rwcm9iZSBuZXQyMjgwIGVuYWJsZV9zdXNwZW5kPTEiIGV0YyAqLworbW9kdWxlX3BhcmFtIChlbmFibGVfc3VzcGVuZCwgYm9vbCwgU19JUlVHTyk7CisKKworI2RlZmluZQlESVJfU1RSSU5HKGJBZGRyZXNzKSAoKChiQWRkcmVzcykgJiBVU0JfRElSX0lOKSA/ICJpbiIgOiAib3V0IikKKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMpIHx8IGRlZmluZWQgKERFQlVHKQorc3RhdGljIGNoYXIgKnR5cGVfc3RyaW5nICh1OCBibUF0dHJpYnV0ZXMpCit7CisJc3dpdGNoICgoYm1BdHRyaWJ1dGVzKSAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSB7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLOglyZXR1cm4gImJ1bGsiOworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoJcmV0dXJuICJpc28iOworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOglyZXR1cm4gImludHIiOworCX07CisJcmV0dXJuICJjb250cm9sIjsKK30KKyNlbmRpZgorCisjaW5jbHVkZSAibmV0MjI4MC5oIgorCisjZGVmaW5lIHZhbGlkX2JpdAlfX2NvbnN0YW50X2NwdV90b19sZTMyICgxIDw8IFZBTElEX0JJVCkKKyNkZWZpbmUgZG1hX2RvbmVfaWUJX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSA8PCBETUFfRE9ORV9JTlRFUlJVUFRfRU5BQkxFKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50CituZXQyMjgwX2VuYWJsZSAoc3RydWN0IHVzYl9lcCAqX2VwLCBjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJc3RydWN0IG5ldDIyODAJCSpkZXY7CisJc3RydWN0IG5ldDIyODBfZXAJKmVwOworCXUzMgkJCW1heCwgdG1wOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJZXAgPSBjb250YWluZXJfb2YgKF9lcCwgc3RydWN0IG5ldDIyODBfZXAsIGVwKTsKKwlpZiAoIV9lcCB8fCAhZGVzYyB8fCBlcC0+ZGVzYyB8fCBfZXAtPm5hbWUgPT0gZXAwbmFtZQorCQkJfHwgZGVzYy0+YkRlc2NyaXB0b3JUeXBlICE9IFVTQl9EVF9FTkRQT0lOVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGV2ID0gZXAtPmRldjsKKwlpZiAoIWRldi0+ZHJpdmVyIHx8IGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKQorCQlyZXR1cm4gLUVTSFVURE9XTjsKKworCS8qIGVycmF0dW0gMDExOSB3b3JrYXJvdW5kIHRpZXMgdXAgYW4gZW5kcG9pbnQgbnVtYmVyICovCisJaWYgKChkZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgMHgwZikgPT0gRVBfRE9OVFVTRSkKKwkJcmV0dXJuIC1FRE9NOworCisJLyogc2FuaXR5IGNoZWNrIGVwLWUvZXAtZiBzaW5jZSB0aGVpciBmaWZvcyBhcmUgc21hbGwgKi8KKwltYXggPSBsZTE2X3RvX2NwdSAoZGVzYy0+d01heFBhY2tldFNpemUpICYgMHgxZmZmOworCWlmIChlcC0+bnVtID4gNCAmJiBtYXggPiA2NCkKKwkJcmV0dXJuIC1FUkFOR0U7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCV9lcC0+bWF4cGFja2V0ID0gbWF4ICYgMHg3ZmY7CisJZXAtPmRlc2MgPSBkZXNjOworCisJLyogZXBfcmVzZXQoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCAqLworCWVwLT5zdG9wcGVkID0gMDsKKwllcC0+b3V0X292ZXJmbG93ID0gMDsKKworCS8qIHNldCBzcGVlZC1kZXBlbmRlbnQgbWF4IHBhY2tldDsgbWF5IGtpY2sgaW4gaGlnaCBiYW5kd2lkdGggKi8KKwlzZXRfaWR4X3JlZyAoZGV2LT5yZWdzLCBSRUdfRVBfTUFYUEtUIChkZXYsIGVwLT5udW0pLCBtYXgpOworCisJLyogRklGTyBsaW5lcyBjYW4ndCBnbyB0byBkaWZmZXJlbnQgcGFja2V0cy4gIFBJTyBpcyBvaywgc28KKwkgKiB1c2UgaXQgaW5zdGVhZCBvZiB0cm91Ymxlc29tZSAobm9uLWJ1bGspIG11bHRpLXBhY2tldCBETUEuCisJICovCisJaWYgKGVwLT5kbWEgJiYgKG1heCAlIDQpICE9IDAgJiYgdXNlX2RtYV9jaGFpbmluZykgeworCQlERUJVRyAoZXAtPmRldiwgIiVzLCBubyBkbWEgZm9yIG1heHBhY2tldCAlZFxuIiwKKwkJCWVwLT5lcC5uYW1lLCBlcC0+ZXAubWF4cGFja2V0KTsKKwkJZXAtPmRtYSA9IE5VTEw7CisJfQorCisJLyogc2V0IHR5cGUsIGRpcmVjdGlvbiwgYWRkcmVzczsgcmVzZXQgZmlmbyBjb3VudGVycyAqLworCXdyaXRlbCAoKDEgPDwgRklGT19GTFVTSCksICZlcC0+cmVncy0+ZXBfc3RhdCk7CisJdG1wID0gKGRlc2MtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKTsKKwlpZiAodG1wID09IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkgeworCQkvKiBlcnJhdHVtIDAxMDUgd29ya2Fyb3VuZCBwcmV2ZW50cyBocyBOWUVUICovCisJCWlmIChkZXYtPmNoaXByZXYgPT0gMDEwMAorCQkJCSYmIGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9ISUdICisJCQkJJiYgIShkZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikpCisJCQl3cml0ZWwgKCgxIDw8IENMRUFSX05BS19PVVRfUEFDS0VUU19NT0RFKSwKKwkJCQkmZXAtPnJlZ3MtPmVwX3JzcCk7CisJfSBlbHNlIGlmICh0bXAgPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykgeworCQkvKiBjYXRjaCBzb21lIHBhcnRpY3VsYXJseSBibGF0YW50IGRyaXZlciBidWdzICovCisJCWlmICgoZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gKKwkJCQkJJiYgbWF4ICE9IDUxMikKKwkJCQl8fCAoZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwKKwkJCQkJJiYgbWF4ID4gNjQpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJfQorCX0KKwllcC0+aXNfaXNvID0gKHRtcCA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKSA/IDEgOiAwOworCXRtcCA8PD0gRU5EUE9JTlRfVFlQRTsKKwl0bXAgfD0gZGVzYy0+YkVuZHBvaW50QWRkcmVzczsKKwl0bXAgfD0gKDQgPDwgRU5EUE9JTlRfQllURV9DT1VOVCk7CS8qIGRlZmF1bHQgZnVsbCBmaWZvIGxpbmVzICovCisJdG1wIHw9IDEgPDwgRU5EUE9JTlRfRU5BQkxFOworCXdtYiAoKTsKKworCS8qIGZvciBPVVQgdHJhbnNmZXJzLCBibG9jayB0aGUgcnggZmlmbyB1bnRpbCBhIHJlYWQgaXMgcG9zdGVkICovCisJZXAtPmlzX2luID0gKHRtcCAmIFVTQl9ESVJfSU4pICE9IDA7CisJaWYgKCFlcC0+aXNfaW4pCisJCXdyaXRlbCAoKDEgPDwgU0VUX05BS19PVVRfUEFDS0VUUyksICZlcC0+cmVncy0+ZXBfcnNwKTsKKworCXdyaXRlbCAodG1wLCAmZXAtPnJlZ3MtPmVwX2NmZyk7CisKKwkvKiBlbmFibGUgaXJxcyAqLworCWlmICghZXAtPmRtYSkgewkJCQkvKiBwaW8sIHBlci1wYWNrZXQgKi8KKwkJdG1wID0gKDEgPDwgZXAtPm51bSkgfCByZWFkbCAoJmRldi0+cmVncy0+cGNpaXJxZW5iMCk7CisJCXdyaXRlbCAodG1wLCAmZGV2LT5yZWdzLT5wY2lpcnFlbmIwKTsKKworCQl0bXAgPSAoMSA8PCBEQVRBX1BBQ0tFVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFKQorCQkJfCAoMSA8PCBEQVRBX1BBQ0tFVF9UUkFOU01JVFRFRF9JTlRFUlJVUFRfRU5BQkxFKQorCQkJfCByZWFkbCAoJmVwLT5yZWdzLT5lcF9pcnFlbmIpOworCQl3cml0ZWwgKHRtcCwgJmVwLT5yZWdzLT5lcF9pcnFlbmIpOworCX0gZWxzZSB7CQkJCS8qIGRtYSwgcGVyLXJlcXVlc3QgKi8KKwkJdG1wID0gKDEgPDwgKDggKyBlcC0+bnVtKSk7CS8qIGNvbXBsZXRpb24gKi8KKwkJdG1wIHw9IHJlYWRsICgmZGV2LT5yZWdzLT5wY2lpcnFlbmIxKTsKKwkJd3JpdGVsICh0bXAsICZkZXYtPnJlZ3MtPnBjaWlycWVuYjEpOworCisJCS8qIGZvciBzaG9ydCBPVVQgdHJhbnNmZXJzLCBkbWEgY29tcGxldGlvbnMgY2FuJ3QKKwkJICogYWR2YW5jZSB0aGUgcXVldWU7IGRvIGl0IHBpby1zdHlsZSwgYnkgaGFuZC4KKwkJICogTk9URSBlcnJhdHVtIDAxMTIgd29ya2Fyb3VuZCAjMgorCQkgKi8KKwkJaWYgKChkZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgPT0gMCkgeworCQkJdG1wID0gKDEgPDwgU0hPUlRfUEFDS0VUX1RSQU5TRkVSUkVEX0lOVEVSUlVQVF9FTkFCTEUpOworCQkJd3JpdGVsICh0bXAsICZlcC0+cmVncy0+ZXBfaXJxZW5iKTsKKworCQkJdG1wID0gKDEgPDwgZXAtPm51bSkgfCByZWFkbCAoJmRldi0+cmVncy0+cGNpaXJxZW5iMCk7CisJCQl3cml0ZWwgKHRtcCwgJmRldi0+cmVncy0+cGNpaXJxZW5iMCk7CisJCX0KKwl9CisKKwl0bXAgPSBkZXNjLT5iRW5kcG9pbnRBZGRyZXNzOworCURFQlVHIChkZXYsICJlbmFibGVkICVzIChlcCVkJXMtJXMpICVzIG1heCAlMDR4XG4iLAorCQlfZXAtPm5hbWUsIHRtcCAmIDB4MGYsIERJUl9TVFJJTkcgKHRtcCksCisJCXR5cGVfc3RyaW5nIChkZXNjLT5ibUF0dHJpYnV0ZXMpLAorCQllcC0+ZG1hID8gImRtYSIgOiAicGlvIiwgbWF4KTsKKworCS8qIHBjaSB3cml0ZXMgbWF5IHN0aWxsIGJlIHBvc3RlZCAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYW5kc2hha2UgKHUzMiBfX2lvbWVtICpwdHIsIHUzMiBtYXNrLCB1MzIgZG9uZSwgaW50IHVzZWMpCit7CisJdTMyCXJlc3VsdDsKKworCWRvIHsKKwkJcmVzdWx0ID0gcmVhZGwgKHB0cik7CisJCWlmIChyZXN1bHQgPT0gfih1MzIpMCkJCS8qICJkZXZpY2UgdW5wbHVnZ2VkIiAqLworCQkJcmV0dXJuIC1FTk9ERVY7CisJCXJlc3VsdCAmPSBtYXNrOworCQlpZiAocmVzdWx0ID09IGRvbmUpCisJCQlyZXR1cm4gMDsKKwkJdWRlbGF5ICgxKTsKKwkJdXNlYy0tOworCX0gd2hpbGUgKHVzZWMgPiAwKTsKKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZXBfb3BzIG5ldDIyODBfZXBfb3BzOworCitzdGF0aWMgdm9pZCBlcF9yZXNldCAoc3RydWN0IG5ldDIyODBfcmVncyBfX2lvbWVtICpyZWdzLCBzdHJ1Y3QgbmV0MjI4MF9lcCAqZXApCit7CisJdTMyCQl0bXA7CisKKwllcC0+ZGVzYyA9IE5VTEw7CisJSU5JVF9MSVNUX0hFQUQgKCZlcC0+cXVldWUpOworCisJZXAtPmVwLm1heHBhY2tldCA9IH4wOworCWVwLT5lcC5vcHMgPSAmbmV0MjI4MF9lcF9vcHM7CisKKwkvKiBkaXNhYmxlIHRoZSBkbWEsIGlycXMsIGVuZHBvaW50Li4uICovCisJaWYgKGVwLT5kbWEpIHsKKwkJd3JpdGVsICgwLCAmZXAtPmRtYS0+ZG1hY3RsKTsKKwkJd3JpdGVsICggICgxIDw8IERNQV9TQ0FUVEVSX0dBVEhFUl9ET05FX0lOVEVSUlVQVCkKKwkJCXwgKDEgPDwgRE1BX1RSQU5TQUNUSU9OX0RPTkVfSU5URVJSVVBUKQorCQkJfCAoMSA8PCBETUFfQUJPUlQpCisJCQksICZlcC0+ZG1hLT5kbWFzdGF0KTsKKworCQl0bXAgPSByZWFkbCAoJnJlZ3MtPnBjaWlycWVuYjApOworCQl0bXAgJj0gfigxIDw8IGVwLT5udW0pOworCQl3cml0ZWwgKHRtcCwgJnJlZ3MtPnBjaWlycWVuYjApOworCX0gZWxzZSB7CisJCXRtcCA9IHJlYWRsICgmcmVncy0+cGNpaXJxZW5iMSk7CisJCXRtcCAmPSB+KDEgPDwgKDggKyBlcC0+bnVtKSk7CS8qIGNvbXBsZXRpb24gKi8KKwkJd3JpdGVsICh0bXAsICZyZWdzLT5wY2lpcnFlbmIxKTsKKwl9CisJd3JpdGVsICgwLCAmZXAtPnJlZ3MtPmVwX2lycWVuYik7CisKKwkvKiBpbml0IHRvIG91ciBjaG9zZW4gZGVmYXVsdHMsIG5vdGFibHkgc28gdGhhdCB3ZSBOQUsgT1VUCisJICogcGFja2V0cyB1bnRpbCB0aGUgZHJpdmVyIHF1ZXVlcyBhIHJlYWQgKCtub3RlIGVycmF0dW0gMDExMikKKwkgKi8KKwl0bXAgPSAoMSA8PCBTRVRfTkFLX09VVF9QQUNLRVRTX01PREUpCisJCXwgKDEgPDwgU0VUX05BS19PVVRfUEFDS0VUUykKKwkJfCAoMSA8PCBDTEVBUl9FUF9ISURFX1NUQVRVU19QSEFTRSkKKwkJfCAoMSA8PCBDTEVBUl9JTlRFUlJVUFRfTU9ERSk7CisKKwlpZiAoZXAtPm51bSAhPSAwKSB7CisJCXRtcCB8PSAoMSA8PCBDTEVBUl9FTkRQT0lOVF9UT0dHTEUpCisJCQl8ICgxIDw8IENMRUFSX0VORFBPSU5UX0hBTFQpOworCX0KKwl3cml0ZWwgKHRtcCwgJmVwLT5yZWdzLT5lcF9yc3ApOworCisJLyogc2NydWIgbW9zdCBzdGF0dXMgYml0cywgYW5kIGZsdXNoIGFueSBmaWZvIHN0YXRlICovCisJd3JpdGVsICggICgxIDw8IFRJTUVPVVQpCisJCXwgKDEgPDwgVVNCX1NUQUxMX1NFTlQpCisJCXwgKDEgPDwgVVNCX0lOX05BS19TRU5UKQorCQl8ICgxIDw8IFVTQl9JTl9BQ0tfUkNWRCkKKwkJfCAoMSA8PCBVU0JfT1VUX1BJTkdfTkFLX1NFTlQpCisJCXwgKDEgPDwgVVNCX09VVF9BQ0tfU0VOVCkKKwkJfCAoMSA8PCBGSUZPX09WRVJGTE9XKQorCQl8ICgxIDw8IEZJRk9fVU5ERVJGTE9XKQorCQl8ICgxIDw8IEZJRk9fRkxVU0gpCisJCXwgKDEgPDwgU0hPUlRfUEFDS0VUX09VVF9ET05FX0lOVEVSUlVQVCkKKwkJfCAoMSA8PCBTSE9SVF9QQUNLRVRfVFJBTlNGRVJSRURfSU5URVJSVVBUKQorCQl8ICgxIDw8IERBVEFfUEFDS0VUX1JFQ0VJVkVEX0lOVEVSUlVQVCkKKwkJfCAoMSA8PCBEQVRBX1BBQ0tFVF9UUkFOU01JVFRFRF9JTlRFUlJVUFQpCisJCXwgKDEgPDwgREFUQV9PVVRfUElOR19UT0tFTl9JTlRFUlJVUFQpCisJCXwgKDEgPDwgREFUQV9JTl9UT0tFTl9JTlRFUlJVUFQpCisJCSwgJmVwLT5yZWdzLT5lcF9zdGF0KTsKKworCS8qIGZpZm8gc2l6ZSBpcyBoYW5kbGVkIHNlcGFyYXRlbHkgKi8KK30KKworc3RhdGljIHZvaWQgbnVrZSAoc3RydWN0IG5ldDIyODBfZXAgKik7CisKK3N0YXRpYyBpbnQgbmV0MjI4MF9kaXNhYmxlIChzdHJ1Y3QgdXNiX2VwICpfZXApCit7CisJc3RydWN0IG5ldDIyODBfZXAJKmVwOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJZXAgPSBjb250YWluZXJfb2YgKF9lcCwgc3RydWN0IG5ldDIyODBfZXAsIGVwKTsKKwlpZiAoIV9lcCB8fCAhZXAtPmRlc2MgfHwgX2VwLT5uYW1lID09IGVwMG5hbWUpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CisJbnVrZSAoZXApOworCWVwX3Jlc2V0IChlcC0+ZGV2LT5yZWdzLCBlcCk7CisKKwlWREVCVUcgKGVwLT5kZXYsICJkaXNhYmxlZCAlcyAlc1xuIiwKKwkJCWVwLT5kbWEgPyAiZG1hIiA6ICJwaW8iLCBfZXAtPm5hbWUpOworCisJLyogc3luY2ggbWVtb3J5IHZpZXdzIHdpdGggdGhlIGRldmljZSAqLworCSh2b2lkKSByZWFkbCAoJmVwLT5yZWdzLT5lcF9jZmcpOworCisJaWYgKHVzZV9kbWEgJiYgIWVwLT5kbWEgJiYgZXAtPm51bSA+PSAxICYmIGVwLT5udW0gPD0gNCkKKwkJZXAtPmRtYSA9ICZlcC0+ZGV2LT5kbWEgW2VwLT5udW0gLSAxXTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3JlcXVlc3QgKgorbmV0MjI4MF9hbGxvY19yZXF1ZXN0IChzdHJ1Y3QgdXNiX2VwICpfZXAsIGludCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IG5ldDIyODBfZXAJKmVwOworCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QJKnJlcTsKKworCWlmICghX2VwKQorCQlyZXR1cm4gTlVMTDsKKwllcCA9IGNvbnRhaW5lcl9vZiAoX2VwLCBzdHJ1Y3QgbmV0MjI4MF9lcCwgZXApOworCisJcmVxID0ga21hbGxvYyAoc2l6ZW9mICpyZXEsIGdmcF9mbGFncyk7CisJaWYgKCFyZXEpCisJCXJldHVybiBOVUxMOworCisJbWVtc2V0IChyZXEsIDAsIHNpemVvZiAqcmVxKTsKKwlyZXEtPnJlcS5kbWEgPSBETUFfQUREUl9JTlZBTElEOworCUlOSVRfTElTVF9IRUFEICgmcmVxLT5xdWV1ZSk7CisKKwkvKiB0aGlzIGRtYSBkZXNjcmlwdG9yIG1heSBiZSBzd2FwcGVkIHdpdGggdGhlIHByZXZpb3VzIGR1bW15ICovCisJaWYgKGVwLT5kbWEpIHsKKwkJc3RydWN0IG5ldDIyODBfZG1hCSp0ZDsKKworCQl0ZCA9IHBjaV9wb29sX2FsbG9jIChlcC0+ZGV2LT5yZXF1ZXN0cywgZ2ZwX2ZsYWdzLAorCQkJCSZyZXEtPnRkX2RtYSk7CisJCWlmICghdGQpIHsKKwkJCWtmcmVlIChyZXEpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJdGQtPmRtYWNvdW50ID0gMDsJLyogbm90IFZBTElEICovCisJCXRkLT5kbWFhZGRyID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoRE1BX0FERFJfSU5WQUxJRCk7CisJCXRkLT5kbWFkZXNjID0gdGQtPmRtYWFkZHI7CisJCXJlcS0+dGQgPSB0ZDsKKwl9CisJcmV0dXJuICZyZXEtPnJlcTsKK30KKworc3RhdGljIHZvaWQKK25ldDIyODBfZnJlZV9yZXF1ZXN0IChzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSkKK3sKKwlzdHJ1Y3QgbmV0MjI4MF9lcAkqZXA7CisJc3RydWN0IG5ldDIyODBfcmVxdWVzdAkqcmVxOworCisJZXAgPSBjb250YWluZXJfb2YgKF9lcCwgc3RydWN0IG5ldDIyODBfZXAsIGVwKTsKKwlpZiAoIV9lcCB8fCAhX3JlcSkKKwkJcmV0dXJuOworCisJcmVxID0gY29udGFpbmVyX29mIChfcmVxLCBzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0LCByZXEpOworCVdBUk5fT04gKCFsaXN0X2VtcHR5ICgmcmVxLT5xdWV1ZSkpOworCWlmIChyZXEtPnRkKQorCQlwY2lfcG9vbF9mcmVlIChlcC0+ZGV2LT5yZXF1ZXN0cywgcmVxLT50ZCwgcmVxLT50ZF9kbWEpOworCWtmcmVlIChyZXEpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjdW5kZWYgVVNFX0tNQUxMT0MKKworLyogbWFueSBjb21tb24gcGxhdGZvcm1zIGhhdmUgZG1hLWNvaGVyZW50IGNhY2hlcywgd2hpY2ggbWVhbnMgdGhhdCBpdCdzCisgKiBzYWZlIHRvIHVzZSBrbWFsbG9jKCkgbWVtb3J5IGZvciBhbGwgaS9vIGJ1ZmZlcnMgd2l0aG91dCB1c2luZyBhbnkKKyAqIGNhY2hlIGZsdXNoaW5nIGNhbGxzLiAgKHVubGVzcyB5b3UncmUgdHJ5aW5nIHRvIHNoYXJlIGNhY2hlIGxpbmVzCisgKiBiZXR3ZWVuIGRtYSBhbmQgbm9uLWRtYSBhY3Rpdml0aWVzLCB3aGljaCBpcyBhIHNsb3cgaWRlYSBpbiBhbnkgY2FzZS4pCisgKgorICogb3RoZXIgcGxhdGZvcm1zIG5lZWQgbW9yZSBjYXJlLCB3aXRoIDIuNSBoYXZpbmcgYSBtb2RlcmF0ZWx5IGdlbmVyYWwKKyAqIHNvbHV0aW9uICh3aGljaCBmYWxscyBkb3duIGZvciBhbGxvY2F0aW9ucyBzbWFsbGVyIHRoYW4gb25lIHBhZ2UpCisgKiB0aGF0IGltcHJvdmVzIHNpZ25pZmljYW50bHkgb24gdGhlIDIuNCBQQ0kgYWxsb2NhdG9ycyBieSByZW1vdmluZworICogdGhlIHJlc3RyaWN0aW9uIHRoYXQgbWVtb3J5IG5ldmVyIGJlIGZyZWVkIGluX2ludGVycnVwdCgpLgorICovCisjaWYJZGVmaW5lZChDT05GSUdfWDg2KQorI2RlZmluZSBVU0VfS01BTExPQworCisjZWxpZglkZWZpbmVkKENPTkZJR19QUEMpICYmICFkZWZpbmVkKENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUpCisjZGVmaW5lIFVTRV9LTUFMTE9DCisKKyNlbGlmCWRlZmluZWQoQ09ORklHX01JUFMpICYmICFkZWZpbmVkKENPTkZJR19OT05DT0hFUkVOVF9JTykKKyNkZWZpbmUgVVNFX0tNQUxMT0MKKworLyogRklYTUUgdGhlcmUgYXJlIG90aGVyIGNhc2VzLCBpbmNsdWRpbmcgYW4geDg2LTY0IG9uZSAuLi4gICovCisjZW5kaWYKKworLyogYWxsb2NhdGluZyBidWZmZXJzIHRoaXMgd2F5IGVsaW1pbmF0ZXMgZG1hIG1hcHBpbmcgb3ZlcmhlYWQsIHdoaWNoCisgKiBvbiBzb21lIHBsYXRmb3JtcyB3aWxsIG1lYW4gZWxpbWluYXRpbmcgYSBwZXItaW8gYnVmZmVyIGNvcHkuICB3aXRoCisgKiBzb21lIGtpbmRzIG9mIHN5c3RlbSBjYWNoZXMsIGZ1cnRoZXIgdHdlYWtzIG1heSBzdGlsbCBiZSBuZWVkZWQuCisgKi8KK3N0YXRpYyB2b2lkICoKK25ldDIyODBfYWxsb2NfYnVmZmVyICgKKwlzdHJ1Y3QgdXNiX2VwCQkqX2VwLAorCXVuc2lnbmVkCQlieXRlcywKKwlkbWFfYWRkcl90CQkqZG1hLAorCWludAkJCWdmcF9mbGFncworKQoreworCXZvaWQJCQkqcmV0dmFsOworCXN0cnVjdCBuZXQyMjgwX2VwCSplcDsKKworCWVwID0gY29udGFpbmVyX29mIChfZXAsIHN0cnVjdCBuZXQyMjgwX2VwLCBlcCk7CisJaWYgKCFfZXApCisJCXJldHVybiBOVUxMOworCSpkbWEgPSBETUFfQUREUl9JTlZBTElEOworCisjaWYJZGVmaW5lZChVU0VfS01BTExPQykKKwlyZXR2YWwgPSBrbWFsbG9jKGJ5dGVzLCBnZnBfZmxhZ3MpOworCWlmIChyZXR2YWwpCisJCSpkbWEgPSB2aXJ0X3RvX3BoeXMocmV0dmFsKTsKKyNlbHNlCisJaWYgKGVwLT5kbWEpIHsKKwkJLyogdGhlIG1haW4gcHJvYmxlbSB3aXRoIHRoaXMgY2FsbCBpcyB0aGF0IGl0IHdhc3RlcyBtZW1vcnkKKwkJICogb24gdHlwaWNhbCAxL04gcGFnZSBhbGxvY2F0aW9uczogaXQgYWxsb2NhdGVzIDEtTiBwYWdlcy4KKwkJICovCisjd2FybmluZyBVc2luZyBkbWFfYWxsb2NfY29oZXJlbnQgZXZlbiB3aXRoIGJ1ZmZlcnMgc21hbGxlciB0aGFuIGEgcGFnZS4KKwkJcmV0dmFsID0gZG1hX2FsbG9jX2NvaGVyZW50KCZlcC0+ZGV2LT5wZGV2LT5kZXYsCisJCQkJYnl0ZXMsIGRtYSwgZ2ZwX2ZsYWdzKTsKKwl9IGVsc2UKKwkJcmV0dmFsID0ga21hbGxvYyhieXRlcywgZ2ZwX2ZsYWdzKTsKKyNlbmRpZgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkCituZXQyMjgwX2ZyZWVfYnVmZmVyICgKKwlzdHJ1Y3QgdXNiX2VwICpfZXAsCisJdm9pZCAqYnVmLAorCWRtYV9hZGRyX3QgZG1hLAorCXVuc2lnbmVkIGJ5dGVzCispIHsKKwkvKiBmcmVlIG1lbW9yeSBpbnRvIHRoZSByaWdodCBhbGxvY2F0b3IgKi8KKyNpZm5kZWYJVVNFX0tNQUxMT0MKKwlpZiAoZG1hICE9IERNQV9BRERSX0lOVkFMSUQpIHsKKwkJc3RydWN0IG5ldDIyODBfZXAJKmVwOworCisJCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IG5ldDIyODBfZXAsIGVwKTsKKwkJaWYgKCFfZXApCisJCQlyZXR1cm47CisJCWRtYV9mcmVlX2NvaGVyZW50KCZlcC0+ZGV2LT5wZGV2LT5kZXYsIGJ5dGVzLCBidWYsIGRtYSk7CisJfSBlbHNlCisjZW5kaWYKKwkJa2ZyZWUgKGJ1Zik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGxvYWQgYSBwYWNrZXQgaW50byB0aGUgZmlmbyB3ZSB1c2UgZm9yIHVzYiBJTiB0cmFuc2ZlcnMuCisgKiB3b3JrcyBmb3IgYWxsIGVuZHBvaW50cy4KKyAqCisgKiBOT1RFOiBwaW8gd2l0aCBlcC1hLi5lcC1kIGNvdWxkIHN0dWZmIG11bHRpcGxlIHBhY2tldHMgaW50byB0aGUgZmlmbworICogYXQgYSB0aW1lLCBidXQgdGhpcyBjb2RlIGlzIHNpbXBsZXIgYmVjYXVzZSBpdCBrbm93cyBpdCBvbmx5IHdyaXRlcworICogb25lIHBhY2tldC4gIGVwLWEuLmVwLWQgc2hvdWxkIHVzZSBkbWEgaW5zdGVhZC4KKyAqLworc3RhdGljIHZvaWQKK3dyaXRlX2ZpZm8gKHN0cnVjdCBuZXQyMjgwX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IG5ldDIyODBfZXBfcmVncwlfX2lvbWVtICpyZWdzID0gZXAtPnJlZ3M7CisJdTgJCQkqYnVmOworCXUzMgkJCXRtcDsKKwl1bnNpZ25lZAkJY291bnQsIHRvdGFsOworCisJLyogSU5WQVJJQU5UOiAgZmlmbyBpcyBjdXJyZW50bHkgZW1wdHkuICh0ZXN0YWJsZSkgKi8KKworCWlmIChyZXEpIHsKKwkJYnVmID0gcmVxLT5idWYgKyByZXEtPmFjdHVhbDsKKwkJcHJlZmV0Y2ggKGJ1Zik7CisJCXRvdGFsID0gcmVxLT5sZW5ndGggLSByZXEtPmFjdHVhbDsKKwl9IGVsc2UgeworCQl0b3RhbCA9IDA7CisJCWJ1ZiA9IE5VTEw7CisJfQorCisJLyogd3JpdGUganVzdCBvbmUgcGFja2V0IGF0IGEgdGltZSAqLworCWNvdW50ID0gZXAtPmVwLm1heHBhY2tldDsKKwlpZiAoY291bnQgPiB0b3RhbCkJLyogbWluKCkgY2Fubm90IGJlIHVzZWQgb24gYSBiaXRmaWVsZCAqLworCQljb3VudCA9IHRvdGFsOworCisJVkRFQlVHIChlcC0+ZGV2LCAid3JpdGUgJXMgZmlmbyAoSU4pICVkIGJ5dGVzJXMgcmVxICVwXG4iLAorCQkJZXAtPmVwLm5hbWUsIGNvdW50LAorCQkJKGNvdW50ICE9IGVwLT5lcC5tYXhwYWNrZXQpID8gIiAoc2hvcnQpIiA6ICIiLAorCQkJcmVxKTsKKwl3aGlsZSAoY291bnQgPj0gNCkgeworCQkvKiBOT1RFIGJlIGNhcmVmdWwgaWYgeW91IHRyeSB0byBhbGlnbiB0aGVzZS4gZmlmbyBsaW5lcworCQkgKiBzaG91bGQgbm9ybWFsbHkgYmUgZnVsbCAoNCBieXRlcykgYW5kIHN1Y2Nlc3NpdmUgcGFydGlhbAorCQkgKiBsaW5lcyBhcmUgb2sgb25seSBpbiBjZXJ0YWluIGNhc2VzLgorCQkgKi8KKwkJdG1wID0gZ2V0X3VuYWxpZ25lZCAoKHUzMiAqKWJ1Zik7CisJCWNwdV90b19sZTMycyAoJnRtcCk7CisJCXdyaXRlbCAodG1wLCAmcmVncy0+ZXBfZGF0YSk7CisJCWJ1ZiArPSA0OworCQljb3VudCAtPSA0OworCX0KKworCS8qIGxhc3QgZmlmbyBlbnRyeSBpcyAic2hvcnQiIHVubGVzcyB3ZSB3cm90ZSBhIGZ1bGwgcGFja2V0LgorCSAqIGFsc28gZXhwbGljaXRseSB2YWxpZGF0ZSBsYXN0IHdvcmQgaW4gKHBlcmlvZGljKSB0cmFuc2ZlcnMKKwkgKiB3aGVuIG1heHBhY2tldCBpcyBub3QgYSBtdWx0aXBsZSBvZiA0IGJ5dGVzLgorCSAqLworCWlmIChjb3VudCB8fCB0b3RhbCA8IGVwLT5lcC5tYXhwYWNrZXQpIHsKKwkJdG1wID0gY291bnQgPyBnZXRfdW5hbGlnbmVkICgodTMyICopYnVmKSA6IGNvdW50OworCQljcHVfdG9fbGUzMnMgKCZ0bXApOworCQlzZXRfZmlmb19ieXRlY291bnQgKGVwLCBjb3VudCAmIDB4MDMpOworCQl3cml0ZWwgKHRtcCwgJnJlZ3MtPmVwX2RhdGEpOworCX0KKworCS8qIHBjaSB3cml0ZXMgbWF5IHN0aWxsIGJlIHBvc3RlZCAqLworfQorCisvKiB3b3JrIGFyb3VuZCBlcnJhdHVtIDAxMDY6IFBDSSBhbmQgVVNCIHJhY2Ugb3ZlciB0aGUgT1VUIGZpZm8uCisgKiBjYWxsZXIgZ3VhcmFudGVlcyBjaGlwcmV2IDAxMDAsIG91dCBlbmRwb2ludCBpcyBOQUtpbmcsIGFuZAorICogdGhlcmUncyBubyByZWFsIGRhdGEgaW4gdGhlIGZpZm8uCisgKgorICogTk9URTogIGFsc28gdXNlZCBpbiBjYXNlcyB3aGVyZSB0aGF0IGVycmF0dW0gZG9lc24ndCBhcHBseToKKyAqIHdoZXJlIHRoZSBob3N0IHdyb3RlICJ0b28gbXVjaCIgZGF0YSB0byB1cy4KKyAqLworc3RhdGljIHZvaWQgb3V0X2ZsdXNoIChzdHJ1Y3QgbmV0MjI4MF9lcCAqZXApCit7CisJdTMyCV9faW9tZW0gKnN0YXRwOworCXUzMgl0bXA7CisKKwlBU1NFUlRfT1VUX05BS0lORyAoZXApOworCisJc3RhdHAgPSAmZXAtPnJlZ3MtPmVwX3N0YXQ7CisJd3JpdGVsICggICgxIDw8IERBVEFfT1VUX1BJTkdfVE9LRU5fSU5URVJSVVBUKQorCQl8ICgxIDw8IERBVEFfUEFDS0VUX1JFQ0VJVkVEX0lOVEVSUlVQVCkKKwkJLCBzdGF0cCk7CisJd3JpdGVsICgoMSA8PCBGSUZPX0ZMVVNIKSwgc3RhdHApOworCW1iICgpOworCXRtcCA9IHJlYWRsIChzdGF0cCk7CisJaWYgKHRtcCAmICgxIDw8IERBVEFfT1VUX1BJTkdfVE9LRU5fSU5URVJSVVBUKQorCQkJLyogaGlnaCBzcGVlZCBkaWQgYnVsayBOWUVUOyBmaWZvIGlzbid0IGZpbGxpbmcgKi8KKwkJCSYmIGVwLT5kZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfRlVMTCkgeworCQl1bnNpZ25lZAl1c2VjOworCisJCXVzZWMgPSA1MDsJCS8qIDY0IGJ5dGUgYnVsay9pbnRlcnJ1cHQgKi8KKwkJaGFuZHNoYWtlIChzdGF0cCwgKDEgPDwgVVNCX09VVF9QSU5HX05BS19TRU5UKSwKKwkJCQkoMSA8PCBVU0JfT1VUX1BJTkdfTkFLX1NFTlQpLCB1c2VjKTsKKwkJLyogTkFLIGRvbmU7IG5vdyBDTEVBUl9OQUtfT1VUX1BBQ0tFVFMgaXMgc2FmZSAqLworCX0KK30KKworLyogdW5sb2FkIHBhY2tldChzKSBmcm9tIHRoZSBmaWZvIHdlIHVzZSBmb3IgdXNiIE9VVCB0cmFuc2ZlcnMuCisgKiByZXR1cm5zIHRydWUgaWZmIHRoZSByZXF1ZXN0IGNvbXBsZXRlZCwgYmVjYXVzZSBvZiBzaG9ydCBwYWNrZXQKKyAqIG9yIHRoZSByZXF1ZXN0IGJ1ZmZlciBoYXZpbmcgZmlsbGVkIHdpdGggZnVsbCBwYWNrZXRzLgorICoKKyAqIGZvciBlcC1hLi5lcC1kIHRoaXMgd2lsbCByZWFkIG11bHRpcGxlIHBhY2tldHMgb3V0IHdoZW4gdGhleQorICogaGF2ZSBiZWVuIGFjY2VwdGVkLgorICovCitzdGF0aWMgaW50CityZWFkX2ZpZm8gKHN0cnVjdCBuZXQyMjgwX2VwICplcCwgc3RydWN0IG5ldDIyODBfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBuZXQyMjgwX2VwX3JlZ3MJX19pb21lbSAqcmVncyA9IGVwLT5yZWdzOworCXU4CQkJKmJ1ZiA9IHJlcS0+cmVxLmJ1ZiArIHJlcS0+cmVxLmFjdHVhbDsKKwl1bnNpZ25lZAkJY291bnQsIHRtcCwgaXNfc2hvcnQ7CisJdW5zaWduZWQJCWNsZWFudXAgPSAwLCBwcmV2ZW50ID0gMDsKKworCS8qIGVycmF0dW0gMDEwNiAuLi4gcGFja2V0cyBjb21pbmcgaW4gZHVyaW5nIGZpZm8gcmVhZHMgbWlnaHQKKwkgKiBiZSBpbmNvbXBsZXRlbHkgcmVqZWN0ZWQuICBub3QgYWxsIGNhc2VzIGhhdmUgd29ya2Fyb3VuZHMuCisJICovCisJaWYgKGVwLT5kZXYtPmNoaXByZXYgPT0gMHgwMTAwCisJCQkmJiBlcC0+ZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwpIHsKKwkJdWRlbGF5ICgxKTsKKwkJdG1wID0gcmVhZGwgKCZlcC0+cmVncy0+ZXBfc3RhdCk7CisJCWlmICgodG1wICYgKDEgPDwgTkFLX09VVF9QQUNLRVRTKSkpCisJCQljbGVhbnVwID0gMTsKKwkJZWxzZSBpZiAoKHRtcCAmICgxIDw8IEZJRk9fRlVMTCkpKSB7CisJCQlzdGFydF9vdXRfbmFraW5nIChlcCk7CisJCQlwcmV2ZW50ID0gMTsKKwkJfQorCQkvKiBlbHNlOiBob3BlIHdlIGRvbid0IHNlZSB0aGUgcHJvYmxlbSAqLworCX0KKworCS8qIG5ldmVyIG92ZXJmbG93IHRoZSByeCBidWZmZXIuIHRoZSBmaWZvIHJlYWRzIHBhY2tldHMgdW50aWwKKwkgKiBpdCBzZWVzIGEgc2hvcnQgb25lOyB3ZSBtaWdodCBub3QgYmUgcmVhZHkgZm9yIHRoZW0gYWxsLgorCSAqLworCXByZWZldGNodyAoYnVmKTsKKwljb3VudCA9IHJlYWRsICgmcmVncy0+ZXBfYXZhaWwpOworCWlmICh1bmxpa2VseSAoY291bnQgPT0gMCkpIHsKKwkJdWRlbGF5ICgxKTsKKwkJdG1wID0gcmVhZGwgKCZlcC0+cmVncy0+ZXBfc3RhdCk7CisJCWNvdW50ID0gcmVhZGwgKCZyZWdzLT5lcF9hdmFpbCk7CisJCS8qIGhhbmRsZWQgdGhhdCBkYXRhIGFscmVhZHk/ICovCisJCWlmIChjb3VudCA9PSAwICYmICh0bXAgJiAoMSA8PCBOQUtfT1VUX1BBQ0tFVFMpKSA9PSAwKQorCQkJcmV0dXJuIDA7CisJfQorCisJdG1wID0gcmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsOworCWlmIChjb3VudCA+IHRtcCkgeworCQkvKiBhcyB3aXRoIERNQSwgZGF0YSBvdmVyZmxvdyBnZXRzIGZsdXNoZWQgKi8KKwkJaWYgKCh0bXAgJSBlcC0+ZXAubWF4cGFja2V0KSAhPSAwKSB7CisJCQlFUlJPUiAoZXAtPmRldiwKKwkJCQkiJXMgb3V0IGZpZm8gJWQgYnl0ZXMsIGV4cGVjdGVkICVkXG4iLAorCQkJCWVwLT5lcC5uYW1lLCBjb3VudCwgdG1wKTsKKwkJCXJlcS0+cmVxLnN0YXR1cyA9IC1FT1ZFUkZMT1c7CisJCQljbGVhbnVwID0gMTsKKwkJCS8qIE5BS19PVVRfUEFDS0VUUyB3aWxsIGJlIHNldCwgc28gZmx1c2hpbmcgaXMgc2FmZTsKKwkJCSAqIHRoZSBuZXh0IHJlYWQgd2lsbCBzdGFydCB3aXRoIHRoZSBuZXh0IHBhY2tldAorCQkJICovCisJCX0gLyogZWxzZSBpdCdzIGEgWkxQLCBubyB3b3JyaWVzICovCisJCWNvdW50ID0gdG1wOworCX0KKwlyZXEtPnJlcS5hY3R1YWwgKz0gY291bnQ7CisKKwlpc19zaG9ydCA9IChjb3VudCA9PSAwKSB8fCAoKGNvdW50ICUgZXAtPmVwLm1heHBhY2tldCkgIT0gMCk7CisKKwlWREVCVUcgKGVwLT5kZXYsICJyZWFkICVzIGZpZm8gKE9VVCkgJWQgYnl0ZXMlcyVzJXMgcmVxICVwICVkLyVkXG4iLAorCQkJZXAtPmVwLm5hbWUsIGNvdW50LCBpc19zaG9ydCA/ICIgKHNob3J0KSIgOiAiIiwKKwkJCWNsZWFudXAgPyAiIGZsdXNoIiA6ICIiLCBwcmV2ZW50ID8gIiBuYWsiIDogIiIsCisJCQlyZXEsIHJlcS0+cmVxLmFjdHVhbCwgcmVxLT5yZXEubGVuZ3RoKTsKKworCXdoaWxlIChjb3VudCA+PSA0KSB7CisJCXRtcCA9IHJlYWRsICgmcmVncy0+ZXBfZGF0YSk7CisJCWNwdV90b19sZTMycyAoJnRtcCk7CisJCXB1dF91bmFsaWduZWQgKHRtcCwgKHUzMiAqKWJ1Zik7CisJCWJ1ZiArPSA0OworCQljb3VudCAtPSA0OworCX0KKwlpZiAoY291bnQpIHsKKwkJdG1wID0gcmVhZGwgKCZyZWdzLT5lcF9kYXRhKTsKKwkJLyogTEUgY29udmVyc2lvbiBpcyBpbXBsaWNpdCBoZXJlOiAqLworCQlkbyB7CisJCQkqYnVmKysgPSAodTgpIHRtcDsKKwkJCXRtcCA+Pj0gODsKKwkJfSB3aGlsZSAoLS1jb3VudCk7CisJfQorCWlmIChjbGVhbnVwKQorCQlvdXRfZmx1c2ggKGVwKTsKKwlpZiAocHJldmVudCkgeworCQl3cml0ZWwgKCgxIDw8IENMRUFSX05BS19PVVRfUEFDS0VUUyksICZlcC0+cmVncy0+ZXBfcnNwKTsKKwkJKHZvaWQpIHJlYWRsICgmZXAtPnJlZ3MtPmVwX3JzcCk7CisJfQorCisJcmV0dXJuIGlzX3Nob3J0IHx8ICgocmVxLT5yZXEuYWN0dWFsID09IHJlcS0+cmVxLmxlbmd0aCkKKwkJCQkmJiAhcmVxLT5yZXEuemVybyk7Cit9CisKKy8qIGZpbGwgb3V0IGRtYSBkZXNjcmlwdG9yIHRvIG1hdGNoIGEgZ2l2ZW4gcmVxdWVzdCAqLworc3RhdGljIHZvaWQKK2ZpbGxfZG1hX2Rlc2MgKHN0cnVjdCBuZXQyMjgwX2VwICplcCwgc3RydWN0IG5ldDIyODBfcmVxdWVzdCAqcmVxLCBpbnQgdmFsaWQpCit7CisJc3RydWN0IG5ldDIyODBfZG1hCSp0ZCA9IHJlcS0+dGQ7CisJdTMyCQkJZG1hY291bnQgPSByZXEtPnJlcS5sZW5ndGg7CisKKwkvKiBkb24ndCBsZXQgRE1BIGNvbnRpbnVlIGFmdGVyIGEgc2hvcnQgT1VUIHBhY2tldCwKKwkgKiBzbyBvdmVycnVucyBjYW4ndCBhZmZlY3QgdGhlIG5leHQgdHJhbnNmZXIuCisJICogaW4gY2FzZSBvZiBvdmVycnVucyBvbiBtYXgtc2l6ZSBwYWNrZXRzLCB3ZSBjYW4ndAorCSAqIHN0b3AgdGhlIGZpZm8gZnJvbSBmaWxsaW5nIGJ1dCB3ZSBjYW4gZmx1c2ggaXQuCisJICovCisJaWYgKGVwLT5pc19pbikKKwkJZG1hY291bnQgfD0gKDEgPDwgRE1BX0RJUkVDVElPTik7CisJZWxzZSBpZiAoKGRtYWNvdW50ICUgZXAtPmVwLm1heHBhY2tldCkgIT0gMCkKKwkJZG1hY291bnQgfD0gKDEgPDwgRU5EX09GX0NIQUlOKTsKKworCXJlcS0+dmFsaWQgPSB2YWxpZDsKKwlpZiAodmFsaWQpCisJCWRtYWNvdW50IHw9ICgxIDw8IFZBTElEX0JJVCk7CisJaWYgKGxpa2VseSghcmVxLT5yZXEubm9faW50ZXJydXB0IHx8ICF1c2VfZG1hX2NoYWluaW5nKSkKKwkJZG1hY291bnQgfD0gKDEgPDwgRE1BX0RPTkVfSU5URVJSVVBUX0VOQUJMRSk7CisKKwkvKiB0ZC0+ZG1hZGVzYyA9IHByZXZpb3VzbHkgc2V0IGJ5IGNhbGxlciAqLworCXRkLT5kbWFhZGRyID0gY3B1X3RvX2xlMzIgKHJlcS0+cmVxLmRtYSk7CisKKwkvKiAyMjgwIG1heSBiZSBwb2xsaW5nIFZBTElEX0JJVCB0aHJvdWdoIGVwLT5kbWEtPmRtYWRlc2MgKi8KKwl3bWIgKCk7CisJdGQtPmRtYWNvdW50ID0gY3B1X3RvX2xlMzJwICgmZG1hY291bnQpOworfQorCitzdGF0aWMgY29uc3QgdTMyIGRtYWN0bF9kZWZhdWx0ID0KKwkJICAoMSA8PCBETUFfU0NBVFRFUl9HQVRIRVJfRE9ORV9JTlRFUlJVUFQpCisJCXwgKDEgPDwgRE1BX0NMRUFSX0NPVU5UX0VOQUJMRSkKKwkJLyogZXJyYXR1bSAwMTE2IHdvcmthcm91bmQgcGFydCAxICh1c2UgUE9MTElORykgKi8KKwkJfCAoUE9MTF8xMDBfVVNFQyA8PCBERVNDUklQVE9SX1BPTExJTkdfUkFURSkKKwkJfCAoMSA8PCBETUFfVkFMSURfQklUX1BPTExJTkdfRU5BQkxFKQorCQl8ICgxIDw8IERNQV9WQUxJRF9CSVRfRU5BQkxFKQorCQl8ICgxIDw8IERNQV9TQ0FUVEVSX0dBVEhFUl9FTkFCTEUpCisJCS8qIGVycmF0dW0gMDExNiB3b3JrYXJvdW5kIHBhcnQgMiAobm8gQVVUT1NUQVJUKSAqLworCQl8ICgxIDw8IERNQV9FTkFCTEUpOworCitzdGF0aWMgaW5saW5lIHZvaWQgc3Bpbl9zdG9wX2RtYSAoc3RydWN0IG5ldDIyODBfZG1hX3JlZ3MgX19pb21lbSAqZG1hKQoreworCWhhbmRzaGFrZSAoJmRtYS0+ZG1hY3RsLCAoMSA8PCBETUFfRU5BQkxFKSwgMCwgNTApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RvcF9kbWEgKHN0cnVjdCBuZXQyMjgwX2RtYV9yZWdzIF9faW9tZW0gKmRtYSkKK3sKKwl3cml0ZWwgKHJlYWRsICgmZG1hLT5kbWFjdGwpICYgfigxIDw8IERNQV9FTkFCTEUpLCAmZG1hLT5kbWFjdGwpOworCXNwaW5fc3RvcF9kbWEgKGRtYSk7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X3F1ZXVlIChzdHJ1Y3QgbmV0MjI4MF9lcCAqZXAsIHUzMiBkbWFjdGwsIHUzMiB0ZF9kbWEpCit7CisJc3RydWN0IG5ldDIyODBfZG1hX3JlZ3MJX19pb21lbSAqZG1hID0gZXAtPmRtYTsKKworCXdyaXRlbCAoKDEgPDwgVkFMSURfQklUKSB8IChlcC0+aXNfaW4gPDwgRE1BX0RJUkVDVElPTiksCisJCQkmZG1hLT5kbWFjb3VudCk7CisJd3JpdGVsIChyZWFkbCAoJmRtYS0+ZG1hc3RhdCksICZkbWEtPmRtYXN0YXQpOworCisJd3JpdGVsICh0ZF9kbWEsICZkbWEtPmRtYWRlc2MpOworCXdyaXRlbCAoZG1hY3RsLCAmZG1hLT5kbWFjdGwpOworCisJLyogZXJyYXR1bSAwMTE2IHdvcmthcm91bmQgcGFydCAzOiAgcGNpIGFyYml0ZXIgYXdheSBmcm9tIG5ldDIyODAgKi8KKwkodm9pZCkgcmVhZGwgKCZlcC0+ZGV2LT5wY2ktPnBjaW1zdGN0bCk7CisKKwl3cml0ZWwgKCgxIDw8IERNQV9TVEFSVCksICZkbWEtPmRtYXN0YXQpOworCisJaWYgKCFlcC0+aXNfaW4pCisJCXN0b3Bfb3V0X25ha2luZyAoZXApOworfQorCitzdGF0aWMgdm9pZCBzdGFydF9kbWEgKHN0cnVjdCBuZXQyMjgwX2VwICplcCwgc3RydWN0IG5ldDIyODBfcmVxdWVzdCAqcmVxKQoreworCXUzMgkJCXRtcDsKKwlzdHJ1Y3QgbmV0MjI4MF9kbWFfcmVncwlfX2lvbWVtICpkbWEgPSBlcC0+ZG1hOworCisJLyogRklYTUUgY2FuJ3QgdXNlIERNQSBmb3IgWkxQcyAqLworCisJLyogb24gdGhpcyBwYXRoIHdlICJrbm93IiB0aGVyZSdzIG5vIGRtYSBhY3RpdmUgKHlldCkgKi8KKwlXQVJOX09OIChyZWFkbCAoJmRtYS0+ZG1hY3RsKSAmICgxIDw8IERNQV9FTkFCTEUpKTsKKwl3cml0ZWwgKDAsICZlcC0+ZG1hLT5kbWFjdGwpOworCisJLyogcHJldmlvdXMgT1VUIHBhY2tldCBtaWdodCBoYXZlIGJlZW4gc2hvcnQgKi8KKwlpZiAoIWVwLT5pc19pbiAmJiAoKHRtcCA9IHJlYWRsICgmZXAtPnJlZ3MtPmVwX3N0YXQpKQorCQkgCQkmICgxIDw8IE5BS19PVVRfUEFDS0VUUykpICE9IDApIHsKKwkJd3JpdGVsICgoMSA8PCBTSE9SVF9QQUNLRVRfVFJBTlNGRVJSRURfSU5URVJSVVBUKSwKKwkJCSZlcC0+cmVncy0+ZXBfc3RhdCk7CisKKwkJdG1wID0gcmVhZGwgKCZlcC0+cmVncy0+ZXBfYXZhaWwpOworCQlpZiAodG1wKSB7CisJCQl3cml0ZWwgKHJlYWRsICgmZG1hLT5kbWFzdGF0KSwgJmRtYS0+ZG1hc3RhdCk7CisKKwkJCS8qIHRyYW5zZmVyIGFsbC9zb21lIGZpZm8gZGF0YSAqLworCQkJd3JpdGVsIChyZXEtPnJlcS5kbWEsICZkbWEtPmRtYWFkZHIpOworCQkJdG1wID0gbWluICh0bXAsIHJlcS0+cmVxLmxlbmd0aCk7CisKKwkJCS8qIGRtYSBpcnEsIGZha2luZyBzY2F0dGVybGlzdCBzdGF0dXMgKi8KKwkJCXJlcS0+dGQtPmRtYWNvdW50ID0gY3B1X3RvX2xlMzIgKHJlcS0+cmVxLmxlbmd0aCAtIHRtcCk7CisJCQl3cml0ZWwgKCgxIDw8IERNQV9ET05FX0lOVEVSUlVQVF9FTkFCTEUpCisJCQkJfCB0bXAsICZkbWEtPmRtYWNvdW50KTsKKwkJCXJlcS0+dGQtPmRtYWRlc2MgPSAwOworCQkJcmVxLT52YWxpZCA9IDE7CisKKwkJCXdyaXRlbCAoKDEgPDwgRE1BX0VOQUJMRSksICZkbWEtPmRtYWN0bCk7CisJCQl3cml0ZWwgKCgxIDw8IERNQV9TVEFSVCksICZkbWEtPmRtYXN0YXQpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJdG1wID0gZG1hY3RsX2RlZmF1bHQ7CisKKwkvKiBmb3JjZSBwYWNrZXQgYm91bmRhcmllcyBiZXR3ZWVuIGRtYSByZXF1ZXN0cywgYnV0IHByZXZlbnQgdGhlCisJICogY29udHJvbGxlciBmcm9tIGF1dG9tYWdpY2FsbHkgd3JpdGluZyBhIGxhc3QgInNob3J0IiBwYWNrZXQKKwkgKiAoemVybyBsZW5ndGgpIHVubGVzcyB0aGUgZHJpdmVyIGV4cGxpY2l0bHkgc2FpZCB0byBkbyB0aGF0LgorCSAqLworCWlmIChlcC0+aXNfaW4pIHsKKwkJaWYgKGxpa2VseSAoKHJlcS0+cmVxLmxlbmd0aCAlIGVwLT5lcC5tYXhwYWNrZXQpICE9IDAKKwkJCQl8fCByZXEtPnJlcS56ZXJvKSkgeworCQkJdG1wIHw9ICgxIDw8IERNQV9GSUZPX1ZBTElEQVRFKTsKKwkJCWVwLT5pbl9maWZvX3ZhbGlkYXRlID0gMTsKKwkJfSBlbHNlCisJCQllcC0+aW5fZmlmb192YWxpZGF0ZSA9IDA7CisJfQorCisJLyogaW5pdCByZXEtPnRkLCBwb2ludGluZyB0byB0aGUgY3VycmVudCBkdW1teSAqLworCXJlcS0+dGQtPmRtYWRlc2MgPSBjcHVfdG9fbGUzMiAoZXAtPnRkX2RtYSk7CisJZmlsbF9kbWFfZGVzYyAoZXAsIHJlcSwgMSk7CisKKwlpZiAoIXVzZV9kbWFfY2hhaW5pbmcpCisJCXJlcS0+dGQtPmRtYWNvdW50IHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEgPDwgRU5EX09GX0NIQUlOKTsKKworCXN0YXJ0X3F1ZXVlIChlcCwgdG1wLCByZXEtPnRkX2RtYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcXVldWVfZG1hIChzdHJ1Y3QgbmV0MjI4MF9lcCAqZXAsIHN0cnVjdCBuZXQyMjgwX3JlcXVlc3QgKnJlcSwgaW50IHZhbGlkKQoreworCXN0cnVjdCBuZXQyMjgwX2RtYQkqZW5kOworCWRtYV9hZGRyX3QJCXRtcDsKKworCS8qIHN3YXAgbmV3IGR1bW15IGZvciBvbGQsIGxpbms7IGZpbGwgYW5kIG1heWJlIGFjdGl2YXRlICovCisJZW5kID0gZXAtPmR1bW15OworCWVwLT5kdW1teSA9IHJlcS0+dGQ7CisJcmVxLT50ZCA9IGVuZDsKKworCXRtcCA9IGVwLT50ZF9kbWE7CisJZXAtPnRkX2RtYSA9IHJlcS0+dGRfZG1hOworCXJlcS0+dGRfZG1hID0gdG1wOworCisJZW5kLT5kbWFkZXNjID0gY3B1X3RvX2xlMzIgKGVwLT50ZF9kbWEpOworCisJZmlsbF9kbWFfZGVzYyAoZXAsIHJlcSwgdmFsaWQpOworfQorCitzdGF0aWMgdm9pZAorZG9uZSAoc3RydWN0IG5ldDIyODBfZXAgKmVwLCBzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0ICpyZXEsIGludCBzdGF0dXMpCit7CisJc3RydWN0IG5ldDIyODAJCSpkZXY7CisJdW5zaWduZWQJCXN0b3BwZWQgPSBlcC0+c3RvcHBlZDsKKworCWxpc3RfZGVsX2luaXQgKCZyZXEtPnF1ZXVlKTsKKworCWlmIChyZXEtPnJlcS5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKQorCQlyZXEtPnJlcS5zdGF0dXMgPSBzdGF0dXM7CisJZWxzZQorCQlzdGF0dXMgPSByZXEtPnJlcS5zdGF0dXM7CisKKwlkZXYgPSBlcC0+ZGV2OworCWlmIChyZXEtPm1hcHBlZCkgeworCQlwY2lfdW5tYXBfc2luZ2xlIChkZXYtPnBkZXYsIHJlcS0+cmVxLmRtYSwgcmVxLT5yZXEubGVuZ3RoLAorCQkJZXAtPmlzX2luID8gUENJX0RNQV9UT0RFVklDRSA6IFBDSV9ETUFfRlJPTURFVklDRSk7CisJCXJlcS0+cmVxLmRtYSA9IERNQV9BRERSX0lOVkFMSUQ7CisJCXJlcS0+bWFwcGVkID0gMDsKKwl9CisKKwlpZiAoc3RhdHVzICYmIHN0YXR1cyAhPSAtRVNIVVRET1dOKQorCQlWREVCVUcgKGRldiwgImNvbXBsZXRlICVzIHJlcSAlcCBzdGF0ICVkIGxlbiAldS8ldVxuIiwKKwkJCWVwLT5lcC5uYW1lLCAmcmVxLT5yZXEsIHN0YXR1cywKKwkJCXJlcS0+cmVxLmFjdHVhbCwgcmVxLT5yZXEubGVuZ3RoKTsKKworCS8qIGRvbid0IG1vZGlmeSBxdWV1ZSBoZWFkcyBkdXJpbmcgY29tcGxldGlvbiBjYWxsYmFjayAqLworCWVwLT5zdG9wcGVkID0gMTsKKwlzcGluX3VubG9jayAoJmRldi0+bG9jayk7CisJcmVxLT5yZXEuY29tcGxldGUgKCZlcC0+ZXAsICZyZXEtPnJlcSk7CisJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKKwllcC0+c3RvcHBlZCA9IHN0b3BwZWQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQKK25ldDIyODBfcXVldWUgKHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxLCBpbnQgZ2ZwX2ZsYWdzKQoreworCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QJKnJlcTsKKwlzdHJ1Y3QgbmV0MjI4MF9lcAkqZXA7CisJc3RydWN0IG5ldDIyODAJCSpkZXY7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwkvKiB3ZSBhbHdheXMgcmVxdWlyZSBhIGNwdS12aWV3IGJ1ZmZlciwgc28gdGhhdCB3ZSBjYW4KKwkgKiBhbHdheXMgdXNlIHBpbyAoYXMgZmFsbGJhY2sgb3Igd2hhdGV2ZXIpLgorCSAqLworCXJlcSA9IGNvbnRhaW5lcl9vZiAoX3JlcSwgc3RydWN0IG5ldDIyODBfcmVxdWVzdCwgcmVxKTsKKwlpZiAoIV9yZXEgfHwgIV9yZXEtPmNvbXBsZXRlIHx8ICFfcmVxLT5idWYKKwkJCXx8ICFsaXN0X2VtcHR5ICgmcmVxLT5xdWV1ZSkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChfcmVxLT5sZW5ndGggPiAofjAgJiBETUFfQllURV9DT1VOVF9NQVNLKSkKKwkJcmV0dXJuIC1FRE9NOworCWVwID0gY29udGFpbmVyX29mIChfZXAsIHN0cnVjdCBuZXQyMjgwX2VwLCBlcCk7CisJaWYgKCFfZXAgfHwgKCFlcC0+ZGVzYyAmJiBlcC0+bnVtICE9IDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlkZXYgPSBlcC0+ZGV2OworCWlmICghZGV2LT5kcml2ZXIgfHwgZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pCisJCXJldHVybiAtRVNIVVRET1dOOworCisJLyogRklYTUUgaW1wbGVtZW50IFBJTyBmYWxsYmFjayBmb3IgWkxQcyB3aXRoIERNQSAqLworCWlmIChlcC0+ZG1hICYmIF9yZXEtPmxlbmd0aCA9PSAwKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwkvKiBzZXQgdXAgZG1hIG1hcHBpbmcgaW4gY2FzZSB0aGUgY2FsbGVyIGRpZG4ndCAqLworCWlmIChlcC0+ZG1hICYmIF9yZXEtPmRtYSA9PSBETUFfQUREUl9JTlZBTElEKSB7CisJCV9yZXEtPmRtYSA9IHBjaV9tYXBfc2luZ2xlIChkZXYtPnBkZXYsIF9yZXEtPmJ1ZiwgX3JlcS0+bGVuZ3RoLAorCQkJZXAtPmlzX2luID8gUENJX0RNQV9UT0RFVklDRSA6IFBDSV9ETUFfRlJPTURFVklDRSk7CisJCXJlcS0+bWFwcGVkID0gMTsKKwl9CisKKyNpZiAwCisJVkRFQlVHIChkZXYsICIlcyBxdWV1ZSByZXEgJXAsIGxlbiAlZCBidWYgJXBcbiIsCisJCQlfZXAtPm5hbWUsIF9yZXEsIF9yZXEtPmxlbmd0aCwgX3JlcS0+YnVmKTsKKyNlbmRpZgorCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCV9yZXEtPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKwlfcmVxLT5hY3R1YWwgPSAwOworCisJLyoga2lja3N0YXJ0IHRoaXMgaS9vIHF1ZXVlPyAqLworCWlmIChsaXN0X2VtcHR5ICgmZXAtPnF1ZXVlKSAmJiAhZXAtPnN0b3BwZWQpIHsKKwkJLyogdXNlIERNQSBpZiB0aGUgZW5kcG9pbnQgc3VwcG9ydHMgaXQsIGVsc2UgcGlvICovCisJCWlmIChlcC0+ZG1hKQorCQkJc3RhcnRfZG1hIChlcCwgcmVxKTsKKwkJZWxzZSB7CisJCQkvKiBtYXliZSB0aGVyZSdzIG5vIGNvbnRyb2wgZGF0YSwganVzdCBzdGF0dXMgYWNrICovCisJCQlpZiAoZXAtPm51bSA9PSAwICYmIF9yZXEtPmxlbmd0aCA9PSAwKSB7CisJCQkJYWxsb3dfc3RhdHVzIChlcCk7CisJCQkJZG9uZSAoZXAsIHJlcSwgMCk7CisJCQkJVkRFQlVHIChkZXYsICIlcyBzdGF0dXMgYWNrXG4iLCBlcC0+ZXAubmFtZSk7CisJCQkJZ290byBkb25lOworCQkJfQorCisJCQkvKiBQSU8gLi4uIHN0dWZmIHRoZSBmaWZvLCBvciB1bmJsb2NrIGl0LiAgKi8KKwkJCWlmIChlcC0+aXNfaW4pCisJCQkJd3JpdGVfZmlmbyAoZXAsIF9yZXEpOworCQkJZWxzZSBpZiAobGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkpIHsKKwkJCQl1MzIJczsKKworCQkJCS8qIE9VVCBGSUZPIG1pZ2h0IGhhdmUgcGFja2V0KHMpIGJ1ZmZlcmVkICovCisJCQkJcyA9IHJlYWRsICgmZXAtPnJlZ3MtPmVwX3N0YXQpOworCQkJCWlmICgocyAmICgxIDw8IEZJRk9fRU1QVFkpKSA9PSAwKSB7CisJCQkJCS8qIG5vdGU6ICBfcmVxLT5zaG9ydF9ub3Rfb2sgaXMKKwkJCQkJICogaWdub3JlZCBoZXJlIHNpbmNlIFBJTyBfYWx3YXlzXworCQkJCQkgKiBzdG9wcyBxdWV1ZSBhZHZhbmNlIGhlcmUsIGFuZAorCQkJCQkgKiBfcmVxLT5zdGF0dXMgZG9lc24ndCBjaGFuZ2UgZm9yCisJCQkJCSAqIHNob3J0IHJlYWRzIChvbmx5IF9yZXEtPmFjdHVhbCkKKwkJCQkJICovCisJCQkJCWlmIChyZWFkX2ZpZm8gKGVwLCByZXEpKSB7CisJCQkJCQlkb25lIChlcCwgcmVxLCAwKTsKKwkJCQkJCWlmIChlcC0+bnVtID09IDApCisJCQkJCQkJYWxsb3dfc3RhdHVzIChlcCk7CisJCQkJCQkvKiBkb24ndCBxdWV1ZSBpdCAqLworCQkJCQkJcmVxID0gTlVMTDsKKwkJCQkJfSBlbHNlCisJCQkJCQlzID0gcmVhZGwgKCZlcC0+cmVncy0+ZXBfc3RhdCk7CisJCQkJfQorCisJCQkJLyogZG9uJ3QgTkFLLCBsZXQgdGhlIGZpZm8gZmlsbCAqLworCQkJCWlmIChyZXEgJiYgKHMgJiAoMSA8PCBOQUtfT1VUX1BBQ0tFVFMpKSkKKwkJCQkJd3JpdGVsICgoMSA8PCBDTEVBUl9OQUtfT1VUX1BBQ0tFVFMpLAorCQkJCQkJCSZlcC0+cmVncy0+ZXBfcnNwKTsKKwkJCX0KKwkJfQorCisJfSBlbHNlIGlmIChlcC0+ZG1hKSB7CisJCWludAl2YWxpZCA9IDE7CisKKwkJaWYgKGVwLT5pc19pbikgeworCQkJaW50CWV4cGVjdDsKKworCQkJLyogcHJldmVudGluZyBtYWdpYyB6bHBzIGlzIHBlci1lbmdpbmUgc3RhdGUsIG5vdAorCQkJICogcGVyLXRyYW5zZmVyOyBpcnEgbG9naWMgbXVzdCByZWNvdmVyIGhpY2N1cHMuCisJCQkgKi8KKwkJCWV4cGVjdCA9IGxpa2VseSAocmVxLT5yZXEuemVybworCQkJCXx8IChyZXEtPnJlcS5sZW5ndGggJSBlcC0+ZXAubWF4cGFja2V0KSAhPSAwKTsKKwkJCWlmIChleHBlY3QgIT0gZXAtPmluX2ZpZm9fdmFsaWRhdGUpCisJCQkJdmFsaWQgPSAwOworCQl9CisJCXF1ZXVlX2RtYSAoZXAsIHJlcSwgdmFsaWQpOworCisJfSAvKiBlbHNlIHRoZSBpcnEgaGFuZGxlciBhZHZhbmNlcyB0aGUgcXVldWUuICovCisKKwlpZiAocmVxKQorCQlsaXN0X2FkZF90YWlsICgmcmVxLT5xdWV1ZSwgJmVwLT5xdWV1ZSk7Citkb25lOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCS8qIHBjaSB3cml0ZXMgbWF5IHN0aWxsIGJlIHBvc3RlZCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9kb25lICgKKwlzdHJ1Y3QgbmV0MjI4MF9lcCAqZXAsCisJc3RydWN0IG5ldDIyODBfcmVxdWVzdCAqcmVxLAorCXUzMiBkbWFjb3VudCwKKwlpbnQgc3RhdHVzCispCit7CisJcmVxLT5yZXEuYWN0dWFsID0gcmVxLT5yZXEubGVuZ3RoIC0gKERNQV9CWVRFX0NPVU5UX01BU0sgJiBkbWFjb3VudCk7CisJZG9uZSAoZXAsIHJlcSwgc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgcmVzdGFydF9kbWEgKHN0cnVjdCBuZXQyMjgwX2VwICplcCk7CisKK3N0YXRpYyB2b2lkIHNjYW5fZG1hX2NvbXBsZXRpb25zIChzdHJ1Y3QgbmV0MjI4MF9lcCAqZXApCit7CisJLyogb25seSBsb29rIGF0IGRlc2NyaXB0b3JzIHRoYXQgd2VyZSAibmF0dXJhbGx5IiByZXRpcmVkLAorCSAqIHNvIGZpZm8gYW5kIGxpc3QgaGVhZCBzdGF0ZSB3b24ndCBtYXR0ZXIKKwkgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKSB7CisJCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QJKnJlcTsKKwkJdTMyCQkJdG1wOworCisJCXJlcSA9IGxpc3RfZW50cnkgKGVwLT5xdWV1ZS5uZXh0LAorCQkJCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QsIHF1ZXVlKTsKKwkJaWYgKCFyZXEtPnZhbGlkKQorCQkJYnJlYWs7CisJCXJtYiAoKTsKKwkJdG1wID0gbGUzMl90b19jcHVwICgmcmVxLT50ZC0+ZG1hY291bnQpOworCQlpZiAoKHRtcCAmICgxIDw8IFZBTElEX0JJVCkpICE9IDApCisJCQlicmVhazsKKworCQkvKiBTSE9SVF9QQUNLRVRfVFJBTlNGRVJSRURfSU5URVJSVVBUIGhhbmRsZXMgInVzYi1zaG9ydCIKKwkJICogY2FzZXMgd2hlcmUgRE1BIG11c3QgYmUgYWJvcnRlZDsgdGhpcyBjb2RlIGhhbmRsZXMKKwkJICogYWxsIG5vbi1hYm9ydCBETUEgY29tcGxldGlvbnMuCisJCSAqLworCQlpZiAodW5saWtlbHkgKHJlcS0+dGQtPmRtYWRlc2MgPT0gMCkpIHsKKwkJCS8qIHBhcmFub2lhICovCisJCQl0bXAgPSByZWFkbCAoJmVwLT5kbWEtPmRtYWNvdW50KTsKKwkJCWlmICh0bXAgJiBETUFfQllURV9DT1VOVF9NQVNLKQorCQkJCWJyZWFrOworCQkJLyogc2luZ2xlIHRyYW5zZmVyIG1vZGUgKi8KKwkJCWRtYV9kb25lIChlcCwgcmVxLCB0bXAsIDApOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoIWVwLT5pc19pbgorCQkJCSYmIChyZXEtPnJlcS5sZW5ndGggJSBlcC0+ZXAubWF4cGFja2V0KSAhPSAwKSB7CisJCQl0bXAgPSByZWFkbCAoJmVwLT5yZWdzLT5lcF9zdGF0KTsKKworCQkJLyogQVZPSUQgVFJPVUJMRSBIRVJFIGJ5IG5vdCBpc3N1aW5nIHNob3J0IHJlYWRzIGZyb20KKwkJCSAqIHlvdXIgZ2FkZ2V0IGRyaXZlci4gIFRoYXQgaGVscHMgYXZvaWRzIGVycmF0YSAwMTIxLAorCQkJICogMDEyMiwgYW5kIDAxMjQ7IG5vdCBhbGwgY2FzZXMgdHJpZ2dlciB0aGUgd2FybmluZy4KKwkJCSAqLworCQkJaWYgKCh0bXAgJiAoMSA8PCBOQUtfT1VUX1BBQ0tFVFMpKSA9PSAwKSB7CisJCQkJV0FSTiAoZXAtPmRldiwgIiVzIGxvc3QgcGFja2V0IHN5bmMhXG4iLAorCQkJCQkJZXAtPmVwLm5hbWUpOworCQkJCXJlcS0+cmVxLnN0YXR1cyA9IC1FT1ZFUkZMT1c7CisJCQl9IGVsc2UgaWYgKCh0bXAgPSByZWFkbCAoJmVwLT5yZWdzLT5lcF9hdmFpbCkpICE9IDApIHsKKwkJCQkvKiBmaWZvIGdldHMgZmx1c2hlZCBsYXRlciAqLworCQkJCWVwLT5vdXRfb3ZlcmZsb3cgPSAxOworCQkJCURFQlVHIChlcC0+ZGV2LCAiJXMgZG1hLCBkaXNjYXJkICVkIGxlbiAlZFxuIiwKKwkJCQkJCWVwLT5lcC5uYW1lLCB0bXAsCisJCQkJCQlyZXEtPnJlcS5sZW5ndGgpOworCQkJCXJlcS0+cmVxLnN0YXR1cyA9IC1FT1ZFUkZMT1c7CisJCQl9CisJCX0KKwkJZG1hX2RvbmUgKGVwLCByZXEsIHRtcCwgMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCByZXN0YXJ0X2RtYSAoc3RydWN0IG5ldDIyODBfZXAgKmVwKQoreworCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QJKnJlcTsKKwl1MzIJCQlkbWFjdGwgPSBkbWFjdGxfZGVmYXVsdDsKKworCWlmIChlcC0+c3RvcHBlZCkKKwkJcmV0dXJuOworCXJlcSA9IGxpc3RfZW50cnkgKGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0LCBxdWV1ZSk7CisKKwlpZiAoIXVzZV9kbWFfY2hhaW5pbmcpIHsKKwkJc3RhcnRfZG1hIChlcCwgcmVxKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHRoZSAyMjgwIHdpbGwgYmUgcHJvY2Vzc2luZyB0aGUgcXVldWUgdW5sZXNzIHF1ZXVlIGhpY2N1cHMgYWZ0ZXIKKwkgKiB0aGUgcHJldmlvdXMgdHJhbnNmZXI6CisJICogIElOOiAgIHdhbnRlZCBhdXRvbWFnaWMgemxwLCBoZWFkIGRvZXNuJ3QgKG9yIHZpY2UgdmVyc2EpCisJICogICAgICAgIERNQV9GSUZPX1ZBTElEQVRFIGRvZXNuJ3QgaW5pdCBmcm9tIGRtYSBkZXNjcmlwdG9ycy4KKwkgKiAgT1VUOiAgd2FzICJ1c2Itc2hvcnQiLCB3ZSBtdXN0IHJlc3RhcnQuCisJICovCisJaWYgKGVwLT5pc19pbiAmJiAhcmVxLT52YWxpZCkgeworCQlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0CSplbnRyeSwgKnByZXYgPSBOVUxMOworCQlpbnQJCQlyZXFtb2RlLCBkb25lID0gMDsKKworCQlERUJVRyAoZXAtPmRldiwgIiVzIGRtYSBoaWNjdXAgdGQgJXBcbiIsIGVwLT5lcC5uYW1lLCByZXEtPnRkKTsKKwkJZXAtPmluX2ZpZm9fdmFsaWRhdGUgPSBsaWtlbHkgKHJlcS0+cmVxLnplcm8KKwkJCXx8IChyZXEtPnJlcS5sZW5ndGggJSBlcC0+ZXAubWF4cGFja2V0KSAhPSAwKTsKKwkJaWYgKGVwLT5pbl9maWZvX3ZhbGlkYXRlKQorCQkJZG1hY3RsIHw9ICgxIDw8IERNQV9GSUZPX1ZBTElEQVRFKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSAoZW50cnksICZlcC0+cXVldWUsIHF1ZXVlKSB7CisJCQl1MzIJCWRtYWNvdW50OworCisJCQlpZiAoZW50cnkgPT0gcmVxKQorCQkJCWNvbnRpbnVlOworCQkJZG1hY291bnQgPSBlbnRyeS0+dGQtPmRtYWNvdW50OworCQkJaWYgKCFkb25lKSB7CisJCQkJcmVxbW9kZSA9IGxpa2VseSAoZW50cnktPnJlcS56ZXJvCisJCQkJCXx8IChlbnRyeS0+cmVxLmxlbmd0aAorCQkJCQkJJSBlcC0+ZXAubWF4cGFja2V0KSAhPSAwKTsKKwkJCQlpZiAocmVxbW9kZSA9PSBlcC0+aW5fZmlmb192YWxpZGF0ZSkgeworCQkJCQllbnRyeS0+dmFsaWQgPSAxOworCQkJCQlkbWFjb3VudCB8PSB2YWxpZF9iaXQ7CisJCQkJCWVudHJ5LT50ZC0+ZG1hY291bnQgPSBkbWFjb3VudDsKKwkJCQkJcHJldiA9IGVudHJ5OworCQkJCQljb250aW51ZTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBmb3JjZSBhIGhpY2N1cCAqLworCQkJCQlwcmV2LT50ZC0+ZG1hY291bnQgfD0gZG1hX2RvbmVfaWU7CisJCQkJCWRvbmUgPSAxOworCQkJCX0KKwkJCX0KKworCQkJLyogd2FsayB0aGUgcmVzdCBvZiB0aGUgcXVldWUgc28gdW5saW5rcyBiZWhhdmUgKi8KKwkJCWVudHJ5LT52YWxpZCA9IDA7CisJCQlkbWFjb3VudCAmPSB+dmFsaWRfYml0OworCQkJZW50cnktPnRkLT5kbWFjb3VudCA9IGRtYWNvdW50OworCQkJcHJldiA9IGVudHJ5OworCQl9CisJfQorCisJd3JpdGVsICgwLCAmZXAtPmRtYS0+ZG1hY3RsKTsKKwlzdGFydF9xdWV1ZSAoZXAsIGRtYWN0bCwgcmVxLT50ZF9kbWEpOworfQorCitzdGF0aWMgdm9pZCBhYm9ydF9kbWEgKHN0cnVjdCBuZXQyMjgwX2VwICplcCkKK3sKKwkvKiBhYm9ydCB0aGUgY3VycmVudCB0cmFuc2ZlciAqLworCWlmIChsaWtlbHkgKCFsaXN0X2VtcHR5ICgmZXAtPnF1ZXVlKSkpIHsKKwkJLyogRklYTUUgd29yayBhcm91bmQgZXJyYXRhIDAxMjEsIDAxMjIsIDAxMjQgKi8KKwkJd3JpdGVsICgoMSA8PCBETUFfQUJPUlQpLCAmZXAtPmRtYS0+ZG1hc3RhdCk7CisJCXNwaW5fc3RvcF9kbWEgKGVwLT5kbWEpOworCX0gZWxzZQorCQlzdG9wX2RtYSAoZXAtPmRtYSk7CisJc2Nhbl9kbWFfY29tcGxldGlvbnMgKGVwKTsKK30KKworLyogZGVxdWV1ZSBBTEwgcmVxdWVzdHMgKi8KK3N0YXRpYyB2b2lkIG51a2UgKHN0cnVjdCBuZXQyMjgwX2VwICplcCkKK3sKKwlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0CSpyZXE7CisKKwkvKiBjYWxsZWQgd2l0aCBzcGlubG9jayBoZWxkICovCisJZXAtPnN0b3BwZWQgPSAxOworCWlmIChlcC0+ZG1hKQorCQlhYm9ydF9kbWEgKGVwKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKSB7CisJCXJlcSA9IGxpc3RfZW50cnkgKGVwLT5xdWV1ZS5uZXh0LAorCQkJCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QsCisJCQkJcXVldWUpOworCQlkb25lIChlcCwgcmVxLCAtRVNIVVRET1dOKTsKKwl9Cit9CisKKy8qIGRlcXVldWUgSlVTVCBPTkUgcmVxdWVzdCAqLworc3RhdGljIGludCBuZXQyMjgwX2RlcXVldWUgKHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBuZXQyMjgwX2VwCSplcDsKKwlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0CSpyZXE7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJdTMyCQkJZG1hY3RsOworCWludAkJCXN0b3BwZWQ7CisKKwllcCA9IGNvbnRhaW5lcl9vZiAoX2VwLCBzdHJ1Y3QgbmV0MjI4MF9lcCwgZXApOworCWlmICghX2VwIHx8ICghZXAtPmRlc2MgJiYgZXAtPm51bSAhPSAwKSB8fCAhX3JlcSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmVwLT5kZXYtPmxvY2ssIGZsYWdzKTsKKwlzdG9wcGVkID0gZXAtPnN0b3BwZWQ7CisKKwkvKiBxdWllc2NlIGRtYSB3aGlsZSB3ZSBwYXRjaCB0aGUgcXVldWUgKi8KKwlkbWFjdGwgPSAwOworCWVwLT5zdG9wcGVkID0gMTsKKwlpZiAoZXAtPmRtYSkgeworCQlkbWFjdGwgPSByZWFkbCAoJmVwLT5kbWEtPmRtYWN0bCk7CisJCS8qIFdBUk5JTkcgZXJyYXR1bSAwMTI3IG1heSBraWNrIGluIC4uLiAqLworCQlzdG9wX2RtYSAoZXAtPmRtYSk7CisJCXNjYW5fZG1hX2NvbXBsZXRpb25zIChlcCk7CisJfQorCisJLyogbWFrZSBzdXJlIGl0J3Mgc3RpbGwgcXVldWVkIG9uIHRoaXMgZW5kcG9pbnQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7CisJCWlmICgmcmVxLT5yZXEgPT0gX3JlcSkKKwkJCWJyZWFrOworCX0KKwlpZiAoJnJlcS0+cmVxICE9IF9yZXEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVwLT5kZXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogcXVldWUgaGVhZCBtYXkgYmUgcGFydGlhbGx5IGNvbXBsZXRlLiAqLworCWlmIChlcC0+cXVldWUubmV4dCA9PSAmcmVxLT5xdWV1ZSkgeworCQlpZiAoZXAtPmRtYSkgeworCQkJREVCVUcgKGVwLT5kZXYsICJ1bmxpbmsgKCVzKSBkbWFcbiIsIF9lcC0+bmFtZSk7CisJCQlfcmVxLT5zdGF0dXMgPSAtRUNPTk5SRVNFVDsKKwkJCWFib3J0X2RtYSAoZXApOworCQkJaWYgKGxpa2VseSAoZXAtPnF1ZXVlLm5leHQgPT0gJnJlcS0+cXVldWUpKSB7CisJCQkJLy8gTk9URTogbWlzcmVwb3J0cyBzaW5nbGUtdHJhbnNmZXIgbW9kZQorCQkJCXJlcS0+dGQtPmRtYWNvdW50ID0gMDsJLyogaW52YWxpZGF0ZSAqLworCQkJCWRtYV9kb25lIChlcCwgcmVxLAorCQkJCQlyZWFkbCAoJmVwLT5kbWEtPmRtYWNvdW50KSwKKwkJCQkJLUVDT05OUkVTRVQpOworCQkJfQorCQl9IGVsc2UgeworCQkJREVCVUcgKGVwLT5kZXYsICJ1bmxpbmsgKCVzKSBwaW9cbiIsIF9lcC0+bmFtZSk7CisJCQlkb25lIChlcCwgcmVxLCAtRUNPTk5SRVNFVCk7CisJCX0KKwkJcmVxID0gTlVMTDsKKworCS8qIHBhdGNoIHVwIGhhcmR3YXJlIGNoYWluaW5nIGRhdGEgKi8KKwl9IGVsc2UgaWYgKGVwLT5kbWEgJiYgdXNlX2RtYV9jaGFpbmluZykgeworCQlpZiAocmVxLT5xdWV1ZS5wcmV2ID09IGVwLT5xdWV1ZS5uZXh0KSB7CisJCQl3cml0ZWwgKGxlMzJfdG9fY3B1IChyZXEtPnRkLT5kbWFkZXNjKSwKKwkJCQkmZXAtPmRtYS0+ZG1hZGVzYyk7CisJCQlpZiAocmVxLT50ZC0+ZG1hY291bnQgJiBkbWFfZG9uZV9pZSkKKwkJCQl3cml0ZWwgKHJlYWRsICgmZXAtPmRtYS0+ZG1hY291bnQpCisJCQkJCQl8IGRtYV9kb25lX2llLAorCQkJCQkmZXAtPmRtYS0+ZG1hY291bnQpOworCQl9IGVsc2UgeworCQkJc3RydWN0IG5ldDIyODBfcmVxdWVzdAkqcHJldjsKKworCQkJcHJldiA9IGxpc3RfZW50cnkgKHJlcS0+cXVldWUucHJldiwKKwkJCQlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0LCBxdWV1ZSk7CisJCQlwcmV2LT50ZC0+ZG1hZGVzYyA9IHJlcS0+dGQtPmRtYWRlc2M7CisJCQlpZiAocmVxLT50ZC0+ZG1hY291bnQgJiBkbWFfZG9uZV9pZSkKKwkJCQlwcmV2LT50ZC0+ZG1hY291bnQgfD0gZG1hX2RvbmVfaWU7CisJCX0KKwl9CisKKwlpZiAocmVxKQorCQlkb25lIChlcCwgcmVxLCAtRUNPTk5SRVNFVCk7CisJZXAtPnN0b3BwZWQgPSBzdG9wcGVkOworCisJaWYgKGVwLT5kbWEpIHsKKwkJLyogdHVybiBvZmYgZG1hIG9uIGluYWN0aXZlIHF1ZXVlcyAqLworCQlpZiAobGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkpCisJCQlzdG9wX2RtYSAoZXAtPmRtYSk7CisJCWVsc2UgaWYgKCFlcC0+c3RvcHBlZCkgeworCQkJLyogcmVzdW1lIGN1cnJlbnQgcmVxdWVzdCwgb3Igc3RhcnQgbmV3IG9uZSAqLworCQkJaWYgKHJlcSkKKwkJCQl3cml0ZWwgKGRtYWN0bCwgJmVwLT5kbWEtPmRtYWN0bCk7CisJCQllbHNlCisJCQkJc3RhcnRfZG1hIChlcCwgbGlzdF9lbnRyeSAoZXAtPnF1ZXVlLm5leHQsCisJCQkJCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QsIHF1ZXVlKSk7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG5ldDIyODBfZmlmb19zdGF0dXMgKHN0cnVjdCB1c2JfZXAgKl9lcCk7CisKK3N0YXRpYyBpbnQKK25ldDIyODBfc2V0X2hhbHQgKHN0cnVjdCB1c2JfZXAgKl9lcCwgaW50IHZhbHVlKQoreworCXN0cnVjdCBuZXQyMjgwX2VwCSplcDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlpbnQJCQlyZXR2YWwgPSAwOworCisJZXAgPSBjb250YWluZXJfb2YgKF9lcCwgc3RydWN0IG5ldDIyODBfZXAsIGVwKTsKKwlpZiAoIV9lcCB8fCAoIWVwLT5kZXNjICYmIGVwLT5udW0gIT0gMCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghZXAtPmRldi0+ZHJpdmVyIHx8IGVwLT5kZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJcmV0dXJuIC1FU0hVVERPV047CisJaWYgKGVwLT5kZXNjIC8qIG5vdCBlcDAgKi8gJiYgKGVwLT5kZXNjLT5ibUF0dHJpYnV0ZXMgJiAweDAzKQorCQkJCQkJPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmVwLT5kZXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoIWxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKQorCQlyZXR2YWwgPSAtRUFHQUlOOworCWVsc2UgaWYgKGVwLT5pc19pbiAmJiB2YWx1ZSAmJiBuZXQyMjgwX2ZpZm9fc3RhdHVzIChfZXApICE9IDApCisJCXJldHZhbCA9IC1FQUdBSU47CisJZWxzZSB7CisJCVZERUJVRyAoZXAtPmRldiwgIiVzICVzIGhhbHRcbiIsIF9lcC0+bmFtZSwKKwkJCQl2YWx1ZSA/ICJzZXQiIDogImNsZWFyIik7CisJCS8qIHNldC9jbGVhciwgdGhlbiBzeW5jaCBtZW1vcnkgdmlld3Mgd2l0aCB0aGUgZGV2aWNlICovCisJCWlmICh2YWx1ZSkgeworCQkJaWYgKGVwLT5udW0gPT0gMCkKKwkJCQllcC0+ZGV2LT5wcm90b2NvbF9zdGFsbCA9IDE7CisJCQllbHNlCisJCQkJc2V0X2hhbHQgKGVwKTsKKwkJfSBlbHNlCisJCQljbGVhcl9oYWx0IChlcCk7CisJCSh2b2lkKSByZWFkbCAoJmVwLT5yZWdzLT5lcF9yc3ApOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludAorbmV0MjI4MF9maWZvX3N0YXR1cyAoc3RydWN0IHVzYl9lcCAqX2VwKQoreworCXN0cnVjdCBuZXQyMjgwX2VwCSplcDsKKwl1MzIJCQlhdmFpbDsKKworCWVwID0gY29udGFpbmVyX29mIChfZXAsIHN0cnVjdCBuZXQyMjgwX2VwLCBlcCk7CisJaWYgKCFfZXAgfHwgKCFlcC0+ZGVzYyAmJiBlcC0+bnVtICE9IDApKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIWVwLT5kZXYtPmRyaXZlciB8fCBlcC0+ZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pCisJCXJldHVybiAtRVNIVVRET1dOOworCisJYXZhaWwgPSByZWFkbCAoJmVwLT5yZWdzLT5lcF9hdmFpbCkgJiAoKDEgPDwgMTIpIC0gMSk7CisJaWYgKGF2YWlsID4gZXAtPmZpZm9fc2l6ZSkKKwkJcmV0dXJuIC1FT1ZFUkZMT1c7CisJaWYgKGVwLT5pc19pbikKKwkJYXZhaWwgPSBlcC0+Zmlmb19zaXplIC0gYXZhaWw7CisJcmV0dXJuIGF2YWlsOworfQorCitzdGF0aWMgdm9pZAorbmV0MjI4MF9maWZvX2ZsdXNoIChzdHJ1Y3QgdXNiX2VwICpfZXApCit7CisJc3RydWN0IG5ldDIyODBfZXAJKmVwOworCisJZXAgPSBjb250YWluZXJfb2YgKF9lcCwgc3RydWN0IG5ldDIyODBfZXAsIGVwKTsKKwlpZiAoIV9lcCB8fCAoIWVwLT5kZXNjICYmIGVwLT5udW0gIT0gMCkpCisJCXJldHVybjsKKwlpZiAoIWVwLT5kZXYtPmRyaXZlciB8fCBlcC0+ZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pCisJCXJldHVybjsKKworCXdyaXRlbCAoKDEgPDwgRklGT19GTFVTSCksICZlcC0+cmVncy0+ZXBfc3RhdCk7CisJKHZvaWQpIHJlYWRsICgmZXAtPnJlZ3MtPmVwX3JzcCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VwX29wcyBuZXQyMjgwX2VwX29wcyA9IHsKKwkuZW5hYmxlCQk9IG5ldDIyODBfZW5hYmxlLAorCS5kaXNhYmxlCT0gbmV0MjI4MF9kaXNhYmxlLAorCisJLmFsbG9jX3JlcXVlc3QJPSBuZXQyMjgwX2FsbG9jX3JlcXVlc3QsCisJLmZyZWVfcmVxdWVzdAk9IG5ldDIyODBfZnJlZV9yZXF1ZXN0LAorCisJLmFsbG9jX2J1ZmZlcgk9IG5ldDIyODBfYWxsb2NfYnVmZmVyLAorCS5mcmVlX2J1ZmZlcgk9IG5ldDIyODBfZnJlZV9idWZmZXIsCisKKwkucXVldWUJCT0gbmV0MjI4MF9xdWV1ZSwKKwkuZGVxdWV1ZQk9IG5ldDIyODBfZGVxdWV1ZSwKKworCS5zZXRfaGFsdAk9IG5ldDIyODBfc2V0X2hhbHQsCisJLmZpZm9fc3RhdHVzCT0gbmV0MjI4MF9maWZvX3N0YXR1cywKKwkuZmlmb19mbHVzaAk9IG5ldDIyODBfZmlmb19mbHVzaCwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgbmV0MjI4MF9nZXRfZnJhbWUgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0KQoreworCXN0cnVjdCBuZXQyMjgwCQkqZGV2OworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXUxNgkJCXJldHZhbDsKKworCWlmICghX2dhZGdldCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJZGV2ID0gY29udGFpbmVyX29mIChfZ2FkZ2V0LCBzdHJ1Y3QgbmV0MjI4MCwgZ2FkZ2V0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCXJldHZhbCA9IGdldF9pZHhfcmVnIChkZXYtPnJlZ3MsIFJFR19GUkFNRSkgJiAweDAzZmY7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgbmV0MjI4MF93YWtldXAgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0KQoreworCXN0cnVjdCBuZXQyMjgwCQkqZGV2OworCXUzMgkJCXRtcDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCWlmICghX2dhZGdldCkKKwkJcmV0dXJuIDA7CisJZGV2ID0gY29udGFpbmVyX29mIChfZ2FkZ2V0LCBzdHJ1Y3QgbmV0MjI4MCwgZ2FkZ2V0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZGV2LT5sb2NrLCBmbGFncyk7CisJdG1wID0gcmVhZGwgKCZkZXYtPnVzYi0+dXNiY3RsKTsKKwlpZiAodG1wICYgKDEgPDwgREVWSUNFX1JFTU9URV9XQUtFVVBfRU5BQkxFKSkKKwkJd3JpdGVsICgxIDw8IEdFTkVSQVRFX1JFU1VNRSwgJmRldi0+dXNiLT51c2JzdGF0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwkvKiBwY2kgd3JpdGVzIG1heSBzdGlsbCBiZSBwb3N0ZWQgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZXQyMjgwX3NldF9zZWxmcG93ZXJlZCAoc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbmV0MjI4MAkJKmRldjsKKwl1MzIJCQl0bXA7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwlpZiAoIV9nYWRnZXQpCisJCXJldHVybiAwOworCWRldiA9IGNvbnRhaW5lcl9vZiAoX2dhZGdldCwgc3RydWN0IG5ldDIyODAsIGdhZGdldCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCXRtcCA9IHJlYWRsICgmZGV2LT51c2ItPnVzYmN0bCk7CisJaWYgKHZhbHVlKQorCQl0bXAgfD0gKDEgPDwgU0VMRl9QT1dFUkVEX1NUQVRVUyk7CisJZWxzZQorCQl0bXAgJj0gfigxIDw8IFNFTEZfUE9XRVJFRF9TVEFUVVMpOworCXdyaXRlbCAodG1wLCAmZGV2LT51c2ItPnVzYmN0bCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmV0MjI4MF9wdWxsdXAoc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQsIGludCBpc19vbikKK3sKKwlzdHJ1Y3QgbmV0MjI4MCAgKmRldjsKKwl1MzIgICAgICAgICAgICAgdG1wOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKworCWlmICghX2dhZGdldCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJZGV2ID0gY29udGFpbmVyX29mIChfZ2FkZ2V0LCBzdHJ1Y3QgbmV0MjI4MCwgZ2FkZ2V0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZGV2LT5sb2NrLCBmbGFncyk7CisJdG1wID0gcmVhZGwgKCZkZXYtPnVzYi0+dXNiY3RsKTsKKwlkZXYtPnNvZnRjb25uZWN0ID0gKGlzX29uICE9IDApOworCWlmIChpc19vbikKKwkJdG1wIHw9ICgxIDw8IFVTQl9ERVRFQ1RfRU5BQkxFKTsKKwllbHNlCisJCXRtcCAmPSB+KDEgPDwgVVNCX0RFVEVDVF9FTkFCTEUpOworCXdyaXRlbCAodG1wLCAmZGV2LT51c2ItPnVzYmN0bCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2dhZGdldF9vcHMgbmV0MjI4MF9vcHMgPSB7CisJLmdldF9mcmFtZQk9IG5ldDIyODBfZ2V0X2ZyYW1lLAorCS53YWtldXAJCT0gbmV0MjI4MF93YWtldXAsCisJLnNldF9zZWxmcG93ZXJlZCA9IG5ldDIyODBfc2V0X3NlbGZwb3dlcmVkLAorCS5wdWxsdXAJCT0gbmV0MjI4MF9wdWxsdXAsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMKKworLyogRklYTUUgbW92ZSB0aGVzZSBpbnRvIHByb2NmcywgYW5kIHVzZSBzZXFfZmlsZS4KKyAqIFN5c2ZzIF9zdGlsbF8gZG9lc24ndCBiZWhhdmUgZm9yIGFyYml0cmFyaWx5IHNpemVkIGZpbGVzLAorICogYW5kIGFsc28gZG9lc24ndCBoZWxwIHByb2R1Y3RzIHVzaW5nIHRoaXMgd2l0aCAyLjQga2VybmVscy4KKyAqLworCisvKiAiZnVuY3Rpb24iIHN5c2ZzIGF0dHJpYnV0ZSAqLworc3RhdGljIHNzaXplX3QKK3Nob3dfZnVuY3Rpb24gKHN0cnVjdCBkZXZpY2UgKl9kZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0MjI4MAkqZGV2ID0gZGV2X2dldF9kcnZkYXRhIChfZGV2KTsKKworCWlmICghZGV2LT5kcml2ZXIKKwkJCXx8ICFkZXYtPmRyaXZlci0+ZnVuY3Rpb24KKwkJCXx8IHN0cmxlbiAoZGV2LT5kcml2ZXItPmZ1bmN0aW9uKSA+IFBBR0VfU0laRSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNjbnByaW50ZiAoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgZGV2LT5kcml2ZXItPmZ1bmN0aW9uKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUiAoZnVuY3Rpb24sIFNfSVJVR08sIHNob3dfZnVuY3Rpb24sIE5VTEwpOworCitzdGF0aWMgc3NpemVfdAorc2hvd19yZWdpc3RlcnMgKHN0cnVjdCBkZXZpY2UgKl9kZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0MjI4MAkJKmRldjsKKwljaGFyCQkJKm5leHQ7CisJdW5zaWduZWQJCXNpemUsIHQ7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJaW50CQkJaTsKKwl1MzIJCQl0MSwgdDI7CisJY2hhcgkJCSpzOworCisJZGV2ID0gZGV2X2dldF9kcnZkYXRhIChfZGV2KTsKKwluZXh0ID0gYnVmOworCXNpemUgPSBQQUdFX1NJWkU7CisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChkZXYtPmRyaXZlcikKKwkJcyA9IGRldi0+ZHJpdmVyLT5kcml2ZXIubmFtZTsKKwllbHNlCisJCXMgPSAiKG5vbmUpIjsKKworCS8qIE1haW4gQ29udHJvbCBSZWdpc3RlcnMgKi8KKwl0ID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAiJXMgdmVyc2lvbiAiIERSSVZFUl9WRVJTSU9OCisJCQkiLCBjaGlwcmV2ICUwNHgsIGRtYSAlc1xuXG4iCisJCQkiZGV2aW5pdCAlMDN4IGZpZm9jdGwgJTA4eCBnYWRnZXQgJyVzJ1xuIgorCQkJInBjaSBpcnFlbmIwICUwMnggaXJxZW5iMSAlMDh4ICIKKwkJCSJpcnFzdGF0MCAlMDR4IGlycXN0YXQxICUwOHhcbiIsCisJCQlkcml2ZXJfbmFtZSwgZGV2LT5jaGlwcmV2LAorCQkJdXNlX2RtYQorCQkJCT8gKHVzZV9kbWFfY2hhaW5pbmcgPyAiY2hhaW5pbmciIDogImVuYWJsZWQiKQorCQkJCTogImRpc2FibGVkIiwKKwkJCXJlYWRsICgmZGV2LT5yZWdzLT5kZXZpbml0KSwKKwkJCXJlYWRsICgmZGV2LT5yZWdzLT5maWZvY3RsKSwKKwkJCXMsCisJCQlyZWFkbCAoJmRldi0+cmVncy0+cGNpaXJxZW5iMCksCisJCQlyZWFkbCAoJmRldi0+cmVncy0+cGNpaXJxZW5iMSksCisJCQlyZWFkbCAoJmRldi0+cmVncy0+aXJxc3RhdDApLAorCQkJcmVhZGwgKCZkZXYtPnJlZ3MtPmlycXN0YXQxKSk7CisJc2l6ZSAtPSB0OworCW5leHQgKz0gdDsKKworCS8qIFVTQiBDb250cm9sIFJlZ2lzdGVycyAqLworCXQxID0gcmVhZGwgKCZkZXYtPnVzYi0+dXNiY3RsKTsKKwl0MiA9IHJlYWRsICgmZGV2LT51c2ItPnVzYnN0YXQpOworCWlmICh0MSAmICgxIDw8IFZCVVNfUElOKSkgeworCQlpZiAodDIgJiAoMSA8PCBISUdIX1NQRUVEKSkKKwkJCXMgPSAiaGlnaCBzcGVlZCI7CisJCWVsc2UgaWYgKGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKQorCQkJcyA9ICJwb3dlcmVkIjsKKwkJZWxzZQorCQkJcyA9ICJmdWxsIHNwZWVkIjsKKwkJLyogZnVsbCBzcGVlZCBiaXQgKDYpIG5vdCB3b3JraW5nPz8gKi8KKwl9IGVsc2UKKwkJCXMgPSAibm90IGF0dGFjaGVkIjsKKwl0ID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAorCQkJInN0ZHJzcCAlMDh4IHVzYmN0bCAlMDh4IHVzYnN0YXQgJTA4eCAiCisJCQkJImFkZHIgMHglMDJ4ICglcylcbiIsCisJCQlyZWFkbCAoJmRldi0+dXNiLT5zdGRyc3ApLCB0MSwgdDIsCisJCQlyZWFkbCAoJmRldi0+dXNiLT5vdXJhZGRyKSwgcyk7CisJc2l6ZSAtPSB0OworCW5leHQgKz0gdDsKKworCS8qIFBDSSBNYXN0ZXIgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworCS8qIERNQSBDb250cm9sIFJlZ2lzdGVycyAqLworCisJLyogQ29uZmlndXJhYmxlIEVQIENvbnRyb2wgUmVnaXN0ZXJzICovCisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgeworCQlzdHJ1Y3QgbmV0MjI4MF9lcAkqZXA7CisKKwkJZXAgPSAmZGV2LT5lcCBbaV07CisJCWlmIChpICYmICFlcC0+ZGVzYykKKwkJCWNvbnRpbnVlOworCisJCXQxID0gcmVhZGwgKCZlcC0+cmVncy0+ZXBfY2ZnKTsKKwkJdDIgPSByZWFkbCAoJmVwLT5yZWdzLT5lcF9yc3ApICYgMHhmZjsKKwkJdCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKKwkJCQkiXG4lc1x0Y2ZnICUwNXggcnNwICglMDJ4KSAlcyVzJXMlcyVzJXMlcyVzIgorCQkJCQkiaXJxZW5iICUwMnhcbiIsCisJCQkJZXAtPmVwLm5hbWUsIHQxLCB0MiwKKwkJCQkodDIgJiAoMSA8PCBDTEVBUl9OQUtfT1VUX1BBQ0tFVFMpKQorCQkJCQk/ICJOQUsgIiA6ICIiLAorCQkJCSh0MiAmICgxIDw8IENMRUFSX0VQX0hJREVfU1RBVFVTX1BIQVNFKSkKKwkJCQkJPyAiaGlkZSAiIDogIiIsCisJCQkJKHQyICYgKDEgPDwgQ0xFQVJfRVBfRk9SQ0VfQ1JDX0VSUk9SKSkKKwkJCQkJPyAiQ1JDICIgOiAiIiwKKwkJCQkodDIgJiAoMSA8PCBDTEVBUl9JTlRFUlJVUFRfTU9ERSkpCisJCQkJCT8gImludGVycnVwdCAiIDogIiIsCisJCQkJKHQyICYgKDE8PENMRUFSX0NPTlRST0xfU1RBVFVTX1BIQVNFX0hBTkRTSEFLRSkpCisJCQkJCT8gInN0YXR1cyAiIDogIiIsCisJCQkJKHQyICYgKDEgPDwgQ0xFQVJfTkFLX09VVF9QQUNLRVRTX01PREUpKQorCQkJCQk/ICJOQUttb2RlICIgOiAiIiwKKwkJCQkodDIgJiAoMSA8PCBDTEVBUl9FTkRQT0lOVF9UT0dHTEUpKQorCQkJCQk/ICJEQVRBMSAiIDogIkRBVEEwICIsCisJCQkJKHQyICYgKDEgPDwgQ0xFQVJfRU5EUE9JTlRfSEFMVCkpCisJCQkJCT8gIkhBTFQgIiA6ICIiLAorCQkJCXJlYWRsICgmZXAtPnJlZ3MtPmVwX2lycWVuYikpOworCQlzaXplIC09IHQ7CisJCW5leHQgKz0gdDsKKworCQl0ID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAorCQkJCSJcdHN0YXQgJTA4eCBhdmFpbCAlMDR4ICIKKwkJCQkiKGVwJWQlcy0lcyklc1xuIiwKKwkJCQlyZWFkbCAoJmVwLT5yZWdzLT5lcF9zdGF0KSwKKwkJCQlyZWFkbCAoJmVwLT5yZWdzLT5lcF9hdmFpbCksCisJCQkJdDEgJiAweDBmLCBESVJfU1RSSU5HICh0MSksCisJCQkJdHlwZV9zdHJpbmcgKHQxID4+IDgpLAorCQkJCWVwLT5zdG9wcGVkID8gIioiIDogIiIpOworCQlzaXplIC09IHQ7CisJCW5leHQgKz0gdDsKKworCQlpZiAoIWVwLT5kbWEpCisJCQljb250aW51ZTsKKworCQl0ID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAorCQkJCSIgIGRtYVx0Y3RsICUwOHggc3RhdCAlMDh4IGNvdW50ICUwOHhcbiIKKwkJCQkiXHRhZGRyICUwOHggZGVzYyAlMDh4XG4iLAorCQkJCXJlYWRsICgmZXAtPmRtYS0+ZG1hY3RsKSwKKwkJCQlyZWFkbCAoJmVwLT5kbWEtPmRtYXN0YXQpLAorCQkJCXJlYWRsICgmZXAtPmRtYS0+ZG1hY291bnQpLAorCQkJCXJlYWRsICgmZXAtPmRtYS0+ZG1hYWRkciksCisJCQkJcmVhZGwgKCZlcC0+ZG1hLT5kbWFkZXNjKSk7CisJCXNpemUgLT0gdDsKKwkJbmV4dCArPSB0OworCisJfQorCisJLyogSW5kZXhlZCBSZWdpc3RlcnMgKi8KKwkJLy8gbm9uZSB5ZXQgCisKKwkvKiBTdGF0aXN0aWNzICovCisJdCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgIlxuaXJxczogICIpOworCXNpemUgLT0gdDsKKwluZXh0ICs9IHQ7CisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgeworCQlzdHJ1Y3QgbmV0MjI4MF9lcAkqZXA7CisKKwkJZXAgPSAmZGV2LT5lcCBbaV07CisJCWlmIChpICYmICFlcC0+aXJxcykKKwkJCWNvbnRpbnVlOworCQl0ID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAiICVzLyVsdSIsIGVwLT5lcC5uYW1lLCBlcC0+aXJxcyk7CisJCXNpemUgLT0gdDsKKwkJbmV4dCArPSB0OworCisJfQorCXQgPSBzY25wcmludGYgKG5leHQsIHNpemUsICJcbiIpOworCXNpemUgLT0gdDsKKwluZXh0ICs9IHQ7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gUEFHRV9TSVpFIC0gc2l6ZTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUiAocmVnaXN0ZXJzLCBTX0lSVUdPLCBzaG93X3JlZ2lzdGVycywgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90CitzaG93X3F1ZXVlcyAoc3RydWN0IGRldmljZSAqX2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXQyMjgwCQkqZGV2OworCWNoYXIJCQkqbmV4dDsKKwl1bnNpZ25lZAkJc2l6ZTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlpbnQJCQlpOworCisJZGV2ID0gZGV2X2dldF9kcnZkYXRhIChfZGV2KTsKKwluZXh0ID0gYnVmOworCXNpemUgPSBQQUdFX1NJWkU7CisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKKwkJc3RydWN0IG5ldDIyODBfZXAJCSplcCA9ICZkZXYtPmVwIFtpXTsKKwkJc3RydWN0IG5ldDIyODBfcmVxdWVzdAkJKnJlcTsKKwkJaW50CQkJCXQ7CisKKwkJaWYgKGkgIT0gMCkgeworCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpkOworCisJCQlkID0gZXAtPmRlc2M7CisJCQlpZiAoIWQpCisJCQkJY29udGludWU7CisJCQl0ID0gZC0+YkVuZHBvaW50QWRkcmVzczsKKwkJCXQgPSBzY25wcmludGYgKG5leHQsIHNpemUsCisJCQkJIlxuJXMgKGVwJWQlcy0lcykgbWF4ICUwNHggJXMgZmlmbyAlZFxuIiwKKwkJCQllcC0+ZXAubmFtZSwgdCAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSywKKwkJCQkodCAmIFVTQl9ESVJfSU4pID8gImluIiA6ICJvdXQiLAorCQkJCSh7IGNoYXIgKnZhbDsKKwkJCQkgc3dpdGNoIChkLT5ibUF0dHJpYnV0ZXMgJiAweDAzKSB7CisJCQkJIGNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQlVMSzoKKwkJCQkgCXZhbCA9ICJidWxrIjsgYnJlYWs7CisJCQkJIGNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOgorCQkJCSAJdmFsID0gImludHIiOyBicmVhazsKKwkJCQkgZGVmYXVsdDoKKwkJCQkgCXZhbCA9ICJpc28iOyBicmVhazsKKwkJCQkgfTsgdmFsOyB9KSwKKwkJCQlsZTE2X3RvX2NwdSAoZC0+d01heFBhY2tldFNpemUpICYgMHgxZmZmLAorCQkJCWVwLT5kbWEgPyAiZG1hIiA6ICJwaW8iLCBlcC0+Zmlmb19zaXplCisJCQkJKTsKKwkJfSBlbHNlIC8qIGVwMCBzaG91bGQgb25seSBoYXZlIG9uZSB0cmFuc2ZlciBxdWV1ZWQgKi8KKwkJCXQgPSBzY25wcmludGYgKG5leHQsIHNpemUsICJlcDAgbWF4IDY0IHBpbyAlc1xuIiwKKwkJCQkJZXAtPmlzX2luID8gImluIiA6ICJvdXQiKTsKKwkJaWYgKHQgPD0gMCB8fCB0ID4gc2l6ZSkKKwkJCWdvdG8gZG9uZTsKKwkJc2l6ZSAtPSB0OworCQluZXh0ICs9IHQ7CisKKwkJaWYgKGxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKSB7CisJCQl0ID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAiXHQobm90aGluZyBxdWV1ZWQpXG4iKTsKKwkJCWlmICh0IDw9IDAgfHwgdCA+IHNpemUpCisJCQkJZ290byBkb25lOworCQkJc2l6ZSAtPSB0OworCQkJbmV4dCArPSB0OworCQkJY29udGludWU7CisJCX0KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSAocmVxLCAmZXAtPnF1ZXVlLCBxdWV1ZSkgeworCQkJaWYgKGVwLT5kbWEgJiYgcmVxLT50ZF9kbWEgPT0gcmVhZGwgKCZlcC0+ZG1hLT5kbWFkZXNjKSkKKwkJCQl0ID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAorCQkJCQkiXHRyZXEgJXAgbGVuICVkLyVkICIKKwkJCQkJImJ1ZiAlcCAoZG1hY291bnQgJTA4eClcbiIsCisJCQkJCSZyZXEtPnJlcSwgcmVxLT5yZXEuYWN0dWFsLAorCQkJCQlyZXEtPnJlcS5sZW5ndGgsIHJlcS0+cmVxLmJ1ZiwKKwkJCQkJcmVhZGwgKCZlcC0+ZG1hLT5kbWFjb3VudCkpOworCQkJZWxzZQorCQkJCXQgPSBzY25wcmludGYgKG5leHQsIHNpemUsCisJCQkJCSJcdHJlcSAlcCBsZW4gJWQvJWQgYnVmICVwXG4iLAorCQkJCQkmcmVxLT5yZXEsIHJlcS0+cmVxLmFjdHVhbCwKKwkJCQkJcmVxLT5yZXEubGVuZ3RoLCByZXEtPnJlcS5idWYpOworCQkJaWYgKHQgPD0gMCB8fCB0ID4gc2l6ZSkKKwkJCQlnb3RvIGRvbmU7CisJCQlzaXplIC09IHQ7CisJCQluZXh0ICs9IHQ7CisKKwkJCWlmIChlcC0+ZG1hKSB7CisJCQkJc3RydWN0IG5ldDIyODBfZG1hCSp0ZDsKKworCQkJCXRkID0gcmVxLT50ZDsKKwkJCQl0ID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAiXHQgICAgdGQgJTA4eCAiCisJCQkJCSIgY291bnQgJTA4eCBidWYgJTA4eCBkZXNjICUwOHhcbiIsCisJCQkJCSh1MzIpIHJlcS0+dGRfZG1hLAorCQkJCQlsZTMyX3RvX2NwdSAodGQtPmRtYWNvdW50KSwKKwkJCQkJbGUzMl90b19jcHUgKHRkLT5kbWFhZGRyKSwKKwkJCQkJbGUzMl90b19jcHUgKHRkLT5kbWFkZXNjKSk7CisJCQkJaWYgKHQgPD0gMCB8fCB0ID4gc2l6ZSkKKwkJCQkJZ290byBkb25lOworCQkJCXNpemUgLT0gdDsKKwkJCQluZXh0ICs9IHQ7CisJCQl9CisJCX0KKwl9CisKK2RvbmU6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCXJldHVybiBQQUdFX1NJWkUgLSBzaXplOworfQorc3RhdGljIERFVklDRV9BVFRSIChxdWV1ZXMsIFNfSVJVR08sIHNob3dfcXVldWVzLCBOVUxMKTsKKworCisjZWxzZQorCisjZGVmaW5lIGRldmljZV9jcmVhdGVfZmlsZShhLGIpCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBkZXZpY2VfcmVtb3ZlX2ZpbGUJZGV2aWNlX2NyZWF0ZV9maWxlCisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBhbm90aGVyIGRyaXZlci1zcGVjaWZpYyBtb2RlIG1pZ2h0IGJlIGEgcmVxdWVzdCB0eXBlIGRvaW5nIGRtYQorICogdG8vZnJvbSBhbm90aGVyIGRldmljZSBmaWZvIGluc3RlYWQgb2YgdG8vZnJvbSBtZW1vcnkuCisgKi8KKworc3RhdGljIHZvaWQgc2V0X2ZpZm9fbW9kZSAoc3RydWN0IG5ldDIyODAgKmRldiwgaW50IG1vZGUpCit7CisJLyoga2VlcGluZyBoaWdoIGJpdHMgcHJlc2VydmVzIEJBUjIgKi8KKwl3cml0ZWwgKCgweGZmZmYgPDwgUENJX0JBU0UyX1JBTkdFKSB8IG1vZGUsICZkZXYtPnJlZ3MtPmZpZm9jdGwpOworCisJLyogYWx3YXlzIGVwLXthLGIsZSxmfSAuLi4gbWF5YmUgbm90IGVwLWMgb3IgZXAtZCAqLworCUlOSVRfTElTVF9IRUFEICgmZGV2LT5nYWRnZXQuZXBfbGlzdCk7CisJbGlzdF9hZGRfdGFpbCAoJmRldi0+ZXAgWzFdLmVwLmVwX2xpc3QsICZkZXYtPmdhZGdldC5lcF9saXN0KTsKKwlsaXN0X2FkZF90YWlsICgmZGV2LT5lcCBbMl0uZXAuZXBfbGlzdCwgJmRldi0+Z2FkZ2V0LmVwX2xpc3QpOworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgMDoKKwkJbGlzdF9hZGRfdGFpbCAoJmRldi0+ZXAgWzNdLmVwLmVwX2xpc3QsICZkZXYtPmdhZGdldC5lcF9saXN0KTsKKwkJbGlzdF9hZGRfdGFpbCAoJmRldi0+ZXAgWzRdLmVwLmVwX2xpc3QsICZkZXYtPmdhZGdldC5lcF9saXN0KTsKKwkJZGV2LT5lcCBbMV0uZmlmb19zaXplID0gZGV2LT5lcCBbMl0uZmlmb19zaXplID0gMTAyNDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlkZXYtPmVwIFsxXS5maWZvX3NpemUgPSBkZXYtPmVwIFsyXS5maWZvX3NpemUgPSAyMDQ4OworCQlicmVhazsKKwljYXNlIDI6CisJCWxpc3RfYWRkX3RhaWwgKCZkZXYtPmVwIFszXS5lcC5lcF9saXN0LCAmZGV2LT5nYWRnZXQuZXBfbGlzdCk7CisJCWRldi0+ZXAgWzFdLmZpZm9fc2l6ZSA9IDIwNDg7CisJCWRldi0+ZXAgWzJdLmZpZm9fc2l6ZSA9IDEwMjQ7CisJCWJyZWFrOworCX0KKwkvKiBmaWZvIHNpemVzIGZvciBlcDAsIGVwLWMsIGVwLWQsIGVwLWUsIGFuZCBlcC1mIG5ldmVyIGNoYW5nZSAqLworCWxpc3RfYWRkX3RhaWwgKCZkZXYtPmVwIFs1XS5lcC5lcF9saXN0LCAmZGV2LT5nYWRnZXQuZXBfbGlzdCk7CisJbGlzdF9hZGRfdGFpbCAoJmRldi0+ZXAgWzZdLmVwLmVwX2xpc3QsICZkZXYtPmdhZGdldC5lcF9saXN0KTsKK30KKworLyoqCisgKiBuZXQyMjgwX3NldF9maWZvX21vZGUgLSBjaGFuZ2UgYWxsb2NhdGlvbiBvZiBmaWZvIGJ1ZmZlcnMKKyAqIEBnYWRnZXQ6IGFjY2VzcyB0byB0aGUgbmV0MjI4MCBkZXZpY2UgdGhhdCB3aWxsIGJlIHVwZGF0ZWQKKyAqIEBtb2RlOiAwIGZvciBkZWZhdWx0LCBmb3VyIDFrQiBidWZmZXJzIChlcC1hIHRocm91Z2ggZXAtZCk7CisgKiAJMSBmb3IgdHdvIDJrQiBidWZmZXJzIChlcC1hIGFuZCBlcC1iIG9ubHkpOworICogCTIgZm9yIG9uZSAya0IgYnVmZmVyIChlcC1hKSBhbmQgdHdvIDFrQiBvbmVzIChlcC1iLCBlcC1jKS4KKyAqCisgKiByZXR1cm5zIHplcm8gb24gc3VjY2VzcywgZWxzZSBuZWdhdGl2ZSBlcnJuby4gIHdoZW4gdGhpcyBzdWNjZWVkcywKKyAqIHRoZSBjb250ZW50cyBvZiBnYWRnZXQtPmVwX2xpc3QgbWF5IGhhdmUgY2hhbmdlZC4KKyAqCisgKiB5b3UgbWF5IG9ubHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gZW5kcG9pbnRzIGEtZCBhcmUgYWxsIGRpc2FibGVkLgorICogdXNlIGl0IHdoZW5ldmVyIGV4dHJhIGhhcmR3YXJlIGJ1ZmZlcmluZyBjYW4gaGVscCBwZXJmb3JtYW5jZSwgc3VjaAorICogYXMgYmVmb3JlIGVuYWJsaW5nICJoaWdoIGJhbmR3aWR0aCIgaW50ZXJydXB0IGVuZHBvaW50cyB0aGF0IHVzZQorICogbWF4cGFja2V0IGJpZ2dlciB0aGFuIDUxMiAod2hlbiBkb3VibGUgYnVmZmVyaW5nIHdvdWxkIG90aGVyd2lzZQorICogYmUgdW5hdmFpbGFibGUpLgorICovCitpbnQgbmV0MjI4MF9zZXRfZmlmb19tb2RlIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LCBpbnQgbW9kZSkKK3sKKwlpbnQJCQlpOworCXN0cnVjdCBuZXQyMjgwCQkqZGV2OworCWludAkJCXN0YXR1cyA9IDA7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwlpZiAoIWdhZGdldCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJZGV2ID0gY29udGFpbmVyX29mIChnYWRnZXQsIHN0cnVjdCBuZXQyMjgwLCBnYWRnZXQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDE7IGkgPD0gNDsgaSsrKQorCQlpZiAoZGV2LT5lcCBbaV0uZGVzYykgeworCQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJaWYgKG1vZGUgPCAwIHx8IG1vZGUgPiAyKQorCQlzdGF0dXMgPSAtRUlOVkFMOworCWlmIChzdGF0dXMgPT0gMCkKKwkJc2V0X2ZpZm9fbW9kZSAoZGV2LCBtb2RlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoc3RhdHVzID09IDApIHsKKwkJaWYgKG1vZGUgPT0gMSkKKwkJCURFQlVHIChkZXYsICJmaWZvOiAgZXAtYSAySywgZXAtYiAyS1xuIik7CisJCWVsc2UgaWYgKG1vZGUgPT0gMikKKwkJCURFQlVHIChkZXYsICJmaWZvOiAgZXAtYSAySywgZXAtYiAxSywgZXAtYyAxS1xuIik7CisJCS8qIGVsc2UgYWxsIGFyZSAxSyAqLworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorRVhQT1JUX1NZTUJPTCAobmV0MjI4MF9zZXRfZmlmb19tb2RlKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoga2VlcGluZyBpdCBzaW1wbGU6CisgKiAtIG9uZSBidXMgZHJpdmVyLCBpbml0dGVkIGZpcnN0OworICogLSBvbmUgZnVuY3Rpb24gZHJpdmVyLCBpbml0dGVkIHNlY29uZAorICoKKyAqIG1vc3Qgb2YgdGhlIHdvcmsgdG8gc3VwcG9ydCBtdWx0aXBsZSBuZXQyMjgwIGNvbnRyb2xsZXJzIHdvdWxkCisgKiBiZSB0byBhc3NvY2lhdGUgdGhpcyBnYWRnZXQgZHJpdmVyICh5ZXM/KSB3aXRoIGFsbCBvZiB0aGVtLCBvcgorICogcGVyaGFwcyB0byBiaW5kIHNwZWNpZmljIGRyaXZlcnMgdG8gc3BlY2lmaWMgZGV2aWNlcy4KKyAqLworCitzdGF0aWMgc3RydWN0IG5ldDIyODAJKnRoZV9jb250cm9sbGVyOworCitzdGF0aWMgdm9pZCB1c2JfcmVzZXQgKHN0cnVjdCBuZXQyMjgwICpkZXYpCit7CisJdTMyCXRtcDsKKworCWRldi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047CisJKHZvaWQpIHJlYWRsICgmZGV2LT51c2ItPnVzYmN0bCk7CisKKwluZXQyMjgwX2xlZF9pbml0IChkZXYpOworCisJLyogZGlzYWJsZSBhdXRvbWF0aWMgcmVzcG9uc2VzLCBhbmQgaXJxcyAqLworCXdyaXRlbCAoMCwgJmRldi0+dXNiLT5zdGRyc3ApOworCXdyaXRlbCAoMCwgJmRldi0+cmVncy0+cGNpaXJxZW5iMCk7CisJd3JpdGVsICgwLCAmZGV2LT5yZWdzLT5wY2lpcnFlbmIxKTsKKworCS8qIGNsZWFyIG9sZCBkbWEgYW5kIGlycSBzdGF0ZSAqLworCWZvciAodG1wID0gMDsgdG1wIDwgNDsgdG1wKyspIHsKKwkJc3RydWN0IG5ldDIyODBfZXAJKmVwID0gJmRldi0+ZXAgW3RtcCArIDFdOworCisJCWlmIChlcC0+ZG1hKQorCQkJYWJvcnRfZG1hIChlcCk7CisJfQorCXdyaXRlbCAofjAsICZkZXYtPnJlZ3MtPmlycXN0YXQwKSwKKwl3cml0ZWwgKH4oMSA8PCBTVVNQRU5EX1JFUVVFU1RfSU5URVJSVVBUKSwgJmRldi0+cmVncy0+aXJxc3RhdDEpLAorCisJLyogcmVzZXQsIGFuZCBlbmFibGUgcGNpICovCisJdG1wID0gcmVhZGwgKCZkZXYtPnJlZ3MtPmRldmluaXQpCisJCXwgKDEgPDwgUENJX0VOQUJMRSkKKwkJfCAoMSA8PCBGSUZPX1NPRlRfUkVTRVQpCisJCXwgKDEgPDwgVVNCX1NPRlRfUkVTRVQpCisJCXwgKDEgPDwgTTgwNTFfUkVTRVQpOworCXdyaXRlbCAodG1wLCAmZGV2LT5yZWdzLT5kZXZpbml0KTsKKworCS8qIHN0YW5kYXJkIGZpZm8gYW5kIGVuZHBvaW50IGFsbG9jYXRpb25zICovCisJc2V0X2ZpZm9fbW9kZSAoZGV2LCAoZmlmb19tb2RlIDw9IDIpID8gZmlmb19tb2RlIDogMCk7Cit9CisKK3N0YXRpYyB2b2lkIHVzYl9yZWluaXQgKHN0cnVjdCBuZXQyMjgwICpkZXYpCit7CisJdTMyCXRtcDsKKwlpbnQJaW5pdF9kbWE7CisKKwkvKiB1c2VfZG1hIGNoYW5nZXMgYXJlIGlnbm9yZWQgdGlsbCBuZXh0IGRldmljZSByZS1pbml0ICovCisJaW5pdF9kbWEgPSB1c2VfZG1hOworCisJLyogYmFzaWMgZW5kcG9pbnQgaW5pdCAqLworCWZvciAodG1wID0gMDsgdG1wIDwgNzsgdG1wKyspIHsKKwkJc3RydWN0IG5ldDIyODBfZXAJKmVwID0gJmRldi0+ZXAgW3RtcF07CisKKwkJZXAtPmVwLm5hbWUgPSBlcF9uYW1lIFt0bXBdOworCQllcC0+ZGV2ID0gZGV2OworCQllcC0+bnVtID0gdG1wOworCisJCWlmICh0bXAgPiAwICYmIHRtcCA8PSA0KSB7CisJCQllcC0+Zmlmb19zaXplID0gMTAyNDsKKwkJCWlmIChpbml0X2RtYSkKKwkJCQllcC0+ZG1hID0gJmRldi0+ZG1hIFt0bXAgLSAxXTsKKwkJfSBlbHNlCisJCQllcC0+Zmlmb19zaXplID0gNjQ7CisJCWVwLT5yZWdzID0gJmRldi0+ZXByZWdzIFt0bXBdOworCQllcF9yZXNldCAoZGV2LT5yZWdzLCBlcCk7CisJfQorCWRldi0+ZXAgWzBdLmVwLm1heHBhY2tldCA9IDY0OworCWRldi0+ZXAgWzVdLmVwLm1heHBhY2tldCA9IDY0OworCWRldi0+ZXAgWzZdLmVwLm1heHBhY2tldCA9IDY0OworCisJZGV2LT5nYWRnZXQuZXAwID0gJmRldi0+ZXAgWzBdLmVwOworCWRldi0+ZXAgWzBdLnN0b3BwZWQgPSAwOworCUlOSVRfTElTVF9IRUFEICgmZGV2LT5nYWRnZXQuZXAwLT5lcF9saXN0KTsKKworCS8qIHdlIHdhbnQgdG8gcHJldmVudCBsb3dsZXZlbC9pbnNlY3VyZSBhY2Nlc3MgZnJvbSB0aGUgVVNCIGhvc3QsCisJICogYnV0IGVycmF0dW0gMDExOSBtZWFucyB0aGlzIGVuYWJsZSBiaXQgaXMgaWdub3JlZAorCSAqLworCWZvciAodG1wID0gMDsgdG1wIDwgNTsgdG1wKyspCisJCXdyaXRlbCAoRVBfRE9OVFVTRSwgJmRldi0+ZGVwIFt0bXBdLmRlcF9jZmcpOworfQorCitzdGF0aWMgdm9pZCBlcDBfc3RhcnQgKHN0cnVjdCBuZXQyMjgwICpkZXYpCit7CisJd3JpdGVsICggICgxIDw8IENMRUFSX0VQX0hJREVfU1RBVFVTX1BIQVNFKQorCQl8ICgxIDw8IENMRUFSX05BS19PVVRfUEFDS0VUUykKKwkJfCAoMSA8PCBDTEVBUl9DT05UUk9MX1NUQVRVU19QSEFTRV9IQU5EU0hBS0UpCisJCSwgJmRldi0+ZXByZWdzIFswXS5lcF9yc3ApOworCisJLyoKKwkgKiBoYXJkd2FyZSBvcHRpb25hbGx5IGhhbmRsZXMgYSBidW5jaCBvZiBzdGFuZGFyZCByZXF1ZXN0cworCSAqIHRoYXQgdGhlIEFQSSBoaWRlcyBmcm9tIGRyaXZlcnMgYW55d2F5LiAgaGF2ZSBpdCBkbyBzby4KKwkgKiBlbmRwb2ludCBzdGF0dXMvZmVhdHVyZXMgYXJlIGhhbmRsZWQgaW4gc29mdHdhcmUsIHRvCisJICogaGVscCBwYXNzIHRlc3RzIGZvciBzb21lIGR1YmlvdXMgYmVoYXZpb3IuCisJICovCisJd3JpdGVsICggICgxIDw8IFNFVF9URVNUX01PREUpCisJCXwgKDEgPDwgU0VUX0FERFJFU1MpCisJCXwgKDEgPDwgREVWSUNFX1NFVF9DTEVBUl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCkKKwkJfCAoMSA8PCBHRVRfREVWSUNFX1NUQVRVUykKKwkJfCAoMSA8PCBHRVRfSU5URVJGQUNFX1NUQVRVUykKKwkJLCAmZGV2LT51c2ItPnN0ZHJzcCk7CisJd3JpdGVsICggICgxIDw8IFVTQl9ST09UX1BPUlRfV0FLRVVQX0VOQUJMRSkKKwkJfCAoMSA8PCBTRUxGX1BPV0VSRURfVVNCX0RFVklDRSkKKwkJfCAoMSA8PCBSRU1PVEVfV0FLRVVQX1NVUFBPUlQpCisJCXwgKGRldi0+c29mdGNvbm5lY3QgPDwgVVNCX0RFVEVDVF9FTkFCTEUpCisJCXwgKDEgPDwgU0VMRl9QT1dFUkVEX1NUQVRVUykKKwkJLCAmZGV2LT51c2ItPnVzYmN0bCk7CisKKwkvKiBlbmFibGUgaXJxcyBzbyB3ZSBjYW4gc2VlIGVwMCBhbmQgZ2VuZXJhbCBvcGVyYXRpb24gICovCisJd3JpdGVsICggICgxIDw8IFNFVFVQX1BBQ0tFVF9JTlRFUlJVUFRfRU5BQkxFKQorCQl8ICgxIDw8IEVORFBPSU5UXzBfSU5URVJSVVBUX0VOQUJMRSkKKwkJLCAmZGV2LT5yZWdzLT5wY2lpcnFlbmIwKTsKKwl3cml0ZWwgKCAgKDEgPDwgUENJX0lOVEVSUlVQVF9FTkFCTEUpCisJCXwgKDEgPDwgUENJX01BU1RFUl9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFKQorCQl8ICgxIDw8IFBDSV9UQVJHRVRfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSkKKwkJfCAoMSA8PCBQQ0lfUkVUUllfQUJPUlRfSU5URVJSVVBUX0VOQUJMRSkKKwkJfCAoMSA8PCBWQlVTX0lOVEVSUlVQVF9FTkFCTEUpCisJCXwgKDEgPDwgUk9PVF9QT1JUX1JFU0VUX0lOVEVSUlVQVF9FTkFCTEUpCisJCXwgKDEgPDwgU1VTUEVORF9SRVFVRVNUX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFKQorCQksICZkZXYtPnJlZ3MtPnBjaWlycWVuYjEpOworCisJLyogZG9uJ3QgbGVhdmUgYW55IHdyaXRlcyBwb3N0ZWQgKi8KKwkodm9pZCkgcmVhZGwgKCZkZXYtPnVzYi0+dXNiY3RsKTsKK30KKworLyogd2hlbiBhIGRyaXZlciBpcyBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCwgaXQgd2lsbCByZWNlaXZlCisgKiBjb250cm9sIHJlcXVlc3RzIGluY2x1ZGluZyBzZXRfY29uZmlndXJhdGlvbigpLCB3aGljaCBlbmFibGVzCisgKiBub24tY29udHJvbCByZXF1ZXN0cy4gIHRoZW4gdXNiIHRyYWZmaWMgZm9sbG93cyB1bnRpbCBhCisgKiBkaXNjb25uZWN0IGlzIHJlcG9ydGVkLiAgdGhlbiBhIGhvc3QgbWF5IGNvbm5lY3QgYWdhaW4sIG9yCisgKiB0aGUgZHJpdmVyIG1pZ2h0IGdldCB1bmJvdW5kLgorICovCitpbnQgdXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIgKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQoreworCXN0cnVjdCBuZXQyMjgwCQkqZGV2ID0gdGhlX2NvbnRyb2xsZXI7CisJaW50CQkJcmV0dmFsOworCXVuc2lnbmVkCQlpOworCisJLyogaW5zaXN0IG9uIGhpZ2ggc3BlZWQgc3VwcG9ydCBmcm9tIHRoZSBkcml2ZXIsIHNpbmNlCisJICogKGRldi0+dXNiLT54Y3ZyZGlhZyAmIEZPUkNFX0ZVTExfU1BFRURfTU9ERSkKKwkgKiAibXVzdCBub3QgYmUgdXNlZCBpbiBub3JtYWwgb3BlcmF0aW9uIgorCSAqLworCWlmICghZHJpdmVyCisJCQl8fCBkcml2ZXItPnNwZWVkICE9IFVTQl9TUEVFRF9ISUdICisJCQl8fCAhZHJpdmVyLT5iaW5kCisJCQl8fCAhZHJpdmVyLT51bmJpbmQKKwkJCXx8ICFkcml2ZXItPnNldHVwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKGRldi0+ZHJpdmVyKQorCQlyZXR1cm4gLUVCVVNZOworCisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykKKwkJZGV2LT5lcCBbaV0uaXJxcyA9IDA7CisKKwkvKiBob29rIHVwIHRoZSBkcml2ZXIgLi4uICovCisJZGV2LT5zb2Z0Y29ubmVjdCA9IDE7CisJZHJpdmVyLT5kcml2ZXIuYnVzID0gTlVMTDsKKwlkZXYtPmRyaXZlciA9IGRyaXZlcjsKKwlkZXYtPmdhZGdldC5kZXYuZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOworCXJldHZhbCA9IGRyaXZlci0+YmluZCAoJmRldi0+Z2FkZ2V0KTsKKwlpZiAocmV0dmFsKSB7CisJCURFQlVHIChkZXYsICJiaW5kIHRvIGRyaXZlciAlcyAtLT4gJWRcbiIsCisJCQkJZHJpdmVyLT5kcml2ZXIubmFtZSwgcmV0dmFsKTsKKwkJZGV2LT5kcml2ZXIgPSBOVUxMOworCQlkZXYtPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlkZXZpY2VfY3JlYXRlX2ZpbGUgKCZkZXYtPnBkZXYtPmRldiwgJmRldl9hdHRyX2Z1bmN0aW9uKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUgKCZkZXYtPnBkZXYtPmRldiwgJmRldl9hdHRyX3F1ZXVlcyk7CisKKwkvKiAuLi4gdGhlbiBlbmFibGUgaG9zdCBkZXRlY3Rpb24gYW5kIGVwMDsgYW5kIHdlJ3JlIHJlYWR5CisJICogZm9yIHNldF9jb25maWd1cmF0aW9uIGFzIHdlbGwgYXMgZXZlbnR1YWwgZGlzY29ubmVjdC4KKwkgKi8KKwluZXQyMjgwX2xlZF9hY3RpdmUgKGRldiwgMSk7CisJZXAwX3N0YXJ0IChkZXYpOworCisJREVCVUcgKGRldiwgIiVzIHJlYWR5LCB1c2JjdGwgJTA4eCBzdGRyc3AgJTA4eFxuIiwKKwkJCWRyaXZlci0+ZHJpdmVyLm5hbWUsCisJCQlyZWFkbCAoJmRldi0+dXNiLT51c2JjdGwpLAorCQkJcmVhZGwgKCZkZXYtPnVzYi0+c3RkcnNwKSk7CisKKwkvKiBwY2kgd3JpdGVzIG1heSBzdGlsbCBiZSBwb3N0ZWQgKi8KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wgKHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKTsKKworc3RhdGljIHZvaWQKK3N0b3BfYWN0aXZpdHkgKHN0cnVjdCBuZXQyMjgwICpkZXYsIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQoreworCWludAkJCWk7CisKKwkvKiBkb24ndCBkaXNjb25uZWN0IGlmIGl0J3Mgbm90IGNvbm5lY3RlZCAqLworCWlmIChkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJZHJpdmVyID0gTlVMTDsKKworCS8qIHN0b3AgaGFyZHdhcmU7IHByZXZlbnQgbmV3IHJlcXVlc3Qgc3VibWlzc2lvbnM7CisJICogYW5kIGtpbGwgYW55IG91dHN0YW5kaW5nIHJlcXVlc3RzLgorCSAqLworCXVzYl9yZXNldCAoZGV2KTsKKwlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKQorCQludWtlICgmZGV2LT5lcCBbaV0pOworCisJLyogcmVwb3J0IGRpc2Nvbm5lY3Q7IHRoZSBkcml2ZXIgaXMgYWxyZWFkeSBxdWllc2NlZCAqLworCWlmIChkcml2ZXIpIHsKKwkJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOworCQlkcml2ZXItPmRpc2Nvbm5lY3QgKCZkZXYtPmdhZGdldCk7CisJCXNwaW5fbG9jayAoJmRldi0+bG9jayk7CisJfQorCisJdXNiX3JlaW5pdCAoZGV2KTsKK30KKworaW50IHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIgKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQoreworCXN0cnVjdCBuZXQyMjgwCSpkZXYgPSB0aGVfY29udHJvbGxlcjsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PREVWOworCWlmICghZHJpdmVyIHx8IGRyaXZlciAhPSBkZXYtPmRyaXZlcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCXN0b3BfYWN0aXZpdHkgKGRldiwgZHJpdmVyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwluZXQyMjgwX3B1bGx1cCAoJmRldi0+Z2FkZ2V0LCAwKTsKKworCWRyaXZlci0+dW5iaW5kICgmZGV2LT5nYWRnZXQpOworCWRldi0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOworCWRldi0+ZHJpdmVyID0gTlVMTDsKKworCW5ldDIyODBfbGVkX2FjdGl2ZSAoZGV2LCAwKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUgKCZkZXYtPnBkZXYtPmRldiwgJmRldl9hdHRyX2Z1bmN0aW9uKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUgKCZkZXYtPnBkZXYtPmRldiwgJmRldl9hdHRyX3F1ZXVlcyk7CisKKwlERUJVRyAoZGV2LCAidW5yZWdpc3RlcmVkIGRyaXZlciAnJXMnXG4iLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wgKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGhhbmRsZSBlcDAsIGVwLWUsIGVwLWYgd2l0aCA2NCBieXRlIHBhY2tldHM6IHBhY2tldCBwZXIgaXJxLgorICogYWxzbyB3b3JrcyBmb3IgZG1hLWNhcGFibGUgZW5kcG9pbnRzLCBpbiBwaW8gbW9kZSBvciBqdXN0CisgKiB0byBtYW51YWxseSBhZHZhbmNlIHRoZSBxdWV1ZSBhZnRlciBzaG9ydCBPVVQgdHJhbnNmZXJzLgorICovCitzdGF0aWMgdm9pZCBoYW5kbGVfZXBfc21hbGwgKHN0cnVjdCBuZXQyMjgwX2VwICplcCkKK3sKKwlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0CSpyZXE7CisJdTMyCQkJdDsKKwkvKiAwIGVycm9yLCAxIG1pZC1kYXRhLCAyIGRvbmUgKi8KKwlpbnQJCQltb2RlID0gMTsKKworCWlmICghbGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkpCisJCXJlcSA9IGxpc3RfZW50cnkgKGVwLT5xdWV1ZS5uZXh0LAorCQkJc3RydWN0IG5ldDIyODBfcmVxdWVzdCwgcXVldWUpOworCWVsc2UKKwkJcmVxID0gTlVMTDsKKworCS8qIGFjayBhbGwsIGFuZCBoYW5kbGUgd2hhdCB3ZSBjYXJlIGFib3V0ICovCisJdCA9IHJlYWRsICgmZXAtPnJlZ3MtPmVwX3N0YXQpOworCWVwLT5pcnFzKys7CisjaWYgMAorCVZERUJVRyAoZXAtPmRldiwgIiVzIGFjayBlcF9zdGF0ICUwOHgsIHJlcSAlcFxuIiwKKwkJCWVwLT5lcC5uYW1lLCB0LCByZXEgPyAmcmVxLT5yZXEgOiAwKTsKKyNlbmRpZgorCXdyaXRlbCAodCAmIH4oMSA8PCBOQUtfT1VUX1BBQ0tFVFMpLCAmZXAtPnJlZ3MtPmVwX3N0YXQpOworCisJLyogZm9yIGVwMCwgbW9uaXRvciB0b2tlbiBpcnFzIHRvIGNhdGNoIGRhdGEgc3RhZ2UgbGVuZ3RoIGVycm9ycworCSAqIGFuZCB0byBzeW5jaHJvbml6ZSBvbiBzdGF0dXMuCisJICoKKwkgKiBhbHNvLCB0byBkZWZlciByZXBvcnRpbmcgb2YgcHJvdG9jb2wgc3RhbGxzIC4uLiBoZXJlJ3Mgd2hlcmUKKwkgKiBkYXRhIG9yIHN0YXR1cyBmaXJzdCBhcHBlYXJzLCBoYW5kbGluZyBzdGFsbHMgaGVyZSBzaG91bGQgbmV2ZXIKKwkgKiBjYXVzZSB0cm91YmxlIG9uIHRoZSBob3N0IHNpZGUuLgorCSAqCisJICogY29udHJvbCByZXF1ZXN0cyBjb3VsZCBiZSBzbGlnaHRseSBmYXN0ZXIgd2l0aG91dCB0b2tlbiBzeW5jaCBmb3IKKwkgKiBzdGF0dXMsIGJ1dCBzdGF0dXMgY2FuIGphbSB1cCB0aGF0IHdheS4KKwkgKi8KKwlpZiAodW5saWtlbHkgKGVwLT5udW0gPT0gMCkpIHsKKwkJaWYgKGVwLT5pc19pbikgeworCQkJLyogc3RhdHVzOyBzdG9wIE5BS2luZyAqLworCQkJaWYgKHQgJiAoMSA8PCBEQVRBX09VVF9QSU5HX1RPS0VOX0lOVEVSUlVQVCkpIHsKKwkJCQlpZiAoZXAtPmRldi0+cHJvdG9jb2xfc3RhbGwpIHsKKwkJCQkJZXAtPnN0b3BwZWQgPSAxOworCQkJCQlzZXRfaGFsdCAoZXApOworCQkJCX0KKwkJCQlpZiAoIXJlcSkKKwkJCQkJYWxsb3dfc3RhdHVzIChlcCk7CisJCQkJbW9kZSA9IDI7CisJCQkvKiByZXBseSB0byBleHRyYSBJTiBkYXRhIHRva2VucyB3aXRoIGEgemxwICovCisJCQl9IGVsc2UgaWYgKHQgJiAoMSA8PCBEQVRBX0lOX1RPS0VOX0lOVEVSUlVQVCkpIHsKKwkJCQlpZiAoZXAtPmRldi0+cHJvdG9jb2xfc3RhbGwpIHsKKwkJCQkJZXAtPnN0b3BwZWQgPSAxOworCQkJCQlzZXRfaGFsdCAoZXApOworCQkJCQltb2RlID0gMjsKKwkJCQl9IGVsc2UgaWYgKCFyZXEgJiYgZXAtPnN0b3BwZWQpCisJCQkJCXdyaXRlX2ZpZm8gKGVwLCBOVUxMKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIHN0YXR1czsgc3RvcCBOQUtpbmcgKi8KKwkJCWlmICh0ICYgKDEgPDwgREFUQV9JTl9UT0tFTl9JTlRFUlJVUFQpKSB7CisJCQkJaWYgKGVwLT5kZXYtPnByb3RvY29sX3N0YWxsKSB7CisJCQkJCWVwLT5zdG9wcGVkID0gMTsKKwkJCQkJc2V0X2hhbHQgKGVwKTsKKwkJCQl9CisJCQkJbW9kZSA9IDI7CisJCQkvKiBhbiBleHRyYSBPVVQgdG9rZW4gaXMgYW4gZXJyb3IgKi8KKwkJCX0gZWxzZSBpZiAoKCh0ICYgKDEgPDwgREFUQV9PVVRfUElOR19UT0tFTl9JTlRFUlJVUFQpKQorCQkJCQkmJiByZXEKKwkJCQkJJiYgcmVxLT5yZXEuYWN0dWFsID09IHJlcS0+cmVxLmxlbmd0aCkKKwkJCQkJfHwgIXJlcSkgeworCQkJCWVwLT5kZXYtPnByb3RvY29sX3N0YWxsID0gMTsKKwkJCQlzZXRfaGFsdCAoZXApOworCQkJCWVwLT5zdG9wcGVkID0gMTsKKwkJCQlpZiAocmVxKQorCQkJCQlkb25lIChlcCwgcmVxLCAtRU9WRVJGTE9XKTsKKwkJCQlyZXEgPSBOVUxMOworCQkJfQorCQl9CisJfQorCisJaWYgKHVubGlrZWx5ICghcmVxKSkKKwkJcmV0dXJuOworCisJLyogbWFudWFsIERNQSBxdWV1ZSBhZHZhbmNlIGFmdGVyIHNob3J0IE9VVCAqLworCWlmIChsaWtlbHkgKGVwLT5kbWEgIT0gMCkpIHsKKwkJaWYgKHQgJiAoMSA8PCBTSE9SVF9QQUNLRVRfVFJBTlNGRVJSRURfSU5URVJSVVBUKSkgeworCQkJdTMyCWNvdW50OworCQkJaW50CXN0b3BwZWQgPSBlcC0+c3RvcHBlZDsKKworCQkJLyogVFJBTlNGRVJSRUQgd29ya3MgYXJvdW5kIE9VVF9ET05FIGVycmF0dW0gMDExMi4KKwkJCSAqIHdlIGV4cGVjdCAoTiA8PSBtYXhwYWNrZXQpIGJ5dGVzOyBob3N0IHdyb3RlIE0uCisJCQkgKiBpZmYgKE0gPCBOKSB3ZSB3b24ndCBldmVyIHNlZSBhIERNQSBpbnRlcnJ1cHQuCisJCQkgKi8KKwkJCWVwLT5zdG9wcGVkID0gMTsKKwkJCWZvciAoY291bnQgPSAwOyA7IHQgPSByZWFkbCAoJmVwLT5yZWdzLT5lcF9zdGF0KSkgeworCisJCQkJLyogYW55IHByZWNlZGluZyBkbWEgdHJhbnNmZXJzIG11c3QgZmluaXNoLgorCQkJCSAqIGRtYSBoYW5kbGVzIChNID49IE4pLCBtYXkgZW1wdHkgdGhlIHF1ZXVlCisJCQkJICovCisJCQkJc2Nhbl9kbWFfY29tcGxldGlvbnMgKGVwKTsKKwkJCQlpZiAodW5saWtlbHkgKGxpc3RfZW1wdHkgKCZlcC0+cXVldWUpCisJCQkJCQl8fCBlcC0+b3V0X292ZXJmbG93KSkgeworCQkJCQlyZXEgPSBOVUxMOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJcmVxID0gbGlzdF9lbnRyeSAoZXAtPnF1ZXVlLm5leHQsCisJCQkJCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QsIHF1ZXVlKTsKKworCQkJCS8qIGhlcmUgZWl0aGVyIChNIDwgTiksIGEgInJlYWwiIHNob3J0IHJ4OworCQkJCSAqIG9yIChNID09IE4pIGFuZCB0aGUgcXVldWUgZGlkbid0IGVtcHR5CisJCQkJICovCisJCQkJaWYgKGxpa2VseSAodCAmICgxIDw8IEZJRk9fRU1QVFkpKSkgeworCQkJCQljb3VudCA9IHJlYWRsICgmZXAtPmRtYS0+ZG1hY291bnQpOworCQkJCQljb3VudCAmPSBETUFfQllURV9DT1VOVF9NQVNLOworCQkJCQlpZiAocmVhZGwgKCZlcC0+ZG1hLT5kbWFkZXNjKQorCQkJCQkJCSE9IHJlcS0+dGRfZG1hKQorCQkJCQkJcmVxID0gTlVMTDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXVkZWxheSgxKTsKKwkJCX0KKworCQkJLyogc3RvcCBETUEsIGxlYXZlIGVwIE5BS2luZyAqLworCQkJd3JpdGVsICgoMSA8PCBETUFfQUJPUlQpLCAmZXAtPmRtYS0+ZG1hc3RhdCk7CisJCQlzcGluX3N0b3BfZG1hIChlcC0+ZG1hKTsKKworCQkJaWYgKGxpa2VseSAocmVxKSkgeworCQkJCXJlcS0+dGQtPmRtYWNvdW50ID0gMDsKKwkJCQl0ID0gcmVhZGwgKCZlcC0+cmVncy0+ZXBfYXZhaWwpOworCQkJCWRtYV9kb25lIChlcCwgcmVxLCBjb3VudCwgdCk7CisJCQl9CisKKwkJCS8qIGFsc28gZmx1c2ggdG8gcHJldmVudCBlcnJhdHVtIDAxMDYgdHJvdWJsZSAqLworCQkJaWYgKHVubGlrZWx5IChlcC0+b3V0X292ZXJmbG93CisJCQkJCXx8IChlcC0+ZGV2LT5jaGlwcmV2ID09IDB4MDEwMAorCQkJCQkJJiYgZXAtPmRldi0+Z2FkZ2V0LnNwZWVkCisJCQkJCQkJPT0gVVNCX1NQRUVEX0ZVTEwpKSkgeworCQkJCW91dF9mbHVzaCAoZXApOworCQkJCWVwLT5vdXRfb3ZlcmZsb3cgPSAwOworCQkJfQorCisJCQkvKiAocmUpc3RhcnQgZG1hIGlmIG5lZWRlZCwgc3RvcCBOQUtpbmcgKi8KKwkJCWVwLT5zdG9wcGVkID0gc3RvcHBlZDsKKwkJCWlmICghbGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkpCisJCQkJcmVzdGFydF9kbWEgKGVwKTsKKwkJfSBlbHNlCisJCQlERUJVRyAoZXAtPmRldiwgIiVzIGRtYSBlcF9zdGF0ICUwOHggPz9cbiIsCisJCQkJCWVwLT5lcC5uYW1lLCB0KTsKKwkJcmV0dXJuOworCisJLyogZGF0YSBwYWNrZXQocykgcmVjZWl2ZWQgKGluIHRoZSBmaWZvLCBPVVQpICovCisJfSBlbHNlIGlmICh0ICYgKDEgPDwgREFUQV9QQUNLRVRfUkVDRUlWRURfSU5URVJSVVBUKSkgeworCQlpZiAocmVhZF9maWZvIChlcCwgcmVxKSAmJiBlcC0+bnVtICE9IDApCisJCQltb2RlID0gMjsKKworCS8qIGRhdGEgcGFja2V0KHMpIHRyYW5zbWl0dGVkIChJTikgKi8KKwl9IGVsc2UgaWYgKHQgJiAoMSA8PCBEQVRBX1BBQ0tFVF9UUkFOU01JVFRFRF9JTlRFUlJVUFQpKSB7CisJCXVuc2lnbmVkCWxlbjsKKworCQlsZW4gPSByZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWw7CisJCWlmIChsZW4gPiBlcC0+ZXAubWF4cGFja2V0KQorCQkJbGVuID0gZXAtPmVwLm1heHBhY2tldDsKKwkJcmVxLT5yZXEuYWN0dWFsICs9IGxlbjsKKworCQkvKiBpZiB3ZSB3cm90ZSBpdCBhbGwsIHdlJ3JlIHVzdWFsbHkgZG9uZSAqLworCQlpZiAocmVxLT5yZXEuYWN0dWFsID09IHJlcS0+cmVxLmxlbmd0aCkgeworCQkJaWYgKGVwLT5udW0gPT0gMCkgeworCQkJCS8qIHdhaXQgZm9yIGNvbnRyb2wgc3RhdHVzICovCisJCQkJaWYgKG1vZGUgIT0gMikKKwkJCQkJcmVxID0gTlVMTDsKKwkJCX0gZWxzZSBpZiAoIXJlcS0+cmVxLnplcm8gfHwgbGVuICE9IGVwLT5lcC5tYXhwYWNrZXQpCisJCQkJbW9kZSA9IDI7CisJCX0KKworCS8qIHRoZXJlIHdhcyBub3RoaW5nIHRvIGRvIC4uLiAgKi8KKwl9IGVsc2UgaWYgKG1vZGUgPT0gMSkKKwkJcmV0dXJuOworCisJLyogZG9uZSAqLworCWlmIChtb2RlID09IDIpIHsKKwkJLyogc3RyZWFtIGVuZHBvaW50cyBvZnRlbiByZXN1Ym1pdC91bmxpbmsgaW4gY29tcGxldGlvbiAqLworCQlkb25lIChlcCwgcmVxLCAwKTsKKworCQkvKiBtYXliZSBhZHZhbmNlIHF1ZXVlIHRvIG5leHQgcmVxdWVzdCAqLworCQlpZiAoZXAtPm51bSA9PSAwKSB7CisJCQkvKiBOT1RFOiAgbmV0MjI4MCBjb3VsZCBsZXQgZ2FkZ2V0IGRyaXZlciBzdGFydCB0aGUKKwkJCSAqIHN0YXR1cyBzdGFnZSBsYXRlci4gc2luY2Ugbm90IGFsbCBjb250cm9sbGVycyBsZXQKKwkJCSAqIHRoZW0gY29udHJvbCB0aGF0LCB0aGUgYXBpIGRvZXNuJ3QgKHlldCkgYWxsb3cgaXQuCisJCQkgKi8KKwkJCWlmICghZXAtPnN0b3BwZWQpCisJCQkJYWxsb3dfc3RhdHVzIChlcCk7CisJCQlyZXEgPSBOVUxMOworCQl9IGVsc2UgeworCQkJaWYgKCFsaXN0X2VtcHR5ICgmZXAtPnF1ZXVlKSAmJiAhZXAtPnN0b3BwZWQpCisJCQkJcmVxID0gbGlzdF9lbnRyeSAoZXAtPnF1ZXVlLm5leHQsCisJCQkJCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QsIHF1ZXVlKTsKKwkJCWVsc2UKKwkJCQlyZXEgPSBOVUxMOworCQkJaWYgKHJlcSAmJiAhZXAtPmlzX2luKQorCQkJCXN0b3Bfb3V0X25ha2luZyAoZXApOworCQl9CisJfQorCisJLyogaXMgdGhlcmUgYSBidWZmZXIgZm9yIHRoZSBuZXh0IHBhY2tldD8KKwkgKiBmb3IgYmVzdCBzdHJlYW1pbmcgcGVyZm9ybWFuY2UsIG1ha2Ugc3VyZSB0aGVyZSBpcyBvbmUuCisJICovCisJaWYgKHJlcSAmJiAhZXAtPnN0b3BwZWQpIHsKKworCQkvKiBsb2FkIElOIGZpZm8gd2l0aCBuZXh0IHBhY2tldCAobWF5IGJlIHpscCkgKi8KKwkJaWYgKHQgJiAoMSA8PCBEQVRBX1BBQ0tFVF9UUkFOU01JVFRFRF9JTlRFUlJVUFQpKQorCQkJd3JpdGVfZmlmbyAoZXAsICZyZXEtPnJlcSk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IG5ldDIyODBfZXAgKgorZ2V0X2VwX2J5X2FkZHIgKHN0cnVjdCBuZXQyMjgwICpkZXYsIHUxNiB3SW5kZXgpCit7CisJc3RydWN0IG5ldDIyODBfZXAJKmVwOworCisJaWYgKCh3SW5kZXggJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spID09IDApCisJCXJldHVybiAmZGV2LT5lcCBbMF07CisJbGlzdF9mb3JfZWFjaF9lbnRyeSAoZXAsICZkZXYtPmdhZGdldC5lcF9saXN0LCBlcC5lcF9saXN0KSB7CisJCXU4CWJFbmRwb2ludEFkZHJlc3M7CisKKwkJaWYgKCFlcC0+ZGVzYykKKwkJCWNvbnRpbnVlOworCQliRW5kcG9pbnRBZGRyZXNzID0gZXAtPmRlc2MtPmJFbmRwb2ludEFkZHJlc3M7CisJCWlmICgod0luZGV4IF4gYkVuZHBvaW50QWRkcmVzcykgJiBVU0JfRElSX0lOKQorCQkJY29udGludWU7CisJCWlmICgod0luZGV4ICYgMHgwZikgPT0gKGJFbmRwb2ludEFkZHJlc3MgJiAweDBmKSkKKwkJCXJldHVybiBlcDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9zdGF0MF9pcnFzIChzdHJ1Y3QgbmV0MjI4MCAqZGV2LCB1MzIgc3RhdCkKK3sKKwlzdHJ1Y3QgbmV0MjI4MF9lcAkqZXA7CisJdTMyCQkJbnVtLCBzY3JhdGNoOworCisJLyogbW9zdCBvZiB0aGVzZSBkb24ndCBuZWVkIGluZGl2aWR1YWwgYWNrcyAqLworCXN0YXQgJj0gfigxIDw8IElOVEFfQVNTRVJURUQpOworCWlmICghc3RhdCkKKwkJcmV0dXJuOworCS8vIERFQlVHIChkZXYsICJpcnFzdGF0MCAlMDR4XG4iLCBzdGF0KTsKKworCS8qIHN0YXJ0aW5nIGEgY29udHJvbCByZXF1ZXN0PyAqLworCWlmICh1bmxpa2VseSAoc3RhdCAmICgxIDw8IFNFVFVQX1BBQ0tFVF9JTlRFUlJVUFQpKSkgeworCQl1bmlvbiB7CisJCQl1MzIJCQlyYXcgWzJdOworCQkJc3RydWN0IHVzYl9jdHJscmVxdWVzdAlyOworCQl9IHU7CisJCWludAkJCQl0bXAgPSAwOworCQlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0CQkqcmVxOworCisJCWlmIChkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikgeworCQkJaWYgKHJlYWRsICgmZGV2LT51c2ItPnVzYnN0YXQpICYgKDEgPDwgSElHSF9TUEVFRCkpCisJCQkJZGV2LT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfSElHSDsKKwkJCWVsc2UKKwkJCQlkZXYtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworCQkJbmV0MjI4MF9sZWRfc3BlZWQgKGRldiwgZGV2LT5nYWRnZXQuc3BlZWQpOworCQkJREVCVUcgKGRldiwgIiVzIHNwZWVkXG4iLAorCQkJCShkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJCQkJPyAiaGlnaCIgOiAiZnVsbCIpOworCQl9CisKKwkJZXAgPSAmZGV2LT5lcCBbMF07CisJCWVwLT5pcnFzKys7CisKKwkJLyogbWFrZSBzdXJlIGFueSBsZWZ0b3ZlciByZXF1ZXN0IHN0YXRlIGlzIGNsZWFyZWQgKi8KKwkJc3RhdCAmPSB+KDEgPDwgRU5EUE9JTlRfMF9JTlRFUlJVUFQpOworCQl3aGlsZSAoIWxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKSB7CisJCQlyZXEgPSBsaXN0X2VudHJ5IChlcC0+cXVldWUubmV4dCwKKwkJCQkJc3RydWN0IG5ldDIyODBfcmVxdWVzdCwgcXVldWUpOworCQkJZG9uZSAoZXAsIHJlcSwgKHJlcS0+cmVxLmFjdHVhbCA9PSByZXEtPnJlcS5sZW5ndGgpCisJCQkJCQk/IDAgOiAtRVBST1RPKTsKKwkJfQorCQllcC0+c3RvcHBlZCA9IDA7CisJCWRldi0+cHJvdG9jb2xfc3RhbGwgPSAwOworCQl3cml0ZWwgKCAgKDEgPDwgVElNRU9VVCkKKwkJCXwgKDEgPDwgVVNCX1NUQUxMX1NFTlQpCisJCQl8ICgxIDw8IFVTQl9JTl9OQUtfU0VOVCkKKwkJCXwgKDEgPDwgVVNCX0lOX0FDS19SQ1ZEKQorCQkJfCAoMSA8PCBVU0JfT1VUX1BJTkdfTkFLX1NFTlQpCisJCQl8ICgxIDw8IFVTQl9PVVRfQUNLX1NFTlQpCisJCQl8ICgxIDw8IEZJRk9fT1ZFUkZMT1cpCisJCQl8ICgxIDw8IEZJRk9fVU5ERVJGTE9XKQorCQkJfCAoMSA8PCBTSE9SVF9QQUNLRVRfT1VUX0RPTkVfSU5URVJSVVBUKQorCQkJfCAoMSA8PCBTSE9SVF9QQUNLRVRfVFJBTlNGRVJSRURfSU5URVJSVVBUKQorCQkJfCAoMSA8PCBEQVRBX1BBQ0tFVF9SRUNFSVZFRF9JTlRFUlJVUFQpCisJCQl8ICgxIDw8IERBVEFfUEFDS0VUX1RSQU5TTUlUVEVEX0lOVEVSUlVQVCkKKwkJCXwgKDEgPDwgREFUQV9PVVRfUElOR19UT0tFTl9JTlRFUlJVUFQpCisJCQl8ICgxIDw8IERBVEFfSU5fVE9LRU5fSU5URVJSVVBUKQorCQkJLCAmZXAtPnJlZ3MtPmVwX3N0YXQpOworCQl1LnJhdyBbMF0gPSByZWFkbCAoJmRldi0+dXNiLT5zZXR1cDAxMjMpOworCQl1LnJhdyBbMV0gPSByZWFkbCAoJmRldi0+dXNiLT5zZXR1cDQ1NjcpOworCQkKKwkJY3B1X3RvX2xlMzJzICgmdS5yYXcgWzBdKTsKKwkJY3B1X3RvX2xlMzJzICgmdS5yYXcgWzFdKTsKKworCQlsZTE2X3RvX2NwdXMgKCZ1LnIud1ZhbHVlKTsKKwkJbGUxNl90b19jcHVzICgmdS5yLndJbmRleCk7CisJCWxlMTZfdG9fY3B1cyAoJnUuci53TGVuZ3RoKTsKKworCQkvKiBhY2sgdGhlIGlycSAqLworCQl3cml0ZWwgKDEgPDwgU0VUVVBfUEFDS0VUX0lOVEVSUlVQVCwgJmRldi0+cmVncy0+aXJxc3RhdDApOworCQlzdGF0IF49ICgxIDw8IFNFVFVQX1BBQ0tFVF9JTlRFUlJVUFQpOworCisJCS8qIHdhdGNoIGNvbnRyb2wgdHJhZmZpYyBhdCB0aGUgdG9rZW4gbGV2ZWwsIGFuZCBmb3JjZQorCQkgKiBzeW5jaHJvbml6YXRpb24gYmVmb3JlIGxldHRpbmcgdGhlIHN0YXR1cyBzdGFnZSBoYXBwZW4uCisJCSAqIEZJWE1FIGlnbm9yZSB0b2tlbnMgd2UnbGwgTkFLLCB1bnRpbCBkcml2ZXIgcmVzcG9uZHMuCisJCSAqIHRoYXQnbGwgbWVhbiBhIGxvdCBsZXNzIGlycXMgZm9yIHNvbWUgZHJpdmVycy4KKwkJICovCisJCWVwLT5pc19pbiA9ICh1LnIuYlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikgIT0gMDsKKwkJaWYgKGVwLT5pc19pbikgeworCQkJc2NyYXRjaCA9ICgxIDw8IERBVEFfUEFDS0VUX1RSQU5TTUlUVEVEX0lOVEVSUlVQVCkKKwkJCQl8ICgxIDw8IERBVEFfT1VUX1BJTkdfVE9LRU5fSU5URVJSVVBUKQorCQkJCXwgKDEgPDwgREFUQV9JTl9UT0tFTl9JTlRFUlJVUFQpOworCQkJc3RvcF9vdXRfbmFraW5nIChlcCk7CisJCX0gZWxzZQorCQkJc2NyYXRjaCA9ICgxIDw8IERBVEFfUEFDS0VUX1JFQ0VJVkVEX0lOVEVSUlVQVCkKKwkJCQl8ICgxIDw8IERBVEFfT1VUX1BJTkdfVE9LRU5fSU5URVJSVVBUKQorCQkJCXwgKDEgPDwgREFUQV9JTl9UT0tFTl9JTlRFUlJVUFQpOworCQl3cml0ZWwgKHNjcmF0Y2gsICZkZXYtPmVwcmVncyBbMF0uZXBfaXJxZW5iKTsKKworCQkvKiB3ZSBtYWRlIHRoZSBoYXJkd2FyZSBoYW5kbGUgbW9zdCBsb3dsZXZlbCByZXF1ZXN0czsKKwkJICogZXZlcnl0aGluZyBlbHNlIGdvZXMgdXBsZXZlbCB0byB0aGUgZ2FkZ2V0IGNvZGUuCisJCSAqLworCQlzd2l0Y2ggKHUuci5iUmVxdWVzdCkgeworCQljYXNlIFVTQl9SRVFfR0VUX1NUQVRVUzogeworCQkJc3RydWN0IG5ldDIyODBfZXAJKmU7CisJCQl1MTYJCQlzdGF0dXM7CisKKwkJCS8qIGh3IGhhbmRsZXMgZGV2aWNlIGFuZCBpbnRlcmZhY2Ugc3RhdHVzICovCisJCQlpZiAodS5yLmJSZXF1ZXN0VHlwZSAhPSAoVVNCX0RJUl9JTnxVU0JfUkVDSVBfRU5EUE9JTlQpKQorCQkJCWdvdG8gZGVsZWdhdGU7CisJCQlpZiAoKGUgPSBnZXRfZXBfYnlfYWRkciAoZGV2LCB1LnIud0luZGV4KSkgPT0gMAorCQkJCQl8fCB1LnIud0xlbmd0aCA+IDIpCisJCQkJZ290byBkb19zdGFsbDsKKworCQkJaWYgKHJlYWRsICgmZS0+cmVncy0+ZXBfcnNwKQorCQkJCQkmICgxIDw8IFNFVF9FTkRQT0lOVF9IQUxUKSkKKwkJCQlzdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgxKTsKKwkJCWVsc2UKKwkJCQlzdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgwKTsKKworCQkJLyogZG9uJ3QgYm90aGVyIHdpdGggYSByZXF1ZXN0IG9iamVjdCEgKi8KKwkJCXdyaXRlbCAoMCwgJmRldi0+ZXByZWdzIFswXS5lcF9pcnFlbmIpOworCQkJc2V0X2ZpZm9fYnl0ZWNvdW50IChlcCwgdS5yLndMZW5ndGgpOworCQkJd3JpdGVsIChzdGF0dXMsICZkZXYtPmVwcmVncyBbMF0uZXBfZGF0YSk7CisJCQlhbGxvd19zdGF0dXMgKGVwKTsKKwkJCVZERUJVRyAoZGV2LCAiJXMgc3RhdCAlMDJ4XG4iLCBlcC0+ZXAubmFtZSwgc3RhdHVzKTsKKwkJCWdvdG8gbmV4dF9lbmRwb2ludHM7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUkVRX0NMRUFSX0ZFQVRVUkU6IHsKKwkJCXN0cnVjdCBuZXQyMjgwX2VwCSplOworCisJCQkvKiBodyBoYW5kbGVzIGRldmljZSBmZWF0dXJlcyAqLworCQkJaWYgKHUuci5iUmVxdWVzdFR5cGUgIT0gVVNCX1JFQ0lQX0VORFBPSU5UKQorCQkJCWdvdG8gZGVsZWdhdGU7CisJCQlpZiAodS5yLndWYWx1ZSAhPSBVU0JfRU5EUE9JTlRfSEFMVAorCQkJCQl8fCB1LnIud0xlbmd0aCAhPSAwKQorCQkJCWdvdG8gZG9fc3RhbGw7CisJCQlpZiAoKGUgPSBnZXRfZXBfYnlfYWRkciAoZGV2LCB1LnIud0luZGV4KSkgPT0gMCkKKwkJCQlnb3RvIGRvX3N0YWxsOworCQkJY2xlYXJfaGFsdCAoZSk7CisJCQlhbGxvd19zdGF0dXMgKGVwKTsKKwkJCVZERUJVRyAoZGV2LCAiJXMgY2xlYXIgaGFsdFxuIiwgZXAtPmVwLm5hbWUpOworCQkJZ290byBuZXh0X2VuZHBvaW50czsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFVTQl9SRVFfU0VUX0ZFQVRVUkU6IHsKKwkJCXN0cnVjdCBuZXQyMjgwX2VwCSplOworCisJCQkvKiBodyBoYW5kbGVzIGRldmljZSBmZWF0dXJlcyAqLworCQkJaWYgKHUuci5iUmVxdWVzdFR5cGUgIT0gVVNCX1JFQ0lQX0VORFBPSU5UKQorCQkJCWdvdG8gZGVsZWdhdGU7CisJCQlpZiAodS5yLndWYWx1ZSAhPSBVU0JfRU5EUE9JTlRfSEFMVAorCQkJCQl8fCB1LnIud0xlbmd0aCAhPSAwKQorCQkJCWdvdG8gZG9fc3RhbGw7CisJCQlpZiAoKGUgPSBnZXRfZXBfYnlfYWRkciAoZGV2LCB1LnIud0luZGV4KSkgPT0gMCkKKwkJCQlnb3RvIGRvX3N0YWxsOworCQkJc2V0X2hhbHQgKGUpOworCQkJYWxsb3dfc3RhdHVzIChlcCk7CisJCQlWREVCVUcgKGRldiwgIiVzIHNldCBoYWx0XG4iLCBlcC0+ZXAubmFtZSk7CisJCQlnb3RvIG5leHRfZW5kcG9pbnRzOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CitkZWxlZ2F0ZToKKwkJCVZERUJVRyAoZGV2LCAic2V0dXAgJTAyeC4lMDJ4IHYlMDR4IGklMDR4ICIKKwkJCQkiZXBfY2ZnICUwOHhcbiIsCisJCQkJdS5yLmJSZXF1ZXN0VHlwZSwgdS5yLmJSZXF1ZXN0LAorCQkJCXUuci53VmFsdWUsIHUuci53SW5kZXgsCisJCQkJcmVhZGwgKCZlcC0+cmVncy0+ZXBfY2ZnKSk7CisJCQlzcGluX3VubG9jayAoJmRldi0+bG9jayk7CisJCQl0bXAgPSBkZXYtPmRyaXZlci0+c2V0dXAgKCZkZXYtPmdhZGdldCwgJnUucik7CisJCQlzcGluX2xvY2sgKCZkZXYtPmxvY2spOworCQl9CisKKwkJLyogc3RhbGwgZXAwIG9uIGVycm9yICovCisJCWlmICh0bXAgPCAwKSB7Citkb19zdGFsbDoKKwkJCVZERUJVRyAoZGV2LCAicmVxICUwMnguJTAyeCBwcm90b2NvbCBTVEFMTDsgc3RhdCAlZFxuIiwKKwkJCQkJdS5yLmJSZXF1ZXN0VHlwZSwgdS5yLmJSZXF1ZXN0LCB0bXApOworCQkJZGV2LT5wcm90b2NvbF9zdGFsbCA9IDE7CisJCX0KKworCQkvKiBzb21lIGluL291dCB0b2tlbiBpcnEgc2hvdWxkIGZvbGxvdzsgbWF5YmUgc3RhbGwgdGhlbi4KKwkJICogZHJpdmVyIG11c3QgcXVldWUgYSByZXF1ZXN0IChldmVuIHpscCkgb3IgaGFsdCBlcDAKKwkJICogYmVmb3JlIHRoZSBob3N0IHRpbWVzIG91dC4KKwkJICovCisJfQorCituZXh0X2VuZHBvaW50czoKKwkvKiBlbmRwb2ludCBkYXRhIGlycSA/ICovCisJc2NyYXRjaCA9IHN0YXQgJiAweDdmOworCXN0YXQgJj0gfjB4N2Y7CisJZm9yIChudW0gPSAwOyBzY3JhdGNoOyBudW0rKykgeworCQl1MzIJCXQ7CisKKwkJLyogZG8gdGhpcyBlbmRwb2ludCdzIEZJRk8gYW5kIHF1ZXVlIG5lZWQgdGVuZGluZz8gKi8KKwkJdCA9IDEgPDwgbnVtOworCQlpZiAoKHNjcmF0Y2ggJiB0KSA9PSAwKQorCQkJY29udGludWU7CisJCXNjcmF0Y2ggXj0gdDsKKworCQllcCA9ICZkZXYtPmVwIFtudW1dOworCQloYW5kbGVfZXBfc21hbGwgKGVwKTsKKwl9CisKKwlpZiAoc3RhdCkKKwkJREVCVUcgKGRldiwgInVuaGFuZGxlZCBpcnFzdGF0MCAlMDh4XG4iLCBzdGF0KTsKK30KKworI2RlZmluZSBETUFfSU5URVJSVVBUUyAoIFwKKwkJICAoMSA8PCBETUFfRF9JTlRFUlJVUFQpIFwKKwkJfCAoMSA8PCBETUFfQ19JTlRFUlJVUFQpIFwKKwkJfCAoMSA8PCBETUFfQl9JTlRFUlJVUFQpIFwKKwkJfCAoMSA8PCBETUFfQV9JTlRFUlJVUFQpKQorI2RlZmluZQlQQ0lfRVJST1JfSU5URVJSVVBUUyAoIFwKKwkJICAoMSA8PCBQQ0lfTUFTVEVSX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVCkgXAorCQl8ICgxIDw8IFBDSV9UQVJHRVRfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUKSBcCisJCXwgKDEgPDwgUENJX1JFVFJZX0FCT1JUX0lOVEVSUlVQVCkpCisKK3N0YXRpYyB2b2lkIGhhbmRsZV9zdGF0MV9pcnFzIChzdHJ1Y3QgbmV0MjI4MCAqZGV2LCB1MzIgc3RhdCkKK3sKKwlzdHJ1Y3QgbmV0MjI4MF9lcAkqZXA7CisJdTMyCQkJdG1wLCBudW0sIG1hc2ssIHNjcmF0Y2g7CisKKwkvKiBhZnRlciBkaXNjb25uZWN0IHRoZXJlJ3Mgbm90aGluZyBlbHNlIHRvIGRvISAqLworCXRtcCA9ICgxIDw8IFZCVVNfSU5URVJSVVBUKSB8ICgxIDw8IFJPT1RfUE9SVF9SRVNFVF9JTlRFUlJVUFQpOworCW1hc2sgPSAoMSA8PCBISUdIX1NQRUVEKSB8ICgxIDw8IEZVTExfU1BFRUQpOworCisJLyogVkJVUyBkaXNjb25uZWN0IGlzIGluZGljYXRlZCBieSBWQlVTX1BJTiBhbmQgVkJVU19JTlRFUlJVUFQgc2V0LgorCSAqIFJvb3QgUG9ydCBSZXNldCBpcyBpbmRpY2F0ZWQgYnkgUk9PVF9QT1JUX1JFU0VUX0lOVEVSUlJVUFQgc2V0IGFuZAorCSAqIGJvdGggSElHSF9TUEVFRCBhbmQgRlVMTF9TUEVFRCBjbGVhciAoYXMgUk9PVF9QT1JUX1JFU0VUX0lOVEVSUlVQVCAKKwkgKiBvbmx5IGluZGljYXRlcyBhIGNoYW5nZSBpbiB0aGUgcmVzZXQgc3RhdGUpLgorCSAqLworCWlmIChzdGF0ICYgdG1wKSB7CisJCXdyaXRlbCAodG1wLCAmZGV2LT5yZWdzLT5pcnFzdGF0MSk7CisJCWlmICgoKChzdGF0ICYgKDEgPDwgUk9PVF9QT1JUX1JFU0VUX0lOVEVSUlVQVCkpICYmIAorCQkJCSgocmVhZGwgKCZkZXYtPnVzYi0+dXNic3RhdCkgJiBtYXNrKSA9PSAwKSkKKwkJCQl8fCAoKHJlYWRsICgmZGV2LT51c2ItPnVzYmN0bCkgJiAoMSA8PCBWQlVTX1BJTikpID09IDApIAorCQkJICAgICkgJiYgKCBkZXYtPmdhZGdldC5zcGVlZCAhPSBVU0JfU1BFRURfVU5LTk9XTikpIHsKKwkJCURFQlVHIChkZXYsICJkaXNjb25uZWN0ICVzXG4iLAorCQkJCQlkZXYtPmRyaXZlci0+ZHJpdmVyLm5hbWUpOworCQkJc3RvcF9hY3Rpdml0eSAoZGV2LCBkZXYtPmRyaXZlcik7CisJCQllcDBfc3RhcnQgKGRldik7CisJCQlyZXR1cm47CisJCX0KKwkJc3RhdCAmPSB+dG1wOworCisJCS8qIHZCVVMgY2FuIGJvdW5jZSAuLi4gb25lIG9mIG1hbnkgcmVhc29ucyB0byBpZ25vcmUgdGhlCisJCSAqIG5vdGlvbiBvZiBob3RwbHVnIGV2ZW50cyBvbiBidXMgY29ubmVjdC9kaXNjb25uZWN0IQorCQkgKi8KKwkJaWYgKCFzdGF0KQorCQkJcmV0dXJuOworCX0KKworCS8qIE5PVEU6IGNoaXAgc3RheXMgaW4gUENJIEQwIHN0YXRlIGZvciBub3csIGJ1dCBpdCBjb3VsZAorCSAqIGVudGVyIEQxIHRvIHNhdmUgbW9yZSBwb3dlcgorCSAqLworCXRtcCA9ICgxIDw8IFNVU1BFTkRfUkVRVUVTVF9DSEFOR0VfSU5URVJSVVBUKTsKKwlpZiAoc3RhdCAmIHRtcCkgeworCQl3cml0ZWwgKHRtcCwgJmRldi0+cmVncy0+aXJxc3RhdDEpOworCQlpZiAoc3RhdCAmICgxIDw8IFNVU1BFTkRfUkVRVUVTVF9JTlRFUlJVUFQpKSB7CisJCQlpZiAoZGV2LT5kcml2ZXItPnN1c3BlbmQpCisJCQkJZGV2LT5kcml2ZXItPnN1c3BlbmQgKCZkZXYtPmdhZGdldCk7CisJCQlpZiAoIWVuYWJsZV9zdXNwZW5kKQorCQkJCXN0YXQgJj0gfigxIDw8IFNVU1BFTkRfUkVRVUVTVF9JTlRFUlJVUFQpOworCQl9IGVsc2UgeworCQkJaWYgKGRldi0+ZHJpdmVyLT5yZXN1bWUpCisJCQkJZGV2LT5kcml2ZXItPnJlc3VtZSAoJmRldi0+Z2FkZ2V0KTsKKwkJCS8qIGF0IGhpZ2ggc3BlZWQsIG5vdGUgZXJyYXR1bSAwMTMzICovCisJCX0KKwkJc3RhdCAmPSB+dG1wOworCX0KKworCS8qIGNsZWFyIGFueSBvdGhlciBzdGF0dXMvaXJxcyAqLworCWlmIChzdGF0KQorCQl3cml0ZWwgKHN0YXQsICZkZXYtPnJlZ3MtPmlycXN0YXQxKTsKKworCS8qIHNvbWUgc3RhdHVzIHdlIGNhbiBqdXN0IGlnbm9yZSAqLworCXN0YXQgJj0gfigoMSA8PCBDT05UUk9MX1NUQVRVU19JTlRFUlJVUFQpCisJCQl8ICgxIDw8IFNVU1BFTkRfUkVRVUVTVF9JTlRFUlJVUFQpCisJCQl8ICgxIDw8IFJFU1VNRV9JTlRFUlJVUFQpCisJCQl8ICgxIDw8IFNPRl9JTlRFUlJVUFQpKTsKKwlpZiAoIXN0YXQpCisJCXJldHVybjsKKwkvLyBERUJVRyAoZGV2LCAiaXJxc3RhdDEgJTA4eFxuIiwgc3RhdCk7CisKKwkvKiBETUEgc3RhdHVzLCBmb3IgZXAte2EsYixjLGR9ICovCisJc2NyYXRjaCA9IHN0YXQgJiBETUFfSU5URVJSVVBUUzsKKwlzdGF0ICY9IH5ETUFfSU5URVJSVVBUUzsKKwlzY3JhdGNoID4+PSA5OworCWZvciAobnVtID0gMDsgc2NyYXRjaDsgbnVtKyspIHsKKwkJc3RydWN0IG5ldDIyODBfZG1hX3JlZ3MJX19pb21lbSAqZG1hOworCisJCXRtcCA9IDEgPDwgbnVtOworCQlpZiAoKHRtcCAmIHNjcmF0Y2gpID09IDApCisJCQljb250aW51ZTsKKwkJc2NyYXRjaCBePSB0bXA7CisKKwkJZXAgPSAmZGV2LT5lcCBbbnVtICsgMV07CisJCWRtYSA9IGVwLT5kbWE7CisKKwkJaWYgKCFkbWEpCisJCQljb250aW51ZTsKKworCQkvKiBjbGVhciBlcCdzIGRtYSBzdGF0dXMgKi8KKwkJdG1wID0gcmVhZGwgKCZkbWEtPmRtYXN0YXQpOworCQl3cml0ZWwgKHRtcCwgJmRtYS0+ZG1hc3RhdCk7CisKKwkJLyogY2hhaW5pbmcgc2hvdWxkIHN0b3Agb24gYWJvcnQsIHNob3J0IE9VVCBmcm9tIGZpZm8sCisJCSAqIG9yIChzdGF0MCBjb2RlcGF0aCkgc2hvcnQgT1VUIHRyYW5zZmVyLgorCQkgKi8KKwkJaWYgKCF1c2VfZG1hX2NoYWluaW5nKSB7CisJCQlpZiAoKHRtcCAmICgxIDw8IERNQV9UUkFOU0FDVElPTl9ET05FX0lOVEVSUlVQVCkpCisJCQkJCT09IDApIHsKKwkJCQlERUJVRyAoZXAtPmRldiwgIiVzIG5vIHhhY3QgZG9uZT8gJTA4eFxuIiwKKwkJCQkJZXAtPmVwLm5hbWUsIHRtcCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlzdG9wX2RtYSAoZXAtPmRtYSk7CisJCX0KKworCQkvKiBPVVQgdHJhbnNmZXJzIHRlcm1pbmF0ZSB3aGVuIHRoZSBkYXRhIGZyb20gdGhlCisJCSAqIGhvc3QgaXMgaW4gb3VyIG1lbW9yeS4gIFByb2Nlc3Mgd2hhdGV2ZXIncyBkb25lLgorCQkgKiBPbiB0aGlzIHBhdGgsIHdlIGtub3cgdHJhbnNmZXIncyBsYXN0IHBhY2tldCB3YXNuJ3QKKwkJICogbGVzcyB0aGFuIHJlcS0+bGVuZ3RoLiBOQUtfT1VUX1BBQ0tFVFMgbWF5IGJlIHNldCwKKwkJICogb3IgdGhlIEZJRk8gbWF5IGFscmVhZHkgYmUgaG9sZGluZyBuZXcgcGFja2V0cy4KKwkJICoKKwkJICogSU4gdHJhbnNmZXJzIGNhbiBsaW5nZXIgaW4gdGhlIEZJRk8gZm9yIGEgdmVyeQorCQkgKiBsb25nIHRpbWUgLi4uIHdlIGlnbm9yZSB0aGF0IGZvciBub3csIGFjY291bnRpbmcKKwkJICogcHJlY2lzZWx5IChsaWtlIFBJTyBkb2VzKSBuZWVkcyBwZXItcGFja2V0IGlycXMKKwkJICovCisJCXNjYW5fZG1hX2NvbXBsZXRpb25zIChlcCk7CisKKwkJLyogZGlzYWJsZSBkbWEgb24gaW5hY3RpdmUgcXVldWVzOyBlbHNlIG1heWJlIHJlc3RhcnQgKi8KKwkJaWYgKGxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKSB7CisJCQlpZiAodXNlX2RtYV9jaGFpbmluZykKKwkJCQlzdG9wX2RtYSAoZXAtPmRtYSk7CisJCX0gZWxzZSB7CisJCQl0bXAgPSByZWFkbCAoJmRtYS0+ZG1hY3RsKTsKKwkJCWlmICghdXNlX2RtYV9jaGFpbmluZworCQkJCQl8fCAodG1wICYgKDEgPDwgRE1BX0VOQUJMRSkpID09IDApCisJCQkJcmVzdGFydF9kbWEgKGVwKTsKKwkJCWVsc2UgaWYgKGVwLT5pc19pbiAmJiB1c2VfZG1hX2NoYWluaW5nKSB7CisJCQkJc3RydWN0IG5ldDIyODBfcmVxdWVzdAkqcmVxOworCQkJCXUzMgkJCWRtYWNvdW50OworCisJCQkJLyogdGhlIGRlc2NyaXB0b3IgYXQgdGhlIGhlYWQgb2YgdGhlIGNoYWluCisJCQkJICogbWF5IHN0aWxsIGhhdmUgVkFMSURfQklUIGNsZWFyOyB0aGF0J3MKKwkJCQkgKiB1c2VkIHRvIHRyaWdnZXIgY2hhbmdpbmcgRE1BX0ZJRk9fVkFMSURBVEUKKwkJCQkgKiAoYWZmZWN0cyBhdXRvbWFnaWMgemxwIHdyaXRlcykuCisJCQkJICovCisJCQkJcmVxID0gbGlzdF9lbnRyeSAoZXAtPnF1ZXVlLm5leHQsCisJCQkJCQlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0LCBxdWV1ZSk7CisJCQkJZG1hY291bnQgPSByZXEtPnRkLT5kbWFjb3VudDsKKwkJCQlkbWFjb3VudCAmPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgKKwkJCQkJCSgxIDw8IFZBTElEX0JJVCkKKwkJCQkJCXwgRE1BX0JZVEVfQ09VTlRfTUFTSyk7CisJCQkJaWYgKGRtYWNvdW50ICYmIChkbWFjb3VudCAmIHZhbGlkX2JpdCkgPT0gMCkKKwkJCQkJcmVzdGFydF9kbWEgKGVwKTsKKwkJCX0KKwkJfQorCQllcC0+aXJxcysrOworCX0KKworCS8qIE5PVEU6ICB0aGVyZSBhcmUgb3RoZXIgUENJIGVycm9ycyB3ZSBtaWdodCB1c2VmdWxseSBub3RpY2UuCisJICogaWYgdGhleSBhcHBlYXIgdmVyeSBvZnRlbiwgaGVyZSdzIHdoZXJlIHRvIHRyeSByZWNvdmVyaW5nLgorCSAqLworCWlmIChzdGF0ICYgUENJX0VSUk9SX0lOVEVSUlVQVFMpIHsKKwkJRVJST1IgKGRldiwgInBjaSBkbWEgZXJyb3I7IHN0YXQgJTA4eFxuIiwgc3RhdCk7CisJCXN0YXQgJj0gflBDSV9FUlJPUl9JTlRFUlJVUFRTOworCQkvKiB0aGVzZSBhcmUgZmF0YWwgZXJyb3JzLCBidXQgIm1heWJlIiB0aGV5IHdvbid0CisJCSAqIGhhcHBlbiBhZ2FpbiAuLi4KKwkJICovCisJCXN0b3BfYWN0aXZpdHkgKGRldiwgZGV2LT5kcml2ZXIpOworCQllcDBfc3RhcnQgKGRldik7CisJCXN0YXQgPSAwOworCX0KKworCWlmIChzdGF0KQorCQlERUJVRyAoZGV2LCAidW5oYW5kbGVkIGlycXN0YXQxICUwOHhcbiIsIHN0YXQpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbmV0MjI4MF9pcnEgKGludCBpcnEsIHZvaWQgKl9kZXYsIHN0cnVjdCBwdF9yZWdzICogcikKK3sKKwlzdHJ1Y3QgbmV0MjI4MAkJKmRldiA9IF9kZXY7CisKKwlzcGluX2xvY2sgKCZkZXYtPmxvY2spOworCisJLyogaGFuZGxlIGRpc2Nvbm5lY3QsIGRtYSwgYW5kIG1vcmUgKi8KKwloYW5kbGVfc3RhdDFfaXJxcyAoZGV2LCByZWFkbCAoJmRldi0+cmVncy0+aXJxc3RhdDEpKTsKKworCS8qIGNvbnRyb2wgcmVxdWVzdHMgYW5kIFBJTyAqLworCWhhbmRsZV9zdGF0MF9pcnFzIChkZXYsIHJlYWRsICgmZGV2LT5yZWdzLT5pcnFzdGF0MCkpOworCisJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBnYWRnZXRfcmVsZWFzZSAoc3RydWN0IGRldmljZSAqX2RldikKK3sKKwlzdHJ1Y3QgbmV0MjI4MAkqZGV2ID0gZGV2X2dldF9kcnZkYXRhIChfZGV2KTsKKworCWtmcmVlIChkZXYpOworfQorCisvKiB0ZWFyIGRvd24gdGhlIGJpbmRpbmcgYmV0d2VlbiB0aGlzIGRyaXZlciBhbmQgdGhlIHBjaSBkZXZpY2UgKi8KKworc3RhdGljIHZvaWQgbmV0MjI4MF9yZW1vdmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXQyMjgwCQkqZGV2ID0gcGNpX2dldF9kcnZkYXRhIChwZGV2KTsKKworCS8qIHN0YXJ0IHdpdGggdGhlIGRyaXZlciBhYm92ZSB1cyAqLworCWlmIChkZXYtPmRyaXZlcikgeworCQkvKiBzaG91bGQgaGF2ZSBiZWVuIGRvbmUgYWxyZWFkeSBieSBkcml2ZXIgbW9kZWwgY29yZSAqLworCQlXQVJOIChkZXYsICJwY2kgcmVtb3ZlLCBkcml2ZXIgJyVzJyBpcyBzdGlsbCByZWdpc3RlcmVkXG4iLAorCQkJCWRldi0+ZHJpdmVyLT5kcml2ZXIubmFtZSk7CisJCXVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIgKGRldi0+ZHJpdmVyKTsKKwl9CisKKwkvKiB0aGVuIGNsZWFuIHVwIHRoZSByZXNvdXJjZXMgd2UgYWxsb2NhdGVkIGR1cmluZyBwcm9iZSgpICovCisJbmV0MjI4MF9sZWRfc2h1dGRvd24gKGRldik7CisJaWYgKGRldi0+cmVxdWVzdHMpIHsKKwkJaW50CQlpOworCQlmb3IgKGkgPSAxOyBpIDwgNTsgaSsrKSB7CisJCQlpZiAoIWRldi0+ZXAgW2ldLmR1bW15KQorCQkJCWNvbnRpbnVlOworCQkJcGNpX3Bvb2xfZnJlZSAoZGV2LT5yZXF1ZXN0cywgZGV2LT5lcCBbaV0uZHVtbXksCisJCQkJCWRldi0+ZXAgW2ldLnRkX2RtYSk7CisJCX0KKwkJcGNpX3Bvb2xfZGVzdHJveSAoZGV2LT5yZXF1ZXN0cyk7CisJfQorCWlmIChkZXYtPmdvdF9pcnEpCisJCWZyZWVfaXJxIChwZGV2LT5pcnEsIGRldik7CisJaWYgKGRldi0+cmVncykKKwkJaW91bm1hcCAoZGV2LT5yZWdzKTsKKwlpZiAoZGV2LT5yZWdpb24pCisJCXJlbGVhc2VfbWVtX3JlZ2lvbiAocGNpX3Jlc291cmNlX3N0YXJ0IChwZGV2LCAwKSwKKwkJCQlwY2lfcmVzb3VyY2VfbGVuIChwZGV2LCAwKSk7CisJaWYgKGRldi0+ZW5hYmxlZCkKKwkJcGNpX2Rpc2FibGVfZGV2aWNlIChwZGV2KTsKKwlkZXZpY2VfdW5yZWdpc3RlciAoJmRldi0+Z2FkZ2V0LmRldik7CisJZGV2aWNlX3JlbW92ZV9maWxlICgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfcmVnaXN0ZXJzKTsKKwlwY2lfc2V0X2RydmRhdGEgKHBkZXYsIE5VTEwpOworCisJSU5GTyAoZGV2LCAidW5iaW5kXG4iKTsKKworCXRoZV9jb250cm9sbGVyID0gTlVMTDsKK30KKworLyogd3JhcCB0aGlzIGRyaXZlciBhcm91bmQgdGhlIHNwZWNpZmllZCBkZXZpY2UsIGJ1dAorICogZG9uJ3QgcmVzcG9uZCBvdmVyIFVTQiB1bnRpbCBhIGdhZGdldCBkcml2ZXIgYmluZHMgdG8gdXMuCisgKi8KKworc3RhdGljIGludCBuZXQyMjgwX3Byb2JlIChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBuZXQyMjgwCQkqZGV2OworCXVuc2lnbmVkIGxvbmcJCXJlc291cmNlLCBsZW47CisJdm9pZAkJCV9faW9tZW0gKmJhc2UgPSBOVUxMOworCWludAkJCXJldHZhbCwgaTsKKwljaGFyCQkJYnVmIFs4XSwgKmJ1ZnA7CisKKwkvKiBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgY29udHJvbGxlciBpbiBhIHN5c3RlbSwKKwkgKiB1c2JfZ2FkZ2V0X2RyaXZlcl97cmVnaXN0ZXIsdW5yZWdpc3Rlcn0oKSBtdXN0IGNoYW5nZS4KKwkgKi8KKwlpZiAodGhlX2NvbnRyb2xsZXIpIHsKKwkJZGV2X3dhcm4gKCZwZGV2LT5kZXYsICJpZ25vcmluZ1xuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyogYWxsb2MsIGFuZCBzdGFydCBpbml0ICovCisJZGV2ID0ga21hbGxvYyAoc2l6ZW9mICpkZXYsIFNMQUJfS0VSTkVMKTsKKwlpZiAoZGV2ID09IE5VTEwpeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisJbWVtc2V0IChkZXYsIDAsIHNpemVvZiAqZGV2KTsKKwlzcGluX2xvY2tfaW5pdCAoJmRldi0+bG9jayk7CisJZGV2LT5wZGV2ID0gcGRldjsKKwlkZXYtPmdhZGdldC5vcHMgPSAmbmV0MjI4MF9vcHM7CisJZGV2LT5nYWRnZXQuaXNfZHVhbHNwZWVkID0gMTsKKworCS8qIHRoZSAiZ2FkZ2V0IiBhYnN0cmFjdHMvdmlydHVhbGl6ZXMgdGhlIGNvbnRyb2xsZXIgKi8KKwlzdHJjcHkgKGRldi0+Z2FkZ2V0LmRldi5idXNfaWQsICJnYWRnZXQiKTsKKwlkZXYtPmdhZGdldC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKwlkZXYtPmdhZGdldC5kZXYuZG1hX21hc2sgPSBwZGV2LT5kZXYuZG1hX21hc2s7CisJZGV2LT5nYWRnZXQuZGV2LnJlbGVhc2UgPSBnYWRnZXRfcmVsZWFzZTsKKwlkZXYtPmdhZGdldC5uYW1lID0gZHJpdmVyX25hbWU7CisKKwkvKiBub3cgYWxsIHRoZSBwY2kgZ29vZGllcyAuLi4gKi8KKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UgKHBkZXYpIDwgMCkgeworICAgCSAgICAgICAgcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBkb25lOworCX0KKwlkZXYtPmVuYWJsZWQgPSAxOworCisJLyogQkFSIDAgaG9sZHMgYWxsIHRoZSByZWdpc3RlcnMKKwkgKiBCQVIgMSBpcyA4MDUxIG1lbW9yeTsgdW51c2VkIGhlcmUgKG5vdGUgZXJyYXR1bSAwMTAzKQorCSAqIEJBUiAyIGlzIGZpZm8gbWVtb3J5OyB1bnVzZWQgaGVyZQorCSAqLworCXJlc291cmNlID0gcGNpX3Jlc291cmNlX3N0YXJ0IChwZGV2LCAwKTsKKwlsZW4gPSBwY2lfcmVzb3VyY2VfbGVuIChwZGV2LCAwKTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbiAocmVzb3VyY2UsIGxlbiwgZHJpdmVyX25hbWUpKSB7CisJCURFQlVHIChkZXYsICJjb250cm9sbGVyIGFscmVhZHkgaW4gdXNlXG4iKTsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlnb3RvIGRvbmU7CisJfQorCWRldi0+cmVnaW9uID0gMTsKKworCWJhc2UgPSBpb3JlbWFwX25vY2FjaGUgKHJlc291cmNlLCBsZW4pOworCWlmIChiYXNlID09IE5VTEwpIHsKKwkJREVCVUcgKGRldiwgImNhbid0IG1hcCBtZW1vcnlcbiIpOworCQlyZXR2YWwgPSAtRUZBVUxUOworCQlnb3RvIGRvbmU7CisJfQorCWRldi0+cmVncyA9IChzdHJ1Y3QgbmV0MjI4MF9yZWdzIF9faW9tZW0gKikgYmFzZTsKKwlkZXYtPnVzYiA9IChzdHJ1Y3QgbmV0MjI4MF91c2JfcmVncyBfX2lvbWVtICopIChiYXNlICsgMHgwMDgwKTsKKwlkZXYtPnBjaSA9IChzdHJ1Y3QgbmV0MjI4MF9wY2lfcmVncyBfX2lvbWVtICopIChiYXNlICsgMHgwMTAwKTsKKwlkZXYtPmRtYSA9IChzdHJ1Y3QgbmV0MjI4MF9kbWFfcmVncyBfX2lvbWVtICopIChiYXNlICsgMHgwMTgwKTsKKwlkZXYtPmRlcCA9IChzdHJ1Y3QgbmV0MjI4MF9kZXBfcmVncyBfX2lvbWVtICopIChiYXNlICsgMHgwMjAwKTsKKwlkZXYtPmVwcmVncyA9IChzdHJ1Y3QgbmV0MjI4MF9lcF9yZWdzIF9faW9tZW0gKikgKGJhc2UgKyAweDAzMDApOworCisJLyogcHV0IGludG8gaW5pdGlhbCBjb25maWcsIGxpbmsgdXAgYWxsIGVuZHBvaW50cyAqLworCXdyaXRlbCAoMCwgJmRldi0+dXNiLT51c2JjdGwpOworCXVzYl9yZXNldCAoZGV2KTsKKwl1c2JfcmVpbml0IChkZXYpOworCisJLyogaXJxIHNldHVwIGFmdGVyIG9sZCBoYXJkd2FyZSBpcyBjbGVhbmVkIHVwICovCisJaWYgKCFwZGV2LT5pcnEpIHsKKwkJRVJST1IgKGRldiwgIk5vIElSUS4gIENoZWNrIFBDSSBzZXR1cCFcbiIpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGRvbmU7CisJfQorI2lmbmRlZiBfX3NwYXJjX18KKwlzY25wcmludGYgKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIiVkIiwgcGRldi0+aXJxKTsKKwlidWZwID0gYnVmOworI2Vsc2UKKwlidWZwID0gX19pcnFfaXRvYShwZGV2LT5pcnEpOworI2VuZGlmCisJaWYgKHJlcXVlc3RfaXJxIChwZGV2LT5pcnEsIG5ldDIyODBfaXJxLCBTQV9TSElSUSwgZHJpdmVyX25hbWUsIGRldikKKwkJCSE9IDApIHsKKwkJRVJST1IgKGRldiwgInJlcXVlc3QgaW50ZXJydXB0ICVzIGZhaWxlZFxuIiwgYnVmcCk7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBkb25lOworCX0KKwlkZXYtPmdvdF9pcnEgPSAxOworCisJLyogRE1BIHNldHVwICovCisJLyogTk9URTogIHdlIGtub3cgb25seSB0aGUgMzIgTFNCcyBvZiBkbWEgYWRkcmVzc2VzIG1heSBiZSBub256ZXJvICovCisJZGV2LT5yZXF1ZXN0cyA9IHBjaV9wb29sX2NyZWF0ZSAoInJlcXVlc3RzIiwgcGRldiwKKwkJc2l6ZW9mIChzdHJ1Y3QgbmV0MjI4MF9kbWEpLAorCQkwIC8qIG5vIGFsaWdubWVudCByZXF1aXJlbWVudHMgKi8sCisJCTAgLyogb3IgcGFnZS1jcm9zc2luZyBpc3N1ZXMgKi8pOworCWlmICghZGV2LT5yZXF1ZXN0cykgeworCQlERUJVRyAoZGV2LCAiY2FuJ3QgZ2V0IHJlcXVlc3QgcG9vbFxuIik7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisJZm9yIChpID0gMTsgaSA8IDU7IGkrKykgeworCQlzdHJ1Y3QgbmV0MjI4MF9kbWEJKnRkOworCisJCXRkID0gcGNpX3Bvb2xfYWxsb2MgKGRldi0+cmVxdWVzdHMsIEdGUF9LRVJORUwsCisJCQkJJmRldi0+ZXAgW2ldLnRkX2RtYSk7CisJCWlmICghdGQpIHsKKwkJCURFQlVHIChkZXYsICJjYW4ndCBnZXQgZHVtbXkgJWRcbiIsIGkpOworCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQl0ZC0+ZG1hY291bnQgPSAwOwkvKiBub3QgVkFMSUQgKi8KKwkJdGQtPmRtYWFkZHIgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChETUFfQUREUl9JTlZBTElEKTsKKwkJdGQtPmRtYWRlc2MgPSB0ZC0+ZG1hYWRkcjsKKwkJZGV2LT5lcCBbaV0uZHVtbXkgPSB0ZDsKKwl9CisKKwkvKiBlbmFibGUgbG93ZXItb3ZlcmhlYWQgcGNpIG1lbW9yeSBidXJzdHMgZHVyaW5nIERNQSAqLworCXdyaXRlbCAoICgxIDw8IERNQV9NRU1PUllfV1JJVEVfQU5EX0lOVkFMSURBVEVfRU5BQkxFKQorCQkJLy8gMjU2IHdyaXRlIHJldHJpZXMgbWF5IG5vdCBiZSBlbm91Z2guLi4KKwkJCS8vIHwgKDEgPDwgUENJX1JFVFJZX0FCT1JUX0VOQUJMRSkKKwkJCXwgKDEgPDwgRE1BX1JFQURfTVVMVElQTEVfRU5BQkxFKQorCQkJfCAoMSA8PCBETUFfUkVBRF9MSU5FX0VOQUJMRSkKKwkJCSwgJmRldi0+cGNpLT5wY2ltc3RjdGwpOworCS8qIGVycmF0dW0gMDExNSBzaG91bGRuJ3QgYXBwZWFyOiBMaW51eCBpbml0cyBQQ0lfTEFURU5DWV9USU1FUiAqLworCXBjaV9zZXRfbWFzdGVyIChwZGV2KTsKKwlwY2lfc2V0X213aSAocGRldik7CisKKwkvKiAuLi4gYWxzbyBmbHVzaGVzIGFueSBwb3N0ZWQgcGNpIHdyaXRlcyAqLworCWRldi0+Y2hpcHJldiA9IGdldF9pZHhfcmVnIChkZXYtPnJlZ3MsIFJFR19DSElQUkVWKSAmIDB4ZmZmZjsKKworCS8qIGRvbmUgKi8KKwlwY2lfc2V0X2RydmRhdGEgKHBkZXYsIGRldik7CisJSU5GTyAoZGV2LCAiJXNcbiIsIGRyaXZlcl9kZXNjKTsKKwlJTkZPIChkZXYsICJpcnEgJXMsIHBjaSBtZW0gJXAsIGNoaXAgcmV2ICUwNHhcbiIsCisJCQlidWZwLCBiYXNlLCBkZXYtPmNoaXByZXYpOworCUlORk8gKGRldiwgInZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04gIjsgZG1hICVzXG4iLAorCQkJdXNlX2RtYQorCQkJCT8gKHVzZV9kbWFfY2hhaW5pbmcgPyAiY2hhaW5pbmciIDogImVuYWJsZWQiKQorCQkJCTogImRpc2FibGVkIik7CisJdGhlX2NvbnRyb2xsZXIgPSBkZXY7CisKKwlkZXZpY2VfcmVnaXN0ZXIgKCZkZXYtPmdhZGdldC5kZXYpOworCWRldmljZV9jcmVhdGVfZmlsZSAoJnBkZXYtPmRldiwgJmRldl9hdHRyX3JlZ2lzdGVycyk7CisKKwlyZXR1cm4gMDsKKworZG9uZToKKwlpZiAoZGV2KQorCQluZXQyMjgwX3JlbW92ZSAocGRldik7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2lkcyBbXSA9IHsgeworCS5jbGFzcyA9IAkoKFBDSV9DTEFTU19TRVJJQUxfVVNCIDw8IDgpIHwgMHhmZSksCisJLmNsYXNzX21hc2sgPSAJfjAsCisJLnZlbmRvciA9CTB4MTdjYywKKwkuZGV2aWNlID0JMHgyMjgwLAorCS5zdWJ2ZW5kb3IgPQlQQ0lfQU5ZX0lELAorCS5zdWJkZXZpY2UgPQlQQ0lfQU5ZX0lELAorCit9LCB7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSAocGNpLCBwY2lfaWRzKTsKKworLyogcGNpIGRyaXZlciBnbHVlOyB0aGlzIGlzIGEgIm5ldyBzdHlsZSIgUENJIGRyaXZlciBtb2R1bGUgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuZXQyMjgwX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJKGNoYXIgKikgZHJpdmVyX25hbWUsCisJLmlkX3RhYmxlID0JcGNpX2lkcywKKworCS5wcm9iZSA9CW5ldDIyODBfcHJvYmUsCisJLnJlbW92ZSA9CW5ldDIyODBfcmVtb3ZlLAorCisJLyogRklYTUUgYWRkIHBvd2VyIG1hbmFnZW1lbnQgc3VwcG9ydCAqLworfTsKKworTU9EVUxFX0RFU0NSSVBUSU9OIChEUklWRVJfREVTQyk7CitNT0RVTEVfQVVUSE9SICgiRGF2aWQgQnJvd25lbGwiKTsKK01PRFVMRV9MSUNFTlNFICgiR1BMIik7CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXQgKHZvaWQpCit7CisJaWYgKCF1c2VfZG1hKQorCQl1c2VfZG1hX2NoYWluaW5nID0gMDsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlciAoJm5ldDIyODBfcGNpX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCAoaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwICh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlciAoJm5ldDIyODBfcGNpX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCAoY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmY0NTA5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuaApAQCAtMCwwICsxLDcyOCBAQAorLyoKKyAqIE5ldENoaXAgMjI4MCBoaWdoL2Z1bGwgc3BlZWQgVVNCIGRldmljZSBjb250cm9sbGVyLgorICogVW5saWtlIG1hbnkgc3VjaCBjb250cm9sbGVycywgdGhpcyBvbmUgdGFsa3MgUENJLgorICovCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgTmV0Q2hpcCBUZWNobm9sb2d5LCBJbmMuIChodHRwOi8vd3d3Lm5ldGNoaXAuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAzIERhdmlkIEJyb3duZWxsCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIE5FVDIyODAgTUVNT1JZIE1BUFBFRCBSRUdJU1RFUlMKKyAqCisgKiBUaGUgcmVnaXN0ZXIgbGF5b3V0IGNhbWUgZnJvbSB0aGUgY2hpcCBkb2N1bWVudGF0aW9uLCBhbmQgdGhlIGJpdAorICogbnVtYmVyIGRlZmluaXRpb25zIHdlcmUgZXh0cmFjdGVkIGZyb20gY2hpcCBzcGVjaWZpY2F0aW9uLgorICoKKyAqIFVzZSB0aGUgc2hpZnQgb3BlcmF0b3IgKCc8PCcpIHRvIGJ1aWxkIGJpdCBtYXNrcywgd2l0aCByZWFkbC93cml0ZWwKKyAqIHRvIGFjY2VzcyB0aGUgcmVnaXN0ZXJzIHRocm91Z2ggUENJLgorICovCisKKy8qIG1haW4gcmVnaXN0ZXJzLCBCQVIwICsgMHgwMDAwICovCitzdHJ1Y3QgbmV0MjI4MF9yZWdzIHsKKwkvLyBvZmZzZXQgMHgwMDAwCisJdTMyCQlkZXZpbml0OworI2RlZmluZSAgICAgTE9DQUxfQ0xPQ0tfRlJFUVVFTkNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgICAgIEZPUkNFX1BDSV9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBQQ0lfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgUENJX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIEZJRk9fU09GVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBDRkdfU09GVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgUENJX1NPRlRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIFVTQl9TT0ZUX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBNODA1MV9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJZWVjdGw7CisjZGVmaW5lICAgICBFRVBST01fQUREUkVTU19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgICAgIEVFUFJPTV9DSElQX1NFTEVDVF9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSAgICAgRUVQUk9NX1BSRVNFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lICAgICBFRVBST01fVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgICAgIEVFUFJPTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSAgICAgRUVQUk9NX0NISVBfU0VMRUNUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lICAgICBFRVBST01fQllURV9SRUFEX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgICAgIEVFUFJPTV9CWVRFX1dSSVRFX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgRUVQUk9NX1JFQURfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgICAgIEVFUFJPTV9XUklURV9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQllZWNsa2ZyZXE7CisJdTMyCQlfdW51c2VkMDsKKwkvLyBvZmZzZXQgMHgwMDEwCisKKwl1MzIJCXBjaWlycWVuYjA7CQkvKiBpbnRlcnJ1cHQgUENJIG1hc3RlciAuLi4gKi8KKyNkZWZpbmUgICAgIFNFVFVQX1BBQ0tFVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBFTkRQT0lOVF9GX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgRU5EUE9JTlRfRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIEVORFBPSU5UX0RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBFTkRQT0lOVF9DX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgRU5EUE9JTlRfQl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIEVORFBPSU5UX0FfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBFTkRQT0lOVF8wX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJcGNpaXJxZW5iMTsKKyNkZWZpbmUgICAgIFBDSV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSAgICAgUE9XRVJfU1RBVEVfQ0hBTkdFX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lICAgICBQQ0lfQVJCSVRFUl9USU1FT1VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgICAgIFBDSV9QQVJJVFlfRVJST1JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSAgICAgUENJX01BU1RFUl9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgIDIwCisjZGVmaW5lICAgICBQQ0lfVEFSR0VUX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMTkKKyNkZWZpbmUgICAgIFBDSV9UQVJHRVRfQUJPUlRfQVNTRVJURURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAxOAorI2RlZmluZSAgICAgUENJX1JFVFJZX0FCT1JUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lICAgICBQQ0lfTUFTVEVSX0NZQ0xFX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIEdQSU9fSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSAgICAgRE1BX0RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lICAgICBETUFfQ19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgICAgIERNQV9CX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgRE1BX0FfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgICAgIEVFUFJPTV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBWQlVTX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgQ09OVFJPTF9TVEFUVVNfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIFJPT1RfUE9SVF9SRVNFVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIFJFU1VNRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBTT0ZfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJY3B1X2lycWVuYjA7CQkvKiAuLi4gb3Igb25ib2FyZCA4MDUxICovCisjZGVmaW5lICAgICBTRVRVUF9QQUNLRVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgRU5EUE9JTlRfRl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIEVORFBPSU5UX0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lICAgICBFTkRQT0lOVF9EX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgRU5EUE9JTlRfQ19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIEVORFBPSU5UX0JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBFTkRQT0lOVF9BX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgRU5EUE9JTlRfMF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCWNwdV9pcnFlbmIxOworI2RlZmluZSAgICAgQ1BVX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lICAgICBQT1dFUl9TVEFURV9DSEFOR0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgICAgIFBDSV9BUkJJVEVSX1RJTUVPVVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAyNgorI2RlZmluZSAgICAgUENJX1BBUklUWV9FUlJPUl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lICAgICBQQ0lfSU5UQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgICAgIFBDSV9QTUVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSAgICAgUENJX1NFUlJfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lICAgICBQQ0lfUEVSUl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAyMAorI2RlZmluZSAgICAgUENJX1RBUkdFVF9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgIDE5CisjZGVmaW5lICAgICBQQ0lfUkVUUllfQUJPUlRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfQ1lDTEVfRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgR1BJT19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lICAgICBETUFfRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgICAgIERNQV9DX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSAgICAgRE1BX0JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lICAgICBETUFfQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSAgICAgRUVQUk9NX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgICAgIFZCVVNfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBDT05UUk9MX1NUQVRVU19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgUk9PVF9QT1JUX1JFU0VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfQ0hBTkdFX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgUkVTVU1FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIFNPRl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKwkvLyBvZmZzZXQgMHgwMDIwCisJdTMyCQlfdW51c2VkMTsKKwl1MzIJCXVzYmlycWVuYjE7CisjZGVmaW5lICAgICBVU0JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgICAgIFBPV0VSX1NUQVRFX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAyNworI2RlZmluZSAgICAgUENJX0FSQklURVJfVElNRU9VVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lICAgICBQQ0lfUEFSSVRZX0VSUk9SX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgICAgIFBDSV9JTlRBX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSAgICAgUENJX1BNRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lICAgICBQQ0lfU0VSUl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgICAgIFBDSV9QRVJSX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSAgICAgUENJX01BU1RFUl9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgIDIwCisjZGVmaW5lICAgICBQQ0lfVEFSR0VUX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMTkKKyNkZWZpbmUgICAgIFBDSV9SRVRSWV9BQk9SVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSAgICAgUENJX01BU1RFUl9DWUNMRV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBHUElPX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgICAgIERNQV9EX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgRE1BX0NfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lICAgICBETUFfQl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIERNQV9BX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lICAgICBFRVBST01fRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgVkJVU19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIENPTlRST0xfU1RBVFVTX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBST09UX1BPUlRfUkVTRVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9DSEFOR0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBSRVNVTUVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgU09GX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCWlycXN0YXQwOworI2RlZmluZSAgICAgSU5UQV9BU1NFUlRFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lICAgICBTRVRVUF9QQUNLRVRfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgRU5EUE9JTlRfRl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIEVORFBPSU5UX0VfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lICAgICBFTkRQT0lOVF9EX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgRU5EUE9JTlRfQ19JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIEVORFBPSU5UX0JfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBFTkRQT0lOVF9BX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgRU5EUE9JTlRfMF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCWlycXN0YXQxOworI2RlZmluZSAgICAgUE9XRVJfU1RBVEVfQ0hBTkdFX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lICAgICBQQ0lfQVJCSVRFUl9USU1FT1VUX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgICAgIFBDSV9QQVJJVFlfRVJST1JfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSAgICAgUENJX0lOVEFfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lICAgICBQQ0lfUE1FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgICAgIFBDSV9TRVJSX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSAgICAgUENJX1BFUlJfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lICAgICBQQ0lfTUFTVEVSX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgICAgIFBDSV9UQVJHRVRfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSAgICAgUENJX1JFVFJZX0FCT1JUX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lICAgICBQQ0lfTUFTVEVSX0NZQ0xFX0RPTkVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIEdQSU9fSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSAgICAgRE1BX0RfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lICAgICBETUFfQ19JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgICAgIERNQV9CX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgRE1BX0FfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgICAgIEVFUFJPTV9ET05FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBWQlVTX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgQ09OVFJPTF9TVEFUVVNfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIFJPT1RfUE9SVF9SRVNFVF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0NIQU5HRV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIFJFU1VNRV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBTT0ZfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCS8vIG9mZnNldCAweDAwMzAKKwl1MzIJCWlkeGFkZHI7CisJdTMyCQlpZHhkYXRhOworCXUzMgkJZmlmb2N0bDsKKyNkZWZpbmUgICAgIFBDSV9CQVNFMl9SQU5HRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgSUdOT1JFX0ZJRk9fQVZBSUxBQklMSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIFBDSV9CQVNFMl9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBGSUZPX0NPTkZJR1VSQVRJT05fU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJX3VudXNlZDI7CisJLy8gb2Zmc2V0IDB4MDA0MAorCXUzMgkJbWVtYWRkcjsKKyNkZWZpbmUgICAgIFNUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSAgICAgRElSRUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lICAgICBGSUZPX0RJQUdOT1NUSUNfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgICAgIE1FTU9SWV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQltZW1kYXRhMDsKKwl1MzIJCW1lbWRhdGExOworCXUzMgkJX3VudXNlZDM7CisJLy8gb2Zmc2V0IDB4MDA1MAorCXUzMgkJZ3Bpb2N0bDsKKyNkZWZpbmUgICAgIEdQSU8zX0xFRF9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgR1BJTzNfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lICAgICBHUElPMl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIEdQSU8xX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lICAgICBHUElPMF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgR1BJTzNfT1VUUFVUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIEdQSU8yX09VVFBVVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBHUElPMV9PVVRQVVRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgR1BJTzBfT1VUUFVUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIEdQSU8zX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBHUElPMl9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgR1BJTzFfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIEdQSU8wX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlncGlvc3RhdDsKKyNkZWZpbmUgICAgIEdQSU8zX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBHUElPMl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgR1BJTzFfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIEdQSU8wX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogdXNiIGNvbnRyb2wsIEJBUjAgKyAweDAwODAgKi8KK3N0cnVjdCBuZXQyMjgwX3VzYl9yZWdzIHsKKwkvLyBvZmZzZXQgMHgwMDgwCisJdTMyCQlzdGRyc3A7CisjZGVmaW5lICAgICBTVEFMTF9VTlNVUFBPUlRFRF9SRVFVRVNUUyAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgICAgIFNFVF9URVNUX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgR0VUX09USEVSX1NQRUVEX0NPTkZJR1VSQVRJT04gICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lICAgICBHRVRfREVWSUNFX1FVQUxJRklFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgICAgIFNFVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSAgICAgRU5EUE9JTlRfU0VUX0NMRUFSX0hBTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lICAgICBERVZJQ0VfU0VUX0NMRUFSX0RFVklDRV9SRU1PVEVfV0FLRVVQICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgICAgIEdFVF9TVFJJTkdfREVTQ1JJUFRPUl8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgR0VUX1NUUklOR19ERVNDUklQVE9SXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgICAgIEdFVF9TVFJJTkdfREVTQ1JJUFRPUl8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBHRVRfU0VUX0lOVEVSRkFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgR0VUX1NFVF9DT05GSUdVUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIEdFVF9DT05GSUdVUkFUSU9OX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBHRVRfREVWSUNFX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgR0VUX0VORFBPSU5UX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIEdFVF9JTlRFUkZBQ0VfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBHRVRfREVWSUNFX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJcHJvZHZlbmRpZDsKKyNkZWZpbmUgICAgIFBST0RVQ1RfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgVkVORE9SX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCXJlbG51bTsKKwl1MzIJCXVzYmN0bDsKKyNkZWZpbmUgICAgIFNFUklBTF9OVU1CRVJfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgUFJPRFVDVF9JRF9TVFJJTkdfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lICAgICBWRU5ET1JfSURfU1RSSU5HX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgICAgIFVTQl9ST09UX1BPUlRfV0FLRVVQX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSAgICAgVkJVU19QSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lICAgICBUSU1FRF9ESVNDT05ORUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSAgICAgU1VTUEVORF9JTU1FRElBVEVMWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIFNFTEZfUE9XRVJFRF9VU0JfREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBSRU1PVEVfV0FLRVVQX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgUE1FX1BPTEFSSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIFVTQl9ERVRFQ1RfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBQTUVfV0FLRVVQX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgREVWSUNFX1JFTU9URV9XQUtFVVBfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIFNFTEZfUE9XRVJFRF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJLy8gb2Zmc2V0IDB4MDA5MAorCXUzMgkJdXNic3RhdDsKKyNkZWZpbmUgICAgIEhJR0hfU1BFRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBGVUxMX1NQRUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgR0VORVJBVEVfUkVTVU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIEdFTkVSQVRFX0RFVklDRV9SRU1PVEVfV0FLRVVQICAgICAgICAgICAgICAgICAgICAgICA0CisJdTMyCQl4Y3ZyZGlhZzsKKyNkZWZpbmUgICAgIEZPUkNFX0hJR0hfU1BFRURfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSAgICAgRk9SQ0VfRlVMTF9TUEVFRF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lICAgICBVU0JfVEVTVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgICAgIExJTkVfU1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgVFJBTlNDRUlWRVJfT1BFUkFUSU9OX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIFRSQU5TQ0VJVkVSX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBURVJNSU5BVElPTl9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJc2V0dXAwMTIzOworCXUzMgkJc2V0dXA0NTY3OworCS8vIG9mZnNldCAweDAwOTAKKwl1MzIJCV91bnVzZWQwOworCXUzMgkJb3VyYWRkcjsKKyNkZWZpbmUgICAgIEZPUkNFX0lNTUVESUFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBPVVJfVVNCX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJb3VyY29uZmlnOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIHBjaSBjb250cm9sLCBCQVIwICsgMHgwMTAwICovCitzdHJ1Y3QgbmV0MjI4MF9wY2lfcmVncyB7CisJLy8gb2Zmc2V0IDB4MDEwMAorCXUzMgkJIHBjaW1zdGN0bDsKKyNkZWZpbmUgICAgIFBDSV9BUkJJVEVSX1BBUktfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSAgICAgUENJX01VTFRJIExFVkVMX0FSQklURVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lICAgICBQQ0lfUkVUUllfQUJPUlRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgICAgIERNQV9NRU1PUllfV1JJVEVfQU5EX0lOVkFMSURBVEVfRU5BQkxFICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgRE1BX1JFQURfTVVMVElQTEVfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgICAgIERNQV9SRUFEX0xJTkVfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBQQ0lfTUFTVEVSX0NPTU1BTkRfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgICAgIE1FTV9SRUFEX09SX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lICAgICAgICAgSU9fUkVBRF9PUl9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgICAgICBDRkdfUkVBRF9PUl9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgUENJX01BU1RFUl9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfUkVBRF9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICAgICAgUENJX01BU1RFUl9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgICAgICAgICBQQ0lfTUFTVEVSX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgUENJX01BU1RFUl9CWVRFX1dSSVRFX0VOQUJMRVMgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCSBwY2ltc3RhZGRyOworCXUzMgkJIHBjaW1zdGRhdGE7CisJdTMyCQkgcGNpbXN0c3RhdDsKKyNkZWZpbmUgICAgIFBDSV9BUkJJVEVSX0NMRUFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBQQ0lfRVhURVJOQUxfQVJCSVRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgUENJX0hPU1RfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBkbWEgY29udHJvbCwgQkFSMCArIDB4MDE4MCAuLi4gYXJyYXkgb2YgZm91ciBzdHJ1Y3RzIGxpa2UgdGhpcywKKyAqIGZvciBjaGFubmVscyAwLi4zLiAgc2VlIGFsc28gc3RydWN0IG5ldDIyODBfZG1hOiAgZGVzY3JpcHRvcgorICogdGhhdCBjYW4gYmUgbG9hZGVkIGludG8gc29tZSBvZiB0aGVzZSByZWdpc3RlcnMuCisgKi8KK3N0cnVjdCBuZXQyMjgwX2RtYV9yZWdzIHsJLyogWzExLjddICovCisJLy8gb2Zmc2V0IDB4MDE4MCwgMHgwMWEwLCAweDAxYzAsIDB4MDFlMCwgCisJdTMyCQlkbWFjdGw7CisjZGVmaW5lICAgICBETUFfU0NBVFRFUl9HQVRIRVJfRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgMjUKKyNkZWZpbmUgICAgIERNQV9DTEVBUl9DT1VOVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSAgICAgREVTQ1JJUFRPUl9QT0xMSU5HX1JBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lICAgICAgICAgUE9MTF9DT05USU5VT1VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgICAgICAgICBQT0xMXzFfVVNFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgICAgIFBPTExfMTAwX1VTRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICAgICAgUE9MTF8xX01TRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIERNQV9WQUxJRF9CSVRfUE9MTElOR19FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSAgICAgRE1BX1ZBTElEX0JJVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lICAgICBETUFfU0NBVFRFUl9HQVRIRVJfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIERNQV9PVVRfQVVUT19TVEFSVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBETUFfUFJFRU1QVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgRE1BX0ZJRk9fVkFMSURBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIERNQV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBETUFfQUREUkVTU19IT0xEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJZG1hc3RhdDsKKyNkZWZpbmUgICAgIERNQV9TQ0FUVEVSX0dBVEhFUl9ET05FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSAgICAgRE1BX1RSQU5TQUNUSU9OX0RPTkVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lICAgICBETUFfQUJPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgRE1BX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCV91bnVzZWQwIFsyXTsKKwkvLyBvZmZzZXQgMHgwMTkwLCAweDAxYjAsIDB4MDFkMCwgMHgwMWYwLCAKKwl1MzIJCWRtYWNvdW50OworI2RlZmluZSAgICAgVkFMSURfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lICAgICBETUFfRElSRUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgICAgIERNQV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSAgICAgRU5EX09GX0NIQUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lICAgICAgICAgRE1BX0JZVEVfQ09VTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoMTw8MjQpLTEpCisjZGVmaW5lICAgICBETUFfQllURV9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJZG1hYWRkcjsKKwl1MzIJCWRtYWRlc2M7CisJdTMyCQlfdW51c2VkMTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBkZWRpY2F0ZWQgZW5kcG9pbnQgcmVnaXN0ZXJzLCBCQVIwICsgMHgwMjAwICovCisKK3N0cnVjdCBuZXQyMjgwX2RlcF9yZWdzIHsJLyogWzExLjhdICovCisJLy8gb2Zmc2V0IDB4MDIwMCwgMHgwMjEwLCAweDIyMCwgMHgyMzAsIDB4MjQwCisJdTMyCQlkZXBfY2ZnOworCS8vIG9mZnNldCAweDAyMDQsIDB4MDIxNCwgMHgyMjQsIDB4MjM0LCAweDI0NAorCXUzMgkJZGVwX3JzcDsKKwl1MzIJCV91bnVzZWQgWzJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIGNvbmZpZ3VyYWJsZSBlbmRwb2ludCByZWdpc3RlcnMsIEJBUjAgKyAweDAzMDAgLi4uIGFycmF5IG9mIHNldmVuIHN0cnVjdHMKKyAqIGxpa2UgdGhpcywgZm9yIGVwMCB0aGVuIHRoZSBjb25maWd1cmFibGUgZW5kcG9pbnRzIEEuLkYKKyAqIGVwMCByZXNlcnZlZCBmb3IgY29udHJvbDsgRSBhbmQgRiBoYXZlIG9ubHkgNjQgYnl0ZXMgb2YgZmlmbworICovCitzdHJ1Y3QgbmV0MjI4MF9lcF9yZWdzIHsJLyogWzExLjldICovCisJLy8gb2Zmc2V0IDB4MDMwMCwgMHgwMzIwLCAweDAzNDAsIDB4MDM2MCwgMHgwMzgwLCAweDAzYTAsIDB4MDNjMAorCXUzMgkJZXBfY2ZnOworI2RlZmluZSAgICAgRU5EUE9JTlRfQllURV9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBFTkRQT0lOVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIEVORFBPSU5UX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBFTkRQT0lOVF9ESVJFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgRU5EUE9JTlRfTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCWVwX3JzcDsKKyNkZWZpbmUgICAgIFNFVF9OQUtfT1VUX1BBQ0tFVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSAgICAgU0VUX0VQX0hJREVfU1RBVFVTX1BIQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lICAgICBTRVRfRVBfRk9SQ0VfQ1JDX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgICAgIFNFVF9JTlRFUlJVUFRfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgU0VUX0NPTlRST0xfU1RBVFVTX1BIQVNFX0hBTkRTSEFLRSAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lICAgICBTRVRfTkFLX09VVF9QQUNLRVRTX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIFNFVF9FTkRQT0lOVF9UT0dHTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lICAgICBTRVRfRU5EUE9JTlRfSEFMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgQ0xFQVJfTkFLX09VVF9QQUNLRVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIENMRUFSX0VQX0hJREVfU1RBVFVTX1BIQVNFICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBDTEVBUl9FUF9GT1JDRV9DUkNfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgQ0xFQVJfSU5URVJSVVBUX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIENMRUFSX0NPTlRST0xfU1RBVFVTX1BIQVNFX0hBTkRTSEFLRSAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBDTEVBUl9OQUtfT1VUX1BBQ0tFVFNfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgQ0xFQVJfRU5EUE9JTlRfVE9HR0xFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIENMRUFSX0VORFBPSU5UX0hBTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQllcF9pcnFlbmI7CisjZGVmaW5lICAgICBTSE9SVF9QQUNLRVRfT1VUX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgU0hPUlRfUEFDS0VUX1RSQU5TRkVSUkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIERBVEFfUEFDS0VUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBEQVRBX1BBQ0tFVF9UUkFOU01JVFRFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgMgorI2RlZmluZSAgICAgREFUQV9PVVRfUElOR19UT0tFTl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIERBVEFfSU5fVE9LRU5fSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQllcF9zdGF0OworI2RlZmluZSAgICAgRklGT19WQUxJRF9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lICAgICBISUdIX0JBTkRXSURUSF9PVVRfVFJBTlNBQ1RJT05fUElEICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgICAgIFRJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSAgICAgVVNCX1NUQUxMX1NFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lICAgICBVU0JfSU5fTkFLX1NFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgICAgIFVTQl9JTl9BQ0tfUkNWRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSAgICAgVVNCX09VVF9QSU5HX05BS19TRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lICAgICBVU0JfT1VUX0FDS19TRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIEZJRk9fT1ZFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSAgICAgRklGT19VTkRFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lICAgICBGSUZPX0ZVTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgICAgIEZJRk9fRU1QVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgRklGT19GTFVTSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgICAgIFNIT1JUX1BBQ0tFVF9PVVRfRE9ORV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBTSE9SVF9QQUNLRVRfVFJBTlNGRVJSRURfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgTkFLX09VVF9QQUNLRVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIERBVEFfUEFDS0VUX1JFQ0VJVkVEX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBEQVRBX1BBQ0tFVF9UUkFOU01JVFRFRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgREFUQV9PVVRfUElOR19UT0tFTl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIERBVEFfSU5fVE9LRU5fSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJLy8gb2Zmc2V0IDB4MDMxMCwgMHgwMzMwLCAweDAzNTAsIDB4MDM3MCwgMHgwMzkwLCAweDAzYjAsIDB4MDNkMAorCXUzMgkJZXBfYXZhaWw7CisJdTMyCQllcF9kYXRhOworCXUzMgkJX3VudXNlZDAgWzJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZglfX0tFUk5FTF9fCisKKy8qIGluZGV4ZWQgcmVnaXN0ZXJzIFsxMS4xMF0gYXJlIGFjY2Vzc2VkIGluZGlyZWN0bHkKKyAqIGNhbGxlciBtdXN0IG93biB0aGUgZGV2aWNlIGxvY2suCisgKi8KKworc3RhdGljIGlubGluZSB1MzIKK2dldF9pZHhfcmVnIChzdHJ1Y3QgbmV0MjI4MF9yZWdzIF9faW9tZW0gKnJlZ3MsIHUzMiBpbmRleCkKK3sKKwl3cml0ZWwgKGluZGV4LCAmcmVncy0+aWR4YWRkcik7CisJLyogTk9URTogIHN5bmNocyBkZXZpY2UvY3B1IG1lbW9yeSB2aWV3cyAqLworCXJldHVybiByZWFkbCAoJnJlZ3MtPmlkeGRhdGEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3NldF9pZHhfcmVnIChzdHJ1Y3QgbmV0MjI4MF9yZWdzIF9faW9tZW0gKnJlZ3MsIHUzMiBpbmRleCwgdTMyIHZhbHVlKQoreworCXdyaXRlbCAoaW5kZXgsICZyZWdzLT5pZHhhZGRyKTsKKwl3cml0ZWwgKHZhbHVlLCAmcmVncy0+aWR4ZGF0YSk7CisJLyogcG9zdGVkLCBtYXkgbm90IGJlIHZpc2libGUgeWV0ICovCit9CisKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCisKKworI2RlZmluZSBSRUdfRElBRwkJMHgwCisjZGVmaW5lICAgICBSRVRSWV9DT1VOVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIEZPUkNFX1BDSV9TRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSAgICAgRk9SQ0VfUENJX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lICAgICBGT1JDRV9VU0JfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSAgICAgRk9SQ0VfQ1BVX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgICAgIElMTEVHQUxfQllURV9FTkFCTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lICAgICBGQVNUX1RJTUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgRk9SQ0VfUkVDRUlWRV9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIEZPUkNFX1RSQU5TTUlUX0NSQ19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFJFR19GUkFNRQkJMHgwMgkvKiBmcm9tIGxhc3Qgc29mICovCisjZGVmaW5lIFJFR19DSElQUkVWCQkweDAzCS8qIGluIGJjZCAqLworI2RlZmluZQlSRUdfSFNfTkFLX1JBVEUJCTB4MGEJLyogTkFLIHBlciBOIHVmcmFtZXMgKi8KKworI2RlZmluZQlDSElQUkVWXzEJMHgwMTAwCisjZGVmaW5lCUNISVBSRVZfMUEJMHgwMTEwCisKKyNpZmRlZglfX0tFUk5FTF9fCisKKy8qIGVwIGEtZiBoaWdoc3BlZWQgYW5kIGZ1bGxzcGVlZCBtYXhwYWNrZXQsIGFkZHJlc3NlcworICogY29tcHV0ZWQgZnJvbSBlcC0+bnVtCisgKi8KKyNkZWZpbmUgUkVHX0VQX01BWFBLVChkZXYsbnVtKSAoKChudW0pICsgMSkgKiAweDEwICsgXAorCQkoKChkZXYpLT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpID8gMCA6IDEpKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBbOC4zXSBmb3Igc2NhdHRlci9nYXRoZXIgaS9vCisgKiB1c2Ugc3RydWN0IG5ldDIyODBfZG1hX3JlZ3MgYml0ZmllbGRzCisgKi8KK3N0cnVjdCBuZXQyMjgwX2RtYSB7CisJX19sZTMyCQlkbWFjb3VudDsKKwlfX2xlMzIJCWRtYWFkZHI7CQkvKiB0aGUgYnVmZmVyICovCisJX19sZTMyCQlkbWFkZXNjOwkJLyogbmV4dCBkbWEgZGVzY3JpcHRvciAqLworCV9fbGUzMgkJX3Jlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMTYpKSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIERSSVZFUiBEQVRBIFNUUlVDVFVSRVMgYW5kIFVUSUxJVElFUyAqLworCitzdHJ1Y3QgbmV0MjI4MF9lcCB7CisJc3RydWN0IHVzYl9lcAkJCQllcDsKKwlzdHJ1Y3QgbmV0MjI4MF9lcF9yZWdzCQkJX19pb21lbSAqcmVnczsKKwlzdHJ1Y3QgbmV0MjI4MF9kbWFfcmVncwkJCV9faW9tZW0gKmRtYTsKKwlzdHJ1Y3QgbmV0MjI4MF9kbWEJCQkqZHVtbXk7CisJZG1hX2FkZHJfdAkJCQl0ZF9kbWE7CS8qIG9mIGR1bW15ICovCisJc3RydWN0IG5ldDIyODAJCQkJKmRldjsKKwl1bnNpZ25lZCBsb25nCQkJCWlycXM7CisKKwkvKiBhbmFsb2dvdXMgdG8gYSBob3N0LXNpZGUgcWggKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCQkJcXVldWU7CisJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpkZXNjOworCXVuc2lnbmVkCQkJCW51bSA6IDgsCisJCQkJCQlmaWZvX3NpemUgOiAxMiwKKwkJCQkJCWluX2ZpZm9fdmFsaWRhdGUgOiAxLAorCQkJCQkJb3V0X292ZXJmbG93IDogMSwKKwkJCQkJCXN0b3BwZWQgOiAxLAorCQkJCQkJaXNfaW4gOiAxLAorCQkJCQkJaXNfaXNvIDogMTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhbGxvd19zdGF0dXMgKHN0cnVjdCBuZXQyMjgwX2VwICplcCkKK3sKKwkvKiBlcDAgb25seSAqLworCXdyaXRlbCAoICAoMSA8PCBDTEVBUl9DT05UUk9MX1NUQVRVU19QSEFTRV9IQU5EU0hBS0UpCisJCXwgKDEgPDwgQ0xFQVJfTkFLX09VVF9QQUNLRVRTKQorCQl8ICgxIDw8IENMRUFSX05BS19PVVRfUEFDS0VUU19NT0RFKQorCQksICZlcC0+cmVncy0+ZXBfcnNwKTsKKwllcC0+c3RvcHBlZCA9IDE7Cit9CisKKy8qIGNvdW50ICg8PSA0KSBieXRlcyBpbiB0aGUgbmV4dCBmaWZvIHdyaXRlIHdpbGwgYmUgdmFsaWQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZmlmb19ieXRlY291bnQgKHN0cnVjdCBuZXQyMjgwX2VwICplcCwgdW5zaWduZWQgY291bnQpCit7CisJd3JpdGViIChjb3VudCwgMiArICh1OCBfX2lvbWVtICopICZlcC0+cmVncy0+ZXBfY2ZnKTsKK30KKworc3RydWN0IG5ldDIyODBfcmVxdWVzdCB7CisJc3RydWN0IHVzYl9yZXF1ZXN0CQlyZXE7CisJc3RydWN0IG5ldDIyODBfZG1hCQkqdGQ7CisJZG1hX2FkZHJfdAkJCXRkX2RtYTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlxdWV1ZTsKKwl1bnNpZ25lZAkJCW1hcHBlZCA6IDEsCisJCQkJCXZhbGlkIDogMTsKK307CisKK3N0cnVjdCBuZXQyMjgwIHsKKwkvKiBlYWNoIHBjaSBkZXZpY2UgcHJvdmlkZXMgb25lIGdhZGdldCwgc2V2ZXJhbCBlbmRwb2ludHMgKi8KKwlzdHJ1Y3QgdXNiX2dhZGdldAkJZ2FkZ2V0OworCXNwaW5sb2NrX3QJCQlsb2NrOworCXN0cnVjdCBuZXQyMjgwX2VwCQllcCBbN107CisJc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyIAkqZHJpdmVyOworCXVuc2lnbmVkCQkJZW5hYmxlZCA6IDEsCisJCQkJCXByb3RvY29sX3N0YWxsIDogMSwKKwkJCQkJc29mdGNvbm5lY3QgOiAxLAorCQkJCQlnb3RfaXJxIDogMSwKKwkJCQkJcmVnaW9uIDogMTsKKwl1MTYJCQkJY2hpcHJldjsKKworCS8qIHBjaSBzdGF0ZSB1c2VkIHRvIGFjY2VzcyB0aG9zZSBlbmRwb2ludHMgKi8KKwlzdHJ1Y3QgcGNpX2RldgkJCSpwZGV2OworCXN0cnVjdCBuZXQyMjgwX3JlZ3MJCV9faW9tZW0gKnJlZ3M7CisJc3RydWN0IG5ldDIyODBfdXNiX3JlZ3MJCV9faW9tZW0gKnVzYjsKKwlzdHJ1Y3QgbmV0MjI4MF9wY2lfcmVncwkJX19pb21lbSAqcGNpOworCXN0cnVjdCBuZXQyMjgwX2RtYV9yZWdzCQlfX2lvbWVtICpkbWE7CisJc3RydWN0IG5ldDIyODBfZGVwX3JlZ3MJCV9faW9tZW0gKmRlcDsKKwlzdHJ1Y3QgbmV0MjI4MF9lcF9yZWdzCQlfX2lvbWVtICplcHJlZ3M7CisKKwlzdHJ1Y3QgcGNpX3Bvb2wJCQkqcmVxdWVzdHM7CisJLy8gc3RhdGlzdGljcy4uLgorfTsKKworc3RhdGljIGlubGluZSB2b2lkIHNldF9oYWx0IChzdHJ1Y3QgbmV0MjI4MF9lcCAqZXApCit7CisJLyogZXAwIGFuZCBidWxrL2ludHIgZW5kcG9pbnRzICovCisJd3JpdGVsICggICgxIDw8IENMRUFSX0NPTlRST0xfU1RBVFVTX1BIQVNFX0hBTkRTSEFLRSkKKwkJICAgIC8qIHNldCBOQUtfT1VUIGZvciBlcnJhdHVtIDAxMTQgKi8KKwkJfCAoKGVwLT5kZXYtPmNoaXByZXYgPT0gQ0hJUFJFVl8xKSA8PCBTRVRfTkFLX09VVF9QQUNLRVRTKQorCQl8ICgxIDw8IFNFVF9FTkRQT0lOVF9IQUxUKQorCQksICZlcC0+cmVncy0+ZXBfcnNwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2hhbHQgKHN0cnVjdCBuZXQyMjgwX2VwICplcCkKK3sKKwkvKiBlcDAgYW5kIGJ1bGsvaW50ciBlbmRwb2ludHMgKi8KKwl3cml0ZWwgKCAgKDEgPDwgQ0xFQVJfRU5EUE9JTlRfSEFMVCkKKwkJfCAoMSA8PCBDTEVBUl9FTkRQT0lOVF9UT0dHTEUpCisJCSAgICAvKiB1bmxlc3MgdGhlIGdhZGdldCBkcml2ZXIgbGVmdCBhIHNob3J0IHBhY2tldCBpbiB0aGUKKwkJICAgICAqIGZpZm8sIHRoaXMgcmV2ZXJzZXMgdGhlIGVycmF0dW0gMDExNCB3b3JrYXJvdW5kLgorCQkgICAgICovCisJCXwgKChlcC0+ZGV2LT5jaGlwcmV2ID09IENISVBSRVZfMSkgPDwgQ0xFQVJfTkFLX09VVF9QQUNLRVRTKQorCQksICZlcC0+cmVncy0+ZXBfcnNwKTsKK30KKworI2lmZGVmIFVTRV9SREtfTEVEUworCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0MjI4MF9sZWRfaW5pdCAoc3RydWN0IG5ldDIyODAgKmRldikKK3sKKwkvKiBMRUQzIChncmVlbikgaXMgb24gZHVyaW5nIFVTQiBhY3Rpdml0eS4gbm90ZSBlcnJhdHVtIDAxMTMuICovCisJd3JpdGVsICgoMSA8PCBHUElPM19MRURfU0VMRUNUKQorCQl8ICgxIDw8IEdQSU8zX09VVFBVVF9FTkFCTEUpCisJCXwgKDEgPDwgR1BJTzJfT1VUUFVUX0VOQUJMRSkKKwkJfCAoMSA8PCBHUElPMV9PVVRQVVRfRU5BQkxFKQorCQl8ICgxIDw8IEdQSU8wX09VVFBVVF9FTkFCTEUpCisJCSwgJmRldi0+cmVncy0+Z3Bpb2N0bCk7Cit9CisKKy8qIGluZGljYXRlIHNwZWVkIHdpdGggYmktY29sb3IgTEVEIDAvMSAqLworc3RhdGljIGlubGluZQordm9pZCBuZXQyMjgwX2xlZF9zcGVlZCAoc3RydWN0IG5ldDIyODAgKmRldiwgZW51bSB1c2JfZGV2aWNlX3NwZWVkIHNwZWVkKQoreworCXUzMgl2YWwgPSByZWFkbCAoJmRldi0+cmVncy0+Z3Bpb2N0bCk7CisJc3dpdGNoIChzcGVlZCkgeworCWNhc2UgVVNCX1NQRUVEX0hJR0g6CQkvKiBncmVlbiAqLworCQl2YWwgJj0gfigxIDw8IEdQSU8wX0RBVEEpOworCQl2YWwgfD0gKDEgPDwgR1BJTzFfREFUQSk7CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CQkvKiByZWQgKi8KKwkJdmFsICY9IH4oMSA8PCBHUElPMV9EQVRBKTsKKwkJdmFsIHw9ICgxIDw8IEdQSU8wX0RBVEEpOworCQlicmVhazsKKwlkZWZhdWx0OgkJCS8qIChvZmYvYmxhY2spICovCisJCXZhbCAmPSB+KCgxIDw8IEdQSU8xX0RBVEEpIHwgKDEgPDwgR1BJTzBfREFUQSkpOworCQlicmVhazsKKwl9CisJd3JpdGVsICh2YWwsICZkZXYtPnJlZ3MtPmdwaW9jdGwpOworfQorCisvKiBpbmRpY2F0ZSBwb3dlciB3aXRoIExFRCAyICovCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0MjI4MF9sZWRfYWN0aXZlIChzdHJ1Y3QgbmV0MjI4MCAqZGV2LCBpbnQgaXNfYWN0aXZlKQoreworCXUzMgl2YWwgPSByZWFkbCAoJmRldi0+cmVncy0+Z3Bpb2N0bCk7CisKKwkvLyBGSVhNRSB0aGlzIExFRCBuZXZlciBzZWVtcyB0byB0dXJuIG9uLgorCWlmIChpc19hY3RpdmUpCisJCXZhbCB8PSBHUElPMl9EQVRBOworCWVsc2UKKwkJdmFsICY9IH5HUElPMl9EQVRBOworCXdyaXRlbCAodmFsLCAmZGV2LT5yZWdzLT5ncGlvY3RsKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXQyMjgwX2xlZF9zaHV0ZG93biAoc3RydWN0IG5ldDIyODAgKmRldikKK3sKKwkvKiB0dXJuIG9mZiBhbGwgZm91ciBHUElPKl9EQVRBIGJpdHMgKi8KKwl3cml0ZWwgKHJlYWRsICgmZGV2LT5yZWdzLT5ncGlvY3RsKSAmIH4weDBmLAorCQkJJmRldi0+cmVncy0+Z3Bpb2N0bCk7Cit9CisKKyNlbHNlCisKKyNkZWZpbmUgbmV0MjI4MF9sZWRfaW5pdChkZXYpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIG5ldDIyODBfbGVkX3NwZWVkKGRldiwgc3BlZWQpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbmV0MjI4MF9sZWRfc2h1dGRvd24oZGV2KQlkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIHhwcmludGsoZGV2LGxldmVsLGZtdCxhcmdzLi4uKSBcCisJcHJpbnRrKGxldmVsICIlcyAlczogIiBmbXQgLCBkcml2ZXJfbmFtZSAsIFwKKwkJCXBjaV9uYW1lKGRldi0+cGRldikgLCAjIyBhcmdzKQorCisjaWZkZWYgREVCVUcKKyN1bmRlZiBERUJVRworI2RlZmluZSBERUJVRyhkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fREVCVUcgLCBmbXQgLCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREVCVUcoZGV2LGZtdCxhcmdzLi4uKSBcCisJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmIC8qIERFQlVHICovCisKKyNpZmRlZiBWRVJCT1NFCisjZGVmaW5lIFZERUJVRyBERUJVRworI2Vsc2UKKyNkZWZpbmUgVkRFQlVHKGRldixmbXQsYXJncy4uLikgXAorCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgkvKiBWRVJCT1NFICovCisKKyNkZWZpbmUgRVJST1IoZGV2LGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX0VSUiAsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIFdBUk4oZGV2LGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX1dBUk5JTkcgLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBJTkZPKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9JTkZPICwgZm10ICwgIyMgYXJncykKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSB2b2lkIHN0YXJ0X291dF9uYWtpbmcgKHN0cnVjdCBuZXQyMjgwX2VwICplcCkKK3sKKwkvKiBOT1RFOiAgaGFyZHdhcmUgcmFjZXMgbHVyayBoZXJlLCBhbmQgUElORyBwcm90b2NvbCBpc3N1ZXMgKi8KKwl3cml0ZWwgKCgxIDw8IFNFVF9OQUtfT1VUX1BBQ0tFVFMpLCAmZXAtPnJlZ3MtPmVwX3JzcCk7CisJLyogc3luY2ggd2l0aCBkZXZpY2UgKi8KKwlyZWFkbCAoJmVwLT5yZWdzLT5lcF9yc3ApOworfQorCisjaWZkZWYgREVCVUcKK3N0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfb3V0X25ha2luZyAoc3RydWN0IG5ldDIyODBfZXAgKmVwLCBjb25zdCBjaGFyICp3aGVyZSkKK3sKKwl1MzIJdG1wID0gcmVhZGwgKCZlcC0+cmVncy0+ZXBfc3RhdCk7CisKKwlpZiAoKHRtcCAmICgxIDw8IE5BS19PVVRfUEFDS0VUUykpID09IDApIHsKKwkJREVCVUcgKGVwLT5kZXYsICIlcyAlcyAlMDh4ICFOQUtcbiIsCisJCQkJZXAtPmVwLm5hbWUsIHdoZXJlLCB0bXApOworCQl3cml0ZWwgKCgxIDw8IFNFVF9OQUtfT1VUX1BBQ0tFVFMpLAorCQkJJmVwLT5yZWdzLT5lcF9yc3ApOworCX0KK30KKyNkZWZpbmUgQVNTRVJUX09VVF9OQUtJTkcoZXApIGFzc2VydF9vdXRfbmFraW5nKGVwLF9fRlVOQ1RJT05fXykKKyNlbHNlCisjZGVmaW5lIEFTU0VSVF9PVVRfTkFLSU5HKGVwKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RvcF9vdXRfbmFraW5nIChzdHJ1Y3QgbmV0MjI4MF9lcCAqZXApCit7CisJdTMyCXRtcDsKKworCXRtcCA9IHJlYWRsICgmZXAtPnJlZ3MtPmVwX3N0YXQpOworCWlmICgodG1wICYgKDEgPDwgTkFLX09VVF9QQUNLRVRTKSkgIT0gMCkKKwkJd3JpdGVsICgoMSA8PCBDTEVBUl9OQUtfT1VUX1BBQ0tFVFMpLCAmZXAtPnJlZ3MtPmVwX3JzcCk7Cit9CisKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NmVhNWE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMKQEAgLTAsMCArMSwyODcyIEBACisvKgorICogb21hcF91ZGMuYyAtLSBmb3IgT01BUCBmdWxsIHNwZWVkIHVkYzsgbW9zdCBjaGlwcyBzdXBwb3J0IE9URy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IERhdmlkIEJyb3duZWxsCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyN1bmRlZglERUJVRworI3VuZGVmCVZFUkJPU0UKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl9jaDkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfZ2FkZ2V0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiX290Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgorCisjaW5jbHVkZSAib21hcF91ZGMuaCIKKworI3VuZGVmCVVTQl9UUkFDRQorCisvKiBidWxrIERNQSBzZWVtcyB0byBiZSBiZWhhdmluZyBmb3IgYm90aCBJTiBhbmQgT1VUICovCisjZGVmaW5lCVVTRV9ETUEKKworLyogSVNPIHRvbyAqLworI2RlZmluZQlVU0VfSVNPCisKKyNkZWZpbmUJRFJJVkVSX0RFU0MJIk9NQVAgVURDIGRyaXZlciIKKyNkZWZpbmUJRFJJVkVSX1ZFUlNJT04JIjQgT2N0b2JlciAyMDA0IgorCisjZGVmaW5lCURNQV9BRERSX0lOVkFMSUQJKH4oZG1hX2FkZHJfdCkwKQorCisKKy8qCisgKiBUaGUgT01BUCBVREMgbmVlZHMgX3ZlcnlfIGVhcmx5IGVuZHBvaW50IHNldHVwOiAgYmVmb3JlIGVuYWJsaW5nIHRoZQorICogRCsgcHVsbHVwIHRvIGFsbG93IGVudW1lcmF0aW9uLiAgVGhhdCdzIHRvbyBlYXJseSBmb3IgdGhlIGdhZGdldAorICogZnJhbWV3b3JrIHRvIHVzZSBmcm9tIHVzYl9lbmRwb2ludF9lbmFibGUoKSwgd2hpY2ggaGFwcGVucyBhZnRlcgorICogZW51bWVyYXRpb24gYXMgcGFydCBvZiBhY3RpdmF0aW5nIGFuIGludGVyZmFjZS4gIChCdXQgaWYgd2UgYWRkIGFuCisgKiBvcHRpb25hbCBuZXcgIlVEQyBub3QgeWV0IHJ1bm5pbmciIHN0YXRlIHRvIHRoZSBnYWRnZXQgZHJpdmVyIG1vZGVsLAorICogZXZlbiBqdXN0IGR1cmluZyBkcml2ZXIgYmluZGluZywgdGhlIGVuZHBvaW50IGF1dG9jb25maWcgbG9naWMgaXMgdGhlCisgKiBuYXR1cmFsIHNwb3QgdG8gbWFudWZhY3R1cmUgbmV3IGVuZHBvaW50cy4pCisgKgorICogU28gaW5zdGVhZCBvZiB1c2luZyBlbmRwb2ludCBlbmFibGUgY2FsbHMgdG8gY29udHJvbCB0aGUgaGFyZHdhcmUgc2V0dXAsCisgKiB0aGlzIGRyaXZlciBkZWZpbmVzIGEgImZpZm8gbW9kZSIgcGFyYW1ldGVyLiAgSXQncyB1c2VkIGR1cmluZyBkcml2ZXIKKyAqIGluaXRpYWxpemF0aW9uIHRvIGNob29zZSBhbW9uZyBhIHNldCBvZiBwcmUtZGVmaW5lZCBlbmRwb2ludCBjb25maWdzLgorICogU2VlIG9tYXBfdWRjX3NldHVwKCkgZm9yIGF2YWlsYWJsZSBtb2Rlcywgb3IgdG8gYWRkIG90aGVycy4gIFRoYXQgY29kZQorICogbGl2ZXMgaW4gYW4gaW5pdCBzZWN0aW9uLCBzbyB1c2UgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUgaWYgeW91IG5lZWQKKyAqIHRvIGNoYW5nZSB0aGUgZmlmbyBtb2RlIGFmdGVyIHRoZSBrZXJuZWwgYm9vdHMuCisgKgorICogR2FkZ2V0IGRyaXZlcnMgbm9ybWFsbHkgaWdub3JlIGVuZHBvaW50cyB0aGV5IGRvbid0IGNhcmUgYWJvdXQsIGFuZAorICogd29uJ3QgaW5jbHVkZSB0aGVtIGluIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvcnMuICBUaGF0IG1lYW5zIG9ubHkKKyAqIG1pc2JlaGF2aW5nIGhvc3RzIHdvdWxkIGV2ZW4gbm90aWNlIHRoZXkgZXhpc3QuCisgKi8KKyNpZmRlZglVU0VfSVNPCitzdGF0aWMgdW5zaWduZWQgZmlmb19tb2RlID0gMzsKKyNlbHNlCitzdGF0aWMgdW5zaWduZWQgZmlmb19tb2RlID0gMDsKKyNlbmRpZgorCisvKiAibW9kcHJvYmUgb21hcF91ZGMgZmlmb19tb2RlPTQyIiwgb3IgZWxzZSBhcyBhIGtlcm5lbAorICogYm9vdCBwYXJhbWV0ZXIgIm9tYXBfdWRjOmZpZm9fbW9kZT00MiIKKyAqLworbW9kdWxlX3BhcmFtIChmaWZvX21vZGUsIHVpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyAoZmlmb19tb2RlLCAiZW5kcG9pbnQgc2V0dXAgKDAgPT0gZGVmYXVsdCkiKTsKKworI2lmZGVmCVVTRV9ETUEKK3N0YXRpYyB1bnNpZ25lZCB1c2VfZG1hID0gMTsKKworLyogIm1vZHByb2JlIG9tYXBfdWRjIHVzZV9kbWE9eSIsIG9yIGVsc2UgYXMgYSBrZXJuZWwKKyAqIGJvb3QgcGFyYW1ldGVyICJvbWFwX3VkYzp1c2VfZG1hPXkiCisgKi8KK21vZHVsZV9wYXJhbSAodXNlX2RtYSwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDICh1c2VfZG1hLCAiZW5hYmxlL2Rpc2FibGUgRE1BIik7CisjZWxzZQkvKiAhVVNFX0RNQSAqLworCisvKiBzYXZlIGEgYml0IG9mIGNvZGUgKi8KKyNkZWZpbmUJdXNlX2RtYQkJMAorI2VuZGlmCS8qICFVU0VfRE1BICovCisKKworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWUgW10gPSAib21hcF91ZGMiOworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX2Rlc2MgW10gPSBEUklWRVJfREVTQzsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogdGhlcmUncyBhIG5vdGlvbiBvZiAiY3VycmVudCBlbmRwb2ludCIgZm9yIG1vZGlmeWluZyBlbmRwb2ludAorICogc3RhdGUsIGFuZCBQSU8gYWNjZXNzIHRvIGl0cyBGSUZPLiAgCisgKi8KKworc3RhdGljIHZvaWQgdXNlX2VwKHN0cnVjdCBvbWFwX2VwICplcCwgdTE2IHNlbGVjdCkKK3sKKwl1MTYJbnVtID0gZXAtPmJFbmRwb2ludEFkZHJlc3MgJiAweDBmOworCisJaWYgKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikKKwkJbnVtIHw9IFVEQ19FUF9ESVI7CisJVURDX0VQX05VTV9SRUcgPSBudW0gfCBzZWxlY3Q7CisJLyogd2hlbiBzZWxlY3QsIE1VU1QgZGVzZWxlY3QgbGF0ZXIgISEgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlc2VsZWN0X2VwKHZvaWQpCit7CisJVURDX0VQX05VTV9SRUcgJj0gflVEQ19FUF9TRUw7CisJLyogNiB3YWl0IHN0YXRlcyBiZWZvcmUgVFggd2lsbCBoYXBwZW4gKi8KK30KKworc3RhdGljIHZvaWQgZG1hX2NoYW5uZWxfY2xhaW0oc3RydWN0IG9tYXBfZXAgKmVwLCB1bnNpZ25lZCBwcmVmZXJyZWQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG9tYXBfZXBfZW5hYmxlKHN0cnVjdCB1c2JfZXAgKl9lcCwKKwkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjKQoreworCXN0cnVjdCBvbWFwX2VwCSplcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBvbWFwX2VwLCBlcCk7CisJc3RydWN0IG9tYXBfdWRjCSp1ZGM7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwl1MTYJCW1heHA7CisKKwkvKiBjYXRjaCB2YXJpb3VzIGJvZ3VzIHBhcmFtZXRlcnMgKi8KKwlpZiAoIV9lcCB8fCAhZGVzYyB8fCBlcC0+ZGVzYworCQkJfHwgZGVzYy0+YkRlc2NyaXB0b3JUeXBlICE9IFVTQl9EVF9FTkRQT0lOVAorCQkJfHwgZXAtPmJFbmRwb2ludEFkZHJlc3MgIT0gZGVzYy0+YkVuZHBvaW50QWRkcmVzcworCQkJfHwgZXAtPm1heHBhY2tldCA8IGxlMTZfdG9fY3B1CisJCQkJCQkoZGVzYy0+d01heFBhY2tldFNpemUpKSB7CisJCURCRygiJXMsIGJhZCBlcCBvciBkZXNjcmlwdG9yXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJbWF4cCA9IGxlMTZfdG9fY3B1IChkZXNjLT53TWF4UGFja2V0U2l6ZSk7CisJaWYgKChkZXNjLT5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSworCQkJCSYmIG1heHAgIT0gZXAtPm1heHBhY2tldCkKKwkJCXx8IGRlc2MtPndNYXhQYWNrZXRTaXplID4gZXAtPm1heHBhY2tldAorCQkJfHwgIWRlc2MtPndNYXhQYWNrZXRTaXplKSB7CisJCURCRygiJXMsIGJhZCAlcyBtYXhwYWNrZXRcbiIsIF9fRlVOQ1RJT05fXywgX2VwLT5uYW1lKTsKKwkJcmV0dXJuIC1FUkFOR0U7CisJfQorCisjaWZkZWYJVVNFX0lTTworCWlmICgoZGVzYy0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MKKwkJCQkmJiBkZXNjLT5iSW50ZXJ2YWwgIT0gMSkpIHsKKwkJLyogaGFyZHdhcmUgd2FudHMgcGVyaW9kID0gMTsgVVNCIGFsbG93cyAyXihJbnRlcnZhbC0xKSAqLworCQlEQkcoIiVzLCB1bnN1cHBvcnRlZCBJU08gcGVyaW9kICVkbXNcbiIsIF9lcC0+bmFtZSwKKwkJCQkxIDw8IChkZXNjLT5iSW50ZXJ2YWwgLSAxKSk7CisJCXJldHVybiAtRURPTTsKKwl9CisjZWxzZQorCWlmIChkZXNjLT5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykgeworCQlEQkcoIiVzLCBJU08gbnlldFxuIiwgX2VwLT5uYW1lKTsKKwkJcmV0dXJuIC1FRE9NOworCX0KKyNlbmRpZgorCisJLyogeGZlciB0eXBlcyBtdXN0IG1hdGNoLCBleGNlcHQgdGhhdCBpbnRlcnJ1cHQgfj0gYnVsayAqLworCWlmIChlcC0+Ym1BdHRyaWJ1dGVzICE9IGRlc2MtPmJtQXR0cmlidXRlcworCQkJJiYgZXAtPmJtQXR0cmlidXRlcyAhPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLCisJCQkmJiBkZXNjLT5ibUF0dHJpYnV0ZXMgIT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKSB7CisJCURCRygiJXMsICVzIHR5cGUgbWlzbWF0Y2hcbiIsIF9fRlVOQ1RJT05fXywgX2VwLT5uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdWRjID0gZXAtPnVkYzsKKwlpZiAoIXVkYy0+ZHJpdmVyIHx8IHVkYy0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKSB7CisJCURCRygiJXMsIGJvZ3VzIGRldmljZSBzdGF0ZVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FU0hVVERPV047CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJZXAtPmRlc2MgPSBkZXNjOworCWVwLT5pcnFzID0gMDsKKwllcC0+c3RvcHBlZCA9IDA7CisJZXAtPmVwLm1heHBhY2tldCA9IG1heHA7CisKKwkvKiBzZXQgZW5kcG9pbnQgdG8gaW5pdGlhbCBzdGF0ZSAqLworCWVwLT5kbWFfY2hhbm5lbCA9IDA7CisJZXAtPmhhc19kbWEgPSAwOworCWVwLT5sY2ggPSAtMTsKKwl1c2VfZXAoZXAsIFVEQ19FUF9TRUwpOworCVVEQ19DVFJMX1JFRyA9IFVEQ19SRVNFVF9FUDsKKwllcC0+YWNrd2FpdCA9IDA7CisJZGVzZWxlY3RfZXAoKTsKKworCWlmIChlcC0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpCisJCWxpc3RfYWRkKCZlcC0+aXNvLCAmdWRjLT5pc28pOworCisJLyogbWF5YmUgYXNzaWduIGEgRE1BIGNoYW5uZWwgdG8gdGhpcyBlbmRwb2ludCAqLworCWlmICh1c2VfZG1hICYmIGRlc2MtPmJtQXR0cmlidXRlcyA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKQorCQkvKiBGSVhNRSBJU08gY2FuIGRtYSwgYnV0IHByZWZlcnMgZmlyc3QgY2hhbm5lbCAqLworCQlkbWFfY2hhbm5lbF9jbGFpbShlcCwgMCk7CisKKwkvKiBQSU8gT1VUIG1heSBSWCBwYWNrZXRzICovCisJaWYgKGRlc2MtPmJtQXR0cmlidXRlcyAhPSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DCisJCQkmJiAhZXAtPmhhc19kbWEKKwkJCSYmICEoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSkgeworCQlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0ZJRk9fRU47CisJCWVwLT5hY2t3YWl0ID0gMSArIGVwLT5kb3VibGVfYnVmOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCVZEQkcoIiVzIGVuYWJsZWRcbiIsIF9lcC0+bmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG51a2Uoc3RydWN0IG9tYXBfZXAgKiwgaW50IHN0YXR1cyk7CisKK3N0YXRpYyBpbnQgb21hcF9lcF9kaXNhYmxlKHN0cnVjdCB1c2JfZXAgKl9lcCkKK3sKKwlzdHJ1Y3Qgb21hcF9lcAkqZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3Qgb21hcF9lcCwgZXApOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlpZiAoIV9lcCB8fCAhZXAtPmRlc2MpIHsKKwkJREJHKCIlcywgJXMgbm90IGVuYWJsZWRcbiIsIF9fRlVOQ1RJT05fXywKKwkJCV9lcCA/IGVwLT5lcC5uYW1lIDogTlVMTCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+dWRjLT5sb2NrLCBmbGFncyk7CisJZXAtPmRlc2MgPSAwOworCW51a2UgKGVwLCAtRVNIVVRET1dOKTsKKwllcC0+ZXAubWF4cGFja2V0ID0gZXAtPm1heHBhY2tldDsKKwllcC0+aGFzX2RtYSA9IDA7CisJVURDX0NUUkxfUkVHID0gVURDX1NFVF9IQUxUOworCWxpc3RfZGVsX2luaXQoJmVwLT5pc28pOworCWRlbF90aW1lcigmZXAtPnRpbWVyKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT51ZGMtPmxvY2ssIGZsYWdzKTsKKworCVZEQkcoIiVzIGRpc2FibGVkXG4iLCBfZXAtPm5hbWUpOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHVzYl9yZXF1ZXN0ICoKK29tYXBfYWxsb2NfcmVxdWVzdChzdHJ1Y3QgdXNiX2VwICplcCwgaW50IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3Qgb21hcF9yZXEJKnJlcTsKKworCXJlcSA9IGttYWxsb2Moc2l6ZW9mICpyZXEsIGdmcF9mbGFncyk7CisJaWYgKHJlcSkgeworCQltZW1zZXQgKHJlcSwgMCwgc2l6ZW9mICpyZXEpOworCQlyZXEtPnJlcS5kbWEgPSBETUFfQUREUl9JTlZBTElEOworCQlJTklUX0xJU1RfSEVBRCAoJnJlcS0+cXVldWUpOworCX0KKwlyZXR1cm4gJnJlcS0+cmVxOworfQorCitzdGF0aWMgdm9pZAorb21hcF9mcmVlX3JlcXVlc3Qoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSkKK3sKKwlzdHJ1Y3Qgb21hcF9yZXEJKnJlcSA9IGNvbnRhaW5lcl9vZihfcmVxLCBzdHJ1Y3Qgb21hcF9yZXEsIHJlcSk7CisKKwlpZiAoX3JlcSkKKwkJa2ZyZWUgKHJlcSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkICoKK29tYXBfYWxsb2NfYnVmZmVyKAorCXN0cnVjdCB1c2JfZXAJKl9lcCwKKwl1bnNpZ25lZAlieXRlcywKKwlkbWFfYWRkcl90CSpkbWEsCisJaW50CQlnZnBfZmxhZ3MKKykKK3sKKwl2b2lkCQkqcmV0dmFsOworCXN0cnVjdCBvbWFwX2VwCSplcDsKKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IG9tYXBfZXAsIGVwKTsKKwlpZiAodXNlX2RtYSAmJiBlcC0+aGFzX2RtYSkgeworCQlzdGF0aWMgaW50CXdhcm5lZDsKKwkJaWYgKCF3YXJuZWQgJiYgYnl0ZXMgPCBQQUdFX1NJWkUpIHsKKwkJCWRldl93YXJuKGVwLT51ZGMtPmdhZGdldC5kZXYucGFyZW50LAorCQkJCSJ1c2luZyBkbWFfYWxsb2NfY29oZXJlbnQgZm9yICIKKwkJCQkic21hbGwgYWxsb2NhdGlvbnMgd2FzdGVzIG1lbW9yeVxuIik7CisJCQl3YXJuZWQrKzsKKwkJfQorCQlyZXR1cm4gZG1hX2FsbG9jX2NvaGVyZW50KGVwLT51ZGMtPmdhZGdldC5kZXYucGFyZW50LAorCQkJCWJ5dGVzLCBkbWEsIGdmcF9mbGFncyk7CisJfQorCisJcmV0dmFsID0ga21hbGxvYyhieXRlcywgZ2ZwX2ZsYWdzKTsKKwlpZiAocmV0dmFsKQorCQkqZG1hID0gdmlydF90b19waHlzKHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgb21hcF9mcmVlX2J1ZmZlcigKKwlzdHJ1Y3QgdXNiX2VwCSpfZXAsCisJdm9pZAkJKmJ1ZiwKKwlkbWFfYWRkcl90CWRtYSwKKwl1bnNpZ25lZAlieXRlcworKQoreworCXN0cnVjdCBvbWFwX2VwCSplcDsKKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IG9tYXBfZXAsIGVwKTsKKwlpZiAodXNlX2RtYSAmJiBfZXAgJiYgZXAtPmhhc19kbWEpCisJCWRtYV9mcmVlX2NvaGVyZW50KGVwLT51ZGMtPmdhZGdldC5kZXYucGFyZW50LCBieXRlcywgYnVmLCBkbWEpOworCWVsc2UKKwkJa2ZyZWUgKGJ1Zik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCitkb25lKHN0cnVjdCBvbWFwX2VwICplcCwgc3RydWN0IG9tYXBfcmVxICpyZXEsIGludCBzdGF0dXMpCit7CisJdW5zaWduZWQJCXN0b3BwZWQgPSBlcC0+c3RvcHBlZDsKKworCWxpc3RfZGVsX2luaXQoJnJlcS0+cXVldWUpOworCisJaWYgKHJlcS0+cmVxLnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpCisJCXJlcS0+cmVxLnN0YXR1cyA9IHN0YXR1czsKKwllbHNlCisJCXN0YXR1cyA9IHJlcS0+cmVxLnN0YXR1czsKKworCWlmICh1c2VfZG1hICYmIGVwLT5oYXNfZG1hKSB7CisJCWlmIChyZXEtPm1hcHBlZCkgeworCQkJZG1hX3VubWFwX3NpbmdsZShlcC0+dWRjLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQlyZXEtPnJlcS5kbWEsIHJlcS0+cmVxLmxlbmd0aCwKKwkJCQkoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKQorCQkJCQk/IERNQV9UT19ERVZJQ0UKKwkJCQkJOiBETUFfRlJPTV9ERVZJQ0UpOworCQkJcmVxLT5yZXEuZG1hID0gRE1BX0FERFJfSU5WQUxJRDsKKwkJCXJlcS0+bWFwcGVkID0gMDsKKwkJfSBlbHNlCisJCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShlcC0+dWRjLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQlyZXEtPnJlcS5kbWEsIHJlcS0+cmVxLmxlbmd0aCwKKwkJCQkoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKQorCQkJCQk/IERNQV9UT19ERVZJQ0UKKwkJCQkJOiBETUFfRlJPTV9ERVZJQ0UpOworCX0KKworI2lmbmRlZglVU0JfVFJBQ0UKKwlpZiAoc3RhdHVzICYmIHN0YXR1cyAhPSAtRVNIVVRET1dOKQorI2VuZGlmCisJCVZEQkcoImNvbXBsZXRlICVzIHJlcSAlcCBzdGF0ICVkIGxlbiAldS8ldVxuIiwKKwkJCWVwLT5lcC5uYW1lLCAmcmVxLT5yZXEsIHN0YXR1cywKKwkJCXJlcS0+cmVxLmFjdHVhbCwgcmVxLT5yZXEubGVuZ3RoKTsKKworCS8qIGRvbid0IG1vZGlmeSBxdWV1ZSBoZWFkcyBkdXJpbmcgY29tcGxldGlvbiBjYWxsYmFjayAqLworCWVwLT5zdG9wcGVkID0gMTsKKwlzcGluX3VubG9jaygmZXAtPnVkYy0+bG9jayk7CisJcmVxLT5yZXEuY29tcGxldGUoJmVwLT5lcCwgJnJlcS0+cmVxKTsKKwlzcGluX2xvY2soJmVwLT51ZGMtPmxvY2spOworCWVwLT5zdG9wcGVkID0gc3RvcHBlZDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZQlGSUZPX0ZVTEwJKFVEQ19OT05fSVNPX0ZJRk9fRlVMTCB8IFVEQ19JU09fRklGT19GVUxMKQorI2RlZmluZQlGSUZPX1VOV1JJVEFCTEUJKFVEQ19FUF9IQUxURUQgfCBGSUZPX0ZVTEwpCisKKyNkZWZpbmUgRklGT19FTVBUWQkoVURDX05PTl9JU09fRklGT19FTVBUWSB8IFVEQ19JU09fRklGT19FTVBUWSkKKyNkZWZpbmUgRklGT19VTlJFQURBQkxFIChVRENfRVBfSEFMVEVEIHwgRklGT19FTVBUWSkKKworc3RhdGljIGlubGluZSBpbnQgCit3cml0ZV9wYWNrZXQodTggKmJ1Ziwgc3RydWN0IG9tYXBfcmVxICpyZXEsIHVuc2lnbmVkIG1heCkKK3sKKwl1bnNpZ25lZAlsZW47CisJdTE2CQkqd3A7CisKKwlsZW4gPSBtaW4ocmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsLCBtYXgpOworCXJlcS0+cmVxLmFjdHVhbCArPSBsZW47CisKKwltYXggPSBsZW47CisJaWYgKGxpa2VseSgoKChpbnQpYnVmKSAmIDEpID09IDApKSB7CisJCXdwID0gKHUxNiAqKWJ1ZjsKKwkJd2hpbGUgKG1heCA+PSAyKSB7CisJCQlVRENfREFUQV9SRUcgPSAqd3ArKzsKKwkJCW1heCAtPSAyOworCQl9CisJCWJ1ZiA9ICh1OCAqKXdwOworCX0KKwl3aGlsZSAobWF4LS0pCisJCSoodm9sYXRpbGUgdTggKikmVURDX0RBVEFfUkVHID0gKmJ1ZisrOworCXJldHVybiBsZW47Cit9CisKKy8vIEZJWE1FIGNoYW5nZSByL3cgZmlmbyBjYWxsaW5nIGNvbnZlbnRpb24KKworCisvLyByZXR1cm46ICAwID0gc3RpbGwgcnVubmluZywgMSA9IGNvbXBsZXRlZCwgbmVnYXRpdmUgPSBlcnJubworc3RhdGljIGludCB3cml0ZV9maWZvKHN0cnVjdCBvbWFwX2VwICplcCwgc3RydWN0IG9tYXBfcmVxICpyZXEpCit7CisJdTgJCSpidWY7CisJdW5zaWduZWQJY291bnQ7CisJaW50CQlpc19sYXN0OworCXUxNgkJZXBfc3RhdDsKKworCWJ1ZiA9IHJlcS0+cmVxLmJ1ZiArIHJlcS0+cmVxLmFjdHVhbDsKKwlwcmVmZXRjaChidWYpOworCisJLyogUElPLUlOIGlzbid0IGRvdWJsZSBidWZmZXJlZCBleGNlcHQgZm9yIGlzbyAqLworCWVwX3N0YXQgPSBVRENfU1RBVF9GTEdfUkVHOworCWlmIChlcF9zdGF0ICYgRklGT19VTldSSVRBQkxFKQorCQlyZXR1cm4gMDsKKworCWNvdW50ID0gZXAtPmVwLm1heHBhY2tldDsKKwljb3VudCA9IHdyaXRlX3BhY2tldChidWYsIHJlcSwgY291bnQpOworCVVEQ19DVFJMX1JFRyA9IFVEQ19TRVRfRklGT19FTjsKKwllcC0+YWNrd2FpdCA9IDE7CisKKwkvKiBsYXN0IHBhY2tldCBpcyBvZnRlbiBzaG9ydCAoc29tZXRpbWVzIGEgemxwKSAqLworCWlmIChjb3VudCAhPSBlcC0+ZXAubWF4cGFja2V0KQorCQlpc19sYXN0ID0gMTsKKwllbHNlIGlmIChyZXEtPnJlcS5sZW5ndGggPT0gcmVxLT5yZXEuYWN0dWFsCisJCQkmJiAhcmVxLT5yZXEuemVybykKKwkJaXNfbGFzdCA9IDE7CisJZWxzZQorCQlpc19sYXN0ID0gMDsKKworCS8qIE5PVEU6ICByZXF1ZXN0cyBjb21wbGV0ZSB3aGVuIGFsbCBJTiBkYXRhIGlzIGluIGEKKwkgKiBGSUZPIChvciBzb21ldGltZXMgbGF0ZXIsIGlmIGEgemxwIHdhcyBuZWVkZWQpLgorCSAqIFVzZSB1c2JfZXBfZmlmb19zdGF0dXMoKSB3aGVyZSBuZWVkZWQuCisJICovCisJaWYgKGlzX2xhc3QpCisJCWRvbmUoZXAsIHJlcSwgMCk7CisJcmV0dXJuIGlzX2xhc3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IAorcmVhZF9wYWNrZXQodTggKmJ1Ziwgc3RydWN0IG9tYXBfcmVxICpyZXEsIHVuc2lnbmVkIGF2YWlsKQoreworCXVuc2lnbmVkCWxlbjsKKwl1MTYJCSp3cDsKKworCWxlbiA9IG1pbihyZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWwsIGF2YWlsKTsKKwlyZXEtPnJlcS5hY3R1YWwgKz0gbGVuOworCWF2YWlsID0gbGVuOworCisJaWYgKGxpa2VseSgoKChpbnQpYnVmKSAmIDEpID09IDApKSB7CisJCXdwID0gKHUxNiAqKWJ1ZjsKKwkJd2hpbGUgKGF2YWlsID49IDIpIHsKKwkJCSp3cCsrID0gVURDX0RBVEFfUkVHOworCQkJYXZhaWwgLT0gMjsKKwkJfQorCQlidWYgPSAodTggKil3cDsKKwl9CisJd2hpbGUgKGF2YWlsLS0pCisJCSpidWYrKyA9ICoodm9sYXRpbGUgdTggKikmVURDX0RBVEFfUkVHOworCXJldHVybiBsZW47Cit9CisKKy8vIHJldHVybjogIDAgPSBzdGlsbCBydW5uaW5nLCAxID0gcXVldWUgZW1wdHksIG5lZ2F0aXZlID0gZXJybm8KK3N0YXRpYyBpbnQgcmVhZF9maWZvKHN0cnVjdCBvbWFwX2VwICplcCwgc3RydWN0IG9tYXBfcmVxICpyZXEpCit7CisJdTgJCSpidWY7CisJdW5zaWduZWQJY291bnQsIGF2YWlsOworCWludAkJaXNfbGFzdDsKKworCWJ1ZiA9IHJlcS0+cmVxLmJ1ZiArIHJlcS0+cmVxLmFjdHVhbDsKKwlwcmVmZXRjaHcoYnVmKTsKKworCWZvciAoOzspIHsKKwkJdTE2CWVwX3N0YXQgPSBVRENfU1RBVF9GTEdfUkVHOworCisJCWlzX2xhc3QgPSAwOworCQlpZiAoZXBfc3RhdCAmIEZJRk9fRU1QVFkpIHsKKwkJCWlmICghZXAtPmRvdWJsZV9idWYpCisJCQkJYnJlYWs7CisJCQllcC0+Zm5mID0gMTsKKwkJfQorCQlpZiAoZXBfc3RhdCAmIFVEQ19FUF9IQUxURUQpCisJCQlicmVhazsKKworCQlpZiAoZXBfc3RhdCAmIEZJRk9fRlVMTCkKKwkJCWF2YWlsID0gZXAtPmVwLm1heHBhY2tldDsKKwkJZWxzZSAgeworCQkJYXZhaWwgPSBVRENfUlhGU1RBVF9SRUc7CisJCQllcC0+Zm5mID0gZXAtPmRvdWJsZV9idWY7CisJCX0KKwkJY291bnQgPSByZWFkX3BhY2tldChidWYsIHJlcSwgYXZhaWwpOworCisJCS8qIHBhcnRpYWwgcGFja2V0IHJlYWRzIG1heSBub3QgYmUgZXJyb3JzICovCisJCWlmIChjb3VudCA8IGVwLT5lcC5tYXhwYWNrZXQpIHsKKwkJCWlzX2xhc3QgPSAxOworCQkJLyogb3ZlcmZsb3dlZCB0aGlzIHJlcXVlc3Q/ICBmbHVzaCBleHRyYSBkYXRhICovCisJCQlpZiAoY291bnQgIT0gYXZhaWwpIHsKKwkJCQlyZXEtPnJlcS5zdGF0dXMgPSAtRU9WRVJGTE9XOworCQkJCWF2YWlsIC09IGNvdW50OworCQkJCXdoaWxlIChhdmFpbC0tKQorCQkJCQkodm9pZCkgKih2b2xhdGlsZSB1OCAqKSZVRENfREFUQV9SRUc7CisJCQl9CisJCX0gZWxzZSBpZiAocmVxLT5yZXEubGVuZ3RoID09IHJlcS0+cmVxLmFjdHVhbCkKKwkJCWlzX2xhc3QgPSAxOworCQllbHNlCisJCQlpc19sYXN0ID0gMDsKKworCQlpZiAoIWVwLT5iRW5kcG9pbnRBZGRyZXNzKQorCQkJYnJlYWs7CisJCWlmIChpc19sYXN0KQorCQkJZG9uZShlcCwgcmVxLCAwKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBpc19sYXN0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdTE2IGRtYV9zcmNfbGVuKHN0cnVjdCBvbWFwX2VwICplcCwgZG1hX2FkZHJfdCBzdGFydCkKK3sKKwlkbWFfYWRkcl90CWVuZDsKKworCS8qIElOLURNQSBuZWVkcyB0aGlzIG9uIGZhdWx0L2NhbmNlbCBwYXRocywgc28gMTV4eCBtaXNyZXBvcnRzCisJICogdGhlIGxhc3QgdHJhbnNmZXIncyBieXRlY291bnQgYnkgbW9yZSB0aGFuIGEgRklGTydzIHdvcnRoLgorCSAqLworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkKKwkJcmV0dXJuIDA7CisKKwllbmQgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NTQUMoZXAtPmxjaCkpOworCWlmIChlbmQgPT0gZXAtPmRtYV9jb3VudGVyKQorCQlyZXR1cm4gMDsKKworCWVuZCB8PSBzdGFydCAmICgweGZmZmYgPDwgMTYpOworCWlmIChlbmQgPCBzdGFydCkKKwkJZW5kICs9IDB4MTAwMDA7CisJcmV0dXJuIGVuZCAtIHN0YXJ0OworfQorCisjZGVmaW5lIERNQV9ERVNUX0xBU1QoeCkgKGNwdV9pc19vbWFwMTV4eCgpIFwKKwkJPyBPTUFQX0RNQV9DU0FDKHgpIC8qIHJlYWxseTogQ1BDICovIFwKKwkJOiBPTUFQX0RNQV9DREFDKHgpKQorCitzdGF0aWMgdTE2IGRtYV9kZXN0X2xlbihzdHJ1Y3Qgb21hcF9lcCAqZXAsIGRtYV9hZGRyX3Qgc3RhcnQpCit7CisJZG1hX2FkZHJfdAllbmQ7CisKKwllbmQgPSBvbWFwX3JlYWR3KERNQV9ERVNUX0xBU1QoZXAtPmxjaCkpOworCWlmIChlbmQgPT0gZXAtPmRtYV9jb3VudGVyKQorCQlyZXR1cm4gMDsKKworCWVuZCB8PSBzdGFydCAmICgweGZmZmYgPDwgMTYpOworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkKKwkJZW5kKys7CisJaWYgKGVuZCA8IHN0YXJ0KQorCQllbmQgKz0gMHgxMDAwMDsKKwlyZXR1cm4gZW5kIC0gc3RhcnQ7Cit9CisKKworLyogRWFjaCBVU0IgdHJhbnNmZXIgcmVxdWVzdCB1c2luZyBETUEgbWFwcyB0byBvbmUgb3IgbW9yZSBETUEgdHJhbnNmZXJzLgorICogV2hlbiBETUEgY29tcGxldGlvbiBpc24ndCByZXF1ZXN0IGNvbXBsZXRpb24sIHRoZSBVREMgY29udGludWVzIHdpdGgKKyAqIHRoZSBuZXh0IERNQSB0cmFuc2ZlciBmb3IgdGhhdCBVU0IgdHJhbnNmZXIuCisgKi8KKworc3RhdGljIHZvaWQgbmV4dF9pbl9kbWEoc3RydWN0IG9tYXBfZXAgKmVwLCBzdHJ1Y3Qgb21hcF9yZXEgKnJlcSkKK3sKKwl1MTYJCXR4ZG1hX2N0cmw7CisJdW5zaWduZWQJbGVuZ3RoID0gcmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsOworCWNvbnN0IGludAlzeW5jX21vZGUgPSBjcHVfaXNfb21hcDE1eHgoKQorCQkJCT8gT01BUF9ETUFfU1lOQ19GUkFNRQorCQkJCTogT01BUF9ETUFfU1lOQ19FTEVNRU5UOworCisJLyogbWVhc3VyZSBsZW5ndGggaW4gZWl0aGVyIGJ5dGVzIG9yIHBhY2tldHMgKi8KKwlpZiAoKGNwdV9pc19vbWFwMTZ4eCgpICYmIGxlbmd0aCA8PSAoVURDX1RYTl9UU0MgKyAxKSkKKwkJCXx8IChjcHVfaXNfb21hcDE1eHgoKSAmJiBsZW5ndGggPCBlcC0+bWF4cGFja2V0KSkgeworCQl0eGRtYV9jdHJsID0gVURDX1RYTl9FT1QgfCBsZW5ndGg7CisJCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMoZXAtPmxjaCwgT01BUF9ETUFfREFUQV9UWVBFX1M4LAorCQkJCWxlbmd0aCwgMSwgc3luY19tb2RlKTsKKwl9IGVsc2UgeworCQlsZW5ndGggPSBtaW4obGVuZ3RoIC8gZXAtPm1heHBhY2tldCwKKwkJCQkodW5zaWduZWQpIFVEQ19UWE5fVFNDICsgMSk7CisgCQl0eGRtYV9jdHJsID0gbGVuZ3RoOworCQlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKGVwLT5sY2gsIE9NQVBfRE1BX0RBVEFfVFlQRV9TOCwKKwkJCQllcC0+ZXAubWF4cGFja2V0LCBsZW5ndGgsIHN5bmNfbW9kZSk7CisJCWxlbmd0aCAqPSBlcC0+bWF4cGFja2V0OworCX0KKwlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhlcC0+bGNoLCBPTUFQX0RNQV9QT1JUX0VNSUZGLAorCQlPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywgcmVxLT5yZXEuZG1hICsgcmVxLT5yZXEuYWN0dWFsKTsKKworCW9tYXBfc3RhcnRfZG1hKGVwLT5sY2gpOworCWVwLT5kbWFfY291bnRlciA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NBQyhlcC0+bGNoKSk7CisJVURDX0RNQV9JUlFfRU5fUkVHIHw9IFVEQ19UWF9ET05FX0lFKGVwLT5kbWFfY2hhbm5lbCk7CisJVURDX1RYRE1BX1JFRyhlcC0+ZG1hX2NoYW5uZWwpID0gVURDX1RYTl9TVEFSVCB8IHR4ZG1hX2N0cmw7CisJcmVxLT5kbWFfYnl0ZXMgPSBsZW5ndGg7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmlzaF9pbl9kbWEoc3RydWN0IG9tYXBfZXAgKmVwLCBzdHJ1Y3Qgb21hcF9yZXEgKnJlcSwgaW50IHN0YXR1cykKK3sKKwlpZiAoc3RhdHVzID09IDApIHsKKwkJcmVxLT5yZXEuYWN0dWFsICs9IHJlcS0+ZG1hX2J5dGVzOworCisJCS8qIHJldHVybiBpZiB0aGlzIHJlcXVlc3QgbmVlZHMgdG8gc2VuZCBkYXRhIG9yIHpscCAqLworCQlpZiAocmVxLT5yZXEuYWN0dWFsIDwgcmVxLT5yZXEubGVuZ3RoKQorCQkJcmV0dXJuOworCQlpZiAocmVxLT5yZXEuemVybworCQkJCSYmIHJlcS0+ZG1hX2J5dGVzICE9IDAKKwkJCQkmJiAocmVxLT5yZXEuYWN0dWFsICUgZXAtPm1heHBhY2tldCkgPT0gMCkKKwkJCXJldHVybjsKKwl9IGVsc2UKKwkJcmVxLT5yZXEuYWN0dWFsICs9IGRtYV9zcmNfbGVuKGVwLCByZXEtPnJlcS5kbWEKKwkJCQkJCQkrIHJlcS0+cmVxLmFjdHVhbCk7CisKKwkvKiB0eCBjb21wbGV0aW9uICovCisJb21hcF9zdG9wX2RtYShlcC0+bGNoKTsKKwlVRENfRE1BX0lSUV9FTl9SRUcgJj0gflVEQ19UWF9ET05FX0lFKGVwLT5kbWFfY2hhbm5lbCk7CisJZG9uZShlcCwgcmVxLCBzdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCBuZXh0X291dF9kbWEoc3RydWN0IG9tYXBfZXAgKmVwLCBzdHJ1Y3Qgb21hcF9yZXEgKnJlcSkKK3sKKwl1bnNpZ25lZCBwYWNrZXRzOworCisJLyogTk9URTogIHdlIGZpbHRlcmVkIG91dCAic2hvcnQgcmVhZHMiIGJlZm9yZSwgc28gd2Uga25vdworCSAqIHRoZSBidWZmZXIgaGFzIG9ubHkgd2hvbGUgbnVtYmVycyBvZiBwYWNrZXRzLgorCSAqLworCisJLyogc2V0IHVwIHRoaXMgRE1BIHRyYW5zZmVyLCBlbmFibGUgdGhlIGZpZm8sIHN0YXJ0ICovCisJcGFja2V0cyA9IChyZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWwpIC8gZXAtPmVwLm1heHBhY2tldDsKKwlwYWNrZXRzID0gbWluKHBhY2tldHMsICh1bnNpZ25lZClVRENfUlhOX1RDICsgMSk7CisJcmVxLT5kbWFfYnl0ZXMgPSBwYWNrZXRzICogZXAtPmVwLm1heHBhY2tldDsKKwlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKGVwLT5sY2gsIE9NQVBfRE1BX0RBVEFfVFlQRV9TOCwKKwkJCWVwLT5lcC5tYXhwYWNrZXQsIHBhY2tldHMsCisJCQlPTUFQX0RNQV9TWU5DX0VMRU1FTlQpOworCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhlcC0+bGNoLCBPTUFQX0RNQV9QT1JUX0VNSUZGLAorCQlPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywgcmVxLT5yZXEuZG1hICsgcmVxLT5yZXEuYWN0dWFsKTsKKwllcC0+ZG1hX2NvdW50ZXIgPSBvbWFwX3JlYWR3KERNQV9ERVNUX0xBU1QoZXAtPmxjaCkpOworCisJVURDX1JYRE1BX1JFRyhlcC0+ZG1hX2NoYW5uZWwpID0gVURDX1JYTl9TVE9QIHwgKHBhY2tldHMgLSAxKTsKKwlVRENfRE1BX0lSUV9FTl9SRUcgfD0gVURDX1JYX0VPVF9JRShlcC0+ZG1hX2NoYW5uZWwpOworCVVEQ19FUF9OVU1fUkVHID0gKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgMHhmKTsKKwlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0ZJRk9fRU47CisKKwlvbWFwX3N0YXJ0X2RtYShlcC0+bGNoKTsKK30KKworc3RhdGljIHZvaWQKK2ZpbmlzaF9vdXRfZG1hKHN0cnVjdCBvbWFwX2VwICplcCwgc3RydWN0IG9tYXBfcmVxICpyZXEsIGludCBzdGF0dXMpCit7CisJdTE2CWNvdW50OworCisJaWYgKHN0YXR1cyA9PSAwKQorCQllcC0+ZG1hX2NvdW50ZXIgPSAodTE2KSAocmVxLT5yZXEuZG1hICsgcmVxLT5yZXEuYWN0dWFsKTsKKwljb3VudCA9IGRtYV9kZXN0X2xlbihlcCwgcmVxLT5yZXEuZG1hICsgcmVxLT5yZXEuYWN0dWFsKTsKKwljb3VudCArPSByZXEtPnJlcS5hY3R1YWw7CisJaWYgKGNvdW50IDw9IHJlcS0+cmVxLmxlbmd0aCkKKwkJcmVxLT5yZXEuYWN0dWFsID0gY291bnQ7CisKKwlpZiAoY291bnQgIT0gcmVxLT5kbWFfYnl0ZXMgfHwgc3RhdHVzKQorCQlvbWFwX3N0b3BfZG1hKGVwLT5sY2gpOworCisJLyogaWYgdGhpcyB3YXNuJ3Qgc2hvcnQsIHJlcXVlc3QgbWF5IG5lZWQgYW5vdGhlciB0cmFuc2ZlciAqLworCWVsc2UgaWYgKHJlcS0+cmVxLmFjdHVhbCA8IHJlcS0+cmVxLmxlbmd0aCkKKwkJcmV0dXJuOworCisJLyogcnggY29tcGxldGlvbiAqLworCVVEQ19ETUFfSVJRX0VOX1JFRyAmPSB+VURDX1JYX0VPVF9JRShlcC0+ZG1hX2NoYW5uZWwpOworCWRvbmUoZXAsIHJlcSwgc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgZG1hX2lycShzdHJ1Y3Qgb21hcF91ZGMgKnVkYywgdTE2IGlycV9zcmMpCit7CisJdTE2CQlkbWFuX3N0YXQgPSBVRENfRE1BTl9TVEFUX1JFRzsKKwlzdHJ1Y3Qgb21hcF9lcAkqZXA7CisJc3RydWN0IG9tYXBfcmVxCSpyZXE7CisKKwkvKiBJTiBkbWE6IHR4IHRvIGhvc3QgKi8KKwlpZiAoaXJxX3NyYyAmIFVEQ19UWE5fRE9ORSkgeworCQllcCA9ICZ1ZGMtPmVwWzE2ICsgVURDX0RNQV9UWF9TUkMoZG1hbl9zdGF0KV07CisJCWVwLT5pcnFzKys7CisJCS8qIGNhbiBzZWUgVFhOX0RPTkUgYWZ0ZXIgZG1hIGFib3J0ICovCisJCWlmICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQkJcmVxID0gY29udGFpbmVyX29mKGVwLT5xdWV1ZS5uZXh0LAorCQkJCQkJc3RydWN0IG9tYXBfcmVxLCBxdWV1ZSk7CisJCQlmaW5pc2hfaW5fZG1hKGVwLCByZXEsIDApOworCQl9CisJCVVEQ19JUlFfU1JDX1JFRyA9IFVEQ19UWE5fRE9ORTsKKworCQlpZiAoIWxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKSB7CisJCQlyZXEgPSBjb250YWluZXJfb2YoZXAtPnF1ZXVlLm5leHQsCisJCQkJCXN0cnVjdCBvbWFwX3JlcSwgcXVldWUpOworCQkJbmV4dF9pbl9kbWEoZXAsIHJlcSk7CisJCX0KKwl9CisKKwkvKiBPVVQgZG1hOiByeCBmcm9tIGhvc3QgKi8KKwlpZiAoaXJxX3NyYyAmIFVEQ19SWE5fRU9UKSB7CisJCWVwID0gJnVkYy0+ZXBbVURDX0RNQV9SWF9TUkMoZG1hbl9zdGF0KV07CisJCWVwLT5pcnFzKys7CisJCS8qIGNhbiBzZWUgUlhOX0VPVCBhZnRlciBkbWEgYWJvcnQgKi8KKwkJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCQlyZXEgPSBjb250YWluZXJfb2YoZXAtPnF1ZXVlLm5leHQsCisJCQkJCXN0cnVjdCBvbWFwX3JlcSwgcXVldWUpOworCQkJZmluaXNoX291dF9kbWEoZXAsIHJlcSwgMCk7CisJCX0KKwkJVURDX0lSUV9TUkNfUkVHID0gVURDX1JYTl9FT1Q7CisKKwkJaWYgKCFsaXN0X2VtcHR5ICgmZXAtPnF1ZXVlKSkgeworCQkJcmVxID0gY29udGFpbmVyX29mKGVwLT5xdWV1ZS5uZXh0LAorCQkJCQlzdHJ1Y3Qgb21hcF9yZXEsIHF1ZXVlKTsKKwkJCW5leHRfb3V0X2RtYShlcCwgcmVxKTsKKwkJfQorCX0KKworCWlmIChpcnFfc3JjICYgVURDX1JYTl9DTlQpIHsKKwkJZXAgPSAmdWRjLT5lcFtVRENfRE1BX1JYX1NSQyhkbWFuX3N0YXQpXTsKKwkJZXAtPmlycXMrKzsKKwkJLyogb21hcDE1eHggZG9lcyB0aGlzIHVuYXNrZWQuLi4gKi8KKwkJVkRCRygiJXMsIFJYX0NOVCBpcnE/XG4iLCBlcC0+ZXAubmFtZSk7CisJCVVEQ19JUlFfU1JDX1JFRyA9IFVEQ19SWE5fQ05UOworCX0KK30KKworc3RhdGljIHZvaWQgZG1hX2Vycm9yKGludCBsY2gsIHUxNiBjaF9zdGF0dXMsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG9tYXBfZXAJKmVwID0gZGF0YTsKKworCS8qIGlmIGNoX3N0YXR1cyAmIE9NQVBfRE1BX0RST1BfSVJRIC4uLiAqLworCS8qIGlmIGNoX3N0YXR1cyAmIE9NQVBfRE1BX1RPVVRfSVJRIC4uLiAqLworCUVSUigiJXMgZG1hIGVycm9yLCBsY2ggJWQgc3RhdHVzICUwMnhcbiIsIGVwLT5lcC5uYW1lLCBsY2gsIGNoX3N0YXR1cyk7CisKKwkvKiBjb21wbGV0ZSBjdXJyZW50IHRyYW5zZmVyIC4uLiAqLworfQorCitzdGF0aWMgdm9pZCBkbWFfY2hhbm5lbF9jbGFpbShzdHJ1Y3Qgb21hcF9lcCAqZXAsIHVuc2lnbmVkIGNoYW5uZWwpCit7CisJdTE2CXJlZzsKKwlpbnQJc3RhdHVzLCByZXN0YXJ0LCBpc19pbjsKKworCWlzX2luID0gZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOOworCWlmIChpc19pbikKKwkJcmVnID0gVURDX1RYRE1BX0NGR19SRUc7CisJZWxzZQorCQlyZWcgPSBVRENfUlhETUFfQ0ZHX1JFRzsKKwlyZWcgfD0gMSA8PCAxMjsJCS8qICJwdWxzZSIgYWN0aXZhdGVkICovCisKKwllcC0+ZG1hX2NoYW5uZWwgPSAwOworCWVwLT5sY2ggPSAtMTsKKwlpZiAoY2hhbm5lbCA9PSAwIHx8IGNoYW5uZWwgPiAzKSB7CisJCWlmICgocmVnICYgMHgwZjAwKSA9PSAwKQorCQkJY2hhbm5lbCA9IDM7CisJCWVsc2UgaWYgKChyZWcgJiAweDAwZjApID09IDApCisJCQljaGFubmVsID0gMjsKKwkJZWxzZSBpZiAoKHJlZyAmIDB4MDAwZikgPT0gMCkJLyogcHJlZmVycmVkIGZvciBJU08gKi8KKwkJCWNoYW5uZWwgPSAxOworCQllbHNlIHsKKwkJCXN0YXR1cyA9IC1FTUxJTks7CisJCQlnb3RvIGp1c3RfcmVzdGFydDsKKwkJfQorCX0KKwlyZWcgfD0gKDB4MGYgJiBlcC0+YkVuZHBvaW50QWRkcmVzcykgPDwgKDQgKiAoY2hhbm5lbCAtIDEpKTsKKwllcC0+ZG1hX2NoYW5uZWwgPSBjaGFubmVsOworCisJaWYgKGlzX2luKSB7CisJCXN0YXR1cyA9IG9tYXBfcmVxdWVzdF9kbWEoT01BUF9ETUFfVVNCX1cyRkNfVFgwIC0gMSArIGNoYW5uZWwsCisJCQllcC0+ZXAubmFtZSwgZG1hX2Vycm9yLCBlcCwgJmVwLT5sY2gpOworCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCVVEQ19UWERNQV9DRkdfUkVHID0gcmVnOworCQkJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKGVwLT5sY2gsCisJCQkJT01BUF9ETUFfUE9SVF9USVBCLAorCQkJCU9NQVBfRE1BX0FNT0RFX0NPTlNUQU5ULAorCQkJCSh1bnNpZ25lZCBsb25nKSBpb192MnAoKHUzMikmVURDX0RBVEFfRE1BX1JFRykpOworCQl9CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gb21hcF9yZXF1ZXN0X2RtYShPTUFQX0RNQV9VU0JfVzJGQ19SWDAgLSAxICsgY2hhbm5lbCwKKwkJCWVwLT5lcC5uYW1lLCBkbWFfZXJyb3IsIGVwLCAmZXAtPmxjaCk7CisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJVURDX1JYRE1BX0NGR19SRUcgPSByZWc7CisJCQlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhlcC0+bGNoLAorCQkJCU9NQVBfRE1BX1BPUlRfVElQQiwKKwkJCQlPTUFQX0RNQV9BTU9ERV9DT05TVEFOVCwKKwkJCQkodW5zaWduZWQgbG9uZykgaW9fdjJwKCh1MzIpJlVEQ19EQVRBX0RNQV9SRUcpKTsKKwkJfQorCX0KKwlpZiAoc3RhdHVzKQorCQllcC0+ZG1hX2NoYW5uZWwgPSAwOworCWVsc2UgeworCQllcC0+aGFzX2RtYSA9IDE7CisJCW9tYXBfZGlzYWJsZV9kbWFfaXJxKGVwLT5sY2gsIE9NQVBfRE1BX0JMT0NLX0lSUSk7CisKKwkJLyogY2hhbm5lbCB0eXBlIFA6IGh3IHN5bmNoIChmaWZvKSAqLworCQlpZiAoIWNwdV9pc19vbWFwMTV4eCgpKQorCQkJb21hcF93cml0ZXcoMiwgT01BUF9ETUFfTENIX0NUUkwoZXAtPmxjaCkpOworCX0KKworanVzdF9yZXN0YXJ0OgorCS8qIHJlc3RhcnQgYW55IHF1ZXVlLCBldmVuIGlmIHRoZSBjbGFpbSBmYWlsZWQgICovCisJcmVzdGFydCA9ICFlcC0+c3RvcHBlZCAmJiAhbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKTsKKworCWlmIChzdGF0dXMpCisJCURCRygiJXMgbm8gZG1hIGNoYW5uZWw6ICVkJXNcbiIsIGVwLT5lcC5uYW1lLCBzdGF0dXMsCisJCQlyZXN0YXJ0ID8gIiAocmVzdGFydCkiIDogIiIpOworCWVsc2UKKwkJREJHKCIlcyBjbGFpbWVkICVjeGRtYSVkIGxjaCAlZCVzXG4iLCBlcC0+ZXAubmFtZSwKKwkJCWlzX2luID8gJ3QnIDogJ3InLAorCQkJZXAtPmRtYV9jaGFubmVsIC0gMSwgZXAtPmxjaCwKKwkJCXJlc3RhcnQgPyAiIChyZXN0YXJ0KSIgOiAiIik7CisKKwlpZiAocmVzdGFydCkgeworCQlzdHJ1Y3Qgb21hcF9yZXEJKnJlcTsKKwkJcmVxID0gY29udGFpbmVyX29mKGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3Qgb21hcF9yZXEsIHF1ZXVlKTsKKwkJaWYgKGVwLT5oYXNfZG1hKQorCQkJKGlzX2luID8gbmV4dF9pbl9kbWEgOiBuZXh0X291dF9kbWEpKGVwLCByZXEpOworCQllbHNlIHsKKwkJCXVzZV9lcChlcCwgVURDX0VQX1NFTCk7CisJCQkoaXNfaW4gPyB3cml0ZV9maWZvIDogcmVhZF9maWZvKShlcCwgcmVxKTsKKwkJCWRlc2VsZWN0X2VwKCk7CisJCQlpZiAoIWlzX2luKSB7CisJCQkJVURDX0NUUkxfUkVHID0gVURDX1NFVF9GSUZPX0VOOworCQkJCWVwLT5hY2t3YWl0ID0gMSArIGVwLT5kb3VibGVfYnVmOworCQkJfQorCQkJLyogSU46IDYgd2FpdCBzdGF0ZXMgYmVmb3JlIGl0J2xsIHR4ICovCisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRtYV9jaGFubmVsX3JlbGVhc2Uoc3RydWN0IG9tYXBfZXAgKmVwKQoreworCWludAkJc2hpZnQgPSA0ICogKGVwLT5kbWFfY2hhbm5lbCAtIDEpOworCXUxNgkJbWFzayA9IDB4MGYgPDwgc2hpZnQ7CisJc3RydWN0IG9tYXBfcmVxCSpyZXE7CisJaW50CQlhY3RpdmU7CisKKwkvKiBhYm9ydCBhbnkgYWN0aXZlIHVzYiB0cmFuc2ZlciByZXF1ZXN0ICovCisJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQlyZXEgPSBjb250YWluZXJfb2YoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBvbWFwX3JlcSwgcXVldWUpOworCWVsc2UKKwkJcmVxID0gMDsKKworCWFjdGl2ZSA9ICgoMSA8PCA3KSAmIG9tYXBfcmVhZGwoT01BUF9ETUFfQ0NSKGVwLT5sY2gpKSkgIT0gMDsKKworCURCRygiJXMgcmVsZWFzZSAlcyAlY3hkbWElZCAlcFxuIiwgZXAtPmVwLm5hbWUsCisJCQlhY3RpdmUgPyAiYWN0aXZlIiA6ICJpZGxlIiwKKwkJCShlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pID8gJ3QnIDogJ3InLAorCQkJZXAtPmRtYV9jaGFubmVsIC0gMSwgcmVxKTsKKworCS8qIHdhaXQgdGlsbCBjdXJyZW50IHBhY2tldCBETUEgZmluaXNoZXMsIGFuZCBmaWZvIGVtcHRpZXMgKi8KKwlpZiAoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSB7CisJCVVEQ19UWERNQV9DRkdfUkVHICY9IH5tYXNrOworCisJCWlmIChyZXEpIHsKKwkJCWZpbmlzaF9pbl9kbWEoZXAsIHJlcSwgLUVDT05OUkVTRVQpOworCisJCQkvKiBjbGVhciBGSUZPOyBob3N0cyBwcm9iYWJseSB3b24ndCBlbXB0eSBpdCAqLworCQkJdXNlX2VwKGVwLCBVRENfRVBfU0VMKTsKKwkJCVVEQ19DVFJMX1JFRyA9IFVEQ19DTFJfRVA7CisJCQlkZXNlbGVjdF9lcCgpOworCQl9CisJCXdoaWxlIChVRENfVFhETUFfQ0ZHX1JFRyAmIG1hc2spCisJCQl1ZGVsYXkoMTApOworCX0gZWxzZSB7CisJCVVEQ19SWERNQV9DRkdfUkVHICY9IH5tYXNrOworCisJCS8qIGRtYSBlbXB0aWVzIHRoZSBmaWZvICovCisJCXdoaWxlIChVRENfUlhETUFfQ0ZHX1JFRyAmIG1hc2spCisJCQl1ZGVsYXkoMTApOworCQlpZiAocmVxKQorCQkJZmluaXNoX291dF9kbWEoZXAsIHJlcSwgLUVDT05OUkVTRVQpOworCX0KKwlvbWFwX2ZyZWVfZG1hKGVwLT5sY2gpOworCWVwLT5kbWFfY2hhbm5lbCA9IDA7CisJZXAtPmxjaCA9IC0xOworCS8qIGhhc19kbWEgc3RpbGwgc2V0LCB0aWxsIGVuZHBvaW50IGlzIGZ1bGx5IHF1aWVzY2VkICovCit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludAorb21hcF9lcF9xdWV1ZShzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSwgaW50IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3Qgb21hcF9lcAkqZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3Qgb21hcF9lcCwgZXApOworCXN0cnVjdCBvbWFwX3JlcQkqcmVxID0gY29udGFpbmVyX29mKF9yZXEsIHN0cnVjdCBvbWFwX3JlcSwgcmVxKTsKKwlzdHJ1Y3Qgb21hcF91ZGMJKnVkYzsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCWludAkJaXNfaXNvID0gMDsKKworCS8qIGNhdGNoIHZhcmlvdXMgYm9ndXMgcGFyYW1ldGVycyAqLworCWlmICghX3JlcSB8fCAhcmVxLT5yZXEuY29tcGxldGUgfHwgIXJlcS0+cmVxLmJ1ZgorCQkJfHwgIWxpc3RfZW1wdHkoJnJlcS0+cXVldWUpKSB7CisJCURCRygiJXMsIGJhZCBwYXJhbXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoIV9lcCB8fCAoIWVwLT5kZXNjICYmIGVwLT5iRW5kcG9pbnRBZGRyZXNzKSkgeworCQlEQkcoIiVzLCBiYWQgZXBcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoZXAtPmJtQXR0cmlidXRlcyA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKSB7CisJCWlmIChyZXEtPnJlcS5sZW5ndGggPiBlcC0+ZXAubWF4cGFja2V0KQorCQkJcmV0dXJuIC1FTVNHU0laRTsKKwkJaXNfaXNvID0gMTsKKwl9CisKKwkvKiB0aGlzIGlzbid0IGJvZ3VzLCBidXQgT01BUCBETUEgaXNuJ3QgdGhlIG9ubHkgaGFyZHdhcmUgdG8KKwkgKiBoYXZlIGEgaGFyZCB0aW1lIHdpdGggcGFydGlhbCBwYWNrZXQgcmVhZHMuLi4gIHJlamVjdCBpdC4KKwkgKi8KKwlpZiAodXNlX2RtYQorCQkJJiYgZXAtPmhhc19kbWEKKwkJCSYmIGVwLT5iRW5kcG9pbnRBZGRyZXNzICE9IDAKKwkJCSYmIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pID09IDAKKwkJCSYmIChyZXEtPnJlcS5sZW5ndGggJSBlcC0+ZXAubWF4cGFja2V0KSAhPSAwKSB7CisJCURCRygiJXMsIG5vIHBhcnRpYWwgcGFja2V0IE9VVCByZWFkc1xuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTVNHU0laRTsKKwl9CisKKwl1ZGMgPSBlcC0+dWRjOworCWlmICghdWRjLT5kcml2ZXIgfHwgdWRjLT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pCisJCXJldHVybiAtRVNIVVRET1dOOworCisJaWYgKHVzZV9kbWEgJiYgZXAtPmhhc19kbWEpIHsKKwkJaWYgKHJlcS0+cmVxLmRtYSA9PSBETUFfQUREUl9JTlZBTElEKSB7CisJCQlyZXEtPnJlcS5kbWEgPSBkbWFfbWFwX3NpbmdsZSgKKwkJCQllcC0+dWRjLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQlyZXEtPnJlcS5idWYsCisJCQkJcmVxLT5yZXEubGVuZ3RoLAorCQkJCShlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pCisJCQkJCT8gRE1BX1RPX0RFVklDRQorCQkJCQk6IERNQV9GUk9NX0RFVklDRSk7CisJCQlyZXEtPm1hcHBlZCA9IDE7CisJCX0gZWxzZSB7CisJCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSgKKwkJCQllcC0+dWRjLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQlyZXEtPnJlcS5kbWEsIHJlcS0+cmVxLmxlbmd0aCwKKwkJCQkoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKQorCQkJCQk/IERNQV9UT19ERVZJQ0UKKwkJCQkJOiBETUFfRlJPTV9ERVZJQ0UpOworCQkJcmVxLT5tYXBwZWQgPSAwOworCQl9CisJfQorCisJVkRCRygiJXMgcXVldWUgcmVxICVwLCBsZW4gJWQgYnVmICVwXG4iLAorCQllcC0+ZXAubmFtZSwgX3JlcSwgX3JlcS0+bGVuZ3RoLCBfcmVxLT5idWYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJcmVxLT5yZXEuc3RhdHVzID0gLUVJTlBST0dSRVNTOworCXJlcS0+cmVxLmFjdHVhbCA9IDA7CisKKwkvKiBtYXliZSBraWNrc3RhcnQgbm9uLWlzbyBpL28gcXVldWVzICovCisJaWYgKGlzX2lzbykKKwkJVURDX0lSUV9FTl9SRUcgfD0gVURDX1NPRl9JRTsKKwllbHNlIGlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpICYmICFlcC0+c3RvcHBlZCAmJiAhZXAtPmFja3dhaXQpIHsKKwkJaW50CWlzX2luOworCisJCWlmIChlcC0+YkVuZHBvaW50QWRkcmVzcyA9PSAwKSB7CisJCQlpZiAoIXVkYy0+ZXAwX3BlbmRpbmcgfHwgIWxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJCQkJcmV0dXJuIC1FTDJITFQ7CisJCQl9CisKKwkJCS8qIGVtcHR5IERBVEEgc3RhZ2U/ICovCisJCQlpc19pbiA9IHVkYy0+ZXAwX2luOworCQkJaWYgKCFyZXEtPnJlcS5sZW5ndGgpIHsKKworCQkJCS8qIGNoaXAgYmVjYW1lIENPTkZJR1VSRUQgb3IgQUREUkVTU0VECisJCQkJICogZWFybGllcjsgZHJpdmVycyBtYXkgYWxyZWFkeSBoYXZlIHF1ZXVlZAorCQkJCSAqIHJlcXVlc3RzIHRvIG5vbi1jb250cm9sIGVuZHBvaW50cworCQkJCSAqLworCQkJCWlmICh1ZGMtPmVwMF9zZXRfY29uZmlnKSB7CisJCQkJCXUxNglpcnFfZW4gPSBVRENfSVJRX0VOX1JFRzsKKworCQkJCQlpcnFfZW4gfD0gVURDX0RTX0NIR19JRSB8IFVEQ19FUDBfSUU7CisJCQkJCWlmICghdWRjLT5lcDBfcmVzZXRfY29uZmlnKQorCQkJCQkJaXJxX2VuIHw9IFVEQ19FUE5fUlhfSUUKKwkJCQkJCQl8IFVEQ19FUE5fVFhfSUU7CisJCQkJCVVEQ19JUlFfRU5fUkVHID0gaXJxX2VuOworCQkJCX0KKworCQkJCS8qIFNUQVRVUyBpcyByZXZlcnNlIGRpcmVjdGlvbiAqLworCQkJCVVEQ19FUF9OVU1fUkVHID0gaXNfaW4KKwkJCQkJCT8gVURDX0VQX1NFTAorCQkJCQkJOiAoVURDX0VQX1NFTHxVRENfRVBfRElSKTsKKwkJCQlVRENfQ1RSTF9SRUcgPSBVRENfQ0xSX0VQOworCQkJCVVEQ19DVFJMX1JFRyA9IFVEQ19TRVRfRklGT19FTjsKKwkJCQlVRENfRVBfTlVNX1JFRyA9IHVkYy0+ZXAwX2luID8gMCA6IFVEQ19FUF9ESVI7CisKKwkJCQkvKiBjbGVhbnVwICovCisJCQkJdWRjLT5lcDBfcGVuZGluZyA9IDA7CisJCQkJZG9uZShlcCwgcmVxLCAwKTsKKwkJCQlyZXEgPSAwOworCisJCQkvKiBub24tZW1wdHkgREFUQSBzdGFnZSAqLworCQkJfSBlbHNlIGlmIChpc19pbikgeworCQkJCVVEQ19FUF9OVU1fUkVHID0gVURDX0VQX1NFTHxVRENfRVBfRElSOworCQkJfSBlbHNlIHsKKwkJCQlpZiAodWRjLT5lcDBfc2V0dXApCisJCQkJCWdvdG8gaXJxX3dhaXQ7CisJCQkJVURDX0VQX05VTV9SRUcgPSBVRENfRVBfU0VMOworCQkJfQorCQl9IGVsc2UgeworCQkJaXNfaW4gPSBlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU47CisJCQlpZiAoIWVwLT5oYXNfZG1hKQorCQkJCXVzZV9lcChlcCwgVURDX0VQX1NFTCk7CisJCQkvKiBpZiBJU086IFNPRiBJUlFzIG11c3QgYmUgZW5hYmxlZC9kaXNhYmxlZCEgKi8KKwkJfQorCisJCWlmIChlcC0+aGFzX2RtYSkKKwkJCShpc19pbiA/IG5leHRfaW5fZG1hIDogbmV4dF9vdXRfZG1hKShlcCwgcmVxKTsKKwkJZWxzZSBpZiAocmVxKSB7CisJCQlpZiAoKGlzX2luID8gd3JpdGVfZmlmbyA6IHJlYWRfZmlmbykoZXAsIHJlcSkgPT0gMSkKKwkJCQlyZXEgPSAwOworCQkJZGVzZWxlY3RfZXAoKTsKKwkJCWlmICghaXNfaW4pIHsKKwkJCQlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0ZJRk9fRU47CisJCQkJZXAtPmFja3dhaXQgPSAxICsgZXAtPmRvdWJsZV9idWY7CisJCQl9CisJCQkvKiBJTjogNiB3YWl0IHN0YXRlcyBiZWZvcmUgaXQnbGwgdHggKi8KKwkJfQorCX0KKworaXJxX3dhaXQ6CisJLyogaXJxIGhhbmRsZXIgYWR2YW5jZXMgdGhlIHF1ZXVlICovCisJaWYgKHJlcSAhPSAwKQorCQlsaXN0X2FkZF90YWlsKCZyZXEtPnF1ZXVlLCAmZXAtPnF1ZXVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXBfZXBfZGVxdWV1ZShzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSkKK3sKKwlzdHJ1Y3Qgb21hcF9lcAkqZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3Qgb21hcF9lcCwgZXApOworCXN0cnVjdCBvbWFwX3JlcQkqcmVxOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlpZiAoIV9lcCB8fCAhX3JlcSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPnVkYy0+bG9jaywgZmxhZ3MpOworCisJLyogbWFrZSBzdXJlIGl0J3MgYWN0dWFsbHkgcXVldWVkIG9uIHRoaXMgZW5kcG9pbnQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7CisJCWlmICgmcmVxLT5yZXEgPT0gX3JlcSkKKwkJCWJyZWFrOworCX0KKwlpZiAoJnJlcS0+cmVxICE9IF9yZXEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPnVkYy0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodXNlX2RtYSAmJiBlcC0+ZG1hX2NoYW5uZWwgJiYgZXAtPnF1ZXVlLm5leHQgPT0gJnJlcS0+cXVldWUpIHsKKwkJaW50IGNoYW5uZWwgPSBlcC0+ZG1hX2NoYW5uZWw7CisKKwkJLyogcmVsZWFzaW5nIHRoZSBjaGFubmVsIGNhbmNlbHMgdGhlIHJlcXVlc3QsCisJCSAqIHJlY2xhaW1pbmcgdGhlIGNoYW5uZWwgcmVzdGFydHMgdGhlIHF1ZXVlCisJCSAqLworCQlkbWFfY2hhbm5lbF9yZWxlYXNlKGVwKTsKKwkJZG1hX2NoYW5uZWxfY2xhaW0oZXAsIGNoYW5uZWwpOworCX0gZWxzZSAKKwkJZG9uZShlcCwgcmVxLCAtRUNPTk5SRVNFVCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPnVkYy0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG9tYXBfZXBfc2V0X2hhbHQoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IG9tYXBfZXAJKmVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IG9tYXBfZXAsIGVwKTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCWludAkJc3RhdHVzID0gLUVPUE5PVFNVUFA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPnVkYy0+bG9jaywgZmxhZ3MpOworCisJLyoganVzdCB1c2UgcHJvdG9jb2wgc3RhbGxzIGZvciBlcDA7IHJlYWwgaGFsdHMgYXJlIGFubm95aW5nICovCisJaWYgKGVwLT5iRW5kcG9pbnRBZGRyZXNzID09IDApIHsKKwkJaWYgKCFlcC0+dWRjLT5lcDBfcGVuZGluZykKKwkJCXN0YXR1cyA9IC1FSU5WQUw7CisJCWVsc2UgaWYgKHZhbHVlKSB7CisJCQlpZiAoZXAtPnVkYy0+ZXAwX3NldF9jb25maWcpIHsKKwkJCQlXQVJOKCJlcnJvciBjaGFuZ2luZyBjb25maWc/XG4iKTsKKwkJCQlVRENfU1lTQ09OMl9SRUcgPSBVRENfQ0xSX0NGRzsKKwkJCX0KKwkJCVVEQ19TWVNDT04yX1JFRyA9IFVEQ19TVEFMTF9DTUQ7CisJCQllcC0+dWRjLT5lcDBfcGVuZGluZyA9IDA7CisJCQlzdGF0dXMgPSAwOworCQl9IGVsc2UgLyogTk9QICovCisJCQlzdGF0dXMgPSAwOworCisJLyogb3RoZXJ3aXNlLCBhbGwgYWN0aXZlIG5vbi1JU08gZW5kcG9pbnRzIGNhbiBoYWx0ICovCisJfSBlbHNlIGlmIChlcC0+Ym1BdHRyaWJ1dGVzICE9IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MgJiYgZXAtPmRlc2MpIHsKKworCQkvKiBJTiBlbmRwb2ludHMgbXVzdCBhbHJlYWR5IGJlIGlkbGUgKi8KKwkJaWYgKChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pCisJCQkJJiYgIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsgCisJCQlzdGF0dXMgPSAtRUFHQUlOOworCQkJZ290byBkb25lOworCQl9CisKKwkJaWYgKHZhbHVlKSB7CisJCQlpbnQJY2hhbm5lbDsKKworCQkJaWYgKHVzZV9kbWEgJiYgZXAtPmRtYV9jaGFubmVsCisJCQkJCSYmICFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCQkJY2hhbm5lbCA9IGVwLT5kbWFfY2hhbm5lbDsKKwkJCQlkbWFfY2hhbm5lbF9yZWxlYXNlKGVwKTsKKwkJCX0gZWxzZQorCQkJCWNoYW5uZWwgPSAwOworCisJCQl1c2VfZXAoZXAsIFVEQ19FUF9TRUwpOworCQkJaWYgKFVEQ19TVEFUX0ZMR19SRUcgJiBVRENfTk9OX0lTT19GSUZPX0VNUFRZKSB7CisJCQkJVURDX0NUUkxfUkVHID0gVURDX1NFVF9IQUxUOworCQkJCXN0YXR1cyA9IDA7CisJCQl9IGVsc2UKKwkJCQlzdGF0dXMgPSAtRUFHQUlOOworCQkJZGVzZWxlY3RfZXAoKTsKKworCQkJaWYgKGNoYW5uZWwpCisJCQkJZG1hX2NoYW5uZWxfY2xhaW0oZXAsIGNoYW5uZWwpOworCQl9IGVsc2UgeworCQkJdXNlX2VwKGVwLCAwKTsKKwkJCVVEQ19DVFJMX1JFRyA9IFVEQ19SRVNFVF9FUDsKKwkJCWVwLT5hY2t3YWl0ID0gMDsKKwkJCWlmICghKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikpIHsKKwkJCQlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0ZJRk9fRU47CisJCQkJZXAtPmFja3dhaXQgPSAxICsgZXAtPmRvdWJsZV9idWY7CisJCQl9CisJCX0KKwl9Citkb25lOgorCVZEQkcoIiVzICVzIGhhbHQgc3RhdCAlZFxuIiwgZXAtPmVwLm5hbWUsCisJCXZhbHVlID8gInNldCIgOiAiY2xlYXIiLCBzdGF0dXMpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPnVkYy0+bG9jaywgZmxhZ3MpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VwX29wcyBvbWFwX2VwX29wcyA9IHsKKwkuZW5hYmxlCQk9IG9tYXBfZXBfZW5hYmxlLAorCS5kaXNhYmxlCT0gb21hcF9lcF9kaXNhYmxlLAorCisJLmFsbG9jX3JlcXVlc3QJPSBvbWFwX2FsbG9jX3JlcXVlc3QsCisJLmZyZWVfcmVxdWVzdAk9IG9tYXBfZnJlZV9yZXF1ZXN0LAorCisJLmFsbG9jX2J1ZmZlcgk9IG9tYXBfYWxsb2NfYnVmZmVyLAorCS5mcmVlX2J1ZmZlcgk9IG9tYXBfZnJlZV9idWZmZXIsCisKKwkucXVldWUJCT0gb21hcF9lcF9xdWV1ZSwKKwkuZGVxdWV1ZQk9IG9tYXBfZXBfZGVxdWV1ZSwKKworCS5zZXRfaGFsdAk9IG9tYXBfZXBfc2V0X2hhbHQsCisJLy8gZmlmb19zdGF0dXMgLi4uIHJlcG9ydCBieXRlcyBpbiBmaWZvCisJLy8gZmlmb19mbHVzaCAuLi4gZmx1c2ggZmlmbworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBvbWFwX2dldF9mcmFtZShzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXUxNglzb2YgPSBVRENfU09GX1JFRzsKKwlyZXR1cm4gKHNvZiAmIFVEQ19UU19PSykgPyAoc29mICYgVURDX1RTKSA6IC1FTDJOU1lOQzsKK30KKworc3RhdGljIGludCBvbWFwX3dha2V1cChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCBvbWFwX3VkYwkqdWRjOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJaW50CQlyZXR2YWwgPSAtRUhPU1RVTlJFQUNIOworCisJdWRjID0gY29udGFpbmVyX29mKGdhZGdldCwgc3RydWN0IG9tYXBfdWRjLCBnYWRnZXQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCWlmICh1ZGMtPmRldnN0YXQgJiBVRENfU1VTKSB7CisJCS8qIE5PVEU6ICBPVEcgc3BlYyBlcnJhdHVtIHNheXMgdGhhdCBPVEcgZGV2aWNlcyBtYXkKKwkJICogaXNzdWUgd2FrZXVwcyB3aXRob3V0IGhvc3QgZW5hYmxlLgorCQkgKi8KKwkJaWYgKHVkYy0+ZGV2c3RhdCAmIChVRENfQl9ITlBfRU5BQkxFfFVEQ19SX1dLX09LKSkgeworCQkJREJHKCJyZW1vdGUgd2FrZXVwLi4uXG4iKTsKKwkJCVVEQ19TWVNDT04yX1JFRyA9IFVEQ19STVRfV0tQOworCQkJcmV0dmFsID0gMDsKKwkJfQorCisJLyogTk9URTogIG5vbi1PVEcgc3lzdGVtcyBtYXkgdXNlIFNSUCBUT08uLi4gKi8KKwl9IGVsc2UgaWYgKCEodWRjLT5kZXZzdGF0ICYgVURDX0FUVCkpIHsKKwkJaWYgKHVkYy0+dHJhbnNjZWl2ZXIpCisJCQlyZXR2YWwgPSBvdGdfc3RhcnRfc3JwKHVkYy0+dHJhbnNjZWl2ZXIpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQKK29tYXBfc2V0X3NlbGZwb3dlcmVkKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGludCBpc19zZWxmcG93ZXJlZCkKK3sKKwlzdHJ1Y3Qgb21hcF91ZGMJKnVkYzsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXUxNgkJc3lzY29uMTsKKworCXVkYyA9IGNvbnRhaW5lcl9vZihnYWRnZXQsIHN0cnVjdCBvbWFwX3VkYywgZ2FkZ2V0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJc3lzY29uMSA9IFVEQ19TWVNDT04xX1JFRzsKKwlpZiAoaXNfc2VsZnBvd2VyZWQpCisJCXN5c2NvbjEgfD0gVURDX1NFTEZfUFdSOworCWVsc2UKKwkJc3lzY29uMSAmPSB+VURDX1NFTEZfUFdSOworCVVEQ19TWVNDT04xX1JFRyA9IHN5c2NvbjE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYW5fcHVsbHVwKHN0cnVjdCBvbWFwX3VkYyAqdWRjKQoreworCXJldHVybiB1ZGMtPmRyaXZlciAmJiB1ZGMtPnNvZnRjb25uZWN0ICYmIHVkYy0+dmJ1c19hY3RpdmU7Cit9CisKK3N0YXRpYyB2b2lkIHB1bGx1cF9lbmFibGUoc3RydWN0IG9tYXBfdWRjICp1ZGMpCit7CisJVURDX1NZU0NPTjFfUkVHIHw9IFVEQ19QVUxMVVBfRU47CisjaWZuZGVmIENPTkZJR19VU0JfT1RHCisJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkKKwkJT1RHX0NUUkxfUkVHIHw9IE9UR19CU0VTU1ZMRDsKKyNlbmRpZgorCVVEQ19JUlFfRU5fUkVHID0gVURDX0RTX0NIR19JRTsKK30KKworc3RhdGljIHZvaWQgcHVsbHVwX2Rpc2FibGUoc3RydWN0IG9tYXBfdWRjICp1ZGMpCit7CisjaWZuZGVmIENPTkZJR19VU0JfT1RHCisJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkKKwkJT1RHX0NUUkxfUkVHICY9IH5PVEdfQlNFU1NWTEQ7CisjZW5kaWYKKwlVRENfSVJRX0VOX1JFRyA9IFVEQ19EU19DSEdfSUU7CisJVURDX1NZU0NPTjFfUkVHICY9IH5VRENfUFVMTFVQX0VOOworfQorCisvKgorICogQ2FsbGVkIGJ5IHdoYXRldmVyIGRldGVjdHMgVkJVUyBzZXNzaW9uczogIGV4dGVybmFsIHRyYW5zY2VpdmVyCisgKiBkcml2ZXIsIG9yIG1heWJlIEdQSU8wIFZCVVMgSVJRLiAgTWF5IHJlcXVlc3QgNDggTUh6IGNsb2NrLgorICovCitzdGF0aWMgaW50IG9tYXBfdmJ1c19zZXNzaW9uKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGludCBpc19hY3RpdmUpCit7CisJc3RydWN0IG9tYXBfdWRjCSp1ZGM7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXVkYyA9IGNvbnRhaW5lcl9vZihnYWRnZXQsIHN0cnVjdCBvbWFwX3VkYywgZ2FkZ2V0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJVkRCRygiVkJVUyAlc1xuIiwgaXNfYWN0aXZlID8gIm9uIiA6ICJvZmYiKTsKKwl1ZGMtPnZidXNfYWN0aXZlID0gKGlzX2FjdGl2ZSAhPSAwKTsKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKKwkJLyogInNvZnR3YXJlIiBkZXRlY3QsIGlnbm9yZWQgaWYgIVZCVVNfTU9ERV8xNTEwICovCisJCWlmIChpc19hY3RpdmUpCisJCQlGVU5DX01VWF9DVFJMXzBfUkVHIHw9IFZCVVNfQ1RSTF8xNTEwOworCQllbHNlCisJCQlGVU5DX01VWF9DVFJMXzBfUkVHICY9IH5WQlVTX0NUUkxfMTUxMDsKKwl9CisJaWYgKGNhbl9wdWxsdXAodWRjKSkKKwkJcHVsbHVwX2VuYWJsZSh1ZGMpOworCWVsc2UKKwkJcHVsbHVwX2Rpc2FibGUodWRjKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwX3ZidXNfZHJhdyhzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LCB1bnNpZ25lZCBtQSkKK3sKKwlzdHJ1Y3Qgb21hcF91ZGMJKnVkYzsKKworCXVkYyA9IGNvbnRhaW5lcl9vZihnYWRnZXQsIHN0cnVjdCBvbWFwX3VkYywgZ2FkZ2V0KTsKKwlpZiAodWRjLT50cmFuc2NlaXZlcikKKwkJcmV0dXJuIG90Z19zZXRfcG93ZXIodWRjLT50cmFuc2NlaXZlciwgbUEpOworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIGludCBvbWFwX3B1bGx1cChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LCBpbnQgaXNfb24pCit7CisJc3RydWN0IG9tYXBfdWRjCSp1ZGM7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXVkYyA9IGNvbnRhaW5lcl9vZihnYWRnZXQsIHN0cnVjdCBvbWFwX3VkYywgZ2FkZ2V0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJdWRjLT5zb2Z0Y29ubmVjdCA9IChpc19vbiAhPSAwKTsKKwlpZiAoY2FuX3B1bGx1cCh1ZGMpKQorCQlwdWxsdXBfZW5hYmxlKHVkYyk7CisJZWxzZQorCQlwdWxsdXBfZGlzYWJsZSh1ZGMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfb3BzIG9tYXBfZ2FkZ2V0X29wcyA9IHsKKwkuZ2V0X2ZyYW1lCQk9IG9tYXBfZ2V0X2ZyYW1lLAorCS53YWtldXAJCQk9IG9tYXBfd2FrZXVwLAorCS5zZXRfc2VsZnBvd2VyZWQJPSBvbWFwX3NldF9zZWxmcG93ZXJlZCwKKwkudmJ1c19zZXNzaW9uCQk9IG9tYXBfdmJ1c19zZXNzaW9uLAorCS52YnVzX2RyYXcJCT0gb21hcF92YnVzX2RyYXcsCisJLnB1bGx1cAkJCT0gb21hcF9wdWxsdXAsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBkZXF1ZXVlIEFMTCByZXF1ZXN0czsgY2FsbGVyIGhvbGRzIHVkYy0+bG9jayAqLworc3RhdGljIHZvaWQgbnVrZShzdHJ1Y3Qgb21hcF9lcCAqZXAsIGludCBzdGF0dXMpCit7CisJc3RydWN0IG9tYXBfcmVxCSpyZXE7CisKKwllcC0+c3RvcHBlZCA9IDE7CisKKwlpZiAodXNlX2RtYSAmJiBlcC0+ZG1hX2NoYW5uZWwpCisJCWRtYV9jaGFubmVsX3JlbGVhc2UoZXApOworCisJdXNlX2VwKGVwLCAwKTsKKwlVRENfQ1RSTF9SRUcgPSBVRENfQ0xSX0VQOworCWlmIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmJiBlcC0+Ym1BdHRyaWJ1dGVzICE9IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpCisJCVVEQ19DVFJMX1JFRyA9IFVEQ19TRVRfSEFMVDsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3Qgb21hcF9yZXEsIHF1ZXVlKTsKKwkJZG9uZShlcCwgcmVxLCBzdGF0dXMpOworCX0KK30KKworLyogY2FsbGVyIGhvbGRzIHVkYy0+bG9jayAqLworc3RhdGljIHZvaWQgdWRjX3F1aWVzY2Uoc3RydWN0IG9tYXBfdWRjICp1ZGMpCit7CisJc3RydWN0IG9tYXBfZXAJKmVwOworCisJdWRjLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKwludWtlKCZ1ZGMtPmVwWzBdLCAtRVNIVVRET1dOKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChlcCwgJnVkYy0+Z2FkZ2V0LmVwX2xpc3QsIGVwLmVwX2xpc3QpCisJCW51a2UoZXAsIC1FU0hVVERPV04pOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCB1cGRhdGVfb3RnKHN0cnVjdCBvbWFwX3VkYyAqdWRjKQoreworCXUxNglkZXZzdGF0OworCisJaWYgKCF1ZGMtPmdhZGdldC5pc19vdGcpCisJCXJldHVybjsKKworCWlmIChPVEdfQ1RSTF9SRUcgJiBPVEdfSUQpCisJCWRldnN0YXQgPSBVRENfREVWU1RBVF9SRUc7CisJZWxzZQorCQlkZXZzdGF0ID0gMDsKKworCXVkYy0+Z2FkZ2V0LmJfaG5wX2VuYWJsZSA9ICEhKGRldnN0YXQgJiBVRENfQl9ITlBfRU5BQkxFKTsKKwl1ZGMtPmdhZGdldC5hX2hucF9zdXBwb3J0ID0gISEoZGV2c3RhdCAmIFVEQ19BX0hOUF9TVVBQT1JUKTsKKwl1ZGMtPmdhZGdldC5hX2FsdF9obnBfc3VwcG9ydCA9ICEhKGRldnN0YXQgJiBVRENfQV9BTFRfSE5QX1NVUFBPUlQpOworCisJLyogRW5hYmxlIEhOUCBlYXJseSwgYXZvaWRpbmcgcmFjZXMgb24gc3VzcGVuZCBpcnEgcGF0aC4KKwkgKiBBU1NVTUVTIE9URyBzdGF0ZSBtYWNoaW5lIEJfQlVTX1JFUSBpbnB1dCBpcyB0cnVlLgorCSAqLworCWlmICh1ZGMtPmdhZGdldC5iX2hucF9lbmFibGUpCisJCU9UR19DVFJMX1JFRyA9IChPVEdfQ1RSTF9SRUcgfCBPVEdfQl9ITlBFTiB8IE9UR19CX0JVU1JFUSkKKwkJCQkmIH5PVEdfUFVMTFVQOworfQorCitzdGF0aWMgdm9pZCBlcDBfaXJxKHN0cnVjdCBvbWFwX3VkYyAqdWRjLCB1MTYgaXJxX3NyYykKK3sKKwlzdHJ1Y3Qgb21hcF9lcAkqZXAwID0gJnVkYy0+ZXBbMF07CisJc3RydWN0IG9tYXBfcmVxCSpyZXEgPSAwOworCisJZXAwLT5pcnFzKys7CisKKwkvKiBDbGVhciBhbnkgcGVuZGluZyByZXF1ZXN0cyBhbmQgdGhlbiBzY3J1YiBhbnkgcngvdHggc3RhdGUKKwkgKiBiZWZvcmUgc3RhcnRpbmcgdG8gaGFuZGxlIHRoZSBTRVRVUCByZXF1ZXN0LgorCSAqLworCWlmIChpcnFfc3JjICYgVURDX1NFVFVQKSB7CisJCXUxNglhY2sgPSBpcnFfc3JjICYgKFVEQ19FUDBfVFh8VURDX0VQMF9SWCk7CisKKwkJbnVrZShlcDAsIDApOworCQlpZiAoYWNrKSB7CisJCQlVRENfSVJRX1NSQ19SRUcgPSBhY2s7CisJCQlpcnFfc3JjID0gVURDX1NFVFVQOworCQl9CisJfQorCisJLyogSU4vT1VUIHBhY2tldHMgbWVhbiB3ZSdyZSBpbiB0aGUgREFUQSBvciBTVEFUVVMgc3RhZ2UuICAKKwkgKiBUaGlzIGRyaXZlciB1c2VzIG9ubHkgdXNlcyBwcm90b2NvbCBzdGFsbHMgKGVwMCBuZXZlciBoYWx0cyksCisJICogYW5kIGlmIHdlIGdvdCB0aGlzIGZhciB0aGUgZ2FkZ2V0IGRyaXZlciBhbHJlYWR5IGhhZCBhCisJICogY2hhbmNlIHRvIHN0YWxsLiAgVHJpZXMgdG8gYmUgZm9yZ2l2aW5nIG9mIGhvc3Qgb2RkaXRpZXMuCisJICoKKwkgKiBOT1RFOiAgdGhlIGxhc3QgY2hhbmNlIGdhZGdldCBkcml2ZXJzIGhhdmUgdG8gc3RhbGwgY29udHJvbAorCSAqIHJlcXVlc3RzIGlzIGR1cmluZyB0aGVpciByZXF1ZXN0IGNvbXBsZXRpb24gY2FsbGJhY2suCisJICovCisJaWYgKCFsaXN0X2VtcHR5KCZlcDAtPnF1ZXVlKSkKKwkJcmVxID0gY29udGFpbmVyX29mKGVwMC0+cXVldWUubmV4dCwgc3RydWN0IG9tYXBfcmVxLCBxdWV1ZSk7CisKKwkvKiBJTiA9PSBUWCB0byBob3N0ICovCisJaWYgKGlycV9zcmMgJiBVRENfRVAwX1RYKSB7CisJCWludAlzdGF0OworCisJCVVEQ19JUlFfU1JDX1JFRyA9IFVEQ19FUDBfVFg7CisJCVVEQ19FUF9OVU1fUkVHID0gVURDX0VQX1NFTHxVRENfRVBfRElSOworCQlzdGF0ID0gVURDX1NUQVRfRkxHX1JFRzsKKwkJaWYgKHN0YXQgJiBVRENfQUNLKSB7CisJCQlpZiAodWRjLT5lcDBfaW4pIHsKKwkJCQkvKiB3cml0ZSBuZXh0IElOIHBhY2tldCBmcm9tIHJlc3BvbnNlLAorCQkJCSAqIG9yIHNldCB1cCB0aGUgc3RhdHVzIHN0YWdlLgorCQkJCSAqLworCQkJCWlmIChyZXEpCisJCQkJCXN0YXQgPSB3cml0ZV9maWZvKGVwMCwgcmVxKTsKKwkJCQlVRENfRVBfTlVNX1JFRyA9IFVEQ19FUF9ESVI7CisJCQkJaWYgKCFyZXEgJiYgdWRjLT5lcDBfcGVuZGluZykgeworCQkJCQlVRENfRVBfTlVNX1JFRyA9IFVEQ19FUF9TRUw7CisJCQkJCVVEQ19DVFJMX1JFRyA9IFVEQ19DTFJfRVA7CisJCQkJCVVEQ19DVFJMX1JFRyA9IFVEQ19TRVRfRklGT19FTjsKKwkJCQkJVURDX0VQX05VTV9SRUcgPSAwOworCQkJCQl1ZGMtPmVwMF9wZW5kaW5nID0gMDsKKwkJCQl9IC8qIGVsc2U6ICA2IHdhaXQgc3RhdGVzIGJlZm9yZSBpdCdsbCB0eCAqLworCQkJfSBlbHNlIHsKKwkJCQkvKiBhY2sgc3RhdHVzIHN0YWdlIG9mIE9VVCB0cmFuc2ZlciAqLworCQkJCVVEQ19FUF9OVU1fUkVHID0gVURDX0VQX0RJUjsKKwkJCQlpZiAocmVxKQorCQkJCQlkb25lKGVwMCwgcmVxLCAwKTsKKwkJCX0KKwkJCXJlcSA9IDA7CisJCX0gZWxzZSBpZiAoc3RhdCAmIFVEQ19TVEFMTCkgeworCQkJVURDX0NUUkxfUkVHID0gVURDX0NMUl9IQUxUOworCQkJVURDX0VQX05VTV9SRUcgPSBVRENfRVBfRElSOworCQl9IGVsc2UgeworCQkJVURDX0VQX05VTV9SRUcgPSBVRENfRVBfRElSOworCQl9CisJfQorCisJLyogT1VUID09IFJYIGZyb20gaG9zdCAqLworCWlmIChpcnFfc3JjICYgVURDX0VQMF9SWCkgeworCQlpbnQJc3RhdDsKKworCQlVRENfSVJRX1NSQ19SRUcgPSBVRENfRVAwX1JYOworCQlVRENfRVBfTlVNX1JFRyA9IFVEQ19FUF9TRUw7CisJCXN0YXQgPSBVRENfU1RBVF9GTEdfUkVHOworCQlpZiAoc3RhdCAmIFVEQ19BQ0spIHsKKwkJCWlmICghdWRjLT5lcDBfaW4pIHsKKwkJCQlzdGF0ID0gMDsKKwkJCQkvKiByZWFkIG5leHQgT1VUIHBhY2tldCBvZiByZXF1ZXN0LCBtYXliZQorCQkJCSAqIHJlYWN0aXZpdGluZyB0aGUgZmlmbzsgc3RhbGwgb24gZXJyb3JzLgorCQkJCSAqLworCQkJCWlmICghcmVxIHx8IChzdGF0ID0gcmVhZF9maWZvKGVwMCwgcmVxKSkgPCAwKSB7CisJCQkJCVVEQ19TWVNDT04yX1JFRyA9IFVEQ19TVEFMTF9DTUQ7CisJCQkJCXVkYy0+ZXAwX3BlbmRpbmcgPSAwOworCQkJCQlzdGF0ID0gMDsKKwkJCQl9IGVsc2UgaWYgKHN0YXQgPT0gMCkKKwkJCQkJVURDX0NUUkxfUkVHID0gVURDX1NFVF9GSUZPX0VOOworCQkJCVVEQ19FUF9OVU1fUkVHID0gMDsKKwkJCQkKKwkJCQkvKiBhY3RpdmF0ZSBzdGF0dXMgc3RhZ2UgKi8KKwkJCQlpZiAoc3RhdCA9PSAxKSB7CisJCQkJCWRvbmUoZXAwLCByZXEsIDApOworCQkJCQkvKiB0aGF0IG1heSBoYXZlIFNUQUxMZWQgZXAwLi4uICovCisJCQkJCVVEQ19FUF9OVU1fUkVHID0gVURDX0VQX1NFTHxVRENfRVBfRElSOworCQkJCQlVRENfQ1RSTF9SRUcgPSBVRENfQ0xSX0VQOworCQkJCQlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0ZJRk9fRU47CisJCQkJCVVEQ19FUF9OVU1fUkVHID0gVURDX0VQX0RJUjsKKwkJCQkJdWRjLT5lcDBfcGVuZGluZyA9IDA7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBhY2sgc3RhdHVzIHN0YWdlIG9mIElOIHRyYW5zZmVyICovCisJCQkJVURDX0VQX05VTV9SRUcgPSAwOworCQkJCWlmIChyZXEpCisJCQkJCWRvbmUoZXAwLCByZXEsIDApOworCQkJfQorCQl9IGVsc2UgaWYgKHN0YXQgJiBVRENfU1RBTEwpIHsKKwkJCVVEQ19DVFJMX1JFRyA9IFVEQ19DTFJfSEFMVDsKKwkJCVVEQ19FUF9OVU1fUkVHID0gMDsKKwkJfSBlbHNlIHsKKwkJCVVEQ19FUF9OVU1fUkVHID0gMDsKKwkJfQorCX0KKworCS8qIFNFVFVQIHN0YXJ0cyBhbGwgY29udHJvbCB0cmFuc2ZlcnMgKi8KKwlpZiAoaXJxX3NyYyAmIFVEQ19TRVRVUCkgeworCQl1bmlvbiB1IHsKKwkJCXUxNgkJCXdvcmRbNF07CisJCQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0CXI7CisJCX0gdTsKKwkJaW50CQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJc3RydWN0IG9tYXBfZXAJCSplcDsKKworCQkvKiByZWFkIHRoZSAobGF0ZXN0KSBTRVRVUCBtZXNzYWdlICovCisJCWRvIHsKKwkJCVVEQ19FUF9OVU1fUkVHID0gVURDX1NFVFVQX1NFTDsKKwkJCS8qIHR3byBieXRlcyBhdCBhIHRpbWUgKi8KKwkJCXUud29yZFswXSA9IFVEQ19EQVRBX1JFRzsKKwkJCXUud29yZFsxXSA9IFVEQ19EQVRBX1JFRzsKKwkJCXUud29yZFsyXSA9IFVEQ19EQVRBX1JFRzsKKwkJCXUud29yZFszXSA9IFVEQ19EQVRBX1JFRzsKKwkJCVVEQ19FUF9OVU1fUkVHID0gMDsKKwkJfSB3aGlsZSAoVURDX0lSUV9TUkNfUkVHICYgVURDX1NFVFVQKTsKKwkJbGUxNl90b19jcHVzICgmdS5yLndWYWx1ZSk7CisJCWxlMTZfdG9fY3B1cyAoJnUuci53SW5kZXgpOworCQlsZTE2X3RvX2NwdXMgKCZ1LnIud0xlbmd0aCk7CisKKwkJLyogRGVsZWdhdGUgYWxtb3N0IGFsbCBjb250cm9sIHJlcXVlc3RzIHRvIHRoZSBnYWRnZXQgZHJpdmVyLAorCQkgKiBleGNlcHQgZm9yIGEgaGFuZGZ1bCBvZiBjaDkgc3RhdHVzL2ZlYXR1cmUgcmVxdWVzdHMgdGhhdAorCQkgKiBoYXJkd2FyZSBkb2Vzbid0IGF1dG9kZWNvZGUgX2FuZF8gdGhlIGdhZGdldCBBUEkgaGlkZXMuCisJCSAqLworCQl1ZGMtPmVwMF9pbiA9ICh1LnIuYlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikgIT0gMDsKKwkJdWRjLT5lcDBfc2V0X2NvbmZpZyA9IDA7CisJCXVkYy0+ZXAwX3BlbmRpbmcgPSAxOworCQllcDAtPnN0b3BwZWQgPSAwOworCQllcDAtPmFja3dhaXQgPSAwOworCQlzd2l0Y2ggKHUuci5iUmVxdWVzdCkgeworCQljYXNlIFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT046CisJCQkvKiB1ZGMgbmVlZHMgdG8ga25vdyB3aGVuIGVwICE9IDAgaXMgdmFsaWQgKi8KKwkJCWlmICh1LnIuYlJlcXVlc3RUeXBlICE9IFVTQl9SRUNJUF9ERVZJQ0UpCisJCQkJZ290byBkZWxlZ2F0ZTsKKwkJCWlmICh1LnIud0xlbmd0aCAhPSAwKQorCQkJCWdvdG8gZG9fc3RhbGw7CisJCQl1ZGMtPmVwMF9zZXRfY29uZmlnID0gMTsKKwkJCXVkYy0+ZXAwX3Jlc2V0X2NvbmZpZyA9ICh1LnIud1ZhbHVlID09IDApOworCQkJVkRCRygic2V0IGNvbmZpZyAlZFxuIiwgdS5yLndWYWx1ZSk7CisKKwkJCS8qIHVwZGF0ZSB1ZGMgTk9XIHNpbmNlIGdhZGdldCBkcml2ZXIgbWF5IHN0YXJ0CisJCQkgKiBxdWV1ZWluZyByZXF1ZXN0cyBpbW1lZGlhdGVseTsgY2xlYXIgY29uZmlnCisJCQkgKiBsYXRlciBpZiBpdCBmYWlscyB0aGUgcmVxdWVzdC4KKwkJCSAqLworCQkJaWYgKHVkYy0+ZXAwX3Jlc2V0X2NvbmZpZykKKwkJCQlVRENfU1lTQ09OMl9SRUcgPSBVRENfQ0xSX0NGRzsKKwkJCWVsc2UKKwkJCQlVRENfU1lTQ09OMl9SRUcgPSBVRENfREVWX0NGRzsKKwkJCXVwZGF0ZV9vdGcodWRjKTsKKwkJCWdvdG8gZGVsZWdhdGU7CisJCWNhc2UgVVNCX1JFUV9DTEVBUl9GRUFUVVJFOgorCQkJLyogY2xlYXIgZW5kcG9pbnQgaGFsdCAqLworCQkJaWYgKHUuci5iUmVxdWVzdFR5cGUgIT0gVVNCX1JFQ0lQX0VORFBPSU5UKQorCQkJCWdvdG8gZGVsZWdhdGU7CisJCQlpZiAodS5yLndWYWx1ZSAhPSBVU0JfRU5EUE9JTlRfSEFMVAorCQkJCQl8fCB1LnIud0xlbmd0aCAhPSAwKQorCQkJCWdvdG8gZG9fc3RhbGw7CisJCQllcCA9ICZ1ZGMtPmVwW3Uuci53SW5kZXggJiAweGZdOworCQkJaWYgKGVwICE9IGVwMCkgeworCQkJCWlmICh1LnIud0luZGV4ICYgVVNCX0RJUl9JTikKKwkJCQkJZXAgKz0gMTY7CisJCQkJaWYgKGVwLT5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQworCQkJCQkJfHwgIWVwLT5kZXNjKQorCQkJCQlnb3RvIGRvX3N0YWxsOworCQkJCXVzZV9lcChlcCwgMCk7CisJCQkJVURDX0NUUkxfUkVHID0gVURDX1JFU0VUX0VQOworCQkJCWVwLT5hY2t3YWl0ID0gMDsKKwkJCQlpZiAoIShlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pKSB7CisJCQkJCVVEQ19DVFJMX1JFRyA9IFVEQ19TRVRfRklGT19FTjsKKwkJCQkJZXAtPmFja3dhaXQgPSAxICsgZXAtPmRvdWJsZV9idWY7CisJCQkJfQorCQkJfQorCQkJVkRCRygiJXMgaGFsdCBjbGVhcmVkIGJ5IGhvc3RcbiIsIGVwLT5uYW1lKTsKKwkJCWdvdG8gZXAwb3V0X3N0YXR1c19zdGFnZTsKKwkJY2FzZSBVU0JfUkVRX1NFVF9GRUFUVVJFOgorCQkJLyogc2V0IGVuZHBvaW50IGhhbHQgKi8KKwkJCWlmICh1LnIuYlJlcXVlc3RUeXBlICE9IFVTQl9SRUNJUF9FTkRQT0lOVCkKKwkJCQlnb3RvIGRlbGVnYXRlOworCQkJaWYgKHUuci53VmFsdWUgIT0gVVNCX0VORFBPSU5UX0hBTFQKKwkJCQkJfHwgdS5yLndMZW5ndGggIT0gMCkKKwkJCQlnb3RvIGRvX3N0YWxsOworCQkJZXAgPSAmdWRjLT5lcFt1LnIud0luZGV4ICYgMHhmXTsKKwkJCWlmICh1LnIud0luZGV4ICYgVVNCX0RJUl9JTikKKwkJCQllcCArPSAxNjsKKwkJCWlmIChlcC0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MKKwkJCQkJfHwgZXAgPT0gZXAwIHx8ICFlcC0+ZGVzYykKKwkJCQlnb3RvIGRvX3N0YWxsOworCQkJaWYgKHVzZV9kbWEgJiYgZXAtPmhhc19kbWEpIHsKKwkJCQkvKiB0aGlzIGhhcyBydWRlIHNpZGUtZWZmZWN0cyAoYWJvcnRzKSBhbmQKKwkJCQkgKiBjYW4ndCByZWFsbHkgd29yayBpZiBETUEtSU4gaXMgYWN0aXZlCisJCQkJICovCisJCQkJREJHKCIlcyBob3N0IHNldF9oYWx0LCBOWUVUIFxuIiwgZXAtPm5hbWUpOworCQkJCWdvdG8gZG9fc3RhbGw7CisJCQl9CisJCQl1c2VfZXAoZXAsIDApOworCQkJLyogY2FuJ3QgaGFsdCBpZiBmaWZvIGlzbid0IGVtcHR5Li4uICovCisJCQlVRENfQ1RSTF9SRUcgPSBVRENfQ0xSX0VQOworCQkJVURDX0NUUkxfUkVHID0gVURDX1NFVF9IQUxUOworCQkJVkRCRygiJXMgaGFsdGVkIGJ5IGhvc3RcbiIsIGVwLT5uYW1lKTsKK2VwMG91dF9zdGF0dXNfc3RhZ2U6CisJCQlzdGF0dXMgPSAwOworCQkJVURDX0VQX05VTV9SRUcgPSBVRENfRVBfU0VMfFVEQ19FUF9ESVI7CisJCQlVRENfQ1RSTF9SRUcgPSBVRENfQ0xSX0VQOworCQkJVURDX0NUUkxfUkVHID0gVURDX1NFVF9GSUZPX0VOOworCQkJVURDX0VQX05VTV9SRUcgPSBVRENfRVBfRElSOworCQkJdWRjLT5lcDBfcGVuZGluZyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUkVRX0dFVF9TVEFUVVM6CisJCQkvKiByZXR1cm4gaW50ZXJmYWNlIHN0YXR1cy4gIGlmIHdlIHdlcmUgcGVkYW50aWMsCisJCQkgKiB3ZSdkIGRldGVjdCBub24tZXhpc3RlbnQgaW50ZXJmYWNlcywgYW5kIHN0YWxsLgorCQkJICovCisJCQlpZiAodS5yLmJSZXF1ZXN0VHlwZQorCQkJCQkhPSAoVVNCX0RJUl9JTnxVU0JfUkVDSVBfSU5URVJGQUNFKSkKKwkJCQlnb3RvIGRlbGVnYXRlOworCQkJLyogcmV0dXJuIHR3byB6ZXJvIGJ5dGVzICovCisJCQlVRENfRVBfTlVNX1JFRyA9IFVEQ19FUF9TRUx8VURDX0VQX0RJUjsKKwkJCVVEQ19EQVRBX1JFRyA9IDA7CisJCQlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0ZJRk9fRU47CisJCQlVRENfRVBfTlVNX1JFRyA9IFVEQ19FUF9ESVI7CisJCQlzdGF0dXMgPSAwOworCQkJVkRCRygiR0VUX1NUQVRVUywgaW50ZXJmYWNlICVkXG4iLCB1LnIud0luZGV4KTsKKwkJCS8qIG5leHQsIHN0YXR1cyBzdGFnZSAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CitkZWxlZ2F0ZToKKwkJCS8qIGFjdGl2YXRlIHRoZSBlcDBvdXQgZmlmbyByaWdodCBhd2F5ICovCisJCQlpZiAoIXVkYy0+ZXAwX2luICYmIHUuci53TGVuZ3RoKSB7CisJCQkJVURDX0VQX05VTV9SRUcgPSAwOworCQkJCVVEQ19DVFJMX1JFRyA9IFVEQ19TRVRfRklGT19FTjsKKwkJCX0KKworCQkJLyogZ2FkZ2V0IGRyaXZlcnMgc2VlIGNsYXNzL3ZlbmRvciBzcGVjaWZpYyByZXF1ZXN0cywKKwkJCSAqIHtTRVQsR0VUfV97SU5URVJGQUNFLERFU0NSSVBUT1IsQ09ORklHVVJBVElPTn0sCisJCQkgKiBhbmQgbW9yZQorCQkJICovCisJCQlWREJHKCJTRVRVUCAlMDJ4LiUwMnggdiUwNHggaSUwNHggbCUwNHhcbiIsCisJCQkJdS5yLmJSZXF1ZXN0VHlwZSwgdS5yLmJSZXF1ZXN0LAorCQkJCXUuci53VmFsdWUsIHUuci53SW5kZXgsIHUuci53TGVuZ3RoKTsKKworCQkJLyogVGhlIGdhZGdldCBkcml2ZXIgbWF5IHJldHVybiBhbiBlcnJvciBoZXJlLAorCQkJICogY2F1c2luZyBhbiBpbW1lZGlhdGUgcHJvdG9jb2wgc3RhbGwuCisJCQkgKgorCQkJICogRWxzZSBpdCBtdXN0IGlzc3VlIGEgcmVzcG9uc2UsIGVpdGhlciBxdWV1ZWluZyBhCisJCQkgKiByZXNwb25zZSBidWZmZXIgZm9yIHRoZSBEQVRBIHN0YWdlLCBvciBoYWx0aW5nIGVwMAorCQkJICogKGNhdXNpbmcgYSBwcm90b2NvbCBzdGFsbCwgbm90IGEgcmVhbCBoYWx0KS4gIEEKKwkJCSAqIHplcm8gbGVuZ3RoIGJ1ZmZlciBtZWFucyBubyBEQVRBIHN0YWdlLgorCQkJICoKKwkJCSAqIEl0J3MgZmluZSB0byBpc3N1ZSB0aGF0IHJlc3BvbnNlIGFmdGVyIHRoZSBzZXR1cCgpCisJCQkgKiBjYWxsIHJldHVybnMsIGFuZCB0aGlzIElSUSB3YXMgaGFuZGxlZC4KKwkJCSAqLworCQkJdWRjLT5lcDBfc2V0dXAgPSAxOworCQkJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CisJCQlzdGF0dXMgPSB1ZGMtPmRyaXZlci0+c2V0dXAgKCZ1ZGMtPmdhZGdldCwgJnUucik7CisJCQlzcGluX2xvY2soJnVkYy0+bG9jayk7CisJCQl1ZGMtPmVwMF9zZXR1cCA9IDA7CisJCX0KKworCQlpZiAoc3RhdHVzIDwgMCkgeworZG9fc3RhbGw6CisJCQlWREJHKCJyZXEgJTAyeC4lMDJ4IHByb3RvY29sIFNUQUxMOyBzdGF0ICVkXG4iLAorCQkJCQl1LnIuYlJlcXVlc3RUeXBlLCB1LnIuYlJlcXVlc3QsIHN0YXR1cyk7CisJCQlpZiAodWRjLT5lcDBfc2V0X2NvbmZpZykgeworCQkJCWlmICh1ZGMtPmVwMF9yZXNldF9jb25maWcpCisJCQkJCVdBUk4oImVycm9yIHJlc2V0dGluZyBjb25maWc/XG4iKTsKKwkJCQllbHNlCisJCQkJCVVEQ19TWVNDT04yX1JFRyA9IFVEQ19DTFJfQ0ZHOworCQkJfQorCQkJVURDX1NZU0NPTjJfUkVHID0gVURDX1NUQUxMX0NNRDsKKwkJCXVkYy0+ZXAwX3BlbmRpbmcgPSAwOworCQl9CisJfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIE9UR19GTEFHUyAoVURDX0JfSE5QX0VOQUJMRXxVRENfQV9ITlBfU1VQUE9SVHxVRENfQV9BTFRfSE5QX1NVUFBPUlQpCisKK3N0YXRpYyB2b2lkIGRldnN0YXRlX2lycShzdHJ1Y3Qgb21hcF91ZGMgKnVkYywgdTE2IGlycV9zcmMpCit7CisJdTE2CWRldnN0YXQsIGNoYW5nZTsKKworCWRldnN0YXQgPSBVRENfREVWU1RBVF9SRUc7CisJY2hhbmdlID0gZGV2c3RhdCBeIHVkYy0+ZGV2c3RhdDsKKwl1ZGMtPmRldnN0YXQgPSBkZXZzdGF0OworCisJaWYgKGNoYW5nZSAmIChVRENfVVNCX1JFU0VUfFVEQ19BVFQpKSB7CisJCXVkY19xdWllc2NlKHVkYyk7CisKKwkJaWYgKGNoYW5nZSAmIFVEQ19BVFQpIHsKKwkJCS8qIGRyaXZlciBmb3IgYW55IGV4dGVybmFsIHRyYW5zY2VpdmVyIHdpbGwKKwkJCSAqIGhhdmUgY2FsbGVkIG9tYXBfdmJ1c19zZXNzaW9uKCkgYWxyZWFkeQorCQkJICovCisJCQlpZiAoZGV2c3RhdCAmIFVEQ19BVFQpIHsKKwkJCQl1ZGMtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworCQkJCVZEQkcoImNvbm5lY3RcbiIpOworCQkJCWlmICghdWRjLT50cmFuc2NlaXZlcikKKwkJCQkJcHVsbHVwX2VuYWJsZSh1ZGMpOworCQkJCS8vIGlmIChkcml2ZXItPmNvbm5lY3QpIGNhbGwgaXQKKwkJCX0gZWxzZSBpZiAodWRjLT5nYWRnZXQuc3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04pIHsKKwkJCQl1ZGMtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCQkJCWlmICghdWRjLT50cmFuc2NlaXZlcikKKwkJCQkJcHVsbHVwX2Rpc2FibGUodWRjKTsKKwkJCQlEQkcoImRpc2Nvbm5lY3QsIGdhZGdldCAlc1xuIiwKKwkJCQkJdWRjLT5kcml2ZXItPmRyaXZlci5uYW1lKTsKKwkJCQlpZiAodWRjLT5kcml2ZXItPmRpc2Nvbm5lY3QpIHsKKwkJCQkJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CisJCQkJCXVkYy0+ZHJpdmVyLT5kaXNjb25uZWN0KCZ1ZGMtPmdhZGdldCk7CisJCQkJCXNwaW5fbG9jaygmdWRjLT5sb2NrKTsKKwkJCQl9CisJCQl9CisJCQljaGFuZ2UgJj0gflVEQ19BVFQ7CisJCX0KKworCQlpZiAoY2hhbmdlICYgVURDX1VTQl9SRVNFVCkgeworCQkJaWYgKGRldnN0YXQgJiBVRENfVVNCX1JFU0VUKSB7CisJCQkJVkRCRygiUkVTRVQ9MVxuIik7CisJCQl9IGVsc2UgeworCQkJCXVkYy0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CisJCQkJSU5GTygiVVNCIHJlc2V0IGRvbmUsIGdhZGdldCAlc1xuIiwKKwkJCQkJdWRjLT5kcml2ZXItPmRyaXZlci5uYW1lKTsKKwkJCQkvKiBlcDAgdHJhZmZpYyBpcyBsZWdhbCBmcm9tIG5vdyBvbiAqLworCQkJCVVEQ19JUlFfRU5fUkVHID0gVURDX0RTX0NIR19JRSB8IFVEQ19FUDBfSUU7CisJCQl9CisJCQljaGFuZ2UgJj0gflVEQ19VU0JfUkVTRVQ7CisJCX0KKwl9CisJaWYgKGNoYW5nZSAmIFVEQ19TVVMpIHsKKwkJaWYgKHVkYy0+Z2FkZ2V0LnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOKSB7CisJCQkvLyBGSVhNRSB0ZWxsIGlzcDEzMDEgdG8gc3VzcGVuZC9yZXN1bWUgKD8pCisJCQlpZiAoZGV2c3RhdCAmIFVEQ19TVVMpIHsKKwkJCQlWREJHKCJzdXNwZW5kXG4iKTsKKwkJCQl1cGRhdGVfb3RnKHVkYyk7CisJCQkJLyogSE5QIGNvdWxkIGJlIHVuZGVyIHdheSBhbHJlYWR5ICovCisJCQkJaWYgKHVkYy0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9GVUxMCisJCQkJCQkmJiB1ZGMtPmRyaXZlci0+c3VzcGVuZCkgeworCQkJCQlzcGluX3VubG9jaygmdWRjLT5sb2NrKTsKKwkJCQkJdWRjLT5kcml2ZXItPnN1c3BlbmQoJnVkYy0+Z2FkZ2V0KTsKKwkJCQkJc3Bpbl9sb2NrKCZ1ZGMtPmxvY2spOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJVkRCRygicmVzdW1lXG4iKTsKKwkJCQlpZiAodWRjLT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwKKwkJCQkJCSYmIHVkYy0+ZHJpdmVyLT5yZXN1bWUpIHsKKwkJCQkJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CisJCQkJCXVkYy0+ZHJpdmVyLT5yZXN1bWUoJnVkYy0+Z2FkZ2V0KTsKKwkJCQkJc3Bpbl9sb2NrKCZ1ZGMtPmxvY2spOworCQkJCX0KKwkJCX0KKwkJfQorCQljaGFuZ2UgJj0gflVEQ19TVVM7CisJfQorCWlmICghY3B1X2lzX29tYXAxNXh4KCkgJiYgKGNoYW5nZSAmIE9UR19GTEFHUykpIHsKKwkJdXBkYXRlX290Zyh1ZGMpOworCQljaGFuZ2UgJj0gfk9UR19GTEFHUzsKKwl9CisKKwljaGFuZ2UgJj0gfihVRENfQ0ZHfFVEQ19ERUZ8VURDX0FERCk7CisJaWYgKGNoYW5nZSkKKwkJVkRCRygiZGV2c3RhdCAlMDN4LCBpZ25vcmUgY2hhbmdlICUwM3hcbiIsCisJCQlkZXZzdGF0LCAgY2hhbmdlKTsKKworCVVEQ19JUlFfU1JDX1JFRyA9IFVEQ19EU19DSEc7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorb21hcF91ZGNfaXJxKGludCBpcnEsIHZvaWQgKl91ZGMsIHN0cnVjdCBwdF9yZWdzICpyKQoreworCXN0cnVjdCBvbWFwX3VkYwkqdWRjID0gX3VkYzsKKwl1MTYJCWlycV9zcmM7CisJaXJxcmV0dXJuX3QJc3RhdHVzID0gSVJRX05PTkU7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKwlpcnFfc3JjID0gVURDX0lSUV9TUkNfUkVHOworCisJLyogRGV2aWNlIHN0YXRlIGNoYW5nZSAodXNiIGNoOSBzdHVmZikgKi8KKwlpZiAoaXJxX3NyYyAmIFVEQ19EU19DSEcpIHsKKwkJZGV2c3RhdGVfaXJxKF91ZGMsIGlycV9zcmMpOworCQlzdGF0dXMgPSBJUlFfSEFORExFRDsKKwkJaXJxX3NyYyAmPSB+VURDX0RTX0NIRzsKKwl9CisKKwkvKiBFUDAgY29udHJvbCB0cmFuc2ZlcnMgKi8KKwlpZiAoaXJxX3NyYyAmIChVRENfRVAwX1JYfFVEQ19TRVRVUHxVRENfRVAwX1RYKSkgeworCQllcDBfaXJxKF91ZGMsIGlycV9zcmMpOworCQlzdGF0dXMgPSBJUlFfSEFORExFRDsKKwkJaXJxX3NyYyAmPSB+KFVEQ19FUDBfUlh8VURDX1NFVFVQfFVEQ19FUDBfVFgpOworCX0KKworCS8qIERNQSB0cmFuc2ZlciBjb21wbGV0aW9uICovCisJaWYgKHVzZV9kbWEgJiYgKGlycV9zcmMgJiAoVURDX1RYTl9ET05FfFVEQ19SWE5fQ05UfFVEQ19SWE5fRU9UKSkpIHsKKwkJZG1hX2lycShfdWRjLCBpcnFfc3JjKTsKKwkJc3RhdHVzID0gSVJRX0hBTkRMRUQ7CisJCWlycV9zcmMgJj0gfihVRENfVFhOX0RPTkV8VURDX1JYTl9DTlR8VURDX1JYTl9FT1QpOworCX0KKworCWlycV9zcmMgJj0gfihVRENfU09GfFVEQ19FUE5fVFh8VURDX0VQTl9SWCk7CisJaWYgKGlycV9zcmMpCisJCURCRygidWRjX2lycSwgdW5oYW5kbGVkICUwM3hcbiIsIGlycV9zcmMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyogd29ya2Fyb3VuZCBmb3Igc2VlbWluZ2x5LWxvc3QgSVJRcyBmb3IgUlggQUNLcy4uLiAqLworI2RlZmluZSBQSU9fT1VUX1RJTUVPVVQJKGppZmZpZXMgKyBIWi8zKQorI2RlZmluZSBIQUxGX0ZVTEwoZikJKCEoKGYpJihVRENfTk9OX0lTT19GSUZPX0ZVTEx8VURDX05PTl9JU09fRklGT19FTVBUWSkpKQorCitzdGF0aWMgdm9pZCBwaW9fb3V0X3RpbWVyKHVuc2lnbmVkIGxvbmcgX2VwKQoreworCXN0cnVjdCBvbWFwX2VwCSplcCA9ICh2b2lkICopIF9lcDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXUxNgkJc3RhdF9mbGc7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPnVkYy0+bG9jaywgZmxhZ3MpOworCWlmICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSAmJiBlcC0+YWNrd2FpdCkgeworCQl1c2VfZXAoZXAsIDApOworCQlzdGF0X2ZsZyA9IFVEQ19TVEFUX0ZMR19SRUc7CisKKwkJaWYgKChzdGF0X2ZsZyAmIFVEQ19BQ0spICYmICghKHN0YXRfZmxnICYgVURDX0ZJRk9fRU4pCisJCQkJfHwgKGVwLT5kb3VibGVfYnVmICYmIEhBTEZfRlVMTChzdGF0X2ZsZykpKSkgeworCQkJc3RydWN0IG9tYXBfcmVxCSpyZXE7CisKKwkJCVZEQkcoIiVzOiBsb3NlLCAlMDR4XG4iLCBlcC0+ZXAubmFtZSwgc3RhdF9mbGcpOworCQkJcmVxID0gY29udGFpbmVyX29mKGVwLT5xdWV1ZS5uZXh0LAorCQkJCQlzdHJ1Y3Qgb21hcF9yZXEsIHF1ZXVlKTsKKwkJCVVEQ19FUF9OVU1fUkVHID0gZXAtPmJFbmRwb2ludEFkZHJlc3MgfCBVRENfRVBfU0VMOworCQkJKHZvaWQpIHJlYWRfZmlmbyhlcCwgcmVxKTsKKwkJCVVEQ19FUF9OVU1fUkVHID0gZXAtPmJFbmRwb2ludEFkZHJlc3M7CisJCQlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0ZJRk9fRU47CisJCQllcC0+YWNrd2FpdCA9IDEgKyBlcC0+ZG91YmxlX2J1ZjsKKwkJfQorCX0KKwltb2RfdGltZXIoJmVwLT50aW1lciwgUElPX09VVF9USU1FT1VUKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+dWRjLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorb21hcF91ZGNfcGlvX2lycShpbnQgaXJxLCB2b2lkICpfZGV2LCBzdHJ1Y3QgcHRfcmVncyAqcikKK3sKKwl1MTYJCWVwbl9zdGF0LCBpcnFfc3JjOworCWlycXJldHVybl90CXN0YXR1cyA9IElSUV9OT05FOworCXN0cnVjdCBvbWFwX2VwCSplcDsKKwlpbnQJCWVwbnVtOworCXN0cnVjdCBvbWFwX3VkYwkqdWRjID0gX2RldjsKKwlzdHJ1Y3Qgb21hcF9yZXEJKnJlcTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCWVwbl9zdGF0ID0gVURDX0VQTl9TVEFUX1JFRzsKKwlpcnFfc3JjID0gVURDX0lSUV9TUkNfUkVHOworCisJLyogaGFuZGxlIE9VVCBmaXJzdCwgdG8gYXZvaWQgc29tZSB3YXN0ZWZ1bCBOQUtzICovCisJaWYgKGlycV9zcmMgJiBVRENfRVBOX1JYKSB7CisJCWVwbnVtID0gKGVwbl9zdGF0ID4+IDgpICYgMHgwZjsKKwkJVURDX0lSUV9TUkNfUkVHID0gVURDX0VQTl9SWDsKKwkJc3RhdHVzID0gSVJRX0hBTkRMRUQ7CisJCWVwID0gJnVkYy0+ZXBbZXBudW1dOworCQllcC0+aXJxcysrOworCisJCVVEQ19FUF9OVU1fUkVHID0gZXBudW0gfCBVRENfRVBfU0VMOworCQllcC0+Zm5mID0gMDsKKwkJaWYgKChVRENfU1RBVF9GTEdfUkVHICYgVURDX0FDSykpIHsKKwkJCWVwLT5hY2t3YWl0LS07CisJCQlpZiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJCQlpbnQgc3RhdDsKKwkJCQlyZXEgPSBjb250YWluZXJfb2YoZXAtPnF1ZXVlLm5leHQsCisJCQkJCQlzdHJ1Y3Qgb21hcF9yZXEsIHF1ZXVlKTsKKwkJCQlzdGF0ID0gcmVhZF9maWZvKGVwLCByZXEpOworCQkJCWlmICghZXAtPmRvdWJsZV9idWYpCisJCQkJCWVwLT5mbmYgPSAxOworCQkJfQorCQl9CisJCS8qIG1pbiA2IGNsb2NrIGRlbGF5IGJlZm9yZSBjbGVhcmluZyBFUF9TRUwgLi4uICovCisJCWVwbl9zdGF0ID0gVURDX0VQTl9TVEFUX1JFRzsKKwkJZXBuX3N0YXQgPSBVRENfRVBOX1NUQVRfUkVHOworCQlVRENfRVBfTlVNX1JFRyA9IGVwbnVtOworCisJCS8qIGVuYWJsaW5nIGZpZm8gX2FmdGVyXyBjbGVhcmluZyBBQ0ssIGNvbnRyYXJ5IHRvIGRvY3MsCisJCSAqIHJlZHVjZXMgbG9zc2FnZTsgdGltZXIgc3RpbGwgbmVlZGVkIHRob3VnaCAoc2lnaCkuCisJCSAqLworCQlpZiAoZXAtPmZuZikgeworCQkJVURDX0NUUkxfUkVHID0gVURDX1NFVF9GSUZPX0VOOworCQkJZXAtPmFja3dhaXQgPSAxICsgZXAtPmRvdWJsZV9idWY7CisJCX0KKwkJbW9kX3RpbWVyKCZlcC0+dGltZXIsIFBJT19PVVRfVElNRU9VVCk7CisJfQorCisJLyogdGhlbiBJTiB0cmFuc2ZlcnMgKi8KKwllbHNlIGlmIChpcnFfc3JjICYgVURDX0VQTl9UWCkgeworCQllcG51bSA9IGVwbl9zdGF0ICYgMHgwZjsKKwkJVURDX0lSUV9TUkNfUkVHID0gVURDX0VQTl9UWDsKKwkJc3RhdHVzID0gSVJRX0hBTkRMRUQ7CisJCWVwID0gJnVkYy0+ZXBbMTYgKyBlcG51bV07CisJCWVwLT5pcnFzKys7CisKKwkJVURDX0VQX05VTV9SRUcgPSBlcG51bSB8IFVEQ19FUF9ESVIgfCBVRENfRVBfU0VMOworCQlpZiAoKFVEQ19TVEFUX0ZMR19SRUcgJiBVRENfQUNLKSkgeworCQkJZXAtPmFja3dhaXQgPSAwOworCQkJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCQkJcmVxID0gY29udGFpbmVyX29mKGVwLT5xdWV1ZS5uZXh0LAorCQkJCQkJc3RydWN0IG9tYXBfcmVxLCBxdWV1ZSk7CisJCQkJKHZvaWQpIHdyaXRlX2ZpZm8oZXAsIHJlcSk7CisJCQl9CisJCX0KKwkJLyogbWluIDYgY2xvY2sgZGVsYXkgYmVmb3JlIGNsZWFyaW5nIEVQX1NFTCAuLi4gKi8KKwkJZXBuX3N0YXQgPSBVRENfRVBOX1NUQVRfUkVHOworCQllcG5fc3RhdCA9IFVEQ19FUE5fU1RBVF9SRUc7CisJCVVEQ19FUF9OVU1fUkVHID0gZXBudW0gfCBVRENfRVBfRElSOworCQkvKiB0aGVuIDYgY2xvY2tzIGJlZm9yZSBpdCdkIHR4ICovCisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworI2lmZGVmCVVTRV9JU08KK3N0YXRpYyBpcnFyZXR1cm5fdAorb21hcF91ZGNfaXNvX2lycShpbnQgaXJxLCB2b2lkICpfZGV2LCBzdHJ1Y3QgcHRfcmVncyAqcikKK3sKKwlzdHJ1Y3Qgb21hcF91ZGMJKnVkYyA9IF9kZXY7CisJc3RydWN0IG9tYXBfZXAJKmVwOworCWludAkJcGVuZGluZyA9IDA7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKworCS8qIGhhbmRsZSBhbGwgbm9uLURNQSBJU08gdHJhbnNmZXJzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeSAoZXAsICZ1ZGMtPmlzbywgaXNvKSB7CisJCXUxNgkJc3RhdDsKKwkJc3RydWN0IG9tYXBfcmVxCSpyZXE7CisKKwkJaWYgKGVwLT5oYXNfZG1hIHx8IGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCisJCQljb250aW51ZTsKKwkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IG9tYXBfcmVxLCBxdWV1ZSk7CisKKwkJdXNlX2VwKGVwLCBVRENfRVBfU0VMKTsKKwkJc3RhdCA9IFVEQ19TVEFUX0ZMR19SRUc7CisKKwkJLyogTk9URTogbGlrZSB0aGUgb3RoZXIgY29udHJvbGxlciBkcml2ZXJzLCB0aGlzIGlzbid0CisJCSAqIGN1cnJlbnRseSByZXBvcnRpbmcgbG9zdCBvciBkYW1hZ2VkIGZyYW1lcy4KKwkJICovCisJCWlmIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pIHsKKwkJCWlmIChzdGF0ICYgVURDX01JU1NfSU4pCisJCQkJLyogZG9uZShlcCwgcmVxLCAtRVBST1RPKSAqLzsKKwkJCWVsc2UKKwkJCQl3cml0ZV9maWZvKGVwLCByZXEpOworCQl9IGVsc2UgeworCQkJaW50CXN0YXR1cyA9IDA7CisKKwkJCWlmIChzdGF0ICYgVURDX05PX1JYUEFDS0VUKQorCQkJCXN0YXR1cyA9IC1FUkVNT1RFSU87CisJCQllbHNlIGlmIChzdGF0ICYgVURDX0lTT19FUlIpCisJCQkJc3RhdHVzID0gLUVJTFNFUTsKKwkJCWVsc2UgaWYgKHN0YXQgJiBVRENfREFUQV9GTFVTSCkKKwkJCQlzdGF0dXMgPSAtRU5PU1I7CisKKwkJCWlmIChzdGF0dXMpCisJCQkJLyogZG9uZShlcCwgcmVxLCBzdGF0dXMpICovOworCQkJZWxzZQorCQkJCXJlYWRfZmlmbyhlcCwgcmVxKTsKKwkJfQorCQlkZXNlbGVjdF9lcCgpOworCQkvKiA2IHdhaXQgc3RhdGVzIGJlZm9yZSBuZXh0IEVQICovCisKKwkJZXAtPmlycXMrKzsKKwkJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQkJcGVuZGluZyA9IDE7CisJfQorCWlmICghcGVuZGluZykKKwkJVURDX0lSUV9FTl9SRUcgJj0gflVEQ19TT0ZfSUU7CisJVURDX0lSUV9TUkNfUkVHID0gVURDX1NPRjsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IG9tYXBfdWRjICp1ZGM7CisKK2ludCB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlciAoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCit7CisJaW50CQlzdGF0dXMgPSAtRU5PREVWOworCXN0cnVjdCBvbWFwX2VwCSplcDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJLyogYmFzaWMgc2FuaXR5IHRlc3RzICovCisJaWYgKCF1ZGMpCisJCXJldHVybiAtRU5PREVWOworCWlmICghZHJpdmVyCisJCQkvLyBGSVhNRSBpZiBvdGcsIGNoZWNrOiAgZHJpdmVyLT5pc19vdGcKKwkJCXx8IGRyaXZlci0+c3BlZWQgPCBVU0JfU1BFRURfRlVMTAorCQkJfHwgIWRyaXZlci0+YmluZAorCQkJfHwgIWRyaXZlci0+dW5iaW5kCisJCQl8fCAhZHJpdmVyLT5zZXR1cCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJaWYgKHVkYy0+ZHJpdmVyKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIHJlc2V0IHN0YXRlICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeSAoZXAsICZ1ZGMtPmdhZGdldC5lcF9saXN0LCBlcC5lcF9saXN0KSB7CisJCWVwLT5pcnFzID0gMDsKKwkJaWYgKGVwLT5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykKKwkJCWNvbnRpbnVlOworCQl1c2VfZXAoZXAsIDApOworCQlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0hBTFQ7CisJfQorCXVkYy0+ZXAwX3BlbmRpbmcgPSAwOworCXVkYy0+ZXBbMF0uaXJxcyA9IDA7CisJdWRjLT5zb2Z0Y29ubmVjdCA9IDE7CisKKwkvKiBob29rIHVwIHRoZSBkcml2ZXIgKi8KKwlkcml2ZXItPmRyaXZlci5idXMgPSAwOworCXVkYy0+ZHJpdmVyID0gZHJpdmVyOworCXVkYy0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAmZHJpdmVyLT5kcml2ZXI7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwlzdGF0dXMgPSBkcml2ZXItPmJpbmQgKCZ1ZGMtPmdhZGdldCk7CisJaWYgKHN0YXR1cykgeworCQlEQkcoImJpbmQgdG8gJXMgLS0+ICVkXG4iLCBkcml2ZXItPmRyaXZlci5uYW1lLCBzdGF0dXMpOworCQl1ZGMtPmdhZGdldC5kZXYuZHJpdmVyID0gMDsKKwkJdWRjLT5kcml2ZXIgPSAwOworCQlnb3RvIGRvbmU7CisJfQorCURCRygiYm91bmQgdG8gZHJpdmVyICVzXG4iLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKKworCVVEQ19JUlFfU1JDX1JFRyA9IFVEQ19JUlFfU1JDX01BU0s7CisKKwkvKiBjb25uZWN0IHRvIGJ1cyB0aHJvdWdoIHRyYW5zY2VpdmVyICovCisJaWYgKHVkYy0+dHJhbnNjZWl2ZXIpIHsKKwkJc3RhdHVzID0gb3RnX3NldF9wZXJpcGhlcmFsKHVkYy0+dHJhbnNjZWl2ZXIsICZ1ZGMtPmdhZGdldCk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlFUlIoImNhbid0IGJpbmQgdG8gdHJhbnNjZWl2ZXJcbiIpOworCQkJZHJpdmVyLT51bmJpbmQgKCZ1ZGMtPmdhZGdldCk7CisJCQl1ZGMtPmdhZGdldC5kZXYuZHJpdmVyID0gMDsKKwkJCXVkYy0+ZHJpdmVyID0gMDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChjYW5fcHVsbHVwKHVkYykpCisJCQlwdWxsdXBfZW5hYmxlICh1ZGMpOworCQllbHNlCisJCQlwdWxsdXBfZGlzYWJsZSAodWRjKTsKKwl9CisKKwkvKiBib2FyZHMgdGhhdCBkb24ndCBoYXZlIFZCVVMgc2Vuc2luZyBjYW4ndCBhdXRvZ2F0ZSA0OE1IejsKKwkgKiBjYW4ndCBlbnRlciBkZWVwIHNsZWVwIHdoaWxlIGEgZ2FkZ2V0IGRyaXZlciBpcyBhY3RpdmUuCisJICovCisJaWYgKG1hY2hpbmVfaXNfb21hcF9pbm5vdmF0b3IoKSB8fCBtYWNoaW5lX2lzX29tYXBfb3NrKCkpCisJCW9tYXBfdmJ1c19zZXNzaW9uKCZ1ZGMtPmdhZGdldCwgMSk7CisKK2RvbmU6CisJcmV0dXJuIHN0YXR1czsKK30KK0VYUE9SVF9TWU1CT0wodXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIpOworCitpbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciAoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCit7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwlpbnQJCXN0YXR1cyA9IC1FTk9ERVY7CisKKwlpZiAoIXVkYykKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFkcml2ZXIgfHwgZHJpdmVyICE9IHVkYy0+ZHJpdmVyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChtYWNoaW5lX2lzX29tYXBfaW5ub3ZhdG9yKCkgfHwgbWFjaGluZV9pc19vbWFwX29zaygpKQorCQlvbWFwX3ZidXNfc2Vzc2lvbigmdWRjLT5nYWRnZXQsIDApOworCisJaWYgKHVkYy0+dHJhbnNjZWl2ZXIpCisJCSh2b2lkKSBvdGdfc2V0X3BlcmlwaGVyYWwodWRjLT50cmFuc2NlaXZlciwgMCk7CisJZWxzZQorCQlwdWxsdXBfZGlzYWJsZSh1ZGMpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCXVkY19xdWllc2NlKHVkYyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwlkcml2ZXItPnVuYmluZCgmdWRjLT5nYWRnZXQpOworCXVkYy0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAwOworCXVkYy0+ZHJpdmVyID0gMDsKKworCisJREJHKCJ1bnJlZ2lzdGVyZWQgZHJpdmVyICclcydcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworCXJldHVybiBzdGF0dXM7Cit9CitFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUworCisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgcHJvY19maWxlbmFtZVtdID0gImRyaXZlci91ZGMiOworCisjZGVmaW5lIEZPVVJCSVRTICIlcyVzJXMlcyIKKyNkZWZpbmUgRUlHSFRCSVRTIEZPVVJCSVRTIEZPVVJCSVRTCisKK3N0YXRpYyB2b2lkIHByb2NfZXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBvbWFwX2VwICplcCkKK3sKKwl1MTYJCXN0YXRfZmxnOworCXN0cnVjdCBvbWFwX3JlcQkqcmVxOworCWNoYXIJCWJ1ZlsyMF07CisKKwl1c2VfZXAoZXAsIDApOworCisJaWYgKHVzZV9kbWEgJiYgZXAtPmhhc19kbWEpCisJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIiglY3hkbWElZCBsY2glZCkgIiwKKwkJCShlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pID8gJ3QnIDogJ3InLAorCQkJZXAtPmRtYV9jaGFubmVsIC0gMSwgZXAtPmxjaCk7CisJZWxzZQorCQlidWZbMF0gPSAwOworCisJc3RhdF9mbGcgPSBVRENfU1RBVF9GTEdfUkVHOworCXNlcV9wcmludGYocywKKwkJIlxuJXMgJXMlcyVzaXJxcyAlbGQgc3RhdCAlMDR4ICIgRUlHSFRCSVRTIEZPVVJCSVRTICIlc1xuIiwKKwkJZXAtPm5hbWUsIGJ1ZiwKKwkJZXAtPmRvdWJsZV9idWYgPyAiZGJ1ZiAiIDogIiIsCisJCSh7Y2hhciAqczsgc3dpdGNoKGVwLT5hY2t3YWl0KXsKKwkJY2FzZSAwOiBzID0gIiI7IGJyZWFrOworCQljYXNlIDE6IHMgPSAiKGFja3cpICI7IGJyZWFrOworCQljYXNlIDI6IHMgPSAiKGFja3cyKSAiOyBicmVhazsKKwkJZGVmYXVsdDogcyA9ICIoPykgIjsgYnJlYWs7CisJCX0gczt9KSwKKwkJZXAtPmlycXMsIHN0YXRfZmxnLAorCQkoc3RhdF9mbGcgJiBVRENfTk9fUlhQQUNLRVQpID8gIm5vX3J4cGFja2V0ICIgOiAiIiwKKwkJKHN0YXRfZmxnICYgVURDX01JU1NfSU4pID8gIm1pc3NfaW4gIiA6ICIiLAorCQkoc3RhdF9mbGcgJiBVRENfREFUQV9GTFVTSCkgPyAiZGF0YV9mbHVzaCAiIDogIiIsCisJCShzdGF0X2ZsZyAmIFVEQ19JU09fRVJSKSA/ICJpc29fZXJyICIgOiAiIiwKKwkJKHN0YXRfZmxnICYgVURDX0lTT19GSUZPX0VNUFRZKSA/ICJpc29fZmlmb19lbXB0eSAiIDogIiIsCisJCShzdGF0X2ZsZyAmIFVEQ19JU09fRklGT19GVUxMKSA/ICJpc29fZmlmb19mdWxsICIgOiAiIiwKKwkJKHN0YXRfZmxnICYgVURDX0VQX0hBTFRFRCkgPyAiSEFMVCAiIDogIiIsCisJCShzdGF0X2ZsZyAmIFVEQ19TVEFMTCkgPyAiU1RBTEwgIiA6ICIiLAorCQkoc3RhdF9mbGcgJiBVRENfTkFLKSA/ICJOQUsgIiA6ICIiLAorCQkoc3RhdF9mbGcgJiBVRENfQUNLKSA/ICJBQ0sgIiA6ICIiLAorCQkoc3RhdF9mbGcgJiBVRENfRklGT19FTikgPyAiZmlmb19lbiAiIDogIiIsCisJCShzdGF0X2ZsZyAmIFVEQ19OT05fSVNPX0ZJRk9fRU1QVFkpID8gImZpZm9fZW1wdHkgIiA6ICIiLAorCQkoc3RhdF9mbGcgJiBVRENfTk9OX0lTT19GSUZPX0ZVTEwpID8gImZpZm9fZnVsbCAiIDogIiIpOworCisJaWYgKGxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKQorCQlzZXFfcHJpbnRmKHMsICJcdChxdWV1ZSBlbXB0eSlcbiIpOworCWVsc2UKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSAocmVxLCAmZXAtPnF1ZXVlLCBxdWV1ZSkgeworCQkJdW5zaWduZWQJbGVuZ3RoID0gcmVxLT5yZXEuYWN0dWFsOworCisJCQlpZiAodXNlX2RtYSAmJiBidWZbMF0pIHsKKwkJCQlsZW5ndGggKz0gKChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pCisJCQkJCQk/IGRtYV9zcmNfbGVuIDogZG1hX2Rlc3RfbGVuKQorCQkJCQkoZXAsIHJlcS0+cmVxLmRtYSArIGxlbmd0aCk7CisJCQkJYnVmWzBdID0gMDsKKwkJCX0KKwkJCXNlcV9wcmludGYocywgIlx0cmVxICVwIGxlbiAlZC8lZCBidWYgJXBcbiIsCisJCQkJCSZyZXEtPnJlcSwgbGVuZ3RoLAorCQkJCQlyZXEtPnJlcS5sZW5ndGgsIHJlcS0+cmVxLmJ1Zik7CisJCX0KK30KKworc3RhdGljIGNoYXIgKnRyeF9tb2RlKHVuc2lnbmVkIG0sIGludCBlbmFibGVkKQoreworCXN3aXRjaCAobSkgeworCWNhc2UgMDoJCXJldHVybiBlbmFibGVkID8gIio2d2lyZSIgOiAidW51c2VkIjsKKwljYXNlIDE6CQlyZXR1cm4gIjR3aXJlIjsKKwljYXNlIDI6CQlyZXR1cm4gIjN3aXJlIjsKKwljYXNlIDM6IAlyZXR1cm4gIjZ3aXJlIjsKKwlkZWZhdWx0OglyZXR1cm4gInVua25vd24iOworCX0KK30KKworc3RhdGljIGludCBwcm9jX290Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcykKK3sKKwl1MzIJCXRtcDsKKwl1MzIJCXRyYW5zOworCisJdG1wID0gT1RHX1JFVl9SRUc7CisJdHJhbnMgPSBVU0JfVFJBTlNDRUlWRVJfQ1RSTF9SRUc7CisJc2VxX3ByaW50ZihzLCAiT1RHIHJldiAlZC4lZCwgdHJhbnNjZWl2ZXJfY3RybCAlMDN4XG4iLAorCQl0bXAgPj4gNCwgdG1wICYgMHhmLCB0cmFucyk7CisJdG1wID0gT1RHX1NZU0NPTl8xX1JFRzsKKwlzZXFfcHJpbnRmKHMsICJvdGdfc3lzY29uMSAlMDh4IHVzYjIgJXMsIHVzYjEgJXMsIHVzYjAgJXMsIgorCQkJRk9VUkJJVFMgIlxuIiwgdG1wLAorCQl0cnhfbW9kZShVU0IyX1RSWF9NT0RFKHRtcCksIHRyYW5zICYgQ09ORl9VU0IyX1VOSV9SKSwKKwkJdHJ4X21vZGUoVVNCMV9UUlhfTU9ERSh0bXApLCB0cmFucyAmIENPTkZfVVNCMV9VTklfUiksCisJCShVU0IwX1RSWF9NT0RFKHRtcCkgPT0gMCkKKwkJCT8gImludGVybmFsIgorCQkJOiB0cnhfbW9kZShVU0IwX1RSWF9NT0RFKHRtcCksIDEpLAorCQkodG1wICYgT1RHX0lETEVfRU4pID8gIiAhb3RnIiA6ICIiLAorCQkodG1wICYgSFNUX0lETEVfRU4pID8gIiAhaG9zdCIgOiAiIiwKKwkJKHRtcCAmIERFVl9JRExFX0VOKSA/ICIgIWRldiIgOiAiIiwKKwkJKHRtcCAmIE9UR19SRVNFVF9ET05FKSA/ICIgcmVzZXRfZG9uZSIgOiAiIHJlc2V0X2FjdGl2ZSIpOworCXRtcCA9IE9UR19TWVNDT05fMl9SRUc7CisJc2VxX3ByaW50ZihzLCAib3RnX3N5c2NvbjIgJTA4eCVzIiBFSUdIVEJJVFMKKwkJCSIgYl9hc2VfYnJzdD0lZCBobWM9JWRcbiIsIHRtcCwKKwkJKHRtcCAmIE9UR19FTikgPyAiIG90Z19lbiIgOiAiIiwKKwkJKHRtcCAmIFVTQlhfU1lOQ0hSTykgPyAiIHN5bmNocm8iIDogIiIsCisJCS8vIG11Y2ggbW9yZSBTUlAgc3R1ZmYKKwkJKHRtcCAmIFNSUF9EQVRBKSA/ICIgc3JwX2RhdGEiIDogIiIsCisJCSh0bXAgJiBTUlBfVkJVUykgPyAiIHNycF92YnVzIiA6ICIiLAorCQkodG1wICYgT1RHX1BBREVOKSA/ICIgb3RnX3BhZGVuIiA6ICIiLAorCQkodG1wICYgSE1DX1BBREVOKSA/ICIgaG1jX3BhZGVuIiA6ICIiLAorCQkodG1wICYgVUhPU1RfRU4pID8gIiB1aG9zdF9lbiIgOiAiIiwKKwkJKHRtcCAmIEhNQ19UTExTUEVFRCkgPyAiIHRsbHNwZWVkIiA6ICIiLAorCQkodG1wICYgSE1DX1RMTEFUVEFDSCkgPyAiIHRsbGF0dGFjaCIgOiAiIiwKKwkJQl9BU0VfQlJTVCh0bXApLAorCQlPVEdfSE1DKHRtcCkpOworCXRtcCA9IE9UR19DVFJMX1JFRzsKKwlzZXFfcHJpbnRmKHMsICJvdGdfY3RybCAgICAlMDZ4IiBFSUdIVEJJVFMgRUlHSFRCSVRTICIlc1xuIiwgdG1wLAorCQkodG1wICYgT1RHX0FTRVNTVkxEKSA/ICIgYXNlc3MiIDogIiIsCisJCSh0bXAgJiBPVEdfQlNFU1NFTkQpID8gIiBic2Vzc19lbmQiIDogIiIsCisJCSh0bXAgJiBPVEdfQlNFU1NWTEQpID8gIiBic2VzcyIgOiAiIiwKKwkJKHRtcCAmIE9UR19WQlVTVkxEKSA/ICIgdmJ1cyIgOiAiIiwKKwkJKHRtcCAmIE9UR19JRCkgPyAiIGlkIiA6ICIiLAorCQkodG1wICYgT1RHX0RSSVZFUl9TRUwpID8gIiBERVZJQ0UiIDogIiBIT1NUIiwKKwkJKHRtcCAmIE9UR19BX1NFVEJfSE5QRU4pID8gIiBhX3NldGJfaG5wZW4iIDogIiIsCisJCSh0bXAgJiBPVEdfQV9CVVNSRVEpID8gIiBhX2J1cyIgOiAiIiwKKwkJKHRtcCAmIE9UR19CX0hOUEVOKSA/ICIgYl9obnBlbiIgOiAiIiwKKwkJKHRtcCAmIE9UR19CX0JVU1JFUSkgPyAiIGJfYnVzIiA6ICIiLAorCQkodG1wICYgT1RHX0JVU0RST1ApID8gIiBidXNkcm9wIiA6ICIiLAorCQkodG1wICYgT1RHX1BVTExET1dOKSA/ICIgZG93biIgOiAiIiwKKwkJKHRtcCAmIE9UR19QVUxMVVApID8gIiB1cCIgOiAiIiwKKwkJKHRtcCAmIE9UR19EUlZfVkJVUykgPyAiIGRydiIgOiAiIiwKKwkJKHRtcCAmIE9UR19QRF9WQlVTKSA/ICIgcGRfdmIiIDogIiIsCisJCSh0bXAgJiBPVEdfUFVfVkJVUykgPyAiIHB1X3ZiIiA6ICIiLAorCQkodG1wICYgT1RHX1BVX0lEKSA/ICIgcHVfaWQiIDogIiIKKwkJKTsKKwl0bXAgPSBPVEdfSVJRX0VOX1JFRzsKKwlzZXFfcHJpbnRmKHMsICJvdGdfaXJxX2VuICAlMDR4IiAiXG4iLCB0bXApOworCXRtcCA9IE9UR19JUlFfU1JDX1JFRzsKKwlzZXFfcHJpbnRmKHMsICJvdGdfaXJxX3NyYyAlMDR4IiAiXG4iLCB0bXApOworCXRtcCA9IE9UR19PVVRDVFJMX1JFRzsKKwlzZXFfcHJpbnRmKHMsICJvdGdfb3V0Y3RybCAlMDR4IiAiXG4iLCB0bXApOworCXRtcCA9IE9UR19URVNUX1JFRzsKKwlzZXFfcHJpbnRmKHMsICJvdGdfdGVzdCAgICAlMDR4IiAiXG4iLCB0bXApOworfQorCitzdGF0aWMgaW50IHByb2NfdWRjX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpfKQoreworCXUzMgkJdG1wOworCXN0cnVjdCBvbWFwX2VwCSplcDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJc2VxX3ByaW50ZihzLCAiJXMsIHZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04KKyNpZmRlZglVU0VfSVNPCisJCSIgKGlzbykiCisjZW5kaWYKKwkJIiVzXG4iLAorCQlkcml2ZXJfZGVzYywKKwkJdXNlX2RtYSA/ICAiIChkbWEpIiA6ICIiKTsKKworCXRtcCA9IFVEQ19SRVZfUkVHICYgMHhmZjsgCisJc2VxX3ByaW50ZihzLAorCQkiVURDIHJldiAlZC4lZCwgZmlmbyBtb2RlICVkLCBnYWRnZXQgJXNcbiIKKwkJImhtYyAlZCwgdHJhbnNjZWl2ZXIgJXNcbiIsCisJCXRtcCA+PiA0LCB0bXAgJiAweGYsCisJCWZpZm9fbW9kZSwKKwkJdWRjLT5kcml2ZXIgPyB1ZGMtPmRyaXZlci0+ZHJpdmVyLm5hbWUgOiAiKG5vbmUpIiwKKwkJSE1DLAorCQl1ZGMtPnRyYW5zY2VpdmVyID8gdWRjLT50cmFuc2NlaXZlci0+bGFiZWwgOiAiKG5vbmUpIik7CisJc2VxX3ByaW50ZihzLCAiVUxQRCBjb250cm9sICUwNHggcmVxICUwNHggc3RhdHVzICUwNHhcbiIsCisJCV9fUkVHMTYoVUxQRF9DTE9DS19DVFJMKSwKKwkJX19SRUcxNihVTFBEX1NPRlRfUkVRKSwKKwkJX19SRUcxNihVTFBEX1NUQVRVU19SRVEpKTsKKworCS8qIE9URyBjb250cm9sbGVyIHJlZ2lzdGVycyAqLworCWlmICghY3B1X2lzX29tYXAxNXh4KCkpCisJCXByb2Nfb3RnX3Nob3cocyk7CisKKwl0bXAgPSBVRENfU1lTQ09OMV9SRUc7CisJc2VxX3ByaW50ZihzLCAiXG5zeXNjb24xICAgICAlMDR4IiBFSUdIVEJJVFMgIlxuIiwgdG1wLAorCQkodG1wICYgVURDX0NGR19MT0NLKSA/ICIgY2ZnX2xvY2siIDogIiIsCisJCSh0bXAgJiBVRENfREFUQV9FTkRJQU4pID8gIiBkYXRhX2VuZGlhbiIgOiAiIiwKKwkJKHRtcCAmIFVEQ19ETUFfRU5ESUFOKSA/ICIgZG1hX2VuZGlhbiIgOiAiIiwKKwkJKHRtcCAmIFVEQ19OQUtfRU4pID8gIiBuYWsiIDogIiIsCisJCSh0bXAgJiBVRENfQVVUT0RFQ09ERV9ESVMpID8gIiBhdXRvZGVjb2RlX2RpcyIgOiAiIiwKKwkJKHRtcCAmIFVEQ19TRUxGX1BXUikgPyAiIHNlbGZfcHdyIiA6ICIiLAorCQkodG1wICYgVURDX1NPRkZfRElTKSA/ICIgc29mZl9kaXMiIDogIiIsCisJCSh0bXAgJiBVRENfUFVMTFVQX0VOKSA/ICIgUFVMTFVQIiA6ICIiKTsKKwkvLyBzeXNjb24yIGlzIHdyaXRlLW9ubHkKKworCS8qIFVEQyBjb250cm9sbGVyIHJlZ2lzdGVycyAqLworCWlmICghKHRtcCAmIFVEQ19QVUxMVVBfRU4pKSB7CisJCXNlcV9wcmludGYocywgIihzdXNwZW5kZWQpXG4iKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCXRtcCA9IFVEQ19ERVZTVEFUX1JFRzsKKwlzZXFfcHJpbnRmKHMsICJkZXZzdGF0ICAgICAlMDR4IiBFSUdIVEJJVFMgIiVzJXNcbiIsIHRtcCwKKwkJKHRtcCAmIFVEQ19CX0hOUF9FTkFCTEUpID8gIiBiX2hucCIgOiAiIiwKKwkJKHRtcCAmIFVEQ19BX0hOUF9TVVBQT1JUKSA/ICIgYV9obnAiIDogIiIsCisJCSh0bXAgJiBVRENfQV9BTFRfSE5QX1NVUFBPUlQpID8gIiBhX2FsdF9obnAiIDogIiIsCisJCSh0bXAgJiBVRENfUl9XS19PSykgPyAiIHJfd2tfb2siIDogIiIsCisJCSh0bXAgJiBVRENfVVNCX1JFU0VUKSA/ICIgdXNiX3Jlc2V0IiA6ICIiLAorCQkodG1wICYgVURDX1NVUykgPyAiIFNVUyIgOiAiIiwKKwkJKHRtcCAmIFVEQ19DRkcpID8gIiBDRkciIDogIiIsCisJCSh0bXAgJiBVRENfQUREKSA/ICIgQUREIiA6ICIiLAorCQkodG1wICYgVURDX0RFRikgPyAiIERFRiIgOiAiIiwKKwkJKHRtcCAmIFVEQ19BVFQpID8gIiBBVFQiIDogIiIpOworCXNlcV9wcmludGYocywgInNvZiAgICAgICAgICUwNHhcbiIsIFVEQ19TT0ZfUkVHKTsKKwl0bXAgPSBVRENfSVJRX0VOX1JFRzsKKwlzZXFfcHJpbnRmKHMsICJpcnFfZW4gICAgICAlMDR4IiBGT1VSQklUUyAiJXNcbiIsIHRtcCwKKwkJKHRtcCAmIFVEQ19TT0ZfSUUpID8gIiBzb2YiIDogIiIsCisJCSh0bXAgJiBVRENfRVBOX1JYX0lFKSA/ICIgZXBuX3J4IiA6ICIiLAorCQkodG1wICYgVURDX0VQTl9UWF9JRSkgPyAiIGVwbl90eCIgOiAiIiwKKwkJKHRtcCAmIFVEQ19EU19DSEdfSUUpID8gIiBkc19jaGciIDogIiIsCisJCSh0bXAgJiBVRENfRVAwX0lFKSA/ICIgZXAwIiA6ICIiKTsKKwl0bXAgPSBVRENfSVJRX1NSQ19SRUc7CisJc2VxX3ByaW50ZihzLCAiaXJxX3NyYyAgICAgJTA0eCIgRUlHSFRCSVRTICIlcyVzXG4iLCB0bXAsCisJCSh0bXAgJiBVRENfVFhOX0RPTkUpID8gIiB0eG5fZG9uZSIgOiAiIiwKKwkJKHRtcCAmIFVEQ19SWE5fQ05UKSA/ICIgcnhuX2NudCIgOiAiIiwKKwkJKHRtcCAmIFVEQ19SWE5fRU9UKSA/ICIgcnhuX2VvdCIgOiAiIiwKKwkJKHRtcCAmIFVEQ19TT0YpID8gIiBzb2YiIDogIiIsCisJCSh0bXAgJiBVRENfRVBOX1JYKSA/ICIgZXBuX3J4IiA6ICIiLAorCQkodG1wICYgVURDX0VQTl9UWCkgPyAiIGVwbl90eCIgOiAiIiwKKwkJKHRtcCAmIFVEQ19EU19DSEcpID8gIiBkc19jaGciIDogIiIsCisJCSh0bXAgJiBVRENfU0VUVVApID8gIiBzZXR1cCIgOiAiIiwKKwkJKHRtcCAmIFVEQ19FUDBfUlgpID8gIiBlcDBvdXQiIDogIiIsCisJCSh0bXAgJiBVRENfRVAwX1RYKSA/ICIgZXAwaW4iIDogIiIpOworCWlmICh1c2VfZG1hKSB7CisJCXVuc2lnbmVkIGk7CisKKwkJdG1wID0gVURDX0RNQV9JUlFfRU5fUkVHOworCQlzZXFfcHJpbnRmKHMsICJkbWFfaXJxX2VuICAlMDR4JXMiIEVJR0hUQklUUyAiXG4iLCB0bXAsCisJCQkodG1wICYgVURDX1RYX0RPTkVfSUUoMykpID8gIiB0eDJfZG9uZSIgOiAiIiwKKwkJCSh0bXAgJiBVRENfUlhfQ05UX0lFKDMpKSA/ICIgcngyX2NudCIgOiAiIiwKKwkJCSh0bXAgJiBVRENfUlhfRU9UX0lFKDMpKSA/ICIgcngyX2VvdCIgOiAiIiwKKworCQkJKHRtcCAmIFVEQ19UWF9ET05FX0lFKDIpKSA/ICIgdHgxX2RvbmUiIDogIiIsCisJCQkodG1wICYgVURDX1JYX0NOVF9JRSgyKSkgPyAiIHJ4MV9jbnQiIDogIiIsCisJCQkodG1wICYgVURDX1JYX0VPVF9JRSgyKSkgPyAiIHJ4MV9lb3QiIDogIiIsCisKKwkJCSh0bXAgJiBVRENfVFhfRE9ORV9JRSgxKSkgPyAiIHR4MF9kb25lIiA6ICIiLAorCQkJKHRtcCAmIFVEQ19SWF9DTlRfSUUoMSkpID8gIiByeDBfY250IiA6ICIiLAorCQkJKHRtcCAmIFVEQ19SWF9FT1RfSUUoMSkpID8gIiByeDBfZW90IiA6ICIiKTsKKworCQl0bXAgPSBVRENfUlhETUFfQ0ZHX1JFRzsKKwkJc2VxX3ByaW50ZihzLCAicnhkbWFfY2ZnICAgJTA0eFxuIiwgdG1wKTsKKwkJaWYgKHRtcCkgeworCQkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJCWlmICgodG1wICYgKDB4MGYgPDwgKGkgKiA0KSkpID09IDApCisJCQkJCWNvbnRpbnVlOworCQkJCXNlcV9wcmludGYocywgInJ4ZG1hWyVkXSAgICAlMDR4XG4iLCBpLAorCQkJCQkJVURDX1JYRE1BX1JFRyhpICsgMSkpOworCQkJfQorCQl9CisJCXRtcCA9IFVEQ19UWERNQV9DRkdfUkVHOworCQlzZXFfcHJpbnRmKHMsICJ0eGRtYV9jZmcgICAlMDR4XG4iLCB0bXApOworCQlpZiAodG1wKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQkJaWYgKCEodG1wICYgKDB4MGYgPDwgKGkgKiA0KSkpKQorCQkJCQljb250aW51ZTsKKwkJCQlzZXFfcHJpbnRmKHMsICJ0eGRtYVslZF0gICAgJTA0eFxuIiwgaSwKKwkJCQkJCVVEQ19UWERNQV9SRUcoaSArIDEpKTsKKwkJCX0KKwkJfQorCX0KKworCXRtcCA9IFVEQ19ERVZTVEFUX1JFRzsKKwlpZiAodG1wICYgVURDX0FUVCkgeworCQlwcm9jX2VwX3Nob3cocywgJnVkYy0+ZXBbMF0pOworCQlpZiAodG1wICYgVURDX0FERCkgeworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeSAoZXAsICZ1ZGMtPmdhZGdldC5lcF9saXN0LAorCQkJCQllcC5lcF9saXN0KSB7CisJCQkJaWYgKGVwLT5kZXNjKQorCQkJCQlwcm9jX2VwX3Nob3cocywgZXApOworCQkJfQorCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2NfdWRjX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHByb2NfdWRjX3Nob3csIDApOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX29wcyA9IHsKKwkub3BlbgkJPSBwcm9jX3VkY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgdm9pZCBjcmVhdGVfcHJvY19maWxlKHZvaWQpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGU7CisKKwlwZGUgPSBjcmVhdGVfcHJvY19lbnRyeSAocHJvY19maWxlbmFtZSwgMCwgTlVMTCk7CisJaWYgKHBkZSkKKwkJcGRlLT5wcm9jX2ZvcHMgPSAmcHJvY19vcHM7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9wcm9jX2ZpbGUodm9pZCkKK3sKKwlyZW1vdmVfcHJvY19lbnRyeShwcm9jX2ZpbGVuYW1lLCAwKTsKK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIGNyZWF0ZV9wcm9jX2ZpbGUodm9pZCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfcHJvY19maWxlKHZvaWQpIHt9CisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBCZWZvcmUgdGhpcyBjb250cm9sbGVyIGNhbiBlbnVtZXJhdGUsIHdlIG5lZWQgdG8gcGljayBhbiBlbmRwb2ludAorICogY29uZmlndXJhdGlvbiwgb3IgImZpZm9fbW9kZSIgIFRoYXQgaW52b2x2ZXMgYWxsb2NhdGluZyAyS0Igb2YgcGFja2V0CisgKiBidWZmZXIgc3BhY2UgYW1vbmcgdGhlIGVuZHBvaW50cyB3ZSdsbCBiZSBvcGVyYXRpbmcuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBfX2luaXQKK29tYXBfZXBfc2V0dXAoY2hhciAqbmFtZSwgdTggYWRkciwgdTggdHlwZSwKKwkJdW5zaWduZWQgYnVmLCB1bnNpZ25lZCBtYXhwLCBpbnQgZGJ1ZikKK3sKKwlzdHJ1Y3Qgb21hcF9lcAkqZXA7CisJdTE2CQllcG5fcnh0eCA9IDA7CisKKwkvKiBPVVQgZW5kcG9pbnRzIGZpcnN0LCB0aGVuIElOICovCisJZXAgPSAmdWRjLT5lcFthZGRyICYgMHhmXTsKKwlpZiAoYWRkciAmIFVTQl9ESVJfSU4pCisJCWVwICs9IDE2OworCisJLyogaW4gY2FzZSBvZiBlcCBpbml0IHRhYmxlIGJ1Z3MgKi8KKwlCVUdfT04oZXAtPm5hbWVbMF0pOworCisJLyogY2hpcCBzZXR1cCAuLi4gYml0IHZhbHVlcyBhcmUgc2FtZSBmb3IgSU4sIE9VVCAqLworCWlmICh0eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpIHsKKwkJc3dpdGNoIChtYXhwKSB7CisJCWNhc2UgODoJCWVwbl9yeHR4ID0gMCA8PCAxMjsgYnJlYWs7CisJCWNhc2UgMTY6CWVwbl9yeHR4ID0gMSA8PCAxMjsgYnJlYWs7CisJCWNhc2UgMzI6CWVwbl9yeHR4ID0gMiA8PCAxMjsgYnJlYWs7CisJCWNhc2UgNjQ6CWVwbl9yeHR4ID0gMyA8PCAxMjsgYnJlYWs7CisJCWNhc2UgMTI4OgllcG5fcnh0eCA9IDQgPDwgMTI7IGJyZWFrOworCQljYXNlIDI1NjoJZXBuX3J4dHggPSA1IDw8IDEyOyBicmVhazsKKwkJY2FzZSA1MTI6CWVwbl9yeHR4ID0gNiA8PCAxMjsgYnJlYWs7CisJCWRlZmF1bHQ6CUJVRygpOworCQl9CisJCWVwbl9yeHR4IHw9IFVEQ19FUE5fUlhfSVNPOworCQlkYnVmID0gMTsKKwl9IGVsc2UgeworCQkvKiBkb3VibGUtYnVmZmVyaW5nICJub3Qgc3VwcG9ydGVkIiBvbiAxNXh4LAorCQkgKiBhbmQgaWdub3JlZCBmb3IgUElPLUlOIG9uIDE2eHgKKwkJICovCisJCWlmICghdXNlX2RtYSB8fCBjcHVfaXNfb21hcDE1eHgoKSkKKwkJCWRidWYgPSAwOworCisJCXN3aXRjaCAobWF4cCkgeworCQljYXNlIDg6CQllcG5fcnh0eCA9IDAgPDwgMTI7IGJyZWFrOworCQljYXNlIDE2OgllcG5fcnh0eCA9IDEgPDwgMTI7IGJyZWFrOworCQljYXNlIDMyOgllcG5fcnh0eCA9IDIgPDwgMTI7IGJyZWFrOworCQljYXNlIDY0OgllcG5fcnh0eCA9IDMgPDwgMTI7IGJyZWFrOworCQlkZWZhdWx0OglCVUcoKTsKKwkJfQorCQlpZiAoZGJ1ZiAmJiBhZGRyKQorCQkJZXBuX3J4dHggfD0gVURDX0VQTl9SWF9EQjsKKwkJaW5pdF90aW1lcigmZXAtPnRpbWVyKTsKKwkJZXAtPnRpbWVyLmZ1bmN0aW9uID0gcGlvX291dF90aW1lcjsKKwkJZXAtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgZXA7CisJfQorCWlmIChhZGRyKQorCQllcG5fcnh0eCB8PSBVRENfRVBOX1JYX1ZBTElEOworCUJVR19PTihidWYgJiAweDA3KTsKKwllcG5fcnh0eCB8PSBidWYgPj4gMzsKKworCURCRygiJXMgYWRkciAlMDJ4IHJ4dHggJTA0eCBtYXhwICVkJXMgYnVmICVkXG4iLAorCQluYW1lLCBhZGRyLCBlcG5fcnh0eCwgbWF4cCwgZGJ1ZiA/ICJ4MiIgOiAiIiwgYnVmKTsKKworCWlmIChhZGRyICYgVVNCX0RJUl9JTikKKwkJVURDX0VQX1RYX1JFRyhhZGRyICYgMHhmKSA9IGVwbl9yeHR4OworCWVsc2UKKwkJVURDX0VQX1JYX1JFRyhhZGRyKSA9IGVwbl9yeHR4OworCisJLyogbmV4dCBlbmRwb2ludCdzIGJ1ZmZlciBzdGFydHMgYWZ0ZXIgdGhpcyBvbmUncyAqLworCWJ1ZiArPSBtYXhwOworCWlmIChkYnVmKQorCQlidWYgKz0gbWF4cDsKKwlCVUdfT04oYnVmID4gMjA0OCk7CisKKwkvKiBzZXQgdXAgZHJpdmVyIGRhdGEgc3RydWN0dXJlcyAqLworCUJVR19PTihzdHJsZW4obmFtZSkgPj0gc2l6ZW9mIGVwLT5uYW1lKTsKKwlzdHJsY3B5KGVwLT5uYW1lLCBuYW1lLCBzaXplb2YgZXAtPm5hbWUpOworCUlOSVRfTElTVF9IRUFEKCZlcC0+cXVldWUpOworCUlOSVRfTElTVF9IRUFEKCZlcC0+aXNvKTsKKwllcC0+YkVuZHBvaW50QWRkcmVzcyA9IGFkZHI7CisJZXAtPmJtQXR0cmlidXRlcyA9IHR5cGU7CisJZXAtPmRvdWJsZV9idWYgPSBkYnVmOworCWVwLT51ZGMgPSB1ZGM7IAorCisJZXAtPmVwLm5hbWUgPSBlcC0+bmFtZTsKKwllcC0+ZXAub3BzID0gJm9tYXBfZXBfb3BzOworCWVwLT5lcC5tYXhwYWNrZXQgPSBlcC0+bWF4cGFja2V0ID0gbWF4cDsKKwlsaXN0X2FkZF90YWlsICgmZXAtPmVwLmVwX2xpc3QsICZ1ZGMtPmdhZGdldC5lcF9saXN0KTsKKworCXJldHVybiBidWY7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfdWRjX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCWNvbXBsZXRlKHVkYy0+ZG9uZSk7CisJa2ZyZWUgKHVkYyk7CisJdWRjID0gMDsKK30KKworc3RhdGljIGludCBfX2luaXQKK29tYXBfdWRjX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9kZXYsIHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKnhjZWl2KQoreworCXVuc2lnbmVkCXRtcCwgYnVmOworCisJLyogYWJvbGlzaCBhbnkgcHJldmlvdXMgaGFyZHdhcmUgc3RhdGUgKi8KKwlVRENfU1lTQ09OMV9SRUcgPSAwOworCVVEQ19JUlFfRU5fUkVHID0gMDsKKwlVRENfSVJRX1NSQ19SRUcgPSBVRENfSVJRX1NSQ19NQVNLOworCVVEQ19ETUFfSVJRX0VOX1JFRyA9IDA7CisJVURDX1JYRE1BX0NGR19SRUcgPSAwOworCVVEQ19UWERNQV9DRkdfUkVHID0gMDsKKworCS8qIFVEQ19QVUxMVVBfRU4gZ2F0ZXMgdGhlIGNoaXAgY2xvY2sgKi8KKwkvLyBPVEdfU1lTQ09OXzFfUkVHIHw9IERFVl9JRExFX0VOOworCisJdWRjID0ga21hbGxvYyAoc2l6ZW9mICp1ZGMsIFNMQUJfS0VSTkVMKTsKKwlpZiAoIXVkYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQodWRjLCAwLCBzaXplb2YgKnVkYyk7CisJc3Bpbl9sb2NrX2luaXQgKCZ1ZGMtPmxvY2spOworCisJdWRjLT5nYWRnZXQub3BzID0gJm9tYXBfZ2FkZ2V0X29wczsKKwl1ZGMtPmdhZGdldC5lcDAgPSAmdWRjLT5lcFswXS5lcDsKKwlJTklUX0xJU1RfSEVBRCgmdWRjLT5nYWRnZXQuZXBfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnVkYy0+aXNvKTsKKwl1ZGMtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCXVkYy0+Z2FkZ2V0Lm5hbWUgPSBkcml2ZXJfbmFtZTsKKworCWRldmljZV9pbml0aWFsaXplKCZ1ZGMtPmdhZGdldC5kZXYpOworCXN0cmNweSAodWRjLT5nYWRnZXQuZGV2LmJ1c19pZCwgImdhZGdldCIpOworCXVkYy0+Z2FkZ2V0LmRldi5yZWxlYXNlID0gb21hcF91ZGNfcmVsZWFzZTsKKwl1ZGMtPmdhZGdldC5kZXYucGFyZW50ID0gJm9kZXYtPmRldjsKKwlpZiAodXNlX2RtYSkKKwkJdWRjLT5nYWRnZXQuZGV2LmRtYV9tYXNrID0gb2Rldi0+ZGV2LmRtYV9tYXNrOworCisJdWRjLT50cmFuc2NlaXZlciA9IHhjZWl2OworCisJLyogZXAwIGlzIHNwZWNpYWw7IHB1dCBpdCByaWdodCBhZnRlciB0aGUgU0VUVVAgYnVmZmVyICovCisJYnVmID0gb21hcF9lcF9zZXR1cCgiZXAwIiwgMCwgVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCwKKwkJCTggLyogYWZ0ZXIgU0VUVVAgKi8sIDY0IC8qIG1heHBhY2tldCAqLywgMCk7CisJbGlzdF9kZWxfaW5pdCgmdWRjLT5lcFswXS5lcC5lcF9saXN0KTsKKworCS8qIGluaXRpYWxseSBkaXNhYmxlIGFsbCBub24tZXAwIGVuZHBvaW50cyAqLworCWZvciAodG1wID0gMTsgdG1wIDwgMTU7IHRtcCsrKSB7CisJCVVEQ19FUF9SWF9SRUcodG1wKSA9IDA7CisJCVVEQ19FUF9UWF9SRUcodG1wKSA9IDA7CisJfQorCisjZGVmaW5lIE9NQVBfQlVMS19FUChuYW1lLGFkZHIpIFwKKwlidWYgPSBvbWFwX2VwX3NldHVwKG5hbWUgIi1idWxrIiwgYWRkciwgXAorCQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywgYnVmLCA2NCwgMSk7CisjZGVmaW5lIE9NQVBfSU5UX0VQKG5hbWUsYWRkciwgbWF4cCkgXAorCWJ1ZiA9IG9tYXBfZXBfc2V0dXAobmFtZSAiLWludCIsIGFkZHIsIFwKKwkJCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwgYnVmLCBtYXhwLCAwKTsKKyNkZWZpbmUgT01BUF9JU09fRVAobmFtZSxhZGRyLCBtYXhwKSBcCisJYnVmID0gb21hcF9lcF9zZXR1cChuYW1lICItaXNvIiwgYWRkciwgXAorCQkJVVNCX0VORFBPSU5UX1hGRVJfSVNPQywgYnVmLCBtYXhwLCAxKTsKKworCXN3aXRjaCAoZmlmb19tb2RlKSB7CisJY2FzZSAwOgorCQlPTUFQX0JVTEtfRVAoImVwMWluIiwgIFVTQl9ESVJfSU4gIHwgMSk7CisJCU9NQVBfQlVMS19FUCgiZXAyb3V0IiwgVVNCX0RJUl9PVVQgfCAyKTsKKwkJT01BUF9JTlRfRVAoImVwM2luIiwgICBVU0JfRElSX0lOICB8IDMsIDE2KTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlPTUFQX0JVTEtfRVAoImVwMWluIiwgIFVTQl9ESVJfSU4gIHwgMSk7CisJCU9NQVBfQlVMS19FUCgiZXAyb3V0IiwgVVNCX0RJUl9PVVQgfCAyKTsKKwkJT01BUF9CVUxLX0VQKCJlcDNpbiIsICBVU0JfRElSX0lOICB8IDMpOworCQlPTUFQX0JVTEtfRVAoImVwNG91dCIsIFVTQl9ESVJfT1VUIHwgNCk7CisKKwkJT01BUF9CVUxLX0VQKCJlcDVpbiIsICBVU0JfRElSX0lOICB8IDUpOworCQlPTUFQX0JVTEtfRVAoImVwNW91dCIsIFVTQl9ESVJfT1VUIHwgNSk7CisJCU9NQVBfQlVMS19FUCgiZXA2aW4iLCAgVVNCX0RJUl9JTiAgfCA2KTsKKwkJT01BUF9CVUxLX0VQKCJlcDZvdXQiLCBVU0JfRElSX09VVCB8IDYpOworCisJCU9NQVBfQlVMS19FUCgiZXA3aW4iLCAgVVNCX0RJUl9JTiAgfCA3KTsKKwkJT01BUF9CVUxLX0VQKCJlcDdvdXQiLCBVU0JfRElSX09VVCB8IDcpOworCQlPTUFQX0JVTEtfRVAoImVwOGluIiwgIFVTQl9ESVJfSU4gIHwgOCk7CisJCU9NQVBfQlVMS19FUCgiZXA4b3V0IiwgVVNCX0RJUl9PVVQgfCA4KTsKKworCQlPTUFQX0lOVF9FUCgiZXA5aW4iLCAgIFVTQl9ESVJfSU4gIHwgOSwgMTYpOworCQlPTUFQX0lOVF9FUCgiZXAxMG91dCIsIFVTQl9ESVJfSU4gIHwgMTAsIDE2KTsKKwkJT01BUF9JTlRfRVAoImVwMTFpbiIsICBVU0JfRElSX0lOICB8IDksIDE2KTsKKwkJT01BUF9JTlRfRVAoImVwMTJvdXQiLCBVU0JfRElSX0lOICB8IDEwLCAxNik7CisJCWJyZWFrOworCisjaWZkZWYJVVNFX0lTTworCWNhc2UgMjoJCQkvKiBtaXhlZCBpc28vYnVsayAqLworCQlPTUFQX0lTT19FUCgiZXAxaW4iLCAgIFVTQl9ESVJfSU4gIHwgMSwgMjU2KTsKKwkJT01BUF9JU09fRVAoImVwMm91dCIsICBVU0JfRElSX09VVCB8IDIsIDI1Nik7CisJCU9NQVBfSVNPX0VQKCJlcDNpbiIsICAgVVNCX0RJUl9JTiAgfCAzLCAxMjgpOworCQlPTUFQX0lTT19FUCgiZXA0b3V0IiwgIFVTQl9ESVJfT1VUIHwgNCwgMTI4KTsKKworCQlPTUFQX0lOVF9FUCgiZXA1aW4iLCAgIFVTQl9ESVJfSU4gIHwgNSwgMTYpOworCisJCU9NQVBfQlVMS19FUCgiZXA2aW4iLCAgVVNCX0RJUl9JTiAgfCA2KTsKKwkJT01BUF9CVUxLX0VQKCJlcDdvdXQiLCBVU0JfRElSX09VVCB8IDcpOworCQlPTUFQX0lOVF9FUCgiZXA4aW4iLCAgIFVTQl9ESVJfSU4gIHwgOCwgMTYpOworCQlicmVhazsKKwljYXNlIDM6CQkJLyogbWl4ZWQgYnVsay9pc28gKi8KKwkJT01BUF9CVUxLX0VQKCJlcDFpbiIsICBVU0JfRElSX0lOICB8IDEpOworCQlPTUFQX0JVTEtfRVAoImVwMm91dCIsIFVTQl9ESVJfT1VUIHwgMik7CisJCU9NQVBfSU5UX0VQKCJlcDNpbiIsICAgVVNCX0RJUl9JTiAgfCAzLCAxNik7CisKKwkJT01BUF9CVUxLX0VQKCJlcDRpbiIsICBVU0JfRElSX0lOICB8IDQpOworCQlPTUFQX0JVTEtfRVAoImVwNW91dCIsIFVTQl9ESVJfT1VUIHwgNSk7CisJCU9NQVBfSU5UX0VQKCJlcDZpbiIsICAgVVNCX0RJUl9JTiAgfCA2LCAxNik7CisKKwkJT01BUF9JU09fRVAoImVwN2luIiwgICBVU0JfRElSX0lOICB8IDcsIDI1Nik7CisJCU9NQVBfSVNPX0VQKCJlcDhvdXQiLCAgVVNCX0RJUl9PVVQgfCA4LCAyNTYpOworCQlPTUFQX0lOVF9FUCgiZXA5aW4iLCAgIFVTQl9ESVJfSU4gIHwgOSwgMTYpOworCQlicmVhazsKKyNlbmRpZgorCisJLyogYWRkIG1vcmUgbW9kZXMgYXMgbmVlZGVkICovCisKKwlkZWZhdWx0OgorCQlFUlIoInVuc3VwcG9ydGVkIGZpZm9fbW9kZSAjJWRcbiIsIGZpZm9fbW9kZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlVRENfU1lTQ09OMV9SRUcgPSBVRENfQ0ZHX0xPQ0t8VURDX1NFTEZfUFdSOworCUlORk8oImZpZm8gbW9kZSAlZCwgJWQgYnl0ZXMgbm90IHVzZWRcbiIsIGZpZm9fbW9kZSwgMjA0OCAtIGJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfdWRjX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpvZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJaW50CQkJc3RhdHVzID0gLUVOT0RFVjsKKwlpbnQJCQlobWM7CisJc3RydWN0IG90Z190cmFuc2NlaXZlcgkqeGNlaXYgPSAwOworCWNvbnN0IGNoYXIJCSp0eXBlID0gMDsKKwlzdHJ1Y3Qgb21hcF91c2JfY29uZmlnCSpjb25maWcgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisKKwkvKiBOT1RFOiAgImtub3dzIiB0aGUgb3JkZXIgb2YgdGhlIHJlc291cmNlcyEgKi8KKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihvZGV2LT5yZXNvdXJjZVswXS5zdGFydCwgCisJCQlvZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBvZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDEsCisJCQlkcml2ZXJfbmFtZSkpIHsKKwkJREJHKCJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlJTkZPKCJPTUFQIFVEQyByZXYgJWQuJWQlc1xuIiwKKwkJVURDX1JFVl9SRUcgPj4gNCwgVURDX1JFVl9SRUcgJiAweGYsCisJCWNvbmZpZy0+b3RnID8gIiwgTWluaS1BQiIgOiAiIik7CisKKwkvKiB1c2UgdGhlIG1vZGUgZ2l2ZW4gdG8gdXMgYnkgYm9hcmQgaW5pdCBjb2RlICovCisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CisJCWhtYyA9IEhNQ18xNTEwOworCQl0eXBlID0gIih1bmtub3duKSI7CisKKwkJaWYgKG1hY2hpbmVfaXNfb21hcF9pbm5vdmF0b3IoKSkgeworCQkJLyoganVzdCBzZXQgdXAgc29mdHdhcmUgVkJVUyBkZXRlY3QsIGFuZCB0aGVuCisJCQkgKiBsYXRlciByaWcgaXQgc28gd2UgYWx3YXlzIHJlcG9ydCBWQlVTLgorCQkJICogRklYTUUgd2l0aG91dCByZWFsbHkgc2Vuc2luZyBWQlVTLCB3ZSBjYW4ndAorCQkJICoga25vdyB3aGVuIHRvIHR1cm4gUFVMTFVQX0VOIG9uL29mZjsgYW5kIHRoYXQKKwkJCSAqIG1lYW5zIHdlIGFsd2F5cyAibmVlZCIgdGhlIDQ4TUh6IGNsb2NrLgorCQkJICovCisJCQl1MzIgdG1wID0gRlVOQ19NVVhfQ1RSTF8wX1JFRzsKKworCQkJRlVOQ19NVVhfQ1RSTF8wX1JFRyAmPSB+VkJVU19DVFJMXzE1MTA7CisJCQl0bXAgfD0gVkJVU19NT0RFXzE1MTA7CisJCQl0bXAgJj0gflZCVVNfQ1RSTF8xNTEwOworCQkJRlVOQ19NVVhfQ1RSTF8wX1JFRyA9IHRtcDsKKwkJfQorCX0gZWxzZSB7CisJCWhtYyA9IEhNQ18xNjEwOworCQlzd2l0Y2ggKGhtYykgeworCQljYXNlIDM6CisJCWNhc2UgMTE6CisJCWNhc2UgMTY6CisJCWNhc2UgMTk6CisJCWNhc2UgMjU6CisJCQl4Y2VpdiA9IG90Z19nZXRfdHJhbnNjZWl2ZXIoKTsKKwkJCWlmICgheGNlaXYpIHsKKwkJCQlEQkcoImV4dGVybmFsIHRyYW5zY2VpdmVyIG5vdCByZWdpc3RlcmVkIVxuIik7CisJCQkJaWYgKGNvbmZpZy0+b3RnKQorCQkJCQlnb3RvIGNsZWFudXAwOworCQkJCXR5cGUgPSAiKHVua25vd24gZXh0ZXJuYWwpIjsKKwkJCX0gZWxzZQorCQkJCXR5cGUgPSB4Y2Vpdi0+bGFiZWw7CisJCQlicmVhazsKKwkJY2FzZSAwOgkJCS8qIFBPV0VSVVAgREVGQVVMVCA9PSAwICovCisJCWNhc2UgNDoKKwkJY2FzZSAxMjoKKwkJY2FzZSAyMDoKKwkJCXR5cGUgPSAiSU5URUdSQVRFRCI7CisJCQlicmVhazsKKwkJY2FzZSAyMToJCQkvKiBpbnRlcm5hbCBsb29wYmFjayAqLworCQkJdHlwZSA9ICIobG9vcGJhY2spIjsKKwkJCWJyZWFrOworCQljYXNlIDE0OgkJCS8qIHRyYW5zY2VpdmVybGVzcyAqLworCQkJdHlwZSA9ICIobm9uZSkiOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCUVSUigidW5yZWNvZ25pemVkIFVEQyBITUMgbW9kZSAlZFxuIiwgaG1jKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfQorCUlORk8oImhtYyBtb2RlICVkLCB0cmFuc2NlaXZlciAlc1xuIiwgaG1jLCB0eXBlKTsKKworCS8qIGEgImdhZGdldCIgYWJzdHJhY3RzL3ZpcnR1YWxpemVzIHRoZSBjb250cm9sbGVyICovCisJc3RhdHVzID0gb21hcF91ZGNfc2V0dXAob2RldiwgeGNlaXYpOworCWlmIChzdGF0dXMpIHsKKwkJZ290byBjbGVhbnVwMDsKKwl9CisJeGNlaXYgPSAwOworCS8vICJ1ZGMiIGlzIG5vdyB2YWxpZAorCXB1bGx1cF9kaXNhYmxlKHVkYyk7CisjaWYJZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQorCXVkYy0+Z2FkZ2V0LmlzX290ZyA9IChjb25maWctPm90ZyAhPSAwKTsKKyNlbmRpZgorCisJLyogVVNCIGdlbmVyYWwgcHVycG9zZSBJUlE6ICBlcDAsIHN0YXRlIGNoYW5nZXMsIGRtYSwgZXRjICovCisJc3RhdHVzID0gcmVxdWVzdF9pcnEob2Rldi0+cmVzb3VyY2VbMV0uc3RhcnQsIG9tYXBfdWRjX2lycSwKKwkJCVNBX1NBTVBMRV9SQU5ET00sIGRyaXZlcl9uYW1lLCB1ZGMpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlFUlIoICJjYW4ndCBnZXQgaXJxICVsZCwgZXJyICVkXG4iLAorCQkJb2Rldi0+cmVzb3VyY2VbMV0uc3RhcnQsIHN0YXR1cyk7CisJCWdvdG8gY2xlYW51cDE7CisJfQorCisJLyogVVNCICJub24taXNvIiBJUlEgKFBJTyBmb3IgYWxsIGJ1dCBlcDApICovCisJc3RhdHVzID0gcmVxdWVzdF9pcnEob2Rldi0+cmVzb3VyY2VbMl0uc3RhcnQsIG9tYXBfdWRjX3Bpb19pcnEsCisJCQlTQV9TQU1QTEVfUkFORE9NLCAib21hcF91ZGMgcGlvIiwgdWRjKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJRVJSKCAiY2FuJ3QgZ2V0IGlycSAlbGQsIGVyciAlZFxuIiwKKwkJCW9kZXYtPnJlc291cmNlWzJdLnN0YXJ0LCBzdGF0dXMpOworCQlnb3RvIGNsZWFudXAyOworCX0KKyNpZmRlZglVU0VfSVNPCisJc3RhdHVzID0gcmVxdWVzdF9pcnEob2Rldi0+cmVzb3VyY2VbM10uc3RhcnQsIG9tYXBfdWRjX2lzb19pcnEsCisJCQlTQV9JTlRFUlJVUFQsICJvbWFwX3VkYyBpc28iLCB1ZGMpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlFUlIoImNhbid0IGdldCBpcnEgJWxkLCBlcnIgJWRcbiIsCisJCQlvZGV2LT5yZXNvdXJjZVszXS5zdGFydCwgc3RhdHVzKTsKKwkJZ290byBjbGVhbnVwMzsKKwl9CisjZW5kaWYKKworCWNyZWF0ZV9wcm9jX2ZpbGUoKTsKKwlkZXZpY2VfYWRkKCZ1ZGMtPmdhZGdldC5kZXYpOworCXJldHVybiAwOworCisjaWZkZWYJVVNFX0lTTworY2xlYW51cDM6CisJZnJlZV9pcnEob2Rldi0+cmVzb3VyY2VbMl0uc3RhcnQsIHVkYyk7CisjZW5kaWYKKworY2xlYW51cDI6CisJZnJlZV9pcnEob2Rldi0+cmVzb3VyY2VbMV0uc3RhcnQsIHVkYyk7CisKK2NsZWFudXAxOgorCWtmcmVlICh1ZGMpOworCXVkYyA9IDA7CisKK2NsZWFudXAwOgorCWlmICh4Y2VpdikKKwkJcHV0X2RldmljZSh4Y2Vpdi0+ZGV2KTsKKwlyZWxlYXNlX21lbV9yZWdpb24ob2Rldi0+cmVzb3VyY2VbMF0uc3RhcnQsCisJCQlvZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBvZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDEpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IG9tYXBfdWRjX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqb2RldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCURFQ0xBUkVfQ09NUExFVElPTihkb25lKTsKKworCWlmICghdWRjKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXVkYy0+ZG9uZSA9ICZkb25lOworCisJcHVsbHVwX2Rpc2FibGUodWRjKTsKKwlpZiAodWRjLT50cmFuc2NlaXZlcikgeworCQlwdXRfZGV2aWNlKHVkYy0+dHJhbnNjZWl2ZXItPmRldik7CisJCXVkYy0+dHJhbnNjZWl2ZXIgPSAwOworCX0KKwlVRENfU1lTQ09OMV9SRUcgPSAwOworCisJcmVtb3ZlX3Byb2NfZmlsZSgpOworCisjaWZkZWYJVVNFX0lTTworCWZyZWVfaXJxKG9kZXYtPnJlc291cmNlWzNdLnN0YXJ0LCB1ZGMpOworI2VuZGlmCisJZnJlZV9pcnEob2Rldi0+cmVzb3VyY2VbMl0uc3RhcnQsIHVkYyk7CisJZnJlZV9pcnEob2Rldi0+cmVzb3VyY2VbMV0uc3RhcnQsIHVkYyk7CisKKwlyZWxlYXNlX21lbV9yZWdpb24ob2Rldi0+cmVzb3VyY2VbMF0uc3RhcnQsCisJCQlvZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBvZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDEpOworCisJZGV2aWNlX3VucmVnaXN0ZXIoJnVkYy0+Z2FkZ2V0LmRldik7CisJd2FpdF9mb3JfY29tcGxldGlvbigmZG9uZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogc3VzcGVuZC9yZXN1bWUvd2FrZXVwIGZyb20gc3lzZnMgKGVjaG8gPiBwb3dlci9zdGF0ZSkgKi8KKworc3RhdGljIGludCBvbWFwX3VkY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN0YXRlLCB1MzIgbGV2ZWwpCit7CisJaWYgKGxldmVsICE9IDApCisJCXJldHVybiAwOworCisJREJHKCJzdXNwZW5kLCBzdGF0ZSAlZFxuIiwgc3RhdGUpOworCW9tYXBfcHVsbHVwKCZ1ZGMtPmdhZGdldCwgMCk7CisJdWRjLT5nYWRnZXQuZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gMzsKKwl1ZGMtPmdhZGdldC5kZXYucGFyZW50LT5wb3dlci5wb3dlcl9zdGF0ZSA9IDM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcF91ZGNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGxldmVsKQoreworCWlmIChsZXZlbCAhPSAwKQorCQlyZXR1cm4gMDsKKworCURCRygicmVzdW1lICsgd2FrZXVwL1NSUFxuIik7CisJdWRjLT5nYWRnZXQuZGV2LnBhcmVudC0+cG93ZXIucG93ZXJfc3RhdGUgPSAwOworCXVkYy0+Z2FkZ2V0LmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IDA7CisJb21hcF9wdWxsdXAoJnVkYy0+Z2FkZ2V0LCAxKTsKKworCS8qIG1heWJlIHRoZSBob3N0IHdvdWxkIGVudW1lcmF0ZSB1cyBpZiB3ZSBudWRnZWQgaXQgKi8KKwltc2xlZXAoMTAwKTsKKwlyZXR1cm4gb21hcF93YWtldXAoJnVkYy0+Z2FkZ2V0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHVkY19kcml2ZXIgPSB7CisJLm5hbWUJCT0gKGNoYXIgKikgZHJpdmVyX25hbWUsCisJLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCisJLnByb2JlCQk9IG9tYXBfdWRjX3Byb2JlLAorCS5yZW1vdmUJCT0gX19leGl0X3Aob21hcF91ZGNfcmVtb3ZlKSwKKwkuc3VzcGVuZAk9IG9tYXBfdWRjX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBvbWFwX3VkY19yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1ZGNfaW5pdCh2b2lkKQoreworCUlORk8oIiVzLCB2ZXJzaW9uOiAiIERSSVZFUl9WRVJTSU9OCisjaWZkZWYJVVNFX0lTTworCQkiIChpc28pIgorI2VuZGlmCisJCSIlc1xuIiwgZHJpdmVyX2Rlc2MsCisJCXVzZV9kbWEgPyAgIiAoZG1hKSIgOiAiIik7CisJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmdWRjX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh1ZGNfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1ZGNfZXhpdCh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHVkY19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWU2ODU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmgKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiBvbWFwX3VkYy5oIC0tIGZvciBvbWFwIDMuMiB1ZGMsIHdpdGggT1RHIHN1cHBvcnQKKyAqCisgKiAyMDA0IChDKSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogMjAwNCAoQykgRGF2aWQgQnJvd25lbGwKKyAqLworCisvKgorICogVVNCIGRldmljZS9lbmRwb2ludCBtYW5hZ2VtZW50IHJlZ2lzdGVycworICovCisjZGVmaW5lIFVEQ19SRUcob2Zmc2V0KSAgICAgICAgICAgICAgX19SRUcxNihVRENfQkFTRSArIChvZmZzZXQpKQorCisjZGVmaW5lCVVEQ19SRVZfUkVHCQkJVURDX1JFRygweDApCS8qIFJldmlzaW9uICovCisjZGVmaW5lCVVEQ19FUF9OVU1fUkVHCQkJVURDX1JFRygweDQpCS8qIFdoaWNoIGVuZHBvaW50ICovCisjCWRlZmluZQlVRENfU0VUVVBfU0VMCQkoMSA8PCA2KQorIwlkZWZpbmUJVURDX0VQX1NFTAkJKDEgPDwgNSkKKyMJZGVmaW5lCVVEQ19FUF9ESVIJCSgxIDw8IDQpCisJLyogbG93IDQgYml0cyBmb3IgZW5kcG9pbnQgbnVtYmVyICovCisjZGVmaW5lCVVEQ19EQVRBX1JFRwkJCVVEQ19SRUcoMHgwOCkJLyogRW5kcG9pbnQgRklGTyAqLworI2RlZmluZQlVRENfQ1RSTF9SRUcJCQlVRENfUkVHKDB4MEMpCS8qIEVuZHBvaW50IGNvbnRyb2wgKi8KKyMJZGVmaW5lCVVEQ19DTFJfSEFMVAkJKDEgPDwgNykKKyMJZGVmaW5lCVVEQ19TRVRfSEFMVAkJKDEgPDwgNikKKyMJZGVmaW5lCVVEQ19TRVRfRklGT19FTgkJKDEgPDwgMikKKyMJZGVmaW5lCVVEQ19DTFJfRVAJCSgxIDw8IDEpCisjCWRlZmluZQlVRENfUkVTRVRfRVAJCSgxIDw8IDApCisjZGVmaW5lCVVEQ19TVEFUX0ZMR19SRUcJCVVEQ19SRUcoMHgxMCkJLyogRW5kcG9pbnQgc3RhdHVzICovCisjCWRlZmluZQlVRENfTk9fUlhQQUNLRVQJCSgxIDw8IDE1KQorIwlkZWZpbmUJVURDX01JU1NfSU4JCSgxIDw8IDE0KQorIwlkZWZpbmUJVURDX0RBVEFfRkxVU0gJCSgxIDw8IDEzKQorIwlkZWZpbmUJVURDX0lTT19FUlIJCSgxIDw8IDEyKQorIwlkZWZpbmUJVURDX0lTT19GSUZPX0VNUFRZCSgxIDw8IDkpCisjCWRlZmluZQlVRENfSVNPX0ZJRk9fRlVMTAkoMSA8PCA4KQorIwlkZWZpbmUJVURDX0VQX0hBTFRFRAkJKDEgPDwgNikKKyMJZGVmaW5lCVVEQ19TVEFMTAkJKDEgPDwgNSkKKyMJZGVmaW5lCVVEQ19OQUsJCQkoMSA8PCA0KQorIwlkZWZpbmUJVURDX0FDSwkJCSgxIDw8IDMpCisjCWRlZmluZQlVRENfRklGT19FTgkJKDEgPDwgMikKKyMJZGVmaW5lCVVEQ19OT05fSVNPX0ZJRk9fRU1QVFkJKDEgPDwgMSkKKyMJZGVmaW5lCVVEQ19OT05fSVNPX0ZJRk9fRlVMTAkoMSA8PCAwKQorI2RlZmluZQlVRENfUlhGU1RBVF9SRUcJCQlVRENfUkVHKDB4MTQpCS8qIE9VVCBieXRlY291bnQgKi8KKyNkZWZpbmUJVURDX1NZU0NPTjFfUkVHCQkJVURDX1JFRygweDE4KQkvKiBTeXN0ZW0gY29uZmlnIDEgKi8KKyMJZGVmaW5lCVVEQ19DRkdfTE9DSwkJKDEgPDwgOCkKKyMJZGVmaW5lCVVEQ19EQVRBX0VORElBTgkJKDEgPDwgNykKKyMJZGVmaW5lCVVEQ19ETUFfRU5ESUFOCQkoMSA8PCA2KQorIwlkZWZpbmUJVURDX05BS19FTgkJKDEgPDwgNCkKKyMJZGVmaW5lCVVEQ19BVVRPREVDT0RFX0RJUwkoMSA8PCAzKQorIwlkZWZpbmUJVURDX1NFTEZfUFdSCQkoMSA8PCAyKQorIwlkZWZpbmUJVURDX1NPRkZfRElTCQkoMSA8PCAxKQorIwlkZWZpbmUJVURDX1BVTExVUF9FTgkJKDEgPDwgMCkKKyNkZWZpbmUJVURDX1NZU0NPTjJfUkVHCQkJVURDX1JFRygweDFDKQkvKiBTeXN0ZW0gY29uZmlnIDIgKi8KKyMJZGVmaW5lCVVEQ19STVRfV0tQCQkoMSA8PCA2KQorIwlkZWZpbmUJVURDX1NUQUxMX0NNRAkJKDEgPDwgNSkKKyMJZGVmaW5lCVVEQ19ERVZfQ0ZHCQkoMSA8PCAzKQorIwlkZWZpbmUJVURDX0NMUl9DRkcJCSgxIDw8IDIpCisjZGVmaW5lCVVEQ19ERVZTVEFUX1JFRwkJCVVEQ19SRUcoMHgyMCkJLyogRGV2aWNlIHN0YXR1cyAqLworIwlkZWZpbmUJVURDX0JfSE5QX0VOQUJMRQkoMSA8PCA5KQorIwlkZWZpbmUJVURDX0FfSE5QX1NVUFBPUlQJKDEgPDwgOCkKKyMJZGVmaW5lCVVEQ19BX0FMVF9ITlBfU1VQUE9SVAkoMSA8PCA3KQorIwlkZWZpbmUJVURDX1JfV0tfT0sJCSgxIDw8IDYpCisjCWRlZmluZQlVRENfVVNCX1JFU0VUCQkoMSA8PCA1KQorIwlkZWZpbmUJVURDX1NVUwkJCSgxIDw8IDQpCisjCWRlZmluZQlVRENfQ0ZHCQkJKDEgPDwgMykKKyMJZGVmaW5lCVVEQ19BREQJCQkoMSA8PCAyKQorIwlkZWZpbmUJVURDX0RFRgkJCSgxIDw8IDEpCisjCWRlZmluZQlVRENfQVRUCQkJKDEgPDwgMCkKKyNkZWZpbmUJVURDX1NPRl9SRUcJCQlVRENfUkVHKDB4MjQpCS8qIFN0YXJ0IG9mIGZyYW1lICovCisjCWRlZmluZQlVRENfRlRfTE9DSwkJKDEgPDwgMTIpCisjCWRlZmluZQlVRENfVFNfT0sJCSgxIDw8IDExKQorIwlkZWZpbmUJVURDX1RTCQkJMHgwM2ZmCisjZGVmaW5lCVVEQ19JUlFfRU5fUkVHCQkJVURDX1JFRygweDI4KQkvKiBJbnRlcnJ1cHQgZW5hYmxlICovCisjCWRlZmluZQlVRENfU09GX0lFCQkoMSA8PCA3KQorIwlkZWZpbmUJVURDX0VQTl9SWF9JRQkJKDEgPDwgNSkKKyMJZGVmaW5lCVVEQ19FUE5fVFhfSUUJCSgxIDw8IDQpCisjCWRlZmluZQlVRENfRFNfQ0hHX0lFCQkoMSA8PCAzKQorIwlkZWZpbmUJVURDX0VQMF9JRQkJKDEgPDwgMCkKKyNkZWZpbmUJVURDX0RNQV9JUlFfRU5fUkVHCQlVRENfUkVHKDB4MkMpCS8qIERNQSBpcnEgZW5hYmxlICovCisJLyogcngvdHggZG1hIGNoYW5uZWxzIG51bWJlcmVkIDEtMyBub3QgMC0yICovCisjCWRlZmluZQlVRENfVFhfRE9ORV9JRShuKQkoMSA8PCAoNCAqIChuKSAtIDIpKQorIwlkZWZpbmUJVURDX1JYX0NOVF9JRShuKQkoMSA8PCAoNCAqIChuKSAtIDMpKQorIwlkZWZpbmUJVURDX1JYX0VPVF9JRShuKQkoMSA8PCAoNCAqIChuKSAtIDQpKQorI2RlZmluZQlVRENfSVJRX1NSQ19SRUcJCQlVRENfUkVHKDB4MzApCS8qIEludGVycnVwdCBzb3VyY2UgKi8KKyMJZGVmaW5lCVVEQ19UWE5fRE9ORQkJKDEgPDwgMTApCisjCWRlZmluZQlVRENfUlhOX0NOVAkJKDEgPDwgOSkKKyMJZGVmaW5lCVVEQ19SWE5fRU9UCQkoMSA8PCA4KQorIwlkZWZpbmUJVURDX1NPRgkJCSgxIDw8IDcpCisjCWRlZmluZQlVRENfRVBOX1JYCQkoMSA8PCA1KQorIwlkZWZpbmUJVURDX0VQTl9UWAkJKDEgPDwgNCkKKyMJZGVmaW5lCVVEQ19EU19DSEcJCSgxIDw8IDMpCisjCWRlZmluZQlVRENfU0VUVVAJCSgxIDw8IDIpCisjCWRlZmluZQlVRENfRVAwX1JYCQkoMSA8PCAxKQorIwlkZWZpbmUJVURDX0VQMF9UWAkJKDEgPDwgMCkKKyMJZGVmaW5lCVVEQ19JUlFfU1JDX01BU0sJMHg3YmYKKyNkZWZpbmUJVURDX0VQTl9TVEFUX1JFRwkJVURDX1JFRygweDM0KQkvKiBFUCBpcnEgc3RhdHVzICovCisjZGVmaW5lCVVEQ19ETUFOX1NUQVRfUkVHCQlVRENfUkVHKDB4MzgpCS8qIERNQSBpcnEgc3RhdHVzICovCisjCWRlZmluZQlVRENfRE1BX1JYX1NCCQkoMSA8PCAxMikKKyMJZGVmaW5lCVVEQ19ETUFfUlhfU1JDKHgpCSgoKHgpPj44KSAmIDB4ZikKKyMJZGVmaW5lCVVEQ19ETUFfVFhfU1JDKHgpCSgoKHgpPj4wKSAmIDB4ZikKKworCisvKiBETUEgY29uZmlndXJhdGlvbiByZWdpc3RlcnM6ICB1cCB0byB0aHJlZSBjaGFubmVscyBpbiBlYWNoIGRpcmVjdGlvbi4gICovCisjZGVmaW5lCVVEQ19SWERNQV9DRkdfUkVHCQlVRENfUkVHKDB4NDApCS8qIDMgZXBzIGZvciBSWCBETUEgKi8KKyNkZWZpbmUJVURDX1RYRE1BX0NGR19SRUcJCVVEQ19SRUcoMHg0NCkJLyogMyBlcHMgZm9yIFRYIERNQSAqLworI2RlZmluZQlVRENfREFUQV9ETUFfUkVHCQlVRENfUkVHKDB4NDgpCS8qIHJ4L3R4IGZpZm8gYWRkciAqLworCisvKiByeC90eCBkbWEgY29udHJvbCwgbnVtYmVyaW5nIGNoYW5uZWxzIDEtMyBub3QgMC0yICovCisjZGVmaW5lCVVEQ19UWERNQV9SRUcoY2hhbikJCVVEQ19SRUcoMHg1MCAtIDQgKyA0ICogKGNoYW4pKQorIwlkZWZpbmUgVURDX1RYTl9FT1QJCSgxIDw8IDE1KQkvKiBieXRlcyB2cyBwYWNrZXRzICovCisjCWRlZmluZSBVRENfVFhOX1NUQVJUCQkoMSA8PCAxNCkJLyogc3RhcnQgdHJhbnNmZXIgKi8KKyMJZGVmaW5lIFVEQ19UWE5fVFNDCQkweDAzZmYJCS8qIHVuaXRzIGluIHhmZXIgKi8KKyNkZWZpbmUJVURDX1JYRE1BX1JFRyhjaGFuKQkJVURDX1JFRygweDYwIC0gNCArIDQgKiAoY2hhbikpCisjCWRlZmluZSBVRENfUlhOX1NUT1AJCSgxIDw8IDE1KQkvKiBlbmFibGUgRU9UIGlycSAqLworIwlkZWZpbmUgVURDX1JYTl9UQwkJMHgwMGZmCQkvKiBwYWNrZXRzIGluIHhmZXIgKi8KKworCisvKgorICogRW5kcG9pbnQgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgKHVzZWQgYmVmb3JlIENGR19MT0NLIGlzIHNldCkKKyAqIFVEQ19FUF9UWF9SRUcoMCkgaXMgdW51c2VkCisgKi8KKyNkZWZpbmUJVURDX0VQX1JYX1JFRyhlbmRwb2ludCkJCVVEQ19SRUcoMHg4MCArIChlbmRwb2ludCkqNCkKKyMJZGVmaW5lCVVEQ19FUE5fUlhfVkFMSUQJKDEgPDwgMTUpCisjCWRlZmluZQlVRENfRVBOX1JYX0RCCQkoMSA8PCAxNCkKKwkvKiBidWZmZXIgc2l6ZSBpbiBiaXRzIDEzLCAxMiAqLworIwlkZWZpbmUJVURDX0VQTl9SWF9JU08JCSgxIDw8IDExKQorCS8qIGJ1ZmZlciBwb2ludGVyIGluIGxvdyAxMSBiaXRzICovCisjZGVmaW5lCVVEQ19FUF9UWF9SRUcoZW5kcG9pbnQpCQlVRENfUkVHKDB4YzAgKyAoZW5kcG9pbnQpKjQpCisJLyogc2FtZSBiaXRmaWVsZHMgYXMgaW4gUlhfUkVHICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0cnVjdCBvbWFwX3JlcSB7CisJc3RydWN0IHVzYl9yZXF1ZXN0CQlyZXE7CisJc3RydWN0IGxpc3RfaGVhZAkJcXVldWU7CisJdW5zaWduZWQJCQlkbWFfYnl0ZXM7CisJdW5zaWduZWQJCQltYXBwZWQ6MTsKK307CisKK3N0cnVjdCBvbWFwX2VwIHsKKwlzdHJ1Y3QgdXNiX2VwCQkJZXA7CisJc3RydWN0IGxpc3RfaGVhZAkJcXVldWU7CisJdW5zaWduZWQgbG9uZwkJCWlycXM7CisJc3RydWN0IGxpc3RfaGVhZAkJaXNvOworCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqZGVzYzsKKwljaGFyCQkJCW5hbWVbMTRdOworCXUxNgkJCQltYXhwYWNrZXQ7CisJdTgJCQkJYkVuZHBvaW50QWRkcmVzczsKKwl1OAkJCQlibUF0dHJpYnV0ZXM7CisJdW5zaWduZWQJCQlkb3VibGVfYnVmOjE7CisJdW5zaWduZWQJCQlzdG9wcGVkOjE7CisJdW5zaWduZWQJCQlmbmY6MTsKKwl1bnNpZ25lZAkJCWhhc19kbWE6MTsKKwl1OAkJCQlhY2t3YWl0OworCXU4CQkJCWRtYV9jaGFubmVsOworCXUxNgkJCQlkbWFfY291bnRlcjsKKwlpbnQJCQkJbGNoOworCXN0cnVjdCBvbWFwX3VkYwkJCSp1ZGM7CisJc3RydWN0IHRpbWVyX2xpc3QJCXRpbWVyOworfTsKKworc3RydWN0IG9tYXBfdWRjIHsKKwlzdHJ1Y3QgdXNiX2dhZGdldAkJZ2FkZ2V0OworCXN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlcgkqZHJpdmVyOworCXNwaW5sb2NrX3QJCQlsb2NrOworCXN0cnVjdCBvbWFwX2VwCQkJZXBbMzJdOworCXUxNgkJCQlkZXZzdGF0OworCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIJCSp0cmFuc2NlaXZlcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlpc287CisJdW5zaWduZWQJCQlzb2Z0Y29ubmVjdDoxOworCXVuc2lnbmVkCQkJdmJ1c19hY3RpdmU6MTsKKwl1bnNpZ25lZAkJCWVwMF9wZW5kaW5nOjE7CisJdW5zaWduZWQJCQllcDBfaW46MTsKKwl1bnNpZ25lZAkJCWVwMF9zZXRfY29uZmlnOjE7CisJdW5zaWduZWQJCQllcDBfcmVzZXRfY29uZmlnOjE7CisJdW5zaWduZWQJCQllcDBfc2V0dXA6MTsKKworCXN0cnVjdCBjb21wbGV0aW9uCQkqZG9uZTsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBEQkcoc3R1ZmYuLi4pCQlwcmludGsoS0VSTl9ERUJVRyAidWRjOiAiIHN0dWZmKQorI2Vsc2UKKyNkZWZpbmUgREJHKHN0dWZmLi4uKQkJZG97fXdoaWxlKDApCisjZW5kaWYKKworI2lmZGVmIFZFUkJPU0UKKyMgICAgZGVmaW5lIFZEQkcJCURCRworI2Vsc2UKKyMgICAgZGVmaW5lIFZEQkcoc3R1ZmYuLi4pCWRve313aGlsZSgwKQorI2VuZGlmCisKKyNkZWZpbmUgRVJSKHN0dWZmLi4uKQkJcHJpbnRrKEtFUk5fRVJSICJ1ZGM6ICIgc3R1ZmYpCisjZGVmaW5lIFdBUk4oc3R1ZmYuLi4pCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1ZGM6ICIgc3R1ZmYpCisjZGVmaW5lIElORk8oc3R1ZmYuLi4pCQlwcmludGsoS0VSTl9JTkZPICJ1ZGM6ICIgc3R1ZmYpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUJTU9EX0NPTkZfQ1RSTF8wX1JFRwlfX1JFRzMyKE1PRF9DT05GX0NUUkxfMCkKKyNkZWZpbmUJVkJVU19XMkZDXzE1MTAJCSgxIDw8IDE3KQkvKiAwIGdwaW8wLCAxIGR2ZGQyIHBpbiAqLworCisjZGVmaW5lCUZVTkNfTVVYX0NUUkxfMF9SRUcJX19SRUczMihGVU5DX01VWF9DVFJMXzApCisjZGVmaW5lCVZCVVNfQ1RSTF8xNTEwCQkoMSA8PCAxOSkJLyogMSBjb25uZWN0ZWQgKHNvZnR3YXJlKSAqLworI2RlZmluZQlWQlVTX01PREVfMTUxMAkJKDEgPDwgMTgpCS8qIDAgaGFyZHdhcmUsIDEgc29mdHdhcmUgKi8KKworI2RlZmluZQlITUNfMTUxMAkoKE1PRF9DT05GX0NUUkxfMF9SRUcgPj4gMSkgJiAweDNmKQorI2RlZmluZQlITUNfMTYxMAkoT1RHX1NZU0NPTl8yX1JFRyAmIDB4M2YpCisjZGVmaW5lCUhNQwkJKGNwdV9pc19vbWFwMTV4eCgpID8gSE1DXzE1MTAgOiBITUNfMTYxMCkKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM5MGM1NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMKQEAgLTAsMCArMSwyNjQ4IEBACisvKgorICogbGludXgvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuYworICogSW50ZWwgUFhBMnh4IGFuZCBJWFA0eHggb24tY2hpcCBmdWxsIHNwZWVkIFVTQiBkZXZpY2UgY29udHJvbGxlcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgSW50cmluc3ljLCBJbmMuIChGcmFuayBCZWNrZXIpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUm9iZXJ0IFNjaHdlYmVsLCBQZW5ndXRyb25peAorICogQ29weXJpZ2h0IChDKSAyMDAzIEJlbmVkaWt0IFNwcmFuZ2VyLCBQZW5ndXRyb25peAorICogQ29weXJpZ2h0IChDKSAyMDAzIERhdmlkIEJyb3duZWxsCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgSm9zaHVhIFdpc2UKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyN1bmRlZglERUJVRworLy8gI2RlZmluZQlWRVJCT1NFCURCR19WRVJCT1NFCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKworI2luY2x1ZGUgPGxpbnV4L3VzYl9jaDkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfZ2FkZ2V0Lmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC91ZGMuaD4KKworCisvKgorICogVGhpcyBkcml2ZXIgaGFuZGxlcyB0aGUgVVNCIERldmljZSBDb250cm9sbGVyIChVREMpIGluIEludGVsJ3MgUFhBIDJ4eAorICogc2VyaWVzIHByb2Nlc3NvcnMuICBUaGUgVURDIGZvciB0aGUgSVhQIDR4eCBzZXJpZXMgaXMgdmVyeSBzaW1pbGFyLgorICogVGhlcmUgYXJlIGZpZnRlZW4gZW5kcG9pbnRzLCBpbiBhZGRpdGlvbiB0byBlcDAuCisgKgorICogU3VjaCBjb250cm9sbGVyIGRyaXZlcnMgd29yayB3aXRoIGEgZ2FkZ2V0IGRyaXZlci4gIFRoZSBnYWRnZXQgZHJpdmVyCisgKiByZXR1cm5zIGRlc2NyaXB0b3JzLCBpbXBsZW1lbnRzIGNvbmZpZ3VyYXRpb24gYW5kIGRhdGEgcHJvdG9jb2xzIHVzZWQKKyAqIGJ5IHRoZSBob3N0IHRvIGludGVyYWN0IHdpdGggdGhpcyBkZXZpY2UsIGFuZCBhbGxvY2F0ZXMgZW5kcG9pbnRzIHRvCisgKiB0aGUgZGlmZmVyZW50IHByb3RvY29sIGludGVyZmFjZXMuICBUaGUgY29udHJvbGxlciBkcml2ZXIgdmlydHVhbGl6ZXMKKyAqIHVzYiBoYXJkd2FyZSBzbyB0aGF0IHRoZSBnYWRnZXQgZHJpdmVycyB3aWxsIGJlIG1vcmUgcG9ydGFibGUuCisgKiAKKyAqIFRoaXMgVURDIGhhcmR3YXJlIHdhbnRzIHRvIGltcGxlbWVudCBhIGJpdCB0b28gbXVjaCBVU0IgcHJvdG9jb2wsIHNvCisgKiBpdCBjb25zdHJhaW5zIHRoZSBzb3J0cyBvZiBVU0IgY29uZmlndXJhdGlvbiBjaGFuZ2UgZXZlbnRzIHRoYXQgd29yay4KKyAqIFRoZSBlcnJhdGEgZm9yIHRoZXNlIGNoaXBzIGFyZSBtaXNsZWFkaW5nOyBzb21lICJmaXhlZCIgYnVncyBmcm9tCisgKiBweGEyNTAgYTAvYTEgYjAvYjEvYjIgc3VyZSBhY3QgbGlrZSB0aGV5J3JlIHN0aWxsIHRoZXJlLgorICovCisKKyNkZWZpbmUJRFJJVkVSX1ZFUlNJT04JIjE0LURlYy0yMDAzIgorI2RlZmluZQlEUklWRVJfREVTQwkiUFhBIDJ4eCBVU0IgRGV2aWNlIENvbnRyb2xsZXIgZHJpdmVyIgorCisKK3N0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9uYW1lIFtdID0gInB4YTJ4eF91ZGMiOworCitzdGF0aWMgY29uc3QgY2hhciBlcDBuYW1lIFtdID0gImVwMCI7CisKKworLy8gI2RlZmluZQlVU0VfRE1BCisvLyAjZGVmaW5lCVVTRV9PVVRfRE1BCisvLyAjZGVmaW5lCURJU0FCTEVfVEVTVF9NT0RFCisKKyNpZmRlZiBDT05GSUdfQVJDSF9JWFA0WFgKKyN1bmRlZiBVU0VfRE1BCisKKy8qIGNwdS1zcGVjaWZpYyByZWdpc3RlciBhZGRyZXNzZXMgYXJlIGNvbXBpbGVkIGluIHRvIHRoaXMgY29kZSAqLworI2lmZGVmIENPTkZJR19BUkNIX1BYQQorI2Vycm9yICJDYW4ndCBjb25maWd1cmUgYm90aCBJWFAgYW5kIFBYQSIKKyNlbmRpZgorCisjZW5kaWYKKworI2luY2x1ZGUgInB4YTJ4eF91ZGMuaCIKKworCisjaWZkZWYJVVNFX0RNQQorc3RhdGljIGludCB1c2VfZG1hID0gMTsKK21vZHVsZV9wYXJhbSh1c2VfZG1hLCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MgKHVzZV9kbWEsICJ0cnVlIHRvIHVzZSBkbWEiKTsKKworc3RhdGljIHZvaWQgZG1hX25vZGVzY19oYW5kbGVyIChpbnQgZG1hY2gsIHZvaWQgKl9lcCwgc3RydWN0IHB0X3JlZ3MgKnIpOworc3RhdGljIHZvaWQga2lja19kbWEoc3RydWN0IHB4YTJ4eF9lcCAqZXAsIHN0cnVjdCBweGEyeHhfcmVxdWVzdCAqcmVxKTsKKworI2lmZGVmIFVTRV9PVVRfRE1BCisjZGVmaW5lCURNQVNUUiAiIChkbWEgc3VwcG9ydCkiCisjZWxzZQorI2RlZmluZQlETUFTVFIgIiAoZG1hIGluKSIKKyNlbmRpZgorCisjZWxzZQkvKiAhVVNFX0RNQSAqLworI2RlZmluZQlETUFTVFIgIiAocGlvIG9ubHkpIgorI3VuZGVmCVVTRV9PVVRfRE1BCisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19VU0JfUFhBMlhYX1NNQUxMCisjZGVmaW5lIFNJWkVfU1RSCSIgKHNtYWxsKSIKKyNlbHNlCisjZGVmaW5lIFNJWkVfU1RSCSIiCisjZW5kaWYKKworI2lmZGVmIERJU0FCTEVfVEVTVF9NT0RFCisvKiAobW9kZSA9PSAwKSA9PSBubyB1bmRvY3VtZW50ZWQgY2hpcCB0d2Vha3MKKyAqIChtb2RlICYgMSkgID09IGRvdWJsZSBidWZmZXIgYnVsayBJTgorICogKG1vZGUgJiAyKSAgPT0gZG91YmxlIGJ1ZmZlciBidWxrIE9VVAorICogLi4uIHNvIG1vZGUgPSAzIChvciA3LCAxNSwgZXRjKSBkb2VzIGl0IGZvciBib3RoCisgKi8KK3N0YXRpYyB1c2hvcnQgZmlmb19tb2RlID0gMDsKK21vZHVsZV9wYXJhbShmaWZvX21vZGUsIHVzaG9ydCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDIChmaWZvX21vZGUsICJweGEyeHggdWRjIGZpZm8gbW9kZSIpOworI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogCWVuZHBvaW50IHJlbGF0ZWQgcGFydHMgb2YgdGhlIGFwaSB0byB0aGUgdXNiIGNvbnRyb2xsZXIgaGFyZHdhcmUsCisgKgl1c2VkIGJ5IGdhZGdldCBkcml2ZXI7IGFuZCB0aGUgaW5uZXIgdGFsa2VyLXRvLWhhcmR3YXJlIGNvcmUuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitzdGF0aWMgdm9pZCBweGEyeHhfZXBfZmlmb19mbHVzaCAoc3RydWN0IHVzYl9lcCAqZXApOworc3RhdGljIHZvaWQgbnVrZSAoc3RydWN0IHB4YTJ4eF9lcCAqLCBpbnQgc3RhdHVzKTsKKworc3RhdGljIHZvaWQgcGlvX2lycV9lbmFibGUoaW50IGJFbmRwb2ludEFkZHJlc3MpCit7CisgICAgICAgIGJFbmRwb2ludEFkZHJlc3MgJj0gMHhmOworICAgICAgICBpZiAoYkVuZHBvaW50QWRkcmVzcyA8IDgpCisgICAgICAgICAgICAgICAgVUlDUjAgJj0gfigxIDw8IGJFbmRwb2ludEFkZHJlc3MpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBiRW5kcG9pbnRBZGRyZXNzIC09IDg7CisgICAgICAgICAgICAgICAgVUlDUjEgJj0gfigxIDw8IGJFbmRwb2ludEFkZHJlc3MpOworCX0KK30KKworc3RhdGljIHZvaWQgcGlvX2lycV9kaXNhYmxlKGludCBiRW5kcG9pbnRBZGRyZXNzKQoreworICAgICAgICBiRW5kcG9pbnRBZGRyZXNzICY9IDB4ZjsKKyAgICAgICAgaWYgKGJFbmRwb2ludEFkZHJlc3MgPCA4KQorICAgICAgICAgICAgICAgIFVJQ1IwIHw9IDEgPDwgYkVuZHBvaW50QWRkcmVzczsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYkVuZHBvaW50QWRkcmVzcyAtPSA4OworICAgICAgICAgICAgICAgIFVJQ1IxIHw9IDEgPDwgYkVuZHBvaW50QWRkcmVzczsKKyAgICAgICAgfQorfQorCisvKiBUaGUgVURDQ1IgcmVnIGNvbnRhaW5zIG1hc2sgYW5kIGludGVycnVwdCBzdGF0dXMgYml0cywKKyAqIHNvIHVzaW5nICd8PScgaXNuJ3Qgc2FmZSBhcyBpdCBtYXkgYWNrIGFuIGludGVycnVwdC4KKyAqLworI2RlZmluZSBVRENDUl9NQVNLX0JJVFMgICAgICAgICAoVURDQ1JfUkVNIHwgVURDQ1JfU1JNIHwgVURDQ1JfVURFKQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWRjX3NldF9tYXNrX1VEQ0NSKGludCBtYXNrKQoreworCVVEQ0NSID0gKFVEQ0NSICYgVURDQ1JfTUFTS19CSVRTKSB8IChtYXNrICYgVURDQ1JfTUFTS19CSVRTKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVkY19jbGVhcl9tYXNrX1VEQ0NSKGludCBtYXNrKQoreworCVVEQ0NSID0gKFVEQ0NSICYgVURDQ1JfTUFTS19CSVRTKSAmIH4obWFzayAmIFVEQ0NSX01BU0tfQklUUyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1ZGNfYWNrX2ludF9VRENDUihpbnQgbWFzaykKK3sKKwkvKiB1ZGNjciBjb250YWlucyB0aGUgYml0cyB3ZSBkb250IHdhbnQgdG8gY2hhbmdlICovCisJX191MzIgdWRjY3IgPSBVRENDUiAmIFVEQ0NSX01BU0tfQklUUzsKKworCVVEQ0NSID0gdWRjY3IgfCAobWFzayAmIH5VRENDUl9NQVNLX0JJVFMpOworfQorCisvKgorICogZW5kcG9pbnQgZW5hYmxlL2Rpc2FibGUKKyAqCisgKiB3ZSBuZWVkIHRvIHZlcmlmeSB0aGUgZGVzY3JpcHRvcnMgdXNlZCB0byBlbmFibGUgZW5kcG9pbnRzLiAgc2luY2UgcHhhMnh4CisgKiBlbmRwb2ludCBjb25maWd1cmF0aW9ucyBhcmUgZml4ZWQsIGFuZCBhcmUgcHJldHR5IG11Y2ggYWx3YXlzIGVuYWJsZWQsCisgKiB0aGVyZSdzIG5vdCBhIGxvdCB0byBtYW5hZ2UgaGVyZS4KKyAqCisgKiBiZWNhdXNlIHB4YTJ4eCBjYW4ndCBzZWxlY3RpdmVseSBpbml0aWFsaXplIGJ1bGsgKG9yIGludGVycnVwdCkgZW5kcG9pbnRzLAorICogKHJlc2V0dGluZyBlbmRwb2ludCBoYWx0IGFuZCB0b2dnbGUpLCBTRVRfSU5URVJGQUNFIGlzIHVudXNhYmxlIGV4Y2VwdAorICogZm9yIGEgc2luZ2xlIGludGVyZmFjZSAod2l0aCBvbmx5IHRoZSBkZWZhdWx0IGFsdHNldHRpbmcpIGFuZCBmb3IgZ2FkZ2V0CisgKiBkcml2ZXJzIHRoYXQgZG9uJ3QgaGFsdCBlbmRwb2ludHMgKG5vdCByZXNldCBieSBzZXRfaW50ZXJmYWNlKS4gIHRoYXQgYWxzbworICogbWVhbnMgdGhhdCBpZiB5b3UgdXNlIElTTywgeW91IG11c3QgdmlvbGF0ZSB0aGUgVVNCIHNwZWMgcnVsZSB0aGF0IGFsbAorICogaXNvIGVuZHBvaW50cyBtdXN0IGJlIGluIG5vbi1kZWZhdWx0IGFsdHNldHRpbmdzLgorICovCitzdGF0aWMgaW50IHB4YTJ4eF9lcF9lbmFibGUgKHN0cnVjdCB1c2JfZXAgKl9lcCwKKwkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjKQoreworCXN0cnVjdCBweGEyeHhfZXAgICAgICAgICplcDsKKwlzdHJ1Y3QgcHhhMnh4X3VkYyAgICAgICAqZGV2OworCisJZXAgPSBjb250YWluZXJfb2YgKF9lcCwgc3RydWN0IHB4YTJ4eF9lcCwgZXApOworCWlmICghX2VwIHx8ICFkZXNjIHx8IGVwLT5kZXNjIHx8IF9lcC0+bmFtZSA9PSBlcDBuYW1lCisJCQl8fCBkZXNjLT5iRGVzY3JpcHRvclR5cGUgIT0gVVNCX0RUX0VORFBPSU5UCisJCQl8fCBlcC0+YkVuZHBvaW50QWRkcmVzcyAhPSBkZXNjLT5iRW5kcG9pbnRBZGRyZXNzCisJCQl8fCBlcC0+Zmlmb19zaXplIDwgbGUxNl90b19jcHUKKwkJCQkJCShkZXNjLT53TWF4UGFja2V0U2l6ZSkpIHsKKwkJRE1TRygiJXMsIGJhZCBlcCBvciBkZXNjcmlwdG9yXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiB4ZmVyIHR5cGVzIG11c3QgbWF0Y2gsIGV4Y2VwdCB0aGF0IGludGVycnVwdCB+PSBidWxrICovCisJaWYgKGVwLT5ibUF0dHJpYnV0ZXMgIT0gZGVzYy0+Ym1BdHRyaWJ1dGVzCisJCQkmJiBlcC0+Ym1BdHRyaWJ1dGVzICE9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEsKKwkJCSYmIGRlc2MtPmJtQXR0cmlidXRlcyAhPSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpIHsKKwkJRE1TRygiJXMsICVzIHR5cGUgbWlzbWF0Y2hcbiIsIF9fRlVOQ1RJT05fXywgX2VwLT5uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogaGFyZHdhcmUgX2NvdWxkXyBkbyBzbWFsbGVyLCBidXQgZHJpdmVyIGRvZXNuJ3QgKi8KKwlpZiAoKGRlc2MtPmJtQXR0cmlidXRlcyA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLCisJCQkJJiYgbGUxNl90b19jcHUgKGRlc2MtPndNYXhQYWNrZXRTaXplKQorCQkJCQkJIT0gQlVMS19GSUZPX1NJWkUpCisJCQl8fCAhZGVzYy0+d01heFBhY2tldFNpemUpIHsKKwkJRE1TRygiJXMsIGJhZCAlcyBtYXhwYWNrZXRcbiIsIF9fRlVOQ1RJT05fXywgX2VwLT5uYW1lKTsKKwkJcmV0dXJuIC1FUkFOR0U7CisJfQorCisJZGV2ID0gZXAtPmRldjsKKwlpZiAoIWRldi0+ZHJpdmVyIHx8IGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKSB7CisJCURNU0coIiVzLCBib2d1cyBkZXZpY2Ugc3RhdGVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRVNIVVRET1dOOworCX0KKworCWVwLT5kZXNjID0gZGVzYzsKKwllcC0+ZG1hID0gLTE7CisJZXAtPnN0b3BwZWQgPSAwOworCWVwLT5waW9faXJxcyA9IGVwLT5kbWFfaXJxcyA9IDA7CisJZXAtPmVwLm1heHBhY2tldCA9IGxlMTZfdG9fY3B1IChkZXNjLT53TWF4UGFja2V0U2l6ZSk7CisKKwkvKiBmbHVzaCBmaWZvIChtb3N0bHkgZm9yIE9VVCBidWZmZXJzKSAqLworCXB4YTJ4eF9lcF9maWZvX2ZsdXNoIChfZXApOworCisJLyogLi4uIHJlc2V0IGhhbHQgc3RhdGUgdG9vLCBpZiB3ZSBjb3VsZCAuLi4gKi8KKworI2lmZGVmCVVTRV9ETUEKKwkvKiBmb3IgKHNvbWUpIGJ1bGsgYW5kIElTTyBlbmRwb2ludHMsIHRyeSB0byBnZXQgYSBETUEgY2hhbm5lbCBhbmQKKwkgKiBiaW5kIGl0IHRvIHRoZSBlbmRwb2ludC4gIG90aGVyd2lzZSB1c2UgUElPLiAKKwkgKi8KKwlzd2l0Y2ggKGVwLT5ibUF0dHJpYnV0ZXMpIHsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0M6CisJCWlmIChsZTE2X3RvX2NwdShkZXNjLT53TWF4UGFja2V0U2l6ZSkgJSAzMikKKwkJCWJyZWFrOworCQkvLyBmYWxsIHRocm91Z2gKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEs6CisJCWlmICghdXNlX2RtYSB8fCAhZXAtPnJlZ19kcmNtcikKKwkJCWJyZWFrOworCQllcC0+ZG1hID0gcHhhX3JlcXVlc3RfZG1hICgoY2hhciAqKV9lcC0+bmFtZSwKKyAJCQkJKGxlMTZfdG9fY3B1IChkZXNjLT53TWF4UGFja2V0U2l6ZSkgPiA2NCkKKwkJCQkJPyBETUFfUFJJT19NRURJVU0gLyogc29tZSBpc28gKi8KKwkJCQkJOiBETUFfUFJJT19MT1csCisJCQkJZG1hX25vZGVzY19oYW5kbGVyLCBlcCk7CisJCWlmIChlcC0+ZG1hID49IDApIHsKKwkJCSplcC0+cmVnX2RyY21yID0gRFJDTVJfTUFQVkxEIHwgZXAtPmRtYTsKKwkJCURNU0coIiVzIHVzaW5nIGRtYSVkXG4iLCBfZXAtPm5hbWUsIGVwLT5kbWEpOworCQl9CisJfQorI2VuZGlmCisKKwlEQkcoREJHX1ZFUkJPU0UsICJlbmFibGVkICVzXG4iLCBfZXAtPm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB4YTJ4eF9lcF9kaXNhYmxlIChzdHJ1Y3QgdXNiX2VwICpfZXApCit7CisJc3RydWN0IHB4YTJ4eF9lcAkqZXA7CisKKwllcCA9IGNvbnRhaW5lcl9vZiAoX2VwLCBzdHJ1Y3QgcHhhMnh4X2VwLCBlcCk7CisJaWYgKCFfZXAgfHwgIWVwLT5kZXNjKSB7CisJCURNU0coIiVzLCAlcyBub3QgZW5hYmxlZFxuIiwgX19GVU5DVElPTl9fLAorCQkJX2VwID8gZXAtPmVwLm5hbWUgOiBOVUxMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW51a2UgKGVwLCAtRVNIVVRET1dOKTsKKworI2lmZGVmCVVTRV9ETUEKKwlpZiAoZXAtPmRtYSA+PSAwKSB7CisJCSplcC0+cmVnX2RyY21yID0gMDsKKwkJcHhhX2ZyZWVfZG1hIChlcC0+ZG1hKTsKKwkJZXAtPmRtYSA9IC0xOworCX0KKyNlbmRpZgorCisJLyogZmx1c2ggZmlmbyAobW9zdGx5IGZvciBJTiBidWZmZXJzKSAqLworCXB4YTJ4eF9lcF9maWZvX2ZsdXNoIChfZXApOworCisJZXAtPmRlc2MgPSBOVUxMOworCWVwLT5zdG9wcGVkID0gMTsKKworCURCRyhEQkdfVkVSQk9TRSwgIiVzIGRpc2FibGVkXG4iLCBfZXAtPm5hbWUpOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBmb3IgdGhlIHB4YTJ4eCwgdGhlc2UgY2FuIGp1c3Qgd3JhcCBrbWFsbG9jL2tmcmVlLiAgZ2FkZ2V0IGRyaXZlcnMKKyAqIG11c3Qgc3RpbGwgcGFzcyBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgZW5kcG9pbnRzLCBzaW5jZSBvdGhlciBjb250cm9sbGVyCisgKiBkcml2ZXJzIG1heSBjYXJlIGFib3V0IGhvdyBpdCdzIGN1cnJlbnRseSBzZXQgdXAgKGRtYSBpc3N1ZXMgZXRjKS4KKyAqLworCisvKgorICogCXB4YTJ4eF9lcF9hbGxvY19yZXF1ZXN0IC0gYWxsb2NhdGUgYSByZXF1ZXN0IGRhdGEgc3RydWN0dXJlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX3JlcXVlc3QgKgorcHhhMnh4X2VwX2FsbG9jX3JlcXVlc3QgKHN0cnVjdCB1c2JfZXAgKl9lcCwgaW50IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QgKnJlcTsKKworCXJlcSA9IGttYWxsb2MgKHNpemVvZiAqcmVxLCBnZnBfZmxhZ3MpOworCWlmICghcmVxKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldCAocmVxLCAwLCBzaXplb2YgKnJlcSk7CisJSU5JVF9MSVNUX0hFQUQgKCZyZXEtPnF1ZXVlKTsKKwlyZXR1cm4gJnJlcS0+cmVxOworfQorCisKKy8qCisgKiAJcHhhMnh4X2VwX2ZyZWVfcmVxdWVzdCAtIGRlYWxsb2NhdGUgYSByZXF1ZXN0IGRhdGEgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkCitweGEyeHhfZXBfZnJlZV9yZXF1ZXN0IChzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSkKK3sKKwlzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QJKnJlcTsKKworCXJlcSA9IGNvbnRhaW5lcl9vZiAoX3JlcSwgc3RydWN0IHB4YTJ4eF9yZXF1ZXN0LCByZXEpOworCVdBUk5fT04gKCFsaXN0X2VtcHR5ICgmcmVxLT5xdWV1ZSkpOworCWtmcmVlKHJlcSk7Cit9CisKKworLyogUFhBIGNhY2hlIG5lZWRzIGZsdXNoaW5nIHdpdGggRE1BIEkvTyAoaXQncyBkbWEtaW5jb2hlcmVudCksIGJ1dCB0aGVyZSdzCisgKiBubyBkZXZpY2UtYWZmaW5pdHkgYW5kIHRoZSBoZWFwIHdvcmtzIHBlcmZlY3RseSB3ZWxsIGZvciBpL28gYnVmZmVycy4KKyAqIEl0IHdhc3RlcyBtdWNoIGxlc3MgbWVtb3J5IHRoYW4gZG1hX2FsbG9jX2NvaGVyZW50KCkgd291bGQsIGFuZCBldmVuCisgKiBwcmV2ZW50cyBjYWNoZWxpbmUgKDMyIGJ5dGVzIHdpZGUpIHNoYXJpbmcgcHJvYmxlbXMuCisgKi8KK3N0YXRpYyB2b2lkICoKK3B4YTJ4eF9lcF9hbGxvY19idWZmZXIoc3RydWN0IHVzYl9lcCAqX2VwLCB1bnNpZ25lZCBieXRlcywKKwlkbWFfYWRkcl90ICpkbWEsIGludCBnZnBfZmxhZ3MpCit7CisJY2hhcgkJCSpyZXR2YWw7CisKKwlyZXR2YWwgPSBrbWFsbG9jIChieXRlcywgZ2ZwX2ZsYWdzICYgfihfX0dGUF9ETUF8X19HRlBfSElHSE1FTSkpOworCWlmIChyZXR2YWwpCisjaWZkZWYJVVNFX0RNQQorCQkqZG1hID0gdmlydF90b19idXMgKHJldHZhbCk7CisjZWxzZQorCQkqZG1hID0gKGRtYV9hZGRyX3QpfjA7CisjZW5kaWYKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZAorcHhhMnh4X2VwX2ZyZWVfYnVmZmVyKHN0cnVjdCB1c2JfZXAgKl9lcCwgdm9pZCAqYnVmLCBkbWFfYWRkcl90IGRtYSwKKwkJdW5zaWduZWQgYnl0ZXMpCit7CisJa2ZyZWUgKGJ1Zik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKglkb25lIC0gcmV0aXJlIGEgcmVxdWVzdDsgY2FsbGVyIGJsb2NrZWQgaXJxcworICovCitzdGF0aWMgdm9pZCBkb25lKHN0cnVjdCBweGEyeHhfZXAgKmVwLCBzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QgKnJlcSwgaW50IHN0YXR1cykKK3sKKwl1bnNpZ25lZAkJc3RvcHBlZCA9IGVwLT5zdG9wcGVkOworCisJbGlzdF9kZWxfaW5pdCgmcmVxLT5xdWV1ZSk7CisKKwlpZiAobGlrZWx5IChyZXEtPnJlcS5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSkKKwkJcmVxLT5yZXEuc3RhdHVzID0gc3RhdHVzOworCWVsc2UKKwkJc3RhdHVzID0gcmVxLT5yZXEuc3RhdHVzOworCisJaWYgKHN0YXR1cyAmJiBzdGF0dXMgIT0gLUVTSFVURE9XTikKKwkJREJHKERCR19WRVJCT1NFLCAiY29tcGxldGUgJXMgcmVxICVwIHN0YXQgJWQgbGVuICV1LyV1XG4iLAorCQkJZXAtPmVwLm5hbWUsICZyZXEtPnJlcSwgc3RhdHVzLAorCQkJcmVxLT5yZXEuYWN0dWFsLCByZXEtPnJlcS5sZW5ndGgpOworCisJLyogZG9uJ3QgbW9kaWZ5IHF1ZXVlIGhlYWRzIGR1cmluZyBjb21wbGV0aW9uIGNhbGxiYWNrICovCisJZXAtPnN0b3BwZWQgPSAxOworCXJlcS0+cmVxLmNvbXBsZXRlKCZlcC0+ZXAsICZyZXEtPnJlcSk7CisJZXAtPnN0b3BwZWQgPSBzdG9wcGVkOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlcDBfaWRsZSAoc3RydWN0IHB4YTJ4eF91ZGMgKmRldikKK3sKKwlkZXYtPmVwMHN0YXRlID0gRVAwX0lETEU7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlX3BhY2tldCh2b2xhdGlsZSB1MzIgKnVkZHIsIHN0cnVjdCBweGEyeHhfcmVxdWVzdCAqcmVxLCB1bnNpZ25lZCBtYXgpCit7CisJdTgJCSpidWY7CisJdW5zaWduZWQJbGVuZ3RoLCBjb3VudDsKKworCWJ1ZiA9IHJlcS0+cmVxLmJ1ZiArIHJlcS0+cmVxLmFjdHVhbDsKKwlwcmVmZXRjaChidWYpOworCisJLyogaG93IGJpZyB3aWxsIHRoaXMgcGFja2V0IGJlPyAqLworCWxlbmd0aCA9IG1pbihyZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWwsIG1heCk7CisJcmVxLT5yZXEuYWN0dWFsICs9IGxlbmd0aDsKKworCWNvdW50ID0gbGVuZ3RoOworCXdoaWxlIChsaWtlbHkoY291bnQtLSkpCisJCSp1ZGRyID0gKmJ1ZisrOworCisJcmV0dXJuIGxlbmd0aDsKK30KKworLyoKKyAqIHdyaXRlIHRvIGFuIElOIGVuZHBvaW50IGZpZm8sIGFzIG1hbnkgcGFja2V0cyBhcyBwb3NzaWJsZS4KKyAqIGlycXMgd2lsbCB1c2UgdGhpcyB0byB3cml0ZSB0aGUgcmVzdCBsYXRlci4KKyAqIGNhbGxlciBndWFyYW50ZWVzIGF0IGxlYXN0IG9uZSBwYWNrZXQgYnVmZmVyIGlzIHJlYWR5IChvciBhIHpscCkuCisgKi8KK3N0YXRpYyBpbnQKK3dyaXRlX2ZpZm8gKHN0cnVjdCBweGEyeHhfZXAgKmVwLCBzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QgKnJlcSkKK3sKKwl1bnNpZ25lZAkJbWF4OworCisJbWF4ID0gbGUxNl90b19jcHUoZXAtPmRlc2MtPndNYXhQYWNrZXRTaXplKTsKKwlkbyB7CisJCXVuc2lnbmVkCWNvdW50OworCQlpbnQJCWlzX2xhc3QsIGlzX3Nob3J0OworCisJCWNvdW50ID0gd3JpdGVfcGFja2V0KGVwLT5yZWdfdWRkciwgcmVxLCBtYXgpOworCisJCS8qIGxhc3QgcGFja2V0IGlzIHVzdWFsbHkgc2hvcnQgKG9yIGEgemxwKSAqLworCQlpZiAodW5saWtlbHkgKGNvdW50ICE9IG1heCkpCisJCQlpc19sYXN0ID0gaXNfc2hvcnQgPSAxOworCQllbHNlIHsKKwkJCWlmIChsaWtlbHkocmVxLT5yZXEubGVuZ3RoICE9IHJlcS0+cmVxLmFjdHVhbCkKKwkJCQkJfHwgcmVxLT5yZXEuemVybykKKwkJCQlpc19sYXN0ID0gMDsKKwkJCWVsc2UKKwkJCQlpc19sYXN0ID0gMTsKKwkJCS8qIGludGVycnVwdC9pc28gbWF4cGFja2V0IG1heSBub3QgZmlsbCB0aGUgZmlmbyAqLworCQkJaXNfc2hvcnQgPSB1bmxpa2VseSAobWF4IDwgZXAtPmZpZm9fc2l6ZSk7CisJCX0KKworCQlEQkcoREJHX1ZFUllfTk9JU1ksICJ3cm90ZSAlcyAlZCBieXRlcyVzJXMgJWQgbGVmdCAlcFxuIiwKKwkJCWVwLT5lcC5uYW1lLCBjb3VudCwKKwkJCWlzX2xhc3QgPyAiL0wiIDogIiIsIGlzX3Nob3J0ID8gIi9TIiA6ICIiLAorCQkJcmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsLCByZXEpOworCisJCS8qIGxldCBsb29zZSB0aGF0IHBhY2tldC4gbWF5YmUgdHJ5IHdyaXRpbmcgYW5vdGhlciBvbmUsCisJCSAqIGRvdWJsZSBidWZmZXJpbmcgbWlnaHQgd29yay4gIFRTUCwgVFBDLCBhbmQgVEZTCisJCSAqIGJpdCB2YWx1ZXMgYXJlIHRoZSBzYW1lIGZvciBhbGwgbm9ybWFsIElOIGVuZHBvaW50cy4KKwkJICovCisJCSplcC0+cmVnX3VkY2NzID0gVURDQ1NfQklfVFBDOworCQlpZiAoaXNfc2hvcnQpCisJCQkqZXAtPnJlZ191ZGNjcyA9IFVEQ0NTX0JJX1RTUDsKKworCQkvKiByZXF1ZXN0cyBjb21wbGV0ZSB3aGVuIGFsbCBJTiBkYXRhIGlzIGluIHRoZSBGSUZPICovCisJCWlmIChpc19sYXN0KSB7CisJCQlkb25lIChlcCwgcmVxLCAwKTsKKwkJCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpIHx8IHVubGlrZWx5KGVwLT5kbWEgPj0gMCkpIHsKKwkJCQlwaW9faXJxX2Rpc2FibGUgKGVwLT5iRW5kcG9pbnRBZGRyZXNzKTsKKyNpZmRlZiBVU0VfRE1BCisJCQkJLyogdW5hbGlnbmVkIGRhdGEgYW5kIHpscHMgY291bGRuJ3QgdXNlIGRtYSAqLworCQkJCWlmICh1bmxpa2VseSghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkpIHsKKwkJCQkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwKKwkJCQkJCXN0cnVjdCBweGEyeHhfcmVxdWVzdCwgcXVldWUpOworCQkJCQlraWNrX2RtYShlcCxyZXEpOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisjZW5kaWYKKwkJCX0KKwkJCXJldHVybiAxOworCQl9CisKKwkJLy8gVE9ETyBleHBlcmltZW50OiBob3cgcm9idXN0IGNhbiBmaWZvIG1vZGUgdHdlYWtpbmcgYmU/CisJCS8vIGRvdWJsZSBidWZmZXJpbmcgaXMgb2ZmIGluIHRoZSBkZWZhdWx0IGZpZm8gbW9kZSwgd2hpY2gKKwkJLy8gcHJldmVudHMgVEZTIGZyb20gYmVpbmcgc2V0IGhlcmUuCisKKwl9IHdoaWxlICgqZXAtPnJlZ191ZGNjcyAmIFVEQ0NTX0JJX1RGUyk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGNhbGxlciBhc3NlcnRzIHJlcS0+cGVuZGluZyAoZXAwIGlycSBzdGF0dXMgbnlldCBjbGVhcmVkKTsgc3RhcnRzCisgKiBlcDAgZGF0YSBzdGFnZS4gIHRoZXNlIGNoaXBzIHdhbnQgdmVyeSBzaW1wbGUgc3RhdGUgdHJhbnNpdGlvbnMuCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZXAwc3RhcnQoc3RydWN0IHB4YTJ4eF91ZGMgKmRldiwgdTMyIGZsYWdzLCBjb25zdCBjaGFyICp0YWcpCit7CisJVURDQ1MwID0gZmxhZ3N8VURDQ1MwX1NBfFVEQ0NTMF9PUFI7CisJVVNJUjAgPSBVU0lSMF9JUjA7CisJZGV2LT5yZXFfcGVuZGluZyA9IDA7CisJREJHKERCR19WRVJZX05PSVNZLCAiJXMgJXMsICUwMngvJTAyeFxuIiwKKwkJX19GVU5DVElPTl9fLCB0YWcsIFVEQ0NTMCwgZmxhZ3MpOworfQorCitzdGF0aWMgaW50Cit3cml0ZV9lcDBfZmlmbyAoc3RydWN0IHB4YTJ4eF9lcCAqZXAsIHN0cnVjdCBweGEyeHhfcmVxdWVzdCAqcmVxKQoreworCXVuc2lnbmVkCWNvdW50OworCWludAkJaXNfc2hvcnQ7CisKKwljb3VudCA9IHdyaXRlX3BhY2tldCgmVUREUjAsIHJlcSwgRVAwX0ZJRk9fU0laRSk7CisJZXAtPmRldi0+c3RhdHMud3JpdGUuYnl0ZXMgKz0gY291bnQ7CisKKwkvKiBsYXN0IHBhY2tldCAibXVzdCBiZSIgc2hvcnQgKG9yIGEgemxwKSAqLworCWlzX3Nob3J0ID0gKGNvdW50ICE9IEVQMF9GSUZPX1NJWkUpOworCisJREJHKERCR19WRVJZX05PSVNZLCAiZXAwaW4gJWQgYnl0ZXMgJWQgbGVmdCAlcFxuIiwgY291bnQsCisJCXJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbCwgcmVxKTsKKworCWlmICh1bmxpa2VseSAoaXNfc2hvcnQpKSB7CisJCWlmIChlcC0+ZGV2LT5yZXFfcGVuZGluZykKKwkJCWVwMHN0YXJ0KGVwLT5kZXYsIFVEQ0NTMF9JUFIsICJzaG9ydCBJTiIpOworCQllbHNlCisJCQlVRENDUzAgPSBVRENDUzBfSVBSOworCisJCWNvdW50ID0gcmVxLT5yZXEubGVuZ3RoOworCQlkb25lIChlcCwgcmVxLCAwKTsKKwkJZXAwX2lkbGUoZXAtPmRldik7CisjaWYgMQorCQkvKiBUaGlzIHNlZW1zIHRvIGdldCByaWQgb2YgbG9zdCBzdGF0dXMgaXJxcyBpbiBzb21lIGNhc2VzOgorCQkgKiBob3N0IHJlc3BvbmRzIHF1aWNrbHksIG9yIG5leHQgcmVxdWVzdCBpbnZvbHZlcyBjb25maWcKKwkJICogY2hhbmdlIGF1dG9tYWdpYywgb3Igc2hvdWxkIGhhdmUgYmVlbiBoaWRkZW4sIG9yIC4uLgorCQkgKgorCQkgKiBGSVhNRSBnZXQgcmlkIG9mIGFsbCB1ZGVsYXlzIHBvc3NpYmxlLi4uCisJCSAqLworCQlpZiAoY291bnQgPj0gRVAwX0ZJRk9fU0laRSkgeworCQkJY291bnQgPSAxMDA7CisJCQlkbyB7CisJCQkJaWYgKChVRENDUzAgJiBVRENDUzBfT1BSKSAhPSAwKSB7CisJCQkJCS8qIGNsZWFyIE9QUiwgZ2VuZXJhdGUgYWNrICovCisJCQkJCVVEQ0NTMCA9IFVEQ0NTMF9PUFI7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQljb3VudC0tOworCQkJCXVkZWxheSgxKTsKKwkJCX0gd2hpbGUgKGNvdW50KTsKKwkJfQorI2VuZGlmCisJfSBlbHNlIGlmIChlcC0+ZGV2LT5yZXFfcGVuZGluZykKKwkJZXAwc3RhcnQoZXAtPmRldiwgMCwgIklOIik7CisJcmV0dXJuIGlzX3Nob3J0OworfQorCisKKy8qCisgKiByZWFkX2ZpZm8gLSAgdW5sb2FkIHBhY2tldChzKSBmcm9tIHRoZSBmaWZvIHdlIHVzZSBmb3IgdXNiIE9VVAorICogdHJhbnNmZXJzIGFuZCBwdXQgdGhlbSBpbnRvIHRoZSByZXF1ZXN0LiAgY2FsbGVyIHNob3VsZCBoYXZlIG1hZGUKKyAqIHN1cmUgdGhlcmUncyBhdCBsZWFzdCBvbmUgcGFja2V0IHJlYWR5LgorICoKKyAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdCBjb21wbGV0ZWQgYmVjYXVzZSBvZiBzaG9ydCBwYWNrZXQgb3IgdGhlCisgKiByZXF1ZXN0IGJ1ZmZlciBoYXZpbmcgZmlsbGVkIChhbmQgbWF5YmUgb3ZlcnJhbiB0aWxsIGVuZC1vZi1wYWNrZXQpLgorICovCitzdGF0aWMgaW50CityZWFkX2ZpZm8gKHN0cnVjdCBweGEyeHhfZXAgKmVwLCBzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QgKnJlcSkKK3sKKwlmb3IgKDs7KSB7CisJCXUzMgkJdWRjY3M7CisJCXU4CQkqYnVmOworCQl1bnNpZ25lZAlidWZmZXJzcGFjZSwgY291bnQsIGlzX3Nob3J0OworCisJCS8qIG1ha2Ugc3VyZSB0aGVyZSdzIGEgcGFja2V0IGluIHRoZSBGSUZPLgorCQkgKiBVRENDU197Qk8sSU99X1JQQyBhcmUgYWxsIHRoZSBzYW1lIGJpdCB2YWx1ZS4KKwkJICogVURDQ1Nfe0JPLElPfV9STkUgYXJlIGFsbCB0aGUgc2FtZSBiaXQgdmFsdWUuCisJCSAqLworCQl1ZGNjcyA9ICplcC0+cmVnX3VkY2NzOworCQlpZiAodW5saWtlbHkgKCh1ZGNjcyAmIFVEQ0NTX0JPX1JQQykgPT0gMCkpCisJCQlicmVhazsKKwkJYnVmID0gcmVxLT5yZXEuYnVmICsgcmVxLT5yZXEuYWN0dWFsOworCQlwcmVmZXRjaHcoYnVmKTsKKwkJYnVmZmVyc3BhY2UgPSByZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWw7CisKKwkJLyogcmVhZCBhbGwgYnl0ZXMgZnJvbSB0aGlzIHBhY2tldCAqLworCQlpZiAobGlrZWx5ICh1ZGNjcyAmIFVEQ0NTX0JPX1JORSkpIHsKKwkJCWNvdW50ID0gMSArICgweDBmZiAmICplcC0+cmVnX3ViY3IpOworCQkJcmVxLT5yZXEuYWN0dWFsICs9IG1pbiAoY291bnQsIGJ1ZmZlcnNwYWNlKTsKKwkJfSBlbHNlIC8qIHpscCAqLworCQkJY291bnQgPSAwOworCQlpc19zaG9ydCA9IChjb3VudCA8IGVwLT5lcC5tYXhwYWNrZXQpOworCQlEQkcoREJHX1ZFUllfTk9JU1ksICJyZWFkICVzICUwMngsICVkIGJ5dGVzJXMgcmVxICVwICVkLyVkXG4iLAorCQkJZXAtPmVwLm5hbWUsIHVkY2NzLCBjb3VudCwKKwkJCWlzX3Nob3J0ID8gIi9TIiA6ICIiLAorCQkJcmVxLCByZXEtPnJlcS5hY3R1YWwsIHJlcS0+cmVxLmxlbmd0aCk7CisJCXdoaWxlIChsaWtlbHkgKGNvdW50LS0gIT0gMCkpIHsKKwkJCXU4CWJ5dGUgPSAodTgpICplcC0+cmVnX3VkZHI7CisKKwkJCWlmICh1bmxpa2VseSAoYnVmZmVyc3BhY2UgPT0gMCkpIHsKKwkJCQkvKiB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgZHJpdmVyJ3MgYnVmZmVyCisJCQkJICogaXMgc21hbGxlciB0aGFuIHdoYXQgdGhlIGhvc3Qgc2VudC4KKwkJCQkgKiBkaXNjYXJkIHRoZSBleHRyYSBkYXRhLgorCQkJCSAqLworCQkJCWlmIChyZXEtPnJlcS5zdGF0dXMgIT0gLUVPVkVSRkxPVykKKwkJCQkJRE1TRygiJXMgb3ZlcmZsb3cgJWRcbiIsCisJCQkJCQllcC0+ZXAubmFtZSwgY291bnQpOworCQkJCXJlcS0+cmVxLnN0YXR1cyA9IC1FT1ZFUkZMT1c7CisJCQl9IGVsc2UgeworCQkJCSpidWYrKyA9IGJ5dGU7CisJCQkJYnVmZmVyc3BhY2UtLTsKKwkJCX0KKwkJfQorCQkqZXAtPnJlZ191ZGNjcyA9ICBVRENDU19CT19SUEM7CisJCS8qIFJQQy9SU1AvUk5FIGNvdWxkIG5vdyByZWZsZWN0IHRoZSBvdGhlciBwYWNrZXQgYnVmZmVyICovCisKKwkJLyogaXNvIGlzIG9uZSByZXF1ZXN0IHBlciBwYWNrZXQgKi8KKwkJaWYgKGVwLT5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykgeworCQkJaWYgKHVkY2NzICYgVURDQ1NfSU9fUk9GKQorCQkJCXJlcS0+cmVxLnN0YXR1cyA9IC1FSE9TVFVOUkVBQ0g7CisJCQkvKiBtb3JlIGxpa2UgImlzX2RvbmUiICovCisJCQlpc19zaG9ydCA9IDE7CisJCX0KKworCQkvKiBjb21wbGV0aW9uICovCisJCWlmIChpc19zaG9ydCB8fCByZXEtPnJlcS5hY3R1YWwgPT0gcmVxLT5yZXEubGVuZ3RoKSB7CisJCQlkb25lIChlcCwgcmVxLCAwKTsKKwkJCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQkJCXBpb19pcnFfZGlzYWJsZSAoZXAtPmJFbmRwb2ludEFkZHJlc3MpOworCQkJcmV0dXJuIDE7CisJCX0KKworCQkvKiBmaW5pc2hlZCB0aGF0IHBhY2tldC4gIHRoZSBuZXh0IG9uZSBtYXkgYmUgd2FpdGluZy4uLiAqLworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHNwZWNpYWwgZXAwIHZlcnNpb24gb2YgdGhlIGFib3ZlLiAgbm8gVUJDUjAgb3IgZG91YmxlIGJ1ZmZlcmluZzsgc3RhdHVzCisgKiBoYW5kc2hha2luZyBpcyBtYWdpYy4gIG1vc3QgZGV2aWNlIHByb3RvY29scyBkb24ndCBuZWVkIGNvbnRyb2wtT1VULgorICogQ0RDIHZlbmRvciBjb21tYW5kcyAoYW5kIFJORElTKSwgbWFzcyBzdG9yYWdlIENCL0NCSSwgYW5kIHNvbWUgb3RoZXIKKyAqIHByb3RvY29scyBkbyB1c2UgdGhlbS4KKyAqLworc3RhdGljIGludAorcmVhZF9lcDBfZmlmbyAoc3RydWN0IHB4YTJ4eF9lcCAqZXAsIHN0cnVjdCBweGEyeHhfcmVxdWVzdCAqcmVxKQoreworCXU4CQkqYnVmLCBieXRlOworCXVuc2lnbmVkCWJ1ZmZlcnNwYWNlOworCisJYnVmID0gcmVxLT5yZXEuYnVmICsgcmVxLT5yZXEuYWN0dWFsOworCWJ1ZmZlcnNwYWNlID0gcmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsOworCisJd2hpbGUgKFVEQ0NTMCAmIFVEQ0NTMF9STkUpIHsKKwkJYnl0ZSA9ICh1OCkgVUREUjA7CisKKwkJaWYgKHVubGlrZWx5IChidWZmZXJzcGFjZSA9PSAwKSkgeworCQkJLyogdGhpcyBoYXBwZW5zIHdoZW4gdGhlIGRyaXZlcidzIGJ1ZmZlcgorCQkJICogaXMgc21hbGxlciB0aGFuIHdoYXQgdGhlIGhvc3Qgc2VudC4KKwkJCSAqIGRpc2NhcmQgdGhlIGV4dHJhIGRhdGEuCisJCQkgKi8KKwkJCWlmIChyZXEtPnJlcS5zdGF0dXMgIT0gLUVPVkVSRkxPVykKKwkJCQlETVNHKCIlcyBvdmVyZmxvd1xuIiwgZXAtPmVwLm5hbWUpOworCQkJcmVxLT5yZXEuc3RhdHVzID0gLUVPVkVSRkxPVzsKKwkJfSBlbHNlIHsKKwkJCSpidWYrKyA9IGJ5dGU7CisJCQlyZXEtPnJlcS5hY3R1YWwrKzsKKwkJCWJ1ZmZlcnNwYWNlLS07CisJCX0KKwl9CisKKwlVRENDUzAgPSBVRENDUzBfT1BSIHwgVURDQ1MwX0lQUjsKKworCS8qIGNvbXBsZXRpb24gKi8KKwlpZiAocmVxLT5yZXEuYWN0dWFsID49IHJlcS0+cmVxLmxlbmd0aCkKKwkJcmV0dXJuIDE7CisKKwkvKiBmaW5pc2hlZCB0aGF0IHBhY2tldC4gIHRoZSBuZXh0IG9uZSBtYXkgYmUgd2FpdGluZy4uLiAqLworCXJldHVybiAwOworfQorCisjaWZkZWYJVVNFX0RNQQorCisjZGVmaW5lCU1BWF9JTl9ETUEJKChEQ01EX0xFTkdUSCArIDEpIC0gQlVMS19GSUZPX1NJWkUpCisKK3N0YXRpYyB2b2lkCitzdGFydF9kbWFfbm9kZXNjKHN0cnVjdCBweGEyeHhfZXAgKmVwLCBzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QgKnJlcSwgaW50IGlzX2luKQoreworCXUzMglkY21kID0gcmVxLT5yZXEubGVuZ3RoOworCXUzMglidWYgPSByZXEtPnJlcS5kbWE7CisJdTMyCWZpZm8gPSBpb192MnAgKCh1MzIpZXAtPnJlZ191ZGRyKTsKKworCS8qIGNhbGxlciBndWFyYW50ZWVzIHRoZXJlJ3MgYSBwYWNrZXQgb3IgbW9yZSByZW1haW5pbmcKKwkgKiAgLSBJTiBtYXkgZW5kIHdpdGggYSBzaG9ydCBwYWNrZXQgKFRTUCBzZXQgc2VwYXJhdGVseSksCisJICogIC0gT1VUIGlzIGFsd2F5cyBmdWxsIGxlbmd0aAorCSAqLworCWJ1ZiArPSByZXEtPnJlcS5hY3R1YWw7CisJZGNtZCAtPSByZXEtPnJlcS5hY3R1YWw7CisJZXAtPmRtYV9maXh1cCA9IDA7CisKKwkvKiBuby1kZXNjcmlwdG9yIG1vZGUgY2FuIGJlIHNpbXBsZSBmb3IgYnVsay1pbiwgaXNvLWluLCBpc28tb3V0ICovCisJRENTUihlcC0+ZG1hKSA9IERDU1JfTk9ERVNDOworCWlmIChpc19pbikgeworCQlEU0FEUihlcC0+ZG1hKSA9IGJ1ZjsKKwkJRFRBRFIoZXAtPmRtYSkgPSBmaWZvOworCQlpZiAoZGNtZCA+IE1BWF9JTl9ETUEpCisJCQlkY21kID0gTUFYX0lOX0RNQTsKKwkJZWxzZQorCQkJZXAtPmRtYV9maXh1cCA9IChkY21kICUgZXAtPmVwLm1heHBhY2tldCkgIT0gMDsKKwkJZGNtZCB8PSBEQ01EX0JVUlNUMzIgfCBEQ01EX1dJRFRIMQorCQkJfCBEQ01EX0ZMT1dUUkcgfCBEQ01EX0lOQ1NSQ0FERFI7CisJfSBlbHNlIHsKKyNpZmRlZiBVU0VfT1VUX0RNQQorCQlEU0FEUihlcC0+ZG1hKSA9IGZpZm87CisJCURUQURSKGVwLT5kbWEpID0gYnVmOworCQlpZiAoZXAtPmJtQXR0cmlidXRlcyAhPSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKQorCQkJZGNtZCA9IGVwLT5lcC5tYXhwYWNrZXQ7CisJCWRjbWQgfD0gRENNRF9CVVJTVDMyIHwgRENNRF9XSURUSDEKKwkJCXwgRENNRF9GTE9XU1JDIHwgRENNRF9JTkNUUkdBRERSOworI2VuZGlmCisJfQorCURDTUQoZXAtPmRtYSkgPSBkY21kOworCURDU1IoZXAtPmRtYSkgPSBEQ1NSX1JVTiB8IERDU1JfTk9ERVNDCisJCXwgKHVubGlrZWx5KGlzX2luKQorCQkJPyBEQ1NSX1NUT1BJUlFFTgkvKiB1c2UgZG1hX25vZGVzY19oYW5kbGVyKCkgKi8KKwkJCTogMCk7CQkJLyogdXNlIGhhbmRsZV9lcCgpICovCit9CisKK3N0YXRpYyB2b2lkIGtpY2tfZG1hKHN0cnVjdCBweGEyeHhfZXAgKmVwLCBzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QgKnJlcSkKK3sKKwlpbnQJaXNfaW4gPSBlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU47CisKKwlpZiAoaXNfaW4pIHsKKwkJLyogdW5hbGlnbmVkIHR4IGJ1ZmZlcnMgYW5kIHpscHMgb25seSB3b3JrIHdpdGggUElPICovCisJCWlmICgocmVxLT5yZXEuZG1hICYgMHgwZikgIT0gMAorCQkJCXx8IHVubGlrZWx5KChyZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWwpCisJCQkJCQk9PSAwKSkgeworCQkJcGlvX2lycV9lbmFibGUoZXAtPmJFbmRwb2ludEFkZHJlc3MpOworCQkJaWYgKCgqZXAtPnJlZ191ZGNjcyAmIFVEQ0NTX0JJX1RGUykgIT0gMCkKKwkJCQkodm9pZCkgd3JpdGVfZmlmbyhlcCwgcmVxKTsKKwkJfSBlbHNlIHsKKwkJCXN0YXJ0X2RtYV9ub2Rlc2MoZXAsIHJlcSwgVVNCX0RJUl9JTik7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoKHJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbCkgPCBlcC0+ZXAubWF4cGFja2V0KSB7CisJCQlETVNHKCIlcyBzaG9ydCBkbWEgcmVhZC4uLlxuIiwgZXAtPmVwLm5hbWUpOworCQkJLyogd2UncmUgYWx3YXlzIHNldCB1cCBmb3IgcGlvIG91dCAqLworCQkJcmVhZF9maWZvIChlcCwgcmVxKTsKKwkJfSBlbHNlIHsKKwkJCSplcC0+cmVnX3VkY2NzID0gVURDQ1NfQk9fRE1FCisJCQkJfCAoKmVwLT5yZWdfdWRjY3MgJiBVRENDU19CT19GU1QpOworCQkJc3RhcnRfZG1hX25vZGVzYyhlcCwgcmVxLCBVU0JfRElSX09VVCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNhbmNlbF9kbWEoc3RydWN0IHB4YTJ4eF9lcCAqZXApCit7CisJc3RydWN0IHB4YTJ4eF9yZXF1ZXN0CSpyZXE7CisJdTMyCQkJdG1wOworCisJaWYgKERDU1IoZXAtPmRtYSkgPT0gMCB8fCBsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQlyZXR1cm47CisKKwlEQ1NSKGVwLT5kbWEpID0gMDsKKwl3aGlsZSAoKERDU1IoZXAtPmRtYSkgJiBEQ1NSX1NUT1BTVEFURSkgPT0gMCkKKwkJY3B1X3JlbGF4KCk7CisKKwlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QsIHF1ZXVlKTsKKwl0bXAgPSBEQ01EKGVwLT5kbWEpICYgRENNRF9MRU5HVEg7CisJcmVxLT5yZXEuYWN0dWFsID0gcmVxLT5yZXEubGVuZ3RoIC0gKHRtcCAmIERDTURfTEVOR1RIKTsKKworCS8qIHRoZSBsYXN0IHR4IHBhY2tldCBtYXkgYmUgaW5jb21wbGV0ZSwgc28gZmx1c2ggdGhlIGZpZm8uCisJICogRklYTUUgY29ycmVjdCByZXEuYWN0dWFsIGlmIHdlIGNhbgorCSAqLworCWlmIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pCisJCSplcC0+cmVnX3VkY2NzID0gVURDQ1NfQklfRlRGOworfQorCisvKiBkbWEgY2hhbm5lbCBzdG9wcGVkIC4uLiBub3JtYWwgdHggZW5kIChJTiksIG9yIG9uIGVycm9yIChJTi9PVVQpICovCitzdGF0aWMgdm9pZCBkbWFfbm9kZXNjX2hhbmRsZXIoaW50IGRtYWNoLCB2b2lkICpfZXAsIHN0cnVjdCBwdF9yZWdzICpyKQoreworCXN0cnVjdCBweGEyeHhfZXAJKmVwID0gX2VwOworCXN0cnVjdCBweGEyeHhfcmVxdWVzdAkqcmVxOworCXUzMgkJCXRtcCwgY29tcGxldGVkOworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBweGEyeHhfcmVxdWVzdCwgcXVldWUpOworCisJZXAtPmRtYV9pcnFzKys7CisJZXAtPmRldi0+c3RhdHMuaXJxcysrOworCUhFWF9ESVNQTEFZKGVwLT5kZXYtPnN0YXRzLmlycXMpOworCisJLyogYWNrL2NsZWFyICovCisJdG1wID0gRENTUihlcC0+ZG1hKTsKKwlEQ1NSKGVwLT5kbWEpID0gdG1wOworCWlmICgodG1wICYgRENTUl9TVE9QU1RBVEUpID09IDAKKwkJCXx8IChEREFEUihlcC0+ZG1hKSAmIEREQURSX1NUT1ApICE9IDApIHsKKwkJREJHKERCR19WRVJCT1NFLCAiJXMsIGRjc3IgJTA4eCBkZGFkciAlMDh4XG4iLAorCQkJZXAtPmVwLm5hbWUsIERDU1IoZXAtPmRtYSksIEREQURSKGVwLT5kbWEpKTsKKwkJZ290byBkb25lOworCX0KKwlEQ1NSKGVwLT5kbWEpID0gMDsJLyogY2xlYXIgRENTUl9TVE9QU1RBVEUgKi8KKworCS8qIHVwZGF0ZSB0cmFuc2ZlciBzdGF0dXMgKi8KKwljb21wbGV0ZWQgPSB0bXAgJiBEQ1NSX0JVU0VSUjsKKwlpZiAoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKQorCQl0bXAgPSBEU0FEUihlcC0+ZG1hKTsKKwllbHNlCisJCXRtcCA9IERUQURSKGVwLT5kbWEpOworCXJlcS0+cmVxLmFjdHVhbCA9IHRtcCAtIHJlcS0+cmVxLmRtYTsKKworCS8qIEZJWE1FIHNlZW1zIHdlIHNvbWV0aW1lcyBzZWUgcGFydGlhbCB0cmFuc2ZlcnMuLi4gKi8KKworCWlmICh1bmxpa2VseShjb21wbGV0ZWQgIT0gMCkpCisJCXJlcS0+cmVxLnN0YXR1cyA9IC1FSU87CisJZWxzZSBpZiAocmVxLT5yZXEuYWN0dWFsKSB7CisJCS8qIHRoZXNlIHJlZ2lzdGVycyBoYXZlIHplcm9lcyBpbiBsb3cgYml0czsgdGhleSBtaXNjb3VudAorCQkgKiBzb21lIChlbmQtb2YtdHJhbnNmZXIpIHNob3J0IHBhY2tldHM6ICB0eCAxNCBhcyB0eCAxMgorCQkgKi8KKwkJaWYgKGVwLT5kbWFfZml4dXApCisJCQlyZXEtPnJlcS5hY3R1YWwgPSBtaW4ocmVxLT5yZXEuYWN0dWFsICsgMywKKwkJCQkJCXJlcS0+cmVxLmxlbmd0aCk7CisKKwkJdG1wID0gKHJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbCk7CisJCWNvbXBsZXRlZCA9ICh0bXAgPT0gMCk7CisJCWlmIChjb21wbGV0ZWQgJiYgKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikpIHsKKworCQkJLyogbWF5YmUgdmFsaWRhdGUgZmluYWwgc2hvcnQgcGFja2V0IC4uLiAqLworCQkJaWYgKChyZXEtPnJlcS5hY3R1YWwgJSBlcC0+ZXAubWF4cGFja2V0KSAhPSAwKQorCQkJCSplcC0+cmVnX3VkY2NzID0gVURDQ1NfQklfVFNQLyp8VURDQ1NfQklfVFBDKi87CisKKwkJCS8qIC4uLiBvciB6bHAsIHVzaW5nIHBpbyBmYWxsYmFjayAqLworCQkJZWxzZSBpZiAoZXAtPmJtQXR0cmlidXRlcyA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLCisJCQkJCSYmIHJlcS0+cmVxLnplcm8pIHsKKwkJCQlETVNHKCIlcyB6bHAgdGVybWluYXRlIC4uLlxuIiwgZXAtPmVwLm5hbWUpOworCQkJCWNvbXBsZXRlZCA9IDA7CisJCQl9CisJCX0KKwl9CisKKwlpZiAobGlrZWx5KGNvbXBsZXRlZCkpIHsKKwkJZG9uZShlcCwgcmVxLCAwKTsKKworCQkvKiBtYXliZSByZS1hY3RpdmF0ZSBhZnRlciBjb21wbGV0aW9uICovCisJCWlmIChlcC0+c3RvcHBlZCB8fCBsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQkJZ290byBkb25lOworCQlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QsIHF1ZXVlKTsKKwl9CisJa2lja19kbWEoZXAsIHJlcSk7Citkb25lOgorCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQKK3B4YTJ4eF9lcF9xdWV1ZShzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSwgaW50IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QJKnJlcTsKKwlzdHJ1Y3QgcHhhMnh4X2VwCSplcDsKKwlzdHJ1Y3QgcHhhMnh4X3VkYwkqZGV2OworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJcmVxID0gY29udGFpbmVyX29mKF9yZXEsIHN0cnVjdCBweGEyeHhfcmVxdWVzdCwgcmVxKTsKKwlpZiAodW5saWtlbHkgKCFfcmVxIHx8ICFfcmVxLT5jb21wbGV0ZSB8fCAhX3JlcS0+YnVmCisJCQl8fCAhbGlzdF9lbXB0eSgmcmVxLT5xdWV1ZSkpKSB7CisJCURNU0coIiVzLCBiYWQgcGFyYW1zXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBweGEyeHhfZXAsIGVwKTsKKwlpZiAodW5saWtlbHkgKCFfZXAgfHwgKCFlcC0+ZGVzYyAmJiBlcC0+ZXAubmFtZSAhPSBlcDBuYW1lKSkpIHsKKwkJRE1TRygiJXMsIGJhZCBlcFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2ID0gZXAtPmRldjsKKwlpZiAodW5saWtlbHkgKCFkZXYtPmRyaXZlcgorCQkJfHwgZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pKSB7CisJCURNU0coIiVzLCBib2d1cyBkZXZpY2Ugc3RhdGVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRVNIVVRET1dOOworCX0KKworCS8qIGlzbyBpcyBhbHdheXMgb25lIHBhY2tldCBwZXIgcmVxdWVzdCwgdGhhdCdzIHRoZSBvbmx5IHdheQorCSAqIHdlIGNhbiByZXBvcnQgcGVyLXBhY2tldCBzdGF0dXMuICB0aGF0IGFsc28gaGVscHMgd2l0aCBkbWEuCisJICovCisJaWYgKHVubGlrZWx5IChlcC0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MKKwkJCSYmIHJlcS0+cmVxLmxlbmd0aCA+IGxlMTZfdG9fY3B1CisJCQkJCQkoZXAtPmRlc2MtPndNYXhQYWNrZXRTaXplKSkpCisJCXJldHVybiAtRU1TR1NJWkU7CisKKyNpZmRlZglVU0VfRE1BCisJLy8gRklYTUUgY2FsbGVyIG1heSBhbHJlYWR5IGhhdmUgZG9uZSB0aGUgZG1hIG1hcHBpbmcKKwlpZiAoZXAtPmRtYSA+PSAwKSB7CisJCV9yZXEtPmRtYSA9IGRtYV9tYXBfc2luZ2xlKGRldi0+ZGV2LAorCQkJX3JlcS0+YnVmLCBfcmVxLT5sZW5ndGgsCisJCQkoKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgIT0gMCkKKwkJCQk/IERNQV9UT19ERVZJQ0UKKwkJCQk6IERNQV9GUk9NX0RFVklDRSk7CisJfQorI2VuZGlmCisKKwlEQkcoREJHX05PSVNZLCAiJXMgcXVldWUgcmVxICVwLCBsZW4gJWQgYnVmICVwXG4iLAorCSAgICAgX2VwLT5uYW1lLCBfcmVxLCBfcmVxLT5sZW5ndGgsIF9yZXEtPmJ1Zik7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlfcmVxLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJX3JlcS0+YWN0dWFsID0gMDsKKworCS8qIGtpY2tzdGFydCB0aGlzIGkvbyBxdWV1ZT8gKi8KKwlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSAmJiAhZXAtPnN0b3BwZWQpIHsKKwkJaWYgKGVwLT5kZXNjID09IDAgLyogZXAwICovKSB7CisJCQl1bnNpZ25lZAlsZW5ndGggPSBfcmVxLT5sZW5ndGg7CisKKwkJCXN3aXRjaCAoZGV2LT5lcDBzdGF0ZSkgeworCQkJY2FzZSBFUDBfSU5fREFUQV9QSEFTRToKKwkJCQlkZXYtPnN0YXRzLndyaXRlLm9wcysrOworCQkJCWlmICh3cml0ZV9lcDBfZmlmbyhlcCwgcmVxKSkKKwkJCQkJcmVxID0gTlVMTDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBFUDBfT1VUX0RBVEFfUEhBU0U6CisJCQkJZGV2LT5zdGF0cy5yZWFkLm9wcysrOworCQkJCS8qIG1lc3N5IC4uLiAqLworCQkJCWlmIChkZXYtPnJlcV9jb25maWcpIHsKKwkJCQkJREJHKERCR19WRVJCT1NFLCAiZXAwIGNvbmZpZyBhY2slc1xuIiwKKwkJCQkJCWRldi0+aGFzX2NmciA/ICAiIiA6ICIgcmFjZWQiKTsKKwkJCQkJaWYgKGRldi0+aGFzX2NmcikKKwkJCQkJCVVEQ0NGUiA9IFVEQ0NGUl9BUkVOfFVEQ0NGUl9BQ00KKwkJCQkJCQl8VURDQ0ZSX01CMTsKKwkJCQkJZG9uZShlcCwgcmVxLCAwKTsKKwkJCQkJZGV2LT5lcDBzdGF0ZSA9IEVQMF9FTkRfWEZFUjsKKwkJCQkJbG9jYWxfaXJxX3Jlc3RvcmUgKGZsYWdzKTsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJCWlmIChkZXYtPnJlcV9wZW5kaW5nKQorCQkJCQllcDBzdGFydChkZXYsIFVEQ0NTMF9JUFIsICJPVVQiKTsKKwkJCQlpZiAobGVuZ3RoID09IDAgfHwgKChVRENDUzAgJiBVRENDUzBfUk5FKSAhPSAwCisJCQkJCQkmJiByZWFkX2VwMF9maWZvKGVwLCByZXEpKSkgeworCQkJCQllcDBfaWRsZShkZXYpOworCQkJCQlkb25lKGVwLCByZXEsIDApOworCQkJCQlyZXEgPSBOVUxMOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlETVNHKCJlcDAgaS9vLCBvZGQgc3RhdGUgJWRcbiIsIGRldi0+ZXAwc3RhdGUpOworCQkJCWxvY2FsX2lycV9yZXN0b3JlIChmbGFncyk7CisJCQkJcmV0dXJuIC1FTDJITFQ7CisJCQl9CisjaWZkZWYJVVNFX0RNQQorCQkvKiBlaXRoZXIgc3RhcnQgZG1hIG9yIHByaW1lIHBpbyBwdW1wICovCisJCX0gZWxzZSBpZiAoZXAtPmRtYSA+PSAwKSB7CisJCQlraWNrX2RtYShlcCwgcmVxKTsKKyNlbmRpZgorCQkvKiBjYW4gdGhlIEZJRk8gY2FuIHNhdGlzZnkgdGhlIHJlcXVlc3QgaW1tZWRpYXRlbHk/ICovCisJCX0gZWxzZSBpZiAoKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgIT0gMAorCQkJCSYmICgqZXAtPnJlZ191ZGNjcyAmIFVEQ0NTX0JJX1RGUykgIT0gMAorCQkJCSYmIHdyaXRlX2ZpZm8oZXAsIHJlcSkpIHsKKwkJCXJlcSA9IE5VTEw7CisJCX0gZWxzZSBpZiAoKCplcC0+cmVnX3VkY2NzICYgVURDQ1NfQk9fUkZTKSAhPSAwCisJCQkJJiYgcmVhZF9maWZvKGVwLCByZXEpKSB7CisJCQlyZXEgPSBOVUxMOworCQl9CisKKwkJaWYgKGxpa2VseSAocmVxICYmIGVwLT5kZXNjKSAmJiBlcC0+ZG1hIDwgMCkKKwkJCXBpb19pcnFfZW5hYmxlKGVwLT5iRW5kcG9pbnRBZGRyZXNzKTsKKwl9CisKKwkvKiBwaW8gb3IgZG1hIGlycSBoYW5kbGVyIGFkdmFuY2VzIHRoZSBxdWV1ZS4gKi8KKwlpZiAobGlrZWx5IChyZXEgIT0gMCkpCisJCWxpc3RfYWRkX3RhaWwoJnJlcS0+cXVldWUsICZlcC0+cXVldWUpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisKKy8qCisgKiAJbnVrZSAtIGRlcXVldWUgQUxMIHJlcXVlc3RzCisgKi8KK3N0YXRpYyB2b2lkIG51a2Uoc3RydWN0IHB4YTJ4eF9lcCAqZXAsIGludCBzdGF0dXMpCit7CisJc3RydWN0IHB4YTJ4eF9yZXF1ZXN0ICpyZXE7CisKKwkvKiBjYWxsZWQgd2l0aCBpcnFzIGJsb2NrZWQgKi8KKyNpZmRlZglVU0VfRE1BCisJaWYgKGVwLT5kbWEgPj0gMCAmJiAhZXAtPnN0b3BwZWQpCisJCWNhbmNlbF9kbWEoZXApOworI2VuZGlmCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsCisJCQkJc3RydWN0IHB4YTJ4eF9yZXF1ZXN0LAorCQkJCXF1ZXVlKTsKKwkJZG9uZShlcCwgcmVxLCBzdGF0dXMpOworCX0KKwlpZiAoZXAtPmRlc2MpCisJCXBpb19pcnFfZGlzYWJsZSAoZXAtPmJFbmRwb2ludEFkZHJlc3MpOworfQorCisKKy8qIGRlcXVldWUgSlVTVCBPTkUgcmVxdWVzdCAqLworc3RhdGljIGludCBweGEyeHhfZXBfZGVxdWV1ZShzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSkKK3sKKwlzdHJ1Y3QgcHhhMnh4X2VwCSplcDsKKwlzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QJKnJlcTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IHB4YTJ4eF9lcCwgZXApOworCWlmICghX2VwIHx8IGVwLT5lcC5uYW1lID09IGVwMG5hbWUpCisJCXJldHVybiAtRUlOVkFMOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJLyogbWFrZSBzdXJlIGl0J3MgYWN0dWFsbHkgcXVldWVkIG9uIHRoaXMgZW5kcG9pbnQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7CisJCWlmICgmcmVxLT5yZXEgPT0gX3JlcSkKKwkJCWJyZWFrOworCX0KKwlpZiAoJnJlcS0+cmVxICE9IF9yZXEpIHsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKyNpZmRlZglVU0VfRE1BCisJaWYgKGVwLT5kbWEgPj0gMCAmJiBlcC0+cXVldWUubmV4dCA9PSAmcmVxLT5xdWV1ZSAmJiAhZXAtPnN0b3BwZWQpIHsKKwkJY2FuY2VsX2RtYShlcCk7CisJCWRvbmUoZXAsIHJlcSwgLUVDT05OUkVTRVQpOworCQkvKiByZXN0YXJ0IGkvbyAqLworCQlpZiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsCisJCQkJCXN0cnVjdCBweGEyeHhfcmVxdWVzdCwgcXVldWUpOworCQkJa2lja19kbWEoZXAsIHJlcSk7CisJCX0KKwl9IGVsc2UKKyNlbmRpZgorCQlkb25lKGVwLCByZXEsIC1FQ09OTlJFU0VUKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBweGEyeHhfZXBfc2V0X2hhbHQoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHB4YTJ4eF9lcAkqZXA7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBweGEyeHhfZXAsIGVwKTsKKwlpZiAodW5saWtlbHkgKCFfZXAKKwkJCXx8ICghZXAtPmRlc2MgJiYgZXAtPmVwLm5hbWUgIT0gZXAwbmFtZSkpCisJCQl8fCBlcC0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpIHsKKwkJRE1TRygiJXMsIGJhZCBlcFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICh2YWx1ZSA9PSAwKSB7CisJCS8qIHRoaXMgcGF0aCAocmVzZXQgdG9nZ2xlK2hhbHQpIGlzIG5lZWRlZCB0byBpbXBsZW1lbnQKKwkJICogU0VUX0lOVEVSRkFDRSBvbiBub3JtYWwgaGFyZHdhcmUuICBidXQgaXQgY2FuJ3QgYmUKKwkJICogZG9uZSBmcm9tIHNvZnR3YXJlIG9uIHRoZSBQWEEgVURDLCBhbmQgdGhlIGhhcmR3YXJlCisJCSAqIGZvcmdldHMgdG8gZG8gaXQgYXMgcGFydCBvZiBTRVRfSU5URVJGQUNFIGF1dG9tYWdpYy4KKwkJICovCisJCURNU0coIm9ubHkgaG9zdCBjYW4gY2xlYXIgJXMgaGFsdFxuIiwgX2VwLT5uYW1lKTsKKwkJcmV0dXJuIC1FUk9GUzsKKwl9CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlpZiAoKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgIT0gMAorCQkJJiYgKCgqZXAtPnJlZ191ZGNjcyAmIFVEQ0NTX0JJX1RGUykgPT0gMAorCQkJICAgfHwgIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpKSB7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJLyogRlNUIGJpdCBpcyB0aGUgc2FtZSBmb3IgY29udHJvbCwgYnVsayBpbiwgYnVsayBvdXQsIGludGVycnVwdCBpbiAqLworCSplcC0+cmVnX3VkY2NzID0gVURDQ1NfQklfRlNUfFVEQ0NTX0JJX0ZURjsKKworCS8qIGVwMCBuZWVkcyBzcGVjaWFsIGNhcmUgKi8KKwlpZiAoIWVwLT5kZXNjKSB7CisJCXN0YXJ0X3dhdGNoZG9nKGVwLT5kZXYpOworCQllcC0+ZGV2LT5yZXFfcGVuZGluZyA9IDA7CisJCWVwLT5kZXYtPmVwMHN0YXRlID0gRVAwX1NUQUxMOworCisgCS8qIGFuZCBidWxrL2ludHIgZW5kcG9pbnRzIGxpa2UgZHJvcHBpbmcgc3RhbGxzIHRvbyAqLworIAl9IGVsc2UgeworIAkJdW5zaWduZWQgaTsKKyAJCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpICs9IDIwKSB7CisgCQkJaWYgKCplcC0+cmVnX3VkY2NzICYgVURDQ1NfQklfU1NUKQorIAkJCQlicmVhazsKKyAJCQl1ZGVsYXkoMjApOworIAkJfQorICAJfQorIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlEQkcoREJHX1ZFUkJPU0UsICIlcyBoYWx0XG4iLCBfZXAtPm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB4YTJ4eF9lcF9maWZvX3N0YXR1cyhzdHJ1Y3QgdXNiX2VwICpfZXApCit7CisJc3RydWN0IHB4YTJ4eF9lcCAgICAgICAgKmVwOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgcHhhMnh4X2VwLCBlcCk7CisJaWYgKCFfZXApIHsKKwkJRE1TRygiJXMsIGJhZCBlcFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCS8qIHB4YSBjYW4ndCByZXBvcnQgdW5jbGFpbWVkIGJ5dGVzIGZyb20gSU4gZmlmb3MgKi8KKwlpZiAoKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgIT0gMCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCWlmIChlcC0+ZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04KKwkJCXx8ICgqZXAtPnJlZ191ZGNjcyAmIFVEQ0NTX0JPX1JGUykgPT0gMCkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gKCplcC0+cmVnX3ViY3IgJiAweGZmZikgKyAxOworfQorCitzdGF0aWMgdm9pZCBweGEyeHhfZXBfZmlmb19mbHVzaChzdHJ1Y3QgdXNiX2VwICpfZXApCit7CisJc3RydWN0IHB4YTJ4eF9lcCAgICAgICAgKmVwOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgcHhhMnh4X2VwLCBlcCk7CisJaWYgKCFfZXAgfHwgZXAtPmVwLm5hbWUgPT0gZXAwbmFtZSB8fCAhbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQlETVNHKCIlcywgYmFkIGVwXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJLyogdG9nZ2xlIGFuZCBoYWx0IGJpdHMgc3RheSB1bmNoYW5nZWQgKi8KKworCS8qIGZvciBPVVQsIGp1c3QgcmVhZCBhbmQgZGlzY2FyZCB0aGUgRklGTyBjb250ZW50cy4gKi8KKwlpZiAoKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgPT0gMCkgeworCQl3aGlsZSAoKCgqZXAtPnJlZ191ZGNjcykgJiBVRENDU19CT19STkUpICE9IDApCisJCQkodm9pZCkgKmVwLT5yZWdfdWRkcjsKKwkJcmV0dXJuOworCX0KKworCS8qIG1vc3QgSU4gc3RhdHVzIGlzIHRoZSBzYW1lLCBidXQgSVNPIGNhbid0IHN0YWxsICovCisJKmVwLT5yZWdfdWRjY3MgPSBVRENDU19CSV9UUEN8VURDQ1NfQklfRlRGfFVEQ0NTX0JJX1RVUgorCQl8IChlcC0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpCisJCQk/IDAgOiBVRENDU19CSV9TU1Q7Cit9CisKKworc3RhdGljIHN0cnVjdCB1c2JfZXBfb3BzIHB4YTJ4eF9lcF9vcHMgPSB7CisJLmVuYWJsZQkJPSBweGEyeHhfZXBfZW5hYmxlLAorCS5kaXNhYmxlCT0gcHhhMnh4X2VwX2Rpc2FibGUsCisKKwkuYWxsb2NfcmVxdWVzdAk9IHB4YTJ4eF9lcF9hbGxvY19yZXF1ZXN0LAorCS5mcmVlX3JlcXVlc3QJPSBweGEyeHhfZXBfZnJlZV9yZXF1ZXN0LAorCisJLmFsbG9jX2J1ZmZlcgk9IHB4YTJ4eF9lcF9hbGxvY19idWZmZXIsCisJLmZyZWVfYnVmZmVyCT0gcHhhMnh4X2VwX2ZyZWVfYnVmZmVyLAorCisJLnF1ZXVlCQk9IHB4YTJ4eF9lcF9xdWV1ZSwKKwkuZGVxdWV1ZQk9IHB4YTJ4eF9lcF9kZXF1ZXVlLAorCisJLnNldF9oYWx0CT0gcHhhMnh4X2VwX3NldF9oYWx0LAorCS5maWZvX3N0YXR1cwk9IHB4YTJ4eF9lcF9maWZvX3N0YXR1cywKKwkuZmlmb19mbHVzaAk9IHB4YTJ4eF9lcF9maWZvX2ZsdXNoLAorfTsKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIAlkZXZpY2Utc2NvcGVkIHBhcnRzIG9mIHRoZSBhcGkgdG8gdGhlIHVzYiBjb250cm9sbGVyIGhhcmR3YXJlCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitzdGF0aWMgaW50IHB4YTJ4eF91ZGNfZ2V0X2ZyYW1lKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0KQoreworCXJldHVybiAoKFVGTlJIICYgMHgwNykgPDwgOCkgfCAoVUZOUkwgJiAweGZmKTsKK30KKworc3RhdGljIGludCBweGEyeHhfdWRjX3dha2V1cChzdHJ1Y3QgdXNiX2dhZGdldCAqX2dhZGdldCkKK3sKKwkvKiBob3N0IG1heSBub3QgaGF2ZSBlbmFibGVkIHJlbW90ZSB3YWtldXAgKi8KKwlpZiAoKFVEQ0NTMCAmIFVEQ0NTMF9EUldGKSA9PSAwKQorCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKKwl1ZGNfc2V0X21hc2tfVURDQ1IoVURDQ1JfUlNNKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3RvcF9hY3Rpdml0eShzdHJ1Y3QgcHhhMnh4X3VkYyAqLCBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKik7CitzdGF0aWMgdm9pZCB1ZGNfZW5hYmxlIChzdHJ1Y3QgcHhhMnh4X3VkYyAqKTsKK3N0YXRpYyB2b2lkIHVkY19kaXNhYmxlKHN0cnVjdCBweGEyeHhfdWRjICopOworCisvKiBXZSBkaXNhYmxlIHRoZSBVREMgLS0gYW5kIGl0cyA0OCBNSHogY2xvY2sgLS0gd2hlbmV2ZXIgaXQncyBub3QKKyAqIGluIGFjdGl2ZSB1c2UuICAKKyAqLworc3RhdGljIGludCBwdWxsdXAoc3RydWN0IHB4YTJ4eF91ZGMgKnVkYywgaW50IGlzX2FjdGl2ZSkKK3sKKwlpc19hY3RpdmUgPSBpc19hY3RpdmUgJiYgdWRjLT52YnVzICYmIHVkYy0+cHVsbHVwOworCURNU0coIiVzXG4iLCBpc19hY3RpdmUgPyAiYWN0aXZlIiA6ICJpbmFjdGl2ZSIpOworCWlmIChpc19hY3RpdmUpCisJCXVkY19lbmFibGUodWRjKTsKKwllbHNlIHsKKwkJaWYgKHVkYy0+Z2FkZ2V0LnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOKSB7CisJCQlETVNHKCJkaXNjb25uZWN0ICVzXG4iLCB1ZGMtPmRyaXZlcgorCQkJCT8gdWRjLT5kcml2ZXItPmRyaXZlci5uYW1lCisJCQkJOiAiKG5vIGRyaXZlcikiKTsKKwkJCXN0b3BfYWN0aXZpdHkodWRjLCB1ZGMtPmRyaXZlcik7CisJCX0KKwkJdWRjX2Rpc2FibGUodWRjKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIFZCVVMgcmVwb3J0aW5nIGxvZ2ljYWxseSBjb21lcyBmcm9tIGEgdHJhbnNjZWl2ZXIgKi8KK3N0YXRpYyBpbnQgcHhhMnh4X3VkY192YnVzX3Nlc3Npb24oc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQsIGludCBpc19hY3RpdmUpCit7CisJc3RydWN0IHB4YTJ4eF91ZGMJKnVkYzsKKworCXVkYyA9IGNvbnRhaW5lcl9vZihfZ2FkZ2V0LCBzdHJ1Y3QgcHhhMnh4X3VkYywgZ2FkZ2V0KTsKKwl1ZGMtPnZidXMgPSBpc19hY3RpdmUgPSAoaXNfYWN0aXZlICE9IDApOworCURNU0coInZidXMgJXNcbiIsIGlzX2FjdGl2ZSA/ICJzdXBwbGllZCIgOiAiaW5hY3RpdmUiKTsKKwlwdWxsdXAodWRjLCBpc19hY3RpdmUpOworCXJldHVybiAwOworfQorCisvKiBkcml2ZXJzIG1heSBoYXZlIHNvZnR3YXJlIGNvbnRyb2wgb3ZlciBEKyBwdWxsdXAgKi8KK3N0YXRpYyBpbnQgcHhhMnh4X3VkY19wdWxsdXAoc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQsIGludCBpc19hY3RpdmUpCit7CisJc3RydWN0IHB4YTJ4eF91ZGMJKnVkYzsKKworCXVkYyA9IGNvbnRhaW5lcl9vZihfZ2FkZ2V0LCBzdHJ1Y3QgcHhhMnh4X3VkYywgZ2FkZ2V0KTsKKworCS8qIG5vdCBhbGwgYm9hcmRzIHN1cHBvcnQgcHVsbHVwIGNvbnRyb2wgKi8KKwlpZiAoIXVkYy0+bWFjaC0+dWRjX2NvbW1hbmQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlzX2FjdGl2ZSA9IChpc19hY3RpdmUgIT0gMCk7CisJdWRjLT5wdWxsdXAgPSBpc19hY3RpdmU7CisJcHVsbHVwKHVkYywgaXNfYWN0aXZlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZ2FkZ2V0X29wcyBweGEyeHhfdWRjX29wcyA9IHsKKwkuZ2V0X2ZyYW1lCT0gcHhhMnh4X3VkY19nZXRfZnJhbWUsCisJLndha2V1cAkJPSBweGEyeHhfdWRjX3dha2V1cCwKKwkudmJ1c19zZXNzaW9uCT0gcHhhMnh4X3VkY192YnVzX3Nlc3Npb24sCisJLnB1bGx1cAkJPSBweGEyeHhfdWRjX3B1bGx1cCwKKworCS8vIC52YnVzX2RyYXcgLi4uIGJvYXJkcyBtYXkgY29uc3VtZSBjdXJyZW50IGZyb20gVkJVUywgdXAgdG8KKwkvLyAxMDAtNTAwbUEgYmFzZWQgb24gY29uZmlnLiAgdGhlIDUwMHVBIHN1c3BlbmQgY2VpbGluZyBtZWFucworCS8vIHRoYXQgZXhjbHVzaXZlbHkgdmJ1cy1wb3dlcmVkIFBYQSBkZXNpZ25zIHZpb2xhdGUgVVNCIHNwZWNzLgorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTCisKK3N0YXRpYyBjb25zdCBjaGFyIHByb2Nfbm9kZV9uYW1lIFtdID0gImRyaXZlci91ZGMiOworCitzdGF0aWMgaW50Cit1ZGNfcHJvY19yZWFkKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCisJCWludCAqZW9mLCB2b2lkICpfZGV2KQoreworCWNoYXIJCQkqYnVmID0gcGFnZTsKKwlzdHJ1Y3QgcHhhMnh4X3VkYwkqZGV2ID0gX2RldjsKKwljaGFyCQkJKm5leHQgPSBidWY7CisJdW5zaWduZWQJCXNpemUgPSBjb3VudDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlpbnQJCQlpLCB0OworCXUzMgkJCXRtcDsKKworCWlmIChvZmYgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvKiBiYXNpYyBkZXZpY2Ugc3RhdHVzICovCisJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLCBEUklWRVJfREVTQyAiXG4iCisJCSIlcyB2ZXJzaW9uOiAlc1xuR2FkZ2V0IGRyaXZlcjogJXNcbkhvc3QgJXNcblxuIiwKKwkJZHJpdmVyX25hbWUsIERSSVZFUl9WRVJTSU9OIFNJWkVfU1RSIERNQVNUUiwKKwkJZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+ZHJpdmVyLm5hbWUgOiAiKG5vbmUpIiwKKwkJaXNfdXNiX2Nvbm5lY3RlZCgpID8gImZ1bGwgc3BlZWQiIDogImRpc2Nvbm5lY3RlZCIpOworCXNpemUgLT0gdDsKKwluZXh0ICs9IHQ7CisKKwkvKiByZWdpc3RlcnMgZm9yIGRldmljZSBhbmQgZXAwICovCisJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAorCQkidWljciAlMDJYLiUwMlgsIHVzaXIgJTAyWC4lMDJ4LCB1Zm5yICUwMlguJTAyWFxuIiwKKwkJVUlDUjEsIFVJQ1IwLCBVU0lSMSwgVVNJUjAsIFVGTlJILCBVRk5STCk7CisJc2l6ZSAtPSB0OworCW5leHQgKz0gdDsKKworCXRtcCA9IFVEQ0NSOworCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKKwkJInVkY2NyICUwMlggPSVzJXMlcyVzJXMlcyVzJXNcbiIsIHRtcCwKKwkJKHRtcCAmIFVEQ0NSX1JFTSkgPyAiIHJlbSIgOiAiIiwKKwkJKHRtcCAmIFVEQ0NSX1JTVElSKSA/ICIgcnN0aXIiIDogIiIsCisJCSh0bXAgJiBVRENDUl9TUk0pID8gIiBzcm0iIDogIiIsCisJCSh0bXAgJiBVRENDUl9TVVNJUikgPyAiIHN1c2lyIiA6ICIiLAorCQkodG1wICYgVURDQ1JfUkVTSVIpID8gIiByZXNpciIgOiAiIiwKKwkJKHRtcCAmIFVEQ0NSX1JTTSkgPyAiIHJzbSIgOiAiIiwKKwkJKHRtcCAmIFVEQ0NSX1VEQSkgPyAiIHVkYSIgOiAiIiwKKwkJKHRtcCAmIFVEQ0NSX1VERSkgPyAiIHVkZSIgOiAiIik7CisJc2l6ZSAtPSB0OworCW5leHQgKz0gdDsKKworCXRtcCA9IFVEQ0NTMDsKKwl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCisJCSJ1ZGNjczAgJTAyWCA9JXMlcyVzJXMlcyVzJXMlc1xuIiwgdG1wLAorCQkodG1wICYgVURDQ1MwX1NBKSA/ICIgc2EiIDogIiIsCisJCSh0bXAgJiBVRENDUzBfUk5FKSA/ICIgcm5lIiA6ICIiLAorCQkodG1wICYgVURDQ1MwX0ZTVCkgPyAiIGZzdCIgOiAiIiwKKwkJKHRtcCAmIFVEQ0NTMF9TU1QpID8gIiBzc3QiIDogIiIsCisJCSh0bXAgJiBVRENDUzBfRFJXRikgPyAiIGR3cmYiIDogIiIsCisJCSh0bXAgJiBVRENDUzBfRlRGKSA/ICIgZnRmIiA6ICIiLAorCQkodG1wICYgVURDQ1MwX0lQUikgPyAiIGlwciIgOiAiIiwKKwkJKHRtcCAmIFVEQ0NTMF9PUFIpID8gIiBvcHIiIDogIiIpOworCXNpemUgLT0gdDsKKwluZXh0ICs9IHQ7CisKKwlpZiAoZGV2LT5oYXNfY2ZyKSB7CisJCXRtcCA9IFVEQ0NGUjsKKwkJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAorCQkJInVkY2NmciAlMDJYID0lcyVzXG4iLCB0bXAsCisJCQkodG1wICYgVURDQ0ZSX0FSRU4pID8gIiBhcmVuIiA6ICIiLAorCQkJKHRtcCAmIFVEQ0NGUl9BQ00pID8gIiBhY20iIDogIiIpOworCQlzaXplIC09IHQ7CisJCW5leHQgKz0gdDsKKwl9CisKKwlpZiAoIWlzX3VzYl9jb25uZWN0ZWQoKSB8fCAhZGV2LT5kcml2ZXIpCisJCWdvdG8gZG9uZTsKKworCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwgImVwMCBJTiAlbHUvJWx1LCBPVVQgJWx1LyVsdVxuaXJxcyAlbHVcblxuIiwKKwkJZGV2LT5zdGF0cy53cml0ZS5ieXRlcywgZGV2LT5zdGF0cy53cml0ZS5vcHMsCisJCWRldi0+c3RhdHMucmVhZC5ieXRlcywgZGV2LT5zdGF0cy5yZWFkLm9wcywKKwkJZGV2LT5zdGF0cy5pcnFzKTsKKwlzaXplIC09IHQ7CisJbmV4dCArPSB0OworCisJLyogZHVtcCBlbmRwb2ludCBxdWV1ZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgUFhBX1VEQ19OVU1fRU5EUE9JTlRTOyBpKyspIHsKKwkJc3RydWN0IHB4YTJ4eF9lcAkqZXAgPSAmZGV2LT5lcCBbaV07CisJCXN0cnVjdCBweGEyeHhfcmVxdWVzdAkqcmVxOworCQlpbnQJCQl0OworCisJCWlmIChpICE9IDApIHsKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqZDsKKworCQkJZCA9IGVwLT5kZXNjOworCQkJaWYgKCFkKQorCQkJCWNvbnRpbnVlOworCQkJdG1wID0gKmRldi0+ZXAgW2ldLnJlZ191ZGNjczsKKwkJCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKKwkJCQkiJXMgbWF4ICVkICVzIHVkY2NzICUwMnggaXJxcyAlbHUvJWx1XG4iLAorCQkJCWVwLT5lcC5uYW1lLCBsZTE2X3RvX2NwdSAoZC0+d01heFBhY2tldFNpemUpLAorCQkJCShlcC0+ZG1hID49IDApID8gImRtYSIgOiAicGlvIiwgdG1wLAorCQkJCWVwLT5waW9faXJxcywgZXAtPmRtYV9pcnFzKTsKKwkJCS8qIFRPRE8gdHJhbnNsYXRlIGFsbCBmaXZlIGdyb3VwcyBvZiB1ZGNjcyBiaXRzISAqLworCisJCX0gZWxzZSAvKiBlcDAgc2hvdWxkIG9ubHkgaGF2ZSBvbmUgdHJhbnNmZXIgcXVldWVkICovCisJCQl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsICJlcDAgbWF4IDE2IHBpbyBpcnFzICVsdVxuIiwKKwkJCQllcC0+cGlvX2lycXMpOworCQlpZiAodCA8PSAwIHx8IHQgPiBzaXplKQorCQkJZ290byBkb25lOworCQlzaXplIC09IHQ7CisJCW5leHQgKz0gdDsKKworCQlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQkJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLCAiXHQobm90aGluZyBxdWV1ZWQpXG4iKTsKKwkJCWlmICh0IDw9IDAgfHwgdCA+IHNpemUpCisJCQkJZ290byBkb25lOworCQkJc2l6ZSAtPSB0OworCQkJbmV4dCArPSB0OworCQkJY29udGludWU7CisJCX0KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7CisjaWZkZWYJVVNFX0RNQQorCQkJaWYgKGVwLT5kbWEgPj0gMCAmJiByZXEtPnF1ZXVlLnByZXYgPT0gJmVwLT5xdWV1ZSkKKwkJCQl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCisJCQkJCSJcdHJlcSAlcCBsZW4gJWQvJWQgIgorCQkJCQkiYnVmICVwIChkbWElZCBkY21kICUwOHgpXG4iLAorCQkJCQkmcmVxLT5yZXEsIHJlcS0+cmVxLmFjdHVhbCwKKwkJCQkJcmVxLT5yZXEubGVuZ3RoLCByZXEtPnJlcS5idWYsCisJCQkJCWVwLT5kbWEsIERDTUQoZXAtPmRtYSkKKwkJCQkJLy8gbG93IDEzIGJpdHMgPT0gYnl0ZXMtdG8tZ28KKwkJCQkJKTsKKwkJCWVsc2UKKyNlbmRpZgorCQkJCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKKwkJCQkJIlx0cmVxICVwIGxlbiAlZC8lZCBidWYgJXBcbiIsCisJCQkJCSZyZXEtPnJlcSwgcmVxLT5yZXEuYWN0dWFsLAorCQkJCQlyZXEtPnJlcS5sZW5ndGgsIHJlcS0+cmVxLmJ1Zik7CisJCQlpZiAodCA8PSAwIHx8IHQgPiBzaXplKQorCQkJCWdvdG8gZG9uZTsKKwkJCXNpemUgLT0gdDsKKwkJCW5leHQgKz0gdDsKKwkJfQorCX0KKworZG9uZToKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJKmVvZiA9IDE7CisJcmV0dXJuIGNvdW50IC0gc2l6ZTsKK30KKworI2RlZmluZSBjcmVhdGVfcHJvY19maWxlcygpIFwKKwljcmVhdGVfcHJvY19yZWFkX2VudHJ5KHByb2Nfbm9kZV9uYW1lLCAwLCBOVUxMLCB1ZGNfcHJvY19yZWFkLCBkZXYpCisjZGVmaW5lIHJlbW92ZV9wcm9jX2ZpbGVzKCkgXAorCXJlbW92ZV9wcm9jX2VudHJ5KHByb2Nfbm9kZV9uYW1lLCBOVUxMKQorCisjZWxzZQkvKiAhQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgKi8KKworI2RlZmluZSBjcmVhdGVfcHJvY19maWxlcygpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSByZW1vdmVfcHJvY19maWxlcygpIGRvIHt9IHdoaWxlICgwKQorCisjZW5kaWYJLyogQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgKi8KKworLyogImZ1bmN0aW9uIiBzeXNmcyBhdHRyaWJ1dGUgKi8KK3N0YXRpYyBzc2l6ZV90CitzaG93X2Z1bmN0aW9uIChzdHJ1Y3QgZGV2aWNlICpfZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHB4YTJ4eF91ZGMJKmRldiA9IGRldl9nZXRfZHJ2ZGF0YSAoX2Rldik7CisKKwlpZiAoIWRldi0+ZHJpdmVyCisJCQl8fCAhZGV2LT5kcml2ZXItPmZ1bmN0aW9uCisJCQl8fCBzdHJsZW4gKGRldi0+ZHJpdmVyLT5mdW5jdGlvbikgPiBQQUdFX1NJWkUpCisJCXJldHVybiAwOworCXJldHVybiBzY25wcmludGYgKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGRldi0+ZHJpdmVyLT5mdW5jdGlvbik7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIgKGZ1bmN0aW9uLCBTX0lSVUdPLCBzaG93X2Z1bmN0aW9uLCBOVUxMKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIAl1ZGNfZGlzYWJsZSAtIGRpc2FibGUgVVNCIGRldmljZSBjb250cm9sbGVyCisgKi8KK3N0YXRpYyB2b2lkIHVkY19kaXNhYmxlKHN0cnVjdCBweGEyeHhfdWRjICpkZXYpCit7CisJLyogYmxvY2sgYWxsIGlycXMgKi8KKwl1ZGNfc2V0X21hc2tfVURDQ1IoVURDQ1JfU1JNfFVEQ0NSX1JFTSk7CisJVUlDUjAgPSBVSUNSMSA9IDB4ZmY7CisJVUZOUkggPSBVRk5SSF9TSU07CisKKwkvKiBpZiBoYXJkd2FyZSBzdXBwb3J0cyBpdCwgZGlzY29ubmVjdCBmcm9tIHVzYiAqLworCW1ha2VfdXNiX2Rpc2FwcGVhcigpOworCisJdWRjX2NsZWFyX21hc2tfVURDQ1IoVURDQ1JfVURFKTsKKworI2lmZGVmCUNPTkZJR19BUkNIX1BYQQorICAgICAgICAvKiBEaXNhYmxlIGNsb2NrIGZvciBVU0IgZGV2aWNlICovCisJcHhhX3NldF9ja2VuKENLRU4xMV9VU0IsIDApOworI2VuZGlmCisKKwllcDBfaWRsZSAoZGV2KTsKKwlkZXYtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCUxFRF9DT05ORUNURURfT0ZGOworfQorCisKKy8qCisgKiAJdWRjX3JlaW5pdCAtIGluaXRpYWxpemUgc29mdHdhcmUgc3RhdGUKKyAqLworc3RhdGljIHZvaWQgdWRjX3JlaW5pdChzdHJ1Y3QgcHhhMnh4X3VkYyAqZGV2KQoreworCXUzMglpOworCisJLyogZGV2aWNlL2VwMCByZWNvcmRzIGluaXQgKi8KKwlJTklUX0xJU1RfSEVBRCAoJmRldi0+Z2FkZ2V0LmVwX2xpc3QpOworCUlOSVRfTElTVF9IRUFEICgmZGV2LT5nYWRnZXQuZXAwLT5lcF9saXN0KTsKKwlkZXYtPmVwMHN0YXRlID0gRVAwX0lETEU7CisKKwkvKiBiYXNpYyBlbmRwb2ludCByZWNvcmRzIGluaXQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgUFhBX1VEQ19OVU1fRU5EUE9JTlRTOyBpKyspIHsKKwkJc3RydWN0IHB4YTJ4eF9lcCAqZXAgPSAmZGV2LT5lcFtpXTsKKworCQlpZiAoaSAhPSAwKQorCQkJbGlzdF9hZGRfdGFpbCAoJmVwLT5lcC5lcF9saXN0LCAmZGV2LT5nYWRnZXQuZXBfbGlzdCk7CisKKwkJZXAtPmRlc2MgPSBOVUxMOworCQllcC0+c3RvcHBlZCA9IDA7CisJCUlOSVRfTElTVF9IRUFEICgmZXAtPnF1ZXVlKTsKKwkJZXAtPnBpb19pcnFzID0gZXAtPmRtYV9pcnFzID0gMDsKKwl9CisKKwkvKiB0aGUgcmVzdCB3YXMgc3RhdGljYWxseSBpbml0aWFsaXplZCwgYW5kIGlzIHJlYWQtb25seSAqLworfQorCisvKiB1bnRpbCBpdCdzIGVuYWJsZWQsIHRoaXMgVURDIHNob3VsZCBiZSBjb21wbGV0ZWx5IGludmlzaWJsZQorICogdG8gYW55IFVTQiBob3N0LgorICovCitzdGF0aWMgdm9pZCB1ZGNfZW5hYmxlIChzdHJ1Y3QgcHhhMnh4X3VkYyAqZGV2KQoreworCXVkY19jbGVhcl9tYXNrX1VEQ0NSKFVEQ0NSX1VERSk7CisKKyNpZmRlZglDT05GSUdfQVJDSF9QWEEKKyAgICAgICAgLyogRW5hYmxlIGNsb2NrIGZvciBVU0IgZGV2aWNlICovCisJcHhhX3NldF9ja2VuKENLRU4xMV9VU0IsIDEpOworCXVkZWxheSg1KTsKKyNlbmRpZgorCisJLyogdHJ5IHRvIGNsZWFyIHRoZXNlIGJpdHMgYmVmb3JlIHdlIGVuYWJsZSB0aGUgdWRjICovCisJdWRjX2Fja19pbnRfVURDQ1IoVURDQ1JfU1VTSVJ8LypVRENDUl9SU1RJUnwqL1VEQ0NSX1JFU0lSKTsKKworCWVwMF9pZGxlKGRldik7CisJZGV2LT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKwlkZXYtPnN0YXRzLmlycXMgPSAwOworCisJLyoKKwkgKiBzZXF1ZW5jZSB0YWtlbiBmcm9tIGNoYXB0ZXIgMTIuNS4xMCwgUFhBMjUwIEFwcFByb2NEZXZNYW51YWw6CisJICogLSBlbmFibGUgVURDCisJICogLSBpZiBSRVNFVCBpcyBhbHJlYWR5IGluIHByb2dyZXNzLCBhY2sgaW50ZXJydXB0CisJICogLSB1bm1hc2sgcmVzZXQgaW50ZXJydXB0CisJICovCisJdWRjX3NldF9tYXNrX1VEQ0NSKFVEQ0NSX1VERSk7CisJaWYgKCEoVURDQ1IgJiBVRENDUl9VREEpKQorCQl1ZGNfYWNrX2ludF9VRENDUihVRENDUl9SU1RJUik7CisKKwlpZiAoZGV2LT5oYXNfY2ZyIC8qIFVEQ19SRVMyIGlzIGRlZmluZWQgKi8pIHsKKwkJLyogcHhhMjU1IChhMCspIGNhbiBhdm9pZCBhIHNldF9jb25maWcgcmFjZSB0aGF0IGNvdWxkCisJCSAqIHByZXZlbnQgZ2FkZ2V0IGRyaXZlcnMgZnJvbSBjb25maWd1cmluZyBjb3JyZWN0bHkKKwkJICovCisJCVVEQ0NGUiA9IFVEQ0NGUl9BQ00gfCBVRENDRlJfTUIxOworCX0gZWxzZSB7CisJCS8qICJVU0IgdGVzdCBtb2RlIiBmb3IgcHhhMjUwIGVycmF0YSA0MC00MiAoc3RlcHBpbmcgYTAsIGExKQorCQkgKiB3aGljaCBjb3VsZCByZXN1bHQgaW4gbWlzc2luZyBwYWNrZXRzIGFuZCBpbnRlcnJ1cHRzLgorCQkgKiBzdXBwb3NlZGx5IG9uZSBiaXQgcGVyIGVuZHBvaW50LCBjb250cm9sbGluZyB3aGV0aGVyIGl0CisJCSAqIGRvdWJsZSBidWZmZXJzIG9yIG5vdDsgQUNNL0FSRU4gYml0cyBmaXQgaW50byB0aGUgaG9sZXMuCisJCSAqIHplcm8gYml0cyAobGlrZSBVU0lSMF9JUngpIGRpc2FibGUgZG91YmxlIGJ1ZmZlcmluZy4KKwkJICovCisJCVVEQ19SRVMxID0gMHgwMDsKKwkJVURDX1JFUzIgPSAweDAwOworCX0KKworI2lmZGVmCURJU0FCTEVfVEVTVF9NT0RFCisJLyogInRlc3QgbW9kZSIgc2VlbXMgdG8gaGF2ZSBiZWNvbWUgdGhlIGRlZmF1bHQgaW4gbGF0ZXIgY2hpcAorCSAqIHJldnMsIHByZXZlbnRpbmcgZG91YmxlIGJ1ZmZlcmluZyAoYW5kIGludmFsaWRhdGluZyBkb2NzKS4KKwkgKiB0aGlzIEVYUEVSSU1FTlQgZW5hYmxlcyBpdCBmb3IgYnVsayBlbmRwb2ludHMgYnkgdHdlYWtpbmcKKwkgKiB1bmRlZmluZWQvcmVzZXJ2ZWQgcmVnaXN0ZXIgYml0cyAodGhhdCBvdGhlciBkcml2ZXJzIGNsZWFyKS4KKwkgKiBCZWxjYXJyYSBjb2RlIGNvbW1lbnRzIG5vdGVkIHRoaXMgdXNhZ2UuCisJICovCisJaWYgKGZpZm9fbW9kZSAmIDEpIHsJLyogSU4gZW5kcG9pbnRzICovCisJCVVEQ19SRVMxIHw9IFVTSVIwX0lSMXxVU0lSMF9JUjY7CisJCVVEQ19SRVMyIHw9IFVTSVIxX0lSMTE7CisJfQorCWlmIChmaWZvX21vZGUgJiAyKSB7CS8qIE9VVCBlbmRwb2ludHMgKi8KKwkJVURDX1JFUzEgfD0gVVNJUjBfSVIyfFVTSVIwX0lSNzsKKwkJVURDX1JFUzIgfD0gVVNJUjFfSVIxMjsKKwl9CisjZW5kaWYKKworCS8qIGVuYWJsZSBzdXNwZW5kL3Jlc3VtZSBhbmQgcmVzZXQgaXJxcyAqLworCXVkY19jbGVhcl9tYXNrX1VEQ0NSKFVEQ0NSX1NSTSB8IFVEQ0NSX1JFTSk7CisKKwkvKiBlbmFibGUgZXAwIGlycXMgKi8KKwlVSUNSMCAmPSB+VUlDUjBfSU0wOworCisJLyogaWYgaGFyZHdhcmUgc3VwcG9ydHMgaXQsIHB1bGx1cCBEKyBhbmQgd2FpdCBmb3IgcmVzZXQgKi8KKwlsZXRfdXNiX2FwcGVhcigpOworfQorCisKKy8qIHdoZW4gYSBkcml2ZXIgaXMgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQsIGl0IHdpbGwgcmVjZWl2ZQorICogY29udHJvbCByZXF1ZXN0cyBpbmNsdWRpbmcgc2V0X2NvbmZpZ3VyYXRpb24oKSwgd2hpY2ggZW5hYmxlcworICogbm9uLWNvbnRyb2wgcmVxdWVzdHMuICB0aGVuIHVzYiB0cmFmZmljIGZvbGxvd3MgdW50aWwgYQorICogZGlzY29ubmVjdCBpcyByZXBvcnRlZC4gIHRoZW4gYSBob3N0IG1heSBjb25uZWN0IGFnYWluLCBvcgorICogdGhlIGRyaXZlciBtaWdodCBnZXQgdW5ib3VuZC4KKyAqLworaW50IHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQoreworCXN0cnVjdCBweGEyeHhfdWRjCSpkZXYgPSB0aGVfY29udHJvbGxlcjsKKwlpbnQJCQlyZXR2YWw7CisKKwlpZiAoIWRyaXZlcgorCQkJfHwgZHJpdmVyLT5zcGVlZCAhPSBVU0JfU1BFRURfRlVMTAorCQkJfHwgIWRyaXZlci0+YmluZAorCQkJfHwgIWRyaXZlci0+dW5iaW5kCisJCQl8fCAhZHJpdmVyLT5kaXNjb25uZWN0CisJCQl8fCAhZHJpdmVyLT5zZXR1cCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PREVWOworCWlmIChkZXYtPmRyaXZlcikKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIGZpcnN0IGhvb2sgdXAgdGhlIGRyaXZlciAuLi4gKi8KKwlkZXYtPmRyaXZlciA9IGRyaXZlcjsKKwlkZXYtPmdhZGdldC5kZXYuZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOworCWRldi0+cHVsbHVwID0gMTsKKworCWRldmljZV9hZGQgKCZkZXYtPmdhZGdldC5kZXYpOworCXJldHZhbCA9IGRyaXZlci0+YmluZCgmZGV2LT5nYWRnZXQpOworCWlmIChyZXR2YWwpIHsKKwkJRE1TRygiYmluZCB0byBkcml2ZXIgJXMgLS0+IGVycm9yICVkXG4iLAorCQkJCWRyaXZlci0+ZHJpdmVyLm5hbWUsIHJldHZhbCk7CisJCWRldmljZV9kZWwgKCZkZXYtPmdhZGdldC5kZXYpOworCisJCWRldi0+ZHJpdmVyID0gTlVMTDsKKwkJZGV2LT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7CisJCXJldHVybiByZXR2YWw7CisJfQorCWRldmljZV9jcmVhdGVfZmlsZShkZXYtPmRldiwgJmRldl9hdHRyX2Z1bmN0aW9uKTsKKworCS8qIC4uLiB0aGVuIGVuYWJsZSBob3N0IGRldGVjdGlvbiBhbmQgZXAwOyBhbmQgd2UncmUgcmVhZHkKKwkgKiBmb3Igc2V0X2NvbmZpZ3VyYXRpb24gYXMgd2VsbCBhcyBldmVudHVhbCBkaXNjb25uZWN0LgorCSAqLworCURNU0coInJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKKwlwdWxsdXAoZGV2LCAxKTsKKwlkdW1wX3N0YXRlKGRldik7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKTsKKworc3RhdGljIHZvaWQKK3N0b3BfYWN0aXZpdHkoc3RydWN0IHB4YTJ4eF91ZGMgKmRldiwgc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCit7CisJaW50IGk7CisKKwkvKiBkb24ndCBkaXNjb25uZWN0IGRyaXZlcnMgbW9yZSB0aGFuIG9uY2UgKi8KKwlpZiAoZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pCisJCWRyaXZlciA9IE5VTEw7CisJZGV2LT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKworCS8qIHByZXZlbnQgbmV3IHJlcXVlc3Qgc3VibWlzc2lvbnMsIGtpbGwgYW55IG91dHN0YW5kaW5nIHJlcXVlc3RzICAqLworCWZvciAoaSA9IDA7IGkgPCBQWEFfVURDX05VTV9FTkRQT0lOVFM7IGkrKykgeworCQlzdHJ1Y3QgcHhhMnh4X2VwICplcCA9ICZkZXYtPmVwW2ldOworCisJCWVwLT5zdG9wcGVkID0gMTsKKwkJbnVrZShlcCwgLUVTSFVURE9XTik7CisJfQorCWRlbF90aW1lcl9zeW5jKCZkZXYtPnRpbWVyKTsKKworCS8qIHJlcG9ydCBkaXNjb25uZWN0OyB0aGUgZHJpdmVyIGlzIGFscmVhZHkgcXVpZXNjZWQgKi8KKwlMRURfQ09OTkVDVEVEX09GRjsKKwlpZiAoZHJpdmVyKQorCQlkcml2ZXItPmRpc2Nvbm5lY3QoJmRldi0+Z2FkZ2V0KTsKKworCS8qIHJlLWluaXQgZHJpdmVyLXZpc2libGUgZGF0YSBzdHJ1Y3R1cmVzICovCisJdWRjX3JlaW5pdChkZXYpOworfQorCitpbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwlzdHJ1Y3QgcHhhMnh4X3VkYwkqZGV2ID0gdGhlX2NvbnRyb2xsZXI7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFkcml2ZXIgfHwgZHJpdmVyICE9IGRldi0+ZHJpdmVyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJcHVsbHVwKGRldiwgMCk7CisJc3RvcF9hY3Rpdml0eShkZXYsIGRyaXZlcik7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJZHJpdmVyLT51bmJpbmQoJmRldi0+Z2FkZ2V0KTsKKwlkZXYtPmRyaXZlciA9IE5VTEw7CisKKwlkZXZpY2VfZGVsICgmZGV2LT5nYWRnZXQuZGV2KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LT5kZXYsICZkZXZfYXR0cl9mdW5jdGlvbik7CisKKwlETVNHKCJ1bnJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKKwlkdW1wX3N0YXRlKGRldik7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9MVUJCT0NLCisKKy8qIEx1YmJvY2sgaGFzIHNlcGFyYXRlIGNvbm5lY3QgYW5kIGRpc2Nvbm5lY3QgaXJxcy4gIE1vcmUgdHlwaWNhbCBkZXNpZ25zCisgKiB1c2Ugb25lIEdQSU8gYXMgdGhlIFZCVVMgSVJRLCBhbmQgYW5vdGhlciB0byBjb250cm9sIHRoZSBEKyBwdWxsdXAuCisgKi8KKworc3RhdGljIGlycXJldHVybl90CitsdWJib2NrX3ZidXNfaXJxKGludCBpcnEsIHZvaWQgKl9kZXYsIHN0cnVjdCBwdF9yZWdzICpyKQoreworCXN0cnVjdCBweGEyeHhfdWRjCSpkZXYgPSBfZGV2OworCWludAkJCXZidXM7CisKKwlkZXYtPnN0YXRzLmlycXMrKzsKKwlIRVhfRElTUExBWShkZXYtPnN0YXRzLmlycXMpOworCXN3aXRjaCAoaXJxKSB7CisJY2FzZSBMVUJCT0NLX1VTQl9JUlE6CisJCUxFRF9DT05ORUNURURfT047CisJCXZidXMgPSAxOworCQlkaXNhYmxlX2lycShMVUJCT0NLX1VTQl9JUlEpOworCQllbmFibGVfaXJxKExVQkJPQ0tfVVNCX0RJU0NfSVJRKTsKKwkJYnJlYWs7CisJY2FzZSBMVUJCT0NLX1VTQl9ESVNDX0lSUToKKwkJTEVEX0NPTk5FQ1RFRF9PRkY7CisJCXZidXMgPSAwOworCQlkaXNhYmxlX2lycShMVUJCT0NLX1VTQl9ESVNDX0lSUSk7CisJCWVuYWJsZV9pcnEoTFVCQk9DS19VU0JfSVJRKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCXB4YTJ4eF91ZGNfdmJ1c19zZXNzaW9uKCZkZXYtPmdhZGdldCwgdmJ1cyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisjZW5kaWYKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfZXBfc3RhdGUgKHN0cnVjdCBweGEyeHhfdWRjICpkZXYpCit7CisJdW5zaWduZWQgaTsKKworCS8qIGhhcmR3YXJlIFNFVF97Q09ORklHVVJBVElPTixJTlRFUkZBQ0V9IGF1dG9tYWdpYyByZXNldHMgZW5kcG9pbnQKKwkgKiBmaWZvcywgYW5kIHBlbmRpbmcgdHJhbnNhY3Rpb25zIG11c3RuJ3QgYmUgY29udGludWVkIGluIGFueSBjYXNlLgorCSAqLworCWZvciAoaSA9IDE7IGkgPCBQWEFfVURDX05VTV9FTkRQT0lOVFM7IGkrKykKKwkJbnVrZSgmZGV2LT5lcFtpXSwgLUVDT05OQUJPUlRFRCk7Cit9CisKK3N0YXRpYyB2b2lkIHVkY193YXRjaGRvZyh1bnNpZ25lZCBsb25nIF9kZXYpCit7CisJc3RydWN0IHB4YTJ4eF91ZGMJKmRldiA9ICh2b2lkICopX2RldjsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJaWYgKGRldi0+ZXAwc3RhdGUgPT0gRVAwX1NUQUxMCisJCQkmJiAoVURDQ1MwICYgVURDQ1MwX0ZTVCkgPT0gMAorCQkJJiYgKFVEQ0NTMCAmIFVEQ0NTMF9TU1QpID09IDApIHsKKwkJVURDQ1MwID0gVURDQ1MwX0ZTVHxVRENDUzBfRlRGOworCQlEQkcoREJHX1ZFUkJPU0UsICJlcDAgcmUtc3RhbGxcbiIpOworCQlzdGFydF93YXRjaGRvZyhkZXYpOworCX0KKwlsb2NhbF9pcnFfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9lcDAgKHN0cnVjdCBweGEyeHhfdWRjICpkZXYpCit7CisJdTMyCQkJdWRjY3MwID0gVURDQ1MwOworCXN0cnVjdCBweGEyeHhfZXAJKmVwID0gJmRldi0+ZXAgWzBdOworCXN0cnVjdCBweGEyeHhfcmVxdWVzdAkqcmVxOworCXVuaW9uIHsKKwkJc3RydWN0IHVzYl9jdHJscmVxdWVzdAlyOworCQl1OAkJCXJhdyBbOF07CisJCXUzMgkJCXdvcmQgWzJdOworCX0gdTsKKworCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQlyZXEgPSBOVUxMOworCWVsc2UKKwkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IHB4YTJ4eF9yZXF1ZXN0LCBxdWV1ZSk7CisKKwkvKiBjbGVhciBzdGFsbCBzdGF0dXMgKi8KKwlpZiAodWRjY3MwICYgVURDQ1MwX1NTVCkgeworCQludWtlKGVwLCAtRVBJUEUpOworCQlVRENDUzAgPSBVRENDUzBfU1NUOworCQlkZWxfdGltZXIoJmRldi0+dGltZXIpOworCQllcDBfaWRsZShkZXYpOworCX0KKworCS8qIHByZXZpb3VzIHJlcXVlc3QgdW5maW5pc2hlZD8gIG5vbi1lcnJvciBpZmYgYmFjay10by1iYWNrIC4uLiAqLworCWlmICgodWRjY3MwICYgVURDQ1MwX1NBKSAhPSAwICYmIGRldi0+ZXAwc3RhdGUgIT0gRVAwX0lETEUpIHsKKwkJbnVrZShlcCwgMCk7CisJCWRlbF90aW1lcigmZGV2LT50aW1lcik7CisJCWVwMF9pZGxlKGRldik7CisJfQorCisJc3dpdGNoIChkZXYtPmVwMHN0YXRlKSB7CisJY2FzZSBFUDBfSURMRToKKwkJLyogbGF0ZS1icmVha2luZyBzdGF0dXM/ICovCisJCXVkY2NzMCA9IFVEQ0NTMDsKKworCQkvKiBzdGFydCBjb250cm9sIHJlcXVlc3Q/ICovCisJCWlmIChsaWtlbHkoKHVkY2NzMCAmIChVRENDUzBfT1BSfFVEQ0NTMF9TQXxVRENDUzBfUk5FKSkKKwkJCQk9PSAoVURDQ1MwX09QUnxVRENDUzBfU0F8VURDQ1MwX1JORSkpKSB7CisJCQlpbnQgaTsKKworCQkJbnVrZSAoZXAsIC1FUFJPVE8pOworCisJCQkvKiByZWFkIFNFVFVQIHBhY2tldCAqLworCQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkJCWlmICh1bmxpa2VseSghKFVEQ0NTMCAmIFVEQ0NTMF9STkUpKSkgeworYmFkX3NldHVwOgorCQkJCQlETVNHKCJTRVRVUCAlZCFcbiIsIGkpOworCQkJCQlnb3RvIHN0YWxsOworCQkJCX0KKwkJCQl1LnJhdyBbaV0gPSAodTgpIFVERFIwOworCQkJfQorCQkJaWYgKHVubGlrZWx5KChVRENDUzAgJiBVRENDUzBfUk5FKSAhPSAwKSkKKwkJCQlnb3RvIGJhZF9zZXR1cDsKKworZ290X3NldHVwOgorCQkJREJHKERCR19WRVJCT1NFLCAiU0VUVVAgJTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwlMDR4XG4iLAorCQkJCXUuci5iUmVxdWVzdFR5cGUsIHUuci5iUmVxdWVzdCwKKwkJCQlsZTE2X3RvX2NwdSh1LnIud1ZhbHVlKSwKKwkJCQlsZTE2X3RvX2NwdSh1LnIud0luZGV4KSwKKwkJCQlsZTE2X3RvX2NwdSh1LnIud0xlbmd0aCkpOworCisJCQkvKiBjb3BlIHdpdGggYXV0b21hZ2ljIGZvciBzb21lIHN0YW5kYXJkIHJlcXVlc3RzLiAqLworCQkJZGV2LT5yZXFfc3RkID0gKHUuci5iUmVxdWVzdFR5cGUgJiBVU0JfVFlQRV9NQVNLKQorCQkJCQkJPT0gVVNCX1RZUEVfU1RBTkRBUkQ7CisJCQlkZXYtPnJlcV9jb25maWcgPSAwOworCQkJZGV2LT5yZXFfcGVuZGluZyA9IDE7CisJCQlzd2l0Y2ggKHUuci5iUmVxdWVzdCkgeworCQkJLyogaGFyZHdhcmUgcmVzdHJpY3RzIGdhZGdldCBkcml2ZXJzIGhlcmUhICovCisJCQljYXNlIFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT046CisJCQkJaWYgKHUuci5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0RFVklDRSkgeworCQkJCQkvKiByZWZsZWN0IGhhcmR3YXJlJ3MgYXV0b21hZ2ljCisJCQkJCSAqIHVwIHRvIHRoZSBnYWRnZXQgZHJpdmVyLgorCQkJCQkgKi8KK2NvbmZpZ19jaGFuZ2U6CisJCQkJCWRldi0+cmVxX2NvbmZpZyA9IDE7CisJCQkJCWNsZWFyX2VwX3N0YXRlKGRldik7CisJCQkJCS8qIGlmICFoYXNfY2ZyLCB0aGVyZSdzIG5vIHN5bmNoCisJCQkJCSAqIGVsc2UgdXNlIEFSRU4gKGxhdGVyKSBub3QgU0F8T1BSCisJCQkJCSAqIFVTSVIwX0lSMCBhY3RzIGVkZ2Ugc2Vuc2l0aXZlCisJCQkJCSAqLworCQkJCX0KKwkJCQlicmVhazsKKwkJCS8qIC4uLiBhbmQgaGVyZSwgZXZlbiBtb3JlIC4uLiAqLworCQkJY2FzZSBVU0JfUkVRX1NFVF9JTlRFUkZBQ0U6CisJCQkJaWYgKHUuci5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0lOVEVSRkFDRSkgeworCQkJCQkvKiB1ZGMgaGFyZHdhcmUgaXMgYnJva2VuIGJ5IGRlc2lnbjoKKwkJCQkJICogIC0gYWx0c2V0dGluZyBtYXkgb25seSBiZSB6ZXJvOworCQkJCQkgKiAgLSBodyByZXNldHMgYWxsIGludGVyZmFjZXMnIGVwczsKKwkJCQkJICogIC0gZXAgcmVzZXQgZG9lc24ndCBpbmNsdWRlIGhhbHQoPykuCisJCQkJCSAqLworCQkJCQlETVNHKCJicm9rZW4gc2V0X2ludGVyZmFjZSAoJWQvJWQpXG4iLAorCQkJCQkJbGUxNl90b19jcHUodS5yLndJbmRleCksCisJCQkJCQlsZTE2X3RvX2NwdSh1LnIud1ZhbHVlKSk7CisJCQkJCWdvdG8gY29uZmlnX2NoYW5nZTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQkvKiBoYXJkd2FyZSB3YXMgc3VwcG9zZWQgdG8gaGlkZSB0aGlzICovCisJCQljYXNlIFVTQl9SRVFfU0VUX0FERFJFU1M6CisJCQkJaWYgKHUuci5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0RFVklDRSkgeworCQkJCQllcDBzdGFydChkZXYsIDAsICJhZGRyZXNzIik7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmICh1LnIuYlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikKKwkJCQlkZXYtPmVwMHN0YXRlID0gRVAwX0lOX0RBVEFfUEhBU0U7CisJCQllbHNlCisJCQkJZGV2LT5lcDBzdGF0ZSA9IEVQMF9PVVRfREFUQV9QSEFTRTsKKworCQkJaSA9IGRldi0+ZHJpdmVyLT5zZXR1cCgmZGV2LT5nYWRnZXQsICZ1LnIpOworCQkJaWYgKGkgPCAwKSB7CisJCQkJLyogaGFyZHdhcmUgYXV0b21hZ2ljIHByZXZlbnRpbmcgU1RBTEwuLi4gKi8KKwkJCQlpZiAoZGV2LT5yZXFfY29uZmlnKSB7CisJCQkJCS8qIGhhcmR3YXJlIHNvbWV0aW1lcyBuZWdsZWN0cyB0byB0ZWxsCisJCQkJCSAqIHRlbGwgdXMgYWJvdXQgY29uZmlnIGNoYW5nZSBldmVudHMsCisJCQkJCSAqIHNvIGxhdGVyIG9uZXMgbWF5IGZhaWwuLi4KKwkJCQkJICovCisJCQkJCVdBUk4oImNvbmZpZyBjaGFuZ2UgJTAyeCBmYWlsICVkP1xuIiwKKwkJCQkJCXUuci5iUmVxdWVzdCwgaSk7CisJCQkJCXJldHVybjsKKwkJCQkJLyogVE9ETyBleHBlcmltZW50OiAgaWYgaGFzX2NmciwKKwkJCQkJICogaGFyZHdhcmUgZGlkbid0IEFDSzsgbWF5YmUgd2UKKwkJCQkJICogY291bGQgYWN0dWFsbHkgU1RBTEwhCisJCQkJCSAqLworCQkJCX0KKwkJCQlEQkcoREJHX1ZFUkJPU0UsICJwcm90b2NvbCBTVEFMTCwgIgorCQkJCQkiJTAyeCBlcnIgJWRcbiIsIFVEQ0NTMCwgaSk7CitzdGFsbDoKKwkJCQkvKiB0aGUgd2F0Y2hkb2cgdGltZXIgaGVscHMgZGVhbCB3aXRoIGNhc2VzCisJCQkJICogd2hlcmUgdWRjIHNlZW1zIHRvIGNsZWFyIEZTVCB3cm9uZ2x5LCBhbmQKKwkJCQkgKiB0aGVuIE5BS3MgaW5zdGVhZCBvZiBTVEFMTGluZy4KKwkJCQkgKi8KKwkJCQllcDBzdGFydChkZXYsIFVEQ0NTMF9GU1R8VURDQ1MwX0ZURiwgInN0YWxsIik7CisJCQkJc3RhcnRfd2F0Y2hkb2coZGV2KTsKKwkJCQlkZXYtPmVwMHN0YXRlID0gRVAwX1NUQUxMOworCisJCQkvKiBkZWZlcnJlZCBpL28gPT0gbm8gcmVzcG9uc2UgeWV0ICovCisJCQl9IGVsc2UgaWYgKGRldi0+cmVxX3BlbmRpbmcpIHsKKwkJCQlpZiAobGlrZWx5KGRldi0+ZXAwc3RhdGUgPT0gRVAwX0lOX0RBVEFfUEhBU0UKKwkJCQkJCXx8IGRldi0+cmVxX3N0ZCB8fCB1LnIud0xlbmd0aCkpCisJCQkJCWVwMHN0YXJ0KGRldiwgMCwgImRlZmVyIik7CisJCQkJZWxzZQorCQkJCQllcDBzdGFydChkZXYsIFVEQ0NTMF9JUFIsICJkZWZlci9JUFIiKTsKKwkJCX0KKworCQkJLyogZXhwZWN0IGF0IGxlYXN0IG9uZSBkYXRhIG9yIHN0YXR1cyBzdGFnZSBpcnEgKi8KKwkJCXJldHVybjsKKworCQl9IGVsc2UgaWYgKGxpa2VseSgodWRjY3MwICYgKFVEQ0NTMF9PUFJ8VURDQ1MwX1NBKSkKKwkJCQk9PSAoVURDQ1MwX09QUnxVRENDUzBfU0EpKSkgeworCQkJdW5zaWduZWQgaTsKKworCQkJLyogcHhhMjEwLzI1MCBlcnJhdHVtIDEzMSBmb3IgQjAvQjEgc2F5cyBSTkUgbGllcy4KKwkJCSAqIHN0aWxsIG9ic2VydmVkIG9uIGEgcHhhMjU1IGEwLgorCQkJICovCisJCQlEQkcoREJHX1ZFUkJPU0UsICJlMTMxXG4iKTsKKwkJCW51a2UoZXAsIC1FUFJPVE8pOworCisJCQkvKiByZWFkIFNFVFVQIGRhdGEsIGJ1dCBkb24ndCB0cnVzdCBpdCB0b28gbXVjaCAqLworCQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCQl1LnJhdyBbaV0gPSAodTgpIFVERFIwOworCQkJaWYgKCh1LnIuYlJlcXVlc3RUeXBlICYgVVNCX1JFQ0lQX01BU0spCisJCQkJCT4gVVNCX1JFQ0lQX09USEVSKQorCQkJCWdvdG8gc3RhbGw7CisJCQlpZiAodS53b3JkIFswXSA9PSAwICYmIHUud29yZCBbMV0gPT0gMCkKKwkJCQlnb3RvIHN0YWxsOworCQkJZ290byBnb3Rfc2V0dXA7CisJCX0gZWxzZSB7CisJCQkvKiBzb21lIHJhbmRvbSBlYXJseSBJUlE6CisJCQkgKiAtIHdlIGFja2VkIEZTVAorCQkJICogLSBJUFIgY2xlYXJlZAorCQkJICogLSBPUFIgZ290IHNldCwgd2l0aG91dCBTQSAobGlrZWx5IHN0YXR1cyBzdGFnZSkKKwkJCSAqLworCQkJVURDQ1MwID0gdWRjY3MwICYgKFVEQ0NTMF9TQXxVRENDUzBfT1BSKTsKKwkJfQorCQlicmVhazsKKwljYXNlIEVQMF9JTl9EQVRBX1BIQVNFOgkJCS8qIEdFVF9ERVNDUklQVE9SIGV0YyAqLworCQlpZiAodWRjY3MwICYgVURDQ1MwX09QUikgeworCQkJVURDQ1MwID0gVURDQ1MwX09QUnxVRENDUzBfRlRGOworCQkJREJHKERCR19WRVJCT1NFLCAiZXAwaW4gcHJlbWF0dXJlIHN0YXR1c1xuIik7CisJCQlpZiAocmVxKQorCQkJCWRvbmUoZXAsIHJlcSwgMCk7CisJCQllcDBfaWRsZShkZXYpOworCQl9IGVsc2UgLyogaXJxIHdhcyBJUFIgY2xlYXJpbmcgKi8geworCQkJaWYgKHJlcSkgeworCQkJCS8qIHRoaXMgSU4gcGFja2V0IG1pZ2h0IGZpbmlzaCB0aGUgcmVxdWVzdCAqLworCQkJCSh2b2lkKSB3cml0ZV9lcDBfZmlmbyhlcCwgcmVxKTsKKwkJCX0gLyogZWxzZSBJTiB0b2tlbiBiZWZvcmUgcmVzcG9uc2Ugd2FzIHdyaXR0ZW4gKi8KKwkJfQorCQlicmVhazsKKwljYXNlIEVQMF9PVVRfREFUQV9QSEFTRToJCS8qIFNFVF9ERVNDUklQVE9SIGV0YyAqLworCQlpZiAodWRjY3MwICYgVURDQ1MwX09QUikgeworCQkJaWYgKHJlcSkgeworCQkJCS8qIHRoaXMgT1VUIHBhY2tldCBtaWdodCBmaW5pc2ggdGhlIHJlcXVlc3QgKi8KKwkJCQlpZiAocmVhZF9lcDBfZmlmbyhlcCwgcmVxKSkKKwkJCQkJZG9uZShlcCwgcmVxLCAwKTsKKwkJCQkvKiBlbHNlIG1vcmUgT1VUIHBhY2tldHMgZXhwZWN0ZWQgKi8KKwkJCX0gLyogZWxzZSBPVVQgdG9rZW4gYmVmb3JlIHJlYWQgd2FzIGlzc3VlZCAqLworCQl9IGVsc2UgLyogaXJxIHdhcyBJUFIgY2xlYXJpbmcgKi8geworCQkJREJHKERCR19WRVJCT1NFLCAiZXAwb3V0IHByZW1hdHVyZSBzdGF0dXNcbiIpOworCQkJaWYgKHJlcSkKKwkJCQlkb25lKGVwLCByZXEsIDApOworCQkJZXAwX2lkbGUoZGV2KTsKKwkJfQorCQlicmVhazsKKwljYXNlIEVQMF9FTkRfWEZFUjoKKwkJaWYgKHJlcSkKKwkJCWRvbmUoZXAsIHJlcSwgMCk7CisJCS8qIGFjayBjb250cm9sLUlOIHN0YXR1cyAobWF5YmUgaW4temxwIHdhcyBza2lwcGVkKQorCQkgKiBhbHNvIGFwcGVhcnMgYWZ0ZXIgc29tZSBjb25maWcgY2hhbmdlIGV2ZW50cy4KKwkJICovCisJCWlmICh1ZGNjczAgJiBVRENDUzBfT1BSKQorCQkJVURDQ1MwID0gVURDQ1MwX09QUjsKKwkJZXAwX2lkbGUoZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBFUDBfU1RBTEw6CisJCVVEQ0NTMCA9IFVEQ0NTMF9GU1Q7CisJCWJyZWFrOworCX0KKwlVU0lSMCA9IFVTSVIwX0lSMDsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2VwKHN0cnVjdCBweGEyeHhfZXAgKmVwKQoreworCXN0cnVjdCBweGEyeHhfcmVxdWVzdAkqcmVxOworCWludAkJCWlzX2luID0gZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOOworCWludAkJCWNvbXBsZXRlZDsKKwl1MzIJCQl1ZGNjcywgdG1wOworCisJZG8geworCQljb21wbGV0ZWQgPSAwOworCQlpZiAobGlrZWx5ICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkpCisJCQlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LAorCQkJCQlzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QsIHF1ZXVlKTsKKwkJZWxzZQorCQkJcmVxID0gTlVMTDsKKworCQkvLyBUT0RPIGNoZWNrIEZTVCBoYW5kbGluZworCisJCXVkY2NzID0gKmVwLT5yZWdfdWRjY3M7CisJCWlmICh1bmxpa2VseShpc19pbikpIHsJLyogaXJxIGZyb20gVFBDLCBTU1QsIG9yIChJU08pIFRVUiAqLworCQkJdG1wID0gVURDQ1NfQklfVFVSOworCQkJaWYgKGxpa2VseShlcC0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspKQorCQkJCXRtcCB8PSBVRENDU19CSV9TU1Q7CisJCQl0bXAgJj0gdWRjY3M7CisJCQlpZiAobGlrZWx5ICh0bXApKQorCQkJCSplcC0+cmVnX3VkY2NzID0gdG1wOworCQkJaWYgKHJlcSAmJiBsaWtlbHkgKCh1ZGNjcyAmIFVEQ0NTX0JJX1RGUykgIT0gMCkpCisJCQkJY29tcGxldGVkID0gd3JpdGVfZmlmbyhlcCwgcmVxKTsKKworCQl9IGVsc2UgewkvKiBpcnEgZnJvbSBSUEMgKG9yIGZvciBJU08sIFJPRikgKi8KKwkJCWlmIChsaWtlbHkoZXAtPmJtQXR0cmlidXRlcyA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSkKKwkJCQl0bXAgPSBVRENDU19CT19TU1QgfCBVRENDU19CT19ETUU7CisJCQllbHNlCisJCQkJdG1wID0gVURDQ1NfSU9fUk9GIHwgVURDQ1NfSU9fRE1FOworCQkJdG1wICY9IHVkY2NzOworCQkJaWYgKGxpa2VseSh0bXApKQorCQkJCSplcC0+cmVnX3VkY2NzID0gdG1wOworCisJCQkvKiBmaWZvcyBjYW4gaG9sZCBwYWNrZXRzLCByZWFkeSBmb3IgcmVhZGluZy4uLiAqLworCQkJaWYgKGxpa2VseShyZXEpKSB7CisjaWZkZWYgVVNFX09VVF9ETUEKKy8vIFRPRE8gZGlkbid0IHlldCBkZWJ1ZyBvdXQtZG1hLiAgdGhpcyBhcHByb2FjaCBhc3N1bWVzCisvLyB0aGUgd29yc3QgYWJvdXQgc2hvcnQgcGFja2V0cyBhbmQgUlBDOyBpdCBtaWdodCBiZSBiZXR0ZXIuCisKKwkJCQlpZiAobGlrZWx5KGVwLT5kbWEgPj0gMCkpIHsKKwkJCQkJaWYgKCEodWRjY3MgJiBVRENDU19CT19SU1ApKSB7CisJCQkJCQkqZXAtPnJlZ191ZGNjcyA9IFVEQ0NTX0JPX1JQQzsKKwkJCQkJCWVwLT5kbWFfaXJxcysrOworCQkJCQkJcmV0dXJuOworCQkJCQl9CisJCQkJfQorI2VuZGlmCisJCQkJY29tcGxldGVkID0gcmVhZF9maWZvKGVwLCByZXEpOworCQkJfSBlbHNlCisJCQkJcGlvX2lycV9kaXNhYmxlIChlcC0+YkVuZHBvaW50QWRkcmVzcyk7CisJCX0KKwkJZXAtPnBpb19pcnFzKys7CisJfSB3aGlsZSAoY29tcGxldGVkKTsKK30KKworLyoKKyAqCXB4YTJ4eF91ZGNfaXJxIC0gaW50ZXJydXB0IGhhbmRsZXIKKyAqCisgKiBhdm9pZCBkZWxheXMgaW4gZXAwIHByb2Nlc3NpbmcuIHRoZSBjb250cm9sIGhhbmRzaGFraW5nIGlzbid0IGFsd2F5cworICogdW5kZXIgc29mdHdhcmUgY29udHJvbCAocHhhMjUwYzAgYW5kIHRoZSBweGEyNTUgYXJlIGJldHRlciksIGFuZCBkZWxheXMKKyAqIGNvdWxkIGNhdXNlIHVzYiBwcm90b2NvbCBlcnJvcnMuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdAorcHhhMnh4X3VkY19pcnEoaW50IGlycSwgdm9pZCAqX2Rldiwgc3RydWN0IHB0X3JlZ3MgKnIpCit7CisJc3RydWN0IHB4YTJ4eF91ZGMJKmRldiA9IF9kZXY7CisJaW50CQkJaGFuZGxlZDsKKworCWRldi0+c3RhdHMuaXJxcysrOworCUhFWF9ESVNQTEFZKGRldi0+c3RhdHMuaXJxcyk7CisJZG8geworCQl1MzIJCXVkY2NyID0gVURDQ1I7CisKKwkJaGFuZGxlZCA9IDA7CisKKwkJLyogU1VTcGVuZCBJbnRlcnJ1cHQgUmVxdWVzdCAqLworCQlpZiAodW5saWtlbHkodWRjY3IgJiBVRENDUl9TVVNJUikpIHsKKwkJCXVkY19hY2tfaW50X1VEQ0NSKFVEQ0NSX1NVU0lSKTsKKwkJCWhhbmRsZWQgPSAxOworCQkJREJHKERCR19WRVJCT1NFLCAiVVNCIHN1c3BlbmQlc1xuIiwgaXNfdXNiX2Nvbm5lY3RlZCgpCisJCQkJPyAiIiA6ICIrZGlzY29ubmVjdCIpOworCisJCQlpZiAoIWlzX3VzYl9jb25uZWN0ZWQoKSkKKwkJCQlzdG9wX2FjdGl2aXR5KGRldiwgZGV2LT5kcml2ZXIpOworCQkJZWxzZSBpZiAoZGV2LT5nYWRnZXQuc3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04KKwkJCQkJJiYgZGV2LT5kcml2ZXIKKwkJCQkJJiYgZGV2LT5kcml2ZXItPnN1c3BlbmQpCisJCQkJZGV2LT5kcml2ZXItPnN1c3BlbmQoJmRldi0+Z2FkZ2V0KTsKKwkJCWVwMF9pZGxlIChkZXYpOworCQl9CisKKwkJLyogUkVTdW1lIEludGVycnVwdCBSZXF1ZXN0ICovCisJCWlmICh1bmxpa2VseSh1ZGNjciAmIFVEQ0NSX1JFU0lSKSkgeworCQkJdWRjX2Fja19pbnRfVURDQ1IoVURDQ1JfUkVTSVIpOworCQkJaGFuZGxlZCA9IDE7CisJCQlEQkcoREJHX1ZFUkJPU0UsICJVU0IgcmVzdW1lXG4iKTsKKworCQkJaWYgKGRldi0+Z2FkZ2V0LnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOCisJCQkJCSYmIGRldi0+ZHJpdmVyCisJCQkJCSYmIGRldi0+ZHJpdmVyLT5yZXN1bWUKKwkJCQkJJiYgaXNfdXNiX2Nvbm5lY3RlZCgpKQorCQkJCWRldi0+ZHJpdmVyLT5yZXN1bWUoJmRldi0+Z2FkZ2V0KTsKKwkJfQorCisJCS8qIFJlU2VUIEludGVycnVwdCBSZXF1ZXN0IC0gVVNCIHJlc2V0ICovCisJCWlmICh1bmxpa2VseSh1ZGNjciAmIFVEQ0NSX1JTVElSKSkgeworCQkJdWRjX2Fja19pbnRfVURDQ1IoVURDQ1JfUlNUSVIpOworCQkJaGFuZGxlZCA9IDE7CisKKwkJCWlmICgoVURDQ1IgJiBVRENDUl9VREEpID09IDApIHsKKwkJCQlEQkcoREJHX1ZFUkJPU0UsICJVU0IgcmVzZXQgc3RhcnRcbiIpOworCisJCQkJLyogcmVzZXQgZHJpdmVyIGFuZCBlbmRwb2ludHMsCisJCQkJICogaW4gY2FzZSB0aGF0J3Mgbm90IHlldCBkb25lCisJCQkJICovCisJCQkJc3RvcF9hY3Rpdml0eSAoZGV2LCBkZXYtPmRyaXZlcik7CisKKwkJCX0gZWxzZSB7CisJCQkJREJHKERCR19WRVJCT1NFLCAiVVNCIHJlc2V0IGVuZFxuIik7CisJCQkJZGV2LT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfRlVMTDsKKwkJCQlMRURfQ09OTkVDVEVEX09OOworCQkJCW1lbXNldCgmZGV2LT5zdGF0cywgMCwgc2l6ZW9mIGRldi0+c3RhdHMpOworCQkJCS8qIGRyaXZlciBhbmQgZW5kcG9pbnRzIGFyZSBzdGlsbCByZXNldCAqLworCQkJfQorCisJCX0gZWxzZSB7CisJCQl1MzIJdXNpcjAgPSBVU0lSMCAmIH5VSUNSMDsKKwkJCXUzMgl1c2lyMSA9IFVTSVIxICYgflVJQ1IxOworCQkJaW50CWk7CisKKwkJCWlmICh1bmxpa2VseSAoIXVzaXIwICYmICF1c2lyMSkpCisJCQkJY29udGludWU7CisKKwkJCURCRyhEQkdfVkVSWV9OT0lTWSwgImlycSAlMDJ4LiUwMnhcbiIsIHVzaXIxLCB1c2lyMCk7CisKKwkJCS8qIGNvbnRyb2wgdHJhZmZpYyAqLworCQkJaWYgKHVzaXIwICYgVVNJUjBfSVIwKSB7CisJCQkJZGV2LT5lcFswXS5waW9faXJxcysrOworCQkJCWhhbmRsZV9lcDAoZGV2KTsKKwkJCQloYW5kbGVkID0gMTsKKwkJCX0KKworCQkJLyogZW5kcG9pbnQgZGF0YSB0cmFuc2ZlcnMgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJCQl1MzIJdG1wID0gMSA8PCBpOworCisJCQkJaWYgKGkgJiYgKHVzaXIwICYgdG1wKSkgeworCQkJCQloYW5kbGVfZXAoJmRldi0+ZXBbaV0pOworCQkJCQlVU0lSMCB8PSB0bXA7CisJCQkJCWhhbmRsZWQgPSAxOworCQkJCX0KKwkJCQlpZiAodXNpcjEgJiB0bXApIHsKKwkJCQkJaGFuZGxlX2VwKCZkZXYtPmVwW2krOF0pOworCQkJCQlVU0lSMSB8PSB0bXA7CisJCQkJCWhhbmRsZWQgPSAxOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qIHdlIGNvdWxkIGFsc28gYXNrIGZvciAxIG1zZWMgU09GIChTSVIpIGludGVycnVwdHMgKi8KKworCX0gd2hpbGUgKGhhbmRsZWQpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgbm9wX3JlbGVhc2UgKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlETVNHKCIlcyAlc1xuIiwgX19GVU5DVElPTl9fLCBkZXYtPmJ1c19pZCk7Cit9CisKKy8qIHRoaXMgdXNlcyBsb2FkLXRpbWUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gKGluc3RlYWQgb2YKKyAqIGRvaW5nIGl0IGF0IHJ1bi10aW1lKSB0byBzYXZlIGNvZGUsIGVsaW1pbmF0ZSBmYXVsdCBwYXRocywgYW5kCisgKiBiZSBtb3JlIG9idmlvdXNseSBjb3JyZWN0LgorICovCitzdGF0aWMgc3RydWN0IHB4YTJ4eF91ZGMgbWVtb3J5ID0geworCS5nYWRnZXQgPSB7CisJCS5vcHMJCT0gJnB4YTJ4eF91ZGNfb3BzLAorCQkuZXAwCQk9ICZtZW1vcnkuZXBbMF0uZXAsCisJCS5uYW1lCQk9IGRyaXZlcl9uYW1lLAorCQkuZGV2ID0geworCQkJLmJ1c19pZAkJPSAiZ2FkZ2V0IiwKKwkJCS5yZWxlYXNlCT0gbm9wX3JlbGVhc2UsCisJCX0sCisJfSwKKworCS8qIGNvbnRyb2wgZW5kcG9pbnQgKi8KKwkuZXBbMF0gPSB7CisJCS5lcCA9IHsKKwkJCS5uYW1lCQk9IGVwMG5hbWUsCisJCQkub3BzCQk9ICZweGEyeHhfZXBfb3BzLAorCQkJLm1heHBhY2tldAk9IEVQMF9GSUZPX1NJWkUsCisJCX0sCisJCS5kZXYJCT0gJm1lbW9yeSwKKwkJLnJlZ191ZGNjcwk9ICZVRENDUzAsCisJCS5yZWdfdWRkcgk9ICZVRERSMCwKKwl9LAorCisJLyogZmlyc3QgZ3JvdXAgb2YgZW5kcG9pbnRzICovCisJLmVwWzFdID0geworCQkuZXAgPSB7CisJCQkubmFtZQkJPSAiZXAxaW4tYnVsayIsCisJCQkub3BzCQk9ICZweGEyeHhfZXBfb3BzLAorCQkJLm1heHBhY2tldAk9IEJVTEtfRklGT19TSVpFLAorCQl9LAorCQkuZGV2CQk9ICZtZW1vcnksCisJCS5maWZvX3NpemUJPSBCVUxLX0ZJRk9fU0laRSwKKwkJLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOIHwgMSwKKwkJLmJtQXR0cmlidXRlcwk9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJCS5yZWdfdWRjY3MJPSAmVURDQ1MxLAorCQkucmVnX3VkZHIJPSAmVUREUjEsCisJCWRyY21yICgyNSkKKwl9LAorCS5lcFsyXSA9IHsKKwkJLmVwID0geworCQkJLm5hbWUJCT0gImVwMm91dC1idWxrIiwKKwkJCS5vcHMJCT0gJnB4YTJ4eF9lcF9vcHMsCisJCQkubWF4cGFja2V0CT0gQlVMS19GSUZPX1NJWkUsCisJCX0sCisJCS5kZXYJCT0gJm1lbW9yeSwKKwkJLmZpZm9fc2l6ZQk9IEJVTEtfRklGT19TSVpFLAorCQkuYkVuZHBvaW50QWRkcmVzcyA9IDIsCisJCS5ibUF0dHJpYnV0ZXMJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCQkucmVnX3VkY2NzCT0gJlVEQ0NTMiwKKwkJLnJlZ191YmNyCT0gJlVCQ1IyLAorCQkucmVnX3VkZHIJPSAmVUREUjIsCisJCWRyY21yICgyNikKKwl9LAorI2lmbmRlZiBDT05GSUdfVVNCX1BYQTJYWF9TTUFMTAorCS5lcFszXSA9IHsKKwkJLmVwID0geworCQkJLm5hbWUJCT0gImVwM2luLWlzbyIsCisJCQkub3BzCQk9ICZweGEyeHhfZXBfb3BzLAorCQkJLm1heHBhY2tldAk9IElTT19GSUZPX1NJWkUsCisJCX0sCisJCS5kZXYJCT0gJm1lbW9yeSwKKwkJLmZpZm9fc2l6ZQk9IElTT19GSUZPX1NJWkUsCisJCS5iRW5kcG9pbnRBZGRyZXNzID0gVVNCX0RJUl9JTiB8IDMsCisJCS5ibUF0dHJpYnV0ZXMJPSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DLAorCQkucmVnX3VkY2NzCT0gJlVEQ0NTMywKKwkJLnJlZ191ZGRyCT0gJlVERFIzLAorCQlkcmNtciAoMjcpCisJfSwKKwkuZXBbNF0gPSB7CisJCS5lcCA9IHsKKwkJCS5uYW1lCQk9ICJlcDRvdXQtaXNvIiwKKwkJCS5vcHMJCT0gJnB4YTJ4eF9lcF9vcHMsCisJCQkubWF4cGFja2V0CT0gSVNPX0ZJRk9fU0laRSwKKwkJfSwKKwkJLmRldgkJPSAmbWVtb3J5LAorCQkuZmlmb19zaXplCT0gSVNPX0ZJRk9fU0laRSwKKwkJLmJFbmRwb2ludEFkZHJlc3MgPSA0LAorCQkuYm1BdHRyaWJ1dGVzCT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQywKKwkJLnJlZ191ZGNjcwk9ICZVRENDUzQsCisJCS5yZWdfdWJjcgk9ICZVQkNSNCwKKwkJLnJlZ191ZGRyCT0gJlVERFI0LAorCQlkcmNtciAoMjgpCisJfSwKKwkuZXBbNV0gPSB7CisJCS5lcCA9IHsKKwkJCS5uYW1lCQk9ICJlcDVpbi1pbnQiLAorCQkJLm9wcwkJPSAmcHhhMnh4X2VwX29wcywKKwkJCS5tYXhwYWNrZXQJPSBJTlRfRklGT19TSVpFLAorCQl9LAorCQkuZGV2CQk9ICZtZW1vcnksCisJCS5maWZvX3NpemUJPSBJTlRfRklGT19TSVpFLAorCQkuYkVuZHBvaW50QWRkcmVzcyA9IFVTQl9ESVJfSU4gfCA1LAorCQkuYm1BdHRyaWJ1dGVzCT0gVVNCX0VORFBPSU5UX1hGRVJfSU5ULAorCQkucmVnX3VkY2NzCT0gJlVEQ0NTNSwKKwkJLnJlZ191ZGRyCT0gJlVERFI1LAorCX0sCisKKwkvKiBzZWNvbmQgZ3JvdXAgb2YgZW5kcG9pbnRzICovCisJLmVwWzZdID0geworCQkuZXAgPSB7CisJCQkubmFtZQkJPSAiZXA2aW4tYnVsayIsCisJCQkub3BzCQk9ICZweGEyeHhfZXBfb3BzLAorCQkJLm1heHBhY2tldAk9IEJVTEtfRklGT19TSVpFLAorCQl9LAorCQkuZGV2CQk9ICZtZW1vcnksCisJCS5maWZvX3NpemUJPSBCVUxLX0ZJRk9fU0laRSwKKwkJLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOIHwgNiwKKwkJLmJtQXR0cmlidXRlcwk9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJCS5yZWdfdWRjY3MJPSAmVURDQ1M2LAorCQkucmVnX3VkZHIJPSAmVUREUjYsCisJCWRyY21yICgzMCkKKwl9LAorCS5lcFs3XSA9IHsKKwkJLmVwID0geworCQkJLm5hbWUJCT0gImVwN291dC1idWxrIiwKKwkJCS5vcHMJCT0gJnB4YTJ4eF9lcF9vcHMsCisJCQkubWF4cGFja2V0CT0gQlVMS19GSUZPX1NJWkUsCisJCX0sCisJCS5kZXYJCT0gJm1lbW9yeSwKKwkJLmZpZm9fc2l6ZQk9IEJVTEtfRklGT19TSVpFLAorCQkuYkVuZHBvaW50QWRkcmVzcyA9IDcsCisJCS5ibUF0dHJpYnV0ZXMJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCQkucmVnX3VkY2NzCT0gJlVEQ0NTNywKKwkJLnJlZ191YmNyCT0gJlVCQ1I3LAorCQkucmVnX3VkZHIJPSAmVUREUjcsCisJCWRyY21yICgzMSkKKwl9LAorCS5lcFs4XSA9IHsKKwkJLmVwID0geworCQkJLm5hbWUJCT0gImVwOGluLWlzbyIsCisJCQkub3BzCQk9ICZweGEyeHhfZXBfb3BzLAorCQkJLm1heHBhY2tldAk9IElTT19GSUZPX1NJWkUsCisJCX0sCisJCS5kZXYJCT0gJm1lbW9yeSwKKwkJLmZpZm9fc2l6ZQk9IElTT19GSUZPX1NJWkUsCisJCS5iRW5kcG9pbnRBZGRyZXNzID0gVVNCX0RJUl9JTiB8IDgsCisJCS5ibUF0dHJpYnV0ZXMJPSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DLAorCQkucmVnX3VkY2NzCT0gJlVEQ0NTOCwKKwkJLnJlZ191ZGRyCT0gJlVERFI4LAorCQlkcmNtciAoMzIpCisJfSwKKwkuZXBbOV0gPSB7CisJCS5lcCA9IHsKKwkJCS5uYW1lCQk9ICJlcDlvdXQtaXNvIiwKKwkJCS5vcHMJCT0gJnB4YTJ4eF9lcF9vcHMsCisJCQkubWF4cGFja2V0CT0gSVNPX0ZJRk9fU0laRSwKKwkJfSwKKwkJLmRldgkJPSAmbWVtb3J5LAorCQkuZmlmb19zaXplCT0gSVNPX0ZJRk9fU0laRSwKKwkJLmJFbmRwb2ludEFkZHJlc3MgPSA5LAorCQkuYm1BdHRyaWJ1dGVzCT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQywKKwkJLnJlZ191ZGNjcwk9ICZVRENDUzksCisJCS5yZWdfdWJjcgk9ICZVQkNSOSwKKwkJLnJlZ191ZGRyCT0gJlVERFI5LAorCQlkcmNtciAoMzMpCisJfSwKKwkuZXBbMTBdID0geworCQkuZXAgPSB7CisJCQkubmFtZQkJPSAiZXAxMGluLWludCIsCisJCQkub3BzCQk9ICZweGEyeHhfZXBfb3BzLAorCQkJLm1heHBhY2tldAk9IElOVF9GSUZPX1NJWkUsCisJCX0sCisJCS5kZXYJCT0gJm1lbW9yeSwKKwkJLmZpZm9fc2l6ZQk9IElOVF9GSUZPX1NJWkUsCisJCS5iRW5kcG9pbnRBZGRyZXNzID0gVVNCX0RJUl9JTiB8IDEwLAorCQkuYm1BdHRyaWJ1dGVzCT0gVVNCX0VORFBPSU5UX1hGRVJfSU5ULAorCQkucmVnX3VkY2NzCT0gJlVEQ0NTMTAsCisJCS5yZWdfdWRkcgk9ICZVRERSMTAsCisJfSwKKworCS8qIHRoaXJkIGdyb3VwIG9mIGVuZHBvaW50cyAqLworCS5lcFsxMV0gPSB7CisJCS5lcCA9IHsKKwkJCS5uYW1lCQk9ICJlcDExaW4tYnVsayIsCisJCQkub3BzCQk9ICZweGEyeHhfZXBfb3BzLAorCQkJLm1heHBhY2tldAk9IEJVTEtfRklGT19TSVpFLAorCQl9LAorCQkuZGV2CQk9ICZtZW1vcnksCisJCS5maWZvX3NpemUJPSBCVUxLX0ZJRk9fU0laRSwKKwkJLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOIHwgMTEsCisJCS5ibUF0dHJpYnV0ZXMJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCQkucmVnX3VkY2NzCT0gJlVEQ0NTMTEsCisJCS5yZWdfdWRkcgk9ICZVRERSMTEsCisJCWRyY21yICgzNSkKKwl9LAorCS5lcFsxMl0gPSB7CisJCS5lcCA9IHsKKwkJCS5uYW1lCQk9ICJlcDEyb3V0LWJ1bGsiLAorCQkJLm9wcwkJPSAmcHhhMnh4X2VwX29wcywKKwkJCS5tYXhwYWNrZXQJPSBCVUxLX0ZJRk9fU0laRSwKKwkJfSwKKwkJLmRldgkJPSAmbWVtb3J5LAorCQkuZmlmb19zaXplCT0gQlVMS19GSUZPX1NJWkUsCisJCS5iRW5kcG9pbnRBZGRyZXNzID0gMTIsCisJCS5ibUF0dHJpYnV0ZXMJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCQkucmVnX3VkY2NzCT0gJlVEQ0NTMTIsCisJCS5yZWdfdWJjcgk9ICZVQkNSMTIsCisJCS5yZWdfdWRkcgk9ICZVRERSMTIsCisJCWRyY21yICgzNikKKwl9LAorCS5lcFsxM10gPSB7CisJCS5lcCA9IHsKKwkJCS5uYW1lCQk9ICJlcDEzaW4taXNvIiwKKwkJCS5vcHMJCT0gJnB4YTJ4eF9lcF9vcHMsCisJCQkubWF4cGFja2V0CT0gSVNPX0ZJRk9fU0laRSwKKwkJfSwKKwkJLmRldgkJPSAmbWVtb3J5LAorCQkuZmlmb19zaXplCT0gSVNPX0ZJRk9fU0laRSwKKwkJLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOIHwgMTMsCisJCS5ibUF0dHJpYnV0ZXMJPSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DLAorCQkucmVnX3VkY2NzCT0gJlVEQ0NTMTMsCisJCS5yZWdfdWRkcgk9ICZVRERSMTMsCisJCWRyY21yICgzNykKKwl9LAorCS5lcFsxNF0gPSB7CisJCS5lcCA9IHsKKwkJCS5uYW1lCQk9ICJlcDE0b3V0LWlzbyIsCisJCQkub3BzCQk9ICZweGEyeHhfZXBfb3BzLAorCQkJLm1heHBhY2tldAk9IElTT19GSUZPX1NJWkUsCisJCX0sCisJCS5kZXYJCT0gJm1lbW9yeSwKKwkJLmZpZm9fc2l6ZQk9IElTT19GSUZPX1NJWkUsCisJCS5iRW5kcG9pbnRBZGRyZXNzID0gMTQsCisJCS5ibUF0dHJpYnV0ZXMJPSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DLAorCQkucmVnX3VkY2NzCT0gJlVEQ0NTMTQsCisJCS5yZWdfdWJjcgk9ICZVQkNSMTQsCisJCS5yZWdfdWRkcgk9ICZVRERSMTQsCisJCWRyY21yICgzOCkKKwl9LAorCS5lcFsxNV0gPSB7CisJCS5lcCA9IHsKKwkJCS5uYW1lCQk9ICJlcDE1aW4taW50IiwKKwkJCS5vcHMJCT0gJnB4YTJ4eF9lcF9vcHMsCisJCQkubWF4cGFja2V0CT0gSU5UX0ZJRk9fU0laRSwKKwkJfSwKKwkJLmRldgkJPSAmbWVtb3J5LAorCQkuZmlmb19zaXplCT0gSU5UX0ZJRk9fU0laRSwKKwkJLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOIHwgMTUsCisJCS5ibUF0dHJpYnV0ZXMJPSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCisJCS5yZWdfdWRjY3MJPSAmVURDQ1MxNSwKKwkJLnJlZ191ZGRyCT0gJlVERFIxNSwKKwl9LAorI2VuZGlmIC8qICFDT05GSUdfVVNCX1BYQTJYWF9TTUFMTCAqLworfTsKKworI2RlZmluZSBDUDE1UjBfVkVORE9SX01BU0sJMHhmZmZmZTAwMAorCisjaWYJZGVmaW5lZChDT05GSUdfQVJDSF9QWEEpCisjZGVmaW5lIENQMTVSMF9YU0NBTEVfVkFMVUUJMHg2OTA1MjAwMAkvKiBpbnRlbC9hcm0veHNjYWxlICovCisKKyNlbGlmCWRlZmluZWQoQ09ORklHX0FSQ0hfSVhQNFhYKQorI2RlZmluZSBDUDE1UjBfWFNDQUxFX1ZBTFVFCTB4NjkwNTQwMDAJLyogaW50ZWwvYXJtL2l4cDR4eCAqLworCisjZW5kaWYKKworI2RlZmluZSBDUDE1UjBfUFJPRF9NQVNLCTB4MDAwMDAzZjAKKyNkZWZpbmUgUFhBMjV4CQkJMHgwMDAwMDEwMAkvKiBhbmQgUFhBMjZ4ICovCisjZGVmaW5lIFBYQTIxMAkJCTB4MDAwMDAxMjAKKworI2RlZmluZSBDUDE1UjBfUkVWX01BU0sJCTB4MDAwMDAwMGYKKworI2RlZmluZSBDUDE1UjBfUFJPRFJFVl9NQVNLCShDUDE1UjBfUFJPRF9NQVNLIHwgQ1AxNVIwX1JFVl9NQVNLKQorCisjZGVmaW5lIFBYQTI1NV9BMAkJMHgwMDAwMDEwNgkvKiBvciBQWEEyNjBfQjEgKi8KKyNkZWZpbmUgUFhBMjUwX0MwCQkweDAwMDAwMTA1CS8qIG9yIFBYQTI2eF9CMCAqLworI2RlZmluZSBQWEEyNTBfQjIJCTB4MDAwMDAxMDQKKyNkZWZpbmUgUFhBMjUwX0IxCQkweDAwMDAwMTAzCS8qIG9yIFBYQTI2MF9BMCAqLworI2RlZmluZSBQWEEyNTBfQjAJCTB4MDAwMDAxMDIKKyNkZWZpbmUgUFhBMjUwX0ExCQkweDAwMDAwMTAxCisjZGVmaW5lIFBYQTI1MF9BMAkJMHgwMDAwMDEwMAorCisjZGVmaW5lIFBYQTIxMF9DMAkJMHgwMDAwMDEyNQorI2RlZmluZSBQWEEyMTBfQjIJCTB4MDAwMDAxMjQKKyNkZWZpbmUgUFhBMjEwX0IxCQkweDAwMDAwMTIzCisjZGVmaW5lIFBYQTIxMF9CMAkJMHgwMDAwMDEyMgorI2RlZmluZSBJWFA0MjVfQTAJCTB4MDAwMDAxYzEKKworLyoKKyAqIAlwcm9iZSAtIGJpbmRzIHRvIHRoZSBwbGF0Zm9ybSBkZXZpY2UKKyAqLworc3RhdGljIGludCBfX2luaXQgcHhhMnh4X3VkY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQoreworCXN0cnVjdCBweGEyeHhfdWRjICpkZXYgPSAmbWVtb3J5OworCWludCByZXR2YWwsIG91dF9kbWEgPSAxOworCXUzMiBjaGlwcmV2OworCisJLyogaW5zaXN0IG9uIEludGVsL0FSTS9YU2NhbGUgKi8KKwlhc20oIm1yYyU/IHAxNSwgMCwgJTAsIGMwLCBjMCIgOiAiPXIiIChjaGlwcmV2KSk7CisJaWYgKChjaGlwcmV2ICYgQ1AxNVIwX1ZFTkRPUl9NQVNLKSAhPSBDUDE1UjBfWFNDQUxFX1ZBTFVFKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vdCBYU2NhbGUhXG4iLCBkcml2ZXJfbmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIHRyaWdnZXIgY2hpcHJldi1zcGVjaWZpYyBsb2dpYyAqLworCXN3aXRjaCAoY2hpcHJldiAmIENQMTVSMF9QUk9EUkVWX01BU0spIHsKKyNpZglkZWZpbmVkKENPTkZJR19BUkNIX1BYQSkKKwljYXNlIFBYQTI1NV9BMDoKKwkJZGV2LT5oYXNfY2ZyID0gMTsKKwkJYnJlYWs7CisJY2FzZSBQWEEyNTBfQTA6CisJY2FzZSBQWEEyNTBfQTE6CisJCS8qIEEwL0ExICJub3QgcmVsZWFzZWQiOyBlcCAxMywgMTUgdW51c2FibGUgKi8KKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBQWEEyNTBfQjI6IGNhc2UgUFhBMjEwX0IyOgorCWNhc2UgUFhBMjUwX0IxOiBjYXNlIFBYQTIxMF9CMToKKwljYXNlIFBYQTI1MF9CMDogY2FzZSBQWEEyMTBfQjA6CisJCW91dF9kbWEgPSAwOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFBYQTI1MF9DMDogY2FzZSBQWEEyMTBfQzA6CisJCWJyZWFrOworI2VsaWYJZGVmaW5lZChDT05GSUdfQVJDSF9JWFA0WFgpCisJY2FzZSBJWFA0MjVfQTA6CisJCW91dF9kbWEgPSAwOworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCW91dF9kbWEgPSAwOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bnJlY29nbml6ZWQgcHJvY2Vzc29yOiAlMDh4XG4iLAorCQkJZHJpdmVyX25hbWUsIGNoaXByZXYpOworCQkvKiBpb3AzeHgsIGl4cDR4eCwgLi4uICovCisJCXJldHVybiAtRU5PREVWOworCX0KKworCXByX2RlYnVnKCIlczogSVJRICVkJXMlcyVzXG4iLCBkcml2ZXJfbmFtZSwgSVJRX1VTQiwKKwkJZGV2LT5oYXNfY2ZyID8gIiIgOiAiICghY2ZyKSIsCisJCW91dF9kbWEgPyAiIiA6ICIgKGJyb2tlbiBkbWEtb3V0KSIsCisJCVNJWkVfU1RSIERNQVNUUgorCQkpOworCisjaWZkZWYJVVNFX0RNQQorI2lmbmRlZglVU0VfT1VUX0RNQQorCW91dF9kbWEgPSAwOworI2VuZGlmCisJLyogcHhhIDI1MCBlcnJhdHVtIDEzMCBwcmV2ZW50cyB1c2luZyBPVVQgZG1hIChmaXhlZCBDMCkgKi8KKwlpZiAoIW91dF9kbWEpIHsKKwkJRE1TRygiZGlzYWJsZWQgT1VUIGRtYVxuIik7CisJCWRldi0+ZXBbIDJdLnJlZ19kcmNtciA9IGRldi0+ZXBbIDRdLnJlZ19kcmNtciA9IDA7CisJCWRldi0+ZXBbIDddLnJlZ19kcmNtciA9IGRldi0+ZXBbIDldLnJlZ19kcmNtciA9IDA7CisJCWRldi0+ZXBbMTJdLnJlZ19kcmNtciA9IGRldi0+ZXBbMTRdLnJlZ19kcmNtciA9IDA7CisJfQorI2VuZGlmCisKKwkvKiBvdGhlciBub24tc3RhdGljIHBhcnRzIG9mIGluaXQgKi8KKwlkZXYtPmRldiA9IF9kZXY7CisJZGV2LT5tYWNoID0gX2Rldi0+cGxhdGZvcm1fZGF0YTsKKworCWluaXRfdGltZXIoJmRldi0+dGltZXIpOworCWRldi0+dGltZXIuZnVuY3Rpb24gPSB1ZGNfd2F0Y2hkb2c7CisJZGV2LT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRldjsKKworCWRldmljZV9pbml0aWFsaXplKCZkZXYtPmdhZGdldC5kZXYpOworCWRldi0+Z2FkZ2V0LmRldi5wYXJlbnQgPSBfZGV2OworCWRldi0+Z2FkZ2V0LmRldi5kbWFfbWFzayA9IF9kZXYtPmRtYV9tYXNrOworCisJdGhlX2NvbnRyb2xsZXIgPSBkZXY7CisJZGV2X3NldF9kcnZkYXRhKF9kZXYsIGRldik7CisKKwl1ZGNfZGlzYWJsZShkZXYpOworCXVkY19yZWluaXQoZGV2KTsKKworCWRldi0+dmJ1cyA9IGlzX3VzYl9jb25uZWN0ZWQoKTsKKworCS8qIGlycSBzZXR1cCBhZnRlciBvbGQgaGFyZHdhcmUgc3RhdGUgaXMgY2xlYW5lZCB1cCAqLworCXJldHZhbCA9IHJlcXVlc3RfaXJxKElSUV9VU0IsIHB4YTJ4eF91ZGNfaXJxLAorCQkJU0FfSU5URVJSVVBULCBkcml2ZXJfbmFtZSwgZGV2KTsKKwlpZiAocmV0dmFsICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgZ2V0IGlycSAlaSwgZXJyICVkXG4iLAorCQkJZHJpdmVyX25hbWUsIElSUV9VU0IsIHJldHZhbCk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWRldi0+Z290X2lycSA9IDE7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9MVUJCT0NLCisJaWYgKG1hY2hpbmVfaXNfbHViYm9jaygpKSB7CisJCXJldHZhbCA9IHJlcXVlc3RfaXJxKExVQkJPQ0tfVVNCX0RJU0NfSVJRLAorCQkJCWx1YmJvY2tfdmJ1c19pcnEsCisJCQkJU0FfSU5URVJSVVBUIHwgU0FfU0FNUExFX1JBTkRPTSwKKwkJCQlkcml2ZXJfbmFtZSwgZGV2KTsKKwkJaWYgKHJldHZhbCAhPSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBnZXQgaXJxICVpLCBlcnIgJWRcbiIsCisJCQkJZHJpdmVyX25hbWUsIExVQkJPQ0tfVVNCX0RJU0NfSVJRLCByZXR2YWwpOworbHViYm9ja19mYWlsMDoKKwkJCWZyZWVfaXJxKElSUV9VU0IsIGRldik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCXJldHZhbCA9IHJlcXVlc3RfaXJxKExVQkJPQ0tfVVNCX0lSUSwKKwkJCQlsdWJib2NrX3ZidXNfaXJxLAorCQkJCVNBX0lOVEVSUlVQVCB8IFNBX1NBTVBMRV9SQU5ET00sCisJCQkJZHJpdmVyX25hbWUsIGRldik7CisJCWlmIChyZXR2YWwgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgZ2V0IGlycSAlaSwgZXJyICVkXG4iLAorCQkJCWRyaXZlcl9uYW1lLCBMVUJCT0NLX1VTQl9JUlEsIHJldHZhbCk7CisJCQlmcmVlX2lycShMVUJCT0NLX1VTQl9ESVNDX0lSUSwgZGV2KTsKKwkJCWdvdG8gbHViYm9ja19mYWlsMDsKKwkJfQorI2lmZGVmIERFQlVHCisJCS8qIHdpdGggVS1Cb290IChidXQgbm90IEJMT0IpLCBoZXggaXMgb2ZmIGJ5IGRlZmF1bHQgKi8KKwkJSEVYX0RJU1BMQVkoZGV2LT5zdGF0cy5pcnFzKTsKKwkJTFVCX0RJU0NfQkxOS19MRUQgJj0gMHhmZjsKKyNlbmRpZgorCX0KKyNlbmRpZgorCWNyZWF0ZV9wcm9jX2ZpbGVzKCk7CisKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgX19leGl0IHB4YTJ4eF91ZGNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCit7CisJc3RydWN0IHB4YTJ4eF91ZGMgKmRldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKworCXVkY19kaXNhYmxlKGRldik7CisJcmVtb3ZlX3Byb2NfZmlsZXMoKTsKKwl1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKGRldi0+ZHJpdmVyKTsKKworCWlmIChkZXYtPmdvdF9pcnEpIHsKKwkJZnJlZV9pcnEoSVJRX1VTQiwgZGV2KTsKKwkJZGV2LT5nb3RfaXJxID0gMDsKKwl9CisJaWYgKG1hY2hpbmVfaXNfbHViYm9jaygpKSB7CisJCWZyZWVfaXJxKExVQkJPQ0tfVVNCX0RJU0NfSVJRLCBkZXYpOworCQlmcmVlX2lycShMVUJCT0NLX1VTQl9JUlEsIGRldik7CisJfQorCWRldl9zZXRfZHJ2ZGF0YShfZGV2LCBOVUxMKTsKKwl0aGVfY29udHJvbGxlciA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZglDT05GSUdfUE0KKworLyogVVNCIHN1c3BlbmQgKGNvbnRyb2xsZWQgYnkgdGhlIGhvc3QpIGFuZCBzeXN0ZW0gc3VzcGVuZCAoY29udHJvbGxlZAorICogYnkgdGhlIFBYQSkgZG9uJ3QgbmVjZXNzYXJpbHkgd29yayB3ZWxsIHRvZ2V0aGVyLiAgSWYgVVNCIGlzIGFjdGl2ZSwKKyAqIHRoZSA0OCBNSHogY2xvY2sgaXMgcmVxdWlyZWQ7IHNvIHRoZSBzeXN0ZW0gY2FuJ3QgZW50ZXIgMzMgTUh6IGlkbGUKKyAqIG1vZGUsIG9yIGFueSBkZWVwZXIgUE0gc2F2aW5nIHN0YXRlLgorICoKKyAqIEZvciBub3csIHdlIHB1bnQgYW5kIGZvcmNpYmx5IGRpc2Nvbm5lY3QgZnJvbSB0aGUgVVNCIGhvc3Qgd2hlbiBQWEEKKyAqIGVudGVycyBhbnkgc3VzcGVuZCBzdGF0ZS4gIFdoaWxlIHdlJ3JlIGRpc2Nvbm5lY3RlZCwgd2UgYWx3YXlzIGRpc2FibGUKKyAqIHRoZSA0OE1IeiBVU0IgY2xvY2sgLi4uIGFsbG93aW5nIFBYQSBzbGVlcCBhbmQvb3IgMzMgTUh6IGlkbGUgc3RhdGVzLiAKKyAqIEJvYXJkcyB3aXRob3V0IHNvZnR3YXJlIHB1bGx1cCBjb250cm9sIHNob3VsZG4ndCB1c2UgdGhvc2Ugc3RhdGVzLgorICogVkJVUyBJUlFzIHNob3VsZCBwcm9iYWJseSBiZSBpZ25vcmVkIHNvIHRoYXQgdGhlIFBYQSBkZXZpY2UganVzdCBhY3RzCisgKiAiZGVhZCIgdG8gVVNCIGhvc3RzIHVudGlsIHN5c3RlbSByZXN1bWUuCisgKi8KK3N0YXRpYyBpbnQgcHhhMnh4X3VkY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN0YXRlLCB1MzIgbGV2ZWwpCit7CisJc3RydWN0IHB4YTJ4eF91ZGMJKnVkYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGxldmVsID09IFNVU1BFTkRfUE9XRVJfRE9XTikgeworCQlpZiAoIXVkYy0+bWFjaC0+dWRjX2NvbW1hbmQpCisJCQlXQVJOKCJVU0IgaG9zdCB3b24ndCBkZXRlY3QgZGlzY29ubmVjdCFcbiIpOworCQlwdWxsdXAodWRjLCAwKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHhhMnh4X3VkY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgbGV2ZWwpCit7CisJc3RydWN0IHB4YTJ4eF91ZGMJKnVkYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGxldmVsID09IFJFU1VNRV9QT1dFUl9PTikKKwkJcHVsbHVwKHVkYywgMSk7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lCXB4YTJ4eF91ZGNfc3VzcGVuZAlOVUxMCisjZGVmaW5lCXB4YTJ4eF91ZGNfcmVzdW1lCU5VTEwKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdWRjX2RyaXZlciA9IHsKKwkubmFtZQkJPSAicHhhMnh4LXVkYyIsCisJLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCisJLnByb2JlCQk9IHB4YTJ4eF91ZGNfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2V4aXRfcChweGEyeHhfdWRjX3JlbW92ZSksCisJLnN1c3BlbmQJPSBweGEyeHhfdWRjX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBweGEyeHhfdWRjX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVkY19pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHZlcnNpb24gJXNcbiIsIGRyaXZlcl9uYW1lLCBEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmdWRjX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh1ZGNfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1ZGNfZXhpdCh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHVkY19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9BVVRIT1IoIkZyYW5rIEJlY2tlciwgUm9iZXJ0IFNjaHdlYmVsLCBEYXZpZCBCcm93bmVsbCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjNhN2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuaApAQCAtMCwwICsxLDMyMCBAQAorLyoKKyAqIGxpbnV4L2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmgKKyAqIEludGVsIFBYQTJ4eCBvbi1jaGlwIGZ1bGwgc3BlZWQgVVNCIGRldmljZSBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIFJvYmVydCBTY2h3ZWJlbCA8ci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZT4sIFBlbmd1dHJvbml4CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgRGF2aWQgQnJvd25lbGwKKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgX19MSU5VWF9VU0JfR0FER0VUX1BYQTJYWF9ICisjZGVmaW5lIF9fTElOVVhfVVNCX0dBREdFVF9QWEEyWFhfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogcHhhMnh4IGhhcyB0aGlzIChtb3ZlIHRvIGluY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEtcmVncy5oKSAqLworI2RlZmluZSBVRk5SSF9TSVIJKDEgPDwgNykJLyogU09GIGludGVycnVwdCByZXF1ZXN0ICovCisjZGVmaW5lIFVGTlJIX1NJTQkoMSA8PCA2KQkvKiBTT0YgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgVUZOUkhfSVBFMTQJKDEgPDwgNSkJLyogSVNPIHBhY2tldCBlcnJvciwgZXAxNCAqLworI2RlZmluZSBVRk5SSF9JUEU5CSgxIDw8IDQpCS8qIElTTyBwYWNrZXQgZXJyb3IsIGVwOSAqLworI2RlZmluZSBVRk5SSF9JUEU0CSgxIDw8IDMpCS8qIElTTyBwYWNrZXQgZXJyb3IsIGVwNCAqLworCisvKiBweGEyNTUgaGFzIHRoaXMgKG1vdmUgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmgpICovCisjZGVmaW5lCVVEQ0NGUgkJVURDX1JFUzIJLyogVURDIENvbnRyb2wgRnVuY3Rpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVURDQ0ZSX0FSRU4JKDEgPDwgNykJLyogQUNLIHJlc3BvbnNlIGVuYWJsZSAobm93KSAqLworI2RlZmluZSBVRENDRlJfQUNNCSgxIDw8IDIpCS8qIEFDSyBjb250cm9sIG1vZGUgKHdhaXQgZm9yIEFSRU4pICovCisKKy8qIGxhdGVzdCBweGEyNTUgZXJyYXRhIGRlZmluZSBuZXcgIm11c3QgYmUgb25lIiBiaXRzIGluIFVEQ0NGUiAqLworI2RlZmluZQlVRENDRlJfTUIxCSgweGZmICYgfihVRENDRlJfQVJFTnxVRENDRlJfQUNNKSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RydWN0IHB4YTJ4eF91ZGM7CisKK3N0cnVjdCBweGEyeHhfZXAgeworCXN0cnVjdCB1c2JfZXAJCQkJZXA7CisJc3RydWN0IHB4YTJ4eF91ZGMJCQkqZGV2OworCisJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpkZXNjOworCXN0cnVjdCBsaXN0X2hlYWQJCQlxdWV1ZTsKKwl1bnNpZ25lZCBsb25nCQkJCXBpb19pcnFzOworCXVuc2lnbmVkIGxvbmcJCQkJZG1hX2lycXM7CisJc2hvcnQJCQkJCWRtYTsgCisKKwl1bnNpZ25lZCBzaG9ydAkJCQlmaWZvX3NpemU7CisJdTgJCQkJCWJFbmRwb2ludEFkZHJlc3M7CisJdTgJCQkJCWJtQXR0cmlidXRlczsKKworCXVuc2lnbmVkCQkJCXN0b3BwZWQgOiAxOworCXVuc2lnbmVkCQkJCWRtYV9maXh1cCA6IDE7CisJCQkJCQkJIAorCS8qIFVEQ0NTID0gVURDIENvbnRyb2wvU3RhdHVzIGZvciB0aGlzIEVQCisJICogVUJDUiA9IFVEQyBCeXRlIENvdW50IFJlbWFpbmluZyAoY29udGVudHMgb2YgT1VUIGZpZm8pCisJICogVUREUiA9IFVEQyBFbmRwb2ludCBEYXRhIFJlZ2lzdGVyICh0aGUgZmlmbykKKwkgKiBEUkNNID0gRE1BIFJlcXVlc3QgQ2hhbm5lbCBNYXAKKwkgKi8KKwl2b2xhdGlsZSB1MzIJCQkJKnJlZ191ZGNjczsKKwl2b2xhdGlsZSB1MzIJCQkJKnJlZ191YmNyOworCXZvbGF0aWxlIHUzMgkJCQkqcmVnX3VkZHI7CisjaWZkZWYgVVNFX0RNQQorCXZvbGF0aWxlIHUzMgkJCQkqcmVnX2RyY21yOworI2RlZmluZQlkcmNtcihuKSAgLnJlZ19kcmNtciA9ICYgRFJDTVIgIyMgbiAsCisjZWxzZQorI2RlZmluZQlkcmNtcihuKSAgCisjZW5kaWYKK307CisKK3N0cnVjdCBweGEyeHhfcmVxdWVzdCB7CisJc3RydWN0IHVzYl9yZXF1ZXN0CQkJcmVxOworCXN0cnVjdCBsaXN0X2hlYWQJCQlxdWV1ZTsKK307CisKK2VudW0gZXAwX3N0YXRlIHsgCisJRVAwX0lETEUsCisJRVAwX0lOX0RBVEFfUEhBU0UsCisJRVAwX09VVF9EQVRBX1BIQVNFLAorCUVQMF9FTkRfWEZFUiwKKwlFUDBfU1RBTEwsCit9OworCisjZGVmaW5lIEVQMF9GSUZPX1NJWkUJKCh1bnNpZ25lZCkxNikKKyNkZWZpbmUgQlVMS19GSUZPX1NJWkUJKCh1bnNpZ25lZCk2NCkKKyNkZWZpbmUgSVNPX0ZJRk9fU0laRQkoKHVuc2lnbmVkKTI1NikKKyNkZWZpbmUgSU5UX0ZJRk9fU0laRQkoKHVuc2lnbmVkKTgpCisKK3N0cnVjdCB1ZGNfc3RhdHMgeworCXN0cnVjdCBlcDBzdGF0cyB7CisJCXVuc2lnbmVkIGxvbmcJCW9wczsKKwkJdW5zaWduZWQgbG9uZwkJYnl0ZXM7CisJfSByZWFkLCB3cml0ZTsKKwl1bnNpZ25lZCBsb25nCQkJaXJxczsKK307CisKKyNpZmRlZiBDT05GSUdfVVNCX1BYQTJYWF9TTUFMTAorLyogd2hlbiBtZW1vcnkncyB0aWdodCwgU01BTEwgY29uZmlnIHNhdmVzIGNvZGUrZGF0YS4gICovCisjdW5kZWYJVVNFX0RNQQorI2RlZmluZQlQWEFfVURDX05VTV9FTkRQT0lOVFMJMworI2VuZGlmCisKKyNpZm5kZWYJUFhBX1VEQ19OVU1fRU5EUE9JTlRTCisjZGVmaW5lCVBYQV9VRENfTlVNX0VORFBPSU5UUwkxNgorI2VuZGlmCisKK3N0cnVjdCBweGEyeHhfdWRjIHsKKwlzdHJ1Y3QgdXNiX2dhZGdldAkJCWdhZGdldDsKKwlzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIJCSpkcml2ZXI7CisKKwllbnVtIGVwMF9zdGF0ZQkJCQllcDBzdGF0ZTsKKwlzdHJ1Y3QgdWRjX3N0YXRzCQkJc3RhdHM7CisJdW5zaWduZWQJCQkJZ290X2lycSA6IDEsCisJCQkJCQl2YnVzIDogMSwKKwkJCQkJCXB1bGx1cCA6IDEsCisJCQkJCQloYXNfY2ZyIDogMSwKKwkJCQkJCXJlcV9wZW5kaW5nIDogMSwKKwkJCQkJCXJlcV9zdGQgOiAxLAorCQkJCQkJcmVxX2NvbmZpZyA6IDE7CisKKyNkZWZpbmUgc3RhcnRfd2F0Y2hkb2coZGV2KSBtb2RfdGltZXIoJmRldi0+dGltZXIsIGppZmZpZXMgKyAoSFovMjAwKSkKKwlzdHJ1Y3QgdGltZXJfbGlzdAkJCXRpbWVyOworCisJc3RydWN0IGRldmljZQkJCQkqZGV2OworCXN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbwkJKm1hY2g7CisJdTY0CQkJCQlkbWFfbWFzazsKKwlzdHJ1Y3QgcHhhMnh4X2VwCQkJZXAgW1BYQV9VRENfTlVNX0VORFBPSU5UU107Cit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgQ09ORklHX0FSQ0hfTFVCQk9DSworI2luY2x1ZGUgPGFzbS9hcmNoL2x1YmJvY2suaD4KKy8qIGx1YmJvY2sgY2FuIGFsc28gcmVwb3J0IHVzYiBjb25uZWN0L2Rpc2Nvbm5lY3QgaXJxcyAqLworCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgSEVYX0RJU1BMQVkobikJaWYgKG1hY2hpbmVfaXNfbHViYm9jaygpKSB7IExVQl9IRVhMRUQgPSAobik7IH0KKyNlbmRpZgorCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogTEVEcyBhcmUgb25seSBmb3IgZGVidWcgKi8KKyNpZm5kZWYgSEVYX0RJU1BMQVkKKyNkZWZpbmUgSEVYX0RJU1BMQVkobikJCWRvIHt9IHdoaWxlKDApCisjZW5kaWYKKworI2lmZGVmIERFQlVHCisjaW5jbHVkZSA8YXNtL2xlZHMuaD4KKworI2RlZmluZSBMRURfQ09OTkVDVEVEX09OCWxlZHNfZXZlbnQobGVkX2dyZWVuX29uKQorI2RlZmluZSBMRURfQ09OTkVDVEVEX09GRglkbyB7IFwKKwkJCQkJbGVkc19ldmVudChsZWRfZ3JlZW5fb2ZmKTsgXAorCQkJCQlIRVhfRElTUExBWSgwKTsgXAorCQkJCX0gd2hpbGUoMCkKKyNlbmRpZgorCisjaWZuZGVmIExFRF9DT05ORUNURURfT04KKyNkZWZpbmUgTEVEX0NPTk5FQ1RFRF9PTglkbyB7fSB3aGlsZSgwKQorI2RlZmluZSBMRURfQ09OTkVDVEVEX09GRglkbyB7fSB3aGlsZSgwKQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3VkYyAqdGhlX2NvbnRyb2xsZXI7CisKKy8qIG9uZSBHUElPIHNob3VsZCBiZSB1c2VkIHRvIGRldGVjdCBob3N0IGRpc2Nvbm5lY3QgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlzX3VzYl9jb25uZWN0ZWQodm9pZCkKK3sKKwlpZiAoIXRoZV9jb250cm9sbGVyLT5tYWNoLT51ZGNfaXNfY29ubmVjdGVkKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gdGhlX2NvbnRyb2xsZXItPm1hY2gtPnVkY19pc19jb25uZWN0ZWQoKTsKK30KKworLyogb25lIEdQSU8gc2hvdWxkIGZvcmNlIHRoZSBob3N0IHRvIHNlZSB0aGlzIGRldmljZSAob3Igbm90KSAqLworc3RhdGljIGlubGluZSB2b2lkIG1ha2VfdXNiX2Rpc2FwcGVhcih2b2lkKQoreworCWlmICghdGhlX2NvbnRyb2xsZXItPm1hY2gtPnVkY19jb21tYW5kKQorCQlyZXR1cm47CisJdGhlX2NvbnRyb2xsZXItPm1hY2gtPnVkY19jb21tYW5kKFBYQTJYWF9VRENfQ01EX0RJU0NPTk5FQ1QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbGV0X3VzYl9hcHBlYXIodm9pZCkKK3sKKwlpZiAoIXRoZV9jb250cm9sbGVyLT5tYWNoLT51ZGNfY29tbWFuZCkKKwkJcmV0dXJuOworCXRoZV9jb250cm9sbGVyLT5tYWNoLT51ZGNfY29tbWFuZChQWEEyWFhfVURDX0NNRF9DT05ORUNUKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIERlYnVnZ2luZyBzdXBwb3J0IHZhbmlzaGVzIGluIG5vbi1kZWJ1ZyBidWlsZHMuICBEQkdfTk9STUFMIHNob3VsZCBiZQorICogbW9zdGx5IHNpbGVudCBkdXJpbmcgbm9ybWFsIHVzZS90ZXN0aW5nLCB3aXRoIG5vIHRpbWluZyBzaWRlLWVmZmVjdHMuCisgKi8KKyNkZWZpbmUgREJHX05PUk1BTAkxCS8qIGVycm9yIHBhdGhzLCBkZXZpY2Ugc3RhdGUgdHJhbnNpdGlvbnMgKi8KKyNkZWZpbmUgREJHX1ZFUkJPU0UJMgkvKiBhZGQgc29tZSBzdWNjZXNzIHBhdGggdHJhY2UgaW5mbyAqLworI2RlZmluZSBEQkdfTk9JU1kJMwkvKiAuLi4gZXZlbiBtb3JlOiByZXF1ZXN0IGxldmVsICovCisjZGVmaW5lIERCR19WRVJZX05PSVNZCTQJLyogLi4uIGV2ZW4gbW9yZTogcGFja2V0IGxldmVsICovCisKKyNpZmRlZiBERUJVRworCitzdGF0aWMgY29uc3QgY2hhciAqc3RhdGVfbmFtZVtdID0geworCSJFUDBfSURMRSIsCisJIkVQMF9JTl9EQVRBX1BIQVNFIiwgIkVQMF9PVVRfREFUQV9QSEFTRSIsCisJIkVQMF9FTkRfWEZFUiIsICJFUDBfU1RBTEwiCit9OworCisjZGVmaW5lIERNU0coc3R1ZmYuLi4pIHByaW50ayhLRVJOX0RFQlVHICJ1ZGM6ICIgc3R1ZmYpCisKKyNpZmRlZiBWRVJCT1NFCisjICAgIGRlZmluZSBVRENfREVCVUcgREJHX1ZFUkJPU0UKKyNlbHNlCisjICAgIGRlZmluZSBVRENfREVCVUcgREJHX05PUk1BTAorI2VuZGlmCisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKK2R1bXBfdWRjY3IoY29uc3QgY2hhciAqbGFiZWwpCit7CisJdTMyCXVkY2NyID0gVURDQ1I7CisJRE1TRygiJXMgJTAyWCA9JXMlcyVzJXMlcyVzJXMlc1xuIiwKKwkJbGFiZWwsIHVkY2NyLAorCQkodWRjY3IgJiBVRENDUl9SRU0pID8gIiByZW0iIDogIiIsCisJCSh1ZGNjciAmIFVEQ0NSX1JTVElSKSA/ICIgcnN0aXIiIDogIiIsCisJCSh1ZGNjciAmIFVEQ0NSX1NSTSkgPyAiIHNybSIgOiAiIiwKKwkJKHVkY2NyICYgVURDQ1JfU1VTSVIpID8gIiBzdXNpciIgOiAiIiwKKwkJKHVkY2NyICYgVURDQ1JfUkVTSVIpID8gIiByZXNpciIgOiAiIiwKKwkJKHVkY2NyICYgVURDQ1JfUlNNKSA/ICIgcnNtIiA6ICIiLAorCQkodWRjY3IgJiBVRENDUl9VREEpID8gIiB1ZGEiIDogIiIsCisJCSh1ZGNjciAmIFVEQ0NSX1VERSkgPyAiIHVkZSIgOiAiIik7Cit9CisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKK2R1bXBfdWRjY3MwKGNvbnN0IGNoYXIgKmxhYmVsKQoreworCXUzMgkJdWRjY3MwID0gVURDQ1MwOworCisJRE1TRygiJXMgJXMgJTAyWCA9JXMlcyVzJXMlcyVzJXMlc1xuIiwKKwkJbGFiZWwsIHN0YXRlX25hbWVbdGhlX2NvbnRyb2xsZXItPmVwMHN0YXRlXSwgdWRjY3MwLAorCQkodWRjY3MwICYgVURDQ1MwX1NBKSA/ICIgc2EiIDogIiIsCisJCSh1ZGNjczAgJiBVRENDUzBfUk5FKSA/ICIgcm5lIiA6ICIiLAorCQkodWRjY3MwICYgVURDQ1MwX0ZTVCkgPyAiIGZzdCIgOiAiIiwKKwkJKHVkY2NzMCAmIFVEQ0NTMF9TU1QpID8gIiBzc3QiIDogIiIsCisJCSh1ZGNjczAgJiBVRENDUzBfRFJXRikgPyAiIGR3cmYiIDogIiIsCisJCSh1ZGNjczAgJiBVRENDUzBfRlRGKSA/ICIgZnRmIiA6ICIiLAorCQkodWRjY3MwICYgVURDQ1MwX0lQUikgPyAiIGlwciIgOiAiIiwKKwkJKHVkY2NzMCAmIFVEQ0NTMF9PUFIpID8gIiBvcHIiIDogIiIpOworfQorCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCitkdW1wX3N0YXRlKHN0cnVjdCBweGEyeHhfdWRjICpkZXYpCit7CisJdTMyCQl0bXA7CisJdW5zaWduZWQJaTsKKworCURNU0coIiVzICVzLCB1aWNyICUwMlguJTAyWCwgdXNpciAlMDJYLiUwMngsIHVmbnIgJTAyWC4lMDJYXG4iLAorCQlpc191c2JfY29ubmVjdGVkKCkgPyAiaG9zdCAiIDogImRpc2Nvbm5lY3RlZCIsCisJCXN0YXRlX25hbWVbZGV2LT5lcDBzdGF0ZV0sCisJCVVJQ1IxLCBVSUNSMCwgVVNJUjEsIFVTSVIwLCBVRk5SSCwgVUZOUkwpOworCWR1bXBfdWRjY3IoInVkY2NyIik7CisJaWYgKGRldi0+aGFzX2NmcikgeworCQl0bXAgPSBVRENDRlI7CisJCURNU0coInVkY2NmciAlMDJYID0lcyVzXG4iLCB0bXAsCisJCQkodG1wICYgVURDQ0ZSX0FSRU4pID8gIiBhcmVuIiA6ICIiLAorCQkJKHRtcCAmIFVEQ0NGUl9BQ00pID8gIiBhY20iIDogIiIpOworCX0KKworCWlmICghZGV2LT5kcml2ZXIpIHsKKwkJRE1TRygibm8gZ2FkZ2V0IGRyaXZlciBib3VuZFxuIik7CisJCXJldHVybjsKKwl9IGVsc2UKKwkJRE1TRygiZXAwIGRyaXZlciAnJXMnXG4iLCBkZXYtPmRyaXZlci0+ZHJpdmVyLm5hbWUpOworCisJaWYgKCFpc191c2JfY29ubmVjdGVkKCkpCisJCXJldHVybjsKKworCWR1bXBfdWRjY3MwICgidWRjY3MwIik7CisJRE1TRygiZXAwIElOICVsdS8lbHUsIE9VVCAlbHUvJWx1XG4iLAorCQlkZXYtPnN0YXRzLndyaXRlLmJ5dGVzLCBkZXYtPnN0YXRzLndyaXRlLm9wcywKKwkJZGV2LT5zdGF0cy5yZWFkLmJ5dGVzLCBkZXYtPnN0YXRzLnJlYWQub3BzKTsKKworCWZvciAoaSA9IDE7IGkgPCBQWEFfVURDX05VTV9FTkRQT0lOVFM7IGkrKykgeworCQlpZiAoZGV2LT5lcCBbaV0uZGVzYyA9PSAwKQorCQkJY29udGludWU7CisJCURNU0cgKCJ1ZGNjcyVkID0gJTAyeFxuIiwgaSwgKmRldi0+ZXAtPnJlZ191ZGNjcyk7CisJfQorfQorCisjZWxzZQorCisjZGVmaW5lIERNU0coc3R1ZmYuLi4pCQlkb3t9d2hpbGUoMCkKKworI2RlZmluZQlkdW1wX3VkY2NyKHgpCWRve313aGlsZSgwKQorI2RlZmluZQlkdW1wX3VkY2NzMCh4KQlkb3t9d2hpbGUoMCkKKyNkZWZpbmUJZHVtcF9zdGF0ZSh4KQlkb3t9d2hpbGUoMCkKKworI2RlZmluZSBVRENfREVCVUcgKCh1bnNpZ25lZCkwKQorCisjZW5kaWYKKworI2RlZmluZSBEQkcobHZsLCBzdHVmZi4uLikgZG97aWYgKChsdmwpIDw9IFVEQ19ERUJVRykgRE1TRyhzdHVmZik7fXdoaWxlKDApCisKKyNkZWZpbmUgV0FSTihzdHVmZi4uLikgcHJpbnRrKEtFUk5fV0FSTklORyAidWRjOiAiIHN0dWZmKQorI2RlZmluZSBJTkZPKHN0dWZmLi4uKSBwcmludGsoS0VSTl9JTkZPICJ1ZGM6ICIgc3R1ZmYpCisKKworI2VuZGlmIC8qIF9fTElOVVhfVVNCX0dBREdFVF9QWEEyWFhfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzUxOTc4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMKQEAgLTAsMCArMSwxNDI4IEBACisvKiAKKyAqIFJORElTIE1TRyBwYXJzZXIKKyAqIAorICogVmVyc2lvbjogICAgICRJZDogcm5kaXMuYyx2IDEuMTkgMjAwNC8wMy8yNSAyMTozMzo0NiByb2JlcnQgRXhwICQKKyAqIAorICogQXV0aG9yczoJQmVuZWRpa3QgU3ByYW5nZXIsIFBlbmd1dHJvbml4CisgKiAJCVJvYmVydCBTY2h3ZWJlbCwgUGVuZ3V0cm9uaXgKKyAqIAorICogICAgICAgICAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICAgICAgICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgICAgICAgICAgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIAorICogCisgKgkJVGhpcyBzb2Z0d2FyZSB3YXMgb3JpZ2luYWxseSBkZXZlbG9wZWQgaW4gY29uZm9ybWFuY2Ugd2l0aAorICoJCU1pY3Jvc29mdCdzIFJlbW90ZSBORElTIFNwZWNpZmljYXRpb24gTGljZW5zZSBBZ3JlZW1lbnQuCisgKiAgICAgICAgICAgICAgCisgKiAwMy8xMi8yMDA0IEthaS1Vd2UgQmxvZW0gPGxpbnV4LWRldmVsb3BtZW50QGF1ZXJzd2FsZC5kZT4KKyAqCQlGaXhlZCBtZXNzYWdlIGxlbmd0aCBidWcgaW4gaW5pdF9yZXNwb25zZQorICogCisgKiAwMy8yNS8yMDA0IEthaS1Vd2UgQmxvZW0gPGxpbnV4LWRldmVsb3BtZW50QGF1ZXJzd2FsZC5kZT4KKyAqIAkJRml4ZWQgcm5kaXNfcm1faGRyIGxlbmd0aCBidWcuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IGJ5IERhdmlkIEJyb3duZWxsCisgKgkJdXBkYXRlcyB0byBtZXJnZSB3aXRoIExpbnV4IDIuNiwgYmV0dGVyIG1hdGNoIFJORElTIHNwZWMKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKworI3VuZGVmCVJORElTX1BNCisjdW5kZWYJVkVSQk9TRQorCisjaW5jbHVkZSAicm5kaXMuaCIKKworCisvKiBUaGUgZHJpdmVyIGZvciB5b3VyIFVTQiBjaGlwIG5lZWRzIHRvIHN1cHBvcnQgZXAwIE9VVCB0byB3b3JrIHdpdGgKKyAqIFJORElTLCBwbHVzIGFsbCB0aHJlZSBDREMgRXRoZXJuZXQgZW5kcG9pbnRzIChpbnRlcnJ1cHQgbm90IG9wdGlvbmFsKS4KKyAqCisgKiBXaW5kb3dzIGhvc3RzIG5lZWQgYW4gSU5GIGZpbGUgbGlrZSBEb2N1bWVudGF0aW9uL3VzYi9saW51eC5pbmYKKyAqIGFuZCB3aWxsIGJlIGhhcHBpZXIgaWYgeW91IHByb3ZpZGUgdGhlIGhvc3RfYWRkciBtb2R1bGUgcGFyYW1ldGVyLgorICovCisKKyNpZiAwCisjZGVmaW5lIERFQlVHKHN0cixhcmdzLi4uKSBkbyB7IFwKKwlpZiAocm5kaXNfZGVidWcpIFwKKwkJcHJpbnRrKEtFUk5fREVCVUcgc3RyICwgIyMgYXJncyApOyBcCisJfSB3aGlsZSAoMCkKK3N0YXRpYyBpbnQgcm5kaXNfZGVidWcgPSAwOworCittb2R1bGVfcGFyYW0gKHJuZGlzX2RlYnVnLCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MgKHJuZGlzX2RlYnVnLCAiZW5hYmxlIGRlYnVnZ2luZyIpOworCisjZWxzZQorCisjZGVmaW5lIHJuZGlzX2RlYnVnCQkwCisjZGVmaW5lIERFQlVHKHN0cixhcmdzLi4uKQlkb3t9d2hpbGUoMCkKKyNlbmRpZgorCisjZGVmaW5lIFJORElTX01BWF9DT05GSUdTCTEKKworCitzdGF0aWMgcm5kaXNfcGFyYW1zIHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtSTkRJU19NQVhfQ09ORklHU107CisKKy8qIERyaXZlciBWZXJzaW9uICovCitzdGF0aWMgY29uc3QgX19sZTMyIHJuZGlzX2RyaXZlcl92ZXJzaW9uID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSk7CisKKy8qIEZ1bmN0aW9uIFByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgcm5kaXNfaW5pdF9yZXNwb25zZSAoaW50IGNvbmZpZ05yLCBybmRpc19pbml0X21zZ190eXBlICpidWYpOworc3RhdGljIGludCBybmRpc19xdWVyeV9yZXNwb25zZSAoaW50IGNvbmZpZ05yLCBybmRpc19xdWVyeV9tc2dfdHlwZSAqYnVmKTsKK3N0YXRpYyBpbnQgcm5kaXNfc2V0X3Jlc3BvbnNlIChpbnQgY29uZmlnTnIsIHJuZGlzX3NldF9tc2dfdHlwZSAqYnVmKTsKK3N0YXRpYyBpbnQgcm5kaXNfcmVzZXRfcmVzcG9uc2UgKGludCBjb25maWdOciwgcm5kaXNfcmVzZXRfbXNnX3R5cGUgKmJ1Zik7CitzdGF0aWMgaW50IHJuZGlzX2tlZXBhbGl2ZV9yZXNwb25zZSAoaW50IGNvbmZpZ05yLCAKKwkJCQkgICAgIHJuZGlzX2tlZXBhbGl2ZV9tc2dfdHlwZSAqYnVmKTsKKworc3RhdGljIHJuZGlzX3Jlc3BfdCAqcm5kaXNfYWRkX3Jlc3BvbnNlIChpbnQgY29uZmlnTnIsIHUzMiBsZW5ndGgpOworCisKKy8qIE5ESVMgRnVuY3Rpb25zICovCitzdGF0aWMgaW50IGdlbl9uZGlzX3F1ZXJ5X3Jlc3AgKGludCBjb25maWdOciwgdTMyIE9JRCwgcm5kaXNfcmVzcF90ICpyKQoreworCWludCAJCQlyZXR2YWwgPSAtRU5PVFNVUFA7CisJdTMyIAkJCWxlbmd0aCA9IDA7CisJX19sZTMyCQkJKnRtcDsKKwlpbnQJCQlpLCBjb3VudDsKKwlybmRpc19xdWVyeV9jbXBsdF90eXBlCSpyZXNwOworCisJaWYgKCFyKSByZXR1cm4gLUVOT01FTTsKKwlyZXNwID0gKHJuZGlzX3F1ZXJ5X2NtcGx0X3R5cGUgKikgci0+YnVmOworCisJaWYgKCFyZXNwKSByZXR1cm4gLUVOT01FTTsKKwkKKwlzd2l0Y2ggKE9JRCkgeworCisJLyogZ2VuZXJhbCBvaWRzICh0YWJsZSA0LTEpICovCisKKwkvKiBtYW5kYXRvcnkgKi8KKwljYXNlIE9JRF9HRU5fU1VQUE9SVEVEX0xJU1Q6CisJCURFQlVHICgiJXM6IE9JRF9HRU5fU1VQUE9SVEVEX0xJU1RcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWxlbmd0aCA9IHNpemVvZiAob2lkX3N1cHBvcnRlZF9saXN0KTsKKwkJY291bnQgID0gbGVuZ3RoIC8gc2l6ZW9mICh1MzIpOworCQl0bXAgPSAoX19sZTMyICopICgodTggKilyZXNwICsgMjQpOworCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwkJCXRtcFtpXSA9IGNwdV90b19sZTMyIChvaWRfc3VwcG9ydGVkX2xpc3RbaV0pOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKwkJCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfR0VOX0hBUkRXQVJFX1NUQVRVUzoKKwkJREVCVUcoIiVzOiBPSURfR0VOX0hBUkRXQVJFX1NUQVRVU1xuIiwgX19GVU5DVElPTl9fKTsKKwkJbGVuZ3RoID0gNDsKKwkJLyogQm9ndXMgcXVlc3Rpb24hIAorCQkgKiBIYXJkd2FyZSBtdXN0IGJlIHJlYWR5IHRvIHJlY2VpdmUgaGlnaCBsZXZlbCBwcm90b2NvbHMuCisJCSAqIEJUVzogCisJCSAqIHJlZGRpdGUgZXJnbyBxdWFlIHN1bnQgQ2Flc2FyaXMgQ2Flc2FyaQorCQkgKiBldCBxdWFlIHN1bnQgRGVpIERlbyEKKwkJICovCisJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CisJCQorCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEX0dFTl9NRURJQV9TVVBQT1JURUQ6CisJCURFQlVHKCIlczogT0lEX0dFTl9NRURJQV9TVVBQT1JURURcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWxlbmd0aCA9IDQ7CisJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0ubWVkaXVtKTsKKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CisJCQorCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEX0dFTl9NRURJQV9JTl9VU0U6CisJCURFQlVHKCIlczogT0lEX0dFTl9NRURJQV9JTl9VU0VcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWxlbmd0aCA9IDQ7CisJCS8qIG9uZSBtZWRpdW0sIG9uZSB0cmFuc3BvcnQuLi4gKG1heWJlIHlvdSBkbyBpdCBiZXR0ZXIpICovCisJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0ubWVkaXVtKTsKKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CisJCQorCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEX0dFTl9NQVhJTVVNX0ZSQU1FX1NJWkU6CisJCURFQlVHKCIlczogT0lEX0dFTl9NQVhJTVVNX0ZSQU1FX1NJWkVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmRldikgeworCQkJbGVuZ3RoID0gNDsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYtPm10dSk7CisJCQlyZXR2YWwgPSAwOworCQl9IGVsc2UgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlicmVhazsKKwkJCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfR0VOX0xJTktfU1BFRUQ6CisJCURFQlVHKCIlczogT0lEX0dFTl9MSU5LX1NQRUVEXG4iLCBfX0ZVTkNUSU9OX18pOworCQlsZW5ndGggPSA0OworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5tZWRpYV9zdGF0ZQorCQkJPT0gTkRJU19NRURJQV9TVEFURV9ESVNDT05ORUNURUQpCisJCSAgICAqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCWVsc2UKKwkJICAgICooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zcGVlZCk7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfR0VOX1RSQU5TTUlUX0JMT0NLX1NJWkU6CisJCURFQlVHKCIlczogT0lEX0dFTl9UUkFOU01JVF9CTE9DS19TSVpFXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYpIHsKKwkJCWxlbmd0aCA9IDQ7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gY3B1X3RvX2xlMzIgKAorCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2LT5tdHUpOworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlicmVhazsKKwkJCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfR0VOX1JFQ0VJVkVfQkxPQ0tfU0laRToKKwkJREVCVUcoIiVzOiBPSURfR0VOX1JFQ0VJVkVfQkxPQ0tfU0laRVxuIiwgX19GVU5DVElPTl9fKTsKKwkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KSB7CisJCQlsZW5ndGggPSA0OworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmRldi0+bXR1KTsKKwkJCXJldHZhbCA9IDA7CisJCX0KKwkJYnJlYWs7CisJCQorCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEX0dFTl9WRU5ET1JfSUQ6CisJCURFQlVHKCIlczogT0lEX0dFTl9WRU5ET1JfSURcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWxlbmd0aCA9IDQ7CisJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnZlbmRvcklEKTsKKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CisJCQorCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEX0dFTl9WRU5ET1JfREVTQ1JJUFRJT046CisJCURFQlVHKCIlczogT0lEX0dFTl9WRU5ET1JfREVTQ1JJUFRJT05cbiIsIF9fRlVOQ1RJT05fXyk7CisJCWxlbmd0aCA9IHN0cmxlbiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS52ZW5kb3JEZXNjcik7CisJCW1lbWNweSAoKHU4ICopIHJlc3AgKyAyNCwgCisJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnZlbmRvckRlc2NyLCBsZW5ndGgpOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKworCWNhc2UgT0lEX0dFTl9WRU5ET1JfRFJJVkVSX1ZFUlNJT046CisJCURFQlVHKCIlczogT0lEX0dFTl9WRU5ET1JfRFJJVkVSX1ZFUlNJT05cbiIsIF9fRlVOQ1RJT05fXyk7CisJCWxlbmd0aCA9IDQ7CisJCS8qIENyZWF0ZWQgYXMgTEUgKi8KKwkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IHJuZGlzX2RyaXZlcl92ZXJzaW9uOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKworCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVI6CisJCURFQlVHKCIlczogT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWxlbmd0aCA9IDQ7CisJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zW2NvbmZpZ05yXS5maWx0ZXIpOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKworCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEX0dFTl9NQVhJTVVNX1RPVEFMX1NJWkU6CisJCURFQlVHKCIlczogT0lEX0dFTl9NQVhJTVVNX1RPVEFMX1NJWkVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWxlbmd0aCA9IDQ7CisJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKAorCQkJCQlSTkRJU19NQVhfVE9UQUxfU0laRSk7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfR0VOX01FRElBX0NPTk5FQ1RfU1RBVFVTOgorCQlERUJVRygiJXM6IE9JRF9HRU5fTUVESUFfQ09OTkVDVF9TVEFUVVNcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWxlbmd0aCA9IDQ7CisJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KKwkJCQkJCS5tZWRpYV9zdGF0ZSk7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCisJY2FzZSBPSURfR0VOX1BIWVNJQ0FMX01FRElVTToKKwkJREVCVUcoIiVzOiBPSURfR0VOX1BIWVNJQ0FMX01FRElVTVxuIiwgX19GVU5DVElPTl9fKTsKKwkJbGVuZ3RoID0gNDsKKwkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKworCS8qIFRoZSBSTkRJUyBzcGVjaWZpY2F0aW9uIGlzIGluY29tcGxldGUvd3JvbmcuICAgU29tZSB2ZXJzaW9ucworCSAqIG9mIE1TLVdpbmRvd3MgZXhwZWN0IE9JRHMgdGhhdCBhcmVuJ3Qgc3BlY2lmaWVkIHRoZXJlLiAgT3RoZXIKKwkgKiB2ZXJzaW9ucyBlbWl0IHVuZGVmaW5lZCBSTkRJUyBtZXNzYWdlcy4gRE9DVU1FTlQgQUxMIFRIRVNFIQorCSAqLworCWNhc2UgT0lEX0dFTl9NQUNfT1BUSU9OUzoJCS8qIGZyb20gV2luTUUgKi8KKwkJREVCVUcoIiVzOiBPSURfR0VOX01BQ19PUFRJT05TXG4iLCBfX0ZVTkNUSU9OX18pOworCQlsZW5ndGggPSA0OworCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMigKKwkJCSAgTkRJU19NQUNfT1BUSU9OX1JFQ0VJVkVfU0VSSUFMSVpFRAorCQkJfCBORElTX01BQ19PUFRJT05fRlVMTF9EVVBMRVgpOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKworCS8qIHN0YXRpc3RpY3MgT0lEcyAodGFibGUgNC0yKSAqLworCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfR0VOX1hNSVRfT0s6CisJCURFQlVHKCIlczogT0lEX0dFTl9YTUlUX09LXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgeworCQkJbGVuZ3RoID0gNDsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkgICAgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cy0+dHhfcGFja2V0cyAtIAorCQkJICAgIHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdHMtPnR4X2Vycm9ycyAtCisJCQkgICAgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cy0+dHhfZHJvcHBlZCk7CisJCQlyZXR2YWwgPSAwOworCQl9IGVsc2UgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlicmVhazsKKworCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEX0dFTl9SQ1ZfT0s6CisJCURFQlVHKCIlczogT0lEX0dFTl9SQ1ZfT0tcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKSB7CisJCQlsZW5ndGggPSA0OworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCSAgICBybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzLT5yeF9wYWNrZXRzIC0gCisJCQkgICAgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cy0+cnhfZXJyb3JzIC0KKwkJCSAgICBybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzLT5yeF9kcm9wcGVkKTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwkvKiBtYW5kYXRvcnkgKi8KKwljYXNlIE9JRF9HRU5fWE1JVF9FUlJPUjoKKwkJREVCVUcoIiVzOiBPSURfR0VOX1hNSVRfRVJST1JcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKSB7CisJCQlsZW5ndGggPSA0OworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCisJCQkJCS5zdGF0cy0+dHhfZXJyb3JzKTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwkvKiBtYW5kYXRvcnkgKi8KKwljYXNlIE9JRF9HRU5fUkNWX0VSUk9SOgorCQlERUJVRygiJXM6IE9JRF9HRU5fUkNWX0VSUk9SXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCisJCQkJCS5zdGF0cy0+cnhfZXJyb3JzKTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwkvKiBtYW5kYXRvcnkgKi8KKwljYXNlIE9JRF9HRU5fUkNWX05PX0JVRkZFUjoKKwkJREVCVUcoIiVzOiBPSURfR0VOX1JDVl9OT19CVUZGRVJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gY3B1X3RvX2xlMzIgKAorCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KKwkJCQkJLnN0YXRzLT5yeF9kcm9wcGVkKTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCisjaWZkZWYJUk5ESVNfT1BUSU9OQUxfU1RBVFMKKwljYXNlIE9JRF9HRU5fRElSRUNURURfQllURVNfWE1JVDoKKwkJREVCVUcoIiVzOiBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1hNSVRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCS8qIAorCQkgKiBBdW50IFRpbGx5J3Mgc2l6ZSBvZiBzaG9lcworCQkgKiBtaW51cyBhbnRhcmN0aWNhIGNvdW50IG9mIHBlbmd1aW5zCisJCSAqIGRpdmlkZWQgYnkgd2VpZ2h0IG9mIEFscGhhIENlbnRhdXJpCisJCSAqLworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgeworCQkJbGVuZ3RoID0gNDsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KKwkJCQkJLnN0YXRzLT50eF9wYWNrZXRzIC0gCisJCQkJIHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KKwkJCQkJIC5zdGF0cy0+dHhfZXJyb3JzIC0KKwkJCQkgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQorCQkJCQkgLnN0YXRzLT50eF9kcm9wcGVkKQorCQkJCSogMTIzKTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwljYXNlIE9JRF9HRU5fRElSRUNURURfRlJBTUVTX1hNSVQ6CisJCURFQlVHKCIlczogT0lEX0dFTl9ESVJFQ1RFRF9GUkFNRVNfWE1JVFxuIiwgX19GVU5DVElPTl9fKTsKKwkJLyogZGl0byAqLworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgeworCQkJbGVuZ3RoID0gNDsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KKwkJCQkJLnN0YXRzLT50eF9wYWNrZXRzIC0gCisJCQkJIHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KKwkJCQkJIC5zdGF0cy0+dHhfZXJyb3JzIC0KKwkJCQkgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQorCQkJCQkgLnN0YXRzLT50eF9kcm9wcGVkKQorCQkJCS8gMTIzKTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwljYXNlIE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1hNSVQ6CisJCURFQlVHKCIlczogT0lEX0dFTl9NVUxUSUNBU1RfQllURVNfWE1JVFxuIiwgX19GVU5DVElPTl9fKTsKKwkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdHMpIHsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQorCQkJCQkuc3RhdHMtPm11bHRpY2FzdCoxMjM0KTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwljYXNlIE9JRF9HRU5fTVVMVElDQVNUX0ZSQU1FU19YTUlUOgorCQlERUJVRygiJXM6IE9JRF9HRU5fTVVMVElDQVNUX0ZSQU1FU19YTUlUXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCisJCQkJCS5zdGF0cy0+bXVsdGljYXN0KTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwljYXNlIE9JRF9HRU5fQlJPQURDQVNUX0JZVEVTX1hNSVQ6CisJCURFQlVHKCIlczogT0lEX0dFTl9CUk9BRENBU1RfQllURVNfWE1JVFxuIiwgX19GVU5DVElPTl9fKTsKKwkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdHMpIHsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQorCQkJCQkuc3RhdHMtPnR4X3BhY2tldHMvNDIqMjU1KTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwljYXNlIE9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19YTUlUOgorCQlERUJVRygiJXM6IE9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19YTUlUXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCisJCQkJCS5zdGF0cy0+dHhfcGFja2V0cy80Mik7CisJCQlyZXR2YWwgPSAwOworCQl9IGVsc2UgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlicmVhazsKKwkJCisJY2FzZSBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1JDVjoKKwkJREVCVUcoIiVzOiBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1JDVlxuIiwgX19GVU5DVElPTl9fKTsKKwkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKwkJCisJY2FzZSBPSURfR0VOX0RJUkVDVEVEX0ZSQU1FU19SQ1Y6CisJCURFQlVHKCIlczogT0lEX0dFTl9ESVJFQ1RFRF9GUkFNRVNfUkNWXG4iLCBfX0ZVTkNUSU9OX18pOworCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCQkKKwljYXNlIE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1JDVjoKKwkJREVCVUcoIiVzOiBPSURfR0VOX01VTFRJQ0FTVF9CWVRFU19SQ1ZcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gY3B1X3RvX2xlMzIgKAorCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KKwkJCQkJLnN0YXRzLT5tdWx0aWNhc3QgKiAxMTExKTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwljYXNlIE9JRF9HRU5fTVVMVElDQVNUX0ZSQU1FU19SQ1Y6CisJCURFQlVHKCIlczogT0lEX0dFTl9NVUxUSUNBU1RfRlJBTUVTX1JDVlxuIiwgX19GVU5DVElPTl9fKTsKKwkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdHMpIHsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQorCQkJCQkuc3RhdHMtPm11bHRpY2FzdCk7CisJCQlyZXR2YWwgPSAwOworCQl9IGVsc2UgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlicmVhazsKKwkJCisJY2FzZSBPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19SQ1Y6CisJCURFQlVHKCIlczogT0lEX0dFTl9CUk9BRENBU1RfQllURVNfUkNWXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCisJCQkJCS5zdGF0cy0+cnhfcGFja2V0cy80MioyNTUpOworCQkJcmV0dmFsID0gMDsKKwkJfSBlbHNlIHsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJCXJldHZhbCA9IDA7CisJCX0KKwkJYnJlYWs7CisJCQorCWNhc2UgT0lEX0dFTl9CUk9BRENBU1RfRlJBTUVTX1JDVjoKKwkJREVCVUcoIiVzOiBPSURfR0VOX0JST0FEQ0FTVF9GUkFNRVNfUkNWXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCisJCQkJCS5zdGF0cy0+cnhfcGFja2V0cy80Mik7CisJCQlyZXR2YWwgPSAwOworCQl9IGVsc2UgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlicmVhazsKKwkJCisJY2FzZSBPSURfR0VOX1JDVl9DUkNfRVJST1I6CisJCURFQlVHKCIlczogT0lEX0dFTl9SQ1ZfQ1JDX0VSUk9SXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCisJCQkJCS5zdGF0cy0+cnhfY3JjX2Vycm9ycyk7CisJCQlyZXR2YWwgPSAwOworCQl9IGVsc2UgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlicmVhazsKKwkJCisJY2FzZSBPSURfR0VOX1RSQU5TTUlUX1FVRVVFX0xFTkdUSDoKKwkJREVCVUcoIiVzOiBPSURfR0VOX1RSQU5TTUlUX1FVRVVFX0xFTkdUSFxuIiwgX19GVU5DVElPTl9fKTsKKwkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKyNlbmRpZgkvKiBSTkRJU19PUFRJT05BTF9TVEFUUyAqLworCisJLyogaWVlZTgwMi4zIE9JRHMgKHRhYmxlIDQtMykgKi8KKworCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEXzgwMl8zX1BFUk1BTkVOVF9BRERSRVNTOgorCQlERUJVRygiJXM6IE9JRF84MDJfM19QRVJNQU5FTlRfQUREUkVTU1xuIiwgX19GVU5DVElPTl9fKTsKKwkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KSB7CisJCQlsZW5ndGggPSBFVEhfQUxFTjsKKwkJCW1lbWNweSAoKHU4ICopIHJlc3AgKyAyNCwKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmhvc3RfbWFjLAorCQkJCWxlbmd0aCk7CisJCQlyZXR2YWwgPSAwOworCQl9IGVsc2UgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlicmVhazsKKwkJCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfODAyXzNfQ1VSUkVOVF9BRERSRVNTOgorCQlERUJVRygiJXM6IE9JRF84MDJfM19DVVJSRU5UX0FERFJFU1NcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmRldikgeworCQkJbGVuZ3RoID0gRVRIX0FMRU47CisJCQltZW1jcHkgKCh1OCAqKSByZXNwICsgMjQsCisJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5ob3N0X21hYywKKwkJCQlsZW5ndGgpOworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlicmVhazsKKwkJCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfODAyXzNfTVVMVElDQVNUX0xJU1Q6CisJCURFQlVHKCIlczogT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUXG4iLCBfX0ZVTkNUSU9OX18pOworCQlsZW5ndGggPSA0OworCQkvKiBNdWx0aWNhc3QgYmFzZSBhZGRyZXNzIG9ubHkgKi8KKwkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDB4RTAwMDAwMDApOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKwkJCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfODAyXzNfTUFYSU1VTV9MSVNUX1NJWkU6CisJCURFQlVHKCIlczogT0lEXzgwMl8zX01BWElNVU1fTElTVF9TSVpFXG4iLCBfX0ZVTkNUSU9OX18pOworCQkgbGVuZ3RoID0gNDsKKwkJLyogTXVsdGljYXN0IGJhc2UgYWRkcmVzcyBvbmx5ICovCisJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgxKTsKKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CisJCQorCWNhc2UgT0lEXzgwMl8zX01BQ19PUFRJT05TOgorCQlERUJVRygiJXM6IE9JRF84MDJfM19NQUNfT1BUSU9OU1xuIiwgX19GVU5DVElPTl9fKTsKKwkJYnJlYWs7CisKKwkvKiBpZWVlODAyLjMgc3RhdGlzdGljcyBPSURzICh0YWJsZSA0LTQpICovCisKKwkvKiBtYW5kYXRvcnkgKi8KKwljYXNlIE9JRF84MDJfM19SQ1ZfRVJST1JfQUxJR05NRU5UOgorCQlERUJVRygiJXM6IE9JRF84MDJfM19SQ1ZfRVJST1JfQUxJR05NRU5UXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykKKwkJeworCQkJbGVuZ3RoID0gNDsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQorCQkJCQkuc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycyk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwkvKiBtYW5kYXRvcnkgKi8KKwljYXNlIE9JRF84MDJfM19YTUlUX09ORV9DT0xMSVNJT046CisJCURFQlVHKCIlczogT0lEXzgwMl8zX1hNSVRfT05FX0NPTExJU0lPTlxuIiwgX19GVU5DVElPTl9fKTsKKwkJbGVuZ3RoID0gNDsKKwkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKwkJCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfODAyXzNfWE1JVF9NT1JFX0NPTExJU0lPTlM6CisJCURFQlVHKCIlczogT0lEXzgwMl8zX1hNSVRfTU9SRV9DT0xMSVNJT05TXG4iLCBfX0ZVTkNUSU9OX18pOworCQlsZW5ndGggPSA0OworCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCQkKKyNpZmRlZglSTkRJU19PUFRJT05BTF9TVEFUUworCWNhc2UgT0lEXzgwMl8zX1hNSVRfREVGRVJSRUQ6CisJCURFQlVHKCIlczogT0lEXzgwMl8zX1hNSVRfREVGRVJSRURcbiIsIF9fRlVOQ1RJT05fXyk7CisJCS8qIFRPRE8gKi8KKwkJYnJlYWs7CisJCQorCWNhc2UgT0lEXzgwMl8zX1hNSVRfTUFYX0NPTExJU0lPTlM6CisJCURFQlVHKCIlczogT0lEXzgwMl8zX1hNSVRfTUFYX0NPTExJU0lPTlNcbiIsIF9fRlVOQ1RJT05fXyk7CisJCS8qIFRPRE8gKi8KKwkJYnJlYWs7CisJCQorCWNhc2UgT0lEXzgwMl8zX1JDVl9PVkVSUlVOOgorCQlERUJVRygiJXM6IE9JRF84MDJfM19SQ1ZfT1ZFUlJVTlxuIiwgX19GVU5DVElPTl9fKTsKKwkJLyogVE9ETyAqLworCQlicmVhazsKKwkJCisJY2FzZSBPSURfODAyXzNfWE1JVF9VTkRFUlJVTjoKKwkJREVCVUcoIiVzOiBPSURfODAyXzNfWE1JVF9VTkRFUlJVTlxuIiwgX19GVU5DVElPTl9fKTsKKwkJLyogVE9ETyAqLworCQlicmVhazsKKwkJCisJY2FzZSBPSURfODAyXzNfWE1JVF9IRUFSVEJFQVRfRkFJTFVSRToKKwkJREVCVUcoIiVzOiBPSURfODAyXzNfWE1JVF9IRUFSVEJFQVRfRkFJTFVSRVxuIiwgX19GVU5DVElPTl9fKTsKKwkJLyogVE9ETyAqLworCQlicmVhazsKKwkJCisJY2FzZSBPSURfODAyXzNfWE1JVF9USU1FU19DUlNfTE9TVDoKKwkJREVCVUcoIiVzOiBPSURfODAyXzNfWE1JVF9USU1FU19DUlNfTE9TVFxuIiwgX19GVU5DVElPTl9fKTsKKwkJLyogVE9ETyAqLworCQlicmVhazsKKwkJCisJY2FzZSBPSURfODAyXzNfWE1JVF9MQVRFX0NPTExJU0lPTlM6CisJCURFQlVHKCIlczogT0lEXzgwMl8zX1hNSVRfTEFURV9DT0xMSVNJT05TXG4iLCBfX0ZVTkNUSU9OX18pOworCQkvKiBUT0RPICovCisJCWJyZWFrOwkJCisjZW5kaWYJLyogUk5ESVNfT1BUSU9OQUxfU1RBVFMgKi8KKworI2lmZGVmCVJORElTX1BNCisJLyogcG93ZXIgbWFuYWdlbWVudCBPSURzICh0YWJsZSA0LTUpICovCisJY2FzZSBPSURfUE5QX0NBUEFCSUxJVElFUzoKKwkJREVCVUcoIiVzOiBPSURfUE5QX0NBUEFCSUxJVElFU1xuIiwgX19GVU5DVElPTl9fKTsKKworCQkvKiBqdXN0IFBNLCBhbmQgcmVtb3RlIHdha2V1cCBvbiBsaW5rIHN0YXR1cyBjaGFuZ2UKKwkJICogKG5vdCBtYWdpYyBwYWNrZXQgb3IgcGF0dGVybiBtYXRjaCkKKwkJICovCisJCWxlbmd0aCA9IHNpemVvZiAoc3RydWN0IE5ESVNfUE5QX0NBUEFCSUxJVElFUyk7CisJCW1lbXNldCAocmVzcCwgMCwgbGVuZ3RoKTsKKwkJeworCQkJc3RydWN0IE5ESVNfUE5QX0NBUEFCSUxJVElFUyAqY2FwcyA9ICh2b2lkICopIHJlc3A7CisKKwkJCWNhcHMtPkZsYWdzID0gTkRJU19ERVZJQ0VfV0FLRV9VUF9FTkFCTEU7CisJCQljYXBzLT5XYWtlVXBDYXBhYmlsaXRpZXMuTWluTGlua0NoYW5nZVdha2VVcCAKKwkJCQkgPSBOZGlzRGV2aWNlU3RhdGVEMzsKKworCQkJLyogRklYTUUgdGhlbiB1c2UgdXNiX2dhZGdldF93YWtldXAoKSwgYW5kCisJCQkgKiBzZXQgVVNCX0NPTkZJR19BVFRfV0FLRVVQIGluIGNvbmZpZyBkZXNjCisJCQkgKi8KKwkJfQorCQlyZXR2YWwgPSAwOworCQlicmVhazsKKwljYXNlIE9JRF9QTlBfUVVFUllfUE9XRVI6CisJCURFQlVHKCIlczogT0lEX1BOUF9RVUVSWV9QT1dFUlxuIiwgX19GVU5DVElPTl9fKTsKKwkJLyogc3VyZSwgaGFuZGxlIGFueSBwb3dlciBzdGF0ZSB0aGF0IG1hcHMgdG8gVVNCIHN1c3BlbmQgKi8KKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CisjZW5kaWYKKworCWRlZmF1bHQ6CisJCXByaW50ayAoS0VSTl9XQVJOSU5HICIlczogcXVlcnkgdW5rbm93biBPSUQgMHglMDhYXG4iLCAKKwkJCSBfX0ZVTkNUSU9OX18sIE9JRCk7CisJfQorCQorCXJlc3AtPkluZm9ybWF0aW9uQnVmZmVyT2Zmc2V0ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMTYpOworCXJlc3AtPkluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoID0gY3B1X3RvX2xlMzIgKGxlbmd0aCk7CisJcmVzcC0+TWVzc2FnZUxlbmd0aCA9IGNwdV90b19sZTMyICgyNCArIGxlbmd0aCk7CisJci0+bGVuZ3RoID0gMjQgKyBsZW5ndGg7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBnZW5fbmRpc19zZXRfcmVzcCAodTggY29uZmlnTnIsIHUzMiBPSUQsIHU4ICpidWYsIHUzMiBidWZfbGVuLCAKKwkJCSAgICAgIHJuZGlzX3Jlc3BfdCAqcikKK3sKKwlybmRpc19zZXRfY21wbHRfdHlwZQkJKnJlc3A7CisJaW50IAkJCQlpLCByZXR2YWwgPSAtRU5PVFNVUFA7CisJc3RydWN0IHJuZGlzX3BhcmFtcwkJKnBhcmFtczsKKworCWlmICghcikKKwkJcmV0dXJuIC1FTk9NRU07CisJcmVzcCA9IChybmRpc19zZXRfY21wbHRfdHlwZSAqKSByLT5idWY7CisJaWYgKCFyZXNwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCURFQlVHKCJzZXQgT0lEICUwOHggdmFsdWUsIGxlbiAlZDpcbiIsIE9JRCwgYnVmX2xlbik7CisJZm9yIChpID0gMDsgaSA8IGJ1Zl9sZW47IGkgKz0gMTYpIHsKKwkJREVCVUcgKCIlMDNkOiAiCisJCQkiICUwMnggJTAyeCAlMDJ4ICUwMngiCisJCQkiICUwMnggJTAyeCAlMDJ4ICUwMngiCisJCQkiICUwMnggJTAyeCAlMDJ4ICUwMngiCisJCQkiICUwMnggJTAyeCAlMDJ4ICUwMngiCisJCQkiXG4iLAorCQkJaSwKKwkJCWJ1ZltpXSwgYnVmIFtpKzFdLAorCQkJCWJ1ZltpKzJdLCBidWZbaSszXSwKKwkJCWJ1ZltpKzRdLCBidWYgW2krNV0sCisJCQkJYnVmW2krNl0sIGJ1ZltpKzddLAorCQkJYnVmW2krOF0sIGJ1ZiBbaSs5XSwKKwkJCQlidWZbaSsxMF0sIGJ1ZltpKzExXSwKKwkJCWJ1ZltpKzEyXSwgYnVmIFtpKzEzXSwKKwkJCQlidWZbaSsxNF0sIGJ1ZltpKzE1XSk7CisJfQorCisJc3dpdGNoIChPSUQpIHsKKwljYXNlIE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSOgorCQlwYXJhbXMgPSAmcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXTsKKwkJcmV0dmFsID0gMDsKKworCQkvKiBGSVhNRSB1c2UgdGhlc2UgTkRJU19QQUNLRVRfVFlQRV8qIGJpdGZsYWdzIHRvCisJCSAqIGZpbHRlciBwYWNrZXRzIGluIGhhcmRfc3RhcnRfeG1pdCgpCisJCSAqIE5ESVNfUEFDS0VUX1RZUEVfeCA9PSBVU0JfQ0RDX1BBQ0tFVF9UWVBFX3ggZm9yIHggaW46CisJCSAqCVBST01JU0NVT1VTLCBESVJFQ1RFRCwKKwkJICoJTVVMVElDQVNULCBBTExfTVVMVElDQVNULCBCUk9BRENBU1QKKwkJICovCisJCXBhcmFtcy0+ZmlsdGVyID0gbGUzMl90b19jcHVwKChfX2xlMzIgKilidWYpOworCQlERUJVRygiJXM6IE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSICUwOHhcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHBhcmFtcy0+ZmlsdGVyKTsKKworCQkvKiB0aGlzIGNhbGwgaGFzIGEgc2lnbmlmaWNhbnQgc2lkZSBlZmZlY3Q6ICBpdCdzCisJCSAqIHdoYXQgbWFrZXMgdGhlIHBhY2tldCBmbG93IHN0YXJ0IGFuZCBzdG9wLCBsaWtlCisJCSAqIGFjdGl2YXRpbmcgdGhlIENEQyBFdGhlcm5ldCBhbHRzZXR0aW5nLgorCQkgKi8KKwkJaWYgKHBhcmFtcy0+ZmlsdGVyKSB7CisJCQlwYXJhbXMtPnN0YXRlID0gUk5ESVNfREFUQV9JTklUSUFMSVpFRDsKKwkJCW5ldGlmX2NhcnJpZXJfb24ocGFyYW1zLT5kZXYpOworCQkJaWYgKG5ldGlmX3J1bm5pbmcocGFyYW1zLT5kZXYpKQorCQkJCW5ldGlmX3dha2VfcXVldWUgKHBhcmFtcy0+ZGV2KTsKKwkJfSBlbHNlIHsKKwkJCXBhcmFtcy0+c3RhdGUgPSBSTkRJU19JTklUSUFMSVpFRDsKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmIChwYXJhbXMtPmRldik7CisJCQluZXRpZl9zdG9wX3F1ZXVlIChwYXJhbXMtPmRldik7CisJCX0KKwkJYnJlYWs7CisJCQorCWNhc2UgT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUOgorCQkvKiBJIHRoaW5rIHdlIGNhbiBpZ25vcmUgdGhpcyAqLwkJCisJCURFQlVHKCIlczogT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKyNpZiAwCisJY2FzZSBPSURfR0VOX1JORElTX0NPTkZJR19QQVJBTUVURVI6CisJCXsKKwkJc3RydWN0IHJuZGlzX2NvbmZpZ19wYXJhbWV0ZXIJKnBhcmFtOworCQlwYXJhbSA9IChzdHJ1Y3Qgcm5kaXNfY29uZmlnX3BhcmFtZXRlciAqKSBidWY7CisJCURFQlVHKCIlczogT0lEX0dFTl9STkRJU19DT05GSUdfUEFSQU1FVEVSICclKnMnXG4iLAorCQkJX19GVU5DVElPTl9fLAorCQkJbWluKGNwdV90b19sZTMyKHBhcmFtLT5QYXJhbWV0ZXJOYW1lTGVuZ3RoKSw4MCksCisJCQlidWYgKyBwYXJhbS0+UGFyYW1ldGVyTmFtZU9mZnNldCk7CisJCXJldHZhbCA9IDA7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKworI2lmZGVmCVJORElTX1BNCisJY2FzZSBPSURfUE5QX1NFVF9QT1dFUjoKKwkJREVCVUcgKCJPSURfUE5QX1NFVF9QT1dFUlxuIik7CisJCS8qIHN1cmUsIGhhbmRsZSBhbnkgcG93ZXIgc3RhdGUgdGhhdCBtYXBzIHRvIFVTQiBzdXNwZW5kICovCisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCisJY2FzZSBPSURfUE5QX0VOQUJMRV9XQUtFX1VQOgorCQkvKiBhbHdheXMtY29ubmVjdGVkIC4uLiAqLworCQlERUJVRyAoIk9JRF9QTlBfRU5BQkxFX1dBS0VfVVBcbiIpOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKworCS8vIG5vIFBNIHJlc3VtZSBwYXR0ZXJucyBzdXBwb3J0ZWQgKHNwZWNpZmllZCB3aGVyZT8pCisJLy8gc28gT0lEX1BOUF97QURELFJFTU9WRX1fV0FLRV9VUF9QQVRURVJOIGFsd2F5cyBmYWlscworI2VuZGlmCisKKwlkZWZhdWx0OgorCQlwcmludGsgKEtFUk5fV0FSTklORyAiJXM6IHNldCB1bmtub3duIE9JRCAweCUwOFgsIHNpemUgJWRcbiIsIAorCQkJIF9fRlVOQ1RJT05fXywgT0lELCBidWZfbGVuKTsKKwl9CisJCisJcmV0dXJuIHJldHZhbDsKK30KKworLyogCisgKiBSZXNwb25zZSBGdW5jdGlvbnMgCisgKi8KKworc3RhdGljIGludCBybmRpc19pbml0X3Jlc3BvbnNlIChpbnQgY29uZmlnTnIsIHJuZGlzX2luaXRfbXNnX3R5cGUgKmJ1ZikKK3sKKwlybmRpc19pbml0X2NtcGx0X3R5cGUJKnJlc3A7IAorCXJuZGlzX3Jlc3BfdCAgICAgICAgICAgICpyOworCQorCWlmICghcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYpIHJldHVybiAtRU5PVFNVUFA7CisJCisJciA9IHJuZGlzX2FkZF9yZXNwb25zZSAoY29uZmlnTnIsIHNpemVvZiAocm5kaXNfaW5pdF9jbXBsdF90eXBlKSk7CisJCisJaWYgKCFyKSByZXR1cm4gLUVOT01FTTsKKwkKKwlyZXNwID0gKHJuZGlzX2luaXRfY21wbHRfdHlwZSAqKSByLT5idWY7CisJCisJaWYgKCFyZXNwKSByZXR1cm4gLUVOT01FTTsKKwkKKwlyZXNwLT5NZXNzYWdlVHlwZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKAorCQkJUkVNT1RFX05ESVNfSU5JVElBTElaRV9DTVBMVCk7CisJcmVzcC0+TWVzc2FnZUxlbmd0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDUyKTsKKwlyZXNwLT5SZXF1ZXN0SUQgPSBidWYtPlJlcXVlc3RJRDsgLyogU3RpbGwgTEUgaW4gbXNnIGJ1ZmZlciAqLworCXJlc3AtPlN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19TVUNDRVNTKTsKKwlyZXNwLT5NYWpvclZlcnNpb24gPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19NQUpPUl9WRVJTSU9OKTsKKwlyZXNwLT5NaW5vclZlcnNpb24gPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19NSU5PUl9WRVJTSU9OKTsKKwlyZXNwLT5EZXZpY2VGbGFncyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX0RGX0NPTk5FQ1RJT05MRVNTKTsKKwlyZXNwLT5NZWRpdW0gPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19NRURJVU1fODAyXzMpOworCXJlc3AtPk1heFBhY2tldHNQZXJUcmFuc2ZlciA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEpOworCXJlc3AtPk1heFRyYW5zZmVyU2l6ZSA9IGNwdV90b19sZTMyICgKKwkJICBybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmRldi0+bXR1CisJCSsgc2l6ZW9mIChzdHJ1Y3QgZXRoaGRyKQorCQkrIHNpemVvZiAoc3RydWN0IHJuZGlzX3BhY2tldF9tc2dfdHlwZSkKKwkJKyAyMik7CisJcmVzcC0+UGFja2V0QWxpZ25tZW50RmFjdG9yID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJcmVzcC0+QUZMaXN0T2Zmc2V0ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJcmVzcC0+QUZMaXN0U2l6ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQorCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmFjaykKKwkgICAgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5hY2sgKAorCSAgICAJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KTsKKwkKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBybmRpc19xdWVyeV9yZXNwb25zZSAoaW50IGNvbmZpZ05yLCBybmRpc19xdWVyeV9tc2dfdHlwZSAqYnVmKQoreworCXJuZGlzX3F1ZXJ5X2NtcGx0X3R5cGUgKnJlc3A7CisJcm5kaXNfcmVzcF90ICAgICAgICAgICAgKnI7CisJCisJLy8gREVCVUcoIiVzOiBPSUQgPSAlMDhYXG4iLCBfX0ZVTkNUSU9OX18sIGNwdV90b19sZTMyKGJ1Zi0+T0lEKSk7CisJaWYgKCFybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmRldikgcmV0dXJuIC1FTk9UU1VQUDsKKwkKKwkvKiAKKwkgKiB3ZSBuZWVkIG1vcmUgbWVtb3J5OiAKKwkgKiBvaWRfc3VwcG9ydGVkX2xpc3QgaXMgdGhlIGxhcmdlc3QgYW5zd2VyIAorCSAqLworCXIgPSBybmRpc19hZGRfcmVzcG9uc2UgKGNvbmZpZ05yLCBzaXplb2YgKG9pZF9zdXBwb3J0ZWRfbGlzdCkpOworCQorCWlmICghcikgcmV0dXJuIC1FTk9NRU07CisJcmVzcCA9IChybmRpc19xdWVyeV9jbXBsdF90eXBlICopIHItPmJ1ZjsKKwkKKwlpZiAoIXJlc3ApIHJldHVybiAtRU5PTUVNOworCQorCXJlc3AtPk1lc3NhZ2VUeXBlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUkVNT1RFX05ESVNfUVVFUllfQ01QTFQpOworCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgyNCk7CisJcmVzcC0+UmVxdWVzdElEID0gYnVmLT5SZXF1ZXN0SUQ7IC8qIFN0aWxsIExFIGluIG1zZyBidWZmZXIgKi8KKwkKKwlpZiAoZ2VuX25kaXNfcXVlcnlfcmVzcCAoY29uZmlnTnIsIGxlMzJfdG9fY3B1IChidWYtPk9JRCksIHIpKSB7CisJCS8qIE9JRCBub3Qgc3VwcG9ydGVkICovCisJCXJlc3AtPlN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKAorCQkJCVJORElTX1NUQVRVU19OT1RfU1VQUE9SVEVEKTsKKwkJcmVzcC0+SW5mb3JtYXRpb25CdWZmZXJMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJcmVzcC0+SW5mb3JtYXRpb25CdWZmZXJPZmZzZXQgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwl9IGVsc2UKKwkJcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCQorCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmFjaykKKwkgICAgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5hY2sgKAorCSAgICAJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBybmRpc19zZXRfcmVzcG9uc2UgKGludCBjb25maWdOciwgcm5kaXNfc2V0X21zZ190eXBlICpidWYpCit7CisJdTMyCQkJQnVmTGVuZ3RoLCBCdWZPZmZzZXQ7CisJcm5kaXNfc2V0X2NtcGx0X3R5cGUJKnJlc3A7CisJcm5kaXNfcmVzcF90CQkqcjsKKwkKKwlyID0gcm5kaXNfYWRkX3Jlc3BvbnNlIChjb25maWdOciwgc2l6ZW9mIChybmRpc19zZXRfY21wbHRfdHlwZSkpOworCQorCWlmICghcikgcmV0dXJuIC1FTk9NRU07CisJcmVzcCA9IChybmRpc19zZXRfY21wbHRfdHlwZSAqKSByLT5idWY7CisJaWYgKCFyZXNwKSByZXR1cm4gLUVOT01FTTsKKworCUJ1Zkxlbmd0aCA9IGxlMzJfdG9fY3B1IChidWYtPkluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoKTsKKwlCdWZPZmZzZXQgPSBsZTMyX3RvX2NwdSAoYnVmLT5JbmZvcm1hdGlvbkJ1ZmZlck9mZnNldCk7CisKKyNpZmRlZglWRVJCT1NFCisJREVCVUcoIiVzOiBMZW5ndGg6ICVkXG4iLCBfX0ZVTkNUSU9OX18sIEJ1Zkxlbmd0aCk7CisJREVCVUcoIiVzOiBPZmZzZXQ6ICVkXG4iLCBfX0ZVTkNUSU9OX18sIEJ1Zk9mZnNldCk7CisJREVCVUcoIiVzOiBJbmZvQnVmZmVyOiAiLCBfX0ZVTkNUSU9OX18pOworCQorCWZvciAoaSA9IDA7IGkgPCBCdWZMZW5ndGg7IGkrKykgeworCQlERUJVRyAoIiUwMnggIiwgKigoKHU4ICopIGJ1ZikgKyBpICsgOCArIEJ1Zk9mZnNldCkpOworCX0KKwkKKwlERUJVRyAoIlxuIik7CisjZW5kaWYKKwkKKwlyZXNwLT5NZXNzYWdlVHlwZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJFTU9URV9ORElTX1NFVF9DTVBMVCk7CisJcmVzcC0+TWVzc2FnZUxlbmd0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDE2KTsKKwlyZXNwLT5SZXF1ZXN0SUQgPSBidWYtPlJlcXVlc3RJRDsgLyogU3RpbGwgTEUgaW4gbXNnIGJ1ZmZlciAqLworCWlmIChnZW5fbmRpc19zZXRfcmVzcCAoY29uZmlnTnIsIGxlMzJfdG9fY3B1IChidWYtPk9JRCksIAorCQkJICAgICAgICgodTggKikgYnVmKSArIDggKyBCdWZPZmZzZXQsIEJ1Zkxlbmd0aCwgcikpCisJICAgIHJlc3AtPlN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19OT1RfU1VQUE9SVEVEKTsKKwllbHNlIHJlc3AtPlN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19TVUNDRVNTKTsKKwkKKwlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5hY2spCisJICAgIHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uYWNrICgKKwkgICAgCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmRldik7CisJCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcm5kaXNfcmVzZXRfcmVzcG9uc2UgKGludCBjb25maWdOciwgcm5kaXNfcmVzZXRfbXNnX3R5cGUgKmJ1ZikKK3sKKwlybmRpc19yZXNldF9jbXBsdF90eXBlCSpyZXNwOworCXJuZGlzX3Jlc3BfdAkJKnI7CisJCisJciA9IHJuZGlzX2FkZF9yZXNwb25zZSAoY29uZmlnTnIsIHNpemVvZiAocm5kaXNfcmVzZXRfY21wbHRfdHlwZSkpOworCQorCWlmICghcikgcmV0dXJuIC1FTk9NRU07CisJcmVzcCA9IChybmRpc19yZXNldF9jbXBsdF90eXBlICopIHItPmJ1ZjsKKwlpZiAoIXJlc3ApIHJldHVybiAtRU5PTUVNOworCQorCXJlc3AtPk1lc3NhZ2VUeXBlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUkVNT1RFX05ESVNfUkVTRVRfQ01QTFQpOworCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgxNik7CisJcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCS8qIHJlc2VudCBpbmZvcm1hdGlvbiAqLworCXJlc3AtPkFkZHJlc3NpbmdSZXNldCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEpOworCQorCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmFjaykKKwkgICAgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5hY2sgKAorCSAgICAJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJuZGlzX2tlZXBhbGl2ZV9yZXNwb25zZSAoaW50IGNvbmZpZ05yLAorCQkJCSAgICAgcm5kaXNfa2VlcGFsaXZlX21zZ190eXBlICpidWYpCit7CisJcm5kaXNfa2VlcGFsaXZlX2NtcGx0X3R5cGUJKnJlc3A7CisJcm5kaXNfcmVzcF90CQkJKnI7CisKKwkvKiBob3N0ICJzaG91bGQiIGNoZWNrIG9ubHkgaW4gUk5ESVNfREFUQV9JTklUSUFMSVpFRCBzdGF0ZSAqLworCisJciA9IHJuZGlzX2FkZF9yZXNwb25zZSAoY29uZmlnTnIsIHNpemVvZiAocm5kaXNfa2VlcGFsaXZlX2NtcGx0X3R5cGUpKTsKKwlyZXNwID0gKHJuZGlzX2tlZXBhbGl2ZV9jbXBsdF90eXBlICopIHItPmJ1ZjsKKwlpZiAoIXJlc3ApIHJldHVybiAtRU5PTUVNOworCQkKKwlyZXNwLT5NZXNzYWdlVHlwZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKAorCQkJUkVNT1RFX05ESVNfS0VFUEFMSVZFX0NNUExUKTsKKwlyZXNwLT5NZXNzYWdlTGVuZ3RoID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMTYpOworCXJlc3AtPlJlcXVlc3RJRCA9IGJ1Zi0+UmVxdWVzdElEOyAvKiBTdGlsbCBMRSBpbiBtc2cgYnVmZmVyICovCisJcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCQorCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmFjaykKKwkgICAgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5hY2sgKAorCSAgICAJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KTsKKwkKKwlyZXR1cm4gMDsKK30KKworCisvKiAKKyAqIERldmljZSB0byBIb3N0IENvbXVuaWNhdGlvbiAKKyAqLworc3RhdGljIGludCBybmRpc19pbmRpY2F0ZV9zdGF0dXNfbXNnIChpbnQgY29uZmlnTnIsIHUzMiBzdGF0dXMpCit7CisJcm5kaXNfaW5kaWNhdGVfc3RhdHVzX21zZ190eXBlCSpyZXNwOwkKKwlybmRpc19yZXNwX3QJCQkqcjsKKwkKKwlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0ZSA9PSBSTkRJU19VTklOSVRJQUxJWkVEKQorCSAgICByZXR1cm4gLUVOT1RTVVBQOworCQorCXIgPSBybmRpc19hZGRfcmVzcG9uc2UgKGNvbmZpZ05yLCAKKwkJCQlzaXplb2YgKHJuZGlzX2luZGljYXRlX3N0YXR1c19tc2dfdHlwZSkpOworCWlmICghcikgcmV0dXJuIC1FTk9NRU07CisJCisJcmVzcCA9IChybmRpc19pbmRpY2F0ZV9zdGF0dXNfbXNnX3R5cGUgKikgci0+YnVmOworCWlmICghcmVzcCkgcmV0dXJuIC1FTk9NRU07CisJCisJcmVzcC0+TWVzc2FnZVR5cGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgKKwkJCVJFTU9URV9ORElTX0lORElDQVRFX1NUQVRVU19NU0cpOworCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgyMCk7CisJcmVzcC0+U3RhdHVzID0gY3B1X3RvX2xlMzIgKHN0YXR1cyk7CisJcmVzcC0+U3RhdHVzQnVmZmVyTGVuZ3RoID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJcmVzcC0+U3RhdHVzQnVmZmVyT2Zmc2V0ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCisJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uYWNrKSAKKwkgICAgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5hY2sgKAorCSAgICAJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KTsKKwlyZXR1cm4gMDsKK30KKworaW50IHJuZGlzX3NpZ25hbF9jb25uZWN0IChpbnQgY29uZmlnTnIpCit7CisJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5tZWRpYV9zdGF0ZQorCQkJPSBORElTX01FRElBX1NUQVRFX0NPTk5FQ1RFRDsKKwlyZXR1cm4gcm5kaXNfaW5kaWNhdGVfc3RhdHVzX21zZyAoY29uZmlnTnIsIAorCQkJCQkgIFJORElTX1NUQVRVU19NRURJQV9DT05ORUNUKTsKK30KKworaW50IHJuZGlzX3NpZ25hbF9kaXNjb25uZWN0IChpbnQgY29uZmlnTnIpCit7CisJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5tZWRpYV9zdGF0ZQorCQkJPSBORElTX01FRElBX1NUQVRFX0RJU0NPTk5FQ1RFRDsKKwlyZXR1cm4gcm5kaXNfaW5kaWNhdGVfc3RhdHVzX21zZyAoY29uZmlnTnIsCisJCQkJCSAgUk5ESVNfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QpOworfQorCit2b2lkIHJuZGlzX3NldF9ob3N0X21hYyAoaW50IGNvbmZpZ05yLCBjb25zdCB1OCAqYWRkcikKK3sKKwlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmhvc3RfbWFjID0gYWRkcjsKK30KKworLyogCisgKiBNZXNzYWdlIFBhcnNlciAKKyAqLworaW50IHJuZGlzX21zZ19wYXJzZXIgKHU4IGNvbmZpZ05yLCB1OCAqYnVmKQoreworCXUzMiBNc2dUeXBlLCBNc2dMZW5ndGg7CisJX19sZTMyICp0bXA7CisJc3RydWN0IHJuZGlzX3BhcmFtcwkJKnBhcmFtczsKKwkKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisJCisJdG1wID0gKF9fbGUzMiAqKSBidWY7IAorCU1zZ1R5cGUgICA9IGxlMzJfdG9fY3B1cCh0bXArKyk7CisJTXNnTGVuZ3RoID0gbGUzMl90b19jcHVwKHRtcCsrKTsKKwkKKwlpZiAoY29uZmlnTnIgPj0gUk5ESVNfTUFYX0NPTkZJR1MpCisJCXJldHVybiAtRU5PVFNVUFA7CisJcGFyYW1zID0gJnJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl07CisJCisJLyogRm9yIFVTQjogcmVzcG9uc2VzIG1heSB0YWtlIHVwIHRvIDEwIHNlY29uZHMgKi8KKwlzd2l0Y2ggKE1zZ1R5cGUpCisJeworCWNhc2UgUkVNT1RFX05ESVNfSU5JVElBTElaRV9NU0c6CisJCURFQlVHKCIlczogUkVNT1RFX05ESVNfSU5JVElBTElaRV9NU0dcbiIsIAorCQkJX19GVU5DVElPTl9fICk7CisJCXBhcmFtcy0+c3RhdGUgPSBSTkRJU19JTklUSUFMSVpFRDsKKwkJcmV0dXJuICBybmRpc19pbml0X3Jlc3BvbnNlIChjb25maWdOciwKKwkJCQkJICAgICAocm5kaXNfaW5pdF9tc2dfdHlwZSAqKSBidWYpOworCQkKKwljYXNlIFJFTU9URV9ORElTX0hBTFRfTVNHOgorCQlERUJVRygiJXM6IFJFTU9URV9ORElTX0hBTFRfTVNHXG4iLAorCQkJX19GVU5DVElPTl9fICk7CisJCXBhcmFtcy0+c3RhdGUgPSBSTkRJU19VTklOSVRJQUxJWkVEOworCQlpZiAocGFyYW1zLT5kZXYpIHsKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmIChwYXJhbXMtPmRldik7CisJCQluZXRpZl9zdG9wX3F1ZXVlIChwYXJhbXMtPmRldik7CisJCX0KKwkJcmV0dXJuIDA7CisJCQorCWNhc2UgUkVNT1RFX05ESVNfUVVFUllfTVNHOgorCQlyZXR1cm4gcm5kaXNfcXVlcnlfcmVzcG9uc2UgKGNvbmZpZ05yLCAKKwkJCQkJICAgICAocm5kaXNfcXVlcnlfbXNnX3R5cGUgKikgYnVmKTsKKwkJCisJY2FzZSBSRU1PVEVfTkRJU19TRVRfTVNHOgorCQlyZXR1cm4gcm5kaXNfc2V0X3Jlc3BvbnNlIChjb25maWdOciwgCisJCQkJCSAgIChybmRpc19zZXRfbXNnX3R5cGUgKikgYnVmKTsKKwkJCisJY2FzZSBSRU1PVEVfTkRJU19SRVNFVF9NU0c6CisJCURFQlVHKCIlczogUkVNT1RFX05ESVNfUkVTRVRfTVNHXG4iLCAKKwkJCV9fRlVOQ1RJT05fXyApOworCQlyZXR1cm4gcm5kaXNfcmVzZXRfcmVzcG9uc2UgKGNvbmZpZ05yLAorCQkJCQkgICAgIChybmRpc19yZXNldF9tc2dfdHlwZSAqKSBidWYpOworCisJY2FzZSBSRU1PVEVfTkRJU19LRUVQQUxJVkVfTVNHOgorCQkvKiBGb3IgVVNCOiBob3N0IGRvZXMgdGhpcyBldmVyeSA1IHNlY29uZHMgKi8KKyNpZmRlZglWRVJCT1NFCisJCURFQlVHKCIlczogUkVNT1RFX05ESVNfS0VFUEFMSVZFX01TR1xuIiwgCisJCQlfX0ZVTkNUSU9OX18gKTsKKyNlbmRpZgorCQlyZXR1cm4gcm5kaXNfa2VlcGFsaXZlX3Jlc3BvbnNlIChjb25maWdOciwKKwkJCQkJCSAocm5kaXNfa2VlcGFsaXZlX21zZ190eXBlICopIAorCQkJCQkJIGJ1Zik7CisJCQorCWRlZmF1bHQ6IAorCQkvKiBBdCBsZWFzdCBXaW5kb3dzIFhQIGVtaXRzIHNvbWUgdW5kZWZpbmVkIFJORElTIG1lc3NhZ2VzLgorCQkgKiBJbiBvbmUgY2FzZSB0aG9zZSBtZXNzYWdlcyBzZWVtZWQgdG8gcmVsYXRlIHRvIHRoZSBob3N0CisJCSAqIHN1c3BlbmRpbmcgaXRzZWxmLgorCQkgKi8KKwkJcHJpbnRrIChLRVJOX1dBUk5JTkcKKwkJCSIlczogdW5rbm93biBSTkRJUyBtZXNzYWdlIDB4JTA4WCBsZW4gJWRcbiIsIAorCQkJX19GVU5DVElPTl9fICwgTXNnVHlwZSwgTXNnTGVuZ3RoKTsKKwkJeworCQkJdW5zaWduZWQgaTsKKwkJCWZvciAoaSA9IDA7IGkgPCBNc2dMZW5ndGg7IGkgKz0gMTYpIHsKKwkJCQlERUJVRyAoIiUwM2Q6ICIKKwkJCQkJIiAlMDJ4ICUwMnggJTAyeCAlMDJ4IgorCQkJCQkiICUwMnggJTAyeCAlMDJ4ICUwMngiCisJCQkJCSIgJTAyeCAlMDJ4ICUwMnggJTAyeCIKKwkJCQkJIiAlMDJ4ICUwMnggJTAyeCAlMDJ4IgorCQkJCQkiXG4iLAorCQkJCQlpLAorCQkJCQlidWZbaV0sIGJ1ZiBbaSsxXSwKKwkJCQkJCWJ1ZltpKzJdLCBidWZbaSszXSwKKwkJCQkJYnVmW2krNF0sIGJ1ZiBbaSs1XSwKKwkJCQkJCWJ1ZltpKzZdLCBidWZbaSs3XSwKKwkJCQkJYnVmW2krOF0sIGJ1ZiBbaSs5XSwKKwkJCQkJCWJ1ZltpKzEwXSwgYnVmW2krMTFdLAorCQkJCQlidWZbaSsxMl0sIGJ1ZiBbaSsxM10sCisJCQkJCQlidWZbaSsxNF0sIGJ1ZltpKzE1XSk7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJfQorCQorCXJldHVybiAtRU5PVFNVUFA7Cit9CisKK2ludCBybmRpc19yZWdpc3RlciAoaW50ICgqIHJuZGlzX2NvbnRyb2xfYWNrKSAoc3RydWN0IG5ldF9kZXZpY2UgKikpCit7CisJdTggaTsKKwkKKwlmb3IgKGkgPSAwOyBpIDwgUk5ESVNfTUFYX0NPTkZJR1M7IGkrKykgeworCQlpZiAoIXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtpXS51c2VkKSB7CisJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbaV0udXNlZCA9IDE7CisJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbaV0uYWNrID0gcm5kaXNfY29udHJvbF9hY2s7CisJCQlERUJVRygiJXM6IGNvbmZpZ05yID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgaSk7CisJCQlyZXR1cm4gaTsKKwkJfQorCX0KKwlERUJVRygiZmFpbGVkXG4iKTsKKwkKKwlyZXR1cm4gLTE7Cit9CisKK3ZvaWQgcm5kaXNfZGVyZWdpc3RlciAoaW50IGNvbmZpZ05yKQoreworCURFQlVHKCIlczogXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkKKwlpZiAoY29uZmlnTnIgPj0gUk5ESVNfTUFYX0NPTkZJR1MpIHJldHVybjsKKwlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnVzZWQgPSAwOworCQorCXJldHVybjsKK30KKworaW50IHJuZGlzX3NldF9wYXJhbV9kZXYgKHU4IGNvbmZpZ05yLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAKKwkJCSBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMpCit7CisJREVCVUcoIiVzOlxuIiwgX19GVU5DVElPTl9fICk7CisJaWYgKCFkZXYgfHwgIXN0YXRzKSByZXR1cm4gLTE7CisJaWYgKGNvbmZpZ05yID49IFJORElTX01BWF9DT05GSUdTKSByZXR1cm4gLTE7CisJCisJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYgPSBkZXY7CisJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cyA9IHN0YXRzOworCQorCXJldHVybiAwOworfQorCitpbnQgcm5kaXNfc2V0X3BhcmFtX3ZlbmRvciAodTggY29uZmlnTnIsIHUzMiB2ZW5kb3JJRCwgY29uc3QgY2hhciAqdmVuZG9yRGVzY3IpCit7CisJREVCVUcoIiVzOlxuIiwgX19GVU5DVElPTl9fICk7CisJaWYgKCF2ZW5kb3JEZXNjcikgcmV0dXJuIC0xOworCWlmIChjb25maWdOciA+PSBSTkRJU19NQVhfQ09ORklHUykgcmV0dXJuIC0xOworCQorCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0udmVuZG9ySUQgPSB2ZW5kb3JJRDsKKwlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnZlbmRvckRlc2NyID0gdmVuZG9yRGVzY3I7CisJCisJcmV0dXJuIDA7Cit9CisKK2ludCBybmRpc19zZXRfcGFyYW1fbWVkaXVtICh1OCBjb25maWdOciwgdTMyIG1lZGl1bSwgdTMyIHNwZWVkKQoreworCURFQlVHKCIlczpcbiIsIF9fRlVOQ1RJT05fXyApOworCWlmIChjb25maWdOciA+PSBSTkRJU19NQVhfQ09ORklHUykgcmV0dXJuIC0xOworCQorCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0ubWVkaXVtID0gbWVkaXVtOworCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3BlZWQgPSBzcGVlZDsKKwkKKwlyZXR1cm4gMDsKK30KKwordm9pZCBybmRpc19hZGRfaGRyIChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBybmRpc19wYWNrZXRfbXNnX3R5cGUJKmhlYWRlcjsKKworCWlmICghc2tiKQorCQlyZXR1cm47CisJaGVhZGVyID0gKHZvaWQgKikgc2tiX3B1c2ggKHNrYiwgc2l6ZW9mICpoZWFkZXIpOworCW1lbXNldCAoaGVhZGVyLCAwLCBzaXplb2YgKmhlYWRlcik7CisJaGVhZGVyLT5NZXNzYWdlVHlwZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEpOworCWhlYWRlci0+TWVzc2FnZUxlbmd0aCA9IGNwdV90b19sZTMyKHNrYi0+bGVuKTsKKwloZWFkZXItPkRhdGFPZmZzZXQgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgzNik7CisJaGVhZGVyLT5PT0JEYXRhT2Zmc2V0ID0gY3B1X3RvX2xlMzIoc2tiLT5sZW4gLSA0NCk7Cit9CisKK3ZvaWQgcm5kaXNfZnJlZV9yZXNwb25zZSAoaW50IGNvbmZpZ05yLCB1OCAqYnVmKQoreworCXJuZGlzX3Jlc3BfdAkJKnI7CisJc3RydWN0IGxpc3RfaGVhZAkqYWN0LCAqdG1wOworCQorCWxpc3RfZm9yX2VhY2hfc2FmZSAoYWN0LCB0bXAsIAorCQkJICAgICYocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5yZXNwX3F1ZXVlKSkKKwl7CisJCXIgPSBsaXN0X2VudHJ5IChhY3QsIHJuZGlzX3Jlc3BfdCwgbGlzdCk7CisJCWlmIChyICYmIHItPmJ1ZiA9PSBidWYpIHsKKwkJCWxpc3RfZGVsICgmci0+bGlzdCk7CisJCQlrZnJlZSAocik7CisJCX0KKwl9Cit9CisKK3U4ICpybmRpc19nZXRfbmV4dF9yZXNwb25zZSAoaW50IGNvbmZpZ05yLCB1MzIgKmxlbmd0aCkKK3sKKwlybmRpc19yZXNwX3QJCSpyOworCXN0cnVjdCBsaXN0X2hlYWQgCSphY3QsICp0bXA7CisJCisJaWYgKCFsZW5ndGgpIHJldHVybiBOVUxMOworCQorCWxpc3RfZm9yX2VhY2hfc2FmZSAoYWN0LCB0bXAsIAorCQkJICAgICYocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5yZXNwX3F1ZXVlKSkKKwl7CisJCXIgPSBsaXN0X2VudHJ5IChhY3QsIHJuZGlzX3Jlc3BfdCwgbGlzdCk7CisJCWlmICghci0+c2VuZCkgeworCQkJci0+c2VuZCA9IDE7CisJCQkqbGVuZ3RoID0gci0+bGVuZ3RoOworCQkJcmV0dXJuIHItPmJ1ZjsKKwkJfQorCX0KKwkKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHJuZGlzX3Jlc3BfdCAqcm5kaXNfYWRkX3Jlc3BvbnNlIChpbnQgY29uZmlnTnIsIHUzMiBsZW5ndGgpCit7CisJcm5kaXNfcmVzcF90CSpyOworCQorCXIgPSBrbWFsbG9jIChzaXplb2YgKHJuZGlzX3Jlc3BfdCkgKyBsZW5ndGgsIEdGUF9BVE9NSUMpOworCWlmICghcikgcmV0dXJuIE5VTEw7CisJCisJci0+YnVmID0gKHU4ICopIChyICsgMSk7CisJci0+bGVuZ3RoID0gbGVuZ3RoOworCXItPnNlbmQgPSAwOworCQorCWxpc3RfYWRkX3RhaWwgKCZyLT5saXN0LCAKKwkJICAgICAgICYocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5yZXNwX3F1ZXVlKSk7CisJcmV0dXJuIHI7Cit9CisKK2ludCBybmRpc19ybV9oZHIgKHU4ICpidWYsIHUzMiAqbGVuZ3RoKQoreworCXUzMiBpLCBtZXNzYWdlTGVuLCBkYXRhT2Zmc2V0OworCV9fbGUzMiAqdG1wOworCQorCXRtcCA9IChfX2xlMzIgKikgYnVmOyAKKworCWlmICghYnVmIHx8ICFsZW5ndGgpIHJldHVybiAtMTsKKwlpZiAobGUzMl90b19jcHVwKHRtcCsrKSAhPSAxKSByZXR1cm4gLTE7CisJCisJbWVzc2FnZUxlbiA9IGxlMzJfdG9fY3B1cCh0bXArKyk7CisJZGF0YU9mZnNldCA9IGxlMzJfdG9fY3B1cCh0bXArKykgKyA4OworCisJaWYgKG1lc3NhZ2VMZW4gPCBkYXRhT2Zmc2V0IHx8IG1lc3NhZ2VMZW4gPiAqbGVuZ3RoKSByZXR1cm4gLTE7CisJCisJZm9yIChpID0gZGF0YU9mZnNldDsgaSA8IG1lc3NhZ2VMZW47IGkrKykKKwkJYnVmIFtpIC0gZGF0YU9mZnNldF0gPSBidWYgW2ldOworCQkKKwkqbGVuZ3RoID0gbWVzc2FnZUxlbiAtIGRhdGFPZmZzZXQ7CisJCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUworCitzdGF0aWMgaW50IHJuZGlzX3Byb2NfcmVhZCAoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsIAorCQkgICAgIHZvaWQgKmRhdGEpCit7CisJY2hhciAqb3V0ID0gcGFnZTsKKwlpbnQgbGVuOworCXJuZGlzX3BhcmFtcyAqcGFyYW0gPSAocm5kaXNfcGFyYW1zICopIGRhdGE7CisJCisJb3V0ICs9IHNucHJpbnRmIChvdXQsIGNvdW50LCAKKwkJCSAiQ29uZmlnIE5yLiAlZFxuIgorCQkJICJ1c2VkICAgICAgOiAlc1xuIgorCQkJICJzdGF0ZSAgICAgOiAlc1xuIgorCQkJICJtZWRpdW0gICAgOiAweCUwOFhcbiIKKwkJCSAic3BlZWQgICAgIDogJWRcbiIKKwkJCSAiY2FibGUgICAgIDogJXNcbiIKKwkJCSAidmVuZG9yIElEIDogMHglMDhYXG4iCisJCQkgInZlbmRvciAgICA6ICVzXG4iLCAKKwkJCSBwYXJhbS0+Y29uZmlnbnIsIChwYXJhbS0+dXNlZCkgPyAieSIgOiAibiIsIAorCQkJICh7IGNoYXIgKnMgPSAiPyI7CisJCQkgc3dpdGNoIChwYXJhbS0+c3RhdGUpIHsKKwkJCSBjYXNlIFJORElTX1VOSU5JVElBTElaRUQ6CisJCQkJcyA9ICJSTkRJU19VTklOSVRJQUxJWkVEIjsgYnJlYWs7CisJCQkgY2FzZSBSTkRJU19JTklUSUFMSVpFRDoKKwkJCQlzID0gIlJORElTX0lOSVRJQUxJWkVEIjsgYnJlYWs7CisJCQkgY2FzZSBSTkRJU19EQVRBX0lOSVRJQUxJWkVEOgorCQkJCXMgPSAiUk5ESVNfREFUQV9JTklUSUFMSVpFRCI7IGJyZWFrOworCQkJfTsgczsgfSksCisJCQkgcGFyYW0tPm1lZGl1bSwgCisJCQkgKHBhcmFtLT5tZWRpYV9zdGF0ZSkgPyAwIDogcGFyYW0tPnNwZWVkKjEwMCwgCisJCQkgKHBhcmFtLT5tZWRpYV9zdGF0ZSkgPyAiZGlzY29ubmVjdGVkIiA6ICJjb25uZWN0ZWQiLAorCQkJIHBhcmFtLT52ZW5kb3JJRCwgcGFyYW0tPnZlbmRvckRlc2NyKTsgICAgICAKKwkKKwlsZW4gPSBvdXQgLSBwYWdlOworCWxlbiAtPSBvZmY7CisJCisJaWYgKGxlbiA8IGNvdW50KSB7CisJCSplb2YgPSAxOworCQlpZiAobGVuIDw9IDApCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UKKwkJbGVuID0gY291bnQ7CisJCisJKnN0YXJ0ID0gcGFnZSArIG9mZjsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IHJuZGlzX3Byb2Nfd3JpdGUgKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCAKKwkJICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3sKKwlybmRpc19wYXJhbXMgKnAgPSBkYXRhOworCXUzMiBzcGVlZCA9IDA7CisJaW50IGksIGZsX3NwZWVkID0gMDsKKwkKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQljaGFyIGM7CisJCWlmIChnZXRfdXNlcihjLCBidWZmZXIpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXN3aXRjaCAoYykgeworCQljYXNlICcwJzoKKwkJY2FzZSAnMSc6CisJCWNhc2UgJzInOgorCQljYXNlICczJzoKKwkJY2FzZSAnNCc6CisJCWNhc2UgJzUnOgorCQljYXNlICc2JzoKKwkJY2FzZSAnNyc6CisJCWNhc2UgJzgnOgorCQljYXNlICc5JzoKKwkJCWZsX3NwZWVkID0gMTsKKwkJCXNwZWVkID0gc3BlZWQqMTAgKyBjIC0gJzAnOworCQkJYnJlYWs7CisJCWNhc2UgJ0MnOgorCQljYXNlICdjJzoKKwkJCXJuZGlzX3NpZ25hbF9jb25uZWN0IChwLT5jb25maWducik7CisJCQlicmVhazsKKwkJY2FzZSAnRCc6CisJCWNhc2UgJ2QnOgorCQkJcm5kaXNfc2lnbmFsX2Rpc2Nvbm5lY3QocC0+Y29uZmlnbnIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6IAorCQkJaWYgKGZsX3NwZWVkKSBwLT5zcGVlZCA9IHNwZWVkOworCQkJZWxzZSBERUJVRyAoIiVjIGlzIG5vdCB2YWxpZFxuIiwgYyk7CisJCQlicmVhazsKKwkJfQorCQkKKwkJYnVmZmVyKys7CisJfQorCQorCXJldHVybiBjb3VudDsKK30KKworI2RlZmluZQlOQU1FX1RFTVBMQVRFCSJkcml2ZXIvcm5kaXMtJTAzZCIKKworc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm5kaXNfY29ubmVjdF9zdGF0ZSBbUk5ESVNfTUFYX0NPTkZJR1NdOworCisjZW5kaWYJLyogQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgKi8KKworCitpbnQgX19pbml0IHJuZGlzX2luaXQgKHZvaWQpCit7CisJdTggaTsKKworCWZvciAoaSA9IDA7IGkgPCBSTkRJU19NQVhfQ09ORklHUzsgaSsrKSB7CisjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMKKwkJY2hhciBuYW1lIFsyMF07CisKKwkJc3ByaW50ZiAobmFtZSwgTkFNRV9URU1QTEFURSwgaSk7CisJCWlmICghKHJuZGlzX2Nvbm5lY3Rfc3RhdGUgW2ldCisJCQkJPSBjcmVhdGVfcHJvY19lbnRyeSAobmFtZSwgMDY2MCwgTlVMTCkpKSAKKwkJeworCQkJREVCVUcgKCIlcyA6cmVtb3ZlIGVudHJpZXMiLCBfX0ZVTkNUSU9OX18pOworCQkJd2hpbGUgKGkpIHsKKwkJCQlzcHJpbnRmIChuYW1lLCBOQU1FX1RFTVBMQVRFLCAtLWkpOworCQkJCXJlbW92ZV9wcm9jX2VudHJ5IChuYW1lLCBOVUxMKTsKKwkJCX0KKwkJCURFQlVHICgiXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJcm5kaXNfY29ubmVjdF9zdGF0ZSBbaV0tPm5saW5rID0gMTsKKwkJcm5kaXNfY29ubmVjdF9zdGF0ZSBbaV0tPndyaXRlX3Byb2MgPSBybmRpc19wcm9jX3dyaXRlOworCQlybmRpc19jb25uZWN0X3N0YXRlIFtpXS0+cmVhZF9wcm9jID0gcm5kaXNfcHJvY19yZWFkOworCQlybmRpc19jb25uZWN0X3N0YXRlIFtpXS0+ZGF0YSA9ICh2b2lkICopCisJCQkJKHJuZGlzX3Blcl9kZXZfcGFyYW1zICsgaSk7CisjZW5kaWYKKwkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2ldLmNvbmZpZ25yID0gaTsKKwkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2ldLnVzZWQgPSAwOworCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbaV0uc3RhdGUgPSBSTkRJU19VTklOSVRJQUxJWkVEOworCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbaV0ubWVkaWFfc3RhdGUKKwkJCQk9IE5ESVNfTUVESUFfU1RBVEVfRElTQ09OTkVDVEVEOworCQlJTklUX0xJU1RfSEVBRCAoJihybmRpc19wZXJfZGV2X3BhcmFtcyBbaV0ucmVzcF9xdWV1ZSkpOworCX0KKwkKKwlyZXR1cm4gMDsKK30KKwordm9pZCBybmRpc19leGl0ICh2b2lkKQoreworI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTCisJdTggaTsKKwljaGFyIG5hbWUgWzIwXTsKKwkKKwlmb3IgKGkgPSAwOyBpIDwgUk5ESVNfTUFYX0NPTkZJR1M7IGkrKykgeworCQlzcHJpbnRmIChuYW1lLCBOQU1FX1RFTVBMQVRFLCBpKTsKKwkJcmVtb3ZlX3Byb2NfZW50cnkgKG5hbWUsIE5VTEwpOworCX0KKyNlbmRpZgorfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMjUwMTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuaApAQCAtMCwwICsxLDM0OCBAQAorLyogCisgKiBSTkRJUwlEZWZpbml0aW9ucyBmb3IgUmVtb3RlIE5ESVMKKyAqIAorICogVmVyc2lvbjoJJElkOiBybmRpcy5oLHYgMS4xNSAyMDA0LzAzLzI1IDIxOjMzOjQ2IHJvYmVydCBFeHAgJAorICogCisgKiBBdXRob3JzOglCZW5lZGlrdCBTcHJhbmdlciwgUGVuZ3V0cm9uaXgKKyAqIAkJUm9iZXJ0IFNjaHdlYmVsLCBQZW5ndXRyb25peAorICogCisgKiAJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCXZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIAorICogCisgKgkJVGhpcyBzb2Z0d2FyZSB3YXMgb3JpZ2luYWxseSBkZXZlbG9wZWQgaW4gY29uZm9ybWFuY2Ugd2l0aAorICoJCU1pY3Jvc29mdCdzIFJlbW90ZSBORElTIFNwZWNpZmljYXRpb24gTGljZW5zZSBBZ3JlZW1lbnQuCisgKi8KKworI2lmbmRlZiBfTElOVVhfUk5ESVNfSAorI2RlZmluZSBfTElOVVhfUk5ESVNfSAorCisjaW5jbHVkZSAibmRpcy5oIgorCisjZGVmaW5lIFJORElTX01BWElNVU1fRlJBTUVfU0laRQkxNTE4CisjZGVmaW5lIFJORElTX01BWF9UT1RBTF9TSVpFCQkxNTU4CisKKy8qIFJlbW90ZSBORElTIFZlcnNpb25zICovCisjZGVmaW5lIFJORElTX01BSk9SX1ZFUlNJT04JCTEKKyNkZWZpbmUgUk5ESVNfTUlOT1JfVkVSU0lPTgkJMAorCisvKiBTdGF0dXMgVmFsdWVzICovCisjZGVmaW5lIFJORElTX1NUQVRVU19TVUNDRVNTCQkweDAwMDAwMDAwVQkvKiBTdWNjZXNzICAgICAgICAgICAqLworI2RlZmluZSBSTkRJU19TVEFUVVNfRkFJTFVSRQkJMHhDMDAwMDAwMVUJLyogVW5zcGVjaWZpZWQgZXJyb3IgKi8KKyNkZWZpbmUgUk5ESVNfU1RBVFVTX0lOVkFMSURfREFUQQkweEMwMDEwMDE1VQkvKiBJbnZhbGlkIGRhdGEgICAgICAqLworI2RlZmluZSBSTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRAkweEMwMDAwMEJCVQkvKiBVbnN1cHBvcnRlZCByZXF1ZXN0ICovCisjZGVmaW5lIFJORElTX1NUQVRVU19NRURJQV9DT05ORUNUCTB4NDAwMTAwMEJVCS8qIERldmljZSBjb25uZWN0ZWQgICovCisjZGVmaW5lIFJORElTX1NUQVRVU19NRURJQV9ESVNDT05ORUNUCTB4NDAwMTAwMENVCS8qIERldmljZSBkaXNjb25uZWN0ZWQgKi8KKy8qIEZvciBhbGwgbm90IHNwZWNpZmllZCBzdGF0dXMgbWVzc2FnZXM6CisgKiBSTkRJU19TVEFUVVNfWHh4IC0+IE5ESVNfU1RBVFVTX1h4eCAKKyAqLworCisvKiBNZXNzYWdlIFNldCBmb3IgQ29ubmVjdGlvbmxlc3MgKDgwMi4zKSBEZXZpY2VzICovCisjZGVmaW5lIFJFTU9URV9ORElTX0lOSVRJQUxJWkVfTVNHCTB4MDAwMDAwMDJVCS8qIEluaXRpYWxpemUgZGV2aWNlICovCisjZGVmaW5lIFJFTU9URV9ORElTX0hBTFRfTVNHCQkweDAwMDAwMDAzVQorI2RlZmluZSBSRU1PVEVfTkRJU19RVUVSWV9NU0cJCTB4MDAwMDAwMDRVCisjZGVmaW5lIFJFTU9URV9ORElTX1NFVF9NU0cJCTB4MDAwMDAwMDVVCisjZGVmaW5lIFJFTU9URV9ORElTX1JFU0VUX01TRwkJMHgwMDAwMDAwNlUKKyNkZWZpbmUgUkVNT1RFX05ESVNfSU5ESUNBVEVfU1RBVFVTX01TRwkweDAwMDAwMDA3VQorI2RlZmluZSBSRU1PVEVfTkRJU19LRUVQQUxJVkVfTVNHCTB4MDAwMDAwMDhVCisKKy8qIE1lc3NhZ2UgY29tcGxldGlvbiAqLworI2RlZmluZSBSRU1PVEVfTkRJU19JTklUSUFMSVpFX0NNUExUCTB4ODAwMDAwMDJVCisjZGVmaW5lIFJFTU9URV9ORElTX1FVRVJZX0NNUExUCQkweDgwMDAwMDA0VQorI2RlZmluZSBSRU1PVEVfTkRJU19TRVRfQ01QTFQJCTB4ODAwMDAwMDVVCisjZGVmaW5lIFJFTU9URV9ORElTX1JFU0VUX0NNUExUCQkweDgwMDAwMDA2VQorI2RlZmluZSBSRU1PVEVfTkRJU19LRUVQQUxJVkVfQ01QTFQJMHg4MDAwMDAwOFUKKworLyogRGV2aWNlIEZsYWdzICovCisjZGVmaW5lIFJORElTX0RGX0NPTk5FQ1RJT05MRVNTCQkweDAwMDAwMDAxVQorI2RlZmluZSBSTkRJU19ERl9DT05ORUNUSU9OX09SSUVOVEVECTB4MDAwMDAwMDJVCisKKyNkZWZpbmUgUk5ESVNfTUVESVVNXzgwMl8zCQkweDAwMDAwMDAwVQorCisvKiBmcm9tIGRyaXZlcnMvbmV0L3NrOThsaW4vaC9za2dlcG5taS5oICovCisjZGVmaW5lIE9JRF9QTlBfQ0FQQUJJTElUSUVTCQkJMHhGRDAxMDEwMAorI2RlZmluZSBPSURfUE5QX1NFVF9QT1dFUgkJCTB4RkQwMTAxMDEKKyNkZWZpbmUgT0lEX1BOUF9RVUVSWV9QT1dFUgkJCTB4RkQwMTAxMDIKKyNkZWZpbmUgT0lEX1BOUF9BRERfV0FLRV9VUF9QQVRURVJOCQkweEZEMDEwMTAzCisjZGVmaW5lIE9JRF9QTlBfUkVNT1ZFX1dBS0VfVVBfUEFUVEVSTgkJMHhGRDAxMDEwNAorI2RlZmluZSBPSURfUE5QX0VOQUJMRV9XQUtFX1VQCQkJMHhGRDAxMDEwNgorCisKKy8qIHN1cHBvcnRlZCBPSURzICovCitzdGF0aWMgY29uc3QgdTMyIG9pZF9zdXBwb3J0ZWRfbGlzdCBbXSA9IAoreworCS8qIHRoZSBnZW5lcmFsIHN0dWZmICovCisJT0lEX0dFTl9TVVBQT1JURURfTElTVCwKKwlPSURfR0VOX0hBUkRXQVJFX1NUQVRVUywKKwlPSURfR0VOX01FRElBX1NVUFBPUlRFRCwKKwlPSURfR0VOX01FRElBX0lOX1VTRSwKKwlPSURfR0VOX01BWElNVU1fRlJBTUVfU0laRSwKKwlPSURfR0VOX0xJTktfU1BFRUQsCisJT0lEX0dFTl9UUkFOU01JVF9CTE9DS19TSVpFLAorCU9JRF9HRU5fUkVDRUlWRV9CTE9DS19TSVpFLAorCU9JRF9HRU5fVkVORE9SX0lELAorCU9JRF9HRU5fVkVORE9SX0RFU0NSSVBUSU9OLAorCU9JRF9HRU5fVkVORE9SX0RSSVZFUl9WRVJTSU9OLAorCU9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSLAorCU9JRF9HRU5fTUFYSU1VTV9UT1RBTF9TSVpFLAorCU9JRF9HRU5fTUVESUFfQ09OTkVDVF9TVEFUVVMsCisJT0lEX0dFTl9QSFlTSUNBTF9NRURJVU0sCisjaWYgMAorCU9JRF9HRU5fUk5ESVNfQ09ORklHX1BBUkFNRVRFUiwKKyNlbmRpZgorCQorCS8qIHRoZSBzdGF0aXN0aWNhbCBzdHVmZiAqLworCU9JRF9HRU5fWE1JVF9PSywKKwlPSURfR0VOX1JDVl9PSywKKwlPSURfR0VOX1hNSVRfRVJST1IsCisJT0lEX0dFTl9SQ1ZfRVJST1IsCisJT0lEX0dFTl9SQ1ZfTk9fQlVGRkVSLAorI2lmZGVmCVJORElTX09QVElPTkFMX1NUQVRTCisJT0lEX0dFTl9ESVJFQ1RFRF9CWVRFU19YTUlULAorCU9JRF9HRU5fRElSRUNURURfRlJBTUVTX1hNSVQsCisJT0lEX0dFTl9NVUxUSUNBU1RfQllURVNfWE1JVCwKKwlPSURfR0VOX01VTFRJQ0FTVF9GUkFNRVNfWE1JVCwKKwlPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19YTUlULAorCU9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19YTUlULAorCU9JRF9HRU5fRElSRUNURURfQllURVNfUkNWLAorCU9JRF9HRU5fRElSRUNURURfRlJBTUVTX1JDViwKKwlPSURfR0VOX01VTFRJQ0FTVF9CWVRFU19SQ1YsCisJT0lEX0dFTl9NVUxUSUNBU1RfRlJBTUVTX1JDViwKKwlPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19SQ1YsCisJT0lEX0dFTl9CUk9BRENBU1RfRlJBTUVTX1JDViwKKwlPSURfR0VOX1JDVl9DUkNfRVJST1IsCisJT0lEX0dFTl9UUkFOU01JVF9RVUVVRV9MRU5HVEgsCisjZW5kaWYJLyogUk5ESVNfT1BUSU9OQUxfU1RBVFMgKi8KKworICAgIAkvKiBtYW5kYXRvcnkgODAyLjMgKi8KKwkvKiB0aGUgZ2VuZXJhbCBzdHVmZiAqLworCU9JRF84MDJfM19QRVJNQU5FTlRfQUREUkVTUywKKwlPSURfODAyXzNfQ1VSUkVOVF9BRERSRVNTLAorCU9JRF84MDJfM19NVUxUSUNBU1RfTElTVCwKKwlPSURfODAyXzNfTUFDX09QVElPTlMsCisJT0lEXzgwMl8zX01BWElNVU1fTElTVF9TSVpFLAorCQorCS8qIHRoZSBzdGF0aXN0aWNhbCBzdHVmZiAqLworCU9JRF84MDJfM19SQ1ZfRVJST1JfQUxJR05NRU5ULAorCU9JRF84MDJfM19YTUlUX09ORV9DT0xMSVNJT04sCisJT0lEXzgwMl8zX1hNSVRfTU9SRV9DT0xMSVNJT05TLAorI2lmZGVmCVJORElTX09QVElPTkFMX1NUQVRTCisJT0lEXzgwMl8zX1hNSVRfREVGRVJSRUQsCisJT0lEXzgwMl8zX1hNSVRfTUFYX0NPTExJU0lPTlMsCisJT0lEXzgwMl8zX1JDVl9PVkVSUlVOLAorCU9JRF84MDJfM19YTUlUX1VOREVSUlVOLAorCU9JRF84MDJfM19YTUlUX0hFQVJUQkVBVF9GQUlMVVJFLAorCU9JRF84MDJfM19YTUlUX1RJTUVTX0NSU19MT1NULAorCU9JRF84MDJfM19YTUlUX0xBVEVfQ09MTElTSU9OUywKKyNlbmRpZgkvKiBSTkRJU19PUFRJT05BTF9TVEFUUyAqLworCisjaWZkZWYJUk5ESVNfUE0KKwkvKiBQTSBhbmQgd2FrZXVwIGFyZSBtYW5kYXRvcnkgZm9yIFVTQjogKi8KKworCS8qIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwlPSURfUE5QX0NBUEFCSUxJVElFUywKKwlPSURfUE5QX1FVRVJZX1BPV0VSLAorCU9JRF9QTlBfU0VUX1BPV0VSLAorCisJLyogd2FrZSB1cCBob3N0ICovCisJT0lEX1BOUF9FTkFCTEVfV0FLRV9VUCwKKwlPSURfUE5QX0FERF9XQUtFX1VQX1BBVFRFUk4sCisJT0lEX1BOUF9SRU1PVkVfV0FLRV9VUF9QQVRURVJOLAorI2VuZGlmCit9OworCisKK3R5cGVkZWYgc3RydWN0IHJuZGlzX2luaXRfbXNnX3R5cGUgCit7CisJX19sZTMyCU1lc3NhZ2VUeXBlOworCV9fbGUzMglNZXNzYWdlTGVuZ3RoOworCV9fbGUzMglSZXF1ZXN0SUQ7CisJX19sZTMyCU1ham9yVmVyc2lvbjsKKwlfX2xlMzIJTWlub3JWZXJzaW9uOworCV9fbGUzMglNYXhUcmFuc2ZlclNpemU7Cit9IHJuZGlzX2luaXRfbXNnX3R5cGU7CisKK3R5cGVkZWYgc3RydWN0IHJuZGlzX2luaXRfY21wbHRfdHlwZQoreworCV9fbGUzMglNZXNzYWdlVHlwZTsKKwlfX2xlMzIJTWVzc2FnZUxlbmd0aDsKKwlfX2xlMzIJUmVxdWVzdElEOworCV9fbGUzMglTdGF0dXM7CisJX19sZTMyCU1ham9yVmVyc2lvbjsKKwlfX2xlMzIJTWlub3JWZXJzaW9uOworCV9fbGUzMglEZXZpY2VGbGFnczsKKwlfX2xlMzIJTWVkaXVtOworCV9fbGUzMglNYXhQYWNrZXRzUGVyVHJhbnNmZXI7CisJX19sZTMyCU1heFRyYW5zZmVyU2l6ZTsKKwlfX2xlMzIJUGFja2V0QWxpZ25tZW50RmFjdG9yOworCV9fbGUzMglBRkxpc3RPZmZzZXQ7CisJX19sZTMyCUFGTGlzdFNpemU7Cit9IHJuZGlzX2luaXRfY21wbHRfdHlwZTsKKwordHlwZWRlZiBzdHJ1Y3Qgcm5kaXNfaGFsdF9tc2dfdHlwZQoreworCV9fbGUzMglNZXNzYWdlVHlwZTsKKwlfX2xlMzIJTWVzc2FnZUxlbmd0aDsKKwlfX2xlMzIJUmVxdWVzdElEOworfSBybmRpc19oYWx0X21zZ190eXBlOworCit0eXBlZGVmIHN0cnVjdCBybmRpc19xdWVyeV9tc2dfdHlwZQoreworCV9fbGUzMglNZXNzYWdlVHlwZTsKKwlfX2xlMzIJTWVzc2FnZUxlbmd0aDsKKwlfX2xlMzIJUmVxdWVzdElEOworCV9fbGUzMglPSUQ7CisJX19sZTMyCUluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoOworCV9fbGUzMglJbmZvcm1hdGlvbkJ1ZmZlck9mZnNldDsKKwlfX2xlMzIJRGV2aWNlVmNIYW5kbGU7Cit9IHJuZGlzX3F1ZXJ5X21zZ190eXBlOworCit0eXBlZGVmIHN0cnVjdCBybmRpc19xdWVyeV9jbXBsdF90eXBlCit7CisJX19sZTMyCU1lc3NhZ2VUeXBlOworCV9fbGUzMglNZXNzYWdlTGVuZ3RoOworCV9fbGUzMglSZXF1ZXN0SUQ7CisJX19sZTMyCVN0YXR1czsKKwlfX2xlMzIJSW5mb3JtYXRpb25CdWZmZXJMZW5ndGg7CisJX19sZTMyCUluZm9ybWF0aW9uQnVmZmVyT2Zmc2V0OworfSBybmRpc19xdWVyeV9jbXBsdF90eXBlOworCit0eXBlZGVmIHN0cnVjdCBybmRpc19zZXRfbXNnX3R5cGUKK3sKKwlfX2xlMzIJTWVzc2FnZVR5cGU7CisJX19sZTMyCU1lc3NhZ2VMZW5ndGg7CisJX19sZTMyCVJlcXVlc3RJRDsKKwlfX2xlMzIJT0lEOworCV9fbGUzMglJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aDsKKwlfX2xlMzIJSW5mb3JtYXRpb25CdWZmZXJPZmZzZXQ7CisJX19sZTMyCURldmljZVZjSGFuZGxlOworfSBybmRpc19zZXRfbXNnX3R5cGU7CisKK3R5cGVkZWYgc3RydWN0IHJuZGlzX3NldF9jbXBsdF90eXBlCit7CisJX19sZTMyCU1lc3NhZ2VUeXBlOworCV9fbGUzMglNZXNzYWdlTGVuZ3RoOworCV9fbGUzMglSZXF1ZXN0SUQ7CisJX19sZTMyCVN0YXR1czsKK30gcm5kaXNfc2V0X2NtcGx0X3R5cGU7CisKK3R5cGVkZWYgc3RydWN0IHJuZGlzX3Jlc2V0X21zZ190eXBlCit7CisJX19sZTMyCU1lc3NhZ2VUeXBlOworCV9fbGUzMglNZXNzYWdlTGVuZ3RoOworCV9fbGUzMglSZXNlcnZlZDsKK30gcm5kaXNfcmVzZXRfbXNnX3R5cGU7CisKK3R5cGVkZWYgc3RydWN0IHJuZGlzX3Jlc2V0X2NtcGx0X3R5cGUKK3sKKwlfX2xlMzIJTWVzc2FnZVR5cGU7CisJX19sZTMyCU1lc3NhZ2VMZW5ndGg7CisJX19sZTMyCVN0YXR1czsKKwlfX2xlMzIJQWRkcmVzc2luZ1Jlc2V0OworfSBybmRpc19yZXNldF9jbXBsdF90eXBlOworCit0eXBlZGVmIHN0cnVjdCBybmRpc19pbmRpY2F0ZV9zdGF0dXNfbXNnX3R5cGUKK3sKKwlfX2xlMzIJTWVzc2FnZVR5cGU7CisJX19sZTMyCU1lc3NhZ2VMZW5ndGg7CisJX19sZTMyCVN0YXR1czsKKwlfX2xlMzIJU3RhdHVzQnVmZmVyTGVuZ3RoOworCV9fbGUzMglTdGF0dXNCdWZmZXJPZmZzZXQ7Cit9IHJuZGlzX2luZGljYXRlX3N0YXR1c19tc2dfdHlwZTsKKwordHlwZWRlZiBzdHJ1Y3Qgcm5kaXNfa2VlcGFsaXZlX21zZ190eXBlCit7CisJX19sZTMyCU1lc3NhZ2VUeXBlOworCV9fbGUzMglNZXNzYWdlTGVuZ3RoOworCV9fbGUzMglSZXF1ZXN0SUQ7Cit9IHJuZGlzX2tlZXBhbGl2ZV9tc2dfdHlwZTsKKwordHlwZWRlZiBzdHJ1Y3Qgcm5kaXNfa2VlcGFsaXZlX2NtcGx0X3R5cGUKK3sKKwlfX2xlMzIJTWVzc2FnZVR5cGU7CisJX19sZTMyCU1lc3NhZ2VMZW5ndGg7CisJX19sZTMyCVJlcXVlc3RJRDsKKwlfX2xlMzIJU3RhdHVzOworfSBybmRpc19rZWVwYWxpdmVfY21wbHRfdHlwZTsKKworc3RydWN0IHJuZGlzX3BhY2tldF9tc2dfdHlwZQoreworCV9fbGUzMglNZXNzYWdlVHlwZTsKKwlfX2xlMzIJTWVzc2FnZUxlbmd0aDsKKwlfX2xlMzIJRGF0YU9mZnNldDsKKwlfX2xlMzIJRGF0YUxlbmd0aDsKKwlfX2xlMzIJT09CRGF0YU9mZnNldDsKKwlfX2xlMzIJT09CRGF0YUxlbmd0aDsKKwlfX2xlMzIJTnVtT09CRGF0YUVsZW1lbnRzOworCV9fbGUzMglQZXJQYWNrZXRJbmZvT2Zmc2V0OworCV9fbGUzMglQZXJQYWNrZXRJbmZvTGVuZ3RoOworCV9fbGUzMglWY0hhbmRsZTsKKwlfX2xlMzIJUmVzZXJ2ZWQ7Cit9OworCitzdHJ1Y3Qgcm5kaXNfY29uZmlnX3BhcmFtZXRlcgoreworCV9fbGUzMglQYXJhbWV0ZXJOYW1lT2Zmc2V0OworCV9fbGUzMglQYXJhbWV0ZXJOYW1lTGVuZ3RoOworCV9fbGUzMglQYXJhbWV0ZXJUeXBlOworCV9fbGUzMglQYXJhbWV0ZXJWYWx1ZU9mZnNldDsKKwlfX2xlMzIJUGFyYW1ldGVyVmFsdWVMZW5ndGg7Cit9OworCisvKiBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyAqLworZW51bSBybmRpc19zdGF0ZQoreworCVJORElTX1VOSU5JVElBTElaRUQsCisJUk5ESVNfSU5JVElBTElaRUQsCisJUk5ESVNfREFUQV9JTklUSUFMSVpFRCwKK307CisKK3R5cGVkZWYgc3RydWN0IHJuZGlzX3Jlc3BfdAoreworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwl1OAkJCSpidWY7CisJdTMyCQkJbGVuZ3RoOworCWludAkJCXNlbmQ7Cit9IHJuZGlzX3Jlc3BfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgcm5kaXNfcGFyYW1zCit7CisJdTgJCQljb25maWducjsKKwlpbnQJCQl1c2VkOworCWVudW0gcm5kaXNfc3RhdGUJc3RhdGU7CisJdTMyCQkJZmlsdGVyOworCXUzMgkJCW1lZGl1bTsKKwl1MzIJCQlzcGVlZDsKKwl1MzIJCQltZWRpYV9zdGF0ZTsKKwljb25zdCB1OAkJKmhvc3RfbWFjOworCXN0cnVjdCBuZXRfZGV2aWNlIAkqZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKKwl1MzIJCQl2ZW5kb3JJRDsKKwljb25zdCBjaGFyCQkqdmVuZG9yRGVzY3I7CisJaW50IAkJCSgqYWNrKSAoc3RydWN0IG5ldF9kZXZpY2UgKik7CisJc3RydWN0IGxpc3RfaGVhZAlyZXNwX3F1ZXVlOworfSBybmRpc19wYXJhbXM7CisKKy8qIFJORElTIE1lc3NhZ2UgcGFyc2VyIGFuZCBvdGhlciB1c2VsZXNzIGZ1bmN0aW9ucyAqLworaW50ICBybmRpc19tc2dfcGFyc2VyICh1OCBjb25maWdOciwgdTggKmJ1Zik7CitpbnQgIHJuZGlzX3JlZ2lzdGVyIChpbnQgKCpybmRpc19jb250cm9sX2FjaykgKHN0cnVjdCBuZXRfZGV2aWNlICopKTsKK3ZvaWQgcm5kaXNfZGVyZWdpc3RlciAoaW50IGNvbmZpZ05yKTsKK2ludCAgcm5kaXNfc2V0X3BhcmFtX2RldiAodTggY29uZmlnTnIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzKTsKK2ludCAgcm5kaXNfc2V0X3BhcmFtX3ZlbmRvciAodTggY29uZmlnTnIsIHUzMiB2ZW5kb3JJRCwgCisJCQkgICAgY29uc3QgY2hhciAqdmVuZG9yRGVzY3IpOworaW50ICBybmRpc19zZXRfcGFyYW1fbWVkaXVtICh1OCBjb25maWdOciwgdTMyIG1lZGl1bSwgdTMyIHNwZWVkKTsKK3ZvaWQgcm5kaXNfYWRkX2hkciAoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgIHJuZGlzX3JtX2hkciAodTggKmJ1ZiwgdTMyICpsZW5ndGgpOwordTggICAqcm5kaXNfZ2V0X25leHRfcmVzcG9uc2UgKGludCBjb25maWdOciwgdTMyICpsZW5ndGgpOwordm9pZCBybmRpc19mcmVlX3Jlc3BvbnNlIChpbnQgY29uZmlnTnIsIHU4ICpidWYpOworCitpbnQgIHJuZGlzX3NpZ25hbF9jb25uZWN0IChpbnQgY29uZmlnTnIpOworaW50ICBybmRpc19zaWduYWxfZGlzY29ubmVjdCAoaW50IGNvbmZpZ05yKTsKK2ludCAgcm5kaXNfc3RhdGUgKGludCBjb25maWdOcik7CitleHRlcm4gdm9pZCBybmRpc19zZXRfaG9zdF9tYWMgKGludCBjb25maWdOciwgY29uc3QgdTggKmFkZHIpOworCitpbnQgX19pbml0IHJuZGlzX2luaXQgKHZvaWQpOwordm9pZCBybmRpc19leGl0ICh2b2lkKTsKKworI2VuZGlmICAvKiBfTElOVVhfUk5ESVNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZjNmNzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKQEAgLTAsMCArMSwyNDM2IEBACisvKgorICogZ19zZXJpYWwuYyAtLSBVU0IgZ2FkZ2V0IHNlcmlhbCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwMyAoQykgQWwgQm9yY2hlcnMgKGFsYm9yY2hlcnNAc3RlaW5lcnBvaW50LmNvbSkKKyAqCisgKiBUaGlzIGNvZGUgaXMgYmFzZWQgaW4gcGFydCBvbiB0aGUgR2FkZ2V0IFplcm8gZHJpdmVyLCB3aGljaAorICogaXMgQ29weXJpZ2h0IChDKSAyMDAzIGJ5IERhdmlkIEJyb3duZWxsLCBhbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBhbHNvIGJvcnJvd3MgZnJvbSB1c2JzZXJpYWwuYywgd2hpY2ggaXMKKyAqIENvcHlyaWdodCAoQykgMTk5OSAtIDIwMDIgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBCZXJnZXIgKHBiZXJnZXJAYnJpbXNvbi5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgQWwgQm9yY2hlcnMgKGFsYm9yY2hlcnNAc3RlaW5lcnBvaW50LmNvbSkKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoYXQgTGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgPGxpbnV4L3VzYl9jaDkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfY2RjLmg+CisjaW5jbHVkZSA8bGludXgvdXNiX2dhZGdldC5oPgorCisjaW5jbHVkZSAiZ2FkZ2V0X2NoaXBzLmgiCisKKworLyogV2FpdCBDb25kICovCisKKyNkZWZpbmUgX193YWl0X2NvbmRfaW50ZXJydXB0aWJsZSh3cSwgY29uZGl0aW9uLCBsb2NrLCBmbGFncywgcmV0KQlcCitkbyB7CQkJCQkJCQkJXAorCXdhaXRfcXVldWVfdCBfX3dhaXQ7CQkJCQkJXAorCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZfX3dhaXQsIGN1cnJlbnQpOwkJCQlcCisJCQkJCQkJCQlcCisJYWRkX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsJCQkJCVwKKwlmb3IgKDs7KSB7CQkJCQkJCVwKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsJCQlcCisJCWlmIChjb25kaXRpb24pCQkJCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQlpZiAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CQkJCVwKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOwkJXAorCQkJc2NoZWR1bGUoKTsJCQkJCVwKKwkJCXNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKTsJCQlcCisJCQljb250aW51ZTsJCQkJCVwKKwkJfQkJCQkJCQlcCisJCXJldCA9IC1FUkVTVEFSVFNZUzsJCQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CQkJCQlcCisJcmVtb3ZlX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsJCQkJXAorfSB3aGlsZSAoMCkKKwkKKyNkZWZpbmUgd2FpdF9jb25kX2ludGVycnVwdGlibGUod3EsIGNvbmRpdGlvbiwgbG9jaywgZmxhZ3MpCQlcCisoewkJCQkJCQkJCVwKKwlpbnQgX19yZXQgPSAwOwkJCQkJCQlcCisJaWYgKCEoY29uZGl0aW9uKSkJCQkJCQlcCisJCV9fd2FpdF9jb25kX2ludGVycnVwdGlibGUod3EsIGNvbmRpdGlvbiwgbG9jaywgZmxhZ3MsCVwKKwkJCQkJCV9fcmV0KTsJCQlcCisJX19yZXQ7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fd2FpdF9jb25kX2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCBsb2NrLCBmbGFncywgCVwKKwkJCQkJCXRpbWVvdXQsIHJldCkJCVwKK2RvIHsJCQkJCQkJCQlcCisJc2lnbmVkIGxvbmcgX190aW1lb3V0ID0gdGltZW91dDsJCQkJXAorCXdhaXRfcXVldWVfdCBfX3dhaXQ7CQkJCQkJXAorCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZfX3dhaXQsIGN1cnJlbnQpOwkJCQlcCisJCQkJCQkJCQlcCisJYWRkX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsJCQkJCVwKKwlmb3IgKDs7KSB7CQkJCQkJCVwKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsJCQlcCisJCWlmIChfX3RpbWVvdXQgPT0gMCkJCQkJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJaWYgKGNvbmRpdGlvbikJCQkJCQlcCisJCQlicmVhazsJCQkJCQlcCisJCWlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsJCQkJXAorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncyk7CQlcCisJCQlfX3RpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KF9fdGltZW91dCk7CVwKKwkJCXNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKTsJCQlcCisJCQljb250aW51ZTsJCQkJCVwKKwkJfQkJCQkJCQlcCisJCXJldCA9IC1FUkVTVEFSVFNZUzsJCQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CQkJCQlcCisJcmVtb3ZlX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsJCQkJXAorfSB3aGlsZSAoMCkKKwkKKyNkZWZpbmUgd2FpdF9jb25kX2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCBsb2NrLCBmbGFncywJXAorCQkJCQkJdGltZW91dCkJCVwKKyh7CQkJCQkJCQkJXAorCWludCBfX3JldCA9IDA7CQkJCQkJCVwKKwlpZiAoIShjb25kaXRpb24pKQkJCQkJCVwKKwkJX193YWl0X2NvbmRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxLCBjb25kaXRpb24sIGxvY2ssCVwKKwkJCQkJCWZsYWdzLCB0aW1lb3V0LCBfX3JldCk7CVwKKwlfX3JldDsJCQkJCQkJCVwKK30pCisKKworLyogRGVmaW5lcyAqLworCisjZGVmaW5lIEdTX1ZFUlNJT05fU1RSCQkJInYyLjAiCisjZGVmaW5lIEdTX1ZFUlNJT05fTlVNCQkJMHgwMjAwCisKKyNkZWZpbmUgR1NfTE9OR19OQU1FCQkJIkdhZGdldCBTZXJpYWwiCisjZGVmaW5lIEdTX1NIT1JUX05BTUUJCQkiZ19zZXJpYWwiCisKKyNkZWZpbmUgR1NfTUFKT1IJCQkxMjcKKyNkZWZpbmUgR1NfTUlOT1JfU1RBUlQJCQkwCisKKyNkZWZpbmUgR1NfTlVNX1BPUlRTCQkJMTYKKworI2RlZmluZSBHU19OVU1fQ09ORklHUwkJCTEKKyNkZWZpbmUgR1NfTk9fQ09ORklHX0lECQkJMAorI2RlZmluZSBHU19CVUxLX0NPTkZJR19JRAkJMQorI2RlZmluZSBHU19BQ01fQ09ORklHX0lECQkyCisKKyNkZWZpbmUgR1NfTUFYX05VTV9JTlRFUkZBQ0VTCQkyCisjZGVmaW5lIEdTX0JVTEtfSU5URVJGQUNFX0lECQkwCisjZGVmaW5lIEdTX0NPTlRST0xfSU5URVJGQUNFX0lECQkwCisjZGVmaW5lIEdTX0RBVEFfSU5URVJGQUNFX0lECQkxCisKKyNkZWZpbmUgR1NfTUFYX0RFU0NfTEVOCQkJMjU2CisKKyNkZWZpbmUgR1NfREVGQVVMVF9SRUFEX1FfU0laRQkJMzIKKyNkZWZpbmUgR1NfREVGQVVMVF9XUklURV9RX1NJWkUJCTMyCisKKyNkZWZpbmUgR1NfREVGQVVMVF9XUklURV9CVUZfU0laRQk4MTkyCisjZGVmaW5lIEdTX1RNUF9CVUZfU0laRQkJCTgxOTIKKworI2RlZmluZSBHU19DTE9TRV9USU1FT1VUCQkxNQorCisjZGVmaW5lIEdTX0RFRkFVTFRfVVNFX0FDTQkJMAorCisjZGVmaW5lIEdTX0RFRkFVTFRfRFRFX1JBVEUJCTk2MDAKKyNkZWZpbmUgR1NfREVGQVVMVF9EQVRBX0JJVFMJCTgKKyNkZWZpbmUgR1NfREVGQVVMVF9QQVJJVFkJCVVTQl9DRENfTk9fUEFSSVRZCisjZGVmaW5lIEdTX0RFRkFVTFRfQ0hBUl9GT1JNQVQJCVVTQl9DRENfMV9TVE9QX0JJVFMKKworLyogc2VsZWN0IGhpZ2hzcGVlZC9mdWxsc3BlZWQsIGhpZGluZyBoaWdoc3BlZWQgaWYgbm90IGNvbmZpZ3VyZWQgKi8KKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKyNkZWZpbmUgR1NfU1BFRURfU0VMRUNUKGlzX2hzLGhzLGZzKSAoKGlzX2hzKSA/IChocykgOiAoZnMpKQorI2Vsc2UKKyNkZWZpbmUgR1NfU1BFRURfU0VMRUNUKGlzX2hzLGhzLGZzKSAoZnMpCisjZW5kaWYgLyogQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEICovCisKKy8qIGRlYnVnIHNldHRpbmdzICovCisjaWZkZWYgR1NfREVCVUcKK3N0YXRpYyBpbnQgZGVidWcgPSAxOworCisjZGVmaW5lIGdzX2RlYnVnKGZvcm1hdCwgYXJnLi4uKSBcCisJZG8geyBpZiAoZGVidWcpIHByaW50ayhLRVJOX0RFQlVHIGZvcm1hdCwgIyMgYXJnKTsgfSB3aGlsZSgwKQorI2RlZmluZSBnc19kZWJ1Z19sZXZlbChsZXZlbCwgZm9ybWF0LCBhcmcuLi4pIFwKKwlkbyB7IGlmIChkZWJ1Zz49bGV2ZWwpIHByaW50ayhLRVJOX0RFQlVHIGZvcm1hdCwgIyMgYXJnKTsgfSB3aGlsZSgwKQorCisjZWxzZQorCisjZGVmaW5lIGdzX2RlYnVnKGZvcm1hdCwgYXJnLi4uKSBcCisJZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIGdzX2RlYnVnX2xldmVsKGxldmVsLCBmb3JtYXQsIGFyZy4uLikgXAorCWRvIHsgfSB3aGlsZSgwKQorCisjZW5kaWYgLyogR1NfREVCVUcgKi8KKworLyogVGhhbmtzIHRvIE5ldENoaXAgVGVjaG5vbG9naWVzIGZvciBkb25hdGluZyB0aGlzIHByb2R1Y3QgSUQuCisgKgorICogRE8gTk9UIFJFVVNFIFRIRVNFIElEcyB3aXRoIGEgcHJvdG9jb2wtaW5jb21wYXRpYmxlIGRyaXZlciEhICBFdmVyISEKKyAqIEluc3RlYWQ6ICBhbGxvY2F0ZSB5b3VyIG93biwgdXNpbmcgbm9ybWFsIFVTQi1JRiBwcm9jZWR1cmVzLgorICovCisjZGVmaW5lIEdTX1ZFTkRPUl9JRAkJCTB4MDUyNQkvKiBOZXRDaGlwICovCisjZGVmaW5lIEdTX1BST0RVQ1RfSUQJCQkweGE0YTYJLyogTGludXgtVVNCIFNlcmlhbCBHYWRnZXQgKi8KKyNkZWZpbmUgR1NfQ0RDX1BST0RVQ1RfSUQJCTB4YTRhNwkvKiAuLi4gYXMgQ0RDLUFDTSAqLworCisjZGVmaW5lIEdTX0xPRzJfTk9USUZZX0lOVEVSVkFMCQk1CS8qIDEgPDwgNSA9PSAzMiBtc2VjICovCisjZGVmaW5lIEdTX05PVElGWV9NQVhQQUNLRVQJCTgKKworCisvKiBTdHJ1Y3R1cmVzICovCisKK3N0cnVjdCBnc19kZXY7CisKKy8qIGNpcmN1bGFyIGJ1ZmZlciAqLworc3RydWN0IGdzX2J1ZiB7CisJdW5zaWduZWQgaW50CQlidWZfc2l6ZTsKKwljaGFyCQkJKmJ1Zl9idWY7CisJY2hhcgkJCSpidWZfZ2V0OworCWNoYXIJCQkqYnVmX3B1dDsKK307CisKKy8qIGxpc3Qgb2YgcmVxdWVzdHMgKi8KK3N0cnVjdCBnc19yZXFfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQJcmVfZW50cnk7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZV9yZXE7Cit9OworCisvKiB0aGUgcG9ydCBzdHJ1Y3R1cmUgaG9sZHMgaW5mbyBmb3IgZWFjaCBwb3J0LCBvbmUgZm9yIGVhY2ggbWlub3IgbnVtYmVyICovCitzdHJ1Y3QgZ3NfcG9ydCB7CisJc3RydWN0IGdzX2RldiAJCSpwb3J0X2RldjsJLyogcG9pbnRlciB0byBkZXZpY2Ugc3RydWN0ICovCisJc3RydWN0IHR0eV9zdHJ1Y3QJKnBvcnRfdHR5OwkvKiBwb2ludGVyIHRvIHR0eSBzdHJ1Y3QgKi8KKwlzcGlubG9ja190CQlwb3J0X2xvY2s7CisJaW50IAkJCXBvcnRfbnVtOworCWludAkJCXBvcnRfb3Blbl9jb3VudDsKKwlpbnQJCQlwb3J0X2luX3VzZTsJLyogb3Blbi9jbG9zZSBpbiBwcm9ncmVzcyAqLworCXdhaXRfcXVldWVfaGVhZF90CXBvcnRfd3JpdGVfd2FpdDsvKiB3YWl0aW5nIHRvIHdyaXRlICovCisJc3RydWN0IGdzX2J1ZgkJKnBvcnRfd3JpdGVfYnVmOworCXN0cnVjdCB1c2JfY2RjX2xpbmVfY29kaW5nCXBvcnRfbGluZV9jb2Rpbmc7Cit9OworCisvKiB0aGUgZGV2aWNlIHN0cnVjdHVyZSBob2xkcyBpbmZvIGZvciB0aGUgVVNCIGRldmljZSAqLworc3RydWN0IGdzX2RldiB7CisJc3RydWN0IHVzYl9nYWRnZXQJKmRldl9nYWRnZXQ7CS8qIGdhZGdldCBkZXZpY2UgcG9pbnRlciAqLworCXNwaW5sb2NrX3QJCWRldl9sb2NrOwkvKiBsb2NrIGZvciBzZXQvcmVzZXQgY29uZmlnICovCisJaW50CQkJZGV2X2NvbmZpZzsJLyogY29uZmlndXJhdGlvbiBudW1iZXIgKi8KKwlzdHJ1Y3QgdXNiX2VwCQkqZGV2X25vdGlmeV9lcDsJLyogYWRkcmVzcyBvZiBub3RpZnkgZW5kcG9pbnQgKi8KKwlzdHJ1Y3QgdXNiX2VwCQkqZGV2X2luX2VwOwkvKiBhZGRyZXNzIG9mIGluIGVuZHBvaW50ICovCisJc3RydWN0IHVzYl9lcAkJKmRldl9vdXRfZXA7CS8qIGFkZHJlc3Mgb2Ygb3V0IGVuZHBvaW50ICovCisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCQkvKiBkZXNjaXB0b3Igb2Ygbm90aWZ5IGVwICovCisJCQkJKmRldl9ub3RpZnlfZXBfZGVzYzsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJCS8qIGRlc2NyaXB0b3Igb2YgaW4gZW5kcG9pbnQgKi8KKwkJCQkqZGV2X2luX2VwX2Rlc2M7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCQkvKiBkZXNjcmlwdG9yIG9mIG91dCBlbmRwb2ludCAqLworCQkJCSpkZXZfb3V0X2VwX2Rlc2M7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpkZXZfY3RybF9yZXE7CS8qIGNvbnRyb2wgcmVxdWVzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQJZGV2X3JlcV9saXN0OwkvKiBsaXN0IG9mIHdyaXRlIHJlcXVlc3RzICovCisJaW50CQkJZGV2X3NjaGVkX3BvcnQ7CS8qIHJvdW5kIHJvYmluIHBvcnQgc2NoZWR1bGVkICovCisJc3RydWN0IGdzX3BvcnQJCSpkZXZfcG9ydFtHU19OVU1fUE9SVFNdOyAvKiB0aGUgcG9ydHMgKi8KK307CisKKworLyogRnVuY3Rpb25zICovCisKKy8qIG1vZHVsZSAqLworc3RhdGljIGludCBfX2luaXQgZ3NfbW9kdWxlX2luaXQodm9pZCk7CitzdGF0aWMgdm9pZCBfX2V4aXQgZ3NfbW9kdWxlX2V4aXQodm9pZCk7CisKKy8qIHR0eSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgZ3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgdm9pZCBnc19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IGdzX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKK3N0YXRpYyB2b2lkIGdzX3B1dF9jaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgY2gpOworc3RhdGljIHZvaWQgZ3NfZmx1c2hfY2hhcnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgaW50IGdzX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgaW50IGdzX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyB2b2lkIGdzX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKK3N0YXRpYyB2b2lkIGdzX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOworc3RhdGljIHZvaWQgZ3NfYnJlYWsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKTsKK3N0YXRpYyBpbnQgIGdzX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyB2b2lkIGdzX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICpvbGQpOworCitzdGF0aWMgaW50IGdzX3NlbmQoc3RydWN0IGdzX2RldiAqZGV2KTsKK3N0YXRpYyBpbnQgZ3Nfc2VuZF9wYWNrZXQoc3RydWN0IGdzX2RldiAqZGV2LCBjaGFyICpwYWNrZXQsCisJdW5zaWduZWQgaW50IHNpemUpOworc3RhdGljIGludCBnc19yZWN2X3BhY2tldChzdHJ1Y3QgZ3NfZGV2ICpkZXYsIGNoYXIgKnBhY2tldCwKKwl1bnNpZ25lZCBpbnQgc2l6ZSk7CitzdGF0aWMgdm9pZCBnc19yZWFkX2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSk7CitzdGF0aWMgdm9pZCBnc193cml0ZV9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpOworCisvKiBnYWRnZXQgZHJpdmVyICovCitzdGF0aWMgaW50IGdzX2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCk7CitzdGF0aWMgdm9pZCBnc191bmJpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCk7CitzdGF0aWMgaW50IGdzX3NldHVwKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsCisJY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCk7CitzdGF0aWMgaW50IGdzX3NldHVwX3N0YW5kYXJkKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsCisJY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCk7CitzdGF0aWMgaW50IGdzX3NldHVwX2NsYXNzKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsCisJY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCk7CitzdGF0aWMgdm9pZCBnc19zZXR1cF9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpOworc3RhdGljIHZvaWQgZ3NfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KTsKK3N0YXRpYyBpbnQgZ3Nfc2V0X2NvbmZpZyhzdHJ1Y3QgZ3NfZGV2ICpkZXYsIHVuc2lnbmVkIGNvbmZpZyk7CitzdGF0aWMgdm9pZCBnc19yZXNldF9jb25maWcoc3RydWN0IGdzX2RldiAqZGV2KTsKK3N0YXRpYyBpbnQgZ3NfYnVpbGRfY29uZmlnX2J1Zih1OCAqYnVmLCBlbnVtIHVzYl9kZXZpY2Vfc3BlZWQgc3BlZWQsCisJCXU4IHR5cGUsIHVuc2lnbmVkIGludCBpbmRleCwgaW50IGlzX290Zyk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3JlcXVlc3QgKmdzX2FsbG9jX3JlcShzdHJ1Y3QgdXNiX2VwICplcCwgdW5zaWduZWQgaW50IGxlbiwKKwlpbnQga21hbGxvY19mbGFncyk7CitzdGF0aWMgdm9pZCBnc19mcmVlX3JlcShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpOworCitzdGF0aWMgc3RydWN0IGdzX3JlcV9lbnRyeSAqZ3NfYWxsb2NfcmVxX2VudHJ5KHN0cnVjdCB1c2JfZXAgKmVwLCB1bnNpZ25lZCBsZW4sCisJaW50IGttYWxsb2NfZmxhZ3MpOworc3RhdGljIHZvaWQgZ3NfZnJlZV9yZXFfZW50cnkoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCBnc19yZXFfZW50cnkgKnJlcSk7CisKK3N0YXRpYyBpbnQgZ3NfYWxsb2NfcG9ydHMoc3RydWN0IGdzX2RldiAqZGV2LCBpbnQga21hbGxvY19mbGFncyk7CitzdGF0aWMgdm9pZCBnc19mcmVlX3BvcnRzKHN0cnVjdCBnc19kZXYgKmRldik7CisKKy8qIGNpcmN1bGFyIGJ1ZmZlciAqLworc3RhdGljIHN0cnVjdCBnc19idWYgKmdzX2J1Zl9hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IGttYWxsb2NfZmxhZ3MpOworc3RhdGljIHZvaWQgZ3NfYnVmX2ZyZWUoc3RydWN0IGdzX2J1ZiAqZ2IpOworc3RhdGljIHZvaWQgZ3NfYnVmX2NsZWFyKHN0cnVjdCBnc19idWYgKmdiKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ3NfYnVmX2RhdGFfYXZhaWwoc3RydWN0IGdzX2J1ZiAqZ2IpOworc3RhdGljIHVuc2lnbmVkIGludCBnc19idWZfc3BhY2VfYXZhaWwoc3RydWN0IGdzX2J1ZiAqZ2IpOworc3RhdGljIHVuc2lnbmVkIGludCBnc19idWZfcHV0KHN0cnVjdCBnc19idWYgKmdiLCBjb25zdCBjaGFyICpidWYsCisJdW5zaWduZWQgaW50IGNvdW50KTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ3NfYnVmX2dldChzdHJ1Y3QgZ3NfYnVmICpnYiwgY2hhciAqYnVmLAorCXVuc2lnbmVkIGludCBjb3VudCk7CisKKy8qIGV4dGVybmFsIGZ1bmN0aW9ucyAqLworZXh0ZXJuIGludCBuZXQyMjgwX3NldF9maWZvX21vZGUoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwgaW50IG1vZGUpOworCisKKy8qIEdsb2JhbHMgKi8KKworc3RhdGljIHN0cnVjdCBnc19kZXYgKmdzX2RldmljZTsKKworc3RhdGljIGNvbnN0IGNoYXIgKkVQX0lOX05BTUU7CitzdGF0aWMgY29uc3QgY2hhciAqRVBfT1VUX05BTUU7CitzdGF0aWMgY29uc3QgY2hhciAqRVBfTk9USUZZX05BTUU7CisKK3N0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlCWdzX29wZW5fY2xvc2Vfc2VtW0dTX05VTV9QT1JUU107CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVhZF9xX3NpemUgPSBHU19ERUZBVUxUX1JFQURfUV9TSVpFOworc3RhdGljIHVuc2lnbmVkIGludCB3cml0ZV9xX3NpemUgPSBHU19ERUZBVUxUX1dSSVRFX1FfU0laRTsKKworc3RhdGljIHVuc2lnbmVkIGludCB3cml0ZV9idWZfc2l6ZSA9IEdTX0RFRkFVTFRfV1JJVEVfQlVGX1NJWkU7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdXNlX2FjbSA9IEdTX0RFRkFVTFRfVVNFX0FDTTsKKworCisvKiB0dHkgZHJpdmVyIHN0cnVjdCAqLworc3RhdGljIHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBnc190dHlfb3BzID0geworCS5vcGVuID0JCQlnc19vcGVuLAorCS5jbG9zZSA9CQlnc19jbG9zZSwKKwkud3JpdGUgPQkJZ3Nfd3JpdGUsCisJLnB1dF9jaGFyID0JCWdzX3B1dF9jaGFyLAorCS5mbHVzaF9jaGFycyA9CQlnc19mbHVzaF9jaGFycywKKwkud3JpdGVfcm9vbSA9CQlnc193cml0ZV9yb29tLAorCS5pb2N0bCA9CQlnc19pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkJZ3Nfc2V0X3Rlcm1pb3MsCisJLnRocm90dGxlID0JCWdzX3Rocm90dGxlLAorCS51bnRocm90dGxlID0JCWdzX3VudGhyb3R0bGUsCisJLmJyZWFrX2N0bCA9CQlnc19icmVhaywKKwkuY2hhcnNfaW5fYnVmZmVyID0JZ3NfY2hhcnNfaW5fYnVmZmVyLAorfTsKK3N0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciAqZ3NfdHR5X2RyaXZlcjsKKworLyogZ2FkZ2V0IGRyaXZlciBzdHJ1Y3QgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgZ3NfZ2FkZ2V0X2RyaXZlciA9IHsKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKwkuc3BlZWQgPQkJVVNCX1NQRUVEX0hJR0gsCisjZWxzZQorCS5zcGVlZCA9CQlVU0JfU1BFRURfRlVMTCwKKyNlbmRpZiAvKiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgKi8KKwkuZnVuY3Rpb24gPQkJR1NfTE9OR19OQU1FLAorCS5iaW5kID0JCQlnc19iaW5kLAorCS51bmJpbmQgPQkJZ3NfdW5iaW5kLAorCS5zZXR1cCA9CQlnc19zZXR1cCwKKwkuZGlzY29ubmVjdCA9CQlnc19kaXNjb25uZWN0LAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0JCUdTX1NIT1JUX05BTUUsCisJCS8qIC5zaHV0ZG93biA9IC4uLiAqLworCQkvKiAuc3VzcGVuZCA9IC4uLiAgKi8KKwkJLyogLnJlc3VtZSA9IC4uLiAgICovCisJfSwKK307CisKKworLyogVVNCIGRlc2NyaXB0b3JzICovCisKKyNkZWZpbmUgR1NfTUFOVUZBQ1RVUkVSX1NUUl9JRAkxCisjZGVmaW5lIEdTX1BST0RVQ1RfU1RSX0lECTIKKyNkZWZpbmUgR1NfU0VSSUFMX1NUUl9JRAkzCisjZGVmaW5lIEdTX0JVTEtfQ09ORklHX1NUUl9JRAk0CisjZGVmaW5lIEdTX0FDTV9DT05GSUdfU1RSX0lECTUKKyNkZWZpbmUgR1NfQ09OVFJPTF9TVFJfSUQJNgorI2RlZmluZSBHU19EQVRBX1NUUl9JRAkJNworCisvKiBzdGF0aWMgc3RyaW5ncywgaW4gVVRGLTggKi8KK3N0YXRpYyBjaGFyIG1hbnVmYWN0dXJlcls1MF07CitzdGF0aWMgc3RydWN0IHVzYl9zdHJpbmcgZ3Nfc3RyaW5nc1tdID0geworCXsgR1NfTUFOVUZBQ1RVUkVSX1NUUl9JRCwgbWFudWZhY3R1cmVyIH0sCisJeyBHU19QUk9EVUNUX1NUUl9JRCwgR1NfTE9OR19OQU1FIH0sCisJeyBHU19TRVJJQUxfU1RSX0lELCAiMCIgfSwKKwl7IEdTX0JVTEtfQ09ORklHX1NUUl9JRCwgIkdhZGdldCBTZXJpYWwgQnVsayIgfSwKKwl7IEdTX0FDTV9DT05GSUdfU1RSX0lELCAiR2FkZ2V0IFNlcmlhbCBDREMgQUNNIiB9LAorCXsgR1NfQ09OVFJPTF9TVFJfSUQsICJHYWRnZXQgU2VyaWFsIENvbnRyb2wiIH0sCisJeyBHU19EQVRBX1NUUl9JRCwgIkdhZGdldCBTZXJpYWwgRGF0YSIgfSwKKwl7ICB9IC8qIGVuZCBvZiBsaXN0ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncyBnc19zdHJpbmdfdGFibGUgPSB7CisJLmxhbmd1YWdlID0JCTB4MDQwOSwJLyogZW4tdXMgKi8KKwkuc3RyaW5ncyA9CQlnc19zdHJpbmdzLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgZ3NfZGV2aWNlX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0RFVklDRV9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFLAorCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iRGV2aWNlU3ViQ2xhc3MgPQkwLAorCS5iRGV2aWNlUHJvdG9jb2wgPQkwLAorCS5pZFZlbmRvciA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX1ZFTkRPUl9JRCksCisJLmlkUHJvZHVjdCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX1BST0RVQ1RfSUQpLAorCS5pTWFudWZhY3R1cmVyID0JR1NfTUFOVUZBQ1RVUkVSX1NUUl9JRCwKKwkuaVByb2R1Y3QgPQkJR1NfUFJPRFVDVF9TVFJfSUQsCisJLmlTZXJpYWxOdW1iZXIgPQlHU19TRVJJQUxfU1RSX0lELAorCS5iTnVtQ29uZmlndXJhdGlvbnMgPQlHU19OVU1fQ09ORklHUywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX290Z19kZXNjcmlwdG9yIGdzX290Z19kZXNjcmlwdG9yID0geworCS5iTGVuZ3RoID0JCXNpemVvZihnc19vdGdfZGVzY3JpcHRvciksCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9PVEcsCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfT1RHX1NSUCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yIGdzX2J1bGtfY29uZmlnX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0NPTkZJR19TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ09ORklHLAorCS8qIC53VG90YWxMZW5ndGggY29tcHV0ZWQgZHluYW1pY2FsbHkgKi8KKwkuYk51bUludGVyZmFjZXMgPQkxLAorCS5iQ29uZmlndXJhdGlvblZhbHVlID0JR1NfQlVMS19DT05GSUdfSUQsCisJLmlDb25maWd1cmF0aW9uID0JR1NfQlVMS19DT05GSUdfU1RSX0lELAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0NPTkZJR19BVFRfT05FIHwgVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAorCS5iTWF4UG93ZXIgPQkJMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yIGdzX2FjbV9jb25maWdfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfQ09ORklHX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DT05GSUcsCisJLyogLndUb3RhbExlbmd0aCBjb21wdXRlZCBkeW5hbWljYWxseSAqLworCS5iTnVtSW50ZXJmYWNlcyA9CTIsCisJLmJDb25maWd1cmF0aW9uVmFsdWUgPQlHU19BQ01fQ09ORklHX0lELAorCS5pQ29uZmlndXJhdGlvbiA9CUdTX0FDTV9DT05GSUdfU1RSX0lELAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0NPTkZJR19BVFRfT05FIHwgVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAorCS5iTWF4UG93ZXIgPQkJMSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIGdzX2J1bGtfaW50ZXJmYWNlX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0lOVEVSRkFDRV9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAorCS5iSW50ZXJmYWNlTnVtYmVyID0JR1NfQlVMS19JTlRFUkZBQ0VfSUQsCisJLmJOdW1FbmRwb2ludHMgPQkyLAorCS5iSW50ZXJmYWNlQ2xhc3MgPQlVU0JfQ0xBU1NfQ0RDX0RBVEEsCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9CTAsCisJLmJJbnRlcmZhY2VQcm90b2NvbCA9CTAsCisJLmlJbnRlcmZhY2UgPQkJR1NfREFUQV9TVFJfSUQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciBnc19jb250cm9sX2ludGVyZmFjZV9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9JTlRFUkZBQ0VfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0lOVEVSRkFDRSwKKwkuYkludGVyZmFjZU51bWJlciA9CUdTX0NPTlRST0xfSU5URVJGQUNFX0lELAorCS5iTnVtRW5kcG9pbnRzID0JMSwKKwkuYkludGVyZmFjZUNsYXNzID0JVVNCX0NMQVNTX0NPTU0sCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9CVVTQl9DRENfU1VCQ0xBU1NfQUNNLAorCS5iSW50ZXJmYWNlUHJvdG9jb2wgPQlVU0JfQ0RDX0FDTV9QUk9UT19BVF9WMjVURVIsCisJLmlJbnRlcmZhY2UgPQkJR1NfQ09OVFJPTF9TVFJfSUQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciBnc19kYXRhX2ludGVyZmFjZV9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9JTlRFUkZBQ0VfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0lOVEVSRkFDRSwKKwkuYkludGVyZmFjZU51bWJlciA9CUdTX0RBVEFfSU5URVJGQUNFX0lELAorCS5iTnVtRW5kcG9pbnRzID0JMiwKKwkuYkludGVyZmFjZUNsYXNzID0JVVNCX0NMQVNTX0NEQ19EQVRBLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPQkwLAorCS5iSW50ZXJmYWNlUHJvdG9jb2wgPQkwLAorCS5pSW50ZXJmYWNlID0JCUdTX0RBVEFfU1RSX0lELAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfY2RjX2hlYWRlcl9kZXNjIGdzX2hlYWRlcl9kZXNjID0geworCS5iTGVuZ3RoID0JCXNpemVvZihnc19oZWFkZXJfZGVzYyksCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCisJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCisJLmJjZENEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDExMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9jZGNfY2FsbF9tZ210X2Rlc2NyaXB0b3IgZ3NfY2FsbF9tZ210X2Rlc2NyaXB0b3IgPSB7CisJLmJMZW5ndGggPSAgCQlzaXplb2YoZ3NfY2FsbF9tZ210X2Rlc2NyaXB0b3IpLAorCS5iRGVzY3JpcHRvclR5cGUgPSAJVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlID0gCVVTQl9DRENfQ0FMTF9NQU5BR0VNRU5UX1RZUEUsCisJLmJtQ2FwYWJpbGl0aWVzID0gCTAsCisJLmJEYXRhSW50ZXJmYWNlID0gCTEsCS8qIGluZGV4IG9mIGRhdGEgaW50ZXJmYWNlICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jZGNfYWNtX2Rlc2NyaXB0b3IgZ3NfYWNtX2Rlc2NyaXB0b3IgPSB7CisJLmJMZW5ndGggPSAgCQlzaXplb2YoZ3NfYWNtX2Rlc2NyaXB0b3IpLAorCS5iRGVzY3JpcHRvclR5cGUgPSAJVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlID0gCVVTQl9DRENfQUNNX1RZUEUsCisJLmJtQ2FwYWJpbGl0aWVzID0gCTAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzYyBnc191bmlvbl9kZXNjID0geworCS5iTGVuZ3RoID0JCXNpemVvZihnc191bmlvbl9kZXNjKSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19VTklPTl9UWVBFLAorCS5iTWFzdGVySW50ZXJmYWNlMCA9CTAsCS8qIGluZGV4IG9mIGNvbnRyb2wgaW50ZXJmYWNlICovCisJLmJTbGF2ZUludGVyZmFjZTAgPQkxLAkvKiBpbmRleCBvZiBkYXRhIGludGVyZmFjZSAqLworfTsKKyAKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZ3NfZnVsbHNwZWVkX25vdGlmeV9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAorCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfTk9USUZZX01BWFBBQ0tFVCksCisJLmJJbnRlcnZhbCA9CQkxIDw8IEdTX0xPRzJfTk9USUZZX0lOVEVSVkFMLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBnc19mdWxsc3BlZWRfaW5fZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGdzX2Z1bGxzcGVlZF9vdXRfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9PVVQsCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmdzX2J1bGtfZnVsbHNwZWVkX2Z1bmN0aW9uW10gPSB7CisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX290Z19kZXNjcmlwdG9yLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19idWxrX2ludGVyZmFjZV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19mdWxsc3BlZWRfaW5fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfZnVsbHNwZWVkX291dF9kZXNjLAorCU5VTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZ3NfYWNtX2Z1bGxzcGVlZF9mdW5jdGlvbltdID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19vdGdfZGVzY3JpcHRvciwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfY29udHJvbF9pbnRlcmZhY2VfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfaGVhZGVyX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2NhbGxfbWdtdF9kZXNjcmlwdG9yLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19hY21fZGVzY3JpcHRvciwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfdW5pb25fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfZnVsbHNwZWVkX25vdGlmeV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19kYXRhX2ludGVyZmFjZV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19mdWxsc3BlZWRfaW5fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfZnVsbHNwZWVkX291dF9kZXNjLAorCU5VTEwsCit9OworCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGdzX2hpZ2hzcGVlZF9ub3RpZnlfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX05PVElGWV9NQVhQQUNLRVQpLAorCS5iSW50ZXJ2YWwgPQkJR1NfTE9HMl9OT1RJRllfSU5URVJWQUwrNCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZ3NfaGlnaHNwZWVkX2luX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBnc19oaWdoc3BlZWRfb3V0X2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IgZ3NfcXVhbGlmaWVyX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mKHN0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IpLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFX1FVQUxJRklFUiwKKwkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwMCksCisJLyogYXNzdW1lcyBlcDAgdXNlcyB0aGUgc2FtZSB2YWx1ZSBmb3IgYm90aCBzcGVlZHMgLi4uICovCisJLmJOdW1Db25maWd1cmF0aW9ucyA9CUdTX05VTV9DT05GSUdTLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmdzX2J1bGtfaGlnaHNwZWVkX2Z1bmN0aW9uW10gPSB7CisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX290Z19kZXNjcmlwdG9yLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19idWxrX2ludGVyZmFjZV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19oaWdoc3BlZWRfaW5fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfaGlnaHNwZWVkX291dF9kZXNjLAorCU5VTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZ3NfYWNtX2hpZ2hzcGVlZF9mdW5jdGlvbltdID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19vdGdfZGVzY3JpcHRvciwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfY29udHJvbF9pbnRlcmZhY2VfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfaGVhZGVyX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2NhbGxfbWdtdF9kZXNjcmlwdG9yLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19hY21fZGVzY3JpcHRvciwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfdW5pb25fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfaGlnaHNwZWVkX25vdGlmeV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19kYXRhX2ludGVyZmFjZV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19oaWdoc3BlZWRfaW5fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfaGlnaHNwZWVkX291dF9kZXNjLAorCU5VTEwsCit9OworCisjZW5kaWYgLyogQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEICovCisKKworLyogTW9kdWxlICovCitNT0RVTEVfREVTQ1JJUFRJT04oR1NfTE9OR19OQU1FKTsKK01PRFVMRV9BVVRIT1IoIkFsIEJvcmNoZXJzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNpZmRlZiBHU19ERUJVRworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIFNfSVJVR098U19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIGRlYnVnZ2luZywgMD1vZmYsIDE9b24iKTsKKyNlbmRpZgorCittb2R1bGVfcGFyYW0ocmVhZF9xX3NpemUsIHVpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhyZWFkX3Ffc2l6ZSwgIlJlYWQgcmVxdWVzdCBxdWV1ZSBzaXplLCBkZWZhdWx0PTMyIik7CisKK21vZHVsZV9wYXJhbSh3cml0ZV9xX3NpemUsIHVpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyh3cml0ZV9xX3NpemUsICJXcml0ZSByZXF1ZXN0IHF1ZXVlIHNpemUsIGRlZmF1bHQ9MzIiKTsKKworbW9kdWxlX3BhcmFtKHdyaXRlX2J1Zl9zaXplLCB1aW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0Mod3JpdGVfYnVmX3NpemUsICJXcml0ZSBidWZmZXIgc2l6ZSwgZGVmYXVsdD04MTkyIik7CisKK21vZHVsZV9wYXJhbSh1c2VfYWNtLCB1aW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0ModXNlX2FjbSwgIlVzZSBDREMgQUNNLCAwPW5vLCAxPXllcywgZGVmYXVsdD1ubyIpOworCittb2R1bGVfaW5pdChnc19tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChnc19tb2R1bGVfZXhpdCk7CisKKy8qCisqICBnc19tb2R1bGVfaW5pdAorKgorKiAgUmVnaXN0ZXIgYXMgYSBVU0IgZ2FkZ2V0IGRyaXZlciBhbmQgYSB0dHkgZHJpdmVyLgorKi8KK3N0YXRpYyBpbnQgX19pbml0IGdzX21vZHVsZV9pbml0KHZvaWQpCit7CisJaW50IGk7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKCZnc19nYWRnZXRfZHJpdmVyKTsKKwlpZiAocmV0dmFsKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3NfbW9kdWxlX2luaXQ6IGNhbm5vdCByZWdpc3RlciBnYWRnZXQgZHJpdmVyLCByZXQ9JWRcbiIsIHJldHZhbCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJZ3NfdHR5X2RyaXZlciA9IGFsbG9jX3R0eV9kcml2ZXIoR1NfTlVNX1BPUlRTKTsKKwlpZiAoIWdzX3R0eV9kcml2ZXIpCisJCXJldHVybiAtRU5PTUVNOworCWdzX3R0eV9kcml2ZXItPm93bmVyID0gVEhJU19NT0RVTEU7CisJZ3NfdHR5X2RyaXZlci0+ZHJpdmVyX25hbWUgPSBHU19TSE9SVF9OQU1FOworCWdzX3R0eV9kcml2ZXItPm5hbWUgPSAidHR5Z3MiOworCWdzX3R0eV9kcml2ZXItPmRldmZzX25hbWUgPSAidXNiL3R0eWdzLyI7CisJZ3NfdHR5X2RyaXZlci0+bWFqb3IgPSBHU19NQUpPUjsKKwlnc190dHlfZHJpdmVyLT5taW5vcl9zdGFydCA9IEdTX01JTk9SX1NUQVJUOworCWdzX3R0eV9kcml2ZXItPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOworCWdzX3R0eV9kcml2ZXItPnN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUw7CisJZ3NfdHR5X2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9OT19ERVZGUzsKKwlnc190dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MgPSB0dHlfc3RkX3Rlcm1pb3M7CisJZ3NfdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcgPSBCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7CisJdHR5X3NldF9vcGVyYXRpb25zKGdzX3R0eV9kcml2ZXIsICZnc190dHlfb3BzKTsKKworCWZvciAoaT0wOyBpIDwgR1NfTlVNX1BPUlRTOyBpKyspCisJCXNlbWFfaW5pdCgmZ3Nfb3Blbl9jbG9zZV9zZW1baV0sIDEpOworCisJcmV0dmFsID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihnc190dHlfZHJpdmVyKTsKKwlpZiAocmV0dmFsKSB7CisJCXVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoJmdzX2dhZGdldF9kcml2ZXIpOworCQlwdXRfdHR5X2RyaXZlcihnc190dHlfZHJpdmVyKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19tb2R1bGVfaW5pdDogY2Fubm90IHJlZ2lzdGVyIHR0eSBkcml2ZXIsIHJldD0lZFxuIiwgcmV0dmFsKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJnc19tb2R1bGVfaW5pdDogJXMgJXMgbG9hZGVkXG4iLCBHU19MT05HX05BTUUsIEdTX1ZFUlNJT05fU1RSKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyogZ3NfbW9kdWxlX2V4aXQKKyoKKyogVW5yZWdpc3RlciBhcyBhIHR0eSBkcml2ZXIgYW5kIGEgVVNCIGdhZGdldCBkcml2ZXIuCisqLworc3RhdGljIHZvaWQgX19leGl0IGdzX21vZHVsZV9leGl0KHZvaWQpCit7CisJdHR5X3VucmVnaXN0ZXJfZHJpdmVyKGdzX3R0eV9kcml2ZXIpOworCXB1dF90dHlfZHJpdmVyKGdzX3R0eV9kcml2ZXIpOworCXVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoJmdzX2dhZGdldF9kcml2ZXIpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiZ3NfbW9kdWxlX2V4aXQ6ICVzICVzIHVubG9hZGVkXG4iLCBHU19MT05HX05BTUUsIEdTX1ZFUlNJT05fU1RSKTsKK30KKworLyogVFRZIERyaXZlciAqLworCisvKgorICogZ3Nfb3BlbgorICovCitzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IHBvcnRfbnVtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGdzX3BvcnQgKnBvcnQ7CisJc3RydWN0IGdzX2RldiAqZGV2OworCXN0cnVjdCBnc19idWYgKmJ1ZjsKKwlzdHJ1Y3Qgc2VtYXBob3JlICpzZW07CisJaW50IHJldDsKKworCXBvcnRfbnVtID0gdHR5LT5pbmRleDsKKworCWdzX2RlYnVnKCJnc19vcGVuOiAoJWQsJXAsJXApXG4iLCBwb3J0X251bSwgdHR5LCBmaWxlKTsKKworCWlmIChwb3J0X251bSA8IDAgfHwgcG9ydF9udW0gPj0gR1NfTlVNX1BPUlRTKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3Nfb3BlbjogKCVkLCVwLCVwKSBpbnZhbGlkIHBvcnQgbnVtYmVyXG4iLAorCQkJcG9ydF9udW0sIHR0eSwgZmlsZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRldiA9IGdzX2RldmljZTsKKworCWlmIChkZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX29wZW46ICglZCwlcCwlcCkgTlVMTCBkZXZpY2UgcG9pbnRlclxuIiwKKwkJCXBvcnRfbnVtLCB0dHksIGZpbGUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzZW0gPSAmZ3Nfb3Blbl9jbG9zZV9zZW1bcG9ydF9udW1dOworCWlmIChkb3duX2ludGVycnVwdGlibGUoc2VtKSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJImdzX29wZW46ICglZCwlcCwlcCkgaW50ZXJydXB0ZWQgd2FpdGluZyBmb3Igc2VtYXBob3JlXG4iLAorCQkJcG9ydF9udW0sIHR0eSwgZmlsZSk7CisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZGV2X2xvY2ssIGZsYWdzKTsKKworCWlmIChkZXYtPmRldl9jb25maWcgPT0gR1NfTk9fQ09ORklHX0lEKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImdzX29wZW46ICglZCwlcCwlcCkgZGV2aWNlIGlzIG5vdCBjb25uZWN0ZWRcbiIsCisJCQlwb3J0X251bSwgdHR5LCBmaWxlKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBleGl0X3VubG9ja19kZXY7CisJfQorCisJcG9ydCA9IGRldi0+ZGV2X3BvcnRbcG9ydF9udW1dOworCisJaWYgKHBvcnQgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX29wZW46ICglZCwlcCwlcCkgTlVMTCBwb3J0IHBvaW50ZXJcbiIsCisJCQlwb3J0X251bSwgdHR5LCBmaWxlKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBleGl0X3VubG9ja19kZXY7CisJfQorCisJc3Bpbl9sb2NrKCZwb3J0LT5wb3J0X2xvY2spOworCXNwaW5fdW5sb2NrKCZkZXYtPmRldl9sb2NrKTsKKworCWlmIChwb3J0LT5wb3J0X2RldiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3Nfb3BlbjogKCVkLCVwLCVwKSBwb3J0IGRpc2Nvbm5lY3RlZCAoMSlcbiIsCisJCQlwb3J0X251bSwgdHR5LCBmaWxlKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBleGl0X3VubG9ja19wb3J0OworCX0KKworCWlmIChwb3J0LT5wb3J0X29wZW5fY291bnQgPiAwKSB7CisJCSsrcG9ydC0+cG9ydF9vcGVuX2NvdW50OworCQlnc19kZWJ1ZygiZ3Nfb3BlbjogKCVkLCVwLCVwKSBhbHJlYWR5IG9wZW5cbiIsCisJCQlwb3J0X251bSwgdHR5LCBmaWxlKTsKKwkJcmV0ID0gMDsKKwkJZ290byBleGl0X3VubG9ja19wb3J0OworCX0KKworCXR0eS0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCisJLyogbWFyayBwb3J0IGFzIGluIHVzZSwgd2UgY2FuIGRyb3AgcG9ydCBsb2NrIGFuZCBzbGVlcCBpZiBuZWNlc3NhcnkgKi8KKwlwb3J0LT5wb3J0X2luX3VzZSA9IDE7CisKKwkvKiBhbGxvY2F0ZSB3cml0ZSBidWZmZXIgb24gZmlyc3Qgb3BlbiAqLworCWlmIChwb3J0LT5wb3J0X3dyaXRlX2J1ZiA9PSBOVUxMKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCQlidWYgPSBnc19idWZfYWxsb2Mod3JpdGVfYnVmX3NpemUsIEdGUF9LRVJORUwpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7CisKKwkJLyogbWlnaHQgaGF2ZSBiZWVuIGRpc2Nvbm5lY3RlZCB3aGlsZSBhc2xlZXAsIGNoZWNrICovCisJCWlmIChwb3J0LT5wb3J0X2RldiA9PSBOVUxMKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiZ3Nfb3BlbjogKCVkLCVwLCVwKSBwb3J0IGRpc2Nvbm5lY3RlZCAoMilcbiIsCisJCQkJcG9ydF9udW0sIHR0eSwgZmlsZSk7CisJCQlwb3J0LT5wb3J0X2luX3VzZSA9IDA7CisJCQlyZXQgPSAtRUlPOworCQkJZ290byBleGl0X3VubG9ja19wb3J0OworCQl9CisKKwkJaWYgKChwb3J0LT5wb3J0X3dyaXRlX2J1Zj1idWYpID09IE5VTEwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZ3Nfb3BlbjogKCVkLCVwLCVwKSBjYW5ub3QgYWxsb2NhdGUgcG9ydCB3cml0ZSBidWZmZXJcbiIsCisJCQkJcG9ydF9udW0sIHR0eSwgZmlsZSk7CisJCQlwb3J0LT5wb3J0X2luX3VzZSA9IDA7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBleGl0X3VubG9ja19wb3J0OworCQl9CisKKwl9CisKKwkvKiB3YWl0IGZvciBjYXJyaWVyIGRldGVjdCAobm90IGltcGxlbWVudGVkKSAqLworCisJLyogbWlnaHQgaGF2ZSBiZWVuIGRpc2Nvbm5lY3RlZCB3aGlsZSBhc2xlZXAsIGNoZWNrICovCisJaWYgKHBvcnQtPnBvcnRfZGV2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19vcGVuOiAoJWQsJXAsJXApIHBvcnQgZGlzY29ubmVjdGVkICgzKVxuIiwKKwkJCXBvcnRfbnVtLCB0dHksIGZpbGUpOworCQlwb3J0LT5wb3J0X2luX3VzZSA9IDA7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXhpdF91bmxvY2tfcG9ydDsKKwl9CisKKwl0dHktPmRyaXZlcl9kYXRhID0gcG9ydDsKKwlwb3J0LT5wb3J0X3R0eSA9IHR0eTsKKwlwb3J0LT5wb3J0X29wZW5fY291bnQgPSAxOworCXBvcnQtPnBvcnRfaW5fdXNlID0gMDsKKworCWdzX2RlYnVnKCJnc19vcGVuOiAoJWQsJXAsJXApIGNvbXBsZXRlZFxuIiwgcG9ydF9udW0sIHR0eSwgZmlsZSk7CisKKwlyZXQgPSAwOworCitleGl0X3VubG9ja19wb3J0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCXVwKHNlbSk7CisJcmV0dXJuIHJldDsKKworZXhpdF91bmxvY2tfZGV2OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZGV2X2xvY2ssIGZsYWdzKTsKKwl1cChzZW0pOworCXJldHVybiByZXQ7CisKK30KKworLyoKKyAqIGdzX2Nsb3NlCisgKi8KK3N0YXRpYyB2b2lkIGdzX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGdzX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBzZW1hcGhvcmUgKnNlbTsKKworCWlmIChwb3J0ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19jbG9zZTogTlVMTCBwb3J0IHBvaW50ZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJZ3NfZGVidWcoImdzX2Nsb3NlOiAoJWQsJXAsJXApXG4iLCBwb3J0LT5wb3J0X251bSwgdHR5LCBmaWxlKTsKKworCXNlbSA9ICZnc19vcGVuX2Nsb3NlX3NlbVtwb3J0LT5wb3J0X251bV07CisJZG93bihzZW0pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCisJaWYgKHBvcnQtPnBvcnRfb3Blbl9jb3VudCA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImdzX2Nsb3NlOiAoJWQsJXAsJXApIHBvcnQgaXMgYWxyZWFkeSBjbG9zZWRcbiIsCisJCQlwb3J0LT5wb3J0X251bSwgdHR5LCBmaWxlKTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChwb3J0LT5wb3J0X29wZW5fY291bnQgPiAxKSB7CisJCS0tcG9ydC0+cG9ydF9vcGVuX2NvdW50OworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogZnJlZSBkaXNjb25uZWN0ZWQgcG9ydCBvbiBmaW5hbCBjbG9zZSAqLworCWlmIChwb3J0LT5wb3J0X2RldiA9PSBOVUxMKSB7CisJCWtmcmVlKHBvcnQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogbWFyayBwb3J0IGFzIGNsb3NlZCBidXQgaW4gdXNlLCB3ZSBjYW4gZHJvcCBwb3J0IGxvY2sgKi8KKwkvKiBhbmQgc2xlZXAgaWYgbmVjZXNzYXJ5ICovCisJcG9ydC0+cG9ydF9pbl91c2UgPSAxOworCXBvcnQtPnBvcnRfb3Blbl9jb3VudCA9IDA7CisKKwkvKiB3YWl0IGZvciB3cml0ZSBidWZmZXIgdG8gZHJhaW4sIG9yICovCisJLyogYXQgbW9zdCBHU19DTE9TRV9USU1FT1VUIHNlY29uZHMgKi8KKwlpZiAoZ3NfYnVmX2RhdGFfYXZhaWwocG9ydC0+cG9ydF93cml0ZV9idWYpID4gMCkgeworCQl3YWl0X2NvbmRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHBvcnQtPnBvcnRfd3JpdGVfd2FpdCwKKwkJcG9ydC0+cG9ydF9kZXYgPT0gTlVMTAorCQl8fCBnc19idWZfZGF0YV9hdmFpbChwb3J0LT5wb3J0X3dyaXRlX2J1ZikgPT0gMCwKKwkJJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MsIEdTX0NMT1NFX1RJTUVPVVQgKiBIWik7CisJfQorCisJLyogZnJlZSBkaXNjb25uZWN0ZWQgcG9ydCBvbiBmaW5hbCBjbG9zZSAqLworCS8qIChtaWdodCBoYXZlIGhhcHBlbmVkIGR1cmluZyB0aGUgYWJvdmUgc2xlZXApICovCisJaWYgKHBvcnQtPnBvcnRfZGV2ID09IE5VTEwpIHsKKwkJa2ZyZWUocG9ydCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlnc19idWZfY2xlYXIocG9ydC0+cG9ydF93cml0ZV9idWYpOworCisJdHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7CisJcG9ydC0+cG9ydF90dHkgPSBOVUxMOworCXBvcnQtPnBvcnRfaW5fdXNlID0gMDsKKworCWdzX2RlYnVnKCJnc19jbG9zZTogKCVkLCVwLCVwKSBjb21wbGV0ZWRcbiIsCisJCXBvcnQtPnBvcnRfbnVtLCB0dHksIGZpbGUpOworCitleGl0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCXVwKHNlbSk7Cit9CisKKy8qCisgKiBnc193cml0ZQorICovCitzdGF0aWMgaW50IGdzX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGdzX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCWludCByZXQ7CisKKwlpZiAocG9ydCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3Nfd3JpdGU6IE5VTEwgcG9ydCBwb2ludGVyXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZ3NfZGVidWcoImdzX3dyaXRlOiAoJWQsJXApIHdyaXRpbmcgJWQgYnl0ZXNcbiIsIHBvcnQtPnBvcnRfbnVtLCB0dHksCisJCWNvdW50KTsKKworCWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKKworCWlmIChwb3J0LT5wb3J0X2RldiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3Nfd3JpdGU6ICglZCwlcCkgcG9ydCBpcyBub3QgY29ubmVjdGVkXG4iLAorCQkJcG9ydC0+cG9ydF9udW0sIHR0eSk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAocG9ydC0+cG9ydF9vcGVuX2NvdW50ID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc193cml0ZTogKCVkLCVwKSBwb3J0IGlzIGNsb3NlZFxuIiwKKwkJCXBvcnQtPnBvcnRfbnVtLCB0dHkpOworCQlyZXQgPSAtRUJBREY7CisJCWdvdG8gZXhpdDsKKwl9CisKKwljb3VudCA9IGdzX2J1Zl9wdXQocG9ydC0+cG9ydF93cml0ZV9idWYsIGJ1ZiwgY291bnQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7CisKKwlnc19zZW5kKGdzX2RldmljZSk7CisKKwlnc19kZWJ1ZygiZ3Nfd3JpdGU6ICglZCwlcCkgd3JvdGUgJWQgYnl0ZXNcbiIsIHBvcnQtPnBvcnRfbnVtLCB0dHksCisJCWNvdW50KTsKKworCXJldHVybiBjb3VudDsKKworZXhpdDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogZ3NfcHV0X2NoYXIKKyAqLworc3RhdGljIHZvaWQgZ3NfcHV0X2NoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciBjaCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBnc19wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKworCWlmIChwb3J0ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19wdXRfY2hhcjogTlVMTCBwb3J0IHBvaW50ZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJZ3NfZGVidWcoImdzX3B1dF9jaGFyOiAoJWQsJXApIGNoYXI9MHgleCwgY2FsbGVkIGZyb20gJXAsICVwLCAlcFxuIiwgcG9ydC0+cG9ydF9udW0sIHR0eSwgY2gsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDEpLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMikpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCisJaWYgKHBvcnQtPnBvcnRfZGV2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19wdXRfY2hhcjogKCVkLCVwKSBwb3J0IGlzIG5vdCBjb25uZWN0ZWRcbiIsCisJCQlwb3J0LT5wb3J0X251bSwgdHR5KTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChwb3J0LT5wb3J0X29wZW5fY291bnQgPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX3B1dF9jaGFyOiAoJWQsJXApIHBvcnQgaXMgY2xvc2VkXG4iLAorCQkJcG9ydC0+cG9ydF9udW0sIHR0eSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlnc19idWZfcHV0KHBvcnQtPnBvcnRfd3JpdGVfYnVmLCAmY2gsIDEpOworCitleGl0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogZ3NfZmx1c2hfY2hhcnMKKyAqLworc3RhdGljIHZvaWQgZ3NfZmx1c2hfY2hhcnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBnc19wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKworCWlmIChwb3J0ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19mbHVzaF9jaGFyczogTlVMTCBwb3J0IHBvaW50ZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJZ3NfZGVidWcoImdzX2ZsdXNoX2NoYXJzOiAoJWQsJXApXG4iLCBwb3J0LT5wb3J0X251bSwgdHR5KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKKworCWlmIChwb3J0LT5wb3J0X2RldiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImdzX2ZsdXNoX2NoYXJzOiAoJWQsJXApIHBvcnQgaXMgbm90IGNvbm5lY3RlZFxuIiwKKwkJCXBvcnQtPnBvcnRfbnVtLCB0dHkpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHBvcnQtPnBvcnRfb3Blbl9jb3VudCA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3NfZmx1c2hfY2hhcnM6ICglZCwlcCkgcG9ydCBpcyBjbG9zZWRcbiIsCisJCQlwb3J0LT5wb3J0X251bSwgdHR5KTsKKwkJZ290byBleGl0OworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCisJZ3Nfc2VuZChnc19kZXZpY2UpOworCisJcmV0dXJuOworCitleGl0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogZ3Nfd3JpdGVfcm9vbQorICovCitzdGF0aWMgaW50IGdzX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKworCWludCByb29tID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBnc19wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKworCisJaWYgKHBvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7CisKKwlpZiAocG9ydC0+cG9ydF9kZXYgIT0gTlVMTCAmJiBwb3J0LT5wb3J0X29wZW5fY291bnQgPiAwCisJJiYgcG9ydC0+cG9ydF93cml0ZV9idWYgIT0gTlVMTCkKKwkJcm9vbSA9IGdzX2J1Zl9zcGFjZV9hdmFpbChwb3J0LT5wb3J0X3dyaXRlX2J1Zik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKKworCWdzX2RlYnVnKCJnc193cml0ZV9yb29tOiAoJWQsJXApIHJvb209JWRcbiIsCisJCXBvcnQtPnBvcnRfbnVtLCB0dHksIHJvb20pOworCisJcmV0dXJuIHJvb207Cit9CisKKy8qCisgKiBnc19jaGFyc19pbl9idWZmZXIKKyAqLworc3RhdGljIGludCBnc19jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlpbnQgY2hhcnMgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGdzX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCisJaWYgKHBvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7CisKKwlpZiAocG9ydC0+cG9ydF9kZXYgIT0gTlVMTCAmJiBwb3J0LT5wb3J0X29wZW5fY291bnQgPiAwCisJJiYgcG9ydC0+cG9ydF93cml0ZV9idWYgIT0gTlVMTCkKKwkJY2hhcnMgPSBnc19idWZfZGF0YV9hdmFpbChwb3J0LT5wb3J0X3dyaXRlX2J1Zik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKKworCWdzX2RlYnVnKCJnc19jaGFyc19pbl9idWZmZXI6ICglZCwlcCkgY2hhcnM9JWRcbiIsCisJCXBvcnQtPnBvcnRfbnVtLCB0dHksIGNoYXJzKTsKKworCXJldHVybiBjaGFyczsKK30KKworLyoKKyAqIGdzX3Rocm90dGxlCisgKi8KK3N0YXRpYyB2b2lkIGdzX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7Cit9CisKKy8qCisgKiBnc191bnRocm90dGxlCisgKi8KK3N0YXRpYyB2b2lkIGdzX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKK30KKworLyoKKyAqIGdzX2JyZWFrCisgKi8KK3N0YXRpYyB2b2lkIGdzX2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKK3sKK30KKworLyoKKyAqIGdzX2lvY3RsCisgKi8KK3N0YXRpYyBpbnQgZ3NfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBnc19wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKworCWlmIChwb3J0ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19pb2N0bDogTlVMTCBwb3J0IHBvaW50ZXJcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlnc19kZWJ1ZygiZ3NfaW9jdGw6ICglZCwlcCwlcCkgY21kPTB4JTQuNHgsIGFyZz0lbHVcbiIsCisJCXBvcnQtPnBvcnRfbnVtLCB0dHksIGZpbGUsIGNtZCwgYXJnKTsKKworCS8qIGhhbmRsZSBpb2N0bHMgKi8KKworCS8qIGNvdWxkIG5vdCBoYW5kbGUgaW9jdGwgKi8KKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCisvKgorICogZ3Nfc2V0X3Rlcm1pb3MKKyAqLworc3RhdGljIHZvaWQgZ3Nfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKm9sZCkKK3sKK30KKworLyoKKyogZ3Nfc2VuZAorKgorKiBUaGlzIGZ1bmN0aW9uIGZpbmRzIGF2YWlsYWJsZSB3cml0ZSByZXF1ZXN0cywgY2FsbHMKKyogZ3Nfc2VuZF9wYWNrZXQgdG8gZmlsbCB0aGVzZSBwYWNrZXRzIHdpdGggZGF0YSwgYW5kCisqIGNvbnRpbnVlcyB1bnRpbCBlaXRoZXIgdGhlcmUgYXJlIG5vIG1vcmUgd3JpdGUgcmVxdWVzdHMKKyogYXZhaWxhYmxlIG9yIG5vIG1vcmUgZGF0YSB0byBzZW5kLiAgVGhpcyBmdW5jdGlvbiBpcworKiBydW4gd2hlbmV2ZXIgZGF0YSBhcnJpdmVzIG9yIHdyaXRlIHJlcXVlc3RzIGFyZSBhdmFpbGFibGUuCisqLworc3RhdGljIGludCBnc19zZW5kKHN0cnVjdCBnc19kZXYgKmRldikKK3sKKwlpbnQgcmV0LGxlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB1c2JfZXAgKmVwOworCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxOworCXN0cnVjdCBnc19yZXFfZW50cnkgKnJlcV9lbnRyeTsKKworCWlmIChkZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX3NlbmQ6IE5VTEwgZGV2aWNlIHBvaW50ZXJcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5kZXZfbG9jaywgZmxhZ3MpOworCisJZXAgPSBkZXYtPmRldl9pbl9lcDsKKworCXdoaWxlKCFsaXN0X2VtcHR5KCZkZXYtPmRldl9yZXFfbGlzdCkpIHsKKworCQlyZXFfZW50cnkgPSBsaXN0X2VudHJ5KGRldi0+ZGV2X3JlcV9saXN0Lm5leHQsCisJCQlzdHJ1Y3QgZ3NfcmVxX2VudHJ5LCByZV9lbnRyeSk7CisKKwkJcmVxID0gcmVxX2VudHJ5LT5yZV9yZXE7CisKKwkJbGVuID0gZ3Nfc2VuZF9wYWNrZXQoZGV2LCByZXEtPmJ1ZiwgZXAtPm1heHBhY2tldCk7CisKKwkJaWYgKGxlbiA+IDApIHsKK2dzX2RlYnVnX2xldmVsKDMsICJnc19zZW5kOiBsZW49JWQsIDB4JTIuMnggMHglMi4yeCAweCUyLjJ4IC4uLlxuIiwgbGVuLCAqKCh1bnNpZ25lZCBjaGFyICopcmVxLT5idWYpLCAqKCh1bnNpZ25lZCBjaGFyICopcmVxLT5idWYrMSksICooKHVuc2lnbmVkIGNoYXIgKilyZXEtPmJ1ZisyKSk7CisJCQlsaXN0X2RlbCgmcmVxX2VudHJ5LT5yZV9lbnRyeSk7CisJCQlyZXEtPmxlbmd0aCA9IGxlbjsKKwkJCWlmICgocmV0PXVzYl9lcF9xdWV1ZShlcCwgcmVxLCBHRlBfQVRPTUlDKSkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiZ3Nfc2VuZDogY2Fubm90IHF1ZXVlIHJlYWQgcmVxdWVzdCwgcmV0PSVkXG4iLAorCQkJCQlyZXQpOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJYnJlYWs7CisJCX0KKworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZGV2X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKgorICogZ3Nfc2VuZF9wYWNrZXQKKyAqCisgKiBJZiB0aGVyZSBpcyBkYXRhIHRvIHNlbmQsIGEgcGFja2V0IGlzIGJ1aWx0IGluIHRoZSBnaXZlbgorICogYnVmZmVyIGFuZCB0aGUgc2l6ZSBpcyByZXR1cm5lZC4gIElmIHRoZXJlIGlzIG5vIGRhdGEgdG8KKyAqIHNlbmQsIDAgaXMgcmV0dXJuZWQuICBJZiB0aGVyZSBpcyBhbnkgZXJyb3IgYSBuZWdhdGl2ZQorICogZXJyb3IgbnVtYmVyIGlzIHJldHVybmVkLgorICoKKyAqIENhbGxlZCBkdXJpbmcgVVNCIGNvbXBsZXRpb24gcm91dGluZSwgb24gaW50ZXJydXB0IHRpbWUuCisgKgorICogV2UgYXNzdW1lIHRoYXQgZGlzY29ubmVjdCB3aWxsIG5vdCBoYXBwZW4gdW50aWwgYWxsIGNvbXBsZXRpb24KKyAqIHJvdXRpbmVzIGhhdmUgY29tcGxldGVkLCBzbyB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhlIGRldl9wb3J0CisgKiBhcnJheSBkb2VzIG5vdCBjaGFuZ2UgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGlzIGZ1bmN0aW9uLgorICovCitzdGF0aWMgaW50IGdzX3NlbmRfcGFja2V0KHN0cnVjdCBnc19kZXYgKmRldiwgY2hhciAqcGFja2V0LCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgbGVuOworCXN0cnVjdCBnc19wb3J0ICpwb3J0OworCisJLyogVEVNUE9SQVJZIC0tIG9ubHkgcG9ydCAwIGlzIHN1cHBvcnRlZCByaWdodCBub3cgKi8KKwlwb3J0ID0gZGV2LT5kZXZfcG9ydFswXTsKKworCWlmIChwb3J0ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiZ3Nfc2VuZF9wYWNrZXQ6IHBvcnQ9JWQsIE5VTEwgcG9ydCBwb2ludGVyXG4iLAorCQkJMCk7CisJCXJldHVybiAtRUlPOworCX0KKworCXNwaW5fbG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKKworCWxlbiA9IGdzX2J1Zl9kYXRhX2F2YWlsKHBvcnQtPnBvcnRfd3JpdGVfYnVmKTsKKwlpZiAobGVuIDwgc2l6ZSkKKwkJc2l6ZSA9IGxlbjsKKworCWlmIChzaXplID09IDApCisJCWdvdG8gZXhpdDsKKworCXNpemUgPSBnc19idWZfZ2V0KHBvcnQtPnBvcnRfd3JpdGVfYnVmLCBwYWNrZXQsIHNpemUpOworCisJaWYgKHBvcnQtPnBvcnRfdHR5KQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPnBvcnRfdHR5LT53cml0ZV93YWl0KTsKKworZXhpdDoKKwlzcGluX3VubG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworLyoKKyAqIGdzX3JlY3ZfcGFja2V0CisgKgorICogQ2FsbGVkIGZvciBlYWNoIFVTQiBwYWNrZXQgcmVjZWl2ZWQuICBSZWFkcyB0aGUgcGFja2V0CisgKiBoZWFkZXIgYW5kIHN0dWZmcyB0aGUgZGF0YSBpbiB0aGUgYXBwcm9wcmlhdGUgdHR5IGJ1ZmZlci4KKyAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBvciBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KKyAqCisgKiBDYWxsZWQgZHVyaW5nIFVTQiBjb21wbGV0aW9uIHJvdXRpbmUsIG9uIGludGVycnVwdCB0aW1lLgorICoKKyAqIFdlIGFzc3VtZSB0aGF0IGRpc2Nvbm5lY3Qgd2lsbCBub3QgaGFwcGVuIHVudGlsIGFsbCBjb21wbGV0aW9uCisgKiByb3V0aW5lcyBoYXZlIGNvbXBsZXRlZCwgc28gd2UgY2FuIGFzc3VtZSB0aGF0IHRoZSBkZXZfcG9ydAorICogYXJyYXkgZG9lcyBub3QgY2hhbmdlIGR1cmluZyB0aGUgbGlmZXRpbWUgb2YgdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdGljIGludCBnc19yZWN2X3BhY2tldChzdHJ1Y3QgZ3NfZGV2ICpkZXYsIGNoYXIgKnBhY2tldCwgdW5zaWduZWQgaW50IHNpemUpCit7CisJdW5zaWduZWQgaW50IGxlbjsKKwlzdHJ1Y3QgZ3NfcG9ydCAqcG9ydDsKKwlpbnQgcmV0OworCisJLyogVEVNUE9SQVJZIC0tIG9ubHkgcG9ydCAwIGlzIHN1cHBvcnRlZCByaWdodCBub3cgKi8KKwlwb3J0ID0gZGV2LT5kZXZfcG9ydFswXTsKKworCWlmIChwb3J0ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19yZWN2X3BhY2tldDogcG9ydD0lZCwgTlVMTCBwb3J0IHBvaW50ZXJcbiIsCisJCQlwb3J0LT5wb3J0X251bSk7CisJCXJldHVybiAtRUlPOworCX0KKworCXNwaW5fbG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKKworCWlmIChwb3J0LT5wb3J0X29wZW5fY291bnQgPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX3JlY3ZfcGFja2V0OiBwb3J0PSVkLCBwb3J0IGlzIGNsb3NlZFxuIiwKKwkJCXBvcnQtPnBvcnRfbnVtKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBleGl0OworCX0KKworCWlmIChwb3J0LT5wb3J0X3R0eSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3NfcmVjdl9wYWNrZXQ6IHBvcnQ9JWQsIE5VTEwgdHR5IHBvaW50ZXJcbiIsCisJCQlwb3J0LT5wb3J0X251bSk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAocG9ydC0+cG9ydF90dHktPm1hZ2ljICE9IFRUWV9NQUdJQykgeworCQlwcmludGsoS0VSTl9FUlIgImdzX3JlY3ZfcGFja2V0OiBwb3J0PSVkLCBiYWQgdHR5IG1hZ2ljXG4iLAorCQkJcG9ydC0+cG9ydF9udW0pOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGV4aXQ7CisJfQorCisJbGVuID0gKHVuc2lnbmVkIGludCkoVFRZX0ZMSVBCVUZfU0laRSAtIHBvcnQtPnBvcnRfdHR5LT5mbGlwLmNvdW50KTsKKwlpZiAobGVuIDwgc2l6ZSkKKwkJc2l6ZSA9IGxlbjsKKworCWlmIChzaXplID4gMCkgeworCQltZW1jcHkocG9ydC0+cG9ydF90dHktPmZsaXAuY2hhcl9idWZfcHRyLCBwYWNrZXQsIHNpemUpOworCQlwb3J0LT5wb3J0X3R0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIgKz0gc2l6ZTsKKwkJcG9ydC0+cG9ydF90dHktPmZsaXAuY291bnQgKz0gc2l6ZTsKKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2gocG9ydC0+cG9ydF90dHkpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPnBvcnRfdHR5LT5yZWFkX3dhaXQpOworCX0KKworCXJldCA9IDA7CisKK2V4aXQ6CisJc3Bpbl91bmxvY2soJnBvcnQtPnBvcnRfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyogZ3NfcmVhZF9jb21wbGV0ZQorKi8KK3N0YXRpYyB2b2lkIGdzX3JlYWRfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCWludCByZXQ7CisJc3RydWN0IGdzX2RldiAqZGV2ID0gZXAtPmRyaXZlcl9kYXRhOworCisJaWYgKGRldiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3NfcmVhZF9jb21wbGV0ZTogTlVMTCBkZXZpY2UgcG9pbnRlclxuIik7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2gocmVxLT5zdGF0dXMpIHsKKwljYXNlIDA6CisgCQkvKiBub3JtYWwgY29tcGxldGlvbiAqLworCQlnc19yZWN2X3BhY2tldChkZXYsIHJlcS0+YnVmLCByZXEtPmFjdHVhbCk7CityZXF1ZXVlOgorCQlyZXEtPmxlbmd0aCA9IGVwLT5tYXhwYWNrZXQ7CisJCWlmICgocmV0PXVzYl9lcF9xdWV1ZShlcCwgcmVxLCBHRlBfQVRPTUlDKSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJImdzX3JlYWRfY29tcGxldGU6IGNhbm5vdCBxdWV1ZSByZWFkIHJlcXVlc3QsIHJldD0lZFxuIiwKKwkJCQlyZXQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiBkaXNjb25uZWN0ICovCisJCWdzX2RlYnVnKCJnc19yZWFkX2NvbXBsZXRlOiBzaHV0ZG93blxuIik7CisJCWdzX2ZyZWVfcmVxKGVwLCByZXEpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qIHVuZXhwZWN0ZWQgKi8KKwkJcHJpbnRrKEtFUk5fRVJSCisJCSJnc19yZWFkX2NvbXBsZXRlOiB1bmV4cGVjdGVkIHN0YXR1cyBlcnJvciwgc3RhdHVzPSVkXG4iLAorCQkJcmVxLT5zdGF0dXMpOworCQlnb3RvIHJlcXVldWU7CisJCWJyZWFrOworCX0KK30KKworLyoKKyogZ3Nfd3JpdGVfY29tcGxldGUKKyovCitzdGF0aWMgdm9pZCBnc193cml0ZV9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGdzX2RldiAqZGV2ID0gZXAtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBnc19yZXFfZW50cnkgKmdzX3JlcSA9IHJlcS0+Y29udGV4dDsKKworCWlmIChkZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX3dyaXRlX2NvbXBsZXRlOiBOVUxMIGRldmljZSBwb2ludGVyXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaChyZXEtPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogbm9ybWFsIGNvbXBsZXRpb24gKi8KK3JlcXVldWU6CisJCWlmIChnc19yZXEgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJImdzX3dyaXRlX2NvbXBsZXRlOiBOVUxMIHJlcXVlc3QgcG9pbnRlclxuIik7CisJCQlyZXR1cm47CisJCX0KKworCQlzcGluX2xvY2soJmRldi0+ZGV2X2xvY2spOworCQlsaXN0X2FkZCgmZ3NfcmVxLT5yZV9lbnRyeSwgJmRldi0+ZGV2X3JlcV9saXN0KTsKKwkJc3Bpbl91bmxvY2soJmRldi0+ZGV2X2xvY2spOworCisJCWdzX3NlbmQoZGV2KTsKKworCQlicmVhazsKKworCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogZGlzY29ubmVjdCAqLworCQlnc19kZWJ1ZygiZ3Nfd3JpdGVfY29tcGxldGU6IHNodXRkb3duXG4iKTsKKwkJZ3NfZnJlZV9yZXEoZXAsIHJlcSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSJnc193cml0ZV9jb21wbGV0ZTogdW5leHBlY3RlZCBzdGF0dXMgZXJyb3IsIHN0YXR1cz0lZFxuIiwKKwkJCXJlcS0+c3RhdHVzKTsKKwkJZ290byByZXF1ZXVlOworCQlicmVhazsKKwl9Cit9CisKKy8qIEdhZGdldCBEcml2ZXIgKi8KKworLyoKKyAqIGdzX2JpbmQKKyAqCisgKiBDYWxsZWQgb24gbW9kdWxlIGxvYWQuICBBbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIHRoZSBkZXZpY2UKKyAqIHN0cnVjdHVyZSBhbmQgYSBjb250cm9sIHJlcXVlc3QuCisgKi8KK3N0YXRpYyBpbnQgZ3NfYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCWludCByZXQ7CisJc3RydWN0IHVzYl9lcCAqZXA7CisJc3RydWN0IGdzX2RldiAqZGV2OworCisJLyogZGV2aWNlIHNwZWNpZmljICovCisJaWYgKGdhZGdldF9pc19uZXQyMjgwKGdhZGdldCkpIHsKKwkJZ3NfZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU18MHgwMDAxKTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19weGEoZ2FkZ2V0KSkgeworCQlnc19kZXZpY2VfZGVzYy5iY2REZXZpY2UgPQorCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19WRVJTSU9OX05VTXwweDAwMDIpOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX3NoKGdhZGdldCkpIHsKKwkJZ3NfZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU18MHgwMDAzKTsKKwkJLyogc2ggZG9lc24ndCBzdXBwb3J0IG11bHRpcGxlIGludGVyZmFjZXMgb3IgY29uZmlncyAqLworCQl1c2VfYWNtID0gMDsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19zYTExMDAoZ2FkZ2V0KSkgeworCQlnc19kZXZpY2VfZGVzYy5iY2REZXZpY2UgPQorCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19WRVJTSU9OX05VTXwweDAwMDQpOworCQkvKiBzYTExMDAgZG9lc24ndCBzdXBwb3J0IG5lY2Vzc2FyeSBlbmRwb2ludHMgKi8KKwkJdXNlX2FjbSA9IDA7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfZ29rdShnYWRnZXQpKSB7CisJCWdzX2RldmljZV9kZXNjLmJjZERldmljZSA9CisJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX1ZFUlNJT05fTlVNfDB4MDAwNSk7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfbXExMXh4KGdhZGdldCkpIHsKKwkJZ3NfZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU18MHgwMDA2KTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19vbWFwKGdhZGdldCkpIHsKKwkJZ3NfZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU18MHgwMDA3KTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19saDdhNDB4KGdhZGdldCkpIHsKKwkJZ3NfZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU18MHgwMDA4KTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19uOTYwNChnYWRnZXQpKSB7CisJCWdzX2RldmljZV9kZXNjLmJjZERldmljZSA9CisJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX1ZFUlNJT05fTlVNfDB4MDAwOSk7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfcHhhMjd4KGdhZGdldCkpIHsKKwkJZ3NfZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU18MHgwMDExKTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19zM2MyNDEwKGdhZGdldCkpIHsKKwkJZ3NfZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU18MHgwMDEyKTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19hdDkxKGdhZGdldCkpIHsKKwkJZ3NfZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU18MHgwMDEzKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJnc19iaW5kOiBjb250cm9sbGVyICclcycgbm90IHJlY29nbml6ZWRcbiIsCisJCQlnYWRnZXQtPm5hbWUpOworCQkvKiB1bnJlY29nbml6ZWQsIGJ1dCBzYWZlIHVubGVzcyBidWxrIGlzIFJFQUxMWSBxdWlya3kgKi8KKwkJZ3NfZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU18MHgwMDk5KTsKKwl9CisKKwl1c2JfZXBfYXV0b2NvbmZpZ19yZXNldChnYWRnZXQpOworCisJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhnYWRnZXQsICZnc19mdWxsc3BlZWRfaW5fZGVzYyk7CisJaWYgKCFlcCkKKwkJZ290byBhdXRvY29uZl9mYWlsOworCUVQX0lOX05BTUUgPSBlcC0+bmFtZTsKKwllcC0+ZHJpdmVyX2RhdGEgPSBlcDsJLyogY2xhaW0gdGhlIGVuZHBvaW50ICovCisKKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGdhZGdldCwgJmdzX2Z1bGxzcGVlZF9vdXRfZGVzYyk7CisJaWYgKCFlcCkKKwkJZ290byBhdXRvY29uZl9mYWlsOworCUVQX09VVF9OQU1FID0gZXAtPm5hbWU7CisJZXAtPmRyaXZlcl9kYXRhID0gZXA7CS8qIGNsYWltIHRoZSBlbmRwb2ludCAqLworCisJaWYgKHVzZV9hY20pIHsKKwkJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhnYWRnZXQsICZnc19mdWxsc3BlZWRfbm90aWZ5X2Rlc2MpOworCQlpZiAoIWVwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImdzX2JpbmQ6IGNhbm5vdCBydW4gQUNNIG9uICVzXG4iLCBnYWRnZXQtPm5hbWUpOworCQkJZ290byBhdXRvY29uZl9mYWlsOworCQl9CisJCWdzX2RldmljZV9kZXNjLmlkUHJvZHVjdCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoCisJCQkJCQlHU19DRENfUFJPRFVDVF9JRCksCisJCUVQX05PVElGWV9OQU1FID0gZXAtPm5hbWU7CisJCWVwLT5kcml2ZXJfZGF0YSA9IGVwOwkvKiBjbGFpbSB0aGUgZW5kcG9pbnQgKi8KKwl9CisKKwlnc19kZXZpY2VfZGVzYy5iRGV2aWNlQ2xhc3MgPSB1c2VfYWNtCisJCT8gVVNCX0NMQVNTX0NPTU0gOiBVU0JfQ0xBU1NfVkVORE9SX1NQRUM7CisJZ3NfZGV2aWNlX2Rlc2MuYk1heFBhY2tldFNpemUwID0gZ2FkZ2V0LT5lcDAtPm1heHBhY2tldDsKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCWdzX3F1YWxpZmllcl9kZXNjLmJEZXZpY2VDbGFzcyA9IHVzZV9hY20KKwkJPyBVU0JfQ0xBU1NfQ09NTSA6IFVTQl9DTEFTU19WRU5ET1JfU1BFQzsKKwkvKiBhc3N1bWUgZXAwIHVzZXMgdGhlIHNhbWUgcGFja2V0IHNpemUgZm9yIGJvdGggc3BlZWRzICovCisJZ3NfcXVhbGlmaWVyX2Rlc2MuYk1heFBhY2tldFNpemUwID0gZ3NfZGV2aWNlX2Rlc2MuYk1heFBhY2tldFNpemUwOworCS8qIGFzc3VtZSBlbmRwb2ludHMgYXJlIGR1YWwtc3BlZWQgKi8KKwlnc19oaWdoc3BlZWRfbm90aWZ5X2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9CisJCWdzX2Z1bGxzcGVlZF9ub3RpZnlfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCWdzX2hpZ2hzcGVlZF9pbl9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQorCQlnc19mdWxsc3BlZWRfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCWdzX2hpZ2hzcGVlZF9vdXRfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJZ3NfZnVsbHNwZWVkX291dF9kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisjZW5kaWYgLyogQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEICovCisKKwl1c2JfZ2FkZ2V0X3NldF9zZWxmcG93ZXJlZChnYWRnZXQpOworCisJaWYgKGdhZGdldC0+aXNfb3RnKSB7CisJCWdzX290Z19kZXNjcmlwdG9yLmJtQXR0cmlidXRlcyB8PSBVU0JfT1RHX0hOUCwKKwkJZ3NfYnVsa19jb25maWdfZGVzYy5ibUF0dHJpYnV0ZXMgfD0gVVNCX0NPTkZJR19BVFRfV0FLRVVQOworCQlnc19hY21fY29uZmlnX2Rlc2MuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKKwl9CisKKwlnc19kZXZpY2UgPSBkZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ3NfZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNucHJpbnRmKG1hbnVmYWN0dXJlciwgc2l6ZW9mKG1hbnVmYWN0dXJlciksICIlcyAlcyB3aXRoICVzIiwKKwkJc3lzdGVtX3V0c25hbWUuc3lzbmFtZSwgc3lzdGVtX3V0c25hbWUucmVsZWFzZSwKKwkJZ2FkZ2V0LT5uYW1lKTsKKworCW1lbXNldChkZXYsIDAsIHNpemVvZihzdHJ1Y3QgZ3NfZGV2KSk7CisJZGV2LT5kZXZfZ2FkZ2V0ID0gZ2FkZ2V0OworCXNwaW5fbG9ja19pbml0KCZkZXYtPmRldl9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5kZXZfcmVxX2xpc3QpOworCXNldF9nYWRnZXRfZGF0YShnYWRnZXQsIGRldik7CisKKwlpZiAoKHJldD1nc19hbGxvY19wb3J0cyhkZXYsIEdGUF9LRVJORUwpKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3NfYmluZDogY2Fubm90IGFsbG9jYXRlIHBvcnRzXG4iKTsKKwkJZ3NfdW5iaW5kKGdhZGdldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogcHJlYWxsb2NhdGUgY29udHJvbCByZXNwb25zZSBhbmQgYnVmZmVyICovCisJZGV2LT5kZXZfY3RybF9yZXEgPSBnc19hbGxvY19yZXEoZ2FkZ2V0LT5lcDAsIEdTX01BWF9ERVNDX0xFTiwKKwkJR0ZQX0tFUk5FTCk7CisJaWYgKGRldi0+ZGV2X2N0cmxfcmVxID09IE5VTEwpIHsKKwkJZ3NfdW5iaW5kKGdhZGdldCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlkZXYtPmRldl9jdHJsX3JlcS0+Y29tcGxldGUgPSBnc19zZXR1cF9jb21wbGV0ZTsKKworCWdhZGdldC0+ZXAwLT5kcml2ZXJfZGF0YSA9IGRldjsKKworCXByaW50ayhLRVJOX0lORk8gImdzX2JpbmQ6ICVzICVzIGJvdW5kXG4iLAorCQlHU19MT05HX05BTUUsIEdTX1ZFUlNJT05fU1RSKTsKKworCXJldHVybiAwOworCithdXRvY29uZl9mYWlsOgorCXByaW50ayhLRVJOX0VSUiAiZ3NfYmluZDogY2Fubm90IGF1dG9jb25maWd1cmUgb24gJXNcbiIsIGdhZGdldC0+bmFtZSk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKKy8qCisgKiBnc191bmJpbmQKKyAqCisgKiBDYWxsZWQgb24gbW9kdWxlIHVubG9hZC4gIEZyZWVzIHRoZSBjb250cm9sIHJlcXVlc3QgYW5kIGRldmljZQorICogc3RydWN0dXJlLgorICovCitzdGF0aWMgdm9pZCBnc191bmJpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgZ3NfZGV2ICpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTsKKworCWdzX2RldmljZSA9IE5VTEw7CisKKwkvKiByZWFkL3dyaXRlIHJlcXVlc3RzIGFscmVhZHkgZnJlZWQsIG9ubHkgY29udHJvbCByZXF1ZXN0IHJlbWFpbnMgKi8KKwlpZiAoZGV2ICE9IE5VTEwpIHsKKwkJaWYgKGRldi0+ZGV2X2N0cmxfcmVxICE9IE5VTEwpIHsKKwkJCWdzX2ZyZWVfcmVxKGdhZGdldC0+ZXAwLCBkZXYtPmRldl9jdHJsX3JlcSk7CisJCQlkZXYtPmRldl9jdHJsX3JlcSA9IE5VTEw7CisJCX0KKwkJZ3NfZnJlZV9wb3J0cyhkZXYpOworCQlrZnJlZShkZXYpOworCQlzZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0LCBOVUxMKTsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJnc191bmJpbmQ6ICVzICVzIHVuYm91bmRcbiIsIEdTX0xPTkdfTkFNRSwKKwkJR1NfVkVSU0lPTl9TVFIpOworfQorCisvKgorICogZ3Nfc2V0dXAKKyAqCisgKiBJbXBsZW1lbnRzIGFsbCB0aGUgY29udHJvbCBlbmRwb2ludCBmdW5jdGlvbmFsaXR5IHRoYXQncyBub3QKKyAqIGhhbmRsZWQgaW4gaGFyZHdhcmUgb3IgdGhlIGhhcmR3YXJlIGRyaXZlci4KKyAqCisgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBkYXRhIHNlbnQgdG8gdGhlIGhvc3QsIG9yIGEgbmVnYXRpdmUKKyAqIGVycm9yIG51bWJlci4KKyAqLworc3RhdGljIGludCBnc19zZXR1cChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LAorCWNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpCit7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCXN0cnVjdCBnc19kZXYgKmRldiA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOworCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxID0gZGV2LT5kZXZfY3RybF9yZXE7CisJdTE2IHdJbmRleCA9IGN0cmwtPndJbmRleDsKKwl1MTYgd1ZhbHVlID0gY3RybC0+d1ZhbHVlOworCXUxNiB3TGVuZ3RoID0gY3RybC0+d0xlbmd0aDsKKworCXN3aXRjaCAoY3RybC0+YlJlcXVlc3RUeXBlICYgVVNCX1RZUEVfTUFTSykgeworCWNhc2UgVVNCX1RZUEVfU1RBTkRBUkQ6CisJCXJldCA9IGdzX3NldHVwX3N0YW5kYXJkKGdhZGdldCxjdHJsKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQl9UWVBFX0NMQVNTOgorCQlyZXQgPSBnc19zZXR1cF9jbGFzcyhnYWRnZXQsY3RybCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19zZXR1cDogdW5rbm93biByZXF1ZXN0LCB0eXBlPSUwMngsIHJlcXVlc3Q9JTAyeCwgdmFsdWU9JTA0eCwgaW5kZXg9JTA0eCwgbGVuZ3RoPSVkXG4iLAorCQkJY3RybC0+YlJlcXVlc3RUeXBlLCBjdHJsLT5iUmVxdWVzdCwKKwkJCXdWYWx1ZSwgd0luZGV4LCB3TGVuZ3RoKTsKKwkJYnJlYWs7CisJfQorCisJLyogcmVzcG9uZCB3aXRoIGRhdGEgdHJhbnNmZXIgYmVmb3JlIHN0YXR1cyBwaGFzZT8gKi8KKwlpZiAocmV0ID49IDApIHsKKwkJcmVxLT5sZW5ndGggPSByZXQ7CisJCXJlcS0+emVybyA9IHJldCA8IHdMZW5ndGgKKwkJCQkmJiAocmV0ICUgZ2FkZ2V0LT5lcDAtPm1heHBhY2tldCkgPT0gMDsKKwkJcmV0ID0gdXNiX2VwX3F1ZXVlKGdhZGdldC0+ZXAwLCByZXEsIEdGUF9BVE9NSUMpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJnc19zZXR1cDogY2Fubm90IHF1ZXVlIHJlc3BvbnNlLCByZXQ9JWRcbiIsCisJCQkJcmV0KTsKKwkJCXJlcS0+c3RhdHVzID0gMDsKKwkJCWdzX3NldHVwX2NvbXBsZXRlKGdhZGdldC0+ZXAwLCByZXEpOworCQl9CisJfQorCisJLyogZGV2aWNlIGVpdGhlciBzdGFsbHMgKHJldCA8IDApIG9yIHJlcG9ydHMgc3VjY2VzcyAqLworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZ3Nfc2V0dXBfc3RhbmRhcmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwKKwljb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKQoreworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKwlzdHJ1Y3QgZ3NfZGV2ICpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSA9IGRldi0+ZGV2X2N0cmxfcmVxOworCXUxNiB3SW5kZXggPSBjdHJsLT53SW5kZXg7CisJdTE2IHdWYWx1ZSA9IGN0cmwtPndWYWx1ZTsKKwl1MTYgd0xlbmd0aCA9IGN0cmwtPndMZW5ndGg7CisKKwlzd2l0Y2ggKGN0cmwtPmJSZXF1ZXN0KSB7CisJY2FzZSBVU0JfUkVRX0dFVF9ERVNDUklQVE9SOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IFVTQl9ESVJfSU4pCisJCQlicmVhazsKKworCQlzd2l0Y2ggKHdWYWx1ZSA+PiA4KSB7CisJCWNhc2UgVVNCX0RUX0RFVklDRToKKwkJCXJldCA9IG1pbih3TGVuZ3RoLAorCQkJCSh1MTYpc2l6ZW9mKHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IpKTsKKwkJCW1lbWNweShyZXEtPmJ1ZiwgJmdzX2RldmljZV9kZXNjLCByZXQpOworCQkJYnJlYWs7CisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKwkJY2FzZSBVU0JfRFRfREVWSUNFX1FVQUxJRklFUjoKKwkJCWlmICghZ2FkZ2V0LT5pc19kdWFsc3BlZWQpCisJCQkJYnJlYWs7CisJCQlyZXQgPSBtaW4od0xlbmd0aCwKKwkJCQkodTE2KXNpemVvZihzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yKSk7CisJCQltZW1jcHkocmVxLT5idWYsICZnc19xdWFsaWZpZXJfZGVzYywgcmV0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVVNCX0RUX09USEVSX1NQRUVEX0NPTkZJRzoKKwkJCWlmICghZ2FkZ2V0LT5pc19kdWFsc3BlZWQpCisJCQkJYnJlYWs7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKyNlbmRpZiAvKiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgKi8KKwkJY2FzZSBVU0JfRFRfQ09ORklHOgorCQkJcmV0ID0gZ3NfYnVpbGRfY29uZmlnX2J1ZihyZXEtPmJ1ZiwgZ2FkZ2V0LT5zcGVlZCwKKwkJCQl3VmFsdWUgPj4gOCwgd1ZhbHVlICYgMHhmZiwKKwkJCQlnYWRnZXQtPmlzX290Zyk7CisJCQlpZiAocmV0ID49IDApCisJCQkJcmV0ID0gbWluKHdMZW5ndGgsICh1MTYpcmV0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVVNCX0RUX1NUUklORzoKKwkJCS8qIHdJbmRleCA9PSBsYW5ndWFnZSBjb2RlLiAqLworCQkJcmV0ID0gdXNiX2dhZGdldF9nZXRfc3RyaW5nKCZnc19zdHJpbmdfdGFibGUsCisJCQkJd1ZhbHVlICYgMHhmZiwgcmVxLT5idWYpOworCQkJaWYgKHJldCA+PSAwKQorCQkJCXJldCA9IG1pbih3TGVuZ3RoLCAodTE2KXJldCk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWNhc2UgVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTjoKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAwKQorCQkJYnJlYWs7CisJCXNwaW5fbG9jaygmZGV2LT5kZXZfbG9jayk7CisJCXJldCA9IGdzX3NldF9jb25maWcoZGV2LCB3VmFsdWUpOworCQlzcGluX3VubG9jaygmZGV2LT5kZXZfbG9jayk7CisJCWJyZWFrOworCisJY2FzZSBVU0JfUkVRX0dFVF9DT05GSUdVUkFUSU9OOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IFVTQl9ESVJfSU4pCisJCQlicmVhazsKKwkJKih1OCAqKXJlcS0+YnVmID0gZGV2LT5kZXZfY29uZmlnOworCQlyZXQgPSBtaW4od0xlbmd0aCwgKHUxNikxKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQl9SRVFfU0VUX0lOVEVSRkFDRToKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSBVU0JfUkVDSVBfSU5URVJGQUNFCisJCQkJfHwgIWRldi0+ZGV2X2NvbmZpZworCQkJCXx8IHdJbmRleCA+PSBHU19NQVhfTlVNX0lOVEVSRkFDRVMpCisJCQlicmVhazsKKwkJaWYgKGRldi0+ZGV2X2NvbmZpZyA9PSBHU19CVUxLX0NPTkZJR19JRAorCQkJCSYmIHdJbmRleCAhPSBHU19CVUxLX0lOVEVSRkFDRV9JRCkKKwkJCWJyZWFrOworCQkvKiBubyBhbHRlcm5hdGUgaW50ZXJmYWNlIHNldHRpbmdzICovCisJCWlmICh3VmFsdWUgIT0gMCkKKwkJCWJyZWFrOworCQlzcGluX2xvY2soJmRldi0+ZGV2X2xvY2spOworCQkvKiBQWEEgaGFyZHdhcmUgcGFydGlhbGx5IGhhbmRsZXMgU0VUX0lOVEVSRkFDRTsKKwkJICogd2UgbmVlZCB0byBrbHVnZSBhcm91bmQgdGhhdCBpbnRlcmZlcmVuY2UuICAqLworCQlpZiAoZ2FkZ2V0X2lzX3B4YShnYWRnZXQpKSB7CisJCQlyZXQgPSBnc19zZXRfY29uZmlnKGRldiwgdXNlX2FjbSA/CisJCQkJR1NfQUNNX0NPTkZJR19JRCA6IEdTX0JVTEtfQ09ORklHX0lEKTsKKwkJCWdvdG8gc2V0X2ludGVyZmFjZV9kb25lOworCQl9CisJCWlmIChkZXYtPmRldl9jb25maWcgIT0gR1NfQlVMS19DT05GSUdfSUQKKwkJCQkmJiB3SW5kZXggPT0gR1NfQ09OVFJPTF9JTlRFUkZBQ0VfSUQpIHsKKwkJCWlmIChkZXYtPmRldl9ub3RpZnlfZXApIHsKKwkJCQl1c2JfZXBfZGlzYWJsZShkZXYtPmRldl9ub3RpZnlfZXApOworCQkJCXVzYl9lcF9lbmFibGUoZGV2LT5kZXZfbm90aWZ5X2VwLCBkZXYtPmRldl9ub3RpZnlfZXBfZGVzYyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQl1c2JfZXBfZGlzYWJsZShkZXYtPmRldl9pbl9lcCk7CisJCQl1c2JfZXBfZGlzYWJsZShkZXYtPmRldl9vdXRfZXApOworCQkJdXNiX2VwX2VuYWJsZShkZXYtPmRldl9pbl9lcCwgZGV2LT5kZXZfaW5fZXBfZGVzYyk7CisJCQl1c2JfZXBfZW5hYmxlKGRldi0+ZGV2X291dF9lcCwgZGV2LT5kZXZfb3V0X2VwX2Rlc2MpOworCQl9CisJCXJldCA9IDA7CitzZXRfaW50ZXJmYWNlX2RvbmU6CisJCXNwaW5fdW5sb2NrKCZkZXYtPmRldl9sb2NrKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQl9SRVFfR0VUX0lOVEVSRkFDRToKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAoVVNCX0RJUl9JTnxVU0JfUkVDSVBfSU5URVJGQUNFKQorCQl8fCBkZXYtPmRldl9jb25maWcgPT0gR1NfTk9fQ09ORklHX0lEKQorCQkJYnJlYWs7CisJCWlmICh3SW5kZXggPj0gR1NfTUFYX05VTV9JTlRFUkZBQ0VTCisJCQkJfHwgKGRldi0+ZGV2X2NvbmZpZyA9PSBHU19CVUxLX0NPTkZJR19JRAorCQkJCSYmIHdJbmRleCAhPSBHU19CVUxLX0lOVEVSRkFDRV9JRCkpIHsKKwkJCXJldCA9IC1FRE9NOworCQkJYnJlYWs7CisJCX0KKwkJLyogbm8gYWx0ZXJuYXRlIGludGVyZmFjZSBzZXR0aW5ncyAqLworCQkqKHU4ICopcmVxLT5idWYgPSAwOworCQlyZXQgPSBtaW4od0xlbmd0aCwgKHUxNikxKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgImdzX3NldHVwOiB1bmtub3duIHN0YW5kYXJkIHJlcXVlc3QsIHR5cGU9JTAyeCwgcmVxdWVzdD0lMDJ4LCB2YWx1ZT0lMDR4LCBpbmRleD0lMDR4LCBsZW5ndGg9JWRcbiIsCisJCQljdHJsLT5iUmVxdWVzdFR5cGUsIGN0cmwtPmJSZXF1ZXN0LAorCQkJd1ZhbHVlLCB3SW5kZXgsIHdMZW5ndGgpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdzX3NldHVwX2NsYXNzKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsCisJY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCkKK3sKKwlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CisJc3RydWN0IGdzX2RldiAqZGV2ID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7CisJc3RydWN0IGdzX3BvcnQgKnBvcnQgPSBkZXYtPmRldl9wb3J0WzBdOwkvKiBBQ00gb25seSBoYXMgb25lIHBvcnQgKi8KKwlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSA9IGRldi0+ZGV2X2N0cmxfcmVxOworCXUxNiB3SW5kZXggPSBjdHJsLT53SW5kZXg7CisJdTE2IHdWYWx1ZSA9IGN0cmwtPndWYWx1ZTsKKwl1MTYgd0xlbmd0aCA9IGN0cmwtPndMZW5ndGg7CisKKwlzd2l0Y2ggKGN0cmwtPmJSZXF1ZXN0KSB7CisJY2FzZSBVU0JfQ0RDX1JFUV9TRVRfTElORV9DT0RJTkc6CisJCXJldCA9IG1pbih3TGVuZ3RoLAorCQkJKHUxNilzaXplb2Yoc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcpKTsKKwkJaWYgKHBvcnQpIHsKKwkJCXNwaW5fbG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKKwkJCW1lbWNweSgmcG9ydC0+cG9ydF9saW5lX2NvZGluZywgcmVxLT5idWYsIHJldCk7CisJCQlzcGluX3VubG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgVVNCX0NEQ19SRVFfR0VUX0xJTkVfQ09ESU5HOgorCQlwb3J0ID0gZGV2LT5kZXZfcG9ydFswXTsJLyogQUNNIG9ubHkgaGFzIG9uZSBwb3J0ICovCisJCXJldCA9IG1pbih3TGVuZ3RoLAorCQkJKHUxNilzaXplb2Yoc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcpKTsKKwkJaWYgKHBvcnQpIHsKKwkJCXNwaW5fbG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKKwkJCW1lbWNweShyZXEtPmJ1ZiwgJnBvcnQtPnBvcnRfbGluZV9jb2RpbmcsIHJldCk7CisJCQlzcGluX3VubG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgVVNCX0NEQ19SRVFfU0VUX0NPTlRST0xfTElORV9TVEFURToKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgImdzX3NldHVwOiB1bmtub3duIGNsYXNzIHJlcXVlc3QsIHR5cGU9JTAyeCwgcmVxdWVzdD0lMDJ4LCB2YWx1ZT0lMDR4LCBpbmRleD0lMDR4LCBsZW5ndGg9JWRcbiIsCisJCQljdHJsLT5iUmVxdWVzdFR5cGUsIGN0cmwtPmJSZXF1ZXN0LAorCQkJd1ZhbHVlLCB3SW5kZXgsIHdMZW5ndGgpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogZ3Nfc2V0dXBfY29tcGxldGUKKyAqLworc3RhdGljIHZvaWQgZ3Nfc2V0dXBfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCWlmIChyZXEtPnN0YXR1cyB8fCByZXEtPmFjdHVhbCAhPSByZXEtPmxlbmd0aCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX3NldHVwX2NvbXBsZXRlOiBzdGF0dXMgZXJyb3IsIHN0YXR1cz0lZCwgYWN0dWFsPSVkLCBsZW5ndGg9JWRcbiIsCisJCQlyZXEtPnN0YXR1cywgcmVxLT5hY3R1YWwsIHJlcS0+bGVuZ3RoKTsKKwl9Cit9CisKKy8qCisgKiBnc19kaXNjb25uZWN0CisgKgorICogQ2FsbGVkIHdoZW4gdGhlIGRldmljZSBpcyBkaXNjb25uZWN0ZWQuICBGcmVlcyB0aGUgY2xvc2VkCisgKiBwb3J0cyBhbmQgZGlzY29ubmVjdHMgb3BlbiBwb3J0cy4gIE9wZW4gcG9ydHMgd2lsbCBiZSBmcmVlZAorICogb24gY2xvc2UuICBUaGVuIHJlYWxsb2NhdGVzIHRoZSBwb3J0cyBmb3IgdGhlIG5leHQgY29ubmVjdGlvbi4KKyAqLworc3RhdGljIHZvaWQgZ3NfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGdzX2RldiAqZGV2ID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5kZXZfbG9jaywgZmxhZ3MpOworCisJZ3NfcmVzZXRfY29uZmlnKGRldik7CisKKwkvKiBmcmVlIGNsb3NlZCBwb3J0cyBhbmQgZGlzY29ubmVjdCBvcGVuIHBvcnRzICovCisJLyogKG9wZW4gcG9ydHMgd2lsbCBiZSBmcmVlZCB3aGVuIGNsb3NlZCkgKi8KKwlnc19mcmVlX3BvcnRzKGRldik7CisKKwkvKiByZS1hbGxvY2F0ZSBwb3J0cyBmb3IgdGhlIG5leHQgY29ubmVjdGlvbiAqLworCWlmIChnc19hbGxvY19wb3J0cyhkZXYsIEdGUF9BVE9NSUMpICE9IDApCisJCXByaW50ayhLRVJOX0VSUiAiZ3NfZGlzY29ubmVjdDogY2Fubm90IHJlLWFsbG9jYXRlIHBvcnRzXG4iKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZGV2X2xvY2ssIGZsYWdzKTsKKworCXByaW50ayhLRVJOX0lORk8gImdzX2Rpc2Nvbm5lY3Q6ICVzIGRpc2Nvbm5lY3RlZFxuIiwgR1NfTE9OR19OQU1FKTsKK30KKworLyoKKyAqIGdzX3NldF9jb25maWcKKyAqCisgKiBDb25maWd1cmVzIHRoZSBkZXZpY2UgYnkgZW5hYmxpbmcgZGV2aWNlIHNwZWNpZmljCisgKiBvcHRpbWl6YXRpb25zLCBzZXR0aW5nIHVwIHRoZSBlbmRwb2ludHMsIGFsbG9jYXRpbmcKKyAqIHJlYWQgYW5kIHdyaXRlIHJlcXVlc3RzIGFuZCBxdWV1aW5nIHJlYWQgcmVxdWVzdHMuCisgKgorICogVGhlIGRldmljZSBsb2NrIG11c3QgYmUgaGVsZCB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdGljIGludCBnc19zZXRfY29uZmlnKHN0cnVjdCBnc19kZXYgKmRldiwgdW5zaWduZWQgY29uZmlnKQoreworCWludCBpOworCWludCByZXQgPSAwOworCXN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQgPSBkZXYtPmRldl9nYWRnZXQ7CisJc3RydWN0IHVzYl9lcCAqZXA7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcF9kZXNjOworCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxOworCXN0cnVjdCBnc19yZXFfZW50cnkgKnJlcV9lbnRyeTsKKworCWlmIChkZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX3NldF9jb25maWc6IE5VTEwgZGV2aWNlIHBvaW50ZXJcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoY29uZmlnID09IGRldi0+ZGV2X2NvbmZpZykKKwkJcmV0dXJuIDA7CisKKwlnc19yZXNldF9jb25maWcoZGV2KTsKKworCXN3aXRjaCAoY29uZmlnKSB7CisJY2FzZSBHU19OT19DT05GSUdfSUQ6CisJCXJldHVybiAwOworCWNhc2UgR1NfQlVMS19DT05GSUdfSUQ6CisJCWlmICh1c2VfYWNtKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCS8qIGRldmljZSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zICovCisJCWlmIChnYWRnZXRfaXNfbmV0MjI4MChnYWRnZXQpKQorCQkJbmV0MjI4MF9zZXRfZmlmb19tb2RlKGdhZGdldCwgMSk7CisJCWJyZWFrOworCWNhc2UgR1NfQUNNX0NPTkZJR19JRDoKKwkJaWYgKCF1c2VfYWNtKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCS8qIGRldmljZSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zICovCisJCWlmIChnYWRnZXRfaXNfbmV0MjI4MChnYWRnZXQpKQorCQkJbmV0MjI4MF9zZXRfZmlmb19tb2RlKGdhZGdldCwgMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldi0+ZGV2X2NvbmZpZyA9IGNvbmZpZzsKKworCWdhZGdldF9mb3JfZWFjaF9lcChlcCwgZ2FkZ2V0KSB7CisKKwkJaWYgKEVQX05PVElGWV9OQU1FCisJCSYmIHN0cmNtcChlcC0+bmFtZSwgRVBfTk9USUZZX05BTUUpID09IDApIHsKKwkJCWVwX2Rlc2MgPSBHU19TUEVFRF9TRUxFQ1QoCisJCQkJZ2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCwKKwkJCQkmZ3NfaGlnaHNwZWVkX25vdGlmeV9kZXNjLAorCQkJCSZnc19mdWxsc3BlZWRfbm90aWZ5X2Rlc2MpOworCQkJcmV0ID0gdXNiX2VwX2VuYWJsZShlcCxlcF9kZXNjKTsKKwkJCWlmIChyZXQgPT0gMCkgeworCQkJCWVwLT5kcml2ZXJfZGF0YSA9IGRldjsKKwkJCQlkZXYtPmRldl9ub3RpZnlfZXAgPSBlcDsKKwkJCQlkZXYtPmRldl9ub3RpZnlfZXBfZGVzYyA9IGVwX2Rlc2M7CisJCQl9IGVsc2UgeworCQkJCXByaW50ayhLRVJOX0VSUiAiZ3Nfc2V0X2NvbmZpZzogY2Fubm90IGVuYWJsZSBub3RpZnkgZW5kcG9pbnQgJXMsIHJldD0lZFxuIiwKKwkJCQkJZXAtPm5hbWUsIHJldCk7CisJCQkJZ290byBleGl0X3Jlc2V0X2NvbmZpZzsKKwkJCX0KKwkJfQorCisJCWVsc2UgaWYgKHN0cmNtcChlcC0+bmFtZSwgRVBfSU5fTkFNRSkgPT0gMCkgeworCQkJZXBfZGVzYyA9IEdTX1NQRUVEX1NFTEVDVCgKKwkJCQlnYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdILAorIAkJCQkmZ3NfaGlnaHNwZWVkX2luX2Rlc2MsCisJCQkJJmdzX2Z1bGxzcGVlZF9pbl9kZXNjKTsKKwkJCXJldCA9IHVzYl9lcF9lbmFibGUoZXAsZXBfZGVzYyk7CisJCQlpZiAocmV0ID09IDApIHsKKwkJCQllcC0+ZHJpdmVyX2RhdGEgPSBkZXY7CisJCQkJZGV2LT5kZXZfaW5fZXAgPSBlcDsKKwkJCQlkZXYtPmRldl9pbl9lcF9kZXNjID0gZXBfZGVzYzsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJnc19zZXRfY29uZmlnOiBjYW5ub3QgZW5hYmxlIGluIGVuZHBvaW50ICVzLCByZXQ9JWRcbiIsCisJCQkJCWVwLT5uYW1lLCByZXQpOworCQkJCWdvdG8gZXhpdF9yZXNldF9jb25maWc7CisJCQl9CisJCX0KKworCQllbHNlIGlmIChzdHJjbXAoZXAtPm5hbWUsIEVQX09VVF9OQU1FKSA9PSAwKSB7CisJCQllcF9kZXNjID0gR1NfU1BFRURfU0VMRUNUKAorCQkJCWdhZGdldC0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gsCisJCQkJJmdzX2hpZ2hzcGVlZF9vdXRfZGVzYywKKwkJCQkmZ3NfZnVsbHNwZWVkX291dF9kZXNjKTsKKwkJCXJldCA9IHVzYl9lcF9lbmFibGUoZXAsZXBfZGVzYyk7CisJCQlpZiAocmV0ID09IDApIHsKKwkJCQllcC0+ZHJpdmVyX2RhdGEgPSBkZXY7CisJCQkJZGV2LT5kZXZfb3V0X2VwID0gZXA7CisJCQkJZGV2LT5kZXZfb3V0X2VwX2Rlc2MgPSBlcF9kZXNjOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgImdzX3NldF9jb25maWc6IGNhbm5vdCBlbmFibGUgb3V0IGVuZHBvaW50ICVzLCByZXQ9JWRcbiIsCisJCQkJCWVwLT5uYW1lLCByZXQpOworCQkJCWdvdG8gZXhpdF9yZXNldF9jb25maWc7CisJCQl9CisJCX0KKworCX0KKworCWlmIChkZXYtPmRldl9pbl9lcCA9PSBOVUxMIHx8IGRldi0+ZGV2X291dF9lcCA9PSBOVUxMCisJfHwgKGNvbmZpZyAhPSBHU19CVUxLX0NPTkZJR19JRCAmJiBkZXYtPmRldl9ub3RpZnlfZXAgPT0gTlVMTCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19zZXRfY29uZmlnOiBjYW5ub3QgZmluZCBlbmRwb2ludHNcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGV4aXRfcmVzZXRfY29uZmlnOworCX0KKworCS8qIGFsbG9jYXRlIGFuZCBxdWV1ZSByZWFkIHJlcXVlc3RzICovCisJZXAgPSBkZXYtPmRldl9vdXRfZXA7CisJZm9yIChpPTA7IGk8cmVhZF9xX3NpemUgJiYgcmV0ID09IDA7IGkrKykgeworCQlpZiAoKHJlcT1nc19hbGxvY19yZXEoZXAsIGVwLT5tYXhwYWNrZXQsIEdGUF9BVE9NSUMpKSkgeworCQkJcmVxLT5jb21wbGV0ZSA9IGdzX3JlYWRfY29tcGxldGU7CisJCQlpZiAoKHJldD11c2JfZXBfcXVldWUoZXAsIHJlcSwgR0ZQX0FUT01JQykpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJnc19zZXRfY29uZmlnOiBjYW5ub3QgcXVldWUgcmVhZCByZXF1ZXN0LCByZXQ9JWRcbiIsCisJCQkJCXJldCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIgImdzX3NldF9jb25maWc6IGNhbm5vdCBhbGxvY2F0ZSByZWFkIHJlcXVlc3RzXG4iKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXRfcmVzZXRfY29uZmlnOworCQl9CisJfQorCisJLyogYWxsb2NhdGUgd3JpdGUgcmVxdWVzdHMsIGFuZCBwdXQgb24gZnJlZSBsaXN0ICovCisJZXAgPSBkZXYtPmRldl9pbl9lcDsKKwlmb3IgKGk9MDsgaTx3cml0ZV9xX3NpemU7IGkrKykgeworCQlpZiAoKHJlcV9lbnRyeT1nc19hbGxvY19yZXFfZW50cnkoZXAsIGVwLT5tYXhwYWNrZXQsIEdGUF9BVE9NSUMpKSkgeworCQkJcmVxX2VudHJ5LT5yZV9yZXEtPmNvbXBsZXRlID0gZ3Nfd3JpdGVfY29tcGxldGU7CisJCQlsaXN0X2FkZCgmcmVxX2VudHJ5LT5yZV9lbnRyeSwgJmRldi0+ZGV2X3JlcV9saXN0KTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZ3Nfc2V0X2NvbmZpZzogY2Fubm90IGFsbG9jYXRlIHdyaXRlIHJlcXVlc3RzXG4iKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXRfcmVzZXRfY29uZmlnOworCQl9CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiZ3Nfc2V0X2NvbmZpZzogJXMgY29uZmlndXJlZCwgJXMgc3BlZWQgJXMgY29uZmlnXG4iLAorCQlHU19MT05HX05BTUUsCisJCWdhZGdldC0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0ggPyAiaGlnaCIgOiAiZnVsbCIsCisJCWNvbmZpZyA9PSBHU19CVUxLX0NPTkZJR19JRCA/ICJCVUxLIiA6ICJDREMtQUNNIik7CisKKwlyZXR1cm4gMDsKKworZXhpdF9yZXNldF9jb25maWc6CisJZ3NfcmVzZXRfY29uZmlnKGRldik7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGdzX3Jlc2V0X2NvbmZpZworICoKKyAqIE1hcmsgdGhlIGRldmljZSBhcyBub3QgY29uZmlndXJlZCwgZGlzYWJsZSBhbGwgZW5kcG9pbnRzLAorICogd2hpY2ggZm9yY2VzIGNvbXBsZXRpb24gb2YgcGVuZGluZyBJL08gYW5kIGZyZWVzIHF1ZXVlZAorICogcmVxdWVzdHMsIGFuZCBmcmVlIHRoZSByZW1haW5pbmcgd3JpdGUgcmVxdWVzdHMgb24gdGhlCisgKiBmcmVlIGxpc3QuCisgKgorICogVGhlIGRldmljZSBsb2NrIG11c3QgYmUgaGVsZCB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdGljIHZvaWQgZ3NfcmVzZXRfY29uZmlnKHN0cnVjdCBnc19kZXYgKmRldikKK3sKKwlzdHJ1Y3QgZ3NfcmVxX2VudHJ5ICpyZXFfZW50cnk7CisKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19yZXNldF9jb25maWc6IE5VTEwgZGV2aWNlIHBvaW50ZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGRldi0+ZGV2X2NvbmZpZyA9PSBHU19OT19DT05GSUdfSUQpCisJCXJldHVybjsKKworCWRldi0+ZGV2X2NvbmZpZyA9IEdTX05PX0NPTkZJR19JRDsKKworCS8qIGZyZWUgd3JpdGUgcmVxdWVzdHMgb24gdGhlIGZyZWUgbGlzdCAqLworCXdoaWxlKCFsaXN0X2VtcHR5KCZkZXYtPmRldl9yZXFfbGlzdCkpIHsKKwkJcmVxX2VudHJ5ID0gbGlzdF9lbnRyeShkZXYtPmRldl9yZXFfbGlzdC5uZXh0LAorCQkJc3RydWN0IGdzX3JlcV9lbnRyeSwgcmVfZW50cnkpOworCQlsaXN0X2RlbCgmcmVxX2VudHJ5LT5yZV9lbnRyeSk7CisJCWdzX2ZyZWVfcmVxX2VudHJ5KGRldi0+ZGV2X2luX2VwLCByZXFfZW50cnkpOworCX0KKworCS8qIGRpc2FibGUgZW5kcG9pbnRzLCBmb3JjaW5nIGNvbXBsZXRpb24gb2YgcGVuZGluZyBpL287ICovCisJLyogY29tcGxldGlvbiBoYW5kbGVycyBmcmVlIHRoZWlyIHJlcXVlc3RzIGluIHRoaXMgY2FzZSAqLworCWlmIChkZXYtPmRldl9ub3RpZnlfZXApIHsKKwkJdXNiX2VwX2Rpc2FibGUoZGV2LT5kZXZfbm90aWZ5X2VwKTsKKwkJZGV2LT5kZXZfbm90aWZ5X2VwID0gTlVMTDsKKwl9CisJaWYgKGRldi0+ZGV2X2luX2VwKSB7CisJCXVzYl9lcF9kaXNhYmxlKGRldi0+ZGV2X2luX2VwKTsKKwkJZGV2LT5kZXZfaW5fZXAgPSBOVUxMOworCX0KKwlpZiAoZGV2LT5kZXZfb3V0X2VwKSB7CisJCXVzYl9lcF9kaXNhYmxlKGRldi0+ZGV2X291dF9lcCk7CisJCWRldi0+ZGV2X291dF9lcCA9IE5VTEw7CisJfQorfQorCisvKgorICogZ3NfYnVpbGRfY29uZmlnX2J1ZgorICoKKyAqIEJ1aWxkcyB0aGUgY29uZmlnIGRlc2NyaXB0b3JzIGluIHRoZSBnaXZlbiBidWZmZXIgYW5kIHJldHVybnMgdGhlCisgKiBsZW5ndGgsIG9yIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyLgorICovCitzdGF0aWMgaW50IGdzX2J1aWxkX2NvbmZpZ19idWYodTggKmJ1ZiwgZW51bSB1c2JfZGV2aWNlX3NwZWVkIHNwZWVkLAorCXU4IHR5cGUsIHVuc2lnbmVkIGludCBpbmRleCwgaW50IGlzX290ZykKK3sKKwlpbnQgbGVuOworCWludCBoaWdoX3NwZWVkOworCWNvbnN0IHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgKmNvbmZpZ19kZXNjOworCWNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKipmdW5jdGlvbjsKKworCWlmIChpbmRleCA+PSBnc19kZXZpY2VfZGVzYy5iTnVtQ29uZmlndXJhdGlvbnMpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogb3RoZXIgc3BlZWQgc3dpdGNoZXMgaGlnaCBhbmQgZnVsbCBzcGVlZCAqLworCWhpZ2hfc3BlZWQgPSAoc3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpOworCWlmICh0eXBlID09IFVTQl9EVF9PVEhFUl9TUEVFRF9DT05GSUcpCisJCWhpZ2hfc3BlZWQgPSAhaGlnaF9zcGVlZDsKKworCWlmICh1c2VfYWNtKSB7CisJCWNvbmZpZ19kZXNjID0gJmdzX2FjbV9jb25maWdfZGVzYzsKKwkJZnVuY3Rpb24gPSBHU19TUEVFRF9TRUxFQ1QoaGlnaF9zcGVlZCwKKwkJCWdzX2FjbV9oaWdoc3BlZWRfZnVuY3Rpb24sCisJCQlnc19hY21fZnVsbHNwZWVkX2Z1bmN0aW9uKTsKKwl9IGVsc2UgeworCQljb25maWdfZGVzYyA9ICZnc19idWxrX2NvbmZpZ19kZXNjOworCQlmdW5jdGlvbiA9IEdTX1NQRUVEX1NFTEVDVChoaWdoX3NwZWVkLAorCQkJZ3NfYnVsa19oaWdoc3BlZWRfZnVuY3Rpb24sCisJCQlnc19idWxrX2Z1bGxzcGVlZF9mdW5jdGlvbik7CisJfQorCisJLyogZm9yIG5vdywgZG9uJ3QgYWR2ZXJ0aXNlIHNycC1vbmx5IGRldmljZXMgKi8KKwlpZiAoIWlzX290ZykKKwkJZnVuY3Rpb24rKzsKKworCWxlbiA9IHVzYl9nYWRnZXRfY29uZmlnX2J1Zihjb25maWdfZGVzYywgYnVmLCBHU19NQVhfREVTQ19MRU4sIGZ1bmN0aW9uKTsKKwlpZiAobGVuIDwgMCkKKwkJcmV0dXJuIGxlbjsKKworCSgoc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvciAqKWJ1ZiktPmJEZXNjcmlwdG9yVHlwZSA9IHR5cGU7CisKKwlyZXR1cm4gbGVuOworfQorCisvKgorICogZ3NfYWxsb2NfcmVxCisgKgorICogQWxsb2NhdGUgYSB1c2JfcmVxdWVzdCBhbmQgaXRzIGJ1ZmZlci4gIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZQorICogdXNiX3JlcXVlc3Qgb3IgTlVMTCBpZiB0aGVyZSBpcyBhbiBlcnJvci4KKyAqLworc3RhdGljIHN0cnVjdCB1c2JfcmVxdWVzdCAqZ3NfYWxsb2NfcmVxKHN0cnVjdCB1c2JfZXAgKmVwLCB1bnNpZ25lZCBpbnQgbGVuLCBpbnQga21hbGxvY19mbGFncykKK3sKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcTsKKworCWlmIChlcCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXJlcSA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0KGVwLCBrbWFsbG9jX2ZsYWdzKTsKKworCWlmIChyZXEgIT0gTlVMTCkgeworCQlyZXEtPmxlbmd0aCA9IGxlbjsKKwkJcmVxLT5idWYgPSBrbWFsbG9jKGxlbiwga21hbGxvY19mbGFncyk7CisJCWlmIChyZXEtPmJ1ZiA9PSBOVUxMKSB7CisJCQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGVwLCByZXEpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwlyZXR1cm4gcmVxOworfQorCisvKgorICogZ3NfZnJlZV9yZXEKKyAqCisgKiBGcmVlIGEgdXNiX3JlcXVlc3QgYW5kIGl0cyBidWZmZXIuCisgKi8KK3N0YXRpYyB2b2lkIGdzX2ZyZWVfcmVxKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlpZiAoZXAgIT0gTlVMTCAmJiByZXEgIT0gTlVMTCkgeworCQlrZnJlZShyZXEtPmJ1Zik7CisJCXVzYl9lcF9mcmVlX3JlcXVlc3QoZXAsIHJlcSk7CisJfQorfQorCisvKgorICogZ3NfYWxsb2NfcmVxX2VudHJ5CisgKgorICogQWxsb2NhdGVzIGEgcmVxdWVzdCBhbmQgaXRzIGJ1ZmZlciwgdXNpbmcgdGhlIGdpdmVuCisgKiBlbmRwb2ludCwgYnVmZmVyIGxlbiwgYW5kIGttYWxsb2MgZmxhZ3MuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZ3NfcmVxX2VudHJ5ICpnc19hbGxvY19yZXFfZW50cnkoc3RydWN0IHVzYl9lcCAqZXAsIHVuc2lnbmVkIGxlbiwgaW50IGttYWxsb2NfZmxhZ3MpCit7CisJc3RydWN0IGdzX3JlcV9lbnRyeQkqcmVxOworCisJcmVxID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGdzX3JlcV9lbnRyeSksIGttYWxsb2NfZmxhZ3MpOworCWlmIChyZXEgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXEtPnJlX3JlcSA9IGdzX2FsbG9jX3JlcShlcCwgbGVuLCBrbWFsbG9jX2ZsYWdzKTsKKwlpZiAocmVxLT5yZV9yZXEgPT0gTlVMTCkgeworCQlrZnJlZShyZXEpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXEtPnJlX3JlcS0+Y29udGV4dCA9IHJlcTsKKworCXJldHVybiByZXE7Cit9CisKKy8qCisgKiBnc19mcmVlX3JlcV9lbnRyeQorICoKKyAqIEZyZWVzIGEgcmVxdWVzdCBhbmQgaXRzIGJ1ZmZlci4KKyAqLworc3RhdGljIHZvaWQgZ3NfZnJlZV9yZXFfZW50cnkoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCBnc19yZXFfZW50cnkgKnJlcSkKK3sKKwlpZiAoZXAgIT0gTlVMTCAmJiByZXEgIT0gTlVMTCkgeworCQlpZiAocmVxLT5yZV9yZXEgIT0gTlVMTCkKKwkJCWdzX2ZyZWVfcmVxKGVwLCByZXEtPnJlX3JlcSk7CisJCWtmcmVlKHJlcSk7CisJfQorfQorCisvKgorICogZ3NfYWxsb2NfcG9ydHMKKyAqCisgKiBBbGxvY2F0ZSBhbGwgcG9ydHMgYW5kIHNldCB0aGUgZ3NfZGV2IHN0cnVjdCB0byBwb2ludCB0byB0aGVtLgorICogUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCisgKgorICogVGhlIGRldmljZSBsb2NrIGlzIG5vcm1hbGx5IGhlbGQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgZ3NfYWxsb2NfcG9ydHMoc3RydWN0IGdzX2RldiAqZGV2LCBpbnQga21hbGxvY19mbGFncykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZ3NfcG9ydCAqcG9ydDsKKworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU87CisKKwlmb3IgKGk9MDsgaTxHU19OVU1fUE9SVFM7IGkrKykgeworCQlpZiAoKHBvcnQ9KHN0cnVjdCBnc19wb3J0ICopa21hbGxvYyhzaXplb2Yoc3RydWN0IGdzX3BvcnQpLCBrbWFsbG9jX2ZsYWdzKSkgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCW1lbXNldChwb3J0LCAwLCBzaXplb2Yoc3RydWN0IGdzX3BvcnQpKTsKKwkJcG9ydC0+cG9ydF9kZXYgPSBkZXY7CisJCXBvcnQtPnBvcnRfbnVtID0gaTsKKwkJcG9ydC0+cG9ydF9saW5lX2NvZGluZy5kd0RURVJhdGUgPSBjcHVfdG9fbGUzMihHU19ERUZBVUxUX0RURV9SQVRFKTsKKwkJcG9ydC0+cG9ydF9saW5lX2NvZGluZy5iQ2hhckZvcm1hdCA9IEdTX0RFRkFVTFRfQ0hBUl9GT1JNQVQ7CisJCXBvcnQtPnBvcnRfbGluZV9jb2RpbmcuYlBhcml0eVR5cGUgPSBHU19ERUZBVUxUX1BBUklUWTsKKwkJcG9ydC0+cG9ydF9saW5lX2NvZGluZy5iRGF0YUJpdHMgPSBHU19ERUZBVUxUX0RBVEFfQklUUzsKKwkJc3Bpbl9sb2NrX2luaXQoJnBvcnQtPnBvcnRfbG9jayk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvcnQtPnBvcnRfd3JpdGVfd2FpdCk7CisKKwkJZGV2LT5kZXZfcG9ydFtpXSA9IHBvcnQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBnc19mcmVlX3BvcnRzCisgKgorICogRnJlZSBhbGwgY2xvc2VkIHBvcnRzLiAgT3BlbiBwb3J0cyBhcmUgZGlzY29ubmVjdGVkIGJ5CisgKiBmcmVlaW5nIHRoZWlyIHdyaXRlIGJ1ZmZlcnMsIHNldHRpbmcgdGhlaXIgZGV2aWNlIHBvaW50ZXJzCisgKiBhbmQgdGhlIHBvaW50ZXJzIHRvIHRoZW0gaW4gdGhlIGRldmljZSB0byBOVUxMLiAgVGhlc2UKKyAqIHBvcnRzIHdpbGwgYmUgZnJlZWQgd2hlbiBjbG9zZWQuCisgKgorICogVGhlIGRldmljZSBsb2NrIGlzIG5vcm1hbGx5IGhlbGQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyB2b2lkIGdzX2ZyZWVfcG9ydHMoc3RydWN0IGdzX2RldiAqZGV2KQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGdzX3BvcnQgKnBvcnQ7CisKKwlpZiAoZGV2ID09IE5VTEwpCisJCXJldHVybjsKKworCWZvciAoaT0wOyBpPEdTX05VTV9QT1JUUzsgaSsrKSB7CisJCWlmICgocG9ydD1kZXYtPmRldl9wb3J0W2ldKSAhPSBOVUxMKSB7CisJCQlkZXYtPmRldl9wb3J0W2ldID0gTlVMTDsKKworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCisJCQlpZiAocG9ydC0+cG9ydF93cml0ZV9idWYgIT0gTlVMTCkgeworCQkJCWdzX2J1Zl9mcmVlKHBvcnQtPnBvcnRfd3JpdGVfYnVmKTsKKwkJCQlwb3J0LT5wb3J0X3dyaXRlX2J1ZiA9IE5VTEw7CisJCQl9CisKKwkJCWlmIChwb3J0LT5wb3J0X29wZW5fY291bnQgPiAwIHx8IHBvcnQtPnBvcnRfaW5fdXNlKSB7CisJCQkJcG9ydC0+cG9ydF9kZXYgPSBOVUxMOworCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+cG9ydF93cml0ZV93YWl0KTsKKwkJCQlpZiAocG9ydC0+cG9ydF90dHkpIHsKKwkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5wb3J0X3R0eS0+cmVhZF93YWl0KTsKKwkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5wb3J0X3R0eS0+d3JpdGVfd2FpdCk7CisJCQkJfQorCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCQkJfSBlbHNlIHsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKKwkJCQlrZnJlZShwb3J0KTsKKwkJCX0KKworCQl9CisJfQorfQorCisvKiBDaXJjdWxhciBCdWZmZXIgKi8KKworLyoKKyAqIGdzX2J1Zl9hbGxvYworICoKKyAqIEFsbG9jYXRlIGEgY2lyY3VsYXIgYnVmZmVyIGFuZCBhbGwgYXNzb2NpYXRlZCBtZW1vcnkuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZ3NfYnVmICpnc19idWZfYWxsb2ModW5zaWduZWQgaW50IHNpemUsIGludCBrbWFsbG9jX2ZsYWdzKQoreworCXN0cnVjdCBnc19idWYgKmdiOworCisJaWYgKHNpemUgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlnYiA9IChzdHJ1Y3QgZ3NfYnVmICopa21hbGxvYyhzaXplb2Yoc3RydWN0IGdzX2J1ZiksIGttYWxsb2NfZmxhZ3MpOworCWlmIChnYiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWdiLT5idWZfYnVmID0ga21hbGxvYyhzaXplLCBrbWFsbG9jX2ZsYWdzKTsKKwlpZiAoZ2ItPmJ1Zl9idWYgPT0gTlVMTCkgeworCQlrZnJlZShnYik7CisJCXJldHVybiBOVUxMOworCX0KKworCWdiLT5idWZfc2l6ZSA9IHNpemU7CisJZ2ItPmJ1Zl9nZXQgPSBnYi0+YnVmX3B1dCA9IGdiLT5idWZfYnVmOworCisJcmV0dXJuIGdiOworfQorCisvKgorICogZ3NfYnVmX2ZyZWUKKyAqCisgKiBGcmVlIHRoZSBidWZmZXIgYW5kIGFsbCBhc3NvY2lhdGVkIG1lbW9yeS4KKyAqLwordm9pZCBnc19idWZfZnJlZShzdHJ1Y3QgZ3NfYnVmICpnYikKK3sKKwlpZiAoZ2IgIT0gTlVMTCkgeworCQlpZiAoZ2ItPmJ1Zl9idWYgIT0gTlVMTCkKKwkJCWtmcmVlKGdiLT5idWZfYnVmKTsKKwkJa2ZyZWUoZ2IpOworCX0KK30KKworLyoKKyAqIGdzX2J1Zl9jbGVhcgorICoKKyAqIENsZWFyIG91dCBhbGwgZGF0YSBpbiB0aGUgY2lyY3VsYXIgYnVmZmVyLgorICovCit2b2lkIGdzX2J1Zl9jbGVhcihzdHJ1Y3QgZ3NfYnVmICpnYikKK3sKKwlpZiAoZ2IgIT0gTlVMTCkKKwkJZ2ItPmJ1Zl9nZXQgPSBnYi0+YnVmX3B1dDsKKwkJLyogZXF1aXZhbGVudCB0byBhIGdldCBvZiBhbGwgZGF0YSBhdmFpbGFibGUgKi8KK30KKworLyoKKyAqIGdzX2J1Zl9kYXRhX2F2YWlsCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgZGF0YSBhdmFpbGFibGUgaW4gdGhlIGNpcmN1bGFyCisgKiBidWZmZXIuCisgKi8KK3Vuc2lnbmVkIGludCBnc19idWZfZGF0YV9hdmFpbChzdHJ1Y3QgZ3NfYnVmICpnYikKK3sKKwlpZiAoZ2IgIT0gTlVMTCkKKwkJcmV0dXJuIChnYi0+YnVmX3NpemUgKyBnYi0+YnVmX3B1dCAtIGdiLT5idWZfZ2V0KSAlIGdiLT5idWZfc2l6ZTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKgorICogZ3NfYnVmX3NwYWNlX2F2YWlsCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2Ygc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBjaXJjdWxhcgorICogYnVmZmVyLgorICovCit1bnNpZ25lZCBpbnQgZ3NfYnVmX3NwYWNlX2F2YWlsKHN0cnVjdCBnc19idWYgKmdiKQoreworCWlmIChnYiAhPSBOVUxMKQorCQlyZXR1cm4gKGdiLT5idWZfc2l6ZSArIGdiLT5idWZfZ2V0IC0gZ2ItPmJ1Zl9wdXQgLSAxKSAlIGdiLT5idWZfc2l6ZTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKgorICogZ3NfYnVmX3B1dAorICoKKyAqIENvcHkgZGF0YSBkYXRhIGZyb20gYSB1c2VyIGJ1ZmZlciBhbmQgcHV0IGl0IGludG8gdGhlIGNpcmN1bGFyIGJ1ZmZlci4KKyAqIFJlc3RyaWN0IHRvIHRoZSBhbW91bnQgb2Ygc3BhY2UgYXZhaWxhYmxlLgorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4KKyAqLwordW5zaWduZWQgaW50IGdzX2J1Zl9wdXQoc3RydWN0IGdzX2J1ZiAqZ2IsIGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGNvdW50KQoreworCXVuc2lnbmVkIGludCBsZW47CisKKwlpZiAoZ2IgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlsZW4gID0gZ3NfYnVmX3NwYWNlX2F2YWlsKGdiKTsKKwlpZiAoY291bnQgPiBsZW4pCisJCWNvdW50ID0gbGVuOworCisJaWYgKGNvdW50ID09IDApCisJCXJldHVybiAwOworCisJbGVuID0gZ2ItPmJ1Zl9idWYgKyBnYi0+YnVmX3NpemUgLSBnYi0+YnVmX3B1dDsKKwlpZiAoY291bnQgPiBsZW4pIHsKKwkJbWVtY3B5KGdiLT5idWZfcHV0LCBidWYsIGxlbik7CisJCW1lbWNweShnYi0+YnVmX2J1ZiwgYnVmK2xlbiwgY291bnQgLSBsZW4pOworCQlnYi0+YnVmX3B1dCA9IGdiLT5idWZfYnVmICsgY291bnQgLSBsZW47CisJfSBlbHNlIHsKKwkJbWVtY3B5KGdiLT5idWZfcHV0LCBidWYsIGNvdW50KTsKKwkJaWYgKGNvdW50IDwgbGVuKQorCQkJZ2ItPmJ1Zl9wdXQgKz0gY291bnQ7CisJCWVsc2UgLyogY291bnQgPT0gbGVuICovCisJCQlnYi0+YnVmX3B1dCA9IGdiLT5idWZfYnVmOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIGdzX2J1Zl9nZXQKKyAqCisgKiBHZXQgZGF0YSBmcm9tIHRoZSBjaXJjdWxhciBidWZmZXIgYW5kIGNvcHkgdG8gdGhlIGdpdmVuIGJ1ZmZlci4KKyAqIFJlc3RyaWN0IHRvIHRoZSBhbW91bnQgb2YgZGF0YSBhdmFpbGFibGUuCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLgorICovCit1bnNpZ25lZCBpbnQgZ3NfYnVmX2dldChzdHJ1Y3QgZ3NfYnVmICpnYiwgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWlmIChnYiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IGdzX2J1Zl9kYXRhX2F2YWlsKGdiKTsKKwlpZiAoY291bnQgPiBsZW4pCisJCWNvdW50ID0gbGVuOworCisJaWYgKGNvdW50ID09IDApCisJCXJldHVybiAwOworCisJbGVuID0gZ2ItPmJ1Zl9idWYgKyBnYi0+YnVmX3NpemUgLSBnYi0+YnVmX2dldDsKKwlpZiAoY291bnQgPiBsZW4pIHsKKwkJbWVtY3B5KGJ1ZiwgZ2ItPmJ1Zl9nZXQsIGxlbik7CisJCW1lbWNweShidWYrbGVuLCBnYi0+YnVmX2J1ZiwgY291bnQgLSBsZW4pOworCQlnYi0+YnVmX2dldCA9IGdiLT5idWZfYnVmICsgY291bnQgLSBsZW47CisJfSBlbHNlIHsKKwkJbWVtY3B5KGJ1ZiwgZ2ItPmJ1Zl9nZXQsIGNvdW50KTsKKwkJaWYgKGNvdW50IDwgbGVuKQorCQkJZ2ItPmJ1Zl9nZXQgKz0gY291bnQ7CisJCWVsc2UgLyogY291bnQgPT0gbGVuICovCisJCQlnYi0+YnVmX2dldCA9IGdiLT5idWZfYnVmOworCX0KKworCXJldHVybiBjb3VudDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91c2JzdHJpbmcuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC91c2JzdHJpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTczNTc2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VzYnN0cmluZy5jCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzIERhdmlkIEJyb3duZWxsCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8bGludXgvdXNiX2NoOS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl9nYWRnZXQuaD4KKworI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworCitzdGF0aWMgaW50IHV0ZjhfdG9fdXRmMTZsZShjb25zdCBjaGFyICpzLCBfX2xlMTYgKmNwLCB1bnNpZ25lZCBsZW4pCit7CisJaW50CWNvdW50ID0gMDsKKwl1OAljOworCXUxNgl1Y2hhcjsKKworCS8qIHRoaXMgaW5zaXN0cyBvbiBjb3JyZWN0IGVuY29kaW5ncywgdGhvdWdoIG5vdCBtaW5pbWFsIG9uZXMuCisJICogQlVUIGl0IGN1cnJlbnRseSByZWplY3RzIGxlZ2l0IDQtYnl0ZSBVVEYtOCBjb2RlIHBvaW50cywKKwkgKiB3aGljaCBuZWVkIHN1cnJvZ2F0ZSBwYWlycy4gIChVbmljb2RlIDMuMSBjYW4gdXNlIHRoZW0uKQorCSAqLworCXdoaWxlIChsZW4gIT0gMCAmJiAoYyA9ICh1OCkgKnMrKykgIT0gMCkgeworCQlpZiAodW5saWtlbHkoYyAmIDB4ODApKSB7CisJCQkvLyAyLWJ5dGUgc2VxdWVuY2U6CisJCQkvLyAwMDAwMHl5eXl5eHh4eHh4ID0gMTEweXl5eXkgMTB4eHh4eHgKKwkJCWlmICgoYyAmIDB4ZTApID09IDB4YzApIHsKKwkJCQl1Y2hhciA9IChjICYgMHgxZikgPDwgNjsKKworCQkJCWMgPSAodTgpICpzKys7CisJCQkJaWYgKChjICYgMHhjMCkgIT0gMHhjMCkKKwkJCQkJZ290byBmYWlsOworCQkJCWMgJj0gMHgzZjsKKwkJCQl1Y2hhciB8PSBjOworCisJCQkvLyAzLWJ5dGUgc2VxdWVuY2UgKG1vc3QgQ0pLViBjaGFyYWN0ZXJzKToKKwkJCS8vIHp6enp5eXl5eXl4eHh4eHggPSAxMTEwenp6eiAxMHl5eXl5eSAxMHh4eHh4eAorCQkJfSBlbHNlIGlmICgoYyAmIDB4ZjApID09IDB4ZTApIHsKKwkJCQl1Y2hhciA9IChjICYgMHgwZikgPDwgMTI7CisKKwkJCQljID0gKHU4KSAqcysrOworCQkJCWlmICgoYyAmIDB4YzApICE9IDB4YzApCisJCQkJCWdvdG8gZmFpbDsKKwkJCQljICY9IDB4M2Y7CisJCQkJdWNoYXIgfD0gYyA8PCA2OworCisJCQkJYyA9ICh1OCkgKnMrKzsKKwkJCQlpZiAoKGMgJiAweGMwKSAhPSAweGMwKQorCQkJCQlnb3RvIGZhaWw7CisJCQkJYyAmPSAweDNmOworCQkJCXVjaGFyIHw9IGM7CisKKwkJCQkvKiBubyBib2d1cyBzdXJyb2dhdGVzICovCisJCQkJaWYgKDB4ZDgwMCA8PSB1Y2hhciAmJiB1Y2hhciA8PSAweGRmZmYpCisJCQkJCWdvdG8gZmFpbDsKKworCQkJLy8gNC1ieXRlIHNlcXVlbmNlIChzdXJyb2dhdGUgcGFpcnMsIGN1cnJlbnRseSByYXJlKToKKwkJCS8vIDExMTAxMTEwd3d3d3p6enp5eSArIDExMDExMXl5eXl4eHh4eHgKKwkJCS8vICAgICA9IDExMTEwdXV1IDEwdXV6enp6IDEweXl5eXl5IDEweHh4eHh4CisJCQkvLyAodXV1dXUgPSB3d3d3ICsgMSkKKwkJCS8vIEZJWE1FIGFjY2VwdCB0aGUgc3Vycm9nYXRlIGNvZGUgcG9pbnRzIChvbmx5KQorCisJCQl9IGVsc2UKKwkJCQlnb3RvIGZhaWw7CisJCX0gZWxzZQorCQkJdWNoYXIgPSBjOworCQlwdXRfdW5hbGlnbmVkIChjcHVfdG9fbGUxNiAodWNoYXIpLCBjcCsrKTsKKwkJY291bnQrKzsKKwkJbGVuLS07CisJfQorCXJldHVybiBjb3VudDsKK2ZhaWw6CisJcmV0dXJuIC0xOworfQorCisKKy8qKgorICogdXNiX2dhZGdldF9nZXRfc3RyaW5nIC0gZmlsbCBvdXQgYSBzdHJpbmcgZGVzY3JpcHRvciAKKyAqIEB0YWJsZTogb2YgYyBzdHJpbmdzIGVuY29kZWQgdXNpbmcgVVRGLTgKKyAqIEBpZDogc3RyaW5nIGlkLCBmcm9tIGxvdyBieXRlIG9mIHdWYWx1ZSBpbiBnZXQgc3RyaW5nIGRlc2NyaXB0b3IKKyAqIEBidWY6IGF0IGxlYXN0IDI1NiBieXRlcworICoKKyAqIEZpbmRzIHRoZSBVVEYtOCBzdHJpbmcgbWF0Y2hpbmcgdGhlIElELCBhbmQgY29udmVydHMgaXQgaW50byBhCisgKiBzdHJpbmcgZGVzY3JpcHRvciBpbiB1dGYxNi1sZS4KKyAqIFJldHVybnMgbGVuZ3RoIG9mIGRlc2NyaXB0b3IgKGFsd2F5cyBldmVuKSBvciBuZWdhdGl2ZSBlcnJubworICoKKyAqIElmIHlvdXIgZHJpdmVyIG5lZWRzIHN0aW5ncyBpbiBtdWx0aXBsZSBsYW5ndWFnZXMsIHlvdSdsbCBwcm9iYWJseQorICogInN3aXRjaCAod0luZGV4KSB7IC4uLiB9IiAgaW4geW91ciBlcDAgc3RyaW5nIGRlc2NyaXB0b3IgbG9naWMsCisgKiB1c2luZyB0aGlzIHJvdXRpbmUgYWZ0ZXIgY2hvb3Npbmcgd2hpY2ggc2V0IG9mIFVURi04IHN0cmluZ3MgdG8gdXNlLgorICogTm90ZSB0aGF0IFVTLUFTQ0lJIGlzIGEgc3RyaWN0IHN1YnNldCBvZiBVVEYtODsgYW55IHN0cmluZyBieXRlcyB3aXRoCisgKiB0aGUgZWlnaHRoIGJpdCBzZXQgd2lsbCBiZSBtdWx0aWJ5dGUgVVRGLTggY2hhcmFjdGVycywgbm90IElTTy04ODU5LzEKKyAqIGNoYXJhY3RlcnMgKHdoaWNoIGFyZSBhbHNvIHdpZGVseSB1c2VkIGluIEMgc3RyaW5ncykuCisgKi8KK2ludAordXNiX2dhZGdldF9nZXRfc3RyaW5nIChzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzICp0YWJsZSwgaW50IGlkLCB1OCAqYnVmKQoreworCXN0cnVjdCB1c2Jfc3RyaW5nCSpzOworCWludAkJCWxlbjsKKworCS8qIGRlc2NyaXB0b3IgMCBoYXMgdGhlIGxhbmd1YWdlIGlkICovCisJaWYgKGlkID09IDApIHsKKwkJYnVmIFswXSA9IDQ7CisJCWJ1ZiBbMV0gPSBVU0JfRFRfU1RSSU5HOworCQlidWYgWzJdID0gKHU4KSB0YWJsZS0+bGFuZ3VhZ2U7CisJCWJ1ZiBbM10gPSAodTgpICh0YWJsZS0+bGFuZ3VhZ2UgPj4gOCk7CisJCXJldHVybiA0OworCX0KKwlmb3IgKHMgPSB0YWJsZS0+c3RyaW5nczsgcyAmJiBzLT5zOyBzKyspCisJCWlmIChzLT5pZCA9PSBpZCkKKwkJCWJyZWFrOworCisJLyogdW5yZWNvZ25pemVkOiBzdGFsbC4gKi8KKwlpZiAoIXMgfHwgIXMtPnMpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogc3RyaW5nIGRlc2NyaXB0b3JzIGhhdmUgbGVuZ3RoLCB0YWcsIHRoZW4gVVRGMTYtTEUgdGV4dCAqLworCWxlbiA9IG1pbiAoKHNpemVfdCkgMTI2LCBzdHJsZW4gKHMtPnMpKTsKKwltZW1zZXQgKGJ1ZiArIDIsIDAsIDIgKiBsZW4pOwkvKiB6ZXJvIGFsbCB0aGUgYnl0ZXMgKi8KKwlsZW4gPSB1dGY4X3RvX3V0ZjE2bGUocy0+cywgKF9fbGUxNiAqKSZidWZbMl0sIGxlbik7CisJaWYgKGxlbiA8IDApCisJCXJldHVybiAtRUlOVkFMOworCWJ1ZiBbMF0gPSAobGVuICsgMSkgKiAyOworCWJ1ZiBbMV0gPSBVU0JfRFRfU1RSSU5HOworCXJldHVybiBidWYgWzBdOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTQ5NDMyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYwpAQCAtMCwwICsxLDEzNTcgQEAKKy8qCisgKiB6ZXJvLmMgLS0gR2FkZ2V0IFplcm8sIGZvciBVU0IgZGV2ZWxvcG1lbnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBEYXZpZCBCcm93bmVsbAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG1heSBub3QgYmUgdXNlZAorICogICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBTFRFUk5BVElWRUxZLCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGF0IExpY2Vuc2Ugb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKyAqIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKy8qCisgKiBHYWRnZXQgWmVybyBvbmx5IG5lZWRzIHR3byBidWxrIGVuZHBvaW50cywgYW5kIGlzIGFuIGV4YW1wbGUgb2YgaG93IHlvdQorICogY2FuIHdyaXRlIGEgaGFyZHdhcmUtYWdub3N0aWMgZ2FkZ2V0IGRyaXZlciBydW5uaW5nIGluc2lkZSBhIFVTQiBkZXZpY2UuCisgKgorICogSGFyZHdhcmUgZGV0YWlscyBhcmUgdmlzaWJsZSAoc2VlIENPTkZJR19VU0JfWkVST18qIGJlbG93KSBidXQgZG9uJ3QKKyAqIGFmZmVjdCBtb3N0IG9mIHRoZSBkcml2ZXIuCisgKgorICogVXNlIGl0IHdpdGggdGhlIExpbnV4IGhvc3QvbWFzdGVyIHNpZGUgInVzYnRlc3QiIGRyaXZlciB0byBnZXQgYSBiYXNpYworICogZnVuY3Rpb25hbCB0ZXN0IG9mIHlvdXIgZGV2aWNlLXNpZGUgdXNiIHN0YWNrLCBvciB3aXRoICJ1c2Itc2tlbGV0b24iLgorICoKKyAqIEl0IHN1cHBvcnRzIHR3byBzaW1pbGFyIGNvbmZpZ3VyYXRpb25zLiAgT25lIHNpbmtzIHdoYXRldmVyIHRoZSB1c2IgaG9zdAorICogd3JpdGVzLCBhbmQgaW4gcmV0dXJuIHNvdXJjZXMgemVyb2VzLiAgVGhlIG90aGVyIGxvb3BzIHdoYXRldmVyIHRoZSBob3N0CisgKiB3cml0ZXMgYmFjaywgc28gdGhlIGhvc3QgY2FuIHJlYWQgaXQuICBNb2R1bGUgb3B0aW9ucyBpbmNsdWRlOgorICoKKyAqICAgYnVmbGVuPU4JCWRlZmF1bHQgTj00MDk2LCBidWZmZXIgc2l6ZSB1c2VkCisgKiAgIHFsZW49TgkJZGVmYXVsdCBOPTMyLCBob3cgbWFueSBidWZmZXJzIGluIHRoZSBsb29wYmFjayBxdWV1ZQorICogICBsb29wZGVmYXVsdAlkZWZhdWx0IGZhbHNlLCBsaXN0IGxvb3BiYWNrIGNvbmZpZyBmaXJzdAorICoKKyAqIE1hbnkgZHJpdmVycyB3aWxsIG9ubHkgaGF2ZSBvbmUgY29uZmlndXJhdGlvbiwgbGV0dGluZyB0aGVtIGJlIG11Y2gKKyAqIHNpbXBsZXIgaWYgdGhleSBhbHNvIGRvbid0IHN1cHBvcnQgaGlnaCBzcGVlZCBvcGVyYXRpb24gKGxpa2UgdGhpcworICogZHJpdmVyIGRvZXMpLgorICovCisKKyNkZWZpbmUgREVCVUcgMQorLy8gI2RlZmluZSBWRVJCT1NFCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKKyNpbmNsdWRlIDxsaW51eC91c2JfY2g5Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiX2dhZGdldC5oPgorCisjaW5jbHVkZSAiZ2FkZ2V0X2NoaXBzLmgiCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJIlN0IFBhdHJpY2sncyBEYXkgMjAwNCIKKworc3RhdGljIGNvbnN0IGNoYXIgc2hvcnRuYW1lIFtdID0gInplcm8iOworc3RhdGljIGNvbnN0IGNoYXIgbG9uZ25hbWUgW10gPSAiR2FkZ2V0IFplcm8iOworCitzdGF0aWMgY29uc3QgY2hhciBzb3VyY2Vfc2luayBbXSA9ICJzb3VyY2UgYW5kIHNpbmsgZGF0YSI7CitzdGF0aWMgY29uc3QgY2hhciBsb29wYmFjayBbXSA9ICJsb29wIGlucHV0IHRvIG91dHB1dCI7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBkcml2ZXIgYXNzdW1lcyBzZWxmLXBvd2VyZWQgaGFyZHdhcmUsIGFuZAorICogaGFzIG5vIHdheSBmb3IgdXNlcnMgdG8gdHJpZ2dlciByZW1vdGUgd2FrZXVwLgorICoKKyAqIHRoaXMgdmVyc2lvbiBhdXRvY29uZmlndXJlcyBhcyBtdWNoIGFzIHBvc3NpYmxlLAorICogd2hpY2ggaXMgcmVhc29uYWJsZSBmb3IgbW9zdCAiYnVsay1vbmx5IiBkcml2ZXJzLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqRVBfSU5fTkFNRTsJCS8qIHNvdXJjZSAqLworc3RhdGljIGNvbnN0IGNoYXIgKkVQX09VVF9OQU1FOwkJLyogc2luayAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBiaWcgZW5vdWdoIHRvIGhvbGQgb3VyIGJpZ2dlc3QgZGVzY3JpcHRvciAqLworI2RlZmluZSBVU0JfQlVGU0laCTI1NgorCitzdHJ1Y3QgemVyb19kZXYgeworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldDsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcTsJCS8qIGZvciBjb250cm9sIHJlc3BvbnNlcyAqLworCisJLyogd2hlbiBjb25maWd1cmVkLCB3ZSBoYXZlIG9uZSBvZiB0d28gY29uZmlnczoKKwkgKiAtIHNvdXJjZSBkYXRhIChpbiB0byBob3N0KSBhbmQgc2luayBpdCAob3V0IGZyb20gaG9zdCkKKwkgKiAtIG9yIGxvb3AgaXQgYmFjayAob3V0IGZyb20gaG9zdCBiYWNrIGluIHRvIGhvc3QpCisJICovCisJdTgJCQljb25maWc7CisJc3RydWN0IHVzYl9lcAkJKmluX2VwLCAqb3V0X2VwOworCisJLyogYXV0b3Jlc3VtZSB0aW1lciAqLworCXN0cnVjdCB0aW1lcl9saXN0CXJlc3VtZTsKK307CisKKyNkZWZpbmUgeHByaW50ayhkLGxldmVsLGZtdCxhcmdzLi4uKSBcCisJZGV2X3ByaW50ayhsZXZlbCAsICYoZCktPmdhZGdldC0+ZGV2ICwgZm10ICwgIyMgYXJncykKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERCRyhkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fREVCVUcgLCBmbXQgLCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREJHKGRldixmbXQsYXJncy4uLikgXAorCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgVkVSQk9TRQorI2RlZmluZSBWREJHCURCRworI2Vsc2UKKyNkZWZpbmUgVkRCRyhkZXYsZm10LGFyZ3MuLi4pIFwKKwlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogVkVSQk9TRSAqLworCisjZGVmaW5lIEVSUk9SKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9FUlIgLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBXQVJOKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9XQVJOSU5HICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgSU5GTyhkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fSU5GTyAsIGZtdCAsICMjIGFyZ3MpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB1bnNpZ25lZCBidWZsZW4gPSA0MDk2Oworc3RhdGljIHVuc2lnbmVkIHFsZW4gPSAzMjsKK3N0YXRpYyB1bnNpZ25lZCBwYXR0ZXJuID0gMDsKKworbW9kdWxlX3BhcmFtIChidWZsZW4sIHVpbnQsIFNfSVJVR098U19JV1VTUik7Cittb2R1bGVfcGFyYW0gKHFsZW4sIHVpbnQsIFNfSVJVR098U19JV1VTUik7Cittb2R1bGVfcGFyYW0gKHBhdHRlcm4sIHVpbnQsIFNfSVJVR098U19JV1VTUik7CisKKy8qCisgKiBpZiBpdCdzIG5vbnplcm8sIGF1dG9yZXN1bWUgc2F5cyBob3cgbWFueSBzZWNvbmRzIHRvIHdhaXQKKyAqIGJlZm9yZSB0cnlpbmcgdG8gd2FrZSB1cCB0aGUgaG9zdCBhZnRlciBzdXNwZW5kLgorICovCitzdGF0aWMgdW5zaWduZWQgYXV0b3Jlc3VtZSA9IDA7Cittb2R1bGVfcGFyYW0gKGF1dG9yZXN1bWUsIHVpbnQsIDApOworCisvKgorICogTm9ybWFsbHkgdGhlICJsb29wYmFjayIgY29uZmlndXJhdGlvbiBpcyBzZWNvbmQgKGluZGV4IDEpIHNvCisgKiBpdCdzIG5vdCB0aGUgZGVmYXVsdC4gIEhlcmUncyB3aGVyZSB0byBjaGFuZ2UgdGhhdCBvcmRlciwgdG8KKyAqIHdvcmsgYmV0dGVyIHdpdGggaG9zdHMgd2hlcmUgY29uZmlnIGNoYW5nZXMgYXJlIHByb2JsZW1hdGljLgorICogT3IgY29udHJvbGxlcnMgKGxpa2Ugc3VwZXJoKSB0aGF0IG9ubHkgc3VwcG9ydCBvbmUgY29uZmlnLgorICovCitzdGF0aWMgaW50IGxvb3BkZWZhdWx0ID0gMDsKKworbW9kdWxlX3BhcmFtIChsb29wZGVmYXVsdCwgYm9vbCwgU19JUlVHT3xTX0lXVVNSKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVGhhbmtzIHRvIE5ldENoaXAgVGVjaG5vbG9naWVzIGZvciBkb25hdGluZyB0aGlzIHByb2R1Y3QgSUQuCisgKgorICogRE8gTk9UIFJFVVNFIFRIRVNFIElEcyB3aXRoIGEgcHJvdG9jb2wtaW5jb21wYXRpYmxlIGRyaXZlciEhICBFdmVyISEKKyAqIEluc3RlYWQ6ICBhbGxvY2F0ZSB5b3VyIG93biwgdXNpbmcgbm9ybWFsIFVTQi1JRiBwcm9jZWR1cmVzLgorICovCisjaWZuZGVmCUNPTkZJR19VU0JfWkVST19ITlBURVNUCisjZGVmaW5lIERSSVZFUl9WRU5ET1JfTlVNCTB4MDUyNQkJLyogTmV0Q2hpcCAqLworI2RlZmluZSBEUklWRVJfUFJPRFVDVF9OVU0JMHhhNGEwCQkvKiBMaW51eC1VU0IgIkdhZGdldCBaZXJvIiAqLworI2Vsc2UKKyNkZWZpbmUgRFJJVkVSX1ZFTkRPUl9OVU0JMHgxYTBhCQkvKiBPVEcgdGVzdCBkZXZpY2UgSURzICovCisjZGVmaW5lIERSSVZFUl9QUk9EVUNUX05VTQkweGJhZGQKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogREVTQ1JJUFRPUlMgLi4uIG1vc3QgYXJlIHN0YXRpYywgYnV0IHN0cmluZ3MgYW5kIChmdWxsKQorICogY29uZmlndXJhdGlvbiBkZXNjcmlwdG9ycyBhcmUgYnVpbHQgb24gZGVtYW5kLgorICovCisKKyNkZWZpbmUgU1RSSU5HX01BTlVGQUNUVVJFUgkJMjUKKyNkZWZpbmUgU1RSSU5HX1BST0RVQ1QJCQk0MgorI2RlZmluZSBTVFJJTkdfU0VSSUFMCQkJMTAxCisjZGVmaW5lIFNUUklOR19TT1VSQ0VfU0lOSwkJMjUwCisjZGVmaW5lIFNUUklOR19MT09QQkFDSwkJCTI1MQorCisvKgorICogVGhpcyBkZXZpY2UgYWR2ZXJ0aXNlcyB0d28gY29uZmlndXJhdGlvbnM7IHRoZXNlIG51bWJlcnMgd29yaworICogb24gYSBweGEyNTAgYXMgd2VsbCBhcyBtb3JlIGZsZXhpYmxlIGhhcmR3YXJlLgorICovCisjZGVmaW5lCUNPTkZJR19TT1VSQ0VfU0lOSwkzCisjZGVmaW5lCUNPTkZJR19MT09QQkFDSwkJMgorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvcgorZGV2aWNlX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGRldmljZV9kZXNjLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFLAorCisJLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDApLAorCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX1ZFTkRPUl9TUEVDLAorCisJLmlkVmVuZG9yID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKERSSVZFUl9WRU5ET1JfTlVNKSwKKwkuaWRQcm9kdWN0ID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKERSSVZFUl9QUk9EVUNUX05VTSksCisJLmlNYW51ZmFjdHVyZXIgPQlTVFJJTkdfTUFOVUZBQ1RVUkVSLAorCS5pUHJvZHVjdCA9CQlTVFJJTkdfUFJPRFVDVCwKKwkuaVNlcmlhbE51bWJlciA9CVNUUklOR19TRVJJQUwsCisJLmJOdW1Db25maWd1cmF0aW9ucyA9CTIsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvcgorc291cmNlX3NpbmtfY29uZmlnID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBzb3VyY2Vfc2lua19jb25maWcsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DT05GSUcsCisKKwkvKiBjb21wdXRlIHdUb3RhbExlbmd0aCBvbiB0aGUgZmx5ICovCisJLmJOdW1JbnRlcmZhY2VzID0JMSwKKwkuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9CUNPTkZJR19TT1VSQ0VfU0lOSywKKwkuaUNvbmZpZ3VyYXRpb24gPQlTVFJJTkdfU09VUkNFX1NJTkssCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfQ09ORklHX0FUVF9PTkUgfCBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCisJLmJNYXhQb3dlciA9CQkxLAkvKiBzZWxmLXBvd2VyZWQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yCitsb29wYmFja19jb25maWcgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGxvb3BiYWNrX2NvbmZpZywKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NPTkZJRywKKworCS8qIGNvbXB1dGUgd1RvdGFsTGVuZ3RoIG9uIHRoZSBmbHkgKi8KKwkuYk51bUludGVyZmFjZXMgPQkxLAorCS5iQ29uZmlndXJhdGlvblZhbHVlID0JQ09ORklHX0xPT1BCQUNLLAorCS5pQ29uZmlndXJhdGlvbiA9CVNUUklOR19MT09QQkFDSywKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9DT05GSUdfQVRUX09ORSB8IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKKwkuYk1heFBvd2VyID0JCTEsCS8qIHNlbGYtcG93ZXJlZCAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfb3RnX2Rlc2NyaXB0b3IKK290Z19kZXNjcmlwdG9yID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBvdGdfZGVzY3JpcHRvciwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX09URywKKworCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX09UR19TUlAsCit9OworCisvKiBvbmUgaW50ZXJmYWNlIGluIGVhY2ggY29uZmlndXJhdGlvbiAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcgorc291cmNlX3NpbmtfaW50ZiA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2Ygc291cmNlX3NpbmtfaW50ZiwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0lOVEVSRkFDRSwKKworCS5iTnVtRW5kcG9pbnRzID0JMiwKKwkuYkludGVyZmFjZUNsYXNzID0JVVNCX0NMQVNTX1ZFTkRPUl9TUEVDLAorCS5pSW50ZXJmYWNlID0JCVNUUklOR19TT1VSQ0VfU0lOSywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yCitsb29wYmFja19pbnRmID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBsb29wYmFja19pbnRmLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAorCisJLmJOdW1FbmRwb2ludHMgPQkyLAorCS5iSW50ZXJmYWNlQ2xhc3MgPQlVU0JfQ0xBU1NfVkVORE9SX1NQRUMsCisJLmlJbnRlcmZhY2UgPQkJU1RSSU5HX0xPT1BCQUNLLAorfTsKKworLyogdHdvIGZ1bGwgc3BlZWQgYnVsayBlbmRwb2ludHM7IHRoZWlyIHVzZSBpcyBjb25maWctZGVwZW5kZW50ICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKK2ZzX3NvdXJjZV9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgorZnNfc2lua19kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfT1VULAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpmc19zb3VyY2Vfc2lua19mdW5jdGlvbiBbXSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb3RnX2Rlc2NyaXB0b3IsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJnNvdXJjZV9zaW5rX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3NpbmtfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc291cmNlX2Rlc2MsCisJTlVMTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpmc19sb29wYmFja19mdW5jdGlvbiBbXSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb3RnX2Rlc2NyaXB0b3IsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmxvb3BiYWNrX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3NpbmtfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc291cmNlX2Rlc2MsCisJTlVMTCwKK307CisKKyNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKworLyoKKyAqIHVzYiAyLjAgZGV2aWNlcyBuZWVkIHRvIGV4cG9zZSBib3RoIGhpZ2ggc3BlZWQgYW5kIGZ1bGwgc3BlZWQKKyAqIGRlc2NyaXB0b3JzLCB1bmxlc3MgdGhleSBvbmx5IHJ1biBhdCBmdWxsIHNwZWVkLgorICoKKyAqIHRoYXQgbWVhbnMgYWx0ZXJuYXRlIGVuZHBvaW50IGRlc2NyaXB0b3JzIChiaWdnZXIgcGFja2V0cykKKyAqIGFuZCBhICJkZXZpY2UgcXVhbGlmaWVyIiAuLi4gcGx1cyBtb3JlIGNvbnN0cnVjdGlvbiBvcHRpb25zCisgKiBmb3IgdGhlIGNvbmZpZyBkZXNjcmlwdG9yLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKK2hzX3NvdXJjZV9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNiAoNTEyKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKK2hzX3NpbmtfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDUxMiksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9xdWFsaWZpZXJfZGVzY3JpcHRvcgorZGV2X3F1YWxpZmllciA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2YgZGV2X3F1YWxpZmllciwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRV9RVUFMSUZJRVIsCisKKwkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwMCksCisJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfVkVORE9SX1NQRUMsCisKKwkuYk51bUNvbmZpZ3VyYXRpb25zID0JMiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19zb3VyY2Vfc2lua19mdW5jdGlvbiBbXSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb3RnX2Rlc2NyaXB0b3IsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJnNvdXJjZV9zaW5rX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX3NvdXJjZV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19zaW5rX2Rlc2MsCisJTlVMTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19sb29wYmFja19mdW5jdGlvbiBbXSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb3RnX2Rlc2NyaXB0b3IsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmxvb3BiYWNrX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX3NvdXJjZV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19zaW5rX2Rlc2MsCisJTlVMTCwKK307CisKKy8qIG1heHBhY2tldCBhbmQgb3RoZXIgdHJhbnNmZXIgY2hhcmFjdGVyaXN0aWNzIHZhcnkgYnkgc3BlZWQuICovCisjZGVmaW5lIGVwX2Rlc2MoZyxocyxmcykgKCgoZyktPnNwZWVkPT1VU0JfU1BFRURfSElHSCk/KGhzKTooZnMpKQorCisjZWxzZQorCisvKiBpZiB0aGVyZSdzIG5vIGhpZ2ggc3BlZWQgc3VwcG9ydCwgbWF4cGFja2V0IGRvZXNuJ3QgY2hhbmdlLiAqLworI2RlZmluZSBlcF9kZXNjKGcsaHMsZnMpIGZzCisKKyNlbmRpZgkvKiAhQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEICovCisKK3N0YXRpYyBjaGFyCQkJCW1hbnVmYWN0dXJlciBbNTBdOworc3RhdGljIGNoYXIJCQkJc2VyaWFsIFs0MF07CisKKy8qIHN0YXRpYyBzdHJpbmdzLCBpbiBVVEYtOCAqLworc3RhdGljIHN0cnVjdCB1c2Jfc3RyaW5nCQlzdHJpbmdzIFtdID0geworCXsgU1RSSU5HX01BTlVGQUNUVVJFUiwgbWFudWZhY3R1cmVyLCB9LAorCXsgU1RSSU5HX1BST0RVQ1QsIGxvbmduYW1lLCB9LAorCXsgU1RSSU5HX1NFUklBTCwgc2VyaWFsLCB9LAorCXsgU1RSSU5HX0xPT1BCQUNLLCBsb29wYmFjaywgfSwKKwl7IFNUUklOR19TT1VSQ0VfU0lOSywgc291cmNlX3NpbmssIH0sCisJeyAgfQkJCS8qIGVuZCBvZiBsaXN0ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncwlzdHJpbmd0YWIgPSB7CisJLmxhbmd1YWdlCT0gMHgwNDA5LAkvKiBlbi11cyAqLworCS5zdHJpbmdzCT0gc3RyaW5ncywKK307CisKKy8qCisgKiBjb25maWcgZGVzY3JpcHRvcnMgYXJlIGFsc28gaGFuZGNyYWZ0ZWQuICB0aGVzZSBtdXN0IGFncmVlIHdpdGggY29kZQorICogdGhhdCBzZXRzIGNvbmZpZ3VyYXRpb25zLCBhbmQgd2l0aCBjb2RlIG1hbmFnaW5nIGludGVyZmFjZXMgYW5kIHRoZWlyCisgKiBhbHRzZXR0aW5ncy4gIG90aGVyIGNvbXBsZXhpdHkgbWF5IGNvbWUgZnJvbToKKyAqCisgKiAgLSBoaWdoIHNwZWVkIHN1cHBvcnQsIGluY2x1ZGluZyAib3RoZXIgc3BlZWQgY29uZmlnIiBydWxlcworICogIC0gbXVsdGlwbGUgY29uZmlndXJhdGlvbnMKKyAqICAtIGludGVyZmFjZXMgd2l0aCBhbHRlcm5hdGUgc2V0dGluZ3MKKyAqICAtIGVtYmVkZGVkIGNsYXNzIG9yIHZlbmRvci1zcGVjaWZpYyBkZXNjcmlwdG9ycworICoKKyAqIHRoaXMgaGFuZGxlcyBoaWdoIHNwZWVkLCBhbmQgaGFzIGEgc2Vjb25kIGNvbmZpZyB0aGF0IGNvdWxkIGFzIGVhc2lseQorICogaGF2ZSBiZWVuIGFuIGFsdGVybmF0ZSBpbnRlcmZhY2Ugc2V0dGluZyAob24gbW9zdCBoYXJkd2FyZSkuCisgKgorICogTk9URTogIHRvIGRlbW9uc3RyYXRlIChhbmQgdGVzdCkgbW9yZSBVU0IgY2FwYWJpbGl0aWVzLCB0aGlzIGRyaXZlcgorICogc2hvdWxkIGluY2x1ZGUgYW4gYWx0c2V0dGluZyB0byB0ZXN0IGludGVycnVwdCB0cmFuc2ZlcnMsIGluY2x1ZGluZworICogaGlnaCBiYW5kd2lkdGggbW9kZXMgYXQgaGlnaCBzcGVlZC4gIChNYXliZSB3b3JrIGxpa2UgSW50ZWwncyB0ZXN0CisgKiBkZXZpY2U/KQorICovCitzdGF0aWMgaW50Citjb25maWdfYnVmIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LAorCQl1OCAqYnVmLCB1OCB0eXBlLCB1bnNpZ25lZCBpbmRleCkKK3sKKwlpbnQJCQkJaXNfc291cmNlX3Npbms7CisJaW50CQkJCWxlbjsKKwljb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICoqZnVuY3Rpb247CisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECisJaW50CQkJCWhzID0gKGdhZGdldC0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpOworI2VuZGlmCisKKwkvKiB0d28gY29uZmlndXJhdGlvbnMgd2lsbCBhbHdheXMgYmUgaW5kZXggMCBhbmQgaW5kZXggMSAqLworCWlmIChpbmRleCA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCWlzX3NvdXJjZV9zaW5rID0gbG9vcGRlZmF1bHQgPyAoaW5kZXggPT0gMSkgOiAoaW5kZXggPT0gMCk7CisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKwlpZiAodHlwZSA9PSBVU0JfRFRfT1RIRVJfU1BFRURfQ09ORklHKQorCQlocyA9ICFoczsKKwlpZiAoaHMpCisJCWZ1bmN0aW9uID0gaXNfc291cmNlX3NpbmsKKwkJCT8gaHNfc291cmNlX3NpbmtfZnVuY3Rpb24KKwkJCTogaHNfbG9vcGJhY2tfZnVuY3Rpb247CisJZWxzZQorI2VuZGlmCisJCWZ1bmN0aW9uID0gaXNfc291cmNlX3NpbmsKKwkJCT8gZnNfc291cmNlX3NpbmtfZnVuY3Rpb24KKwkJCTogZnNfbG9vcGJhY2tfZnVuY3Rpb247CisKKwkvKiBmb3Igbm93LCBkb24ndCBhZHZlcnRpc2Ugc3JwLW9ubHkgZGV2aWNlcyAqLworCWlmICghZ2FkZ2V0LT5pc19vdGcpCisJCWZ1bmN0aW9uKys7CisKKwlsZW4gPSB1c2JfZ2FkZ2V0X2NvbmZpZ19idWYgKGlzX3NvdXJjZV9zaW5rCisJCQkJCT8gJnNvdXJjZV9zaW5rX2NvbmZpZworCQkJCQk6ICZsb29wYmFja19jb25maWcsCisJCQlidWYsIFVTQl9CVUZTSVosIGZ1bmN0aW9uKTsKKwlpZiAobGVuIDwgMCkKKwkJcmV0dXJuIGxlbjsKKwkoKHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgKikgYnVmKS0+YkRlc2NyaXB0b3JUeXBlID0gdHlwZTsKKwlyZXR1cm4gbGVuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHVzYl9yZXF1ZXN0ICoKK2FsbG9jX2VwX3JlcSAoc3RydWN0IHVzYl9lcCAqZXAsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcTsKKworCXJlcSA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0IChlcCwgR0ZQX0FUT01JQyk7CisJaWYgKHJlcSkgeworCQlyZXEtPmxlbmd0aCA9IGxlbmd0aDsKKwkJcmVxLT5idWYgPSB1c2JfZXBfYWxsb2NfYnVmZmVyIChlcCwgbGVuZ3RoLAorCQkJCSZyZXEtPmRtYSwgR0ZQX0FUT01JQyk7CisJCWlmICghcmVxLT5idWYpIHsKKwkJCXVzYl9lcF9mcmVlX3JlcXVlc3QgKGVwLCByZXEpOworCQkJcmVxID0gTlVMTDsKKwkJfQorCX0KKwlyZXR1cm4gcmVxOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2VwX3JlcSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCWlmIChyZXEtPmJ1ZikKKwkJdXNiX2VwX2ZyZWVfYnVmZmVyIChlcCwgcmVxLT5idWYsIHJlcS0+ZG1hLCByZXEtPmxlbmd0aCk7CisJdXNiX2VwX2ZyZWVfcmVxdWVzdCAoZXAsIHJlcSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIG9wdGlvbmFsbHkgcmVxdWlyZSBzcGVjaWZpYyBzb3VyY2Uvc2luayBkYXRhIHBhdHRlcm5zICAqLworCitzdGF0aWMgaW50CitjaGVja19yZWFkX2RhdGEgKAorCXN0cnVjdCB6ZXJvX2RldgkJKmRldiwKKwlzdHJ1Y3QgdXNiX2VwCQkqZXAsCisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXEKKykKK3sKKwl1bnNpZ25lZAlpOworCXU4CQkqYnVmID0gcmVxLT5idWY7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVxLT5hY3R1YWw7IGkrKywgYnVmKyspIHsKKwkJc3dpdGNoIChwYXR0ZXJuKSB7CisJCS8qIGFsbC16ZXJvZXMgaGFzIG5vIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgKi8KKwkJY2FzZSAwOgorCQkJaWYgKCpidWYgPT0gMCkKKwkJCQljb250aW51ZTsKKwkJCWJyZWFrOworCQkvKiBtb2Q2MyBzdGF5cyBpbiBzeW5jIHdpdGggc2hvcnQtdGVybWluYXRlZCB0cmFuc2ZlcnMsCisJCSAqIG9yIG90aGVyd2lzZSB3aGVuIGhvc3QgYW5kIGdhZGdldCBhZ3JlZSBvbiBob3cgbGFyZ2UKKwkJICogZWFjaCB1c2IgdHJhbnNmZXIgcmVxdWVzdCBzaG91bGQgYmUuICByZXN5bmMgaXMgZG9uZQorCQkgKiB3aXRoIHNldF9pbnRlcmZhY2Ugb3Igc2V0X2NvbmZpZy4KKwkJICovCisJCWNhc2UgMToKKwkJCWlmICgqYnVmID09ICh1OCkoaSAlIDYzKSkKKwkJCQljb250aW51ZTsKKwkJCWJyZWFrOworCQl9CisJCUVSUk9SIChkZXYsICJiYWQgT1VUIGJ5dGUsIGJ1ZiBbJWRdID0gJWRcbiIsIGksICpidWYpOworCQl1c2JfZXBfc2V0X2hhbHQgKGVwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorcmVpbml0X3dyaXRlX2RhdGEgKAorCXN0cnVjdCB6ZXJvX2RldgkJKmRldiwKKwlzdHJ1Y3QgdXNiX2VwCQkqZXAsCisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXEKKykKK3sKKwl1bnNpZ25lZAlpOworCXU4CQkqYnVmID0gcmVxLT5idWY7CisKKwlzd2l0Y2ggKHBhdHRlcm4pIHsKKwljYXNlIDA6CisJCW1lbXNldCAocmVxLT5idWYsIDAsIHJlcS0+bGVuZ3RoKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlmb3IgIChpID0gMDsgaSA8IHJlcS0+bGVuZ3RoOyBpKyspCisJCQkqYnVmKysgPSAodTgpIChpICUgNjMpOworCQlicmVhazsKKwl9Cit9CisKKy8qIGlmIHRoZXJlIGlzIG9ubHkgb25lIHJlcXVlc3QgaW4gdGhlIHF1ZXVlLCB0aGVyZSdsbCBhbHdheXMgYmUgYW4KKyAqIGlycSBkZWxheSBiZXR3ZWVuIGVuZCBvZiBvbmUgcmVxdWVzdCBhbmQgc3RhcnQgb2YgdGhlIG5leHQuCisgKiB0aGF0IHByZXZlbnRzIHVzaW5nIGhhcmR3YXJlIGRtYSBxdWV1ZXMuCisgKi8KK3N0YXRpYyB2b2lkIHNvdXJjZV9zaW5rX2NvbXBsZXRlIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IHplcm9fZGV2CSpkZXYgPSBlcC0+ZHJpdmVyX2RhdGE7CisJaW50CQlzdGF0dXMgPSByZXEtPnN0YXR1czsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisKKwljYXNlIDA6IAkJCS8qIG5vcm1hbCBjb21wbGV0aW9uPyAqLworCQlpZiAoZXAgPT0gZGV2LT5vdXRfZXApCisJCQljaGVja19yZWFkX2RhdGEgKGRldiwgZXAsIHJlcSk7CisJCWVsc2UKKwkJCXJlaW5pdF93cml0ZV9kYXRhIChkZXYsIGVwLCByZXEpOworCQlicmVhazsKKworCS8qIHRoaXMgZW5kcG9pbnQgaXMgbm9ybWFsbHkgYWN0aXZlIHdoaWxlIHdlJ3JlIGNvbmZpZ3VyZWQgKi8KKwljYXNlIC1FQ09OTkFCT1JURUQ6IAkJLyogaGFyZHdhcmUgZm9yY2VkIGVwIHJlc2V0ICovCisJY2FzZSAtRUNPTk5SRVNFVDoJCS8qIHJlcXVlc3QgZGVxdWV1ZWQgKi8KKwljYXNlIC1FU0hVVERPV046CQkvKiBkaXNjb25uZWN0IGZyb20gaG9zdCAqLworCQlWREJHIChkZXYsICIlcyBnb25lICglZCksICVkLyVkXG4iLCBlcC0+bmFtZSwgc3RhdHVzLAorCQkJCXJlcS0+YWN0dWFsLCByZXEtPmxlbmd0aCk7CisJCWlmIChlcCA9PSBkZXYtPm91dF9lcCkKKwkJCWNoZWNrX3JlYWRfZGF0YSAoZGV2LCBlcCwgcmVxKTsKKwkJZnJlZV9lcF9yZXEgKGVwLCByZXEpOworCQlyZXR1cm47CisKKwljYXNlIC1FT1ZFUkZMT1c6CQkvKiBidWZmZXIgb3ZlcnJ1biBvbiByZWFkIG1lYW5zIHRoYXQKKwkJCQkJICogd2UgZGlkbid0IHByb3ZpZGUgYSBiaWcgZW5vdWdoCisJCQkJCSAqIGJ1ZmZlci4KKwkJCQkJICovCisJZGVmYXVsdDoKKyNpZiAxCisJCURCRyAoZGV2LCAiJXMgY29tcGxldGUgLS0+ICVkLCAlZC8lZFxuIiwgZXAtPm5hbWUsCisJCQkJc3RhdHVzLCByZXEtPmFjdHVhbCwgcmVxLT5sZW5ndGgpOworI2VuZGlmCisJY2FzZSAtRVJFTU9URUlPOgkJLyogc2hvcnQgcmVhZCAqLworCQlicmVhazsKKwl9CisKKwlzdGF0dXMgPSB1c2JfZXBfcXVldWUgKGVwLCByZXEsIEdGUF9BVE9NSUMpOworCWlmIChzdGF0dXMpIHsKKwkJRVJST1IgKGRldiwgImtpbGwgJXM6ICByZXN1Ym1pdCAlZCBieXRlcyAtLT4gJWRcbiIsCisJCQkJZXAtPm5hbWUsIHJlcS0+bGVuZ3RoLCBzdGF0dXMpOworCQl1c2JfZXBfc2V0X2hhbHQgKGVwKTsKKwkJLyogRklYTUUgcmVjb3ZlciBsYXRlciAuLi4gc29tZWhvdyAqLworCX0KK30KKworc3RhdGljIHN0cnVjdCB1c2JfcmVxdWVzdCAqCitzb3VyY2Vfc2lua19zdGFydF9lcCAoc3RydWN0IHVzYl9lcCAqZXAsIGludCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7CisJaW50CQkJc3RhdHVzOworCisJcmVxID0gYWxsb2NfZXBfcmVxIChlcCwgYnVmbGVuKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQgKHJlcS0+YnVmLCAwLCByZXEtPmxlbmd0aCk7CisJcmVxLT5jb21wbGV0ZSA9IHNvdXJjZV9zaW5rX2NvbXBsZXRlOworCisJaWYgKHN0cmNtcCAoZXAtPm5hbWUsIEVQX0lOX05BTUUpID09IDApCisJCXJlaW5pdF93cml0ZV9kYXRhIChlcC0+ZHJpdmVyX2RhdGEsIGVwLCByZXEpOworCisJc3RhdHVzID0gdXNiX2VwX3F1ZXVlIChlcCwgcmVxLCBnZnBfZmxhZ3MpOworCWlmIChzdGF0dXMpIHsKKwkJc3RydWN0IHplcm9fZGV2CSpkZXYgPSBlcC0+ZHJpdmVyX2RhdGE7CisKKwkJRVJST1IgKGRldiwgInN0YXJ0ICVzIC0tPiAlZFxuIiwgZXAtPm5hbWUsIHN0YXR1cyk7CisJCWZyZWVfZXBfcmVxIChlcCwgcmVxKTsKKwkJcmVxID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gcmVxOworfQorCitzdGF0aWMgaW50CitzZXRfc291cmNlX3NpbmtfY29uZmlnIChzdHJ1Y3QgemVyb19kZXYgKmRldiwgaW50IGdmcF9mbGFncykKK3sKKwlpbnQJCQlyZXN1bHQgPSAwOworCXN0cnVjdCB1c2JfZXAJCSplcDsKKwlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0ID0gZGV2LT5nYWRnZXQ7CisKKwlnYWRnZXRfZm9yX2VhY2hfZXAgKGVwLCBnYWRnZXQpIHsKKwkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpkOworCisJCS8qIG9uZSBlbmRwb2ludCB3cml0ZXMgKHNvdXJjZXMpIHplcm9lcyBpbiAodG8gdGhlIGhvc3QpICovCisJCWlmIChzdHJjbXAgKGVwLT5uYW1lLCBFUF9JTl9OQU1FKSA9PSAwKSB7CisJCQlkID0gZXBfZGVzYyAoZ2FkZ2V0LCAmaHNfc291cmNlX2Rlc2MsICZmc19zb3VyY2VfZGVzYyk7CisJCQlyZXN1bHQgPSB1c2JfZXBfZW5hYmxlIChlcCwgZCk7CisJCQlpZiAocmVzdWx0ID09IDApIHsKKwkJCQllcC0+ZHJpdmVyX2RhdGEgPSBkZXY7CisJCQkJaWYgKHNvdXJjZV9zaW5rX3N0YXJ0X2VwIChlcCwgZ2ZwX2ZsYWdzKSAhPSAwKSB7CisJCQkJCWRldi0+aW5fZXAgPSBlcDsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCXVzYl9lcF9kaXNhYmxlIChlcCk7CisJCQkJcmVzdWx0ID0gLUVJTzsKKwkJCX0KKworCQkvKiBvbmUgZW5kcG9pbnQgcmVhZHMgKHNpbmtzKSBhbnl0aGluZyBvdXQgKGZyb20gdGhlIGhvc3QpICovCisJCX0gZWxzZSBpZiAoc3RyY21wIChlcC0+bmFtZSwgRVBfT1VUX05BTUUpID09IDApIHsKKwkJCWQgPSBlcF9kZXNjIChnYWRnZXQsICZoc19zaW5rX2Rlc2MsICZmc19zaW5rX2Rlc2MpOworCQkJcmVzdWx0ID0gdXNiX2VwX2VuYWJsZSAoZXAsIGQpOworCQkJaWYgKHJlc3VsdCA9PSAwKSB7CisJCQkJZXAtPmRyaXZlcl9kYXRhID0gZGV2OworCQkJCWlmIChzb3VyY2Vfc2lua19zdGFydF9lcCAoZXAsIGdmcF9mbGFncykgIT0gMCkgeworCQkJCQlkZXYtPm91dF9lcCA9IGVwOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJdXNiX2VwX2Rpc2FibGUgKGVwKTsKKwkJCQlyZXN1bHQgPSAtRUlPOworCQkJfQorCisJCS8qIGlnbm9yZSBhbnkgb3RoZXIgZW5kcG9pbnRzICovCisJCX0gZWxzZQorCQkJY29udGludWU7CisKKwkJLyogc3RvcCBvbiBlcnJvciAqLworCQlFUlJPUiAoZGV2LCAiY2FuJ3Qgc3RhcnQgJXMsIHJlc3VsdCAlZFxuIiwgZXAtPm5hbWUsIHJlc3VsdCk7CisJCWJyZWFrOworCX0KKwlpZiAocmVzdWx0ID09IDApCisJCURCRyAoZGV2LCAiYnVmbGVuICVkXG4iLCBidWZsZW4pOworCisJLyogY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjbGVhbnVwIG9uIGVycm9yICovCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgbG9vcGJhY2tfY29tcGxldGUgKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgemVyb19kZXYJKmRldiA9IGVwLT5kcml2ZXJfZGF0YTsKKwlpbnQJCXN0YXR1cyA9IHJlcS0+c3RhdHVzOworCisJc3dpdGNoIChzdGF0dXMpIHsKKworCWNhc2UgMDogCQkJLyogbm9ybWFsIGNvbXBsZXRpb24/ICovCisJCWlmIChlcCA9PSBkZXYtPm91dF9lcCkgeworCQkJLyogbG9vcCB0aGlzIE9VVCBwYWNrZXQgYmFjayBJTiB0byB0aGUgaG9zdCAqLworCQkJcmVxLT56ZXJvID0gKHJlcS0+YWN0dWFsIDwgcmVxLT5sZW5ndGgpOworCQkJcmVxLT5sZW5ndGggPSByZXEtPmFjdHVhbDsKKwkJCXN0YXR1cyA9IHVzYl9lcF9xdWV1ZSAoZGV2LT5pbl9lcCwgcmVxLCBHRlBfQVRPTUlDKTsKKwkJCWlmIChzdGF0dXMgPT0gMCkKKwkJCQlyZXR1cm47CisKKwkJCS8qICJzaG91bGQgbmV2ZXIgZ2V0IGhlcmUiICovCisJCQlFUlJPUiAoZGV2LCAiY2FuJ3QgbG9vcCAlcyB0byAlczogJWRcbiIsCisJCQkJZXAtPm5hbWUsIGRldi0+aW5fZXAtPm5hbWUsCisJCQkJc3RhdHVzKTsKKwkJfQorCisJCS8qIHF1ZXVlIHRoZSBidWZmZXIgZm9yIHNvbWUgbGF0ZXIgT1VUIHBhY2tldCAqLworCQlyZXEtPmxlbmd0aCA9IGJ1ZmxlbjsKKwkJc3RhdHVzID0gdXNiX2VwX3F1ZXVlIChkZXYtPm91dF9lcCwgcmVxLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHN0YXR1cyA9PSAwKQorCQkJcmV0dXJuOworCisJCS8qICJzaG91bGQgbmV2ZXIgZ2V0IGhlcmUiICovCisJCS8qIEZBTExUSFJPVUdIICovCisKKwlkZWZhdWx0OgorCQlFUlJPUiAoZGV2LCAiJXMgbG9vcCBjb21wbGV0ZSAtLT4gJWQsICVkLyVkXG4iLCBlcC0+bmFtZSwKKwkJCQlzdGF0dXMsIHJlcS0+YWN0dWFsLCByZXEtPmxlbmd0aCk7CisJCS8qIEZBTExUSFJPVUdIICovCisKKwkvKiBOT1RFOiAgc2luY2UgdGhpcyBkcml2ZXIgZG9lc24ndCBtYWludGFpbiBhbiBleHBsaWNpdCByZWNvcmQKKwkgKiBvZiByZXF1ZXN0cyBpdCBzdWJtaXR0ZWQgKGp1c3QgbWFpbnRhaW5zIHFsZW4gY291bnQpLCB3ZQorCSAqIHJlbHkgb24gdGhlIGhhcmR3YXJlIGRyaXZlciB0byBjbGVhbiB1cCBvbiBkaXNjb25uZWN0IG9yCisJICogZW5kcG9pbnQgZGlzYWJsZS4KKwkgKi8KKwljYXNlIC1FQ09OTkFCT1JURUQ6IAkJLyogaGFyZHdhcmUgZm9yY2VkIGVwIHJlc2V0ICovCisJY2FzZSAtRUNPTk5SRVNFVDoJCS8qIHJlcXVlc3QgZGVxdWV1ZWQgKi8KKwljYXNlIC1FU0hVVERPV046CQkvKiBkaXNjb25uZWN0IGZyb20gaG9zdCAqLworCQlmcmVlX2VwX3JlcSAoZXAsIHJlcSk7CisJCXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK3NldF9sb29wYmFja19jb25maWcgKHN0cnVjdCB6ZXJvX2RldiAqZGV2LCBpbnQgZ2ZwX2ZsYWdzKQoreworCWludAkJCXJlc3VsdCA9IDA7CisJc3RydWN0IHVzYl9lcAkJKmVwOworCXN0cnVjdCB1c2JfZ2FkZ2V0CSpnYWRnZXQgPSBkZXYtPmdhZGdldDsKKworCWdhZGdldF9mb3JfZWFjaF9lcCAoZXAsIGdhZGdldCkgeworCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmQ7CisKKwkJLyogb25lIGVuZHBvaW50IHdyaXRlcyBkYXRhIGJhY2sgSU4gdG8gdGhlIGhvc3QgKi8KKwkJaWYgKHN0cmNtcCAoZXAtPm5hbWUsIEVQX0lOX05BTUUpID09IDApIHsKKwkJCWQgPSBlcF9kZXNjIChnYWRnZXQsICZoc19zb3VyY2VfZGVzYywgJmZzX3NvdXJjZV9kZXNjKTsKKwkJCXJlc3VsdCA9IHVzYl9lcF9lbmFibGUgKGVwLCBkKTsKKwkJCWlmIChyZXN1bHQgPT0gMCkgeworCQkJCWVwLT5kcml2ZXJfZGF0YSA9IGRldjsKKwkJCQlkZXYtPmluX2VwID0gZXA7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJLyogb25lIGVuZHBvaW50IGp1c3QgcmVhZHMgT1VUIHBhY2tldHMgKi8KKwkJfSBlbHNlIGlmIChzdHJjbXAgKGVwLT5uYW1lLCBFUF9PVVRfTkFNRSkgPT0gMCkgeworCQkJZCA9IGVwX2Rlc2MgKGdhZGdldCwgJmhzX3NpbmtfZGVzYywgJmZzX3NpbmtfZGVzYyk7CisJCQlyZXN1bHQgPSB1c2JfZXBfZW5hYmxlIChlcCwgZCk7CisJCQlpZiAocmVzdWx0ID09IDApIHsKKwkJCQllcC0+ZHJpdmVyX2RhdGEgPSBkZXY7CisJCQkJZGV2LT5vdXRfZXAgPSBlcDsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkvKiBpZ25vcmUgYW55IG90aGVyIGVuZHBvaW50cyAqLworCQl9IGVsc2UKKwkJCWNvbnRpbnVlOworCisJCS8qIHN0b3Agb24gZXJyb3IgKi8KKwkJRVJST1IgKGRldiwgImNhbid0IGVuYWJsZSAlcywgcmVzdWx0ICVkXG4iLCBlcC0+bmFtZSwgcmVzdWx0KTsKKwkJYnJlYWs7CisJfQorCisJLyogYWxsb2NhdGUgYSBidW5jaCBvZiByZWFkIGJ1ZmZlcnMgYW5kIHF1ZXVlIHRoZW0gYWxsIGF0IG9uY2UuCisJICogd2UgYnVmZmVyIGF0IG1vc3QgJ3FsZW4nIHRyYW5zZmVyczsgZmV3ZXIgaWYgYW55IG5lZWQgbW9yZQorCSAqIHRoYW4gJ2J1ZmxlbicgYnl0ZXMgZWFjaC4KKwkgKi8KKwlpZiAocmVzdWx0ID09IDApIHsKKwkJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7CisJCXVuc2lnbmVkCQlpOworCisJCWVwID0gZGV2LT5vdXRfZXA7CisJCWZvciAoaSA9IDA7IGkgPCBxbGVuICYmIHJlc3VsdCA9PSAwOyBpKyspIHsKKwkJCXJlcSA9IGFsbG9jX2VwX3JlcSAoZXAsIGJ1Zmxlbik7CisJCQlpZiAocmVxKSB7CisJCQkJcmVxLT5jb21wbGV0ZSA9IGxvb3BiYWNrX2NvbXBsZXRlOworCQkJCXJlc3VsdCA9IHVzYl9lcF9xdWV1ZSAoZXAsIHJlcSwgR0ZQX0FUT01JQyk7CisJCQkJaWYgKHJlc3VsdCkKKwkJCQkJREJHIChkZXYsICIlcyBxdWV1ZSByZXEgLS0+ICVkXG4iLAorCQkJCQkJCWVwLT5uYW1lLCByZXN1bHQpOworCQkJfSBlbHNlCisJCQkJcmVzdWx0ID0gLUVOT01FTTsKKwkJfQorCX0KKwlpZiAocmVzdWx0ID09IDApCisJCURCRyAoZGV2LCAicWxlbiAlZCwgYnVmbGVuICVkXG4iLCBxbGVuLCBidWZsZW4pOworCisJLyogY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjbGVhbnVwIG9uIGVycm9yICovCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgemVyb19yZXNldF9jb25maWcgKHN0cnVjdCB6ZXJvX2RldiAqZGV2KQoreworCWlmIChkZXYtPmNvbmZpZyA9PSAwKQorCQlyZXR1cm47CisKKwlEQkcgKGRldiwgInJlc2V0IGNvbmZpZ1xuIik7CisKKwkvKiBqdXN0IGRpc2FibGUgZW5kcG9pbnRzLCBmb3JjaW5nIGNvbXBsZXRpb24gb2YgcGVuZGluZyBpL28uCisJICogYWxsIG91ciBjb21wbGV0aW9uIGhhbmRsZXJzIGZyZWUgdGhlaXIgcmVxdWVzdHMgaW4gdGhpcyBjYXNlLgorCSAqLworCWlmIChkZXYtPmluX2VwKSB7CisJCXVzYl9lcF9kaXNhYmxlIChkZXYtPmluX2VwKTsKKwkJZGV2LT5pbl9lcCA9IE5VTEw7CisJfQorCWlmIChkZXYtPm91dF9lcCkgeworCQl1c2JfZXBfZGlzYWJsZSAoZGV2LT5vdXRfZXApOworCQlkZXYtPm91dF9lcCA9IE5VTEw7CisJfQorCWRldi0+Y29uZmlnID0gMDsKKwlkZWxfdGltZXIgKCZkZXYtPnJlc3VtZSk7Cit9CisKKy8qIGNoYW5nZSBvdXIgb3BlcmF0aW9uYWwgY29uZmlnLiAgdGhpcyBjb2RlIG11c3QgYWdyZWUgd2l0aCB0aGUgY29kZQorICogdGhhdCByZXR1cm5zIGNvbmZpZyBkZXNjcmlwdG9ycywgYW5kIGFsdHNldHRpbmcgY29kZS4KKyAqCisgKiBpdCdzIGFsc28gcmVzcG9uc2libGUgZm9yIHBvd2VyIG1hbmFnZW1lbnQgaW50ZXJhY3Rpb25zLiBzb21lCisgKiBjb25maWd1cmF0aW9ucyBtaWdodCBub3Qgd29yayB3aXRoIG91ciBjdXJyZW50IHBvd2VyIHNvdXJjZXMuCisgKgorICogbm90ZSB0aGF0IHNvbWUgZGV2aWNlIGNvbnRyb2xsZXIgaGFyZHdhcmUgd2lsbCBjb25zdHJhaW4gd2hhdCB0aGlzCisgKiBjb2RlIGNhbiBkbywgcGVyaGFwcyBieSBkaXNhbGxvd2luZyBtb3JlIHRoYW4gb25lIGNvbmZpZ3VyYXRpb24gb3IKKyAqIGJ5IGxpbWl0aW5nIGNvbmZpZ3VyYXRpb24gY2hvaWNlcyAobGlrZSB0aGUgcHhhMnh4KS4KKyAqLworc3RhdGljIGludAoremVyb19zZXRfY29uZmlnIChzdHJ1Y3QgemVyb19kZXYgKmRldiwgdW5zaWduZWQgbnVtYmVyLCBpbnQgZ2ZwX2ZsYWdzKQoreworCWludAkJCXJlc3VsdCA9IDA7CisJc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldCA9IGRldi0+Z2FkZ2V0OworCisJaWYgKG51bWJlciA9PSBkZXYtPmNvbmZpZykKKwkJcmV0dXJuIDA7CisKKwlpZiAoZ2FkZ2V0X2lzX3NhMTEwMCAoZ2FkZ2V0KSAmJiBkZXYtPmNvbmZpZykgeworCQkvKiB0eCBmaWZvIGlzIGZ1bGwsIGJ1dCB3ZSBjYW4ndCBjbGVhciBpdC4uLiovCisJCUlORk8gKGRldiwgImNhbid0IGNoYW5nZSBjb25maWd1cmF0aW9uc1xuIik7CisJCXJldHVybiAtRVNQSVBFOworCX0KKwl6ZXJvX3Jlc2V0X2NvbmZpZyAoZGV2KTsKKworCXN3aXRjaCAobnVtYmVyKSB7CisJY2FzZSBDT05GSUdfU09VUkNFX1NJTks6CisJCXJlc3VsdCA9IHNldF9zb3VyY2Vfc2lua19jb25maWcgKGRldiwgZ2ZwX2ZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBDT05GSUdfTE9PUEJBQ0s6CisJCXJlc3VsdCA9IHNldF9sb29wYmFja19jb25maWcgKGRldiwgZ2ZwX2ZsYWdzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJLyogRkFMTCBUSFJPVUdIICovCisJY2FzZSAwOgorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCWlmICghcmVzdWx0ICYmICghZGV2LT5pbl9lcCB8fCAhZGV2LT5vdXRfZXApKQorCQlyZXN1bHQgPSAtRU5PREVWOworCWlmIChyZXN1bHQpCisJCXplcm9fcmVzZXRfY29uZmlnIChkZXYpOworCWVsc2UgeworCQljaGFyICpzcGVlZDsKKworCQlzd2l0Y2ggKGdhZGdldC0+c3BlZWQpIHsKKwkJY2FzZSBVU0JfU1BFRURfTE9XOglzcGVlZCA9ICJsb3ciOyBicmVhazsKKwkJY2FzZSBVU0JfU1BFRURfRlVMTDoJc3BlZWQgPSAiZnVsbCI7IGJyZWFrOworCQljYXNlIFVTQl9TUEVFRF9ISUdIOglzcGVlZCA9ICJoaWdoIjsgYnJlYWs7CisJCWRlZmF1bHQ6IAkJc3BlZWQgPSAiPyI7IGJyZWFrOworCQl9CisKKwkJZGV2LT5jb25maWcgPSBudW1iZXI7CisJCUlORk8gKGRldiwgIiVzIHNwZWVkIGNvbmZpZyAjJWQ6ICVzXG4iLCBzcGVlZCwgbnVtYmVyLAorCQkJCShudW1iZXIgPT0gQ09ORklHX1NPVVJDRV9TSU5LKQorCQkJCQk/IHNvdXJjZV9zaW5rIDogbG9vcGJhY2spOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCB6ZXJvX3NldHVwX2NvbXBsZXRlIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJaWYgKHJlcS0+c3RhdHVzIHx8IHJlcS0+YWN0dWFsICE9IHJlcS0+bGVuZ3RoKQorCQlEQkcgKChzdHJ1Y3QgemVyb19kZXYgKikgZXAtPmRyaXZlcl9kYXRhLAorCQkJCSJzZXR1cCBjb21wbGV0ZSAtLT4gJWQsICVkLyVkXG4iLAorCQkJCXJlcS0+c3RhdHVzLCByZXEtPmFjdHVhbCwgcmVxLT5sZW5ndGgpOworfQorCisvKgorICogVGhlIHNldHVwKCkgY2FsbGJhY2sgaW1wbGVtZW50cyBhbGwgdGhlIGVwMCBmdW5jdGlvbmFsaXR5IHRoYXQncworICogbm90IGhhbmRsZWQgbG93ZXIgZG93biwgaW4gaGFyZHdhcmUgb3IgdGhlIGhhcmR3YXJlIGRyaXZlciAobGlrZQorICogZGV2aWNlIGFuZCBlbmRwb2ludCBmZWF0dXJlIGZsYWdzLCBhbmQgdGhlaXIgc3RhdHVzKS4gIEl0J3MgYWxsCisgKiBob3VzZWtlZXBpbmcgZm9yIHRoZSBnYWRnZXQgZnVuY3Rpb24gd2UncmUgaW1wbGVtZW50aW5nLiAgTW9zdCBvZgorICogdGhlIHdvcmsgaXMgaW4gY29uZmlnLXNwZWNpZmljIHNldHVwLgorICovCitzdGF0aWMgaW50Cit6ZXJvX3NldHVwIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LCBjb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKQoreworCXN0cnVjdCB6ZXJvX2RldgkJKmRldiA9IGdldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0KTsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcSA9IGRldi0+cmVxOworCWludAkJCXZhbHVlID0gLUVPUE5PVFNVUFA7CisJdTE2CQkJd19pbmRleCA9IGN0cmwtPndJbmRleDsKKwl1MTYJCQl3X3ZhbHVlID0gY3RybC0+d1ZhbHVlOworCXUxNgkJCXdfbGVuZ3RoID0gY3RybC0+d0xlbmd0aDsKKworCS8qIHVzdWFsbHkgdGhpcyBzdG9yZXMgcmVwbHkgZGF0YSBpbiB0aGUgcHJlLWFsbG9jYXRlZCBlcDAgYnVmZmVyLAorCSAqIGJ1dCBjb25maWcgY2hhbmdlIGV2ZW50cyB3aWxsIHJlY29uZmlndXJlIGhhcmR3YXJlLgorCSAqLworCXJlcS0+emVybyA9IDA7CisJc3dpdGNoIChjdHJsLT5iUmVxdWVzdCkgeworCisJY2FzZSBVU0JfUkVRX0dFVF9ERVNDUklQVE9SOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IFVTQl9ESVJfSU4pCisJCQlnb3RvIHVua25vd247CisJCXN3aXRjaCAod192YWx1ZSA+PiA4KSB7CisKKwkJY2FzZSBVU0JfRFRfREVWSUNFOgorCQkJdmFsdWUgPSBtaW4gKHdfbGVuZ3RoLCAodTE2KSBzaXplb2YgZGV2aWNlX2Rlc2MpOworCQkJbWVtY3B5IChyZXEtPmJ1ZiwgJmRldmljZV9kZXNjLCB2YWx1ZSk7CisJCQlicmVhazsKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKwkJY2FzZSBVU0JfRFRfREVWSUNFX1FVQUxJRklFUjoKKwkJCWlmICghZ2FkZ2V0LT5pc19kdWFsc3BlZWQpCisJCQkJYnJlYWs7CisJCQl2YWx1ZSA9IG1pbiAod19sZW5ndGgsICh1MTYpIHNpemVvZiBkZXZfcXVhbGlmaWVyKTsKKwkJCW1lbWNweSAocmVxLT5idWYsICZkZXZfcXVhbGlmaWVyLCB2YWx1ZSk7CisJCQlicmVhazsKKworCQljYXNlIFVTQl9EVF9PVEhFUl9TUEVFRF9DT05GSUc6CisJCQlpZiAoIWdhZGdldC0+aXNfZHVhbHNwZWVkKQorCQkJCWJyZWFrOworCQkJLy8gRkFMTFRIUk9VR0gKKyNlbmRpZiAvKiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgKi8KKwkJY2FzZSBVU0JfRFRfQ09ORklHOgorCQkJdmFsdWUgPSBjb25maWdfYnVmIChnYWRnZXQsIHJlcS0+YnVmLAorCQkJCQl3X3ZhbHVlID4+IDgsCisJCQkJCXdfdmFsdWUgJiAweGZmKTsKKwkJCWlmICh2YWx1ZSA+PSAwKQorCQkJCXZhbHVlID0gbWluICh3X2xlbmd0aCwgKHUxNikgdmFsdWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBVU0JfRFRfU1RSSU5HOgorCQkJLyogd0luZGV4ID09IGxhbmd1YWdlIGNvZGUuCisJCQkgKiB0aGlzIGRyaXZlciBvbmx5IGhhbmRsZXMgb25lIGxhbmd1YWdlLCB5b3UgY2FuCisJCQkgKiBhZGQgc3RyaW5nIHRhYmxlcyBmb3Igb3RoZXIgbGFuZ3VhZ2VzLCB1c2luZworCQkJICogYW55IFVURi04IGNoYXJhY3RlcnMKKwkJCSAqLworCQkJdmFsdWUgPSB1c2JfZ2FkZ2V0X2dldF9zdHJpbmcgKCZzdHJpbmd0YWIsCisJCQkJCXdfdmFsdWUgJiAweGZmLCByZXEtPmJ1Zik7CisJCQlpZiAodmFsdWUgPj0gMCkKKwkJCQl2YWx1ZSA9IG1pbiAod19sZW5ndGgsICh1MTYpIHZhbHVlKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJLyogY3VycmVudGx5IHR3byBjb25maWdzLCB0d28gc3BlZWRzICovCisJY2FzZSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IDApCisJCQlnb3RvIHVua25vd247CisJCWlmIChnYWRnZXQtPmFfaG5wX3N1cHBvcnQpCisJCQlEQkcgKGRldiwgIkhOUCBhdmFpbGFibGVcbiIpOworCQllbHNlIGlmIChnYWRnZXQtPmFfYWx0X2hucF9zdXBwb3J0KQorCQkJREJHIChkZXYsICJITlAgbmVlZHMgYSBkaWZmZXJlbnQgcm9vdCBwb3J0XG4iKTsKKwkJZWxzZQorCQkJVkRCRyAoZGV2LCAiSE5QIGluYWN0aXZlXG4iKTsKKwkJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKKwkJdmFsdWUgPSB6ZXJvX3NldF9jb25maWcgKGRldiwgd192YWx1ZSwgR0ZQX0FUT01JQyk7CisJCXNwaW5fdW5sb2NrICgmZGV2LT5sb2NrKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfUkVRX0dFVF9DT05GSUdVUkFUSU9OOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IFVTQl9ESVJfSU4pCisJCQlnb3RvIHVua25vd247CisJCSoodTggKilyZXEtPmJ1ZiA9IGRldi0+Y29uZmlnOworCQl2YWx1ZSA9IG1pbiAod19sZW5ndGgsICh1MTYpIDEpOworCQlicmVhazsKKworCS8qIHVudGlsIHdlIGFkZCBhbHRzZXR0aW5nIHN1cHBvcnQsIG9yIG90aGVyIGludGVyZmFjZXMsCisJICogb25seSAwLzAgYXJlIHBvc3NpYmxlLiAgcHhhMnh4IG9ubHkgc3VwcG9ydHMgMC8wIChwb29ybHkpCisJICogYW5kIGFscmVhZHkga2lsbGVkIHBlbmRpbmcgZW5kcG9pbnQgSS9PLgorCSAqLworCWNhc2UgVVNCX1JFUV9TRVRfSU5URVJGQUNFOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IFVTQl9SRUNJUF9JTlRFUkZBQ0UpCisJCQlnb3RvIHVua25vd247CisJCXNwaW5fbG9jayAoJmRldi0+bG9jayk7CisJCWlmIChkZXYtPmNvbmZpZyAmJiB3X2luZGV4ID09IDAgJiYgd192YWx1ZSA9PSAwKSB7CisJCQl1OAkJY29uZmlnID0gZGV2LT5jb25maWc7CisKKwkJCS8qIHJlc2V0cyBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiwgZm9yZ2V0cyBhYm91dAorCQkJICogcHJldmlvdXMgdHJhbnNhY3Rpb24gc3RhdGUgKHF1ZXVlZCBidWZzLCBldGMpCisJCQkgKiBhbmQgcmUtaW5pdHMgZW5kcG9pbnQgc3RhdGUgKHRvZ2dsZSBldGMpCisJCQkgKiBubyByZXNwb25zZSBxdWV1ZWQsIGp1c3QgemVybyBzdGF0dXMgPT0gc3VjY2Vzcy4KKwkJCSAqIGlmIHdlIGhhZCBtb3JlIHRoYW4gb25lIGludGVyZmFjZSB3ZSBjb3VsZG4ndAorCQkJICogdXNlIHRoaXMgInJlc2V0IHRoZSBjb25maWciIHNob3J0Y3V0LgorCQkJICovCisJCQl6ZXJvX3Jlc2V0X2NvbmZpZyAoZGV2KTsKKwkJCXplcm9fc2V0X2NvbmZpZyAoZGV2LCBjb25maWcsIEdGUF9BVE9NSUMpOworCQkJdmFsdWUgPSAwOworCQl9CisJCXNwaW5fdW5sb2NrICgmZGV2LT5sb2NrKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfUkVRX0dFVF9JTlRFUkZBQ0U6CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gKFVTQl9ESVJfSU58VVNCX1JFQ0lQX0lOVEVSRkFDRSkpCisJCQlnb3RvIHVua25vd247CisJCWlmICghZGV2LT5jb25maWcpCisJCQlicmVhazsKKwkJaWYgKHdfaW5kZXggIT0gMCkgeworCQkJdmFsdWUgPSAtRURPTTsKKwkJCWJyZWFrOworCQl9CisJCSoodTggKilyZXEtPmJ1ZiA9IDA7CisJCXZhbHVlID0gbWluICh3X2xlbmd0aCwgKHUxNikgMSk7CisJCWJyZWFrOworCisJLyoKKwkgKiBUaGVzZSBhcmUgdGhlIHNhbWUgdmVuZG9yLXNwZWNpZmljIHJlcXVlc3RzIHN1cHBvcnRlZCBieQorCSAqIEludGVsJ3MgVVNCIDIuMCBjb21wbGlhbmNlIHRlc3QgZGV2aWNlcy4gIFdlIGV4Y2VlZCB0aGF0CisJICogZGV2aWNlIHNwZWMgYnkgYWxsb3dpbmcgbXVsdGlwbGUtcGFja2V0IHJlcXVlc3RzLgorCSAqLworCWNhc2UgMHg1YjoJLyogY29udHJvbCBXUklURSB0ZXN0IC0tIGZpbGwgdGhlIGJ1ZmZlciAqLworCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IChVU0JfRElSX09VVHxVU0JfVFlQRV9WRU5ET1IpKQorCQkJZ290byB1bmtub3duOworCQlpZiAod192YWx1ZSB8fCB3X2luZGV4KQorCQkJYnJlYWs7CisJCS8qIGp1c3QgcmVhZCB0aGF0IG1hbnkgYnl0ZXMgaW50byB0aGUgYnVmZmVyICovCisJCWlmICh3X2xlbmd0aCA+IFVTQl9CVUZTSVopCisJCQlicmVhazsKKwkJdmFsdWUgPSB3X2xlbmd0aDsKKwkJYnJlYWs7CisJY2FzZSAweDVjOgkvKiBjb250cm9sIFJFQUQgdGVzdCAtLSByZXR1cm4gdGhlIGJ1ZmZlciAqLworCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IChVU0JfRElSX0lOfFVTQl9UWVBFX1ZFTkRPUikpCisJCQlnb3RvIHVua25vd247CisJCWlmICh3X3ZhbHVlIHx8IHdfaW5kZXgpCisJCQlicmVhazsKKwkJLyogZXhwZWN0IHRob3NlIGJ5dGVzIGFyZSBzdGlsbCBpbiB0aGUgYnVmZmVyOyBzZW5kIGJhY2sgKi8KKwkJaWYgKHdfbGVuZ3RoID4gVVNCX0JVRlNJWgorCQkJCXx8IHdfbGVuZ3RoICE9IHJlcS0+bGVuZ3RoKQorCQkJYnJlYWs7CisJCXZhbHVlID0gd19sZW5ndGg7CisJCWJyZWFrOworCisJZGVmYXVsdDoKK3Vua25vd246CisJCVZEQkcgKGRldiwKKwkJCSJ1bmtub3duIGNvbnRyb2wgcmVxJTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwlZFxuIiwKKwkJCWN0cmwtPmJSZXF1ZXN0VHlwZSwgY3RybC0+YlJlcXVlc3QsCisJCQl3X3ZhbHVlLCB3X2luZGV4LCB3X2xlbmd0aCk7CisJfQorCisJLyogcmVzcG9uZCB3aXRoIGRhdGEgdHJhbnNmZXIgYmVmb3JlIHN0YXR1cyBwaGFzZT8gKi8KKwlpZiAodmFsdWUgPj0gMCkgeworCQlyZXEtPmxlbmd0aCA9IHZhbHVlOworCQlyZXEtPnplcm8gPSB2YWx1ZSA8IHdfbGVuZ3RoOworCQl2YWx1ZSA9IHVzYl9lcF9xdWV1ZSAoZ2FkZ2V0LT5lcDAsIHJlcSwgR0ZQX0FUT01JQyk7CisJCWlmICh2YWx1ZSA8IDApIHsKKwkJCURCRyAoZGV2LCAiZXBfcXVldWUgLS0+ICVkXG4iLCB2YWx1ZSk7CisJCQlyZXEtPnN0YXR1cyA9IDA7CisJCQl6ZXJvX3NldHVwX2NvbXBsZXRlIChnYWRnZXQtPmVwMCwgcmVxKTsKKwkJfQorCX0KKworCS8qIGRldmljZSBlaXRoZXIgc3RhbGxzICh2YWx1ZSA8IDApIG9yIHJlcG9ydHMgc3VjY2VzcyAqLworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQKK3plcm9fZGlzY29ubmVjdCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgemVyb19kZXYJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCk7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCXplcm9fcmVzZXRfY29uZmlnIChkZXYpOworCisJLyogYSBtb3JlIHNpZ25pZmljYW50IGFwcGxpY2F0aW9uIG1pZ2h0IGhhdmUgc29tZSBub24tdXNiCisJICogYWN0aXZpdGllcyB0byBxdWllc2NlIGhlcmUsIHNhdmluZyByZXNvdXJjZXMgbGlrZSBwb3dlcgorCSAqIG9yIHB1c2hpbmcgdGhlIG5vdGlmaWNhdGlvbiB1cCBhIG5ldHdvcmsgc3RhY2suCisJICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCisJLyogbmV4dCB3ZSBtYXkgZ2V0IHNldHVwKCkgY2FsbHMgdG8gZW51bWVyYXRlIG5ldyBjb25uZWN0aW9uczsKKwkgKiBvciBhbiB1bmJpbmQoKSBkdXJpbmcgc2h1dGRvd24gKGluY2x1ZGluZyByZW1vdmluZyBtb2R1bGUpLgorCSAqLworfQorCitzdGF0aWMgdm9pZAoremVyb19hdXRvcmVzdW1lICh1bnNpZ25lZCBsb25nIF9kZXYpCit7CisJc3RydWN0IHplcm9fZGV2CSpkZXYgPSAoc3RydWN0IHplcm9fZGV2ICopIF9kZXY7CisJaW50CQlzdGF0dXM7CisKKwkvKiBub3JtYWxseSB0aGUgaG9zdCB3b3VsZCBiZSB3b2tlbiB1cCBmb3Igc29tZXRoaW5nCisJICogbW9yZSBzaWduaWZpY2FudCB0aGFuIGp1c3QgYSB0aW1lciBmaXJpbmcuLi4KKwkgKi8KKwlpZiAoZGV2LT5nYWRnZXQtPnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOKSB7CisJCXN0YXR1cyA9IHVzYl9nYWRnZXRfd2FrZXVwIChkZXYtPmdhZGdldCk7CisJCURCRyAoZGV2LCAid2FrZXVwIC0tPiAlZFxuIiwgc3RhdHVzKTsKKwl9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCit6ZXJvX3VuYmluZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgemVyb19kZXYJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCk7CisKKwlEQkcgKGRldiwgInVuYmluZFxuIik7CisKKwkvKiB3ZSd2ZSBhbHJlYWR5IGJlZW4gZGlzY29ubmVjdGVkIC4uLiBubyBpL28gaXMgYWN0aXZlICovCisJaWYgKGRldi0+cmVxKQorCQlmcmVlX2VwX3JlcSAoZ2FkZ2V0LT5lcDAsIGRldi0+cmVxKTsKKwlkZWxfdGltZXJfc3luYyAoJmRldi0+cmVzdW1lKTsKKwlrZnJlZSAoZGV2KTsKKwlzZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQKK3plcm9fYmluZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgemVyb19kZXYJCSpkZXY7CisJc3RydWN0IHVzYl9lcAkJKmVwOworCisJLyogQnVsay1vbmx5IGRyaXZlcnMgbGlrZSB0aGlzIG9uZSBTSE9VTEQgYmUgYWJsZSB0bworCSAqIGF1dG9jb25maWd1cmUgb24gYW55IHNhbmUgdXNiIGNvbnRyb2xsZXIgZHJpdmVyLAorCSAqIGJ1dCB0aGVyZSBtYXkgYWxzbyBiZSBpbXBvcnRhbnQgcXVpcmtzIHRvIGFkZHJlc3MuCisJICovCisJdXNiX2VwX2F1dG9jb25maWdfcmVzZXQgKGdhZGdldCk7CisJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyAoZ2FkZ2V0LCAmZnNfc291cmNlX2Rlc2MpOworCWlmICghZXApIHsKK2F1dG9jb25mX2ZhaWw6CisJCXByaW50ayAoS0VSTl9FUlIgIiVzOiBjYW4ndCBhdXRvY29uZmlndXJlIG9uICVzXG4iLAorCQkJc2hvcnRuYW1lLCBnYWRnZXQtPm5hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJRVBfSU5fTkFNRSA9IGVwLT5uYW1lOworCWVwLT5kcml2ZXJfZGF0YSA9IGVwOwkvKiBjbGFpbSAqLworCQorCWVwID0gdXNiX2VwX2F1dG9jb25maWcgKGdhZGdldCwgJmZzX3NpbmtfZGVzYyk7CisJaWYgKCFlcCkKKwkJZ290byBhdXRvY29uZl9mYWlsOworCUVQX09VVF9OQU1FID0gZXAtPm5hbWU7CisJZXAtPmRyaXZlcl9kYXRhID0gZXA7CS8qIGNsYWltICovCisKKworCS8qCisJICogRFJJVkVSIFBPTElDWSBDSE9JQ0U6ICB5b3UgbWF5IHdhbnQgdG8gZG8gdGhpcyBkaWZmZXJlbnRseS4KKwkgKiBPbmUgdGhpbmcgdG8gYXZvaWQgaXMgcmV1c2luZyBhIGJjZERldmljZSByZXZpc2lvbiBjb2RlCisJICogd2l0aCBkaWZmZXJlbnQgaG9zdC12aXNpYmxlIGNvbmZpZ3VyYXRpb25zIG9yIGJlaGF2aW9yCisJICogcmVzdHJpY3Rpb25zIC0tIHVzaW5nIGVwMWluL2VwMm91dCB2cyBlcDFvdXQvZXAzaW4sIGV0YworCSAqLworCWlmIChnYWRnZXRfaXNfbmV0MjI4MCAoZ2FkZ2V0KSkgeworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDEpOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX3B4YSAoZ2FkZ2V0KSkgeworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDMpOworI2lmIDAKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19zaChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwNCk7CisJCS8qIFNIIGhhcyBvbmx5IG9uZSBjb25maWd1cmF0aW9uOyBzZWUgImxvb3BkZWZhdWx0IiAqLworCQlkZXZpY2VfZGVzYy5iTnVtQ29uZmlndXJhdGlvbnMgPSAxOworCQkvKiBGSVhNRSBtYWtlIDEgPT0gZGVmYXVsdC5iQ29uZmlndXJhdGlvblZhbHVlICovCisjZW5kaWYKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19zYTExMDAgKGdhZGdldCkpIHsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjA1KTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19nb2t1IChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwNik7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfbXExMXh4IChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwNyk7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfb21hcCAoZ2FkZ2V0KSkgeworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDgpOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX2xoN2E0MHgoZ2FkZ2V0KSkgeworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDkpOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX245NjA0KGdhZGdldCkpIHsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjEwKTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19weGEyN3goZ2FkZ2V0KSkgeworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMTEpOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX3MzYzI0MTAoZ2FkZ2V0KSkgeworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMTIpOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX2F0OTEoZ2FkZ2V0KSkgeworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMTMpOworCX0gZWxzZSB7CisJCS8qIGdhZGdldCB6ZXJvIGlzIHNvIHNpbXBsZSAoZm9yIG5vdywgbm8gYWx0c2V0dGluZ3MpIHRoYXQKKwkJICogaXQgU0hPVUxEIE5PVCBoYXZlIHByb2JsZW1zIHdpdGggYnVsay1jYXBhYmxlIGhhcmR3YXJlLgorCQkgKiBzbyB3YXJuIGFib3V0IHVucmNvZ25pemVkIGNvbnRyb2xsZXJzLCBkb24ndCBwYW5pYy4KKwkJICoKKwkJICogdGhpbmdzIGxpa2UgY29uZmlndXJhdGlvbiBhbmQgYWx0c2V0dGluZyBudW1iZXJpbmcKKwkJICogY2FuIG5lZWQgaGFyZHdhcmUtc3BlY2lmaWMgYXR0ZW50aW9uIHRob3VnaC4KKwkJICovCisJCXByaW50ayAoS0VSTl9XQVJOSU5HICIlczogY29udHJvbGxlciAnJXMnIG5vdCByZWNvZ25pemVkXG4iLAorCQkJc2hvcnRuYW1lLCBnYWRnZXQtPm5hbWUpOworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDk5OTkpOworCX0KKworCisJLyogb2ssIHdlIG1hZGUgc2Vuc2Ugb2YgdGhlIGhhcmR3YXJlIC4uLiAqLworCWRldiA9IGttYWxsb2MgKHNpemVvZiAqZGV2LCBTTEFCX0tFUk5FTCk7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldCAoZGV2LCAwLCBzaXplb2YgKmRldik7CisJc3Bpbl9sb2NrX2luaXQgKCZkZXYtPmxvY2spOworCWRldi0+Z2FkZ2V0ID0gZ2FkZ2V0OworCXNldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0LCBkZXYpOworCisJLyogcHJlYWxsb2NhdGUgY29udHJvbCByZXNwb25zZSBhbmQgYnVmZmVyICovCisJZGV2LT5yZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdCAoZ2FkZ2V0LT5lcDAsIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5yZXEpCisJCWdvdG8gZW5vbWVtOworCWRldi0+cmVxLT5idWYgPSB1c2JfZXBfYWxsb2NfYnVmZmVyIChnYWRnZXQtPmVwMCwgVVNCX0JVRlNJWiwKKwkJCQkmZGV2LT5yZXEtPmRtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPnJlcS0+YnVmKQorCQlnb3RvIGVub21lbTsKKworCWRldi0+cmVxLT5jb21wbGV0ZSA9IHplcm9fc2V0dXBfY29tcGxldGU7CisKKwlkZXZpY2VfZGVzYy5iTWF4UGFja2V0U2l6ZTAgPSBnYWRnZXQtPmVwMC0+bWF4cGFja2V0OworCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECisJLyogYXNzdW1lIGVwMCB1c2VzIHRoZSBzYW1lIHZhbHVlIGZvciBib3RoIHNwZWVkcyAuLi4gKi8KKwlkZXZfcXVhbGlmaWVyLmJNYXhQYWNrZXRTaXplMCA9IGRldmljZV9kZXNjLmJNYXhQYWNrZXRTaXplMDsKKworCS8qIGFuZCB0aGF0IGFsbCBlbmRwb2ludHMgYXJlIGR1YWwtc3BlZWQgKi8KKwloc19zb3VyY2VfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0gZnNfc291cmNlX2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKwloc19zaW5rX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9IGZzX3NpbmtfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworI2VuZGlmCisKKwlpZiAoZ2FkZ2V0LT5pc19vdGcpIHsKKwkJb3RnX2Rlc2NyaXB0b3IuYm1BdHRyaWJ1dGVzIHw9IFVTQl9PVEdfSE5QLAorCQlzb3VyY2Vfc2lua19jb25maWcuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKKwkJbG9vcGJhY2tfY29uZmlnLmJtQXR0cmlidXRlcyB8PSBVU0JfQ09ORklHX0FUVF9XQUtFVVA7CisJfQorCisJaWYgKGdhZGdldC0+aXNfb3RnKSB7CisJCW90Z19kZXNjcmlwdG9yLmJtQXR0cmlidXRlcyB8PSBVU0JfT1RHX0hOUCwKKwkJc291cmNlX3NpbmtfY29uZmlnLmJtQXR0cmlidXRlcyB8PSBVU0JfQ09ORklHX0FUVF9XQUtFVVA7CisJCWxvb3BiYWNrX2NvbmZpZy5ibUF0dHJpYnV0ZXMgfD0gVVNCX0NPTkZJR19BVFRfV0FLRVVQOworCX0KKworCXVzYl9nYWRnZXRfc2V0X3NlbGZwb3dlcmVkIChnYWRnZXQpOworCisJaW5pdF90aW1lciAoJmRldi0+cmVzdW1lKTsKKwlkZXYtPnJlc3VtZS5mdW5jdGlvbiA9IHplcm9fYXV0b3Jlc3VtZTsKKwlkZXYtPnJlc3VtZS5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRldjsKKwlpZiAoYXV0b3Jlc3VtZSkgeworCQlzb3VyY2Vfc2lua19jb25maWcuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKKwkJbG9vcGJhY2tfY29uZmlnLmJtQXR0cmlidXRlcyB8PSBVU0JfQ09ORklHX0FUVF9XQUtFVVA7CisJfQorCisJZ2FkZ2V0LT5lcDAtPmRyaXZlcl9kYXRhID0gZGV2OworCisJSU5GTyAoZGV2LCAiJXMsIHZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04gIlxuIiwgbG9uZ25hbWUpOworCUlORk8gKGRldiwgInVzaW5nICVzLCBPVVQgJXMgSU4gJXNcbiIsIGdhZGdldC0+bmFtZSwKKwkJRVBfT1VUX05BTUUsIEVQX0lOX05BTUUpOworCisJc25wcmludGYgKG1hbnVmYWN0dXJlciwgc2l6ZW9mIG1hbnVmYWN0dXJlciwgIiVzICVzIHdpdGggJXMiLAorCQlzeXN0ZW1fdXRzbmFtZS5zeXNuYW1lLCBzeXN0ZW1fdXRzbmFtZS5yZWxlYXNlLAorCQlnYWRnZXQtPm5hbWUpOworCisJcmV0dXJuIDA7CisKK2Vub21lbToKKwl6ZXJvX3VuYmluZCAoZ2FkZ2V0KTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQKK3plcm9fc3VzcGVuZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgemVyb19kZXYJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCk7CisKKwlpZiAoZ2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJcmV0dXJuOworCisJaWYgKGF1dG9yZXN1bWUpIHsKKwkJbW9kX3RpbWVyICgmZGV2LT5yZXN1bWUsIGppZmZpZXMgKyAoSFogKiBhdXRvcmVzdW1lKSk7CisJCURCRyAoZGV2LCAic3VzcGVuZCwgd2FrZXVwIGluICVkIHNlY29uZHNcbiIsIGF1dG9yZXN1bWUpOworCX0gZWxzZQorCQlEQkcgKGRldiwgInN1c3BlbmRcbiIpOworfQorCitzdGF0aWMgdm9pZAoremVyb19yZXN1bWUgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IHplcm9fZGV2CQkqZGV2ID0gZ2V0X2dhZGdldF9kYXRhIChnYWRnZXQpOworCisJREJHIChkZXYsICJyZXN1bWVcbiIpOworCWRlbF90aW1lciAoJmRldi0+cmVzdW1lKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyIHplcm9fZHJpdmVyID0geworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCS5zcGVlZAkJPSBVU0JfU1BFRURfSElHSCwKKyNlbHNlCisJLnNwZWVkCQk9IFVTQl9TUEVFRF9GVUxMLAorI2VuZGlmCisJLmZ1bmN0aW9uCT0gKGNoYXIgKikgbG9uZ25hbWUsCisJLmJpbmQJCT0gemVyb19iaW5kLAorCS51bmJpbmQJCT0gemVyb191bmJpbmQsCisKKwkuc2V0dXAJCT0gemVyb19zZXR1cCwKKwkuZGlzY29ubmVjdAk9IHplcm9fZGlzY29ubmVjdCwKKworCS5zdXNwZW5kCT0gemVyb19zdXNwZW5kLAorCS5yZXN1bWUJCT0gemVyb19yZXN1bWUsCisKKwkuZHJpdmVyIAk9IHsKKwkJLm5hbWUJCT0gKGNoYXIgKikgc2hvcnRuYW1lLAorCQkvLyAuc2h1dGRvd24gPSAuLi4KKwkJLy8gLnN1c3BlbmQgPSAuLi4KKwkJLy8gLnJlc3VtZSA9IC4uLgorCX0sCit9OworCitNT0RVTEVfQVVUSE9SICgiRGF2aWQgQnJvd25lbGwiKTsKK01PRFVMRV9MSUNFTlNFICgiRHVhbCBCU0QvR1BMIik7CisKKworc3RhdGljIGludCBfX2luaXQgaW5pdCAodm9pZCkKK3sKKwkvKiBhIHJlYWwgdmFsdWUgd291bGQgbGlrZWx5IGNvbWUgdGhyb3VnaCBzb21lIGlkIHByb20KKwkgKiBvciBtb2R1bGUgb3B0aW9uLiAgdGhpcyBvbmUgdGFrZXMgYXQgbGVhc3QgdHdvIHBhY2tldHMuCisJICovCisJc3RybGNweSAoc2VyaWFsLCAiMDEyMzQ1Njc4OS4wMTIzNDU2Nzg5LjAxMjM0NTY3ODkiLCBzaXplb2Ygc2VyaWFsKTsKKworCXJldHVybiB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlciAoJnplcm9fZHJpdmVyKTsKK30KK21vZHVsZV9pbml0IChpbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXAgKHZvaWQpCit7CisJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciAoJnplcm9fZHJpdmVyKTsKK30KK21vZHVsZV9leGl0IChjbGVhbnVwKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOTZjMzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKQEAgLTAsMCArMSwxMjYgQEAKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCitjb21tZW50ICJVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMiCisJZGVwZW5kcyBvbiBVU0IKKworY29uZmlnIFVTQl9FSENJX0hDRAorCXRyaXN0YXRlICJFSENJIEhDRCAoVVNCIDIuMCkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBQQ0kKKwktLS1oZWxwLS0tCisJICBUaGUgRW5oYW5jZWQgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSAoRUhDSSkgaXMgc3RhbmRhcmQgZm9yIFVTQiAyLjAKKwkgICJoaWdoIHNwZWVkIiAoNDgwIE1iaXQvc2VjLCA2MCBNYnl0ZS9zZWMpIGhvc3QgY29udHJvbGxlciBoYXJkd2FyZS4KKwkgIElmIHlvdXIgVVNCIGhvc3QgY29udHJvbGxlciBzdXBwb3J0cyBVU0IgMi4wLCB5b3Ugd2lsbCBsaWtlbHkgd2FudCB0bworCSAgY29uZmlndXJlIHRoaXMgSG9zdCBDb250cm9sbGVyIERyaXZlci4gIEF0IHRoaXMgd3JpdGluZywgdGhlIHByaW1hcnkKKwkgIGltcGxlbWVudGF0aW9uIG9mIEVIQ0kgaXMgYSBjaGlwIGZyb20gTkVDLCB3aWRlbHkgYXZhaWxhYmxlIGluIGFkZC1vbgorCSAgUENJIGNhcmRzLCBidXQgaW1wbGVtZW50YXRpb25zIGFyZSBpbiB0aGUgd29ya3MgZnJvbSBvdGhlciB2ZW5kb3JzCisJICBpbmNsdWRpbmcgSW50ZWwgYW5kIFBoaWxpcHMuICBNb3RoZXJib2FyZCBzdXBwb3J0IGlzIGFwcGVhcmluZy4KKworCSAgRUhDSSBjb250cm9sbGVycyBhcmUgcGFja2FnZWQgd2l0aCAiY29tcGFuaW9uIiBob3N0IGNvbnRyb2xsZXJzIChPSENJCisJICBvciBVSENJKSB0byBoYW5kbGUgVVNCIDEuMSBkZXZpY2VzIGNvbm5lY3RlZCB0byByb290IGh1YiBwb3J0cy4gIFBvcnRzCisJICB3aWxsIGNvbm5lY3QgdG8gRUhDSSBpZiBpdCB0aGUgZGV2aWNlIGlzIGhpZ2ggc3BlZWQsIG90aGVyd2lzZSB0aGV5CisJICBjb25uZWN0IHRvIGEgY29tcGFuaW9uIGNvbnRyb2xsZXIuICBJZiB5b3UgY29uZmlndXJlIEVIQ0ksIHlvdSBzaG91bGQKKwkgIHByb2JhYmx5IGNvbmZpZ3VyZSB0aGUgT0hDSSAoZm9yIE5FQyBhbmQgc29tZSBvdGhlciB2ZW5kb3JzKSBVU0IgSG9zdAorCSAgQ29udHJvbGxlciBEcml2ZXIgb3IgVUhDSSAoZm9yIFZpYSBtb3RoZXJib2FyZHMpIEhvc3QgQ29udHJvbGxlcgorCSAgRHJpdmVyIHRvby4KKworCSAgWW91IG1heSB3YW50IHRvIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvZWhjaS50eHQ+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBlaGNpLWhjZC4KKworY29uZmlnIFVTQl9FSENJX1NQTElUX0lTTworCWJvb2wgIkZ1bGwgc3BlZWQgSVNPIHRyYW5zYWN0aW9ucyAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQl9FSENJX0hDRCAmJiBFWFBFUklNRU5UQUwKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBUaGlzIGNvZGUgaXMgbmV3IGFuZCBoYXNuJ3QgYmVlbiB1c2VkIHdpdGggbWFueSBkaWZmZXJlbnQKKwkgIEVIQ0kgb3IgVVNCIDIuMCB0cmFuc2FjdGlvbiB0cmFuc2xhdG9yIGltcGxlbWVudGF0aW9ucy4KKwkgIEl0IHNob3VsZCB3b3JrIGZvciBJU08tT1VUIHRyYW5zZmVycywgbGlrZSBhdWRpby4KKworY29uZmlnIFVTQl9FSENJX1JPT1RfSFVCX1RUCisJYm9vbCAiUm9vdCBIdWIgVHJhbnNhY3Rpb24gVHJhbnNsYXRvcnMgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0JfRUhDSV9IQ0QgJiYgRVhQRVJJTUVOVEFMCisJLS0taGVscC0tLQorCSAgU29tZSBFSENJIGNoaXBzIGhhdmUgdmVuZG9yLXNwZWNpZmljIGV4dGVuc2lvbnMgdG8gaW50ZWdyYXRlCisJICB0cmFuc2FjdGlvbiB0cmFuc2xhdG9ycywgc28gdGhhdCBubyBPSENJIG9yIFVIQ0kgY29tcGFuaW9uCisJICBjb250cm9sbGVyIGlzIG5lZWRlZC4gIEl0J3Mgc2FmZSB0byBzYXkgInkiIGV2ZW4gaWYgeW91cgorCSAgY29udHJvbGxlciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgorCisJICBUaGlzIHN1cHBvcnRzIHRoZSBFSENJIGltcGxlbWVudGF0aW9uIGZyb20gVHJhbnNEaW1lbnNpb24gSW5jLgorCitjb25maWcgVVNCX09IQ0lfSENECisJdHJpc3RhdGUgIk9IQ0kgSENEIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgVVNCX0FSQ0hfSEFTX09IQ0kKKwlzZWxlY3QgSVNQMTMwMV9PTUFQIGlmIE1BQ0hfT01BUF9IMiB8fCBNQUNIX09NQVBfSDMKKwktLS1oZWxwLS0tCisJICBUaGUgT3BlbiBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIChPSENJKSBpcyBhIHN0YW5kYXJkIGZvciBhY2Nlc3NpbmcKKwkgIFVTQiAxLjEgaG9zdCBjb250cm9sbGVyIGhhcmR3YXJlLiAgSXQgZG9lcyBtb3JlIGluIGhhcmR3YXJlIHRoYW4gSW50ZWwncworCSAgVUhDSSBzcGVjaWZpY2F0aW9uLiAgSWYgeW91ciBVU0IgaG9zdCBjb250cm9sbGVyIGZvbGxvd3MgdGhlIE9IQ0kgc3BlYywKKwkgIHNheSBZLiAgT24gbW9zdCBub24teDg2IHN5c3RlbXMsIGFuZCBvbiB4ODYgaGFyZHdhcmUgdGhhdCdzIG5vdCB1c2luZyBhCisJICBVU0IgY29udHJvbGxlciBmcm9tIEludGVsIG9yIFZJQSwgdGhpcyBpcyBhcHByb3ByaWF0ZS4gIElmIHlvdXIgaG9zdAorCSAgY29udHJvbGxlciBkb2Vzbid0IHVzZSBQQ0ksIHRoaXMgaXMgcHJvYmFibHkgYXBwcm9wcmlhdGUuICBGb3IgYSBQQ0kKKwkgIGJhc2VkIHN5c3RlbSB3aGVyZSB5b3UncmUgbm90IHN1cmUsIHRoZSAibHNwY2kgLXYiIGVudHJ5IHdpbGwgbGlzdCB0aGUKKwkgIHJpZ2h0ICJwcm9nLWlmIiBmb3IgeW91ciBVU0IgY29udHJvbGxlcihzKTogIEVIQ0ksIE9IQ0ksIG9yIFVIQ0kuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG9oY2ktaGNkLgorCitjb25maWcgVVNCX09IQ0lfSENEX1BQQ19TT0MKKwlib29sICJPSENJIHN1cHBvcnQgZm9yIG9uLWNoaXAgUFBDIFVTQiBjb250cm9sbGVyIgorCWRlcGVuZHMgb24gVVNCX09IQ0lfSENEICYmIChTVEIwM3h4eCB8fCBQUENfTVBDNTJ4eCkKKwlkZWZhdWx0IHkKKwlzZWxlY3QgVVNCX09IQ0lfQklHX0VORElBTgorCS0tLWhlbHAtLS0KKwkgIEVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFVTQiBjb250cm9sbGVyIG9uIHRoZSBNUEM1Mnh4IG9yCisJICBTVEIwM3h4eCBwcm9jZXNzb3IgY2hpcC4gIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBVU0JfT0hDSV9IQ0RfUENJCisJYm9vbCAiT0hDSSBzdXBwb3J0IGZvciBQQ0ktYnVzIFVTQiBjb250cm9sbGVycyIKKwlkZXBlbmRzIG9uIFVTQl9PSENJX0hDRCAmJiBQQ0kgJiYgKFNUQjAzeHh4IHx8IFBQQ19NUEM1Mnh4KQorCWRlZmF1bHQgeQorCXNlbGVjdCBVU0JfT0hDSV9MSVRUTEVfRU5ESUFOCisJLS0taGVscC0tLQorCSAgRW5hYmxlcyBzdXBwb3J0IGZvciBQQ0ktYnVzIHBsdWctaW4gVVNCIGNvbnRyb2xsZXIgY2FyZHMuCisJICBJZiB1bnN1cmUsIHNheSBZLgorCitjb25maWcgVVNCX09IQ0lfQklHX0VORElBTgorCWJvb2wKKwlkZXBlbmRzIG9uIFVTQl9PSENJX0hDRAorCWRlZmF1bHQgbgorCitjb25maWcgVVNCX09IQ0lfTElUVExFX0VORElBTgorCWJvb2wKKwlkZXBlbmRzIG9uIFVTQl9PSENJX0hDRAorCWRlZmF1bHQgbiBpZiBTVEIwM3h4eCB8fCBQUENfTVBDNTJ4eAorCWRlZmF1bHQgeQorCitjb25maWcgVVNCX1VIQ0lfSENECisJdHJpc3RhdGUgIlVIQ0kgSENEIChtb3N0IEludGVsIGFuZCBWSUEpIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgUENJCisJLS0taGVscC0tLQorCSAgVGhlIFVuaXZlcnNhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGlzIGEgc3RhbmRhcmQgYnkgSW50ZWwgZm9yCisJICBhY2Nlc3NpbmcgdGhlIFVTQiBoYXJkd2FyZSBpbiB0aGUgUEMgKHdoaWNoIGlzIGFsc28gY2FsbGVkIHRoZSBVU0IKKwkgIGhvc3QgY29udHJvbGxlcikuIElmIHlvdXIgVVNCIGhvc3QgY29udHJvbGxlciBjb25mb3JtcyB0byB0aGlzCisJICBzdGFuZGFyZCwgeW91IG1heSB3YW50IHRvIHNheSBZLCBidXQgc2VlIGJlbG93LiBBbGwgcmVjZW50IGJvYXJkcworCSAgd2l0aCBJbnRlbCBQQ0kgY2hpcHNldHMgKGxpa2UgaW50ZWwgNDMwVFgsIDQ0MEZYLCA0NDBMWCwgNDQwQlgsCisJICBpODEwLCBpODIwKSBjb25mb3JtIHRvIHRoaXMgc3RhbmRhcmQuIEFsc28gYWxsIFZJQSBQQ0kgY2hpcHNldHMKKwkgIChsaWtlIFZJQSBWUDIsIFZQMywgTVZQMywgQXBvbGxvIFBybywgQXBvbGxvIFBybyBJSSBvciBBcG9sbG8gUHJvCisJICAxMzMpLiBJZiB1bnN1cmUsIHNheSBZLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1aGNpLWhjZC4KKworY29uZmlnIFVTQl9TTDgxMV9IQ0QKKwl0cmlzdGF0ZSAiU0w4MTFIUyBIQ0Qgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQgorCWRlZmF1bHQgTgorCWhlbHAKKwkgIFRoZSBTTDgxMUhTIGlzIGEgc2luZ2xlLXBvcnQgVVNCIGNvbnRyb2xsZXIgdGhhdCBzdXBwb3J0cyBlaXRoZXIKKwkgIGhvc3Qgc2lkZSBvciBwZXJpcGhlcmFsIHNpZGUgcm9sZXMuICBFbmFibGUgdGhpcyBvcHRpb24gaWYgeW91cgorCSAgYm9hcmQgaGFzIHRoaXMgY2hpcCwgYW5kIHlvdSB3YW50IHRvIHVzZSBpdCBhcyBhIGhvc3QgY29udHJvbGxlci4gCisJICBJZiB1bnN1cmUsIHNheSBOLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzbDgxMS1oY2QuCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NzRjYTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlCkBAIC0wLDAgKzEsMTAgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVyCisjIGZyYW1ld29yayBhbmQgZHJpdmVycworIworCitvYmotJChDT05GSUdfVVNCX0VIQ0lfSENEKQkrPSBlaGNpLWhjZC5vCitvYmotJChDT05GSUdfVVNCX09IQ0lfSENEKQkrPSBvaGNpLWhjZC5vCitvYmotJChDT05GSUdfVVNCX1VIQ0lfSENEKQkrPSB1aGNpLWhjZC5vCitvYmotJChDT05GSUdfVVNCX1NMODExX0hDRCkJKz0gc2w4MTEtaGNkLm8KK29iai0kKENPTkZJR19FVFJBWF9BUkNIX1YxMCkJKz0gaGNfY3Jpc3YxMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk1ZTJhMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYwpAQCAtMCwwICsxLDc1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAyIGJ5IERhdmlkIEJyb3duZWxsCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIHRoaXMgZmlsZSBpcyBwYXJ0IG9mIGVoY2ktaGNkLmMgKi8KKworI2RlZmluZSBlaGNpX2RiZyhlaGNpLCBmbXQsIGFyZ3MuLi4pIFwKKwlkZXZfZGJnIChlaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5jb250cm9sbGVyICwgZm10ICwgIyMgYXJncyApCisjZGVmaW5lIGVoY2lfZXJyKGVoY2ksIGZtdCwgYXJncy4uLikgXAorCWRldl9lcnIgKGVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmNvbnRyb2xsZXIgLCBmbXQgLCAjIyBhcmdzICkKKyNkZWZpbmUgZWhjaV9pbmZvKGVoY2ksIGZtdCwgYXJncy4uLikgXAorCWRldl9pbmZvIChlaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5jb250cm9sbGVyICwgZm10ICwgIyMgYXJncyApCisjZGVmaW5lIGVoY2lfd2FybihlaGNpLCBmbXQsIGFyZ3MuLi4pIFwKKwlkZXZfd2FybiAoZWhjaV90b19oY2QoZWhjaSktPnNlbGYuY29udHJvbGxlciAsIGZtdCAsICMjIGFyZ3MgKQorCisjaWZkZWYgRUhDSV9WRVJCT1NFX0RFQlVHCisjCWRlZmluZSB2ZGJnIGRiZworIwlkZWZpbmUgZWhjaV92ZGJnIGVoY2lfZGJnCisjZWxzZQorIwlkZWZpbmUgdmRiZyhmbXQsYXJncy4uLikgZG8geyB9IHdoaWxlICgwKQorIwlkZWZpbmUgZWhjaV92ZGJnKGVoY2ksIGZtdCwgYXJncy4uLikgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZmRlZglERUJVRworCisvKiBjaGVjayB0aGUgdmFsdWVzIGluIHRoZSBIQ1NQQVJBTVMgcmVnaXN0ZXIKKyAqIChob3N0IGNvbnRyb2xsZXIgX1N0cnVjdHVyYWxfIHBhcmFtZXRlcnMpCisgKiBzZWUgRUhDSSBzcGVjLCBUYWJsZSAyLTQgZm9yIGVhY2ggdmFsdWUKKyAqLworc3RhdGljIHZvaWQgZGJnX2hjc19wYXJhbXMgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgY2hhciAqbGFiZWwpCit7CisJdTMyCXBhcmFtcyA9IHJlYWRsICgmZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7CisKKwllaGNpX2RiZyAoZWhjaSwKKwkJIiVzIGhjc19wYXJhbXMgMHgleCBkYmc9JWQlcyBjYz0lZCBwY2M9JWQlcyVzIHBvcnRzPSVkXG4iLAorCQlsYWJlbCwgcGFyYW1zLAorCQlIQ1NfREVCVUdfUE9SVCAocGFyYW1zKSwKKwkJSENTX0lORElDQVRPUiAocGFyYW1zKSA/ICIgaW5kIiA6ICIiLAorCQlIQ1NfTl9DQyAocGFyYW1zKSwKKwkJSENTX05fUENDIChwYXJhbXMpLAorCSAgICAgICAgSENTX1BPUlRST1VURUQgKHBhcmFtcykgPyAiIiA6ICIgb3JkZXJlZCIsCisJCUhDU19QUEMgKHBhcmFtcykgPyAiIiA6ICIgIXBwYyIsCisJCUhDU19OX1BPUlRTIChwYXJhbXMpCisJCSk7CisJLyogUG9ydCByb3V0aW5nLCBwZXIgRUhDSSAwLjk1IFNwZWMsIFNlY3Rpb24gMi4yLjUgKi8KKwlpZiAoSENTX1BPUlRST1VURUQgKHBhcmFtcykpIHsKKwkJaW50IGk7CisJCWNoYXIgYnVmIFs0Nl0sIHRtcCBbN10sIGJ5dGU7CisKKwkJYnVmWzBdID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IEhDU19OX1BPUlRTIChwYXJhbXMpOyBpKyspIHsKKwkJCS8vIEZJWE1FIE1JUFMgd29uJ3QgcmVhZGIoKSAuLi4KKwkJCWJ5dGUgPSByZWFkYiAoJmVoY2ktPmNhcHMtPnBvcnRyb3V0ZVsoaT4+MSldKTsKKwkJCXNwcmludGYodG1wLCAiJWQgIiwgCisJCQkJKChpICYgMHgxKSA/ICgoYnl0ZSkmMHhmKSA6ICgoYnl0ZT4+NCkmMHhmKSkpOworCQkJc3RyY2F0KGJ1ZiwgdG1wKTsKKwkJfQorCQllaGNpX2RiZyAoZWhjaSwgIiVzIHBvcnRyb3V0ZSAlc1xuIiwKKwkJCQlsYWJlbCwgYnVmKTsKKwl9Cit9CisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGJnX2hjc19wYXJhbXMgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgY2hhciAqbGFiZWwpIHt9CisKKyNlbmRpZgorCisjaWZkZWYJREVCVUcKKworLyogY2hlY2sgdGhlIHZhbHVlcyBpbiB0aGUgSENDUEFSQU1TIHJlZ2lzdGVyCisgKiAoaG9zdCBjb250cm9sbGVyIF9DYXBhYmlsaXR5XyBwYXJhbWV0ZXJzKQorICogc2VlIEVIQ0kgU3BlYywgVGFibGUgMi01IGZvciBlYWNoIHZhbHVlCisgKiAqLworc3RhdGljIHZvaWQgZGJnX2hjY19wYXJhbXMgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgY2hhciAqbGFiZWwpCit7CisJdTMyCXBhcmFtcyA9IHJlYWRsICgmZWhjaS0+Y2Fwcy0+aGNjX3BhcmFtcyk7CisKKwlpZiAoSENDX0lTT0NfQ0FDSEUgKHBhcmFtcykpIHsKKwkJZWhjaV9kYmcgKGVoY2ksCisJCSAgICAgIiVzIGhjY19wYXJhbXMgJTA0eCBjYWNoaW5nIGZyYW1lICVzJXMlc1xuIiwKKwkJICAgICBsYWJlbCwgcGFyYW1zLAorCQkgICAgIEhDQ19QR01fRlJBTUVMSVNUTEVOIChwYXJhbXMpID8gIjI1Ni81MTIvMTAyNCIgOiAiMTAyNCIsCisJCSAgICAgSENDX0NBTlBBUksgKHBhcmFtcykgPyAiIHBhcmsiIDogIiIsCisJCSAgICAgSENDXzY0QklUX0FERFIgKHBhcmFtcykgPyAiIDY0IGJpdCBhZGRyIiA6ICIiKTsKKwl9IGVsc2UgeworCQllaGNpX2RiZyAoZWhjaSwKKwkJICAgICAiJXMgaGNjX3BhcmFtcyAlMDR4IHRocmVzaCAlZCB1ZnJhbWVzICVzJXMlc1xuIiwKKwkJICAgICBsYWJlbCwKKwkJICAgICBwYXJhbXMsCisJCSAgICAgSENDX0lTT0NfVEhSRVMgKHBhcmFtcyksCisJCSAgICAgSENDX1BHTV9GUkFNRUxJU1RMRU4gKHBhcmFtcykgPyAiMjU2LzUxMi8xMDI0IiA6ICIxMDI0IiwKKwkJICAgICBIQ0NfQ0FOUEFSSyAocGFyYW1zKSA/ICIgcGFyayIgOiAiIiwKKwkJICAgICBIQ0NfNjRCSVRfQUREUiAocGFyYW1zKSA/ICIgNjQgYml0IGFkZHIiIDogIiIpOworCX0KK30KKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkYmdfaGNjX3BhcmFtcyAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBjaGFyICpsYWJlbCkge30KKworI2VuZGlmCisKKyNpZmRlZglERUJVRworCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKK2RiZ19xdGQgKGNvbnN0IGNoYXIgKmxhYmVsLCBzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3F0ZCAqcXRkKQoreworCWVoY2lfZGJnIChlaGNpLCAiJXMgdGQgJXAgbiUwOHggJTA4eCB0JTA4eCBwMD0lMDh4XG4iLCBsYWJlbCwgcXRkLAorCQlsZTMyX3RvX2NwdXAgKCZxdGQtPmh3X25leHQpLAorCQlsZTMyX3RvX2NwdXAgKCZxdGQtPmh3X2FsdF9uZXh0KSwKKwkJbGUzMl90b19jcHVwICgmcXRkLT5od190b2tlbiksCisJCWxlMzJfdG9fY3B1cCAoJnF0ZC0+aHdfYnVmIFswXSkpOworCWlmIChxdGQtPmh3X2J1ZiBbMV0pCisJCWVoY2lfZGJnIChlaGNpLCAiICBwMT0lMDh4IHAyPSUwOHggcDM9JTA4eCBwND0lMDh4XG4iLAorCQkJbGUzMl90b19jcHVwICgmcXRkLT5od19idWYgWzFdKSwKKwkJCWxlMzJfdG9fY3B1cCAoJnF0ZC0+aHdfYnVmIFsyXSksCisJCQlsZTMyX3RvX2NwdXAgKCZxdGQtPmh3X2J1ZiBbM10pLAorCQkJbGUzMl90b19jcHVwICgmcXRkLT5od19idWYgWzRdKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQorZGJnX3FoIChjb25zdCBjaGFyICpsYWJlbCwgc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9xaCAqcWgpCit7CisJZWhjaV9kYmcgKGVoY2ksICIlcyBxaCAlcCBuJTA4eCBpbmZvICV4ICV4IHF0ZCAleFxuIiwgbGFiZWwsCisJCXFoLCBxaC0+aHdfbmV4dCwgcWgtPmh3X2luZm8xLCBxaC0+aHdfaW5mbzIsCisJCXFoLT5od19jdXJyZW50KTsKKwlkYmdfcXRkICgib3ZlcmxheSIsIGVoY2ksIChzdHJ1Y3QgZWhjaV9xdGQgKikgJnFoLT5od19xdGRfbmV4dCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQorZGJnX2l0ZCAoY29uc3QgY2hhciAqbGFiZWwsIHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfaXRkICppdGQpIAoreworCWVoY2lfZGJnIChlaGNpLCAiJXMgWyVkXSBpdGQgJXAsIG5leHQgJTA4eCwgdXJiICVwXG4iLAorCQlsYWJlbCwgaXRkLT5mcmFtZSwgaXRkLCBsZTMyX3RvX2NwdShpdGQtPmh3X25leHQpLCBpdGQtPnVyYik7CisJZWhjaV9kYmcgKGVoY2ksCisJCSIgIHRyYW5zOiAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsIAorCQlsZTMyX3RvX2NwdShpdGQtPmh3X3RyYW5zYWN0aW9uWzBdKSwKKwkJbGUzMl90b19jcHUoaXRkLT5od190cmFuc2FjdGlvblsxXSksCisJCWxlMzJfdG9fY3B1KGl0ZC0+aHdfdHJhbnNhY3Rpb25bMl0pLAorCQlsZTMyX3RvX2NwdShpdGQtPmh3X3RyYW5zYWN0aW9uWzNdKSwKKwkJbGUzMl90b19jcHUoaXRkLT5od190cmFuc2FjdGlvbls0XSksCisJCWxlMzJfdG9fY3B1KGl0ZC0+aHdfdHJhbnNhY3Rpb25bNV0pLAorCQlsZTMyX3RvX2NwdShpdGQtPmh3X3RyYW5zYWN0aW9uWzZdKSwKKwkJbGUzMl90b19jcHUoaXRkLT5od190cmFuc2FjdGlvbls3XSkpOworCWVoY2lfZGJnIChlaGNpLAorCQkiICBidWY6ICAgJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwgCisJCWxlMzJfdG9fY3B1KGl0ZC0+aHdfYnVmcFswXSksCisJCWxlMzJfdG9fY3B1KGl0ZC0+aHdfYnVmcFsxXSksCisJCWxlMzJfdG9fY3B1KGl0ZC0+aHdfYnVmcFsyXSksCisJCWxlMzJfdG9fY3B1KGl0ZC0+aHdfYnVmcFszXSksCisJCWxlMzJfdG9fY3B1KGl0ZC0+aHdfYnVmcFs0XSksCisJCWxlMzJfdG9fY3B1KGl0ZC0+aHdfYnVmcFs1XSksCisJCWxlMzJfdG9fY3B1KGl0ZC0+aHdfYnVmcFs2XSkpOworCWVoY2lfZGJnIChlaGNpLCAiICBpbmRleDogJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWRcbiIsCisJCWl0ZC0+aW5kZXhbMF0sIGl0ZC0+aW5kZXhbMV0sIGl0ZC0+aW5kZXhbMl0sCisJCWl0ZC0+aW5kZXhbM10sIGl0ZC0+aW5kZXhbNF0sIGl0ZC0+aW5kZXhbNV0sCisJCWl0ZC0+aW5kZXhbNl0sIGl0ZC0+aW5kZXhbN10pOworfQorCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKK2RiZ19zaXRkIChjb25zdCBjaGFyICpsYWJlbCwgc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9zaXRkICpzaXRkKSAKK3sKKwllaGNpX2RiZyAoZWhjaSwgIiVzIFslZF0gc2l0ZCAlcCwgbmV4dCAlMDh4LCB1cmIgJXBcbiIsCisJCWxhYmVsLCBzaXRkLT5mcmFtZSwgc2l0ZCwgbGUzMl90b19jcHUoc2l0ZC0+aHdfbmV4dCksIHNpdGQtPnVyYik7CisJZWhjaV9kYmcgKGVoY2ksCisJCSIgIGFkZHIgJTA4eCBzY2hlZCAlMDR4IHJlc3VsdCAlMDh4IGJ1ZiAlMDh4ICUwOHhcbiIsIAorCQlsZTMyX3RvX2NwdShzaXRkLT5od19mdWxsc3BlZWRfZXApLAorCQlsZTMyX3RvX2NwdShzaXRkLT5od191ZnJhbWUpLAorCQlsZTMyX3RvX2NwdShzaXRkLT5od19yZXN1bHRzKSwKKwkJbGUzMl90b19jcHUoc2l0ZC0+aHdfYnVmIFswXSksCisJCWxlMzJfdG9fY3B1KHNpdGQtPmh3X2J1ZiBbMV0pKTsKK30KKworc3RhdGljIGludCBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKK2RiZ19zdGF0dXNfYnVmIChjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgY29uc3QgY2hhciAqbGFiZWwsIHUzMiBzdGF0dXMpCit7CisJcmV0dXJuIHNjbnByaW50ZiAoYnVmLCBsZW4sCisJCSIlcyVzc3RhdHVzICUwNHglcyVzJXMlcyVzJXMlcyVzJXMlcyIsCisJCWxhYmVsLCBsYWJlbCBbMF0gPyAiICIgOiAiIiwgc3RhdHVzLAorCQkoc3RhdHVzICYgU1RTX0FTUykgPyAiIEFzeW5jIiA6ICIiLAorCQkoc3RhdHVzICYgU1RTX1BTUykgPyAiIFBlcmlvZGljIiA6ICIiLAorCQkoc3RhdHVzICYgU1RTX1JFQ0wpID8gIiBSZWNsIiA6ICIiLAorCQkoc3RhdHVzICYgU1RTX0hBTFQpID8gIiBIYWx0IiA6ICIiLAorCQkoc3RhdHVzICYgU1RTX0lBQSkgPyAiIElBQSIgOiAiIiwKKwkJKHN0YXR1cyAmIFNUU19GQVRBTCkgPyAiIEZBVEFMIiA6ICIiLAorCQkoc3RhdHVzICYgU1RTX0ZMUikgPyAiIEZMUiIgOiAiIiwKKwkJKHN0YXR1cyAmIFNUU19QQ0QpID8gIiBQQ0QiIDogIiIsCisJCShzdGF0dXMgJiBTVFNfRVJSKSA/ICIgRVJSIiA6ICIiLAorCQkoc3RhdHVzICYgU1RTX0lOVCkgPyAiIElOVCIgOiAiIgorCQkpOworfQorCitzdGF0aWMgaW50IF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQorZGJnX2ludHJfYnVmIChjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgY29uc3QgY2hhciAqbGFiZWwsIHUzMiBlbmFibGUpCit7CisJcmV0dXJuIHNjbnByaW50ZiAoYnVmLCBsZW4sCisJCSIlcyVzaW50cmVuYWJsZSAlMDJ4JXMlcyVzJXMlcyVzIiwKKwkJbGFiZWwsIGxhYmVsIFswXSA/ICIgIiA6ICIiLCBlbmFibGUsCisJCShlbmFibGUgJiBTVFNfSUFBKSA/ICIgSUFBIiA6ICIiLAorCQkoZW5hYmxlICYgU1RTX0ZBVEFMKSA/ICIgRkFUQUwiIDogIiIsCisJCShlbmFibGUgJiBTVFNfRkxSKSA/ICIgRkxSIiA6ICIiLAorCQkoZW5hYmxlICYgU1RTX1BDRCkgPyAiIFBDRCIgOiAiIiwKKwkJKGVuYWJsZSAmIFNUU19FUlIpID8gIiBFUlIiIDogIiIsCisJCShlbmFibGUgJiBTVFNfSU5UKSA/ICIgSU5UIiA6ICIiCisJCSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBmbHNfc3RyaW5ncyBbXSA9CisgICAgeyAiMTAyNCIsICI1MTIiLCAiMjU2IiwgIj8/IiB9OworCitzdGF0aWMgaW50CitkYmdfY29tbWFuZF9idWYgKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBjb25zdCBjaGFyICpsYWJlbCwgdTMyIGNvbW1hbmQpCit7CisJcmV0dXJuIHNjbnByaW50ZiAoYnVmLCBsZW4sCisJCSIlcyVzY29tbWFuZCAlMDZ4ICVzPSVkIGl0aHJlc2g9JWQlcyVzJXMlcyBwZXJpb2Q9JXMlcyAlcyIsCisJCWxhYmVsLCBsYWJlbCBbMF0gPyAiICIgOiAiIiwgY29tbWFuZCwKKwkJKGNvbW1hbmQgJiBDTURfUEFSSykgPyAicGFyayIgOiAiKHBhcmspIiwKKwkJQ01EX1BBUktfQ05UIChjb21tYW5kKSwKKwkJKGNvbW1hbmQgPj4gMTYpICYgMHgzZiwKKwkJKGNvbW1hbmQgJiBDTURfTFJFU0VUKSA/ICIgTFJlc2V0IiA6ICIiLAorCQkoY29tbWFuZCAmIENNRF9JQUFEKSA/ICIgSUFBRCIgOiAiIiwKKwkJKGNvbW1hbmQgJiBDTURfQVNFKSA/ICIgQXN5bmMiIDogIiIsCisJCShjb21tYW5kICYgQ01EX1BTRSkgPyAiIFBlcmlvZGljIiA6ICIiLAorCQlmbHNfc3RyaW5ncyBbKGNvbW1hbmQgPj4gMikgJiAweDNdLAorCQkoY29tbWFuZCAmIENNRF9SRVNFVCkgPyAiIFJlc2V0IiA6ICIiLAorCQkoY29tbWFuZCAmIENNRF9SVU4pID8gIlJVTiIgOiAiSEFMVCIKKwkJKTsKK30KKworc3RhdGljIGludAorZGJnX3BvcnRfYnVmIChjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgY29uc3QgY2hhciAqbGFiZWwsIGludCBwb3J0LCB1MzIgc3RhdHVzKQoreworCWNoYXIJKnNpZzsKKworCS8qIHNpZ25hbGluZyBzdGF0ZSAqLworCXN3aXRjaCAoc3RhdHVzICYgKDMgPDwgMTApKSB7CisJY2FzZSAwIDw8IDEwOiBzaWcgPSAic2UwIjsgYnJlYWs7CisJY2FzZSAxIDw8IDEwOiBzaWcgPSAiayI7IGJyZWFrOwkJLyogbG93IHNwZWVkICovCisJY2FzZSAyIDw8IDEwOiBzaWcgPSAiaiI7IGJyZWFrOworCWRlZmF1bHQ6IHNpZyA9ICI/IjsgYnJlYWs7CisJfQorCisJcmV0dXJuIHNjbnByaW50ZiAoYnVmLCBsZW4sCisJCSIlcyVzcG9ydCAlZCBzdGF0dXMgJTA2eCVzJXMgc2lnPSVzICVzJXMlcyVzJXMlcyVzJXMlcyIsCisJCWxhYmVsLCBsYWJlbCBbMF0gPyAiICIgOiAiIiwgcG9ydCwgc3RhdHVzLAorCQkoc3RhdHVzICYgUE9SVF9QT1dFUikgPyAiIFBPV0VSIiA6ICIiLAorCQkoc3RhdHVzICYgUE9SVF9PV05FUikgPyAiIE9XTkVSIiA6ICIiLAorCQlzaWcsCisJCShzdGF0dXMgJiBQT1JUX1JFU0VUKSA/ICIgUkVTRVQiIDogIiIsCisJCShzdGF0dXMgJiBQT1JUX1NVU1BFTkQpID8gIiBTVVNQRU5EIiA6ICIiLAorCQkoc3RhdHVzICYgUE9SVF9SRVNVTUUpID8gIiBSRVNVTUUiIDogIiIsCisJCShzdGF0dXMgJiBQT1JUX09DQykgPyAiIE9DQyIgOiAiIiwKKwkJKHN0YXR1cyAmIFBPUlRfT0MpID8gIiBPQyIgOiAiIiwKKwkJKHN0YXR1cyAmIFBPUlRfUEVDKSA/ICIgUEVDIiA6ICIiLAorCQkoc3RhdHVzICYgUE9SVF9QRSkgPyAiIFBFIiA6ICIiLAorCQkoc3RhdHVzICYgUE9SVF9DU0MpID8gIiBDU0MiIDogIiIsCisJCShzdGF0dXMgJiBQT1JUX0NPTk5FQ1QpID8gIiBDT05ORUNUIiA6ICIiCisJICAgICk7Cit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCitkYmdfcWggKGNoYXIgKmxhYmVsLCBzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCkKK3t9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQorZGJnX3N0YXR1c19idWYgKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBjb25zdCBjaGFyICpsYWJlbCwgdTMyIHN0YXR1cykKK3sgcmV0dXJuIDA7IH0KKworc3RhdGljIGlubGluZSBpbnQgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCitkYmdfY29tbWFuZF9idWYgKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBjb25zdCBjaGFyICpsYWJlbCwgdTMyIGNvbW1hbmQpCit7IHJldHVybiAwOyB9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQorZGJnX2ludHJfYnVmIChjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgY29uc3QgY2hhciAqbGFiZWwsIHUzMiBlbmFibGUpCit7IHJldHVybiAwOyB9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQorZGJnX3BvcnRfYnVmIChjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgY29uc3QgY2hhciAqbGFiZWwsIGludCBwb3J0LCB1MzIgc3RhdHVzKQoreyByZXR1cm4gMDsgfQorCisjZW5kaWYJLyogREVCVUcgKi8KKworLyogZnVuY3Rpb25zIGhhdmUgdGhlICJ3cm9uZyIgZmlsZW5hbWUgd2hlbiB0aGV5J3JlIG91dHB1dC4uLiAqLworI2RlZmluZSBkYmdfc3RhdHVzKGVoY2ksIGxhYmVsLCBzdGF0dXMpIHsgXAorCWNoYXIgX2J1ZiBbODBdOyBcCisJZGJnX3N0YXR1c19idWYgKF9idWYsIHNpemVvZiBfYnVmLCBsYWJlbCwgc3RhdHVzKTsgXAorCWVoY2lfZGJnIChlaGNpLCAiJXNcbiIsIF9idWYpOyBcCit9CisKKyNkZWZpbmUgZGJnX2NtZChlaGNpLCBsYWJlbCwgY29tbWFuZCkgeyBcCisJY2hhciBfYnVmIFs4MF07IFwKKwlkYmdfY29tbWFuZF9idWYgKF9idWYsIHNpemVvZiBfYnVmLCBsYWJlbCwgY29tbWFuZCk7IFwKKwllaGNpX2RiZyAoZWhjaSwgIiVzXG4iLCBfYnVmKTsgXAorfQorCisjZGVmaW5lIGRiZ19wb3J0KGVoY2ksIGxhYmVsLCBwb3J0LCBzdGF0dXMpIHsgXAorCWNoYXIgX2J1ZiBbODBdOyBcCisJZGJnX3BvcnRfYnVmIChfYnVmLCBzaXplb2YgX2J1ZiwgbGFiZWwsIHBvcnQsIHN0YXR1cyk7IFwKKwllaGNpX2RiZyAoZWhjaSwgIiVzXG4iLCBfYnVmKTsgXAorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgU1RVQl9ERUJVR19GSUxFUworCitzdGF0aWMgaW5saW5lIHZvaWQgY3JlYXRlX2RlYnVnX2ZpbGVzIChzdHJ1Y3QgZWhjaV9oY2QgKmJ1cykgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX2RlYnVnX2ZpbGVzIChzdHJ1Y3QgZWhjaV9oY2QgKmJ1cykgeyB9CisKKyNlbHNlCisKKy8qIHRyb3VibGVzaG9vdGluZyBoZWxwOiBleHBvc2Ugc3RhdGUgaW4gZHJpdmVyZnMgKi8KKworI2RlZmluZSBzcGVlZF9jaGFyKGluZm8xKSAoeyBjaGFyIHRtcDsgXAorCQlzd2l0Y2ggKGluZm8xICYgKDMgPDwgMTIpKSB7IFwKKwkJY2FzZSAwIDw8IDEyOiB0bXAgPSAnZic7IGJyZWFrOyBcCisJCWNhc2UgMSA8PCAxMjogdG1wID0gJ2wnOyBicmVhazsgXAorCQljYXNlIDIgPDwgMTI6IHRtcCA9ICdoJzsgYnJlYWs7IFwKKwkJZGVmYXVsdDogdG1wID0gJz8nOyBicmVhazsgXAorCQl9OyB0bXA7IH0pCisKK3N0YXRpYyBpbmxpbmUgY2hhciB0b2tlbl9tYXJrIChfX2xlMzIgdG9rZW4pCit7CisJX191MzIgdiA9IGxlMzJfdG9fY3B1ICh0b2tlbik7CisJaWYgKHYgJiBRVERfU1RTX0FDVElWRSkKKwkJcmV0dXJuICcqJzsKKwlpZiAodiAmIFFURF9TVFNfSEFMVCkKKwkJcmV0dXJuICctJzsKKwlpZiAoIUlTX1NIT1JUX1JFQUQgKHYpKQorCQlyZXR1cm4gJyAnOworCS8qIHRyaWVzIHRvIGFkdmFuY2UgdGhyb3VnaCBod19hbHRfbmV4dCAqLworCXJldHVybiAnLyc7Cit9CisKK3N0YXRpYyB2b2lkIHFoX2xpbmVzICgKKwlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksCisJc3RydWN0IGVoY2lfcWggKnFoLAorCWNoYXIgKipuZXh0cCwKKwl1bnNpZ25lZCAqc2l6ZXAKKykKK3sKKwl1MzIJCQlzY3JhdGNoOworCXUzMgkJCWh3X2N1cnI7CisJc3RydWN0IGxpc3RfaGVhZAkqZW50cnk7CisJc3RydWN0IGVoY2lfcXRkCQkqdGQ7CisJdW5zaWduZWQJCXRlbXA7CisJdW5zaWduZWQJCXNpemUgPSAqc2l6ZXA7CisJY2hhcgkJCSpuZXh0ID0gKm5leHRwOworCWNoYXIJCQltYXJrOworCisJaWYgKHFoLT5od19xdGRfbmV4dCA9PSBFSENJX0xJU1RfRU5EKQkvKiBORUMgZG9lcyB0aGlzICovCisJCW1hcmsgPSAnQCc7CisJZWxzZQorCQltYXJrID0gdG9rZW5fbWFyayAocWgtPmh3X3Rva2VuKTsKKwlpZiAobWFyayA9PSAnLycpIHsJLyogcWhfYWx0X25leHQgY29udHJvbHMgcWggYWR2YW5jZT8gKi8KKwkJaWYgKChxaC0+aHdfYWx0X25leHQgJiBRVERfTUFTSykgPT0gZWhjaS0+YXN5bmMtPmh3X2FsdF9uZXh0KQorCQkJbWFyayA9ICcjJzsJLyogYmxvY2tlZCAqLworCQllbHNlIGlmIChxaC0+aHdfYWx0X25leHQgPT0gRUhDSV9MSVNUX0VORCkKKwkJCW1hcmsgPSAnLic7CS8qIHVzZSBod19xdGRfbmV4dCAqLworCQkvKiBlbHNlIGFsdF9uZXh0IHBvaW50cyB0byBzb21lIG90aGVyIHF0ZCAqLworCX0KKwlzY3JhdGNoID0gbGUzMl90b19jcHVwICgmcWgtPmh3X2luZm8xKTsKKwlod19jdXJyID0gKG1hcmsgPT0gJyonKSA/IGxlMzJfdG9fY3B1cCAoJnFoLT5od19jdXJyZW50KSA6IDA7CisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKKwkJCSJxaC8lcCBkZXYlZCAlY3MgZXAlZCAlMDh4ICUwOHggKCUwOHglYyAlcyBuYWslZCkiLAorCQkJcWgsIHNjcmF0Y2ggJiAweDAwN2YsCisJCQlzcGVlZF9jaGFyIChzY3JhdGNoKSwKKwkJCShzY3JhdGNoID4+IDgpICYgMHgwMDBmLAorCQkJc2NyYXRjaCwgbGUzMl90b19jcHVwICgmcWgtPmh3X2luZm8yKSwKKwkJCWxlMzJfdG9fY3B1cCAoJnFoLT5od190b2tlbiksIG1hcmssCisJCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUVREX1RPR0dMRSkgJiBxaC0+aHdfdG9rZW4pCisJCQkJPyAiZGF0YTEiIDogImRhdGEwIiwKKwkJCShsZTMyX3RvX2NwdXAgKCZxaC0+aHdfYWx0X25leHQpID4+IDEpICYgMHgwZik7CisJc2l6ZSAtPSB0ZW1wOworCW5leHQgKz0gdGVtcDsKKworCS8qIGhjIG1heSBiZSBtb2RpZnlpbmcgdGhlIGxpc3QgYXMgd2UgcmVhZCBpdCAuLi4gKi8KKwlsaXN0X2Zvcl9lYWNoIChlbnRyeSwgJnFoLT5xdGRfbGlzdCkgeworCQl0ZCA9IGxpc3RfZW50cnkgKGVudHJ5LCBzdHJ1Y3QgZWhjaV9xdGQsIHF0ZF9saXN0KTsKKwkJc2NyYXRjaCA9IGxlMzJfdG9fY3B1cCAoJnRkLT5od190b2tlbik7CisJCW1hcmsgPSAnICc7CisJCWlmIChod19jdXJyID09IHRkLT5xdGRfZG1hKQorCQkJbWFyayA9ICcqJzsKKwkJZWxzZSBpZiAocWgtPmh3X3F0ZF9uZXh0ID09IHRkLT5xdGRfZG1hKQorCQkJbWFyayA9ICcrJzsKKwkJZWxzZSBpZiAoUVREX0xFTkdUSCAoc2NyYXRjaCkpIHsKKwkJCWlmICh0ZC0+aHdfYWx0X25leHQgPT0gZWhjaS0+YXN5bmMtPmh3X2FsdF9uZXh0KQorCQkJCW1hcmsgPSAnIyc7CisJCQllbHNlIGlmICh0ZC0+aHdfYWx0X25leHQgIT0gRUhDSV9MSVNUX0VORCkKKwkJCQltYXJrID0gJy8nOworCQl9CisJCXRlbXAgPSBzbnByaW50ZiAobmV4dCwgc2l6ZSwKKwkJCQkiXG5cdCVwJWMlcyBsZW49JWQgJTA4eCB1cmIgJXAiLAorCQkJCXRkLCBtYXJrLCAoeyBjaGFyICp0bXA7CisJCQkJIHN3aXRjaCAoKHNjcmF0Y2g+PjgpJjB4MDMpIHsKKwkJCQkgY2FzZSAwOiB0bXAgPSAib3V0IjsgYnJlYWs7CisJCQkJIGNhc2UgMTogdG1wID0gImluIjsgYnJlYWs7CisJCQkJIGNhc2UgMjogdG1wID0gInNldHVwIjsgYnJlYWs7CisJCQkJIGRlZmF1bHQ6IHRtcCA9ICI/IjsgYnJlYWs7CisJCQkJIH0gdG1wO30pLAorCQkJCShzY3JhdGNoID4+IDE2KSAmIDB4N2ZmZiwKKwkJCQlzY3JhdGNoLAorCQkJCXRkLT51cmIpOworCQlpZiAodGVtcCA8IDApCisJCQl0ZW1wID0gMDsKKwkJZWxzZSBpZiAoc2l6ZSA8IHRlbXApCisJCQl0ZW1wID0gc2l6ZTsKKwkJc2l6ZSAtPSB0ZW1wOworCQluZXh0ICs9IHRlbXA7CisJCWlmICh0ZW1wID09IHNpemUpCisJCQlnb3RvIGRvbmU7CisJfQorCisJdGVtcCA9IHNucHJpbnRmIChuZXh0LCBzaXplLCAiXG4iKTsKKwlpZiAodGVtcCA8IDApCisJCXRlbXAgPSAwOworCWVsc2UgaWYgKHNpemUgPCB0ZW1wKQorCQl0ZW1wID0gc2l6ZTsKKwlzaXplIC09IHRlbXA7CisJbmV4dCArPSB0ZW1wOworCitkb25lOgorCSpzaXplcCA9IHNpemU7CisJKm5leHRwID0gbmV4dDsKK30KKworc3RhdGljIHNzaXplX3QKK3Nob3dfYXN5bmMgKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfYnVzCQkqYnVzOworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2k7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJdW5zaWduZWQJCXRlbXAsIHNpemU7CisJY2hhcgkJCSpuZXh0OworCXN0cnVjdCBlaGNpX3FoCQkqcWg7CisKKwkqYnVmID0gMDsKKworCWJ1cyA9IHRvX3VzYl9idXMoY2xhc3NfZGV2KTsKKwloY2QgPSBidXMtPmhjcHJpdjsKKwllaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CisJbmV4dCA9IGJ1ZjsKKwlzaXplID0gUEFHRV9TSVpFOworCisJLyogZHVtcHMgYSBzbmFwc2hvdCBvZiB0aGUgYXN5bmMgc2NoZWR1bGUuCisJICogdXN1YWxseSBlbXB0eSBleGNlcHQgZm9yIGxvbmctdGVybSBidWxrIHJlYWRzLCBvciBoZWFkLgorCSAqIG9uZSBRSCBwZXIgbGluZSwgYW5kIFREcyB3ZSBrbm93IGFib3V0CisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJZm9yIChxaCA9IGVoY2ktPmFzeW5jLT5xaF9uZXh0LnFoOyBzaXplID4gMCAmJiBxaDsgcWggPSBxaC0+cWhfbmV4dC5xaCkKKwkJcWhfbGluZXMgKGVoY2ksIHFoLCAmbmV4dCwgJnNpemUpOworCWlmIChlaGNpLT5yZWNsYWltICYmIHNpemUgPiAwKSB7CisJCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsICJcbnJlY2xhaW0gPVxuIik7CisJCXNpemUgLT0gdGVtcDsKKwkJbmV4dCArPSB0ZW1wOworCisJCWZvciAocWggPSBlaGNpLT5yZWNsYWltOyBzaXplID4gMCAmJiBxaDsgcWggPSBxaC0+cmVjbGFpbSkKKwkJCXFoX2xpbmVzIChlaGNpLCBxaCwgJm5leHQsICZzaXplKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBzdHJsZW4gKGJ1Zik7Cit9CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIgKGFzeW5jLCBTX0lSVUdPLCBzaG93X2FzeW5jLCBOVUxMKTsKKworI2RlZmluZSBEQkdfU0NIRURfTElNSVQgNjQKKworc3RhdGljIHNzaXplX3QKK3Nob3dfcGVyaW9kaWMgKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfYnVzCQkqYnVzOworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2k7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJdW5pb24gZWhjaV9zaGFkb3cJcCwgKnNlZW47CisJdW5zaWduZWQJCXRlbXAsIHNpemUsIHNlZW5fY291bnQ7CisJY2hhcgkJCSpuZXh0OworCXVuc2lnbmVkCQlpOworCV9fbGUzMgkJCXRhZzsKKworCWlmICghKHNlZW4gPSBrbWFsbG9jIChEQkdfU0NIRURfTElNSVQgKiBzaXplb2YgKnNlZW4sIFNMQUJfQVRPTUlDKSkpCisJCXJldHVybiAwOworCXNlZW5fY291bnQgPSAwOworCisJYnVzID0gdG9fdXNiX2J1cyhjbGFzc19kZXYpOworCWhjZCA9IGJ1cy0+aGNwcml2OworCWVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKKwluZXh0ID0gYnVmOworCXNpemUgPSBQQUdFX1NJWkU7CisKKwl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAic2l6ZSA9ICVkXG4iLCBlaGNpLT5wZXJpb2RpY19zaXplKTsKKwlzaXplIC09IHRlbXA7CisJbmV4dCArPSB0ZW1wOworCisJLyogZHVtcCBhIHNuYXBzaG90IG9mIHRoZSBwZXJpb2RpYyBzY2hlZHVsZS4KKwkgKiBpc28gY2hhbmdlcywgaW50ZXJydXB0IHVzdWFsbHkgZG9lc24ndC4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgZWhjaS0+cGVyaW9kaWNfc2l6ZTsgaSsrKSB7CisJCXAgPSBlaGNpLT5wc2hhZG93IFtpXTsKKwkJaWYgKGxpa2VseSAoIXAucHRyKSkKKwkJCWNvbnRpbnVlOworCQl0YWcgPSBRX05FWFRfVFlQRSAoZWhjaS0+cGVyaW9kaWMgW2ldKTsKKworCQl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAiJTRkOiAiLCBpKTsKKwkJc2l6ZSAtPSB0ZW1wOworCQluZXh0ICs9IHRlbXA7CisKKwkJZG8geworCQkJc3dpdGNoICh0YWcpIHsKKwkJCWNhc2UgUV9UWVBFX1FIOgorCQkJCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsICIgcWglZC0lMDR4LyVwIiwKKwkJCQkJCXAucWgtPnBlcmlvZCwKKwkJCQkJCWxlMzJfdG9fY3B1cCAoJnAucWgtPmh3X2luZm8yKQorCQkJCQkJCS8qIHVmcmFtZSBtYXNrcyAqLworCQkJCQkJCSYgMHhmZmZmLAorCQkJCQkJcC5xaCk7CisJCQkJc2l6ZSAtPSB0ZW1wOworCQkJCW5leHQgKz0gdGVtcDsKKwkJCQkvKiBkb24ndCByZXBlYXQgd2hhdCBmb2xsb3dzIHRoaXMgcWggKi8KKwkJCQlmb3IgKHRlbXAgPSAwOyB0ZW1wIDwgc2Vlbl9jb3VudDsgdGVtcCsrKSB7CisJCQkJCWlmIChzZWVuIFt0ZW1wXS5wdHIgIT0gcC5wdHIpCisJCQkJCQljb250aW51ZTsKKwkJCQkJaWYgKHAucWgtPnFoX25leHQucHRyKQorCQkJCQkJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKKwkJCQkJCQkiIC4uLiIpOworCQkJCQlwLnB0ciA9IE5VTEw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQkvKiBzaG93IG1vcmUgaW5mbyB0aGUgZmlyc3QgdGltZSBhcm91bmQgKi8KKwkJCQlpZiAodGVtcCA9PSBzZWVuX2NvdW50ICYmIHAucHRyKSB7CisJCQkJCXUzMglzY3JhdGNoID0gbGUzMl90b19jcHVwICgKKwkJCQkJCQkmcC5xaC0+aHdfaW5mbzEpOworCQkJCQlzdHJ1Y3QgZWhjaV9xdGQJKnF0ZDsKKwkJCQkJY2hhcgkJKnR5cGUgPSAiIjsKKworCQkJCQkvKiBjb3VudCB0ZHMsIGdldCBlcCBkaXJlY3Rpb24gKi8KKwkJCQkJdGVtcCA9IDA7CisJCQkJCWxpc3RfZm9yX2VhY2hfZW50cnkgKHF0ZCwKKwkJCQkJCQkmcC5xaC0+cXRkX2xpc3QsCisJCQkJCQkJcXRkX2xpc3QpIHsKKwkJCQkJCXRlbXArKzsKKwkJCQkJCXN3aXRjaCAoMHgwMyAmIChsZTMyX3RvX2NwdSAoCisJCQkJCQkJcXRkLT5od190b2tlbikgPj4gOCkpIHsKKwkJCQkJCWNhc2UgMDogdHlwZSA9ICJvdXQiOyBjb250aW51ZTsKKwkJCQkJCWNhc2UgMTogdHlwZSA9ICJpbiI7IGNvbnRpbnVlOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKKwkJCQkJCSIgKCVjJWQgZXAlZCVzICIKKwkJCQkJCSJbJWQvJWRdIHElZCBwJWQpIiwKKwkJCQkJCXNwZWVkX2NoYXIgKHNjcmF0Y2gpLAorCQkJCQkJc2NyYXRjaCAmIDB4MDA3ZiwKKwkJCQkJCShzY3JhdGNoID4+IDgpICYgMHgwMDBmLCB0eXBlLAorCQkJCQkJcC5xaC0+dXNlY3MsIHAucWgtPmNfdXNlY3MsCisJCQkJCQl0ZW1wLAorCQkJCQkJMHg3ZmYgJiAoc2NyYXRjaCA+PiAxNikpOworCisJCQkJCWlmIChzZWVuX2NvdW50IDwgREJHX1NDSEVEX0xJTUlUKQorCQkJCQkJc2VlbiBbc2Vlbl9jb3VudCsrXS5xaCA9IHAucWg7CisJCQkJfSBlbHNlCisJCQkJCXRlbXAgPSAwOworCQkJCWlmIChwLnFoKSB7CisJCQkJCXRhZyA9IFFfTkVYVF9UWVBFIChwLnFoLT5od19uZXh0KTsKKwkJCQkJcCA9IHAucWgtPnFoX25leHQ7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBRX1RZUEVfRlNUTjoKKwkJCQl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAorCQkJCQkiIGZzdG4tJTh4LyVwIiwgcC5mc3RuLT5od19wcmV2LAorCQkJCQlwLmZzdG4pOworCQkJCXRhZyA9IFFfTkVYVF9UWVBFIChwLmZzdG4tPmh3X25leHQpOworCQkJCXAgPSBwLmZzdG4tPmZzdG5fbmV4dDsKKwkJCQlicmVhazsKKwkJCWNhc2UgUV9UWVBFX0lURDoKKwkJCQl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAorCQkJCQkiIGl0ZC8lcCIsIHAuaXRkKTsKKwkJCQl0YWcgPSBRX05FWFRfVFlQRSAocC5pdGQtPmh3X25leHQpOworCQkJCXAgPSBwLml0ZC0+aXRkX25leHQ7CisJCQkJYnJlYWs7CisJCQljYXNlIFFfVFlQRV9TSVREOgorCQkJCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsCisJCQkJCSIgc2l0ZCVkLSUwNHgvJXAiLAorCQkJCQlwLnNpdGQtPnN0cmVhbS0+aW50ZXJ2YWwsCisJCQkJCWxlMzJfdG9fY3B1cCAoJnAuc2l0ZC0+aHdfdWZyYW1lKQorCQkJCQkJJiAweDAwMDBmZmZmLAorCQkJCQlwLnNpdGQpOworCQkJCXRhZyA9IFFfTkVYVF9UWVBFIChwLnNpdGQtPmh3X25leHQpOworCQkJCXAgPSBwLnNpdGQtPnNpdGRfbmV4dDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXNpemUgLT0gdGVtcDsKKwkJCW5leHQgKz0gdGVtcDsKKwkJfSB3aGlsZSAocC5wdHIpOworCisJCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsICJcbiIpOworCQlzaXplIC09IHRlbXA7CisJCW5leHQgKz0gdGVtcDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlrZnJlZSAoc2Vlbik7CisKKwlyZXR1cm4gUEFHRV9TSVpFIC0gc2l6ZTsKK30KK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUiAocGVyaW9kaWMsIFNfSVJVR08sIHNob3dfcGVyaW9kaWMsIE5VTEwpOworCisjdW5kZWYgREJHX1NDSEVEX0xJTUlUCisKK3N0YXRpYyBzc2l6ZV90CitzaG93X3JlZ2lzdGVycyAoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9idXMJCSpidXM7CisJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwl1bnNpZ25lZAkJdGVtcCwgc2l6ZSwgaTsKKwljaGFyCQkJKm5leHQsIHNjcmF0Y2ggWzgwXTsKKwlzdGF0aWMgY2hhcgkJZm10IFtdID0gIiUqc1xuIjsKKwlzdGF0aWMgY2hhcgkJbGFiZWwgW10gPSAiIjsKKworCWJ1cyA9IHRvX3VzYl9idXMoY2xhc3NfZGV2KTsKKwloY2QgPSBidXMtPmhjcHJpdjsKKwllaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CisJbmV4dCA9IGJ1ZjsKKwlzaXplID0gUEFHRV9TSVpFOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoYnVzLT5jb250cm9sbGVyLT5wb3dlci5wb3dlcl9zdGF0ZSkgeworCQlzaXplID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAorCQkJImJ1cyAlcywgZGV2aWNlICVzIChkcml2ZXIgIiBEUklWRVJfVkVSU0lPTiAiKVxuIgorCQkJIlNVU1BFTkRFRCAobm8gcmVnaXN0ZXIgYWNjZXNzKVxuIiwKKwkJCWhjZC0+c2VsZi5jb250cm9sbGVyLT5idXMtPm5hbWUsCisJCQloY2QtPnNlbGYuY29udHJvbGxlci0+YnVzX2lkKTsKKwkJZ290byBkb25lOworCX0KKworCS8qIENhcGFiaWxpdHkgUmVnaXN0ZXJzICovCisJaSA9IEhDX1ZFUlNJT04ocmVhZGwgKCZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKKwkJImJ1cyAlcywgZGV2aWNlICVzIChkcml2ZXIgIiBEUklWRVJfVkVSU0lPTiAiKVxuIgorCQkiRUhDSSAleC4lMDJ4LCBoY2Qgc3RhdGUgJWRcbiIsCisJCWhjZC0+c2VsZi5jb250cm9sbGVyLT5idXMtPm5hbWUsCisJCWhjZC0+c2VsZi5jb250cm9sbGVyLT5idXNfaWQsCisJCWkgPj4gOCwgaSAmIDB4MGZmLCBoY2QtPnN0YXRlKTsKKwlzaXplIC09IHRlbXA7CisJbmV4dCArPSB0ZW1wOworCisJLy8gRklYTUUgaW50ZXJwcmV0IGJvdGggdHlwZXMgb2YgcGFyYW1zCisJaSA9IHJlYWRsICgmZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7CisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgInN0cnVjdHVyYWwgcGFyYW1zIDB4JTA4eFxuIiwgaSk7CisJc2l6ZSAtPSB0ZW1wOworCW5leHQgKz0gdGVtcDsKKworCWkgPSByZWFkbCAoJmVoY2ktPmNhcHMtPmhjY19wYXJhbXMpOworCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsICJjYXBhYmlsaXR5IHBhcmFtcyAweCUwOHhcbiIsIGkpOworCXNpemUgLT0gdGVtcDsKKwluZXh0ICs9IHRlbXA7CisKKwkvKiBPcGVyYXRpb25hbCBSZWdpc3RlcnMgKi8KKwl0ZW1wID0gZGJnX3N0YXR1c19idWYgKHNjcmF0Y2gsIHNpemVvZiBzY3JhdGNoLCBsYWJlbCwKKwkJCXJlYWRsICgmZWhjaS0+cmVncy0+c3RhdHVzKSk7CisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgZm10LCB0ZW1wLCBzY3JhdGNoKTsKKwlzaXplIC09IHRlbXA7CisJbmV4dCArPSB0ZW1wOworCisJdGVtcCA9IGRiZ19jb21tYW5kX2J1ZiAoc2NyYXRjaCwgc2l6ZW9mIHNjcmF0Y2gsIGxhYmVsLAorCQkJcmVhZGwgKCZlaGNpLT5yZWdzLT5jb21tYW5kKSk7CisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgZm10LCB0ZW1wLCBzY3JhdGNoKTsKKwlzaXplIC09IHRlbXA7CisJbmV4dCArPSB0ZW1wOworCisJdGVtcCA9IGRiZ19pbnRyX2J1ZiAoc2NyYXRjaCwgc2l6ZW9mIHNjcmF0Y2gsIGxhYmVsLAorCQkJcmVhZGwgKCZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSkpOworCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsIGZtdCwgdGVtcCwgc2NyYXRjaCk7CisJc2l6ZSAtPSB0ZW1wOworCW5leHQgKz0gdGVtcDsKKworCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsICJ1ZnJhbWUgJTA0eFxuIiwKKwkJCXJlYWRsICgmZWhjaS0+cmVncy0+ZnJhbWVfaW5kZXgpKTsKKwlzaXplIC09IHRlbXA7CisJbmV4dCArPSB0ZW1wOworCisJZm9yIChpID0gMDsgaSA8IEhDU19OX1BPUlRTIChlaGNpLT5oY3NfcGFyYW1zKTsgaSsrKSB7CisJCXRlbXAgPSBkYmdfcG9ydF9idWYgKHNjcmF0Y2gsIHNpemVvZiBzY3JhdGNoLCBsYWJlbCwgaSArIDEsCisJCQkJcmVhZGwgKCZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbaV0pKTsKKwkJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgZm10LCB0ZW1wLCBzY3JhdGNoKTsKKwkJc2l6ZSAtPSB0ZW1wOworCQluZXh0ICs9IHRlbXA7CisJfQorCisJaWYgKGVoY2ktPnJlY2xhaW0pIHsKKwkJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgInJlY2xhaW0gcWggJXAlc1xuIiwKKwkJCQllaGNpLT5yZWNsYWltLAorCQkJCWVoY2ktPnJlY2xhaW1fcmVhZHkgPyAiIHJlYWR5IiA6ICIiKTsKKwkJc2l6ZSAtPSB0ZW1wOworCQluZXh0ICs9IHRlbXA7CisJfQorCisjaWZkZWYgRUhDSV9TVEFUUworCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsCisJCSJpcnEgbm9ybWFsICVsZCBlcnIgJWxkIHJlY2xhaW0gJWxkIChsb3N0ICVsZClcbiIsCisJCWVoY2ktPnN0YXRzLm5vcm1hbCwgZWhjaS0+c3RhdHMuZXJyb3IsIGVoY2ktPnN0YXRzLnJlY2xhaW0sCisJCWVoY2ktPnN0YXRzLmxvc3RfaWFhKTsKKwlzaXplIC09IHRlbXA7CisJbmV4dCArPSB0ZW1wOworCisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgImNvbXBsZXRlICVsZCB1bmxpbmsgJWxkXG4iLAorCQllaGNpLT5zdGF0cy5jb21wbGV0ZSwgZWhjaS0+c3RhdHMudW5saW5rKTsKKwlzaXplIC09IHRlbXA7CisJbmV4dCArPSB0ZW1wOworI2VuZGlmCisKK2RvbmU6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBQQUdFX1NJWkUgLSBzaXplOworfQorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSIChyZWdpc3RlcnMsIFNfSVJVR08sIHNob3dfcmVnaXN0ZXJzLCBOVUxMKTsKKworc3RhdGljIGlubGluZSB2b2lkIGNyZWF0ZV9kZWJ1Z19maWxlcyAoc3RydWN0IGVoY2lfaGNkICplaGNpKQoreworCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsZGV2ID0gJmVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmNsYXNzX2RldjsKKworCWNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShjbGRldiwgJmNsYXNzX2RldmljZV9hdHRyX2FzeW5jKTsKKwljbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoY2xkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9wZXJpb2RpYyk7CisJY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKGNsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcmVnaXN0ZXJzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9kZWJ1Z19maWxlcyAoc3RydWN0IGVoY2lfaGNkICplaGNpKQoreworCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsZGV2ID0gJmVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmNsYXNzX2RldjsKKworCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZShjbGRldiwgJmNsYXNzX2RldmljZV9hdHRyX2FzeW5jKTsKKwljbGFzc19kZXZpY2VfcmVtb3ZlX2ZpbGUoY2xkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9wZXJpb2RpYyk7CisJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKGNsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcmVnaXN0ZXJzKTsKK30KKworI2VuZGlmIC8qIFNUVUJfREVCVUdfRklMRVMgKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2M2JiNzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKQEAgLTAsMCArMSwxMjYxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQgYnkgRGF2aWQgQnJvd25lbGwKKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworCSNkZWZpbmUgREVCVUcKKyNlbHNlCisJI3VuZGVmIERFQlVHCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSAiLi4vY29yZS9oY2QuaCIKKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogRUhDSSBoY19kcml2ZXIgaW1wbGVtZW50YXRpb24gLi4uIGV4cGVyaW1lbnRhbCwgaW5jb21wbGV0ZS4KKyAqIEJhc2VkIG9uIHRoZSBmaW5hbCAxLjAgcmVnaXN0ZXIgaW50ZXJmYWNlIHNwZWNpZmljYXRpb24uCisgKgorICogVVNCIDIuMCBzaG93cyB1cCBpbiB1cGNvbWluZyB3d3cucGNtY2lhLm9yZyB0ZWNobm9sb2d5LgorICogRmlyc3Qgd2FzIFBDTUNJQSwgbGlrZSBJU0E7IHRoZW4gQ2FyZEJ1cywgd2hpY2ggaXMgUENJLgorICogTmV4dCBjb21lcyAiQ2FyZEJheSIsIHVzaW5nIFVTQiAyLjAgc2lnbmFscy4KKyAqCisgKiBDb250YWlucyBhZGRpdGlvbmFsIGNvbnRyaWJ1dGlvbnMgYnkgQnJhZCBIYXJkcywgUm9yeSBCb2x0LCBhbmQgb3RoZXJzLgorICogU3BlY2lhbCB0aGFua3MgdG8gSW50ZWwgYW5kIFZJQSBmb3IgcHJvdmlkaW5nIGhvc3QgY29udHJvbGxlcnMgdG8KKyAqIHRlc3QgdGhpcyBkcml2ZXIgb24sIGFuZCBDeXByZXNzIChpbmNsdWRpbmcgSW4tU3lzdGVtIERlc2lnbikgZm9yCisgKiBwcm92aWRpbmcgZWFybHkgZGV2aWNlcyBmb3IgdGhvc2UgaG9zdCBjb250cm9sbGVycyB0byB0YWxrIHRvIQorICoKKyAqIEhJU1RPUlk6CisgKgorICogMjAwNC0wNS0xMCBSb290IGh1YiBhbmQgUENJIHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQ7IHJlbW90ZSB3YWtldXAuIChkYikKKyAqIDIwMDQtMDItMjQgUmVwbGFjZSBwY2lfKiB3aXRoIGdlbmVyaWMgZG1hXyogQVBJIGNhbGxzIChkc2F4ZW5hQHBsZXhpdHkubmV0KQorICogMjAwMy0xMi0yOSBSZXdyaXR0ZW4gaGlnaCBzcGVlZCBpc28gdHJhbnNmZXIgc3VwcG9ydCAoYnkgTWljaGFsIFNvamthLAorICoJPHNvamthbUBjZW50cnVtLmN6PiwgdXBkYXRlcyBieSBEQikuCisgKgorICogMjAwMi0xMS0yOQlDb3JyZWN0IGhhbmRsaW5nIGZvciBodyBhc3luY19uZXh0IHJlZ2lzdGVyLgorICogMjAwMi0wOC0wNglIYW5kbGluZyBmb3IgYnVsayBhbmQgaW50ZXJydXB0IHRyYW5zZmVycyBpcyBtb3N0bHkgc2hhcmVkOworICoJb25seSBzY2hlZHVsaW5nIGlzIGRpZmZlcmVudCwgbm8gYXJiaXRyYXJ5IGxpbWl0YXRpb25zLgorICogMjAwMi0wNy0yNQlTYW5pdHkgY2hlY2sgUENJIHJlYWRzLCBtb3N0bHkgZm9yIGJldHRlciBjYXJkYnVzIHN1cHBvcnQsCisgKiAJY2xlYW4gdXAgSEMgcnVuIHN0YXRlIGhhbmRzaGFraW5nLgorICogMjAwMi0wNS0yNAlQcmVsaW1pbmFyeSBGUy9MUyBpbnRlcnJ1cHRzLCB1c2luZyBzY2hlZHVsaW5nIHNob3J0Y3V0cworICogMjAwMi0wNS0xMQlDbGVhciBUVCBlcnJvcnMgZm9yIEZTL0xTIGN0cmwvYnVsay4gIEZpbGwgaW4gc29tZSBvdGhlcgorICoJbWlzc2luZyBwaWVjZXM6ICBlbmFibGluZyA2NGJpdCBkbWEsIGhhbmRvZmYgZnJvbSBCSU9TL1NNTS4KKyAqIDIwMDItMDUtMDcJU29tZSBlcnJvciBwYXRoIGNsZWFudXBzIHRvIHJlcG9ydCBiZXR0ZXIgZXJyb3JzOyB3bWIoKTsKKyAqCXVzZSBub24tQ1ZTIHZlcnNpb24gaWQ7IGJldHRlciBpc28gYmFuZHdpZHRoIGNsYWltLgorICogMjAwMi0wNC0xOQlDb250cm9sL2J1bGsvaW50ZXJydXB0IHN1Ym1pdCBubyBsb25nZXIgdXNlcyBnaXZlYmFjaygpIG9uCisgKgllcnJvcnMgaW4gc3VibWl0IHBhdGguICBCdWdmaXhlcyB0byBpbnRlcnJ1cHQgc2NoZWR1bGluZy9wcm9jZXNzaW5nLgorICogMjAwMi0wMy0wNQlJbml0aWFsIGhpZ2gtc3BlZWQgSVNPIHN1cHBvcnQ7IHJlZHVjZSBJVEQgbWVtb3J5OyBzaGlmdAorICoJbW9yZSBjaGVja2luZyB0byBnZW5lcmljIGhjZCBmcmFtZXdvcmsgKGRiKS4gIE1ha2UgaXQgd29yayB3aXRoCisgKglQaGlsaXBzIEVIQ0k7IHJlZHVjZSBQQ0kgdHJhZmZpYzsgc2hvcnRlbiBJUlEgcGF0aCAoUm9yeSBCb2x0KS4KKyAqIDIwMDItMDEtMTQJTWlub3IgY2xlYW51cDsgdmVyc2lvbiBzeW5jaC4KKyAqIDIwMDItMDEtMDgJRml4IHJvb3RodWIgaGFuZG9mZiBvZiBGUy9MUyB0byBjb21wYW5pb24gY29udHJvbGxlcnMuCisgKiAyMDAyLTAxLTA0CUNvbnRyb2wvQnVsayBxdWV1aW5nIGJlaGF2ZXMuCisgKgorICogMjAwMS0xMi0xMglJbml0aWFsIHBhdGNoIHZlcnNpb24gZm9yIExpbnV4IDIuNS4xIGtlcm5lbC4KKyAqIDIwMDEtSnVuZQlXb3JrcyB3aXRoIHVzYi1zdG9yYWdlIGFuZCBORUMgRUhDSSBvbiAyLjQKKyAqLworCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIxMCBEZWMgMjAwNCIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiRGF2aWQgQnJvd25lbGwiCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgMi4wICdFbmhhbmNlZCcgSG9zdCBDb250cm9sbGVyIChFSENJKSBEcml2ZXIiCisKK3N0YXRpYyBjb25zdCBjaGFyCWhjZF9uYW1lIFtdID0gImVoY2lfaGNkIjsKKworCisjdW5kZWYgRUhDSV9WRVJCT1NFX0RFQlVHCisjdW5kZWYgRUhDSV9VUkJfVFJBQ0UKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIEVIQ0lfU1RBVFMKKyNlbmRpZgorCisvKiBtYWdpYyBudW1iZXJzIHRoYXQgY2FuIGFmZmVjdCBzeXN0ZW0gcGVyZm9ybWFuY2UgKi8KKyNkZWZpbmUJRUhDSV9UVU5FX0NFUlIJCTMJLyogMC0zIHF0ZCByZXRyaWVzOyAwID09IGRvbid0IHN0b3AgKi8KKyNkZWZpbmUJRUhDSV9UVU5FX1JMX0hTCQk0CS8qIG5hayB0aHJvdHRsZTsgc2VlIDQuOSAqLworI2RlZmluZQlFSENJX1RVTkVfUkxfVFQJCTAKKyNkZWZpbmUJRUhDSV9UVU5FX01VTFRfSFMJMQkvKiAxLTMgdHJhbnNhY3Rpb25zL3VmcmFtZTsgNC4xMC4zICovCisjZGVmaW5lCUVIQ0lfVFVORV9NVUxUX1RUCTEKKyNkZWZpbmUJRUhDSV9UVU5FX0ZMUwkJMgkvKiAoc21hbGwpIDI1NiBmcmFtZSBzY2hlZHVsZSAqLworCisjZGVmaW5lIEVIQ0lfSUFBX0pJRkZJRVMJKEhaLzEwMCkJLyogYXJiaXRyYXJ5OyB+MTAgbXNlYyAqLworI2RlZmluZSBFSENJX0lPX0pJRkZJRVMJCShIWi8xMCkJCS8qIGlvIHdhdGNoZG9nID4gaXJxX3RocmVzaCAqLworI2RlZmluZSBFSENJX0FTWU5DX0pJRkZJRVMJKEhaLzIwKQkJLyogYXN5bmMgaWRsZSB0aW1lb3V0ICovCisjZGVmaW5lIEVIQ0lfU0hSSU5LX0pJRkZJRVMJKEhaLzIwMCkJLyogYXN5bmMgcWggdW5saW5rIGRlbGF5ICovCisKKy8qIEluaXRpYWwgSVJRIGxhdGVuY3k6ICBmYXN0ZXIgdGhhbiBodyBkZWZhdWx0ICovCitzdGF0aWMgaW50IGxvZzJfaXJxX3RocmVzaCA9IDA7CQkvLyAwIHRvIDYKK21vZHVsZV9wYXJhbSAobG9nMl9pcnFfdGhyZXNoLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyAobG9nMl9pcnFfdGhyZXNoLCAibG9nMiBJUlEgbGF0ZW5jeSwgMS02NCBtaWNyb2ZyYW1lcyIpOworCisvKiBpbml0aWFsIHBhcmsgc2V0dGluZzogIHNsb3dlciB0aGFuIGh3IGRlZmF1bHQgKi8KK3N0YXRpYyB1bnNpZ25lZCBwYXJrID0gMDsKK21vZHVsZV9wYXJhbSAocGFyaywgdWludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDIChwYXJrLCAicGFyayBzZXR0aW5nOyAxLTMgYmFjay10by1iYWNrIGFzeW5jIHBhY2tldHMiKTsKKworI2RlZmluZQlJTlRSX01BU0sgKFNUU19JQUEgfCBTVFNfRkFUQUwgfCBTVFNfUENEIHwgU1RTX0VSUiB8IFNUU19JTlQpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpbmNsdWRlICJlaGNpLmgiCisjaW5jbHVkZSAiZWhjaS1kYmcuYyIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIGhhbmRzaGFrZSAtIHNwaW4gcmVhZGluZyBoYyB1bnRpbCBoYW5kc2hha2UgY29tcGxldGVzIG9yIGZhaWxzCisgKiBAcHRyOiBhZGRyZXNzIG9mIGhjIHJlZ2lzdGVyIHRvIGJlIHJlYWQKKyAqIEBtYXNrOiBiaXRzIHRvIGxvb2sgYXQgaW4gcmVzdWx0IG9mIHJlYWQKKyAqIEBkb25lOiB2YWx1ZSBvZiB0aG9zZSBiaXRzIHdoZW4gaGFuZHNoYWtlIHN1Y2NlZWRzCisgKiBAdXNlYzogdGltZW91dCBpbiBtaWNyb3NlY29uZHMKKyAqCisgKiBSZXR1cm5zIG5lZ2F0aXZlIGVycm5vLCBvciB6ZXJvIG9uIHN1Y2Nlc3MKKyAqCisgKiBTdWNjZXNzIGhhcHBlbnMgd2hlbiB0aGUgIm1hc2siIGJpdHMgaGF2ZSB0aGUgc3BlY2lmaWVkIHZhbHVlIChoYXJkd2FyZQorICogaGFuZHNoYWtlIGRvbmUpLiAgVGhlcmUgYXJlIHR3byBmYWlsdXJlIG1vZGVzOiAgInVzZWMiIGhhdmUgcGFzc2VkIChtYWpvcgorICogaGFyZHdhcmUgZmxha2VvdXQpLCBvciB0aGUgcmVnaXN0ZXIgcmVhZHMgYXMgYWxsLW9uZXMgKGhhcmR3YXJlIHJlbW92ZWQpLgorICoKKyAqIFRoYXQgbGFzdCBmYWlsdXJlIHNob3VsZF9vbmx5IGhhcHBlbiBpbiBjYXNlcyBsaWtlIHBoeXNpY2FsIGNhcmRidXMgZWplY3QKKyAqIGJlZm9yZSBkcml2ZXIgc2h1dGRvd24uIEJ1dCBpdCBhbHNvIHNlZW1zIHRvIGJlIGNhdXNlZCBieSBidWdzIGluIGNhcmRidXMKKyAqIGJyaWRnZSBzaHV0ZG93bjogIHNodXR0aW5nIGRvd24gdGhlIGJyaWRnZSBiZWZvcmUgdGhlIGRldmljZXMgdXNpbmcgaXQuCisgKi8KK3N0YXRpYyBpbnQgaGFuZHNoYWtlICh2b2lkIF9faW9tZW0gKnB0ciwgdTMyIG1hc2ssIHUzMiBkb25lLCBpbnQgdXNlYykKK3sKKwl1MzIJcmVzdWx0OworCisJZG8geworCQlyZXN1bHQgPSByZWFkbCAocHRyKTsKKwkJaWYgKHJlc3VsdCA9PSB+KHUzMikwKQkJLyogY2FyZCByZW1vdmVkICovCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmVzdWx0ICY9IG1hc2s7CisJCWlmIChyZXN1bHQgPT0gZG9uZSkKKwkJCXJldHVybiAwOworCQl1ZGVsYXkgKDEpOworCQl1c2VjLS07CisJfSB3aGlsZSAodXNlYyA+IDApOworCXJldHVybiAtRVRJTUVET1VUOworfQorCisvKiBmb3JjZSBIQyB0byBoYWx0IHN0YXRlIGZyb20gdW5rbm93biAoRUhDSSBzcGVjIHNlY3Rpb24gMi4zKSAqLworc3RhdGljIGludCBlaGNpX2hhbHQgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSkKK3sKKwl1MzIJdGVtcCA9IHJlYWRsICgmZWhjaS0+cmVncy0+c3RhdHVzKTsKKworCWlmICgodGVtcCAmIFNUU19IQUxUKSAhPSAwKQorCQlyZXR1cm4gMDsKKworCXRlbXAgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOworCXRlbXAgJj0gfkNNRF9SVU47CisJd3JpdGVsICh0ZW1wLCAmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisJcmV0dXJuIGhhbmRzaGFrZSAoJmVoY2ktPnJlZ3MtPnN0YXR1cywgU1RTX0hBTFQsIFNUU19IQUxULCAxNiAqIDEyNSk7Cit9CisKKy8qIHB1dCBUREkvQVJDIHNpbGljb24gaW50byBFSENJIG1vZGUgKi8KK3N0YXRpYyB2b2lkIHRkaV9yZXNldCAoc3RydWN0IGVoY2lfaGNkICplaGNpKQoreworCXUzMiBfX2lvbWVtCSpyZWdfcHRyOworCXUzMgkJdG1wOworCisJcmVnX3B0ciA9ICh1MzIgX19pb21lbSAqKSgoKHU4IF9faW9tZW0gKillaGNpLT5yZWdzKSArIDB4NjgpOworCXRtcCA9IHJlYWRsIChyZWdfcHRyKTsKKwl0bXAgfD0gMHgzOworCXdyaXRlbCAodG1wLCByZWdfcHRyKTsKK30KKworLyogcmVzZXQgYSBub24tcnVubmluZyAoU1RTX0hBTFQgPT0gMSkgY29udHJvbGxlciAqLworc3RhdGljIGludCBlaGNpX3Jlc2V0IChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCit7CisJaW50CXJldHZhbDsKKwl1MzIJY29tbWFuZCA9IHJlYWRsICgmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisKKwljb21tYW5kIHw9IENNRF9SRVNFVDsKKwlkYmdfY21kIChlaGNpLCAicmVzZXQiLCBjb21tYW5kKTsKKwl3cml0ZWwgKGNvbW1hbmQsICZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKwllaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUgPSBIQ19TVEFURV9IQUxUOworCWVoY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzOworCXJldHZhbCA9IGhhbmRzaGFrZSAoJmVoY2ktPnJlZ3MtPmNvbW1hbmQsIENNRF9SRVNFVCwgMCwgMjUwICogMTAwMCk7CisKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKGVoY2lfaXNfVERJKGVoY2kpKQorCQl0ZGlfcmVzZXQgKGVoY2kpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyogaWRsZSB0aGUgY29udHJvbGxlciAoZnJvbSBydW5uaW5nKSAqLworc3RhdGljIHZvaWQgZWhjaV9xdWllc2NlIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCit7CisJdTMyCXRlbXA7CisKKyNpZmRlZiBERUJVRworCWlmICghSENfSVNfUlVOTklORyAoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlKSkKKwkJQlVHICgpOworI2VuZGlmCisKKwkvKiB3YWl0IGZvciBhbnkgc2NoZWR1bGUgZW5hYmxlcy9kaXNhYmxlcyB0byB0YWtlIGVmZmVjdCAqLworCXRlbXAgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPmNvbW1hbmQpIDw8IDEwOworCXRlbXAgJj0gU1RTX0FTUyB8IFNUU19QU1M7CisJaWYgKGhhbmRzaGFrZSAoJmVoY2ktPnJlZ3MtPnN0YXR1cywgU1RTX0FTUyB8IFNUU19QU1MsCisJCQkJdGVtcCwgMTYgKiAxMjUpICE9IDApIHsKKwkJZWhjaV90b19oY2QoZWhjaSktPnN0YXRlID0gSENfU1RBVEVfSEFMVDsKKwkJcmV0dXJuOworCX0KKworCS8qIHRoZW4gZGlzYWJsZSBhbnl0aGluZyB0aGF0J3Mgc3RpbGwgYWN0aXZlICovCisJdGVtcCA9IHJlYWRsICgmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisJdGVtcCAmPSB+KENNRF9BU0UgfCBDTURfSUFBRCB8IENNRF9QU0UpOworCXdyaXRlbCAodGVtcCwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOworCisJLyogaGFyZHdhcmUgY2FuIHRha2UgMTYgbWljcm9mcmFtZXMgdG8gdHVybiBvZmYgLi4uICovCisJaWYgKGhhbmRzaGFrZSAoJmVoY2ktPnJlZ3MtPnN0YXR1cywgU1RTX0FTUyB8IFNUU19QU1MsCisJCQkJMCwgMTYgKiAxMjUpICE9IDApIHsKKwkJZWhjaV90b19oY2QoZWhjaSktPnN0YXRlID0gSENfU1RBVEVfSEFMVDsKKwkJcmV0dXJuOworCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgZWhjaV93b3JrKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisjaW5jbHVkZSAiZWhjaS1odWIuYyIKKyNpbmNsdWRlICJlaGNpLW1lbS5jIgorI2luY2x1ZGUgImVoY2ktcS5jIgorI2luY2x1ZGUgImVoY2ktc2NoZWQuYyIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgZWhjaV93YXRjaGRvZyAodW5zaWduZWQgbG9uZyBwYXJhbSkKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gKHN0cnVjdCBlaGNpX2hjZCAqKSBwYXJhbTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCisJLyogbG9zdCBJQUEgaXJxcyB3ZWRnZSB0aGluZ3MgYmFkbHk7IHNlZW4gd2l0aCBhIHZ0ODIzNSAqLworCWlmIChlaGNpLT5yZWNsYWltKSB7CisJCXUzMgkJc3RhdHVzID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5zdGF0dXMpOworCisJCWlmIChzdGF0dXMgJiBTVFNfSUFBKSB7CisJCQllaGNpX3ZkYmcgKGVoY2ksICJsb3N0IElBQVxuIik7CisJCQlDT1VOVCAoZWhjaS0+c3RhdHMubG9zdF9pYWEpOworCQkJd3JpdGVsIChTVFNfSUFBLCAmZWhjaS0+cmVncy0+c3RhdHVzKTsKKwkJCWVoY2ktPnJlY2xhaW1fcmVhZHkgPSAxOworCQl9CisJfQorCisgCS8qIHN0b3AgYXN5bmMgcHJvY2Vzc2luZyBhZnRlciBpdCdzIGlkbGVkIGEgYml0ICovCisJaWYgKHRlc3RfYml0IChUSU1FUl9BU1lOQ19PRkYsICZlaGNpLT5hY3Rpb25zKSkKKyAJCXN0YXJ0X3VubGlua19hc3luYyAoZWhjaSwgZWhjaS0+YXN5bmMpOworCisJLyogZWhjaSBjb3VsZCBydW4gYnkgdGltZXIsIHdpdGhvdXQgSVJRcyAuLi4gKi8KKwllaGNpX3dvcmsgKGVoY2ksIE5VTEwpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKK30KKworI2lmZGVmCUNPTkZJR19QQ0kKKworLyogRUhDSSAwLjk2IChhbmQgbGF0ZXIpIHNlY3Rpb24gNS4xIHNheXMgaG93IHRvIGtpY2sgQklPUy9TTU0vLi4uCisgKiBvZmYgdGhlIGNvbnRyb2xsZXIgKG1heWJlIGl0IGNhbiBib290IGZyb20gaGlnaHNwZWVkIFVTQiBkaXNrcykuCisgKi8KK3N0YXRpYyBpbnQgYmlvc19oYW5kb2ZmIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIGludCB3aGVyZSwgdTMyIGNhcCkKK3sKKwlpZiAoY2FwICYgKDEgPDwgMTYpKSB7CisJCWludCBtc2VjID0gNTAwMDsKKwkJc3RydWN0IHBjaV9kZXYgKnBkZXYgPQorCQkJCXRvX3BjaV9kZXYoZWhjaV90b19oY2QoZWhjaSktPnNlbGYuY29udHJvbGxlcik7CisKKwkJLyogcmVxdWVzdCBoYW5kb2ZmIHRvIE9TICovCisJCWNhcCB8PSAxIDw8IDI0OworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIHdoZXJlLCBjYXApOworCisJCS8qIGFuZCB3YWl0IGEgd2hpbGUgZm9yIGl0IHRvIGhhcHBlbiAqLworCQlkbyB7CisJCQltc2xlZXAoMTApOworCQkJbXNlYyAtPSAxMDsKKwkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCB3aGVyZSwgJmNhcCk7CisJCX0gd2hpbGUgKChjYXAgJiAoMSA8PCAxNikpICYmIG1zZWMpOworCQlpZiAoY2FwICYgKDEgPDwgMTYpKSB7CisJCQllaGNpX2VyciAoZWhjaSwgIkJJT1MgaGFuZG9mZiBmYWlsZWQgKCVkLCAlMDR4KVxuIiwKKwkJCQl3aGVyZSwgY2FwKTsKKwkJCS8vIHNvbWUgQklPUyB2ZXJzaW9ucyBzZWVtIGJ1Z2d5Li4uCisJCQkvLyByZXR1cm4gMTsKKwkJCWVoY2lfd2FybiAoZWhjaSwgImNvbnRpbnVpbmcgYWZ0ZXIgQklPUyBidWcuLi5cbiIpOworCQkJcmV0dXJuIDA7CisJCX0gCisJCWVoY2lfZGJnIChlaGNpLCAiQklPUyBoYW5kb2ZmIHN1Y2NlZWRlZFxuIik7CisJfQorCXJldHVybiAwOworfQorCisjZW5kaWYKKworc3RhdGljIGludAorZWhjaV9yZWJvb3QgKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBjb2RlLCB2b2lkICpudWxsKQoreworCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2k7CisKKwllaGNpID0gY29udGFpbmVyX29mIChzZWxmLCBzdHJ1Y3QgZWhjaV9oY2QsIHJlYm9vdF9ub3RpZmllcik7CisKKwkvKiBtYWtlIEJJT1MvZXRjIHVzZSBjb21wYW5pb24gY29udHJvbGxlciBkdXJpbmcgcmVib290ICovCisJd3JpdGVsICgwLCAmZWhjaS0+cmVncy0+Y29uZmlndXJlZF9mbGFnKTsKKwlyZXR1cm4gMDsKK30KKworCisvKiBjYWxsZWQgYnkga2h1YmQgb3Igcm9vdCBodWIgaW5pdCB0aHJlYWRzICovCisKK3N0YXRpYyBpbnQgZWhjaV9oY19yZXNldCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CisJdTMyCQkJdGVtcDsKKwl1bnNpZ25lZAkJY291bnQgPSAyNTYvNDsKKworCXNwaW5fbG9ja19pbml0ICgmZWhjaS0+bG9jayk7CisKKwllaGNpLT5jYXBzID0gaGNkLT5yZWdzOworCWVoY2ktPnJlZ3MgPSBoY2QtPnJlZ3MgKyBIQ19MRU5HVEggKHJlYWRsICgmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOworCWRiZ19oY3NfcGFyYW1zIChlaGNpLCAicmVzZXQiKTsKKwlkYmdfaGNjX3BhcmFtcyAoZWhjaSwgInJlc2V0Iik7CisKKyNpZmRlZglDT05GSUdfUENJCisJLyogRUhDSSAwLjk2IGFuZCBsYXRlciBtYXkgaGF2ZSAiZXh0ZW5kZWQgY2FwYWJpbGl0aWVzIiAqLworCWlmIChoY2QtPnNlbGYuY29udHJvbGxlci0+YnVzID09ICZwY2lfYnVzX3R5cGUpIHsKKwkJc3RydWN0IHBjaV9kZXYJKnBkZXYgPSB0b19wY2lfZGV2KGhjZC0+c2VsZi5jb250cm9sbGVyKTsKKworCQlzd2l0Y2ggKHBkZXYtPnZlbmRvcikgeworCQljYXNlIFBDSV9WRU5ET1JfSURfVERJOgorCQkJaWYgKHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1RESV9FSENJKSB7CisJCQkJZWhjaS0+aXNfdGRpX3JoX3R0ID0gMTsKKwkJCQl0ZGlfcmVzZXQgKGVoY2kpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUENJX1ZFTkRPUl9JRF9BTUQ6CisJCQkvKiBBTUQ4MTExIEVIQ0kgZG9lc24ndCB3b3JrLCBhY2NvcmRpbmcgdG8gQU1EIGVycmF0YSAqLworCQkJaWYgKHBkZXYtPmRldmljZSA9PSAweDc0NjMpIHsKKwkJCQllaGNpX2luZm8gKGVoY2ksICJpZ25vcmluZyBBTUQ4MTExIChlcnJhdGEpXG4iKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKKwkJdGVtcCA9IEhDQ19FWFRfQ0FQUyAocmVhZGwgKCZlaGNpLT5jYXBzLT5oY2NfcGFyYW1zKSk7CisJfSBlbHNlCisJCXRlbXAgPSAwOworCXdoaWxlICh0ZW1wICYmIGNvdW50LS0pIHsKKwkJdTMyCQljYXA7CisKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkICh0b19wY2lfZGV2KGhjZC0+c2VsZi5jb250cm9sbGVyKSwKKwkJCQl0ZW1wLCAmY2FwKTsKKwkJZWhjaV9kYmcgKGVoY2ksICJjYXBhYmlsaXR5ICUwNHggYXQgJTAyeFxuIiwgY2FwLCB0ZW1wKTsKKwkJc3dpdGNoIChjYXAgJiAweGZmKSB7CisJCWNhc2UgMToJCQkvKiBCSU9TL1NNTS8uLi4gaGFuZG9mZiAqLworCQkJaWYgKGJpb3NfaGFuZG9mZiAoZWhjaSwgdGVtcCwgY2FwKSAhPSAwKQorCQkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJCWJyZWFrOworCQljYXNlIDA6CQkJLyogaWxsZWdhbCByZXNlcnZlZCBjYXBhYmlsaXR5ICovCisJCQllaGNpX3dhcm4gKGVoY2ksICJpbGxlZ2FsIGNhcGFiaWxpdHkhXG4iKTsKKwkJCWNhcCA9IDA7CisJCQkvKiBGQUxMVEhST1VHSCAqLworCQlkZWZhdWx0OgkJLyogdW5rbm93biAqLworCQkJYnJlYWs7CisJCX0KKwkJdGVtcCA9IChjYXAgPj4gOCkgJiAweGZmOworCX0KKwlpZiAoIWNvdW50KSB7CisJCWVoY2lfZXJyIChlaGNpLCAiYm9ndXMgY2FwYWJpbGl0aWVzIC4uLiBQQ0kgcHJvYmxlbXMhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmIChlaGNpX2lzX1RESShlaGNpKSkKKwkJZWhjaV9yZXNldCAoZWhjaSk7CisjZW5kaWYKKworCS8qIGNhY2hlIHRoaXMgcmVhZG9ubHkgZGF0YTsgbWluaW1pemUgUENJIHJlYWRzICovCisJZWhjaS0+aGNzX3BhcmFtcyA9IHJlYWRsICgmZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7CisKKwkvKiBhdCBsZWFzdCB0aGUgR2VuZXN5cyBHTDg4MFMgbmVlZHMgZml4dXAgaGVyZSAqLworCXRlbXAgPSBIQ1NfTl9DQyhlaGNpLT5oY3NfcGFyYW1zKSAqIEhDU19OX1BDQyhlaGNpLT5oY3NfcGFyYW1zKTsKKwl0ZW1wICY9IDB4MGY7CisJaWYgKHRlbXAgJiYgSENTX05fUE9SVFMoZWhjaS0+aGNzX3BhcmFtcykgPiB0ZW1wKSB7CisJCWVoY2lfZGJnIChlaGNpLCAiYm9ndXMgcG9ydCBjb25maWd1cmF0aW9uOiAiCisJCQkiY2M9JWQgeCBwY2M9JWQgPCBwb3J0cz0lZFxuIiwKKwkJCUhDU19OX0NDKGVoY2ktPmhjc19wYXJhbXMpLAorCQkJSENTX05fUENDKGVoY2ktPmhjc19wYXJhbXMpLAorCQkJSENTX05fUE9SVFMoZWhjaS0+aGNzX3BhcmFtcykpOworCisjaWZkZWYJQ09ORklHX1BDSQorCQlpZiAoaGNkLT5zZWxmLmNvbnRyb2xsZXItPmJ1cyA9PSAmcGNpX2J1c190eXBlKSB7CisJCQlzdHJ1Y3QgcGNpX2RldgkqcGRldjsKKworCQkJcGRldiA9IHRvX3BjaV9kZXYoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOworCQkJc3dpdGNoIChwZGV2LT52ZW5kb3IpIHsKKwkJCWNhc2UgMHgxN2EwOgkJLyogR0VORVNZUyAqLworCQkJCS8qIEdMODgwUzogc2hvdWxkIGJlIFBPUlRTPTIgKi8KKwkJCQl0ZW1wIHw9IChlaGNpLT5oY3NfcGFyYW1zICYgfjB4Zik7CisJCQkJZWhjaS0+aGNzX3BhcmFtcyA9IHRlbXA7CisJCQkJYnJlYWs7CisJCQljYXNlIFBDSV9WRU5ET1JfSURfTlZJRElBOgorCQkJCS8qIE5GNDogc2hvdWxkIGJlIFBDQz0xMCAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisjZW5kaWYKKwl9CisKKwkvKiBmb3JjZSBIQyB0byBoYWx0IHN0YXRlICovCisJcmV0dXJuIGVoY2lfaGFsdCAoZWhjaSk7Cit9CisKK3N0YXRpYyBpbnQgZWhjaV9zdGFydCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CisJdTMyCQkJdGVtcDsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKKwlzdHJ1Y3QgdXNiX2J1cwkJKmJ1czsKKwlpbnQJCQlyZXR2YWw7CisJdTMyCQkJaGNjX3BhcmFtczsKKwl1OCAgICAgICAgICAgICAgICAgICAgICBzYnJuID0gMDsKKwlpbnQJCQlmaXJzdDsKKworCS8qIHNraXAgc29tZSB0aGluZ3Mgb24gcmVzdGFydCBwYXRocyAqLworCWZpcnN0ID0gKGVoY2ktPndhdGNoZG9nLmRhdGEgPT0gMCk7CisJaWYgKGZpcnN0KSB7CisJCWluaXRfdGltZXIgKCZlaGNpLT53YXRjaGRvZyk7CisJCWVoY2ktPndhdGNoZG9nLmZ1bmN0aW9uID0gZWhjaV93YXRjaGRvZzsKKwkJZWhjaS0+d2F0Y2hkb2cuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBlaGNpOworCX0KKworCS8qCisJICogaHcgZGVmYXVsdDogMUsgcGVyaW9kaWMgbGlzdCBoZWFkcywgb25lIHBlciBmcmFtZS4KKwkgKiBwZXJpb2RpY19zaXplIGNhbiBzaHJpbmsgYnkgVVNCQ01EIHVwZGF0ZSBpZiBoY2NfcGFyYW1zIGFsbG93cy4KKwkgKi8KKwllaGNpLT5wZXJpb2RpY19zaXplID0gREVGQVVMVF9JX1REUFM7CisJaWYgKGZpcnN0ICYmIChyZXR2YWwgPSBlaGNpX21lbV9pbml0IChlaGNpLCBHRlBfS0VSTkVMKSkgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJLyogY29udHJvbGxlcnMgbWF5IGNhY2hlIHNvbWUgb2YgdGhlIHBlcmlvZGljIHNjaGVkdWxlIC4uLiAqLworCWhjY19wYXJhbXMgPSByZWFkbCAoJmVoY2ktPmNhcHMtPmhjY19wYXJhbXMpOworCWlmIChIQ0NfSVNPQ19DQUNIRSAoaGNjX3BhcmFtcykpIAkvLyBmdWxsIGZyYW1lIGNhY2hlCisJCWVoY2ktPmlfdGhyZXNoID0gODsKKwllbHNlCQkJCQkvLyBOIG1pY3JvZnJhbWVzIGNhY2hlZAorCQllaGNpLT5pX3RocmVzaCA9IDIgKyBIQ0NfSVNPQ19USFJFUyAoaGNjX3BhcmFtcyk7CisKKwllaGNpLT5yZWNsYWltID0gTlVMTDsKKwllaGNpLT5yZWNsYWltX3JlYWR5ID0gMDsKKwllaGNpLT5uZXh0X3VmcmFtZSA9IC0xOworCisJLyogY29udHJvbGxlciBzdGF0ZTogIHVua25vd24gLS0+IHJlc2V0ICovCisKKwkvKiBFSENJIHNwZWMgc2VjdGlvbiA0LjEgKi8KKwlpZiAoKHJldHZhbCA9IGVoY2lfcmVzZXQgKGVoY2kpKSAhPSAwKSB7CisJCWVoY2lfbWVtX2NsZWFudXAgKGVoY2kpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwl3cml0ZWwgKGVoY2ktPnBlcmlvZGljX2RtYSwgJmVoY2ktPnJlZ3MtPmZyYW1lX2xpc3QpOworCisjaWZkZWYJQ09ORklHX1BDSQorCWlmIChoY2QtPnNlbGYuY29udHJvbGxlci0+YnVzID09ICZwY2lfYnVzX3R5cGUpIHsKKwkJc3RydWN0IHBjaV9kZXYJCSpwZGV2OworCQl1MTYJCQlwb3J0X3dha2U7CisKKwkJcGRldiA9IHRvX3BjaV9kZXYoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOworCisJCS8qIFNlcmlhbCBCdXMgUmVsZWFzZSBOdW1iZXIgaXMgYXQgUENJIDB4NjAgb2Zmc2V0ICovCisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIDB4NjAsICZzYnJuKTsKKworCQkvKiBwb3J0IHdha2UgY2FwYWJpbGl0eSwgcmVwb3J0ZWQgYnkgYm9vdCBmaXJtd2FyZSAqLworCQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCAweDYyLCAmcG9ydF93YWtlKTsKKwkJaGNkLT5jYW5fd2FrZXVwID0gKHBvcnRfd2FrZSAmIDEpICE9IDA7CisKKwkJLyogaGVscCBoYyBkbWEgd29yayB3ZWxsIHdpdGggY2FjaGVsaW5lcyAqLworCQlwY2lfc2V0X213aSAocGRldik7CisJfQorI2VuZGlmCisKKwkvKgorCSAqIGRlZGljYXRlIGEgcWggZm9yIHRoZSBhc3luYyByaW5nIGhlYWQsIHNpbmNlIHdlIGNvdWxkbid0IHVubGluaworCSAqIGEgJ3JlYWwnIHFoIHdpdGhvdXQgc3RvcHBpbmcgdGhlIGFzeW5jIHNjaGVkdWxlIFs0LjhdLiAgdXNlIGl0CisJICogYXMgdGhlICdyZWNsYW1hdGlvbiBsaXN0IGhlYWQnIHRvby4KKwkgKiBpdHMgZHVtbXkgaXMgdXNlZCBpbiBod19hbHRfbmV4dCBvZiBtYW55IHRkcywgdG8gcHJldmVudCB0aGUgcWgKKwkgKiBmcm9tIGF1dG9tYXRpY2FsbHkgYWR2YW5jaW5nIHRvIHRoZSBuZXh0IHRkIGFmdGVyIHNob3J0IHJlYWRzLgorCSAqLworCWlmIChmaXJzdCkgeworCQllaGNpLT5hc3luYy0+cWhfbmV4dC5xaCA9IE5VTEw7CisJCWVoY2ktPmFzeW5jLT5od19uZXh0ID0gUUhfTkVYVCAoZWhjaS0+YXN5bmMtPnFoX2RtYSk7CisJCWVoY2ktPmFzeW5jLT5od19pbmZvMSA9IGNwdV90b19sZTMyIChRSF9IRUFEKTsKKwkJZWhjaS0+YXN5bmMtPmh3X3Rva2VuID0gY3B1X3RvX2xlMzIgKFFURF9TVFNfSEFMVCk7CisJCWVoY2ktPmFzeW5jLT5od19xdGRfbmV4dCA9IEVIQ0lfTElTVF9FTkQ7CisJCWVoY2ktPmFzeW5jLT5xaF9zdGF0ZSA9IFFIX1NUQVRFX0xJTktFRDsKKwkJZWhjaS0+YXN5bmMtPmh3X2FsdF9uZXh0ID0gUVREX05FWFQgKGVoY2ktPmFzeW5jLT5kdW1teS0+cXRkX2RtYSk7CisJfQorCXdyaXRlbCAoKHUzMillaGNpLT5hc3luYy0+cWhfZG1hLCAmZWhjaS0+cmVncy0+YXN5bmNfbmV4dCk7CisKKwkvKgorCSAqIGhjY19wYXJhbXMgY29udHJvbHMgd2hldGhlciBlaGNpLT5yZWdzLT5zZWdtZW50IG11c3QgKCEhISkKKwkgKiBiZSB1c2VkOyBpdCBjb25zdHJhaW5zIFFIL0lURC9TSVREIGFuZCBRVEQgbG9jYXRpb25zLgorCSAqIHBjaV9wb29sIGNvbnNpc3RlbnQgbWVtb3J5IGFsd2F5cyB1c2VzIHNlZ21lbnQgemVyby4KKwkgKiBzdHJlYW1pbmcgbWFwcGluZ3MgZm9yIEkvTyBidWZmZXJzLCBsaWtlIHBjaV9tYXBfc2luZ2xlKCksCisJICogY2FuIHJldHVybiBzZWdtZW50cyBhYm92ZSA0R0IsIGlmIHRoZSBkZXZpY2UgYWxsb3dzLgorCSAqCisJICogTk9URTogIHRoZSBkbWEgbWFzayBpcyB2aXNpYmxlIHRocm91Z2ggZG1hX3N1cHBvcnRlZCgpLCBzbworCSAqIGRyaXZlcnMgY2FuIHBhc3MgdGhpcyBpbmZvIGFsb25nIC4uLiBsaWtlIE5FVElGX0ZfSElHSERNQSwKKwkgKiBTY3NpX0hvc3QuaGlnaG1lbV9pbywgYW5kIHNvIGZvcnRoLiAgSXQncyByZWFkb25seSB0byBhbGwKKwkgKiBob3N0IHNpZGUgZHJpdmVycyB0aG91Z2guCisJICovCisJaWYgKEhDQ182NEJJVF9BRERSIChoY2NfcGFyYW1zKSkgeworCQl3cml0ZWwgKDAsICZlaGNpLT5yZWdzLT5zZWdtZW50KTsKKyNpZiAwCisvLyB0aGlzIGlzIGRlZXBseSBicm9rZW4gb24gYWxtb3N0IGFsbCBhcmNoaXRlY3R1cmVzCisJCWlmICghcGNpX3NldF9kbWFfbWFzayAodG9fcGNpX2RldihoY2QtPnNlbGYuY29udHJvbGxlciksIDB4ZmZmZmZmZmZmZmZmZmZmZlVMTCkpCisJCQllaGNpX2luZm8gKGVoY2ksICJlbmFibGVkIDY0Yml0IFBDSSBETUFcbiIpOworI2VuZGlmCisJfQorCisJLyogY2xlYXIgaW50ZXJydXB0IGVuYWJsZXMsIHNldCBpcnEgbGF0ZW5jeSAqLworCWlmIChsb2cyX2lycV90aHJlc2ggPCAwIHx8IGxvZzJfaXJxX3RocmVzaCA+IDYpCisJCWxvZzJfaXJxX3RocmVzaCA9IDA7CisJdGVtcCA9IDEgPDwgKDE2ICsgbG9nMl9pcnFfdGhyZXNoKTsKKwlpZiAoSENDX0NBTlBBUksoaGNjX3BhcmFtcykpIHsKKwkJLyogSFcgZGVmYXVsdCBwYXJrID09IDMsIG9uIGhhcmR3YXJlIHRoYXQgc3VwcG9ydHMgaXQgKGxpa2UKKwkJICogTlZpZGlhIGFuZCBBTEkgc2lsaWNvbiksIG1heGltaXplcyB0aHJvdWdocHV0IG9uIHRoZSBhc3luYworCQkgKiBzY2hlZHVsZSBieSBhdm9pZGluZyBRSCBmZXRjaGVzIGJldHdlZW4gdHJhbnNmZXJzLgorCQkgKgorCQkgKiBXaXRoIGZhc3QgdXNiIHN0b3JhZ2UgZGV2aWNlcyBhbmQgTkZvcmNlMiwgInBhcmsiIHNlZW1zIHRvCisJCSAqIG1ha2UgcHJvYmxlbXM6ICB0aHJvdWdocHV0IHJlZHVjdGlvbiAoISksIGRhdGEgZXJyb3JzLi4uCisJCSAqLworCQlpZiAocGFyaykgeworCQkJcGFyayA9IG1pbiAocGFyaywgKHVuc2lnbmVkKSAzKTsKKwkJCXRlbXAgfD0gQ01EX1BBUks7CisJCQl0ZW1wIHw9IHBhcmsgPDwgODsKKwkJfQorCQllaGNpX2luZm8gKGVoY2ksICJwYXJrICVkXG4iLCBwYXJrKTsKKwl9CisJaWYgKEhDQ19QR01fRlJBTUVMSVNUTEVOIChoY2NfcGFyYW1zKSkgeworCQkvKiBwZXJpb2RpYyBzY2hlZHVsZSBzaXplIGNhbiBiZSBzbWFsbGVyIHRoYW4gZGVmYXVsdCAqLworCQl0ZW1wICY9IH4oMyA8PCAyKTsKKwkJdGVtcCB8PSAoRUhDSV9UVU5FX0ZMUyA8PCAyKTsKKwkJc3dpdGNoIChFSENJX1RVTkVfRkxTKSB7CisJCWNhc2UgMDogZWhjaS0+cGVyaW9kaWNfc2l6ZSA9IDEwMjQ7IGJyZWFrOworCQljYXNlIDE6IGVoY2ktPnBlcmlvZGljX3NpemUgPSA1MTI7IGJyZWFrOworCQljYXNlIDI6IGVoY2ktPnBlcmlvZGljX3NpemUgPSAyNTY7IGJyZWFrOworCQlkZWZhdWx0OglCVUcgKCk7CisJCX0KKwl9CisJLy8gUGhpbGlwcywgSW50ZWwsIGFuZCBtYXliZSBvdGhlcnMgbmVlZCBDTURfUlVOIGJlZm9yZSB0aGUKKwkvLyByb290IGh1YiB3aWxsIGRldGVjdCBuZXcgZGV2aWNlcyAod2h5Pyk7IE5FQyBkb2Vzbid0CisJdGVtcCB8PSBDTURfUlVOOworCXdyaXRlbCAodGVtcCwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOworCWRiZ19jbWQgKGVoY2ksICJpbml0IiwgdGVtcCk7CisKKwkvKiBzZXQgYXN5bmMgc2xlZXAgdGltZSA9IDEwIHVzIC4uLiA/ICovCisKKwkvKiB3aXJlIHVwIHRoZSByb290IGh1YiAqLworCWJ1cyA9IGhjZF90b19idXMgKGhjZCk7CisJdWRldiA9IGZpcnN0ID8gdXNiX2FsbG9jX2RldiAoTlVMTCwgYnVzLCAwKSA6IGJ1cy0+cm9vdF9odWI7CisJaWYgKCF1ZGV2KSB7Citkb25lMjoKKwkJZWhjaV9tZW1fY2xlYW51cCAoZWhjaSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwl1ZGV2LT5zcGVlZCA9IFVTQl9TUEVFRF9ISUdIOworCXVkZXYtPnN0YXRlID0gZmlyc3QgPyBVU0JfU1RBVEVfQVRUQUNIRUQgOiBVU0JfU1RBVEVfQ09ORklHVVJFRDsKKworCS8qCisJICogU3RhcnQsIGVuYWJsaW5nIGZ1bGwgVVNCIDIuMCBmdW5jdGlvbmFsaXR5IC4uLiB1c2IgMS4xIGRldmljZXMKKwkgKiBhcmUgZXhwbGljaXRseSBoYW5kZWQgdG8gY29tcGFuaW9uIGNvbnRyb2xsZXIocyksIHNvIG5vIFRUIGlzCisJICogaW52b2x2ZWQgd2l0aCB0aGUgcm9vdCBodWIuICAoRXhjZXB0IHdoZXJlIG9uZSBpcyBpbnRlZ3JhdGVkLAorCSAqIGFuZCB0aGVyZSdzIG5vIGNvbXBhbmlvbiBjb250cm9sbGVyIHVubGVzcyBtYXliZSBmb3IgVVNCIE9URy4pCisJICovCisJaWYgKGZpcnN0KSB7CisJCWVoY2ktPnJlYm9vdF9ub3RpZmllci5ub3RpZmllcl9jYWxsID0gZWhjaV9yZWJvb3Q7CisJCXJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllciAoJmVoY2ktPnJlYm9vdF9ub3RpZmllcik7CisJfQorCisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisJd3JpdGVsIChGTEFHX0NGLCAmZWhjaS0+cmVncy0+Y29uZmlndXJlZF9mbGFnKTsKKwlyZWFkbCAoJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOwkvKiB1bmJsb2NrIHBvc3RlZCB3cml0ZSAqLworCisJdGVtcCA9IEhDX1ZFUlNJT04ocmVhZGwgKCZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CisJZWhjaV9pbmZvIChlaGNpLAorCQkiVVNCICV4LiV4ICVzLCBFSENJICV4LiUwMngsIGRyaXZlciAlc1xuIiwKKwkJKChzYnJuICYgMHhmMCk+PjQpLCAoc2JybiAmIDB4MGYpLAorCQlmaXJzdCA/ICJpbml0aWFsaXplZCIgOiAicmVzdGFydGVkIiwKKwkJdGVtcCA+PiA4LCB0ZW1wICYgMHhmZiwgRFJJVkVSX1ZFUlNJT04pOworCisJLyoKKwkgKiBGcm9tIGhlcmUgb24sIGtodWJkIGNvbmN1cnJlbnRseSBhY2Nlc3NlcyB0aGUgcm9vdAorCSAqIGh1YjsgZHJpdmVycyB3aWxsIGJlIHRhbGtpbmcgdG8gZW51bWVyYXRlZCBkZXZpY2VzLgorCSAqIChPbiByZXN0YXJ0IHBhdGhzLCBraHViZCBhbHJlYWR5IGtub3dzIGFib3V0IHRoZSByb290CisJICogaHViIGFuZCBjb3VsZCBmaW5kIHdvcmsgYXMgc29vbiBhcyB3ZSB3cm90ZSBGTEFHX0NGLikKKwkgKgorCSAqIEJlZm9yZSB0aGlzIHBvaW50IHRoZSBIQyB3YXMgaWRsZS9yZWFkeS4gIEFmdGVyLCBraHViZAorCSAqIGFuZCBkZXZpY2UgZHJpdmVycyBtYXkgc3RhcnQgaXQgcnVubmluZy4KKwkgKi8KKwlpZiAoZmlyc3QgJiYgdXNiX2hjZF9yZWdpc3Rlcl9yb290X2h1YiAodWRldiwgaGNkKSAhPSAwKSB7CisJCWlmIChoY2QtPnN0YXRlID09IEhDX1NUQVRFX1JVTk5JTkcpCisJCQllaGNpX3F1aWVzY2UgKGVoY2kpOworCQllaGNpX3Jlc2V0IChlaGNpKTsKKwkJdXNiX3B1dF9kZXYgKHVkZXYpOyAKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBkb25lMjsKKwl9CisKKwl3cml0ZWwgKElOVFJfTUFTSywgJmVoY2ktPnJlZ3MtPmludHJfZW5hYmxlKTsgLyogVHVybiBPbiBJbnRlcnJ1cHRzICovCisKKwlpZiAoZmlyc3QpCisJCWNyZWF0ZV9kZWJ1Z19maWxlcyAoZWhjaSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogYWx3YXlzIGNhbGxlZCBieSB0aHJlYWQ7IG5vcm1hbGx5IHJtbW9kICovCisKK3N0YXRpYyB2b2lkIGVoY2lfc3RvcCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CisJdTgJCQlyaF9wb3J0cywgcG9ydDsKKworCWVoY2lfZGJnIChlaGNpLCAic3RvcFxuIik7CisKKwkvKiBUdXJuIG9mZiBwb3J0IHBvd2VyIG9uIGFsbCByb290IGh1YiBwb3J0cy4gKi8KKwlyaF9wb3J0cyA9IEhDU19OX1BPUlRTIChlaGNpLT5oY3NfcGFyYW1zKTsKKwlmb3IgKHBvcnQgPSAxOyBwb3J0IDw9IHJoX3BvcnRzOyBwb3J0KyspCisJCSh2b2lkKSBlaGNpX2h1Yl9jb250cm9sKGhjZCwKKwkJCUNsZWFyUG9ydEZlYXR1cmUsIFVTQl9QT1JUX0ZFQVRfUE9XRVIsCisJCQlwb3J0LCBOVUxMLCAwKTsKKworCS8qIG5vIG1vcmUgaW50ZXJydXB0cyAuLi4gKi8KKwlkZWxfdGltZXJfc3luYyAoJmVoY2ktPndhdGNoZG9nKTsKKworCXNwaW5fbG9ja19pcnEoJmVoY2ktPmxvY2spOworCWlmIChIQ19JU19SVU5OSU5HIChoY2QtPnN0YXRlKSkKKwkJZWhjaV9xdWllc2NlIChlaGNpKTsKKworCWVoY2lfcmVzZXQgKGVoY2kpOworCXdyaXRlbCAoMCwgJmVoY2ktPnJlZ3MtPmludHJfZW5hYmxlKTsKKwlzcGluX3VubG9ja19pcnEoJmVoY2ktPmxvY2spOworCisJLyogbGV0IGNvbXBhbmlvbiBjb250cm9sbGVycyB3b3JrIHdoZW4gd2UgYXJlbid0ICovCisJd3JpdGVsICgwLCAmZWhjaS0+cmVncy0+Y29uZmlndXJlZF9mbGFnKTsKKwl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllciAoJmVoY2ktPnJlYm9vdF9ub3RpZmllcik7CisKKwlyZW1vdmVfZGVidWdfZmlsZXMgKGVoY2kpOworCisJLyogcm9vdCBodWIgaXMgc2h1dCBkb3duIHNlcGFyYXRlbHkgKGZpcnN0LCB3aGVuIHBvc3NpYmxlKSAqLworCXNwaW5fbG9ja19pcnEgKCZlaGNpLT5sb2NrKTsKKwlpZiAoZWhjaS0+YXN5bmMpCisJCWVoY2lfd29yayAoZWhjaSwgTlVMTCk7CisJc3Bpbl91bmxvY2tfaXJxICgmZWhjaS0+bG9jayk7CisJZWhjaV9tZW1fY2xlYW51cCAoZWhjaSk7CisKKyNpZmRlZglFSENJX1NUQVRTCisJZWhjaV9kYmcgKGVoY2ksICJpcnEgbm9ybWFsICVsZCBlcnIgJWxkIHJlY2xhaW0gJWxkIChsb3N0ICVsZClcbiIsCisJCWVoY2ktPnN0YXRzLm5vcm1hbCwgZWhjaS0+c3RhdHMuZXJyb3IsIGVoY2ktPnN0YXRzLnJlY2xhaW0sCisJCWVoY2ktPnN0YXRzLmxvc3RfaWFhKTsKKwllaGNpX2RiZyAoZWhjaSwgImNvbXBsZXRlICVsZCB1bmxpbmsgJWxkXG4iLAorCQllaGNpLT5zdGF0cy5jb21wbGV0ZSwgZWhjaS0+c3RhdHMudW5saW5rKTsKKyNlbmRpZgorCisJZGJnX3N0YXR1cyAoZWhjaSwgImVoY2lfc3RvcCBjb21wbGV0ZWQiLCByZWFkbCAoJmVoY2ktPnJlZ3MtPnN0YXR1cykpOworfQorCitzdGF0aWMgaW50IGVoY2lfZ2V0X2ZyYW1lIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKKwlyZXR1cm4gKHJlYWRsICgmZWhjaS0+cmVncy0+ZnJhbWVfaW5kZXgpID4+IDMpICUgZWhjaS0+cGVyaW9kaWNfc2l6ZTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmCUNPTkZJR19QTQorCisvKiBzdXNwZW5kL3Jlc3VtZSwgc2VjdGlvbiA0LjMgKi8KKworLyogVGhlc2Ugcm91dGluZXMgcmVseSBvbiB0aGUgYnVzIChwY2ksIHBsYXRmb3JtLCBldGMpCisgKiB0byBoYW5kbGUgcG93ZXJkb3duIGFuZCB3YWtldXAsIGFuZCBjdXJyZW50bHkgYWxzbyBvbgorICogdHJhbnNjZWl2ZXJzIHRoYXQgZG9uJ3QgbmVlZCBhbnkgc29mdHdhcmUgYXR0ZW50aW9uIHRvIHNldCB1cAorICogdGhlIHJpZ2h0IHNvcnQgb2Ygd2FrZXVwLiAgCisgKi8KKworc3RhdGljIGludCBlaGNpX3N1c3BlbmQgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHUzMiBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CisKKwlpZiAodGltZV9iZWZvcmUgKGppZmZpZXMsIGVoY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQorCQltc2xlZXAgKDEwMCk7CisKKyNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKKwkodm9pZCkgdXNiX3N1c3BlbmRfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIsIHN0YXRlKTsKKyNlbHNlCisJdXNiX2xvY2tfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIpOworCSh2b2lkKSBlaGNpX2h1Yl9zdXNwZW5kIChoY2QpOworCXVzYl91bmxvY2tfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIpOworI2VuZGlmCisKKwkvLyBzYXZlIChQQ0kpIEZMQURKIGluIGNhc2Ugb2YgVmF1eCBwb3dlciBsb3NzCisJLy8gLi4uIHdlJ2Qgb25seSB1c2UgaXQgdG8gaGFuZGxlIGNsb2NrIHNrZXcKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVoY2lfcmVzdW1lIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKKwl1bnNpZ25lZAkJcG9ydDsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqcm9vdCA9IGhjZC0+c2VsZi5yb290X2h1YjsKKwlpbnQJCQlyZXR2YWwgPSAtRUlOVkFMOworCWludAkJCXBvd2VydXAgPSAwOworCisJLy8gbWF5YmUgcmVzdG9yZSAoUENJKSBGTEFESgorCisJaWYgKHRpbWVfYmVmb3JlIChqaWZmaWVzLCBlaGNpLT5uZXh0X3N0YXRlY2hhbmdlKSkKKwkJbXNsZWVwICgxMDApOworCisJLyogSWYgYW55IHBvcnQgaXMgc3VzcGVuZGVkLCB3ZSBrbm93IHdlIGNhbi9tdXN0IHJlc3VtZSB0aGUgSEMuICovCisJZm9yIChwb3J0ID0gSENTX05fUE9SVFMgKGVoY2ktPmhjc19wYXJhbXMpOyBwb3J0ID4gMDsgKSB7CisJCXUzMglzdGF0dXM7CisJCXBvcnQtLTsKKwkJc3RhdHVzID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbcG9ydF0pOworCQlpZiAoc3RhdHVzICYgUE9SVF9TVVNQRU5EKSB7CisJCQlkb3duICgmaGNkLT5zZWxmLnJvb3RfaHViLT5zZXJpYWxpemUpOworCQkJcmV0dmFsID0gZWhjaV9odWJfcmVzdW1lIChoY2QpOworCQkJdXAgKCZoY2QtPnNlbGYucm9vdF9odWItPnNlcmlhbGl6ZSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoKHN0YXR1cyAmIFBPUlRfUE9XRVIpID09IDApCisJCQlwb3dlcnVwID0gMTsKKwkJaWYgKCFyb290LT5jaGlsZHJlbiBbcG9ydF0pCisJCQljb250aW51ZTsKKwkJZGJnX3BvcnQgKGVoY2ksIF9fRlVOQ1RJT05fXywgcG9ydCArIDEsIHN0YXR1cyk7CisJCXVzYl9zZXRfZGV2aWNlX3N0YXRlIChyb290LT5jaGlsZHJlbltwb3J0XSwKKwkJCQkJVVNCX1NUQVRFX05PVEFUVEFDSEVEKTsKKwl9CisKKwkvKiBFbHNlIHJlc2V0LCB0byBjb3BlIHdpdGggcG93ZXIgbG9zcyBvciBmbHVzaC10by1zdG9yYWdlCisJICogc3R5bGUgInJlc3VtZSIgaGF2aW5nIGFjdGl2YXRlZCBCSU9TIGR1cmluZyByZWJvb3QuCisJICovCisJaWYgKHBvcnQgPT0gMCkgeworCQkodm9pZCkgZWhjaV9oYWx0IChlaGNpKTsKKwkJKHZvaWQpIGVoY2lfcmVzZXQgKGVoY2kpOworCQkodm9pZCkgZWhjaV9oY19yZXNldCAoaGNkKTsKKworCQkvKiBlbXB0eWluZyB0aGUgc2NoZWR1bGUgYWJvcnRzIGFueSB1cmJzICovCisJCXNwaW5fbG9ja19pcnEgKCZlaGNpLT5sb2NrKTsKKwkJaWYgKGVoY2ktPnJlY2xhaW0pCisJCQllaGNpLT5yZWNsYWltX3JlYWR5ID0gMTsKKwkJZWhjaV93b3JrIChlaGNpLCBOVUxMKTsKKwkJc3Bpbl91bmxvY2tfaXJxICgmZWhjaS0+bG9jayk7CisKKwkJLyogcmVzdGFydDsga2h1YmQgd2lsbCBkaXNjb25uZWN0IGRldmljZXMgKi8KKwkJcmV0dmFsID0gZWhjaV9zdGFydCAoaGNkKTsKKworCQkvKiBoZXJlIHdlICJrbm93IiByb290IHBvcnRzIHNob3VsZCBhbHdheXMgc3RheSBwb3dlcmVkOworCQkgKiBidXQgc29tZSBjb250cm9sbGVycyBtYXkgbG9zdCBhbGwgcG93ZXIuCisJCSAqLworCQlpZiAocG93ZXJ1cCkgeworCQkJZWhjaV9kYmcgKGVoY2ksICIuLi5wb3dlcnVwIHBvcnRzLi4uXG4iKTsKKwkJCWZvciAocG9ydCA9IEhDU19OX1BPUlRTIChlaGNpLT5oY3NfcGFyYW1zKTsgcG9ydCA+IDA7ICkKKwkJCQkodm9pZCkgZWhjaV9odWJfY29udHJvbChoY2QsCisJCQkJCVNldFBvcnRGZWF0dXJlLCBVU0JfUE9SVF9GRUFUX1BPV0VSLAorCQkJCQkJcG9ydC0tLCBOVUxMLCAwKTsKKwkJCW1zbGVlcCgyMCk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIGVoY2lfd29yayBpcyBjYWxsZWQgZnJvbSBzb21lIGludGVycnVwdHMsIHRpbWVycywgYW5kIHNvIG9uLgorICogaXQgY2FsbHMgZHJpdmVyIGNvbXBsZXRpb24gZnVuY3Rpb25zLCBhZnRlciBkcm9wcGluZyBlaGNpLT5sb2NrLgorICovCitzdGF0aWMgdm9pZCBlaGNpX3dvcmsgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdGltZXJfYWN0aW9uX2RvbmUgKGVoY2ksIFRJTUVSX0lPX1dBVENIRE9HKTsKKwlpZiAoZWhjaS0+cmVjbGFpbV9yZWFkeSkKKwkJZW5kX3VubGlua19hc3luYyAoZWhjaSwgcmVncyk7CisKKwkvKiBhbm90aGVyIENQVSBtYXkgZHJvcCBlaGNpLT5sb2NrIGR1cmluZyBhIHNjaGVkdWxlIHNjYW4gd2hpbGUKKwkgKiBpdCByZXBvcnRzIHVyYiBjb21wbGV0aW9ucy4gIHRoaXMgZmxhZyBndWFyZHMgYWdhaW5zdCBib2d1cworCSAqIGF0dGVtcHRzIGF0IHJlLWVudHJhbnQgc2NoZWR1bGUgc2Nhbm5pbmcuCisJICovCisJaWYgKGVoY2ktPnNjYW5uaW5nKQorCQlyZXR1cm47CisJZWhjaS0+c2Nhbm5pbmcgPSAxOworCXNjYW5fYXN5bmMgKGVoY2ksIHJlZ3MpOworCWlmIChlaGNpLT5uZXh0X3VmcmFtZSAhPSAtMSkKKwkJc2Nhbl9wZXJpb2RpYyAoZWhjaSwgcmVncyk7CisJZWhjaS0+c2Nhbm5pbmcgPSAwOworCisJLyogdGhlIElPIHdhdGNoZG9nIGd1YXJkcyBhZ2FpbnN0IGhhcmR3YXJlIG9yIGRyaXZlciBidWdzIHRoYXQKKwkgKiBtaXNwbGFjZSBJUlFzLCBhbmQgc2hvdWxkIGxldCB1cyBydW4gY29tcGxldGVseSB3aXRob3V0IElSUXMuCisJICogc3VjaCBsb3NzYWdlIGhhcyBiZWVuIG9ic2VydmVkIG9uIGJvdGggVlQ2MjAyIGFuZCBWVDgyMzUuIAorCSAqLworCWlmIChIQ19JU19SVU5OSU5HIChlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpICYmCisJCQkoZWhjaS0+YXN5bmMtPnFoX25leHQucHRyICE9IE5VTEwgfHwKKwkJCSBlaGNpLT5wZXJpb2RpY19zY2hlZCAhPSAwKSkKKwkJdGltZXJfYWN0aW9uIChlaGNpLCBUSU1FUl9JT19XQVRDSERPRyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBlaGNpX2lycSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSA9IGhjZF90b19laGNpIChoY2QpOworCXUzMgkJCXN0YXR1czsKKwlpbnQJCQliaDsKKworCXNwaW5fbG9jayAoJmVoY2ktPmxvY2spOworCisJc3RhdHVzID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5zdGF0dXMpOworCisJLyogZS5nLiBjYXJkYnVzIHBoeXNpY2FsIGVqZWN0ICovCisJaWYgKHN0YXR1cyA9PSB+KHUzMikgMCkgeworCQllaGNpX2RiZyAoZWhjaSwgImRldmljZSByZW1vdmVkXG4iKTsKKwkJZ290byBkZWFkOworCX0KKworCXN0YXR1cyAmPSBJTlRSX01BU0s7CisJaWYgKCFzdGF0dXMpIHsJCQkvKiBpcnEgc2hhcmluZz8gKi8KKwkJc3Bpbl91bmxvY2soJmVoY2ktPmxvY2spOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJLyogY2xlYXIgKGp1c3QpIGludGVycnVwdHMgKi8KKwl3cml0ZWwgKHN0YXR1cywgJmVoY2ktPnJlZ3MtPnN0YXR1cyk7CisJcmVhZGwgKCZlaGNpLT5yZWdzLT5jb21tYW5kKTsJLyogdW5ibG9jayBwb3N0ZWQgd3JpdGUgKi8KKwliaCA9IDA7CisKKyNpZmRlZglFSENJX1ZFUkJPU0VfREVCVUcKKwkvKiB1bnJlcXVlc3RlZC9pZ25vcmVkOiBGcmFtZSBMaXN0IFJvbGxvdmVyICovCisJZGJnX3N0YXR1cyAoZWhjaSwgImlycSIsIHN0YXR1cyk7CisjZW5kaWYKKworCS8qIElOVCwgRVJSLCBhbmQgSUFBIGludGVycnVwdCByYXRlcyBjYW4gYmUgdGhyb3R0bGVkICovCisKKwkvKiBub3JtYWwgWzQuMTUuMS4yXSBvciBlcnJvciBbNC4xNS4xLjFdIGNvbXBsZXRpb24gKi8KKwlpZiAobGlrZWx5ICgoc3RhdHVzICYgKFNUU19JTlR8U1RTX0VSUikpICE9IDApKSB7CisJCWlmIChsaWtlbHkgKChzdGF0dXMgJiBTVFNfRVJSKSA9PSAwKSkKKwkJCUNPVU5UIChlaGNpLT5zdGF0cy5ub3JtYWwpOworCQllbHNlCisJCQlDT1VOVCAoZWhjaS0+c3RhdHMuZXJyb3IpOworCQliaCA9IDE7CisJfQorCisJLyogY29tcGxldGUgdGhlIHVubGlua2luZyBvZiBzb21lIHFoIFs0LjE1LjIuM10gKi8KKwlpZiAoc3RhdHVzICYgU1RTX0lBQSkgeworCQlDT1VOVCAoZWhjaS0+c3RhdHMucmVjbGFpbSk7CisJCWVoY2ktPnJlY2xhaW1fcmVhZHkgPSAxOworCQliaCA9IDE7CisJfQorCisJLyogcmVtb3RlIHdha2V1cCBbNC4zLjFdICovCisJaWYgKChzdGF0dXMgJiBTVFNfUENEKSAmJiBoY2QtPnJlbW90ZV93YWtldXApIHsKKwkJdW5zaWduZWQJaSA9IEhDU19OX1BPUlRTIChlaGNpLT5oY3NfcGFyYW1zKTsKKworCQkvKiByZXN1bWUgcm9vdCBodWI/ICovCisJCXN0YXR1cyA9IHJlYWRsICgmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisJCWlmICghKHN0YXR1cyAmIENNRF9SVU4pKQorCQkJd3JpdGVsIChzdGF0dXMgfCBDTURfUlVOLCAmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisKKwkJd2hpbGUgKGktLSkgeworCQkJc3RhdHVzID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbaV0pOworCQkJaWYgKHN0YXR1cyAmIFBPUlRfT1dORVIpCisJCQkJY29udGludWU7CisJCQlpZiAoIShzdGF0dXMgJiBQT1JUX1JFU1VNRSkKKwkJCQkJfHwgZWhjaS0+cmVzZXRfZG9uZSBbaV0gIT0gMCkKKwkJCQljb250aW51ZTsKKworCQkJLyogc3RhcnQgMjAgbXNlYyByZXN1bWUgc2lnbmFsaW5nIGZyb20gdGhpcyBwb3J0LAorCQkJICogYW5kIG1ha2Uga2h1YmQgY29sbGVjdCBQT1JUX1NUQVRfQ19TVVNQRU5EIHRvCisJCQkgKiBzdG9wIHRoYXQgc2lnbmFsaW5nLgorCQkJICovCisJCQllaGNpLT5yZXNldF9kb25lIFtpXSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzICgyMCk7CisJCQltb2RfdGltZXIgKCZoY2QtPnJoX3RpbWVyLAorCQkJCQllaGNpLT5yZXNldF9kb25lIFtpXSArIDEpOworCQkJZWhjaV9kYmcgKGVoY2ksICJwb3J0ICVkIHJlbW90ZSB3YWtldXBcbiIsIGkgKyAxKTsKKwkJfQorCX0KKworCS8qIFBDSSBlcnJvcnMgWzQuMTUuMi40XSAqLworCWlmICh1bmxpa2VseSAoKHN0YXR1cyAmIFNUU19GQVRBTCkgIT0gMCkpIHsKKwkJLyogYm9ndXMgImZhdGFsIiBJUlFzIGFwcGVhciBvbiBzb21lIGNoaXBzLi4uIHdoeT8gICovCisJCXN0YXR1cyA9IHJlYWRsICgmZWhjaS0+cmVncy0+c3RhdHVzKTsKKwkJZGJnX2NtZCAoZWhjaSwgImZhdGFsIiwgcmVhZGwgKCZlaGNpLT5yZWdzLT5jb21tYW5kKSk7CisJCWRiZ19zdGF0dXMgKGVoY2ksICJmYXRhbCIsIHN0YXR1cyk7CisJCWlmIChzdGF0dXMgJiBTVFNfSEFMVCkgeworCQkJZWhjaV9lcnIgKGVoY2ksICJmYXRhbCBlcnJvclxuIik7CitkZWFkOgorCQkJZWhjaV9yZXNldCAoZWhjaSk7CisJCQl3cml0ZWwgKDAsICZlaGNpLT5yZWdzLT5jb25maWd1cmVkX2ZsYWcpOworCQkJLyogZ2VuZXJpYyBsYXllciBraWxscy91bmxpbmtzIGFsbCB1cmJzLCB0aGVuCisJCQkgKiB1c2VzIGVoY2lfc3RvcCB0byBjbGVhbiB1cCB0aGUgcmVzdAorCQkJICovCisJCQliaCA9IDE7CisJCX0KKwl9CisKKwlpZiAoYmgpCisJCWVoY2lfd29yayAoZWhjaSwgcmVncyk7CisJc3Bpbl91bmxvY2sgKCZlaGNpLT5sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBub24tZXJyb3IgcmV0dXJucyBhcmUgYSBwcm9taXNlIHRvIGdpdmViYWNrKCkgdGhlIHVyYiBsYXRlcgorICogd2UgZHJvcCBvd25lcnNoaXAgc28gbmV4dCBvd25lciAob3IgdXJiIHVubGluaykgY2FuIGdldCBpdAorICoKKyAqIHVyYiArIGRldiBpcyBpbiBoY2Quc2VsZi5jb250cm9sbGVyLnVyYl9saXN0CisgKiB3ZSdyZSBxdWV1ZWluZyBURHMgb250byBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUgbGlzdHMKKyAqCisgKiBoY2Qtc3BlY2lmaWMgaW5pdCBmb3IgaGNwcml2IGhhc24ndCBiZWVuIGRvbmUgeWV0CisgKgorICogTk9URTogIGNvbnRyb2wsIGJ1bGssIGFuZCBpbnRlcnJ1cHQgc2hhcmUgdGhlIHNhbWUgY29kZSB0byBhcHBlbmQgVERzCisgKiB0byBhIChwb3NzaWJseSBhY3RpdmUpIFFILCBhbmQgdGhlIHNhbWUgUUggc2Nhbm5pbmcgY29kZS4KKyAqLworc3RhdGljIGludCBlaGNpX3VyYl9lbnF1ZXVlICgKKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkLAorCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXAsCisJc3RydWN0IHVyYgkqdXJiLAorCWludAkJbWVtX2ZsYWdzCispIHsKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CisJc3RydWN0IGxpc3RfaGVhZAlxdGRfbGlzdDsKKworCUlOSVRfTElTVF9IRUFEICgmcXRkX2xpc3QpOworCisJc3dpdGNoICh1c2JfcGlwZXR5cGUgKHVyYi0+cGlwZSkpIHsKKwkvLyBjYXNlIFBJUEVfQ09OVFJPTDoKKwkvLyBjYXNlIFBJUEVfQlVMSzoKKwlkZWZhdWx0OgorCQlpZiAoIXFoX3VyYl90cmFuc2FjdGlvbiAoZWhjaSwgdXJiLCAmcXRkX2xpc3QsIG1lbV9mbGFncykpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIHN1Ym1pdF9hc3luYyAoZWhjaSwgZXAsIHVyYiwgJnF0ZF9saXN0LCBtZW1fZmxhZ3MpOworCisJY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwkJaWYgKCFxaF91cmJfdHJhbnNhY3Rpb24gKGVoY2ksIHVyYiwgJnF0ZF9saXN0LCBtZW1fZmxhZ3MpKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBpbnRyX3N1Ym1pdCAoZWhjaSwgZXAsIHVyYiwgJnF0ZF9saXN0LCBtZW1fZmxhZ3MpOworCisJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQlpZiAodXJiLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQorCQkJcmV0dXJuIGl0ZF9zdWJtaXQgKGVoY2ksIHVyYiwgbWVtX2ZsYWdzKTsKKwkJZWxzZQorCQkJcmV0dXJuIHNpdGRfc3VibWl0IChlaGNpLCB1cmIsIG1lbV9mbGFncyk7CisJfQorfQorCitzdGF0aWMgdm9pZCB1bmxpbmtfYXN5bmMgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfcWggKnFoKQoreworCS8qIGlmIHdlIG5lZWQgdG8gdXNlIElBQSBhbmQgaXQncyBidXN5LCBkZWZlciAqLworCWlmIChxaC0+cWhfc3RhdGUgPT0gUUhfU1RBVEVfTElOS0VECisJCQkmJiBlaGNpLT5yZWNsYWltCisJCQkmJiBIQ19JU19SVU5OSU5HIChlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpKSB7CisJCXN0cnVjdCBlaGNpX3FoCQkqbGFzdDsKKworCQlmb3IgKGxhc3QgPSBlaGNpLT5yZWNsYWltOworCQkJCWxhc3QtPnJlY2xhaW07CisJCQkJbGFzdCA9IGxhc3QtPnJlY2xhaW0pCisJCQljb250aW51ZTsKKwkJcWgtPnFoX3N0YXRlID0gUUhfU1RBVEVfVU5MSU5LX1dBSVQ7CisJCWxhc3QtPnJlY2xhaW0gPSBxaDsKKworCS8qIGJ5cGFzcyBJQUEgaWYgdGhlIGhjIGNhbid0IGNhcmUgKi8KKwl9IGVsc2UgaWYgKCFIQ19JU19SVU5OSU5HIChlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpICYmIGVoY2ktPnJlY2xhaW0pCisJCWVuZF91bmxpbmtfYXN5bmMgKGVoY2ksIE5VTEwpOworCisJLyogc29tZXRoaW5nIGVsc2UgbWlnaHQgaGF2ZSB1bmxpbmtlZCB0aGUgcWggYnkgbm93ICovCisJaWYgKHFoLT5xaF9zdGF0ZSA9PSBRSF9TVEFURV9MSU5LRUQpCisJCXN0YXJ0X3VubGlua19hc3luYyAoZWhjaSwgcWgpOworfQorCisvKiByZW1vdmUgZnJvbSBoYXJkd2FyZSBsaXN0cworICogY29tcGxldGlvbnMgbm9ybWFsbHkgaGFwcGVuIGFzeW5jaHJvbm91c2x5CisgKi8KKworc3RhdGljIGludCBlaGNpX3VyYl9kZXF1ZXVlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSA9IGhjZF90b19laGNpIChoY2QpOworCXN0cnVjdCBlaGNpX3FoCQkqcWg7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlzd2l0Y2ggKHVzYl9waXBldHlwZSAodXJiLT5waXBlKSkgeworCS8vIGNhc2UgUElQRV9DT05UUk9MOgorCS8vIGNhc2UgUElQRV9CVUxLOgorCWRlZmF1bHQ6CisJCXFoID0gKHN0cnVjdCBlaGNpX3FoICopIHVyYi0+aGNwcml2OworCQlpZiAoIXFoKQorCQkJYnJlYWs7CisJCXVubGlua19hc3luYyAoZWhjaSwgcWgpOworCQlicmVhazsKKworCWNhc2UgUElQRV9JTlRFUlJVUFQ6CisJCXFoID0gKHN0cnVjdCBlaGNpX3FoICopIHVyYi0+aGNwcml2OworCQlpZiAoIXFoKQorCQkJYnJlYWs7CisJCXN3aXRjaCAocWgtPnFoX3N0YXRlKSB7CisJCWNhc2UgUUhfU1RBVEVfTElOS0VEOgorCQkJaW50cl9kZXNjaGVkdWxlIChlaGNpLCBxaCk7CisJCQkvKiBGQUxMIFRIUk9VR0ggKi8KKwkJY2FzZSBRSF9TVEFURV9JRExFOgorCQkJcWhfY29tcGxldGlvbnMgKGVoY2ksIHFoLCBOVUxMKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWhjaV9kYmcgKGVoY2ksICJib2d1cyBxaCAlcCBzdGF0ZSAlZFxuIiwKKwkJCQkJcWgsIHFoLT5xaF9zdGF0ZSk7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQkvKiByZXNjaGVkdWxlIFFIIGlmZiBhbm90aGVyIHJlcXVlc3QgaXMgcXVldWVkICovCisJCWlmICghbGlzdF9lbXB0eSAoJnFoLT5xdGRfbGlzdCkKKwkJCQkmJiBIQ19JU19SVU5OSU5HIChoY2QtPnN0YXRlKSkgeworCQkJaW50IHN0YXR1czsKKworCQkJc3RhdHVzID0gcWhfc2NoZWR1bGUgKGVoY2ksIHFoKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisKKwkJCWlmIChzdGF0dXMgIT0gMCkgeworCQkJCS8vIHNob3VsZG4ndCBoYXBwZW4gb2Z0ZW4sIGJ1dCAuLi4KKwkJCQkvLyBGSVhNRSBraWxsIHRob3NlIHRkcycgdXJicworCQkJCWVyciAoImNhbid0IHJlc2NoZWR1bGUgcWggJXAsIGVyciAlZCIsCisJCQkJCXFoLCBzdGF0dXMpOworCQkJfQorCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUElQRV9JU09DSFJPTk9VUzoKKwkJLy8gaXRkIG9yIHNpdGQgLi4uCisKKwkJLy8gd2FpdCB0aWxsIG5leHQgY29tcGxldGlvbiwgZG8gaXQgdGhlbi4KKwkJLy8gY29tcGxldGlvbiBpcnFzIGNhbiB3YWl0IHVwIHRvIDEwMjQgbXNlYywKKwkJYnJlYWs7CisJfQorZG9uZToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvLyBidWxrIHFoIGhvbGRzIHRoZSBkYXRhIHRvZ2dsZQorCitzdGF0aWMgdm9pZAorZWhjaV9lbmRwb2ludF9kaXNhYmxlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKQoreworCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlzdHJ1Y3QgZWhjaV9xaAkJKnFoLCAqdG1wOworCisJLyogQVNTRVJUOiAgYW55IHJlcXVlc3RzL3VyYnMgYXJlIGJlaW5nIHVubGlua2VkICovCisJLyogQVNTRVJUOiAgbm9ib2R5IGNhbiBiZSBzdWJtaXR0aW5nIHVyYnMgZm9yIHRoaXMgYW55IG1vcmUgKi8KKworcmVzY2FuOgorCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCXFoID0gZXAtPmhjcHJpdjsKKwlpZiAoIXFoKQorCQlnb3RvIGRvbmU7CisKKwkvKiBlbmRwb2ludHMgY2FuIGJlIGlzbyBzdHJlYW1zLiAgZm9yIG5vdywgd2UgZG9uJ3QKKwkgKiBhY2NlbGVyYXRlIGlzbyBjb21wbGV0aW9ucyAuLi4gc28gc3BpbiBhIHdoaWxlLgorCSAqLworCWlmIChxaC0+aHdfaW5mbzEgPT0gMCkgeworCQllaGNpX3ZkYmcgKGVoY2ksICJpc28gZGVsYXlcbiIpOworCQlnb3RvIGlkbGVfdGltZW91dDsKKwl9CisKKwlpZiAoIUhDX0lTX1JVTk5JTkcgKGhjZC0+c3RhdGUpKQorCQlxaC0+cWhfc3RhdGUgPSBRSF9TVEFURV9JRExFOworCXN3aXRjaCAocWgtPnFoX3N0YXRlKSB7CisJY2FzZSBRSF9TVEFURV9MSU5LRUQ6CisJCWZvciAodG1wID0gZWhjaS0+YXN5bmMtPnFoX25leHQucWg7CisJCQkJdG1wICYmIHRtcCAhPSBxaDsKKwkJCQl0bXAgPSB0bXAtPnFoX25leHQucWgpCisJCQljb250aW51ZTsKKwkJLyogcGVyaW9kaWMgcWggc2VsZi11bmxpbmtzIG9uIGVtcHR5ICovCisJCWlmICghdG1wKQorCQkJZ290byBub2dvb2Q7CisJCXVubGlua19hc3luYyAoZWhjaSwgcWgpOworCQkvKiBGQUxMIFRIUk9VR0ggKi8KKwljYXNlIFFIX1NUQVRFX1VOTElOSzoJCS8qIHdhaXQgZm9yIGh3IHRvIGZpbmlzaD8gKi8KK2lkbGVfdGltZW91dDoKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwkJc2V0X2N1cnJlbnRfc3RhdGUgKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGVfdGltZW91dCAoMSk7CisJCWdvdG8gcmVzY2FuOworCWNhc2UgUUhfU1RBVEVfSURMRToJCS8qIGZ1bGx5IHVubGlua2VkICovCisJCWlmIChsaXN0X2VtcHR5ICgmcWgtPnF0ZF9saXN0KSkgeworCQkJcWhfcHV0IChxaCk7CisJCQlicmVhazsKKwkJfQorCQkvKiBlbHNlIEZBTEwgVEhST1VHSCAqLworCWRlZmF1bHQ6Citub2dvb2Q6CisJCS8qIGNhbGxlciB3YXMgc3VwcG9zZWQgdG8gaGF2ZSB1bmxpbmtlZCBhbnkgcmVxdWVzdHM7CisJCSAqIHRoYXQncyBub3Qgb3VyIGpvYi4gIGp1c3QgbGVhayB0aGlzIG1lbW9yeS4KKwkJICovCisJCWVoY2lfZXJyIChlaGNpLCAicWggJXAgKCMlMDJ4KSBzdGF0ZSAlZCVzXG4iLAorCQkJcWgsIGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MsIHFoLT5xaF9zdGF0ZSwKKwkJCWxpc3RfZW1wdHkgKCZxaC0+cXRkX2xpc3QpID8gIiIgOiAiKGhhcyB0ZHMpIik7CisJCWJyZWFrOworCX0KKwllcC0+aGNwcml2ID0gTlVMTDsKK2RvbmU6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIGVoY2lfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbiA9CQloY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjID0JCSJFSENJIEhvc3QgQ29udHJvbGxlciIsCisJLmhjZF9wcml2X3NpemUgPQlzaXplb2Yoc3RydWN0IGVoY2lfaGNkKSwKKworCS8qCisJICogZ2VuZXJpYyBoYXJkd2FyZSBsaW5rYWdlCisJICovCisJLmlycSA9CQkJZWhjaV9pcnEsCisJLmZsYWdzID0JCUhDRF9NRU1PUlkgfCBIQ0RfVVNCMiwKKworCS8qCisJICogYmFzaWMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMKKwkgKi8KKwkucmVzZXQgPQkJZWhjaV9oY19yZXNldCwKKwkuc3RhcnQgPQkJZWhjaV9zdGFydCwKKyNpZmRlZglDT05GSUdfUE0KKwkuc3VzcGVuZCA9CQllaGNpX3N1c3BlbmQsCisJLnJlc3VtZSA9CQllaGNpX3Jlc3VtZSwKKyNlbmRpZgorCS5zdG9wID0JCQllaGNpX3N0b3AsCisKKwkvKgorCSAqIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzCisJICovCisJLnVyYl9lbnF1ZXVlID0JCWVoY2lfdXJiX2VucXVldWUsCisJLnVyYl9kZXF1ZXVlID0JCWVoY2lfdXJiX2RlcXVldWUsCisJLmVuZHBvaW50X2Rpc2FibGUgPQllaGNpX2VuZHBvaW50X2Rpc2FibGUsCisKKwkvKgorCSAqIHNjaGVkdWxpbmcgc3VwcG9ydAorCSAqLworCS5nZXRfZnJhbWVfbnVtYmVyID0JZWhjaV9nZXRfZnJhbWUsCisKKwkvKgorCSAqIHJvb3QgaHViIHN1cHBvcnQKKwkgKi8KKwkuaHViX3N0YXR1c19kYXRhID0JZWhjaV9odWJfc3RhdHVzX2RhdGEsCisJLmh1Yl9jb250cm9sID0JCWVoY2lfaHViX2NvbnRyb2wsCisJLmh1Yl9zdXNwZW5kID0JCWVoY2lfaHViX3N1c3BlbmQsCisJLmh1Yl9yZXN1bWUgPQkJZWhjaV9odWJfcmVzdW1lLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRUhDSSAxLjAgZG9lc24ndCByZXF1aXJlIFBDSSAqLworCisjaWZkZWYJQ09ORklHX1BDSQorCisvKiBQQ0kgZHJpdmVyIHNlbGVjdGlvbiBtZXRhZGF0YTsgUENJIGhvdHBsdWdnaW5nIHVzZXMgdGhpcyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZHMgW10gPSB7IHsKKwkvKiBoYW5kbGUgYW55IFVTQiAyLjAgRUhDSSBjb250cm9sbGVyICovCisJUENJX0RFVklDRV9DTEFTUygoKFBDSV9DTEFTU19TRVJJQUxfVVNCIDw8IDgpIHwgMHgyMCksIH4wKSwKKwkuZHJpdmVyX2RhdGEgPQkodW5zaWduZWQgbG9uZykgJmVoY2lfZHJpdmVyLAorCX0sCisJeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHBjaSwgcGNpX2lkcyk7CisKKy8qIHBjaSBkcml2ZXIgZ2x1ZTsgdGhpcyBpcyBhICJuZXcgc3R5bGUiIFBDSSBkcml2ZXIgbW9kdWxlICovCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZWhjaV9wY2lfZHJpdmVyID0geworCS5uYW1lID0JCShjaGFyICopIGhjZF9uYW1lLAorCS5pZF90YWJsZSA9CXBjaV9pZHMsCisKKwkucHJvYmUgPQl1c2JfaGNkX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0JdXNiX2hjZF9wY2lfcmVtb3ZlLAorCisjaWZkZWYJQ09ORklHX1BNCisJLnN1c3BlbmQgPQl1c2JfaGNkX3BjaV9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2JfaGNkX3BjaV9yZXN1bWUsCisjZW5kaWYKK307CisKKyNlbmRpZgkvKiBQQ0kgKi8KKworCisjZGVmaW5lIERSSVZFUl9JTkZPIERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfREVTQworCitNT0RVTEVfREVTQ1JJUFRJT04gKERSSVZFUl9JTkZPKTsKK01PRFVMRV9BVVRIT1IgKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdCAodm9pZCkgCit7CisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXByX2RlYnVnICgiJXM6IGJsb2NrIHNpemVzOiBxaCAlWmQgcXRkICVaZCBpdGQgJVpkIHNpdGQgJVpkXG4iLAorCQloY2RfbmFtZSwKKwkJc2l6ZW9mIChzdHJ1Y3QgZWhjaV9xaCksIHNpemVvZiAoc3RydWN0IGVoY2lfcXRkKSwKKwkJc2l6ZW9mIChzdHJ1Y3QgZWhjaV9pdGQpLCBzaXplb2YgKHN0cnVjdCBlaGNpX3NpdGQpKTsKKworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyICgmZWhjaV9wY2lfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0IChpbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXAgKHZvaWQpIAorewkKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgKCZlaGNpX3BjaV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQgKGNsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNzM1MzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKQEAgLTAsMCArMSw1NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiBieSBEYXZpZCBCcm93bmVsbAorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKiB0aGlzIGZpbGUgaXMgcGFydCBvZiBlaGNpLWhjZC5jICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBFSENJIFJvb3QgSHViIC4uLiB0aGUgbm9uc2hhcmFibGUgc3R1ZmYKKyAqCisgKiBSZWdpc3RlcnMgZG9uJ3QgbmVlZCBjcHVfdG9fbGUzMiwgdGhhdCBoYXBwZW5zIHRyYW5zcGFyZW50bHkKKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYJQ09ORklHX1BNCisKK3N0YXRpYyBpbnQgZWhjaV9odWJfc3VzcGVuZCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CisJaW50CQkJcG9ydDsKKworCWlmICh0aW1lX2JlZm9yZSAoamlmZmllcywgZWhjaS0+bmV4dF9zdGF0ZWNoYW5nZSkpCisJCW1zbGVlcCg1KTsKKworCXBvcnQgPSBIQ1NfTl9QT1JUUyAoZWhjaS0+aGNzX3BhcmFtcyk7CisJc3Bpbl9sb2NrX2lycSAoJmVoY2ktPmxvY2spOworCisJLyogc3RvcCBzY2hlZHVsZXMsIGNsZWFuIGFueSBjb21wbGV0ZWQgd29yayAqLworCWlmIChIQ19JU19SVU5OSU5HKGhjZC0+c3RhdGUpKSB7CisJCWVoY2lfcXVpZXNjZSAoZWhjaSk7CisJCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9RVUlFU0NJTkc7CisJfQorCWVoY2ktPmNvbW1hbmQgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOworCWlmIChlaGNpLT5yZWNsYWltKQorCQllaGNpLT5yZWNsYWltX3JlYWR5ID0gMTsKKwllaGNpX3dvcmsoZWhjaSwgTlVMTCk7CisKKwkvKiBzdXNwZW5kIGFueSBhY3RpdmUvdW5zdXNwZW5kZWQgcG9ydHMsIG1heWJlIGFsbG93IHdha2V1cCAqLworCXdoaWxlIChwb3J0LS0pIHsKKwkJdTMyIF9faW9tZW0JKnJlZyA9ICZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbcG9ydF07CisJCXUzMgkJdDEgPSByZWFkbCAocmVnKTsKKwkJdTMyCQl0MiA9IHQxOworCisJCWlmICgodDEgJiBQT1JUX1BFKSAmJiAhKHQxICYgUE9SVF9PV05FUikpCisJCQl0MiB8PSBQT1JUX1NVU1BFTkQ7CisJCWlmIChoY2QtPnJlbW90ZV93YWtldXApCisJCQl0MiB8PSBQT1JUX1dLT0NfRXxQT1JUX1dLRElTQ19FfFBPUlRfV0tDT05OX0U7CisJCWVsc2UKKwkJCXQyICY9IH4oUE9SVF9XS09DX0V8UE9SVF9XS0RJU0NfRXxQT1JUX1dLQ09OTl9FKTsKKworCQlpZiAodDEgIT0gdDIpIHsKKwkJCWVoY2lfdmRiZyAoZWhjaSwgInBvcnQgJWQsICUwOHggLT4gJTA4eFxuIiwKKwkJCQlwb3J0ICsgMSwgdDEsIHQyKTsKKwkJCXdyaXRlbCAodDIsIHJlZyk7CisJCX0KKwl9CisKKwkvKiB0dXJuIG9mZiBub3ctaWRsZSBIQyAqLworCWVoY2lfaGFsdCAoZWhjaSk7CisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1NVU1BFTkRFRDsKKworCWVoY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMCk7CisJc3Bpbl91bmxvY2tfaXJxICgmZWhjaS0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKKworLyogY2FsbGVyIGhhcyBsb2NrZWQgdGhlIHJvb3QgaHViLCBhbmQgc2hvdWxkIHJlc2V0L3JlaW5pdCBvbiBlcnJvciAqLworc3RhdGljIGludCBlaGNpX2h1Yl9yZXN1bWUgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSA9IGhjZF90b19laGNpIChoY2QpOworCXUzMgkJCXRlbXA7CisJaW50CQkJaTsKKwlpbnQJCQlpbnRyX2VuYWJsZTsKKworCWlmICh0aW1lX2JlZm9yZSAoamlmZmllcywgZWhjaS0+bmV4dF9zdGF0ZWNoYW5nZSkpCisJCW1zbGVlcCg1KTsKKwlzcGluX2xvY2tfaXJxICgmZWhjaS0+bG9jayk7CisKKwkvKiByZS1pbml0IG9wZXJhdGlvbmFsIHJlZ2lzdGVycyBpbiBjYXNlIHdlIGxvc3QgcG93ZXIgKi8KKwlpZiAocmVhZGwgKCZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSkgPT0gMCkgeworIAkJLyogYXQgbGVhc3Qgc29tZSBBUE0gaW1wbGVtZW50YXRpb25zIHdpbGwgdHJ5IHRvIGRlbGl2ZXIKKwkJICogSVJRcyByaWdodCBhd2F5LCBzbyBkZWxheSB0aGVtIHVudGlsIHdlJ3JlIHJlYWR5LgorIAkJICovCisgCQlpbnRyX2VuYWJsZSA9IDE7CisJCXdyaXRlbCAoMCwgJmVoY2ktPnJlZ3MtPnNlZ21lbnQpOworCQl3cml0ZWwgKGVoY2ktPnBlcmlvZGljX2RtYSwgJmVoY2ktPnJlZ3MtPmZyYW1lX2xpc3QpOworCQl3cml0ZWwgKCh1MzIpZWhjaS0+YXN5bmMtPnFoX2RtYSwgJmVoY2ktPnJlZ3MtPmFzeW5jX25leHQpOworCX0gZWxzZQorCQlpbnRyX2VuYWJsZSA9IDA7CisJZWhjaV9kYmcoZWhjaSwgInJlc3VtZSByb290IGh1YiVzXG4iLAorCQkJaW50cl9lbmFibGUgPyAiIGFmdGVyIHBvd2VyIGxvc3MiIDogIiIpOworCisJLyogcmVzdG9yZSBDTURfUlVOLCBmcmFtZWxpc3Qgc2l6ZSwgYW5kIGlycSB0aHJlc2hvbGQgKi8KKwl3cml0ZWwgKGVoY2ktPmNvbW1hbmQsICZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKworCS8qIHRha2UgcG9ydHMgb3V0IG9mIHN1c3BlbmQgKi8KKwlpID0gSENTX05fUE9SVFMgKGVoY2ktPmhjc19wYXJhbXMpOworCXdoaWxlIChpLS0pIHsKKwkJdGVtcCA9IHJlYWRsICgmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW2ldKTsKKwkJdGVtcCAmPSB+KFBPUlRfV0tPQ19FfFBPUlRfV0tESVNDX0V8UE9SVF9XS0NPTk5fRSk7CisJCWlmICh0ZW1wICYgUE9SVF9TVVNQRU5EKSB7CisJCQllaGNpLT5yZXNldF9kb25lIFtpXSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzICgyMCk7CisJCQl0ZW1wIHw9IFBPUlRfUkVTVU1FOworCQl9CisJCXdyaXRlbCAodGVtcCwgJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFtpXSk7CisJfQorCWkgPSBIQ1NfTl9QT1JUUyAoZWhjaS0+aGNzX3BhcmFtcyk7CisJbWRlbGF5ICgyMCk7CisJd2hpbGUgKGktLSkgeworCQl0ZW1wID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbaV0pOworCQlpZiAoKHRlbXAgJiBQT1JUX1NVU1BFTkQpID09IDApCisJCQljb250aW51ZTsKKwkJdGVtcCAmPSB+UE9SVF9SRVNVTUU7CisJCXdyaXRlbCAodGVtcCwgJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFtpXSk7CisJCWVoY2lfdmRiZyAoZWhjaSwgInJlc3VtZWQgcG9ydCAlZFxuIiwgaSArIDEpOworCX0KKwkodm9pZCkgcmVhZGwgKCZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKworCS8qIG1heWJlIHJlLWFjdGl2YXRlIHRoZSBzY2hlZHVsZShzKSAqLworCXRlbXAgPSAwOworCWlmIChlaGNpLT5hc3luYy0+cWhfbmV4dC5xaCkKKwkJdGVtcCB8PSBDTURfQVNFOworCWlmIChlaGNpLT5wZXJpb2RpY19zY2hlZCkKKwkJdGVtcCB8PSBDTURfUFNFOworCWlmICh0ZW1wKSB7CisJCWVoY2ktPmNvbW1hbmQgfD0gdGVtcDsKKwkJd3JpdGVsIChlaGNpLT5jb21tYW5kLCAmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisJfQorCisJZWhjaS0+bmV4dF9zdGF0ZWNoYW5nZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUpOworCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOworCisJLyogTm93IHdlIGNhbiBzYWZlbHkgcmUtZW5hYmxlIGlycXMgKi8KKwlpZiAoaW50cl9lbmFibGUpCisJCXdyaXRlbCAoSU5UUl9NQVNLLCAmZWhjaS0+cmVncy0+aW50cl9lbmFibGUpOworCisJc3Bpbl91bmxvY2tfaXJxICgmZWhjaS0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisKKyNkZWZpbmUgZWhjaV9odWJfc3VzcGVuZAlOVUxMCisjZGVmaW5lIGVoY2lfaHViX3Jlc3VtZQkJTlVMTAorCisjZW5kaWYJLyogQ09ORklHX1BNICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgY2hlY2tfcmVzZXRfY29tcGxldGUgKAorCXN0cnVjdCBlaGNpX2hjZAkqZWhjaSwKKwlpbnQJCWluZGV4LAorCWludAkJcG9ydF9zdGF0dXMKKykgeworCWlmICghKHBvcnRfc3RhdHVzICYgUE9SVF9DT05ORUNUKSkgeworCQllaGNpLT5yZXNldF9kb25lIFtpbmRleF0gPSAwOworCQlyZXR1cm4gcG9ydF9zdGF0dXM7CisJfQorCisJLyogaWYgcmVzZXQgZmluaXNoZWQgYW5kIGl0J3Mgc3RpbGwgbm90IGVuYWJsZWQgLS0gaGFuZG9mZiAqLworCWlmICghKHBvcnRfc3RhdHVzICYgUE9SVF9QRSkpIHsKKworCQkvKiB3aXRoIGludGVncmF0ZWQgVFQsIHRoZXJlJ3Mgbm9ib2R5IHRvIGhhbmQgaXQgdG8hICovCisJCWlmIChlaGNpX2lzX1RESShlaGNpKSkgeworCQkJZWhjaV9kYmcgKGVoY2ksCisJCQkJIkZhaWxlZCB0byBlbmFibGUgcG9ydCAlZCBvbiByb290IGh1YiBUVFxuIiwKKwkJCQlpbmRleCsxKTsKKwkJCXJldHVybiBwb3J0X3N0YXR1czsKKwkJfQorCisJCWVoY2lfZGJnIChlaGNpLCAicG9ydCAlZCBmdWxsIHNwZWVkIC0tPiBjb21wYW5pb25cbiIsCisJCQlpbmRleCArIDEpOworCisJCS8vIHdoYXQgaGFwcGVucyBpZiBIQ1NfTl9DQyhwYXJhbXMpID09IDAgPworCQlwb3J0X3N0YXR1cyB8PSBQT1JUX09XTkVSOworCQl3cml0ZWwgKHBvcnRfc3RhdHVzLCAmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW2luZGV4XSk7CisKKwl9IGVsc2UKKwkJZWhjaV9kYmcgKGVoY2ksICJwb3J0ICVkIGhpZ2ggc3BlZWRcbiIsIGluZGV4ICsgMSk7CisKKwlyZXR1cm4gcG9ydF9zdGF0dXM7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworLyogYnVpbGQgInN0YXR1cyBjaGFuZ2UiIHBhY2tldCAob25lIG9yIHR3byBieXRlcykgZnJvbSBIQyByZWdpc3RlcnMgKi8KKworc3RhdGljIGludAorZWhjaV9odWJfc3RhdHVzX2RhdGEgKHN0cnVjdCB1c2JfaGNkICpoY2QsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QJKmVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKKwl1MzIJCXRlbXAsIHN0YXR1cyA9IDA7CisJaW50CQlwb3J0cywgaSwgcmV0dmFsID0gMTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJLyogaWYgIVVTQl9TVVNQRU5ELCByb290IGh1YiB0aW1lcnMgd29uJ3QgZ2V0IHNodXQgZG93biAuLi4gKi8KKwlpZiAoIUhDX0lTX1JVTk5JTkcoaGNkLT5zdGF0ZSkpCisJCXJldHVybiAwOworCisJLyogaW5pdCBzdGF0dXMgdG8gbm8tY2hhbmdlcyAqLworCWJ1ZiBbMF0gPSAwOworCXBvcnRzID0gSENTX05fUE9SVFMgKGVoY2ktPmhjc19wYXJhbXMpOworCWlmIChwb3J0cyA+IDcpIHsKKwkJYnVmIFsxXSA9IDA7CisJCXJldHZhbCsrOworCX0KKwkKKwkvKiBubyBodWIgY2hhbmdlIHJlcG9ydHMgKGJpdCAwKSBmb3Igbm93IChwb3dlciwgLi4uKSAqLworCisJLyogcG9ydCBOIGNoYW5nZXMgKGJpdCBOKT8gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgcG9ydHM7IGkrKykgeworCQl0ZW1wID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbaV0pOworCQlpZiAodGVtcCAmIFBPUlRfT1dORVIpIHsKKwkJCS8qIGRvbid0IHJlcG9ydCB0aGlzIGluIEdldFBvcnRTdGF0dXMgKi8KKwkJCWlmICh0ZW1wICYgUE9SVF9DU0MpIHsKKwkJCQl0ZW1wICY9IH5QT1JUX0NTQzsKKwkJCQl3cml0ZWwgKHRlbXAsICZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbaV0pOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJaWYgKCEodGVtcCAmIFBPUlRfQ09OTkVDVCkpCisJCQllaGNpLT5yZXNldF9kb25lIFtpXSA9IDA7CisJCWlmICgodGVtcCAmIChQT1JUX0NTQyB8IFBPUlRfUEVDIHwgUE9SVF9PQ0MpKSAhPSAwCisJCQkJLy8gUE9SVF9TVEFUX0NfU1VTUEVORD8KKwkJCQl8fCAoKHRlbXAgJiBQT1JUX1JFU1VNRSkgIT0gMAorCQkJCQkmJiB0aW1lX2FmdGVyIChqaWZmaWVzLAorCQkJCQkJZWhjaS0+cmVzZXRfZG9uZSBbaV0pKSkgeworCQkJaWYgKGkgPCA3KQorCQkJICAgIGJ1ZiBbMF0gfD0gMSA8PCAoaSArIDEpOworCQkJZWxzZQorCQkJICAgIGJ1ZiBbMV0gfD0gMSA8PCAoaSAtIDcpOworCQkJc3RhdHVzID0gU1RTX1BDRDsKKwkJfQorCX0KKwkvKiBGSVhNRSBhdXRvc3VzcGVuZCBpZGxlIHJvb3QgaHVicyAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHN0YXR1cyA/IHJldHZhbCA6IDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCitlaGNpX2h1Yl9kZXNjcmlwdG9yICgKKwlzdHJ1Y3QgZWhjaV9oY2QJCQkqZWhjaSwKKwlzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yCSpkZXNjCispIHsKKwlpbnQJCXBvcnRzID0gSENTX05fUE9SVFMgKGVoY2ktPmhjc19wYXJhbXMpOworCXUxNgkJdGVtcDsKKworCWRlc2MtPmJEZXNjcmlwdG9yVHlwZSA9IDB4Mjk7CisJZGVzYy0+YlB3ck9uMlB3ckdvb2QgPSAxMDsJLyogZWhjaSAxLjAsIDIuMy45IHNheXMgMjBtcyBtYXggKi8KKwlkZXNjLT5iSHViQ29udHJDdXJyZW50ID0gMDsKKworCWRlc2MtPmJOYnJQb3J0cyA9IHBvcnRzOworCXRlbXAgPSAxICsgKHBvcnRzIC8gOCk7CisJZGVzYy0+YkRlc2NMZW5ndGggPSA3ICsgMiAqIHRlbXA7CisKKwkvKiB0d28gYml0bWFwczogIHBvcnRzIHJlbW92YWJsZSwgYW5kIHVzYiAxLjAgbGVnYWN5IFBvcnRQd3JDdHJsTWFzayAqLworCW1lbXNldCAoJmRlc2MtPmJpdG1hcCBbMF0sIDAsIHRlbXApOworCW1lbXNldCAoJmRlc2MtPmJpdG1hcCBbdGVtcF0sIDB4ZmYsIHRlbXApOworCisJdGVtcCA9IDB4MDAwODsJCQkvKiBwZXItcG9ydCBvdmVyY3VycmVudCByZXBvcnRpbmcgKi8KKwlpZiAoSENTX1BQQyAoZWhjaS0+aGNzX3BhcmFtcykpCisJCXRlbXAgfD0gMHgwMDAxOwkJLyogcGVyLXBvcnQgcG93ZXIgY29udHJvbCAqLworI2lmIDAKKy8vIHJlLWVuYWJsZSB3aGVuIHdlIHN1cHBvcnQgVVNCX1BPUlRfRkVBVF9JTkRJQ0FUT1IgYmVsb3cuCisJaWYgKEhDU19JTkRJQ0FUT1IgKGVoY2ktPmhjc19wYXJhbXMpKQorCQl0ZW1wIHw9IDB4MDA4MDsJCS8qIHBlci1wb3J0IGluZGljYXRvcnMgKExFRHMpICovCisjZW5kaWYKKwlkZXNjLT53SHViQ2hhcmFjdGVyaXN0aWNzID0gKF9fZm9yY2UgX191MTYpY3B1X3RvX2xlMTYgKHRlbXApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lCVBPUlRfV0FLRV9CSVRTIAkoUE9SVF9XS09DX0V8UE9SVF9XS0RJU0NfRXxQT1JUX1dLQ09OTl9FKQorCitzdGF0aWMgaW50IGVoY2lfaHViX2NvbnRyb2wgKAorCXN0cnVjdCB1c2JfaGNkCSpoY2QsCisJdTE2CQl0eXBlUmVxLAorCXUxNgkJd1ZhbHVlLAorCXUxNgkJd0luZGV4LAorCWNoYXIJCSpidWYsCisJdTE2CQl3TGVuZ3RoCispIHsKKwlzdHJ1Y3QgZWhjaV9oY2QJKmVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKKwlpbnQJCXBvcnRzID0gSENTX05fUE9SVFMgKGVoY2ktPmhjc19wYXJhbXMpOworCXUzMgkJdGVtcCwgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJaW50CQlyZXR2YWwgPSAwOworCisJLyoKKwkgKiBGSVhNRTogIHN1cHBvcnQgU2V0UG9ydEZlYXR1cmVzIFVTQl9QT1JUX0ZFQVRfSU5ESUNBVE9SLgorCSAqIEhDU19JTkRJQ0FUT1IgbWF5IHNheSB3ZSBjYW4gY2hhbmdlIExFRHMgdG8gb2ZmL2FtYmVyL2dyZWVuLgorCSAqICh0cmFjayBjdXJyZW50IHN0YXRlIG91cnNlbHZlcykgLi4uIGJsaW5rIGZvciBkaWFnbm9zdGljcywKKwkgKiBwb3dlciwgInRoaXMgaXMgdGhlIG9uZSIsIGV0Yy4gIEVIQ0kgc3BlYyBzdXBwb3J0cyB0aGlzLgorCSAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJc3dpdGNoICh0eXBlUmVxKSB7CisJY2FzZSBDbGVhckh1YkZlYXR1cmU6CisJCXN3aXRjaCAod1ZhbHVlKSB7CisJCWNhc2UgQ19IVUJfTE9DQUxfUE9XRVI6CisJCWNhc2UgQ19IVUJfT1ZFUl9DVVJSRU5UOgorCQkJLyogbm8gaHViLXdpZGUgZmVhdHVyZS9zdGF0dXMgZmxhZ3MgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBlcnJvcjsKKwkJfQorCQlicmVhazsKKwljYXNlIENsZWFyUG9ydEZlYXR1cmU6CisJCWlmICghd0luZGV4IHx8IHdJbmRleCA+IHBvcnRzKQorCQkJZ290byBlcnJvcjsKKwkJd0luZGV4LS07CisJCXRlbXAgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFt3SW5kZXhdKTsKKwkJaWYgKHRlbXAgJiBQT1JUX09XTkVSKQorCQkJYnJlYWs7CisKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0VOQUJMRToKKwkJCXdyaXRlbCAodGVtcCAmIH5QT1JUX1BFLAorCQkJCSZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbd0luZGV4XSk7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfRU5BQkxFOgorCQkJd3JpdGVsICh0ZW1wIHwgUE9SVF9QRUMsCisJCQkJJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFt3SW5kZXhdKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKKwkJCWlmICh0ZW1wICYgUE9SVF9SRVNFVCkKKwkJCQlnb3RvIGVycm9yOworCQkJaWYgKHRlbXAgJiBQT1JUX1NVU1BFTkQpIHsKKwkJCQlpZiAoKHRlbXAgJiBQT1JUX1BFKSA9PSAwKQorCQkJCQlnb3RvIGVycm9yOworCQkJCS8qIHJlc3VtZSBzaWduYWxpbmcgZm9yIDIwIG1zZWMgKi8KKwkJCQl3cml0ZWwgKCh0ZW1wICYgflBPUlRfV0FLRV9CSVRTKSB8IFBPUlRfUkVTVU1FLAorCQkJCQkmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW3dJbmRleF0pOworCQkJCWVoY2ktPnJlc2V0X2RvbmUgW3dJbmRleF0gPSBqaWZmaWVzCisJCQkJCQkrIG1zZWNzX3RvX2ppZmZpZXMgKDIwKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19TVVNQRU5EOgorCQkJLyogd2UgYXV0by1jbGVhciB0aGlzIGZlYXR1cmUgKi8KKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfUE9XRVI6CisJCQlpZiAoSENTX1BQQyAoZWhjaS0+aGNzX3BhcmFtcykpCisJCQkJd3JpdGVsICh0ZW1wICYgflBPUlRfUE9XRVIsCisJCQkJCSZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbd0luZGV4XSk7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTjoKKwkJCXdyaXRlbCAodGVtcCB8IFBPUlRfQ1NDLAorCQkJCSZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbd0luZGV4XSk7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfT1ZFUl9DVVJSRU5UOgorCQkJd3JpdGVsICh0ZW1wIHwgUE9SVF9PQ0MsCisJCQkJJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFt3SW5kZXhdKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19SRVNFVDoKKwkJCS8qIEdldFBvcnRTdGF0dXMgY2xlYXJzIHJlc2V0ICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJcmVhZGwgKCZlaGNpLT5yZWdzLT5jb21tYW5kKTsJLyogdW5ibG9jayBwb3N0ZWQgd3JpdGUgKi8KKwkJYnJlYWs7CisJY2FzZSBHZXRIdWJEZXNjcmlwdG9yOgorCQllaGNpX2h1Yl9kZXNjcmlwdG9yIChlaGNpLCAoc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqKQorCQkJYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBHZXRIdWJTdGF0dXM6CisJCS8qIG5vIGh1Yi13aWRlIGZlYXR1cmUvc3RhdHVzIGZsYWdzICovCisJCW1lbXNldCAoYnVmLCAwLCA0KTsKKwkJLy9jcHVfdG9fbGUzMnMgKCh1MzIgKikgYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBHZXRQb3J0U3RhdHVzOgorCQlpZiAoIXdJbmRleCB8fCB3SW5kZXggPiBwb3J0cykKKwkJCWdvdG8gZXJyb3I7CisJCXdJbmRleC0tOworCQlzdGF0dXMgPSAwOworCQl0ZW1wID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbd0luZGV4XSk7CisKKwkJLy8gd1BvcnRDaGFuZ2UgYml0cworCQlpZiAodGVtcCAmIFBPUlRfQ1NDKQorCQkJc3RhdHVzIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT047CisJCWlmICh0ZW1wICYgUE9SVF9QRUMpCisJCQlzdGF0dXMgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX0NfRU5BQkxFOworCQlpZiAodGVtcCAmIFBPUlRfT0NDKQorCQkJc3RhdHVzIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9DX09WRVJfQ1VSUkVOVDsKKworCQkvKiB3aG9ldmVyIHJlc3VtZXMgbXVzdCBHZXRQb3J0U3RhdHVzIHRvIGNvbXBsZXRlIGl0ISEgKi8KKwkJaWYgKCh0ZW1wICYgUE9SVF9SRVNVTUUpCisJCQkJJiYgdGltZV9hZnRlciAoamlmZmllcywKKwkJCQkJZWhjaS0+cmVzZXRfZG9uZSBbd0luZGV4XSkpIHsKKwkJCXN0YXR1cyB8PSAxIDw8IFVTQl9QT1JUX0ZFQVRfQ19TVVNQRU5EOworCQkJZWhjaS0+cmVzZXRfZG9uZSBbd0luZGV4XSA9IDA7CisKKwkJCS8qIHN0b3AgcmVzdW1lIHNpZ25hbGluZyAqLworCQkJdGVtcCA9IHJlYWRsICgmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW3dJbmRleF0pOworCQkJd3JpdGVsICh0ZW1wICYgflBPUlRfUkVTVU1FLAorCQkJCSZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbd0luZGV4XSk7CisJCQlyZXR2YWwgPSBoYW5kc2hha2UgKAorCQkJCQkmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW3dJbmRleF0sCisJCQkJCVBPUlRfUkVTVU1FLCAwLCAyMDAwIC8qIDJtc2VjICovKTsKKwkJCWlmIChyZXR2YWwgIT0gMCkgeworCQkJCWVoY2lfZXJyIChlaGNpLCAicG9ydCAlZCByZXN1bWUgZXJyb3IgJWRcbiIsCisJCQkJCXdJbmRleCArIDEsIHJldHZhbCk7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJCXRlbXAgJj0gfihQT1JUX1NVU1BFTkR8UE9SVF9SRVNVTUV8KDM8PDEwKSk7CisJCX0KKworCQkvKiB3aG9ldmVyIHJlc2V0cyBtdXN0IEdldFBvcnRTdGF0dXMgdG8gY29tcGxldGUgaXQhISAqLworCQlpZiAoKHRlbXAgJiBQT1JUX1JFU0VUKQorCQkJCSYmIHRpbWVfYWZ0ZXIgKGppZmZpZXMsCisJCQkJCWVoY2ktPnJlc2V0X2RvbmUgW3dJbmRleF0pKSB7CisJCQlzdGF0dXMgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX0NfUkVTRVQ7CisJCQllaGNpLT5yZXNldF9kb25lIFt3SW5kZXhdID0gMDsKKworCQkJLyogZm9yY2UgcmVzZXQgdG8gY29tcGxldGUgKi8KKwkJCXdyaXRlbCAodGVtcCAmIH5QT1JUX1JFU0VULAorCQkJCQkmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW3dJbmRleF0pOworCQkJcmV0dmFsID0gaGFuZHNoYWtlICgKKwkJCQkJJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFt3SW5kZXhdLAorCQkJCQlQT1JUX1JFU0VULCAwLCA1MDApOworCQkJaWYgKHJldHZhbCAhPSAwKSB7CisJCQkJZWhjaV9lcnIgKGVoY2ksICJwb3J0ICVkIHJlc2V0IGVycm9yICVkXG4iLAorCQkJCQl3SW5kZXggKyAxLCByZXR2YWwpOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisKKwkJCS8qIHNlZSB3aGF0IHdlIGZvdW5kIG91dCAqLworCQkJdGVtcCA9IGNoZWNrX3Jlc2V0X2NvbXBsZXRlIChlaGNpLCB3SW5kZXgsCisJCQkJcmVhZGwgKCZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbd0luZGV4XSkpOworCQl9CisKKwkJLy8gZG9uJ3Qgc2hvdyB3UG9ydFN0YXR1cyBpZiBpdCdzIG93bmVkIGJ5IGEgY29tcGFuaW9uIGhjCisJCWlmICghKHRlbXAgJiBQT1JUX09XTkVSKSkgeworCQkJaWYgKHRlbXAgJiBQT1JUX0NPTk5FQ1QpIHsKKwkJCQlzdGF0dXMgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX0NPTk5FQ1RJT047CisJCQkJLy8gc3RhdHVzIG1heSBiZSBmcm9tIGludGVncmF0ZWQgVFQKKwkJCQlzdGF0dXMgfD0gZWhjaV9wb3J0X3NwZWVkKGVoY2ksIHRlbXApOworCQkJfQorCQkJaWYgKHRlbXAgJiBQT1JUX1BFKQorCQkJCXN0YXR1cyB8PSAxIDw8IFVTQl9QT1JUX0ZFQVRfRU5BQkxFOworCQkJaWYgKHRlbXAgJiAoUE9SVF9TVVNQRU5EfFBPUlRfUkVTVU1FKSkKKwkJCQlzdGF0dXMgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ7CisJCQlpZiAodGVtcCAmIFBPUlRfT0MpCisJCQkJc3RhdHVzIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9PVkVSX0NVUlJFTlQ7CisJCQlpZiAodGVtcCAmIFBPUlRfUkVTRVQpCisJCQkJc3RhdHVzIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9SRVNFVDsKKwkJCWlmICh0ZW1wICYgUE9SVF9QT1dFUikKKwkJCQlzdGF0dXMgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX1BPV0VSOworCQl9CisKKyNpZm5kZWYJRUhDSV9WRVJCT1NFX0RFQlVHCisJaWYgKHN0YXR1cyAmIH4weGZmZmYpCS8qIG9ubHkgaWYgd1BvcnRDaGFuZ2UgaXMgaW50ZXJlc3RpbmcgKi8KKyNlbmRpZgorCQlkYmdfcG9ydCAoZWhjaSwgIkdldFN0YXR1cyIsIHdJbmRleCArIDEsIHRlbXApOworCQkvLyB3ZSAia25vdyIgdGhpcyBhbGlnbm1lbnQgaXMgZ29vZCwgY2FsbGVyIHVzZWQga21hbGxvYygpLi4uCisJCSooKF9fbGUzMiAqKSBidWYpID0gY3B1X3RvX2xlMzIgKHN0YXR1cyk7CisJCWJyZWFrOworCWNhc2UgU2V0SHViRmVhdHVyZToKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBDX0hVQl9MT0NBTF9QT1dFUjoKKwkJY2FzZSBDX0hVQl9PVkVSX0NVUlJFTlQ6CisJCQkvKiBubyBodWItd2lkZSBmZWF0dXJlL3N0YXR1cyBmbGFncyAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCQl9CisJCWJyZWFrOworCWNhc2UgU2V0UG9ydEZlYXR1cmU6CisJCWlmICghd0luZGV4IHx8IHdJbmRleCA+IHBvcnRzKQorCQkJZ290byBlcnJvcjsKKwkJd0luZGV4LS07CisJCXRlbXAgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFt3SW5kZXhdKTsKKwkJaWYgKHRlbXAgJiBQT1JUX09XTkVSKQorCQkJYnJlYWs7CisKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CisJCQlpZiAoKHRlbXAgJiBQT1JUX1BFKSA9PSAwCisJCQkJCXx8ICh0ZW1wICYgUE9SVF9SRVNFVCkgIT0gMCkKKwkJCQlnb3RvIGVycm9yOworCQkJaWYgKGhjZC0+cmVtb3RlX3dha2V1cCkKKwkJCQl0ZW1wIHw9IFBPUlRfV0FLRV9CSVRTOworCQkJd3JpdGVsICh0ZW1wIHwgUE9SVF9TVVNQRU5ELAorCQkJCSZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbd0luZGV4XSk7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1BPV0VSOgorCQkJaWYgKEhDU19QUEMgKGVoY2ktPmhjc19wYXJhbXMpKQorCQkJCXdyaXRlbCAodGVtcCB8IFBPUlRfUE9XRVIsCisJCQkJCSZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbd0luZGV4XSk7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1JFU0VUOgorCQkJaWYgKHRlbXAgJiBQT1JUX1JFU1VNRSkKKwkJCQlnb3RvIGVycm9yOworCQkJLyogbGluZSBzdGF0dXMgYml0cyBtYXkgcmVwb3J0IHRoaXMgYXMgbG93IHNwZWVkLAorCQkJICogd2hpY2ggY2FuIGJlIGZpbmUgaWYgdGhpcyByb290IGh1YiBoYXMgYQorCQkJICogdHJhbnNhY3Rpb24gdHJhbnNsYXRvciBidWlsdCBpbi4KKwkJCSAqLworCQkJaWYgKCh0ZW1wICYgKFBPUlRfUEV8UE9SVF9DT05ORUNUKSkgPT0gUE9SVF9DT05ORUNUCisJCQkJCSYmICFlaGNpX2lzX1RESShlaGNpKQorCQkJCQkmJiBQT1JUX1VTQjExICh0ZW1wKSkgeworCQkJCWVoY2lfZGJnIChlaGNpLAorCQkJCQkicG9ydCAlZCBsb3cgc3BlZWQgLS0+IGNvbXBhbmlvblxuIiwKKwkJCQkJd0luZGV4ICsgMSk7CisJCQkJdGVtcCB8PSBQT1JUX09XTkVSOworCQkJfSBlbHNlIHsKKwkJCQllaGNpX3ZkYmcgKGVoY2ksICJwb3J0ICVkIHJlc2V0XG4iLCB3SW5kZXggKyAxKTsKKwkJCQl0ZW1wIHw9IFBPUlRfUkVTRVQ7CisJCQkJdGVtcCAmPSB+UE9SVF9QRTsKKworCQkJCS8qCisJCQkJICogY2FsbGVyIG11c3Qgd2FpdCwgdGhlbiBjYWxsIEdldFBvcnRTdGF0dXMKKwkJCQkgKiB1c2IgMi4wIHNwZWMgc2F5cyA1MCBtcyByZXNldHMgb24gcm9vdAorCQkJCSAqLworCQkJCWVoY2ktPnJlc2V0X2RvbmUgW3dJbmRleF0gPSBqaWZmaWVzCisJCQkJCQkrIG1zZWNzX3RvX2ppZmZpZXMgKDUwKTsKKwkJCX0KKwkJCXdyaXRlbCAodGVtcCwgJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFt3SW5kZXhdKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBlcnJvcjsKKwkJfQorCQlyZWFkbCAoJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOwkvKiB1bmJsb2NrIHBvc3RlZCB3cml0ZXMgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorZXJyb3I6CisJCS8qICJzdGFsbCIgb24gZXJyb3IgKi8KKwkJcmV0dmFsID0gLUVQSVBFOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbWVtLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkzODY5NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1tZW0uYwpAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMSBieSBEYXZpZCBCcm93bmVsbAorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKiB0aGlzIGZpbGUgaXMgcGFydCBvZiBlaGNpLWhjZC5jICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBUaGVyZSdzIGJhc2ljYWxseSB0aHJlZSB0eXBlcyBvZiBtZW1vcnk6CisgKgktIGRhdGEgdXNlZCBvbmx5IGJ5IHRoZSBIQ0QgLi4uIGttYWxsb2MgaXMgZmluZQorICoJLSBhc3luYyBhbmQgcGVyaW9kaWMgc2NoZWR1bGVzLCBzaGFyZWQgYnkgSEMgYW5kIEhDRCAuLi4gdGhlc2UKKyAqCSAgbmVlZCB0byB1c2UgZG1hX3Bvb2wgb3IgZG1hX2FsbG9jX2NvaGVyZW50CisgKgktIGRyaXZlciBidWZmZXJzLCByZWFkL3dyaXR0ZW4gYnkgSEMgLi4uIHNpbmdsZSBzaG90IERNQSBtYXBwZWQgCisgKgorICogVGhlcmUncyBhbHNvIFBDSSAicmVnaXN0ZXIiIGRhdGEsIHdoaWNoIGlzIG1lbW9yeSBtYXBwZWQuCisgKiBObyBtZW1vcnkgc2VlbiBieSB0aGlzIGRyaXZlciBpcyBwYWdlYWJsZS4KKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBBbGxvY2F0ZSB0aGUga2V5IHRyYW5zZmVyIHN0cnVjdHVyZXMgZnJvbSB0aGUgcHJldmlvdXNseSBhbGxvY2F0ZWQgcG9vbCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgZWhjaV9xdGRfaW5pdCAoc3RydWN0IGVoY2lfcXRkICpxdGQsIGRtYV9hZGRyX3QgZG1hKQoreworCW1lbXNldCAocXRkLCAwLCBzaXplb2YgKnF0ZCk7CisJcXRkLT5xdGRfZG1hID0gZG1hOworCXF0ZC0+aHdfdG9rZW4gPSBjcHVfdG9fbGUzMiAoUVREX1NUU19IQUxUKTsKKwlxdGQtPmh3X25leHQgPSBFSENJX0xJU1RfRU5EOworCXF0ZC0+aHdfYWx0X25leHQgPSBFSENJX0xJU1RfRU5EOworCUlOSVRfTElTVF9IRUFEICgmcXRkLT5xdGRfbGlzdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZWhjaV9xdGQgKmVoY2lfcXRkX2FsbG9jIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgZWhjaV9xdGQJCSpxdGQ7CisJZG1hX2FkZHJfdAkJZG1hOworCisJcXRkID0gZG1hX3Bvb2xfYWxsb2MgKGVoY2ktPnF0ZF9wb29sLCBmbGFncywgJmRtYSk7CisJaWYgKHF0ZCAhPSBOVUxMKSB7CisJCWVoY2lfcXRkX2luaXQgKHF0ZCwgZG1hKTsKKwl9CisJcmV0dXJuIHF0ZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVoY2lfcXRkX2ZyZWUgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfcXRkICpxdGQpCit7CisJZG1hX3Bvb2xfZnJlZSAoZWhjaS0+cXRkX3Bvb2wsIHF0ZCwgcXRkLT5xdGRfZG1hKTsKK30KKworCitzdGF0aWMgdm9pZCBxaF9kZXN0cm95IChzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgZWhjaV9xaCAqcWggPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGVoY2lfcWgsIGtyZWYpOworCXN0cnVjdCBlaGNpX2hjZCAqZWhjaSA9IHFoLT5laGNpOworCisJLyogY2xlYW4gcXRkcyBmaXJzdCwgYW5kIGtub3cgdGhpcyBpcyBub3QgbGlua2VkICovCisJaWYgKCFsaXN0X2VtcHR5ICgmcWgtPnF0ZF9saXN0KSB8fCBxaC0+cWhfbmV4dC5wdHIpIHsKKwkJZWhjaV9kYmcgKGVoY2ksICJ1bnVzZWQgcWggbm90IGVtcHR5IVxuIik7CisJCUJVRyAoKTsKKwl9CisJaWYgKHFoLT5kdW1teSkKKwkJZWhjaV9xdGRfZnJlZSAoZWhjaSwgcWgtPmR1bW15KTsKKwl1c2JfcHV0X2RldiAocWgtPmRldik7CisJZG1hX3Bvb2xfZnJlZSAoZWhjaS0+cWhfcG9vbCwgcWgsIHFoLT5xaF9kbWEpOworfQorCitzdGF0aWMgc3RydWN0IGVoY2lfcWggKmVoY2lfcWhfYWxsb2MgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgaW50IGZsYWdzKQoreworCXN0cnVjdCBlaGNpX3FoCQkqcWg7CisJZG1hX2FkZHJfdAkJZG1hOworCisJcWggPSAoc3RydWN0IGVoY2lfcWggKikKKwkJZG1hX3Bvb2xfYWxsb2MgKGVoY2ktPnFoX3Bvb2wsIGZsYWdzLCAmZG1hKTsKKwlpZiAoIXFoKQorCQlyZXR1cm4gcWg7CisKKwltZW1zZXQgKHFoLCAwLCBzaXplb2YgKnFoKTsKKwlrcmVmX2luaXQoJnFoLT5rcmVmKTsKKwlxaC0+ZWhjaSA9IGVoY2k7CisJcWgtPnFoX2RtYSA9IGRtYTsKKwkvLyBJTklUX0xJU1RfSEVBRCAoJnFoLT5xaF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCAoJnFoLT5xdGRfbGlzdCk7CisKKwkvKiBkdW1teSB0ZCBlbmFibGVzIHNhZmUgdXJiIHF1ZXVpbmcgKi8KKwlxaC0+ZHVtbXkgPSBlaGNpX3F0ZF9hbGxvYyAoZWhjaSwgZmxhZ3MpOworCWlmIChxaC0+ZHVtbXkgPT0gTlVMTCkgeworCQllaGNpX2RiZyAoZWhjaSwgIm5vIGR1bW15IHRkXG4iKTsKKwkJZG1hX3Bvb2xfZnJlZSAoZWhjaS0+cWhfcG9vbCwgcWgsIHFoLT5xaF9kbWEpOworCQlxaCA9IE5VTEw7CisJfQorCXJldHVybiBxaDsKK30KKworLyogdG8gc2hhcmUgYSBxaCAoY3B1IHRocmVhZHMsIG9yIGhjKSAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgZWhjaV9xaCAqcWhfZ2V0IChzdHJ1Y3QgZWhjaV9xaCAqcWgpCit7CisJa3JlZl9nZXQoJnFoLT5rcmVmKTsKKwlyZXR1cm4gcWg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBxaF9wdXQgKHN0cnVjdCBlaGNpX3FoICpxaCkKK3sKKwlrcmVmX3B1dCgmcWgtPmtyZWYsIHFoX2Rlc3Ryb3kpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBUaGUgcXVldWUgaGVhZHMgYW5kIHRyYW5zZmVyIGRlc2NyaXB0b3JzIGFyZSBtYW5hZ2VkIGZyb20gcG9vbHMgdGllZCAKKyAqIHRvIGVhY2ggb2YgdGhlICJwZXIgZGV2aWNlIiBzdHJ1Y3R1cmVzLgorICogVGhpcyBpcyB0aGUgaW5pdGlhbGlzYXRpb24gYW5kIGNsZWFudXAgY29kZS4KKyAqLworCitzdGF0aWMgdm9pZCBlaGNpX21lbV9jbGVhbnVwIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCit7CisJaWYgKGVoY2ktPmFzeW5jKQorCQlxaF9wdXQgKGVoY2ktPmFzeW5jKTsKKwllaGNpLT5hc3luYyA9IE5VTEw7CisKKwkvKiBETUEgY29uc2lzdGVudCBtZW1vcnkgYW5kIHBvb2xzICovCisJaWYgKGVoY2ktPnF0ZF9wb29sKQorCQlkbWFfcG9vbF9kZXN0cm95IChlaGNpLT5xdGRfcG9vbCk7CisJZWhjaS0+cXRkX3Bvb2wgPSBOVUxMOworCisJaWYgKGVoY2ktPnFoX3Bvb2wpIHsKKwkJZG1hX3Bvb2xfZGVzdHJveSAoZWhjaS0+cWhfcG9vbCk7CisJCWVoY2ktPnFoX3Bvb2wgPSBOVUxMOworCX0KKworCWlmIChlaGNpLT5pdGRfcG9vbCkKKwkJZG1hX3Bvb2xfZGVzdHJveSAoZWhjaS0+aXRkX3Bvb2wpOworCWVoY2ktPml0ZF9wb29sID0gTlVMTDsKKworCWlmIChlaGNpLT5zaXRkX3Bvb2wpCisJCWRtYV9wb29sX2Rlc3Ryb3kgKGVoY2ktPnNpdGRfcG9vbCk7CisJZWhjaS0+c2l0ZF9wb29sID0gTlVMTDsKKworCWlmIChlaGNpLT5wZXJpb2RpYykKKwkJZG1hX2ZyZWVfY29oZXJlbnQgKGVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmNvbnRyb2xsZXIsCisJCQllaGNpLT5wZXJpb2RpY19zaXplICogc2l6ZW9mICh1MzIpLAorCQkJZWhjaS0+cGVyaW9kaWMsIGVoY2ktPnBlcmlvZGljX2RtYSk7CisJZWhjaS0+cGVyaW9kaWMgPSBOVUxMOworCisJLyogc2hhZG93IHBlcmlvZGljIHRhYmxlICovCisJaWYgKGVoY2ktPnBzaGFkb3cpCisJCWtmcmVlIChlaGNpLT5wc2hhZG93KTsKKwllaGNpLT5wc2hhZG93ID0gTlVMTDsKK30KKworLyogcmVtZW1iZXIgdG8gYWRkIGNsZWFudXAgY29kZSAoYWJvdmUpIGlmIHlvdSBhZGQgYW55dGhpbmcgaGVyZSAqLworc3RhdGljIGludCBlaGNpX21lbV9pbml0IChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIGludCBmbGFncykKK3sKKwlpbnQgaTsKKworCS8qIFFURHMgZm9yIGNvbnRyb2wvYnVsay9pbnRyIHRyYW5zZmVycyAqLworCWVoY2ktPnF0ZF9wb29sID0gZG1hX3Bvb2xfY3JlYXRlICgiZWhjaV9xdGQiLCAKKwkJCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmNvbnRyb2xsZXIsCisJCQlzaXplb2YgKHN0cnVjdCBlaGNpX3F0ZCksCisJCQkzMiAvKiBieXRlIGFsaWdubWVudCAoZm9yIGh3IHBhcnRzKSAqLywKKwkJCTQwOTYgLyogY2FuJ3QgY3Jvc3MgNEsgKi8pOworCWlmICghZWhjaS0+cXRkX3Bvb2wpIHsKKwkJZ290byBmYWlsOworCX0KKworCS8qIFFIcyBmb3IgY29udHJvbC9idWxrL2ludHIgdHJhbnNmZXJzICovCisJZWhjaS0+cWhfcG9vbCA9IGRtYV9wb29sX2NyZWF0ZSAoImVoY2lfcWgiLCAKKwkJCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmNvbnRyb2xsZXIsCisJCQlzaXplb2YgKHN0cnVjdCBlaGNpX3FoKSwKKwkJCTMyIC8qIGJ5dGUgYWxpZ25tZW50IChmb3IgaHcgcGFydHMpICovLAorCQkJNDA5NiAvKiBjYW4ndCBjcm9zcyA0SyAqLyk7CisJaWYgKCFlaGNpLT5xaF9wb29sKSB7CisJCWdvdG8gZmFpbDsKKwl9CisJZWhjaS0+YXN5bmMgPSBlaGNpX3FoX2FsbG9jIChlaGNpLCBmbGFncyk7CisJaWYgKCFlaGNpLT5hc3luYykgeworCQlnb3RvIGZhaWw7CisJfQorCisJLyogSVREIGZvciBoaWdoIHNwZWVkIElTTyB0cmFuc2ZlcnMgKi8KKwllaGNpLT5pdGRfcG9vbCA9IGRtYV9wb29sX2NyZWF0ZSAoImVoY2lfaXRkIiwgCisJCQllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5jb250cm9sbGVyLAorCQkJc2l6ZW9mIChzdHJ1Y3QgZWhjaV9pdGQpLAorCQkJMzIgLyogYnl0ZSBhbGlnbm1lbnQgKGZvciBodyBwYXJ0cykgKi8sCisJCQk0MDk2IC8qIGNhbid0IGNyb3NzIDRLICovKTsKKwlpZiAoIWVoY2ktPml0ZF9wb29sKSB7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBTSVREIGZvciBmdWxsL2xvdyBzcGVlZCBzcGxpdCBJU08gdHJhbnNmZXJzICovCisJZWhjaS0+c2l0ZF9wb29sID0gZG1hX3Bvb2xfY3JlYXRlICgiZWhjaV9zaXRkIiwgCisJCQllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5jb250cm9sbGVyLAorCQkJc2l6ZW9mIChzdHJ1Y3QgZWhjaV9zaXRkKSwKKwkJCTMyIC8qIGJ5dGUgYWxpZ25tZW50IChmb3IgaHcgcGFydHMpICovLAorCQkJNDA5NiAvKiBjYW4ndCBjcm9zcyA0SyAqLyk7CisJaWYgKCFlaGNpLT5zaXRkX3Bvb2wpIHsKKwkJZ290byBmYWlsOworCX0KKworCS8qIEhhcmR3YXJlIHBlcmlvZGljIHRhYmxlICovCisJZWhjaS0+cGVyaW9kaWMgPSAoX19sZTMyICopCisJCWRtYV9hbGxvY19jb2hlcmVudCAoZWhjaV90b19oY2QoZWhjaSktPnNlbGYuY29udHJvbGxlciwKKwkJCWVoY2ktPnBlcmlvZGljX3NpemUgKiBzaXplb2YoX19sZTMyKSwKKwkJCSZlaGNpLT5wZXJpb2RpY19kbWEsIDApOworCWlmIChlaGNpLT5wZXJpb2RpYyA9PSBOVUxMKSB7CisJCWdvdG8gZmFpbDsKKwl9CisJZm9yIChpID0gMDsgaSA8IGVoY2ktPnBlcmlvZGljX3NpemU7IGkrKykKKwkJZWhjaS0+cGVyaW9kaWMgW2ldID0gRUhDSV9MSVNUX0VORDsKKworCS8qIHNvZnR3YXJlIHNoYWRvdyBvZiBoYXJkd2FyZSB0YWJsZSAqLworCWVoY2ktPnBzaGFkb3cgPSBrbWFsbG9jIChlaGNpLT5wZXJpb2RpY19zaXplICogc2l6ZW9mICh2b2lkICopLCBmbGFncyk7CisJaWYgKGVoY2ktPnBzaGFkb3cgPT0gTlVMTCkgeworCQlnb3RvIGZhaWw7CisJfQorCW1lbXNldCAoZWhjaS0+cHNoYWRvdywgMCwgZWhjaS0+cGVyaW9kaWNfc2l6ZSAqIHNpemVvZiAodm9pZCAqKSk7CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwllaGNpX2RiZyAoZWhjaSwgImNvdWxkbid0IGluaXQgbWVtb3J5XG4iKTsKKwllaGNpX21lbV9jbGVhbnVwIChlaGNpKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZjliOWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jCkBAIC0wLDAgKzEsMTA5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAyIGJ5IERhdmlkIEJyb3duZWxsCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIHRoaXMgZmlsZSBpcyBwYXJ0IG9mIGVoY2ktaGNkLmMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEVIQ0kgaGFyZHdhcmUgcXVldWUgbWFuaXB1bGF0aW9uIC4uLiB0aGUgY29yZS4gIFFIL1FURCBtYW5pcHVsYXRpb24uCisgKgorICogQ29udHJvbCwgYnVsaywgYW5kIGludGVycnVwdCB0cmFmZmljIGFsbCB1c2UgInFoIiBsaXN0cy4gIFRoZXkgbGlzdCAicXRkIgorICogZW50cmllcyBkZXNjcmliaW5nIFVTQiB0cmFuc2FjdGlvbnMsIG1heCAxNi0yMGtCL2VudHJ5ICh3aXRoIDRrQi1hbGlnbmVkCisgKiBidWZmZXJzIG5lZWRlZCBmb3IgdGhlIGxhcmdlciBudW1iZXIpLiAgV2UgdXNlIG9uZSBRSCBwZXIgZW5kcG9pbnQsIHF1ZXVlCisgKiBtdWx0aXBsZSB1cmJzIChhbGwgdGhyZWUgdHlwZXMpIHBlciBlbmRwb2ludC4gIFVSQnMgbWF5IG5lZWQgc2V2ZXJhbCBxdGRzLgorICoKKyAqIElTTyB0cmFmZmljIHVzZXMgIklTTyBURCIgKGl0ZCwgYW5kIHNpdGQpIHJlY29yZHMsIGFuZCAoYWxvbmcgd2l0aAorICogaW50ZXJydXB0cykgbmVlZHMgY2FyZWZ1bCBzY2hlZHVsaW5nLiAgUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIGNhbiBiZQorICogYW4gb25nb2luZyBjaGFsbGVuZ2UuICBUaGF0J3MgaW4gImVoY2ktc2NoZWQuYyIuCisgKiAKKyAqIFVTQiAxLjEgZGV2aWNlcyBhcmUgaGFuZGxlZCAoYSkgYnkgImNvbXBhbmlvbiIgT0hDSSBvciBVSENJIHJvb3QgaHVicywKKyAqIG9yIG90aGVyd2lzZSB0aHJvdWdoIHRyYW5zYWN0aW9uIHRyYW5zbGF0b3JzIChUVHMpIGluIFVTQiAyLjAgaHVicyB1c2luZworICogKGIpIHNwZWNpYWwgZmllbGRzIGluIHFoIGVudHJpZXMgb3IgKGMpIHNwbGl0IGlzbyBlbnRyaWVzLiAgVFRzIHdpbGwKKyAqIGJ1ZmZlciBsb3cvZnVsbCBzcGVlZCBkYXRhIHNvIHRoZSBob3N0IGNvbGxlY3RzIGl0IGF0IGhpZ2ggc3BlZWQuCisgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogZmlsbCBhIHF0ZCwgcmV0dXJuaW5nIGhvdyBtdWNoIG9mIHRoZSBidWZmZXIgd2Ugd2VyZSBhYmxlIHRvIHF1ZXVlIHVwICovCisKK3N0YXRpYyBpbnQKK3F0ZF9maWxsIChzdHJ1Y3QgZWhjaV9xdGQgKnF0ZCwgZG1hX2FkZHJfdCBidWYsIHNpemVfdCBsZW4sCisJCWludCB0b2tlbiwgaW50IG1heHBhY2tldCkKK3sKKwlpbnQJaSwgY291bnQ7CisJdTY0CWFkZHIgPSBidWY7CisKKwkvKiBvbmUgYnVmZmVyIGVudHJ5IHBlciA0SyAuLi4gZmlyc3QgbWlnaHQgYmUgc2hvcnQgb3IgdW5hbGlnbmVkICovCisJcXRkLT5od19idWYgWzBdID0gY3B1X3RvX2xlMzIgKCh1MzIpYWRkcik7CisJcXRkLT5od19idWZfaGkgWzBdID0gY3B1X3RvX2xlMzIgKCh1MzIpKGFkZHIgPj4gMzIpKTsKKwljb3VudCA9IDB4MTAwMCAtIChidWYgJiAweDBmZmYpOwkvKiByZXN0IG9mIHRoYXQgcGFnZSAqLworCWlmIChsaWtlbHkgKGxlbiA8IGNvdW50KSkJCS8qIC4uLiBpZmYgbmVlZGVkICovCisJCWNvdW50ID0gbGVuOworCWVsc2UgeworCQlidWYgKz0gIDB4MTAwMDsKKwkJYnVmICY9IH4weDBmZmY7CisKKwkJLyogcGVyLXF0ZCBsaW1pdDogZnJvbSAxNksgdG8gMjBLIChiZXN0IGFsaWdubWVudCkgKi8KKwkJZm9yIChpID0gMTsgY291bnQgPCBsZW4gJiYgaSA8IDU7IGkrKykgeworCQkJYWRkciA9IGJ1ZjsKKwkJCXF0ZC0+aHdfYnVmIFtpXSA9IGNwdV90b19sZTMyICgodTMyKWFkZHIpOworCQkJcXRkLT5od19idWZfaGkgW2ldID0gY3B1X3RvX2xlMzIgKCh1MzIpKGFkZHIgPj4gMzIpKTsKKwkJCWJ1ZiArPSAweDEwMDA7CisJCQlpZiAoKGNvdW50ICsgMHgxMDAwKSA8IGxlbikKKwkJCQljb3VudCArPSAweDEwMDA7CisJCQllbHNlCisJCQkJY291bnQgPSBsZW47CisJCX0KKworCQkvKiBzaG9ydCBwYWNrZXRzIG1heSBvbmx5IHRlcm1pbmF0ZSB0cmFuc2ZlcnMgKi8KKwkJaWYgKGNvdW50ICE9IGxlbikKKwkJCWNvdW50IC09IChjb3VudCAlIG1heHBhY2tldCk7CisJfQorCXF0ZC0+aHdfdG9rZW4gPSBjcHVfdG9fbGUzMiAoKGNvdW50IDw8IDE2KSB8IHRva2VuKTsKKwlxdGQtPmxlbmd0aCA9IGNvdW50OworCisJcmV0dXJuIGNvdW50OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIHZvaWQKK3FoX3VwZGF0ZSAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9xaCAqcWgsIHN0cnVjdCBlaGNpX3F0ZCAqcXRkKQoreworCS8qIHdyaXRlcyB0byBhbiBhY3RpdmUgb3ZlcmxheSBhcmUgdW5zYWZlICovCisJQlVHX09OKHFoLT5xaF9zdGF0ZSAhPSBRSF9TVEFURV9JRExFKTsKKworCXFoLT5od19xdGRfbmV4dCA9IFFURF9ORVhUIChxdGQtPnF0ZF9kbWEpOworCXFoLT5od19hbHRfbmV4dCA9IEVIQ0lfTElTVF9FTkQ7CisKKwkvKiBFeGNlcHQgZm9yIGNvbnRyb2wgZW5kcG9pbnRzLCB3ZSBtYWtlIGhhcmR3YXJlIG1haW50YWluIGRhdGEKKwkgKiB0b2dnbGUgKGxpa2UgT0hDSSkgLi4uIGhlcmUgKHJlKWluaXRpYWxpemUgdGhlIHRvZ2dsZSBpbiB0aGUgUUgsCisJICogYW5kIHNldCB0aGUgcHNldWRvLXRvZ2dsZSBpbiB1ZGV2LiBPbmx5IHVzYl9jbGVhcl9oYWx0KCkgd2lsbAorCSAqIGV2ZXIgY2xlYXIgaXQuCisJICovCisJaWYgKCEocWgtPmh3X2luZm8xICYgY3B1X3RvX2xlMzIoMSA8PCAxNCkpKSB7CisJCXVuc2lnbmVkCWlzX291dCwgZXBudW07CisKKwkJaXNfb3V0ID0gIShxdGQtPmh3X3Rva2VuICYgY3B1X3RvX2xlMzIoMSA8PCA4KSk7CisJCWVwbnVtID0gKGxlMzJfdG9fY3B1cCgmcWgtPmh3X2luZm8xKSA+PiA4KSAmIDB4MGY7CisJCWlmICh1bmxpa2VseSAoIXVzYl9nZXR0b2dnbGUgKHFoLT5kZXYsIGVwbnVtLCBpc19vdXQpKSkgeworCQkJcWgtPmh3X3Rva2VuICY9IH5fX2NvbnN0YW50X2NwdV90b19sZTMyIChRVERfVE9HR0xFKTsKKwkJCXVzYl9zZXR0b2dnbGUgKHFoLT5kZXYsIGVwbnVtLCBpc19vdXQsIDEpOworCQl9CisJfQorCisJLyogSEMgbXVzdCBzZWUgbGF0ZXN0IHF0ZCBhbmQgcWggZGF0YSBiZWZvcmUgd2UgY2xlYXIgQUNUSVZFK0hBTFQgKi8KKwl3bWIgKCk7CisJcWgtPmh3X3Rva2VuICY9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFFURF9UT0dHTEUgfCBRVERfU1RTX1BJTkcpOworfQorCisvKiBpZiBpdCB3ZXJlbid0IGZvciBhIGNvbW1vbiBzaWxpY29uIHF1aXJrICh3cml0aW5nIHRoZSBkdW1teSBpbnRvIHRoZSBxaAorICogb3ZlcmxheSwgc28gcWgtPmh3X3Rva2VuIHdyb25nbHkgYmVjb21lcyBpbmFjdGl2ZS9oYWx0ZWQpLCBvbmx5IGZhdWx0CisgKiByZWNvdmVyeSAoaW5jbHVkaW5nIHVyYiBkZXF1ZXVlKSB3b3VsZCBuZWVkIHNvZnR3YXJlIGNoYW5nZXMgdG8gYSBRSC4uLgorICovCitzdGF0aWMgdm9pZAorcWhfcmVmcmVzaCAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9xaCAqcWgpCit7CisJc3RydWN0IGVoY2lfcXRkICpxdGQ7CisKKwlpZiAobGlzdF9lbXB0eSAoJnFoLT5xdGRfbGlzdCkpCisJCXF0ZCA9IHFoLT5kdW1teTsKKwllbHNlIHsKKwkJcXRkID0gbGlzdF9lbnRyeSAocWgtPnF0ZF9saXN0Lm5leHQsCisJCQkJc3RydWN0IGVoY2lfcXRkLCBxdGRfbGlzdCk7CisJCS8qIGZpcnN0IHF0ZCBtYXkgYWxyZWFkeSBiZSBwYXJ0aWFsbHkgcHJvY2Vzc2VkICovCisJCWlmIChjcHVfdG9fbGUzMiAocXRkLT5xdGRfZG1hKSA9PSBxaC0+aHdfY3VycmVudCkKKwkJCXF0ZCA9IE5VTEw7CisJfQorCisJaWYgKHF0ZCkKKwkJcWhfdXBkYXRlIChlaGNpLCBxaCwgcXRkKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgcXRkX2NvcHlfc3RhdHVzICgKKwlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksCisJc3RydWN0IHVyYiAqdXJiLAorCXNpemVfdCBsZW5ndGgsCisJdTMyIHRva2VuCispCit7CisJLyogY291bnQgSU4vT1VUIGJ5dGVzLCBub3QgU0VUVVAgKGV2ZW4gc2hvcnQgcGFja2V0cykgKi8KKwlpZiAobGlrZWx5IChRVERfUElEICh0b2tlbikgIT0gMikpCisJCXVyYi0+YWN0dWFsX2xlbmd0aCArPSBsZW5ndGggLSBRVERfTEVOR1RIICh0b2tlbik7CisKKwkvKiBkb24ndCBtb2RpZnkgZXJyb3IgY29kZXMgKi8KKwlpZiAodW5saWtlbHkgKHVyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykpCisJCXJldHVybjsKKworCS8qIGZvcmNlIGNsZWFudXAgYWZ0ZXIgc2hvcnQgcmVhZDsgbm90IGFsd2F5cyBhbiBlcnJvciAqLworCWlmICh1bmxpa2VseSAoSVNfU0hPUlRfUkVBRCAodG9rZW4pKSkKKwkJdXJiLT5zdGF0dXMgPSAtRVJFTU9URUlPOworCisJLyogc2VyaW91cyAiY2FuJ3QgcHJvY2VlZCIgZmF1bHRzIHJlcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZSAqLworCWlmICh0b2tlbiAmIFFURF9TVFNfSEFMVCkgeworCQlpZiAodG9rZW4gJiBRVERfU1RTX0JBQkJMRSkgeworCQkJLyogRklYTUUgIm11c3QiIGRpc2FibGUgYmFiYmxpbmcgZGV2aWNlJ3MgcG9ydCB0b28gKi8KKwkJCXVyYi0+c3RhdHVzID0gLUVPVkVSRkxPVzsKKwkJfSBlbHNlIGlmICh0b2tlbiAmIFFURF9TVFNfTU1GKSB7CisJCQkvKiBmcy9scyBpbnRlcnJ1cHQgeGZlciBtaXNzZWQgdGhlIGNvbXBsZXRlLXNwbGl0ICovCisJCQl1cmItPnN0YXR1cyA9IC1FUFJPVE87CisJCX0gZWxzZSBpZiAodG9rZW4gJiBRVERfU1RTX0RCRSkgeworCQkJdXJiLT5zdGF0dXMgPSAoUVREX1BJRCAodG9rZW4pID09IDEpIC8qIElOID8gKi8KKwkJCQk/IC1FTk9TUiAgLyogaGMgY291bGRuJ3QgcmVhZCBkYXRhICovCisJCQkJOiAtRUNPTU07IC8qIGhjIGNvdWxkbid0IHdyaXRlIGRhdGEgKi8KKwkJfSBlbHNlIGlmICh0b2tlbiAmIFFURF9TVFNfWEFDVCkgeworCQkJLyogdGltZW91dCwgYmFkIGNyYywgd3JvbmcgUElELCBldGM7IHJldHJpZWQgKi8KKwkJCWlmIChRVERfQ0VSUiAodG9rZW4pKQorCQkJCXVyYi0+c3RhdHVzID0gLUVQSVBFOworCQkJZWxzZSB7CisJCQkJZWhjaV9kYmcgKGVoY2ksICJkZXZwYXRoICVzIGVwJWQlcyAzc3RyaWtlc1xuIiwKKwkJCQkJdXJiLT5kZXYtPmRldnBhdGgsCisJCQkJCXVzYl9waXBlZW5kcG9pbnQgKHVyYi0+cGlwZSksCisJCQkJCXVzYl9waXBlaW4gKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIpOworCQkJCXVyYi0+c3RhdHVzID0gLUVQUk9UTzsKKwkJCX0KKwkJLyogQ0VSUiBub256ZXJvICsgbm8gZXJyb3JzICsgaGFsdCAtLT4gc3RhbGwgKi8KKwkJfSBlbHNlIGlmIChRVERfQ0VSUiAodG9rZW4pKQorCQkJdXJiLT5zdGF0dXMgPSAtRVBJUEU7CisJCWVsc2UJLyogdW5rbm93biAqLworCQkJdXJiLT5zdGF0dXMgPSAtRVBST1RPOworCisJCWVoY2lfdmRiZyAoZWhjaSwKKwkJCSJkZXYlZCBlcCVkJXMgcXRkIHRva2VuICUwOHggLS0+IHN0YXR1cyAlZFxuIiwKKwkJCXVzYl9waXBlZGV2aWNlICh1cmItPnBpcGUpLAorCQkJdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKSwKKwkJCXVzYl9waXBlaW4gKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIsCisJCQl0b2tlbiwgdXJiLT5zdGF0dXMpOworCisJCS8qIGlmIGFzeW5jIENTUExJVCBmYWlsZWQsIHRyeSBjbGVhbmluZyBvdXQgdGhlIFRUIGJ1ZmZlciAqLworCQlpZiAodXJiLT5zdGF0dXMgIT0gLUVQSVBFCisJCQkJJiYgdXJiLT5kZXYtPnR0ICYmICF1c2JfcGlwZWludCAodXJiLT5waXBlKQorCQkJCSYmICgodG9rZW4gJiBRVERfU1RTX01NRikgIT0gMAorCQkJCQl8fCBRVERfQ0VSUih0b2tlbikgPT0gMCkKKwkJCQkmJiAoIWVoY2lfaXNfVERJKGVoY2kpCisgICAgICAgICAgICAgICAgCSAgICAgICAgICAgICAgICB8fCB1cmItPmRldi0+dHQtPmh1YiAhPQorCQkJCQkgICBlaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5yb290X2h1YikpIHsKKyNpZmRlZiBERUJVRworCQkJc3RydWN0IHVzYl9kZXZpY2UgKnR0ID0gdXJiLT5kZXYtPnR0LT5odWI7CisJCQlkZXZfZGJnICgmdHQtPmRldiwKKwkJCQkiY2xlYXIgdHQgYnVmZmVyIHBvcnQgJWQsIGElZCBlcCVkIHQlMDh4XG4iLAorCQkJCXVyYi0+ZGV2LT50dHBvcnQsIHVyYi0+ZGV2LT5kZXZudW0sCisJCQkJdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKSwgdG9rZW4pOworI2VuZGlmIC8qIERFQlVHICovCisJCQl1c2JfaHViX3R0X2NsZWFyX2J1ZmZlciAodXJiLT5kZXYsIHVyYi0+cGlwZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitlaGNpX3VyYl9kb25lIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitfX3JlbGVhc2VzKGVoY2ktPmxvY2spCitfX2FjcXVpcmVzKGVoY2ktPmxvY2spCit7CisJaWYgKGxpa2VseSAodXJiLT5oY3ByaXYgIT0gTlVMTCkpIHsKKwkJc3RydWN0IGVoY2lfcWgJKnFoID0gKHN0cnVjdCBlaGNpX3FoICopIHVyYi0+aGNwcml2OworCisJCS8qIFMtbWFzayBpbiBhIFFIIG1lYW5zIGl0J3MgYW4gaW50ZXJydXB0IHVyYiAqLworCQlpZiAoKHFoLT5od19pbmZvMiAmIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDB4MDBmZikpICE9IDApIHsKKworCQkJLyogLi4uIHVwZGF0ZSBoYy13aWRlIHBlcmlvZGljIHN0YXRzIChmb3IgdXNiZnMpICovCisJCQllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5iYW5kd2lkdGhfaW50X3JlcXMtLTsKKwkJfQorCQlxaF9wdXQgKHFoKTsKKwl9CisKKwlzcGluX2xvY2sgKCZ1cmItPmxvY2spOworCXVyYi0+aGNwcml2ID0gTlVMTDsKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAtRUlOUFJPR1JFU1M6CQkvKiBzdWNjZXNzICovCisJCXVyYi0+c3RhdHVzID0gMDsKKwlkZWZhdWx0OgkJCS8qIGZhdWx0ICovCisJCUNPVU5UIChlaGNpLT5zdGF0cy5jb21wbGV0ZSk7CisJCWJyZWFrOworCWNhc2UgLUVSRU1PVEVJTzoJCS8qIGZhdWx0IG9yIG5vcm1hbCAqLworCQlpZiAoISh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1NIT1JUX05PVF9PSykpCisJCQl1cmItPnN0YXR1cyA9IDA7CisJCUNPVU5UIChlaGNpLT5zdGF0cy5jb21wbGV0ZSk7CisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CQkvKiBjYW5jZWxlZCAqLworCWNhc2UgLUVOT0VOVDoKKwkJQ09VTlQgKGVoY2ktPnN0YXRzLnVubGluayk7CisJCWJyZWFrOworCX0KKwlzcGluX3VubG9jayAoJnVyYi0+bG9jayk7CisKKyNpZmRlZiBFSENJX1VSQl9UUkFDRQorCWVoY2lfZGJnIChlaGNpLAorCQkiJXMgJXMgdXJiICVwIGVwJWQlcyBzdGF0dXMgJWQgbGVuICVkLyVkXG4iLAorCQlfX0ZVTkNUSU9OX18sIHVyYi0+ZGV2LT5kZXZwYXRoLCB1cmIsCisJCXVzYl9waXBlZW5kcG9pbnQgKHVyYi0+cGlwZSksCisJCXVzYl9waXBlaW4gKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIsCisJCXVyYi0+c3RhdHVzLAorCQl1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisjZW5kaWYKKworCS8qIGNvbXBsZXRlKCkgY2FuIHJlZW50ZXIgdGhpcyBIQ0QgKi8KKwlzcGluX3VubG9jayAoJmVoY2ktPmxvY2spOworCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiIChlaGNpX3RvX2hjZChlaGNpKSwgdXJiLCByZWdzKTsKKwlzcGluX2xvY2sgKCZlaGNpLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgc3RhcnRfdW5saW5rX2FzeW5jIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCk7CitzdGF0aWMgdm9pZCB1bmxpbmtfYXN5bmMgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfcWggKnFoKTsKKworc3RhdGljIHZvaWQgaW50cl9kZXNjaGVkdWxlIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCk7CitzdGF0aWMgaW50IHFoX3NjaGVkdWxlIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCk7CisKKy8qCisgKiBQcm9jZXNzIGFuZCBmcmVlIGNvbXBsZXRlZCBxdGRzIGZvciBhIHFoLCByZXR1cm5pbmcgVVJCcyB0byBkcml2ZXJzLgorICogQ2hhc2VzIHVwIHRvIHFoLT5od19jdXJyZW50LiAgUmV0dXJucyBudW1iZXIgb2YgY29tcGxldGlvbnMgY2FsbGVkLAorICogaW5kaWNhdGluZyBob3cgbXVjaCAicmVhbCIgd29yayB3ZSBkaWQuCisgKi8KKyNkZWZpbmUgSEFMVF9CSVQgX19jb25zdGFudF9jcHVfdG9fbGUzMihRVERfU1RTX0hBTFQpCitzdGF0aWMgdW5zaWduZWQKK3FoX2NvbXBsZXRpb25zIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGVoY2lfcXRkCQkqbGFzdCA9IE5VTEwsICplbmQgPSBxaC0+ZHVtbXk7CisJc3RydWN0IGxpc3RfaGVhZAkqZW50cnksICp0bXA7CisJaW50CQkJc3RvcHBlZDsKKwl1bnNpZ25lZAkJY291bnQgPSAwOworCWludAkJCWRvX3N0YXR1cyA9IDA7CisJdTgJCQlzdGF0ZTsKKworCWlmICh1bmxpa2VseSAobGlzdF9lbXB0eSAoJnFoLT5xdGRfbGlzdCkpKQorCQlyZXR1cm4gY291bnQ7CisKKwkvKiBjb21wbGV0aW9ucyAob3IgdGFza3Mgb24gb3RoZXIgY3B1cykgbXVzdCBuZXZlciBjbG9iYmVyIEhBTFQKKwkgKiB0aWxsIHdlJ3ZlIGdvbmUgdGhyb3VnaCBhbmQgY2xlYW5lZCBldmVyeXRoaW5nIHVwLCBldmVuIHdoZW4KKwkgKiB0aGV5IGFkZCB1cmJzIHRvIHRoaXMgcWgncyBxdWV1ZSBvciBtYXJrIHRoZW0gZm9yIHVubGlua2luZy4KKwkgKgorCSAqIE5PVEU6ICB1bmxpbmtpbmcgZXhwZWN0cyB0byBiZSBkb25lIGluIHF1ZXVlIG9yZGVyLgorCSAqLworCXN0YXRlID0gcWgtPnFoX3N0YXRlOworCXFoLT5xaF9zdGF0ZSA9IFFIX1NUQVRFX0NPTVBMRVRJTkc7CisJc3RvcHBlZCA9IChzdGF0ZSA9PSBRSF9TVEFURV9JRExFKTsKKworCS8qIHJlbW92ZSBkZS1hY3RpdmF0ZWQgUVREcyBmcm9tIGZyb250IG9mIHF1ZXVlLgorCSAqIGFmdGVyIGZhdWx0cyAoaW5jbHVkaW5nIHNob3J0IHJlYWRzKSwgY2xlYW51cCB0aGlzIHVyYgorCSAqIHRoZW4gbGV0IHRoZSBxdWV1ZSBhZHZhbmNlLgorCSAqIGlmIHF1ZXVlIGlzIHN0b3BwZWQsIGhhbmRsZXMgdW5saW5rcy4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX3NhZmUgKGVudHJ5LCB0bXAsICZxaC0+cXRkX2xpc3QpIHsKKwkJc3RydWN0IGVoY2lfcXRkCSpxdGQ7CisJCXN0cnVjdCB1cmIJKnVyYjsKKwkJdTMyCQl0b2tlbiA9IDA7CisKKwkJcXRkID0gbGlzdF9lbnRyeSAoZW50cnksIHN0cnVjdCBlaGNpX3F0ZCwgcXRkX2xpc3QpOworCQl1cmIgPSBxdGQtPnVyYjsKKworCQkvKiBjbGVhbiB1cCBhbnkgc3RhdGUgZnJvbSBwcmV2aW91cyBRVEQgLi4uKi8KKwkJaWYgKGxhc3QpIHsKKwkJCWlmIChsaWtlbHkgKGxhc3QtPnVyYiAhPSB1cmIpKSB7CisJCQkJZWhjaV91cmJfZG9uZSAoZWhjaSwgbGFzdC0+dXJiLCByZWdzKTsKKwkJCQljb3VudCsrOworCQkJfQorCQkJZWhjaV9xdGRfZnJlZSAoZWhjaSwgbGFzdCk7CisJCQlsYXN0ID0gTlVMTDsKKwkJfQorCisJCS8qIGlnbm9yZSB1cmJzIHN1Ym1pdHRlZCBkdXJpbmcgY29tcGxldGlvbnMgd2UgcmVwb3J0ZWQgKi8KKwkJaWYgKHF0ZCA9PSBlbmQpCisJCQlicmVhazsKKworCQkvKiBoYXJkd2FyZSBjb3BpZXMgcXRkIG91dCBvZiBxaCBvdmVybGF5ICovCisJCXJtYiAoKTsKKwkJdG9rZW4gPSBsZTMyX3RvX2NwdSAocXRkLT5od190b2tlbik7CisKKwkJLyogYWx3YXlzIGNsZWFuIHVwIHF0ZHMgdGhlIGhjIGRlLWFjdGl2YXRlZCAqLworCQlpZiAoKHRva2VuICYgUVREX1NUU19BQ1RJVkUpID09IDApIHsKKworCQkJaWYgKCh0b2tlbiAmIFFURF9TVFNfSEFMVCkgIT0gMCkgeworCQkJCXN0b3BwZWQgPSAxOworCisJCQkvKiBtYWdpYyBkdW1teSBmb3Igc29tZSBzaG9ydCByZWFkczsgcWggd29uJ3QgYWR2YW5jZS4KKwkJCSAqIHRoYXQgc2lsaWNvbiBxdWlyayBjYW4ga2ljayBpbiB3aXRoIHRoaXMgZHVtbXkgdG9vLgorCQkJICovCisJCQl9IGVsc2UgaWYgKElTX1NIT1JUX1JFQUQgKHRva2VuKQorCQkJCQkmJiAhKHF0ZC0+aHdfYWx0X25leHQgJiBFSENJX0xJU1RfRU5EKSkgeworCQkJCXN0b3BwZWQgPSAxOworCQkJCWdvdG8gaGFsdDsKKwkJCX0KKworCQkvKiBzdG9wIHNjYW5uaW5nIHdoZW4gd2UgcmVhY2ggcXRkcyB0aGUgaGMgaXMgdXNpbmcgKi8KKwkJfSBlbHNlIGlmIChsaWtlbHkgKCFzdG9wcGVkCisJCQkJJiYgSENfSVNfUlVOTklORyAoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlKSkpIHsKKwkJCWJyZWFrOworCisJCX0gZWxzZSB7CisJCQlzdG9wcGVkID0gMTsKKworCQkJaWYgKHVubGlrZWx5ICghSENfSVNfUlVOTklORyAoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlKSkpCisJCQkJdXJiLT5zdGF0dXMgPSAtRVNIVVRET1dOOworCisJCQkvKiBpZ25vcmUgYWN0aXZlIHVyYnMgdW5sZXNzIHNvbWUgcHJldmlvdXMgcXRkCisJCQkgKiBmb3IgdGhlIHVyYiBmYXVsdGVkIChpbmNsdWRpbmcgc2hvcnQgcmVhZCkgb3IKKwkJCSAqIGl0cyB1cmIgd2FzIGNhbmNlbGVkLiAgd2UgbWF5IHBhdGNoIHFoIG9yIHF0ZHMuCisJCQkgKi8KKwkJCWlmIChsaWtlbHkgKHVyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykpCisJCQkJY29udGludWU7CisJCQkKKwkJCS8qIGlzc3VlIHN0YXR1cyBhZnRlciBzaG9ydCBjb250cm9sIHJlYWRzICovCisJCQlpZiAodW5saWtlbHkgKGRvX3N0YXR1cyAhPSAwKQorCQkJCQkmJiBRVERfUElEICh0b2tlbikgPT0gMCAvKiBPVVQgKi8pIHsKKwkJCQlkb19zdGF0dXMgPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiB0b2tlbiBpbiBvdmVybGF5IG1heSBiZSBtb3N0IGN1cnJlbnQgKi8KKwkJCWlmIChzdGF0ZSA9PSBRSF9TVEFURV9JRExFCisJCQkJCSYmIGNwdV90b19sZTMyIChxdGQtPnF0ZF9kbWEpCisJCQkJCQk9PSBxaC0+aHdfY3VycmVudCkKKwkJCQl0b2tlbiA9IGxlMzJfdG9fY3B1IChxaC0+aHdfdG9rZW4pOworCisJCQkvKiBmb3JjZSBoYWx0IGZvciB1bmxpbmtlZCBvciBibG9ja2VkIHFoLCBzbyB3ZSdsbAorCQkJICogcGF0Y2ggdGhlIHFoIGxhdGVyIGFuZCBzbyB0aGF0IGNvbXBsZXRpb25zIGNhbid0CisJCQkgKiBhY3RpdmF0ZSBpdCB3aGlsZSB3ZSAia25vdyIgaXQncyBzdG9wcGVkLgorCQkJICovCisJCQlpZiAoKEhBTFRfQklUICYgcWgtPmh3X3Rva2VuKSA9PSAwKSB7CitoYWx0OgorCQkJCXFoLT5od190b2tlbiB8PSBIQUxUX0JJVDsKKwkJCQl3bWIgKCk7CisJCQl9CisJCX0KKyAKKwkJLyogcmVtb3ZlIGl0IGZyb20gdGhlIHF1ZXVlICovCisJCXNwaW5fbG9jayAoJnVyYi0+bG9jayk7CisJCXF0ZF9jb3B5X3N0YXR1cyAoZWhjaSwgdXJiLCBxdGQtPmxlbmd0aCwgdG9rZW4pOworCQlkb19zdGF0dXMgPSAodXJiLT5zdGF0dXMgPT0gLUVSRU1PVEVJTykKKwkJCQkmJiB1c2JfcGlwZWNvbnRyb2wgKHVyYi0+cGlwZSk7CisJCXNwaW5fdW5sb2NrICgmdXJiLT5sb2NrKTsKKworCQlpZiAoc3RvcHBlZCAmJiBxdGQtPnF0ZF9saXN0LnByZXYgIT0gJnFoLT5xdGRfbGlzdCkgeworCQkJbGFzdCA9IGxpc3RfZW50cnkgKHF0ZC0+cXRkX2xpc3QucHJldiwKKwkJCQkJc3RydWN0IGVoY2lfcXRkLCBxdGRfbGlzdCk7CisJCQlsYXN0LT5od19uZXh0ID0gcXRkLT5od19uZXh0OworCQl9CisJCWxpc3RfZGVsICgmcXRkLT5xdGRfbGlzdCk7CisJCWxhc3QgPSBxdGQ7CisJfQorCisJLyogbGFzdCB1cmIncyBjb21wbGV0aW9uIG1pZ2h0IHN0aWxsIG5lZWQgY2FsbGluZyAqLworCWlmIChsaWtlbHkgKGxhc3QgIT0gTlVMTCkpIHsKKwkJZWhjaV91cmJfZG9uZSAoZWhjaSwgbGFzdC0+dXJiLCByZWdzKTsKKwkJY291bnQrKzsKKwkJZWhjaV9xdGRfZnJlZSAoZWhjaSwgbGFzdCk7CisJfQorCisJLyogcmVzdG9yZSBvcmlnaW5hbCBzdGF0ZTsgY2FsbGVyIG11c3QgdW5saW5rIG9yIHJlbGluayAqLworCXFoLT5xaF9zdGF0ZSA9IHN0YXRlOworCisJLyogYmUgc3VyZSB0aGUgaGFyZHdhcmUncyBkb25lIHdpdGggdGhlIHFoIGJlZm9yZSByZWZyZXNoaW5nCisJICogaXQgYWZ0ZXIgZmF1bHQgY2xlYW51cCwgb3IgcmVjb3ZlcmluZyBmcm9tIHNpbGljb24gd3JvbmdseQorCSAqIG92ZXJsYXlpbmcgdGhlIGR1bW15IHF0ZCAod2hpY2ggcmVkdWNlcyBETUEgY2hhdHRlcikuCisJICovCisJaWYgKHN0b3BwZWQgIT0gMCB8fCBxaC0+aHdfcXRkX25leHQgPT0gRUhDSV9MSVNUX0VORCkgeworCQlzd2l0Y2ggKHN0YXRlKSB7CisJCWNhc2UgUUhfU1RBVEVfSURMRToKKwkJCXFoX3JlZnJlc2goZWhjaSwgcWgpOworCQkJYnJlYWs7CisJCWNhc2UgUUhfU1RBVEVfTElOS0VEOgorCQkJLyogc2hvdWxkIGJlIHJhcmUgZm9yIHBlcmlvZGljIHRyYW5zZmVycywKKwkJCSAqIGV4Y2VwdCBtYXliZSBoaWdoIGJhbmR3aWR0aCAuLi4KKwkJCSAqLworCQkJaWYgKHFoLT5wZXJpb2QpIHsKKwkJCQlpbnRyX2Rlc2NoZWR1bGUgKGVoY2ksIHFoKTsKKwkJCQkodm9pZCkgcWhfc2NoZWR1bGUgKGVoY2ksIHFoKTsKKwkJCX0gZWxzZQorCQkJCXVubGlua19hc3luYyAoZWhjaSwgcWgpOworCQkJYnJlYWs7CisJCS8qIG90aGVyd2lzZSwgdW5saW5rIGFscmVhZHkgc3RhcnRlZCAqLworCQl9CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvLyBoaWdoIGJhbmR3aWR0aCBtdWx0aXBsaWVyLCBhcyBlbmNvZGVkIGluIGhpZ2hzcGVlZCBlbmRwb2ludCBkZXNjcmlwdG9ycworI2RlZmluZSBoYl9tdWx0KHdNYXhQYWNrZXRTaXplKSAoMSArICgoKHdNYXhQYWNrZXRTaXplKSA+PiAxMSkgJiAweDAzKSkKKy8vIC4uLiBhbmQgcGFja2V0IHNpemUsIGZvciBhbnkga2luZCBvZiBlbmRwb2ludCBkZXNjcmlwdG9yCisjZGVmaW5lIG1heF9wYWNrZXQod01heFBhY2tldFNpemUpICgod01heFBhY2tldFNpemUpICYgMHgwN2ZmKQorCisvKgorICogcmV2ZXJzZSBvZiBxaF91cmJfdHJhbnNhY3Rpb246ICBmcmVlIGEgbGlzdCBvZiBURHMuCisgKiB1c2VkIGZvciBjbGVhbnVwIGFmdGVyIGVycm9ycywgYmVmb3JlIEhDIHNlZXMgYW4gVVJCJ3MgVERzLgorICovCitzdGF0aWMgdm9pZCBxdGRfbGlzdF9mcmVlICgKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpLAorCXN0cnVjdCB1cmIJCSp1cmIsCisJc3RydWN0IGxpc3RfaGVhZAkqcXRkX2xpc3QKKykgeworCXN0cnVjdCBsaXN0X2hlYWQJKmVudHJ5LCAqdGVtcDsKKworCWxpc3RfZm9yX2VhY2hfc2FmZSAoZW50cnksIHRlbXAsIHF0ZF9saXN0KSB7CisJCXN0cnVjdCBlaGNpX3F0ZAkqcXRkOworCisJCXF0ZCA9IGxpc3RfZW50cnkgKGVudHJ5LCBzdHJ1Y3QgZWhjaV9xdGQsIHF0ZF9saXN0KTsKKwkJbGlzdF9kZWwgKCZxdGQtPnF0ZF9saXN0KTsKKwkJZWhjaV9xdGRfZnJlZSAoZWhjaSwgcXRkKTsKKwl9Cit9CisKKy8qCisgKiBjcmVhdGUgYSBsaXN0IG9mIGZpbGxlZCBxdGRzIGZvciB0aGlzIFVSQjsgd29uJ3QgbGluayBpbnRvIHFoLgorICovCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqCitxaF91cmJfdHJhbnNhY3Rpb24gKAorCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2ksCisJc3RydWN0IHVyYgkJKnVyYiwKKwlzdHJ1Y3QgbGlzdF9oZWFkCSpoZWFkLAorCWludAkJCWZsYWdzCispIHsKKwlzdHJ1Y3QgZWhjaV9xdGQJCSpxdGQsICpxdGRfcHJldjsKKwlkbWFfYWRkcl90CQlidWY7CisJaW50CQkJbGVuLCBtYXhwYWNrZXQ7CisJaW50CQkJaXNfaW5wdXQ7CisJdTMyCQkJdG9rZW47CisKKwkvKgorCSAqIFVSQnMgbWFwIHRvIHNlcXVlbmNlcyBvZiBRVERzOiAgb25lIGxvZ2ljYWwgdHJhbnNhY3Rpb24KKwkgKi8KKwlxdGQgPSBlaGNpX3F0ZF9hbGxvYyAoZWhjaSwgZmxhZ3MpOworCWlmICh1bmxpa2VseSAoIXF0ZCkpCisJCXJldHVybiBOVUxMOworCWxpc3RfYWRkX3RhaWwgKCZxdGQtPnF0ZF9saXN0LCBoZWFkKTsKKwlxdGQtPnVyYiA9IHVyYjsKKworCXRva2VuID0gUVREX1NUU19BQ1RJVkU7CisJdG9rZW4gfD0gKEVIQ0lfVFVORV9DRVJSIDw8IDEwKTsKKwkvKiBmb3Igc3BsaXQgdHJhbnNhY3Rpb25zLCBTcGxpdFhTdGF0ZSBpbml0aWFsaXplZCB0byB6ZXJvICovCisKKwlsZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJaXNfaW5wdXQgPSB1c2JfcGlwZWluICh1cmItPnBpcGUpOworCWlmICh1c2JfcGlwZWNvbnRyb2wgKHVyYi0+cGlwZSkpIHsKKwkJLyogU0VUVVAgcGlkICovCisJCXF0ZF9maWxsIChxdGQsIHVyYi0+c2V0dXBfZG1hLCBzaXplb2YgKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpLAorCQkJdG9rZW4gfCAoMiAvKiAic2V0dXAiICovIDw8IDgpLCA4KTsKKworCQkvKiAuLi4gYW5kIGFsd2F5cyBhdCBsZWFzdCBvbmUgbW9yZSBwaWQgKi8KKwkJdG9rZW4gXj0gUVREX1RPR0dMRTsKKwkJcXRkX3ByZXYgPSBxdGQ7CisJCXF0ZCA9IGVoY2lfcXRkX2FsbG9jIChlaGNpLCBmbGFncyk7CisJCWlmICh1bmxpa2VseSAoIXF0ZCkpCisJCQlnb3RvIGNsZWFudXA7CisJCXF0ZC0+dXJiID0gdXJiOworCQlxdGRfcHJldi0+aHdfbmV4dCA9IFFURF9ORVhUIChxdGQtPnF0ZF9kbWEpOworCQlsaXN0X2FkZF90YWlsICgmcXRkLT5xdGRfbGlzdCwgaGVhZCk7CisJfSAKKworCS8qCisJICogZGF0YSB0cmFuc2ZlciBzdGFnZTogIGJ1ZmZlciBzZXR1cAorCSAqLworCWlmIChsaWtlbHkgKGxlbiA+IDApKQorCQlidWYgPSB1cmItPnRyYW5zZmVyX2RtYTsKKwllbHNlCisJCWJ1ZiA9IDA7CisKKwkvKiBmb3IgemVybyBsZW5ndGggREFUQSBzdGFnZXMsIFNUQVRVUyBpcyBhbHdheXMgSU4gKi8KKwlpZiAoIWJ1ZiB8fCBpc19pbnB1dCkKKwkJdG9rZW4gfD0gKDEgLyogImluIiAqLyA8PCA4KTsKKwkvKiBlbHNlIGl0J3MgYWxyZWFkeSBpbml0dGVkIHRvICJvdXQiIHBpZCAoMCA8PCA4KSAqLworCisJbWF4cGFja2V0ID0gbWF4X3BhY2tldCh1c2JfbWF4cGFja2V0KHVyYi0+ZGV2LCB1cmItPnBpcGUsICFpc19pbnB1dCkpOworCisJLyoKKwkgKiBidWZmZXIgZ2V0cyB3cmFwcGVkIGluIG9uZSBvciBtb3JlIHF0ZHM7CisJICogbGFzdCBvbmUgbWF5IGJlICJzaG9ydCIgKGluY2x1ZGluZyB6ZXJvIGxlbikKKwkgKiBhbmQgbWF5IHNlcnZlIGFzIGEgY29udHJvbCBzdGF0dXMgYWNrCisJICovCisJZm9yICg7OykgeworCQlpbnQgdGhpc19xdGRfbGVuOworCisJCXRoaXNfcXRkX2xlbiA9IHF0ZF9maWxsIChxdGQsIGJ1ZiwgbGVuLCB0b2tlbiwgbWF4cGFja2V0KTsKKwkJbGVuIC09IHRoaXNfcXRkX2xlbjsKKwkJYnVmICs9IHRoaXNfcXRkX2xlbjsKKwkJaWYgKGlzX2lucHV0KQorCQkJcXRkLT5od19hbHRfbmV4dCA9IGVoY2ktPmFzeW5jLT5od19hbHRfbmV4dDsKKworCQkvKiBxaCBtYWtlcyBjb250cm9sIHBhY2tldHMgdXNlIHF0ZCB0b2dnbGU7IG1heWJlIHN3aXRjaCBpdCAqLworCQlpZiAoKG1heHBhY2tldCAmICh0aGlzX3F0ZF9sZW4gKyAobWF4cGFja2V0IC0gMSkpKSA9PSAwKQorCQkJdG9rZW4gXj0gUVREX1RPR0dMRTsKKworCQlpZiAobGlrZWx5IChsZW4gPD0gMCkpCisJCQlicmVhazsKKworCQlxdGRfcHJldiA9IHF0ZDsKKwkJcXRkID0gZWhjaV9xdGRfYWxsb2MgKGVoY2ksIGZsYWdzKTsKKwkJaWYgKHVubGlrZWx5ICghcXRkKSkKKwkJCWdvdG8gY2xlYW51cDsKKwkJcXRkLT51cmIgPSB1cmI7CisJCXF0ZF9wcmV2LT5od19uZXh0ID0gUVREX05FWFQgKHF0ZC0+cXRkX2RtYSk7CisJCWxpc3RfYWRkX3RhaWwgKCZxdGQtPnF0ZF9saXN0LCBoZWFkKTsKKwl9CisKKwkvKiB1bmxlc3MgdGhlIGJ1bGsvaW50ZXJydXB0IGNhbGxlciB3YW50cyBhIGNoYW5jZSB0byBjbGVhbgorCSAqIHVwIGFmdGVyIHNob3J0IHJlYWRzLCBoYyBzaG91bGQgYWR2YW5jZSBxaCBwYXN0IHRoaXMgdXJiCisJICovCisJaWYgKGxpa2VseSAoKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKSA9PSAwCisJCQkJfHwgdXNiX3BpcGVjb250cm9sICh1cmItPnBpcGUpKSkKKwkJcXRkLT5od19hbHRfbmV4dCA9IEVIQ0lfTElTVF9FTkQ7CisKKwkvKgorCSAqIGNvbnRyb2wgcmVxdWVzdHMgbWF5IG5lZWQgYSB0ZXJtaW5hdGluZyBkYXRhICJzdGF0dXMiIGFjazsKKwkgKiBidWxrIG9uZXMgbWF5IG5lZWQgYSB0ZXJtaW5hdGluZyBzaG9ydCBwYWNrZXQgKHplcm8gbGVuZ3RoKS4KKwkgKi8KKwlpZiAobGlrZWx5IChidWYgIT0gMCkpIHsKKwkJaW50CW9uZV9tb3JlID0gMDsKKworCQlpZiAodXNiX3BpcGVjb250cm9sICh1cmItPnBpcGUpKSB7CisJCQlvbmVfbW9yZSA9IDE7CisJCQl0b2tlbiBePSAweDAxMDA7CS8qICJpbiIgPC0tPiAib3V0IiAgKi8KKwkJCXRva2VuIHw9IFFURF9UT0dHTEU7CS8qIGZvcmNlIERBVEExICovCisJCX0gZWxzZSBpZiAodXNiX3BpcGVidWxrICh1cmItPnBpcGUpCisJCQkJJiYgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfWkVST19QQUNLRVQpCisJCQkJJiYgISh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggJSBtYXhwYWNrZXQpKSB7CisJCQlvbmVfbW9yZSA9IDE7CisJCX0KKwkJaWYgKG9uZV9tb3JlKSB7CisJCQlxdGRfcHJldiA9IHF0ZDsKKwkJCXF0ZCA9IGVoY2lfcXRkX2FsbG9jIChlaGNpLCBmbGFncyk7CisJCQlpZiAodW5saWtlbHkgKCFxdGQpKQorCQkJCWdvdG8gY2xlYW51cDsKKwkJCXF0ZC0+dXJiID0gdXJiOworCQkJcXRkX3ByZXYtPmh3X25leHQgPSBRVERfTkVYVCAocXRkLT5xdGRfZG1hKTsKKwkJCWxpc3RfYWRkX3RhaWwgKCZxdGQtPnF0ZF9saXN0LCBoZWFkKTsKKworCQkJLyogbmV2ZXIgYW55IGRhdGEgaW4gc3VjaCBwYWNrZXRzICovCisJCQlxdGRfZmlsbCAocXRkLCAwLCAwLCB0b2tlbiwgMCk7CisJCX0KKwl9CisKKwkvKiBieSBkZWZhdWx0LCBlbmFibGUgaW50ZXJydXB0IG9uIHVyYiBjb21wbGV0aW9uICovCisJaWYgKGxpa2VseSAoISh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX05PX0lOVEVSUlVQVCkpKQorCQlxdGQtPmh3X3Rva2VuIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFFURF9JT0MpOworCXJldHVybiBoZWFkOworCitjbGVhbnVwOgorCXF0ZF9saXN0X2ZyZWUgKGVoY2ksIHVyYiwgaGVhZCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8vIFdvdWxkIGJlIGJlc3QgdG8gY3JlYXRlIGFsbCBxaCdzIGZyb20gY29uZmlnIGRlc2NyaXB0b3JzLAorLy8gd2hlbiBlYWNoIGludGVyZmFjZS9hbHRzZXR0aW5nIGlzIGVzdGFibGlzaGVkLiAgVW5saW5rCisvLyBhbnkgcHJldmlvdXMgcWggYW5kIGNhbmNlbCBpdHMgdXJicyBmaXJzdDsgZW5kcG9pbnRzIGFyZQorLy8gaW1wbGljaXRseSByZXNldCB0aGVuIChkYXRhIHRvZ2dsZSB0b28pLgorLy8gVGhhdCdkIG1lYW4gdXBkYXRpbmcgaG93IHVzYmNvcmUgdGFsa3MgdG8gSENEcy4gKDIuNz8pCisKKworLyoKKyAqIEVhY2ggUUggaG9sZHMgYSBxdGQgbGlzdDsgYSBRSCBpcyB1c2VkIGZvciBldmVyeXRoaW5nIGV4Y2VwdCBpc28uCisgKgorICogRm9yIGludGVycnVwdCB1cmJzLCB0aGUgc2NoZWR1bGVyIG11c3Qgc2V0IHRoZSBtaWNyb2ZyYW1lIHNjaGVkdWxpbmcKKyAqIG1hc2socykgZWFjaCB0aW1lIHRoZSBRSCBnZXRzIHNjaGVkdWxlZC4gIEZvciBoaWdoc3BlZWQsIHRoYXQncworICoganVzdCBvbmUgbWljcm9mcmFtZSBpbiB0aGUgcy1tYXNrLiAgRm9yIHNwbGl0IGludGVycnVwdCB0cmFuc2FjdGlvbnMKKyAqIHRoZXJlIGFyZSBhZGRpdGlvbmFsIGNvbXBsaWNhdGlvbnM6IGMtbWFzaywgbWF5YmUgRlNUTnMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZWhjaV9xaCAqCitxaF9tYWtlICgKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpLAorCXN0cnVjdCB1cmIJCSp1cmIsCisJaW50CQkJZmxhZ3MKKykgeworCXN0cnVjdCBlaGNpX3FoCQkqcWggPSBlaGNpX3FoX2FsbG9jIChlaGNpLCBmbGFncyk7CisJdTMyCQkJaW5mbzEgPSAwLCBpbmZvMiA9IDA7CisJaW50CQkJaXNfaW5wdXQsIHR5cGU7CisJaW50CQkJbWF4cCA9IDA7CisKKwlpZiAoIXFoKQorCQlyZXR1cm4gcWg7CisKKwkvKgorCSAqIGluaXQgZW5kcG9pbnQvZGV2aWNlIGRhdGEgZm9yIHRoaXMgUUgKKwkgKi8KKwlpbmZvMSB8PSB1c2JfcGlwZWVuZHBvaW50ICh1cmItPnBpcGUpIDw8IDg7CisJaW5mbzEgfD0gdXNiX3BpcGVkZXZpY2UgKHVyYi0+cGlwZSkgPDwgMDsKKworCWlzX2lucHV0ID0gdXNiX3BpcGVpbiAodXJiLT5waXBlKTsKKwl0eXBlID0gdXNiX3BpcGV0eXBlICh1cmItPnBpcGUpOworCW1heHAgPSB1c2JfbWF4cGFja2V0ICh1cmItPmRldiwgdXJiLT5waXBlLCAhaXNfaW5wdXQpOworCisJLyogQ29tcHV0ZSBpbnRlcnJ1cHQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzIGp1c3Qgb25jZSwgYW5kIHNhdmUuCisJICogLSBhbGxvd2luZyBmb3IgaGlnaCBiYW5kd2lkdGgsIGhvdyBtYW55IG5zZWMvdWZyYW1lIGFyZSB1c2VkPworCSAqIC0gc3BsaXQgdHJhbnNhY3Rpb25zIG5lZWQgYSBzZWNvbmQgQ1NQTElUIHVmcmFtZTsgc2FtZSBxdWVzdGlvbgorCSAqIC0gc3BsaXRzIGFsc28gbmVlZCBhIHNjaGVkdWxlIGdhcCAoZm9yIGZ1bGwvbG93IHNwZWVkIEkvTykKKwkgKiAtIHFoIGhhcyBhIHBvbGxpbmcgaW50ZXJ2YWwKKwkgKgorCSAqIEZvciBjb250cm9sL2J1bGsgcmVxdWVzdHMsIHRoZSBIQyBvciBUVCBoYW5kbGVzIHRoZXNlLgorCSAqLworCWlmICh0eXBlID09IFBJUEVfSU5URVJSVVBUKSB7CisJCXFoLT51c2VjcyA9IHVzYl9jYWxjX2J1c190aW1lIChVU0JfU1BFRURfSElHSCwgaXNfaW5wdXQsIDAsCisJCQkJaGJfbXVsdCAobWF4cCkgKiBtYXhfcGFja2V0IChtYXhwKSk7CisJCXFoLT5zdGFydCA9IE5PX0ZSQU1FOworCisJCWlmICh1cmItPmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIHsKKwkJCXFoLT5jX3VzZWNzID0gMDsKKwkJCXFoLT5nYXBfdWYgPSAwOworCisJCQlxaC0+cGVyaW9kID0gdXJiLT5pbnRlcnZhbCA+PiAzOworCQkJaWYgKHFoLT5wZXJpb2QgPT0gMCAmJiB1cmItPmludGVydmFsICE9IDEpIHsKKwkJCQkvKiBOT1RFIGludGVydmFsIDIgb3IgNCB1ZnJhbWVzIGNvdWxkIHdvcmsuCisJCQkJICogQnV0IGludGVydmFsIDEgc2NoZWR1bGluZyBpcyBzaW1wbGVyLCBhbmQKKwkJCQkgKiBpbmNsdWRlcyBoaWdoIGJhbmR3aWR0aC4KKwkJCQkgKi8KKwkJCQlkYmcgKCJpbnRyIHBlcmlvZCAlZCB1ZnJhbWVzLCBOWUVUISIsCisJCQkJCQl1cmItPmludGVydmFsKTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBnYXAgaXMgZihGUy9MUyB0cmFuc2ZlciB0aW1lcykgKi8KKwkJCXFoLT5nYXBfdWYgPSAxICsgdXNiX2NhbGNfYnVzX3RpbWUgKHVyYi0+ZGV2LT5zcGVlZCwKKwkJCQkJaXNfaW5wdXQsIDAsIG1heHApIC8gKDEyNSAqIDEwMDApOworCisJCQkvKiBGSVhNRSB0aGlzIGp1c3QgYXBwcm94aW1hdGVzIFNQTElUL0NTUExJVCB0aW1lcyAqLworCQkJaWYgKGlzX2lucHV0KSB7CQkvLyBTUExJVCwgZ2FwLCBDU1BMSVQrREFUQQorCQkJCXFoLT5jX3VzZWNzID0gcWgtPnVzZWNzICsgSFNfVVNFQ1MgKDApOworCQkJCXFoLT51c2VjcyA9IEhTX1VTRUNTICgxKTsKKwkJCX0gZWxzZSB7CQkvLyBTUExJVCtEQVRBLCBnYXAsIENTUExJVAorCQkJCXFoLT51c2VjcyArPSBIU19VU0VDUyAoMSk7CisJCQkJcWgtPmNfdXNlY3MgPSBIU19VU0VDUyAoMCk7CisJCQl9CisKKwkJCXFoLT5wZXJpb2QgPSB1cmItPmludGVydmFsOworCQl9CisJfQorCisJLyogc3VwcG9ydCBmb3IgdHQgc2NoZWR1bGluZywgYW5kIGFjY2VzcyB0byB0b2dnbGVzICovCisJcWgtPmRldiA9IHVzYl9nZXRfZGV2ICh1cmItPmRldik7CisKKwkvKiB1c2luZyBUVD8gKi8KKwlzd2l0Y2ggKHVyYi0+ZGV2LT5zcGVlZCkgeworCWNhc2UgVVNCX1NQRUVEX0xPVzoKKwkJaW5mbzEgfD0gKDEgPDwgMTIpOwkvKiBFUFMgImxvdyIgKi8KKwkJLyogRkFMTCBUSFJPVUdIICovCisKKwljYXNlIFVTQl9TUEVFRF9GVUxMOgorCQkvKiBFUFMgMCBtZWFucyAiZnVsbCIgKi8KKwkJaWYgKHR5cGUgIT0gUElQRV9JTlRFUlJVUFQpCisJCQlpbmZvMSB8PSAoRUhDSV9UVU5FX1JMX1RUIDw8IDI4KTsKKwkJaWYgKHR5cGUgPT0gUElQRV9DT05UUk9MKSB7CisJCQlpbmZvMSB8PSAoMSA8PCAyNyk7CS8qIGZvciBUVCAqLworCQkJaW5mbzEgfD0gMSA8PCAxNDsJLyogdG9nZ2xlIGZyb20gcXRkICovCisJCX0KKwkJaW5mbzEgfD0gbWF4cCA8PCAxNjsKKworCQlpbmZvMiB8PSAoRUhDSV9UVU5FX01VTFRfVFQgPDwgMzApOworCQlpbmZvMiB8PSB1cmItPmRldi0+dHRwb3J0IDw8IDIzOworCisJCS8qIHNldCB0aGUgYWRkcmVzcyBvZiB0aGUgVFQ7IGZvciBUREkncyBpbnRlZ3JhdGVkCisJCSAqIHJvb3QgaHViIHR0LCBsZWF2ZSBpdCB6ZXJvZWQuCisJCSAqLworCQlpZiAoIWVoY2lfaXNfVERJKGVoY2kpCisJCQkJfHwgdXJiLT5kZXYtPnR0LT5odWIgIT0KKwkJCQkJZWhjaV90b19oY2QoZWhjaSktPnNlbGYucm9vdF9odWIpCisJCQlpbmZvMiB8PSB1cmItPmRldi0+dHQtPmh1Yi0+ZGV2bnVtIDw8IDE2OworCisJCS8qIE5PVEU6ICBpZiAoUElQRV9JTlRFUlJVUFQpIHsgc2NoZWR1bGVyIHNldHMgYy1tYXNrIH0gKi8KKworCQlicmVhazsKKworCWNhc2UgVVNCX1NQRUVEX0hJR0g6CQkvKiBubyBUVCBpbnZvbHZlZCAqLworCQlpbmZvMSB8PSAoMiA8PCAxMik7CS8qIEVQUyAiaGlnaCIgKi8KKwkJaWYgKHR5cGUgPT0gUElQRV9DT05UUk9MKSB7CisJCQlpbmZvMSB8PSAoRUhDSV9UVU5FX1JMX0hTIDw8IDI4KTsKKwkJCWluZm8xIHw9IDY0IDw8IDE2OwkvKiB1c2IyIGZpeGVkIG1heHBhY2tldCAqLworCQkJaW5mbzEgfD0gMSA8PCAxNDsJLyogdG9nZ2xlIGZyb20gcXRkICovCisJCQlpbmZvMiB8PSAoRUhDSV9UVU5FX01VTFRfSFMgPDwgMzApOworCQl9IGVsc2UgaWYgKHR5cGUgPT0gUElQRV9CVUxLKSB7CisJCQlpbmZvMSB8PSAoRUhDSV9UVU5FX1JMX0hTIDw8IDI4KTsKKwkJCWluZm8xIHw9IDUxMiA8PCAxNjsJLyogdXNiMiBmaXhlZCBtYXhwYWNrZXQgKi8KKwkJCWluZm8yIHw9IChFSENJX1RVTkVfTVVMVF9IUyA8PCAzMCk7CisJCX0gZWxzZSB7CQkvKiBQSVBFX0lOVEVSUlVQVCAqLworCQkJaW5mbzEgfD0gbWF4X3BhY2tldCAobWF4cCkgPDwgMTY7CisJCQlpbmZvMiB8PSBoYl9tdWx0IChtYXhwKSA8PCAzMDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorIAkJZGJnICgiYm9ndXMgZGV2ICVwIHNwZWVkICVkIiwgdXJiLT5kZXYsIHVyYi0+ZGV2LT5zcGVlZCk7Citkb25lOgorCQlxaF9wdXQgKHFoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogTk9URTogIGlmIChQSVBFX0lOVEVSUlVQVCkgeyBzY2hlZHVsZXIgc2V0cyBzLW1hc2sgfSAqLworCisJLyogaW5pdCBhcyBsaXZlLCB0b2dnbGUgY2xlYXIsIGFkdmFuY2UgdG8gZHVtbXkgKi8KKwlxaC0+cWhfc3RhdGUgPSBRSF9TVEFURV9JRExFOworCXFoLT5od19pbmZvMSA9IGNwdV90b19sZTMyIChpbmZvMSk7CisJcWgtPmh3X2luZm8yID0gY3B1X3RvX2xlMzIgKGluZm8yKTsKKwl1c2Jfc2V0dG9nZ2xlICh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKSwgIWlzX2lucHV0LCAxKTsKKwlxaF9yZWZyZXNoIChlaGNpLCBxaCk7CisJcmV0dXJuIHFoOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBtb3ZlIHFoIChhbmQgaXRzIHF0ZHMpIG9udG8gYXN5bmMgcXVldWU7IG1heWJlIGVuYWJsZSBxdWV1ZS4gICovCisKK3N0YXRpYyB2b2lkIHFoX2xpbmtfYXN5bmMgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfcWggKnFoKQoreworCV9fbGUzMgkJZG1hID0gUUhfTkVYVCAocWgtPnFoX2RtYSk7CisJc3RydWN0IGVoY2lfcWgJKmhlYWQ7CisKKwkvKiAocmUpc3RhcnQgdGhlIGFzeW5jIHNjaGVkdWxlPyAqLworCWhlYWQgPSBlaGNpLT5hc3luYzsKKwl0aW1lcl9hY3Rpb25fZG9uZSAoZWhjaSwgVElNRVJfQVNZTkNfT0ZGKTsKKwlpZiAoIWhlYWQtPnFoX25leHQucWgpIHsKKwkJdTMyCWNtZCA9IHJlYWRsICgmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisKKwkJaWYgKCEoY21kICYgQ01EX0FTRSkpIHsKKwkJCS8qIGluIGNhc2UgYSBjbGVhciBvZiBDTURfQVNFIGRpZG4ndCB0YWtlIHlldCAqLworCQkJKHZvaWQpIGhhbmRzaGFrZSAoJmVoY2ktPnJlZ3MtPnN0YXR1cywgU1RTX0FTUywgMCwgMTUwKTsKKwkJCWNtZCB8PSBDTURfQVNFIHwgQ01EX1JVTjsKKwkJCXdyaXRlbCAoY21kLCAmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisJCQllaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOworCQkJLyogcG9zdGVkIHdyaXRlIG5lZWQgbm90IGJlIGtub3duIHRvIEhDIHlldCAuLi4gKi8KKwkJfQorCX0KKworCS8qIGNsZWFyIGhhbHQgYW5kL29yIHRvZ2dsZTsgYW5kIG1heWJlIHJlY292ZXIgZnJvbSBzaWxpY29uIHF1aXJrICovCisJaWYgKHFoLT5xaF9zdGF0ZSA9PSBRSF9TVEFURV9JRExFKQorCQlxaF9yZWZyZXNoIChlaGNpLCBxaCk7CisKKwkvKiBzcGxpY2UgcmlnaHQgYWZ0ZXIgc3RhcnQgKi8KKwlxaC0+cWhfbmV4dCA9IGhlYWQtPnFoX25leHQ7CisJcWgtPmh3X25leHQgPSBoZWFkLT5od19uZXh0OworCXdtYiAoKTsKKworCWhlYWQtPnFoX25leHQucWggPSBxaDsKKwloZWFkLT5od19uZXh0ID0gZG1hOworCisJcWgtPnFoX3N0YXRlID0gUUhfU1RBVEVfTElOS0VEOworCS8qIHF0ZCBjb21wbGV0aW9ucyByZXBvcnRlZCBsYXRlciBieSBpbnRlcnJ1cHQgKi8KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZQlRSF9BRERSX01BU0sJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDdmKQorCisvKgorICogRm9yIGNvbnRyb2wvYnVsay9pbnRlcnJ1cHQsIHJldHVybiBRSCB3aXRoIHRoZXNlIFREcyBhcHBlbmRlZC4KKyAqIEFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgdGhlIFFIIGlmIG5lY2Vzc2FyeS4KKyAqIFJldHVybnMgbnVsbCBpZiBpdCBjYW4ndCBhbGxvY2F0ZSBhIFFIIGl0IG5lZWRzIHRvLgorICogSWYgdGhlIFFIIGhhcyBURHMgKHVyYnMpIGFscmVhZHksIHRoYXQncyBncmVhdC4KKyAqLworc3RhdGljIHN0cnVjdCBlaGNpX3FoICpxaF9hcHBlbmRfdGRzICgKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpLAorCXN0cnVjdCB1cmIJCSp1cmIsCisJc3RydWN0IGxpc3RfaGVhZAkqcXRkX2xpc3QsCisJaW50CQkJZXBudW0sCisJdm9pZAkJCSoqcHRyCispCit7CisJc3RydWN0IGVoY2lfcWgJCSpxaCA9IE5VTEw7CisKKwlxaCA9IChzdHJ1Y3QgZWhjaV9xaCAqKSAqcHRyOworCWlmICh1bmxpa2VseSAocWggPT0gTlVMTCkpIHsKKwkJLyogY2FuJ3Qgc2xlZXAgaGVyZSwgd2UgaGF2ZSBlaGNpLT5sb2NrLi4uICovCisJCXFoID0gcWhfbWFrZSAoZWhjaSwgdXJiLCBHRlBfQVRPTUlDKTsKKwkJKnB0ciA9IHFoOworCX0KKwlpZiAobGlrZWx5IChxaCAhPSBOVUxMKSkgeworCQlzdHJ1Y3QgZWhjaV9xdGQJKnF0ZDsKKworCQlpZiAodW5saWtlbHkgKGxpc3RfZW1wdHkgKHF0ZF9saXN0KSkpCisJCQlxdGQgPSBOVUxMOworCQllbHNlCisJCQlxdGQgPSBsaXN0X2VudHJ5IChxdGRfbGlzdC0+bmV4dCwgc3RydWN0IGVoY2lfcXRkLAorCQkJCQlxdGRfbGlzdCk7CisKKwkJLyogY29udHJvbCBxaCBtYXkgbmVlZCBwYXRjaGluZyAuLi4gKi8KKwkJaWYgKHVubGlrZWx5IChlcG51bSA9PSAwKSkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiB1c2JfcmVzZXRfZGV2aWNlKCkgYnJpZWZseSByZXZlcnRzIHRvIGFkZHJlc3MgMCAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzYl9waXBlZGV2aWNlICh1cmItPnBpcGUpID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFoLT5od19pbmZvMSAmPSB+UUhfQUREUl9NQVNLOworCQl9CisKKwkJLyoganVzdCBvbmUgd2F5IHRvIHF1ZXVlIHJlcXVlc3RzOiBzd2FwIHdpdGggdGhlIGR1bW15IHF0ZC4KKwkJICogb25seSBoYyBvciBxaF9yZWZyZXNoKCkgZXZlciBtb2RpZnkgdGhlIG92ZXJsYXkuCisJCSAqLworCQlpZiAobGlrZWx5IChxdGQgIT0gTlVMTCkpIHsKKwkJCXN0cnVjdCBlaGNpX3F0ZAkJKmR1bW15OworCQkJZG1hX2FkZHJfdAkJZG1hOworCQkJX19sZTMyCQkJdG9rZW47CisKKwkJCS8qIHRvIGF2b2lkIHJhY2luZyB0aGUgSEMsIHVzZSB0aGUgZHVtbXkgdGQgaW5zdGVhZCBvZgorCQkJICogdGhlIGZpcnN0IHRkIG9mIG91ciBsaXN0IChiZWNvbWVzIG5ldyBkdW1teSkuICBib3RoCisJCQkgKiB0ZHMgc3RheSBkZWFjdGl2YXRlZCB1bnRpbCB3ZSdyZSBkb25lLCB3aGVuIHRoZQorCQkJICogSEMgaXMgYWxsb3dlZCB0byBmZXRjaCB0aGUgb2xkIGR1bW15ICg0LjEwLjIpLgorCQkJICovCisJCQl0b2tlbiA9IHF0ZC0+aHdfdG9rZW47CisJCQlxdGQtPmh3X3Rva2VuID0gSEFMVF9CSVQ7CisJCQl3bWIgKCk7CisJCQlkdW1teSA9IHFoLT5kdW1teTsKKworCQkJZG1hID0gZHVtbXktPnF0ZF9kbWE7CisJCQkqZHVtbXkgPSAqcXRkOworCQkJZHVtbXktPnF0ZF9kbWEgPSBkbWE7CisKKwkJCWxpc3RfZGVsICgmcXRkLT5xdGRfbGlzdCk7CisJCQlsaXN0X2FkZCAoJmR1bW15LT5xdGRfbGlzdCwgcXRkX2xpc3QpOworCQkJX19saXN0X3NwbGljZSAocXRkX2xpc3QsIHFoLT5xdGRfbGlzdC5wcmV2KTsKKworCQkJZWhjaV9xdGRfaW5pdCAocXRkLCBxdGQtPnF0ZF9kbWEpOworCQkJcWgtPmR1bW15ID0gcXRkOworCisJCQkvKiBoYyBtdXN0IHNlZSB0aGUgbmV3IGR1bW15IGF0IGxpc3QgZW5kICovCisJCQlkbWEgPSBxdGQtPnF0ZF9kbWE7CisJCQlxdGQgPSBsaXN0X2VudHJ5IChxaC0+cXRkX2xpc3QucHJldiwKKwkJCQkJc3RydWN0IGVoY2lfcXRkLCBxdGRfbGlzdCk7CisJCQlxdGQtPmh3X25leHQgPSBRVERfTkVYVCAoZG1hKTsKKworCQkJLyogbGV0IHRoZSBoYyBwcm9jZXNzIHRoZXNlIG5leHQgcXRkcyAqLworCQkJd21iICgpOworCQkJZHVtbXktPmh3X3Rva2VuID0gdG9rZW47CisKKwkJCXVyYi0+aGNwcml2ID0gcWhfZ2V0IChxaCk7CisJCX0KKwl9CisJcmV0dXJuIHFoOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50CitzdWJtaXRfYXN5bmMgKAorCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2ksCisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCwKKwlzdHJ1Y3QgdXJiCQkqdXJiLAorCXN0cnVjdCBsaXN0X2hlYWQJKnF0ZF9saXN0LAorCWludAkJCW1lbV9mbGFncworKSB7CisJc3RydWN0IGVoY2lfcXRkCQkqcXRkOworCWludAkJCWVwbnVtOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXN0cnVjdCBlaGNpX3FoCQkqcWggPSBOVUxMOworCisJcXRkID0gbGlzdF9lbnRyeSAocXRkX2xpc3QtPm5leHQsIHN0cnVjdCBlaGNpX3F0ZCwgcXRkX2xpc3QpOworCWVwbnVtID0gZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzczsKKworI2lmZGVmIEVIQ0lfVVJCX1RSQUNFCisJZWhjaV9kYmcgKGVoY2ksCisJCSIlcyAlcyB1cmIgJXAgZXAlZCVzIGxlbiAlZCwgcXRkICVwIFtxaCAlcF1cbiIsCisJCV9fRlVOQ1RJT05fXywgdXJiLT5kZXYtPmRldnBhdGgsIHVyYiwKKwkJZXBudW0gJiAweDBmLCAoZXBudW0gJiBVU0JfRElSX0lOKSA/ICJpbiIgOiAib3V0IiwKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQlxdGQsIGVwLT5oY3ByaXYpOworI2VuZGlmCisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlxaCA9IHFoX2FwcGVuZF90ZHMgKGVoY2ksIHVyYiwgcXRkX2xpc3QsIGVwbnVtLCAmZXAtPmhjcHJpdik7CisKKwkvKiBDb250cm9sL2J1bGsgb3BlcmF0aW9ucyB0aHJvdWdoIFRUcyBkb24ndCBuZWVkIHNjaGVkdWxpbmcsCisJICogdGhlIEhDIGFuZCBUVCBoYW5kbGUgaXQgd2hlbiB0aGUgVFQgaGFzIGEgYnVmZmVyIHJlYWR5LgorCSAqLworCWlmIChsaWtlbHkgKHFoICE9IE5VTEwpKSB7CisJCWlmIChsaWtlbHkgKHFoLT5xaF9zdGF0ZSA9PSBRSF9TVEFURV9JRExFKSkKKwkJCXFoX2xpbmtfYXN5bmMgKGVoY2ksIHFoX2dldCAocWgpKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlpZiAodW5saWtlbHkgKHFoID09IE5VTEwpKSB7CisJCXF0ZF9saXN0X2ZyZWUgKGVoY2ksIHVyYiwgcXRkX2xpc3QpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHRoZSBhc3luYyBxaCBmb3IgdGhlIHF0ZHMgYmVpbmcgcmVjbGFpbWVkIGFyZSBub3cgdW5saW5rZWQgZnJvbSB0aGUgSEMgKi8KKworc3RhdGljIHZvaWQgZW5kX3VubGlua19hc3luYyAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZWhjaV9xaAkJKnFoID0gZWhjaS0+cmVjbGFpbTsKKwlzdHJ1Y3QgZWhjaV9xaAkJKm5leHQ7CisKKwl0aW1lcl9hY3Rpb25fZG9uZSAoZWhjaSwgVElNRVJfSUFBX1dBVENIRE9HKTsKKworCS8vIHFoLT5od19uZXh0ID0gY3B1X3RvX2xlMzIgKHFoLT5xaF9kbWEpOworCXFoLT5xaF9zdGF0ZSA9IFFIX1NUQVRFX0lETEU7CisJcWgtPnFoX25leHQucWggPSBOVUxMOworCXFoX3B1dCAocWgpOwkJCS8vIHJlZmNvdW50IGZyb20gcmVjbGFpbSAKKworCS8qIG90aGVyIHVubGluayhzKSBtYXkgYmUgcGVuZGluZyAoaW4gUUhfU1RBVEVfVU5MSU5LX1dBSVQpICovCisJbmV4dCA9IHFoLT5yZWNsYWltOworCWVoY2ktPnJlY2xhaW0gPSBuZXh0OworCWVoY2ktPnJlY2xhaW1fcmVhZHkgPSAwOworCXFoLT5yZWNsYWltID0gTlVMTDsKKworCXFoX2NvbXBsZXRpb25zIChlaGNpLCBxaCwgcmVncyk7CisKKwlpZiAoIWxpc3RfZW1wdHkgKCZxaC0+cXRkX2xpc3QpCisJCQkmJiBIQ19JU19SVU5OSU5HIChlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpKQorCQlxaF9saW5rX2FzeW5jIChlaGNpLCBxaCk7CisJZWxzZSB7CisJCXFoX3B1dCAocWgpOwkJLy8gcmVmY291bnQgZnJvbSBhc3luYyBsaXN0CisKKwkJLyogaXQncyBub3QgZnJlZSB0byB0dXJuIHRoZSBhc3luYyBzY2hlZHVsZSBvbi9vZmY7IGxlYXZlIGl0CisJCSAqIGFjdGl2ZSBidXQgaWRsZSBmb3IgYSB3aGlsZSBvbmNlIGl0IGVtcHRpZXMuCisJCSAqLworCQlpZiAoSENfSVNfUlVOTklORyAoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlKQorCQkJCSYmIGVoY2ktPmFzeW5jLT5xaF9uZXh0LnFoID09IE5VTEwpCisJCQl0aW1lcl9hY3Rpb24gKGVoY2ksIFRJTUVSX0FTWU5DX09GRik7CisJfQorCisJaWYgKG5leHQpIHsKKwkJZWhjaS0+cmVjbGFpbSA9IE5VTEw7CisJCXN0YXJ0X3VubGlua19hc3luYyAoZWhjaSwgbmV4dCk7CisJfQorfQorCisvKiBtYWtlcyBzdXJlIHRoZSBhc3luYyBxaCB3aWxsIGJlY29tZSBpZGxlICovCisvKiBjYWxsZXIgbXVzdCBvd24gZWhjaS0+bG9jayAqLworCitzdGF0aWMgdm9pZCBzdGFydF91bmxpbmtfYXN5bmMgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfcWggKnFoKQoreworCWludAkJY21kID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKwlzdHJ1Y3QgZWhjaV9xaAkqcHJldjsKKworI2lmZGVmIERFQlVHCisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZlaGNpLT5sb2NrKTsKKwlpZiAoZWhjaS0+cmVjbGFpbQorCQkJfHwgKHFoLT5xaF9zdGF0ZSAhPSBRSF9TVEFURV9MSU5LRUQKKwkJCQkmJiBxaC0+cWhfc3RhdGUgIT0gUUhfU1RBVEVfVU5MSU5LX1dBSVQpCisJCQkpCisJCUJVRyAoKTsKKyNlbmRpZgorCisJLyogc3RvcCBhc3luYyBzY2hlZHVsZSByaWdodCBub3c/ICovCisJaWYgKHVubGlrZWx5IChxaCA9PSBlaGNpLT5hc3luYykpIHsKKwkJLyogY2FuJ3QgZ2V0IGhlcmUgd2l0aG91dCBTVFNfQVNTIHNldCAqLworCQlpZiAoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlICE9IEhDX1NUQVRFX0hBTFQpIHsKKwkJCXdyaXRlbCAoY21kICYgfkNNRF9BU0UsICZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKwkJCXdtYiAoKTsKKwkJCS8vIGhhbmRzaGFrZSBsYXRlciwgaWYgd2UgbmVlZCB0bworCQl9CisJCXRpbWVyX2FjdGlvbl9kb25lIChlaGNpLCBUSU1FUl9BU1lOQ19PRkYpOworCQlyZXR1cm47CisJfSAKKworCXFoLT5xaF9zdGF0ZSA9IFFIX1NUQVRFX1VOTElOSzsKKwllaGNpLT5yZWNsYWltID0gcWggPSBxaF9nZXQgKHFoKTsKKworCXByZXYgPSBlaGNpLT5hc3luYzsKKwl3aGlsZSAocHJldi0+cWhfbmV4dC5xaCAhPSBxaCkKKwkJcHJldiA9IHByZXYtPnFoX25leHQucWg7CisKKwlwcmV2LT5od19uZXh0ID0gcWgtPmh3X25leHQ7CisJcHJldi0+cWhfbmV4dCA9IHFoLT5xaF9uZXh0OworCXdtYiAoKTsKKworCWlmICh1bmxpa2VseSAoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlID09IEhDX1NUQVRFX0hBTFQpKSB7CisJCS8qIGlmICh1bmxpa2VseSAocWgtPnJlY2xhaW0gIT0gMCkpCisJCSAqIAl0aGlzIHdpbGwgcmVjdXJzZSwgcHJvYmFibHkgbm90IG11Y2gKKwkJICovCisJCWVuZF91bmxpbmtfYXN5bmMgKGVoY2ksIE5VTEwpOworCQlyZXR1cm47CisJfQorCisJZWhjaS0+cmVjbGFpbV9yZWFkeSA9IDA7CisJY21kIHw9IENNRF9JQUFEOworCXdyaXRlbCAoY21kLCAmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisJKHZvaWQpIHJlYWRsICgmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisJdGltZXJfYWN0aW9uIChlaGNpLCBUSU1FUl9JQUFfV0FUQ0hET0cpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZAorc2Nhbl9hc3luYyAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZWhjaV9xaAkJKnFoOworCWVudW0gZWhjaV90aW1lcl9hY3Rpb24JYWN0aW9uID0gVElNRVJfSU9fV0FUQ0hET0c7CisKKwlpZiAoISsrKGVoY2ktPnN0YW1wKSkKKwkJZWhjaS0+c3RhbXArKzsKKwl0aW1lcl9hY3Rpb25fZG9uZSAoZWhjaSwgVElNRVJfQVNZTkNfU0hSSU5LKTsKK3Jlc2NhbjoKKwlxaCA9IGVoY2ktPmFzeW5jLT5xaF9uZXh0LnFoOworCWlmIChsaWtlbHkgKHFoICE9IE5VTEwpKSB7CisJCWRvIHsKKwkJCS8qIGNsZWFuIGFueSBmaW5pc2hlZCB3b3JrIGZvciB0aGlzIHFoICovCisJCQlpZiAoIWxpc3RfZW1wdHkgKCZxaC0+cXRkX2xpc3QpCisJCQkJCSYmIHFoLT5zdGFtcCAhPSBlaGNpLT5zdGFtcCkgeworCQkJCWludCB0ZW1wOworCisJCQkJLyogdW5saW5rcyBjb3VsZCBoYXBwZW4gaGVyZTsgY29tcGxldGlvbgorCQkJCSAqIHJlcG9ydGluZyBkcm9wcyB0aGUgbG9jay4gIHJlc2NhbiB1c2luZworCQkJCSAqIHRoZSBsYXRlc3Qgc2NoZWR1bGUsIGJ1dCBkb24ndCByZXNjYW4KKwkJCQkgKiBxaHMgd2UgYWxyZWFkeSBmaW5pc2hlZCAobm8gbG9vcGluZykuCisJCQkJICovCisJCQkJcWggPSBxaF9nZXQgKHFoKTsKKwkJCQlxaC0+c3RhbXAgPSBlaGNpLT5zdGFtcDsKKwkJCQl0ZW1wID0gcWhfY29tcGxldGlvbnMgKGVoY2ksIHFoLCByZWdzKTsKKwkJCQlxaF9wdXQgKHFoKTsKKwkJCQlpZiAodGVtcCAhPSAwKSB7CisJCQkJCWdvdG8gcmVzY2FuOworCQkJCX0KKwkJCX0KKworCQkJLyogdW5saW5rIGlkbGUgZW50cmllcywgcmVkdWNpbmcgSEMgUENJIHVzYWdlIGFzIHdlbGwKKwkJCSAqIGFzIEhDRCBzY2hlZHVsZS1zY2FubmluZyBjb3N0cy4gIGRlbGF5IGZvciBhbnkgcWgKKwkJCSAqIHdlIGp1c3Qgc2Nhbm5lZCwgdGhlcmUncyBhIG5vdC11bnVzdWFsIGNhc2UgdGhhdCBpdAorCQkJICogZG9lc24ndCBzdGF5IGlkbGUgZm9yIGxvbmcuCisJCQkgKiAocGx1cywgYXZvaWRzIHNvbWUga2luZCBvZiByZS1hY3RpdmF0aW9uIHJhY2UuKQorCQkJICovCisJCQlpZiAobGlzdF9lbXB0eSAoJnFoLT5xdGRfbGlzdCkpIHsKKwkJCQlpZiAocWgtPnN0YW1wID09IGVoY2ktPnN0YW1wKQorCQkJCQlhY3Rpb24gPSBUSU1FUl9BU1lOQ19TSFJJTks7CisJCQkJZWxzZSBpZiAoIWVoY2ktPnJlY2xhaW0KKwkJCQkJICAgICYmIHFoLT5xaF9zdGF0ZSA9PSBRSF9TVEFURV9MSU5LRUQpCisJCQkJCXN0YXJ0X3VubGlua19hc3luYyAoZWhjaSwgcWgpOworCQkJfQorCisJCQlxaCA9IHFoLT5xaF9uZXh0LnFoOworCQl9IHdoaWxlIChxaCk7CisJfQorCWlmIChhY3Rpb24gPT0gVElNRVJfQVNZTkNfU0hSSU5LKQorCQl0aW1lcl9hY3Rpb24gKGVoY2ksIFRJTUVSX0FTWU5DX1NIUklOSyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2Yzg2MzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYwpAQCAtMCwwICsxLDE5OTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNCBieSBEYXZpZCBCcm93bmVsbAorICogQ29weXJpZ2h0IChjKSAyMDAzIE1pY2hhbCBTb2prYSwgZm9yIGhpZ2gtc3BlZWQgaXNvIHRyYW5zZmVycworICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKiB0aGlzIGZpbGUgaXMgcGFydCBvZiBlaGNpLWhjZC5jICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBFSENJIHNjaGVkdWxlZCB0cmFuc2FjdGlvbiBzdXBwb3J0OiAgaW50ZXJydXB0LCBpc28sIHNwbGl0IGlzbworICogVGhlc2UgYXJlIGNhbGxlZCAicGVyaW9kaWMiIHRyYW5zYWN0aW9ucyBpbiB0aGUgRUhDSSBzcGVjLgorICoKKyAqIE5vdGUgdGhhdCBmb3IgaW50ZXJydXB0IHRyYW5zZmVycywgdGhlIFFIL1FURCBtYW5pcHVsYXRpb24gaXMgc2hhcmVkCisgKiB3aXRoIHRoZSAiYXN5bmNocm9ub3VzIiB0cmFuc2FjdGlvbiBzdXBwb3J0IChjb250cm9sL2J1bGsgdHJhbnNmZXJzKS4KKyAqIFRoZSBvbmx5IHJlYWwgZGlmZmVyZW5jZSBpcyBpbiBob3cgaW50ZXJydXB0IHRyYW5zZmVycyBhcmUgc2NoZWR1bGVkLgorICoKKyAqIEZvciBJU08sIHdlIG1ha2UgYW4gImlzb19zdHJlYW0iIGhlYWQgdG8gc2VydmUgdGhlIHNhbWUgcm9sZSBhcyBhIFFILgorICogSXQga2VlcHMgdHJhY2sgb2YgZXZlcnkgSVREIChvciBTSVREKSB0aGF0J3MgbGlua2VkLCBhbmQgaG9sZHMgZW5vdWdoCisgKiBwcmUtY2FsY3VsYXRlZCBzY2hlZHVsZSBkYXRhIHRvIG1ha2UgYXBwZW5kaW5nIHRvIHRoZSBxdWV1ZSBiZSBxdWljay4KKyAqLworCitzdGF0aWMgaW50IGVoY2lfZ2V0X2ZyYW1lIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIHBlcmlvZGljX25leHRfc2hhZG93IC0gcmV0dXJuICJuZXh0IiBwb2ludGVyIG9uIHNoYWRvdyBsaXN0CisgKiBAcGVyaW9kaWM6IGhvc3QgcG9pbnRlciB0byBxaC9pdGQvc2l0ZAorICogQHRhZzogaGFyZHdhcmUgdGFnIGZvciB0eXBlIG9mIHRoaXMgcmVjb3JkCisgKi8KK3N0YXRpYyB1bmlvbiBlaGNpX3NoYWRvdyAqCitwZXJpb2RpY19uZXh0X3NoYWRvdyAodW5pb24gZWhjaV9zaGFkb3cgKnBlcmlvZGljLCBfX2xlMzIgdGFnKQoreworCXN3aXRjaCAodGFnKSB7CisJY2FzZSBRX1RZUEVfUUg6CisJCXJldHVybiAmcGVyaW9kaWMtPnFoLT5xaF9uZXh0OworCWNhc2UgUV9UWVBFX0ZTVE46CisJCXJldHVybiAmcGVyaW9kaWMtPmZzdG4tPmZzdG5fbmV4dDsKKwljYXNlIFFfVFlQRV9JVEQ6CisJCXJldHVybiAmcGVyaW9kaWMtPml0ZC0+aXRkX25leHQ7CisJLy8gY2FzZSBRX1RZUEVfU0lURDoKKwlkZWZhdWx0OgorCQlyZXR1cm4gJnBlcmlvZGljLT5zaXRkLT5zaXRkX25leHQ7CisJfQorfQorCisvKiBjYWxsZXIgbXVzdCBob2xkIGVoY2ktPmxvY2sgKi8KK3N0YXRpYyB2b2lkIHBlcmlvZGljX3VubGluayAoc3RydWN0IGVoY2lfaGNkICplaGNpLCB1bnNpZ25lZCBmcmFtZSwgdm9pZCAqcHRyKQoreworCXVuaW9uIGVoY2lfc2hhZG93CSpwcmV2X3AgPSAmZWhjaS0+cHNoYWRvdyBbZnJhbWVdOworCV9fbGUzMgkJCSpod19wID0gJmVoY2ktPnBlcmlvZGljIFtmcmFtZV07CisJdW5pb24gZWhjaV9zaGFkb3cJaGVyZSA9ICpwcmV2X3A7CisKKwkvKiBmaW5kIHByZWRlY2Vzc29yIG9mICJwdHIiOyBodyBhbmQgc2hhZG93IGxpc3RzIGFyZSBpbiBzeW5jICovCisJd2hpbGUgKGhlcmUucHRyICYmIGhlcmUucHRyICE9IHB0cikgeworCQlwcmV2X3AgPSBwZXJpb2RpY19uZXh0X3NoYWRvdyAocHJldl9wLCBRX05FWFRfVFlQRSAoKmh3X3ApKTsKKwkJaHdfcCA9IGhlcmUuaHdfbmV4dDsKKwkJaGVyZSA9ICpwcmV2X3A7CisJfQorCS8qIGFuIGludGVycnVwdCBlbnRyeSAoYXQgbGlzdCBlbmQpIGNvdWxkIGhhdmUgYmVlbiBzaGFyZWQgKi8KKwlpZiAoIWhlcmUucHRyKQorCQlyZXR1cm47CisKKwkvKiB1cGRhdGUgc2hhZG93IGFuZCBoYXJkd2FyZSBsaXN0cyAuLi4gdGhlIG9sZCAibmV4dCIgcG9pbnRlcnMKKwkgKiBmcm9tIHB0ciBtYXkgc3RpbGwgYmUgaW4gdXNlLCB0aGUgY2FsbGVyIHVwZGF0ZXMgdGhlbS4KKwkgKi8KKwkqcHJldl9wID0gKnBlcmlvZGljX25leHRfc2hhZG93ICgmaGVyZSwgUV9ORVhUX1RZUEUgKCpod19wKSk7CisJKmh3X3AgPSAqaGVyZS5od19uZXh0OworfQorCisvKiBob3cgbWFueSBvZiB0aGUgdWZyYW1lJ3MgMTI1IHVzZWNzIGFyZSBhbGxvY2F0ZWQ/ICovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQKK3BlcmlvZGljX3VzZWNzIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHVuc2lnbmVkIGZyYW1lLCB1bnNpZ25lZCB1ZnJhbWUpCit7CisJX19sZTMyCQkJKmh3X3AgPSAmZWhjaS0+cGVyaW9kaWMgW2ZyYW1lXTsKKwl1bmlvbiBlaGNpX3NoYWRvdwkqcSA9ICZlaGNpLT5wc2hhZG93IFtmcmFtZV07CisJdW5zaWduZWQJCXVzZWNzID0gMDsKKworCXdoaWxlIChxLT5wdHIpIHsKKwkJc3dpdGNoIChRX05FWFRfVFlQRSAoKmh3X3ApKSB7CisJCWNhc2UgUV9UWVBFX1FIOgorCQkJLyogaXMgaXQgaW4gdGhlIFMtbWFzaz8gKi8KKwkJCWlmIChxLT5xaC0+aHdfaW5mbzIgJiBjcHVfdG9fbGUzMiAoMSA8PCB1ZnJhbWUpKQorCQkJCXVzZWNzICs9IHEtPnFoLT51c2VjczsKKwkJCS8qIC4uLiBvciBDLW1hc2s/ICovCisJCQlpZiAocS0+cWgtPmh3X2luZm8yICYgY3B1X3RvX2xlMzIgKDEgPDwgKDggKyB1ZnJhbWUpKSkKKwkJCQl1c2VjcyArPSBxLT5xaC0+Y191c2VjczsKKwkJCWh3X3AgPSAmcS0+cWgtPmh3X25leHQ7CisJCQlxID0gJnEtPnFoLT5xaF9uZXh0OworCQkJYnJlYWs7CisJCS8vIGNhc2UgUV9UWVBFX0ZTVE46CisJCWRlZmF1bHQ6CisJCQkvKiBmb3IgInNhdmUgcGxhY2UiIEZTVE5zLCBjb3VudCB0aGUgcmVsZXZhbnQgSU5UUgorCQkJICogYmFuZHdpZHRoIGZyb20gdGhlIHByZXZpb3VzIGZyYW1lCisJCQkgKi8KKwkJCWlmIChxLT5mc3RuLT5od19wcmV2ICE9IEVIQ0lfTElTVF9FTkQpIHsKKwkJCQllaGNpX2RiZyAoZWhjaSwgImlnbm9yaW5nIEZTVE4gY29zdCAuLi5cbiIpOworCQkJfQorCQkJaHdfcCA9ICZxLT5mc3RuLT5od19uZXh0OworCQkJcSA9ICZxLT5mc3RuLT5mc3RuX25leHQ7CisJCQlicmVhazsKKwkJY2FzZSBRX1RZUEVfSVREOgorCQkJdXNlY3MgKz0gcS0+aXRkLT51c2VjcyBbdWZyYW1lXTsKKwkJCWh3X3AgPSAmcS0+aXRkLT5od19uZXh0OworCQkJcSA9ICZxLT5pdGQtPml0ZF9uZXh0OworCQkJYnJlYWs7CisJCWNhc2UgUV9UWVBFX1NJVEQ6CisJCQkvKiBpcyBpdCBpbiB0aGUgUy1tYXNrPyAgKGNvdW50IFNQTElULCBEQVRBKSAqLworCQkJaWYgKHEtPnNpdGQtPmh3X3VmcmFtZSAmIGNwdV90b19sZTMyICgxIDw8IHVmcmFtZSkpIHsKKwkJCQlpZiAocS0+c2l0ZC0+aHdfZnVsbHNwZWVkX2VwICYKKwkJCQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDE8PDMxKSkKKwkJCQkJdXNlY3MgKz0gcS0+c2l0ZC0+c3RyZWFtLT51c2VjczsKKwkJCQllbHNlCS8qIHdvcnN0IGNhc2UgZm9yIE9VVCBzdGFydC1zcGxpdCAqLworCQkJCQl1c2VjcyArPSBIU19VU0VDU19JU08gKDE4OCk7CisJCQl9CisKKwkJCS8qIC4uLiBDLW1hc2s/ICAoY291bnQgQ1NQTElULCBEQVRBKSAqLworCQkJaWYgKHEtPnNpdGQtPmh3X3VmcmFtZSAmCisJCQkJCWNwdV90b19sZTMyICgxIDw8ICg4ICsgdWZyYW1lKSkpIHsKKwkJCQkvKiB3b3JzdCBjYXNlIGZvciBJTiBjb21wbGV0ZS1zcGxpdCAqLworCQkJCXVzZWNzICs9IHEtPnNpdGQtPnN0cmVhbS0+Y191c2VjczsKKwkJCX0KKworCQkJaHdfcCA9ICZxLT5zaXRkLT5od19uZXh0OworCQkJcSA9ICZxLT5zaXRkLT5zaXRkX25leHQ7CisJCQlicmVhazsKKwkJfQorCX0KKyNpZmRlZglERUJVRworCWlmICh1c2VjcyA+IDEwMCkKKwkJZWhjaV9lcnIgKGVoY2ksICJ1ZnJhbWUgJWQgc2NoZWQgb3ZlcnJ1bjogJWQgdXNlY3NcbiIsCisJCQlmcmFtZSAqIDggKyB1ZnJhbWUsIHVzZWNzKTsKKyNlbmRpZgorCXJldHVybiB1c2VjczsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBzYW1lX3R0IChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2MSwgc3RydWN0IHVzYl9kZXZpY2UgKmRldjIpCit7CisJaWYgKCFkZXYxLT50dCB8fCAhZGV2Mi0+dHQpCisJCXJldHVybiAwOworCWlmIChkZXYxLT50dCAhPSBkZXYyLT50dCkKKwkJcmV0dXJuIDA7CisJaWYgKGRldjEtPnR0LT5tdWx0aSkKKwkJcmV0dXJuIGRldjEtPnR0cG9ydCA9PSBkZXYyLT50dHBvcnQ7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KKworLyogcmV0dXJuIHRydWUgaWZmIHRoZSBkZXZpY2UncyB0cmFuc2FjdGlvbiB0cmFuc2xhdG9yIGlzIGF2YWlsYWJsZQorICogZm9yIGEgcGVyaW9kaWMgdHJhbnNmZXIgc3RhcnRpbmcgYXQgdGhlIHNwZWNpZmllZCBmcmFtZSwgdXNpbmcKKyAqIGFsbCB0aGUgdWZyYW1lcyBpbiB0aGUgbWFzay4KKyAqLworc3RhdGljIGludCB0dF9ub19jb2xsaXNpb24gKAorCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2ksCisJdW5zaWduZWQJCXBlcmlvZCwKKwlzdHJ1Y3QgdXNiX2RldmljZQkqZGV2LAorCXVuc2lnbmVkCQlmcmFtZSwKKwl1MzIJCQl1Zl9tYXNrCispCit7CisJaWYgKHBlcmlvZCA9PSAwKQkvKiBlcnJvciAqLworCQlyZXR1cm4gMDsKKworCS8qIG5vdGUgYmFuZHdpZHRoIHdhc3RhZ2U6ICBzcGxpdCBuZXZlciBmb2xsb3dzIGNzcGxpdAorCSAqIChkaWZmZXJlbnQgZGV2IG9yIGVuZHBvaW50KSB1bnRpbCB0aGUgbmV4dCB1ZnJhbWUuCisJICogY2FsbGluZyBjb252ZW50aW9uIGRvZXNuJ3QgbWFrZSB0aGF0IGRpc3RpbmN0aW9uLgorCSAqLworCWZvciAoOyBmcmFtZSA8IGVoY2ktPnBlcmlvZGljX3NpemU7IGZyYW1lICs9IHBlcmlvZCkgeworCQl1bmlvbiBlaGNpX3NoYWRvdwloZXJlOworCQlfX2xlMzIJCQl0eXBlOworCisJCWhlcmUgPSBlaGNpLT5wc2hhZG93IFtmcmFtZV07CisJCXR5cGUgPSBRX05FWFRfVFlQRSAoZWhjaS0+cGVyaW9kaWMgW2ZyYW1lXSk7CisJCXdoaWxlIChoZXJlLnB0cikgeworCQkJc3dpdGNoICh0eXBlKSB7CisJCQljYXNlIFFfVFlQRV9JVEQ6CisJCQkJdHlwZSA9IFFfTkVYVF9UWVBFIChoZXJlLml0ZC0+aHdfbmV4dCk7CisJCQkJaGVyZSA9IGhlcmUuaXRkLT5pdGRfbmV4dDsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgUV9UWVBFX1FIOgorCQkJCWlmIChzYW1lX3R0IChkZXYsIGhlcmUucWgtPmRldikpIHsKKwkJCQkJdTMyCQltYXNrOworCisJCQkJCW1hc2sgPSBsZTMyX3RvX2NwdSAoaGVyZS5xaC0+aHdfaW5mbzIpOworCQkJCQkvKiAia25vd3MiIG5vIGdhcCBpcyBuZWVkZWQgKi8KKwkJCQkJbWFzayB8PSBtYXNrID4+IDg7CisJCQkJCWlmIChtYXNrICYgdWZfbWFzaykKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQl0eXBlID0gUV9ORVhUX1RZUEUgKGhlcmUucWgtPmh3X25leHQpOworCQkJCWhlcmUgPSBoZXJlLnFoLT5xaF9uZXh0OworCQkJCWNvbnRpbnVlOworCQkJY2FzZSBRX1RZUEVfU0lURDoKKwkJCQlpZiAoc2FtZV90dCAoZGV2LCBoZXJlLnNpdGQtPnVyYi0+ZGV2KSkgeworCQkJCQl1MTYJCW1hc2s7CisKKwkJCQkJbWFzayA9IGxlMzJfdG9fY3B1IChoZXJlLnNpdGQKKwkJCQkJCQkJLT5od191ZnJhbWUpOworCQkJCQkvKiBGSVhNRSBhc3N1bWVzIG5vIGdhcCBmb3IgSU4hICovCisJCQkJCW1hc2sgfD0gbWFzayA+PiA4OworCQkJCQlpZiAobWFzayAmIHVmX21hc2spCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJdHlwZSA9IFFfTkVYVF9UWVBFIChoZXJlLnNpdGQtPmh3X25leHQpOworCQkJCWhlcmUgPSBoZXJlLnNpdGQtPnNpdGRfbmV4dDsKKwkJCQljb250aW51ZTsKKwkJCS8vIGNhc2UgUV9UWVBFX0ZTVE46CisJCQlkZWZhdWx0OgorCQkJCWVoY2lfZGJnIChlaGNpLAorCQkJCQkicGVyaW9kaWMgZnJhbWUgJWQgYm9ndXMgdHlwZSAlZFxuIiwKKwkJCQkJZnJhbWUsIHR5cGUpOworCQkJfQorCisJCQkvKiBjb2xsaXNpb24gb3IgZXJyb3IgKi8KKwkJCXJldHVybiAwOworCQl9CisJfQorCisJLyogbm8gY29sbGlzaW9uICovCisJcmV0dXJuIDE7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgZW5hYmxlX3BlcmlvZGljIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCit7CisJdTMyCWNtZDsKKwlpbnQJc3RhdHVzOworCisJLyogZGlkIGNsZWFyaW5nIFBTRSBkaWQgdGFrZSBlZmZlY3QgeWV0PworCSAqIHRha2VzIGVmZmVjdCBvbmx5IGF0IGZyYW1lIGJvdW5kYXJpZXMuLi4KKwkgKi8KKwlzdGF0dXMgPSBoYW5kc2hha2UgKCZlaGNpLT5yZWdzLT5zdGF0dXMsIFNUU19QU1MsIDAsIDkgKiAxMjUpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQllaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUgPSBIQ19TVEFURV9IQUxUOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCWNtZCA9IHJlYWRsICgmZWhjaS0+cmVncy0+Y29tbWFuZCkgfCBDTURfUFNFOworCXdyaXRlbCAoY21kLCAmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisJLyogcG9zdGVkIHdyaXRlIC4uLiBQU1MgaGFwcGVucyBsYXRlciAqLworCWVoY2lfdG9faGNkKGVoY2kpLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisKKwkvKiBtYWtlIHN1cmUgZWhjaV93b3JrIHNjYW5zIHRoZXNlICovCisJZWhjaS0+bmV4dF91ZnJhbWUgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPmZyYW1lX2luZGV4KQorCQkJCSUgKGVoY2ktPnBlcmlvZGljX3NpemUgPDwgMyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlzYWJsZV9wZXJpb2RpYyAoc3RydWN0IGVoY2lfaGNkICplaGNpKQoreworCXUzMgljbWQ7CisJaW50CXN0YXR1czsKKworCS8qIGRpZCBzZXR0aW5nIFBTRSBub3QgdGFrZSBlZmZlY3QgeWV0PworCSAqIHRha2VzIGVmZmVjdCBvbmx5IGF0IGZyYW1lIGJvdW5kYXJpZXMuLi4KKwkgKi8KKwlzdGF0dXMgPSBoYW5kc2hha2UgKCZlaGNpLT5yZWdzLT5zdGF0dXMsIFNUU19QU1MsIFNUU19QU1MsIDkgKiAxMjUpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQllaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUgPSBIQ19TVEFURV9IQUxUOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCWNtZCA9IHJlYWRsICgmZWhjaS0+cmVncy0+Y29tbWFuZCkgJiB+Q01EX1BTRTsKKwl3cml0ZWwgKGNtZCwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOworCS8qIHBvc3RlZCB3cml0ZSAuLi4gKi8KKworCWVoY2ktPm5leHRfdWZyYW1lID0gLTE7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHBlcmlvZGljIHNjaGVkdWxlIHNsb3RzIGhhdmUgaXNvIHRkcyAobm9ybWFsIG9yIHNwbGl0KSBmaXJzdCwgdGhlbiBhCisgKiBzcGFyc2UgdHJlZSBmb3IgYWN0aXZlIGludGVycnVwdCB0cmFuc2ZlcnMuCisgKgorICogdGhpcyBqdXN0IGxpbmtzIGluIGEgcWg7IGNhbGxlciBndWFyYW50ZWVzIHVmcmFtZSBtYXNrcyBhcmUgc2V0IHJpZ2h0LgorICogbm8gRlNUTiBzdXBwb3J0ICh5ZXQ7IGVoY2kgMC45NispCisgKi8KK3N0YXRpYyBpbnQgcWhfbGlua19wZXJpb2RpYyAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9xaCAqcWgpCit7CisJdW5zaWduZWQJaTsKKwl1bnNpZ25lZAlwZXJpb2QgPSBxaC0+cGVyaW9kOworCisJZGV2X2RiZyAoJnFoLT5kZXYtPmRldiwKKwkJImxpbmsgcWglZC0lMDR4LyVwIHN0YXJ0ICVkIFslZC8lZCB1c11cbiIsCisJCXBlcmlvZCwgbGUzMl90b19jcHVwICgmcWgtPmh3X2luZm8yKSAmIDB4ZmZmZiwKKwkJcWgsIHFoLT5zdGFydCwgcWgtPnVzZWNzLCBxaC0+Y191c2Vjcyk7CisKKwkvKiBoaWdoIGJhbmR3aWR0aCwgb3Igb3RoZXJ3aXNlIGV2ZXJ5IG1pY3JvZnJhbWUgKi8KKwlpZiAocGVyaW9kID09IDApCisJCXBlcmlvZCA9IDE7CisKKwlmb3IgKGkgPSBxaC0+c3RhcnQ7IGkgPCBlaGNpLT5wZXJpb2RpY19zaXplOyBpICs9IHBlcmlvZCkgeworCQl1bmlvbiBlaGNpX3NoYWRvdwkqcHJldiA9ICZlaGNpLT5wc2hhZG93IFtpXTsKKwkJdTMyCQkJKmh3X3AgPSAmZWhjaS0+cGVyaW9kaWMgW2ldOworCQl1bmlvbiBlaGNpX3NoYWRvdwloZXJlID0gKnByZXY7CisJCXUzMgkJCXR5cGUgPSAwOworCisJCS8qIHNraXAgdGhlIGlzbyBub2RlcyBhdCBsaXN0IGhlYWQgKi8KKwkJd2hpbGUgKGhlcmUucHRyKSB7CisJCQl0eXBlID0gUV9ORVhUX1RZUEUgKCpod19wKTsKKwkJCWlmICh0eXBlID09IFFfVFlQRV9RSCkKKwkJCQlicmVhazsKKwkJCXByZXYgPSBwZXJpb2RpY19uZXh0X3NoYWRvdyAocHJldiwgdHlwZSk7CisJCQlod19wID0gJmhlcmUucWgtPmh3X25leHQ7CisJCQloZXJlID0gKnByZXY7CisJCX0KKworCQkvKiBzb3J0aW5nIGVhY2ggYnJhbmNoIGJ5IHBlcmlvZCAoc2xvdy0tPmZhc3QpCisJCSAqIGVuYWJsZXMgc2hhcmluZyBpbnRlcmlvciB0cmVlIG5vZGVzCisJCSAqLworCQl3aGlsZSAoaGVyZS5wdHIgJiYgcWggIT0gaGVyZS5xaCkgeworCQkJaWYgKHFoLT5wZXJpb2QgPiBoZXJlLnFoLT5wZXJpb2QpCisJCQkJYnJlYWs7CisJCQlwcmV2ID0gJmhlcmUucWgtPnFoX25leHQ7CisJCQlod19wID0gJmhlcmUucWgtPmh3X25leHQ7CisJCQloZXJlID0gKnByZXY7CisJCX0KKwkJLyogbGluayBpbiB0aGlzIHFoLCB1bmxlc3Mgc29tZSBlYXJsaWVyIHBhc3MgZGlkIHRoYXQgKi8KKwkJaWYgKHFoICE9IGhlcmUucWgpIHsKKwkJCXFoLT5xaF9uZXh0ID0gaGVyZTsKKwkJCWlmIChoZXJlLnFoKQorCQkJCXFoLT5od19uZXh0ID0gKmh3X3A7CisJCQl3bWIgKCk7CisJCQlwcmV2LT5xaCA9IHFoOworCQkJKmh3X3AgPSBRSF9ORVhUIChxaC0+cWhfZG1hKTsKKwkJfQorCX0KKwlxaC0+cWhfc3RhdGUgPSBRSF9TVEFURV9MSU5LRUQ7CisJcWhfZ2V0IChxaCk7CisKKwkvKiB1cGRhdGUgcGVyLXFoIGJhbmR3aWR0aCBmb3IgdXNiZnMgKi8KKwllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5iYW5kd2lkdGhfYWxsb2NhdGVkICs9IHFoLT5wZXJpb2QKKwkJPyAoKHFoLT51c2VjcyArIHFoLT5jX3VzZWNzKSAvIHFoLT5wZXJpb2QpCisJCTogKHFoLT51c2VjcyAqIDgpOworCisJLyogbWF5YmUgZW5hYmxlIHBlcmlvZGljIHNjaGVkdWxlIHByb2Nlc3NpbmcgKi8KKwlpZiAoIWVoY2ktPnBlcmlvZGljX3NjaGVkKyspCisJCXJldHVybiBlbmFibGVfcGVyaW9kaWMgKGVoY2kpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHFoX3VubGlua19wZXJpb2RpYyAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9xaCAqcWgpCit7CisJdW5zaWduZWQJaTsKKwl1bnNpZ25lZAlwZXJpb2Q7CisKKwkvLyBGSVhNRToKKwkvLyBJRiB0aGlzIGlzbid0IGhpZ2ggc3BlZWQKKwkvLyAgIGFuZCB0aGlzIHFoIGlzIGFjdGl2ZSBpbiB0aGUgY3VycmVudCB1ZnJhbWUKKwkvLyAgIChhbmQgb3ZlcmxheSB0b2tlbiBTcGxpdFhzdGF0ZSBpcyBmYWxzZT8pCisJLy8gVEhFTgorCS8vICAgcWgtPmh3X2luZm8xIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEgPDwgNyAvKiAiaWdub3JlIiAqLyk7CisKKwkvKiBoaWdoIGJhbmR3aWR0aCwgb3Igb3RoZXJ3aXNlIHBhcnQgb2YgZXZlcnkgbWljcm9mcmFtZSAqLworCWlmICgocGVyaW9kID0gcWgtPnBlcmlvZCkgPT0gMCkKKwkJcGVyaW9kID0gMTsKKworCWZvciAoaSA9IHFoLT5zdGFydDsgaSA8IGVoY2ktPnBlcmlvZGljX3NpemU7IGkgKz0gcGVyaW9kKQorCQlwZXJpb2RpY191bmxpbmsgKGVoY2ksIGksIHFoKTsKKworCS8qIHVwZGF0ZSBwZXItcWggYmFuZHdpZHRoIGZvciB1c2JmcyAqLworCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9hbGxvY2F0ZWQgLT0gcWgtPnBlcmlvZAorCQk/ICgocWgtPnVzZWNzICsgcWgtPmNfdXNlY3MpIC8gcWgtPnBlcmlvZCkKKwkJOiAocWgtPnVzZWNzICogOCk7CisKKwlkZXZfZGJnICgmcWgtPmRldi0+ZGV2LAorCQkidW5saW5rIHFoJWQtJTA0eC8lcCBzdGFydCAlZCBbJWQvJWQgdXNdXG4iLAorCQlxaC0+cGVyaW9kLCBsZTMyX3RvX2NwdXAgKCZxaC0+aHdfaW5mbzIpICYgMHhmZmZmLAorCQlxaCwgcWgtPnN0YXJ0LCBxaC0+dXNlY3MsIHFoLT5jX3VzZWNzKTsKKworCS8qIHFoLT5xaF9uZXh0IHN0aWxsICJsaXZlIiB0byBIQyAqLworCXFoLT5xaF9zdGF0ZSA9IFFIX1NUQVRFX1VOTElOSzsKKwlxaC0+cWhfbmV4dC5wdHIgPSBOVUxMOworCXFoX3B1dCAocWgpOworCisJLyogbWF5YmUgdHVybiBvZmYgcGVyaW9kaWMgc2NoZWR1bGUgKi8KKwllaGNpLT5wZXJpb2RpY19zY2hlZC0tOworCWlmICghZWhjaS0+cGVyaW9kaWNfc2NoZWQpCisJCSh2b2lkKSBkaXNhYmxlX3BlcmlvZGljIChlaGNpKTsKK30KKworc3RhdGljIHZvaWQgaW50cl9kZXNjaGVkdWxlIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCkKK3sKKwl1bnNpZ25lZAl3YWl0OworCisJcWhfdW5saW5rX3BlcmlvZGljIChlaGNpLCBxaCk7CisKKwkvKiBzaW1wbGUvcGFyYW5vaWQ6ICBhbHdheXMgZGVsYXksIGV4cGVjdGluZyB0aGUgSEMgbmVlZHMgdG8gcmVhZAorCSAqIHFoLT5od19uZXh0IG9yIGZpbmlzaCBhIHdyaXRlYmFjayBhZnRlciBTUExJVC9DU1BMSVQgLi4uIGFuZAorCSAqIGV4cGVjdCBraHViZCB0byBjbGVhbiB1cCBhZnRlciBhbnkgQ1NQTElUcyB3ZSB3b24ndCBpc3N1ZS4KKwkgKiBhY3RpdmUgaGlnaCBzcGVlZCBxdWV1ZXMgbWF5IG5lZWQgYmlnZ2VyIGRlbGF5cy4uLgorCSAqLworCWlmIChsaXN0X2VtcHR5ICgmcWgtPnF0ZF9saXN0KQorCQkJfHwgKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDB4MGZmIDw8IDgpCisJCQkJCSYgcWgtPmh3X2luZm8yKSAhPSAwKQorCQl3YWl0ID0gMjsKKwllbHNlCisJCXdhaXQgPSA1NTsJLyogd29yc3QgY2FzZTogMyAqIDEwMjQgKi8KKworCXVkZWxheSAod2FpdCk7CisJcWgtPnFoX3N0YXRlID0gUUhfU1RBVEVfSURMRTsKKwlxaC0+aHdfbmV4dCA9IEVIQ0lfTElTVF9FTkQ7CisJd21iICgpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IGNoZWNrX3BlcmlvZCAoCisJc3RydWN0IGVoY2lfaGNkICplaGNpLCAKKwl1bnNpZ25lZAlmcmFtZSwKKwl1bnNpZ25lZAl1ZnJhbWUsCisJdW5zaWduZWQJcGVyaW9kLAorCXVuc2lnbmVkCXVzZWNzCispIHsKKwlpbnQJCWNsYWltZWQ7CisKKwkvKiBjb21wbGV0ZSBzcGxpdCBydW5uaW5nIGludG8gbmV4dCBmcmFtZT8KKwkgKiBnaXZlbiBGU1ROIHN1cHBvcnQsIHdlIGNvdWxkIHNvbWV0aW1lcyBjaGVjay4uLgorCSAqLworCWlmICh1ZnJhbWUgPj0gOCkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIDgwJSBwZXJpb2RpYyA9PSAxMDAgdXNlYy91ZnJhbWUgYXZhaWxhYmxlCisJICogY29udmVydCAidXNlY3Mgd2UgbmVlZCIgdG8gIm1heCBhbHJlYWR5IGNsYWltZWQiIAorCSAqLworCXVzZWNzID0gMTAwIC0gdXNlY3M7CisKKwkvKiB3ZSAia25vdyIgMiBhbmQgNCB1ZnJhbWUgaW50ZXJ2YWxzIHdlcmUgcmVqZWN0ZWQ7IHNvCisJICogZm9yIHBlcmlvZCAwLCBjaGVjayBfZXZlcnlfIG1pY3JvZnJhbWUgaW4gdGhlIHNjaGVkdWxlLgorCSAqLworCWlmICh1bmxpa2VseSAocGVyaW9kID09IDApKSB7CisJCWRvIHsKKwkJCWZvciAodWZyYW1lID0gMDsgdWZyYW1lIDwgNzsgdWZyYW1lKyspIHsKKwkJCQljbGFpbWVkID0gcGVyaW9kaWNfdXNlY3MgKGVoY2ksIGZyYW1lLCB1ZnJhbWUpOworCQkJCWlmIChjbGFpbWVkID4gdXNlY3MpCisJCQkJCXJldHVybiAwOworCQkJfQorCQl9IHdoaWxlICgoZnJhbWUgKz0gMSkgPCBlaGNpLT5wZXJpb2RpY19zaXplKTsKKworCS8qIGp1c3QgY2hlY2sgdGhlIHNwZWNpZmllZCB1ZnJhbWUsIGF0IHRoYXQgcGVyaW9kICovCisJfSBlbHNlIHsKKwkJZG8geworCQkJY2xhaW1lZCA9IHBlcmlvZGljX3VzZWNzIChlaGNpLCBmcmFtZSwgdWZyYW1lKTsKKwkJCWlmIChjbGFpbWVkID4gdXNlY3MpCisJCQkJcmV0dXJuIDA7CisJCX0gd2hpbGUgKChmcmFtZSArPSBwZXJpb2QpIDwgZWhjaS0+cGVyaW9kaWNfc2l6ZSk7CisJfQorCisJLy8gc3VjY2VzcyEKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjaGVja19pbnRyX3NjaGVkdWxlICgKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpLCAKKwl1bnNpZ25lZAkJZnJhbWUsCisJdW5zaWduZWQJCXVmcmFtZSwKKwljb25zdCBzdHJ1Y3QgZWhjaV9xaAkqcWgsCisJX19sZTMyCQkJKmNfbWFza3AKKykKK3sKKyAgICAJaW50CQlyZXR2YWwgPSAtRU5PU1BDOworCXU4CQltYXNrOworCisJaWYgKHFoLT5jX3VzZWNzICYmIHVmcmFtZSA+PSA2KQkJLyogRlNUTiB0ZXJyaXRvcnk/ICovCisJCWdvdG8gZG9uZTsKKworCWlmICghY2hlY2tfcGVyaW9kIChlaGNpLCBmcmFtZSwgdWZyYW1lLCBxaC0+cGVyaW9kLCBxaC0+dXNlY3MpKQorCQlnb3RvIGRvbmU7CisJaWYgKCFxaC0+Y191c2VjcykgeworCQlyZXR2YWwgPSAwOworCQkqY19tYXNrcCA9IDA7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBNYWtlIHN1cmUgdGhpcyB0dCdzIGJ1ZmZlciBpcyBhbHNvIGF2YWlsYWJsZSBmb3IgQ1NQTElUcy4KKwkgKiBXZSBwZXNzaW1pemUgYSBiaXQ7IHByb2JhYmx5IHRoZSB0eXBpY2FsIGZ1bGwgc3BlZWQgY2FzZQorCSAqIGRvZXNuJ3QgbmVlZCB0aGUgc2Vjb25kIENTUExJVC4KKwkgKiAKKwkgKiBOT1RFOiAgYm90aCBTUExJVCBhbmQgQ1NQTElUIGNvdWxkIGJlIGNoZWNrZWQgaW4ganVzdAorCSAqIG9uZSBzbWFydCBwYXNzLi4uCisJICovCisJbWFzayA9IDB4MDMgPDwgKHVmcmFtZSArIHFoLT5nYXBfdWYpOworCSpjX21hc2twID0gY3B1X3RvX2xlMzIgKG1hc2sgPDwgOCk7CisKKwltYXNrIHw9IDEgPDwgdWZyYW1lOworCWlmICh0dF9ub19jb2xsaXNpb24gKGVoY2ksIHFoLT5wZXJpb2QsIHFoLT5kZXYsIGZyYW1lLCBtYXNrKSkgeworCQlpZiAoIWNoZWNrX3BlcmlvZCAoZWhjaSwgZnJhbWUsIHVmcmFtZSArIHFoLT5nYXBfdWYgKyAxLAorCQkJCQlxaC0+cGVyaW9kLCBxaC0+Y191c2VjcykpCisJCQlnb3RvIGRvbmU7CisJCWlmICghY2hlY2tfcGVyaW9kIChlaGNpLCBmcmFtZSwgdWZyYW1lICsgcWgtPmdhcF91ZiwKKwkJCQkJcWgtPnBlcmlvZCwgcWgtPmNfdXNlY3MpKQorCQkJZ290byBkb25lOworCQlyZXR2YWwgPSAwOworCX0KK2RvbmU6CisJcmV0dXJuIHJldHZhbDsKK30KKworLyogImZpcnN0IGZpdCIgc2NoZWR1bGluZyBwb2xpY3kgdXNlZCB0aGUgZmlyc3QgdGltZSB0aHJvdWdoLAorICogb3Igd2hlbiB0aGUgcHJldmlvdXMgc2NoZWR1bGUgc2xvdCBjYW4ndCBiZSByZS11c2VkLgorICovCitzdGF0aWMgaW50IHFoX3NjaGVkdWxlIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCkKK3sKKwlpbnQgCQlzdGF0dXM7CisJdW5zaWduZWQJdWZyYW1lOworCV9fbGUzMgkJY19tYXNrOworCXVuc2lnbmVkCWZyYW1lOwkJLyogMC4uKHFoLT5wZXJpb2QgLSAxKSwgb3IgTk9fRlJBTUUgKi8KKworCXFoX3JlZnJlc2goZWhjaSwgcWgpOworCXFoLT5od19uZXh0ID0gRUhDSV9MSVNUX0VORDsKKwlmcmFtZSA9IHFoLT5zdGFydDsKKworCS8qIHJldXNlIHRoZSBwcmV2aW91cyBzY2hlZHVsZSBzbG90cywgaWYgd2UgY2FuICovCisJaWYgKGZyYW1lIDwgcWgtPnBlcmlvZCkgeworCQl1ZnJhbWUgPSBmZnMgKGxlMzJfdG9fY3B1cCAoJnFoLT5od19pbmZvMikgJiAweDAwZmYpOworCQlzdGF0dXMgPSBjaGVja19pbnRyX3NjaGVkdWxlIChlaGNpLCBmcmFtZSwgLS11ZnJhbWUsCisJCQkJcWgsICZjX21hc2spOworCX0gZWxzZSB7CisJCXVmcmFtZSA9IDA7CisJCWNfbWFzayA9IDA7CisJCXN0YXR1cyA9IC1FTk9TUEM7CisJfQorCisJLyogZWxzZSBzY2FuIHRoZSBzY2hlZHVsZSB0byBmaW5kIGEgZ3JvdXAgb2Ygc2xvdHMgc3VjaCB0aGF0IGFsbAorCSAqIHVmcmFtZXMgaGF2ZSBlbm91Z2ggcGVyaW9kaWMgYmFuZHdpZHRoIGF2YWlsYWJsZS4KKwkgKi8KKwlpZiAoc3RhdHVzKSB7CisJCS8qICJub3JtYWwiIGNhc2UsIHVmcmFtaW5nIGZsZXhpYmxlIGV4Y2VwdCB3aXRoIHNwbGl0cyAqLworCQlpZiAocWgtPnBlcmlvZCkgeworCQkJZnJhbWUgPSBxaC0+cGVyaW9kIC0gMTsKKwkJCWRvIHsKKwkJCQlmb3IgKHVmcmFtZSA9IDA7IHVmcmFtZSA8IDg7IHVmcmFtZSsrKSB7CisJCQkJCXN0YXR1cyA9IGNoZWNrX2ludHJfc2NoZWR1bGUgKGVoY2ksCisJCQkJCQkJZnJhbWUsIHVmcmFtZSwgcWgsCisJCQkJCQkJJmNfbWFzayk7CisJCQkJCWlmIChzdGF0dXMgPT0gMCkKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gd2hpbGUgKHN0YXR1cyAmJiBmcmFtZS0tKTsKKworCQkvKiBxaC0+cGVyaW9kID09IDAgbWVhbnMgZXZlcnkgdWZyYW1lICovCisJCX0gZWxzZSB7CisJCQlmcmFtZSA9IDA7CisJCQlzdGF0dXMgPSBjaGVja19pbnRyX3NjaGVkdWxlIChlaGNpLCAwLCAwLCBxaCwgJmNfbWFzayk7CisJCX0KKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gZG9uZTsKKwkJcWgtPnN0YXJ0ID0gZnJhbWU7CisKKwkJLyogcmVzZXQgUy1mcmFtZSBhbmQgKG1heWJlKSBDLWZyYW1lIG1hc2tzICovCisJCXFoLT5od19pbmZvMiAmPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICh+MHhmZmZmKTsKKwkJcWgtPmh3X2luZm8yIHw9IHFoLT5wZXJpb2QKKwkJCT8gY3B1X3RvX2xlMzIgKDEgPDwgdWZyYW1lKQorCQkJOiBfX2NvbnN0YW50X2NwdV90b19sZTMyICgweGZmKTsKKwkJcWgtPmh3X2luZm8yIHw9IGNfbWFzazsKKwl9IGVsc2UKKwkJZWhjaV9kYmcgKGVoY2ksICJyZXVzZWQgcWggJXAgc2NoZWR1bGVcbiIsIHFoKTsKKworCS8qIHN0dWZmIGludG8gdGhlIHBlcmlvZGljIHNjaGVkdWxlICovCisgCXN0YXR1cyA9IHFoX2xpbmtfcGVyaW9kaWMgKGVoY2ksIHFoKTsKK2RvbmU6CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBpbnRyX3N1Ym1pdCAoCisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSwKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwLAorCXN0cnVjdCB1cmIJCSp1cmIsCisJc3RydWN0IGxpc3RfaGVhZAkqcXRkX2xpc3QsCisJaW50CQkJbWVtX2ZsYWdzCispIHsKKwl1bnNpZ25lZAkJZXBudW07CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJc3RydWN0IGVoY2lfcWgJCSpxaDsKKwlpbnQJCQlzdGF0dXMgPSAwOworCXN0cnVjdCBsaXN0X2hlYWQJZW1wdHk7CisKKwkvKiBnZXQgZW5kcG9pbnQgYW5kIHRyYW5zZmVyL3NjaGVkdWxlIGRhdGEgKi8KKwllcG51bSA9IGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKworCS8qIGdldCBxaCBhbmQgZm9yY2UgYW55IHNjaGVkdWxpbmcgZXJyb3JzICovCisJSU5JVF9MSVNUX0hFQUQgKCZlbXB0eSk7CisJcWggPSBxaF9hcHBlbmRfdGRzIChlaGNpLCB1cmIsICZlbXB0eSwgZXBudW0sICZlcC0+aGNwcml2KTsKKwlpZiAocWggPT0gTlVMTCkgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCWlmIChxaC0+cWhfc3RhdGUgPT0gUUhfU1RBVEVfSURMRSkgeworCQlpZiAoKHN0YXR1cyA9IHFoX3NjaGVkdWxlIChlaGNpLCBxaCkpICE9IDApCisJCQlnb3RvIGRvbmU7CisJfQorCisJLyogdGhlbiBxdWV1ZSB0aGUgdXJiJ3MgdGRzIHRvIHRoZSBxaCAqLworCXFoID0gcWhfYXBwZW5kX3RkcyAoZWhjaSwgdXJiLCBxdGRfbGlzdCwgZXBudW0sICZlcC0+aGNwcml2KTsKKwlCVUdfT04gKHFoID09IE5VTEwpOworCisJLyogLi4uIHVwZGF0ZSB1c2JmcyBwZXJpb2RpYyBzdGF0cyAqLworCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9pbnRfcmVxcysrOworCitkb25lOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJaWYgKHN0YXR1cykKKwkJcXRkX2xpc3RfZnJlZSAoZWhjaSwgdXJiLCBxdGRfbGlzdCk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBlaGNpX2lzb19zdHJlYW0gb3BzIHdvcmsgd2l0aCBib3RoIElURCBhbmQgU0lURCAqLworCitzdGF0aWMgc3RydWN0IGVoY2lfaXNvX3N0cmVhbSAqCitpc29fc3RyZWFtX2FsbG9jIChpbnQgbWVtX2ZsYWdzKQoreworCXN0cnVjdCBlaGNpX2lzb19zdHJlYW0gKnN0cmVhbTsKKworCXN0cmVhbSA9IGttYWxsb2Moc2l6ZW9mICpzdHJlYW0sIG1lbV9mbGFncyk7CisJaWYgKGxpa2VseSAoc3RyZWFtICE9IE5VTEwpKSB7CisJCW1lbXNldCAoc3RyZWFtLCAwLCBzaXplb2YoKnN0cmVhbSkpOworCQlJTklUX0xJU1RfSEVBRCgmc3RyZWFtLT50ZF9saXN0KTsKKwkJSU5JVF9MSVNUX0hFQUQoJnN0cmVhbS0+ZnJlZV9saXN0KTsKKwkJc3RyZWFtLT5uZXh0X3VmcmFtZSA9IC0xOworCQlzdHJlYW0tPnJlZmNvdW50ID0gMTsKKwl9CisJcmV0dXJuIHN0cmVhbTsKK30KKworc3RhdGljIHZvaWQKK2lzb19zdHJlYW1faW5pdCAoCisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSwKKwlzdHJ1Y3QgZWhjaV9pc29fc3RyZWFtCSpzdHJlYW0sCisJc3RydWN0IHVzYl9kZXZpY2UJKmRldiwKKwlpbnQJCQlwaXBlLAorCXVuc2lnbmVkCQlpbnRlcnZhbAorKQoreworCXN0YXRpYyBjb25zdCB1OCBzbWFza19vdXQgW10gPSB7IDB4MDEsIDB4MDMsIDB4MDcsIDB4MGYsIDB4MWYsIDB4M2YgfTsKKworCXUzMgkJCWJ1ZjE7CisJdW5zaWduZWQJCWVwbnVtLCBtYXhwOworCWludAkJCWlzX2lucHV0OworCWxvbmcJCQliYW5kd2lkdGg7CisKKwkvKgorCSAqIHRoaXMgbWlnaHQgYmUgYSAiaGlnaCBiYW5kd2lkdGgiIGhpZ2hzcGVlZCBlbmRwb2ludCwKKwkgKiBhcyBlbmNvZGVkIGluIHRoZSBlcCBkZXNjcmlwdG9yJ3Mgd01heFBhY2tldCBmaWVsZAorCSAqLworCWVwbnVtID0gdXNiX3BpcGVlbmRwb2ludCAocGlwZSk7CisJaXNfaW5wdXQgPSB1c2JfcGlwZWluIChwaXBlKSA/IFVTQl9ESVJfSU4gOiAwOworCW1heHAgPSB1c2JfbWF4cGFja2V0KGRldiwgcGlwZSwgIWlzX2lucHV0KTsKKwlpZiAoaXNfaW5wdXQpIHsKKwkJYnVmMSA9ICgxIDw8IDExKTsKKwl9IGVsc2UgeworCQlidWYxID0gMDsKKwl9CisKKwkvKiBrbm93cyBhYm91dCBJVEQgdnMgU0lURCAqLworCWlmIChkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSB7CisJCXVuc2lnbmVkIG11bHRpID0gaGJfbXVsdChtYXhwKTsKKworCQlzdHJlYW0tPmhpZ2hzcGVlZCA9IDE7CisKKwkJbWF4cCA9IG1heF9wYWNrZXQobWF4cCk7CisJCWJ1ZjEgfD0gbWF4cDsKKwkJbWF4cCAqPSBtdWx0aTsKKworCQlzdHJlYW0tPmJ1ZjAgPSBjcHVfdG9fbGUzMiAoKGVwbnVtIDw8IDgpIHwgZGV2LT5kZXZudW0pOworCQlzdHJlYW0tPmJ1ZjEgPSBjcHVfdG9fbGUzMiAoYnVmMSk7CisJCXN0cmVhbS0+YnVmMiA9IGNwdV90b19sZTMyIChtdWx0aSk7CisKKwkJLyogdXNiZnMgd2FudHMgdG8gcmVwb3J0IHRoZSBhdmVyYWdlIHVzZWNzIHBlciBmcmFtZSB0aWVkIHVwCisJCSAqIHdoZW4gdHJhbnNmZXJzIG9uIHRoaXMgZW5kcG9pbnQgYXJlIHNjaGVkdWxlZCAuLi4KKwkJICovCisJCXN0cmVhbS0+dXNlY3MgPSBIU19VU0VDU19JU08gKG1heHApOworCQliYW5kd2lkdGggPSBzdHJlYW0tPnVzZWNzICogODsKKwkJYmFuZHdpZHRoIC89IDEgPDwgKGludGVydmFsIC0gMSk7CisKKwl9IGVsc2UgeworCQl1MzIJCWFkZHI7CisKKwkJYWRkciA9IGRldi0+dHRwb3J0IDw8IDI0OworCQlpZiAoIWVoY2lfaXNfVERJKGVoY2kpCisJCQkJfHwgKGRldi0+dHQtPmh1YiAhPQorCQkJCQllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5yb290X2h1YikpCisJCQlhZGRyIHw9IGRldi0+dHQtPmh1Yi0+ZGV2bnVtIDw8IDE2OworCQlhZGRyIHw9IGVwbnVtIDw8IDg7CisJCWFkZHIgfD0gZGV2LT5kZXZudW07CisJCXN0cmVhbS0+dXNlY3MgPSBIU19VU0VDU19JU08gKG1heHApOworCQlpZiAoaXNfaW5wdXQpIHsKKwkJCXUzMgl0bXA7CisKKwkJCWFkZHIgfD0gMSA8PCAzMTsKKwkJCXN0cmVhbS0+Y191c2VjcyA9IHN0cmVhbS0+dXNlY3M7CisJCQlzdHJlYW0tPnVzZWNzID0gSFNfVVNFQ1NfSVNPICgxKTsKKwkJCXN0cmVhbS0+cmF3X21hc2sgPSAxOworCisJCQkvKiBwZXNzaW1pc3RpYyBjLW1hc2sgKi8KKwkJCXRtcCA9IHVzYl9jYWxjX2J1c190aW1lIChVU0JfU1BFRURfRlVMTCwgMSwgMCwgbWF4cCkKKwkJCQkJLyAoMTI1ICogMTAwMCk7CisJCQlzdHJlYW0tPnJhd19tYXNrIHw9IDMgPDwgKHRtcCArIDkpOworCQl9IGVsc2UKKwkJCXN0cmVhbS0+cmF3X21hc2sgPSBzbWFza19vdXQgW21heHAgLyAxODhdOworCQliYW5kd2lkdGggPSBzdHJlYW0tPnVzZWNzICsgc3RyZWFtLT5jX3VzZWNzOworCQliYW5kd2lkdGggLz0gMSA8PCAoaW50ZXJ2YWwgKyAyKTsKKworCQkvKiBzdHJlYW0tPnNwbGl0cyBnZXRzIGNyZWF0ZWQgZnJvbSByYXdfbWFzayBsYXRlciAqLworCQlzdHJlYW0tPmFkZHJlc3MgPSBjcHVfdG9fbGUzMiAoYWRkcik7CisJfQorCXN0cmVhbS0+YmFuZHdpZHRoID0gYmFuZHdpZHRoOworCisJc3RyZWFtLT51ZGV2ID0gZGV2OworCisJc3RyZWFtLT5iRW5kcG9pbnRBZGRyZXNzID0gaXNfaW5wdXQgfCBlcG51bTsKKwlzdHJlYW0tPmludGVydmFsID0gaW50ZXJ2YWw7CisJc3RyZWFtLT5tYXhwID0gbWF4cDsKK30KKworc3RhdGljIHZvaWQKK2lzb19zdHJlYW1fcHV0KHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfaXNvX3N0cmVhbSAqc3RyZWFtKQoreworCXN0cmVhbS0+cmVmY291bnQtLTsKKworCS8qIGZyZWUgd2hlbmV2ZXIganVzdCBhIGRldi0+ZXAgcmVmZXJlbmNlIHJlbWFpbnMuCisJICogbm90IGxpa2UgYSBRSCAtLSBubyBwZXJzaXN0ZW50IHN0YXRlICh0b2dnbGUsIGhhbHQpCisJICovCisJaWYgKHN0cmVhbS0+cmVmY291bnQgPT0gMSkgeworCQlpbnQJCWlzX2luOworCisJCS8vIEJVR19PTiAoIWxpc3RfZW1wdHkoJnN0cmVhbS0+dGRfbGlzdCkpOworCisJCXdoaWxlICghbGlzdF9lbXB0eSAoJnN0cmVhbS0+ZnJlZV9saXN0KSkgeworCQkJc3RydWN0IGxpc3RfaGVhZAkqZW50cnk7CisKKwkJCWVudHJ5ID0gc3RyZWFtLT5mcmVlX2xpc3QubmV4dDsKKwkJCWxpc3RfZGVsIChlbnRyeSk7CisKKwkJCS8qIGtub3dzIGFib3V0IElURCB2cyBTSVREICovCisJCQlpZiAoc3RyZWFtLT5oaWdoc3BlZWQpIHsKKwkJCQlzdHJ1Y3QgZWhjaV9pdGQJCSppdGQ7CisKKwkJCQlpdGQgPSBsaXN0X2VudHJ5IChlbnRyeSwgc3RydWN0IGVoY2lfaXRkLAorCQkJCQkJaXRkX2xpc3QpOworCQkJCWRtYV9wb29sX2ZyZWUgKGVoY2ktPml0ZF9wb29sLCBpdGQsCisJCQkJCQlpdGQtPml0ZF9kbWEpOworCQkJfSBlbHNlIHsKKwkJCQlzdHJ1Y3QgZWhjaV9zaXRkCSpzaXRkOworCisJCQkJc2l0ZCA9IGxpc3RfZW50cnkgKGVudHJ5LCBzdHJ1Y3QgZWhjaV9zaXRkLAorCQkJCQkJc2l0ZF9saXN0KTsKKwkJCQlkbWFfcG9vbF9mcmVlIChlaGNpLT5zaXRkX3Bvb2wsIHNpdGQsCisJCQkJCQlzaXRkLT5zaXRkX2RtYSk7CisJCQl9CisJCX0KKworCQlpc19pbiA9IChzdHJlYW0tPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSA/IDB4MTAgOiAwOworCQlzdHJlYW0tPmJFbmRwb2ludEFkZHJlc3MgJj0gMHgwZjsKKwkJc3RyZWFtLT5lcC0+aGNwcml2ID0gTlVMTDsKKworCQlpZiAoc3RyZWFtLT5yZXNjaGVkdWxlZCkgeworCQkJZWhjaV9pbmZvIChlaGNpLCAiZXAlZCVzLWlzbyByZXNjaGVkdWxlZCAiCisJCQkJIiVsdSB0aW1lcyBpbiAlbHUgc2Vjb25kc1xuIiwKKwkJCQlzdHJlYW0tPmJFbmRwb2ludEFkZHJlc3MsIGlzX2luID8gImluIiA6ICJvdXQiLAorCQkJCXN0cmVhbS0+cmVzY2hlZHVsZWQsCisJCQkJKChqaWZmaWVzIC0gc3RyZWFtLT5zdGFydCkvSFopCisJCQkJKTsKKwkJfQorCisJCWtmcmVlKHN0cmVhbSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBlaGNpX2lzb19zdHJlYW0gKgoraXNvX3N0cmVhbV9nZXQgKHN0cnVjdCBlaGNpX2lzb19zdHJlYW0gKnN0cmVhbSkKK3sKKwlpZiAobGlrZWx5IChzdHJlYW0gIT0gTlVMTCkpCisJCXN0cmVhbS0+cmVmY291bnQrKzsKKwlyZXR1cm4gc3RyZWFtOworfQorCitzdGF0aWMgc3RydWN0IGVoY2lfaXNvX3N0cmVhbSAqCitpc29fc3RyZWFtX2ZpbmQgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkCQllcG51bTsKKwlzdHJ1Y3QgZWhjaV9pc29fc3RyZWFtCSpzdHJlYW07CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCWVwbnVtID0gdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKTsKKwlpZiAodXNiX3BpcGVpbih1cmItPnBpcGUpKQorCQllcCA9IHVyYi0+ZGV2LT5lcF9pbltlcG51bV07CisJZWxzZQorCQllcCA9IHVyYi0+ZGV2LT5lcF9vdXRbZXBudW1dOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJc3RyZWFtID0gZXAtPmhjcHJpdjsKKworCWlmICh1bmxpa2VseSAoc3RyZWFtID09IE5VTEwpKSB7CisJCXN0cmVhbSA9IGlzb19zdHJlYW1fYWxsb2MoR0ZQX0FUT01JQyk7CisJCWlmIChsaWtlbHkgKHN0cmVhbSAhPSBOVUxMKSkgeworCQkJLyogZGV2LT5lcCBvd25zIHRoZSBpbml0aWFsIHJlZmNvdW50ICovCisJCQllcC0+aGNwcml2ID0gc3RyZWFtOworCQkJc3RyZWFtLT5lcCA9IGVwOworCQkJaXNvX3N0cmVhbV9pbml0KGVoY2ksIHN0cmVhbSwgdXJiLT5kZXYsIHVyYi0+cGlwZSwKKwkJCQkJdXJiLT5pbnRlcnZhbCk7CisJCX0KKworCS8qIGlmIGRldi0+ZXAgW2VwbnVtXSBpcyBhIFFILCBpbmZvMS5tYXhwYWNrZXQgaXMgbm9uemVybyAqLworCX0gZWxzZSBpZiAodW5saWtlbHkgKHN0cmVhbS0+aHdfaW5mbzEgIT0gMCkpIHsKKwkJZWhjaV9kYmcgKGVoY2ksICJkZXYgJXMgZXAlZCVzLCBub3QgaXNvPz9cbiIsCisJCQl1cmItPmRldi0+ZGV2cGF0aCwgZXBudW0sCisJCQl1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIpOworCQlzdHJlYW0gPSBOVUxMOworCX0KKworCS8qIGNhbGxlciBndWFyYW50ZWVzIGFuIGV2ZW50dWFsIG1hdGNoaW5nIGlzb19zdHJlYW1fcHV0ICovCisJc3RyZWFtID0gaXNvX3N0cmVhbV9nZXQgKHN0cmVhbSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCXJldHVybiBzdHJlYW07Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGVoY2lfaXNvX3NjaGVkIG9wcyBjYW4gYmUgSVRELW9ubHkgb3IgU0lURC1vbmx5ICovCisKK3N0YXRpYyBzdHJ1Y3QgZWhjaV9pc29fc2NoZWQgKgoraXNvX3NjaGVkX2FsbG9jICh1bnNpZ25lZCBwYWNrZXRzLCBpbnQgbWVtX2ZsYWdzKQoreworCXN0cnVjdCBlaGNpX2lzb19zY2hlZAkqaXNvX3NjaGVkOworCWludAkJCXNpemUgPSBzaXplb2YgKmlzb19zY2hlZDsKKworCXNpemUgKz0gcGFja2V0cyAqIHNpemVvZiAoc3RydWN0IGVoY2lfaXNvX3BhY2tldCk7CisJaXNvX3NjaGVkID0ga21hbGxvYyAoc2l6ZSwgbWVtX2ZsYWdzKTsKKwlpZiAobGlrZWx5IChpc29fc2NoZWQgIT0gTlVMTCkpIHsKKwkJbWVtc2V0KGlzb19zY2hlZCwgMCwgc2l6ZSk7CisJCUlOSVRfTElTVF9IRUFEICgmaXNvX3NjaGVkLT50ZF9saXN0KTsKKwl9CisJcmV0dXJuIGlzb19zY2hlZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitpdGRfc2NoZWRfaW5pdCAoCisJc3RydWN0IGVoY2lfaXNvX3NjaGVkCSppc29fc2NoZWQsCisJc3RydWN0IGVoY2lfaXNvX3N0cmVhbQkqc3RyZWFtLAorCXN0cnVjdCB1cmIJCSp1cmIKKykKK3sKKwl1bnNpZ25lZAlpOworCWRtYV9hZGRyX3QJZG1hID0gdXJiLT50cmFuc2Zlcl9kbWE7CisKKwkvKiBob3cgbWFueSB1ZnJhbWVzIGFyZSBuZWVkZWQgZm9yIHRoZXNlIHRyYW5zZmVycyAqLworCWlzb19zY2hlZC0+c3BhbiA9IHVyYi0+bnVtYmVyX29mX3BhY2tldHMgKiBzdHJlYW0tPmludGVydmFsOworCisJLyogZmlndXJlIG91dCBwZXItdWZyYW1lIGl0ZCBmaWVsZHMgdGhhdCB3ZSdsbCBuZWVkIGxhdGVyCisJICogd2hlbiB3ZSBmaXQgbmV3IGl0ZHMgaW50byB0aGUgc2NoZWR1bGUuCisJICovCisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQlzdHJ1Y3QgZWhjaV9pc29fcGFja2V0CSp1ZnJhbWUgPSAmaXNvX3NjaGVkLT5wYWNrZXQgW2ldOworCQl1bnNpZ25lZAkJbGVuZ3RoOworCQlkbWFfYWRkcl90CQlidWY7CisJCXUzMgkJCXRyYW5zOworCisJCWxlbmd0aCA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2MgW2ldLmxlbmd0aDsKKwkJYnVmID0gZG1hICsgdXJiLT5pc29fZnJhbWVfZGVzYyBbaV0ub2Zmc2V0OworCisJCXRyYW5zID0gRUhDSV9JU09DX0FDVElWRTsKKwkJdHJhbnMgfD0gYnVmICYgMHgwZmZmOworCQlpZiAodW5saWtlbHkgKCgoaSArIDEpID09IHVyYi0+bnVtYmVyX29mX3BhY2tldHMpKQorCQkJCSYmICEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9OT19JTlRFUlJVUFQpKQorCQkJdHJhbnMgfD0gRUhDSV9JVERfSU9DOworCQl0cmFucyB8PSBsZW5ndGggPDwgMTY7CisJCXVmcmFtZS0+dHJhbnNhY3Rpb24gPSBjcHVfdG9fbGUzMiAodHJhbnMpOworCisJCS8qIG1pZ2h0IG5lZWQgdG8gY3Jvc3MgYSBidWZmZXIgcGFnZSB3aXRoaW4gYSB0ZCAqLworCQl1ZnJhbWUtPmJ1ZnAgPSAoYnVmICYgfih1NjQpMHgwZmZmKTsKKwkJYnVmICs9IGxlbmd0aDsKKwkJaWYgKHVubGlrZWx5ICgodWZyYW1lLT5idWZwICE9IChidWYgJiB+KHU2NCkweDBmZmYpKSkpCisJCQl1ZnJhbWUtPmNyb3NzID0gMTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitpc29fc2NoZWRfZnJlZSAoCisJc3RydWN0IGVoY2lfaXNvX3N0cmVhbQkqc3RyZWFtLAorCXN0cnVjdCBlaGNpX2lzb19zY2hlZAkqaXNvX3NjaGVkCispCit7CisJaWYgKCFpc29fc2NoZWQpCisJCXJldHVybjsKKwkvLyBjYWxsZXIgbXVzdCBob2xkIGVoY2ktPmxvY2shCisJbGlzdF9zcGxpY2UgKCZpc29fc2NoZWQtPnRkX2xpc3QsICZzdHJlYW0tPmZyZWVfbGlzdCk7CisJa2ZyZWUgKGlzb19zY2hlZCk7Cit9CisKK3N0YXRpYyBpbnQKK2l0ZF91cmJfdHJhbnNhY3Rpb24gKAorCXN0cnVjdCBlaGNpX2lzb19zdHJlYW0JKnN0cmVhbSwKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpLAorCXN0cnVjdCB1cmIJCSp1cmIsCisJaW50CQkJbWVtX2ZsYWdzCispCit7CisJc3RydWN0IGVoY2lfaXRkCQkqaXRkOworCWRtYV9hZGRyX3QJCWl0ZF9kbWE7CisJaW50CQkJaTsKKwl1bnNpZ25lZAkJbnVtX2l0ZHM7CisJc3RydWN0IGVoY2lfaXNvX3NjaGVkCSpzY2hlZDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCXNjaGVkID0gaXNvX3NjaGVkX2FsbG9jICh1cmItPm51bWJlcl9vZl9wYWNrZXRzLCBtZW1fZmxhZ3MpOworCWlmICh1bmxpa2VseSAoc2NoZWQgPT0gTlVMTCkpCisJCXJldHVybiAtRU5PTUVNOworCisJaXRkX3NjaGVkX2luaXQgKHNjaGVkLCBzdHJlYW0sIHVyYik7CisKKwlpZiAodXJiLT5pbnRlcnZhbCA8IDgpCisJCW51bV9pdGRzID0gMSArIChzY2hlZC0+c3BhbiArIDcpIC8gODsKKwllbHNlCisJCW51bV9pdGRzID0gdXJiLT5udW1iZXJfb2ZfcGFja2V0czsKKworCS8qIGFsbG9jYXRlL2luaXQgSVREcyAqLworCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBudW1faXRkczsgaSsrKSB7CisKKwkJLyogZnJlZV9saXN0Lm5leHQgbWlnaHQgYmUgY2FjaGUtaG90IC4uLiBidXQgbWF5YmUKKwkJICogdGhlIEhDIGNhY2hlcyBpdCB0b28uIGF2b2lkIHRoYXQgaXNzdWUgZm9yIG5vdy4KKwkJICovCisKKwkJLyogcHJlZmVyIHByZXZpb3VzbHktYWxsb2NhdGVkIGl0ZHMgKi8KKwkJaWYgKGxpa2VseSAoIWxpc3RfZW1wdHkoJnN0cmVhbS0+ZnJlZV9saXN0KSkpIHsKKwkJCWl0ZCA9IGxpc3RfZW50cnkgKHN0cmVhbS0+ZnJlZV9saXN0LnByZXYsCisJCQkJCSBzdHJ1Y3QgZWhjaV9pdGQsIGl0ZF9saXN0KTsKKwkJCWxpc3RfZGVsICgmaXRkLT5pdGRfbGlzdCk7CisJCQlpdGRfZG1hID0gaXRkLT5pdGRfZG1hOworCQl9IGVsc2UKKwkJCWl0ZCA9IE5VTEw7CisKKwkJaWYgKCFpdGQpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJCQlpdGQgPSBkbWFfcG9vbF9hbGxvYyAoZWhjaS0+aXRkX3Bvb2wsIG1lbV9mbGFncywKKwkJCQkJJml0ZF9kbWEpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJCX0KKworCQlpZiAodW5saWtlbHkgKE5VTEwgPT0gaXRkKSkgeworCQkJaXNvX3NjaGVkX2ZyZWUgKHN0cmVhbSwgc2NoZWQpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1lbXNldCAoaXRkLCAwLCBzaXplb2YgKml0ZCk7CisJCWl0ZC0+aXRkX2RtYSA9IGl0ZF9kbWE7CisJCWxpc3RfYWRkICgmaXRkLT5pdGRfbGlzdCwgJnNjaGVkLT50ZF9saXN0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKworCS8qIHRlbXBvcmFyaWx5IHN0b3JlIHNjaGVkdWxlIGluZm8gaW4gaGNwcml2ICovCisJdXJiLT5oY3ByaXYgPSBzY2hlZDsKKwl1cmItPmVycm9yX2NvdW50ID0gMDsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBpbnQKK2l0ZF9zbG90X29rICgKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpLAorCXUzMgkJCW1vZCwKKwl1MzIJCQl1ZnJhbWUsCisJdTgJCQl1c2VjcywKKwl1MzIJCQlwZXJpb2QKKykKK3sKKwl1ZnJhbWUgJT0gcGVyaW9kOworCWRvIHsKKwkJLyogY2FuJ3QgY29tbWl0IG1vcmUgdGhhbiA4MCUgcGVyaW9kaWMgPT0gMTAwIHVzZWMgKi8KKwkJaWYgKHBlcmlvZGljX3VzZWNzIChlaGNpLCB1ZnJhbWUgPj4gMywgdWZyYW1lICYgMHg3KQorCQkJCT4gKDEwMCAtIHVzZWNzKSkKKwkJCXJldHVybiAwOworCisJCS8qIHdlIGtub3cgdXJiLT5pbnRlcnZhbCBpcyAyXk4gdWZyYW1lcyAqLworCQl1ZnJhbWUgKz0gcGVyaW9kOworCX0gd2hpbGUgKHVmcmFtZSA8IG1vZCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitzaXRkX3Nsb3Rfb2sgKAorCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2ksCisJdTMyCQkJbW9kLAorCXN0cnVjdCBlaGNpX2lzb19zdHJlYW0JKnN0cmVhbSwKKwl1MzIJCQl1ZnJhbWUsCisJc3RydWN0IGVoY2lfaXNvX3NjaGVkCSpzY2hlZCwKKwl1MzIJCQlwZXJpb2RfdWZyYW1lcworKQoreworCXUzMgkJCW1hc2ssIHRtcDsKKwl1MzIJCQlmcmFtZSwgdWY7CisKKwltYXNrID0gc3RyZWFtLT5yYXdfbWFzayA8PCAodWZyYW1lICYgNyk7CisKKwkvKiBmb3IgSU4sIGRvbid0IHdyYXAgQ1NQTElUIGludG8gdGhlIG5leHQgZnJhbWUgKi8KKwlpZiAobWFzayAmIH4weGZmZmYpCisJCXJldHVybiAwOworCisJLyogdGhpcyBtdWx0aS1wYXNzIGxvZ2ljIGlzIHNpbXBsZSwgYnV0IHBlcmZvcm1hbmNlIG1heQorCSAqIHN1ZmZlciB3aGVuIHRoZSBzY2hlZHVsZSBkYXRhIGlzbid0IGNhY2hlZC4KKwkgKi8KKworCS8qIGNoZWNrIGJhbmR3aWR0aCAqLworCXVmcmFtZSAlPSBwZXJpb2RfdWZyYW1lczsKKwlkbyB7CisJCXUzMgkJbWF4X3VzZWQ7CisKKwkJZnJhbWUgPSB1ZnJhbWUgPj4gMzsKKwkJdWYgPSB1ZnJhbWUgJiA3OworCisJCS8qIHR0IG11c3QgYmUgaWRsZSBmb3Igc3RhcnQocyksIGFueSBnYXAsIGFuZCBjc3BsaXQuCisJCSAqIGFzc3VtZSBzY2hlZHVsaW5nIHNsb3AgbGVhdmVzIDEwKyUgZm9yIGNvbnRyb2wvYnVsay4KKwkJICovCisJCWlmICghdHRfbm9fY29sbGlzaW9uIChlaGNpLCBwZXJpb2RfdWZyYW1lcyA8PCAzLAorCQkJCXN0cmVhbS0+dWRldiwgZnJhbWUsIG1hc2spKQorCQkJcmV0dXJuIDA7CisKKwkJLyogY2hlY2sgc3RhcnRzIChPVVQgdXNlcyBtb3JlIHRoYW4gb25lKSAqLworCQltYXhfdXNlZCA9IDEwMCAtIHN0cmVhbS0+dXNlY3M7CisJCWZvciAodG1wID0gc3RyZWFtLT5yYXdfbWFzayAmIDB4ZmY7IHRtcDsgdG1wID4+PSAxLCB1ZisrKSB7CisJCQlpZiAocGVyaW9kaWNfdXNlY3MgKGVoY2ksIGZyYW1lLCB1ZikgPiBtYXhfdXNlZCkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIGZvciBJTiwgY2hlY2sgQ1NQTElUICovCisJCWlmIChzdHJlYW0tPmNfdXNlY3MpIHsKKwkJCW1heF91c2VkID0gMTAwIC0gc3RyZWFtLT5jX3VzZWNzOworCQkJZG8geworCQkJCXRtcCA9IDEgPDwgdWY7CisJCQkJdG1wIDw8PSA4OworCQkJCWlmICgoc3RyZWFtLT5yYXdfbWFzayAmIHRtcCkgPT0gMCkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKHBlcmlvZGljX3VzZWNzIChlaGNpLCBmcmFtZSwgdWYpCisJCQkJCQk+IG1heF91c2VkKQorCQkJCQlyZXR1cm4gMDsKKwkJCX0gd2hpbGUgKCsrdWYgPCA4KTsKKwkJfQorCisJCS8qIHdlIGtub3cgdXJiLT5pbnRlcnZhbCBpcyAyXk4gdWZyYW1lcyAqLworCQl1ZnJhbWUgKz0gcGVyaW9kX3VmcmFtZXM7CisJfSB3aGlsZSAodWZyYW1lIDwgbW9kKTsKKworCXN0cmVhbS0+c3BsaXRzID0gY3B1X3RvX2xlMzIoc3RyZWFtLT5yYXdfbWFzayA8PCAodWZyYW1lICYgNykpOworCXJldHVybiAxOworfQorCisvKgorICogVGhpcyBzY2hlZHVsZXIgcGxhbnMgYWxtb3N0IGFzIGZhciBpbnRvIHRoZSBmdXR1cmUgYXMgaXQgaGFzIGFjdHVhbAorICogcGVyaW9kaWMgc2NoZWR1bGUgc2xvdHMuICAoQWZmZWN0ZWQgYnkgVFVORV9GTFMsIHdoaWNoIGRlZmF1bHRzIHRvCisgKiAiYXMgc21hbGwgYXMgcG9zc2libGUiIHRvIGJlIGNhY2hlLWZyaWVuZGxpZXIuKSAgVGhhdCBsaW1pdHMgdGhlIHNpemUKKyAqIHRyYW5zZmVycyB5b3UgY2FuIHN0cmVhbSByZWxpYWJseTsgYXZvaWQgbW9yZSB0aGFuIDY0IG1zZWMgcGVyIHVyYi4KKyAqIEFsc28gYXZvaWQgcXVldWUgZGVwdGhzIG9mIGxlc3MgdGhhbiBlaGNpJ3Mgd29yc3QgaXJxIGxhdGVuY3kgKGFmZmVjdGVkCisgKiBieSB0aGUgcGVyLXVyYiBVUkJfTk9fSU5URVJSVVBUIGhpbnQsIHRoZSBsb2cyX2lycV90aHJlc2ggbW9kdWxlIHBhcmFtZXRlciwKKyAqIGFuZCBvdGhlciBmYWN0b3JzKTsgb3IgbW9yZSB0aGFuIGFib3V0IDIzMCBtc2VjIHRvdGFsIChmb3IgcG9ydGFiaWxpdHksCisgKiBnaXZlbiBFSENJX1RVTkVfRkxTIGFuZCB0aGUgc2xvcCkuICBPciwgd3JpdGUgYSBzbWFydGVyIHNjaGVkdWxlciEKKyAqLworCisjZGVmaW5lIFNDSEVEVUxFX1NMT1AJMTAJLyogZnJhbWVzICovCisKK3N0YXRpYyBpbnQKK2lzb19zdHJlYW1fc2NoZWR1bGUgKAorCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2ksCisJc3RydWN0IHVyYgkJKnVyYiwKKwlzdHJ1Y3QgZWhjaV9pc29fc3RyZWFtCSpzdHJlYW0KKykKK3sKKwl1MzIJCQlub3csIHN0YXJ0LCBtYXgsIHBlcmlvZDsKKwlpbnQJCQlzdGF0dXM7CisJdW5zaWduZWQJCW1vZCA9IGVoY2ktPnBlcmlvZGljX3NpemUgPDwgMzsKKwlzdHJ1Y3QgZWhjaV9pc29fc2NoZWQJKnNjaGVkID0gdXJiLT5oY3ByaXY7CisKKwlpZiAoc2NoZWQtPnNwYW4gPiAobW9kIC0gOCAqIFNDSEVEVUxFX1NMT1ApKSB7CisJCWVoY2lfZGJnIChlaGNpLCAiaXNvIHJlcXVlc3QgJXAgdG9vIGxvbmdcbiIsIHVyYik7CisJCXN0YXR1cyA9IC1FRkJJRzsKKwkJZ290byBmYWlsOworCX0KKworCWlmICgoc3RyZWFtLT5kZXB0aCArIHNjaGVkLT5zcGFuKSA+IG1vZCkgeworCQllaGNpX2RiZyAoZWhjaSwgInJlcXVlc3QgJXAgd291bGQgb3ZlcmZsb3cgKCVkKyVkPiVkKVxuIiwKKwkJCXVyYiwgc3RyZWFtLT5kZXB0aCwgc2NoZWQtPnNwYW4sIG1vZCk7CisJCXN0YXR1cyA9IC1FRkJJRzsKKwkJZ290byBmYWlsOworCX0KKworCW5vdyA9IHJlYWRsICgmZWhjaS0+cmVncy0+ZnJhbWVfaW5kZXgpICUgbW9kOworCisJLyogd2hlbidzIHRoZSBsYXN0IHVmcmFtZSB0aGlzIHVyYiBjb3VsZCBzdGFydD8gKi8KKwltYXggPSBub3cgKyBtb2Q7CisKKwkvKiB0eXBpY2FsIGNhc2U6IHJldXNlIGN1cnJlbnQgc2NoZWR1bGUuIHN0cmVhbSBpcyBzdGlsbCBhY3RpdmUsCisJICogYW5kIG5vIGdhcHMgZnJvbSBob3N0IGZhbGxpbmcgYmVoaW5kIChpcnEgZGVsYXlzIGV0YykKKwkgKi8KKwlpZiAobGlrZWx5ICghbGlzdF9lbXB0eSAoJnN0cmVhbS0+dGRfbGlzdCkpKSB7CisJCXN0YXJ0ID0gc3RyZWFtLT5uZXh0X3VmcmFtZTsKKwkJaWYgKHN0YXJ0IDwgbm93KQorCQkJc3RhcnQgKz0gbW9kOworCQlpZiAobGlrZWx5ICgoc3RhcnQgKyBzY2hlZC0+c3BhbikgPCBtYXgpKQorCQkJZ290byByZWFkeTsKKwkJLyogZWxzZSBmZWxsIGJlaGluZDsgc29tZWRheSwgdHJ5IHRvIHJlc2NoZWR1bGUgKi8KKwkJc3RhdHVzID0gLUVMMk5TWU5DOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogbmVlZCB0byBzY2hlZHVsZTsgd2hlbidzIHRoZSBuZXh0ICh1KWZyYW1lIHdlIGNvdWxkIHN0YXJ0PworCSAqIHRoaXMgaXMgYmlnZ2VyIHRoYW4gZWhjaS0+aV90aHJlc2ggYWxsb3dzOyBzY2hlZHVsaW5nIGl0c2VsZgorCSAqIGlzbid0IGZyZWUsIHRoZSBzbG9wIHNob3VsZCBoYW5kbGUgcmVhc29uYWJseSBzbG93IGNwdXMuICBpdAorCSAqIGNhbiBhbHNvIGhlbHAgaGlnaCBiYW5kd2lkdGggaWYgdGhlIGRtYSBhbmQgaXJxIGxvYWRzIGRvbid0CisJICoganVtcCB1bnRpbCBhZnRlciB0aGUgcXVldWUgaXMgcHJpbWVkLgorCSAqLworCXN0YXJ0ID0gU0NIRURVTEVfU0xPUCAqIDggKyAobm93ICYgfjB4MDcpOworCXN0YXJ0ICU9IG1vZDsKKwlzdHJlYW0tPm5leHRfdWZyYW1lID0gc3RhcnQ7CisKKwkvKiBOT1RFOiAgYXNzdW1lcyBVUkJfSVNPX0FTQVAsIHRvIGxpbWl0IGNvbXBsZXhpdHkvYnVncyAqLworCisJcGVyaW9kID0gdXJiLT5pbnRlcnZhbDsKKwlpZiAoIXN0cmVhbS0+aGlnaHNwZWVkKQorCQlwZXJpb2QgPDw9IDM7CisKKwkvKiBmaW5kIGEgdWZyYW1lIHNsb3Qgd2l0aCBlbm91Z2ggYmFuZHdpZHRoICovCisJZm9yICg7IHN0YXJ0IDwgKHN0cmVhbS0+bmV4dF91ZnJhbWUgKyBwZXJpb2QpOyBzdGFydCsrKSB7CisJCWludAkJZW5vdWdoX3NwYWNlOworCisJCS8qIGNoZWNrIHNjaGVkdWxlOiBlbm91Z2ggc3BhY2U/ICovCisJCWlmIChzdHJlYW0tPmhpZ2hzcGVlZCkKKwkJCWVub3VnaF9zcGFjZSA9IGl0ZF9zbG90X29rIChlaGNpLCBtb2QsIHN0YXJ0LAorCQkJCQlzdHJlYW0tPnVzZWNzLCBwZXJpb2QpOworCQllbHNlIHsKKwkJCWlmICgoc3RhcnQgJSA4KSA+PSA2KQorCQkJCWNvbnRpbnVlOworCQkJZW5vdWdoX3NwYWNlID0gc2l0ZF9zbG90X29rIChlaGNpLCBtb2QsIHN0cmVhbSwKKwkJCQkJc3RhcnQsIHNjaGVkLCBwZXJpb2QpOworCQl9CisKKwkJLyogc2NoZWR1bGUgaXQgaGVyZSBpZiB0aGVyZSdzIGVub3VnaCBiYW5kd2lkdGggKi8KKwkJaWYgKGVub3VnaF9zcGFjZSkgeworCQkJc3RyZWFtLT5uZXh0X3VmcmFtZSA9IHN0YXJ0ICUgbW9kOworCQkJZ290byByZWFkeTsKKwkJfQorCX0KKworCS8qIG5vIHJvb20gaW4gdGhlIHNjaGVkdWxlICovCisJZWhjaV9kYmcgKGVoY2ksICJpc28gJXNzY2hlZCBmdWxsICVwIChub3cgJWQgbWF4ICVkKVxuIiwKKwkJbGlzdF9lbXB0eSAoJnN0cmVhbS0+dGRfbGlzdCkgPyAiIiA6ICJyZSIsCisJCXVyYiwgbm93LCBtYXgpOworCXN0YXR1cyA9IC1FTk9TUEM7CisKK2ZhaWw6CisJaXNvX3NjaGVkX2ZyZWUgKHN0cmVhbSwgc2NoZWQpOworCXVyYi0+aGNwcml2ID0gTlVMTDsKKwlyZXR1cm4gc3RhdHVzOworCityZWFkeToKKwkvKiByZXBvcnQgaGlnaCBzcGVlZCBzdGFydCBpbiB1ZnJhbWVzOyBmdWxsIHNwZWVkLCBpbiBmcmFtZXMgKi8KKwl1cmItPnN0YXJ0X2ZyYW1lID0gc3RyZWFtLT5uZXh0X3VmcmFtZTsKKwlpZiAoIXN0cmVhbS0+aGlnaHNwZWVkKQorCQl1cmItPnN0YXJ0X2ZyYW1lID4+PSAzOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2l0ZF9pbml0IChzdHJ1Y3QgZWhjaV9pc29fc3RyZWFtICpzdHJlYW0sIHN0cnVjdCBlaGNpX2l0ZCAqaXRkKQoreworCWludCBpOworCisJaXRkLT5od19uZXh0ID0gRUhDSV9MSVNUX0VORDsKKwlpdGQtPmh3X2J1ZnAgWzBdID0gc3RyZWFtLT5idWYwOworCWl0ZC0+aHdfYnVmcCBbMV0gPSBzdHJlYW0tPmJ1ZjE7CisJaXRkLT5od19idWZwIFsyXSA9IHN0cmVhbS0+YnVmMjsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCWl0ZC0+aW5kZXhbaV0gPSAtMTsKKworCS8qIEFsbCBvdGhlciBmaWVsZHMgYXJlIGZpbGxlZCB3aGVuIHNjaGVkdWxpbmcgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkCitpdGRfcGF0Y2ggKAorCXN0cnVjdCBlaGNpX2l0ZAkJKml0ZCwKKwlzdHJ1Y3QgZWhjaV9pc29fc2NoZWQJKmlzb19zY2hlZCwKKwl1bnNpZ25lZAkJaW5kZXgsCisJdTE2CQkJdWZyYW1lLAorCWludAkJCWZpcnN0CispCit7CisJc3RydWN0IGVoY2lfaXNvX3BhY2tldAkqdWYgPSAmaXNvX3NjaGVkLT5wYWNrZXQgW2luZGV4XTsKKwl1bnNpZ25lZAkJcGcgPSBpdGQtPnBnOworCisJLy8gQlVHX09OIChwZyA9PSA2ICYmIHVmLT5jcm9zcyk7CisKKwl1ZnJhbWUgJj0gMHgwNzsKKwlpdGQtPmluZGV4IFt1ZnJhbWVdID0gaW5kZXg7CisKKwlpdGQtPmh3X3RyYW5zYWN0aW9uIFt1ZnJhbWVdID0gdWYtPnRyYW5zYWN0aW9uOworCWl0ZC0+aHdfdHJhbnNhY3Rpb24gW3VmcmFtZV0gfD0gY3B1X3RvX2xlMzIgKHBnIDw8IDEyKTsKKwlpdGQtPmh3X2J1ZnAgW3BnXSB8PSBjcHVfdG9fbGUzMiAodWYtPmJ1ZnAgJiB+KHUzMikwKTsKKwlpdGQtPmh3X2J1ZnBfaGkgW3BnXSB8PSBjcHVfdG9fbGUzMiAoKHUzMikodWYtPmJ1ZnAgPj4gMzIpKTsKKworCS8qIGlzb19mcmFtZV9kZXNjW10ub2Zmc2V0IG11c3QgYmUgc3RyaWN0bHkgaW5jcmVhc2luZyAqLworCWlmICh1bmxpa2VseSAoIWZpcnN0ICYmIHVmLT5jcm9zcykpIHsKKwkJdTY0CWJ1ZnAgPSB1Zi0+YnVmcCArIDQwOTY7CisJCWl0ZC0+cGcgPSArK3BnOworCQlpdGQtPmh3X2J1ZnAgW3BnXSB8PSBjcHVfdG9fbGUzMiAoYnVmcCAmIH4odTMyKTApOworCQlpdGQtPmh3X2J1ZnBfaGkgW3BnXSB8PSBjcHVfdG9fbGUzMiAoKHUzMikoYnVmcCA+PiAzMikpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkCitpdGRfbGluayAoc3RydWN0IGVoY2lfaGNkICplaGNpLCB1bnNpZ25lZCBmcmFtZSwgc3RydWN0IGVoY2lfaXRkICppdGQpCit7CisJLyogYWx3YXlzIHByZXBlbmQgSVREL1NJVEQgLi4uIG9ubHkgUUggdHJlZSBpcyBvcmRlci1zZW5zaXRpdmUgKi8KKwlpdGQtPml0ZF9uZXh0ID0gZWhjaS0+cHNoYWRvdyBbZnJhbWVdOworCWl0ZC0+aHdfbmV4dCA9IGVoY2ktPnBlcmlvZGljIFtmcmFtZV07CisJZWhjaS0+cHNoYWRvdyBbZnJhbWVdLml0ZCA9IGl0ZDsKKwlpdGQtPmZyYW1lID0gZnJhbWU7CisJd21iICgpOworCWVoY2ktPnBlcmlvZGljIFtmcmFtZV0gPSBjcHVfdG9fbGUzMiAoaXRkLT5pdGRfZG1hKSB8IFFfVFlQRV9JVEQ7Cit9CisKKy8qIGZpdCB1cmIncyBpdGRzIGludG8gdGhlIHNlbGVjdGVkIHNjaGVkdWxlIHNsb3Q7IGFjdGl2YXRlIGFzIG5lZWRlZCAqLworc3RhdGljIGludAoraXRkX2xpbmtfdXJiICgKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpLAorCXN0cnVjdCB1cmIJCSp1cmIsCisJdW5zaWduZWQJCW1vZCwKKwlzdHJ1Y3QgZWhjaV9pc29fc3RyZWFtCSpzdHJlYW0KKykKK3sKKwlpbnQJCQlwYWNrZXQsIGZpcnN0ID0gMTsKKwl1bnNpZ25lZAkJbmV4dF91ZnJhbWUsIHVmcmFtZSwgZnJhbWU7CisJc3RydWN0IGVoY2lfaXNvX3NjaGVkCSppc29fc2NoZWQgPSB1cmItPmhjcHJpdjsKKwlzdHJ1Y3QgZWhjaV9pdGQJCSppdGQ7CisKKwluZXh0X3VmcmFtZSA9IHN0cmVhbS0+bmV4dF91ZnJhbWUgJSBtb2Q7CisKKwlpZiAodW5saWtlbHkgKGxpc3RfZW1wdHkoJnN0cmVhbS0+dGRfbGlzdCkpKSB7CisJCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9hbGxvY2F0ZWQKKwkJCQkrPSBzdHJlYW0tPmJhbmR3aWR0aDsKKwkJZWhjaV92ZGJnIChlaGNpLAorCQkJInNjaGVkdWxlIGRldnAgJXMgZXAlZCVzLWlzbyBwZXJpb2QgJWQgc3RhcnQgJWQuJWRcbiIsCisJCQl1cmItPmRldi0+ZGV2cGF0aCwgc3RyZWFtLT5iRW5kcG9pbnRBZGRyZXNzICYgMHgwZiwKKwkJCShzdHJlYW0tPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSA/ICJpbiIgOiAib3V0IiwKKwkJCXVyYi0+aW50ZXJ2YWwsCisJCQluZXh0X3VmcmFtZSA+PiAzLCBuZXh0X3VmcmFtZSAmIDB4Nyk7CisJCXN0cmVhbS0+c3RhcnQgPSBqaWZmaWVzOworCX0KKwllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzKys7CisKKwkvKiBmaWxsIGlURHMgdWZyYW1lIGJ5IHVmcmFtZSAqLworCWZvciAocGFja2V0ID0gMCwgaXRkID0gTlVMTDsgcGFja2V0IDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgKSB7CisJCWlmIChpdGQgPT0gTlVMTCkgeworCQkJLyogQVNTRVJUOiAgd2UgaGF2ZSBhbGwgbmVjZXNzYXJ5IGl0ZHMgKi8KKwkJCS8vIEJVR19PTiAobGlzdF9lbXB0eSAoJmlzb19zY2hlZC0+dGRfbGlzdCkpOworCisJCQkvKiBBU1NFUlQ6ICBubyBpdGRzIGZvciB0aGlzIGVuZHBvaW50IGluIHRoaXMgdWZyYW1lICovCisKKwkJCWl0ZCA9IGxpc3RfZW50cnkgKGlzb19zY2hlZC0+dGRfbGlzdC5uZXh0LAorCQkJCQlzdHJ1Y3QgZWhjaV9pdGQsIGl0ZF9saXN0KTsKKwkJCWxpc3RfbW92ZV90YWlsICgmaXRkLT5pdGRfbGlzdCwgJnN0cmVhbS0+dGRfbGlzdCk7CisJCQlpdGQtPnN0cmVhbSA9IGlzb19zdHJlYW1fZ2V0IChzdHJlYW0pOworCQkJaXRkLT51cmIgPSB1c2JfZ2V0X3VyYiAodXJiKTsKKwkJCWZpcnN0ID0gMTsKKwkJCWl0ZF9pbml0IChzdHJlYW0sIGl0ZCk7CisJCX0KKworCQl1ZnJhbWUgPSBuZXh0X3VmcmFtZSAmIDB4MDc7CisJCWZyYW1lID0gbmV4dF91ZnJhbWUgPj4gMzsKKworCQlpdGQtPnVzZWNzIFt1ZnJhbWVdID0gc3RyZWFtLT51c2VjczsKKwkJaXRkX3BhdGNoIChpdGQsIGlzb19zY2hlZCwgcGFja2V0LCB1ZnJhbWUsIGZpcnN0KTsKKwkJZmlyc3QgPSAwOworCisJCW5leHRfdWZyYW1lICs9IHN0cmVhbS0+aW50ZXJ2YWw7CisJCXN0cmVhbS0+ZGVwdGggKz0gc3RyZWFtLT5pbnRlcnZhbDsKKwkJbmV4dF91ZnJhbWUgJT0gbW9kOworCQlwYWNrZXQrKzsKKworCQkvKiBsaW5rIGNvbXBsZXRlZCBpdGRzIGludG8gdGhlIHNjaGVkdWxlICovCisJCWlmICgoKG5leHRfdWZyYW1lID4+IDMpICE9IGZyYW1lKQorCQkJCXx8IHBhY2tldCA9PSB1cmItPm51bWJlcl9vZl9wYWNrZXRzKSB7CisJCQlpdGRfbGluayAoZWhjaSwgZnJhbWUgJSBlaGNpLT5wZXJpb2RpY19zaXplLCBpdGQpOworCQkJaXRkID0gTlVMTDsKKwkJfQorCX0KKwlzdHJlYW0tPm5leHRfdWZyYW1lID0gbmV4dF91ZnJhbWU7CisKKwkvKiBkb24ndCBuZWVkIHRoYXQgc2NoZWR1bGUgZGF0YSBhbnkgbW9yZSAqLworCWlzb19zY2hlZF9mcmVlIChzdHJlYW0sIGlzb19zY2hlZCk7CisJdXJiLT5oY3ByaXYgPSBOVUxMOworCisJdGltZXJfYWN0aW9uIChlaGNpLCBUSU1FUl9JT19XQVRDSERPRyk7CisJaWYgKHVubGlrZWx5ICghZWhjaS0+cGVyaW9kaWNfc2NoZWQrKykpCisJCXJldHVybiBlbmFibGVfcGVyaW9kaWMgKGVoY2kpOworCXJldHVybiAwOworfQorCisjZGVmaW5lCUlTT19FUlJTIChFSENJX0lTT0NfQlVGX0VSUiB8IEVIQ0lfSVNPQ19CQUJCTEUgfCBFSENJX0lTT0NfWEFDVEVSUikKKworc3RhdGljIHVuc2lnbmVkCitpdGRfY29tcGxldGUgKAorCXN0cnVjdCBlaGNpX2hjZAkqZWhjaSwKKwlzdHJ1Y3QgZWhjaV9pdGQJKml0ZCwKKwlzdHJ1Y3QgcHRfcmVncwkqcmVncworKSB7CisJc3RydWN0IHVyYgkJCQkqdXJiID0gaXRkLT51cmI7CisJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IJKmRlc2M7CisJdTMyCQkJCQl0OworCXVuc2lnbmVkCQkJCXVmcmFtZTsKKwlpbnQJCQkJCXVyYl9pbmRleCA9IC0xOworCXN0cnVjdCBlaGNpX2lzb19zdHJlYW0JCQkqc3RyZWFtID0gaXRkLT5zdHJlYW07CisJc3RydWN0IHVzYl9kZXZpY2UJCQkqZGV2OworCisJLyogZm9yIGVhY2ggdWZyYW1lIHdpdGggYSBwYWNrZXQgKi8KKwlmb3IgKHVmcmFtZSA9IDA7IHVmcmFtZSA8IDg7IHVmcmFtZSsrKSB7CisJCWlmIChsaWtlbHkgKGl0ZC0+aW5kZXhbdWZyYW1lXSA9PSAtMSkpCisJCQljb250aW51ZTsKKwkJdXJiX2luZGV4ID0gaXRkLT5pbmRleFt1ZnJhbWVdOworCQlkZXNjID0gJnVyYi0+aXNvX2ZyYW1lX2Rlc2MgW3VyYl9pbmRleF07CisKKwkJdCA9IGxlMzJfdG9fY3B1cCAoJml0ZC0+aHdfdHJhbnNhY3Rpb24gW3VmcmFtZV0pOworCQlpdGQtPmh3X3RyYW5zYWN0aW9uIFt1ZnJhbWVdID0gMDsKKwkJc3RyZWFtLT5kZXB0aCAtPSBzdHJlYW0tPmludGVydmFsOworCisJCS8qIHJlcG9ydCB0cmFuc2ZlciBzdGF0dXMgKi8KKwkJaWYgKHVubGlrZWx5ICh0ICYgSVNPX0VSUlMpKSB7CisJCQl1cmItPmVycm9yX2NvdW50Kys7CisJCQlpZiAodCAmIEVIQ0lfSVNPQ19CVUZfRVJSKQorCQkJCWRlc2MtPnN0YXR1cyA9IHVzYl9waXBlaW4gKHVyYi0+cGlwZSkKKwkJCQkJPyAtRU5PU1IgIC8qIGhjIGNvdWxkbid0IHJlYWQgKi8KKwkJCQkJOiAtRUNPTU07IC8qIGhjIGNvdWxkbid0IHdyaXRlICovCisJCQllbHNlIGlmICh0ICYgRUhDSV9JU09DX0JBQkJMRSkKKwkJCQlkZXNjLT5zdGF0dXMgPSAtRU9WRVJGTE9XOworCQkJZWxzZSAvKiAodCAmIEVIQ0lfSVNPQ19YQUNURVJSKSAqLworCQkJCWRlc2MtPnN0YXR1cyA9IC1FUFJPVE87CisKKwkJCS8qIEhDIG5lZWQgbm90IHVwZGF0ZSBsZW5ndGggd2l0aCB0aGlzIGVycm9yICovCisJCQlpZiAoISh0ICYgRUhDSV9JU09DX0JBQkJMRSkpCisJCQkJZGVzYy0+YWN0dWFsX2xlbmd0aCA9IEVIQ0lfSVREX0xFTkdUSCAodCk7CisJCX0gZWxzZSBpZiAobGlrZWx5ICgodCAmIEVIQ0lfSVNPQ19BQ1RJVkUpID09IDApKSB7CisJCQlkZXNjLT5zdGF0dXMgPSAwOworCQkJZGVzYy0+YWN0dWFsX2xlbmd0aCA9IEVIQ0lfSVREX0xFTkdUSCAodCk7CisJCX0KKwl9CisKKwl1c2JfcHV0X3VyYiAodXJiKTsKKwlpdGQtPnVyYiA9IE5VTEw7CisJaXRkLT5zdHJlYW0gPSBOVUxMOworCWxpc3RfbW92ZSAoJml0ZC0+aXRkX2xpc3QsICZzdHJlYW0tPmZyZWVfbGlzdCk7CisJaXNvX3N0cmVhbV9wdXQgKGVoY2ksIHN0cmVhbSk7CisKKwkvKiBoYW5kbGUgY29tcGxldGlvbiBub3c/ICovCisJaWYgKGxpa2VseSAoKHVyYl9pbmRleCArIDEpICE9IHVyYi0+bnVtYmVyX29mX3BhY2tldHMpKQorCQlyZXR1cm4gMDsKKworCS8qIEFTU0VSVDogaXQncyByZWFsbHkgdGhlIGxhc3QgaXRkIGZvciB0aGlzIHVyYgorCWxpc3RfZm9yX2VhY2hfZW50cnkgKGl0ZCwgJnN0cmVhbS0+dGRfbGlzdCwgaXRkX2xpc3QpCisJCUJVR19PTiAoaXRkLT51cmIgPT0gdXJiKTsKKwkgKi8KKworCS8qIGdpdmUgdXJiIGJhY2sgdG8gdGhlIGRyaXZlciAuLi4gY2FuIGJlIG91dC1vZi1vcmRlciAqLworCWRldiA9IHVzYl9nZXRfZGV2ICh1cmItPmRldik7CisJZWhjaV91cmJfZG9uZSAoZWhjaSwgdXJiLCByZWdzKTsKKwl1cmIgPSBOVUxMOworCisJLyogZGVmZXIgc3RvcHBpbmcgc2NoZWR1bGU7IGNvbXBsZXRpb24gY2FuIHN1Ym1pdCAqLworCWVoY2ktPnBlcmlvZGljX3NjaGVkLS07CisJaWYgKHVubGlrZWx5ICghZWhjaS0+cGVyaW9kaWNfc2NoZWQpKQorCQkodm9pZCkgZGlzYWJsZV9wZXJpb2RpYyAoZWhjaSk7CisJZWhjaV90b19oY2QoZWhjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcy0tOworCisJaWYgKHVubGlrZWx5IChsaXN0X2VtcHR5ICgmc3RyZWFtLT50ZF9saXN0KSkpIHsKKwkJZWhjaV90b19oY2QoZWhjaSktPnNlbGYuYmFuZHdpZHRoX2FsbG9jYXRlZAorCQkJCS09IHN0cmVhbS0+YmFuZHdpZHRoOworCQllaGNpX3ZkYmcgKGVoY2ksCisJCQkiZGVzY2hlZHVsZSBkZXZwICVzIGVwJWQlcy1pc29cbiIsCisJCQlkZXYtPmRldnBhdGgsIHN0cmVhbS0+YkVuZHBvaW50QWRkcmVzcyAmIDB4MGYsCisJCQkoc3RyZWFtLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgPyAiaW4iIDogIm91dCIpOworCX0KKwlpc29fc3RyZWFtX3B1dCAoZWhjaSwgc3RyZWFtKTsKKwl1c2JfcHV0X2RldiAoZGV2KTsKKworCXJldHVybiAxOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IGl0ZF9zdWJtaXQgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IHVyYiAqdXJiLCBpbnQgbWVtX2ZsYWdzKQoreworCWludAkJCXN0YXR1cyA9IC1FSU5WQUw7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJc3RydWN0IGVoY2lfaXNvX3N0cmVhbQkqc3RyZWFtOworCisJLyogR2V0IGlzb19zdHJlYW0gaGVhZCAqLworCXN0cmVhbSA9IGlzb19zdHJlYW1fZmluZCAoZWhjaSwgdXJiKTsKKwlpZiAodW5saWtlbHkgKHN0cmVhbSA9PSBOVUxMKSkgeworCQllaGNpX2RiZyAoZWhjaSwgImNhbid0IGdldCBpc28gc3RyZWFtXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWlmICh1bmxpa2VseSAodXJiLT5pbnRlcnZhbCAhPSBzdHJlYW0tPmludGVydmFsKSkgeworCQllaGNpX2RiZyAoZWhjaSwgImNhbid0IGNoYW5nZSBpc28gaW50ZXJ2YWwgJWQgLS0+ICVkXG4iLAorCQkJc3RyZWFtLT5pbnRlcnZhbCwgdXJiLT5pbnRlcnZhbCk7CisJCWdvdG8gZG9uZTsKKwl9CisKKyNpZmRlZiBFSENJX1VSQl9UUkFDRQorCWVoY2lfZGJnIChlaGNpLAorCQkiJXMgJXMgdXJiICVwIGVwJWQlcyBsZW4gJWQsICVkIHBrdHMgJWQgdWZyYW1lcyBbJXBdXG4iLAorCQlfX0ZVTkNUSU9OX18sIHVyYi0+ZGV2LT5kZXZwYXRoLCB1cmIsCisJCXVzYl9waXBlZW5kcG9pbnQgKHVyYi0+cGlwZSksCisJCXVzYl9waXBlaW4gKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIsCisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cywgdXJiLT5pbnRlcnZhbCwKKwkJc3RyZWFtKTsKKyNlbmRpZgorCisJLyogYWxsb2NhdGUgSVREcyB3L28gbG9ja2luZyBhbnl0aGluZyAqLworCXN0YXR1cyA9IGl0ZF91cmJfdHJhbnNhY3Rpb24gKHN0cmVhbSwgZWhjaSwgdXJiLCBtZW1fZmxhZ3MpOworCWlmICh1bmxpa2VseSAoc3RhdHVzIDwgMCkpIHsKKwkJZWhjaV9kYmcgKGVoY2ksICJjYW4ndCBpbml0IGl0ZHNcbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogc2NoZWR1bGUgLi4uIG5lZWQgdG8gbG9jayAqLworCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCXN0YXR1cyA9IGlzb19zdHJlYW1fc2NoZWR1bGUgKGVoY2ksIHVyYiwgc3RyZWFtKTsKKyAJaWYgKGxpa2VseSAoc3RhdHVzID09IDApKQorCQlpdGRfbGlua191cmIgKGVoY2ksIHVyYiwgZWhjaS0+cGVyaW9kaWNfc2l6ZSA8PCAzLCBzdHJlYW0pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisKK2RvbmU6CisJaWYgKHVubGlrZWx5IChzdGF0dXMgPCAwKSkKKwkJaXNvX3N0cmVhbV9wdXQgKGVoY2ksIHN0cmVhbSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworI2lmZGVmIENPTkZJR19VU0JfRUhDSV9TUExJVF9JU08KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqICJTcGxpdCBJU08gVERzIiAuLi4gdXNlZCBmb3IgVVNCIDEuMSBkZXZpY2VzIGdvaW5nIHRocm91Z2ggdGhlCisgKiBUVHMgaW4gVVNCIDIuMCBodWJzLiAgVGhlc2UgbmVlZCBtaWNyb2ZyYW1lIHNjaGVkdWxpbmcuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitzaXRkX3NjaGVkX2luaXQgKAorCXN0cnVjdCBlaGNpX2lzb19zY2hlZAkqaXNvX3NjaGVkLAorCXN0cnVjdCBlaGNpX2lzb19zdHJlYW0JKnN0cmVhbSwKKwlzdHJ1Y3QgdXJiCQkqdXJiCispCit7CisJdW5zaWduZWQJaTsKKwlkbWFfYWRkcl90CWRtYSA9IHVyYi0+dHJhbnNmZXJfZG1hOworCisJLyogaG93IG1hbnkgZnJhbWVzIGFyZSBuZWVkZWQgZm9yIHRoZXNlIHRyYW5zZmVycyAqLworCWlzb19zY2hlZC0+c3BhbiA9IHVyYi0+bnVtYmVyX29mX3BhY2tldHMgKiBzdHJlYW0tPmludGVydmFsOworCisJLyogZmlndXJlIG91dCBwZXItZnJhbWUgc2l0ZCBmaWVsZHMgdGhhdCB3ZSdsbCBuZWVkIGxhdGVyCisJICogd2hlbiB3ZSBmaXQgbmV3IHNpdGRzIGludG8gdGhlIHNjaGVkdWxlLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJc3RydWN0IGVoY2lfaXNvX3BhY2tldAkqcGFja2V0ID0gJmlzb19zY2hlZC0+cGFja2V0IFtpXTsKKwkJdW5zaWduZWQJCWxlbmd0aDsKKwkJZG1hX2FkZHJfdAkJYnVmOworCQl1MzIJCQl0cmFuczsKKworCQlsZW5ndGggPSB1cmItPmlzb19mcmFtZV9kZXNjIFtpXS5sZW5ndGggJiAweDAzZmY7CisJCWJ1ZiA9IGRtYSArIHVyYi0+aXNvX2ZyYW1lX2Rlc2MgW2ldLm9mZnNldDsKKworCQl0cmFucyA9IFNJVERfU1RTX0FDVElWRTsKKwkJaWYgKCgoaSArIDEpID09IHVyYi0+bnVtYmVyX29mX3BhY2tldHMpCisJCQkJJiYgISh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX05PX0lOVEVSUlVQVCkpCisJCQl0cmFucyB8PSBTSVREX0lPQzsKKwkJdHJhbnMgfD0gbGVuZ3RoIDw8IDE2OworCQlwYWNrZXQtPnRyYW5zYWN0aW9uID0gY3B1X3RvX2xlMzIgKHRyYW5zKTsKKworCQkvKiBtaWdodCBuZWVkIHRvIGNyb3NzIGEgYnVmZmVyIHBhZ2Ugd2l0aGluIGEgdGQgKi8KKwkJcGFja2V0LT5idWZwID0gYnVmOworCQlwYWNrZXQtPmJ1ZjEgPSAoYnVmICsgbGVuZ3RoKSAmIH4weDBmZmY7CisJCWlmIChwYWNrZXQtPmJ1ZjEgIT0gKGJ1ZiAmIH4odTY0KTB4MGZmZikpCisJCQlwYWNrZXQtPmNyb3NzID0gMTsKKworCQkvKiBPVVQgdXNlcyBtdWx0aXBsZSBzdGFydC1zcGxpdHMgKi8gCisJCWlmIChzdHJlYW0tPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKQorCQkJY29udGludWU7CisJCWxlbmd0aCA9IChsZW5ndGggKyAxODcpIC8gMTg4OworCQlpZiAobGVuZ3RoID4gMSkgLyogQkVHSU4gdnMgQUxMICovCisJCQlsZW5ndGggfD0gMSA8PCAzOworCQlwYWNrZXQtPmJ1ZjEgfD0gbGVuZ3RoOworCX0KK30KKworc3RhdGljIGludAorc2l0ZF91cmJfdHJhbnNhY3Rpb24gKAorCXN0cnVjdCBlaGNpX2lzb19zdHJlYW0JKnN0cmVhbSwKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpLAorCXN0cnVjdCB1cmIJCSp1cmIsCisJaW50CQkJbWVtX2ZsYWdzCispCit7CisJc3RydWN0IGVoY2lfc2l0ZAkqc2l0ZDsKKwlkbWFfYWRkcl90CQlzaXRkX2RtYTsKKwlpbnQJCQlpOworCXN0cnVjdCBlaGNpX2lzb19zY2hlZAkqaXNvX3NjaGVkOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJaXNvX3NjaGVkID0gaXNvX3NjaGVkX2FsbG9jICh1cmItPm51bWJlcl9vZl9wYWNrZXRzLCBtZW1fZmxhZ3MpOworCWlmIChpc29fc2NoZWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzaXRkX3NjaGVkX2luaXQgKGlzb19zY2hlZCwgc3RyZWFtLCB1cmIpOworCisJLyogYWxsb2NhdGUvaW5pdCBzSVREcyAqLworCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKworCQkvKiBOT1RFOiAgZm9yIG5vdywgd2UgZG9uJ3QgdHJ5IHRvIGhhbmRsZSB3cmFwYXJvdW5kIGNhc2VzCisJCSAqIGZvciBJTiAodXNpbmcgc2l0ZC0+aHdfYmFja3BvaW50ZXIsIGxpa2UgYSBGU1ROKSwgd2hpY2gKKwkJICogbWVhbnMgd2UgbmV2ZXIgbmVlZCB0d28gc2l0ZHMgZm9yIGZ1bGwgc3BlZWQgcGFja2V0cy4KKwkJICovCisKKwkJLyogZnJlZV9saXN0Lm5leHQgbWlnaHQgYmUgY2FjaGUtaG90IC4uLiBidXQgbWF5YmUKKwkJICogdGhlIEhDIGNhY2hlcyBpdCB0b28uIGF2b2lkIHRoYXQgaXNzdWUgZm9yIG5vdy4KKwkJICovCisKKwkJLyogcHJlZmVyIHByZXZpb3VzbHktYWxsb2NhdGVkIHNpdGRzICovCisJCWlmICghbGlzdF9lbXB0eSgmc3RyZWFtLT5mcmVlX2xpc3QpKSB7CisJCQlzaXRkID0gbGlzdF9lbnRyeSAoc3RyZWFtLT5mcmVlX2xpc3QucHJldiwKKwkJCQkJIHN0cnVjdCBlaGNpX3NpdGQsIHNpdGRfbGlzdCk7CisJCQlsaXN0X2RlbCAoJnNpdGQtPnNpdGRfbGlzdCk7CisJCQlzaXRkX2RtYSA9IHNpdGQtPnNpdGRfZG1hOworCQl9IGVsc2UKKwkJCXNpdGQgPSBOVUxMOworCisJCWlmICghc2l0ZCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwkJCXNpdGQgPSBkbWFfcG9vbF9hbGxvYyAoZWhjaS0+c2l0ZF9wb29sLCBtZW1fZmxhZ3MsCisJCQkJCSZzaXRkX2RtYSk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwkJfQorCisJCWlmICghc2l0ZCkgeworCQkJaXNvX3NjaGVkX2ZyZWUgKHN0cmVhbSwgaXNvX3NjaGVkKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQltZW1zZXQgKHNpdGQsIDAsIHNpemVvZiAqc2l0ZCk7CisJCXNpdGQtPnNpdGRfZG1hID0gc2l0ZF9kbWE7CisJCWxpc3RfYWRkICgmc2l0ZC0+c2l0ZF9saXN0LCAmaXNvX3NjaGVkLT50ZF9saXN0KTsKKwl9CisKKwkvKiB0ZW1wb3JhcmlseSBzdG9yZSBzY2hlZHVsZSBpbmZvIGluIGhjcHJpdiAqLworCXVyYi0+aGNwcml2ID0gaXNvX3NjaGVkOworCXVyYi0+ZXJyb3JfY291bnQgPSAwOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSB2b2lkCitzaXRkX3BhdGNoICgKKwlzdHJ1Y3QgZWhjaV9pc29fc3RyZWFtCSpzdHJlYW0sCisJc3RydWN0IGVoY2lfc2l0ZAkqc2l0ZCwKKwlzdHJ1Y3QgZWhjaV9pc29fc2NoZWQJKmlzb19zY2hlZCwKKwl1bnNpZ25lZAkJaW5kZXgKKykKK3sKKwlzdHJ1Y3QgZWhjaV9pc29fcGFja2V0CSp1ZiA9ICZpc29fc2NoZWQtPnBhY2tldCBbaW5kZXhdOworCXU2NAkJCWJ1ZnAgPSB1Zi0+YnVmcDsKKworCXNpdGQtPmh3X25leHQgPSBFSENJX0xJU1RfRU5EOworCXNpdGQtPmh3X2Z1bGxzcGVlZF9lcCA9IHN0cmVhbS0+YWRkcmVzczsKKwlzaXRkLT5od191ZnJhbWUgPSBzdHJlYW0tPnNwbGl0czsKKwlzaXRkLT5od19yZXN1bHRzID0gdWYtPnRyYW5zYWN0aW9uOworCXNpdGQtPmh3X2JhY2twb2ludGVyID0gRUhDSV9MSVNUX0VORDsKKworCWJ1ZnAgPSB1Zi0+YnVmcDsKKwlzaXRkLT5od19idWYgWzBdID0gY3B1X3RvX2xlMzIgKGJ1ZnApOworCXNpdGQtPmh3X2J1Zl9oaSBbMF0gPSBjcHVfdG9fbGUzMiAoYnVmcCA+PiAzMik7CisKKwlzaXRkLT5od19idWYgWzFdID0gY3B1X3RvX2xlMzIgKHVmLT5idWYxKTsKKwlpZiAodWYtPmNyb3NzKQorCQlidWZwICs9IDQwOTY7CisJc2l0ZC0+aHdfYnVmX2hpIFsxXSA9IGNwdV90b19sZTMyIChidWZwID4+IDMyKTsKKwlzaXRkLT5pbmRleCA9IGluZGV4OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3NpdGRfbGluayAoc3RydWN0IGVoY2lfaGNkICplaGNpLCB1bnNpZ25lZCBmcmFtZSwgc3RydWN0IGVoY2lfc2l0ZCAqc2l0ZCkKK3sKKwkvKiBub3RlOiBzaXRkIG9yZGVyaW5nIGNvdWxkIG1hdHRlciAoQ1NQTElUIHRoZW4gU1NQTElUKSAqLworCXNpdGQtPnNpdGRfbmV4dCA9IGVoY2ktPnBzaGFkb3cgW2ZyYW1lXTsKKwlzaXRkLT5od19uZXh0ID0gZWhjaS0+cGVyaW9kaWMgW2ZyYW1lXTsKKwllaGNpLT5wc2hhZG93IFtmcmFtZV0uc2l0ZCA9IHNpdGQ7CisJc2l0ZC0+ZnJhbWUgPSBmcmFtZTsKKwl3bWIgKCk7CisJZWhjaS0+cGVyaW9kaWMgW2ZyYW1lXSA9IGNwdV90b19sZTMyIChzaXRkLT5zaXRkX2RtYSkgfCBRX1RZUEVfU0lURDsKK30KKworLyogZml0IHVyYidzIHNpdGRzIGludG8gdGhlIHNlbGVjdGVkIHNjaGVkdWxlIHNsb3Q7IGFjdGl2YXRlIGFzIG5lZWRlZCAqLworc3RhdGljIGludAorc2l0ZF9saW5rX3VyYiAoCisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSwKKwlzdHJ1Y3QgdXJiCQkqdXJiLAorCXVuc2lnbmVkCQltb2QsCisJc3RydWN0IGVoY2lfaXNvX3N0cmVhbQkqc3RyZWFtCispCit7CisJaW50CQkJcGFja2V0OworCXVuc2lnbmVkCQluZXh0X3VmcmFtZTsKKwlzdHJ1Y3QgZWhjaV9pc29fc2NoZWQJKnNjaGVkID0gdXJiLT5oY3ByaXY7CisJc3RydWN0IGVoY2lfc2l0ZAkqc2l0ZDsKKworCW5leHRfdWZyYW1lID0gc3RyZWFtLT5uZXh0X3VmcmFtZTsKKworCWlmIChsaXN0X2VtcHR5KCZzdHJlYW0tPnRkX2xpc3QpKSB7CisJCS8qIHVzYmZzIGlnbm9yZXMgVFQgYmFuZHdpZHRoICovCisJCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9hbGxvY2F0ZWQKKwkJCQkrPSBzdHJlYW0tPmJhbmR3aWR0aDsKKwkJZWhjaV92ZGJnIChlaGNpLAorCQkJInNjaGVkIGRldnAgJXMgZXAlZCVzLWlzbyBbJWRdICVkbXMvJTA0eFxuIiwKKwkJCXVyYi0+ZGV2LT5kZXZwYXRoLCBzdHJlYW0tPmJFbmRwb2ludEFkZHJlc3MgJiAweDBmLAorCQkJKHN0cmVhbS0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pID8gImluIiA6ICJvdXQiLAorCQkJKG5leHRfdWZyYW1lID4+IDMpICUgZWhjaS0+cGVyaW9kaWNfc2l6ZSwKKwkJCXN0cmVhbS0+aW50ZXJ2YWwsIGxlMzJfdG9fY3B1IChzdHJlYW0tPnNwbGl0cykpOworCQlzdHJlYW0tPnN0YXJ0ID0gamlmZmllczsKKwl9CisJZWhjaV90b19oY2QoZWhjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcysrOworCisJLyogZmlsbCBzSVREcyBmcmFtZSBieSBmcmFtZSAqLworCWZvciAocGFja2V0ID0gMCwgc2l0ZCA9IE5VTEw7CisJCQlwYWNrZXQgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOworCQkJcGFja2V0KyspIHsKKworCQkvKiBBU1NFUlQ6ICB3ZSBoYXZlIGFsbCBuZWNlc3Nhcnkgc2l0ZHMgKi8KKwkJQlVHX09OIChsaXN0X2VtcHR5ICgmc2NoZWQtPnRkX2xpc3QpKTsKKworCQkvKiBBU1NFUlQ6ICBubyBpdGRzIGZvciB0aGlzIGVuZHBvaW50IGluIHRoaXMgZnJhbWUgKi8KKworCQlzaXRkID0gbGlzdF9lbnRyeSAoc2NoZWQtPnRkX2xpc3QubmV4dCwKKwkJCQlzdHJ1Y3QgZWhjaV9zaXRkLCBzaXRkX2xpc3QpOworCQlsaXN0X21vdmVfdGFpbCAoJnNpdGQtPnNpdGRfbGlzdCwgJnN0cmVhbS0+dGRfbGlzdCk7CisJCXNpdGQtPnN0cmVhbSA9IGlzb19zdHJlYW1fZ2V0IChzdHJlYW0pOworCQlzaXRkLT51cmIgPSB1c2JfZ2V0X3VyYiAodXJiKTsKKworCQlzaXRkX3BhdGNoIChzdHJlYW0sIHNpdGQsIHNjaGVkLCBwYWNrZXQpOworCQlzaXRkX2xpbmsgKGVoY2ksIChuZXh0X3VmcmFtZSA+PiAzKSAlIGVoY2ktPnBlcmlvZGljX3NpemUsCisJCQkJc2l0ZCk7CisKKwkJbmV4dF91ZnJhbWUgKz0gc3RyZWFtLT5pbnRlcnZhbCA8PCAzOworCQlzdHJlYW0tPmRlcHRoICs9IHN0cmVhbS0+aW50ZXJ2YWwgPDwgMzsKKwl9CisJc3RyZWFtLT5uZXh0X3VmcmFtZSA9IG5leHRfdWZyYW1lICUgbW9kOworCisJLyogZG9uJ3QgbmVlZCB0aGF0IHNjaGVkdWxlIGRhdGEgYW55IG1vcmUgKi8KKwlpc29fc2NoZWRfZnJlZSAoc3RyZWFtLCBzY2hlZCk7CisJdXJiLT5oY3ByaXYgPSBOVUxMOworCisJdGltZXJfYWN0aW9uIChlaGNpLCBUSU1FUl9JT19XQVRDSERPRyk7CisJaWYgKCFlaGNpLT5wZXJpb2RpY19zY2hlZCsrKQorCQlyZXR1cm4gZW5hYmxlX3BlcmlvZGljIChlaGNpKTsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZQlTSVREX0VSUlMgKFNJVERfU1RTX0VSUiB8IFNJVERfU1RTX0RCRSB8IFNJVERfU1RTX0JBQkJMRSBcCisJICAgICAgIAkJCXwgU0lURF9TVFNfWEFDVCB8IFNJVERfU1RTX01NRikKKworc3RhdGljIHVuc2lnbmVkCitzaXRkX2NvbXBsZXRlICgKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpLAorCXN0cnVjdCBlaGNpX3NpdGQJKnNpdGQsCisJc3RydWN0IHB0X3JlZ3MJCSpyZWdzCispIHsKKwlzdHJ1Y3QgdXJiCQkJCSp1cmIgPSBzaXRkLT51cmI7CisJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IJKmRlc2M7CisJdTMyCQkJCQl0OworCWludAkJCQkJdXJiX2luZGV4ID0gLTE7CisJc3RydWN0IGVoY2lfaXNvX3N0cmVhbQkJCSpzdHJlYW0gPSBzaXRkLT5zdHJlYW07CisJc3RydWN0IHVzYl9kZXZpY2UJCQkqZGV2OworCisJdXJiX2luZGV4ID0gc2l0ZC0+aW5kZXg7CisJZGVzYyA9ICZ1cmItPmlzb19mcmFtZV9kZXNjIFt1cmJfaW5kZXhdOworCXQgPSBsZTMyX3RvX2NwdXAgKCZzaXRkLT5od19yZXN1bHRzKTsKKworCS8qIHJlcG9ydCB0cmFuc2ZlciBzdGF0dXMgKi8KKwlpZiAodCAmIFNJVERfRVJSUykgeworCQl1cmItPmVycm9yX2NvdW50Kys7CisJCWlmICh0ICYgU0lURF9TVFNfREJFKQorCQkJZGVzYy0+c3RhdHVzID0gdXNiX3BpcGVpbiAodXJiLT5waXBlKQorCQkJCT8gLUVOT1NSICAvKiBoYyBjb3VsZG4ndCByZWFkICovCisJCQkJOiAtRUNPTU07IC8qIGhjIGNvdWxkbid0IHdyaXRlICovCisJCWVsc2UgaWYgKHQgJiBTSVREX1NUU19CQUJCTEUpCisJCQlkZXNjLT5zdGF0dXMgPSAtRU9WRVJGTE9XOworCQllbHNlIC8qIFhBQ1QsIE1NRiwgZXRjICovCisJCQlkZXNjLT5zdGF0dXMgPSAtRVBST1RPOworCX0gZWxzZSB7CisJCWRlc2MtPnN0YXR1cyA9IDA7CisJCWRlc2MtPmFjdHVhbF9sZW5ndGggPSBkZXNjLT5sZW5ndGggLSBTSVREX0xFTkdUSCAodCk7CisJfQorCisJdXNiX3B1dF91cmIgKHVyYik7CisJc2l0ZC0+dXJiID0gTlVMTDsKKwlzaXRkLT5zdHJlYW0gPSBOVUxMOworCWxpc3RfbW92ZSAoJnNpdGQtPnNpdGRfbGlzdCwgJnN0cmVhbS0+ZnJlZV9saXN0KTsKKwlzdHJlYW0tPmRlcHRoIC09IHN0cmVhbS0+aW50ZXJ2YWwgPDwgMzsKKwlpc29fc3RyZWFtX3B1dCAoZWhjaSwgc3RyZWFtKTsKKworCS8qIGhhbmRsZSBjb21wbGV0aW9uIG5vdz8gKi8KKwlpZiAoKHVyYl9pbmRleCArIDEpICE9IHVyYi0+bnVtYmVyX29mX3BhY2tldHMpCisJCXJldHVybiAwOworCisJLyogQVNTRVJUOiBpdCdzIHJlYWxseSB0aGUgbGFzdCBzaXRkIGZvciB0aGlzIHVyYgorCWxpc3RfZm9yX2VhY2hfZW50cnkgKHNpdGQsICZzdHJlYW0tPnRkX2xpc3QsIHNpdGRfbGlzdCkKKwkJQlVHX09OIChzaXRkLT51cmIgPT0gdXJiKTsKKwkgKi8KKworCS8qIGdpdmUgdXJiIGJhY2sgdG8gdGhlIGRyaXZlciAqLworCWRldiA9IHVzYl9nZXRfZGV2ICh1cmItPmRldik7CisJZWhjaV91cmJfZG9uZSAoZWhjaSwgdXJiLCByZWdzKTsKKwl1cmIgPSBOVUxMOworCisJLyogZGVmZXIgc3RvcHBpbmcgc2NoZWR1bGU7IGNvbXBsZXRpb24gY2FuIHN1Ym1pdCAqLworCWVoY2ktPnBlcmlvZGljX3NjaGVkLS07CisJaWYgKCFlaGNpLT5wZXJpb2RpY19zY2hlZCkKKwkJKHZvaWQpIGRpc2FibGVfcGVyaW9kaWMgKGVoY2kpOworCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMtLTsKKworCWlmIChsaXN0X2VtcHR5ICgmc3RyZWFtLT50ZF9saXN0KSkgeworCQllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5iYW5kd2lkdGhfYWxsb2NhdGVkCisJCQkJLT0gc3RyZWFtLT5iYW5kd2lkdGg7CisJCWVoY2lfdmRiZyAoZWhjaSwKKwkJCSJkZXNjaGVkdWxlIGRldnAgJXMgZXAlZCVzLWlzb1xuIiwKKwkJCWRldi0+ZGV2cGF0aCwgc3RyZWFtLT5iRW5kcG9pbnRBZGRyZXNzICYgMHgwZiwKKwkJCShzdHJlYW0tPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSA/ICJpbiIgOiAib3V0Iik7CisJfQorCWlzb19zdHJlYW1fcHV0IChlaGNpLCBzdHJlYW0pOworCXVzYl9wdXRfZGV2IChkZXYpOworCisJcmV0dXJuIDE7Cit9CisKKworc3RhdGljIGludCBzaXRkX3N1Ym1pdCAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBtZW1fZmxhZ3MpCit7CisJaW50CQkJc3RhdHVzID0gLUVJTlZBTDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlzdHJ1Y3QgZWhjaV9pc29fc3RyZWFtCSpzdHJlYW07CisKKwkvKiBHZXQgaXNvX3N0cmVhbSBoZWFkICovCisJc3RyZWFtID0gaXNvX3N0cmVhbV9maW5kIChlaGNpLCB1cmIpOworCWlmIChzdHJlYW0gPT0gTlVMTCkgeworCQllaGNpX2RiZyAoZWhjaSwgImNhbid0IGdldCBpc28gc3RyZWFtXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWlmICh1cmItPmludGVydmFsICE9IHN0cmVhbS0+aW50ZXJ2YWwpIHsKKwkJZWhjaV9kYmcgKGVoY2ksICJjYW4ndCBjaGFuZ2UgaXNvIGludGVydmFsICVkIC0tPiAlZFxuIiwKKwkJCXN0cmVhbS0+aW50ZXJ2YWwsIHVyYi0+aW50ZXJ2YWwpOworCQlnb3RvIGRvbmU7CisJfQorCisjaWZkZWYgRUhDSV9VUkJfVFJBQ0UKKwllaGNpX2RiZyAoZWhjaSwKKwkJInN1Ym1pdCAlcCBkZXYlcyBlcCVkJXMtaXNvIGxlbiAlZFxuIiwKKwkJdXJiLCB1cmItPmRldi0+ZGV2cGF0aCwKKwkJdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKSwKKwkJdXNiX3BpcGVpbiAodXJiLT5waXBlKSA/ICJpbiIgOiAib3V0IiwKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKyNlbmRpZgorCisJLyogYWxsb2NhdGUgU0lURHMgKi8KKwlzdGF0dXMgPSBzaXRkX3VyYl90cmFuc2FjdGlvbiAoc3RyZWFtLCBlaGNpLCB1cmIsIG1lbV9mbGFncyk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZWhjaV9kYmcgKGVoY2ksICJjYW4ndCBpbml0IHNpdGRzXG4iKTsKKwkJZ290byBkb25lOworCX0KKworCS8qIHNjaGVkdWxlIC4uLiBuZWVkIHRvIGxvY2sgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlzdGF0dXMgPSBpc29fc3RyZWFtX3NjaGVkdWxlIChlaGNpLCB1cmIsIHN0cmVhbSk7CisgCWlmIChzdGF0dXMgPT0gMCkKKwkJc2l0ZF9saW5rX3VyYiAoZWhjaSwgdXJiLCBlaGNpLT5wZXJpb2RpY19zaXplIDw8IDMsIHN0cmVhbSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKworZG9uZToKKwlpZiAoc3RhdHVzIDwgMCkKKwkJaXNvX3N0cmVhbV9wdXQgKGVoY2ksIHN0cmVhbSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSBpbnQKK3NpdGRfc3VibWl0IChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCB1cmIgKnVyYiwgaW50IG1lbV9mbGFncykKK3sKKwllaGNpX2RiZyAoZWhjaSwgInNwbGl0IGlzbyBzdXBwb3J0IGlzIGRpc2FibGVkXG4iKTsKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZAorc2l0ZF9jb21wbGV0ZSAoCisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSwKKwlzdHJ1Y3QgZWhjaV9zaXRkCSpzaXRkLAorCXN0cnVjdCBwdF9yZWdzCQkqcmVncworKSB7CisJZWhjaV9lcnIgKGVoY2ksICJzaXRkX2NvbXBsZXRlICVwP1xuIiwgc2l0ZCk7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBVU0JfRUhDSV9TUExJVF9JU08gKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQKK3NjYW5fcGVyaW9kaWMgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQJZnJhbWUsIGNsb2NrLCBub3dfdWZyYW1lLCBtb2Q7CisJdW5zaWduZWQJbW9kaWZpZWQ7CisKKwltb2QgPSBlaGNpLT5wZXJpb2RpY19zaXplIDw8IDM7CisKKwkvKgorCSAqIFdoZW4gcnVubmluZywgc2NhbiBmcm9tIGxhc3Qgc2NhbiBwb2ludCB1cCB0byAibm93IgorCSAqIGVsc2UgY2xlYW4gdXAgYnkgc2Nhbm5pbmcgZXZlcnl0aGluZyB0aGF0J3MgbGVmdC4KKwkgKiBUb3VjaGVzIGFzIGZldyBwYWdlcyBhcyBwb3NzaWJsZTogIGNhY2hlLWZyaWVuZGx5LgorCSAqLworCW5vd191ZnJhbWUgPSBlaGNpLT5uZXh0X3VmcmFtZTsKKwlpZiAoSENfSVNfUlVOTklORyAoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlKSkKKwkJY2xvY2sgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPmZyYW1lX2luZGV4KTsKKwllbHNlCisJCWNsb2NrID0gbm93X3VmcmFtZSArIG1vZCAtIDE7CisJY2xvY2sgJT0gbW9kOworCisJZm9yICg7OykgeworCQl1bmlvbiBlaGNpX3NoYWRvdwlxLCAqcV9wOworCQlfX2xlMzIJCQl0eXBlLCAqaHdfcDsKKwkJdW5zaWduZWQJCXVmcmFtZXM7CisKKwkJLyogZG9uJ3Qgc2NhbiBwYXN0IHRoZSBsaXZlIHVmcmFtZSAqLworCQlmcmFtZSA9IG5vd191ZnJhbWUgPj4gMzsKKwkJaWYgKGZyYW1lID09IChjbG9jayA+PiAzKSkKKwkJCXVmcmFtZXMgPSBub3dfdWZyYW1lICYgMHgwNzsKKwkJZWxzZSB7CisJCQkvKiBzYWZlIHRvIHNjYW4gdGhlIHdob2xlIGZyYW1lIGF0IG9uY2UgKi8KKwkJCW5vd191ZnJhbWUgfD0gMHgwNzsKKwkJCXVmcmFtZXMgPSA4OworCQl9CisKK3Jlc3RhcnQ6CisJCS8qIHNjYW4gZWFjaCBlbGVtZW50IGluIGZyYW1lJ3MgcXVldWUgZm9yIGNvbXBsZXRpb25zICovCisJCXFfcCA9ICZlaGNpLT5wc2hhZG93IFtmcmFtZV07CisJCWh3X3AgPSAmZWhjaS0+cGVyaW9kaWMgW2ZyYW1lXTsKKwkJcS5wdHIgPSBxX3AtPnB0cjsKKwkJdHlwZSA9IFFfTkVYVF9UWVBFICgqaHdfcCk7CisJCW1vZGlmaWVkID0gMDsKKworCQl3aGlsZSAocS5wdHIgIT0gTlVMTCkgeworCQkJdW5zaWduZWQJCXVmOworCQkJdW5pb24gZWhjaV9zaGFkb3cJdGVtcDsKKwkJCWludAkJCWxpdmU7CisKKwkJCWxpdmUgPSBIQ19JU19SVU5OSU5HIChlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpOworCQkJc3dpdGNoICh0eXBlKSB7CisJCQljYXNlIFFfVFlQRV9RSDoKKwkJCQkvKiBoYW5kbGUgYW55IGNvbXBsZXRpb25zICovCisJCQkJdGVtcC5xaCA9IHFoX2dldCAocS5xaCk7CisJCQkJdHlwZSA9IFFfTkVYVF9UWVBFIChxLnFoLT5od19uZXh0KTsKKwkJCQlxID0gcS5xaC0+cWhfbmV4dDsKKwkJCQltb2RpZmllZCA9IHFoX2NvbXBsZXRpb25zIChlaGNpLCB0ZW1wLnFoLCByZWdzKTsKKwkJCQlpZiAodW5saWtlbHkgKGxpc3RfZW1wdHkgKCZ0ZW1wLnFoLT5xdGRfbGlzdCkpKQorCQkJCQlpbnRyX2Rlc2NoZWR1bGUgKGVoY2ksIHRlbXAucWgpOworCQkJCXFoX3B1dCAodGVtcC5xaCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFFfVFlQRV9GU1ROOgorCQkJCS8qIGZvciAic2F2ZSBwbGFjZSIgRlNUTnMsIGxvb2sgYXQgUUggZW50cmllcworCQkJCSAqIGluIHRoZSBwcmV2aW91cyBmcmFtZSBmb3IgY29tcGxldGlvbnMuCisJCQkJICovCisJCQkJaWYgKHEuZnN0bi0+aHdfcHJldiAhPSBFSENJX0xJU1RfRU5EKSB7CisJCQkJCWRiZyAoImlnbm9yaW5nIGNvbXBsZXRpb25zIGZyb20gRlNUTnMiKTsKKwkJCQl9CisJCQkJdHlwZSA9IFFfTkVYVF9UWVBFIChxLmZzdG4tPmh3X25leHQpOworCQkJCXEgPSBxLmZzdG4tPmZzdG5fbmV4dDsKKwkJCQlicmVhazsKKwkJCWNhc2UgUV9UWVBFX0lURDoKKwkJCQkvKiBza2lwIGl0ZHMgZm9yIGxhdGVyIGluIHRoZSBmcmFtZSAqLworCQkJCXJtYiAoKTsKKwkJCQlmb3IgKHVmID0gbGl2ZSA/IHVmcmFtZXMgOiA4OyB1ZiA8IDg7IHVmKyspIHsKKwkJCQkJaWYgKDAgPT0gKHEuaXRkLT5od190cmFuc2FjdGlvbiBbdWZdCisJCQkJCQkJJiBJVERfQUNUSVZFKSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlxX3AgPSAmcS5pdGQtPml0ZF9uZXh0OworCQkJCQlod19wID0gJnEuaXRkLT5od19uZXh0OworCQkJCQl0eXBlID0gUV9ORVhUX1RZUEUgKHEuaXRkLT5od19uZXh0KTsKKwkJCQkJcSA9ICpxX3A7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAodWYgIT0gOCkKKwkJCQkJYnJlYWs7CisKKwkJCQkvKiB0aGlzIG9uZSdzIHJlYWR5IC4uLiBIQyB3b24ndCBjYWNoZSB0aGUKKwkJCQkgKiBwb2ludGVyIGZvciBtdWNoIGxvbmdlciwgaWYgYXQgYWxsLgorCQkJCSAqLworCQkJCSpxX3AgPSBxLml0ZC0+aXRkX25leHQ7CisJCQkJKmh3X3AgPSBxLml0ZC0+aHdfbmV4dDsKKwkJCQl0eXBlID0gUV9ORVhUX1RZUEUgKHEuaXRkLT5od19uZXh0KTsKKwkJCQl3bWIoKTsKKwkJCQltb2RpZmllZCA9IGl0ZF9jb21wbGV0ZSAoZWhjaSwgcS5pdGQsIHJlZ3MpOworCQkJCXEgPSAqcV9wOworCQkJCWJyZWFrOworCQkJY2FzZSBRX1RZUEVfU0lURDoKKwkJCQlpZiAoKHEuc2l0ZC0+aHdfcmVzdWx0cyAmIFNJVERfQUNUSVZFKQorCQkJCQkJJiYgbGl2ZSkgeworCQkJCQlxX3AgPSAmcS5zaXRkLT5zaXRkX25leHQ7CisJCQkJCWh3X3AgPSAmcS5zaXRkLT5od19uZXh0OworCQkJCQl0eXBlID0gUV9ORVhUX1RZUEUgKHEuc2l0ZC0+aHdfbmV4dCk7CisJCQkJCXEgPSAqcV9wOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJKnFfcCA9IHEuc2l0ZC0+c2l0ZF9uZXh0OworCQkJCSpod19wID0gcS5zaXRkLT5od19uZXh0OworCQkJCXR5cGUgPSBRX05FWFRfVFlQRSAocS5zaXRkLT5od19uZXh0KTsKKwkJCQl3bWIoKTsKKwkJCQltb2RpZmllZCA9IHNpdGRfY29tcGxldGUgKGVoY2ksIHEuc2l0ZCwgcmVncyk7CisJCQkJcSA9ICpxX3A7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWRiZyAoImNvcnJ1cHQgdHlwZSAlZCBmcmFtZSAlZCBzaGFkb3cgJXAiLAorCQkJCQl0eXBlLCBmcmFtZSwgcS5wdHIpOworCQkJCS8vIEJVRyAoKTsKKwkJCQlxLnB0ciA9IE5VTEw7CisJCQl9CisKKwkJCS8qIGFzc3VtZSBjb21wbGV0aW9uIGNhbGxiYWNrcyBtb2RpZnkgdGhlIHF1ZXVlICovCisJCQlpZiAodW5saWtlbHkgKG1vZGlmaWVkKSkKKwkJCQlnb3RvIHJlc3RhcnQ7CisJCX0KKworCQkvKiBzdG9wIHdoZW4gd2UgY2F0Y2ggdXAgdG8gdGhlIEhDICovCisKKwkJLy8gRklYTUU6ICB0aGlzIGFzc3VtZXMgd2Ugd29uJ3QgZ2V0IGxhcHBlZCB3aGVuCisJCS8vIGxhdGVuY2llcyBjbGltYjsgdGhhdCBzaG91bGQgYmUgcmFyZSwgYnV0Li4uCisJCS8vIGRldGVjdCBpdCwgYW5kIGp1c3QgZ28gYWxsIHRoZSB3YXkgYXJvdW5kLgorCQkvLyBGTFIgbWlnaHQgaGVscCBkZXRlY3QgdGhpcyBjYXNlLCBzbyBsb25nIGFzIGxhdGVuY2llcworCQkvLyBkb24ndCBleGNlZWQgcGVyaW9kaWNfc2l6ZSBtc2VjIChkZWZhdWx0IDEuMDI0IHNlYykuCisKKwkJLy8gRklYTUU6ICBsaWtld2lzZSBhc3N1bWVzIEhDIGRvZXNuJ3QgaGFsdCBtaWQtc2NhbgorCisJCWlmIChub3dfdWZyYW1lID09IGNsb2NrKSB7CisJCQl1bnNpZ25lZAlub3c7CisKKwkJCWlmICghSENfSVNfUlVOTklORyAoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlKSkKKwkJCQlicmVhazsKKwkJCWVoY2ktPm5leHRfdWZyYW1lID0gbm93X3VmcmFtZTsKKwkJCW5vdyA9IHJlYWRsICgmZWhjaS0+cmVncy0+ZnJhbWVfaW5kZXgpICUgbW9kOworCQkJaWYgKG5vd191ZnJhbWUgPT0gbm93KQorCQkJCWJyZWFrOworCisJCQkvKiByZXNjYW4gdGhlIHJlc3Qgb2YgdGhpcyBmcmFtZSwgdGhlbiAuLi4gKi8KKwkJCWNsb2NrID0gbm93OworCQl9IGVsc2UgeworCQkJbm93X3VmcmFtZSsrOworCQkJbm93X3VmcmFtZSAlPSBtb2Q7CisJCX0KKwl9IAorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Nzk4OGRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLmgKQEAgLTAsMCArMSw2MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiBieSBEYXZpZCBCcm93bmVsbAorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfRUhDSV9IQ0RfSAorI2RlZmluZSBfX0xJTlVYX0VIQ0lfSENEX0gKKworLyogZGVmaW5pdGlvbnMgdXNlZCBmb3IgdGhlIEVIQ0kgZHJpdmVyICovCisKKy8qIHN0YXRpc3RpY3MgY2FuIGJlIGtlcHQgZm9yIGZvciB0dW5pbmcvbW9uaXRvcmluZyAqLworc3RydWN0IGVoY2lfc3RhdHMgeworCS8qIGlycSB1c2FnZSAqLworCXVuc2lnbmVkIGxvbmcJCW5vcm1hbDsKKwl1bnNpZ25lZCBsb25nCQllcnJvcjsKKwl1bnNpZ25lZCBsb25nCQlyZWNsYWltOworCXVuc2lnbmVkIGxvbmcJCWxvc3RfaWFhOworCisJLyogdGVybWluYXRpb24gb2YgdXJicyBmcm9tIGNvcmUgKi8KKwl1bnNpZ25lZCBsb25nCQljb21wbGV0ZTsKKwl1bnNpZ25lZCBsb25nCQl1bmxpbms7Cit9OworCisvKiBlaGNpX2hjZC0+bG9jayBndWFyZHMgc2hhcmVkIGRhdGEgYWdhaW5zdCBvdGhlciBDUFVzOgorICogICBlaGNpX2hjZDoJYXN5bmMsIHJlY2xhaW0sIHBlcmlvZGljIChhbmQgc2hhZG93KSwgLi4uCisgKiAgIHVzYl9ob3N0X2VuZHBvaW50OiBoY3ByaXYKKyAqICAgZWhjaV9xaDoJcWhfbmV4dCwgcXRkX2xpc3QKKyAqICAgZWhjaV9xdGQ6CXF0ZF9saXN0CisgKgorICogQWxzbywgaG9sZCB0aGlzIGxvY2sgd2hlbiB0YWxraW5nIHRvIEhDIHJlZ2lzdGVycyBvcgorICogd2hlbiB1cGRhdGluZyBod18qIGZpZWxkcyBpbiBzaGFyZWQgcWgvcXRkLy4uLiBzdHJ1Y3R1cmVzLgorICovCisKKyNkZWZpbmUJRUhDSV9NQVhfUk9PVF9QT1JUUwkxNQkJLyogc2VlIEhDU19OX1BPUlRTICovCisKK3N0cnVjdCBlaGNpX2hjZCB7CQkJLyogb25lIHBlciBjb250cm9sbGVyICovCisJc3BpbmxvY2tfdAkJbG9jazsKKworCS8qIGFzeW5jIHNjaGVkdWxlIHN1cHBvcnQgKi8KKwlzdHJ1Y3QgZWhjaV9xaAkJKmFzeW5jOworCXN0cnVjdCBlaGNpX3FoCQkqcmVjbGFpbTsKKwl1bnNpZ25lZAkJcmVjbGFpbV9yZWFkeSA6IDE7CisJdW5zaWduZWQJCXNjYW5uaW5nIDogMTsKKworCS8qIHBlcmlvZGljIHNjaGVkdWxlIHN1cHBvcnQgKi8KKyNkZWZpbmUJREVGQVVMVF9JX1REUFMJCTEwMjQJCS8qIHNvbWUgSENzIGNhbiBkbyBsZXNzICovCisJdW5zaWduZWQJCXBlcmlvZGljX3NpemU7CisJX19sZTMyCQkJKnBlcmlvZGljOwkvKiBodyBwZXJpb2RpYyB0YWJsZSAqLworCWRtYV9hZGRyX3QJCXBlcmlvZGljX2RtYTsKKwl1bnNpZ25lZAkJaV90aHJlc2g7CS8qIHVmcmFtZXMgSEMgbWlnaHQgY2FjaGUgKi8KKworCXVuaW9uIGVoY2lfc2hhZG93CSpwc2hhZG93OwkvKiBtaXJyb3IgaHcgcGVyaW9kaWMgdGFibGUgKi8KKwlpbnQJCQluZXh0X3VmcmFtZTsJLyogc2NhbiBwZXJpb2RpYywgc3RhcnQgaGVyZSAqLworCXVuc2lnbmVkCQlwZXJpb2RpY19zY2hlZDsJLyogcGVyaW9kaWMgYWN0aXZpdHkgY291bnQgKi8KKworCS8qIHBlciByb290IGh1YiBwb3J0ICovCisJdW5zaWduZWQgbG9uZwkJcmVzZXRfZG9uZSBbRUhDSV9NQVhfUk9PVF9QT1JUU107CisKKwkvKiBwZXItSEMgbWVtb3J5IHBvb2xzIChjb3VsZCBiZSBwZXItYnVzLCBidXQgLi4uKSAqLworCXN0cnVjdCBkbWFfcG9vbAkJKnFoX3Bvb2w7CS8qIHFoIHBlciBhY3RpdmUgdXJiICovCisJc3RydWN0IGRtYV9wb29sCQkqcXRkX3Bvb2w7CS8qIG9uZSBvciBtb3JlIHBlciBxaCAqLworCXN0cnVjdCBkbWFfcG9vbAkJKml0ZF9wb29sOwkvKiBpdGQgcGVyIGlzbyB1cmIgKi8KKwlzdHJ1Y3QgZG1hX3Bvb2wJCSpzaXRkX3Bvb2w7CS8qIHNpdGQgcGVyIHNwbGl0IGlzbyB1cmIgKi8KKworCXN0cnVjdCB0aW1lcl9saXN0CXdhdGNoZG9nOworCXN0cnVjdCBub3RpZmllcl9ibG9jawlyZWJvb3Rfbm90aWZpZXI7CisJdW5zaWduZWQgbG9uZwkJYWN0aW9uczsKKwl1bnNpZ25lZAkJc3RhbXA7CisJdW5zaWduZWQgbG9uZwkJbmV4dF9zdGF0ZWNoYW5nZTsKKwl1MzIJCQljb21tYW5kOworCisJdW5zaWduZWQJCWlzX3RkaV9yaF90dDoxOwkvKiBUREkgcm9vdGh1YiB3aXRoIFRUICovCisKKwkvKiBnbHVlIHRvIFBDSSBhbmQgSENEIGZyYW1ld29yayAqLworCXN0cnVjdCBlaGNpX2NhcHMgX19pb21lbSAqY2FwczsKKwlzdHJ1Y3QgZWhjaV9yZWdzIF9faW9tZW0gKnJlZ3M7CisJX191MzIJCQloY3NfcGFyYW1zOwkvKiBjYWNoZWQgcmVnaXN0ZXIgY29weSAqLworCisJLyogaXJxIHN0YXRpc3RpY3MgKi8KKyNpZmRlZiBFSENJX1NUQVRTCisJc3RydWN0IGVoY2lfc3RhdHMJc3RhdHM7CisjCWRlZmluZSBDT1VOVCh4KSBkbyB7ICh4KSsrOyB9IHdoaWxlICgwKQorI2Vsc2UKKyMJZGVmaW5lIENPVU5UKHgpIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCit9OworCisvKiBjb252ZXJ0IGJldHdlZW4gYW4gSENEIHBvaW50ZXIgYW5kIHRoZSBjb3JyZXNwb25kaW5nIEVIQ0lfSENEICovIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgZWhjaV9oY2QgKmhjZF90b19laGNpIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXJldHVybiAoc3RydWN0IGVoY2lfaGNkICopIChoY2QtPmhjZF9wcml2KTsKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9oY2QgKmVoY2lfdG9faGNkIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZiAoKHZvaWQgKikgZWhjaSwgc3RydWN0IHVzYl9oY2QsIGhjZF9wcml2KTsKK30KKworCitlbnVtIGVoY2lfdGltZXJfYWN0aW9uIHsKKwlUSU1FUl9JT19XQVRDSERPRywKKwlUSU1FUl9JQUFfV0FUQ0hET0csCisJVElNRVJfQVNZTkNfU0hSSU5LLAorCVRJTUVSX0FTWU5DX09GRiwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGltZXJfYWN0aW9uX2RvbmUgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgZW51bSBlaGNpX3RpbWVyX2FjdGlvbiBhY3Rpb24pCit7CisJY2xlYXJfYml0IChhY3Rpb24sICZlaGNpLT5hY3Rpb25zKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0aW1lcl9hY3Rpb24gKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgZW51bSBlaGNpX3RpbWVyX2FjdGlvbiBhY3Rpb24pCit7CisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0IChhY3Rpb24sICZlaGNpLT5hY3Rpb25zKSkgeworCQl1bnNpZ25lZCBsb25nIHQ7CisKKwkJc3dpdGNoIChhY3Rpb24pIHsKKwkJY2FzZSBUSU1FUl9JQUFfV0FUQ0hET0c6CisJCQl0ID0gRUhDSV9JQUFfSklGRklFUzsKKwkJCWJyZWFrOworCQljYXNlIFRJTUVSX0lPX1dBVENIRE9HOgorCQkJdCA9IEVIQ0lfSU9fSklGRklFUzsKKwkJCWJyZWFrOworCQljYXNlIFRJTUVSX0FTWU5DX09GRjoKKwkJCXQgPSBFSENJX0FTWU5DX0pJRkZJRVM7CisJCQlicmVhazsKKwkJLy8gY2FzZSBUSU1FUl9BU1lOQ19TSFJJTks6CisJCWRlZmF1bHQ6CisJCQl0ID0gRUhDSV9TSFJJTktfSklGRklFUzsKKwkJCWJyZWFrOworCQl9CisJCXQgKz0gamlmZmllczsKKwkJLy8gYWxsIHRpbWluZ3MgZXhjZXB0IElBQSB3YXRjaGRvZyBjYW4gYmUgb3ZlcnJpZGRlbi4KKwkJLy8gYXN5bmMgcXVldWUgU0hSSU5LIG9mdGVuIHByZWNlZGVzIElBQS4gIHdoaWxlIGl0J3MgcmVhZHkKKwkJLy8gdG8gZ28gT0ZGIG5laXRoZXIgY2FuIG1hdHRlciwgYW5kIGFmdGVyd2FyZHMgdGhlIElPCisJCS8vIHdhdGNoZG9nIHN0b3BzIHVubGVzcyB0aGVyZSdzIHN0aWxsIHBlcmlvZGljIHRyYWZmaWMuCisJCWlmIChhY3Rpb24gIT0gVElNRVJfSUFBX1dBVENIRE9HCisJCQkJJiYgdCA+IGVoY2ktPndhdGNoZG9nLmV4cGlyZXMKKwkJCQkmJiB0aW1lcl9wZW5kaW5nICgmZWhjaS0+d2F0Y2hkb2cpKQorCQkJcmV0dXJuOworCQltb2RfdGltZXIgKCZlaGNpLT53YXRjaGRvZywgdCk7CisJfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBFSENJIHJlZ2lzdGVyIGludGVyZmFjZSwgY29ycmVzcG9uZHMgdG8gRUhDSSBSZXZpc2lvbiAwLjk1IHNwZWNpZmljYXRpb24gKi8KKworLyogU2VjdGlvbiAyLjIgSG9zdCBDb250cm9sbGVyIENhcGFiaWxpdHkgUmVnaXN0ZXJzICovCitzdHJ1Y3QgZWhjaV9jYXBzIHsKKwkvKiB0aGVzZSBmaWVsZHMgYXJlIHNwZWNpZmllZCBhcyA4IGFuZCAxNiBiaXQgcmVnaXN0ZXJzLAorCSAqIGJ1dCBzb21lIGhvc3RzIGNhbid0IHBlcmZvcm0gOCBvciAxNiBiaXQgUENJIGFjY2Vzc2VzLgorCSAqLworCXUzMgloY19jYXBiYXNlOworI2RlZmluZSBIQ19MRU5HVEgocCkJCSgoKHApPj4wMCkmMHgwMGZmKQkvKiBiaXRzIDc6MCAqLworI2RlZmluZSBIQ19WRVJTSU9OKHApCQkoKChwKT4+MTYpJjB4ZmZmZikJLyogYml0cyAzMToxNiAqLworCXUzMgkJaGNzX3BhcmFtczsgICAgIC8qIEhDU1BBUkFNUyAtIG9mZnNldCAweDQgKi8KKyNkZWZpbmUgSENTX0RFQlVHX1BPUlQocCkJKCgocCk+PjIwKSYweGYpCS8qIGJpdHMgMjM6MjAsIGRlYnVnIHBvcnQ/ICovCisjZGVmaW5lIEhDU19JTkRJQ0FUT1IocCkJKChwKSYoMSA8PCAxNikpCS8qIHRydWU6IGhhcyBwb3J0IGluZGljYXRvcnMgKi8KKyNkZWZpbmUgSENTX05fQ0MocCkJCSgoKHApPj4xMikmMHhmKQkvKiBiaXRzIDE1OjEyLCAjY29tcGFuaW9uIEhDcyAqLworI2RlZmluZSBIQ1NfTl9QQ0MocCkJCSgoKHApPj44KSYweGYpCS8qIGJpdHMgMTE6OCwgcG9ydHMgcGVyIENDICovCisjZGVmaW5lIEhDU19QT1JUUk9VVEVEKHApCSgocCkmKDEgPDwgNykpCS8qIHRydWU6IHBvcnQgcm91dGluZyAqLyAKKyNkZWZpbmUgSENTX1BQQyhwKQkJKChwKSYoMSA8PCA0KSkJLyogdHJ1ZTogcG9ydCBwb3dlciBjb250cm9sICovIAorI2RlZmluZSBIQ1NfTl9QT1JUUyhwKQkJKCgocCk+PjApJjB4ZikJLyogYml0cyAzOjAsIHBvcnRzIG9uIEhDICovCisKKwl1MzIJCWhjY19wYXJhbXM7ICAgICAgLyogSENDUEFSQU1TIC0gb2Zmc2V0IDB4OCAqLworI2RlZmluZSBIQ0NfRVhUX0NBUFMocCkJCSgoKHApPj44KSYweGZmKQkvKiBmb3IgcGNpIGV4dGVuZGVkIGNhcHMgKi8KKyNkZWZpbmUgSENDX0lTT0NfQ0FDSEUocCkgICAgICAgKChwKSYoMSA8PCA3KSkgIC8qIHRydWU6IGNhbiBjYWNoZSBpc29jIGZyYW1lICovCisjZGVmaW5lIEhDQ19JU09DX1RIUkVTKHApICAgICAgICgoKHApPj40KSYweDcpICAvKiBiaXRzIDY6NCwgdWZyYW1lcyBjYWNoZWQgKi8KKyNkZWZpbmUgSENDX0NBTlBBUksocCkJCSgocCkmKDEgPDwgMikpICAvKiB0cnVlOiBjYW4gcGFyayBvbiBhc3luYyBxaCAqLworI2RlZmluZSBIQ0NfUEdNX0ZSQU1FTElTVExFTihwKSAoKHApJigxIDw8IDEpKSAgLyogdHJ1ZTogcGVyaW9kaWNfc2l6ZSBjaGFuZ2VzKi8KKyNkZWZpbmUgSENDXzY0QklUX0FERFIocCkgICAgICAgKChwKSYoMSkpICAgICAgIC8qIHRydWU6IGNhbiB1c2UgNjQtYml0IGFkZHIgKi8KKwl1OAkJcG9ydHJvdXRlIFs4XTsJIC8qIG5pYmJsZXMgZm9yIHJvdXRpbmcgLSBvZmZzZXQgMHhDICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKiBTZWN0aW9uIDIuMyBIb3N0IENvbnRyb2xsZXIgT3BlcmF0aW9uYWwgUmVnaXN0ZXJzICovCitzdHJ1Y3QgZWhjaV9yZWdzIHsKKworCS8qIFVTQkNNRDogb2Zmc2V0IDB4MDAgKi8KKwl1MzIJCWNvbW1hbmQ7CisvKiAyMzoxNiBpcyByL3cgaW50ciByYXRlLCBpbiBtaWNyb2ZyYW1lczsgZGVmYXVsdCAiOCIgPT0gMS9tc2VjICovCisjZGVmaW5lIENNRF9QQVJLCSgxPDwxMSkJCS8qIGVuYWJsZSAicGFyayIgb24gYXN5bmMgcWggKi8KKyNkZWZpbmUgQ01EX1BBUktfQ05UKGMpCSgoKGMpPj44KSYzKQkvKiBob3cgbWFueSB0cmFuc2ZlcnMgdG8gcGFyayBmb3IgKi8KKyNkZWZpbmUgQ01EX0xSRVNFVAkoMTw8NykJCS8qIHBhcnRpYWwgcmVzZXQgKG5vIHBvcnRzLCBldGMpICovCisjZGVmaW5lIENNRF9JQUFECSgxPDw2KQkJLyogImRvb3JiZWxsIiBpbnRlcnJ1cHQgYXN5bmMgYWR2YW5jZSAqLworI2RlZmluZSBDTURfQVNFCQkoMTw8NSkJCS8qIGFzeW5jIHNjaGVkdWxlIGVuYWJsZSAqLworI2RlZmluZSBDTURfUFNFICAJKDE8PDQpCQkvKiBwZXJpb2RpYyBzY2hlZHVsZSBlbmFibGUgKi8KKy8qIDM6MiBpcyBwZXJpb2RpYyBmcmFtZSBsaXN0IHNpemUgKi8KKyNkZWZpbmUgQ01EX1JFU0VUCSgxPDwxKQkJLyogcmVzZXQgSEMgbm90IGJ1cyAqLworI2RlZmluZSBDTURfUlVOCQkoMTw8MCkJCS8qIHN0YXJ0L3N0b3AgSEMgKi8KKworCS8qIFVTQlNUUzogb2Zmc2V0IDB4MDQgKi8KKwl1MzIJCXN0YXR1czsKKyNkZWZpbmUgU1RTX0FTUwkJKDE8PDE1KQkJLyogQXN5bmMgU2NoZWR1bGUgU3RhdHVzICovCisjZGVmaW5lIFNUU19QU1MJCSgxPDwxNCkJCS8qIFBlcmlvZGljIFNjaGVkdWxlIFN0YXR1cyAqLworI2RlZmluZSBTVFNfUkVDTAkoMTw8MTMpCQkvKiBSZWNsYW1hdGlvbiAqLworI2RlZmluZSBTVFNfSEFMVAkoMTw8MTIpCQkvKiBOb3QgcnVubmluZyAoYW55IHJlYXNvbikgKi8KKy8qIHNvbWUgYml0cyByZXNlcnZlZCAqLworCS8qIHRoZXNlIFNUU18qIGZsYWdzIGFyZSBhbHNvIGludHJfZW5hYmxlIGJpdHMgKFVTQklOVFIpICovCisjZGVmaW5lIFNUU19JQUEJCSgxPDw1KQkJLyogSW50ZXJydXB0ZWQgb24gYXN5bmMgYWR2YW5jZSAqLworI2RlZmluZSBTVFNfRkFUQUwJKDE8PDQpCQkvKiBzdWNoIGFzIHNvbWUgUENJIGFjY2VzcyBlcnJvcnMgKi8KKyNkZWZpbmUgU1RTX0ZMUgkJKDE8PDMpCQkvKiBmcmFtZSBsaXN0IHJvbGxlZCBvdmVyICovCisjZGVmaW5lIFNUU19QQ0QJCSgxPDwyKQkJLyogcG9ydCBjaGFuZ2UgZGV0ZWN0ICovCisjZGVmaW5lIFNUU19FUlIJCSgxPDwxKQkJLyogImVycm9yIiBjb21wbGV0aW9uIChvdmVyZmxvdywgLi4uKSAqLworI2RlZmluZSBTVFNfSU5UCQkoMTw8MCkJCS8qICJub3JtYWwiIGNvbXBsZXRpb24gKHNob3J0LCAuLi4pICovCisKKwkvKiBVU0JJTlRSOiBvZmZzZXQgMHgwOCAqLworCXUzMgkJaW50cl9lbmFibGU7CisKKwkvKiBGUklOREVYOiBvZmZzZXQgMHgwQyAqLworCXUzMgkJZnJhbWVfaW5kZXg7CS8qIGN1cnJlbnQgbWljcm9mcmFtZSBudW1iZXIgKi8KKwkvKiBDVFJMRFNTRUdNRU5UOiBvZmZzZXQgMHgxMCAqLworCXUzMgkJc2VnbWVudDsgCS8qIGFkZHJlc3MgYml0cyA2MzozMiBpZiBuZWVkZWQgKi8KKwkvKiBQRVJJT0RJQ0xJU1RCQVNFOiBvZmZzZXQgMHgxNCAqLworCXUzMgkJZnJhbWVfbGlzdDsgCS8qIHBvaW50cyB0byBwZXJpb2RpYyBsaXN0ICovCisJLyogQVNZTkNMSVNUQUREUjogb2Zmc2V0IDB4MTggKi8KKwl1MzIJCWFzeW5jX25leHQ7CS8qIGFkZHJlc3Mgb2YgbmV4dCBhc3luYyBxdWV1ZSBoZWFkICovCisKKwl1MzIJCXJlc2VydmVkIFs5XTsKKworCS8qIENPTkZJR0ZMQUc6IG9mZnNldCAweDQwICovCisJdTMyCQljb25maWd1cmVkX2ZsYWc7CisjZGVmaW5lIEZMQUdfQ0YJCSgxPDwwKQkJLyogdHJ1ZTogd2UnbGwgc3VwcG9ydCAiaGlnaCBzcGVlZCIgKi8KKworCS8qIFBPUlRTQzogb2Zmc2V0IDB4NDQgKi8KKwl1MzIJCXBvcnRfc3RhdHVzIFswXTsJLyogdXAgdG8gTl9QT1JUUyAqLworLyogMzE6MjMgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUE9SVF9XS09DX0UJKDE8PDIyKQkJLyogd2FrZSBvbiBvdmVyY3VycmVudCAoZW5hYmxlKSAqLworI2RlZmluZSBQT1JUX1dLRElTQ19FCSgxPDwyMSkJCS8qIHdha2Ugb24gZGlzY29ubmVjdCAoZW5hYmxlKSAqLworI2RlZmluZSBQT1JUX1dLQ09OTl9FCSgxPDwyMCkJCS8qIHdha2Ugb24gY29ubmVjdCAoZW5hYmxlKSAqLworLyogMTk6MTYgZm9yIHBvcnQgdGVzdGluZyAqLworI2RlZmluZSBQT1JUX0xFRF9PRkYJKDA8PDE0KQorI2RlZmluZSBQT1JUX0xFRF9BTUJFUgkoMTw8MTQpCisjZGVmaW5lIFBPUlRfTEVEX0dSRUVOCSgyPDwxNCkKKyNkZWZpbmUgUE9SVF9MRURfTUFTSwkoMzw8MTQpCisjZGVmaW5lIFBPUlRfT1dORVIJKDE8PDEzKQkJLyogdHJ1ZTogY29tcGFuaW9uIGhjIG93bnMgdGhpcyBwb3J0ICovCisjZGVmaW5lIFBPUlRfUE9XRVIJKDE8PDEyKQkJLyogdHJ1ZTogaGFzIHBvd2VyIChzZWUgUFBDKSAqLworI2RlZmluZSBQT1JUX1VTQjExKHgpICgoKHgpJigzPDwxMCkpPT0oMTw8MTApKQkvKiBVU0IgMS4xIGRldmljZSAqLworLyogMTE6MTAgZm9yIGRldGVjdGluZyBsb3dzcGVlZCBkZXZpY2VzIChyZXNldCB2cyByZWxlYXNlIG93bmVyc2hpcCkgKi8KKy8qIDkgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUE9SVF9SRVNFVAkoMTw8OCkJCS8qIHJlc2V0IHBvcnQgKi8KKyNkZWZpbmUgUE9SVF9TVVNQRU5ECSgxPDw3KQkJLyogc3VzcGVuZCBwb3J0ICovCisjZGVmaW5lIFBPUlRfUkVTVU1FCSgxPDw2KQkJLyogcmVzdW1lIGl0ICovCisjZGVmaW5lIFBPUlRfT0NDCSgxPDw1KQkJLyogb3ZlciBjdXJyZW50IGNoYW5nZSAqLworI2RlZmluZSBQT1JUX09DCQkoMTw8NCkJCS8qIG92ZXIgY3VycmVudCBhY3RpdmUgKi8KKyNkZWZpbmUgUE9SVF9QRUMJKDE8PDMpCQkvKiBwb3J0IGVuYWJsZSBjaGFuZ2UgKi8KKyNkZWZpbmUgUE9SVF9QRQkJKDE8PDIpCQkvKiBwb3J0IGVuYWJsZSAqLworI2RlZmluZSBQT1JUX0NTQwkoMTw8MSkJCS8qIGNvbm5lY3Qgc3RhdHVzIGNoYW5nZSAqLworI2RlZmluZSBQT1JUX0NPTk5FQ1QJKDE8PDApCQkvKiBkZXZpY2UgY29ubmVjdGVkICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogQXBwZW5kaXggQywgRGVidWcgcG9ydCAuLi4gaW50ZW5kZWQgZm9yIHVzZSB3aXRoIHNwZWNpYWwgImRlYnVnIGRldmljZXMiCisgKiB0aGF0IGNhbiBoZWxwIGlmIHRoZXJlJ3Mgbm8gc2VyaWFsIGNvbnNvbGUuICAobm9uc3RhbmRhcmQgZW51bWVyYXRpb24uKQorICovCitzdHJ1Y3QgZWhjaV9kYmdfcG9ydCB7CisJdTMyCWNvbnRyb2w7CisjZGVmaW5lIERCR1BfT1dORVIJKDE8PDMwKQorI2RlZmluZSBEQkdQX0VOQUJMRUQJKDE8PDI4KQorI2RlZmluZSBEQkdQX0RPTkUJKDE8PDE2KQorI2RlZmluZSBEQkdQX0lOVVNFCSgxPDwxMCkKKyNkZWZpbmUgREJHUF9FUlJDT0RFKHgpCSgoKHgpPj43KSYweDBmKQorIwlkZWZpbmUgREJHUF9FUlJfQkFECTEKKyMJZGVmaW5lIERCR1BfRVJSX1NJR05BTAkyCisjZGVmaW5lIERCR1BfRVJST1IJKDE8PDYpCisjZGVmaW5lIERCR1BfR08JCSgxPDw1KQorI2RlZmluZSBEQkdQX09VVAkoMTw8NCkKKyNkZWZpbmUgREJHUF9MRU4oeCkJKCgoeCk+PjApJjB4MGYpCisJdTMyCXBpZHM7CisjZGVmaW5lIERCR1BfUElEX0dFVCh4KQkJKCgoeCk+PjE2KSYweGZmKQorI2RlZmluZSBEQkdQX1BJRF9TRVQoZGF0YSx0b2spCSgoKGRhdGEpPDw4KXwodG9rKSk7CisJdTMyCWRhdGEwMzsKKwl1MzIJZGF0YTQ3OworCXUzMglhZGRyZXNzOworI2RlZmluZSBEQkdQX0VQQUREUihkZXYsZXApCSgoKGRldik8PDgpfChlcCkpOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUJUVREX05FWFQoZG1hKQljcHVfdG9fbGUzMigodTMyKWRtYSkKKworLyoKKyAqIEVIQ0kgU3BlY2lmaWNhdGlvbiAwLjk1IFNlY3Rpb24gMy41CisgKiBRVEQ6IGRlc2NyaWJlIGRhdGEgdHJhbnNmZXIgY29tcG9uZW50cyAoYnVmZmVyLCBkaXJlY3Rpb24sIC4uLikgCisgKiBTZWUgRmlnIDMtNiAiUXVldWUgRWxlbWVudCBUcmFuc2ZlciBEZXNjcmlwdG9yIEJsb2NrIERpYWdyYW0iLgorICoKKyAqIFRoZXNlIGFyZSBhc3NvY2lhdGVkIG9ubHkgd2l0aCAiUUgiIChRdWV1ZSBIZWFkKSBzdHJ1Y3R1cmVzLAorICogdXNlZCB3aXRoIGNvbnRyb2wsIGJ1bGssIGFuZCBpbnRlcnJ1cHQgdHJhbnNmZXJzLgorICovCitzdHJ1Y3QgZWhjaV9xdGQgeworCS8qIGZpcnN0IHBhcnQgZGVmaW5lZCBieSBFSENJIHNwZWMgKi8KKwlfX2xlMzIJCQlod19uZXh0OwkgIC8qIHNlZSBFSENJIDMuNS4xICovCisJX19sZTMyCQkJaHdfYWx0X25leHQ7ICAgICAgLyogc2VlIEVIQ0kgMy41LjIgKi8KKwlfX2xlMzIJCQlod190b2tlbjsgICAgICAgICAvKiBzZWUgRUhDSSAzLjUuMyAqLyAgICAgICAKKyNkZWZpbmUJUVREX1RPR0dMRQkoMSA8PCAzMSkJLyogZGF0YSB0b2dnbGUgKi8KKyNkZWZpbmUJUVREX0xFTkdUSCh0b2spCSgoKHRvayk+PjE2KSAmIDB4N2ZmZikKKyNkZWZpbmUJUVREX0lPQwkJKDEgPDwgMTUpCS8qIGludGVycnVwdCBvbiBjb21wbGV0ZSAqLworI2RlZmluZQlRVERfQ0VSUih0b2spCSgoKHRvayk+PjEwKSAmIDB4MykKKyNkZWZpbmUJUVREX1BJRCh0b2spCSgoKHRvayk+PjgpICYgMHgzKQorI2RlZmluZQlRVERfU1RTX0FDVElWRQkoMSA8PCA3KQkvKiBIQyBtYXkgZXhlY3V0ZSB0aGlzICovCisjZGVmaW5lCVFURF9TVFNfSEFMVAkoMSA8PCA2KQkvKiBoYWx0ZWQgb24gZXJyb3IgKi8KKyNkZWZpbmUJUVREX1NUU19EQkUJKDEgPDwgNSkJLyogZGF0YSBidWZmZXIgZXJyb3IgKGluIEhDKSAqLworI2RlZmluZQlRVERfU1RTX0JBQkJMRQkoMSA8PCA0KQkvKiBkZXZpY2Ugd2FzIGJhYmJsaW5nIChxdGQgaGFsdGVkKSAqLworI2RlZmluZQlRVERfU1RTX1hBQ1QJKDEgPDwgMykJLyogZGV2aWNlIGdhdmUgaWxsZWdhbCByZXNwb25zZSAqLworI2RlZmluZQlRVERfU1RTX01NRgkoMSA8PCAyKQkvKiBpbmNvbXBsZXRlIHNwbGl0IHRyYW5zYWN0aW9uICovCisjZGVmaW5lCVFURF9TVFNfU1RTCSgxIDw8IDEpCS8qIHNwbGl0IHRyYW5zYWN0aW9uIHN0YXRlICovCisjZGVmaW5lCVFURF9TVFNfUElORwkoMSA8PCAwKQkvKiBpc3N1ZSBQSU5HPyAqLworCV9fbGUzMgkJCWh3X2J1ZiBbNV07ICAgICAgICAvKiBzZWUgRUhDSSAzLjUuNCAqLworCV9fbGUzMgkJCWh3X2J1Zl9oaSBbNV07ICAgICAgICAvKiBBcHBlbmRpeCBCICovCisKKwkvKiB0aGUgcmVzdCBpcyBIQ0QtcHJpdmF0ZSAqLworCWRtYV9hZGRyX3QJCXF0ZF9kbWE7CQkvKiBxdGQgYWRkcmVzcyAqLworCXN0cnVjdCBsaXN0X2hlYWQJcXRkX2xpc3Q7CQkvKiBzdyBxdGQgbGlzdCAqLworCXN0cnVjdCB1cmIJCSp1cmI7CQkJLyogcXRkJ3MgdXJiICovCisJc2l6ZV90CQkJbGVuZ3RoOwkJCS8qIGxlbmd0aCBvZiBidWZmZXIgKi8KK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDMyKSkpOworCisvKiBtYXNrIE5ha0NudCtUIGluIHFoLT5od19hbHRfbmV4dCAqLworI2RlZmluZSBRVERfTUFTSyBfX2NvbnN0YW50X2NwdV90b19sZTMyICh+MHgxZikKKworI2RlZmluZSBJU19TSE9SVF9SRUFEKHRva2VuKSAoUVREX0xFTkdUSCAodG9rZW4pICE9IDAgJiYgUVREX1BJRCAodG9rZW4pID09IDEpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHR5cGUgdGFnIGZyb20ge3FoLGl0ZCxzaXRkLGZzdG59LT5od19uZXh0ICovCisjZGVmaW5lIFFfTkVYVF9UWVBFKGRtYSkgKChkbWEpICYgX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMyA8PCAxKSkKKworLyogdmFsdWVzIGZvciB0aGF0IHR5cGUgdGFnICovCisjZGVmaW5lIFFfVFlQRV9JVEQJX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCA8PCAxKQorI2RlZmluZSBRX1RZUEVfUUgJX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSA8PCAxKQorI2RlZmluZSBRX1RZUEVfU0lURCAJX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMiA8PCAxKQorI2RlZmluZSBRX1RZUEVfRlNUTiAJX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMyA8PCAxKQorCisvKiBuZXh0IGFzeW5jIHF1ZXVlIGVudHJ5LCBvciBwb2ludGVyIHRvIGludGVycnVwdC9wZXJpb2RpYyBRSCAqLworI2RlZmluZQlRSF9ORVhUKGRtYSkJKGNwdV90b19sZTMyKCgodTMyKWRtYSkmfjB4MDFmKXxRX1RZUEVfUUgpCisKKy8qIGZvciBwZXJpb2RpYy9hc3luYyBzY2hlZHVsZXMgYW5kIHF0ZCBsaXN0cywgbWFyayBlbmQgb2YgbGlzdCAqLworI2RlZmluZQlFSENJX0xJU1RfRU5ECV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMSkgLyogIm51bGwgcG9pbnRlciIgdG8gaHcgKi8KKworLyoKKyAqIEVudHJpZXMgaW4gcGVyaW9kaWMgc2hhZG93IHRhYmxlIGFyZSBwb2ludGVycyB0byBvbmUgb2YgZm91ciBraW5kcworICogb2YgZGF0YSBzdHJ1Y3R1cmUuICBUaGF0J3MgZGljdGF0ZWQgYnkgdGhlIGhhcmR3YXJlOyBhIHR5cGUgdGFnIGlzCisgKiBlbmNvZGVkIGluIHRoZSBsb3cgYml0cyBvZiB0aGUgaGFyZHdhcmUncyBwZXJpb2RpYyBzY2hlZHVsZS4gIFVzZQorICogUV9ORVhUX1RZUEUgdG8gZ2V0IHRoZSB0YWcuCisgKgorICogRm9yIGVudHJpZXMgaW4gdGhlIGFzeW5jIHNjaGVkdWxlLCB0aGUgdHlwZSB0YWcgYWx3YXlzIHNheXMgInFoIi4KKyAqLwordW5pb24gZWhjaV9zaGFkb3cgeworCXN0cnVjdCBlaGNpX3FoIAkJKnFoOwkJLyogUV9UWVBFX1FIICovCisJc3RydWN0IGVoY2lfaXRkCQkqaXRkOwkJLyogUV9UWVBFX0lURCAqLworCXN0cnVjdCBlaGNpX3NpdGQJKnNpdGQ7CQkvKiBRX1RZUEVfU0lURCAqLworCXN0cnVjdCBlaGNpX2ZzdG4JKmZzdG47CQkvKiBRX1RZUEVfRlNUTiAqLworCXUzMgkJCSpod19uZXh0OwkvKiAoYWxsIHR5cGVzKSAqLworCXZvaWQJCQkqcHRyOworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEVIQ0kgU3BlY2lmaWNhdGlvbiAwLjk1IFNlY3Rpb24gMy42CisgKiBRSDogZGVzY3JpYmVzIGNvbnRyb2wvYnVsay9pbnRlcnJ1cHQgZW5kcG9pbnRzCisgKiBTZWUgRmlnIDMtNyAiUXVldWUgSGVhZCBTdHJ1Y3R1cmUgTGF5b3V0Ii4KKyAqCisgKiBUaGVzZSBhcHBlYXIgaW4gYm90aCB0aGUgYXN5bmMgYW5kIChmb3IgaW50ZXJydXB0KSBwZXJpb2RpYyBzY2hlZHVsZXMuCisgKi8KKworc3RydWN0IGVoY2lfcWggeworCS8qIGZpcnN0IHBhcnQgZGVmaW5lZCBieSBFSENJIHNwZWMgKi8KKwlfX2xlMzIJCQlod19uZXh0OwkgLyogc2VlIEVIQ0kgMy42LjEgKi8KKwlfX2xlMzIJCQlod19pbmZvMTsgICAgICAgIC8qIHNlZSBFSENJIDMuNi4yICovCisjZGVmaW5lCVFIX0hFQUQJCTB4MDAwMDgwMDAKKwlfX2xlMzIJCQlod19pbmZvMjsgICAgICAgIC8qIHNlZSBFSENJIDMuNi4yICovCisJX19sZTMyCQkJaHdfY3VycmVudDsJIC8qIHF0ZCBsaXN0IC0gc2VlIEVIQ0kgMy42LjQgKi8KKwkKKwkvKiBxdGQgb3ZlcmxheSAoaGFyZHdhcmUgcGFydHMgb2YgYSBzdHJ1Y3QgZWhjaV9xdGQpICovCisJX19sZTMyCQkJaHdfcXRkX25leHQ7CisJX19sZTMyCQkJaHdfYWx0X25leHQ7CisJX19sZTMyCQkJaHdfdG9rZW47CisJX19sZTMyCQkJaHdfYnVmIFs1XTsKKwlfX2xlMzIJCQlod19idWZfaGkgWzVdOworCisJLyogdGhlIHJlc3QgaXMgSENELXByaXZhdGUgKi8KKwlkbWFfYWRkcl90CQlxaF9kbWE7CQkvKiBhZGRyZXNzIG9mIHFoICovCisJdW5pb24gZWhjaV9zaGFkb3cJcWhfbmV4dDsJLyogcHRyIHRvIHFoOyBvciBwZXJpb2RpYyAqLworCXN0cnVjdCBsaXN0X2hlYWQJcXRkX2xpc3Q7CS8qIHN3IHF0ZCBsaXN0ICovCisJc3RydWN0IGVoY2lfcXRkCQkqZHVtbXk7CisJc3RydWN0IGVoY2lfcWgJCSpyZWNsYWltOwkvKiBuZXh0IHRvIHJlY2xhaW0gKi8KKworCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2k7CisJc3RydWN0IGtyZWYJCWtyZWY7CisJdW5zaWduZWQJCXN0YW1wOworCisJdTgJCQlxaF9zdGF0ZTsKKyNkZWZpbmUJUUhfU1RBVEVfTElOS0VECQkxCQkvKiBIQyBzZWVzIHRoaXMgKi8KKyNkZWZpbmUJUUhfU1RBVEVfVU5MSU5LCQkyCQkvKiBIQyBtYXkgc3RpbGwgc2VlIHRoaXMgKi8KKyNkZWZpbmUJUUhfU1RBVEVfSURMRQkJMwkJLyogSEMgZG9lc24ndCBzZWUgdGhpcyAqLworI2RlZmluZQlRSF9TVEFURV9VTkxJTktfV0FJVAk0CQkvKiBMSU5LRUQgYW5kIG9uIHJlY2xhaW0gcSAqLworI2RlZmluZQlRSF9TVEFURV9DT01QTEVUSU5HCTUJCS8qIGRvbid0IHRvdWNoIHRva2VuLkhBTFQgKi8KKworCS8qIHBlcmlvZGljIHNjaGVkdWxlIGluZm8gKi8KKwl1OAkJCXVzZWNzOwkJLyogaW50ciBiYW5kd2lkdGggKi8KKwl1OAkJCWdhcF91ZjsJCS8qIHVmcmFtZXMgc3BsaXQvY3NwbGl0IGdhcCAqLworCXU4CQkJY191c2VjczsJLyogLi4uIHNwbGl0IGNvbXBsZXRpb24gYncgKi8KKwl1bnNpZ25lZCBzaG9ydAkJcGVyaW9kOwkJLyogcG9sbGluZyBpbnRlcnZhbCAqLworCXVuc2lnbmVkIHNob3J0CQlzdGFydDsJCS8qIHdoZXJlIHBvbGxpbmcgc3RhcnRzICovCisjZGVmaW5lIE5PX0ZSQU1FICgodW5zaWduZWQgc2hvcnQpfjApCQkJLyogcGljayBuZXcgc3RhcnQgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZQkqZGV2OwkJLyogYWNjZXNzIHRvIFRUICovCit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgzMikpKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogZGVzY3JpcHRpb24gb2Ygb25lIGlzbyB0cmFuc2FjdGlvbiAodXAgdG8gMyBLQiBkYXRhIGlmIGhpZ2hzcGVlZCkgKi8KK3N0cnVjdCBlaGNpX2lzb19wYWNrZXQgeworCS8qIFRoZXNlIHdpbGwgYmUgY29waWVkIHRvIGlURCB3aGVuIHNjaGVkdWxpbmcgKi8KKwl1NjQJCQlidWZwOwkJLyogaXRkLT5od19idWZweyxfaGl9W3BnXSB8PSAqLworCV9fbGUzMgkJCXRyYW5zYWN0aW9uOwkvKiBpdGQtPmh3X3RyYW5zYWN0aW9uW2ldIHw9ICovCisJdTgJCQljcm9zczsJCS8qIGJ1ZiBjcm9zc2VzIHBhZ2VzICovCisJLyogZm9yIGZ1bGwgc3BlZWQgT1VUIHNwbGl0cyAqLworCXUzMgkJCWJ1ZjE7Cit9OworCisvKiB0ZW1wb3Jhcnkgc2NoZWR1bGUgZGF0YSBmb3IgcGFja2V0cyBmcm9tIGlzbyB1cmJzIChib3RoIHNwZWVkcykKKyAqIGVhY2ggcGFja2V0IGlzIG9uZSBsb2dpY2FsIHVzYiB0cmFuc2FjdGlvbiB0byB0aGUgZGV2aWNlIChub3QgVFQpLAorICogYmVnaW5uaW5nIGF0IHN0cmVhbS0+bmV4dF91ZnJhbWUKKyAqLworc3RydWN0IGVoY2lfaXNvX3NjaGVkIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXRkX2xpc3Q7CisJdW5zaWduZWQJCXNwYW47CisJc3RydWN0IGVoY2lfaXNvX3BhY2tldAlwYWNrZXQgWzBdOworfTsKKworLyoKKyAqIGVoY2lfaXNvX3N0cmVhbSAtIGdyb3VwcyBhbGwgKHMpaXRkcyBmb3IgdGhpcyBlbmRwb2ludC4KKyAqIGFjdHMgbGlrZSBhIHFoIHdvdWxkLCBpZiBFSENJIGhhZCB0aGVtIGZvciBJU08uCisgKi8KK3N0cnVjdCBlaGNpX2lzb19zdHJlYW0geworCS8qIGZpcnN0IHR3byBmaWVsZHMgbWF0Y2ggUUgsIGJ1dCBpbmZvMSA9PSAwICovCisJX19sZTMyCQkJaHdfbmV4dDsKKwlfX2xlMzIJCQlod19pbmZvMTsKKworCXUzMgkJCXJlZmNvdW50OworCXU4CQkJYkVuZHBvaW50QWRkcmVzczsKKwl1OAkJCWhpZ2hzcGVlZDsKKwl1MTYJCQlkZXB0aDsJCS8qIGRlcHRoIGluIHVmcmFtZXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXRkX2xpc3Q7CS8qIHF1ZXVlZCBpdGRzL3NpdGRzICovCisJc3RydWN0IGxpc3RfaGVhZAlmcmVlX2xpc3Q7CS8qIGxpc3Qgb2YgdW51c2VkIGl0ZHMvc2l0ZHMgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKKyAJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKworCS8qIG91dHB1dCBvZiAocmUpc2NoZWR1bGluZyAqLworCXVuc2lnbmVkIGxvbmcJCXN0YXJ0OwkJLyogamlmZmllcyAqLworCXVuc2lnbmVkIGxvbmcJCXJlc2NoZWR1bGVkOworCWludAkJCW5leHRfdWZyYW1lOworCV9fbGUzMgkJCXNwbGl0czsKKworCS8qIHRoZSByZXN0IGlzIGRlcml2ZWQgZnJvbSB0aGUgZW5kcG9pbnQgZGVzY3JpcHRvciwKKwkgKiB0cnVzdGluZyB1cmItPmludGVydmFsID09IGYoZXBkZXNjLT5iSW50ZXJ2YWwpIGFuZAorCSAqIGluY2x1ZGluZyB0aGUgZXh0cmEgaW5mbyBmb3IgaHdfYnVmcFswLi4yXQorCSAqLworCXU4CQkJaW50ZXJ2YWw7CisJdTgJCQl1c2VjcywgY191c2VjczsKKwl1MTYJCQltYXhwOworCXUxNgkJCXJhd19tYXNrOworCXVuc2lnbmVkCQliYW5kd2lkdGg7CisKKwkvKiBUaGlzIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSBpVEQncyBod19idWZwIGZpZWxkcyAqLworCV9fbGUzMgkJCWJ1ZjA7CQkKKwlfX2xlMzIJCQlidWYxOwkJCisJX19sZTMyCQkJYnVmMjsKKworCS8qIHRoaXMgaXMgdXNlZCB0byBpbml0aWFsaXplIHNJVEQncyB0dCBpbmZvICovCisJX19sZTMyCQkJYWRkcmVzczsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBFSENJIFNwZWNpZmljYXRpb24gMC45NSBTZWN0aW9uIDMuMworICogRmlnIDMtNCAiSXNvY2hyb25vdXMgVHJhbnNhY3Rpb24gRGVzY3JpcHRvciAoaVREKSIKKyAqCisgKiBTY2hlZHVsZSByZWNvcmRzIGZvciBoaWdoIHNwZWVkIGlzbyB4ZmVycworICovCitzdHJ1Y3QgZWhjaV9pdGQgeworCS8qIGZpcnN0IHBhcnQgZGVmaW5lZCBieSBFSENJIHNwZWMgKi8KKwlfX2xlMzIJCQlod19uZXh0OyAgICAgICAgICAgLyogc2VlIEVIQ0kgMy4zLjEgKi8KKwlfX2xlMzIJCQlod190cmFuc2FjdGlvbiBbOF07IC8qIHNlZSBFSENJIDMuMy4yICovCisjZGVmaW5lIEVIQ0lfSVNPQ19BQ1RJVkUgICAgICAgICgxPDwzMSkgICAgICAgIC8qIGFjdGl2YXRlIHRyYW5zZmVyIHRoaXMgc2xvdCAqLworI2RlZmluZSBFSENJX0lTT0NfQlVGX0VSUiAgICAgICAoMTw8MzApICAgICAgICAvKiBEYXRhIGJ1ZmZlciBlcnJvciAqLworI2RlZmluZSBFSENJX0lTT0NfQkFCQkxFICAgICAgICAoMTw8MjkpICAgICAgICAvKiBiYWJibGUgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgRUhDSV9JU09DX1hBQ1RFUlIgICAgICAgKDE8PDI4KSAgICAgICAgLyogWGFjdEVyciAtIHRyYW5zYWN0aW9uIGVycm9yICovCisjZGVmaW5lCUVIQ0lfSVREX0xFTkdUSCh0b2spCSgoKHRvayk+PjE2KSAmIDB4MGZmZikKKyNkZWZpbmUJRUhDSV9JVERfSU9DCQkoMSA8PCAxNSkJLyogaW50ZXJydXB0IG9uIGNvbXBsZXRlICovCisKKyNkZWZpbmUgSVREX0FDVElWRQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEVIQ0lfSVNPQ19BQ1RJVkUpCisKKwlfX2xlMzIJCQlod19idWZwIFs3XTsJLyogc2VlIEVIQ0kgMy4zLjMgKi8gCisJX19sZTMyCQkJaHdfYnVmcF9oaSBbN107CS8qIEFwcGVuZGl4IEIgKi8KKworCS8qIHRoZSByZXN0IGlzIEhDRC1wcml2YXRlICovCisJZG1hX2FkZHJfdAkJaXRkX2RtYTsJLyogZm9yIHRoaXMgaXRkICovCisJdW5pb24gZWhjaV9zaGFkb3cJaXRkX25leHQ7CS8qIHB0ciB0byBwZXJpb2RpYyBxIGVudHJ5ICovCisKKwlzdHJ1Y3QgdXJiCQkqdXJiOworCXN0cnVjdCBlaGNpX2lzb19zdHJlYW0JKnN0cmVhbTsJLyogZW5kcG9pbnQncyBxdWV1ZSAqLworCXN0cnVjdCBsaXN0X2hlYWQJaXRkX2xpc3Q7CS8qIGxpc3Qgb2Ygc3RyZWFtJ3MgaXRkcyAqLworCisJLyogYW55L2FsbCBod190cmFuc2FjdGlvbnMgaGVyZSBtYXkgYmUgdXNlZCBieSB0aGF0IHVyYiAqLworCXVuc2lnbmVkCQlmcmFtZTsJCS8qIHdoZXJlIHNjaGVkdWxlZCAqLworCXVuc2lnbmVkCQlwZzsKKwl1bnNpZ25lZAkJaW5kZXhbOF07CS8qIGluIHVyYi0+aXNvX2ZyYW1lX2Rlc2MgKi8KKwl1OAkJCXVzZWNzWzhdOworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMzIpKSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBFSENJIFNwZWNpZmljYXRpb24gMC45NSBTZWN0aW9uIDMuNCAKKyAqIHNpVEQsIGFrYSBzcGxpdC10cmFuc2FjdGlvbiBpc29jaHJvbm91cyBUcmFuc2ZlciBEZXNjcmlwdG9yCisgKiAgICAgICAuLi4gZGVzY3JpYmUgZnVsbCBzcGVlZCBpc28geGZlcnMgdGhyb3VnaCBUVCBpbiBodWJzCisgKiBzZWUgRmlndXJlIDMtNSAiU3BsaXQtdHJhbnNhY3Rpb24gSXNvY2hyb25vdXMgVHJhbnNhY3Rpb24gRGVzY3JpcHRvciAoc2lURCkKKyAqLworc3RydWN0IGVoY2lfc2l0ZCB7CisJLyogZmlyc3QgcGFydCBkZWZpbmVkIGJ5IEVIQ0kgc3BlYyAqLworCV9fbGUzMgkJCWh3X25leHQ7CisvKiB1c2VzIGJpdCBmaWVsZCBtYWNyb3MgYWJvdmUgLSBzZWUgRUhDSSAwLjk1IFRhYmxlIDMtOCAqLworCV9fbGUzMgkJCWh3X2Z1bGxzcGVlZF9lcDsJLyogRUhDSSB0YWJsZSAzLTkgKi8KKwlfX2xlMzIJCQlod191ZnJhbWU7CQkvKiBFSENJIHRhYmxlIDMtMTAgKi8KKwlfX2xlMzIJCQlod19yZXN1bHRzOwkJLyogRUhDSSB0YWJsZSAzLTExICovCisjZGVmaW5lCVNJVERfSU9DCSgxIDw8IDMxKQkvKiBpbnRlcnJ1cHQgb24gY29tcGxldGlvbiAqLworI2RlZmluZQlTSVREX1BBR0UJKDEgPDwgMzApCS8qIGJ1ZmZlciAwLzEgKi8KKyNkZWZpbmUJU0lURF9MRU5HVEgoeCkJKDB4M2ZmICYgKCh4KT4+MTYpKQorI2RlZmluZQlTSVREX1NUU19BQ1RJVkUJKDEgPDwgNykJLyogSEMgbWF5IGV4ZWN1dGUgdGhpcyAqLworI2RlZmluZQlTSVREX1NUU19FUlIJKDEgPDwgNikJLyogZXJyb3IgZnJvbSBUVCAqLworI2RlZmluZQlTSVREX1NUU19EQkUJKDEgPDwgNSkJLyogZGF0YSBidWZmZXIgZXJyb3IgKGluIEhDKSAqLworI2RlZmluZQlTSVREX1NUU19CQUJCTEUJKDEgPDwgNCkJLyogZGV2aWNlIHdhcyBiYWJibGluZyAqLworI2RlZmluZQlTSVREX1NUU19YQUNUCSgxIDw8IDMpCS8qIGlsbGVnYWwgSU4gcmVzcG9uc2UgKi8KKyNkZWZpbmUJU0lURF9TVFNfTU1GCSgxIDw8IDIpCS8qIGluY29tcGxldGUgc3BsaXQgdHJhbnNhY3Rpb24gKi8KKyNkZWZpbmUJU0lURF9TVFNfU1RTCSgxIDw8IDEpCS8qIHNwbGl0IHRyYW5zYWN0aW9uIHN0YXRlICovCisKKyNkZWZpbmUgU0lURF9BQ1RJVkUJX19jb25zdGFudF9jcHVfdG9fbGUzMihTSVREX1NUU19BQ1RJVkUpCisKKwlfX2xlMzIJCQlod19idWYgWzJdOwkJLyogRUhDSSB0YWJsZSAzLTEyICovCisJX19sZTMyCQkJaHdfYmFja3BvaW50ZXI7CQkvKiBFSENJIHRhYmxlIDMtMTMgKi8KKwlfX2xlMzIJCQlod19idWZfaGkgWzJdOwkJLyogQXBwZW5kaXggQiAqLworCisJLyogdGhlIHJlc3QgaXMgSENELXByaXZhdGUgKi8KKwlkbWFfYWRkcl90CQlzaXRkX2RtYTsKKwl1bmlvbiBlaGNpX3NoYWRvdwlzaXRkX25leHQ7CS8qIHB0ciB0byBwZXJpb2RpYyBxIGVudHJ5ICovCisKKwlzdHJ1Y3QgdXJiCQkqdXJiOworCXN0cnVjdCBlaGNpX2lzb19zdHJlYW0JKnN0cmVhbTsJLyogZW5kcG9pbnQncyBxdWV1ZSAqLworCXN0cnVjdCBsaXN0X2hlYWQJc2l0ZF9saXN0OwkvKiBsaXN0IG9mIHN0cmVhbSdzIHNpdGRzICovCisJdW5zaWduZWQJCWZyYW1lOworCXVuc2lnbmVkCQlpbmRleDsKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDMyKSkpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogRUhDSSBTcGVjaWZpY2F0aW9uIDAuOTYgU2VjdGlvbiAzLjcKKyAqIFBlcmlvZGljIEZyYW1lIFNwYW4gVHJhdmVyc2FsIE5vZGUgKEZTVE4pCisgKgorICogTWFuYWdlcyBzcGxpdCBpbnRlcnJ1cHQgdHJhbnNhY3Rpb25zICh1c2luZyBUVCkgdGhhdCBzcGFuIGZyYW1lIGJvdW5kYXJpZXMKKyAqIGludG8gdWZyYW1lcyAwLzE7IHNlZSA0LjEyLjIuMi4gIEluIHRob3NlIHVmcmFtZXMsIGEgInNhdmUgcGxhY2UiIEZTVE4KKyAqIG1ha2VzIHRoZSBIQyBqdW1wIChiYWNrKSB0byBhIFFIIHRvIHNjYW4gZm9yIGZzL2xzIFFIIGNvbXBsZXRpb25zIHVudGlsCisgKiBpdCBoaXRzIGEgInJlc3RvcmUiIEZTVE47IHRoZW4gaXQgcmV0dXJucyB0byBmaW5pc2ggb3RoZXIgdWZyYW1lIDAvMSB3b3JrLgorICovCitzdHJ1Y3QgZWhjaV9mc3RuIHsKKwlfX2xlMzIJCQlod19uZXh0OwkvKiBhbnkgcGVyaW9kaWMgcSBlbnRyeSAqLworCV9fbGUzMgkJCWh3X3ByZXY7CS8qIHFoIG9yIEVIQ0lfTElTVF9FTkQgKi8KKworCS8qIHRoZSByZXN0IGlzIEhDRC1wcml2YXRlICovCisJZG1hX2FkZHJfdAkJZnN0bl9kbWE7CisJdW5pb24gZWhjaV9zaGFkb3cJZnN0bl9uZXh0OwkvKiBwdHIgdG8gcGVyaW9kaWMgcSBlbnRyeSAqLworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMzIpKSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQKKworLyoKKyAqIFNvbWUgRUhDSSBjb250cm9sbGVycyBoYXZlIGEgVHJhbnNhY3Rpb24gVHJhbnNsYXRvciBidWlsdCBpbnRvIHRoZQorICogcm9vdCBodWIuIFRoaXMgaXMgYSBub24tc3RhbmRhcmQgZmVhdHVyZS4gIEVhY2ggY29udHJvbGxlciB3aWxsIG5lZWQKKyAqIHRvIGFkZCBjb2RlIHRvIHRoZSBmb2xsb3dpbmcgaW5saW5lIGZ1bmN0aW9ucywgYW5kIGNhbGwgdGhlbSBhcworICogbmVlZGVkIChtb3N0bHkgaW4gcm9vdCBodWIgY29kZSkuCisgKi8KKworI2RlZmluZQllaGNpX2lzX1RESShlKQkJCSgoZSktPmlzX3RkaV9yaF90dCkKKworLyogUmV0dXJucyB0aGUgc3BlZWQgb2YgYSBkZXZpY2UgYXR0YWNoZWQgdG8gYSBwb3J0IG9uIHRoZSByb290IGh1Yi4gKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitlaGNpX3BvcnRfc3BlZWQoc3RydWN0IGVoY2lfaGNkICplaGNpLCB1bnNpZ25lZCBpbnQgcG9ydHNjKQoreworCWlmIChlaGNpX2lzX1RESShlaGNpKSkgeworCQlzd2l0Y2ggKChwb3J0c2M+PjI2KSYzKSB7CisJCWNhc2UgMDoKKwkJCXJldHVybiAwOworCQljYXNlIDE6CisJCQlyZXR1cm4gKDE8PFVTQl9QT1JUX0ZFQVRfTE9XU1BFRUQpOworCQljYXNlIDI6CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gKDE8PFVTQl9QT1JUX0ZFQVRfSElHSFNQRUVEKTsKKwkJfQorCX0KKwlyZXR1cm4gKDE8PFVTQl9QT1JUX0ZFQVRfSElHSFNQRUVEKTsKK30KKworI2Vsc2UKKworI2RlZmluZQllaGNpX2lzX1RESShlKQkJCSgwKQorCisjZGVmaW5lCWVoY2lfcG9ydF9zcGVlZChlaGNpLCBwb3J0c2MpCSgxPDxVU0JfUE9SVF9GRUFUX0hJR0hTUEVFRCkKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZuZGVmIERFQlVHCisjZGVmaW5lIFNUVUJfREVCVUdfRklMRVMKKyNlbmRpZgkvKiBERUJVRyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZW5kaWYgLyogX19MSU5VWF9FSENJX0hDRF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2hjX2NyaXN2MTAuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaGNfY3Jpc3YxMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMTJiZTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2hjX2NyaXN2MTAuYwpAQCAtMCwwICsxLDQ1NTYgQEAKKy8qCisgKiB1c2ItaG9zdC5jOiBFVFJBWCAxMDBMWCBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlciAoSENEKQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwMyBBeGlzIENvbW11bmljYXRpb25zIEFCLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3ZpbnRvLmg+CisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKy8qIFVnbHkgaW5jbHVkZSBiZWNhdXNlIHdlIGRvbid0IGxpdmUgd2l0aCB0aGUgb3RoZXIgaG9zdCBkcml2ZXJzLiAqLworI2luY2x1ZGUgPC4uL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmg+CisjaW5jbHVkZSA8Li4vZHJpdmVycy91c2IvY29yZS91c2IuaD4KKworI2luY2x1ZGUgImhjX2NyaXN2MTAuaCIKKworI2RlZmluZSBFVFJBWF9VU0JfSENfSVJRIFVTQl9IQ19JUlFfTkJSCisjZGVmaW5lIEVUUkFYX1VTQl9SWF9JUlEgVVNCX0RNQV9SWF9JUlFfTkJSCisjZGVmaW5lIEVUUkFYX1VTQl9UWF9JUlEgVVNCX0RNQV9UWF9JUlFfTkJSCisKK3N0YXRpYyBjb25zdCBjaGFyICp1c2JfaGNkX3ZlcnNpb24gPSAiJFJldmlzaW9uOiAxLjIgJCI7CisKKyN1bmRlZiBLRVJOX0RFQlVHCisjZGVmaW5lIEtFUk5fREVCVUcgIiIKKworCisjdW5kZWYgVVNCX0RFQlVHX1JICisjdW5kZWYgVVNCX0RFQlVHX0VQSUQKKyN1bmRlZiBVU0JfREVCVUdfU0IKKyN1bmRlZiBVU0JfREVCVUdfREVTQworI3VuZGVmIFVTQl9ERUJVR19VUkIKKyN1bmRlZiBVU0JfREVCVUdfVFJBQ0UKKyN1bmRlZiBVU0JfREVCVUdfQlVMSworI3VuZGVmIFVTQl9ERUJVR19DVFJMCisjdW5kZWYgVVNCX0RFQlVHX0lOVFIKKyN1bmRlZiBVU0JfREVCVUdfSVNPQworCisjaWZkZWYgVVNCX0RFQlVHX1JICisjZGVmaW5lIGRiZ19yaChmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18gIjogKFJIKSAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQorI2Vsc2UKKyNkZWZpbmUgZGJnX3JoKGZvcm1hdCwgYXJnLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZkZWYgVVNCX0RFQlVHX0VQSUQKKyNkZWZpbmUgZGJnX2VwaWQoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fICI6IChFUElEKSAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQorI2Vsc2UKKyNkZWZpbmUgZGJnX2VwaWQoZm9ybWF0LCBhcmcuLi4pIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZmRlZiBVU0JfREVCVUdfU0IKKyNkZWZpbmUgZGJnX3NiKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiAoU0IpICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCisjZWxzZQorI2RlZmluZSBkYmdfc2IoZm9ybWF0LCBhcmcuLi4pIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZmRlZiBVU0JfREVCVUdfQ1RSTAorI2RlZmluZSBkYmdfY3RybChmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18gIjogKENUUkwpICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCisjZWxzZQorI2RlZmluZSBkYmdfY3RybChmb3JtYXQsIGFyZy4uLikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworI2lmZGVmIFVTQl9ERUJVR19CVUxLCisjZGVmaW5lIGRiZ19idWxrKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiAoQlVMSykgIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKKyNlbHNlCisjZGVmaW5lIGRiZ19idWxrKGZvcm1hdCwgYXJnLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZkZWYgVVNCX0RFQlVHX0lOVFIKKyNkZWZpbmUgZGJnX2ludHIoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fICI6IChJTlRSKSAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQorI2Vsc2UKKyNkZWZpbmUgZGJnX2ludHIoZm9ybWF0LCBhcmcuLi4pIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZmRlZiBVU0JfREVCVUdfSVNPQworI2RlZmluZSBkYmdfaXNvYyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18gIjogKElTT0MpICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCisjZWxzZQorI2RlZmluZSBkYmdfaXNvYyhmb3JtYXQsIGFyZy4uLikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworI2lmZGVmIFVTQl9ERUJVR19UUkFDRQorI2RlZmluZSBEQkZFTlRFUiAocHJpbnRrKCI6IEVudGVyaW5nOiAlc1xuIiwgX19GVU5DVElPTl9fKSkKKyNkZWZpbmUgREJGRVhJVCAgKHByaW50aygiOiBFeGl0aW5nOiAgJXNcbiIsIF9fRlVOQ1RJT05fXykpCisjZWxzZQorI2RlZmluZSBEQkZFTlRFUiBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgREJGRVhJVCAgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSB1c2JfcGlwZXNsb3cocGlwZSkJKCgocGlwZSkgPj4gMjYpICYgMSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVmlydHVhbCBSb290IEh1YgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgX191OCByb290X2h1Yl9kZXZfZGVzW10gPQoreworCTB4MTIsICAvKiAgX191OCAgYkxlbmd0aDsgKi8KKwkweDAxLCAgLyogIF9fdTggIGJEZXNjcmlwdG9yVHlwZTsgRGV2aWNlICovCisJMHgwMCwgIC8qICBfX2xlMTYgYmNkVVNCOyB2MS4wICovCisJMHgwMSwKKwkweDA5LCAgLyogIF9fdTggIGJEZXZpY2VDbGFzczsgSFVCX0NMQVNTQ09ERSAqLworCTB4MDAsICAvKiAgX191OCAgYkRldmljZVN1YkNsYXNzOyAqLworCTB4MDAsICAvKiAgX191OCAgYkRldmljZVByb3RvY29sOyAqLworCTB4MDgsICAvKiAgX191OCAgYk1heFBhY2tldFNpemUwOyA4IEJ5dGVzICovCisJMHgwMCwgIC8qICBfX2xlMTYgaWRWZW5kb3I7ICovCisJMHgwMCwKKwkweDAwLCAgLyogIF9fbGUxNiBpZFByb2R1Y3Q7ICovCisJMHgwMCwKKwkweDAwLCAgLyogIF9fbGUxNiBiY2REZXZpY2U7ICovCisJMHgwMCwKKwkweDAwLCAgLyogIF9fdTggIGlNYW51ZmFjdHVyZXI7ICovCisJMHgwMiwgIC8qICBfX3U4ICBpUHJvZHVjdDsgKi8KKwkweDAxLCAgLyogIF9fdTggIGlTZXJpYWxOdW1iZXI7ICovCisJMHgwMSAgIC8qICBfX3U4ICBiTnVtQ29uZmlndXJhdGlvbnM7ICovCit9OworCisvKiBDb25maWd1cmF0aW9uIGRlc2NyaXB0b3IgKi8KK3N0YXRpYyBfX3U4IHJvb3RfaHViX2NvbmZpZ19kZXNbXSA9Cit7CisJMHgwOSwgIC8qICBfX3U4ICBiTGVuZ3RoOyAqLworCTB4MDIsICAvKiAgX191OCAgYkRlc2NyaXB0b3JUeXBlOyBDb25maWd1cmF0aW9uICovCisJMHgxOSwgIC8qICBfX2xlMTYgd1RvdGFsTGVuZ3RoOyAqLworCTB4MDAsCisJMHgwMSwgIC8qICBfX3U4ICBiTnVtSW50ZXJmYWNlczsgKi8KKwkweDAxLCAgLyogIF9fdTggIGJDb25maWd1cmF0aW9uVmFsdWU7ICovCisJMHgwMCwgIC8qICBfX3U4ICBpQ29uZmlndXJhdGlvbjsgKi8KKwkweDQwLCAgLyogIF9fdTggIGJtQXR0cmlidXRlczsgQml0IDc6IEJ1cy1wb3dlcmVkICovCisJMHgwMCwgIC8qICBfX3U4ICBNYXhQb3dlcjsgKi8KKworICAgICAvKiBpbnRlcmZhY2UgKi8KKwkweDA5LCAgLyogIF9fdTggIGlmX2JMZW5ndGg7ICovCisJMHgwNCwgIC8qICBfX3U4ICBpZl9iRGVzY3JpcHRvclR5cGU7IEludGVyZmFjZSAqLworCTB4MDAsICAvKiAgX191OCAgaWZfYkludGVyZmFjZU51bWJlcjsgKi8KKwkweDAwLCAgLyogIF9fdTggIGlmX2JBbHRlcm5hdGVTZXR0aW5nOyAqLworCTB4MDEsICAvKiAgX191OCAgaWZfYk51bUVuZHBvaW50czsgKi8KKwkweDA5LCAgLyogIF9fdTggIGlmX2JJbnRlcmZhY2VDbGFzczsgSFVCX0NMQVNTQ09ERSAqLworCTB4MDAsICAvKiAgX191OCAgaWZfYkludGVyZmFjZVN1YkNsYXNzOyAqLworCTB4MDAsICAvKiAgX191OCAgaWZfYkludGVyZmFjZVByb3RvY29sOyAqLworCTB4MDAsICAvKiAgX191OCAgaWZfaUludGVyZmFjZTsgKi8KKworICAgICAvKiBlbmRwb2ludCAqLworCTB4MDcsICAvKiAgX191OCAgZXBfYkxlbmd0aDsgKi8KKwkweDA1LCAgLyogIF9fdTggIGVwX2JEZXNjcmlwdG9yVHlwZTsgRW5kcG9pbnQgKi8KKwkweDgxLCAgLyogIF9fdTggIGVwX2JFbmRwb2ludEFkZHJlc3M7IElOIEVuZHBvaW50IDEgKi8KKwkweDAzLCAgLyogIF9fdTggIGVwX2JtQXR0cmlidXRlczsgSW50ZXJydXB0ICovCisJMHgwOCwgIC8qICBfX2xlMTYgZXBfd01heFBhY2tldFNpemU7IDggQnl0ZXMgKi8KKwkweDAwLAorCTB4ZmYgICAvKiAgX191OCAgZXBfYkludGVydmFsOyAyNTUgbXMgKi8KK307CisKK3N0YXRpYyBfX3U4IHJvb3RfaHViX2h1Yl9kZXNbXSA9Cit7CisJMHgwOSwgIC8qICBfX3U4ICBiTGVuZ3RoOyAqLworCTB4MjksICAvKiAgX191OCAgYkRlc2NyaXB0b3JUeXBlOyBIdWItZGVzY3JpcHRvciAqLworCTB4MDIsICAvKiAgX191OCAgYk5iclBvcnRzOyAqLworCTB4MDAsICAvKiBfX3UxNiAgd0h1YkNoYXJhY3RlcmlzdGljczsgKi8KKwkweDAwLAorCTB4MDEsICAvKiAgX191OCAgYlB3ck9uMnB3ckdvb2Q7IDJtcyAqLworCTB4MDAsICAvKiAgX191OCAgYkh1YkNvbnRyQ3VycmVudDsgMCBtQSAqLworCTB4MDAsICAvKiAgX191OCAgRGV2aWNlUmVtb3ZhYmxlOyAqKiogNyBQb3J0cyBtYXggKioqICovCisJMHhmZiAgIC8qICBfX3U4ICBQb3J0UHdyQ3RybE1hc2s7ICoqKiA3IHBvcnRzIG1heCAqKiogKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBidWxrX3N0YXJ0X3RpbWVyID0gVElNRVJfSU5JVElBTElaRVIoTlVMTCwgMCwgMCk7CitzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgYnVsa19lb3RfdGltZXIgPSBUSU1FUl9JTklUSUFMSVpFUihOVUxMLCAwLCAwKTsKKworLyogV2Ugd2FudCB0aGUgc3RhcnQgdGltZXIgdG8gZXhwaXJlIGJlZm9yZSB0aGUgZW90IHRpbWVyLCBiZWNhdXNlIHRoZSBmb3JtZXIgbWlnaHQgc3RhcnQKKyAgIHRyYWZmaWMsIHRodXMgbWFraW5nIGl0IHVubmVjZXNzYXJ5IGZvciB0aGUgbGF0dGVyIHRvIHRpbWUgb3V0LiAqLworI2RlZmluZSBCVUxLX1NUQVJUX1RJTUVSX0lOVEVSVkFMIChIWi8xMCkgLyogMTAwIG1zICovCisjZGVmaW5lIEJVTEtfRU9UX1RJTUVSX0lOVEVSVkFMIChIWi8xMCsyKSAvKiAxMjAgbXMgKi8KKworI2RlZmluZSBPSyh4KSBsZW4gPSAoeCk7IGRiZ19yaCgiT0soJWQpOiBsaW5lOiAlZCIsIHgsIF9fTElORV9fKTsgYnJlYWsKKyNkZWZpbmUgQ0hFQ0tfQUxJR04oeCkgaWYgKCgoX191MzIpKHgpKSAmIDB4MDAwMDAwMDMpIFwKK3twYW5pYygiQWxpZ25tZW50IGNoZWNrIChEV09SRCkgZmFpbGVkIGF0ICVzOiVzOiVkXG4iLCBfX0ZJTEVfXywgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7fQorCisjZGVmaW5lIFNMQUJfRkxBRyAgICAgKGluX2ludGVycnVwdCgpID8gU0xBQl9BVE9NSUMgOiBTTEFCX0tFUk5FTCkKKyNkZWZpbmUgS01BTExPQ19GTEFHICAoaW5faW50ZXJydXB0KCkgPyBHRlBfQVRPTUlDIDogR0ZQX0tFUk5FTCkKKworLyogTW9zdCBoZWxwZnVsIGRlYnVnZ2luZyBhaWQgKi8KKyNkZWZpbmUgYXNzZXJ0KGV4cHIpICgodm9pZCkgKChleHByKSA/IDAgOiAoZXJyKCJhc3NlcnQgZmFpbGVkIGF0IGxpbmUgJWQiLF9fTElORV9fKSkpKQorCisvKiBBbHRlcm5hdGl2ZSBhc3NlcnQgZGVmaW5lIHdoaWNoIHN0b3BzIGFmdGVyIGEgZmFpbGVkIGFzc2VydC4gKi8KKy8qCisjZGVmaW5lIGFzc2VydChleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCEoZXhwcikpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZXJyKCJhc3NlcnQgZmFpbGVkIGF0IGxpbmUgJWQiLF9fTElORV9fKTsgXAorICAgICAgICAgICAgICAgIHdoaWxlICgxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisqLworCisKKy8qIEZJWE1FOiBTaG91bGQgUlhfQlVGX1NJWkUgYmUgYSBjb25maWcgb3B0aW9uLCBvciBtYXliZSB3ZSBzaG91bGQgYWRqdXN0IGl0IGR5bmFtaWNhbGx5PworICAgVG8gYWRqdXN0IGl0IGR5bmFtaWNhbGx5IHdlIHdvdWxkIGhhdmUgdG8gZ2V0IGFuIGludGVycnVwdCB3aGVuIHdlIHJlYWNoIHRoZSBlbmQKKyAgIG9mIHRoZSByeCBkZXNjcmlwdG9yIGxpc3QsIG9yIHdoZW4gd2UgZ2V0IGNsb3NlIHRvIHRoZSBlbmQsIGFuZCB0aGVuIGFsbG9jYXRlIG1vcmUKKyAgIGRlc2NyaXB0b3JzLiAqLworCisjZGVmaW5lIE5CUl9PRl9SWF9ERVNDICAgICA1MTIKKyNkZWZpbmUgUlhfREVTQ19CVUZfU0laRSAgIDEwMjQKKyNkZWZpbmUgUlhfQlVGX1NJWkUgICAgICAgIChOQlJfT0ZfUlhfREVTQyAqIFJYX0RFU0NfQlVGX1NJWkUpCisKKy8qIFRoZSBudW1iZXIgb2YgZXBpZHMgaXMsIGFtb25nIG90aGVyIHRoaW5ncywgdXNlZCBmb3IgcHJlLWFsbG9jYXRpbmcKKyAgIGN0cmwsIGJ1bGsgYW5kIGlzb2MgRVAgZGVzY3JpcHRvcnMgKG9uZSBmb3IgZWFjaCBlcGlkKS4KKyAgIEFzc3VtZWQgdG8gYmUgPiAxIHdoZW4gaW5pdGlhdGluZyB0aGUgRE1BIGxpc3RzLiAqLworI2RlZmluZSBOQlJfT0ZfRVBJRFMgICAgICAgMzIKKworLyogU3VwcG9ydCBpbnRlcnJ1cHQgdHJhZmZpYyBpbnRlcnZhbHMgdXAgdG8gMTI4IG1zLiAqLworI2RlZmluZSBNQVhfSU5UUl9JTlRFUlZBTCAxMjgKKworLyogSWYgcGVyaW9kaWMgdHJhZmZpYyAoaW50ciBvciBpc29jKSBpcyB0byBiZSB1c2VkLCB0aGVuIG9uZSBlbnRyeSBpbiB0aGUgRVAgdGFibGUKKyAgIG11c3QgYmUgImludmFsaWQiLiBCeSB0aGlzIHdlIG1lYW4gdGhhdCB3ZSBzaG91bGRuJ3QgY2FyZSBhYm91dCBlcGlkIGF0dGVudGlvbnMKKyAgIGZvciB0aGlzIGVwaWQsIG9yIGF0IGxlYXN0IGhhbmRsZSB0aGVtIGRpZmZlcmVudGx5IGZyb20gZXBpZCBhdHRlbnRpb25zIGZvciAidmFsaWQiCisgICBlcGlkcy4gVGhpcyBkZWZpbmUgZGV0ZXJtaW5lcyB3aGljaCBvbmUgdG8gdXNlIChkb24ndCBjaGFuZ2UgaXQpLiAqLworI2RlZmluZSBJTlZBTElEX0VQSUQgICAgIDMxCisvKiBBIHNwZWNpYWwgZXBpZCBmb3IgdGhlIGJ1bGsgZHVtbXlzLiAqLworI2RlZmluZSBEVU1NWV9FUElEICAgICAgIDMwCisKKy8qIFRoaXMgaXMganVzdCBhIHNvZnR3YXJlIGNhY2hlIGZvciB0aGUgdmFsaWQgZW50cmllcyBpbiBSX1VTQl9FUFRfREFUQS4gKi8KK3N0YXRpYyBfX3UzMiBlcGlkX3VzYWdlX2JpdG1hc2s7CisKKy8qIEEgYml0ZmllbGQgdG8ga2VlcCBpbmZvcm1hdGlvbiBvbiBpbi9vdXQgdHJhZmZpYyBpcyBuZWVkZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkKKyAgIGFuIGVuZHBvaW50IG9uIGEgZGV2aWNlLCBzaW5jZSB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgd2hpY2ggaW5kaWNhdGVzIHRyYWZmaWMKKyAgIGRpcmVjdGlvbiBpcyBsYWNraW5nIGluIHRoZSBlcF9pZCBmaWVsZCAoRVRSQVggZXBpZHMgY2FuIGhhbmRsZSBib3RoIGluIGFuZAorICAgb3V0IHRyYWZmaWMgb24gZW5kcG9pbnRzIHRoYXQgYXJlIG90aGVyd2lzZSBpZGVudGljYWwpLiBUaGUgVVNCIGZyYW1ld29yaywgaG93ZXZlciwKKyAgIHJlbGllcyBvbiB0aGVtIHRvIGJlIGhhbmRsZWQgc2VwYXJhdGVseS4gIEZvciBleGFtcGxlLCBidWxrIElOIGFuZCBPVVQgdXJicyBjYW5ub3QKKyAgIGJlIHF1ZXVlZCBpbiB0aGUgc2FtZSBsaXN0LCBzaW5jZSB0aGV5IHdvdWxkIGJsb2NrIGVhY2ggb3RoZXIuICovCitzdGF0aWMgX191MzIgZXBpZF9vdXRfdHJhZmZpYzsKKworLyogRE1BIElOIGNhY2hlIGJ1Zy4gQWxpZ24gdGhlIERNQSBJTiBidWZmZXJzIHRvIDMyIGJ5dGVzLCBpLmUuIGEgY2FjaGUgbGluZS4KKyAgIFNpbmNlIFJYX0RFU0NfQlVGX1NJWkUgaXMgMTAyNCBpcyBhIG11bHRpcGxlIG9mIDMyLCBhbGwgcnggYnVmZmVycyB3aWxsIGJlIGNhY2hlIGFsaWduZWQuICovCitzdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBSeEJ1ZltSWF9CVUZfU0laRV0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDMyKSkpOworc3RhdGljIHZvbGF0aWxlIFVTQl9JTl9EZXNjX3QgUnhEZXNjTGlzdFtOQlJfT0ZfUlhfREVTQ10gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDQpKSk7CisKKy8qIFBvaW50ZXJzIGludG8gUnhEZXNjTGlzdC4gKi8KK3N0YXRpYyB2b2xhdGlsZSBVU0JfSU5fRGVzY190ICpteU5leHRSeERlc2M7CitzdGF0aWMgdm9sYXRpbGUgVVNCX0lOX0Rlc2NfdCAqbXlMYXN0UnhEZXNjOworc3RhdGljIHZvbGF0aWxlIFVTQl9JTl9EZXNjX3QgKm15UHJldlJ4RGVzYzsKKworLyogRVAgZGVzY3JpcHRvcnMgbXVzdCBiZSAzMi1iaXQgYWxpZ25lZC4gKi8KK3N0YXRpYyB2b2xhdGlsZSBVU0JfRVBfRGVzY190IFR4Q3RybEVQTGlzdFtOQlJfT0ZfRVBJRFNdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg0KSkpOworc3RhdGljIHZvbGF0aWxlIFVTQl9FUF9EZXNjX3QgVHhCdWxrRVBMaXN0W05CUl9PRl9FUElEU10gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDQpKSk7CisvKiBBZnRlciBlYWNoIGVuYWJsZWQgYnVsayBFUCAoSU4gb3IgT1VUKSB3ZSBwdXQgdHdvIGRpc2FibGVkIEVQIGRlc2NyaXB0b3JzIHdpdGggdGhlIGVvbCBmbGFnIHNldCwKKyAgIGNhdXNpbmcgdGhlIERNQSB0byBzdG9wIHRoZSBETUEgY2hhbm5lbC4gVGhlIGZpcnN0IG9mIHRoZXNlIHR3byBoYXMgdGhlIGludHIgZmxhZyBzZXQsIHdoaWNoCisgICBnaXZlcyB1cyBhIGRtYThfc3ViMF9kZXNjciBpbnRlcnJ1cHQuIFdoZW4gd2UgcmVjZWl2ZSB0aGlzLCB3ZSBhZHZhbmNlIHRoZSBETUEgb25lIHN0ZXAgaW4gdGhlCisgICBFUCBsaXN0IGFuZCB0aGVuIHJlc3RhcnQgdGhlIGJ1bGsgY2hhbm5lbCwgdGh1cyBmb3JjaW5nIGEgc3dpdGNoIGJldHdlZW4gYnVsayBFUCBkZXNjcmlwdG9ycworICAgaW4gZWFjaCBmcmFtZS4gKi8KK3N0YXRpYyB2b2xhdGlsZSBVU0JfRVBfRGVzY190IFR4QnVsa0R1bW15RVBMaXN0W05CUl9PRl9FUElEU11bMl0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDQpKSk7CisKK3N0YXRpYyB2b2xhdGlsZSBVU0JfRVBfRGVzY190IFR4SXNvY0VQTGlzdFtOQlJfT0ZfRVBJRFNdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg0KSkpOworc3RhdGljIHZvbGF0aWxlIFVTQl9TQl9EZXNjX3QgVHhJc29jU0Jfem91dCBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoNCkpKTsKKworc3RhdGljIHZvbGF0aWxlIFVTQl9FUF9EZXNjX3QgVHhJbnRyRVBMaXN0W01BWF9JTlRSX0lOVEVSVkFMXSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoNCkpKTsKK3N0YXRpYyB2b2xhdGlsZSBVU0JfU0JfRGVzY190IFR4SW50clNCX3pvdXQgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDQpKSk7CisKKy8qIEEgem91dCB0cmFuc2ZlciBtYWtlcyBhIG1lbW9yeSBhY2Nlc3MgYXQgdGhlIGFkZHJlc3Mgb2YgaXRzIGJ1ZiBwb2ludGVyLCB3aGljaCBtZWFucyB0aGF0IHNldHRpbmcKKyAgIHRoaXMgYnVmIHBvaW50ZXIgdG8gMCB3aWxsIGNhdXNlIGFuIGFjY2VzcyB0byB0aGUgZmxhc2guIEluIGFkZGl0aW9uIHRvIHRoaXMsIHNldHRpbmcgc3dfbGVuIHRvIDAKKyAgIHJlc3VsdHMgaW4gYSAxNi8zMiBieXRlcyAoZGVwZW5kaW5nIG9uIERNQSBidXJzdCBzaXplKSB0cmFuc2Zlci4gSW5zdGVhZCwgd2Ugc2V0IGl0IHRvIDEsIGFuZCBwb2ludAorICAgaXQgdG8gdGhpcyBidWZmZXIuICovCitzdGF0aWMgaW50IHpvdXRfYnVmZmVyWzRdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg0KSkpOworCisvKiBDYWNoZSBmb3IgYWxsb2NhdGluZyBuZXcgRVAgYW5kIFNCIGRlc2NyaXB0b3JzLiAqLworc3RhdGljIGttZW1fY2FjaGVfdCAqdXNiX2Rlc2NfY2FjaGU7CisKKy8qIENhY2hlIGZvciB0aGUgcmVnaXN0ZXJzIGFsbG9jYXRlZCBpbiB0aGUgdG9wIGhhbGYuICovCitzdGF0aWMga21lbV9jYWNoZV90ICp0b3BfaGFsZl9yZWdfY2FjaGU7CisKKy8qIENhY2hlIGZvciB0aGUgZGF0YSBhbGxvY2F0ZWQgaW4gdGhlIGlzb2MgZGVzY3IgdG9wIGhhbGYuICovCitzdGF0aWMga21lbV9jYWNoZV90ICppc29jX2NvbXBsX2NhY2hlOworCitzdGF0aWMgc3RydWN0IHVzYl9idXMgKmV0cmF4X3VzYl9idXM7CisKKy8qIFRoaXMgaXMgYSBjaXJjdWxhciAoZG91YmxlLWxpbmtlZCkgbGlzdCBvZiB0aGUgYWN0aXZlIHVyYnMgZm9yIGVhY2ggZXBpZC4KKyAgIFRoZSBoZWFkIGlzIG5ldmVyIHJlbW92ZWQsIGFuZCBuZXcgdXJicyBhcmUgbGlua2VkIG9udG8gdGhlIGxpc3QgYXMKKyAgIHVyYl9lbnRyeV90IGVsZW1lbnRzLiBEb24ndCByZWZlcmVuY2UgdXJiX2xpc3QgZGlyZWN0bHk7IHVzZSB0aGUgd3JhcHBlcgorICAgZnVuY3Rpb25zIGluc3RlYWQuIE5vdGUgdGhhdCB3b3JraW5nIHdpdGggdGhlc2UgbGlzdHMgbWlnaHQgcmVxdWlyZSBzcGlubG9jaworICAgcHJvdGVjdGlvbi4gKi8KK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIHVyYl9saXN0W05CUl9PRl9FUElEU107CisKKy8qIFJlYWQgYWJvdXQgdGhlIG5lZWQgYW5kIHVzYWdlIG9mIHRoaXMgbG9jayBpbiBzdWJtaXRfY3RybF91cmIuICovCitzdGF0aWMgc3BpbmxvY2tfdCB1cmJfbGlzdF9sb2NrOworCisvKiBVc2VkIHdoZW4gdW5saW5raW5nIGFzeW5jaHJvbm91c2x5LiAqLworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgdXJiX3VubGlua19saXN0OworCisvKiBmb3IgcmV0dXJuaW5nIHN0cmluZyBkZXNjcmlwdG9ycyBpbiBVVEYtMTZMRSAqLworc3RhdGljIGludCBhc2NpaTJ1dGYgKGNoYXIgKmFzY2lpLCBfX3U4ICp1dGYsIGludCB1dGZtYXgpCit7CisJaW50IHJldHZhbDsKKworCWZvciAocmV0dmFsID0gMDsgKmFzY2lpICYmIHV0Zm1heCA+IDE7IHV0Zm1heCAtPSAyLCByZXR2YWwgKz0gMikgeworCQkqdXRmKysgPSAqYXNjaWkrKyAmIDB4N2Y7CisJCSp1dGYrKyA9IDA7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgdXNiX3Jvb3RfaHViX3N0cmluZyAoaW50IGlkLCBpbnQgc2VyaWFsLCBjaGFyICp0eXBlLCBfX3U4ICpkYXRhLCBpbnQgbGVuKQoreworCWNoYXIgYnVmIFszMF07CisKKwkvLyBhc3NlcnQgKGxlbiA+ICgyICogKHNpemVvZiAoYnVmKSArIDEpKSk7CisJLy8gYXNzZXJ0IChzdHJsZW4gKHR5cGUpIDw9IDgpOworCisJLy8gbGFuZ3VhZ2UgaWRzCisJaWYgKGlkID09IDApIHsKKwkJKmRhdGErKyA9IDQ7ICpkYXRhKysgPSAzOwkvKiA0IGJ5dGVzIGRhdGEgKi8KKwkJKmRhdGErKyA9IDA7ICpkYXRhKysgPSAwOwkvKiBzb21lIGxhbmd1YWdlIGlkICovCisJCXJldHVybiA0OworCisJLy8gc2VyaWFsIG51bWJlcgorCX0gZWxzZSBpZiAoaWQgPT0gMSkgeworCQlzcHJpbnRmIChidWYsICIleCIsIHNlcmlhbCk7CisKKwkvLyBwcm9kdWN0IGRlc2NyaXB0aW9uCisJfSBlbHNlIGlmIChpZCA9PSAyKSB7CisJCXNwcmludGYgKGJ1ZiwgIlVTQiAlcyBSb290IEh1YiIsIHR5cGUpOworCisJLy8gaWQgMyA9PSB2ZW5kb3IgZGVzY3JpcHRpb24KKworCS8vIHVuc3VwcG9ydGVkIElEcyAtLT4gInN0YWxsIgorCX0gZWxzZQorCSAgICByZXR1cm4gMDsKKworCWRhdGEgWzBdID0gMiArIGFzY2lpMnV0ZiAoYnVmLCBkYXRhICsgMiwgbGVuIC0gMik7CisJZGF0YSBbMV0gPSAzOworCXJldHVybiBkYXRhIFswXTsKK30KKworLyogV3JhcHBlcnMgYXJvdW5kIHRoZSBsaXN0IGZ1bmN0aW9ucyAoaW5jbHVkZS9saW51eC9saXN0LmgpLiAqLworCitzdGF0aWMgaW5saW5lIGludCB1cmJfbGlzdF9lbXB0eShpbnQgZXBpZCkKK3sKKwlyZXR1cm4gbGlzdF9lbXB0eSgmdXJiX2xpc3RbZXBpZF0pOworfQorCisvKiBSZXR1cm5zIGZpcnN0IHVyYiBmb3IgdGhpcyBlcGlkLCBvciBOVUxMIGlmIGxpc3QgaXMgZW1wdHkuICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1cmIgKnVyYl9saXN0X2ZpcnN0KGludCBlcGlkKQoreworCXN0cnVjdCB1cmIgKmZpcnN0X3VyYiA9IDA7CisKKwlpZiAoIXVyYl9saXN0X2VtcHR5KGVwaWQpKSB7CisJCS8qIEdldCB0aGUgZmlyc3QgdXJiIChpLmUuIGhlYWQtPm5leHQpLiAqLworCQl1cmJfZW50cnlfdCAqdXJiX2VudHJ5ID0gbGlzdF9lbnRyeSgoJnVyYl9saXN0W2VwaWRdKS0+bmV4dCwgdXJiX2VudHJ5X3QsIGxpc3QpOworCQlmaXJzdF91cmIgPSB1cmJfZW50cnktPnVyYjsKKwl9CisJcmV0dXJuIGZpcnN0X3VyYjsKK30KKworLyogQWRkcyBhbiB1cmJfZW50cnkgbGFzdCBpbiB0aGUgbGlzdCBmb3IgdGhpcyBlcGlkLiAqLworc3RhdGljIGlubGluZSB2b2lkIHVyYl9saXN0X2FkZChzdHJ1Y3QgdXJiICp1cmIsIGludCBlcGlkKQoreworCXVyYl9lbnRyeV90ICp1cmJfZW50cnkgPSAodXJiX2VudHJ5X3QgKilrbWFsbG9jKHNpemVvZih1cmJfZW50cnlfdCksIEtNQUxMT0NfRkxBRyk7CisJYXNzZXJ0KHVyYl9lbnRyeSk7CisKKwl1cmJfZW50cnktPnVyYiA9IHVyYjsKKwlsaXN0X2FkZF90YWlsKCZ1cmJfZW50cnktPmxpc3QsICZ1cmJfbGlzdFtlcGlkXSk7Cit9CisKKy8qIFNlYXJjaCB0aHJvdWdoIHRoZSBsaXN0IGZvciBhbiBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhpcyB1cmIuIChUaGUgbGlzdAorICAgaXMgZXhwZWN0ZWQgdG8gYmUgc2hvcnQgYW5kIHRoZSBvbmUgd2UgYXJlIGFib3V0IHRvIGRlbGV0ZSB3aWxsIG9mdGVuIGJlCisgICB0aGUgZmlyc3QgaW4gdGhlIGxpc3QuKSAqLworc3RhdGljIGlubGluZSB1cmJfZW50cnlfdCAqX191cmJfbGlzdF9lbnRyeShzdHJ1Y3QgdXJiICp1cmIsIGludCBlcGlkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKKwl1cmJfZW50cnlfdCAqdXJiX2VudHJ5OworCisJbGlzdF9mb3JfZWFjaF9zYWZlKGVudHJ5LCB0bXAsICZ1cmJfbGlzdFtlcGlkXSkgeworCQl1cmJfZW50cnkgPSBsaXN0X2VudHJ5KGVudHJ5LCB1cmJfZW50cnlfdCwgbGlzdCk7CisJCWFzc2VydCh1cmJfZW50cnkpOworCQlhc3NlcnQodXJiX2VudHJ5LT51cmIpOworCisJCWlmICh1cmJfZW50cnktPnVyYiA9PSB1cmIpIHsKKwkJCXJldHVybiB1cmJfZW50cnk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIERlbGV0ZSBhbiB1cmIgZnJvbSB0aGUgbGlzdC4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1cmJfbGlzdF9kZWwoc3RydWN0IHVyYiAqdXJiLCBpbnQgZXBpZCkKK3sKKwl1cmJfZW50cnlfdCAqdXJiX2VudHJ5ID0gX191cmJfbGlzdF9lbnRyeSh1cmIsIGVwaWQpOworCWFzc2VydCh1cmJfZW50cnkpOworCisJLyogRGVsZXRlIGVudHJ5IGFuZCBmcmVlLiAqLworCWxpc3RfZGVsKCZ1cmJfZW50cnktPmxpc3QpOworCWtmcmVlKHVyYl9lbnRyeSk7Cit9CisKKy8qIE1vdmUgYW4gdXJiIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuICovCitzdGF0aWMgaW5saW5lIHZvaWQgdXJiX2xpc3RfbW92ZV9sYXN0KHN0cnVjdCB1cmIgKnVyYiwgaW50IGVwaWQpCit7CisJdXJiX2VudHJ5X3QgKnVyYl9lbnRyeSA9IF9fdXJiX2xpc3RfZW50cnkodXJiLCBlcGlkKTsKKwlhc3NlcnQodXJiX2VudHJ5KTsKKworCWxpc3RfZGVsKCZ1cmJfZW50cnktPmxpc3QpOworCWxpc3RfYWRkX3RhaWwoJnVyYl9lbnRyeS0+bGlzdCwgJnVyYl9saXN0W2VwaWRdKTsKK30KKworLyogR2V0IHRoZSBuZXh0IHVyYiBpbiB0aGUgbGlzdC4gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVyYiAqdXJiX2xpc3RfbmV4dChzdHJ1Y3QgdXJiICp1cmIsIGludCBlcGlkKQoreworCXVyYl9lbnRyeV90ICp1cmJfZW50cnkgPSBfX3VyYl9saXN0X2VudHJ5KHVyYiwgZXBpZCk7CisKKwlhc3NlcnQodXJiX2VudHJ5KTsKKworCWlmICh1cmJfZW50cnktPmxpc3QubmV4dCAhPSAmdXJiX2xpc3RbZXBpZF0pIHsKKwkJc3RydWN0IGxpc3RfaGVhZCAqZWxlbSA9IHVyYl9lbnRyeS0+bGlzdC5uZXh0OworCQl1cmJfZW50cnkgPSBsaXN0X2VudHJ5KGVsZW0sIHVyYl9lbnRyeV90LCBsaXN0KTsKKwkJcmV0dXJuIHVyYl9lbnRyeS0+dXJiOworCX0gZWxzZSB7CisJCXJldHVybiBOVUxMOworCX0KK30KKworCisKKy8qIEZvciBkZWJ1ZyBwdXJwb3NlcyBvbmx5LiAqLworc3RhdGljIGlubGluZSB2b2lkIHVyYl9saXN0X2R1bXAoaW50IGVwaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCXVyYl9lbnRyeV90ICp1cmJfZW50cnk7CisJaW50IGkgPSAwOworCisJaW5mbygiRHVtcGluZyB1cmIgbGlzdCBmb3IgZXBpZCAlZCIsIGVwaWQpOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKGVudHJ5LCB0bXAsICZ1cmJfbGlzdFtlcGlkXSkgeworCQl1cmJfZW50cnkgPSBsaXN0X2VudHJ5KGVudHJ5LCB1cmJfZW50cnlfdCwgbGlzdCk7CisJCWluZm8oIiAgIGVudHJ5ICVkLCB1cmIgPSAweCVseCIsIGksICh1bnNpZ25lZCBsb25nKXVyYl9lbnRyeS0+dXJiKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfcnhfYnVmZmVycyh2b2lkKTsKK3N0YXRpYyBpbnQgZXRyYXhfcmhfdW5saW5rX3VyYihzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQgZXRyYXhfcmhfc2VuZF9pcnEoc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyB2b2lkIGV0cmF4X3JoX2luaXRfaW50X3RpbWVyKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgdm9pZCBldHJheF9yaF9pbnRfdGltZXJfZG8odW5zaWduZWQgbG9uZyBwdHIpOworCitzdGF0aWMgaW50IGV0cmF4X3VzYl9zZXR1cF9lcGlkKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgaW50IGV0cmF4X3VzYl9sb29rdXBfZXBpZChzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIGludCBldHJheF91c2JfYWxsb2NhdGVfZXBpZCh2b2lkKTsKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9mcmVlX2VwaWQoaW50IGVwaWQpOworCitzdGF0aWMgaW50IGV0cmF4X3JlbW92ZV9mcm9tX3NiX2xpc3Qoc3RydWN0IHVyYiAqdXJiKTsKKworc3RhdGljIHZvaWQqIGV0cmF4X3VzYl9idWZmZXJfYWxsb2Moc3RydWN0IHVzYl9idXMqIGJ1cywgc2l6ZV90IHNpemUsIGludCBtZW1fZmxhZ3MsIGRtYV9hZGRyX3QgKmRtYSk7CitzdGF0aWMgdm9pZCBldHJheF91c2JfYnVmZmVyX2ZyZWUoc3RydWN0IHVzYl9idXMgKmJ1cywgc2l6ZV90IHNpemUsIHZvaWQgKmFkZHIsIGRtYV9hZGRyX3QgZG1hKTsKKworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2FkZF90b19idWxrX3NiX2xpc3Qoc3RydWN0IHVyYiAqdXJiLCBpbnQgZXBpZCk7CitzdGF0aWMgdm9pZCBldHJheF91c2JfYWRkX3RvX2N0cmxfc2JfbGlzdChzdHJ1Y3QgdXJiICp1cmIsIGludCBlcGlkKTsKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9hZGRfdG9faW50cl9zYl9saXN0KHN0cnVjdCB1cmIgKnVyYiwgaW50IGVwaWQpOworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2FkZF90b19pc29jX3NiX2xpc3Qoc3RydWN0IHVyYiAqdXJiLCBpbnQgZXBpZCk7CisKK3N0YXRpYyBpbnQgZXRyYXhfdXNiX3N1Ym1pdF9idWxrX3VyYihzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIGludCBldHJheF91c2Jfc3VibWl0X2N0cmxfdXJiKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgaW50IGV0cmF4X3VzYl9zdWJtaXRfaW50cl91cmIoc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyBpbnQgZXRyYXhfdXNiX3N1Ym1pdF9pc29jX3VyYihzdHJ1Y3QgdXJiICp1cmIpOworCitzdGF0aWMgaW50IGV0cmF4X3VzYl9zdWJtaXRfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IG1lbV9mbGFncyk7CitzdGF0aWMgaW50IGV0cmF4X3VzYl91bmxpbmtfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cyk7CitzdGF0aWMgaW50IGV0cmF4X3VzYl9nZXRfZnJhbWVfbnVtYmVyKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2KTsKKworc3RhdGljIGlycXJldHVybl90IGV0cmF4X3VzYl90eF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqdmhjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgaXJxcmV0dXJuX3QgZXRyYXhfdXNiX3J4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICp2aGMsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBldHJheF91c2JfaGNfaW50ZXJydXB0X3RvcF9oYWxmKGludCBpcnEsIHZvaWQgKnZoYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2hjX2ludGVycnVwdF9ib3R0b21faGFsZih2b2lkICpkYXRhKTsKKworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2lzb2NfZGVzY3JfaW50ZXJydXB0X2JvdHRvbV9oYWxmKHZvaWQgKmRhdGEpOworCisKKy8qIFRoZSBmb2xsb3dpbmcgaXMgYSBsaXN0IG9mIGludGVycnVwdCBoYW5kbGVycyBmb3IgdGhlIGhvc3QgY29udHJvbGxlciBpbnRlcnJ1cHRzIHdlIHVzZS4KKyAgIFRoZXkgYXJlIGNhbGxlZCBmcm9tIGV0cmF4X3VzYl9oY19pbnRlcnJ1cHRfYm90dG9tX2hhbGYuICovCitzdGF0aWMgdm9pZCBldHJheF91c2JfaGNfaXNvY19lb2ZfaW50ZXJydXB0KHZvaWQpOworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2hjX2J1bGtfZW90X2ludGVycnVwdChpbnQgdGltZXJfaW5kdWNlZCk7CitzdGF0aWMgdm9pZCBldHJheF91c2JfaGNfZXBpZF9hdHRuX2ludGVycnVwdCh1c2JfaW50ZXJydXB0X3JlZ2lzdGVyc190ICpyZWcpOworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2hjX3BvcnRfc3RhdHVzX2ludGVycnVwdCh1c2JfaW50ZXJydXB0X3JlZ2lzdGVyc190ICpyZWcpOworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2hjX2N0bF9zdGF0dXNfaW50ZXJydXB0KHVzYl9pbnRlcnJ1cHRfcmVnaXN0ZXJzX3QgKnJlZyk7CisKK3N0YXRpYyBpbnQgZXRyYXhfcmhfc3VibWl0X3VyYiAoc3RydWN0IHVyYiAqdXJiKTsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBuZWVkZWQgYmVjYXVzZSB0aGV5IGFyZSB1c2VkIGluIHRoZSByeCBpbnRlcnJ1cHQgcm91dGluZS4gKi8KK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9jb21wbGV0ZV91cmIoc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKTsKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9jb21wbGV0ZV9idWxrX3VyYihzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpOworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2NvbXBsZXRlX2N0cmxfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cyk7CitzdGF0aWMgdm9pZCBldHJheF91c2JfY29tcGxldGVfaW50cl91cmIoc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKTsKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9jb21wbGV0ZV9pc29jX3VyYihzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpOworCitzdGF0aWMgaW50IGV0cmF4X3VzYl9oY19pbml0KHZvaWQpOworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2hjX2NsZWFudXAodm9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX29wZXJhdGlvbnMgZXRyYXhfdXNiX2RldmljZV9vcGVyYXRpb25zID0KK3sKKwkuZ2V0X2ZyYW1lX251bWJlciA9IGV0cmF4X3VzYl9nZXRfZnJhbWVfbnVtYmVyLAorCS5zdWJtaXRfdXJiID0gZXRyYXhfdXNiX3N1Ym1pdF91cmIsCisJLnVubGlua191cmIgPSBldHJheF91c2JfdW5saW5rX3VyYiwKKyAgICAgICAgLmJ1ZmZlcl9hbGxvYyA9IGV0cmF4X3VzYl9idWZmZXJfYWxsb2MsCisgICAgICAgIC5idWZmZXJfZnJlZSA9IGV0cmF4X3VzYl9idWZmZXJfZnJlZQorfTsKKworLyogTm90ZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWx3YXlzIGF2YWlsYWJsZSBpbiB0aGVpciAiX18iIHZhcmlhbnRzLCBmb3IgdXNlIGluCisgICBlcnJvciBzaXR1YXRpb25zLiBUaGUgIl9fIiBtaXNzaW5nIHZhcmlhbnRzIGFyZSBjb250cm9sbGVkIGJ5IHRoZSBVU0JfREVCVUdfREVTQy8KKyAgIFVTQl9ERUJVR19VUkIgbWFjcm9zLiAqLworc3RhdGljIHZvaWQgX19kdW1wX3VyYihzdHJ1Y3QgdXJiKiBwdXJiKQoreworCXByaW50aygiXG51cmIgICAgICAgICAgICAgICAgICA6MHglMDhseFxuIiwgKHVuc2lnbmVkIGxvbmcpcHVyYik7CisJcHJpbnRrKCJkZXYgICAgICAgICAgICAgICAgICAgOjB4JTA4bHhcbiIsICh1bnNpZ25lZCBsb25nKXB1cmItPmRldik7CisJcHJpbnRrKCJwaXBlICAgICAgICAgICAgICAgICAgOjB4JTA4eFxuIiwgcHVyYi0+cGlwZSk7CisJcHJpbnRrKCJzdGF0dXMgICAgICAgICAgICAgICAgOiVkXG4iLCBwdXJiLT5zdGF0dXMpOworCXByaW50aygidHJhbnNmZXJfZmxhZ3MgICAgICAgIDoweCUwOHhcbiIsIHB1cmItPnRyYW5zZmVyX2ZsYWdzKTsKKwlwcmludGsoInRyYW5zZmVyX2J1ZmZlciAgICAgICA6MHglMDhseFxuIiwgKHVuc2lnbmVkIGxvbmcpcHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwlwcmludGsoInRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg6JWRcbiIsIHB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCXByaW50aygiYWN0dWFsX2xlbmd0aCAgICAgICAgIDolZFxuIiwgcHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJcHJpbnRrKCJzZXR1cF9wYWNrZXQgICAgICAgICAgOjB4JTA4bHhcbiIsICh1bnNpZ25lZCBsb25nKXB1cmItPnNldHVwX3BhY2tldCk7CisJcHJpbnRrKCJzdGFydF9mcmFtZSAgICAgICAgICAgOiVkXG4iLCBwdXJiLT5zdGFydF9mcmFtZSk7CisJcHJpbnRrKCJudW1iZXJfb2ZfcGFja2V0cyAgICAgOiVkXG4iLCBwdXJiLT5udW1iZXJfb2ZfcGFja2V0cyk7CisJcHJpbnRrKCJpbnRlcnZhbCAgICAgICAgICAgICAgOiVkXG4iLCBwdXJiLT5pbnRlcnZhbCk7CisJcHJpbnRrKCJlcnJvcl9jb3VudCAgICAgICAgICAgOiVkXG4iLCBwdXJiLT5lcnJvcl9jb3VudCk7CisJcHJpbnRrKCJjb250ZXh0ICAgICAgICAgICAgICAgOjB4JTA4bHhcbiIsICh1bnNpZ25lZCBsb25nKXB1cmItPmNvbnRleHQpOworCXByaW50aygiY29tcGxldGUgICAgICAgICAgICAgIDoweCUwOGx4XG5cbiIsICh1bnNpZ25lZCBsb25nKXB1cmItPmNvbXBsZXRlKTsKK30KKworc3RhdGljIHZvaWQgX19kdW1wX2luX2Rlc2Modm9sYXRpbGUgVVNCX0lOX0Rlc2NfdCAqaW4pCit7CisJcHJpbnRrKCJcblVTQl9JTl9EZXNjIGF0IDB4JTA4bHhcbiIsICh1bnNpZ25lZCBsb25nKWluKTsKKwlwcmludGsoIiAgc3dfbGVuICA6IDB4JTA0eCAoJWQpXG4iLCBpbi0+c3dfbGVuLCBpbi0+c3dfbGVuKTsKKwlwcmludGsoIiAgY29tbWFuZCA6IDB4JTA0eFxuIiwgaW4tPmNvbW1hbmQpOworCXByaW50aygiICBuZXh0ICAgIDogMHglMDhseFxuIiwgaW4tPm5leHQpOworCXByaW50aygiICBidWYgICAgIDogMHglMDhseFxuIiwgaW4tPmJ1Zik7CisJcHJpbnRrKCIgIGh3X2xlbiAgOiAweCUwNHggKCVkKVxuIiwgaW4tPmh3X2xlbiwgaW4tPmh3X2xlbik7CisJcHJpbnRrKCIgIHN0YXR1cyAgOiAweCUwNHhcblxuIiwgaW4tPnN0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZHVtcF9zYl9kZXNjKHZvbGF0aWxlIFVTQl9TQl9EZXNjX3QgKnNiKQoreworCWNoYXIgdHQgPSAoc2ItPmNvbW1hbmQgJiAweDMwKSA+PiA0OworCWNoYXIgKnR0X3N0cmluZzsKKworCXN3aXRjaCAodHQpIHsKKwljYXNlIDA6CisJCXR0X3N0cmluZyA9ICJ6b3V0IjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQl0dF9zdHJpbmcgPSAiaW4iOworCQlicmVhazsKKwljYXNlIDI6CisJCXR0X3N0cmluZyA9ICJvdXQiOworCQlicmVhazsKKwljYXNlIDM6CisJCXR0X3N0cmluZyA9ICJzZXR1cCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXR0X3N0cmluZyA9ICJ1bmtub3duICh3ZWlyZCkiOworCX0KKworCXByaW50aygiXG4gICBVU0JfU0JfRGVzYyBhdCAweCUwOGx4XG4iLCAodW5zaWduZWQgbG9uZylzYik7CisJcHJpbnRrKCIgICAgIGNvbW1hbmQgOiAweCUwNHhcbiIsIHNiLT5jb21tYW5kKTsKKwlwcmludGsoIiAgICAgICAgcmVtICAgICA6ICVkXG4iLCAoc2ItPmNvbW1hbmQgJiAweDNmMDApID4+IDgpOworCXByaW50aygiICAgICAgICBmdWxsICAgIDogJWRcbiIsIChzYi0+Y29tbWFuZCAmIDB4NDApID4+IDYpOworCXByaW50aygiICAgICAgICB0dCAgICAgIDogJWQgKCVzKVxuIiwgdHQsIHR0X3N0cmluZyk7CisJcHJpbnRrKCIgICAgICAgIGludHIgICAgOiAlZFxuIiwgKHNiLT5jb21tYW5kICYgMHg4KSA+PiAzKTsKKwlwcmludGsoIiAgICAgICAgZW90ICAgICA6ICVkXG4iLCAoc2ItPmNvbW1hbmQgJiAweDIpID4+IDEpOworCXByaW50aygiICAgICAgICBlb2wgICAgIDogJWRcbiIsIHNiLT5jb21tYW5kICYgMHgxKTsKKwlwcmludGsoIiAgICAgc3dfbGVuICA6IDB4JTA0eCAoJWQpXG4iLCBzYi0+c3dfbGVuLCBzYi0+c3dfbGVuKTsKKwlwcmludGsoIiAgICAgbmV4dCAgICA6IDB4JTA4bHhcbiIsIHNiLT5uZXh0KTsKKwlwcmludGsoIiAgICAgYnVmICAgICA6IDB4JTA4bHhcblxuIiwgc2ItPmJ1Zik7Cit9CisKKworc3RhdGljIHZvaWQgX19kdW1wX2VwX2Rlc2Modm9sYXRpbGUgVVNCX0VQX0Rlc2NfdCAqZXApCit7CisJcHJpbnRrKCJcblVTQl9FUF9EZXNjIGF0IDB4JTA4bHhcbiIsICh1bnNpZ25lZCBsb25nKWVwKTsKKwlwcmludGsoIiAgY29tbWFuZCA6IDB4JTA0eFxuIiwgZXAtPmNvbW1hbmQpOworCXByaW50aygiICAgICBlcF9pZCAgIDogJWRcbiIsIChlcC0+Y29tbWFuZCAmIDB4MWYwMCkgPj4gOCk7CisJcHJpbnRrKCIgICAgIGVuYWJsZSAgOiAlZFxuIiwgKGVwLT5jb21tYW5kICYgMHgxMCkgPj4gNCk7CisJcHJpbnRrKCIgICAgIGludHIgICAgOiAlZFxuIiwgKGVwLT5jb21tYW5kICYgMHg4KSA+PiAzKTsKKwlwcmludGsoIiAgICAgZW9mICAgICA6ICVkXG4iLCAoZXAtPmNvbW1hbmQgJiAweDIpID4+IDEpOworCXByaW50aygiICAgICBlb2wgICAgIDogJWRcbiIsIGVwLT5jb21tYW5kICYgMHgxKTsKKwlwcmludGsoIiAgaHdfbGVuICA6IDB4JTA0eCAoJWQpXG4iLCBlcC0+aHdfbGVuLCBlcC0+aHdfbGVuKTsKKwlwcmludGsoIiAgbmV4dCAgICA6IDB4JTA4bHhcbiIsIGVwLT5uZXh0KTsKKwlwcmludGsoIiAgc3ViICAgICA6IDB4JTA4bHhcblxuIiwgZXAtPnN1Yik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2R1bXBfZXBfbGlzdChpbnQgcGlwZV90eXBlKQoreworCXZvbGF0aWxlIFVTQl9FUF9EZXNjX3QgKmVwOworCXZvbGF0aWxlIFVTQl9FUF9EZXNjX3QgKmZpcnN0X2VwOworCXZvbGF0aWxlIFVTQl9TQl9EZXNjX3QgKnNiOworCisJc3dpdGNoIChwaXBlX3R5cGUpCisJeworCWNhc2UgUElQRV9CVUxLOgorCQlmaXJzdF9lcCA9ICZUeEJ1bGtFUExpc3RbMF07CisJCWJyZWFrOworCWNhc2UgUElQRV9DT05UUk9MOgorCQlmaXJzdF9lcCA9ICZUeEN0cmxFUExpc3RbMF07CisJCWJyZWFrOworCWNhc2UgUElQRV9JTlRFUlJVUFQ6CisJCWZpcnN0X2VwID0gJlR4SW50ckVQTGlzdFswXTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQlmaXJzdF9lcCA9ICZUeElzb2NFUExpc3RbMF07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXdhcm4oIkNhbm5vdCBkdW1wIHVua25vd24gdHJhZmZpYyB0eXBlIik7CisJCXJldHVybjsKKwl9CisJZXAgPSBmaXJzdF9lcDsKKworCXByaW50aygiXG5cbkR1bXBpbmcgRVAgbGlzdC4uLlxuXG4iKTsKKworCWRvIHsKKwkJX19kdW1wX2VwX2Rlc2MoZXApOworCQkvKiBDYW5ub3QgcGh5c190b192aXJ0IG9uIDAgYXMgaXQgdHVybnMgaW50byA4MDAwMDAwMCwgd2hpY2ggaXMgIT0gMC4gKi8KKwkJc2IgPSBlcC0+c3ViID8gcGh5c190b192aXJ0KGVwLT5zdWIpIDogMDsKKwkJd2hpbGUgKHNiKSB7CisJCQlfX2R1bXBfc2JfZGVzYyhzYik7CisJCQlzYiA9IHNiLT5uZXh0ID8gcGh5c190b192aXJ0KHNiLT5uZXh0KSA6IDA7CisJCX0KKwkJZXAgPSAodm9sYXRpbGUgVVNCX0VQX0Rlc2NfdCAqKShwaHlzX3RvX3ZpcnQoZXAtPm5leHQpKTsKKworCX0gd2hpbGUgKGVwICE9IGZpcnN0X2VwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZHVtcF9lcHRfZGF0YShpbnQgZXBpZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCV9fdTMyIHJfdXNiX2VwdF9kYXRhOworCisJaWYgKGVwaWQgPCAwIHx8IGVwaWQgPiAzMSkgeworCQlwcmludGsoIkNhbm5vdCBkdW1wIGVwdCBkYXRhIGZvciBpbnZhbGlkIGVwaWQgJWRcbiIsIGVwaWQpOworCQlyZXR1cm47CisJfQorCisJc2F2ZV9mbGFncyhmbGFncyk7CisJY2xpKCk7CisJKlJfVVNCX0VQVF9JTkRFWCA9IElPX0ZJRUxEKFJfVVNCX0VQVF9JTkRFWCwgdmFsdWUsIGVwaWQpOworCW5vcCgpOworCXJfdXNiX2VwdF9kYXRhID0gKlJfVVNCX0VQVF9EQVRBOworCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCisJcHJpbnRrKCJcblJfVVNCX0VQVF9EQVRBID0gMHgleCBmb3IgZXBpZCAlZCA6XG4iLCByX3VzYl9lcHRfZGF0YSwgZXBpZCk7CisJaWYgKHJfdXNiX2VwdF9kYXRhID09IDApIHsKKwkJLyogTm8gbmVlZCBmb3IgbW9yZSBkZXRhaWxlZCBwcmludGluZy4gKi8KKwkJcmV0dXJuOworCX0KKwlwcmludGsoIiAgdmFsaWQgICAgICAgICAgIDogJWRcbiIsIChyX3VzYl9lcHRfZGF0YSAmIDB4ODAwMDAwMDApID4+IDMxKTsKKwlwcmludGsoIiAgaG9sZCAgICAgICAgICAgIDogJWRcbiIsIChyX3VzYl9lcHRfZGF0YSAmIDB4NDAwMDAwMDApID4+IDMwKTsKKwlwcmludGsoIiAgZXJyb3JfY291bnRfaW4gIDogJWRcbiIsIChyX3VzYl9lcHRfZGF0YSAmIDB4MzAwMDAwMDApID4+IDI4KTsKKwlwcmludGsoIiAgdF9pbiAgICAgICAgICAgIDogJWRcbiIsIChyX3VzYl9lcHRfZGF0YSAmIDB4MDgwMDAwMDApID4+IDI3KTsKKwlwcmludGsoIiAgbG93X3NwZWVkICAgICAgIDogJWRcbiIsIChyX3VzYl9lcHRfZGF0YSAmIDB4MDQwMDAwMDApID4+IDI2KTsKKwlwcmludGsoIiAgcG9ydCAgICAgICAgICAgIDogJWRcbiIsIChyX3VzYl9lcHRfZGF0YSAmIDB4MDMwMDAwMDApID4+IDI0KTsKKwlwcmludGsoIiAgZXJyb3JfY29kZSAgICAgIDogJWRcbiIsIChyX3VzYl9lcHRfZGF0YSAmIDB4MDBjMDAwMDApID4+IDIyKTsKKwlwcmludGsoIiAgdF9vdXQgICAgICAgICAgIDogJWRcbiIsIChyX3VzYl9lcHRfZGF0YSAmIDB4MDAyMDAwMDApID4+IDIxKTsKKwlwcmludGsoIiAgZXJyb3JfY291bnRfb3V0IDogJWRcbiIsIChyX3VzYl9lcHRfZGF0YSAmIDB4MDAxODAwMDApID4+IDE5KTsKKwlwcmludGsoIiAgbWF4X2xlbiAgICAgICAgIDogJWRcbiIsIChyX3VzYl9lcHRfZGF0YSAmIDB4MDAwM2Y4MDApID4+IDExKTsKKwlwcmludGsoIiAgZXAgICAgICAgICAgICAgIDogJWRcbiIsIChyX3VzYl9lcHRfZGF0YSAmIDB4MDAwMDA3ODApID4+IDcpOworCXByaW50aygiICBkZXYgICAgICAgICAgICAgOiAlZFxuIiwgKHJfdXNiX2VwdF9kYXRhICYgMHgwMDAwMDAzZikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19kdW1wX2VwdF9kYXRhX2xpc3Qodm9pZCkKK3sKKwlpbnQgaTsKKworCXByaW50aygiRHVtcGluZyB0aGUgd2hvbGUgUl9VU0JfRVBUX0RBVEEgbGlzdFxuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlfX2R1bXBfZXB0X2RhdGEoaSk7CisJfQorfQorI2lmZGVmIFVTQl9ERUJVR19ERVNDCisjZGVmaW5lIGR1bXBfaW5fZGVzYyguLi4pIF9fZHVtcF9pbl9kZXNjKC4uLikKKyNkZWZpbmUgZHVtcF9zYl9kZXNjKC4uLikgX19kdW1wX3NiX2Rlc2MoLi4uKQorI2RlZmluZSBkdW1wX2VwX2Rlc2MoLi4uKSBfX2R1bXBfZXBfZGVzYyguLi4pCisjZWxzZQorI2RlZmluZSBkdW1wX2luX2Rlc2MoLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgZHVtcF9zYl9kZXNjKC4uLikgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGR1bXBfZXBfZGVzYyguLi4pIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZmRlZiBVU0JfREVCVUdfVVJCCisjZGVmaW5lIGR1bXBfdXJiKHgpICAgICBfX2R1bXBfdXJiKHgpCisjZWxzZQorI2RlZmluZSBkdW1wX3VyYih4KSAgICAgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworc3RhdGljIHZvaWQgaW5pdF9yeF9idWZmZXJzKHZvaWQpCit7CisJaW50IGk7CisKKwlEQkZFTlRFUjsKKworCWZvciAoaSA9IDA7IGkgPCAoTkJSX09GX1JYX0RFU0MgLSAxKTsgaSsrKSB7CisJCVJ4RGVzY0xpc3RbaV0uc3dfbGVuID0gUlhfREVTQ19CVUZfU0laRTsKKwkJUnhEZXNjTGlzdFtpXS5jb21tYW5kID0gMDsKKwkJUnhEZXNjTGlzdFtpXS5uZXh0ID0gdmlydF90b19waHlzKCZSeERlc2NMaXN0W2kgKyAxXSk7CisJCVJ4RGVzY0xpc3RbaV0uYnVmID0gdmlydF90b19waHlzKFJ4QnVmICsgKGkgKiBSWF9ERVNDX0JVRl9TSVpFKSk7CisJCVJ4RGVzY0xpc3RbaV0uaHdfbGVuID0gMDsKKwkJUnhEZXNjTGlzdFtpXS5zdGF0dXMgPSAwOworCisJCS8qIERNQSBJTiBjYWNoZSBidWcuIChzdHJ1Y3QgZXRyYXhfZG1hX2Rlc2NyIGhhcyB0aGUgc2FtZSBsYXlvdXQgYXMgVVNCX0lOX0Rlc2MKKwkJICAgZm9yIHRoZSByZWxldmFudCBmaWVsZHMuKSAqLworCQlwcmVwYXJlX3J4X2Rlc2NyaXB0b3IoKHN0cnVjdCBldHJheF9kbWFfZGVzY3IqKSZSeERlc2NMaXN0W2ldKTsKKworCX0KKworCVJ4RGVzY0xpc3RbaV0uc3dfbGVuID0gUlhfREVTQ19CVUZfU0laRTsKKwlSeERlc2NMaXN0W2ldLmNvbW1hbmQgPSBJT19TVEFURShVU0JfSU5fY29tbWFuZCwgZW9sLCB5ZXMpOworCVJ4RGVzY0xpc3RbaV0ubmV4dCA9IHZpcnRfdG9fcGh5cygmUnhEZXNjTGlzdFswXSk7CisJUnhEZXNjTGlzdFtpXS5idWYgPSB2aXJ0X3RvX3BoeXMoUnhCdWYgKyAoaSAqIFJYX0RFU0NfQlVGX1NJWkUpKTsKKwlSeERlc2NMaXN0W2ldLmh3X2xlbiA9IDA7CisJUnhEZXNjTGlzdFtpXS5zdGF0dXMgPSAwOworCisJbXlOZXh0UnhEZXNjID0gJlJ4RGVzY0xpc3RbMF07CisJbXlMYXN0UnhEZXNjID0gJlJ4RGVzY0xpc3RbTkJSX09GX1JYX0RFU0MgLSAxXTsKKwlteVByZXZSeERlc2MgPSAmUnhEZXNjTGlzdFtOQlJfT0ZfUlhfREVTQyAtIDFdOworCisJKlJfRE1BX0NIOV9GSVJTVCA9IHZpcnRfdG9fcGh5cyhteU5leHRSeERlc2MpOworCSpSX0RNQV9DSDlfQ01EID0gSU9fU1RBVEUoUl9ETUFfQ0g5X0NNRCwgY21kLCBzdGFydCk7CisKKwlEQkZFWElUOworfQorCitzdGF0aWMgdm9pZCBpbml0X3R4X2J1bGtfZXAodm9pZCkKK3sKKwlpbnQgaTsKKworCURCRkVOVEVSOworCisJZm9yIChpID0gMDsgaSA8IChOQlJfT0ZfRVBJRFMgLSAxKTsgaSsrKSB7CisJCUNIRUNLX0FMSUdOKCZUeEJ1bGtFUExpc3RbaV0pOworCQlUeEJ1bGtFUExpc3RbaV0uaHdfbGVuID0gMDsKKwkJVHhCdWxrRVBMaXN0W2ldLmNvbW1hbmQgPSBJT19GSUVMRChVU0JfRVBfY29tbWFuZCwgZXBpZCwgaSk7CisJCVR4QnVsa0VQTGlzdFtpXS5zdWIgPSAwOworCQlUeEJ1bGtFUExpc3RbaV0ubmV4dCA9IHZpcnRfdG9fcGh5cygmVHhCdWxrRVBMaXN0W2kgKyAxXSk7CisKKwkJLyogSW5pdGlhdGUgdHdvIEVQcywgZGlzYWJsZWQgYW5kIHdpdGggdGhlIGVvbCBmbGFnIHNldC4gTm8gbmVlZCBmb3IgYW55CisJCSAgIHByZXNlcnZlZCBlcGlkLiAqLworCisJCS8qIFRoZSBmaXJzdCBvbmUgaGFzIHRoZSBpbnRyIGZsYWcgc2V0IHNvIHdlIGdldCBhbiBpbnRlcnJ1cHQgd2hlbiB0aGUgRE1BCisJCSAgIGNoYW5uZWwgaXMgYWJvdXQgdG8gYmVjb21lIGRpc2FibGVkLiAqLworCQlDSEVDS19BTElHTigmVHhCdWxrRHVtbXlFUExpc3RbaV1bMF0pOworCQlUeEJ1bGtEdW1teUVQTGlzdFtpXVswXS5od19sZW4gPSAwOworCQlUeEJ1bGtEdW1teUVQTGlzdFtpXVswXS5jb21tYW5kID0gKElPX0ZJRUxEKFVTQl9FUF9jb21tYW5kLCBlcGlkLCBEVU1NWV9FUElEKSB8CisJCQkJCQkgICBJT19TVEFURShVU0JfRVBfY29tbWFuZCwgZW9sLCB5ZXMpIHwKKwkJCQkJCSAgIElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBpbnRyLCB5ZXMpKTsKKwkJVHhCdWxrRHVtbXlFUExpc3RbaV1bMF0uc3ViID0gMDsKKwkJVHhCdWxrRHVtbXlFUExpc3RbaV1bMF0ubmV4dCA9IHZpcnRfdG9fcGh5cygmVHhCdWxrRHVtbXlFUExpc3RbaV1bMV0pOworCisJCS8qIFRoZSBzZWNvbmQgb25lLiAqLworCQlDSEVDS19BTElHTigmVHhCdWxrRHVtbXlFUExpc3RbaV1bMV0pOworCQlUeEJ1bGtEdW1teUVQTGlzdFtpXVsxXS5od19sZW4gPSAwOworCQlUeEJ1bGtEdW1teUVQTGlzdFtpXVsxXS5jb21tYW5kID0gKElPX0ZJRUxEKFVTQl9FUF9jb21tYW5kLCBlcGlkLCBEVU1NWV9FUElEKSB8CisJCQkJCQkgICBJT19TVEFURShVU0JfRVBfY29tbWFuZCwgZW9sLCB5ZXMpKTsKKwkJVHhCdWxrRHVtbXlFUExpc3RbaV1bMV0uc3ViID0gMDsKKwkJLyogVGhlIGxhc3QgZHVtbXkncyBuZXh0IHBvaW50ZXIgaXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgRVAncyBuZXh0IHBvaW50ZXIuICovCisJCVR4QnVsa0R1bW15RVBMaXN0W2ldWzFdLm5leHQgPSB2aXJ0X3RvX3BoeXMoJlR4QnVsa0VQTGlzdFtpICsgMV0pOworCX0KKworCS8qIENvbmZpZ3VyZSB0aGUgbGFzdCBvbmUuICovCisJQ0hFQ0tfQUxJR04oJlR4QnVsa0VQTGlzdFtpXSk7CisJVHhCdWxrRVBMaXN0W2ldLmh3X2xlbiA9IDA7CisJVHhCdWxrRVBMaXN0W2ldLmNvbW1hbmQgPSAoSU9fU1RBVEUoVVNCX0VQX2NvbW1hbmQsIGVvbCwgeWVzKSB8CisJCQkJICAgSU9fRklFTEQoVVNCX0VQX2NvbW1hbmQsIGVwaWQsIGkpKTsKKwlUeEJ1bGtFUExpc3RbaV0uc3ViID0gMDsKKwlUeEJ1bGtFUExpc3RbaV0ubmV4dCA9IHZpcnRfdG9fcGh5cygmVHhCdWxrRVBMaXN0WzBdKTsKKworCS8qIE5vIG5lZWQgY29uZmlndXJpbmcgZHVtbXkgRVBzIGZvciB0aGUgbGFzdCBvbmUgYXMgaXQgd2lsbCBuZXZlciBiZSB1c2VkIGZvcgorCSAgIGJ1bGsgdHJhZmZpYyAoaSA9PSBJTlZBTERfRVBJRCBhdCB0aGlzIHBvaW50KS4gKi8KKworCS8qIFNldCB1cCB0byBzdGFydCBvbiB0aGUgbGFzdCBFUCBzbyB3ZSB3aWxsIGVuYWJsZSBpdCB3aGVuIGluc2VydGluZyB0cmFmZmljCisJICAgZm9yIHRoZSBmaXJzdCB0aW1lIChpbWl0YXRpbmcgdGhlIHNpdHVhdGlvbiB3aGVyZSB0aGUgRE1BIGhhcyBzdG9wcGVkCisJICAgYmVjYXVzZSB0aGVyZSB3YXMgbm8gbW9yZSB0cmFmZmljKS4gKi8KKwkqUl9ETUFfQ0g4X1NVQjBfRVAgPSB2aXJ0X3RvX3BoeXMoJlR4QnVsa0VQTGlzdFtpXSk7CisJLyogTm8gcG9pbnQgaW4gc3RhcnRpbmcgdGhlIGJ1bGsgY2hhbm5lbCB5ZXQuCisJICpSX0RNQV9DSDhfU1VCMF9DTUQgPSBJT19TVEFURShSX0RNQV9DSDhfU1VCMF9DTUQsIGNtZCwgc3RhcnQpOyAqLworCURCRkVYSVQ7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfdHhfY3RybF9lcCh2b2lkKQoreworCWludCBpOworCisJREJGRU5URVI7CisKKwlmb3IgKGkgPSAwOyBpIDwgKE5CUl9PRl9FUElEUyAtIDEpOyBpKyspIHsKKwkJQ0hFQ0tfQUxJR04oJlR4Q3RybEVQTGlzdFtpXSk7CisJCVR4Q3RybEVQTGlzdFtpXS5od19sZW4gPSAwOworCQlUeEN0cmxFUExpc3RbaV0uY29tbWFuZCA9IElPX0ZJRUxEKFVTQl9FUF9jb21tYW5kLCBlcGlkLCBpKTsKKwkJVHhDdHJsRVBMaXN0W2ldLnN1YiA9IDA7CisJCVR4Q3RybEVQTGlzdFtpXS5uZXh0ID0gdmlydF90b19waHlzKCZUeEN0cmxFUExpc3RbaSArIDFdKTsKKwl9CisKKwlDSEVDS19BTElHTigmVHhDdHJsRVBMaXN0W2ldKTsKKwlUeEN0cmxFUExpc3RbaV0uaHdfbGVuID0gMDsKKwlUeEN0cmxFUExpc3RbaV0uY29tbWFuZCA9IChJT19TVEFURShVU0JfRVBfY29tbWFuZCwgZW9sLCB5ZXMpIHwKKwkJCQkgICBJT19GSUVMRChVU0JfRVBfY29tbWFuZCwgZXBpZCwgaSkpOworCisJVHhDdHJsRVBMaXN0W2ldLnN1YiA9IDA7CisJVHhDdHJsRVBMaXN0W2ldLm5leHQgPSB2aXJ0X3RvX3BoeXMoJlR4Q3RybEVQTGlzdFswXSk7CisKKwkqUl9ETUFfQ0g4X1NVQjFfRVAgPSB2aXJ0X3RvX3BoeXMoJlR4Q3RybEVQTGlzdFswXSk7CisJKlJfRE1BX0NIOF9TVUIxX0NNRCA9IElPX1NUQVRFKFJfRE1BX0NIOF9TVUIxX0NNRCwgY21kLCBzdGFydCk7CisKKwlEQkZFWElUOworfQorCisKK3N0YXRpYyB2b2lkIGluaXRfdHhfaW50cl9lcCh2b2lkKQoreworCWludCBpOworCisJREJGRU5URVI7CisKKwkvKiBSZWFkIGNvbW1lbnQgYXQgem91dF9idWZmZXIgZGVjbGFyYXRpb24gZm9yIGFuIGV4cGxhbmF0aW9uIHRvIHRoaXMuICovCisJVHhJbnRyU0Jfem91dC5zd19sZW4gPSAxOworCVR4SW50clNCX3pvdXQubmV4dCA9IDA7CisJVHhJbnRyU0Jfem91dC5idWYgPSB2aXJ0X3RvX3BoeXMoJnpvdXRfYnVmZmVyWzBdKTsKKwlUeEludHJTQl96b3V0LmNvbW1hbmQgPSAoSU9fRklFTEQoVVNCX1NCX2NvbW1hbmQsIHJlbSwgMCkgfAorCQkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgdHQsIHpvdXQpIHwKKwkJCQkgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGZ1bGwsIHllcykgfAorCQkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW90LCB5ZXMpIHwKKwkJCQkgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGVvbCwgeWVzKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgKE1BWF9JTlRSX0lOVEVSVkFMIC0gMSk7IGkrKykgeworCQlDSEVDS19BTElHTigmVHhJbnRyRVBMaXN0W2ldKTsKKwkJVHhJbnRyRVBMaXN0W2ldLmh3X2xlbiA9IDA7CisJCVR4SW50ckVQTGlzdFtpXS5jb21tYW5kID0KKwkJCShJT19TVEFURShVU0JfRVBfY29tbWFuZCwgZW9mLCB5ZXMpIHwKKwkJCSBJT19TVEFURShVU0JfRVBfY29tbWFuZCwgZW5hYmxlLCB5ZXMpIHwKKwkJCSBJT19GSUVMRChVU0JfRVBfY29tbWFuZCwgZXBpZCwgSU5WQUxJRF9FUElEKSk7CisJCVR4SW50ckVQTGlzdFtpXS5zdWIgPSB2aXJ0X3RvX3BoeXMoJlR4SW50clNCX3pvdXQpOworCQlUeEludHJFUExpc3RbaV0ubmV4dCA9IHZpcnRfdG9fcGh5cygmVHhJbnRyRVBMaXN0W2kgKyAxXSk7CisJfQorCisJQ0hFQ0tfQUxJR04oJlR4SW50ckVQTGlzdFtpXSk7CisJVHhJbnRyRVBMaXN0W2ldLmh3X2xlbiA9IDA7CisJVHhJbnRyRVBMaXN0W2ldLmNvbW1hbmQgPQorCQkoSU9fU1RBVEUoVVNCX0VQX2NvbW1hbmQsIGVvZiwgeWVzKSB8CisJCSBJT19TVEFURShVU0JfRVBfY29tbWFuZCwgZW9sLCB5ZXMpIHwKKwkJIElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlbmFibGUsIHllcykgfAorCQkgSU9fRklFTEQoVVNCX0VQX2NvbW1hbmQsIGVwaWQsIElOVkFMSURfRVBJRCkpOworCVR4SW50ckVQTGlzdFtpXS5zdWIgPSB2aXJ0X3RvX3BoeXMoJlR4SW50clNCX3pvdXQpOworCVR4SW50ckVQTGlzdFtpXS5uZXh0ID0gdmlydF90b19waHlzKCZUeEludHJFUExpc3RbMF0pOworCisJKlJfRE1BX0NIOF9TVUIyX0VQID0gdmlydF90b19waHlzKCZUeEludHJFUExpc3RbMF0pOworCSpSX0RNQV9DSDhfU1VCMl9DTUQgPSBJT19TVEFURShSX0RNQV9DSDhfU1VCMl9DTUQsIGNtZCwgc3RhcnQpOworCURCRkVYSVQ7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfdHhfaXNvY19lcCh2b2lkKQoreworCWludCBpOworCisJREJGRU5URVI7CisKKwkvKiBSZWFkIGNvbW1lbnQgYXQgem91dF9idWZmZXIgZGVjbGFyYXRpb24gZm9yIGFuIGV4cGxhbmF0aW9uIHRvIHRoaXMuICovCisJVHhJc29jU0Jfem91dC5zd19sZW4gPSAxOworCVR4SXNvY1NCX3pvdXQubmV4dCA9IDA7CisJVHhJc29jU0Jfem91dC5idWYgPSB2aXJ0X3RvX3BoeXMoJnpvdXRfYnVmZmVyWzBdKTsKKwlUeElzb2NTQl96b3V0LmNvbW1hbmQgPSAoSU9fRklFTEQoVVNCX1NCX2NvbW1hbmQsIHJlbSwgMCkgfAorCQkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgdHQsIHpvdXQpIHwKKwkJCQkgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGZ1bGwsIHllcykgfAorCQkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW90LCB5ZXMpIHwKKwkJCQkgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGVvbCwgeWVzKSk7CisKKwkvKiBUaGUgbGFzdCBpc29jaHJvbm91cyBFUCBkZXNjcmlwdG9yIGlzIGEgZHVtbXkuICovCisKKwlmb3IgKGkgPSAwOyBpIDwgKE5CUl9PRl9FUElEUyAtIDEpOyBpKyspIHsKKwkJQ0hFQ0tfQUxJR04oJlR4SXNvY0VQTGlzdFtpXSk7CisJCVR4SXNvY0VQTGlzdFtpXS5od19sZW4gPSAwOworCQlUeElzb2NFUExpc3RbaV0uY29tbWFuZCA9IElPX0ZJRUxEKFVTQl9FUF9jb21tYW5kLCBlcGlkLCBpKTsKKwkJVHhJc29jRVBMaXN0W2ldLnN1YiA9IDA7CisJCVR4SXNvY0VQTGlzdFtpXS5uZXh0ID0gdmlydF90b19waHlzKCZUeElzb2NFUExpc3RbaSArIDFdKTsKKwl9CisKKwlDSEVDS19BTElHTigmVHhJc29jRVBMaXN0W2ldKTsKKwlUeElzb2NFUExpc3RbaV0uaHdfbGVuID0gMDsKKworCS8qIE11c3QgZW5hYmxlIHRoZSBsYXN0IEVQIGRlc2NyIHRvIGdldCBlb2YgaW50ZXJydXB0LiAqLworCVR4SXNvY0VQTGlzdFtpXS5jb21tYW5kID0gKElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlbmFibGUsIHllcykgfAorCQkJCSAgIElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlb2YsIHllcykgfAorCQkJCSAgIElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlb2wsIHllcykgfAorCQkJCSAgIElPX0ZJRUxEKFVTQl9FUF9jb21tYW5kLCBlcGlkLCBJTlZBTElEX0VQSUQpKTsKKwlUeElzb2NFUExpc3RbaV0uc3ViID0gdmlydF90b19waHlzKCZUeElzb2NTQl96b3V0KTsKKwlUeElzb2NFUExpc3RbaV0ubmV4dCA9IHZpcnRfdG9fcGh5cygmVHhJc29jRVBMaXN0WzBdKTsKKworCSpSX0RNQV9DSDhfU1VCM19FUCA9IHZpcnRfdG9fcGh5cygmVHhJc29jRVBMaXN0WzBdKTsKKwkqUl9ETUFfQ0g4X1NVQjNfQ01EID0gSU9fU1RBVEUoUl9ETUFfQ0g4X1NVQjNfQ01ELCBjbWQsIHN0YXJ0KTsKKworCURCRkVYSVQ7Cit9CisKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl91bmxpbmtfaW50cl91cmIoc3RydWN0IHVyYiAqdXJiKQoreworCXZvbGF0aWxlIFVTQl9FUF9EZXNjX3QgKmZpcnN0X2VwOyAgLyogRmlyc3QgRVAgaW4gdGhlIGxpc3QuICovCisJdm9sYXRpbGUgVVNCX0VQX0Rlc2NfdCAqY3Vycl9lcDsgICAvKiBDdXJyZW50IEVQLCB0aGUgaXRlcmF0b3IuICovCisJdm9sYXRpbGUgVVNCX0VQX0Rlc2NfdCAqbmV4dF9lcDsgICAvKiBUaGUgRVAgYWZ0ZXIgY3VycmVudC4gKi8KKwl2b2xhdGlsZSBVU0JfRVBfRGVzY190ICp1bmxpbmtfZXA7IC8qIFRoZSBvbmUgd2Ugc2hvdWxkIHJlbW92ZSBmcm9tIHRoZSBsaXN0LiAqLworCisJaW50IGVwaWQ7CisKKwkvKiBSZWFkIDguOC40IGluIERlc2lnbmVyJ3MgUmVmZXJlbmNlLCAiUmVtb3ZpbmcgYW4gRVAgRGVzY3JpcHRvciBmcm9tIHRoZSBMaXN0Ii4gKi8KKworCURCRkVOVEVSOworCisJZXBpZCA9ICgoZXRyYXhfdXJiX3ByaXZfdCAqKXVyYi0+aGNwcml2KS0+ZXBpZDsKKworCWZpcnN0X2VwID0gJlR4SW50ckVQTGlzdFswXTsKKwljdXJyX2VwID0gZmlyc3RfZXA7CisKKworCS8qIE5vdGUgdGhhdCB0aGlzIGxvb3AgcmVtb3ZlcyBhbGwgRVAgZGVzY3JpcHRvcnMgd2l0aCB0aGlzIGVwaWQuIFRoaXMgYXNzdW1lcworCSAgIHRoYXQgYWxsIEVQIGRlc2NyaXB0b3JzIGJlbG9uZyB0byB0aGUgb25lIGFuZCBvbmx5IHVyYiBmb3IgdGhpcyBlcGlkLiAqLworCisJZG8geworCQluZXh0X2VwID0gKFVTQl9FUF9EZXNjX3QgKilwaHlzX3RvX3ZpcnQoY3Vycl9lcC0+bmV4dCk7CisKKwkJaWYgKElPX0VYVFJBQ1QoVVNCX0VQX2NvbW1hbmQsIGVwaWQsIG5leHRfZXAtPmNvbW1hbmQpID09IGVwaWQpIHsKKworCQkJZGJnX2ludHIoIkZvdW5kIEVQIHRvIHVubGluayBmb3IgZXBpZCAlZCIsIGVwaWQpOworCisJCQkvKiBUaGlzIGlzIHRoZSBvbmUgd2Ugc2hvdWxkIHVubGluay4gKi8KKwkJCXVubGlua19lcCA9IG5leHRfZXA7CisKKwkJCS8qIEFjdHVhbGx5IHVubGluayB0aGUgRVAgZnJvbSB0aGUgRE1BIGxpc3QuICovCisJCQljdXJyX2VwLT5uZXh0ID0gdW5saW5rX2VwLT5uZXh0OworCisJCQkvKiBXYWl0IHVudGlsIHRoZSBETUEgaXMgbm8gbG9uZ2VyIGF0IHRoaXMgZGVzY3JpcHRvci4gKi8KKwkJCXdoaWxlICgqUl9ETUFfQ0g4X1NVQjJfRVAgPT0gdmlydF90b19waHlzKHVubGlua19lcCkpOworCisJCQkvKiBOb3cgd2UgYXJlIGZyZWUgdG8gcmVtb3ZlIGl0IGFuZCBpdHMgU0IgZGVzY3JpcHRvci4KKwkJCSAgIE5vdGUgdGhhdCBpdCBpcyBhc3N1bWVkIGhlcmUgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBzYiBpbiB0aGUKKwkJCSAgIHNiIGxpc3QgZm9yIHRoaXMgZXAuICovCisJCQlrbWVtX2NhY2hlX2ZyZWUodXNiX2Rlc2NfY2FjaGUsIHBoeXNfdG9fdmlydCh1bmxpbmtfZXAtPnN1YikpOworCQkJa21lbV9jYWNoZV9mcmVlKHVzYl9kZXNjX2NhY2hlLCAoVVNCX0VQX0Rlc2NfdCAqKXVubGlua19lcCk7CisJCX0KKworCQljdXJyX2VwID0gcGh5c190b192aXJ0KGN1cnJfZXAtPm5leHQpOworCisJfSB3aGlsZSAoY3Vycl9lcCAhPSBmaXJzdF9lcCk7CisgICAgICAgIHVyYi0+aGNwcml2ID0gTlVMTDsKK30KKwordm9pZCBldHJheF91c2JfZG9faW50cl9yZWNvdmVyKGludCBlcGlkKQoreworCVVTQl9FUF9EZXNjX3QgKmZpcnN0X2VwLCAqdG1wX2VwOworCisJREJGRU5URVI7CisKKwlmaXJzdF9lcCA9IChVU0JfRVBfRGVzY190ICopcGh5c190b192aXJ0KCpSX0RNQV9DSDhfU1VCMl9FUCk7CisJdG1wX2VwID0gZmlyc3RfZXA7CisKKwkvKiBXaGF0IHRoaXMgZG9lcyBpcyBzaW1wbHkgdG8gd2FsayB0aGUgbGlzdCBvZiBpbnRlcnJ1cHQKKwkgICBlcCBkZXNjcmlwdG9ycyBhbmQgZW5hYmxlIHRob3NlIHRoYXQgYXJlIGRpc2FibGVkLiAqLworCisJZG8geworCQlpZiAoSU9fRVhUUkFDVChVU0JfRVBfY29tbWFuZCwgZXBpZCwgdG1wX2VwLT5jb21tYW5kKSA9PSBlcGlkICYmCisJCSAgICAhKHRtcF9lcC0+Y29tbWFuZCAmIElPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSkpKSB7CisJCQl0bXBfZXAtPmNvbW1hbmQgfD0gSU9fU1RBVEUoVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSwgeWVzKTsKKwkJfQorCisJCXRtcF9lcCA9IChVU0JfRVBfRGVzY190ICopcGh5c190b192aXJ0KHRtcF9lcC0+bmV4dCk7CisKKwl9IHdoaWxlICh0bXBfZXAgIT0gZmlyc3RfZXApOworCisKKwlEQkZFWElUOworfQorCitzdGF0aWMgaW50IGV0cmF4X3JoX3VubGlua191cmIgKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlldHJheF9oY190ICpoYzsKKworCURCRkVOVEVSOworCisJaGMgPSB1cmItPmRldi0+YnVzLT5oY3ByaXY7CisKKwlpZiAoaGMtPnJoLnVyYiA9PSB1cmIpIHsKKwkJaGMtPnJoLnNlbmQgPSAwOworCQlkZWxfdGltZXIoJmhjLT5yaC5yaF9pbnRfdGltZXIpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGV0cmF4X3JoX3NlbmRfaXJxKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlfX3UxNiBkYXRhID0gMDsKKwlldHJheF9oY190ICpoYyA9IHVyYi0+ZGV2LT5idXMtPmhjcHJpdjsKKwlEQkZFTlRFUjsKKworLyoKKyAgZGJnX3JoKCJSX1VTQl9GTV9OVU1CRVIgICA6IDB4JTA4WCIsICpSX1VTQl9GTV9OVU1CRVIpOworICBkYmdfcmgoIlJfVVNCX0ZNX1JFTUFJTklORzogMHglMDhYIiwgKlJfVVNCX0ZNX1JFTUFJTklORyk7CisqLworCisJZGF0YSB8PSAoaGMtPnJoLndQb3J0Q2hhbmdlXzEpID8gKDEgPDwgMSkgOiAwOworCWRhdGEgfD0gKGhjLT5yaC53UG9ydENoYW5nZV8yKSA/ICgxIDw8IDIpIDogMDsKKworCSooKF9fdTE2ICopdXJiLT50cmFuc2Zlcl9idWZmZXIpID0gY3B1X3RvX2xlMTYoZGF0YSk7CisJLyogRklYTUU6IFdoeSBpcyBhY3R1YWxfbGVuZ3RoIHNldCB0byAxIHdoZW4gZGF0YSBpcyAyIGJ5dGVzPworCSAgIFNpbmNlIG9ubHkgMSBieXRlIGlzIHVzZWQsIHdoeSBub3QgZGVjbGFyZSBkYXRhIGFzIF9fdTg/ICovCisJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMTsKKwl1cmItPnN0YXR1cyA9IDA7CisKKwlpZiAoaGMtPnJoLnNlbmQgJiYgdXJiLT5jb21wbGV0ZSkgeworCQlkYmdfcmgoIndQb3J0Q2hhbmdlXzE6IDB4JTA0WCIsIGhjLT5yaC53UG9ydENoYW5nZV8xKTsKKwkJZGJnX3JoKCJ3UG9ydENoYW5nZV8yOiAweCUwNFgiLCBoYy0+cmgud1BvcnRDaGFuZ2VfMik7CisKKwkJdXJiLT5jb21wbGV0ZSh1cmIsIE5VTEwpOworCX0KKworCURCRkVYSVQ7Cit9CisKK3N0YXRpYyB2b2lkIGV0cmF4X3JoX2luaXRfaW50X3RpbWVyKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlldHJheF9oY190ICpoYzsKKworCURCRkVOVEVSOworCisJaGMgPSB1cmItPmRldi0+YnVzLT5oY3ByaXY7CisJaGMtPnJoLmludGVydmFsID0gdXJiLT5pbnRlcnZhbDsKKwlpbml0X3RpbWVyKCZoYy0+cmgucmhfaW50X3RpbWVyKTsKKwloYy0+cmgucmhfaW50X3RpbWVyLmZ1bmN0aW9uID0gZXRyYXhfcmhfaW50X3RpbWVyX2RvOworCWhjLT5yaC5yaF9pbnRfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXVyYjsKKwkvKiBGSVhNRTogSXMgdGhlIGppZmZpZXMgcmVzb2x1dGlvbiBlbm91Z2g/IEFsbCBpbnRlcnZhbHMgPCAxMCBtcyB3aWxsIGJlIG1hcHBlZAorCSAgIHRvIDAsIGFuZCB0aGUgcmVzdCB0byB0aGUgbmVhcmVzdCBsb3dlciAxMCBtcy4gKi8KKwloYy0+cmgucmhfaW50X3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgKChIWiAqIGhjLT5yaC5pbnRlcnZhbCkgLyAxMDAwKTsKKwlhZGRfdGltZXIoJmhjLT5yaC5yaF9pbnRfdGltZXIpOworCisJREJGRVhJVDsKK30KKworc3RhdGljIHZvaWQgZXRyYXhfcmhfaW50X3RpbWVyX2RvKHVuc2lnbmVkIGxvbmcgcHRyKQoreworCXN0cnVjdCB1cmIgKnVyYjsKKwlldHJheF9oY190ICpoYzsKKworCURCRkVOVEVSOworCisJdXJiID0gKHN0cnVjdCB1cmIqKXB0cjsKKwloYyA9IHVyYi0+ZGV2LT5idXMtPmhjcHJpdjsKKworCWlmIChoYy0+cmguc2VuZCkgeworCQlldHJheF9yaF9zZW5kX2lycSh1cmIpOworCX0KKworCURCRkVYSVQ7Cit9CisKK3N0YXRpYyBpbnQgZXRyYXhfdXNiX3NldHVwX2VwaWQoc3RydWN0IHVyYiAqdXJiKQoreworCWludCBlcGlkOworCWNoYXIgZGV2bnVtLCBlbmRwb2ludCwgb3V0X3RyYWZmaWMsIHNsb3c7CisJaW50IG1heGxlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJREJGRU5URVI7CisKKwllcGlkID0gZXRyYXhfdXNiX2xvb2t1cF9lcGlkKHVyYik7CisJaWYgKChlcGlkICE9IC0xKSl7CisJCS8qIEFuIGVwaWQgdGhhdCBmaXRzIHRoaXMgdXJiIGhhcyBiZWVuIGZvdW5kLiAqLworCQlEQkZFWElUOworCQlyZXR1cm4gZXBpZDsKKwl9CisKKwkvKiBXZSBtdXN0IGZpbmQgYW5kIGluaXRpYXRlIGEgbmV3IGVwaWQgZm9yIHRoaXMgdXJiLiAqLworCWVwaWQgPSBldHJheF91c2JfYWxsb2NhdGVfZXBpZCgpOworCisJaWYgKGVwaWQgPT0gLTEpIHsKKwkJLyogRmFpbGVkIHRvIGFsbG9jYXRlIGEgbmV3IGVwaWQuICovCisJCURCRkVYSVQ7CisJCXJldHVybiBlcGlkOworCX0KKworCS8qIFdlIG5vdyBoYXZlIGEgbmV3IGVwaWQgdG8gdXNlLiBJbml0aWF0ZSBpdC4gKi8KKwlzZXRfYml0KGVwaWQsICh2b2lkICopJmVwaWRfdXNhZ2VfYml0bWFzayk7CisKKwlkZXZudW0gPSB1c2JfcGlwZWRldmljZSh1cmItPnBpcGUpOworCWVuZHBvaW50ID0gdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpOworCXNsb3cgPSB1c2JfcGlwZXNsb3codXJiLT5waXBlKTsKKwltYXhsZW4gPSB1c2JfbWF4cGFja2V0KHVyYi0+ZGV2LCB1cmItPnBpcGUsIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpOworCWlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0NPTlRST0wpIHsKKwkJLyogV2Ugd2FudCBib3RoIElOIGFuZCBPVVQgY29udHJvbCB0cmFmZmljIHRvIGJlIHB1dCBvbiB0aGUgc2FtZSBFUC9TQiBsaXN0LiAqLworCQlvdXRfdHJhZmZpYyA9IDE7CisJfSBlbHNlIHsKKwkJb3V0X3RyYWZmaWMgPSB1c2JfcGlwZW91dCh1cmItPnBpcGUpOworCX0KKworCXNhdmVfZmxhZ3MoZmxhZ3MpOworCWNsaSgpOworCisJKlJfVVNCX0VQVF9JTkRFWCA9IElPX0ZJRUxEKFJfVVNCX0VQVF9JTkRFWCwgdmFsdWUsIGVwaWQpOworCW5vcCgpOworCisJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJKlJfVVNCX0VQVF9EQVRBX0lTTyA9IElPX1NUQVRFKFJfVVNCX0VQVF9EQVRBX0lTTywgdmFsaWQsIHllcykgfAorCQkJLyogRklYTUU6IENoYW5nZSBhbnkgdG8gdGhlIGFjdHVhbCBwb3J0PyAqLworCQkJSU9fU1RBVEUoUl9VU0JfRVBUX0RBVEFfSVNPLCBwb3J0LCBhbnkpIHwKKwkJCUlPX0ZJRUxEKFJfVVNCX0VQVF9EQVRBX0lTTywgbWF4X2xlbiwgbWF4bGVuKSB8CisJCQlJT19GSUVMRChSX1VTQl9FUFRfREFUQV9JU08sIGVwLCBlbmRwb2ludCkgfAorCQkJSU9fRklFTEQoUl9VU0JfRVBUX0RBVEFfSVNPLCBkZXYsIGRldm51bSk7CisJfSBlbHNlIHsKKwkJKlJfVVNCX0VQVF9EQVRBID0gSU9fU1RBVEUoUl9VU0JfRVBUX0RBVEEsIHZhbGlkLCB5ZXMpIHwKKwkJCUlPX0ZJRUxEKFJfVVNCX0VQVF9EQVRBLCBsb3dfc3BlZWQsIHNsb3cpIHwKKwkJCS8qIEZJWE1FOiBDaGFuZ2UgYW55IHRvIHRoZSBhY3R1YWwgcG9ydD8gKi8KKwkJCUlPX1NUQVRFKFJfVVNCX0VQVF9EQVRBLCBwb3J0LCBhbnkpIHwKKwkJCUlPX0ZJRUxEKFJfVVNCX0VQVF9EQVRBLCBtYXhfbGVuLCBtYXhsZW4pIHwKKwkJCUlPX0ZJRUxEKFJfVVNCX0VQVF9EQVRBLCBlcCwgZW5kcG9pbnQpIHwKKwkJCUlPX0ZJRUxEKFJfVVNCX0VQVF9EQVRBLCBkZXYsIGRldm51bSk7CisJfQorCisJcmVzdG9yZV9mbGFncyhmbGFncyk7CisKKwlpZiAob3V0X3RyYWZmaWMpIHsKKwkJc2V0X2JpdChlcGlkLCAodm9pZCAqKSZlcGlkX291dF90cmFmZmljKTsKKwl9IGVsc2UgeworCQljbGVhcl9iaXQoZXBpZCwgKHZvaWQgKikmZXBpZF9vdXRfdHJhZmZpYyk7CisJfQorCisJZGJnX2VwaWQoIlNldHRpbmcgdXAgZXBpZCAlZCB3aXRoIGRldm51bSAlZCwgZW5kcG9pbnQgJWQgYW5kIG1heF9sZW4gJWQgKCVzKSIsCisJCSBlcGlkLCBkZXZudW0sIGVuZHBvaW50LCBtYXhsZW4sIG91dF90cmFmZmljID8gIk9VVCIgOiAiSU4iKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIGVwaWQ7Cit9CisKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9mcmVlX2VwaWQoaW50IGVwaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCURCRkVOVEVSOworCisJaWYgKCF0ZXN0X2JpdChlcGlkLCAodm9pZCAqKSZlcGlkX3VzYWdlX2JpdG1hc2spKSB7CisJCXdhcm4oIlRyeWluZyB0byBmcmVlIHVudXNlZCBlcGlkICVkIiwgZXBpZCk7CisJCURCRkVYSVQ7CisJCXJldHVybjsKKwl9CisKKwlzYXZlX2ZsYWdzKGZsYWdzKTsKKwljbGkoKTsKKworCSpSX1VTQl9FUFRfSU5ERVggPSBJT19GSUVMRChSX1VTQl9FUFRfSU5ERVgsIHZhbHVlLCBlcGlkKTsKKwlub3AoKTsKKwl3aGlsZSAoKlJfVVNCX0VQVF9EQVRBICYgSU9fTUFTSyhSX1VTQl9FUFRfREFUQSwgaG9sZCkpOworCS8qIFRoaXMgd2lsbCwgYW1vbmcgb3RoZXIgdGhpbmdzLCBzZXQgdGhlIHZhbGlkIGZpZWxkIHRvIDAuICovCisJKlJfVVNCX0VQVF9EQVRBID0gMDsKKwlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKworCWNsZWFyX2JpdChlcGlkLCAodm9pZCAqKSZlcGlkX3VzYWdlX2JpdG1hc2spOworCisKKwlkYmdfZXBpZCgiRnJlZWQgZXBpZCAlZCIsIGVwaWQpOworCisJREJGRVhJVDsKK30KKworc3RhdGljIGludCBldHJheF91c2JfbG9va3VwX2VwaWQoc3RydWN0IHVyYiAqdXJiKQoreworCWludCBpOworCV9fdTMyIGRhdGE7CisJY2hhciBkZXZudW0sIGVuZHBvaW50LCBzbG93LCBvdXRfdHJhZmZpYzsKKwlpbnQgbWF4bGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlEQkZFTlRFUjsKKworCWRldm51bSA9IHVzYl9waXBlZGV2aWNlKHVyYi0+cGlwZSk7CisJZW5kcG9pbnQgPSB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSk7CisJc2xvdyA9IHVzYl9waXBlc2xvdyh1cmItPnBpcGUpOworCW1heGxlbiA9IHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwgdXNiX3BpcGVvdXQodXJiLT5waXBlKSk7CisJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfQ09OVFJPTCkgeworCQkvKiBXZSB3YW50IGJvdGggSU4gYW5kIE9VVCBjb250cm9sIHRyYWZmaWMgdG8gYmUgcHV0IG9uIHRoZSBzYW1lIEVQL1NCIGxpc3QuICovCisJCW91dF90cmFmZmljID0gMTsKKwl9IGVsc2UgeworCQlvdXRfdHJhZmZpYyA9IHVzYl9waXBlb3V0KHVyYi0+cGlwZSk7CisJfQorCisJLyogU3RlcCB0aHJvdWdoIGF0dCBlcGlkcy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgTkJSX09GX0VQSURTOyBpKyspIHsKKwkJaWYgKHRlc3RfYml0KGksICh2b2lkICopJmVwaWRfdXNhZ2VfYml0bWFzaykgJiYKKwkJICAgIHRlc3RfYml0KGksICh2b2lkICopJmVwaWRfb3V0X3RyYWZmaWMpID09IG91dF90cmFmZmljKSB7CisKKwkJCXNhdmVfZmxhZ3MoZmxhZ3MpOworCQkJY2xpKCk7CisJCQkqUl9VU0JfRVBUX0lOREVYID0gSU9fRklFTEQoUl9VU0JfRVBUX0lOREVYLCB2YWx1ZSwgaSk7CisJCQlub3AoKTsKKworCQkJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJCQlkYXRhID0gKlJfVVNCX0VQVF9EQVRBX0lTTzsKKwkJCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKworCQkJCWlmICgoSU9fTUFTSyhSX1VTQl9FUFRfREFUQV9JU08sIHZhbGlkKSAmIGRhdGEpICYmCisJCQkJICAgIChJT19FWFRSQUNUKFJfVVNCX0VQVF9EQVRBX0lTTywgZGV2LCBkYXRhKSA9PSBkZXZudW0pICYmCisJCQkJICAgIChJT19FWFRSQUNUKFJfVVNCX0VQVF9EQVRBX0lTTywgZXAsIGRhdGEpID09IGVuZHBvaW50KSAmJgorCQkJCSAgICAoSU9fRVhUUkFDVChSX1VTQl9FUFRfREFUQV9JU08sIG1heF9sZW4sIGRhdGEpID09IG1heGxlbikpIHsKKwkJCQkJZGJnX2VwaWQoIkZvdW5kIGVwaWQgJWQgZm9yIGRldm51bSAlZCwgZW5kcG9pbnQgJWQgKCVzKSIsCisJCQkJCQkgaSwgZGV2bnVtLCBlbmRwb2ludCwgb3V0X3RyYWZmaWMgPyAiT1VUIiA6ICJJTiIpOworCQkJCQlEQkZFWElUOworCQkJCQlyZXR1cm4gaTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWRhdGEgPSAqUl9VU0JfRVBUX0RBVEE7CisJCQkJcmVzdG9yZV9mbGFncyhmbGFncyk7CisKKwkJCQlpZiAoKElPX01BU0soUl9VU0JfRVBUX0RBVEEsIHZhbGlkKSAmIGRhdGEpICYmCisJCQkJICAgIChJT19FWFRSQUNUKFJfVVNCX0VQVF9EQVRBLCBkZXYsIGRhdGEpID09IGRldm51bSkgJiYKKwkJCQkgICAgKElPX0VYVFJBQ1QoUl9VU0JfRVBUX0RBVEEsIGVwLCBkYXRhKSA9PSBlbmRwb2ludCkgJiYKKwkJCQkgICAgKElPX0VYVFJBQ1QoUl9VU0JfRVBUX0RBVEEsIGxvd19zcGVlZCwgZGF0YSkgPT0gc2xvdykgJiYKKwkJCQkgICAgKElPX0VYVFJBQ1QoUl9VU0JfRVBUX0RBVEEsIG1heF9sZW4sIGRhdGEpID09IG1heGxlbikpIHsKKwkJCQkJZGJnX2VwaWQoIkZvdW5kIGVwaWQgJWQgZm9yIGRldm51bSAlZCwgZW5kcG9pbnQgJWQgKCVzKSIsCisJCQkJCQkgaSwgZGV2bnVtLCBlbmRwb2ludCwgb3V0X3RyYWZmaWMgPyAiT1VUIiA6ICJJTiIpOworCQkJCQlEQkZFWElUOworCQkJCQlyZXR1cm4gaTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlEQkZFWElUOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBldHJheF91c2JfYWxsb2NhdGVfZXBpZCh2b2lkKQoreworCWludCBpOworCisJREJGRU5URVI7CisKKwlmb3IgKGkgPSAwOyBpIDwgTkJSX09GX0VQSURTOyBpKyspIHsKKwkJaWYgKCF0ZXN0X2JpdChpLCAodm9pZCAqKSZlcGlkX3VzYWdlX2JpdG1hc2spKSB7CisJCQlkYmdfZXBpZCgiRm91bmQgZnJlZSBlcGlkICVkIiwgaSk7CisJCQlEQkZFWElUOworCQkJcmV0dXJuIGk7CisJCX0KKwl9CisKKwlkYmdfZXBpZCgiRm91bmQgbm8gZnJlZSBlcGlkcyIpOworCURCRkVYSVQ7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGV0cmF4X3VzYl9zdWJtaXRfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IG1lbV9mbGFncykKK3sKKwlldHJheF9oY190ICpoYzsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCURCRkVOVEVSOworCisJaWYgKCF1cmItPmRldiB8fCAhdXJiLT5kZXYtPmJ1cykgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwgdXNiX3BpcGVvdXQodXJiLT5waXBlKSkgPD0gMCkgeworCQlpbmZvKCJTdWJtaXQgdXJiIHRvIHBpcGUgd2l0aCBtYXhwYWNrZXRsZW4gMCwgcGlwZSAweCVYXG4iLCB1cmItPnBpcGUpOworCQlyZXR1cm4gLUVNU0dTSVpFOworCX0KKworCWlmICh1cmItPnRpbWVvdXQpIHsKKwkJLyogRklYTUUuICovCisJCXdhcm4oInVyYi0+dGltZW91dCBzcGVjaWZpZWQsIGlnbm9yaW5nLiIpOworCX0KKworCWhjID0gKGV0cmF4X2hjX3QqKXVyYi0+ZGV2LT5idXMtPmhjcHJpdjsKKworCWlmICh1c2JfcGlwZWRldmljZSh1cmItPnBpcGUpID09IGhjLT5yaC5kZXZudW0pIHsKKwkJLyogVGhpcyByZXF1ZXN0IGlzIGZvciB0aGUgVmlydHVhbCBSb290IEh1Yi4gKi8KKwkJcmV0ID0gZXRyYXhfcmhfc3VibWl0X3VyYih1cmIpOworCisJfSBlbHNlIGlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0JVTEspIHsKKworCQlyZXQgPSBldHJheF91c2Jfc3VibWl0X2J1bGtfdXJiKHVyYik7CisKKwl9IGVsc2UgaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfQ09OVFJPTCkgeworCisJCXJldCA9IGV0cmF4X3VzYl9zdWJtaXRfY3RybF91cmIodXJiKTsKKworCX0gZWxzZSBpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JTlRFUlJVUFQpIHsKKwkJaW50IGJ1c3RpbWU7CisKKwkJaWYgKHVyYi0+YmFuZHdpZHRoID09IDApIHsKKwkJCWJ1c3RpbWUgPSB1c2JfY2hlY2tfYmFuZHdpZHRoKHVyYi0+ZGV2LCB1cmIpOworCQkJaWYgKGJ1c3RpbWUgPCAwKSB7CisJCQkJcmV0ID0gYnVzdGltZTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0ID0gZXRyYXhfdXNiX3N1Ym1pdF9pbnRyX3VyYih1cmIpOworCQkJCWlmIChyZXQgPT0gMCkKKwkJCQkJdXNiX2NsYWltX2JhbmR3aWR0aCh1cmItPmRldiwgdXJiLCBidXN0aW1lLCAwKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIEJhbmR3aWR0aCBhbHJlYWR5IHNldC4gKi8KKwkJCXJldCA9IGV0cmF4X3VzYl9zdWJtaXRfaW50cl91cmIodXJiKTsKKwkJfQorCisJfSBlbHNlIGlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0lTT0NIUk9OT1VTKSB7CisJCWludCBidXN0aW1lOworCisJCWlmICh1cmItPmJhbmR3aWR0aCA9PSAwKSB7CisJCQlidXN0aW1lID0gdXNiX2NoZWNrX2JhbmR3aWR0aCh1cmItPmRldiwgdXJiKTsKKwkJCWlmIChidXN0aW1lIDwgMCkgeworCQkJCXJldCA9IGJ1c3RpbWU7CisJCQl9IGVsc2UgeworCQkJCXJldCA9IGV0cmF4X3VzYl9zdWJtaXRfaXNvY191cmIodXJiKTsKKwkJCQlpZiAocmV0ID09IDApCisJCQkJCXVzYl9jbGFpbV9iYW5kd2lkdGgodXJiLT5kZXYsIHVyYiwgYnVzdGltZSwgMCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBCYW5kd2lkdGggYWxyZWFkeSBzZXQuICovCisJCQlyZXQgPSBldHJheF91c2Jfc3VibWl0X2lzb2NfdXJiKHVyYik7CisJCX0KKwl9CisKKwlEQkZFWElUOworCisgICAgICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgICBwcmludGsoIlN1Ym1pdCBVUkIgZXJyb3IgJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGV0cmF4X3VzYl91bmxpbmtfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cykKK3sKKwlldHJheF9oY190ICpoYzsKKwlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdjsKKwlpbnQgZXBpZDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisKKwlEQkZFTlRFUjsKKworCWlmICghdXJiKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIERpc2FibGUgaW50ZXJydXB0cyBoZXJlIHNpbmNlIGEgZGVzY3JpcHRvciBpbnRlcnJ1cHQgZm9yIHRoZSBpc29jIGVwaWQKKwkgICB3aWxsIG1vZGlmeSB0aGUgc2IgbGlzdC4gIFRoaXMgY291bGQgcG9zc2libHkgYmUgZG9uZSBtb3JlIGdyYW51bGFyLCBidXQKKwkgICB1bmxpbmtfdXJiIHNob3VsZCBub3QgYmUgdXNlZCBmcmVxdWVudGx5IGFueXdheS4KKwkqLworCisJc2F2ZV9mbGFncyhmbGFncyk7CisJY2xpKCk7CisKKwlpZiAoIXVyYi0+ZGV2IHx8ICF1cmItPmRldi0+YnVzKSB7CisJCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKCF1cmItPmhjcHJpdikgeworCQkvKiBUaGlzIGhhcHBlbnMgaWYgYSBkZXZpY2UgZHJpdmVyIGNhbGxzIHVubGluayBvbiBhbiB1cmIgdGhhdAorCQkgICB3YXMgbmV2ZXIgc3VibWl0dGVkIChsYXp5IGRyaXZlcikgb3IgaWYgdGhlIHVyYiB3YXMgY29tcGxldGVkCisJCSAgIHdoaWxlIHVubGluayB3YXMgYmVpbmcgY2FsbGVkLiAqLworCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX0FTWU5DX1VOTElOSykgeworCQkvKiBGSVhNRS4gKi8KKwkJLyogSWYgVVJCX0FTWU5DX1VOTElOSyBpcyBzZXQ6CisJCSAgIHVubGluaworCQkgICBtb3ZlIHRvIGEgc2VwYXJhdGUgdXJiIGxpc3QKKwkJICAgY2FsbCBjb21wbGV0ZSBhdCBuZXh0IHNvZiB3aXRoIEVDT05OUkVTRVQKKworCQkgICBJZiBub3Q6CisJCSAgIHdhaXQgMSBtcworCQkgICB1bmxpbmsKKwkJICAgY2FsbCBjb21wbGV0ZSB3aXRoIEVOT0VOVAorCQkqLworCQl3YXJuKCJVUkJfQVNZTkNfVU5MSU5LIHNldCwgaWdub3JpbmcuIik7CisJfQorCisJLyogT25lIG1pZ2h0IHRoaW5rIHRoYXQgdXJiLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1Mgd291bGQgYmUgYSByZXF1aXJlbWVudCBmb3IgdW5saW5raW5nLAorCSAgIGJ1dCB0aGF0IGRvZXNuJ3Qgd29yayBmb3IgaW50ZXJydXB0IGFuZCBpc29jaHJvbm91cyB0cmFmZmljIHNpbmNlIHRoZXkgYXJlIGNvbXBsZXRlZAorCSAgIHJlcGVhdGVkbHksIGFuZCB1cmItPnN0YXR1cyBpcyBzZXQgdGhlbi4gVGhhdCBtYXkgaW4gaXRzZWxmIGJlIGEgYnVnIHRob3VnaC4gKi8KKworCWhjID0gdXJiLT5kZXYtPmJ1cy0+aGNwcml2OworCXVyYl9wcml2ID0gKGV0cmF4X3VyYl9wcml2X3QgKil1cmItPmhjcHJpdjsKKwllcGlkID0gdXJiX3ByaXYtPmVwaWQ7CisKKwkvKiBTZXQgdGhlIHVyYiBzdGF0dXMgKHN5bmNocm9ub3VzIHVubGluaykuICovCisJdXJiLT5zdGF0dXMgPSAtRU5PRU5UOworCXVyYl9wcml2LT51cmJfc3RhdGUgPSBVTkxJTks7CisKKwlpZiAodXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSA9PSBoYy0+cmguZGV2bnVtKSB7CisJCWludCByZXQ7CisJCXJldCA9IGV0cmF4X3JoX3VubGlua191cmIodXJiKTsKKwkJREJGRVhJVDsKKwkJcmVzdG9yZV9mbGFncyhmbGFncyk7CisJCXJldHVybiByZXQ7CisKKwl9IGVsc2UgaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfQlVMSykgeworCisJCWRiZ19idWxrKCJVbmxpbmsgb2YgYnVsayB1cmIgKDB4JWx4KSIsICh1bnNpZ25lZCBsb25nKXVyYik7CisKKwkJaWYgKFR4QnVsa0VQTGlzdFtlcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkgeworCQkJLyogVGhlIEVQIHdhcyBlbmFibGVkLCBkaXNhYmxlIGl0IGFuZCB3YWl0LiAqLworCQkJVHhCdWxrRVBMaXN0W2VwaWRdLmNvbW1hbmQgJj0gfklPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSk7CisKKwkJCS8qIEFoLCB0aGUgbHV4dXJ5IG9mIGJ1c3ktd2FpdC4gKi8KKwkJCXdoaWxlICgqUl9ETUFfQ0g4X1NVQjBfRVAgPT0gdmlydF90b19waHlzKCZUeEJ1bGtFUExpc3RbZXBpZF0pKTsKKwkJfQorCQkvKiBLaWNraW5nIGR1bW15IGxpc3Qgb3V0IG9mIHRoZSBwYXJ0eS4gKi8KKwkJVHhCdWxrRVBMaXN0W2VwaWRdLm5leHQgPSB2aXJ0X3RvX3BoeXMoJlR4QnVsa0VQTGlzdFsoZXBpZCArIDEpICUgTkJSX09GX0VQSURTXSk7CisKKwl9IGVsc2UgaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfQ09OVFJPTCkgeworCisJCWRiZ19jdHJsKCJVbmxpbmsgb2YgY3RybCB1cmIgKDB4JWx4KSIsICh1bnNpZ25lZCBsb25nKXVyYik7CisKKwkJaWYgKFR4Q3RybEVQTGlzdFtlcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkgeworCQkJLyogVGhlIEVQIHdhcyBlbmFibGVkLCBkaXNhYmxlIGl0IGFuZCB3YWl0LiAqLworCQkJVHhDdHJsRVBMaXN0W2VwaWRdLmNvbW1hbmQgJj0gfklPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSk7CisKKwkJCS8qIEFoLCB0aGUgbHV4dXJ5IG9mIGJ1c3ktd2FpdC4gKi8KKwkJCXdoaWxlICgqUl9ETUFfQ0g4X1NVQjFfRVAgPT0gdmlydF90b19waHlzKCZUeEN0cmxFUExpc3RbZXBpZF0pKTsKKwkJfQorCisJfSBlbHNlIGlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0lOVEVSUlVQVCkgeworCisJCWRiZ19pbnRyKCJVbmxpbmsgb2YgaW50ciB1cmIgKDB4JWx4KSIsICh1bnNpZ25lZCBsb25nKXVyYik7CisKKwkJLyogU2VwYXJhdGUgZnVuY3Rpb24gYmVjYXVzZSBpdCdzIGEgdGFkIG1vcmUgY29tcGxpY2F0ZWQuICovCisJCWV0cmF4X3VzYl91bmxpbmtfaW50cl91cmIodXJiKTsKKworCX0gZWxzZSBpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JU09DSFJPTk9VUykgeworCisJCWRiZ19pc29jKCJVbmxpbmsgb2YgaXNvYyB1cmIgKDB4JWx4KSIsICh1bnNpZ25lZCBsb25nKXVyYik7CisKKwkJaWYgKFR4SXNvY0VQTGlzdFtlcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkgeworCQkJLyogVGhlIEVQIHdhcyBlbmFibGVkLCBkaXNhYmxlIGl0IGFuZCB3YWl0LiAqLworCQkJVHhJc29jRVBMaXN0W2VwaWRdLmNvbW1hbmQgJj0gfklPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSk7CisKKwkJCS8qIEFoLCB0aGUgbHV4dXJ5IG9mIGJ1c3ktd2FpdC4gKi8KKwkJCXdoaWxlICgqUl9ETUFfQ0g4X1NVQjNfRVAgPT0gdmlydF90b19waHlzKCZUeElzb2NFUExpc3RbZXBpZF0pKTsKKwkJfQorCX0KKworCS8qIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgdXJiIGZyb20gdGhlIHVyYiBsaXN0ICpiZWZvcmUqIHJlbW92aW5nIGl0cyBTQgorCSAgIGRlc2NyaXB0b3JzLiAoVGhpcyBtZWFucyB0aGF0IHRoZSBpc29jIGVvZiBoYW5kbGVyIG1pZ2h0IGdldCBhIG51bGwgdXJiIHdoZW4gd2UKKwkgICBhcmUgdW5saW5raW5nIHRoZSBsYXN0IHVyYi4pICovCisKKwlpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9CVUxLKSB7CisKKwkJdXJiX2xpc3RfZGVsKHVyYiwgZXBpZCk7CisJCVR4QnVsa0VQTGlzdFtlcGlkXS5zdWIgPSAwOworCQlldHJheF9yZW1vdmVfZnJvbV9zYl9saXN0KHVyYik7CisKKwl9IGVsc2UgaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfQ09OVFJPTCkgeworCisJCXVyYl9saXN0X2RlbCh1cmIsIGVwaWQpOworCQlUeEN0cmxFUExpc3RbZXBpZF0uc3ViID0gMDsKKwkJZXRyYXhfcmVtb3ZlX2Zyb21fc2JfbGlzdCh1cmIpOworCisJfSBlbHNlIGlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0lOVEVSUlVQVCkgeworCisJCXVyYl9saXN0X2RlbCh1cmIsIGVwaWQpOworCQkvKiBTYW5pdHkgY2hlY2sgKHNob3VsZCBuZXZlciBoYXBwZW4pLiAqLworCQlhc3NlcnQodXJiX2xpc3RfZW1wdHkoZXBpZCkpOworCisJCS8qIFJlbGVhc2UgYWxsb2NhdGVkIGJhbmR3aWR0aC4gKi8KKwkJdXNiX3JlbGVhc2VfYmFuZHdpZHRoKHVyYi0+ZGV2LCB1cmIsIDApOworCisJfSBlbHNlIGlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0lTT0NIUk9OT1VTKSB7CisKKwkJaWYgKHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpIHsKKworCQkJVVNCX1NCX0Rlc2NfdCAqaXRlcl9zYiwgKnByZXZfc2IsICpuZXh0X3NiOworCisJCQlpZiAoX191cmJfbGlzdF9lbnRyeSh1cmIsIGVwaWQpKSB7CisKKwkJCQl1cmJfbGlzdF9kZWwodXJiLCBlcGlkKTsKKwkJCQlpdGVyX3NiID0gVHhJc29jRVBMaXN0W2VwaWRdLnN1YiA/IHBoeXNfdG9fdmlydChUeElzb2NFUExpc3RbZXBpZF0uc3ViKSA6IDA7CisJCQkJcHJldl9zYiA9IDA7CisJCQkJd2hpbGUgKGl0ZXJfc2IgJiYgKGl0ZXJfc2IgIT0gdXJiX3ByaXYtPmZpcnN0X3NiKSkgeworCQkJCQlwcmV2X3NiID0gaXRlcl9zYjsKKwkJCQkJaXRlcl9zYiA9IGl0ZXJfc2ItPm5leHQgPyBwaHlzX3RvX3ZpcnQoaXRlcl9zYi0+bmV4dCkgOiAwOworCQkJCX0KKworCQkJCWlmIChpdGVyX3NiID09IDApIHsKKwkJCQkJLyogVW5saW5rIG9mIHRoZSBVUkIgY3VycmVudGx5IGJlaW5nIHRyYW5zbWl0dGVkLiAqLworCQkJCQlwcmV2X3NiID0gMDsKKwkJCQkJaXRlcl9zYiA9IFR4SXNvY0VQTGlzdFtlcGlkXS5zdWIgPyBwaHlzX3RvX3ZpcnQoVHhJc29jRVBMaXN0W2VwaWRdLnN1YikgOiAwOworCQkJCX0KKworCQkJCXdoaWxlIChpdGVyX3NiICYmIChpdGVyX3NiICE9IHVyYl9wcml2LT5sYXN0X3NiKSkgeworCQkJCQlpdGVyX3NiID0gaXRlcl9zYi0+bmV4dCA/IHBoeXNfdG9fdmlydChpdGVyX3NiLT5uZXh0KSA6IDA7CisJCQkJfQorCQkJCWlmIChpdGVyX3NiKSB7CisJCQkJCW5leHRfc2IgPSBpdGVyX3NiLT5uZXh0ID8gcGh5c190b192aXJ0KGl0ZXJfc2ItPm5leHQpIDogMDsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgRE1BIGhhcyBjb21wbGV0ZWQKKwkJCQkJICAgcHJvY2Vzc2luZyB0aGUgU0IgbGlzdCBmb3IgdGhpcyBFUCB3aGlsZSBpbnRlcnJ1cHRzCisJCQkJCSAgIGFyZSBkaXNhYmxlZC4gKi8KKwkJCQkJZGJnX2lzb2MoIklzb2MgdXJiIG5vdCBmb3VuZCwgYWxyZWFkeSBzZW50PyIpOworCQkJCQluZXh0X3NiID0gMDsKKwkJCQl9CisJCQkJaWYgKHByZXZfc2IpIHsKKwkJCQkJcHJldl9zYi0+bmV4dCA9IG5leHRfc2IgPyB2aXJ0X3RvX3BoeXMobmV4dF9zYikgOiAwOworCQkJCX0gZWxzZSB7CisJCQkJCVR4SXNvY0VQTGlzdFtlcGlkXS5zdWIgPSBuZXh0X3NiID8gdmlydF90b19waHlzKG5leHRfc2IpIDogMDsKKwkJCQl9CisKKwkJCQlldHJheF9yZW1vdmVfZnJvbV9zYl9saXN0KHVyYik7CisJCQkJaWYgKHVyYl9saXN0X2VtcHR5KGVwaWQpKSB7CisJCQkJCVR4SXNvY0VQTGlzdFtlcGlkXS5zdWIgPSAwOworCQkJCQlkYmdfaXNvYygiTGFzdCBpc29jIG91dCB1cmIgZXBpZCAlZCIsIGVwaWQpOworCQkJCX0gZWxzZSBpZiAobmV4dF9zYiB8fCBwcmV2X3NiKSB7CisJCQkJCWRiZ19pc29jKCJSZS1lbmFibGUgaXNvYyBvdXQgZXBpZCAlZCIsIGVwaWQpOworCisJCQkJCVR4SXNvY0VQTGlzdFtlcGlkXS5od19sZW4gPSAwOworCQkJCQlUeElzb2NFUExpc3RbZXBpZF0uY29tbWFuZCB8PSBJT19TVEFURShVU0JfRVBfY29tbWFuZCwgZW5hYmxlLCB5ZXMpOworCQkJCX0gZWxzZSB7CisJCQkJCVR4SXNvY0VQTGlzdFtlcGlkXS5zdWIgPSAwOworCQkJCQlkYmdfaXNvYygiVVJCIGxpc3Qgbm9uLWVtcHR5IGFuZCBubyBTQiBsaXN0LCBFUCBkaXNhYmxlZCIpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJZGJnX2lzb2MoIlVyYiAweCVwIG5vdCBmb3VuZCwgY29tcGxldGVkIGFscmVhZHk/IiwgdXJiKTsKKwkJCX0KKwkJfSBlbHNlIHsKKworCQkJdXJiX2xpc3RfZGVsKHVyYiwgZXBpZCk7CisKKwkJCS8qIEZvciBpbiB0cmFmZmljIHRoZXJlIGlzIG9ubHkgb25lIFNCIGRlc2NyaXB0b3IgZm9yIGVhY2ggRVAgZXZlbgorCQkJICAgdGhvdWdoIHRoZXJlIG1heSBiZSBzZXZlcmFsIHVyYnMgKGFsbCB1cmJzIHBvaW50IGF0IHRoZSBzYW1lIFNCKS4gKi8KKwkJCWlmICh1cmJfbGlzdF9lbXB0eShlcGlkKSkgeworCQkJCS8qIE5vIG1vcmUgdXJicywgcmVtb3ZlIHRoZSBTQi4gKi8KKwkJCQlUeElzb2NFUExpc3RbZXBpZF0uc3ViID0gMDsKKwkJCQlldHJheF9yZW1vdmVfZnJvbV9zYl9saXN0KHVyYik7CisJCQl9IGVsc2UgeworCQkJCVR4SXNvY0VQTGlzdFtlcGlkXS5od19sZW4gPSAwOworCQkJCVR4SXNvY0VQTGlzdFtlcGlkXS5jb21tYW5kIHw9IElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlbmFibGUsIHllcyk7CisJCQl9CisJCX0KKwkJLyogUmVsZWFzZSBhbGxvY2F0ZWQgYmFuZHdpZHRoLiAqLworCQl1c2JfcmVsZWFzZV9iYW5kd2lkdGgodXJiLT5kZXYsIHVyYiwgMSk7CisJfQorCS8qIEZyZWUgdGhlIGVwaWQgaWYgdXJiIGxpc3QgaXMgZW1wdHkuICovCisJaWYgKHVyYl9saXN0X2VtcHR5KGVwaWQpKSB7CisJCWV0cmF4X3VzYl9mcmVlX2VwaWQoZXBpZCk7CisJfQorCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCisJLyogTXVzdCBiZSBkb25lIGJlZm9yZSBjYWxsaW5nIGNvbXBsZXRpb24gaGFuZGxlci4gKi8KKwlrZnJlZSh1cmJfcHJpdik7CisJdXJiLT5oY3ByaXYgPSAwOworCisJaWYgKHVyYi0+Y29tcGxldGUpIHsKKwkJdXJiLT5jb21wbGV0ZSh1cmIsIE5VTEwpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXRyYXhfdXNiX2dldF9mcmFtZV9udW1iZXIoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYpCit7CisJREJGRU5URVI7CisJREJGRVhJVDsKKwlyZXR1cm4gKCpSX1VTQl9GTV9OVU1CRVIgJiAweDdmZik7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBldHJheF91c2JfdHhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKnZoYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJREJGRU5URVI7CisKKwkvKiBUaGlzIGludGVycnVwdCBoYW5kbGVyIGNvdWxkIGJlIHVzZWQgd2hlbiB1bmxpbmtpbmcgRVAgZGVzY3JpcHRvcnMuICovCisKKwlpZiAoKlJfSVJRX1JFQUQyICYgSU9fTUFTSyhSX0lSUV9SRUFEMiwgZG1hOF9zdWIwX2Rlc2NyKSkgeworCQlVU0JfRVBfRGVzY190ICplcDsKKworCQkvL2RiZ19idWxrKCJkbWE4X3N1YjBfZGVzY3IgKEJVTEspIGludHIuIik7CisKKwkJLyogSXQgc2hvdWxkIGJlIHNhZmUgY2xlYXJpbmcgdGhlIGludGVycnVwdCBoZXJlLCBzaW5jZSB3ZSBkb24ndCBleHBlY3QgdG8gZ2V0IGEgbmV3CisJCSAgIG9uZSB1bnRpbCB3ZSByZXN0YXJ0IHRoZSBidWxrIGNoYW5uZWwuICovCisJCSpSX0RNQV9DSDhfU1VCMF9DTFJfSU5UUiA9IElPX1NUQVRFKFJfRE1BX0NIOF9TVUIwX0NMUl9JTlRSLCBjbHJfZGVzY3IsIGRvKTsKKworCQkvKiBXYWl0IHdoaWxlIHRoZSBETUEgaXMgcnVubmluZyAodGhvdWdoIHdlIGRvbid0IGV4cGVjdCBpdCB0byBiZSkuICovCisJCXdoaWxlICgqUl9ETUFfQ0g4X1NVQjBfQ01EICYgSU9fTUFTSyhSX0RNQV9DSDhfU1VCMF9DTUQsIGNtZCkpOworCisJCS8qIEFkdmFuY2UgdGhlIERNQSB0byB0aGUgbmV4dCBFUCBkZXNjcmlwdG9yLiAqLworCQllcCA9IChVU0JfRVBfRGVzY190ICopcGh5c190b192aXJ0KCpSX0RNQV9DSDhfU1VCMF9FUCk7CisKKwkJLy9kYmdfYnVsaygiZGVzY3IgaW50cjogRE1BIGlzIGF0IDB4JWx4IiwgKHVuc2lnbmVkIGxvbmcpZXApOworCisJCS8qIGVwLT5uZXh0IGlzIGFscmVhZHkgYSBwaHlzaWNhbCBhZGRyZXNzOyBubyBuZWVkIGZvciBhIHZpcnRfdG9fcGh5cy4gKi8KKwkJKlJfRE1BX0NIOF9TVUIwX0VQID0gZXAtPm5leHQ7CisKKwkJLyogU3RhcnQgdGhlIERNQSBidWxrIGNoYW5uZWwgYWdhaW4uICovCisJCSpSX0RNQV9DSDhfU1VCMF9DTUQgPSBJT19TVEFURShSX0RNQV9DSDhfU1VCMF9DTUQsIGNtZCwgc3RhcnQpOworCX0KKwlpZiAoKlJfSVJRX1JFQUQyICYgSU9fTUFTSyhSX0lSUV9SRUFEMiwgZG1hOF9zdWIxX2Rlc2NyKSkgeworCQlzdHJ1Y3QgdXJiICp1cmI7CisJCWludCBlcGlkOworCQlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdjsKKwkJdW5zaWduZWQgbG9uZyBpbnQgZmxhZ3M7CisKKwkJZGJnX2N0cmwoImRtYThfc3ViMV9kZXNjciAoQ1RSTCkgaW50ci4iKTsKKwkJKlJfRE1BX0NIOF9TVUIxX0NMUl9JTlRSID0gSU9fU1RBVEUoUl9ETUFfQ0g4X1NVQjFfQ0xSX0lOVFIsIGNscl9kZXNjciwgZG8pOworCisJCS8qIFRoZSBjb21wbGV0ZSBjYWxsYmFjayBnZXRzIGNhbGxlZCBzbyB3ZSBjbGkuICovCisJCXNhdmVfZmxhZ3MoZmxhZ3MpOworCQljbGkoKTsKKworCQlmb3IgKGVwaWQgPSAwOyBlcGlkIDwgTkJSX09GX0VQSURTIC0gMTsgZXBpZCsrKSB7CisJCQlpZiAoKFR4Q3RybEVQTGlzdFtlcGlkXS5zdWIgPT0gMCkgfHwKKwkJCSAgICAoZXBpZCA9PSBEVU1NWV9FUElEKSB8fAorCQkJICAgIChlcGlkID09IElOVkFMSURfRVBJRCkpIHsKKwkJCQkvKiBOb3RoaW5nIGhlcmUgdG8gc2VlLiAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBHZXQgdGhlIGZpcnN0IHVyYiAoaWYgYW55KS4gKi8KKwkJCXVyYiA9IHVyYl9saXN0X2ZpcnN0KGVwaWQpOworCisJCQlpZiAodXJiKSB7CisKKwkJCQkvKiBTYW5pdHkgY2hlY2suICovCisJCQkJYXNzZXJ0KHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfQ09OVFJPTCk7CisKKwkJCQl1cmJfcHJpdiA9IChldHJheF91cmJfcHJpdl90ICopdXJiLT5oY3ByaXY7CisJCQkJYXNzZXJ0KHVyYl9wcml2KTsKKworCQkJCWlmICh1cmJfcHJpdi0+dXJiX3N0YXRlID09IFdBSVRJTkdfRk9SX0RFU0NSX0lOVFIpIHsKKwkJCQkJYXNzZXJ0KCEoVHhDdHJsRVBMaXN0W3VyYl9wcml2LT5lcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkpOworCisJCQkJCWV0cmF4X3VzYl9jb21wbGV0ZV91cmIodXJiLCAwKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmVzdG9yZV9mbGFncyhmbGFncyk7CisJfQorCWlmICgqUl9JUlFfUkVBRDIgJiBJT19NQVNLKFJfSVJRX1JFQUQyLCBkbWE4X3N1YjJfZGVzY3IpKSB7CisJCWRiZ19pbnRyKCJkbWE4X3N1YjJfZGVzY3IgKElOVFIpIGludHIuIik7CisJCSpSX0RNQV9DSDhfU1VCMl9DTFJfSU5UUiA9IElPX1NUQVRFKFJfRE1BX0NIOF9TVUIyX0NMUl9JTlRSLCBjbHJfZGVzY3IsIGRvKTsKKwl9CisJaWYgKCpSX0lSUV9SRUFEMiAmIElPX01BU0soUl9JUlFfUkVBRDIsIGRtYThfc3ViM19kZXNjcikpIHsKKwkJc3RydWN0IHVyYiAqdXJiOworCQlpbnQgZXBpZDsKKwkJaW50IGVwaWRfZG9uZTsKKwkJZXRyYXhfdXJiX3ByaXZfdCAqdXJiX3ByaXY7CisJCVVTQl9TQl9EZXNjX3QgKnNiX2Rlc2M7CisKKwkJdXNiX2lzb2NfY29tcGxldGVfZGF0YV90ICpjb21wX2RhdGEgPSBOVUxMOworCisJCS8qIE9uZSBvciBtb3JlIGlzb2Mgb3V0IHRyYW5zZmVycyBhcmUgZG9uZS4gKi8KKwkJZGJnX2lzb2MoImRtYThfc3ViM19kZXNjciAoSVNPQykgaW50ci4iKTsKKworCQkvKiBGb3IgZWFjaCBpc29jIG91dCBFUCBzZWFyY2ggZm9yIHRoZSBmaXJzdCBzYl9kZXNjIHdpdGggdGhlIGludHIgZmxhZworCQkgICBzZXQuICBUaGlzIGRlc2NyaXB0b3IgbXVzdCBiZSB0aGUgbGFzdCBwYWNrZXQgZnJvbSBhbiBVUkIuICBUaGVuCisJCSAgIHRyYXZlcnNlIHRoZSBVUkIgbGlzdCBmb3IgdGhlIEVQIHVudGlsIHRoZSBVUkIgd2l0aCB1cmJfcHJpdi0+bGFzdF9zYgorCQkgICBtYXRjaGluZyB0aGUgaW50ci1tYXJrZWQgc2JfZGVzYyBpcyBmb3VuZC4gIEFsbCBVUkJzIGJlZm9yZSB0aGlzIGhhdmUKKwkJICAgYmVlbiBzZW50LgorCQkqLworCisJCWZvciAoZXBpZCA9IDA7IGVwaWQgPCBOQlJfT0ZfRVBJRFMgLSAxOyBlcGlkKyspIHsKKwkJCS8qIFNraXAgcGFzdCBlcGlkcyB3aXRoIG5vIFNCIGxpc3RzLCBlcGlkcyB1c2VkIGZvciBpbiB0cmFmZmljLAorCQkJICAgYW5kIHNwZWNpYWwgKGR1bW15LCBpbnZhbGlkKSBlcGlkcy4gKi8KKwkJCWlmICgoVHhJc29jRVBMaXN0W2VwaWRdLnN1YiA9PSAwKSB8fAorCQkJICAgICh0ZXN0X2JpdChlcGlkLCAodm9pZCAqKSZlcGlkX291dF90cmFmZmljKSA9PSAwKSB8fAorCQkJICAgIChlcGlkID09IERVTU1ZX0VQSUQpIHx8CisJCQkgICAgKGVwaWQgPT0gSU5WQUxJRF9FUElEKSkgeworCQkJCS8qIE5vdGhpbmcgaGVyZSB0byBzZWUuICovCisJCQkJY29udGludWU7CisJCQl9CisJCQlzYl9kZXNjID0gcGh5c190b192aXJ0KFR4SXNvY0VQTGlzdFtlcGlkXS5zdWIpOworCisJCQkvKiBGaW5kIHRoZSBsYXN0IGRlc2NyaXB0b3Igb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgVVJCIGZvciB0aGlzIGVwLgorCQkJICAgVGhpcyBpcyB0aGUgZmlyc3QgZGVzY3JpcHRvciBpbiB0aGUgc3ViIGxpc3QgbWFya2VkIGZvciBhIGRlc2NyaXB0b3IKKwkJCSAgIGludGVycnVwdC4gKi8KKwkJCXdoaWxlIChzYl9kZXNjICYmICFJT19FWFRSQUNUKFVTQl9TQl9jb21tYW5kLCBpbnRyLCBzYl9kZXNjLT5jb21tYW5kKSkgeworCQkJCXNiX2Rlc2MgPSBzYl9kZXNjLT5uZXh0ID8gcGh5c190b192aXJ0KHNiX2Rlc2MtPm5leHQpIDogMDsKKwkJCX0KKwkJCWFzc2VydChzYl9kZXNjKTsKKworCQkJZGJnX2lzb2MoIkNoZWNrIGVwaWQgJWQsIHN1YiAweCVwLCBTQiAweCVwIiwKKwkJCQkgZXBpZCwKKwkJCQkgcGh5c190b192aXJ0KFR4SXNvY0VQTGlzdFtlcGlkXS5zdWIpLAorCQkJCSBzYl9kZXNjKTsKKworCQkJZXBpZF9kb25lID0gMDsKKworCQkJLyogR2V0IHRoZSBmaXJzdCB1cmIgKGlmIGFueSkuICovCisJCQl1cmIgPSB1cmJfbGlzdF9maXJzdChlcGlkKTsKKwkJCWFzc2VydCh1cmIpOworCisJCQl3aGlsZSAodXJiICYmICFlcGlkX2RvbmUpIHsKKworCQkJCS8qIFNhbml0eSBjaGVjay4gKi8KKwkJCQlhc3NlcnQodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JU09DSFJPTk9VUyk7CisKKwkJCQlpZiAoIXVzYl9waXBlb3V0KHVyYi0+cGlwZSkpIHsKKwkJCQkJLyogZGVzY3IgaW50ZXJydXB0cyBhcmUgZ2VuZXJhdGVkIG9ubHkgZm9yIG91dCBwaXBlcy4gKi8KKwkJCQkJZXBpZF9kb25lID0gMTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJdXJiX3ByaXYgPSAoZXRyYXhfdXJiX3ByaXZfdCAqKXVyYi0+aGNwcml2OworCQkJCWFzc2VydCh1cmJfcHJpdik7CisKKwkJCQlpZiAoc2JfZGVzYyAhPSB1cmJfcHJpdi0+bGFzdF9zYikgeworCisJCQkJCS8qIFRoaXMgdXJiIGhhcyBiZWVuIHNlbnQuICovCisJCQkJCWRiZ19pc29jKCJvdXQgVVJCIDB4JXAgc2VudCIsIHVyYik7CisKKwkJCQkJdXJiX3ByaXYtPnVyYl9zdGF0ZSA9IFRSQU5TRkVSX0RPTkU7CisKKwkJCQl9IGVsc2UgaWYgKChzYl9kZXNjID09IHVyYl9wcml2LT5sYXN0X3NiKSAmJgorCQkJCQkgICAhKFR4SXNvY0VQTGlzdFtlcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkpIHsKKworCQkJCQlhc3NlcnQoKHNiX2Rlc2MtPmNvbW1hbmQgJiBJT19NQVNLKFVTQl9TQl9jb21tYW5kLCBlb2wpKSA9PSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW9sLCB5ZXMpKTsKKwkJCQkJYXNzZXJ0KHNiX2Rlc2MtPm5leHQgPT0gMCk7CisKKwkJCQkJZGJnX2lzb2MoIm91dCBVUkIgMHglcCBsYXN0IGluIGxpc3QsIGVwaWQgZGlzYWJsZWQiLCB1cmIpOworCQkJCQlUeElzb2NFUExpc3RbZXBpZF0uc3ViID0gMDsKKwkJCQkJVHhJc29jRVBMaXN0W2VwaWRdLmh3X2xlbiA9IDA7CisJCQkJCXVyYl9wcml2LT51cmJfc3RhdGUgPSBUUkFOU0ZFUl9ET05FOworCisJCQkJCWVwaWRfZG9uZSA9IDE7CisKKwkJCQl9IGVsc2UgeworCQkJCQllcGlkX2RvbmUgPSAxOworCQkJCX0KKwkJCQlpZiAoIWVwaWRfZG9uZSkgeworCQkJCQl1cmIgPSB1cmJfbGlzdF9uZXh0KHVyYiwgZXBpZCk7CisJCQkJfQorCQkJfQorCisJCX0KKworCQkqUl9ETUFfQ0g4X1NVQjNfQ0xSX0lOVFIgPSBJT19TVEFURShSX0RNQV9DSDhfU1VCM19DTFJfSU5UUiwgY2xyX2Rlc2NyLCBkbyk7CisKKwkJY29tcF9kYXRhID0gKHVzYl9pc29jX2NvbXBsZXRlX2RhdGFfdCopa21lbV9jYWNoZV9hbGxvYyhpc29jX2NvbXBsX2NhY2hlLCBTTEFCX0FUT01JQyk7CisJCWFzc2VydChjb21wX2RhdGEgIT0gTlVMTCk7CisKKyAgICAgICAgICAgICAgICBJTklUX1dPUksoJmNvbXBfZGF0YS0+dXNiX2JoLCBldHJheF91c2JfaXNvY19kZXNjcl9pbnRlcnJ1cHRfYm90dG9tX2hhbGYsIGNvbXBfZGF0YSk7CisgICAgICAgICAgICAgICAgc2NoZWR1bGVfd29yaygmY29tcF9kYXRhLT51c2JfYmgpOworCX0KKworCURCRkVYSVQ7CisgICAgICAgIHJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2lzb2NfZGVzY3JfaW50ZXJydXB0X2JvdHRvbV9oYWxmKHZvaWQgKmRhdGEpCit7CisJdXNiX2lzb2NfY29tcGxldGVfZGF0YV90ICpjb21wX2RhdGEgPSAodXNiX2lzb2NfY29tcGxldGVfZGF0YV90KilkYXRhOworCisJc3RydWN0IHVyYiAqdXJiOworCWludCBlcGlkOworCWludCBlcGlkX2RvbmU7CisJZXRyYXhfdXJiX3ByaXZfdCAqdXJiX3ByaXY7CisKKwlEQkZFTlRFUjsKKworCWRiZ19pc29jKCJkbWE4X3N1YjNfZGVzY3IgKElTT0MpIGJvdHRvbSBoYWxmLiIpOworCisJZm9yIChlcGlkID0gMDsgZXBpZCA8IE5CUl9PRl9FUElEUyAtIDE7IGVwaWQrKykgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNhdmVfZmxhZ3MoZmxhZ3MpOworCQljbGkoKTsKKworCQllcGlkX2RvbmUgPSAwOworCisJCS8qIFRoZSBkZXNjcmlwdG9yIGludGVycnVwdCBoYW5kbGVyIGhhcyBtYXJrZWQgYWxsIHRyYW5zbWl0dGVkIGlzb2NoLiBvdXQKKwkJICAgVVJCcyB3aXRoIFRSQU5TRkVSX0RPTkUuICBOb3cgd2UgdHJhdmVyc2UgYWxsIGVwaWRzIGFuZCBmb3IgYWxsIHRoYXQKKyAJCSAgIGhhdmUgaXNvY2guIG91dCB0cmFmZmljIHRyYXZlcnNlIGl0cyBVUkIgbGlzdCBhbmQgY29tcGxldGUgdGhlCisJCSAgIHRyYW5zbWl0dGVkIFVSQi4KKwkJKi8KKworCQl3aGlsZSAoIWVwaWRfZG9uZSkgeworCisJCQkvKiBHZXQgdGhlIGZpcnN0IHVyYiAoaWYgYW55KS4gKi8KKwkJCXVyYiA9IHVyYl9saXN0X2ZpcnN0KGVwaWQpOworCQkJaWYgKHVyYiA9PSAwKSB7CisJCQkJZXBpZF9kb25lID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpICE9IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJCQkJZXBpZF9kb25lID0gMTsKKwkJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmICghdXNiX3BpcGVvdXQodXJiLT5waXBlKSkgeworCQkJCS8qIGRlc2NyIGludGVycnVwdHMgYXJlIGdlbmVyYXRlZCBvbmx5IGZvciBvdXQgcGlwZXMuICovCisJCQkJZXBpZF9kb25lID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJZGJnX2lzb2MoIkNoZWNrIGVwaWQgJWQsIFNCIDB4JXAiLCBlcGlkLCAoY2hhciopVHhJc29jRVBMaXN0W2VwaWRdLnN1Yik7CisKKwkJCXVyYl9wcml2ID0gKGV0cmF4X3VyYl9wcml2X3QgKil1cmItPmhjcHJpdjsKKwkJCWFzc2VydCh1cmJfcHJpdik7CisKKwkJCWlmICh1cmJfcHJpdi0+dXJiX3N0YXRlID09IFRSQU5TRkVSX0RPTkUpIHsKKwkJCQlpbnQgaTsKKwkJCQlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqcGFja2V0OworCisJCQkJLyogVGhpcyB1cmIgaGFzIGJlZW4gc2VudC4gKi8KKwkJCQlkYmdfaXNvYygiQ29tcGxldGluZyBpc29jIG91dCBVUkIgMHglcCIsIHVyYik7CisKKwkJCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CisJCQkJCXBhY2tldCA9ICZ1cmItPmlzb19mcmFtZV9kZXNjW2ldOworCQkJCQlwYWNrZXQtPnN0YXR1cyA9IDA7CisJCQkJCXBhY2tldC0+YWN0dWFsX2xlbmd0aCA9IHBhY2tldC0+bGVuZ3RoOworCQkJCX0KKworCQkJCWV0cmF4X3VzYl9jb21wbGV0ZV9pc29jX3VyYih1cmIsIDApOworCisJCQkJaWYgKHVyYl9saXN0X2VtcHR5KGVwaWQpKSB7CisJCQkJCWV0cmF4X3VzYl9mcmVlX2VwaWQoZXBpZCk7CisJCQkJCWVwaWRfZG9uZSA9IDE7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQllcGlkX2RvbmUgPSAxOworCQkJfQorCQl9CisJCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCisJfQorCWttZW1fY2FjaGVfZnJlZShpc29jX2NvbXBsX2NhY2hlLCBjb21wX2RhdGEpOworCisJREJGRVhJVDsKK30KKworCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBldHJheF91c2JfcnhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKnZoYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVyYiAqdXJiOworCWV0cmF4X3VyYl9wcml2X3QgKnVyYl9wcml2OworCWludCBlcGlkID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogSXNvYyBkaWFnbm9zdGljcy4gKi8KKwlzdGF0aWMgaW50IGN1cnJfZm0gPSAwOworCXN0YXRpYyBpbnQgcHJldl9mbSA9IDA7CisKKwlEQkZFTlRFUjsKKworCS8qIENsZWFyIHRoaXMgaW50ZXJydXB0LiAqLworCSpSX0RNQV9DSDlfQ0xSX0lOVFIgPSBJT19TVEFURShSX0RNQV9DSDlfQ0xSX0lOVFIsIGNscl9lb3AsIGRvKTsKKworCS8qIE5vdGUgdGhhdCB0aGlzIHdoaWxlIGxvb3AgYXNzdW1lcyB0aGF0IGFsbCBwYWNrZXRzIHNwYW4gb25seQorCSAgIG9uZSByeCBkZXNjcmlwdG9yLiAqLworCisJLyogVGhlIHJlYXNvbiB3ZSBjbGkgaGVyZSBpcyB0aGF0IHdlIGNhbGwgdGhlIGRyaXZlcidzIGNhbGxiYWNrIGZ1bmN0aW9ucy4gKi8KKwlzYXZlX2ZsYWdzKGZsYWdzKTsKKwljbGkoKTsKKworCXdoaWxlIChteU5leHRSeERlc2MtPnN0YXR1cyAmIElPX01BU0soVVNCX0lOX3N0YXR1cywgZW9wKSkgeworCisJCWVwaWQgPSBJT19FWFRSQUNUKFVTQl9JTl9zdGF0dXMsIGVwaWQsIG15TmV4dFJ4RGVzYy0+c3RhdHVzKTsKKwkJdXJiID0gdXJiX2xpc3RfZmlyc3QoZXBpZCk7CisKKwkJLy9wcmludGsoImVvcCBmb3IgZXBpZCAlZCwgZmlyc3QgdXJiIDB4JWx4XG4iLCBlcGlkLCAodW5zaWduZWQgbG9uZyl1cmIpOworCisJCWlmICghdXJiKSB7CisJCQllcnIoIk5vIHVyYiBmb3IgZXBpZCAlZCBpbiByeCBpbnRlcnJ1cHQiLCBlcGlkKTsKKwkJCV9fZHVtcF9lcHRfZGF0YShlcGlkKTsKKwkJCWdvdG8gc2tpcF9vdXQ7CisJCX0KKworCQkvKiBOb3RlIHRoYXQgd2UgY2Fubm90IGluZGVzY3JpbWluYXRlbHkgYXNzZXJ0KHVzYl9waXBlaW4odXJiLT5waXBlKSkgc2luY2UKKwkJICAgY3RybCBwaXBlcyBhcmUgbm90LiAqLworCisJCWlmIChteU5leHRSeERlc2MtPnN0YXR1cyAmIElPX01BU0soVVNCX0lOX3N0YXR1cywgZXJyb3IpKSB7CisJCQlfX3UzMiByX3VzYl9lcHRfZGF0YTsKKwkJCWludCBub19lcnJvciA9IDA7CisKKwkJCWFzc2VydCh0ZXN0X2JpdChlcGlkLCAodm9pZCAqKSZlcGlkX3VzYWdlX2JpdG1hc2spKTsKKworCQkJKlJfVVNCX0VQVF9JTkRFWCA9IElPX0ZJRUxEKFJfVVNCX0VQVF9JTkRFWCwgdmFsdWUsIGVwaWQpOworCQkJbm9wKCk7CisJCQlpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JU09DSFJPTk9VUykgeworCQkJCXJfdXNiX2VwdF9kYXRhID0gKlJfVVNCX0VQVF9EQVRBX0lTTzsKKworCQkJCWlmICgocl91c2JfZXB0X2RhdGEgJiBJT19NQVNLKFJfVVNCX0VQVF9EQVRBX0lTTywgdmFsaWQpKSAmJgorCQkJCSAgICAoSU9fRVhUUkFDVChSX1VTQl9FUFRfREFUQV9JU08sIGVycm9yX2NvZGUsIHJfdXNiX2VwdF9kYXRhKSA9PSAwKSAmJgorCQkJCSAgICAobXlOZXh0UnhEZXNjLT5zdGF0dXMgJiBJT19NQVNLKFVTQl9JTl9zdGF0dXMsIG5vZGF0YSkpKSB7CisJCQkJCS8qIE5vdCBhbiBlcnJvciwganVzdCBhIGZhaWx1cmUgdG8gcmVjZWl2ZSBhbiBleHBlY3RlZCBpc28KKwkJCQkJICAgaW4gcGFja2V0IGluIHRoaXMgZnJhbWUuICBUaGlzIGlzIG5vdCBkb2N1bWVudGVkCisJCQkJCSAgIGluIHRoZSBkZXNpZ25lcnMgcmVmZXJlbmNlLgorCQkJCQkqLworCQkJCQlub19lcnJvcisrOworCQkJCX0gZWxzZSB7CisJCQkJCXdhcm4oIlJfVVNCX0VQVF9EQVRBX0lTTyBmb3IgZXBpZCAlZCA9IDB4JXgiLCBlcGlkLCByX3VzYl9lcHRfZGF0YSk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlyX3VzYl9lcHRfZGF0YSA9ICpSX1VTQl9FUFRfREFUQTsKKwkJCQl3YXJuKCJSX1VTQl9FUFRfREFUQSBmb3IgZXBpZCAlZCA9IDB4JXgiLCBlcGlkLCByX3VzYl9lcHRfZGF0YSk7CisJCQl9CisKKwkJCWlmICghbm9fZXJyb3IpeworCQkJCXdhcm4oImVycm9yIGluIHJ4IGRlc2MtPnN0YXR1cywgZXBpZCAlZCwgZmlyc3QgdXJiID0gMHglbHgiLAorCQkJCSAgICAgZXBpZCwgKHVuc2lnbmVkIGxvbmcpdXJiKTsKKwkJCQlfX2R1bXBfaW5fZGVzYyhteU5leHRSeERlc2MpOworCisJCQkJd2FybigiUl9VU0JfU1RBVFVTID0gMHgleCIsICpSX1VTQl9TVEFUVVMpOworCisJCQkJLyogQ2hlY2sgdGhhdCBlcHQgd2FzIGRpc2FibGVkIHdoZW4gZXJyb3Igb2NjdXJyZWQuICovCisJCQkJc3dpdGNoICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSkgeworCQkJCWNhc2UgUElQRV9CVUxLOgorCQkJCQlhc3NlcnQoIShUeEJ1bGtFUExpc3RbZXBpZF0uY29tbWFuZCAmIElPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSkpKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBQSVBFX0NPTlRST0w6CisJCQkJCWFzc2VydCghKFR4Q3RybEVQTGlzdFtlcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFBJUEVfSU5URVJSVVBUOgorCQkJCQlhc3NlcnQoIShUeEludHJFUExpc3RbZXBpZF0uY29tbWFuZCAmIElPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSkpKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQkJCQlhc3NlcnQoIShUeElzb2NFUExpc3RbZXBpZF0uY29tbWFuZCAmIElPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSkpKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJd2FybigiZXRyYXhfdXNiX3J4X2ludGVycnVwdDogYmFkIHBpcGV0eXBlICVkIGluIHVyYiAweCVwIiwKKwkJCQkJICAgICB1c2JfcGlwZXR5cGUodXJiLT5waXBlKSwKKwkJCQkJICAgICB1cmIpOworCQkJCX0KKwkJCQlldHJheF91c2JfY29tcGxldGVfdXJiKHVyYiwgLUVQUk9UTyk7CisJCQkJZ290byBza2lwX291dDsKKwkJCX0KKwkJfQorCisJCXVyYl9wcml2ID0gKGV0cmF4X3VyYl9wcml2X3QgKil1cmItPmhjcHJpdjsKKwkJYXNzZXJ0KHVyYl9wcml2KTsKKworCQlpZiAoKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfQlVMSykgfHwKKwkJICAgICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0NPTlRST0wpIHx8CisJCSAgICAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JTlRFUlJVUFQpKSB7CisKKwkJCWlmIChteU5leHRSeERlc2MtPnN0YXR1cyAmIElPX01BU0soVVNCX0lOX3N0YXR1cywgbm9kYXRhKSkgeworCQkJCS8qIFdlIGdldCBub2RhdGEgZm9yIGVtcHR5IGRhdGEgdHJhbnNhY3Rpb25zLCBhbmQgdGhlIHJ4IGRlc2NyaXB0b3IncworCQkJCSAgIGh3X2xlbiBmaWVsZCBpcyBub3QgdmFsaWQgaW4gdGhhdCBjYXNlLiBObyBkYXRhIHRvIGNvcHkgaW4gb3RoZXIKKwkJCQkgICB3b3Jkcy4gKi8KKwkJCX0gZWxzZSB7CisJCQkJLyogTWFrZSBzdXJlIHRoZSBkYXRhIGZpdHMgaW4gdGhlIGJ1ZmZlci4gKi8KKwkJCQlhc3NlcnQodXJiX3ByaXYtPnJ4X29mZnNldCArIG15TmV4dFJ4RGVzYy0+aHdfbGVuCisJCQkJICAgICAgIDw9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisKKwkJCQltZW1jcHkodXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmJfcHJpdi0+cnhfb2Zmc2V0LAorCQkJCSAgICAgICBwaHlzX3RvX3ZpcnQobXlOZXh0UnhEZXNjLT5idWYpLCBteU5leHRSeERlc2MtPmh3X2xlbik7CisJCQkJdXJiX3ByaXYtPnJ4X29mZnNldCArPSBteU5leHRSeERlc2MtPmh3X2xlbjsKKwkJCX0KKworCQkJaWYgKG15TmV4dFJ4RGVzYy0+c3RhdHVzICYgSU9fTUFTSyhVU0JfSU5fc3RhdHVzLCBlb3QpKSB7CisJCQkJaWYgKCh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0NPTlRST0wpICYmCisJCQkJICAgICgoVHhDdHJsRVBMaXN0W3VyYl9wcml2LT5lcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkgPT0KKwkJCQkgICAgIElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlbmFibGUsIHllcykpKSB7CisJCQkJCS8qIFRoZSBFUCBpcyBzdGlsbCBlbmFibGVkLCBzbyB0aGUgT1VUIHBhY2tldCB1c2VkIHRvIGFjaworCQkJCQkgICB0aGUgaW4gZGF0YSBpcyBwcm9iYWJseSBub3QgcHJvY2Vzc2VkIHlldC4gIElmIHRoZSBFUAorCQkJCQkgICBzdWIgcG9pbnRlciBoYXMgbm90IG1vdmVkIGJleW9uZCB1cmJfcHJpdi0+bGFzdF9zYiBtYXJrCisJCQkJCSAgIGl0IGZvciBhIGRlc2NyaXB0b3IgaW50ZXJydXB0IGFuZCBjb21wbGV0ZSB0aGUgdXJiIGluCisJCQkJCSAgIHRoZSBkZXNjcmlwdG9yIGludGVycnVwdCBoYW5kbGVyLgorCQkJCQkqLworCQkJCQlVU0JfU0JfRGVzY190ICpzdWIgPSBUeEN0cmxFUExpc3RbdXJiX3ByaXYtPmVwaWRdLnN1YiA/IHBoeXNfdG9fdmlydChUeEN0cmxFUExpc3RbdXJiX3ByaXYtPmVwaWRdLnN1YikgOiAwOworCisJCQkJCXdoaWxlICgoc3ViICE9IE5VTEwpICYmIChzdWIgIT0gdXJiX3ByaXYtPmxhc3Rfc2IpKSB7CisJCQkJCQlzdWIgPSBzdWItPm5leHQgPyBwaHlzX3RvX3ZpcnQoc3ViLT5uZXh0KSA6IDA7CisJCQkJCX0KKwkJCQkJaWYgKHN1YiAhPSBOVUxMKSB7CisJCQkJCQkvKiBUaGUgdXJiIGhhcyBub3QgYmVlbiBmdWxseSBwcm9jZXNzZWQuICovCisJCQkJCQl1cmJfcHJpdi0+dXJiX3N0YXRlID0gV0FJVElOR19GT1JfREVTQ1JfSU5UUjsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXdhcm4oIihDVFJMKSBlcGlkIGVuYWJsZWQgYW5kIHVyYiAoMHglcCkgcHJvY2Vzc2VkLCBlcC0+c3ViPTB4JXAiLCB1cmIsIChjaGFyKilUeEN0cmxFUExpc3RbdXJiX3ByaXYtPmVwaWRdLnN1Yik7CisJCQkJCQlldHJheF91c2JfY29tcGxldGVfdXJiKHVyYiwgMCk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlldHJheF91c2JfY29tcGxldGVfdXJiKHVyYiwgMCk7CisJCQkJfQorCQkJfQorCisJCX0gZWxzZSBpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JU09DSFJPTk9VUykgeworCisJCQlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqcGFja2V0OworCisJCQlpZiAodXJiX3ByaXYtPnVyYl9zdGF0ZSA9PSBVTkxJTkspIHsKKwkJCQlpbmZvKCJJZ25vcmluZyByeCBkYXRhIGZvciB1cmIgYmVpbmcgdW5saW5rZWQuIik7CisJCQkJZ290byBza2lwX291dDsKKwkJCX0gZWxzZSBpZiAodXJiX3ByaXYtPnVyYl9zdGF0ZSA9PSBOT1RfU1RBUlRFRCkgeworCQkJCWluZm8oIldoYXQ/IEdvdCByeCBkYXRhIGZvciB1cmIgdGhhdCBpc24ndCBzdGFydGVkPyIpOworCQkJCWdvdG8gc2tpcF9vdXQ7CisJCQl9CisKKwkJCXBhY2tldCA9ICZ1cmItPmlzb19mcmFtZV9kZXNjW3VyYl9wcml2LT5pc29jX3BhY2tldF9jb3VudGVyXTsKKwkJCXBhY2tldC0+c3RhdHVzID0gMDsKKworCQkJaWYgKG15TmV4dFJ4RGVzYy0+c3RhdHVzICYgSU9fTUFTSyhVU0JfSU5fc3RhdHVzLCBub2RhdGEpKSB7CisJCQkJLyogV2UgZ2V0IG5vZGF0YSBmb3IgZW1wdHkgZGF0YSB0cmFuc2FjdGlvbnMsIGFuZCB0aGUgcnggZGVzY3JpcHRvcidzCisJCQkJICAgaHdfbGVuIGZpZWxkIGlzIG5vdCB2YWxpZCBpbiB0aGF0IGNhc2UuIFdlIGNvcHkgMCBieXRlcyBob3dldmVyIHRvCisJCQkJICAgc3RheSBpbiBzeW5jaC4gKi8KKwkJCQlwYWNrZXQtPmFjdHVhbF9sZW5ndGggPSAwOworCQkJfSBlbHNlIHsKKwkJCQlwYWNrZXQtPmFjdHVhbF9sZW5ndGggPSBteU5leHRSeERlc2MtPmh3X2xlbjsKKwkJCQkvKiBNYWtlIHN1cmUgdGhlIGRhdGEgZml0cyBpbiB0aGUgYnVmZmVyLiAqLworCQkJCWFzc2VydChwYWNrZXQtPmFjdHVhbF9sZW5ndGggPD0gcGFja2V0LT5sZW5ndGgpOworCQkJCW1lbWNweSh1cmItPnRyYW5zZmVyX2J1ZmZlciArIHBhY2tldC0+b2Zmc2V0LAorCQkJCSAgICAgICBwaHlzX3RvX3ZpcnQobXlOZXh0UnhEZXNjLT5idWYpLCBwYWNrZXQtPmFjdHVhbF9sZW5ndGgpOworCQkJfQorCisJCQkvKiBJbmNyZW1lbnQgdGhlIHBhY2tldCBjb3VudGVyLiAqLworCQkJdXJiX3ByaXYtPmlzb2NfcGFja2V0X2NvdW50ZXIrKzsKKworCQkJLyogTm90ZSB0aGF0IHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGVvdCBmaWVsZCBpbiB0aGUgcnggZGVzY3JpcHRvcidzIHN0YXR1cy4KKwkJCSAgIEl0IHdpbGwgYWx3YXlzIGJlIHNldCBmb3IgaXNvYyB0cmFmZmljLiAqLworCQkJaWYgKHVyYi0+bnVtYmVyX29mX3BhY2tldHMgPT0gdXJiX3ByaXYtPmlzb2NfcGFja2V0X2NvdW50ZXIpIHsKKworCQkJCS8qIE91dC1vZi1zeW5jaCBkaWFnbm9zdGljcy4gKi8KKwkJCQljdXJyX2ZtID0gKCpSX1VTQl9GTV9OVU1CRVIgJiAweDdmZik7CisJCQkJaWYgKCgocHJldl9mbSArIHVyYl9wcml2LT5pc29jX3BhY2tldF9jb3VudGVyKSAlICgweDdmZiArIDEpKSAhPSBjdXJyX2ZtKSB7CisJCQkJCS8qIFRoaXMgdGVzdCBpcyB3cm9uZywgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBpc29jCisJCQkJCSAgIGluIGVuZHBvaW50IGFjdGl2ZSBpdCB3aWxsIGFsd2F5cyBjYWxjdWxhdGUgd3JvbmcKKwkJCQkJICAgc2luY2UgcHJldl9mbSBpcyBzaGFyZWQgYnkgYWxsIGVuZHBvaW50cy4KKworCQkJCQkgICBGSVhNRSBNYWtlIHRoaXMgY2hlY2sgcGVyIFVSQiB1c2luZyB1cmItPnN0YXJ0X2ZyYW1lLgorCQkJCQkqLworCQkJCQlkYmdfaXNvYygiT3V0IG9mIHN5bmNoPyBQcmV2aW91cyBmcmFtZSA9ICVkLCBjdXJyZW50IGZyYW1lID0gJWQiLAorCQkJCQkJIHByZXZfZm0sIGN1cnJfZm0pOworCisJCQkJfQorCQkJCXByZXZfZm0gPSBjdXJyX2ZtOworCisJCQkJLyogQ29tcGxldGUgdGhlIHVyYiB3aXRoIHN0YXR1cyBPSy4gKi8KKwkJCQlldHJheF91c2JfY29tcGxldGVfaXNvY191cmIodXJiLCAwKTsKKwkJCX0KKwkJfQorCisJc2tpcF9vdXQ6CisKKwkJLyogRE1BIElOIGNhY2hlIGJ1Zy4gRmx1c2ggdGhlIERNQSBJTiBidWZmZXIgZnJvbSB0aGUgY2FjaGUuIChzdHJ1Y3QgZXRyYXhfZG1hX2Rlc2NyCisJCSAgIGhhcyB0aGUgc2FtZSBsYXlvdXQgYXMgVVNCX0lOX0Rlc2MgZm9yIHRoZSByZWxldmFudCBmaWVsZHMuKSAqLworCQlwcmVwYXJlX3J4X2Rlc2NyaXB0b3IoKHN0cnVjdCBldHJheF9kbWFfZGVzY3IqKW15TmV4dFJ4RGVzYyk7CisKKwkJbXlQcmV2UnhEZXNjID0gbXlOZXh0UnhEZXNjOworCQlteVByZXZSeERlc2MtPmNvbW1hbmQgfD0gSU9fTUFTSyhVU0JfSU5fY29tbWFuZCwgZW9sKTsKKwkJbXlMYXN0UnhEZXNjLT5jb21tYW5kICY9IH5JT19NQVNLKFVTQl9JTl9jb21tYW5kLCBlb2wpOworCQlteUxhc3RSeERlc2MgPSBteVByZXZSeERlc2M7CisKKwkJbXlOZXh0UnhEZXNjLT5zdGF0dXMgPSAwOworCQlteU5leHRSeERlc2MgPSBwaHlzX3RvX3ZpcnQobXlOZXh0UnhEZXNjLT5uZXh0KTsKKwl9CisKKwlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKworCURCRkVYSVQ7CisKKyAgICAgICAgcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisKKy8qIFRoaXMgZnVuY3Rpb24gd2lsbCB1bmxpbmsgdGhlIFNCIGRlc2NyaXB0b3JzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHVyYi4gKi8KK3N0YXRpYyBpbnQgZXRyYXhfcmVtb3ZlX2Zyb21fc2JfbGlzdChzdHJ1Y3QgdXJiICp1cmIpCit7CisJVVNCX1NCX0Rlc2NfdCAqbmV4dF9zYiwgKmZpcnN0X3NiLCAqbGFzdF9zYjsKKwlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdjsKKwlpbnQgaSA9IDA7CisKKwlEQkZFTlRFUjsKKworCXVyYl9wcml2ID0gKGV0cmF4X3VyYl9wcml2X3QgKil1cmItPmhjcHJpdjsKKwlhc3NlcnQodXJiX3ByaXYpOworCisJLyogSnVzdCBhIHNhbml0eSBjaGVjay4gU2luY2Ugd2UgZG9uJ3QgZmlkZGxlIHdpdGggdGhlIERNQSBsaXN0IHRoZSBFUCBkZXNjcmlwdG9yCisJICAgZG9lc24ndCByZWFsbHkgbmVlZCB0byBiZSBkaXNhYmxlZCwgaXQncyBqdXN0IHRoYXQgd2UgZXhwZWN0IGl0IHRvIGJlLiAqLworCWlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0JVTEspIHsKKwkJYXNzZXJ0KCEoVHhCdWxrRVBMaXN0W3VyYl9wcml2LT5lcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkpOworCX0gZWxzZSBpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9DT05UUk9MKSB7CisJCWFzc2VydCghKFR4Q3RybEVQTGlzdFt1cmJfcHJpdi0+ZXBpZF0uY29tbWFuZCAmIElPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSkpKTsKKwl9CisKKwlmaXJzdF9zYiA9IHVyYl9wcml2LT5maXJzdF9zYjsKKwlsYXN0X3NiID0gdXJiX3ByaXYtPmxhc3Rfc2I7CisKKwlhc3NlcnQoZmlyc3Rfc2IpOworCWFzc2VydChsYXN0X3NiKTsKKworCXdoaWxlIChmaXJzdF9zYiAhPSBsYXN0X3NiKSB7CisJCW5leHRfc2IgPSAoVVNCX1NCX0Rlc2NfdCAqKXBoeXNfdG9fdmlydChmaXJzdF9zYi0+bmV4dCk7CisJCWttZW1fY2FjaGVfZnJlZSh1c2JfZGVzY19jYWNoZSwgZmlyc3Rfc2IpOworCQlmaXJzdF9zYiA9IG5leHRfc2I7CisJCWkrKzsKKwl9CisJa21lbV9jYWNoZV9mcmVlKHVzYl9kZXNjX2NhY2hlLCBsYXN0X3NiKTsKKwlpKys7CisJZGJnX3NiKCIlZCBTQiBkZXNjcmlwdG9ycyBmcmVlZCIsIGkpOworCS8qIENvbXBhcmUgaSB3aXRoIHVyYi0+bnVtYmVyX29mX3BhY2tldHMgZm9yIElzb2MgdHJhZmZpYy4KKwkgICBTaG91bGQgYmUgc2FtZSB3aGVuIGNhbGxpbmcgdW5saW5rX3VyYiAqLworCisJREJGRVhJVDsKKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGV0cmF4X3VzYl9zdWJtaXRfYnVsa191cmIoc3RydWN0IHVyYiAqdXJiKQoreworCWludCBlcGlkOworCWludCBlbXB0eTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWV0cmF4X3VyYl9wcml2X3QgKnVyYl9wcml2OworCisJREJGRU5URVI7CisKKwkvKiBFcGlkIGFsbG9jYXRpb24sIGVtcHR5IGNoZWNrIGFuZCBsaXN0IGFkZCBtdXN0IGJlIHByb3RlY3RlZC4KKwkgICBSZWFkIGFib3V0IHRoaXMgaW4gZXRyYXhfdXNiX3N1Ym1pdF9jdHJsX3VyYi4gKi8KKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1cmJfbGlzdF9sb2NrLCBmbGFncyk7CisJZXBpZCA9IGV0cmF4X3VzYl9zZXR1cF9lcGlkKHVyYik7CisJaWYgKGVwaWQgPT0gLTEpIHsKKwkJREJGRVhJVDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXJiX2xpc3RfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZW1wdHkgPSB1cmJfbGlzdF9lbXB0eShlcGlkKTsKKwl1cmJfbGlzdF9hZGQodXJiLCBlcGlkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cmJfbGlzdF9sb2NrLCBmbGFncyk7CisKKwlkYmdfYnVsaygiQWRkaW5nIGJ1bGsgJXMgdXJiIDB4JWx4IHRvICVzIGxpc3QsIGVwaWQgJWQiLAorCQkgdXNiX3BpcGVpbih1cmItPnBpcGUpID8gIklOIiA6ICJPVVQiLCAodW5zaWduZWQgbG9uZyl1cmIsIGVtcHR5ID8gImVtcHR5IiA6ICIiLCBlcGlkKTsKKworCS8qIE1hcmsgdGhlIHVyYiBhcyBiZWluZyBpbiBwcm9ncmVzcy4gKi8KKwl1cmItPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKworCS8qIFNldHVwIHRoZSBoY3ByaXYgZGF0YS4gKi8KKwl1cmJfcHJpdiA9IGttYWxsb2Moc2l6ZW9mKGV0cmF4X3VyYl9wcml2X3QpLCBLTUFMTE9DX0ZMQUcpOworCWFzc2VydCh1cmJfcHJpdiAhPSBOVUxMKTsKKwkvKiBUaGlzIHNldHMgcnhfb2Zmc2V0IHRvIDAuICovCisJbWVtc2V0KHVyYl9wcml2LCAwLCBzaXplb2YoZXRyYXhfdXJiX3ByaXZfdCkpOworCXVyYl9wcml2LT51cmJfc3RhdGUgPSBOT1RfU1RBUlRFRDsKKwl1cmItPmhjcHJpdiA9IHVyYl9wcml2OworCisJaWYgKGVtcHR5KSB7CisJCWV0cmF4X3VzYl9hZGRfdG9fYnVsa19zYl9saXN0KHVyYiwgZXBpZCk7CisJfQorCisJREJGRVhJVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBldHJheF91c2JfYWRkX3RvX2J1bGtfc2JfbGlzdChzdHJ1Y3QgdXJiICp1cmIsIGludCBlcGlkKQoreworCVVTQl9TQl9EZXNjX3QgKnNiX2Rlc2M7CisJZXRyYXhfdXJiX3ByaXZfdCAqdXJiX3ByaXYgPSAoZXRyYXhfdXJiX3ByaXZfdCAqKXVyYi0+aGNwcml2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY2hhciBtYXhsZW47CisKKwlEQkZFTlRFUjsKKworCWRiZ19idWxrKCJldHJheF91c2JfYWRkX3RvX2J1bGtfc2JfbGlzdCwgdXJiIDB4JWx4IiwgKHVuc2lnbmVkIGxvbmcpdXJiKTsKKworCW1heGxlbiA9IHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwgdXNiX3BpcGVvdXQodXJiLT5waXBlKSk7CisKKwlzYl9kZXNjID0gKFVTQl9TQl9EZXNjX3QqKWttZW1fY2FjaGVfYWxsb2ModXNiX2Rlc2NfY2FjaGUsIFNMQUJfRkxBRyk7CisJYXNzZXJ0KHNiX2Rlc2MgIT0gTlVMTCk7CisJbWVtc2V0KHNiX2Rlc2MsIDAsIHNpemVvZihVU0JfU0JfRGVzY190KSk7CisKKworCWlmICh1c2JfcGlwZW91dCh1cmItPnBpcGUpKSB7CisKKwkJZGJnX2J1bGsoIkdyYWJiaW5nIGJ1bGsgT1VULCB1cmIgMHglbHgsIGVwaWQgJWQiLCAodW5zaWduZWQgbG9uZyl1cmIsIGVwaWQpOworCisJCS8qIFRoaXMgaXMgcHJvYmFibHkgYSBzYW5pdHkgY2hlY2sgb2YgdGhlIGJ1bGsgdHJhbnNhY3Rpb24gbGVuZ3RoCisJCSAgIG5vdCBiZWluZyBsYXJnZXIgdGhhbiA2NCBrQi4gKi8KKwkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IDB4ZmZmZikgeworCQkJcGFuaWMoInVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IDB4ZmZmZiIpOworCQl9CisKKwkJc2JfZGVzYy0+c3dfbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCisJCS8qIFRoZSByZW0gZmllbGQgaXMgZG9uJ3QgY2FyZSBpZiBpdCdzIG5vdCBhIGZ1bGwtbGVuZ3RoIHRyYW5zZmVyLCBzbyBzZXR0aW5nCisJCSAgIGl0IHNob3VsZG4ndCBodXJ0LiBBbHNvLCByZW0gaXNuJ3QgdXNlZCBmb3IgT1VUIHRyYWZmaWMuICovCisJCXNiX2Rlc2MtPmNvbW1hbmQgPSAoSU9fRklFTEQoVVNCX1NCX2NvbW1hbmQsIHJlbSwgMCkgfAorCQkJCSAgICBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgdHQsIG91dCkgfAorCQkJCSAgICBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW90LCB5ZXMpIHwKKwkJCQkgICAgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGVvbCwgeWVzKSk7CisKKwkJLyogVGhlIGZ1bGwgZmllbGQgaXMgc2V0IHRvIHllcywgZXZlbiBpZiB3ZSBkb24ndCBhY3R1YWxseSBjaGVjayB0aGF0IHRoaXMgaXMKKwkJICAgYSBmdWxsLWxlbmd0aCB0cmFuc2ZlciAoaS5lLiwgdGhhdCB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoICUgbWF4bGVuID0gMCkuCisJCSAgIFNldHRpbmcgZnVsbCBwcmV2ZW50cyB0aGUgVVNCIGNvbnRyb2xsZXIgZnJvbSBzZW5kaW5nIGFuIGVtcHR5IHBhY2tldCBpbgorCQkgICB0aGF0IGNhc2UuICBIb3dldmVyLCBpZiBVUkJfWkVST19QQUNLRVQgd2FzIHNldCB3ZSB3YW50IHRoYXQuICovCisJCWlmICghKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfWkVST19QQUNLRVQpKSB7CisJCQlzYl9kZXNjLT5jb21tYW5kIHw9IElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBmdWxsLCB5ZXMpOworCQl9CisKKwkJc2JfZGVzYy0+YnVmID0gdmlydF90b19waHlzKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJc2JfZGVzYy0+bmV4dCA9IDA7CisKKwl9IGVsc2UgaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSkgeworCisJCWRiZ19idWxrKCJHcmFiYmluZyBidWxrIElOLCB1cmIgMHglbHgsIGVwaWQgJWQiLCAodW5zaWduZWQgbG9uZyl1cmIsIGVwaWQpOworCisJCXNiX2Rlc2MtPnN3X2xlbiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA/CisJCQkodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0gMSkgLyBtYXhsZW4gKyAxIDogMDsKKworCQkvKiBUaGUgcmVtIGZpZWxkIGlzIGRvbid0IGNhcmUgaWYgaXQncyBub3QgYSBmdWxsLWxlbmd0aCB0cmFuc2Zlciwgc28gc2V0dGluZworCQkgICBpdCBzaG91bGRuJ3QgaHVydC4gKi8KKwkJc2JfZGVzYy0+Y29tbWFuZCA9CisJCQkoSU9fRklFTEQoVVNCX1NCX2NvbW1hbmQsIHJlbSwKKwkJCQkgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAlIG1heGxlbikgfAorCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCB0dCwgaW4pIHwKKwkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW90LCB5ZXMpIHwKKwkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW9sLCB5ZXMpKTsKKworCQlzYl9kZXNjLT5idWYgPSAwOworCQlzYl9kZXNjLT5uZXh0ID0gMDsKKwl9CisKKwl1cmJfcHJpdi0+Zmlyc3Rfc2IgPSBzYl9kZXNjOworCXVyYl9wcml2LT5sYXN0X3NiID0gc2JfZGVzYzsKKwl1cmJfcHJpdi0+ZXBpZCA9IGVwaWQ7CisKKwl1cmItPmhjcHJpdiA9IHVyYl9wcml2OworCisJLyogUmVzZXQgdG9nZ2xlIGJpdHMgYW5kIHJlc2V0IGVycm9yIGNvdW50LiAqLworCXNhdmVfZmxhZ3MoZmxhZ3MpOworCWNsaSgpOworCisJKlJfVVNCX0VQVF9JTkRFWCA9IElPX0ZJRUxEKFJfVVNCX0VQVF9JTkRFWCwgdmFsdWUsIGVwaWQpOworCW5vcCgpOworCisJLyogRklYTUU6IElzIHRoaXMgYSBzcGVjaWFsIGNhc2Ugc2luY2UgdGhlIGhvbGQgZmllbGQgaXMgY2hlY2tlZCwKKwkgICBvciBzaG91bGQgd2UgY2hlY2sgaG9sZCBpbiBhIGxvdCBvZiBvdGhlciBjYXNlcyBhcyB3ZWxsPyAqLworCWlmICgqUl9VU0JfRVBUX0RBVEEgJiBJT19NQVNLKFJfVVNCX0VQVF9EQVRBLCBob2xkKSkgeworCQlwYW5pYygiSG9sZCB3YXMgc2V0IGluICVzIiwgX19GVU5DVElPTl9fKTsKKwl9CisKKwkvKiBSZXNldCBlcnJvciBjb3VudGVycyAocmVnYXJkbGVzcyBvZiB3aGljaCBkaXJlY3Rpb24gdGhpcyB0cmFmZmljIGlzKS4gKi8KKwkqUl9VU0JfRVBUX0RBVEEgJj0KKwkJfihJT19NQVNLKFJfVVNCX0VQVF9EQVRBLCBlcnJvcl9jb3VudF9pbikgfAorCQkgIElPX01BU0soUl9VU0JfRVBUX0RBVEEsIGVycm9yX2NvdW50X291dCkpOworCisJLyogU29mdHdhcmUgbXVzdCBwcmVzZXQgdGhlIHRvZ2dsZSBiaXRzLiAqLworCWlmICh1c2JfcGlwZW91dCh1cmItPnBpcGUpKSB7CisJCWNoYXIgdG9nZ2xlID0KKwkJCXVzYl9nZXR0b2dnbGUodXJiLT5kZXYsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwgdXNiX3BpcGVvdXQodXJiLT5waXBlKSk7CisJCSpSX1VTQl9FUFRfREFUQSAmPSB+SU9fTUFTSyhSX1VTQl9FUFRfREFUQSwgdF9vdXQpOworCQkqUl9VU0JfRVBUX0RBVEEgfD0gSU9fRklFTEQoUl9VU0JfRVBUX0RBVEEsIHRfb3V0LCB0b2dnbGUpOworCX0gZWxzZSB7CisJCWNoYXIgdG9nZ2xlID0KKwkJCXVzYl9nZXR0b2dnbGUodXJiLT5kZXYsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwgdXNiX3BpcGVvdXQodXJiLT5waXBlKSk7CisJCSpSX1VTQl9FUFRfREFUQSAmPSB+SU9fTUFTSyhSX1VTQl9FUFRfREFUQSwgdF9pbik7CisJCSpSX1VTQl9FUFRfREFUQSB8PSBJT19GSUVMRChSX1VTQl9FUFRfREFUQSwgdF9pbiwgdG9nZ2xlKTsKKwl9CisKKwkvKiBBc3NlcnQgdGhhdCB0aGUgRVAgZGVzY3JpcHRvciBpcyBkaXNhYmxlZC4gKi8KKwlhc3NlcnQoIShUeEJ1bGtFUExpc3RbZXBpZF0uY29tbWFuZCAmIElPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSkpKTsKKworCS8qIFRoZSByZWFzb24gd2Ugc2V0IHRoZSBFUCdzIHN1YiBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2YKKwkgICB3YWxraW5nIHRoZSBTQiBsaXN0IGFuZCBsaW5raW5nIGl0IGxhc3QgaW4gdGhlIGxpc3QgaXMgdGhhdCB3ZSBvbmx5CisJICAgaGF2ZSBvbmUgYWN0aXZlIHVyYiBhdCBhIHRpbWUgKHRoZSByZXN0IGFyZSBxdWV1ZWQpLiAqLworCisJLyogTm90ZSB0aGF0IHdlIGNhbm5vdCBoYXZlIGludGVycnVwdHMgcnVubmluZyB3aGVuIHdlIGhhdmUgc2V0IHRoZSBTQiBkZXNjcmlwdG9yCisJICAgYnV0IHRoZSBFUCBpcyBub3QgeWV0IGVuYWJsZWQuICBJZiBhIGJ1bGsgZW90IGhhcHBlbnMgZm9yIGFub3RoZXIgRVAsIHdlIHdpbGwKKwkgICBmaW5kIHRoaXMgRVAgZGlzYWJsZWQgYW5kIHdpdGggYSBTQiAhPSAwLCB3aGljaCB3aWxsIG1ha2UgdXMgdGhpbmsgdGhhdCBpdCdzIGRvbmUuICovCisJVHhCdWxrRVBMaXN0W2VwaWRdLnN1YiA9IHZpcnRfdG9fcGh5cyhzYl9kZXNjKTsKKwlUeEJ1bGtFUExpc3RbZXBpZF0uaHdfbGVuID0gMDsKKwkvKiBOb3RlIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBmaWxsIGluIHRoZSBlcF9pZCBmaWVsZCBzaW5jZSB0aGlzCisJICAgd2FzIGRvbmUgd2hlbiB3ZSBhbGxvY2F0ZWQgdGhlIEVQIGRlc2NyaXB0b3JzIGluIGluaXRfdHhfYnVsa19lcC4gKi8KKworCS8qIENoZWNrIGlmIHRoZSBkdW1teSBsaXN0IGlzIGFscmVhZHkgd2l0aCB1cyAoaWYgc2V2ZXJhbCB1cmJzIHdlcmUgcXVldWVkKS4gKi8KKwlpZiAoVHhCdWxrRVBMaXN0W2VwaWRdLm5leHQgIT0gdmlydF90b19waHlzKCZUeEJ1bGtEdW1teUVQTGlzdFtlcGlkXVswXSkpIHsKKworCQlkYmdfYnVsaygiSW52aXRpbmcgZHVtbXkgbGlzdCB0byB0aGUgcGFydHkgZm9yIHVyYiAweCVseCwgZXBpZCAlZCIsCisJCQkgKHVuc2lnbmVkIGxvbmcpdXJiLCBlcGlkKTsKKworCQkvKiBUaGUgbGFzdCBFUCBpbiB0aGUgZHVtbXkgbGlzdCBhbHJlYWR5IGhhcyBpdHMgbmV4dCBwb2ludGVyIHNldCB0bworCQkgICBUeEJ1bGtFUExpc3RbZXBpZF0ubmV4dC4gKi8KKworCQkvKiBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBETUEgaXMgYXQgdGhpcyBFUCBvciBub3QgYmVmb3JlIGNoYW5naW5nIHRoZQorCQkgICBuZXh0IHBvaW50ZXIsIHNpbmNlIHdlIHdpbGwgZG8gaXQgaW4gb25lIDMyLWJpdCB3cml0ZSAoRVAgZGVzY3JpcHRvcnMgYXJlCisJCSAgIDMyLWJpdCBhbGlnbmVkKS4gKi8KKwkJVHhCdWxrRVBMaXN0W2VwaWRdLm5leHQgPSB2aXJ0X3RvX3BoeXMoJlR4QnVsa0R1bW15RVBMaXN0W2VwaWRdWzBdKTsKKwl9CisJLyogRW5hYmxlIHRoZSBFUCBkZXNjci4gKi8KKwlkYmdfYnVsaygiRW5hYmxpbmcgYnVsayBFUCBmb3IgdXJiIDB4JWx4LCBlcGlkICVkIiwgKHVuc2lnbmVkIGxvbmcpdXJiLCBlcGlkKTsKKwlUeEJ1bGtFUExpc3RbZXBpZF0uY29tbWFuZCB8PSBJT19TVEFURShVU0JfRVBfY29tbWFuZCwgZW5hYmxlLCB5ZXMpOworCisJLyogRXZlcnl0aGluZyBpcyBzZXQgdXAsIHNhZmUgdG8gZW5hYmxlIGludGVycnVwdHMgYWdhaW4uICovCisJcmVzdG9yZV9mbGFncyhmbGFncyk7CisKKwkvKiBJZiB0aGUgRE1BIGJ1bGsgY2hhbm5lbCBpc24ndCBydW5uaW5nLCB3ZSBuZWVkIHRvIHJlc3RhcnQgaXQgaWYgaXQKKwkgICBoYXMgc3RvcHBlZCBhdCB0aGUgbGFzdCBFUCBkZXNjcmlwdG9yIChETUEgc3RvcHBlZCBiZWNhdXNlIHRoZXJlIHdhcworCSAgIG5vIG1vcmUgdHJhZmZpYykgb3IgaWYgaXQgaGFzIHN0b3BwZWQgYXQgYSBkdW1teSBFUCB3aXRoIHRoZSBpbnRyIGZsYWcKKwkgICBzZXQgKERNQSBzdG9wcGVkIGJlY2F1c2Ugd2Ugd2VyZSB0b28gc2xvdyBpbiBpbnNlcnRpbmcgbmV3IHRyYWZmaWMpLiAqLworCWlmICghKCpSX0RNQV9DSDhfU1VCMF9DTUQgJiBJT19NQVNLKFJfRE1BX0NIOF9TVUIwX0NNRCwgY21kKSkpIHsKKworCQlVU0JfRVBfRGVzY190ICplcDsKKwkJZXAgPSAoVVNCX0VQX0Rlc2NfdCAqKXBoeXNfdG9fdmlydCgqUl9ETUFfQ0g4X1NVQjBfRVApOworCQlkYmdfYnVsaygiRE1BIGNoYW5uZWwgbm90IHJ1bm5pbmcgaW4gYWRkIik7CisJCWRiZ19idWxrKCJETUEgaXMgYXQgMHglbHgiLCAodW5zaWduZWQgbG9uZyllcCk7CisKKwkJaWYgKCpSX0RNQV9DSDhfU1VCMF9FUCA9PSB2aXJ0X3RvX3BoeXMoJlR4QnVsa0VQTGlzdFtOQlJfT0ZfRVBJRFMgLSAxXSkgfHwKKwkJICAgIChlcC0+Y29tbWFuZCAmIDB4OCkgPj4gMykgeworCQkJKlJfRE1BX0NIOF9TVUIwX0NNRCA9IElPX1NUQVRFKFJfRE1BX0NIOF9TVUIwX0NNRCwgY21kLCBzdGFydCk7CisJCQkvKiBVcGRhdGUvcmVzdGFydCB0aGUgYnVsayBzdGFydCB0aW1lciBzaW5jZSB3ZSBqdXN0IHN0YXJ0ZWQgdGhlIGNoYW5uZWwuICovCisJCQltb2RfdGltZXIoJmJ1bGtfc3RhcnRfdGltZXIsIGppZmZpZXMgKyBCVUxLX1NUQVJUX1RJTUVSX0lOVEVSVkFMKTsKKwkJCS8qIFVwZGF0ZS9yZXN0YXJ0IHRoZSBidWxrIGVvdCB0aW1lciBzaW5jZSB3ZSBqdXN0IGluc2VydGVkIHRyYWZmaWMuICovCisJCQltb2RfdGltZXIoJmJ1bGtfZW90X3RpbWVyLCBqaWZmaWVzICsgQlVMS19FT1RfVElNRVJfSU5URVJWQUwpOworCQl9CisJfQorCisJREJGRVhJVDsKK30KKworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2NvbXBsZXRlX2J1bGtfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cykKK3sKKwlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdiA9IChldHJheF91cmJfcHJpdl90ICopdXJiLT5oY3ByaXY7CisJaW50IGVwaWQgPSB1cmJfcHJpdi0+ZXBpZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJREJGRU5URVI7CisKKwlpZiAoc3RhdHVzKQorCQl3YXJuKCJDb21wbGV0aW5nIGJ1bGsgdXJiIHdpdGggc3RhdHVzICVkLiIsIHN0YXR1cyk7CisKKwlkYmdfYnVsaygiQ29tcGxldGluZyBidWxrIHVyYiAweCVseCBmb3IgZXBpZCAlZCIsICh1bnNpZ25lZCBsb25nKXVyYiwgZXBpZCk7CisKKwkvKiBVcGRhdGUgdGhlIHVyYiBsaXN0LiAqLworCXVyYl9saXN0X2RlbCh1cmIsIGVwaWQpOworCisJLyogRm9yIGFuIElOIHBpcGUsIHdlIGFsd2F5cyBzZXQgdGhlIGFjdHVhbCBsZW5ndGgsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGVyZSB3YXMKKwkgICBhbiBlcnJvciBvciBub3QgKHdoaWNoIG1lYW5zIHRoZSBkZXZpY2UgZHJpdmVyIGNhbiB1c2UgdGhlIGRhdGEgaWYgaXQgd2FudHMgdG8pLiAqLworCWlmICh1c2JfcGlwZWluKHVyYi0+cGlwZSkpIHsKKwkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gdXJiX3ByaXYtPnJ4X29mZnNldDsKKwl9IGVsc2UgeworCQkvKiBTZXQgYWN0dWFsX2xlbmd0aCBmb3IgT1VUIHVyYnMgYWxzbzsgdGhlIFVTQiBtYXNzIHN0b3JhZ2UgZHJpdmVyIHNlZW1zCisJCSAgIHRvIHdhbnQgdGhhdC4gV2Ugd291bGRuJ3Qga25vdyBvZiBhbnkgcGFydGlhbCB3cml0ZXMgaWYgdGhlcmUgd2FzIGFuIGVycm9yLiAqLworCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwkJfSBlbHNlIHsKKwkJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisJCX0KKwl9CisKKwkvKiBGSVhNRTogSXMgdGhlcmUgc29tZXRoaW5nIG9mIHRoZSB0aGluZ3MgYmVsb3cgd2Ugc2hvdWxkbid0IGRvIGlmIHRoZXJlIHdhcyBhbiBlcnJvcj8KKwkgICBMaWtlLCBtYXliZSB3ZSBzaG91bGRuJ3QgdG9nZ2xlIHRoZSB0b2dnbGUgYml0cywgb3IgbWF5YmUgd2Ugc2hvdWxkbid0IGluc2VydCBtb3JlIHRyYWZmaWMuICovCisKKwlzYXZlX2ZsYWdzKGZsYWdzKTsKKwljbGkoKTsKKworCSpSX1VTQl9FUFRfSU5ERVggPSBJT19GSUVMRChSX1VTQl9FUFRfSU5ERVgsIHZhbHVlLCBlcGlkKTsKKwlub3AoKTsKKworCS8qIFdlIG5lZWQgdG8gZmlkZGxlIHdpdGggdGhlIHRvZ2dsZSBiaXRzIGJlY2F1c2UgdGhlIGhhcmR3YXJlIGRvZXNuJ3QgZG8gaXQgZm9yIHVzLiAqLworCWlmICh1c2JfcGlwZW91dCh1cmItPnBpcGUpKSB7CisJCWNoYXIgdG9nZ2xlID0KKwkJCUlPX0VYVFJBQ1QoUl9VU0JfRVBUX0RBVEEsIHRfb3V0LCAqUl9VU0JfRVBUX0RBVEEpOworCQl1c2Jfc2V0dG9nZ2xlKHVyYi0+ZGV2LCB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCisJCQkgICAgICB1c2JfcGlwZW91dCh1cmItPnBpcGUpLCB0b2dnbGUpOworCX0gZWxzZSB7CisJCWNoYXIgdG9nZ2xlID0KKwkJCUlPX0VYVFJBQ1QoUl9VU0JfRVBUX0RBVEEsIHRfaW4sICpSX1VTQl9FUFRfREFUQSk7CisJCXVzYl9zZXR0b2dnbGUodXJiLT5kZXYsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKKwkJCSAgICAgIHVzYl9waXBlb3V0KHVyYi0+cGlwZSksIHRvZ2dsZSk7CisJfQorCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCisJLyogUmVtZW1iZXIgdG8gZnJlZSB0aGUgU0JzLiAqLworCWV0cmF4X3JlbW92ZV9mcm9tX3NiX2xpc3QodXJiKTsKKwlrZnJlZSh1cmJfcHJpdik7CisJdXJiLT5oY3ByaXYgPSAwOworCisJLyogSWYgdGhlcmUgYXJlIGFueSBtb3JlIHVyYidzIGluIHRoZSBsaXN0IHdlJ2QgYmV0dGVyIHN0YXJ0IHNlbmRpbmcgKi8KKwlpZiAoIXVyYl9saXN0X2VtcHR5KGVwaWQpKSB7CisKKwkJc3RydWN0IHVyYiAqbmV3X3VyYjsKKworCQkvKiBHZXQgdGhlIGZpcnN0IHVyYi4gKi8KKwkJbmV3X3VyYiA9IHVyYl9saXN0X2ZpcnN0KGVwaWQpOworCQlhc3NlcnQobmV3X3VyYik7CisKKwkJZGJnX2J1bGsoIk1vcmUgYnVsayBmb3IgZXBpZCAlZCIsIGVwaWQpOworCisJCWV0cmF4X3VzYl9hZGRfdG9fYnVsa19zYl9saXN0KG5ld191cmIsIGVwaWQpOworCX0KKworCXVyYi0+c3RhdHVzID0gc3RhdHVzOworCisJLyogV2UgbGV0IGFueSBub24temVybyBzdGF0dXMgZnJvbSB0aGUgbGF5ZXIgYWJvdmUgaGF2ZSBwcmVjZWRlbmNlLiAqLworCWlmIChzdGF0dXMgPT0gMCkgeworCQkvKiBVUkJfU0hPUlRfTk9UX09LIG1lYW5zIHRoYXQgc2hvcnQgcmVhZHMgKHNob3J0ZXIgdGhhbiB0aGUgZW5kcG9pbnQncyBtYXggbGVuZ3RoKQorCQkgICBpcyB0byBiZSB0cmVhdGVkIGFzIGFuIGVycm9yLiAqLworCQlpZiAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spIHsKKwkJCWlmICh1c2JfcGlwZWluKHVyYi0+cGlwZSkgJiYKKwkJCSAgICAodXJiLT5hY3R1YWxfbGVuZ3RoICE9CisJCQkgICAgIHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwgdXNiX3BpcGVvdXQodXJiLT5waXBlKSkpKSB7CisJCQkJdXJiLT5zdGF0dXMgPSAtRVJFTU9URUlPOworCQkJfQorCQl9CisJfQorCisJaWYgKHVyYi0+Y29tcGxldGUpIHsKKwkJdXJiLT5jb21wbGV0ZSh1cmIsIE5VTEwpOworCX0KKworCWlmICh1cmJfbGlzdF9lbXB0eShlcGlkKSkgeworCQkvKiBUaGlzIG1lYW5zIHRoYXQgdGhpcyBFUCBpcyBub3cgZnJlZSwgZGVjb25maWd1cmUgaXQuICovCisJCWV0cmF4X3VzYl9mcmVlX2VwaWQoZXBpZCk7CisKKwkJLyogTm8gbW9yZSB0cmFmZmljOyB0aW1lIHRvIGNsZWFuIHVwLgorCQkgICBNdXN0IHNldCBzdWIgcG9pbnRlciB0byAwLCBzaW5jZSB3ZSBsb29rIGF0IHRoZSBzdWIgcG9pbnRlciB3aGVuIGhhbmRsaW5nCisJCSAgIHRoZSBidWxrIGVvdCBpbnRlcnJ1cHQuICovCisKKwkJZGJnX2J1bGsoIk5vIGJ1bGsgZm9yIGVwaWQgJWQiLCBlcGlkKTsKKworCQlUeEJ1bGtFUExpc3RbZXBpZF0uc3ViID0gMDsKKworCQkvKiBVbmxpbmsgdGhlIGR1bW15IGxpc3QuICovCisKKwkJZGJnX2J1bGsoIktpY2tpbmcgZHVtbXkgbGlzdCBvdXQgb2YgcGFydHkgZm9yIHVyYiAweCVseCwgZXBpZCAlZCIsCisJCQkgKHVuc2lnbmVkIGxvbmcpdXJiLCBlcGlkKTsKKworCQkvKiBObyBuZWVkIHRvIHdhaXQgZm9yIHRoZSBETUEgYmVmb3JlIGNoYW5naW5nIHRoZSBuZXh0IHBvaW50ZXIuCisJCSAgIFRoZSBtb2R1bG8gTkJSX09GX0VQSURTIGlzbid0IGFjdHVhbGx5IG5lY2Vzc2FyeSwgc2luY2Ugd2Ugd2lsbCBuZXZlciB1c2UKKwkJICAgdGhlIGxhc3Qgb25lIChJTlZBTElEX0VQSUQpIGZvciBhY3R1YWwgdHJhZmZpYy4gKi8KKwkJVHhCdWxrRVBMaXN0W2VwaWRdLm5leHQgPQorCQkJdmlydF90b19waHlzKCZUeEJ1bGtFUExpc3RbKGVwaWQgKyAxKSAlIE5CUl9PRl9FUElEU10pOworCX0KKworCURCRkVYSVQ7Cit9CisKK3N0YXRpYyBpbnQgZXRyYXhfdXNiX3N1Ym1pdF9jdHJsX3VyYihzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50IGVwaWQ7CisJaW50IGVtcHR5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJZXRyYXhfdXJiX3ByaXZfdCAqdXJiX3ByaXY7CisKKwlEQkZFTlRFUjsKKworCS8qIEZJWE1FOiBSZXR1cm4gLUVOWElPIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBxdWV1ZWQgdXJiIGZvciB0aGlzIGVuZHBvaW50PyAqLworCisJLyogRXBpZCBhbGxvY2F0aW9uLCBlbXB0eSBjaGVjayBhbmQgbGlzdCBhZGQgbXVzdCBiZSBwcm90ZWN0ZWQuCisKKwkgICBFcGlkIGFsbG9jYXRpb24gYmVjYXVzZSBpZiB3ZSBmaW5kIGFuIGV4aXN0aW5nIGVwaWQgZm9yIHRoaXMgZW5kcG9pbnQgYW4gdXJiIG1pZ2h0IGJlCisJICAgY29tcGxldGVkIChlbXB0eWluZyB0aGUgbGlzdCkgYmVmb3JlIHdlIGFkZCB0aGUgbmV3IHVyYiB0byB0aGUgbGlzdCwgY2F1c2luZyB0aGUgZXBpZAorCSAgIHRvIGJlIGRlLWFsbG9jYXRlZC4gV2Ugd291bGQgdGhlbiBzdGFydCB0aGUgdHJhbnNmZXIgd2l0aCBhbiBpbnZhbGlkIGVwaWQgLT4gZXBpZCBhdHRuLgorCisJICAgRW1wdHkgY2hlY2sgYW5kIGFkZCBiZWNhdXNlIG90aGVyd2lzZSB3ZSBtaWdodCBjb25jbHVkZSB0aGF0IHRoZSBsaXN0IGlzIG5vdCBlbXB0eSwKKwkgICBhZnRlciB3aGljaCBpdCBiZWNvbWVzIGVtcHR5IGJlZm9yZSB3ZSBhZGQgdGhlIG5ldyB1cmIgdG8gdGhlIGxpc3QsIGNhdXNpbmcgdXMgbm90IHRvCisJICAgaW5zZXJ0IHRoZSBuZXcgdHJhZmZpYyBpbnRvIHRoZSBTQiBsaXN0LiAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVyYl9saXN0X2xvY2ssIGZsYWdzKTsKKwllcGlkID0gZXRyYXhfdXNiX3NldHVwX2VwaWQodXJiKTsKKwlpZiAoZXBpZCA9PSAtMSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cmJfbGlzdF9sb2NrLCBmbGFncyk7CisJCURCRkVYSVQ7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwllbXB0eSA9IHVyYl9saXN0X2VtcHR5KGVwaWQpOworCXVyYl9saXN0X2FkZCh1cmIsIGVwaWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVyYl9saXN0X2xvY2ssIGZsYWdzKTsKKworCWRiZ19jdHJsKCJBZGRpbmcgY3RybCB1cmIgMHglbHggdG8gJXMgbGlzdCwgZXBpZCAlZCIsCisJCSAodW5zaWduZWQgbG9uZyl1cmIsIGVtcHR5ID8gImVtcHR5IiA6ICIiLCBlcGlkKTsKKworCS8qIE1hcmsgdGhlIHVyYiBhcyBiZWluZyBpbiBwcm9ncmVzcy4gKi8KKwl1cmItPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKworCS8qIFNldHVwIHRoZSBoY3ByaXYgZGF0YS4gKi8KKwl1cmJfcHJpdiA9IGttYWxsb2Moc2l6ZW9mKGV0cmF4X3VyYl9wcml2X3QpLCBLTUFMTE9DX0ZMQUcpOworCWFzc2VydCh1cmJfcHJpdiAhPSBOVUxMKTsKKwkvKiBUaGlzIHNldHMgcnhfb2Zmc2V0IHRvIDAuICovCisJbWVtc2V0KHVyYl9wcml2LCAwLCBzaXplb2YoZXRyYXhfdXJiX3ByaXZfdCkpOworCXVyYl9wcml2LT51cmJfc3RhdGUgPSBOT1RfU1RBUlRFRDsKKwl1cmItPmhjcHJpdiA9IHVyYl9wcml2OworCisJaWYgKGVtcHR5KSB7CisJCWV0cmF4X3VzYl9hZGRfdG9fY3RybF9zYl9saXN0KHVyYiwgZXBpZCk7CisJfQorCisJREJGRVhJVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBldHJheF91c2JfYWRkX3RvX2N0cmxfc2JfbGlzdChzdHJ1Y3QgdXJiICp1cmIsIGludCBlcGlkKQoreworCVVTQl9TQl9EZXNjX3QgKnNiX2Rlc2Nfc2V0dXA7CisJVVNCX1NCX0Rlc2NfdCAqc2JfZGVzY19kYXRhOworCVVTQl9TQl9EZXNjX3QgKnNiX2Rlc2Nfc3RhdHVzOworCisJZXRyYXhfdXJiX3ByaXZfdCAqdXJiX3ByaXYgPSAoZXRyYXhfdXJiX3ByaXZfdCAqKXVyYi0+aGNwcml2OworCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljaGFyIG1heGxlbjsKKworCURCRkVOVEVSOworCisJbWF4bGVuID0gdXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLCB1c2JfcGlwZW91dCh1cmItPnBpcGUpKTsKKworCXNiX2Rlc2Nfc2V0dXAgPSAoVVNCX1NCX0Rlc2NfdCopa21lbV9jYWNoZV9hbGxvYyh1c2JfZGVzY19jYWNoZSwgU0xBQl9GTEFHKTsKKwlhc3NlcnQoc2JfZGVzY19zZXR1cCAhPSBOVUxMKTsKKwlzYl9kZXNjX3N0YXR1cyA9IChVU0JfU0JfRGVzY190KilrbWVtX2NhY2hlX2FsbG9jKHVzYl9kZXNjX2NhY2hlLCBTTEFCX0ZMQUcpOworCWFzc2VydChzYl9kZXNjX3N0YXR1cyAhPSBOVUxMKTsKKworCS8qIEluaXRpYWxpemUgdGhlIG1hbmRhdG9yeSBzZXR1cCBTQiBkZXNjcmlwdG9yICh1c2VkIG9ubHkgaW4gY29udHJvbCB0cmFuc2ZlcnMpICovCisJc2JfZGVzY19zZXR1cC0+c3dfbGVuID0gODsKKwlzYl9kZXNjX3NldHVwLT5jb21tYW5kID0gKElPX0ZJRUxEKFVTQl9TQl9jb21tYW5kLCByZW0sIDApIHwKKwkJCQkgIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCB0dCwgc2V0dXApIHwKKwkJCQkgIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBmdWxsLCB5ZXMpIHwKKwkJCQkgIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb3QsIHllcykpOworCisJc2JfZGVzY19zZXR1cC0+YnVmID0gdmlydF90b19waHlzKHVyYi0+c2V0dXBfcGFja2V0KTsKKworCWlmICh1c2JfcGlwZW91dCh1cmItPnBpcGUpKSB7CisJCWRiZ19jdHJsKCJUcmFuc2ZlciBmb3IgZXBpZCAlZCBpcyBPVVQiLCBlcGlkKTsKKworCQkvKiBJZiB0aGlzIENvbnRyb2wgT1VUIHRyYW5zZmVyIGhhcyBhbiBvcHRpb25hbCBkYXRhIHN0YWdlIHdlIGFkZCBhbiBPVVQgdG9rZW4KKwkJICAgYmVmb3JlIHRoZSBtYW5kYXRvcnkgSU4gKHN0YXR1cykgdG9rZW4sIGhlbmNlIHRoZSByZW9yZGVyZWQgU0IgbGlzdCAqLworCisJCXNiX2Rlc2Nfc2V0dXAtPm5leHQgPSB2aXJ0X3RvX3BoeXMoc2JfZGVzY19zdGF0dXMpOworCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKKworCQkJZGJnX2N0cmwoIlRoaXMgT1VUIHRyYW5zZmVyIGhhcyBhbiBleHRyYSBkYXRhIHN0YWdlIik7CisKKwkJCXNiX2Rlc2NfZGF0YSA9IChVU0JfU0JfRGVzY190KilrbWVtX2NhY2hlX2FsbG9jKHVzYl9kZXNjX2NhY2hlLCBTTEFCX0ZMQUcpOworCQkJYXNzZXJ0KHNiX2Rlc2NfZGF0YSAhPSBOVUxMKTsKKworCQkJc2JfZGVzY19zZXR1cC0+bmV4dCA9IHZpcnRfdG9fcGh5cyhzYl9kZXNjX2RhdGEpOworCisJCQlzYl9kZXNjX2RhdGEtPnN3X2xlbiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwkJCXNiX2Rlc2NfZGF0YS0+Y29tbWFuZCA9IChJT19TVEFURShVU0JfU0JfY29tbWFuZCwgdHQsIG91dCkgfAorCQkJCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBmdWxsLCB5ZXMpIHwKKwkJCQkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW90LCB5ZXMpKTsKKwkJCXNiX2Rlc2NfZGF0YS0+YnVmID0gdmlydF90b19waHlzKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJCXNiX2Rlc2NfZGF0YS0+bmV4dCA9IHZpcnRfdG9fcGh5cyhzYl9kZXNjX3N0YXR1cyk7CisJCX0KKworCQlzYl9kZXNjX3N0YXR1cy0+c3dfbGVuID0gMTsKKwkJc2JfZGVzY19zdGF0dXMtPmNvbW1hbmQgPSAoSU9fRklFTEQoVVNCX1NCX2NvbW1hbmQsIHJlbSwgMCkgfAorCQkJCQkgICBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgdHQsIGluKSB8CisJCQkJCSAgIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb3QsIHllcykgfAorCQkJCQkgICBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgaW50ciwgeWVzKSB8CisJCQkJCSAgIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb2wsIHllcykpOworCisJCXNiX2Rlc2Nfc3RhdHVzLT5idWYgPSAwOworCQlzYl9kZXNjX3N0YXR1cy0+bmV4dCA9IDA7CisKKwl9IGVsc2UgaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSkgeworCisJCWRiZ19jdHJsKCJUcmFuc2ZlciBmb3IgZXBpZCAlZCBpcyBJTiIsIGVwaWQpOworCQlkYmdfY3RybCgidHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9ICVkIiwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwkJZGJnX2N0cmwoInJlbSBpcyBjYWxjdWxhdGVkIHRvICVkIiwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoICUgbWF4bGVuKTsKKworCQlzYl9kZXNjX2RhdGEgPSAoVVNCX1NCX0Rlc2NfdCopa21lbV9jYWNoZV9hbGxvYyh1c2JfZGVzY19jYWNoZSwgU0xBQl9GTEFHKTsKKwkJYXNzZXJ0KHNiX2Rlc2NfZGF0YSAhPSBOVUxMKTsKKworCQlzYl9kZXNjX3NldHVwLT5uZXh0ID0gdmlydF90b19waHlzKHNiX2Rlc2NfZGF0YSk7CisKKwkJc2JfZGVzY19kYXRhLT5zd19sZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPworCQkJKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtIDEpIC8gbWF4bGVuICsgMSA6IDA7CisJCWRiZ19jdHJsKCJzd19sZW4gZ290ICVkIiwgc2JfZGVzY19kYXRhLT5zd19sZW4pOworCisJCXNiX2Rlc2NfZGF0YS0+Y29tbWFuZCA9CisJCQkoSU9fRklFTEQoVVNCX1NCX2NvbW1hbmQsIHJlbSwKKwkJCQkgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAlIG1heGxlbikgfAorCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCB0dCwgaW4pIHwKKwkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW90LCB5ZXMpKTsKKworCQlzYl9kZXNjX2RhdGEtPmJ1ZiA9IDA7CisJCXNiX2Rlc2NfZGF0YS0+bmV4dCA9IHZpcnRfdG9fcGh5cyhzYl9kZXNjX3N0YXR1cyk7CisKKwkJLyogUmVhZCBjb21tZW50IGF0IHpvdXRfYnVmZmVyIGRlY2xhcmF0aW9uIGZvciBhbiBleHBsYW5hdGlvbiB0byB0aGlzLiAqLworCQlzYl9kZXNjX3N0YXR1cy0+c3dfbGVuID0gMTsKKwkJc2JfZGVzY19zdGF0dXMtPmNvbW1hbmQgPSAoSU9fRklFTEQoVVNCX1NCX2NvbW1hbmQsIHJlbSwgMCkgfAorCQkJCQkgICBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgdHQsIHpvdXQpIHwKKwkJCQkJICAgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGZ1bGwsIHllcykgfAorCQkJCQkgICBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW90LCB5ZXMpIHwKKwkJCQkJICAgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGludHIsIHllcykgfAorCQkJCQkgICBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW9sLCB5ZXMpKTsKKworCQlzYl9kZXNjX3N0YXR1cy0+YnVmID0gdmlydF90b19waHlzKCZ6b3V0X2J1ZmZlclswXSk7CisJCXNiX2Rlc2Nfc3RhdHVzLT5uZXh0ID0gMDsKKwl9CisKKwl1cmJfcHJpdi0+Zmlyc3Rfc2IgPSBzYl9kZXNjX3NldHVwOworCXVyYl9wcml2LT5sYXN0X3NiID0gc2JfZGVzY19zdGF0dXM7CisJdXJiX3ByaXYtPmVwaWQgPSBlcGlkOworCisJdXJiX3ByaXYtPnVyYl9zdGF0ZSA9IFNUQVJURUQ7CisKKwkvKiBSZXNldCB0b2dnbGUgYml0cyBhbmQgcmVzZXQgZXJyb3IgY291bnQsIHJlbWVtYmVyIHRvIGRpIGFuZCBlaSAqLworCS8qIFdhcm5pbmc6IGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhpcyBsb2NraW5nIGRvZXNuJ3Qgd29yayB3aXRoIGJvdHRvbS1oYWx2ZXMgKi8KKworCXNhdmVfZmxhZ3MoZmxhZ3MpOworCWNsaSgpOworCisJKlJfVVNCX0VQVF9JTkRFWCA9IElPX0ZJRUxEKFJfVVNCX0VQVF9JTkRFWCwgdmFsdWUsIGVwaWQpOworCW5vcCgpOworCWlmICgqUl9VU0JfRVBUX0RBVEEgJiBJT19NQVNLKFJfVVNCX0VQVF9EQVRBLCBob2xkKSkgeworCQlwYW5pYygiSG9sZCB3YXMgc2V0IGluICVzIiwgX19GVU5DVElPTl9fKTsKKwl9CisKKworCS8qIEZJWE1FOiBDb21wYXJlIHdpdGggZXRyYXhfdXNiX2FkZF90b19idWxrX3NiX2xpc3Qgd2hlcmUgdGhlIHRvZ2dsZSBiaXRzCisJICAgYXJlIHNldCB0byBhIHNwZWNpZmljIHZhbHVlLiBXaHkgdGhlIGRpZmZlcmVuY2U/IFJlYWQgIlRyYW5zZmVyIGFuZCBUb2dnbGUgQml0cworCSAgIGluIERlc2lnbmVyJ3MgUmVmZXJlbmNlLCBwLiA4IC0gMTEuICovCisJKlJfVVNCX0VQVF9EQVRBICY9CisJCX4oSU9fTUFTSyhSX1VTQl9FUFRfREFUQSwgZXJyb3JfY291bnRfaW4pIHwKKwkJICBJT19NQVNLKFJfVVNCX0VQVF9EQVRBLCBlcnJvcl9jb3VudF9vdXQpIHwKKwkJICBJT19NQVNLKFJfVVNCX0VQVF9EQVRBLCB0X2luKSB8CisJCSAgSU9fTUFTSyhSX1VTQl9FUFRfREFUQSwgdF9vdXQpKTsKKworCS8qIFNpbmNlIHdlIHVzZSB0aGUgcnggaW50ZXJydXB0IHRvIGNvbXBsZXRlIGN0cmwgdXJicywgd2UgY2FuIGVuYWJsZSBpbnRlcnJ1cHRzIG5vdworCSAgIChpLmUuIHdlIGRvbid0IGNoZWNrIHRoZSBzdWIgcG9pbnRlciBvbiBhbiBlb3QgaW50ZXJydXB0IGxpa2Ugd2UgZG8gZm9yIGJ1bGsgdHJhZmZpYykuICovCisJcmVzdG9yZV9mbGFncyhmbGFncyk7CisKKwkvKiBBc3NlcnQgdGhhdCB0aGUgRVAgZGVzY3JpcHRvciBpcyBkaXNhYmxlZC4gKi8KKwlhc3NlcnQoIShUeEN0cmxFUExpc3RbZXBpZF0uY29tbWFuZCAmIElPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSkpKTsKKworCS8qIFNldCB1cCBhbmQgZW5hYmxlIHRoZSBFUCBkZXNjcmlwdG9yLiAqLworCVR4Q3RybEVQTGlzdFtlcGlkXS5zdWIgPSB2aXJ0X3RvX3BoeXMoc2JfZGVzY19zZXR1cCk7CisJVHhDdHJsRVBMaXN0W2VwaWRdLmh3X2xlbiA9IDA7CisJVHhDdHJsRVBMaXN0W2VwaWRdLmNvbW1hbmQgfD0gSU9fU1RBVEUoVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSwgeWVzKTsKKworCS8qIFdlIHN0YXJ0IHRoZSBETUEgc3ViIGNoYW5uZWwgd2l0aG91dCBjaGVja2luZyBpZiBpdCdzIHJ1bm5pbmcgb3Igbm90LCBiZWNhdXNlOgorCSAgIDEpIElmIGl0J3MgYWxyZWFkeSBydW5uaW5nLCBpc3N1aW5nIHRoZSBzdGFydCBjb21tYW5kIGlzIGEgbm9wLgorCSAgIDIpIFdlIGF2b2lkIGEgdGVzdC1hbmQtc2V0IHJhY2UgY29uZGl0aW9uLiAqLworCSpSX0RNQV9DSDhfU1VCMV9DTUQgPSBJT19TVEFURShSX0RNQV9DSDhfU1VCMV9DTUQsIGNtZCwgc3RhcnQpOworCisJREJGRVhJVDsKK30KKworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2NvbXBsZXRlX2N0cmxfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cykKK3sKKwlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdiA9IChldHJheF91cmJfcHJpdl90ICopdXJiLT5oY3ByaXY7CisJaW50IGVwaWQgPSB1cmJfcHJpdi0+ZXBpZDsKKworCURCRkVOVEVSOworCisJaWYgKHN0YXR1cykKKwkJd2FybigiQ29tcGxldGluZyBjdHJsIHVyYiB3aXRoIHN0YXR1cyAlZC4iLCBzdGF0dXMpOworCisJZGJnX2N0cmwoIkNvbXBsZXRpbmcgY3RybCBlcGlkICVkLCB1cmIgMHglbHgiLCBlcGlkLCAodW5zaWduZWQgbG9uZyl1cmIpOworCisJLyogUmVtb3ZlIHRoaXMgdXJiIGZyb20gdGhlIGxpc3QuICovCisJdXJiX2xpc3RfZGVsKHVyYiwgZXBpZCk7CisKKwkvKiBGb3IgYW4gSU4gcGlwZSwgd2UgYWx3YXlzIHNldCB0aGUgYWN0dWFsIGxlbmd0aCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXJlIHdhcworCSAgIGFuIGVycm9yIG9yIG5vdCAod2hpY2ggbWVhbnMgdGhlIGRldmljZSBkcml2ZXIgY2FuIHVzZSB0aGUgZGF0YSBpZiBpdCB3YW50cyB0bykuICovCisJaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSkgeworCQl1cmItPmFjdHVhbF9sZW5ndGggPSB1cmJfcHJpdi0+cnhfb2Zmc2V0OworCX0KKworCS8qIEZJWE1FOiBJcyB0aGVyZSBzb21ldGhpbmcgb2YgdGhlIHRoaW5ncyBiZWxvdyB3ZSBzaG91bGRuJ3QgZG8gaWYgdGhlcmUgd2FzIGFuIGVycm9yPworCSAgIExpa2UsIG1heWJlIHdlIHNob3VsZG4ndCBpbnNlcnQgbW9yZSB0cmFmZmljLiAqLworCisJLyogUmVtZW1iZXIgdG8gZnJlZSB0aGUgU0JzLiAqLworCWV0cmF4X3JlbW92ZV9mcm9tX3NiX2xpc3QodXJiKTsKKwlrZnJlZSh1cmJfcHJpdik7CisJdXJiLT5oY3ByaXYgPSAwOworCisJLyogSWYgdGhlcmUgYXJlIGFueSBtb3JlIHVyYnMgaW4gdGhlIGxpc3Qgd2UnZCBiZXR0ZXIgc3RhcnQgc2VuZGluZy4gKi8KKwlpZiAoIXVyYl9saXN0X2VtcHR5KGVwaWQpKSB7CisJCXN0cnVjdCB1cmIgKm5ld191cmI7CisKKwkJLyogR2V0IHRoZSBmaXJzdCB1cmIuICovCisJCW5ld191cmIgPSB1cmJfbGlzdF9maXJzdChlcGlkKTsKKwkJYXNzZXJ0KG5ld191cmIpOworCisJCWRiZ19jdHJsKCJNb3JlIGN0cmwgZm9yIGVwaWQgJWQsIGZpcnN0IHVyYiA9IDB4JWx4IiwgZXBpZCwgKHVuc2lnbmVkIGxvbmcpbmV3X3VyYik7CisKKwkJZXRyYXhfdXNiX2FkZF90b19jdHJsX3NiX2xpc3QobmV3X3VyYiwgZXBpZCk7CisJfQorCisJdXJiLT5zdGF0dXMgPSBzdGF0dXM7CisKKwkvKiBXZSBsZXQgYW55IG5vbi16ZXJvIHN0YXR1cyBmcm9tIHRoZSBsYXllciBhYm92ZSBoYXZlIHByZWNlZGVuY2UuICovCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCS8qIFVSQl9TSE9SVF9OT1RfT0sgbWVhbnMgdGhhdCBzaG9ydCByZWFkcyAoc2hvcnRlciB0aGFuIHRoZSBlbmRwb2ludCdzIG1heCBsZW5ndGgpCisJCSAgIGlzIHRvIGJlIHRyZWF0ZWQgYXMgYW4gZXJyb3IuICovCisJCWlmICh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1NIT1JUX05PVF9PSykgeworCQkJaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSAmJgorCQkJICAgICh1cmItPmFjdHVhbF9sZW5ndGggIT0KKwkJCSAgICAgdXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLCB1c2JfcGlwZW91dCh1cmItPnBpcGUpKSkpIHsKKwkJCQl1cmItPnN0YXR1cyA9IC1FUkVNT1RFSU87CisJCQl9CisJCX0KKwl9CisKKwlpZiAodXJiLT5jb21wbGV0ZSkgeworCQl1cmItPmNvbXBsZXRlKHVyYiwgTlVMTCk7CisJfQorCisJaWYgKHVyYl9saXN0X2VtcHR5KGVwaWQpKSB7CisJCS8qIE5vIG1vcmUgdHJhZmZpYy4gVGltZSB0byBjbGVhbiB1cC4gKi8KKwkJZXRyYXhfdXNiX2ZyZWVfZXBpZChlcGlkKTsKKwkJLyogTXVzdCBzZXQgc3ViIHBvaW50ZXIgdG8gMC4gKi8KKwkJZGJnX2N0cmwoIk5vIGN0cmwgZm9yIGVwaWQgJWQiLCBlcGlkKTsKKwkJVHhDdHJsRVBMaXN0W2VwaWRdLnN1YiA9IDA7CisJfQorCisJREJGRVhJVDsKK30KKworc3RhdGljIGludCBldHJheF91c2Jfc3VibWl0X2ludHJfdXJiKHN0cnVjdCB1cmIgKnVyYikKK3sKKworCWludCBlcGlkOworCisJREJGRU5URVI7CisKKwlpZiAodXNiX3BpcGVvdXQodXJiLT5waXBlKSkgeworCQkvKiBVbnN1cHBvcnRlZCB0cmFuc2ZlciB0eXBlLgorCQkgICBXZSBkb24ndCBzdXBwb3J0IGludGVycnVwdCBvdXQgdHJhZmZpYy4gKElmIHdlIGRvLCB3ZSBjYW4ndCBzdXBwb3J0CisJCSAgIGludGVydmFscyBmb3IgbmVpdGhlciBpbiBvciBvdXQgdHJhZmZpYywgYnV0IGFyZSBmb3JjZWQgdG8gc2NoZWR1bGUgYWxsCisJCSAgIGludGVycnVwdCB0cmFmZmljIGluIG9uZSBmcmFtZS4pICovCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVwaWQgPSBldHJheF91c2Jfc2V0dXBfZXBpZCh1cmIpOworCWlmIChlcGlkID09IC0xKSB7CisJCURCRkVYSVQ7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmICghdXJiX2xpc3RfZW1wdHkoZXBpZCkpIHsKKwkJLyogVGhlcmUgaXMgYWxyZWFkeSBhIHF1ZXVlZCB1cmIgZm9yIHRoaXMgZW5kcG9pbnQuICovCisJCWV0cmF4X3VzYl9mcmVlX2VwaWQoZXBpZCk7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJdXJiLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisKKwlkYmdfaW50cigiQWRkIGludHIgdXJiIDB4JWx4LCB0byBsaXN0LCBlcGlkICVkIiwgKHVuc2lnbmVkIGxvbmcpdXJiLCBlcGlkKTsKKworCXVyYl9saXN0X2FkZCh1cmIsIGVwaWQpOworCWV0cmF4X3VzYl9hZGRfdG9faW50cl9zYl9saXN0KHVyYiwgZXBpZCk7CisKKwlyZXR1cm4gMDsKKworCURCRkVYSVQ7Cit9CisKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9hZGRfdG9faW50cl9zYl9saXN0KHN0cnVjdCB1cmIgKnVyYiwgaW50IGVwaWQpCit7CisKKwl2b2xhdGlsZSBVU0JfRVBfRGVzY190ICp0bXBfZXA7CisJdm9sYXRpbGUgVVNCX0VQX0Rlc2NfdCAqZmlyc3RfZXA7CisKKwljaGFyIG1heGxlbjsKKwlpbnQgaW50ZXJ2YWw7CisJaW50IGk7CisKKwlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdjsKKworCURCRkVOVEVSOworCisJbWF4bGVuID0gdXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLCB1c2JfcGlwZW91dCh1cmItPnBpcGUpKTsKKwlpbnRlcnZhbCA9IHVyYi0+aW50ZXJ2YWw7CisKKwl1cmJfcHJpdiA9IGttYWxsb2Moc2l6ZW9mKGV0cmF4X3VyYl9wcml2X3QpLCBLTUFMTE9DX0ZMQUcpOworCWFzc2VydCh1cmJfcHJpdiAhPSBOVUxMKTsKKwltZW1zZXQodXJiX3ByaXYsIDAsIHNpemVvZihldHJheF91cmJfcHJpdl90KSk7CisJdXJiLT5oY3ByaXYgPSB1cmJfcHJpdjsKKworCWZpcnN0X2VwID0gJlR4SW50ckVQTGlzdFswXTsKKworCS8qIFJvdW5kIG9mIHRoZSBpbnRlcnZhbCB0byAyXm4sIGl0IGlzIG9idmlvdXMgdGhhdCB0aGlzIGNvZGUgZmF2b3VycworCSAgIHNtYWxsZXIgbnVtYmVycywgYnV0IHRoYXQgaXMgYWN0dWFsbHkgYSBnb29kIHRoaW5nICovCisJLyogRklYTUU6IFRoZSAicm91bmRpbmcgZXJyb3IiIGZvciBsYXJnZXIgaW50ZXJ2YWxzIHdpbGwgYmUgcXVpdGUKKwkgICBsYXJnZS4gRm9yIGluIHRyYWZmaWMgdGhpcyBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtIHNpbmNlIGl0IHdpbGwgb25seQorCSAgIG1lYW4gdGhhdCB3ZSAicG9sbCIgbW9yZSBvZnRlbi4gKi8KKwlmb3IgKGkgPSAwOyBpbnRlcnZhbDsgaSsrKSB7CisJCWludGVydmFsID0gaW50ZXJ2YWwgPj4gMTsKKwl9CisJaW50ZXJ2YWwgPSAxIDw8IChpIC0gMSk7CisKKwlkYmdfaW50cigiSW50ZXJ2YWwgcm91bmRlZCB0byAlZCIsIGludGVydmFsKTsKKworCXRtcF9lcCA9IGZpcnN0X2VwOworCWkgPSAwOworCWRvIHsKKwkJaWYgKHRtcF9lcC0+Y29tbWFuZCAmIElPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVvZikpIHsKKwkJCWlmICgoaSAlIGludGVydmFsKSA9PSAwKSB7CisJCQkJLyogSW5zZXJ0IHRoZSB0cmFmZmljIGVwIGFmdGVyIHRtcF9lcCAqLworCQkJCVVTQl9FUF9EZXNjX3QgKmVwX2Rlc2M7CisJCQkJVVNCX1NCX0Rlc2NfdCAqc2JfZGVzYzsKKworCQkJCWRiZ19pbnRyKCJJbnNlcnRpbmcgRVAgZm9yIGVwaWQgJWQiLCBlcGlkKTsKKworCQkJCWVwX2Rlc2MgPSAoVVNCX0VQX0Rlc2NfdCAqKQorCQkJCQlrbWVtX2NhY2hlX2FsbG9jKHVzYl9kZXNjX2NhY2hlLCBTTEFCX0ZMQUcpOworCQkJCXNiX2Rlc2MgPSAoVVNCX1NCX0Rlc2NfdCAqKQorCQkJCQlrbWVtX2NhY2hlX2FsbG9jKHVzYl9kZXNjX2NhY2hlLCBTTEFCX0ZMQUcpOworCQkJCWFzc2VydChlcF9kZXNjICE9IE5VTEwpOworCQkJCUNIRUNLX0FMSUdOKGVwX2Rlc2MpOworCQkJCWFzc2VydChzYl9kZXNjICE9IE5VTEwpOworCisJCQkJZXBfZGVzYy0+c3ViID0gdmlydF90b19waHlzKHNiX2Rlc2MpOworCQkJCWVwX2Rlc2MtPmh3X2xlbiA9IDA7CisJCQkJZXBfZGVzYy0+Y29tbWFuZCA9IChJT19GSUVMRChVU0JfRVBfY29tbWFuZCwgZXBpZCwgZXBpZCkgfAorCQkJCQkJICAgIElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlbmFibGUsIHllcykpOworCisKKwkJCQkvKiBSb3VuZCB1cHdhcmRzIHRoZSBudW1iZXIgb2YgcGFja2V0cyBvZiBzaXplIG1heGxlbgorCQkJCSAgIHRoYXQgdGhpcyBTQiBkZXNjcmlwdG9yIHNob3VsZCByZWNlaXZlLiAqLworCQkJCXNiX2Rlc2MtPnN3X2xlbiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA/CisJCQkJCSh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLSAxKSAvIG1heGxlbiArIDEgOiAwOworCQkJCXNiX2Rlc2MtPm5leHQgPSAwOworCQkJCXNiX2Rlc2MtPmJ1ZiA9IDA7CisJCQkJc2JfZGVzYy0+Y29tbWFuZCA9CisJCQkJCShJT19GSUVMRChVU0JfU0JfY29tbWFuZCwgcmVtLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggJSBtYXhsZW4pIHwKKwkJCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCB0dCwgaW4pIHwKKwkJCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb3QsIHllcykgfAorCQkJCQkgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGVvbCwgeWVzKSk7CisKKwkJCQllcF9kZXNjLT5uZXh0ID0gdG1wX2VwLT5uZXh0OworCQkJCXRtcF9lcC0+bmV4dCA9IHZpcnRfdG9fcGh5cyhlcF9kZXNjKTsKKwkJCX0KKwkJCWkrKzsKKwkJfQorCQl0bXBfZXAgPSAoVVNCX0VQX0Rlc2NfdCAqKXBoeXNfdG9fdmlydCh0bXBfZXAtPm5leHQpOworCX0gd2hpbGUgKHRtcF9lcCAhPSBmaXJzdF9lcCk7CisKKworCS8qIE5vdGUgdGhhdCBmaXJzdF9zYi9sYXN0X3NiIGRvZXNuJ3QgYXBwbHkgdG8gaW50ZXJydXB0IHRyYWZmaWMuICovCisJdXJiX3ByaXYtPmVwaWQgPSBlcGlkOworCisJLyogV2Ugc3RhcnQgdGhlIERNQSBzdWIgY2hhbm5lbCB3aXRob3V0IGNoZWNraW5nIGlmIGl0J3MgcnVubmluZyBvciBub3QsIGJlY2F1c2U6CisJICAgMSkgSWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIGlzc3VpbmcgdGhlIHN0YXJ0IGNvbW1hbmQgaXMgYSBub3AuCisJICAgMikgV2UgYXZvaWQgYSB0ZXN0LWFuZC1zZXQgcmFjZSBjb25kaXRpb24uICovCisJKlJfRE1BX0NIOF9TVUIyX0NNRCA9IElPX1NUQVRFKFJfRE1BX0NIOF9TVUIyX0NNRCwgY21kLCBzdGFydCk7CisKKwlEQkZFWElUOworfQorCisKKworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2NvbXBsZXRlX2ludHJfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cykKK3sKKwlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdiA9IChldHJheF91cmJfcHJpdl90ICopdXJiLT5oY3ByaXY7CisJaW50IGVwaWQgPSB1cmJfcHJpdi0+ZXBpZDsKKworCURCRkVOVEVSOworCisJaWYgKHN0YXR1cykKKwkJd2FybigiQ29tcGxldGluZyBpbnRyIHVyYiB3aXRoIHN0YXR1cyAlZC4iLCBzdGF0dXMpOworCisJZGJnX2ludHIoIkNvbXBsZXRpbmcgaW50ciBlcGlkICVkLCB1cmIgMHglbHgiLCBlcGlkLCAodW5zaWduZWQgbG9uZyl1cmIpOworCisJdXJiLT5zdGF0dXMgPSBzdGF0dXM7CisJdXJiLT5hY3R1YWxfbGVuZ3RoID0gdXJiX3ByaXYtPnJ4X29mZnNldDsKKworCWRiZ19pbnRyKCJpbnRlcnJ1cHQgdXJiLT5hY3R1YWxfbGVuZ3RoID0gJWQiLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCisJLyogV2UgbGV0IGFueSBub24temVybyBzdGF0dXMgZnJvbSB0aGUgbGF5ZXIgYWJvdmUgaGF2ZSBwcmVjZWRlbmNlLiAqLworCWlmIChzdGF0dXMgPT0gMCkgeworCQkvKiBVUkJfU0hPUlRfTk9UX09LIG1lYW5zIHRoYXQgc2hvcnQgcmVhZHMgKHNob3J0ZXIgdGhhbiB0aGUgZW5kcG9pbnQncyBtYXggbGVuZ3RoKQorCQkgICBpcyB0byBiZSB0cmVhdGVkIGFzIGFuIGVycm9yLiAqLworCQlpZiAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spIHsKKwkJCWlmICh1cmItPmFjdHVhbF9sZW5ndGggIT0KKwkJCSAgICB1c2JfbWF4cGFja2V0KHVyYi0+ZGV2LCB1cmItPnBpcGUsIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpKSB7CisJCQkJdXJiLT5zdGF0dXMgPSAtRVJFTU9URUlPOworCQkJfQorCQl9CisJfQorCisJLyogVGhlIGRyaXZlciB3aWxsIHJlc3VibWl0IHRoZSBVUkIgc28gd2UgbmVlZCB0byByZW1vdmUgaXQgZmlyc3QgKi8KKyAgICAgICAgZXRyYXhfdXNiX3VubGlua191cmIodXJiLCAwKTsKKwlpZiAodXJiLT5jb21wbGV0ZSkgeworCQl1cmItPmNvbXBsZXRlKHVyYiwgTlVMTCk7CisJfQorCisJREJGRVhJVDsKK30KKworCitzdGF0aWMgaW50IGV0cmF4X3VzYl9zdWJtaXRfaXNvY191cmIoc3RydWN0IHVyYiAqdXJiKQoreworCWludCBlcGlkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlEQkZFTlRFUjsKKworCWRiZ19pc29jKCJTdWJtaXR0aW5nIGlzb2MgdXJiID0gMHglbHgiLCAodW5zaWduZWQgbG9uZyl1cmIpOworCisJLyogRXBpZCBhbGxvY2F0aW9uLCBlbXB0eSBjaGVjayBhbmQgbGlzdCBhZGQgbXVzdCBiZSBwcm90ZWN0ZWQuCisJICAgUmVhZCBhYm91dCB0aGlzIGluIGV0cmF4X3VzYl9zdWJtaXRfY3RybF91cmIuICovCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdXJiX2xpc3RfbG9jaywgZmxhZ3MpOworCS8qIElzIHRoZXJlIGFuIGFjdGl2ZSBlcGlkIGZvciB0aGlzIHVyYiA/ICovCisJZXBpZCA9IGV0cmF4X3VzYl9zZXR1cF9lcGlkKHVyYik7CisJaWYgKGVwaWQgPT0gLTEpIHsKKwkJREJGRVhJVDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXJiX2xpc3RfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBPaywgbm93IHdlIGdvdCB2YWxpZCBlbmRwb2ludCwgbGV0cyBpbnNlcnQgc29tZSB0cmFmZmljICovCisKKwl1cmItPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKworCS8qIEZpbmQgdGhlIGxhc3QgdXJiIGluIHRoZSBVUkJfTGlzdCBhbmQgYWRkIHRoaXMgdXJiIGFmdGVyIHRoYXQgb25lLgorCSAgIEFsc28gYWRkIHRoZSB0cmFmZmljLCB0aGF0IGlzIGRvIGFuIGV0cmF4X3VzYl9hZGRfdG9faXNvY19zYl9saXN0LiAgVGhpcworCSAgIGlzIGltcG9ydGFudCB0byBtYWtlIHRoaXMgaW4gInJlYWwgdGltZSIgc2luY2UgaXNvY2hyb25vdXMgdHJhZmZpYyBpcworCSAgIHRpbWUgc2Vuc2l0aXZlLiAqLworCisJZGJnX2lzb2MoIkFkZGluZyBpc29jIHVyYiB0byAocG9zc2libHkgZW1wdHkpIGxpc3QiKTsKKwl1cmJfbGlzdF9hZGQodXJiLCBlcGlkKTsKKwlldHJheF91c2JfYWRkX3RvX2lzb2Nfc2JfbGlzdCh1cmIsIGVwaWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVyYl9saXN0X2xvY2ssIGZsYWdzKTsKKworCURCRkVYSVQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2NoZWNrX2Vycm9yX2lzb2NfZXAoY29uc3QgaW50IGVwaWQpCit7CisJdW5zaWduZWQgbG9uZyBpbnQgZmxhZ3M7CisJaW50IGVycm9yX2NvZGU7CisJX191MzIgcl91c2JfZXB0X2RhdGE7CisKKwkvKiBXZSBjYW4ndCByZWFkIFJfVVNCX0VQSURfQVRUTiBoZXJlIHNpbmNlIGl0IHdvdWxkIGNsZWFyIHRoZSBpc29fZW9mLAorCSAgIGJ1bGtfZW90IGFuZCBlcGlkX2F0dG4gaW50ZXJydXB0cy4gIFNvIHdlIGp1c3QgY2hlY2sgdGhlIHN0YXR1cyBvZgorCSAgIHRoZSBlcGlkIHdpdGhvdXQgdGVzdGluZyBpZiBmb3IgaXQgaW4gUl9VU0JfRVBJRF9BVFROLiAqLworCisKKwlzYXZlX2ZsYWdzKGZsYWdzKTsKKwljbGkoKTsKKwkqUl9VU0JfRVBUX0lOREVYID0gSU9fRklFTEQoUl9VU0JfRVBUX0lOREVYLCB2YWx1ZSwgZXBpZCk7CisJbm9wKCk7CisJLyogTm90ZSB0aGF0IGFsdGhvdWdoIHRoZXJlIGFyZSBzZXBhcmF0ZSBSX1VTQl9FUFRfREFUQSBhbmQgUl9VU0JfRVBUX0RBVEFfSVNPCisJICAgcmVnaXN0ZXJzLCB0aGV5IGFyZSBsb2NhdGVkIGF0IHRoZSBzYW1lIGFkZHJlc3MgYW5kIGFyZSBvZiB0aGUgc2FtZSBzaXplLgorCSAgIEluIG90aGVyIHdvcmRzLCB0aGlzIHJlYWQgc2hvdWxkIGJlIG9rIGZvciBpc29jIGFsc28uICovCisJcl91c2JfZXB0X2RhdGEgPSAqUl9VU0JfRVBUX0RBVEE7CisJcmVzdG9yZV9mbGFncyhmbGFncyk7CisKKwllcnJvcl9jb2RlID0gSU9fRVhUUkFDVChSX1VTQl9FUFRfREFUQV9JU08sIGVycm9yX2NvZGUsIHJfdXNiX2VwdF9kYXRhKTsKKworCWlmIChyX3VzYl9lcHRfZGF0YSAmIElPX01BU0soUl9VU0JfRVBUX0RBVEEsIGhvbGQpKSB7CisJCXdhcm4oIkhvbGQgd2FzIHNldCBmb3IgZXBpZCAlZC4iLCBlcGlkKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChlcnJvcl9jb2RlID09IElPX1NUQVRFX1ZBTFVFKFJfVVNCX0VQVF9EQVRBX0lTTywgZXJyb3JfY29kZSwgbm9fZXJyb3IpKSB7CisKKwkJLyogVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgU0IgbGlzdCBvZiB0aGUgZXB0IHdhcyBjb21wbGV0ZWQgYmVmb3JlCisJCSAgIG5ldyBkYXRhIHdhcyBhcHBlbmRlZCB0byBpdC4gIFRoaXMgaXMgbm90IGFuIGVycm9yLCBidXQgaW5kaWNhdGVzCisJCSAgIGxhcmdlIHN5c3RlbSBvciBVU0IgbG9hZCBhbmQgY291bGQgcG9zc2libHkgY2F1c2UgdHJvdWJsZSBmb3IKKwkJICAgdmVyeSB0aW1pbmcgc2Vuc2l0aXZlIFVTQiBkZXZpY2UgZHJpdmVycyBzbyB3ZSBsb2cgaXQuCisJCSovCisJCWluZm8oIklzb2MuIGVwaWQgJWQgZGlzYWJsZWQgd2l0aCBubyBlcnJvciIsIGVwaWQpOworCQlyZXR1cm47CisKKwl9IGVsc2UgaWYgKGVycm9yX2NvZGUgPT0gSU9fU1RBVEVfVkFMVUUoUl9VU0JfRVBUX0RBVEFfSVNPLCBlcnJvcl9jb2RlLCBzdGFsbCkpIHsKKwkJLyogTm90IHJlYWxseSBhIHByb3RvY29sIGVycm9yLCBqdXN0IHNheXMgdGhhdCB0aGUgZW5kcG9pbnQgZ2F2ZQorCQkgICBhIHN0YWxsIHJlc3BvbnNlLiBOb3RlIHRoYXQgZXJyb3JfY29kZSBjYW5ub3QgYmUgc3RhbGwgZm9yIGlzb2MuICovCisJCXBhbmljKCJJc29jIHRyYWZmaWMgY2Fubm90IHN0YWxsIik7CisKKwl9IGVsc2UgaWYgKGVycm9yX2NvZGUgPT0gSU9fU1RBVEVfVkFMVUUoUl9VU0JfRVBUX0RBVEFfSVNPLCBlcnJvcl9jb2RlLCBidXNfZXJyb3IpKSB7CisJCS8qIFR3byBkZXZpY2VzIHJlc3BvbmRlZCB0byBhIHRyYW5zYWN0aW9uIHJlcXVlc3QuIE11c3QgYmUgcmVzb2x2ZWQKKwkJICAgYnkgc29mdHdhcmUuIEZJWE1FOiBSZXNldCBwb3J0cz8gKi8KKwkJcGFuaWMoIkJ1cyBlcnJvciBmb3IgZXBpZCAlZC4iCisJCSAgICAgICIgVHdvIGRldmljZXMgcmVzcG9uZGVkIHRvIHRyYW5zYWN0aW9uIHJlcXVlc3QiLAorCQkgICAgICBlcGlkKTsKKworCX0gZWxzZSBpZiAoZXJyb3JfY29kZSA9PSBJT19TVEFURV9WQUxVRShSX1VTQl9FUFRfREFUQSwgZXJyb3JfY29kZSwgYnVmZmVyX2Vycm9yKSkgeworCQkvKiBETUEgb3ZlcnJ1biBvciB1bmRlcnJ1bi4gKi8KKwkJd2FybigiQnVmZmVyIG92ZXJydW4vdW5kZXJydW4gZm9yIGVwaWQgJWQuIERNQSB0b28gYnVzeT8iLCBlcGlkKTsKKworCQkvKiBJdCBzZWVtcyB0aGF0IGVycm9yX2NvZGUgPSBidWZmZXJfZXJyb3IgaW4KKwkJICAgUl9VU0JfRVBUX0RBVEEvUl9VU0JfRVBUX0RBVEFfSVNPIGFuZCBvdXJ1biA9IHllcyBpbiBSX1VTQl9TVEFUVVMKKwkJICAgYXJlIHRoZSBzYW1lIGVycm9yLiAqLworCX0KK30KKworCitzdGF0aWMgdm9pZCBldHJheF91c2JfYWRkX3RvX2lzb2Nfc2JfbGlzdChzdHJ1Y3QgdXJiICp1cmIsIGludCBlcGlkKQoreworCisJaW50IGkgPSAwOworCisJZXRyYXhfdXJiX3ByaXZfdCAqdXJiX3ByaXY7CisJVVNCX1NCX0Rlc2NfdCAqcHJldl9zYl9kZXNjLCAgKm5leHRfc2JfZGVzYywgKnRlbXBfc2JfZGVzYzsKKworCURCRkVOVEVSOworCisJcHJldl9zYl9kZXNjID0gbmV4dF9zYl9kZXNjID0gdGVtcF9zYl9kZXNjID0gTlVMTDsKKworCXVyYl9wcml2ID0ga21hbGxvYyhzaXplb2YoZXRyYXhfdXJiX3ByaXZfdCksIEdGUF9BVE9NSUMpOworCWFzc2VydCh1cmJfcHJpdiAhPSBOVUxMKTsKKwltZW1zZXQodXJiX3ByaXYsIDAsIHNpemVvZihldHJheF91cmJfcHJpdl90KSk7CisKKwl1cmItPmhjcHJpdiA9IHVyYl9wcml2OworCXVyYl9wcml2LT5lcGlkID0gZXBpZDsKKworCWlmICh1c2JfcGlwZW91dCh1cmItPnBpcGUpKSB7CisKKwkJaWYgKHVyYi0+bnVtYmVyX29mX3BhY2tldHMgPT0gMCkgcGFuaWMoImV0cmF4X3VzYl9hZGRfdG9faXNvY19zYl9saXN0IDAgcGFja2V0c1xuIik7CisKKwkJZGJnX2lzb2MoIlRyYW5zZmVyIGZvciBlcGlkICVkIGlzIE9VVCIsIGVwaWQpOworCQlkYmdfaXNvYygiJWQgcGFja2V0cyBpbiBVUkIiLCB1cmItPm51bWJlcl9vZl9wYWNrZXRzKTsKKworCQkvKiBDcmVhdGUgb25lIFNCIGRlc2NyaXB0b3IgZm9yIGVhY2ggcGFja2V0IGFuZCBsaW5rIHRoZW0gdG9nZXRoZXIuICovCisJCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJCWlmICghdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGgpCisJCQkJY29udGludWU7CisKKwkJCW5leHRfc2JfZGVzYyA9IChVU0JfU0JfRGVzY190KilrbWVtX2NhY2hlX2FsbG9jKHVzYl9kZXNjX2NhY2hlLCBTTEFCX0FUT01JQyk7CisJCQlhc3NlcnQobmV4dF9zYl9kZXNjICE9IE5VTEwpOworCisJCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGggPiAwKSB7CisKKwkJCQluZXh0X3NiX2Rlc2MtPmNvbW1hbmQgPSAoSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIHR0LCBvdXQpIHwKKwkJCQkJCQkgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGVvdCwgeWVzKSk7CisKKwkJCQluZXh0X3NiX2Rlc2MtPnN3X2xlbiA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoOworCQkJCW5leHRfc2JfZGVzYy0+YnVmID0gdmlydF90b19waHlzKChjaGFyKil1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0KTsKKworCQkJCS8qIENoZWNrIGlmIGZ1bGwgbGVuZ3RoIHRyYW5zZmVyLiAqLworCQkJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCA9PQorCQkJCSAgICB1c2JfbWF4cGFja2V0KHVyYi0+ZGV2LCB1cmItPnBpcGUsIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpKSB7CisJCQkJCW5leHRfc2JfZGVzYy0+Y29tbWFuZCB8PSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZnVsbCwgeWVzKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWRiZ19pc29jKCJ6ZXJvIGxlbiBwYWNrZXQiKTsKKwkJCQluZXh0X3NiX2Rlc2MtPmNvbW1hbmQgPSAoSU9fRklFTEQoVVNCX1NCX2NvbW1hbmQsIHJlbSwgMCkgfAorCQkJCQkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgdHQsIHpvdXQpIHwKKwkJCQkJCQkgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGVvdCwgeWVzKSB8CisJCQkJCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBmdWxsLCB5ZXMpKTsKKworCQkJCW5leHRfc2JfZGVzYy0+c3dfbGVuID0gMTsKKwkJCQluZXh0X3NiX2Rlc2MtPmJ1ZiA9IHZpcnRfdG9fcGh5cygmem91dF9idWZmZXJbMF0pOworCQkJfQorCisJCQkvKiBGaXJzdCBTQiBkZXNjcmlwdG9yIHRoYXQgYmVsb25ncyB0byB0aGlzIHVyYiAqLworCQkJaWYgKGkgPT0gMCkKKwkJCQl1cmJfcHJpdi0+Zmlyc3Rfc2IgPSBuZXh0X3NiX2Rlc2M7CisJCQllbHNlCisJCQkJcHJldl9zYl9kZXNjLT5uZXh0ID0gdmlydF90b19waHlzKG5leHRfc2JfZGVzYyk7CisKKwkJCXByZXZfc2JfZGVzYyA9IG5leHRfc2JfZGVzYzsKKwkJfQorCisJCW5leHRfc2JfZGVzYy0+Y29tbWFuZCB8PSAoSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGludHIsIHllcykgfAorCQkJCQkgIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb2wsIHllcykpOworCQluZXh0X3NiX2Rlc2MtPm5leHQgPSAwOworCQl1cmJfcHJpdi0+bGFzdF9zYiA9IG5leHRfc2JfZGVzYzsKKworCX0gZWxzZSBpZiAodXNiX3BpcGVpbih1cmItPnBpcGUpKSB7CisKKwkJZGJnX2lzb2MoIlRyYW5zZmVyIGZvciBlcGlkICVkIGlzIElOIiwgZXBpZCk7CisJCWRiZ19pc29jKCJ0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gJWQiLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCQlkYmdfaXNvYygicmVtIGlzIGNhbGN1bGF0ZWQgdG8gJWQiLCB1cmItPmlzb19mcmFtZV9kZXNjW3VyYi0+bnVtYmVyX29mX3BhY2tldHMgLSAxXS5sZW5ndGgpOworCisJCS8qIE5vdGUgdGhhdCBpbiBkZXNjcmlwdG9ycyBmb3IgcGVyaW9kaWMgdHJhZmZpYyBhcmUgbm90IGNvbnN1bWVkLiBUaGlzIG1lYW5zIHRoYXQKKwkJICAgdGhlIFVTQiBjb250cm9sbGVyIG5ldmVyIHByb3BhZ2F0ZXMgaW4gdGhlIFNCIGxpc3QuIEluIG90aGVyIHdvcmRzLCBpZiB0aGVyZSBhbHJlYWR5CisJCSAgIGlzIGFuIFNCIGRlc2NyaXB0b3IgaW4gdGhlIGxpc3QgZm9yIHRoaXMgRVAgd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZy4gKi8KKwkJaWYgKFR4SXNvY0VQTGlzdFtlcGlkXS5zdWIgPT0gMCkgeworCQkJZGJnX2lzb2MoIklzb2MgdHJhZmZpYyBub3QgYWxyZWFkeSBydW5uaW5nLCBhbGxvY2F0aW5nIFNCIik7CisKKwkJCW5leHRfc2JfZGVzYyA9IChVU0JfU0JfRGVzY190KilrbWVtX2NhY2hlX2FsbG9jKHVzYl9kZXNjX2NhY2hlLCBTTEFCX0FUT01JQyk7CisJCQlhc3NlcnQobmV4dF9zYl9kZXNjICE9IE5VTEwpOworCisJCQluZXh0X3NiX2Rlc2MtPmNvbW1hbmQgPSAoSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIHR0LCBpbikgfAorCQkJCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb3QsIHllcykgfAorCQkJCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb2wsIHllcykpOworCisJCQluZXh0X3NiX2Rlc2MtPm5leHQgPSAwOworCQkJbmV4dF9zYl9kZXNjLT5zd19sZW4gPSAxOyAvKiBBY3R1YWwgbnVtYmVyIG9mIHBhY2tldHMgaXMgbm90IHJlbGV2YW50CisJCQkJCQkgICAgIGZvciBwZXJpb2RpYyBpbiB0cmFmZmljIGFzIGxvbmcgYXMgaXQgaXMgbW9yZQorCQkJCQkJICAgICB0aGFuIHplcm8uICBTZXQgdG8gMSBhbHdheXMuICovCisJCQluZXh0X3NiX2Rlc2MtPmJ1ZiA9IDA7CisKKwkJCS8qIFRoZSByZW0gZmllbGQgaXMgZG9uJ3QgY2FyZSBmb3IgaXNvYyB0cmFmZmljLCBzbyB3ZSBkb24ndCBzZXQgaXQuICovCisKKwkJCS8qIE9ubHkgb25lIFNCIGRlc2NyaXB0b3IgdGhhdCBiZWxvbmdzIHRvIHRoaXMgdXJiLiAqLworCQkJdXJiX3ByaXYtPmZpcnN0X3NiID0gbmV4dF9zYl9kZXNjOworCQkJdXJiX3ByaXYtPmxhc3Rfc2IgPSBuZXh0X3NiX2Rlc2M7CisKKwkJfSBlbHNlIHsKKworCQkJZGJnX2lzb2MoIklzb2MgdHJhZmZpYyBhbHJlYWR5IHJ1bm5pbmcsIGp1c3Qgc2V0dGluZyBmaXJzdC9sYXN0X3NiIik7CisKKwkJCS8qIEVhY2ggRVAgZm9yIGlzb2MgaW4gd2lsbCBoYXZlIG9ubHkgb25lIFNCIGRlc2NyaXB0b3IsIHNldHVwIHdoZW4gc3VibWl0dGluZyB0aGUKKwkJCSAgIGFscmVhZHkgYWN0aXZlIHVyYi4gTm90ZSB0aGF0IGV2ZW4gdGhvdWdoIHdlIG1heSBoYXZlIHNldmVyYWwgZmlyc3Rfc2IvbGFzdF9zYgorCQkJICAgcG9pbnRpbmcgYXQgdGhlIHNhbWUgU0IgZGVzY3JpcHRvciwgdGhleSBhcmUgZnJlZWQgb25seSBvbmNlICh3aGVuIHRoZSBsaXN0IGhhcworCQkJICAgYmVjb21lIGVtcHR5KS4gKi8KKwkJCXVyYl9wcml2LT5maXJzdF9zYiA9IHBoeXNfdG9fdmlydChUeElzb2NFUExpc3RbZXBpZF0uc3ViKTsKKwkJCXVyYl9wcml2LT5sYXN0X3NiID0gcGh5c190b192aXJ0KFR4SXNvY0VQTGlzdFtlcGlkXS5zdWIpOworCQkJcmV0dXJuOworCQl9CisKKwl9CisKKwkvKiBGaW5kIHRoZSBzcG90IHRvIGluc2VydCB0aGlzIHVyYiBhbmQgYWRkIGl0LiAqLworCWlmIChUeElzb2NFUExpc3RbZXBpZF0uc3ViID09IDApIHsKKwkJLyogRmlyc3QgU0IgZGVzY3JpcHRvciBpbnNlcnRlZCBpbiB0aGlzIGxpc3QgKGluIG9yIG91dCkuICovCisJCWRiZ19pc29jKCJJbnNlcnRpbmcgU0IgZGVzYyBmaXJzdCBpbiBsaXN0Iik7CisJCVR4SXNvY0VQTGlzdFtlcGlkXS5od19sZW4gPSAwOworCQlUeElzb2NFUExpc3RbZXBpZF0uc3ViID0gdmlydF90b19waHlzKHVyYl9wcml2LT5maXJzdF9zYik7CisKKwl9IGVsc2UgeworCQkvKiBJc29jaHJvbm91cyB0cmFmZmljIGlzIGFscmVhZHkgcnVubmluZywgaW5zZXJ0IG5ldyB0cmFmZmljIGxhc3QgKG9ubHkgb3V0KS4gKi8KKwkJZGJnX2lzb2MoIkluc2VydGluZyBTQiBkZXNjIGxhc3QgaW4gbGlzdCIpOworCQl0ZW1wX3NiX2Rlc2MgPSBwaHlzX3RvX3ZpcnQoVHhJc29jRVBMaXN0W2VwaWRdLnN1Yik7CisJCXdoaWxlICgodGVtcF9zYl9kZXNjLT5jb21tYW5kICYgSU9fTUFTSyhVU0JfU0JfY29tbWFuZCwgZW9sKSkgIT0KKwkJICAgICAgIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb2wsIHllcykpIHsKKwkJCWFzc2VydCh0ZW1wX3NiX2Rlc2MtPm5leHQpOworCQkJdGVtcF9zYl9kZXNjID0gcGh5c190b192aXJ0KHRlbXBfc2JfZGVzYy0+bmV4dCk7CisJCX0KKwkJZGJnX2lzb2MoIkFwcGVuZGluZyBsaXN0IG9uIGRlc2MgMHglcCIsIHRlbXBfc2JfZGVzYyk7CisKKwkJLyogTmV4dCBwb2ludGVyIG11c3QgYmUgc2V0IGJlZm9yZSBlb2wgaXMgcmVtb3ZlZC4gKi8KKwkJdGVtcF9zYl9kZXNjLT5uZXh0ID0gdmlydF90b19waHlzKHVyYl9wcml2LT5maXJzdF9zYik7CisJCS8qIENsZWFyIHRoZSBwcmV2aW91cyBlbmQgb2YgbGlzdCBmbGFnIHNpbmNlIHRoZXJlIGlzIGEgbmV3IGluIHRoZQorCQkgICBhZGRlZCBTQiBkZXNjcmlwdG9yIGxpc3QuICovCisJCXRlbXBfc2JfZGVzYy0+Y29tbWFuZCAmPSB+SU9fTUFTSyhVU0JfU0JfY29tbWFuZCwgZW9sKTsKKworCQlpZiAoIShUeElzb2NFUExpc3RbZXBpZF0uY29tbWFuZCAmIElPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSkpKSB7CisJCQkvKiA4LjguNSBpbiBEZXNpZ25lcidzIFJlZmVyZW5jZSBzYXlzIHdlIHNob3VsZCBjaGVjayBmb3IgYW5kIGNvcnJlY3QKKwkJCSAgIGFueSBlcnJvcnMgaW4gdGhlIEVQIGhlcmUuICBUaGF0IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IGlmIGVwaWRfYXR0bgorCQkJICAgaXMgaGFuZGxlZCBjb3JyZWN0bHksIHNvIHdlIGFzc3VtZSBhbGwgaXMgb2suICovCisJCQlkYmdfaXNvYygiRVAgZGlzYWJsZWQiKTsKKwkJCWV0cmF4X3VzYl9jaGVja19lcnJvcl9pc29jX2VwKGVwaWQpOworCisJCQkvKiBUaGUgU0IgbGlzdCB3YXMgZXhoYXVzdGVkLiAqLworCQkJaWYgKHZpcnRfdG9fcGh5cyh1cmJfcHJpdi0+bGFzdF9zYikgIT0gVHhJc29jRVBMaXN0W2VwaWRdLnN1YikgeworCQkJCS8qIFRoZSBuZXcgc3VibGlzdCBkaWQgbm90IGdldCBwcm9jZXNzZWQgYmVmb3JlIHRoZSBFUCB3YXMKKwkJCQkgICBkaXNhYmxlZC4gIFNldHVwIHRoZSBFUCBhZ2Fpbi4gKi8KKwkJCQlkYmdfaXNvYygiU2V0IEVQIHN1YiB0byBuZXcgbGlzdCIpOworCQkJCVR4SXNvY0VQTGlzdFtlcGlkXS5od19sZW4gPSAwOworCQkJCVR4SXNvY0VQTGlzdFtlcGlkXS5zdWIgPSB2aXJ0X3RvX3BoeXModXJiX3ByaXYtPmZpcnN0X3NiKTsKKwkJCX0KKwkJfQorCX0KKworCWlmICh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX0lTT19BU0FQKSB7CisJCS8qIFRoZSBpc29jIHRyYW5zZmVyIHNob3VsZCBiZSBzdGFydGVkIGFzIHNvb24gYXMgcG9zc2libGUuIFRoZSBzdGFydF9mcmFtZQorCQkgICBmaWVsZCBpcyBhIHJldHVybiB2YWx1ZSBpZiBVUkJfSVNPX0FTQVAgd2FzIHNldC4gQ29tcGFyaW5nIFJfVVNCX0ZNX05VTUJFUgorCQkgICB3aXRoIGEgVVNCIENoaWVmIHRyYWNlIHNob3dzIHRoYXQgdGhlIGZpcnN0IGlzb2MgSU4gdG9rZW4gaXMgc2VudCAyIGZyYW1lcworCQkgICBsYXRlci4gSSdtIG5vdCBzdXJlIGhvdyB0aGlzIGFmZmVjdHMgdXNhZ2Ugb2YgdGhlIHN0YXJ0X2ZyYW1lIGZpZWxkIGJ5IHRoZQorCQkgICBkZXZpY2UgZHJpdmVyLCBvciBob3cgaXQgYWZmZWN0cyB0aGluZ3Mgd2hlbiBVU0JfSVNPX0FTQVAgaXMgbm90IHNldCwgc28KKwkJICAgdGhlcmVmb3JlIHRoZXJlJ3Mgbm8gY29tcGVuc2F0aW9uIGZvciB0aGUgMiBmcmFtZSAibGFnIiBoZXJlLiAqLworCQl1cmItPnN0YXJ0X2ZyYW1lID0gKCpSX1VTQl9GTV9OVU1CRVIgJiAweDdmZik7CisJCVR4SXNvY0VQTGlzdFtlcGlkXS5jb21tYW5kIHw9IElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlbmFibGUsIHllcyk7CisJCXVyYl9wcml2LT51cmJfc3RhdGUgPSBTVEFSVEVEOworCQlkYmdfaXNvYygiVVJCX0lTT19BU0FQIHNldCwgdXJiLT5zdGFydF9mcmFtZSBzZXQgdG8gJWQiLCB1cmItPnN0YXJ0X2ZyYW1lKTsKKwl9IGVsc2UgeworCQkvKiBOb3Qgc3RhcnRlZCB5ZXQuICovCisJCXVyYl9wcml2LT51cmJfc3RhdGUgPSBOT1RfU1RBUlRFRDsKKwkJZGJnX2lzb2MoInVyYl9wcml2LT51cmJfc3RhdGUgc2V0IHRvIE5PVF9TVEFSVEVEIik7CisJfQorCisgICAgICAgLyogV2Ugc3RhcnQgdGhlIERNQSBzdWIgY2hhbm5lbCB3aXRob3V0IGNoZWNraW5nIGlmIGl0J3MgcnVubmluZyBvciBub3QsIGJlY2F1c2U6CisJICAxKSBJZiBpdCdzIGFscmVhZHkgcnVubmluZywgaXNzdWluZyB0aGUgc3RhcnQgY29tbWFuZCBpcyBhIG5vcC4KKwkgIDIpIFdlIGF2b2lkIGEgdGVzdC1hbmQtc2V0IHJhY2UgY29uZGl0aW9uLiAqLworCSpSX0RNQV9DSDhfU1VCM19DTUQgPSBJT19TVEFURShSX0RNQV9DSDhfU1VCM19DTUQsIGNtZCwgc3RhcnQpOworCisJREJGRVhJVDsKK30KKworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2NvbXBsZXRlX2lzb2NfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cykKK3sKKwlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdiA9IChldHJheF91cmJfcHJpdl90ICopdXJiLT5oY3ByaXY7CisJaW50IGVwaWQgPSB1cmJfcHJpdi0+ZXBpZDsKKwlpbnQgYXV0b19yZXN1Ym1pdCA9IDA7CisKKwlEQkZFTlRFUjsKKwlkYmdfaXNvYygiY29tcGxldGUgdXJiIDB4JXAsIHN0YXR1cyAlZCIsIHVyYiwgc3RhdHVzKTsKKworCWlmIChzdGF0dXMpCisJCXdhcm4oIkNvbXBsZXRpbmcgaXNvYyB1cmIgd2l0aCBzdGF0dXMgJWQuIiwgc3RhdHVzKTsKKworCWlmICh1c2JfcGlwZWluKHVyYi0+cGlwZSkpIHsKKwkJaW50IGk7CisKKwkJLyogTWFrZSB0aGF0IGFsbCBpc29jIHBhY2tldHMgaGF2ZSBzdGF0dXMgYW5kIGxlbmd0aCBzZXQgYmVmb3JlCisJCSAgIGNvbXBsZXRpbmcgdGhlIHVyYi4gKi8KKwkJZm9yIChpID0gdXJiX3ByaXYtPmlzb2NfcGFja2V0X2NvdW50ZXI7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA9IDA7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyA9IC1FUFJPVE87CisJCX0KKworCQl1cmJfbGlzdF9kZWwodXJiLCBlcGlkKTsKKworCQlpZiAoIWxpc3RfZW1wdHkoJnVyYl9saXN0W2VwaWRdKSkgeworCQkJKChldHJheF91cmJfcHJpdl90ICopKHVyYl9saXN0X2ZpcnN0KGVwaWQpLT5oY3ByaXYpKS0+dXJiX3N0YXRlID0gU1RBUlRFRDsKKwkJfSBlbHNlIHsKKwkJCXVuc2lnbmVkIGxvbmcgaW50IGZsYWdzOworCQkJaWYgKFR4SXNvY0VQTGlzdFtlcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkgeworCQkJCS8qIFRoZSBFUCB3YXMgZW5hYmxlZCwgZGlzYWJsZSBpdCBhbmQgd2FpdC4gKi8KKwkJCQlUeElzb2NFUExpc3RbZXBpZF0uY29tbWFuZCAmPSB+SU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKTsKKworCQkJCS8qIEFoLCB0aGUgbHV4dXJ5IG9mIGJ1c3ktd2FpdC4gKi8KKwkJCQl3aGlsZSAoKlJfRE1BX0NIOF9TVUIzX0VQID09IHZpcnRfdG9fcGh5cygmVHhJc29jRVBMaXN0W2VwaWRdKSk7CisJCQl9CisKKwkJCWV0cmF4X3JlbW92ZV9mcm9tX3NiX2xpc3QodXJiKTsKKwkJCVR4SXNvY0VQTGlzdFtlcGlkXS5zdWIgPSAwOworCQkJVHhJc29jRVBMaXN0W2VwaWRdLmh3X2xlbiA9IDA7CisKKwkJCXNhdmVfZmxhZ3MoZmxhZ3MpOworCQkJY2xpKCk7CisJCQlldHJheF91c2JfZnJlZV9lcGlkKGVwaWQpOworCQkJcmVzdG9yZV9mbGFncyhmbGFncyk7CisJCX0KKworCQl1cmItPmhjcHJpdiA9IDA7CisJCWtmcmVlKHVyYl9wcml2KTsKKworCQkvKiBSZWxlYXNlIGFsbG9jYXRlZCBiYW5kd2lkdGguICovCisJCXVzYl9yZWxlYXNlX2JhbmR3aWR0aCh1cmItPmRldiwgdXJiLCAwKTsKKwl9IGVsc2UgaWYgKHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpIHsKKwkJaW50IGZyZWVkX2Rlc2NyOworCisJCWRiZ19pc29jKCJJc29jIG91dCB1cmIgY29tcGxldGUgMHglcCIsIHVyYik7CisKKwkJLyogVXBkYXRlIHRoZSB1cmIgbGlzdC4gKi8KKwkJdXJiX2xpc3RfZGVsKHVyYiwgZXBpZCk7CisKKwkJZnJlZWRfZGVzY3IgPSBldHJheF9yZW1vdmVfZnJvbV9zYl9saXN0KHVyYik7CisJCWRiZ19pc29jKCJmcmVlZCAlZCBkZXNjcmlwdG9ycyBvZiAlZCBwYWNrZXRzIiwgZnJlZWRfZGVzY3IsIHVyYi0+bnVtYmVyX29mX3BhY2tldHMpOworCQlhc3NlcnQoZnJlZWRfZGVzY3IgPT0gdXJiLT5udW1iZXJfb2ZfcGFja2V0cyk7CisJCXVyYi0+aGNwcml2ID0gMDsKKwkJa2ZyZWUodXJiX3ByaXYpOworCisJCS8qIFJlbGVhc2UgYWxsb2NhdGVkIGJhbmR3aWR0aC4gKi8KKwkJdXNiX3JlbGVhc2VfYmFuZHdpZHRoKHVyYi0+ZGV2LCB1cmIsIDApOworCX0KKworCXVyYi0+c3RhdHVzID0gc3RhdHVzOworCWlmICh1cmItPmNvbXBsZXRlKSB7CisJCXVyYi0+Y29tcGxldGUodXJiLCBOVUxMKTsKKwl9CisKKwlpZiAoYXV0b19yZXN1Ym1pdCkgeworCQkvKiBDaGVjayB0aGF0IHVyYiB3YXMgbm90IHVubGlua2VkIGJ5IHRoZSBjb21wbGV0ZSBjYWxsYmFjay4gKi8KKwkJaWYgKF9fdXJiX2xpc3RfZW50cnkodXJiLCBlcGlkKSkgeworCQkJLyogTW92ZSB0aGlzIG9uZSBkb3duIHRoZSBsaXN0LiAqLworCQkJdXJiX2xpc3RfbW92ZV9sYXN0KHVyYiwgZXBpZCk7CisKKwkJCS8qIE1hcmsgdGhlIG5vdyBmaXJzdCB1cmIgYXMgc3RhcnRlZCAobWF5IGFscmVhZHkgYmUpLiAqLworCQkJKChldHJheF91cmJfcHJpdl90ICopKHVyYl9saXN0X2ZpcnN0KGVwaWQpLT5oY3ByaXYpKS0+dXJiX3N0YXRlID0gU1RBUlRFRDsKKworCQkJLyogTXVzdCBzZXQgdGhpcyB0byAwIHNpbmNlIHRoaXMgdXJiIGlzIHN0aWxsIGFjdGl2ZSBhZnRlcgorCQkJICAgY29tcGxldGlvbi4gKi8KKwkJCXVyYl9wcml2LT5pc29jX3BhY2tldF9jb3VudGVyID0gMDsKKwkJfSBlbHNlIHsKKwkJCXdhcm4oIihJU09DKSBhdXRvbWF0aWMgcmVzdWJtaXQgdXJiIDB4JXAgcmVtb3ZlZCBieSBjb21wbGV0ZS4iLCB1cmIpOworCQl9CisJfQorCisJREJGRVhJVDsKK30KKworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2NvbXBsZXRlX3VyYihzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpCit7CisJc3dpdGNoICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSkgeworCWNhc2UgUElQRV9CVUxLOgorCQlldHJheF91c2JfY29tcGxldGVfYnVsa191cmIodXJiLCBzdGF0dXMpOworCQlicmVhazsKKwljYXNlIFBJUEVfQ09OVFJPTDoKKwkJZXRyYXhfdXNiX2NvbXBsZXRlX2N0cmxfdXJiKHVyYiwgc3RhdHVzKTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwkJZXRyYXhfdXNiX2NvbXBsZXRlX2ludHJfdXJiKHVyYiwgc3RhdHVzKTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQlldHJheF91c2JfY29tcGxldGVfaXNvY191cmIodXJiLCBzdGF0dXMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIoIlVua25vd24gcGlwZXR5cGUiKTsKKwl9Cit9CisKKworCitzdGF0aWMgaXJxcmV0dXJuX3QgZXRyYXhfdXNiX2hjX2ludGVycnVwdF90b3BfaGFsZihpbnQgaXJxLCB2b2lkICp2aGMsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVzYl9pbnRlcnJ1cHRfcmVnaXN0ZXJzX3QgKnJlZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCV9fdTMyIGlycV9tYXNrOworCV9fdTggc3RhdHVzOworCV9fdTMyIGVwaWRfYXR0bjsKKwlfX3UxNiBwb3J0X3N0YXR1c18xOworCV9fdTE2IHBvcnRfc3RhdHVzXzI7CisJX191MzIgZm1fbnVtYmVyOworCisJREJGRU5URVI7CisKKwkvKiBSZWFkIGNyaXRpY2FsIHJlZ2lzdGVycyBpbnRvIGxvY2FsIHZhcmlhYmxlcywgZG8ga21hbGxvYyBhZnRlcndhcmRzLiAqLworCXNhdmVfZmxhZ3MoZmxhZ3MpOworCWNsaSgpOworCisJaXJxX21hc2sgPSAqUl9VU0JfSVJRX01BU0tfUkVBRDsKKwkvKiBSZWFkaW5nIFJfVVNCX1NUQVRVUyBjbGVhcnMgdGhlIGN0bF9zdGF0dXMgaW50ZXJydXB0LiBOb3RlIHRoYXQgUl9VU0JfU1RBVFVTCisJICAgbXVzdCBiZSByZWFkIGJlZm9yZSBSX1VTQl9FUElEX0FUVE4gc2luY2UgcmVhZGluZyB0aGUgbGF0dGVyIGNsZWFycyB0aGUKKwkgICBvdXJ1biBhbmQgcGVycm9yIGZpZWxkcyBvZiBSX1VTQl9TVEFUVVMuICovCisJc3RhdHVzID0gKlJfVVNCX1NUQVRVUzsKKworCS8qIFJlYWRpbmcgUl9VU0JfRVBJRF9BVFROIGNsZWFycyB0aGUgaXNvX2VvZiwgYnVsa19lb3QgYW5kIGVwaWRfYXR0biBpbnRlcnJ1cHRzLiAqLworCWVwaWRfYXR0biA9ICpSX1VTQl9FUElEX0FUVE47CisKKwkvKiBSZWFkaW5nIFJfVVNCX1JIX1BPUlRfU1RBVFVTXzEgYW5kIFJfVVNCX1JIX1BPUlRfU1RBVFVTXzIgY2xlYXJzIHRoZQorCSAgIHBvcnRfc3RhdHVzIGludGVycnVwdC4gKi8KKwlwb3J0X3N0YXR1c18xID0gKlJfVVNCX1JIX1BPUlRfU1RBVFVTXzE7CisJcG9ydF9zdGF0dXNfMiA9ICpSX1VTQl9SSF9QT1JUX1NUQVRVU18yOworCisJLyogUmVhZGluZyBSX1VTQl9GTV9OVU1CRVIgY2xlYXJzIHRoZSBzb2YgaW50ZXJydXB0LiAqLworCS8qIE5vdGU6IHRoZSBsb3dlciAxMSBiaXRzIGNvbnRhaW4gdGhlIGFjdHVhbCBmcmFtZSBudW1iZXIsIHNlbnQgd2l0aCBlYWNoIHNvZi4gKi8KKwlmbV9udW1iZXIgPSAqUl9VU0JfRk1fTlVNQkVSOworCisJcmVzdG9yZV9mbGFncyhmbGFncyk7CisKKwlyZWcgPSAodXNiX2ludGVycnVwdF9yZWdpc3RlcnNfdCAqKWttZW1fY2FjaGVfYWxsb2ModG9wX2hhbGZfcmVnX2NhY2hlLCBTTEFCX0FUT01JQyk7CisKKwlhc3NlcnQocmVnICE9IE5VTEwpOworCisJcmVnLT5oYyA9IChldHJheF9oY190ICopdmhjOworCisJLyogTm93IHB1dCByZWdpc3RlciB2YWx1ZXMgaW50byBrbWFsbG9jJ2QgYXJlYS4gKi8KKwlyZWctPnJfdXNiX2lycV9tYXNrX3JlYWQgPSBpcnFfbWFzazsKKwlyZWctPnJfdXNiX3N0YXR1cyA9IHN0YXR1czsKKwlyZWctPnJfdXNiX2VwaWRfYXR0biA9IGVwaWRfYXR0bjsKKwlyZWctPnJfdXNiX3JoX3BvcnRfc3RhdHVzXzEgPSBwb3J0X3N0YXR1c18xOworCXJlZy0+cl91c2JfcmhfcG9ydF9zdGF0dXNfMiA9IHBvcnRfc3RhdHVzXzI7CisJcmVnLT5yX3VzYl9mbV9udW1iZXIgPSBmbV9udW1iZXI7CisKKyAgICAgICAgSU5JVF9XT1JLKCZyZWctPnVzYl9iaCwgZXRyYXhfdXNiX2hjX2ludGVycnVwdF9ib3R0b21faGFsZiwgcmVnKTsKKyAgICAgICAgc2NoZWR1bGVfd29yaygmcmVnLT51c2JfYmgpOworCisJREJGRVhJVDsKKworICAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9oY19pbnRlcnJ1cHRfYm90dG9tX2hhbGYodm9pZCAqZGF0YSkKK3sKKwl1c2JfaW50ZXJydXB0X3JlZ2lzdGVyc190ICpyZWcgPSAodXNiX2ludGVycnVwdF9yZWdpc3RlcnNfdCAqKWRhdGE7CisJX191MzIgaXJxX21hc2sgPSByZWctPnJfdXNiX2lycV9tYXNrX3JlYWQ7CisKKwlEQkZFTlRFUjsKKworCS8qIEludGVycnVwdHMgYXJlIGhhbmRsZWQgaW4gb3JkZXIgb2YgcHJpb3JpdHkuICovCisJaWYgKGlycV9tYXNrICYgSU9fTUFTSyhSX1VTQl9JUlFfTUFTS19SRUFELCBlcGlkX2F0dG4pKSB7CisJCWV0cmF4X3VzYl9oY19lcGlkX2F0dG5faW50ZXJydXB0KHJlZyk7CisJfQorCWlmIChpcnFfbWFzayAmIElPX01BU0soUl9VU0JfSVJRX01BU0tfUkVBRCwgcG9ydF9zdGF0dXMpKSB7CisJCWV0cmF4X3VzYl9oY19wb3J0X3N0YXR1c19pbnRlcnJ1cHQocmVnKTsKKwl9CisJaWYgKGlycV9tYXNrICYgSU9fTUFTSyhSX1VTQl9JUlFfTUFTS19SRUFELCBjdGxfc3RhdHVzKSkgeworCQlldHJheF91c2JfaGNfY3RsX3N0YXR1c19pbnRlcnJ1cHQocmVnKTsKKwl9CisJaWYgKGlycV9tYXNrICYgSU9fTUFTSyhSX1VTQl9JUlFfTUFTS19SRUFELCBpc29fZW9mKSkgeworCQlldHJheF91c2JfaGNfaXNvY19lb2ZfaW50ZXJydXB0KCk7CisJfQorCWlmIChpcnFfbWFzayAmIElPX01BU0soUl9VU0JfSVJRX01BU0tfUkVBRCwgYnVsa19lb3QpKSB7CisJCS8qIFVwZGF0ZS9yZXN0YXJ0IHRoZSBidWxrIHN0YXJ0IHRpbWVyIHNpbmNlIG9idmlvdXNseSB0aGUgY2hhbm5lbCBpcyBydW5uaW5nLiAqLworCQltb2RfdGltZXIoJmJ1bGtfc3RhcnRfdGltZXIsIGppZmZpZXMgKyBCVUxLX1NUQVJUX1RJTUVSX0lOVEVSVkFMKTsKKwkJLyogVXBkYXRlL3Jlc3RhcnQgdGhlIGJ1bGsgZW90IHRpbWVyIHNpbmNlIHdlIGp1c3QgcmVjZWl2ZWQgYW4gYnVsayBlb3QgaW50ZXJydXB0LiAqLworCQltb2RfdGltZXIoJmJ1bGtfZW90X3RpbWVyLCBqaWZmaWVzICsgQlVMS19FT1RfVElNRVJfSU5URVJWQUwpOworCisJCWV0cmF4X3VzYl9oY19idWxrX2VvdF9pbnRlcnJ1cHQoMCk7CisJfQorCisJa21lbV9jYWNoZV9mcmVlKHRvcF9oYWxmX3JlZ19jYWNoZSwgcmVnKTsKKworCURCRkVYSVQ7Cit9CisKKwordm9pZCBldHJheF91c2JfaGNfaXNvY19lb2ZfaW50ZXJydXB0KHZvaWQpCit7CisJc3RydWN0IHVyYiAqdXJiOworCWV0cmF4X3VyYl9wcml2X3QgKnVyYl9wcml2OworCWludCBlcGlkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlEQkZFTlRFUjsKKworCS8qIERvIG5vdCBjaGVjayB0aGUgaW52YWxpZCBlcGlkIChpdCBoYXMgYSB2YWxpZCBzdWIgcG9pbnRlcikuICovCisJZm9yIChlcGlkID0gMDsgZXBpZCA8IE5CUl9PRl9FUElEUyAtIDE7IGVwaWQrKykgeworCisJCS8qIERvIG5vdCBjaGVjayB0aGUgaW52YWxpZCBlcGlkIChpdCBoYXMgYSB2YWxpZCBzdWIgcG9pbnRlcikuICovCisJCWlmICgoZXBpZCA9PSBEVU1NWV9FUElEKSB8fCAoZXBpZCA9PSBJTlZBTElEX0VQSUQpKQorCQkJY29udGludWU7CisKKwkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHRvIGJsb2NrIHRoZSBpc29jIG91dCBkZXNjcmlwdG9yIGludGVycnVwdCBoYW5kbGVyCisJCSAgIGZyb20gYmVpbmcgY2FsbGVkIHdoaWxlIHRoZSBpc29jIEVQSUQgbGlzdCBpcyBiZWluZyBjaGVja2VkLgorCQkqLworCQlzYXZlX2ZsYWdzKGZsYWdzKTsKKwkJY2xpKCk7CisKKwkJaWYgKFR4SXNvY0VQTGlzdFtlcGlkXS5zdWIgPT0gMCkgeworCQkJLyogTm90aGluZyBoZXJlIHRvIHNlZS4gKi8KKwkJCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBHZXQgdGhlIGZpcnN0IHVyYiAoaWYgYW55KS4gKi8KKwkJdXJiID0gdXJiX2xpc3RfZmlyc3QoZXBpZCk7CisJCWlmICh1cmIgPT0gMCkgeworCQkJd2FybigiSWdub3JpbmcgTlVMTCB1cmIiKTsKKwkJCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSkgeworCisJCQkvKiBTYW5pdHkgY2hlY2suICovCisJCQlhc3NlcnQodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JU09DSFJPTk9VUyk7CisKKwkJCXVyYl9wcml2ID0gKGV0cmF4X3VyYl9wcml2X3QgKil1cmItPmhjcHJpdjsKKwkJCWFzc2VydCh1cmJfcHJpdik7CisKKwkJCWlmICh1cmJfcHJpdi0+dXJiX3N0YXRlID09IE5PVF9TVEFSVEVEKSB7CisKKwkJCQkvKiBJZiBBU0FQIGlzIG5vdCBzZXQgYW5kIHVyYi0+c3RhcnRfZnJhbWUgaXMgdGhlIGN1cnJlbnQgZnJhbWUsCisJCQkJICAgc3RhcnQgdGhlIHRyYW5zZmVyLiAqLworCQkJCWlmICghKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfSVNPX0FTQVApICYmCisJCQkJICAgICh1cmItPnN0YXJ0X2ZyYW1lID09ICgqUl9VU0JfRk1fTlVNQkVSICYgMHg3ZmYpKSkgeworCisJCQkJCWRiZ19pc29jKCJFbmFibGluZyBpc29jIElOIEVQIGRlc2NyIGZvciBlcGlkICVkIiwgZXBpZCk7CisJCQkJCVR4SXNvY0VQTGlzdFtlcGlkXS5jb21tYW5kIHw9IElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlbmFibGUsIHllcyk7CisKKwkJCQkJLyogVGhpcyB1cmIgaXMgbm93IGFjdGl2ZS4gKi8KKwkJCQkJdXJiX3ByaXYtPnVyYl9zdGF0ZSA9IFNUQVJURUQ7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKwl9CisKKwlEQkZFWElUOworCit9CisKK3ZvaWQgZXRyYXhfdXNiX2hjX2J1bGtfZW90X2ludGVycnVwdChpbnQgdGltZXJfaW5kdWNlZCkKK3sKKyAJaW50IGVwaWQ7CisKKwkvKiBUaGUgdGVjaG5pcXVlIGlzIHRvIHJ1biBvbmUgdXJiIGF0IGEgdGltZSwgd2FpdCBmb3IgdGhlIGVvdCBpbnRlcnJ1cHQgYXQgd2hpY2gKKwkgICBwb2ludCB0aGUgRVAgZGVzY3JpcHRvciBoYXMgYmVlbiBkaXNhYmxlZC4gKi8KKworCURCRkVOVEVSOworCWRiZ19idWxrKCJidWxrIGVvdCVzIiwgdGltZXJfaW5kdWNlZCA/ICIsIGNhbGxlZCBieSB0aW1lciIgOiAiIik7CisKKwlmb3IgKGVwaWQgPSAwOyBlcGlkIDwgTkJSX09GX0VQSURTOyBlcGlkKyspIHsKKworCQlpZiAoIShUeEJ1bGtFUExpc3RbZXBpZF0uY29tbWFuZCAmIElPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSkpICYmCisJCSAgICAoVHhCdWxrRVBMaXN0W2VwaWRdLnN1YiAhPSAwKSkgeworCisJCQlzdHJ1Y3QgdXJiICp1cmI7CisJCQlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdjsKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCQlfX3UzMiByX3VzYl9lcHRfZGF0YTsKKworCQkJLyogRm91bmQgYSBkaXNhYmxlZCBFUCBkZXNjcmlwdG9yIHdoaWNoIGhhcyBhIG5vbi1udWxsIHN1YiBwb2ludGVyLgorCQkJICAgVmVyaWZ5IHRoYXQgdGhpcyBjdHJsIEVQIGRlc2NyaXB0b3IgZ290IGRpc2FibGVkIG5vIGVycm9ycy4KKwkJCSAgIEZJWE1FOiBOZWNlc3NhcnkgdG8gY2hlY2sgZXJyb3JfY29kZT8gKi8KKwkJCWRiZ19idWxrKCJmb3IgZXBpZCAlZD8iLCBlcGlkKTsKKworCQkJLyogR2V0IHRoZSBmaXJzdCB1cmIuICovCisJCQl1cmIgPSB1cmJfbGlzdF9maXJzdChlcGlkKTsKKworCQkJLyogRklYTUU6IENvdWxkIHRoaXMgaGFwcGVuIGZvciB2YWxpZCByZWFzb25zPyBXaHkgZGlkIGl0IGRpc2FwcGVhcj8gQmVjYXVzZSBvZgorCQkJICAgd3JvbmcgdW5saW5raW5nPyAqLworCQkJaWYgKCF1cmIpIHsKKwkJCQl3YXJuKCJOVUxMIHVyYiBmb3IgZXBpZCAlZCIsIGVwaWQpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlhc3NlcnQodXJiKTsKKwkJCXVyYl9wcml2ID0gKGV0cmF4X3VyYl9wcml2X3QgKil1cmItPmhjcHJpdjsKKwkJCWFzc2VydCh1cmJfcHJpdik7CisKKwkJCS8qIFNhbml0eSBjaGVja3MuICovCisJCQlhc3NlcnQodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9CVUxLKTsKKwkJCWlmIChwaHlzX3RvX3ZpcnQoVHhCdWxrRVBMaXN0W2VwaWRdLnN1YikgIT0gdXJiX3ByaXYtPmxhc3Rfc2IpIHsKKwkJCQllcnIoImJ1bGsgZW5kcG9pbnQgZ290IGRpc2FibGVkIGJlZm9yZSByZWFjaGluZyBsYXN0IHNiIik7CisJCQl9CisKKwkJCS8qIEZvciBidWxrIElOIHRyYWZmaWMsIHRoZXJlIHNlZW1zIHRvIGJlIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbgorCQkJICAgYmV0d2VlbiB0aGUgYnVsayBlb3QgYW5kIGVvcCBpbnRlcnJ1cHRzLCBvciByYXRoZXIgYW4gdW5jZXJ0YWludHkgcmVnYXJkaW5nCisJCQkgICB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBoYXBwZW4uIE5vcm1hbGx5IHdlIGV4cGVjdCB0aGUgZW9wIGludGVycnVwdCBmcm9tCisJCQkgICBETUEgY2hhbm5lbCA5IHRvIGhhcHBlbiBiZWZvcmUgdGhlIGVvdCBpbnRlcnJ1cHQuCisKKwkJCSAgIFRoZXJlZm9yZSwgd2UgY29tcGxldGUgdGhlIGJ1bGsgSU4gdXJiIGluIHRoZSByeCBpbnRlcnJ1cHQgaGFuZGxlciBpbnN0ZWFkLiAqLworCisJCQlpZiAodXNiX3BpcGVpbih1cmItPnBpcGUpKSB7CisJCQkJZGJnX2J1bGsoImluIHVyYiwgY29udGludWluZyIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlzYXZlX2ZsYWdzKGZsYWdzKTsKKwkJCWNsaSgpOworCQkJKlJfVVNCX0VQVF9JTkRFWCA9IElPX0ZJRUxEKFJfVVNCX0VQVF9JTkRFWCwgdmFsdWUsIGVwaWQpOworCQkJbm9wKCk7CisJCQlyX3VzYl9lcHRfZGF0YSA9ICpSX1VTQl9FUFRfREFUQTsKKwkJCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCisJCQlpZiAoSU9fRVhUUkFDVChSX1VTQl9FUFRfREFUQSwgZXJyb3JfY29kZSwgcl91c2JfZXB0X2RhdGEpID09CisJCQkgICAgSU9fU1RBVEVfVkFMVUUoUl9VU0JfRVBUX0RBVEEsIGVycm9yX2NvZGUsIG5vX2Vycm9yKSkgeworCQkJCS8qIFRoaXMgbWVhbnMgdGhhdCB0aGUgZW5kcG9pbnQgaGFzIG5vIGVycm9yLCBpcyBkaXNhYmxlZAorCQkJCSAgIGFuZCBoYWQgaW5zZXJ0ZWQgdHJhZmZpYywgaS5lLiB0cmFuc2ZlciBzdWNjZXNzZnVsbHkgY29tcGxldGVkLiAqLworCQkJCWV0cmF4X3VzYl9jb21wbGV0ZV9idWxrX3VyYih1cmIsIDApOworCQkJfSBlbHNlIHsKKwkJCQkvKiBTaG91bGRuJ3QgaGFwcGVuLiBXZSBleHBlY3QgZXJyb3JzIHRvIGJlIGNhdWdodCBieSBlcGlkIGF0dGVudGlvbi4gKi8KKwkJCQllcnIoIkZvdW5kIGRpc2FibGVkIGJ1bGsgRVAgZGVzYywgZXJyb3JfY29kZSAhPSBub19lcnJvciIpOworCQkJfQorCQl9CisJfQorCisJLyogTm9ybWFsbHksIHdlIHNob3VsZCBmaW5kIChhdCBsZWFzdCkgb25lIGRpc2FibGVkIEVQIGRlc2NyaXB0b3Igd2l0aCBhIHZhbGlkIHN1YiBwb2ludGVyLgorCSAgIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgdGhlIHVuY2VydGFpbnR5IGluIHRoZSBkZWxpdmVyYW5jZSBvZiB0aGUgZW9wL2VvdCBpbnRlcnJ1cHRzLCB3ZSBtYXkKKwkgICBub3QuICBBbHNvLCB3ZSBtaWdodCBmaW5kIHR3byBkaXNhYmxlZCBFUHMgd2hlbiBoYW5kbGluZyBhbiBlb3QgaW50ZXJydXB0LCBhbmQgdGhlbiBmaW5kCisJICAgbm9uZSB0aGUgbmV4dCB0aW1lLiAqLworCisJREJGRVhJVDsKKworfQorCit2b2lkIGV0cmF4X3VzYl9oY19lcGlkX2F0dG5faW50ZXJydXB0KHVzYl9pbnRlcnJ1cHRfcmVnaXN0ZXJzX3QgKnJlZykKK3sKKwkvKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGVwaWQgYXR0ZW50aW9uIGludGVycnVwdC4gIFRoZXJlIGFyZSBhIHZhcmlldHkgb2YgcmVhc29ucworCSAgIGZvciB0aGlzIGludGVycnVwdCB0byBoYXBwZW4gKERlc2lnbmVyJ3MgUmVmZXJlbmNlLCBwLiA4IC0gMjIgZm9yIHRoZSBkZXRhaWxzKToKKworCSAgIGludmFsaWQgZXBfaWQgIC0gSW52YWxpZCBlcGlkIGluIGFuIEVQIChFUCBkaXNhYmxlZCkuCisJICAgc3RhbGwJICAtIE5vdCBzdHJpY3RseSBhbiBlcnJvciBjb25kaXRpb24gKEVQIGRpc2FibGVkKS4KKwkgICAzcmQgZXJyb3IgICAgICAtIFRocmVlIHN1Y2Nlc3NpdmUgdHJhbnNhY3Rpb24gZXJyb3JzICAoRVAgZGlzYWJsZWQpLgorCSAgIGJ1ZmZlciBvdXJ1biAgIC0gQnVmZmVyIG92ZXJydW4gb3IgdW5kZXJydW4gKEVQIGRpc2FibGVkKS4KKwkgICBwYXN0IGVvZjEgICAgICAtIEludHIgb3IgaXNvYyB0cmFuc2FjdGlvbiBwcm9jZWVkcyBwYXN0IEVPRjEuCisJICAgbmVhciBlb2YgICAgICAgLSBJbnRyIG9yIGlzb2MgdHJhbnNhY3Rpb24gd291bGQgbm90IGZpdCBpbnNpZGUgdGhlIGZyYW1lLgorCSAgIHpvdXQgdHJhbnNmZXIgIC0gSWYgem91dCB0cmFuc2ZlciBmb3IgYSBidWxrIGVuZHBvaW50IChFUCBkaXNhYmxlZCkuCisJICAgc2V0dXAgdHJhbnNmZXIgLSBJZiBzZXR1cCB0cmFuc2ZlciBmb3IgYSBub24tY3RybCBlbmRwb2ludCAoRVAgZGlzYWJsZWQpLiAqLworCisJaW50IGVwaWQ7CisKKworCURCRkVOVEVSOworCisJYXNzZXJ0KHJlZyAhPSBOVUxMKTsKKworCS8qIE5vdGUgdGhhdCB3ZSBsb29wIHRocm91Z2ggYWxsIGVwaWRzLiBXZSBzdGlsbCB3YW50IHRvIGNhdGNoIGVycm9ycyBmb3IKKwkgICB0aGUgaW52YWxpZCBvbmUsIGV2ZW4gdGhvdWdoIHdlIG1pZ2h0IGhhbmRsZSB0aGVtIGRpZmZlcmVudGx5LiAqLworCWZvciAoZXBpZCA9IDA7IGVwaWQgPCBOQlJfT0ZfRVBJRFM7IGVwaWQrKykgeworCisJCWlmICh0ZXN0X2JpdChlcGlkLCAodm9pZCAqKSZyZWctPnJfdXNiX2VwaWRfYXR0bikpIHsKKworCQkJc3RydWN0IHVyYiAqdXJiOworCQkJX191MzIgcl91c2JfZXB0X2RhdGE7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQkJaW50IGVycm9yX2NvZGU7CisKKwkJCXNhdmVfZmxhZ3MoZmxhZ3MpOworCQkJY2xpKCk7CisJCQkqUl9VU0JfRVBUX0lOREVYID0gSU9fRklFTEQoUl9VU0JfRVBUX0lOREVYLCB2YWx1ZSwgZXBpZCk7CisJCQlub3AoKTsKKwkJCS8qIE5vdGUgdGhhdCBhbHRob3VnaCB0aGVyZSBhcmUgc2VwYXJhdGUgUl9VU0JfRVBUX0RBVEEgYW5kIFJfVVNCX0VQVF9EQVRBX0lTTworCQkJICAgcmVnaXN0ZXJzLCB0aGV5IGFyZSBsb2NhdGVkIGF0IHRoZSBzYW1lIGFkZHJlc3MgYW5kIGFyZSBvZiB0aGUgc2FtZSBzaXplLgorCQkJICAgSW4gb3RoZXIgd29yZHMsIHRoaXMgcmVhZCBzaG91bGQgYmUgb2sgZm9yIGlzb2MgYWxzby4gKi8KKwkJCXJfdXNiX2VwdF9kYXRhID0gKlJfVVNCX0VQVF9EQVRBOworCQkJcmVzdG9yZV9mbGFncyhmbGFncyk7CisKKwkJCS8qIEZpcnN0IHNvbWUgc2FuaXR5IGNoZWNrcy4gKi8KKwkJCWlmIChlcGlkID09IElOVkFMSURfRVBJRCkgeworCQkJCS8qIEZJWE1FOiBXaGF0IGlmIGl0IGJlY2FtZSBkaXNhYmxlZD8gQ291bGQgc2VyaW91c2x5IGh1cnQgaW50ZXJydXB0CisJCQkJICAgdHJhZmZpYy4gKFVzZSBkb19pbnRyX3JlY292ZXIuKSAqLworCQkJCXdhcm4oIkdvdCBlcGlkX2F0dG4gZm9yIElOVkFMSURfRVBJRCAoJWQpLiIsIGVwaWQpOworCQkJCWVycigiUl9VU0JfRVBUX0RBVEEgPSAweCV4Iiwgcl91c2JfZXB0X2RhdGEpOworCQkJCWVycigiUl9VU0JfU1RBVFVTID0gMHgleCIsIHJlZy0+cl91c2Jfc3RhdHVzKTsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSAJaWYgKGVwaWQgPT0gRFVNTVlfRVBJRCkgeworCQkJCS8qIFdlIGRlZmluaXRlbHkgZG9uJ3QgY2FyZSBhYm91dCB0aGVzZSBvbmVzLiBCZXNpZGVzLCB0aGV5IGFyZQorCQkJCSAgIGFsd2F5cyBkaXNhYmxlZCwgc28gYW55IHBvc3NpYmxlIGRpc2FibGluZyBjYXVzZWQgYnkgdGhlCisJCQkJICAgZXBpZCBhdHRlbnRpb24gaW50ZXJydXB0IGlzIGlycmVsZXZhbnQuICovCisJCQkJd2FybigiR290IGVwaWRfYXR0biBmb3IgRFVNTVlfRVBJRCAoJWQpLiIsIGVwaWQpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBHZXQgdGhlIGZpcnN0IHVyYiBpbiB0aGUgdXJiIGxpc3QgZm9yIHRoaXMgZXBpZC4gV2UgYmxhdGFudGx5IGFzc3VtZQorCQkJICAgdGhhdCBvbmx5IHRoZSBmaXJzdCB1cmIgY291bGQgaGF2ZSBjYXVzZWQgdGhlIGVwaWQgYXR0ZW50aW9uLgorCQkJICAgKEZvciBidWxrIGFuZCBjdHJsLCBvbmx5IG9uZSB1cmIgaXMgYWN0aXZlIGF0IGFueSBvbmUgdGltZS4gRm9yIGludHIKKwkJCSAgIGFuZCBpc29jIHdlIHJlbW92ZSB0aGVtIG9uY2UgdGhleSBhcmUgY29tcGxldGVkLikgKi8KKwkJCXVyYiA9IHVyYl9saXN0X2ZpcnN0KGVwaWQpOworCisJCQlpZiAodXJiID09IE5VTEwpIHsKKwkJCQllcnIoIkdvdCBlcGlkX2F0dG4gZm9yIGVwaWQgJWkgd2l0aCBubyB1cmIuIiwgZXBpZCk7CisJCQkJZXJyKCJSX1VTQl9FUFRfREFUQSA9IDB4JXgiLCByX3VzYl9lcHRfZGF0YSk7CisJCQkJZXJyKCJSX1VTQl9TVEFUVVMgPSAweCV4IiwgcmVnLT5yX3VzYl9zdGF0dXMpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlzd2l0Y2ggKHVzYl9waXBldHlwZSh1cmItPnBpcGUpKSB7CisJCQljYXNlIFBJUEVfQlVMSzoKKwkJCQl3YXJuKCJHb3QgZXBpZCBhdHRuIGZvciBidWxrIGVuZHBvaW50LCBlcGlkICVkIiwgZXBpZCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBJUEVfQ09OVFJPTDoKKwkJCQl3YXJuKCJHb3QgZXBpZCBhdHRuIGZvciBjb250cm9sIGVuZHBvaW50LCBlcGlkICVkIiwgZXBpZCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBJUEVfSU5URVJSVVBUOgorCQkJCXdhcm4oIkdvdCBlcGlkIGF0dG4gZm9yIGludGVycnVwdCBlbmRwb2ludCwgZXBpZCAlZCIsIGVwaWQpOworCQkJCWJyZWFrOworCQkJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQkJCXdhcm4oIkdvdCBlcGlkIGF0dG4gZm9yIGlzb2Nocm9ub3VzIGVuZHBvaW50LCBlcGlkICVkIiwgZXBpZCk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSAhPSBQSVBFX0lTT0NIUk9OT1VTKSB7CisJCQkJaWYgKHJfdXNiX2VwdF9kYXRhICYgSU9fTUFTSyhSX1VTQl9FUFRfREFUQSwgaG9sZCkpIHsKKwkJCQkJd2FybigiSG9sZCB3YXMgc2V0IGZvciBlcGlkICVkLiIsIGVwaWQpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisKKwkJCS8qIEV2ZW4gdGhvdWdoIGVycm9yX2NvZGUgb2NjdXBpZXMgYml0cyAyMiAtIDIzIGluIGJvdGggUl9VU0JfRVBUX0RBVEEgYW5kCisJCQkgICBSX1VTQl9FUFRfREFUQV9JU09DLCB3ZSBzZXBhcmF0ZSB0aGVtIGhlcmUgc28gd2UgZG9uJ3QgZm9yZ2V0IGluIG90aGVyIHBsYWNlcy4gKi8KKwkJCWlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0lTT0NIUk9OT1VTKSB7CisJCQkJZXJyb3JfY29kZSA9IElPX0VYVFJBQ1QoUl9VU0JfRVBUX0RBVEFfSVNPLCBlcnJvcl9jb2RlLCByX3VzYl9lcHRfZGF0YSk7CisJCQl9IGVsc2UgeworCQkJCWVycm9yX2NvZGUgPSBJT19FWFRSQUNUKFJfVVNCX0VQVF9EQVRBLCBlcnJvcl9jb2RlLCByX3VzYl9lcHRfZGF0YSk7CisJCQl9CisKKwkJCS8qIFVzaW5nIElPX1NUQVRFX1ZBTFVFIG9uIFJfVVNCX0VQVF9EQVRBIHNob3VsZCBiZSBvayBmb3IgaXNvYyBhbHNvLiAqLworCQkJaWYgKGVycm9yX2NvZGUgPT0gSU9fU1RBVEVfVkFMVUUoUl9VU0JfRVBUX0RBVEEsIGVycm9yX2NvZGUsIG5vX2Vycm9yKSkgeworCisJCQkJLyogSXNvYyB0cmFmZmljIGRvZXNuJ3QgaGF2ZSBlcnJvcl9jb3VudF9pbi9lcnJvcl9jb3VudF9vdXQuICovCisJCQkJaWYgKCh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSAhPSBQSVBFX0lTT0NIUk9OT1VTKSAmJgorCQkJCSAgICAoSU9fRVhUUkFDVChSX1VTQl9FUFRfREFUQSwgZXJyb3JfY291bnRfaW4sIHJfdXNiX2VwdF9kYXRhKSA9PSAzIHx8CisJCQkJICAgICBJT19FWFRSQUNUKFJfVVNCX0VQVF9EQVRBLCBlcnJvcl9jb3VudF9vdXQsIHJfdXNiX2VwdF9kYXRhKSA9PSAzKSkgeworCQkJCQkvKiAzcmQgZXJyb3IuICovCisJCQkJCXdhcm4oIjNyZCBlcnJvciBmb3IgZXBpZCAlaSIsIGVwaWQpOworCQkJCQlldHJheF91c2JfY29tcGxldGVfdXJiKHVyYiwgLUVQUk9UTyk7CisKKwkJCQl9IGVsc2UgaWYgKHJlZy0+cl91c2Jfc3RhdHVzICYgSU9fTUFTSyhSX1VTQl9TVEFUVVMsIHBlcnJvcikpIHsKKworCQkJCQl3YXJuKCJQZXJyb3IgZm9yIGVwaWQgJWQiLCBlcGlkKTsKKworCQkJCQlpZiAoIShyX3VzYl9lcHRfZGF0YSAmIElPX01BU0soUl9VU0JfRVBUX0RBVEEsIHZhbGlkKSkpIHsKKwkJCQkJCS8qIGludmFsaWQgZXBfaWQgKi8KKwkJCQkJCXBhbmljKCJQZXJyb3IgYmVjYXVzZSBvZiBpbnZhbGlkIGVwaWQuIgorCQkJCQkJICAgICAgIiBEZWNvbmZpZ3VyZWQgdG9vIGVhcmx5PyIpOworCQkJCQl9IGVsc2UgeworCQkJCQkJLyogcGFzdCBlb2YxLCBuZWFyIGVvZiwgem91dCB0cmFuc2Zlciwgc2V0dXAgdHJhbnNmZXIgKi8KKworCQkJCQkJLyogRHVtcCB0aGUgdXJiIGFuZCB0aGUgcmVsZXZhbnQgRVAgZGVzY3JpcHRvciBsaXN0LiAqLworCisJCQkJCQlfX2R1bXBfdXJiKHVyYik7CisJCQkJCQlfX2R1bXBfZXB0X2RhdGEoZXBpZCk7CisJCQkJCQlfX2R1bXBfZXBfbGlzdCh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSk7CisKKwkJCQkJCXBhbmljKCJTb21ldGhpbmcgd3Jvbmcgd2l0aCBETUEgZGVzY3JpcHRvciBjb250ZW50cy4iCisJCQkJCQkgICAgICAiIFRvbyBtdWNoIHRyYWZmaWMgaW5zZXJ0ZWQ/Iik7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKHJlZy0+cl91c2Jfc3RhdHVzICYgSU9fTUFTSyhSX1VTQl9TVEFUVVMsIG91cnVuKSkgeworCQkJCQkvKiBidWZmZXIgb3VydW4gKi8KKwkJCQkJcGFuaWMoIkJ1ZmZlciBvdmVycnVuL3VuZGVycnVuIGZvciBlcGlkICVkLiBETUEgdG9vIGJ1c3k/IiwgZXBpZCk7CisJCQkJfQorCisJCQl9IGVsc2UgaWYgKGVycm9yX2NvZGUgPT0gSU9fU1RBVEVfVkFMVUUoUl9VU0JfRVBUX0RBVEEsIGVycm9yX2NvZGUsIHN0YWxsKSkgeworCQkJCS8qIE5vdCByZWFsbHkgYSBwcm90b2NvbCBlcnJvciwganVzdCBzYXlzIHRoYXQgdGhlIGVuZHBvaW50IGdhdmUKKwkJCQkgICBhIHN0YWxsIHJlc3BvbnNlLiBOb3RlIHRoYXQgZXJyb3JfY29kZSBjYW5ub3QgYmUgc3RhbGwgZm9yIGlzb2MuICovCisJCQkJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJCQkJcGFuaWMoIklzb2MgdHJhZmZpYyBjYW5ub3Qgc3RhbGwiKTsKKwkJCQl9CisKKwkJCQl3YXJuKCJTdGFsbCBmb3IgZXBpZCAlZCIsIGVwaWQpOworCQkJCWV0cmF4X3VzYl9jb21wbGV0ZV91cmIodXJiLCAtRVBJUEUpOworCisJCQl9IGVsc2UgaWYgKGVycm9yX2NvZGUgPT0gSU9fU1RBVEVfVkFMVUUoUl9VU0JfRVBUX0RBVEEsIGVycm9yX2NvZGUsIGJ1c19lcnJvcikpIHsKKwkJCQkvKiBUd28gZGV2aWNlcyByZXNwb25kZWQgdG8gYSB0cmFuc2FjdGlvbiByZXF1ZXN0LiBNdXN0IGJlIHJlc29sdmVkCisJCQkJICAgYnkgc29mdHdhcmUuIEZJWE1FOiBSZXNldCBwb3J0cz8gKi8KKwkJCQlwYW5pYygiQnVzIGVycm9yIGZvciBlcGlkICVkLiIKKwkJCQkgICAgICAiIFR3byBkZXZpY2VzIHJlc3BvbmRlZCB0byB0cmFuc2FjdGlvbiByZXF1ZXN0IiwKKwkJCQkgICAgICBlcGlkKTsKKworCQkJfSBlbHNlIGlmIChlcnJvcl9jb2RlID09IElPX1NUQVRFX1ZBTFVFKFJfVVNCX0VQVF9EQVRBLCBlcnJvcl9jb2RlLCBidWZmZXJfZXJyb3IpKSB7CisJCQkJLyogRE1BIG92ZXJydW4gb3IgdW5kZXJydW4uICovCisJCQkJd2FybigiQnVmZmVyIG92ZXJydW4vdW5kZXJydW4gZm9yIGVwaWQgJWQuIERNQSB0b28gYnVzeT8iLCBlcGlkKTsKKworCQkJCS8qIEl0IHNlZW1zIHRoYXQgZXJyb3JfY29kZSA9IGJ1ZmZlcl9lcnJvciBpbgorCQkJCSAgIFJfVVNCX0VQVF9EQVRBL1JfVVNCX0VQVF9EQVRBX0lTTyBhbmQgb3VydW4gPSB5ZXMgaW4gUl9VU0JfU1RBVFVTCisJCQkJICAgYXJlIHRoZSBzYW1lIGVycm9yLiAqLworCQkJCWV0cmF4X3VzYl9jb21wbGV0ZV91cmIodXJiLCAtRVBST1RPKTsKKwkJCX0KKwkJfQorCX0KKworCURCRkVYSVQ7CisKK30KKwordm9pZCBldHJheF91c2JfYnVsa19zdGFydF90aW1lcl9mdW5jKHVuc2lnbmVkIGxvbmcgZHVtbXkpCit7CisKKwkvKiBXZSBtaWdodCBlbmFibGUgYW4gRVAgZGVzY3JpcHRvciBiZWhpbmQgdGhlIGN1cnJlbnQgRE1BIHBvc2l0aW9uIHdoZW4gaXQncyBhYm91dAorCSAgIHRvIGRlY2lkZSB0aGF0IHRoZXJlIGFyZSBubyBtb3JlIGJ1bGsgdHJhZmZpYyBhbmQgaXQgc2hvdWxkIHN0b3AgdGhlIGJ1bGsgY2hhbm5lbC4KKwkgICBUaGVyZWZvcmUgd2UgcGVyaW9kaWNhbGx5IGNoZWNrIGlmIHRoZSBidWxrIGNoYW5uZWwgaXMgc3RvcHBlZCBhbmQgdGhlcmUgaXMgYW4KKwkgICBlbmFibGVkIGJ1bGsgRVAgZGVzY3JpcHRvciwgaW4gd2hpY2ggY2FzZSB3ZSBzdGFydCB0aGUgYnVsayBjaGFubmVsLiAqLworCWRiZ19idWxrKCJidWxrX3N0YXJ0X3RpbWVyIHRpbWVkIG91dC4iKTsKKworCWlmICghKCpSX0RNQV9DSDhfU1VCMF9DTUQgJiBJT19NQVNLKFJfRE1BX0NIOF9TVUIwX0NNRCwgY21kKSkpIHsKKwkJaW50IGVwaWQ7CisKKwkJZGJnX2J1bGsoIkJ1bGsgRE1BIGNoYW5uZWwgbm90IHJ1bm5pbmcuIik7CisKKwkJZm9yIChlcGlkID0gMDsgZXBpZCA8IE5CUl9PRl9FUElEUzsgZXBpZCsrKSB7CisJCQlpZiAoVHhCdWxrRVBMaXN0W2VwaWRdLmNvbW1hbmQgJiBJT19NQVNLKFVTQl9FUF9jb21tYW5kLCBlbmFibGUpKSB7CisJCQkJZGJnX2J1bGsoIkZvdW5kIGVuYWJsZWQgRVAgZm9yIGVwaWQgJWQsIHN0YXJ0aW5nIGJ1bGsgY2hhbm5lbC5cbiIsCisJCQkJCSBlcGlkKTsKKwkJCQkqUl9ETUFfQ0g4X1NVQjBfQ01EID0gSU9fU1RBVEUoUl9ETUFfQ0g4X1NVQjBfQ01ELCBjbWQsIHN0YXJ0KTsKKworCQkJCS8qIFJlc3RhcnQgdGhlIGJ1bGsgZW90IHRpbWVyIHNpbmNlIHdlIGp1c3Qgc3RhcnRlZCB0aGUgYnVsayBjaGFubmVsLiAqLworCQkJCW1vZF90aW1lcigmYnVsa19lb3RfdGltZXIsIGppZmZpZXMgKyBCVUxLX0VPVF9USU1FUl9JTlRFUlZBTCk7CisKKwkJCQkvKiBObyBuZWVkIHRvIHNlYXJjaCBhbnkgZnVydGhlci4gKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWRiZ19idWxrKCJCdWxrIERNQSBjaGFubmVsIHJ1bm5pbmcuIik7CisJfQorfQorCit2b2lkIGV0cmF4X3VzYl9oY19wb3J0X3N0YXR1c19pbnRlcnJ1cHQodXNiX2ludGVycnVwdF9yZWdpc3RlcnNfdCAqcmVnKQoreworCWV0cmF4X2hjX3QgKmhjID0gcmVnLT5oYzsKKwlfX3UxNiByX3VzYl9yaF9wb3J0X3N0YXR1c18xID0gcmVnLT5yX3VzYl9yaF9wb3J0X3N0YXR1c18xOworCV9fdTE2IHJfdXNiX3JoX3BvcnRfc3RhdHVzXzIgPSByZWctPnJfdXNiX3JoX3BvcnRfc3RhdHVzXzI7CisKKwlEQkZFTlRFUjsKKworCS8qIFRoZSBFdHJheCBSSCBkb2VzIG5vdCBpbmNsdWRlIGEgd1BvcnRDaGFuZ2UgcmVnaXN0ZXIsIHNvIHRoaXMgaGFzIHRvIGJlIGhhbmRsZWQgaW4gc29mdHdhcmUKKwkgICAoYnkgc2F2aW5nIHRoZSBvbGQgcG9ydCBzdGF0dXMgdmFsdWUgZm9yIGNvbXBhcmlzb24gd2hlbiB0aGUgcG9ydCBzdGF0dXMgaW50ZXJydXB0IGhhcHBlbnMpLgorCSAgIFNlZSBzZWN0aW9uIDExLjE2LjIuNi4yIGluIHRoZSBVU0IgMS4xIHNwZWMgZm9yIGRldGFpbHMuICovCisKKwlkYmdfcmgoImhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzEgPSAweCV4IiwgaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMSk7CisJZGJnX3JoKCJoYy0+cmgucHJldl93UG9ydFN0YXR1c18yID0gMHgleCIsIGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzIpOworCWRiZ19yaCgicl91c2JfcmhfcG9ydF9zdGF0dXNfMSA9IDB4JXgiLCByX3VzYl9yaF9wb3J0X3N0YXR1c18xKTsKKwlkYmdfcmgoInJfdXNiX3JoX3BvcnRfc3RhdHVzXzIgPSAweCV4Iiwgcl91c2JfcmhfcG9ydF9zdGF0dXNfMik7CisKKwkvKiBDX1BPUlRfQ09OTkVDVElPTiBpcyBzZXQgb24gYW55IHRyYW5zaXRpb24uICovCisJaGMtPnJoLndQb3J0Q2hhbmdlXzEgfD0KKwkJKChyX3VzYl9yaF9wb3J0X3N0YXR1c18xICYgKDEgPDwgUkhfUE9SVF9DT05ORUNUSU9OKSkgIT0KKwkJIChoYy0+cmgucHJldl93UG9ydFN0YXR1c18xICYgKDEgPDwgUkhfUE9SVF9DT05ORUNUSU9OKSkpID8KKwkJKDEgPDwgUkhfUE9SVF9DT05ORUNUSU9OKSA6IDA7CisKKwloYy0+cmgud1BvcnRDaGFuZ2VfMiB8PQorCQkoKHJfdXNiX3JoX3BvcnRfc3RhdHVzXzIgJiAoMSA8PCBSSF9QT1JUX0NPTk5FQ1RJT04pKSAhPQorCQkgKGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzIgJiAoMSA8PCBSSF9QT1JUX0NPTk5FQ1RJT04pKSkgPworCQkoMSA8PCBSSF9QT1JUX0NPTk5FQ1RJT04pIDogMDsKKworCS8qIENfUE9SVF9FTkFCTEUgaXMgX29ubHlfIHNldCBvbiBhIG9uZSB0byB6ZXJvIHRyYW5zaXRpb24sIGkuZS4gd2hlbgorCSAgIHRoZSBwb3J0IGlzIGRpc2FibGVkLCBub3Qgd2hlbiBpdCdzIGVuYWJsZWQuICovCisJaGMtPnJoLndQb3J0Q2hhbmdlXzEgfD0KKwkJKChoYy0+cmgucHJldl93UG9ydFN0YXR1c18xICYgKDEgPDwgUkhfUE9SVF9FTkFCTEUpKQorCQkgJiYgIShyX3VzYl9yaF9wb3J0X3N0YXR1c18xICYgKDEgPDwgUkhfUE9SVF9FTkFCTEUpKSkgPworCQkoMSA8PCBSSF9QT1JUX0VOQUJMRSkgOiAwOworCisJaGMtPnJoLndQb3J0Q2hhbmdlXzIgfD0KKwkJKChoYy0+cmgucHJldl93UG9ydFN0YXR1c18yICYgKDEgPDwgUkhfUE9SVF9FTkFCTEUpKQorCQkgJiYgIShyX3VzYl9yaF9wb3J0X3N0YXR1c18yICYgKDEgPDwgUkhfUE9SVF9FTkFCTEUpKSkgPworCQkoMSA8PCBSSF9QT1JUX0VOQUJMRSkgOiAwOworCisJLyogQ19QT1JUX1NVU1BFTkQgaXMgc2V0IHRvIG9uZSB3aGVuIHRoZSBkZXZpY2UgaGFzIHRyYW5zaXRpb25lZCBvdXQKKwkgICBvZiB0aGUgc3VzcGVuZGVkIHN0YXRlLCBpLmUuIHdoZW4gc3VzcGVuZCBnb2VzIGZyb20gb25lIHRvIHplcm8uICovCisJaGMtPnJoLndQb3J0Q2hhbmdlXzEgfD0KKwkJKChoYy0+cmgucHJldl93UG9ydFN0YXR1c18xICYgKDEgPDwgUkhfUE9SVF9TVVNQRU5EKSkKKwkJICYmICEocl91c2JfcmhfcG9ydF9zdGF0dXNfMSAmICgxIDw8IFJIX1BPUlRfU1VTUEVORCkpKSA/CisJCSgxIDw8IFJIX1BPUlRfU1VTUEVORCkgOiAwOworCisJaGMtPnJoLndQb3J0Q2hhbmdlXzIgfD0KKwkJKChoYy0+cmgucHJldl93UG9ydFN0YXR1c18yICYgKDEgPDwgUkhfUE9SVF9TVVNQRU5EKSkKKwkJICYmICEocl91c2JfcmhfcG9ydF9zdGF0dXNfMiAmICgxIDw8IFJIX1BPUlRfU1VTUEVORCkpKSA/CisJCSgxIDw8IFJIX1BPUlRfU1VTUEVORCkgOiAwOworCisKKwkvKiBDX1BPUlRfUkVTRVQgaXMgc2V0IHdoZW4gcmVzZXQgcHJvY2Vzc2luZyBvbiB0aGlzIHBvcnQgaXMgY29tcGxldGUuICovCisJaGMtPnJoLndQb3J0Q2hhbmdlXzEgfD0KKwkJKChoYy0+cmgucHJldl93UG9ydFN0YXR1c18xICYgKDEgPDwgUkhfUE9SVF9SRVNFVCkpCisJCSAmJiAhKHJfdXNiX3JoX3BvcnRfc3RhdHVzXzEgJiAoMSA8PCBSSF9QT1JUX1JFU0VUKSkpID8KKwkJKDEgPDwgUkhfUE9SVF9SRVNFVCkgOiAwOworCisJaGMtPnJoLndQb3J0Q2hhbmdlXzIgfD0KKwkJKChoYy0+cmgucHJldl93UG9ydFN0YXR1c18yICYgKDEgPDwgUkhfUE9SVF9SRVNFVCkpCisJCSAmJiAhKHJfdXNiX3JoX3BvcnRfc3RhdHVzXzIgJiAoMSA8PCBSSF9QT1JUX1JFU0VUKSkpID8KKwkJKDEgPDwgUkhfUE9SVF9SRVNFVCkgOiAwOworCisJLyogU2F2ZSB0aGUgbmV3IHZhbHVlcyBmb3IgbmV4dCBwb3J0IHN0YXR1cyBjaGFuZ2UuICovCisJaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMSA9IHJfdXNiX3JoX3BvcnRfc3RhdHVzXzE7CisJaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMiA9IHJfdXNiX3JoX3BvcnRfc3RhdHVzXzI7CisKKwlkYmdfcmgoImhjLT5yaC53UG9ydENoYW5nZV8xIHNldCB0byAweCV4IiwgaGMtPnJoLndQb3J0Q2hhbmdlXzEpOworCWRiZ19yaCgiaGMtPnJoLndQb3J0Q2hhbmdlXzIgc2V0IHRvIDB4JXgiLCBoYy0+cmgud1BvcnRDaGFuZ2VfMik7CisKKwlEQkZFWElUOworCit9CisKK3ZvaWQgZXRyYXhfdXNiX2hjX2N0bF9zdGF0dXNfaW50ZXJydXB0KHVzYl9pbnRlcnJ1cHRfcmVnaXN0ZXJzX3QgKnJlZykKK3sKKwlEQkZFTlRFUjsKKworCS8qIEZJWE1FOiBXaGF0IHNob3VsZCB3ZSBkbyBpZiB3ZSBnZXQgb3VydW4gb3IgcGVycm9yPyBEdW1wIHRoZSBFUCBhbmQgU0IKKwkgICBsaXN0IGZvciB0aGUgY29ycmVzcG9uZGluZyBlcGlkPyAqLworCWlmIChyZWctPnJfdXNiX3N0YXR1cyAmIElPX01BU0soUl9VU0JfU1RBVFVTLCBvdXJ1bikpIHsKKwkJcGFuaWMoIlVTQiBjb250cm9sbGVyIGdvdCBvdXJ1bi4iKTsKKwl9CisJaWYgKHJlZy0+cl91c2Jfc3RhdHVzICYgSU9fTUFTSyhSX1VTQl9TVEFUVVMsIHBlcnJvcikpIHsKKworCQkvKiBCZWZvcmUsIGV0cmF4X3VzYl9kb19pbnRyX3JlY292ZXIgd2FzIGNhbGxlZCBvbiB0aGlzIGVwaWQgaWYgaXQgd2FzCisJCSAgIGFuIGludGVycnVwdCBwaXBlLiBJIGRvbid0IHNlZSBob3cgcmUtZW5hYmxpbmcgYWxsIEVQIGRlc2NyaXB0b3JzCisJCSAgIHdpbGwgaGVscCBpZiB0aGVyZSB3YXMgYSBwcm9ncmFtbWluZyBlcnJvci4gKi8KKwkJcGFuaWMoIlVTQiBjb250cm9sbGVyIGdvdCBwZXJyb3IuIik7CisJfQorCisJaWYgKHJlZy0+cl91c2Jfc3RhdHVzICYgSU9fTUFTSyhSX1VTQl9TVEFUVVMsIGRldmljZV9tb2RlKSkgeworCQkvKiBXZSBzaG91bGQgbmV2ZXIgb3BlcmF0ZSBpbiBkZXZpY2UgbW9kZS4gKi8KKwkJcGFuaWMoIlVTQiBjb250cm9sbGVyIGluIGRldmljZSBtb2RlLiIpOworCX0KKworCS8qIFRoZXNlIGlmLXN0YXRlbWVudHMgY291bGQgcHJvYmFibHkgYmUgbmVzdGVkLiAqLworCWlmIChyZWctPnJfdXNiX3N0YXR1cyAmIElPX01BU0soUl9VU0JfU1RBVFVTLCBob3N0X21vZGUpKSB7CisJCWluZm8oIlVTQiBjb250cm9sbGVyIGluIGhvc3QgbW9kZS4iKTsKKwl9CisJaWYgKHJlZy0+cl91c2Jfc3RhdHVzICYgSU9fTUFTSyhSX1VTQl9TVEFUVVMsIHN0YXJ0ZWQpKSB7CisJCWluZm8oIlVTQiBjb250cm9sbGVyIHN0YXJ0ZWQuIik7CisJfQorCWlmIChyZWctPnJfdXNiX3N0YXR1cyAmIElPX01BU0soUl9VU0JfU1RBVFVTLCBydW5uaW5nKSkgeworCQlpbmZvKCJVU0IgY29udHJvbGxlciBydW5uaW5nLiIpOworCX0KKworCURCRkVYSVQ7CisKK30KKworCitzdGF0aWMgaW50IGV0cmF4X3JoX3N1Ym1pdF91cmIoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gdXJiLT5kZXY7CisJZXRyYXhfaGNfdCAqaGMgPSB1c2JfZGV2LT5idXMtPmhjcHJpdjsKKwl1bnNpZ25lZCBpbnQgcGlwZSA9IHVyYi0+cGlwZTsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjbWQgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSB1cmItPnNldHVwX3BhY2tldDsKKwl2b2lkICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50IGxlbmkgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJaW50IGxlbiA9IDA7CisJaW50IHN0YXQgPSAwOworCisJX191MTYgYm1SVHlwZV9iUmVxOworCV9fdTE2IHdWYWx1ZTsKKwlfX3UxNiB3SW5kZXg7CisJX191MTYgd0xlbmd0aDsKKworCURCRkVOVEVSOworCisJLyogRklYTUU6IFdoYXQgaXMgdGhpcyBpbnRlcnJ1cHQgdXJiIHRoYXQgaXMgc2VudCB0byB0aGUgcm9vdCBodWI/ICovCisJaWYgKHVzYl9waXBldHlwZSAocGlwZSkgPT0gUElQRV9JTlRFUlJVUFQpIHsKKwkJZGJnX3JoKCJSb290LUh1YiBzdWJtaXQgSVJROiBldmVyeSAlZCBtcyIsIHVyYi0+aW50ZXJ2YWwpOworCQloYy0+cmgudXJiID0gdXJiOworCQloYy0+cmguc2VuZCA9IDE7CisJCS8qIEZJWE1FOiBXZSBjb3VsZCBwcm9iYWJseSByZW1vdmUgdGhpcyBsaW5lIHNpbmNlIGl0J3MgZG9uZQorCQkgICBpbiBldHJheF9yaF9pbml0X2ludF90aW1lci4gKERvbid0IHJlbW92ZSBpdCBmcm9tCisJCSAgIGV0cmF4X3JoX2luaXRfaW50X3RpbWVyIHRob3VnaC4pICovCisJCWhjLT5yaC5pbnRlcnZhbCA9IHVyYi0+aW50ZXJ2YWw7CisJCWV0cmF4X3JoX2luaXRfaW50X3RpbWVyKHVyYik7CisJCURCRkVYSVQ7CisKKwkJcmV0dXJuIDA7CisJfQorCisJYm1SVHlwZV9iUmVxID0gY21kLT5iUmVxdWVzdFR5cGUgfCAoY21kLT5iUmVxdWVzdCA8PCA4KTsKKwl3VmFsdWUgPSBsZTE2X3RvX2NwdShjbWQtPndWYWx1ZSk7CisJd0luZGV4ID0gbGUxNl90b19jcHUoY21kLT53SW5kZXgpOworCXdMZW5ndGggPSBsZTE2X3RvX2NwdShjbWQtPndMZW5ndGgpOworCisJZGJnX3JoKCJibVJUeXBlX2JSZXEgOiAweCUwNHggKCVkKSIsIGJtUlR5cGVfYlJlcSwgYm1SVHlwZV9iUmVxKTsKKwlkYmdfcmgoIndWYWx1ZSAgICAgICA6IDB4JTA0eCAoJWQpIiwgd1ZhbHVlLCB3VmFsdWUpOworCWRiZ19yaCgid0luZGV4ICAgICAgIDogMHglMDR4ICglZCkiLCB3SW5kZXgsIHdJbmRleCk7CisJZGJnX3JoKCJ3TGVuZ3RoICAgICAgOiAweCUwNHggKCVkKSIsIHdMZW5ndGgsIHdMZW5ndGgpOworCisJc3dpdGNoIChibVJUeXBlX2JSZXEpIHsKKworCQkvKiBSZXF1ZXN0IERlc3RpbmF0aW9uOgorCQkgICB3aXRob3V0IGZsYWdzOiBEZXZpY2UsCisJCSAgIFJIX0lOVEVSRkFDRTogaW50ZXJmYWNlLAorCQkgICBSSF9FTkRQT0lOVDogZW5kcG9pbnQsCisJCSAgIFJIX0NMQVNTIG1lYW5zIEhVQiBoZXJlLAorCQkgICBSSF9PVEhFUiB8IFJIX0NMQVNTICBhbG1vc3QgZXZlciBtZWFucyBIVUJfUE9SVCBoZXJlCisJCSAqLworCisJY2FzZSBSSF9HRVRfU1RBVFVTOgorCQkqKF9fdTE2ICopIGRhdGEgPSBjcHVfdG9fbGUxNiAoMSk7CisJCU9LICgyKTsKKworCWNhc2UgUkhfR0VUX1NUQVRVUyB8IFJIX0lOVEVSRkFDRToKKwkJKihfX3UxNiAqKSBkYXRhID0gY3B1X3RvX2xlMTYgKDApOworCQlPSyAoMik7CisKKwljYXNlIFJIX0dFVF9TVEFUVVMgfCBSSF9FTkRQT0lOVDoKKwkJKihfX3UxNiAqKSBkYXRhID0gY3B1X3RvX2xlMTYgKDApOworCQlPSyAoMik7CisKKwljYXNlIFJIX0dFVF9TVEFUVVMgfCBSSF9DTEFTUzoKKwkJKihfX3UzMiAqKSBkYXRhID0gY3B1X3RvX2xlMzIgKDApOworCQlPSyAoNCk7CQkvKiBodWIgcG93ZXIgKiogKi8KKworCWNhc2UgUkhfR0VUX1NUQVRVUyB8IFJIX09USEVSIHwgUkhfQ0xBU1M6CisJCWlmICh3SW5kZXggPT0gMSkgeworCQkJKigoX191MTYqKWRhdGEpID0gY3B1X3RvX2xlMTYoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMSk7CisJCQkqKChfX3UxNiopZGF0YSArIDEpID0gY3B1X3RvX2xlMTYoaGMtPnJoLndQb3J0Q2hhbmdlXzEpOworCQl9IGVsc2UgaWYgKHdJbmRleCA9PSAyKSB7CisJCQkqKChfX3UxNiopZGF0YSkgPSBjcHVfdG9fbGUxNihoYy0+cmgucHJldl93UG9ydFN0YXR1c18yKTsKKwkJCSooKF9fdTE2KilkYXRhICsgMSkgPSBjcHVfdG9fbGUxNihoYy0+cmgud1BvcnRDaGFuZ2VfMik7CisJCX0gZWxzZSB7CisJCQlkYmdfcmgoIlJIX0dFVF9TVEFUVVMgd2hpdGggaW52YWxpZCB3SW5kZXghIik7CisJCQlPSygwKTsKKwkJfQorCisJCU9LKDQpOworCisJY2FzZSBSSF9DTEVBUl9GRUFUVVJFIHwgUkhfRU5EUE9JTlQ6CisJCXN3aXRjaCAod1ZhbHVlKSB7CisJCWNhc2UgKFJIX0VORFBPSU5UX1NUQUxMKToKKwkJCU9LICgwKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUkhfQ0xFQVJfRkVBVFVSRSB8IFJIX0NMQVNTOgorCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIChSSF9DX0hVQl9PVkVSX0NVUlJFTlQpOgorCQkJT0sgKDApOwkvKiBodWIgcG93ZXIgb3ZlciBjdXJyZW50ICoqICovCisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJIX0NMRUFSX0ZFQVRVUkUgfCBSSF9PVEhFUiB8IFJIX0NMQVNTOgorCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIChSSF9QT1JUX0VOQUJMRSk6CisJCQlpZiAod0luZGV4ID09IDEpIHsKKworCQkJCWRiZ19yaCgidHJ5aW5nIHRvIGRvIGRpc2FibGUgcG9ydCAxIik7CisKKwkJCQkqUl9VU0JfUE9SVDFfRElTQUJMRSA9IElPX1NUQVRFKFJfVVNCX1BPUlQxX0RJU0FCTEUsIGRpc2FibGUsIHllcyk7CisKKwkJCQl3aGlsZSAoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMSAmCisJCQkJICAgICAgIElPX1NUQVRFKFJfVVNCX1JIX1BPUlRfU1RBVFVTXzEsIGVuYWJsZWQsIHllcykpOworCQkJCSpSX1VTQl9QT1JUMV9ESVNBQkxFID0gSU9fU1RBVEUoUl9VU0JfUE9SVDFfRElTQUJMRSwgZGlzYWJsZSwgbm8pOworCQkJCWRiZ19yaCgiUG9ydCAxIGlzIGRpc2FibGVkIik7CisKKwkJCX0gZWxzZSBpZiAod0luZGV4ID09IDIpIHsKKworCQkJCWRiZ19yaCgidHJ5aW5nIHRvIGRvIGRpc2FibGUgcG9ydCAyIik7CisKKwkJCQkqUl9VU0JfUE9SVDJfRElTQUJMRSA9IElPX1NUQVRFKFJfVVNCX1BPUlQyX0RJU0FCTEUsIGRpc2FibGUsIHllcyk7CisKKwkJCQl3aGlsZSAoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMiAmCisJCQkJICAgICAgIElPX1NUQVRFKFJfVVNCX1JIX1BPUlRfU1RBVFVTXzIsIGVuYWJsZWQsIHllcykpOworCQkJCSpSX1VTQl9QT1JUMl9ESVNBQkxFID0gSU9fU1RBVEUoUl9VU0JfUE9SVDJfRElTQUJMRSwgZGlzYWJsZSwgbm8pOworCQkJCWRiZ19yaCgiUG9ydCAyIGlzIGRpc2FibGVkIik7CisKKwkJCX0gZWxzZSB7CisJCQkJZGJnX3JoKCJSSF9DTEVBUl9GRUFUVVJFLT5SSF9QT1JUX0VOQUJMRSAiCisJCQkJICAgICAgICJ3aXRoIGludmFsaWQgd0luZGV4ID09ICVkISIsIHdJbmRleCk7CisJCQl9CisKKwkJCU9LICgwKTsKKwkJY2FzZSAoUkhfUE9SVF9TVVNQRU5EKToKKwkJCS8qIE9wcG9zaXRlIHRvIHN1c3BlbmQgc2hvdWxkIGJlIHJlc3VtZSwgc28gd2UnbGwgZG8gYSByZXN1bWUuICovCisJCQkvKiBGSVhNRTogVVNCIDEuMSwgMTEuMTYuMi4yIHNheXM6CisJCQkgICAiQ2xlYXJpbmcgdGhlIFBPUlRfU1VTUEVORCBmZWF0dXJlIGNhdXNlcyBhIGhvc3QtaW5pdGlhdGVkIHJlc3VtZQorCQkJICAgb24gdGhlIHNwZWNpZmllZCBwb3J0LiBJZiB0aGUgcG9ydCBpcyBub3QgaW4gdGhlIFN1c3BlbmRlZCBzdGF0ZSwKKwkJCSAgIHRoZSBodWIgc2hvdWxkIHRyZWF0IHRoaXMgcmVxdWVzdCBhcyBhIGZ1bmN0aW9uYWwgbm8tb3BlcmF0aW9uLiIKKwkJCSAgIFNob3VsZG4ndCB3ZSBjaGVjayBpZiB0aGUgcG9ydCBpcyBpbiBhIHN1c3BlbmRlZCBzdGF0ZSBiZWZvcmUKKwkJCSAgIHJlc3VtaW5nPyAqLworCisJCQkvKiBNYWtlIHN1cmUgdGhlIGNvbnRyb2xsZXIgaXNuJ3QgYnVzeS4gKi8KKwkJCXdoaWxlICgqUl9VU0JfQ09NTUFORCAmIElPX01BU0soUl9VU0JfQ09NTUFORCwgYnVzeSkpOworCisJCQlpZiAod0luZGV4ID09IDEpIHsKKwkJCQkqUl9VU0JfQ09NTUFORCA9CisJCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfc2VsLCBwb3J0MSkgfAorCQkJCQlJT19TVEFURShSX1VTQl9DT01NQU5ELCBwb3J0X2NtZCwgcmVzdW1lKSB8CisJCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIGN0cmxfY21kLCBub3ApOworCQkJfSBlbHNlIGlmICh3SW5kZXggPT0gMikgeworCQkJCSpSX1VTQl9DT01NQU5EID0KKwkJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgcG9ydF9zZWwsIHBvcnQyKSB8CisJCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfY21kLCByZXN1bWUpIHwKKwkJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgY3RybF9jbWQsIG5vcCk7CisJCQl9IGVsc2UgeworCQkJCWRiZ19yaCgiUkhfQ0xFQVJfRkVBVFVSRS0+UkhfUE9SVF9TVVNQRU5EICIKKwkJCQkgICAgICAgIndpdGggaW52YWxpZCB3SW5kZXggPT0gJWQhIiwgd0luZGV4KTsKKwkJCX0KKworCQkJT0sgKDApOworCQljYXNlIChSSF9QT1JUX1BPV0VSKToKKwkJCU9LICgwKTsJLyogcG9ydCBwb3dlciAqKiAqLworCQljYXNlIChSSF9DX1BPUlRfQ09OTkVDVElPTik6CisJCQlpZiAod0luZGV4ID09IDEpIHsKKwkJCQloYy0+cmgud1BvcnRDaGFuZ2VfMSAmPSB+KDEgPDwgUkhfUE9SVF9DT05ORUNUSU9OKTsKKwkJCX0gZWxzZSBpZiAod0luZGV4ID09IDIpIHsKKwkJCQloYy0+cmgud1BvcnRDaGFuZ2VfMiAmPSB+KDEgPDwgUkhfUE9SVF9DT05ORUNUSU9OKTsKKwkJCX0gZWxzZSB7CisJCQkJZGJnX3JoKCJSSF9DTEVBUl9GRUFUVVJFLT5SSF9DX1BPUlRfQ09OTkVDVElPTiAiCisJCQkJICAgICAgICJ3aXRoIGludmFsaWQgd0luZGV4ID09ICVkISIsIHdJbmRleCk7CisJCQl9CisKKwkJCU9LICgwKTsKKwkJY2FzZSAoUkhfQ19QT1JUX0VOQUJMRSk6CisJCQlpZiAod0luZGV4ID09IDEpIHsKKwkJCQloYy0+cmgud1BvcnRDaGFuZ2VfMSAmPSB+KDEgPDwgUkhfUE9SVF9FTkFCTEUpOworCQkJfSBlbHNlIGlmICh3SW5kZXggPT0gMikgeworCQkJCWhjLT5yaC53UG9ydENoYW5nZV8yICY9IH4oMSA8PCBSSF9QT1JUX0VOQUJMRSk7CisJCQl9IGVsc2UgeworCQkJCWRiZ19yaCgiUkhfQ0xFQVJfRkVBVFVSRS0+UkhfQ19QT1JUX0VOQUJMRSAiCisJCQkJICAgICAgICJ3aXRoIGludmFsaWQgd0luZGV4ID09ICVkISIsIHdJbmRleCk7CisJCQl9CisJCQlPSyAoMCk7CisJCWNhc2UgKFJIX0NfUE9SVF9TVVNQRU5EKToKKy8qKiogV1JfUkhfUE9SVFNUQVQoUkhfUFNfUFNTQyk7ICovCisJCQlPSyAoMCk7CisJCWNhc2UgKFJIX0NfUE9SVF9PVkVSX0NVUlJFTlQpOgorCQkJT0sgKDApOwkvKiBwb3J0IHBvd2VyIG92ZXIgY3VycmVudCAqKiAqLworCQljYXNlIChSSF9DX1BPUlRfUkVTRVQpOgorCQkJaWYgKHdJbmRleCA9PSAxKSB7CisJCQkJaGMtPnJoLndQb3J0Q2hhbmdlXzEgJj0gfigxIDw8IFJIX1BPUlRfUkVTRVQpOworCQkJfSBlbHNlIGlmICh3SW5kZXggPT0gMikgeworCQkJCWhjLT5yaC53UG9ydENoYW5nZV8yICY9IH4oMSA8PCBSSF9QT1JUX1JFU0VUKTsKKwkJCX0gZWxzZSB7CisJCQkJZGJnX3JoKCJSSF9DTEVBUl9GRUFUVVJFLT5SSF9DX1BPUlRfUkVTRVQgIgorCQkJCSAgICAgICAid2l0aCBpbnZhbGlkIGluZGV4ID09ICVkISIsIHdJbmRleCk7CisJCQl9CisKKwkJCU9LICgwKTsKKworCQl9CisJCWJyZWFrOworCisJY2FzZSBSSF9TRVRfRkVBVFVSRSB8IFJIX09USEVSIHwgUkhfQ0xBU1M6CisJCXN3aXRjaCAod1ZhbHVlKSB7CisJCWNhc2UgKFJIX1BPUlRfU1VTUEVORCk6CisKKwkJCS8qIE1ha2Ugc3VyZSB0aGUgY29udHJvbGxlciBpc24ndCBidXN5LiAqLworCQkJd2hpbGUgKCpSX1VTQl9DT01NQU5EICYgSU9fTUFTSyhSX1VTQl9DT01NQU5ELCBidXN5KSk7CisKKwkJCWlmICh3SW5kZXggPT0gMSkgeworCQkJCSpSX1VTQl9DT01NQU5EID0KKwkJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgcG9ydF9zZWwsIHBvcnQxKSB8CisJCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfY21kLCBzdXNwZW5kKSB8CisJCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIGN0cmxfY21kLCBub3ApOworCQkJfSBlbHNlIGlmICh3SW5kZXggPT0gMikgeworCQkJCSpSX1VTQl9DT01NQU5EID0KKwkJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgcG9ydF9zZWwsIHBvcnQyKSB8CisJCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfY21kLCBzdXNwZW5kKSB8CisJCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIGN0cmxfY21kLCBub3ApOworCQkJfSBlbHNlIHsKKwkJCQlkYmdfcmgoIlJIX1NFVF9GRUFUVVJFLT5SSF9QT1JUX1NVU1BFTkQgIgorCQkJCSAgICAgICAid2l0aCBpbnZhbGlkIHdJbmRleCA9PSAlZCEiLCB3SW5kZXgpOworCQkJfQorCisJCQlPSyAoMCk7CisJCWNhc2UgKFJIX1BPUlRfUkVTRVQpOgorCQkJaWYgKHdJbmRleCA9PSAxKSB7CisKKwkJCXBvcnRfMV9yZXNldDoKKwkJCQlkYmdfcmgoIkRvaW5nIHJlc2V0IG9mIHBvcnQgMSIpOworCisJCQkJLyogTWFrZSBzdXJlIHRoZSBjb250cm9sbGVyIGlzbid0IGJ1c3kuICovCisJCQkJd2hpbGUgKCpSX1VTQl9DT01NQU5EICYgSU9fTUFTSyhSX1VTQl9DT01NQU5ELCBidXN5KSk7CisKKwkJCQkqUl9VU0JfQ09NTUFORCA9CisJCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfc2VsLCBwb3J0MSkgfAorCQkJCQlJT19TVEFURShSX1VTQl9DT01NQU5ELCBwb3J0X2NtZCwgcmVzZXQpIHwKKwkJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgY3RybF9jbWQsIG5vcCk7CisKKwkJCQkvKiBXZSBtdXN0IHdhaXQgYXQgbGVhc3QgMTAgbXMgZm9yIHRoZSBkZXZpY2UgdG8gcmVjb3Zlci4KKwkJCQkgICAxNSBtcyBzaG91bGQgYmUgZW5vdWdoLiAqLworCQkJCXVkZWxheSgxNTAwMCk7CisKKwkJCQkvKiBXYWl0IGZvciByZXNldCBiaXQgdG8gZ28gbG93IChzaG91bGQgYmUgZG9uZSBieSBub3cpLiAqLworCQkJCXdoaWxlIChoYy0+cmgucHJldl93UG9ydFN0YXR1c18xICYKKwkJCQkgICAgICAgSU9fU1RBVEUoUl9VU0JfUkhfUE9SVF9TVEFUVVNfMSwgcmVzZXQsIHllcykpOworCisJCQkJLyogSWYgdGhlIHBvcnQgc3RhdHVzIGlzCisJCQkJICAgMSkgY29ubmVjdGVkIGFuZCBlbmFibGVkIHRoZW4gdGhlcmUgaXMgYSBkZXZpY2UgYW5kIGV2ZXJ5dGhpbmcgaXMgZmluZQorCQkJCSAgIDIpIG5laXRoZXIgY29ubmVjdGVkIG5vciBlbmFibGVkIHRoZW4gdGhlcmUgaXMgbm8gZGV2aWNlLCBhbHNvIGZpbmUKKwkJCQkgICAzKSBjb25uZWN0ZWQgYW5kIG5vdCBlbmFibGVkIHRoZW4gd2UgdHJ5IGFnYWluCisJCQkJICAgKFllcywgdGhlcmUgYXJlIG90aGVyIHBvcnQgc3RhdHVzIGNvbWJpbmF0aW9ucyBiZXNpZGVzIHRoZXNlLikgKi8KKworCQkJCWlmICgoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMSAmCisJCQkJICAgICBJT19TVEFURShSX1VTQl9SSF9QT1JUX1NUQVRVU18xLCBjb25uZWN0ZWQsIHllcykpICYmCisJCQkJICAgIChoYy0+cmgucHJldl93UG9ydFN0YXR1c18xICYKKwkJCQkgICAgIElPX1NUQVRFKFJfVVNCX1JIX1BPUlRfU1RBVFVTXzEsIGVuYWJsZWQsIG5vKSkpIHsKKwkJCQkJZGJnX3JoKCJDb25uZWN0ZWQgZGV2aWNlIG9uIHBvcnQgMSwgYnV0IHBvcnQgbm90IGVuYWJsZWQ/IgorCQkJCQkgICAgICAgIiBUcnlpbmcgcmVzZXQgYWdhaW4uIik7CisJCQkJCWdvdG8gcG9ydF8yX3Jlc2V0OworCQkJCX0KKworCQkJCS8qIERpYWdub3N0aWMgcHJpbnRvdXRzLiAqLworCQkJCWlmICgoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMSAmCisJCQkJICAgICBJT19TVEFURShSX1VTQl9SSF9QT1JUX1NUQVRVU18xLCBjb25uZWN0ZWQsIG5vKSkgJiYKKwkJCQkgICAgKGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzEgJgorCQkJCSAgICAgSU9fU1RBVEUoUl9VU0JfUkhfUE9SVF9TVEFUVVNfMSwgZW5hYmxlZCwgbm8pKSkgeworCQkJCQlkYmdfcmgoIk5vIGNvbm5lY3RlZCBkZXZpY2Ugb24gcG9ydCAxIik7CisJCQkJfSBlbHNlIGlmICgoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMSAmCisJCQkJCSAgICBJT19TVEFURShSX1VTQl9SSF9QT1JUX1NUQVRVU18xLCBjb25uZWN0ZWQsIHllcykpICYmCisJCQkJCSAgIChoYy0+cmgucHJldl93UG9ydFN0YXR1c18xICYKKwkJCQkJICAgIElPX1NUQVRFKFJfVVNCX1JIX1BPUlRfU1RBVFVTXzEsIGVuYWJsZWQsIHllcykpKSB7CisJCQkJCWRiZ19yaCgiQ29ubmVjdGVkIGRldmljZSBvbiBwb3J0IDEsIHBvcnQgMSBlbmFibGVkIik7CisJCQkJfQorCisJCQl9IGVsc2UgaWYgKHdJbmRleCA9PSAyKSB7CisKKwkJCXBvcnRfMl9yZXNldDoKKwkJCQlkYmdfcmgoIkRvaW5nIHJlc2V0IG9mIHBvcnQgMiIpOworCisJCQkJLyogTWFrZSBzdXJlIHRoZSBjb250cm9sbGVyIGlzbid0IGJ1c3kuICovCisJCQkJd2hpbGUgKCpSX1VTQl9DT01NQU5EICYgSU9fTUFTSyhSX1VTQl9DT01NQU5ELCBidXN5KSk7CisKKwkJCQkvKiBJc3N1ZSB0aGUgcmVzZXQgY29tbWFuZC4gKi8KKwkJCQkqUl9VU0JfQ09NTUFORCA9CisJCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfc2VsLCBwb3J0MikgfAorCQkJCQlJT19TVEFURShSX1VTQl9DT01NQU5ELCBwb3J0X2NtZCwgcmVzZXQpIHwKKwkJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgY3RybF9jbWQsIG5vcCk7CisKKwkJCQkvKiBXZSBtdXN0IHdhaXQgYXQgbGVhc3QgMTAgbXMgZm9yIHRoZSBkZXZpY2UgdG8gcmVjb3Zlci4KKwkJCQkgICAxNSBtcyBzaG91bGQgYmUgZW5vdWdoLiAqLworCQkJCXVkZWxheSgxNTAwMCk7CisKKwkJCQkvKiBXYWl0IGZvciByZXNldCBiaXQgdG8gZ28gbG93IChzaG91bGQgYmUgZG9uZSBieSBub3cpLiAqLworCQkJCXdoaWxlIChoYy0+cmgucHJldl93UG9ydFN0YXR1c18yICYKKwkJCQkgICAgICAgSU9fU1RBVEUoUl9VU0JfUkhfUE9SVF9TVEFUVVNfMiwgcmVzZXQsIHllcykpOworCisJCQkJLyogSWYgdGhlIHBvcnQgc3RhdHVzIGlzCisJCQkJICAgMSkgY29ubmVjdGVkIGFuZCBlbmFibGVkIHRoZW4gdGhlcmUgaXMgYSBkZXZpY2UgYW5kIGV2ZXJ5dGhpbmcgaXMgZmluZQorCQkJCSAgIDIpIG5laXRoZXIgY29ubmVjdGVkIG5vciBlbmFibGVkIHRoZW4gdGhlcmUgaXMgbm8gZGV2aWNlLCBhbHNvIGZpbmUKKwkJCQkgICAzKSBjb25uZWN0ZWQgYW5kIG5vdCBlbmFibGVkIHRoZW4gd2UgdHJ5IGFnYWluCisJCQkJICAgKFllcywgdGhlcmUgYXJlIG90aGVyIHBvcnQgc3RhdHVzIGNvbWJpbmF0aW9ucyBiZXNpZGVzIHRoZXNlLikgKi8KKworCQkJCWlmICgoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMiAmCisJCQkJICAgICBJT19TVEFURShSX1VTQl9SSF9QT1JUX1NUQVRVU18yLCBjb25uZWN0ZWQsIHllcykpICYmCisJCQkJICAgIChoYy0+cmgucHJldl93UG9ydFN0YXR1c18yICYKKwkJCQkgICAgIElPX1NUQVRFKFJfVVNCX1JIX1BPUlRfU1RBVFVTXzIsIGVuYWJsZWQsIG5vKSkpIHsKKwkJCQkJZGJnX3JoKCJDb25uZWN0ZWQgZGV2aWNlIG9uIHBvcnQgMiwgYnV0IHBvcnQgbm90IGVuYWJsZWQ/IgorCQkJCQkgICAgICAgIiBUcnlpbmcgcmVzZXQgYWdhaW4uIik7CisJCQkJCWdvdG8gcG9ydF8yX3Jlc2V0OworCQkJCX0KKworCQkJCS8qIERpYWdub3N0aWMgcHJpbnRvdXRzLiAqLworCQkJCWlmICgoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMiAmCisJCQkJICAgICBJT19TVEFURShSX1VTQl9SSF9QT1JUX1NUQVRVU18yLCBjb25uZWN0ZWQsIG5vKSkgJiYKKwkJCQkgICAgKGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzIgJgorCQkJCSAgICAgSU9fU1RBVEUoUl9VU0JfUkhfUE9SVF9TVEFUVVNfMiwgZW5hYmxlZCwgbm8pKSkgeworCQkJCQlkYmdfcmgoIk5vIGNvbm5lY3RlZCBkZXZpY2Ugb24gcG9ydCAyIik7CisJCQkJfSBlbHNlIGlmICgoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMiAmCisJCQkJCSAgICBJT19TVEFURShSX1VTQl9SSF9QT1JUX1NUQVRVU18yLCBjb25uZWN0ZWQsIHllcykpICYmCisJCQkJCSAgIChoYy0+cmgucHJldl93UG9ydFN0YXR1c18yICYKKwkJCQkJICAgIElPX1NUQVRFKFJfVVNCX1JIX1BPUlRfU1RBVFVTXzIsIGVuYWJsZWQsIHllcykpKSB7CisJCQkJCWRiZ19yaCgiQ29ubmVjdGVkIGRldmljZSBvbiBwb3J0IDIsIHBvcnQgMiBlbmFibGVkIik7CisJCQkJfQorCisJCQl9IGVsc2UgeworCQkJCWRiZ19yaCgiUkhfU0VUX0ZFQVRVUkUtPlJIX1BPUlRfUkVTRVQgd2l0aCBpbnZhbGlkIHdJbmRleCA9ICVkIiwgd0luZGV4KTsKKwkJCX0KKworCQkJLyogTWFrZSBzdXJlIHRoZSBjb250cm9sbGVyIGlzbid0IGJ1c3kuICovCisJCQl3aGlsZSAoKlJfVVNCX0NPTU1BTkQgJiBJT19NQVNLKFJfVVNCX0NPTU1BTkQsIGJ1c3kpKTsKKworCQkJLyogSWYgYWxsIGVuYWJsZWQgcG9ydHMgd2VyZSBkaXNhYmxlZCB0aGUgaG9zdCBjb250cm9sbGVyIGdvZXMgZG93biBpbnRvCisJCQkgICBzdGFydGVkIG1vZGUsIHNvIHdlIG5lZWQgdG8gYnJpbmcgaXQgYmFjayBpbnRvIHRoZSBydW5uaW5nIHN0YXRlLgorCQkJICAgKFRoaXMgaXMgc2FmZSBldmVuIGlmIGl0J3MgYWxyZWFkeSBpbiB0aGUgcnVubmluZyBzdGF0ZS4pICovCisJCQkqUl9VU0JfQ09NTUFORCA9CisJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgcG9ydF9zZWwsIG5vcCkgfAorCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfY21kLCByZXNldCkgfAorCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIGN0cmxfY21kLCBob3N0X3J1bik7CisKKwkJCWRiZ19yaCgiLi4uRG9uZSIpOworCQkJT0soMCk7CisKKwkJY2FzZSAoUkhfUE9SVF9QT1dFUik6CisJCQlPSyAoMCk7CS8qIHBvcnQgcG93ZXIgKiogKi8KKwkJY2FzZSAoUkhfUE9SVF9FTkFCTEUpOgorCQkJLyogVGhlcmUgaXMgbm8gcG9ydCBlbmFibGUgY29tbWFuZCBpbiB0aGUgaG9zdCBjb250cm9sbGVyLCBzbyBpZiB0aGUKKwkJCSAgIHBvcnQgaXMgYWxyZWFkeSBlbmFibGVkLCB3ZSBkbyBub3RoaW5nLiBJZiBub3QsIHdlIHJlc2V0IHRoZSBwb3J0CisJCQkgICAod2l0aCBhbiB1Z2x5IGdvdG8pLiAqLworCisJCQlpZiAod0luZGV4ID09IDEpIHsKKwkJCQlpZiAoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMSAmCisJCQkJICAgIElPX1NUQVRFKFJfVVNCX1JIX1BPUlRfU1RBVFVTXzEsIGVuYWJsZWQsIG5vKSkgeworCQkJCQlnb3RvIHBvcnRfMV9yZXNldDsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKHdJbmRleCA9PSAyKSB7CisJCQkJaWYgKGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzIgJgorCQkJCSAgICBJT19TVEFURShSX1VTQl9SSF9QT1JUX1NUQVRVU18yLCBlbmFibGVkLCBubykpIHsKKwkJCQkJZ290byBwb3J0XzJfcmVzZXQ7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlkYmdfcmgoIlJIX1NFVF9GRUFUVVJFLT5SSF9HRVRfU1RBVFVTIHdpdGggaW52YWxpZCB3SW5kZXggPSAlZCIsIHdJbmRleCk7CisJCQl9CisJCQlPSyAoMCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJIX1NFVF9BRERSRVNTOgorCQloYy0+cmguZGV2bnVtID0gd1ZhbHVlOworCQlkYmdfcmgoIlJIIGFkZHJlc3Mgc2V0IHRvOiAlZCIsIGhjLT5yaC5kZXZudW0pOworCQlPSyAoMCk7CisKKwljYXNlIFJIX0dFVF9ERVNDUklQVE9SOgorCQlzd2l0Y2ggKCh3VmFsdWUgJiAweGZmMDApID4+IDgpIHsKKwkJY2FzZSAoMHgwMSk6CS8qIGRldmljZSBkZXNjcmlwdG9yICovCisJCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbmksIG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mIChyb290X2h1Yl9kZXZfZGVzKSwgd0xlbmd0aCkpOworCQkJbWVtY3B5IChkYXRhLCByb290X2h1Yl9kZXZfZGVzLCBsZW4pOworCQkJT0sgKGxlbik7CisJCWNhc2UgKDB4MDIpOgkvKiBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3IgKi8KKwkJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuaSwgbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YgKHJvb3RfaHViX2NvbmZpZ19kZXMpLCB3TGVuZ3RoKSk7CisJCQltZW1jcHkgKGRhdGEsIHJvb3RfaHViX2NvbmZpZ19kZXMsIGxlbik7CisJCQlPSyAobGVuKTsKKwkJY2FzZSAoMHgwMyk6CS8qIHN0cmluZyBkZXNjcmlwdG9ycyAqLworCQkJbGVuID0gdXNiX3Jvb3RfaHViX3N0cmluZyAod1ZhbHVlICYgMHhmZiwKKwkJCQkJCSAgIDB4ZmYsICJFVFJBWCAxMDBMWCIsCisJCQkJCQkgICBkYXRhLCB3TGVuZ3RoKTsKKwkJCWlmIChsZW4gPiAwKSB7CisJCQkJT0sobWluKGxlbmksIGxlbikpOworCQkJfSBlbHNlIHsKKwkJCQlzdGF0ID0gLUVQSVBFOworCQkJfQorCisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJIX0dFVF9ERVNDUklQVE9SIHwgUkhfQ0xBU1M6CisJCXJvb3RfaHViX2h1Yl9kZXNbMl0gPSBoYy0+cmgubnVtcG9ydHM7CisJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuaSwgbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YgKHJvb3RfaHViX2h1Yl9kZXMpLCB3TGVuZ3RoKSk7CisJCW1lbWNweSAoZGF0YSwgcm9vdF9odWJfaHViX2RlcywgbGVuKTsKKwkJT0sgKGxlbik7CisKKwljYXNlIFJIX0dFVF9DT05GSUdVUkFUSU9OOgorCQkqKF9fdTggKikgZGF0YSA9IDB4MDE7CisJCU9LICgxKTsKKworCWNhc2UgUkhfU0VUX0NPTkZJR1VSQVRJT046CisJCU9LICgwKTsKKworCWRlZmF1bHQ6CisJCXN0YXQgPSAtRVBJUEU7CisJfQorCisJdXJiLT5hY3R1YWxfbGVuZ3RoID0gbGVuOworCXVyYi0+c3RhdHVzID0gc3RhdDsKKwl1cmItPmRldiA9IE5VTEw7CisJaWYgKHVyYi0+Y29tcGxldGUpIHsKKwkJdXJiLT5jb21wbGV0ZSh1cmIsIE5VTEwpOworCX0KKwlEQkZFWElUOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitldHJheF91c2JfYnVsa19lb3RfdGltZXJfZnVuYyh1bnNpZ25lZCBsb25nIGR1bW15KQoreworCS8qIEJlY2F1c2Ugb2YgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgdG9wIGhhbGYsIHdlIG1pZ2h0IG1pc3MgYSBidWxrIGVvdC4KKwkgICBUaGlzIHRpbWVyICJzaW11bGF0ZXMiIGEgYnVsayBlb3QgaWYgd2UgZG9uJ3QgZ2V0IG9uZSBmb3IgYSB3aGlsZSwgaG9wZWZ1bGx5CisJICAgY29ycmVjdGluZyB0aGUgc2l0dWF0aW9uLiAqLworCWRiZ19idWxrKCJidWxrX2VvdF90aW1lciB0aW1lZCBvdXQuIik7CisJZXRyYXhfdXNiX2hjX2J1bGtfZW90X2ludGVycnVwdCgxKTsKK30KKworc3RhdGljIHZvaWQqCitldHJheF91c2JfYnVmZmVyX2FsbG9jKHN0cnVjdCB1c2JfYnVzKiBidXMsIHNpemVfdCBzaXplLCBpbnQgbWVtX2ZsYWdzLCBkbWFfYWRkcl90ICpkbWEpCit7CisgIHJldHVybiBrbWFsbG9jKHNpemUsIG1lbV9mbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCitldHJheF91c2JfYnVmZmVyX2ZyZWUoc3RydWN0IHVzYl9idXMgKmJ1cywgc2l6ZV90IHNpemUsIHZvaWQgKmFkZHIsIGRtYV9hZGRyX3QgZG1hKQoreworICBrZnJlZShhZGRyKTsKK30KKworCitzdGF0aWMgc3RydWN0IGRldmljZSBmYWtlX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgZXRyYXhfdXNiX2hjX2luaXQodm9pZCkKK3sKKwlzdGF0aWMgZXRyYXhfaGNfdCAqaGM7CisJc3RydWN0IHVzYl9idXMgKmJ1czsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX3JoOworCWludCBpOworCisJREJGRU5URVI7CisKKwlpbmZvKCJFVFJBWCAxMDBMWCBVU0ItSENEICVzIChjKSAyMDAxLTIwMDMgQXhpcyBDb21tdW5pY2F0aW9ucyBBQlxuIiwgdXNiX2hjZF92ZXJzaW9uKTsKKworIAloYyA9IGttYWxsb2Moc2l6ZW9mKGV0cmF4X2hjX3QpLCBHRlBfS0VSTkVMKTsKKwlhc3NlcnQoaGMgIT0gTlVMTCk7CisKKwkvKiBXZSB1c2Uga21lbV9jYWNoZV8qIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCBETUEgZGVzYy4gYXJlIGR3b3JkIGFsaWduZWQgKi8KKwkvKiBOb3RlIHRoYXQgd2Ugc3BlY2lmeSBzaXplb2YoVVNCX0VQX0Rlc2NfdCkgYXMgdGhlIHNpemUsIGJ1dCBhbHNvIGFsbG9jYXRlCisJICAgU0IgZGVzY3JpcHRvcnMgZnJvbSB0aGlzIGNhY2hlLiBUaGlzIGlzIG9rIHNpbmNlIHNpemVvZihVU0JfRVBfRGVzY190KSA9PQorCSAgIHNpemVvZihVU0JfU0JfRGVzY190KS4gKi8KKworCXVzYl9kZXNjX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInVzYl9kZXNjX2NhY2hlIiwgc2l6ZW9mKFVTQl9FUF9EZXNjX3QpLCAwLAorCQkJCQkgICBTTEFCX0hXQ0FDSEVfQUxJR04sIDAsIDApOworCWFzc2VydCh1c2JfZGVzY19jYWNoZSAhPSBOVUxMKTsKKworCXRvcF9oYWxmX3JlZ19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJ0b3BfaGFsZl9yZWdfY2FjaGUiLAorCQkJCQkgICAgICAgc2l6ZW9mKHVzYl9pbnRlcnJ1cHRfcmVnaXN0ZXJzX3QpLAorCQkJCQkgICAgICAgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLCAwLCAwKTsKKwlhc3NlcnQodG9wX2hhbGZfcmVnX2NhY2hlICE9IE5VTEwpOworCisJaXNvY19jb21wbF9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJpc29jX2NvbXBsX2NhY2hlIiwKKwkJCQkJCXNpemVvZih1c2JfaXNvY19jb21wbGV0ZV9kYXRhX3QpLAorCQkJCQkJMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLCAwLCAwKTsKKwlhc3NlcnQoaXNvY19jb21wbF9jYWNoZSAhPSBOVUxMKTsKKworCWV0cmF4X3VzYl9idXMgPSBidXMgPSB1c2JfYWxsb2NfYnVzKCZldHJheF91c2JfZGV2aWNlX29wZXJhdGlvbnMpOworCWhjLT5idXMgPSBidXM7CisJYnVzLT5idXNfbmFtZT0iRVRSQVggMTAwTFgiOworCWJ1cy0+aGNwcml2ID0gaGM7CisKKwkvKiBJbml0YWxpemUgUkggdG8gdGhlIGRlZmF1bHQgYWRkcmVzcy4KKwkgICBBbmQgbWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBubyBzdGF0dXMgY2hhbmdlIGluZGljYXRpb24gKi8KKwloYy0+cmgubnVtcG9ydHMgPSAyOyAgLyogVGhlIFJIIGhhcyB0d28gcG9ydHMgKi8KKwloYy0+cmguZGV2bnVtID0gMTsKKwloYy0+cmgud1BvcnRDaGFuZ2VfMSA9IDA7CisJaGMtPnJoLndQb3J0Q2hhbmdlXzIgPSAwOworCisJLyogQWxzbyBpbml0YXRlIHRoZSBwcmV2aW91cyB2YWx1ZXMgdG8gemVybyAqLworCWhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzEgPSAwOworCWhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzIgPSAwOworCisJLyogSW5pdGlhbGl6ZSB0aGUgaW50ci10cmFmZmljIGZsYWdzICovCisJLyogRklYTUU6IFRoaXMgaXNuJ3QgdXNlZC4gKEJlc2lkZXMsIHRoZSBlcnJvciBmaWVsZCBpc24ndCBpbml0aWFsaXplZC4pICovCisJaGMtPmludHIuc2xlZXBpbmcgPSAwOworCWhjLT5pbnRyLndxID0gTlVMTDsKKworCWVwaWRfdXNhZ2VfYml0bWFzayA9IDA7CisJZXBpZF9vdXRfdHJhZmZpYyA9IDA7CisKKwkvKiBNYXJrIHRoZSBpbnZhbGlkIGVwaWQgYXMgYmVpbmcgdXNlZC4gKi8KKwlzZXRfYml0KElOVkFMSURfRVBJRCwgKHZvaWQgKikmZXBpZF91c2FnZV9iaXRtYXNrKTsKKwkqUl9VU0JfRVBUX0lOREVYID0gSU9fRklFTEQoUl9VU0JfRVBUX0lOREVYLCB2YWx1ZSwgSU5WQUxJRF9FUElEKTsKKwlub3AoKTsKKwkvKiBUaGUgdmFsaWQgYml0IHNob3VsZCBzdGlsbCBiZSBzZXQgKCdpbnZhbGlkJyBpcyBpbiBvdXIgd29ybGQ7IG5vdCB0aGUgaGFyZHdhcmUncykuICovCisJKlJfVVNCX0VQVF9EQVRBID0gKElPX1NUQVRFKFJfVVNCX0VQVF9EQVRBLCB2YWxpZCwgeWVzKSB8CisJCQkgICBJT19GSUVMRChSX1VTQl9FUFRfREFUQSwgbWF4X2xlbiwgMSkpOworCisJLyogTWFyayB0aGUgZHVtbXkgZXBpZCBhcyBiZWluZyB1c2VkLiAqLworCXNldF9iaXQoRFVNTVlfRVBJRCwgKHZvaWQgKikmZXBpZF91c2FnZV9iaXRtYXNrKTsKKwkqUl9VU0JfRVBUX0lOREVYID0gSU9fRklFTEQoUl9VU0JfRVBUX0lOREVYLCB2YWx1ZSwgRFVNTVlfRVBJRCk7CisJbm9wKCk7CisJKlJfVVNCX0VQVF9EQVRBID0gKElPX1NUQVRFKFJfVVNCX0VQVF9EQVRBLCB2YWxpZCwgbm8pIHwKKwkJCSAgIElPX0ZJRUxEKFJfVVNCX0VQVF9EQVRBLCBtYXhfbGVuLCAxKSk7CisKKwkvKiBJbml0aWFsaXplIHRoZSB1cmIgbGlzdCBieSBpbml0aWF0aW5nIGEgaGVhZCBmb3IgZWFjaCBsaXN0LiAqLworCWZvciAoaSA9IDA7IGkgPCBOQlJfT0ZfRVBJRFM7IGkrKykgeworCQlJTklUX0xJU1RfSEVBRCgmdXJiX2xpc3RbaV0pOworCX0KKwlzcGluX2xvY2tfaW5pdCgmdXJiX2xpc3RfbG9jayk7CisKKwlJTklUX0xJU1RfSEVBRCgmdXJiX3VubGlua19saXN0KTsKKworCisJLyogSW5pdGlhdGUgdGhlIGJ1bGsgc3RhcnQgdGltZXIuICovCisJaW5pdF90aW1lcigmYnVsa19zdGFydF90aW1lcik7CisJYnVsa19zdGFydF90aW1lci5leHBpcmVzID0gamlmZmllcyArIEJVTEtfU1RBUlRfVElNRVJfSU5URVJWQUw7CisJYnVsa19zdGFydF90aW1lci5mdW5jdGlvbiA9IGV0cmF4X3VzYl9idWxrX3N0YXJ0X3RpbWVyX2Z1bmM7CisJYWRkX3RpbWVyKCZidWxrX3N0YXJ0X3RpbWVyKTsKKworCisJLyogSW5pdGlhdGUgdGhlIGJ1bGsgZW90IHRpbWVyLiAqLworCWluaXRfdGltZXIoJmJ1bGtfZW90X3RpbWVyKTsKKwlidWxrX2VvdF90aW1lci5leHBpcmVzID0gamlmZmllcyArIEJVTEtfRU9UX1RJTUVSX0lOVEVSVkFMOworCWJ1bGtfZW90X3RpbWVyLmZ1bmN0aW9uID0gZXRyYXhfdXNiX2J1bGtfZW90X3RpbWVyX2Z1bmM7CisJYWRkX3RpbWVyKCZidWxrX2VvdF90aW1lcik7CisKKwkvKiBTZXQgdXAgdGhlIGRhdGEgc3RydWN0dXJlcyBmb3IgVVNCIHRyYWZmaWMuIE5vdGUgdGhhdCB0aGlzIG11c3QgYmUgZG9uZSBiZWZvcmUKKwkgICBhbnkgaW50ZXJydXB0IHRoYXQgcmVsaWVzIG9uIHNhbmUgRE1BIGxpc3Qgb2NjdXJycy4gKi8KKwlpbml0X3J4X2J1ZmZlcnMoKTsKKwlpbml0X3R4X2J1bGtfZXAoKTsKKwlpbml0X3R4X2N0cmxfZXAoKTsKKwlpbml0X3R4X2ludHJfZXAoKTsKKwlpbml0X3R4X2lzb2NfZXAoKTsKKworICAgICAgICBkZXZpY2VfaW5pdGlhbGl6ZSgmZmFrZV9kZXZpY2UpOworICAgICAgICBrb2JqZWN0X3NldF9uYW1lKCZmYWtlX2RldmljZS5rb2JqLCAiZXRyYXhfdXNiIik7CisgICAgICAgIGtvYmplY3RfYWRkKCZmYWtlX2RldmljZS5rb2JqKTsKKyAgICAgICAgaGMtPmJ1cy0+Y29udHJvbGxlciA9ICZmYWtlX2RldmljZTsKKwl1c2JfcmVnaXN0ZXJfYnVzKGhjLT5idXMpOworCisJKlJfSVJRX01BU0syX1NFVCA9CisJCS8qIE5vdGUgdGhhdCB0aGVzZSBpbnRlcnJ1cHRzIGFyZSBub3QgdXNlZC4gKi8KKwkJSU9fU1RBVEUoUl9JUlFfTUFTSzJfU0VULCBkbWE4X3N1YjBfZGVzY3IsIHNldCkgfAorCQkvKiBTdWIgY2hhbm5lbCAxIChjdHJsKSBkZXNjci4gaW50ZXJydXB0cyBhcmUgdXNlZC4gKi8KKwkJSU9fU1RBVEUoUl9JUlFfTUFTSzJfU0VULCBkbWE4X3N1YjFfZGVzY3IsIHNldCkgfAorCQlJT19TVEFURShSX0lSUV9NQVNLMl9TRVQsIGRtYThfc3ViMl9kZXNjciwgc2V0KSB8CisJCS8qIFN1YiBjaGFubmVsIDMgKGlzb2MpIGRlc2NyLiBpbnRlcnJ1cHRzIGFyZSB1c2VkLiAqLworCQlJT19TVEFURShSX0lSUV9NQVNLMl9TRVQsIGRtYThfc3ViM19kZXNjciwgc2V0KTsKKworCS8qIE5vdGUgdGhhdCB0aGUgZG1hOV9kZXNjciBpbnRlcnJ1cHQgaXMgbm90IHVzZWQuICovCisJKlJfSVJRX01BU0syX1NFVCA9CisJCUlPX1NUQVRFKFJfSVJRX01BU0syX1NFVCwgZG1hOV9lb3AsIHNldCkgfAorCQlJT19TVEFURShSX0lSUV9NQVNLMl9TRVQsIGRtYTlfZGVzY3IsIHNldCk7CisKKwkvKiBGSVhNRTogRW5hYmxlIGlzb19lb2Ygb25seSB3aGVuIGlzb2MgdHJhZmZpYyBpcyBydW5uaW5nLiAqLworCSpSX1VTQl9JUlFfTUFTS19TRVQgPQorCQlJT19TVEFURShSX1VTQl9JUlFfTUFTS19TRVQsIGlzb19lb2YsIHNldCkgfAorCQlJT19TVEFURShSX1VTQl9JUlFfTUFTS19TRVQsIGJ1bGtfZW90LCBzZXQpIHwKKwkJSU9fU1RBVEUoUl9VU0JfSVJRX01BU0tfU0VULCBlcGlkX2F0dG4sIHNldCkgfAorCQlJT19TVEFURShSX1VTQl9JUlFfTUFTS19TRVQsIHBvcnRfc3RhdHVzLCBzZXQpIHwKKwkJSU9fU1RBVEUoUl9VU0JfSVJRX01BU0tfU0VULCBjdGxfc3RhdHVzLCBzZXQpOworCisKKwlpZiAocmVxdWVzdF9pcnEoRVRSQVhfVVNCX0hDX0lSUSwgZXRyYXhfdXNiX2hjX2ludGVycnVwdF90b3BfaGFsZiwgMCwKKwkJCSJFVFJBWCAxMDBMWCBidWlsdC1pbiBVU0IgKEhDKSIsIGhjKSkgeworCQllcnIoIkNvdWxkIG5vdCBhbGxvY2F0ZSBJUlEgJWQgZm9yIFVTQiIsIEVUUkFYX1VTQl9IQ19JUlEpOworCQlldHJheF91c2JfaGNfY2xlYW51cCgpOworCQlEQkZFWElUOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHJlcXVlc3RfaXJxKEVUUkFYX1VTQl9SWF9JUlEsIGV0cmF4X3VzYl9yeF9pbnRlcnJ1cHQsIDAsCisJCQkiRVRSQVggMTAwTFggYnVpbHQtaW4gVVNCIChSeCkiLCBoYykpIHsKKwkJZXJyKCJDb3VsZCBub3QgYWxsb2NhdGUgSVJRICVkIGZvciBVU0IiLCBFVFJBWF9VU0JfUlhfSVJRKTsKKwkJZXRyYXhfdXNiX2hjX2NsZWFudXAoKTsKKwkJREJGRVhJVDsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChyZXF1ZXN0X2lycShFVFJBWF9VU0JfVFhfSVJRLCBldHJheF91c2JfdHhfaW50ZXJydXB0LCAwLAorCQkJIkVUUkFYIDEwMExYIGJ1aWx0LWluIFVTQiAoVHgpIiwgaGMpKSB7CisJCWVycigiQ291bGQgbm90IGFsbG9jYXRlIElSUSAlZCBmb3IgVVNCIiwgRVRSQVhfVVNCX1RYX0lSUSk7CisJCWV0cmF4X3VzYl9oY19jbGVhbnVwKCk7CisJCURCRkVYSVQ7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBSX1VTQl9DT01NQU5EOgorCSAgIFVTQiBjb21tYW5kcyBpbiBob3N0IG1vZGUuIFRoZSBmaWVsZHMgaW4gdGhpcyByZWdpc3RlciBzaG91bGQgYWxsIGJlCisJICAgd3JpdHRlbiB0byBpbiBvbmUgd3JpdGUuIERvIG5vdCByZWFkLW1vZGlmeS13cml0ZSBvbmUgZmllbGQgYXQgYSB0aW1lLiBBCisJICAgd3JpdGUgdG8gdGhpcyByZWdpc3RlciB3aWxsIHRyaWdnZXIgZXZlbnRzIGluIHRoZSBVU0IgY29udHJvbGxlciBhbmQgYW4KKwkgICBpbmNvbXBsZXRlIGNvbW1hbmQgbWF5IGxlYWQgdG8gdW5wcmVkaWN0YWJsZSByZXN1bHRzLCBhbmQgaW4gd29yc3QgY2FzZQorCSAgIGV2ZW4gdG8gYSBkZWFkbG9jayBpbiB0aGUgY29udHJvbGxlci4KKwkgICAoTm90ZSBob3dldmVyIHRoYXQgdGhlIGJ1c3kgZmllbGQgaXMgcmVhZC1vbmx5LCBzbyBubyBuZWVkIHRvIHdyaXRlIHRvIGl0LikgKi8KKworCS8qIENoZWNrIHRoZSBidXN5IGJpdCBiZWZvcmUgd3JpdGluZyB0byBSX1VTQl9DT01NQU5ELiAqLworCisJd2hpbGUgKCpSX1VTQl9DT01NQU5EICYgSU9fTUFTSyhSX1VTQl9DT01NQU5ELCBidXN5KSk7CisKKwkvKiBSZXNldCB0aGUgVVNCIGludGVyZmFjZS4gKi8KKwkqUl9VU0JfQ09NTUFORCA9CisJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfc2VsLCBub3ApIHwKKwkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgcG9ydF9jbWQsIHJlc2V0KSB8CisJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIGN0cmxfY21kLCByZXNldCk7CisKKwkvKiBEZXNpZ25lcidzIFJlZmVyZW5jZSwgcC4gOCAtIDEwIHNheXMgd2Ugc2hvdWxkIEluaXRhdGUgUl9VU0JfRk1fUFNUQVJUIHRvIDB4MkEzMCAoMTA4MDApLAorCSAgIHRvIGd1YXJhbnRlZSB0aGF0IGNvbnRyb2wgdHJhZmZpYyBnZXRzIDEwJSBvZiB0aGUgYmFuZHdpZHRoLCBhbmQgcGVyaW9kaWMgdHJhbnNmZXIgbWF5CisJICAgYWxsb2NhdGUgdGhlIHJlc3QgKDkwJSkuIFRoaXMgZG9lc24ndCB3b3JrIHRob3VnaC4gUmVhZCBvbiBmb3IgYSBsZW5naHR5IGV4cGxhbmF0aW9uLgorCisJICAgV2hpbGUgdGhlcmUgaXMgYSBkaWZmZXJlbmNlIGJldHdlZW4gcmV2LiAyIGFuZCByZXYuIDMgb2YgdGhlIEVUUkFYIDEwMExYIHJlZ2FyZGluZyB0aGUgTkFLCisJICAgYmVoYXZpb3VyLCBpdCBkb2Vzbid0IHNvbHZlIHRoaXMgcHJvYmxlbS4gV2hhdCBoYXBwZW5zIGlzIHRoYXQgYSBjb250cm9sIHRyYW5zZmVyIHdpbGwgbm90CisJICAgYmUgaW50ZXJydXB0ZWQgaW4gaXRzIGRhdGEgc3RhZ2Ugd2hlbiBQU1RBUlQgaGFwcGVucyAodGhlIHBvaW50IGF0IHdoaWNoIHBlcmlvZGljIHRyYWZmaWMKKwkgICBpcyBzdGFydGVkKS4gVGh1cywgaWYgUFNUQVJUIGlzIHNldCB0byAxMDgwMCBhbmQgaXRzIElOIG9yIE9VVCB0b2tlbiBpcyBOQUtlZCB1bnRpbCBqdXN0IGJlZm9yZQorCSAgIFBTVEFSVCBoYXBwZW5zLCBpdCB3aWxsIGNvbnRpbnVlIHRoZSBJTi9PVVQgdHJhbnNmZXIgYXMgbG9uZyBhcyBpdCdzIEFDS2VkLiBBZnRlciBpdCdzIGRvbmUsCisJICAgdGhlcmUgbWF5IGJlIHRvbyBsaXR0bGUgdGltZSBsZWZ0IGZvciBhbiBpc29jaHJvbm91cyB0cmFuc2ZlciwgY2F1c2luZyBhbiBlcGlkIGF0dGVudGlvbgorCSAgIGludGVycnVwdCBkdWUgdG8gcGVycm9yLiBUaGUgd29yay1hcm91bmQgZm9yIHRoaXMgaXMgdG8gbGV0IHRoZSBjb250cm9sIHRyYW5zZmVycyBydW4gYXQgdGhlCisJICAgZW5kIG9mIHRoZSBmcmFtZSBpbnN0ZWFkIG9mIGF0IHRoZSBiZWdpbm5pbmcsIGFuZCB3aWxsIGJlIGludGVycnVwdGVkIGp1c3QgZmluZSBpZiBpdCBkb2Vzbid0CisJICAgZml0IGludG8gdGhlIGZyYW1lLiBIb3dldmVyLCBzaW5jZSB0aGVyZSB3aWxsICphbHdheXMqIGJlIGEgY29udHJvbCB0cmFuc2ZlciBhdCB0aGUgYmVnaW5uaW5nCisJICAgb2YgdGhlIGZyYW1lLCByZWdhcmRsZXNzIG9mIHdoYXQgd2Ugc2V0IFBTVEFSVCB0bywgdGhhdCB0cmFuc2ZlciBtaWdodCBiZSBhIDY0LWJ5dGUgdHJhbnNmZXIKKwkgICB3aGljaCBjb25zdW1lcyB1cCB0byAxNSUgb2YgdGhlIGZyYW1lLCBsZWF2aW5nIG9ubHkgODUlIGZvciBwZXJpb2RpYyB0cmFmZmljLiBUaGUgc29sdXRpb24gdG8KKwkgICB0aGlzIHdvdWxkIGJlIHRvICdkdW1teSBhbGxvY2F0ZScgNSUgb2YgdGhlIGZyYW1lIHdpdGggdGhlIHVzYl9jbGFpbV9iYW5kd2lkdGggZnVuY3Rpb24gdG8gbWFrZQorCSAgIHN1cmUgdGhhdCB0aGUgcGVyaW9kaWMgdHJhbnNmZXJzIHRoYXQgYXJlIGluc2VydGVkIHdpbGwgYWx3YXlzIGZpdCBpbiB0aGUgZnJhbWUuCisKKwkgICBUaGUgaWRlYSB3YXMgc3VnZ2VzdGVkIHRoYXQgYSBjb250cm9sIHRyYW5zZmVyIGNvdWxkIGJlIHNwbGl0IHVwIGludG8gc2V2ZXJhbCA4IGJ5dGUgdHJhbnNmZXJzLAorCSAgIHNvIHRoYXQgaXQgd291bGQgYmUgaW50ZXJydXB0ZWQgYnkgUFNUQVJULCBidXQgc2luY2UgdGhpcyBjYW4ndCBiZSBkb25lIGZvciBhbiBJTiB0cmFuc2ZlciB0aGlzCisJICAgaGFzbid0IGJlZW4gaW1wbGVtZW50ZWQuCisKKwkgICBUaGUgdmFsdWUgMTE5NjAgaXMgY2hvc2VuIHRvIGJlIGp1c3QgYWZ0ZXIgdGhlIFNPRiB0b2tlbiwgd2l0aCBhIGNvdXBsZSBvZiBiaXQgdGltZXMgZXh0cmEKKwkgICBmb3IgcG9zc2libGUgYml0IHN0dWZmaW5nLiAqLworCisJKlJfVVNCX0ZNX1BTVEFSVCA9IElPX0ZJRUxEKFJfVVNCX0ZNX1BTVEFSVCwgdmFsdWUsIDExOTYwKTsKKworI2lmZGVmIENPTkZJR19FVFJBWF9VU0JfSE9TVF9QT1JUMQorCSpSX1VTQl9QT1JUMV9ESVNBQkxFID0gSU9fU1RBVEUoUl9VU0JfUE9SVDFfRElTQUJMRSwgZGlzYWJsZSwgbm8pOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfRVRSQVhfVVNCX0hPU1RfUE9SVDIKKwkqUl9VU0JfUE9SVDJfRElTQUJMRSA9IElPX1NUQVRFKFJfVVNCX1BPUlQyX0RJU0FCTEUsIGRpc2FibGUsIG5vKTsKKyNlbmRpZgorCisJd2hpbGUgKCpSX1VTQl9DT01NQU5EICYgSU9fTUFTSyhSX1VTQl9DT01NQU5ELCBidXN5KSk7CisKKwkvKiBDb25maWd1cmUgdGhlIFVTQiBpbnRlcmZhY2UgYXMgYSBob3N0IGNvbnRyb2xsZXIuICovCisJKlJfVVNCX0NPTU1BTkQgPQorCQlJT19TVEFURShSX1VTQl9DT01NQU5ELCBwb3J0X3NlbCwgbm9wKSB8CisJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfY21kLCByZXNldCkgfAorCQlJT19TVEFURShSX1VTQl9DT01NQU5ELCBjdHJsX2NtZCwgaG9zdF9jb25maWcpOworCisJLyogTm90ZTogRG8gbm90IHJlc2V0IGFueSBwb3J0cyBoZXJlLiBBd2FpdCB0aGUgcG9ydCBzdGF0dXMgaW50ZXJydXB0cywgdG8gaGF2ZSBhIGNvbnRyb2xsZWQKKwkgICBzZXF1ZW5jZSBvZiByZXNldHRpbmcgdGhlIHBvcnRzLiBJZiB3ZSByZXNldCBib3RoIHBvcnRzIG5vdywgYW5kIHRoZXJlIGFyZSBkZXZpY2VzCisJICAgb24gYm90aCBwb3J0cywgd2Ugd2lsbCBnZXQgYSBidXMgZXJyb3IgYmVjYXVzZSBib3RoIGRldmljZXMgd2lsbCBhbnN3ZXIgdGhlIHNldCBhZGRyZXNzCisJICAgcmVxdWVzdC4gKi8KKworCXdoaWxlICgqUl9VU0JfQ09NTUFORCAmIElPX01BU0soUl9VU0JfQ09NTUFORCwgYnVzeSkpOworCisJLyogU3RhcnQgcHJvY2Vzc2luZyBvZiBVU0IgdHJhZmZpYy4gKi8KKwkqUl9VU0JfQ09NTUFORCA9CisJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfc2VsLCBub3ApIHwKKwkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgcG9ydF9jbWQsIHJlc2V0KSB8CisJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIGN0cmxfY21kLCBob3N0X3J1bik7CisKKwl3aGlsZSAoKlJfVVNCX0NPTU1BTkQgJiBJT19NQVNLKFJfVVNCX0NPTU1BTkQsIGJ1c3kpKTsKKworCXVzYl9yaCA9IHVzYl9hbGxvY19kZXYoTlVMTCwgaGMtPmJ1cywgMCk7CisJaGMtPmJ1cy0+cm9vdF9odWIgPSB1c2Jfcmg7CisgICAgICAgIHVzYl9yaC0+c3RhdGUgPSBVU0JfU1RBVEVfQUREUkVTUzsKKyAgICAgICAgdXNiX3JoLT5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworICAgICAgICB1c2JfcmgtPmRldm51bSA9IDE7CisgICAgICAgIGhjLT5idXMtPmRldm51bV9uZXh0ID0gMjsKKyAgICAgICAgdXNiX3JoLT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IF9fY29uc3RfY3B1X3RvX2xlMTYoNjQpOworICAgICAgICB1c2JfZ2V0X2RldmljZV9kZXNjcmlwdG9yKHVzYl9yaCwgVVNCX0RUX0RFVklDRV9TSVpFKTsKKwl1c2JfbmV3X2RldmljZSh1c2JfcmgpOworCisJREJGRVhJVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBldHJheF91c2JfaGNfY2xlYW51cCh2b2lkKQoreworCURCRkVOVEVSOworCisJZnJlZV9pcnEoRVRSQVhfVVNCX0hDX0lSUSwgTlVMTCk7CisJZnJlZV9pcnEoRVRSQVhfVVNCX1JYX0lSUSwgTlVMTCk7CisJZnJlZV9pcnEoRVRSQVhfVVNCX1RYX0lSUSwgTlVMTCk7CisKKwl1c2JfZGVyZWdpc3Rlcl9idXMoZXRyYXhfdXNiX2J1cyk7CisKKwkvKiBGSVhNRTogY2FsbCBrbWVtX2NhY2hlX2Rlc3Ryb3kgaGVyZT8gKi8KKworCURCRkVYSVQ7Cit9CisKK21vZHVsZV9pbml0KGV0cmF4X3VzYl9oY19pbml0KTsKK21vZHVsZV9leGl0KGV0cmF4X3VzYl9oY19jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaGNfY3Jpc3YxMC5oIGIvZHJpdmVycy91c2IvaG9zdC9oY19jcmlzdjEwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJmNzcxMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaGNfY3Jpc3YxMC5oCkBAIC0wLDAgKzEsMjg5IEBACisjaWZuZGVmIF9fTElOVVhfRVRSQVhfVVNCX0gKKyNkZWZpbmUgX19MSU5VWF9FVFJBWF9VU0JfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKK3R5cGVkZWYgc3RydWN0IFVTQl9JTl9EZXNjIHsKKwl2b2xhdGlsZSBfX3UxNiBzd19sZW47CisJdm9sYXRpbGUgX191MTYgY29tbWFuZDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIG5leHQ7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBidWY7CisJdm9sYXRpbGUgX191MTYgaHdfbGVuOworCXZvbGF0aWxlIF9fdTE2IHN0YXR1czsKK30gVVNCX0lOX0Rlc2NfdDsKKwordHlwZWRlZiBzdHJ1Y3QgVVNCX1NCX0Rlc2MgeworCXZvbGF0aWxlIF9fdTE2IHN3X2xlbjsKKwl2b2xhdGlsZSBfX3UxNiBjb21tYW5kOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbmV4dDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGJ1ZjsKKwlfX3UzMiBkdW1teTsKK30gVVNCX1NCX0Rlc2NfdDsKKwordHlwZWRlZiBzdHJ1Y3QgVVNCX0VQX0Rlc2MgeworCXZvbGF0aWxlIF9fdTE2IGh3X2xlbjsKKwl2b2xhdGlsZSBfX3UxNiBjb21tYW5kOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgc3ViOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbmV4dDsKKwlfX3UzMiBkdW1teTsKK30gVVNCX0VQX0Rlc2NfdDsKKworc3RydWN0IHZpcnRfcm9vdF9odWIgeworCWludCBkZXZudW07CisJdm9pZCAqdXJiOworCXZvaWQgKmludF9hZGRyOworCWludCBzZW5kOworCWludCBpbnRlcnZhbDsKKwlpbnQgbnVtcG9ydHM7CisJc3RydWN0IHRpbWVyX2xpc3QgcmhfaW50X3RpbWVyOworCXZvbGF0aWxlIF9fdTE2IHdQb3J0Q2hhbmdlXzE7CisJdm9sYXRpbGUgX191MTYgd1BvcnRDaGFuZ2VfMjsKKwl2b2xhdGlsZSBfX3UxNiBwcmV2X3dQb3J0U3RhdHVzXzE7CisJdm9sYXRpbGUgX191MTYgcHJldl93UG9ydFN0YXR1c18yOworfTsKKworc3RydWN0IGV0cmF4X3VzYl9pbnRyX3RyYWZmaWMgeworCWludCBzbGVlcGluZzsKKwlpbnQgZXJyb3I7CisJc3RydWN0IHdhaXRfcXVldWUgKndxOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgZXRyYXhfdXNiX2hjIHsKKwlzdHJ1Y3QgdXNiX2J1cyAqYnVzOworCXN0cnVjdCB2aXJ0X3Jvb3RfaHViIHJoOworCXN0cnVjdCBldHJheF91c2JfaW50cl90cmFmZmljIGludHI7Cit9IGV0cmF4X2hjX3Q7CisKK3R5cGVkZWYgZW51bSB7CisJU1RBUlRFRCwKKwlOT1RfU1RBUlRFRCwKKwlVTkxJTkssCisJVFJBTlNGRVJfRE9ORSwKKwlXQUlUSU5HX0ZPUl9ERVNDUl9JTlRSCit9IGV0cmF4X3VzYl91cmJfc3RhdGVfdDsKKworCisKK3R5cGVkZWYgc3RydWN0IGV0cmF4X3VzYl91cmJfcHJpdiB7CisJLyogVGhlIGZpcnN0X3NiIGZpZWxkIGlzIHVzZWQgZm9yIGZyZWVpbmcgYWxsIFNCIGRlc2NyaXB0b3JzIGJlbG9uZ2luZworCSAgIHRvIGFuIHVyYi4gVGhlIGNvcnJlc3BvbmRpbmcgZXAgZGVzY3JpcHRvcidzIHN1YiBwb2ludGVyIGNhbm5vdCBiZQorCSAgIHVzZWQgZm9yIHRoaXMgc2luY2UgdGhlIERNQSBhZHZhbmNlcyB0aGUgc3ViIHBvaW50ZXIgYXMgaXQgcHJvY2Vzc2VzCisJICAgdGhlIHNiIGxpc3QuICovCisJVVNCX1NCX0Rlc2NfdCAqZmlyc3Rfc2I7CisJLyogVGhlIGxhc3Rfc2IgZmllbGQgcmVmZXJlcyB0byB0aGUgbGFzdCBTQiBkZXNjcmlwdG9yIHRoYXQgYmVsb25ncyB0bworCSAgIHRoaXMgdXJiLiBUaGlzIGlzIGltcG9ydGFudCB0byBrbm93IHNvIHdlIGNhbiBmcmVlIHRoZSBTQiBkZXNjcmlwdG9ycworCSAgIHRoYXQgcmFuZ2VzIGJldHdlZW4gZmlyc3Rfc2IgYW5kIGxhc3Rfc2IuICovCisJVVNCX1NCX0Rlc2NfdCAqbGFzdF9zYjsKKworCS8qIFRoZSByeF9vZmZzZXQgZmllbGQgaXMgdXNlZCBpbiBjdHJsIGFuZCBidWxrIHRyYWZmaWMgdG8ga2VlcCB0cmFjaworCSAgIG9mIHRoZSBvZmZzZXQgaW4gdGhlIHVyYidzIHRyYW5zZmVyX2J1ZmZlciB3aGVyZSBpbmNvbWluZyBkYXRhIHNob3VsZCBiZQorCSAgIGNvcGllZCB0by4gKi8KKwlfX3UzMiByeF9vZmZzZXQ7CisKKwkvKiBDb3VudGVyIHVzZWQgaW4gaXNvY2hyb25vdXMgdHJhbnNmZXJzIHRvIGtlZXAgdHJhY2sgb2YgdGhlCisJICAgbnVtYmVyIG9mIHBhY2tldHMgcmVjZWl2ZWQvdHJhbnNtaXR0ZWQuICAqLworCV9fdTMyIGlzb2NfcGFja2V0X2NvdW50ZXI7CisKKwkvKiBUaGlzIGZpZWxkIGlzIHVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXJiJ3MgY3VycmVudCBzdGF0ZSBiZXR3ZWVuCisJICAgdGhlIHZhcmlvdXMgaW50ZXJydXB0IGhhbmRsZXJzICh0aHVzIG1hcmtlZCB2b2xhdGlsZSkuICovCisJdm9sYXRpbGUgZXRyYXhfdXNiX3VyYl9zdGF0ZV90IHVyYl9zdGF0ZTsKKworCS8qIENvbm5lY3Rpb24gYmV0d2VlbiB0aGUgc3VibWl0dGVkIHVyYiBhbmQgRVRSQVggZXBpZCBudW1iZXIgKi8KKwlfX3U4IGVwaWQ7CisKKwkvKiBUaGUgcnhfZGF0YV9saXN0IGZpZWxkIGlzIHVzZWQgZm9yIHBlcmlvZGljIHRyYWZmaWMsIHRvIGhvbGQKKwkgICByZWNlaXZlZCBkYXRhIGZvciBsYXRlciBwcm9jZXNzaW5nIGluIHRoZSB0aGUgY29tcGxldGVfdXJiIGZ1bmN0aW9ucywKKwkgICB3aGVyZSB0aGUgZGF0YSB1cyBjb3BpZWQgdG8gdGhlIHVyYidzIHRyYW5zZmVyX2J1ZmZlci4gQmFzaWNhbGx5LCB3ZQorCSAgIHVzZSB0aGlzIGludGVybWVkaWF0ZSBzdG9yYWdlIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGVuIGl0J3Mgc2FmZSB0bworCSAgIHJldXNlIHRoZSB0cmFuc2Zlcl9idWZmZXIgKEZJWE1FPykuICovCisJc3RydWN0IGxpc3RfaGVhZCByeF9kYXRhX2xpc3Q7Cit9IGV0cmF4X3VyYl9wcml2X3Q7CisKKy8qIFRoaXMgc3RydWN0IGlzIGZvciBwYXNzaW5nIGRhdGEgZnJvbSB0aGUgdG9wIGhhbGYgdG8gdGhlIGJvdHRvbSBoYWxmLiAqLwordHlwZWRlZiBzdHJ1Y3QgdXNiX2ludGVycnVwdF9yZWdpc3RlcnMKK3sKKwlldHJheF9oY190ICpoYzsKKwlfX3UzMiByX3VzYl9lcGlkX2F0dG47CisJX191OCByX3VzYl9zdGF0dXM7CisJX191MTYgcl91c2JfcmhfcG9ydF9zdGF0dXNfMTsKKwlfX3UxNiByX3VzYl9yaF9wb3J0X3N0YXR1c18yOworCV9fdTMyIHJfdXNiX2lycV9tYXNrX3JlYWQ7CisJX191MzIgcl91c2JfZm1fbnVtYmVyOworCXN0cnVjdCB3b3JrX3N0cnVjdCB1c2JfYmg7Cit9IHVzYl9pbnRlcnJ1cHRfcmVnaXN0ZXJzX3Q7CisKKy8qIFRoaXMgc3RydWN0IGlzIGZvciBwYXNzaW5nIGRhdGEgZnJvbSB0aGUgaXNvYyB0b3AgaGFsZiB0byB0aGUgaXNvYyBib3R0b20gaGFsZi4gKi8KK3R5cGVkZWYgc3RydWN0IHVzYl9pc29jX2NvbXBsZXRlX2RhdGEKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJc3RydWN0IHdvcmtfc3RydWN0IHVzYl9iaDsKK30gdXNiX2lzb2NfY29tcGxldGVfZGF0YV90OworCisvKiBUaGlzIHN0cnVjdCBob2xkcyBkYXRhIHdlIGdldCBmcm9tIHRoZSByeCBkZXNjcmlwdG9ycyBmb3IgRE1BIGNoYW5uZWwgOQorICAgZm9yIHBlcmlvZGljIHRyYWZmaWMgKGludHIgYW5kIGlzb2MpLiAqLwordHlwZWRlZiBzdHJ1Y3QgcnhfZGF0YQoreworCXZvaWQgKmRhdGE7CisJaW50IGxlbmd0aDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9IHJ4X2RhdGFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdXJiX2VudHJ5Cit7CisJc3RydWN0IHVyYiAqdXJiOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK30gdXJiX2VudHJ5X3Q7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVmlydHVhbCBSb290IEhVQgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogZGVzdGluYXRpb24gb2YgcmVxdWVzdCAqLworI2RlZmluZSBSSF9JTlRFUkZBQ0UgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIFJIX0VORFBPSU5UICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgUkhfT1RIRVIgICAgICAgICAgICAgICAgICAgMHgwMworCisjZGVmaW5lIFJIX0NMQVNTICAgICAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgUkhfVkVORE9SICAgICAgICAgICAgICAgICAgMHg0MAorCisvKiBSZXF1ZXN0czogYlJlcXVlc3QgPDwgOCB8IGJtUmVxdWVzdFR5cGUgKi8KKyNkZWZpbmUgUkhfR0VUX1NUQVRVUyAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFJIX0NMRUFSX0ZFQVRVUkUgICAgICAgIDB4MDEwMAorI2RlZmluZSBSSF9TRVRfRkVBVFVSRSAgICAgICAgICAweDAzMDAKKyNkZWZpbmUgUkhfU0VUX0FERFJFU1MJCTB4MDUwMAorI2RlZmluZSBSSF9HRVRfREVTQ1JJUFRPUgkweDA2ODAKKyNkZWZpbmUgUkhfU0VUX0RFU0NSSVBUT1IgICAgICAgMHgwNzAwCisjZGVmaW5lIFJIX0dFVF9DT05GSUdVUkFUSU9OCTB4MDg4MAorI2RlZmluZSBSSF9TRVRfQ09ORklHVVJBVElPTgkweDA5MDAKKyNkZWZpbmUgUkhfR0VUX1NUQVRFICAgICAgICAgICAgMHgwMjgwCisjZGVmaW5lIFJIX0dFVF9JTlRFUkZBQ0UgICAgICAgIDB4MEE4MAorI2RlZmluZSBSSF9TRVRfSU5URVJGQUNFICAgICAgICAweDBCMDAKKyNkZWZpbmUgUkhfU1lOQ19GUkFNRSAgICAgICAgICAgMHgwQzgwCisvKiBPdXIgVmVuZG9yIFNwZWNpZmljIFJlcXVlc3QgKi8KKyNkZWZpbmUgUkhfU0VUX0VQICAgICAgICAgICAgICAgMHgyMDAwCisKKworLyogSHViIHBvcnQgZmVhdHVyZXMgKi8KKyNkZWZpbmUgUkhfUE9SVF9DT05ORUNUSU9OICAgICAgICAgMHgwMAorI2RlZmluZSBSSF9QT1JUX0VOQUJMRSAgICAgICAgICAgICAweDAxCisjZGVmaW5lIFJIX1BPUlRfU1VTUEVORCAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgUkhfUE9SVF9PVkVSX0NVUlJFTlQgICAgICAgMHgwMworI2RlZmluZSBSSF9QT1JUX1JFU0VUICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIFJIX1BPUlRfUE9XRVIgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgUkhfUE9SVF9MT1dfU1BFRUQgICAgICAgICAgMHgwOQorI2RlZmluZSBSSF9DX1BPUlRfQ09OTkVDVElPTiAgICAgICAweDEwCisjZGVmaW5lIFJIX0NfUE9SVF9FTkFCTEUgICAgICAgICAgIDB4MTEKKyNkZWZpbmUgUkhfQ19QT1JUX1NVU1BFTkQgICAgICAgICAgMHgxMgorI2RlZmluZSBSSF9DX1BPUlRfT1ZFUl9DVVJSRU5UICAgICAweDEzCisjZGVmaW5lIFJIX0NfUE9SVF9SRVNFVCAgICAgICAgICAgIDB4MTQKKworLyogSHViIGZlYXR1cmVzICovCisjZGVmaW5lIFJIX0NfSFVCX0xPQ0FMX1BPV0VSICAgICAgIDB4MDAKKyNkZWZpbmUgUkhfQ19IVUJfT1ZFUl9DVVJSRU5UICAgICAgMHgwMQorCisjZGVmaW5lIFJIX0RFVklDRV9SRU1PVEVfV0FLRVVQICAgIDB4MDAKKyNkZWZpbmUgUkhfRU5EUE9JTlRfU1RBTEwgICAgICAgICAgMHgwMQorCisvKiBPdXIgVmVuZG9yIFNwZWNpZmljIGZlYXR1cmUgKi8KKyNkZWZpbmUgUkhfUkVNT1ZFX0VQICAgICAgICAgICAgICAgMHgwMAorCisKKyNkZWZpbmUgUkhfQUNLICAgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBSSF9SRVFfRVJSICAgICAgICAgICAgICAgICAtMQorI2RlZmluZSBSSF9OQUNLICAgICAgICAgICAgICAgICAgICAweDAwCisKKy8qIEZpZWxkIGRlZmluaXRpb25zIGZvciAqLworCisjZGVmaW5lIFVTQl9JTl9jb21tYW5kX19lb2xfX0JJVE5SICAgICAgMCAvKiBjb21tYW5kIG1hY3JvcyAqLworI2RlZmluZSBVU0JfSU5fY29tbWFuZF9fZW9sX19XSURUSCAgICAgIDEKKyNkZWZpbmUgVVNCX0lOX2NvbW1hbmRfX2VvbF9fbm8gICAgICAgICAwCisjZGVmaW5lIFVTQl9JTl9jb21tYW5kX19lb2xfX3llcyAgICAgICAgMQorCisjZGVmaW5lIFVTQl9JTl9jb21tYW5kX19pbnRyX19CSVROUiAgICAgMworI2RlZmluZSBVU0JfSU5fY29tbWFuZF9faW50cl9fV0lEVEggICAgIDEKKyNkZWZpbmUgVVNCX0lOX2NvbW1hbmRfX2ludHJfX25vICAgICAgICAwCisjZGVmaW5lIFVTQl9JTl9jb21tYW5kX19pbnRyX195ZXMgICAgICAgMQorCisjZGVmaW5lIFVTQl9JTl9zdGF0dXNfX2VvcF9fQklUTlIgICAgICAgMSAvKiBzdGF0dXMgbWFjcm9zLiAqLworI2RlZmluZSBVU0JfSU5fc3RhdHVzX19lb3BfX1dJRFRIICAgICAgIDEKKyNkZWZpbmUgVVNCX0lOX3N0YXR1c19fZW9wX19ubyAgICAgICAgICAwCisjZGVmaW5lIFVTQl9JTl9zdGF0dXNfX2VvcF9feWVzICAgICAgICAgMQorCisjZGVmaW5lIFVTQl9JTl9zdGF0dXNfX2VvdF9fQklUTlIgICAgICAgNQorI2RlZmluZSBVU0JfSU5fc3RhdHVzX19lb3RfX1dJRFRIICAgICAgIDEKKyNkZWZpbmUgVVNCX0lOX3N0YXR1c19fZW90X19ubyAgICAgICAgICAwCisjZGVmaW5lIFVTQl9JTl9zdGF0dXNfX2VvdF9feWVzICAgICAgICAgMQorCisjZGVmaW5lIFVTQl9JTl9zdGF0dXNfX2Vycm9yX19CSVROUiAgICAgNgorI2RlZmluZSBVU0JfSU5fc3RhdHVzX19lcnJvcl9fV0lEVEggICAgIDEKKyNkZWZpbmUgVVNCX0lOX3N0YXR1c19fZXJyb3JfX25vICAgICAgICAwCisjZGVmaW5lIFVTQl9JTl9zdGF0dXNfX2Vycm9yX195ZXMgICAgICAgMQorCisjZGVmaW5lIFVTQl9JTl9zdGF0dXNfX25vZGF0YV9fQklUTlIgICAgNworI2RlZmluZSBVU0JfSU5fc3RhdHVzX19ub2RhdGFfX1dJRFRIICAgIDEKKyNkZWZpbmUgVVNCX0lOX3N0YXR1c19fbm9kYXRhX19ubyAgICAgICAwCisjZGVmaW5lIFVTQl9JTl9zdGF0dXNfX25vZGF0YV9feWVzICAgICAgMQorCisjZGVmaW5lIFVTQl9JTl9zdGF0dXNfX2VwaWRfX0JJVE5SICAgICAgOAorI2RlZmluZSBVU0JfSU5fc3RhdHVzX19lcGlkX19XSURUSCAgICAgIDUKKworI2RlZmluZSBVU0JfRVBfY29tbWFuZF9fZW9sX19CSVROUiAgICAgIDAKKyNkZWZpbmUgVVNCX0VQX2NvbW1hbmRfX2VvbF9fV0lEVEggICAgICAxCisjZGVmaW5lIFVTQl9FUF9jb21tYW5kX19lb2xfX25vICAgICAgICAgMAorI2RlZmluZSBVU0JfRVBfY29tbWFuZF9fZW9sX195ZXMgICAgICAgIDEKKworI2RlZmluZSBVU0JfRVBfY29tbWFuZF9fZW9mX19CSVROUiAgICAgIDEKKyNkZWZpbmUgVVNCX0VQX2NvbW1hbmRfX2VvZl9fV0lEVEggICAgICAxCisjZGVmaW5lIFVTQl9FUF9jb21tYW5kX19lb2ZfX25vICAgICAgICAgMAorI2RlZmluZSBVU0JfRVBfY29tbWFuZF9fZW9mX195ZXMgICAgICAgIDEKKworI2RlZmluZSBVU0JfRVBfY29tbWFuZF9faW50cl9fQklUTlIgICAgIDMKKyNkZWZpbmUgVVNCX0VQX2NvbW1hbmRfX2ludHJfX1dJRFRIICAgICAxCisjZGVmaW5lIFVTQl9FUF9jb21tYW5kX19pbnRyX19ubyAgICAgICAgMAorI2RlZmluZSBVU0JfRVBfY29tbWFuZF9faW50cl9feWVzICAgICAgIDEKKworI2RlZmluZSBVU0JfRVBfY29tbWFuZF9fZW5hYmxlX19CSVROUiAgIDQKKyNkZWZpbmUgVVNCX0VQX2NvbW1hbmRfX2VuYWJsZV9fV0lEVEggICAxCisjZGVmaW5lIFVTQl9FUF9jb21tYW5kX19lbmFibGVfX25vICAgICAgMAorI2RlZmluZSBVU0JfRVBfY29tbWFuZF9fZW5hYmxlX195ZXMgICAgIDEKKworI2RlZmluZSBVU0JfRVBfY29tbWFuZF9faHdfdmFsaWRfX0JJVE5SIDUKKyNkZWZpbmUgVVNCX0VQX2NvbW1hbmRfX2h3X3ZhbGlkX19XSURUSCAxCisjZGVmaW5lIFVTQl9FUF9jb21tYW5kX19od192YWxpZF9fbm8gICAgMAorI2RlZmluZSBVU0JfRVBfY29tbWFuZF9faHdfdmFsaWRfX3llcyAgIDEKKworI2RlZmluZSBVU0JfRVBfY29tbWFuZF9fZXBpZF9fQklUTlIgICAgIDgKKyNkZWZpbmUgVVNCX0VQX2NvbW1hbmRfX2VwaWRfX1dJRFRIICAgICA1CisKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX2VvbF9fQklUTlIgICAgICAwIC8qIGNvbW1hbmQgbWFjcm9zLiAqLworI2RlZmluZSBVU0JfU0JfY29tbWFuZF9fZW9sX19XSURUSCAgICAgIDEKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX2VvbF9fbm8gICAgICAgICAwCisjZGVmaW5lIFVTQl9TQl9jb21tYW5kX19lb2xfX3llcyAgICAgICAgMQorCisjZGVmaW5lIFVTQl9TQl9jb21tYW5kX19lb3RfX0JJVE5SICAgICAgMQorI2RlZmluZSBVU0JfU0JfY29tbWFuZF9fZW90X19XSURUSCAgICAgIDEKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX2VvdF9fbm8gICAgICAgICAwCisjZGVmaW5lIFVTQl9TQl9jb21tYW5kX19lb3RfX3llcyAgICAgICAgMQorCisjZGVmaW5lIFVTQl9TQl9jb21tYW5kX19pbnRyX19CSVROUiAgICAgMworI2RlZmluZSBVU0JfU0JfY29tbWFuZF9faW50cl9fV0lEVEggICAgIDEKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX2ludHJfX25vICAgICAgICAwCisjZGVmaW5lIFVTQl9TQl9jb21tYW5kX19pbnRyX195ZXMgICAgICAgMQorCisjZGVmaW5lIFVTQl9TQl9jb21tYW5kX190dF9fQklUTlIgICAgICAgNAorI2RlZmluZSBVU0JfU0JfY29tbWFuZF9fdHRfX1dJRFRIICAgICAgIDIKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX3R0X196b3V0ICAgICAgICAwCisjZGVmaW5lIFVTQl9TQl9jb21tYW5kX190dF9faW4gICAgICAgICAgMQorI2RlZmluZSBVU0JfU0JfY29tbWFuZF9fdHRfX291dCAgICAgICAgIDIKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX3R0X19zZXR1cCAgICAgICAzCisKKworI2RlZmluZSBVU0JfU0JfY29tbWFuZF9fcmVtX19CSVROUiAgICAgIDgKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX3JlbV9fV0lEVEggICAgICA2CisKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX2Z1bGxfX0JJVE5SICAgICA2CisjZGVmaW5lIFVTQl9TQl9jb21tYW5kX19mdWxsX19XSURUSCAgICAgMQorI2RlZmluZSBVU0JfU0JfY29tbWFuZF9fZnVsbF9fbm8gICAgICAgIDAKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX2Z1bGxfX3llcyAgICAgICAxCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ODFiZjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMKQEAgLTAsMCArMSwyODQgQEAKKy8qCisgKiBPSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIFVTQi4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PgorICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDIgRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKiAoQykgQ29weXJpZ2h0IDIwMDIgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBCdXMgR2x1ZSBmb3IgQU1EIEFsY2hlbXkgQXUxeHh4CisgKgorICogV3JpdHRlbiBieSBDaHJpc3RvcGhlciBIb292ZXIgPGNoQGhwbC5ocC5jb20+CisgKiBCYXNlZCBvbiBmcmFnbWVudHMgb2YgcHJldmlvdXMgZHJpdmVyIGJ5IFJ1c2VsbCBLaW5nIGV0IGFsLgorICoKKyAqIE1vZGlmaWVkIGZvciBMSDdBNDA0IGZyb20gb2hjaS1zYTExMTEuYworICogIGJ5IER1cmdlc2ggUGF0dGFtYXR0YSA8cGF0dGFtYXR0YWRAc2hhcnBzZWMuY29tPgorICogTW9kaWZpZWQgZm9yIEFNRCBBbGNoZW15IEF1MXh4eAorICogIGJ5IE1hdHQgUG9ydGVyIDxtcG9ydGVyQGtlcm5lbC5jcmFzaGluZy5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKworI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KKworI2RlZmluZSBVU0JIX0VOQUJMRV9CRSAoMTw8MCkKKyNkZWZpbmUgVVNCSF9FTkFCTEVfQyAgKDE8PDEpCisjZGVmaW5lIFVTQkhfRU5BQkxFX0UgICgxPDwyKQorI2RlZmluZSBVU0JIX0VOQUJMRV9DRSAoMTw8MykKKyNkZWZpbmUgVVNCSF9FTkFCTEVfUkQgKDE8PDQpCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgVVNCSF9FTkFCTEVfSU5JVCAoVVNCSF9FTkFCTEVfQ0UgfCBVU0JIX0VOQUJMRV9FIHwgVVNCSF9FTkFCTEVfQykKKyNlbGlmIF9fQklHX0VORElBTgorI2RlZmluZSBVU0JIX0VOQUJMRV9JTklUIChVU0JIX0VOQUJMRV9DRSB8IFVTQkhfRU5BQkxFX0UgfCBVU0JIX0VOQUJMRV9DIHwgVVNCSF9FTkFCTEVfQkUpCisjZWxzZQorI2Vycm9yIG5vdCBieXRlIG9yZGVyIGRlZmluZWQKKyNlbmRpZgorCitleHRlcm4gaW50IHVzYl9kaXNhYmxlZCh2b2lkKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgYXUxeHh4X3N0YXJ0X2hjKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXworCQkiOiBzdGFydGluZyBBdTF4eHggT0hDSSBVU0IgQ29udHJvbGxlclxuIik7CisKKwkvKiBlbmFibGUgaG9zdCBjb250cm9sbGVyICovCisJYXVfd3JpdGVsKFVTQkhfRU5BQkxFX0NFLCBVU0JfSE9TVF9DT05GSUcpOworCXVkZWxheSgxMDAwKTsKKwlhdV93cml0ZWwoVVNCSF9FTkFCTEVfSU5JVCwgVVNCX0hPU1RfQ09ORklHKTsKKwl1ZGVsYXkoMTAwMCk7CisKKwkvKiB3YWl0IGZvciByZXNldCBjb21wbGV0ZSAocmVhZCByZWdpc3RlciB0d2ljZTsgc2VlIGF1MTUwMCBlcnJhdGEpICovCisJd2hpbGUgKGF1X3JlYWRsKFVTQl9IT1NUX0NPTkZJRyksCisJCSEoYXVfcmVhZGwoVVNCX0hPU1RfQ09ORklHKSAmIFVTQkhfRU5BQkxFX1JEKSkKKwkJdWRlbGF5KDEwMDApOworCisJcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18KKwkiOiBDbG9jayB0byBVU0IgaG9zdCBoYXMgYmVlbiBlbmFibGVkIFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGF1MXh4eF9zdG9wX2hjKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXworCSAgICAgICAiOiBzdG9wcGluZyBBdTF4eHggT0hDSSBVU0IgQ29udHJvbGxlclxuIik7CisKKwkvKiBEaXNhYmxlIGNsb2NrICovCisJYXVfd3JpdGVsKHJlYWRsKCh2b2lkICopVVNCX0hPU1RfQ09ORklHKSAmIH5VU0JIX0VOQUJMRV9DRSwgVVNCX0hPU1RfQ09ORklHKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBjb25maWd1cmUgc28gYW4gSEMgZGV2aWNlIGFuZCBpZCBhcmUgYWx3YXlzIHByb3ZpZGVkICovCisvKiBhbHdheXMgY2FsbGVkIHdpdGggcHJvY2VzcyBjb250ZXh0OyBzbGVlcGluZyBpcyBPSyAqLworCisKKy8qKgorICogdXNiX2hjZF9hdTF4eHhfcHJvYmUgLSBpbml0aWFsaXplIEF1MXh4eC1iYXNlZCBIQ0RzCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBBbGxvY2F0ZXMgYmFzaWMgcmVzb3VyY2VzIGZvciB0aGlzIFVTQiBob3N0IGNvbnRyb2xsZXIsIGFuZAorICogdGhlbiBpbnZva2VzIHRoZSBzdGFydCgpIG1ldGhvZCBmb3IgdGhlIEhDRCBhc3NvY2lhdGVkIHdpdGggaXQKKyAqIHRocm91Z2ggdGhlIGhvdHBsdWcgZW50cnkncyBkcml2ZXJfZGF0YS4KKyAqCisgKi8KK2ludCB1c2JfaGNkX2F1MXh4eF9wcm9iZSAoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAorCQkJICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCisJaWYoZGV2LT5yZXNvdXJjZVsxXS5mbGFncyAhPSBJT1JFU09VUkNFX0lSUSkgeworCQlwcl9kZWJ1ZyAoInJlc291cmNlWzFdIGlzIG5vdCBJT1JFU09VUkNFX0lSUSIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwloY2QgPSB1c2JfY3JlYXRlX2hjZChkcml2ZXIsICZkZXYtPmRldiwgImF1MXh4eCIpOworCWlmICghaGNkKQorCQlyZXR1cm4gLUVOT01FTTsKKwloY2QtPnJzcmNfc3RhcnQgPSBkZXYtPnJlc291cmNlWzBdLnN0YXJ0OworCWhjZC0+cnNyY19sZW4gPSBkZXYtPnJlc291cmNlWzBdLmVuZCAtIGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLCBoY2RfbmFtZSkpIHsKKwkJcHJfZGVidWcoInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWQiKTsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlnb3RvIGVycjE7CisJfQorCisJaGNkLT5yZWdzID0gaW9yZW1hcChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCWlmICghaGNkLT5yZWdzKSB7CisJCXByX2RlYnVnKCJpb3JlbWFwIGZhaWxlZCIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycjI7CisJfQorCisJYXUxeHh4X3N0YXJ0X2hjKGRldik7CisJb2hjaV9oY2RfaW5pdChoY2RfdG9fb2hjaShoY2QpKTsKKworCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgU0FfSU5URVJSVVBUKTsKKwlpZiAocmV0dmFsID09IDApCisJCXJldHVybiByZXR2YWw7CisKKwlhdTF4eHhfc3RvcF9oYyhkZXYpOworCWlvdW5tYXAoaGNkLT5yZWdzKTsKKyBlcnIyOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworIGVycjE6CisJdXNiX3B1dF9oY2QoaGNkKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qIG1heSBiZSBjYWxsZWQgd2l0aG91dCBjb250cm9sbGVyIGVsZWN0cmljYWxseSBwcmVzZW50ICovCisvKiBtYXkgYmUgY2FsbGVkIHdpdGggY29udHJvbGxlciwgYnVzLCBhbmQgZGV2aWNlcyBhY3RpdmUgKi8KKworLyoqCisgKiB1c2JfaGNkX2F1MXh4eF9yZW1vdmUgLSBzaHV0ZG93biBwcm9jZXNzaW5nIGZvciBBdTF4eHgtYmFzZWQgSENEcworICogQGRldjogVVNCIEhvc3QgQ29udHJvbGxlciBiZWluZyByZW1vdmVkCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBSZXZlcnNlcyB0aGUgZWZmZWN0IG9mIHVzYl9oY2RfYXUxeHh4X3Byb2JlKCksIGZpcnN0IGludm9raW5nCisgKiB0aGUgSENEJ3Mgc3RvcCgpIG1ldGhvZC4gIEl0IGlzIGFsd2F5cyBjYWxsZWQgZnJvbSBhIHRocmVhZAorICogY29udGV4dCwgbm9ybWFsbHkgInJtbW9kIiwgImFwbWQiLCBvciBzb21ldGhpbmcgc2ltaWxhci4KKyAqCisgKi8KK3ZvaWQgdXNiX2hjZF9hdTF4eHhfcmVtb3ZlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJdXNiX3JlbW92ZV9oY2QoaGNkKTsKKwlhdTF4eHhfc3RvcF9oYyhkZXYpOworCWlvdW5tYXAoaGNkLT5yZWdzKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwl1c2JfcHV0X2hjZChoY2QpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9fZGV2aW5pdAorb2hjaV9hdTF4eHhfc3RhcnQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CisJaW50CQlyZXQ7CisKKwlvaGNpX2RiZyAob2hjaSwgIm9oY2lfYXUxeHh4X3N0YXJ0LCBvaGNpOiVwIiwgb2hjaSk7CisKKwlpZiAoKHJldCA9IG9oY2lfaW5pdCAob2hjaSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmICgocmV0ID0gb2hjaV9ydW4gKG9oY2kpKSA8IDApIHsKKwkJZXJyICgiY2FuJ3Qgc3RhcnQgJXMiLCBoY2QtPnNlbGYuYnVzX25hbWUpOworCQlvaGNpX3N0b3AgKGhjZCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIG9oY2lfYXUxeHh4X2hjX2RyaXZlciA9IHsKKwkuZGVzY3JpcHRpb24gPQkJaGNkX25hbWUsCisJLnByb2R1Y3RfZGVzYyA9CQkiQXUxeHh4IE9IQ0kiLAorCS5oY2RfcHJpdl9zaXplID0Jc2l6ZW9mKHN0cnVjdCBvaGNpX2hjZCksCisKKwkvKgorCSAqIGdlbmVyaWMgaGFyZHdhcmUgbGlua2FnZQorCSAqLworCS5pcnEgPQkJCW9oY2lfaXJxLAorCS5mbGFncyA9CQlIQ0RfVVNCMTEgfCBIQ0RfTUVNT1JZLAorCisJLyoKKwkgKiBiYXNpYyBsaWZlY3ljbGUgb3BlcmF0aW9ucworCSAqLworCS5zdGFydCA9CQlvaGNpX2F1MXh4eF9zdGFydCwKKyNpZmRlZglDT05GSUdfUE0KKwkvKiBzdXNwZW5kOgkJb2hjaV9hdTF4eHhfc3VzcGVuZCwgIC0tIHRiZCAqLworCS8qIHJlc3VtZToJCW9oY2lfYXUxeHh4X3Jlc3VtZSwgICAtLSB0YmQgKi8KKyNlbmRpZiAvKkNPTkZJR19QTSovCisJLnN0b3AgPQkJCW9oY2lfc3RvcCwKKworCS8qCisJICogbWFuYWdpbmcgaS9vIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIGRldmljZSByZXNvdXJjZXMKKwkgKi8KKwkudXJiX2VucXVldWUgPQkJb2hjaV91cmJfZW5xdWV1ZSwKKwkudXJiX2RlcXVldWUgPQkJb2hjaV91cmJfZGVxdWV1ZSwKKwkuZW5kcG9pbnRfZGlzYWJsZSA9CW9oY2lfZW5kcG9pbnRfZGlzYWJsZSwKKworCS8qCisJICogc2NoZWR1bGluZyBzdXBwb3J0CisJICovCisJLmdldF9mcmFtZV9udW1iZXIgPQlvaGNpX2dldF9mcmFtZSwKKworCS8qCisJICogcm9vdCBodWIgc3VwcG9ydAorCSAqLworCS5odWJfc3RhdHVzX2RhdGEgPQlvaGNpX2h1Yl9zdGF0dXNfZGF0YSwKKwkuaHViX2NvbnRyb2wgPQkJb2hjaV9odWJfY29udHJvbCwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgb2hjaV9oY2RfYXUxeHh4X2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCWludCByZXQ7CisKKwlwcl9kZWJ1ZyAoIkluIG9oY2lfaGNkX2F1MXh4eF9kcnZfcHJvYmUiKTsKKworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSB1c2JfaGNkX2F1MXh4eF9wcm9iZSgmb2hjaV9hdTF4eHhfaGNfZHJpdmVyLCBwZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9oY2lfaGNkX2F1MXh4eF9kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJdXNiX2hjZF9hdTF4eHhfcmVtb3ZlKGhjZCwgcGRldik7CisJcmV0dXJuIDA7Cit9CisJLypUQkQqLworLypzdGF0aWMgaW50IG9oY2lfaGNkX2F1MXh4eF9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiAwOworfQorc3RhdGljIGludCBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiAwOworfQorKi8KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG9oY2lfaGNkX2F1MXh4eF9kcml2ZXIgPSB7CisJLm5hbWUJCT0gImF1MXh4eC1vaGNpIiwKKwkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkucHJvYmUJCT0gb2hjaV9oY2RfYXUxeHh4X2Rydl9wcm9iZSwKKwkucmVtb3ZlCQk9IG9oY2lfaGNkX2F1MXh4eF9kcnZfcmVtb3ZlLAorCS8qLnN1c3BlbmQJPSBvaGNpX2hjZF9hdTF4eHhfZHJ2X3N1c3BlbmQsICovCisJLyoucmVzdW1lCT0gb2hjaV9oY2RfYXUxeHh4X2Rydl9yZXN1bWUsICovCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvaGNpX2hjZF9hdTF4eHhfaW5pdCAodm9pZCkKK3sKKwlwcl9kZWJ1ZyAoRFJJVkVSX0lORk8gIiAoQXUxeHh4KSIpOworCXByX2RlYnVnICgiYmxvY2sgc2l6ZXM6IGVkICVkIHRkICVkXG4iLAorCQlzaXplb2YgKHN0cnVjdCBlZCksIHNpemVvZiAoc3RydWN0IHRkKSk7CisKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9hdTF4eHhfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9oY2lfaGNkX2F1MXh4eF9jbGVhbnVwICh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX2hjZF9hdTF4eHhfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQgKG9oY2lfaGNkX2F1MXh4eF9pbml0KTsKK21vZHVsZV9leGl0IChvaGNpX2hjZF9hdTF4eHhfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJmNTNhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYwpAQCAtMCwwICsxLDcwNyBAQAorLyoKKyAqIE9IQ0kgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+CisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMiBEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTC4KKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgREVCVUcKKworI2RlZmluZSBlZHN0cmluZyhlZF90eXBlKSAoeyBjaGFyICp0ZW1wOyBcCisJc3dpdGNoIChlZF90eXBlKSB7IFwKKwljYXNlIFBJUEVfQ09OVFJPTDoJdGVtcCA9ICJjdHJsIjsgYnJlYWs7IFwKKwljYXNlIFBJUEVfQlVMSzoJCXRlbXAgPSAiYnVsayI7IGJyZWFrOyBcCisJY2FzZSBQSVBFX0lOVEVSUlVQVDoJdGVtcCA9ICJpbnRyIjsgYnJlYWs7IFwKKwlkZWZhdWx0OiAJCXRlbXAgPSAiaXNvYyI7IGJyZWFrOyBcCisJfTsgdGVtcDt9KQorI2RlZmluZSBwaXBlc3RyaW5nKHBpcGUpIGVkc3RyaW5nKHVzYl9waXBldHlwZShwaXBlKSkKKworLyogZGVidWd8IHByaW50IHRoZSBtYWluIGNvbXBvbmVudHMgb2YgYW4gVVJCCisgKiBzbWFsbDogMCkgaGVhZGVyICsgZGF0YSBwYWNrZXRzIDEpIGp1c3QgaGVhZGVyCisgKi8KK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKHVudXNlZCkpCit1cmJfcHJpbnQgKHN0cnVjdCB1cmIgKiB1cmIsIGNoYXIgKiBzdHIsIGludCBzbWFsbCkKK3sKKwl1bnNpZ25lZCBpbnQgcGlwZT0gdXJiLT5waXBlOworCisJaWYgKCF1cmItPmRldiB8fCAhdXJiLT5kZXYtPmJ1cykgeworCQlkYmcoIiVzIFVSQjogbm8gZGV2Iiwgc3RyKTsKKwkJcmV0dXJuOworCX0KKworI2lmbmRlZglPSENJX1ZFUkJPU0VfREVCVUcKKwlpZiAodXJiLT5zdGF0dXMgIT0gMCkKKyNlbmRpZgorCWRiZygiJXMgJXAgZGV2PSVkIGVwPSVkJXMtJXMgZmxhZ3M9JXggbGVuPSVkLyVkIHN0YXQ9JWQiLAorCQkgICAgc3RyLAorCQkgICAgdXJiLAorCQkgICAgdXNiX3BpcGVkZXZpY2UgKHBpcGUpLAorCQkgICAgdXNiX3BpcGVlbmRwb2ludCAocGlwZSksCisJCSAgICB1c2JfcGlwZW91dCAocGlwZSk/ICJvdXQiIDogImluIiwKKwkJICAgIHBpcGVzdHJpbmcgKHBpcGUpLAorCQkgICAgdXJiLT50cmFuc2Zlcl9mbGFncywKKwkJICAgIHVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJICAgIHVyYi0+c3RhdHVzKTsKKworI2lmZGVmCU9IQ0lfVkVSQk9TRV9ERUJVRworCWlmICghc21hbGwpIHsKKwkJaW50IGksIGxlbjsKKworCQlpZiAodXNiX3BpcGVjb250cm9sIChwaXBlKSkgeworCQkJcHJpbnRrIChLRVJOX0RFQlVHIF9fRklMRV9fICI6IHNldHVwKDgpOiIpOworCQkJZm9yIChpID0gMDsgaSA8IDggOyBpKyspCisJCQkJcHJpbnRrICgiICUwMngiLCAoKF9fdTggKikgdXJiLT5zZXR1cF9wYWNrZXQpIFtpXSk7CisJCQlwcmludGsgKCJcbiIpOworCQl9CisJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiAwICYmIHVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CisJCQlwcmludGsgKEtFUk5fREVCVUcgX19GSUxFX18gIjogZGF0YSglZC8lZCk6IiwKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGgsCisJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwkJCWxlbiA9IHVzYl9waXBlb3V0IChwaXBlKT8KKwkJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDogdXJiLT5hY3R1YWxfbGVuZ3RoOworCQkJZm9yIChpID0gMDsgaSA8IDE2ICYmIGkgPCBsZW47IGkrKykKKwkJCQlwcmludGsgKCIgJTAyeCIsICgoX191OCAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcikgW2ldKTsKKwkJCXByaW50ayAoIiVzIHN0YXQ6JWRcbiIsIGkgPCBsZW4/ICIuLi4iOiAiIiwgdXJiLT5zdGF0dXMpOworCQl9CisJfQorI2VuZGlmCit9CisKKyNkZWZpbmUgb2hjaV9kYmdfc3cob2hjaSwgbmV4dCwgc2l6ZSwgZm9ybWF0LCBhcmcuLi4pIFwKKwlkbyB7IFwKKwlpZiAobmV4dCkgeyBcCisJCXVuc2lnbmVkIHNfbGVuOyBcCisJCXNfbGVuID0gc2NucHJpbnRmICgqbmV4dCwgKnNpemUsIGZvcm1hdCwgIyMgYXJnICk7IFwKKwkJKnNpemUgLT0gc19sZW47ICpuZXh0ICs9IHNfbGVuOyBcCisJfSBlbHNlIFwKKwkJb2hjaV9kYmcob2hjaSxmb3JtYXQsICMjIGFyZyApOyBcCisJfSB3aGlsZSAoMCk7CisKKworc3RhdGljIHZvaWQgb2hjaV9kdW1wX2ludHJfbWFzayAoCisJc3RydWN0IG9oY2lfaGNkICpvaGNpLAorCWNoYXIgKmxhYmVsLAorCXUzMiBtYXNrLAorCWNoYXIgKipuZXh0LAorCXVuc2lnbmVkICpzaXplKQoreworCW9oY2lfZGJnX3N3IChvaGNpLCBuZXh0LCBzaXplLCAiJXMgMHglMDh4JXMlcyVzJXMlcyVzJXMlcyVzXG4iLAorCQlsYWJlbCwKKwkJbWFzaywKKwkJKG1hc2sgJiBPSENJX0lOVFJfTUlFKSA/ICIgTUlFIiA6ICIiLAorCQkobWFzayAmIE9IQ0lfSU5UUl9PQykgPyAiIE9DIiA6ICIiLAorCQkobWFzayAmIE9IQ0lfSU5UUl9SSFNDKSA/ICIgUkhTQyIgOiAiIiwKKwkJKG1hc2sgJiBPSENJX0lOVFJfRk5PKSA/ICIgRk5PIiA6ICIiLAorCQkobWFzayAmIE9IQ0lfSU5UUl9VRSkgPyAiIFVFIiA6ICIiLAorCQkobWFzayAmIE9IQ0lfSU5UUl9SRCkgPyAiIFJEIiA6ICIiLAorCQkobWFzayAmIE9IQ0lfSU5UUl9TRikgPyAiIFNGIiA6ICIiLAorCQkobWFzayAmIE9IQ0lfSU5UUl9XREgpID8gIiBXREgiIDogIiIsCisJCShtYXNrICYgT0hDSV9JTlRSX1NPKSA/ICIgU08iIDogIiIKKwkJKTsKK30KKworc3RhdGljIHZvaWQgbWF5YmVfcHJpbnRfZWRzICgKKwlzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksCisJY2hhciAqbGFiZWwsCisJdTMyIHZhbHVlLAorCWNoYXIgKipuZXh0LAorCXVuc2lnbmVkICpzaXplKQoreworCWlmICh2YWx1ZSkKKwkJb2hjaV9kYmdfc3cgKG9oY2ksIG5leHQsIHNpemUsICIlcyAlMDh4XG4iLCBsYWJlbCwgdmFsdWUpOworfQorCitzdGF0aWMgY2hhciAqaGNmczJzdHJpbmcgKGludCBzdGF0ZSkKK3sKKwlzd2l0Y2ggKHN0YXRlKSB7CisJCWNhc2UgT0hDSV9VU0JfUkVTRVQ6CXJldHVybiAicmVzZXQiOworCQljYXNlIE9IQ0lfVVNCX1JFU1VNRToJcmV0dXJuICJyZXN1bWUiOworCQljYXNlIE9IQ0lfVVNCX09QRVI6CXJldHVybiAib3BlcmF0aW9uYWwiOworCQljYXNlIE9IQ0lfVVNCX1NVU1BFTkQ6CXJldHVybiAic3VzcGVuZCI7CisJfQorCXJldHVybiAiPyI7Cit9CisKKy8vIGR1bXAgY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVycworc3RhdGljIHZvaWQKK29oY2lfZHVtcF9zdGF0dXMgKHN0cnVjdCBvaGNpX2hjZCAqY29udHJvbGxlciwgY2hhciAqKm5leHQsIHVuc2lnbmVkICpzaXplKQoreworCXN0cnVjdCBvaGNpX3JlZ3MgX19pb21lbSAqcmVncyA9IGNvbnRyb2xsZXItPnJlZ3M7CisJdTMyCQkJdGVtcDsKKworCXRlbXAgPSBvaGNpX3JlYWRsIChjb250cm9sbGVyLCAmcmVncy0+cmV2aXNpb24pICYgMHhmZjsKKwlvaGNpX2RiZ19zdyAoY29udHJvbGxlciwgbmV4dCwgc2l6ZSwKKwkJIk9IQ0kgJWQuJWQsICVzIGxlZ2FjeSBzdXBwb3J0IHJlZ2lzdGVyc1xuIiwKKwkJMHgwMyAmICh0ZW1wID4+IDQpLCAodGVtcCAmIDB4MGYpLAorCQkodGVtcCAmIDB4MDEwMCkgPyAid2l0aCIgOiAiTk8iKTsKKworCXRlbXAgPSBvaGNpX3JlYWRsIChjb250cm9sbGVyLCAmcmVncy0+Y29udHJvbCk7CisJb2hjaV9kYmdfc3cgKGNvbnRyb2xsZXIsIG5leHQsIHNpemUsCisJCSJjb250cm9sIDB4JTAzeCVzJXMlcyBIQ0ZTPSVzJXMlcyVzJXMgQ0JTUj0lZFxuIiwKKwkJdGVtcCwKKwkJKHRlbXAgJiBPSENJX0NUUkxfUldFKSA/ICIgUldFIiA6ICIiLAorCQkodGVtcCAmIE9IQ0lfQ1RSTF9SV0MpID8gIiBSV0MiIDogIiIsCisJCSh0ZW1wICYgT0hDSV9DVFJMX0lSKSA/ICIgSVIiIDogIiIsCisJCWhjZnMyc3RyaW5nICh0ZW1wICYgT0hDSV9DVFJMX0hDRlMpLAorCQkodGVtcCAmIE9IQ0lfQ1RSTF9CTEUpID8gIiBCTEUiIDogIiIsCisJCSh0ZW1wICYgT0hDSV9DVFJMX0NMRSkgPyAiIENMRSIgOiAiIiwKKwkJKHRlbXAgJiBPSENJX0NUUkxfSUUpID8gIiBJRSIgOiAiIiwKKwkJKHRlbXAgJiBPSENJX0NUUkxfUExFKSA/ICIgUExFIiA6ICIiLAorCQl0ZW1wICYgT0hDSV9DVFJMX0NCU1IKKwkJKTsKKworCXRlbXAgPSBvaGNpX3JlYWRsIChjb250cm9sbGVyLCAmcmVncy0+Y21kc3RhdHVzKTsKKwlvaGNpX2RiZ19zdyAoY29udHJvbGxlciwgbmV4dCwgc2l6ZSwKKwkJImNtZHN0YXR1cyAweCUwNXggU09DPSVkJXMlcyVzJXNcbiIsIHRlbXAsCisJCSh0ZW1wICYgT0hDSV9TT0MpID4+IDE2LAorCQkodGVtcCAmIE9IQ0lfT0NSKSA/ICIgT0NSIiA6ICIiLAorCQkodGVtcCAmIE9IQ0lfQkxGKSA/ICIgQkxGIiA6ICIiLAorCQkodGVtcCAmIE9IQ0lfQ0xGKSA/ICIgQ0xGIiA6ICIiLAorCQkodGVtcCAmIE9IQ0lfSENSKSA/ICIgSENSIiA6ICIiCisJCSk7CisKKwlvaGNpX2R1bXBfaW50cl9tYXNrIChjb250cm9sbGVyLCAiaW50cnN0YXR1cyIsCisJCQlvaGNpX3JlYWRsIChjb250cm9sbGVyLCAmcmVncy0+aW50cnN0YXR1cyksCisJCQluZXh0LCBzaXplKTsKKwlvaGNpX2R1bXBfaW50cl9tYXNrIChjb250cm9sbGVyLCAiaW50cmVuYWJsZSIsCisJCQlvaGNpX3JlYWRsIChjb250cm9sbGVyLCAmcmVncy0+aW50cmVuYWJsZSksCisJCQluZXh0LCBzaXplKTsKKwkvLyBpbnRyZGlzYWJsZSBhbHdheXMgc2FtZSBhcyBpbnRyZW5hYmxlCisKKwltYXliZV9wcmludF9lZHMgKGNvbnRyb2xsZXIsICJlZF9wZXJpb2RjdXJyZW50IiwKKwkJCW9oY2lfcmVhZGwgKGNvbnRyb2xsZXIsICZyZWdzLT5lZF9wZXJpb2RjdXJyZW50KSwKKwkJCW5leHQsIHNpemUpOworCisJbWF5YmVfcHJpbnRfZWRzIChjb250cm9sbGVyLCAiZWRfY29udHJvbGhlYWQiLAorCQkJb2hjaV9yZWFkbCAoY29udHJvbGxlciwgJnJlZ3MtPmVkX2NvbnRyb2xoZWFkKSwKKwkJCW5leHQsIHNpemUpOworCW1heWJlX3ByaW50X2VkcyAoY29udHJvbGxlciwgImVkX2NvbnRyb2xjdXJyZW50IiwKKwkJCW9oY2lfcmVhZGwgKGNvbnRyb2xsZXIsICZyZWdzLT5lZF9jb250cm9sY3VycmVudCksCisJCQluZXh0LCBzaXplKTsKKworCW1heWJlX3ByaW50X2VkcyAoY29udHJvbGxlciwgImVkX2J1bGtoZWFkIiwKKwkJCW9oY2lfcmVhZGwgKGNvbnRyb2xsZXIsICZyZWdzLT5lZF9idWxraGVhZCksCisJCQluZXh0LCBzaXplKTsKKwltYXliZV9wcmludF9lZHMgKGNvbnRyb2xsZXIsICJlZF9idWxrY3VycmVudCIsCisJCQlvaGNpX3JlYWRsIChjb250cm9sbGVyLCAmcmVncy0+ZWRfYnVsa2N1cnJlbnQpLAorCQkJbmV4dCwgc2l6ZSk7CisKKwltYXliZV9wcmludF9lZHMgKGNvbnRyb2xsZXIsICJkb25laGVhZCIsCisJCQlvaGNpX3JlYWRsIChjb250cm9sbGVyLCAmcmVncy0+ZG9uZWhlYWQpLCBuZXh0LCBzaXplKTsKKworCS8qIGJyb2tlbiBmbWludGVydmFsIG1lYW5zIHRyYWZmaWMgd29uJ3QgZmxvdyEgKi8gCisJb2hjaV9kYmcgKGNvbnRyb2xsZXIsICJmbWludGVydmFsICUwOHhcbiIsIAorCQkJb2hjaV9yZWFkbCAoY29udHJvbGxlciwgJnJlZ3MtPmZtaW50ZXJ2YWwpKTsKK30KKworI2RlZmluZSBkYmdfcG9ydF9zdyhoYyxudW0sdmFsdWUsbmV4dCxzaXplKSBcCisJb2hjaV9kYmdfc3cgKGhjLCBuZXh0LCBzaXplLCBcCisJCSJyb290aHViLnBvcnRzdGF0dXMgWyVkXSAiIFwKKwkJIjB4JTA4eCVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlc1xuIiwgXAorCQludW0sIHRlbXAsIFwKKwkJKHRlbXAgJiBSSF9QU19QUlNDKSA/ICIgUFJTQyIgOiAiIiwgXAorCQkodGVtcCAmIFJIX1BTX09DSUMpID8gIiBPQ0lDIiA6ICIiLCBcCisJCSh0ZW1wICYgUkhfUFNfUFNTQykgPyAiIFBTU0MiIDogIiIsIFwKKwkJKHRlbXAgJiBSSF9QU19QRVNDKSA/ICIgUEVTQyIgOiAiIiwgXAorCQkodGVtcCAmIFJIX1BTX0NTQykgPyAiIENTQyIgOiAiIiwgXAorIAkJXAorCQkodGVtcCAmIFJIX1BTX0xTREEpID8gIiBMU0RBIiA6ICIiLCBcCisJCSh0ZW1wICYgUkhfUFNfUFBTKSA/ICIgUFBTIiA6ICIiLCBcCisJCSh0ZW1wICYgUkhfUFNfUFJTKSA/ICIgUFJTIiA6ICIiLCBcCisJCSh0ZW1wICYgUkhfUFNfUE9DSSkgPyAiIFBPQ0kiIDogIiIsIFwKKwkJKHRlbXAgJiBSSF9QU19QU1MpID8gIiBQU1MiIDogIiIsIFwKKyAJCVwKKwkJKHRlbXAgJiBSSF9QU19QRVMpID8gIiBQRVMiIDogIiIsIFwKKwkJKHRlbXAgJiBSSF9QU19DQ1MpID8gIiBDQ1MiIDogIiIgXAorCQkpOworCisKK3N0YXRpYyB2b2lkCitvaGNpX2R1bXBfcm9vdGh1YiAoCisJc3RydWN0IG9oY2lfaGNkICpjb250cm9sbGVyLAorCWludCB2ZXJib3NlLAorCWNoYXIgKipuZXh0LAorCXVuc2lnbmVkICpzaXplKQoreworCXUzMgkJCXRlbXAsIG5kcCwgaTsKKworCXRlbXAgPSByb290aHViX2EgKGNvbnRyb2xsZXIpOworCWlmICh0ZW1wID09IH4odTMyKTApCisJCXJldHVybjsKKwluZHAgPSAodGVtcCAmIFJIX0FfTkRQKTsKKworCWlmICh2ZXJib3NlKSB7CisJCW9oY2lfZGJnX3N3IChjb250cm9sbGVyLCBuZXh0LCBzaXplLAorCQkJInJvb3RodWIuYSAlMDh4IFBPVFBHVD0lZCVzJXMlcyVzJXMgTkRQPSVkXG4iLCB0ZW1wLAorCQkJKCh0ZW1wICYgUkhfQV9QT1RQR1QpID4+IDI0KSAmIDB4ZmYsCisJCQkodGVtcCAmIFJIX0FfTk9DUCkgPyAiIE5PQ1AiIDogIiIsCisJCQkodGVtcCAmIFJIX0FfT0NQTSkgPyAiIE9DUE0iIDogIiIsCisJCQkodGVtcCAmIFJIX0FfRFQpID8gIiBEVCIgOiAiIiwKKwkJCSh0ZW1wICYgUkhfQV9OUFMpID8gIiBOUFMiIDogIiIsCisJCQkodGVtcCAmIFJIX0FfUFNNKSA/ICIgUFNNIiA6ICIiLAorCQkJbmRwCisJCQkpOworCQl0ZW1wID0gcm9vdGh1Yl9iIChjb250cm9sbGVyKTsKKwkJb2hjaV9kYmdfc3cgKGNvbnRyb2xsZXIsIG5leHQsIHNpemUsCisJCQkicm9vdGh1Yi5iICUwOHggUFBDTT0lMDR4IERSPSUwNHhcbiIsCisJCQl0ZW1wLAorCQkJKHRlbXAgJiBSSF9CX1BQQ00pID4+IDE2LAorCQkJKHRlbXAgJiBSSF9CX0RSKQorCQkJKTsKKwkJdGVtcCA9IHJvb3RodWJfc3RhdHVzIChjb250cm9sbGVyKTsKKwkJb2hjaV9kYmdfc3cgKGNvbnRyb2xsZXIsIG5leHQsIHNpemUsCisJCQkicm9vdGh1Yi5zdGF0dXMgJTA4eCVzJXMlcyVzJXMlc1xuIiwKKwkJCXRlbXAsCisJCQkodGVtcCAmIFJIX0hTX0NSV0UpID8gIiBDUldFIiA6ICIiLAorCQkJKHRlbXAgJiBSSF9IU19PQ0lDKSA/ICIgT0NJQyIgOiAiIiwKKwkJCSh0ZW1wICYgUkhfSFNfTFBTQykgPyAiIExQU0MiIDogIiIsCisJCQkodGVtcCAmIFJIX0hTX0RSV0UpID8gIiBEUldFIiA6ICIiLAorCQkJKHRlbXAgJiBSSF9IU19PQ0kpID8gIiBPQ0kiIDogIiIsCisJCQkodGVtcCAmIFJIX0hTX0xQUykgPyAiIExQUyIgOiAiIgorCQkJKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbmRwOyBpKyspIHsKKwkJdGVtcCA9IHJvb3RodWJfcG9ydHN0YXR1cyAoY29udHJvbGxlciwgaSk7CisJCWRiZ19wb3J0X3N3IChjb250cm9sbGVyLCBpLCB0ZW1wLCBuZXh0LCBzaXplKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG9oY2lfZHVtcCAoc3RydWN0IG9oY2lfaGNkICpjb250cm9sbGVyLCBpbnQgdmVyYm9zZSkKK3sKKwlvaGNpX2RiZyAoY29udHJvbGxlciwgIk9IQ0kgY29udHJvbGxlciBzdGF0ZVxuIik7CisKKwkvLyBkdW1wcyBzb21lIG9mIHRoZSBzdGF0ZSB3ZSBrbm93IGFib3V0CisJb2hjaV9kdW1wX3N0YXR1cyAoY29udHJvbGxlciwgTlVMTCwgTlVMTCk7CisJaWYgKGNvbnRyb2xsZXItPmhjY2EpCisJCW9oY2lfZGJnIChjb250cm9sbGVyLAorCQkJImhjY2EgZnJhbWUgIyUwNHhcbiIsIG9oY2lfZnJhbWVfbm8oY29udHJvbGxlcikpOworCW9oY2lfZHVtcF9yb290aHViIChjb250cm9sbGVyLCAxLCBOVUxMLCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgZGF0YTAgW10gPSAiREFUQTAiOworc3RhdGljIGNvbnN0IGNoYXIgZGF0YTEgW10gPSAiREFUQTEiOworCitzdGF0aWMgdm9pZCBvaGNpX2R1bXBfdGQgKGNvbnN0IHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgY29uc3QgY2hhciAqbGFiZWwsCisJCWNvbnN0IHN0cnVjdCB0ZCAqdGQpCit7CisJdTMyCXRtcCA9IGhjMzJfdG9fY3B1cCAob2hjaSwgJnRkLT5od0lORk8pOworCisJb2hjaV9kYmcgKG9oY2ksICIlcyB0ZCAlcCVzOyB1cmIgJXAgaW5kZXggJWQ7IGh3IG5leHQgdGQgJTA4eFxuIiwKKwkJbGFiZWwsIHRkLAorCQkodG1wICYgVERfRE9ORSkgPyAiIChET05FKSIgOiAiIiwKKwkJdGQtPnVyYiwgdGQtPmluZGV4LAorCQloYzMyX3RvX2NwdXAgKG9oY2ksICZ0ZC0+aHdOZXh0VEQpKTsKKwlpZiAoKHRtcCAmIFREX0lTTykgPT0gMCkgeworCQljb25zdCBjaGFyCSp0b2dnbGUsICpwaWQ7CisJCXUzMgljYnAsIGJlOworCisJCXN3aXRjaCAodG1wICYgVERfVCkgeworCQljYXNlIFREX1RfREFUQTA6IHRvZ2dsZSA9IGRhdGEwOyBicmVhazsKKwkJY2FzZSBURF9UX0RBVEExOiB0b2dnbGUgPSBkYXRhMTsgYnJlYWs7CisJCWNhc2UgVERfVF9UT0dHTEU6IHRvZ2dsZSA9ICIoQ0FSUlkpIjsgYnJlYWs7CisJCWRlZmF1bHQ6IHRvZ2dsZSA9ICIoPykiOyBicmVhazsKKwkJfQorCQlzd2l0Y2ggKHRtcCAmIFREX0RQKSB7CisJCWNhc2UgVERfRFBfU0VUVVA6IHBpZCA9ICJTRVRVUCI7IGJyZWFrOworCQljYXNlIFREX0RQX0lOOiBwaWQgPSAiSU4iOyBicmVhazsKKwkJY2FzZSBURF9EUF9PVVQ6IHBpZCA9ICJPVVQiOyBicmVhazsKKwkJZGVmYXVsdDogcGlkID0gIihiYWQgcGlkKSI7IGJyZWFrOworCQl9CisJCW9oY2lfZGJnIChvaGNpLCAiICAgICBpbmZvICUwOHggQ0M9JXggJXMgREk9JWQgJXMgJXNcbiIsIHRtcCwKKwkJCVREX0NDX0dFVCh0bXApLCAvKiBFQywgKi8gdG9nZ2xlLAorCQkJKHRtcCAmIFREX0RJKSA+PiAyMSwgcGlkLAorCQkJKHRtcCAmIFREX1IpID8gIlIiIDogIiIpOworCQljYnAgPSBoYzMyX3RvX2NwdXAgKG9oY2ksICZ0ZC0+aHdDQlApOworCQliZSA9IGhjMzJfdG9fY3B1cCAob2hjaSwgJnRkLT5od0JFKTsKKwkJb2hjaV9kYmcgKG9oY2ksICIgICAgIGNicCAlMDh4IGJlICUwOHggKGxlbiAlZClcbiIsIGNicCwgYmUsCisJCQljYnAgPyAoYmUgKyAxIC0gY2JwKSA6IDApOworCX0gZWxzZSB7CisJCXVuc2lnbmVkCWk7CisJCW9oY2lfZGJnIChvaGNpLCAiICBpbmZvICUwOHggQ0M9JXggRkM9JWQgREk9JWQgU0Y9JTA0eFxuIiwgdG1wLAorCQkJVERfQ0NfR0VUKHRtcCksCisJCQkodG1wID4+IDI0KSAmIDB4MDcsCisJCQkodG1wICYgVERfREkpID4+IDIxLAorCQkJdG1wICYgMHgwMDAwZmZmZik7CisJCW9oY2lfZGJnIChvaGNpLCAiICBicDAgJTA4eCBiZSAlMDh4XG4iLAorCQkJaGMzMl90b19jcHVwIChvaGNpLCAmdGQtPmh3Q0JQKSAmIH4weDBmZmYsCisJCQloYzMyX3RvX2NwdXAgKG9oY2ksICZ0ZC0+aHdCRSkpOworCQlmb3IgKGkgPSAwOyBpIDwgTUFYUFNXOyBpKyspIHsKKwkJCXUxNglwc3cgPSBvaGNpX2h3UFNXIChvaGNpLCB0ZCwgaSk7CisJCQlpbnQJY2MgPSAocHN3ID4+IDEyKSAmIDB4MGY7CisJCQlvaGNpX2RiZyAob2hjaSwgIiAgICBwc3cgWyVkXSA9ICUyeCwgQ0M9JXggJXM9JWRcbiIsIGksCisJCQkJcHN3LCBjYywKKwkJCQkoY2MgPj0gMHgwZSkgPyAiT0ZGU0VUIiA6ICJTSVpFIiwKKwkJCQlwc3cgJiAweDBmZmYpOworCQl9CisJfQorfQorCisvKiBjYWxsZXIgTVVTVCBvd24gaGNkIHNwaW5sb2NrIGlmIHZlcmJvc2UgaXMgc2V0ISAqLworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKK29oY2lfZHVtcF9lZCAoY29uc3Qgc3RydWN0IG9oY2lfaGNkICpvaGNpLCBjb25zdCBjaGFyICpsYWJlbCwKKwkJY29uc3Qgc3RydWN0IGVkICplZCwgaW50IHZlcmJvc2UpCit7CisJdTMyCXRtcCA9IGhjMzJfdG9fY3B1IChvaGNpLCBlZC0+aHdJTkZPKTsKKwljaGFyCSp0eXBlID0gIiI7CisKKwlvaGNpX2RiZyAob2hjaSwgIiVzLCBlZCAlcCBzdGF0ZSAweCV4IHR5cGUgJXM7IG5leHQgZWQgJTA4eFxuIiwKKwkJbGFiZWwsCisJCWVkLCBlZC0+c3RhdGUsIGVkc3RyaW5nIChlZC0+dHlwZSksCisJCWhjMzJfdG9fY3B1cCAob2hjaSwgJmVkLT5od05leHRFRCkpOworCXN3aXRjaCAodG1wICYgKEVEX0lOfEVEX09VVCkpIHsKKwljYXNlIEVEX09VVDogdHlwZSA9ICItT1VUIjsgYnJlYWs7CisJY2FzZSBFRF9JTjogdHlwZSA9ICItSU4iOyBicmVhazsKKwkvKiBlbHNlIGZyb20gVERzIC4uLiBjb250cm9sICovCisJfQorCW9oY2lfZGJnIChvaGNpLAorCQkiICBpbmZvICUwOHggTUFYPSVkJXMlcyVzJXMgRVA9JWQlcyBERVY9JWRcbiIsIHRtcCwKKwkJMHgwM2ZmICYgKHRtcCA+PiAxNiksCisJCSh0bXAgJiBFRF9ERVFVRVVFKSA/ICIgRFEiIDogIiIsCisJCSh0bXAgJiBFRF9JU08pID8gIiBJU08iIDogIiIsCisJCSh0bXAgJiBFRF9TS0lQKSA/ICIgU0tJUCIgOiAiIiwKKwkJKHRtcCAmIEVEX0xPV1NQRUVEKSA/ICIgTE9XIiA6ICIiLAorCQkweDAwMGYgJiAodG1wID4+IDcpLAorCQl0eXBlLAorCQkweDAwN2YgJiB0bXApOworCXRtcCA9IGhjMzJfdG9fY3B1cCAob2hjaSwgJmVkLT5od0hlYWRQKTsKKwlvaGNpX2RiZyAob2hjaSwgIiAgdGRzOiBoZWFkICUwOHggJXMlcyB0YWlsICUwOHglc1xuIiwKKwkJdG1wLAorCQkodG1wICYgRURfQykgPyBkYXRhMSA6IGRhdGEwLAorCQkodG1wICYgRURfSCkgPyAiIEhBTFQiIDogIiIsCisJCWhjMzJfdG9fY3B1cCAob2hjaSwgJmVkLT5od1RhaWxQKSwKKwkJdmVyYm9zZSA/ICIiIDogIiAobm90IGxpc3RpbmcpIik7CisJaWYgKHZlcmJvc2UpIHsKKwkJc3RydWN0IGxpc3RfaGVhZAkqdG1wOworCisJCS8qIHVzZSBlZC0+dGRfbGlzdCBiZWNhdXNlIEhDIGNvbmN1cnJlbnRseSBtb2RpZmllcworCQkgKiBod05leHRURCBhcyBpdCBhY2N1bXVsYXRlcyBlZF9kb25lbGlzdC4KKwkJICovCisJCWxpc3RfZm9yX2VhY2ggKHRtcCwgJmVkLT50ZF9saXN0KSB7CisJCQlzdHJ1Y3QgdGQJCSp0ZDsKKwkJCXRkID0gbGlzdF9lbnRyeSAodG1wLCBzdHJ1Y3QgdGQsIHRkX2xpc3QpOworCQkJb2hjaV9kdW1wX3RkIChvaGNpLCAiICAtPiIsIHRkKTsKKwkJfQorCX0KK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvaGNpX2R1bXAgKHN0cnVjdCBvaGNpX2hjZCAqY29udHJvbGxlciwgaW50IHZlcmJvc2UpIHt9CisKKyN1bmRlZiBPSENJX1ZFUkJPU0VfREVCVUcKKworI2VuZGlmIC8qIERFQlVHICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBTVFVCX0RFQlVHX0ZJTEVTCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcmVhdGVfZGVidWdfZmlsZXMgKHN0cnVjdCBvaGNpX2hjZCAqYnVzKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfZGVidWdfZmlsZXMgKHN0cnVjdCBvaGNpX2hjZCAqYnVzKSB7IH0KKworI2Vsc2UKKworc3RhdGljIHNzaXplX3QKK3Nob3dfbGlzdCAoc3RydWN0IG9oY2lfaGNkICpvaGNpLCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgc3RydWN0IGVkICplZCkKK3sKKwl1bnNpZ25lZAkJdGVtcCwgc2l6ZSA9IGNvdW50OworCisJaWYgKCFlZCkKKwkJcmV0dXJuIDA7CisKKwkvKiBwcmludCBmaXJzdCAtLT4gbGFzdCAqLworCXdoaWxlIChlZC0+ZWRfcHJldikKKwkJZWQgPSBlZC0+ZWRfcHJldjsKKworCS8qIGR1bXAgYSBzbmFwc2hvdCBvZiB0aGUgYnVsayBvciBjb250cm9sIHNjaGVkdWxlICovCisJd2hpbGUgKGVkKSB7CisJCXUzMgkJaW5mbyA9IGhjMzJfdG9fY3B1IChvaGNpLCBlZC0+aHdJTkZPKTsKKwkJdTMyCQloZWFkcCA9IGhjMzJfdG9fY3B1IChvaGNpLCBlZC0+aHdIZWFkUCk7CisJCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OworCQlzdHJ1Y3QgdGQJKnRkOworCisJCXRlbXAgPSBzY25wcmludGYgKGJ1Ziwgc2l6ZSwKKwkJCSJlZC8lcCAlY3MgZGV2JWQgZXAlZCVzIG1heCAlZCAlMDh4JXMlcyAlcyIsCisJCQllZCwKKwkJCShpbmZvICYgRURfTE9XU1BFRUQpID8gJ2wnIDogJ2YnLAorCQkJaW5mbyAmIDB4N2YsCisJCQkoaW5mbyA+PiA3KSAmIDB4ZiwKKwkJCShpbmZvICYgRURfSU4pID8gImluIiA6ICJvdXQiLAorCQkJMHgwM2ZmICYgKGluZm8gPj4gMTYpLAorCQkJaW5mbywKKwkJCShpbmZvICYgRURfU0tJUCkgPyAiIHMiIDogIiIsCisJCQkoaGVhZHAgJiBFRF9IKSA/ICIgSCIgOiAiIiwKKwkJCShoZWFkcCAmIEVEX0MpID8gZGF0YTEgOiBkYXRhMCk7CisJCXNpemUgLT0gdGVtcDsKKwkJYnVmICs9IHRlbXA7CisKKwkJbGlzdF9mb3JfZWFjaCAoZW50cnksICZlZC0+dGRfbGlzdCkgeworCQkJdTMyCQljYnAsIGJlOworCisJCQl0ZCA9IGxpc3RfZW50cnkgKGVudHJ5LCBzdHJ1Y3QgdGQsIHRkX2xpc3QpOworCQkJaW5mbyA9IGhjMzJfdG9fY3B1cCAob2hjaSwgJnRkLT5od0lORk8pOworCQkJY2JwID0gaGMzMl90b19jcHVwIChvaGNpLCAmdGQtPmh3Q0JQKTsKKwkJCWJlID0gaGMzMl90b19jcHVwIChvaGNpLCAmdGQtPmh3QkUpOworCQkJdGVtcCA9IHNjbnByaW50ZiAoYnVmLCBzaXplLAorCQkJCQkiXG5cdHRkICVwICVzICVkIGNjPSV4IHVyYiAlcCAoJTA4eCkiLAorCQkJCQl0ZCwKKwkJCQkJKHsgY2hhciAqcGlkOworCQkJCQlzd2l0Y2ggKGluZm8gJiBURF9EUCkgeworCQkJCQljYXNlIFREX0RQX1NFVFVQOiBwaWQgPSAic2V0dXAiOyBicmVhazsKKwkJCQkJY2FzZSBURF9EUF9JTjogcGlkID0gImluIjsgYnJlYWs7CisJCQkJCWNhc2UgVERfRFBfT1VUOiBwaWQgPSAib3V0IjsgYnJlYWs7CisJCQkJCWRlZmF1bHQ6IHBpZCA9ICIoPykiOyBicmVhazsKKwkJCQkJIH0gcGlkO30pLAorCQkJCQljYnAgPyAoYmUgKyAxIC0gY2JwKSA6IDAsCisJCQkJCVREX0NDX0dFVCAoaW5mbyksIHRkLT51cmIsIGluZm8pOworCQkJc2l6ZSAtPSB0ZW1wOworCQkJYnVmICs9IHRlbXA7CisJCX0KKworCQl0ZW1wID0gc2NucHJpbnRmIChidWYsIHNpemUsICJcbiIpOworCQlzaXplIC09IHRlbXA7CisJCWJ1ZiArPSB0ZW1wOworCisJCWVkID0gZWQtPmVkX25leHQ7CisJfQorCXJldHVybiBjb3VudCAtIHNpemU7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzaG93X2FzeW5jIChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2J1cwkJKmJ1czsKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKwlzdHJ1Y3Qgb2hjaV9oY2QJCSpvaGNpOworCXNpemVfdAkJCXRlbXA7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwlidXMgPSB0b191c2JfYnVzKGNsYXNzX2Rldik7CisJaGNkID0gYnVzLT5oY3ByaXY7CisJb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CisKKwkvKiBkaXNwbGF5IGNvbnRyb2wgYW5kIGJ1bGsgbGlzdHMgdG9nZXRoZXIsIGZvciBzaW1wbGljaXR5ICovCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CisJdGVtcCA9IHNob3dfbGlzdCAob2hjaSwgYnVmLCBQQUdFX1NJWkUsIG9oY2ktPmVkX2NvbnRyb2x0YWlsKTsKKwl0ZW1wICs9IHNob3dfbGlzdCAob2hjaSwgYnVmICsgdGVtcCwgUEFHRV9TSVpFIC0gdGVtcCwgb2hjaS0+ZWRfYnVsa3RhaWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gdGVtcDsKK30KK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUiAoYXN5bmMsIFNfSVJVR08sIHNob3dfYXN5bmMsIE5VTEwpOworCisKKyNkZWZpbmUgREJHX1NDSEVEX0xJTUlUIDY0CisKK3N0YXRpYyBzc2l6ZV90CitzaG93X3BlcmlvZGljIChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2J1cwkJKmJ1czsKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKwlzdHJ1Y3Qgb2hjaV9oY2QJCSpvaGNpOworCXN0cnVjdCBlZAkJKipzZWVuLCAqZWQ7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJdW5zaWduZWQJCXRlbXAsIHNpemUsIHNlZW5fY291bnQ7CisJY2hhcgkJCSpuZXh0OworCXVuc2lnbmVkCQlpOworCisJaWYgKCEoc2VlbiA9IGttYWxsb2MgKERCR19TQ0hFRF9MSU1JVCAqIHNpemVvZiAqc2VlbiwgU0xBQl9BVE9NSUMpKSkKKwkJcmV0dXJuIDA7CisJc2Vlbl9jb3VudCA9IDA7CisKKwlidXMgPSB0b191c2JfYnVzKGNsYXNzX2Rldik7CisJaGNkID0gYnVzLT5oY3ByaXY7CisJb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CisJbmV4dCA9IGJ1ZjsKKwlzaXplID0gUEFHRV9TSVpFOworCisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgInNpemUgPSAlZFxuIiwgTlVNX0lOVFMpOworCXNpemUgLT0gdGVtcDsKKwluZXh0ICs9IHRlbXA7CisKKwkvKiBkdW1wIGEgc25hcHNob3Qgb2YgdGhlIHBlcmlvZGljIHNjaGVkdWxlIChhbmQgbG9hZCkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0lOVFM7IGkrKykgeworCQlpZiAoIShlZCA9IG9oY2ktPnBlcmlvZGljIFtpXSkpCisJCQljb250aW51ZTsKKworCQl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAiJTJkIFslM2RdOiIsIGksIG9oY2ktPmxvYWQgW2ldKTsKKwkJc2l6ZSAtPSB0ZW1wOworCQluZXh0ICs9IHRlbXA7CisKKwkJZG8geworCQkJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgIiBlZCVkLyVwIiwKKwkJCQllZC0+aW50ZXJ2YWwsIGVkKTsKKwkJCXNpemUgLT0gdGVtcDsKKwkJCW5leHQgKz0gdGVtcDsKKwkJCWZvciAodGVtcCA9IDA7IHRlbXAgPCBzZWVuX2NvdW50OyB0ZW1wKyspIHsKKwkJCQlpZiAoc2VlbiBbdGVtcF0gPT0gZWQpCisJCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBzaG93IG1vcmUgaW5mbyB0aGUgZmlyc3QgdGltZSBhcm91bmQgKi8KKwkJCWlmICh0ZW1wID09IHNlZW5fY291bnQpIHsKKwkJCQl1MzIJaW5mbyA9IGhjMzJfdG9fY3B1IChvaGNpLCBlZC0+aHdJTkZPKTsKKwkJCQlzdHJ1Y3QgbGlzdF9oZWFkCSplbnRyeTsKKwkJCQl1bnNpZ25lZAkJcWxlbiA9IDA7CisKKwkJCQkvKiBxbGVuIG1lYXN1cmVkIGhlcmUgaW4gVERzLCBub3QgdXJicyAqLworCQkJCWxpc3RfZm9yX2VhY2ggKGVudHJ5LCAmZWQtPnRkX2xpc3QpCisJCQkJCXFsZW4rKzsKKworCQkJCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsCisJCQkJCSIgKCVjcyBkZXYlZCBlcCVkJXMtJXMgcWxlbiAldSIKKwkJCQkJIiBtYXggJWQgJTA4eCVzJXMpIiwKKwkJCQkJKGluZm8gJiBFRF9MT1dTUEVFRCkgPyAnbCcgOiAnZicsCisJCQkJCWluZm8gJiAweDdmLAorCQkJCQkoaW5mbyA+PiA3KSAmIDB4ZiwKKwkJCQkJKGluZm8gJiBFRF9JTikgPyAiaW4iIDogIm91dCIsCisJCQkJCShpbmZvICYgRURfSVNPKSA/ICJpc28iIDogImludCIsCisJCQkJCXFsZW4sCisJCQkJCTB4MDNmZiAmIChpbmZvID4+IDE2KSwKKwkJCQkJaW5mbywKKwkJCQkJKGluZm8gJiBFRF9TS0lQKSA/ICIgSyIgOiAiIiwKKwkJCQkJKGVkLT5od0hlYWRQICYKKwkJCQkJCWNwdV90b19oYzMyKG9oY2ksIEVEX0gpKSA/CisgCQkJCQkJCSIgSCIgOiAiIik7CisJCQkJc2l6ZSAtPSB0ZW1wOworCQkJCW5leHQgKz0gdGVtcDsKKworCQkJCWlmIChzZWVuX2NvdW50IDwgREJHX1NDSEVEX0xJTUlUKQorCQkJCQlzZWVuIFtzZWVuX2NvdW50KytdID0gZWQ7CisKKwkJCQllZCA9IGVkLT5lZF9uZXh0OworCisJCQl9IGVsc2UgeworCQkJCS8qIHdlJ3ZlIHNlZW4gaXQgYW5kIHdoYXQncyBhZnRlciAqLworCQkJCXRlbXAgPSAwOworCQkJCWVkID0gTlVMTDsKKwkJCX0KKworCQl9IHdoaWxlIChlZCk7CisKKwkJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgIlxuIik7CisJCXNpemUgLT0gdGVtcDsKKwkJbmV4dCArPSB0ZW1wOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmb2hjaS0+bG9jaywgZmxhZ3MpOworCWtmcmVlIChzZWVuKTsKKworCXJldHVybiBQQUdFX1NJWkUgLSBzaXplOworfQorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSIChwZXJpb2RpYywgU19JUlVHTywgc2hvd19wZXJpb2RpYywgTlVMTCk7CisKKworI3VuZGVmIERCR19TQ0hFRF9MSU1JVAorCitzdGF0aWMgc3NpemVfdAorc2hvd19yZWdpc3RlcnMgKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfYnVzCQkqYnVzOworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2k7CisJc3RydWN0IG9oY2lfcmVncyBfX2lvbWVtICpyZWdzOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXVuc2lnbmVkCQl0ZW1wLCBzaXplOworCWNoYXIJCQkqbmV4dDsKKwl1MzIJCQlyZGF0YTsKKworCWJ1cyA9IHRvX3VzYl9idXMoY2xhc3NfZGV2KTsKKwloY2QgPSBidXMtPmhjcHJpdjsKKwlvaGNpID0gaGNkX3RvX29oY2koaGNkKTsKKwlyZWdzID0gb2hjaS0+cmVnczsKKwluZXh0ID0gYnVmOworCXNpemUgPSBQQUdFX1NJWkU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKworCS8qIGR1bXAgZHJpdmVyIGluZm8sIHRoZW4gcmVnaXN0ZXJzIGluIHNwZWMgb3JkZXIgKi8KKworCW9oY2lfZGJnX3N3IChvaGNpLCAmbmV4dCwgJnNpemUsCisJCSJidXMgJXMsIGRldmljZSAlc1xuIgorCQkiJXNcbiIKKwkJIiVzIHZlcnNpb24gIiBEUklWRVJfVkVSU0lPTiAiXG4iLAorCQloY2QtPnNlbGYuY29udHJvbGxlci0+YnVzLT5uYW1lLAorCQloY2QtPnNlbGYuY29udHJvbGxlci0+YnVzX2lkLAorCQloY2QtPnByb2R1Y3RfZGVzYywKKwkJaGNkX25hbWUpOworCisJaWYgKGJ1cy0+Y29udHJvbGxlci0+cG93ZXIucG93ZXJfc3RhdGUpIHsKKwkJc2l6ZSAtPSBzY25wcmludGYgKG5leHQsIHNpemUsCisJCQkiU1VTUEVOREVEIChubyByZWdpc3RlciBhY2Nlc3MpXG4iKTsKKwkJZ290byBkb25lOworCX0KKworCW9oY2lfZHVtcF9zdGF0dXMob2hjaSwgJm5leHQsICZzaXplKTsKKworCS8qIGhjY2EgKi8KKwlpZiAob2hjaS0+aGNjYSkKKwkJb2hjaV9kYmdfc3cgKG9oY2ksICZuZXh0LCAmc2l6ZSwKKwkJCSJoY2NhIGZyYW1lIDB4JTA0eFxuIiwgb2hjaV9mcmFtZV9ubyhvaGNpKSk7CisKKwkvKiBvdGhlciByZWdpc3RlcnMgbW9zdGx5IGFmZmVjdCBmcmFtZSB0aW1pbmdzICovCisJcmRhdGEgPSBvaGNpX3JlYWRsIChvaGNpLCAmcmVncy0+Zm1pbnRlcnZhbCk7CisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKKwkJCSJmbWludHZsIDB4JTA4eCAlc0ZTTVBTPTB4JTA0eCBGST0weCUwNHhcbiIsCisJCQlyZGF0YSwgKHJkYXRhID4+IDMxKSA/ICJGSVQgIiA6ICIiLAorCQkJKHJkYXRhID4+IDE2KSAmIDB4ZWZmZiwgcmRhdGEgJiAweGZmZmYpOworCXNpemUgLT0gdGVtcDsKKwluZXh0ICs9IHRlbXA7CisKKwlyZGF0YSA9IG9oY2lfcmVhZGwgKG9oY2ksICZyZWdzLT5mbXJlbWFpbmluZyk7CisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgImZtcmVtYWluaW5nIDB4JTA4eCAlc0ZSPTB4JTA0eFxuIiwKKwkJCXJkYXRhLCAocmRhdGEgPj4gMzEpID8gIkZSVCAiIDogIiIsCisJCQlyZGF0YSAmIDB4M2ZmZik7CisJc2l6ZSAtPSB0ZW1wOworCW5leHQgKz0gdGVtcDsKKworCXJkYXRhID0gb2hjaV9yZWFkbCAob2hjaSwgJnJlZ3MtPnBlcmlvZGljc3RhcnQpOworCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsICJwZXJpb2RpY3N0YXJ0IDB4JTA0eFxuIiwKKwkJCXJkYXRhICYgMHgzZmZmKTsKKwlzaXplIC09IHRlbXA7CisJbmV4dCArPSB0ZW1wOworCisJcmRhdGEgPSBvaGNpX3JlYWRsIChvaGNpLCAmcmVncy0+bHN0aHJlc2gpOworCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsICJsc3RocmVzaCAweCUwNHhcbiIsCisJCQlyZGF0YSAmIDB4M2ZmZik7CisJc2l6ZSAtPSB0ZW1wOworCW5leHQgKz0gdGVtcDsKKworCS8qIHJvb3RodWIgKi8KKwlvaGNpX2R1bXBfcm9vdGh1YiAob2hjaSwgMSwgJm5leHQsICZzaXplKTsKKworZG9uZToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmb2hjaS0+bG9jaywgZmxhZ3MpOworCXJldHVybiBQQUdFX1NJWkUgLSBzaXplOworfQorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSIChyZWdpc3RlcnMsIFNfSVJVR08sIHNob3dfcmVnaXN0ZXJzLCBOVUxMKTsKKworCitzdGF0aWMgaW5saW5lIHZvaWQgY3JlYXRlX2RlYnVnX2ZpbGVzIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCit7CisJc3RydWN0IGNsYXNzX2RldmljZSAqY2xkZXYgPSAmb2hjaV90b19oY2Qob2hjaSktPnNlbGYuY2xhc3NfZGV2OworCisJY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKGNsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfYXN5bmMpOworCWNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShjbGRldiwgJmNsYXNzX2RldmljZV9hdHRyX3BlcmlvZGljKTsKKwljbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoY2xkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9yZWdpc3RlcnMpOworCW9oY2lfZGJnIChvaGNpLCAiY3JlYXRlZCBkZWJ1ZyBmaWxlc1xuIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfZGVidWdfZmlsZXMgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSkKK3sKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGRldiA9ICZvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5jbGFzc19kZXY7CisKKwljbGFzc19kZXZpY2VfcmVtb3ZlX2ZpbGUoY2xkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9hc3luYyk7CisJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKGNsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcGVyaW9kaWMpOworCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZShjbGRldiwgJmNsYXNzX2RldmljZV9hdHRyX3JlZ2lzdGVycyk7Cit9CisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUyN2YxMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwpAQCAtMCwwICsxLDkyNSBAQAorLyoKKyAqIE9IQ0kgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+CisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNCBEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqIAorICogWyBJbml0aWFsaXNhdGlvbiBpcyBiYXNlZCBvbiBMaW51cycgIF0KKyAqIFsgdWhjaSBjb2RlIGFuZCBncmVncyBvaGNpIGZyYWdtZW50cyBdCisgKiBbIChDKSBDb3B5cmlnaHQgMTk5OSBMaW51cyBUb3J2YWxkcyAgXQorICogWyAoQykgQ29weXJpZ2h0IDE5OTkgR3JlZ29yeSBQLiBTbWl0aF0KKyAqIAorICogCisgKiBPSENJIGlzIHRoZSBtYWluICJub24tSW50ZWwvVklBIiBzdGFuZGFyZCBmb3IgVVNCIDEuMSBob3N0IGNvbnRyb2xsZXIKKyAqIGludGVyZmFjZXMgKHRob3VnaCBzb21lIG5vbi14ODYgSW50ZWwgY2hpcHMgdXNlIGl0KS4gIEl0IHN1cHBvcnRzCisgKiBzbWFydGVyIGhhcmR3YXJlIHRoYW4gVUhDSS4gIEEgZG93bmxvYWQgbGluayBmb3IgdGhlIHNwZWMgYXZhaWxhYmxlCisgKiB0aHJvdWdoIHRoZSBodHRwOi8vd3d3LnVzYi5vcmcgd2Vic2l0ZS4KKyAqCisgKiBIaXN0b3J5OgorICogCisgKiAyMDA0LzAzLzI0IExIN0E0MDQgc3VwcG9ydCAoRHVyZ2VzaCBQYXR0YW1hdHRhICYgTWFyYyBTaW5nZXIpCisgKiAyMDA0LzAyLzA0IHVzZSBnZW5lcmljIGRtYV8qIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHBjaV8qIChkc2F4ZW5hQHBsZXhpdHkubmV0KQorICogMjAwMy8wMi8yNCBzaG93IHJlZ2lzdGVycyBpbiBzeXNmcyAoS2V2aW4gQnJvc2l1cykKKyAqCisgKiAyMDAyLzA5LzAzIGdldCByaWQgb2YgZWQgaGFzaHRhYmxlcywgcmV3b3JrIHBlcmlvZGljIHNjaGVkdWxpbmcgYW5kCisgKiAJYmFuZHdpZHRoIGFjY291bnRpbmc7IGlmIGRlYnVnZ2luZywgc2hvdyBzY2hlZHVsZXMgaW4gZHJpdmVyZnMKKyAqIDIwMDIvMDcvMTkgZml4ZXMgdG8gbWFuYWdlbWVudCBvZiBFRCBhbmQgc2NoZWR1bGUgc3RhdGUuCisgKiAyMDAyLzA2LzA5IFNBLTExMTEgc3VwcG9ydCAoQ2hyaXN0b3BoZXIgSG9vdmVyKQorICogMjAwMi8wNi8wMSByZW1lbWJlciBmcmFtZSB3aGVuIEhDIHdvbid0IHNlZSBFRHMgYW55IG1vcmU7IHVzZSB0aGF0IGluZm8KKyAqCXRvIGZpeCB1cmIgdW5saW5rIHJhY2VzIGNhdXNlZCBieSBpbnRlcnJ1cHQgbGF0ZW5jeSBhc3N1bXB0aW9uczsKKyAqCW1pbm9yIEVEIGZpZWxkIGFuZCBmdW5jdGlvbiBuYW1pbmcgdXBkYXRlcworICogMjAwMi8wMS8xOCBwYWNrYWdlIGFzIGEgcGF0Y2ggZm9yIDIuNS4zOyB0aGlzIHNob3VsZCBtYXRjaCB0aGUKKyAqCTIuNC4xNyBrZXJuZWwgbW9kdWxvIHNvbWUgYnVncyBiZWluZyBmaXhlZC4KKyAqCisgKiAyMDAxLzEwLzE4IG1lcmdlIHBtYWMgY2xlYW51cCAoQmVuamFtaW4gSGVycmVuc2NobWlkdCkgYW5kIGJ1Z2ZpeGVzCisgKglmcm9tIHBvc3QtMi40LjUgcGF0Y2hlcy4KKyAqIDIwMDEvMDkvMjAgVVJCX1pFUk9fUEFDS0VUIHN1cHBvcnQ7IGhjY2FfZG1hIHBvcnRhYmlsaXR5LCBPUFRpIHdhcm5pbmcKKyAqIDIwMDEvMDkvMDcgbWF0Y2ggUENJIFBNIGNoYW5nZXMsIGVycm5vcyBmcm9tIExpbnVzJyB0cmVlCisgKiAyMDAxLzA1LzA1IGZvcmsgMi40LjUgdmVyc2lvbiBpbnRvICJoY2QiIGZyYW1ld29yaywgY2xlYW51cCwgc2ltcGxpZnk7CisgKglwYm9vayBwY2kgcXVpcmtzIGdvbmUgKHBsZWFzZSBmaXggcGJvb2sgcGNpIHN3ISkgKGRiKQorICoKKyAqIDIwMDEvMDQvMDggSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZCAoZ2IpCisgKiAyMDAxLzAzLzI0IHRkL2VkIGhhc2hpbmcgdG8gcmVtb3ZlIGJ1c190b192aXJ0IChTdGV2ZSBMb25nZXJiZWFtKTsKKyAJcGNpX21hcF9zaW5nbGUgKGRiKQorICogMjAwMS8wMy8yMSB0ZCBhbmQgZGV2L2VkIGFsbG9jYXRpb24gdXNlcyBuZXcgcGNpX3Bvb2wgQVBJIChkYikKKyAqIDIwMDEvMDMvMDcgaGNjYSBhbGxvY2F0aW9uIHVzZXMgcGNpX2FsbG9jX2NvbnNpc3RlbnQgKFN0ZXZlIExvbmdlcmJlYW0pCisgKgorICogMjAwMC8wOS8yNiBmaXhlZCByYWNlcyBpbiByZW1vdmluZyB0aGUgcHJpdmF0ZSBwb3J0aW9uIG9mIHRoZSB1cmIKKyAqIDIwMDAvMDkvMDcgZGlzYWJsZSBidWxrIGFuZCBjb250cm9sIGxpc3RzIHdoZW4gdW5saW5raW5nIHRoZSBsYXN0CisgKgllbmRwb2ludCBkZXNjcmlwdG9yIGluIG9yZGVyIHRvIGF2b2lkIHVucmVjb3ZlcmFibGUgZXJyb3JzIG9uCisgKgl0aGUgTHVjZW50IGNoaXBzLiAocndjQHNnaSkKKyAqIDIwMDAvMDgvMjkgdXNlIGJhbmR3aWR0aCBjbGFpbWluZyBob29rcyAodGhhbmtzIFJhbmR5ISksIGZpeCBzb21lCisgKgl1cmIgdW5saW5rIHByb2JzLCBpbmRlbnRhdGlvbiBmaXhlcworICogMjAwMC8wOC8xMSB2YXJpb3VzIG9vcHMgZml4ZXMgbW9zdGx5IGFmZmVjdGluZyBpc28gYW5kIGNsZWFudXAgZnJvbQorICoJZGV2aWNlIHVucGx1Z3MuCisgKiAyMDAwLzA2LzI4IHVzZSBQQ0kgaG90cGx1ZyBmcmFtZXdvcmssIGZvciBiZXR0ZXIgcG93ZXIgbWFuYWdlbWVudAorICoJYW5kIGZvciBDYXJkYnVzIHN1cHBvcnQgKERhdmlkIEJyb3duZWxsKQorICogMjAwMC9lYXJsaWVyOiAgZml4ZXMgZm9yIE5FQy9MdWNlbnQgY2hpcHM7IHN1c3BlbmQvcmVzdW1lIGhhbmRsaW5nCisgKgl3aGVuIHRoZSBjb250cm9sbGVyIGxvc2VzIHBvd2VyOyBoYW5kbGUgVUU7IGNsZWFudXA7IC4uLgorICoKKyAqIHY1LjIgMTk5OS8xMi8wNyBVUkIgM3JkIHByZXZpZXcsIAorICogdjUuMSAxOTk5LzExLzMwIFVSQiAybmQgcHJldmlldywgY3BpYSwgKHVzYi1zY3NpKQorICogdjUuMCAxOTk5LzExLzIyIFVSQiBUZWNobmljYWwgcHJldmlldywgUGF1bCBNYWNrZXJyYXMgcG93ZXJib29rIHN1c3AvcmVzdW1lIAorICogCWkzODY6IEhVQiwgS2V5Ym9hcmQsIE1vdXNlLCBQcmludGVyIAorICoKKyAqIHY0LjMgMTk5OS8xMC8yNyBtdWx0aXBsZSBIQ3MsIGJ1bGtfcmVxdWVzdAorICogdjQuMiAxOTk5LzA5LzA1IElTTyBBUEkgYWxwaGEsIG5ldyBkZXYgYWxsb2MsIG5lZyBFcnJvci1jb2RlcworICogdjQuMSAxOTk5LzA4LzI3IFJhbmR5IER1bmxhcCdzIC0gSVNPIEFQSSBmaXJzdCBpbXBsLgorICogdjQuMCAxOTk5LzA4LzE4IAorICogdjMuMCAxOTk5LzA2LzI1IAorICogdjIuMSAxOTk5LzA1LzA5ICBjb2RlIGNsZWFuIHVwCisgKiB2Mi4wIDE5OTkvMDUvMDQgCisgKiB2MS4wIDE5OTkvMDQvMjcgaW5pdGlhbCByZWxlYXNlCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKyAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKyMJZGVmaW5lIERFQlVHCisjZWxzZQorIwl1bmRlZiBERUJVRworI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4gIC8qIGZvciBpbl9pbnRlcnJ1cHQgKCkgKi8KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Jfb3RnLmg+CisjaW5jbHVkZSAiLi4vY29yZS9oY2QuaCIKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPiAKKyNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+ICAgIC8qIG5lZWRlZCBieSBvaGNpLW1lbS5jIHdoZW4gbm8gUENJICovCisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMjAwNCBOb3YgMDgiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlJvbWFuIFdlaXNzZ2FlcmJlciwgRGF2aWQgQnJvd25lbGwiCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgMS4xICdPcGVuJyBIb3N0IENvbnRyb2xsZXIgKE9IQ0kpIERyaXZlciIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLy8gI2RlZmluZSBPSENJX1ZFUkJPU0VfREVCVUcJLyogbm90IGFsd2F5cyBoZWxwZnVsICovCisKKy8qIEZvciBpbml0aWFsaXppbmcgY29udHJvbGxlciAobWFzayBpbiBhbiBIQ0ZTIG1vZGUgdG9vKSAqLworI2RlZmluZQlPSENJX0NPTlRST0xfSU5JVCAJT0hDSV9DVFJMX0NCU1IKKyNkZWZpbmUJT0hDSV9JTlRSX0lOSVQgXAorCShPSENJX0lOVFJfTUlFIHwgT0hDSV9JTlRSX1VFIHwgT0hDSV9JTlRSX1JEIHwgT0hDSV9JTlRSX1dESCkKKworI2lmZGVmIF9faHBwYV9fCisvKiBPbiBQQS1SSVNDLCBQREMgY2FuIGxlYXZlIElSIHNldCBpbmNvcnJlY3RseTsgaWdub3JlIGl0IHRoZXJlLiAqLworI2RlZmluZQlJUl9ESVNBQkxFCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAKKy8qIE9NQVAgZG9lc24ndCBzdXBwb3J0IElSIChubyBTTU07IG5vdCBuZWVkZWQpICovCisjZGVmaW5lCUlSX0RJU0FCTEUKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgY29uc3QgY2hhcgloY2RfbmFtZSBbXSA9ICJvaGNpX2hjZCI7CisKKyNpbmNsdWRlICJvaGNpLmgiCisKK3N0YXRpYyB2b2lkIG9oY2lfZHVtcCAoc3RydWN0IG9oY2lfaGNkICpvaGNpLCBpbnQgdmVyYm9zZSk7CitzdGF0aWMgaW50IG9oY2lfaW5pdCAoc3RydWN0IG9oY2lfaGNkICpvaGNpKTsKK3N0YXRpYyB2b2lkIG9oY2lfc3RvcCAoc3RydWN0IHVzYl9oY2QgKmhjZCk7CisKKyNpbmNsdWRlICJvaGNpLWh1Yi5jIgorI2luY2x1ZGUgIm9oY2ktZGJnLmMiCisjaW5jbHVkZSAib2hjaS1tZW0uYyIKKyNpbmNsdWRlICJvaGNpLXEuYyIKKworCisvKgorICogT24gYXJjaGl0ZWN0dXJlcyB3aXRoIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdHMgd2UgbXVzdCBuZXZlciByZXR1cm4KKyAqIElSUV9OT05FLgorICovCisjaWYgZGVmaW5lZChDT05GSUdfU0ExMTExKSAgLyogLi4uIG9yIG90aGVyIGVkZ2UtdHJpZ2dlcmVkIHN5c3RlbXMgKi8KKyNkZWZpbmUgSVJRX05PVE1JTkUJSVJRX0hBTkRMRUQKKyNlbHNlCisjZGVmaW5lIElSUV9OT1RNSU5FCUlSUV9OT05FCisjZW5kaWYKKworCisvKiBTb21lIGJvYXJkcyBtaXNyZXBvcnQgcG93ZXIgc3dpdGNoaW5nL292ZXJjdXJyZW50ICovCitzdGF0aWMgaW50IGRpc3RydXN0X2Zpcm13YXJlID0gMTsKK21vZHVsZV9wYXJhbSAoZGlzdHJ1c3RfZmlybXdhcmUsIGJvb2wsIDApOworTU9EVUxFX1BBUk1fREVTQyAoZGlzdHJ1c3RfZmlybXdhcmUsCisJInRydWUgdG8gZGlzdHJ1c3QgZmlybXdhcmUgcG93ZXIvb3ZlcmN1cnJlbnQgc2V0dXAiKTsKKworLyogU29tZSBib2FyZHMgbGVhdmUgSVIgc2V0IHdyb25nbHksIHNpbmNlIHRoZXkgZmFpbCBCSU9TL1NNTSBoYW5kc2hha2VzICovCitzdGF0aWMgaW50IG5vX2hhbmRzaGFrZSA9IDA7Cittb2R1bGVfcGFyYW0gKG5vX2hhbmRzaGFrZSwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDIChub19oYW5kc2hha2UsICJ0cnVlIChub3QgZGVmYXVsdCkgZGlzYWJsZXMgQklPUyBoYW5kc2hha2UiKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIHF1ZXVlIHVwIGFuIHVyYiBmb3IgYW55dGhpbmcgZXhjZXB0IHRoZSByb290IGh1YgorICovCitzdGF0aWMgaW50IG9oY2lfdXJiX2VucXVldWUgKAorCXN0cnVjdCB1c2JfaGNkCSpoY2QsCisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCwKKwlzdHJ1Y3QgdXJiCSp1cmIsCisJaW50CQltZW1fZmxhZ3MKKykgeworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCXN0cnVjdCBlZAkqZWQ7CisJdXJiX3ByaXZfdAkqdXJiX3ByaXY7CisJdW5zaWduZWQgaW50CXBpcGUgPSB1cmItPnBpcGU7CisJaW50CQlpLCBzaXplID0gMDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCWludAkJcmV0dmFsID0gMDsKKwkKKyNpZmRlZiBPSENJX1ZFUkJPU0VfREVCVUcKKwl1cmJfcHJpbnQgKHVyYiwgIlNVQiIsIHVzYl9waXBlaW4gKHBpcGUpKTsKKyNlbmRpZgorCQorCS8qIGV2ZXJ5IGVuZHBvaW50IGhhcyBhIGVkLCBsb2NhdGUgYW5kIG1heWJlIChyZSlpbml0aWFsaXplIGl0ICovCisJaWYgKCEgKGVkID0gZWRfZ2V0IChvaGNpLCBlcCwgdXJiLT5kZXYsIHBpcGUsIHVyYi0+aW50ZXJ2YWwpKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBmb3IgdGhlIHByaXZhdGUgcGFydCBvZiB0aGUgVVJCIHdlIG5lZWQgdGhlIG51bWJlciBvZiBURHMgKHNpemUpICovCisJc3dpdGNoIChlZC0+dHlwZSkgeworCQljYXNlIFBJUEVfQ09OVFJPTDoKKwkJCS8qIHRkX3N1Ym1pdF91cmIoKSBkb2Vzbid0IHlldCBoYW5kbGUgdGhlc2UgKi8KKwkJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiA0MDk2KQorCQkJCXJldHVybiAtRU1TR1NJWkU7CisKKwkJCS8qIDEgVEQgZm9yIHNldHVwLCAxIGZvciBBQ0ssIHBsdXMgLi4uICovCisJCQlzaXplID0gMjsKKwkJCS8qIEZBTExUSFJPVUdIICovCisJCS8vIGNhc2UgUElQRV9JTlRFUlJVUFQ6CisJCS8vIGNhc2UgUElQRV9CVUxLOgorCQlkZWZhdWx0OgorCQkJLyogb25lIFREIGZvciBldmVyeSA0MDk2IEJ5dGVzIChjYW4gYmUgdXB0byA4SykgKi8KKwkJCXNpemUgKz0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC8gNDA5NjsKKwkJCS8qIC4uLiBhbmQgZm9yIGFueSByZW1haW5pbmcgYnl0ZXMgLi4uICovCisJCQlpZiAoKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAlIDQwOTYpICE9IDApCisJCQkJc2l6ZSsrOworCQkJLyogLi4uIGFuZCBtYXliZSBhIHplcm8gbGVuZ3RoIHBhY2tldCB0byB3cmFwIGl0IHVwICovCisJCQlpZiAoc2l6ZSA9PSAwKQorCQkJCXNpemUrKzsKKwkJCWVsc2UgaWYgKCh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1pFUk9fUEFDS0VUKSAhPSAwCisJCQkJJiYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aAorCQkJCQklIHVzYl9tYXhwYWNrZXQgKHVyYi0+ZGV2LCBwaXBlLAorCQkJCQkJdXNiX3BpcGVvdXQgKHBpcGUpKSkgPT0gMCkKKwkJCQlzaXplKys7CisJCQlicmVhazsKKwkJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOiAvKiBudW1iZXIgb2YgcGFja2V0cyBmcm9tIFVSQiAqLworCQkJc2l6ZSA9IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7CisJCQlicmVhazsKKwl9CisKKwkvKiBhbGxvY2F0ZSB0aGUgcHJpdmF0ZSBwYXJ0IG9mIHRoZSBVUkIgKi8KKwl1cmJfcHJpdiA9IGttYWxsb2MgKHNpemVvZiAodXJiX3ByaXZfdCkgKyBzaXplICogc2l6ZW9mIChzdHJ1Y3QgdGQgKiksCisJCQltZW1fZmxhZ3MpOworCWlmICghdXJiX3ByaXYpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldCAodXJiX3ByaXYsIDAsIHNpemVvZiAodXJiX3ByaXZfdCkgKyBzaXplICogc2l6ZW9mIChzdHJ1Y3QgdGQgKikpOworCUlOSVRfTElTVF9IRUFEICgmdXJiX3ByaXYtPnBlbmRpbmcpOworCXVyYl9wcml2LT5sZW5ndGggPSBzaXplOworCXVyYl9wcml2LT5lZCA9IGVkOwkKKworCS8qIGFsbG9jYXRlIHRoZSBURHMgKGRlZmVycmluZyBoYXNoIGNoYWluIHVwZGF0ZXMpICovCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQl1cmJfcHJpdi0+dGQgW2ldID0gdGRfYWxsb2MgKG9oY2ksIG1lbV9mbGFncyk7CisJCWlmICghdXJiX3ByaXYtPnRkIFtpXSkgeworCQkJdXJiX3ByaXYtPmxlbmd0aCA9IGk7CisJCQl1cmJfZnJlZV9wcml2IChvaGNpLCB1cmJfcHJpdik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0JCisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKworCS8qIGRvbid0IHN1Ym1pdCB0byBhIGRlYWQgSEMgKi8KKwlpZiAoIUhDX0lTX1JVTk5JTkcoaGNkLT5zdGF0ZSkpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBmYWlsOworCX0KKworCS8qIGluIGNhc2Ugb2YgdW5saW5rLWR1cmluZy1zdWJtaXQgKi8KKwlzcGluX2xvY2sgKCZ1cmItPmxvY2spOworCWlmICh1cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpIHsKKwkJc3Bpbl91bmxvY2sgKCZ1cmItPmxvY2spOworCQl1cmItPmhjcHJpdiA9IHVyYl9wcml2OworCQlmaW5pc2hfdXJiIChvaGNpLCB1cmIsIE5VTEwpOworCQlyZXR2YWwgPSAwOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogc2NoZWR1bGUgdGhlIGVkIGlmIG5lZWRlZCAqLworCWlmIChlZC0+c3RhdGUgPT0gRURfSURMRSkgeworCQlyZXR2YWwgPSBlZF9zY2hlZHVsZSAob2hjaSwgZWQpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCWdvdG8gZmFpbDA7CisJCWlmIChlZC0+dHlwZSA9PSBQSVBFX0lTT0NIUk9OT1VTKSB7CisJCQl1MTYJZnJhbWUgPSBvaGNpX2ZyYW1lX25vKG9oY2kpOworCisJCQkvKiBkZWxheSBhIGZldyBmcmFtZXMgYmVmb3JlIHRoZSBmaXJzdCBURCAqLworCQkJZnJhbWUgKz0gbWF4X3QgKHUxNiwgOCwgZWQtPmludGVydmFsKTsKKwkJCWZyYW1lICY9IH4oZWQtPmludGVydmFsIC0gMSk7CisJCQlmcmFtZSB8PSBlZC0+YnJhbmNoOworCQkJdXJiLT5zdGFydF9mcmFtZSA9IGZyYW1lOworCisJCQkvKiB5ZXMsIG9ubHkgVVJCX0lTT19BU0FQIGlzIHN1cHBvcnRlZCwgYW5kCisJCQkgKiB1cmItPnN0YXJ0X2ZyYW1lIGlzIG5ldmVyIHVzZWQgYXMgaW5wdXQuCisJCQkgKi8KKwkJfQorCX0gZWxzZSBpZiAoZWQtPnR5cGUgPT0gUElQRV9JU09DSFJPTk9VUykKKwkJdXJiLT5zdGFydF9mcmFtZSA9IGVkLT5sYXN0X2lzbyArIGVkLT5pbnRlcnZhbDsKKworCS8qIGZpbGwgdGhlIFREcyBhbmQgbGluayB0aGVtIHRvIHRoZSBlZDsgYW5kCisJICogZW5hYmxlIHRoYXQgcGFydCBvZiB0aGUgc2NoZWR1bGUsIGlmIG5lZWRlZAorCSAqIGFuZCB1cGRhdGUgY291bnQgb2YgcXVldWVkIHBlcmlvZGljIHVyYnMKKwkgKi8KKwl1cmItPmhjcHJpdiA9IHVyYl9wcml2OworCXRkX3N1Ym1pdF91cmIgKG9oY2ksIHVyYik7CisKK2ZhaWwwOgorCXNwaW5fdW5sb2NrICgmdXJiLT5sb2NrKTsKK2ZhaWw6CisJaWYgKHJldHZhbCkKKwkJdXJiX2ZyZWVfcHJpdiAob2hjaSwgdXJiX3ByaXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIGRlY291cGxlIHRoZSBVUkIgZnJvbSB0aGUgSEMgcXVldWVzIChURHMsIHVyYl9wcml2KTsgaXQncworICogYWxyZWFkeSBtYXJrZWQgdXNpbmcgdXJiLT5zdGF0dXMuICByZXBvcnRpbmcgaXMgYWx3YXlzIGRvbmUKKyAqIGFzeW5jaHJvbm91c2x5LCBhbmQgd2UgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGFuIHVyYiB0aGF0J3MKKyAqIHBhcnRpYWxseSB0cmFuc2ZlcnJlZCwgb3IgYW4gRUQgd2l0aCBvdGhlciB1cmJzIGJlaW5nIHVubGlua2VkLgorICovCitzdGF0aWMgaW50IG9oY2lfdXJiX2RlcXVldWUgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgb2hjaV9oY2QJCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJCisjaWZkZWYgT0hDSV9WRVJCT1NFX0RFQlVHCisJdXJiX3ByaW50ICh1cmIsICJVTkxJTksiLCAxKTsKKyNlbmRpZgkJICAKKworCXNwaW5fbG9ja19pcnFzYXZlICgmb2hjaS0+bG9jaywgZmxhZ3MpOworIAlpZiAoSENfSVNfUlVOTklORyhoY2QtPnN0YXRlKSkgeworCQl1cmJfcHJpdl90ICAqdXJiX3ByaXY7CisKKwkJLyogVW5sZXNzIGFuIElSUSBjb21wbGV0ZWQgdGhlIHVubGluayB3aGlsZSBpdCB3YXMgYmVpbmcKKwkJICogaGFuZGVkIHRvIHVzLCBmbGFnIGl0IGZvciB1bmxpbmsgYW5kIGdpdmViYWNrLCBhbmQgZm9yY2UKKwkJICogc29tZSB1cGNvbWluZyBJTlRSX1NGIHRvIGNhbGwgZmluaXNoX3VubGlua3MoKQorCQkgKi8KKwkJdXJiX3ByaXYgPSB1cmItPmhjcHJpdjsKKwkJaWYgKHVyYl9wcml2KSB7CisJCQlpZiAodXJiX3ByaXYtPmVkLT5zdGF0ZSA9PSBFRF9PUEVSKQorCQkJCXN0YXJ0X2VkX3VubGluayAob2hjaSwgdXJiX3ByaXYtPmVkKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qCisJCSAqIHdpdGggSEMgZGVhZCwgd2Ugd29uJ3QgcmVzcGVjdCBoYyBxdWV1ZSBwb2ludGVycworCQkgKiBhbnkgbW9yZSAuLi4ganVzdCBjbGVhbiB1cCBldmVyeSB1cmIncyBtZW1vcnkuCisJCSAqLworCQlpZiAodXJiLT5oY3ByaXYpCisJCQlmaW5pc2hfdXJiIChvaGNpLCB1cmIsIE5VTEwpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmb2hjaS0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBmcmVlcyBjb25maWcvYWx0c2V0dGluZyBzdGF0ZSBmb3IgZW5kcG9pbnRzLAorICogaW5jbHVkaW5nIEVEIG1lbW9yeSwgZHVtbXkgVEQsIGFuZCBidWxrL2ludHIgZGF0YSB0b2dnbGUKKyAqLworCitzdGF0aWMgdm9pZAorb2hjaV9lbmRwb2ludF9kaXNhYmxlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKQoreworCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlzdHJ1Y3QgZWQJCSplZCA9IGVwLT5oY3ByaXY7CisJdW5zaWduZWQJCWxpbWl0ID0gMTAwMDsKKworCS8qIEFTU0VSVDogIGFueSByZXF1ZXN0cy91cmJzIGFyZSBiZWluZyB1bmxpbmtlZCAqLworCS8qIEFTU0VSVDogIG5vYm9keSBjYW4gYmUgc3VibWl0dGluZyB1cmJzIGZvciB0aGlzIGFueSBtb3JlICovCisKKwlpZiAoIWVkKQorCQlyZXR1cm47CisKK3Jlc2NhbjoKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKworCWlmICghSENfSVNfUlVOTklORyAoaGNkLT5zdGF0ZSkpIHsKK3Nhbml0aXplOgorCQllZC0+c3RhdGUgPSBFRF9JRExFOworCQlmaW5pc2hfdW5saW5rcyAob2hjaSwgMCwgTlVMTCk7CisJfQorCisJc3dpdGNoIChlZC0+c3RhdGUpIHsKKwljYXNlIEVEX1VOTElOSzoJCS8qIHdhaXQgZm9yIGh3IHRvIGZpbmlzaD8gKi8KKwkJLyogbWFqb3IgSVJRIGRlbGl2ZXJ5IHRyb3VibGUgbG9zZXMgSU5UUl9TRiB0b28uLi4gKi8KKwkJaWYgKGxpbWl0LS0gPT0gMCkgeworCQkJb2hjaV93YXJuIChvaGNpLCAiSVJRIElOVFJfU0YgbG9zc2FnZVxuIik7CisJCQlnb3RvIHNhbml0aXplOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CisJCXNldF9jdXJyZW50X3N0YXRlIChUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlX3RpbWVvdXQgKDEpOworCQlnb3RvIHJlc2NhbjsKKwljYXNlIEVEX0lETEU6CQkvKiBmdWxseSB1bmxpbmtlZCAqLworCQlpZiAobGlzdF9lbXB0eSAoJmVkLT50ZF9saXN0KSkgeworCQkJdGRfZnJlZSAob2hjaSwgZWQtPmR1bW15KTsKKwkJCWVkX2ZyZWUgKG9oY2ksIGVkKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIGVsc2UgRkFMTCBUSFJPVUdIICovCisJZGVmYXVsdDoKKwkJLyogY2FsbGVyIHdhcyBzdXBwb3NlZCB0byBoYXZlIHVubGlua2VkIGFueSByZXF1ZXN0czsKKwkJICogdGhhdCdzIG5vdCBvdXIgam9iLiAgY2FuJ3QgcmVjb3ZlcjsgbXVzdCBsZWFrIGVkLgorCQkgKi8KKwkJb2hjaV9lcnIgKG9oY2ksICJsZWFrIGVkICVwICgjJTAyeCkgc3RhdGUgJWQlc1xuIiwKKwkJCWVkLCBlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLCBlZC0+c3RhdGUsCisJCQlsaXN0X2VtcHR5ICgmZWQtPnRkX2xpc3QpID8gIiIgOiAiIChoYXMgdGRzKSIpOworCQl0ZF9mcmVlIChvaGNpLCBlZC0+ZHVtbXkpOworCQlicmVhazsKKwl9CisJZXAtPmhjcHJpdiA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9nZXRfZnJhbWUgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IG9oY2lfaGNkCQkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCisJcmV0dXJuIG9oY2lfZnJhbWVfbm8ob2hjaSk7Cit9CisKK3N0YXRpYyB2b2lkIG9oY2lfdXNiX3Jlc2V0IChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCit7CisJb2hjaS0+aGNfY29udHJvbCA9IG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwlvaGNpLT5oY19jb250cm9sICY9IE9IQ0lfQ1RSTF9SV0M7CisJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2ktPmhjX2NvbnRyb2wsICZvaGNpLT5yZWdzLT5jb250cm9sKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogSEMgZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBpbml0IG1lbW9yeSwgYW5kIGtpY2sgQklPUy9TTU0gb2ZmICovCisKK3N0YXRpYyBpbnQgb2hjaV9pbml0IChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCit7CisJaW50IHJldDsKKworCWRpc2FibGUgKG9oY2kpOworCW9oY2ktPnJlZ3MgPSBvaGNpX3RvX2hjZChvaGNpKS0+cmVnczsKKwlvaGNpLT5uZXh0X3N0YXRlY2hhbmdlID0gamlmZmllczsKKworI2lmbmRlZiBJUl9ESVNBQkxFCisJLyogU01NIG93bnMgdGhlIEhDPyAgbm90IGZvciBsb25nISAqLworCWlmICghbm9faGFuZHNoYWtlICYmIG9oY2lfcmVhZGwgKG9oY2ksCisJCQkJCSZvaGNpLT5yZWdzLT5jb250cm9sKSAmIE9IQ0lfQ1RSTF9JUikgeworCQl1MzIgdGVtcDsKKworCQlvaGNpX2RiZyAob2hjaSwgIlVTQiBIQyBUYWtlT3ZlciBmcm9tIEJJT1MvU01NXG4iKTsKKworCQkvKiB0aGlzIHRpbWVvdXQgaXMgYXJiaXRyYXJ5LiAgd2UgbWFrZSBpdCBsb25nLCBzbyBzeXN0ZW1zCisJCSAqIGRlcGVuZGluZyBvbiB1c2Iga2V5Ym9hcmRzIG1heSBiZSB1c2FibGUgZXZlbiBpZiB0aGUKKwkJICogQklPUy9TTU0gY29kZSBzZWVtcyBwcmV0dHkgYnJva2VuLgorCQkgKi8KKwkJdGVtcCA9IDUwMDsJLyogYXJiaXRyYXJ5OiBmaXZlIHNlY29uZHMgKi8KKworCQlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9JTlRSX09DLCAmb2hjaS0+cmVncy0+aW50cmVuYWJsZSk7CisJCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX09DUiwgJm9oY2ktPnJlZ3MtPmNtZHN0YXR1cyk7CisJCXdoaWxlIChvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCkgJiBPSENJX0NUUkxfSVIpIHsKKwkJCW1zbGVlcCAoMTApOworCQkJaWYgKC0tdGVtcCA9PSAwKSB7CisJCQkJb2hjaV9lcnIgKG9oY2ksICJVU0IgSEMgdGFrZW92ZXIgZmFpbGVkISIKKwkJCQkJIiAgKEJJT1MvU01NIGJ1ZylcbiIpOworCQkJCXJldHVybiAtRUJVU1k7CisJCQl9CisJCX0KKwkJb2hjaV91c2JfcmVzZXQgKG9oY2kpOworCX0KKyNlbmRpZgorCisJLyogRGlzYWJsZSBIQyBpbnRlcnJ1cHRzICovCisJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfSU5UUl9NSUUsICZvaGNpLT5yZWdzLT5pbnRyZGlzYWJsZSk7CisJLy8gZmx1c2ggdGhlIHdyaXRlcworCSh2b2lkKSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisKKwlpZiAob2hjaS0+aGNjYSkKKwkJcmV0dXJuIDA7CisKKwlvaGNpLT5oY2NhID0gZG1hX2FsbG9jX2NvaGVyZW50IChvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5jb250cm9sbGVyLAorCQkJc2l6ZW9mICpvaGNpLT5oY2NhLCAmb2hjaS0+aGNjYV9kbWEsIDApOworCWlmICghb2hjaS0+aGNjYSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoKHJldCA9IG9oY2lfbWVtX2luaXQgKG9oY2kpKSA8IDApCisJCW9oY2lfc3RvcCAob2hjaV90b19oY2Qob2hjaSkpOworCisJcmV0dXJuIHJldDsKKworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBTdGFydCBhbiBPSENJIGNvbnRyb2xsZXIsIHNldCB0aGUgQlVTIG9wZXJhdGlvbmFsCisgKiByZXNldHMgVVNCIGFuZCBjb250cm9sbGVyCisgKiBlbmFibGUgaW50ZXJydXB0cyAKKyAqIGNvbm5lY3QgdGhlIHZpcnR1YWwgcm9vdCBodWIKKyAqLworc3RhdGljIGludCBvaGNpX3J1biAoc3RydWN0IG9oY2lfaGNkICpvaGNpKQoreworICAJdTMyCQkJbWFzaywgdGVtcDsKKyAgCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OworICAJc3RydWN0IHVzYl9idXMJCSpidXM7CisJaW50CQkJZmlyc3QgPSBvaGNpLT5mbWludGVydmFsID09IDA7CisKKwlkaXNhYmxlIChvaGNpKTsKKworCS8qIGJvb3QgZmlybXdhcmUgc2hvdWxkIGhhdmUgc2V0IHRoaXMgdXAgKDUuMS4xLjMuMSkgKi8KKwlpZiAoZmlyc3QpIHsKKworCQl0ZW1wID0gb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmZtaW50ZXJ2YWwpOworCQlvaGNpLT5mbWludGVydmFsID0gdGVtcCAmIDB4M2ZmZjsKKwkJaWYgKG9oY2ktPmZtaW50ZXJ2YWwgIT0gRkkpCisJCQlvaGNpX2RiZyAob2hjaSwgImZtaW50ZXJ2YWwgZGVsdGEgJWRcbiIsCisJCQkJb2hjaS0+Zm1pbnRlcnZhbCAtIEZJKTsKKwkJb2hjaS0+Zm1pbnRlcnZhbCB8PSBGU01QIChvaGNpLT5mbWludGVydmFsKSA8PCAxNjsKKwkJLyogYWxzbzogcG93ZXIvb3ZlcmN1cnJlbnQgZmxhZ3MgaW4gcm9vdGh1Yi5hICovCisJfQorCisgIAkvKiBSZXNldCBVU0IgbmVhcmx5ICJieSB0aGUgYm9vayIuICBSZW1vdGVXYWtldXBDb25uZWN0ZWQKKwkgKiBzYXZlZCBpZiBib290IGZpcm13YXJlIChCSU9TL1NNTS8uLi4pIHRvbGQgdXMgaXQncyBjb25uZWN0ZWQKKwkgKiAoZm9yIE9IQ0kgaW50ZWdyYXRlZCBvbiBtYWluYm9hcmQsIGl0IG5vcm1hbGx5IGlzKQorCSAqLworCW9oY2ktPmhjX2NvbnRyb2wgPSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJb2hjaV9kYmcgKG9oY2ksICJyZXNldHRpbmcgZnJvbSBzdGF0ZSAnJXMnLCBjb250cm9sID0gMHgleFxuIiwKKwkJCWhjZnMyc3RyaW5nIChvaGNpLT5oY19jb250cm9sICYgT0hDSV9DVFJMX0hDRlMpLAorCQkJb2hjaS0+aGNfY29udHJvbCk7CisKKwlpZiAob2hjaS0+aGNfY29udHJvbCAmIE9IQ0lfQ1RSTF9SV0MKKwkJCSYmICEob2hjaS0+ZmxhZ3MgJiBPSENJX1FVSVJLX0FNRDc1NikpCisJCW9oY2lfdG9faGNkKG9oY2kpLT5jYW5fd2FrZXVwID0gMTsKKworCXN3aXRjaCAob2hjaS0+aGNfY29udHJvbCAmIE9IQ0lfQ1RSTF9IQ0ZTKSB7CisJY2FzZSBPSENJX1VTQl9PUEVSOgorCQl0ZW1wID0gMDsKKwkJYnJlYWs7CisJY2FzZSBPSENJX1VTQl9TVVNQRU5EOgorCWNhc2UgT0hDSV9VU0JfUkVTVU1FOgorCQlvaGNpLT5oY19jb250cm9sICY9IE9IQ0lfQ1RSTF9SV0M7CisJCW9oY2ktPmhjX2NvbnRyb2wgfD0gT0hDSV9VU0JfUkVTVU1FOworCQl0ZW1wID0gMTAgLyogbXNlYyB3YWl0ICovOworCQlicmVhazsKKwkvLyBjYXNlIE9IQ0lfVVNCX1JFU0VUOgorCWRlZmF1bHQ6CisJCW9oY2ktPmhjX2NvbnRyb2wgJj0gT0hDSV9DVFJMX1JXQzsKKwkJb2hjaS0+aGNfY29udHJvbCB8PSBPSENJX1VTQl9SRVNFVDsKKwkJdGVtcCA9IDUwIC8qIG1zZWMgd2FpdCAqLzsKKwkJYnJlYWs7CisJfQorCW9oY2lfd3JpdGVsIChvaGNpLCBvaGNpLT5oY19jb250cm9sLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJLy8gZmx1c2ggdGhlIHdyaXRlcworCSh2b2lkKSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJbXNsZWVwKHRlbXApOworCXRlbXAgPSByb290aHViX2EgKG9oY2kpOworCWlmICghKHRlbXAgJiBSSF9BX05QUykpIHsKKwkJdW5zaWduZWQgcG9ydHMgPSB0ZW1wICYgUkhfQV9ORFA7IAorCisJCS8qIHBvd2VyIGRvd24gZWFjaCBwb3J0ICovCisJCWZvciAodGVtcCA9IDA7IHRlbXAgPCBwb3J0czsgdGVtcCsrKQorCQkJb2hjaV93cml0ZWwgKG9oY2ksIFJIX1BTX0xTREEsCisJCQkJJm9oY2ktPnJlZ3MtPnJvb3RodWIucG9ydHN0YXR1cyBbdGVtcF0pOworCX0KKwkvLyBmbHVzaCB0aG9zZSB3cml0ZXMKKwkodm9pZCkgb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCW1lbXNldCAob2hjaS0+aGNjYSwgMCwgc2l6ZW9mIChzdHJ1Y3Qgb2hjaV9oY2NhKSk7CisKKwkvKiAybXNlYyB0aW1lbGltaXQgaGVyZSBtZWFucyBubyBpcnFzL3ByZWVtcHQgKi8KKwlzcGluX2xvY2tfaXJxICgmb2hjaS0+bG9jayk7CisKK3JldHJ5OgorCS8qIEhDIFJlc2V0IHJlcXVpcmVzIG1heCAxMCB1cyBkZWxheSAqLworCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0hDUiwgICZvaGNpLT5yZWdzLT5jbWRzdGF0dXMpOworCXRlbXAgPSAzMDsJLyogLi4uIGFsbG93IGV4dHJhIHRpbWUgKi8KKwl3aGlsZSAoKG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jbWRzdGF0dXMpICYgT0hDSV9IQ1IpICE9IDApIHsKKwkJaWYgKC0tdGVtcCA9PSAwKSB7CisJCQlzcGluX3VubG9ja19pcnEgKCZvaGNpLT5sb2NrKTsKKwkJCW9oY2lfZXJyIChvaGNpLCAiVVNCIEhDIHJlc2V0IHRpbWVkIG91dCFcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCXVkZWxheSAoMSk7CisJfQorCisJLyogbm93IHdlJ3JlIGluIHRoZSBTVVNQRU5EIHN0YXRlIC4uLiBtdXN0IGdvIE9QRVJBVElPTkFMCisJICogd2l0aGluIDJtc2VjIGVsc2UgSEMgZW50ZXJzIFJFU1VNRQorCSAqCisJICogLi4uIGJ1dCBzb21lIGhhcmR3YXJlIHdvbid0IGluaXQgZm1JbnRlcnZhbCAiYnkgdGhlIGJvb2siCisJICogKFNpUywgT1BUaSAuLi4pLCBzbyByZXNldCBhZ2FpbiBpbnN0ZWFkLiAgU2lTIGRvZXNuJ3QgbmVlZAorCSAqIHRoaXMgaWYgd2Ugd3JpdGUgZm1JbnRlcnZhbCBhZnRlciB3ZSdyZSBPUEVSQVRJT05BTC4KKwkgKiBVbmNsZWFyIGFib3V0IEFMaSwgU2VydmVyV29ya3MsIGFuZCBvdGhlcnMgLi4uIHRoaXMgY291bGQKKwkgKiBlYXNpbHkgYmUgYSBsb25nc3RhbmRpbmcgYnVnIGluIGNoaXAgaW5pdCBvbiBMaW51eC4KKwkgKi8KKwlpZiAob2hjaS0+ZmxhZ3MgJiBPSENJX1FVSVJLX0lOSVRSRVNFVCkgeworCQlvaGNpX3dyaXRlbCAob2hjaSwgb2hjaS0+aGNfY29udHJvbCwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCQkvLyBmbHVzaCB0aG9zZSB3cml0ZXMKKwkJKHZvaWQpIG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwl9CisKKwkvKiBUZWxsIHRoZSBjb250cm9sbGVyIHdoZXJlIHRoZSBjb250cm9sIGFuZCBidWxrIGxpc3RzIGFyZQorCSAqIFRoZSBsaXN0cyBhcmUgZW1wdHkgbm93LiAqLworCW9oY2lfd3JpdGVsIChvaGNpLCAwLCAmb2hjaS0+cmVncy0+ZWRfY29udHJvbGhlYWQpOworCW9oY2lfd3JpdGVsIChvaGNpLCAwLCAmb2hjaS0+cmVncy0+ZWRfYnVsa2hlYWQpOworCisJLyogYSByZXNldCBjbGVhcnMgdGhpcyAqLworCW9oY2lfd3JpdGVsIChvaGNpLCAodTMyKSBvaGNpLT5oY2NhX2RtYSwgJm9oY2ktPnJlZ3MtPmhjY2EpOworCisJcGVyaW9kaWNfcmVpbml0IChvaGNpKTsKKworCS8qIHNvbWUgT0hDSSBpbXBsZW1lbnRhdGlvbnMgYXJlIGZpbmlja3kgYWJvdXQgaG93IHRoZXkgaW5pdC4KKwkgKiBib2d1cyB2YWx1ZXMgaGVyZSBtZWFuIG5vdCBldmVuIGVudW1lcmF0aW9uIGNvdWxkIHdvcmsuCisJICovCisJaWYgKChvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Zm1pbnRlcnZhbCkgJiAweDNmZmYwMDAwKSA9PSAwCisJCQl8fCAhb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPnBlcmlvZGljc3RhcnQpKSB7CisJCWlmICghKG9oY2ktPmZsYWdzICYgT0hDSV9RVUlSS19JTklUUkVTRVQpKSB7CisJCQlvaGNpLT5mbGFncyB8PSBPSENJX1FVSVJLX0lOSVRSRVNFVDsKKwkJCW9oY2lfZGJnIChvaGNpLCAiZW5hYmxpbmcgaW5pdHJlc2V0IHF1aXJrXG4iKTsKKwkJCWdvdG8gcmV0cnk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxICgmb2hjaS0+bG9jayk7CisJCW9oY2lfZXJyIChvaGNpLCAiaW5pdCBlcnIgKCUwOHggJTA0eClcbiIsCisJCQlvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Zm1pbnRlcnZhbCksCisJCQlvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+cGVyaW9kaWNzdGFydCkpOworCQlyZXR1cm4gLUVPVkVSRkxPVzsKKwl9CisKKyAJLyogc3RhcnQgY29udHJvbGxlciBvcGVyYXRpb25zICovCisJb2hjaS0+aGNfY29udHJvbCAmPSBPSENJX0NUUkxfUldDOworIAlvaGNpLT5oY19jb250cm9sIHw9IE9IQ0lfQ09OVFJPTF9JTklUIHwgT0hDSV9VU0JfT1BFUjsKKyAJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2ktPmhjX2NvbnRyb2wsICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwlvaGNpX3RvX2hjZChvaGNpKS0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOworCisJLyogd2FrZSBvbiBDb25uZWN0U3RhdHVzQ2hhbmdlLCBtYXRjaGluZyBleHRlcm5hbCBodWJzICovCisJb2hjaV93cml0ZWwgKG9oY2ksIFJIX0hTX0RSV0UsICZvaGNpLT5yZWdzLT5yb290aHViLnN0YXR1cyk7CisKKwkvKiBDaG9vc2UgdGhlIGludGVycnVwdHMgd2UgY2FyZSBhYm91dCBub3csIG90aGVycyBsYXRlciBvbiBkZW1hbmQgKi8KKwltYXNrID0gT0hDSV9JTlRSX0lOSVQ7CisJb2hjaV93cml0ZWwgKG9oY2ksIG1hc2ssICZvaGNpLT5yZWdzLT5pbnRyc3RhdHVzKTsKKwlvaGNpX3dyaXRlbCAob2hjaSwgbWFzaywgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOworCisJLyogaGFuZGxlIHJvb3QgaHViIGluaXQgcXVpcmtzIC4uLiAqLworCXRlbXAgPSByb290aHViX2EgKG9oY2kpOworCXRlbXAgJj0gfihSSF9BX1BTTSB8IFJIX0FfT0NQTSk7CisJaWYgKG9oY2ktPmZsYWdzICYgT0hDSV9RVUlSS19TVVBFUklPKSB7CisJCS8qIE5TQyA4NzU2MCBhbmQgbWF5YmUgb3RoZXJzICovCisJCXRlbXAgfD0gUkhfQV9OT0NQOworCQl0ZW1wICY9IH4oUkhfQV9QT1RQR1QgfCBSSF9BX05QUyk7CisJCW9oY2lfd3JpdGVsIChvaGNpLCB0ZW1wLCAmb2hjaS0+cmVncy0+cm9vdGh1Yi5hKTsKKwl9IGVsc2UgaWYgKChvaGNpLT5mbGFncyAmIE9IQ0lfUVVJUktfQU1ENzU2KSB8fCBkaXN0cnVzdF9maXJtd2FyZSkgeworCQkvKiBodWIgcG93ZXIgYWx3YXlzIG9uOyByZXF1aXJlZCBmb3IgQU1ELTc1NiBhbmQgc29tZQorCQkgKiBNYWMgcGxhdGZvcm1zLiAgZ2FuZ2VkIG92ZXJjdXJyZW50IHJlcG9ydGluZywgaWYgYW55LgorCQkgKi8KKwkJdGVtcCB8PSBSSF9BX05QUzsKKwkJb2hjaV93cml0ZWwgKG9oY2ksIHRlbXAsICZvaGNpLT5yZWdzLT5yb290aHViLmEpOworCX0KKwlvaGNpX3dyaXRlbCAob2hjaSwgUkhfSFNfTFBTQywgJm9oY2ktPnJlZ3MtPnJvb3RodWIuc3RhdHVzKTsKKwlvaGNpX3dyaXRlbCAob2hjaSwgKHRlbXAgJiBSSF9BX05QUykgPyAwIDogUkhfQl9QUENNLAorCQkJCQkJJm9oY2ktPnJlZ3MtPnJvb3RodWIuYik7CisJLy8gZmx1c2ggdGhvc2Ugd3JpdGVzCisJKHZvaWQpIG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKworCXNwaW5fdW5sb2NrX2lycSAoJm9oY2ktPmxvY2spOworCisJLy8gUE9UUEdUIGRlbGF5IGlzIGJpdHMgMjQtMzEsIGluIDIgbXMgdW5pdHMuCisJbWRlbGF5ICgodGVtcCA+PiAyMykgJiAweDFmZSk7CisJYnVzID0gJm9oY2lfdG9faGNkKG9oY2kpLT5zZWxmOworCW9oY2lfdG9faGNkKG9oY2kpLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisKKwlvaGNpX2R1bXAgKG9oY2ksIDEpOworCisJdWRldiA9IGJ1cy0+cm9vdF9odWI7CisJaWYgKHVkZXYpIHsKKwkJcmV0dXJuIDA7CisJfQorIAorCS8qIGNvbm5lY3QgdGhlIHZpcnR1YWwgcm9vdCBodWIgKi8KKwl1ZGV2ID0gdXNiX2FsbG9jX2RldiAoTlVMTCwgYnVzLCAwKTsKKwlpZiAoIXVkZXYpIHsKKwkJZGlzYWJsZSAob2hjaSk7CisJCW9oY2ktPmhjX2NvbnRyb2wgJj0gfk9IQ0lfQ1RSTF9IQ0ZTOworCQlvaGNpX3dyaXRlbCAob2hjaSwgb2hjaS0+aGNfY29udHJvbCwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl1ZGV2LT5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworCWlmICh1c2JfaGNkX3JlZ2lzdGVyX3Jvb3RfaHViICh1ZGV2LCBvaGNpX3RvX2hjZChvaGNpKSkgIT0gMCkgeworCQl1c2JfcHV0X2RldiAodWRldik7CisJCWRpc2FibGUgKG9oY2kpOworCQlvaGNpLT5oY19jb250cm9sICY9IH5PSENJX0NUUkxfSENGUzsKKwkJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2ktPmhjX2NvbnRyb2wsICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlmIChvaGNpLT5wb3dlcl9idWRnZXQpCisJCWh1Yl9zZXRfcG93ZXJfYnVkZ2V0KHVkZXYsIG9oY2ktPnBvd2VyX2J1ZGdldCk7CisKKwljcmVhdGVfZGVidWdfZmlsZXMgKG9oY2kpOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBhbiBpbnRlcnJ1cHQgaGFwcGVucyAqLworCitzdGF0aWMgaXJxcmV0dXJuX3Qgb2hjaV9pcnEgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCBwdF9yZWdzICpwdHJlZ3MpCit7CisJc3RydWN0IG9oY2lfaGNkCQkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCXN0cnVjdCBvaGNpX3JlZ3MgX19pb21lbSAqcmVncyA9IG9oY2ktPnJlZ3M7CisgCWludAkJCWludHM7IAorCisJLyogd2UgY2FuIGVsaW1pbmF0ZSBhIChzbG93KSBvaGNpX3JlYWRsKCkKKwkgICBpZiBfb25seV8gV0RIIGNhdXNlZCB0aGlzIGlycSAqLworCWlmICgob2hjaS0+aGNjYS0+ZG9uZV9oZWFkICE9IDApCisJCQkmJiAhIChoYzMyX3RvX2NwdXAgKG9oY2ksICZvaGNpLT5oY2NhLT5kb25lX2hlYWQpCisJCQkJJiAweDAxKSkgeworCQlpbnRzID0gIE9IQ0lfSU5UUl9XREg7CisKKwkvKiBjYXJkYnVzLy4uLiBoYXJkd2FyZSBnb25lIGJlZm9yZSByZW1vdmUoKSAqLworCX0gZWxzZSBpZiAoKGludHMgPSBvaGNpX3JlYWRsIChvaGNpLCAmcmVncy0+aW50cnN0YXR1cykpID09IH4odTMyKTApIHsKKwkJZGlzYWJsZSAob2hjaSk7CisJCW9oY2lfZGJnIChvaGNpLCAiZGV2aWNlIHJlbW92ZWQhXG4iKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCisJLyogaW50ZXJydXB0IGZvciBzb21lIG90aGVyIGRldmljZT8gKi8KKwl9IGVsc2UgaWYgKChpbnRzICY9IG9oY2lfcmVhZGwgKG9oY2ksICZyZWdzLT5pbnRyZW5hYmxlKSkgPT0gMCkgeworCQlyZXR1cm4gSVJRX05PVE1JTkU7CisJfSAKKworCWlmIChpbnRzICYgT0hDSV9JTlRSX1VFKSB7CisJCWRpc2FibGUgKG9oY2kpOworCQlvaGNpX2VyciAob2hjaSwgIk9IQ0kgVW5yZWNvdmVyYWJsZSBFcnJvciwgZGlzYWJsZWRcbiIpOworCQkvLyBlLmcuIGR1ZSB0byBQQ0kgTWFzdGVyL1RhcmdldCBBYm9ydAorCisJCW9oY2lfZHVtcCAob2hjaSwgMSk7CisJCW9oY2lfdXNiX3Jlc2V0IChvaGNpKTsKKwl9CisKKwlpZiAoaW50cyAmIE9IQ0lfSU5UUl9SRCkgeworCQlvaGNpX3ZkYmcgKG9oY2ksICJyZXN1bWUgZGV0ZWN0XG4iKTsKKwkJaWYgKGhjZC0+c3RhdGUgIT0gSENfU1RBVEVfUVVJRVNDSU5HKQorCQkJc2NoZWR1bGVfd29yaygmb2hjaS0+cmhfcmVzdW1lKTsKKwl9CisKKwlpZiAoaW50cyAmIE9IQ0lfSU5UUl9XREgpIHsKKwkJaWYgKEhDX0lTX1JVTk5JTkcoaGNkLT5zdGF0ZSkpCisJCQlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9JTlRSX1dESCwgJnJlZ3MtPmludHJkaXNhYmxlKTsJCisJCXNwaW5fbG9jayAoJm9oY2ktPmxvY2spOworCQlkbF9kb25lX2xpc3QgKG9oY2ksIHB0cmVncyk7CisJCXNwaW5fdW5sb2NrICgmb2hjaS0+bG9jayk7CisJCWlmIChIQ19JU19SVU5OSU5HKGhjZC0+c3RhdGUpKQorCQkJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfSU5UUl9XREgsICZyZWdzLT5pbnRyZW5hYmxlKTsgCisJfQorICAKKwkvKiBjb3VsZCB0cmFjayBJTlRSX1NPIHRvIHJlZHVjZSBhdmFpbGFibGUgUENJLy4uLiBiYW5kd2lkdGggKi8KKworCS8qIGhhbmRsZSBhbnkgcGVuZGluZyBVUkIvRUQgdW5saW5rcywgbGVhdmluZyBJTlRSX1NGIGVuYWJsZWQKKwkgKiB3aGVuIHRoZXJlJ3Mgc3RpbGwgdW5saW5raW5nIHRvIGJlIGRvbmUgKG5leHQgZnJhbWUpLgorCSAqLworCXNwaW5fbG9jayAoJm9oY2ktPmxvY2spOworCWlmIChvaGNpLT5lZF9ybV9saXN0KQorCQlmaW5pc2hfdW5saW5rcyAob2hjaSwgb2hjaV9mcmFtZV9ubyhvaGNpKSwgcHRyZWdzKTsKKwlpZiAoKGludHMgJiBPSENJX0lOVFJfU0YpICE9IDAgJiYgIW9oY2ktPmVkX3JtX2xpc3QKKwkJCSYmIEhDX0lTX1JVTk5JTkcoaGNkLT5zdGF0ZSkpCisJCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0lOVFJfU0YsICZyZWdzLT5pbnRyZGlzYWJsZSk7CQorCXNwaW5fdW5sb2NrICgmb2hjaS0+bG9jayk7CisKKwlpZiAoSENfSVNfUlVOTklORyhoY2QtPnN0YXRlKSkgeworCQlvaGNpX3dyaXRlbCAob2hjaSwgaW50cywgJnJlZ3MtPmludHJzdGF0dXMpOworCQlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9JTlRSX01JRSwgJnJlZ3MtPmludHJlbmFibGUpOwkKKwkJLy8gZmx1c2ggdGhvc2Ugd3JpdGVzCisJCSh2b2lkKSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBvaGNpX3N0b3AgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CQorCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKworCW9oY2lfZGJnIChvaGNpLCAic3RvcCAlcyBjb250cm9sbGVyIChzdGF0ZSAweCUwMngpXG4iLAorCQloY2ZzMnN0cmluZyAob2hjaS0+aGNfY29udHJvbCAmIE9IQ0lfQ1RSTF9IQ0ZTKSwKKwkJaGNkLT5zdGF0ZSk7CisJb2hjaV9kdW1wIChvaGNpLCAxKTsKKworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwlvaGNpX3VzYl9yZXNldCAob2hjaSk7CisJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfSU5UUl9NSUUsICZvaGNpLT5yZWdzLT5pbnRyZGlzYWJsZSk7CisJCisJcmVtb3ZlX2RlYnVnX2ZpbGVzIChvaGNpKTsKKwlvaGNpX21lbV9jbGVhbnVwIChvaGNpKTsKKwlpZiAob2hjaS0+aGNjYSkgeworCQlkbWFfZnJlZV9jb2hlcmVudCAoaGNkLT5zZWxmLmNvbnRyb2xsZXIsIAorCQkJCXNpemVvZiAqb2hjaS0+aGNjYSwgCisJCQkJb2hjaS0+aGNjYSwgb2hjaS0+aGNjYV9kbWEpOworCQlvaGNpLT5oY2NhID0gTlVMTDsKKwkJb2hjaS0+aGNjYV9kbWEgPSAwOworCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogbXVzdCBub3QgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgKi8KKworI2lmCWRlZmluZWQoQ09ORklHX1VTQl9TVVNQRU5EKSB8fCBkZWZpbmVkKENPTkZJR19QTSkKKworc3RhdGljIGludCBvaGNpX3Jlc3RhcnQgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSkKK3sKKwlpbnQgdGVtcDsKKwlpbnQgaTsKKwlzdHJ1Y3QgdXJiX3ByaXYgKnByaXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKnJvb3QgPSBvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5yb290X2h1YjsKKworCS8qIG1hcmsgYW55IGRldmljZXMgZ29uZSwgc28gdGhleSBkbyBub3RoaW5nIHRpbGwga2h1YmQgZGlzY29ubmVjdHMuCisJICogcmVjeWNsZSBhbnkgImxpdmUiIGVkcy90ZHMgKGFuZCB1cmJzKSByaWdodCBhd2F5LgorCSAqIGxhdGVyLCBraHViZCBkaXNjb25uZWN0IHByb2Nlc3Npbmcgd2lsbCByZWN5Y2xlIHRoZSBvdGhlciBzdGF0ZSwKKwkgKiAoZWl0aGVyIGFzIGRpc2Nvbm5lY3QvcmVjb25uZWN0LCBvciBtYXliZSBzb21lZGF5IGFzIGEgcmVzZXQpLgorCSAqLyAKKwlzcGluX2xvY2tfaXJxKCZvaGNpLT5sb2NrKTsKKwlkaXNhYmxlIChvaGNpKTsKKwlmb3IgKGkgPSAwOyBpIDwgcm9vdC0+bWF4Y2hpbGQ7IGkrKykgeworCQlpZiAocm9vdC0+Y2hpbGRyZW4gW2ldKQorCQkJdXNiX3NldF9kZXZpY2Vfc3RhdGUgKHJvb3QtPmNoaWxkcmVuW2ldLAorCQkJCVVTQl9TVEFURV9OT1RBVFRBQ0hFRCk7CisJfQorCWlmICghbGlzdF9lbXB0eSAoJm9oY2ktPnBlbmRpbmcpKQorCQlvaGNpX2RiZyhvaGNpLCAiYWJvcnQgc2NoZWR1bGUuLi5cbiIpOworCWxpc3RfZm9yX2VhY2hfZW50cnkgKHByaXYsICZvaGNpLT5wZW5kaW5nLCBwZW5kaW5nKSB7CisJCXN0cnVjdCB1cmIJKnVyYiA9IHByaXYtPnRkWzBdLT51cmI7CisJCXN0cnVjdCBlZAkqZWQgPSBwcml2LT5lZDsKKworCQlzd2l0Y2ggKGVkLT5zdGF0ZSkgeworCQljYXNlIEVEX09QRVI6CisJCQllZC0+c3RhdGUgPSBFRF9VTkxJTks7CisJCQllZC0+aHdJTkZPIHw9IGNwdV90b19oYzMyKG9oY2ksIEVEX0RFUVVFVUUpOworCQkJZWRfZGVzY2hlZHVsZSAob2hjaSwgZWQpOworCisJCQllZC0+ZWRfbmV4dCA9IG9oY2ktPmVkX3JtX2xpc3Q7CisJCQllZC0+ZWRfcHJldiA9IE5VTEw7CisJCQlvaGNpLT5lZF9ybV9saXN0ID0gZWQ7CisJCQkvKiBGQUxMVEhST1VHSCAqLworCQljYXNlIEVEX1VOTElOSzoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJb2hjaV9kYmcob2hjaSwgImJvZ3VzIGVkICVwIHN0YXRlICVkXG4iLAorCQkJCQllZCwgZWQtPnN0YXRlKTsKKwkJfQorCisJCXNwaW5fbG9jayAoJnVyYi0+bG9jayk7CisJCXVyYi0+c3RhdHVzID0gLUVTSFVURE9XTjsKKwkJc3Bpbl91bmxvY2sgKCZ1cmItPmxvY2spOworCX0KKwlmaW5pc2hfdW5saW5rcyAob2hjaSwgMCwgTlVMTCk7CisJc3Bpbl91bmxvY2tfaXJxKCZvaGNpLT5sb2NrKTsKKworCS8qIHBhcmFub2lhLCBpbiBjYXNlIHRoYXQgZGlkbid0IHdvcms6ICovCisKKwkvKiBlbXB0eSB0aGUgaW50ZXJydXB0IGJyYW5jaGVzICovCisJZm9yIChpID0gMDsgaSA8IE5VTV9JTlRTOyBpKyspIG9oY2ktPmxvYWQgW2ldID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0lOVFM7IGkrKykgb2hjaS0+aGNjYS0+aW50X3RhYmxlIFtpXSA9IDA7CisJCisJLyogbm8gRURzIHRvIHJlbW92ZSAqLworCW9oY2ktPmVkX3JtX2xpc3QgPSBOVUxMOworCisJLyogZW1wdHkgY29udHJvbCBhbmQgYnVsayBsaXN0cyAqLwkgCisJb2hjaS0+ZWRfY29udHJvbHRhaWwgPSBOVUxMOworCW9oY2ktPmVkX2J1bGt0YWlsICAgID0gTlVMTDsKKworCWlmICgodGVtcCA9IG9oY2lfcnVuIChvaGNpKSkgPCAwKSB7CisJCW9oY2lfZXJyIChvaGNpLCAiY2FuJ3QgcmVzdGFydCwgJWRcbiIsIHRlbXApOworCQlyZXR1cm4gdGVtcDsKKwl9IGVsc2UgeworCQkvKiBoZXJlIHdlICJrbm93IiByb290IHBvcnRzIHNob3VsZCBhbHdheXMgc3RheSBwb3dlcmVkLAorCQkgKiBhbmQgdGhhdCBpZiB3ZSB0cnkgdG8gdHVybiB0aGVtIGJhY2sgb24gdGhlIHJvb3QgaHViCisJCSAqIHdpbGwgcmVzcG9uZCB0byBDU0MgcHJvY2Vzc2luZy4KKwkJICovCisJCWkgPSByb290aHViX2EgKG9oY2kpICYgUkhfQV9ORFA7CisJCXdoaWxlIChpLS0pCisJCQlvaGNpX3dyaXRlbCAob2hjaSwgUkhfUFNfUFNTLAorCQkJCSZvaGNpLT5yZWdzLT5yb290aHViLnBvcnRzdGF0dXMgW3RlbXBdKTsKKwkJb2hjaV9kYmcgKG9oY2ksICJyZXN0YXJ0IGNvbXBsZXRlXG4iKTsKKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBEUklWRVJfSU5GTyBEUklWRVJfVkVSU0lPTiAiICIgRFJJVkVSX0RFU0MKKworTU9EVUxFX0FVVEhPUiAoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04gKERSSVZFUl9JTkZPKTsKK01PRFVMRV9MSUNFTlNFICgiR1BMIik7CisKKyNpZmRlZiBDT05GSUdfUENJCisjaW5jbHVkZSAib2hjaS1wY2kuYyIKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NBMTExMQorI2luY2x1ZGUgIm9oY2ktc2ExMTExLmMiCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAKKyNpbmNsdWRlICJvaGNpLW9tYXAuYyIKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfTEg3QTQwNAorI2luY2x1ZGUgIm9oY2ktbGg3YTQwNC5jIgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUFhBMjd4CisjaW5jbHVkZSAib2hjaS1weGEyN3guYyIKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NPQ19BVTFYMDAKKyNpbmNsdWRlICJvaGNpLWF1MXh4eC5jIgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19TT0MKKyNpbmNsdWRlICJvaGNpLXBwYy1zb2MuYyIKKyNlbmRpZgorCisjaWYgIShkZWZpbmVkKENPTkZJR19QQ0kpIFwKKyAgICAgIHx8IGRlZmluZWQoQ09ORklHX1NBMTExMSkgXAorICAgICAgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQKSBcCisgICAgICB8fCBkZWZpbmVkIChDT05GSUdfQVJDSF9MSDdBNDA0KSBcCisgICAgICB8fCBkZWZpbmVkIChDT05GSUdfUFhBMjd4KSBcCisgICAgICB8fCBkZWZpbmVkIChDT05GSUdfU09DX0FVMVgwMCkgXAorICAgICAgfHwgZGVmaW5lZCAoQ09ORklHX1VTQl9PSENJX0hDRF9QUENfU09DKSBcCisJKQorI2Vycm9yICJtaXNzaW5nIGJ1cyBnbHVlIGZvciBvaGNpLWhjZCIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWh1Yi5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWh1Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZmM0MTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaHViLmMKQEAgLTAsMCArMSw2NDMgQEAKKy8qCisgKiBPSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIFVTQi4KKyAqIAorICogKEMpIENvcHlyaWdodCAxOTk5IFJvbWFuIFdlaXNzZ2FlcmJlciA8d2Vpc3NnQHZpZW5uYS5hdD4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0IERhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogCisgKiBUaGlzIGZpbGUgaXMgbGljZW5jZWQgdW5kZXIgR1BMCisgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIE9IQ0kgUm9vdCBIdWIgLi4uIHRoZSBub25zaGFyYWJsZSBzdHVmZgorICovCisKKyNkZWZpbmUgZGJnX3BvcnQoaGMsbGFiZWwsbnVtLHZhbHVlKSBcCisJb2hjaV9kYmcgKGhjLCBcCisJCSIlcyByb290aHViLnBvcnRzdGF0dXMgWyVkXSAiIFwKKwkJIj0gMHglMDh4JXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzXG4iLCBcCisJCWxhYmVsLCBudW0sIHRlbXAsIFwKKwkJKHRlbXAgJiBSSF9QU19QUlNDKSA/ICIgUFJTQyIgOiAiIiwgXAorCQkodGVtcCAmIFJIX1BTX09DSUMpID8gIiBPQ0lDIiA6ICIiLCBcCisJCSh0ZW1wICYgUkhfUFNfUFNTQykgPyAiIFBTU0MiIDogIiIsIFwKKwkJKHRlbXAgJiBSSF9QU19QRVNDKSA/ICIgUEVTQyIgOiAiIiwgXAorCQkodGVtcCAmIFJIX1BTX0NTQykgPyAiIENTQyIgOiAiIiwgXAorIAkJXAorCQkodGVtcCAmIFJIX1BTX0xTREEpID8gIiBMU0RBIiA6ICIiLCBcCisJCSh0ZW1wICYgUkhfUFNfUFBTKSA/ICIgUFBTIiA6ICIiLCBcCisJCSh0ZW1wICYgUkhfUFNfUFJTKSA/ICIgUFJTIiA6ICIiLCBcCisJCSh0ZW1wICYgUkhfUFNfUE9DSSkgPyAiIFBPQ0kiIDogIiIsIFwKKwkJKHRlbXAgJiBSSF9QU19QU1MpID8gIiBQU1MiIDogIiIsIFwKKyAJCVwKKwkJKHRlbXAgJiBSSF9QU19QRVMpID8gIiBQRVMiIDogIiIsIFwKKwkJKHRlbXAgJiBSSF9QU19DQ1MpID8gIiBDQ1MiIDogIiIgXAorCQkpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYJZGVmaW5lZChDT05GSUdfVVNCX1NVU1BFTkQpIHx8IGRlZmluZWQoQ09ORklHX1BNKQorCisjZGVmaW5lIE9IQ0lfU0NIRURfRU5BQkxFUyBcCisJKE9IQ0lfQ1RSTF9DTEV8T0hDSV9DVFJMX0JMRXxPSENJX0NUUkxfUExFfE9IQ0lfQ1RSTF9JRSkKKworc3RhdGljIHZvaWQgZGxfZG9uZV9saXN0IChzdHJ1Y3Qgb2hjaV9oY2QgKiwgc3RydWN0IHB0X3JlZ3MgKik7CitzdGF0aWMgdm9pZCBmaW5pc2hfdW5saW5rcyAoc3RydWN0IG9oY2lfaGNkICosIHUxNiAsIHN0cnVjdCBwdF9yZWdzICopOworc3RhdGljIGludCBvaGNpX3Jlc3RhcnQgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSk7CisKK3N0YXRpYyBpbnQgb2hjaV9odWJfc3VzcGVuZCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3Qgb2hjaV9oY2QJCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CisJaW50CQkJc3RhdHVzID0gMDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmb2hjaS0+bG9jaywgZmxhZ3MpOworCisJb2hjaS0+aGNfY29udHJvbCA9IG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwlzd2l0Y2ggKG9oY2ktPmhjX2NvbnRyb2wgJiBPSENJX0NUUkxfSENGUykgeworCWNhc2UgT0hDSV9VU0JfUkVTVU1FOgorCQlvaGNpX2RiZyAob2hjaSwgInJlc3VtZS9zdXNwZW5kP1xuIik7CisJCW9oY2ktPmhjX2NvbnRyb2wgJj0gfk9IQ0lfQ1RSTF9IQ0ZTOworCQlvaGNpLT5oY19jb250cm9sIHw9IE9IQ0lfVVNCX1JFU0VUOworCQlvaGNpX3dyaXRlbCAob2hjaSwgb2hjaS0+aGNfY29udHJvbCwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCQkodm9pZCkgb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCQkvKiBGQUxMIFRIUk9VR0ggKi8KKwljYXNlIE9IQ0lfVVNCX1JFU0VUOgorCQlzdGF0dXMgPSAtRUJVU1k7CisJCW9oY2lfZGJnIChvaGNpLCAibmVlZHMgcmVpbml0IVxuIik7CisJCWdvdG8gZG9uZTsKKwljYXNlIE9IQ0lfVVNCX1NVU1BFTkQ6CisJCW9oY2lfZGJnIChvaGNpLCAiYWxyZWFkeSBzdXNwZW5kZWRcbiIpOworCQlnb3RvIGRvbmU7CisJfQorCW9oY2lfZGJnIChvaGNpLCAic3VzcGVuZCByb290IGh1YlxuIik7CisKKwkvKiBGaXJzdCBzdG9wIGFueSBwcm9jZXNzaW5nICovCisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1FVSUVTQ0lORzsKKwlpZiAob2hjaS0+aGNfY29udHJvbCAmIE9IQ0lfU0NIRURfRU5BQkxFUykgeworCQlpbnQJCWxpbWl0OworCisJCW9oY2ktPmhjX2NvbnRyb2wgJj0gfk9IQ0lfU0NIRURfRU5BQkxFUzsKKwkJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2ktPmhjX2NvbnRyb2wsICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwkJb2hjaS0+aGNfY29udHJvbCA9IG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwkJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfSU5UUl9TRiwgJm9oY2ktPnJlZ3MtPmludHJzdGF0dXMpOworCisJCS8qIHNjaGVkIGRpc2FibGVzIHRha2UgZWZmZWN0IG9uIHRoZSBuZXh0IGZyYW1lLAorCQkgKiB0aGVuIHRoZSBsYXN0IFdESCBjb3VsZCB0YWtlIDYrIG1zZWMKKwkJICovCisJCW9oY2lfZGJnIChvaGNpLCAic3RvcHBpbmcgc2NoZWR1bGVzIC4uLlxuIik7CisJCWxpbWl0ID0gMjAwMDsKKwkJd2hpbGUgKGxpbWl0ID4gMCkgeworCQkJdWRlbGF5ICgyNTApOworCQkJbGltaXQgPS0gMjUwOworCQkJaWYgKG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5pbnRyc3RhdHVzKQorCQkJCQkmIE9IQ0lfSU5UUl9TRikKKwkJCQlicmVhazsKKwkJfQorCQlkbF9kb25lX2xpc3QgKG9oY2ksIE5VTEwpOworCQltZGVsYXkgKDcpOworCX0KKwlkbF9kb25lX2xpc3QgKG9oY2ksIE5VTEwpOworCWZpbmlzaF91bmxpbmtzIChvaGNpLCBvaGNpX2ZyYW1lX25vKG9oY2kpLCBOVUxMKTsKKwlvaGNpX3dyaXRlbCAob2hjaSwgb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmludHJzdGF0dXMpLAorCQkJJm9oY2ktPnJlZ3MtPmludHJzdGF0dXMpOworCisJLyogbWF5YmUgcmVzdW1lIGNhbiB3YWtlIHJvb3QgaHViICovCisJaWYgKGhjZC0+cmVtb3RlX3dha2V1cCkKKwkJb2hjaS0+aGNfY29udHJvbCB8PSBPSENJX0NUUkxfUldFOworCWVsc2UKKwkJb2hjaS0+aGNfY29udHJvbCAmPSB+T0hDSV9DVFJMX1JXRTsKKworCS8qIFN1c3BlbmQgaHViICovCisJb2hjaS0+aGNfY29udHJvbCAmPSB+T0hDSV9DVFJMX0hDRlM7CisJb2hjaS0+aGNfY29udHJvbCB8PSBPSENJX1VTQl9TVVNQRU5EOworCW9oY2lfd3JpdGVsIChvaGNpLCBvaGNpLT5oY19jb250cm9sLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJKHZvaWQpIG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKworCS8qIG5vIHJlc3VtZXMgdW50aWwgZGV2aWNlcyBmaW5pc2ggc3VzcGVuZGluZyAqLworCW9oY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyAoNSk7CisKK2RvbmU6CisJaWYgKHN0YXR1cyA9PSAwKQorCQloY2QtPnN0YXRlID0gSENfU1RBVEVfU1VTUEVOREVEOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZWQgKmZpbmRfaGVhZCAoc3RydWN0IGVkICplZCkKK3sKKwkvKiBmb3IgYnVsayBhbmQgY29udHJvbCBsaXN0cyAqLworCXdoaWxlIChlZC0+ZWRfcHJldikKKwkJZWQgPSBlZC0+ZWRfcHJldjsKKwlyZXR1cm4gZWQ7Cit9CisKKy8qIGNhbGxlciBoYXMgbG9ja2VkIHRoZSByb290IGh1YiAqLworc3RhdGljIGludCBvaGNpX2h1Yl9yZXN1bWUgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IG9oY2lfaGNkCQkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCXUzMgkJCXRlbXAsIGVuYWJsZXM7CisJaW50CQkJc3RhdHVzID0gLUVJTlBST0dSRVNTOworCisJaWYgKHRpbWVfYmVmb3JlIChqaWZmaWVzLCBvaGNpLT5uZXh0X3N0YXRlY2hhbmdlKSkKKwkJbXNsZWVwKDUpOworCisJc3Bpbl9sb2NrX2lycSAoJm9oY2ktPmxvY2spOworCW9oY2ktPmhjX2NvbnRyb2wgPSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisKKwlpZiAob2hjaS0+aGNfY29udHJvbCAmIChPSENJX0NUUkxfSVIgfCBPSENJX1NDSEVEX0VOQUJMRVMpKSB7CisJCS8qIHRoaXMgY2FuIGhhcHBlbiBhZnRlciBzdXNwZW5kLXRvLWRpc2sgKi8KKwkJaWYgKGhjZC0+c3RhdGUgPT0gSENfU1RBVEVfUkVTVU1JTkcpIHsKKwkJCW9oY2lfZGJnIChvaGNpLCAiQklPUy9TTU0gYWN0aXZlLCBjb250cm9sICUwM3hcbiIsCisJCQkJCW9oY2ktPmhjX2NvbnRyb2wpOworCQkJc3RhdHVzID0gLUVCVVNZOworCQkvKiB0aGlzIGhhcHBlbnMgd2hlbiBwbWNvcmUgcmVzdW1lcyBIQyB0aGVuIHJvb3QgKi8KKwkJfSBlbHNlIHsKKwkJCW9oY2lfZGJnIChvaGNpLCAiZHVwbGljYXRlIHJlc3VtZVxuIik7CisJCQlzdGF0dXMgPSAwOworCQl9CisJfSBlbHNlIHN3aXRjaCAob2hjaS0+aGNfY29udHJvbCAmIE9IQ0lfQ1RSTF9IQ0ZTKSB7CisJY2FzZSBPSENJX1VTQl9TVVNQRU5EOgorCQlvaGNpLT5oY19jb250cm9sICY9IH4oT0hDSV9DVFJMX0hDRlN8T0hDSV9TQ0hFRF9FTkFCTEVTKTsKKwkJb2hjaS0+aGNfY29udHJvbCB8PSBPSENJX1VTQl9SRVNVTUU7CisJCW9oY2lfd3JpdGVsIChvaGNpLCBvaGNpLT5oY19jb250cm9sLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJCSh2b2lkKSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJCW9oY2lfZGJnIChvaGNpLCAicmVzdW1lIHJvb3QgaHViXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBPSENJX1VTQl9SRVNVTUU6CisJCS8qIEhDRlMgY2hhbmdlcyBzb21ldGltZSBhZnRlciBJTlRSX1JEICovCisJCW9oY2lfaW5mbyAob2hjaSwgIndha2V1cFxuIik7CisJCWJyZWFrOworCWNhc2UgT0hDSV9VU0JfT1BFUjoKKwkJb2hjaV9kYmcgKG9oY2ksICJhbHJlYWR5IHJlc3VtZWRcbiIpOworCQlzdGF0dXMgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgkJLyogUkVTRVQsIHdlIGxvc3QgcG93ZXIgKi8KKwkJb2hjaV9kYmcgKG9oY2ksICJyb290IGh1YiBoYXJkd2FyZSByZXNldFxuIik7CisJCXN0YXR1cyA9IC1FQlVTWTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxICgmb2hjaS0+bG9jayk7CisJaWYgKHN0YXR1cyA9PSAtRUJVU1kpIHsKKwkJKHZvaWQpIG9oY2lfaW5pdCAob2hjaSk7CisJCXJldHVybiBvaGNpX3Jlc3RhcnQgKG9oY2kpOworCX0KKwlpZiAoc3RhdHVzICE9IC1FSU5QUk9HUkVTUykKKwkJcmV0dXJuIHN0YXR1czsKKworCXRlbXAgPSByb290aHViX2EgKG9oY2kpICYgUkhfQV9ORFA7CisJZW5hYmxlcyA9IDA7CisJd2hpbGUgKHRlbXAtLSkgeworCQl1MzIgc3RhdCA9IG9oY2lfcmVhZGwgKG9oY2ksCisJCQkJICAgICAgICZvaGNpLT5yZWdzLT5yb290aHViLnBvcnRzdGF0dXMgW3RlbXBdKTsKKworCQkvKiBmb3JjZSBnbG9iYWwsIG5vdCBzZWxlY3RpdmUsIHJlc3VtZSAqLworCQlpZiAoIShzdGF0ICYgUkhfUFNfUFNTKSkKKwkJCWNvbnRpbnVlOworCQlvaGNpX3dyaXRlbCAob2hjaSwgUkhfUFNfUE9DSSwKKwkJCQkmb2hjaS0+cmVncy0+cm9vdGh1Yi5wb3J0c3RhdHVzIFt0ZW1wXSk7CisJfQorCisJLyogU29tZSBjb250cm9sbGVycyAobHVjZW50IGVycmF0dW0pIG5lZWQgZXh0cmEtbG9uZyBkZWxheXMgKi8KKwloY2QtPnN0YXRlID0gSENfU1RBVEVfUkVTVU1JTkc7CisJbWRlbGF5ICgyMCAvKiB1c2IgMTEuNS4xLjEwICovICsgMTUpOworCisJdGVtcCA9IG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwl0ZW1wICY9IE9IQ0lfQ1RSTF9IQ0ZTOworCWlmICh0ZW1wICE9IE9IQ0lfVVNCX1JFU1VNRSkgeworCQlvaGNpX2VyciAob2hjaSwgImNvbnRyb2xsZXIgd29uJ3QgcmVzdW1lXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBkaXNhYmxlIG9sZCBzY2hlZHVsZSBzdGF0ZSwgcmVpbml0IGZyb20gc2NyYXRjaCAqLworCW9oY2lfd3JpdGVsIChvaGNpLCAwLCAmb2hjaS0+cmVncy0+ZWRfY29udHJvbGhlYWQpOworCW9oY2lfd3JpdGVsIChvaGNpLCAwLCAmb2hjaS0+cmVncy0+ZWRfY29udHJvbGN1cnJlbnQpOworCW9oY2lfd3JpdGVsIChvaGNpLCAwLCAmb2hjaS0+cmVncy0+ZWRfYnVsa2hlYWQpOworCW9oY2lfd3JpdGVsIChvaGNpLCAwLCAmb2hjaS0+cmVncy0+ZWRfYnVsa2N1cnJlbnQpOworCW9oY2lfd3JpdGVsIChvaGNpLCAwLCAmb2hjaS0+cmVncy0+ZWRfcGVyaW9kY3VycmVudCk7CisJb2hjaV93cml0ZWwgKG9oY2ksICh1MzIpIG9oY2ktPmhjY2FfZG1hLCAmb2hjaS0+cmVncy0+aGNjYSk7CisKKwkvKiBTb21ldGltZXMgUENJIEQzIHN1c3BlbmQgdHJhc2hlcyBmcmFtZSB0aW1pbmdzIC4uLiAqLworCXBlcmlvZGljX3JlaW5pdCAob2hjaSk7CisKKwkvKiBpbnRlcnJ1cHRzIG1pZ2h0IGhhdmUgYmVlbiBkaXNhYmxlZCAqLworCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0lOVFJfSU5JVCwgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOworCWlmIChvaGNpLT5lZF9ybV9saXN0KQorCQlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9JTlRSX1NGLCAmb2hjaS0+cmVncy0+aW50cmVuYWJsZSk7CisJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5pbnRyc3RhdHVzKSwKKwkJCSZvaGNpLT5yZWdzLT5pbnRyc3RhdHVzKTsKKworCS8qIFRoZW4gcmUtZW5hYmxlIG9wZXJhdGlvbnMgKi8KKwlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9VU0JfT1BFUiwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCSh2b2lkKSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJbXNsZWVwICgzKTsKKworCXRlbXAgPSBPSENJX0NPTlRST0xfSU5JVCB8IE9IQ0lfVVNCX09QRVI7CisJaWYgKGhjZC0+Y2FuX3dha2V1cCkKKwkJdGVtcCB8PSBPSENJX0NUUkxfUldDOworCW9oY2ktPmhjX2NvbnRyb2wgPSB0ZW1wOworCW9oY2lfd3JpdGVsIChvaGNpLCB0ZW1wLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJKHZvaWQpIG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKworCS8qIFRSU01SQ1kgKi8KKwltc2xlZXAgKDEwKTsKKworCS8qIGtlZXAgaXQgYWxpdmUgZm9yIH41eCBzdXNwZW5kICsgcmVzdW1lIGNvc3RzICovCisJb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzICgyNTApOworCisJLyogbWF5YmUgdHVybiBzY2hlZHVsZXMgYmFjayBvbiAqLworCWVuYWJsZXMgPSAwOworCXRlbXAgPSAwOworCWlmICghb2hjaS0+ZWRfcm1fbGlzdCkgeworCQlpZiAob2hjaS0+ZWRfY29udHJvbHRhaWwpIHsKKwkJCW9oY2lfd3JpdGVsIChvaGNpLAorCQkJCQlmaW5kX2hlYWQgKG9oY2ktPmVkX2NvbnRyb2x0YWlsKS0+ZG1hLAorCQkJCQkmb2hjaS0+cmVncy0+ZWRfY29udHJvbGhlYWQpOworCQkJZW5hYmxlcyB8PSBPSENJX0NUUkxfQ0xFOworCQkJdGVtcCB8PSBPSENJX0NMRjsKKwkJfQorCQlpZiAob2hjaS0+ZWRfYnVsa3RhaWwpIHsKKwkJCW9oY2lfd3JpdGVsIChvaGNpLCBmaW5kX2hlYWQgKG9oY2ktPmVkX2J1bGt0YWlsKS0+ZG1hLAorCQkJCSZvaGNpLT5yZWdzLT5lZF9idWxraGVhZCk7CisJCQllbmFibGVzIHw9IE9IQ0lfQ1RSTF9CTEU7CisJCQl0ZW1wIHw9IE9IQ0lfQkxGOworCQl9CisJfQorCWlmIChoY2QtPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcyB8fCBoY2QtPnNlbGYuYmFuZHdpZHRoX2ludF9yZXFzKQorCQllbmFibGVzIHw9IE9IQ0lfQ1RSTF9QTEV8T0hDSV9DVFJMX0lFOworCWlmIChlbmFibGVzKSB7CisJCW9oY2lfZGJnIChvaGNpLCAicmVzdGFydGluZyBzY2hlZHVsZXMgLi4uICUwOHhcbiIsIGVuYWJsZXMpOworCQlvaGNpLT5oY19jb250cm9sIHw9IGVuYWJsZXM7CisJCW9oY2lfd3JpdGVsIChvaGNpLCBvaGNpLT5oY19jb250cm9sLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJCWlmICh0ZW1wKQorCQkJb2hjaV93cml0ZWwgKG9oY2ksIHRlbXAsICZvaGNpLT5yZWdzLT5jbWRzdGF0dXMpOworCQkodm9pZCkgb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCX0KKworCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvaGNpX3JoX3Jlc3VtZSAodm9pZCAqX2hjZCkKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkID0gX2hjZDsKKworCXVzYl9sb2NrX2RldmljZSAoaGNkLT5zZWxmLnJvb3RfaHViKTsKKwkodm9pZCkgb2hjaV9odWJfcmVzdW1lIChoY2QpOworCXVzYl91bmxvY2tfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIpOworfQorCisjZWxzZQorCitzdGF0aWMgdm9pZCBvaGNpX3JoX3Jlc3VtZSAodm9pZCAqX2hjZCkKK3sKKwlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaSAoX2hjZCk7CisJb2hjaV9kYmcob2hjaSwgInJoX3Jlc3VtZSA/P1xuIik7Cit9CisKKyNlbmRpZgkvKiBDT05GSUdfVVNCX1NVU1BFTkQgfHwgQ09ORklHX1BNICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGJ1aWxkICJzdGF0dXMgY2hhbmdlIiBwYWNrZXQgKG9uZSBvciB0d28gYnl0ZXMpIGZyb20gSEMgcmVnaXN0ZXJzICovCisKK3N0YXRpYyBpbnQKK29oY2lfaHViX3N0YXR1c19kYXRhIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CisJaW50CQlwb3J0cywgaSwgY2hhbmdlZCA9IDAsIGxlbmd0aCA9IDE7CisJaW50CQljYW5fc3VzcGVuZCA9IGhjZC0+Y2FuX3dha2V1cDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CisKKwkvKiBoYW5kbGUgYXV0b3N1c3BlbmRlZCByb290OiAgZmluaXNoIHJlc3VtaW5nIGJlZm9yZQorCSAqIGxldHRpbmcga2h1YmQgb3Igcm9vdCBodWIgdGltZXIgc2VlIHN0YXRlIGNoYW5nZXMuCisJICovCisJaWYgKChvaGNpLT5oY19jb250cm9sICYgT0hDSV9DVFJMX0hDRlMpICE9IE9IQ0lfVVNCX09QRVIKKwkJCXx8ICFIQ19JU19SVU5OSU5HKGhjZC0+c3RhdGUpKSB7CisJCWNhbl9zdXNwZW5kID0gMDsKKwkJZ290byBkb25lOworCX0KKworCXBvcnRzID0gcm9vdGh1Yl9hIChvaGNpKSAmIFJIX0FfTkRQOyAKKwlpZiAocG9ydHMgPiBNQVhfUk9PVF9QT1JUUykgeworCQlvaGNpX2VyciAob2hjaSwgImJvZ3VzIE5EUD0lZCwgcmVyZWFkcyBhcyBORFA9JWRcbiIsIHBvcnRzLAorCQkJICBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+cm9vdGh1Yi5hKSAmIFJIX0FfTkRQKTsKKwkJLyogcmV0cnkgbGF0ZXI7ICJzaG91bGQgbm90IGhhcHBlbiIgKi8KKwkJZ290byBkb25lOworCX0KKworCS8qIGluaXQgc3RhdHVzICovCisJaWYgKHJvb3RodWJfc3RhdHVzIChvaGNpKSAmIChSSF9IU19MUFNDIHwgUkhfSFNfT0NJQykpCisJCWJ1ZiBbMF0gPSBjaGFuZ2VkID0gMTsKKwllbHNlCisJCWJ1ZiBbMF0gPSAwOworCWlmIChwb3J0cyA+IDcpIHsKKwkJYnVmIFsxXSA9IDA7CisJCWxlbmd0aCsrOworCX0KKworCS8qIGxvb2sgYXQgZWFjaCBwb3J0ICovCisJZm9yIChpID0gMDsgaSA8IHBvcnRzOyBpKyspIHsKKwkJdTMyCXN0YXR1cyA9IHJvb3RodWJfcG9ydHN0YXR1cyAob2hjaSwgaSk7CisKKwkJaWYgKHN0YXR1cyAmIChSSF9QU19DU0MgfCBSSF9QU19QRVNDIHwgUkhfUFNfUFNTQworCQkJCXwgUkhfUFNfT0NJQyB8IFJIX1BTX1BSU0MpKSB7CisJCQljaGFuZ2VkID0gMTsKKwkJCWlmIChpIDwgNykKKwkJCSAgICBidWYgWzBdIHw9IDEgPDwgKGkgKyAxKTsKKwkJCWVsc2UKKwkJCSAgICBidWYgWzFdIHw9IDEgPDwgKGkgLSA3KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogY2FuIHN1c3BlbmQgaWYgbm8gcG9ydHMgYXJlIGVuYWJsZWQ7IG9yIGlmIGFsbCBhbGwKKwkJICogZW5hYmxlZCBwb3J0cyBhcmUgc3VzcGVuZGVkIEFORCByZW1vdGUgd2FrZXVwIGlzIG9uLgorCQkgKi8KKwkJaWYgKCEoc3RhdHVzICYgUkhfUFNfQ0NTKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoKHN0YXR1cyAmIFJIX1BTX1BTUykgJiYgaGNkLT5yZW1vdGVfd2FrZXVwKQorCQkJY29udGludWU7CisJCWNhbl9zdXNwZW5kID0gMDsKKwl9Citkb25lOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CisKKyNpZmRlZiBDT05GSUdfUE0KKwkvKiBzYXZlIHBvd2VyIGJ5IHN1c3BlbmRpbmcgaWRsZSByb290IGh1YnM7CisJICogSU5UUl9SRCB3YWtlcyB1cyB3aGVuIHRoZXJlJ3Mgd29yaworCSAqIE5PVEU6IGlmIHdlIGNhbiBkbyB0aGlzLCB3ZSBkb24ndCBuZWVkIGEgcm9vdCBodWIgdGltZXIhCisJICovCisJaWYgKGNhbl9zdXNwZW5kCisJCQkmJiAhY2hhbmdlZAorCQkJJiYgIW9oY2ktPmVkX3JtX2xpc3QKKwkJCSYmICgoT0hDSV9DVFJMX0hDRlMgfCBPSENJX1NDSEVEX0VOQUJMRVMpCisJCQkJCSYgb2hjaS0+aGNfY29udHJvbCkKKwkJCQk9PSBPSENJX1VTQl9PUEVSCisJCQkmJiB0aW1lX2FmdGVyIChqaWZmaWVzLCBvaGNpLT5uZXh0X3N0YXRlY2hhbmdlKQorCQkJJiYgdXNiX3RyeWxvY2tfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIpCisJCQkpIHsKKwkJb2hjaV92ZGJnIChvaGNpLCAiYXV0b3N1c3BlbmRcbiIpOworCQkodm9pZCkgb2hjaV9odWJfc3VzcGVuZCAoaGNkKTsKKwkJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisJCXVzYl91bmxvY2tfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIpOworCX0KKyNlbmRpZgorCisJcmV0dXJuIGNoYW5nZWQgPyBsZW5ndGggOiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZAorb2hjaV9odWJfZGVzY3JpcHRvciAoCisJc3RydWN0IG9oY2lfaGNkCQkJKm9oY2ksCisJc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvcgkqZGVzYworKSB7CisJdTMyCQlyaCA9IHJvb3RodWJfYSAob2hjaSk7CisJaW50CQlwb3J0cyA9IHJoICYgUkhfQV9ORFA7IAorCXUxNgkJdGVtcDsKKworCWRlc2MtPmJEZXNjcmlwdG9yVHlwZSA9IDB4Mjk7CisJZGVzYy0+YlB3ck9uMlB3ckdvb2QgPSAocmggJiBSSF9BX1BPVFBHVCkgPj4gMjQ7CisJZGVzYy0+Ykh1YkNvbnRyQ3VycmVudCA9IDA7CisKKwlkZXNjLT5iTmJyUG9ydHMgPSBwb3J0czsKKwl0ZW1wID0gMSArIChwb3J0cyAvIDgpOworCWRlc2MtPmJEZXNjTGVuZ3RoID0gNyArIDIgKiB0ZW1wOworCisJdGVtcCA9IDA7CisJaWYgKHJoICYgUkhfQV9OUFMpCQkvKiBubyBwb3dlciBzd2l0Y2hpbmc/ICovCisJICAgIHRlbXAgfD0gMHgwMDAyOworCWlmIChyaCAmIFJIX0FfUFNNKSAJCS8qIHBlci1wb3J0IHBvd2VyIHN3aXRjaGluZz8gKi8KKwkgICAgdGVtcCB8PSAweDAwMDE7CisJaWYgKHJoICYgUkhfQV9OT0NQKQkJLyogbm8gb3ZlcmN1cnJlbnQgcmVwb3J0aW5nPyAqLworCSAgICB0ZW1wIHw9IDB4MDAxMDsKKwllbHNlIGlmIChyaCAmIFJIX0FfT0NQTSkJLyogcGVyLXBvcnQgb3ZlcmN1cnJlbnQgcmVwb3J0aW5nPyAqLworCSAgICB0ZW1wIHw9IDB4MDAwODsKKwlkZXNjLT53SHViQ2hhcmFjdGVyaXN0aWNzID0gKF9fZm9yY2UgX191MTYpY3B1X3RvX2hjMTYob2hjaSwgdGVtcCk7CisKKwkvKiB0d28gYml0bWFwczogIHBvcnRzIHJlbW92YWJsZSwgYW5kIHVzYiAxLjAgbGVnYWN5IFBvcnRQd3JDdHJsTWFzayAqLworCXJoID0gcm9vdGh1Yl9iIChvaGNpKTsKKwlkZXNjLT5iaXRtYXAgWzBdID0gcmggJiBSSF9CX0RSOworCWlmIChwb3J0cyA+IDcpIHsKKwkJZGVzYy0+Yml0bWFwIFsxXSA9IChyaCAmIFJIX0JfRFIpID4+IDg7CisJCWRlc2MtPmJpdG1hcCBbMl0gPSBkZXNjLT5iaXRtYXAgWzNdID0gMHhmZjsKKwl9IGVsc2UKKwkJZGVzYy0+Yml0bWFwIFsxXSA9IDB4ZmY7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZglDT05GSUdfVVNCX09URworCitzdGF0aWMgaW50IG9oY2lfc3RhcnRfcG9ydF9yZXNldCAoc3RydWN0IHVzYl9oY2QgKmhjZCwgdW5zaWduZWQgcG9ydCkKK3sKKwlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKwl1MzIJCQlzdGF0dXM7CisKKwlpZiAoIXBvcnQpCisJCXJldHVybiAtRUlOVkFMOworCXBvcnQtLTsKKworCS8qIHN0YXJ0IHBvcnQgcmVzZXQgYmVmb3JlIEhOUCBwcm90b2NvbCB0aW1lcyBvdXQgKi8KKwlzdGF0dXMgPSBvaGNpX3JlYWRsKG9oY2ksICZvaGNpLT5yZWdzLT5yb290aHViLnBvcnRzdGF0dXMgW3BvcnRdKTsKKwlpZiAoIShzdGF0dXMgJiBSSF9QU19DQ1MpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGtodWJkIHdpbGwgZmluaXNoIHRoZSByZXNldCBsYXRlciAqLworCW9oY2lfd3JpdGVsKG9oY2ksIFJIX1BTX1BSUywgJm9oY2ktPnJlZ3MtPnJvb3RodWIucG9ydHN0YXR1cyBbcG9ydF0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdGFydF9obnAoc3RydWN0IG9oY2lfaGNkICpvaGNpKTsKKworI2Vsc2UKKworI2RlZmluZQlvaGNpX3N0YXJ0X3BvcnRfcmVzZXQJCU5VTEwKKworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworLyogU2VlIHVzYiA3LjEuNy41OiAgcm9vdCBodWJzIG11c3QgaXNzdWUgYXQgbGVhc3QgNTAgbXNlYyByZXNldCBzaWduYWxpbmcsCisgKiBub3QgbmVjZXNzYXJpbHkgY29udGludW91cyAuLi4gdG8gZ3VhcmQgYWdhaW5zdCByZXN1bWUgc2lnbmFsaW5nLgorICogVGhlIHNob3J0IHRpbWVvdXQgaXMgc2FmZSBmb3Igbm9uLXJvb3QgaHVicywgYW5kIGlzIGJhY2t3YXJkLWNvbXBhdGlibGUKKyAqIHdpdGggZWFybGllciBMaW51eCBob3N0cy4KKyAqLworI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAorI2RlZmluZQlQT1JUX1JFU0VUX01TRUMJCTUwCisjZWxzZQorI2RlZmluZQlQT1JUX1JFU0VUX01TRUMJCTEwCisjZW5kaWYKKworLyogdGhpcyB0aW1lciB2YWx1ZSBtaWdodCBiZSB2ZW5kb3Itc3BlY2lmaWMgLi4uICovCisjZGVmaW5lCVBPUlRfUkVTRVRfSFdfTVNFQwkxMAorCisvKiB3cmFwLWF3YXJlIGxvZ2ljIG1vcnBoZWQgZnJvbSA8bGludXgvamlmZmllcy5oPiAqLworI2RlZmluZSB0aWNrX2JlZm9yZSh0MSx0MikgKChzMTYpKCgoczE2KSh0MSkpLSgoczE2KSh0MikpKSA8IDApCisKKy8qIGNhbGxlZCBmcm9tIHNvbWUgdGFzaywgbm9ybWFsbHkga2h1YmQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByb290X3BvcnRfcmVzZXQgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgdW5zaWduZWQgcG9ydCkKK3sKKwlfX2hjMzIgX19pb21lbSAqcG9ydHN0YXQgPSAmb2hjaS0+cmVncy0+cm9vdGh1Yi5wb3J0c3RhdHVzIFtwb3J0XTsKKwl1MzIJdGVtcDsKKwl1MTYJbm93ID0gb2hjaV9yZWFkbChvaGNpLCAmb2hjaS0+cmVncy0+Zm1udW1iZXIpOworCXUxNglyZXNldF9kb25lID0gbm93ICsgUE9SVF9SRVNFVF9NU0VDOworCisJLyogYnVpbGQgYSAiY29udGludW91cyBlbm91Z2giIHJlc2V0IHNpZ25hbCwgd2l0aCB1cCB0bworCSAqIDNtc2VjIGdhcCBiZXR3ZWVuIHB1bHNlcy4gIHNjaGVkdWxlciBIWj09MTAwIG11c3Qgd29yazsKKwkgKiB0aGlzIG1pZ2h0IG5lZWQgdG8gYmUgZGVhZGxpbmUtc2NoZWR1bGVkLgorCSAqLworCWRvIHsKKwkJLyogc3BpbiB1bnRpbCBhbnkgY3VycmVudCByZXNldCBmaW5pc2hlcyAqLworCQlmb3IgKDs7KSB7CisJCQl0ZW1wID0gb2hjaV9yZWFkbCAob2hjaSwgcG9ydHN0YXQpOworCQkJaWYgKCEodGVtcCAmIFJIX1BTX1BSUykpCisJCQkJYnJlYWs7CisJCQl1ZGVsYXkgKDUwMCk7CisJCX0gCisKKwkJaWYgKCEodGVtcCAmIFJIX1BTX0NDUykpCisJCQlicmVhazsKKwkJaWYgKHRlbXAgJiBSSF9QU19QUlNDKQorCQkJb2hjaV93cml0ZWwgKG9oY2ksIFJIX1BTX1BSU0MsIHBvcnRzdGF0KTsKKworCQkvKiBzdGFydCB0aGUgbmV4dCByZXNldCwgc2xlZXAgdGlsbCBpdCdzIHByb2JhYmx5IGRvbmUgKi8KKwkJb2hjaV93cml0ZWwgKG9oY2ksIFJIX1BTX1BSUywgcG9ydHN0YXQpOworCQltc2xlZXAoUE9SVF9SRVNFVF9IV19NU0VDKTsKKwkJbm93ID0gb2hjaV9yZWFkbChvaGNpLCAmb2hjaS0+cmVncy0+Zm1udW1iZXIpOworCX0gd2hpbGUgKHRpY2tfYmVmb3JlKG5vdywgcmVzZXRfZG9uZSkpOworCS8qIGNhbGxlciBzeW5jaHJvbml6ZXMgdXNpbmcgUFJTQyAqLworfQorCitzdGF0aWMgaW50IG9oY2lfaHViX2NvbnRyb2wgKAorCXN0cnVjdCB1c2JfaGNkCSpoY2QsCisJdTE2CQl0eXBlUmVxLAorCXUxNgkJd1ZhbHVlLAorCXUxNgkJd0luZGV4LAorCWNoYXIJCSpidWYsCisJdTE2CQl3TGVuZ3RoCispIHsKKwlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKwlpbnQJCXBvcnRzID0gaGNkX3RvX2J1cyAoaGNkKS0+cm9vdF9odWItPm1heGNoaWxkOworCXUzMgkJdGVtcDsKKwlpbnQJCXJldHZhbCA9IDA7CisKKwlzd2l0Y2ggKHR5cGVSZXEpIHsKKwljYXNlIENsZWFySHViRmVhdHVyZToKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBDX0hVQl9PVkVSX0NVUlJFTlQ6CisJCQlvaGNpX3dyaXRlbCAob2hjaSwgUkhfSFNfT0NJQywKKwkJCQkJJm9oY2ktPnJlZ3MtPnJvb3RodWIuc3RhdHVzKTsKKwkJY2FzZSBDX0hVQl9MT0NBTF9QT1dFUjoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBlcnJvcjsKKwkJfQorCQlicmVhazsKKwljYXNlIENsZWFyUG9ydEZlYXR1cmU6CisJCWlmICghd0luZGV4IHx8IHdJbmRleCA+IHBvcnRzKQorCQkJZ290byBlcnJvcjsKKwkJd0luZGV4LS07CisKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0VOQUJMRToKKwkJCXRlbXAgPSBSSF9QU19DQ1M7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfRU5BQkxFOgorCQkJdGVtcCA9IFJIX1BTX1BFU0M7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CisJCQl0ZW1wID0gUkhfUFNfUE9DSTsKKwkJCWlmICgob2hjaS0+aGNfY29udHJvbCAmIE9IQ0lfQ1RSTF9IQ0ZTKQorCQkJCQkhPSBPSENJX1VTQl9PUEVSKQorCQkJCXNjaGVkdWxlX3dvcmsgKCZvaGNpLT5yaF9yZXN1bWUpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQ6CisJCQl0ZW1wID0gUkhfUFNfUFNTQzsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfUE9XRVI6CisJCQl0ZW1wID0gUkhfUFNfTFNEQTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OOgorCQkJdGVtcCA9IFJIX1BTX0NTQzsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19PVkVSX0NVUlJFTlQ6CisJCQl0ZW1wID0gUkhfUFNfT0NJQzsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19SRVNFVDoKKwkJCXRlbXAgPSBSSF9QU19QUlNDOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCQl9CisJCW9oY2lfd3JpdGVsIChvaGNpLCB0ZW1wLAorCQkJCSZvaGNpLT5yZWdzLT5yb290aHViLnBvcnRzdGF0dXMgW3dJbmRleF0pOworCQkvLyBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+cm9vdGh1Yi5wb3J0c3RhdHVzIFt3SW5kZXhdKTsKKwkJYnJlYWs7CisJY2FzZSBHZXRIdWJEZXNjcmlwdG9yOgorCQlvaGNpX2h1Yl9kZXNjcmlwdG9yIChvaGNpLCAoc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqKSBidWYpOworCQlicmVhazsKKwljYXNlIEdldEh1YlN0YXR1czoKKwkJdGVtcCA9IHJvb3RodWJfc3RhdHVzIChvaGNpKSAmIH4oUkhfSFNfQ1JXRSB8IFJIX0hTX0RSV0UpOworCQkqKF9fbGUzMiAqKSBidWYgPSBjcHVfdG9fbGUzMiAodGVtcCk7CisJCWJyZWFrOworCWNhc2UgR2V0UG9ydFN0YXR1czoKKwkJaWYgKCF3SW5kZXggfHwgd0luZGV4ID4gcG9ydHMpCisJCQlnb3RvIGVycm9yOworCQl3SW5kZXgtLTsKKwkJdGVtcCA9IHJvb3RodWJfcG9ydHN0YXR1cyAob2hjaSwgd0luZGV4KTsKKwkJKihfX2xlMzIgKikgYnVmID0gY3B1X3RvX2xlMzIgKHRlbXApOworCisjaWZuZGVmCU9IQ0lfVkVSQk9TRV9ERUJVRworCWlmICgqKHUxNiopKGJ1ZisyKSkJLyogb25seSBpZiB3UG9ydENoYW5nZSBpcyBpbnRlcmVzdGluZyAqLworI2VuZGlmCisJCWRiZ19wb3J0IChvaGNpLCAiR2V0U3RhdHVzIiwgd0luZGV4LCB0ZW1wKTsKKwkJYnJlYWs7CisJY2FzZSBTZXRIdWJGZWF0dXJlOgorCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIENfSFVCX09WRVJfQ1VSUkVOVDoKKwkJCS8vIEZJWE1FOiAgdGhpcyBjYW4gYmUgY2xlYXJlZCwgeWVzPworCQljYXNlIENfSFVCX0xPQ0FMX1BPV0VSOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCQl9CisJCWJyZWFrOworCWNhc2UgU2V0UG9ydEZlYXR1cmU6CisJCWlmICghd0luZGV4IHx8IHdJbmRleCA+IHBvcnRzKQorCQkJZ290byBlcnJvcjsKKwkJd0luZGV4LS07CisJCXN3aXRjaCAod1ZhbHVlKSB7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9TVVNQRU5EOgorI2lmZGVmCUNPTkZJR19VU0JfT1RHCisJCQlpZiAoaGNkLT5zZWxmLm90Z19wb3J0ID09ICh3SW5kZXggKyAxKQorCQkJCQkmJiBoY2QtPnNlbGYuYl9obnBfZW5hYmxlKQorCQkJCXN0YXJ0X2hucChvaGNpKTsKKwkJCWVsc2UKKyNlbmRpZgorCQkJb2hjaV93cml0ZWwgKG9oY2ksIFJIX1BTX1BTUywKKwkJCQkmb2hjaS0+cmVncy0+cm9vdGh1Yi5wb3J0c3RhdHVzIFt3SW5kZXhdKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfUE9XRVI6CisJCQlvaGNpX3dyaXRlbCAob2hjaSwgUkhfUFNfUFBTLAorCQkJCSZvaGNpLT5yZWdzLT5yb290aHViLnBvcnRzdGF0dXMgW3dJbmRleF0pOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9SRVNFVDoKKwkJCXJvb3RfcG9ydF9yZXNldCAob2hjaSwgd0luZGV4KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBlcnJvcjsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CitlcnJvcjoKKwkJLyogInByb3RvY29sIHN0YWxsIiBvbiBlcnJvciAqLworCQlyZXR2YWwgPSAtRVBJUEU7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1saDdhNDA0LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNzYyMGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jCkBAIC0wLDAgKzEsMjY2IEBACisvKgorICogT0hDSSBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCisgKgorICogKEMpIENvcHlyaWdodCAxOTk5IFJvbWFuIFdlaXNzZ2FlcmJlciA8d2Vpc3NnQHZpZW5uYS5hdD4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAyIERhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogKEMpIENvcHlyaWdodCAyMDAyIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogQnVzIEdsdWUgZm9yIFNoYXJwIExIN0E0MDQKKyAqCisgKiBXcml0dGVuIGJ5IENocmlzdG9waGVyIEhvb3ZlciA8Y2hAaHBsLmhwLmNvbT4KKyAqIEJhc2VkIG9uIGZyYWdtZW50cyBvZiBwcmV2aW91cyBkcml2ZXIgYnkgUnVzZWxsIEtpbmcgZXQgYWwuCisgKgorICogTW9kaWZpZWQgZm9yIExIN0E0MDQgZnJvbSBvaGNpLXNhMTExMS5jCisgKiAgYnkgRHVyZ2VzaCBQYXR0YW1hdHRhIDxwYXR0YW1hdHRhZEBzaGFycHNlYy5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKworCitleHRlcm4gaW50IHVzYl9kaXNhYmxlZCh2b2lkKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgbGg3YTQwNF9zdGFydF9oYyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18KKwkgICAgICAgIjogc3RhcnRpbmcgTEg3QTQwNCBPSENJIFVTQiBDb250cm9sbGVyXG4iKTsKKworCS8qCisJICogTm93LCBjYXJlZnVsbHkgZW5hYmxlIHRoZSBVU0IgY2xvY2ssIGFuZCB0YWtlCisJICogdGhlIFVTQiBob3N0IGNvbnRyb2xsZXIgb3V0IG9mIHJlc2V0LgorCSAqLworCUNTQ19QV1JDTlQgfD0gQ1NDX1BXUkNOVF9VU0JIX0VOOyAvKiBFbmFibGUgY2xvY2sgKi8KKwl1ZGVsYXkoMTAwMCk7CisJVVNCSF9DTURTVEFUVVMgPSBPSENJX0hDUjsKKwkKKwlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXworCQkgICAiOiBDbG9jayB0byBVU0IgaG9zdCBoYXMgYmVlbiBlbmFibGVkIFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGxoN2E0MDRfc3RvcF9oYyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18KKwkgICAgICAgIjogc3RvcHBpbmcgTEg3QTQwNCBPSENJIFVTQiBDb250cm9sbGVyXG4iKTsKKworCUNTQ19QV1JDTlQgJj0gfkNTQ19QV1JDTlRfVVNCSF9FTjsgLyogRGlzYWJsZSBjbG9jayAqLworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGNvbmZpZ3VyZSBzbyBhbiBIQyBkZXZpY2UgYW5kIGlkIGFyZSBhbHdheXMgcHJvdmlkZWQgKi8KKy8qIGFsd2F5cyBjYWxsZWQgd2l0aCBwcm9jZXNzIGNvbnRleHQ7IHNsZWVwaW5nIGlzIE9LICovCisKKworLyoqCisgKiB1c2JfaGNkX2xoN2E0MDRfcHJvYmUgLSBpbml0aWFsaXplIExIN0E0MDQtYmFzZWQgSENEcworICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogQWxsb2NhdGVzIGJhc2ljIHJlc291cmNlcyBmb3IgdGhpcyBVU0IgaG9zdCBjb250cm9sbGVyLCBhbmQKKyAqIHRoZW4gaW52b2tlcyB0aGUgc3RhcnQoKSBtZXRob2QgZm9yIHRoZSBIQ0QgYXNzb2NpYXRlZCB3aXRoIGl0CisgKiB0aHJvdWdoIHRoZSBob3RwbHVnIGVudHJ5J3MgZHJpdmVyX2RhdGEuCisgKgorICovCitpbnQgdXNiX2hjZF9saDdhNDA0X3Byb2JlIChjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyICpkcml2ZXIsCisJCQkgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisKKwlpZiAoZGV2LT5yZXNvdXJjZVsxXS5mbGFncyAhPSBJT1JFU09VUkNFX0lSUSkgeworCQlwcl9kZWJ1ZygicmVzb3VyY2VbMV0gaXMgbm90IElPUkVTT1VSQ0VfSVJRIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWhjZCA9IHVzYl9jcmVhdGVfaGNkKGRyaXZlciwgJmRldi0+ZGV2LCAibGg3YTQwNCIpOworCWlmICghaGNkKQorCQlyZXR1cm4gLUVOT01FTTsKKwloY2QtPnJzcmNfc3RhcnQgPSBkZXYtPnJlc291cmNlWzBdLnN0YXJ0OworCWhjZC0+cnNyY19sZW4gPSBkZXYtPnJlc291cmNlWzBdLmVuZCAtIGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLCBoY2RfbmFtZSkpIHsKKwkJcHJfZGVidWcoInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWQiKTsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlnb3RvIGVycjE7CisJfQorCQorCWhjZC0+cmVncyA9IGlvcmVtYXAoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwlpZiAoIWhjZC0+cmVncykgeworCQlwcl9kZWJ1ZygiaW9yZW1hcCBmYWlsZWQiKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnIyOworCX0KKworCWxoN2E0MDRfc3RhcnRfaGMoZGV2KTsKKwlvaGNpX2hjZF9pbml0KGhjZF90b19vaGNpKGhjZCkpOworCisJcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBTQV9JTlRFUlJVUFQpOworCWlmIChyZXR2YWwgPT0gMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWxoN2E0MDRfc3RvcF9oYyhkZXYpOworCWlvdW5tYXAoaGNkLT5yZWdzKTsKKyBlcnIyOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworIGVycjE6CisJdXNiX3B1dF9oY2QoaGNkKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qIG1heSBiZSBjYWxsZWQgd2l0aG91dCBjb250cm9sbGVyIGVsZWN0cmljYWxseSBwcmVzZW50ICovCisvKiBtYXkgYmUgY2FsbGVkIHdpdGggY29udHJvbGxlciwgYnVzLCBhbmQgZGV2aWNlcyBhY3RpdmUgKi8KKworLyoqCisgKiB1c2JfaGNkX2xoN2E0MDRfcmVtb3ZlIC0gc2h1dGRvd24gcHJvY2Vzc2luZyBmb3IgTEg3QTQwNC1iYXNlZCBIQ0RzCisgKiBAZGV2OiBVU0IgSG9zdCBDb250cm9sbGVyIGJlaW5nIHJlbW92ZWQKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIFJldmVyc2VzIHRoZSBlZmZlY3Qgb2YgdXNiX2hjZF9saDdhNDA0X3Byb2JlKCksIGZpcnN0IGludm9raW5nCisgKiB0aGUgSENEJ3Mgc3RvcCgpIG1ldGhvZC4gIEl0IGlzIGFsd2F5cyBjYWxsZWQgZnJvbSBhIHRocmVhZAorICogY29udGV4dCwgbm9ybWFsbHkgInJtbW9kIiwgImFwbWQiLCBvciBzb21ldGhpbmcgc2ltaWxhci4KKyAqCisgKi8KK3ZvaWQgdXNiX2hjZF9saDdhNDA0X3JlbW92ZSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisJbGg3YTQwNF9zdG9wX2hjKGRldik7CisJaW91bm1hcChoY2QtPnJlZ3MpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCXVzYl9wdXRfaGNkKGhjZCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitvaGNpX2xoN2E0MDRfc3RhcnQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CisJaW50CQlyZXQ7CisKKwlvaGNpX2RiZyAob2hjaSwgIm9oY2lfbGg3YTQwNF9zdGFydCwgb2hjaTolcCIsIG9oY2kpOworCWlmICgocmV0ID0gb2hjaV9pbml0KG9oY2kpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoKHJldCA9IG9oY2lfcnVuIChvaGNpKSkgPCAwKSB7CisJCWVyciAoImNhbid0IHN0YXJ0ICVzIiwgaGNkLT5zZWxmLmJ1c19uYW1lKTsKKwkJb2hjaV9zdG9wIChoY2QpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgb2hjaV9saDdhNDA0X2hjX2RyaXZlciA9IHsKKwkuZGVzY3JpcHRpb24gPQkJaGNkX25hbWUsCisJLnByb2R1Y3RfZGVzYyA9CQkiTEg3QTQwNCBPSENJIiwKKwkuaGNkX3ByaXZfc2l6ZSA9CXNpemVvZihzdHJ1Y3Qgb2hjaV9oY2QpLAorCisJLyoKKwkgKiBnZW5lcmljIGhhcmR3YXJlIGxpbmthZ2UKKwkgKi8KKwkuaXJxID0JCQlvaGNpX2lycSwKKwkuZmxhZ3MgPQkJSENEX1VTQjExIHwgSENEX01FTU9SWSwKKworCS8qCisJICogYmFzaWMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMKKwkgKi8KKwkuc3RhcnQgPQkJb2hjaV9saDdhNDA0X3N0YXJ0LAorI2lmZGVmCUNPTkZJR19QTQorCS8qIHN1c3BlbmQ6CQlvaGNpX2xoN2E0MDRfc3VzcGVuZCwgIC0tIHRiZCAqLworCS8qIHJlc3VtZToJCW9oY2lfbGg3YTQwNF9yZXN1bWUsICAgLS0gdGJkICovCisjZW5kaWYgLypDT05GSUdfUE0qLworCS5zdG9wID0JCQlvaGNpX3N0b3AsCisKKwkvKgorCSAqIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzCisJICovCisJLnVyYl9lbnF1ZXVlID0JCW9oY2lfdXJiX2VucXVldWUsCisJLnVyYl9kZXF1ZXVlID0JCW9oY2lfdXJiX2RlcXVldWUsCisJLmVuZHBvaW50X2Rpc2FibGUgPQlvaGNpX2VuZHBvaW50X2Rpc2FibGUsCisKKwkvKgorCSAqIHNjaGVkdWxpbmcgc3VwcG9ydAorCSAqLworCS5nZXRfZnJhbWVfbnVtYmVyID0Jb2hjaV9nZXRfZnJhbWUsCisKKwkvKgorCSAqIHJvb3QgaHViIHN1cHBvcnQKKwkgKi8KKwkuaHViX3N0YXR1c19kYXRhID0Jb2hjaV9odWJfc3RhdHVzX2RhdGEsCisJLmh1Yl9jb250cm9sID0JCW9oY2lfaHViX2NvbnRyb2wsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJaW50IHJldDsKKworCXByX2RlYnVnICgiSW4gb2hjaV9oY2RfbGg3YTQwNF9kcnZfcHJvYmUiKTsKKworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSB1c2JfaGNkX2xoN2E0MDRfcHJvYmUoJm9oY2lfbGg3YTQwNF9oY19kcml2ZXIsIHBkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9oY2RfbGg3YTQwNF9kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJdXNiX2hjZF9saDdhNDA0X3JlbW92ZShoY2QsIHBkZXYpOworCXJldHVybiAwOworfQorCS8qVEJEKi8KKy8qc3RhdGljIGludCBvaGNpX2hjZF9saDdhNDA0X2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCisJcmV0dXJuIDA7Cit9CisqLworCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgb2hjaV9oY2RfbGg3YTQwNF9kcml2ZXIgPSB7CisJLm5hbWUJCT0gImxoN2E0MDQtb2hjaSIsCisJLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCisJLnByb2JlCQk9IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Byb2JlLAorCS5yZW1vdmUJCT0gb2hjaV9oY2RfbGg3YTQwNF9kcnZfcmVtb3ZlLAorCS8qLnN1c3BlbmQJPSBvaGNpX2hjZF9saDdhNDA0X2Rydl9zdXNwZW5kLCAqLworCS8qLnJlc3VtZQk9IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Jlc3VtZSwgKi8KK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9oY2lfaGNkX2xoN2E0MDRfaW5pdCAodm9pZCkKK3sKKwlwcl9kZWJ1ZyAoRFJJVkVSX0lORk8gIiAoTEg3QTQwNCkiKTsKKwlwcl9kZWJ1ZyAoImJsb2NrIHNpemVzOiBlZCAlZCB0ZCAlZFxuIiwKKwkJc2l6ZW9mIChzdHJ1Y3QgZWQpLCBzaXplb2YgKHN0cnVjdCB0ZCkpOworCisJcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfbGg3YTQwNF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb2hjaV9oY2RfbGg3YTQwNF9jbGVhbnVwICh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX2hjZF9saDdhNDA0X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0IChvaGNpX2hjZF9saDdhNDA0X2luaXQpOworbW9kdWxlX2V4aXQgKG9oY2lfaGNkX2xoN2E0MDRfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbWVtLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU1NjgyYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1tZW0uYwpAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIE9IQ0kgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLgorICogCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PgorICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDIgRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKiAKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMLgorICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBUaGVyZSdzIGJhc2ljYWxseSB0aHJlZSB0eXBlcyBvZiBtZW1vcnk6CisgKgktIGRhdGEgdXNlZCBvbmx5IGJ5IHRoZSBIQ0QgLi4uIGttYWxsb2MgaXMgZmluZQorICoJLSBhc3luYyBhbmQgcGVyaW9kaWMgc2NoZWR1bGVzLCBzaGFyZWQgYnkgSEMgYW5kIEhDRCAuLi4gdGhlc2UKKyAqCSAgbmVlZCB0byB1c2UgZG1hX3Bvb2wgb3IgZG1hX2FsbG9jX2NvaGVyZW50CisgKgktIGRyaXZlciBidWZmZXJzLCByZWFkL3dyaXR0ZW4gYnkgSEMgLi4uIHRoZSBoY2QgZ2x1ZSBvciB0aGUKKyAqCSAgZGV2aWNlIGRyaXZlciBwcm92aWRlcyB1cyB3aXRoIGRtYSBhZGRyZXNzZXMKKyAqCisgKiBUaGVyZSdzIGFsc28gUENJICJyZWdpc3RlciIgZGF0YSwgd2hpY2ggaXMgbWVtb3J5IG1hcHBlZC4KKyAqIE5vIG1lbW9yeSBzZWVuIGJ5IHRoaXMgZHJpdmVyIGlzIHBhZ2FibGUuCisgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgb2hjaV9oY2RfaW5pdCAoc3RydWN0IG9oY2lfaGNkICpvaGNpKQoreworCW9oY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzOworCXNwaW5fbG9ja19pbml0ICgmb2hjaS0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQgKCZvaGNpLT5wZW5kaW5nKTsKKwlJTklUX1dPUksgKCZvaGNpLT5yaF9yZXN1bWUsIG9oY2lfcmhfcmVzdW1lLCBvaGNpX3RvX2hjZChvaGNpKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgb2hjaV9tZW1faW5pdCAoc3RydWN0IG9oY2lfaGNkICpvaGNpKQoreworCW9oY2ktPnRkX2NhY2hlID0gZG1hX3Bvb2xfY3JlYXRlICgib2hjaV90ZCIsCisJCW9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmNvbnRyb2xsZXIsCisJCXNpemVvZiAoc3RydWN0IHRkKSwKKwkJMzIgLyogYnl0ZSBhbGlnbm1lbnQgKi8sCisJCTAgLyogbm8gcGFnZS1jcm9zc2luZyBpc3N1ZXMgKi8pOworCWlmICghb2hjaS0+dGRfY2FjaGUpCisJCXJldHVybiAtRU5PTUVNOworCW9oY2ktPmVkX2NhY2hlID0gZG1hX3Bvb2xfY3JlYXRlICgib2hjaV9lZCIsCisJCW9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmNvbnRyb2xsZXIsCisJCXNpemVvZiAoc3RydWN0IGVkKSwKKwkJMTYgLyogYnl0ZSBhbGlnbm1lbnQgKi8sCisJCTAgLyogbm8gcGFnZS1jcm9zc2luZyBpc3N1ZXMgKi8pOworCWlmICghb2hjaS0+ZWRfY2FjaGUpIHsKKwkJZG1hX3Bvb2xfZGVzdHJveSAob2hjaS0+dGRfY2FjaGUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9oY2lfbWVtX2NsZWFudXAgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSkKK3sKKwlpZiAob2hjaS0+dGRfY2FjaGUpIHsKKwkJZG1hX3Bvb2xfZGVzdHJveSAob2hjaS0+dGRfY2FjaGUpOworCQlvaGNpLT50ZF9jYWNoZSA9IE5VTEw7CisJfQorCWlmIChvaGNpLT5lZF9jYWNoZSkgeworCQlkbWFfcG9vbF9kZXN0cm95IChvaGNpLT5lZF9jYWNoZSk7CisJCW9oY2ktPmVkX2NhY2hlID0gTlVMTDsKKwl9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIG9oY2kgImRvbmUgbGlzdCIgcHJvY2Vzc2luZyBuZWVkcyB0aGlzIG1hcHBpbmcgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRkICoKK2RtYV90b190ZCAoc3RydWN0IG9oY2lfaGNkICpoYywgZG1hX2FkZHJfdCB0ZF9kbWEpCit7CisJc3RydWN0IHRkICp0ZDsKKworCXRkX2RtYSAmPSBURF9NQVNLOworCXRkID0gaGMtPnRkX2hhc2ggW1REX0hBU0hfRlVOQyh0ZF9kbWEpXTsKKwl3aGlsZSAodGQgJiYgdGQtPnRkX2RtYSAhPSB0ZF9kbWEpCisJCXRkID0gdGQtPnRkX2hhc2g7CisJcmV0dXJuIHRkOworfQorCisvKiBURHMgLi4uICovCitzdGF0aWMgc3RydWN0IHRkICoKK3RkX2FsbG9jIChzdHJ1Y3Qgb2hjaV9oY2QgKmhjLCBpbnQgbWVtX2ZsYWdzKQoreworCWRtYV9hZGRyX3QJZG1hOworCXN0cnVjdCB0ZAkqdGQ7CisKKwl0ZCA9IGRtYV9wb29sX2FsbG9jIChoYy0+dGRfY2FjaGUsIG1lbV9mbGFncywgJmRtYSk7CisJaWYgKHRkKSB7CisJCS8qIGluIGNhc2UgaGMgZmV0Y2hlcyBpdCwgbWFrZSBpdCBsb29rIGRlYWQgKi8KKwkJbWVtc2V0ICh0ZCwgMCwgc2l6ZW9mICp0ZCk7CisJCXRkLT5od05leHRURCA9IGNwdV90b19oYzMyIChoYywgZG1hKTsKKwkJdGQtPnRkX2RtYSA9IGRtYTsKKwkJLyogaGFzaGVkIGluIHRkX2ZpbGwgKi8KKwl9CisJcmV0dXJuIHRkOworfQorCitzdGF0aWMgdm9pZAordGRfZnJlZSAoc3RydWN0IG9oY2lfaGNkICpoYywgc3RydWN0IHRkICp0ZCkKK3sKKwlzdHJ1Y3QgdGQJKipwcmV2ID0gJmhjLT50ZF9oYXNoIFtURF9IQVNIX0ZVTkMgKHRkLT50ZF9kbWEpXTsKKworCXdoaWxlICgqcHJldiAmJiAqcHJldiAhPSB0ZCkKKwkJcHJldiA9ICYoKnByZXYpLT50ZF9oYXNoOworCWlmICgqcHJldikKKwkJKnByZXYgPSB0ZC0+dGRfaGFzaDsKKwllbHNlIGlmICgodGQtPmh3SU5GTyAmIGNwdV90b19oYzMyKGhjLCBURF9ET05FKSkgIT0gMCkKKwkJb2hjaV9kYmcgKGhjLCAibm8gaGFzaCBmb3IgdGQgJXBcbiIsIHRkKTsKKwlkbWFfcG9vbF9mcmVlIChoYy0+dGRfY2FjaGUsIHRkLCB0ZC0+dGRfZG1hKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRURzIC4uLiAqLworc3RhdGljIHN0cnVjdCBlZCAqCitlZF9hbGxvYyAoc3RydWN0IG9oY2lfaGNkICpoYywgaW50IG1lbV9mbGFncykKK3sKKwlkbWFfYWRkcl90CWRtYTsKKwlzdHJ1Y3QgZWQJKmVkOworCisJZWQgPSBkbWFfcG9vbF9hbGxvYyAoaGMtPmVkX2NhY2hlLCBtZW1fZmxhZ3MsICZkbWEpOworCWlmIChlZCkgeworCQltZW1zZXQgKGVkLCAwLCBzaXplb2YgKCplZCkpOworCQlJTklUX0xJU1RfSEVBRCAoJmVkLT50ZF9saXN0KTsKKwkJZWQtPmRtYSA9IGRtYTsKKwl9CisJcmV0dXJuIGVkOworfQorCitzdGF0aWMgdm9pZAorZWRfZnJlZSAoc3RydWN0IG9oY2lfaGNkICpoYywgc3RydWN0IGVkICplZCkKK3sKKwlkbWFfcG9vbF9mcmVlIChoYy0+ZWRfY2FjaGUsIGVkLCBlZC0+ZG1hKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAyODVmMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMKQEAgLTAsMCArMSw1NjAgQEAKKy8qCisgKiBPSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIFVTQi4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PgorICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDUgRGF2aWQgQnJvd25lbGwKKyAqIChDKSBDb3B5cmlnaHQgMjAwMiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICogCisgKiBPTUFQIEJ1cyBHbHVlCisgKgorICogTW9kaWZpZWQgZm9yIE9NQVAgYnkgVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KKyAqIEJhc2VkIG9uIHRoZSAyLjQgT01BUCBPSENJIGRyaXZlciBvcmlnaW5hbGx5IGRvbmUgYnkgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKiBhbmQgb24gb2hjaS1zYTExMTEuYyBieSBDaHJpc3RvcGhlciBIb292ZXIgPGNoQGhwbC5ocC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZnBnYS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbG9jay5oPgorCisKKy8qIE9NQVAtMTUxMCBPSENJIGhhcyBpdHMgb3duIE1NVSBmb3IgRE1BICovCisjZGVmaW5lIE9NQVAxNTEwX0xCX01FTVNJWkUJMzIJLyogU2hvdWxkIGJlIHNhbWUgYXMgU0RSQU0gc2l6ZSAqLworI2RlZmluZSBPTUFQMTUxMF9MQl9DTE9DS19ESVYJMHhmZmZlYzEwYworI2RlZmluZSBPTUFQMTUxMF9MQl9NTVVfQ1RMCTB4ZmZmZWMyMDgKKyNkZWZpbmUgT01BUDE1MTBfTEJfTU1VX0xDSwkweGZmZmVjMjI0CisjZGVmaW5lIE9NQVAxNTEwX0xCX01NVV9MRF9UTEIJMHhmZmZlYzIyOAorI2RlZmluZSBPTUFQMTUxMF9MQl9NTVVfQ0FNX0gJMHhmZmZlYzIyYworI2RlZmluZSBPTUFQMTUxMF9MQl9NTVVfQ0FNX0wJMHhmZmZlYzIzMAorI2RlZmluZSBPTUFQMTUxMF9MQl9NTVVfUkFNX0gJMHhmZmZlYzIzNAorI2RlZmluZSBPTUFQMTUxMF9MQl9NTVVfUkFNX0wJMHhmZmZlYzIzOAorCisKKyNpZm5kZWYgQ09ORklHX0FSQ0hfT01BUAorI2Vycm9yICJUaGlzIGZpbGUgaXMgT01BUCBidXMgZ2x1ZS4gIENPTkZJR19PTUFQIG11c3QgYmUgZGVmaW5lZC4iCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19UUFM2NTAxMAorI2luY2x1ZGUgPGFzbS9hcmNoL3RwczY1MDEwLmg+CisjZWxzZQorCisjZGVmaW5lIExPVwkwCisjZGVmaW5lIEhJR0gJMQorCisjZGVmaW5lIEdQSU8xCTEKKworc3RhdGljIGlubGluZSBpbnQgdHBzNjUwMTBfc2V0X2dwaW9fb3V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIHVuc2lnbmVkIHZhbHVlKQoreworCXJldHVybiAwOworfQorCisjZW5kaWYKKworZXh0ZXJuIGludCB1c2JfZGlzYWJsZWQodm9pZCk7CitleHRlcm4gaW50IG9jcGlfZW5hYmxlKHZvaWQpOworCitzdGF0aWMgc3RydWN0IGNsayAqdXNiX2hvc3RfY2s7CisKK3N0YXRpYyB2b2lkIG9tYXBfb2hjaV9jbG9ja19wb3dlcihpbnQgb24pCit7CisJaWYgKG9uKSB7CisJCWNsa19lbmFibGUodXNiX2hvc3RfY2spOworCQkvKiBndWVzc3RpbWF0ZSBmb3IgVDUgPT0gMXggMzJLIGNsb2NrICsgQVBMTCBsb2NrIHRpbWUgKi8KKwkJdWRlbGF5KDEwMCk7CisJfSBlbHNlIHsKKwkJY2xrX2Rpc2FibGUodXNiX2hvc3RfY2spOworCX0KK30KKworLyoKKyAqIEJvYXJkIHNwZWNpZmljIGdhbmctc3dpdGNoZWQgdHJhbnNjZWl2ZXIgcG93ZXIgb24vb2ZmLgorICogTk9URTogIE9TSyBzdXBwbGllcyBwb3dlciBmcm9tIERDLCBub3QgYmF0dGVyeS4KKyAqLworc3RhdGljIGludCBvbWFwX29oY2lfdHJhbnNjZWl2ZXJfcG93ZXIoaW50IG9uKQoreworCWlmIChvbikgeworCQlpZiAobWFjaGluZV9pc19vbWFwX2lubm92YXRvcigpICYmIGNwdV9pc19vbWFwMTUxMCgpKQorCQkJZnBnYV93cml0ZShmcGdhX3JlYWQoSU5OT1ZBVE9SX0ZQR0FfQ0FNX1VTQl9DT05UUk9MKQorCQkJCXwgKCgxIDw8IDUvKnVzYjEqLykgfCAoMSA8PCAzLyp1c2IyKi8pKSwgCisJCQkgICAgICAgSU5OT1ZBVE9SX0ZQR0FfQ0FNX1VTQl9DT05UUk9MKTsKKwkJZWxzZSBpZiAobWFjaGluZV9pc19vbWFwX29zaygpKQorCQkJdHBzNjUwMTBfc2V0X2dwaW9fb3V0X3ZhbHVlKEdQSU8xLCBMT1cpOworCX0gZWxzZSB7CisJCWlmIChtYWNoaW5lX2lzX29tYXBfaW5ub3ZhdG9yKCkgJiYgY3B1X2lzX29tYXAxNTEwKCkpCisJCQlmcGdhX3dyaXRlKGZwZ2FfcmVhZChJTk5PVkFUT1JfRlBHQV9DQU1fVVNCX0NPTlRST0wpCisJCQkJJiB+KCgxIDw8IDUvKnVzYjEqLykgfCAoMSA8PCAzLyp1c2IyKi8pKSwgCisJCQkgICAgICAgSU5OT1ZBVE9SX0ZQR0FfQ0FNX1VTQl9DT05UUk9MKTsKKwkJZWxzZSBpZiAobWFjaGluZV9pc19vbWFwX29zaygpKQorCQkJdHBzNjUwMTBfc2V0X2dwaW9fb3V0X3ZhbHVlKEdQSU8xLCBISUdIKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE9NQVAtMTUxMCBzcGVjaWZpYyBMb2NhbCBCdXMgY2xvY2sgb24vb2ZmCisgKi8KK3N0YXRpYyBpbnQgb21hcF8xNTEwX2xvY2FsX2J1c19wb3dlcihpbnQgb24pCit7CisJaWYgKG9uKSB7CisJCW9tYXBfd3JpdGVsKCgxIDw8IDEpIHwgKDEgPDwgMCksIE9NQVAxNTEwX0xCX01NVV9DVEwpOworCQl1ZGVsYXkoMjAwKTsKKwl9IGVsc2UgeworCQlvbWFwX3dyaXRlbCgwLCBPTUFQMTUxMF9MQl9NTVVfQ1RMKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE9NQVAtMTUxMCBzcGVjaWZpYyBMb2NhbCBCdXMgaW5pdGlhbGl6YXRpb24KKyAqIE5PVEU6IFRoaXMgYXNzdW1lcyAzMk1CIG1lbW9yeSBzaXplIGluIE9NQVAxNTEwTEJfTUVNU0laRS4KKyAqICAgICAgIFNlZSBhbHNvIGFyY2gvbWFjaC1vbWFwL21lbW9yeS5oIGZvciBfX3ZpcnRfdG9fZG1hKCkgYW5kIAorICogICAgICAgX19kbWFfdG9fdmlydCgpIHdoaWNoIG5lZWQgdG8gbWF0Y2ggd2l0aCB0aGUgcGh5c2ljYWwgCisgKiAgICAgICBMb2NhbCBCdXMgYWRkcmVzcyBiZWxvdy4KKyAqLworc3RhdGljIGludCBvbWFwXzE1MTBfbG9jYWxfYnVzX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdGxiOworCXVuc2lnbmVkIGxvbmcgbGJhZGRyLCBwaHlzYWRkcjsKKworCW9tYXBfd3JpdGVsKChvbWFwX3JlYWRsKE9NQVAxNTEwX0xCX0NMT0NLX0RJVikgJiAweGZmZmZmZmY4KSB8IDB4NCwgCisJICAgICAgIE9NQVAxNTEwX0xCX0NMT0NLX0RJVik7CisKKwkvKiBDb25maWd1cmUgdGhlIExvY2FsIEJ1cyBNTVUgdGFibGUgKi8KKwlmb3IgKHRsYiA9IDA7IHRsYiA8IE9NQVAxNTEwX0xCX01FTVNJWkU7IHRsYisrKSB7CisJCWxiYWRkciA9IHRsYiAqIDB4MDAxMDAwMDAgKyBPTUFQMTUxMF9MQl9PRkZTRVQ7CisJCXBoeXNhZGRyID0gdGxiICogMHgwMDEwMDAwMCArIFBIWVNfT0ZGU0VUOworCQlvbWFwX3dyaXRlbCgobGJhZGRyICYgMHgwZmZmZmZmZikgPj4gMjIsIE9NQVAxNTEwX0xCX01NVV9DQU1fSCk7CisJCW9tYXBfd3JpdGVsKCgobGJhZGRyICYgMHgwMDNmZmMwMCkgPj4gNikgfCAweGMsIAorCQkgICAgICAgT01BUDE1MTBfTEJfTU1VX0NBTV9MKTsKKwkJb21hcF93cml0ZWwocGh5c2FkZHIgPj4gMTYsIE9NQVAxNTEwX0xCX01NVV9SQU1fSCk7CisJCW9tYXBfd3JpdGVsKChwaHlzYWRkciAmIDB4MDAwMGZjMDApIHwgMHgzMDAsIE9NQVAxNTEwX0xCX01NVV9SQU1fTCk7CisJCW9tYXBfd3JpdGVsKHRsYiA8PCA0LCBPTUFQMTUxMF9MQl9NTVVfTENLKTsKKwkJb21hcF93cml0ZWwoMHgxLCBPTUFQMTUxMF9MQl9NTVVfTERfVExCKTsKKwl9CisKKwkvKiBFbmFibGUgdGhlIHdhbGtpbmcgdGFibGUgKi8KKwlvbWFwX3dyaXRlbChvbWFwX3JlYWRsKE9NQVAxNTEwX0xCX01NVV9DVEwpIHwgKDEgPDwgMyksIE9NQVAxNTEwX0xCX01NVV9DVEwpOworCXVkZWxheSgyMDApOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZglDT05GSUdfVVNCX09URworCitzdGF0aWMgdm9pZCBzdGFydF9obnAoc3RydWN0IG9oY2lfaGNkICpvaGNpKQoreworCWNvbnN0IHVuc2lnbmVkCXBvcnQgPSBvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5vdGdfcG9ydCAtIDE7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCW90Z19zdGFydF9obnAob2hjaS0+dHJhbnNjZWl2ZXIpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCW9oY2ktPnRyYW5zY2VpdmVyLT5zdGF0ZSA9IE9UR19TVEFURV9BX1NVU1BFTkQ7CisJd3JpdGVsIChSSF9QU19QU1MsICZvaGNpLT5yZWdzLT5yb290aHViLnBvcnRzdGF0dXMgW3BvcnRdKTsKKwlPVEdfQ1RSTF9SRUcgJj0gfk9UR19BX0JVU1JFUTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG9tYXBfc3RhcnRfaGMoc3RydWN0IG9oY2lfaGNkICpvaGNpLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBvbWFwX3VzYl9jb25maWcJKmNvbmZpZyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludAkJCW5lZWRfdHJhbnNjZWl2ZXIgPSAoY29uZmlnLT5vdGcgIT0gMCk7CisJaW50CQkJcmV0OworCisJZGV2X2RiZygmcGRldi0+ZGV2LCAic3RhcnRpbmcgVVNCIENvbnRyb2xsZXJcbiIpOworCisJaWYgKGNvbmZpZy0+b3RnKSB7CisJCW9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLm90Z19wb3J0ID0gY29uZmlnLT5vdGc7CisJCS8qIGRlZmF1bHQvbWluaW11bSBPVEcgcG93ZXIgYnVkZ2V0OiAgOCBtQSAqLworCQlvaGNpLT5wb3dlcl9idWRnZXQgPSA4OworCX0KKworCS8qIGJvYXJkcyBjYW4gdXNlIE9URyB0cmFuc2NlaXZlcnMgaW4gbm9uLU9URyBtb2RlcyAqLworCW5lZWRfdHJhbnNjZWl2ZXIgPSBuZWVkX3RyYW5zY2VpdmVyCisJCQl8fCBtYWNoaW5lX2lzX29tYXBfaDIoKSB8fCBtYWNoaW5lX2lzX29tYXBfaDMoKTsKKworCWlmIChjcHVfaXNfb21hcDE2eHgoKSkKKwkJb2NwaV9lbmFibGUoKTsKKworI2lmZGVmCUNPTkZJR19BUkNIX09NQVBfT1RHCisJaWYgKG5lZWRfdHJhbnNjZWl2ZXIpIHsKKwkJb2hjaS0+dHJhbnNjZWl2ZXIgPSBvdGdfZ2V0X3RyYW5zY2VpdmVyKCk7CisJCWlmIChvaGNpLT50cmFuc2NlaXZlcikgeworCQkJaW50CXN0YXR1cyA9IG90Z19zZXRfaG9zdChvaGNpLT50cmFuc2NlaXZlciwKKwkJCQkJCSZvaGNpX3RvX2hjZChvaGNpKS0+c2VsZik7CisJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJpbml0ICVzIHRyYW5zY2VpdmVyLCBzdGF0dXMgJWRcbiIsCisJCQkJCW9oY2ktPnRyYW5zY2VpdmVyLT5sYWJlbCwgc3RhdHVzKTsKKwkJCWlmIChzdGF0dXMpIHsKKwkJCQlpZiAob2hjaS0+dHJhbnNjZWl2ZXIpCisJCQkJCXB1dF9kZXZpY2Uob2hjaS0+dHJhbnNjZWl2ZXItPmRldik7CisJCQkJcmV0dXJuIHN0YXR1czsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGZpbmQgdHJhbnNjZWl2ZXJcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CisjZW5kaWYKKworCW9tYXBfb2hjaV9jbG9ja19wb3dlcigxKTsKKworCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCQlvbWFwXzE1MTBfbG9jYWxfYnVzX3Bvd2VyKDEpOworCQlvbWFwXzE1MTBfbG9jYWxfYnVzX2luaXQoKTsKKwl9CisKKwlpZiAoKHJldCA9IG9oY2lfaW5pdChvaGNpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogYm9hcmQtc3BlY2lmaWMgcG93ZXIgc3dpdGNoaW5nIGFuZCBvdmVyY3VycmVudCBzdXBwb3J0ICovCisJaWYgKG1hY2hpbmVfaXNfb21hcF9vc2soKSB8fCBtYWNoaW5lX2lzX29tYXBfaW5ub3ZhdG9yKCkpIHsKKwkJdTMyCXJoID0gcm9vdGh1Yl9hIChvaGNpKTsKKworCQkvKiBwb3dlciBzd2l0Y2hpbmcgKGdhbmdlZCBieSBkZWZhdWx0KSAqLworCQlyaCAmPSB+UkhfQV9OUFM7CisKKwkJLyogVFBTMjA0NSBzd2l0Y2ggZm9yIGludGVybmFsIHRyYW5zY2VpdmVyIChwb3J0IDEpICovCisJCWlmIChtYWNoaW5lX2lzX29tYXBfb3NrKCkpIHsKKwkJCW9oY2ktPnBvd2VyX2J1ZGdldCA9IDI1MDsKKworCQkJcmggJj0gflJIX0FfTk9DUDsKKworCQkJLyogZ3BpbzkgZm9yIG92ZXJjdXJyZW50IGRldGN0aW9uICovCisJCQlvbWFwX2NmZ19yZWcoVzhfMTYxMF9HUElPOSk7CisJCQlvbWFwX3JlcXVlc3RfZ3Bpbyg5KTsKKwkJCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKDksIDEgLyogSU4gKi8pOworCisJCQkvKiBmb3IgcGFyYW5vaWEncyBzYWtlOiAgZGlzYWJsZSBVU0IuUFVFTiAqLworCQkJb21hcF9jZmdfcmVnKFc0X1VTQl9ISUdIWik7CisJCX0KKwkJb2hjaV93cml0ZWwob2hjaSwgcmgsICZvaGNpLT5yZWdzLT5yb290aHViLmEpOworCQlkaXN0cnVzdF9maXJtd2FyZSA9IDA7CisJfQorCisJLyogRklYTUUga2h1YmQgaHViIHJlcXVlc3RzIHNob3VsZCBtYW5hZ2UgcG93ZXIgc3dpdGNoaW5nICovCisJb21hcF9vaGNpX3RyYW5zY2VpdmVyX3Bvd2VyKDEpOworCisJLyogYm9hcmQgaW5pdCB3aWxsIGhhdmUgYWxyZWFkeSBoYW5kbGVkIEhNQyBhbmQgbXV4IHNldHVwLgorCSAqIGFueSBleHRlcm5hbCB0cmFuc2NlaXZlciBzaG91bGQgYWxyZWFkeSBiZSBpbml0aWFsaXplZAorCSAqIHRvbywgc28gYWxsIGNvbmZpZ3VyZWQgcG9ydHMgdXNlIHRoZSByaWdodCBzaWduYWxpbmcgbm93LgorCSAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfc3RvcF9oYyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWRldl9kYmcoJnBkZXYtPmRldiwgInN0b3BwaW5nIFVTQiBDb250cm9sbGVyXG4iKTsKKwlvbWFwX29oY2lfY2xvY2tfcG93ZXIoMCk7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZCB1c2JfaGNkX29tYXBfcmVtb3ZlIChzdHJ1Y3QgdXNiX2hjZCAqLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOworCisvKiBjb25maWd1cmUgc28gYW4gSEMgZGV2aWNlIGFuZCBpZCBhcmUgYWx3YXlzIHByb3ZpZGVkICovCisvKiBhbHdheXMgY2FsbGVkIHdpdGggcHJvY2VzcyBjb250ZXh0OyBzbGVlcGluZyBpcyBPSyAqLworCisKKy8qKgorICogdXNiX2hjZF9vbWFwX3Byb2JlIC0gaW5pdGlhbGl6ZSBPTUFQLWJhc2VkIEhDRHMKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIEFsbG9jYXRlcyBiYXNpYyByZXNvdXJjZXMgZm9yIHRoaXMgVVNCIGhvc3QgY29udHJvbGxlciwgYW5kCisgKiB0aGVuIGludm9rZXMgdGhlIHN0YXJ0KCkgbWV0aG9kIGZvciB0aGUgSENEIGFzc29jaWF0ZWQgd2l0aCBpdAorICogdGhyb3VnaCB0aGUgaG90cGx1ZyBlbnRyeSdzIGRyaXZlcl9kYXRhLgorICovCitpbnQgdXNiX2hjZF9vbWFwX3Byb2JlIChjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyICpkcml2ZXIsCisJCQkgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gMDsKKwlzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2k7CisKKwlpZiAocGRldi0+bnVtX3Jlc291cmNlcyAhPSAyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaGNkIHByb2JlOiBpbnZhbGlkIG51bV9yZXNvdXJjZXM6ICVpXG4iLCAKKwkJICAgICAgIHBkZXYtPm51bV9yZXNvdXJjZXMpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAocGRldi0+cmVzb3VyY2VbMF0uZmxhZ3MgIT0gSU9SRVNPVVJDRV9NRU0gCisJCQl8fCBwZGV2LT5yZXNvdXJjZVsxXS5mbGFncyAhPSBJT1JFU09VUkNFX0lSUSkgeworCQlwcmludGsoS0VSTl9FUlIgImhjZCBwcm9iZTogaW52YWxpZCByZXNvdXJjZSB0eXBlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJdXNiX2hvc3RfY2sgPSBjbGtfZ2V0KDAsICJ1c2JfaGhjX2NrIik7CisJaWYgKElTX0VSUih1c2JfaG9zdF9jaykpCisJCXJldHVybiBQVFJfRVJSKHVzYl9ob3N0X2NrKTsKKworCWhjZCA9IHVzYl9jcmVhdGVfaGNkIChkcml2ZXIsICZwZGV2LT5kZXYsIHBkZXYtPmRldi5idXNfaWQpOworCWlmICghaGNkKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMDsKKwl9CisJaGNkLT5yc3JjX3N0YXJ0ID0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7CisJaGNkLT5yc3JjX2xlbiA9IHBkZXYtPnJlc291cmNlWzBdLmVuZCAtIHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsgMTsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwgaGNkX25hbWUpKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZXJyMTsKKwl9CisKKwloY2QtPnJlZ3MgPSAodm9pZCBfX2lvbWVtICopIChpbnQpIElPX0FERFJFU1MoaGNkLT5yc3JjX3N0YXJ0KTsKKworCW9oY2kgPSBoY2RfdG9fb2hjaShoY2QpOworCW9oY2lfaGNkX2luaXQob2hjaSk7CisKKwlyZXR2YWwgPSBvbWFwX3N0YXJ0X2hjKG9oY2ksIHBkZXYpOworCWlmIChyZXR2YWwgPCAwKQorCQlnb3RvIGVycjI7CisKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCksIFNBX0lOVEVSUlVQVCk7CisJaWYgKHJldHZhbCA9PSAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJb21hcF9zdG9wX2hjKHBkZXYpOworZXJyMjoKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKK2VycjE6CisJdXNiX3B1dF9oY2QoaGNkKTsKK2VycjA6CisJY2xrX3B1dCh1c2JfaG9zdF9jayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKiBtYXkgYmUgY2FsbGVkIHdpdGggY29udHJvbGxlciwgYnVzLCBhbmQgZGV2aWNlcyBhY3RpdmUgKi8KKworLyoqCisgKiB1c2JfaGNkX29tYXBfcmVtb3ZlIC0gc2h1dGRvd24gcHJvY2Vzc2luZyBmb3IgT01BUC1iYXNlZCBIQ0RzCisgKiBAZGV2OiBVU0IgSG9zdCBDb250cm9sbGVyIGJlaW5nIHJlbW92ZWQKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIFJldmVyc2VzIHRoZSBlZmZlY3Qgb2YgdXNiX2hjZF9vbWFwX3Byb2JlKCksIGZpcnN0IGludm9raW5nCisgKiB0aGUgSENEJ3Mgc3RvcCgpIG1ldGhvZC4gIEl0IGlzIGFsd2F5cyBjYWxsZWQgZnJvbSBhIHRocmVhZAorICogY29udGV4dCwgbm9ybWFsbHkgInJtbW9kIiwgImFwbWQiLCBvciBzb21ldGhpbmcgc2ltaWxhci4KKyAqCisgKi8KK3ZvaWQgdXNiX2hjZF9vbWFwX3JlbW92ZSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwl1c2JfcmVtb3ZlX2hjZChoY2QpOworCWlmIChtYWNoaW5lX2lzX29tYXBfb3NrKCkpCisJCW9tYXBfZnJlZV9ncGlvKDkpOworCW9tYXBfc3RvcF9oYyhwZGV2KTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwl1c2JfcHV0X2hjZChoY2QpOworCWNsa19wdXQodXNiX2hvc3RfY2spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9fZGV2aW5pdAorb2hjaV9vbWFwX3N0YXJ0IChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBvbWFwX3VzYl9jb25maWcgKmNvbmZpZzsKKwlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKwlpbnQJCXJldDsKKworCWNvbmZpZyA9IGhjZC0+c2VsZi5jb250cm9sbGVyLT5wbGF0Zm9ybV9kYXRhOworCWlmIChjb25maWctPm90ZyB8fCBjb25maWctPnJ3YykKKwkJd3JpdGVsKE9IQ0lfQ1RSTF9SV0MsICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKworCWlmICgocmV0ID0gb2hjaV9ydW4gKG9oY2kpKSA8IDApIHsKKwkJZGV2X2VycihoY2QtPnNlbGYuY29udHJvbGxlciwgImNhbid0IHN0YXJ0XG4iKTsKKwkJb2hjaV9zdG9wIChoY2QpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgb2hjaV9vbWFwX2hjX2RyaXZlciA9IHsKKwkuZGVzY3JpcHRpb24gPQkJaGNkX25hbWUsCisJLnByb2R1Y3RfZGVzYyA9CQkiT01BUCBPSENJIiwKKwkuaGNkX3ByaXZfc2l6ZSA9CXNpemVvZihzdHJ1Y3Qgb2hjaV9oY2QpLAorCisJLyoKKwkgKiBnZW5lcmljIGhhcmR3YXJlIGxpbmthZ2UKKwkgKi8KKwkuaXJxID0JCQlvaGNpX2lycSwKKwkuZmxhZ3MgPQkJSENEX1VTQjExIHwgSENEX01FTU9SWSwKKworCS8qCisJICogYmFzaWMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMKKwkgKi8KKwkuc3RhcnQgPQkJb2hjaV9vbWFwX3N0YXJ0LAorCS5zdG9wID0JCQlvaGNpX3N0b3AsCisKKwkvKgorCSAqIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzCisJICovCisJLnVyYl9lbnF1ZXVlID0JCW9oY2lfdXJiX2VucXVldWUsCisJLnVyYl9kZXF1ZXVlID0JCW9oY2lfdXJiX2RlcXVldWUsCisJLmVuZHBvaW50X2Rpc2FibGUgPQlvaGNpX2VuZHBvaW50X2Rpc2FibGUsCisKKwkvKgorCSAqIHNjaGVkdWxpbmcgc3VwcG9ydAorCSAqLworCS5nZXRfZnJhbWVfbnVtYmVyID0Jb2hjaV9nZXRfZnJhbWUsCisKKwkvKgorCSAqIHJvb3QgaHViIHN1cHBvcnQKKwkgKi8KKwkuaHViX3N0YXR1c19kYXRhID0Jb2hjaV9odWJfc3RhdHVzX2RhdGEsCisJLmh1Yl9jb250cm9sID0JCW9oY2lfaHViX2NvbnRyb2wsCisjaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECisJLmh1Yl9zdXNwZW5kID0JCW9oY2lfaHViX3N1c3BlbmQsCisJLmh1Yl9yZXN1bWUgPQkJb2hjaV9odWJfcmVzdW1lLAorI2VuZGlmCisJLnN0YXJ0X3BvcnRfcmVzZXQgPQlvaGNpX3N0YXJ0X3BvcnRfcmVzZXQsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG9oY2lfaGNkX29tYXBfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gdXNiX2hjZF9vbWFwX3Byb2JlKCZvaGNpX29tYXBfaGNfZHJpdmVyLAorCQkJCXRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKK30KKworc3RhdGljIGludCBvaGNpX2hjZF9vbWFwX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKworCXVzYl9oY2Rfb21hcF9yZW1vdmUoaGNkLCBwZGV2KTsKKwlpZiAob2hjaS0+dHJhbnNjZWl2ZXIpIHsKKwkJKHZvaWQpIG90Z19zZXRfaG9zdChvaGNpLT50cmFuc2NlaXZlciwgMCk7CisJCXB1dF9kZXZpY2Uob2hjaS0+dHJhbnNjZWl2ZXItPmRldik7CisJfQorCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZglDT05GSUdfUE0KKworLyogc3RhdGVzIG1hdGNoIFBDSSB1c2FnZSwgYWx3YXlzIHN1c3BlbmRpbmcgdGhlIHJvb3QgaHViIGV4Y2VwdCB0aGF0CisgKiA0IH49IEQzY29sZCAoQUNQSSBEMykgd2l0aCBjbG9jayBvZmYgKHJlc3VtZSBzZWVzIHJlc2V0KS4KKyAqLworCitzdGF0aWMgaW50IG9oY2lfb21hcF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN0YXRlLCB1MzIgbGV2ZWwpCit7CisJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2koZGV2X2dldF9kcnZkYXRhKGRldikpOworCWludAkJc3RhdHVzID0gLUVJTlZBTDsKKworCWlmIChsZXZlbCAhPSBTVVNQRU5EX1BPV0VSX0RPV04pCisJCXJldHVybiAwOworCWlmIChzdGF0ZSA8PSBkZXYtPnBvd2VyLnBvd2VyX3N0YXRlKQorCQlyZXR1cm4gMDsKKworCWRldl9kYmcoZGV2LCAic3VzcGVuZCB0byAlZFxuIiwgc3RhdGUpOworCWRvd24oJm9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLnJvb3RfaHViLT5zZXJpYWxpemUpOworCXN0YXR1cyA9IG9oY2lfaHViX3N1c3BlbmQob2hjaV90b19oY2Qob2hjaSkpOworCWlmIChzdGF0dXMgPT0gMCkgeworCQlpZiAoc3RhdGUgPj0gNCkgeworCQkJb21hcF9vaGNpX2Nsb2NrX3Bvd2VyKDApOworCQkJb2hjaV90b19oY2Qob2hjaSktPnNlbGYucm9vdF9odWItPnN0YXRlID0KKwkJCQkJVVNCX1NUQVRFX1NVU1BFTkRFRDsKKwkJCXN0YXRlID0gNDsKKwkJfQorCQlvaGNpX3RvX2hjZChvaGNpKS0+c3RhdGUgPSBIQ19TVEFURV9TVVNQRU5ERUQ7CisJCWRldi0+cG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKKwl9CisJdXAoJm9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLnJvb3RfaHViLT5zZXJpYWxpemUpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9vbWFwX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBsZXZlbCkKK3sKKwlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CisJaW50CQlzdGF0dXMgPSAwOworCisJaWYgKGxldmVsICE9IFJFU1VNRV9QT1dFUl9PTikKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGRldi0+cG93ZXIucG93ZXJfc3RhdGUpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgNDoKKwkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIG9oY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQorCQkJbXNsZWVwKDUpOworCQlvaGNpLT5uZXh0X3N0YXRlY2hhbmdlID0gamlmZmllczsKKwkJb21hcF9vaGNpX2Nsb2NrX3Bvd2VyKDEpOworCQkvKiBGQUxMVEhST1VHSCAqLworCWRlZmF1bHQ6CisJCWRldl9kYmcoZGV2LCAicmVzdW1lIGZyb20gJWRcbiIsIGRldi0+cG93ZXIucG93ZXJfc3RhdGUpOworI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAorCQkvKiBnZXQgZXh0cmEgY2xlYW51cCBldmVuIGlmIHJlbW90ZSB3YWtldXAgaXNuJ3QgaW4gdXNlICovCisJCXN0YXR1cyA9IHVzYl9yZXN1bWVfZGV2aWNlKG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLnJvb3RfaHViKTsKKyNlbHNlCisJCWRvd24oJm9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLnJvb3RfaHViLT5zZXJpYWxpemUpOworCQlzdGF0dXMgPSBvaGNpX2h1Yl9yZXN1bWUob2hjaV90b19oY2Qob2hjaSkpOworCQl1cCgmb2hjaV90b19oY2Qob2hjaSktPnNlbGYucm9vdF9odWItPnNlcmlhbGl6ZSk7CisjZW5kaWYKKwkJaWYgKHN0YXR1cyA9PSAwKQorCQkJZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSA9IDA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIERyaXZlciBkZWZpbml0aW9uIHRvIHJlZ2lzdGVyIHdpdGggdGhlIE9NQVAgYnVzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBvaGNpX2hjZF9vbWFwX2RyaXZlciA9IHsKKwkubmFtZQkJPSAib2hjaSIsCisJLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCisJLnByb2JlCQk9IG9oY2lfaGNkX29tYXBfZHJ2X3Byb2JlLAorCS5yZW1vdmUJCT0gb2hjaV9oY2Rfb21hcF9kcnZfcmVtb3ZlLAorI2lmZGVmCUNPTkZJR19QTQorCS5zdXNwZW5kCT0gb2hjaV9vbWFwX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBvaGNpX29tYXBfcmVzdW1lLAorI2VuZGlmCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvaGNpX2hjZF9vbWFwX2luaXQgKHZvaWQpCit7CisJcHJpbnRrIChLRVJOX0RFQlVHICIlczogIiBEUklWRVJfSU5GTyAiIChPTUFQKVxuIiwgaGNkX25hbWUpOworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwcl9kZWJ1ZygiJXM6IGJsb2NrIHNpemVzOiBlZCAlWmQgdGQgJVpkXG4iLCBoY2RfbmFtZSwKKwkJc2l6ZW9mIChzdHJ1Y3QgZWQpLCBzaXplb2YgKHN0cnVjdCB0ZCkpOworCisJcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2Rfb21hcF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb2hjaV9oY2Rfb21hcF9jbGVhbnVwICh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX2hjZF9vbWFwX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0IChvaGNpX2hjZF9vbWFwX2luaXQpOworbW9kdWxlX2V4aXQgKG9oY2lfaGNkX29tYXBfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYxMTU4MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYwpAQCAtMCwwICsxLDI2NCBAQAorLyoKKyAqIE9IQ0kgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+CisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMiBEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqIAorICogWyBJbml0aWFsaXNhdGlvbiBpcyBiYXNlZCBvbiBMaW51cycgIF0KKyAqIFsgdWhjaSBjb2RlIGFuZCBncmVncyBvaGNpIGZyYWdtZW50cyBdCisgKiBbIChDKSBDb3B5cmlnaHQgMTk5OSBMaW51cyBUb3J2YWxkcyAgXQorICogWyAoQykgQ29weXJpZ2h0IDE5OTkgR3JlZ29yeSBQLiBTbWl0aF0KKyAqIAorICogUENJIEJ1cyBHbHVlCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKyAKKyNpZmRlZiBDT05GSUdfUE1BQ19QQk9PSworI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3BtYWNfZmVhdHVyZS5oPgorI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpZm5kZWYgQ09ORklHX1BNCisjCWRlZmluZSBDT05GSUdfUE0KKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX1BDSQorI2Vycm9yICJUaGlzIGZpbGUgaXMgUENJIGJ1cyBnbHVlLiAgQ09ORklHX1BDSSBtdXN0IGJlIGRlZmluZWQuIgorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQKK29oY2lfcGNpX3Jlc2V0IChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCisJb2hjaV9oY2RfaW5pdCAob2hjaSk7CisJcmV0dXJuIG9oY2lfaW5pdCAob2hjaSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitvaGNpX3BjaV9zdGFydCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKwlpbnQJCXJldDsKKworCWlmKGhjZC0+c2VsZi5jb250cm9sbGVyICYmIGhjZC0+c2VsZi5jb250cm9sbGVyLT5idXMgPT0gJnBjaV9idXNfdHlwZSkgeworCQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOworCisJCS8qIEFNRCA3NTYsIGZvciBtb3N0IGNoaXBzIChlYXJseSByZXZzKSwgY29ycnVwdHMgcmVnaXN0ZXIKKwkJICogdmFsdWVzIG9uIHJlYWQgLi4uIHNvIGVuYWJsZSB0aGUgdmVuZG9yIHdvcmthcm91bmQuCisJCSAqLworCQlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQU1ECisJCQkJJiYgcGRldi0+ZGV2aWNlID09IDB4NzQwYykgeworCQkJb2hjaS0+ZmxhZ3MgPSBPSENJX1FVSVJLX0FNRDc1NjsKKwkJCW9oY2lfaW5mbyAob2hjaSwgIkFNRDc1NiBlcnJhdHVtIDQgd29ya2Fyb3VuZFxuIik7CisJCQkvLyBhbHNvIHNvbWV3aGF0IGVycmF0dW0gMTAgKHN1c3BlbmQvcmVzdW1lIGlzc3VlcykKKwkJfQorCisJCS8qIEZJWE1FIGZvciBzb21lIG9mIHRoZSBlYXJseSBBTUQgNzYwIHNvdXRoYnJpZGdlcywgT0hDSQorCQkgKiB3b24ndCB3b3JrIGF0IGFsbC4gIGJsYWNrbGlzdCB0aGVtLgorCQkgKi8KKworCQkvKiBBcHBsZSdzIE9IQ0kgZHJpdmVyIGhhcyBhIGxvdCBvZiBiaXphcnJlIHdvcmthcm91bmRzCisJCSAqIGZvciB0aGlzIGNoaXAuICBFdmlkZW50bHkgY29udHJvbCBhbmQgYnVsayBsaXN0cworCQkgKiBjYW4gZ2V0IGNvbmZ1c2VkLiAgKEImVyBHMyBtb2RlbHMsIGFuZCAuLi4pCisJCSAqLworCQllbHNlIGlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9PUFRJCisJCQkJJiYgcGRldi0+ZGV2aWNlID09IDB4Yzg2MSkgeworCQkJb2hjaV9pbmZvIChvaGNpLAorCQkJCSJXQVJOSU5HOiBPUFRpIHdvcmthcm91bmRzIHVuYXZhaWxhYmxlXG4iKTsKKwkJfQorCisJCS8qIENoZWNrIGZvciBOU0M4NzU2MC4gV2UgaGF2ZSB0byBsb29rIGF0IHRoZSBicmlkZ2UgKGZuMSkgdG8KKwkJICogaWRlbnRpZnkgdGhlIFVTQiAoZm4yKS4gVGhpcyBxdWlyayBtaWdodCBhcHBseSB0byBtb3JlIG9yCisJCSAqIGV2ZW4gYWxsIE5TQyBzdHVmZi4KKwkJICovCisJCWVsc2UgaWYgKHBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX05TKSB7CisJCQlzdHJ1Y3QgcGNpX2RldgkqYjsKKworCQkJYiAgPSBwY2lfZmluZF9zbG90IChwZGV2LT5idXMtPm51bWJlciwKKwkJCQkJUENJX0RFVkZOIChQQ0lfU0xPVCAocGRldi0+ZGV2Zm4pLCAxKSk7CisJCQlpZiAoYiAmJiBiLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9OU184NzU2MF9MSU8KKwkJCQkJJiYgYi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfTlMpIHsKKwkJCQlvaGNpLT5mbGFncyB8PSBPSENJX1FVSVJLX1NVUEVSSU87CisJCQkJb2hjaV9pbmZvIChvaGNpLCAiVXNpbmcgTlNDIFN1cGVySU8gc2V0dXBcbiIpOworCQkJfQorCQl9CisJfQorCisJLyogTk9URTogdGhlcmUgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGEgZmlyc3QgcmVzZXQsIHRvCisJICoga2VlcCBiaW9zL3NtbSBpcnFzIGZyb20gbWFraW5nIHRyb3VibGUKKwkgKi8KKwlpZiAoKHJldCA9IG9oY2lfcnVuIChvaGNpKSkgPCAwKSB7CisJCW9oY2lfZXJyIChvaGNpLCAiY2FuJ3Qgc3RhcnRcbiIpOworCQlvaGNpX3N0b3AgKGhjZCk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCisjaWZkZWYJQ09ORklHX1BNCisKK3N0YXRpYyBpbnQgb2hjaV9wY2lfc3VzcGVuZCAoc3RydWN0IHVzYl9oY2QgKmhjZCwgdTMyIHN0YXRlKQoreworCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKworCS8qIHN1c3BlbmQgcm9vdCBodWIsIGhvcGluZyBpdCBrZWVwcyBwb3dlciBkdXJpbmcgc3VzcGVuZCAqLworCWlmICh0aW1lX2JlZm9yZSAoamlmZmllcywgb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSkpCisJCW1zbGVlcCAoMTAwKTsKKworI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAorCSh2b2lkKSB1c2Jfc3VzcGVuZF9kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1Yiwgc3RhdGUpOworI2Vsc2UKKwl1c2JfbG9ja19kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1Yik7CisJKHZvaWQpIG9oY2lfaHViX3N1c3BlbmQgKGhjZCk7CisJdXNiX3VubG9ja19kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1Yik7CisjZW5kaWYKKworCS8qIGxldCB0aGluZ3Mgc2V0dGxlIGRvd24gYSBiaXQgKi8KKwltc2xlZXAgKDEwMCk7CisJCisjaWZkZWYgQ09ORklHX1BNQUNfUEJPT0sKKwlpZiAoX21hY2hpbmUgPT0gX01BQ0hfUG1hYykgeworCSAgIAlzdHJ1Y3QgZGV2aWNlX25vZGUJKm9mX25vZGU7CisgCisJCS8qIERpc2FibGUgVVNCIFBBRCAmIGNlbGwgY2xvY2sgKi8KKwkJb2Zfbm9kZSA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZSAodG9fcGNpX2RldihoY2QtPnNlbGYuY29udHJvbGxlcikpOworCQlpZiAob2Zfbm9kZSkKKwkJCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX1VTQl9FTkFCTEUsIG9mX25vZGUsIDAsIDApOworCX0KKyNlbmRpZiAvKiBDT05GSUdfUE1BQ19QQk9PSyAqLworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgb2hjaV9wY2lfcmVzdW1lIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKwlpbnQJCQlyZXR2YWwgPSAwOworCisjaWZkZWYgQ09ORklHX1BNQUNfUEJPT0sKKwlpZiAoX21hY2hpbmUgPT0gX01BQ0hfUG1hYykgeworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGU7CisKKwkJLyogUmUtZW5hYmxlIFVTQiBQQUQgJiBjZWxsIGNsb2NrICovCisJCW9mX25vZGUgPSBwY2lfZGV2aWNlX3RvX09GX25vZGUgKHRvX3BjaV9kZXYoaGNkLT5zZWxmLmNvbnRyb2xsZXIpKTsKKwkJaWYgKG9mX25vZGUpCisJCQlwbWFjX2NhbGxfZmVhdHVyZSAoUE1BQ19GVFJfVVNCX0VOQUJMRSwgb2Zfbm9kZSwgMCwgMSk7CisJfQorI2VuZGlmIC8qIENPTkZJR19QTUFDX1BCT09LICovCisKKwkvKiByZXN1bWUgcm9vdCBodWIgKi8KKwlpZiAodGltZV9iZWZvcmUgKGppZmZpZXMsIG9oY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQorCQltc2xlZXAgKDEwMCk7CisjaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECisJLyogZ2V0IGV4dHJhIGNsZWFudXAgZXZlbiBpZiByZW1vdGUgd2FrZXVwIGlzbid0IGluIHVzZSAqLworCXJldHZhbCA9IHVzYl9yZXN1bWVfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIpOworI2Vsc2UKKwl1c2JfbG9ja19kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1Yik7CisJcmV0dmFsID0gb2hjaV9odWJfcmVzdW1lIChoY2QpOworCXVzYl91bmxvY2tfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIpOworI2VuZGlmCisKKwlyZXR1cm4gcmV0dmFsOworfQorCisjZW5kaWYJLyogQ09ORklHX1BNICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgb2hjaV9wY2lfaGNfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbiA9CQloY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjID0JCSJPSENJIEhvc3QgQ29udHJvbGxlciIsCisJLmhjZF9wcml2X3NpemUgPQlzaXplb2Yoc3RydWN0IG9oY2lfaGNkKSwKKworCS8qCisJICogZ2VuZXJpYyBoYXJkd2FyZSBsaW5rYWdlCisJICovCisJLmlycSA9CQkJb2hjaV9pcnEsCisJLmZsYWdzID0JCUhDRF9NRU1PUlkgfCBIQ0RfVVNCMTEsCisKKwkvKgorCSAqIGJhc2ljIGxpZmVjeWNsZSBvcGVyYXRpb25zCisJICovCisJLnJlc2V0ID0JCW9oY2lfcGNpX3Jlc2V0LAorCS5zdGFydCA9CQlvaGNpX3BjaV9zdGFydCwKKyNpZmRlZglDT05GSUdfUE0KKwkuc3VzcGVuZCA9CQlvaGNpX3BjaV9zdXNwZW5kLAorCS5yZXN1bWUgPQkJb2hjaV9wY2lfcmVzdW1lLAorI2VuZGlmCisJLnN0b3AgPQkJCW9oY2lfc3RvcCwKKworCS8qCisJICogbWFuYWdpbmcgaS9vIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIGRldmljZSByZXNvdXJjZXMKKwkgKi8KKwkudXJiX2VucXVldWUgPQkJb2hjaV91cmJfZW5xdWV1ZSwKKwkudXJiX2RlcXVldWUgPQkJb2hjaV91cmJfZGVxdWV1ZSwKKwkuZW5kcG9pbnRfZGlzYWJsZSA9CW9oY2lfZW5kcG9pbnRfZGlzYWJsZSwKKworCS8qCisJICogc2NoZWR1bGluZyBzdXBwb3J0CisJICovCisJLmdldF9mcmFtZV9udW1iZXIgPQlvaGNpX2dldF9mcmFtZSwKKworCS8qCisJICogcm9vdCBodWIgc3VwcG9ydAorCSAqLworCS5odWJfc3RhdHVzX2RhdGEgPQlvaGNpX2h1Yl9zdGF0dXNfZGF0YSwKKwkuaHViX2NvbnRyb2wgPQkJb2hjaV9odWJfY29udHJvbCwKKyNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKKwkuaHViX3N1c3BlbmQgPQkJb2hjaV9odWJfc3VzcGVuZCwKKwkuaHViX3Jlc3VtZSA9CQlvaGNpX2h1Yl9yZXN1bWUsCisjZW5kaWYKKwkuc3RhcnRfcG9ydF9yZXNldCA9CW9oY2lfc3RhcnRfcG9ydF9yZXNldCwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZHMgW10gPSB7IHsKKwkvKiBoYW5kbGUgYW55IFVTQiBPSENJIGNvbnRyb2xsZXIgKi8KKwlQQ0lfREVWSUNFX0NMQVNTKChQQ0lfQ0xBU1NfU0VSSUFMX1VTQiA8PCA4KSB8IDB4MTAsIH4wKSwKKwkuZHJpdmVyX2RhdGEgPQkodW5zaWduZWQgbG9uZykgJm9oY2lfcGNpX2hjX2RyaXZlciwKKwl9LCB7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSAocGNpLCBwY2lfaWRzKTsKKworLyogcGNpIGRyaXZlciBnbHVlOyB0aGlzIGlzIGEgIm5ldyBzdHlsZSIgUENJIGRyaXZlciBtb2R1bGUgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBvaGNpX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJKGNoYXIgKikgaGNkX25hbWUsCisJLmlkX3RhYmxlID0JcGNpX2lkcywKKworCS5wcm9iZSA9CXVzYl9oY2RfcGNpX3Byb2JlLAorCS5yZW1vdmUgPQl1c2JfaGNkX3BjaV9yZW1vdmUsCisKKyNpZmRlZglDT05GSUdfUE0KKwkuc3VzcGVuZCA9CXVzYl9oY2RfcGNpX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9oY2RfcGNpX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworIAorc3RhdGljIGludCBfX2luaXQgb2hjaV9oY2RfcGNpX2luaXQgKHZvaWQpIAoreworCXByaW50ayAoS0VSTl9ERUJVRyAiJXM6ICIgRFJJVkVSX0lORk8gIiAoUENJKVxuIiwgaGNkX25hbWUpOworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwcl9kZWJ1ZyAoIiVzOiBibG9jayBzaXplczogZWQgJVpkIHRkICVaZFxuIiwgaGNkX25hbWUsCisJCXNpemVvZiAoc3RydWN0IGVkKSwgc2l6ZW9mIChzdHJ1Y3QgdGQpKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlciAoJm9oY2lfcGNpX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCAob2hjaV9oY2RfcGNpX2luaXQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBfX2V4aXQgb2hjaV9oY2RfcGNpX2NsZWFudXAgKHZvaWQpIAorewkKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgKCZvaGNpX3BjaV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQgKG9oY2lfaGNkX3BjaV9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtc29jLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLXNvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OTY0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLXNvYy5jCkBAIC0wLDAgKzEsMjM0IEBACisvKgorICogT0hDSSBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCisgKgorICogKEMpIENvcHlyaWdodCAxOTk5IFJvbWFuIFdlaXNzZ2FlcmJlciA8d2Vpc3NnQHZpZW5uYS5hdD4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAyIERhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogKEMpIENvcHlyaWdodCAyMDAyIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKiAoQykgQ29weXJpZ2h0IDIwMDMtMjAwNSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqIAorICogQnVzIEdsdWUgZm9yIFBQQyBPbi1DaGlwIE9IQ0kgZHJpdmVyCisgKiBUZXN0ZWQgb24gRnJlZXNjYWxlIE1QQzUyMDAgYW5kIElCTSBTVEIwNHh4eAorICoKKyAqIE1vZGlmaWVkIGJ5IERhbGUgRmFybnN3b3J0aCA8ZGFsZUBmYXJuc3dvcnRoLm9yZz4gZnJvbSBvaGNpLXNhMTExMS5jCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKworI2luY2x1ZGUgPGFzbS91c2IuaD4KKworLyogY29uZmlndXJlIHNvIGFuIEhDIGRldmljZSBhbmQgaWQgYXJlIGFsd2F5cyBwcm92aWRlZCAqLworLyogYWx3YXlzIGNhbGxlZCB3aXRoIHByb2Nlc3MgY29udGV4dDsgc2xlZXBpbmcgaXMgT0sgKi8KKworLyoqCisgKiB1c2JfaGNkX3BwY19zb2NfcHJvYmUgLSBpbml0aWFsaXplIE9uLUNoaXAgSENEcworICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogQWxsb2NhdGVzIGJhc2ljIHJlc291cmNlcyBmb3IgdGhpcyBVU0IgaG9zdCBjb250cm9sbGVyLCBhbmQKKyAqIHRoZW4gaW52b2tlcyB0aGUgc3RhcnQoKSBtZXRob2QgZm9yIHRoZSBIQ0QgYXNzb2NpYXRlZCB3aXRoIGl0CisgKiB0aHJvdWdoIHRoZSBob3RwbHVnIGVudHJ5J3MgZHJpdmVyX2RhdGEuCisgKgorICogU3RvcmUgdGhpcyBmdW5jdGlvbiBpbiB0aGUgSENEJ3Mgc3RydWN0IHBjaV9kcml2ZXIgYXMgcHJvYmUoKS4KKyAqLworc3RhdGljIGludCB1c2JfaGNkX3BwY19zb2NfcHJvYmUoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAorCQkJICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXR2YWw7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKKwlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2k7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGlycTsKKwlzdHJ1Y3QgdXNiX2hjZF9wbGF0Zm9ybV9kYXRhICpwZCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJcHJfZGVidWcoImluaXRpYWxpemluZyBQUEMtU09DIFVTQiBDb250cm9sbGVyXG4iKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJcHJfZGVidWcoX19GSUxFX18gIjogbm8gaXJxXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlycSA9IHJlcy0+c3RhcnQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCXByX2RlYnVnKF9fRklMRV9fICI6IG5vIHJlZyBhZGRyXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoZHJpdmVyLCAmcGRldi0+ZGV2LCAiUFBDLVNPQyBVU0IiKTsKKwlpZiAoIWhjZCkKKwkJcmV0dXJuIC1FTk9NRU07CisJaGNkLT5yc3JjX3N0YXJ0ID0gcmVzLT5zdGFydDsKKwloY2QtPnJzcmNfbGVuID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwgaGNkX25hbWUpKSB7CisJCXByX2RlYnVnKF9fRklMRV9fICI6IHJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZXJyMTsKKwl9CisKKwloY2QtPnJlZ3MgPSBpb3JlbWFwKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJaWYgKCFoY2QtPnJlZ3MpIHsKKwkJcHJfZGVidWcoX19GSUxFX18gIjogaW9yZW1hcCBmYWlsZWRcbiIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycjI7CisJfQorCisJaWYgKHBkLT5zdGFydCAmJiAocmV0dmFsID0gcGQtPnN0YXJ0KHBkZXYpKSkKKwkJZ290byBlcnIzOworCisJb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CisJb2hjaS0+ZmxhZ3MgfD0gT0hDSV9CSUdfRU5ESUFOOworCW9oY2lfaGNkX2luaXQob2hjaSk7CisKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgU0FfSU5URVJSVVBUKTsKKwlpZiAocmV0dmFsID09IDApCisJCXJldHVybiByZXR2YWw7CisKKwlwcl9kZWJ1ZygiUmVtb3ZpbmcgUFBDLVNPQyBVU0IgQ29udHJvbGxlclxuIik7CisJaWYgKHBkICYmIHBkLT5zdG9wKQorCQlwZC0+c3RvcChwZGV2KTsKKyBlcnIzOgorCWlvdW5tYXAoaGNkLT5yZWdzKTsKKyBlcnIyOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworIGVycjE6CisgCXVzYl9wdXRfaGNkKGhjZCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKiBtYXkgYmUgY2FsbGVkIHdpdGhvdXQgY29udHJvbGxlciBlbGVjdHJpY2FsbHkgcHJlc2VudCAqLworLyogbWF5IGJlIGNhbGxlZCB3aXRoIGNvbnRyb2xsZXIsIGJ1cywgYW5kIGRldmljZXMgYWN0aXZlICovCisKKy8qKgorICogdXNiX2hjZF9wcGNfc29jX3JlbW92ZSAtIHNodXRkb3duIHByb2Nlc3NpbmcgZm9yIE9uLUNoaXAgSENEcworICogQHBkZXY6IFVTQiBIb3N0IENvbnRyb2xsZXIgYmVpbmcgcmVtb3ZlZAorICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogUmV2ZXJzZXMgdGhlIGVmZmVjdCBvZiB1c2JfaGNkX3BwY19zb2NfcHJvYmUoKSwgZmlyc3QgaW52b2tpbmcKKyAqIHRoZSBIQ0QncyBzdG9wKCkgbWV0aG9kLiAgSXQgaXMgYWx3YXlzIGNhbGxlZCBmcm9tIGEgdGhyZWFkCisgKiBjb250ZXh0LCBub3JtYWxseSAicm1tb2QiLCAiYXBtZCIsIG9yIHNvbWV0aGluZyBzaW1pbGFyLgorICoKKyAqLworc3RhdGljIHZvaWQgdXNiX2hjZF9wcGNfc29jX3JlbW92ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLAorCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2JfaGNkX3BsYXRmb3JtX2RhdGEgKnBkID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwl1c2JfcmVtb3ZlX2hjZChoY2QpOworCisJcHJfZGVidWcoInN0b3BwaW5nIFBQQy1TT0MgVVNCIENvbnRyb2xsZXJcbiIpOworCWlmIChwZCAmJiBwZC0+c3RvcCkKKwkJcGQtPnN0b3AocGRldik7CisKKwlpb3VubWFwKGhjZC0+cmVncyk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJdXNiX2hjZF9wdXQoaGNkKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQKK29oY2lfcHBjX3NvY19zdGFydChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CisJaW50CQlyZXQ7CisKKwlpZiAoKHJldCA9IG9oY2lfaW5pdChvaGNpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKChyZXQgPSBvaGNpX3J1bihvaGNpKSkgPCAwKSB7CisJCWVycigiY2FuJ3Qgc3RhcnQgJXMiLCBvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5idXNfbmFtZSk7CisJCW9oY2lfc3RvcChoY2QpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhjX2RyaXZlciBvaGNpX3BwY19zb2NfaGNfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbiA9CQloY2RfbmFtZSwKKwkuaGNkX3ByaXZfc2l6ZSA9CXNpemVvZihzdHJ1Y3Qgb2hjaV9oY2QpLAorCisJLyoKKwkgKiBnZW5lcmljIGhhcmR3YXJlIGxpbmthZ2UKKwkgKi8KKwkuaXJxID0JCQlvaGNpX2lycSwKKwkuZmxhZ3MgPQkJSENEX1VTQjExIHwgSENEX01FTU9SWSwKKworCS8qCisJICogYmFzaWMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMKKwkgKi8KKwkuc3RhcnQgPQkJb2hjaV9wcGNfc29jX3N0YXJ0LAorCS5zdG9wID0JCQlvaGNpX3N0b3AsCisKKwkvKgorCSAqIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzCisJICovCisJLnVyYl9lbnF1ZXVlID0JCW9oY2lfdXJiX2VucXVldWUsCisJLnVyYl9kZXF1ZXVlID0JCW9oY2lfdXJiX2RlcXVldWUsCisJLmVuZHBvaW50X2Rpc2FibGUgPQlvaGNpX2VuZHBvaW50X2Rpc2FibGUsCisKKwkvKgorCSAqIHNjaGVkdWxpbmcgc3VwcG9ydAorCSAqLworCS5nZXRfZnJhbWVfbnVtYmVyID0Jb2hjaV9nZXRfZnJhbWUsCisKKwkvKgorCSAqIHJvb3QgaHViIHN1cHBvcnQKKwkgKi8KKwkuaHViX3N0YXR1c19kYXRhID0Jb2hjaV9odWJfc3RhdHVzX2RhdGEsCisJLmh1Yl9jb250cm9sID0JCW9oY2lfaHViX2NvbnRyb2wsCisjaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECisJLmh1Yl9zdXNwZW5kID0JCW9oY2lfaHViX3N1c3BlbmQsCisJLmh1Yl9yZXN1bWUgPQkJb2hjaV9odWJfcmVzdW1lLAorI2VuZGlmCisJLnN0YXJ0X3BvcnRfcmVzZXQgPQlvaGNpX3N0YXJ0X3BvcnRfcmVzZXQsCit9OworCitzdGF0aWMgaW50IG9oY2lfaGNkX3BwY19zb2NfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJaW50IHJldDsKKworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSB1c2JfaGNkX3BwY19zb2NfcHJvYmUoJm9oY2lfcHBjX3NvY19oY19kcml2ZXIsIHBkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9oY2RfcHBjX3NvY19kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJdXNiX2hjZF9wcGNfc29jX3JlbW92ZShoY2QsIHBkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgb2hjaV9oY2RfcHBjX3NvY19kcml2ZXIgPSB7CisJLm5hbWUJCT0gInBwYy1zb2Mtb2hjaSIsCisJLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCisJLnByb2JlCQk9IG9oY2lfaGNkX3BwY19zb2NfZHJ2X3Byb2JlLAorCS5yZW1vdmUJCT0gb2hjaV9oY2RfcHBjX3NvY19kcnZfcmVtb3ZlLAorI2lmCWRlZmluZWQoQ09ORklHX1VTQl9TVVNQRU5EKSB8fCBkZWZpbmVkKENPTkZJR19QTSkKKwkvKi5zdXNwZW5kCT0gb2hjaV9oY2RfcHBjX3NvY19kcnZfc3VzcGVuZCwqLworCS8qLnJlc3VtZQk9IG9oY2lfaGNkX3BwY19zb2NfZHJ2X3Jlc3VtZSwqLworI2VuZGlmCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvaGNpX2hjZF9wcGNfc29jX2luaXQodm9pZCkKK3sKKwlwcl9kZWJ1ZyhEUklWRVJfSU5GTyAiIChQUEMgU09DKVxuIik7CisJcHJfZGVidWcoImJsb2NrIHNpemVzOiBlZCAlZCB0ZCAlZFxuIiwgc2l6ZW9mKHN0cnVjdCBlZCksCisJCQkJCQkJc2l6ZW9mKHN0cnVjdCB0ZCkpOworCisJcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfcHBjX3NvY19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb2hjaV9oY2RfcHBjX3NvY19jbGVhbnVwKHZvaWQpCit7CisJZHJpdmVyX3VucmVnaXN0ZXIoJm9oY2lfaGNkX3BwY19zb2NfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQob2hjaV9oY2RfcHBjX3NvY19pbml0KTsKK21vZHVsZV9leGl0KG9oY2lfaGNkX3BwY19zb2NfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYzNDY0YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwpAQCAtMCwwICsxLDM4MyBAQAorLyoKKyAqIE9IQ0kgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+CisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMiBEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIEJ1cyBHbHVlIGZvciBweGEyN3gKKyAqCisgKiBXcml0dGVuIGJ5IENocmlzdG9waGVyIEhvb3ZlciA8Y2hAaHBsLmhwLmNvbT4KKyAqIEJhc2VkIG9uIGZyYWdtZW50cyBvZiBwcmV2aW91cyBkcml2ZXIgYnkgUnVzc2VsbCBLaW5nIGV0IGFsLgorICoKKyAqIE1vZGlmaWVkIGZvciBMSDdBNDA0IGZyb20gb2hjaS1zYTExMTEuYworICogIGJ5IER1cmdlc2ggUGF0dGFtYXR0YSA8cGF0dGFtYXR0YWRAc2hhcnBzZWMuY29tPgorICoKKyAqIE1vZGlmaWVkIGZvciBweGEyN3ggZnJvbSBvaGNpLWxoN2E0MDQuYworICogIGJ5IE5pY2sgQmFuZSA8bmlja0BjZWNvbXB1dGluZy5jby51az4gMjYtOC0yMDA0CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKworCisjZGVmaW5lIFBNTV9OUFNfTU9ERSAgICAgICAgICAgMQorI2RlZmluZSBQTU1fR0xPQkFMX01PREUgICAgICAgIDIKKyNkZWZpbmUgUE1NX1BFUlBPUlRfTU9ERSAgICAgICAzCisKKyNkZWZpbmUgUFhBX1VIQ19NQVhfUE9SVE5VTSAgICAzCisKKyNkZWZpbmUgVUhDUkhQUyh4KSAgICAgICAgICAgICAgX19SRUcyKCAweDRDMDAwMDUwLCAoeCk8PDIgKQorCitzdGF0aWMgaW50IHB4YTI3eF9vaGNpX3BtbV9zdGF0ZTsKKworLyoKKyAgUE1NX05QU19NT0RFIC0tIFBNTSBOb24tcG93ZXIgc3dpdGNoaW5nIG1vZGUKKyAgICAgIFBvcnRzIGFyZSBwb3dlcmVkIGNvbnRpbnVvdXNseS4KKworICBQTU1fR0xPQkFMX01PREUgLS0gUE1NIGdsb2JhbCBzd2l0Y2hpbmcgbW9kZQorICAgICAgQWxsIHBvcnRzIGFyZSBwb3dlcmVkIGF0IHRoZSBzYW1lIHRpbWUuCisKKyAgUE1NX1BFUlBPUlRfTU9ERSAtLSBQTU0gcGVyIHBvcnQgc3dpdGNoaW5nIG1vZGUKKyAgICAgIFBvcnRzIGFyZSBwb3dlcmVkIGluZGl2aWR1YWxseS4KKyAqLworc3RhdGljIGludCBweGEyN3hfb2hjaV9zZWxlY3RfcG1tKCBpbnQgbW9kZSApCit7CisJcHhhMjd4X29oY2lfcG1tX3N0YXRlID0gbW9kZTsKKworCXN3aXRjaCAoIG1vZGUgKSB7CisJY2FzZSBQTU1fTlBTX01PREU6CisJCVVIQ1JIREEgfD0gUkhfQV9OUFM7CisJCWJyZWFrOyAKKwljYXNlIFBNTV9HTE9CQUxfTU9ERToKKwkJVUhDUkhEQSAmPSB+KFJIX0FfTlBTICYgUkhfQV9QU00pOworCQlicmVhazsKKwljYXNlIFBNTV9QRVJQT1JUX01PREU6CisJCVVIQ1JIREEgJj0gfihSSF9BX05QUyk7CisJCVVIQ1JIREEgfD0gUkhfQV9QU007CisKKwkJLyogU2V0IHBvcnQgcG93ZXIgY29udHJvbCBtYXNrIGJpdHMsIG9ubHkgMyBwb3J0cy4gKi8KKwkJVUhDUkhEQiB8PSAoMHg3PDwxNyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayggS0VSTl9FUlIKKwkJCSJJbnZhbGlkIG1vZGUgJWQsIHNldCB0byBub24tcG93ZXIgc3dpdGNoIG1vZGUuXG4iLCAKKwkJCW1vZGUgKTsKKworCQlweGEyN3hfb2hjaV9wbW1fc3RhdGUgPSBQTU1fTlBTX01PREU7CisJCVVIQ1JIREEgfD0gUkhfQV9OUFM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgIElmIHlvdSBzZWxlY3QgUE1NX1BFUlBPUlRfTU9ERSwgeW91IHNob3VsZCBzZXQgdGhlIHBvcnQgcG93ZXIKKyAqLworc3RhdGljIGludCBweGEyN3hfb2hjaV9zZXRfcG9ydF9wb3dlciggaW50IHBvcnQgKQoreworCWlmICggKHB4YTI3eF9vaGNpX3BtbV9zdGF0ZT09UE1NX1BFUlBPUlRfTU9ERSkKKwkgICAgICYmIChwb3J0PjApICYmIChwb3J0PFBYQV9VSENfTUFYX1BPUlROVU0pICkgeworCQlVSENSSFBTKHBvcnQpIHw9IDB4MTAwOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC0xOworfQorCisvKgorICBJZiB5b3Ugc2VsZWN0IFBNTV9QRVJQT1JUX01PREUsIHlvdSBzaG91bGQgc2V0IHRoZSBwb3J0IHBvd2VyCisgKi8KK3N0YXRpYyBpbnQgcHhhMjd4X29oY2lfY2xlYXJfcG9ydF9wb3dlciggaW50IHBvcnQgKQoreworCWlmICggKHB4YTI3eF9vaGNpX3BtbV9zdGF0ZT09UE1NX1BFUlBPUlRfTU9ERSkgCisJICAgICAmJiAocG9ydD4wKSAmJiAocG9ydDxQWEFfVUhDX01BWF9QT1JUTlVNKSApIHsKKwkJVUhDUkhQUyhwb3J0KSB8PSAweDIwMDsKKwkJcmV0dXJuIDA7CisJfQorCSAKKwlyZXR1cm4gLTE7Cit9CisKK2V4dGVybiBpbnQgdXNiX2Rpc2FibGVkKHZvaWQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBweGEyN3hfc3RhcnRfaGMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXB4YV9zZXRfY2tlbihDS0VOMTBfVVNCSE9TVCwgMSk7CisKKwlVSENIUiB8PSBVSENIUl9GSFI7CisJdWRlbGF5KDExKTsKKwlVSENIUiAmPSB+VUhDSFJfRkhSOworCisJVUhDSFIgfD0gVUhDSFJfRlNCSVI7CisJd2hpbGUgKFVIQ0hSICYgVUhDSFJfRlNCSVIpCisJCWNwdV9yZWxheCgpOworCisJLyogVGhpcyBjb3VsZCBiZSBwcm9wZXJseSBhYnN0cmFjdGVkIGF3YXkgdGhyb3VnaCB0aGUKKwkgICBkZXZpY2UgZGF0YSB0aGUgZGF5IG1vcmUgbWFjaGluZXMgYXJlIHN1cHBvcnRlZCBhbmQKKwkgICB0aGVpciBkaWZmZXJlbmNlcyBjYW4gYmUgZmlndXJlZCBvdXQgY29ycmVjdGx5LiAqLworCWlmIChtYWNoaW5lX2lzX21haW5zdG9uZSgpKSB7CisJCS8qIHNldHVwIFBvcnQxIEdQSU8gcGluLiAqLworCQlweGFfZ3Bpb19tb2RlKCA4OCB8IEdQSU9fQUxUX0ZOXzFfSU4pOwkvKiBVU0JIUFdSMSAqLworCQlweGFfZ3Bpb19tb2RlKCA4OSB8IEdQSU9fQUxUX0ZOXzJfT1VUKTsJLyogVVNCSFBFTjEgKi8KKworCQkvKiBTZXQgdGhlIFBvd2VyIENvbnRyb2wgUG9sYXJpdHkgTG93IGFuZCBQb3dlciBTZW5zZQorCQkgICBQb2xhcml0eSBMb3cgdG8gYWN0aXZlIGxvdy4gU3VwcGx5IHBvd2VyIHRvIFVTQiBwb3J0cy4gKi8KKwkJVUhDSFIgPSAoVUhDSFIgfCBVSENIUl9QQ1BMIHwgVUhDSFJfUFNQTCkgJgorCQkJfihVSENIUl9TU0VQMSB8IFVIQ0hSX1NTRVAyIHwgVUhDSFJfU1NFUDMgfCBVSENIUl9TU0UpOworCX0KKworCVVIQ0hSICY9IH5VSENIUl9TU0U7CisKKwlVSENISUUgPSAoVUhDSElFX1VQUklFIHwgVUhDSElFX1JXSUUpOworfQorCitzdGF0aWMgdm9pZCBweGEyN3hfc3RvcF9oYyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJVUhDSFIgfD0gVUhDSFJfRkhSOworCXVkZWxheSgxMSk7CisJVUhDSFIgJj0gflVIQ0hSX0ZIUjsKKworCVVIQ0NPTVMgfD0gMTsKKwl1ZGVsYXkoMTApOworCisJcHhhX3NldF9ja2VuKENLRU4xMF9VU0JIT1NULCAwKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBjb25maWd1cmUgc28gYW4gSEMgZGV2aWNlIGFuZCBpZCBhcmUgYWx3YXlzIHByb3ZpZGVkICovCisvKiBhbHdheXMgY2FsbGVkIHdpdGggcHJvY2VzcyBjb250ZXh0OyBzbGVlcGluZyBpcyBPSyAqLworCisKKy8qKgorICogdXNiX2hjZF9weGEyN3hfcHJvYmUgLSBpbml0aWFsaXplIHB4YTI3eC1iYXNlZCBIQ0RzCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBBbGxvY2F0ZXMgYmFzaWMgcmVzb3VyY2VzIGZvciB0aGlzIFVTQiBob3N0IGNvbnRyb2xsZXIsIGFuZAorICogdGhlbiBpbnZva2VzIHRoZSBzdGFydCgpIG1ldGhvZCBmb3IgdGhlIEhDRCBhc3NvY2lhdGVkIHdpdGggaXQKKyAqIHRocm91Z2ggdGhlIGhvdHBsdWcgZW50cnkncyBkcml2ZXJfZGF0YS4KKyAqCisgKi8KK2ludCB1c2JfaGNkX3B4YTI3eF9wcm9iZSAoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAorCQkJICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCisJaWYgKGRldi0+cmVzb3VyY2VbMV0uZmxhZ3MgIT0gSU9SRVNPVVJDRV9JUlEpIHsKKwkJcHJfZGVidWcgKCJyZXNvdXJjZVsxXSBpcyBub3QgSU9SRVNPVVJDRV9JUlEiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaGNkID0gdXNiX2NyZWF0ZV9oY2QgKGRyaXZlciwgJmRldi0+ZGV2LCAicHhhMjd4Iik7CisJaWYgKCFoY2QpCisJCXJldHVybiAtRU5PTUVNOworCWhjZC0+cnNyY19zdGFydCA9IGRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7CisJaGNkLT5yc3JjX2xlbiA9IGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDE7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4sIGhjZF9uYW1lKSkgeworCQlwcl9kZWJ1ZygicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZCIpOworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZXJyMTsKKwl9CisKKwloY2QtPnJlZ3MgPSBpb3JlbWFwKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJaWYgKCFoY2QtPnJlZ3MpIHsKKwkJcHJfZGVidWcoImlvcmVtYXAgZmFpbGVkIik7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMjsKKwl9CisKKwlweGEyN3hfc3RhcnRfaGMoZGV2KTsKKworCS8qIFNlbGVjdCBQb3dlciBNYW5hZ2VtZW50IE1vZGUgKi8KKwlweGEyN3hfb2hjaV9zZWxlY3RfcG1tKCBQTU1fUEVSUE9SVF9NT0RFICk7CisKKwkvKiBJZiBjaG9vc2luZyBQTU1fUEVSUE9SVF9NT0RFLCB3ZSBzaG91bGQgc2V0IHRoZSBwb3J0IHBvd2VyIGJlZm9yZSB3ZSB1c2UgaXQuICovCisJaWYgKHB4YTI3eF9vaGNpX3NldF9wb3J0X3Bvd2VyKDEpIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJTZXR0aW5nIHBvcnQgMSBwb3dlciBmYWlsZWQuXG4iKTsKKworCWlmIChweGEyN3hfb2hjaV9jbGVhcl9wb3J0X3Bvd2VyKDIpIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJTZXR0aW5nIHBvcnQgMiBwb3dlciBmYWlsZWQuXG4iKTsKKworCWlmIChweGEyN3hfb2hjaV9jbGVhcl9wb3J0X3Bvd2VyKDMpIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJTZXR0aW5nIHBvcnQgMyBwb3dlciBmYWlsZWQuXG4iKTsKKworCW9oY2lfaGNkX2luaXQoaGNkX3RvX29oY2koaGNkKSk7CisKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGRldi0+cmVzb3VyY2VbMV0uc3RhcnQsIFNBX0lOVEVSUlVQVCk7CisJaWYgKHJldHZhbCA9PSAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJcHhhMjd4X3N0b3BfaGMoZGV2KTsKKwlpb3VubWFwKGhjZC0+cmVncyk7CisgZXJyMjoKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKyBlcnIxOgorCXVzYl9wdXRfaGNkKGhjZCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKiBtYXkgYmUgY2FsbGVkIHdpdGhvdXQgY29udHJvbGxlciBlbGVjdHJpY2FsbHkgcHJlc2VudCAqLworLyogbWF5IGJlIGNhbGxlZCB3aXRoIGNvbnRyb2xsZXIsIGJ1cywgYW5kIGRldmljZXMgYWN0aXZlICovCisKKy8qKgorICogdXNiX2hjZF9weGEyN3hfcmVtb3ZlIC0gc2h1dGRvd24gcHJvY2Vzc2luZyBmb3IgcHhhMjd4LWJhc2VkIEhDRHMKKyAqIEBkZXY6IFVTQiBIb3N0IENvbnRyb2xsZXIgYmVpbmcgcmVtb3ZlZAorICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogUmV2ZXJzZXMgdGhlIGVmZmVjdCBvZiB1c2JfaGNkX3B4YTI3eF9wcm9iZSgpLCBmaXJzdCBpbnZva2luZworICogdGhlIEhDRCdzIHN0b3AoKSBtZXRob2QuICBJdCBpcyBhbHdheXMgY2FsbGVkIGZyb20gYSB0aHJlYWQKKyAqIGNvbnRleHQsIG5vcm1hbGx5ICJybW1vZCIsICJhcG1kIiwgb3Igc29tZXRoaW5nIHNpbWlsYXIuCisgKgorICovCit2b2lkIHVzYl9oY2RfcHhhMjd4X3JlbW92ZSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisJcHhhMjd4X3N0b3BfaGMoZGV2KTsKKwlpb3VubWFwKGhjZC0+cmVncyk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJdXNiX3B1dF9oY2QoaGNkKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2RldmluaXQKK29oY2lfcHhhMjd4X3N0YXJ0IChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCWludAkJcmV0OworCisJb2hjaV9kYmcgKG9oY2ksICJvaGNpX3B4YTI3eF9zdGFydCwgb2hjaTolcCIsIG9oY2kpOworCisJaWYgKChyZXQgPSBvaGNpX2luaXQob2hjaSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmICgocmV0ID0gb2hjaV9ydW4gKG9oY2kpKSA8IDApIHsKKwkJZXJyICgiY2FuJ3Qgc3RhcnQgJXMiLCBoY2QtPnNlbGYuYnVzX25hbWUpOworCQlvaGNpX3N0b3AgKGhjZCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIG9oY2lfcHhhMjd4X2hjX2RyaXZlciA9IHsKKwkuZGVzY3JpcHRpb24gPQkJaGNkX25hbWUsCisJLnByb2R1Y3RfZGVzYyA9CQkiUFhBMjd4IE9IQ0kiLAorCS5oY2RfcHJpdl9zaXplID0Jc2l6ZW9mKHN0cnVjdCBvaGNpX2hjZCksCisKKwkvKgorCSAqIGdlbmVyaWMgaGFyZHdhcmUgbGlua2FnZQorCSAqLworCS5pcnEgPQkJCW9oY2lfaXJxLAorCS5mbGFncyA9CQlIQ0RfVVNCMTEgfCBIQ0RfTUVNT1JZLAorCisJLyoKKwkgKiBiYXNpYyBsaWZlY3ljbGUgb3BlcmF0aW9ucworCSAqLworCS5zdGFydCA9CQlvaGNpX3B4YTI3eF9zdGFydCwKKwkuc3RvcCA9CQkJb2hjaV9zdG9wLAorCisJLyoKKwkgKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcworCSAqLworCS51cmJfZW5xdWV1ZSA9CQlvaGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZSA9CQlvaGNpX3VyYl9kZXF1ZXVlLAorCS5lbmRwb2ludF9kaXNhYmxlID0Jb2hjaV9lbmRwb2ludF9kaXNhYmxlLAorCisJLyoKKwkgKiBzY2hlZHVsaW5nIHN1cHBvcnQKKwkgKi8KKwkuZ2V0X2ZyYW1lX251bWJlciA9CW9oY2lfZ2V0X2ZyYW1lLAorCisJLyoKKwkgKiByb290IGh1YiBzdXBwb3J0CisJICovCisJLmh1Yl9zdGF0dXNfZGF0YSA9CW9oY2lfaHViX3N0YXR1c19kYXRhLAorCS5odWJfY29udHJvbCA9CQlvaGNpX2h1Yl9jb250cm9sLAorI2lmZGVmICBDT05GSUdfVVNCX1NVU1BFTkQKKwkuaHViX3N1c3BlbmQgPQkJb2hjaV9odWJfc3VzcGVuZCwKKwkuaHViX3Jlc3VtZSA9CQlvaGNpX2h1Yl9yZXN1bWUsCisjZW5kaWYKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCWludCByZXQ7CisKKwlwcl9kZWJ1ZyAoIkluIG9oY2lfaGNkX3B4YTI3eF9kcnZfcHJvYmUiKTsKKworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSB1c2JfaGNkX3B4YTI3eF9wcm9iZSgmb2hjaV9weGEyN3hfaGNfZHJpdmVyLCBwZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJdXNiX2hjZF9weGEyN3hfcmVtb3ZlKGhjZCwgcGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN0YXRlLCB1MzIgbGV2ZWwpCit7CisvLwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisvLwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJcHJpbnRrKCIlczogbm90IGltcGxlbWVudGVkIHlldFxuIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN0YXRlKQoreworLy8Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworLy8Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXByaW50aygiJXM6IG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgb2hjaV9oY2RfcHhhMjd4X2RyaXZlciA9IHsKKwkubmFtZQkJPSAicHhhMjd4LW9oY2kiLAorCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorCS5wcm9iZQkJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3Byb2JlLAorCS5yZW1vdmUJCT0gb2hjaV9oY2RfcHhhMjd4X2Rydl9yZW1vdmUsCisJLnN1c3BlbmQJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3N1c3BlbmQsIAorCS5yZXN1bWUJCT0gb2hjaV9oY2RfcHhhMjd4X2Rydl9yZXN1bWUsIAorfTsKKworc3RhdGljIGludCBfX2luaXQgb2hjaV9oY2RfcHhhMjd4X2luaXQgKHZvaWQpCit7CisJcHJfZGVidWcgKERSSVZFUl9JTkZPICIgKHB4YTI3eCkiKTsKKwlwcl9kZWJ1ZyAoImJsb2NrIHNpemVzOiBlZCAlZCB0ZCAlZFxuIiwKKwkJc2l6ZW9mIChzdHJ1Y3QgZWQpLCBzaXplb2YgKHN0cnVjdCB0ZCkpOworCisJcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfcHhhMjd4X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvaGNpX2hjZF9weGEyN3hfY2xlYW51cCAodm9pZCkKK3sKKwlkcml2ZXJfdW5yZWdpc3Rlcigmb2hjaV9oY2RfcHhhMjd4X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0IChvaGNpX2hjZF9weGEyN3hfaW5pdCk7Cittb2R1bGVfZXhpdCAob2hjaV9oY2RfcHhhMjd4X2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXEuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkwMTE0YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1xLmMKQEAgLTAsMCArMSwxMTA3IEBACisvKgorICogT0hDSSBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCisgKiAKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+CisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMiBEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqIAorICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKworc3RhdGljIHZvaWQgdXJiX2ZyZWVfcHJpdiAoc3RydWN0IG9oY2lfaGNkICpoYywgdXJiX3ByaXZfdCAqdXJiX3ByaXYpCit7CisJaW50CQlsYXN0ID0gdXJiX3ByaXYtPmxlbmd0aCAtIDE7CisKKwlpZiAobGFzdCA+PSAwKSB7CisJCWludAkJaTsKKwkJc3RydWN0IHRkCSp0ZDsKKworCQlmb3IgKGkgPSAwOyBpIDw9IGxhc3Q7IGkrKykgeworCQkJdGQgPSB1cmJfcHJpdi0+dGQgW2ldOworCQkJaWYgKHRkKQorCQkJCXRkX2ZyZWUgKGhjLCB0ZCk7CisJCX0KKwl9CisKKwlsaXN0X2RlbCAoJnVyYl9wcml2LT5wZW5kaW5nKTsKKwlrZnJlZSAodXJiX3ByaXYpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogVVJCIGdvZXMgYmFjayB0byBkcml2ZXIsIGFuZCBpc24ndCByZWlzc3VlZC4KKyAqIEl0J3MgY29tcGxldGVseSBnb25lIGZyb20gSEMgZGF0YSBzdHJ1Y3R1cmVzLgorICogUFJFQ09ORElUSU9OOiAgb2hjaSBsb2NrIGhlbGQsIGlycXMgYmxvY2tlZC4KKyAqLworc3RhdGljIHZvaWQKK2ZpbmlzaF91cmIgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK19fcmVsZWFzZXMob2hjaS0+bG9jaykKK19fYWNxdWlyZXMob2hjaS0+bG9jaykKK3sKKwkvLyBBU1NFUlQgKHVyYi0+aGNwcml2ICE9IDApOworCisJdXJiX2ZyZWVfcHJpdiAob2hjaSwgdXJiLT5oY3ByaXYpOworCXVyYi0+aGNwcml2ID0gTlVMTDsKKworCXNwaW5fbG9jayAoJnVyYi0+bG9jayk7CisJaWYgKGxpa2VseSAodXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSkKKwkJdXJiLT5zdGF0dXMgPSAwOworCS8qIHJlcG9ydCBzaG9ydCBjb250cm9sIHJlYWRzIHJpZ2h0IGV2ZW4gdGhvdWdoIHRoZSBkYXRhIFREIGFsd2F5cworCSAqIGhhcyBURF9SIHNldC4gIChtdWNoIHNpbXBsZXIsIGJ1dCBjcmVhdGVzIHRoZSAxLXRkIGxpbWl0LikKKwkgKi8KKwlpZiAodW5saWtlbHkgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKQorCQkJJiYgdW5saWtlbHkgKHVzYl9waXBlY29udHJvbCAodXJiLT5waXBlKSkKKwkJCSYmIHVyYi0+YWN0dWFsX2xlbmd0aCA8IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aAorCQkJJiYgdXNiX3BpcGVpbiAodXJiLT5waXBlKQorCQkJJiYgdXJiLT5zdGF0dXMgPT0gMCkgeworCQl1cmItPnN0YXR1cyA9IC1FUkVNT1RFSU87CisJfQorCXNwaW5fdW5sb2NrICgmdXJiLT5sb2NrKTsKKworCXN3aXRjaCAodXNiX3BpcGV0eXBlICh1cmItPnBpcGUpKSB7CisJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQlvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzLS07CisJCWJyZWFrOworCWNhc2UgUElQRV9JTlRFUlJVUFQ6CisJCW9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmJhbmR3aWR0aF9pbnRfcmVxcy0tOworCQlicmVhazsKKwl9CisKKyNpZmRlZiBPSENJX1ZFUkJPU0VfREVCVUcKKwl1cmJfcHJpbnQgKHVyYiwgIlJFVCIsIHVzYl9waXBlb3V0ICh1cmItPnBpcGUpKTsKKyNlbmRpZgorCisJLyogdXJiLT5jb21wbGV0ZSgpIGNhbiByZWVudGVyIHRoaXMgSENEICovCisJc3Bpbl91bmxvY2sgKCZvaGNpLT5sb2NrKTsKKwl1c2JfaGNkX2dpdmViYWNrX3VyYiAob2hjaV90b19oY2Qob2hjaSksIHVyYiwgcmVncyk7CisJc3Bpbl9sb2NrICgmb2hjaS0+bG9jayk7CisKKwkvKiBzdG9wIHBlcmlvZGljIGRtYSBpZiBpdCdzIG5vdCBuZWVkZWQgKi8KKwlpZiAob2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcyA9PSAwCisJCQkmJiBvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfaW50X3JlcXMgPT0gMCkgeworCQlvaGNpLT5oY19jb250cm9sICY9IH4oT0hDSV9DVFJMX1BMRXxPSENJX0NUUkxfSUUpOworCQlvaGNpX3dyaXRlbCAob2hjaSwgb2hjaS0+aGNfY29udHJvbCwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCX0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBFRCBoYW5kbGluZyBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovICAKKworLyogc2VhcmNoIGZvciB0aGUgcmlnaHQgc2NoZWR1bGUgYnJhbmNoIHRvIHVzZSBmb3IgYSBwZXJpb2RpYyBlZC4KKyAqIGRvZXMgc29tZSBsb2FkIGJhbGFuY2luZzsgcmV0dXJucyB0aGUgYnJhbmNoLCBvciBuZWdhdGl2ZSBlcnJuby4KKyAqLworc3RhdGljIGludCBiYWxhbmNlIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGludCBpbnRlcnZhbCwgaW50IGxvYWQpCit7CisJaW50CWksIGJyYW5jaCA9IC1FTk9TUEM7CisKKwkvKiBpc28gcGVyaW9kcyBjYW4gYmUgaHVnZTsgaXNvIHRkcyBzcGVjaWZ5IGZyYW1lIG51bWJlcnMgKi8KKwlpZiAoaW50ZXJ2YWwgPiBOVU1fSU5UUykKKwkJaW50ZXJ2YWwgPSBOVU1fSU5UUzsKKworCS8qIHNlYXJjaCBmb3IgdGhlIGxlYXN0IGxvYWRlZCBzY2hlZHVsZSBicmFuY2ggb2YgdGhhdCBwZXJpb2QKKwkgKiB0aGF0IGhhcyBlbm91Z2ggYmFuZHdpZHRoIGxlZnQgdW5yZXNlcnZlZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW50ZXJ2YWwgOyBpKyspIHsKKwkJaWYgKGJyYW5jaCA8IDAgfHwgb2hjaS0+bG9hZCBbYnJhbmNoXSA+IG9oY2ktPmxvYWQgW2ldKSB7CisjaWYgMQkvKiBDT05GSUdfVVNCX0JBTkRXSURUSCAqLworCQkJaW50CWo7CisKKwkJCS8qIHVzYiAxLjEgc2F5cyA5MCUgb2Ygb25lIGZyYW1lICovCisJCQlmb3IgKGogPSBpOyBqIDwgTlVNX0lOVFM7IGogKz0gaW50ZXJ2YWwpIHsKKwkJCQlpZiAoKG9oY2ktPmxvYWQgW2pdICsgbG9hZCkgPiA5MDApCisJCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGogPCBOVU1fSU5UUykKKwkJCQljb250aW51ZTsKKyNlbmRpZgorCQkJYnJhbmNoID0gaTsgCisJCX0KKwl9CisJcmV0dXJuIGJyYW5jaDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogYm90aCBpc28gYW5kIGludGVycnVwdCByZXF1ZXN0cyBoYXZlIHBlcmlvZHM7IHRoaXMgcm91dGluZSBwdXRzIHRoZW0KKyAqIGludG8gdGhlIHNjaGVkdWxlIHRyZWUgaW4gdGhlIGFwcHByb3ByaWF0ZSBwbGFjZS4gIG1vc3QgaXNvIGRldmljZXMgdXNlCisgKiAxbXNlYyBwZXJpb2RzLCBidXQgdGhhdCdzIG5vdCByZXF1aXJlZC4KKyAqLworc3RhdGljIHZvaWQgcGVyaW9kaWNfbGluayAoc3RydWN0IG9oY2lfaGNkICpvaGNpLCBzdHJ1Y3QgZWQgKmVkKQoreworCXVuc2lnbmVkCWk7CisKKwlvaGNpX3ZkYmcgKG9oY2ksICJsaW5rICVzZWQgJXAgYnJhbmNoICVkIFslZHVzLl0sIGludGVydmFsICVkXG4iLAorCQkoZWQtPmh3SU5GTyAmIGNwdV90b19oYzMyIChvaGNpLCBFRF9JU08pKSA/ICJpc28gIiA6ICIiLAorCQllZCwgZWQtPmJyYW5jaCwgZWQtPmxvYWQsIGVkLT5pbnRlcnZhbCk7CisKKwlmb3IgKGkgPSBlZC0+YnJhbmNoOyBpIDwgTlVNX0lOVFM7IGkgKz0gZWQtPmludGVydmFsKSB7CisJCXN0cnVjdCBlZAkqKnByZXYgPSAmb2hjaS0+cGVyaW9kaWMgW2ldOworCQlfX2hjMzIJCSpwcmV2X3AgPSAmb2hjaS0+aGNjYS0+aW50X3RhYmxlIFtpXTsKKwkJc3RydWN0IGVkCSpoZXJlID0gKnByZXY7CisKKwkJLyogc29ydGluZyBlYWNoIGJyYW5jaCBieSBwZXJpb2QgKHNsb3cgYmVmb3JlIGZhc3QpCisJCSAqIGxldHMgdXMgc2hhcmUgdGhlIGZhc3RlciBwYXJ0cyBvZiB0aGUgdHJlZS4KKwkJICogKHBsdXMgbWF5YmU6IHB1dCBpbnRlcnJ1cHQgZWRzIGJlZm9yZSBpc28pCisJCSAqLworCQl3aGlsZSAoaGVyZSAmJiBlZCAhPSBoZXJlKSB7CisJCQlpZiAoZWQtPmludGVydmFsID4gaGVyZS0+aW50ZXJ2YWwpCisJCQkJYnJlYWs7CisJCQlwcmV2ID0gJmhlcmUtPmVkX25leHQ7CisJCQlwcmV2X3AgPSAmaGVyZS0+aHdOZXh0RUQ7CisJCQloZXJlID0gKnByZXY7CisJCX0KKwkJaWYgKGVkICE9IGhlcmUpIHsKKwkJCWVkLT5lZF9uZXh0ID0gaGVyZTsKKwkJCWlmIChoZXJlKQorCQkJCWVkLT5od05leHRFRCA9ICpwcmV2X3A7CisJCQl3bWIgKCk7CisJCQkqcHJldiA9IGVkOworCQkJKnByZXZfcCA9IGNwdV90b19oYzMyKG9oY2ksIGVkLT5kbWEpOworCQkJd21iKCk7CisJCX0KKwkJb2hjaS0+bG9hZCBbaV0gKz0gZWQtPmxvYWQ7CisJfQorCW9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmJhbmR3aWR0aF9hbGxvY2F0ZWQgKz0gZWQtPmxvYWQgLyBlZC0+aW50ZXJ2YWw7Cit9CisKKy8qIGxpbmsgYW4gZWQgaW50byBvbmUgb2YgdGhlIEhDIGNoYWlucyAqLworCitzdGF0aWMgaW50IGVkX3NjaGVkdWxlIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIHN0cnVjdCBlZCAqZWQpCit7CSAKKwlpbnQJYnJhbmNoOworCisJaWYgKG9oY2lfdG9faGNkKG9oY2kpLT5zdGF0ZSA9PSBIQ19TVEFURV9RVUlFU0NJTkcpCisJCXJldHVybiAtRUFHQUlOOworCisJZWQtPnN0YXRlID0gRURfT1BFUjsKKwllZC0+ZWRfcHJldiA9IE5VTEw7CisJZWQtPmVkX25leHQgPSBOVUxMOworCWVkLT5od05leHRFRCA9IDA7CisJd21iICgpOworCisJLyogd2UgY2FyZSBhYm91dCBybV9saXN0IHdoZW4gc2V0dGluZyBDTEUvQkxFIGluIGNhc2UgdGhlIEhDIHdhcyBhdAorCSAqIHdvcmsgb24gc29tZSBURCB3aGVuIENMRS9CTEUgd2FzIHR1cm5lZCBvZmYsIGFuZCBpc24ndCBxdWllc2NlZAorCSAqIHlldC4gIGZpbmlzaF91bmxpbmtzKCkgcmVzdGFydHMgYXMgbmVlZGVkLCBzb21lIHVwY29taW5nIElOVFJfU0YuCisJICoKKwkgKiBjb250cm9sIGFuZCBidWxrIEVEcyBhcmUgZG91Ymx5IGxpbmtlZCAoZWRfbmV4dCwgZWRfcHJldiksIGJ1dAorCSAqIHBlcmlvZGljIG9uZXMgYXJlIHNpbmdseSBsaW5rZWQgKGVkX25leHQpLiB0aGF0J3MgYmVjYXVzZSB0aGUKKwkgKiBwZXJpb2RpYyBzY2hlZHVsZSBlbmNvZGVzIGEgdHJlZSBsaWtlIGZpZ3VyZSAzLTUgaW4gdGhlIG9oY2kKKwkgKiBzcGVjOiAgZWFjaCBxaCBjYW4gaGF2ZSBzZXZlcmFsICJwcmV2aW91cyIgbm9kZXMsIGFuZCB0aGUgdHJlZQorCSAqIGRvZXNuJ3QgaGF2ZSB1bnVzZWQvaWRsZSBkZXNjcmlwdG9ycy4KKwkgKi8KKwlzd2l0Y2ggKGVkLT50eXBlKSB7CisJY2FzZSBQSVBFX0NPTlRST0w6CisJCWlmIChvaGNpLT5lZF9jb250cm9sdGFpbCA9PSBOVUxMKSB7CisJCQlXQVJOX09OIChvaGNpLT5oY19jb250cm9sICYgT0hDSV9DVFJMX0NMRSk7CisJCQlvaGNpX3dyaXRlbCAob2hjaSwgZWQtPmRtYSwKKwkJCQkJJm9oY2ktPnJlZ3MtPmVkX2NvbnRyb2xoZWFkKTsKKwkJfSBlbHNlIHsKKwkJCW9oY2ktPmVkX2NvbnRyb2x0YWlsLT5lZF9uZXh0ID0gZWQ7CisJCQlvaGNpLT5lZF9jb250cm9sdGFpbC0+aHdOZXh0RUQgPSBjcHVfdG9faGMzMiAob2hjaSwKKwkJCQkJCQkJZWQtPmRtYSk7CisJCX0KKwkJZWQtPmVkX3ByZXYgPSBvaGNpLT5lZF9jb250cm9sdGFpbDsKKwkJaWYgKCFvaGNpLT5lZF9jb250cm9sdGFpbCAmJiAhb2hjaS0+ZWRfcm1fbGlzdCkgeworCQkJd21iKCk7CisJCQlvaGNpLT5oY19jb250cm9sIHw9IE9IQ0lfQ1RSTF9DTEU7CisJCQlvaGNpX3dyaXRlbCAob2hjaSwgMCwgJm9oY2ktPnJlZ3MtPmVkX2NvbnRyb2xjdXJyZW50KTsKKwkJCW9oY2lfd3JpdGVsIChvaGNpLCBvaGNpLT5oY19jb250cm9sLAorCQkJCQkmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJCX0KKwkJb2hjaS0+ZWRfY29udHJvbHRhaWwgPSBlZDsKKwkJYnJlYWs7CisKKwljYXNlIFBJUEVfQlVMSzoKKwkJaWYgKG9oY2ktPmVkX2J1bGt0YWlsID09IE5VTEwpIHsKKwkJCVdBUk5fT04gKG9oY2ktPmhjX2NvbnRyb2wgJiBPSENJX0NUUkxfQkxFKTsKKwkJCW9oY2lfd3JpdGVsIChvaGNpLCBlZC0+ZG1hLCAmb2hjaS0+cmVncy0+ZWRfYnVsa2hlYWQpOworCQl9IGVsc2UgeworCQkJb2hjaS0+ZWRfYnVsa3RhaWwtPmVkX25leHQgPSBlZDsKKwkJCW9oY2ktPmVkX2J1bGt0YWlsLT5od05leHRFRCA9IGNwdV90b19oYzMyIChvaGNpLAorCQkJCQkJCQllZC0+ZG1hKTsKKwkJfQorCQllZC0+ZWRfcHJldiA9IG9oY2ktPmVkX2J1bGt0YWlsOworCQlpZiAoIW9oY2ktPmVkX2J1bGt0YWlsICYmICFvaGNpLT5lZF9ybV9saXN0KSB7CisJCQl3bWIoKTsKKwkJCW9oY2ktPmhjX2NvbnRyb2wgfD0gT0hDSV9DVFJMX0JMRTsKKwkJCW9oY2lfd3JpdGVsIChvaGNpLCAwLCAmb2hjaS0+cmVncy0+ZWRfYnVsa2N1cnJlbnQpOworCQkJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2ktPmhjX2NvbnRyb2wsCisJCQkJCSZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwkJfQorCQlvaGNpLT5lZF9idWxrdGFpbCA9IGVkOworCQlicmVhazsKKworCS8vIGNhc2UgUElQRV9JTlRFUlJVUFQ6CisJLy8gY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCWRlZmF1bHQ6CisJCWJyYW5jaCA9IGJhbGFuY2UgKG9oY2ksIGVkLT5pbnRlcnZhbCwgZWQtPmxvYWQpOworCQlpZiAoYnJhbmNoIDwgMCkgeworCQkJb2hjaV9kYmcgKG9oY2ksCisJCQkJIkVSUiAlZCwgaW50ZXJ2YWwgJWQgbXNlY3MsIGxvYWQgJWRcbiIsCisJCQkJYnJhbmNoLCBlZC0+aW50ZXJ2YWwsIGVkLT5sb2FkKTsKKwkJCS8vIEZJWE1FIGlmIHRoZXJlIGFyZSBURHMgcXVldWVkLCBmYWlsIHRoZW0hCisJCQlyZXR1cm4gYnJhbmNoOworCQl9CisJCWVkLT5icmFuY2ggPSBicmFuY2g7CisJCXBlcmlvZGljX2xpbmsgKG9oY2ksIGVkKTsKKwl9CSAJCisKKwkvKiB0aGUgSEMgbWF5IG5vdCBzZWUgdGhlIHNjaGVkdWxlIHVwZGF0ZXMgeWV0LCBidXQgaWYgaXQgZG9lcworCSAqIHRoZW4gdGhleSdsbCBiZSBwcm9wZXJseSBvcmRlcmVkLgorCSAqLworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBzY2FuIHRoZSBwZXJpb2RpYyB0YWJsZSB0byBmaW5kIGFuZCB1bmxpbmsgdGhpcyBFRCAqLworc3RhdGljIHZvaWQgcGVyaW9kaWNfdW5saW5rIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIHN0cnVjdCBlZCAqZWQpCit7CisJaW50CWk7CisKKwlmb3IgKGkgPSBlZC0+YnJhbmNoOyBpIDwgTlVNX0lOVFM7IGkgKz0gZWQtPmludGVydmFsKSB7CisJCXN0cnVjdCBlZAkqdGVtcDsKKwkJc3RydWN0IGVkCSoqcHJldiA9ICZvaGNpLT5wZXJpb2RpYyBbaV07CisJCV9faGMzMgkJKnByZXZfcCA9ICZvaGNpLT5oY2NhLT5pbnRfdGFibGUgW2ldOworCisJCXdoaWxlICgqcHJldiAmJiAodGVtcCA9ICpwcmV2KSAhPSBlZCkgeworCQkJcHJldl9wID0gJnRlbXAtPmh3TmV4dEVEOworCQkJcHJldiA9ICZ0ZW1wLT5lZF9uZXh0OworCQl9CisJCWlmICgqcHJldikgeworCQkJKnByZXZfcCA9IGVkLT5od05leHRFRDsKKwkJCSpwcmV2ID0gZWQtPmVkX25leHQ7CisJCX0KKwkJb2hjaS0+bG9hZCBbaV0gLT0gZWQtPmxvYWQ7CisJfQkKKwlvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfYWxsb2NhdGVkIC09IGVkLT5sb2FkIC8gZWQtPmludGVydmFsOworCisJb2hjaV92ZGJnIChvaGNpLCAidW5saW5rICVzZWQgJXAgYnJhbmNoICVkIFslZHVzLl0sIGludGVydmFsICVkXG4iLAorCQkoZWQtPmh3SU5GTyAmIGNwdV90b19oYzMyIChvaGNpLCBFRF9JU08pKSA/ICJpc28gIiA6ICIiLAorCQllZCwgZWQtPmJyYW5jaCwgZWQtPmxvYWQsIGVkLT5pbnRlcnZhbCk7Cit9CisKKy8qIHVubGluayBhbiBlZCBmcm9tIG9uZSBvZiB0aGUgSEMgY2hhaW5zLiAKKyAqIGp1c3QgdGhlIGxpbmsgdG8gdGhlIGVkIGlzIHVubGlua2VkLgorICogdGhlIGxpbmsgZnJvbSB0aGUgZWQgc3RpbGwgcG9pbnRzIHRvIGFub3RoZXIgb3BlcmF0aW9uYWwgZWQgb3IgMAorICogc28gdGhlIEhDIGNhbiBldmVudHVhbGx5IGZpbmlzaCB0aGUgcHJvY2Vzc2luZyBvZiB0aGUgdW5saW5rZWQgZWQKKyAqIChhc3N1bWluZyBpdCBhbHJlYWR5IHN0YXJ0ZWQgdGhhdCwgd2hpY2ggbmVlZG4ndCBiZSB0cnVlKS4KKyAqCisgKiBFRF9VTkxJTksgaXMgYSB0cmFuc2llbnQgc3RhdGU6IHRoZSBIQyBtYXkgc3RpbGwgc2VlIHRoaXMgRUQsIGJ1dCBzb29uCisgKiBpdCB3b24ndC4gIEVEX1NLSVAgbWVhbnMgdGhlIEhDIHdpbGwgZmluaXNoIGl0cyBjdXJyZW50IHRyYW5zYWN0aW9uLAorICogYnV0IHdvbid0IHN0YXJ0IGFueXRoaW5nIG5ldy4gIFRoZSBURCBxdWV1ZSBtYXkgc3RpbGwgZ3JvdzsgZGV2aWNlCisgKiBkcml2ZXJzIGRvbid0IGtub3cgYWJvdXQgdGhpcyBIQ0QtaW50ZXJuYWwgc3RhdGUuCisgKgorICogV2hlbiB0aGUgSEMgY2FuJ3Qgc2VlIHRoZSBFRCwgc29tZXRoaW5nIGNoYW5nZXMgRURfVU5MSU5LIHRvIG9uZSBvZjoKKyAqCisgKiAgLSBFRF9PUEVSOiB3aGVuIHRoZXJlJ3MgYW55IHJlcXVlc3QgcXVldWVkLCB0aGUgRUQgZ2V0cyByZXNjaGVkdWxlZAorICogICAgaW1tZWRpYXRlbHkuICBIQyBzaG91bGQgYmUgd29ya2luZyBvbiB0aGVtLgorICoKKyAqICAtIEVEX0lETEU6ICB3aGVuIHRoZXJlJ3Mgbm8gVEQgcXVldWUuIHRoZXJlJ3Mgbm8gcmVhc29uIGZvciB0aGUgSEMKKyAqICAgIHRvIGNhcmUgYWJvdXQgdGhpcyBFRDsgc2FmZSB0byBkaXNhYmxlIHRoZSBlbmRwb2ludC4KKyAqCisgKiBXaGVuIGZpbmlzaF91bmxpbmtzKCkgcnVucyBsYXRlciwgYWZ0ZXIgU09GIGludGVycnVwdCwgaXQgd2lsbCBvZnRlbgorICogY29tcGxldGUgb25lIG9yIG1vcmUgVVJCIHVubGlua3MgYmVmb3JlIG1ha2luZyB0aGF0IHN0YXRlIGNoYW5nZS4KKyAqLworc3RhdGljIHZvaWQgZWRfZGVzY2hlZHVsZSAoc3RydWN0IG9oY2lfaGNkICpvaGNpLCBzdHJ1Y3QgZWQgKmVkKSAKK3sKKwllZC0+aHdJTkZPIHw9IGNwdV90b19oYzMyIChvaGNpLCBFRF9TS0lQKTsKKwl3bWIgKCk7CisJZWQtPnN0YXRlID0gRURfVU5MSU5LOworCisJLyogVG8gZGVzY2hlZHVsZSBzb21ldGhpbmcgZnJvbSB0aGUgY29udHJvbCBvciBidWxrIGxpc3QsIGp1c3QKKwkgKiBjbGVhciBDTEUvQkxFIGFuZCB3YWl0LiAgVGhlcmUncyBubyBzYWZlIHdheSB0byBzY3J1YiBvdXQgbGlzdAorCSAqIGhlYWQvY3VycmVudCByZWdpc3RlcnMgdW50aWwgbGF0ZXIsIGFuZCAibGF0ZXIiIGlzbid0IHZlcnkKKwkgKiB0aWdodGx5IHNwZWNpZmllZC4gIEZpZ3VyZSA2LTUgYW5kIFNlY3Rpb24gNi40LjIuMiBzaG93IGhvdworCSAqIHRoZSBIQyBpcyByZWFkaW5nIHRoZSBFRCBxdWV1ZXMgKHdoaWxlIHdlIG1vZGlmeSB0aGVtKS4KKwkgKgorCSAqIEZvciBub3csIGVkX3NjaGVkdWxlKCkgaXMgImxhdGVyIi4gIEl0IG1pZ2h0IGJlIGdvb2QgcGFyYW5vaWEKKwkgKiB0byBzY3J1YiB0aG9zZSByZWdpc3RlcnMgaW4gZmluaXNoX3VubGlua3MoKSwgaW4gY2FzZSBvZiBidWdzCisJICogdGhhdCBtYWtlIHRoZSBIQyB0cnkgdG8gdXNlIHRoZW0uCisJICovCisJc3dpdGNoIChlZC0+dHlwZSkgeworCWNhc2UgUElQRV9DT05UUk9MOgorCQkvKiByZW1vdmUgRUQgZnJvbSB0aGUgSEMncyBsaXN0OiAqLworCQlpZiAoZWQtPmVkX3ByZXYgPT0gTlVMTCkgeworCQkJaWYgKCFlZC0+aHdOZXh0RUQpIHsKKwkJCQlvaGNpLT5oY19jb250cm9sICY9IH5PSENJX0NUUkxfQ0xFOworCQkJCW9oY2lfd3JpdGVsIChvaGNpLCBvaGNpLT5oY19jb250cm9sLAorCQkJCQkJJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCQkJCS8vIGEgb2hjaV9yZWFkbCgpIGxhdGVyIHN5bmNzIENMRSB3aXRoIHRoZSBIQworCQkJfSBlbHNlCisJCQkJb2hjaV93cml0ZWwgKG9oY2ksCisJCQkJCWhjMzJfdG9fY3B1cCAob2hjaSwgJmVkLT5od05leHRFRCksCisJCQkJCSZvaGNpLT5yZWdzLT5lZF9jb250cm9saGVhZCk7CisJCX0gZWxzZSB7CisJCQllZC0+ZWRfcHJldi0+ZWRfbmV4dCA9IGVkLT5lZF9uZXh0OworCQkJZWQtPmVkX3ByZXYtPmh3TmV4dEVEID0gZWQtPmh3TmV4dEVEOworCQl9CisJCS8qIHJlbW92ZSBFRCBmcm9tIHRoZSBIQ0QncyBsaXN0OiAqLworCQlpZiAob2hjaS0+ZWRfY29udHJvbHRhaWwgPT0gZWQpIHsKKwkJCW9oY2ktPmVkX2NvbnRyb2x0YWlsID0gZWQtPmVkX3ByZXY7CisJCQlpZiAob2hjaS0+ZWRfY29udHJvbHRhaWwpCisJCQkJb2hjaS0+ZWRfY29udHJvbHRhaWwtPmVkX25leHQgPSBOVUxMOworCQl9IGVsc2UgaWYgKGVkLT5lZF9uZXh0KSB7CisJCQllZC0+ZWRfbmV4dC0+ZWRfcHJldiA9IGVkLT5lZF9wcmV2OworCQl9CisJCWJyZWFrOworCisJY2FzZSBQSVBFX0JVTEs6CisJCS8qIHJlbW92ZSBFRCBmcm9tIHRoZSBIQydzIGxpc3Q6ICovCisJCWlmIChlZC0+ZWRfcHJldiA9PSBOVUxMKSB7CisJCQlpZiAoIWVkLT5od05leHRFRCkgeworCQkJCW9oY2ktPmhjX2NvbnRyb2wgJj0gfk9IQ0lfQ1RSTF9CTEU7CisJCQkJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2ktPmhjX2NvbnRyb2wsCisJCQkJCQkmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJCQkJLy8gYSBvaGNpX3JlYWRsKCkgbGF0ZXIgc3luY3MgQkxFIHdpdGggdGhlIEhDCisJCQl9IGVsc2UKKwkJCQlvaGNpX3dyaXRlbCAob2hjaSwKKwkJCQkJaGMzMl90b19jcHVwIChvaGNpLCAmZWQtPmh3TmV4dEVEKSwKKwkJCQkJJm9oY2ktPnJlZ3MtPmVkX2J1bGtoZWFkKTsKKwkJfSBlbHNlIHsKKwkJCWVkLT5lZF9wcmV2LT5lZF9uZXh0ID0gZWQtPmVkX25leHQ7CisJCQllZC0+ZWRfcHJldi0+aHdOZXh0RUQgPSBlZC0+aHdOZXh0RUQ7CisJCX0KKwkJLyogcmVtb3ZlIEVEIGZyb20gdGhlIEhDRCdzIGxpc3Q6ICovCisJCWlmIChvaGNpLT5lZF9idWxrdGFpbCA9PSBlZCkgeworCQkJb2hjaS0+ZWRfYnVsa3RhaWwgPSBlZC0+ZWRfcHJldjsKKwkJCWlmIChvaGNpLT5lZF9idWxrdGFpbCkKKwkJCQlvaGNpLT5lZF9idWxrdGFpbC0+ZWRfbmV4dCA9IE5VTEw7CisJCX0gZWxzZSBpZiAoZWQtPmVkX25leHQpIHsKKwkJCWVkLT5lZF9uZXh0LT5lZF9wcmV2ID0gZWQtPmVkX3ByZXY7CisJCX0KKwkJYnJlYWs7CisKKwkvLyBjYXNlIFBJUEVfSU5URVJSVVBUOgorCS8vIGNhc2UgUElQRV9JU09DSFJPTk9VUzoKKwlkZWZhdWx0OgorCQlwZXJpb2RpY191bmxpbmsgKG9oY2ksIGVkKTsKKwkJYnJlYWs7CisJfQorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGdldCBhbmQgbWF5YmUgKHJlKWluaXQgYW4gZW5kcG9pbnQuIGluaXQgX3Nob3VsZF8gYmUgZG9uZSBvbmx5IGFzIHBhcnQKKyAqIG9mIGVudW1lcmF0aW9uLCB1c2Jfc2V0X2NvbmZpZ3VyYXRpb24oKSBvciB1c2Jfc2V0X2ludGVyZmFjZSgpLgorICovCitzdGF0aWMgc3RydWN0IGVkICplZF9nZXQgKAorCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2ksCisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCwKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiwKKwl1bnNpZ25lZCBpbnQJCXBpcGUsCisJaW50CQkJaW50ZXJ2YWwKKykgeworCXN0cnVjdCBlZAkJKmVkOyAKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmb2hjaS0+bG9jaywgZmxhZ3MpOworCisJaWYgKCEoZWQgPSBlcC0+aGNwcml2KSkgeworCQlzdHJ1Y3QgdGQJKnRkOworCQlpbnQJCWlzX291dDsKKwkJdTMyCQlpbmZvOworCisJCWVkID0gZWRfYWxsb2MgKG9oY2ksIEdGUF9BVE9NSUMpOworCQlpZiAoIWVkKSB7CisJCQkvKiBvdXQgb2YgbWVtb3J5ICovCisJCQlnb3RvIGRvbmU7CisJCX0KKworICAJCS8qIGR1bW15IHRkOyBlbmQgb2YgdGQgbGlzdCBmb3IgZWQgKi8KKwkJdGQgPSB0ZF9hbGxvYyAob2hjaSwgR0ZQX0FUT01JQyk7CisgCQlpZiAoIXRkKSB7CisJCQkvKiBvdXQgb2YgbWVtb3J5ICovCisJCQllZF9mcmVlIChvaGNpLCBlZCk7CisJCQllZCA9IE5VTEw7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJZWQtPmR1bW15ID0gdGQ7CisJCWVkLT5od1RhaWxQID0gY3B1X3RvX2hjMzIgKG9oY2ksIHRkLT50ZF9kbWEpOworCQllZC0+aHdIZWFkUCA9IGVkLT5od1RhaWxQOwkvKiBFRF9DLCBFRF9IIHplcm9lZCAqLworCQllZC0+c3RhdGUgPSBFRF9JRExFOworCisJCWlzX291dCA9ICEoZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pOworCisJCS8qIEZJWE1FIHVzYmNvcmUgY2hhbmdlcyBkZXYtPmRldm51bSBiZWZvcmUgU0VUX0FERFJFU1MKKwkJICogc3VjZWVkcyAuLi4gb3RoZXJ3aXNlIHdlIHdvdWxkbid0IG5lZWQgInBpcGUiLgorCQkgKi8KKwkJaW5mbyA9IHVzYl9waXBlZGV2aWNlIChwaXBlKTsKKwkJZWQtPnR5cGUgPSB1c2JfcGlwZXR5cGUocGlwZSk7CisKKwkJaW5mbyB8PSAoZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIH5VU0JfRElSX0lOKSA8PCA3OworCQlpbmZvIHw9IGxlMTZfdG9fY3B1KGVwLT5kZXNjLndNYXhQYWNrZXRTaXplKSA8PCAxNjsKKwkJaWYgKHVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9MT1cpCisJCQlpbmZvIHw9IEVEX0xPV1NQRUVEOworCQkvKiBvbmx5IGNvbnRyb2wgdHJhbnNmZXJzIHN0b3JlIHBpZHMgaW4gdGRzICovCisJCWlmIChlZC0+dHlwZSAhPSBQSVBFX0NPTlRST0wpIHsKKwkJCWluZm8gfD0gaXNfb3V0ID8gRURfT1VUIDogRURfSU47CisJCQlpZiAoZWQtPnR5cGUgIT0gUElQRV9CVUxLKSB7CisJCQkJLyogcGVyaW9kaWMgdHJhbnNmZXJzLi4uICovCisJCQkJaWYgKGVkLT50eXBlID09IFBJUEVfSVNPQ0hST05PVVMpCisJCQkJCWluZm8gfD0gRURfSVNPOworCQkJCWVsc2UgaWYgKGludGVydmFsID4gMzIpCS8qIGlzbyBjYW4gYmUgYmlnZ2VyICovCisJCQkJCWludGVydmFsID0gMzI7CisJCQkJZWQtPmludGVydmFsID0gaW50ZXJ2YWw7CisJCQkJZWQtPmxvYWQgPSB1c2JfY2FsY19idXNfdGltZSAoCisJCQkJCXVkZXYtPnNwZWVkLCAhaXNfb3V0LAorCQkJCQllZC0+dHlwZSA9PSBQSVBFX0lTT0NIUk9OT1VTLAorCQkJCQlsZTE2X3RvX2NwdShlcC0+ZGVzYy53TWF4UGFja2V0U2l6ZSkpCisJCQkJCQkvIDEwMDA7CisJCQl9CisJCX0KKwkJZWQtPmh3SU5GTyA9IGNwdV90b19oYzMyKG9oY2ksIGluZm8pOworCisJCWVwLT5oY3ByaXYgPSBlZDsKKwl9CisKK2RvbmU6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZWQ7IAorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiByZXF1ZXN0IHVubGlua2luZyBvZiBhbiBlbmRwb2ludCBmcm9tIGFuIG9wZXJhdGlvbmFsIEhDLgorICogcHV0IHRoZSBlcCBvbiB0aGUgcm1fbGlzdAorICogcmVhbCB3b3JrIGlzIGRvbmUgYXQgdGhlIG5leHQgc3RhcnQgZnJhbWUgKFNGKSBoYXJkd2FyZSBpbnRlcnJ1cHQKKyAqIGNhbGxlciBndWFyYW50ZWVzIEhDRCBpcyBydW5uaW5nLCBzbyBoYXJkd2FyZSBhY2Nlc3MgaXMgc2FmZSwKKyAqIGFuZCB0aGF0IGVkLT5zdGF0ZSBpcyBFRF9PUEVSCisgKi8KK3N0YXRpYyB2b2lkIHN0YXJ0X2VkX3VubGluayAoc3RydWN0IG9oY2lfaGNkICpvaGNpLCBzdHJ1Y3QgZWQgKmVkKQoreyAgICAKKwllZC0+aHdJTkZPIHw9IGNwdV90b19oYzMyIChvaGNpLCBFRF9ERVFVRVVFKTsKKwllZF9kZXNjaGVkdWxlIChvaGNpLCBlZCk7CisKKwkvKiBybV9saXN0IGlzIGp1c3Qgc2luZ2x5IGxpbmtlZCwgZm9yIHNpbXBsaWNpdHkgKi8KKwllZC0+ZWRfbmV4dCA9IG9oY2ktPmVkX3JtX2xpc3Q7CisJZWQtPmVkX3ByZXYgPSBOVUxMOworCW9oY2ktPmVkX3JtX2xpc3QgPSBlZDsKKworCS8qIGVuYWJsZSBTT0YgaW50ZXJydXB0ICovCisJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfSU5UUl9TRiwgJm9oY2ktPnJlZ3MtPmludHJzdGF0dXMpOworCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0lOVFJfU0YsICZvaGNpLT5yZWdzLT5pbnRyZW5hYmxlKTsKKwkvLyBmbHVzaCB0aG9zZSB3cml0ZXMsIGFuZCBnZXQgbGF0ZXN0IEhDQ0EgY29udGVudHMKKwkodm9pZCkgb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCisJLyogU0YgaW50ZXJydXB0IG1pZ2h0IGdldCBkZWxheWVkOyByZWNvcmQgdGhlIGZyYW1lIGNvdW50ZXIgdmFsdWUgdGhhdAorCSAqIGluZGljYXRlcyB3aGVuIHRoZSBIQyBpc24ndCBsb29raW5nIGF0IGl0LCBzbyBjb25jdXJyZW50IHVubGlua3MKKwkgKiBiZWhhdmUuICBmcmFtZV9ubyB3cmFwcyBldmVyeSAyXjE2IG1zZWMsIGFuZCBjaGFuZ2VzIHJpZ2h0IGJlZm9yZQorCSAqIFNGIGlzIHRyaWdnZXJlZC4KKwkgKi8KKwllZC0+dGljayA9IG9oY2lfZnJhbWVfbm8ob2hjaSkgKyAxOworCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIFREIGhhbmRsaW5nIGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogZW5xdWV1ZSBuZXh0IFREIGZvciB0aGlzIFVSQiAoT0hDSSBzcGVjIDUuMi44LjIpICovCisKK3N0YXRpYyB2b2lkCit0ZF9maWxsIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIHUzMiBpbmZvLAorCWRtYV9hZGRyX3QgZGF0YSwgaW50IGxlbiwKKwlzdHJ1Y3QgdXJiICp1cmIsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgdGQJCSp0ZCwgKnRkX3B0OworCXN0cnVjdCB1cmJfcHJpdgkJKnVyYl9wcml2ID0gdXJiLT5oY3ByaXY7CisJaW50CQkJaXNfaXNvID0gaW5mbyAmIFREX0lTTzsKKwlpbnQJCQloYXNoOworCisJLy8gQVNTRVJUIChpbmRleCA8IHVyYl9wcml2LT5sZW5ndGgpOworCisJLyogYWltIGZvciBvbmx5IG9uZSBpbnRlcnJ1cHQgcGVyIHVyYi4gIG1vc3RseSBhcHBsaWVzIHRvIGNvbnRyb2wKKwkgKiBhbmQgaXNvOyBvdGhlciB1cmJzIHJhcmVseSBuZWVkIG1vcmUgdGhhbiBvbmUgVEQgcGVyIHVyYi4KKwkgKiB0aGlzIHdheSwgb25seSBmaW5hbCB0ZHMgKG9yIG9uZXMgd2l0aCBhbiBlcnJvcikgY2F1c2UgSVJRcy4KKwkgKiBhdCBsZWFzdCBpbW1lZGlhdGVseTsgdXNlIERJPTYgaW4gY2FzZSBhbnkgY29udHJvbCByZXF1ZXN0IGlzCisJICogdGVtcHRlZCB0byBkaWUgcGFydCB3YXkgdGhyb3VnaC4gIChhbmQgdG8gZm9yY2UgdGhlIGhjIHRvIGZsdXNoCisJICogaXRzIGRvbmVsaXN0IHNvb25pc2gsIGV2ZW4gb24gdW5saW5rIHBhdGhzLikKKwkgKgorCSAqIE5PVEU6IGNvdWxkIGRlbGF5IGludGVycnVwdHMgZXZlbiBmb3IgdGhlIGxhc3QgVEQsIGFuZCBnZXQgZmV3ZXIKKwkgKiBpbnRlcnJ1cHRzIC4uLiBpbmNyZWFzaW5nIHBlci11cmIgbGF0ZW5jeSBieSBzaGFyaW5nIGludGVycnVwdHMuCisJICogRHJpdmVycyB0aGF0IHF1ZXVlIGJ1bGsgdXJicyBtYXkgcmVxdWVzdCB0aGF0IGJlaGF2aW9yLgorCSAqLworCWlmIChpbmRleCAhPSAodXJiX3ByaXYtPmxlbmd0aCAtIDEpCisJCQl8fCAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9OT19JTlRFUlJVUFQpKQorCQlpbmZvIHw9IFREX0RJX1NFVCAoNik7CisKKwkvKiB1c2UgdGhpcyB0ZCBhcyB0aGUgbmV4dCBkdW1teSAqLworCXRkX3B0ID0gdXJiX3ByaXYtPnRkIFtpbmRleF07CisKKwkvKiBmaWxsIHRoZSBvbGQgZHVtbXkgVEQgKi8KKwl0ZCA9IHVyYl9wcml2LT50ZCBbaW5kZXhdID0gdXJiX3ByaXYtPmVkLT5kdW1teTsKKwl1cmJfcHJpdi0+ZWQtPmR1bW15ID0gdGRfcHQ7CisKKwl0ZC0+ZWQgPSB1cmJfcHJpdi0+ZWQ7CisJdGQtPm5leHRfZGxfdGQgPSBOVUxMOworCXRkLT5pbmRleCA9IGluZGV4OworCXRkLT51cmIgPSB1cmI7IAorCXRkLT5kYXRhX2RtYSA9IGRhdGE7CisJaWYgKCFsZW4pCisJCWRhdGEgPSAwOworCisJdGQtPmh3SU5GTyA9IGNwdV90b19oYzMyIChvaGNpLCBpbmZvKTsKKwlpZiAoaXNfaXNvKSB7CisJCXRkLT5od0NCUCA9IGNwdV90b19oYzMyIChvaGNpLCBkYXRhICYgMHhGRkZGRjAwMCk7CisJCSpvaGNpX2h3UFNXcChvaGNpLCB0ZCwgMCkgPSBjcHVfdG9faGMxNiAob2hjaSwKKwkJCQkJCShkYXRhICYgMHgwRkZGKSB8IDB4RTAwMCk7CisJCXRkLT5lZC0+bGFzdF9pc28gPSBpbmZvICYgMHhmZmZmOworCX0gZWxzZSB7CisJCXRkLT5od0NCUCA9IGNwdV90b19oYzMyIChvaGNpLCBkYXRhKTsgCisJfQkJCQorCWlmIChkYXRhKQorCQl0ZC0+aHdCRSA9IGNwdV90b19oYzMyIChvaGNpLCBkYXRhICsgbGVuIC0gMSk7CisJZWxzZQorCQl0ZC0+aHdCRSA9IDA7CisJdGQtPmh3TmV4dFREID0gY3B1X3RvX2hjMzIgKG9oY2ksIHRkX3B0LT50ZF9kbWEpOworCisJLyogYXBwZW5kIHRvIHF1ZXVlICovCisJbGlzdF9hZGRfdGFpbCAoJnRkLT50ZF9saXN0LCAmdGQtPmVkLT50ZF9saXN0KTsKKworCS8qIGhhc2ggaXQgZm9yIGxhdGVyIHJldmVyc2UgbWFwcGluZyAqLworCWhhc2ggPSBURF9IQVNIX0ZVTkMgKHRkLT50ZF9kbWEpOworCXRkLT50ZF9oYXNoID0gb2hjaS0+dGRfaGFzaCBbaGFzaF07CisJb2hjaS0+dGRfaGFzaCBbaGFzaF0gPSB0ZDsKKworCS8qIEhDIG1pZ2h0IHJlYWQgdGhlIFREIChvciBjYWNoZWxpbmVzKSByaWdodCBhd2F5IC4uLiAqLworCXdtYiAoKTsKKwl0ZC0+ZWQtPmh3VGFpbFAgPSB0ZC0+aHdOZXh0VEQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFByZXBhcmUgYWxsIFREcyBvZiBhIHRyYW5zZmVyLCBhbmQgcXVldWUgdGhlbSBvbnRvIHRoZSBFRC4KKyAqIENhbGxlciBndWFyYW50ZWVzIEhDIGlzIGFjdGl2ZS4KKyAqIFVzdWFsbHkgdGhlIEVEIGlzIGFscmVhZHkgb24gdGhlIHNjaGVkdWxlLCBzbyBURHMgbWlnaHQgYmUKKyAqIHByb2Nlc3NlZCBhcyBzb29uIGFzIHRoZXkncmUgcXVldWVkLgorICovCitzdGF0aWMgdm9pZCB0ZF9zdWJtaXRfdXJiICgKKwlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2ksCisJc3RydWN0IHVyYgkqdXJiCispIHsKKwlzdHJ1Y3QgdXJiX3ByaXYJKnVyYl9wcml2ID0gdXJiLT5oY3ByaXY7CisJZG1hX2FkZHJfdAlkYXRhOworCWludAkJZGF0YV9sZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJaW50CQljbnQgPSAwOworCXUzMgkJaW5mbyA9IDA7CisJaW50CQlpc19vdXQgPSB1c2JfcGlwZW91dCAodXJiLT5waXBlKTsKKwlpbnQJCXBlcmlvZGljID0gMDsKKworCS8qIE9IQ0kgaGFuZGxlcyB0aGUgYnVsay9pbnRlcnJ1cHQgZGF0YSB0b2dnbGVzIGl0c2VsZi4gIFdlIGp1c3QKKwkgKiB1c2UgdGhlIGRldmljZSB0b2dnbGUgYml0cyBmb3IgcmVzZXR0aW5nLCBhbmQgcmVseSBvbiB0aGUgZmFjdAorCSAqIHRoYXQgcmVzZXR0aW5nIHRvZ2dsZSBpcyBtZWFuaW5nbGVzcyBpZiB0aGUgZW5kcG9pbnQgaXMgYWN0aXZlLgorCSAqLworICAJaWYgKCF1c2JfZ2V0dG9nZ2xlICh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKSwgaXNfb3V0KSkgeworCQl1c2Jfc2V0dG9nZ2xlICh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKSwKKwkJCWlzX291dCwgMSk7CisJCXVyYl9wcml2LT5lZC0+aHdIZWFkUCAmPSB+Y3B1X3RvX2hjMzIgKG9oY2ksIEVEX0MpOworCX0KKworCXVyYl9wcml2LT50ZF9jbnQgPSAwOworCWxpc3RfYWRkICgmdXJiX3ByaXYtPnBlbmRpbmcsICZvaGNpLT5wZW5kaW5nKTsKKworCWlmIChkYXRhX2xlbikKKwkJZGF0YSA9IHVyYi0+dHJhbnNmZXJfZG1hOworCWVsc2UKKwkJZGF0YSA9IDA7CisKKwkvKiBOT1RFOiAgVERfQ0MgaXMgc2V0IHNvIHdlIGNhbiB0ZWxsIHdoaWNoIFREcyB0aGUgSEMgcHJvY2Vzc2VkIGJ5CisJICogdXNpbmcgVERfQ0NfR0VULCBhcyB3ZWxsIGFzIGJ5IHNlZWluZyB0aGVtIG9uIHRoZSBkb25lIGxpc3QuCisJICogKENDID0gTm90QWNjZXNzZWQgLi4uIDB4MEYsIG9yIDB4MEUgaW4gUFNXcyBmb3IgSVNPLikKKwkgKi8KKwlzd2l0Y2ggKHVyYl9wcml2LT5lZC0+dHlwZSkgeworCisJLyogQnVsayBhbmQgaW50ZXJydXB0IGFyZSBpZGVudGljYWwgZXhjZXB0IGZvciB3aGVyZSBpbiB0aGUgc2NoZWR1bGUKKwkgKiB0aGVpciBFRHMgbGl2ZS4KKwkgKi8KKwljYXNlIFBJUEVfSU5URVJSVVBUOgorCQkvKiAuLi4gYW5kIHBlcmlvZGljIHVyYnMgaGF2ZSBleHRyYSBhY2NvdW50aW5nICovCisJCXBlcmlvZGljID0gb2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2ludF9yZXFzKysgPT0gMAorCQkJJiYgb2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcyA9PSAwOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgUElQRV9CVUxLOgorCQlpbmZvID0gaXNfb3V0CisJCQk/IFREX1RfVE9HR0xFIHwgVERfQ0MgfCBURF9EUF9PVVQKKwkJCTogVERfVF9UT0dHTEUgfCBURF9DQyB8IFREX0RQX0lOOworCQkvKiBURHMgX2NvdWxkXyB0cmFuc2ZlciB1cCB0byA4SyBlYWNoICovCisJCXdoaWxlIChkYXRhX2xlbiA+IDQwOTYpIHsKKwkJCXRkX2ZpbGwgKG9oY2ksIGluZm8sIGRhdGEsIDQwOTYsIHVyYiwgY250KTsKKwkJCWRhdGEgKz0gNDA5NjsKKwkJCWRhdGFfbGVuIC09IDQwOTY7CisJCQljbnQrKzsKKwkJfQorCQkvKiBtYXliZSBhdm9pZCBFRCBoYWx0IG9uIGZpbmFsIFREIHNob3J0IHJlYWQgKi8KKwkJaWYgKCEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spKQorCQkJaW5mbyB8PSBURF9SOworCQl0ZF9maWxsIChvaGNpLCBpbmZvLCBkYXRhLCBkYXRhX2xlbiwgdXJiLCBjbnQpOworCQljbnQrKzsKKwkJaWYgKCh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1pFUk9fUEFDS0VUKQorCQkJCSYmIGNudCA8IHVyYl9wcml2LT5sZW5ndGgpIHsKKwkJCXRkX2ZpbGwgKG9oY2ksIGluZm8sIDAsIDAsIHVyYiwgY250KTsKKwkJCWNudCsrOworCQl9CisJCS8qIG1heWJlIGtpY2tzdGFydCBidWxrIGxpc3QgKi8KKwkJaWYgKHVyYl9wcml2LT5lZC0+dHlwZSA9PSBQSVBFX0JVTEspIHsKKwkJCXdtYiAoKTsKKwkJCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0JMRiwgJm9oY2ktPnJlZ3MtPmNtZHN0YXR1cyk7CisJCX0KKwkJYnJlYWs7CisKKwkvKiBjb250cm9sIG1hbmFnZXMgREFUQTAvREFUQTEgdG9nZ2xlIHBlci1yZXF1ZXN0OyBTRVRVUCByZXNldHMgaXQsCisJICogYW55IERBVEEgcGhhc2Ugd29ya3Mgbm9ybWFsbHksIGFuZCB0aGUgU1RBVFVTIGFjayBpcyBzcGVjaWFsLgorCSAqLworCWNhc2UgUElQRV9DT05UUk9MOgorCQlpbmZvID0gVERfQ0MgfCBURF9EUF9TRVRVUCB8IFREX1RfREFUQTA7CisJCXRkX2ZpbGwgKG9oY2ksIGluZm8sIHVyYi0+c2V0dXBfZG1hLCA4LCB1cmIsIGNudCsrKTsKKwkJaWYgKGRhdGFfbGVuID4gMCkgeworCQkJaW5mbyA9IFREX0NDIHwgVERfUiB8IFREX1RfREFUQTE7CisJCQlpbmZvIHw9IGlzX291dCA/IFREX0RQX09VVCA6IFREX0RQX0lOOworCQkJLyogTk9URTogIG1pc2hhbmRsZXMgdHJhbnNmZXJzID44Sywgc29tZSA+NEsgKi8KKwkJCXRkX2ZpbGwgKG9oY2ksIGluZm8sIGRhdGEsIGRhdGFfbGVuLCB1cmIsIGNudCsrKTsKKwkJfQorCQlpbmZvID0gKGlzX291dCB8fCBkYXRhX2xlbiA9PSAwKQorCQkJPyBURF9DQyB8IFREX0RQX0lOIHwgVERfVF9EQVRBMQorCQkJOiBURF9DQyB8IFREX0RQX09VVCB8IFREX1RfREFUQTE7CisJCXRkX2ZpbGwgKG9oY2ksIGluZm8sIGRhdGEsIDAsIHVyYiwgY250KyspOworCQkvKiBtYXliZSBraWNrc3RhcnQgY29udHJvbCBsaXN0ICovCisJCXdtYiAoKTsKKwkJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfQ0xGLCAmb2hjaS0+cmVncy0+Y21kc3RhdHVzKTsKKwkJYnJlYWs7CisKKwkvKiBJU08gaGFzIG5vIHJldHJhbnNtaXQsIHNvIG5vIHRvZ2dsZTsgYW5kIGl0IHVzZXMgc3BlY2lhbCBURHMuCisJICogRWFjaCBURCBjb3VsZCBoYW5kbGUgbXVsdGlwbGUgY29uc2VjdXRpdmUgZnJhbWVzIChpbnRlcnZhbCAxKTsKKwkgKiB3ZSBjb3VsZCBvZnRlbiByZWR1Y2UgdGhlIG51bWJlciBvZiBURHMgaGVyZS4KKwkgKi8KKwljYXNlIFBJUEVfSVNPQ0hST05PVVM6CisJCWZvciAoY250ID0gMDsgY250IDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgY250KyspIHsKKwkJCWludAlmcmFtZSA9IHVyYi0+c3RhcnRfZnJhbWU7CisKKwkJCS8vIEZJWE1FIHNjaGVkdWxpbmcgc2hvdWxkIGhhbmRsZSBmcmFtZSBjb3VudGVyCisJCQkvLyByb2xsLWFyb3VuZCAuLi4gZXhvdGljIGNhc2UgKGFuZCBPSENJIGhhcworCQkJLy8gYSAyXjE2IGlzbyByYW5nZSwgdnMgb3RoZXIgSENzIG1heCBvZiAyXjEwKQorCQkJZnJhbWUgKz0gY250ICogdXJiLT5pbnRlcnZhbDsKKwkJCWZyYW1lICY9IDB4ZmZmZjsKKwkJCXRkX2ZpbGwgKG9oY2ksIFREX0NDIHwgVERfSVNPIHwgZnJhbWUsCisJCQkJZGF0YSArIHVyYi0+aXNvX2ZyYW1lX2Rlc2MgW2NudF0ub2Zmc2V0LAorCQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2MgW2NudF0ubGVuZ3RoLCB1cmIsIGNudCk7CisJCX0KKwkJcGVyaW9kaWMgPSBvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzKysgPT0gMAorCQkJJiYgb2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2ludF9yZXFzID09IDA7CisJCWJyZWFrOworCX0KKworCS8qIHN0YXJ0IHBlcmlvZGljIGRtYSBpZiBuZWVkZWQgKi8KKwlpZiAocGVyaW9kaWMpIHsKKwkJd21iICgpOworCQlvaGNpLT5oY19jb250cm9sIHw9IE9IQ0lfQ1RSTF9QTEV8T0hDSV9DVFJMX0lFOworCQlvaGNpX3dyaXRlbCAob2hjaSwgb2hjaS0+aGNfY29udHJvbCwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCX0KKworCS8vIEFTU0VSVCAodXJiX3ByaXYtPmxlbmd0aCA9PSBjbnQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBEb25lIExpc3QgaGFuZGxpbmcgZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBjYWxjdWxhdGUgdHJhbnNmZXIgbGVuZ3RoL3N0YXR1cyBhbmQgdXBkYXRlIHRoZSB1cmIKKyAqIFBSRUNPTkRJVElPTjogIGlycXNhZmUgKG9ubHkgZm9yIHVyYi0+c3RhdHVzIGxvY2tpbmcpCisgKi8KK3N0YXRpYyB2b2lkIHRkX2RvbmUgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgdGQgKnRkKQoreworCXUzMgl0ZElORk8gPSBoYzMyX3RvX2NwdXAgKG9oY2ksICZ0ZC0+aHdJTkZPKTsKKwlpbnQJY2MgPSAwOworCisJbGlzdF9kZWwgKCZ0ZC0+dGRfbGlzdCk7CisKKwkvKiBJU08gLi4uIGRyaXZlcnMgc2VlIHBlci1URCBsZW5ndGgvc3RhdHVzICovCisgIAlpZiAodGRJTkZPICYgVERfSVNPKSB7CisgCQl1MTYJdGRQU1cgPSBvaGNpX2h3UFNXIChvaGNpLCB0ZCwgMCk7CisJCWludAlkbGVuID0gMDsKKworCQkvKiBOT1RFOiAgYXNzdW1lcyBGQyBpbiB0ZElORk8gPT0gMCwgYW5kIHRoYXQKKwkJICogb25seSB0aGUgZmlyc3Qgb2YgMC4uTUFYUFNXIHBzd3MgaXMgdXNlZC4KKwkJICovCisKKyAJCWNjID0gKHRkUFNXID4+IDEyKSAmIDB4RjsKKyAgCQlpZiAodGRJTkZPICYgVERfQ0MpCS8qIGhjIGRpZG4ndCB0b3VjaD8gKi8KKwkJCXJldHVybjsKKworCQlpZiAodXNiX3BpcGVvdXQgKHVyYi0+cGlwZSkpCisJCQlkbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzYyBbdGQtPmluZGV4XS5sZW5ndGg7CisJCWVsc2UgeworCQkJLyogc2hvcnQgcmVhZHMgYXJlIGFsd2F5cyBPSyBmb3IgSVNPICovCisJCQlpZiAoY2MgPT0gVERfREFUQVVOREVSUlVOKQorCQkJCWNjID0gVERfQ0NfTk9FUlJPUjsKKwkJCWRsZW4gPSB0ZFBTVyAmIDB4M2ZmOworCQl9CisJCXVyYi0+YWN0dWFsX2xlbmd0aCArPSBkbGVuOworCQl1cmItPmlzb19mcmFtZV9kZXNjIFt0ZC0+aW5kZXhdLmFjdHVhbF9sZW5ndGggPSBkbGVuOworCQl1cmItPmlzb19mcmFtZV9kZXNjIFt0ZC0+aW5kZXhdLnN0YXR1cyA9IGNjX3RvX2Vycm9yIFtjY107CisKKwkJaWYgKGNjICE9IFREX0NDX05PRVJST1IpCisJCQlvaGNpX3ZkYmcgKG9oY2ksCisJCQkJInVyYiAlcCBpc28gdGQgJXAgKCVkKSBsZW4gJWQgY2MgJWRcbiIsCisJCQkJdXJiLCB0ZCwgMSArIHRkLT5pbmRleCwgZGxlbiwgY2MpOworCisJLyogQlVMSywgSU5ULCBDT05UUk9MIC4uLiBkcml2ZXJzIHNlZSBhZ2dyZWdhdGUgbGVuZ3RoL3N0YXR1cywKKwkgKiBleGNlcHQgdGhhdCAic2V0dXAiIGJ5dGVzIGFyZW4ndCBjb3VudGVkIGFuZCAic2hvcnQiIHRyYW5zZmVycworCSAqIG1pZ2h0IG5vdCBiZSByZXBvcnRlZCBhcyBlcnJvcnMuCisJICovCisJfSBlbHNlIHsKKwkJaW50CXR5cGUgPSB1c2JfcGlwZXR5cGUgKHVyYi0+cGlwZSk7CisJCXUzMgl0ZEJFID0gaGMzMl90b19jcHVwIChvaGNpLCAmdGQtPmh3QkUpOworCisgIAkJY2MgPSBURF9DQ19HRVQgKHRkSU5GTyk7CisKKwkJLyogdXBkYXRlIHBhY2tldCBzdGF0dXMgaWYgbmVlZGVkIChzaG9ydCBpcyBub3JtYWxseSBvaykgKi8KKwkJaWYgKGNjID09IFREX0RBVEFVTkRFUlJVTgorCQkJCSYmICEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spKQorCQkJY2MgPSBURF9DQ19OT0VSUk9SOworCQlpZiAoY2MgIT0gVERfQ0NfTk9FUlJPUiAmJiBjYyA8IDB4MEUpIHsKKwkJCXNwaW5fbG9jayAoJnVyYi0+bG9jayk7CisJCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKQorCQkJCXVyYi0+c3RhdHVzID0gY2NfdG9fZXJyb3IgW2NjXTsKKwkJCXNwaW5fdW5sb2NrICgmdXJiLT5sb2NrKTsKKwkJfQorCisJCS8qIGNvdW50IGFsbCBub24tZW1wdHkgcGFja2V0cyBleGNlcHQgY29udHJvbCBTRVRVUCBwYWNrZXQgKi8KKwkJaWYgKCh0eXBlICE9IFBJUEVfQ09OVFJPTCB8fCB0ZC0+aW5kZXggIT0gMCkgJiYgdGRCRSAhPSAwKSB7CisJCQlpZiAodGQtPmh3Q0JQID09IDApCisJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoICs9IHRkQkUgLSB0ZC0+ZGF0YV9kbWEgKyAxOworCQkJZWxzZQorCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCArPQorCQkJCQkgIGhjMzJfdG9fY3B1cCAob2hjaSwgJnRkLT5od0NCUCkKKwkJCQkJLSB0ZC0+ZGF0YV9kbWE7CisJCX0KKworCQlpZiAoY2MgIT0gVERfQ0NfTk9FUlJPUiAmJiBjYyA8IDB4MEUpCisJCQlvaGNpX3ZkYmcgKG9oY2ksCisJCQkJInVyYiAlcCB0ZCAlcCAoJWQpIGNjICVkLCBsZW49JWQvJWRcbiIsCisJCQkJdXJiLCB0ZCwgMSArIHRkLT5pbmRleCwgY2MsCisJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLAorCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisgIAl9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRkICoKK2VkX2hhbHRlZCAoc3RydWN0IG9oY2lfaGNkICpvaGNpLCBzdHJ1Y3QgdGQgKnRkLCBpbnQgY2MsIHN0cnVjdCB0ZCAqcmV2KQoreworICAJc3RydWN0IHVyYgkJKnVyYiA9IHRkLT51cmI7CisJc3RydWN0IGVkCQkqZWQgPSB0ZC0+ZWQ7CisJc3RydWN0IGxpc3RfaGVhZAkqdG1wID0gdGQtPnRkX2xpc3QubmV4dDsKKwlfX2hjMzIJCQl0b2dnbGUgPSBlZC0+aHdIZWFkUCAmIGNwdV90b19oYzMyIChvaGNpLCBFRF9DKTsKKworCS8qIGNsZWFyIGVkIGhhbHQ7IHRoaXMgaXMgdGhlIHRkIHRoYXQgY2F1c2VkIGl0LCBidXQga2VlcCBpdCBpbmFjdGl2ZQorCSAqIHVudGlsIGl0cyB1cmItPmNvbXBsZXRlKCkgaGFzIGEgY2hhbmNlIHRvIGNsZWFuIHVwLgorCSAqLworCWVkLT5od0lORk8gfD0gY3B1X3RvX2hjMzIgKG9oY2ksIEVEX1NLSVApOworCXdtYiAoKTsKKwllZC0+aHdIZWFkUCAmPSB+Y3B1X3RvX2hjMzIgKG9oY2ksIEVEX0gpOyAKKworCS8qIHB1dCBhbnkgbGF0ZXIgdGRzIGZyb20gdGhpcyB1cmIgb250byB0aGUgZG9uZWxpc3QsIGFmdGVyICd0ZCcsCisJICogb3JkZXIgd29uJ3QgbWF0dGVyIGhlcmU6IG5vIGVycm9ycywgYW5kIG5vdGhpbmcgd2FzIHRyYW5zZmVycmVkLgorCSAqIGFsc28gcGF0Y2ggdGhlIGVkIHNvIGl0IGxvb2tzIGFzIGlmIHRob3NlIHRkcyBjb21wbGV0ZWQgbm9ybWFsbHkuCisJICovCisJd2hpbGUgKHRtcCAhPSAmZWQtPnRkX2xpc3QpIHsKKwkJc3RydWN0IHRkCSpuZXh0OworCQlfX2hjMzIJCWluZm87CisKKwkJbmV4dCA9IGxpc3RfZW50cnkgKHRtcCwgc3RydWN0IHRkLCB0ZF9saXN0KTsKKwkJdG1wID0gbmV4dC0+dGRfbGlzdC5uZXh0OworCisJCWlmIChuZXh0LT51cmIgIT0gdXJiKQorCQkJYnJlYWs7CisKKwkJLyogTk9URTogaWYgbXVsdGktdGQgY29udHJvbCBEQVRBIHNlZ21lbnRzIGdldCBzdXBwb3J0ZWQsCisJCSAqIHRoaXMgdXJiIGhhZCBvbmUgb2YgdGhlbSwgdGhpcyB0ZCB3YXNuJ3QgdGhlIGxhc3QgdGQKKwkJICogaW4gdGhhdCBzZWdtZW50IChURF9SIGNsZWFyKSwgdGhpcyBlZCBoYWx0ZWQgYmVjYXVzZQorCQkgKiBvZiBhIHNob3J0IHJlYWQsIF9hbmRfIFVSQl9TSE9SVF9OT1RfT0sgaXMgY2xlYXIgLi4uCisJCSAqIHRoZW4gd2UgbmVlZCB0byBsZWF2ZSB0aGUgY29udHJvbCBTVEFUVVMgcGFja2V0IHF1ZXVlZAorCQkgKiBhbmQgY2xlYXIgRURfU0tJUC4KKwkJICovCisJCWluZm8gPSBuZXh0LT5od0lORk87CisJCWluZm8gfD0gY3B1X3RvX2hjMzIgKG9oY2ksIFREX0RPTkUpOworCQlpbmZvICY9IH5jcHVfdG9faGMzMiAob2hjaSwgVERfQ0MpOworCQluZXh0LT5od0lORk8gPSBpbmZvOworCisJCW5leHQtPm5leHRfZGxfdGQgPSByZXY7CQorCQlyZXYgPSBuZXh0OworCisJCWVkLT5od0hlYWRQID0gbmV4dC0+aHdOZXh0VEQgfCB0b2dnbGU7CisJfQorCisJLyogaGVscCBmb3IgdHJvdWJsZXNob290aW5nOiAgcmVwb3J0IGFueXRoaW5nIHRoYXQKKwkgKiBsb29rcyBvZGQgLi4uIHRoYXQgZG9lc24ndCBpbmNsdWRlIHByb3RvY29sIHN0YWxscworCSAqIChvciBtYXliZSBzb21lIG90aGVyIHRoaW5ncykKKwkgKi8KKwlzd2l0Y2ggKGNjKSB7CisJY2FzZSBURF9EQVRBVU5ERVJSVU46CisJCWlmICgodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spID09IDApCisJCQlicmVhazsKKwkJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIFREX0NDX1NUQUxMOgorCQlpZiAodXNiX3BpcGVjb250cm9sICh1cmItPnBpcGUpKQorCQkJYnJlYWs7CisJCS8qIGZhbGx0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJb2hjaV9kYmcgKG9oY2ksCisJCQkidXJiICVwIHBhdGggJXMgZXAlZCVzICUwOHggY2MgJWQgLS0+IHN0YXR1cyAlZFxuIiwKKwkJCXVyYiwgdXJiLT5kZXYtPmRldnBhdGgsCisJCQl1c2JfcGlwZWVuZHBvaW50ICh1cmItPnBpcGUpLAorCQkJdXNiX3BpcGVpbiAodXJiLT5waXBlKSA/ICJpbiIgOiAib3V0IiwKKwkJCWhjMzJfdG9fY3B1IChvaGNpLCB0ZC0+aHdJTkZPKSwKKwkJCWNjLCBjY190b19lcnJvciBbY2NdKTsKKwl9CisKKwlyZXR1cm4gcmV2OworfQorCisvKiByZXBsaWVzIHRvIHRoZSByZXF1ZXN0IGhhdmUgdG8gYmUgb24gYSBGSUZPIGJhc2lzIHNvCisgKiB3ZSB1bnJldmVyc2UgdGhlIGhjLXJldmVyc2VkIGRvbmUtbGlzdAorICovCitzdGF0aWMgc3RydWN0IHRkICpkbF9yZXZlcnNlX2RvbmVfbGlzdCAoc3RydWN0IG9oY2lfaGNkICpvaGNpKQoreworCXUzMgkJdGRfZG1hOworCXN0cnVjdCB0ZAkqdGRfcmV2ID0gTlVMTDsKKwlzdHJ1Y3QgdGQJKnRkID0gTlVMTDsKKworCXRkX2RtYSA9IGhjMzJfdG9fY3B1cCAob2hjaSwgJm9oY2ktPmhjY2EtPmRvbmVfaGVhZCk7CisJb2hjaS0+aGNjYS0+ZG9uZV9oZWFkID0gMDsKKwl3bWIoKTsKKworCS8qIGdldCBURCBmcm9tIGhjJ3Mgc2luZ2x5IGxpbmtlZCBsaXN0LCBhbmQKKwkgKiBwcmVwZW5kIHRvIG91cnMuICBlZC0+dGRfbGlzdCBjaGFuZ2VzIGxhdGVyLgorCSAqLworCXdoaWxlICh0ZF9kbWEpIHsJCQorCSAgICAJaW50CQljYzsKKworCQl0ZCA9IGRtYV90b190ZCAob2hjaSwgdGRfZG1hKTsKKwkJaWYgKCF0ZCkgeworCQkJb2hjaV9lcnIgKG9oY2ksICJiYWQgZW50cnkgJTh4XG4iLCB0ZF9kbWEpOworCQkJYnJlYWs7CisJCX0KKworCQl0ZC0+aHdJTkZPIHw9IGNwdV90b19oYzMyIChvaGNpLCBURF9ET05FKTsKKwkJY2MgPSBURF9DQ19HRVQgKGhjMzJfdG9fY3B1cCAob2hjaSwgJnRkLT5od0lORk8pKTsKKworCQkvKiBOb24taXNvIGVuZHBvaW50cyBjYW4gaGFsdCBvbiBlcnJvcjsgdW4taGFsdCwKKwkJICogYW5kIGRlcXVldWUgYW55IG90aGVyIFREcyBmcm9tIHRoaXMgdXJiLgorCQkgKiBObyBvdGhlciBURCBjb3VsZCBoYXZlIGNhdXNlZCB0aGUgaGFsdC4KKwkJICovCisJCWlmIChjYyAhPSBURF9DQ19OT0VSUk9SCisJCQkJJiYgKHRkLT5lZC0+aHdIZWFkUCAmIGNwdV90b19oYzMyIChvaGNpLCBFRF9IKSkpCisJCQl0ZF9yZXYgPSBlZF9oYWx0ZWQgKG9oY2ksIHRkLCBjYywgdGRfcmV2KTsKKworCQl0ZC0+bmV4dF9kbF90ZCA9IHRkX3JldjsJCisJCXRkX3JldiA9IHRkOworCQl0ZF9kbWEgPSBoYzMyX3RvX2NwdXAgKG9oY2ksICZ0ZC0+aHdOZXh0VEQpOworCX0JCisJcmV0dXJuIHRkX3JldjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogdGhlcmUgYXJlIHNvbWUgdXJicy9lZHMgdG8gdW5saW5rOyBjYWxsZWQgaW5faXJxKCksIHdpdGggSENEIGxvY2tlZCAqLworc3RhdGljIHZvaWQKK2ZpbmlzaF91bmxpbmtzIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIHUxNiB0aWNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZWQJKmVkLCAqKmxhc3Q7CisKK3Jlc2Nhbl9hbGw6CisJZm9yIChsYXN0ID0gJm9oY2ktPmVkX3JtX2xpc3QsIGVkID0gKmxhc3Q7IGVkICE9IE5VTEw7IGVkID0gKmxhc3QpIHsKKwkJc3RydWN0IGxpc3RfaGVhZAkqZW50cnksICp0bXA7CisJCWludAkJCWNvbXBsZXRlZCwgbW9kaWZpZWQ7CisJCV9faGMzMgkJCSpwcmV2OworCisJCS8qIG9ubHkgdGFrZSBvZmYgRURzIHRoYXQgdGhlIEhDIGlzbid0IHVzaW5nLCBhY2NvdW50aW5nIGZvcgorCQkgKiBmcmFtZSBjb3VudGVyIHdyYXBzIGFuZCBFRHMgd2l0aCBwYXJ0aWFsbHkgcmV0aXJlZCBURHMKKwkJICovCisJCWlmIChsaWtlbHkgKHJlZ3MgJiYgSENfSVNfUlVOTklORyhvaGNpX3RvX2hjZChvaGNpKS0+c3RhdGUpKSkgeworCQkJaWYgKHRpY2tfYmVmb3JlICh0aWNrLCBlZC0+dGljaykpIHsKK3NraXBfZWQ6CisJCQkJbGFzdCA9ICZlZC0+ZWRfbmV4dDsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKCFsaXN0X2VtcHR5ICgmZWQtPnRkX2xpc3QpKSB7CisJCQkJc3RydWN0IHRkCSp0ZDsKKwkJCQl1MzIJCWhlYWQ7CisKKwkJCQl0ZCA9IGxpc3RfZW50cnkgKGVkLT50ZF9saXN0Lm5leHQsIHN0cnVjdCB0ZCwKKwkJCQkJCQl0ZF9saXN0KTsKKwkJCQloZWFkID0gaGMzMl90b19jcHUgKG9oY2ksIGVkLT5od0hlYWRQKSAmCisJCQkJCQkJCVREX01BU0s7CisKKwkJCQkvKiBJTlRSX1dESCBtYXkgbmVlZCB0byBjbGVhbiB1cCBmaXJzdCAqLworCQkJCWlmICh0ZC0+dGRfZG1hICE9IGhlYWQpCisJCQkJCWdvdG8gc2tpcF9lZDsKKwkJCX0KKwkJfQorCisJCS8qIHJlZW50cmFuY3k6ICBpZiB3ZSBkcm9wIHRoZSBzY2hlZHVsZSBsb2NrLCBzb21lb25lIG1pZ2h0CisJCSAqIGhhdmUgbW9kaWZpZWQgdGhpcyBsaXN0LiAgbm9ybWFsbHkgaXQncyBqdXN0IHByZXBlbmRpbmcKKwkJICogZW50cmllcyAod2hpY2ggd2UnZCBpZ25vcmUpLCBidXQgcGFyYW5vaWEgd29uJ3QgaHVydC4KKwkJICovCisJCSpsYXN0ID0gZWQtPmVkX25leHQ7CisJCWVkLT5lZF9uZXh0ID0gTlVMTDsKKwkJbW9kaWZpZWQgPSAwOworCisJCS8qIHVubGluayB1cmJzIGFzIHJlcXVlc3RlZCwgYnV0IHJlc2NhbiB0aGUgbGlzdCBhZnRlcgorCQkgKiB3ZSBjYWxsIGEgY29tcGxldGlvbiBzaW5jZSBpdCBtaWdodCBoYXZlIHVubGlua2VkCisJCSAqIGFub3RoZXIgKGVhcmxpZXIpIHVyYgorCQkgKgorCQkgKiBXaGVuIHdlIGdldCBoZXJlLCB0aGUgSEMgZG9lc24ndCBzZWUgdGhpcyBlZC4gIEJ1dCBpdAorCQkgKiBtdXN0IG5vdCBiZSByZXNjaGVkdWxlZCB1bnRpbCBhbGwgY29tcGxldGVkIFVSQnMgaGF2ZQorCQkgKiBiZWVuIGdpdmVuIGJhY2sgdG8gdGhlIGRyaXZlci4KKwkJICovCityZXNjYW5fdGhpczoKKwkJY29tcGxldGVkID0gMDsKKwkJcHJldiA9ICZlZC0+aHdIZWFkUDsKKwkJbGlzdF9mb3JfZWFjaF9zYWZlIChlbnRyeSwgdG1wLCAmZWQtPnRkX2xpc3QpIHsKKwkJCXN0cnVjdCB0ZAkqdGQ7CisJCQlzdHJ1Y3QgdXJiCSp1cmI7CisJCQl1cmJfcHJpdl90CSp1cmJfcHJpdjsKKwkJCV9faGMzMgkJc2F2ZWJpdHM7CisKKwkJCXRkID0gbGlzdF9lbnRyeSAoZW50cnksIHN0cnVjdCB0ZCwgdGRfbGlzdCk7CisJCQl1cmIgPSB0ZC0+dXJiOworCQkJdXJiX3ByaXYgPSB0ZC0+dXJiLT5oY3ByaXY7CisKKwkJCWlmICh1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJCQlwcmV2ID0gJnRkLT5od05leHRURDsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogcGF0Y2ggcG9pbnRlciBoYyB1c2VzICovCisJCQlzYXZlYml0cyA9ICpwcmV2ICYgfmNwdV90b19oYzMyIChvaGNpLCBURF9NQVNLKTsKKwkJCSpwcmV2ID0gdGQtPmh3TmV4dFREIHwgc2F2ZWJpdHM7CisKKwkJCS8qIEhDIG1heSBoYXZlIHBhcnRseSBwcm9jZXNzZWQgdGhpcyBURCAqLworCQkJdGRfZG9uZSAob2hjaSwgdXJiLCB0ZCk7CisJCQl1cmJfcHJpdi0+dGRfY250Kys7CisKKwkJCS8qIGlmIFVSQiBpcyBkb25lLCBjbGVhbiB1cCAqLworCQkJaWYgKHVyYl9wcml2LT50ZF9jbnQgPT0gdXJiX3ByaXYtPmxlbmd0aCkgeworCQkJCW1vZGlmaWVkID0gY29tcGxldGVkID0gMTsKKwkJCQlmaW5pc2hfdXJiIChvaGNpLCB1cmIsIHJlZ3MpOworCQkJfQorCQl9CisJCWlmIChjb21wbGV0ZWQgJiYgIWxpc3RfZW1wdHkgKCZlZC0+dGRfbGlzdCkpCisJCQlnb3RvIHJlc2Nhbl90aGlzOworCisJCS8qIEVEJ3Mgbm93IG9mZmljaWFsbHkgdW5saW5rZWQsIGhjIGRvZXNuJ3Qgc2VlICovCisJCWVkLT5zdGF0ZSA9IEVEX0lETEU7CisJCWVkLT5od0hlYWRQICY9IH5jcHVfdG9faGMzMihvaGNpLCBFRF9IKTsKKwkJZWQtPmh3TmV4dEVEID0gMDsKKwkJd21iICgpOworCQllZC0+aHdJTkZPICY9IH5jcHVfdG9faGMzMiAob2hjaSwgRURfU0tJUCB8IEVEX0RFUVVFVUUpOworCisJCS8qIGJ1dCBpZiB0aGVyZSdzIHdvcmsgcXVldWVkLCByZXNjaGVkdWxlICovCisJCWlmICghbGlzdF9lbXB0eSAoJmVkLT50ZF9saXN0KSkgeworCQkJaWYgKEhDX0lTX1JVTk5JTkcob2hjaV90b19oY2Qob2hjaSktPnN0YXRlKSkKKwkJCQllZF9zY2hlZHVsZSAob2hjaSwgZWQpOworCQl9CisKKwkJaWYgKG1vZGlmaWVkKQorCQkJZ290byByZXNjYW5fYWxsOworICAgCX0KKworCS8qIG1heWJlIHJlZW5hYmxlIGNvbnRyb2wgYW5kIGJ1bGsgbGlzdHMgKi8gCisJaWYgKEhDX0lTX1JVTk5JTkcob2hjaV90b19oY2Qob2hjaSktPnN0YXRlKQorCQkJJiYgb2hjaV90b19oY2Qob2hjaSktPnN0YXRlICE9IEhDX1NUQVRFX1FVSUVTQ0lORworCQkJJiYgIW9oY2ktPmVkX3JtX2xpc3QpIHsKKwkJdTMyCWNvbW1hbmQgPSAwLCBjb250cm9sID0gMDsKKworCQlpZiAob2hjaS0+ZWRfY29udHJvbHRhaWwpIHsKKwkJCWNvbW1hbmQgfD0gT0hDSV9DTEY7CisJCQlpZiAoIShvaGNpLT5oY19jb250cm9sICYgT0hDSV9DVFJMX0NMRSkpIHsKKwkJCQljb250cm9sIHw9IE9IQ0lfQ1RSTF9DTEU7CisJCQkJb2hjaV93cml0ZWwgKG9oY2ksIDAsCisJCQkJCSZvaGNpLT5yZWdzLT5lZF9jb250cm9sY3VycmVudCk7CisJCQl9CisJCX0KKwkJaWYgKG9oY2ktPmVkX2J1bGt0YWlsKSB7CisJCQljb21tYW5kIHw9IE9IQ0lfQkxGOworCQkJaWYgKCEob2hjaS0+aGNfY29udHJvbCAmIE9IQ0lfQ1RSTF9CTEUpKSB7CisJCQkJY29udHJvbCB8PSBPSENJX0NUUkxfQkxFOworCQkJCW9oY2lfd3JpdGVsIChvaGNpLCAwLAorCQkJCQkmb2hjaS0+cmVncy0+ZWRfYnVsa2N1cnJlbnQpOworCQkJfQorCQl9CisJCQorCQkvKiBDTEUvQkxFIHRvIGVuYWJsZSwgQ0xGL0JMRiB0byAobWF5YmUpIGtpY2tzdGFydCAqLworCQlpZiAoY29udHJvbCkgeworCQkJb2hjaS0+aGNfY29udHJvbCB8PSBjb250cm9sOworIAkJCW9oY2lfd3JpdGVsIChvaGNpLCBvaGNpLT5oY19jb250cm9sLAorCQkJCQkmb2hjaS0+cmVncy0+Y29udHJvbCk7ICAgCisgCQl9CisJCWlmIChjb21tYW5kKQorCQkJb2hjaV93cml0ZWwgKG9oY2ksIGNvbW1hbmQsICZvaGNpLT5yZWdzLT5jbWRzdGF0dXMpOyAgIAorIAl9Cit9CisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogUHJvY2VzcyBub3JtYWwgY29tcGxldGlvbnMgKGVycm9yIG9yIHN1Y2Nlc3MpIGFuZCBjbGVhbiB0aGUgc2NoZWR1bGVzLgorICoKKyAqIFRoaXMgaXMgdGhlIG1haW4gcGF0aCBmb3IgaGFuZGluZyB1cmJzIGJhY2sgdG8gZHJpdmVycy4gIFRoZSBvbmx5IG90aGVyCisgKiBwYXRoIGlzIGZpbmlzaF91bmxpbmtzKCksIHdoaWNoIHVubGlua3MgVVJCcyB1c2luZyBlZF9ybV9saXN0LCBpbnN0ZWFkIG9mCisgKiBzY2FubmluZyB0aGUgKHJlLXJldmVyc2VkKSBkb25lbGlzdCBhcyB0aGlzIGRvZXMuCisgKi8KK3N0YXRpYyB2b2lkCitkbF9kb25lX2xpc3QgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHRkCSp0ZCA9IGRsX3JldmVyc2VfZG9uZV9saXN0IChvaGNpKTsKKworICAJd2hpbGUgKHRkKSB7CisJCXN0cnVjdCB0ZAkqdGRfbmV4dCA9IHRkLT5uZXh0X2RsX3RkOworCQlzdHJ1Y3QgdXJiCSp1cmIgPSB0ZC0+dXJiOworCQl1cmJfcHJpdl90CSp1cmJfcHJpdiA9IHVyYi0+aGNwcml2OworCQlzdHJ1Y3QgZWQJKmVkID0gdGQtPmVkOworCisJCS8qIHVwZGF0ZSBVUkIncyBsZW5ndGggYW5kIHN0YXR1cyBmcm9tIFREICovCisgICAJCXRkX2RvbmUgKG9oY2ksIHVyYiwgdGQpOworICAJCXVyYl9wcml2LT50ZF9jbnQrKzsKKworCQkvKiBJZiBhbGwgdGhpcyB1cmIncyBURHMgYXJlIGRvbmUsIGNhbGwgY29tcGxldGUoKSAqLworICAJCWlmICh1cmJfcHJpdi0+dGRfY250ID09IHVyYl9wcml2LT5sZW5ndGgpCisgIAkJCWZpbmlzaF91cmIgKG9oY2ksIHVyYiwgcmVncyk7CisKKwkJLyogY2xlYW4gc2NoZWR1bGU6ICB1bmxpbmsgRURzIHRoYXQgYXJlIG5vIGxvbmdlciBidXN5ICovCisJCWlmIChsaXN0X2VtcHR5ICgmZWQtPnRkX2xpc3QpKSB7CisJCQlpZiAoZWQtPnN0YXRlID09IEVEX09QRVIpCisJCQkJc3RhcnRfZWRfdW5saW5rIChvaGNpLCBlZCk7CisKKwkJLyogLi4uIHJlZW5hYmxpbmcgaGFsdGVkIEVEcyBvbmx5IGFmdGVyIGZhdWx0IGNsZWFudXAgKi8KKwkJfSBlbHNlIGlmICgoZWQtPmh3SU5GTyAmIGNwdV90b19oYzMyIChvaGNpLCBFRF9TS0lQIHwgRURfREVRVUVVRSkpCisJCQkJCT09IGNwdV90b19oYzMyIChvaGNpLCBFRF9TS0lQKSkgeworCQkJdGQgPSBsaXN0X2VudHJ5IChlZC0+dGRfbGlzdC5uZXh0LCBzdHJ1Y3QgdGQsIHRkX2xpc3QpOworIAkJCWlmICghKHRkLT5od0lORk8gJiBjcHVfdG9faGMzMiAob2hjaSwgVERfRE9ORSkpKSB7CisJCQkJZWQtPmh3SU5GTyAmPSB+Y3B1X3RvX2hjMzIgKG9oY2ksIEVEX1NLSVApOworCQkJCS8qIC4uLiBoYyBtYXkgbmVlZCB3YWtpbmctdXAgKi8KKwkJCQlzd2l0Y2ggKGVkLT50eXBlKSB7CisJCQkJY2FzZSBQSVBFX0NPTlRST0w6CisJCQkJCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0NMRiwKKwkJCQkJCSZvaGNpLT5yZWdzLT5jbWRzdGF0dXMpOyAgIAorCQkJCQlicmVhazsKKwkJCQljYXNlIFBJUEVfQlVMSzoKKwkJCQkJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfQkxGLAorCQkJCQkJJm9oY2ktPnJlZ3MtPmNtZHN0YXR1cyk7ICAgCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisgICAgCQl0ZCA9IHRkX25leHQ7CisgIAl9ICAKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zYTExMTEuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zYTExMTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTRkMmJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNhMTExMS5jCkBAIC0wLDAgKzEsMjg5IEBACisvKgorICogT0hDSSBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCisgKgorICogKEMpIENvcHlyaWdodCAxOTk5IFJvbWFuIFdlaXNzZ2FlcmJlciA8d2Vpc3NnQHZpZW5uYS5hdD4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAyIERhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogKEMpIENvcHlyaWdodCAyMDAyIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKiAKKyAqIFNBMTExMSBCdXMgR2x1ZQorICoKKyAqIFdyaXR0ZW4gYnkgQ2hyaXN0b3BoZXIgSG9vdmVyIDxjaEBocGwuaHAuY29tPgorICogQmFzZWQgb24gZnJhZ21lbnRzIG9mIHByZXZpb3VzIGRyaXZlciBieSBSdXNlbGwgS2luZyBldCBhbC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTC4KKyAqLworIAorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYXNzYWJldC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JhZGdlNC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zYTExMTEuaD4KKworI2lmbmRlZiBDT05GSUdfU0ExMTExCisjZXJyb3IgIlRoaXMgZmlsZSBpcyBTQS0xMTExIGJ1cyBnbHVlLiAgQ09ORklHX1NBMTExMSBtdXN0IGJlIGRlZmluZWQuIgorI2VuZGlmCisKK2V4dGVybiBpbnQgdXNiX2Rpc2FibGVkKHZvaWQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBzYTExMTFfc3RhcnRfaGMoc3RydWN0IHNhMTExMV9kZXYgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgdXNiX3JzdCA9IDA7CisKKwlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXyAKKwkgICAgICAgIjogc3RhcnRpbmcgU0EtMTExMSBPSENJIFVTQiBDb250cm9sbGVyXG4iKTsKKworI2lmZGVmIENPTkZJR19TQTExMDBfQkFER0U0CisJaWYgKG1hY2hpbmVfaXNfYmFkZ2U0KCkpIHsKKwkJYmFkZ2U0X3NldF81VihCQURHRTRfNVZfVVNCLCAxKTsKKwl9CisjZW5kaWYKKworCWlmIChtYWNoaW5lX2lzX3hwODYwKCkgfHwKKwkgICAgbWFjaGluZV9oYXNfbmVwb25zZXQoKSB8fAorCSAgICBtYWNoaW5lX2lzX3BmczE2OCgpIHx8CisJICAgIG1hY2hpbmVfaXNfYmFkZ2U0KCkpCisJCXVzYl9yc3QgPSBVU0JfUkVTRVRfUFdSU0VOU0VMT1cgfCBVU0JfUkVTRVRfUFdSQ1RSTExPVzsKKworCS8qCisJICogQ29uZmlndXJlIHRoZSBwb3dlciBzZW5zZSBhbmQgY29udHJvbCBsaW5lcy4gIFBsYWNlIHRoZSBVU0IKKwkgKiBob3N0IGNvbnRyb2xsZXIgaW4gcmVzZXQuCisJICovCisJc2ExMTExX3dyaXRlbCh1c2JfcnN0IHwgVVNCX1JFU0VUX0ZPUkNFSUZSRVNFVCB8IFVTQl9SRVNFVF9GT1JDRUhDUkVTRVQsCisJCSAgICAgIGRldi0+bWFwYmFzZSArIFNBMTExMV9VU0JfUkVTRVQpOworCisJLyoKKwkgKiBOb3csIGNhcmVmdWxseSBlbmFibGUgdGhlIFVTQiBjbG9jaywgYW5kIHRha2UKKwkgKiB0aGUgVVNCIGhvc3QgY29udHJvbGxlciBvdXQgb2YgcmVzZXQuCisJICovCisJc2ExMTExX2VuYWJsZV9kZXZpY2UoZGV2KTsKKwl1ZGVsYXkoMTEpOworCXNhMTExMV93cml0ZWwodXNiX3JzdCwgZGV2LT5tYXBiYXNlICsgU0ExMTExX1VTQl9SRVNFVCk7Cit9CisKK3N0YXRpYyB2b2lkIHNhMTExMV9zdG9wX2hjKHN0cnVjdCBzYTExMTFfZGV2ICpkZXYpCit7CisJdW5zaWduZWQgaW50IHVzYl9yc3Q7CisJcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18gCisJICAgICAgICI6IHN0b3BwaW5nIFNBLTExMTEgT0hDSSBVU0IgQ29udHJvbGxlclxuIik7CisKKwkvKgorCSAqIFB1dCB0aGUgVVNCIGhvc3QgY29udHJvbGxlciBpbnRvIHJlc2V0LgorCSAqLworCXVzYl9yc3QgPSBzYTExMTFfcmVhZGwoZGV2LT5tYXBiYXNlICsgU0ExMTExX1VTQl9SRVNFVCk7CisJc2ExMTExX3dyaXRlbCh1c2JfcnN0IHwgVVNCX1JFU0VUX0ZPUkNFSUZSRVNFVCB8IFVTQl9SRVNFVF9GT1JDRUhDUkVTRVQsCisJCSAgICAgIGRldi0+bWFwYmFzZSArIFNBMTExMV9VU0JfUkVTRVQpOworCisJLyoKKwkgKiBTdG9wIHRoZSBVU0IgY2xvY2suCisJICovCisJc2ExMTExX2Rpc2FibGVfZGV2aWNlKGRldik7CisKKyNpZmRlZiBDT05GSUdfU0ExMTAwX0JBREdFNAorCWlmIChtYWNoaW5lX2lzX2JhZGdlNCgpKSB7CisJCS8qIERpc2FibGUgcG93ZXIgdG8gdGhlIFVTQiBidXMgKi8KKwkJYmFkZ2U0X3NldF81VihCQURHRTRfNVZfVVNCLCAwKTsKKwl9CisjZW5kaWYKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgMAorc3RhdGljIHZvaWQgZHVtcF9oY2lfc3RhdHVzKHN0cnVjdCB1c2JfaGNkICpoY2QsIGNvbnN0IGNoYXIgKmxhYmVsKQoreworCXVuc2lnbmVkIGxvbmcgc3RhdHVzID0gc2ExMTExX3JlYWRsKGhjZC0+cmVncyArIFNBMTExMV9VU0JfU1RBVFVTKTsKKworCWRiZyAoIiVzIFVTQl9TVEFUVVMgPSB7ICVzJXMlcyVzJXN9IiwgbGFiZWwsCisJICAgICAoKHN0YXR1cyAmIFVTQl9TVEFUVVNfSVJRSENJUk1UV0tVUCkgPyAiSVJRSENJUk1UV0tVUCAiIDogIiIpLAorCSAgICAgKChzdGF0dXMgJiBVU0JfU1RBVFVTX0lSUUhDSUJVRkZBQ0MpID8gIklSUUhDSUJVRkZBQ0MgIiA6ICIiKSwKKwkgICAgICgoc3RhdHVzICYgVVNCX1NUQVRVU19OSVJRSENJTSkgPyAiIiA6ICJJUlFIQ0lNICIpLAorCSAgICAgKChzdGF0dXMgJiBVU0JfU1RBVFVTX05IQ0lNRkNMUikgPyAiIiA6ICJIQ0lNRkNMUiAiKSwKKwkgICAgICgoc3RhdHVzICYgVVNCX1NUQVRVU19VU0JQV1JTRU5TRSkgPyAiVVNCUFdSU0VOU0UgIiA6ICIiKSk7Cit9CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogY29uZmlndXJlIHNvIGFuIEhDIGRldmljZSBhbmQgaWQgYXJlIGFsd2F5cyBwcm92aWRlZCAqLworLyogYWx3YXlzIGNhbGxlZCB3aXRoIHByb2Nlc3MgY29udGV4dDsgc2xlZXBpbmcgaXMgT0sgKi8KKworCisvKioKKyAqIHVzYl9oY2Rfc2ExMTExX3Byb2JlIC0gaW5pdGlhbGl6ZSBTQS0xMTExLWJhc2VkIEhDRHMKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIEFsbG9jYXRlcyBiYXNpYyByZXNvdXJjZXMgZm9yIHRoaXMgVVNCIGhvc3QgY29udHJvbGxlciwgYW5kCisgKiB0aGVuIGludm9rZXMgdGhlIHN0YXJ0KCkgbWV0aG9kIGZvciB0aGUgSENEIGFzc29jaWF0ZWQgd2l0aCBpdAorICogdGhyb3VnaCB0aGUgaG90cGx1ZyBlbnRyeSdzIGRyaXZlcl9kYXRhLgorICoKKyAqIFN0b3JlIHRoaXMgZnVuY3Rpb24gaW4gdGhlIEhDRCdzIHN0cnVjdCBwY2lfZHJpdmVyIGFzIHByb2JlKCkuCisgKi8KK2ludCB1c2JfaGNkX3NhMTExMV9wcm9iZSAoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAorCQkJICBzdHJ1Y3Qgc2ExMTExX2RldiAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisJaW50IHJldHZhbDsKKworCWhjZCA9IHVzYl9jcmVhdGVfaGNkIChkcml2ZXIsICZkZXYtPmRldiwgInNhMTExMSIpOworCWlmICghaGNkKQorCQlyZXR1cm4gLUVOT01FTTsKKwloY2QtPnJzcmNfc3RhcnQgPSBkZXYtPnJlcy5zdGFydDsKKwloY2QtPnJzcmNfbGVuID0gZGV2LT5yZXMuZW5kIC0gZGV2LT5yZXMuc3RhcnQgKyAxOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLCBoY2RfbmFtZSkpIHsKKwkJZGJnKCJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkIik7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBlcnIxOworCX0KKwloY2QtPnJlZ3MgPSBkZXYtPm1hcGJhc2U7CisKKwlzYTExMTFfc3RhcnRfaGMoZGV2KTsKKwlvaGNpX2hjZF9pbml0KGhjZF90b19vaGNpKGhjZCkpOworCisJcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBkZXYtPmlycVsxXSwgU0FfSU5URVJSVVBUKTsKKwlpZiAocmV0dmFsID09IDApCisJCXJldHVybiByZXR2YWw7CisKKwlzYTExMTFfc3RvcF9oYyhkZXYpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworIGVycjE6CisJdXNiX3B1dF9oY2QoaGNkKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qIG1heSBiZSBjYWxsZWQgd2l0aG91dCBjb250cm9sbGVyIGVsZWN0cmljYWxseSBwcmVzZW50ICovCisvKiBtYXkgYmUgY2FsbGVkIHdpdGggY29udHJvbGxlciwgYnVzLCBhbmQgZGV2aWNlcyBhY3RpdmUgKi8KKworLyoqCisgKiB1c2JfaGNkX3NhMTExMV9yZW1vdmUgLSBzaHV0ZG93biBwcm9jZXNzaW5nIGZvciBTQS0xMTExLWJhc2VkIEhDRHMKKyAqIEBkZXY6IFVTQiBIb3N0IENvbnRyb2xsZXIgYmVpbmcgcmVtb3ZlZAorICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogUmV2ZXJzZXMgdGhlIGVmZmVjdCBvZiB1c2JfaGNkX3NhMTExMV9wcm9iZSgpLCBmaXJzdCBpbnZva2luZworICogdGhlIEhDRCdzIHN0b3AoKSBtZXRob2QuICBJdCBpcyBhbHdheXMgY2FsbGVkIGZyb20gYSB0aHJlYWQKKyAqIGNvbnRleHQsIG5vcm1hbGx5ICJybW1vZCIsICJhcG1kIiwgb3Igc29tZXRoaW5nIHNpbWlsYXIuCisgKgorICovCit2b2lkIHVzYl9oY2Rfc2ExMTExX3JlbW92ZSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHNhMTExMV9kZXYgKmRldikKK3sKKwl1c2JfcmVtb3ZlX2hjZChoY2QpOworCXNhMTExMV9zdG9wX2hjKGRldik7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJdXNiX3B1dF9oY2QoaGNkKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2RldmluaXQKK29oY2lfc2ExMTExX3N0YXJ0IChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCWludAkJcmV0OworCisJaWYgKChyZXQgPSBvaGNpX2luaXQob2hjaSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmICgocmV0ID0gb2hjaV9ydW4gKG9oY2kpKSA8IDApIHsKKwkJZXJyICgiY2FuJ3Qgc3RhcnQgJXMiLCBoY2QtPnNlbGYuYnVzX25hbWUpOworCQlvaGNpX3N0b3AgKGhjZCk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGhjX2RyaXZlciBvaGNpX3NhMTExMV9oY19kcml2ZXIgPSB7CisJLmRlc2NyaXB0aW9uID0JCWhjZF9uYW1lLAorCS5wcm9kdWN0X2Rlc2MgPQkJIlNBLTExMTEgT0hDSSIsCisJLmhjZF9wcml2X3NpemUgPQlzaXplb2Yoc3RydWN0IG9oY2lfaGNkKSwKKworCS8qCisJICogZ2VuZXJpYyBoYXJkd2FyZSBsaW5rYWdlCisJICovCisJLmlycSA9CQkJb2hjaV9pcnEsCisJLmZsYWdzID0JCUhDRF9VU0IxMSB8IEhDRF9NRU1PUlksCisKKwkvKgorCSAqIGJhc2ljIGxpZmVjeWNsZSBvcGVyYXRpb25zCisJICovCisJLnN0YXJ0ID0JCW9oY2lfc2ExMTExX3N0YXJ0LAorI2lmZGVmCUNPTkZJR19QTQorCS8qIHN1c3BlbmQ6CQlvaGNpX3NhMTExMV9zdXNwZW5kLCAgLS0gdGJkICovCisJLyogcmVzdW1lOgkJb2hjaV9zYTExMTFfcmVzdW1lLCAgIC0tIHRiZCAqLworI2VuZGlmCisJLnN0b3AgPQkJCW9oY2lfc3RvcCwKKworCS8qCisJICogbWFuYWdpbmcgaS9vIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIGRldmljZSByZXNvdXJjZXMKKwkgKi8KKwkudXJiX2VucXVldWUgPQkJb2hjaV91cmJfZW5xdWV1ZSwKKwkudXJiX2RlcXVldWUgPQkJb2hjaV91cmJfZGVxdWV1ZSwKKwkuZW5kcG9pbnRfZGlzYWJsZSA9CW9oY2lfZW5kcG9pbnRfZGlzYWJsZSwKKworCS8qCisJICogc2NoZWR1bGluZyBzdXBwb3J0CisJICovCisJLmdldF9mcmFtZV9udW1iZXIgPQlvaGNpX2dldF9mcmFtZSwKKworCS8qCisJICogcm9vdCBodWIgc3VwcG9ydAorCSAqLworCS5odWJfc3RhdHVzX2RhdGEgPQlvaGNpX2h1Yl9zdGF0dXNfZGF0YSwKKwkuaHViX2NvbnRyb2wgPQkJb2hjaV9odWJfY29udHJvbCwKKyNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKKwkuaHViX3N1c3BlbmQgPQkJb2hjaV9odWJfc3VzcGVuZCwKKwkuaHViX3Jlc3VtZSA9CQlvaGNpX2h1Yl9yZXN1bWUsCisjZW5kaWYKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgb2hjaV9oY2Rfc2ExMTExX2Rydl9wcm9iZShzdHJ1Y3Qgc2ExMTExX2RldiAqZGV2KQoreworCWludCByZXQ7CisKKwlpZiAodXNiX2Rpc2FibGVkKCkpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gdXNiX2hjZF9zYTExMTFfcHJvYmUoJm9oY2lfc2ExMTExX2hjX2RyaXZlciwgZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9oY2lfaGNkX3NhMTExMV9kcnZfcmVtb3ZlKHN0cnVjdCBzYTExMTFfZGV2ICpkZXYpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHNhMTExMV9nZXRfZHJ2ZGF0YShkZXYpOworCisJdXNiX2hjZF9zYTExMTFfcmVtb3ZlKGhjZCwgZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzYTExMTFfZHJpdmVyIG9oY2lfaGNkX3NhMTExMV9kcml2ZXIgPSB7CisJLmRydiA9IHsKKwkJLm5hbWUJPSAic2ExMTExLW9oY2kiLAorCX0sCisJLmRldmlkCQk9IFNBMTExMV9ERVZJRF9VU0IsCisJLnByb2JlCQk9IG9oY2lfaGNkX3NhMTExMV9kcnZfcHJvYmUsCisJLnJlbW92ZQkJPSBvaGNpX2hjZF9zYTExMTFfZHJ2X3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9oY2lfaGNkX3NhMTExMV9pbml0ICh2b2lkKQoreworCWRiZyAoRFJJVkVSX0lORk8gIiAoU0EtMTExMSkiKTsKKwlkYmcgKCJibG9jayBzaXplczogZWQgJWQgdGQgJWQiLAorCQlzaXplb2YgKHN0cnVjdCBlZCksIHNpemVvZiAoc3RydWN0IHRkKSk7CisKKwlyZXR1cm4gc2ExMTExX2RyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2Rfc2ExMTExX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvaGNpX2hjZF9zYTExMTFfY2xlYW51cCAodm9pZCkKK3sKKwlzYTExMTFfZHJpdmVyX3VucmVnaXN0ZXIoJm9oY2lfaGNkX3NhMTExMV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCAob2hjaV9oY2Rfc2ExMTExX2luaXQpOworbW9kdWxlX2V4aXQgKG9oY2lfaGNkX3NhMTExMV9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS5oIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJhNmUyYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS5oCkBAIC0wLDAgKzEsNjM2IEBACisvKgorICogT0hDSSBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCisgKiAKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+CisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMiBEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqIAorICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKworLyoKKyAqIF9faGMzMiBhbmQgX19oYzE2IGFyZSAiSG9zdCBDb250cm9sbGVyIiB0eXBlcywgdGhleSBtYXkgYmUgZXF1aXZhbGVudCB0bworICogX19sZVhYIChub3JtYWxseSkgb3IgX19iZVhYIChnaXZlbiBPSENJX0JJR19FTkRJQU4pLCBkZXBlbmRpbmcgb24gdGhlCisgKiBob3N0IGNvbnRyb2xsZXIgaW1wbGVtZW50YXRpb24uCisgKi8KK3R5cGVkZWYgX191MzIgX19iaXR3aXNlIF9faGMzMjsKK3R5cGVkZWYgX191MTYgX19iaXR3aXNlIF9faGMxNjsKKyAKKy8qCisgKiBPSENJIEVuZHBvaW50IERlc2NyaXB0b3IgKEVEKSAuLi4gaG9sZHMgVEQgcXVldWUKKyAqIFNlZSBPSENJIHNwZWMsIHNlY3Rpb24gNC4yCisgKgorICogVGhpcyBpcyBhICJRdWV1ZSBIZWFkIiBmb3IgdGhvc2UgdHJhbnNmZXJzLCB3aGljaCBpcyB3aHkKKyAqIGJvdGggRUhDSSBhbmQgVUhDSSBjYWxsIHNpbWlsYXIgc3RydWN0dXJlcyBhICJRSCIuCisgKi8KK3N0cnVjdCBlZCB7CisJLyogZmlyc3QgZmllbGRzIGFyZSBoYXJkd2FyZS1zcGVjaWZpZWQgKi8KKwlfX2hjMzIJCQlod0lORk87ICAgICAgIAkvKiBlbmRwb2ludCBjb25maWcgYml0bWFwICovCisJLyogaW5mbyBiaXRzIGRlZmluZWQgYnkgaGNkICovCisjZGVmaW5lIEVEX0RFUVVFVUUJKDEgPDwgMjcpCisJLyogaW5mbyBiaXRzIGRlZmluZWQgYnkgdGhlIGhhcmR3YXJlICovCisjZGVmaW5lIEVEX0lTTwkJKDEgPDwgMTUpCisjZGVmaW5lIEVEX1NLSVAJCSgxIDw8IDE0KQorI2RlZmluZSBFRF9MT1dTUEVFRAkoMSA8PCAxMykKKyNkZWZpbmUgRURfT1VUCQkoMHgwMSA8PCAxMSkKKyNkZWZpbmUgRURfSU4JCSgweDAyIDw8IDExKQorCV9faGMzMgkJCWh3VGFpbFA7CS8qIHRhaWwgb2YgVEQgbGlzdCAqLworCV9faGMzMgkJCWh3SGVhZFA7CS8qIGhlYWQgb2YgVEQgbGlzdCAoaGMgci93KSAqLworI2RlZmluZSBFRF9DCQkoMHgwMikJCQkvKiB0b2dnbGUgY2FycnkgKi8KKyNkZWZpbmUgRURfSAkJKDB4MDEpCQkJLyogaGFsdGVkICovCisJX19oYzMyCQkJaHdOZXh0RUQ7CS8qIG5leHQgRUQgaW4gbGlzdCAqLworCisJLyogcmVzdCBhcmUgcHVyZWx5IGZvciB0aGUgZHJpdmVyJ3MgdXNlICovCisJZG1hX2FkZHJfdAkJZG1hOwkJLyogYWRkciBvZiBFRCAqLworCXN0cnVjdCB0ZAkJKmR1bW15OwkJLyogbmV4dCBURCB0byBhY3RpdmF0ZSAqLworCisJLyogaG9zdCdzIHZpZXcgb2Ygc2NoZWR1bGUgKi8KKwlzdHJ1Y3QgZWQJCSplZF9uZXh0OwkvKiBvbiBzY2hlZHVsZSBvciBybV9saXN0ICovCisJc3RydWN0IGVkCQkqZWRfcHJldjsJLyogZm9yIG5vbi1pbnRlcnJ1cHQgRURzICovCisJc3RydWN0IGxpc3RfaGVhZAl0ZF9saXN0OwkvKiAic2hhZG93IGxpc3QiIG9mIG91ciBURHMgKi8KKworCS8qIGNyZWF0ZSAtLT4gSURMRSAtLT4gT1BFUiAtLT4gLi4uIC0tPiBJRExFIC0tPiBkZXN0cm95CisJICogdXN1YWxseTogIE9QRVIgLS0+IFVOTElOSyAtLT4gKElETEUgfCBPUEVSKSAtLT4gLi4uCisJICovCisJdTgJCQlzdGF0ZTsJCS8qIEVEX3tJRExFLFVOTElOSyxPUEVSfSAqLworI2RlZmluZSBFRF9JRExFIAkweDAwCQkvKiBOT1QgbGlua2VkIHRvIEhDICovCisjZGVmaW5lIEVEX1VOTElOSyAJMHgwMQkJLyogYmVpbmcgdW5saW5rZWQgZnJvbSBoYyAqLworI2RlZmluZSBFRF9PUEVSCQkweDAyCQkvKiBJUyBsaW5rZWQgdG8gaGMgKi8KKworCXU4CQkJdHlwZTsgCQkvKiBQSVBFX3tCVUxLLC4uLn0gKi8KKworCS8qIHBlcmlvZGljIHNjaGVkdWxpbmcgcGFyYW1zIChmb3IgaW50ciBhbmQgaXNvKSAqLworCXU4CQkJYnJhbmNoOworCXUxNgkJCWludGVydmFsOworCXUxNgkJCWxvYWQ7CisJdTE2CQkJbGFzdF9pc287CS8qIGlzbyBvbmx5ICovCisKKwkvKiBIQyBtYXkgc2VlIEVEcyBvbiBybV9saXN0IHVudGlsIG5leHQgZnJhbWUgKGZyYW1lX25vID09IHRpY2spICovCisJdTE2CQkJdGljazsKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMTYpKSk7CisKKyNkZWZpbmUgRURfTUFTSwkoKHUzMil+MHgwZikJCS8qIHN0cmlwIGh3IHN0YXR1cyBpbiBsb3cgYWRkciBiaXRzICovCisKKyAKKy8qCisgKiBPSENJIFRyYW5zZmVyIERlc2NyaXB0b3IgKFREKSAuLi4gb25lIHBlciB0cmFuc2ZlciBzZWdtZW50CisgKiBTZWUgT0hDSSBzcGVjLCBzZWN0aW9ucyA0LjMuMSAoZ2VuZXJhbCA9IGNvbnRyb2wvYnVsay9pbnRlcnJ1cHQpCisgKiBhbmQgNC4zLjIgKGlzbykKKyAqLworc3RydWN0IHRkIHsKKwkvKiBmaXJzdCBmaWVsZHMgYXJlIGhhcmR3YXJlLXNwZWNpZmllZCAqLworCV9faGMzMgkJaHdJTkZPOwkJLyogdHJhbnNmZXIgaW5mbyBiaXRtYXNrICovCisKKwkvKiBod0lORk8gYml0cyBmb3IgYm90aCBnZW5lcmFsIGFuZCBpc28gdGRzOiAqLworI2RlZmluZSBURF9DQyAgICAgICAweGYwMDAwMDAwCQkJLyogY29uZGl0aW9uIGNvZGUgKi8KKyNkZWZpbmUgVERfQ0NfR0VUKHRkX3ApICgodGRfcCA+PjI4KSAmIDB4MGYpCisvLyNkZWZpbmUgVERfQ0NfU0VUKHRkX3AsIGNjKSAodGRfcCkgPSAoKHRkX3ApICYgMHgwZmZmZmZmZikgfCAoKChjYykgJiAweDBmKSA8PCAyOCkKKyNkZWZpbmUgVERfREkgICAgICAgMHgwMEUwMDAwMAkJCS8qIGZyYW1lcyBiZWZvcmUgaW50ZXJydXB0ICovCisjZGVmaW5lIFREX0RJX1NFVChYKSAoKChYKSAmIDB4MDcpPDwgMjEpCisJLyogdGhlc2UgdHdvIGJpdHMgYXJlIGF2YWlsYWJsZSBmb3IgZGVmaW5pdGlvbi91c2UgYnkgSENEcyBpbiBib3RoCisJICogZ2VuZXJhbCBhbmQgaXNvIHRkcyAuLi4gb3RoZXJzIGFyZSBhdmFpbGFibGUgZm9yIG9ubHkgb25lIHR5cGUKKwkgKi8KKyNkZWZpbmUgVERfRE9ORSAgICAgMHgwMDAyMDAwMAkJCS8qIHJldGlyZWQgdG8gZG9uZWxpc3QgKi8KKyNkZWZpbmUgVERfSVNPICAgICAgMHgwMDAxMDAwMAkJCS8qIGNvcHkgb2YgRURfSVNPICovCisKKwkvKiBod0lORk8gYml0cyBmb3IgZ2VuZXJhbCB0ZHM6ICovCisjZGVmaW5lIFREX0VDICAgICAgIDB4MEMwMDAwMDAJCQkvKiBlcnJvciBjb3VudCAqLworI2RlZmluZSBURF9UICAgICAgICAweDAzMDAwMDAwCQkJLyogZGF0YSB0b2dnbGUgc3RhdGUgKi8KKyNkZWZpbmUgVERfVF9EQVRBMCAgMHgwMjAwMDAwMAkJCQkvKiBEQVRBMCAqLworI2RlZmluZSBURF9UX0RBVEExICAweDAzMDAwMDAwCQkJCS8qIERBVEExICovCisjZGVmaW5lIFREX1RfVE9HR0xFIDB4MDAwMDAwMDAJCQkJLyogdXNlcyBFRF9DICovCisjZGVmaW5lIFREX0RQICAgICAgIDB4MDAxODAwMDAJCQkvKiBkaXJlY3Rpb24vcGlkICovCisjZGVmaW5lIFREX0RQX1NFVFVQIDB4MDAwMDAwMDAJCQkvKiBTRVRVUCBwaWQgKi8KKyNkZWZpbmUgVERfRFBfSU4gICAgMHgwMDEwMDAwMAkJCQkvKiBJTiBwaWQgKi8KKyNkZWZpbmUgVERfRFBfT1VUICAgMHgwMDA4MDAwMAkJCQkvKiBPVVQgcGlkICovCisJCQkJCQkJLyogMHgwMDE4MDAwMCByc3ZkICovCisjZGVmaW5lIFREX1IgICAgICAgIDB4MDAwNDAwMDAJCQkvKiByb3VuZDogc2hvcnQgcGFja2V0cyBPSz8gKi8KKworCS8qIChubyBod0lORk8gI2RlZmluZXMgeWV0IGZvciBpc28gdGRzKSAqLworCisgIAlfX2hjMzIJCWh3Q0JQOwkJLyogQ3VycmVudCBCdWZmZXIgUG9pbnRlciAob3IgMCkgKi8KKyAgCV9faGMzMgkJaHdOZXh0VEQ7CS8qIE5leHQgVEQgUG9pbnRlciAqLworICAJX19oYzMyCQlod0JFOwkJLyogTWVtb3J5IEJ1ZmZlciBFbmQgUG9pbnRlciAqLworCisJLyogUFNXIGlzIG9ubHkgZm9yIElTTy4gIE9ubHkgMSBQU1cgZW50cnkgaXMgdXNlZCwgYnV0IG9uCisJICogYmlnLWVuZGlhbiBQUEMgaGFyZHdhcmUgdGhhdCdzIHRoZSBzZWNvbmQgZW50cnkuCisJICovCisjZGVmaW5lIE1BWFBTVwkyCisgIAlfX2hjMTYJCWh3UFNXIFtNQVhQU1ddOworCisJLyogcmVzdCBhcmUgcHVyZWx5IGZvciB0aGUgZHJpdmVyJ3MgdXNlICovCisgIAlfX3U4CQlpbmRleDsKKyAgCXN0cnVjdCBlZAkqZWQ7CisgIAlzdHJ1Y3QgdGQJKnRkX2hhc2g7CS8qIGRtYS0tPnRkIGhhc2h0YWJsZSAqLworICAJc3RydWN0IHRkCSpuZXh0X2RsX3RkOworICAJc3RydWN0IHVyYgkqdXJiOworCisJZG1hX2FkZHJfdAl0ZF9kbWE7CQkvKiBhZGRyIG9mIHRoaXMgVEQgKi8KKwlkbWFfYWRkcl90CWRhdGFfZG1hOwkvKiBhZGRyIG9mIGRhdGEgaXQgcG9pbnRzIHRvICovCisKKwlzdHJ1Y3QgbGlzdF9oZWFkIHRkX2xpc3Q7CS8qICJzaGFkb3cgbGlzdCIsIFREcyBvbiBzYW1lIEVEICovCit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDMyKSkpOwkvKiBjL2IvaSBuZWVkIDE2OyBvbmx5IGlzbyBuZWVkcyAzMiAqLworCisjZGVmaW5lIFREX01BU0sJKCh1MzIpfjB4MWYpCQkvKiBzdHJpcCBodyBzdGF0dXMgaW4gbG93IGFkZHIgYml0cyAqLworCisvKgorICogSGFyZHdhcmUgdHJhbnNmZXIgc3RhdHVzIGNvZGVzIC0tIENDIGZyb20gdGQtPmh3SU5GTyBvciB0ZC0+aHdQU1cKKyAqLworI2RlZmluZSBURF9DQ19OT0VSUk9SICAgICAgMHgwMAorI2RlZmluZSBURF9DQ19DUkMgICAgICAgICAgMHgwMQorI2RlZmluZSBURF9DQ19CSVRTVFVGRklORyAgMHgwMgorI2RlZmluZSBURF9DQ19EQVRBVE9HR0xFTSAgMHgwMworI2RlZmluZSBURF9DQ19TVEFMTCAgICAgICAgMHgwNAorI2RlZmluZSBURF9ERVZOT1RSRVNQICAgICAgMHgwNQorI2RlZmluZSBURF9QSURDSEVDS0ZBSUwgICAgMHgwNgorI2RlZmluZSBURF9VTkVYUEVDVEVEUElEICAgMHgwNworI2RlZmluZSBURF9EQVRBT1ZFUlJVTiAgICAgMHgwOAorI2RlZmluZSBURF9EQVRBVU5ERVJSVU4gICAgMHgwOQorICAgIC8qIDB4MEEsIDB4MEIgcmVzZXJ2ZWQgZm9yIGhhcmR3YXJlICovCisjZGVmaW5lIFREX0JVRkZFUk9WRVJSVU4gICAweDBDCisjZGVmaW5lIFREX0JVRkZFUlVOREVSUlVOICAweDBECisgICAgLyogMHgwRSwgMHgwRiByZXNlcnZlZCBmb3IgSENEICovCisjZGVmaW5lIFREX05PVEFDQ0VTU0VEICAgICAweDBGCisKKworLyogbWFwIE9IQ0kgVEQgc3RhdHVzIGNvZGVzIChDQykgdG8gZXJybm8gdmFsdWVzICovIAorc3RhdGljIGNvbnN0IGludCBjY190b19lcnJvciBbMTZdID0geyAKKwkvKiBObyAgRXJyb3IgICovICAgICAgICAgICAgICAgMCwKKwkvKiBDUkMgRXJyb3IgICovICAgICAgICAgICAgICAgLUVJTFNFUSwKKwkvKiBCaXQgU3R1ZmYgICovICAgICAgICAgICAgICAgLUVQUk9UTywKKwkvKiBEYXRhIFRvZ2cgICovICAgICAgICAgICAgICAgLUVJTFNFUSwKKwkvKiBTdGFsbCAgICAgICovICAgICAgICAgICAgICAgLUVQSVBFLAorCS8qIERldk5vdFJlc3AgKi8gICAgICAgICAgICAgICAtRVRJTUVET1VULAorCS8qIFBJRENoZWNrICAgKi8gICAgICAgICAgICAgICAtRVBST1RPLAorCS8qIFVuRXhwUElEICAgKi8gICAgICAgICAgICAgICAtRVBST1RPLAorCS8qIERhdGFPdmVyICAgKi8gICAgICAgICAgICAgICAtRU9WRVJGTE9XLAorCS8qIERhdGFVbmRlciAgKi8gICAgICAgICAgICAgICAtRVJFTU9URUlPLAorCS8qIChmb3IgaHcpICAgKi8gICAgICAgICAgICAgICAtRUlPLAorCS8qIChmb3IgaHcpICAgKi8gICAgICAgICAgICAgICAtRUlPLAorCS8qIEJ1ZmZlck92ZXIgKi8gICAgICAgICAgICAgICAtRUNPTU0sCisJLyogQnVmZlVuZGVyICAqLyAgICAgICAgICAgICAgIC1FTk9TUiwKKwkvKiAoZm9yIEhDRCkgICovICAgICAgICAgICAgICAgLUVBTFJFQURZLAorCS8qIChmb3IgSENEKSAgKi8gICAgICAgICAgICAgICAtRUFMUkVBRFkgCit9OworCisKKy8qCisgKiBUaGUgSENDQSAoSG9zdCBDb250cm9sbGVyIENvbW11bmljYXRpb25zIEFyZWEpIGlzIGEgMjU2IGJ5dGUKKyAqIHN0cnVjdHVyZSBkZWZpbmVkIHNlY3Rpb24gNC40LjEgb2YgdGhlIE9IQ0kgc3BlYy4gVGhlIEhDIGlzCisgKiB0b2xkIHRoZSBiYXNlIGFkZHJlc3Mgb2YgaXQuICBJdCBtdXN0IGJlIDI1Ni1ieXRlIGFsaWduZWQuCisgKi8KK3N0cnVjdCBvaGNpX2hjY2EgeworI2RlZmluZSBOVU1fSU5UUyAzMgorCV9faGMzMglpbnRfdGFibGUgW05VTV9JTlRTXTsJLyogcGVyaW9kaWMgc2NoZWR1bGUgKi8KKworCS8qIAorCSAqIE9IQ0kgZGVmaW5lcyB1MTYgZnJhbWVfbm8sIGZvbGxvd2VkIGJ5IHUxNiB6ZXJvIHBhZC4KKwkgKiBTaW5jZSBzb21lIHByb2Nlc3NvcnMgY2FuJ3QgZG8gMTYgYml0IGJ1cyBhY2Nlc3NlcywKKwkgKiBwb3J0YWJsZSBhY2Nlc3MgbXVzdCBiZSBhIDMyIGJpdHMgd2lkZS4KKwkgKi8KKwlfX2hjMzIJZnJhbWVfbm87CQkvKiBjdXJyZW50IGZyYW1lIG51bWJlciAqLworCV9faGMzMglkb25lX2hlYWQ7CQkvKiBpbmZvIHJldHVybmVkIGZvciBhbiBpbnRlcnJ1cHQgKi8KKwl1OAlyZXNlcnZlZF9mb3JfaGMgWzExNl07CisJdTgJd2hhdCBbNF07CQkvKiBzcGVjIG9ubHkgaWRlbnRpZmllcyAyNTIgYnl0ZXMgOikgKi8KK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMjU2KSkpOworCisvKgorICogVGhpcyBpcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBPSENJIGNvbnRyb2xsZXIncyBtZW1vcnkgbWFwcGVkIEkvTyByZWdpb24uCisgKiBZb3UgbXVzdCB1c2UgcmVhZGwoKSBhbmQgd3JpdGVsKCkgKGluIDxhc20vaW8uaD4pIHRvIGFjY2VzcyB0aGVzZSBmaWVsZHMhIQorICogTGF5b3V0IGlzIGluIHNlY3Rpb24gNyAoYW5kIGFwcGVuZGl4IEIpIG9mIHRoZSBzcGVjLgorICovCitzdHJ1Y3Qgb2hjaV9yZWdzIHsKKwkvKiBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXJzIChzZWN0aW9uIDcuMSkgKi8KKwlfX2hjMzIJcmV2aXNpb247CisJX19oYzMyCWNvbnRyb2w7CisJX19oYzMyCWNtZHN0YXR1czsKKwlfX2hjMzIJaW50cnN0YXR1czsKKwlfX2hjMzIJaW50cmVuYWJsZTsKKwlfX2hjMzIJaW50cmRpc2FibGU7CisKKwkvKiBtZW1vcnkgcG9pbnRlcnMgKHNlY3Rpb24gNy4yKSAqLworCV9faGMzMgloY2NhOworCV9faGMzMgllZF9wZXJpb2RjdXJyZW50OworCV9faGMzMgllZF9jb250cm9saGVhZDsKKwlfX2hjMzIJZWRfY29udHJvbGN1cnJlbnQ7CisJX19oYzMyCWVkX2J1bGtoZWFkOworCV9faGMzMgllZF9idWxrY3VycmVudDsKKwlfX2hjMzIJZG9uZWhlYWQ7CisKKwkvKiBmcmFtZSBjb3VudGVycyAoc2VjdGlvbiA3LjMpICovCisJX19oYzMyCWZtaW50ZXJ2YWw7CisJX19oYzMyCWZtcmVtYWluaW5nOworCV9faGMzMglmbW51bWJlcjsKKwlfX2hjMzIJcGVyaW9kaWNzdGFydDsKKwlfX2hjMzIJbHN0aHJlc2g7CisKKwkvKiBSb290IGh1YiBwb3J0cyAoc2VjdGlvbiA3LjQpICovCisJc3RydWN0CW9oY2lfcm9vdGh1Yl9yZWdzIHsKKwkJX19oYzMyCWE7CisJCV9faGMzMgliOworCQlfX2hjMzIJc3RhdHVzOworI2RlZmluZSBNQVhfUk9PVF9QT1JUUwkxNQkvKiBtYXhpbXVtIE9IQ0kgcm9vdCBodWIgcG9ydHMgKFJIX0FfTkRQKSAqLworCQlfX2hjMzIJcG9ydHN0YXR1cyBbTUFYX1JPT1RfUE9SVFNdOworCX0gcm9vdGh1YjsKKworCS8qIGFuZCBvcHRpb25hbCAibGVnYWN5IHN1cHBvcnQiIHJlZ2lzdGVycyAoYXBwZW5kaXggQikgYXQgMHgwMTAwICovCisKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMzIpKSk7CisKKworLyogT0hDSSBDT05UUk9MIEFORCBTVEFUVVMgUkVHSVNURVIgTUFTS1MgKi8KKworLyoKKyAqIEhjQ29udHJvbCAoY29udHJvbCkgcmVnaXN0ZXIgbWFza3MKKyAqLworI2RlZmluZSBPSENJX0NUUkxfQ0JTUgkoMyA8PCAwKQkvKiBjb250cm9sL2J1bGsgc2VydmljZSByYXRpbyAqLworI2RlZmluZSBPSENJX0NUUkxfUExFCSgxIDw8IDIpCS8qIHBlcmlvZGljIGxpc3QgZW5hYmxlICovCisjZGVmaW5lIE9IQ0lfQ1RSTF9JRQkoMSA8PCAzKQkvKiBpc29jaHJvbm91cyBlbmFibGUgKi8KKyNkZWZpbmUgT0hDSV9DVFJMX0NMRQkoMSA8PCA0KQkvKiBjb250cm9sIGxpc3QgZW5hYmxlICovCisjZGVmaW5lIE9IQ0lfQ1RSTF9CTEUJKDEgPDwgNSkJLyogYnVsayBsaXN0IGVuYWJsZSAqLworI2RlZmluZSBPSENJX0NUUkxfSENGUwkoMyA8PCA2KQkvKiBob3N0IGNvbnRyb2xsZXIgZnVuY3Rpb25hbCBzdGF0ZSAqLworI2RlZmluZSBPSENJX0NUUkxfSVIJKDEgPDwgOCkJLyogaW50ZXJydXB0IHJvdXRpbmcgKi8KKyNkZWZpbmUgT0hDSV9DVFJMX1JXQwkoMSA8PCA5KQkvKiByZW1vdGUgd2FrZXVwIGNvbm5lY3RlZCAqLworI2RlZmluZSBPSENJX0NUUkxfUldFCSgxIDw8IDEwKQkvKiByZW1vdGUgd2FrZXVwIGVuYWJsZSAqLworCisvKiBwcmUtc2hpZnRlZCB2YWx1ZXMgZm9yIEhDRlMgKi8KKyMJZGVmaW5lIE9IQ0lfVVNCX1JFU0VUCSgwIDw8IDYpCisjCWRlZmluZSBPSENJX1VTQl9SRVNVTUUJKDEgPDwgNikKKyMJZGVmaW5lIE9IQ0lfVVNCX09QRVIJKDIgPDwgNikKKyMJZGVmaW5lIE9IQ0lfVVNCX1NVU1BFTkQJKDMgPDwgNikKKworLyoKKyAqIEhjQ29tbWFuZFN0YXR1cyAoY21kc3RhdHVzKSByZWdpc3RlciBtYXNrcworICovCisjZGVmaW5lIE9IQ0lfSENSCSgxIDw8IDApCS8qIGhvc3QgY29udHJvbGxlciByZXNldCAqLworI2RlZmluZSBPSENJX0NMRiAgCSgxIDw8IDEpCS8qIGNvbnRyb2wgbGlzdCBmaWxsZWQgKi8KKyNkZWZpbmUgT0hDSV9CTEYgIAkoMSA8PCAyKQkvKiBidWxrIGxpc3QgZmlsbGVkICovCisjZGVmaW5lIE9IQ0lfT0NSICAJKDEgPDwgMykJLyogb3duZXJzaGlwIGNoYW5nZSByZXF1ZXN0ICovCisjZGVmaW5lIE9IQ0lfU09DICAJKDMgPDwgMTYpCS8qIHNjaGVkdWxpbmcgb3ZlcnJ1biBjb3VudCAqLworCisvKgorICogbWFza3MgdXNlZCB3aXRoIGludGVycnVwdCByZWdpc3RlcnM6CisgKiBIY0ludGVycnVwdFN0YXR1cyAoaW50cnN0YXR1cykKKyAqIEhjSW50ZXJydXB0RW5hYmxlIChpbnRyZW5hYmxlKQorICogSGNJbnRlcnJ1cHREaXNhYmxlIChpbnRyZGlzYWJsZSkKKyAqLworI2RlZmluZSBPSENJX0lOVFJfU08JKDEgPDwgMCkJLyogc2NoZWR1bGluZyBvdmVycnVuICovCisjZGVmaW5lIE9IQ0lfSU5UUl9XREgJKDEgPDwgMSkJLyogd3JpdGViYWNrIG9mIGRvbmVfaGVhZCAqLworI2RlZmluZSBPSENJX0lOVFJfU0YJKDEgPDwgMikJLyogc3RhcnQgZnJhbWUgKi8KKyNkZWZpbmUgT0hDSV9JTlRSX1JECSgxIDw8IDMpCS8qIHJlc3VtZSBkZXRlY3QgKi8KKyNkZWZpbmUgT0hDSV9JTlRSX1VFCSgxIDw8IDQpCS8qIHVucmVjb3ZlcmFibGUgZXJyb3IgKi8KKyNkZWZpbmUgT0hDSV9JTlRSX0ZOTwkoMSA8PCA1KQkvKiBmcmFtZSBudW1iZXIgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgT0hDSV9JTlRSX1JIU0MJKDEgPDwgNikJLyogcm9vdCBodWIgc3RhdHVzIGNoYW5nZSAqLworI2RlZmluZSBPSENJX0lOVFJfT0MJKDEgPDwgMzApCS8qIG93bmVyc2hpcCBjaGFuZ2UgKi8KKyNkZWZpbmUgT0hDSV9JTlRSX01JRQkoMSA8PCAzMSkJLyogbWFzdGVyIGludGVycnVwdCBlbmFibGUgKi8KKworCisvKiBPSENJIFJPT1QgSFVCIFJFR0lTVEVSIE1BU0tTICovCisgCisvKiByb290aHViLnBvcnRzdGF0dXMgW2ldIGJpdHMgKi8KKyNkZWZpbmUgUkhfUFNfQ0NTICAgICAgICAgICAgMHgwMDAwMDAwMSAgIAkvKiBjdXJyZW50IGNvbm5lY3Qgc3RhdHVzICovCisjZGVmaW5lIFJIX1BTX1BFUyAgICAgICAgICAgIDB4MDAwMDAwMDIgICAJLyogcG9ydCBlbmFibGUgc3RhdHVzKi8KKyNkZWZpbmUgUkhfUFNfUFNTICAgICAgICAgICAgMHgwMDAwMDAwNCAgIAkvKiBwb3J0IHN1c3BlbmQgc3RhdHVzICovCisjZGVmaW5lIFJIX1BTX1BPQ0kgICAgICAgICAgIDB4MDAwMDAwMDggICAJLyogcG9ydCBvdmVyIGN1cnJlbnQgaW5kaWNhdG9yICovCisjZGVmaW5lIFJIX1BTX1BSUyAgICAgICAgICAgIDB4MDAwMDAwMTAgIAkvKiBwb3J0IHJlc2V0IHN0YXR1cyAqLworI2RlZmluZSBSSF9QU19QUFMgICAgICAgICAgICAweDAwMDAwMTAwICAgCS8qIHBvcnQgcG93ZXIgc3RhdHVzICovCisjZGVmaW5lIFJIX1BTX0xTREEgICAgICAgICAgIDB4MDAwMDAyMDAgICAgCS8qIGxvdyBzcGVlZCBkZXZpY2UgYXR0YWNoZWQgKi8KKyNkZWZpbmUgUkhfUFNfQ1NDICAgICAgICAgICAgMHgwMDAxMDAwMCAJLyogY29ubmVjdCBzdGF0dXMgY2hhbmdlICovCisjZGVmaW5lIFJIX1BTX1BFU0MgICAgICAgICAgIDB4MDAwMjAwMDAgICAJLyogcG9ydCBlbmFibGUgc3RhdHVzIGNoYW5nZSAqLworI2RlZmluZSBSSF9QU19QU1NDICAgICAgICAgICAweDAwMDQwMDAwICAgIAkvKiBwb3J0IHN1c3BlbmQgc3RhdHVzIGNoYW5nZSAqLworI2RlZmluZSBSSF9QU19PQ0lDICAgICAgICAgICAweDAwMDgwMDAwICAgIAkvKiBvdmVyIGN1cnJlbnQgaW5kaWNhdG9yIGNoYW5nZSAqLworI2RlZmluZSBSSF9QU19QUlNDICAgICAgICAgICAweDAwMTAwMDAwICAgCS8qIHBvcnQgcmVzZXQgc3RhdHVzIGNoYW5nZSAqLworCisvKiByb290aHViLnN0YXR1cyBiaXRzICovCisjZGVmaW5lIFJIX0hTX0xQUwkgICAgIDB4MDAwMDAwMDEJCS8qIGxvY2FsIHBvd2VyIHN0YXR1cyAqLworI2RlZmluZSBSSF9IU19PQ0kJICAgICAweDAwMDAwMDAyCQkvKiBvdmVyIGN1cnJlbnQgaW5kaWNhdG9yICovCisjZGVmaW5lIFJIX0hTX0RSV0UJICAgICAweDAwMDA4MDAwCQkvKiBkZXZpY2UgcmVtb3RlIHdha2V1cCBlbmFibGUgKi8KKyNkZWZpbmUgUkhfSFNfTFBTQwkgICAgIDB4MDAwMTAwMDAJCS8qIGxvY2FsIHBvd2VyIHN0YXR1cyBjaGFuZ2UgKi8KKyNkZWZpbmUgUkhfSFNfT0NJQwkgICAgIDB4MDAwMjAwMDAJCS8qIG92ZXIgY3VycmVudCBpbmRpY2F0b3IgY2hhbmdlICovCisjZGVmaW5lIFJIX0hTX0NSV0UJICAgICAweDgwMDAwMDAwCQkvKiBjbGVhciByZW1vdGUgd2FrZXVwIGVuYWJsZSAqLworCisvKiByb290aHViLmIgbWFza3MgKi8KKyNkZWZpbmUgUkhfQl9EUgkJMHgwMDAwZmZmZgkJLyogZGV2aWNlIHJlbW92YWJsZSBmbGFncyAqLworI2RlZmluZSBSSF9CX1BQQ00JMHhmZmZmMDAwMAkJLyogcG9ydCBwb3dlciBjb250cm9sIG1hc2sgKi8KKworLyogcm9vdGh1Yi5hIG1hc2tzICovCisjZGVmaW5lCVJIX0FfTkRQCSgweGZmIDw8IDApCQkvKiBudW1iZXIgb2YgZG93bnN0cmVhbSBwb3J0cyAqLworI2RlZmluZQlSSF9BX1BTTQkoMSA8PCA4KQkJLyogcG93ZXIgc3dpdGNoaW5nIG1vZGUgKi8KKyNkZWZpbmUJUkhfQV9OUFMJKDEgPDwgOSkJCS8qIG5vIHBvd2VyIHN3aXRjaGluZyAqLworI2RlZmluZQlSSF9BX0RUCQkoMSA8PCAxMCkJCS8qIGRldmljZSB0eXBlIChtYnopICovCisjZGVmaW5lCVJIX0FfT0NQTQkoMSA8PCAxMSkJCS8qIG92ZXIgY3VycmVudCBwcm90ZWN0aW9uIG1vZGUgKi8KKyNkZWZpbmUJUkhfQV9OT0NQCSgxIDw8IDEyKQkJLyogbm8gb3ZlciBjdXJyZW50IHByb3RlY3Rpb24gKi8KKyNkZWZpbmUJUkhfQV9QT1RQR1QJKDB4ZmYgPDwgMjQpCQkvKiBwb3dlciBvbiB0byBwb3dlciBnb29kIHRpbWUgKi8KKworCisvKiBoY2QtcHJpdmF0ZSBwZXItdXJiIHN0YXRlICovCit0eXBlZGVmIHN0cnVjdCB1cmJfcHJpdiB7CisJc3RydWN0IGVkCQkqZWQ7CisJdTE2CQkJbGVuZ3RoOwkJLy8gIyB0ZHMgaW4gdGhpcyByZXF1ZXN0CisJdTE2CQkJdGRfY250OwkJLy8gdGRzIGFscmVhZHkgc2VydmljZWQKKwlzdHJ1Y3QgbGlzdF9oZWFkCXBlbmRpbmc7CisJc3RydWN0IHRkCQkqdGQgWzBdOwkvLyBhbGwgVERzIGluIHRoaXMgcmVxdWVzdAorCit9IHVyYl9wcml2X3Q7CisKKyNkZWZpbmUgVERfSEFTSF9TSVpFICAgIDY0ICAgIC8qIHBvd2VyJ28ndHdvICovCisvLyBzaXplb2YgKHN0cnVjdCB0ZCkgfj0gNjQgPT0gMl42IC4uLiAKKyNkZWZpbmUgVERfSEFTSF9GVU5DKHRkX2RtYSkgKCh0ZF9kbWEgXiAodGRfZG1hID4+IDYpKSAlIFREX0hBU0hfU0laRSkKKworCisvKgorICogVGhpcyBpcyB0aGUgZnVsbCBvaGNpIGNvbnRyb2xsZXIgZGVzY3JpcHRpb24KKyAqCisgKiBOb3RlIGhvdyB0aGUgInByb3BlciIgVVNCIGluZm9ybWF0aW9uIGlzIGp1c3QKKyAqIGEgc3Vic2V0IG9mIHdoYXQgdGhlIGZ1bGwgaW1wbGVtZW50YXRpb24gbmVlZHMuIChMaW51cykKKyAqLworCitzdHJ1Y3Qgb2hjaV9oY2QgeworCXNwaW5sb2NrX3QJCWxvY2s7CisKKwkvKgorCSAqIEkvTyBtZW1vcnkgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBIQyAoZG1hLWNvbnNpc3RlbnQpCisJICovCisJc3RydWN0IG9oY2lfcmVncyBfX2lvbWVtICpyZWdzOworCisJLyoKKwkgKiBtYWluIG1lbW9yeSB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIEhDIChkbWEtY29uc2lzdGVudCkuCisJICogaGNkIGFkZHMgdG8gc2NoZWR1bGUgZm9yIGEgbGl2ZSBoYyBhbnkgdGltZSwgYnV0IHJlbW92YWxzIGZpbmlzaAorCSAqIG9ubHkgYXQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGZyYW1lLgorCSAqLworCXN0cnVjdCBvaGNpX2hjY2EJKmhjY2E7CisJZG1hX2FkZHJfdAkJaGNjYV9kbWE7CisKKwlzdHJ1Y3QgZWQJCSplZF9ybV9saXN0OwkJLyogdG8gYmUgcmVtb3ZlZCAqLworCisJc3RydWN0IGVkCQkqZWRfYnVsa3RhaWw7CQkvKiBsYXN0IGluIGJ1bGsgbGlzdCAqLworCXN0cnVjdCBlZAkJKmVkX2NvbnRyb2x0YWlsOwkvKiBsYXN0IGluIGN0cmwgbGlzdCAqLworIAlzdHJ1Y3QgZWQJCSpwZXJpb2RpYyBbTlVNX0lOVFNdOwkvKiBzaGFkb3cgaW50X3RhYmxlICovCisKKwkvKgorCSAqIE9URyBjb250cm9sbGVycyBhbmQgdHJhbnNjZWl2ZXJzIG5lZWQgc29mdHdhcmUgaW50ZXJhY3Rpb247CisJICogb3RoZXIgZXh0ZXJuYWwgdHJhbnNjZWl2ZXJzIHNob3VsZCBiZSBzb2Z0d2FyZS10cmFuc3BhcmVudCAKKwkgKi8KKwlzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyCSp0cmFuc2NlaXZlcjsKKwl1bnNpZ25lZAkJcG93ZXJfYnVkZ2V0OworCisJLyoKKwkgKiBtZW1vcnkgbWFuYWdlbWVudCBmb3IgcXVldWUgZGF0YSBzdHJ1Y3R1cmVzCisJICovCisJc3RydWN0IGRtYV9wb29sCQkqdGRfY2FjaGU7CisJc3RydWN0IGRtYV9wb29sCQkqZWRfY2FjaGU7CisJc3RydWN0IHRkCQkqdGRfaGFzaCBbVERfSEFTSF9TSVpFXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXBlbmRpbmc7CisKKwkvKgorCSAqIGRyaXZlciBzdGF0ZQorCSAqLworCWludAkJCWxvYWQgW05VTV9JTlRTXTsKKwl1MzIgCQkJaGNfY29udHJvbDsJLyogY29weSBvZiBoYyBjb250cm9sIHJlZyAqLworCXVuc2lnbmVkIGxvbmcJCW5leHRfc3RhdGVjaGFuZ2U7CS8qIHN1c3BlbmQvcmVzdW1lICovCisJdTMyCQkJZm1pbnRlcnZhbDsJCS8qIHNhdmVkIHJlZ2lzdGVyICovCisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcmhfcmVzdW1lOworCisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBmb3IgSEMgYnVncyAqLworI2RlZmluZQlPSENJX1FVSVJLX0FNRDc1NgkweDAxCQkJLyogZXJyYXR1bSAjNCAqLworI2RlZmluZQlPSENJX1FVSVJLX1NVUEVSSU8JMHgwMgkJCS8qIG5hdHNlbWkgKi8KKyNkZWZpbmUJT0hDSV9RVUlSS19JTklUUkVTRVQJMHgwNAkJCS8qIFNpUywgT1BUaSwgLi4uICovCisjZGVmaW5lCU9IQ0lfQklHX0VORElBTgkJMHgwOAkJCS8qIGJpZyBlbmRpYW4gSEMgKi8KKwkvLyB0aGVyZSBhcmUgYWxzbyBjaGlwIHF1aXJrcy9idWdzIGluIGluaXQgbG9naWMKKworfTsKKworLyogY29udmVydCBiZXR3ZWVuIGFuIGhjZCBwb2ludGVyIGFuZCB0aGUgY29ycmVzcG9uZGluZyBvaGNpX2hjZCAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2hjaV9oY2QgKmhjZF90b19vaGNpIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXJldHVybiAoc3RydWN0IG9oY2lfaGNkICopIChoY2QtPmhjZF9wcml2KTsKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9oY2QgKm9oY2lfdG9faGNkIChjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZiAoKHZvaWQgKikgb2hjaSwgc3RydWN0IHVzYl9oY2QsIGhjZF9wcml2KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmbmRlZiBERUJVRworI2RlZmluZSBTVFVCX0RFQlVHX0ZJTEVTCisjZW5kaWYJLyogREVCVUcgKi8KKworI2RlZmluZSBvaGNpX2RiZyhvaGNpLCBmbXQsIGFyZ3MuLi4pIFwKKwlkZXZfZGJnIChvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5jb250cm9sbGVyICwgZm10ICwgIyMgYXJncyApCisjZGVmaW5lIG9oY2lfZXJyKG9oY2ksIGZtdCwgYXJncy4uLikgXAorCWRldl9lcnIgKG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmNvbnRyb2xsZXIgLCBmbXQgLCAjIyBhcmdzICkKKyNkZWZpbmUgb2hjaV9pbmZvKG9oY2ksIGZtdCwgYXJncy4uLikgXAorCWRldl9pbmZvIChvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5jb250cm9sbGVyICwgZm10ICwgIyMgYXJncyApCisjZGVmaW5lIG9oY2lfd2FybihvaGNpLCBmbXQsIGFyZ3MuLi4pIFwKKwlkZXZfd2FybiAob2hjaV90b19oY2Qob2hjaSktPnNlbGYuY29udHJvbGxlciAsIGZtdCAsICMjIGFyZ3MgKQorCisjaWZkZWYgT0hDSV9WRVJCT1NFX0RFQlVHCisjCWRlZmluZSBvaGNpX3ZkYmcgb2hjaV9kYmcKKyNlbHNlCisjCWRlZmluZSBvaGNpX3ZkYmcob2hjaSwgZm10LCBhcmdzLi4uKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFdoaWxlIG1vc3QgVVNCIGhvc3QgY29udHJvbGxlcnMgaW1wbGVtZW50IHRoZWlyIHJlZ2lzdGVycyBhbmQKKyAqIGluLW1lbW9yeSBjb21tdW5pY2F0aW9uIGRlc2NyaXB0b3JzIGluIGxpdHRsZS1lbmRpYW4gZm9ybWF0LAorICogYSBtaW5vcml0eSAobm90YWJseSB0aGUgSUJNIFNUQjA0WFhYIGFuZCB0aGUgTW90b3JvbGEgTVBDNTIwMAorICogcHJvY2Vzc29ycykgaW1wbGVtZW50IHRoZW0gaW4gYmlnIGVuZGlhbiBmb3JtYXQuCisgKgorICogVGhpcyBhdHRlbXB0cyB0byBzdXBwb3J0IGVpdGhlciBmb3JtYXQgYXQgY29tcGlsZSB0aW1lIHdpdGhvdXQgYQorICogcnVudGltZSBwZW5hbHR5LCBvciBib3RoIGZvcm1hdHMgd2l0aCB0aGUgYWRkaXRpb25hbCBvdmVyaGVhZAorICogb2YgY2hlY2tpbmcgYSBmbGFnIGJpdC4KKyAqLworCisjaWZkZWYgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4KKworI2lmZGVmIENPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOCisjZGVmaW5lIGJpZ19lbmRpYW4ob2hjaSkJKG9oY2ktPmZsYWdzICYgT0hDSV9CSUdfRU5ESUFOKSAvKiBlaXRoZXIgKi8KKyNlbHNlCisjZGVmaW5lIGJpZ19lbmRpYW4ob2hjaSkJMQkJLyogb25seSBiaWcgZW5kaWFuICovCisjZW5kaWYKKworLyoKKyAqIEJpZy1lbmRpYW4gcmVhZC93cml0ZSBmdW5jdGlvbnMgYXJlIGFyY2gtc3BlY2lmaWMuCisgKiBPdGhlciBhcmNoZXMgY2FuIGJlIGFkZGVkIGlmL3doZW4gdGhleSdyZSBuZWVkZWQuCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19QUEMpCisjZGVmaW5lIHJlYWRsX2JlKGFkZHIpCQlpbl9iZTMyKChfX2ZvcmNlIHVuc2lnbmVkICopYWRkcikKKyNkZWZpbmUgd3JpdGVsX2JlKHZhbCwgYWRkcikJb3V0X2JlMzIoKF9fZm9yY2UgdW5zaWduZWQgKilhZGRyLCB2YWwpCisjZW5kaWYKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2hjaV9yZWFkbCAoY29uc3Qgc3RydWN0IG9oY2lfaGNkICpvaGNpLAorCQkJCQkJCV9faGMzMiBfX2lvbWVtICogcmVncykKK3sKKwlyZXR1cm4gYmlnX2VuZGlhbihvaGNpKSA/IHJlYWRsX2JlIChyZWdzKSA6IHJlYWRsICgoX19mb3JjZSB1MzIgKilyZWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9oY2lfd3JpdGVsIChjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksCisJCQkJY29uc3QgdW5zaWduZWQgaW50IHZhbCwgX19oYzMyIF9faW9tZW0gKnJlZ3MpCit7CisJYmlnX2VuZGlhbihvaGNpKSA/IHdyaXRlbF9iZSAodmFsLCByZWdzKSA6CisJCQkgICB3cml0ZWwgKHZhbCwgKF9fZm9yY2UgdTMyICopcmVncyk7Cit9CisKKyNlbHNlCS8qICFDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTiAqLworCisjZGVmaW5lIGJpZ19lbmRpYW4ob2hjaSkJMAkJLyogb25seSBsaXR0bGUgZW5kaWFuICovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9MSDdBNDA0CisJLyogTWFyYyBTaW5nZXI6IGF0IHRoZSB0aW1lIHRoaXMgY29kZSB3YXMgd3JpdHRlbiwgdGhlIExIN0E0MDQKKwkgKiBoYWQgYSBwcm9ibGVtIHJlYWRpbmcgdGhlIFVTQiBob3N0IHJlZ2lzdGVycy4gIFRoaXMKKwkgKiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgb2hjaV9yZWFkbCBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgcmVhZAorCSAqIHR3aWNlIGFzIGEgd29yay1hcm91bmQuCisJICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorb2hjaV9yZWFkbCAoY29uc3Qgc3RydWN0IG9oY2lfaGNkICpvaGNpLCBjb25zdCBfX2hjMzIgKnJlZ3MpCit7CisJKih2b2xhdGlsZSBfX2ZvcmNlIHVuc2lnbmVkIGludCopIHJlZ3M7CisJcmV0dXJuICoodm9sYXRpbGUgX19mb3JjZSB1bnNpZ25lZCBpbnQqKSByZWdzOworfQorI2Vsc2UKKwkvKiBTdGFuZGFyZCB2ZXJzaW9uIG9mIG9oY2lfcmVhZGwgdXNlcyBzdGFuZGFyZCwgcGxhdGZvcm0KKwkgKiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitvaGNpX3JlYWRsIChjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIF9faGMzMiBfX2lvbWVtICogcmVncykKK3sKKwlyZXR1cm4gcmVhZGwocmVncyk7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIG9oY2lfd3JpdGVsIChjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksCisJCQkJY29uc3QgdW5zaWduZWQgaW50IHZhbCwgX19oYzMyIF9faW9tZW0gKnJlZ3MpCit7CisJd3JpdGVsICh2YWwsIHJlZ3MpOworfQorCisjZW5kaWYJLyogIUNPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGNwdSB0byBvaGNpICovCitzdGF0aWMgaW5saW5lIF9faGMxNiBjcHVfdG9faGMxNiAoY29uc3Qgc3RydWN0IG9oY2lfaGNkICpvaGNpLCBjb25zdCB1MTYgeCkKK3sKKwlyZXR1cm4gYmlnX2VuZGlhbihvaGNpKSA/IChfX2ZvcmNlIF9faGMxNiljcHVfdG9fYmUxNih4KSA6IChfX2ZvcmNlIF9faGMxNiljcHVfdG9fbGUxNih4KTsKK30KKworc3RhdGljIGlubGluZSBfX2hjMTYgY3B1X3RvX2hjMTZwIChjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGNvbnN0IHUxNiAqeCkKK3sKKwlyZXR1cm4gYmlnX2VuZGlhbihvaGNpKSA/IGNwdV90b19iZTE2cCh4KSA6IGNwdV90b19sZTE2cCh4KTsKK30KKworc3RhdGljIGlubGluZSBfX2hjMzIgY3B1X3RvX2hjMzIgKGNvbnN0IHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgY29uc3QgdTMyIHgpCit7CisJcmV0dXJuIGJpZ19lbmRpYW4ob2hjaSkgPyAoX19mb3JjZSBfX2hjMzIpY3B1X3RvX2JlMzIoeCkgOiAoX19mb3JjZSBfX2hjMzIpY3B1X3RvX2xlMzIoeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19oYzMyIGNwdV90b19oYzMycCAoY29uc3Qgc3RydWN0IG9oY2lfaGNkICpvaGNpLCBjb25zdCB1MzIgKngpCit7CisJcmV0dXJuIGJpZ19lbmRpYW4ob2hjaSkgPyBjcHVfdG9fYmUzMnAoeCkgOiBjcHVfdG9fbGUzMnAoeCk7Cit9CisKKy8qIG9oY2kgdG8gY3B1ICovCitzdGF0aWMgaW5saW5lIHUxNiBoYzE2X3RvX2NwdSAoY29uc3Qgc3RydWN0IG9oY2lfaGNkICpvaGNpLCBjb25zdCBfX2hjMTYgeCkKK3sKKwlyZXR1cm4gYmlnX2VuZGlhbihvaGNpKSA/IGJlMTZfdG9fY3B1KChfX2ZvcmNlIF9fYmUxNil4KSA6IGxlMTZfdG9fY3B1KChfX2ZvcmNlIF9fbGUxNil4KTsKK30KKworc3RhdGljIGlubGluZSB1MTYgaGMxNl90b19jcHVwIChjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGNvbnN0IF9faGMxNiAqeCkKK3sKKwlyZXR1cm4gYmlnX2VuZGlhbihvaGNpKSA/IGJlMTZfdG9fY3B1cCgoX19mb3JjZSBfX2JlMTYgKil4KSA6IGxlMTZfdG9fY3B1cCgoX19mb3JjZSBfX2xlMTYgKil4KTsKK30KKworc3RhdGljIGlubGluZSB1MzIgaGMzMl90b19jcHUgKGNvbnN0IHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgY29uc3QgX19oYzMyIHgpCit7CisJcmV0dXJuIGJpZ19lbmRpYW4ob2hjaSkgPyBiZTMyX3RvX2NwdSgoX19mb3JjZSBfX2JlMzIpeCkgOiBsZTMyX3RvX2NwdSgoX19mb3JjZSBfX2xlMzIpeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGhjMzJfdG9fY3B1cCAoY29uc3Qgc3RydWN0IG9oY2lfaGNkICpvaGNpLCBjb25zdCBfX2hjMzIgKngpCit7CisJcmV0dXJuIGJpZ19lbmRpYW4ob2hjaSkgPyBiZTMyX3RvX2NwdXAoKF9fZm9yY2UgX19iZTMyICopeCkgOiBsZTMyX3RvX2NwdXAoKF9fZm9yY2UgX19sZTMyICopeCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEhDQ0EgZnJhbWUgbnVtYmVyIGlzIDE2IGJpdHMsIGJ1dCBpcyBhY2Nlc3NlZCBhcyAzMiBiaXRzIHNpbmNlIG5vdCBhbGwKKyAqIGhhcmR3YXJlIGhhbmRsZXMgMTYgYml0IHJlYWRzLiAgVGhhdCBjcmVhdGVzIGEgZGlmZmVyZW50IGNvbmZ1c2lvbiBvbgorICogc29tZSBiaWctZW5kaWFuIFNPQyBpbXBsZW1lbnRhdGlvbnMuICBTYW1lIHRoaW5nIGhhcHBlbnMgd2l0aCBQU1cgYWNjZXNzLgorICovCisKKyNpZmRlZiBDT05GSUdfU1RCMDN4eHgKKyNkZWZpbmUgT0hDSV9CRV9GUkFNRV9OT19TSElGVAkxNgorI2Vsc2UKKyNkZWZpbmUgT0hDSV9CRV9GUkFNRV9OT19TSElGVAkwCisjZW5kaWYKKworc3RhdGljIGlubGluZSB1MTYgb2hjaV9mcmFtZV9ubyhjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCit7CisJdTMyIHRtcDsKKwlpZiAoYmlnX2VuZGlhbihvaGNpKSkgeworCQl0bXAgPSBiZTMyX3RvX2NwdXAoKF9fZm9yY2UgX19iZTMyICopJm9oY2ktPmhjY2EtPmZyYW1lX25vKTsKKwkJdG1wID4+PSBPSENJX0JFX0ZSQU1FX05PX1NISUZUOworCX0gZWxzZQorCQl0bXAgPSBsZTMyX3RvX2NwdXAoKF9fZm9yY2UgX19sZTMyICopJm9oY2ktPmhjY2EtPmZyYW1lX25vKTsKKworCXJldHVybiAodTE2KXRtcDsKK30KKworc3RhdGljIGlubGluZSBfX2hjMTYgKm9oY2lfaHdQU1dwKGNvbnN0IHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0ZCAqdGQsIGludCBpbmRleCkKK3sKKwlyZXR1cm4gKF9faGMxNiAqKShiaWdfZW5kaWFuKG9oY2kpID8KKwkJCSZ0ZC0+aHdQU1dbaW5kZXggXiAxXSA6ICZ0ZC0+aHdQU1dbaW5kZXhdKTsKK30KKworc3RhdGljIGlubGluZSB1MTYgb2hjaV9od1BTVyhjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRkICp0ZCwgaW50IGluZGV4KQoreworCXJldHVybiBoYzE2X3RvX2NwdXAob2hjaSwgb2hjaV9od1BTV3Aob2hjaSwgdGQsIGluZGV4KSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCit7CisJb2hjaV90b19oY2Qob2hjaSktPnN0YXRlID0gSENfU1RBVEVfSEFMVDsKK30KKworI2RlZmluZQlGSQkJCTB4MmVkZgkJLyogMTIwMDAgYml0cyBwZXIgZnJhbWUgKC0xKSAqLworI2RlZmluZQlGU01QKGZpKSAJCSgweDdmZmYgJiAoKDYgKiAoKGZpKSAtIDIxMCkpIC8gNykpCisjZGVmaW5lCUZJVAkJCSgxIDw8IDMxKQorI2RlZmluZSBMU1RIUkVTSAkJMHg2MjgJCS8qIGxvd3NwZWVkIGJpdCB0aHJlc2hvbGQgKi8KKworc3RhdGljIHZvaWQgcGVyaW9kaWNfcmVpbml0IChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCit7CisJdTMyCWZpID0gb2hjaS0+Zm1pbnRlcnZhbCAmIDB4MDNmZmY7CisJdTMyCWZpdCA9IG9oY2lfcmVhZGwob2hjaSwgJm9oY2ktPnJlZ3MtPmZtaW50ZXJ2YWwpICYgRklUOworCisJb2hjaV93cml0ZWwgKG9oY2ksIChmaXQgXiBGSVQpIHwgb2hjaS0+Zm1pbnRlcnZhbCwKKwkJCQkJCSZvaGNpLT5yZWdzLT5mbWludGVydmFsKTsKKwlvaGNpX3dyaXRlbCAob2hjaSwgKCg5ICogZmkpIC8gMTApICYgMHgzZmZmLAorCQkJCQkJJm9oY2ktPnJlZ3MtPnBlcmlvZGljc3RhcnQpOworfQorCisvKiBBTUQtNzU2IChEMiByZXYpIHJlcG9ydHMgY29ycnVwdCByZWdpc3RlciBjb250ZW50cyBpbiBzb21lIGNhc2VzLgorICogVGhlIGVycmF0dW0gKCM0KSBkZXNjcmlwdGlvbiBpcyBpbmNvcnJlY3QuICBBTUQncyB3b3JrYXJvdW5kIHdhaXRzCisgKiB0aWxsIHNvbWUgYml0cyAobW9zdGx5IHJlc2VydmVkKSBhcmUgY2xlYXI7IG9rIGZvciBhbGwgcmV2cy4KKyAqLworI2RlZmluZSByZWFkX3Jvb3RodWIoaGMsIHJlZ2lzdGVyLCBtYXNrKSAoeyBcCisJdTMyIHRlbXAgPSBvaGNpX3JlYWRsIChoYywgJmhjLT5yZWdzLT5yb290aHViLnJlZ2lzdGVyKTsgXAorCWlmICh0ZW1wID09IC0xKSBcCisJCWRpc2FibGUgKGhjKTsgXAorCWVsc2UgaWYgKGhjLT5mbGFncyAmIE9IQ0lfUVVJUktfQU1ENzU2KSBcCisJCXdoaWxlICh0ZW1wICYgbWFzaykgXAorCQkJdGVtcCA9IG9oY2lfcmVhZGwgKGhjLCAmaGMtPnJlZ3MtPnJvb3RodWIucmVnaXN0ZXIpOyBcCisJdGVtcDsgfSkKKworc3RhdGljIHUzMiByb290aHViX2EgKHN0cnVjdCBvaGNpX2hjZCAqaGMpCisJeyByZXR1cm4gcmVhZF9yb290aHViIChoYywgYSwgMHhmYzBmZTAwMCk7IH0KK3N0YXRpYyBpbmxpbmUgdTMyIHJvb3RodWJfYiAoc3RydWN0IG9oY2lfaGNkICpoYykKKwl7IHJldHVybiBvaGNpX3JlYWRsIChoYywgJmhjLT5yZWdzLT5yb290aHViLmIpOyB9CitzdGF0aWMgaW5saW5lIHUzMiByb290aHViX3N0YXR1cyAoc3RydWN0IG9oY2lfaGNkICpoYykKKwl7IHJldHVybiBvaGNpX3JlYWRsIChoYywgJmhjLT5yZWdzLT5yb290aHViLnN0YXR1cyk7IH0KK3N0YXRpYyB1MzIgcm9vdGh1Yl9wb3J0c3RhdHVzIChzdHJ1Y3Qgb2hjaV9oY2QgKmhjLCBpbnQgaSkKKwl7IHJldHVybiByZWFkX3Jvb3RodWIgKGhjLCBwb3J0c3RhdHVzIFtpXSwgMHhmZmUwZmNlMCk7IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMDllMjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCkBAIC0wLDAgKzEsMTg1MSBAQAorLyoKKyAqIFNMODExSFMgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBQc2lvbiBUZWtsb2dpeCAoZm9yIE5ldEJvb2sgUFJPKQorICogQ29weXJpZ2h0IChDKSAyMDA0IERhdmlkIEJyb3duZWxsCisgKiAKKyAqIFBlcmlvZGljIHNjaGVkdWxpbmcgaXMgYmFzZWQgb24gUm9tYW4ncyBPSENJIGNvZGUKKyAqIAlDb3B5cmlnaHQgKEMpIDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyCisgKgorICogVGhlIFNMODExSFMgY29udHJvbGxlciBoYW5kbGVzIGhvc3Qgc2lkZSBVU0IgKGxpa2UgdGhlIFNMMTFILCBidXQgd2l0aAorICogYW5vdGhlciByZWdpc3RlciBzZXQgYW5kIFNPRiBnZW5lcmF0aW9uKSBhcyB3ZWxsIGFzIHBlcmlwaGVyYWwgc2lkZSBVU0IKKyAqIChsaWtlIHRoZSBTTDgxMVMpLiAgVGhpcyBkcml2ZXIgdmVyc2lvbiBkb2Vzbid0IGltcGxlbWVudCB0aGUgR2FkZ2V0IEFQSQorICogZm9yIHRoZSBwZXJpcGhlcmFsIHJvbGU7IG9yIE9URyAodGhhdCdkIG5lZWQgbXVjaCBleHRlcm5hbCBjaXJjdWl0cnkpLgorICoKKyAqIEZvciBkb2N1bWVudGF0aW9uLCBzZWUgdGhlIFNMODExSFMgc3BlYyBhbmQgdGhlICJTTDgxMUhTIEVtYmVkZGVkIEhvc3QiCisgKiBkb2N1bWVudCAocHJvdmlkaW5nIHNpZ25pZmljYW50IHBpZWNlcyBtaXNzaW5nIGZyb20gdGhhdCBzcGVjKTsgcGx1cworICogdGhlIFNMODExUyBzcGVjIGlmIHlvdSB3YW50IHBlcmlwaGVyYWwgc2lkZSBpbmZvLgorICovIAorCisvKgorICogU3RhdHVzOiAgUGFzc2VkIGJhc2ljIHN0cmVzcyB0ZXN0aW5nLCB3b3JrcyB3aXRoIGh1YnMsIG1pY2UsIGtleWJvYXJkcywKKyAqIGFuZCB1c2Itc3RvcmFnZS4KKyAqCisgKiBUT0RPOgorICogLSB1c2Igc3VzcGVuZC9yZXN1bWUgdHJpZ2dlcmVkIGJ5IHNsODExICh3aXRoIFVTQl9TVVNQRU5EKQorICogLSB2YXJpb3VzIGlzc3VlcyBub3RlZCBpbiB0aGUgY29kZQorICogLSBwZXJmb3JtYW5jZSB3b3JrOyB1c2UgYm90aCByZWdpc3RlciBiYW5rczsgLi4uCisgKiAtIHVzZSB1cmItPmlzb19mcmFtZV9kZXNjW10gd2l0aCBJU08gdHJhbnNmZXJzCisgKi8KKworI3VuZGVmCVZFUkJPU0UKKyN1bmRlZglQQUNLRVRfVFJBQ0UKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworIwlkZWZpbmUgREVCVUcKKyNlbHNlCisjCXVuZGVmIERFQlVHCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl9zbDgxMS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNpbmNsdWRlICIuLi9jb3JlL2hjZC5oIgorI2luY2x1ZGUgInNsODExLmgiCisKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTTDgxMUhTIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjE1IERlYyAyMDA0IgorCisKKyNpZm5kZWYgREVCVUcKKyMJZGVmaW5lCVNUVUJfREVCVUdfRklMRQorI2VuZGlmCisKKy8qIGZvciBub3csIHVzZSBvbmx5IG9uZSB0cmFuc2ZlciByZWdpc3RlciBiYW5rICovCisjdW5kZWYJVVNFX0IKKworLyogdGhpcyBkb2Vzbid0IHVuZGVyc3RhbmQgdXJiLT5pc29fZnJhbWVfZGVzY1tdLCBidXQgaWYgeW91IGhhZCBhIGRyaXZlcgorICogdGhhdCBqdXN0IHF1ZXVlZCBvbmUgSVNPIGZyYW1lIHBlciBVUkIgdGhlbiBpc28gdHJhbnNmZXJzICJzaG91bGQiIHdvcmsKKyAqIHVzaW5nIHRoZSBub3JtYWwgdXJiIHN0YXR1cyBmaWVsZHMuCisgKi8KKyNkZWZpbmUJRElTQUJMRV9JU08KKworLy8gI2RlZmluZQlRVUlSSzIKKyNkZWZpbmUJUVVJUkszCisKK3N0YXRpYyBjb25zdCBjaGFyIGhjZF9uYW1lW10gPSAic2w4MTEtaGNkIjsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgcG9ydF9wb3dlcihzdHJ1Y3Qgc2w4MTEgKnNsODExLCBpbnQgaXNfb24pCit7CisJc3RydWN0IHVzYl9oY2QJKmhjZCA9IHNsODExX3RvX2hjZChzbDgxMSk7CisKKwkvKiBodWIgaXMgaW5hY3RpdmUgdW5sZXNzIHRoZSBwb3J0IGlzIHBvd2VyZWQgKi8KKwlpZiAoaXNfb24pIHsKKwkJaWYgKHNsODExLT5wb3J0MSAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfUE9XRVIpKQorCQkJcmV0dXJuOworCisJCXNsODExLT5wb3J0MSA9ICgxIDw8IFVTQl9QT1JUX0ZFQVRfUE9XRVIpOworCQlzbDgxMS0+aXJxX2VuYWJsZSA9IFNMMTFIX0lOVE1BU0tfSU5TUk1WOworCQloY2QtPnNlbGYuY29udHJvbGxlci0+cG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOworCX0gZWxzZSB7CisJCXNsODExLT5wb3J0MSA9IDA7CisJCXNsODExLT5pcnFfZW5hYmxlID0gMDsKKwkJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX0hBTFQ7CisJCWhjZC0+c2VsZi5jb250cm9sbGVyLT5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfU1VTUEVORDsKKwl9CisJc2w4MTEtPmN0cmwxID0gMDsKKwlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfSVJRX0VOQUJMRSwgMCk7CisJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX0lSUV9TVEFUVVMsIH4wKTsKKworCWlmIChzbDgxMS0+Ym9hcmQgJiYgc2w4MTEtPmJvYXJkLT5wb3J0X3Bvd2VyKSB7CisJCS8qIHN3aXRjaCBWQlVTLCBhdCA1MDBtQSB1bmxlc3MgaHViIHBvd2VyIGJ1ZGdldCBnZXRzIHNldCAqLworCQlEQkcoInBvd2VyICVzXG4iLCBpc19vbiA/ICJvbiIgOiAib2ZmIik7CisJCXNsODExLT5ib2FyZC0+cG9ydF9wb3dlcihoY2QtPnNlbGYuY29udHJvbGxlciwgaXNfb24pOworCX0KKworCS8qIHJlc2V0IGFzIHRob3JvdWdobHkgYXMgd2UgY2FuICovCisJaWYgKHNsODExLT5ib2FyZCAmJiBzbDgxMS0+Ym9hcmQtPnJlc2V0KQorCQlzbDgxMS0+Ym9hcmQtPnJlc2V0KGhjZC0+c2VsZi5jb250cm9sbGVyKTsKKworCXNsODExX3dyaXRlKHNsODExLCBTTDExSF9JUlFfRU5BQkxFLCAwKTsKKwlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfQ1RMUkVHMSwgc2w4MTEtPmN0cmwxKTsKKwlzbDgxMV93cml0ZShzbDgxMSwgU0w4MTFIU19DVExSRUcyLCBTTDgxMUhTX0NUTDJfSU5JVCk7CisJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX0lSUV9FTkFCTEUsIHNsODExLT5pcnFfZW5hYmxlKTsKKworCS8vIGlmICFpc19vbiwgcHV0IGludG8gbG93cG93ZXIgbW9kZSBub3cKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVGhpcyBpcyBhIFBJTy1vbmx5IEhDRC4gIFF1ZXVlaW5nIGFwcGVuZHMgVVJCcyB0byB0aGUgZW5kcG9pbnQncyBxdWV1ZSwKKyAqIGFuZCBtYXkgc3RhcnQgSS9PLiAgRW5kcG9pbnQgcXVldWVzIGFyZSBzY2FubmVkIGR1cmluZyBjb21wbGV0aW9uIGlycQorICogaGFuZGxlcnMgKG9uZSBwZXIgcGFja2V0OiBBQ0ssIE5BSywgZmF1bHRzLCBldGMpIGFuZCB1cmIgY2FuY2VsYXRpb24uCisgKgorICogVXNpbmcgYW4gZXh0ZXJuYWwgRE1BIGVuZ2luZSB0byBjb3B5IGEgcGFja2V0IGF0IGEgdGltZSBjb3VsZCB3b3JrLAorICogdGhvdWdoIHNldHVwL3RlYXJkb3duIGNvc3RzIG1heSBiZSB0b28gYmlnIHRvIG1ha2UgaXQgd29ydGh3aGlsZS4KKyAqLworCisvKiBTRVRVUCBzdGFydHMgYSBuZXcgY29udHJvbCByZXF1ZXN0LiAgRGV2aWNlcyBhcmUgbm90IGFsbG93ZWQgdG8KKyAqIFNUQUxMIG9yIE5BSyB0aGVzZTsgdGhleSBtdXN0IGNhbmNlbCBhbnkgcGVuZGluZyBjb250cm9sIHJlcXVlc3RzLgorICovCitzdGF0aWMgdm9pZCBzZXR1cF9wYWNrZXQoCisJc3RydWN0IHNsODExCQkqc2w4MTEsCisJc3RydWN0IHNsODExaF9lcAkqZXAsCisJc3RydWN0IHVyYgkJKnVyYiwKKwl1OAkJCWJhbmssCisJdTgJCQljb250cm9sCispCit7CisJdTgJCQlhZGRyOworCXU4CQkJbGVuOworCXZvaWQgX19pb21lbQkJKmRhdGFfcmVnOworCisJYWRkciA9IFNMODExSFNfUEFDS0VUX0JVRihiYW5rID09IDApOworCWxlbiA9IHNpemVvZihzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KTsKKwlkYXRhX3JlZyA9IHNsODExLT5kYXRhX3JlZzsKKwlzbDgxMV93cml0ZV9idWYoc2w4MTEsIGFkZHIsIHVyYi0+c2V0dXBfcGFja2V0LCBsZW4pOworCisJLyogYXV0b2luY3JlbWVudGluZyAqLworCXNsODExX3dyaXRlKHNsODExLCBiYW5rICsgU0wxMUhfQlVGQUREUlJFRywgYWRkcik7CisJd3JpdGViKGxlbiwgZGF0YV9yZWcpOworCXdyaXRlYihTTF9TRVRVUCAvKiB8IGVwLT5lcG51bSAqLywgZGF0YV9yZWcpOworCXdyaXRlYih1c2JfcGlwZWRldmljZSh1cmItPnBpcGUpLCBkYXRhX3JlZyk7CisKKwkvKiBhbHdheXMgT1VUL2RhdGEwICovIDsKKwlzbDgxMV93cml0ZShzbDgxMSwgYmFuayArIFNMMTFIX0hPU1RDVExSRUcsCisJCQljb250cm9sIHwgU0wxMUhfSENUTE1BU0tfT1VUKTsKKwllcC0+bGVuZ3RoID0gMDsKKwlQQUNLRVQoIlNFVFVQIHFoJXBcbiIsIGVwKTsKK30KKworLyogU1RBVFVTIGZpbmlzaGVzIGNvbnRyb2wgcmVxdWVzdHMsIG9mdGVuIGFmdGVyIElOIG9yIE9VVCBkYXRhIHBhY2tldHMgKi8KK3N0YXRpYyB2b2lkIHN0YXR1c19wYWNrZXQoCisJc3RydWN0IHNsODExCQkqc2w4MTEsCisJc3RydWN0IHNsODExaF9lcAkqZXAsCisJc3RydWN0IHVyYgkJKnVyYiwKKwl1OAkJCWJhbmssCisJdTgJCQljb250cm9sCispCit7CisJaW50CQkJZG9fb3V0OworCXZvaWQgX19pb21lbQkJKmRhdGFfcmVnOworCisJZG9fb3V0ID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoICYmIHVzYl9waXBlaW4odXJiLT5waXBlKTsKKwlkYXRhX3JlZyA9IHNsODExLT5kYXRhX3JlZzsKKworCS8qIGF1dG9pbmNyZW1lbnRpbmcgKi8KKwlzbDgxMV93cml0ZShzbDgxMSwgYmFuayArIFNMMTFIX0JVRkFERFJSRUcsIDApOworCXdyaXRlYigwLCBkYXRhX3JlZyk7CisJd3JpdGViKChkb19vdXQgPyBTTF9PVVQgOiBTTF9JTikgLyogfCBlcC0+ZXBudW0gKi8sIGRhdGFfcmVnKTsKKwl3cml0ZWIodXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSwgZGF0YV9yZWcpOworCisJLyogYWx3YXlzIGRhdGExOyBzb21ldGltZXMgSU4gKi8KKwljb250cm9sIHw9IFNMMTFIX0hDVExNQVNLX1RPR0dMRTsKKwlpZiAoZG9fb3V0KQorCQljb250cm9sIHw9IFNMMTFIX0hDVExNQVNLX09VVDsKKwlzbDgxMV93cml0ZShzbDgxMSwgYmFuayArIFNMMTFIX0hPU1RDVExSRUcsIGNvbnRyb2wpOworCWVwLT5sZW5ndGggPSAwOworCVBBQ0tFVCgiU1RBVFVTJXMvJXMgcWglcFxuIiwgZXAtPm5ha19jb3VudCA/ICIvcmV0cnkiIDogIiIsCisJCQlkb19vdXQgPyAib3V0IiA6ICJpbiIsIGVwKTsKK30KKworLyogSU4gcGFja2V0cyBjYW4gYmUgdXNlZCB3aXRoIGFueSB0eXBlIG9mIGVuZHBvaW50LiBoZXJlIHdlIGp1c3QKKyAqIHN0YXJ0IHRoZSB0cmFuc2ZlciwgZGF0YSBmcm9tIHRoZSBwZXJpcGhlcmFsIG1heSBhcnJpdmUgbGF0ZXIuCisgKiB1cmItPmlzb19mcmFtZV9kZXNjIGlzIGN1cnJlbnRseSBpZ25vcmVkIGhlcmUuLi4KKyAqLworc3RhdGljIHZvaWQgaW5fcGFja2V0KAorCXN0cnVjdCBzbDgxMQkJKnNsODExLAorCXN0cnVjdCBzbDgxMWhfZXAJKmVwLAorCXN0cnVjdCB1cmIJCSp1cmIsCisJdTgJCQliYW5rLAorCXU4CQkJY29udHJvbAorKQoreworCXU4CQkJYWRkcjsKKwl1OAkJCWxlbjsKKwl2b2lkIF9faW9tZW0JCSpkYXRhX3JlZzsKKworCS8qIGF2b2lkIGxvc2luZyBkYXRhIG9uIG92ZXJmbG93ICovCisJbGVuID0gZXAtPm1heHBhY2tldDsKKwlhZGRyID0gU0w4MTFIU19QQUNLRVRfQlVGKGJhbmsgPT0gMCk7CisJaWYgKCEoY29udHJvbCAmIFNMMTFIX0hDVExNQVNLX0lTT0NIKQorCQkJJiYgdXNiX2dldHRvZ2dsZSh1cmItPmRldiwgZXAtPmVwbnVtLCAwKSkKKwkJY29udHJvbCB8PSBTTDExSF9IQ1RMTUFTS19UT0dHTEU7CisJZGF0YV9yZWcgPSBzbDgxMS0+ZGF0YV9yZWc7CisKKwkvKiBhdXRvaW5jcmVtZW50aW5nICovCisJc2w4MTFfd3JpdGUoc2w4MTEsIGJhbmsgKyBTTDExSF9CVUZBRERSUkVHLCBhZGRyKTsKKwl3cml0ZWIobGVuLCBkYXRhX3JlZyk7CisJd3JpdGViKFNMX0lOIHwgZXAtPmVwbnVtLCBkYXRhX3JlZyk7CisJd3JpdGViKHVzYl9waXBlZGV2aWNlKHVyYi0+cGlwZSksIGRhdGFfcmVnKTsKKworCXNsODExX3dyaXRlKHNsODExLCBiYW5rICsgU0wxMUhfSE9TVENUTFJFRywgY29udHJvbCk7CisJZXAtPmxlbmd0aCA9IG1pbigoaW50KWxlbiwKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJUEFDS0VUKCJJTiVzLyVkIHFoJXAgbGVuJWRcbiIsIGVwLT5uYWtfY291bnQgPyAiL3JldHJ5IiA6ICIiLAorCQkJISF1c2JfZ2V0dG9nZ2xlKHVyYi0+ZGV2LCBlcC0+ZXBudW0sIDApLCBlcCwgbGVuKTsKK30KKworLyogT1VUIHBhY2tldHMgY2FuIGJlIHVzZWQgd2l0aCBhbnkgdHlwZSBvZiBlbmRwb2ludC4KKyAqIHVyYi0+aXNvX2ZyYW1lX2Rlc2MgaXMgY3VycmVudGx5IGlnbm9yZWQgaGVyZS4uLgorICovCitzdGF0aWMgdm9pZCBvdXRfcGFja2V0KAorCXN0cnVjdCBzbDgxMQkJKnNsODExLAorCXN0cnVjdCBzbDgxMWhfZXAJKmVwLAorCXN0cnVjdCB1cmIJCSp1cmIsCisJdTgJCQliYW5rLAorCXU4CQkJY29udHJvbAorKQoreworCXZvaWQJCQkqYnVmOworCXU4CQkJYWRkcjsKKwl1OAkJCWxlbjsKKwl2b2lkIF9faW9tZW0JCSpkYXRhX3JlZzsKKworCWJ1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT5hY3R1YWxfbGVuZ3RoOworCXByZWZldGNoKGJ1Zik7CisKKwlsZW4gPSBtaW4oKGludCllcC0+bWF4cGFja2V0LAorCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0gdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKworCWlmICghKGNvbnRyb2wgJiBTTDExSF9IQ1RMTUFTS19JU09DSCkKKwkJCSYmIHVzYl9nZXR0b2dnbGUodXJiLT5kZXYsIGVwLT5lcG51bSwgMSkpCisJCWNvbnRyb2wgfD0gU0wxMUhfSENUTE1BU0tfVE9HR0xFOworCWFkZHIgPSBTTDgxMUhTX1BBQ0tFVF9CVUYoYmFuayA9PSAwKTsKKwlkYXRhX3JlZyA9IHNsODExLT5kYXRhX3JlZzsKKworCXNsODExX3dyaXRlX2J1ZihzbDgxMSwgYWRkciwgYnVmLCBsZW4pOworCisJLyogYXV0b2luY3JlbWVudGluZyAqLworCXNsODExX3dyaXRlKHNsODExLCBiYW5rICsgU0wxMUhfQlVGQUREUlJFRywgYWRkcik7CisJd3JpdGViKGxlbiwgZGF0YV9yZWcpOworCXdyaXRlYihTTF9PVVQgfCBlcC0+ZXBudW0sIGRhdGFfcmVnKTsKKwl3cml0ZWIodXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSwgZGF0YV9yZWcpOworCisJc2w4MTFfd3JpdGUoc2w4MTEsIGJhbmsgKyBTTDExSF9IT1NUQ1RMUkVHLAorCQkJY29udHJvbCB8IFNMMTFIX0hDVExNQVNLX09VVCk7CisJZXAtPmxlbmd0aCA9IGxlbjsKKwlQQUNLRVQoIk9VVCVzLyVkIHFoJXAgbGVuJWRcbiIsIGVwLT5uYWtfY291bnQgPyAiL3JldHJ5IiA6ICIiLAorCQkJISF1c2JfZ2V0dG9nZ2xlKHVyYi0+ZGV2LCBlcC0+ZXBudW0sIDEpLCBlcCwgbGVuKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogY2FsbGVyIHVwZGF0ZXMgb24tY2hpcCBlbmFibGVzIGxhdGVyICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzb2ZpcnFfb24oc3RydWN0IHNsODExICpzbDgxMSkKK3sKKwlpZiAoc2w4MTEtPmlycV9lbmFibGUgJiBTTDExSF9JTlRNQVNLX1NPRklOVFIpCisJCXJldHVybjsKKwlWREJHKCJzb2YgaXJxIG9uXG4iKTsKKwlzbDgxMS0+aXJxX2VuYWJsZSB8PSBTTDExSF9JTlRNQVNLX1NPRklOVFI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzb2ZpcnFfb2ZmKHN0cnVjdCBzbDgxMSAqc2w4MTEpCit7CisJaWYgKCEoc2w4MTEtPmlycV9lbmFibGUgJiBTTDExSF9JTlRNQVNLX1NPRklOVFIpKQorCQlyZXR1cm47CisJVkRCRygic29mIGlycSBvZmZcbiIpOworCXNsODExLT5pcnFfZW5hYmxlICY9IH5TTDExSF9JTlRNQVNLX1NPRklOVFI7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHBpY2sgdGhlIG5leHQgZW5kcG9pbnQgZm9yIGEgdHJhbnNhY3Rpb24sIGFuZCBpc3N1ZSBpdC4KKyAqIGZyYW1lcyBzdGFydCB3aXRoIHBlcmlvZGljIHRyYW5zZmVycyAoYWZ0ZXIgd2hhdGV2ZXIgaXMgcGVuZGluZworICogZnJvbSB0aGUgcHJldmlvdXMgZnJhbWUpLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIHRpbWUgaXMgYXN5bmMKKyAqIHRyYW5zZmVycywgc2NoZWR1bGVkIHJvdW5kLXJvYmluLgorICovCitzdGF0aWMgc3RydWN0IHNsODExaF9lcAkqc3RhcnQoc3RydWN0IHNsODExICpzbDgxMSwgdTggYmFuaykKK3sKKwlzdHJ1Y3Qgc2w4MTFoX2VwCSplcDsKKwlzdHJ1Y3QgdXJiCQkqdXJiOworCWludAkJCWZjbG9jazsKKwl1OAkJCWNvbnRyb2w7CisKKwkvKiB1c2UgZW5kcG9pbnQgYXQgc2NoZWR1bGUgaGVhZCAqLworCWlmIChzbDgxMS0+bmV4dF9wZXJpb2RpYykgeworCQllcCA9IHNsODExLT5uZXh0X3BlcmlvZGljOworCQlzbDgxMS0+bmV4dF9wZXJpb2RpYyA9IGVwLT5uZXh0OworCX0gZWxzZSB7CisJCWlmIChzbDgxMS0+bmV4dF9hc3luYykKKwkJCWVwID0gc2w4MTEtPm5leHRfYXN5bmM7CisJCWVsc2UgaWYgKCFsaXN0X2VtcHR5KCZzbDgxMS0+YXN5bmMpKQorCQkJZXAgPSBjb250YWluZXJfb2Yoc2w4MTEtPmFzeW5jLm5leHQsCisJCQkJCXN0cnVjdCBzbDgxMWhfZXAsIHNjaGVkdWxlKTsKKwkJZWxzZSB7CisJCQkvKiBjb3VsZCBzZXQgdXAgdGhlIGZpcnN0IGZ1bGxzcGVlZCBwZXJpb2RpYworCQkJICogdHJhbnNmZXIgZm9yIHRoZSBuZXh0IGZyYW1lIC4uLgorCQkJICovCisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisjaWZkZWYgVVNFX0IKKwkJaWYgKChiYW5rICYmIHNsODExLT5hY3RpdmVfYiA9PSBlcCkgfHwgc2w4MTEtPmFjdGl2ZV9hID09IGVwKQorCQkJcmV0dXJuIE5VTEw7CisjZW5kaWYKKworCQlpZiAoZXAtPnNjaGVkdWxlLm5leHQgPT0gJnNsODExLT5hc3luYykKKwkJCXNsODExLT5uZXh0X2FzeW5jID0gTlVMTDsKKwkJZWxzZQorCQkJc2w4MTEtPm5leHRfYXN5bmMgPSBjb250YWluZXJfb2YoZXAtPnNjaGVkdWxlLm5leHQsCisJCQkJCXN0cnVjdCBzbDgxMWhfZXAsIHNjaGVkdWxlKTsKKwl9CisKKwlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmZXAtPmhlcC0+dXJiX2xpc3QpKSkgeworCQlEQkcoImVtcHR5ICVwIHF1ZXVlP1xuIiwgZXApOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwl1cmIgPSBjb250YWluZXJfb2YoZXAtPmhlcC0+dXJiX2xpc3QubmV4dCwgc3RydWN0IHVyYiwgdXJiX2xpc3QpOworCWNvbnRyb2wgPSBlcC0+ZGVmY3RybDsKKworCS8qIGlmIHRoaXMgZnJhbWUgZG9lc24ndCBoYXZlIGVub3VnaCB0aW1lIGxlZnQgdG8gdHJhbnNmZXIgdGhpcworCSAqIHBhY2tldCwgd2FpdCB0aWxsIHRoZSBuZXh0IGZyYW1lLiAgdG9vLXNpbXBsZSBhbGdvcml0aG0uLi4KKwkgKi8KKwlmY2xvY2sgPSBzbDgxMV9yZWFkKHNsODExLCBTTDExSF9TT0ZUTVJSRUcpIDw8IDY7CisJZmNsb2NrIC09IDEwMDsJCS8qIHNldHVwIHRha2VzIG5vdCBtdWNoIHRpbWUgKi8KKwlpZiAodXJiLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9MT1cpIHsKKwkJaWYgKGNvbnRyb2wgJiBTTDExSF9IQ1RMTUFTS19QUkVBTUJMRSkgeworCQkJLyogYWxzbyBub3RlIGVycmF0dW0gMTogc29tZSBodWJzIHdvbid0IHdvcmsgKi8KKwkJCWZjbG9jayAtPSA4MDA7CisJCX0KKwkJZmNsb2NrIC09IGVwLT5tYXhwYWNrZXQgPDwgODsKKworCQkvKiBlcnJhdHVtIDI6IEFGVEVSU09GIG9ubHkgd29ya3MgZm9yIGZ1bGxzcGVlZCAqLworCQlpZiAoZmNsb2NrIDwgMCkgeworCQkJaWYgKGVwLT5wZXJpb2QpCisJCQkJc2w4MTEtPnN0YXRfb3ZlcnJ1bisrOworCQkJc29maXJxX29uKHNsODExKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfSBlbHNlIHsKKwkJZmNsb2NrIC09IDEyMDAwIC8gMTk7CS8qIDE5IDY0Ynl0ZSBwYWNrZXRzL21zZWMgKi8KKwkJaWYgKGZjbG9jayA8IDApIHsKKwkJCWlmIChlcC0+cGVyaW9kKQorCQkJCXNsODExLT5zdGF0X292ZXJydW4rKzsKKwkJCWNvbnRyb2wgfD0gU0wxMUhfSENUTE1BU0tfQUZURVJTT0Y7CisKKwkJLyogdGhyb3R0bGUgYnVsay9jb250cm9sIGlycSBub2lzZSAqLworCQl9IGVsc2UgaWYgKGVwLT5uYWtfY291bnQpCisJCQljb250cm9sIHw9IFNMMTFIX0hDVExNQVNLX0FGVEVSU09GOworCX0KKworCisJc3dpdGNoIChlcC0+bmV4dHBpZCkgeworCWNhc2UgVVNCX1BJRF9JTjoKKwkJaW5fcGFja2V0KHNsODExLCBlcCwgdXJiLCBiYW5rLCBjb250cm9sKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfUElEX09VVDoKKwkJb3V0X3BhY2tldChzbDgxMSwgZXAsIHVyYiwgYmFuaywgY29udHJvbCk7CisJCWJyZWFrOworCWNhc2UgVVNCX1BJRF9TRVRVUDoKKwkJc2V0dXBfcGFja2V0KHNsODExLCBlcCwgdXJiLCBiYW5rLCBjb250cm9sKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfUElEX0FDSzoJCS8qIGZvciBjb250cm9sIHN0YXR1cyAqLworCQlzdGF0dXNfcGFja2V0KHNsODExLCBlcCwgdXJiLCBiYW5rLCBjb250cm9sKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREJHKCJiYWQgZXAlcCBwaWQgJTAyeFxuIiwgZXAsIGVwLT5uZXh0cGlkKTsKKwkJZXAgPSBOVUxMOworCX0KKwlyZXR1cm4gZXA7Cit9CisKKyNkZWZpbmUgTUlOX0pJRkZJRVMJKChtc2Vjc190b19qaWZmaWVzKDIpID4gMSkgPyBtc2Vjc190b19qaWZmaWVzKDIpIDogMikKKworc3RhdGljIGlubGluZSB2b2lkIHN0YXJ0X3RyYW5zZmVyKHN0cnVjdCBzbDgxMSAqc2w4MTEpCit7CisJaWYgKHNsODExLT5wb3J0MSAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfU1VTUEVORCkpCisJCXJldHVybjsKKwlpZiAoc2w4MTEtPmFjdGl2ZV9hID09IE5VTEwpIHsKKwkJc2w4MTEtPmFjdGl2ZV9hID0gc3RhcnQoc2w4MTEsIFNMODExX0VQX0EoU0w4MTFfSE9TVF9CVUYpKTsKKwkJaWYgKHNsODExLT5hY3RpdmVfYSAhPSBOVUxMKQorCQkJc2w4MTEtPmppZmZpZXNfYSA9IGppZmZpZXMgKyBNSU5fSklGRklFUzsKKwl9CisjaWZkZWYgVVNFX0IKKwlpZiAoc2w4MTEtPmFjdGl2ZV9iID09IE5VTEwpIHsKKwkJc2w4MTEtPmFjdGl2ZV9iID0gc3RhcnQoc2w4MTEsIFNMODExX0VQX0IoU0w4MTFfSE9TVF9CVUYpKTsKKwkJaWYgKHNsODExLT5hY3RpdmVfYiAhPSBOVUxMKQorCQkJc2w4MTEtPmppZmZpZXNfYiA9IGppZmZpZXMgKyBNSU5fSklGRklFUzsKKwl9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgZmluaXNoX3JlcXVlc3QoCisJc3RydWN0IHNsODExCQkqc2w4MTEsCisJc3RydWN0IHNsODExaF9lcAkqZXAsCisJc3RydWN0IHVyYgkJKnVyYiwKKwlzdHJ1Y3QgcHRfcmVncwkJKnJlZ3MsCisJaW50CQkJc3RhdHVzCispIF9fcmVsZWFzZXMoc2w4MTEtPmxvY2spIF9fYWNxdWlyZXMoc2w4MTEtPmxvY2spCit7CisJdW5zaWduZWQJCWk7CisKKwlpZiAodXNiX3BpcGVjb250cm9sKHVyYi0+cGlwZSkpCisJCWVwLT5uZXh0cGlkID0gVVNCX1BJRF9TRVRVUDsKKworCXNwaW5fbG9jaygmdXJiLT5sb2NrKTsKKwlpZiAodXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKQorCQl1cmItPnN0YXR1cyA9IHN0YXR1czsKKwlzcGluX3VubG9jaygmdXJiLT5sb2NrKTsKKworCXNwaW5fdW5sb2NrKCZzbDgxMS0+bG9jayk7CisJdXNiX2hjZF9naXZlYmFja191cmIoc2w4MTFfdG9faGNkKHNsODExKSwgdXJiLCByZWdzKTsKKwlzcGluX2xvY2soJnNsODExLT5sb2NrKTsKKworCS8qIGxlYXZlIGFjdGl2ZSBlbmRwb2ludHMgaW4gdGhlIHNjaGVkdWxlICovCisJaWYgKCFsaXN0X2VtcHR5KCZlcC0+aGVwLT51cmJfbGlzdCkpCisJCXJldHVybjsKKworCS8qIGFzeW5jIGRlc2NoZWR1bGU/ICovCisJaWYgKCFsaXN0X2VtcHR5KCZlcC0+c2NoZWR1bGUpKSB7CisJCWxpc3RfZGVsX2luaXQoJmVwLT5zY2hlZHVsZSk7CisJCWlmIChlcCA9PSBzbDgxMS0+bmV4dF9hc3luYykKKwkJCXNsODExLT5uZXh0X2FzeW5jID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCS8qIHBlcmlvZGljIGRlc2NoZWR1bGUgKi8KKwlEQkcoImRlc2NoZWR1bGUgcWglZC8lcCBicmFuY2ggJWRcbiIsIGVwLT5wZXJpb2QsIGVwLCBlcC0+YnJhbmNoKTsKKwlmb3IgKGkgPSBlcC0+YnJhbmNoOyBpIDwgUEVSSU9ESUNfU0laRTsgaSArPSBlcC0+cGVyaW9kKSB7CisJCXN0cnVjdCBzbDgxMWhfZXAJKnRlbXA7CisJCXN0cnVjdCBzbDgxMWhfZXAJKipwcmV2ID0gJnNsODExLT5wZXJpb2RpY1tpXTsKKworCQl3aGlsZSAoKnByZXYgJiYgKCh0ZW1wID0gKnByZXYpICE9IGVwKSkKKwkJCXByZXYgPSAmdGVtcC0+bmV4dDsKKwkJaWYgKCpwcmV2KQorCQkJKnByZXYgPSBlcC0+bmV4dDsKKwkJc2w4MTEtPmxvYWRbaV0gLT0gZXAtPmxvYWQ7CisJfQkKKwllcC0+YnJhbmNoID0gUEVSSU9ESUNfU0laRTsKKwlzbDgxMS0+cGVyaW9kaWNfY291bnQtLTsKKwlzbDgxMV90b19oY2Qoc2w4MTEpLT5zZWxmLmJhbmR3aWR0aF9hbGxvY2F0ZWQKKwkJLT0gZXAtPmxvYWQgLyBlcC0+cGVyaW9kOworCWlmIChlcCA9PSBzbDgxMS0+bmV4dF9wZXJpb2RpYykKKwkJc2w4MTEtPm5leHRfcGVyaW9kaWMgPSBlcC0+bmV4dDsKKworCS8qIHdlIG1pZ2h0IHR1cm4gU09GcyBiYWNrIG9uIGFnYWluIGZvciB0aGUgYXN5bmMgc2NoZWR1bGUgKi8KKwlpZiAoc2w4MTEtPnBlcmlvZGljX2NvdW50ID09IDApCisJCXNvZmlycV9vZmYoc2w4MTEpOworfQorCitzdGF0aWMgdm9pZAorZG9uZShzdHJ1Y3Qgc2w4MTEgKnNsODExLCBzdHJ1Y3Qgc2w4MTFoX2VwICplcCwgdTggYmFuaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdTgJCQlzdGF0dXM7CisJc3RydWN0IHVyYgkJKnVyYjsKKwlpbnQJCQl1cmJzdGF0ID0gLUVJTlBST0dSRVNTOworCisJaWYgKHVubGlrZWx5KCFlcCkpCisJCXJldHVybjsKKworCXN0YXR1cyA9IHNsODExX3JlYWQoc2w4MTEsIGJhbmsgKyBTTDExSF9QS1RTVEFUUkVHKTsKKworCXVyYiA9IGNvbnRhaW5lcl9vZihlcC0+aGVwLT51cmJfbGlzdC5uZXh0LCBzdHJ1Y3QgdXJiLCB1cmJfbGlzdCk7CisKKwkvKiB3ZSBjYW4gc2FmZWx5IGlnbm9yZSBOQUtzICovCisJaWYgKHN0YXR1cyAmIFNMMTFIX1NUQVRNQVNLX05BSykgeworCQkvLyBQQUNLRVQoIi4uLk5BS18lMDJ4IHFoJXBcbiIsIGJhbmssIGVwKTsKKwkJaWYgKCFlcC0+cGVyaW9kKQorCQkJZXAtPm5ha19jb3VudCsrOworCQllcC0+ZXJyb3JfY291bnQgPSAwOworCisJLyogQUNLIGFkdmFuY2VzIHRyYW5zZmVyLCB0b2dnbGUsIGFuZCBtYXliZSBxdWV1ZSAqLworCX0gZWxzZSBpZiAoc3RhdHVzICYgU0wxMUhfU1RBVE1BU0tfQUNLKSB7CisJCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gdXJiLT5kZXY7CisJCWludAkJCWxlbjsKKwkJdW5zaWduZWQgY2hhcgkJKmJ1ZjsKKworCQkvKiB1cmItPmlzb19mcmFtZV9kZXNjIGlzIGN1cnJlbnRseSBpZ25vcmVkIGhlcmUuLi4gKi8KKworCQllcC0+bmFrX2NvdW50ID0gZXAtPmVycm9yX2NvdW50ID0gMDsKKwkJc3dpdGNoIChlcC0+bmV4dHBpZCkgeworCQljYXNlIFVTQl9QSURfT1VUOgorCQkJLy8gUEFDS0VUKCIuLi5BQ0svb3V0XyUwMnggcWglcFxuIiwgYmFuaywgZXApOworCQkJdXJiLT5hY3R1YWxfbGVuZ3RoICs9IGVwLT5sZW5ndGg7CisJCQl1c2JfZG90b2dnbGUodWRldiwgZXAtPmVwbnVtLCAxKTsKKwkJCWlmICh1cmItPmFjdHVhbF9sZW5ndGgKKwkJCQkJPT0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSB7CisJCQkJaWYgKHVzYl9waXBlY29udHJvbCh1cmItPnBpcGUpKQorCQkJCQllcC0+bmV4dHBpZCA9IFVTQl9QSURfQUNLOworCisJCQkJLyogc29tZSBidWxrIHByb3RvY29scyB0ZXJtaW5hdGUgT1VUIHRyYW5zZmVycworCQkJCSAqIGJ5IGEgc2hvcnQgcGFja2V0LCB1c2luZyBaTFBzIG5vdCBwYWRkaW5nLgorCQkJCSAqLworCQkJCWVsc2UgaWYgKGVwLT5sZW5ndGggPCBlcC0+bWF4cGFja2V0CisJCQkJCQl8fCAhKHVyYi0+dHJhbnNmZXJfZmxhZ3MKKwkJCQkJCQkmIFVSQl9aRVJPX1BBQ0tFVCkpCisJCQkJCXVyYnN0YXQgPSAwOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BJRF9JTjoKKwkJCS8vIFBBQ0tFVCgiLi4uQUNLL2luXyUwMnggcWglcFxuIiwgYmFuaywgZXApOworCQkJYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmFjdHVhbF9sZW5ndGg7CisJCQlwcmVmZXRjaHcoYnVmKTsKKwkJCWxlbiA9IGVwLT5tYXhwYWNrZXQgLSBzbDgxMV9yZWFkKHNsODExLAorCQkJCQkJYmFuayArIFNMMTFIX1hGRVJDTlRSRUcpOworCQkJaWYgKGxlbiA+IGVwLT5sZW5ndGgpIHsKKwkJCQlsZW4gPSBlcC0+bGVuZ3RoOworCQkJCXVyYi0+c3RhdHVzID0gLUVPVkVSRkxPVzsKKwkJCX0KKwkJCXVyYi0+YWN0dWFsX2xlbmd0aCArPSBsZW47CisJCQlzbDgxMV9yZWFkX2J1ZihzbDgxMSwgU0w4MTFIU19QQUNLRVRfQlVGKGJhbmsgPT0gMCksCisJCQkJCWJ1ZiwgbGVuKTsKKwkJCXVzYl9kb3RvZ2dsZSh1ZGV2LCBlcC0+ZXBudW0sIDApOworCQkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA9PSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpCisJCQkJdXJic3RhdCA9IDA7CisJCQllbHNlIGlmIChsZW4gPCBlcC0+bWF4cGFja2V0KSB7CisJCQkJaWYgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKQorCQkJCQl1cmJzdGF0ID0gLUVSRU1PVEVJTzsKKwkJCQllbHNlCisJCQkJCXVyYnN0YXQgPSAwOworCQkJfQorCQkJaWYgKHVzYl9waXBlY29udHJvbCh1cmItPnBpcGUpCisJCQkJCSYmICh1cmJzdGF0ID09IC1FUkVNT1RFSU8KKwkJCQkJCXx8IHVyYnN0YXQgPT0gMCkpIHsKKworCQkJCS8qIE5PVEUgaWYgdGhlIHN0YXR1cyBzdGFnZSBTVEFMTHMgKHdoeT8pLAorCQkJCSAqIHRoaXMgcmVwb3J0cyB0aGUgd3JvbmcgdXJiIHN0YXR1cy4KKwkJCQkgKi8KKwkJCQlzcGluX2xvY2soJnVyYi0+bG9jayk7CisJCQkJaWYgKHVyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykKKwkJCQkJdXJiLT5zdGF0dXMgPSB1cmJzdGF0OworCQkJCXNwaW5fdW5sb2NrKCZ1cmItPmxvY2spOworCisJCQkJdXJiID0gTlVMTDsKKwkJCQllcC0+bmV4dHBpZCA9IFVTQl9QSURfQUNLOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BJRF9TRVRVUDoKKwkJCS8vIFBBQ0tFVCgiLi4uQUNLL3NldHVwXyUwMnggcWglcFxuIiwgYmFuaywgZXApOworCQkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9PSB1cmItPmFjdHVhbF9sZW5ndGgpCisJCQkJZXAtPm5leHRwaWQgPSBVU0JfUElEX0FDSzsKKwkJCWVsc2UgaWYgKHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpIHsKKwkJCQl1c2Jfc2V0dG9nZ2xlKHVkZXYsIDAsIDEsIDEpOworCQkJCWVwLT5uZXh0cGlkID0gVVNCX1BJRF9PVVQ7CisJCQl9IGVsc2UgeworCQkJCXVzYl9zZXR0b2dnbGUodWRldiwgMCwgMCwgMSk7CisJCQkJZXAtPm5leHRwaWQgPSBVU0JfUElEX0lOOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BJRF9BQ0s6CisJCQkvLyBQQUNLRVQoIi4uLkFDSy9zdGF0dXNfJTAyeCBxaCVwXG4iLCBiYW5rLCBlcCk7CisJCQl1cmJzdGF0ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkvKiBTVEFMTCBzdG9wcyBhbGwgdHJhbnNmZXJzICovCisJfSBlbHNlIGlmIChzdGF0dXMgJiBTTDExSF9TVEFUTUFTS19TVEFMTCkgeworCQlQQUNLRVQoIi4uLlNUQUxMXyUwMnggcWglcFxuIiwgYmFuaywgZXApOworCQllcC0+bmFrX2NvdW50ID0gZXAtPmVycm9yX2NvdW50ID0gMDsKKwkJdXJic3RhdCA9IC1FUElQRTsKKworCS8qIGVycm9yPyByZXRyeSwgdW50aWwgIjMgc3RyaWtlcyIgKi8KKwl9IGVsc2UgaWYgKCsrZXAtPmVycm9yX2NvdW50ID49IDMpIHsKKwkJaWYgKHN0YXR1cyAmIFNMMTFIX1NUQVRNQVNLX1RNT1VUKQorCQkJdXJic3RhdCA9IC1FVElNRURPVVQ7CisJCWVsc2UgaWYgKHN0YXR1cyAmIFNMMTFIX1NUQVRNQVNLX09WRikKKwkJCXVyYnN0YXQgPSAtRU9WRVJGTE9XOworCQllbHNlCisJCQl1cmJzdGF0ID0gLUVQUk9UTzsKKwkJZXAtPmVycm9yX2NvdW50ID0gMDsKKwkJUEFDS0VUKCIuLi4zU1RSSUtFU18lMDJ4ICUwMnggcWglcCBzdGF0ICVkXG4iLAorCQkJCWJhbmssIHN0YXR1cywgZXAsIHVyYnN0YXQpOworCX0KKworCWlmICh1cmIgJiYgKHVyYnN0YXQgIT0gLUVJTlBST0dSRVNTIHx8IHVyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykpCisJCWZpbmlzaF9yZXF1ZXN0KHNsODExLCBlcCwgdXJiLCByZWdzLCB1cmJzdGF0KTsKK30KKworc3RhdGljIGlubGluZSB1OCBjaGVja2RvbmUoc3RydWN0IHNsODExICpzbDgxMSkKK3sKKwl1OAljdGw7CisJdTgJaXJxc3RhdCA9IDA7CisKKwlpZiAoc2w4MTEtPmFjdGl2ZV9hICYmIHRpbWVfYmVmb3JlX2VxKHNsODExLT5qaWZmaWVzX2EsIGppZmZpZXMpKSB7CisJCWN0bCA9IHNsODExX3JlYWQoc2w4MTEsIFNMODExX0VQX0EoU0wxMUhfSE9TVENUTFJFRykpOworCQlpZiAoY3RsICYgU0wxMUhfSENUTE1BU0tfQVJNKQorCQkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMODExX0VQX0EoU0wxMUhfSE9TVENUTFJFRyksIDApOworCQlEQkcoIiVzIERPTkVfQTogY3RybCAlMDJ4IHN0cyAlMDJ4XG4iLAorCQkJKGN0bCAmIFNMMTFIX0hDVExNQVNLX0FSTSkgPyAidGltZW91dCIgOiAibG9zdCIsCisJCQljdGwsCisJCQlzbDgxMV9yZWFkKHNsODExLCBTTDgxMV9FUF9BKFNMMTFIX1BLVFNUQVRSRUcpKSk7CisJCWlycXN0YXQgfD0gU0wxMUhfSU5UTUFTS19ET05FX0E7CisJfQorI2lmZGVmCVVTRV9CCisJaWYgKHNsODExLT5hY3RpdmVfYiAmJiB0aW1lX2JlZm9yZV9lcShzbDgxMS0+amlmZmllc19iLCBqaWZmaWVzKSkgeworCQljdGwgPSBzbDgxMV9yZWFkKHNsODExLCBTTDgxMV9FUF9CKFNMMTFIX0hPU1RDVExSRUcpKTsKKwkJaWYgKGN0bCAmIFNMMTFIX0hDVExNQVNLX0FSTSkKKwkJCXNsODExX3dyaXRlKHNsODExLCBTTDgxMV9FUF9CKFNMMTFIX0hPU1RDVExSRUcpLCAwKTsKKwkJREJHKCIlcyBET05FX0I6IGN0cmwgJTAyeCBzdHMgJTAyeFxuIiwKKwkJCShjdGwgJiBTTDExSF9IQ1RMTUFTS19BUk0pID8gInRpbWVvdXQiIDogImxvc3QiLAorCQkJY3RsLAorCQkJc2w4MTFfcmVhZChzbDgxMSwgU0w4MTFfRVBfQihTTDExSF9QS1RTVEFUUkVHKSkpOworCQlpcnFzdGF0IHw9IFNMMTFIX0lOVE1BU0tfRE9ORV9BOworCX0KKyNlbmRpZgorCXJldHVybiBpcnFzdGF0OworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2w4MTFoX2lycShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgc2w4MTEJKnNsODExID0gaGNkX3RvX3NsODExKGhjZCk7CisJdTgJCWlycXN0YXQ7CisJaXJxcmV0dXJuX3QJcmV0ID0gSVJRX05PTkU7CisJdW5zaWduZWQJcmV0cmllcyA9IDU7CisKKwlzcGluX2xvY2soJnNsODExLT5sb2NrKTsKKworcmV0cnk6CisJaXJxc3RhdCA9IHNsODExX3JlYWQoc2w4MTEsIFNMMTFIX0lSUV9TVEFUVVMpICYgflNMMTFIX0lOVE1BU0tfRFA7CisJaWYgKGlycXN0YXQpIHsKKwkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX0lSUV9TVEFUVVMsIGlycXN0YXQpOworCQlpcnFzdGF0ICY9IHNsODExLT5pcnFfZW5hYmxlOworCX0KKworI2lmZGVmCVFVSVJLMgorCS8qIHRoaXMgbWF5IG5vIGxvbmdlciBiZSBuZWNlc3NhcnkgLi4uICovCisJaWYgKGlycXN0YXQgPT0gMCAmJiByZXQgPT0gSVJRX05PTkUpIHsKKwkJaXJxc3RhdCA9IGNoZWNrZG9uZShzbDgxMSk7CisJCWlmIChpcnFzdGF0IC8qICYmIGlycSAhPSB+MCAqLyApCisJCQlzbDgxMS0+c3RhdF9sb3N0Kys7CisJfQorI2VuZGlmCisKKwkvKiBVU0IgcGFja2V0cywgbm90IG5lY2Vzc2FyaWx5IGhhbmRsZWQgaW4gdGhlIG9yZGVyIHRoZXkncmUKKwkgKiBpc3N1ZWQgLi4uIHRoYXQncyBmaW5lIGlmIHRoZXkncmUgZGlmZmVyZW50IGVuZHBvaW50cy4KKwkgKi8KKwlpZiAoaXJxc3RhdCAmIFNMMTFIX0lOVE1BU0tfRE9ORV9BKSB7CisJCWRvbmUoc2w4MTEsIHNsODExLT5hY3RpdmVfYSwgU0w4MTFfRVBfQShTTDgxMV9IT1NUX0JVRiksIHJlZ3MpOworCQlzbDgxMS0+YWN0aXZlX2EgPSBOVUxMOworCQlzbDgxMS0+c3RhdF9hKys7CisJfQorI2lmZGVmIFVTRV9CCisJaWYgKGlycXN0YXQgJiBTTDExSF9JTlRNQVNLX0RPTkVfQikgeworCQlkb25lKHNsODExLCBzbDgxMS0+YWN0aXZlX2IsIFNMODExX0VQX0IoU0w4MTFfSE9TVF9CVUYpLCByZWdzKTsKKwkJc2w4MTEtPmFjdGl2ZV9iID0gTlVMTDsKKwkJc2w4MTEtPnN0YXRfYisrOworCX0KKyNlbmRpZgorCWlmIChpcnFzdGF0ICYgU0wxMUhfSU5UTUFTS19TT0ZJTlRSKSB7CisJCXVuc2lnbmVkIGluZGV4OworCisJCWluZGV4ID0gc2w4MTEtPmZyYW1lKysgJSAoUEVSSU9ESUNfU0laRSAtIDEpOworCQlzbDgxMS0+c3RhdF9zb2YrKzsKKworCQkvKiBiZSBncmFjZWZ1bCBhYm91dCBhbG1vc3QtaW5ldml0YWJsZSBwZXJpb2RpYyBzY2hlZHVsZQorCQkgKiBvdmVycnVuczogIGNvbnRpbnVlIHRoZSBwcmV2aW91cyBmcmFtZSdzIHRyYW5zZmVycyBpZmYKKwkJICogdGhpcyBvbmUgaGFzIG5vdGhpbmcgc2NoZWR1bGVkLgorCQkgKi8KKwkJaWYgKHNsODExLT5uZXh0X3BlcmlvZGljKSB7CisJCQkvLyBFUlIoIm92ZXJydW4gdG8gc2xvdCAlZFxuIiwgaW5kZXgpOworCQkJc2w4MTEtPnN0YXRfb3ZlcnJ1bisrOworCQl9CisJCWlmIChzbDgxMS0+cGVyaW9kaWNbaW5kZXhdKQorCQkJc2w4MTEtPm5leHRfcGVyaW9kaWMgPSBzbDgxMS0+cGVyaW9kaWNbaW5kZXhdOworCX0KKworCS8qIGtodWJkIG1hbmFnZXMgZGVib3VuY2luZyBhbmQgd2FrZXVwICovCisJaWYgKGlycXN0YXQgJiBTTDExSF9JTlRNQVNLX0lOU1JNVikgeworCQlzbDgxMS0+c3RhdF9pbnNybXYrKzsKKworCQkvKiBtb3N0IHN0YXRzIGFyZSByZXNldCBmb3IgZWFjaCBWQlVTIHNlc3Npb24gKi8KKwkJc2w4MTEtPnN0YXRfd2FrZSA9IDA7CisJCXNsODExLT5zdGF0X3NvZiA9IDA7CisJCXNsODExLT5zdGF0X2EgPSAwOworCQlzbDgxMS0+c3RhdF9iID0gMDsKKwkJc2w4MTEtPnN0YXRfbG9zdCA9IDA7CisKKwkJc2w4MTEtPmN0cmwxID0gMDsKKwkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX0NUTFJFRzEsIHNsODExLT5jdHJsMSk7CisKKwkJc2w4MTEtPmlycV9lbmFibGUgPSBTTDExSF9JTlRNQVNLX0lOU1JNVjsKKwkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX0lSUV9FTkFCTEUsIHNsODExLT5pcnFfZW5hYmxlKTsKKworCQkvKiB1c2Jjb3JlIG51a2VzIG90aGVyIHBlbmRpbmcgdHJhbnNhY3Rpb25zIG9uIGRpc2Nvbm5lY3QgKi8KKwkJaWYgKHNsODExLT5hY3RpdmVfYSkgeworCQkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMODExX0VQX0EoU0wxMUhfSE9TVENUTFJFRyksIDApOworCQkJZmluaXNoX3JlcXVlc3Qoc2w4MTEsIHNsODExLT5hY3RpdmVfYSwKKwkJCQljb250YWluZXJfb2Yoc2w4MTEtPmFjdGl2ZV9hLT5oZXAtPnVyYl9saXN0Lm5leHQsCisJCQkJCXN0cnVjdCB1cmIsIHVyYl9saXN0KSwKKwkJCQlOVUxMLCAtRVNIVVRET1dOKTsKKwkJCXNsODExLT5hY3RpdmVfYSA9IE5VTEw7CisJCX0KKyNpZmRlZglVU0VfQgorCQlpZiAoc2w4MTEtPmFjdGl2ZV9iKSB7CisJCQlzbDgxMV93cml0ZShzbDgxMSwgU0w4MTFfRVBfQihTTDExSF9IT1NUQ1RMUkVHKSwgMCk7CisJCQlmaW5pc2hfcmVxdWVzdChzbDgxMSwgc2w4MTEtPmFjdGl2ZV9iLAorCQkJCWNvbnRhaW5lcl9vZihzbDgxMS0+YWN0aXZlX2ItPmhlcC0+dXJiX2xpc3QubmV4dCwKKwkJCQkJc3RydWN0IHVyYiwgdXJiX2xpc3QpLAorCQkJCU5VTEwsIC1FU0hVVERPV04pOworCQkJc2w4MTEtPmFjdGl2ZV9iID0gTlVMTDsKKwkJfQorI2VuZGlmCisKKwkJLyogcG9ydCBzdGF0dXMgc2VlbXMgd2llcmQgdW50aWwgYWZ0ZXIgcmVzZXQsIHNvCisJCSAqIGZvcmNlIHRoZSByZXNldCBhbmQgbWFrZSBraHViZCBjbGVhbiB1cCBsYXRlci4KKwkJICovCisJCXNsODExLT5wb3J0MSB8PSAoMSA8PCBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTikKKwkJCQl8ICgxIDw8IFVTQl9QT1JUX0ZFQVRfQ09OTkVDVElPTik7CisKKwl9IGVsc2UgaWYgKGlycXN0YXQgJiBTTDExSF9JTlRNQVNLX1JEKSB7CisJCWlmIChzbDgxMS0+cG9ydDEgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQpKSB7CisJCQlEQkcoIndha2V1cFxuIik7CisJCQlzbDgxMS0+cG9ydDEgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORDsKKwkJCXNsODExLT5zdGF0X3dha2UrKzsKKwkJfSBlbHNlCisJCQlpcnFzdGF0ICY9IH5TTDExSF9JTlRNQVNLX1JEOworCX0KKworCWlmIChpcnFzdGF0KSB7CisJCWlmIChzbDgxMS0+cG9ydDEgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX0VOQUJMRSkpCisJCQlzdGFydF90cmFuc2ZlcihzbDgxMSk7CisJCXJldCA9IElSUV9IQU5ETEVEOworCQlpZiAocmV0cmllcy0tKQorCQkJZ290byByZXRyeTsKKwl9CisKKwlpZiAoc2w4MTEtPnBlcmlvZGljX2NvdW50ID09IDAgJiYgbGlzdF9lbXB0eSgmc2w4MTEtPmFzeW5jKSkgCisJCXNvZmlycV9vZmYoc2w4MTEpOworCXNsODExX3dyaXRlKHNsODExLCBTTDExSF9JUlFfRU5BQkxFLCBzbDgxMS0+aXJxX2VuYWJsZSk7CisKKwlzcGluX3VubG9jaygmc2w4MTEtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogdXNiIDEuMSBzYXlzIG1heCA5MCUgb2YgYSBmcmFtZSBpcyBhdmFpbGFibGUgZm9yIHBlcmlvZGljIHRyYW5zZmVycy4KKyAqIHRoaXMgZHJpdmVyIGRvZXNuJ3QgcHJvbWlzZSB0aGF0IG11Y2ggc2luY2UgaXQncyBnb3QgdG8gaGFuZGxlIGFuCisgKiBJUlEgcGVyIHBhY2tldDsgaXJxIGhhbmRsaW5nIGxhdGVuY2llcyBhbHNvIHVzZSB1cCB0aGF0IHRpbWUuCisgKi8KKyNkZWZpbmUJTUFYX1BFUklPRElDX0xPQUQJNTAwCS8qIG91dCBvZiAxMDAwIHVzZWMgKi8KKworc3RhdGljIGludCBiYWxhbmNlKHN0cnVjdCBzbDgxMSAqc2w4MTEsIHUxNiBwZXJpb2QsIHUxNiBsb2FkKQoreworCWludAlpLCBicmFuY2ggPSAtRU5PU1BDOworCisJLyogc2VhcmNoIGZvciB0aGUgbGVhc3QgbG9hZGVkIHNjaGVkdWxlIGJyYW5jaCBvZiB0aGF0IHBlcmlvZAorCSAqIHdoaWNoIGhhcyBlbm91Z2ggYmFuZHdpZHRoIGxlZnQgdW5yZXNlcnZlZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcGVyaW9kIDsgaSsrKSB7CisJCWlmIChicmFuY2ggPCAwIHx8IHNsODExLT5sb2FkW2JyYW5jaF0gPiBzbDgxMS0+bG9hZFtpXSkgeworCQkJaW50CWo7CisKKwkJCWZvciAoaiA9IGk7IGogPCBQRVJJT0RJQ19TSVpFOyBqICs9IHBlcmlvZCkgeworCQkJCWlmICgoc2w4MTEtPmxvYWRbal0gKyBsb2FkKQorCQkJCQkJPiBNQVhfUEVSSU9ESUNfTE9BRCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoaiA8IFBFUklPRElDX1NJWkUpCisJCQkJY29udGludWU7CisJCQlicmFuY2ggPSBpOyAKKwkJfQorCX0KKwlyZXR1cm4gYnJhbmNoOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHNsODExaF91cmJfZW5xdWV1ZSgKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCwKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmhlcCwKKwlzdHJ1Y3QgdXJiCQkqdXJiLAorCWludAkJCW1lbV9mbGFncworKSB7CisJc3RydWN0IHNsODExCQkqc2w4MTEgPSBoY2RfdG9fc2w4MTEoaGNkKTsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IHVyYi0+ZGV2OworCXVuc2lnbmVkIGludAkJcGlwZSA9IHVyYi0+cGlwZTsKKwlpbnQJCQlpc19vdXQgPSAhdXNiX3BpcGVpbihwaXBlKTsKKwlpbnQJCQl0eXBlID0gdXNiX3BpcGV0eXBlKHBpcGUpOworCWludAkJCWVwbnVtID0gdXNiX3BpcGVlbmRwb2ludChwaXBlKTsKKwlzdHJ1Y3Qgc2w4MTFoX2VwCSplcCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJaW50CQkJaTsKKwlpbnQJCQlyZXR2YWwgPSAwOworCisjaWZkZWYJRElTQUJMRV9JU08KKwlpZiAodHlwZSA9PSBQSVBFX0lTT0NIUk9OT1VTKQorCQlyZXR1cm4gLUVOT1NQQzsKKyNlbmRpZgorCisJLyogYXZvaWQgYWxsIGFsbG9jYXRpb25zIHdpdGhpbiBzcGlubG9ja3MgKi8KKwlpZiAoIWhlcC0+aGNwcml2KQorCQllcCA9IGtjYWxsb2MoMSwgc2l6ZW9mICplcCwgbWVtX2ZsYWdzKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzbDgxMS0+bG9jaywgZmxhZ3MpOworCisJLyogZG9uJ3Qgc3VibWl0IHRvIGEgZGVhZCBvciBkaXNhYmxlZCBwb3J0ICovCisJaWYgKCEoc2w4MTEtPnBvcnQxICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9FTkFCTEUpKQorCQkJfHwgIUhDX0lTX1JVTk5JTkcoaGNkLT5zdGF0ZSkpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBmYWlsOworCX0KKworCWlmIChoZXAtPmhjcHJpdikgeworCQlrZnJlZShlcCk7CisJCWVwID0gaGVwLT5oY3ByaXY7CisJfSBlbHNlIGlmICghZXApIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCisJfSBlbHNlIHsKKwkJSU5JVF9MSVNUX0hFQUQoJmVwLT5zY2hlZHVsZSk7CisJCWVwLT51ZGV2ID0gdXNiX2dldF9kZXYodWRldik7CisJCWVwLT5lcG51bSA9IGVwbnVtOworCQllcC0+bWF4cGFja2V0ID0gdXNiX21heHBhY2tldCh1ZGV2LCB1cmItPnBpcGUsIGlzX291dCk7CisJCWVwLT5kZWZjdHJsID0gU0wxMUhfSENUTE1BU0tfQVJNIHwgU0wxMUhfSENUTE1BU0tfRU5BQkxFOworCQl1c2Jfc2V0dG9nZ2xlKHVkZXYsIGVwbnVtLCBpc19vdXQsIDApOworCisJCWlmICh0eXBlID09IFBJUEVfQ09OVFJPTCkKKwkJCWVwLT5uZXh0cGlkID0gVVNCX1BJRF9TRVRVUDsKKwkJZWxzZSBpZiAoaXNfb3V0KQorCQkJZXAtPm5leHRwaWQgPSBVU0JfUElEX09VVDsKKwkJZWxzZQorCQkJZXAtPm5leHRwaWQgPSBVU0JfUElEX0lOOworCisJCWlmIChlcC0+bWF4cGFja2V0ID4gSF9NQVhQQUNLRVQpIHsKKwkJCS8qIGlzbyBwYWNrZXRzIHVwIHRvIDI0MCBieXRlcyBjb3VsZCB3b3JrLi4uICovCisJCQlEQkcoImRldiAlZCBlcCVkIG1heHBhY2tldCAlZFxuIiwKKwkJCQl1ZGV2LT5kZXZudW0sIGVwbnVtLCBlcC0+bWF4cGFja2V0KTsKKwkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQlnb3RvIGZhaWw7CisJCX0KKworCQlpZiAodWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0xPVykgeworCQkJLyogc2VuZCBwcmVhbWJsZSBmb3IgZXh0ZXJuYWwgaHViPyAqLworCQkJaWYgKCEoc2w4MTEtPmN0cmwxICYgU0wxMUhfQ1RMMU1BU0tfTFNQRCkpCisJCQkJZXAtPmRlZmN0cmwgfD0gU0wxMUhfSENUTE1BU0tfUFJFQU1CTEU7CisJCX0KKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgUElQRV9JU09DSFJPTk9VUzoKKwkJY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwkJCWlmICh1cmItPmludGVydmFsID4gUEVSSU9ESUNfU0laRSkKKwkJCQl1cmItPmludGVydmFsID0gUEVSSU9ESUNfU0laRTsKKwkJCWVwLT5wZXJpb2QgPSB1cmItPmludGVydmFsOworCQkJZXAtPmJyYW5jaCA9IFBFUklPRElDX1NJWkU7CisJCQlpZiAodHlwZSA9PSBQSVBFX0lTT0NIUk9OT1VTKQorCQkJCWVwLT5kZWZjdHJsIHw9IFNMMTFIX0hDVExNQVNLX0lTT0NIOworCQkJZXAtPmxvYWQgPSB1c2JfY2FsY19idXNfdGltZSh1ZGV2LT5zcGVlZCwgIWlzX291dCwKKwkJCQkodHlwZSA9PSBQSVBFX0lTT0NIUk9OT1VTKSwKKwkJCQl1c2JfbWF4cGFja2V0KHVkZXYsIHBpcGUsIGlzX291dCkpCisJCQkJCS8gMTAwMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaGVwLT5oY3ByaXYgPSBlcDsKKwl9CisKKwkvKiBtYXliZSBwdXQgZW5kcG9pbnQgaW50byBzY2hlZHVsZSAqLworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgUElQRV9DT05UUk9MOgorCWNhc2UgUElQRV9CVUxLOgorCQlpZiAobGlzdF9lbXB0eSgmZXAtPnNjaGVkdWxlKSkKKwkJCWxpc3RfYWRkX3RhaWwoJmVwLT5zY2hlZHVsZSwgJnNsODExLT5hc3luYyk7CisJCWJyZWFrOworCWNhc2UgUElQRV9JU09DSFJPTk9VUzoKKwljYXNlIFBJUEVfSU5URVJSVVBUOgorCQl1cmItPmludGVydmFsID0gZXAtPnBlcmlvZDsKKwkJaWYgKGVwLT5icmFuY2ggPCBQRVJJT0RJQ19TSVpFKQorCQkJYnJlYWs7CisKKwkJcmV0dmFsID0gYmFsYW5jZShzbDgxMSwgZXAtPnBlcmlvZCwgZXAtPmxvYWQpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCWdvdG8gZmFpbDsKKwkJZXAtPmJyYW5jaCA9IHJldHZhbDsKKwkJcmV0dmFsID0gMDsKKwkJdXJiLT5zdGFydF9mcmFtZSA9IChzbDgxMS0+ZnJhbWUgJiAoUEVSSU9ESUNfU0laRSAtIDEpKQorCQkJCQkrIGVwLT5icmFuY2g7CisKKwkJLyogc29ydCBlYWNoIHNjaGVkdWxlIGJyYW5jaCBieSBwZXJpb2QgKHNsb3cgYmVmb3JlIGZhc3QpCisJCSAqIHRvIHNoYXJlIHRoZSBmYXN0ZXIgcGFydHMgb2YgdGhlIHRyZWUgd2l0aG91dCBuZWVkaW5nCisJCSAqIGR1bW15L3BsYWNlaG9sZGVyIG5vZGVzCisJCSAqLworCQlEQkcoInNjaGVkdWxlIHFoJWQvJXAgYnJhbmNoICVkXG4iLCBlcC0+cGVyaW9kLCBlcCwgZXAtPmJyYW5jaCk7CisJCWZvciAoaSA9IGVwLT5icmFuY2g7IGkgPCBQRVJJT0RJQ19TSVpFOyBpICs9IGVwLT5wZXJpb2QpIHsKKwkJCXN0cnVjdCBzbDgxMWhfZXAJKipwcmV2ID0gJnNsODExLT5wZXJpb2RpY1tpXTsKKwkJCXN0cnVjdCBzbDgxMWhfZXAJKmhlcmUgPSAqcHJldjsKKworCQkJd2hpbGUgKGhlcmUgJiYgZXAgIT0gaGVyZSkgeworCQkJCWlmIChlcC0+cGVyaW9kID4gaGVyZS0+cGVyaW9kKQorCQkJCQlicmVhazsKKwkJCQlwcmV2ID0gJmhlcmUtPm5leHQ7CisJCQkJaGVyZSA9ICpwcmV2OworCQkJfQorCQkJaWYgKGVwICE9IGhlcmUpIHsKKwkJCQllcC0+bmV4dCA9IGhlcmU7CisJCQkJKnByZXYgPSBlcDsKKwkJCX0KKwkJCXNsODExLT5sb2FkW2ldICs9IGVwLT5sb2FkOworCQl9CisJCXNsODExLT5wZXJpb2RpY19jb3VudCsrOworCQloY2QtPnNlbGYuYmFuZHdpZHRoX2FsbG9jYXRlZCArPSBlcC0+bG9hZCAvIGVwLT5wZXJpb2Q7CisJCXNvZmlycV9vbihzbDgxMSk7CisJfQorCisJLyogaW4gY2FzZSBvZiB1bmxpbmstZHVyaW5nLXN1Ym1pdCAqLworCXNwaW5fbG9jaygmdXJiLT5sb2NrKTsKKwlpZiAodXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKSB7CisJCXNwaW5fdW5sb2NrKCZ1cmItPmxvY2spOworCQlmaW5pc2hfcmVxdWVzdChzbDgxMSwgZXAsIHVyYiwgTlVMTCwgMCk7CisJCXJldHZhbCA9IDA7CisJCWdvdG8gZmFpbDsKKwl9CisJdXJiLT5oY3ByaXYgPSBoZXA7CisJc3Bpbl91bmxvY2soJnVyYi0+bG9jayk7CisKKwlzdGFydF90cmFuc2ZlcihzbDgxMSk7CisJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX0lSUV9FTkFCTEUsIHNsODExLT5pcnFfZW5hYmxlKTsKK2ZhaWw6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2w4MTEtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHNsODExaF91cmJfZGVxdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHNsODExCQkqc2w4MTEgPSBoY2RfdG9fc2w4MTEoaGNkKTsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmhlcCA9IHVyYi0+aGNwcml2OworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXN0cnVjdCBzbDgxMWhfZXAJKmVwOworCWludAkJCXJldHZhbCA9IDA7CisKKwlpZiAoIWhlcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2w4MTEtPmxvY2ssIGZsYWdzKTsKKwllcCA9IGhlcC0+aGNwcml2OworCWlmIChlcCkgeworCQkvKiBmaW5pc2ggcmlnaHQgYXdheSBpZiB0aGlzIHVyYiBjYW4ndCBiZSBhY3RpdmUgLi4uCisJCSAqIG5vdGUgdGhhdCBzb21lIGRyaXZlcnMgd3JvbmdseSBleHBlY3QgZGVsYXlzCisJCSAqLworCQlpZiAoZXAtPmhlcC0+dXJiX2xpc3QubmV4dCAhPSAmdXJiLT51cmJfbGlzdCkgeworCQkJLyogbm90IGZyb250IG9mIHF1ZXVlPyAgbmV2ZXIgYWN0aXZlICovCisKKwkJLyogZm9yIGFjdGl2ZSB0cmFuc2ZlcnMsIHdlIGV4cGVjdCBhbiBJUlEgKi8KKwkJfSBlbHNlIGlmIChzbDgxMS0+YWN0aXZlX2EgPT0gZXApIHsKKwkJCWlmICh0aW1lX2JlZm9yZV9lcShzbDgxMS0+amlmZmllc19hLCBqaWZmaWVzKSkgeworCQkJCS8qIGhhcHBlbnMgYSBsb3Qgd2l0aCBsb3dzcGVlZD8/ICovCisJCQkJREJHKCJnaXZldXAgb24gRE9ORV9BOiBjdHJsICUwMnggc3RzICUwMnhcbiIsCisJCQkJCXNsODExX3JlYWQoc2w4MTEsCisJCQkJCQlTTDgxMV9FUF9BKFNMMTFIX0hPU1RDVExSRUcpKSwKKwkJCQkJc2w4MTFfcmVhZChzbDgxMSwKKwkJCQkJCVNMODExX0VQX0EoU0wxMUhfUEtUU1RBVFJFRykpKTsKKwkJCQlzbDgxMV93cml0ZShzbDgxMSwgU0w4MTFfRVBfQShTTDExSF9IT1NUQ1RMUkVHKSwKKwkJCQkJCTApOworCQkJCXNsODExLT5hY3RpdmVfYSA9IE5VTEw7CisJCQl9IGVsc2UKKwkJCQl1cmIgPSBOVUxMOworI2lmZGVmCVVTRV9CCisJCX0gZWxzZSBpZiAoc2w4MTEtPmFjdGl2ZV9iID09IGVwKSB7CisJCQlpZiAodGltZV9iZWZvcmVfZXEoc2w4MTEtPmppZmZpZXNfYSwgamlmZmllcykpIHsKKwkJCQkvKiBoYXBwZW5zIGEgbG90IHdpdGggbG93c3BlZWQ/PyAqLworCQkJCURCRygiZ2l2ZXVwIG9uIERPTkVfQjogY3RybCAlMDJ4IHN0cyAlMDJ4XG4iLAorCQkJCQlzbDgxMV9yZWFkKHNsODExLAorCQkJCQkJU0w4MTFfRVBfQihTTDExSF9IT1NUQ1RMUkVHKSksCisJCQkJCXNsODExX3JlYWQoc2w4MTEsCisJCQkJCQlTTDgxMV9FUF9CKFNMMTFIX1BLVFNUQVRSRUcpKSk7CisJCQkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMODExX0VQX0IoU0wxMUhfSE9TVENUTFJFRyksCisJCQkJCQkwKTsKKwkJCQlzbDgxMS0+YWN0aXZlX2IgPSBOVUxMOworCQkJfSBlbHNlCisJCQkJdXJiID0gTlVMTDsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJLyogZnJvbnQgb2YgcXVldWUgZm9yIGluYWN0aXZlIGVuZHBvaW50ICovCisJCX0KKworCQlpZiAodXJiKQorCQkJZmluaXNoX3JlcXVlc3Qoc2w4MTEsIGVwLCB1cmIsIE5VTEwsIDApOworCQllbHNlCisJCQlWREJHKCJkZXF1ZXVlLCB1cmIgJXAgYWN0aXZlICVzOyB3YWl0NGlycVxuIiwgdXJiLAorCQkJCShzbDgxMS0+YWN0aXZlX2EgPT0gZXApID8gIkEiIDogIkIiKTsKKwl9IGVsc2UKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbDgxMS0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkCitzbDgxMWhfZW5kcG9pbnRfZGlzYWJsZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmhlcCkKK3sKKwlzdHJ1Y3Qgc2w4MTFoX2VwCSplcCA9IGhlcC0+aGNwcml2OworCisJaWYgKCFlcCkKKwkJcmV0dXJuOworCisJLyogYXNzdW1lIHdlJ2QganVzdCB3YWl0IGZvciB0aGUgaXJxICovCisJaWYgKCFsaXN0X2VtcHR5KCZoZXAtPnVyYl9saXN0KSkKKwkJbXNsZWVwKDMpOworCWlmICghbGlzdF9lbXB0eSgmaGVwLT51cmJfbGlzdCkpCisJCVdBUk4oImVwICVwIG5vdCBlbXB0eT9cbiIsIGVwKTsKKworCXVzYl9wdXRfZGV2KGVwLT51ZGV2KTsKKwlrZnJlZShlcCk7CisJaGVwLT5oY3ByaXYgPSBOVUxMOworfQorCitzdGF0aWMgaW50CitzbDgxMWhfZ2V0X2ZyYW1lKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IHNsODExICpzbDgxMSA9IGhjZF90b19zbDgxMShoY2QpOworCisJLyogd3JvbmcgZXhjZXB0IHdoaWxlIHBlcmlvZGljIHRyYW5zZmVycyBhcmUgc2NoZWR1bGVkOworCSAqIG5ldmVyIG1hdGNoZXMgdGhlIG9uLXRoZS13aXJlIGZyYW1lOworCSAqIHN1YmplY3QgdG8gb3ZlcnJ1bnMuCisJICovCisJcmV0dXJuIHNsODExLT5mcmFtZTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiB0aGUgdmlydHVhbCByb290IGh1YiB0aW1lciBJUlEgY2hlY2tzIGZvciBodWIgc3RhdHVzICovCitzdGF0aWMgaW50CitzbDgxMWhfaHViX3N0YXR1c19kYXRhKHN0cnVjdCB1c2JfaGNkICpoY2QsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2w4MTEgKnNsODExID0gaGNkX3RvX3NsODExKGhjZCk7CisjaWZkZWYJUVVJUkszCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIG5vbi1TTVAgSEFDSzogdXNlIHJvb3QgaHViIHRpbWVyIGFzIGkvbyB3YXRjaGRvZworCSAqIHRoaXMgc2VlbXMgZXNzZW50aWFsIHdoZW4gU09GIElSUXMgYXJlbid0IGluIHVzZS4uLgorCSAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlpZiAoIXRpbWVyX3BlbmRpbmcoJnNsODExLT50aW1lcikpIHsKKwkJaWYgKHNsODExaF9pcnEoIC8qIH4wLCAqLyBoY2QsIE5VTEwpICE9IElSUV9OT05FKQorCQkJc2w4MTEtPnN0YXRfbG9zdCsrOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisjZW5kaWYKKworCWlmICghKHNsODExLT5wb3J0MSAmICgweGZmZmYgPDwgMTYpKSkKKwkJcmV0dXJuIDA7CisKKwkvKiB0ZWxsIGtodWJkIHBvcnQgMSBjaGFuZ2VkICovCisJKmJ1ZiA9ICgxIDw8IDEpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorc2w4MTFoX2h1Yl9kZXNjcmlwdG9yICgKKwlzdHJ1Y3Qgc2w4MTEJCQkqc2w4MTEsCisJc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvcgkqZGVzYworKSB7CisJdTE2CQl0ZW1wID0gMDsKKworCWRlc2MtPmJEZXNjcmlwdG9yVHlwZSA9IDB4Mjk7CisJZGVzYy0+Ykh1YkNvbnRyQ3VycmVudCA9IDA7CisKKwlkZXNjLT5iTmJyUG9ydHMgPSAxOworCWRlc2MtPmJEZXNjTGVuZ3RoID0gOTsKKworCS8qIHBlci1wb3J0IHBvd2VyIHN3aXRjaGluZyAoZ2FuZyBvZiBvbmUhKSwgb3Igbm9uZSAqLworCWRlc2MtPmJQd3JPbjJQd3JHb29kID0gMDsKKwlpZiAoc2w4MTEtPmJvYXJkICYmIHNsODExLT5ib2FyZC0+cG9ydF9wb3dlcikgeworCQlkZXNjLT5iUHdyT24yUHdyR29vZCA9IHNsODExLT5ib2FyZC0+cG90cGc7CisJCWlmICghZGVzYy0+YlB3ck9uMlB3ckdvb2QpCisJCQlkZXNjLT5iUHdyT24yUHdyR29vZCA9IDEwOworCQl0ZW1wID0gMHgwMDAxOworCX0gZWxzZQorCQl0ZW1wID0gMHgwMDAyOworCisJLyogbm8gb3ZlcmN1cnJlbnQgZXJyb3JzIGRldGVjdGlvbi9oYW5kbGluZyAqLworCXRlbXAgfD0gMHgwMDEwOworCisJZGVzYy0+d0h1YkNoYXJhY3RlcmlzdGljcyA9IChfX2ZvcmNlIF9fdTE2KWNwdV90b19sZTE2KHRlbXApOworCisJLyogdHdvIGJpdG1hcHM6ICBwb3J0cyByZW1vdmFibGUsIGFuZCBsZWdhY3kgUG9ydFB3ckN0cmxNYXNrICovCisJZGVzYy0+Yml0bWFwWzBdID0gMSA8PCAxOworCWRlc2MtPmJpdG1hcFsxXSA9IH4wOworfQorCitzdGF0aWMgdm9pZAorc2w4MTFoX3RpbWVyKHVuc2lnbmVkIGxvbmcgX3NsODExKQoreworCXN0cnVjdCBzbDgxMSAJKnNsODExID0gKHZvaWQgKikgX3NsODExOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJdTgJCWlycXN0YXQ7CisJdTgJCXNpZ25hbGluZyA9IHNsODExLT5jdHJsMSAmIFNMMTFIX0NUTDFNQVNLX0ZPUkNFOworCWNvbnN0IHUzMgltYXNrID0gKDEgPDwgVVNCX1BPUlRfRkVBVF9DT05ORUNUSU9OKQorCQkJCXwgKDEgPDwgVVNCX1BPUlRfRkVBVF9FTkFCTEUpCisJCQkJfCAoMSA8PCBVU0JfUE9SVF9GRUFUX0xPV1NQRUVEKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzbDgxMS0+bG9jaywgZmxhZ3MpOworCisJLyogc3RvcCBzcGVjaWFsIHNpZ25hbGluZyAqLworCXNsODExLT5jdHJsMSAmPSB+U0wxMUhfQ1RMMU1BU0tfRk9SQ0U7CisJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX0NUTFJFRzEsIHNsODExLT5jdHJsMSk7CisJdWRlbGF5KDMpOworCisJaXJxc3RhdCA9IHNsODExX3JlYWQoc2w4MTEsIFNMMTFIX0lSUV9TVEFUVVMpOworCisJc3dpdGNoIChzaWduYWxpbmcpIHsKKwljYXNlIFNMMTFIX0NUTDFNQVNLX1NFMDoKKwkJREJHKCJlbmQgcmVzZXRcbiIpOworCQlzbDgxMS0+cG9ydDEgPSAoMSA8PCBVU0JfUE9SVF9GRUFUX0NfUkVTRVQpCisJCQkJfCAoMSA8PCBVU0JfUE9SVF9GRUFUX1BPV0VSKTsKKwkJc2w4MTEtPmN0cmwxID0gMDsKKwkJLyogZG9uJ3Qgd3JvbmdseSBhY2sgUkQgKi8KKwkJaWYgKGlycXN0YXQgJiBTTDExSF9JTlRNQVNLX0lOU1JNVikKKwkJCWlycXN0YXQgJj0gflNMMTFIX0lOVE1BU0tfUkQ7CisJCWJyZWFrOworCWNhc2UgU0wxMUhfQ1RMMU1BU0tfSzoKKwkJREJHKCJlbmQgcmVzdW1lXG4iKTsKKwkJc2w4MTEtPnBvcnQxICY9IH4oMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEQkcoIm9kZCB0aW1lciBzaWduYWxpbmc6ICUwMnhcbiIsIHNpZ25hbGluZyk7CisJCWJyZWFrOworCX0KKwlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfSVJRX1NUQVRVUywgaXJxc3RhdCk7CisKKwlpZiAoaXJxc3RhdCAmIFNMMTFIX0lOVE1BU0tfUkQpIHsKKwkJLyogdXNiY29yZSBudWtlcyBhbGwgcGVuZGluZyB0cmFuc2FjdGlvbnMgb24gZGlzY29ubmVjdCAqLworCQlpZiAoc2w4MTEtPnBvcnQxICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9DT05ORUNUSU9OKSkKKwkJCXNsODExLT5wb3J0MSB8PSAoMSA8PCBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTikKKwkJCQkJfCAoMSA8PCBVU0JfUE9SVF9GRUFUX0NfRU5BQkxFKTsKKwkJc2w4MTEtPnBvcnQxICY9IH5tYXNrOworCQlzbDgxMS0+aXJxX2VuYWJsZSA9IFNMMTFIX0lOVE1BU0tfSU5TUk1WOworCX0gZWxzZSB7CisJCXNsODExLT5wb3J0MSB8PSBtYXNrOworCQlpZiAoaXJxc3RhdCAmIFNMMTFIX0lOVE1BU0tfRFApCisJCQlzbDgxMS0+cG9ydDEgJj0gfigxIDw8IFVTQl9QT1JUX0ZFQVRfTE9XU1BFRUQpOworCQlzbDgxMS0+aXJxX2VuYWJsZSA9IFNMMTFIX0lOVE1BU0tfSU5TUk1WIHwgU0wxMUhfSU5UTUFTS19SRDsKKwl9CisKKwlpZiAoc2w4MTEtPnBvcnQxICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9DT05ORUNUSU9OKSkgeworCQl1OAljdHJsMiA9IFNMODExSFNfQ1RMMl9JTklUOworCisJCXNsODExLT5pcnFfZW5hYmxlIHw9IFNMMTFIX0lOVE1BU0tfRE9ORV9BOworI2lmZGVmIFVTRV9CCisJCXNsODExLT5pcnFfZW5hYmxlIHw9IFNMMTFIX0lOVE1BU0tfRE9ORV9COworI2VuZGlmCisJCWlmIChzbDgxMS0+cG9ydDEgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX0xPV1NQRUVEKSkgeworCQkJc2w4MTEtPmN0cmwxIHw9IFNMMTFIX0NUTDFNQVNLX0xTUEQ7CisJCQljdHJsMiB8PSBTTDgxMUhTX0NUTDJNQVNLX0RTV0FQOworCQl9CisKKwkJLyogc3RhcnQgU09GcyBmbG93aW5nLCBraWNrc3RhcnRpbmcgd2l0aCBBIHJlZ2lzdGVycyAqLworCQlzbDgxMS0+Y3RybDEgfD0gU0wxMUhfQ1RMMU1BU0tfU09GX0VOQTsKKwkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX1NPRkxPV1JFRywgMHhlMCk7CisJCXNsODExX3dyaXRlKHNsODExLCBTTDgxMUhTX0NUTFJFRzIsIGN0cmwyKTsKKworCQkvKiBhdXRvaW5jcmVtZW50aW5nICovCisJCXNsODExX3dyaXRlKHNsODExLCBTTDgxMV9FUF9BKFNMMTFIX0JVRkxOVEhSRUcpLCAwKTsKKwkJd3JpdGViKFNMX1NPRiwgc2w4MTEtPmRhdGFfcmVnKTsKKwkJd3JpdGViKDAsIHNsODExLT5kYXRhX3JlZyk7CisJCXNsODExX3dyaXRlKHNsODExLCBTTDgxMV9FUF9BKFNMMTFIX0hPU1RDVExSRUcpLAorCQkJCVNMMTFIX0hDVExNQVNLX0FSTSk7CisKKwkJLyoga2h1YmQgcHJvdmlkZXMgZGVib3VuY2UgZGVsYXkgKi8KKwl9IGVsc2UgeworCQlzbDgxMS0+Y3RybDEgPSAwOworCX0KKwlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfQ1RMUkVHMSwgc2w4MTEtPmN0cmwxKTsKKworCS8qIHJlZW5hYmxlIGlycXMgKi8KKwlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfSVJRX0VOQUJMRSwgc2w4MTEtPmlycV9lbmFibGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsODExLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQKK3NsODExaF9odWJfY29udHJvbCgKKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkLAorCXUxNgkJdHlwZVJlcSwKKwl1MTYJCXdWYWx1ZSwKKwl1MTYJCXdJbmRleCwKKwljaGFyCQkqYnVmLAorCXUxNgkJd0xlbmd0aAorKSB7CisJc3RydWN0IHNsODExCSpzbDgxMSA9IGhjZF90b19zbDgxMShoY2QpOworCWludAkJcmV0dmFsID0gMDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNsODExLT5sb2NrLCBmbGFncyk7CisKKwlzd2l0Y2ggKHR5cGVSZXEpIHsKKwljYXNlIENsZWFySHViRmVhdHVyZToKKwljYXNlIFNldEh1YkZlYXR1cmU6CisJCXN3aXRjaCAod1ZhbHVlKSB7CisJCWNhc2UgQ19IVUJfT1ZFUl9DVVJSRU5UOgorCQljYXNlIENfSFVCX0xPQ0FMX1BPV0VSOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCQl9CisJCWJyZWFrOworCWNhc2UgQ2xlYXJQb3J0RmVhdHVyZToKKwkJaWYgKHdJbmRleCAhPSAxIHx8IHdMZW5ndGggIT0gMCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0VOQUJMRToKKwkJCXNsODExLT5wb3J0MSAmPSAoMSA8PCBVU0JfUE9SVF9GRUFUX1BPV0VSKTsKKwkJCXNsODExLT5jdHJsMSA9IDA7CisJCQlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfQ1RMUkVHMSwgc2w4MTEtPmN0cmwxKTsKKwkJCXNsODExLT5pcnFfZW5hYmxlID0gU0wxMUhfSU5UTUFTS19JTlNSTVY7CisJCQlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfSVJRX0VOQUJMRSwKKwkJCQkJCXNsODExLT5pcnFfZW5hYmxlKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKKwkJCWlmICghKHNsODExLT5wb3J0MSAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfU1VTUEVORCkpKQorCQkJCWJyZWFrOworCisJCQkvKiAyMCBtc2VjIG9mIHJlc3VtZS9LIHNpZ25hbGluZywgb3RoZXIgaXJxcyBibG9ja2VkICovCisJCQlEQkcoInN0YXJ0IHJlc3VtZS4uLlxuIik7CisJCQlzbDgxMS0+aXJxX2VuYWJsZSA9IDA7CisJCQlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfSVJRX0VOQUJMRSwKKwkJCQkJCXNsODExLT5pcnFfZW5hYmxlKTsKKwkJCXNsODExLT5jdHJsMSB8PSBTTDExSF9DVEwxTUFTS19LOworCQkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX0NUTFJFRzEsIHNsODExLT5jdHJsMSk7CisKKwkJCW1vZF90aW1lcigmc2w4MTEtPnRpbWVyLCBqaWZmaWVzCisJCQkJCSsgbXNlY3NfdG9famlmZmllcygyMCkpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKKwkJCXBvcnRfcG93ZXIoc2w4MTEsIDApOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX0VOQUJMRToKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORDoKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTjoKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfT1ZFUl9DVVJSRU5UOgorCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19SRVNFVDoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBlcnJvcjsKKwkJfQorCQlzbDgxMS0+cG9ydDEgJj0gfigxIDw8IHdWYWx1ZSk7CisJCWJyZWFrOworCWNhc2UgR2V0SHViRGVzY3JpcHRvcjoKKwkJc2w4MTFoX2h1Yl9kZXNjcmlwdG9yKHNsODExLCAoc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqKSBidWYpOworCQlicmVhazsKKwljYXNlIEdldEh1YlN0YXR1czoKKwkJKihfX2xlMzIgKikgYnVmID0gY3B1X3RvX2xlMzIoMCk7CisJCWJyZWFrOworCWNhc2UgR2V0UG9ydFN0YXR1czoKKwkJaWYgKHdJbmRleCAhPSAxKQorCQkJZ290byBlcnJvcjsKKwkJKihfX2xlMzIgKikgYnVmID0gY3B1X3RvX2xlMzIoc2w4MTEtPnBvcnQxKTsKKworI2lmbmRlZglWRVJCT1NFCisJaWYgKCoodTE2KikoYnVmKzIpKQkvKiBvbmx5IGlmIHdQb3J0Q2hhbmdlIGlzIGludGVyZXN0aW5nICovCisjZW5kaWYKKwkJREJHKCJHZXRQb3J0U3RhdHVzICUwOHhcbiIsIHNsODExLT5wb3J0MSk7CisJCWJyZWFrOworCWNhc2UgU2V0UG9ydEZlYXR1cmU6CisJCWlmICh3SW5kZXggIT0gMSB8fCB3TGVuZ3RoICE9IDApCisJCQlnb3RvIGVycm9yOworCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKKwkJCWlmIChzbDgxMS0+cG9ydDEgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX1JFU0VUKSkKKwkJCQlnb3RvIGVycm9yOworCQkJaWYgKCEoc2w4MTEtPnBvcnQxICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9FTkFCTEUpKSkKKwkJCQlnb3RvIGVycm9yOworCisJCQlEQkcoInN1c3BlbmQuLi5cbiIpOworCQkJc2w4MTEtPmN0cmwxICY9IH5TTDExSF9DVEwxTUFTS19TT0ZfRU5BOworCQkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX0NUTFJFRzEsIHNsODExLT5jdHJsMSk7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1BPV0VSOgorCQkJcG9ydF9wb3dlcihzbDgxMSwgMSk7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1JFU0VUOgorCQkJaWYgKHNsODExLT5wb3J0MSAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfU1VTUEVORCkpCisJCQkJZ290byBlcnJvcjsKKwkJCWlmICghKHNsODExLT5wb3J0MSAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfUE9XRVIpKSkKKwkJCQlicmVhazsKKworCQkJLyogNTAgbXNlYyBvZiByZXNldC9TRTAgc2lnbmFsaW5nLCBpcnFzIGJsb2NrZWQgKi8KKwkJCXNsODExLT5pcnFfZW5hYmxlID0gMDsKKwkJCXNsODExX3dyaXRlKHNsODExLCBTTDExSF9JUlFfRU5BQkxFLAorCQkJCQkJc2w4MTEtPmlycV9lbmFibGUpOworCQkJc2w4MTEtPmN0cmwxID0gU0wxMUhfQ1RMMU1BU0tfU0UwOworCQkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX0NUTFJFRzEsIHNsODExLT5jdHJsMSk7CisJCQlzbDgxMS0+cG9ydDEgfD0gKDEgPDwgVVNCX1BPUlRfRkVBVF9SRVNFVCk7CisJCQltb2RfdGltZXIoJnNsODExLT50aW1lciwgamlmZmllcworCQkJCQkrIG1zZWNzX3RvX2ppZmZpZXMoNTApKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBlcnJvcjsKKwkJfQorCQlzbDgxMS0+cG9ydDEgfD0gMSA8PCB3VmFsdWU7CisJCWJyZWFrOworCisJZGVmYXVsdDoKK2Vycm9yOgorCQkvKiAicHJvdG9jb2wgc3RhbGwiIG9uIGVycm9yICovCisJCXJldHZhbCA9IC1FUElQRTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbDgxMS0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKKyNpZmRlZglDT05GSUdfUE0KKworc3RhdGljIGludAorc2w4MTFoX2h1Yl9zdXNwZW5kKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJLy8gU09GcyBvZmYKKwlEQkcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzbDgxMWhfaHViX3Jlc3VtZShzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCS8vIFNPRnMgb24KKwlEQkcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCXJldHVybiAwOworfQorCisjZWxzZQorCisjZGVmaW5lCXNsODExaF9odWJfc3VzcGVuZAlOVUxMCisjZGVmaW5lCXNsODExaF9odWJfcmVzdW1lCU5VTEwKKworI2VuZGlmCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIFNUVUJfREVCVUdfRklMRQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3JlYXRlX2RlYnVnX2ZpbGUoc3RydWN0IHNsODExICpzbDgxMSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX2RlYnVnX2ZpbGUoc3RydWN0IHNsODExICpzbDgxMSkgeyB9CisKKyNlbHNlCisKKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworc3RhdGljIHZvaWQgZHVtcF9pcnEoc3RydWN0IHNlcV9maWxlICpzLCBjaGFyICpsYWJlbCwgdTggbWFzaykKK3sKKwlzZXFfcHJpbnRmKHMsICIlcyAlMDJ4JXMlcyVzJXMlcyVzXG4iLCBsYWJlbCwgbWFzaywKKwkJKG1hc2sgJiBTTDExSF9JTlRNQVNLX0RPTkVfQSkgPyAiIGRvbmVfYSIgOiAiIiwKKwkJKG1hc2sgJiBTTDExSF9JTlRNQVNLX0RPTkVfQikgPyAiIGRvbmVfYiIgOiAiIiwKKwkJKG1hc2sgJiBTTDExSF9JTlRNQVNLX1NPRklOVFIpID8gIiBzb2YiIDogIiIsCisJCShtYXNrICYgU0wxMUhfSU5UTUFTS19JTlNSTVYpID8gIiBpbnMvcm12IiA6ICIiLAorCQkobWFzayAmIFNMMTFIX0lOVE1BU0tfUkQpID8gIiByZCIgOiAiIiwKKwkJKG1hc2sgJiBTTDExSF9JTlRNQVNLX0RQKSA/ICIgZHAiIDogIiIpOworfQorCitzdGF0aWMgaW50IHByb2Nfc2w4MTFoX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IHNsODExCQkqc2w4MTEgPSBzLT5wcml2YXRlOworCXN0cnVjdCBzbDgxMWhfZXAJKmVwOworCXVuc2lnbmVkCQlpOworCisJc2VxX3ByaW50ZihzLCAiJXNcbiVzIHZlcnNpb24gJXNcbnBvcnRzdGF0dXNbMV0gPSAlMDh4XG4iLAorCQlzbDgxMV90b19oY2Qoc2w4MTEpLT5wcm9kdWN0X2Rlc2MsCisJCWhjZF9uYW1lLCBEUklWRVJfVkVSU0lPTiwKKwkJc2w4MTEtPnBvcnQxKTsKKworCXNlcV9wcmludGYocywgImluc2VydC9yZW1vdmU6ICVsZFxuIiwgc2w4MTEtPnN0YXRfaW5zcm12KTsKKwlzZXFfcHJpbnRmKHMsICJjdXJyZW50IHNlc3Npb246ICBkb25lX2EgJWxkIGRvbmVfYiAlbGQgIgorCQkJIndha2UgJWxkIHNvZiAlbGQgb3ZlcnJ1biAlbGQgbG9zdCAlbGRcblxuIiwKKwkJc2w4MTEtPnN0YXRfYSwgc2w4MTEtPnN0YXRfYiwKKwkJc2w4MTEtPnN0YXRfd2FrZSwgc2w4MTEtPnN0YXRfc29mLAorCQlzbDgxMS0+c3RhdF9vdmVycnVuLCBzbDgxMS0+c3RhdF9sb3N0KTsKKworCXNwaW5fbG9ja19pcnEoJnNsODExLT5sb2NrKTsKKworCWlmIChzbDgxMS0+Y3RybDEgJiBTTDExSF9DVEwxTUFTS19TVVNQRU5EKQorCQlzZXFfcHJpbnRmKHMsICIoc3VzcGVuZGVkKVxuXG4iKTsKKwllbHNlIHsKKwkJdTgJdCA9IHNsODExX3JlYWQoc2w4MTEsIFNMMTFIX0NUTFJFRzEpOworCisJCXNlcV9wcmludGYocywgImN0cmwxICUwMnglcyVzJXMlc1xuIiwgdCwKKwkJCSh0ICYgU0wxMUhfQ1RMMU1BU0tfU09GX0VOQSkgPyAiIHNvZmdlbiIgOiAiIiwKKwkJCSh7Y2hhciAqczsgc3dpdGNoICh0ICYgU0wxMUhfQ1RMMU1BU0tfRk9SQ0UpIHsKKwkJCWNhc2UgU0wxMUhfQ1RMMU1BU0tfTk9STUFMOiBzID0gIiI7IGJyZWFrOworCQkJY2FzZSBTTDExSF9DVEwxTUFTS19TRTA6IHMgPSAiIHNlMC9yZXNldCI7IGJyZWFrOworCQkJY2FzZSBTTDExSF9DVEwxTUFTS19LOiBzID0gIiBrL3Jlc3VtZSI7IGJyZWFrOworCQkJZGVmYXVsdDogcyA9ICJqIjsgYnJlYWs7CisJCQl9OyBzOyB9KSwKKwkJCSh0ICYgU0wxMUhfQ1RMMU1BU0tfTFNQRCkgPyAiIGxvd3NwZWVkIiA6ICIiLAorCQkJKHQgJiBTTDExSF9DVEwxTUFTS19TVVNQRU5EKSA/ICIgc3VzcGVuZCIgOiAiIik7CisKKwkJZHVtcF9pcnEocywgImlycV9lbmFibGUiLAorCQkJCXNsODExX3JlYWQoc2w4MTEsIFNMMTFIX0lSUV9FTkFCTEUpKTsKKwkJZHVtcF9pcnEocywgImlycV9zdGF0dXMiLAorCQkJCXNsODExX3JlYWQoc2w4MTEsIFNMMTFIX0lSUV9TVEFUVVMpKTsKKwkJc2VxX3ByaW50ZihzLCAiZnJhbWUgY2xvY2tzIHJlbWFpbmluZzogICVkXG4iLAorCQkJCXNsODExX3JlYWQoc2w4MTEsIFNMMTFIX1NPRlRNUlJFRykgPDwgNik7CisJfQorCisJc2VxX3ByaW50ZihzLCAiQTogcWglcCBjdGwgJTAyeCBzdHMgJTAyeFxuIiwgc2w4MTEtPmFjdGl2ZV9hLAorCQlzbDgxMV9yZWFkKHNsODExLCBTTDgxMV9FUF9BKFNMMTFIX0hPU1RDVExSRUcpKSwKKwkJc2w4MTFfcmVhZChzbDgxMSwgU0w4MTFfRVBfQShTTDExSF9QS1RTVEFUUkVHKSkpOworCXNlcV9wcmludGYocywgIkI6IHFoJXAgY3RsICUwMnggc3RzICUwMnhcbiIsIHNsODExLT5hY3RpdmVfYiwKKwkJc2w4MTFfcmVhZChzbDgxMSwgU0w4MTFfRVBfQihTTDExSF9IT1NUQ1RMUkVHKSksCisJCXNsODExX3JlYWQoc2w4MTEsIFNMODExX0VQX0IoU0wxMUhfUEtUU1RBVFJFRykpKTsKKwlzZXFfcHJpbnRmKHMsICJcbiIpOworCWxpc3RfZm9yX2VhY2hfZW50cnkgKGVwLCAmc2w4MTEtPmFzeW5jLCBzY2hlZHVsZSkgeworCQlzdHJ1Y3QgdXJiCQkqdXJiOworCisJCXNlcV9wcmludGYocywgIiVzJXNxaCVwLCBlcCVkJXMsIG1heHBhY2tldCAlZCIKKwkJCQkJIiBuYWsgJWQgZXJyICVkXG4iLAorCQkJKGVwID09IHNsODExLT5hY3RpdmVfYSkgPyAiKEEpICIgOiAiIiwKKwkJCShlcCA9PSBzbDgxMS0+YWN0aXZlX2IpID8gIihCKSAiIDogIiIsCisJCQllcCwgZXAtPmVwbnVtLAorCQkJKHsgY2hhciAqczsgc3dpdGNoIChlcC0+bmV4dHBpZCkgeworCQkJY2FzZSBVU0JfUElEX0lOOiBzID0gImluIjsgYnJlYWs7CisJCQljYXNlIFVTQl9QSURfT1VUOiBzID0gIm91dCI7IGJyZWFrOworCQkJY2FzZSBVU0JfUElEX1NFVFVQOiBzID0gInNldHVwIjsgYnJlYWs7CisJCQljYXNlIFVTQl9QSURfQUNLOiBzID0gInN0YXR1cyI7IGJyZWFrOworCQkJZGVmYXVsdDogcyA9ICI/IjsgYnJlYWs7CisJCQl9OyBzO30pLAorCQkJZXAtPm1heHBhY2tldCwKKwkJCWVwLT5uYWtfY291bnQsIGVwLT5lcnJvcl9jb3VudCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkgKHVyYiwgJmVwLT5oZXAtPnVyYl9saXN0LCB1cmJfbGlzdCkgeworCQkJc2VxX3ByaW50ZihzLCAiICB1cmIlcCwgJWQvJWRcbiIsIHVyYiwKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGgsCisJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwkJfQorCX0KKwlpZiAoIWxpc3RfZW1wdHkoJnNsODExLT5hc3luYykpCisJCXNlcV9wcmludGYocywgIlxuIik7CisKKwlzZXFfcHJpbnRmKHMsICJwZXJpb2RpYyBzaXplPSAlZFxuIiwgUEVSSU9ESUNfU0laRSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUEVSSU9ESUNfU0laRTsgaSsrKSB7CisJCWVwID0gc2w4MTEtPnBlcmlvZGljW2ldOworCQlpZiAoIWVwKQorCQkJY29udGludWU7CisJCXNlcV9wcmludGYocywgIiUyZCBbJTNkXTpcbiIsIGksIHNsODExLT5sb2FkW2ldKTsKKworCQkvKiBEVU1COiBwcmludHMgc2hhcmVkIGVudHJpZXMgbXVsdGlwbGUgdGltZXMgKi8KKwkJZG8geworCQkJc2VxX3ByaW50ZihzLAorCQkJCSIgICAlcyVzcWglZC8lcCAoJXNkZXYlZCBlcCVkJXMgbWF4ICVkKSAiCisJCQkJCSJlcnIgJWRcbiIsCisJCQkJKGVwID09IHNsODExLT5hY3RpdmVfYSkgPyAiKEEpICIgOiAiIiwKKwkJCQkoZXAgPT0gc2w4MTEtPmFjdGl2ZV9iKSA/ICIoQikgIiA6ICIiLAorCQkJCWVwLT5wZXJpb2QsIGVwLAorCQkJCShlcC0+dWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwpCisJCQkJCT8gIiIgOiAibHMgIiwKKwkJCQllcC0+dWRldi0+ZGV2bnVtLCBlcC0+ZXBudW0sCisJCQkJKGVwLT5lcG51bSA9PSAwKSA/ICIiCisJCQkJCTogKChlcC0+bmV4dHBpZCA9PSBVU0JfUElEX0lOKQorCQkJCQkJPyAiaW4iCisJCQkJCQk6ICJvdXQiKSwKKwkJCQllcC0+bWF4cGFja2V0LCBlcC0+ZXJyb3JfY291bnQpOworCQkJZXAgPSBlcC0+bmV4dDsKKwkJfSB3aGlsZSAoZXApOworCX0KKworCXNwaW5fdW5sb2NrX2lycSgmc2w4MTEtPmxvY2spOworCXNlcV9wcmludGYocywgIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jX3NsODExaF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwcm9jX3NsODExaF9zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19vcHMgPSB7CisJLm9wZW4JCT0gcHJvY19zbDgxMWhfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworLyogZXhwZWN0IGp1c3Qgb25lIHNsODExIHBlciBzeXN0ZW0gKi8KK3N0YXRpYyBjb25zdCBjaGFyIHByb2NfZmlsZW5hbWVbXSA9ICJkcml2ZXIvc2w4MTFoIjsKKworc3RhdGljIHZvaWQgY3JlYXRlX2RlYnVnX2ZpbGUoc3RydWN0IHNsODExICpzbDgxMSkKK3sKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZTsKKworCXBkZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KHByb2NfZmlsZW5hbWUsIDAsIE5VTEwpOworCWlmIChwZGUgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJcGRlLT5wcm9jX2ZvcHMgPSAmcHJvY19vcHM7CisJcGRlLT5kYXRhID0gc2w4MTE7CisJc2w4MTEtPnBkZSA9IHBkZTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2RlYnVnX2ZpbGUoc3RydWN0IHNsODExICpzbDgxMSkKK3sKKwlpZiAoc2w4MTEtPnBkZSkKKwkJcmVtb3ZlX3Byb2NfZW50cnkocHJvY19maWxlbmFtZSwgTlVMTCk7Cit9CisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZAorc2w4MTFoX3N0b3Aoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3Qgc2w4MTEJKnNsODExID0gaGNkX3RvX3NsODExKGhjZCk7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCWRlbF90aW1lcl9zeW5jKCZoY2QtPnJoX3RpbWVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzbDgxMS0+bG9jaywgZmxhZ3MpOworCXBvcnRfcG93ZXIoc2w4MTEsIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsODExLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQKK3NsODExaF9zdGFydChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBzbDgxMQkJKnNsODExID0gaGNkX3RvX3NsODExKGhjZCk7CisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CisKKwkvKiBjaGlwIGhhcyBiZWVuIHJlc2V0LCBWQlVTIHBvd2VyIGlzIG9mZiAqLworCisJdWRldiA9IHVzYl9hbGxvY19kZXYoTlVMTCwgJmhjZC0+c2VsZiwgMCk7CisJaWYgKCF1ZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXVkZXYtPnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisKKwlpZiAoc2w4MTEtPmJvYXJkKQorCQloY2QtPmNhbl93YWtldXAgPSBzbDgxMS0+Ym9hcmQtPmNhbl93YWtldXA7CisKKwlpZiAodXNiX2hjZF9yZWdpc3Rlcl9yb290X2h1Yih1ZGV2LCBoY2QpICE9IDApIHsKKwkJdXNiX3B1dF9kZXYodWRldik7CisJCXNsODExaF9zdG9wKGhjZCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChzbDgxMS0+Ym9hcmQgJiYgc2w4MTEtPmJvYXJkLT5wb3dlcikKKwkJaHViX3NldF9wb3dlcl9idWRnZXQodWRldiwgc2w4MTEtPmJvYXJkLT5wb3dlciAqIDIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgaGNfZHJpdmVyIHNsODExaF9oY19kcml2ZXIgPSB7CisJLmRlc2NyaXB0aW9uID0JCWhjZF9uYW1lLAorCS5oY2RfcHJpdl9zaXplID0Jc2l6ZW9mKHN0cnVjdCBzbDgxMSksCisKKwkvKgorCSAqIGdlbmVyaWMgaGFyZHdhcmUgbGlua2FnZQorCSAqLworCS5pcnEgPQkJCXNsODExaF9pcnEsCisJLmZsYWdzID0JCUhDRF9VU0IxMSB8IEhDRF9NRU1PUlksCisKKwkvKiBCYXNpYyBsaWZlY3ljbGUgb3BlcmF0aW9ucyAqLworCS5zdGFydCA9CQlzbDgxMWhfc3RhcnQsCisJLnN0b3AgPQkJCXNsODExaF9zdG9wLAorCisJLyoKKwkgKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcworCSAqLworCS51cmJfZW5xdWV1ZSA9CQlzbDgxMWhfdXJiX2VucXVldWUsCisJLnVyYl9kZXF1ZXVlID0JCXNsODExaF91cmJfZGVxdWV1ZSwKKwkuZW5kcG9pbnRfZGlzYWJsZSA9CXNsODExaF9lbmRwb2ludF9kaXNhYmxlLAorCisJLyoKKwkgKiBwZXJpb2RpYyBzY2hlZHVsZSBzdXBwb3J0CisJICovCisJLmdldF9mcmFtZV9udW1iZXIgPQlzbDgxMWhfZ2V0X2ZyYW1lLAorCisJLyoKKwkgKiByb290IGh1YiBzdXBwb3J0CisJICovCisJLmh1Yl9zdGF0dXNfZGF0YSA9CXNsODExaF9odWJfc3RhdHVzX2RhdGEsCisJLmh1Yl9jb250cm9sID0JCXNsODExaF9odWJfY29udHJvbCwKKwkuaHViX3N1c3BlbmQgPQkJc2w4MTFoX2h1Yl9zdXNwZW5kLAorCS5odWJfcmVzdW1lID0JCXNsODExaF9odWJfcmVzdW1lLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2luaXRfb3JfbW9kdWxlCitzbDgxMWhfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzbDgxMQkJKnNsODExID0gaGNkX3RvX3NsODExKGhjZCk7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSpyZXM7CisKKwlwZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKKworCXJlbW92ZV9kZWJ1Z19maWxlKHNsODExKTsKKwl1c2JfcmVtb3ZlX2hjZChoY2QpOworCisJaW91bm1hcChzbDgxMS0+ZGF0YV9yZWcpOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIDEpOworCisJaW91bm1hcChzbDgxMS0+YWRkcl9yZWcpOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIDEpOworCisJdXNiX3B1dF9oY2QoaGNkKTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSByZXNvdXJjZV9sZW4ocikgKCgociktPmVuZCAtIChyKS0+c3RhcnQpICsgMSkKKworc3RhdGljIGludCBfX2luaXQKK3NsODExaF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CisJc3RydWN0IHNsODExCQkqc2w4MTE7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSphZGRyLCAqZGF0YTsKKwlpbnQJCQlpcnE7CisJdm9pZCBfX2lvbWVtCQkqYWRkcl9yZWc7CisJdm9pZCBfX2lvbWVtCQkqZGF0YV9yZWc7CisJaW50CQkJcmV0dmFsOworCXU4CQkJdG1wOworCisJLyogYmFzaWMgc2FuaXR5IGNoZWNrcyBmaXJzdC4gIGJvYXJkLXNwZWNpZmljIGluaXQgbG9naWMgc2hvdWxkCisJICogaGF2ZSBpbml0aWFsaXplZCB0aGVzZSB0aHJlZSByZXNvdXJjZXMgYW5kIHByb2JhYmx5IGJvYXJkCisJICogc3BlY2lmaWMgcGxhdGZvcm1fZGF0YS4gIHdlIGRvbid0IHByb2JlIGZvciBJUlFzLCBhbmQgZG8gb25seQorCSAqIG1pbmltYWwgc2FuaXR5IGNoZWNraW5nLgorCSAqLworCXBkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOworCWlmIChwZGV2LT5udW1fcmVzb3VyY2VzIDwgMykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlhZGRyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlkYXRhID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmICghYWRkciB8fCAhZGF0YSB8fCBpcnEgPCAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIHJlZnVzZSB0byBjb25mdXNlIHVzYmNvcmUgKi8KKwlpZiAoZGV2LT5kbWFfbWFzaykgeworCQlEQkcoIm5vIHdlIHdvbid0IGRtYVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGFkZHItPnN0YXJ0LCAxLCBoY2RfbmFtZSkpIHsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlnb3RvIGVycjE7CisJfQorCWFkZHJfcmVnID0gaW9yZW1hcChhZGRyLT5zdGFydCwgcmVzb3VyY2VfbGVuKGFkZHIpKTsKKwlpZiAoYWRkcl9yZWcgPT0gTlVMTCkgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycjI7CisJfQorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oZGF0YS0+c3RhcnQsIDEsIGhjZF9uYW1lKSkgeworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZXJyMzsKKwl9CisJZGF0YV9yZWcgPSBpb3JlbWFwKGRhdGEtPnN0YXJ0LCByZXNvdXJjZV9sZW4oYWRkcikpOworCWlmIChkYXRhX3JlZyA9PSBOVUxMKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyNDsKKwl9CisKKwkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBoY2QgKi8KKwloY2QgPSB1c2JfY3JlYXRlX2hjZCgmc2w4MTFoX2hjX2RyaXZlciwgZGV2LCBkZXYtPmJ1c19pZCk7CisJaWYgKCFoY2QpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnI1OworCX0KKwloY2QtPnJzcmNfc3RhcnQgPSBhZGRyLT5zdGFydDsKKwlzbDgxMSA9IGhjZF90b19zbDgxMShoY2QpOworCisJc3Bpbl9sb2NrX2luaXQoJnNsODExLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmc2w4MTEtPmFzeW5jKTsKKwlzbDgxMS0+Ym9hcmQgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJaW5pdF90aW1lcigmc2w4MTEtPnRpbWVyKTsKKwlzbDgxMS0+dGltZXIuZnVuY3Rpb24gPSBzbDgxMWhfdGltZXI7CisJc2w4MTEtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgc2w4MTE7CisJc2w4MTEtPmFkZHJfcmVnID0gYWRkcl9yZWc7CisJc2w4MTEtPmRhdGFfcmVnID0gZGF0YV9yZWc7CisKKwlzcGluX2xvY2tfaXJxKCZzbDgxMS0+bG9jayk7CisJcG9ydF9wb3dlcihzbDgxMSwgMCk7CisJc3Bpbl91bmxvY2tfaXJxKCZzbDgxMS0+bG9jayk7CisJbXNsZWVwKDIwMCk7CisKKwl0bXAgPSBzbDgxMV9yZWFkKHNsODExLCBTTDExSF9IV1JFVlJFRyk7CisJc3dpdGNoICh0bXAgPj4gNCkgeworCWNhc2UgMToKKwkJaGNkLT5wcm9kdWN0X2Rlc2MgPSAiU0w4MTFIUyB2MS4yIjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQloY2QtPnByb2R1Y3RfZGVzYyA9ICJTTDgxMUhTIHYxLjUiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiByZWplY3QgY2FzZSAwLCBTTDExUyBpcyBsZXNzIGZ1bmN0aW9uYWwgKi8KKwkJREJHKCJjaGlwcmV2ICUwMnhcbiIsIHRtcCk7CisJCXJldHZhbCA9IC1FTlhJTzsKKwkJZ290byBlcnI2OworCX0KKworCS8qIHNsODExcyB3b3VsZCBuZWVkIGEgZGlmZmVyZW50IGhhbmRsZXIgZm9yIHRoaXMgaXJxICovCisjaWZkZWYJQ09ORklHX0FSTQorCS8qIEN5cHJlc3MgZG9jcyBzYXkgdGhlIElSUSBpcyBJUlFUX0hJR0ggLi4uICovCisJc2V0X2lycV90eXBlKGlycSwgSVJRVF9SSVNJTkcpOworI2VuZGlmCisJcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIFNBX0lOVEVSUlVQVCk7CisJaWYgKHJldHZhbCAhPSAwKQorCQlnb3RvIGVycjY7CisKKwljcmVhdGVfZGVidWdfZmlsZShzbDgxMSk7CisJcmV0dXJuIHJldHZhbDsKKworIGVycjY6CisJdXNiX3B1dF9oY2QoaGNkKTsKKyBlcnI1OgorCWlvdW5tYXAoZGF0YV9yZWcpOworIGVycjQ6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGRhdGEtPnN0YXJ0LCAxKTsKKyBlcnIzOgorCWlvdW5tYXAoYWRkcl9yZWcpOworIGVycjI6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGFkZHItPnN0YXJ0LCAxKTsKKyBlcnIxOgorCURCRygiaW5pdCBlcnJvciwgJWRcbiIsIHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworI2lmZGVmCUNPTkZJR19QTQorCisvKiBmb3IgdGhpcyBkZXZpY2UgdGhlcmUncyBubyB1c2VmdWwgZGlzdGluY3Rpb24gYmV0d2VlbiB0aGUgY29udHJvbGxlcgorICogYW5kIGl0cyByb290IGh1YiwgZXhjZXB0IHRoYXQgdGhlIHJvb3QgaHViIG9ubHkgZ2V0cyBkaXJlY3QgUE0gY2FsbHMgCisgKiB3aGVuIENPTkZJR19VU0JfU1VTUEVORCBpcyBlbmFibGVkLgorICovCisKK3N0YXRpYyBpbnQKK3NsODExaF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlLCB1MzIgcGhhc2UpCit7CisJc3RydWN0IHVzYl9oY2QJKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzbDgxMQkqc2w4MTEgPSBoY2RfdG9fc2w4MTEoaGNkKTsKKwlpbnQJCXJldHZhbCA9IDA7CisKKwlpZiAocGhhc2UgIT0gU1VTUEVORF9QT1dFUl9ET1dOKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKHN0YXRlIDw9IFBNX1NVU1BFTkRfTUVNKQorCQlyZXR2YWwgPSBzbDgxMWhfaHViX3N1c3BlbmQoaGNkKTsKKwllbHNlCisJCXBvcnRfcG93ZXIoc2w4MTEsIDApOworCWlmIChyZXR2YWwgPT0gMCkKKwkJZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQKK3NsODExaF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgcGhhc2UpCit7CisJc3RydWN0IHVzYl9oY2QJKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzbDgxMQkqc2w4MTEgPSBoY2RfdG9fc2w4MTEoaGNkKTsKKworCWlmIChwaGFzZSAhPSBSRVNVTUVfUE9XRVJfT04pCisJCXJldHVybiAwOworCisJLyogd2l0aCBubyAiY2hlY2sgdG8gc2VlIGlmIFZCVVMgaXMgc3RpbGwgcG93ZXJlZCIgYm9hcmQgaG9vaywKKwkgKiBsZXQncyBhc3N1bWUgaXQnZCBvbmx5IGJlIHBvd2VyZWQgdG8gZW5hYmxlIHJlbW90ZSB3YWtldXAuCisJICovCisJaWYgKGRldi0+cG93ZXIucG93ZXJfc3RhdGUgPiBQTV9TVVNQRU5EX01FTQorCQkJfHwgIWhjZC0+Y2FuX3dha2V1cCkgeworCQlzbDgxMS0+cG9ydDEgPSAwOworCQlwb3J0X3Bvd2VyKHNsODExLCAxKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CisJcmV0dXJuIHNsODExaF9odWJfcmVzdW1lKGhjZCk7Cit9CisKKyNlbHNlCisKKyNkZWZpbmUJc2w4MTFoX3N1c3BlbmQJTlVMTAorI2RlZmluZQlzbDgxMWhfcmVzdW1lCU5VTEwKKworI2VuZGlmCisKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNsODExaF9kcml2ZXIgPSB7CisJLm5hbWUgPQkJKGNoYXIgKikgaGNkX25hbWUsCisJLmJ1cyA9CQkmcGxhdGZvcm1fYnVzX3R5cGUsCisKKwkucHJvYmUgPQlzbDgxMWhfcHJvYmUsCisJLnJlbW92ZSA9CXNsODExaF9yZW1vdmUsCisKKwkuc3VzcGVuZCA9CXNsODExaF9zdXNwZW5kLAorCS5yZXN1bWUgPQlzbDgxMWhfcmVzdW1lLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKK3N0YXRpYyBpbnQgX19pbml0IHNsODExaF9pbml0KHZvaWQpIAoreworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlJTkZPKCJkcml2ZXIgJXMsICVzXG4iLCBoY2RfbmFtZSwgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnNsODExaF9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoc2w4MTFoX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgc2w4MTFoX2NsZWFudXAodm9pZCkgCit7CQorCWRyaXZlcl91bnJlZ2lzdGVyKCZzbDgxMWhfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHNsODExaF9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEuaCBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjkwZDk4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS5oCkBAIC0wLDAgKzEsMjY2IEBACisvKgorICogU0w4MTFIUyByZWdpc3RlciBkZWNsYXJhdGlvbnMgYW5kIEhDRCBkYXRhIHN0cnVjdHVyZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgUHNpb24gVGVrbG9naXgKKyAqIENvcHlyaWdodCAoQykgMjAwNCBEYXZpZCBCcm93bmVsbAorICogQ29weXJpZ2h0IChDKSAyMDAxIEN5cHJlc3MgU2VtaWNvbmR1Y3RvciBJbmMuIAorICovCisKKy8qCisgKiBTTDgxMUhTIGhhcyB0cmFuc2ZlciByZWdpc3RlcnMsIGFuZCBjb250cm9sIHJlZ2lzdGVycy4gIEluIGhvc3QvbWFzdGVyCisgKiBtb2RlIG9uZSBzZXQgb2YgcmVnaXN0ZXJzIGlzIHVzZWQ7IGluIHBlcmlwaGVyYWwvc2xhdmUgbW9kZSwgYW5vdGhlci4KKyAqICAtIFNMMTFIIG9ubHkgaGFzIHNvbWUgIkEiIHRyYW5zZmVyIHJlZ2lzdGVycyBmcm9tIDB4MDAtMHgwNAorICogIC0gU0w4MTFIUyBhbHNvIGhhcyAiQiIgcmVnaXN0ZXJzIGZyb20gMHgwOC0weDBjCisgKiAgLSBTTDgxMVMgKG9yIEhTIGluIHNsYXZlIG1vZGUpIGhhcyBmb3VyIEErQiBzZXRzLCBhdCAwMCwgMTAsIDIwLCAzMAorICovCisKKyNkZWZpbmUgU0w4MTFfRVBfQShiYXNlKQkoKGJhc2UpICsgMCkKKyNkZWZpbmUgU0w4MTFfRVBfQihiYXNlKQkoKGJhc2UpICsgOCkKKworI2RlZmluZSBTTDgxMV9IT1NUX0JVRgkJMHgwMAorI2RlZmluZSBTTDgxMV9QRVJJUEhfRVAwCTB4MDAKKyNkZWZpbmUgU0w4MTFfUEVSSVBIX0VQMQkweDEwCisjZGVmaW5lIFNMODExX1BFUklQSF9FUDIJMHgyMAorI2RlZmluZSBTTDgxMV9QRVJJUEhfRVAzCTB4MzAKKworCisvKiBUUkFOU0ZFUiBSRUdJU1RFUlM6ICBob3N0IGFuZCBwZXJpcGhlcmFsIHNpZGVzIGFyZSBzaW1pbGFyCisgKiBleGNlcHQgZm9yIHRoZSBjb250cm9sIG1vZGVscyAobWFzdGVyIHZzIHNsYXZlKS4KKyAqLworI2RlZmluZSBTTDExSF9IT1NUQ1RMUkVHCTAKKyMJZGVmaW5lIFNMMTFIX0hDVExNQVNLX0FSTQkweDAxCisjCWRlZmluZSBTTDExSF9IQ1RMTUFTS19FTkFCTEUJMHgwMgorIwlkZWZpbmUgU0wxMUhfSENUTE1BU0tfSU4JMHgwMAorIwlkZWZpbmUgU0wxMUhfSENUTE1BU0tfT1VUCTB4MDQKKyMJZGVmaW5lIFNMMTFIX0hDVExNQVNLX0lTT0NICTB4MTAKKyMJZGVmaW5lIFNMMTFIX0hDVExNQVNLX0FGVEVSU09GCTB4MjAKKyMJZGVmaW5lIFNMMTFIX0hDVExNQVNLX1RPR0dMRQkweDQwCisjCWRlZmluZSBTTDExSF9IQ1RMTUFTS19QUkVBTUJMRQkweDgwCisjZGVmaW5lIFNMMTFIX0JVRkFERFJSRUcJMQorI2RlZmluZSBTTDExSF9CVUZMTlRIUkVHCTIKKyNkZWZpbmUgU0wxMUhfUEtUU1RBVFJFRwkzCS8qIHJlYWQgKi8KKyMJZGVmaW5lIFNMMTFIX1NUQVRNQVNLX0FDSwkweDAxCisjCWRlZmluZSBTTDExSF9TVEFUTUFTS19FUlJPUgkweDAyCisjCWRlZmluZSBTTDExSF9TVEFUTUFTS19UTU9VVAkweDA0CisjCWRlZmluZSBTTDExSF9TVEFUTUFTS19TRVEJMHgwOAorIwlkZWZpbmUgU0wxMUhfU1RBVE1BU0tfU0VUVVAJMHgxMAorIwlkZWZpbmUgU0wxMUhfU1RBVE1BU0tfT1ZGCTB4MjAKKyMJZGVmaW5lIFNMMTFIX1NUQVRNQVNLX05BSwkweDQwCisjCWRlZmluZSBTTDExSF9TVEFUTUFTS19TVEFMTAkweDgwCisjZGVmaW5lIFNMMTFIX1BJREVQUkVHCQkzCS8qIHdyaXRlICovCisjCWRlZmluZQlTTF9TRVRVUAkweGQwCisjCWRlZmluZQlTTF9JTgkJMHg5MAorIwlkZWZpbmUJU0xfT1VUCQkweDEwCisjCWRlZmluZQlTTF9TT0YJCTB4NTAKKyMJZGVmaW5lCVNMX1BSRUFNQkxFCTB4YzAKKyMJZGVmaW5lCVNMX05BSwkJMHhhMAorIwlkZWZpbmUJU0xfU1RBTEwJMHhlMAorIwlkZWZpbmUJU0xfREFUQTAJMHgzMAorIwlkZWZpbmUJU0xfREFUQTEJMHhiMAorI2RlZmluZSBTTDExSF9YRkVSQ05UUkVHCTQJLyogcmVhZCAqLworI2RlZmluZSBTTDExSF9ERVZBRERSUkVHCTQJLyogd3JpdGUgKi8KKworCisvKiBDT05UUk9MIFJFR0lTVEVSUzogIGhvc3QgYW5kIHBlcmlwaGVyYWwgYXJlIHZlcnkgZGlmZmVyZW50LgorICovCisjZGVmaW5lIFNMMTFIX0NUTFJFRzEJCTUKKyMJZGVmaW5lIFNMMTFIX0NUTDFNQVNLX1NPRl9FTkEJMHgwMQorIwlkZWZpbmUgU0wxMUhfQ1RMMU1BU0tfRk9SQ0UJMHgxOAorIwkJZGVmaW5lIFNMMTFIX0NUTDFNQVNLX05PUk1BTAkweDAwCisjCQlkZWZpbmUgU0wxMUhfQ1RMMU1BU0tfU0UwCTB4MDgJLyogcmVzZXQgKi8KKyMJCWRlZmluZSBTTDExSF9DVEwxTUFTS19KCQkweDEwCisjCQlkZWZpbmUgU0wxMUhfQ1RMMU1BU0tfSwkJMHgxOAkvKiByZXN1bWUgKi8KKyMJZGVmaW5lIFNMMTFIX0NUTDFNQVNLX0xTUEQJMHgyMAorIwlkZWZpbmUgU0wxMUhfQ1RMMU1BU0tfU1VTUEVORAkweDQwCisjZGVmaW5lIFNMMTFIX0lSUV9FTkFCTEUJNgorIwlkZWZpbmUgU0wxMUhfSU5UTUFTS19ET05FX0EJMHgwMQorIwlkZWZpbmUgU0wxMUhfSU5UTUFTS19ET05FX0IJMHgwMgorIwlkZWZpbmUgU0wxMUhfSU5UTUFTS19TT0ZJTlRSCTB4MTAKKyMJZGVmaW5lIFNMMTFIX0lOVE1BU0tfSU5TUk1WCTB4MjAJLyogdG8vZnJvbSBTRTAgKi8KKyMJZGVmaW5lIFNMMTFIX0lOVE1BU0tfUkQJCTB4NDAKKyMJZGVmaW5lIFNMMTFIX0lOVE1BU0tfRFAJCTB4ODAJLyogb25seSBpbiBJTlRTVEFUUkVHICovCisjZGVmaW5lIFNMMTFTX0FERFJFU1MJCTcKKworLyogMHgwOC0weDBjIGFyZSBmb3IgdGhlIEIgYnVmZmVyIChub3QgaW4gU0wxMSkgKi8KKworI2RlZmluZSBTTDExSF9JUlFfU1RBVFVTCTB4MEQJLyogd3JpdGUgdG8gYWNrICovCisjZGVmaW5lIFNMMTFIX0hXUkVWUkVHCQkweDBFCS8qIHJlYWQgKi8KKyMJZGVmaW5lIFNMMTFIX0hXUk1BU0tfSFdSRVYJMHhGMAorI2RlZmluZSBTTDExSF9TT0ZMT1dSRUcJCTB4MEUJLyogd3JpdGUgKi8KKyNkZWZpbmUgU0wxMUhfU09GVE1SUkVHCQkweDBGCS8qIHJlYWQgKi8KKworLyogYSB3cml0ZSB0byB0aGlzIHJlZ2lzdGVyIGVuYWJsZXMgU0w4MTFIUyBmZWF0dXJlcy4KKyAqIEhPU1QgZmxhZyBwcmVzdW1hYmx5IG92ZXJyaWRlcyB0aGUgY2hpcCBpbnB1dCBzaWduYWw/CisgKi8KKyNkZWZpbmUgU0w4MTFIU19DVExSRUcyCQkweDBGCisjCWRlZmluZSBTTDgxMUhTX0NUTDJNQVNLX1NPRl9NQVNLCTB4M0YKKyMJZGVmaW5lIFNMODExSFNfQ1RMMk1BU0tfRFNXQVAJCTB4NDAKKyMJZGVmaW5lIFNMODExSFNfQ1RMMk1BU0tfSE9TVAkJMHg4MAorCisjZGVmaW5lIFNMODExSFNfQ1RMMl9JTklUCShTTDgxMUhTX0NUTDJNQVNLX0hPU1QgfCAweDJlKQorCisKKy8qIERBVEEgQlVGRkVSUzogcmVnaXN0ZXJzIGZyb20gMHgxMC4uMHhmZiBhcmUgZm9yIGRhdGEgYnVmZmVyczsKKyAqIHRoYXQncyAyNDAgYnl0ZXMsIHdoaWNoIHdlJ2xsIHNwbGl0IGV2ZW5seSBiZXR3ZWVuIEEgYW5kIEIgc2lkZXMuCisgKiBPbmx5IElTTyBjYW4gdXNlIG1vcmUgdGhhbiA2NCBieXRlcyBwZXIgcGFja2V0LgorICogKFRoZSBTTDExUyBoYXMgMHg0MC4uMHhmZiBmb3IgYnVmZmVycy4pCisgKi8KKyNkZWZpbmUgSF9NQVhQQUNLRVQJMTIwCQkvKiBieXRlcyBpbiBBIG9yIEIgZmlmb3MgKi8KKworI2RlZmluZSBTTDExSF9EQVRBX1NUQVJUCTB4MTAKKyNkZWZpbmUJU0w4MTFIU19QQUNLRVRfQlVGKGlzX2EpCSgoaXNfYSkgXAorCQk/IFNMMTFIX0RBVEFfU1RBUlQgXAorCQk6IChTTDExSF9EQVRBX1NUQVJUICsgSF9NQVhQQUNLRVQpKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lCUxPRzJfUEVSSU9ESUNfU0laRQk1CS8qIGFyYml0cmFyeTsgdGhpcyBtYXRjaGVzIE9IQ0kgKi8KKyNkZWZpbmUJUEVSSU9ESUNfU0laRQkJKDEgPDwgTE9HMl9QRVJJT0RJQ19TSVpFKQorCitzdHJ1Y3Qgc2w4MTEgeworCXNwaW5sb2NrX3QJCWxvY2s7CisJdm9pZCBfX2lvbWVtCQkqYWRkcl9yZWc7CisJdm9pZCBfX2lvbWVtCQkqZGF0YV9yZWc7CisJc3RydWN0IHNsODExX3BsYXRmb3JtX2RhdGEJKmJvYXJkOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqcGRlOworCisJdW5zaWduZWQgbG9uZwkJc3RhdF9pbnNybXY7CisJdW5zaWduZWQgbG9uZwkJc3RhdF93YWtlOworCXVuc2lnbmVkIGxvbmcJCXN0YXRfc29mOworCXVuc2lnbmVkIGxvbmcJCXN0YXRfYTsKKwl1bnNpZ25lZCBsb25nCQlzdGF0X2I7CisJdW5zaWduZWQgbG9uZwkJc3RhdF9sb3N0OworCXVuc2lnbmVkIGxvbmcJCXN0YXRfb3ZlcnJ1bjsKKworCS8qIHN3IG1vZGVsICovCisJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7CisJc3RydWN0IHNsODExaF9lcAkqbmV4dF9wZXJpb2RpYzsKKwlzdHJ1Y3Qgc2w4MTFoX2VwCSpuZXh0X2FzeW5jOworCisJc3RydWN0IHNsODExaF9lcAkqYWN0aXZlX2E7CisJdW5zaWduZWQgbG9uZwkJamlmZmllc19hOworCXN0cnVjdCBzbDgxMWhfZXAJKmFjdGl2ZV9iOworCXVuc2lnbmVkIGxvbmcJCWppZmZpZXNfYjsKKworCXUzMgkJCXBvcnQxOworCXU4CQkJY3RybDEsIGN0cmwyLCBpcnFfZW5hYmxlOworCXUxNgkJCWZyYW1lOworCisJLyogYXN5bmMgc2NoZWR1bGU6IGNvbnRyb2wsIGJ1bGsgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWFzeW5jOworCisJLyogcGVyaW9kaWMgc2NoZWR1bGU6IGludGVycnVwdCwgaXNvICovCisJdTE2CQkJbG9hZFtQRVJJT0RJQ19TSVpFXTsKKwlzdHJ1Y3Qgc2w4MTFoX2VwCSpwZXJpb2RpY1tQRVJJT0RJQ19TSVpFXTsKKwl1bnNpZ25lZAkJcGVyaW9kaWNfY291bnQ7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzbDgxMSAqaGNkX3RvX3NsODExKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJcmV0dXJuIChzdHJ1Y3Qgc2w4MTEgKikgKGhjZC0+aGNkX3ByaXYpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2JfaGNkICpzbDgxMV90b19oY2Qoc3RydWN0IHNsODExICpzbDgxMSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKCh2b2lkICopIHNsODExLCBzdHJ1Y3QgdXNiX2hjZCwgaGNkX3ByaXYpOworfQorCitzdHJ1Y3Qgc2w4MTFoX2VwIHsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmhlcDsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKKworCXU4CQkJZGVmY3RybDsKKwl1OAkJCW1heHBhY2tldDsKKwl1OAkJCWVwbnVtOworCXU4CQkJbmV4dHBpZDsKKworCXUxNgkJCWVycm9yX2NvdW50OworCXUxNgkJCW5ha19jb3VudDsKKwl1MTYJCQlsZW5ndGg7CQkvKiBvZiBjdXJyZW50IHBhY2tldCAqLworCisJLyogcGVyaW9kaWMgc2NoZWR1bGUgKi8KKwl1MTYJCQlwZXJpb2Q7CisJdTE2CQkJYnJhbmNoOworCXUxNgkJCWxvYWQ7CisJc3RydWN0IHNsODExaF9lcAkqbmV4dDsKKworCS8qIGFzeW5jIHNjaGVkdWxlICovCisJc3RydWN0IGxpc3RfaGVhZAlzY2hlZHVsZTsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFRoZXNlIHJlZ2lzdGVyIHV0aWxpdGllcyBzaG91bGQgd29yayBmb3IgdGhlIFNMODExUyByZWdpc3RlciBBUEkgdG9vCisgKiBOT1RFOiAgY2FsbGVyIG11c3QgaG9sZCBzbDgxMS0+bG9jay4KKyAqLworCitzdGF0aWMgaW5saW5lIHU4IHNsODExX3JlYWQoc3RydWN0IHNsODExICpzbDgxMSwgaW50IHJlZykKK3sKKwl3cml0ZWIocmVnLCBzbDgxMS0+YWRkcl9yZWcpOworCXJldHVybiByZWFkYihzbDgxMS0+ZGF0YV9yZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2w4MTFfd3JpdGUoc3RydWN0IHNsODExICpzbDgxMSwgaW50IHJlZywgdTggdmFsKQoreworCXdyaXRlYihyZWcsIHNsODExLT5hZGRyX3JlZyk7CisJd3JpdGViKHZhbCwgc2w4MTEtPmRhdGFfcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitzbDgxMV93cml0ZV9idWYoc3RydWN0IHNsODExICpzbDgxMSwgaW50IGFkZHIsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWNvbnN0IHU4CSpkYXRhOworCXZvaWQgX19pb21lbQkqZGF0YV9yZWc7CisKKwlpZiAoIWNvdW50KQorCQlyZXR1cm47CisJd3JpdGViKGFkZHIsIHNsODExLT5hZGRyX3JlZyk7CisKKwlkYXRhID0gYnVmOworCWRhdGFfcmVnID0gc2w4MTEtPmRhdGFfcmVnOworCWRvIHsKKwkJd3JpdGViKCpkYXRhKyssIGRhdGFfcmVnKTsKKwl9IHdoaWxlICgtLWNvdW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitzbDgxMV9yZWFkX2J1ZihzdHJ1Y3Qgc2w4MTEgKnNsODExLCBpbnQgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpCit7CisJdTggCQkqZGF0YTsKKwl2b2lkIF9faW9tZW0JKmRhdGFfcmVnOworCisJaWYgKCFjb3VudCkKKwkJcmV0dXJuOworCXdyaXRlYihhZGRyLCBzbDgxMS0+YWRkcl9yZWcpOworCisJZGF0YSA9IGJ1ZjsKKwlkYXRhX3JlZyA9IHNsODExLT5kYXRhX3JlZzsKKwlkbyB7CisJCSpkYXRhKysgPSByZWFkYihkYXRhX3JlZyk7CisJfSB3aGlsZSAoLS1jb3VudCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBEQkcoc3R1ZmYuLi4pCQlwcmludGsoS0VSTl9ERUJVRyAic2w4MTE6ICIgc3R1ZmYpCisjZWxzZQorI2RlZmluZSBEQkcoc3R1ZmYuLi4pCQlkb3t9d2hpbGUoMCkKKyNlbmRpZgorCisjaWZkZWYgVkVSQk9TRQorIyAgICBkZWZpbmUgVkRCRwkJREJHCisjZWxzZQorIyAgICBkZWZpbmUgVkRCRyhzdHVmZi4uLikJZG97fXdoaWxlKDApCisjZW5kaWYKKworI2lmZGVmIFBBQ0tFVF9UUkFDRQorIyAgICBkZWZpbmUgUEFDS0VUCQlWREJHCisjZWxzZQorIyAgICBkZWZpbmUgUEFDS0VUKHN0dWZmLi4uKQlkb3t9d2hpbGUoMCkKKyNlbmRpZgorCisjZGVmaW5lIEVSUihzdHVmZi4uLikJCXByaW50ayhLRVJOX0VSUiAic2w4MTE6ICIgc3R1ZmYpCisjZGVmaW5lIFdBUk4oc3R1ZmYuLi4pCQlwcmludGsoS0VSTl9XQVJOSU5HICJzbDgxMTogIiBzdHVmZikKKyNkZWZpbmUgSU5GTyhzdHVmZi4uLikJCXByaW50ayhLRVJOX0lORk8gInNsODExOiAiIHN0dWZmKQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktZGVidWcuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YzczYzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktZGVidWcuYwpAQCAtMCwwICsxLDU4NyBAQAorLyoKKyAqIFVIQ0ktc3BlY2lmaWMgZGVidWdnaW5nIGNvZGUuIEludmFsdWFibGUgd2hlbiBzb21ldGhpbmcKKyAqIGdvZXMgd3JvbmcsIGJ1dCBkb24ndCBnZXQgaW4gbXkgZmFjZS4KKyAqCisgKiBLZXJuZWwgdmlzaWJsZSBwb2ludGVycyBhcmUgc3Vycm91bmRlZCBpbiBbXSdzIGFuZCBidXMKKyAqIHZpc2libGUgcG9pbnRlcnMgYXJlIHN1cnJvdW5kZWQgaW4gKCkncworICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBMaW51cyBUb3J2YWxkcworICogKEMpIENvcHlyaWdodCAxOTk5LTIwMDEgSm9oYW5uZXMgRXJkZmVsdAorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgInVoY2ktaGNkLmgiCisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp1aGNpX2RlYnVnZnNfcm9vdCA9IE5VTEw7CisKKy8qIEhhbmRsZSBSRUFMTFkgbGFyZ2UgcHJpbnRrJ3Mgc28gd2UgZG9uJ3Qgb3ZlcmZsb3cgYnVmZmVycyAqLworc3RhdGljIGlubGluZSB2b2lkIGxwcmludGsoY2hhciAqYnVmKQoreworCWNoYXIgKnA7CisKKwkvKiBKdXN0IHdyaXRlIG9uZSBsaW5lIGF0IGEgdGltZSAqLworCXdoaWxlIChidWYpIHsKKwkJcCA9IHN0cmNocihidWYsICdcbicpOworCQlpZiAocCkKKwkJCSpwID0gMDsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzXG4iLCBidWYpOworCQlidWYgPSBwOworCQlpZiAoYnVmKQorCQkJYnVmKys7CisJfQorfQorCitzdGF0aWMgaW50IHVoY2lfc2hvd190ZChzdHJ1Y3QgdWhjaV90ZCAqdGQsIGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IHNwYWNlKQoreworCWNoYXIgKm91dCA9IGJ1ZjsKKwljaGFyICpzcGlkOworCXUzMiBzdGF0dXMsIHRva2VuOworCisJLyogVHJ5IHRvIG1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBtZW1vcnkgKi8KKwlpZiAobGVuIDwgMTYwKQorCQlyZXR1cm4gMDsKKworCXN0YXR1cyA9IHRkX3N0YXR1cyh0ZCk7CisJb3V0ICs9IHNwcmludGYob3V0LCAiJSpzWyVwXSBsaW5rICglMDh4KSAiLCBzcGFjZSwgIiIsIHRkLCBsZTMyX3RvX2NwdSh0ZC0+bGluaykpOworCW91dCArPSBzcHJpbnRmKG91dCwgImUlZCAlcyVzJXMlcyVzJXMlcyVzJXMlc0xlbmd0aD0leCAiLAorCQkoKHN0YXR1cyA+PiAyNykgJiAzKSwKKwkJKHN0YXR1cyAmIFREX0NUUkxfU1BEKSA/ICAgICAgIlNQRCAiIDogIiIsCisJCShzdGF0dXMgJiBURF9DVFJMX0xTKSA/ICAgICAgICJMUyAiIDogIiIsCisJCShzdGF0dXMgJiBURF9DVFJMX0lPQykgPyAgICAgICJJT0MgIiA6ICIiLAorCQkoc3RhdHVzICYgVERfQ1RSTF9BQ1RJVkUpID8gICAiQWN0aXZlICIgOiAiIiwKKwkJKHN0YXR1cyAmIFREX0NUUkxfU1RBTExFRCkgPyAgIlN0YWxsZWQgIiA6ICIiLAorCQkoc3RhdHVzICYgVERfQ1RSTF9EQlVGRVJSKSA/ICAiRGF0YUJ1ZkVyciAiIDogIiIsCisJCShzdGF0dXMgJiBURF9DVFJMX0JBQkJMRSkgPyAgICJCYWJibGUgIiA6ICIiLAorCQkoc3RhdHVzICYgVERfQ1RSTF9OQUspID8gICAgICAiTkFLICIgOiAiIiwKKwkJKHN0YXR1cyAmIFREX0NUUkxfQ1JDVElNRU8pID8gIkNSQy9UaW1lbyAiIDogIiIsCisJCShzdGF0dXMgJiBURF9DVFJMX0JJVFNUVUZGKSA/ICJCaXRTdHVmZiAiIDogIiIsCisJCXN0YXR1cyAmIDB4N2ZmKTsKKworCXRva2VuID0gdGRfdG9rZW4odGQpOworCXN3aXRjaCAodWhjaV9wYWNrZXRpZCh0b2tlbikpIHsKKwkJY2FzZSBVU0JfUElEX1NFVFVQOgorCQkJc3BpZCA9ICJTRVRVUCI7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUElEX09VVDoKKwkJCXNwaWQgPSAiT1VUIjsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QSURfSU46CisJCQlzcGlkID0gIklOIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc3BpZCA9ICI/IjsKKwkJCWJyZWFrOworCX0KKworCW91dCArPSBzcHJpbnRmKG91dCwgIk1heExlbj0leCBEVCVkIEVuZFB0PSV4IERldj0leCwgUElEPSV4KCVzKSAiLAorCQl0b2tlbiA+PiAyMSwKKwkJKCh0b2tlbiA+PiAxOSkgJiAxKSwKKwkJKHRva2VuID4+IDE1KSAmIDE1LAorCQkodG9rZW4gPj4gOCkgJiAxMjcsCisJCSh0b2tlbiAmIDB4ZmYpLAorCQlzcGlkKTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICIoYnVmPSUwOHgpXG4iLCBsZTMyX3RvX2NwdSh0ZC0+YnVmZmVyKSk7CisKKwlyZXR1cm4gb3V0IC0gYnVmOworfQorCitzdGF0aWMgaW50IHVoY2lfc2hvd19xaChzdHJ1Y3QgdWhjaV9xaCAqcWgsIGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IHNwYWNlKQoreworCWNoYXIgKm91dCA9IGJ1ZjsKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnA7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgKnRtcDsKKwlzdHJ1Y3QgdWhjaV90ZCAqdGQ7CisJaW50IGkgPSAwLCBjaGVja2VkID0gMCwgcHJldmFjdGl2ZSA9IDA7CisJX19sZTMyIGVsZW1lbnQgPSBxaF9lbGVtZW50KHFoKTsKKworCS8qIFRyeSB0byBtYWtlIHN1cmUgdGhlcmUncyBlbm91Z2ggbWVtb3J5ICovCisJaWYgKGxlbiA8IDgwICogNikKKwkJcmV0dXJuIDA7CisKKwlvdXQgKz0gc3ByaW50ZihvdXQsICIlKnNbJXBdIGxpbmsgKCUwOHgpIGVsZW1lbnQgKCUwOHgpXG4iLCBzcGFjZSwgIiIsCisJCQlxaCwgbGUzMl90b19jcHUocWgtPmxpbmspLCBsZTMyX3RvX2NwdShlbGVtZW50KSk7CisKKwlpZiAoZWxlbWVudCAmIFVIQ0lfUFRSX1FIKQorCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlKnMgIEVsZW1lbnQgcG9pbnRzIHRvIFFIIChidWc/KVxuIiwgc3BhY2UsICIiKTsKKworCWlmIChlbGVtZW50ICYgVUhDSV9QVFJfREVQVEgpCisJCW91dCArPSBzcHJpbnRmKG91dCwgIiUqcyAgRGVwdGggdHJhdmVyc2VcbiIsIHNwYWNlLCAiIik7CisKKwlpZiAoZWxlbWVudCAmIGNwdV90b19sZTMyKDgpKQorCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlKnMgIEJpdCAzIHNldCAoYnVnPylcbiIsIHNwYWNlLCAiIik7CisKKwlpZiAoIShlbGVtZW50ICYgfihVSENJX1BUUl9RSCB8IFVIQ0lfUFRSX0RFUFRIKSkpCisJCW91dCArPSBzcHJpbnRmKG91dCwgIiUqcyAgRWxlbWVudCBpcyBOVUxMIChidWc/KVxuIiwgc3BhY2UsICIiKTsKKworCWlmICghcWgtPnVyYnApIHsKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiJSpzICB1cmJwID09IE5VTExcbiIsIHNwYWNlLCAiIik7CisJCWdvdG8gb3V0OworCX0KKworCXVyYnAgPSBxaC0+dXJicDsKKworCWhlYWQgPSAmdXJicC0+dGRfbGlzdDsKKwl0bXAgPSBoZWFkLT5uZXh0OworCisJdGQgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHVoY2lfdGQsIGxpc3QpOworCisJaWYgKGNwdV90b19sZTMyKHRkLT5kbWFfaGFuZGxlKSAhPSAoZWxlbWVudCAmIH5VSENJX1BUUl9CSVRTKSkKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiJSpzIEVsZW1lbnQgIT0gRmlyc3QgVERcbiIsIHNwYWNlLCAiIik7CisKKwl3aGlsZSAodG1wICE9IGhlYWQpIHsKKwkJc3RydWN0IHVoY2lfdGQgKnRkID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB1aGNpX3RkLCBsaXN0KTsKKworCQl0bXAgPSB0bXAtPm5leHQ7CisKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiJSpzJWQ6ICIsIHNwYWNlICsgMiwgIiIsIGkrKyk7CisJCW91dCArPSB1aGNpX3Nob3dfdGQodGQsIG91dCwgbGVuIC0gKG91dCAtIGJ1ZiksIDApOworCisJCWlmIChpID4gMTAgJiYgIWNoZWNrZWQgJiYgcHJldmFjdGl2ZSAmJiB0bXAgIT0gaGVhZCAmJgorCQkgICAgZGVidWcgPD0gMikgeworCQkJc3RydWN0IGxpc3RfaGVhZCAqbnRtcCA9IHRtcDsKKwkJCXN0cnVjdCB1aGNpX3RkICpudGQgPSB0ZDsKKwkJCWludCBhY3RpdmUgPSAxLCBuaSA9IGk7CisKKwkJCWNoZWNrZWQgPSAxOworCisJCQl3aGlsZSAobnRtcCAhPSBoZWFkICYmIG50bXAtPm5leHQgIT0gaGVhZCAmJiBhY3RpdmUpIHsKKwkJCQludGQgPSBsaXN0X2VudHJ5KG50bXAsIHN0cnVjdCB1aGNpX3RkLCBsaXN0KTsKKworCQkJCW50bXAgPSBudG1wLT5uZXh0OworCisJCQkJYWN0aXZlID0gdGRfc3RhdHVzKG50ZCkgJiBURF9DVFJMX0FDVElWRTsKKworCQkJCW5pKys7CisJCQl9CisKKwkJCWlmIChhY3RpdmUgJiYgbmkgPiBpKSB7CisJCQkJb3V0ICs9IHNwcmludGYob3V0LCAiJSpzW3NraXBwZWQgJWQgYWN0aXZlIFREJ3NdXG4iLCBzcGFjZSwgIiIsIG5pIC0gaSk7CisJCQkJdG1wID0gbnRtcDsKKwkJCQl0ZCA9IG50ZDsKKwkJCQlpID0gbmk7CisJCQl9CisJCX0KKworCQlwcmV2YWN0aXZlID0gdGRfc3RhdHVzKHRkKSAmIFREX0NUUkxfQUNUSVZFOworCX0KKworCWlmIChsaXN0X2VtcHR5KCZ1cmJwLT5xdWV1ZV9saXN0KSB8fCB1cmJwLT5xdWV1ZWQpCisJCWdvdG8gb3V0OworCisJb3V0ICs9IHNwcmludGYob3V0LCAiJSpzUXVldWVkIFFIJ3M6XG4iLCAtc3BhY2UsICItLSIpOworCisJaGVhZCA9ICZ1cmJwLT5xdWV1ZV9saXN0OworCXRtcCA9IGhlYWQtPm5leHQ7CisKKwl3aGlsZSAodG1wICE9IGhlYWQpIHsKKwkJc3RydWN0IHVyYl9wcml2ICpudXJicCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgdXJiX3ByaXYsCisJCQkJCQlxdWV1ZV9saXN0KTsKKwkJdG1wID0gdG1wLT5uZXh0OworCisJCW91dCArPSB1aGNpX3Nob3dfcWgobnVyYnAtPnFoLCBvdXQsIGxlbiAtIChvdXQgLSBidWYpLCBzcGFjZSk7CisJfQorCitvdXQ6CisJcmV0dXJuIG91dCAtIGJ1ZjsKK30KKworI2RlZmluZSBzaG93X2ZyYW1lX251bSgpCVwKKwlpZiAoIXNob3duKSB7CQlcCisJICBzaG93biA9IDE7CQlcCisJICBvdXQgKz0gc3ByaW50ZihvdXQsICItIEZyYW1lICVkXG4iLCBpKTsgXAorCX0KKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCitzdGF0aWMgY29uc3QgY2hhciAqcWhfbmFtZXNbXSA9IHsKKyAgInNrZWxfaW50MTI4X3FoIiwgInNrZWxfaW50NjRfcWgiLAorICAic2tlbF9pbnQzMl9xaCIsICJza2VsX2ludDE2X3FoIiwKKyAgInNrZWxfaW50OF9xaCIsICJza2VsX2ludDRfcWgiLAorICAic2tlbF9pbnQyX3FoIiwgInNrZWxfaW50MV9xaCIsCisgICJza2VsX2xzX2NvbnRyb2xfcWgiLCAic2tlbF9mc19jb250cm9sX3FoIiwKKyAgInNrZWxfYnVsa19xaCIsICJza2VsX3Rlcm1fcWgiCit9OworCisjZGVmaW5lIHNob3dfcWhfbmFtZSgpCQlcCisJaWYgKCFzaG93bikgewkJXAorCSAgc2hvd24gPSAxOwkJXAorCSAgb3V0ICs9IHNwcmludGYob3V0LCAiLSAlc1xuIiwgcWhfbmFtZXNbaV0pOyBcCisJfQorCitzdGF0aWMgaW50IHVoY2lfc2hvd19zYyhpbnQgcG9ydCwgdW5zaWduZWQgc2hvcnQgc3RhdHVzLCBjaGFyICpidWYsIGludCBsZW4pCit7CisJY2hhciAqb3V0ID0gYnVmOworCisJLyogVHJ5IHRvIG1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBtZW1vcnkgKi8KKwlpZiAobGVuIDwgMTYwKQorCQlyZXR1cm4gMDsKKworCW91dCArPSBzcHJpbnRmKG91dCwgIiAgc3RhdCVkICAgICA9ICAgICAlMDR4ICAlcyVzJXMlcyVzJXMlcyVzJXMlc1xuIiwKKwkJcG9ydCwKKwkJc3RhdHVzLAorCQkoc3RhdHVzICYgVVNCUE9SVFNDX1NVU1ApID8JIiBTdXNwZW5kIiA6ICIiLAorCQkoc3RhdHVzICYgVVNCUE9SVFNDX09DQykgPwkiIE92ZXJDdXJyZW50Q2hhbmdlIiA6ICIiLAorCQkoc3RhdHVzICYgVVNCUE9SVFNDX09DKSA/CSIgT3ZlckN1cnJlbnQiIDogIiIsCisJCShzdGF0dXMgJiBVU0JQT1JUU0NfUFIpID8JIiBSZXNldCIgOiAiIiwKKwkJKHN0YXR1cyAmIFVTQlBPUlRTQ19MU0RBKSA/CSIgTG93U3BlZWQiIDogIiIsCisJCShzdGF0dXMgJiBVU0JQT1JUU0NfUkQpID8JIiBSZXN1bWVEZXRlY3QiIDogIiIsCisJCShzdGF0dXMgJiBVU0JQT1JUU0NfUEVDKSA/CSIgRW5hYmxlQ2hhbmdlIiA6ICIiLAorCQkoc3RhdHVzICYgVVNCUE9SVFNDX1BFKSA/CSIgRW5hYmxlZCIgOiAiIiwKKwkJKHN0YXR1cyAmIFVTQlBPUlRTQ19DU0MpID8JIiBDb25uZWN0Q2hhbmdlIiA6ICIiLAorCQkoc3RhdHVzICYgVVNCUE9SVFNDX0NDUykgPwkiIENvbm5lY3RlZCIgOiAiIik7CisKKwlyZXR1cm4gb3V0IC0gYnVmOworfQorCitzdGF0aWMgaW50IHVoY2lfc2hvd19zdGF0dXMoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBjaGFyICpidWYsIGludCBsZW4pCit7CisJY2hhciAqb3V0ID0gYnVmOworCXVuc2lnbmVkIGxvbmcgaW9fYWRkciA9IHVoY2ktPmlvX2FkZHI7CisJdW5zaWduZWQgc2hvcnQgdXNiY21kLCB1c2JzdGF0LCB1c2JpbnQsIHVzYmZybnVtOworCXVuc2lnbmVkIGludCBmbGJhc2VhZGQ7CisJdW5zaWduZWQgY2hhciBzb2Y7CisJdW5zaWduZWQgc2hvcnQgcG9ydHNjMSwgcG9ydHNjMjsKKworCS8qIFRyeSB0byBtYWtlIHN1cmUgdGhlcmUncyBlbm91Z2ggbWVtb3J5ICovCisJaWYgKGxlbiA8IDgwICogNikKKwkJcmV0dXJuIDA7CisKKwl1c2JjbWQgICAgPSBpbncoaW9fYWRkciArIDApOworCXVzYnN0YXQgICA9IGludyhpb19hZGRyICsgMik7CisJdXNiaW50ICAgID0gaW53KGlvX2FkZHIgKyA0KTsKKwl1c2Jmcm51bSAgPSBpbncoaW9fYWRkciArIDYpOworCWZsYmFzZWFkZCA9IGlubChpb19hZGRyICsgOCk7CisJc29mICAgICAgID0gaW5iKGlvX2FkZHIgKyAxMik7CisJcG9ydHNjMSAgID0gaW53KGlvX2FkZHIgKyAxNik7CisJcG9ydHNjMiAgID0gaW53KGlvX2FkZHIgKyAxOCk7CisKKwlvdXQgKz0gc3ByaW50ZihvdXQsICIgIHVzYmNtZCAgICA9ICAgICAlMDR4ICAgJXMlcyVzJXMlcyVzJXMlc1xuIiwKKwkJdXNiY21kLAorCQkodXNiY21kICYgVVNCQ01EX01BWFApID8gICAgIk1heHA2NCAiIDogIk1heHAzMiAiLAorCQkodXNiY21kICYgVVNCQ01EX0NGKSA/ICAgICAgIkNGICIgOiAiIiwKKwkJKHVzYmNtZCAmIFVTQkNNRF9TV0RCRykgPyAgICJTV0RCRyAiIDogIiIsCisJCSh1c2JjbWQgJiBVU0JDTURfRkdSKSA/ICAgICAiRkdSICIgOiAiIiwKKwkJKHVzYmNtZCAmIFVTQkNNRF9FR1NNKSA/ICAgICJFR1NNICIgOiAiIiwKKwkJKHVzYmNtZCAmIFVTQkNNRF9HUkVTRVQpID8gICJHUkVTRVQgIiA6ICIiLAorCQkodXNiY21kICYgVVNCQ01EX0hDUkVTRVQpID8gIkhDUkVTRVQgIiA6ICIiLAorCQkodXNiY21kICYgVVNCQ01EX1JTKSA/ICAgICAgIlJTICIgOiAiIik7CisKKwlvdXQgKz0gc3ByaW50ZihvdXQsICIgIHVzYnN0YXQgICA9ICAgICAlMDR4ICAgJXMlcyVzJXMlcyVzXG4iLAorCQl1c2JzdGF0LAorCQkodXNic3RhdCAmIFVTQlNUU19IQ0gpID8gICAgIkhDSGFsdGVkICIgOiAiIiwKKwkJKHVzYnN0YXQgJiBVU0JTVFNfSENQRSkgPyAgICJIb3N0Q29udHJvbGxlclByb2Nlc3NFcnJvciAiIDogIiIsCisJCSh1c2JzdGF0ICYgVVNCU1RTX0hTRSkgPyAgICAiSG9zdFN5c3RlbUVycm9yICIgOiAiIiwKKwkJKHVzYnN0YXQgJiBVU0JTVFNfUkQpID8gICAgICJSZXN1bWVEZXRlY3QgIiA6ICIiLAorCQkodXNic3RhdCAmIFVTQlNUU19FUlJPUikgPyAgIlVTQkVycm9yICIgOiAiIiwKKwkJKHVzYnN0YXQgJiBVU0JTVFNfVVNCSU5UKSA/ICJVU0JJTlQgIiA6ICIiKTsKKworCW91dCArPSBzcHJpbnRmKG91dCwgIiAgdXNiaW50ICAgID0gICAgICUwNHhcbiIsIHVzYmludCk7CisJb3V0ICs9IHNwcmludGYob3V0LCAiICB1c2Jmcm51bSAgPSAgICglZCklMDN4XG4iLCAodXNiZnJudW0gPj4gMTApICYgMSwKKwkJMHhmZmYgJiAoNCoodW5zaWduZWQgaW50KXVzYmZybnVtKSk7CisJb3V0ICs9IHNwcmludGYob3V0LCAiICBmbGJhc2VhZGQgPSAlMDh4XG4iLCBmbGJhc2VhZGQpOworCW91dCArPSBzcHJpbnRmKG91dCwgIiAgc29mICAgICAgID0gICAgICAgJTAyeFxuIiwgc29mKTsKKwlvdXQgKz0gdWhjaV9zaG93X3NjKDEsIHBvcnRzYzEsIG91dCwgbGVuIC0gKG91dCAtIGJ1ZikpOworCW91dCArPSB1aGNpX3Nob3dfc2MoMiwgcG9ydHNjMiwgb3V0LCBsZW4gLSAob3V0IC0gYnVmKSk7CisKKwlyZXR1cm4gb3V0IC0gYnVmOworfQorCitzdGF0aWMgaW50IHVoY2lfc2hvd191cmJwKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYl9wcml2ICp1cmJwLCBjaGFyICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCWNoYXIgKm91dCA9IGJ1ZjsKKwlpbnQgY291bnQgPSAwOworCisJaWYgKGxlbiA8IDIwMCkKKwkJcmV0dXJuIDA7CisKKwlvdXQgKz0gc3ByaW50ZihvdXQsICJ1cmJfcHJpdiBbJXBdICIsIHVyYnApOworCW91dCArPSBzcHJpbnRmKG91dCwgInVyYiBbJXBdICIsIHVyYnAtPnVyYik7CisJb3V0ICs9IHNwcmludGYob3V0LCAicWggWyVwXSAiLCB1cmJwLT5xaCk7CisJb3V0ICs9IHNwcmludGYob3V0LCAiRGV2PSVkICIsIHVzYl9waXBlZGV2aWNlKHVyYnAtPnVyYi0+cGlwZSkpOworCW91dCArPSBzcHJpbnRmKG91dCwgIkVQPSV4KCVzKSAiLCB1c2JfcGlwZWVuZHBvaW50KHVyYnAtPnVyYi0+cGlwZSksICh1c2JfcGlwZWluKHVyYnAtPnVyYi0+cGlwZSkgPyAiSU4iIDogIk9VVCIpKTsKKworCXN3aXRjaCAodXNiX3BpcGV0eXBlKHVyYnAtPnVyYi0+cGlwZSkpIHsKKwljYXNlIFBJUEVfSVNPQ0hST05PVVM6IG91dCArPSBzcHJpbnRmKG91dCwgIklTTyAiKTsgYnJlYWs7CisJY2FzZSBQSVBFX0lOVEVSUlVQVDogb3V0ICs9IHNwcmludGYob3V0LCAiSU5UICIpOyBicmVhazsKKwljYXNlIFBJUEVfQlVMSzogb3V0ICs9IHNwcmludGYob3V0LCAiQkxLICIpOyBicmVhazsKKwljYXNlIFBJUEVfQ09OVFJPTDogb3V0ICs9IHNwcmludGYob3V0LCAiQ1RMICIpOyBicmVhazsKKwl9CisKKwlvdXQgKz0gc3ByaW50ZihvdXQsICIlcyIsICh1cmJwLT5mc2JyID8gIkZTQlIgIiA6ICIiKSk7CisJb3V0ICs9IHNwcmludGYob3V0LCAiJXMiLCAodXJicC0+ZnNicl90aW1lb3V0ID8gIkZTQlJfVE8gIiA6ICIiKSk7CisKKwlpZiAodXJicC0+dXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKQorCQlvdXQgKz0gc3ByaW50ZihvdXQsICJTdGF0dXM9JWQgIiwgdXJicC0+dXJiLT5zdGF0dXMpOworCS8vb3V0ICs9IHNwcmludGYob3V0LCAiSW5zZXJ0dGltZT0lbHggIix1cmJwLT5pbnNlcnR0aW1lKTsKKwkvL291dCArPSBzcHJpbnRmKG91dCwgIkZTQlJ0aW1lPSVseCAiLHVyYnAtPmZzYnJ0aW1lKTsKKworCWNvdW50ID0gMDsKKwlsaXN0X2Zvcl9lYWNoKHRtcCwgJnVyYnAtPnRkX2xpc3QpCisJCWNvdW50Kys7CisJb3V0ICs9IHNwcmludGYob3V0LCAiVERzPSVkICIsY291bnQpOworCisJaWYgKHVyYnAtPnF1ZXVlZCkKKwkJb3V0ICs9IHNwcmludGYob3V0LCAicXVldWVkXG4iKTsKKwllbHNlIHsKKwkJY291bnQgPSAwOworCQlsaXN0X2Zvcl9lYWNoKHRtcCwgJnVyYnAtPnF1ZXVlX2xpc3QpCisJCQljb3VudCsrOworCQlvdXQgKz0gc3ByaW50ZihvdXQsICJxdWV1ZWQgVVJCcz0lZFxuIiwgY291bnQpOworCX0KKworCXJldHVybiBvdXQgLSBidWY7Cit9CisKK3N0YXRpYyBpbnQgdWhjaV9zaG93X2xpc3RzKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWNoYXIgKm91dCA9IGJ1ZjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCAqdG1wOworCWludCBjb3VudDsKKworCW91dCArPSBzcHJpbnRmKG91dCwgIk1haW4gbGlzdCBVUkJzOiIpOworCWlmIChsaXN0X2VtcHR5KCZ1aGNpLT51cmJfbGlzdCkpCisJCW91dCArPSBzcHJpbnRmKG91dCwgIiBFbXB0eVxuIik7CisJZWxzZSB7CisJCW91dCArPSBzcHJpbnRmKG91dCwgIlxuIik7CisJCWNvdW50ID0gMDsKKwkJaGVhZCA9ICZ1aGNpLT51cmJfbGlzdDsKKwkJdG1wID0gaGVhZC0+bmV4dDsKKwkJd2hpbGUgKHRtcCAhPSBoZWFkKSB7CisJCQlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHVyYl9wcml2LCB1cmJfbGlzdCk7CisKKwkJCW91dCArPSBzcHJpbnRmKG91dCwgIiAgJWQ6ICIsICsrY291bnQpOworCQkJb3V0ICs9IHVoY2lfc2hvd191cmJwKHVoY2ksIHVyYnAsIG91dCwgbGVuIC0gKG91dCAtIGJ1ZikpOworCQkJdG1wID0gdG1wLT5uZXh0OworCQl9CisJfQorCisJb3V0ICs9IHNwcmludGYob3V0LCAiUmVtb3ZlIGxpc3QgVVJCczoiKTsKKwlpZiAobGlzdF9lbXB0eSgmdWhjaS0+dXJiX3JlbW92ZV9saXN0KSkKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiIEVtcHR5XG4iKTsKKwllbHNlIHsKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiXG4iKTsKKwkJY291bnQgPSAwOworCQloZWFkID0gJnVoY2ktPnVyYl9yZW1vdmVfbGlzdDsKKwkJdG1wID0gaGVhZC0+bmV4dDsKKwkJd2hpbGUgKHRtcCAhPSBoZWFkKSB7CisJCQlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHVyYl9wcml2LCB1cmJfbGlzdCk7CisKKwkJCW91dCArPSBzcHJpbnRmKG91dCwgIiAgJWQ6ICIsICsrY291bnQpOworCQkJb3V0ICs9IHVoY2lfc2hvd191cmJwKHVoY2ksIHVyYnAsIG91dCwgbGVuIC0gKG91dCAtIGJ1ZikpOworCQkJdG1wID0gdG1wLT5uZXh0OworCQl9CisJfQorCisJb3V0ICs9IHNwcmludGYob3V0LCAiQ29tcGxldGUgbGlzdCBVUkJzOiIpOworCWlmIChsaXN0X2VtcHR5KCZ1aGNpLT5jb21wbGV0ZV9saXN0KSkKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiIEVtcHR5XG4iKTsKKwllbHNlIHsKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiXG4iKTsKKwkJY291bnQgPSAwOworCQloZWFkID0gJnVoY2ktPmNvbXBsZXRlX2xpc3Q7CisJCXRtcCA9IGhlYWQtPm5leHQ7CisJCXdoaWxlICh0bXAgIT0gaGVhZCkgeworCQkJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB1cmJfcHJpdiwgdXJiX2xpc3QpOworCisJCQlvdXQgKz0gc3ByaW50ZihvdXQsICIgICVkOiAiLCArK2NvdW50KTsKKwkJCW91dCArPSB1aGNpX3Nob3dfdXJicCh1aGNpLCB1cmJwLCBvdXQsIGxlbiAtIChvdXQgLSBidWYpKTsKKwkJCXRtcCA9IHRtcC0+bmV4dDsKKwkJfQorCX0KKworCXJldHVybiBvdXQgLSBidWY7Cit9CisKK3N0YXRpYyBpbnQgdWhjaV9zcHJpbnRfc2NoZWR1bGUoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBjaGFyICpidWYsIGludCBsZW4pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljaGFyICpvdXQgPSBidWY7CisJaW50IGksIGo7CisJc3RydWN0IHVoY2lfcWggKnFoOworCXN0cnVjdCB1aGNpX3RkICp0ZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXAsICpoZWFkOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVoY2ktPmxvY2ssIGZsYWdzKTsKKworCW91dCArPSBzcHJpbnRmKG91dCwgIkhDIHN0YXR1c1xuIik7CisJb3V0ICs9IHVoY2lfc2hvd19zdGF0dXModWhjaSwgb3V0LCBsZW4gLSAob3V0IC0gYnVmKSk7CisKKwlvdXQgKz0gc3ByaW50ZihvdXQsICJGcmFtZSBMaXN0XG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgVUhDSV9OVU1GUkFNRVM7ICsraSkgeworCQlpbnQgc2hvd24gPSAwOworCQl0ZCA9IHVoY2ktPmZsLT5mcmFtZV9jcHVbaV07CisJCWlmICghdGQpCisJCQljb250aW51ZTsKKworCQlpZiAodGQtPmRtYV9oYW5kbGUgIT0gKGRtYV9hZGRyX3QpdWhjaS0+ZmwtPmZyYW1lW2ldKSB7CisJCQlzaG93X2ZyYW1lX251bSgpOworCQkJb3V0ICs9IHNwcmludGYob3V0LCAiICAgIGZyYW1lIGxpc3QgZG9lcyBub3QgbWF0Y2ggdGQtPmRtYV9oYW5kbGUhXG4iKTsKKwkJfQorCQlzaG93X2ZyYW1lX251bSgpOworCisJCWhlYWQgPSAmdGQtPmZsX2xpc3Q7CisJCXRtcCA9IGhlYWQ7CisJCWRvIHsKKwkJCXRkID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB1aGNpX3RkLCBmbF9saXN0KTsKKwkJCXRtcCA9IHRtcC0+bmV4dDsKKwkJCW91dCArPSB1aGNpX3Nob3dfdGQodGQsIG91dCwgbGVuIC0gKG91dCAtIGJ1ZiksIDQpOworCQl9IHdoaWxlICh0bXAgIT0gaGVhZCk7CisJfQorCisJb3V0ICs9IHNwcmludGYob3V0LCAiU2tlbGV0b24gUUgnc1xuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgVUhDSV9OVU1fU0tFTFFIOyArK2kpIHsKKwkJaW50IHNob3duID0gMDsKKworCQlxaCA9IHVoY2ktPnNrZWxxaFtpXTsKKworCQlpZiAoZGVidWcgPiAxKSB7CisJCQlzaG93X3FoX25hbWUoKTsKKwkJCW91dCArPSB1aGNpX3Nob3dfcWgocWgsIG91dCwgbGVuIC0gKG91dCAtIGJ1ZiksIDQpOworCQl9CisKKwkJLyogTGFzdCBRSCBpcyB0aGUgVGVybWluYXRpbmcgUUgsIGl0J3MgZGlmZmVyZW50ICovCisJCWlmIChpID09IFVIQ0lfTlVNX1NLRUxRSCAtIDEpIHsKKwkJCWlmIChxaC0+bGluayAhPSBVSENJX1BUUl9URVJNKQorCQkJCW91dCArPSBzcHJpbnRmKG91dCwgIiAgICBiYW5kd2lkdGggcmVjbGFtYXRpb24gb24hXG4iKTsKKworCQkJaWYgKHFoX2VsZW1lbnQocWgpICE9IGNwdV90b19sZTMyKHVoY2ktPnRlcm1fdGQtPmRtYV9oYW5kbGUpKQorCQkJCW91dCArPSBzcHJpbnRmKG91dCwgIiAgICBza2VsX3Rlcm1fcWggZWxlbWVudCBpcyBub3Qgc2V0IHRvIHRlcm1fdGQhXG4iKTsKKworCQkJY29udGludWU7CisJCX0KKworCQlqID0gKGkgPCA3KSA/IDcgOiBpKzE7CQkvKiBOZXh0IHNrZWxldG9uICovCisJCWlmIChsaXN0X2VtcHR5KCZxaC0+bGlzdCkpIHsKKwkJCWlmIChpIDwgVUhDSV9OVU1fU0tFTFFIIC0gMSkgeworCQkJCWlmIChxaC0+bGluayAhPQorCQkJCSAgICAoY3B1X3RvX2xlMzIodWhjaS0+c2tlbHFoW2pdLT5kbWFfaGFuZGxlKSB8IFVIQ0lfUFRSX1FIKSkgeworCQkJCQlzaG93X3FoX25hbWUoKTsKKwkJCQkJb3V0ICs9IHNwcmludGYob3V0LCAiICAgIHNrZWxldG9uIFFIIG5vdCBsaW5rZWQgdG8gbmV4dCBza2VsZXRvbiBRSCFcbiIpOworCQkJCX0KKwkJCX0KKworCQkJY29udGludWU7CisJCX0KKworCQlzaG93X3FoX25hbWUoKTsKKworCQloZWFkID0gJnFoLT5saXN0OworCQl0bXAgPSBoZWFkLT5uZXh0OworCisJCXdoaWxlICh0bXAgIT0gaGVhZCkgeworCQkJcWggPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHVoY2lfcWgsIGxpc3QpOworCisJCQl0bXAgPSB0bXAtPm5leHQ7CisKKwkJCW91dCArPSB1aGNpX3Nob3dfcWgocWgsIG91dCwgbGVuIC0gKG91dCAtIGJ1ZiksIDQpOworCQl9CisKKwkJaWYgKGkgPCBVSENJX05VTV9TS0VMUUggLSAxKSB7CisJCQlpZiAocWgtPmxpbmsgIT0KKwkJCSAgICAoY3B1X3RvX2xlMzIodWhjaS0+c2tlbHFoW2pdLT5kbWFfaGFuZGxlKSB8IFVIQ0lfUFRSX1FIKSkKKwkJCQlvdXQgKz0gc3ByaW50ZihvdXQsICIgICAgbGFzdCBRSCBub3QgbGlua2VkIHRvIG5leHQgc2tlbGV0b24hXG4iKTsKKwkJfQorCX0KKworCWlmIChkZWJ1ZyA+IDIpCisJCW91dCArPSB1aGNpX3Nob3dfbGlzdHModWhjaSwgb3V0LCBsZW4gLSAob3V0IC0gYnVmKSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1aGNpLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gb3V0IC0gYnVmOworfQorCisjZGVmaW5lIE1BWF9PVVRQVVQJKDY0ICogMTAyNCkKKworc3RydWN0IHVoY2lfZGVidWcgeworCWludCBzaXplOworCWNoYXIgKmRhdGE7CisJc3RydWN0IHVoY2lfaGNkICp1aGNpOworfTsKKworc3RhdGljIGludCB1aGNpX2RlYnVnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVoY2lfaGNkICp1aGNpID0gaW5vZGUtPnUuZ2VuZXJpY19pcDsKKwlzdHJ1Y3QgdWhjaV9kZWJ1ZyAqdXA7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwlsb2NrX2tlcm5lbCgpOworCXVwID0ga21hbGxvYyhzaXplb2YoKnVwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1cCkKKwkJZ290byBvdXQ7CisKKwl1cC0+ZGF0YSA9IGttYWxsb2MoTUFYX09VVFBVVCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1cC0+ZGF0YSkgeworCQlrZnJlZSh1cCk7CisJCWdvdG8gb3V0OworCX0KKworCXVwLT5zaXplID0gdWhjaV9zcHJpbnRfc2NoZWR1bGUodWhjaSwgdXAtPmRhdGEsIE1BWF9PVVRQVVQpOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gdXA7CisKKwlyZXQgPSAwOworb3V0OgorCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgbG9mZl90IHVoY2lfZGVidWdfbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmYsIGludCB3aGVuY2UpCit7CisJc3RydWN0IHVoY2lfZGVidWcgKnVwOworCWxvZmZfdCBuZXcgPSAtMTsKKworCWxvY2tfa2VybmVsKCk7CisJdXAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKHdoZW5jZSkgeworCWNhc2UgMDoKKwkJbmV3ID0gb2ZmOworCQlicmVhazsKKwljYXNlIDE6CisJCW5ldyA9IGZpbGUtPmZfcG9zICsgb2ZmOworCQlicmVhazsKKwl9CisJaWYgKG5ldyA8IDAgfHwgbmV3ID4gdXAtPnNpemUpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiAoZmlsZS0+Zl9wb3MgPSBuZXcpOworfQorCitzdGF0aWMgc3NpemVfdCB1aGNpX2RlYnVnX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB1aGNpX2RlYnVnICp1cCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBuYnl0ZXMsIHBwb3MsIHVwLT5kYXRhLCB1cC0+c2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgdWhjaV9kZWJ1Z19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1aGNpX2RlYnVnICp1cCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWtmcmVlKHVwLT5kYXRhKTsKKwlrZnJlZSh1cCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWhjaV9kZWJ1Z19vcGVyYXRpb25zID0geworCS5vcGVuID0JCXVoY2lfZGVidWdfb3BlbiwKKwkubGxzZWVrID0JdWhjaV9kZWJ1Z19sc2VlaywKKwkucmVhZCA9CQl1aGNpX2RlYnVnX3JlYWQsCisJLnJlbGVhc2UgPQl1aGNpX2RlYnVnX3JlbGVhc2UsCit9OworCisjZWxzZQkvKiBDT05GSUdfREVCVUdfRlMgKi8KKworI2RlZmluZSB1aGNpX2RlYnVnX29wZXJhdGlvbnMgKCogKHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKikgTlVMTCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI0YTFhOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYwpAQCAtMCwwICsxLDkxOSBAQAorLyoKKyAqIFVuaXZlcnNhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGRyaXZlciBmb3IgVVNCLgorICoKKyAqIE1haW50YWluZXI6IEFsYW4gU3Rlcm4gPHN0ZXJuQHJvd2xhbmQuaGFydmFyZC5lZHU+CisgKgorICogKEMpIENvcHlyaWdodCAxOTk5IExpbnVzIFRvcnZhbGRzCisgKiAoQykgQ29weXJpZ2h0IDE5OTktMjAwMiBKb2hhbm5lcyBFcmRmZWx0LCBqb2hhbm5lc0BlcmRmZWx0LmNvbQorICogKEMpIENvcHlyaWdodCAxOTk5IFJhbmR5IER1bmxhcAorICogKEMpIENvcHlyaWdodCAxOTk5IEdlb3JnIEFjaGVyLCBhY2hlckBpbi50dW0uZGUKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBEZXRpIEZsaWVnbCwgZGV0aUBmbGllZ2wuZGUKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBUaG9tYXMgU2FpbGVyLCBzYWlsZXJAaWZlLmVlLmV0aHouY2gKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIsIHdlaXNzZ0B2aWVubmEuYXQKKyAqIChDKSBDb3B5cmlnaHQgMjAwMCBZZ2dkcmFzaWwgQ29tcHV0aW5nLCBJbmMuIChwb3J0IG9mIG5ldyBQQ0kgaW50ZXJmYWNlCisgKiAgICAgICAgICAgICAgIHN1cHBvcnQgZnJvbSB1c2Itb2hjaS5jIGJ5IEFkYW0gUmljaHRlciwgYWRhbUB5Z2dkcmFzaWwuY29tKS4KKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBHcmVnb3J5IFAuIFNtaXRoIChmcm9tIHVzYi1vaGNpLmMpCisgKiAoQykgQ29weXJpZ2h0IDIwMDQgQWxhbiBTdGVybiwgc3Rlcm5Acm93bGFuZC5oYXJ2YXJkLmVkdQorICoKKyAqIEludGVsIGRvY3VtZW50cyB0aGlzIGZhaXJseSB3ZWxsLCBhbmQgYXMgZmFyIGFzIEkga25vdyB0aGVyZQorICogYXJlIG5vIHJveWFsdGllcyBvciBhbnl0aGluZyBsaWtlIHRoYXQsIGJ1dCBldmVuIHNvIHRoZXJlIGFyZQorICogcGVvcGxlIHdobyBkZWNpZGVkIHRoYXQgdGhleSB3YW50IHRvIGRvIHRoZSBzYW1lIHRoaW5nIGluIGEKKyAqIGNvbXBsZXRlbHkgZGlmZmVyZW50IHdheS4KKyAqCisgKiBXQVJOSU5HISBUaGUgVVNCIGRvY3VtZW50YXRpb24gaXMgZG93bnJpZ2h0IGV2aWwuIE1vc3Qgb2YgaXQKKyAqIGlzIGp1c3QgY3JhcCwgd3JpdHRlbiBieSBhIGNvbW1pdHRlZS4gWW91J3JlIGJldHRlciBvZmYgaWdub3JpbmcKKyAqIG1vc3Qgb2YgaXQsIHRoZSBpbXBvcnRhbnQgc3R1ZmYgaXM6CisgKiAgLSB0aGUgbG93LWxldmVsIHByb3RvY29sIChmYWlybHkgc2ltcGxlIGJ1dCBsb3RzIG9mIHNtYWxsIGRldGFpbHMpCisgKiAgLSB3b3JraW5nIGFyb3VuZCB0aGUgaG9ycmlkbmVzcyBvZiB0aGUgcmVzdAorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCisjZGVmaW5lIERFQlVHCisjZWxzZQorI3VuZGVmIERFQlVHCisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2luY2x1ZGUgIi4uL2NvcmUvaGNkLmgiCisjaW5jbHVkZSAidWhjaS1oY2QuaCIKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjIuMiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiTGludXMgJ0Zyb2RvIFJhYmJpdCcgVG9ydmFsZHMsIEpvaGFubmVzIEVyZGZlbHQsIFwKK1JhbmR5IER1bmxhcCwgR2VvcmcgQWNoZXIsIERldGkgRmxpZWdsLCBUaG9tYXMgU2FpbGVyLCBSb21hbiBXZWlzc2dhZXJiZXIsIFwKK0FsYW4gU3Rlcm4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgVW5pdmVyc2FsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgZHJpdmVyIgorCisvKgorICogZGVidWcgPSAwLCBubyBkZWJ1Z2dpbmcgbWVzc2FnZXMKKyAqIGRlYnVnID0gMSwgZHVtcCBmYWlsZWQgVVJCJ3MgZXhjZXB0IGZvciBzdGFsbHMKKyAqIGRlYnVnID0gMiwgZHVtcCBhbGwgZmFpbGVkIFVSQidzIChpbmNsdWRpbmcgc3RhbGxzKQorICogICAgICAgICAgICBzaG93IGFsbCBxdWV1ZXMgaW4gL2RlYnVnL3VoY2kvW3BjaV9hZGRyXQorICogZGVidWcgPSAzLCBzaG93IGFsbCBURCdzIGluIFVSQidzIHdoZW4gZHVtcGluZworICovCisjaWZkZWYgREVCVUcKK3N0YXRpYyBpbnQgZGVidWcgPSAxOworI2Vsc2UKK3N0YXRpYyBpbnQgZGVidWcgPSAwOworI2VuZGlmCittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsIik7CitzdGF0aWMgY2hhciAqZXJyYnVmOworI2RlZmluZSBFUlJCVUZfTEVOICAgICgzMiAqIDEwMjQpCisKK3N0YXRpYyBrbWVtX2NhY2hlX3QgKnVoY2lfdXBfY2FjaGVwOwkvKiB1cmJfcHJpdiAqLworCitzdGF0aWMgdm9pZCB1aGNpX2dldF9jdXJyZW50X2ZyYW1lX251bWJlcihzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpOworc3RhdGljIHZvaWQgaGNfc3RhdGVfdHJhbnNpdGlvbnMoc3RydWN0IHVoY2lfaGNkICp1aGNpKTsKKworLyogSWYgYSB0cmFuc2ZlciBpcyBzdGlsbCBhY3RpdmUgYWZ0ZXIgdGhpcyBtdWNoIHRpbWUsIHR1cm4gb2ZmIEZTQlIgKi8KKyNkZWZpbmUgSURMRV9USU1FT1VUCW1zZWNzX3RvX2ppZmZpZXMoNTApCisjZGVmaW5lIEZTQlJfREVMQVkJbXNlY3NfdG9famlmZmllcyg1MCkKKworLyogV2hlbiB3ZSB0aW1lb3V0IGFuIGlkbGUgdHJhbnNmZXIgZm9yIEZTQlIsIHdlJ2xsIHN3aXRjaCBpdCBvdmVyIHRvICovCisvKiBkZXB0aCBmaXJzdCB0cmF2ZXJzYWwuIFdlJ2xsIGRvIGl0IGluIGdyb3VwcyBvZiB0aGlzIG51bWJlciBvZiBURCdzICovCisvKiB0byBtYWtlIHN1cmUgaXQgZG9lc24ndCBob2cgYWxsIG9mIHRoZSBiYW5kd2lkdGggKi8KKyNkZWZpbmUgREVQVEhfSU5URVJWQUwgNQorCisjaW5jbHVkZSAidWhjaS1odWIuYyIKKyNpbmNsdWRlICJ1aGNpLWRlYnVnLmMiCisjaW5jbHVkZSAidWhjaS1xLmMiCisKK3N0YXRpYyBpbnQgaW5pdF9zdGFsbF90aW1lcihzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKworc3RhdGljIHZvaWQgc3RhbGxfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBwdHIpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IChzdHJ1Y3QgdXNiX2hjZCAqKXB0cjsKKwlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBoY2RfdG9fdWhjaShoY2QpOworCXN0cnVjdCB1cmJfcHJpdiAqdXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1aGNpLT5sb2NrLCBmbGFncyk7CisJdWhjaV9zY2FuX3NjaGVkdWxlKHVoY2ksIE5VTEwpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh1cCwgJnVoY2ktPnVyYl9saXN0LCB1cmJfbGlzdCkgeworCQlzdHJ1Y3QgdXJiICp1ID0gdXAtPnVyYjsKKworCQlzcGluX2xvY2soJnUtPmxvY2spOworCisJCS8qIENoZWNrIGlmIHRoZSBGU0JSIHRpbWVkIG91dCAqLworCQlpZiAodXAtPmZzYnIgJiYgIXVwLT5mc2JyX3RpbWVvdXQgJiYgdGltZV9hZnRlcl9lcShqaWZmaWVzLCB1cC0+ZnNicnRpbWUgKyBJRExFX1RJTUVPVVQpKQorCQkJdWhjaV9mc2JyX3RpbWVvdXQodWhjaSwgdSk7CisKKwkJc3Bpbl91bmxvY2soJnUtPmxvY2spOworCX0KKworCS8qIFJlYWxseSBkaXNhYmxlIEZTQlIgKi8KKwlpZiAoIXVoY2ktPmZzYnIgJiYgdWhjaS0+ZnNicnRpbWVvdXQgJiYgdGltZV9hZnRlcl9lcShqaWZmaWVzLCB1aGNpLT5mc2JydGltZW91dCkpIHsKKwkJdWhjaS0+ZnNicnRpbWVvdXQgPSAwOworCQl1aGNpLT5za2VsX3Rlcm1fcWgtPmxpbmsgPSBVSENJX1BUUl9URVJNOworCX0KKworCS8qIFBvbGwgZm9yIGFuZCBwZXJmb3JtIHN0YXRlIHRyYW5zaXRpb25zICovCisJaGNfc3RhdGVfdHJhbnNpdGlvbnModWhjaSk7CisJaWYgKHVubGlrZWx5KHVoY2ktPnN1c3BlbmRlZF9wb3J0cyAmJiB1aGNpLT5zdGF0ZSAhPSBVSENJX1NVU1BFTkRFRCkpCisJCXVoY2lfY2hlY2tfcG9ydHModWhjaSk7CisKKwlpbml0X3N0YWxsX3RpbWVyKGhjZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWhjaS0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGluaXRfc3RhbGxfdGltZXIoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBoY2RfdG9fdWhjaShoY2QpOworCisJaW5pdF90aW1lcigmdWhjaS0+c3RhbGxfdGltZXIpOworCXVoY2ktPnN0YWxsX3RpbWVyLmZ1bmN0aW9uID0gc3RhbGxfY2FsbGJhY2s7CisJdWhjaS0+c3RhbGxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWhjZDsKKwl1aGNpLT5zdGFsbF90aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAwKTsKKwlhZGRfdGltZXIoJnVoY2ktPnN0YWxsX3RpbWVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgdWhjaV9pcnEoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVoY2lfaGNkICp1aGNpID0gaGNkX3RvX3VoY2koaGNkKTsKKwl1bnNpZ25lZCBsb25nIGlvX2FkZHIgPSB1aGNpLT5pb19hZGRyOworCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKKworCS8qCisJICogUmVhZCB0aGUgaW50ZXJydXB0IHN0YXR1cywgYW5kIHdyaXRlIGl0IGJhY2sgdG8gY2xlYXIgdGhlCisJICogaW50ZXJydXB0IGNhdXNlLiAgQ29udHJhcnkgdG8gdGhlIFVIQ0kgc3BlY2lmaWNhdGlvbiwgdGhlCisJICogIkhDIEhhbHRlZCIgc3RhdHVzIGJpdCBpcyBwZXJzaXN0ZW50OiBpdCBpcyBSTywgbm90IFIvV0MuCisJICovCisJc3RhdHVzID0gaW53KGlvX2FkZHIgKyBVU0JTVFMpOworCWlmICghKHN0YXR1cyAmIH5VU0JTVFNfSENIKSkJLyogc2hhcmVkIGludGVycnVwdCwgbm90IG1pbmUgKi8KKwkJcmV0dXJuIElSUV9OT05FOworCW91dHcoc3RhdHVzLCBpb19hZGRyICsgVVNCU1RTKTsJCS8qIENsZWFyIGl0ICovCisKKwlpZiAoc3RhdHVzICYgfihVU0JTVFNfVVNCSU5UIHwgVVNCU1RTX0VSUk9SIHwgVVNCU1RTX1JEKSkgeworCQlpZiAoc3RhdHVzICYgVVNCU1RTX0hTRSkKKwkJCWRldl9lcnIodWhjaV9kZXYodWhjaSksICJob3N0IHN5c3RlbSBlcnJvciwgIgorCQkJCQkiUENJIHByb2JsZW1zP1xuIik7CisJCWlmIChzdGF0dXMgJiBVU0JTVFNfSENQRSkKKwkJCWRldl9lcnIodWhjaV9kZXYodWhjaSksICJob3N0IGNvbnRyb2xsZXIgcHJvY2VzcyAiCisJCQkJCSJlcnJvciwgc29tZXRoaW5nIGJhZCBoYXBwZW5lZCFcbiIpOworCQlpZiAoKHN0YXR1cyAmIFVTQlNUU19IQ0gpICYmIHVoY2ktPnN0YXRlID4gMCkgeworCQkJZGV2X2Vycih1aGNpX2Rldih1aGNpKSwgImhvc3QgY29udHJvbGxlciBoYWx0ZWQsICIKKwkJCQkJInZlcnkgYmFkIVxuIik7CisJCQkvKiBGSVhNRTogUmVzZXQgdGhlIGNvbnRyb2xsZXIsIGZpeCB0aGUgb2ZmZW5kaW5nIFREICovCisJCX0KKwl9CisKKwlpZiAoc3RhdHVzICYgVVNCU1RTX1JEKQorCQl1aGNpLT5yZXN1bWVfZGV0ZWN0ID0gMTsKKworCXNwaW5fbG9jaygmdWhjaS0+bG9jayk7CisJdWhjaV9zY2FuX3NjaGVkdWxlKHVoY2ksIHJlZ3MpOworCXNwaW5fdW5sb2NrKCZ1aGNpLT5sb2NrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgcmVzZXRfaGMoc3RydWN0IHVoY2lfaGNkICp1aGNpKQoreworCXVuc2lnbmVkIGxvbmcgaW9fYWRkciA9IHVoY2ktPmlvX2FkZHI7CisKKwkvKiBUdXJuIG9mZiBQSVJRLCBTTUksIGFuZCBhbGwgaW50ZXJydXB0cy4gIFRoaXMgYWxzbyB0dXJucyBvZmYKKwkgKiB0aGUgQklPUydzIFVTQiBMZWdhY3kgU3VwcG9ydC4KKwkgKi8KKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQodG9fcGNpX2Rldih1aGNpX2Rldih1aGNpKSksIFVTQkxFR1NVUCwgMCk7CisJb3V0dygwLCB1aGNpLT5pb19hZGRyICsgVVNCSU5UUik7CisKKwkvKiBHbG9iYWwgcmVzZXQgZm9yIDUwbXMgKi8KKwl1aGNpLT5zdGF0ZSA9IFVIQ0lfUkVTRVQ7CisJb3V0dyhVU0JDTURfR1JFU0VULCBpb19hZGRyICsgVVNCQ01EKTsKKwltc2xlZXAoNTApOworCW91dHcoMCwgaW9fYWRkciArIFVTQkNNRCk7CisKKwkvKiBBbm90aGVyIDEwbXMgZGVsYXkgKi8KKwltc2xlZXAoMTApOworCXVoY2ktPnJlc3VtZV9kZXRlY3QgPSAwOworCXVoY2ktPmlzX3N0b3BwZWQgPSBVSENJX0lTX1NUT1BQRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHN1c3BlbmRfaGMoc3RydWN0IHVoY2lfaGNkICp1aGNpKQoreworCXVuc2lnbmVkIGxvbmcgaW9fYWRkciA9IHVoY2ktPmlvX2FkZHI7CisKKwlkZXZfZGJnKHVoY2lfZGV2KHVoY2kpLCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJdWhjaS0+c3RhdGUgPSBVSENJX1NVU1BFTkRFRDsKKwl1aGNpLT5yZXN1bWVfZGV0ZWN0ID0gMDsKKwlvdXR3KFVTQkNNRF9FR1NNLCBpb19hZGRyICsgVVNCQ01EKTsKKworCS8qIEZJWE1FOiBXYWl0IGZvciB0aGUgY29udHJvbGxlciB0byBhY3R1YWxseSBzdG9wICovCisJdWhjaV9nZXRfY3VycmVudF9mcmFtZV9udW1iZXIodWhjaSk7CisJdWhjaS0+aXNfc3RvcHBlZCA9IFVIQ0lfSVNfU1RPUFBFRDsKKworCXVoY2lfc2Nhbl9zY2hlZHVsZSh1aGNpLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgd2FrZXVwX2hjKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSkKK3sKKwl1bnNpZ25lZCBsb25nIGlvX2FkZHIgPSB1aGNpLT5pb19hZGRyOworCisJc3dpdGNoICh1aGNpLT5zdGF0ZSkgeworCQljYXNlIFVIQ0lfU1VTUEVOREVEOgkJLyogU3RhcnQgdGhlIHJlc3VtZSAqLworCQkJZGV2X2RiZyh1aGNpX2Rldih1aGNpKSwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJCQkvKiBHbG9iYWwgcmVzdW1lIGZvciA+PSAyMG1zICovCisJCQlvdXR3KFVTQkNNRF9GR1IgfCBVU0JDTURfRUdTTSwgaW9fYWRkciArIFVTQkNNRCk7CisJCQl1aGNpLT5zdGF0ZSA9IFVIQ0lfUkVTVU1JTkdfMTsKKwkJCXVoY2ktPnN0YXRlX2VuZCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwKTsKKwkJCXVoY2ktPmlzX3N0b3BwZWQgPSAwOworCQkJYnJlYWs7CisKKwkJY2FzZSBVSENJX1JFU1VNSU5HXzE6CQkvKiBFbmQgZ2xvYmFsIHJlc3VtZSAqLworCQkJdWhjaS0+c3RhdGUgPSBVSENJX1JFU1VNSU5HXzI7CisJCQlvdXR3KDAsIGlvX2FkZHIgKyBVU0JDTUQpOworCQkJLyogRmFsbHMgdGhyb3VnaCAqLworCisJCWNhc2UgVUhDSV9SRVNVTUlOR18yOgkJLyogV2FpdCBmb3IgRU9QIHRvIGJlIHNlbnQgKi8KKwkJCWlmIChpbncoaW9fYWRkciArIFVTQkNNRCkgJiBVU0JDTURfRkdSKQorCQkJCWJyZWFrOworCisJCQkvKiBSdW4gZm9yIGF0IGxlYXN0IDEgc2Vjb25kLCBhbmQKKwkJCSAqIG1hcmsgaXQgY29uZmlndXJlZCB3aXRoIGEgNjQtYnl0ZSBtYXggcGFja2V0ICovCisJCQl1aGNpLT5zdGF0ZSA9IFVIQ0lfUlVOTklOR19HUkFDRTsKKwkJCXVoY2ktPnN0YXRlX2VuZCA9IGppZmZpZXMgKyBIWjsKKwkJCW91dHcoVVNCQ01EX1JTIHwgVVNCQ01EX0NGIHwgVVNCQ01EX01BWFAsCisJCQkJCWlvX2FkZHIgKyBVU0JDTUQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBVSENJX1JVTk5JTkdfR1JBQ0U6CS8qIE5vdyBhbGxvd2VkIHRvIHN1c3BlbmQgKi8KKwkJCXVoY2ktPnN0YXRlID0gVUhDSV9SVU5OSU5HOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBwb3J0c19hY3RpdmUoc3RydWN0IHVoY2lfaGNkICp1aGNpKQoreworCXVuc2lnbmVkIGxvbmcgaW9fYWRkciA9IHVoY2ktPmlvX2FkZHI7CisJaW50IGNvbm5lY3Rpb24gPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHVoY2ktPnJoX251bXBvcnRzOyBpKyspCisJCWNvbm5lY3Rpb24gfD0gKGludyhpb19hZGRyICsgVVNCUE9SVFNDMSArIGkgKiAyKSAmIFVTQlBPUlRTQ19DQ1MpOworCisJcmV0dXJuIGNvbm5lY3Rpb247Cit9CisKK3N0YXRpYyBpbnQgc3VzcGVuZF9hbGxvd2VkKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSkKK3sKKwl1bnNpZ25lZCBsb25nIGlvX2FkZHIgPSB1aGNpLT5pb19hZGRyOworCWludCBpOworCisJaWYgKHRvX3BjaV9kZXYodWhjaV9kZXYodWhjaSkpLT52ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9JTlRFTCkKKwkJcmV0dXJuIDE7CisKKwkvKiBTb21lIG9mIEludGVsJ3MgVVNCIGNvbnRyb2xsZXJzIGhhdmUgYSBidWcgdGhhdCBjYXVzZXMgZmFsc2UKKwkgKiByZXN1bWUgaW5kaWNhdGlvbnMgaWYgYW55IHBvcnQgaGFzIGFuIG92ZXIgY3VycmVudCBjb25kaXRpb24uCisJICogVG8gcHJldmVudCBwcm9ibGVtcywgd2Ugd2lsbCBub3QgYWxsb3cgYSBnbG9iYWwgc3VzcGVuZCBpZgorCSAqIGFueSBwb3J0cyBhcmUgT0MuCisJICoKKwkgKiBTb21lIG1vdGhlcmJvYXJkcyB1c2luZyBJbnRlbCdzIGNoaXBzZXRzIChidXQgbm90IHVzaW5nIGFsbAorCSAqIHRoZSBVU0IgcG9ydHMpIGFwcGVhciB0byBoYXJkd2lyZSB0aGUgb3ZlciBjdXJyZW50IGlucHV0cyBhY3RpdmUKKwkgKiB0byBkaXNhYmxlIHRoZSBVU0IgcG9ydHMuCisJICovCisKKwkvKiBjaGVjayBmb3Igb3ZlciBjdXJyZW50IGNvbmRpdGlvbiBvbiBhbnkgcG9ydCAqLworCWZvciAoaSA9IDA7IGkgPCB1aGNpLT5yaF9udW1wb3J0czsgaSsrKSB7CisJCWlmIChpbncoaW9fYWRkciArIFVTQlBPUlRTQzEgKyBpICogMikgJiBVU0JQT1JUU0NfT0MpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgaGNfc3RhdGVfdHJhbnNpdGlvbnMoc3RydWN0IHVoY2lfaGNkICp1aGNpKQoreworCXN3aXRjaCAodWhjaS0+c3RhdGUpIHsKKwkJY2FzZSBVSENJX1JVTk5JTkc6CisKKwkJCS8qIGdsb2JhbCBzdXNwZW5kIGlmIG5vdGhpbmcgY29ubmVjdGVkIGZvciAxIHNlY29uZCAqLworCQkJaWYgKCFwb3J0c19hY3RpdmUodWhjaSkgJiYgc3VzcGVuZF9hbGxvd2VkKHVoY2kpKSB7CisJCQkJdWhjaS0+c3RhdGUgPSBVSENJX1NVU1BFTkRJTkdfR1JBQ0U7CisJCQkJdWhjaS0+c3RhdGVfZW5kID0gamlmZmllcyArIEhaOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBVSENJX1NVU1BFTkRJTkdfR1JBQ0U6CisJCQlpZiAocG9ydHNfYWN0aXZlKHVoY2kpKQorCQkJCXVoY2ktPnN0YXRlID0gVUhDSV9SVU5OSU5HOworCQkJZWxzZSBpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB1aGNpLT5zdGF0ZV9lbmQpKQorCQkJCXN1c3BlbmRfaGModWhjaSk7CisJCQlicmVhazsKKworCQljYXNlIFVIQ0lfU1VTUEVOREVEOgorCisJCQkvKiB3YWtldXAgaWYgcmVxdWVzdGVkIGJ5IGEgZGV2aWNlICovCisJCQlpZiAodWhjaS0+cmVzdW1lX2RldGVjdCkKKwkJCQl3YWtldXBfaGModWhjaSk7CisJCQlicmVhazsKKworCQljYXNlIFVIQ0lfUkVTVU1JTkdfMToKKwkJY2FzZSBVSENJX1JFU1VNSU5HXzI6CisJCWNhc2UgVUhDSV9SVU5OSU5HX0dSQUNFOgorCQkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdWhjaS0+c3RhdGVfZW5kKSkKKwkJCQl3YWtldXBfaGModWhjaSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorfQorCisvKgorICogU3RvcmUgdGhlIGN1cnJlbnQgZnJhbWUgbnVtYmVyIGluIHVoY2ktPmZyYW1lX251bWJlciBpZiB0aGUgY29udHJvbGxlcgorICogaXMgcnVubm5pbmcKKyAqLworc3RhdGljIHZvaWQgdWhjaV9nZXRfY3VycmVudF9mcmFtZV9udW1iZXIoc3RydWN0IHVoY2lfaGNkICp1aGNpKQoreworCWlmICghdWhjaS0+aXNfc3RvcHBlZCkKKwkJdWhjaS0+ZnJhbWVfbnVtYmVyID0gaW53KHVoY2ktPmlvX2FkZHIgKyBVU0JGUk5VTSk7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfaGMoc3RydWN0IHVoY2lfaGNkICp1aGNpKQoreworCXVuc2lnbmVkIGxvbmcgaW9fYWRkciA9IHVoY2ktPmlvX2FkZHI7CisJaW50IHRpbWVvdXQgPSAxMDsKKworCS8qCisJICogUmVzZXQgdGhlIEhDIC0gdGhpcyB3aWxsIGZvcmNlIHVzIHRvIGdldCBhCisJICogbmV3IG5vdGlmaWNhdGlvbiBvZiBhbnkgYWxyZWFkeSBjb25uZWN0ZWQKKwkgKiBwb3J0cyBkdWUgdG8gdGhlIHZpcnR1YWwgZGlzY29ubmVjdCB0aGF0IGl0CisJICogaW1wbGllcy4KKwkgKi8KKwlvdXR3KFVTQkNNRF9IQ1JFU0VULCBpb19hZGRyICsgVVNCQ01EKTsKKwl3aGlsZSAoaW53KGlvX2FkZHIgKyBVU0JDTUQpICYgVVNCQ01EX0hDUkVTRVQpIHsKKwkJaWYgKC0tdGltZW91dCA8IDApIHsKKwkJCWRldl9lcnIodWhjaV9kZXYodWhjaSksICJVU0JDTURfSENSRVNFVCB0aW1lZCBvdXQhXG4iKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisJCW1zbGVlcCgxKTsKKwl9CisKKwkvKiBNYXJrIGNvbnRyb2xsZXIgYXMgcnVubmluZyBiZWZvcmUgd2UgZW5hYmxlIGludGVycnVwdHMgKi8KKwl1aGNpX3RvX2hjZCh1aGNpKS0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOworCisJLyogVHVybiBvbiBQSVJRIGFuZCBhbGwgaW50ZXJydXB0cyAqLworCXBjaV93cml0ZV9jb25maWdfd29yZCh0b19wY2lfZGV2KHVoY2lfZGV2KHVoY2kpKSwgVVNCTEVHU1VQLAorCQkJVVNCTEVHU1VQX0RFRkFVTFQpOworCW91dHcoVVNCSU5UUl9USU1FT1VUIHwgVVNCSU5UUl9SRVNVTUUgfCBVU0JJTlRSX0lPQyB8IFVTQklOVFJfU1AsCisJCWlvX2FkZHIgKyBVU0JJTlRSKTsKKworCS8qIFN0YXJ0IGF0IGZyYW1lIDAgKi8KKwlvdXR3KDAsIGlvX2FkZHIgKyBVU0JGUk5VTSk7CisJb3V0bCh1aGNpLT5mbC0+ZG1hX2hhbmRsZSwgaW9fYWRkciArIFVTQkZMQkFTRUFERCk7CisKKwkvKiBSdW4gYW5kIG1hcmsgaXQgY29uZmlndXJlZCB3aXRoIGEgNjQtYnl0ZSBtYXggcGFja2V0ICovCisJdWhjaS0+c3RhdGUgPSBVSENJX1JVTk5JTkdfR1JBQ0U7CisJdWhjaS0+c3RhdGVfZW5kID0gamlmZmllcyArIEhaOworCW91dHcoVVNCQ01EX1JTIHwgVVNCQ01EX0NGIHwgVVNCQ01EX01BWFAsIGlvX2FkZHIgKyBVU0JDTUQpOworCXVoY2ktPmlzX3N0b3BwZWQgPSAwOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBEZS1hbGxvY2F0ZSBhbGwgcmVzb3VyY2VzCisgKi8KK3N0YXRpYyB2b2lkIHJlbGVhc2VfdWhjaShzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVUhDSV9OVU1fU0tFTFFIOyBpKyspCisJCWlmICh1aGNpLT5za2VscWhbaV0pIHsKKwkJCXVoY2lfZnJlZV9xaCh1aGNpLCB1aGNpLT5za2VscWhbaV0pOworCQkJdWhjaS0+c2tlbHFoW2ldID0gTlVMTDsKKwkJfQorCisJaWYgKHVoY2ktPnRlcm1fdGQpIHsKKwkJdWhjaV9mcmVlX3RkKHVoY2ksIHVoY2ktPnRlcm1fdGQpOworCQl1aGNpLT50ZXJtX3RkID0gTlVMTDsKKwl9CisKKwlpZiAodWhjaS0+cWhfcG9vbCkgeworCQlkbWFfcG9vbF9kZXN0cm95KHVoY2ktPnFoX3Bvb2wpOworCQl1aGNpLT5xaF9wb29sID0gTlVMTDsKKwl9CisKKwlpZiAodWhjaS0+dGRfcG9vbCkgeworCQlkbWFfcG9vbF9kZXN0cm95KHVoY2ktPnRkX3Bvb2wpOworCQl1aGNpLT50ZF9wb29sID0gTlVMTDsKKwl9CisKKwlpZiAodWhjaS0+ZmwpIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQodWhjaV9kZXYodWhjaSksIHNpemVvZigqdWhjaS0+ZmwpLAorCQkJCXVoY2ktPmZsLCB1aGNpLT5mbC0+ZG1hX2hhbmRsZSk7CisJCXVoY2ktPmZsID0gTlVMTDsKKwl9CisKKwlpZiAodWhjaS0+ZGVudHJ5KSB7CisJCWRlYnVnZnNfcmVtb3ZlKHVoY2ktPmRlbnRyeSk7CisJCXVoY2ktPmRlbnRyeSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IHVoY2lfcmVzZXQoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBoY2RfdG9fdWhjaShoY2QpOworCisJdWhjaS0+aW9fYWRkciA9ICh1bnNpZ25lZCBsb25nKSBoY2QtPnJzcmNfc3RhcnQ7CisKKwkvKiBLaWNrIEJJT1Mgb2ZmIHRoaXMgaGFyZHdhcmUgYW5kIHJlc2V0LCBzbyB3ZSB3b24ndCBnZXQKKwkgKiBpbnRlcnJ1cHRzIGZyb20gYW55IHByZXZpb3VzIHNldHVwLgorCSAqLworCXJlc2V0X2hjKHVoY2kpOworCXJldHVybiAwOworfQorCisvKgorICogQWxsb2NhdGUgYSBmcmFtZSBsaXN0LCBhbmQgdGhlbiBzZXR1cCB0aGUgc2tlbGV0b24KKyAqCisgKiBUaGUgaGFyZHdhcmUgZG9lc24ndCByZWFsbHkga25vdyBhbnkgZGlmZmVyZW5jZQorICogaW4gdGhlIHF1ZXVlcywgYnV0IHRoZSBvcmRlciBkb2VzIG1hdHRlciBmb3IgdGhlCisgKiBwcm90b2NvbHMgaGlnaGVyIHVwLiBUaGUgb3JkZXIgaXM6CisgKgorICogIC0gYW55IGlzb2Nocm9ub3VzIGV2ZW50cyBoYW5kbGVkIGJlZm9yZSBhbnkKKyAqICAgIG9mIHRoZSBxdWV1ZXMuIFdlIGRvbid0IGRvIHRoYXQgaGVyZSwgYmVjYXVzZQorICogICAgd2UnbGwgY3JlYXRlIHRoZSBhY3R1YWwgVEQgZW50cmllcyBvbiBkZW1hbmQuCisgKiAgLSBUaGUgZmlyc3QgcXVldWUgaXMgdGhlIGludGVycnVwdCBxdWV1ZS4KKyAqICAtIFRoZSBzZWNvbmQgcXVldWUgaXMgdGhlIGNvbnRyb2wgcXVldWUsIHNwbGl0IGludG8gbG93LSBhbmQgZnVsbC1zcGVlZAorICogIC0gVGhlIHRoaXJkIHF1ZXVlIGlzIGJ1bGsgcXVldWUuCisgKiAgLSBUaGUgZm91cnRoIHF1ZXVlIGlzIHRoZSBiYW5kd2lkdGggcmVjbGFtYXRpb24gcXVldWUsIHdoaWNoIGxvb3BzIGJhY2sKKyAqICAgIHRvIHRoZSBmdWxsLXNwZWVkIGNvbnRyb2wgcXVldWUuCisgKi8KK3N0YXRpYyBpbnQgdWhjaV9zdGFydChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CisJaW50IHJldHZhbCA9IC1FQlVTWTsKKwlpbnQgaSwgcG9ydDsKKwl1bnNpZ25lZCBpb19zaXplOworCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisKKwlpb19zaXplID0gKHVuc2lnbmVkKSBoY2QtPnJzcmNfbGVuOworCisJZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZShoY2QtPnNlbGYuYnVzX25hbWUsIFNfSUZSRUd8U19JUlVHT3xTX0lXVVNSLCB1aGNpX2RlYnVnZnNfcm9vdCwgdWhjaSwgJnVoY2lfZGVidWdfb3BlcmF0aW9ucyk7CisJaWYgKCFkZW50cnkpIHsKKwkJZGV2X2Vycih1aGNpX2Rldih1aGNpKSwgImNvdWxkbid0IGNyZWF0ZSB1aGNpIGRlYnVnZnMgZW50cnlcbiIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycl9jcmVhdGVfZGVidWdfZW50cnk7CisJfQorCXVoY2ktPmRlbnRyeSA9IGRlbnRyeTsKKworCXVoY2ktPmZzYnIgPSAwOworCXVoY2ktPmZzYnJ0aW1lb3V0ID0gMDsKKworCXNwaW5fbG9ja19pbml0KCZ1aGNpLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmdWhjaS0+cWhfcmVtb3ZlX2xpc3QpOworCisJSU5JVF9MSVNUX0hFQUQoJnVoY2ktPnRkX3JlbW92ZV9saXN0KTsKKworCUlOSVRfTElTVF9IRUFEKCZ1aGNpLT51cmJfcmVtb3ZlX2xpc3QpOworCisJSU5JVF9MSVNUX0hFQUQoJnVoY2ktPnVyYl9saXN0KTsKKworCUlOSVRfTElTVF9IRUFEKCZ1aGNpLT5jb21wbGV0ZV9saXN0KTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnVoY2ktPndhaXRxaCk7CisKKwl1aGNpLT5mbCA9IGRtYV9hbGxvY19jb2hlcmVudCh1aGNpX2Rldih1aGNpKSwgc2l6ZW9mKCp1aGNpLT5mbCksCisJCQkmZG1hX2hhbmRsZSwgMCk7CisJaWYgKCF1aGNpLT5mbCkgeworCQlkZXZfZXJyKHVoY2lfZGV2KHVoY2kpLCAidW5hYmxlIHRvIGFsbG9jYXRlICIKKwkJCQkiY29uc2lzdGVudCBtZW1vcnkgZm9yIGZyYW1lIGxpc3RcbiIpOworCQlnb3RvIGVycl9hbGxvY19mbDsKKwl9CisKKwltZW1zZXQoKHZvaWQgKil1aGNpLT5mbCwgMCwgc2l6ZW9mKCp1aGNpLT5mbCkpOworCisJdWhjaS0+ZmwtPmRtYV9oYW5kbGUgPSBkbWFfaGFuZGxlOworCisJdWhjaS0+dGRfcG9vbCA9IGRtYV9wb29sX2NyZWF0ZSgidWhjaV90ZCIsIHVoY2lfZGV2KHVoY2kpLAorCQkJc2l6ZW9mKHN0cnVjdCB1aGNpX3RkKSwgMTYsIDApOworCWlmICghdWhjaS0+dGRfcG9vbCkgeworCQlkZXZfZXJyKHVoY2lfZGV2KHVoY2kpLCAidW5hYmxlIHRvIGNyZWF0ZSB0ZCBkbWFfcG9vbFxuIik7CisJCWdvdG8gZXJyX2NyZWF0ZV90ZF9wb29sOworCX0KKworCXVoY2ktPnFoX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoInVoY2lfcWgiLCB1aGNpX2Rldih1aGNpKSwKKwkJCXNpemVvZihzdHJ1Y3QgdWhjaV9xaCksIDE2LCAwKTsKKwlpZiAoIXVoY2ktPnFoX3Bvb2wpIHsKKwkJZGV2X2Vycih1aGNpX2Rldih1aGNpKSwgInVuYWJsZSB0byBjcmVhdGUgcWggZG1hX3Bvb2xcbiIpOworCQlnb3RvIGVycl9jcmVhdGVfcWhfcG9vbDsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSByb290IGh1YiAqLworCisJLyogVUhDSSBzcGVjcyBzYXlzIGRldmljZXMgbXVzdCBoYXZlIDIgcG9ydHMsIGJ1dCBnb2VzIG9uIHRvIHNheSAqLworCS8qICB0aGV5IG1heSBoYXZlIG1vcmUgYnV0IGdpdmUgbm8gd2F5IHRvIGRldGVybWluZSBob3cgbWFueSB0aGV5ICovCisJLyogIGhhdmUuIEhvd2V2ZXIsIGFjY29yZGluZyB0byB0aGUgVUhDSSBzcGVjLCBCaXQgNyBpcyBhbHdheXMgc2V0ICovCisJLyogIHRvIDEuIFNvIHdlIHRyeSB0byB1c2UgdGhpcyB0byBvdXIgYWR2YW50YWdlICovCisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IChpb19zaXplIC0gMHgxMCkgLyAyOyBwb3J0KyspIHsKKwkJdW5zaWduZWQgaW50IHBvcnRzdGF0dXM7CisKKwkJcG9ydHN0YXR1cyA9IGludyh1aGNpLT5pb19hZGRyICsgMHgxMCArIChwb3J0ICogMikpOworCQlpZiAoIShwb3J0c3RhdHVzICYgMHgwMDgwKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoZGVidWcpCisJCWRldl9pbmZvKHVoY2lfZGV2KHVoY2kpLCAiZGV0ZWN0ZWQgJWQgcG9ydHNcbiIsIHBvcnQpOworCisJLyogVGhpcyBpcyBleHBlcmltZW50YWwgc28gYW55dGhpbmcgbGVzcyB0aGFuIDIgb3IgZ3JlYXRlciB0aGFuIDggaXMgKi8KKwkvKiAgc29tZXRoaW5nIHdlaXJkIGFuZCB3ZSdsbCBpZ25vcmUgaXQgKi8KKwlpZiAocG9ydCA8IDIgfHwgcG9ydCA+IFVIQ0lfUkhfTUFYQ0hJTEQpIHsKKwkJZGV2X2luZm8odWhjaV9kZXYodWhjaSksICJwb3J0IGNvdW50IG1pc2RldGVjdGVkPyAiCisJCQkJImZvcmNpbmcgdG8gMiBwb3J0c1xuIik7CisJCXBvcnQgPSAyOworCX0KKworCXVoY2ktPnJoX251bXBvcnRzID0gcG9ydDsKKworCXVkZXYgPSB1c2JfYWxsb2NfZGV2KE5VTEwsICZoY2QtPnNlbGYsIDApOworCWlmICghdWRldikgeworCQlkZXZfZXJyKHVoY2lfZGV2KHVoY2kpLCAidW5hYmxlIHRvIGFsbG9jYXRlIHJvb3QgaHViXG4iKTsKKwkJZ290byBlcnJfYWxsb2Nfcm9vdF9odWI7CisJfQorCisJdWhjaS0+dGVybV90ZCA9IHVoY2lfYWxsb2NfdGQodWhjaSwgdWRldik7CisJaWYgKCF1aGNpLT50ZXJtX3RkKSB7CisJCWRldl9lcnIodWhjaV9kZXYodWhjaSksICJ1bmFibGUgdG8gYWxsb2NhdGUgdGVybWluYXRpbmcgVERcbiIpOworCQlnb3RvIGVycl9hbGxvY190ZXJtX3RkOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBVSENJX05VTV9TS0VMUUg7IGkrKykgeworCQl1aGNpLT5za2VscWhbaV0gPSB1aGNpX2FsbG9jX3FoKHVoY2ksIHVkZXYpOworCQlpZiAoIXVoY2ktPnNrZWxxaFtpXSkgeworCQkJZGV2X2Vycih1aGNpX2Rldih1aGNpKSwgInVuYWJsZSB0byBhbGxvY2F0ZSBRSFxuIik7CisJCQlnb3RvIGVycl9hbGxvY19za2VscWg7CisJCX0KKwl9CisKKwkvKgorCSAqIDggSW50ZXJydXB0IHF1ZXVlczsgbGluayBhbGwgaGlnaGVyIGludCBxdWV1ZXMgdG8gaW50MSwKKwkgKiB0aGVuIGxpbmsgaW50MSB0byBjb250cm9sIGFuZCBjb250cm9sIHRvIGJ1bGsKKwkgKi8KKwl1aGNpLT5za2VsX2ludDEyOF9xaC0+bGluayA9CisJCQl1aGNpLT5za2VsX2ludDY0X3FoLT5saW5rID0KKwkJCXVoY2ktPnNrZWxfaW50MzJfcWgtPmxpbmsgPQorCQkJdWhjaS0+c2tlbF9pbnQxNl9xaC0+bGluayA9CisJCQl1aGNpLT5za2VsX2ludDhfcWgtPmxpbmsgPQorCQkJdWhjaS0+c2tlbF9pbnQ0X3FoLT5saW5rID0KKwkJCXVoY2ktPnNrZWxfaW50Ml9xaC0+bGluayA9CisJCQljcHVfdG9fbGUzMih1aGNpLT5za2VsX2ludDFfcWgtPmRtYV9oYW5kbGUpIHwgVUhDSV9QVFJfUUg7CisJdWhjaS0+c2tlbF9pbnQxX3FoLT5saW5rID0gY3B1X3RvX2xlMzIodWhjaS0+c2tlbF9sc19jb250cm9sX3FoLT5kbWFfaGFuZGxlKSB8IFVIQ0lfUFRSX1FIOworCisJdWhjaS0+c2tlbF9sc19jb250cm9sX3FoLT5saW5rID0gY3B1X3RvX2xlMzIodWhjaS0+c2tlbF9mc19jb250cm9sX3FoLT5kbWFfaGFuZGxlKSB8IFVIQ0lfUFRSX1FIOworCXVoY2ktPnNrZWxfZnNfY29udHJvbF9xaC0+bGluayA9IGNwdV90b19sZTMyKHVoY2ktPnNrZWxfYnVsa19xaC0+ZG1hX2hhbmRsZSkgfCBVSENJX1BUUl9RSDsKKwl1aGNpLT5za2VsX2J1bGtfcWgtPmxpbmsgPSBjcHVfdG9fbGUzMih1aGNpLT5za2VsX3Rlcm1fcWgtPmRtYV9oYW5kbGUpIHwgVUhDSV9QVFJfUUg7CisKKwkvKiBUaGlzIGR1bW15IFREIGlzIHRvIHdvcmsgYXJvdW5kIGEgYnVnIGluIEludGVsIFBJSVggY29udHJvbGxlcnMgKi8KKwl1aGNpX2ZpbGxfdGQodWhjaS0+dGVybV90ZCwgMCwgKFVIQ0lfTlVMTF9EQVRBX1NJWkUgPDwgMjEpIHwKKwkJKDB4N2YgPDwgVERfVE9LRU5fREVWQUREUl9TSElGVCkgfCBVU0JfUElEX0lOLCAwKTsKKwl1aGNpLT50ZXJtX3RkLT5saW5rID0gY3B1X3RvX2xlMzIodWhjaS0+dGVybV90ZC0+ZG1hX2hhbmRsZSk7CisKKwl1aGNpLT5za2VsX3Rlcm1fcWgtPmxpbmsgPSBVSENJX1BUUl9URVJNOworCXVoY2ktPnNrZWxfdGVybV9xaC0+ZWxlbWVudCA9IGNwdV90b19sZTMyKHVoY2ktPnRlcm1fdGQtPmRtYV9oYW5kbGUpOworCisJLyoKKwkgKiBGaWxsIHRoZSBmcmFtZSBsaXN0OiBtYWtlIGFsbCBlbnRyaWVzIHBvaW50IHRvIHRoZSBwcm9wZXIKKwkgKiBpbnRlcnJ1cHQgcXVldWUuCisJICoKKwkgKiBUaGUgaW50ZXJydXB0IHF1ZXVlcyB3aWxsIGJlIGludGVybGVhdmVkIGFzIGV2ZW5seSBhcyBwb3NzaWJsZS4KKwkgKiBUaGVyZSdzIG5vdCBtdWNoIHRvIGJlIGRvbmUgYWJvdXQgcGVyaW9kLTEgaW50ZXJydXB0czsgdGhleSBoYXZlCisJICogdG8gb2NjdXIgaW4gZXZlcnkgZnJhbWUuICBCdXQgd2UgY2FuIHNjaGVkdWxlIHBlcmlvZC0yIGludGVycnVwdHMKKwkgKiBpbiBvZGQtbnVtYmVyZWQgZnJhbWVzLCBwZXJpb2QtNCBpbnRlcnJ1cHRzIGluIGZyYW1lcyBjb25ncnVlbnQKKwkgKiB0byAyIChtb2QgNCksIGFuZCBzbyBvbi4gIFRoaXMgd2F5IGVhY2ggZnJhbWUgb25seSBoYXMgdHdvCisJICogaW50ZXJydXB0IFFIcywgd2hpY2ggd2lsbCBoZWxwIHNwcmVhZCBvdXQgYmFuZHdpZHRoIHV0aWxpemF0aW9uLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBVSENJX05VTUZSQU1FUzsgaSsrKSB7CisJCWludCBpcnE7CisKKwkJLyoKKwkJICogZmZzIChGaW5kIEZpcnN0IGJpdCBTZXQpIGRvZXMgZXhhY3RseSB3aGF0IHdlIG5lZWQ6CisJCSAqIDEsMyw1LC4uLiAgPT4gZmZzID0gMCA9PiB1c2Ugc2tlbF9pbnQyX3FoID0gc2tlbHFoWzZdLAorCQkgKiAyLDYsMTAsLi4uID0+IGZmcyA9IDEgPT4gdXNlIHNrZWxfaW50NF9xaCA9IHNrZWxxaFs1XSwgZXRjLgorCQkgKiBmZnMgPiA2ID0+IG5vdCBvbiBhbnkgaGlnaC1wZXJpb2QgcXVldWUsIHNvIHVzZQorCQkgKglza2VsX2ludDFfcWggPSBza2VscWhbN10uCisJCSAqIEFkZCBVSENJX05VTUZSQU1FUyB0byBpbnN1cmUgYXQgbGVhc3Qgb25lIGJpdCBpcyBzZXQuCisJCSAqLworCQlpcnEgPSA2IC0gKGludCkgX19mZnMoaSArIFVIQ0lfTlVNRlJBTUVTKTsKKwkJaWYgKGlycSA8IDApCisJCQlpcnEgPSA3OworCisJCS8qIE9ubHkgcGxhY2Ugd2UgZG9uJ3QgdXNlIHRoZSBmcmFtZSBsaXN0IHJvdXRpbmVzICovCisJCXVoY2ktPmZsLT5mcmFtZVtpXSA9IFVIQ0lfUFRSX1FIIHwKKwkJCQljcHVfdG9fbGUzMih1aGNpLT5za2VscWhbaXJxXS0+ZG1hX2hhbmRsZSk7CisJfQorCisJLyoKKwkgKiBTb21lIGFyY2hpdGVjdHVyZXMgcmVxdWlyZSBhIGZ1bGwgbWIoKSB0byBlbmZvcmNlIGNvbXBsZXRpb24gb2YKKwkgKiB0aGUgbWVtb3J5IHdyaXRlcyBhYm92ZSBiZWZvcmUgdGhlIEkvTyB0cmFuc2ZlcnMgaW4gc3RhcnRfaGMoKS4KKwkgKi8KKwltYigpOworCWlmICgocmV0dmFsID0gc3RhcnRfaGModWhjaSkpICE9IDApCisJCWdvdG8gZXJyX2FsbG9jX3NrZWxxaDsKKworCWluaXRfc3RhbGxfdGltZXIoaGNkKTsKKworCXVkZXYtPnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CisKKwlpZiAodXNiX2hjZF9yZWdpc3Rlcl9yb290X2h1Yih1ZGV2LCBoY2QpICE9IDApIHsKKwkJZGV2X2Vycih1aGNpX2Rldih1aGNpKSwgInVuYWJsZSB0byBzdGFydCByb290IGh1YlxuIik7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3N0YXJ0X3Jvb3RfaHViOworCX0KKworCXJldHVybiAwOworCisvKgorICogZXJyb3IgZXhpdHM6CisgKi8KK2Vycl9zdGFydF9yb290X2h1YjoKKwlyZXNldF9oYyh1aGNpKTsKKworCWRlbF90aW1lcl9zeW5jKCZ1aGNpLT5zdGFsbF90aW1lcik7CisKK2Vycl9hbGxvY19za2VscWg6CisJZm9yIChpID0gMDsgaSA8IFVIQ0lfTlVNX1NLRUxRSDsgaSsrKQorCQlpZiAodWhjaS0+c2tlbHFoW2ldKSB7CisJCQl1aGNpX2ZyZWVfcWgodWhjaSwgdWhjaS0+c2tlbHFoW2ldKTsKKwkJCXVoY2ktPnNrZWxxaFtpXSA9IE5VTEw7CisJCX0KKworCXVoY2lfZnJlZV90ZCh1aGNpLCB1aGNpLT50ZXJtX3RkKTsKKwl1aGNpLT50ZXJtX3RkID0gTlVMTDsKKworZXJyX2FsbG9jX3Rlcm1fdGQ6CisJdXNiX3B1dF9kZXYodWRldik7CisKK2Vycl9hbGxvY19yb290X2h1YjoKKwlkbWFfcG9vbF9kZXN0cm95KHVoY2ktPnFoX3Bvb2wpOworCXVoY2ktPnFoX3Bvb2wgPSBOVUxMOworCitlcnJfY3JlYXRlX3FoX3Bvb2w6CisJZG1hX3Bvb2xfZGVzdHJveSh1aGNpLT50ZF9wb29sKTsKKwl1aGNpLT50ZF9wb29sID0gTlVMTDsKKworZXJyX2NyZWF0ZV90ZF9wb29sOgorCWRtYV9mcmVlX2NvaGVyZW50KHVoY2lfZGV2KHVoY2kpLCBzaXplb2YoKnVoY2ktPmZsKSwKKwkJCXVoY2ktPmZsLCB1aGNpLT5mbC0+ZG1hX2hhbmRsZSk7CisJdWhjaS0+ZmwgPSBOVUxMOworCitlcnJfYWxsb2NfZmw6CisJZGVidWdmc19yZW1vdmUodWhjaS0+ZGVudHJ5KTsKKwl1aGNpLT5kZW50cnkgPSBOVUxMOworCitlcnJfY3JlYXRlX2RlYnVnX2VudHJ5OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHVoY2lfc3RvcChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CisKKwlkZWxfdGltZXJfc3luYygmdWhjaS0+c3RhbGxfdGltZXIpOworCXJlc2V0X2hjKHVoY2kpOworCisJc3Bpbl9sb2NrX2lycSgmdWhjaS0+bG9jayk7CisJdWhjaV9zY2FuX3NjaGVkdWxlKHVoY2ksIE5VTEwpOworCXNwaW5fdW5sb2NrX2lycSgmdWhjaS0+bG9jayk7CisJCisJcmVsZWFzZV91aGNpKHVoY2kpOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHVoY2lfc3VzcGVuZChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCB1MzIgc3RhdGUpCit7CisJc3RydWN0IHVoY2lfaGNkICp1aGNpID0gaGNkX3RvX3VoY2koaGNkKTsKKworCXNwaW5fbG9ja19pcnEoJnVoY2ktPmxvY2spOworCisJLyogRG9uJ3QgdHJ5IHRvIHN1c3BlbmQgYnJva2VuIG1vdGhlcmJvYXJkcywgcmVzZXQgaW5zdGVhZCAqLworCWlmIChzdXNwZW5kX2FsbG93ZWQodWhjaSkpCisJCXN1c3BlbmRfaGModWhjaSk7CisJZWxzZSB7CisJCXNwaW5fdW5sb2NrX2lycSgmdWhjaS0+bG9jayk7CisJCXJlc2V0X2hjKHVoY2kpOworCQlzcGluX2xvY2tfaXJxKCZ1aGNpLT5sb2NrKTsKKwkJdWhjaV9zY2FuX3NjaGVkdWxlKHVoY2ksIE5VTEwpOworCX0KKworCXNwaW5fdW5sb2NrX2lycSgmdWhjaS0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWhjaV9yZXN1bWUoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBoY2RfdG9fdWhjaShoY2QpOworCWludCByYzsKKworCXBjaV9zZXRfbWFzdGVyKHRvX3BjaV9kZXYodWhjaV9kZXYodWhjaSkpKTsKKworCXNwaW5fbG9ja19pcnEoJnVoY2ktPmxvY2spOworCisJaWYgKHVoY2ktPnN0YXRlID09IFVIQ0lfU1VTUEVOREVEKSB7CisKKwkJLyoKKwkJICogU29tZSBzeXN0ZW1zIGRvbid0IG1haW50YWluIHRoZSBVSENJIHJlZ2lzdGVyIHZhbHVlcworCQkgKiBkdXJpbmcgYSBQTSBzdXNwZW5kL3Jlc3VtZSBjeWNsZSwgc28gcmVpbml0aWFsaXplCisJCSAqIHRoZSBGcmFtZSBOdW1iZXIsIEZyYW1lbGlzdCBCYXNlIEFkZHJlc3MsIEludGVycnVwdAorCQkgKiBFbmFibGUsIGFuZCBMZWdhY3kgU3VwcG9ydCByZWdpc3RlcnMuCisJCSAqLworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQodG9fcGNpX2Rldih1aGNpX2Rldih1aGNpKSksIFVTQkxFR1NVUCwKKwkJCQkwKTsKKwkJb3V0dyh1aGNpLT5mcmFtZV9udW1iZXIsIHVoY2ktPmlvX2FkZHIgKyBVU0JGUk5VTSk7CisJCW91dGwodWhjaS0+ZmwtPmRtYV9oYW5kbGUsIHVoY2ktPmlvX2FkZHIgKyBVU0JGTEJBU0VBREQpOworCQlvdXR3KFVTQklOVFJfVElNRU9VVCB8IFVTQklOVFJfUkVTVU1FIHwgVVNCSU5UUl9JT0MgfAorCQkJCVVTQklOVFJfU1AsIHVoY2ktPmlvX2FkZHIgKyBVU0JJTlRSKTsKKwkJdWhjaS0+cmVzdW1lX2RldGVjdCA9IDE7CisJCXBjaV93cml0ZV9jb25maWdfd29yZCh0b19wY2lfZGV2KHVoY2lfZGV2KHVoY2kpKSwgVVNCTEVHU1VQLAorCQkJCVVTQkxFR1NVUF9ERUZBVUxUKTsKKwl9IGVsc2UgeworCQlzcGluX3VubG9ja19pcnEoJnVoY2ktPmxvY2spOworCQlyZXNldF9oYyh1aGNpKTsKKwkJaWYgKChyYyA9IHN0YXJ0X2hjKHVoY2kpKSAhPSAwKQorCQkJcmV0dXJuIHJjOworCQlzcGluX2xvY2tfaXJxKCZ1aGNpLT5sb2NrKTsKKwl9CisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisKKwlzcGluX3VubG9ja19pcnEoJnVoY2ktPmxvY2spOworCXJldHVybiAwOworfQorI2VuZGlmCisKKy8qIFdhaXQgdW50aWwgYWxsIHRoZSBVUkJzIGZvciBhIHBhcnRpY3VsYXIgZGV2aWNlL2VuZHBvaW50IGFyZSBnb25lICovCitzdGF0aWMgdm9pZCB1aGNpX2hjZF9lbmRwb2ludF9kaXNhYmxlKHN0cnVjdCB1c2JfaGNkICpoY2QsCisJCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXApCit7CisJc3RydWN0IHVoY2lfaGNkICp1aGNpID0gaGNkX3RvX3VoY2koaGNkKTsKKworCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh1aGNpLT53YWl0cWgsIGxpc3RfZW1wdHkoJmVwLT51cmJfbGlzdCkpOworfQorCitzdGF0aWMgaW50IHVoY2lfaGNkX2dldF9mcmFtZV9udW1iZXIoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBoY2RfdG9fdWhjaShoY2QpOworCWludCBmcmFtZV9udW1iZXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIE1pbmltaXplIGxhdGVuY3kgYnkgYXZvaWRpbmcgdGhlIHNwaW5sb2NrICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJtYigpOworCWZyYW1lX251bWJlciA9ICh1aGNpLT5pc19zdG9wcGVkID8gdWhjaS0+ZnJhbWVfbnVtYmVyIDoKKwkJCWludyh1aGNpLT5pb19hZGRyICsgVVNCRlJOVU0pKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIGZyYW1lX251bWJlcjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgaGNkX25hbWVbXSA9ICJ1aGNpX2hjZCI7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIHVoY2lfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbiA9CQloY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjID0JCSJVSENJIEhvc3QgQ29udHJvbGxlciIsCisJLmhjZF9wcml2X3NpemUgPQlzaXplb2Yoc3RydWN0IHVoY2lfaGNkKSwKKworCS8qIEdlbmVyaWMgaGFyZHdhcmUgbGlua2FnZSAqLworCS5pcnEgPQkJCXVoY2lfaXJxLAorCS5mbGFncyA9CQlIQ0RfVVNCMTEsCisKKwkvKiBCYXNpYyBsaWZlY3ljbGUgb3BlcmF0aW9ucyAqLworCS5yZXNldCA9CQl1aGNpX3Jlc2V0LAorCS5zdGFydCA9CQl1aGNpX3N0YXJ0LAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0JCXVoY2lfc3VzcGVuZCwKKwkucmVzdW1lID0JCXVoY2lfcmVzdW1lLAorI2VuZGlmCisJLnN0b3AgPQkJCXVoY2lfc3RvcCwKKworCS51cmJfZW5xdWV1ZSA9CQl1aGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZSA9CQl1aGNpX3VyYl9kZXF1ZXVlLAorCisJLmVuZHBvaW50X2Rpc2FibGUgPQl1aGNpX2hjZF9lbmRwb2ludF9kaXNhYmxlLAorCS5nZXRfZnJhbWVfbnVtYmVyID0JdWhjaV9oY2RfZ2V0X2ZyYW1lX251bWJlciwKKworCS5odWJfc3RhdHVzX2RhdGEgPQl1aGNpX2h1Yl9zdGF0dXNfZGF0YSwKKwkuaHViX2NvbnRyb2wgPQkJdWhjaV9odWJfY29udHJvbCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB1aGNpX3BjaV9pZHNbXSA9IHsgeworCS8qIGhhbmRsZSBhbnkgVVNCIFVIQ0kgY29udHJvbGxlciAqLworCVBDSV9ERVZJQ0VfQ0xBU1MoKChQQ0lfQ0xBU1NfU0VSSUFMX1VTQiA8PCA4KSB8IDB4MDApLCB+MCksCisJLmRyaXZlcl9kYXRhID0JKHVuc2lnbmVkIGxvbmcpICZ1aGNpX2RyaXZlciwKKwl9LCB7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgdWhjaV9wY2lfaWRzKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHVoY2lfcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9CQkoY2hhciAqKWhjZF9uYW1lLAorCS5pZF90YWJsZSA9CXVoY2lfcGNpX2lkcywKKworCS5wcm9iZSA9CXVzYl9oY2RfcGNpX3Byb2JlLAorCS5yZW1vdmUgPQl1c2JfaGNkX3BjaV9yZW1vdmUsCisKKyNpZmRlZglDT05GSUdfUE0KKwkuc3VzcGVuZCA9CXVzYl9oY2RfcGNpX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9oY2RfcGNpX3Jlc3VtZSwKKyNlbmRpZgkvKiBQTSAqLworfTsKKyAKK3N0YXRpYyBpbnQgX19pbml0IHVoY2lfaGNkX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKworCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OICJcbiIpOworCisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChkZWJ1ZykgeworCQllcnJidWYgPSBrbWFsbG9jKEVSUkJVRl9MRU4sIEdGUF9LRVJORUwpOworCQlpZiAoIWVycmJ1ZikKKwkJCWdvdG8gZXJyYnVmX2ZhaWxlZDsKKwl9CisKKwl1aGNpX2RlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcigidWhjaSIsIE5VTEwpOworCWlmICghdWhjaV9kZWJ1Z2ZzX3Jvb3QpCisJCWdvdG8gZGVidWdfZmFpbGVkOworCisJdWhjaV91cF9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgidWhjaV91cmJfcHJpdiIsCisJCXNpemVvZihzdHJ1Y3QgdXJiX3ByaXYpLCAwLCAwLCBOVUxMLCBOVUxMKTsKKwlpZiAoIXVoY2lfdXBfY2FjaGVwKQorCQlnb3RvIHVwX2ZhaWxlZDsKKworCXJldHZhbCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnVoY2lfcGNpX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJZ290byBpbml0X2ZhaWxlZDsKKworCXJldHVybiAwOworCitpbml0X2ZhaWxlZDoKKwlpZiAoa21lbV9jYWNoZV9kZXN0cm95KHVoY2lfdXBfY2FjaGVwKSkKKwkJd2Fybigibm90IGFsbCB1cmJfcHJpdidzIHdlcmUgZnJlZWQhIik7CisKK3VwX2ZhaWxlZDoKKwlkZWJ1Z2ZzX3JlbW92ZSh1aGNpX2RlYnVnZnNfcm9vdCk7CisKK2RlYnVnX2ZhaWxlZDoKKwlpZiAoZXJyYnVmKQorCQlrZnJlZShlcnJidWYpOworCitlcnJidWZfZmFpbGVkOgorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVoY2lfaGNkX2NsZWFudXAodm9pZCkgCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ1aGNpX3BjaV9kcml2ZXIpOworCQorCWlmIChrbWVtX2NhY2hlX2Rlc3Ryb3kodWhjaV91cF9jYWNoZXApKQorCQl3YXJuKCJub3QgYWxsIHVyYl9wcml2J3Mgd2VyZSBmcmVlZCEiKTsKKworCWRlYnVnZnNfcmVtb3ZlKHVoY2lfZGVidWdmc19yb290KTsKKworCWlmIChlcnJidWYpCisJCWtmcmVlKGVycmJ1Zik7Cit9CisKK21vZHVsZV9pbml0KHVoY2lfaGNkX2luaXQpOworbW9kdWxlX2V4aXQodWhjaV9oY2RfY2xlYW51cCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5oIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMjU1ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmgKQEAgLTAsMCArMSw0NTQgQEAKKyNpZm5kZWYgX19MSU5VWF9VSENJX0hDRF9ICisjZGVmaW5lIF9fTElOVVhfVUhDSV9IQ0RfSAorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjZGVmaW5lIHVzYl9wYWNrZXRpZChwaXBlKQkodXNiX3BpcGVpbihwaXBlKSA/IFVTQl9QSURfSU4gOiBVU0JfUElEX09VVCkKKyNkZWZpbmUgUElQRV9ERVZFUF9NQVNLCQkweDAwMDdmZjAwCisKKy8qCisgKiBVbml2ZXJzYWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMKKyAqLworCisvKiBDb21tYW5kIHJlZ2lzdGVyICovCisjZGVmaW5lIFVTQkNNRAkJMAorI2RlZmluZSAgIFVTQkNNRF9SUwkJMHgwMDAxCS8qIFJ1bi9TdG9wICovCisjZGVmaW5lICAgVVNCQ01EX0hDUkVTRVQJMHgwMDAyCS8qIEhvc3QgcmVzZXQgKi8KKyNkZWZpbmUgICBVU0JDTURfR1JFU0VUCQkweDAwMDQJLyogR2xvYmFsIHJlc2V0ICovCisjZGVmaW5lICAgVVNCQ01EX0VHU00JCTB4MDAwOAkvKiBHbG9iYWwgU3VzcGVuZCBNb2RlICovCisjZGVmaW5lICAgVVNCQ01EX0ZHUgkJMHgwMDEwCS8qIEZvcmNlIEdsb2JhbCBSZXN1bWUgKi8KKyNkZWZpbmUgICBVU0JDTURfU1dEQkcJCTB4MDAyMAkvKiBTVyBEZWJ1ZyBtb2RlICovCisjZGVmaW5lICAgVVNCQ01EX0NGCQkweDAwNDAJLyogQ29uZmlnIEZsYWcgKHN3IG9ubHkpICovCisjZGVmaW5lICAgVVNCQ01EX01BWFAJCTB4MDA4MAkvKiBNYXggUGFja2V0ICgwID0gMzIsIDEgPSA2NCkgKi8KKworLyogU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFVTQlNUUwkJMgorI2RlZmluZSAgIFVTQlNUU19VU0JJTlQJCTB4MDAwMQkvKiBJbnRlcnJ1cHQgZHVlIHRvIElPQyAqLworI2RlZmluZSAgIFVTQlNUU19FUlJPUgkJMHgwMDAyCS8qIEludGVycnVwdCBkdWUgdG8gZXJyb3IgKi8KKyNkZWZpbmUgICBVU0JTVFNfUkQJCTB4MDAwNAkvKiBSZXN1bWUgRGV0ZWN0ICovCisjZGVmaW5lICAgVVNCU1RTX0hTRQkJMHgwMDA4CS8qIEhvc3QgU3lzdGVtIEVycm9yIC0gYmFzaWNhbGx5IFBDSSBwcm9ibGVtcyAqLworI2RlZmluZSAgIFVTQlNUU19IQ1BFCQkweDAwMTAJLyogSG9zdCBDb250cm9sbGVyIFByb2Nlc3MgRXJyb3IgLSB0aGUgc2NyaXB0cyB3ZXJlIGJ1Z2d5ICovCisjZGVmaW5lICAgVVNCU1RTX0hDSAkJMHgwMDIwCS8qIEhDIEhhbHRlZCAqLworCisvKiBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyICovCisjZGVmaW5lIFVTQklOVFIJCTQKKyNkZWZpbmUgICBVU0JJTlRSX1RJTUVPVVQJMHgwMDAxCS8qIFRpbWVvdXQvQ1JDIGVycm9yIGVuYWJsZSAqLworI2RlZmluZSAgIFVTQklOVFJfUkVTVU1FCTB4MDAwMgkvKiBSZXN1bWUgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgIFVTQklOVFJfSU9DCQkweDAwMDQJLyogSW50ZXJydXB0IE9uIENvbXBsZXRlIGVuYWJsZSAqLworI2RlZmluZSAgIFVTQklOVFJfU1AJCTB4MDAwOAkvKiBTaG9ydCBwYWNrZXQgaW50ZXJydXB0IGVuYWJsZSAqLworCisjZGVmaW5lIFVTQkZSTlVNCTYKKyNkZWZpbmUgVVNCRkxCQVNFQURECTgKKyNkZWZpbmUgVVNCU09GCQkxMgorCisvKiBVU0IgcG9ydCBzdGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXJzICovCisjZGVmaW5lIFVTQlBPUlRTQzEJMTYKKyNkZWZpbmUgVVNCUE9SVFNDMgkxOAorI2RlZmluZSAgIFVTQlBPUlRTQ19DQ1MJCTB4MDAwMQkvKiBDdXJyZW50IENvbm5lY3QgU3RhdHVzICgiZGV2aWNlIHByZXNlbnQiKSAqLworI2RlZmluZSAgIFVTQlBPUlRTQ19DU0MJCTB4MDAwMgkvKiBDb25uZWN0IFN0YXR1cyBDaGFuZ2UgKi8KKyNkZWZpbmUgICBVU0JQT1JUU0NfUEUJCTB4MDAwNAkvKiBQb3J0IEVuYWJsZSAqLworI2RlZmluZSAgIFVTQlBPUlRTQ19QRUMJCTB4MDAwOAkvKiBQb3J0IEVuYWJsZSBDaGFuZ2UgKi8KKyNkZWZpbmUgICBVU0JQT1JUU0NfRFBMVVMJMHgwMDEwCS8qIEQrIGhpZ2ggKGxpbmUgc3RhdHVzKSAqLworI2RlZmluZSAgIFVTQlBPUlRTQ19ETUlOVVMJMHgwMDIwCS8qIEQtIGhpZ2ggKGxpbmUgc3RhdHVzKSAqLworI2RlZmluZSAgIFVTQlBPUlRTQ19SRAkJMHgwMDQwCS8qIFJlc3VtZSBEZXRlY3QgKi8KKyNkZWZpbmUgICBVU0JQT1JUU0NfUkVTMQkweDAwODAJLyogcmVzZXJ2ZWQsIGFsd2F5cyAxICovCisjZGVmaW5lICAgVVNCUE9SVFNDX0xTREEJMHgwMTAwCS8qIExvdyBTcGVlZCBEZXZpY2UgQXR0YWNoZWQgKi8KKyNkZWZpbmUgICBVU0JQT1JUU0NfUFIJCTB4MDIwMAkvKiBQb3J0IFJlc2V0ICovCisvKiBPQyBhbmQgT0NDIGZyb20gSW50ZWwgNDMwVFggYW5kIGxhdGVyIChub3QgVUhDSSAxLjFkIHNwZWMpICovCisjZGVmaW5lICAgVVNCUE9SVFNDX09DCQkweDA0MDAJLyogT3ZlciBDdXJyZW50IGNvbmRpdGlvbiAqLworI2RlZmluZSAgIFVTQlBPUlRTQ19PQ0MJCTB4MDgwMAkvKiBPdmVyIEN1cnJlbnQgQ2hhbmdlIFIvV0MgKi8KKyNkZWZpbmUgICBVU0JQT1JUU0NfU1VTUAkweDEwMDAJLyogU3VzcGVuZCAqLworI2RlZmluZSAgIFVTQlBPUlRTQ19SRVMyCTB4MjAwMAkvKiByZXNlcnZlZCwgd3JpdGUgemVyb2VzICovCisjZGVmaW5lICAgVVNCUE9SVFNDX1JFUzMJMHg0MDAwCS8qIHJlc2VydmVkLCB3cml0ZSB6ZXJvZXMgKi8KKyNkZWZpbmUgICBVU0JQT1JUU0NfUkVTNAkweDgwMDAJLyogcmVzZXJ2ZWQsIHdyaXRlIHplcm9lcyAqLworCisvKiBMZWdhY3kgc3VwcG9ydCByZWdpc3RlciAqLworI2RlZmluZSBVU0JMRUdTVVAJCTB4YzAKKyNkZWZpbmUgICBVU0JMRUdTVVBfREVGQVVMVAkweDIwMDAJLyogb25seSBQSVJRIGVuYWJsZSBzZXQgKi8KKworI2RlZmluZSBVSENJX05VTExfREFUQV9TSVpFCTB4N0ZGCS8qIGZvciBVSENJIGNvbnRyb2xsZXIgVEQgKi8KKworI2RlZmluZSBVSENJX1BUUl9CSVRTCQljcHVfdG9fbGUzMigweDAwMEYpCisjZGVmaW5lIFVIQ0lfUFRSX1RFUk0JCWNwdV90b19sZTMyKDB4MDAwMSkKKyNkZWZpbmUgVUhDSV9QVFJfUUgJCWNwdV90b19sZTMyKDB4MDAwMikKKyNkZWZpbmUgVUhDSV9QVFJfREVQVEgJCWNwdV90b19sZTMyKDB4MDAwNCkKKyNkZWZpbmUgVUhDSV9QVFJfQlJFQURUSAljcHVfdG9fbGUzMigweDAwMDApCisKKyNkZWZpbmUgVUhDSV9OVU1GUkFNRVMJCTEwMjQJLyogaW4gdGhlIGZyYW1lIGxpc3QgW2FycmF5XSAqLworI2RlZmluZSBVSENJX01BWF9TT0ZfTlVNQkVSCTIwNDcJLyogaW4gYW4gU09GIHBhY2tldCAqLworI2RlZmluZSBDQU5fU0NIRURVTEVfRlJBTUVTCTEwMDAJLyogaG93IGZhciBmdXR1cmUgZnJhbWVzIGNhbiBiZSBzY2hlZHVsZWQgKi8KKworc3RydWN0IHVoY2lfZnJhbWVfbGlzdCB7CisJX19sZTMyIGZyYW1lW1VIQ0lfTlVNRlJBTUVTXTsKKworCXZvaWQgKmZyYW1lX2NwdVtVSENJX05VTUZSQU1FU107CisKKwlkbWFfYWRkcl90IGRtYV9oYW5kbGU7Cit9OworCitzdHJ1Y3QgdXJiX3ByaXY7CisKKy8qCisgKiBPbmUgcm9sZSBvZiBhIFFIIGlzIHRvIGhvbGQgYSBxdWV1ZSBvZiBURHMgZm9yIHNvbWUgZW5kcG9pbnQuICBFYWNoIFFIIGlzCisgKiB1c2VkIHdpdGggb25lIFVSQiwgYW5kIHFoLT5lbGVtZW50ICh1cGRhdGVkIGJ5IHRoZSBIQykgaXMgZWl0aGVyOgorICogICAtIHRoZSBuZXh0IHVucHJvY2Vzc2VkIFREIGZvciB0aGUgVVJCLCBvcgorICogICAtIFVIQ0lfUFRSX1RFUk0gKHdoZW4gdGhlcmUncyBubyBtb3JlIHRyYWZmaWMgZm9yIHRoaXMgZW5kcG9pbnQpLCBvcgorICogICAtIHRoZSBRSCBmb3IgdGhlIG5leHQgVVJCIHF1ZXVlZCB0byB0aGUgc2FtZSBlbmRwb2ludC4KKyAqCisgKiBUaGUgb3RoZXIgcm9sZSBvZiBhIFFIIGlzIHRvIHNlcnZlIGFzIGEgInNrZWxldG9uIiBmcmFtZWxpc3QgZW50cnksIHNvIHdlCisgKiBjYW4gZWFzaWx5IHNwbGljZSBhIFFIIGZvciBzb21lIGVuZHBvaW50IGludG8gdGhlIHNjaGVkdWxlIGF0IHRoZSByaWdodAorICogcGxhY2UuICBUaGVuIHFoLT5lbGVtZW50IGlzIFVIQ0lfUFRSX1RFUk0uCisgKgorICogSW4gdGhlIGZyYW1lIGxpc3QsIHFoLT5saW5rIG1haW50YWlucyBhIGxpc3Qgb2YgUUhzIHNlZW4gYnkgdGhlIEhDOgorICogICAgIHNrZWwxIC0tPiBlcDEtcWggLS0+IGVwMi1xaCAtLT4gLi4uIC0tPiBza2VsMiAtLT4gLi4uCisgKi8KK3N0cnVjdCB1aGNpX3FoIHsKKwkvKiBIYXJkd2FyZSBmaWVsZHMgKi8KKwlfX2xlMzIgbGluazsJCQkvKiBOZXh0IHF1ZXVlICovCisJX19sZTMyIGVsZW1lbnQ7CQkJLyogUXVldWUgZWxlbWVudCBwb2ludGVyICovCisKKwkvKiBTb2Z0d2FyZSBmaWVsZHMgKi8KKwlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CisKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OworCXN0cnVjdCB1cmJfcHJpdiAqdXJicDsKKworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIFA6IHVoY2ktPmZyYW1lX2xpc3RfbG9jayAqLworCXN0cnVjdCBsaXN0X2hlYWQgcmVtb3ZlX2xpc3Q7CS8qIFA6IHVoY2ktPnJlbW92ZV9saXN0X2xvY2sgKi8KK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxNikpKTsKKworLyoKKyAqIFdlIG5lZWQgYSBzcGVjaWFsIGFjY2Vzc29yIGZvciB0aGUgZWxlbWVudCBwb2ludGVyIGJlY2F1c2UgaXQgaXMKKyAqIHN1YmplY3QgdG8gYXN5bmNocm9ub3VzIHVwZGF0ZXMgYnkgdGhlIGNvbnRyb2xsZXIKKyAqLworc3RhdGljIF9fbGUzMiBpbmxpbmUgcWhfZWxlbWVudChzdHJ1Y3QgdWhjaV9xaCAqcWgpIHsKKwlfX2xlMzIgZWxlbWVudCA9IHFoLT5lbGVtZW50OworCisJYmFycmllcigpOworCXJldHVybiBlbGVtZW50OworfQorCisvKgorICogZm9yIFREIDxzdGF0dXM+OgorICovCisjZGVmaW5lIFREX0NUUkxfU1BECQkoMSA8PCAyOSkJLyogU2hvcnQgUGFja2V0IERldGVjdCAqLworI2RlZmluZSBURF9DVFJMX0NfRVJSX01BU0sJKDMgPDwgMjcpCS8qIEVycm9yIENvdW50ZXIgYml0cyAqLworI2RlZmluZSBURF9DVFJMX0NfRVJSX1NISUZUCTI3CisjZGVmaW5lIFREX0NUUkxfTFMJCSgxIDw8IDI2KQkvKiBMb3cgU3BlZWQgRGV2aWNlICovCisjZGVmaW5lIFREX0NUUkxfSU9TCQkoMSA8PCAyNSkJLyogSXNvY2hyb25vdXMgU2VsZWN0ICovCisjZGVmaW5lIFREX0NUUkxfSU9DCQkoMSA8PCAyNCkJLyogSW50ZXJydXB0IG9uIENvbXBsZXRlICovCisjZGVmaW5lIFREX0NUUkxfQUNUSVZFCQkoMSA8PCAyMykJLyogVEQgQWN0aXZlICovCisjZGVmaW5lIFREX0NUUkxfU1RBTExFRAkJKDEgPDwgMjIpCS8qIFREIFN0YWxsZWQgKi8KKyNkZWZpbmUgVERfQ1RSTF9EQlVGRVJSCQkoMSA8PCAyMSkJLyogRGF0YSBCdWZmZXIgRXJyb3IgKi8KKyNkZWZpbmUgVERfQ1RSTF9CQUJCTEUJCSgxIDw8IDIwKQkvKiBCYWJibGUgRGV0ZWN0ZWQgKi8KKyNkZWZpbmUgVERfQ1RSTF9OQUsJCSgxIDw8IDE5KQkvKiBOQUsgUmVjZWl2ZWQgKi8KKyNkZWZpbmUgVERfQ1RSTF9DUkNUSU1FTwkoMSA8PCAxOCkJLyogQ1JDL1RpbWUgT3V0IEVycm9yICovCisjZGVmaW5lIFREX0NUUkxfQklUU1RVRkYJKDEgPDwgMTcpCS8qIEJpdCBTdHVmZiBFcnJvciAqLworI2RlZmluZSBURF9DVFJMX0FDVExFTl9NQVNLCTB4N0ZGCS8qIGFjdHVhbCBsZW5ndGgsIGVuY29kZWQgYXMgbiAtIDEgKi8KKworI2RlZmluZSBURF9DVFJMX0FOWV9FUlJPUgkoVERfQ1RSTF9TVEFMTEVEIHwgVERfQ1RSTF9EQlVGRVJSIHwgXAorCQkJCSBURF9DVFJMX0JBQkJMRSB8IFREX0NUUkxfQ1JDVElNRSB8IFREX0NUUkxfQklUU1RVRkYpCisKKyNkZWZpbmUgdWhjaV9tYXhlcnIoZXJyKQkJKChlcnIpIDw8IFREX0NUUkxfQ19FUlJfU0hJRlQpCisjZGVmaW5lIHVoY2lfc3RhdHVzX2JpdHMoY3RybF9zdHMpCSgoY3RybF9zdHMpICYgMHhGNjAwMDApCisjZGVmaW5lIHVoY2lfYWN0dWFsX2xlbmd0aChjdHJsX3N0cykJKCgoY3RybF9zdHMpICsgMSkgJiBURF9DVFJMX0FDVExFTl9NQVNLKSAvKiAxLWJhc2VkICovCisKKy8qCisgKiBmb3IgVEQgPGluZm8+OiAoYS5rLmEuIFRva2VuKQorICovCisjZGVmaW5lIHRkX3Rva2VuKHRkKQkJbGUzMl90b19jcHUoKHRkKS0+dG9rZW4pCisjZGVmaW5lIFREX1RPS0VOX0RFVkFERFJfU0hJRlQJOAorI2RlZmluZSBURF9UT0tFTl9UT0dHTEVfU0hJRlQJMTkKKyNkZWZpbmUgVERfVE9LRU5fVE9HR0xFCQkoMSA8PCAxOSkKKyNkZWZpbmUgVERfVE9LRU5fRVhQTEVOX1NISUZUCTIxCisjZGVmaW5lIFREX1RPS0VOX0VYUExFTl9NQVNLCTB4N0ZGCQkvKiBleHBlY3RlZCBsZW5ndGgsIGVuY29kZWQgYXMgbiAtIDEgKi8KKyNkZWZpbmUgVERfVE9LRU5fUElEX01BU0sJMHhGRgorCisjZGVmaW5lIHVoY2lfZXhwbGVuKGxlbikJKChsZW4pIDw8IFREX1RPS0VOX0VYUExFTl9TSElGVCkKKworI2RlZmluZSB1aGNpX2V4cGVjdGVkX2xlbmd0aCh0b2tlbikgKCgoKHRva2VuKSA+PiAyMSkgKyAxKSAmIFREX1RPS0VOX0VYUExFTl9NQVNLKQorI2RlZmluZSB1aGNpX3RvZ2dsZSh0b2tlbikJKCgodG9rZW4pID4+IFREX1RPS0VOX1RPR0dMRV9TSElGVCkgJiAxKQorI2RlZmluZSB1aGNpX2VuZHBvaW50KHRva2VuKQkoKCh0b2tlbikgPj4gMTUpICYgMHhmKQorI2RlZmluZSB1aGNpX2RldmFkZHIodG9rZW4pCSgoKHRva2VuKSA+PiBURF9UT0tFTl9ERVZBRERSX1NISUZUKSAmIDB4N2YpCisjZGVmaW5lIHVoY2lfZGV2ZXAodG9rZW4pCSgoKHRva2VuKSA+PiBURF9UT0tFTl9ERVZBRERSX1NISUZUKSAmIDB4N2ZmKQorI2RlZmluZSB1aGNpX3BhY2tldGlkKHRva2VuKQkoKHRva2VuKSAmIFREX1RPS0VOX1BJRF9NQVNLKQorI2RlZmluZSB1aGNpX3BhY2tldG91dCh0b2tlbikJKHVoY2lfcGFja2V0aWQodG9rZW4pICE9IFVTQl9QSURfSU4pCisjZGVmaW5lIHVoY2lfcGFja2V0aW4odG9rZW4pCSh1aGNpX3BhY2tldGlkKHRva2VuKSA9PSBVU0JfUElEX0lOKQorCisvKgorICogVGhlIGRvY3VtZW50YXRpb24gc2F5cyAiNCB3b3JkcyBmb3IgaGFyZHdhcmUsIDQgd29yZHMgZm9yIHNvZnR3YXJlIi4KKyAqCisgKiBUaGF0J3Mgc2lsbHksIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGNhcmUuIFRoZSBoYXJkd2FyZSBvbmx5IGNhcmVzIHRoYXQKKyAqIHRoZSBoYXJkd2FyZSB3b3JkcyBhcmUgMTYtYnl0ZSBhbGlnbmVkLCBhbmQgd2UgY2FuIGhhdmUgYW55IGFtb3VudCBvZgorICogc3cgc3BhY2UgYWZ0ZXIgdGhlIFREIGVudHJ5IGFzIGZhciBhcyBJIGNhbiB0ZWxsLgorICoKKyAqIEJ1dCBsZXQncyBqdXN0IGdvIHdpdGggdGhlIGRvY3VtZW50YXRpb24sIGF0IGxlYXN0IGZvciAzMi1iaXQgbWFjaGluZXMuCisgKiBPbiA2NC1iaXQgbWFjaGluZXMgd2UgcHJvYmFibHkgd2FudCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0CisgKiBodyBkb2Vzbid0IHJlYWxseSBjYXJlIGFib3V0IHRoZSBzaXplIG9mIHRoZSBzdy1vbmx5IGFyZWEuCisgKgorICogQWxhcywgbm90IGFueW1vcmUsIHdlIGhhdmUgbW9yZSB0aGFuIDQgd29yZHMgZm9yIHNvZnR3YXJlLCB3b29wcy4KKyAqIEV2ZXJ5dGhpbmcgc3RpbGwgd29ya3MgdGhvLCBzdXJwcmlzZSEgLWplcmRmZWx0CisgKgorICogdGQtPmxpbmsgcG9pbnRzIHRvIGVpdGhlciBhbm90aGVyIFREIChub3QgbmVjZXNzYXJpbHkgZm9yIHRoZSBzYW1lIHVyYiBvcgorICogZXZlbiB0aGUgc2FtZSBlbmRwb2ludCksIG9yIG5vdGhpbmcgKFBUUl9URVJNKSwgb3IgYSBRSCAoZm9yIHF1ZXVlZCB1cmJzKQorICovCitzdHJ1Y3QgdWhjaV90ZCB7CisJLyogSGFyZHdhcmUgZmllbGRzICovCisJX19sZTMyIGxpbms7CisJX19sZTMyIHN0YXR1czsKKwlfX2xlMzIgdG9rZW47CisJX19sZTMyIGJ1ZmZlcjsKKworCS8qIFNvZnR3YXJlIGZpZWxkcyAqLworCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKKworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisJc3RydWN0IHVyYiAqdXJiOworCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkJLyogUDogdXJiLT5sb2NrICovCisJc3RydWN0IGxpc3RfaGVhZCByZW1vdmVfbGlzdDsJLyogUDogdWhjaS0+dGRfcmVtb3ZlX2xpc3RfbG9jayAqLworCisJaW50IGZyYW1lOwkJCS8qIGZvciBpc286IHdoYXQgZnJhbWU/ICovCisJc3RydWN0IGxpc3RfaGVhZCBmbF9saXN0OwkvKiBQOiB1aGNpLT5mcmFtZV9saXN0X2xvY2sgKi8KK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxNikpKTsKKworLyoKKyAqIFdlIG5lZWQgYSBzcGVjaWFsIGFjY2Vzc29yIGZvciB0aGUgY29udHJvbC9zdGF0dXMgd29yZCBiZWNhdXNlIGl0IGlzCisgKiBzdWJqZWN0IHRvIGFzeW5jaHJvbm91cyB1cGRhdGVzIGJ5IHRoZSBjb250cm9sbGVyCisgKi8KK3N0YXRpYyB1MzIgaW5saW5lIHRkX3N0YXR1cyhzdHJ1Y3QgdWhjaV90ZCAqdGQpIHsKKwlfX2xlMzIgc3RhdHVzID0gdGQtPnN0YXR1czsKKworCWJhcnJpZXIoKTsKKwlyZXR1cm4gbGUzMl90b19jcHUoc3RhdHVzKTsKK30KKworCisvKgorICogVGhlIFVIQ0kgZHJpdmVyIHBsYWNlcyBJbnRlcnJ1cHQsIENvbnRyb2wgYW5kIEJ1bGsgaW50byBRSCdzIGJvdGgKKyAqIHRvIGdyb3VwIHRvZ2V0aGVyIFREJ3MgZm9yIG9uZSB0cmFuc2ZlciwgYW5kIGFsc28gdG8gZmFjaWxpYXRlIHF1ZXVpbmcKKyAqIG9mIFVSQidzLiBUbyBtYWtlIGl0IGVhc3kgdG8gaW5zZXJ0IGVudHJpZXMgaW50byB0aGUgc2NoZWR1bGUsIHdlIGhhdmUKKyAqIGEgc2tlbGV0b24gb2YgUUgncyBmb3IgZWFjaCBwcmVkZWZpbmVkIEludGVycnVwdCBsYXRlbmN5LCBsb3ctc3BlZWQKKyAqIGNvbnRyb2wsIGZ1bGwtc3BlZWQgY29udHJvbCBhbmQgdGVybWluYXRpbmcgUUggKHNlZSBleHBsYW5hdGlvbiBmb3IKKyAqIHRoZSB0ZXJtaW5hdGluZyBRSCBiZWxvdykuCisgKgorICogV2hlbiB3ZSB3YW50IHRvIGFkZCBhIG5ldyBRSCwgd2UgYWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QgZm9yIHRoZQorICogc2tlbGV0b24gUUguCisgKgorICogRm9yIGluc3RhbmNlLCB0aGUgcXVldWUgY2FuIGxvb2sgbGlrZSB0aGlzOgorICoKKyAqIHNrZWwgaW50MTI4IFFICisgKiBkZXYgMSBpbnRlcnJ1cHQgUUgKKyAqIGRldiA1IGludGVycnVwdCBRSAorICogc2tlbCBpbnQ2NCBRSAorICogc2tlbCBpbnQzMiBRSAorICogLi4uCisgKiBza2VsIGludDEgUUgKKyAqIHNrZWwgbG93LXNwZWVkIGNvbnRyb2wgUUgKKyAqIGRldiA1IGNvbnRyb2wgUUgKKyAqIHNrZWwgZnVsbC1zcGVlZCBjb250cm9sIFFICisgKiBza2VsIGJ1bGsgUUgKKyAqIGRldiAxIGJ1bGsgUUgKKyAqIGRldiAyIGJ1bGsgUUgKKyAqIHNrZWwgdGVybWluYXRpbmcgUUgKKyAqCisgKiBUaGUgdGVybWluYXRpbmcgUUggaXMgdXNlZCBmb3IgMiByZWFzb25zOgorICogLSBUbyBwbGFjZSBhIHRlcm1pbmF0aW5nIFREIHdoaWNoIGlzIHVzZWQgdG8gd29ya2Fyb3VuZCBhIFBJSVggYnVnCisgKiAgIChzZWUgSW50ZWwgZXJyYXRhIGZvciBleHBsYW5hdGlvbikKKyAqIC0gVG8gbG9vcCBiYWNrIHRvIHRoZSBmdWxsLXNwZWVkIGNvbnRyb2wgcXVldWUgZm9yIGZ1bGwtc3BlZWQgYmFuZHdpZHRoCisgKiAgIHJlY2xhbWF0aW9uCisgKgorICogSXNvY2hyb25vdXMgdHJhbnNmZXJzIGFyZSBzdG9yZWQgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgc2tlbGV0b24KKyAqIHNjaGVkdWxlIGFuZCBkb24ndCB1c2UgUUgncy4gV2hpbGUgdGhlIFVIQ0kgc3BlYyBkb2Vzbid0IGZvcmJpZCB0aGUKKyAqIHVzZSBvZiBRSCdzIGZvciBJc29jaHJvbm91cywgaXQgZG9lc24ndCB1c2UgdGhlbSBlaXRoZXIuIFNpbmNlIHdlIGRvbid0CisgKiBuZWVkIHRvIHVzZSB0aGVtIGVpdGhlciwgd2UgZm9sbG93IHRoZSBzcGVjIGRpYWdyYW1zIGluIGhvcGUgdGhhdCBpdCdsbAorICogYmUgbW9yZSBjb21wYXRpYmxlIHdpdGggZnV0dXJlIFVIQ0kgaW1wbGVtZW50YXRpb25zLgorICovCisKKyNkZWZpbmUgVUhDSV9OVU1fU0tFTFFICQkxMgorI2RlZmluZSBza2VsX2ludDEyOF9xaAkJc2tlbHFoWzBdCisjZGVmaW5lIHNrZWxfaW50NjRfcWgJCXNrZWxxaFsxXQorI2RlZmluZSBza2VsX2ludDMyX3FoCQlza2VscWhbMl0KKyNkZWZpbmUgc2tlbF9pbnQxNl9xaAkJc2tlbHFoWzNdCisjZGVmaW5lIHNrZWxfaW50OF9xaAkJc2tlbHFoWzRdCisjZGVmaW5lIHNrZWxfaW50NF9xaAkJc2tlbHFoWzVdCisjZGVmaW5lIHNrZWxfaW50Ml9xaAkJc2tlbHFoWzZdCisjZGVmaW5lIHNrZWxfaW50MV9xaAkJc2tlbHFoWzddCisjZGVmaW5lIHNrZWxfbHNfY29udHJvbF9xaAlza2VscWhbOF0KKyNkZWZpbmUgc2tlbF9mc19jb250cm9sX3FoCXNrZWxxaFs5XQorI2RlZmluZSBza2VsX2J1bGtfcWgJCXNrZWxxaFsxMF0KKyNkZWZpbmUgc2tlbF90ZXJtX3FoCQlza2VscWhbMTFdCisKKy8qCisgKiBTZWFyY2ggdHJlZSBmb3IgZGV0ZXJtaW5pbmcgd2hlcmUgPGludGVydmFsPiBmaXRzIGluIHRoZSBza2VscWhbXQorICogc2tlbGV0b24uCisgKgorICogQW4gaW50ZXJydXB0IHJlcXVlc3Qgc2hvdWxkIGJlIHBsYWNlZCBpbnRvIHRoZSBzbG93ZXN0IHNrZWxxaFtdCisgKiB3aGljaCBtZWV0cyB0aGUgaW50ZXJ2YWwvcGVyaW9kL2ZyZXF1ZW5jeSByZXF1aXJlbWVudC4KKyAqIEFuIGludGVycnVwdCByZXF1ZXN0IGlzIGFsbG93ZWQgdG8gYmUgZmFzdGVyIHRoYW4gPGludGVydmFsPiBidXQgbm90IHNsb3dlci4KKyAqCisgKiBGb3IgYSBnaXZlbiA8aW50ZXJ2YWw+LCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFwcHJvcHJpYXRlL21hdGNoaW5nCisgKiBza2VscWhbXSBpbmRleCB2YWx1ZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgX19pbnRlcnZhbF90b19za2VsKGludCBpbnRlcnZhbCkKK3sKKwlpZiAoaW50ZXJ2YWwgPCAxNikgeworCQlpZiAoaW50ZXJ2YWwgPCA0KSB7CisJCQlpZiAoaW50ZXJ2YWwgPCAyKQorCQkJCXJldHVybiA3OwkvKiBpbnQxIGZvciAwLTEgbXMgKi8KKwkJCXJldHVybiA2OwkJLyogaW50MiBmb3IgMi0zIG1zICovCisJCX0KKwkJaWYgKGludGVydmFsIDwgOCkKKwkJCXJldHVybiA1OwkJLyogaW50NCBmb3IgNC03IG1zICovCisJCXJldHVybiA0OwkJCS8qIGludDggZm9yIDgtMTUgbXMgKi8KKwl9CisJaWYgKGludGVydmFsIDwgNjQpIHsKKwkJaWYgKGludGVydmFsIDwgMzIpCisJCQlyZXR1cm4gMzsJCS8qIGludDE2IGZvciAxNi0zMSBtcyAqLworCQlyZXR1cm4gMjsJCQkvKiBpbnQzMiBmb3IgMzItNjMgbXMgKi8KKwl9CisJaWYgKGludGVydmFsIDwgMTI4KQorCQlyZXR1cm4gMTsJCQkvKiBpbnQ2NCBmb3IgNjQtMTI3IG1zICovCisJcmV0dXJuIDA7CQkJCS8qIGludDEyOCBmb3IgMTI4LTI1NSBtcyAoTWF4LikgKi8KK30KKworLyoKKyAqIERldmljZSBzdGF0ZXMgZm9yIHRoZSBob3N0IGNvbnRyb2xsZXIuCisgKgorICogVG8gcHJldmVudCAiYm91bmNpbmciIGluIHRoZSBwcmVzZW5jZSBvZiBlbGVjdHJpY2FsIG5vaXNlLAorICogd2UgaW5zaXN0IG9uIGEgMS1zZWNvbmQgImdyYWNlIiBwZXJpb2QsIGJlZm9yZSBzd2l0Y2hpbmcgdG8KKyAqIHRoZSBSVU5OSU5HIG9yIFNVU1BFTkRFRCBzdGF0ZXMsIGR1cmluZyB3aGljaCB0aGUgc3RhdGUgaXMKKyAqIG5vdCBhbGxvd2VkIHRvIGNoYW5nZS4KKyAqCisgKiBUaGUgcmVzdW1lIHByb2Nlc3MgaXMgZGl2aWRlZCBpbnRvIHN1YnN0YXRlcyBpbiBvcmRlciB0byBhdm9pZAorICogcG90ZW50aWFsbHkgbGVuZ3RoIGRlbGF5cyBkdXJpbmcgdGhlIHRpbWVyIGhhbmRsZXIuCisgKgorICogU3RhdGVzIGluIHdoaWNoIHRoZSBob3N0IGNvbnRyb2xsZXIgaXMgaGFsdGVkIG11c3QgaGF2ZSB2YWx1ZXMgPD0gMC4KKyAqLworZW51bSB1aGNpX3N0YXRlIHsKKwlVSENJX1JFU0VULAorCVVIQ0lfUlVOTklOR19HUkFDRSwJCS8qIEJlZm9yZSBSVU5OSU5HICovCisJVUhDSV9SVU5OSU5HLAkJCS8qIFRoZSBub3JtYWwgc3RhdGUgKi8KKwlVSENJX1NVU1BFTkRJTkdfR1JBQ0UsCQkvKiBCZWZvcmUgU1VTUEVOREVEICovCisJVUhDSV9TVVNQRU5ERUQgPSAtMTAsCQkvKiBXaGVuIG5vIGRldmljZXMgYXJlIGF0dGFjaGVkICovCisJVUhDSV9SRVNVTUlOR18xLAorCVVIQ0lfUkVTVU1JTkdfMgorfTsKKworLyoKKyAqIFRoaXMgZGVzY3JpYmVzIHRoZSBmdWxsIHVoY2kgaW5mb3JtYXRpb24uCisgKgorICogTm90ZSBob3cgdGhlICJwcm9wZXIiIFVTQiBpbmZvcm1hdGlvbiBpcyBqdXN0CisgKiBhIHN1YnNldCBvZiB3aGF0IHRoZSBmdWxsIGltcGxlbWVudGF0aW9uIG5lZWRzLgorICovCitzdHJ1Y3QgdWhjaV9oY2QgeworCisJLyogZGVidWdmcyAqLworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKworCS8qIEdyYWJiZWQgZnJvbSBQQ0kgKi8KKwl1bnNpZ25lZCBsb25nIGlvX2FkZHI7CisKKwlzdHJ1Y3QgZG1hX3Bvb2wgKnFoX3Bvb2w7CisJc3RydWN0IGRtYV9wb29sICp0ZF9wb29sOworCisJc3RydWN0IHVzYl9idXMgKmJ1czsKKworCXN0cnVjdCB1aGNpX3RkICp0ZXJtX3RkOwkvKiBUZXJtaW5hdGluZyBURCwgc2VlIFVIQ0kgYnVnICovCisJc3RydWN0IHVoY2lfcWggKnNrZWxxaFtVSENJX05VTV9TS0VMUUhdOwkvKiBTa2VsZXRvbiBRSCdzICovCisKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IHVoY2lfZnJhbWVfbGlzdCAqZmw7CQkvKiBQOiB1aGNpLT5sb2NrICovCisJaW50IGZzYnI7CQkJCS8qIEZ1bGwtc3BlZWQgYmFuZHdpZHRoIHJlY2xhbWF0aW9uICovCisJdW5zaWduZWQgbG9uZyBmc2JydGltZW91dDsJCS8qIEZTQlIgZGVsYXkgKi8KKworCWVudW0gdWhjaV9zdGF0ZSBzdGF0ZTsJCQkvKiBGSVhNRTogbmVlZHMgYSBzcGlubG9jayAqLworCXVuc2lnbmVkIGxvbmcgc3RhdGVfZW5kOwkJLyogVGltZSBvZiBuZXh0IHRyYW5zaXRpb24gKi8KKwl1bnNpZ25lZCBpbnQgZnJhbWVfbnVtYmVyOwkJLyogQXMgb2YgbGFzdCBjaGVjayAqLworCXVuc2lnbmVkIGludCBpc19zdG9wcGVkOworI2RlZmluZSBVSENJX0lTX1NUT1BQRUQJCTk5OTkJCS8qIExhcmdlciB0aGFuIGEgZnJhbWUgIyAqLworCisJdW5zaWduZWQgaW50IHNjYW5faW5fcHJvZ3Jlc3M6MTsJLyogU2NoZWR1bGUgc2NhbiBpcyBydW5uaW5nICovCisJdW5zaWduZWQgaW50IG5lZWRfcmVzY2FuOjE7CQkvKiBSZWRvIHRoZSBzY2hlZHVsZSBzY2FuICovCisJdW5zaWduZWQgaW50IHJlc3VtZV9kZXRlY3Q6MTsJCS8qIE5lZWQgYSBHbG9iYWwgUmVzdW1lICovCisKKwkvKiBTdXBwb3J0IGZvciBwb3J0IHN1c3BlbmQvcmVzdW1lL3Jlc2V0ICovCisJdW5zaWduZWQgbG9uZyBwb3J0X2Nfc3VzcGVuZDsJCS8qIEJpdC1hcnJheXMgb2YgcG9ydHMgKi8KKwl1bnNpZ25lZCBsb25nIHN1c3BlbmRlZF9wb3J0czsKKwl1bnNpZ25lZCBsb25nIHJlc3VtaW5nX3BvcnRzOworCXVuc2lnbmVkIGxvbmcgcG9ydHNfdGltZW91dDsJCS8qIFRpbWUgdG8gc3RvcCBzaWduYWxsaW5nICovCisKKwkvKiBNYWluIGxpc3Qgb2YgVVJCJ3MgY3VycmVudGx5IGNvbnRyb2xsZWQgYnkgdGhpcyBIQyAqLworCXN0cnVjdCBsaXN0X2hlYWQgdXJiX2xpc3Q7CQkvKiBQOiB1aGNpLT5sb2NrICovCisKKwkvKiBMaXN0IG9mIFFIJ3MgdGhhdCBhcmUgZG9uZSwgYnV0IHdhaXRpbmcgdG8gYmUgdW5saW5rZWQgKHJhY2UpICovCisJc3RydWN0IGxpc3RfaGVhZCBxaF9yZW1vdmVfbGlzdDsJLyogUDogdWhjaS0+bG9jayAqLworCXVuc2lnbmVkIGludCBxaF9yZW1vdmVfYWdlOwkJLyogQWdlIGluIGZyYW1lcyAqLworCisJLyogTGlzdCBvZiBURCdzIHRoYXQgYXJlIGRvbmUsIGJ1dCB3YWl0aW5nIHRvIGJlIGZyZWVkIChyYWNlKSAqLworCXN0cnVjdCBsaXN0X2hlYWQgdGRfcmVtb3ZlX2xpc3Q7CS8qIFA6IHVoY2ktPmxvY2sgKi8KKwl1bnNpZ25lZCBpbnQgdGRfcmVtb3ZlX2FnZTsJCS8qIEFnZSBpbiBmcmFtZXMgKi8KKworCS8qIExpc3Qgb2YgYXN5bmNocm9ub3VzbHkgdW5saW5rZWQgVVJCJ3MgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHVyYl9yZW1vdmVfbGlzdDsJLyogUDogdWhjaS0+bG9jayAqLworCXVuc2lnbmVkIGludCB1cmJfcmVtb3ZlX2FnZTsJCS8qIEFnZSBpbiBmcmFtZXMgKi8KKworCS8qIExpc3Qgb2YgVVJCJ3MgYXdhaXRpbmcgY29tcGxldGlvbiBjYWxsYmFjayAqLworCXN0cnVjdCBsaXN0X2hlYWQgY29tcGxldGVfbGlzdDsJCS8qIFA6IHVoY2ktPmxvY2sgKi8KKworCWludCByaF9udW1wb3J0czsKKworCXN0cnVjdCB0aW1lcl9saXN0IHN0YWxsX3RpbWVyOworCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHFoOwkJLyogZW5kcG9pbnRfZGlzYWJsZSB3YWl0ZXJzICovCit9OworCisvKiBDb252ZXJ0IGJldHdlZW4gYSB1c2JfaGNkIHBvaW50ZXIgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHVoY2lfaGNkICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1aGNpX2hjZCAqaGNkX3RvX3VoY2koc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlyZXR1cm4gKHN0cnVjdCB1aGNpX2hjZCAqKSAoaGNkLT5oY2RfcHJpdik7Cit9CitzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2JfaGNkICp1aGNpX3RvX2hjZChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZigodm9pZCAqKSB1aGNpLCBzdHJ1Y3QgdXNiX2hjZCwgaGNkX3ByaXYpOworfQorCisjZGVmaW5lIHVoY2lfZGV2KHUpCSh1aGNpX3RvX2hjZCh1KS0+c2VsZi5jb250cm9sbGVyKQorCitzdHJ1Y3QgdXJiX3ByaXYgeworCXN0cnVjdCBsaXN0X2hlYWQgdXJiX2xpc3Q7CisKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwlzdHJ1Y3QgdWhjaV9xaCAqcWg7CQkvKiBRSCBmb3IgdGhpcyBVUkIgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHRkX2xpc3Q7CS8qIFA6IHVyYi0+bG9jayAqLworCisJdW5zaWduZWQgZnNiciA6IDE7CQkvKiBVUkIgdHVybmVkIG9uIEZTQlIgKi8KKwl1bnNpZ25lZCBmc2JyX3RpbWVvdXQgOiAxOwkvKiBVUkIgdGltZWQgb3V0IG9uIEZTQlIgKi8KKwl1bnNpZ25lZCBxdWV1ZWQgOiAxOwkJLyogUUggd2FzIHF1ZXVlZCAobm90IGxpbmtlZCBpbikgKi8KKwl1bnNpZ25lZCBzaG9ydF9jb250cm9sX3BhY2tldCA6IDE7CS8qIElmIHdlIGdldCBhIHNob3J0IHBhY2tldCBkdXJpbmcgKi8KKwkJCQkJCS8qICBhIGNvbnRyb2wgdHJhbnNmZXIsIHJldHJpZ2dlciAqLworCQkJCQkJLyogIHRoZSBzdGF0dXMgcGhhc2UgKi8KKworCXVuc2lnbmVkIGxvbmcgaW5zZXJ0dGltZTsJLyogSW4gamlmZmllcyAqLworCXVuc2lnbmVkIGxvbmcgZnNicnRpbWU7CQkvKiBJbiBqaWZmaWVzICovCisKKwlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlX2xpc3Q7CS8qIFA6IHVoY2ktPmZyYW1lX2xpc3RfbG9jayAqLworfTsKKworLyoKKyAqIExvY2tpbmcgaW4gdWhjaS5jCisgKgorICogQWxtb3N0IGV2ZXJ5dGhpbmcgcmVsYXRpbmcgdG8gdGhlIGhhcmR3YXJlIHNjaGVkdWxlIGFuZCBwcm9jZXNzaW5nCisgKiBvZiBVUkJzIGlzIHByb3RlY3RlZCBieSB1aGNpLT5sb2NrLiAgdXJiLT5zdGF0dXMgaXMgcHJvdGVjdGVkIGJ5CisgKiB1cmItPmxvY2s7IHRoYXQncyB0aGUgb25lIGV4Y2VwdGlvbi4KKyAqCisgKiBUbyBwcmV2ZW50IGRlYWRsb2NrcywgbmV2ZXIgbG9jayB1aGNpLT5sb2NrIHdoaWxlIGhvbGRpbmcgdXJiLT5sb2NrLgorICogVGhlIHNhZmUgb3JkZXIgb2YgbG9ja2luZyBpczoKKyAqCisgKiAjMSB1aGNpLT5sb2NrCisgKiAjMiB1cmItPmxvY2sKKyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1odWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzQ1YmE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWh1Yi5jCkBAIC0wLDAgKzEsMjk5IEBACisvKgorICogVW5pdmVyc2FsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgZHJpdmVyIGZvciBVU0IuCisgKgorICogTWFpbnRhaW5lcjogQWxhbiBTdGVybiA8c3Rlcm5Acm93bGFuZC5oYXJ2YXJkLmVkdT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgTGludXMgVG9ydmFsZHMKKyAqIChDKSBDb3B5cmlnaHQgMTk5OS0yMDAyIEpvaGFubmVzIEVyZGZlbHQsIGpvaGFubmVzQGVyZGZlbHQuY29tCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgUmFuZHkgRHVubGFwCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgR2VvcmcgQWNoZXIsIGFjaGVyQGluLnR1bS5kZQorICogKEMpIENvcHlyaWdodCAxOTk5IERldGkgRmxpZWdsLCBkZXRpQGZsaWVnbC5kZQorICogKEMpIENvcHlyaWdodCAxOTk5IFRob21hcyBTYWlsZXIsIHNhaWxlckBpZmUuZWUuZXRoei5jaAorICogKEMpIENvcHlyaWdodCAyMDA0IEFsYW4gU3Rlcm4sIHN0ZXJuQHJvd2xhbmQuaGFydmFyZC5lZHUKKyAqLworCitzdGF0aWMgX191OCByb290X2h1Yl9odWJfZGVzW10gPQoreworCTB4MDksCQkJLyogIF9fdTggIGJMZW5ndGg7ICovCisJMHgyOSwJCQkvKiAgX191OCAgYkRlc2NyaXB0b3JUeXBlOyBIdWItZGVzY3JpcHRvciAqLworCTB4MDIsCQkJLyogIF9fdTggIGJOYnJQb3J0czsgKi8KKwkweDBhLAkJCS8qIF9fdTE2ICB3SHViQ2hhcmFjdGVyaXN0aWNzOyAqLworCTB4MDAsCQkJLyogICAocGVyLXBvcnQgT0MsIG5vIHBvd2VyIHN3aXRjaGluZykgKi8KKwkweDAxLAkJCS8qICBfX3U4ICBiUHdyT24ycHdyR29vZDsgMm1zICovCisJMHgwMCwJCQkvKiAgX191OCAgYkh1YkNvbnRyQ3VycmVudDsgMCBtQSAqLworCTB4MDAsCQkJLyogIF9fdTggIERldmljZVJlbW92YWJsZTsgKioqIDcgUG9ydHMgbWF4ICoqKiAqLworCTB4ZmYJCQkvKiAgX191OCAgUG9ydFB3ckN0cmxNYXNrOyAqKiogNyBwb3J0cyBtYXggKioqICovCit9OworCisjZGVmaW5lCVVIQ0lfUkhfTUFYQ0hJTEQJNworCisvKiBtdXN0IHdyaXRlIGFzIHplcm9lcyAqLworI2RlZmluZSBXWl9CSVRTCQkoVVNCUE9SVFNDX1JFUzIgfCBVU0JQT1JUU0NfUkVTMyB8IFVTQlBPUlRTQ19SRVM0KQorCisvKiBzdGF0dXMgY2hhbmdlIGJpdHM6ICBub256ZXJvIHdyaXRlcyB3aWxsIGNsZWFyICovCisjZGVmaW5lIFJXQ19CSVRTCShVU0JQT1JUU0NfT0NDIHwgVVNCUE9SVFNDX1BFQyB8IFVTQlBPUlRTQ19DU0MpCisKK3N0YXRpYyBpbnQgdWhjaV9odWJfc3RhdHVzX2RhdGEoc3RydWN0IHVzYl9oY2QgKmhjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CisJaW50IHBvcnQ7CisKKwkqYnVmID0gMDsKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgdWhjaS0+cmhfbnVtcG9ydHM7ICsrcG9ydCkgeworCQlpZiAoKGludyh1aGNpLT5pb19hZGRyICsgVVNCUE9SVFNDMSArIHBvcnQgKiAyKSAmIFJXQ19CSVRTKSB8fAorCQkJCXRlc3RfYml0KHBvcnQsICZ1aGNpLT5wb3J0X2Nfc3VzcGVuZCkpCisJCQkqYnVmIHw9ICgxIDw8IChwb3J0ICsgMSkpOworCX0KKwlpZiAoKmJ1ZiAmJiB1aGNpLT5zdGF0ZSA9PSBVSENJX1NVU1BFTkRFRCkKKwkJdWhjaS0+cmVzdW1lX2RldGVjdCA9IDE7CisJcmV0dXJuICEhKmJ1ZjsKK30KKworI2RlZmluZSBPSyh4KQkJCWxlbiA9ICh4KTsgYnJlYWsKKworI2RlZmluZSBDTFJfUkhfUE9SVFNUQVQoeCkgXAorCXN0YXR1cyA9IGludyhwb3J0X2FkZHIpOyBcCisJc3RhdHVzICY9IH4oUldDX0JJVFN8V1pfQklUUyk7IFwKKwlzdGF0dXMgJj0gfih4KTsgXAorCXN0YXR1cyB8PSBSV0NfQklUUyAmICh4KTsgXAorCW91dHcoc3RhdHVzLCBwb3J0X2FkZHIpCisKKyNkZWZpbmUgU0VUX1JIX1BPUlRTVEFUKHgpIFwKKwlzdGF0dXMgPSBpbncocG9ydF9hZGRyKTsgXAorCXN0YXR1cyB8PSAoeCk7IFwKKwlzdGF0dXMgJj0gfihSV0NfQklUU3xXWl9CSVRTKTsgXAorCW91dHcoc3RhdHVzLCBwb3J0X2FkZHIpCisKKy8qIFVIQ0kgY29udHJvbGxlcnMgZG9uJ3QgYXV0b21hdGljYWxseSBzdG9wIHJlc3VtZSBzaWduYWxsaW5nIGFmdGVyIDIwIG1zZWMsCisgKiBzbyB3ZSBoYXZlIHRvIHBvbGwgYW5kIGNoZWNrIHRpbWVvdXRzIGluIG9yZGVyIHRvIHRha2UgY2FyZSBvZiBpdC4KKyAqLworc3RhdGljIHZvaWQgdWhjaV9maW5pc2hfc3VzcGVuZChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIGludCBwb3J0LAorCQl1bnNpZ25lZCBsb25nIHBvcnRfYWRkcikKK3sKKwlpbnQgc3RhdHVzOworCisJaWYgKHRlc3RfYml0KHBvcnQsICZ1aGNpLT5zdXNwZW5kZWRfcG9ydHMpKSB7CisJCUNMUl9SSF9QT1JUU1RBVChVU0JQT1JUU0NfU1VTUCB8IFVTQlBPUlRTQ19SRCk7CisJCWNsZWFyX2JpdChwb3J0LCAmdWhjaS0+c3VzcGVuZGVkX3BvcnRzKTsKKwkJY2xlYXJfYml0KHBvcnQsICZ1aGNpLT5yZXN1bWluZ19wb3J0cyk7CisJCXNldF9iaXQocG9ydCwgJnVoY2ktPnBvcnRfY19zdXNwZW5kKTsKKworCQkvKiBUaGUgY29udHJvbGxlciB3b24ndCBhY3R1YWxseSB0dXJuIG9mZiB0aGUgUkQgYml0IHVudGlsCisJCSAqIGl0IGhhcyBoYWQgYSBjaGFuY2UgdG8gc2VuZCBhIGxvdy1zcGVlZCBFT1Agc2VxdWVuY2UsCisJCSAqIHdoaWNoIHRha2VzIDMgYml0IHRpbWVzICg9IDIgbWljcm9zZWNvbmRzKS4gIFdlJ2xsIGRlbGF5CisJCSAqIHNsaWdodGx5IGxvbmdlciBmb3IgZ29vZCBsdWNrLiAqLworCQl1ZGVsYXkoNCk7CisJfQorfQorCitzdGF0aWMgdm9pZCB1aGNpX2NoZWNrX3BvcnRzKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSkKK3sKKwl1bnNpZ25lZCBpbnQgcG9ydDsKKwl1bnNpZ25lZCBsb25nIHBvcnRfYWRkcjsKKwlpbnQgc3RhdHVzOworCisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IHVoY2ktPnJoX251bXBvcnRzOyArK3BvcnQpIHsKKwkJcG9ydF9hZGRyID0gdWhjaS0+aW9fYWRkciArIFVTQlBPUlRTQzEgKyAyICogcG9ydDsKKwkJc3RhdHVzID0gaW53KHBvcnRfYWRkcik7CisJCWlmICh1bmxpa2VseShzdGF0dXMgJiBVU0JQT1JUU0NfUFIpKSB7CisJCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB1aGNpLT5wb3J0c190aW1lb3V0KSkgeworCQkJCUNMUl9SSF9QT1JUU1RBVChVU0JQT1JUU0NfUFIpOworCQkJCXVkZWxheSgxMCk7CisKKwkJCQkvKiBJZiB0aGUgcG9ydCB3YXMgZW5hYmxlZCBiZWZvcmUsIHR1cm5pbmcKKwkJCQkgKiByZXNldCBvbiBjYXVzZWQgYSBwb3J0IGVuYWJsZSBjaGFuZ2UuCisJCQkJICogVHVybmluZyByZXNldCBvZmYgY2F1c2VzIGEgcG9ydCBjb25uZWN0CisJCQkJICogc3RhdHVzIGNoYW5nZS4gIENsZWFyIHRoZXNlIGNoYW5nZXMuICovCisJCQkJQ0xSX1JIX1BPUlRTVEFUKFVTQlBPUlRTQ19DU0MgfCBVU0JQT1JUU0NfUEVDKTsKKwkJCQlTRVRfUkhfUE9SVFNUQVQoVVNCUE9SVFNDX1BFKTsKKwkJCX0KKwkJfQorCQlpZiAodW5saWtlbHkoc3RhdHVzICYgVVNCUE9SVFNDX1JEKSkgeworCQkJaWYgKCF0ZXN0X2JpdChwb3J0LCAmdWhjaS0+cmVzdW1pbmdfcG9ydHMpKSB7CisKKwkJCQkvKiBQb3J0IHJlY2VpdmVkIGEgd2FrZXVwIHJlcXVlc3QgKi8KKwkJCQlzZXRfYml0KHBvcnQsICZ1aGNpLT5yZXN1bWluZ19wb3J0cyk7CisJCQkJdWhjaS0+cG9ydHNfdGltZW91dCA9IGppZmZpZXMgKworCQkJCQkJbXNlY3NfdG9famlmZmllcygyMCk7CisJCQl9IGVsc2UgaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywKKwkJCQkJCXVoY2ktPnBvcnRzX3RpbWVvdXQpKSB7CisJCQkJdWhjaV9maW5pc2hfc3VzcGVuZCh1aGNpLCBwb3J0LCBwb3J0X2FkZHIpOworCQkJfQorCQl9CisJfQorfQorCisvKiBzaXplIG9mIHJldHVybmVkIGJ1ZmZlciBpcyBwYXJ0IG9mIFVTQiBzcGVjICovCitzdGF0aWMgaW50IHVoY2lfaHViX2NvbnRyb2woc3RydWN0IHVzYl9oY2QgKmhjZCwgdTE2IHR5cGVSZXEsIHUxNiB3VmFsdWUsCisJCQl1MTYgd0luZGV4LCBjaGFyICpidWYsIHUxNiB3TGVuZ3RoKQoreworCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CisJaW50IHN0YXR1cywgbHN0YXR1cywgcmV0dmFsID0gMCwgbGVuID0gMDsKKwl1bnNpZ25lZCBpbnQgcG9ydCA9IHdJbmRleCAtIDE7CisJdW5zaWduZWQgbG9uZyBwb3J0X2FkZHIgPSB1aGNpLT5pb19hZGRyICsgVVNCUE9SVFNDMSArIDIgKiBwb3J0OworCXUxNiB3UG9ydENoYW5nZSwgd1BvcnRTdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1aGNpLT5sb2NrLCBmbGFncyk7CisJc3dpdGNoICh0eXBlUmVxKSB7CisKKwljYXNlIEdldEh1YlN0YXR1czoKKwkJKihfX2xlMzIgKilidWYgPSBjcHVfdG9fbGUzMigwKTsKKwkJT0soNCk7CQkvKiBodWIgcG93ZXIgKi8KKwljYXNlIEdldFBvcnRTdGF0dXM6CisJCWlmIChwb3J0ID49IHVoY2ktPnJoX251bXBvcnRzKQorCQkJZ290byBlcnI7CisKKwkJdWhjaV9jaGVja19wb3J0cyh1aGNpKTsKKwkJc3RhdHVzID0gaW53KHBvcnRfYWRkcik7CisKKwkJLyogSW50ZWwgY29udHJvbGxlcnMgcmVwb3J0IHRoZSBPdmVyQ3VycmVudCBiaXQgYWN0aXZlIG9uLgorCQkgKiBWSUEgY29udHJvbGxlcnMgcmVwb3J0IGl0IGFjdGl2ZSBvZmYsIHNvIHdlJ2xsIGFkanVzdCB0aGUKKwkJICogYml0IHZhbHVlLiAgKEl0J3Mgbm90IHN0YW5kYXJkaXplZCBpbiB0aGUgVUhDSSBzcGVjLikKKwkJICovCisJCWlmICh0b19wY2lfZGV2KGhjZC0+c2VsZi5jb250cm9sbGVyKS0+dmVuZG9yID09CisJCQkJUENJX1ZFTkRPUl9JRF9WSUEpCisJCQlzdGF0dXMgXj0gVVNCUE9SVFNDX09DOworCisJCS8qIFVIQ0kgZG9lc24ndCBzdXBwb3J0IENfUkVTRVQgKGFsd2F5cyBmYWxzZSkgKi8KKwkJd1BvcnRDaGFuZ2UgPSBsc3RhdHVzID0gMDsKKwkJaWYgKHN0YXR1cyAmIFVTQlBPUlRTQ19DU0MpCisJCQl3UG9ydENoYW5nZSB8PSBVU0JfUE9SVF9TVEFUX0NfQ09OTkVDVElPTjsKKwkJaWYgKHN0YXR1cyAmIFVTQlBPUlRTQ19QRUMpCisJCQl3UG9ydENoYW5nZSB8PSBVU0JfUE9SVF9TVEFUX0NfRU5BQkxFOworCQlpZiAoc3RhdHVzICYgVVNCUE9SVFNDX09DQykKKwkJCXdQb3J0Q2hhbmdlIHw9IFVTQl9QT1JUX1NUQVRfQ19PVkVSQ1VSUkVOVDsKKworCQlpZiAodGVzdF9iaXQocG9ydCwgJnVoY2ktPnBvcnRfY19zdXNwZW5kKSkgeworCQkJd1BvcnRDaGFuZ2UgfD0gVVNCX1BPUlRfU1RBVF9DX1NVU1BFTkQ7CisJCQlsc3RhdHVzIHw9IDE7CisJCX0KKwkJaWYgKHRlc3RfYml0KHBvcnQsICZ1aGNpLT5zdXNwZW5kZWRfcG9ydHMpKQorCQkJbHN0YXR1cyB8PSAyOworCQlpZiAodGVzdF9iaXQocG9ydCwgJnVoY2ktPnJlc3VtaW5nX3BvcnRzKSkKKwkJCWxzdGF0dXMgfD0gNDsKKworCQkvKiBVSENJIGhhcyBubyBwb3dlciBzd2l0Y2hpbmcgKGFsd2F5cyBvbikgKi8KKwkJd1BvcnRTdGF0dXMgPSBVU0JfUE9SVF9TVEFUX1BPV0VSOworCQlpZiAoc3RhdHVzICYgVVNCUE9SVFNDX0NDUykKKwkJCXdQb3J0U3RhdHVzIHw9IFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTjsKKwkJaWYgKHN0YXR1cyAmIFVTQlBPUlRTQ19QRSkgeworCQkJd1BvcnRTdGF0dXMgfD0gVVNCX1BPUlRfU1RBVF9FTkFCTEU7CisJCQlpZiAoc3RhdHVzICYgKFVTQlBPUlRTQ19TVVNQIHwgVVNCUE9SVFNDX1JEKSkKKwkJCQl3UG9ydFN0YXR1cyB8PSBVU0JfUE9SVF9TVEFUX1NVU1BFTkQ7CisJCX0KKwkJaWYgKHN0YXR1cyAmIFVTQlBPUlRTQ19PQykKKwkJCXdQb3J0U3RhdHVzIHw9IFVTQl9QT1JUX1NUQVRfT1ZFUkNVUlJFTlQ7CisJCWlmIChzdGF0dXMgJiBVU0JQT1JUU0NfUFIpCisJCQl3UG9ydFN0YXR1cyB8PSBVU0JfUE9SVF9TVEFUX1JFU0VUOworCQlpZiAoc3RhdHVzICYgVVNCUE9SVFNDX0xTREEpCisJCQl3UG9ydFN0YXR1cyB8PSBVU0JfUE9SVF9TVEFUX0xPV19TUEVFRDsKKworCQlpZiAod1BvcnRDaGFuZ2UpCisJCQlkZXZfZGJnKHVoY2lfZGV2KHVoY2kpLCAicG9ydCAlZCBwb3J0c2MgJTA0eCwlMDJ4XG4iLAorCQkJCQl3SW5kZXgsIHN0YXR1cywgbHN0YXR1cyk7CisKKwkJKihfX2xlMTYgKilidWYgPSBjcHVfdG9fbGUxNih3UG9ydFN0YXR1cyk7CisJCSooX19sZTE2ICopKGJ1ZiArIDIpID0gY3B1X3RvX2xlMTYod1BvcnRDaGFuZ2UpOworCQlPSyg0KTsKKwljYXNlIFNldEh1YkZlYXR1cmU6CQkvKiBXZSBkb24ndCBpbXBsZW1lbnQgdGhlc2UgKi8KKwljYXNlIENsZWFySHViRmVhdHVyZToKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBDX0hVQl9PVkVSX0NVUlJFTlQ6CisJCWNhc2UgQ19IVUJfTE9DQUxfUE9XRVI6CisJCQlPSygwKTsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZXJyOworCQl9CisJCWJyZWFrOworCWNhc2UgU2V0UG9ydEZlYXR1cmU6CisJCWlmIChwb3J0ID49IHVoY2ktPnJoX251bXBvcnRzKQorCQkJZ290byBlcnI7CisKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CisJCQlzZXRfYml0KHBvcnQsICZ1aGNpLT5zdXNwZW5kZWRfcG9ydHMpOworCQkJU0VUX1JIX1BPUlRTVEFUKFVTQlBPUlRTQ19TVVNQKTsKKwkJCU9LKDApOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfUkVTRVQ6CisJCQlTRVRfUkhfUE9SVFNUQVQoVVNCUE9SVFNDX1BSKTsKKworCQkJLyogUmVzZXQgdGVybWluYXRlcyBSZXN1bWUgc2lnbmFsbGluZyAqLworCQkJdWhjaV9maW5pc2hfc3VzcGVuZCh1aGNpLCBwb3J0LCBwb3J0X2FkZHIpOworCisJCQkvKiBVU0IgdjIuMCA3LjEuNy41ICovCisJCQl1aGNpLT5wb3J0c190aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTApOworCQkJT0soMCk7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKKwkJCS8qIFVIQ0kgaGFzIG5vIHBvd2VyIHN3aXRjaGluZyAqLworCQkJT0soMCk7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycjsKKwkJfQorCQlicmVhazsKKwljYXNlIENsZWFyUG9ydEZlYXR1cmU6CisJCWlmIChwb3J0ID49IHVoY2ktPnJoX251bXBvcnRzKQorCQkJZ290byBlcnI7CisKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0VOQUJMRToKKwkJCUNMUl9SSF9QT1JUU1RBVChVU0JQT1JUU0NfUEUpOworCisJCQkvKiBEaXNhYmxlIHRlcm1pbmF0ZXMgUmVzdW1lIHNpZ25hbGxpbmcgKi8KKwkJCXVoY2lfZmluaXNoX3N1c3BlbmQodWhjaSwgcG9ydCwgcG9ydF9hZGRyKTsKKwkJCU9LKDApOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19FTkFCTEU6CisJCQlDTFJfUkhfUE9SVFNUQVQoVVNCUE9SVFNDX1BFQyk7CisJCQlPSygwKTsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CisJCQlpZiAodGVzdF9iaXQocG9ydCwgJnVoY2ktPnN1c3BlbmRlZF9wb3J0cykgJiYKKwkJCQkJIXRlc3RfYW5kX3NldF9iaXQocG9ydCwKKwkJCQkJCSZ1aGNpLT5yZXN1bWluZ19wb3J0cykpIHsKKwkJCQlTRVRfUkhfUE9SVFNUQVQoVVNCUE9SVFNDX1JEKTsKKworCQkJCS8qIFRoZSBjb250cm9sbGVyIHdvbid0IGFsbG93IFJEIHRvIGJlIHNldAorCQkJCSAqIGlmIHRoZSBwb3J0IGlzIGRpc2FibGVkLiAgV2hlbiB0aGlzIGhhcHBlbnMKKwkJCQkgKiBqdXN0IHNraXAgdGhlIFJlc3VtZSBzaWduYWxsaW5nLgorCQkJCSAqLworCQkJCWlmICghKGludyhwb3J0X2FkZHIpICYgVVNCUE9SVFNDX1JEKSkKKwkJCQkJdWhjaV9maW5pc2hfc3VzcGVuZCh1aGNpLCBwb3J0LAorCQkJCQkJCXBvcnRfYWRkcik7CisJCQkJZWxzZQorCQkJCQkvKiBVU0IgdjIuMCA3LjEuNy43ICovCisJCQkJCXVoY2ktPnBvcnRzX3RpbWVvdXQgPSBqaWZmaWVzICsKKwkJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMjApOworCQkJfQorCQkJT0soMCk7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQ6CisJCQljbGVhcl9iaXQocG9ydCwgJnVoY2ktPnBvcnRfY19zdXNwZW5kKTsKKwkJCU9LKDApOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfUE9XRVI6CisJCQkvKiBVSENJIGhhcyBubyBwb3dlciBzd2l0Y2hpbmcgKi8KKwkJCWdvdG8gZXJyOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OOgorCQkJQ0xSX1JIX1BPUlRTVEFUKFVTQlBPUlRTQ19DU0MpOworCQkJT0soMCk7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX09WRVJfQ1VSUkVOVDoKKwkJCUNMUl9SSF9QT1JUU1RBVChVU0JQT1JUU0NfT0NDKTsKKwkJCU9LKDApOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19SRVNFVDoKKwkJCS8qIHRoaXMgZHJpdmVyIHdvbid0IHJlcG9ydCB0aGVzZSAqLworCQkJT0soMCk7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycjsKKwkJfQorCQlicmVhazsKKwljYXNlIEdldEh1YkRlc2NyaXB0b3I6CisJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mKHJvb3RfaHViX2h1Yl9kZXMpLCB3TGVuZ3RoKTsKKwkJbWVtY3B5KGJ1Ziwgcm9vdF9odWJfaHViX2RlcywgbGVuKTsKKwkJaWYgKGxlbiA+IDIpCisJCQlidWZbMl0gPSB1aGNpLT5yaF9udW1wb3J0czsKKwkJT0sobGVuKTsKKwlkZWZhdWx0OgorZXJyOgorCQlyZXR2YWwgPSAtRVBJUEU7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVoY2ktPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTdjMTk1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYwpAQCAtMCwwICsxLDE1MzkgQEAKKy8qCisgKiBVbml2ZXJzYWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBkcml2ZXIgZm9yIFVTQi4KKyAqCisgKiBNYWludGFpbmVyOiBBbGFuIFN0ZXJuIDxzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1PgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBMaW51cyBUb3J2YWxkcworICogKEMpIENvcHlyaWdodCAxOTk5LTIwMDIgSm9oYW5uZXMgRXJkZmVsdCwgam9oYW5uZXNAZXJkZmVsdC5jb20KKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSYW5keSBEdW5sYXAKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBHZW9yZyBBY2hlciwgYWNoZXJAaW4udHVtLmRlCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgRGV0aSBGbGllZ2wsIGRldGlAZmxpZWdsLmRlCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgVGhvbWFzIFNhaWxlciwgc2FpbGVyQGlmZS5lZS5ldGh6LmNoCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyLCB3ZWlzc2dAdmllbm5hLmF0CisgKiAoQykgQ29weXJpZ2h0IDIwMDAgWWdnZHJhc2lsIENvbXB1dGluZywgSW5jLiAocG9ydCBvZiBuZXcgUENJIGludGVyZmFjZQorICogICAgICAgICAgICAgICBzdXBwb3J0IGZyb20gdXNiLW9oY2kuYyBieSBBZGFtIFJpY2h0ZXIsIGFkYW1AeWdnZHJhc2lsLmNvbSkuCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgR3JlZ29yeSBQLiBTbWl0aCAoZnJvbSB1c2Itb2hjaS5jKQorICogKEMpIENvcHlyaWdodCAyMDA0IEFsYW4gU3Rlcm4sIHN0ZXJuQHJvd2xhbmQuaGFydmFyZC5lZHUKKyAqLworCitzdGF0aWMgaW50IHVoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyB2b2lkIHVoY2lfdW5saW5rX2dlbmVyaWMoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQgdWhjaV9yZW1vdmVfcGVuZGluZ191cmJwcyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpOworc3RhdGljIHZvaWQgdWhjaV9mcmVlX3BlbmRpbmdfcWhzKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSk7CitzdGF0aWMgdm9pZCB1aGNpX2ZyZWVfcGVuZGluZ190ZHMoc3RydWN0IHVoY2lfaGNkICp1aGNpKTsKKworLyoKKyAqIFRlY2huaWNhbGx5LCB1cGRhdGluZyB0ZC0+c3RhdHVzIGhlcmUgaXMgYSByYWNlLCBidXQgaXQncyBub3QgcmVhbGx5IGEKKyAqIHByb2JsZW0uIFRoZSB3b3JzdCB0aGF0IGNhbiBoYXBwZW4gaXMgdGhhdCB3ZSBzZXQgdGhlIElPQyBiaXQgYWdhaW4KKyAqIGdlbmVyYXRpbmcgYSBzcHVyaW91cyBpbnRlcnJ1cHQuIFdlIGNvdWxkIGZpeCB0aGlzIGJ5IGNyZWF0aW5nIGFub3RoZXIKKyAqIFFIIGFuZCBsZWF2aW5nIHRoZSBJT0MgYml0IGFsd2F5cyBzZXQsIGJ1dCB0aGVuIHdlIHdvdWxkIGhhdmUgdG8gcGxheQorICogZ2FtZXMgd2l0aCB0aGUgRlNCUiBjb2RlIHRvIG1ha2Ugc3VyZSB3ZSBnZXQgdGhlIGNvcnJlY3Qgb3JkZXIgaW4gYWxsCisgKiB0aGUgY2FzZXMuIEkgZG9uJ3QgdGhpbmsgaXQncyB3b3J0aCB0aGUgZWZmb3J0CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1aGNpX3NldF9uZXh0X2ludGVycnVwdChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCit7CisJdWhjaS0+dGVybV90ZC0+c3RhdHVzIHw9IGNwdV90b19sZTMyKFREX0NUUkxfSU9DKTsgCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1aGNpX2NsZWFyX25leHRfaW50ZXJydXB0KHN0cnVjdCB1aGNpX2hjZCAqdWhjaSkKK3sKKwl1aGNpLT50ZXJtX3RkLT5zdGF0dXMgJj0gfmNwdV90b19sZTMyKFREX0NUUkxfSU9DKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVoY2lfbW92ZXRvX2NvbXBsZXRlKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgCisJCQkJCXN0cnVjdCB1cmJfcHJpdiAqdXJicCkKK3sKKwlsaXN0X21vdmVfdGFpbCgmdXJicC0+dXJiX2xpc3QsICZ1aGNpLT5jb21wbGV0ZV9saXN0KTsKK30KKworc3RhdGljIHN0cnVjdCB1aGNpX3RkICp1aGNpX2FsbG9jX3RkKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVzYl9kZXZpY2UgKmRldikKK3sKKwlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CisJc3RydWN0IHVoY2lfdGQgKnRkOworCisJdGQgPSBkbWFfcG9vbF9hbGxvYyh1aGNpLT50ZF9wb29sLCBHRlBfQVRPTUlDLCAmZG1hX2hhbmRsZSk7CisJaWYgKCF0ZCkKKwkJcmV0dXJuIE5VTEw7CisKKwl0ZC0+ZG1hX2hhbmRsZSA9IGRtYV9oYW5kbGU7CisKKwl0ZC0+bGluayA9IFVIQ0lfUFRSX1RFUk07CisJdGQtPmJ1ZmZlciA9IDA7CisKKwl0ZC0+ZnJhbWUgPSAtMTsKKwl0ZC0+ZGV2ID0gZGV2OworCisJSU5JVF9MSVNUX0hFQUQoJnRkLT5saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmdGQtPnJlbW92ZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmdGQtPmZsX2xpc3QpOworCisJdXNiX2dldF9kZXYoZGV2KTsKKworCXJldHVybiB0ZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVoY2lfZmlsbF90ZChzdHJ1Y3QgdWhjaV90ZCAqdGQsIHUzMiBzdGF0dXMsCisJCXUzMiB0b2tlbiwgdTMyIGJ1ZmZlcikKK3sKKwl0ZC0+c3RhdHVzID0gY3B1X3RvX2xlMzIoc3RhdHVzKTsKKwl0ZC0+dG9rZW4gPSBjcHVfdG9fbGUzMih0b2tlbik7CisJdGQtPmJ1ZmZlciA9IGNwdV90b19sZTMyKGJ1ZmZlcik7Cit9CisKKy8qCisgKiBXZSBpbnNlcnQgSXNvY2hyb25vdXMgVVJCJ3MgZGlyZWN0bHkgaW50byB0aGUgZnJhbWUgbGlzdCBhdCB0aGUgYmVnaW5uaW5nCisgKi8KK3N0YXRpYyB2b2lkIHVoY2lfaW5zZXJ0X3RkX2ZyYW1lX2xpc3Qoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdWhjaV90ZCAqdGQsIHVuc2lnbmVkIGZyYW1lbnVtKQoreworCWZyYW1lbnVtICY9IChVSENJX05VTUZSQU1FUyAtIDEpOworCisJdGQtPmZyYW1lID0gZnJhbWVudW07CisKKwkvKiBJcyB0aGVyZSBhIFREIGFscmVhZHkgbWFwcGVkIHRoZXJlPyAqLworCWlmICh1aGNpLT5mbC0+ZnJhbWVfY3B1W2ZyYW1lbnVtXSkgeworCQlzdHJ1Y3QgdWhjaV90ZCAqZnRkLCAqbHRkOworCisJCWZ0ZCA9IHVoY2ktPmZsLT5mcmFtZV9jcHVbZnJhbWVudW1dOworCQlsdGQgPSBsaXN0X2VudHJ5KGZ0ZC0+ZmxfbGlzdC5wcmV2LCBzdHJ1Y3QgdWhjaV90ZCwgZmxfbGlzdCk7CisKKwkJbGlzdF9hZGRfdGFpbCgmdGQtPmZsX2xpc3QsICZmdGQtPmZsX2xpc3QpOworCisJCXRkLT5saW5rID0gbHRkLT5saW5rOworCQl3bWIoKTsKKwkJbHRkLT5saW5rID0gY3B1X3RvX2xlMzIodGQtPmRtYV9oYW5kbGUpOworCX0gZWxzZSB7CisJCXRkLT5saW5rID0gdWhjaS0+ZmwtPmZyYW1lW2ZyYW1lbnVtXTsKKwkJd21iKCk7CisJCXVoY2ktPmZsLT5mcmFtZVtmcmFtZW51bV0gPSBjcHVfdG9fbGUzMih0ZC0+ZG1hX2hhbmRsZSk7CisJCXVoY2ktPmZsLT5mcmFtZV9jcHVbZnJhbWVudW1dID0gdGQ7CisJfQorfQorCitzdGF0aWMgdm9pZCB1aGNpX3JlbW92ZV90ZChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1aGNpX3RkICp0ZCkKK3sKKwkvKiBJZiBpdCdzIG5vdCBpbnNlcnRlZCwgZG9uJ3QgcmVtb3ZlIGl0ICovCisJaWYgKHRkLT5mcmFtZSA9PSAtMSAmJiBsaXN0X2VtcHR5KCZ0ZC0+ZmxfbGlzdCkpCisJCXJldHVybjsKKworCWlmICh0ZC0+ZnJhbWUgIT0gLTEgJiYgdWhjaS0+ZmwtPmZyYW1lX2NwdVt0ZC0+ZnJhbWVdID09IHRkKSB7CisJCWlmIChsaXN0X2VtcHR5KCZ0ZC0+ZmxfbGlzdCkpIHsKKwkJCXVoY2ktPmZsLT5mcmFtZVt0ZC0+ZnJhbWVdID0gdGQtPmxpbms7CisJCQl1aGNpLT5mbC0+ZnJhbWVfY3B1W3RkLT5mcmFtZV0gPSBOVUxMOworCQl9IGVsc2UgeworCQkJc3RydWN0IHVoY2lfdGQgKm50ZDsKKworCQkJbnRkID0gbGlzdF9lbnRyeSh0ZC0+ZmxfbGlzdC5uZXh0LCBzdHJ1Y3QgdWhjaV90ZCwgZmxfbGlzdCk7CisJCQl1aGNpLT5mbC0+ZnJhbWVbdGQtPmZyYW1lXSA9IGNwdV90b19sZTMyKG50ZC0+ZG1hX2hhbmRsZSk7CisJCQl1aGNpLT5mbC0+ZnJhbWVfY3B1W3RkLT5mcmFtZV0gPSBudGQ7CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3QgdWhjaV90ZCAqcHRkOworCisJCXB0ZCA9IGxpc3RfZW50cnkodGQtPmZsX2xpc3QucHJldiwgc3RydWN0IHVoY2lfdGQsIGZsX2xpc3QpOworCQlwdGQtPmxpbmsgPSB0ZC0+bGluazsKKwl9CisKKwl3bWIoKTsKKwl0ZC0+bGluayA9IFVIQ0lfUFRSX1RFUk07CisKKwlsaXN0X2RlbF9pbml0KCZ0ZC0+ZmxfbGlzdCk7CisJdGQtPmZyYW1lID0gLTE7Cit9CisKKy8qCisgKiBJbnNlcnRzIGEgdGQgbGlzdCBpbnRvIHFoLgorICovCitzdGF0aWMgdm9pZCB1aGNpX2luc2VydF90ZHNfaW5fcWgoc3RydWN0IHVoY2lfcWggKnFoLCBzdHJ1Y3QgdXJiICp1cmIsIF9fbGUzMiBicmVhZHRoKQoreworCXN0cnVjdCB1cmJfcHJpdiAqdXJicCA9IChzdHJ1Y3QgdXJiX3ByaXYgKil1cmItPmhjcHJpdjsKKwlzdHJ1Y3QgdWhjaV90ZCAqdGQ7CisJX19sZTMyICpwbGluazsKKworCS8qIE9yZGVyaW5nIGlzbid0IGltcG9ydGFudCBoZXJlIHlldCBzaW5jZSB0aGUgUUggaGFzbid0IGJlZW4gKi8KKwkvKiBpbnNlcnRlZCBpbnRvIHRoZSBzY2hlZHVsZSB5ZXQgKi8KKwlwbGluayA9ICZxaC0+ZWxlbWVudDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRkLCAmdXJicC0+dGRfbGlzdCwgbGlzdCkgeworCQkqcGxpbmsgPSBjcHVfdG9fbGUzMih0ZC0+ZG1hX2hhbmRsZSkgfCBicmVhZHRoOworCQlwbGluayA9ICZ0ZC0+bGluazsKKwl9CisJKnBsaW5rID0gVUhDSV9QVFJfVEVSTTsKK30KKworc3RhdGljIHZvaWQgdWhjaV9mcmVlX3RkKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVoY2lfdGQgKnRkKQoreworCWlmICghbGlzdF9lbXB0eSgmdGQtPmxpc3QpKQorCQlkZXZfd2Fybih1aGNpX2Rldih1aGNpKSwgInRkICVwIHN0aWxsIGluIGxpc3QhXG4iLCB0ZCk7CisJaWYgKCFsaXN0X2VtcHR5KCZ0ZC0+cmVtb3ZlX2xpc3QpKQorCQlkZXZfd2Fybih1aGNpX2Rldih1aGNpKSwgInRkICVwIHN0aWxsIGluIHJlbW92ZV9saXN0IVxuIiwgdGQpOworCWlmICghbGlzdF9lbXB0eSgmdGQtPmZsX2xpc3QpKQorCQlkZXZfd2Fybih1aGNpX2Rldih1aGNpKSwgInRkICVwIHN0aWxsIGluIGZsX2xpc3QhXG4iLCB0ZCk7CisKKwlpZiAodGQtPmRldikKKwkJdXNiX3B1dF9kZXYodGQtPmRldik7CisKKwlkbWFfcG9vbF9mcmVlKHVoY2ktPnRkX3Bvb2wsIHRkLCB0ZC0+ZG1hX2hhbmRsZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdWhjaV9xaCAqdWhjaV9hbGxvY19xaChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOworCXN0cnVjdCB1aGNpX3FoICpxaDsKKworCXFoID0gZG1hX3Bvb2xfYWxsb2ModWhjaS0+cWhfcG9vbCwgR0ZQX0FUT01JQywgJmRtYV9oYW5kbGUpOworCWlmICghcWgpCisJCXJldHVybiBOVUxMOworCisJcWgtPmRtYV9oYW5kbGUgPSBkbWFfaGFuZGxlOworCisJcWgtPmVsZW1lbnQgPSBVSENJX1BUUl9URVJNOworCXFoLT5saW5rID0gVUhDSV9QVFJfVEVSTTsKKworCXFoLT5kZXYgPSBkZXY7CisJcWgtPnVyYnAgPSBOVUxMOworCisJSU5JVF9MSVNUX0hFQUQoJnFoLT5saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcWgtPnJlbW92ZV9saXN0KTsKKworCXVzYl9nZXRfZGV2KGRldik7CisKKwlyZXR1cm4gcWg7Cit9CisKK3N0YXRpYyB2b2lkIHVoY2lfZnJlZV9xaChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1aGNpX3FoICpxaCkKK3sKKwlpZiAoIWxpc3RfZW1wdHkoJnFoLT5saXN0KSkKKwkJZGV2X3dhcm4odWhjaV9kZXYodWhjaSksICJxaCAlcCBsaXN0IG5vdCBlbXB0eSFcbiIsIHFoKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnFoLT5yZW1vdmVfbGlzdCkpCisJCWRldl93YXJuKHVoY2lfZGV2KHVoY2kpLCAicWggJXAgc3RpbGwgaW4gcmVtb3ZlX2xpc3QhXG4iLCBxaCk7CisKKwlpZiAocWgtPmRldikKKwkJdXNiX3B1dF9kZXYocWgtPmRldik7CisKKwlkbWFfcG9vbF9mcmVlKHVoY2ktPnFoX3Bvb2wsIHFoLCBxaC0+ZG1hX2hhbmRsZSk7Cit9CisKKy8qCisgKiBBcHBlbmQgdGhpcyB1cmIncyBxaCBhZnRlciB0aGUgbGFzdCBxaCBpbiBza2VscWgtPmxpc3QKKyAqCisgKiBOb3RlIHRoYXQgdXJiX3ByaXYucXVldWVfbGlzdCBkb2Vzbid0IGhhdmUgYSBzZXBhcmF0ZSBxdWV1ZSBoZWFkOworICogaXQncyBhIHJpbmcgd2l0aCBldmVyeSBlbGVtZW50ICJsaXZlIi4KKyAqLworc3RhdGljIHZvaWQgdWhjaV9pbnNlcnRfcWgoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdWhjaV9xaCAqc2tlbHFoLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKXVyYi0+aGNwcml2OworCXN0cnVjdCB1cmJfcHJpdiAqdHVyYnA7CisJc3RydWN0IHVoY2lfcWggKmxxaDsKKworCS8qIEdyYWIgdGhlIGxhc3QgUUggKi8KKwlscWggPSBsaXN0X2VudHJ5KHNrZWxxaC0+bGlzdC5wcmV2LCBzdHJ1Y3QgdWhjaV9xaCwgbGlzdCk7CisKKwkvKiBQb2ludCB0byB0aGUgbmV4dCBza2VscWggKi8KKwl1cmJwLT5xaC0+bGluayA9IGxxaC0+bGluazsKKwl3bWIoKTsJCQkJLyogT3JkZXJpbmcgaXMgaW1wb3J0YW50ICovCisKKwkvKgorCSAqIFBhdGNoIFFIcyBmb3IgcHJldmlvdXMgZW5kcG9pbnQncyBxdWV1ZWQgVVJCcz8gIEhDIGdvZXMKKwkgKiBoZXJlIG5leHQsIG5vdCB0byB0aGUgbmV4dCBza2VscWggaXQgbm93IHBvaW50cyB0by4KKwkgKgorCSAqICAgIGxxaCAtLT4gdGQgLi4uIC0tPiBxaCAuLi4gLS0+IHRkIC0tPiBxaCAuLi4gLS0+IHRkCisJICogICAgIHwgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwKKwkgKiAgICAgdiAgICAgICAgICAgICAgICAgdiAgICAgICAgICAgICAgICAgdgorCSAqICAgICArPC0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCisJICogICAgIHYKKwkgKiAgICBuZXdxaCAtLT4gdGQgLi4uIC0tPiB0ZAorCSAqICAgICB8CisJICogICAgIHYKKwkgKiAgICAuLi4KKwkgKgorCSAqIFRoZSBIQyBjb3VsZCBzZWUgKGFuZCB1c2UhKSBhbnkgb2YgdGhlc2UgYXMgd2Ugd3JpdGUgdGhlbS4KKwkgKi8KKwlscWgtPmxpbmsgPSBjcHVfdG9fbGUzMih1cmJwLT5xaC0+ZG1hX2hhbmRsZSkgfCBVSENJX1BUUl9RSDsKKwlpZiAobHFoLT51cmJwKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkodHVyYnAsICZscWgtPnVyYnAtPnF1ZXVlX2xpc3QsIHF1ZXVlX2xpc3QpCisJCQl0dXJicC0+cWgtPmxpbmsgPSBscWgtPmxpbms7CisJfQorCisJbGlzdF9hZGRfdGFpbCgmdXJicC0+cWgtPmxpc3QsICZza2VscWgtPmxpc3QpOworfQorCisvKgorICogU3RhcnQgcmVtb3ZhbCBvZiBRSCBmcm9tIHNjaGVkdWxlOyBpdCBmaW5pc2hlcyBuZXh0IGZyYW1lLgorICogVERzIHNob3VsZCBiZSB1bmxpbmtlZCBiZWZvcmUgdGhpcyBpcyBjYWxsZWQuCisgKi8KK3N0YXRpYyB2b2lkIHVoY2lfcmVtb3ZlX3FoKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVoY2lfcWggKnFoKQoreworCXN0cnVjdCB1aGNpX3FoICpwcWg7CisJX19sZTMyIG5ld2xpbms7CisKKwlpZiAoIXFoKQorCQlyZXR1cm47CisKKwkvKgorCSAqIE9ubHkgZ28gdGhyb3VnaCB0aGUgaG9vcHMgaWYgaXQncyBhY3R1YWxseSBsaW5rZWQgaW4KKwkgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJnFoLT5saXN0KSkgeworCisJCS8qIElmIG91ciBxdWV1ZSBpcyBub25lbXB0eSwgbWFrZSB0aGUgbmV4dCBVUkIgdGhlIGhlYWQgKi8KKwkJaWYgKCFsaXN0X2VtcHR5KCZxaC0+dXJicC0+cXVldWVfbGlzdCkpIHsKKwkJCXN0cnVjdCB1cmJfcHJpdiAqbnVyYnA7CisKKwkJCW51cmJwID0gbGlzdF9lbnRyeShxaC0+dXJicC0+cXVldWVfbGlzdC5uZXh0LAorCQkJCQlzdHJ1Y3QgdXJiX3ByaXYsIHF1ZXVlX2xpc3QpOworCQkJbnVyYnAtPnF1ZXVlZCA9IDA7CisJCQlsaXN0X2FkZCgmbnVyYnAtPnFoLT5saXN0LCAmcWgtPmxpc3QpOworCQkJbmV3bGluayA9IGNwdV90b19sZTMyKG51cmJwLT5xaC0+ZG1hX2hhbmRsZSkgfCBVSENJX1BUUl9RSDsKKwkJfSBlbHNlCisJCQluZXdsaW5rID0gcWgtPmxpbms7CisKKwkJLyogRml4IHVwIHRoZSBwcmV2aW91cyBRSCdzIHF1ZXVlIHRvIGxpbmsgdG8gZWl0aGVyCisJCSAqIHRoZSBuZXcgaGVhZCBvZiB0aGlzIHF1ZXVlIG9yIHRoZSBzdGFydCBvZiB0aGUKKwkJICogbmV4dCBlbmRwb2ludCdzIHF1ZXVlLiAqLworCQlwcWggPSBsaXN0X2VudHJ5KHFoLT5saXN0LnByZXYsIHN0cnVjdCB1aGNpX3FoLCBsaXN0KTsKKwkJcHFoLT5saW5rID0gbmV3bGluazsKKwkJaWYgKHBxaC0+dXJicCkgeworCQkJc3RydWN0IHVyYl9wcml2ICp0dXJicDsKKworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0dXJicCwgJnBxaC0+dXJicC0+cXVldWVfbGlzdCwKKwkJCQkJcXVldWVfbGlzdCkKKwkJCQl0dXJicC0+cWgtPmxpbmsgPSBuZXdsaW5rOworCQl9CisJCXdtYigpOworCisJCS8qIExlYXZlIHFoLT5saW5rIGluIGNhc2UgdGhlIEhDIGlzIG9uIHRoZSBRSCBub3csIGl0IHdpbGwgKi8KKwkJLyogY29udGludWUgdGhlIHJlc3Qgb2YgdGhlIHNjaGVkdWxlICovCisJCXFoLT5lbGVtZW50ID0gVUhDSV9QVFJfVEVSTTsKKworCQlsaXN0X2RlbF9pbml0KCZxaC0+bGlzdCk7CisJfQorCisJbGlzdF9kZWxfaW5pdCgmcWgtPnVyYnAtPnF1ZXVlX2xpc3QpOworCXFoLT51cmJwID0gTlVMTDsKKworCXVoY2lfZ2V0X2N1cnJlbnRfZnJhbWVfbnVtYmVyKHVoY2kpOworCWlmICh1aGNpLT5mcmFtZV9udW1iZXIgKyB1aGNpLT5pc19zdG9wcGVkICE9IHVoY2ktPnFoX3JlbW92ZV9hZ2UpIHsKKwkJdWhjaV9mcmVlX3BlbmRpbmdfcWhzKHVoY2kpOworCQl1aGNpLT5xaF9yZW1vdmVfYWdlID0gdWhjaS0+ZnJhbWVfbnVtYmVyOworCX0KKworCS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgcmVtb3ZlIGxpc3QgaXMgZW1wdHkuIFNldCB0aGUgSU9DIGJpdCAqLworCS8qIHRvIGZvcmNlIGFuIGludGVycnVwdCBzbyB3ZSBjYW4gcmVtb3ZlIHRoZSBRSCAqLworCWlmIChsaXN0X2VtcHR5KCZ1aGNpLT5xaF9yZW1vdmVfbGlzdCkpCisJCXVoY2lfc2V0X25leHRfaW50ZXJydXB0KHVoY2kpOworCisJbGlzdF9hZGQoJnFoLT5yZW1vdmVfbGlzdCwgJnVoY2ktPnFoX3JlbW92ZV9saXN0KTsKK30KKworc3RhdGljIGludCB1aGNpX2ZpeHVwX3RvZ2dsZShzdHJ1Y3QgdXJiICp1cmIsIHVuc2lnbmVkIGludCB0b2dnbGUpCit7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKXVyYi0+aGNwcml2OworCXN0cnVjdCB1aGNpX3RkICp0ZDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodGQsICZ1cmJwLT50ZF9saXN0LCBsaXN0KSB7CisJCWlmICh0b2dnbGUpCisJCQl0ZC0+dG9rZW4gfD0gY3B1X3RvX2xlMzIoVERfVE9LRU5fVE9HR0xFKTsKKwkJZWxzZQorCQkJdGQtPnRva2VuICY9IH5jcHVfdG9fbGUzMihURF9UT0tFTl9UT0dHTEUpOworCisJCXRvZ2dsZSBePSAxOworCX0KKworCXJldHVybiB0b2dnbGU7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gd2lsbCBhcHBlbmQgb25lIFVSQidzIFFIIHRvIGFub3RoZXIgVVJCJ3MgUUguIFRoaXMgaXMgZm9yICovCisvKiBxdWV1aW5nIGludGVycnVwdCwgY29udHJvbCBvciBidWxrIHRyYW5zZmVycyAqLworc3RhdGljIHZvaWQgdWhjaV9hcHBlbmRfcXVldWVkX3VyYihzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKmV1cmIsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXJiX3ByaXYgKmV1cmJwLCAqdXJicCwgKmZ1cmJwLCAqbHVyYnA7CisJc3RydWN0IHVoY2lfdGQgKmxsdGQ7CisKKwlldXJicCA9IGV1cmItPmhjcHJpdjsKKwl1cmJwID0gdXJiLT5oY3ByaXY7CisKKwkvKiBGaW5kIHRoZSBmaXJzdCBVUkIgaW4gdGhlIHF1ZXVlICovCisJZnVyYnAgPSBldXJicDsKKwlpZiAoZXVyYnAtPnF1ZXVlZCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZ1cmJwLCAmZXVyYnAtPnF1ZXVlX2xpc3QsIHF1ZXVlX2xpc3QpCisJCQlpZiAoIWZ1cmJwLT5xdWV1ZWQpCisJCQkJYnJlYWs7CisJfQorCisJbHVyYnAgPSBsaXN0X2VudHJ5KGZ1cmJwLT5xdWV1ZV9saXN0LnByZXYsIHN0cnVjdCB1cmJfcHJpdiwgcXVldWVfbGlzdCk7CisKKwlsbHRkID0gbGlzdF9lbnRyeShsdXJicC0+dGRfbGlzdC5wcmV2LCBzdHJ1Y3QgdWhjaV90ZCwgbGlzdCk7CisKKwkvKiBDb250cm9sIHRyYW5zZmVycyBhbHdheXMgc3RhcnQgd2l0aCB0b2dnbGUgMCAqLworCWlmICghdXNiX3BpcGVjb250cm9sKHVyYi0+cGlwZSkpCisJCXVzYl9zZXR0b2dnbGUodXJiLT5kZXYsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKKwkJCQl1c2JfcGlwZW91dCh1cmItPnBpcGUpLAorCQkJCXVoY2lfZml4dXBfdG9nZ2xlKHVyYiwKKwkJCQkJdWhjaV90b2dnbGUodGRfdG9rZW4obGx0ZCkpIF4gMSkpOworCisJLyogQWxsIHFoJ3MgaW4gdGhlIHF1ZXVlIG5lZWQgdG8gbGluayB0byB0aGUgbmV4dCBxdWV1ZSAqLworCXVyYnAtPnFoLT5saW5rID0gZXVyYnAtPnFoLT5saW5rOworCisJd21iKCk7CQkJLyogTWFrZSBzdXJlIHdlIGZsdXNoIGV2ZXJ5dGhpbmcgKi8KKworCWxsdGQtPmxpbmsgPSBjcHVfdG9fbGUzMih1cmJwLT5xaC0+ZG1hX2hhbmRsZSkgfCBVSENJX1BUUl9RSDsKKworCWxpc3RfYWRkX3RhaWwoJnVyYnAtPnF1ZXVlX2xpc3QsICZmdXJicC0+cXVldWVfbGlzdCk7CisKKwl1cmJwLT5xdWV1ZWQgPSAxOworfQorCitzdGF0aWMgdm9pZCB1aGNpX2RlbGV0ZV9xdWV1ZWRfdXJiKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1cmJfcHJpdiAqdXJicCwgKm51cmJwLCAqcHVyYnAsICp0dXJicDsKKwlzdHJ1Y3QgdWhjaV90ZCAqcGx0ZDsKKwl1bnNpZ25lZCBpbnQgdG9nZ2xlOworCisJdXJicCA9IHVyYi0+aGNwcml2OworCisJaWYgKGxpc3RfZW1wdHkoJnVyYnAtPnF1ZXVlX2xpc3QpKQorCQlyZXR1cm47CisKKwludXJicCA9IGxpc3RfZW50cnkodXJicC0+cXVldWVfbGlzdC5uZXh0LCBzdHJ1Y3QgdXJiX3ByaXYsIHF1ZXVlX2xpc3QpOworCisJLyoKKwkgKiBGaXggdXAgdGhlIHRvZ2dsZSBmb3IgdGhlIGZvbGxvd2luZyBVUkJzIGluIHRoZSBxdWV1ZS4KKwkgKiBPbmx5IG5lZWRlZCBmb3IgYnVsayBhbmQgaW50ZXJydXB0OiBjb250cm9sIGFuZCBpc29jaHJvbm91cworCSAqIGVuZHBvaW50cyBkb24ndCBwcm9wYWdhdGUgdG9nZ2xlcyBiZXR3ZWVuIG1lc3NhZ2VzLgorCSAqLworCWlmICh1c2JfcGlwZWJ1bGsodXJiLT5waXBlKSB8fCB1c2JfcGlwZWludCh1cmItPnBpcGUpKSB7CisJCWlmICghdXJicC0+cXVldWVkKQorCQkJLyogV2UganVzdCBzZXQgdGhlIHRvZ2dsZSBpbiB1aGNpX3VubGlua19nZW5lcmljICovCisJCQl0b2dnbGUgPSB1c2JfZ2V0dG9nZ2xlKHVyYi0+ZGV2LAorCQkJCQl1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCisJCQkJCXVzYl9waXBlb3V0KHVyYi0+cGlwZSkpOworCQllbHNlIHsKKwkJCS8qIElmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgdGhlIHF1ZXVlLCBncmFiIHRoZSAqLworCQkJLyogdG9nZ2xlIGZyb20gdGhlIFREIHByZXZpb3VzIHRvIHVzICovCisJCQlwdXJicCA9IGxpc3RfZW50cnkodXJicC0+cXVldWVfbGlzdC5wcmV2LAorCQkJCQlzdHJ1Y3QgdXJiX3ByaXYsIHF1ZXVlX2xpc3QpOworCQkJcGx0ZCA9IGxpc3RfZW50cnkocHVyYnAtPnRkX2xpc3QucHJldiwKKwkJCQkJc3RydWN0IHVoY2lfdGQsIGxpc3QpOworCQkJdG9nZ2xlID0gdWhjaV90b2dnbGUodGRfdG9rZW4ocGx0ZCkpIF4gMTsKKwkJfQorCisJCWxpc3RfZm9yX2VhY2hfZW50cnkodHVyYnAsICZ1cmJwLT5xdWV1ZV9saXN0LCBxdWV1ZV9saXN0KSB7CisJCQlpZiAoIXR1cmJwLT5xdWV1ZWQpCisJCQkJYnJlYWs7CisJCQl0b2dnbGUgPSB1aGNpX2ZpeHVwX3RvZ2dsZSh0dXJicC0+dXJiLCB0b2dnbGUpOworCQl9CisKKwkJdXNiX3NldHRvZ2dsZSh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLAorCQkJCXVzYl9waXBlb3V0KHVyYi0+cGlwZSksIHRvZ2dsZSk7CisJfQorCisJaWYgKHVyYnAtPnF1ZXVlZCkgeworCQkvKiBXZSdyZSBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSAob3IgZW5kKS4gIFRoZSBjYXNlIHdoZXJlCisJCSAqIHdlJ3JlIGF0IHRoZSBoZWFkIGlzIGhhbmRsZWQgaW4gdWhjaV9yZW1vdmVfcWgoKS4gKi8KKwkJcHVyYnAgPSBsaXN0X2VudHJ5KHVyYnAtPnF1ZXVlX2xpc3QucHJldiwgc3RydWN0IHVyYl9wcml2LAorCQkJCXF1ZXVlX2xpc3QpOworCisJCXBsdGQgPSBsaXN0X2VudHJ5KHB1cmJwLT50ZF9saXN0LnByZXYsIHN0cnVjdCB1aGNpX3RkLCBsaXN0KTsKKwkJaWYgKG51cmJwLT5xdWV1ZWQpCisJCQlwbHRkLT5saW5rID0gY3B1X3RvX2xlMzIobnVyYnAtPnFoLT5kbWFfaGFuZGxlKSB8IFVIQ0lfUFRSX1FIOworCQllbHNlCisJCQkvKiBUaGUgbmV4dCBVUkIgaGFwcGVucyB0byBiZSB0aGUgYmVnaW5uaW5nLCBzbyAqLworCQkJLyogIHdlJ3JlIHRoZSBsYXN0LCBlbmQgdGhlIGNoYWluICovCisJCQlwbHRkLT5saW5rID0gVUhDSV9QVFJfVEVSTTsKKwl9CisKKwkvKiB1cmJwLT5xdWV1ZV9saXN0IGlzIGhhbmRsZWQgaW4gdWhjaV9yZW1vdmVfcWgoKSAqLworfQorCitzdGF0aWMgc3RydWN0IHVyYl9wcml2ICp1aGNpX2FsbG9jX3VyYl9wcml2KHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1cmJfcHJpdiAqdXJicDsKKworCXVyYnAgPSBrbWVtX2NhY2hlX2FsbG9jKHVoY2lfdXBfY2FjaGVwLCBTTEFCX0FUT01JQyk7CisJaWYgKCF1cmJwKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldCgodm9pZCAqKXVyYnAsIDAsIHNpemVvZigqdXJicCkpOworCisJdXJicC0+aW5zZXJ0dGltZSA9IGppZmZpZXM7CisJdXJicC0+ZnNicnRpbWUgPSBqaWZmaWVzOworCXVyYnAtPnVyYiA9IHVyYjsKKwkKKwlJTklUX0xJU1RfSEVBRCgmdXJicC0+dGRfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnVyYnAtPnF1ZXVlX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZ1cmJwLT51cmJfbGlzdCk7CisKKwlsaXN0X2FkZF90YWlsKCZ1cmJwLT51cmJfbGlzdCwgJnVoY2ktPnVyYl9saXN0KTsKKworCXVyYi0+aGNwcml2ID0gdXJicDsKKworCXJldHVybiB1cmJwOworfQorCitzdGF0aWMgdm9pZCB1aGNpX2FkZF90ZF90b191cmIoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgdWhjaV90ZCAqdGQpCit7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKXVyYi0+aGNwcml2OworCisJdGQtPnVyYiA9IHVyYjsKKworCWxpc3RfYWRkX3RhaWwoJnRkLT5saXN0LCAmdXJicC0+dGRfbGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHVoY2lfcmVtb3ZlX3RkX2Zyb21fdXJiKHN0cnVjdCB1aGNpX3RkICp0ZCkKK3sKKwlpZiAobGlzdF9lbXB0eSgmdGQtPmxpc3QpKQorCQlyZXR1cm47CisKKwlsaXN0X2RlbF9pbml0KCZ0ZC0+bGlzdCk7CisKKwl0ZC0+dXJiID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgdWhjaV9kZXN0cm95X3VyYl9wcml2KHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1aGNpX3RkICp0ZCwgKnRtcDsKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnA7CisKKwl1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKXVyYi0+aGNwcml2OworCWlmICghdXJicCkKKwkJcmV0dXJuOworCisJaWYgKCFsaXN0X2VtcHR5KCZ1cmJwLT51cmJfbGlzdCkpCisJCWRldl93YXJuKHVoY2lfZGV2KHVoY2kpLCAidXJiICVwIHN0aWxsIG9uIHVoY2ktPnVyYl9saXN0ICIKKwkJCQkib3IgdWhjaS0+cmVtb3ZlX2xpc3QhXG4iLCB1cmIpOworCisJdWhjaV9nZXRfY3VycmVudF9mcmFtZV9udW1iZXIodWhjaSk7CisJaWYgKHVoY2ktPmZyYW1lX251bWJlciArIHVoY2ktPmlzX3N0b3BwZWQgIT0gdWhjaS0+dGRfcmVtb3ZlX2FnZSkgeworCQl1aGNpX2ZyZWVfcGVuZGluZ190ZHModWhjaSk7CisJCXVoY2ktPnRkX3JlbW92ZV9hZ2UgPSB1aGNpLT5mcmFtZV9udW1iZXI7CisJfQorCisJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSByZW1vdmUgbGlzdCBpcyBlbXB0eS4gU2V0IHRoZSBJT0MgYml0ICovCisJLyogdG8gZm9yY2UgYW4gaW50ZXJydXB0IHNvIHdlIGNhbiByZW1vdmUgdGhlIFREJ3MqLworCWlmIChsaXN0X2VtcHR5KCZ1aGNpLT50ZF9yZW1vdmVfbGlzdCkpCisJCXVoY2lfc2V0X25leHRfaW50ZXJydXB0KHVoY2kpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRkLCB0bXAsICZ1cmJwLT50ZF9saXN0LCBsaXN0KSB7CisJCXVoY2lfcmVtb3ZlX3RkX2Zyb21fdXJiKHRkKTsKKwkJdWhjaV9yZW1vdmVfdGQodWhjaSwgdGQpOworCQlsaXN0X2FkZCgmdGQtPnJlbW92ZV9saXN0LCAmdWhjaS0+dGRfcmVtb3ZlX2xpc3QpOworCX0KKworCXVyYi0+aGNwcml2ID0gTlVMTDsKKwlrbWVtX2NhY2hlX2ZyZWUodWhjaV91cF9jYWNoZXAsIHVyYnApOworfQorCitzdGF0aWMgdm9pZCB1aGNpX2luY19mc2JyKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1cmJfcHJpdiAqdXJicCA9IChzdHJ1Y3QgdXJiX3ByaXYgKil1cmItPmhjcHJpdjsKKworCWlmICgoISh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX05PX0ZTQlIpKSAmJiAhdXJicC0+ZnNicikgeworCQl1cmJwLT5mc2JyID0gMTsKKwkJaWYgKCF1aGNpLT5mc2JyKysgJiYgIXVoY2ktPmZzYnJ0aW1lb3V0KQorCQkJdWhjaS0+c2tlbF90ZXJtX3FoLT5saW5rID0gY3B1X3RvX2xlMzIodWhjaS0+c2tlbF9mc19jb250cm9sX3FoLT5kbWFfaGFuZGxlKSB8IFVIQ0lfUFRSX1FIOworCX0KK30KKworc3RhdGljIHZvaWQgdWhjaV9kZWNfZnNicihzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSAoc3RydWN0IHVyYl9wcml2ICopdXJiLT5oY3ByaXY7CisKKwlpZiAoKCEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9OT19GU0JSKSkgJiYgdXJicC0+ZnNicikgeworCQl1cmJwLT5mc2JyID0gMDsKKwkJaWYgKCEtLXVoY2ktPmZzYnIpCisJCQl1aGNpLT5mc2JydGltZW91dCA9IGppZmZpZXMgKyBGU0JSX0RFTEFZOworCX0KK30KKworLyoKKyAqIE1hcCBzdGF0dXMgdG8gc3RhbmRhcmQgcmVzdWx0IGNvZGVzCisgKgorICogPHN0YXR1cz4gaXMgKHRkX3N0YXR1cyh0ZCkgJiAweEY2MDAwMCksIGEuay5hLgorICogdWhjaV9zdGF0dXNfYml0cyh0ZF9zdGF0dXModGQpKS4KKyAqIE5vdGU6IDxzdGF0dXM+IGRvZXMgbm90IGluY2x1ZGUgdGhlIFREX0NUUkxfTkFLIGJpdC4KKyAqIDxkaXJfb3V0PiBpcyBUcnVlIGZvciBvdXRwdXQgVERzIGFuZCBGYWxzZSBmb3IgaW5wdXQgVERzLgorICovCitzdGF0aWMgaW50IHVoY2lfbWFwX3N0YXR1cyhpbnQgc3RhdHVzLCBpbnQgZGlyX291dCkKK3sKKwlpZiAoIXN0YXR1cykKKwkJcmV0dXJuIDA7CisJaWYgKHN0YXR1cyAmIFREX0NUUkxfQklUU1RVRkYpCQkJLyogQml0c3R1ZmYgZXJyb3IgKi8KKwkJcmV0dXJuIC1FUFJPVE87CisJaWYgKHN0YXR1cyAmIFREX0NUUkxfQ1JDVElNRU8pIHsJCS8qIENSQy9UaW1lb3V0ICovCisJCWlmIChkaXJfb3V0KQorCQkJcmV0dXJuIC1FUFJPVE87CisJCWVsc2UKKwkJCXJldHVybiAtRUlMU0VROworCX0KKwlpZiAoc3RhdHVzICYgVERfQ1RSTF9CQUJCTEUpCQkJLyogQmFiYmxlICovCisJCXJldHVybiAtRU9WRVJGTE9XOworCWlmIChzdGF0dXMgJiBURF9DVFJMX0RCVUZFUlIpCQkJLyogQnVmZmVyIGVycm9yICovCisJCXJldHVybiAtRU5PU1I7CisJaWYgKHN0YXR1cyAmIFREX0NUUkxfU1RBTExFRCkJCQkvKiBTdGFsbGVkICovCisJCXJldHVybiAtRVBJUEU7CisJV0FSTl9PTihzdGF0dXMgJiBURF9DVFJMX0FDVElWRSk7CQkvKiBBY3RpdmUgKi8KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENvbnRyb2wgdHJhbnNmZXJzCisgKi8KK3N0YXRpYyBpbnQgdWhjaV9zdWJtaXRfY29udHJvbChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHVyYiAqZXVyYikKK3sKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSAoc3RydWN0IHVyYl9wcml2ICopdXJiLT5oY3ByaXY7CisJc3RydWN0IHVoY2lfdGQgKnRkOworCXN0cnVjdCB1aGNpX3FoICpxaCwgKnNrZWxxaDsKKwl1bnNpZ25lZCBsb25nIGRlc3RpbmF0aW9uLCBzdGF0dXM7CisJaW50IG1heHN6ZSA9IHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwgdXNiX3BpcGVvdXQodXJiLT5waXBlKSk7CisJaW50IGxlbiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwlkbWFfYWRkcl90IGRhdGEgPSB1cmItPnRyYW5zZmVyX2RtYTsKKworCS8qIFRoZSAicGlwZSIgdGhpbmcgY29udGFpbnMgdGhlIGRlc3RpbmF0aW9uIGluIGJpdHMgOC0tMTggKi8KKwlkZXN0aW5hdGlvbiA9ICh1cmItPnBpcGUgJiBQSVBFX0RFVkVQX01BU0spIHwgVVNCX1BJRF9TRVRVUDsKKworCS8qIDMgZXJyb3JzICovCisJc3RhdHVzID0gVERfQ1RSTF9BQ1RJVkUgfCB1aGNpX21heGVycigzKTsKKwlpZiAodXJiLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9MT1cpCisJCXN0YXR1cyB8PSBURF9DVFJMX0xTOworCisJLyoKKwkgKiBCdWlsZCB0aGUgVEQgZm9yIHRoZSBjb250cm9sIHJlcXVlc3Qgc2V0dXAgcGFja2V0CisJICovCisJdGQgPSB1aGNpX2FsbG9jX3RkKHVoY2ksIHVyYi0+ZGV2KTsKKwlpZiAoIXRkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXVoY2lfYWRkX3RkX3RvX3VyYih1cmIsIHRkKTsKKwl1aGNpX2ZpbGxfdGQodGQsIHN0YXR1cywgZGVzdGluYXRpb24gfCB1aGNpX2V4cGxlbig3KSwKKwkJdXJiLT5zZXR1cF9kbWEpOworCisJLyoKKwkgKiBJZiBkaXJlY3Rpb24gaXMgInNlbmQiLCBjaGFuZ2UgdGhlIHBhY2tldCBJRCBmcm9tIFNFVFVQICgweDJEKQorCSAqIHRvIE9VVCAoMHhFMSkuICBFbHNlIGNoYW5nZSBpdCBmcm9tIFNFVFVQIHRvIElOICgweDY5KSBhbmQKKwkgKiBzZXQgU2hvcnQgUGFja2V0IERldGVjdCAoU1BEKSBmb3IgYWxsIGRhdGEgcGFja2V0cy4KKwkgKi8KKwlpZiAodXNiX3BpcGVvdXQodXJiLT5waXBlKSkKKwkJZGVzdGluYXRpb24gXj0gKFVTQl9QSURfU0VUVVAgXiBVU0JfUElEX09VVCk7CisJZWxzZSB7CisJCWRlc3RpbmF0aW9uIF49IChVU0JfUElEX1NFVFVQIF4gVVNCX1BJRF9JTik7CisJCXN0YXR1cyB8PSBURF9DVFJMX1NQRDsKKwl9CisKKwkvKgorCSAqIEJ1aWxkIHRoZSBEQVRBIFREJ3MKKwkgKi8KKwl3aGlsZSAobGVuID4gMCkgeworCQlpbnQgcGt0c3plID0gbGVuOworCisJCWlmIChwa3RzemUgPiBtYXhzemUpCisJCQlwa3RzemUgPSBtYXhzemU7CisKKwkJdGQgPSB1aGNpX2FsbG9jX3RkKHVoY2ksIHVyYi0+ZGV2KTsKKwkJaWYgKCF0ZCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCS8qIEFsdGVybmF0ZSBEYXRhMC8xIChzdGFydCB3aXRoIERhdGExKSAqLworCQlkZXN0aW5hdGlvbiBePSBURF9UT0tFTl9UT0dHTEU7CisJCisJCXVoY2lfYWRkX3RkX3RvX3VyYih1cmIsIHRkKTsKKwkJdWhjaV9maWxsX3RkKHRkLCBzdGF0dXMsIGRlc3RpbmF0aW9uIHwgdWhjaV9leHBsZW4ocGt0c3plIC0gMSksCisJCQlkYXRhKTsKKworCQlkYXRhICs9IHBrdHN6ZTsKKwkJbGVuIC09IHBrdHN6ZTsKKwl9CisKKwkvKgorCSAqIEJ1aWxkIHRoZSBmaW5hbCBURCBmb3IgY29udHJvbCBzdGF0dXMgCisJICovCisJdGQgPSB1aGNpX2FsbG9jX3RkKHVoY2ksIHVyYi0+ZGV2KTsKKwlpZiAoIXRkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qCisJICogSXQncyBJTiBpZiB0aGUgcGlwZSBpcyBhbiBvdXRwdXQgcGlwZSBvciB3ZSdyZSBub3QgZXhwZWN0aW5nCisJICogZGF0YSBiYWNrLgorCSAqLworCWRlc3RpbmF0aW9uICY9IH5URF9UT0tFTl9QSURfTUFTSzsKKwlpZiAodXNiX3BpcGVvdXQodXJiLT5waXBlKSB8fCAhdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKQorCQlkZXN0aW5hdGlvbiB8PSBVU0JfUElEX0lOOworCWVsc2UKKwkJZGVzdGluYXRpb24gfD0gVVNCX1BJRF9PVVQ7CisKKwlkZXN0aW5hdGlvbiB8PSBURF9UT0tFTl9UT0dHTEU7CQkvKiBFbmQgaW4gRGF0YTEgKi8KKworCXN0YXR1cyAmPSB+VERfQ1RSTF9TUEQ7CisKKwl1aGNpX2FkZF90ZF90b191cmIodXJiLCB0ZCk7CisJdWhjaV9maWxsX3RkKHRkLCBzdGF0dXMgfCBURF9DVFJMX0lPQywKKwkJZGVzdGluYXRpb24gfCB1aGNpX2V4cGxlbihVSENJX05VTExfREFUQV9TSVpFKSwgMCk7CisKKwlxaCA9IHVoY2lfYWxsb2NfcWgodWhjaSwgdXJiLT5kZXYpOworCWlmICghcWgpCisJCXJldHVybiAtRU5PTUVNOworCisJdXJicC0+cWggPSBxaDsKKwlxaC0+dXJicCA9IHVyYnA7CisKKwl1aGNpX2luc2VydF90ZHNfaW5fcWgocWgsIHVyYiwgVUhDSV9QVFJfQlJFQURUSCk7CisKKwkvKiBMb3ctc3BlZWQgdHJhbnNmZXJzIGdldCBhIGRpZmZlcmVudCBxdWV1ZSwgYW5kIHdvbid0IGhvZyB0aGUgYnVzLgorCSAqIEFsc28sIHNvbWUgZGV2aWNlcyBlbnVtZXJhdGUgYmV0dGVyIHdpdGhvdXQgRlNCUjsgdGhlIGVhc2llc3Qgd2F5CisJICogdG8gZG8gdGhhdCBpcyB0byBwdXQgVVJCcyBvbiB0aGUgbG93LXNwZWVkIHF1ZXVlIHdoaWxlIHRoZSBkZXZpY2UKKwkgKiBpcyBpbiB0aGUgREVGQVVMVCBzdGF0ZS4gKi8KKwlpZiAodXJiLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9MT1cgfHwKKwkJCXVyYi0+ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfREVGQVVMVCkKKwkJc2tlbHFoID0gdWhjaS0+c2tlbF9sc19jb250cm9sX3FoOworCWVsc2UgeworCQlza2VscWggPSB1aGNpLT5za2VsX2ZzX2NvbnRyb2xfcWg7CisJCXVoY2lfaW5jX2ZzYnIodWhjaSwgdXJiKTsKKwl9CisKKwlpZiAoZXVyYikKKwkJdWhjaV9hcHBlbmRfcXVldWVkX3VyYih1aGNpLCBldXJiLCB1cmIpOworCWVsc2UKKwkJdWhjaV9pbnNlcnRfcWgodWhjaSwgc2tlbHFoLCB1cmIpOworCisJcmV0dXJuIC1FSU5QUk9HUkVTUzsKK30KKworLyoKKyAqIElmIGNvbnRyb2wtSU4gdHJhbnNmZXIgd2FzIHNob3J0LCB0aGUgc3RhdHVzIHBhY2tldCB3YXNuJ3Qgc2VudC4KKyAqIFRoaXMgcm91dGluZSBjaGFuZ2VzIHRoZSBlbGVtZW50IHBvaW50ZXIgaW4gdGhlIFFIIHRvIHBvaW50IGF0IHRoZQorICogc3RhdHVzIFRELiAgSXQncyBzYWZlIHRvIGRvIHRoaXMgZXZlbiB3aGlsZSB0aGUgUUggaXMgbGl2ZSwgYmVjYXVzZQorICogdGhlIGhhcmR3YXJlIG9ubHkgdXBkYXRlcyB0aGUgZWxlbWVudCBwb2ludGVyIGZvbGxvd2luZyBhIHN1Y2Nlc3NmdWwKKyAqIHRyYW5zZmVyLiAgVGhlIGluYWN0aXZlIFREIGZvciB0aGUgc2hvcnQgcGFja2V0IHdvbid0IGNhdXNlIGFuIHVwZGF0ZSwKKyAqIHNvIHRoZSBwb2ludGVyIHdvbid0IGdldCBvdmVyd3JpdHRlbi4gIFRoZSBuZXh0IHRpbWUgdGhlIGNvbnRyb2xsZXIKKyAqIHNlZXMgdGhpcyBRSCwgaXQgd2lsbCBzZW5kIHRoZSBzdGF0dXMgcGFja2V0LgorICovCitzdGF0aWMgaW50IHVzYl9jb250cm9sX3JldHJpZ2dlcl9zdGF0dXMoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKXVyYi0+aGNwcml2OworCXN0cnVjdCB1aGNpX3RkICp0ZDsKKworCXVyYnAtPnNob3J0X2NvbnRyb2xfcGFja2V0ID0gMTsKKworCXRkID0gbGlzdF9lbnRyeSh1cmJwLT50ZF9saXN0LnByZXYsIHN0cnVjdCB1aGNpX3RkLCBsaXN0KTsKKwl1cmJwLT5xaC0+ZWxlbWVudCA9IGNwdV90b19sZTMyKHRkLT5kbWFfaGFuZGxlKTsKKworCXJldHVybiAtRUlOUFJPR1JFU1M7Cit9CisKKworc3RhdGljIGludCB1aGNpX3Jlc3VsdF9jb250cm9sKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcCwgKmhlYWQ7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gdXJiLT5oY3ByaXY7CisJc3RydWN0IHVoY2lfdGQgKnRkOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisJaW50IHJldCA9IDA7CisKKwlpZiAobGlzdF9lbXB0eSgmdXJicC0+dGRfbGlzdCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaGVhZCA9ICZ1cmJwLT50ZF9saXN0OworCisJaWYgKHVyYnAtPnNob3J0X2NvbnRyb2xfcGFja2V0KSB7CisJCXRtcCA9IGhlYWQtPnByZXY7CisJCWdvdG8gc3RhdHVzX3N0YWdlOworCX0KKworCXRtcCA9IGhlYWQtPm5leHQ7CisJdGQgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHVoY2lfdGQsIGxpc3QpOworCisJLyogVGhlIGZpcnN0IFREIGlzIHRoZSBTRVRVUCBzdGFnZSwgY2hlY2sgdGhlIHN0YXR1cywgYnV0IHNraXAgKi8KKwkvKiAgdGhlIGNvdW50ICovCisJc3RhdHVzID0gdWhjaV9zdGF0dXNfYml0cyh0ZF9zdGF0dXModGQpKTsKKwlpZiAoc3RhdHVzICYgVERfQ1RSTF9BQ1RJVkUpCisJCXJldHVybiAtRUlOUFJPR1JFU1M7CisKKwlpZiAoc3RhdHVzKQorCQlnb3RvIHRkX2Vycm9yOworCisJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKworCS8qIFRoZSByZXN0IG9mIHRoZSBURCdzIChidXQgdGhlIGxhc3QpIGFyZSBkYXRhICovCisJdG1wID0gdG1wLT5uZXh0OworCXdoaWxlICh0bXAgIT0gaGVhZCAmJiB0bXAtPm5leHQgIT0gaGVhZCkgeworCQl1bnNpZ25lZCBpbnQgY3RybHN0YXQ7CisKKwkJdGQgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHVoY2lfdGQsIGxpc3QpOworCQl0bXAgPSB0bXAtPm5leHQ7CisKKwkJY3RybHN0YXQgPSB0ZF9zdGF0dXModGQpOworCQlzdGF0dXMgPSB1aGNpX3N0YXR1c19iaXRzKGN0cmxzdGF0KTsKKwkJaWYgKHN0YXR1cyAmIFREX0NUUkxfQUNUSVZFKQorCQkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKKworCQl1cmItPmFjdHVhbF9sZW5ndGggKz0gdWhjaV9hY3R1YWxfbGVuZ3RoKGN0cmxzdGF0KTsKKworCQlpZiAoc3RhdHVzKQorCQkJZ290byB0ZF9lcnJvcjsKKworCQkvKiBDaGVjayB0byBzZWUgaWYgd2UgcmVjZWl2ZWQgYSBzaG9ydCBwYWNrZXQgKi8KKwkJaWYgKHVoY2lfYWN0dWFsX2xlbmd0aChjdHJsc3RhdCkgPAorCQkJCXVoY2lfZXhwZWN0ZWRfbGVuZ3RoKHRkX3Rva2VuKHRkKSkpIHsKKwkJCWlmICh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1NIT1JUX05PVF9PSykgeworCQkJCXJldCA9IC1FUkVNT1RFSU87CisJCQkJZ290byBlcnI7CisJCQl9CisKKwkJCWlmICh1aGNpX3BhY2tldGlkKHRkX3Rva2VuKHRkKSkgPT0gVVNCX1BJRF9JTikKKwkJCQlyZXR1cm4gdXNiX2NvbnRyb2xfcmV0cmlnZ2VyX3N0YXR1cyh1aGNpLCB1cmIpOworCQkJZWxzZQorCQkJCXJldHVybiAwOworCQl9CisJfQorCitzdGF0dXNfc3RhZ2U6CisJdGQgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHVoY2lfdGQsIGxpc3QpOworCisJLyogQ29udHJvbCBzdGF0dXMgc3RhZ2UgKi8KKwlzdGF0dXMgPSB0ZF9zdGF0dXModGQpOworCisjaWZkZWYgSV9IQVZFX0JVR0dZX0FQQ19CQUNLVVBTCisJLyogQVBDIEJhY2tVUFMgUHJvIGtsdWRnZSAqLworCS8qIEl0IHRyaWVzIHRvIHNlbmQgYWxsIG9mIHRoZSBkZXNjcmlwdG9yIGluc3RlYWQgb2YgdGhlIGFtb3VudCAqLworCS8qICB3ZSByZXF1ZXN0ZWQgKi8KKwlpZiAoc3RhdHVzICYgVERfQ1RSTF9JT0MgJiYJLyogSU9DIGlzIG1hc2tlZCBvdXQgYnkgdWhjaV9zdGF0dXNfYml0cyAqLworCSAgICBzdGF0dXMgJiBURF9DVFJMX0FDVElWRSAmJgorCSAgICBzdGF0dXMgJiBURF9DVFJMX05BSykKKwkJcmV0dXJuIDA7CisjZW5kaWYKKworCXN0YXR1cyA9IHVoY2lfc3RhdHVzX2JpdHMoc3RhdHVzKTsKKwlpZiAoc3RhdHVzICYgVERfQ1RSTF9BQ1RJVkUpCisJCXJldHVybiAtRUlOUFJPR1JFU1M7CisKKwlpZiAoc3RhdHVzKQorCQlnb3RvIHRkX2Vycm9yOworCisJcmV0dXJuIDA7CisKK3RkX2Vycm9yOgorCXJldCA9IHVoY2lfbWFwX3N0YXR1cyhzdGF0dXMsIHVoY2lfcGFja2V0b3V0KHRkX3Rva2VuKHRkKSkpOworCitlcnI6CisJaWYgKChkZWJ1ZyA9PSAxICYmIHJldCAhPSAtRVBJUEUpIHx8IGRlYnVnID4gMSkgeworCQkvKiBTb21lIGRlYnVnZ2luZyBjb2RlICovCisJCWRldl9kYmcodWhjaV9kZXYodWhjaSksICIlczogZmFpbGVkIHdpdGggc3RhdHVzICV4XG4iLAorCQkJCV9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKworCQlpZiAoZXJyYnVmKSB7CisJCQkvKiBQcmludCB0aGUgY2hhaW4gZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyAqLworCQkJdWhjaV9zaG93X3FoKHVyYnAtPnFoLCBlcnJidWYsIEVSUkJVRl9MRU4sIDApOworCisJCQlscHJpbnRrKGVycmJ1Zik7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ29tbW9uIHN1Ym1pdCBmb3IgYnVsayBhbmQgaW50ZXJydXB0CisgKi8KK3N0YXRpYyBpbnQgdWhjaV9zdWJtaXRfY29tbW9uKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgdXJiICpldXJiLCBzdHJ1Y3QgdWhjaV9xaCAqc2tlbHFoKQoreworCXN0cnVjdCB1aGNpX3RkICp0ZDsKKwlzdHJ1Y3QgdWhjaV9xaCAqcWg7CisJdW5zaWduZWQgbG9uZyBkZXN0aW5hdGlvbiwgc3RhdHVzOworCWludCBtYXhzemUgPSB1c2JfbWF4cGFja2V0KHVyYi0+ZGV2LCB1cmItPnBpcGUsIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpOworCWludCBsZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKXVyYi0+aGNwcml2OworCWRtYV9hZGRyX3QgZGF0YSA9IHVyYi0+dHJhbnNmZXJfZG1hOworCisJaWYgKGxlbiA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJLyogVGhlICJwaXBlIiB0aGluZyBjb250YWlucyB0aGUgZGVzdGluYXRpb24gaW4gYml0cyA4LS0xOCAqLworCWRlc3RpbmF0aW9uID0gKHVyYi0+cGlwZSAmIFBJUEVfREVWRVBfTUFTSykgfCB1c2JfcGFja2V0aWQodXJiLT5waXBlKTsKKworCXN0YXR1cyA9IHVoY2lfbWF4ZXJyKDMpIHwgVERfQ1RSTF9BQ1RJVkU7CisJaWYgKHVyYi0+ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfTE9XKQorCQlzdGF0dXMgfD0gVERfQ1RSTF9MUzsKKwlpZiAodXNiX3BpcGVpbih1cmItPnBpcGUpKQorCQlzdGF0dXMgfD0gVERfQ1RSTF9TUEQ7CisKKwkvKgorCSAqIEJ1aWxkIHRoZSBEQVRBIFREJ3MKKwkgKi8KKwlkbyB7CS8qIEFsbG93IHplcm8gbGVuZ3RoIHBhY2tldHMgKi8KKwkJaW50IHBrdHN6ZSA9IG1heHN6ZTsKKworCQlpZiAocGt0c3plID49IGxlbikgeworCQkJcGt0c3plID0gbGVuOworCQkJaWYgKCEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spKQorCQkJCXN0YXR1cyAmPSB+VERfQ1RSTF9TUEQ7CisJCX0KKworCQl0ZCA9IHVoY2lfYWxsb2NfdGQodWhjaSwgdXJiLT5kZXYpOworCQlpZiAoIXRkKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJdWhjaV9hZGRfdGRfdG9fdXJiKHVyYiwgdGQpOworCQl1aGNpX2ZpbGxfdGQodGQsIHN0YXR1cywgZGVzdGluYXRpb24gfCB1aGNpX2V4cGxlbihwa3RzemUgLSAxKSB8CisJCQkodXNiX2dldHRvZ2dsZSh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLAorCQkJIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpIDw8IFREX1RPS0VOX1RPR0dMRV9TSElGVCksCisJCQlkYXRhKTsKKworCQlkYXRhICs9IHBrdHN6ZTsKKwkJbGVuIC09IG1heHN6ZTsKKworCQl1c2JfZG90b2dnbGUodXJiLT5kZXYsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKKwkJCXVzYl9waXBlb3V0KHVyYi0+cGlwZSkpOworCX0gd2hpbGUgKGxlbiA+IDApOworCisJLyoKKwkgKiBVUkJfWkVST19QQUNLRVQgbWVhbnMgYWRkaW5nIGEgMC1sZW5ndGggcGFja2V0LCBpZiBkaXJlY3Rpb24KKwkgKiBpcyBPVVQgYW5kIHRoZSB0cmFuc2Zlcl9sZW5ndGggd2FzIGFuIGV4YWN0IG11bHRpcGxlIG9mIG1heHN6ZSwKKwkgKiBoZW5jZSAobGVuID0gdHJhbnNmZXJfbGVuZ3RoIC0gTiAqIG1heHN6ZSkgPT0gMAorCSAqIGhvd2V2ZXIsIGlmIHRyYW5zZmVyX2xlbmd0aCA9PSAwLCB0aGUgemVybyBwYWNrZXQgd2FzIGFscmVhZHkKKwkgKiBwcmVwYXJlZCBhYm92ZS4KKwkgKi8KKwlpZiAodXNiX3BpcGVvdXQodXJiLT5waXBlKSAmJiAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9aRVJPX1BBQ0tFVCkgJiYKKwkgICAgIWxlbiAmJiB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpIHsKKwkJdGQgPSB1aGNpX2FsbG9jX3RkKHVoY2ksIHVyYi0+ZGV2KTsKKwkJaWYgKCF0ZCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXVoY2lfYWRkX3RkX3RvX3VyYih1cmIsIHRkKTsKKwkJdWhjaV9maWxsX3RkKHRkLCBzdGF0dXMsIGRlc3RpbmF0aW9uIHwgdWhjaV9leHBsZW4oVUhDSV9OVUxMX0RBVEFfU0laRSkgfAorCQkJKHVzYl9nZXR0b2dnbGUodXJiLT5kZXYsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKKwkJCSB1c2JfcGlwZW91dCh1cmItPnBpcGUpKSA8PCBURF9UT0tFTl9UT0dHTEVfU0hJRlQpLAorCQkJZGF0YSk7CisKKwkJdXNiX2RvdG9nZ2xlKHVyYi0+ZGV2LCB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCisJCQl1c2JfcGlwZW91dCh1cmItPnBpcGUpKTsKKwl9CisKKwkvKiBTZXQgdGhlIGludGVycnVwdC1vbi1jb21wbGV0aW9uIGZsYWcgb24gdGhlIGxhc3QgcGFja2V0LgorCSAqIEEgbW9yZS1vci1sZXNzIHR5cGljYWwgNCBLQiBVUkIgKD0gc2l6ZSBvZiBvbmUgbWVtb3J5IHBhZ2UpCisJICogd2lsbCByZXF1aXJlIGFib3V0IDMgbXMgdG8gdHJhbnNmZXI7IHRoYXQncyBhIGxpdHRsZSBvbiB0aGUKKwkgKiBmYXN0IHNpZGUgYnV0IG5vdCBlbm91Z2ggdG8ganVzdGlmeSBkZWxheWluZyBhbiBpbnRlcnJ1cHQKKwkgKiBtb3JlIHRoYW4gMiBvciAzIFVSQnMsIHNvIHdlIHdpbGwgaWdub3JlIHRoZSBVUkJfTk9fSU5URVJSVVBUCisJICogZmxhZyBzZXR0aW5nLiAqLworCXRkLT5zdGF0dXMgfD0gY3B1X3RvX2xlMzIoVERfQ1RSTF9JT0MpOworCisJcWggPSB1aGNpX2FsbG9jX3FoKHVoY2ksIHVyYi0+ZGV2KTsKKwlpZiAoIXFoKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXVyYnAtPnFoID0gcWg7CisJcWgtPnVyYnAgPSB1cmJwOworCisJLyogQWx3YXlzIGJyZWFkdGggZmlyc3QgKi8KKwl1aGNpX2luc2VydF90ZHNfaW5fcWgocWgsIHVyYiwgVUhDSV9QVFJfQlJFQURUSCk7CisKKwlpZiAoZXVyYikKKwkJdWhjaV9hcHBlbmRfcXVldWVkX3VyYih1aGNpLCBldXJiLCB1cmIpOworCWVsc2UKKwkJdWhjaV9pbnNlcnRfcWgodWhjaSwgc2tlbHFoLCB1cmIpOworCisJcmV0dXJuIC1FSU5QUk9HUkVTUzsKK30KKworLyoKKyAqIENvbW1vbiByZXN1bHQgZm9yIGJ1bGsgYW5kIGludGVycnVwdAorICovCitzdGF0aWMgaW50IHVoY2lfcmVzdWx0X2NvbW1vbihzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSB1cmItPmhjcHJpdjsKKwlzdHJ1Y3QgdWhjaV90ZCAqdGQ7CisJdW5zaWduZWQgaW50IHN0YXR1cyA9IDA7CisJaW50IHJldCA9IDA7CisKKwl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZCwgJnVyYnAtPnRkX2xpc3QsIGxpc3QpIHsKKwkJdW5zaWduZWQgaW50IGN0cmxzdGF0ID0gdGRfc3RhdHVzKHRkKTsKKworCQlzdGF0dXMgPSB1aGNpX3N0YXR1c19iaXRzKGN0cmxzdGF0KTsKKwkJaWYgKHN0YXR1cyAmIFREX0NUUkxfQUNUSVZFKQorCQkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKKworCQl1cmItPmFjdHVhbF9sZW5ndGggKz0gdWhjaV9hY3R1YWxfbGVuZ3RoKGN0cmxzdGF0KTsKKworCQlpZiAoc3RhdHVzKQorCQkJZ290byB0ZF9lcnJvcjsKKworCQlpZiAodWhjaV9hY3R1YWxfbGVuZ3RoKGN0cmxzdGF0KSA8CisJCQkJdWhjaV9leHBlY3RlZF9sZW5ndGgodGRfdG9rZW4odGQpKSkgeworCQkJaWYgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKSB7CisJCQkJcmV0ID0gLUVSRU1PVEVJTzsKKwkJCQlnb3RvIGVycjsKKwkJCX0gZWxzZQorCQkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK3RkX2Vycm9yOgorCXJldCA9IHVoY2lfbWFwX3N0YXR1cyhzdGF0dXMsIHVoY2lfcGFja2V0b3V0KHRkX3Rva2VuKHRkKSkpOworCitlcnI6CisJLyogCisJICogRW5hYmxlIHRoaXMgY2h1bmsgb2YgY29kZSBpZiB5b3Ugd2FudCB0byBzZWUgc29tZSBtb3JlIGRlYnVnZ2luZy4KKwkgKiBCdXQgYmUgY2FyZWZ1bCwgaXQgaGFzIHRoZSB0ZW5kYW5jeSB0byBzdGFydmUgb3V0IGtodWJkIGFuZCBwcmV2ZW50CisJICogZGlzY29ubmVjdHMgZnJvbSBoYXBwZW5pbmcgc3VjY2Vzc2Z1bGx5IGlmIHlvdSBoYXZlIGEgc2xvdyBkZWJ1ZworCSAqIGxvZyBpbnRlcmZhY2UgKGxpa2UgYSBzZXJpYWwgY29uc29sZS4KKwkgKi8KKyNpZiAwCisJaWYgKChkZWJ1ZyA9PSAxICYmIHJldCAhPSAtRVBJUEUpIHx8IGRlYnVnID4gMSkgeworCQkvKiBTb21lIGRlYnVnZ2luZyBjb2RlICovCisJCWRldl9kYmcodWhjaV9kZXYodWhjaSksICIlczogZmFpbGVkIHdpdGggc3RhdHVzICV4XG4iLAorCQkJCV9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKworCQlpZiAoZXJyYnVmKSB7CisJCQkvKiBQcmludCB0aGUgY2hhaW4gZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyAqLworCQkJdWhjaV9zaG93X3FoKHVyYnAtPnFoLCBlcnJidWYsIEVSUkJVRl9MRU4sIDApOworCisJCQlscHJpbnRrKGVycmJ1Zik7CisJCX0KKwl9CisjZW5kaWYKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCB1aGNpX3N1Ym1pdF9idWxrKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgdXJiICpldXJiKQoreworCWludCByZXQ7CisKKwkvKiBDYW4ndCBoYXZlIGxvdy1zcGVlZCBidWxrIHRyYW5zZmVycyAqLworCWlmICh1cmItPmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0xPVykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSB1aGNpX3N1Ym1pdF9jb21tb24odWhjaSwgdXJiLCBldXJiLCB1aGNpLT5za2VsX2J1bGtfcWgpOworCWlmIChyZXQgPT0gLUVJTlBST0dSRVNTKQorCQl1aGNpX2luY19mc2JyKHVoY2ksIHVyYik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCB1aGNpX3N1Ym1pdF9pbnRlcnJ1cHQoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCB1cmIgKmV1cmIpCit7CisJLyogVVNCIDEuMSBpbnRlcnJ1cHQgdHJhbnNmZXJzIG9ubHkgaW52b2x2ZSBvbmUgcGFja2V0IHBlciBpbnRlcnZhbDsKKwkgKiB0aGF0J3MgdGhlIHVoY2lfc3VibWl0X2NvbW1vbigpICJicmVhZHRoIGZpcnN0IiBwb2xpY3kuICBEcml2ZXJzCisJICogY2FuIHN1Ym1pdCB1cmJzIG9mIGFueSBsZW5ndGgsIGJ1dCBsb25nZXIgb25lcyBtaWdodCBuZWVkIG1hbnkKKwkgKiBpbnRlcnZhbHMgdG8gY29tcGxldGUuCisJICovCisJcmV0dXJuIHVoY2lfc3VibWl0X2NvbW1vbih1aGNpLCB1cmIsIGV1cmIsIHVoY2ktPnNrZWxxaFtfX2ludGVydmFsX3RvX3NrZWwodXJiLT5pbnRlcnZhbCldKTsKK30KKworLyoKKyAqIElzb2Nocm9ub3VzIHRyYW5zZmVycworICovCitzdGF0aWMgaW50IGlzb2Nocm9ub3VzX2ZpbmRfbGltaXRzKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiLCB1bnNpZ25lZCBpbnQgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgKmVuZCkKK3sKKwlzdHJ1Y3QgdXJiICpsYXN0X3VyYiA9IE5VTEw7CisJc3RydWN0IHVyYl9wcml2ICp1cDsKKwlpbnQgcmV0ID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodXAsICZ1aGNpLT51cmJfbGlzdCwgdXJiX2xpc3QpIHsKKwkJc3RydWN0IHVyYiAqdSA9IHVwLT51cmI7CisKKwkJLyogbG9vayBmb3IgcGVuZGluZyBVUkIncyB3aXRoIGlkZW50aWNhbCBwaXBlIGhhbmRsZSAqLworCQlpZiAoKHVyYi0+cGlwZSA9PSB1LT5waXBlKSAmJiAodXJiLT5kZXYgPT0gdS0+ZGV2KSAmJgorCQkgICAgKHUtPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpICYmICh1ICE9IHVyYikpIHsKKwkJCWlmICghbGFzdF91cmIpCisJCQkJKnN0YXJ0ID0gdS0+c3RhcnRfZnJhbWU7CisJCQlsYXN0X3VyYiA9IHU7CisJCX0KKwl9CisKKwlpZiAobGFzdF91cmIpIHsKKwkJKmVuZCA9IChsYXN0X3VyYi0+c3RhcnRfZnJhbWUgKyBsYXN0X3VyYi0+bnVtYmVyX29mX3BhY2tldHMgKgorCQkJCWxhc3RfdXJiLT5pbnRlcnZhbCkgJiAoVUhDSV9OVU1GUkFNRVMtMSk7CisJCXJldCA9IDA7CisJfSBlbHNlCisJCXJldCA9IC0xOwkvKiBubyBwcmV2aW91cyB1cmIgZm91bmQgKi8KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXNvY2hyb25vdXNfZmluZF9zdGFydChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpbnQgbGltaXRzOworCXVuc2lnbmVkIGludCBzdGFydCA9IDAsIGVuZCA9IDA7CisKKwlpZiAodXJiLT5udW1iZXJfb2ZfcGFja2V0cyA+IDkwMCkJLyogOTAwPyBXaHk/ICovCisJCXJldHVybiAtRUZCSUc7CisKKwlsaW1pdHMgPSBpc29jaHJvbm91c19maW5kX2xpbWl0cyh1aGNpLCB1cmIsICZzdGFydCwgJmVuZCk7CisKKwlpZiAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9JU09fQVNBUCkgeworCQlpZiAobGltaXRzKSB7CisJCQl1aGNpX2dldF9jdXJyZW50X2ZyYW1lX251bWJlcih1aGNpKTsKKwkJCXVyYi0+c3RhcnRfZnJhbWUgPSAodWhjaS0+ZnJhbWVfbnVtYmVyICsgMTApCisJCQkJCSYgKFVIQ0lfTlVNRlJBTUVTIC0gMSk7CisJCX0gZWxzZQorCQkJdXJiLT5zdGFydF9mcmFtZSA9IGVuZDsKKwl9IGVsc2UgeworCQl1cmItPnN0YXJ0X2ZyYW1lICY9IChVSENJX05VTUZSQU1FUyAtIDEpOworCQkvKiBGSVhNRTogU2FuaXR5IGNoZWNrICovCisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJc29jaHJvbm91cyB0cmFuc2ZlcnMKKyAqLworc3RhdGljIGludCB1aGNpX3N1Ym1pdF9pc29jaHJvbm91cyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdWhjaV90ZCAqdGQ7CisJaW50IGksIHJldCwgZnJhbWU7CisJaW50IHN0YXR1cywgZGVzdGluYXRpb247CisKKwlzdGF0dXMgPSBURF9DVFJMX0FDVElWRSB8IFREX0NUUkxfSU9TOworCWRlc3RpbmF0aW9uID0gKHVyYi0+cGlwZSAmIFBJUEVfREVWRVBfTUFTSykgfCB1c2JfcGFja2V0aWQodXJiLT5waXBlKTsKKworCXJldCA9IGlzb2Nocm9ub3VzX2ZpbmRfc3RhcnQodWhjaSwgdXJiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZnJhbWUgPSB1cmItPnN0YXJ0X2ZyYW1lOworCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyssIGZyYW1lICs9IHVyYi0+aW50ZXJ2YWwpIHsKKwkJaWYgKCF1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCkKKwkJCWNvbnRpbnVlOworCisJCXRkID0gdWhjaV9hbGxvY190ZCh1aGNpLCB1cmItPmRldik7CisJCWlmICghdGQpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQl1aGNpX2FkZF90ZF90b191cmIodXJiLCB0ZCk7CisJCXVoY2lfZmlsbF90ZCh0ZCwgc3RhdHVzLCBkZXN0aW5hdGlvbiB8IHVoY2lfZXhwbGVuKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoIC0gMSksCisJCQl1cmItPnRyYW5zZmVyX2RtYSArIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0KTsKKworCQlpZiAoaSArIDEgPj0gdXJiLT5udW1iZXJfb2ZfcGFja2V0cykKKwkJCXRkLT5zdGF0dXMgfD0gY3B1X3RvX2xlMzIoVERfQ1RSTF9JT0MpOworCisJCXVoY2lfaW5zZXJ0X3RkX2ZyYW1lX2xpc3QodWhjaSwgdGQsIGZyYW1lKTsKKwl9CisKKwlyZXR1cm4gLUVJTlBST0dSRVNTOworfQorCitzdGF0aWMgaW50IHVoY2lfcmVzdWx0X2lzb2Nocm9ub3VzKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1aGNpX3RkICp0ZDsKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSAoc3RydWN0IHVyYl9wcml2ICopdXJiLT5oY3ByaXY7CisJaW50IHN0YXR1czsKKwlpbnQgaSwgcmV0ID0gMDsKKworCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisKKwlpID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRkLCAmdXJicC0+dGRfbGlzdCwgbGlzdCkgeworCQlpbnQgYWN0bGVuZ3RoOworCQl1bnNpZ25lZCBpbnQgY3RybHN0YXQgPSB0ZF9zdGF0dXModGQpOworCisJCWlmIChjdHJsc3RhdCAmIFREX0NUUkxfQUNUSVZFKQorCQkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKKworCQlhY3RsZW5ndGggPSB1aGNpX2FjdHVhbF9sZW5ndGgoY3RybHN0YXQpOworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggPSBhY3RsZW5ndGg7CisJCXVyYi0+YWN0dWFsX2xlbmd0aCArPSBhY3RsZW5ndGg7CisKKwkJc3RhdHVzID0gdWhjaV9tYXBfc3RhdHVzKHVoY2lfc3RhdHVzX2JpdHMoY3RybHN0YXQpLAorCQkJCXVzYl9waXBlb3V0KHVyYi0+cGlwZSkpOworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyA9IHN0YXR1czsKKwkJaWYgKHN0YXR1cykgeworCQkJdXJiLT5lcnJvcl9jb3VudCsrOworCQkJcmV0ID0gc3RhdHVzOworCQl9CisKKwkJaSsrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXJiICp1aGNpX2ZpbmRfdXJiX2VwKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1cmJfcHJpdiAqdXA7CisKKwkvKiBXZSBkb24ndCBtYXRjaCBJc29jIHRyYW5zZmVycyBzaW5jZSB0aGV5IGFyZSBzcGVjaWFsICovCisJaWYgKHVzYl9waXBlaXNvYyh1cmItPnBpcGUpKQorCQlyZXR1cm4gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodXAsICZ1aGNpLT51cmJfbGlzdCwgdXJiX2xpc3QpIHsKKwkJc3RydWN0IHVyYiAqdSA9IHVwLT51cmI7CisKKwkJaWYgKHUtPmRldiA9PSB1cmItPmRldiAmJiB1LT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCQkvKiBGb3IgY29udHJvbCwgaWdub3JlIHRoZSBkaXJlY3Rpb24gKi8KKwkJCWlmICh1c2JfcGlwZWNvbnRyb2wodXJiLT5waXBlKSAmJgorCQkJICAgICh1LT5waXBlICYgflVTQl9ESVJfSU4pID09ICh1cmItPnBpcGUgJiB+VVNCX0RJUl9JTikpCisJCQkJcmV0dXJuIHU7CisJCQllbHNlIGlmICh1LT5waXBlID09IHVyYi0+cGlwZSkKKwkJCQlyZXR1cm4gdTsKKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHVoY2lfdXJiX2VucXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwKKwkJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCwKKwkJc3RydWN0IHVyYiAqdXJiLCBpbnQgbWVtX2ZsYWdzKQoreworCWludCByZXQ7CisJc3RydWN0IHVoY2lfaGNkICp1aGNpID0gaGNkX3RvX3VoY2koaGNkKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB1cmIgKmV1cmI7CisJaW50IGJ1c3RpbWU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWhjaS0+bG9jaywgZmxhZ3MpOworCisJcmV0ID0gdXJiLT5zdGF0dXM7CisJaWYgKHJldCAhPSAtRUlOUFJPR1JFU1MpCQkvKiBVUkIgYWxyZWFkeSB1bmxpbmtlZCEgKi8KKwkJZ290byBvdXQ7CisKKwlldXJiID0gdWhjaV9maW5kX3VyYl9lcCh1aGNpLCB1cmIpOworCisJaWYgKCF1aGNpX2FsbG9jX3VyYl9wcml2KHVoY2ksIHVyYikpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJc3dpdGNoICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSkgeworCWNhc2UgUElQRV9DT05UUk9MOgorCQlyZXQgPSB1aGNpX3N1Ym1pdF9jb250cm9sKHVoY2ksIHVyYiwgZXVyYik7CisJCWJyZWFrOworCWNhc2UgUElQRV9JTlRFUlJVUFQ6CisJCWlmICghZXVyYikgeworCQkJYnVzdGltZSA9IHVzYl9jaGVja19iYW5kd2lkdGgodXJiLT5kZXYsIHVyYik7CisJCQlpZiAoYnVzdGltZSA8IDApCisJCQkJcmV0ID0gYnVzdGltZTsKKwkJCWVsc2UgeworCQkJCXJldCA9IHVoY2lfc3VibWl0X2ludGVycnVwdCh1aGNpLCB1cmIsIGV1cmIpOworCQkJCWlmIChyZXQgPT0gLUVJTlBST0dSRVNTKQorCQkJCQl1c2JfY2xhaW1fYmFuZHdpZHRoKHVyYi0+ZGV2LCB1cmIsIGJ1c3RpbWUsIDApOworCQkJfQorCQl9IGVsc2UgewkvKiBpbmhlcml0IGZyb20gcGFyZW50ICovCisJCQl1cmItPmJhbmR3aWR0aCA9IGV1cmItPmJhbmR3aWR0aDsKKwkJCXJldCA9IHVoY2lfc3VibWl0X2ludGVycnVwdCh1aGNpLCB1cmIsIGV1cmIpOworCQl9CisJCWJyZWFrOworCWNhc2UgUElQRV9CVUxLOgorCQlyZXQgPSB1aGNpX3N1Ym1pdF9idWxrKHVoY2ksIHVyYiwgZXVyYik7CisJCWJyZWFrOworCWNhc2UgUElQRV9JU09DSFJPTk9VUzoKKwkJYnVzdGltZSA9IHVzYl9jaGVja19iYW5kd2lkdGgodXJiLT5kZXYsIHVyYik7CisJCWlmIChidXN0aW1lIDwgMCkgeworCQkJcmV0ID0gYnVzdGltZTsKKwkJCWJyZWFrOworCQl9CisKKwkJcmV0ID0gdWhjaV9zdWJtaXRfaXNvY2hyb25vdXModWhjaSwgdXJiKTsKKwkJaWYgKHJldCA9PSAtRUlOUFJPR1JFU1MpCisJCQl1c2JfY2xhaW1fYmFuZHdpZHRoKHVyYi0+ZGV2LCB1cmIsIGJ1c3RpbWUsIDEpOworCQlicmVhazsKKwl9CisKKwlpZiAocmV0ICE9IC1FSU5QUk9HUkVTUykgeworCQkvKiBTdWJtaXQgZmFpbGVkLCBzbyBkZWxldGUgaXQgZnJvbSB0aGUgdXJiX2xpc3QgKi8KKwkJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gdXJiLT5oY3ByaXY7CisKKwkJbGlzdF9kZWxfaW5pdCgmdXJicC0+dXJiX2xpc3QpOworCQl1aGNpX2Rlc3Ryb3lfdXJiX3ByaXYodWhjaSwgdXJiKTsKKwl9IGVsc2UKKwkJcmV0ID0gMDsKKworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVoY2ktPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUmV0dXJuIHRoZSByZXN1bHQgb2YgYSB0cmFuc2ZlcgorICovCitzdGF0aWMgdm9pZCB1aGNpX3RyYW5zZmVyX3Jlc3VsdChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpbnQgcmV0ID0gLUVJTlBST0dSRVNTOworCXN0cnVjdCB1cmJfcHJpdiAqdXJicDsKKworCXNwaW5fbG9jaygmdXJiLT5sb2NrKTsKKworCXVyYnAgPSAoc3RydWN0IHVyYl9wcml2ICopdXJiLT5oY3ByaXY7CisKKwlpZiAodXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKQkvKiBVUkIgYWxyZWFkeSBkZXF1ZXVlZCAqLworCQlnb3RvIG91dDsKKworCXN3aXRjaCAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkpIHsKKwljYXNlIFBJUEVfQ09OVFJPTDoKKwkJcmV0ID0gdWhjaV9yZXN1bHRfY29udHJvbCh1aGNpLCB1cmIpOworCQlicmVhazsKKwljYXNlIFBJUEVfQlVMSzoKKwljYXNlIFBJUEVfSU5URVJSVVBUOgorCQlyZXQgPSB1aGNpX3Jlc3VsdF9jb21tb24odWhjaSwgdXJiKTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQlyZXQgPSB1aGNpX3Jlc3VsdF9pc29jaHJvbm91cyh1aGNpLCB1cmIpOworCQlicmVhazsKKwl9CisKKwlpZiAocmV0ID09IC1FSU5QUk9HUkVTUykKKwkJZ290byBvdXQ7CisJdXJiLT5zdGF0dXMgPSByZXQ7CisKKwlzd2l0Y2ggKHVzYl9waXBldHlwZSh1cmItPnBpcGUpKSB7CisJY2FzZSBQSVBFX0NPTlRST0w6CisJY2FzZSBQSVBFX0JVTEs6CisJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQkvKiBSZWxlYXNlIGJhbmR3aWR0aCBmb3IgSW50ZXJydXB0IG9yIElzb2MuIHRyYW5zZmVycyAqLworCQlpZiAodXJiLT5iYW5kd2lkdGgpCisJCQl1c2JfcmVsZWFzZV9iYW5kd2lkdGgodXJiLT5kZXYsIHVyYiwgMSk7CisJCXVoY2lfdW5saW5rX2dlbmVyaWModWhjaSwgdXJiKTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwkJLyogUmVsZWFzZSBiYW5kd2lkdGggZm9yIEludGVycnVwdCBvciBJc29jLiB0cmFuc2ZlcnMgKi8KKwkJLyogTWFrZSBzdXJlIHdlIGRvbid0IHJlbGVhc2UgaWYgd2UgaGF2ZSBhIHF1ZXVlZCBVUkIgKi8KKwkJaWYgKGxpc3RfZW1wdHkoJnVyYnAtPnF1ZXVlX2xpc3QpICYmIHVyYi0+YmFuZHdpZHRoKQorCQkJdXNiX3JlbGVhc2VfYmFuZHdpZHRoKHVyYi0+ZGV2LCB1cmIsIDApOworCQllbHNlCisJCQkvKiBiYW5kd2lkdGggd2FzIHBhc3NlZCBvbiB0byBxdWV1ZWQgVVJCLCAqLworCQkJLyogc28gZG9uJ3QgbGV0IHVzYl91bmxpbmtfdXJiKCkgcmVsZWFzZSBpdCAqLworCQkJdXJiLT5iYW5kd2lkdGggPSAwOworCQl1aGNpX3VubGlua19nZW5lcmljKHVoY2ksIHVyYik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9pbmZvKHVoY2lfZGV2KHVoY2kpLCAiJXM6IHVua25vd24gcGlwZSB0eXBlICVkICIKKwkJCQkiZm9yIHVyYiAlcFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHVzYl9waXBldHlwZSh1cmItPnBpcGUpLCB1cmIpOworCX0KKworCS8qIE1vdmUgaXQgZnJvbSB1aGNpLT51cmJfbGlzdCB0byB1aGNpLT5jb21wbGV0ZV9saXN0ICovCisJdWhjaV9tb3ZldG9fY29tcGxldGUodWhjaSwgdXJicCk7CisKK291dDoKKwlzcGluX3VubG9jaygmdXJiLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgdWhjaV91bmxpbmtfZ2VuZXJpYyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCB1aGNpX3RkICp0ZDsKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSAoc3RydWN0IHVyYl9wcml2ICopdXJiLT5oY3ByaXY7CisJaW50IHByZXZhY3RpdmUgPSAwOworCisJdWhjaV9kZWNfZnNicih1aGNpLCB1cmIpOwkvKiBTYWZlIHNpbmNlIGl0IGNoZWNrcyAqLworCisJLyoKKwkgKiBOb3cgd2UgbmVlZCB0byBmaW5kIG91dCB3aGF0IHRoZSBsYXN0IHN1Y2Nlc3NmdWwgdG9nZ2xlIHdhcworCSAqIHNvIHdlIGNhbiB1cGRhdGUgdGhlIGxvY2FsIGRhdGEgdG9nZ2xlIGZvciB0aGUgbmV4dCB0cmFuc2ZlcgorCSAqCisJICogVGhlcmUgYXJlIDIgd2F5cyB0aGUgbGFzdCBzdWNjZXNzZnVsIGNvbXBsZXRlZCBURCBpcyBmb3VuZDoKKwkgKgorCSAqIDEpIFRoZSBURCBpcyBOT1QgYWN0aXZlIGFuZCB0aGUgYWN0dWFsIGxlbmd0aCA8IGV4cGVjdGVkIGxlbmd0aAorCSAqIDIpIFRoZSBURCBpcyBOT1QgYWN0aXZlIGFuZCBpdCdzIHRoZSBsYXN0IFREIGluIHRoZSBjaGFpbgorCSAqCisJICogYW5kIGEgdGhpcmQgd2F5IHRoZSBmaXJzdCB1bmNvbXBsZXRlZCBURCBpcyBmb3VuZDoKKwkgKgorCSAqIDMpIFRoZSBURCBpcyBhY3RpdmUgYW5kIHRoZSBwcmV2aW91cyBURCBpcyBOT1QgYWN0aXZlCisJICoKKwkgKiBDb250cm9sIGFuZCBJc29jaHJvbm91cyBpZ25vcmUgdGhlIHRvZ2dsZSwgc28gdGhpcyBpcyBzYWZlCisJICogZm9yIGFsbCB0eXBlcworCSAqCisJICogRklYTUU6IFRoZSB0b2dnbGUgZml4dXBzIHdvbid0IGJlIDEwMCUgcmVsaWFibGUgdW50aWwgd2UKKwkgKiBjaGFuZ2Ugb3ZlciB0byB1c2luZyBhIHNpbmdsZSBxdWV1ZSBmb3IgZWFjaCBlbmRwb2ludCBhbmQKKwkgKiBzdG9wIHRoZSBxdWV1ZSBiZWZvcmUgdW5saW5raW5nLgorCSAqLworCWhlYWQgPSAmdXJicC0+dGRfbGlzdDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRkLCBoZWFkLCBsaXN0KSB7CisJCXVuc2lnbmVkIGludCBjdHJsc3RhdCA9IHRkX3N0YXR1cyh0ZCk7CisKKwkJaWYgKCEoY3RybHN0YXQgJiBURF9DVFJMX0FDVElWRSkgJiYKKwkJCQkodWhjaV9hY3R1YWxfbGVuZ3RoKGN0cmxzdGF0KSA8CisJCQkJIHVoY2lfZXhwZWN0ZWRfbGVuZ3RoKHRkX3Rva2VuKHRkKSkgfHwKKwkJCQl0ZC0+bGlzdC5uZXh0ID09IGhlYWQpKQorCQkJdXNiX3NldHRvZ2dsZSh1cmItPmRldiwgdWhjaV9lbmRwb2ludCh0ZF90b2tlbih0ZCkpLAorCQkJCXVoY2lfcGFja2V0b3V0KHRkX3Rva2VuKHRkKSksCisJCQkJdWhjaV90b2dnbGUodGRfdG9rZW4odGQpKSBeIDEpOworCQllbHNlIGlmICgoY3RybHN0YXQgJiBURF9DVFJMX0FDVElWRSkgJiYgIXByZXZhY3RpdmUpCisJCQl1c2Jfc2V0dG9nZ2xlKHVyYi0+ZGV2LCB1aGNpX2VuZHBvaW50KHRkX3Rva2VuKHRkKSksCisJCQkJdWhjaV9wYWNrZXRvdXQodGRfdG9rZW4odGQpKSwKKwkJCQl1aGNpX3RvZ2dsZSh0ZF90b2tlbih0ZCkpKTsKKworCQlwcmV2YWN0aXZlID0gY3RybHN0YXQgJiBURF9DVFJMX0FDVElWRTsKKwl9CisKKwl1aGNpX2RlbGV0ZV9xdWV1ZWRfdXJiKHVoY2ksIHVyYik7CisKKwkvKiBUaGUgaW50ZXJydXB0IGxvb3Agd2lsbCByZWNsYWltIHRoZSBRSCdzICovCisJdWhjaV9yZW1vdmVfcWgodWhjaSwgdXJicC0+cWgpOworCXVyYnAtPnFoID0gTlVMTDsKK30KKworc3RhdGljIGludCB1aGNpX3VyYl9kZXF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBoY2RfdG9fdWhjaShoY2QpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVoY2ktPmxvY2ssIGZsYWdzKTsKKwl1cmJwID0gdXJiLT5oY3ByaXY7CisJaWYgKCF1cmJwKQkJCS8qIFVSQiB3YXMgbmV2ZXIgbGlua2VkISAqLworCQlnb3RvIGRvbmU7CisJbGlzdF9kZWxfaW5pdCgmdXJicC0+dXJiX2xpc3QpOworCisJdWhjaV91bmxpbmtfZ2VuZXJpYyh1aGNpLCB1cmIpOworCisJdWhjaV9nZXRfY3VycmVudF9mcmFtZV9udW1iZXIodWhjaSk7CisJaWYgKHVoY2ktPmZyYW1lX251bWJlciArIHVoY2ktPmlzX3N0b3BwZWQgIT0gdWhjaS0+dXJiX3JlbW92ZV9hZ2UpIHsKKwkJdWhjaV9yZW1vdmVfcGVuZGluZ191cmJwcyh1aGNpKTsKKwkJdWhjaS0+dXJiX3JlbW92ZV9hZ2UgPSB1aGNpLT5mcmFtZV9udW1iZXI7CisJfQorCisJLyogSWYgd2UncmUgdGhlIGZpcnN0LCBzZXQgdGhlIG5leHQgaW50ZXJydXB0IGJpdCAqLworCWlmIChsaXN0X2VtcHR5KCZ1aGNpLT51cmJfcmVtb3ZlX2xpc3QpKQorCQl1aGNpX3NldF9uZXh0X2ludGVycnVwdCh1aGNpKTsKKwlsaXN0X2FkZF90YWlsKCZ1cmJwLT51cmJfbGlzdCwgJnVoY2ktPnVyYl9yZW1vdmVfbGlzdCk7CisKK2RvbmU6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWhjaS0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVoY2lfZnNicl90aW1lb3V0KHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1cmJfcHJpdiAqdXJicCA9IChzdHJ1Y3QgdXJiX3ByaXYgKil1cmItPmhjcHJpdjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCB1aGNpX3RkICp0ZDsKKwlpbnQgY291bnQgPSAwOworCisJdWhjaV9kZWNfZnNicih1aGNpLCB1cmIpOworCisJdXJicC0+ZnNicl90aW1lb3V0ID0gMTsKKworCS8qCisJICogSWRlYWxseSB3ZSB3b3VsZCB3YW50IHRvIGZpeCBxaC0+ZWxlbWVudCBhcyB3ZWxsLCBidXQgaXQncworCSAqIHJlYWQvd3JpdGUgYnkgdGhlIEhDLCBzbyB0aGF0IGNhbiBpbnRyb2R1Y2UgYSByYWNlLiBJdCdzIG5vdAorCSAqIHJlYWxseSB3b3J0aCB0aGUgaGFzc2xlCisJICovCisKKwloZWFkID0gJnVyYnAtPnRkX2xpc3Q7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZCwgaGVhZCwgbGlzdCkgeworCQkvKgorCQkgKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZG8gdGhlIGxhc3Qgb25lIChzaW5jZSBpdCdsbCBoYXZlIHRoZQorCQkgKiBURVJNIGJpdCBzZXQpIGFzIHdlbGwgYXMgd2Ugc2tpcCBldmVyeSBzbyBtYW55IFREJ3MgdG8KKwkJICogbWFrZSBzdXJlIGl0IGRvZXNuJ3QgaG9nIHRoZSBiYW5kd2lkdGgKKwkJICovCisJCWlmICh0ZC0+bGlzdC5uZXh0ICE9IGhlYWQgJiYgKGNvdW50ICUgREVQVEhfSU5URVJWQUwpID09CisJCQkJKERFUFRIX0lOVEVSVkFMIC0gMSkpCisJCQl0ZC0+bGluayB8PSBVSENJX1BUUl9ERVBUSDsKKworCQljb3VudCsrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1aGNpX2ZyZWVfcGVuZGluZ19xaHMoc3RydWN0IHVoY2lfaGNkICp1aGNpKQoreworCXN0cnVjdCB1aGNpX3FoICpxaCwgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShxaCwgdG1wLCAmdWhjaS0+cWhfcmVtb3ZlX2xpc3QsIHJlbW92ZV9saXN0KSB7CisJCWxpc3RfZGVsX2luaXQoJnFoLT5yZW1vdmVfbGlzdCk7CisKKwkJdWhjaV9mcmVlX3FoKHVoY2ksIHFoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVoY2lfZnJlZV9wZW5kaW5nX3RkcyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCit7CisJc3RydWN0IHVoY2lfdGQgKnRkLCAqdG1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRkLCB0bXAsICZ1aGNpLT50ZF9yZW1vdmVfbGlzdCwgcmVtb3ZlX2xpc3QpIHsKKwkJbGlzdF9kZWxfaW5pdCgmdGQtPnJlbW92ZV9saXN0KTsKKworCQl1aGNpX2ZyZWVfdGQodWhjaSwgdGQpOworCX0KK30KKworc3RhdGljIHZvaWQKK3VoY2lfZmluaXNoX3VyYihzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorX19yZWxlYXNlcyh1aGNpLT5sb2NrKQorX19hY3F1aXJlcyh1aGNpLT5sb2NrKQoreworCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CisKKwl1aGNpX2Rlc3Ryb3lfdXJiX3ByaXYodWhjaSwgdXJiKTsKKworCXNwaW5fdW5sb2NrKCZ1aGNpLT5sb2NrKTsKKwl1c2JfaGNkX2dpdmViYWNrX3VyYihoY2QsIHVyYiwgcmVncyk7CisJc3Bpbl9sb2NrKCZ1aGNpLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgdWhjaV9maW5pc2hfY29tcGxldGlvbihzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1cmJfcHJpdiAqdXJicCwgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1cmJwLCB0bXAsICZ1aGNpLT5jb21wbGV0ZV9saXN0LCB1cmJfbGlzdCkgeworCQlzdHJ1Y3QgdXJiICp1cmIgPSB1cmJwLT51cmI7CisKKwkJbGlzdF9kZWxfaW5pdCgmdXJicC0+dXJiX2xpc3QpOworCQl1aGNpX2ZpbmlzaF91cmIodWhjaV90b19oY2QodWhjaSksIHVyYiwgcmVncyk7CisJfQorfQorCitzdGF0aWMgdm9pZCB1aGNpX3JlbW92ZV9wZW5kaW5nX3VyYnBzKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSkKK3sKKworCS8qIFNwbGljZSB0aGUgdXJiX3JlbW92ZV9saXN0IG9udG8gdGhlIGVuZCBvZiB0aGUgY29tcGxldGVfbGlzdCAqLworCWxpc3Rfc3BsaWNlX2luaXQoJnVoY2ktPnVyYl9yZW1vdmVfbGlzdCwgdWhjaS0+Y29tcGxldGVfbGlzdC5wcmV2KTsKK30KKworLyogUHJvY2VzcyBldmVudHMgaW4gdGhlIHNjaGVkdWxlLCBidXQgb25seSBpbiBvbmUgdGhyZWFkIGF0IGEgdGltZSAqLworc3RhdGljIHZvaWQgdWhjaV9zY2FuX3NjaGVkdWxlKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwLCAqdG1wOworCisJLyogRG9uJ3QgYWxsb3cgcmUtZW50cmFudCBjYWxscyAqLworCWlmICh1aGNpLT5zY2FuX2luX3Byb2dyZXNzKSB7CisJCXVoY2ktPm5lZWRfcmVzY2FuID0gMTsKKwkJcmV0dXJuOworCX0KKwl1aGNpLT5zY2FuX2luX3Byb2dyZXNzID0gMTsKKyByZXNjYW46CisJdWhjaS0+bmVlZF9yZXNjYW4gPSAwOworCisJdWhjaV9nZXRfY3VycmVudF9mcmFtZV9udW1iZXIodWhjaSk7CisKKwlpZiAodWhjaS0+ZnJhbWVfbnVtYmVyICsgdWhjaS0+aXNfc3RvcHBlZCAhPSB1aGNpLT5xaF9yZW1vdmVfYWdlKQorCQl1aGNpX2ZyZWVfcGVuZGluZ19xaHModWhjaSk7CisJaWYgKHVoY2ktPmZyYW1lX251bWJlciArIHVoY2ktPmlzX3N0b3BwZWQgIT0gdWhjaS0+dGRfcmVtb3ZlX2FnZSkKKwkJdWhjaV9mcmVlX3BlbmRpbmdfdGRzKHVoY2kpOworCWlmICh1aGNpLT5mcmFtZV9udW1iZXIgKyB1aGNpLT5pc19zdG9wcGVkICE9IHVoY2ktPnVyYl9yZW1vdmVfYWdlKQorCQl1aGNpX3JlbW92ZV9wZW5kaW5nX3VyYnBzKHVoY2kpOworCisJLyogV2FsayB0aGUgbGlzdCBvZiBwZW5kaW5nIFVSQnMgdG8gc2VlIHdoaWNoIG9uZXMgY29tcGxldGVkCisJICogKG11c3QgYmUgX3NhZmUgYmVjYXVzZSB1aGNpX3RyYW5zZmVyX3Jlc3VsdCgpIGRlcXVldWVzIFVSQnMpICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVyYnAsIHRtcCwgJnVoY2ktPnVyYl9saXN0LCB1cmJfbGlzdCkgeworCQlzdHJ1Y3QgdXJiICp1cmIgPSB1cmJwLT51cmI7CisKKwkJLyogQ2hlY2tzIHRoZSBzdGF0dXMgYW5kIGRvZXMgYWxsIG9mIHRoZSBtYWdpYyBuZWNlc3NhcnkgKi8KKwkJdWhjaV90cmFuc2Zlcl9yZXN1bHQodWhjaSwgdXJiKTsKKwl9CisJdWhjaV9maW5pc2hfY29tcGxldGlvbih1aGNpLCByZWdzKTsKKworCS8qIElmIHRoZSBjb250cm9sbGVyIGlzIHN0b3BwZWQsIHdlIGNhbiBmaW5pc2ggdGhlc2Ugb2ZmIHJpZ2h0IG5vdyAqLworCWlmICh1aGNpLT5pc19zdG9wcGVkKSB7CisJCXVoY2lfZnJlZV9wZW5kaW5nX3Focyh1aGNpKTsKKwkJdWhjaV9mcmVlX3BlbmRpbmdfdGRzKHVoY2kpOworCQl1aGNpX3JlbW92ZV9wZW5kaW5nX3VyYnBzKHVoY2kpOworCX0KKworCWlmICh1aGNpLT5uZWVkX3Jlc2NhbikKKwkJZ290byByZXNjYW47CisJdWhjaS0+c2Nhbl9pbl9wcm9ncmVzcyA9IDA7CisKKwlpZiAobGlzdF9lbXB0eSgmdWhjaS0+dXJiX3JlbW92ZV9saXN0KSAmJgorCSAgICBsaXN0X2VtcHR5KCZ1aGNpLT50ZF9yZW1vdmVfbGlzdCkgJiYKKwkgICAgbGlzdF9lbXB0eSgmdWhjaS0+cWhfcmVtb3ZlX2xpc3QpKQorCQl1aGNpX2NsZWFyX25leHRfaW50ZXJydXB0KHVoY2kpOworCWVsc2UKKwkJdWhjaV9zZXRfbmV4dF9pbnRlcnJ1cHQodWhjaSk7CisKKwkvKiBXYWtlIHVwIGFueW9uZSB3YWl0aW5nIGZvciBhbiBVUkIgdG8gY29tcGxldGUgKi8KKwl3YWtlX3VwX2FsbCgmdWhjaS0+d2FpdHFoKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2ltYWdlL0tjb25maWcgYi9kcml2ZXJzL3VzYi9pbWFnZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1Y2U3MDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbWFnZS9LY29uZmlnCkBAIC0wLDAgKzEsMzAgQEAKKyMKKyMgVVNCIEltYWdlaW5nIGRldmljZXMgY29uZmlndXJhdGlvbgorIworY29tbWVudCAiVVNCIEltYWdpbmcgZGV2aWNlcyIKKwlkZXBlbmRzIG9uIFVTQgorCitjb25maWcgVVNCX01EQzgwMAorCXRyaXN0YXRlICJVU0IgTXVzdGVrIE1EQzgwMCBEaWdpdGFsIENhbWVyYSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0aGlzIHR5cGUgb2Ygc3RpbGwgY2FtZXJhIHRvCisJICB5b3VyIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFRoaXMgZHJpdmVyIGNhbiBiZSB1c2VkIHdpdGggZ3Bob3RvIDAuNC4zCisJICBhbmQgaGlnaGVyIChsb29rIGF0IDxodHRwOi8vd3d3LmdwaG90by5vcmcvPikuCisJICBUbyB1c2UgaXQgY3JlYXRlIGEgZGV2aWNlIG5vZGUgd2l0aCAibWtub2QgL2Rldi9tdXN0ZWsgYyAxODAgMzIiIGFuZAorCSAgY29uZmlndXJlIGl0IGluIHlvdXIgc29mdHdhcmUuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1kYzgwMC4KKworY29uZmlnIFVTQl9NSUNST1RFSworCXRyaXN0YXRlICJNaWNyb3RlayBYNlVTQiBzY2FubmVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgU0NTSQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIE1pY3JvdGVrIFg2VVNCIGFuZAorCSAgcG9zc2libHkgdGhlIFBoYW50b20gMzM2Q1gsIFBoYW50b20gQzYgYW5kIFNjYW5NYWtlciBWNlUoUylMLgorCSAgU3VwcG9ydCBmb3IgYW55dGhpbmcgYnV0IHRoZSBYNiBpcyBleHBlcmltZW50YWwuCisJICBQbGVhc2UgcmVwb3J0IGZhaWx1cmVzIGFuZCBzdWNjZXNzZXMuCisJICBUaGUgc2Nhbm5lciB3aWxsIGFwcGVhciBhcyBhIHNjc2kgZ2VuZXJpYyBkZXZpY2UgdG8gdGhlIHJlc3QKKwkgIG9mIHRoZSBzeXN0ZW0uIFNjc2kgc3VwcG9ydCBpcyByZXF1aXJlZC4KKwkgIFRoaXMgZHJpdmVyIGNhbiBiZSBjb21waWxlZCBhcyBhIG1vZHVsZSwgY2FsbGVkIG1pY3JvdGVrLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW1hZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9pbWFnZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTQ4YWUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW1hZ2UvTWFrZWZpbGUKQEAgLTAsMCArMSw2IEBACisjCisjIE1ha2VmaWxlIGZvciBVU0IgSW1hZ2UgZHJpdmVycworIworCitvYmotJChDT05GSUdfVVNCX01EQzgwMCkJKz0gbWRjODAwLm8KK29iai0kKENPTkZJR19VU0JfTUlDUk9URUspCSs9IG1pY3JvdGVrLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jIGIvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc5MTcyMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCkBAIC0wLDAgKzEsMTA2MyBAQAorLyoKKyAqIGNvcHlyaWdodCAoQykgMTk5OS8yMDAwIGJ5IEhlbm5pbmcgWmFiZWwgPGhlbm5pbmdAdW5pLXBhZGVyYm9ybi5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisKKy8qCisgKglVU0ItS2VybmVsIERyaXZlciBmb3IgdGhlIE11c3RlayBNREM4MDAgRGlnaXRhbCBDYW1lcmEKKyAqCShjKSAxOTk5LzIwMDAgSGVubmluZyBaYWJlbCA8aGVubmluZ0B1bmktcGFkZXJib3JuLmRlPgorICoKKyAqCisgKiBUaGUgZHJpdmVyIGJyaW5ncyB0aGUgVVNCIGZ1bmN0aW9ucyBvZiB0aGUgTURDODAwIHRvIExpbnV4LgorICogVG8gdXNlIHRoZSBDYW1lcmEgeW91IG11c3Qgc3VwcG9ydCB0aGUgVVNCIFByb3RvY29sbCBvZiB0aGUgY2FtZXJhCisgKiB0byB0aGUgS2VybmVsIE5vZGUuCisgKiBUaGUgRHJpdmVyIHVzZXMgYSBtaXNjIGRldmljZSBOb2RlLiBDcmVhdGUgaXQgd2l0aCA6CisgKiBta25vZCAvZGV2L211c3RlayBjIDE4MCAzMgorICoKKyAqIFRoZSBkcml2ZXIgc3VwcG9ydHMgb25seSBvbmUgY2FtZXJhLgorICogCisgKiBGaXg6IG1kYzgwMCB1c2VkIHNsZWVwX29uIGFuZCBzbGVwdCB3aXRoIGlvX2xvY2sgaGVsZC4KKyAqIENvbnZlcnRlZCBzbGVlcF9vbiB0byB3YWl0cXVldWVzIHdpdGggc2NoZWR1bGVfdGltZW91dCBhbmQgbWFkZSBpb19sb2NrCisgKiBhIHNlbWFwaG9yZSBmcm9tIGEgc3BpbmxvY2suCisgKiBieSBPbGl2ZXIgTmV1a3VtIDxvbGl2ZXJAbmV1a3VtLm5hbWU+CisgKiAoMDIvMTIvMjAwMSkKKyAqIAorICogSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZC4KKyAqICgwOC8wNC8yMDAxKSBnYgorICoKKyAqIHZlcnNpb24gMC43LjUKKyAqIEZpeGVkIHBvdGVudGlhbCBTTVAgcmFjZXMgd2l0aCBTcGlubG9ja3MuCisgKiBUaGFua3MgdG8gT2xpdmVyIE5ldWt1bSA8b2xpdmVyQG5ldWt1bS5uYW1lPiB3aG8gCisgKiBub3RpY2VkIHRoZSByYWNlIGNvbmRpdGlvbnMuCisgKiAoMzAvMTAvMjAwMCkKKyAqCisgKiBGaXhlZDogU2V0dGluZyB1cmItPmRldiBiZWZvcmUgc3VibWl0dGluZyB1cmIuCisgKiBieSBHcmVnIEtIIDxncmVnQGtyb2FoLmNvbT4KKyAqICgxMy8xMC8yMDAwKQorICoKKyAqIHZlcnNpb24gMC43LjMKKyAqIGJ1Z2ZpeCA6IFRoZSBtZGM4MDAtPnN0YXRlIGZpZWxkIGdldHMgc2V0IHRvIFJFQURZIGFmdGVyIHRoZQorICogdGhlIGRpY29ubmVjdCBmdW5jdGlvbiBzZXRzIGl0IHRvIE5PVF9DT05ORUNURUQuIFRoaXMgbWFrZXMgdGhlCisgKiBkcml2ZXIgcnVubmluZyBsaWtlIHRoZSBjYW1lcmEgaXMgY29ubmVjdGVkIGFuZCBjYXVzZXMgc29tZQorICogaGFuZyB1cHMuCisgKgorICogdmVyc2lvbiAwLjcuMQorICogTU9EX0lOQyBhbmQgTU9EX0RFQyBhcmUgY2hhbmdlZCBpbiB1c2JfcHJvYmUgdG8gcHJldmVudCBsb2FkL3VubG9hZAorICogcHJvYmxlbXMgd2hlbiBjb21waWxlZCBhcyBNb2R1bGUuCisgKiAoMDQvMDQvMjAwMCkKKyAqCisgKiBUaGUgbWRjODAwIGRyaXZlciBnZXRzIGFzc2lnbmVkIHRoZSBVU0IgTWlub3IgMzItNDcuIFRoZSBSZWdpc3RyYXRpb24KKyAqIHdhcyB1cGRhdGVkIHRvIHVzZSB0aGVzZSB2YWx1ZXMuCisgKiAoMjYvMDMvMjAwMCkKKyAqCisgKiBUaGUgSW5pdCB1bmQgRXhpdCBNb2R1bGUgRnVuY3Rpb24gYXJlIHVwZGF0ZWQuCisgKiAoMDEvMDMvMjAwMCkKKyAqCisgKiB2ZXJzaW9uIDAuNy4wCisgKiBSZXdyaXRlIG9mIHRoZSBkcml2ZXIgOiBUaGUgZHJpdmVyIG5vdyB1c2VzIFVSQidzLiBUaGUgb2xkIHN0dWZmCisgKiBoYXMgYmVlbiByZW1vdmVkLgorICoKKyAqIHZlcnNpb24gMC42LjAKKyAqIFJld3JpdGUgb2YgdGhpcyBkcml2ZXI6IFRoZSBFbXVsYXRpb24gb2YgdGhlIHJzMjMyIHByb3RvY29sbAorICogaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBkcml2ZXIuIEEgc3BlY2lhbCBleGVjdXRlQ29tbWFuZCBmdW5jdGlvbgorICogZm9yIHRoaXMgZHJpdmVyIGlzIGluY2x1ZGVkIHRvIGdwaG90by4KKyAqIFRoZSBkcml2ZXIgc3VwcG9ydHMgdHdvIGtpbmQgb2YgY29tbXVuaWNhdGlvbiB0byBidWxrIGVuZHBvaW50cy4KKyAqIEVpdGhlciB3aXRoIHRoZSBkZXYtPmJ1cy0+b3BzLT5idWxrLi4uIG9yIHdpdGggY2FsbGJhY2sgZnVuY3Rpb24uCisgKiAoMDkvMTEvMTk5OSkKKyAqCisgKiB2ZXJzaW9uIDAuNS4wOgorICogZmlyc3QgVmVyc2lvbiB0aGF0IGdldHMgYSB2ZXJzaW9uIG51bWJlci4gTW9zdCBvZiB0aGUgbmVlZGVkCisgKiBmdW5jdGlvbnMgd29yay4KKyAqICgyMC8xMC8xOTk5KQorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjcuNSAoMzAvMTAvMjAwMCkiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkhlbm5pbmcgWmFiZWwgPGhlbm5pbmdAdW5pLXBhZGVyYm9ybi5kZT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgRHJpdmVyIGZvciBNdXN0ZWsgTURDODAwIERpZ2l0YWwgQ2FtZXJhIgorCisvKiBWZW5kb3IgYW5kIFByb2R1Y3QgSW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgTURDODAwX1ZFTkRPUl9JRCAJMHgwNTVmCisjZGVmaW5lIE1EQzgwMF9QUk9EVUNUX0lECTB4YTgwMAorCisvKiBUaW1lb3V0cyAobXNlYykgKi8KKyNkZWZpbmUgVE9fRE9XTkxPQURfR0VUX1JFQURZCQkxNTAwCisjZGVmaW5lIFRPX0RPV05MT0FEX0dFVF9CVVNZCQkxNTAwCisjZGVmaW5lIFRPX1dSSVRFX0dFVF9SRUFEWQkJMTAwMAorI2RlZmluZSBUT19ERUZBVUxUX0NPTU1BTkQJCTUwMDAKKyNkZWZpbmUgVE9fUkVBRF9GUk9NX0lSUSAJCVRPX0RFRkFVTFRfQ09NTUFORAorI2RlZmluZSBUT19HRVRfUkVBRFkJCQlUT19ERUZBVUxUX0NPTU1BTkQKKworLyogTWlub3IgTnVtYmVyIG9mIHRoZSBkZXZpY2UgKGNyZWF0ZSB3aXRoIG1rbm9kIC9kZXYvbXVzdGVrIGMgMTgwIDMyKSAqLworI2RlZmluZSBNREM4MDBfREVWSUNFX01JTk9SX0JBU0UgMzIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwlEYXRhIGFuZCBzdHJ1Y3RzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwordHlwZWRlZiBlbnVtIHsKKwlOT1RfQ09OTkVDVEVELCBSRUFEWSwgV09SS0lORywgRE9XTkxPQUQKK30gbWRjODAwX3N0YXRlOworCisKKy8qIERhdGEgZm9yIHRoZSBkcml2ZXIgKi8KK3N0cnVjdCBtZGM4MDBfZGF0YQoreworCXN0cnVjdCB1c2JfZGV2aWNlICoJZGV2OwkJCS8vIERldmljZSBEYXRhCisJbWRjODAwX3N0YXRlIAkJc3RhdGU7CisKKwl1bnNpZ25lZCBpbnQJCWVuZHBvaW50IFs0XTsKKworCXN0cnVjdCB1cmIgKgkJaXJxX3VyYjsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlpcnFfd2FpdDsKKwlpbnQJCQlpcnFfd29rZW47CisJY2hhcioJCQlpcnFfdXJiX2J1ZmZlcjsKKworCWludAkJCWNhbWVyYV9idXN5OyAgICAgICAgICAvLyBpcyBjYW1lcmEgYnVzeSA/CisJaW50IAkJCWNhbWVyYV9yZXF1ZXN0X3JlYWR5OyAvLyBTdGF0dXMgdG8gc3luY2hyb25pemUgd2l0aCBpcnEKKwljaGFyIAkJCWNhbWVyYV9yZXNwb25zZSBbOF07ICAvLyBsYXN0IEJ5dGVzIHNlbmQgYWZ0ZXIgYnVzeQorCisJc3RydWN0IHVyYiAqICAgCQl3cml0ZV91cmI7CisJY2hhcioJCQl3cml0ZV91cmJfYnVmZmVyOworCXdhaXRfcXVldWVfaGVhZF90CXdyaXRlX3dhaXQ7CisJaW50CQkJd3JpdHRlbjsKKworCisJc3RydWN0IHVyYiAqICAgCQlkb3dubG9hZF91cmI7CisJY2hhcioJCQlkb3dubG9hZF91cmJfYnVmZmVyOworCXdhaXRfcXVldWVfaGVhZF90CWRvd25sb2FkX3dhaXQ7CisJaW50CQkJZG93bmxvYWRlZDsKKwlpbnQJCQlkb3dubG9hZF9sZWZ0OwkJLy8gQnl0ZXMgbGVmdCB0byBkb3dubG9hZCA/CisKKworCS8qIERldmljZSBEYXRhICovCisJY2hhcgkJCW91dCBbNjRdOwkvLyBBbnN3ZXIgQnVmZmVyCisJaW50IAkJCW91dF9wdHI7CS8vIEluZGV4IHRvIHRoZSBmaXJzdCBub3QgcmVhZGVuIGJ5dGUKKwlpbnQJCQlvdXRfY291bnQ7CS8vIEJ5dGVzIGluIHRoZSBidWZmZXIKKworCWludAkJCW9wZW47CQkvLyBDYW1lcmEgZGV2aWNlIG9wZW4gPworCXN0cnVjdCBzZW1hcGhvcmUJaW9fbG9jazsJLy8gSU8gLWxvY2sKKworCWNoYXIgCQkJaW4gWzhdOwkJLy8gQ29tbWFuZCBJbnB1dCBCdWZmZXIKKwlpbnQgIAkJCWluX2NvdW50OworCisJaW50CQkJcGljX2luZGV4OwkvLyBDYWNoZSBmb3IgdGhlIEltYWdlc2l6ZSAoLTEgZm9yIG5vdGhpbmcgY2FjaGVkICkKKwlpbnQJCQlwaWNfbGVuOworCWludAkJCW1pbm9yOworfTsKKworCisvKiBTcGVjaWZpY2F0aW9uIG9mIHRoZSBFbmRwb2ludHMgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgbWRjODAwX2VkIFs0XSA9Cit7CisJeyAKKwkJLmJMZW5ndGggPSAJCTAsCisJCS5iRGVzY3JpcHRvclR5cGUgPQkwLAorCQkuYkVuZHBvaW50QWRkcmVzcyA9CTB4MDEsCisJCS5ibUF0dHJpYnV0ZXMgPSAJMHgwMiwKKwkJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig4KSwKKwkJLmJJbnRlcnZhbCA9IAkJMCwKKwkJLmJSZWZyZXNoID0gCQkwLAorCQkuYlN5bmNoQWRkcmVzcyA9IAkwLAorCX0sCisJeworCQkuYkxlbmd0aCA9IAkJMCwKKwkJLmJEZXNjcmlwdG9yVHlwZSA9IAkwLAorCQkuYkVuZHBvaW50QWRkcmVzcyA9IAkweDgyLAorCQkuYm1BdHRyaWJ1dGVzID0gCTB4MDMsCisJCS53TWF4UGFja2V0U2l6ZSA9IAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDgpLAorCQkuYkludGVydmFsID0gCQkwLAorCQkuYlJlZnJlc2ggPSAJCTAsCisJCS5iU3luY2hBZGRyZXNzID0gCTAsCisJfSwKKwl7CisJCS5iTGVuZ3RoID0gCQkwLAorCQkuYkRlc2NyaXB0b3JUeXBlID0gCTAsCisJCS5iRW5kcG9pbnRBZGRyZXNzID0gCTB4MDMsCisJCS5ibUF0dHJpYnV0ZXMgPSAJMHgwMiwKKwkJLndNYXhQYWNrZXRTaXplID0gCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNjQpLAorCQkuYkludGVydmFsID0gCQkwLAorCQkuYlJlZnJlc2ggPSAJCTAsCisJCS5iU3luY2hBZGRyZXNzID0gCTAsCisJfSwKKwl7CisJCS5iTGVuZ3RoID0gCQkwLAorCQkuYkRlc2NyaXB0b3JUeXBlID0gCTAsCisJCS5iRW5kcG9pbnRBZGRyZXNzID0gCTB4ODQsCisJCS5ibUF0dHJpYnV0ZXMgPSAJMHgwMiwKKwkJLndNYXhQYWNrZXRTaXplID0gCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNjQpLAorCQkuYkludGVydmFsID0gCQkwLAorCQkuYlJlZnJlc2ggPSAJCTAsCisJCS5iU3luY2hBZGRyZXNzID0gCTAsCisJfSwKK307CisKKy8qIFRoZSBWYXJpYWJsZSB1c2VkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgbWRjODAwX2RhdGEqIG1kYzgwMDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJVGhlIFVTQiBQYXJ0IG9mIHRoZSBkcml2ZXIKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgbWRjODAwX2VuZHBvaW50X2VxdWFscyAoc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICphLHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqYikKK3sKKwlyZXR1cm4gKAorCQkgICAoIGEtPmJFbmRwb2ludEFkZHJlc3MgPT0gYi0+YkVuZHBvaW50QWRkcmVzcyApCisJCSYmICggYS0+Ym1BdHRyaWJ1dGVzICAgICA9PSBiLT5ibUF0dHJpYnV0ZXMgICAgICkKKwkJJiYgKCBhLT53TWF4UGFja2V0U2l6ZSAgID09IGItPndNYXhQYWNrZXRTaXplICAgKQorCSk7Cit9CisKKworLyoKKyAqIENoZWNrcyB3aGV0aGVyIHRoZSBjYW1lcmEgcmVzcG9uZHMgYnVzeQorICovCitzdGF0aWMgaW50IG1kYzgwMF9pc0J1c3kgKGNoYXIqIGNoKQoreworCWludCBpPTA7CisJd2hpbGUgKGk8OCkKKwl7CisJCWlmIChjaCBbaV0gIT0gKGNoYXIpMHg5OSkKKwkJCXJldHVybiAwOworCQlpKys7CisJfQorCXJldHVybiAxOworfQorCisKKy8qCisgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FtZXJhIGlzIHJlYWR5CisgKi8KK3N0YXRpYyBpbnQgbWRjODAwX2lzUmVhZHkgKGNoYXIgKmNoKQoreworCWludCBpPTA7CisJd2hpbGUgKGk8OCkKKwl7CisJCWlmIChjaCBbaV0gIT0gKGNoYXIpMHhiYikKKwkJCXJldHVybiAwOworCQlpKys7CisJfQorCXJldHVybiAxOworfQorCisKKworLyoKKyAqIFVTQiBJUlEgSGFuZGxlciBmb3IgSW5wdXRMaW5lCisgKi8KK3N0YXRpYyB2b2lkIG1kYzgwMF91c2JfaXJxIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZXMpCit7CisJaW50IGRhdGFfcmVjZWl2ZWQ9MCwgd2FrZV91cDsKKwl1bnNpZ25lZCBjaGFyKiBiPXVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCBtZGM4MDBfZGF0YSogbWRjODAwPXVyYi0+Y29udGV4dDsKKworCWlmICh1cmItPnN0YXR1cyA+PSAwKQorCXsKKworCQkvL2RiZyAoIiVpICVpICVpICVpICVpICVpICVpICVpIFxuIixiWzBdLGJbMV0sYlsyXSxiWzNdLGJbNF0sYls1XSxiWzZdLGJbN10pOworCisJCWlmIChtZGM4MDBfaXNCdXN5IChiKSkKKwkJeworCQkJaWYgKCFtZGM4MDAtPmNhbWVyYV9idXN5KQorCQkJeworCQkJCW1kYzgwMC0+Y2FtZXJhX2J1c3k9MTsKKwkJCQlkYmcgKCJnZXRzIGJ1c3kiKTsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChtZGM4MDAtPmNhbWVyYV9idXN5ICYmIG1kYzgwMF9pc1JlYWR5IChiKSkKKwkJCXsKKwkJCQltZGM4MDAtPmNhbWVyYV9idXN5PTA7CisJCQkJZGJnICgiZ2V0cyByZWFkeSIpOworCQkJfQorCQl9CisJCWlmICghKG1kYzgwMF9pc0J1c3kgKGIpIHx8IG1kYzgwMF9pc1JlYWR5IChiKSkpCisJCXsKKwkJCS8qIFN0b3JlIERhdGEgaW4gY2FtZXJhX2Fuc3dlciBmaWVsZCAqLworCQkJZGJnICgiJWkgJWkgJWkgJWkgJWkgJWkgJWkgJWkgIixiWzBdLGJbMV0sYlsyXSxiWzNdLGJbNF0sYls1XSxiWzZdLGJbN10pOworCisJCQltZW1jcHkgKG1kYzgwMC0+Y2FtZXJhX3Jlc3BvbnNlLGIsOCk7CisJCQlkYXRhX3JlY2VpdmVkPTE7CisJCX0KKwl9CisJd2FrZV91cD0gKCBtZGM4MDAtPmNhbWVyYV9yZXF1ZXN0X3JlYWR5ID4gMCApCisJCSYmCisJCSgKKwkJCSgobWRjODAwLT5jYW1lcmFfcmVxdWVzdF9yZWFkeSA9PSAxKSAmJiAoIW1kYzgwMC0+Y2FtZXJhX2J1c3kpKQorCQl8fAorCQkJKChtZGM4MDAtPmNhbWVyYV9yZXF1ZXN0X3JlYWR5ID09IDIpICYmIGRhdGFfcmVjZWl2ZWQpCisJCXx8CisJCQkoKG1kYzgwMC0+Y2FtZXJhX3JlcXVlc3RfcmVhZHkgPT0gMykgJiYgKG1kYzgwMC0+Y2FtZXJhX2J1c3kpKQorCQl8fAorCQkJKHVyYi0+c3RhdHVzIDwgMCkKKwkJKTsKKworCWlmICh3YWtlX3VwKQorCXsKKwkJbWRjODAwLT5jYW1lcmFfcmVxdWVzdF9yZWFkeT0wOworCQltZGM4MDAtPmlycV93b2tlbj0xOworCQl3YWtlX3VwICgmbWRjODAwLT5pcnFfd2FpdCk7CisJfQorfQorCisKKy8qCisgKiBXYWl0cyBhIHdoaWxlIHVudGlsIHRoZSBpcnEgcmVzcG9uZHMgdGhhdCBjYW1lcmEgaXMgcmVhZHkKKyAqCisgKiAgbW9kZSA6IDA6IFdhaXQgZm9yIGNhbWVyYSBnZXRzIHJlYWR5CisgKiAgICAgICAgIDE6IFdhaXQgZm9yIHJlY2VpdmluZyBkYXRhCisgKiAgICAgICAgIDI6IFdhaXQgZm9yIGNhbWVyYSBnZXRzIGJ1c3kKKyAqCisgKiBtc2VjOiBUaW1lIHRvIHdhaXQKKyAqLworc3RhdGljIGludCBtZGM4MDBfdXNiX3dhaXRGb3JJUlEgKGludCBtb2RlLCBpbnQgbXNlYykKK3sKKwltZGM4MDAtPmNhbWVyYV9yZXF1ZXN0X3JlYWR5PTErbW9kZTsKKworCXdhaXRfZXZlbnRfdGltZW91dChtZGM4MDAtPmlycV93YWl0LCBtZGM4MDAtPmlycV93b2tlbiwgbXNlYypIWi8xMDAwKTsKKwltZGM4MDAtPmlycV93b2tlbiA9IDA7CisKKwlpZiAobWRjODAwLT5jYW1lcmFfcmVxdWVzdF9yZWFkeT4wKQorCXsKKwkJbWRjODAwLT5jYW1lcmFfcmVxdWVzdF9yZWFkeT0wOworCQllcnIgKCJ0aW1lb3V0IHdhaXRpbmcgZm9yIGNhbWVyYS4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwkKKwlpZiAobWRjODAwLT5zdGF0ZSA9PSBOT1RfQ09OTkVDVEVEKQorCXsKKwkJd2FybiAoIkNhbWVyYSBnZXRzIGRpc2Nvbm5lY3RlZCBkdXJpbmcgd2FpdGluZyBmb3IgaXJxLiIpOworCQltZGM4MDAtPmNhbWVyYV9yZXF1ZXN0X3JlYWR5PTA7CisJCXJldHVybiAtMjsKKwl9CisJCisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIFRoZSB3cml0ZV91cmIgY2FsbGJhY2sgZnVuY3Rpb24KKyAqLworc3RhdGljIHZvaWQgbWRjODAwX3VzYl93cml0ZV9ub3RpZnkgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlcykKK3sKKwlzdHJ1Y3QgbWRjODAwX2RhdGEqIG1kYzgwMD11cmItPmNvbnRleHQ7CisKKwlpZiAodXJiLT5zdGF0dXMgIT0gMCkKKwl7CisJCWVyciAoIndyaXRpbmcgY29tbWFuZCBmYWlscyAoc3RhdHVzPSVpKSIsIHVyYi0+c3RhdHVzKTsKKwl9CisJZWxzZQorCXsJCisJCW1kYzgwMC0+c3RhdGU9UkVBRFk7CisJfQorCW1kYzgwMC0+d3JpdHRlbiA9IDE7CisJd2FrZV91cCAoJm1kYzgwMC0+d3JpdGVfd2FpdCk7Cit9CisKKworLyoKKyAqIFRoZSBkb3dubG9hZF91cmIgY2FsbGJhY2sgZnVuY3Rpb24KKyAqLworc3RhdGljIHZvaWQgbWRjODAwX3VzYl9kb3dubG9hZF9ub3RpZnkgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlcykKK3sKKwlzdHJ1Y3QgbWRjODAwX2RhdGEqIG1kYzgwMD11cmItPmNvbnRleHQ7CisKKwlpZiAodXJiLT5zdGF0dXMgPT0gMCkKKwl7CisJCS8qIEZpbGwgb3V0cHV0IGJ1ZmZlciB3aXRoIHRoZXNlIGRhdGEgKi8KKwkJbWVtY3B5IChtZGM4MDAtPm91dCwgIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCA2NCk7CisJCW1kYzgwMC0+b3V0X2NvdW50PTY0OworCQltZGM4MDAtPm91dF9wdHI9MDsKKwkJbWRjODAwLT5kb3dubG9hZF9sZWZ0LT02NDsKKwkJaWYgKG1kYzgwMC0+ZG93bmxvYWRfbGVmdCA9PSAwKQorCQl7CisJCQltZGM4MDAtPnN0YXRlPVJFQURZOworCQl9CisJfQorCWVsc2UKKwl7CisJCWVyciAoInJlcXVlc3QgYnl0ZXMgZmFpbHMgKHN0YXR1czolaSkiLCB1cmItPnN0YXR1cyk7CisJfQorCW1kYzgwMC0+ZG93bmxvYWRlZCA9IDE7CisJd2FrZV91cCAoJm1kYzgwMC0+ZG93bmxvYWRfd2FpdCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCVByb2JpbmcgZm9yIHRoZSBDYW1lcmEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBtZGM4MDBfdXNiX2RyaXZlcjsKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1kYzgwMF9kZXZpY2Vfb3BzOworc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIG1kYzgwMF9jbGFzcyA9IHsKKwkubmFtZSA9CQkidXNiL21kYzgwMCVkIiwKKwkuZm9wcyA9CQkmbWRjODAwX2RldmljZV9vcHMsCisJLm1vZGUgPQkJU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JUkdSUCB8IFNfSVdHUlAsCisJLm1pbm9yX2Jhc2UgPQlNREM4MDBfREVWSUNFX01JTk9SX0JBU0UsCit9OworCisKKy8qCisgKiBDYWxsYmFjayB0byBzZWFyY2ggdGhlIE11c3RlayBNREM4MDAgb24gdGhlIFVTQiBCdXMKKyAqLworc3RhdGljIGludCBtZGM4MDBfdXNiX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJaW50IGksajsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRmX2Rlc2M7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOworCWludCBpcnFfaW50ZXJ2YWw9MDsKKwlpbnQgcmV0dmFsOworCisJZGJnICgiKG1kYzgwMF91c2JfcHJvYmUpIGNhbGxlZC4iKTsKKworCisJaWYgKG1kYzgwMC0+ZGV2ICE9IE5VTEwpCisJeworCQl3YXJuICgib25seSBvbmUgTXVzdGVrIE1EQzgwMCBpcyBzdXBwb3J0ZWQuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpCisJeworCQllcnIgKCJwcm9iZSBmYWlscyAtPiB3cm9uZyBOdW1iZXIgb2YgQ29uZmlndXJhdGlvbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaW50Zl9kZXNjID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisKKwlpZiAoCisJCQkoIGludGZfZGVzYy0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gMHhmZiApCisJCXx8CSggaW50Zl9kZXNjLT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyAhPSAwICkKKwkJfHwgKCBpbnRmX2Rlc2MtPmRlc2MuYkludGVyZmFjZVByb3RvY29sICE9IDAgKQorCQl8fCAoIGludGZfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDQpCisJKQorCXsKKwkJZXJyICgicHJvYmUgZmFpbHMgLT4gd3JvbmcgSW50ZXJmYWNlIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIENoZWNrIHRoZSBFbmRwb2ludHMgKi8KKwlmb3IgKGk9MDsgaTw0OyBpKyspCisJeworCQltZGM4MDAtPmVuZHBvaW50W2ldPS0xOworCQlmb3IgKGo9MDsgajw0OyBqKyspCisJCXsKKwkJCWlmIChtZGM4MDBfZW5kcG9pbnRfZXF1YWxzICgmaW50Zl9kZXNjLT5lbmRwb2ludCBbal0uZGVzYywmbWRjODAwX2VkIFtpXSkpCisJCQl7CisJCQkJbWRjODAwLT5lbmRwb2ludFtpXT1pbnRmX2Rlc2MtPmVuZHBvaW50IFtqXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgOworCQkJCWlmIChpPT0xKQorCQkJCXsKKwkJCQkJaXJxX2ludGVydmFsPWludGZfZGVzYy0+ZW5kcG9pbnQgW2pdLmRlc2MuYkludGVydmFsOworCQkJCX0KKworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCWlmIChtZGM4MDAtPmVuZHBvaW50W2ldID09IC0xKQorCQl7CisJCQllcnIgKCJwcm9iZSBmYWlscyAtPiBXcm9uZyBFbmRwb2ludHMuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0KKworCisJaW5mbyAoIkZvdW5kIE11c3RlayBNREM4MDAgb24gVVNCLiIpOworCisJZG93biAoJm1kYzgwMC0+aW9fbG9jayk7CisKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZtZGM4MDBfY2xhc3MpOworCWlmIChyZXR2YWwpIHsKKwkJZXJyICgiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwltZGM4MDAtPmRldj1kZXY7CisJbWRjODAwLT5vcGVuPTA7CisKKwkvKiBTZXR1cCBVUkIgU3RydWN0cyAqLworCXVzYl9maWxsX2ludF91cmIgKAorCQltZGM4MDAtPmlycV91cmIsCisJCW1kYzgwMC0+ZGV2LAorCQl1c2JfcmN2aW50cGlwZSAobWRjODAwLT5kZXYsbWRjODAwLT5lbmRwb2ludCBbMV0pLAorCQltZGM4MDAtPmlycV91cmJfYnVmZmVyLAorCQk4LAorCQltZGM4MDBfdXNiX2lycSwKKwkJbWRjODAwLAorCQlpcnFfaW50ZXJ2YWwKKwkpOworCisJdXNiX2ZpbGxfYnVsa191cmIgKAorCQltZGM4MDAtPndyaXRlX3VyYiwKKwkJbWRjODAwLT5kZXYsCisJCXVzYl9zbmRidWxrcGlwZSAobWRjODAwLT5kZXYsIG1kYzgwMC0+ZW5kcG9pbnRbMF0pLAorCQltZGM4MDAtPndyaXRlX3VyYl9idWZmZXIsCisJCTgsCisJCW1kYzgwMF91c2Jfd3JpdGVfbm90aWZ5LAorCQltZGM4MDAKKwkpOworCisJdXNiX2ZpbGxfYnVsa191cmIgKAorCQltZGM4MDAtPmRvd25sb2FkX3VyYiwKKwkJbWRjODAwLT5kZXYsCisJCXVzYl9yY3ZidWxrcGlwZSAobWRjODAwLT5kZXYsIG1kYzgwMC0+ZW5kcG9pbnQgWzNdKSwKKwkJbWRjODAwLT5kb3dubG9hZF91cmJfYnVmZmVyLAorCQk2NCwKKwkJbWRjODAwX3VzYl9kb3dubG9hZF9ub3RpZnksCisJCW1kYzgwMAorCSk7CisKKwltZGM4MDAtPnN0YXRlPVJFQURZOworCisJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQorCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgbWRjODAwKTsKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogRGlzY29ubmVjdCBVU0IgZGV2aWNlIChtYXliZSB0aGUgTURDODAwKQorICovCitzdGF0aWMgdm9pZCBtZGM4MDBfdXNiX2Rpc2Nvbm5lY3QgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBtZGM4MDBfZGF0YSogbWRjODAwID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWRiZyAoIihtZGM4MDBfdXNiX2Rpc2Nvbm5lY3QpIGNhbGxlZCIpOworCisJaWYgKG1kYzgwMCkgeworCQlpZiAobWRjODAwLT5zdGF0ZSA9PSBOT1RfQ09OTkVDVEVEKQorCQkJcmV0dXJuOworCisJCXVzYl9kZXJlZ2lzdGVyX2RldihpbnRmLCAmbWRjODAwX2NsYXNzKTsKKworCQltZGM4MDAtPnN0YXRlPU5PVF9DT05ORUNURUQ7CisKKwkJdXNiX2tpbGxfdXJiKG1kYzgwMC0+aXJxX3VyYik7CisJCXVzYl9raWxsX3VyYihtZGM4MDAtPndyaXRlX3VyYik7CisJCXVzYl9raWxsX3VyYihtZGM4MDAtPmRvd25sb2FkX3VyYik7CisKKwkJbWRjODAwLT5kZXYgPSBOVUxMOworCQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCX0KKwlpbmZvICgiTXVzdGVrIE1EQzgwMCBkaXNjb25uZWN0ZWQgZnJvbSBVU0IuIik7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCVRoZSBNaXNjIGRldmljZSBQYXJ0IChmaWxlX29wZXJhdGlvbnMpCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogVGhpcyBGdW5jdGlvbiBjYWxjIHRoZSBBbnN3ZXJzaXplIGZvciBhIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBpbnQgbWRjODAwX2dldEFuc3dlclNpemUgKGNoYXIgY29tbWFuZCkKK3sKKwlzd2l0Y2ggKCh1bnNpZ25lZCBjaGFyKSBjb21tYW5kKQorCXsKKwkJY2FzZSAweDJhOgorCQljYXNlIDB4NDk6CisJCWNhc2UgMHg1MToKKwkJY2FzZSAweDBkOgorCQljYXNlIDB4MjA6CisJCWNhc2UgMHgwNzoKKwkJY2FzZSAweDAxOgorCQljYXNlIDB4MjU6CisJCWNhc2UgMHgwMDoKKwkJCXJldHVybiA4OworCisJCWNhc2UgMHgwNToKKwkJY2FzZSAweDNlOgorCQkJcmV0dXJuIG1kYzgwMC0+cGljX2xlbjsKKworCQljYXNlIDB4MDk6CisJCQlyZXR1cm4gNDA5NjsKKworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJfQorfQorCisKKy8qCisgKiBJbml0IHRoZSBkZXZpY2U6ICgxKSBhbGxvYyBtZW0gKDIpIEluY3JlYXNlIE1PRCBDb3VudCAuLgorICovCitzdGF0aWMgaW50IG1kYzgwMF9kZXZpY2Vfb3BlbiAoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IHJldHZhbD0wOworCWludCBlcnJuPTA7CisKKwlkb3duICgmbWRjODAwLT5pb19sb2NrKTsKKwkKKwlpZiAobWRjODAwLT5zdGF0ZSA9PSBOT1RfQ09OTkVDVEVEKQorCXsKKwkJZXJybj0tRUJVU1k7CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KKwlpZiAobWRjODAwLT5vcGVuKQorCXsKKwkJZXJybj0tRUJVU1k7CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KKworCW1kYzgwMC0+aW5fY291bnQ9MDsKKwltZGM4MDAtPm91dF9jb3VudD0wOworCW1kYzgwMC0+b3V0X3B0cj0wOworCW1kYzgwMC0+cGljX2luZGV4PTA7CisJbWRjODAwLT5waWNfbGVuPS0xOworCW1kYzgwMC0+ZG93bmxvYWRfbGVmdD0wOworCisJbWRjODAwLT5jYW1lcmFfYnVzeT0wOworCW1kYzgwMC0+Y2FtZXJhX3JlcXVlc3RfcmVhZHk9MDsKKworCXJldHZhbD0wOworCW1kYzgwMC0+aXJxX3VyYi0+ZGV2ID0gbWRjODAwLT5kZXY7CisJaWYgKHVzYl9zdWJtaXRfdXJiIChtZGM4MDAtPmlycV91cmIsIEdGUF9LRVJORUwpKQorCXsKKwkJZXJyICgicmVxdWVzdCBVU0IgaXJxIGZhaWxzIChzdWJtaXRfcmV0dmFsPSVpIHVyYl9zdGF0dXM9JWkpLiIscmV0dmFsLCBtZGM4MDAtPmlycV91cmItPnN0YXR1cyk7CisJCWVycm4gPSAtRUlPOworCQlnb3RvIGVycm9yX291dDsKKwl9CisKKwltZGM4MDAtPm9wZW49MTsKKwlkYmcgKCJNdXN0ZWsgTURDODAwIGRldmljZSBvcGVuZWQuIik7CisKK2Vycm9yX291dDoKKwl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJcmV0dXJuIGVycm47Cit9CisKKworLyoKKyAqIENsb3NlIHRoZSBDYW1lcmEgYW5kIHJlbGVhc2UgTWVtb3J5CisgKi8KK3N0YXRpYyBpbnQgbWRjODAwX2RldmljZV9yZWxlYXNlIChzdHJ1Y3QgaW5vZGUqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmV0dmFsPTA7CisJZGJnICgiTXVzdGVrIE1EQzgwMCBkZXZpY2UgY2xvc2VkLiIpOworCisJZG93biAoJm1kYzgwMC0+aW9fbG9jayk7CisJaWYgKG1kYzgwMC0+b3BlbiAmJiAobWRjODAwLT5zdGF0ZSAhPSBOT1RfQ09OTkVDVEVEKSkKKwl7CisJCXVzYl9raWxsX3VyYihtZGM4MDAtPmlycV91cmIpOworCQl1c2Jfa2lsbF91cmIobWRjODAwLT53cml0ZV91cmIpOworCQl1c2Jfa2lsbF91cmIobWRjODAwLT5kb3dubG9hZF91cmIpOworCQltZGM4MDAtPm9wZW49MDsKKwl9CisJZWxzZQorCXsKKwkJcmV0dmFsPS1FSU87CisJfQorCisJdXAoJm1kYzgwMC0+aW9fbG9jayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKgorICogVGhlIERldmljZSByZWFkIGNhbGxiYWNrIEZ1bmN0aW9uCisgKi8KK3N0YXRpYyBzc2l6ZV90IG1kYzgwMF9kZXZpY2VfcmVhZCAoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKQoreworCXNpemVfdCBsZWZ0PWxlbiwgc3RzPWxlbjsgLyogc2luZ2xlIHRyYW5zZmVyIHNpemUgKi8KKwljaGFyIF9fdXNlciAqcHRyID0gYnVmOworCisJZG93biAoJm1kYzgwMC0+aW9fbG9jayk7CisJaWYgKG1kYzgwMC0+c3RhdGUgPT0gTk9UX0NPTk5FQ1RFRCkKKwl7CisJCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJaWYgKG1kYzgwMC0+c3RhdGUgPT0gV09SS0lORykKKwl7CisJCXdhcm4gKCJJbGxlZ2FsIFN0YXRlIFwid29ya2luZ1wiIHJlYWNoZWQgZHVyaW5nIHJlYWQgPyEiKTsKKwkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlpZiAoIW1kYzgwMC0+b3BlbikKKwl7CisJCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwl3aGlsZSAobGVmdCkKKwl7CisJCWlmIChzaWduYWxfcGVuZGluZyAoY3VycmVudCkpIAorCQl7CisJCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCQlyZXR1cm4gLUVJTlRSOworCQl9CisKKwkJc3RzPWxlZnQgPiAobWRjODAwLT5vdXRfY291bnQtbWRjODAwLT5vdXRfcHRyKT9tZGM4MDAtPm91dF9jb3VudC1tZGM4MDAtPm91dF9wdHI6bGVmdDsKKworCQlpZiAoc3RzIDw9IDApCisJCXsKKwkJCS8qIFRvbyBsZXNzIERhdGEgaW4gYnVmZmVyICovCisJCQlpZiAobWRjODAwLT5zdGF0ZSA9PSBET1dOTE9BRCkKKwkJCXsKKwkJCQltZGM4MDAtPm91dF9jb3VudD0wOworCQkJCW1kYzgwMC0+b3V0X3B0cj0wOworCisJCQkJLyogRG93bmxvYWQgLT4gUmVxdWVzdCBuZXcgYnl0ZXMgKi8KKwkJCQltZGM4MDAtPmRvd25sb2FkX3VyYi0+ZGV2ID0gbWRjODAwLT5kZXY7CisJCQkJaWYgKHVzYl9zdWJtaXRfdXJiIChtZGM4MDAtPmRvd25sb2FkX3VyYiwgR0ZQX0tFUk5FTCkpCisJCQkJeworCQkJCQllcnIgKCJDYW4ndCBzdWJtaXQgZG93bmxvYWQgdXJiIChzdGF0dXM9JWkpIixtZGM4MDAtPmRvd25sb2FkX3VyYi0+c3RhdHVzKTsKKwkJCQkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQkJCQlyZXR1cm4gbGVuLWxlZnQ7CisJCQkJfQorCQkJCXdhaXRfZXZlbnRfdGltZW91dChtZGM4MDAtPmRvd25sb2FkX3dhaXQsIG1kYzgwMC0+ZG93bmxvYWRlZCwKKwkJCQkJCQkJCQlUT19ET1dOTE9BRF9HRVRfUkVBRFkqSFovMTAwMCk7CisJCQkJbWRjODAwLT5kb3dubG9hZGVkID0gMDsKKwkJCQlpZiAobWRjODAwLT5kb3dubG9hZF91cmItPnN0YXR1cyAhPSAwKQorCQkJCXsKKwkJCQkJZXJyICgicmVxdWVzdCBkb3dubG9hZC1ieXRlcyBmYWlscyAoc3RhdHVzPSVpKSIsbWRjODAwLT5kb3dubG9hZF91cmItPnN0YXR1cyk7CisJCQkJCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwkJCQkJcmV0dXJuIGxlbi1sZWZ0OworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiBObyBtb3JlIGJ5dGVzIC0+IHRoYXQncyBhbiBlcnJvciovCisJCQkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJLyogQ29weSBCeXRlcyAqLworCQkJaWYgKGNvcHlfdG9fdXNlcihwdHIsICZtZGM4MDAtPm91dCBbbWRjODAwLT5vdXRfcHRyXSwKKwkJCQkJCXN0cykpIHsKKwkJCQl1cCgmbWRjODAwLT5pb19sb2NrKTsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJCXB0cis9c3RzOworCQkJbGVmdC09c3RzOworCQkJbWRjODAwLT5vdXRfcHRyKz1zdHM7CisJCX0KKwl9CisKKwl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJcmV0dXJuIGxlbi1sZWZ0OworfQorCisKKy8qCisgKiBUaGUgRGV2aWNlIHdyaXRlIGNhbGxiYWNrIEZ1bmN0aW9uCisgKiBJZiBhIDhCeXRlIENvbW1hbmQgaXMgcmVjZWl2ZWQsIGl0IHdpbGwgYmUgc2VuZCB0byB0aGUgY2FtZXJhLgorICogQWZ0ZXIgdGhpcyB0aGUgZHJpdmVyIGluaXRpYXRlcyB0aGUgcmVxdWVzdCBmb3IgdGhlIGFuc3dlciBvcgorICoganVzdCB3YWl0cyB1bnRpbCB0aGUgY2FtZXJhIGJlY29tZXMgcmVhZHkuCisgKi8KK3N0YXRpYyBzc2l6ZV90IG1kYzgwMF9kZXZpY2Vfd3JpdGUgKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcykKK3sKKwlzaXplX3QgaT0wOworCisJZG93biAoJm1kYzgwMC0+aW9fbG9jayk7CisJaWYgKG1kYzgwMC0+c3RhdGUgIT0gUkVBRFkpCisJeworCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWlmICghbWRjODAwLT5vcGVuICkKKwl7CisJCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwl3aGlsZSAoaTxsZW4pCisJeworCQl1bnNpZ25lZCBjaGFyIGM7CisJCWlmIChzaWduYWxfcGVuZGluZyAoY3VycmVudCkpIAorCQl7CisJCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCQlyZXR1cm4gLUVJTlRSOworCQl9CisJCQorCQlpZihnZXRfdXNlcihjLCBidWYraSkpCisJCXsKKwkJCXVwKCZtZGM4MDAtPmlvX2xvY2spOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKworCQkvKiBjaGVjayBmb3IgY29tbWFuZCBzdGFydCAqLworCQlpZiAoYyA9PSAweDU1KQorCQl7CisJCQltZGM4MDAtPmluX2NvdW50PTA7CisJCQltZGM4MDAtPm91dF9jb3VudD0wOworCQkJbWRjODAwLT5vdXRfcHRyPTA7CisJCQltZGM4MDAtPmRvd25sb2FkX2xlZnQ9MDsKKwkJfQorCisJCS8qIHNhdmUgY29tbWFuZCBieXRlICovCisJCWlmIChtZGM4MDAtPmluX2NvdW50IDwgOCkKKwkJeworCQkJbWRjODAwLT5pblttZGM4MDAtPmluX2NvdW50XSA9IGM7CisJCQltZGM4MDAtPmluX2NvdW50Kys7CisJCX0KKwkJZWxzZQorCQl7CisJCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCS8qIENvbW1hbmQgQnVmZmVyIGZ1bGwgPyAtPiBzZW5kIGl0IHRvIGNhbWVyYSAqLworCQlpZiAobWRjODAwLT5pbl9jb3VudCA9PSA4KQorCQl7CisJCQlpbnQgYW5zd2Vyc2l6ZTsKKworCQkJaWYgKG1kYzgwMF91c2Jfd2FpdEZvcklSUSAoMCxUT19HRVRfUkVBRFkpKQorCQkJeworCQkJCWVyciAoIkNhbWVyYSBkaWRuJ3QgZ2V0IHJlYWR5LlxuIik7CisJCQkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCisJCQlhbnN3ZXJzaXplPW1kYzgwMF9nZXRBbnN3ZXJTaXplIChtZGM4MDAtPmluWzFdKTsKKworCQkJbWRjODAwLT5zdGF0ZT1XT1JLSU5HOworCQkJbWVtY3B5IChtZGM4MDAtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBtZGM4MDAtPmluLDgpOworCQkJbWRjODAwLT53cml0ZV91cmItPmRldiA9IG1kYzgwMC0+ZGV2OworCQkJaWYgKHVzYl9zdWJtaXRfdXJiIChtZGM4MDAtPndyaXRlX3VyYiwgR0ZQX0tFUk5FTCkpCisJCQl7CisJCQkJZXJyICgic3VibWl0dGluZyB3cml0ZSB1cmIgZmFpbHMgKHN0YXR1cz0laSkiLCBtZGM4MDAtPndyaXRlX3VyYi0+c3RhdHVzKTsKKwkJCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCQl3YWl0X2V2ZW50X3RpbWVvdXQobWRjODAwLT53cml0ZV93YWl0LCBtZGM4MDAtPndyaXR0ZW4sIFRPX1dSSVRFX0dFVF9SRUFEWSpIWi8xMDAwKTsKKwkJCW1kYzgwMC0+d3JpdHRlbiA9IDA7CisJCQlpZiAobWRjODAwLT5zdGF0ZSA9PSBXT1JLSU5HKQorCQkJeworCQkJCXVzYl9raWxsX3VyYihtZGM4MDAtPndyaXRlX3VyYik7CisJCQkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCisJCQlzd2l0Y2ggKCh1bnNpZ25lZCBjaGFyKSBtZGM4MDAtPmluWzFdKQorCQkJeworCQkJCWNhc2UgMHgwNTogLyogRG93bmxvYWQgSW1hZ2UgKi8KKwkJCQljYXNlIDB4M2U6IC8qIFRha2Ugc2hvdCBpbiBGaW5lIE1vZGUgKFdDYW0gTW9kZSkgKi8KKwkJCQkJaWYgKG1kYzgwMC0+cGljX2xlbiA8IDApCisJCQkJCXsKKwkJCQkJCWVyciAoImNhbGwgMHgwNyBiZWZvcmUgMHgwNSwweDNlIik7CisJCQkJCQltZGM4MDAtPnN0YXRlPVJFQURZOworCQkJCQkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQkJCQkJcmV0dXJuIC1FSU87CisJCQkJCX0KKwkJCQkJbWRjODAwLT5waWNfbGVuPS0xOworCisJCQkJY2FzZSAweDA5OiAvKiBEb3dubG9hZCBUaHVtYm5haWwgKi8KKwkJCQkJbWRjODAwLT5kb3dubG9hZF9sZWZ0PWFuc3dlcnNpemUrNjQ7CisJCQkJCW1kYzgwMC0+c3RhdGU9RE9XTkxPQUQ7CisJCQkJCW1kYzgwMF91c2Jfd2FpdEZvcklSUSAoMCxUT19ET1dOTE9BRF9HRVRfQlVTWSk7CisJCQkJCWJyZWFrOworCisKKwkJCQlkZWZhdWx0OgorCQkJCQlpZiAoYW5zd2Vyc2l6ZSkKKwkJCQkJeworCisJCQkJCQlpZiAobWRjODAwX3VzYl93YWl0Rm9ySVJRICgxLFRPX1JFQURfRlJPTV9JUlEpKQorCQkJCQkJeworCQkJCQkJCWVyciAoInJlcXVlc3RpbmcgYW5zd2VyIGZyb20gaXJxIGZhaWxzIik7CisJCQkJCQkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQkJCQkJCXJldHVybiAtRUlPOworCQkJCQkJfQorCisJCQkJCQkvKiBXcml0ZSBkdW1teSBkYXRhLCAodGhpcyBpcyB1Z2x5IGJ1dCBwYXJ0IG9mIHRoZSBVU0IgUHJvdG9jb2wgKi8KKwkJCQkJCS8qIGlmIHlvdSB1c2UgZW5kcG9pbnQgMSBhcyBidWxrIGFuZCBub3QgYXMgaXJxKSAqLworCQkJCQkJbWVtY3B5IChtZGM4MDAtPm91dCwgbWRjODAwLT5jYW1lcmFfcmVzcG9uc2UsOCk7CisKKwkJCQkJCS8qIFRoaXMgaXMgdGhlIGludGVycHJldGVkIGFuc3dlciAqLworCQkJCQkJbWVtY3B5ICgmbWRjODAwLT5vdXRbOF0sIG1kYzgwMC0+Y2FtZXJhX3Jlc3BvbnNlLDgpOworCisJCQkJCQltZGM4MDAtPm91dF9wdHI9MDsKKwkJCQkJCW1kYzgwMC0+b3V0X2NvdW50PTE2OworCisJCQkJCQkvKiBDYWNoZSB0aGUgSW1hZ2VzaXplLCBpZiBjb21tYW5kIHdhcyBnZXRJbWFnZVNpemUgKi8KKwkJCQkJCWlmIChtZGM4MDAtPmluIFsxXSA9PSAoY2hhcikgMHgwNykKKwkJCQkJCXsKKwkJCQkJCQltZGM4MDAtPnBpY19sZW49KGludCkgNjU1MzYqKHVuc2lnbmVkIGNoYXIpIG1kYzgwMC0+Y2FtZXJhX3Jlc3BvbnNlWzBdKzI1NioodW5zaWduZWQgY2hhcikgbWRjODAwLT5jYW1lcmFfcmVzcG9uc2VbMV0rKHVuc2lnbmVkIGNoYXIpIG1kYzgwMC0+Y2FtZXJhX3Jlc3BvbnNlWzJdOworCisJCQkJCQkJZGJnICgiY2FjaGVkIGltYWdlc2l6ZSA9ICVpIixtZGM4MDAtPnBpY19sZW4pOworCQkJCQkJfQorCisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlpZiAobWRjODAwX3VzYl93YWl0Rm9ySVJRICgwLFRPX0RFRkFVTFRfQ09NTUFORCkpCisJCQkJCQl7CisJCQkJCQkJZXJyICgiQ29tbWFuZCBUaW1lb3V0LiIpOworCQkJCQkJCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwkJCQkJCQlyZXR1cm4gLUVJTzsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQltZGM4MDAtPnN0YXRlPVJFQURZOworCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpKys7CisJfQorCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwlyZXR1cm4gaTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJSW5pdCBhbmQgQ2xlYW51cCB0aGlzIGRyaXZlciAoU3RydWN0cyBhbmQgdHlwZXMpCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBGaWxlIE9wZXJhdGlvbnMgb2YgdGhpcyBkcml2ZXJzICovCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZGM4MDBfZGV2aWNlX29wcyA9Cit7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLnJlYWQgPQkJbWRjODAwX2RldmljZV9yZWFkLAorCS53cml0ZSA9CW1kYzgwMF9kZXZpY2Vfd3JpdGUsCisJLm9wZW4gPQkJbWRjODAwX2RldmljZV9vcGVuLAorCS5yZWxlYXNlID0JbWRjODAwX2RldmljZV9yZWxlYXNlLAorfTsKKworCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtZGM4MDBfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKE1EQzgwMF9WRU5ET1JfSUQsIE1EQzgwMF9QUk9EVUNUX0lEKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIG1kYzgwMF90YWJsZSk7CisvKgorICogVVNCIERyaXZlciBTdHJ1Y3QgZm9yIHRoaXMgZGV2aWNlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBtZGM4MDBfdXNiX2RyaXZlciA9Cit7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJIm1kYzgwMCIsCisJLnByb2JlID0JbWRjODAwX3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CW1kYzgwMF91c2JfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQltZGM4MDBfdGFibGUKK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJSW5pdCBhbmQgQ2xlYW51cCB0aGlzIGRyaXZlciAoTWFpbiBGdW5jdGlvbnMpCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIHRyeShBKSAgICAgICAgICAgaWYgKCEoQSkpIGdvdG8gY2xlYW51cF9vbl9mYWlsOworCitzdGF0aWMgaW50IF9faW5pdCB1c2JfbWRjODAwX2luaXQgKHZvaWQpCit7CisJaW50IHJldHZhbCA9IC1FTk9ERVY7CisJLyogQWxsb2NhdGUgTWVtb3J5ICovCisJdHJ5IChtZGM4MDA9a21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgbWRjODAwX2RhdGEpLCBHRlBfS0VSTkVMKSk7CisKKwltZW1zZXQobWRjODAwLCAwLCBzaXplb2Yoc3RydWN0IG1kYzgwMF9kYXRhKSk7CisJbWRjODAwLT5kZXYgPSBOVUxMOworCW1kYzgwMC0+b3Blbj0wOworCW1kYzgwMC0+c3RhdGU9Tk9UX0NPTk5FQ1RFRDsKKwlpbml0X01VVEVYICgmbWRjODAwLT5pb19sb2NrKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQgKCZtZGM4MDAtPmlycV93YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkICgmbWRjODAwLT53cml0ZV93YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkICgmbWRjODAwLT5kb3dubG9hZF93YWl0KTsKKworCW1kYzgwMC0+aXJxX3dva2VuID0gMDsKKwltZGM4MDAtPmRvd25sb2FkZWQgPSAwOworCW1kYzgwMC0+d3JpdHRlbiA9IDA7CisKKwl0cnkgKG1kYzgwMC0+aXJxX3VyYl9idWZmZXI9a21hbGxvYyAoOCwgR0ZQX0tFUk5FTCkpOworCXRyeSAobWRjODAwLT53cml0ZV91cmJfYnVmZmVyPWttYWxsb2MgKDgsIEdGUF9LRVJORUwpKTsKKwl0cnkgKG1kYzgwMC0+ZG93bmxvYWRfdXJiX2J1ZmZlcj1rbWFsbG9jICg2NCwgR0ZQX0tFUk5FTCkpOworCisJdHJ5IChtZGM4MDAtPmlycV91cmI9dXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCkpOworCXRyeSAobWRjODAwLT5kb3dubG9hZF91cmI9dXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCkpOworCXRyeSAobWRjODAwLT53cml0ZV91cmI9dXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCkpOworCisJLyogUmVnaXN0ZXIgdGhlIGRyaXZlciAqLworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmbWRjODAwX3VzYl9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gY2xlYW51cF9vbl9mYWlsOworCisJaW5mbyAoRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKworCXJldHVybiAwOworCisJLyogQ2xlYW4gZHJpdmVyIHVwLCB3aGVuIHNvbWV0aGluZyBmYWlscyAqLworCitjbGVhbnVwX29uX2ZhaWw6CisKKwlpZiAobWRjODAwICE9IE5VTEwpCisJeworCQllcnIgKCJjYW4ndCBhbGxvYyBtZW1vcnkhIik7CisKKwkJa2ZyZWUobWRjODAwLT5kb3dubG9hZF91cmJfYnVmZmVyKTsKKwkJa2ZyZWUobWRjODAwLT53cml0ZV91cmJfYnVmZmVyKTsKKwkJa2ZyZWUobWRjODAwLT5pcnFfdXJiX2J1ZmZlcik7CisKKwkJdXNiX2ZyZWVfdXJiKG1kYzgwMC0+d3JpdGVfdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKG1kYzgwMC0+ZG93bmxvYWRfdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKG1kYzgwMC0+aXJxX3VyYik7CisKKwkJa2ZyZWUgKG1kYzgwMCk7CisJfQorCW1kYzgwMCA9IE5VTEw7CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX21kYzgwMF9jbGVhbnVwICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgmbWRjODAwX3VzYl9kcml2ZXIpOworCisJdXNiX2ZyZWVfdXJiIChtZGM4MDAtPmlycV91cmIpOworCXVzYl9mcmVlX3VyYiAobWRjODAwLT5kb3dubG9hZF91cmIpOworCXVzYl9mcmVlX3VyYiAobWRjODAwLT53cml0ZV91cmIpOworCisJa2ZyZWUgKG1kYzgwMC0+aXJxX3VyYl9idWZmZXIpOworCWtmcmVlIChtZGM4MDAtPndyaXRlX3VyYl9idWZmZXIpOworCWtmcmVlIChtZGM4MDAtPmRvd25sb2FkX3VyYl9idWZmZXIpOworCisJa2ZyZWUgKG1kYzgwMCk7CisJbWRjODAwID0gTlVMTDsKK30KKworbW9kdWxlX2luaXQgKHVzYl9tZGM4MDBfaW5pdCk7Cittb2R1bGVfZXhpdCAodXNiX21kYzgwMF9jbGVhbnVwKTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5jIGIvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTBkMzJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuYwpAQCAtMCwwICsxLDg2MiBAQAorLyogRHJpdmVyIGZvciBNaWNyb3RlayBTY2FubWFrZXIgWDYgVVNCIHNjYW5uZXIsIGFuZCBwb3NzaWJseSBvdGhlcnMuCisgKgorICogKEMpIENvcHlyaWdodCAyMDAwIEpvaG4gRnJlbWxpbiA8dmlpQHBlbmd1aW5wb3dlcmVkLmNvbT4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMCBPbGl2ZXIgTmV1a3VtIDxPbGl2ZXIuTmV1a3VtQGxyei51bmktbXVlbmNoZW4uZGU+CisgKgorICogUGFydHMgc2hhbWVsZXNzbHkgc3RvbGVuIGZyb20gdXNiLXN0b3JhZ2UgYW5kIGNvcHlyaWdodCBieSB0aGVpcgorICogYXV0aG9ycy4gVGhhbmtzIHRvIE1hdHQgRGhhcm0gZm9yIGdpdmluZyB1cyBwZXJtaXNzaW9uIQorICoKKyAqIFRoaXMgZHJpdmVyIGltcGxlbWVudHMgYSBTQ1NJIGhvc3QgY29udHJvbGxlciBkcml2ZXIgYW5kIGEgVVNCCisgKiBkZXZpY2UgZHJpdmVyLiBUbyBhdm9pZCBjb25mdXNpb24sIGFsbCB0aGUgVVNCIHJlbGF0ZWQgc3R1ZmYgaXMKKyAqIHByZWZpeGVkIGJ5IG10c191c2JfIGFuZCBhbGwgdGhlIFNDU0kgc3R1ZmYgYnkgbXRzX3Njc2lfLgorICoKKyAqIE1pY3JvdGVrICh3d3cubWljcm90ZWsuY29tKSBkaWQgbm90IHJlbGVhc2UgdGhlIHNwZWNpZmljYXRpb25zIGZvcgorICogdGhlaXIgVVNCIHByb3RvY29sIHRvIHVzLCBzbyB3ZSBoYWQgdG8gcmV2ZXJzZSBlbmdpbmVlciB0aGVtLiBXZQorICogZG9uJ3Qga25vdyBmb3Igd2hpY2ggbW9kZWxzIHRoZXkgYXJlIHZhbGlkLgorICoKKyAqIFRoZSBYNiBVU0IgaGFzIHRocmVlIGJ1bGsgZW5kcG9pbnRzLCBvbmUgb3V0cHV0ICgweDEpIGRvd24gd2hpY2gKKyAqIGNvbW1hbmRzIGFuZCBvdXRnb2luZyBkYXRhIGFyZSBzZW50LCBhbmQgdHdvIGlucHV0OiAweDgyIGZyb20gd2hpY2gKKyAqIG5vcm1hbCBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgc2Nhbm5lciAoaW4gcGFja2V0cyBvZiBtYXhpbXVtIDMyCisgKiBieXRlcykgYW5kIGZyb20gd2hpY2ggdGhlIHN0YXR1cyBieXRlIGlzIHJlYWQsIGFuZCAweDgzIGZyb20gd2hpY2gKKyAqIHRoZSByZXN1bHRzIG9mIGEgc2NhbiAob3IgcHJldmlldykgYXJlIHJlYWQgaW4gdXAgdG8gNjQgKiAxMDI0IGJ5dGUKKyAqIGNodW5rcyBieSB0aGUgV2luZG93cyBkcml2ZXIuIFdlIGRvbid0IGtub3cgaG93IG11Y2ggaXQgaXMgcG9zc2libGUKKyAqIHRvIHJlYWQgYXQgYSB0aW1lIGZyb20gMHg4My4KKyAqCisgKiBJdCBzZWVtcyBwb3NzaWJsZSB0byByZWFkICh3aXRoIFVSQiB0cmFuc2ZlcnMpIGV2ZXJ5dGhpbmcgZnJvbSAweDgyCisgKiBpbiBvbmUgZ28sIHdpdGhvdXQgYm90aGVyaW5nIHRvIHJlYWQgaW4gMzIgYnl0ZSBjaHVua3MuCisgKgorICogVGhlcmUgc2VlbXMgdG8gYmUgYW4gb3B0aW1pc2F0aW9uIG9mIGEgZnVydGhlciBSRUFEIGltcGxpY2l0IGlmCisgKiB5b3Ugc2ltcGx5IHJlYWQgZnJvbSAweDgzLgorICoKKyAqIEd1ZXNzZWQgcHJvdG9jb2w6CisgKgorICoJU2VuZCByYXcgU0NTSSBjb21tYW5kIHRvIEVQIDB4MQorICoKKyAqCUlmIHRoZXJlIGlzIGRhdGEgdG8gcmVjZWl2ZToKKyAqCQlJZiB0aGUgY29tbWFuZCB3YXMgUkVBRCBkYXRhdHlwZT1pbWFnZToKKyAqCQkJUmVhZCBhIGxvdCBvZiBkYXRhIGZyb20gRVAgMHg4MworICoJCUVsc2U6CisgKgkJCVJlYWQgZGF0YSBmcm9tIEVQIDB4ODIKKyAqCUVsc2U6CisgKgkJSWYgdGhlcmUgaXMgZGF0YSB0byB0cmFuc21pdDoKKyAqCQkJV3JpdGUgaXQgdG8gRVAgMHgxCisgKgorICoJUmVhZCBzdGF0dXMgYnl0ZSBmcm9tIEVQIDB4ODIKKyAqCisgKiBSZWZlcmVuY2VzOgorICoKKyAqIFRoZSBTQ1NJIGNvbW1hbmQgc2V0IGZvciB0aGUgc2Nhbm5lciBpcyBhdmFpbGFibGUgZnJvbQorICoJZnRwOi8vZnRwLm1pY3JvdGVrLmNvbS9taWNyb3Rlay9kZXZwYWNrLworICoKKyAqIE1pY3JvdGVrIE5WIHNlbnQgdXMgYSBtb3JlIHVwIHRvIGRhdGUgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQuIElmCisgKiB5b3Ugd2FudCBpdCwganVzdCBzZW5kIG1haWwuCisgKgorICogU3RhdHVzOgorICoKKyAqCVVudGVzdGVkIHdpdGggbXVsdGlwbGUgc2Nhbm5lcnMuCisgKglVbnRlc3RlZCBvbiBTTVAuCisgKglVbnRlc3RlZCBvbiBhIGJpZ2VuZGlhbiBtYWNoaW5lLgorICoKKyAqIEhpc3Rvcnk6CisgKgorICoJMjAwMDA0MTcgc3RhcnRpbmcgaGlzdG9yeQorICoJMjAwMDA0MTcgZml4ZWQgbG9hZCBvb3BzCisgKgkyMDAwMDQxNyBmaXhlZCB1bmxvYWQgb29wcworICoJMjAwMDA0MTkgZml4ZWQgUkVBRCBJTUFHRSBkZXRlY3Rpb24KKyAqCTIwMDAwNDI0IHN0YXJ0ZWQgY29udmVyc2lvbiB0byB1c2UgVVJCcworICoJMjAwMDA1MDIgaGFuZGxlZCBzaG9ydCB0cmFuc2ZlcnMgYXMgZXJyb3JzCisgKgkyMDAwMDUxMyByZW5hbWUgYW5kIG9yZ2FuaXNhdGlvbiBvZiBmdW5jdGlvbnMgKGpvaG4pCisgKgkyMDAwMDUxMyBhZGRlZCBJRHMgZm9yIGFsbCBwcm9kdWN0cyBzdXBwb3J0ZWQgYnkgV2luZG93cyBkcml2ZXIgKGpvaG4pCisgKgkyMDAwMDUxNCBSZXdyb3RlIG10c19zY3NpX3F1ZXVlY29tbWFuZCB0byB1c2UgVVJCcyAoam9obikKKyAqCTIwMDAwNTE0IFZlcnNpb24gMC4wLjhqCisgKiAgICAgIDIwMDAwNTE0IEZpeCByZXBvcnRpbmcgb2Ygbm9uLWV4aXN0YW50IGRldmljZXMgdG8gU0NTSSBsYXllciAoam9obikKKyAqCTIwMDAwNTE0IEFkZGVkIE1UU19ERUJVR19JTlQgKGpvaG4pCisgKgkyMDAwMDUxNCBDaGFuZ2VkICJ1c2ItbWljcm90ZWsiIHRvICJtaWNyb3RlayIgZm9yIGNvbnNpc3RlbmN5IChqb2huKQorICoJMjAwMDA1MTQgU3R1cGlkIGJ1ZyBmaXhlcyAoam9obikKKyAqCTIwMDAwNTE0IFZlcnNpb24gMC4wLjlqCisgKgkyMDAwMDUxNSBQdXQgdHJhbnNmZXIgY29udGV4dCBhbmQgVVJCIGluIG10c19kZXNjIChqb2huKQorICoJMjAwMDA1MTUgQWRkZWQgcHJlbGltIHR1cm4gb2ZmIGRlYnVnZ2luZyBzdXBwb3J0IChqb2huKQorICoJMjAwMDA1MTUgVmVyc2lvbiAwLjAuMTBqCisgKiAgICAgIDIwMDAwNTE1IEZpeGVkIHVwIFVSQiBhbGxvY2F0aW9uIChjbGVhciBVUkIgb24gYWxsb2MpIChqb2huKQorICogICAgICAyMDAwMDUxNSBWZXJzaW9uIDAuMC4xMWoKKyAqCTIwMDAwNTE2IFJlbW92ZWQgdW5uZWNlc3Nhcnkgc3BpbmxvY2sgaW4gbXRzX3RyYW5zZmVyX2NvbnRleHQgKGpvaG4pCisgKgkyMDAwMDUxNiBSZW1vdmVkIHVubmVjZXNzYXJ5IHVwIG9uIGluc3RhbmNlIGxvY2sgaW4gbXRzX3JlbW92ZV9ub2xvY2sgKGpvaG4pCisgKgkyMDAwMDUxNiBJbXBsZW1lbnRlZCAoYmFkbHkpIHNjc2lfYWJvcnQgKGpvaG4pCisgKgkyMDAwMDUxNiBWZXJzaW9uIDAuMC4xMmoKKyAqICAgICAgMjAwMDA1MTcgSG9wZWZ1bGx5IHJlbW92ZWQgbXRzX3JlbW92ZV9ub2xvY2sgcXVhc2lkZWFkbG9jayAoam9obikKKyAqICAgICAgMjAwMDA1MTcgQWRkZWQgbXRzX2RlYnVnX2R1bXAgdG8gcHJpbnQgbGwgVVNCIGluZm8gKGpvaG4pCisgKgkyMDAwMDUxOCBUd2Vha3MgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcyAoam9obikKKyAqCTIwMDAwNTE4IFZlcnNpb24gMC4wLjEzagorICoJMjAwMDA1MTggQ2xlYW5lZCB1cCBhYm9ydCBoYW5kbGluZyAoam9obikKKyAqCTIwMDAwNTIzIFJlbW92ZWQgc2NzaV9jb21tYW5kIGFuZCB2YXJpb3VzIHNjc2lfLi4uX3Jlc2V0cyAoam9obikKKyAqCTIwMDAwNTIzIEFkZGVkIHVubGluayBVUkIgb24gc2NzaV9hYm9ydCwgbm93IE9IQ0kgc3VwcG9ydHMgaXQgKGpvaG4pCisgKgkyMDAwMDUyMyBGaXhlZCBsYXN0IHRpcmVzb21lIGNvbXBpbGUgd2FybmluZyAoam9obikKKyAqCTIwMDAwNTIzIFZlcnNpb24gMC4wLjE0aiAodGhvdWdoIHZlcnNpb24gMC4xIGhhcyBjb21lIG91dD8pCisgKgkyMDAwMDYwMiBBZGRlZCBwcmltaXRpdmUgcmVzZXQKKyAqCTIwMDAwNjAyIFZlcnNpb24gMC4yLjAKKyAqCTIwMDAwNjAzIHZhcmlvdXMgY29zbWV0aWMgY2hhbmdlcworICoJMjAwMDA2MDMgVmVyc2lvbiAwLjIuMQorICoJMjAwMDA2MjAgbWlub3IgY29zbWV0aWMgY2hhbmdlcworICoJMjAwMDA2MjAgVmVyc2lvbiAwLjIuMgorICoJMjAwMDA4MjIgSG9wZWZ1bGx5IGZpeGVkIGRlYWRsb2NrIGluIG10c19yZW1vdmVfbm9sb2NrKCkKKyAqCTIwMDAwODIyIEZpeGVkIG1pbm9yIHJhY2UgaW4gbXRzX3RyYW5zZmVyX2NsZWFudXAoKQorICoJMjAwMDA4MjIgRml4ZWQgZGVhZGxvY2sgb24gc3VibWlzc2lvbiBlcnJvciBpbiBxdWV1ZWNvbW1hbmQKKyAqCTIwMDAwODIyIFZlcnNpb24gMC4yLjMKKyAqCTIwMDAwOTEzIFJlZHVjZWQgbW9kdWxlIHNpemUgaWYgZGVidWdnaW5nIGlzIG9mZgorICoJMjAwMDA5MTMgVmVyc2lvbiAwLjIuNAorICogICAgICAyMDAxMDIxMCBOZXcgYWJvcnQgbG9naWMKKyAqICAgICAgMjAwMTAyMTAgVmVyc2lvbiAwLjMuMAorICoJMjAwMTAyMTcgTWVyZ2VkIHNjYXR0ZXIvZ2F0aGVyCisgKgkyMDAxMDIxOCBWZXJzaW9uIDAuNC4wCisgKgkyMDAxMDIxOCBDb3NtZXRpYyBmaXhlcworICoJMjAwMTAyMTggVmVyc2lvbiAwLjQuMQorICogICAgICAyMDAxMDMwNiBBYm9ydCB3aGlsZSB1c2luZyBzY2F0dGVyL2dhdGhlcgorICogICAgICAyMDAxMDMwNiBWZXJzaW9uIDAuNC4yCisgKiAgICAgIDIwMDEwMzExIFJlbW92ZSBhbGwgdGltZW91dHMgYW5kIHRpZHkgdXAgZ2VuZXJhbGx5IChqb2huKQorICoJMjAwMTAzMjAgY2hlY2sgcmV0dXJuIHZhbHVlIG9mIHNjc2lfcmVnaXN0ZXIoKQorICoJMjAwMTAzMjAgVmVyc2lvbiAwLjQuMworICoJMjAwMTA0MDggSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZC4KKyAqCTIwMDExMDAzIEZpeCBtdWx0aXBsZSByZXF1ZXN0cworICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlICIuLi8uLi9zY3NpL3Njc2kuaCIKKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorCisjaW5jbHVkZSAibWljcm90ZWsuaCIKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuNC4zIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJKb2huIEZyZW1saW4gPHZpaUBwZW5ndWlucG93ZXJlZC5jb20+LCBPbGl2ZXIgTmV1a3VtIDxPbGl2ZXIuTmV1a3VtQGxyei51bmktbXVlbmNoZW4uZGU+IgorI2RlZmluZSBEUklWRVJfREVTQyAiTWljcm90ZWsgU2Nhbm1ha2VyIFg2IFVTQiBzY2FubmVyIGRyaXZlciIKKworLyogU2hvdWxkIHdlIGRvIGRlYnVnZ2luZz8gKi8KKworLy8jZGVmaW5lIE1UU19ET19ERUJVRworCisvKiBVU0IgbGF5ZXIgZHJpdmVyIGludGVyZmFjZSAqLworCitzdGF0aWMgaW50IG10c191c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyB2b2lkIG10c191c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtdHNfdXNiX2lkcyBbXTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG10c191c2JfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJtaWNyb3Rla1g2IiwKKwkucHJvYmUgPQltdHNfdXNiX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JbXRzX3VzYl9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CW10c191c2JfaWRzLAorfTsKKworCisvKiBJbnRlcm5hbCBkcml2ZXIgc3R1ZmYgKi8KKworI2RlZmluZSBNVFNfVkVSU0lPTgkiMC40LjMiCisjZGVmaW5lIE1UU19OQU1FCSJtaWNyb3RlayB1c2IgKHJldiAiIE1UU19WRVJTSU9OICIpOiAiCisKKyNkZWZpbmUgTVRTX1dBUk5JTkcoeC4uLikgXAorCXByaW50ayggS0VSTl9XQVJOSU5HIE1UU19OQU1FIHggKQorI2RlZmluZSBNVFNfRVJST1IoeC4uLikgXAorCXByaW50ayggS0VSTl9FUlIgTVRTX05BTUUgeCApCisjZGVmaW5lIE1UU19JTlRfRVJST1IoeC4uLikgXAorCU1UU19FUlJPUih4KQorI2RlZmluZSBNVFNfTUVTU0FHRSh4Li4uKSBcCisJcHJpbnRrKCBLRVJOX0lORk8gTVRTX05BTUUgeCApCisKKyNpZiBkZWZpbmVkIE1UU19ET19ERUJVRworCisjZGVmaW5lIE1UU19ERUJVRyh4Li4uKSBcCisJcHJpbnRrKCBLRVJOX0RFQlVHIE1UU19OQU1FIHggKQorCisjZGVmaW5lIE1UU19ERUJVR19HT1RfSEVSRSgpIFwKKwlNVFNfREVCVUcoImdvdCB0byAlczolZCAoJXMpXG4iLCBfX0ZJTEVfXywgKGludClfX0xJTkVfXywgX19QUkVUVFlfRlVOQ1RJT05fXyApCisjZGVmaW5lIE1UU19ERUJVR19JTlQoKSBcCisJZG8geyBNVFNfREVCVUdfR09UX0hFUkUoKTsgXAorCSAgICAgTVRTX0RFQlVHKCJ0cmFuc2ZlciA9IDB4JXggY29udGV4dCA9IDB4JXhcbiIsKGludCl0cmFuc2ZlciwoaW50KWNvbnRleHQgKTsgXAorCSAgICAgTVRTX0RFQlVHKCJzdGF0dXMgPSAweCV4IGRhdGEtbGVuZ3RoID0gMHgleCBzZW50ID0gMHgleFxuIiwoaW50KXRyYW5zZmVyLT5zdGF0dXMsKGludCljb250ZXh0LT5kYXRhX2xlbmd0aCwgKGludCl0cmFuc2Zlci0+YWN0dWFsX2xlbmd0aCApOyBcCisgICAgICAgICAgICAgbXRzX2RlYnVnX2R1bXAoY29udGV4dC0+aW5zdGFuY2UpO1wKKwkgICB9IHdoaWxlKDApCisjZWxzZQorCisjZGVmaW5lIE1UU19OVUxfU1RBVEVNRU5UIGRvIHsgfSB3aGlsZSgwKQorCisjZGVmaW5lIE1UU19ERUJVRyh4Li4uKQlNVFNfTlVMX1NUQVRFTUVOVAorI2RlZmluZSBNVFNfREVCVUdfR09UX0hFUkUoKSBNVFNfTlVMX1NUQVRFTUVOVAorI2RlZmluZSBNVFNfREVCVUdfSU5UKCkgTVRTX05VTF9TVEFURU1FTlQKKworI2VuZGlmCisKKworCisjZGVmaW5lIE1UU19JTlRfSU5JVCgpXAorCXN0cnVjdCBtdHNfdHJhbnNmZXJfY29udGV4dCogY29udGV4dCA9IChzdHJ1Y3QgbXRzX3RyYW5zZmVyX2NvbnRleHQqKXRyYW5zZmVyLT5jb250ZXh0OyBcCisJTVRTX0RFQlVHX0lOVCgpO1wKKworI2lmZGVmIE1UU19ET19ERUJVRworCitzdGF0aWMgaW5saW5lIHZvaWQgbXRzX2RlYnVnX2R1bXAoc3RydWN0IG10c19kZXNjKiBkZXNjKSB7CisJTVRTX0RFQlVHKCJkZXNjIGF0IDB4JXg6IHRvZ2dsZSA9ICUwMnglMDJ4XG4iLAorCQkgIChpbnQpZGVzYywKKwkJICAoaW50KWRlc2MtPnVzYl9kZXYtPnRvZ2dsZVsxXSwoaW50KWRlc2MtPnVzYl9kZXYtPnRvZ2dsZVswXQorCQkpOworCU1UU19ERUJVRygiZXBfb3V0PSV4IGVwX3Jlc3BvbnNlPSV4IGVwX2ltYWdlPSV4XG4iLAorCQkgIHVzYl9zbmRidWxrcGlwZShkZXNjLT51c2JfZGV2LGRlc2MtPmVwX291dCksCisJCSAgdXNiX3JjdmJ1bGtwaXBlKGRlc2MtPnVzYl9kZXYsZGVzYy0+ZXBfcmVzcG9uc2UpLAorCQkgIHVzYl9yY3ZidWxrcGlwZShkZXNjLT51c2JfZGV2LGRlc2MtPmVwX2ltYWdlKQorCQkpOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdHNfc2hvd19jb21tYW5kKFNjc2lfQ21uZCAqc3JiKQoreworCWNoYXIgKndoYXQgPSBOVUxMOworCisJc3dpdGNoIChzcmItPmNtbmRbMF0pIHsKKwljYXNlIFRFU1RfVU5JVF9SRUFEWTogd2hhdCA9ICJURVNUX1VOSVRfUkVBRFkiOyBicmVhazsKKwljYXNlIFJFWkVST19VTklUOiB3aGF0ID0gIlJFWkVST19VTklUIjsgYnJlYWs7CisJY2FzZSBSRVFVRVNUX1NFTlNFOiB3aGF0ID0gIlJFUVVFU1RfU0VOU0UiOyBicmVhazsKKwljYXNlIEZPUk1BVF9VTklUOiB3aGF0ID0gIkZPUk1BVF9VTklUIjsgYnJlYWs7CisJY2FzZSBSRUFEX0JMT0NLX0xJTUlUUzogd2hhdCA9ICJSRUFEX0JMT0NLX0xJTUlUUyI7IGJyZWFrOworCWNhc2UgUkVBU1NJR05fQkxPQ0tTOiB3aGF0ID0gIlJFQVNTSUdOX0JMT0NLUyI7IGJyZWFrOworCWNhc2UgUkVBRF82OiB3aGF0ID0gIlJFQURfNiI7IGJyZWFrOworCWNhc2UgV1JJVEVfNjogd2hhdCA9ICJXUklURV82IjsgYnJlYWs7CisJY2FzZSBTRUVLXzY6IHdoYXQgPSAiU0VFS182IjsgYnJlYWs7CisJY2FzZSBSRUFEX1JFVkVSU0U6IHdoYXQgPSAiUkVBRF9SRVZFUlNFIjsgYnJlYWs7CisJY2FzZSBXUklURV9GSUxFTUFSS1M6IHdoYXQgPSAiV1JJVEVfRklMRU1BUktTIjsgYnJlYWs7CisJY2FzZSBTUEFDRTogd2hhdCA9ICJTUEFDRSI7IGJyZWFrOworCWNhc2UgSU5RVUlSWTogd2hhdCA9ICJJTlFVSVJZIjsgYnJlYWs7CisJY2FzZSBSRUNPVkVSX0JVRkZFUkVEX0RBVEE6IHdoYXQgPSAiUkVDT1ZFUl9CVUZGRVJFRF9EQVRBIjsgYnJlYWs7CisJY2FzZSBNT0RFX1NFTEVDVDogd2hhdCA9ICJNT0RFX1NFTEVDVCI7IGJyZWFrOworCWNhc2UgUkVTRVJWRTogd2hhdCA9ICJSRVNFUlZFIjsgYnJlYWs7CisJY2FzZSBSRUxFQVNFOiB3aGF0ID0gIlJFTEVBU0UiOyBicmVhazsKKwljYXNlIENPUFk6IHdoYXQgPSAiQ09QWSI7IGJyZWFrOworCWNhc2UgRVJBU0U6IHdoYXQgPSAiRVJBU0UiOyBicmVhazsKKwljYXNlIE1PREVfU0VOU0U6IHdoYXQgPSAiTU9ERV9TRU5TRSI7IGJyZWFrOworCWNhc2UgU1RBUlRfU1RPUDogd2hhdCA9ICJTVEFSVF9TVE9QIjsgYnJlYWs7CisJY2FzZSBSRUNFSVZFX0RJQUdOT1NUSUM6IHdoYXQgPSAiUkVDRUlWRV9ESUFHTk9TVElDIjsgYnJlYWs7CisJY2FzZSBTRU5EX0RJQUdOT1NUSUM6IHdoYXQgPSAiU0VORF9ESUFHTk9TVElDIjsgYnJlYWs7CisJY2FzZSBBTExPV19NRURJVU1fUkVNT1ZBTDogd2hhdCA9ICJBTExPV19NRURJVU1fUkVNT1ZBTCI7IGJyZWFrOworCWNhc2UgU0VUX1dJTkRPVzogd2hhdCA9ICJTRVRfV0lORE9XIjsgYnJlYWs7CisJY2FzZSBSRUFEX0NBUEFDSVRZOiB3aGF0ID0gIlJFQURfQ0FQQUNJVFkiOyBicmVhazsKKwljYXNlIFJFQURfMTA6IHdoYXQgPSAiUkVBRF8xMCI7IGJyZWFrOworCWNhc2UgV1JJVEVfMTA6IHdoYXQgPSAiV1JJVEVfMTAiOyBicmVhazsKKwljYXNlIFNFRUtfMTA6IHdoYXQgPSAiU0VFS18xMCI7IGJyZWFrOworCWNhc2UgV1JJVEVfVkVSSUZZOiB3aGF0ID0gIldSSVRFX1ZFUklGWSI7IGJyZWFrOworCWNhc2UgVkVSSUZZOiB3aGF0ID0gIlZFUklGWSI7IGJyZWFrOworCWNhc2UgU0VBUkNIX0hJR0g6IHdoYXQgPSAiU0VBUkNIX0hJR0giOyBicmVhazsKKwljYXNlIFNFQVJDSF9FUVVBTDogd2hhdCA9ICJTRUFSQ0hfRVFVQUwiOyBicmVhazsKKwljYXNlIFNFQVJDSF9MT1c6IHdoYXQgPSAiU0VBUkNIX0xPVyI7IGJyZWFrOworCWNhc2UgU0VUX0xJTUlUUzogd2hhdCA9ICJTRVRfTElNSVRTIjsgYnJlYWs7CisJY2FzZSBSRUFEX1BPU0lUSU9OOiB3aGF0ID0gIlJFQURfUE9TSVRJT04iOyBicmVhazsKKwljYXNlIFNZTkNIUk9OSVpFX0NBQ0hFOiB3aGF0ID0gIlNZTkNIUk9OSVpFX0NBQ0hFIjsgYnJlYWs7CisJY2FzZSBMT0NLX1VOTE9DS19DQUNIRTogd2hhdCA9ICJMT0NLX1VOTE9DS19DQUNIRSI7IGJyZWFrOworCWNhc2UgUkVBRF9ERUZFQ1RfREFUQTogd2hhdCA9ICJSRUFEX0RFRkVDVF9EQVRBIjsgYnJlYWs7CisJY2FzZSBNRURJVU1fU0NBTjogd2hhdCA9ICJNRURJVU1fU0NBTiI7IGJyZWFrOworCWNhc2UgQ09NUEFSRTogd2hhdCA9ICJDT01QQVJFIjsgYnJlYWs7CisJY2FzZSBDT1BZX1ZFUklGWTogd2hhdCA9ICJDT1BZX1ZFUklGWSI7IGJyZWFrOworCWNhc2UgV1JJVEVfQlVGRkVSOiB3aGF0ID0gIldSSVRFX0JVRkZFUiI7IGJyZWFrOworCWNhc2UgUkVBRF9CVUZGRVI6IHdoYXQgPSAiUkVBRF9CVUZGRVIiOyBicmVhazsKKwljYXNlIFVQREFURV9CTE9DSzogd2hhdCA9ICJVUERBVEVfQkxPQ0siOyBicmVhazsKKwljYXNlIFJFQURfTE9ORzogd2hhdCA9ICJSRUFEX0xPTkciOyBicmVhazsKKwljYXNlIFdSSVRFX0xPTkc6IHdoYXQgPSAiV1JJVEVfTE9ORyI7IGJyZWFrOworCWNhc2UgQ0hBTkdFX0RFRklOSVRJT046IHdoYXQgPSAiQ0hBTkdFX0RFRklOSVRJT04iOyBicmVhazsKKwljYXNlIFdSSVRFX1NBTUU6IHdoYXQgPSAiV1JJVEVfU0FNRSI7IGJyZWFrOworCWNhc2UgUkVBRF9UT0M6IHdoYXQgPSAiUkVBRF9UT0MiOyBicmVhazsKKwljYXNlIExPR19TRUxFQ1Q6IHdoYXQgPSAiTE9HX1NFTEVDVCI7IGJyZWFrOworCWNhc2UgTE9HX1NFTlNFOiB3aGF0ID0gIkxPR19TRU5TRSI7IGJyZWFrOworCWNhc2UgTU9ERV9TRUxFQ1RfMTA6IHdoYXQgPSAiTU9ERV9TRUxFQ1RfMTAiOyBicmVhazsKKwljYXNlIE1PREVfU0VOU0VfMTA6IHdoYXQgPSAiTU9ERV9TRU5TRV8xMCI7IGJyZWFrOworCWNhc2UgTU9WRV9NRURJVU06IHdoYXQgPSAiTU9WRV9NRURJVU0iOyBicmVhazsKKwljYXNlIFJFQURfMTI6IHdoYXQgPSAiUkVBRF8xMiI7IGJyZWFrOworCWNhc2UgV1JJVEVfMTI6IHdoYXQgPSAiV1JJVEVfMTIiOyBicmVhazsKKwljYXNlIFdSSVRFX1ZFUklGWV8xMjogd2hhdCA9ICJXUklURV9WRVJJRllfMTIiOyBicmVhazsKKwljYXNlIFNFQVJDSF9ISUdIXzEyOiB3aGF0ID0gIlNFQVJDSF9ISUdIXzEyIjsgYnJlYWs7CisJY2FzZSBTRUFSQ0hfRVFVQUxfMTI6IHdoYXQgPSAiU0VBUkNIX0VRVUFMXzEyIjsgYnJlYWs7CisJY2FzZSBTRUFSQ0hfTE9XXzEyOiB3aGF0ID0gIlNFQVJDSF9MT1dfMTIiOyBicmVhazsKKwljYXNlIFJFQURfRUxFTUVOVF9TVEFUVVM6IHdoYXQgPSAiUkVBRF9FTEVNRU5UX1NUQVRVUyI7IGJyZWFrOworCWNhc2UgU0VORF9WT0xVTUVfVEFHOiB3aGF0ID0gIlNFTkRfVk9MVU1FX1RBRyI7IGJyZWFrOworCWNhc2UgV1JJVEVfTE9OR18yOiB3aGF0ID0gIldSSVRFX0xPTkdfMiI7IGJyZWFrOworCWRlZmF1bHQ6CisJCU1UU19ERUJVRygiY2FuJ3QgZGVjb2RlIGNvbW1hbmRcbiIpOworCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJfQorCU1UU19ERUJVRyggIkNvbW1hbmQgJXMgKCVkIGJ5dGVzKVxuIiwgd2hhdCwgc3JiLT5jbWRfbGVuKTsKKworIG91dDoKKwlNVFNfREVCVUcoICIgICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCisJICAgICAgIHNyYi0+Y21uZFswXSwgc3JiLT5jbW5kWzFdLCBzcmItPmNtbmRbMl0sIHNyYi0+Y21uZFszXSwgc3JiLT5jbW5kWzRdLCBzcmItPmNtbmRbNV0sCisJICAgICAgIHNyYi0+Y21uZFs2XSwgc3JiLT5jbW5kWzddLCBzcmItPmNtbmRbOF0sIHNyYi0+Y21uZFs5XSk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdHNfc2hvd19jb21tYW5kKFNjc2lfQ21uZCAqIGR1bW15KQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXRzX2RlYnVnX2R1bXAoc3RydWN0IG10c19kZXNjKiBkdW1teSkKK3sKK30KKworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdHNfdXJiX2Fib3J0KHN0cnVjdCBtdHNfZGVzYyogZGVzYykgeworCU1UU19ERUJVR19HT1RfSEVSRSgpOworCW10c19kZWJ1Z19kdW1wKGRlc2MpOworCisJdXNiX2tpbGxfdXJiKCBkZXNjLT51cmIgKTsKK30KKworc3RhdGljIGludCBtdHNfc2NzaV9hYm9ydCAoU2NzaV9DbW5kICpzcmIpCit7CisJc3RydWN0IG10c19kZXNjKiBkZXNjID0gKHN0cnVjdCBtdHNfZGVzYyopKHNyYi0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXSk7CisKKwlNVFNfREVCVUdfR09UX0hFUkUoKTsKKworCW10c191cmJfYWJvcnQoZGVzYyk7CisKKwlyZXR1cm4gU0NTSV9BQk9SVF9QRU5ESU5HOworfQorCitzdGF0aWMgaW50IG10c19zY3NpX2hvc3RfcmVzZXQgKFNjc2lfQ21uZCAqc3JiKQoreworCXN0cnVjdCBtdHNfZGVzYyogZGVzYyA9IChzdHJ1Y3QgbXRzX2Rlc2MqKShzcmItPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF0pOworCWludCByZXN1bHQsIHJjOworCisJTVRTX0RFQlVHX0dPVF9IRVJFKCk7CisJbXRzX2RlYnVnX2R1bXAoZGVzYyk7CisKKwlyYyA9IHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQoZGVzYy0+dXNiX2RldiwgZGVzYy0+dXNiX2ludGYpOworCWlmIChyYyA8IDApCisJCXJldHVybiBGQUlMRUQ7CisJcmVzdWx0ID0gdXNiX3Jlc2V0X2RldmljZShkZXNjLT51c2JfZGV2KTs7CisJaWYgKHJjKQorCQl1c2JfdW5sb2NrX2RldmljZShkZXNjLT51c2JfZGV2KTsKKwlyZXR1cm4gcmVzdWx0ID8gRkFJTEVEIDogU1VDQ0VTUzsKK30KKworc3RhdGljCitpbnQgbXRzX3Njc2lfcXVldWVjb21tYW5kIChTY3NpX0NtbmQgKnNyYiwgbXRzX3Njc2lfY21uZF9jYWxsYmFjayBjYWxsYmFjayApOworCitzdGF0aWMgdm9pZCBtdHNfdHJhbnNmZXJfY2xlYW51cCggc3RydWN0IHVyYiAqdHJhbnNmZXIgKTsKK3N0YXRpYyB2b2lkIG10c19kb19zZyhzdHJ1Y3QgdXJiICogdHJhbnNmZXIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworCitpbmxpbmUgc3RhdGljCit2b2lkIG10c19pbnRfc3VibWl0X3VyYiAoc3RydWN0IHVyYiogdHJhbnNmZXIsCisJCQlpbnQgcGlwZSwKKwkJCXZvaWQqIGRhdGEsCisJCQl1bnNpZ25lZCBsZW5ndGgsCisJCQl1c2JfY29tcGxldGVfdCBjYWxsYmFjayApCisvKiBJbnRlcnJ1cHQgY29udGV4dCEgKi8KKworLyogSG9sZGluZyB0cmFuc2Zlci0+Y29udGV4dC0+bG9jayEgKi8KK3sKKwlpbnQgcmVzOworCisJTVRTX0lOVF9JTklUKCk7CisKKwl1c2JfZmlsbF9idWxrX3VyYih0cmFuc2ZlciwKKwkJICAgICAgY29udGV4dC0+aW5zdGFuY2UtPnVzYl9kZXYsCisJCSAgICAgIHBpcGUsCisJCSAgICAgIGRhdGEsCisJCSAgICAgIGxlbmd0aCwKKwkJICAgICAgY2FsbGJhY2ssCisJCSAgICAgIGNvbnRleHQKKwkJKTsKKworCXRyYW5zZmVyLT5zdGF0dXMgPSAwOworCisJcmVzID0gdXNiX3N1Ym1pdF91cmIoIHRyYW5zZmVyLCBHRlBfQVRPTUlDICk7CisJaWYgKCB1bmxpa2VseShyZXMpICkgeworCQlNVFNfSU5UX0VSUk9SKCAiY291bGQgbm90IHN1Ym1pdCBVUkIhIEVycm9yIHdhcyAlZFxuIiwoaW50KXJlcyApOworCQljb250ZXh0LT5zcmItPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJbXRzX3RyYW5zZmVyX2NsZWFudXAodHJhbnNmZXIpOworCX0KKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQgbXRzX3RyYW5zZmVyX2NsZWFudXAoIHN0cnVjdCB1cmIgKnRyYW5zZmVyICkKKy8qIEludGVycnVwdCBjb250ZXh0ISAqLworeworCU1UU19JTlRfSU5JVCgpOworCisJaWYgKCBsaWtlbHkoY29udGV4dC0+ZmluYWxfY2FsbGJhY2sgIT0gTlVMTCkgKQorCQljb250ZXh0LT5maW5hbF9jYWxsYmFjayhjb250ZXh0LT5zcmIpOworCit9CisKK3N0YXRpYyB2b2lkIG10c190cmFuc2Zlcl9kb25lKCBzdHJ1Y3QgdXJiICp0cmFuc2Zlciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MgKQoreworCU1UU19JTlRfSU5JVCgpOworCisJY29udGV4dC0+c3JiLT5yZXN1bHQgJj0gTVRTX1NDU0lfRVJSX01BU0s7CisJY29udGV4dC0+c3JiLT5yZXN1bHQgfD0gKHVuc2lnbmVkKWNvbnRleHQtPnN0YXR1czw8MTsKKworCW10c190cmFuc2Zlcl9jbGVhbnVwKHRyYW5zZmVyKTsKKworCXJldHVybjsKK30KKworCitzdGF0aWMgdm9pZCBtdHNfZ2V0X3N0YXR1cyggc3RydWN0IHVyYiAqdHJhbnNmZXIgKQorLyogSW50ZXJydXB0IGNvbnRleHQhICovCit7CisJTVRTX0lOVF9JTklUKCk7CisKKwltdHNfaW50X3N1Ym1pdF91cmIodHJhbnNmZXIsCisJCQkgICB1c2JfcmN2YnVsa3BpcGUoY29udGV4dC0+aW5zdGFuY2UtPnVzYl9kZXYsCisJCQkJCSAgIGNvbnRleHQtPmluc3RhbmNlLT5lcF9yZXNwb25zZSksCisJCQkgICAmY29udGV4dC0+c3RhdHVzLAorCQkJICAgMSwKKwkJCSAgIG10c190cmFuc2Zlcl9kb25lICk7Cit9CisKK3N0YXRpYyB2b2lkIG10c19kYXRhX2RvbmUoIHN0cnVjdCB1cmIqIHRyYW5zZmVyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyApCisvKiBJbnRlcnJ1cHQgY29udGV4dCEgKi8KK3sKKwlNVFNfSU5UX0lOSVQoKTsKKworCWlmICggY29udGV4dC0+ZGF0YV9sZW5ndGggIT0gdHJhbnNmZXItPmFjdHVhbF9sZW5ndGggKSB7CisJCWNvbnRleHQtPnNyYi0+cmVzaWQgPSBjb250ZXh0LT5kYXRhX2xlbmd0aCAtIHRyYW5zZmVyLT5hY3R1YWxfbGVuZ3RoOworCX0gZWxzZSBpZiAoIHVubGlrZWx5KHRyYW5zZmVyLT5zdGF0dXMpICkgeworCQljb250ZXh0LT5zcmItPnJlc3VsdCA9ICh0cmFuc2Zlci0+c3RhdHVzID09IC1FTk9FTlQgPyBESURfQUJPUlQgOiBESURfRVJST1IpPDwxNjsKKwl9CisKKwltdHNfZ2V0X3N0YXR1cyh0cmFuc2Zlcik7CisKKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQgbXRzX2NvbW1hbmRfZG9uZSggc3RydWN0IHVyYiAqdHJhbnNmZXIsIHN0cnVjdCBwdF9yZWdzICpyZWdzICkKKy8qIEludGVycnVwdCBjb250ZXh0ISAqLworeworCU1UU19JTlRfSU5JVCgpOworCisJaWYgKCB1bmxpa2VseSh0cmFuc2Zlci0+c3RhdHVzKSApIHsKKwkgICAgICAgIGlmICh0cmFuc2Zlci0+c3RhdHVzID09IC1FTk9FTlQpIHsKKwkJICAgICAgICAvKiBXZSBhcmUgYmVpbmcga2lsbGVkICovCisJCQlNVFNfREVCVUdfR09UX0hFUkUoKTsKKwkJCWNvbnRleHQtPnNyYi0+cmVzdWx0ID0gRElEX0FCT1JUPDwxNjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworCQkgICAgICAgIC8qIEEgZ2VudWluZSBlcnJvciBoYXMgb2NjdXJyZWQgKi8KKwkJCU1UU19ERUJVR19HT1RfSEVSRSgpOworCisJCSAgICAgICAgY29udGV4dC0+c3JiLT5yZXN1bHQgPSBESURfRVJST1I8PDE2OworICAgICAgICAgICAgICAgIH0KKwkJbXRzX3RyYW5zZmVyX2NsZWFudXAodHJhbnNmZXIpOworCisJCXJldHVybjsKKwl9CisKKwlpZiAoY29udGV4dC0+c3JiLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UpIHsKKwkJbXRzX2ludF9zdWJtaXRfdXJiKHRyYW5zZmVyLAorCQkJCSAgIGNvbnRleHQtPmRhdGFfcGlwZSwKKwkJCQkgICBjb250ZXh0LT5zcmItPnNlbnNlX2J1ZmZlciwKKwkJCQkgICBjb250ZXh0LT5kYXRhX2xlbmd0aCwKKwkJCQkgICBtdHNfZGF0YV9kb25lKTsKKwl9IGVsc2UgeyBpZiAoIGNvbnRleHQtPmRhdGEgKSB7CisJCQltdHNfaW50X3N1Ym1pdF91cmIodHJhbnNmZXIsCisJCQkJCSAgIGNvbnRleHQtPmRhdGFfcGlwZSwKKwkJCQkJICAgY29udGV4dC0+ZGF0YSwKKwkJCQkJICAgY29udGV4dC0+ZGF0YV9sZW5ndGgsCisJCQkJCSAgIGNvbnRleHQtPnNyYi0+dXNlX3NnID8gbXRzX2RvX3NnIDogbXRzX2RhdGFfZG9uZSk7CisJCX0gZWxzZSB7CisJCQltdHNfZ2V0X3N0YXR1cyh0cmFuc2Zlcik7CisJCX0KKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIG10c19kb19zZyAoc3RydWN0IHVyYiogdHJhbnNmZXIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqIHNnOworCU1UU19JTlRfSU5JVCgpOworCisJTVRTX0RFQlVHKCJQcm9jZXNzaW5nIGZyYWdtZW50ICVkIG9mICVkXG4iLCBjb250ZXh0LT5mcmFnbWVudCxjb250ZXh0LT5zcmItPnVzZV9zZyk7CisKKwlpZiAodW5saWtlbHkodHJhbnNmZXItPnN0YXR1cykpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zcmItPnJlc3VsdCA9ICh0cmFuc2Zlci0+c3RhdHVzID09IC1FTk9FTlQgPyBESURfQUJPUlQgOiBESURfRVJST1IpPDwxNjsKKwkJbXRzX3RyYW5zZmVyX2NsZWFudXAodHJhbnNmZXIpOworICAgICAgICB9CisKKwlzZyA9IGNvbnRleHQtPnNyYi0+YnVmZmVyOworCWNvbnRleHQtPmZyYWdtZW50Kys7CisJbXRzX2ludF9zdWJtaXRfdXJiKHRyYW5zZmVyLAorCQkJICAgY29udGV4dC0+ZGF0YV9waXBlLAorCQkJICAgcGFnZV9hZGRyZXNzKHNnW2NvbnRleHQtPmZyYWdtZW50XS5wYWdlKSArCisJCQkgICBzZ1tjb250ZXh0LT5mcmFnbWVudF0ub2Zmc2V0LAorCQkJICAgc2dbY29udGV4dC0+ZnJhZ21lbnRdLmxlbmd0aCwKKwkJCSAgIGNvbnRleHQtPmZyYWdtZW50ICsgMSA9PSBjb250ZXh0LT5zcmItPnVzZV9zZyA/IG10c19kYXRhX2RvbmUgOiBtdHNfZG9fc2cpOworCXJldHVybjsKK30KKworc3RhdGljIGNvbnN0IHU4IG10c19yZWFkX2ltYWdlX3NpZ1tdID0geyAweDI4LCAwMCwgMDAsIDAwIH07CitzdGF0aWMgY29uc3QgdTggbXRzX3JlYWRfaW1hZ2Vfc2lnX2xlbiA9IDQ7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtdHNfZGlyZWN0aW9uWzI1Ni84XSA9IHsKKwkweDI4LCAweDgxLCAweDE0LCAweDE0LCAweDIwLCAweDAxLCAweDkwLCAweDc3LAorCTB4MEMsIDB4MjAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCit9OworCisKKyNkZWZpbmUgTVRTX0RJUkVDVElPTl9JU19JTih4KSAoKG10c19kaXJlY3Rpb25beD4+M10gPj4gKHggJiA3KSkgJiAxKQorCitzdGF0aWMgdm9pZAorbXRzX2J1aWxkX3RyYW5zZmVyX2NvbnRleHQoIFNjc2lfQ21uZCAqc3JiLCBzdHJ1Y3QgbXRzX2Rlc2MqIGRlc2MgKQoreworCWludCBwaXBlOworCXN0cnVjdCBzY2F0dGVybGlzdCAqIHNnOworCQorCU1UU19ERUJVR19HT1RfSEVSRSgpOworCisJZGVzYy0+Y29udGV4dC5pbnN0YW5jZSA9IGRlc2M7CisJZGVzYy0+Y29udGV4dC5zcmIgPSBzcmI7CisJZGVzYy0+Y29udGV4dC5mcmFnbWVudCA9IDA7CisKKwlpZiAoIXNyYi0+dXNlX3NnKSB7CisJCWlmICggIXNyYi0+YnVmZmxlbiApeworCQkJZGVzYy0+Y29udGV4dC5kYXRhID0gTlVMTDsKKwkJCWRlc2MtPmNvbnRleHQuZGF0YV9sZW5ndGggPSAwOworCQkJcmV0dXJuOworCQl9IGVsc2UgeworCQkJZGVzYy0+Y29udGV4dC5kYXRhID0gc3JiLT5idWZmZXI7CisJCQlkZXNjLT5jb250ZXh0LmRhdGFfbGVuZ3RoID0gc3JiLT5idWZmbGVuOworCQkJTVRTX0RFQlVHKCJsZW5ndGggPSAlZCBvciAlZFxuIiwKKwkJCQkgIHNyYi0+cmVxdWVzdF9idWZmbGVuLCBzcmItPmJ1ZmZsZW4pOworCQl9CisJfSBlbHNlIHsKKwkJTVRTX0RFQlVHKCJVc2luZyBzY2F0dGVyL2dhdGhlclxuIik7CisJCXNnID0gc3JiLT5idWZmZXI7CisJCWRlc2MtPmNvbnRleHQuZGF0YSA9IHBhZ2VfYWRkcmVzcyhzZ1swXS5wYWdlKSArIHNnWzBdLm9mZnNldDsKKwkJZGVzYy0+Y29udGV4dC5kYXRhX2xlbmd0aCA9IHNnWzBdLmxlbmd0aDsKKwl9CisKKworCS8qIGNhbid0IHJlbHkgb24gc3JiLT5zY19kYXRhX2RpcmVjdGlvbiAqLworCisJLyogQnJ1dGFsbHkgcmlwcGVkIGZyb20gdXNiLXN0b3JhZ2UgKi8KKworCWlmICggIW1lbWNtcCggc3JiLT5jbW5kLCBtdHNfcmVhZF9pbWFnZV9zaWcsIG10c19yZWFkX2ltYWdlX3NpZ19sZW4gKQorKSB7IAkJcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShkZXNjLT51c2JfZGV2LGRlc2MtPmVwX2ltYWdlKTsKKwkJTVRTX0RFQlVHKCAidHJhbnNmZXJpbmcgZnJvbSBkZXNjLT5lcF9pbWFnZSA9PSAlZFxuIiwKKwkJCSAgIChpbnQpZGVzYy0+ZXBfaW1hZ2UgKTsKKwl9IGVsc2UgaWYgKCBNVFNfRElSRUNUSU9OX0lTX0lOKHNyYi0+Y21uZFswXSkgKSB7CisJCQlwaXBlID0gdXNiX3JjdmJ1bGtwaXBlKGRlc2MtPnVzYl9kZXYsZGVzYy0+ZXBfcmVzcG9uc2UpOworCQkJTVRTX0RFQlVHKCAidHJhbnNmZXJpbmcgZnJvbSBkZXNjLT5lcF9yZXNwb25zZSA9PSAlZFxuIiwKKwkJCQkgICAoaW50KWRlc2MtPmVwX3Jlc3BvbnNlKTsKKwl9IGVsc2UgeworCQlNVFNfREVCVUcoInRyYW5zZmVyaW5nIHRvIGRlc2MtPmVwX291dCA9PSAlZFxuIiwKKwkJCSAgKGludClkZXNjLT5lcF9vdXQpOworCQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKGRlc2MtPnVzYl9kZXYsZGVzYy0+ZXBfb3V0KTsKKwl9CisJZGVzYy0+Y29udGV4dC5kYXRhX3BpcGUgPSBwaXBlOworfQorCisKK3N0YXRpYworaW50IG10c19zY3NpX3F1ZXVlY29tbWFuZCggU2NzaV9DbW5kICpzcmIsIG10c19zY3NpX2NtbmRfY2FsbGJhY2sgY2FsbGJhY2sgKQoreworCXN0cnVjdCBtdHNfZGVzYyogZGVzYyA9IChzdHJ1Y3QgbXRzX2Rlc2MqKShzcmItPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF0pOworCWludCBlcnIgPSAwOworCWludCByZXM7CisKKwlNVFNfREVCVUdfR09UX0hFUkUoKTsKKwltdHNfc2hvd19jb21tYW5kKHNyYik7CisJbXRzX2RlYnVnX2R1bXAoZGVzYyk7CisKKwlpZiAoIHNyYi0+ZGV2aWNlLT5sdW4gfHwgc3JiLT5kZXZpY2UtPmlkIHx8IHNyYi0+ZGV2aWNlLT5jaGFubmVsICkgeworCisJCU1UU19ERUJVRygiQ29tbWFuZCB0byBMVU49JWQgSUQ9JWQgQ0hBTk5FTD0lZCBmcm9tIFNDU0kgbGF5ZXJcbiIsKGludClzcmItPmRldmljZS0+bHVuLChpbnQpc3JiLT5kZXZpY2UtPmlkLCAoaW50KXNyYi0+ZGV2aWNlLT5jaGFubmVsICk7CisKKwkJTVRTX0RFQlVHKCJ0aGlzIGRldmljZSBkb2Vzbid0IGV4aXN0XG4iKTsKKworCQlzcmItPnJlc3VsdCA9IERJRF9CQURfVEFSR0VUIDw8IDE2OworCisJCWlmKGxpa2VseShjYWxsYmFjayAhPSBOVUxMKSkKKwkJCWNhbGxiYWNrKHNyYik7CisKKwkJZ290byBvdXQ7CisJfQorCisJCisJdXNiX2ZpbGxfYnVsa191cmIoZGVzYy0+dXJiLAorCQkgICAgICBkZXNjLT51c2JfZGV2LAorCQkgICAgICB1c2Jfc25kYnVsa3BpcGUoZGVzYy0+dXNiX2RldixkZXNjLT5lcF9vdXQpLAorCQkgICAgICBzcmItPmNtbmQsCisJCSAgICAgIHNyYi0+Y21kX2xlbiwKKwkJICAgICAgbXRzX2NvbW1hbmRfZG9uZSwKKwkJICAgICAgJmRlc2MtPmNvbnRleHQKKwkJICAgICAgKTsKKworCisJbXRzX2J1aWxkX3RyYW5zZmVyX2NvbnRleHQoIHNyYiwgZGVzYyApOworCWRlc2MtPmNvbnRleHQuZmluYWxfY2FsbGJhY2sgPSBjYWxsYmFjazsKKwkKKwkvKiBoZXJlIHdlIG5lZWQgQVRPTUlDIGFzIHdlIGFyZSBjYWxsZWQgd2l0aCB0aGUgaW9sb2NrICovCisJcmVzPXVzYl9zdWJtaXRfdXJiKGRlc2MtPnVyYiwgR0ZQX0FUT01JQyk7CisKKwlpZih1bmxpa2VseShyZXMpKXsKKwkJTVRTX0VSUk9SKCJlcnJvciAlZCBzdWJtaXR0aW5nIFVSQlxuIiwoaW50KXJlcyk7CisJCXNyYi0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OworCisJCWlmKGxpa2VseShjYWxsYmFjayAhPSBOVUxMKSkKKwkJCWNhbGxiYWNrKHNyYik7CisKKwl9CisKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIG10c19zY3NpX2hvc3RfdGVtcGxhdGUgPSB7CisJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCQk9ICJtaWNyb3Rla1g2IiwKKwkucHJvY19uYW1lCQk9ICJtaWNyb3Rla1g2IiwKKwkucXVldWVjb21tYW5kCQk9IG10c19zY3NpX3F1ZXVlY29tbWFuZCwKKwkuZWhfYWJvcnRfaGFuZGxlcgk9IG10c19zY3NpX2Fib3J0LAorCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIJPSBtdHNfc2NzaV9ob3N0X3Jlc2V0LAorCS5zZ190YWJsZXNpemUgPQkJU0dfQUxMLAorCS5jYW5fcXVldWUgPQkJMSwKKwkudGhpc19pZCA9CQktMSwKKwkuY21kX3Blcl9sdW4gPQkJMSwKKwkudXNlX2NsdXN0ZXJpbmcgPQkxLAorCS5lbXVsYXRlZCA9CQkxLAorfTsKKworc3RydWN0IHZlbmRvcl9wcm9kdWN0Cit7CisJY2hhciogbmFtZTsKKwllbnVtCisJeworCQltdHNfc3VwX3Vua25vd249MCwKKwkJbXRzX3N1cF9hbHBoYSwKKwkJbXRzX3N1cF9mdWxsCisJfQorCXN1cHBvcnRfc3RhdHVzOworfSA7CisKKworLyogVGhlc2UgYXJlIHRha2VuIGZyb20gdGhlIG1zbVVTQi5pbmYgZmlsZSBvbiB0aGUgV2luZG93cyBkcml2ZXIgQ0QgKi8KK2NvbnN0IHN0YXRpYyBzdHJ1Y3QgdmVuZG9yX3Byb2R1Y3QgbXRzX3N1cHBvcnRlZF9wcm9kdWN0c1tdID0KK3sKKwl7ICJQaGFudG9tIDMzNkNYIiwJbXRzX3N1cF91bmtub3dufSwKKwl7ICJQaGFudG9tIDMzNkNYIiwJbXRzX3N1cF91bmtub3dufSwKKwl7ICJTY2FubWFrZXIgWDYiLAltdHNfc3VwX2FscGhhfSwKKwl7ICJQaGFudG9tIEM2IiwJCW10c19zdXBfdW5rbm93bn0sCisJeyAiUGhhbnRvbSAzMzZDWCIsCW10c19zdXBfdW5rbm93bn0sCisJeyAiU2Nhbk1ha2VyIFY2VVNMIiwJbXRzX3N1cF91bmtub3dufSwKKwl7ICJTY2FuTWFrZXIgVjZVU0wiLAltdHNfc3VwX3Vua25vd259LAorCXsgIlNjYW5tYWtlciBWNlVMIiwJbXRzX3N1cF91bmtub3dufSwKKwl7ICJTY2FubWFrZXIgVjZVUEwiLAltdHNfc3VwX2FscGhhfSwKK307CisKKy8qIFRoZSBlbnRyaWVzIG9mIG1pY3JvdGVrX3RhYmxlIG11c3QgY29ycmVzcG9uZCwgbGluZS1ieS1saW5lIHRvCisgICB0aGUgZW50cmllcyBvZiBtdHNfc3VwcG9ydGVkX3Byb2R1Y3RzW10uICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtdHNfdXNiX2lkcyBbXSA9Cit7CisJeyBVU0JfREVWSUNFKDB4NGNlLCAweDAzMDApIH0sCisJeyBVU0JfREVWSUNFKDB4NWRhLCAweDAwOTQpIH0sCisJeyBVU0JfREVWSUNFKDB4NWRhLCAweDAwOTkpIH0sCisJeyBVU0JfREVWSUNFKDB4NWRhLCAweDAwOWEpIH0sCisJeyBVU0JfREVWSUNFKDB4NWRhLCAweDAwYTApIH0sCisJeyBVU0JfREVWSUNFKDB4NWRhLCAweDAwYTMpIH0sCisJeyBVU0JfREVWSUNFKDB4NWRhLCAweDgwYTMpIH0sCisJeyBVU0JfREVWSUNFKDB4NWRhLCAweDgwYWMpIH0sCisJeyBVU0JfREVWSUNFKDB4NWRhLCAweDAwYjYpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgbXRzX3VzYl9pZHMpOworCisKK3N0YXRpYyBpbnQgbXRzX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJaW50IGk7CisJaW50IGVwX291dCA9IC0xOworCWludCBlcF9pbl9zZXRbM107IC8qIHRoaXMgd2lsbCBicmVhayBpZiB3ZSBoYXZlIG1vcmUgdGhhbiB0aHJlZSBlbmRwb2ludHMKKwkJCSAgIHdoaWNoIGlzIHdoeSB3ZSBjaGVjayAqLworCWludCAqZXBfaW5fY3VycmVudCA9IGVwX2luX3NldDsKKwlpbnQgZXJyX3JldHZhbCA9IC1FTk9NRU07CisKKwlzdHJ1Y3QgbXRzX2Rlc2MgKiBuZXdfZGVzYzsKKwlzdHJ1Y3QgdmVuZG9yX3Byb2R1Y3QgY29uc3QqIHA7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOworCisJLyogdGhlIGN1cnJlbnQgYWx0c2V0dGluZyBvbiB0aGUgaW50ZXJmYWNlIHdlJ3JlIHByb2JpbmcgKi8KKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzZXR0aW5nOworCisJTVRTX0RFQlVHX0dPVF9IRVJFKCk7CisJTVRTX0RFQlVHKCAidXNiLWRldmljZSBkZXNjcmlwdG9yIGF0ICV4XG4iLCAoaW50KWRldiApOworCisJTVRTX0RFQlVHKCAicHJvZHVjdCBpZCA9IDB4JXgsIHZlbmRvciBpZCA9IDB4JXhcbiIsCisJCSAgIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpLAorCQkgICBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpICk7CisKKwlNVFNfREVCVUdfR09UX0hFUkUoKTsKKworCXAgPSAmbXRzX3N1cHBvcnRlZF9wcm9kdWN0c1tpZCAtIG10c191c2JfaWRzXTsKKworCU1UU19ERUJVR19HT1RfSEVSRSgpOworCisJTVRTX0RFQlVHKCAiZm91bmQgbW9kZWwgJXNcbiIsIHAtPm5hbWUgKTsKKwlpZiAoIHAtPnN1cHBvcnRfc3RhdHVzICE9IG10c19zdXBfZnVsbCApCisJCU1UU19NRVNTQUdFKCAibW9kZWwgJXMgaXMgbm90IGtub3duIHRvIGJlIGZ1bGx5IHN1cHBvcnRlZCwgcmVwb3J0cyB3ZWxjb21lIVxuIiwKKwkJCSAgICAgcC0+bmFtZSApOworCisJLyogdGhlIGN1cnJlbnQgYWx0c2V0dGluZyBvbiB0aGUgaW50ZXJmYWNlIHdlJ3JlIHByb2JpbmcgKi8KKwlhbHRzZXR0aW5nID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisKKworCS8qIENoZWNrIGlmIHRoZSBjb25maWcgaXMgc2FuZSAqLworCisJaWYgKCBhbHRzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHMgIT0gTVRTX0VQX1RPVEFMICkgeworCQlNVFNfV0FSTklORyggImV4cGVjdGluZyAlZCBnb3QgJWQgZW5kcG9pbnRzISBCYWlsaW5nIG91dC5cbiIsCisJCQkgICAgIChpbnQpTVRTX0VQX1RPVEFMLCAoaW50KWFsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50cyApOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlmb3IoIGkgPSAwOyBpIDwgYWx0c2V0dGluZy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBpKysgKSB7CisJCWlmICgoYWx0c2V0dGluZy0+ZW5kcG9pbnRbaV0uZGVzYy5ibUF0dHJpYnV0ZXMgJgorCQkgICAgIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSAhPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSB7CisKKwkJCU1UU19XQVJOSU5HKCAiY2FuIG9ubHkgZGVhbCB3aXRoIGJ1bGsgZW5kcG9pbnRzOyBlbmRwb2ludCAlZCBpcyBub3QgYnVsay5cbiIsCisJCQkgICAgIChpbnQpYWx0c2V0dGluZy0+ZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzICk7CisJCX0gZWxzZSB7CisJCQlpZiAoYWx0c2V0dGluZy0+ZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYKKwkJCSAgICBVU0JfRElSX0lOKQorCQkJCSplcF9pbl9jdXJyZW50KysKKwkJCQkJPSBhbHRzZXR0aW5nLT5lbmRwb2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJgorCQkJCQlVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0s7CisJCQllbHNlIHsKKwkJCQlpZiAoIGVwX291dCAhPSAtMSApIHsKKwkJCQkJTVRTX1dBUk5JTkcoICJjYW4gb25seSBkZWFsIHdpdGggb25lIG91dHB1dCBlbmRwb2ludHMuIEJhaWxpbmcgb3V0LiIgKTsKKwkJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQkJfQorCisJCQkJZXBfb3V0ID0gYWx0c2V0dGluZy0+ZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYKKwkJCQkJVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLOworCQkJfQorCQl9CisKKwl9CisKKworCWlmICggZXBfb3V0ID09IC0xICkgeworCQlNVFNfV0FSTklORyggImNvdWxkbid0IGZpbmQgYW4gb3V0cHV0IGJ1bGsgZW5kcG9pbnQuIEJhaWxpbmcgb3V0LlxuIiApOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJCisJCisJbmV3X2Rlc2MgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRzX2Rlc2MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld19kZXNjKQorCQlnb3RvIG91dDsKKworCW1lbXNldChuZXdfZGVzYywgMCwgc2l6ZW9mKCpuZXdfZGVzYykpOworCW5ld19kZXNjLT51cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghbmV3X2Rlc2MtPnVyYikKKwkJZ290byBvdXRfa2ZyZWU7CisKKwluZXdfZGVzYy0+dXNiX2RldiA9IGRldjsKKwluZXdfZGVzYy0+dXNiX2ludGYgPSBpbnRmOworCWluaXRfTVVURVgoJm5ld19kZXNjLT5sb2NrKTsKKworCS8qIGVuZHBvaW50cyAqLworCW5ld19kZXNjLT5lcF9vdXQgPSBlcF9vdXQ7CisJbmV3X2Rlc2MtPmVwX3Jlc3BvbnNlID0gZXBfaW5fc2V0WzBdOworCW5ld19kZXNjLT5lcF9pbWFnZSA9IGVwX2luX3NldFsxXTsKKworCWlmICggbmV3X2Rlc2MtPmVwX291dCAhPSBNVFNfRVBfT1VUICkKKwkJTVRTX1dBUk5JTkcoICJ3aWxsIHRoaXMgd29yaz8gQ29tbWFuZCBFUCBpcyBub3QgdXN1YWxseSAlZFxuIiwKKwkJCSAgICAgKGludCluZXdfZGVzYy0+ZXBfb3V0ICk7CisKKwlpZiAoIG5ld19kZXNjLT5lcF9yZXNwb25zZSAhPSBNVFNfRVBfUkVTUE9OU0UgKQorCQlNVFNfV0FSTklORyggIndpbGwgdGhpcyB3b3JrPyBSZXNwb25zZSBFUCBpcyBub3QgdXN1YWxseSAlZFxuIiwKKwkJCSAgICAgKGludCluZXdfZGVzYy0+ZXBfcmVzcG9uc2UgKTsKKworCWlmICggbmV3X2Rlc2MtPmVwX2ltYWdlICE9IE1UU19FUF9JTUFHRSApCisJCU1UU19XQVJOSU5HKCAid2lsbCB0aGlzIHdvcms/IEltYWdlIGRhdGEgRVAgaXMgbm90IHVzdWFsbHkgJWRcbiIsCisJCQkgICAgIChpbnQpbmV3X2Rlc2MtPmVwX2ltYWdlICk7CisKKwluZXdfZGVzYy0+aG9zdCA9IHNjc2lfaG9zdF9hbGxvYygmbXRzX3Njc2lfaG9zdF90ZW1wbGF0ZSwKKwkJCXNpemVvZihuZXdfZGVzYykpOworCWlmICghbmV3X2Rlc2MtPmhvc3QpCisJCWdvdG8gb3V0X2ZyZWVfdXJiOworCisJbmV3X2Rlc2MtPmhvc3QtPmhvc3RkYXRhWzBdID0gKHVuc2lnbmVkIGxvbmcpbmV3X2Rlc2M7CisJaWYgKHNjc2lfYWRkX2hvc3QobmV3X2Rlc2MtPmhvc3QsIE5VTEwpKSB7CisJCWVycl9yZXR2YWwgPSAtRUlPOworCQlnb3RvIG91dF9mcmVlX3VyYjsKKwl9CisJc2NzaV9zY2FuX2hvc3QobmV3X2Rlc2MtPmhvc3QpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBuZXdfZGVzYyk7CisJcmV0dXJuIDA7CisKKyBvdXRfZnJlZV91cmI6CisJdXNiX2ZyZWVfdXJiKG5ld19kZXNjLT51cmIpOworIG91dF9rZnJlZToKKwlrZnJlZShuZXdfZGVzYyk7Cisgb3V0OgorCXJldHVybiBlcnJfcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBtdHNfdXNiX2Rpc2Nvbm5lY3QgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBtdHNfZGVzYyAqZGVzYyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCisJdXNiX2tpbGxfdXJiKGRlc2MtPnVyYik7CisJc2NzaV9yZW1vdmVfaG9zdChkZXNjLT5ob3N0KTsKKworCXNjc2lfaG9zdF9wdXQoZGVzYy0+aG9zdCk7CisJdXNiX2ZyZWVfdXJiKGRlc2MtPnVyYik7CisJa2ZyZWUoZGVzYyk7Cit9CisKKworc3RhdGljIGludCBfX2luaXQgbWljcm90ZWtfZHJ2X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZtdHNfdXNiX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtaWNyb3Rla19kcnZfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZtdHNfdXNiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG1pY3JvdGVrX2Rydl9pbml0KTsKK21vZHVsZV9leGl0KG1pY3JvdGVrX2Rydl9leGl0KTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2ltYWdlL21pY3JvdGVrLmggYi9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNzFkZWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5oCkBAIC0wLDAgKzEsNTUgQEAKKyAvKgorICogRHJpdmVyIGZvciBNaWNyb3RlayBTY2FubWFrZXIgWDYgVVNCIHNjYW5uZXIgYW5kIHBvc3NpYmx5IG90aGVycy4KKyAqIAorICogKEMpIENvcHlyaWdodCAyMDAwIEpvaG4gRnJlbWxpbiA8dmlpQHBlbmd1aW5wb3dlcmVkLmNvbT4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMCBPbGl2ZXIgTmV1a3VtIDxPbGl2ZXIuTmV1a3VtQGxyei51bmktbXVlbmNoZW4uZGU+CisgKgorICogU2VlIG1pY3JvdGVrLmMgZm9yIGhpc3RvcnkKKyAqCisgKi8KKwordHlwZWRlZiB2b2lkICgqbXRzX3Njc2lfY21uZF9jYWxsYmFjaykoU2NzaV9DbW5kICopOworCisKK3N0cnVjdCBtdHNfdHJhbnNmZXJfY29udGV4dAoreworCXN0cnVjdCBtdHNfZGVzYyogaW5zdGFuY2U7CisJbXRzX3Njc2lfY21uZF9jYWxsYmFjayBmaW5hbF9jYWxsYmFjazsKKwlTY3NpX0NtbmQgKnNyYjsKKwkKKwl2b2lkKiBkYXRhOworCXVuc2lnbmVkIGRhdGFfbGVuZ3RoOworCWludCBkYXRhX3BpcGU7CisJaW50IGZyYWdtZW50OworCisJdTggc3RhdHVzOyAvKiBzdGF0dXMgcmV0dXJuZWQgZnJvbSBlcF9yZXNwb25zZSBhZnRlciBjb21tYW5kIGNvbXBsZXRpb24gKi8KK307CisKKworc3RydWN0IG10c19kZXNjIHsKKwlzdHJ1Y3QgbXRzX2Rlc2MgKm5leHQ7CisJc3RydWN0IG10c19kZXNjICpwcmV2OworCisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVzYl9pbnRmOworCisJLyogRW5kcG9pbnQgYWRkcmVzc2VzICovCisJdTggZXBfb3V0OworCXU4IGVwX3Jlc3BvbnNlOworCXU4IGVwX2ltYWdlOworCisJc3RydWN0IFNjc2lfSG9zdCAqIGhvc3Q7CisJc3RydWN0IHNlbWFwaG9yZSBsb2NrOworCisJc3RydWN0IHVyYiAqdXJiOworCXN0cnVjdCBtdHNfdHJhbnNmZXJfY29udGV4dCBjb250ZXh0OworfTsKKworCisjZGVmaW5lIE1UU19FUF9PVVQJMHgxCisjZGVmaW5lIE1UU19FUF9SRVNQT05TRQkweDIKKyNkZWZpbmUgTVRTX0VQX0lNQUdFCTB4MworI2RlZmluZSBNVFNfRVBfVE9UQUwJMHgzCisKKyNkZWZpbmUgTVRTX1NDU0lfRVJSX01BU0sgfjB4M2Z1CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9pbnB1dC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyOGU3ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9LY29uZmlnCkBAIC0wLDAgKzEsMjM3IEBACisjCisjIFVTQiBJbnB1dCBkcml2ZXIgY29uZmlndXJhdGlvbgorIworY29tbWVudCAiVVNCIElucHV0IERldmljZXMiCisJZGVwZW5kcyBvbiBVU0IKKworY29uZmlnIFVTQl9ISUQKKwl0cmlzdGF0ZSAiVVNCIEh1bWFuIEludGVyZmFjZSBEZXZpY2UgKGZ1bGwgSElEKSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBmdWxsIEhJRCBzdXBwb3J0IHRvIGNvbm5lY3Qga2V5Ym9hcmRzLAorCSAgbWljZSwgam95c3RpY2tzLCBncmFwaGljIHRhYmxldHMsIG9yIGFueSBvdGhlciBISUQgYmFzZWQgZGV2aWNlcworCSAgdG8geW91ciBjb21wdXRlciB2aWEgVVNCLiBZb3UgYWxzbyBuZWVkIHRvIHNlbGVjdCBISUQgSW5wdXQgbGF5ZXIKKwkgIHN1cHBvcnQgKGJlbG93KSBpZiB5b3Ugd2FudCB0byB1c2Uga2V5Ym9hcmRzLCBtaWNlLCBqb3lzdGlja3MgYW5kCisJICB0aGUgbGlrZSAuLi4gYXMgd2VsbCBhcyBVbmludGVycnVwdGlibGUgUG93ZXIgU3VwcGx5IChVUFMpIGFuZAorCSAgbW9uaXRvciBjb250cm9sIGRldmljZXMuCisKKwkgIFlvdSBjYW4ndCB1c2UgdGhpcyBkcml2ZXIgYW5kIHRoZSBISURCUCAoQm9vdCBQcm90b2NvbCkga2V5Ym9hcmQKKwkgIGFuZCBtb3VzZSBkcml2ZXJzIGF0IHRoZSBzYW1lIHRpbWUuIE1vcmUgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlOgorCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9pbnB1dC9pbnB1dC50eHQ+LgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JoaWQuCisKK2NvbW1lbnQgIklucHV0IGNvcmUgc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBISUQgaW5wdXQgbGF5ZXIgb3IgSElEQlAgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQl9ISUQgJiYgSU5QVVQ9bgorCitjb25maWcgVVNCX0hJRElOUFVUCisJYm9vbCAiSElEIGlucHV0IGxheWVyIHN1cHBvcnQiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBJTlBVVCAmJiBVU0JfSElECisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBVU0Iga2V5Ym9hcmQsIG1vdXNlIG9yIGpveXN0aWNrLAorCSAgb3IgYW55IG90aGVyIEhJRCBpbnB1dCBkZXZpY2UuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBISURfRkYKKwlib29sICJGb3JjZSBmZWVkYmFjayBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCX0hJRElOUFVUICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaXMgeW91IHdhbnQgZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgYSBmZXcgSElEIGRldmljZXMuCisJICBTZWUgYmVsb3cgZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgZGV2aWNlcy4KKworCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vaW5wdXQvZmYudHh0PiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9yY2UKKwkgIGZlZWRiYWNrIEFQSS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIEhJRF9QSUQKKwlib29sICJQSUQgRGV2aWNlcyAoTWljcm9zb2Z0IFNpZGV3aW5kZXIgRm9yY2UgRmVlZGJhY2sgMikiCisJZGVwZW5kcyBvbiBISURfRkYKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgUElELWNvbXBsaWFudCBqb3lzdGljayBhbmQgd2lzaCB0byBlbmFibGUgZm9yY2UKKwkgIGZlZWRiYWNrIGZvciBpdC4gVGhlIE1pY3Jvc29mdCBTaWRld2luZGVyIEZvcmNlIEZlZWRiYWNrIDIgaXMgb25lIHN1Y2gKKwkgIGRldmljZS4KKworY29uZmlnIExPR0lURUNIX0ZGCisJYm9vbCAiTG9naXRlY2ggV2luZ01hbiAqM0Qgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEhJRF9GRgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgb25lIG9mIHRoZXNlIGRldmljZXM6CisJICAtIExvZ2l0ZWNoIFdpbmdNYW4gQ29yZGxlc3MgUnVtYmxlUGFkCisJICAtIExvZ2l0ZWNoIFdpbmdNYW4gRm9yY2UgM0QKKwkgIGFuZCBpZiB5b3Ugd2FudCB0byBlbmFibGUgZm9yY2UgZmVlZGJhY2sgZm9yIHRoZW0uCisJICBOb3RlOiBpZiB5b3Ugc2F5IE4gaGVyZSwgdGhpcyBkZXZpY2Ugd2lsbCBzdGlsbCBiZSBzdXBwb3J0ZWQsIGJ1dCB3aXRob3V0CisJICBmb3JjZSBmZWVkYmFjay4KKworY29uZmlnIFRIUlVTVE1BU1RFUl9GRgorCWJvb2wgIlRocnVzdE1hc3RlciBGaXJlU3Rvcm0gRHVhbCBQb3dlciAyIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBISURfRkYgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFRIUlVTVE1BU1RFUiBGaXJlU3RvcmUgRHVhbCBQb3dlciAyLAorCSAgYW5kIHdhbnQgdG8gZW5hYmxlIGZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIGl0LgorCSAgTm90ZTogaWYgeW91IHNheSBOIGhlcmUsIHRoaXMgZGV2aWNlIHdpbGwgc3RpbGwgYmUgc3VwcG9ydGVkLCBidXQgd2l0aG91dAorCSAgZm9yY2UgZmVlZGJhY2suCisKK2NvbmZpZyBVU0JfSElEREVWCisJYm9vbCAiL2Rldi9oaWRkZXYgcmF3IEhJRCBkZXZpY2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgSElEIGRldmljZXMgKGZyb20gdGhlIFVTQgorCSAgc3BlY2lmaWNhdGlvbiBzdGFuZHBvaW50KSB0aGF0IGFyZW4ndCBzdHJpY3RseSB1c2VyIGludGVyZmFjZQorCSAgZGV2aWNlcywgbGlrZSBtb25pdG9yIGNvbnRyb2xzIGFuZCBVbmludGVycnVwdGFibGUgUG93ZXIgU3VwcGxpZXMuCisKKwkgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHRoZXNlIGRldmljZXMgc2VwYXJhdGVseSB1c2luZyBhIHNlcGFyYXRlCisJICBldmVudCBpbnRlcmZhY2Ugb24gL2Rldi91c2IvaGlkZGV2WCAoY2hhciAxODA6OTYgdG8gMTgwOjExMSkuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKK21lbnUgIlVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzIgorCWRlcGVuZHMgb24gVVNCIT1uICYmIFVTQl9ISUQhPXkKKworY29uZmlnIFVTQl9LQkQKKwl0cmlzdGF0ZSAiVVNCIEhJREJQIEtleWJvYXJkIChzaW1wbGUgQm9vdCkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBJTlBVVAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgb25seSBpZiB5b3UgYXJlIGFic29sdXRlbHkgc3VyZSB0aGF0IHlvdSBkb24ndCB3YW50CisJICB0byB1c2UgdGhlIGdlbmVyaWMgSElEIGRyaXZlciBmb3IgeW91ciBVU0Iga2V5Ym9hcmQgYW5kIHByZWZlcgorCSAgdG8gdXNlIHRoZSBrZXlib2FyZCBpbiBpdHMgbGltaXRlZCBCb290IFByb3RvY29sIG1vZGUgaW5zdGVhZC4KKworCSAgVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IG5vdCB3aGF0IHlvdSB3YW50LiAgVGhpcyBpcyBtb3N0bHkKKwkgIHVzZWZ1bCBmb3IgZW1iZWRkZWQgYXBwbGljYXRpb25zIG9yIHNpbXBsZSBrZXlib2FyZHMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYmtiZC4KKworCSAgSWYgZXZlbiByZW1vdGVseSB1bnN1cmUsIHNheSBOLgorCitjb25maWcgVVNCX01PVVNFCisJdHJpc3RhdGUgIlVTQiBISURCUCBNb3VzZSAoc2ltcGxlIEJvb3QpIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgSU5QVVQKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIG9ubHkgaWYgeW91IGFyZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCB5b3UgZG9uJ3Qgd2FudAorCSAgdG8gdXNlIHRoZSBnZW5lcmljIEhJRCBkcml2ZXIgZm9yIHlvdXIgVVNCIG1vdXNlIGFuZCBwcmVmZXIKKwkgIHRvIHVzZSB0aGUgbW91c2UgaW4gaXRzIGxpbWl0ZWQgQm9vdCBQcm90b2NvbCBtb2RlIGluc3RlYWQuCisKKwkgIFRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBub3Qgd2hhdCB5b3Ugd2FudC4gIFRoaXMgaXMgbW9zdGx5CisJICB1c2VmdWwgZm9yIGVtYmVkZGVkIGFwcGxpY2F0aW9ucyBvciBzaW1wbGUgbWljZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNibW91c2UuCisKKwkgIElmIGV2ZW4gcmVtb3RlbHkgdW5zdXJlLCBzYXkgTi4KKworZW5kbWVudQorCitjb25maWcgVVNCX0FJUFRFSworCXRyaXN0YXRlICJBaXB0ZWsgNjAwMFUvODAwMFUgdGFibGV0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgSU5QVVQKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgVVNCIHZlcnNpb24gb2YgdGhlIEFpcHRlayA2MDAwVQorCSAgb3IgQWlwdGVrIDgwMDBVIHRhYmxldC4gIE1ha2Ugc3VyZSB0byBzYXkgWSB0byAiTW91c2Ugc3VwcG9ydCIKKwkgIChDT05GSUdfSU5QVVRfTU9VU0VERVYpIGFuZC9vciAiRXZlbnQgaW50ZXJmYWNlIHN1cHBvcnQiCisJICAoQ09ORklHX0lOUFVUX0VWREVWKSBhcyB3ZWxsLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhaXB0ZWsuCisKK2NvbmZpZyBVU0JfV0FDT00KKwl0cmlzdGF0ZSAiV2Fjb20gSW50dW9zL0dyYXBoaXJlIHRhYmxldCBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIElOUFVUCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFVTQiB2ZXJzaW9uIG9mIHRoZSBXYWNvbSBJbnR1b3MKKwkgIG9yIEdyYXBoaXJlIHRhYmxldC4gIE1ha2Ugc3VyZSB0byBzYXkgWSB0byAiTW91c2Ugc3VwcG9ydCIKKwkgIChDT05GSUdfSU5QVVRfTU9VU0VERVYpIGFuZC9vciAiRXZlbnQgaW50ZXJmYWNlIHN1cHBvcnQiCisJICAoQ09ORklHX0lOUFVUX0VWREVWKSBhcyB3ZWxsLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB3YWNvbS4KKworY29uZmlnIFVTQl9LQlRBQgorCXRyaXN0YXRlICJLQiBHZWFyIEphbVN0dWRpbyB0YWJsZXQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBJTlBVVAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBVU0IgdmVyc2lvbiBvZiB0aGUgS0IgR2VhcgorCSAgSmFtU3R1ZGlvIHRhYmxldC4gIE1ha2Ugc3VyZSB0byBzYXkgWSB0byAiTW91c2Ugc3VwcG9ydCIKKwkgIChDT05GSUdfSU5QVVRfTU9VU0VERVYpIGFuZC9vciAiRXZlbnQgaW50ZXJmYWNlIHN1cHBvcnQiCisJICAoQ09ORklHX0lOUFVUX0VWREVWKSBhcyB3ZWxsLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBrYnRhYi4KKworY29uZmlnIFVTQl9QT1dFUk1BVEUKKwl0cmlzdGF0ZSAiR3JpZmZpbiBQb3dlck1hdGUgYW5kIENvbnRvdXIgSm9nIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgSU5QVVQKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBHcmlmZmluIFBvd2VyTWF0ZSBvciBDb250b3VyIEpvZyBkZXZpY2VzLgorCSAgVGhlc2UgYXJlIGFsdW1pbnVtIGRpYWxzIHdoaWNoIGNhbiBtZWFzdXJlIGNsb2Nrd2lzZSBhbmQgYW50aWNsb2Nrd2lzZQorCSAgcm90YXRpb24uICBUaGUgZGlhbCBhbHNvIGFjdHMgYXMgYSBwdXNoYnV0dG9uLiAgVGhlIGJhc2UgY29udGFpbnMgYW4gTEVECisJICB3aGljaCBjYW4gYmUgaW5zdHJ1Y3RlZCB0byBwdWxzZSBvciB0byBzd2l0Y2ggdG8gYSBwYXJ0aWN1bGFyIGludGVuc2l0eS4KKworCSAgWW91IGNhbiBkb3dubG9hZCB1c2Vyc3BhY2UgdG9vbHMgZnJvbQorCSAgPGh0dHA6Ly9zb3dlcmJ1dHRzLmNvbS9wb3dlcm1hdGUvPi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcG93ZXJtYXRlLgorCitjb25maWcgVVNCX01UT1VDSAorCXRyaXN0YXRlICJNaWNyb1RvdWNoIFVTQiBUb3VjaHNjcmVlbiBEcml2ZXIiCisJZGVwZW5kcyBvbiBVU0IgJiYgSU5QVVQKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIE1pY3JvVG91Y2ggKE5vdyAzTSkgVVNCIAorCSAgVG91Y2hzY3JlZW4gY29udHJvbGxlci4KKworCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL210b3VjaC50eHQ+IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtdG91Y2h1c2IuCisKK2NvbmZpZyBVU0JfRUdBTEFYCisJdHJpc3RhdGUgImVHYWxheCBUb3VjaEtpdCBVU0IgVG91Y2hzY3JlZW4gRHJpdmVyIgorCWRlcGVuZHMgb24gVVNCICYmIElOUFVUCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBlR2FsYXggVG91Y2hLaXQgVVNCCisJICBUb3VjaHNjcmVlbiBjb250cm9sbGVyLgorCisJICBUaGUgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCBvbiBhIFhlbmFyYyA3MDBUU1YgbW9uaXRvcgorCSAgd2l0aCBlR2FsYXggdG91Y2hzY3JlZW4uCisKKwkgIEhhdmUgYSBsb29rIGF0IDxodHRwOi8vbGludXguY2hhcHRlcjcuY2gvdG91Y2hraXQvPiBmb3IKKwkgIGEgdXNhZ2UgZGVzY3JpcHRpb24gYW5kIHRoZSByZXF1aXJlZCB1c2VyLXNwYWNlIHN0dWZmLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0b3VjaGtpdHVzYi4KKworY29uZmlnIFVTQl9YUEFECisJdHJpc3RhdGUgIlgtQm94IGdhbWVwYWQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBJTlBVVAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBYLUJveCBwYWQgd2l0aCB5b3VyIGNvbXB1dGVyLgorCSAgTWFrZSBzdXJlIHRvIHNheSBZIHRvICJKb3lzdGljayBzdXBwb3J0IiAoQ09ORklHX0lOUFVUX0pPWURFVikKKwkgIGFuZC9vciAiRXZlbnQgaW50ZXJmYWNlIHN1cHBvcnQiIChDT05GSUdfSU5QVVRfRVZERVYpIGFzIHdlbGwuCisKKwkgIEZvciBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gY29ubmVjdCB0aGUgWC1Cb3ggcGFkIHRvIFVTQiwgc2VlCisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL2lucHV0L3hwYWQudHh0Pi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgeHBhZC4KKwkgIAorY29uZmlnIFVTQl9BVElfUkVNT1RFCisJdHJpc3RhdGUgIkFUSSAvIFgxMCBVU0IgUkYgcmVtb3RlIGNvbnRyb2wiCisJZGVwZW5kcyBvbiBVU0IgJiYgSU5QVVQKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhbiBBVEkgb3IgWDEwICJMb2xhIiBVU0IgcmVtb3RlIGNvbnRyb2wuCisJICBUaGVzZSBhcmUgUkYgcmVtb3RlcyB3aXRoIFVTQiByZWNlaXZlcnMuIAorCSAgVGhlIEFUSSByZW1vdGUgY29tZXMgd2l0aCBtYW55IG9mIEFUSSdzIEFsbC1Jbi1Xb25kZXIgdmlkZW8gY2FyZHMuCisJICBUaGUgWDEwICJMb2xhIiByZW1vdGUgaXMgYXZhaWxhYmxlIGF0OgorCSAgICAgPGh0dHA6Ly93d3cueDEwLmNvbS9wcm9kdWN0cy9sb2xhX3NnMS5odG0+CisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBtb3VzZSBwb2ludGVyLCBsZWZ0IGFuZCByaWdodCBtb3VzZSBidXR0b25zLCAKKwkgIGFuZCBtYXBzIGFsbCB0aGUgb3RoZXIgcmVtb3RlIGJ1dHRvbnMgdG8ga2V5cHJlc3MgZXZlbnRzLgorCSAgCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUKKwkgIGNhbGxlZCBhdGlfcmVtb3RlLgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2lucHV0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiY2VkZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9NYWtlZmlsZQpAQCAtMCwwICsxLDM5IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgVVNCIGlucHV0IGRyaXZlcnMKKyMKKworIyBNdWx0aXBhcnQgb2JqZWN0cy4KK3VzYmhpZC1vYmpzCTo9IGhpZC1jb3JlLm8KKworIyBPcHRpb25hbCBwYXJ0cyBvZiBtdWx0aXBhcnQgb2JqZWN0cy4KKworaWZlcSAoJChDT05GSUdfVVNCX0hJRERFVikseSkKKwl1c2JoaWQtb2JqcwkrPSBoaWRkZXYubworZW5kaWYKK2lmZXEgKCQoQ09ORklHX1VTQl9ISURJTlBVVCkseSkKKwl1c2JoaWQtb2JqcwkrPSBoaWQtaW5wdXQubworZW5kaWYKK2lmZXEgKCQoQ09ORklHX0hJRF9QSUQpLHkpCisJdXNiaGlkLW9ianMJKz0gcGlkLm8KK2VuZGlmCitpZmVxICgkKENPTkZJR19MT0dJVEVDSF9GRikseSkKKwl1c2JoaWQtb2JqcwkrPSBoaWQtbGdmZi5vCitlbmRpZgoraWZlcSAoJChDT05GSUdfVEhSVVNUTUFTVEVSX0ZGKSx5KQorCXVzYmhpZC1vYmpzCSs9IGhpZC10bWZmLm8KK2VuZGlmCitpZmVxICgkKENPTkZJR19ISURfRkYpLHkpCisJdXNiaGlkLW9ianMJKz0gaGlkLWZmLm8KK2VuZGlmCisKK29iai0kKENPTkZJR19VU0JfQUlQVEVLKQkrPSBhaXB0ZWsubworb2JqLSQoQ09ORklHX1VTQl9BVElfUkVNT1RFKQkrPSBhdGlfcmVtb3RlLm8KK29iai0kKENPTkZJR19VU0JfSElEKQkJKz0gdXNiaGlkLm8KK29iai0kKENPTkZJR19VU0JfS0JEKQkJKz0gdXNia2JkLm8KK29iai0kKENPTkZJR19VU0JfS0JUQUIpCQkrPSBrYnRhYi5vCitvYmotJChDT05GSUdfVVNCX01PVVNFKQkJKz0gdXNibW91c2Uubworb2JqLSQoQ09ORklHX1VTQl9NVE9VQ0gpCSs9IG10b3VjaHVzYi5vCitvYmotJChDT05GSUdfVVNCX0VHQUxBWCkJKz0gdG91Y2hraXR1c2Iubworb2JqLSQoQ09ORklHX1VTQl9QT1dFUk1BVEUpCSs9IHBvd2VybWF0ZS5vCitvYmotJChDT05GSUdfVVNCX1dBQ09NKQkJKz0gd2Fjb20ubworb2JqLSQoQ09ORklHX1VTQl9YUEFEKQkJKz0geHBhZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9haXB0ZWsuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2FpcHRlay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZmVhOWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9haXB0ZWsuYwpAQCAtMCwwICsxLDIyODMgQEAKKy8qCisgKiAgTmF0aXZlIHN1cHBvcnQgZm9yIHRoZSBBaXB0ZWsgSHlwZXJQZW4gVVNCIFRhYmxldHMKKyAqICAoNDAwMFUvNTAwMFUvNjAwMFUvODAwMFUvMTIwMDBVKQorICogIAorICogIENvcHlyaWdodCAoYykgMjAwMSAgICAgIENocmlzIEF0ZW5hc2lvICAgPGNocmlzQGNydWQubmV0PgorICogIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IEJyeWFuIFcuIEhlYWRsZXkgPGJ3aGVhZGxleUBlYXJ0aGxpbmsubmV0PgorICoKKyAqICBiYXNlZCBvbiB3YWNvbS5jIGJ5CisgKiAgICAgVm9qdGVjaCBQYXZsaWsgICAgICA8dm9qdGVjaEBzdXNlLmN6PgorICogICAgIEFuZHJlYXMgQmFjaCBBYWVuICAgPGFiYWNoQHN0b2ZhbmV0LmRrPgorICogICAgIENsaWZmb3JkIFdvbGYgICAgICAgPGNsaWZmb3JkQGNsaWZmb3JkLmF0PgorICogICAgIFNhbSBNb3NlbCAgICAgICAgICAgPHNhbS5tb3NlbEBjb21wdXRlci5vcmc+CisgKiAgICAgSmFtZXMgRS4gQmxhaXIgICAgICA8Y29ydnVzQGdudS5vcmc+CisgKiAgICAgRGFuaWVsIEVnZ2VyICAgICAgICA8ZWdnZXJAc3VzZS5kZT4KKyAqCisgKiAgTWFueSB0aGFua3MgdG8gT2xpdmVyIEt1ZWNoZW1hbm4gZm9yIGhpcyBzdXBwb3J0LgorICoKKyAqICBDaGFuZ2VMb2c6CisgKiAgICAgIHYwLjEgLSBJbml0aWFsIHJlbGVhc2UKKyAqICAgICAgdjAuMiAtIEhhY2sgdG8gZ2V0IGFyb3VuZCBmYWtlIGV2ZW50IDI4J3MuIChCcnlhbiBXLiBIZWFkbGV5KQorICogICAgICB2MC4zIC0gTWFrZSBVUkIgZHluYW1pYyAoQnJ5YW4gVy4gSGVhZGxleSwgSnVuLTgtMjAwMikKKyAqICAgICAgICAgICAgIFJlbGVhc2VkIHRvIExpbnV4IDIuNC4xOSBhbmQgMi41LngKKyAqICAgICAgdjAuNCAtIFJld3JvdGUgc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIGNvZGUgdG8gZGVhbCB3aXRoCisgKiAgICAgICAgICAgICBjb3JyZWN0ZWQgY29udHJvbCBzZXF1ZW5jZXMsIHRpbWluZywgZHluYW1pYyBjb25maWd1cmF0aW9uLAorICogICAgICAgICAgICAgc3VwcG9ydCBvZiA2MDAwVSAtIDEyMDAwVSwgcHJvY2ZzLCBhbmQgbWFjcm8ga2V5IHN1cHBvcnQKKyAqICAgICAgICAgICAgIChKYW4tMS0yMDAzIC0gRmViLTUtMjAwMywgQnJ5YW4gVy4gSGVhZGxleSkKKyAqICAgICAgdjEuMCAtIEFkZGVkIHN1cHBvcnQgZm9yIGRpYWdub3N0aWMgbWVzc2FnZXMsIGNvdW50IG9mIG1lc3NhZ2VzCisgKiAgICAgICAgICAgICByZWNlaXZlZCBmcm9tIFVSQiAtIE1hci04LTIwMDMsIEJyeWFuIFcuIEhlYWRsZXkKKyAqICAgICAgdjEuMSAtIGFkZGVkIHN1cHBvcnQgZm9yIHRhYmxldCByZXNvbHV0aW9uLCBjaGFuZ2VkIERWIGFuZCBwcm94aW1pdHkKKyAqICAgICAgICAgICAgIHNvbWUgY29ycmVjdGlvbnMgLSBKdW4tMjItMjAwMywgbWFydGluIHNjaG5lZWJhY2hlcgorICogICAgICAgICAgIC0gQWRkZWQgc3VwcG9ydCBmb3IgdGhlIHN5c2ZzIGludGVyZmFjZSwgZGVwcmVjYXRpbmcgdGhlCisgKiAgICAgICAgICAgICBwcm9jZnMgaW50ZXJmYWNlIGZvciAyLjUueCBrZXJuZWwuIEFsc28gYWRkZWQgc3VwcG9ydCBmb3IKKyAqICAgICAgICAgICAgIFdoZWVsIGNvbW1hbmQuIEJyeWFuIFcuIEhlYWRsZXkgSnVseS0xNS0yMDAzLgorICogICAgICB2MS4yIC0gUmV3b3JrZWQgaml0dGVyIHRpbWVyIGFzIGEga2VybmVsIHRocmVhZC4gCisgKiAgICAgICAgICAgICBCcnlhbiBXLiBIZWFkbGV5IE5vdmVtYmVyLTI4LTIwMDMvSmFuLTEwLTIwMDQuCisgKiAgICAgIHYxLjMgLSBSZXBhaXJlZCBpc3N1ZSBvZiBrZXJuZWwgdGhyZWFkIGdvaW5nIG51dHMgb24gc2luZ2xlLXByb2Nlc3NvcgorICogICAgICAgICAgICAgbWFjaGluZXMsIGludHJvZHVjZWQgcHJvZ3JhbW1hYmxlRGVsYXkgYXMgYSBjb21tYW5kIGxpbmUKKyAqICAgICAgICAgICAgIHBhcmFtZXRlci4gRmViIDcgMjAwNCwgQnJ5YW4gVy4gSGVhZGxleS4KKyAqICAgICAgdjEuNCAtIFJlLXdpcmUgaml0dGVyIHNvIGl0IGRvZXMgbm90IHJlcXVpcmUgYSB0aHJlYWQuIENvdXJ0ZXN5IG9mCisgKiAgICAgICAgICAgICBSZW5lIHZhbiBQYWFzc2VuLiBBZGRlZCByZXBvcnRpbmcgb2YgcGh5c2ljYWwgcG9pbnRlciBkZXZpY2UKKyAqICAgICAgICAgICAgIChlLmcuLCBzdHlsdXMsIG1vdXNlIGluIHJlcG9ydHMgMiwgMywgNCwgNS4gV2UgZG9uJ3Qga25vdworICogICAgICAgICAgICAgZm9yIHJlcG9ydHMgMSwgNi4pCisgKiAgICAgICAgICAgICB3aGF0IHBoeXNpY2FsIGRldmljZSByZXBvcnRzIGZvciByZXBvcnRzIDEsIDYuKSBBbHNvIGVuYWJsZWQKKyAqICAgICAgICAgICAgIE1PVVNFIGFuZCBMRU5TIHRvb2wgYnV0dG9uIG1vZGVzLiBSZW5hbWVkICJydWJiZXIiIHRvICJlcmFzZXIiLgorICogICAgICAgICAgICAgRmViIDIwLCAyMDA0LCBCcnlhbiBXLiBIZWFkbGV5LgorICogICAgICB2MS41IC0gQWRkZWQgcHJldmlvdXNKaXR0ZXJhYmxlLCBzbyB3ZSBkb24ndCBkbyBqaXR0ZXIgZGVsYXkgd2hlbiB0aGUKKyAqICAgICAgICAgICAgIHVzZXIgaXMgaG9sZGluZyBhIGJ1dHRvbiBkb3duIGZvciBwZXJpb2RzIG9mIHRpbWUuCisgKgorICogTk9URToKKyAqICAgICAgVGhpcyBrZXJuZWwgZHJpdmVyIGlzIGF1Z21lbnRlZCBieSB0aGUgIkFpcHRlayIgWEZyZWU4NiBpbnB1dAorICogICAgICBkcml2ZXIgZm9yIHlvdXIgWCBzZXJ2ZXIsIGFzIHdlbGwgYXMgdGhlIEdhaXB0ZWsgR1VJIEZyb250LWVuZAorICogICAgICAiVGFibGV0IE1hbmFnZXIiLiAKKyAqICAgICAgVGhlc2UgdGhyZWUgcHJvZHVjdHMgYXJlIGhpZ2hseSBpbnRlcmFjdGl2ZSB3aXRoIG9uZSBhbm90aGVyLCAKKyAqICAgICAgc28gdGhlcmVmb3JlIGl0J3MgZWFzaWVyIHRvIGRvY3VtZW50IHRoZW0gYWxsIGFzIG9uZSBzdWJzeXN0ZW0uCisgKiAgICAgIFBsZWFzZSB2aXNpdCB0aGUgcHJvamVjdCdzICJob21lIHBhZ2UiLCBsb2NhdGVkIGF0LCAKKyAqICAgICAgaHR0cDovL2FpcHRla3RhYmxldC5zb3VyY2Vmb3JnZS5uZXQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS41IChNYXktMTUtMjAwNCkiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgICJCcnlhbiBXLiBIZWFkbGV5L0NocmlzIEF0ZW5hc2lvIgorI2RlZmluZSBEUklWRVJfREVTQyAgICAiQWlwdGVrIEh5cGVyUGVuIFVTQiBUYWJsZXQgRHJpdmVyIChMaW51eCAyLjYueCkiCisKKy8qCisgKiBBaXB0ZWsgc3RhdHVzIHBhY2tldDoKKyAqCisgKiAocmV0dXJuZWQgYXMgUmVwb3J0IDEgLSByZWxhdGl2ZSBjb29yZGluYXRlcyBmcm9tIG1vdXNlIGFuZCBzdHlsdXMpCisgKgorICogICAgICAgIGJpdDcgIGJpdDYgIGJpdDUgIGJpdDQgIGJpdDMgIGJpdDIgIGJpdDEgIGJpdDAKKyAqIGJ5dGUwICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMQorICogYnl0ZTEgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgIEJTMiAgIEJTICAgIFRpcAorICogYnl0ZTIgIFg3ICAgIFg2ICAgIFg1ICAgIFg0ICAgIFgzICAgIFgyICAgIFgxICAgIFgwCisgKiBieXRlMyAgWTcgICAgWTYgICAgWTUgICAgWTQgICAgWTMgICAgWTIgICAgWTEgICAgWTAKKyAqCisgKiAocmV0dXJuZWQgYXMgUmVwb3J0IDIgLSBhYnNvbHV0ZSBjb29yZGluYXRlcyBmcm9tIHRoZSBzdHlsdXMpCisgKgorICogICAgICAgIGJpdDcgIGJpdDYgIGJpdDUgIGJpdDQgIGJpdDMgIGJpdDIgIGJpdDEgIGJpdDAKKyAqIGJ5dGUwICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMSAgICAgMAorICogYnl0ZTEgIFg3ICAgIFg2ICAgIFg1ICAgIFg0ICAgIFgzICAgIFgyICAgIFgxICAgIFgwCisgKiBieXRlMiAgWDE1ICAgWDE0ICAgWDEzICAgWDEyICAgWDExICAgWDEwICAgWDkgICAgWDgKKyAqIGJ5dGUzICBZNyAgICBZNiAgICBZNSAgICBZNCAgICBZMyAgICBZMiAgICBZMSAgICBZMAorICogYnl0ZTQgIFkxNSAgIFkxNCAgIFkxMyAgIFkxMiAgIFkxMSAgIFkxMCAgIFk5ICAgIFk4CisgKiBieXRlNSAgICogICAgICogICAgICogICAgQlMyICAgQlMxICAgVGlwICAgSVIgICAgRFYKKyAqIGJ5dGU2ICBQNyAgICBQNiAgICBQNSAgICBQNCAgICBQMyAgICBQMiAgICBQMSAgICBQMAorICogYnl0ZTcgIFAxNSAgIFAxNCAgIFAxMyAgIFAxMiAgIFAxMSAgIFAxMCAgIFA5ICAgIFA4CisgKgorICogKHJldHVybmVkIGFzIFJlcG9ydCAzIC0gYWJzb2x1dGUgY29vcmRpbmF0ZXMgZnJvbSB0aGUgbW91c2UpCisgKgorICogICAgICAgIGJpdDcgIGJpdDYgIGJpdDUgIGJpdDQgIGJpdDMgIGJpdDIgIGJpdDEgIGJpdDAKKyAqIGJ5dGUwICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMSAgICAgMAorICogYnl0ZTEgIFg3ICAgIFg2ICAgIFg1ICAgIFg0ICAgIFgzICAgIFgyICAgIFgxICAgIFgwCisgKiBieXRlMiAgWDE1ICAgWDE0ICAgWDEzICAgWDEyICAgWDExICAgWDEwICAgWDkgICAgWDgKKyAqIGJ5dGUzICBZNyAgICBZNiAgICBZNSAgICBZNCAgICBZMyAgICBZMiAgICBZMSAgICBZMAorICogYnl0ZTQgIFkxNSAgIFkxNCAgIFkxMyAgIFkxMiAgIFkxMSAgIFkxMCAgIFk5ICAgIFk4CisgKiBieXRlNSAgICogICAgICogICAgICogICAgQlMyICAgQlMxICAgVGlwICAgSVIgICAgRFYKKyAqIGJ5dGU2ICBQNyAgICBQNiAgICBQNSAgICBQNCAgICBQMyAgICBQMiAgICBQMSAgICBQMAorICogYnl0ZTcgIFAxNSAgIFAxNCAgIFAxMyAgIFAxMiAgIFAxMSAgIFAxMCAgIFA5ICAgIFA4CisgKgorICogKHJldHVybmVkIGFzIFJlcG9ydCA0IC0gbWFjcm9rZXlzIGZyb20gdGhlIHN0eWx1cykKKyAqCisgKiAgICAgICAgYml0NyAgYml0NiAgYml0NSAgYml0NCAgYml0MyAgYml0MiAgYml0MSAgYml0MAorICogYnl0ZTAgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAxICAgICAwICAgICAwCisgKiBieXRlMSAgIDAgICAgIDAgICAgIDAgICAgQlMyICAgQlMgICAgVGlwICAgSVIgICAgRFYKKyAqIGJ5dGUyICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMSAgICAgMAorICogYnl0ZTMgICAwICAgICAwICAgICAwICAgIEs0ICAgIEszICAgIEsyICAgIEsxICAgIEswCisgKiBieXRlNCAgUDcgICAgUDYgICAgUDUgICAgUDQgICAgUDMgICAgUDIgICAgUDEgICAgUDAKKyAqIGJ5dGU1ICBQMTUgICBQMTQgICBQMTMgICBQMTIgICBQMTEgICBQMTAgICBQOSAgICBQOAorICoKKyAqIChyZXR1cm5lZCBhcyBSZXBvcnQgNSAtIG1hY3Jva2V5cyBmcm9tIHRoZSBtb3VzZSkKKyAqCisgKiAgICAgICAgYml0NyAgYml0NiAgYml0NSAgYml0NCAgYml0MyAgYml0MiAgYml0MSAgYml0MAorICogYnl0ZTAgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAxICAgICAwICAgICAwCisgKiBieXRlMSAgIDAgICAgIDAgICAgIDAgICAgQlMyICAgQlMgICAgVGlwICAgSVIgICAgRFYKKyAqIGJ5dGUyICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMSAgICAgMAorICogYnl0ZTMgICAwICAgICAwICAgICAwICAgIEs0ICAgIEszICAgIEsyICAgIEsxICAgIEswCisgKiBieXRlNCAgUDcgICAgUDYgICAgUDUgICAgUDQgICAgUDMgICAgUDIgICAgUDEgICAgUDAKKyAqIGJ5dGU1ICBQMTUgICBQMTQgICBQMTMgICBQMTIgICBQMTEgICBQMTAgICBQOSAgICBQOAorICoKKyAqIElSOiBJbiBSYW5nZSA9IFByb3hpbWl0eSBvbgorICogRFYgPSBEYXRhIFZhbGlkCisgKiBCUyA9IEJhcnJlbCBTd2l0Y2ggKGFzIGluLCBtYWNybyBrZXlzKQorICogQlMyIGFsc28gcmVmZXJyZWQgdG8gYXMgVGFibGV0IFBpY2sKKyAqCisgKiBDb21tYW5kIFN1bW1hcnk6CisgKgorICogVXNlIHJlcG9ydF90eXBlIENPTlRST0wgKDMpCisgKiBVc2UgcmVwb3J0X2lkICAgMgorICoKKyAqIENvbW1hbmQvRGF0YSAgICBEZXNjcmlwdGlvbiAgICAgUmV0dXJuIEJ5dGVzICAgIFJldHVybiBWYWx1ZQorICogMHgxMC8weDAwICAgICAgIFN3aXRjaFRvTW91c2UgICAgICAgMAorICogMHgxMC8weDAxICAgICAgIFN3aXRjaFRvVGFibGV0ICAgICAgMAorICogMHgxOC8weDA0ICAgICAgIFNldFJlc29sdXRpb24gICAgICAgMCAKKyAqIDB4MTIvMHhGRiAgICAgICBBdXRvR2Fpbk9uICAgICAgICAgIDAKKyAqIDB4MTcvMHgwMCAgICAgICBGaWx0ZXJPbiAgICAgICAgICAgIDAKKyAqIDB4MDEvMHgwMCAgICAgICBHZXRYRXh0ZW5zaW9uICAgICAgIDIgICAgICAgICAgIE1heFgKKyAqIDB4MDEvMHgwMSAgICAgICBHZXRZRXh0ZW5zaW9uICAgICAgIDIgICAgICAgICAgIE1heFkKKyAqIDB4MDIvMHgwMCAgICAgICBHZXRNb2RlbENvZGUgICAgICAgIDIgICAgICAgICAgIE1vZGVsQ29kZSA9IExPQllURQorICogMHgwMy8weDAwICAgICAgIEdldE9ETUNvZGUgICAgICAgICAgMiAgICAgICAgICAgT0RNQ29kZQorICogMHgwOC8weDAwICAgICAgIEdldFByZXNzdXJlTGV2ZWxzICAgMiAgICAgICAgICAgPTUxMgorICogMHgwNC8weDAwICAgICAgIEdldEZpcm13YXJlVmVyc2lvbiAgMiAgICAgICAgICAgRmlybXdhcmUgVmVyc2lvbgorICogMHgxMS8weDAyICAgICAgIEVuYWJsZU1hY3JvS2V5cyAgICAgMAorICoKKyAqIFRvIGluaXRpYWxpemUgdGhlIHRhYmxldDoKKyAqCisgKiAoMSkgU2VuZCBSZXNvbHV0aW9uNTAwTFBJIChDb21tYW5kKQorICogKDIpIFF1ZXJ5IGZvciBNb2RlbCBjb2RlIChPcHRpb24gUmVwb3J0KQorICogKDMpIFF1ZXJ5IGZvciBPRE0gY29kZSAoT3B0aW9uIFJlcG9ydCkKKyAqICg0KSBRdWVyeSBmb3IgZmlybXdhcmUgKE9wdGlvbiBSZXBvcnQpCisgKiAoNSkgUXVlcnkgZm9yIEdldFhFeHRlbnNpb24gKE9wdGlvbiBSZXBvcnQpCisgKiAoNikgUXVlcnkgZm9yIEdldFlFeHRlbnNpb24gKE9wdGlvbiBSZXBvcnQpCisgKiAoNykgUXVlcnkgZm9yIEdldFByZXNzdXJlTGV2ZWxzIChPcHRpb24gUmVwb3J0KQorICogKDgpIFN3aXRjaFRvVGFibGV0IGZvciBBYnNvbHV0ZSBjb29yZGluYXRlcywgb3IKKyAqICAgICBTd2l0Y2hUb01vdXNlIGZvciBSZWxhdGl2ZSBjb29yZGluYXRlcyAoQ29tbWFuZCkKKyAqICg5KSBFbmFibGVNYWNyb0tleXMgKENvbW1hbmQpCisgKiAoMTApIEZpbHRlck9uIChDb21tYW5kKQorICogKDExKSBBdXRvR2Fpbk9uIChDb21tYW5kKQorICoKKyAqIChTdGVwIDkgY2FuIGJlIG9taXR0ZWQsIGJ1dCB5b3UnbGwgdGhlbiBoYXZlIG5vIGZ1bmN0aW9uIGtleXMuKQorICovCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BSVBURUsJCQkJMHgwOGNhCisjZGVmaW5lIFVTQl9SRVFfR0VUX1JFUE9SVAkJCQkweDAxCisjZGVmaW5lIFVTQl9SRVFfU0VUX1JFUE9SVAkJCQkweDA5CisKKwkvKiBQb2ludGVyTW9kZSBjb2RlcworCSAqLworI2RlZmluZSBBSVBURUtfUE9JTlRFUl9PTkxZX01PVVNFX01PREUJCQkwCisjZGVmaW5lIEFJUFRFS19QT0lOVEVSX09OTFlfU1RZTFVTX01PREUJCQkxCisjZGVmaW5lIEFJUFRFS19QT0lOVEVSX0VJVEhFUl9NT0RFCQkJMgorCisjZGVmaW5lIEFJUFRFS19QT0lOVEVSX0FMTE9XX01PVVNFX01PREUoYSkJCVwKKwkoYSA9PSBBSVBURUtfUE9JTlRFUl9PTkxZX01PVVNFX01PREUgfHwJCVwKKwkgYSA9PSBBSVBURUtfUE9JTlRFUl9FSVRIRVJfTU9ERSkKKyNkZWZpbmUgQUlQVEVLX1BPSU5URVJfQUxMT1dfU1RZTFVTX01PREUoYSkJCVwKKwkoYSA9PSBBSVBURUtfUE9JTlRFUl9PTkxZX1NUWUxVU19NT0RFIHx8CVwKKwkgYSA9PSBBSVBURUtfUE9JTlRFUl9FSVRIRVJfTU9ERSkKKworCS8qIENvb3JkaW5hdGVNb2RlIGNvZGUKKwkgKi8KKyNkZWZpbmUgQUlQVEVLX0NPT1JESU5BVEVfUkVMQVRJVkVfTU9ERQkJCTAKKyNkZWZpbmUgQUlQVEVLX0NPT1JESU5BVEVfQUJTT0xVVEVfTU9ERQkJCTEKKworICAgICAgIC8qIFhUaWx0IGFuZCBZVGlsdCB2YWx1ZXMKKyAgICAgICAgKi8KKyNkZWZpbmUgQUlQVEVLX1RJTFRfTUlOCQkJCQkoLTEyOCkKKyNkZWZpbmUgQUlQVEVLX1RJTFRfTUFYCQkJCQkxMjcKKyNkZWZpbmUgQUlQVEVLX1RJTFRfRElTQUJMRQkJCQkoLTEwMTAxKQorCisJLyogV2hlZWwgdmFsdWVzCisJICovCisjZGVmaW5lIEFJUFRFS19XSEVFTF9NSU4JCQkJMAorI2RlZmluZSBBSVBURUtfV0hFRUxfTUFYCQkJCTEwMjQKKyNkZWZpbmUgQUlQVEVLX1dIRUVMX0RJU0FCTEUJCQkJKC0xMDEwMSkKKworCS8qIFRvb2xDb2RlIHZhbHVlcywgd2hpY2ggQlRXIGFyZSAweDE0MCAuLiAweDE0ZgorCSAqIFdlIGhhdmUgdGhpbmdzIHNldCB1cCBzdWNoIHRoYXQgaWYgVE9PTF9CVVRUT05fRklSRURfQklUIGlzCisJICogbm90IHNldCwgd2UnbGwgc2VuZCBvbmUgaW5zdGFuY2Ugb2YgQUlQVEVLX1RPT0xfQlVUVE9OX3h4eC4KKwkgKgorCSAqIFdoZW5ldmVyIHRoZSB1c2VyIHJlc2V0cyB0aGUgdmFsdWUsIFRPT0xfQlVUVE9OX0ZJUkVEX0JJVCB3aWxsCisJICogZ2V0IHJlc2V0LgorCSAqLworI2RlZmluZSBUT09MX0JVVFRPTih4KQkJCQkJKCh4KSAmIDB4MTRmKQorI2RlZmluZSBUT09MX0JVVFRPTl9GSVJFRCh4KQkJCQkoKHgpICYgMHgyMDApCisjZGVmaW5lIFRPT0xfQlVUVE9OX0ZJUkVEX0JJVAkJCQkweDIwMAorCS8qIHRvb2xNb2RlIGNvZGVzCisJICovCisjZGVmaW5lIEFJUFRFS19UT09MX0JVVFRPTl9QRU5fTU9ERQkJCUJUTl9UT09MX1BFTgorI2RlZmluZSBBSVBURUtfVE9PTF9CVVRUT05fUEVOX01PREUJCQlCVE5fVE9PTF9QRU4KKyNkZWZpbmUgQUlQVEVLX1RPT0xfQlVUVE9OX1BFTkNJTF9NT0RFCQkJQlROX1RPT0xfUEVOQ0lMCisjZGVmaW5lIEFJUFRFS19UT09MX0JVVFRPTl9CUlVTSF9NT0RFCQkJQlROX1RPT0xfQlJVU0gKKyNkZWZpbmUgQUlQVEVLX1RPT0xfQlVUVE9OX0FJUkJSVVNIX01PREUJCUJUTl9UT09MX0FJUkJSVVNICisjZGVmaW5lIEFJUFRFS19UT09MX0JVVFRPTl9FUkFTRVJfTU9ERQkJCUJUTl9UT09MX1JVQkJFUgorI2RlZmluZSBBSVBURUtfVE9PTF9CVVRUT05fTU9VU0VfTU9ERQkJCUJUTl9UT09MX01PVVNFCisjZGVmaW5lIEFJUFRFS19UT09MX0JVVFRPTl9MRU5TX01PREUJCQlCVE5fVE9PTF9MRU5TCisKKwkvKiBEaWFnbm9zdGljIG1lc3NhZ2UgY29kZXMKKwkgKi8KKyNkZWZpbmUgQUlQVEVLX0RJQUdOT1NUSUNfTkEJCQkJMAorI2RlZmluZSBBSVBURUtfRElBR05PU1RJQ19TRU5ESU5HX1JFTEFUSVZFX0lOX0FCU09MVVRFCTEKKyNkZWZpbmUgQUlQVEVLX0RJQUdOT1NUSUNfU0VORElOR19BQlNPTFVURV9JTl9SRUxBVElWRQkyCisjZGVmaW5lIEFJUFRFS19ESUFHTk9TVElDX1RPT0xfRElTQUxMT1dFRAkJMworCisJLyogVGltZSB0byB3YWl0IChpbiBtcykgdG8gaGVscCBtYXNrIGhhbmQgaml0dGVyaW5nIAorCSAqIHdoZW4gcHJlc3NpbmcgdGhlIHN0eWx1cyBidXR0b25zLgorCSAqLworI2RlZmluZSBBSVBURUtfSklUVEVSX0RFTEFZX0RFRkFVTFQJCQk1MAorCisJLyogVGltZSB0byB3YWl0IChpbiBtcykgaW4tYmV0d2VlbiBzZW5kaW5nIHRoZSB0YWJsZXQKKwkgKiBhIGNvbW1hbmQgYW5kIGJlZ2lubmluZyB0aGUgcHJvY2VzcyBvZiByZWFkaW5nIHRoZSByZXR1cm4KKwkgKiBzZXF1ZW5jZSBmcm9tIHRoZSB0YWJsZXQuCisJICovCisjZGVmaW5lIEFJUFRFS19QUk9HUkFNTUFCTEVfREVMQVlfMjUJCTI1CisjZGVmaW5lIEFJUFRFS19QUk9HUkFNTUFCTEVfREVMQVlfNTAJCTUwCisjZGVmaW5lIEFJUFRFS19QUk9HUkFNTUFCTEVfREVMQVlfMTAwCQkxMDAKKyNkZWZpbmUgQUlQVEVLX1BST0dSQU1NQUJMRV9ERUxBWV8yMDAJCTIwMAorI2RlZmluZSBBSVBURUtfUFJPR1JBTU1BQkxFX0RFTEFZXzMwMAkJMzAwCisjZGVmaW5lIEFJUFRFS19QUk9HUkFNTUFCTEVfREVMQVlfNDAwCQk0MDAKKyNkZWZpbmUgQUlQVEVLX1BST0dSQU1NQUJMRV9ERUxBWV9ERUZBVUxUCUFJUFRFS19QUk9HUkFNTUFCTEVfREVMQVlfNDAwCisKKwkvKiBNb3VzZSBidXR0b24gcHJvZ3JhbW1pbmcKKwkgKi8KKyNkZWZpbmUgQUlQVEVLX01PVVNFX0xFRlRfQlVUVE9OCQkweDAxCisjZGVmaW5lIEFJUFRFS19NT1VTRV9SSUdIVF9CVVRUT04JCTB4MDIKKyNkZWZpbmUgQUlQVEVLX01PVVNFX01JRERMRV9CVVRUT04JCTB4MDQKKworCS8qIFN0eWx1cyBidXR0b24gcHJvZ3JhbW1pbmcKKwkgKi8KKyNkZWZpbmUgQUlQVEVLX1NUWUxVU19MT1dFUl9CVVRUT04JCTB4MDgKKyNkZWZpbmUgQUlQVEVLX1NUWUxVU19VUFBFUl9CVVRUT04JCTB4MTAKKworCS8qIExlbmd0aCBvZiBpbmNvbWluZyBwYWNrZXQgZnJvbSB0aGUgdGFibGV0CisJICovCisjZGVmaW5lIEFJUFRFS19QQUNLRVRfTEVOR1RICQkJOAorCisJLyogV2UgcmVwb3J0IGluIEVWX01JU0MgYm90aCB0aGUgcHJveGltaXR5IGFuZAorCSAqIHdoZXRoZXIgdGhlIHJlcG9ydCBjYW1lIGZyb20gdGhlIHN0eWx1cywgdGFibGV0IG1vdXNlCisJICogb3IgInVua25vd24iIC0tIFVua25vd24gd2hlbiB0aGUgdGFibGV0IGlzIGluIHJlbGF0aXZlCisJICogbW9kZSwgYmVjYXVzZSB3ZSBvbmx5IGdldCByZXBvcnQgMSdzLgorCSAqLworI2RlZmluZSBBSVBURUtfUkVQT1JUX1RPT0xfVU5LTk9XTgkJMHgxMAorI2RlZmluZSBBSVBURUtfUkVQT1JUX1RPT0xfU1RZTFVTCQkweDIwCisjZGVmaW5lIEFJUFRFS19SRVBPUlRfVE9PTF9NT1VTRQkJMHg0MAorCitzdGF0aWMgaW50IHByb2dyYW1tYWJsZURlbGF5ID0gQUlQVEVLX1BST0dSQU1NQUJMRV9ERUxBWV9ERUZBVUxUOworc3RhdGljIGludCBqaXR0ZXJEZWxheSA9IEFJUFRFS19KSVRURVJfREVMQVlfREVGQVVMVDsKKworc3RydWN0IGFpcHRla19mZWF0dXJlcyB7CisJaW50IG9kbUNvZGU7CQkvKiBUYWJsZXQgbWFudWZhY3R1cmVyIGNvZGUgICAgICAgKi8KKwlpbnQgbW9kZWxDb2RlOwkJLyogVGFibGV0IG1vZGVsIGNvZGUgKG5vdCB1bmlxdWUpICovCisJaW50IGZpcm13YXJlQ29kZTsJLyogcHJvbS9lZXByb20gdmVyc2lvbiAgICAgICAgICAgICovCisJY2hhciB1c2JQYXRoWzY0ICsgMV07CS8qIGRldmljZSdzIHBoeXNpY2FsIHVzYiBwYXRoICAgICAqLworCWNoYXIgaW5wdXRQYXRoWzY0ICsgMV07CS8qIGlucHV0IGRldmljZSBwYXRoICAgICAgICAgICAgICAqLworfTsKKworc3RydWN0IGFpcHRla19zZXR0aW5ncyB7CisJaW50IHBvaW50ZXJNb2RlOwkvKiBzdHlsdXMtLCBtb3VzZS1vbmx5IG9yIGVpdGhlciAqLworCWludCBjb29yZGluYXRlTW9kZTsJLyogYWJzb2x1dGUvcmVsYXRpdmUgY29vcmRzICAgICAgKi8KKwlpbnQgdG9vbE1vZGU7CQkvKiBwZW4sIHBlbmNpbCwgYnJ1c2gsIGV0Yy4gdG9vbCAqLworCWludCB4VGlsdDsJCS8qIHN5bnRoZXRpYyB4VGlsdCBhbW91bnQgICAgICAgICovCisJaW50IHlUaWx0OwkJLyogc3ludGhldGljIHlUaWx0IGFtb3VudCAgICAgICAgKi8KKwlpbnQgd2hlZWw7CQkvKiBzeW50aGV0aWMgd2hlZWwgYW1vdW50ICAgICAgICAqLworCWludCBzdHlsdXNCdXR0b25VcHBlcjsJLyogc3R5bHVzIHVwcGVyIGJ0biBkZWxpdmVycy4uLiAgKi8KKwlpbnQgc3R5bHVzQnV0dG9uTG93ZXI7CS8qIHN0eWx1cyBsb3dlciBidG4gZGVsaXZlcnMuLi4gICovCisJaW50IG1vdXNlQnV0dG9uTGVmdDsJLyogbW91c2UgbGVmdCBidG4gZGVsaXZlcnMuLi4gICAgKi8KKwlpbnQgbW91c2VCdXR0b25NaWRkbGU7CS8qIG1vdXNlIG1pZGRsZSBidG4gZGVsaXZlcnMuLi4gICovCisJaW50IG1vdXNlQnV0dG9uUmlnaHQ7CS8qIG1vdXNlIHJpZ2h0IGJ0biBkZWxpdmVycy4uLiAgICovCisJaW50IHByb2dyYW1tYWJsZURlbGF5OwkvKiBkZWxheSBmb3IgdGFibGV0IHByb2dyYW1taW5nICAqLworCWludCBqaXR0ZXJEZWxheTsJLyogZGVsYXkgZm9yIGhhbmQgaml0dGVyaW5nICAgICAgKi8KK307CisKK3N0cnVjdCBhaXB0ZWsgeworCXN0cnVjdCBpbnB1dF9kZXYgaW5wdXRkZXY7CQkvKiBpbnB1dCBkZXZpY2Ugc3RydWN0ICAgICAgICAgICAqLworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CQkvKiB1c2IgZGV2aWNlIHN0cnVjdCAgICAgICAgICAgICAqLworCXN0cnVjdCB1cmIgKnVyYjsJCQkvKiB1cmIgZm9yIGluY29taW5nIHJlcG9ydHMgICAgICAqLworCWRtYV9hZGRyX3QgZGF0YV9kbWE7CQkJLyogb3VyIGRtYSBzdHVmZmFnZSAgICAgICAgICAgICAgKi8KKwlzdHJ1Y3QgYWlwdGVrX2ZlYXR1cmVzIGZlYXR1cmVzOwkvKiB0YWJsZXQncyBhcnJheSBvZiBmZWF0dXJlcyAgICAqLworCXN0cnVjdCBhaXB0ZWtfc2V0dGluZ3MgY3VyU2V0dGluZzsJLyogdGFibGV0J3MgY3VycmVudCBwcm9ncmFtbWFibGUgKi8KKwlzdHJ1Y3QgYWlwdGVrX3NldHRpbmdzIG5ld1NldHRpbmc7CS8qIC4uLiBhbmQgbmV3IHBhcmFtIHNldHRpbmdzICAgICovCisJdW5zaWduZWQgaW50IGlmbnVtOwkJCS8qIGludGVyZmFjZSBudW1iZXIgZm9yIElPICAgICAgICovCisJaW50IG9wZW5Db3VudDsJCQkJLyogbW9kdWxlIHVzZSBjb3VudGVyICAgICAgICAgICAgKi8KKwlpbnQgZGlhZ25vc3RpYzsJCQkJLyogdGFibGV0IGRpYWdub3N0aWMgY29kZXMgICAgICAgKi8KKwl1bnNpZ25lZCBsb25nIGV2ZW50Q291bnQ7CQkvKiBldmVudCBjb3VudCAgICAgICAgICAgICAgICAgICAqLworCWludCBpbkRlbGF5OwkJCQkvKiBqaXR0ZXI6IGluIGppdHRlciBkZWxheT8gICAgICAqLworCXVuc2lnbmVkIGxvbmcgZW5kRGVsYXk7CQkJLyogaml0dGVyOiB0aW1lIHdoZW4gZGVsYXkgZW5kcyAgKi8KKwlpbnQgcHJldmlvdXNKaXR0ZXJhYmxlOwkJCS8qIGppdHRlcmFibGUgcHJldiB2YWx1ZSAgICAgKi8KKwl1bnNpZ25lZCBjaGFyICpkYXRhOwkJCS8qIGluY29taW5nIHBhY2tldCBkYXRhICAgICAgICAgICovCit9OworCisvKgorICogUGVybWl0IGVhc3kgbG9va3VwIG9mIGtleWJvYXJkIGV2ZW50cyB0byBzZW5kLCB2ZXJzdXMKKyAqIHRoZSBiaXRtYXAgd2hpY2ggY29tZXMgZnJvbSB0aGUgdGFibGV0LiBUaGlzIGhpZGVzIHRoZQorICogaXNzdWUgdGhhdCB0aGUgRl9rZXlzIGFyZSBub3Qgc2VxdWVudGlhbGx5IG51bWJlcmVkLgorICovCitzdGF0aWMgaW50IG1hY3JvS2V5RXZlbnRzW10gPSB7CisJS0VZX0VTQywgS0VZX0YxLCBLRVlfRjIsIEtFWV9GMywgS0VZX0Y0LCBLRVlfRjUsCisJS0VZX0Y2LCBLRVlfRjcsIEtFWV9GOCwgS0VZX0Y5LCBLRVlfRjEwLCBLRVlfRjExLAorCUtFWV9GMTIsIEtFWV9GMTMsIEtFWV9GMTQsIEtFWV9GMTUsIEtFWV9GMTYsIEtFWV9GMTcsCisJS0VZX0YxOCwgS0VZX0YxOSwgS0VZX0YyMCwgS0VZX0YyMSwgS0VZX0YyMiwgS0VZX0YyMywKKwlLRVlfRjI0LCBLRVlfU1RPUCwgS0VZX0FHQUlOLCBLRVlfUFJPUFMsIEtFWV9VTkRPLAorCUtFWV9GUk9OVCwgS0VZX0NPUFksIEtFWV9PUEVOLCBLRVlfUEFTVEUsIDAKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmVsYXRpdmUgcmVwb3J0cyBkZWxpdmVyIHZhbHVlcyBpbiAyJ3MgY29tcGxlbWVudCBmb3JtYXQgdG8KKyAqIGRlYWwgd2l0aCBuZWdhdGl2ZSBvZmZzZXRzLgorICovCitzdGF0aWMgaW50IGFpcHRla19jb252ZXJ0X2Zyb21fMnNfY29tcGxlbWVudCh1bnNpZ25lZCBjaGFyIGMpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyIGIgPSBjOworCWludCBuZWdhdGUgPSAwOworCisJaWYgKChiICYgMHg4MCkgIT0gMCkgeworCQliID0gfmI7CisJCWItLTsKKwkJbmVnYXRlID0gMTsKKwl9CisJcmV0ID0gYjsKKwlyZXQgPSAobmVnYXRlID09IDEpID8gLXJldCA6IHJldDsKKwlyZXR1cm4gcmV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGFpcHRla19pcnEgY2FuIHJlY2VpdmUgb25lIG9mIHNpeCBwb3RlbnRpYWwgcmVwb3J0cy4KKyAqIFRoZSBkb2N1bWVudGF0aW9uIGZvciBlYWNoIGlzIGluIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbi4KKyAqCisgKiBUaGUgdGFibGV0IHJlcG9ydHMgb24gc2V2ZXJhbCBhdHRyaWJ1dGVzIHBlciBpbnZvY2F0aW9uIG9mCisgKiBhaXB0ZWtfaXJxLiBCZWNhdXNlIHRoZSBMaW51eCBJbnB1dCBFdmVudCBzeXN0ZW0gYWxsb3dzIHRoZQorICogdHJhbnNtaXNzaW9uIG9mIE9ORSBhdHRyaWJ1dGUgcGVyIGlucHV0X3JlcG9ydF94eHgoKSBjYWxsLAorICogY29sbGF0aW9uIGhhcyB0byBiZSBkb25lIG9uIHRoZSBvdGhlciBlbmQgdG8gcmVjb25zdGl0dXRlCisgKiBhIGNvbXBsZXRlIHRhYmxldCByZXBvcnQuIEZ1cnRoZXIsIHRoZSBudW1iZXIgb2YgSW5wdXQgRXZlbnQgcmVwb3J0cworICogc3VibWl0dGVkIHZhcmllcywgZGVwZW5kaW5nIG9uIHdoYXQgVVNCIHJlcG9ydCB0eXBlLCBhbmQgY2lyY3Vtc3RhbmNlLgorICogVG8gZGVhbCB3aXRoIHRoaXMsIEVWX01TQyBpcyB1c2VkIHRvIGluZGljYXRlIGFuICdlbmQtb2YtcmVwb3J0JworICogbWVzc2FnZS4gVGhpcyBoYXMgYmVlbiBhbiB1bmRvY3VtZW50ZWQgY29udmVudGlvbiB1bmRlcnN0b29kIGJ5IHRoZSBrZXJuZWwKKyAqIHRhYmxldCBkcml2ZXIgYW5kIGNsaWVudHMgc3VjaCBhcyBncG0gYW5kIFhGcmVlODYncyB0YWJsZXQgZHJpdmVycy4KKyAqCisgKiBPZiB0aGUgaW5mb3JtYXRpb24gcmVjZWl2ZWQgZnJvbSB0aGUgdGFibGV0LCB0aGUgb25lIHBpZWNlIEkKKyAqIGNhbm5vdCB0cmFuc21pdCBpcyB0aGUgcHJveGltaXR5IGJpdCAod2l0aG91dCByZXNvcnRpbmcgdG8gYW4gRVZfTVNDCisgKiBjb252ZW50aW9uIGFib3ZlLikgSSB0aGVyZWZvcmUgaGF2ZSB0YWtlbiBvdmVyIFJFTF9NSVNDIGFuZCBBQlNfTUlTQworICogKGZvciByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgcmVwb3J0cywgcmVzcGVjdGl2ZWx5KSBmb3IgY29tbXVuaWNhdGluZworICogUHJveGltaXR5LiBXaHkgdHdvIGV2ZW50cz8gSSB0aG91Z2h0IGl0IGludGVyZXN0aW5nIHRvIGtub3cgaWYgdGhlCisgKiBQcm94aW1pdHkgZXZlbnQgb2NjdXJlZCB3aGlsZSB0aGUgdGFibGV0IHdhcyBpbiBhYnNvbHV0ZSBvciByZWxhdGl2ZQorICogbW9kZS4KKyAqCisgKiBPdGhlciB0YWJsZXRzIHVzZSB0aGUgbm90aW9uIG9mIGEgY2VydGFpbiBtaW5pbXVtIHN0eWx1cyBwcmVzc3VyZQorICogdG8gaW5mZXIgcHJveGltaXR5LiBXaGlsZSB0aGF0IGNvdWxkIGhhdmUgYmVlbiBkb25lLCB0aGF0IGlzIHlldAorICogYW5vdGhlciAnYnkgY29udmVudGlvbicgYmVoYXZpb3IsIHRoZSBkb2N1bWVudGF0aW9uIGZvciB3aGljaAorICogd291bGQgYmUgc3ByZWFkIGJldHdlZW4gdHdvIChvciBtb3JlKSBwaWVjZXMgb2Ygc29mdHdhcmUuCisgKgorICogRVZfTVNDIHVzYWdlIHdhcyB0ZXJtaW5hdGVkIGZvciB0aGlzIHB1cnBvc2UgaW4gTGludXggMi41LngsIGFuZAorICogcmVwbGFjZWQgd2l0aCB0aGUgaW5wdXRfc3luYygpIG1ldGhvZCAod2hpY2ggZW1pdHMgRVZfU1lOLikKKyAqLworCitzdGF0aWMgdm9pZCBhaXB0ZWtfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSBhaXB0ZWstPmRhdGE7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXYgPSAmYWlwdGVrLT5pbnB1dGRldjsKKwlpbnQgaml0dGVyYWJsZSA9IDA7CisJaW50IHJldHZhbCwgbWFjcm8sIHgsIHksIHosIGxlZnQsIHJpZ2h0LCBtaWRkbGUsIHAsIGR2LCB0aXAsIGJzLCBwY2s7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBTdWNjZXNzICovCisJCWJyZWFrOworCisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiBUaGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwKKwkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIFNlZSBpZiB3ZSBhcmUgaW4gYSBkZWxheSBsb29wIC0tIHRocm93IG91dCByZXBvcnQgaWYgdHJ1ZS4KKwkgKi8KKwlpZiAoYWlwdGVrLT5pbkRlbGF5ID09IDEgJiYgdGltZV9hZnRlcihhaXB0ZWstPmVuZERlbGF5LCBqaWZmaWVzKSkgeworCQlnb3RvIGV4aXQ7CisJfQorCisJYWlwdGVrLT5pbkRlbGF5ID0gMDsKKwlhaXB0ZWstPmV2ZW50Q291bnQrKzsKKworCS8qIFJlcG9ydCAxIGRlbGl2ZXJzIHJlbGF0aXZlIGNvb3JkaW5hdGVzIHdpdGggZWl0aGVyIGEgc3R5bHVzCisJICogb3IgdGhlIG1vdXNlLiBZb3UgZG8gbm90IGtub3csIGhvd2V2ZXIsIHdoaWNoIGlucHV0CisJICogdG9vbCBnZW5lcmF0ZWQgdGhlIGV2ZW50LgorCSAqLworCWlmIChkYXRhWzBdID09IDEpIHsKKwkJaWYgKGFpcHRlay0+Y3VyU2V0dGluZy5jb29yZGluYXRlTW9kZSA9PQorCQkgICAgQUlQVEVLX0NPT1JESU5BVEVfQUJTT0xVVEVfTU9ERSkgeworCQkJYWlwdGVrLT5kaWFnbm9zdGljID0KKwkJCSAgICBBSVBURUtfRElBR05PU1RJQ19TRU5ESU5HX1JFTEFUSVZFX0lOX0FCU09MVVRFOworCQl9IGVsc2UgeworCQkJaW5wdXRfcmVncyhpbnB1dGRldiwgcmVncyk7CisKKwkJCXggPSBhaXB0ZWtfY29udmVydF9mcm9tXzJzX2NvbXBsZW1lbnQoZGF0YVsyXSk7CisJCQl5ID0gYWlwdGVrX2NvbnZlcnRfZnJvbV8yc19jb21wbGVtZW50KGRhdGFbM10pOworCisJCQkvKiBqaXR0ZXJhYmxlIGtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgYW55IGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgorCQkJICogV2UncmUgYWxzbyB1c2luZyBpdCB0byByZW1hcCB0aGUgcGh5c2ljYWwgbW91c2UgYnV0dG9uIG1hc2sKKwkJCSAqIHRvIHBzZXVkby1zZXR0aW5ncy4gKFdlIGRvbid0IHNwZWNpZmljYWxseSBjYXJlIGFib3V0IGl0J3MKKwkJCSAqIHZhbHVlIGFmdGVyIG1vdmluZy90cmFuc3Bvc2luZyBtb3VzZSBidXR0b24gYml0bWFza3MsIGV4Y2VwdAorCQkJICogdGhhdCBhIG5vbi16ZXJvIHZhbHVlIGluZGljYXRlcyB0aGF0IG9uZSBvciBtb3JlCisJCQkgKiBtb3VzZSBidXR0b24gd2FzIHByZXNzZWQuKQorCQkJICovCisJCQlqaXR0ZXJhYmxlID0gZGF0YVs1XSAmIDB4MDc7CisKKwkJCWxlZnQgPSAoZGF0YVs1XSAmIGFpcHRlay0+Y3VyU2V0dGluZy5tb3VzZUJ1dHRvbkxlZnQpICE9IDAgPyAxIDogMDsKKwkJCXJpZ2h0ID0gKGRhdGFbNV0gJiBhaXB0ZWstPmN1clNldHRpbmcubW91c2VCdXR0b25SaWdodCkgIT0gMCA/IDEgOiAwOworCQkJbWlkZGxlID0gKGRhdGFbNV0gJiBhaXB0ZWstPmN1clNldHRpbmcubW91c2VCdXR0b25NaWRkbGUpICE9IDAgPyAxIDogMDsKKworCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwgQlROX0xFRlQsIGxlZnQpOworCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwgQlROX01JRERMRSwgbWlkZGxlKTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsIEJUTl9SSUdIVCwgcmlnaHQpOworCQkJaW5wdXRfcmVwb3J0X3JlbChpbnB1dGRldiwgUkVMX1gsIHgpOworCQkJaW5wdXRfcmVwb3J0X3JlbChpbnB1dGRldiwgUkVMX1ksIHkpOworCQkJaW5wdXRfcmVwb3J0X3JlbChpbnB1dGRldiwgUkVMX01JU0MsIDEgfCBBSVBURUtfUkVQT1JUX1RPT0xfVU5LTk9XTik7CisKKwkJCS8qIFdoZWVsIHN1cHBvcnQgaXMgaW4gdGhlIGZvcm0gb2YgYSBzaW5nbGUtZXZlbnQKKwkJCSAqIGZpcmluZy4KKwkJCSAqLworCQkJaWYgKGFpcHRlay0+Y3VyU2V0dGluZy53aGVlbCAhPSBBSVBURUtfV0hFRUxfRElTQUJMRSkgeworCQkJCWlucHV0X3JlcG9ydF9yZWwoaW5wdXRkZXYsIFJFTF9XSEVFTCwKKwkJCQkJCSBhaXB0ZWstPmN1clNldHRpbmcud2hlZWwpOworCQkJCWFpcHRlay0+Y3VyU2V0dGluZy53aGVlbCA9IEFJUFRFS19XSEVFTF9ESVNBQkxFOworCQkJfQorCQkJaW5wdXRfc3luYyhpbnB1dGRldik7CisJCX0KKwl9CisJLyogUmVwb3J0IDIgaXMgZGVsaXZlcmVkIG9ubHkgYnkgdGhlIHN0eWx1cywgYW5kIGRlbGl2ZXJzCisJICogYWJzb2x1dGUgY29vcmRpbmF0ZXMuCisJICovCisJZWxzZSBpZiAoZGF0YVswXSA9PSAyKSB7CisJCWlmIChhaXB0ZWstPmN1clNldHRpbmcuY29vcmRpbmF0ZU1vZGUgPT0gQUlQVEVLX0NPT1JESU5BVEVfUkVMQVRJVkVfTU9ERSkgeworCQkJYWlwdGVrLT5kaWFnbm9zdGljID0gQUlQVEVLX0RJQUdOT1NUSUNfU0VORElOR19BQlNPTFVURV9JTl9SRUxBVElWRTsKKwkJfSBlbHNlIGlmICghQUlQVEVLX1BPSU5URVJfQUxMT1dfU1RZTFVTX01PREUKKwkJCSAgICAoYWlwdGVrLT5jdXJTZXR0aW5nLnBvaW50ZXJNb2RlKSkgeworCQkJCWFpcHRlay0+ZGlhZ25vc3RpYyA9IEFJUFRFS19ESUFHTk9TVElDX1RPT0xfRElTQUxMT1dFRDsKKwkJfSBlbHNlIHsKKwkJCWlucHV0X3JlZ3MoaW5wdXRkZXYsIHJlZ3MpOworCisJCQl4ID0gbGUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTE2ICopIChkYXRhICsgMSkpKTsKKwkJCXkgPSBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMTYgKikgKGRhdGEgKyAzKSkpOworCQkJeiA9IGxlMTZfdG9fY3B1KGdldF91bmFsaWduZWQoKF9fbGUxNiAqKSAoZGF0YSArIDYpKSk7CisKKwkJCXAgPSAoZGF0YVs1XSAmIDB4MDEpICE9IDAgPyAxIDogMDsKKwkJCWR2ID0gKGRhdGFbNV0gJiAweDAyKSAhPSAwID8gMSA6IDA7CisJCQl0aXAgPSAoZGF0YVs1XSAmIDB4MDQpICE9IDAgPyAxIDogMDsKKworCQkJLyogVXNlIGppdHRlcmFibGUgdG8gcmUtYXJyYW5nZSBidXR0b24gbWFza3MKKwkJCSAqLworCQkJaml0dGVyYWJsZSA9IGRhdGFbNV0gJiAweDE4OworCisJCQlicyA9IChkYXRhWzVdICYgYWlwdGVrLT5jdXJTZXR0aW5nLnN0eWx1c0J1dHRvbkxvd2VyKSAhPSAwID8gMSA6IDA7CisJCQlwY2sgPSAoZGF0YVs1XSAmIGFpcHRlay0+Y3VyU2V0dGluZy5zdHlsdXNCdXR0b25VcHBlcikgIT0gMCA/IDEgOiAwOworCisJCQkvKiBkdiBpbmRpY2F0ZXMgJ2RhdGEgdmFsaWQnIChlLmcuLCB0aGUgdGFibGV0IGlzIGluIHN5bmMKKwkJCSAqIGFuZCBoYXMgZGVsaXZlcmVkIGEgImNvcnJlY3QiIHJlcG9ydCkgV2Ugd2lsbCBpZ25vcmUKKwkJCSAqIGFsbCAnYmFkJyByZXBvcnRzLi4uCisJCQkgKi8KKwkJCWlmIChkdiAhPSAwKSB7CisJCQkJLyogSWYgd2UndmUgbm90IGFscmVhZHkgc2VudCBhIHRvb2xfYnV0dG9uXz8/IGNvZGUsIGRvCisJCQkJICogc28gbm93LiBUaGVuIHNldCBGSVJFRF9CSVQgc28gaXQgd29uJ3QgYmUgcmVzZW50IHVubGVzcworCQkJCSAqIHRoZSB1c2VyIGZvcmNlcyBGSVJFRF9CSVQgb2ZmLgorCQkJCSAqLworCQkJCWlmIChUT09MX0JVVFRPTl9GSVJFRAorCQkJCSAgICAoYWlwdGVrLT5jdXJTZXR0aW5nLnRvb2xNb2RlKSA9PSAwKSB7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsCisJCQkJCQkJIFRPT0xfQlVUVE9OKGFpcHRlay0+Y3VyU2V0dGluZy50b29sTW9kZSksCisJCQkJCQkJIDEpOworCQkJCQlhaXB0ZWstPmN1clNldHRpbmcudG9vbE1vZGUgfD0gVE9PTF9CVVRUT05fRklSRURfQklUOworCQkJCX0KKworCQkJCWlmIChwICE9IDApIHsKKwkJCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dGRldiwgQUJTX1gsIHgpOworCQkJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0ZGV2LCBBQlNfWSwgeSk7CisJCQkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRkZXYsIEFCU19QUkVTU1VSRSwgeik7CisKKwkJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwgQlROX1RPVUNILCB0aXApOworCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBCVE5fU1RZTFVTLCBicyk7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsIEJUTl9TVFlMVVMyLCBwY2spOworCisJCQkJCWlmIChhaXB0ZWstPmN1clNldHRpbmcueFRpbHQgIT0KKwkJCQkJICAgIEFJUFRFS19USUxUX0RJU0FCTEUpIHsKKwkJCQkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRkZXYsCisJCQkJCQkJCSBBQlNfVElMVF9YLAorCQkJCQkJCQkgYWlwdGVrLT5jdXJTZXR0aW5nLnhUaWx0KTsKKwkJCQkJfQorCQkJCQlpZiAoYWlwdGVrLT5jdXJTZXR0aW5nLnlUaWx0ICE9IEFJUFRFS19USUxUX0RJU0FCTEUpIHsKKwkJCQkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRkZXYsCisJCQkJCQkJCSBBQlNfVElMVF9ZLAorCQkJCQkJCQkgYWlwdGVrLT5jdXJTZXR0aW5nLnlUaWx0KTsKKwkJCQkJfQorCisJCQkJCS8qIFdoZWVsIHN1cHBvcnQgaXMgaW4gdGhlIGZvcm0gb2YgYSBzaW5nbGUtZXZlbnQKKwkJCQkJICogZmlyaW5nLgorCQkJCQkgKi8KKwkJCQkJaWYgKGFpcHRlay0+Y3VyU2V0dGluZy53aGVlbCAhPQorCQkJCQkgICAgQUlQVEVLX1dIRUVMX0RJU0FCTEUpIHsKKwkJCQkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRkZXYsCisJCQkJCQkJCSBBQlNfV0hFRUwsCisJCQkJCQkJCSBhaXB0ZWstPmN1clNldHRpbmcud2hlZWwpOworCQkJCQkJYWlwdGVrLT5jdXJTZXR0aW5nLndoZWVsID0gQUlQVEVLX1dIRUVMX0RJU0FCTEU7CisJCQkJCX0KKwkJCQl9CisJCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dGRldiwgQUJTX01JU0MsIHAgfCBBSVBURUtfUkVQT1JUX1RPT0xfU1RZTFVTKTsKKwkJCQlpbnB1dF9zeW5jKGlucHV0ZGV2KTsKKwkJCX0KKwkJfQorCX0KKwkvKiBSZXBvcnQgMydzIGNvbWUgZnJvbSB0aGUgbW91c2UgaW4gYWJzb2x1dGUgbW9kZS4KKwkgKi8KKwllbHNlIGlmIChkYXRhWzBdID09IDMpIHsKKwkJaWYgKGFpcHRlay0+Y3VyU2V0dGluZy5jb29yZGluYXRlTW9kZSA9PSBBSVBURUtfQ09PUkRJTkFURV9SRUxBVElWRV9NT0RFKSB7CisJCQlhaXB0ZWstPmRpYWdub3N0aWMgPSBBSVBURUtfRElBR05PU1RJQ19TRU5ESU5HX0FCU09MVVRFX0lOX1JFTEFUSVZFOworCQl9IGVsc2UgaWYgKCFBSVBURUtfUE9JTlRFUl9BTExPV19NT1VTRV9NT0RFCisJCQkoYWlwdGVrLT5jdXJTZXR0aW5nLnBvaW50ZXJNb2RlKSkgeworCQkJYWlwdGVrLT5kaWFnbm9zdGljID0gQUlQVEVLX0RJQUdOT1NUSUNfVE9PTF9ESVNBTExPV0VEOworCQl9IGVsc2UgeworCQkJaW5wdXRfcmVncyhpbnB1dGRldiwgcmVncyk7CisJCQl4ID0gbGUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTE2ICopIChkYXRhICsgMSkpKTsKKwkJCXkgPSBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMTYgKikgKGRhdGEgKyAzKSkpOworCisJCQlqaXR0ZXJhYmxlID0gZGF0YVs1XSAmIDB4MWM7CisKKwkJCXAgPSAoZGF0YVs1XSAmIDB4MDEpICE9IDAgPyAxIDogMDsKKwkJCWR2ID0gKGRhdGFbNV0gJiAweDAyKSAhPSAwID8gMSA6IDA7CisJCQlsZWZ0ID0gKGRhdGFbNV0gJiBhaXB0ZWstPmN1clNldHRpbmcubW91c2VCdXR0b25MZWZ0KSAhPSAwID8gMSA6IDA7CisJCQlyaWdodCA9IChkYXRhWzVdICYgYWlwdGVrLT5jdXJTZXR0aW5nLm1vdXNlQnV0dG9uUmlnaHQpICE9IDAgPyAxIDogMDsKKwkJCW1pZGRsZSA9IChkYXRhWzVdICYgYWlwdGVrLT5jdXJTZXR0aW5nLm1vdXNlQnV0dG9uTWlkZGxlKSAhPSAwID8gMSA6IDA7CisKKwkJCWlmIChkdiAhPSAwKSB7CisJCQkJLyogSWYgd2UndmUgbm90IGFscmVhZHkgc2VudCBhIHRvb2xfYnV0dG9uXz8/IGNvZGUsIGRvCisJCQkJICogc28gbm93LiBUaGVuIHNldCBGSVJFRF9CSVQgc28gaXQgd29uJ3QgYmUgcmVzZW50IHVubGVzcworCQkJCSAqIHRoZSB1c2VyIGZvcmNlcyBGSVJFRF9CSVQgb2ZmLgorCQkJCSAqLworCQkJCWlmIChUT09MX0JVVFRPTl9GSVJFRAorCQkJCSAgICAoYWlwdGVrLT5jdXJTZXR0aW5nLnRvb2xNb2RlKSA9PSAwKSB7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsCisJCQkJCQkJIFRPT0xfQlVUVE9OKGFpcHRlay0+Y3VyU2V0dGluZy50b29sTW9kZSksCisJCQkJCQkJIDEpOworCQkJCQlhaXB0ZWstPmN1clNldHRpbmcudG9vbE1vZGUgfD0gVE9PTF9CVVRUT05fRklSRURfQklUOworCQkJCX0KKworCQkJCWlmIChwICE9IDApIHsKKwkJCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dGRldiwgQUJTX1gsIHgpOworCQkJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0ZGV2LCBBQlNfWSwgeSk7CisKKwkJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwgQlROX0xFRlQsIGxlZnQpOworCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBCVE5fTUlERExFLCBtaWRkbGUpOworCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBCVE5fUklHSFQsIHJpZ2h0KTsKKworCQkJCQkvKiBXaGVlbCBzdXBwb3J0IGlzIGluIHRoZSBmb3JtIG9mIGEgc2luZ2xlLWV2ZW50CisJCQkJCSAqIGZpcmluZy4KKwkJCQkJICovCisJCQkJCWlmIChhaXB0ZWstPmN1clNldHRpbmcud2hlZWwgIT0gQUlQVEVLX1dIRUVMX0RJU0FCTEUpIHsKKwkJCQkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRkZXYsCisJCQkJCQkJCSBBQlNfV0hFRUwsCisJCQkJCQkJCSBhaXB0ZWstPmN1clNldHRpbmcud2hlZWwpOworCQkJCQkJYWlwdGVrLT5jdXJTZXR0aW5nLndoZWVsID0gQUlQVEVLX1dIRUVMX0RJU0FCTEU7CisJCQkJCX0KKwkJCQl9CisJCQkJaW5wdXRfcmVwb3J0X3JlbChpbnB1dGRldiwgUkVMX01JU0MsIHAgfCBBSVBURUtfUkVQT1JUX1RPT0xfTU9VU0UpOworCQkJCWlucHV0X3N5bmMoaW5wdXRkZXYpOworCQkJfQorCQl9CisJfQorCS8qIFJlcG9ydCA0cyBjb21lIGZyb20gdGhlIG1hY3JvIGtleXMgd2hlbiBwcmVzc2VkIGJ5IHN0eWx1cworCSAqLworCWVsc2UgaWYgKGRhdGFbMF0gPT0gNCkgeworCQlqaXR0ZXJhYmxlID0gZGF0YVsxXSAmIDB4MTg7CisKKwkJcCA9IChkYXRhWzFdICYgMHgwMSkgIT0gMCA/IDEgOiAwOworCQlkdiA9IChkYXRhWzFdICYgMHgwMikgIT0gMCA/IDEgOiAwOworCQl0aXAgPSAoZGF0YVsxXSAmIDB4MDQpICE9IDAgPyAxIDogMDsKKwkJYnMgPSAoZGF0YVsxXSAmIGFpcHRlay0+Y3VyU2V0dGluZy5zdHlsdXNCdXR0b25Mb3dlcikgIT0gMCA/IDEgOiAwOworCQlwY2sgPSAoZGF0YVsxXSAmIGFpcHRlay0+Y3VyU2V0dGluZy5zdHlsdXNCdXR0b25VcHBlcikgIT0gMCA/IDEgOiAwOworCisJCW1hY3JvID0gZGF0YVszXTsKKwkJeiA9IGxlMTZfdG9fY3B1KGdldF91bmFsaWduZWQoKF9fbGUxNiAqKSAoZGF0YSArIDQpKSk7CisKKwkJaWYgKGR2ICE9IDApIHsKKwkJCWlucHV0X3JlZ3MoaW5wdXRkZXYsIHJlZ3MpOworCisJCQkvKiBJZiB3ZSd2ZSBub3QgYWxyZWFkeSBzZW50IGEgdG9vbF9idXR0b25fPz8gY29kZSwgZG8KKwkJCSAqIHNvIG5vdy4gVGhlbiBzZXQgRklSRURfQklUIHNvIGl0IHdvbid0IGJlIHJlc2VudCB1bmxlc3MKKwkJCSAqIHRoZSB1c2VyIGZvcmNlcyBGSVJFRF9CSVQgb2ZmLgorCQkJICovCisJCQlpZiAoVE9PTF9CVVRUT05fRklSRUQoYWlwdGVrLT5jdXJTZXR0aW5nLnRvb2xNb2RlKSA9PSAwKSB7CisJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwKKwkJCQkJCSBUT09MX0JVVFRPTihhaXB0ZWstPmN1clNldHRpbmcudG9vbE1vZGUpLAorCQkJCQkJIDEpOworCQkJCWFpcHRlay0+Y3VyU2V0dGluZy50b29sTW9kZSB8PSBUT09MX0JVVFRPTl9GSVJFRF9CSVQ7CisJCQl9CisKKwkJCWlmIChwICE9IDApIHsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBCVE5fVE9VQ0gsIHRpcCk7CisJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwgQlROX1NUWUxVUywgYnMpOworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsIEJUTl9TVFlMVVMyLCBwY2spOworCQkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRkZXYsIEFCU19QUkVTU1VSRSwgeik7CisJCQl9CisKKwkJCS8qIEZvciBzYWZldHksIHdlJ3JlIHNlbmRpbmcga2V5ICdicmVhaycgY29kZXMgZm9yIHRoZQorCQkJICogbmVpZ2hib3JpbmcgbWFjcm8ga2V5cy4KKwkJCSAqLworCQkJaWYgKG1hY3JvID4gMCkgeworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsCisJCQkJCQkgbWFjcm9LZXlFdmVudHNbbWFjcm8gLSAxXSwgMCk7CisJCQl9CisJCQlpZiAobWFjcm8gPCAyNSkgeworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsCisJCQkJCQkgbWFjcm9LZXlFdmVudHNbbWFjcm8gKyAxXSwgMCk7CisJCQl9CisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBtYWNyb0tleUV2ZW50c1ttYWNyb10sIHApOworCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dGRldiwgQUJTX01JU0MsCisJCQkJCSBwIHwgQUlQVEVLX1JFUE9SVF9UT09MX1NUWUxVUyk7CisJCQlpbnB1dF9zeW5jKGlucHV0ZGV2KTsKKwkJfQorCX0KKwkvKiBSZXBvcnQgNXMgY29tZSBmcm9tIHRoZSBtYWNybyBrZXlzIHdoZW4gcHJlc3NlZCBieSBtb3VzZQorCSAqLworCWVsc2UgaWYgKGRhdGFbMF0gPT0gNSkgeworCQlqaXR0ZXJhYmxlID0gZGF0YVsxXSAmIDB4MWM7CisKKwkJcCA9IChkYXRhWzFdICYgMHgwMSkgIT0gMCA/IDEgOiAwOworCQlkdiA9IChkYXRhWzFdICYgMHgwMikgIT0gMCA/IDEgOiAwOworCQlsZWZ0ID0gKGRhdGFbMV0mIGFpcHRlay0+Y3VyU2V0dGluZy5tb3VzZUJ1dHRvbkxlZnQpICE9IDAgPyAxIDogMDsKKwkJcmlnaHQgPSAoZGF0YVsxXSAmIGFpcHRlay0+Y3VyU2V0dGluZy5tb3VzZUJ1dHRvblJpZ2h0KSAhPSAwID8gMSA6IDA7CisJCW1pZGRsZSA9IChkYXRhWzFdICYgYWlwdGVrLT5jdXJTZXR0aW5nLm1vdXNlQnV0dG9uTWlkZGxlKSAhPSAwID8gMSA6IDA7CisJCW1hY3JvID0gZGF0YVszXTsKKworCQlpZiAoZHYgIT0gMCkgeworCQkJaW5wdXRfcmVncyhpbnB1dGRldiwgcmVncyk7CisKKwkJCS8qIElmIHdlJ3ZlIG5vdCBhbHJlYWR5IHNlbnQgYSB0b29sX2J1dHRvbl8/PyBjb2RlLCBkbworCQkJICogc28gbm93LiBUaGVuIHNldCBGSVJFRF9CSVQgc28gaXQgd29uJ3QgYmUgcmVzZW50IHVubGVzcworCQkJICogdGhlIHVzZXIgZm9yY2VzIEZJUkVEX0JJVCBvZmYuCisJCQkgKi8KKwkJCWlmIChUT09MX0JVVFRPTl9GSVJFRChhaXB0ZWstPmN1clNldHRpbmcudG9vbE1vZGUpID09IDApIHsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LAorCQkJCQkJIFRPT0xfQlVUVE9OKGFpcHRlay0+Y3VyU2V0dGluZy50b29sTW9kZSksCisJCQkJCQkgMSk7CisJCQkJYWlwdGVrLT5jdXJTZXR0aW5nLnRvb2xNb2RlIHw9IFRPT0xfQlVUVE9OX0ZJUkVEX0JJVDsKKwkJCX0KKworCQkJaWYgKHAgIT0gMCkgeworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsIEJUTl9MRUZULCBsZWZ0KTsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBCVE5fTUlERExFLCBtaWRkbGUpOworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsIEJUTl9SSUdIVCwgcmlnaHQpOworCQkJfQorCisJCQkvKiBGb3Igc2FmZXR5LCB3ZSdyZSBzZW5kaW5nIGtleSAnYnJlYWsnIGNvZGVzIGZvciB0aGUKKwkJCSAqIG5laWdoYm9yaW5nIG1hY3JvIGtleXMuCisJCQkgKi8KKwkJCWlmIChtYWNybyA+IDApIHsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LAorCQkJCQkJIG1hY3JvS2V5RXZlbnRzW21hY3JvIC0gMV0sIDApOworCQkJfQorCQkJaWYgKG1hY3JvIDwgMjUpIHsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LAorCQkJCQkJIG1hY3JvS2V5RXZlbnRzW21hY3JvICsgMV0sIDApOworCQkJfQorCisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBtYWNyb0tleUV2ZW50c1ttYWNyb10sIDEpOworCQkJaW5wdXRfcmVwb3J0X3JlbChpbnB1dGRldiwgQUJTX01JU0MsCisJCQkJCSBwIHwgQUlQVEVLX1JFUE9SVF9UT09MX01PVVNFKTsKKwkJCWlucHV0X3N5bmMoaW5wdXRkZXYpOworCQl9CisJfQorCS8qIFdlIGhhdmUgbm8gaWRlYSB3aGljaCB0b29sIGNhbiBnZW5lcmF0ZSBhIHJlcG9ydCA2LiBUaGVvcmV0aWNhbGx5LAorCSAqIG5laXRoZXIgbmVlZCB0bywgaGF2aW5nIGJlZW4gZ2l2ZW4gcmVwb3J0cyA0ICYgNSBmb3Igc3VjaCB1c2UuCisJICogSG93ZXZlciwgcmVwb3J0IDYgaXMgdGhlICdvZmZpY2lhbC1sb29raW5nJyByZXBvcnQgZm9yIG1hY3JvS2V5czsKKwkgKiByZXBvcnRzIDQgJiA1IHN1cHBvc2l2ZWx5IGFyZSB1c2VkIHRvIHN1cHBvcnQgdW5uYW1lZCwgdW5rbm93bgorCSAqIGhhdCBzd2l0Y2hlcyAod2hpY2gganVzdCBzbyBoYXBwZW4gdG8gYmUgdGhlIG1hY3JvS2V5cy4pCisJICovCisJZWxzZSBpZiAoZGF0YVswXSA9PSA2KSB7CisJCW1hY3JvID0gbGUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTE2ICopIChkYXRhICsgMSkpKTsKKwkJaW5wdXRfcmVncyhpbnB1dGRldiwgcmVncyk7CisKKwkJaWYgKG1hY3JvID4gMCkgeworCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwgbWFjcm9LZXlFdmVudHNbbWFjcm8gLSAxXSwKKwkJCQkJIDApOworCQl9CisJCWlmIChtYWNybyA8IDI1KSB7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBtYWNyb0tleUV2ZW50c1ttYWNybyArIDFdLAorCQkJCQkgMCk7CisJCX0KKworCQkvKiBJZiB3ZSd2ZSBub3QgYWxyZWFkeSBzZW50IGEgdG9vbF9idXR0b25fPz8gY29kZSwgZG8KKwkJICogc28gbm93LiBUaGVuIHNldCBGSVJFRF9CSVQgc28gaXQgd29uJ3QgYmUgcmVzZW50IHVubGVzcworCQkgKiB0aGUgdXNlciBmb3JjZXMgRklSRURfQklUIG9mZi4KKwkJICovCisJCWlmIChUT09MX0JVVFRPTl9GSVJFRChhaXB0ZWstPmN1clNldHRpbmcudG9vbE1vZGUpID09IDApIHsKKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsCisJCQkJCSBUT09MX0JVVFRPTihhaXB0ZWstPmN1clNldHRpbmcuCisJCQkJCQkgICAgIHRvb2xNb2RlKSwgMSk7CisJCQlhaXB0ZWstPmN1clNldHRpbmcudG9vbE1vZGUgfD0gVE9PTF9CVVRUT05fRklSRURfQklUOworCQl9CisKKwkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwgbWFjcm9LZXlFdmVudHNbbWFjcm9dLCAxKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dGRldiwgQUJTX01JU0MsCisJCQkJIDEgfCBBSVBURUtfUkVQT1JUX1RPT0xfVU5LTk9XTik7CisJCWlucHV0X3N5bmMoaW5wdXRkZXYpOworCX0gZWxzZSB7CisJCWRiZygiVW5rbm93biByZXBvcnQgJWQiLCBkYXRhWzBdKTsKKwl9CisKKwkvKiBKaXR0ZXIgbWF5IG9jY3VyIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBhIGJ1dHRvbiBvbiB0aGUgc3RseXVzCisJICogb3IgdGhlIG1vdXNlLiBXaGF0IHdlIGRvIHRvIHByZXZlbnQgdGhhdCBpcyB3YWl0ICd4JyBtaWxsaXNlY29uZHMKKwkgKiBmb2xsb3dpbmcgYSAnaml0dGVyYWJsZScgZXZlbnQsIHdoaWNoIHNob3VsZCBnaXZlIHRoZSBoYW5kIHNvbWUgdGltZQorCSAqIHN0YWJpbGl6ZSBpdHNlbGYuCisJICoKKwkgKiBXZSBqdXN0IGludHJvZHVjZWQgYWlwdGVrLT5wcmV2aW91c0ppdHRlcmFibGUgdG8gY2FycnkgZm9ydGggdGhlCisJICogbm90aW9uIHRoYXQgaml0dGVyIG9jY3VycyB3aGVuIHRoZSBidXR0b24gc3RhdGUgY2hhbmdlcyBmcm9tIG9uIHRvIG9mZjoKKwkgKiBhIHBlcnNvbiBkcmF3aW5nLCBob2xkaW5nIGEgYnV0dG9uIGRvd24gaXMgbm90IHN1YmplY3QgdG8gaml0dGVyaW5nLgorCSAqIFdpdGggdGhhdCBpbiBtaW5kLCBjaGFuZ2luZyBmcm9tIHVwcGVyIGJ1dHRvbiBkZXByZXNzZWQgdG8gbG93ZXIgYnV0dG9uCisJICogV0lMTCB0cmFuc2l0aW9uIHRocm91Z2ggYSBqaXR0ZXIgZGVsYXkuCisJICovCisKKwlpZiAoYWlwdGVrLT5wcmV2aW91c0ppdHRlcmFibGUgIT0gaml0dGVyYWJsZSAmJgorCSAgICBhaXB0ZWstPmN1clNldHRpbmcuaml0dGVyRGVsYXkgIT0gMCAmJiBhaXB0ZWstPmluRGVsYXkgIT0gMSkgeworCQlhaXB0ZWstPmVuZERlbGF5ID0gamlmZmllcyArCisJCSAgICAoKGFpcHRlay0+Y3VyU2V0dGluZy5qaXR0ZXJEZWxheSAqIEhaKSAvIDEwMDApOworCQlhaXB0ZWstPmluRGVsYXkgPSAxOworCX0KKwlhaXB0ZWstPnByZXZpb3VzSml0dGVyYWJsZSA9IGppdHRlcmFibGU7CisKK2V4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0dmFsICE9IDApIHsKKwkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoZXNlIGFyZSB0aGUgVVNCIGlkJ3Mga25vd24gc28gZmFyLiBXZSBkbyBub3QgaWRlbnRpZnkgdGhlbSB0bworICogc3BlY2lmaWMgQWlwdGVrIG1vZGVsIG51bWJlcnMsIGJlY2F1c2UgdGhlcmUgaGFzIGJlZW4gb3ZlcmxhcHMsCisgKiB1c2UsIGFuZCByZXVzZSBvZiBpZCdzIGluIGV4aXN0aW5nIG1vZGVscy4gQ2VydGFpbiBtb2RlbHMgaGF2ZQorICogYmVlbiBrbm93biB0byB1c2UgbW9yZSB0aGFuIG9uZSBJRCwgaW5kaWNhdGl2ZSBwZXJoYXBzIG9mCisgKiBtYW51ZmFjdHVyaW5nIHJldmlzaW9ucy4gSW4gYW55IGV2ZW50LCB3ZSBjb25zaWRlciB0aGVzZSAKKyAqIElEcyB0byBub3QgYmUgbW9kZWwtc3BlY2lmaWMgbm9yIHVuaXF1ZS4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFpcHRla19pZHNbXSA9IHsKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgMHgwMSl9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQUlQVEVLLCAweDEwKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BSVBURUssIDB4MjApfSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgMHgyMSl9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQUlQVEVLLCAweDIyKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BSVBURUssIDB4MjMpfSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgMHgyNCl9LAorCXt9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgYWlwdGVrX2lkcyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogT3BlbiBhbiBpbnN0YW5jZSBvZiB0aGUgdGFibGV0IGRyaXZlci4KKyAqLworc3RhdGljIGludCBhaXB0ZWtfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBpbnB1dGRldi0+cHJpdmF0ZTsKKworCWlmIChhaXB0ZWstPm9wZW5Db3VudCsrID4gMCkgeworCQlyZXR1cm4gMDsKKwl9CisKKwlhaXB0ZWstPnVyYi0+ZGV2ID0gYWlwdGVrLT51c2JkZXY7CisJaWYgKHVzYl9zdWJtaXRfdXJiKGFpcHRlay0+dXJiLCBHRlBfS0VSTkVMKSAhPSAwKSB7CisJCWFpcHRlay0+b3BlbkNvdW50LS07CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENsb3NlIGFuIGluc3RhbmNlIG9mIHRoZSB0YWJsZXQgZHJpdmVyLgorICovCitzdGF0aWMgdm9pZCBhaXB0ZWtfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXYpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gaW5wdXRkZXYtPnByaXZhdGU7CisKKwlpZiAoLS1haXB0ZWstPm9wZW5Db3VudCA9PSAwKSB7CisJCXVzYl9raWxsX3VyYihhaXB0ZWstPnVyYik7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGFpcHRla19zZXRfcmVwb3J0IGFuZCBhaXB0ZWtfZ2V0X3JlcG9ydCgpIGFyZSBib3Jyb3dlZCBmcm9tIExpbnV4IDIuNC54LCAKKyAqIHdoZXJlIHRoZXkgd2VyZSBrbm93biBhcyB1c2Jfc2V0X3JlcG9ydCBhbmQgdXNiX2dldF9yZXBvcnQuCisgKi8KK3N0YXRpYyBpbnQKK2FpcHRla19zZXRfcmVwb3J0KHN0cnVjdCBhaXB0ZWsgKmFpcHRlaywKKwkJICB1bnNpZ25lZCBjaGFyIHJlcG9ydF90eXBlLAorCQkgIHVuc2lnbmVkIGNoYXIgcmVwb3J0X2lkLCB2b2lkICpidWZmZXIsIGludCBzaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2coYWlwdGVrLT51c2JkZXYsCisJCQkgICAgICAgdXNiX3NuZGN0cmxwaXBlKGFpcHRlay0+dXNiZGV2LCAwKSwKKwkJCSAgICAgICBVU0JfUkVRX1NFVF9SRVBPUlQsCisJCQkgICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwKKwkJCSAgICAgICBVU0JfRElSX09VVCwgKHJlcG9ydF90eXBlIDw8IDgpICsgcmVwb3J0X2lkLAorCQkJICAgICAgIGFpcHRlay0+aWZudW0sIGJ1ZmZlciwgc2l6ZSwgNTAwMCk7Cit9CisKK3N0YXRpYyBpbnQKK2FpcHRla19nZXRfcmVwb3J0KHN0cnVjdCBhaXB0ZWsgKmFpcHRlaywKKwkJICB1bnNpZ25lZCBjaGFyIHJlcG9ydF90eXBlLAorCQkgIHVuc2lnbmVkIGNoYXIgcmVwb3J0X2lkLCB2b2lkICpidWZmZXIsIGludCBzaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2coYWlwdGVrLT51c2JkZXYsCisJCQkgICAgICAgdXNiX3JjdmN0cmxwaXBlKGFpcHRlay0+dXNiZGV2LCAwKSwKKwkJCSAgICAgICBVU0JfUkVRX0dFVF9SRVBPUlQsCisJCQkgICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwKKwkJCSAgICAgICBVU0JfRElSX0lOLCAocmVwb3J0X3R5cGUgPDwgOCkgKyByZXBvcnRfaWQsCisJCQkgICAgICAgYWlwdGVrLT5pZm51bSwgYnVmZmVyLCBzaXplLCA1MDAwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTZW5kIGEgY29tbWFuZCB0byB0aGUgdGFibGV0LgorICovCitzdGF0aWMgaW50CithaXB0ZWtfY29tbWFuZChzdHJ1Y3QgYWlwdGVrICphaXB0ZWssIHVuc2lnbmVkIGNoYXIgY29tbWFuZCwgdW5zaWduZWQgY2hhciBkYXRhKQoreworCWNvbnN0IGludCBzaXplb2ZfYnVmID0gMyAqIHNpemVvZih1OCk7CisJaW50IHJldDsKKwl1OCAqYnVmOworCisJYnVmID0ga21hbGxvYyhzaXplb2ZfYnVmLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlidWZbMF0gPSAyOworCWJ1ZlsxXSA9IGNvbW1hbmQ7CisJYnVmWzJdID0gZGF0YTsKKworCWlmICgocmV0ID0KKwkgICAgIGFpcHRla19zZXRfcmVwb3J0KGFpcHRlaywgMywgMiwgYnVmLCBzaXplb2ZfYnVmKSkgIT0gc2l6ZW9mX2J1ZikgeworCQlkYmcoImFpcHRla19wcm9ncmFtOiBmYWlsZWQsIHRyaWVkIHRvIHNlbmQ6IDB4JTAyeCAweCUwMngiLAorCQkgICAgY29tbWFuZCwgZGF0YSk7CisJfQorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJldHJpZXZlIGluZm9ybWF0aW9uIGZyb20gdGhlIHRhYmxldC4gUXVlcnlpbmcgaW5mbyBpcyBkZWZpbmVkIGFzIGZpcnN0CisgKiBzZW5kaW5nIHRoZSB7Y29tbWFuZCxkYXRhfSBzZXF1ZW5jZSBhcyBhIGNvbW1hbmQsIGZvbGxvd2VkIGJ5IGEgd2FpdAorICogKGFrYSwgInByb2dyYW1tYXRpY0RlbGF5IikgYW5kIHRoZW4gYSAicmVhZCIgcmVxdWVzdC4KKyAqLworc3RhdGljIGludAorYWlwdGVrX3F1ZXJ5KHN0cnVjdCBhaXB0ZWsgKmFpcHRlaywgdW5zaWduZWQgY2hhciBjb21tYW5kLCB1bnNpZ25lZCBjaGFyIGRhdGEpCit7CisJY29uc3QgaW50IHNpemVvZl9idWYgPSAzICogc2l6ZW9mKHU4KTsKKwlpbnQgcmV0OworCXU4ICpidWY7CisKKwlidWYgPSBrbWFsbG9jKHNpemVvZl9idWYsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWJ1ZlswXSA9IDI7CisJYnVmWzFdID0gY29tbWFuZDsKKwlidWZbMl0gPSBkYXRhOworCisJaWYgKGFpcHRla19jb21tYW5kKGFpcHRlaywgY29tbWFuZCwgZGF0YSkgIT0gMCkgeworCQlrZnJlZShidWYpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJbXNsZWVwKGFpcHRlay0+Y3VyU2V0dGluZy5wcm9ncmFtbWFibGVEZWxheSk7CisKKwlpZiAoKHJldCA9CisJICAgICBhaXB0ZWtfZ2V0X3JlcG9ydChhaXB0ZWssIDMsIDIsIGJ1Ziwgc2l6ZW9mX2J1ZikpICE9IHNpemVvZl9idWYpIHsKKwkJZGJnKCJhaXB0ZWtfcXVlcnkgZmFpbGVkOiByZXR1cm5lZCAweCUwMnggMHglMDJ4IDB4JTAyeCIsCisJCSAgICBidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdKTsKKwkJcmV0ID0gLUVJTzsKKwl9IGVsc2UgeworCQlyZXQgPSBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMTYgKikgKGJ1ZiArIDEpKSk7CisJfQorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm9ncmFtIHRoZSB0YWJsZXQgaW50byBlaXRoZXIgYWJzb2x1dGUgb3IgcmVsYXRpdmUgbW9kZS4KKyAqIFdlIGFsc28gZ2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSB0YWJsZXQncyBzaXplLgorICovCitzdGF0aWMgaW50IGFpcHRla19wcm9ncmFtX3RhYmxldChzdHJ1Y3QgYWlwdGVrICphaXB0ZWspCit7CisJaW50IHJldDsKKwkvKiBFeGVjdXRlIFJlc29sdXRpb241MDBMUEkgKi8KKwlpZiAoKHJldCA9IGFpcHRla19jb21tYW5kKGFpcHRlaywgMHgxOCwgMHgwNCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFF1ZXJ5IGdldE1vZGVsQ29kZSAqLworCWlmICgocmV0ID0gYWlwdGVrX3F1ZXJ5KGFpcHRlaywgMHgwMiwgMHgwMCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlhaXB0ZWstPmZlYXR1cmVzLm1vZGVsQ29kZSA9IHJldCAmIDB4ZmY7CisKKwkvKiBRdWVyeSBnZXRPRE1Db2RlICovCisJaWYgKChyZXQgPSBhaXB0ZWtfcXVlcnkoYWlwdGVrLCAweDAzLCAweDAwKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWFpcHRlay0+ZmVhdHVyZXMub2RtQ29kZSA9IHJldDsKKworCS8qIFF1ZXJ5IGdldEZpcm13YXJlQ29kZSAqLworCWlmICgocmV0ID0gYWlwdGVrX3F1ZXJ5KGFpcHRlaywgMHgwNCwgMHgwMCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlhaXB0ZWstPmZlYXR1cmVzLmZpcm13YXJlQ29kZSA9IHJldDsKKworCS8qIFF1ZXJ5IGdldFhleHRlbnNpb24gKi8KKwlpZiAoKHJldCA9IGFpcHRla19xdWVyeShhaXB0ZWssIDB4MDEsIDB4MDApKSA8IDApCisJCXJldHVybiByZXQ7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNtaW5bQUJTX1hdID0gMDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21heFtBQlNfWF0gPSByZXQgLSAxOworCisJLyogUXVlcnkgZ2V0WWV4dGVuc2lvbiAqLworCWlmICgocmV0ID0gYWlwdGVrX3F1ZXJ5KGFpcHRlaywgMHgwMSwgMHgwMSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21pbltBQlNfWV0gPSAwOworCWFpcHRlay0+aW5wdXRkZXYuYWJzbWF4W0FCU19ZXSA9IHJldCAtIDE7CisKKwkvKiBRdWVyeSBnZXRQcmVzc3VyZUxldmVscyAqLworCWlmICgocmV0ID0gYWlwdGVrX3F1ZXJ5KGFpcHRlaywgMHgwOCwgMHgwMCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21pbltBQlNfUFJFU1NVUkVdID0gMDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21heFtBQlNfUFJFU1NVUkVdID0gcmV0IC0gMTsKKworCS8qIERlcGVuZGluZyBvbiB3aGV0aGVyIHdlIGFyZSBpbiBhYnNvbHV0ZSBvciByZWxhdGl2ZSBtb2RlLCB3ZSB3aWxsCisJICogZG8gYSBzd2l0Y2hUb1RhYmxldChhYnNvbHV0ZSkgb3Igc3dpdGNoVG9Nb3VzZShyZWxhdGl2ZSkgY29tbWFuZC4KKwkgKi8KKwlpZiAoYWlwdGVrLT5jdXJTZXR0aW5nLmNvb3JkaW5hdGVNb2RlID09CisJICAgIEFJUFRFS19DT09SRElOQVRFX0FCU09MVVRFX01PREUpIHsKKwkJLyogRXhlY3V0ZSBzd2l0Y2hUb1RhYmxldCAqLworCQlpZiAoKHJldCA9IGFpcHRla19jb21tYW5kKGFpcHRlaywgMHgxMCwgMHgwMSkpIDwgMCkgeworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEV4ZWN1dGUgc3dpdGNoVG9Nb3VzZSAqLworCQlpZiAoKHJldCA9IGFpcHRla19jb21tYW5kKGFpcHRlaywgMHgxMCwgMHgwMCkpIDwgMCkgeworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCS8qIEVuYWJsZSB0aGUgbWFjcm8ga2V5cyAqLworCWlmICgocmV0ID0gYWlwdGVrX2NvbW1hbmQoYWlwdGVrLCAweDExLCAweDAyKSkgPCAwKQorCQlyZXR1cm4gcmV0OworI2lmIDAKKwkvKiBFeGVjdXRlIEZpbHRlck9uICovCisJaWYgKChyZXQgPSBhaXB0ZWtfY29tbWFuZChhaXB0ZWssIDB4MTcsIDB4MDApKSA8IDApCisJCXJldHVybiByZXQ7CisjZW5kaWYKKworCS8qIEV4ZWN1dGUgQXV0b0dhaW5PbiAqLworCWlmICgocmV0ID0gYWlwdGVrX2NvbW1hbmQoYWlwdGVrLCAweDEyLCAweGZmKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogUmVzZXQgdGhlIGV2ZW50Q291bnQsIHNvIHdlIHRyYWNrIGV2ZW50cyBmcm9tIGxhc3QgKHJlKXByb2dyYW1taW5nCisJICovCisJYWlwdGVrLT5kaWFnbm9zdGljID0gQUlQVEVLX0RJQUdOT1NUSUNfTkE7CisJYWlwdGVrLT5ldmVudENvdW50ID0gMDsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFN5c2ZzIGZ1bmN0aW9ucy4gU3lzZnMgcHJlZmVycyB0aGF0IGluZGl2aWR1YWxseS10dW5hYmxlIHBhcmFtZXRlcnMKKyAqIGV4aXN0IGluIHRoZWlyIHNlcGFyYXRlIHBzZXVkby1maWxlcy4gU3VtbWFyeSBkYXRhIHRoYXQgaXMgaW1tdXRhYmxlCisgKiBtYXkgZXhpc3QgaW4gYSBzaW5ndWxhciBmaWxlIHNvIGxvbmcgYXMgeW91IGRvbid0IGRlZmluZSBhIHdyaXRlYWJsZQorICogaW50ZXJmYWNlLgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCB0aGUgJ3NpemUnIGZpbGUgLS0gZGlzcGxheSBzdXBwb3J0CisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGFibGV0U2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZHglZFxuIiwKKwkJCWFpcHRlay0+aW5wdXRkZXYuYWJzbWF4W0FCU19YXSArIDEsCisJCQlhaXB0ZWstPmlucHV0ZGV2LmFic21heFtBQlNfWV0gKyAxKTsKK30KKworLyogVGhlc2Ugc3RydWN0cyBkZWZpbmUgdGhlIHN5c2ZzIGZpbGVzLCBwYXJhbSAjMSBpcyB0aGUgbmFtZSBvZiB0aGUKKyAqIGZpbGUsIHBhcmFtIDIgaXMgdGhlIGZpbGUgcGVybWlzc2lvbnMsIHBhcmFtIDMgJiA0IGFyZSB0byB0aGUKKyAqIG91dHB1dCBnZW5lcmF0b3IgYW5kIGlucHV0IHBhcnNlciByb3V0aW5lcy4gQWJzZW5jZSBvZiBhIHJvdXRpbmUgaXMKKyAqIHBlcm1pdHRlZCAtLSBpdCBvbmx5IG1lYW5zIGNhbid0IGVpdGhlciAnY2F0JyB0aGUgZmlsZSwgb3Igc2VuZCBkYXRhCisgKiB0byBpdC4KKyAqLworc3RhdGljIERFVklDRV9BVFRSKHNpemUsIFNfSVJVR08sIHNob3dfdGFibGV0U2l6ZSwgTlVMTCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICdwcm9kdWN0X2lkJyBmaWxlCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGFibGV0UHJvZHVjdElkKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JTA0eFxuIiwKKwkJCWFpcHRlay0+aW5wdXRkZXYuaWQucHJvZHVjdCk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihwcm9kdWN0X2lkLCBTX0lSVUdPLCBzaG93X3RhYmxldFByb2R1Y3RJZCwgTlVMTCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICd2ZW5kb3JfaWQnIGZpbGUKKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190YWJsZXRWZW5kb3JJZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUwNHhcbiIsIGFpcHRlay0+aW5wdXRkZXYuaWQudmVuZG9yKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHZlbmRvcl9pZCwgU19JUlVHTywgc2hvd190YWJsZXRWZW5kb3JJZCwgTlVMTCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICd2ZW5kb3InIGZpbGUKKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190YWJsZXRNYW51ZmFjdHVyZXIoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldHZhbDsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlyZXR2YWwgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBhaXB0ZWstPnVzYmRldi0+bWFudWZhY3R1cmVyKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIodmVuZG9yLCBTX0lSVUdPLCBzaG93X3RhYmxldE1hbnVmYWN0dXJlciwgTlVMTCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICdwcm9kdWN0JyBmaWxlCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGFibGV0UHJvZHVjdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0dmFsOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXJldHZhbCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGFpcHRlay0+dXNiZGV2LT5wcm9kdWN0KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIocHJvZHVjdCwgU19JUlVHTywgc2hvd190YWJsZXRQcm9kdWN0LCBOVUxMKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ3BvaW50ZXJfbW9kZScgZmlsZS4gTm90ZSB0aGF0IHRoaXMgZmlsZQorICogYm90aCBkaXNwbGF5cyBjdXJyZW50IHNldHRpbmcgYW5kIGFsbG93cyByZXByb2dyYW1taW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldFBvaW50ZXJNb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNoYXIgKnM7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJc3dpdGNoIChhaXB0ZWstPmN1clNldHRpbmcucG9pbnRlck1vZGUpIHsKKwljYXNlIEFJUFRFS19QT0lOVEVSX09OTFlfU1RZTFVTX01PREU6CisJCXMgPSAic3R5bHVzIjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19QT0lOVEVSX09OTFlfTU9VU0VfTU9ERToKKwkJcyA9ICJtb3VzZSI7CisJCWJyZWFrOworCisJY2FzZSBBSVBURUtfUE9JTlRFUl9FSVRIRVJfTU9ERToKKwkJcyA9ICJlaXRoZXIiOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXMgPSAidW5rbm93biI7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgcyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV90YWJsZXRQb2ludGVyTW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RyY21wKGJ1ZiwgInN0eWx1cyIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLnBvaW50ZXJNb2RlID0KKwkJICAgIEFJUFRFS19QT0lOVEVSX09OTFlfU1RZTFVTX01PREU7CisJfSBlbHNlIGlmIChzdHJjbXAoYnVmLCAibW91c2UiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy5wb2ludGVyTW9kZSA9IEFJUFRFS19QT0lOVEVSX09OTFlfTU9VU0VfTU9ERTsKKwl9IGVsc2UgaWYgKHN0cmNtcChidWYsICJlaXRoZXIiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy5wb2ludGVyTW9kZSA9IEFJUFRFS19QT0lOVEVSX0VJVEhFUl9NT0RFOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihwb2ludGVyX21vZGUsCisJCSAgIFNfSVJVR08gfCBTX0lXVUdPLAorCQkgICBzaG93X3RhYmxldFBvaW50ZXJNb2RlLCBzdG9yZV90YWJsZXRQb2ludGVyTW9kZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICdjb29yZGluYXRlX21vZGUnIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGZpbGUKKyAqIGJvdGggZGlzcGxheXMgY3VycmVudCBzZXR0aW5nIGFuZCBhbGxvd3MgcmVwcm9ncmFtbWluZy4KKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190YWJsZXRDb29yZGluYXRlTW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwljaGFyICpzOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoYWlwdGVrLT5jdXJTZXR0aW5nLmNvb3JkaW5hdGVNb2RlKSB7CisJY2FzZSBBSVBURUtfQ09PUkRJTkFURV9BQlNPTFVURV9NT0RFOgorCQlzID0gImFic29sdXRlIjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19DT09SRElOQVRFX1JFTEFUSVZFX01PREU6CisJCXMgPSAicmVsYXRpdmUiOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXMgPSAidW5rbm93biI7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgcyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV90YWJsZXRDb29yZGluYXRlTW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RyY21wKGJ1ZiwgImFic29sdXRlIikgPT0gMCkgeworCQlhaXB0ZWstPm5ld1NldHRpbmcucG9pbnRlck1vZGUgPQorCQkgICAgQUlQVEVLX0NPT1JESU5BVEVfQUJTT0xVVEVfTU9ERTsKKwl9IGVsc2UgaWYgKHN0cmNtcChidWYsICJyZWxhdGl2ZSIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLnBvaW50ZXJNb2RlID0KKwkJICAgIEFJUFRFS19DT09SRElOQVRFX1JFTEFUSVZFX01PREU7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGNvb3JkaW5hdGVfbW9kZSwKKwkJICAgU19JUlVHTyB8IFNfSVdVR08sCisJCSAgIHNob3dfdGFibGV0Q29vcmRpbmF0ZU1vZGUsIHN0b3JlX3RhYmxldENvb3JkaW5hdGVNb2RlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ3Rvb2xfbW9kZScgZmlsZS4gTm90ZSB0aGF0IHRoaXMgZmlsZQorICogYm90aCBkaXNwbGF5cyBjdXJyZW50IHNldHRpbmcgYW5kIGFsbG93cyByZXByb2dyYW1taW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldFRvb2xNb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNoYXIgKnM7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJc3dpdGNoIChUT09MX0JVVFRPTihhaXB0ZWstPmN1clNldHRpbmcudG9vbE1vZGUpKSB7CisJY2FzZSBBSVBURUtfVE9PTF9CVVRUT05fTU9VU0VfTU9ERToKKwkJcyA9ICJtb3VzZSI7CisJCWJyZWFrOworCisJY2FzZSBBSVBURUtfVE9PTF9CVVRUT05fRVJBU0VSX01PREU6CisJCXMgPSAiZXJhc2VyIjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19UT09MX0JVVFRPTl9QRU5DSUxfTU9ERToKKwkJcyA9ICJwZW5jaWwiOworCQlicmVhazsKKworCWNhc2UgQUlQVEVLX1RPT0xfQlVUVE9OX1BFTl9NT0RFOgorCQlzID0gInBlbiI7CisJCWJyZWFrOworCisJY2FzZSBBSVBURUtfVE9PTF9CVVRUT05fQlJVU0hfTU9ERToKKwkJcyA9ICJicnVzaCI7CisJCWJyZWFrOworCisJY2FzZSBBSVBURUtfVE9PTF9CVVRUT05fQUlSQlJVU0hfTU9ERToKKwkJcyA9ICJhaXJicnVzaCI7CisJCWJyZWFrOworCisJY2FzZSBBSVBURUtfVE9PTF9CVVRUT05fTEVOU19NT0RFOgorCQlzID0gImxlbnMiOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXMgPSAidW5rbm93biI7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgcyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV90YWJsZXRUb29sTW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RyY21wKGJ1ZiwgIm1vdXNlIikgPT0gMCkgeworCQlhaXB0ZWstPm5ld1NldHRpbmcudG9vbE1vZGUgPSBBSVBURUtfVE9PTF9CVVRUT05fTU9VU0VfTU9ERTsKKwl9IGVsc2UgaWYgKHN0cmNtcChidWYsICJlcmFzZXIiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy50b29sTW9kZSA9IEFJUFRFS19UT09MX0JVVFRPTl9FUkFTRVJfTU9ERTsKKwl9IGVsc2UgaWYgKHN0cmNtcChidWYsICJwZW5jaWwiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy50b29sTW9kZSA9IEFJUFRFS19UT09MX0JVVFRPTl9QRU5DSUxfTU9ERTsKKwl9IGVsc2UgaWYgKHN0cmNtcChidWYsICJwZW4iKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy50b29sTW9kZSA9IEFJUFRFS19UT09MX0JVVFRPTl9QRU5fTU9ERTsKKwl9IGVsc2UgaWYgKHN0cmNtcChidWYsICJicnVzaCIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLnRvb2xNb2RlID0gQUlQVEVLX1RPT0xfQlVUVE9OX0JSVVNIX01PREU7CisJfSBlbHNlIGlmIChzdHJjbXAoYnVmLCAiYWlyYnJ1c2giKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy50b29sTW9kZSA9IEFJUFRFS19UT09MX0JVVFRPTl9BSVJCUlVTSF9NT0RFOworCX0gZWxzZSBpZiAoc3RyY21wKGJ1ZiwgImxlbnMiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy50b29sTW9kZSA9IEFJUFRFS19UT09MX0JVVFRPTl9MRU5TX01PREU7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIodG9vbF9tb2RlLAorCQkgICBTX0lSVUdPIHwgU19JV1VHTywKKwkJICAgc2hvd190YWJsZXRUb29sTW9kZSwgc3RvcmVfdGFibGV0VG9vbE1vZGUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAneHRpbHQnIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGZpbGUKKyAqIGJvdGggZGlzcGxheXMgY3VycmVudCBzZXR0aW5nIGFuZCBhbGxvd3MgcmVwcm9ncmFtbWluZy4KKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190YWJsZXRYdGlsdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoYWlwdGVrLT5jdXJTZXR0aW5nLnhUaWx0ID09IEFJUFRFS19USUxUX0RJU0FCTEUpIHsKKwkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiZGlzYWJsZVxuIik7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCisJCQkJYWlwdGVrLT5jdXJTZXR0aW5nLnhUaWx0KTsKKwl9Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV90YWJsZXRYdGlsdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCB4OworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChzdHJjbXAoYnVmLCAiZGlzYWJsZSIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLnhUaWx0ID0gQUlQVEVLX1RJTFRfRElTQUJMRTsKKwl9IGVsc2UgeworCQl4ID0gKGludClzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCQlpZiAoeCA+PSBBSVBURUtfVElMVF9NSU4gJiYgeCA8PSBBSVBURUtfVElMVF9NQVgpIHsKKwkJCWFpcHRlay0+bmV3U2V0dGluZy54VGlsdCA9IHg7CisJCX0KKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoeHRpbHQsCisJCSAgIFNfSVJVR08gfCBTX0lXVUdPLCBzaG93X3RhYmxldFh0aWx0LCBzdG9yZV90YWJsZXRYdGlsdCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICd5dGlsdCcgZmlsZS4gTm90ZSB0aGF0IHRoaXMgZmlsZQorICogYm90aCBkaXNwbGF5cyBjdXJyZW50IHNldHRpbmcgYW5kIGFsbG93cyByZXByb2dyYW1taW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldFl0aWx0KHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChhaXB0ZWstPmN1clNldHRpbmcueVRpbHQgPT0gQUlQVEVLX1RJTFRfRElTQUJMRSkgeworCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJkaXNhYmxlXG4iKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKKwkJCQlhaXB0ZWstPmN1clNldHRpbmcueVRpbHQpOworCX0KK30KKworc3RhdGljIHNzaXplX3QKK3N0b3JlX3RhYmxldFl0aWx0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHk7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJaWYgKHN0cmNtcChidWYsICJkaXNhYmxlIikgPT0gMCkgeworCQlhaXB0ZWstPm5ld1NldHRpbmcueVRpbHQgPSBBSVBURUtfVElMVF9ESVNBQkxFOworCX0gZWxzZSB7CisJCXkgPSAoaW50KXNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisJCWlmICh5ID49IEFJUFRFS19USUxUX01JTiAmJiB5IDw9IEFJUFRFS19USUxUX01BWCkgeworCQkJYWlwdGVrLT5uZXdTZXR0aW5nLnlUaWx0ID0geTsKKwkJfQorCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUih5dGlsdCwKKwkJICAgU19JUlVHTyB8IFNfSVdVR08sIHNob3dfdGFibGV0WXRpbHQsIHN0b3JlX3RhYmxldFl0aWx0KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ2ppdHRlcicgZmlsZS4gTm90ZSB0aGF0IHRoaXMgZmlsZQorICogYm90aCBkaXNwbGF5cyBjdXJyZW50IHNldHRpbmcgYW5kIGFsbG93cyByZXByb2dyYW1taW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldEppdHRlckRlbGF5KHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBhaXB0ZWstPmN1clNldHRpbmcuaml0dGVyRGVsYXkpOworfQorCitzdGF0aWMgc3NpemVfdAorc3RvcmVfdGFibGV0Sml0dGVyRGVsYXkoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlhaXB0ZWstPm5ld1NldHRpbmcuaml0dGVyRGVsYXkgPSAoaW50KXNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoaml0dGVyLAorCQkgICBTX0lSVUdPIHwgU19JV1VHTywKKwkJICAgc2hvd190YWJsZXRKaXR0ZXJEZWxheSwgc3RvcmVfdGFibGV0Sml0dGVyRGVsYXkpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAnZGVsYXknIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGZpbGUKKyAqIGJvdGggZGlzcGxheXMgY3VycmVudCBzZXR0aW5nIGFuZCBhbGxvd3MgcmVwcm9ncmFtbWluZy4KKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190YWJsZXRQcm9ncmFtbWFibGVEZWxheShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKKwkJCWFpcHRlay0+Y3VyU2V0dGluZy5wcm9ncmFtbWFibGVEZWxheSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV90YWJsZXRQcm9ncmFtbWFibGVEZWxheShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWFpcHRlay0+bmV3U2V0dGluZy5wcm9ncmFtbWFibGVEZWxheSA9IChpbnQpc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihkZWxheSwKKwkJICAgU19JUlVHTyB8IFNfSVdVR08sCisJCSAgIHNob3dfdGFibGV0UHJvZ3JhbW1hYmxlRGVsYXksIHN0b3JlX3RhYmxldFByb2dyYW1tYWJsZURlbGF5KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ2lucHV0X3BhdGgnIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGZpbGUKKyAqIG9ubHkgZGlzcGxheXMgY3VycmVudCBzZXR0aW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldElucHV0RGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIi9kZXYvaW5wdXQvJXNcbiIsCisJCQlhaXB0ZWstPmZlYXR1cmVzLmlucHV0UGF0aCk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihpbnB1dF9wYXRoLCBTX0lSVUdPLCBzaG93X3RhYmxldElucHV0RGV2aWNlLCBOVUxMKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ2V2ZW50X2NvdW50JyBmaWxlLiBOb3RlIHRoYXQgdGhpcyBmaWxlCisgKiBvbmx5IGRpc3BsYXlzIGN1cnJlbnQgc2V0dGluZy4KKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190YWJsZXRFdmVudHNSZWNlaXZlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlbGRcbiIsIGFpcHRlay0+ZXZlbnRDb3VudCk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihldmVudF9jb3VudCwgU19JUlVHTywgc2hvd190YWJsZXRFdmVudHNSZWNlaXZlZCwgTlVMTCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICdkaWFnbm9zdGljJyBmaWxlLiBOb3RlIHRoYXQgdGhpcyBmaWxlCisgKiBvbmx5IGRpc3BsYXlzIGN1cnJlbnQgc2V0dGluZy4KKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190YWJsZXREaWFnbm9zdGljTWVzc2FnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwljaGFyICpyZXRNc2c7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJc3dpdGNoIChhaXB0ZWstPmRpYWdub3N0aWMpIHsKKwljYXNlIEFJUFRFS19ESUFHTk9TVElDX05BOgorCQlyZXRNc2cgPSAibm8gZXJyb3JzXG4iOworCQlicmVhazsKKworCWNhc2UgQUlQVEVLX0RJQUdOT1NUSUNfU0VORElOR19SRUxBVElWRV9JTl9BQlNPTFVURToKKwkJcmV0TXNnID0gIkVycm9yOiByZWNlaXZpbmcgcmVsYXRpdmUgcmVwb3J0c1xuIjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19ESUFHTk9TVElDX1NFTkRJTkdfQUJTT0xVVEVfSU5fUkVMQVRJVkU6CisJCXJldE1zZyA9ICJFcnJvcjogcmVjZWl2aW5nIGFic29sdXRlIHJlcG9ydHNcbiI7CisJCWJyZWFrOworCisJY2FzZSBBSVBURUtfRElBR05PU1RJQ19UT09MX0RJU0FMTE9XRUQ6CisJCWlmIChhaXB0ZWstPmN1clNldHRpbmcucG9pbnRlck1vZGUgPT0KKwkJICAgIEFJUFRFS19QT0lOVEVSX09OTFlfTU9VU0VfTU9ERSkgeworCQkJcmV0TXNnID0gIkVycm9yOiByZWNlaXZpbmcgc3R5bHVzIHJlcG9ydHNcbiI7CisJCX0gZWxzZSB7CisJCQlyZXRNc2cgPSAiRXJyb3I6IHJlY2VpdmluZyBtb3VzZSByZXBvcnRzXG4iOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgcmV0TXNnKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGRpYWdub3N0aWMsIFNfSVJVR08sIHNob3dfdGFibGV0RGlhZ25vc3RpY01lc3NhZ2UsIE5VTEwpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAnc3R5bHVzX3VwcGVyJyBmaWxlLiBOb3RlIHRoYXQgdGhpcyBmaWxlCisgKiBib3RoIGRpc3BsYXlzIGN1cnJlbnQgc2V0dGluZyBhbmQgYWxsb3dzIGZvciBzZXR0aW5nIGNoYW5naW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldFN0eWx1c1VwcGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNoYXIgKnM7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJc3dpdGNoIChhaXB0ZWstPmN1clNldHRpbmcuc3R5bHVzQnV0dG9uVXBwZXIpIHsKKwljYXNlIEFJUFRFS19TVFlMVVNfVVBQRVJfQlVUVE9OOgorCQlzID0gInVwcGVyIjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19TVFlMVVNfTE9XRVJfQlVUVE9OOgorCQlzID0gImxvd2VyIjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlzID0gInVua25vd24iOworCQlicmVhazsKKwl9CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIHMpOworfQorCitzdGF0aWMgc3NpemVfdAorc3RvcmVfdGFibGV0U3R5bHVzVXBwZXIoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RyY21wKGJ1ZiwgInVwcGVyIikgPT0gMCkgeworCQlhaXB0ZWstPm5ld1NldHRpbmcuc3R5bHVzQnV0dG9uVXBwZXIgPQorCQkgICAgQUlQVEVLX1NUWUxVU19VUFBFUl9CVVRUT047CisJfSBlbHNlIGlmIChzdHJjbXAoYnVmLCAibG93ZXIiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy5zdHlsdXNCdXR0b25VcHBlciA9CisJCSAgICBBSVBURUtfU1RZTFVTX0xPV0VSX0JVVFRPTjsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoc3R5bHVzX3VwcGVyLAorCQkgICBTX0lSVUdPIHwgU19JV1VHTywKKwkJICAgc2hvd190YWJsZXRTdHlsdXNVcHBlciwgc3RvcmVfdGFibGV0U3R5bHVzVXBwZXIpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAnc3R5bHVzX2xvd2VyJyBmaWxlLiBOb3RlIHRoYXQgdGhpcyBmaWxlCisgKiBib3RoIGRpc3BsYXlzIGN1cnJlbnQgc2V0dGluZyBhbmQgYWxsb3dzIGZvciBzZXR0aW5nIGNoYW5naW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldFN0eWx1c0xvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNoYXIgKnM7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJc3dpdGNoIChhaXB0ZWstPmN1clNldHRpbmcuc3R5bHVzQnV0dG9uTG93ZXIpIHsKKwljYXNlIEFJUFRFS19TVFlMVVNfVVBQRVJfQlVUVE9OOgorCQlzID0gInVwcGVyIjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19TVFlMVVNfTE9XRVJfQlVUVE9OOgorCQlzID0gImxvd2VyIjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlzID0gInVua25vd24iOworCQlicmVhazsKKwl9CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIHMpOworfQorCitzdGF0aWMgc3NpemVfdAorc3RvcmVfdGFibGV0U3R5bHVzTG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RyY21wKGJ1ZiwgInVwcGVyIikgPT0gMCkgeworCQlhaXB0ZWstPm5ld1NldHRpbmcuc3R5bHVzQnV0dG9uTG93ZXIgPQorCQkgICAgQUlQVEVLX1NUWUxVU19VUFBFUl9CVVRUT047CisJfSBlbHNlIGlmIChzdHJjbXAoYnVmLCAibG93ZXIiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy5zdHlsdXNCdXR0b25Mb3dlciA9CisJCSAgICBBSVBURUtfU1RZTFVTX0xPV0VSX0JVVFRPTjsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoc3R5bHVzX2xvd2VyLAorCQkgICBTX0lSVUdPIHwgU19JV1VHTywKKwkJICAgc2hvd190YWJsZXRTdHlsdXNMb3dlciwgc3RvcmVfdGFibGV0U3R5bHVzTG93ZXIpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAnbW91c2VfbGVmdCcgZmlsZS4gTm90ZSB0aGF0IHRoaXMgZmlsZQorICogYm90aCBkaXNwbGF5cyBjdXJyZW50IHNldHRpbmcgYW5kIGFsbG93cyBmb3Igc2V0dGluZyBjaGFuZ2luZy4KKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190YWJsZXRNb3VzZUxlZnQoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJY2hhciAqczsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGFpcHRlay0+Y3VyU2V0dGluZy5tb3VzZUJ1dHRvbkxlZnQpIHsKKwljYXNlIEFJUFRFS19NT1VTRV9MRUZUX0JVVFRPTjoKKwkJcyA9ICJsZWZ0IjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19NT1VTRV9NSURETEVfQlVUVE9OOgorCQlzID0gIm1pZGRsZSI7CisJCWJyZWFrOworCisJY2FzZSBBSVBURUtfTU9VU0VfUklHSFRfQlVUVE9OOgorCQlzID0gInJpZ2h0IjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlzID0gInVua25vd24iOworCQlicmVhazsKKwl9CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIHMpOworfQorCitzdGF0aWMgc3NpemVfdAorc3RvcmVfdGFibGV0TW91c2VMZWZ0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJaWYgKHN0cmNtcChidWYsICJsZWZ0IikgPT0gMCkgeworCQlhaXB0ZWstPm5ld1NldHRpbmcubW91c2VCdXR0b25MZWZ0ID0gQUlQVEVLX01PVVNFX0xFRlRfQlVUVE9OOworCX0gZWxzZSBpZiAoc3RyY21wKGJ1ZiwgIm1pZGRsZSIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLm1vdXNlQnV0dG9uTGVmdCA9IEFJUFRFS19NT1VTRV9NSURETEVfQlVUVE9OOworCX0gZWxzZSBpZiAoc3RyY21wKGJ1ZiwgInJpZ2h0IikgPT0gMCkgeworCQlhaXB0ZWstPm5ld1NldHRpbmcubW91c2VCdXR0b25MZWZ0ID0gQUlQVEVLX01PVVNFX1JJR0hUX0JVVFRPTjsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIobW91c2VfbGVmdCwKKwkJICAgU19JUlVHTyB8IFNfSVdVR08sCisJCSAgIHNob3dfdGFibGV0TW91c2VMZWZ0LCBzdG9yZV90YWJsZXRNb3VzZUxlZnQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAnbW91c2VfbWlkZGxlJyBmaWxlLiBOb3RlIHRoYXQgdGhpcyBmaWxlCisgKiBib3RoIGRpc3BsYXlzIGN1cnJlbnQgc2V0dGluZyBhbmQgYWxsb3dzIGZvciBzZXR0aW5nIGNoYW5naW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldE1vdXNlTWlkZGxlKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNoYXIgKnM7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJc3dpdGNoIChhaXB0ZWstPmN1clNldHRpbmcubW91c2VCdXR0b25NaWRkbGUpIHsKKwljYXNlIEFJUFRFS19NT1VTRV9MRUZUX0JVVFRPTjoKKwkJcyA9ICJsZWZ0IjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19NT1VTRV9NSURETEVfQlVUVE9OOgorCQlzID0gIm1pZGRsZSI7CisJCWJyZWFrOworCisJY2FzZSBBSVBURUtfTU9VU0VfUklHSFRfQlVUVE9OOgorCQlzID0gInJpZ2h0IjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlzID0gInVua25vd24iOworCQlicmVhazsKKwl9CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIHMpOworfQorCitzdGF0aWMgc3NpemVfdAorc3RvcmVfdGFibGV0TW91c2VNaWRkbGUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RyY21wKGJ1ZiwgImxlZnQiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy5tb3VzZUJ1dHRvbk1pZGRsZSA9IEFJUFRFS19NT1VTRV9MRUZUX0JVVFRPTjsKKwl9IGVsc2UgaWYgKHN0cmNtcChidWYsICJtaWRkbGUiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy5tb3VzZUJ1dHRvbk1pZGRsZSA9CisJCSAgICBBSVBURUtfTU9VU0VfTUlERExFX0JVVFRPTjsKKwl9IGVsc2UgaWYgKHN0cmNtcChidWYsICJyaWdodCIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLm1vdXNlQnV0dG9uTWlkZGxlID0KKwkJICAgIEFJUFRFS19NT1VTRV9SSUdIVF9CVVRUT047CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKG1vdXNlX21pZGRsZSwKKwkJICAgU19JUlVHTyB8IFNfSVdVR08sCisJCSAgIHNob3dfdGFibGV0TW91c2VNaWRkbGUsIHN0b3JlX3RhYmxldE1vdXNlTWlkZGxlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ21vdXNlX3JpZ2h0JyBmaWxlLiBOb3RlIHRoYXQgdGhpcyBmaWxlCisgKiBib3RoIGRpc3BsYXlzIGN1cnJlbnQgc2V0dGluZyBhbmQgYWxsb3dzIGZvciBzZXR0aW5nIGNoYW5naW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldE1vdXNlUmlnaHQoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJY2hhciAqczsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGFpcHRlay0+Y3VyU2V0dGluZy5tb3VzZUJ1dHRvblJpZ2h0KSB7CisJY2FzZSBBSVBURUtfTU9VU0VfTEVGVF9CVVRUT046CisJCXMgPSAibGVmdCI7CisJCWJyZWFrOworCisJY2FzZSBBSVBURUtfTU9VU0VfTUlERExFX0JVVFRPTjoKKwkJcyA9ICJtaWRkbGUiOworCQlicmVhazsKKworCWNhc2UgQUlQVEVLX01PVVNFX1JJR0hUX0JVVFRPTjoKKwkJcyA9ICJyaWdodCI7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcyA9ICJ1bmtub3duIjsKKwkJYnJlYWs7CisJfQorCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBzKTsKK30KKworc3RhdGljIHNzaXplX3QKK3N0b3JlX3RhYmxldE1vdXNlUmlnaHQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RyY21wKGJ1ZiwgImxlZnQiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy5tb3VzZUJ1dHRvblJpZ2h0ID0gQUlQVEVLX01PVVNFX0xFRlRfQlVUVE9OOworCX0gZWxzZSBpZiAoc3RyY21wKGJ1ZiwgIm1pZGRsZSIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLm1vdXNlQnV0dG9uUmlnaHQgPQorCQkgICAgQUlQVEVLX01PVVNFX01JRERMRV9CVVRUT047CisJfSBlbHNlIGlmIChzdHJjbXAoYnVmLCAicmlnaHQiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy5tb3VzZUJ1dHRvblJpZ2h0ID0gQUlQVEVLX01PVVNFX1JJR0hUX0JVVFRPTjsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIobW91c2VfcmlnaHQsCisJCSAgIFNfSVJVR08gfCBTX0lXVUdPLAorCQkgICBzaG93X3RhYmxldE1vdXNlUmlnaHQsIHN0b3JlX3RhYmxldE1vdXNlUmlnaHQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAnd2hlZWwnIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGZpbGUKKyAqIGJvdGggZGlzcGxheXMgY3VycmVudCBzZXR0aW5nIGFuZCBhbGxvd3MgZm9yIHNldHRpbmcgY2hhbmdpbmcuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGFibGV0V2hlZWwoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJaWYgKGFpcHRlay0+Y3VyU2V0dGluZy53aGVlbCA9PSBBSVBURUtfV0hFRUxfRElTQUJMRSkgeworCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJkaXNhYmxlXG4iKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKKwkJCQlhaXB0ZWstPmN1clNldHRpbmcud2hlZWwpOworCX0KK30KKworc3RhdGljIHNzaXplX3QKK3N0b3JlX3RhYmxldFdoZWVsKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJYWlwdGVrLT5uZXdTZXR0aW5nLndoZWVsID0gKGludClzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHdoZWVsLAorCQkgICBTX0lSVUdPIHwgU19JV1VHTywgc2hvd190YWJsZXRXaGVlbCwgc3RvcmVfdGFibGV0V2hlZWwpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAnZXhlY3V0ZScgZmlsZS4gTm90ZSB0aGF0IHRoaXMgZmlsZQorICogYm90aCBkaXNwbGF5cyBjdXJyZW50IHNldHRpbmcgYW5kIGFsbG93cyBmb3Igc2V0dGluZyBjaGFuZ2luZy4KKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190YWJsZXRFeGVjdXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCS8qIFRoZXJlIGlzIG5vdGhpbmcgdXNlZnVsIHRvIGRpc3BsYXksIHNvIGEgb25lLWxpbmUgbWFudWFsCisJICogaXMgaW4gb3JkZXIuLi4KKwkgKi8KKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsCisJCQkiV3JpdGUgYW55dGhpbmcgdG8gdGhpcyBmaWxlIHRvIHByb2dyYW0geW91ciB0YWJsZXQuXG4iKTsKK30KKworc3RhdGljIHNzaXplX3QKK3N0b3JlX3RhYmxldEV4ZWN1dGUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwkvKiBXZSBkbyBub3QgY2FyZSB3aGF0IHlvdSB3cml0ZSB0byB0aGlzIGZpbGUuIE1lcmVseSB0aGUgYWN0aW9uCisJICogb2Ygd3JpdGluZyB0byB0aGlzIGZpbGUgdHJpZ2dlcnMgYSB0YWJsZXQgcmVwcm9ncmFtbWluZy4KKwkgKi8KKwltZW1jcHkoJmFpcHRlay0+Y3VyU2V0dGluZywgJmFpcHRlay0+bmV3U2V0dGluZywKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBhaXB0ZWtfc2V0dGluZ3MpKTsKKworCWlmIChhaXB0ZWtfcHJvZ3JhbV90YWJsZXQoYWlwdGVrKSA8IDApCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoZXhlY3V0ZSwKKwkJICAgU19JUlVHTyB8IFNfSVdVR08sIHNob3dfdGFibGV0RXhlY3V0ZSwgc3RvcmVfdGFibGV0RXhlY3V0ZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICdvZG1fY29kZScgZmlsZS4gTm90ZSB0aGF0IHRoaXMgZmlsZQorICogb25seSBkaXNwbGF5cyBjdXJyZW50IHNldHRpbmcuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGFibGV0T0RNQ29kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUwNHhcbiIsIGFpcHRlay0+ZmVhdHVyZXMub2RtQ29kZSk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihvZG1fY29kZSwgU19JUlVHTywgc2hvd190YWJsZXRPRE1Db2RlLCBOVUxMKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ21vZGVsX2NvZGUnIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGZpbGUKKyAqIG9ubHkgZGlzcGxheXMgY3VycmVudCBzZXR0aW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldE1vZGVsQ29kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUwNHhcbiIsIGFpcHRlay0+ZmVhdHVyZXMubW9kZWxDb2RlKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKG1vZGVsX2NvZGUsIFNfSVJVR08sIHNob3dfdGFibGV0TW9kZWxDb2RlLCBOVUxMKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ2Zpcm13YXJlX2NvZGUnIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGZpbGUKKyAqIG9ubHkgZGlzcGxheXMgY3VycmVudCBzZXR0aW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X2Zpcm13YXJlQ29kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlMDR4XG4iLAorCQkJYWlwdGVrLT5mZWF0dXJlcy5maXJtd2FyZUNvZGUpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoZmlybXdhcmVfY29kZSwgU19JUlVHTywgc2hvd19maXJtd2FyZUNvZGUsIE5VTEwpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgcm91dGluZSByZW1vdmVzIGFsbCBleGlzdGluZyBzeXNmcyBmaWxlcyBtYW5hZ2VkIGJ5IHRoaXMgZGV2aWNlCisgKiBkcml2ZXIuCisgKi8KK3N0YXRpYyB2b2lkIGFpcHRla19kZWxldGVfZmlsZXMoc3RydWN0IGRldmljZSAqZGV2KQoreworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zaXplKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcHJvZHVjdF9pZCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3ZlbmRvcl9pZCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3ZlbmRvcik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3Byb2R1Y3QpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9wb2ludGVyX21vZGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9jb29yZGluYXRlX21vZGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90b29sX21vZGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl94dGlsdCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3l0aWx0KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaml0dGVyKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXkpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9pbnB1dF9wYXRoKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZXZlbnRfY291bnQpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kaWFnbm9zdGljKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfb2RtX2NvZGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RlbF9jb2RlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZmlybXdhcmVfY29kZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0eWx1c19sb3dlcik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0eWx1c191cHBlcik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21vdXNlX2xlZnQpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9tb3VzZV9taWRkbGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9tb3VzZV9yaWdodCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3doZWVsKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZXhlY3V0ZSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyByb3V0aW5lIGNyZWF0ZXMgdGhlIHN5c2ZzIGZpbGVzIG1hbmFnZWQgYnkgdGhpcyBkZXZpY2UKKyAqIGRyaXZlci4KKyAqLworc3RhdGljIGludCBhaXB0ZWtfYWRkX2ZpbGVzKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCisJaWYgKChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc2l6ZSkpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcHJvZHVjdF9pZCkpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdmVuZG9yX2lkKSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl92ZW5kb3IpKSB8fAorCSAgICAocmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3Byb2R1Y3QpKSB8fAorCSAgICAocmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3BvaW50ZXJfbW9kZSkpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfY29vcmRpbmF0ZV9tb2RlKSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90b29sX21vZGUpKSB8fAorCSAgICAocmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3h0aWx0KSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl95dGlsdCkpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaml0dGVyKSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheSkpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW5wdXRfcGF0aCkpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZXZlbnRfY291bnQpKSB8fAorCSAgICAocmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RpYWdub3N0aWMpKSB8fAorCSAgICAocmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX29kbV9jb2RlKSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RlbF9jb2RlKSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9maXJtd2FyZV9jb2RlKSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zdHlsdXNfbG93ZXIpKSB8fAorCSAgICAocmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0eWx1c191cHBlcikpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW91c2VfbGVmdCkpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW91c2VfbWlkZGxlKSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tb3VzZV9yaWdodCkpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfd2hlZWwpKSB8fAorCSAgICAocmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2V4ZWN1dGUpKSkgeworCQllcnIoImFpcHRlazoga2lsbGluZyBvd24gc3lzZnMgZGV2aWNlIGZpbGVzXG4iKTsKKwkJYWlwdGVrX2RlbGV0ZV9maWxlcyhkZXYpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbiBhIHRhYmxldCBoYXMgYmVlbiBpZGVudGlmaWVkLiBJdCBiYXNpY2FsbHkKKyAqIHNldHMgdXAgdGhlIHRhYmxldCBhbmQgdGhlIGRyaXZlcidzIGludGVybmFsIHN0cnVjdHVyZXMuCisgKi8KK3N0YXRpYyBpbnQKK2FpcHRla19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2OworCXN0cnVjdCBpbnB1dF9oYW5kbGUgKmlucHV0aGFuZGxlOworCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGUsICpuZXh0OworCWNoYXIgcGF0aFs2NCArIDFdOworCWludCBpOworCWludCBzcGVlZHNbXSA9IHsgMCwKKwkJQUlQVEVLX1BST0dSQU1NQUJMRV9ERUxBWV81MCwKKwkJQUlQVEVLX1BST0dSQU1NQUJMRV9ERUxBWV80MDAsCisJCUFJUFRFS19QUk9HUkFNTUFCTEVfREVMQVlfMjUsCisJCUFJUFRFS19QUk9HUkFNTUFCTEVfREVMQVlfMTAwLAorCQlBSVBURUtfUFJPR1JBTU1BQkxFX0RFTEFZXzIwMCwKKwkJQUlQVEVLX1BST0dSQU1NQUJMRV9ERUxBWV8zMDAKKwl9OworCisJLyogcHJvZ3JhbW1hYmxlRGVsYXkgaXMgd2hlcmUgdGhlIGNvbW1hbmQtbGluZSBzcGVjaWZpZWQKKwkgKiBkZWxheSBpcyBrZXB0LiBXZSBtYWtlIGl0IHRoZSBmaXJzdCBlbGVtZW50IG9mIHNwZWVkc1tdLAorCSAqIHNvIHRoZXJlZm9yZSwgeW91ciBvdmVycmlkZSBzcGVlZCBpcyB0cmllZCBmaXJzdCwgdGhlbiB0aGUKKwkgKiByZW1haW5kZXIuIE5vdGUgdGhhdCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiA0MDBtcyB3aWxsIGJlIHRyaWVkCisJICogaWYgeW91IGRvIG5vdCBzcGVjaWZ5IGFueSBjb21tYW5kIGxpbmUgcGFyYW1ldGVyLgorCSAqLworCXNwZWVkc1swXSA9IHByb2dyYW1tYWJsZURlbGF5OworCisJaWYgKChhaXB0ZWsgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWlwdGVrKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChhaXB0ZWssIDAsIHNpemVvZihzdHJ1Y3QgYWlwdGVrKSk7CisKKwlhaXB0ZWstPmRhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKHVzYmRldiwgQUlQVEVLX1BBQ0tFVF9MRU5HVEgsCisJCQkJCVNMQUJfQVRPTUlDLCAmYWlwdGVrLT5kYXRhX2RtYSk7CisJaWYgKGFpcHRlay0+ZGF0YSA9PSBOVUxMKSB7CisJCWtmcmVlKGFpcHRlayk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWFpcHRlay0+dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoYWlwdGVrLT51cmIgPT0gTlVMTCkgeworCQl1c2JfYnVmZmVyX2ZyZWUodXNiZGV2LCBBSVBURUtfUEFDS0VUX0xFTkdUSCwgYWlwdGVrLT5kYXRhLAorCQkJCWFpcHRlay0+ZGF0YV9kbWEpOworCQlrZnJlZShhaXB0ZWspOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBTZXQgdXAgdGhlIGN1clNldHRpbmdzIHN0cnVjdC4gU2FpZCBzdHJ1Y3QgY29udGFpbnMgdGhlIGN1cnJlbnQKKwkgKiBwcm9ncmFtbWFibGUgcGFyYW1ldGVycy4gVGhlIG5ld1NldHRpbmcgc3RydWN0IGNvbnRhaW5zIGNoYW5nZXMKKwkgKiB0aGUgdXNlciBtYWtlcyB0byB0aGUgc2V0dGluZ3MgdmlhIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFRob3NlCisJICogY2hhbmdlcyBhcmUgbm90ICJjb21taXR0ZWQiIHRvIGN1clNldHRpbmdzIHVudGlsIHRoZSB1c2VyCisJICogd3JpdGVzIHRvIHRoZSBzeXNmcy8uLi4vZXhlY3V0ZSBmaWxlLgorCSAqLworCWFpcHRlay0+Y3VyU2V0dGluZy5wb2ludGVyTW9kZSA9IEFJUFRFS19QT0lOVEVSX0VJVEhFUl9NT0RFOworCWFpcHRlay0+Y3VyU2V0dGluZy5jb29yZGluYXRlTW9kZSA9IEFJUFRFS19DT09SRElOQVRFX0FCU09MVVRFX01PREU7CisJYWlwdGVrLT5jdXJTZXR0aW5nLnRvb2xNb2RlID0gQUlQVEVLX1RPT0xfQlVUVE9OX1BFTl9NT0RFOworCWFpcHRlay0+Y3VyU2V0dGluZy54VGlsdCA9IEFJUFRFS19USUxUX0RJU0FCTEU7CisJYWlwdGVrLT5jdXJTZXR0aW5nLnlUaWx0ID0gQUlQVEVLX1RJTFRfRElTQUJMRTsKKwlhaXB0ZWstPmN1clNldHRpbmcubW91c2VCdXR0b25MZWZ0ID0gQUlQVEVLX01PVVNFX0xFRlRfQlVUVE9OOworCWFpcHRlay0+Y3VyU2V0dGluZy5tb3VzZUJ1dHRvbk1pZGRsZSA9IEFJUFRFS19NT1VTRV9NSURETEVfQlVUVE9OOworCWFpcHRlay0+Y3VyU2V0dGluZy5tb3VzZUJ1dHRvblJpZ2h0ID0gQUlQVEVLX01PVVNFX1JJR0hUX0JVVFRPTjsKKwlhaXB0ZWstPmN1clNldHRpbmcuc3R5bHVzQnV0dG9uVXBwZXIgPSBBSVBURUtfU1RZTFVTX1VQUEVSX0JVVFRPTjsKKwlhaXB0ZWstPmN1clNldHRpbmcuc3R5bHVzQnV0dG9uTG93ZXIgPSBBSVBURUtfU1RZTFVTX0xPV0VSX0JVVFRPTjsKKwlhaXB0ZWstPmN1clNldHRpbmcuaml0dGVyRGVsYXkgPSBqaXR0ZXJEZWxheTsKKwlhaXB0ZWstPmN1clNldHRpbmcucHJvZ3JhbW1hYmxlRGVsYXkgPSBwcm9ncmFtbWFibGVEZWxheTsKKworCS8qIEJvdGggc3RydWN0cyBzaG91bGQgaGF2ZSBlcXVpdmFsZW50IHNldHRpbmdzCisJICovCisJbWVtY3B5KCZhaXB0ZWstPm5ld1NldHRpbmcsICZhaXB0ZWstPmN1clNldHRpbmcsCisJICAgICAgIHNpemVvZihzdHJ1Y3QgYWlwdGVrX3NldHRpbmdzKSk7CisKKwkvKiBOb3cgcHJvZ3JhbSB0aGUgY2FwYWNpdGllcyBvZiB0aGUgdGFibGV0LCBpbiB0ZXJtcyBvZiBiZWluZworCSAqIGFuIGlucHV0IGRldmljZS4KKwkgKi8KKwlhaXB0ZWstPmlucHV0ZGV2LmV2Yml0WzBdIHw9IEJJVChFVl9LRVkpCisJICAgIHwgQklUKEVWX0FCUykKKwkgICAgfCBCSVQoRVZfUkVMKQorCSAgICB8IEJJVChFVl9NU0MpOworCisJYWlwdGVrLT5pbnB1dGRldi5hYnNiaXRbMF0gfD0KKwkgICAgKEJJVChBQlNfWCkgfAorCSAgICAgQklUKEFCU19ZKSB8CisJICAgICBCSVQoQUJTX1BSRVNTVVJFKSB8CisJICAgICBCSVQoQUJTX1RJTFRfWCkgfAorCSAgICAgQklUKEFCU19USUxUX1kpIHwgQklUKEFCU19XSEVFTCkgfCBCSVQoQUJTX01JU0MpKTsKKworCWFpcHRlay0+aW5wdXRkZXYucmVsYml0WzBdIHw9CisJICAgIChCSVQoUkVMX1gpIHwgQklUKFJFTF9ZKSB8IEJJVChSRUxfV0hFRUwpIHwgQklUKFJFTF9NSVNDKSk7CisKKwlhaXB0ZWstPmlucHV0ZGV2LmtleWJpdFtMT05HKEJUTl9MRUZUKV0gfD0KKwkgICAgKEJJVChCVE5fTEVGVCkgfCBCSVQoQlROX1JJR0hUKSB8IEJJVChCVE5fTUlERExFKSk7CisKKwlhaXB0ZWstPmlucHV0ZGV2LmtleWJpdFtMT05HKEJUTl9ESUdJKV0gfD0KKwkgICAgKEJJVChCVE5fVE9PTF9QRU4pIHwKKwkgICAgIEJJVChCVE5fVE9PTF9SVUJCRVIpIHwKKwkgICAgIEJJVChCVE5fVE9PTF9QRU5DSUwpIHwKKwkgICAgIEJJVChCVE5fVE9PTF9BSVJCUlVTSCkgfAorCSAgICAgQklUKEJUTl9UT09MX0JSVVNIKSB8CisJICAgICBCSVQoQlROX1RPT0xfTU9VU0UpIHwKKwkgICAgIEJJVChCVE5fVE9PTF9MRU5TKSB8CisJICAgICBCSVQoQlROX1RPVUNIKSB8IEJJVChCVE5fU1RZTFVTKSB8IEJJVChCVE5fU1RZTFVTMikpOworCisJYWlwdGVrLT5pbnB1dGRldi5tc2NiaXRbMF0gPSBCSVQoTVNDX1NFUklBTCk7CisKKwkvKiBQcm9ncmFtbWluZyB0aGUgdGFibGV0IG1hY3JvIGtleXMgbmVlZHMgdG8gYmUgZG9uZSB3aXRoIGEgZm9yIGxvb3AKKwkgKiBhcyB0aGUga2V5Y29kZXMgYXJlIGRpc2NvbnRpZ3VvdXMuCisJICovCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihtYWNyb0tleUV2ZW50cykgLyBzaXplb2YobWFjcm9LZXlFdmVudHNbMF0pOyArK2kpCisJCXNldF9iaXQobWFjcm9LZXlFdmVudHNbaV0sIGFpcHRlay0+aW5wdXRkZXYua2V5Yml0KTsKKworCS8qIFNldCB1cCBjbGllbnQgZGF0YSwgcG9pbnRlcnMgdG8gb3BlbiBhbmQgY2xvc2Ugcm91dGluZXMKKwkgKiBmb3IgdGhlIGlucHV0IGRldmljZS4KKwkgKi8KKwlhaXB0ZWstPmlucHV0ZGV2LnByaXZhdGUgPSBhaXB0ZWs7CisJYWlwdGVrLT5pbnB1dGRldi5vcGVuID0gYWlwdGVrX29wZW47CisJYWlwdGVrLT5pbnB1dGRldi5jbG9zZSA9IGFpcHRla19jbG9zZTsKKworCS8qIERldGVybWluZSB0aGUgdXNiIGRldmljZXMnIHBoeXNpY2FsIHBhdGguCisJICogQXNrZXRoIG5vdCB3aHkgd2UgYWx3YXlzIHByZXRlbmQgd2UncmUgdXNpbmcgIi4uL2lucHV0MCIsCisJICogYnV0IEkgc3VzcGVjdCB0aGlzIHdpbGwgaGF2ZSB0byBiZSByZWZhY3RvcmVkIG9uZQorCSAqIGRheSBpZiBhIHNpbmdsZSBVU0IgZGV2aWNlIGNhbiBiZSBhIGtleWJvYXJkICYgYSBtb3VzZQorCSAqICYgYSB0YWJsZXQsIGFuZCB0aGUgaW5wdXRYIG51bWJlciBhY3R1YWxseSB3aWxsIHRlbGwKKwkgKiB1cyBzb21ldGhpbmcuLi4KKwkgKi8KKwlpZiAodXNiX21ha2VfcGF0aCh1c2JkZXYsIHBhdGgsIDY0KSA+IDApCisJCXNwcmludGYoYWlwdGVrLT5mZWF0dXJlcy51c2JQYXRoLCAiJXMvaW5wdXQwIiwgcGF0aCk7CisKKwkvKiBQcm9ncmFtIHRoZSBpbnB1dCBkZXZpY2UgY29vcmRpbmF0ZSBjYXBhY2l0aWVzLiBXZSBkbyBub3QgeWV0CisJICoga25vdyB3aGF0IG1heGltdW0gWCwgWSwgYW5kIFogdmFsdWVzIGFyZSwgc28gd2UncmUgcHV0dGluZyBmYWtlCisJICogdmFsdWVzIGluLiBMYXRlciwgd2UnbGwgYXNrIHRoZSB0YWJsZXQgdG8gcHV0IGluIHRoZSBjb3JyZWN0CisJICogdmFsdWVzLgorCSAqLworCWFpcHRlay0+aW5wdXRkZXYuYWJzbWluW0FCU19YXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNtYXhbQUJTX1hdID0gMjk5OTsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21pbltBQlNfWV0gPSAwOworCWFpcHRlay0+aW5wdXRkZXYuYWJzbWF4W0FCU19ZXSA9IDIyNDk7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNtaW5bQUJTX1BSRVNTVVJFXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNtYXhbQUJTX1BSRVNTVVJFXSA9IDUxMTsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21pbltBQlNfVElMVF9YXSA9IEFJUFRFS19USUxUX01JTjsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21heFtBQlNfVElMVF9YXSA9IEFJUFRFS19USUxUX01BWDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21pbltBQlNfVElMVF9ZXSA9IEFJUFRFS19USUxUX01JTjsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21heFtBQlNfVElMVF9ZXSA9IEFJUFRFS19USUxUX01BWDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21pbltBQlNfV0hFRUxdID0gQUlQVEVLX1dIRUVMX01JTjsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21heFtBQlNfV0hFRUxdID0gQUlQVEVLX1dIRUVMX01BWCAtIDE7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNmdXp6W0FCU19YXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNmdXp6W0FCU19ZXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNmdXp6W0FCU19QUkVTU1VSRV0gPSAwOworCWFpcHRlay0+aW5wdXRkZXYuYWJzZnV6eltBQlNfVElMVF9YXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNmdXp6W0FCU19USUxUX1ldID0gMDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic2Z1enpbQUJTX1dIRUVMXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNmbGF0W0FCU19YXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNmbGF0W0FCU19ZXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNmbGF0W0FCU19QUkVTU1VSRV0gPSAwOworCWFpcHRlay0+aW5wdXRkZXYuYWJzZmxhdFtBQlNfVElMVF9YXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNmbGF0W0FCU19USUxUX1ldID0gMDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic2ZsYXRbQUJTX1dIRUVMXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5uYW1lID0gIkFpcHRlayI7CisJYWlwdGVrLT5pbnB1dGRldi5waHlzID0gYWlwdGVrLT5mZWF0dXJlcy51c2JQYXRoOworCWFpcHRlay0+aW5wdXRkZXYuaWQuYnVzdHlwZSA9IEJVU19VU0I7CisJYWlwdGVrLT5pbnB1dGRldi5pZC52ZW5kb3IgPSBsZTE2X3RvX2NwdSh1c2JkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOworCWFpcHRlay0+aW5wdXRkZXYuaWQucHJvZHVjdCA9IGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCWFpcHRlay0+aW5wdXRkZXYuaWQudmVyc2lvbiA9IGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworCisJYWlwdGVrLT51c2JkZXYgPSB1c2JkZXY7CisJYWlwdGVrLT5pZm51bSA9IGludGYtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCWFpcHRlay0+aW5EZWxheSA9IDA7CisJYWlwdGVrLT5lbmREZWxheSA9IDA7CisJYWlwdGVrLT5wcmV2aW91c0ppdHRlcmFibGUgPSAwOworCisJZW5kcG9pbnQgPSAmaW50Zi0+YWx0c2V0dGluZ1swXS5lbmRwb2ludFswXS5kZXNjOworCisJLyogR28gc2V0IHVwIG91ciBVUkIsIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoZSB0YWJsZXQgcmVjZWl2ZXMKKwkgKiBpbnB1dC4KKwkgKi8KKwl1c2JfZmlsbF9pbnRfdXJiKGFpcHRlay0+dXJiLAorCQkJIGFpcHRlay0+dXNiZGV2LAorCQkJIHVzYl9yY3ZpbnRwaXBlKGFpcHRlay0+dXNiZGV2LAorCQkJCQllbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkgYWlwdGVrLT5kYXRhLCA4LCBhaXB0ZWtfaXJxLCBhaXB0ZWssCisJCQkgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisKKwlhaXB0ZWstPnVyYi0+dHJhbnNmZXJfZG1hID0gYWlwdGVrLT5kYXRhX2RtYTsKKwlhaXB0ZWstPnVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwkvKiBSZWdpc3RlciB0aGUgdGFibGV0IGFzIGFuIElucHV0IERldmljZQorCSAqLworCWlucHV0X3JlZ2lzdGVyX2RldmljZSgmYWlwdGVrLT5pbnB1dGRldik7CisKKwkvKiBXZSBub3cgd2lsbCBsb29rIGZvciB0aGUgZXZkZXYgZGV2aWNlIHdoaWNoIGlzIG1hcHBlZCB0bworCSAqIHRoZSB0YWJsZXQuIFRoZSBwYXJ0aWFsIG5hbWUgaXMga2VwdCBpbiB0aGUgbGluayBsaXN0IG9mCisJICogaW5wdXRfaGFuZGxlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbnB1dCBkZXZpY2UuCisJICogV2hhdCBpZGVudGlmaWVzIGFuIGV2ZGV2IGlucHV0X2hhbmRsZXIgaXMgdGhhdCBpdCBiZWdpbnMKKwkgKiB3aXRoICdldmVudCcsIGNvbnRpbnVlcyB3aXRoIGEgZGlnaXQsIGFuZCB0aGF0IGluIHR1cm4KKwkgKiBpcyBtYXBwZWQgdG8gL3tkZXZmc30vaW5wdXQvZXZlbnROLgorCSAqLworCWlucHV0ZGV2ID0gJmFpcHRlay0+aW5wdXRkZXY7CisJbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsICZpbnB1dGRldi0+aF9saXN0KSB7CisJCWlucHV0aGFuZGxlID0gdG9faGFuZGxlKG5vZGUpOworCQlpZiAoc3RybmNtcChpbnB1dGhhbmRsZS0+bmFtZSwgImV2ZW50IiwgNSkgPT0gMCkgeworCQkJc3RyY3B5KGFpcHRlay0+ZmVhdHVyZXMuaW5wdXRQYXRoLCBpbnB1dGhhbmRsZS0+bmFtZSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWluZm8oImlucHV0OiBBaXB0ZWsgb24gJXMgKCVzKVxuIiwgcGF0aCwgYWlwdGVrLT5mZWF0dXJlcy5pbnB1dFBhdGgpOworCisJLyogUHJvZ3JhbSB0aGUgdGFibGV0LiBUaGlzIHNldHMgdGhlIHRhYmxldCB1cCBpbiB0aGUgbW9kZQorCSAqIHNwZWNpZmllZCBpbiBuZXdTZXR0aW5nLCBhbmQgYWxzbyBxdWVyaWVzIHRoZSB0YWJsZXQncworCSAqIHBoeXNpY2FsIGNhcGFjaXRpZXMuCisJICoKKwkgKiBTYW5pdHkgY2hlY2s6IGlmIGEgdGFibGV0IGRvZXNuJ3QgbGlrZSB0aGUgc2xvdyBwcm9ncmFtbWF0aWMKKwkgKiBkZWxheSwgd2Ugb2Z0ZW4gZ2V0IHNpemVzIG9mIDB4MC4gTGV0J3MgdXNlIHRoYXQgYXMgYW4gaW5kaWNhdG9yCisJICogdG8gdHJ5IGZhc3RlciBkZWxheXMsIHVwIHRvIDI1IG1zLiBJZiB0aGF0IGxvZ2ljIGZhaWxzLCB3ZWxsLCB5b3UnbGwKKwkgKiBoYXZlIHRvIGV4cGxhaW4gdG8gdXMgaG93IHlvdXIgdGFibGV0IHRoaW5rcyBpdCdzIDB4MCwgYW5kIHlldCB0aGF0J3MKKwkgKiBub3QgYW4gZXJyb3IgOi0pCisJICovCisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHNwZWVkcykgLyBzaXplb2Yoc3BlZWRzWzBdKTsgKytpKSB7CisJCWFpcHRlay0+Y3VyU2V0dGluZy5wcm9ncmFtbWFibGVEZWxheSA9IHNwZWVkc1tpXTsKKwkJKHZvaWQpYWlwdGVrX3Byb2dyYW1fdGFibGV0KGFpcHRlayk7CisJCWlmIChhaXB0ZWstPmlucHV0ZGV2LmFic21heFtBQlNfWF0gPiAwKSB7CisJCQlpbmZvKCJpbnB1dDogQWlwdGVrIHVzaW5nICVkIG1zIHByb2dyYW1taW5nIHNwZWVkXG4iLAorCQkJICAgICBhaXB0ZWstPmN1clNldHRpbmcucHJvZ3JhbW1hYmxlRGVsYXkpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBBc3NvY2lhdGUgdGhpcyBkcml2ZXIncyBzdHJ1Y3Qgd2l0aCB0aGUgdXNiIGludGVyZmFjZS4KKwkgKi8KKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGFpcHRlayk7CisKKwkvKiBTZXQgdXAgdGhlIHN5c2ZzIGZpbGVzCisJICovCisJYWlwdGVrX2FkZF9maWxlcygmaW50Zi0+ZGV2KTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgZXZkZXYgbW9kdWxlIGlzIGxvYWRlZC4gQXNzdW1pbmcgZXZkZXYgSVMgYSBtb2R1bGUgOi0pCisJICovCisJaWYgKHJlcXVlc3RfbW9kdWxlKCJldmRldiIpICE9IDApCisJCWluZm8oImFpcHRlazogZXJyb3IgbG9hZGluZyAnZXZkZXYnIG1vZHVsZSIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KK3N0YXRpYyB2b2lkIGFpcHRla19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGFpcHRla19kcml2ZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAiYWlwdGVrIiwKKwkucHJvYmUgPSBhaXB0ZWtfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBhaXB0ZWtfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBhaXB0ZWtfaWRzLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWFsIHdpdGggdGFibGV0IGRpc2Nvbm5lY3RpbmcgZnJvbSB0aGUgc3lzdGVtLgorICovCitzdGF0aWMgdm9pZCBhaXB0ZWtfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJLyogRGlzYXNzb2NpYXRlIGRyaXZlcidzIHN0cnVjdCB3aXRoIHVzYiBpbnRlcmZhY2UKKwkgKi8KKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCWlmIChhaXB0ZWsgIT0gTlVMTCkgeworCQkvKiBGcmVlICYgdW5ob29rIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgc3lzdGVtLgorCQkgKi8KKwkJdXNiX2tpbGxfdXJiKGFpcHRlay0+dXJiKTsKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoJmFpcHRlay0+aW5wdXRkZXYpOworCQlhaXB0ZWtfZGVsZXRlX2ZpbGVzKCZpbnRmLT5kZXYpOworCQl1c2JfZnJlZV91cmIoYWlwdGVrLT51cmIpOworCQl1c2JfYnVmZmVyX2ZyZWUoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwKKwkJCQlBSVBURUtfUEFDS0VUX0xFTkdUSCwKKwkJCQlhaXB0ZWstPmRhdGEsIGFpcHRlay0+ZGF0YV9kbWEpOworCQlrZnJlZShhaXB0ZWspOworCQlhaXB0ZWsgPSBOVUxMOworCX0KK30KKworc3RhdGljIGludCBfX2luaXQgYWlwdGVrX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZhaXB0ZWtfZHJpdmVyKTsKKwlpZiAocmVzdWx0ID09IDApIHsKKwkJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiAiIERSSVZFUl9BVVRIT1IpOworCQlpbmZvKERSSVZFUl9ERVNDKTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFpcHRla19leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmFpcHRla19kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKHByb2dyYW1tYWJsZURlbGF5LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhwcm9ncmFtbWFibGVEZWxheSwgImRlbGF5IHVzZWQgZHVyaW5nIHRhYmxldCBwcm9ncmFtbWluZyIpOworbW9kdWxlX3BhcmFtKGppdHRlckRlbGF5LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhqaXR0ZXJEZWxheSwgInN0eWx1cy9tb3VzZSBzZXR0bGVtZW50IGRlbGF5Iik7CisKK21vZHVsZV9pbml0KGFpcHRla19pbml0KTsKK21vZHVsZV9leGl0KGFpcHRla19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2F0aV9yZW1vdGUuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2F0aV9yZW1vdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTVhZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvYXRpX3JlbW90ZS5jCkBAIC0wLDAgKzEsODUwIEBACisvKiAKKyAqICBVU0IgQVRJIFJlbW90ZSBzdXBwb3J0CisgKgorICogIFZlcnNpb24gMi4yLjAgQ29weXJpZ2h0IChjKSAyMDA0IFRvcnJleSBIb2ZmbWFuIDx0aG9mZm1hbkBhcm5vci5uZXQ+CisgKiAgVmVyc2lvbiAyLjEuMSBDb3B5cmlnaHQgKGMpIDIwMDIgVmxhZGltaXIgRGVyZ2FjaGV2CisgKgorICogIFRoaXMgMi4yLjAgdmVyc2lvbiBpcyBhIHJld3JpdGUgLyBjbGVhbnVwIG9mIHRoZSAyLjEuMSBkcml2ZXIsIGluY2x1ZGluZworICogIHBvcnRpbmcgdG8gdGhlIDIuNiBrZXJuZWwgaW50ZXJmYWNlcywgYWxvbmcgd2l0aCBvdGhlciBtb2RpZmljYXRpb24gCisgKiAgdG8gYmV0dGVyIG1hdGNoIHRoZSBzdHlsZSBvZiB0aGUgZXhpc3RpbmcgdXNiL2lucHV0IGRyaXZlcnMuICBIb3dldmVyLCB0aGUKKyAqICBwcm90b2NvbCBhbmQgaGFyZHdhcmUgaGFuZGxpbmcgaXMgZXNzZW50aWFsbHkgdW5jaGFuZ2VkIGZyb20gMi4xLjEuCisgKiAgCisgKiAgVGhlIDIuMS4xIGRyaXZlciB3YXMgZGVyaXZlZCBmcm9tIHRoZSB1c2JhdGlfcmVtb3RlIGFuZCB1c2JrYmQgZHJpdmVycyBieSAKKyAqICBWb2p0ZWNoIFBhdmxpay4KKyAqCisgKiAgQ2hhbmdlczoKKyAqCisgKiAgRmViIDIwMDQ6IFRvcnJleSBIb2ZmbWFuIDx0aG9mZm1hbkBhcm5vci5uZXQ+CisgKiAgICAgICAgICAgIFZlcnNpb24gMi4yLjAKKyAqICBKdW4gMjAwNDogVG9ycmV5IEhvZmZtYW4gPHRob2ZmbWFuQGFybm9yLm5ldD4KKyAqICAgICAgICAgICAgVmVyc2lvbiAyLjIuMQorICogICAgICAgICAgICBBZGRlZCBrZXkgcmVwZWF0IHN1cHBvcnQgY29udHJpYnV0ZWQgYnk6CisgKiAgICAgICAgICAgICAgICBWaW5jZW50IFZhbmFja2VyZSA8dmFuYWNrZXJlQGxpZi51bml2LW1ycy5mcj4KKyAqICAgICAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlICJMb2xhIiByZW1vdGUgY29udHJpYnV0ZWQgYnk6CisgKiAgICAgICAgICAgICAgICBTZXRoIENvaG4gPHNldGhjb2huQHlhaG9vLmNvbT4KKyAqCisgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKiAKKyAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisgKgorICogSGFyZHdhcmUgJiBzb2Z0d2FyZSBub3RlcworICoKKyAqIFRoZXNlIHJlbW90ZSBjb250cm9scyBhcmUgZGlzdHJpYnV0ZWQgYnkgQVRJIGFzIHBhcnQgb2YgdGhlaXIgCisgKiAiQWxsLUluLVdvbmRlciIgdmlkZW8gY2FyZCBwYWNrYWdlcy4gIFRoZSByZWNlaXZlciBzZWxmLWlkZW50aWZpZXMgYXMgYSAKKyAqICJVU0IgUmVjZWl2ZXIiIHdpdGggbWFudWZhY3R1cmVyICJYMTAgV2lyZWxlc3MgVGVjaG5vbG9neSBJbmMiLgorICoKKyAqIFRoZSAiTG9sYSIgcmVtb3RlIGlzIGF2YWlsYWJsZSBmcm9tIFgxMC4gIFNlZTogCisgKiAgICBodHRwOi8vd3d3LngxMC5jb20vcHJvZHVjdHMvbG9sYV9zZzEuaHRtCisgKiBUaGUgTG9sYSBpcyBzaW1pbGFyIHRvIHRoZSBBVEkgcmVtb3RlIGJ1dCBoYXMgbm8gbW91c2Ugc3VwcG9ydCwgYW5kIHNsaWdodGx5CisgKiBkaWZmZXJlbnQga2V5cy4KKyAqCisgKiBJdCBpcyBwb3NzaWJsZSB0byB1c2UgbXVsdGlwbGUgcmVjZWl2ZXJzIGFuZCByZW1vdGVzIG9uIG11bHRpcGxlIGNvbXB1dGVycyAKKyAqIHNpbXVsdGFuZW91c2x5IGJ5IGNvbmZpZ3VyaW5nIHRoZW0gdG8gdXNlIHNwZWNpZmljIGNoYW5uZWxzLgorICogCisgKiBUaGUgUkYgcHJvdG9jb2wgdXNlZCBieSB0aGUgcmVtb3RlIHN1cHBvcnRzIDE2IGRpc3RpbmN0IGNoYW5uZWxzLCAxIHRvIDE2LiAgCisgKiBBY3R1YWxseSwgaXQgbWF5IGV2ZW4gc3VwcG9ydCBtb3JlLCBhdCBsZWFzdCBpbiBzb21lIHJldmlzaW9ucyBvZiB0aGUgCisgKiBoYXJkd2FyZS4KKyAqCisgKiBFYWNoIHJlbW90ZSBjYW4gYmUgY29uZmlndXJlZCB0byB0cmFuc21pdCBvbiBvbmUgY2hhbm5lbCBhcyBmb2xsb3dzOgorICogICAtIFByZXNzIGFuZCBob2xkIHRoZSAiaGFuZCBpY29uIiBidXR0b24uICAKKyAqICAgLSBXaGVuIHRoZSByZWQgTEVEIHN0YXJ0cyB0byBibGluaywgbGV0IGdvIG9mIHRoZSAiaGFuZCBpY29uIiBidXR0b24uIAorICogICAtIFdoZW4gaXQgc3RvcHMgYmxpbmtpbmcsIGlucHV0IHRoZSBjaGFubmVsIGNvZGUgYXMgdHdvIGRpZ2l0cywgZnJvbSAwMSAKKyAqICAgICB0byAxNiwgYW5kIHByZXNzIHRoZSBoYW5kIGljb24gYWdhaW4uCisgKiAKKyAqIFRoZSB0aW1pbmcgY2FuIGJlIGEgbGl0dGxlIHRyaWNreS4gIFRyeSBsb2FkaW5nIHRoZSBtb2R1bGUgd2l0aCBkZWJ1Zz0xCisgKiB0byBoYXZlIHRoZSBrZXJuZWwgcHJpbnQgb3V0IG1lc3NhZ2VzIGFib3V0IHRoZSByZW1vdGUgY29udHJvbCBudW1iZXIKKyAqIGFuZCBtYXNrLiAgTm90ZTogZGVidWdnaW5nIHByaW50cyByZW1vdGUgbnVtYmVycyBhcyB6ZXJvLWJhc2VkIGhleGFkZWNpbWFsLgorICoKKyAqIFRoZSBkcml2ZXIgaGFzIGEgImNoYW5uZWxfbWFzayIgcGFyYW1ldGVyLiBUaGlzIGJpdG1hc2sgc3BlY2lmaWVzIHdoaWNoCisgKiBjaGFubmVscyB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIG1vZHVsZS4gIFRvIG1hc2sgb3V0IGNoYW5uZWxzLCBqdXN0IGFkZCAKKyAqIGFsbCB0aGUgMl5jaGFubmVsX251bWJlciB2YWx1ZXMgdG9nZXRoZXIuCisgKgorICogRm9yIGluc3RhbmNlLCBzZXQgY2hhbm5lbF9tYXNrID0gMl40ID0gMTYgKGJpbmFyeSAxMDAwMCkgdG8gbWFrZSBhdGlfcmVtb3RlCisgKiBpZ25vcmUgc2lnbmFscyBjb21pbmcgZnJvbSByZW1vdGUgY29udHJvbHMgdHJhbnNtaXR0aW5nIG9uIGNoYW5uZWwgNCwgYnV0IAorICogYWNjZXB0IGFsbCBvdGhlciBjaGFubmVscy4KKyAqCisgKiBPciwgc2V0IGNoYW5uZWxfbWFzayA9IDY1NTMzLCAoMHhGRkZEKSwgYW5kIGFsbCBjaGFubmVscyBleGNlcHQgMSB3aWxsIGJlIAorICogaWdub3JlZC4KKyAqCisgKiBUaGUgZGVmYXVsdCBpcyAwIChyZXNwb25kIHRvIGFsbCBjaGFubmVscykuIEJpdCAwIGFuZCBiaXRzIDE3LTMyIG9mIHRoaXMgCisgKiBwYXJhbWV0ZXIgYXJlIHVudXNlZC4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCisvKgorICogTW9kdWxlIGFuZCBWZXJzaW9uIEluZm9ybWF0aW9uLCBNb2R1bGUgUGFyYW1ldGVycworICovCisgCisjZGVmaW5lIEFUSV9SRU1PVEVfVkVORE9SX0lEIAkweDBiYzcKKyNkZWZpbmUgQVRJX1JFTU9URV9QUk9EVUNUX0lEIAkweDAwNAorI2RlZmluZSBMT0xBX1JFTU9URV9QUk9EVUNUX0lEIAkweDAwMgorI2RlZmluZSBNRURJT05fUkVNT1RFX1BST0RVQ1RfSUQgMHgwMDYKKworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAJICAgICAgICAiMi4yLjEiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgICAgICAgICAgICJUb3JyZXkgSG9mZm1hbiA8dGhvZmZtYW5AYXJub3IubmV0PiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgICAgICAgICAgICAgIkFUSS9YMTAgUkYgVVNCIFJlbW90ZSBDb250cm9sIgorCisjZGVmaW5lIE5BTUVfQlVGU0laRSAgICAgIDgwICAgIC8qIHNpemUgb2YgcHJvZHVjdCBuYW1lLCBwYXRoIGJ1ZmZlcnMgKi8KKyNkZWZpbmUgREFUQV9CVUZTSVpFICAgICAgNjMgICAgLyogc2l6ZSBvZiBVUkIgZGF0YSBidWZmZXJzICovCisjZGVmaW5lIEFUSV9JTlBVVE5VTSAgICAgIDEgICAgIC8qIFdoaWNoIGlucHV0IGRldmljZSB0byByZWdpc3RlciBhcyAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjaGFubmVsX21hc2sgPSAwOworbW9kdWxlX3BhcmFtKGNoYW5uZWxfbWFzaywgdWxvbmcsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhjaGFubmVsX21hc2ssICJCaXRtYXNrIG9mIHJlbW90ZSBjb250cm9sIGNoYW5uZWxzIHRvIGlnbm9yZSIpOworCitzdGF0aWMgaW50IGRlYnVnID0gMDsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgZXh0cmEgZGVidWcgbWVzc2FnZXMgYW5kIGluZm9ybWF0aW9uIik7CisKKyNkZWZpbmUgZGJnaW5mbyhkZXYsIGZvcm1hdCwgYXJnLi4uKSBkbyB7IGlmIChkZWJ1ZykgZGV2X2luZm8oZGV2ICwgZm9ybWF0ICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKKyN1bmRlZiBlcnIKKyNkZWZpbmUgZXJyKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9FUlIgZm9ybWF0ICwgIyMgYXJnKQorIAorc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGF0aV9yZW1vdGVfdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoQVRJX1JFTU9URV9WRU5ET1JfSUQsIEFUSV9SRU1PVEVfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoQVRJX1JFTU9URV9WRU5ET1JfSUQsIExPTEFfUkVNT1RFX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKEFUSV9SRU1PVEVfVkVORE9SX0lELCBNRURJT05fUkVNT1RFX1BST0RVQ1RfSUQpIH0sCisJe30JLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBhdGlfcmVtb3RlX3RhYmxlKTsKKworLyogR2V0IGhpIGFuZCBsb3cgYnl0ZXMgb2YgYSAxNi1iaXRzIGludCAqLworI2RlZmluZSBISShhKQkoKHVuc2lnbmVkIGNoYXIpKChhKSA+PiA4KSkKKyNkZWZpbmUgTE8oYSkJKCh1bnNpZ25lZCBjaGFyKSgoYSkgJiAweGZmKSkKKworI2RlZmluZSBTRU5EX0ZMQUdfSU5fUFJPR1JFU1MJMQorI2RlZmluZSBTRU5EX0ZMQUdfQ09NUExFVEUJMgorCisvKiBEZXZpY2UgaW5pdGlhbGl6YXRpb24gc3RyaW5ncyAqLworc3RhdGljIGNoYXIgaW5pdDFbXSA9IHsgMHgwMSwgMHgwMCwgMHgyMCwgMHgxNCB9Oworc3RhdGljIGNoYXIgaW5pdDJbXSA9IHsgMHgwMSwgMHgwMCwgMHgyMCwgMHgxNCwgMHgyMCwgMHgyMCwgMHgyMCB9OworCisvKiBBY2NlbGVyYXRpb24gY3VydmUgZm9yIGRpcmVjdGlvbmFsIGNvbnRyb2wgcGFkICovCitzdGF0aWMgY2hhciBhY2NlbFtdID0geyAxLCAyLCA0LCA2LCA5LCAxMywgMjAgfTsKKworLyogRHVwbGljYXRlIGV2ZW50IGZpbHRlcmluZyB0aW1lLiAKKyAqIFNlcXVlbnRpYWwsIGlkZW50aWNhbCBLSU5EX0ZJTFRFUkVEIGlucHV0cyB3aXRoIGxlc3MgdGhhbgorICogRklMVEVSX1RJTUUgamlmZmllcyBiZXR3ZWVuIHRoZW0gYXJlIGNvbnNpZGVyZWQgYXMgcmVwZWF0CisgKiBldmVudHMuIFRoZSBoYXJkd2FyZSBnZW5lcmF0ZXMgNSBldmVudHMgZm9yIHRoZSBmaXJzdCBrZXlwcmVzcworICogYW5kIHdlIGhhdmUgdG8gdGFrZSB0aGlzIGludG8gYWNjb3VudCBmb3IgYW4gYWNjdXJhdGUgcmVwZWF0CisgKiBiZWhhdmlvdXIuCisgKiAoSFogLyAyMCkgPT0gNTAgbXMgYW5kIHdvcmtzIHdlbGwgZm9yIG1lLgorICovCisjZGVmaW5lIEZJTFRFUl9USU1FIChIWiAvIDIwKQorCitzdGF0aWMgREVDTEFSRV9NVVRFWChkaXNjb25uZWN0X3NlbSk7CisKK3N0cnVjdCBhdGlfcmVtb3RlIHsKKwlzdHJ1Y3QgaW5wdXRfZGV2IGlkZXY7CQkKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOworCQkKKwlzdHJ1Y3QgdXJiICppcnFfdXJiOworCXN0cnVjdCB1cmIgKm91dF91cmI7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludF9pbjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50X291dDsKKwl1bnNpZ25lZCBjaGFyICppbmJ1ZjsKKwl1bnNpZ25lZCBjaGFyICpvdXRidWY7CisJZG1hX2FkZHJfdCBpbmJ1Zl9kbWE7CisJZG1hX2FkZHJfdCBvdXRidWZfZG1hOworCisJaW50IG9wZW47ICAgICAgICAgICAgICAgICAgIC8qIG9wZW4gY291bnRlciAqLworCQorCXVuc2lnbmVkIGNoYXIgb2xkX2RhdGFbMl07ICAvKiBEZXRlY3QgZHVwbGljYXRlIGV2ZW50cyAqLworCXVuc2lnbmVkIGxvbmcgb2xkX2ppZmZpZXM7CisJdW5zaWduZWQgbG9uZyBhY2NfamlmZmllczsgIC8qIGhhbmRsZSBhY2NlbGVyYXRpb24gKi8KKwl1bnNpZ25lZCBpbnQgcmVwZWF0X2NvdW50OworCQorCWNoYXIgbmFtZVtOQU1FX0JVRlNJWkVdOworCWNoYXIgcGh5c1tOQU1FX0JVRlNJWkVdOworCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKKwlpbnQgc2VuZF9mbGFnczsKK307CisKKy8qICJLaW5kcyIgb2YgbWVzc2FnZXMgc2VudCBmcm9tIHRoZSBoYXJkd2FyZSB0byB0aGUgZHJpdmVyLiAqLworI2RlZmluZSBLSU5EX0VORCAgICAgICAgMAorI2RlZmluZSBLSU5EX0xJVEVSQUwgICAgMSAgIC8qIFNpbXBseSBwYXNzIHRvIGlucHV0IHN5c3RlbSAqLworI2RlZmluZSBLSU5EX0ZJTFRFUkVEICAgMiAgIC8qIEFkZCBhcnRpZmljaWFsIGtleS11cCBldmVudHMsIGRyb3Aga2V5cmVwZWF0cyAqLworI2RlZmluZSBLSU5EX0xVICAgICAgICAgMyAgIC8qIERpcmVjdGlvbmFsIGtleXBhZCBkaWFnb25hbHMgLSBsZWZ0IHVwLCAqLworI2RlZmluZSBLSU5EX1JVICAgICAgICAgNCAgIC8qICAgcmlnaHQgdXAsICAqLworI2RlZmluZSBLSU5EX0xEICAgICAgICAgNSAgIC8qICAgbGVmdCBkb3duLCAqLworI2RlZmluZSBLSU5EX1JEICAgICAgICAgNiAgIC8qICAgcmlnaHQgZG93biAqLworI2RlZmluZSBLSU5EX0FDQ0VMICAgICAgNyAgIC8qIERpcmVjdGlvbmFsIGtleXBhZCAtIGxlZnQsIHJpZ2h0LCB1cCwgZG93bi4qLworCisvKiBUcmFuc2xhdGlvbiB0YWJsZSBmcm9tIGhhcmR3YXJlIG1lc3NhZ2VzIHRvIGlucHV0IGV2ZW50cy4gKi8KK3N0YXRpYyBzdHJ1Y3QKK3sKKwlzaG9ydCBraW5kOworCXVuc2lnbmVkIGNoYXIgZGF0YTEsIGRhdGEyOworCWludCB0eXBlOworCXVuc2lnbmVkIGludCBjb2RlOworCWludCB2YWx1ZTsKK30gIGF0aV9yZW1vdGVfdGJsW10gPSAKK3sKKwkvKiBEaXJlY3Rpb25hbCBjb250cm9sIHBhZCBheGVzICovCisJe0tJTkRfQUNDRUwsICAgMHgzNSwgMHg3MCwgRVZfUkVMLCBSRUxfWCwgLTF9LAkgLyogbGVmdCAqLworCXtLSU5EX0FDQ0VMLCAgIDB4MzYsIDB4NzEsIEVWX1JFTCwgUkVMX1gsIDF9LCAgICAvKiByaWdodCAqLworCXtLSU5EX0FDQ0VMLCAgIDB4MzcsIDB4NzIsIEVWX1JFTCwgUkVMX1ksIC0xfSwJIC8qIHVwICovCisJe0tJTkRfQUNDRUwsICAgMHgzOCwgMHg3MywgRVZfUkVMLCBSRUxfWSwgMX0sICAgIC8qIGRvd24gKi8KKwkvKiBEaXJlY3Rpb25hbCBjb250cm9sIHBhZCBkaWFnb25hbHMgKi8JCisJe0tJTkRfTFUsICAgICAgMHgzOSwgMHg3NCwgRVZfUkVMLCAwLCAwfSwgICAgICAgIC8qIGxlZnQgdXAgKi8KKwl7S0lORF9SVSwgICAgICAweDNhLCAweDc1LCBFVl9SRUwsIDAsIDB9LCAgICAgICAgLyogcmlnaHQgdXAgKi8KKwl7S0lORF9MRCwgICAgICAweDNjLCAweDc3LCBFVl9SRUwsIDAsIDB9LCAgICAgICAgLyogbGVmdCBkb3duICovCisJe0tJTkRfUkQsICAgICAgMHgzYiwgMHg3NiwgRVZfUkVMLCAwLCAwfSwgICAgICAgIC8qIHJpZ2h0IGRvd24gKi8KKworCS8qICJNb3VzZSBidXR0b24iIGJ1dHRvbnMgKi8KKwl7S0lORF9MSVRFUkFMLCAweDNkLCAweDc4LCBFVl9LRVksIEJUTl9MRUZULCAxfSwgLyogbGVmdCBidG4gZG93biAqLworCXtLSU5EX0xJVEVSQUwsIDB4M2UsIDB4NzksIEVWX0tFWSwgQlROX0xFRlQsIDB9LCAvKiBsZWZ0IGJ0biB1cCAqLworCXtLSU5EX0xJVEVSQUwsIDB4NDEsIDB4N2MsIEVWX0tFWSwgQlROX1JJR0hULCAxfSwvKiByaWdodCBidG4gZG93biAqLworCXtLSU5EX0xJVEVSQUwsIDB4NDIsIDB4N2QsIEVWX0tFWSwgQlROX1JJR0hULCAwfSwvKiByaWdodCBidG4gdXAgKi8KKworCS8qIEFydGlmaWNpYWwgImRvdWJsZWNsaWNrIiBldmVudHMgYXJlIGdlbmVyYXRlZCBieSB0aGUgaGFyZHdhcmUuIAorCSAqIFRoZXkgYXJlIG1hcHBlZCB0byB0aGUgInNpZGUiIGFuZCAiZXh0cmEiIG1vdXNlIGJ1dHRvbnMgaGVyZS4gKi8KKwl7S0lORF9GSUxURVJFRCwgMHgzZiwgMHg3YSwgRVZfS0VZLCBCVE5fU0lERSwgMX0sIC8qIGxlZnQgZGJsY2xpY2sgKi8KKwl7S0lORF9GSUxURVJFRCwgMHg0MywgMHg3ZSwgRVZfS0VZLCBCVE5fRVhUUkEsIDF9LC8qIHJpZ2h0IGRibGNsaWNrICovCisKKwkvKiBrZXlib2FyZC4gKi8KKwl7S0lORF9GSUxURVJFRCwgMHhkMiwgMHgwZCwgRVZfS0VZLCBLRVlfMSwgMX0sCisJe0tJTkRfRklMVEVSRUQsIDB4ZDMsIDB4MGUsIEVWX0tFWSwgS0VZXzIsIDF9LAorCXtLSU5EX0ZJTFRFUkVELCAweGQ0LCAweDBmLCBFVl9LRVksIEtFWV8zLCAxfSwKKwl7S0lORF9GSUxURVJFRCwgMHhkNSwgMHgxMCwgRVZfS0VZLCBLRVlfNCwgMX0sCisJe0tJTkRfRklMVEVSRUQsIDB4ZDYsIDB4MTEsIEVWX0tFWSwgS0VZXzUsIDF9LAorCXtLSU5EX0ZJTFRFUkVELCAweGQ3LCAweDEyLCBFVl9LRVksIEtFWV82LCAxfSwKKwl7S0lORF9GSUxURVJFRCwgMHhkOCwgMHgxMywgRVZfS0VZLCBLRVlfNywgMX0sCisJe0tJTkRfRklMVEVSRUQsIDB4ZDksIDB4MTQsIEVWX0tFWSwgS0VZXzgsIDF9LAorCXtLSU5EX0ZJTFRFUkVELCAweGRhLCAweDE1LCBFVl9LRVksIEtFWV85LCAxfSwKKwl7S0lORF9GSUxURVJFRCwgMHhkYywgMHgxNywgRVZfS0VZLCBLRVlfMCwgMX0sCisJe0tJTkRfRklMVEVSRUQsIDB4YzUsIDB4MDAsIEVWX0tFWSwgS0VZX0EsIDF9LAorCXtLSU5EX0ZJTFRFUkVELCAweGM2LCAweDAxLCBFVl9LRVksIEtFWV9CLCAxfSwKKwl7S0lORF9GSUxURVJFRCwgMHhkZSwgMHgxOSwgRVZfS0VZLCBLRVlfQywgMX0sCisJe0tJTkRfRklMVEVSRUQsIDB4ZTAsIDB4MWIsIEVWX0tFWSwgS0VZX0QsIDF9LAorCXtLSU5EX0ZJTFRFUkVELCAweGU2LCAweDIxLCBFVl9LRVksIEtFWV9FLCAxfSwKKwl7S0lORF9GSUxURVJFRCwgMHhlOCwgMHgyMywgRVZfS0VZLCBLRVlfRiwgMX0sCisKKwkvKiAic3BlY2lhbCIga2V5cyAqLworCXtLSU5EX0ZJTFRFUkVELCAweGRkLCAweDE4LCBFVl9LRVksIEtFWV9LUEVOVEVSLCAxfSwgICAgLyogImNoZWNrIiAqLworCXtLSU5EX0ZJTFRFUkVELCAweGRiLCAweDE2LCBFVl9LRVksIEtFWV9NRU5VLCAxfSwgICAgICAgLyogIm1lbnUiICovCisJe0tJTkRfRklMVEVSRUQsIDB4YzcsIDB4MDIsIEVWX0tFWSwgS0VZX1BPV0VSLCAxfSwgICAgICAvKiBQb3dlciAqLworCXtLSU5EX0ZJTFRFUkVELCAweGM4LCAweDAzLCBFVl9LRVksIEtFWV9UViwgMX0sICAgICAgICAgLyogVFYgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhjOSwgMHgwNCwgRVZfS0VZLCBLRVlfRFZELCAxfSwgICAgICAgIC8qIERWRCAqLworCXtLSU5EX0ZJTFRFUkVELCAweGNhLCAweDA1LCBFVl9LRVksIEtFWV9XV1csIDF9LCAgICAgICAgLyogV0VCICovCisJe0tJTkRfRklMVEVSRUQsIDB4Y2IsIDB4MDYsIEVWX0tFWSwgS0VZX0JPT0tNQVJLUywgMX0sICAvKiAiYm9vayIgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhjYywgMHgwNywgRVZfS0VZLCBLRVlfRURJVCwgMX0sICAgICAgIC8qICJoYW5kIiAqLworCXtLSU5EX0ZJTFRFUkVELCAweGUxLCAweDFjLCBFVl9LRVksIEtFWV9DT0ZGRUUsIDF9LCAgICAgLyogInRpbWVyIiAqLworCXtLSU5EX0ZJTFRFUkVELCAweGU1LCAweDIwLCBFVl9LRVksIEtFWV9GUk9OVCwgMX0sICAgICAgLyogIm1heCIgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhlMiwgMHgxZCwgRVZfS0VZLCBLRVlfTEVGVCwgMX0sICAgICAgIC8qIGxlZnQgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhlNCwgMHgxZiwgRVZfS0VZLCBLRVlfUklHSFQsIDF9LCAgICAgIC8qIHJpZ2h0ICovCisJe0tJTkRfRklMVEVSRUQsIDB4ZTcsIDB4MjIsIEVWX0tFWSwgS0VZX0RPV04sIDF9LCAgICAgICAvKiBkb3duICovCisJe0tJTkRfRklMVEVSRUQsIDB4ZGYsIDB4MWEsIEVWX0tFWSwgS0VZX1VQLCAxfSwgICAgICAgICAvKiB1cCAqLworCXtLSU5EX0ZJTFRFUkVELCAweGUzLCAweDFlLCBFVl9LRVksIEtFWV9PSywgMX0sICAgICAgICAgLyogIk9LIiAqLworCXtLSU5EX0ZJTFRFUkVELCAweGNlLCAweDA5LCBFVl9LRVksIEtFWV9WT0xVTUVET1dOLCAxfSwgLyogVk9MICsgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhjZCwgMHgwOCwgRVZfS0VZLCBLRVlfVk9MVU1FVVAsIDF9LCAgIC8qIFZPTCAtICovCisJe0tJTkRfRklMVEVSRUQsIDB4Y2YsIDB4MGEsIEVWX0tFWSwgS0VZX01VVEUsIDF9LCAgICAgICAvKiBNVVRFICAqLworCXtLSU5EX0ZJTFRFUkVELCAweGQwLCAweDBiLCBFVl9LRVksIEtFWV9DSEFOTkVMVVAsIDF9LCAgLyogQ0ggKyAqLworCXtLSU5EX0ZJTFRFUkVELCAweGQxLCAweDBjLCBFVl9LRVksIEtFWV9DSEFOTkVMRE9XTiwgMX0sLyogQ0ggLSAqLworCXtLSU5EX0ZJTFRFUkVELCAweGVjLCAweDI3LCBFVl9LRVksIEtFWV9SRUNPUkQsIDF9LCAgICAgLyogKCBvKSByZWQgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhlYSwgMHgyNSwgRVZfS0VZLCBLRVlfUExBWSwgMX0sICAgICAgIC8qICggPikgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhlOSwgMHgyNCwgRVZfS0VZLCBLRVlfUkVXSU5ELCAxfSwgICAgIC8qICg8PCkgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhlYiwgMHgyNiwgRVZfS0VZLCBLRVlfRk9SV0FSRCwgMX0sICAgIC8qICg+PikgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhlZCwgMHgyOCwgRVZfS0VZLCBLRVlfU1RPUCwgMX0sICAgICAgIC8qIChbXSkgKi8gCisJe0tJTkRfRklMVEVSRUQsIDB4ZWUsIDB4MjksIEVWX0tFWSwgS0VZX1BBVVNFLCAxfSwgICAgICAvKiAoJycpICovCisJe0tJTkRfRklMVEVSRUQsIDB4ZjAsIDB4MmIsIEVWX0tFWSwgS0VZX1BSRVZJT1VTLCAxfSwgICAvKiAoPC0pICovCisJe0tJTkRfRklMVEVSRUQsIDB4ZWYsIDB4MmEsIEVWX0tFWSwgS0VZX05FWFQsIDF9LCAgICAgICAvKiAoPispICovCisJe0tJTkRfRklMVEVSRUQsIDB4ZjIsIDB4MkQsIEVWX0tFWSwgS0VZX0lORk8sIDF9LCAgICAgICAvKiBQTEFZSU5HICovCisJe0tJTkRfRklMVEVSRUQsIDB4ZjMsIDB4MkUsIEVWX0tFWSwgS0VZX0hPTUUsIDF9LCAgICAgICAvKiBUT1AgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhmNCwgMHgyRiwgRVZfS0VZLCBLRVlfRU5ELCAxfSwgICAgICAgIC8qIEVORCAqLworCXtLSU5EX0ZJTFRFUkVELCAweGY1LCAweDMwLCBFVl9LRVksIEtFWV9TRUxFQ1QsIDF9LCAgICAgLyogU0VMRUNUICovCQorCQorCXtLSU5EX0VORCwgMHgwMCwgMHgwMCwgRVZfTUFYICsgMSwgMCwgMH0KK307CisKKy8qIExvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfZHVtcAkJKHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBhY3R1YWxfbGVuZ3RoKTsKK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfZGVsZXRlCQkoc3RydWN0IGF0aV9yZW1vdGUgKmRldik7CitzdGF0aWMgaW50IGF0aV9yZW1vdGVfb3BlbgkJKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2KTsKK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfY2xvc2UJCShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldik7CitzdGF0aWMgaW50IGF0aV9yZW1vdGVfc2VuZHBhY2tldAkoc3RydWN0IGF0aV9yZW1vdGUgKmF0aV9yZW1vdGUsIHUxNiBjbWQsIHVuc2lnbmVkIGNoYXIgKmRhdGEpOworc3RhdGljIHZvaWQgYXRpX3JlbW90ZV9pcnFfb3V0CQkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBhdGlfcmVtb3RlX2lycV9pbgkJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgYXRpX3JlbW90ZV9pbnB1dF9yZXBvcnQJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIGludCBhdGlfcmVtb3RlX2luaXRpYWxpemUJKHN0cnVjdCBhdGlfcmVtb3RlICphdGlfcmVtb3RlKTsKK3N0YXRpYyBpbnQgYXRpX3JlbW90ZV9wcm9iZQkJKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgdm9pZCBhdGlfcmVtb3RlX2Rpc2Nvbm5lY3QJKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOworCisvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IHRvIHJlZ2lzdGVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhdGlfcmVtb3RlX2RyaXZlciA9IHsKKwkub3duZXIgICAgICAgID0gVEhJU19NT0RVTEUsCisJLm5hbWUgICAgICAgICA9ICJhdGlfcmVtb3RlIiwKKwkucHJvYmUgICAgICAgID0gYXRpX3JlbW90ZV9wcm9iZSwKKwkuZGlzY29ubmVjdCAgID0gYXRpX3JlbW90ZV9kaXNjb25uZWN0LAorCS5pZF90YWJsZSAgICAgPSBhdGlfcmVtb3RlX3RhYmxlLAorfTsKKworLyoKKyAqCWF0aV9yZW1vdGVfZHVtcF9pbnB1dAorICovCitzdGF0aWMgdm9pZCBhdGlfcmVtb3RlX2R1bXAodW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpZiAoKGxlbiA9PSAxKSAmJiAoZGF0YVswXSAhPSAodW5zaWduZWQgY2hhcikweGZmKSAmJiAoZGF0YVswXSAhPSAweDAwKSkKKwkJd2FybigiV2VpcmQgYnl0ZSAweCUwMngiLCBkYXRhWzBdKTsKKwllbHNlIGlmIChsZW4gPT0gNCkKKwkJd2FybigiV2VpcmQga2V5ICUwMnggJTAyeCAlMDJ4ICUwMngiLCAKKwkJICAgICBkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdKTsKKwllbHNlCisJCXdhcm4oIldlaXJkIGRhdGEsIGxlbj0lZCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAuLi4iLAorCQkgICAgIGxlbiwgZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSwgZGF0YVszXSwgZGF0YVs0XSwgZGF0YVs1XSk7Cit9CisKKy8qCisgKglhdGlfcmVtb3RlX29wZW4KKyAqLworc3RhdGljIGludCBhdGlfcmVtb3RlX29wZW4oc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXYpCit7CisJc3RydWN0IGF0aV9yZW1vdGUgKmF0aV9yZW1vdGUgPSBpbnB1dGRldi0+cHJpdmF0ZTsKKwlpbnQgcmV0dmFsID0gMDsKKworCWRvd24oJmRpc2Nvbm5lY3Rfc2VtKTsKKworCWlmIChhdGlfcmVtb3RlLT5vcGVuKyspCisJCWdvdG8gZXhpdDsKKworCS8qIE9uIGZpcnN0IG9wZW4sIHN1Ym1pdCB0aGUgcmVhZCB1cmIgd2hpY2ggd2FzIHNldCB1cCBwcmV2aW91c2x5LiAqLworCWF0aV9yZW1vdGUtPmlycV91cmItPmRldiA9IGF0aV9yZW1vdGUtPnVkZXY7CisJaWYgKHVzYl9zdWJtaXRfdXJiKGF0aV9yZW1vdGUtPmlycV91cmIsIEdGUF9LRVJORUwpKSB7CisJCWRldl9lcnIoJmF0aV9yZW1vdGUtPmludGVyZmFjZS0+ZGV2LCAKKwkJCSIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJYXRpX3JlbW90ZS0+b3Blbi0tOworCQlyZXR2YWwgPSAtRUlPOworCX0KKworZXhpdDoKKwl1cCgmZGlzY29ubmVjdF9zZW0pOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKglhdGlfcmVtb3RlX2Nsb3NlCisgKi8KK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXYpCit7CisJc3RydWN0IGF0aV9yZW1vdGUgKmF0aV9yZW1vdGUgPSBpbnB1dGRldi0+cHJpdmF0ZTsKKwkKKwlpZiAoIS0tYXRpX3JlbW90ZS0+b3BlbikKKwkJdXNiX2tpbGxfdXJiKGF0aV9yZW1vdGUtPmlycV91cmIpOworfQorCisvKgorICoJCWF0aV9yZW1vdGVfaXJxX291dAorICovCitzdGF0aWMgdm9pZCBhdGlfcmVtb3RlX2lycV9vdXQoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgYXRpX3JlbW90ZSAqYXRpX3JlbW90ZSA9IHVyYi0+Y29udGV4dDsKKwkKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGV2X2RiZygmYXRpX3JlbW90ZS0+aW50ZXJmYWNlLT5kZXYsICIlczogc3RhdHVzICVkXG4iLAorCQkJX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisJCisJYXRpX3JlbW90ZS0+c2VuZF9mbGFncyB8PSBTRU5EX0ZMQUdfQ09NUExFVEU7CisJd21iKCk7CisJd2FrZV91cCgmYXRpX3JlbW90ZS0+d2FpdCk7Cit9CisKKy8qCisgKglhdGlfcmVtb3RlX3NlbmRwYWNrZXQKKyAqCQkKKyAqCVVzZWQgdG8gc2VuZCBkZXZpY2UgaW5pdGlhbGl6YXRpb24gc3RyaW5ncworICovCitzdGF0aWMgaW50IGF0aV9yZW1vdGVfc2VuZHBhY2tldChzdHJ1Y3QgYXRpX3JlbW90ZSAqYXRpX3JlbW90ZSwgdTE2IGNtZCwgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKwkKKwkvKiBTZXQgdXAgb3V0X3VyYiAqLworCW1lbWNweShhdGlfcmVtb3RlLT5vdXRfdXJiLT50cmFuc2Zlcl9idWZmZXIgKyAxLCBkYXRhLCBMTyhjbWQpKTsKKwkoKGNoYXIgKikgYXRpX3JlbW90ZS0+b3V0X3VyYi0+dHJhbnNmZXJfYnVmZmVyKVswXSA9IEhJKGNtZCk7CQorCisJYXRpX3JlbW90ZS0+b3V0X3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IExPKGNtZCkgKyAxOworCWF0aV9yZW1vdGUtPm91dF91cmItPmRldiA9IGF0aV9yZW1vdGUtPnVkZXY7CisJYXRpX3JlbW90ZS0+c2VuZF9mbGFncyA9IFNFTkRfRkxBR19JTl9QUk9HUkVTUzsKKworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGF0aV9yZW1vdGUtPm91dF91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2RiZygmYXRpX3JlbW90ZS0+aW50ZXJmYWNlLT5kZXYsIAorCQkJICJzZW5kcGFja2V0OiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQ6ICVkXG4iLCByZXR2YWwpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXdhaXRfZXZlbnRfdGltZW91dChhdGlfcmVtb3RlLT53YWl0LAorCQkoKGF0aV9yZW1vdGUtPm91dF91cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpIHx8CisJCSAJKGF0aV9yZW1vdGUtPnNlbmRfZmxhZ3MgJiBTRU5EX0ZMQUdfQ09NUExFVEUpKSwKKwkJSFopOworCXVzYl9raWxsX3VyYihhdGlfcmVtb3RlLT5vdXRfdXJiKTsKKwkKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICoJYXRpX3JlbW90ZV9ldmVudF9sb29rdXAKKyAqLworc3RhdGljIGludCBhdGlfcmVtb3RlX2V2ZW50X2xvb2t1cChpbnQgcmVtLCB1bnNpZ25lZCBjaGFyIGQxLCB1bnNpZ25lZCBjaGFyIGQyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgYXRpX3JlbW90ZV90YmxbaV0ua2luZCAhPSBLSU5EX0VORDsgaSsrKSB7CisJCS8qIAorCQkgKiBEZWNpZGUgaWYgdGhlIHRhYmxlIGVudHJ5IG1hdGNoZXMgdGhlIHJlbW90ZSBpbnB1dC4gCisJCSAqLworCQlpZiAoKCgoYXRpX3JlbW90ZV90YmxbaV0uZGF0YTEgJiAweDBmKSA9PSAoZDEgJiAweDBmKSkpICYmCisJCSAgICAoKCgoYXRpX3JlbW90ZV90YmxbaV0uZGF0YTEgPj4gNCkgLSAKKwkJICAgICAgIChkMSA+PiA0KSArIHJlbSkgJiAweDBmKSA9PSAweDBmKSAmJiAKKwkJICAgIChhdGlfcmVtb3RlX3RibFtpXS5kYXRhMiA9PSBkMikpCisJCQlyZXR1cm4gaTsKKwkJCisJfQorCXJldHVybiAtMTsKK30KKworLyoKKyAqCWF0aV9yZW1vdGVfcmVwb3J0X2lucHV0CisgKi8KK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfaW5wdXRfcmVwb3J0KHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCQoreworCXN0cnVjdCBhdGlfcmVtb3RlICphdGlfcmVtb3RlID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGNoYXIgKmRhdGE9IGF0aV9yZW1vdGUtPmluYnVmOworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9ICZhdGlfcmVtb3RlLT5pZGV2OyAKKwlpbnQgaW5kZXgsIGFjYzsKKwlpbnQgcmVtb3RlX251bTsKKwkKKwkvKiBEZWFsIHdpdGggc3RyYW5nZSBsb29raW5nIGlucHV0cyAqLworCWlmICggKHVyYi0+YWN0dWFsX2xlbmd0aCAhPSA0KSB8fCAoZGF0YVswXSAhPSAweDE0KSB8fCAKKwkJKChkYXRhWzNdICYgMHgwZikgIT0gMHgwMCkgKSB7CisJCWF0aV9yZW1vdGVfZHVtcChkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQlyZXR1cm47CisJfQorCisJLyogTWFzayB1bndhbnRlZCByZW1vdGUgY2hhbm5lbHMuICAqLworCS8qIG5vdGU6IHJlbW90ZV9udW0gaXMgMC1iYXNlZCwgY2hhbm5lbCAxIG9uIHJlbW90ZSA9PSAwIGhlcmUgKi8KKwlyZW1vdGVfbnVtID0gKGRhdGFbM10gPj4gNCkgJiAweDBmOworICAgICAgICBpZiAoY2hhbm5lbF9tYXNrICYgKDEgPDwgKHJlbW90ZV9udW0gKyAxKSkpIHsgCisJCWRiZ2luZm8oJmF0aV9yZW1vdGUtPmludGVyZmFjZS0+ZGV2LAorCQkJIk1hc2tlZCBpbnB1dCBmcm9tIGNoYW5uZWwgMHglMDJ4OiBkYXRhICUwMngsJTAyeCwgbWFzaz0gMHglMDJseFxuIiwKKwkJCXJlbW90ZV9udW0sIGRhdGFbMV0sIGRhdGFbMl0sIGNoYW5uZWxfbWFzayk7CisJCXJldHVybjsKKwl9CisKKwkvKiBMb29rIHVwIGV2ZW50IGNvZGUgaW5kZXggaW4gdHJhbnNsYXRpb24gdGFibGUgKi8KKwlpbmRleCA9IGF0aV9yZW1vdGVfZXZlbnRfbG9va3VwKHJlbW90ZV9udW0sIGRhdGFbMV0sIGRhdGFbMl0pOworCWlmIChpbmRleCA8IDApIHsKKwkJZGV2X3dhcm4oJmF0aV9yZW1vdGUtPmludGVyZmFjZS0+ZGV2LCAKKwkJCSAiVW5rbm93biBpbnB1dCBmcm9tIGNoYW5uZWwgMHglMDJ4OiBkYXRhICUwMngsJTAyeFxuIiwgCisJCQkgcmVtb3RlX251bSwgZGF0YVsxXSwgZGF0YVsyXSk7CisJCXJldHVybjsKKwl9IAorCWRiZ2luZm8oJmF0aV9yZW1vdGUtPmludGVyZmFjZS0+ZGV2LCAKKwkJImNoYW5uZWwgMHglMDJ4OyBkYXRhICUwMngsJTAyeDsgaW5kZXggJWQ7IGtleWNvZGUgJWRcbiIsCisJCXJlbW90ZV9udW0sIGRhdGFbMV0sIGRhdGFbMl0sIGluZGV4LCBhdGlfcmVtb3RlX3RibFtpbmRleF0uY29kZSk7CisJCisJaWYgKGF0aV9yZW1vdGVfdGJsW2luZGV4XS5raW5kID09IEtJTkRfTElURVJBTCkgeworCQlpbnB1dF9yZWdzKGRldiwgcmVncyk7CisJCWlucHV0X2V2ZW50KGRldiwgYXRpX3JlbW90ZV90YmxbaW5kZXhdLnR5cGUsCisJCQlhdGlfcmVtb3RlX3RibFtpbmRleF0uY29kZSwKKwkJCWF0aV9yZW1vdGVfdGJsW2luZGV4XS52YWx1ZSk7CisJCWlucHV0X3N5bmMoZGV2KTsKKwkJCisJCWF0aV9yZW1vdGUtPm9sZF9qaWZmaWVzID0gamlmZmllczsKKwkJcmV0dXJuOworCX0KKwkKKwlpZiAoYXRpX3JlbW90ZV90YmxbaW5kZXhdLmtpbmQgPT0gS0lORF9GSUxURVJFRCkgeworCQkvKiBGaWx0ZXIgZHVwbGljYXRlIGV2ZW50cyB3aGljaCBoYXBwZW4gInRvbyBjbG9zZSIgdG9nZXRoZXIuICovCisJCWlmICgoYXRpX3JlbW90ZS0+b2xkX2RhdGFbMF0gPT0gZGF0YVsxXSkgJiYgCisJIAkJKGF0aV9yZW1vdGUtPm9sZF9kYXRhWzFdID09IGRhdGFbMl0pICYmIAorCSAJCSgoYXRpX3JlbW90ZS0+b2xkX2ppZmZpZXMgKyBGSUxURVJfVElNRSkgPiBqaWZmaWVzKSkgeworCQkJYXRpX3JlbW90ZS0+cmVwZWF0X2NvdW50Kys7CisJCX0gCisJCWVsc2UgeworCQkJYXRpX3JlbW90ZS0+cmVwZWF0X2NvdW50ID0gMDsKKwkJfQorCQkKKwkJYXRpX3JlbW90ZS0+b2xkX2RhdGFbMF0gPSBkYXRhWzFdOworCQlhdGlfcmVtb3RlLT5vbGRfZGF0YVsxXSA9IGRhdGFbMl07CisJCWF0aV9yZW1vdGUtPm9sZF9qaWZmaWVzID0gamlmZmllczsKKworCQlpZiAoKGF0aV9yZW1vdGUtPnJlcGVhdF9jb3VudCA+IDApCisJCSAgICAmJiAoYXRpX3JlbW90ZS0+cmVwZWF0X2NvdW50IDwgNSkpCisJCQlyZXR1cm47CisJCQorCisJCWlucHV0X3JlZ3MoZGV2LCByZWdzKTsKKwkJaW5wdXRfZXZlbnQoZGV2LCBhdGlfcmVtb3RlX3RibFtpbmRleF0udHlwZSwKKwkJCWF0aV9yZW1vdGVfdGJsW2luZGV4XS5jb2RlLCAxKTsKKwkJaW5wdXRfZXZlbnQoZGV2LCBhdGlfcmVtb3RlX3RibFtpbmRleF0udHlwZSwKKwkJCWF0aV9yZW1vdGVfdGJsW2luZGV4XS5jb2RlLCAwKTsKKwkJaW5wdXRfc3luYyhkZXYpOworCisJCXJldHVybjsKKwl9CQkJCisJCisJLyogCisJICogT3RoZXIgZXZlbnQga2luZHMgYXJlIGZyb20gdGhlIGRpcmVjdGlvbmFsIGNvbnRyb2wgcGFkLCBhbmQgaGF2ZSBhbgorCSAqIGFjY2VsZXJhdGlvbiBmYWN0b3IgYXBwbGllZCB0byB0aGVtLiAgV2l0aG91dCB0aGlzIGFjY2VsZXJhdGlvbiwgdGhlCisJICogY29udHJvbCBwYWQgaXMgbW9zdGx5IHVudXNhYmxlLgorCSAqIAorCSAqIElmIGVsYXBzZWQgdGltZSBzaW5jZSBsYXN0IGV2ZW50IGlzID4gMS80IHNlY29uZCwgdXNlciAic3RvcHBlZCIsCisJICogc28gcmVzZXQgYWNjZWxlcmF0aW9uLiBPdGhlcndpc2UsIHVzZXIgaXMgcHJvYmFibHkgaG9sZGluZyB0aGUgY29udHJvbAorCSAqIHBhZCBkb3duLCBzbyB3ZSBpbmNyZWFzZSBhY2NlbGVyYXRpb24sIHJhbXBpbmcgdXAgb3ZlciB0d28gc2Vjb25kcyB0bworCSAqIGEgbWF4aW11bSBzcGVlZC4gIFRoZSBhY2NlbGVyYXRpb24gY3VydmUgaXMgI2RlZmluZWQgYWJvdmUuCisJICovCisJaWYgKChqaWZmaWVzIC0gYXRpX3JlbW90ZS0+b2xkX2ppZmZpZXMpID4gKEhaID4+IDIpKSB7CisJCWFjYyA9IDE7CisJCWF0aV9yZW1vdGUtPmFjY19qaWZmaWVzID0gamlmZmllczsKKwl9CisJZWxzZSBpZiAoKGppZmZpZXMgLSBhdGlfcmVtb3RlLT5hY2NfamlmZmllcykgPCAoSFogPj4gMykpICBhY2MgPSBhY2NlbFswXTsKKwllbHNlIGlmICgoamlmZmllcyAtIGF0aV9yZW1vdGUtPmFjY19qaWZmaWVzKSA8IChIWiA+PiAyKSkgIGFjYyA9IGFjY2VsWzFdOworCWVsc2UgaWYgKChqaWZmaWVzIC0gYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMpIDwgKEhaID4+IDEpKSAgYWNjID0gYWNjZWxbMl07CisJZWxzZSBpZiAoKGppZmZpZXMgLSBhdGlfcmVtb3RlLT5hY2NfamlmZmllcykgPCBIWiApICAgICAgICBhY2MgPSBhY2NlbFszXTsKKwllbHNlIGlmICgoamlmZmllcyAtIGF0aV9yZW1vdGUtPmFjY19qaWZmaWVzKSA8IEhaKyhIWj4+MSkpIGFjYyA9IGFjY2VsWzRdOworCWVsc2UgaWYgKChqaWZmaWVzIC0gYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMpIDwgKEhaIDw8IDEpKSAgYWNjID0gYWNjZWxbNV07CisJZWxzZSBhY2MgPSBhY2NlbFs2XTsKKworCWlucHV0X3JlZ3MoZGV2LCByZWdzKTsKKwlzd2l0Y2ggKGF0aV9yZW1vdGVfdGJsW2luZGV4XS5raW5kKSB7CisJY2FzZSBLSU5EX0FDQ0VMOgorCQlpbnB1dF9ldmVudChkZXYsIGF0aV9yZW1vdGVfdGJsW2luZGV4XS50eXBlLAorCQkJYXRpX3JlbW90ZV90YmxbaW5kZXhdLmNvZGUsCisJCQlhdGlfcmVtb3RlX3RibFtpbmRleF0udmFsdWUgKiBhY2MpOworCQlicmVhazsKKwljYXNlIEtJTkRfTFU6CisJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWCwgLWFjYyk7CisJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWSwgLWFjYyk7CisJCWJyZWFrOworCWNhc2UgS0lORF9SVToKKwkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9YLCBhY2MpOworCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1ksIC1hY2MpOworCQlicmVhazsKKwljYXNlIEtJTkRfTEQ6CisJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWCwgLWFjYyk7CisJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWSwgYWNjKTsKKwkJYnJlYWs7CisJY2FzZSBLSU5EX1JEOgorCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1gsIGFjYyk7CisJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWSwgYWNjKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2RiZygmYXRpX3JlbW90ZS0+aW50ZXJmYWNlLT5kZXYsICJhdGlfcmVtb3RlIGtpbmQ9JWRcbiIsIAorCQkJYXRpX3JlbW90ZV90YmxbaW5kZXhdLmtpbmQpOworCX0KKwlpbnB1dF9zeW5jKGRldik7CisKKwlhdGlfcmVtb3RlLT5vbGRfamlmZmllcyA9IGppZmZpZXM7CisJYXRpX3JlbW90ZS0+b2xkX2RhdGFbMF0gPSBkYXRhWzFdOworCWF0aV9yZW1vdGUtPm9sZF9kYXRhWzFdID0gZGF0YVsyXTsKK30KKworLyoKKyAqCWF0aV9yZW1vdGVfaXJxX2luCisgKi8KK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfaXJxX2luKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGF0aV9yZW1vdGUgKmF0aV9yZW1vdGUgPSB1cmItPmNvbnRleHQ7CisJaW50IHJldHZhbDsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CQkJLyogc3VjY2VzcyAqLworCQlhdGlfcmVtb3RlX2lucHV0X3JlcG9ydCh1cmIsIHJlZ3MpOworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgkvKiB1bmxpbmsgKi8KKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQlkZXZfZGJnKCZhdGlfcmVtb3RlLT5pbnRlcmZhY2UtPmRldiwgIiVzOiB1cmIgZXJyb3Igc3RhdHVzLCB1bmxpbms/IFxuIiwKKwkJCV9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsJCisJZGVmYXVsdDoJCS8qIGVycm9yICovCisJCWRldl9kYmcoJmF0aV9yZW1vdGUtPmludGVyZmFjZS0+ZGV2LCAiJXM6IE5vbnplcm8gdXJiIHN0YXR1cyAlZFxuIiwgCisJCQlfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwl9CisJCisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBTTEFCX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZGV2X2VycigmYXRpX3JlbW90ZS0+aW50ZXJmYWNlLT5kZXYsICIlczogdXNiX3N1Ym1pdF91cmIoKT0lZFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcmV0dmFsKTsKK30KKworLyoKKyAqCWF0aV9yZW1vdGVfZGVsZXRlCisgKi8KK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfZGVsZXRlKHN0cnVjdCBhdGlfcmVtb3RlICphdGlfcmVtb3RlKQoreworCWlmICghYXRpX3JlbW90ZSkgcmV0dXJuOworCisJaWYgKGF0aV9yZW1vdGUtPmlycV91cmIpCisJCXVzYl9raWxsX3VyYihhdGlfcmVtb3RlLT5pcnFfdXJiKTsKKworCWlmIChhdGlfcmVtb3RlLT5vdXRfdXJiKQorCQl1c2Jfa2lsbF91cmIoYXRpX3JlbW90ZS0+b3V0X3VyYik7CisKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSgmYXRpX3JlbW90ZS0+aWRldik7CisKKwlpZiAoYXRpX3JlbW90ZS0+aW5idWYpCisJCXVzYl9idWZmZXJfZnJlZShhdGlfcmVtb3RlLT51ZGV2LCBEQVRBX0JVRlNJWkUsIAorCQkJCWF0aV9yZW1vdGUtPmluYnVmLCBhdGlfcmVtb3RlLT5pbmJ1Zl9kbWEpOworCQkKKwlpZiAoYXRpX3JlbW90ZS0+b3V0YnVmKQorCQl1c2JfYnVmZmVyX2ZyZWUoYXRpX3JlbW90ZS0+dWRldiwgREFUQV9CVUZTSVpFLCAKKwkJCQlhdGlfcmVtb3RlLT5pbmJ1ZiwgYXRpX3JlbW90ZS0+b3V0YnVmX2RtYSk7CisJCisJaWYgKGF0aV9yZW1vdGUtPmlycV91cmIpCisJCXVzYl9mcmVlX3VyYihhdGlfcmVtb3RlLT5pcnFfdXJiKTsKKwkKKwlpZiAoYXRpX3JlbW90ZS0+b3V0X3VyYikKKwkJdXNiX2ZyZWVfdXJiKGF0aV9yZW1vdGUtPm91dF91cmIpOworCisJa2ZyZWUoYXRpX3JlbW90ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfaW5wdXRfaW5pdChzdHJ1Y3QgYXRpX3JlbW90ZSAqYXRpX3JlbW90ZSkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2ID0gJihhdGlfcmVtb3RlLT5pZGV2KTsKKwlpbnQgaTsKKworCWlkZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfUkVMKTsKKwlpZGV2LT5rZXliaXRbTE9ORyhCVE5fTU9VU0UpXSA9ICggQklUKEJUTl9MRUZUKSB8IEJJVChCVE5fUklHSFQpIHwgCisJCQkJCSAgQklUKEJUTl9TSURFKSB8IEJJVChCVE5fRVhUUkEpICk7CisJaWRldi0+cmVsYml0WzBdID0gQklUKFJFTF9YKSB8IEJJVChSRUxfWSk7CisJZm9yIChpID0gMDsgYXRpX3JlbW90ZV90YmxbaV0ua2luZCAhPSBLSU5EX0VORDsgaSsrKQorCQlpZiAoYXRpX3JlbW90ZV90YmxbaV0udHlwZSA9PSBFVl9LRVkpCisJCQlzZXRfYml0KGF0aV9yZW1vdGVfdGJsW2ldLmNvZGUsIGlkZXYtPmtleWJpdCk7CisJCisJaWRldi0+cHJpdmF0ZSA9IGF0aV9yZW1vdGU7CisJaWRldi0+b3BlbiA9IGF0aV9yZW1vdGVfb3BlbjsKKwlpZGV2LT5jbG9zZSA9IGF0aV9yZW1vdGVfY2xvc2U7CisJCisJaWRldi0+bmFtZSA9IGF0aV9yZW1vdGUtPm5hbWU7CisJaWRldi0+cGh5cyA9IGF0aV9yZW1vdGUtPnBoeXM7CisJCisJaWRldi0+aWQuYnVzdHlwZSA9IEJVU19VU0I7CQkKKwlpZGV2LT5pZC52ZW5kb3IgPSBsZTE2X3RvX2NwdShhdGlfcmVtb3RlLT51ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwlpZGV2LT5pZC5wcm9kdWN0ID0gbGUxNl90b19jcHUoYXRpX3JlbW90ZS0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCWlkZXYtPmlkLnZlcnNpb24gPSBsZTE2X3RvX2NwdShhdGlfcmVtb3RlLT51ZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7Cit9CisKK3N0YXRpYyBpbnQgYXRpX3JlbW90ZV9pbml0aWFsaXplKHN0cnVjdCBhdGlfcmVtb3RlICphdGlfcmVtb3RlKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gYXRpX3JlbW90ZS0+dWRldjsKKwlpbnQgcGlwZSwgbWF4cDsKKwkJCisJaW5pdF93YWl0cXVldWVfaGVhZCgmYXRpX3JlbW90ZS0+d2FpdCk7CisKKwkvKiBTZXQgdXAgaXJxX3VyYiAqLworCXBpcGUgPSB1c2JfcmN2aW50cGlwZSh1ZGV2LCBhdGlfcmVtb3RlLT5lbmRwb2ludF9pbi0+YkVuZHBvaW50QWRkcmVzcyk7CisJbWF4cCA9IHVzYl9tYXhwYWNrZXQodWRldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOworCW1heHAgPSAobWF4cCA+IERBVEFfQlVGU0laRSkgPyBEQVRBX0JVRlNJWkUgOiBtYXhwOworCQorCXVzYl9maWxsX2ludF91cmIoYXRpX3JlbW90ZS0+aXJxX3VyYiwgdWRldiwgcGlwZSwgYXRpX3JlbW90ZS0+aW5idWYsIAorCQkJIG1heHAsIGF0aV9yZW1vdGVfaXJxX2luLCBhdGlfcmVtb3RlLCAKKwkJCSBhdGlfcmVtb3RlLT5lbmRwb2ludF9pbi0+YkludGVydmFsKTsKKwlhdGlfcmVtb3RlLT5pcnFfdXJiLT50cmFuc2Zlcl9kbWEgPSBhdGlfcmVtb3RlLT5pbmJ1Zl9kbWE7CisJYXRpX3JlbW90ZS0+aXJxX3VyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJCisJLyogU2V0IHVwIG91dF91cmIgKi8KKwlwaXBlID0gdXNiX3NuZGludHBpcGUodWRldiwgYXRpX3JlbW90ZS0+ZW5kcG9pbnRfb3V0LT5iRW5kcG9pbnRBZGRyZXNzKTsKKwltYXhwID0gdXNiX21heHBhY2tldCh1ZGV2LCBwaXBlLCB1c2JfcGlwZW91dChwaXBlKSk7CisJbWF4cCA9IChtYXhwID4gREFUQV9CVUZTSVpFKSA/IERBVEFfQlVGU0laRSA6IG1heHA7CisKKwl1c2JfZmlsbF9pbnRfdXJiKGF0aV9yZW1vdGUtPm91dF91cmIsIHVkZXYsIHBpcGUsIGF0aV9yZW1vdGUtPm91dGJ1ZiwgCisJCQkgbWF4cCwgYXRpX3JlbW90ZV9pcnFfb3V0LCBhdGlfcmVtb3RlLCAKKwkJCSBhdGlfcmVtb3RlLT5lbmRwb2ludF9vdXQtPmJJbnRlcnZhbCk7CisJYXRpX3JlbW90ZS0+b3V0X3VyYi0+dHJhbnNmZXJfZG1hID0gYXRpX3JlbW90ZS0+b3V0YnVmX2RtYTsKKwlhdGlfcmVtb3RlLT5vdXRfdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCS8qIHNlbmQgaW5pdGlhbGl6YXRpb24gc3RyaW5ncyAqLworCWlmICgoYXRpX3JlbW90ZV9zZW5kcGFja2V0KGF0aV9yZW1vdGUsIDB4ODAwNCwgaW5pdDEpKSB8fAorCSAgICAoYXRpX3JlbW90ZV9zZW5kcGFja2V0KGF0aV9yZW1vdGUsIDB4ODAwNywgaW5pdDIpKSkgeworCQlkZXZfZXJyKCZhdGlfcmVtb3RlLT5pbnRlcmZhY2UtPmRldiwgCisJCQkgIkluaXRpYWxpemluZyBhdGlfcmVtb3RlIGhhcmR3YXJlIGZhaWxlZC5cbiIpOworCQlyZXR1cm4gMTsKKwl9CisJCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKglhdGlfcmVtb3RlX3Byb2JlCisgKi8KK3N0YXRpYyBpbnQgYXRpX3JlbW90ZV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisJc3RydWN0IGF0aV9yZW1vdGUgKmF0aV9yZW1vdGUgPSBOVUxMOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2hvc3Q7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisJY2hhciBwYXRoWzY0XTsKKworCS8qIEFsbG9jYXRlIGFuZCBjbGVhciBhbiBhdGlfcmVtb3RlIHN0cnVjdCAqLworCWlmICghKGF0aV9yZW1vdGUgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IGF0aV9yZW1vdGUpLCBHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChhdGlfcmVtb3RlLCAweDAwLCBzaXplb2YgKHN0cnVjdCBhdGlfcmVtb3RlKSk7CisKKwlpZmFjZV9ob3N0ID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKKwlpZiAoaWZhY2VfaG9zdC0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDIpIHsKKwkJZXJyKCIlczogVW5leHBlY3RlZCBkZXNjLmJOdW1FbmRwb2ludHNcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3I7CisJfQorCisJYXRpX3JlbW90ZS0+ZW5kcG9pbnRfaW4gPSAmKGlmYWNlX2hvc3QtPmVuZHBvaW50WzBdLmRlc2MpOworCWF0aV9yZW1vdGUtPmVuZHBvaW50X291dCA9ICYoaWZhY2VfaG9zdC0+ZW5kcG9pbnRbMV0uZGVzYyk7CisJYXRpX3JlbW90ZS0+dWRldiA9IHVkZXY7CisJYXRpX3JlbW90ZS0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworCisJaWYgKCEoYXRpX3JlbW90ZS0+ZW5kcG9pbnRfaW4tPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSkgeworCQllcnIoIiVzOiBVbmV4cGVjdGVkIGVuZHBvaW50X2luLT5iRW5kcG9pbnRBZGRyZXNzXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycm9yOworCX0KKwlpZiAoKGF0aV9yZW1vdGUtPmVuZHBvaW50X2luLT5ibUF0dHJpYnV0ZXMgJiAzKSAhPSAzKSB7CisJCWVycigiJXM6IFVuZXhwZWN0ZWQgZW5kcG9pbnRfaW4tPmJtQXR0cmlidXRlc1xuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKGxlMTZfdG9fY3B1KGF0aV9yZW1vdGUtPmVuZHBvaW50X2luLT53TWF4UGFja2V0U2l6ZSkgPT0gMCkgeworCQllcnIoIiVzOiBlbmRwb2ludF9pbiBtZXNzYWdlIHNpemU9PTA/IFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBBbGxvY2F0ZSBVUkIgYnVmZmVycywgVVJCcyAqLworCWF0aV9yZW1vdGUtPmluYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LCBEQVRBX0JVRlNJWkUsIFNMQUJfQVRPTUlDLAorCQkJCQkgICAgICZhdGlfcmVtb3RlLT5pbmJ1Zl9kbWEpOworCWlmICghYXRpX3JlbW90ZS0+aW5idWYpCisJCWdvdG8gZXJyb3I7CisKKwlhdGlfcmVtb3RlLT5vdXRidWYgPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsIERBVEFfQlVGU0laRSwgU0xBQl9BVE9NSUMsCisJCQkJCSAgICAgICZhdGlfcmVtb3RlLT5vdXRidWZfZG1hKTsKKwlpZiAoIWF0aV9yZW1vdGUtPm91dGJ1ZikKKwkJZ290byBlcnJvcjsKKworCWF0aV9yZW1vdGUtPmlycV91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghYXRpX3JlbW90ZS0+aXJxX3VyYikKKwkJZ290byBlcnJvcjsKKworCWF0aV9yZW1vdGUtPm91dF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghYXRpX3JlbW90ZS0+b3V0X3VyYikKKwkJZ290byBlcnJvcjsKKworCXVzYl9tYWtlX3BhdGgodWRldiwgcGF0aCwgTkFNRV9CVUZTSVpFKTsKKwlzcHJpbnRmKGF0aV9yZW1vdGUtPnBoeXMsICIlcy9pbnB1dCVkIiwgcGF0aCwgQVRJX0lOUFVUTlVNKTsKKwlpZiAodWRldi0+bWFudWZhY3R1cmVyKQorCQlzdHJjYXQoYXRpX3JlbW90ZS0+bmFtZSwgdWRldi0+bWFudWZhY3R1cmVyKTsKKworCWlmICh1ZGV2LT5wcm9kdWN0KQorCQlzcHJpbnRmKGF0aV9yZW1vdGUtPm5hbWUsICIlcyAlcyIsIGF0aV9yZW1vdGUtPm5hbWUsIHVkZXYtPnByb2R1Y3QpOworCisJaWYgKCFzdHJsZW4oYXRpX3JlbW90ZS0+bmFtZSkpCisJCXNwcmludGYoYXRpX3JlbW90ZS0+bmFtZSwgRFJJVkVSX0RFU0MgIiglMDR4LCUwNHgpIiwKKwkJCWxlMTZfdG9fY3B1KGF0aV9yZW1vdGUtPnVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLCAKKwkJCWxlMTZfdG9fY3B1KGF0aV9yZW1vdGUtPnVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisKKwkvKiBEZXZpY2UgSGFyZHdhcmUgSW5pdGlhbGl6YXRpb24gLSBmaWxscyBpbiBhdGlfcmVtb3RlLT5pZGV2IGZyb20gdWRldi4gKi8KKwlyZXR2YWwgPSBhdGlfcmVtb3RlX2luaXRpYWxpemUoYXRpX3JlbW90ZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvcjsKKworCS8qIFNldCB1cCBhbmQgcmVnaXN0ZXIgaW5wdXQgZGV2aWNlICovCisJYXRpX3JlbW90ZV9pbnB1dF9pbml0KGF0aV9yZW1vdGUpOworCWlucHV0X3JlZ2lzdGVyX2RldmljZSgmYXRpX3JlbW90ZS0+aWRldik7CisKKwlkZXZfaW5mbygmYXRpX3JlbW90ZS0+aW50ZXJmYWNlLT5kZXYsICJJbnB1dCByZWdpc3RlcmVkOiAlcyBvbiAlc1xuIiwgCisJCSBhdGlfcmVtb3RlLT5uYW1lLCBwYXRoKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBhdGlfcmVtb3RlKTsKKwkKK2Vycm9yOgorCWlmIChyZXR2YWwpCisJCWF0aV9yZW1vdGVfZGVsZXRlKGF0aV9yZW1vdGUpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqCWF0aV9yZW1vdGVfZGlzY29ubmVjdAorICovCitzdGF0aWMgdm9pZCBhdGlfcmVtb3RlX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgYXRpX3JlbW90ZSAqYXRpX3JlbW90ZTsKKworCWRvd24oJmRpc2Nvbm5lY3Rfc2VtKTsKKworCWF0aV9yZW1vdGUgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCWlmICghYXRpX3JlbW90ZSkgeworCQl3YXJuKCIlcyAtIG51bGwgZGV2aWNlP1xuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKwkKKwlhdGlfcmVtb3RlX2RlbGV0ZShhdGlfcmVtb3RlKTsKKworCXVwKCZkaXNjb25uZWN0X3NlbSk7Cit9CisKKy8qCisgKglhdGlfcmVtb3RlX2luaXQKKyAqLworc3RhdGljIGludCBfX2luaXQgYXRpX3JlbW90ZV9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKwkKKwlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmF0aV9yZW1vdGVfZHJpdmVyKTsKKwlpZiAocmVzdWx0KQorCQllcnIoInVzYl9yZWdpc3RlciBlcnJvciAjJWRcbiIsIHJlc3VsdCk7CisJZWxzZQorCQlpbmZvKCJSZWdpc3RlcmVkIFVTQiBkcml2ZXIgIiBEUklWRVJfREVTQyAiIHYuICIgRFJJVkVSX1ZFUlNJT04pOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqCWF0aV9yZW1vdGVfZXhpdAorICovCitzdGF0aWMgdm9pZCBfX2V4aXQgYXRpX3JlbW90ZV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmF0aV9yZW1vdGVfZHJpdmVyKTsKK30KKworLyogCisgKgltb2R1bGUgc3BlY2lmaWNhdGlvbiAKKyAqLworCittb2R1bGVfaW5pdChhdGlfcmVtb3RlX2luaXQpOworbW9kdWxlX2V4aXQoYXRpX3JlbW90ZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9maXhwLWFyaXRoLmggYi9kcml2ZXJzL3VzYi9pbnB1dC9maXhwLWFyaXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjYTViOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2ZpeHAtYXJpdGguaApAQCAtMCwwICsxLDkwIEBACisjaWZuZGVmIF9GSVhQX0FSSVRIX0gKKyNkZWZpbmUgX0ZJWFBfQVJJVEhfSAorCisvKgorICogJCQKKyAqCisgKiBTaW1wbGlzdGljIGZpeGVkLXBvaW50IGFyaXRobWV0aWNzLgorICogSG1tLCBJJ20gcHJvYmFibHkgZHVwbGljYXRpbmcgc29tZSBjb2RlIDooCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyIEpvaGFubiBEZW5ldXgKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBTaG91bGQgeW91IG5lZWQgdG8gY29udGFjdCBtZSwgdGhlIGF1dGhvciwgeW91IGNhbiBkbyBzbyBieQorICogZS1tYWlsIC0gbWFpbCB5b3VyIG1lc3NhZ2UgdG8gPGRlbmV1eEBpZnJhbmNlLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLy8gVGhlIHR5cGUgcmVwcmVzZW50aW5nIGZpeGVkLXBvaW50IHZhbHVlcwordHlwZWRlZiBzMTYgZml4cF90OworCisjZGVmaW5lIEZSQUNfTiA4CisjZGVmaW5lIEZSQUNfTUFTSyAoKDE8PEZSQUNfTiktMSkKKworLy8gTm90IHRvIGJlIHVzZWQgZGlyZWN0bHkuIFVzZSBmaXhwX3tjb3Msc2lufQorc3RhdGljIGZpeHBfdCBjb3NfdGFibGVbNDVdID0geworCTB4MDEwMCwJMHgwMEZGLAkweDAwRkYsCTB4MDBGRSwJMHgwMEZELAkweDAwRkMsCTB4MDBGQSwJMHgwMEY4LAorCTB4MDBGNiwJMHgwMEYzLAkweDAwRjAsCTB4MDBFRCwJMHgwMEU5LAkweDAwRTYsCTB4MDBFMiwJMHgwMERELAorCTB4MDBEOSwJMHgwMEQ0LAkweDAwQ0YsCTB4MDBDOSwJMHgwMEM0LAkweDAwQkUsCTB4MDBCOCwJMHgwMEIxLAorCTB4MDBBQiwJMHgwMEE0LAkweDAwOUQsCTB4MDA5NiwJMHgwMDhGLAkweDAwODcsCTB4MDA4MCwJMHgwMDc4LAorCTB4MDA3MCwJMHgwMDY4LAkweDAwNUYsCTB4MDA1NywJMHgwMDRGLAkweDAwNDYsCTB4MDAzRCwJMHgwMDM1LAorCTB4MDAyQywJMHgwMDIzLAkweDAwMUEsCTB4MDAxMSwJMHgwMDA4Cit9OworCisKKy8qIGE6IDEyMyAtPiAxMjMuMCAqLworc3RhdGljIGlubGluZSBmaXhwX3QgZml4cF9uZXcoczE2IGEpCit7CisJcmV0dXJuIGE8PEZSQUNfTjsKK30KKworLyogYTogMHhGRkZGIC0+IC0xLjAKKyAgICAgIDB4ODAwMCAtPiAxLjAKKyAgICAgIDB4MDAwMCAtPiAwLjAKKyovCitzdGF0aWMgaW5saW5lIGZpeHBfdCBmaXhwX25ldzE2KHMxNiBhKQoreworCXJldHVybiAoKHMzMilhKT4+KDE2LUZSQUNfTik7Cit9CisKK3N0YXRpYyBpbmxpbmUgZml4cF90IGZpeHBfY29zKHVuc2lnbmVkIGludCBkZWdyZWVzKQoreworCWludCBxdWFkcmFudCA9IChkZWdyZWVzIC8gOTApICYgMzsKKwl1bnNpZ25lZCBpbnQgaSA9IGRlZ3JlZXMgJSA5MDsKKworCWlmIChxdWFkcmFudCA9PSAxIHx8IHF1YWRyYW50ID09IDMpIHsKKwkJaSA9IDg5IC0gaTsKKwl9CisKKwlpID4+PSAxOworCisJcmV0dXJuIChxdWFkcmFudCA9PSAxIHx8IHF1YWRyYW50ID09IDIpPyAtY29zX3RhYmxlW2ldIDogY29zX3RhYmxlW2ldOworfQorCitzdGF0aWMgaW5saW5lIGZpeHBfdCBmaXhwX3Npbih1bnNpZ25lZCBpbnQgZGVncmVlcykKK3sKKwlyZXR1cm4gLWZpeHBfY29zKGRlZ3JlZXMgKyA5MCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZml4cF90IGZpeHBfbXVsdChmaXhwX3QgYSwgZml4cF90IGIpCit7CisJcmV0dXJuICgoczMyKShhKmIpKT4+RlJBQ19OOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1jb3JlLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NjJjZjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtY29yZS5jCkBAIC0wLDAgKzEsMTg2NCBAQAorLyoKKyAqICBVU0IgSElEIHN1cHBvcnQgZm9yIExpbnV4CisgKgorICogIENvcHlyaWdodCAoYykgMTk5OSBBbmRyZWFzIEdhbAorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDAxIFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworI3VuZGVmIERFQlVHCisjdW5kZWYgREVCVUdfREFUQQorCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJoaWQuaCIKKyNpbmNsdWRlIDxsaW51eC9oaWRkZXYuaD4KKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2Mi4wMSIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiQW5kcmVhcyBHYWwsIFZvanRlY2ggUGF2bGlrIgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIEhJRCBjb3JlIGRyaXZlciIKKyNkZWZpbmUgRFJJVkVSX0xJQ0VOU0UgIkdQTCIKKworc3RhdGljIGNoYXIgKmhpZF90eXBlc1tdID0geyJEZXZpY2UiLCAiUG9pbnRlciIsICJNb3VzZSIsICJEZXZpY2UiLCAiSm95c3RpY2siLAorCQkJCSJHYW1lcGFkIiwgIktleWJvYXJkIiwgIktleXBhZCIsICJNdWx0aS1BeGlzIENvbnRyb2xsZXIifTsKKy8qCisgKiBNb2R1bGUgcGFyYW1ldGVycy4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IGhpZF9tb3VzZXBvbGxfaW50ZXJ2YWw7Cittb2R1bGVfcGFyYW1fbmFtZWQobW91c2Vwb2xsLCBoaWRfbW91c2Vwb2xsX2ludGVydmFsLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobW91c2Vwb2xsLCAiUG9sbGluZyBpbnRlcnZhbCBvZiBtaWNlIik7CisKKy8qCisgKiBSZWdpc3RlciBhIG5ldyByZXBvcnQgZm9yIGEgZGV2aWNlLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgaGlkX3JlcG9ydCAqaGlkX3JlZ2lzdGVyX3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqZGV2aWNlLCB1bnNpZ25lZCB0eXBlLCB1bnNpZ25lZCBpZCkKK3sKKwlzdHJ1Y3QgaGlkX3JlcG9ydF9lbnVtICpyZXBvcnRfZW51bSA9IGRldmljZS0+cmVwb3J0X2VudW0gKyB0eXBlOworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisKKwlpZiAocmVwb3J0X2VudW0tPnJlcG9ydF9pZF9oYXNoW2lkXSkKKwkJcmV0dXJuIHJlcG9ydF9lbnVtLT5yZXBvcnRfaWRfaGFzaFtpZF07CisKKwlpZiAoIShyZXBvcnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkX3JlcG9ydCksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIE5VTEw7CisJbWVtc2V0KHJlcG9ydCwgMCwgc2l6ZW9mKHN0cnVjdCBoaWRfcmVwb3J0KSk7CisKKwlpZiAoaWQgIT0gMCkKKwkJcmVwb3J0X2VudW0tPm51bWJlcmVkID0gMTsKKworCXJlcG9ydC0+aWQgPSBpZDsKKwlyZXBvcnQtPnR5cGUgPSB0eXBlOworCXJlcG9ydC0+c2l6ZSA9IDA7CisJcmVwb3J0LT5kZXZpY2UgPSBkZXZpY2U7CisJcmVwb3J0X2VudW0tPnJlcG9ydF9pZF9oYXNoW2lkXSA9IHJlcG9ydDsKKworCWxpc3RfYWRkX3RhaWwoJnJlcG9ydC0+bGlzdCwgJnJlcG9ydF9lbnVtLT5yZXBvcnRfbGlzdCk7CisKKwlyZXR1cm4gcmVwb3J0OworfQorCisvKgorICogUmVnaXN0ZXIgYSBuZXcgZmllbGQgZm9yIHRoaXMgcmVwb3J0LgorICovCisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2ZpZWxkICpoaWRfcmVnaXN0ZXJfZmllbGQoc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCwgdW5zaWduZWQgdXNhZ2VzLCB1bnNpZ25lZCB2YWx1ZXMpCit7CisJc3RydWN0IGhpZF9maWVsZCAqZmllbGQ7CisKKwlpZiAocmVwb3J0LT5tYXhmaWVsZCA9PSBISURfTUFYX0ZJRUxEUykgeworCQlkYmcoInRvbyBtYW55IGZpZWxkcyBpbiByZXBvcnQiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKCEoZmllbGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkX2ZpZWxkKSArIHVzYWdlcyAqIHNpemVvZihzdHJ1Y3QgaGlkX3VzYWdlKQorCQkrIHZhbHVlcyAqIHNpemVvZih1bnNpZ25lZCksIEdGUF9LRVJORUwpKSkgcmV0dXJuIE5VTEw7CisKKwltZW1zZXQoZmllbGQsIDAsIHNpemVvZihzdHJ1Y3QgaGlkX2ZpZWxkKSArIHVzYWdlcyAqIHNpemVvZihzdHJ1Y3QgaGlkX3VzYWdlKQorCQkrIHZhbHVlcyAqIHNpemVvZih1bnNpZ25lZCkpOworCisJZmllbGQtPmluZGV4ID0gcmVwb3J0LT5tYXhmaWVsZCsrOworCXJlcG9ydC0+ZmllbGRbZmllbGQtPmluZGV4XSA9IGZpZWxkOworCWZpZWxkLT51c2FnZSA9IChzdHJ1Y3QgaGlkX3VzYWdlICopKGZpZWxkICsgMSk7CisJZmllbGQtPnZhbHVlID0gKHVuc2lnbmVkICopKGZpZWxkLT51c2FnZSArIHVzYWdlcyk7CisJZmllbGQtPnJlcG9ydCA9IHJlcG9ydDsKKworCXJldHVybiBmaWVsZDsKK30KKworLyoKKyAqIE9wZW4gYSBjb2xsZWN0aW9uLiBUaGUgdHlwZS91c2FnZSBpcyBwdXNoZWQgb24gdGhlIHN0YWNrLgorICovCisKK3N0YXRpYyBpbnQgb3Blbl9jb2xsZWN0aW9uKHN0cnVjdCBoaWRfcGFyc2VyICpwYXJzZXIsIHVuc2lnbmVkIHR5cGUpCit7CisJc3RydWN0IGhpZF9jb2xsZWN0aW9uICpjb2xsZWN0aW9uOworCXVuc2lnbmVkIHVzYWdlOworCisJdXNhZ2UgPSBwYXJzZXItPmxvY2FsLnVzYWdlWzBdOworCisJaWYgKHBhcnNlci0+Y29sbGVjdGlvbl9zdGFja19wdHIgPT0gSElEX0NPTExFQ1RJT05fU1RBQ0tfU0laRSkgeworCQlkYmcoImNvbGxlY3Rpb24gc3RhY2sgb3ZlcmZsb3ciKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChwYXJzZXItPmRldmljZS0+bWF4Y29sbGVjdGlvbiA9PSBwYXJzZXItPmRldmljZS0+Y29sbGVjdGlvbl9zaXplKSB7CisJCWNvbGxlY3Rpb24gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkX2NvbGxlY3Rpb24pICoKKwkJCQlwYXJzZXItPmRldmljZS0+Y29sbGVjdGlvbl9zaXplICogMiwgR0ZQX0tFUk5FTCk7CisJCWlmIChjb2xsZWN0aW9uID09IE5VTEwpIHsKKwkJCWRiZygiZmFpbGVkIHRvIHJlYWxsb2NhdGUgY29sbGVjdGlvbiBhcnJheSIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCW1lbWNweShjb2xsZWN0aW9uLCBwYXJzZXItPmRldmljZS0+Y29sbGVjdGlvbiwKKwkJCXNpemVvZihzdHJ1Y3QgaGlkX2NvbGxlY3Rpb24pICoKKwkJCXBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uX3NpemUpOworCQltZW1zZXQoY29sbGVjdGlvbiArIHBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uX3NpemUsIDAsCisJCQlzaXplb2Yoc3RydWN0IGhpZF9jb2xsZWN0aW9uKSAqCisJCQlwYXJzZXItPmRldmljZS0+Y29sbGVjdGlvbl9zaXplKTsKKwkJa2ZyZWUocGFyc2VyLT5kZXZpY2UtPmNvbGxlY3Rpb24pOworCQlwYXJzZXItPmRldmljZS0+Y29sbGVjdGlvbiA9IGNvbGxlY3Rpb247CisJCXBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uX3NpemUgKj0gMjsKKwl9CisKKwlwYXJzZXItPmNvbGxlY3Rpb25fc3RhY2tbcGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrX3B0cisrXSA9CisJCXBhcnNlci0+ZGV2aWNlLT5tYXhjb2xsZWN0aW9uOworCisJY29sbGVjdGlvbiA9IHBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uICsKKwkJcGFyc2VyLT5kZXZpY2UtPm1heGNvbGxlY3Rpb24rKzsKKwljb2xsZWN0aW9uLT50eXBlID0gdHlwZTsKKwljb2xsZWN0aW9uLT51c2FnZSA9IHVzYWdlOworCWNvbGxlY3Rpb24tPmxldmVsID0gcGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrX3B0ciAtIDE7CisKKwlpZiAodHlwZSA9PSBISURfQ09MTEVDVElPTl9BUFBMSUNBVElPTikKKwkJcGFyc2VyLT5kZXZpY2UtPm1heGFwcGxpY2F0aW9uKys7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENsb3NlIGEgY29sbGVjdGlvbi4KKyAqLworCitzdGF0aWMgaW50IGNsb3NlX2NvbGxlY3Rpb24oc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlcikKK3sKKwlpZiAoIXBhcnNlci0+Y29sbGVjdGlvbl9zdGFja19wdHIpIHsKKwkJZGJnKCJjb2xsZWN0aW9uIHN0YWNrIHVuZGVyZmxvdyIpOworCQlyZXR1cm4gLTE7CisJfQorCXBhcnNlci0+Y29sbGVjdGlvbl9zdGFja19wdHItLTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENsaW1iIHVwIHRoZSBzdGFjaywgc2VhcmNoIGZvciB0aGUgc3BlY2lmaWVkIGNvbGxlY3Rpb24gdHlwZQorICogYW5kIHJldHVybiB0aGUgdXNhZ2UuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGhpZF9sb29rdXBfY29sbGVjdGlvbihzdHJ1Y3QgaGlkX3BhcnNlciAqcGFyc2VyLCB1bnNpZ25lZCB0eXBlKQoreworCWludCBuOworCWZvciAobiA9IHBhcnNlci0+Y29sbGVjdGlvbl9zdGFja19wdHIgLSAxOyBuID49IDA7IG4tLSkKKwkJaWYgKHBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uW3BhcnNlci0+Y29sbGVjdGlvbl9zdGFja1tuXV0udHlwZSA9PSB0eXBlKQorCQkJcmV0dXJuIHBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uW3BhcnNlci0+Y29sbGVjdGlvbl9zdGFja1tuXV0udXNhZ2U7CisJcmV0dXJuIDA7IC8qIHdlIGtub3cgbm90aGluZyBhYm91dCB0aGlzIHVzYWdlIHR5cGUgKi8KK30KKworLyoKKyAqIEFkZCBhIHVzYWdlIHRvIHRoZSB0ZW1wb3JhcnkgcGFyc2VyIHRhYmxlLgorICovCisKK3N0YXRpYyBpbnQgaGlkX2FkZF91c2FnZShzdHJ1Y3QgaGlkX3BhcnNlciAqcGFyc2VyLCB1bnNpZ25lZCB1c2FnZSkKK3sKKwlpZiAocGFyc2VyLT5sb2NhbC51c2FnZV9pbmRleCA+PSBISURfTUFYX1VTQUdFUykgeworCQlkYmcoInVzYWdlIGluZGV4IGV4Y2VlZGVkIik7CisJCXJldHVybiAtMTsKKwl9CisJcGFyc2VyLT5sb2NhbC51c2FnZVtwYXJzZXItPmxvY2FsLnVzYWdlX2luZGV4XSA9IHVzYWdlOworCXBhcnNlci0+bG9jYWwuY29sbGVjdGlvbl9pbmRleFtwYXJzZXItPmxvY2FsLnVzYWdlX2luZGV4XSA9CisJCXBhcnNlci0+Y29sbGVjdGlvbl9zdGFja19wdHIgPworCQlwYXJzZXItPmNvbGxlY3Rpb25fc3RhY2tbcGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrX3B0ciAtIDFdIDogMDsKKwlwYXJzZXItPmxvY2FsLnVzYWdlX2luZGV4Kys7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWdpc3RlciBhIG5ldyBmaWVsZCBmb3IgdGhpcyByZXBvcnQuCisgKi8KKworc3RhdGljIGludCBoaWRfYWRkX2ZpZWxkKHN0cnVjdCBoaWRfcGFyc2VyICpwYXJzZXIsIHVuc2lnbmVkIHJlcG9ydF90eXBlLCB1bnNpZ25lZCBmbGFncykKK3sKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkOworCWludCB1c2FnZXM7CisJdW5zaWduZWQgb2Zmc2V0OworCWludCBpOworCisJaWYgKCEocmVwb3J0ID0gaGlkX3JlZ2lzdGVyX3JlcG9ydChwYXJzZXItPmRldmljZSwgcmVwb3J0X3R5cGUsIHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9pZCkpKSB7CisJCWRiZygiaGlkX3JlZ2lzdGVyX3JlcG9ydCBmYWlsZWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21heGltdW0gPCBwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21pbmltdW0pIHsKKwkJZGJnKCJsb2dpY2FsIHJhbmdlIGludmFsaWQgJWQgJWQiLCBwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21pbmltdW0sIHBhcnNlci0+Z2xvYmFsLmxvZ2ljYWxfbWF4aW11bSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlvZmZzZXQgPSByZXBvcnQtPnNpemU7CisJcmVwb3J0LT5zaXplICs9IHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9zaXplICogcGFyc2VyLT5nbG9iYWwucmVwb3J0X2NvdW50OworCisJaWYgKCFwYXJzZXItPmxvY2FsLnVzYWdlX2luZGV4KSAvKiBJZ25vcmUgcGFkZGluZyBmaWVsZHMgKi8KKwkJcmV0dXJuIDA7IAorCisJdXNhZ2VzID0gbWF4X3QoaW50LCBwYXJzZXItPmxvY2FsLnVzYWdlX2luZGV4LCBwYXJzZXItPmdsb2JhbC5yZXBvcnRfY291bnQpOworCisJaWYgKChmaWVsZCA9IGhpZF9yZWdpc3Rlcl9maWVsZChyZXBvcnQsIHVzYWdlcywgcGFyc2VyLT5nbG9iYWwucmVwb3J0X2NvdW50KSkgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlmaWVsZC0+cGh5c2ljYWwgPSBoaWRfbG9va3VwX2NvbGxlY3Rpb24ocGFyc2VyLCBISURfQ09MTEVDVElPTl9QSFlTSUNBTCk7CisJZmllbGQtPmxvZ2ljYWwgPSBoaWRfbG9va3VwX2NvbGxlY3Rpb24ocGFyc2VyLCBISURfQ09MTEVDVElPTl9MT0dJQ0FMKTsKKwlmaWVsZC0+YXBwbGljYXRpb24gPSBoaWRfbG9va3VwX2NvbGxlY3Rpb24ocGFyc2VyLCBISURfQ09MTEVDVElPTl9BUFBMSUNBVElPTik7CisKKwlmb3IgKGkgPSAwOyBpIDwgdXNhZ2VzOyBpKyspIHsKKwkJaW50IGogPSBpOworCQkvKiBEdXBsaWNhdGUgdGhlIGxhc3QgdXNhZ2Ugd2UgcGFyc2VkIGlmIHdlIGhhdmUgZXhjZXNzIHZhbHVlcyAqLworCQlpZiAoaSA+PSBwYXJzZXItPmxvY2FsLnVzYWdlX2luZGV4KQorCQkJaiA9IHBhcnNlci0+bG9jYWwudXNhZ2VfaW5kZXggLSAxOworCQlmaWVsZC0+dXNhZ2VbaV0uaGlkID0gcGFyc2VyLT5sb2NhbC51c2FnZVtqXTsKKwkJZmllbGQtPnVzYWdlW2ldLmNvbGxlY3Rpb25faW5kZXggPQorCQkJcGFyc2VyLT5sb2NhbC5jb2xsZWN0aW9uX2luZGV4W2pdOworCX0KKworCWZpZWxkLT5tYXh1c2FnZSA9IHVzYWdlczsKKwlmaWVsZC0+ZmxhZ3MgPSBmbGFnczsKKwlmaWVsZC0+cmVwb3J0X29mZnNldCA9IG9mZnNldDsKKwlmaWVsZC0+cmVwb3J0X3R5cGUgPSByZXBvcnRfdHlwZTsKKwlmaWVsZC0+cmVwb3J0X3NpemUgPSBwYXJzZXItPmdsb2JhbC5yZXBvcnRfc2l6ZTsKKwlmaWVsZC0+cmVwb3J0X2NvdW50ID0gcGFyc2VyLT5nbG9iYWwucmVwb3J0X2NvdW50OworCWZpZWxkLT5sb2dpY2FsX21pbmltdW0gPSBwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21pbmltdW07CisJZmllbGQtPmxvZ2ljYWxfbWF4aW11bSA9IHBhcnNlci0+Z2xvYmFsLmxvZ2ljYWxfbWF4aW11bTsKKwlmaWVsZC0+cGh5c2ljYWxfbWluaW11bSA9IHBhcnNlci0+Z2xvYmFsLnBoeXNpY2FsX21pbmltdW07CisJZmllbGQtPnBoeXNpY2FsX21heGltdW0gPSBwYXJzZXItPmdsb2JhbC5waHlzaWNhbF9tYXhpbXVtOworCWZpZWxkLT51bml0X2V4cG9uZW50ID0gcGFyc2VyLT5nbG9iYWwudW5pdF9leHBvbmVudDsKKwlmaWVsZC0+dW5pdCA9IHBhcnNlci0+Z2xvYmFsLnVuaXQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlYWQgZGF0YSB2YWx1ZSBmcm9tIGl0ZW0uCisgKi8KKworc3RhdGljIF9faW5saW5lX18gX191MzIgaXRlbV91ZGF0YShzdHJ1Y3QgaGlkX2l0ZW0gKml0ZW0pCit7CisJc3dpdGNoIChpdGVtLT5zaXplKSB7CisJCWNhc2UgMTogcmV0dXJuIGl0ZW0tPmRhdGEudTg7CisJCWNhc2UgMjogcmV0dXJuIGl0ZW0tPmRhdGEudTE2OworCQljYXNlIDQ6IHJldHVybiBpdGVtLT5kYXRhLnUzMjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fczMyIGl0ZW1fc2RhdGEoc3RydWN0IGhpZF9pdGVtICppdGVtKQoreworCXN3aXRjaCAoaXRlbS0+c2l6ZSkgeworCQljYXNlIDE6IHJldHVybiBpdGVtLT5kYXRhLnM4OworCQljYXNlIDI6IHJldHVybiBpdGVtLT5kYXRhLnMxNjsKKwkJY2FzZSA0OiByZXR1cm4gaXRlbS0+ZGF0YS5zMzI7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogUHJvY2VzcyBhIGdsb2JhbCBpdGVtLgorICovCisKK3N0YXRpYyBpbnQgaGlkX3BhcnNlcl9nbG9iYWwoc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlciwgc3RydWN0IGhpZF9pdGVtICppdGVtKQoreworCXN3aXRjaCAoaXRlbS0+dGFnKSB7CisKKwkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1BVU0g6CisKKwkJCWlmIChwYXJzZXItPmdsb2JhbF9zdGFja19wdHIgPT0gSElEX0dMT0JBTF9TVEFDS19TSVpFKSB7CisJCQkJZGJnKCJnbG9iYWwgZW52aXJvbWVudCBzdGFjayBvdmVyZmxvdyIpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKworCQkJbWVtY3B5KHBhcnNlci0+Z2xvYmFsX3N0YWNrICsgcGFyc2VyLT5nbG9iYWxfc3RhY2tfcHRyKyssCisJCQkJJnBhcnNlci0+Z2xvYmFsLCBzaXplb2Yoc3RydWN0IGhpZF9nbG9iYWwpKTsKKwkJCXJldHVybiAwOworCisJCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19QT1A6CisKKwkJCWlmICghcGFyc2VyLT5nbG9iYWxfc3RhY2tfcHRyKSB7CisJCQkJZGJnKCJnbG9iYWwgZW52aXJvbWVudCBzdGFjayB1bmRlcmZsb3ciKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisKKwkJCW1lbWNweSgmcGFyc2VyLT5nbG9iYWwsIHBhcnNlci0+Z2xvYmFsX3N0YWNrICsgLS1wYXJzZXItPmdsb2JhbF9zdGFja19wdHIsCisJCQkJc2l6ZW9mKHN0cnVjdCBoaWRfZ2xvYmFsKSk7CisJCQlyZXR1cm4gMDsKKworCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfVVNBR0VfUEFHRToKKwkJCXBhcnNlci0+Z2xvYmFsLnVzYWdlX3BhZ2UgPSBpdGVtX3VkYXRhKGl0ZW0pOworCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX0xPR0lDQUxfTUlOSU1VTToKKwkJCXBhcnNlci0+Z2xvYmFsLmxvZ2ljYWxfbWluaW11bSA9IGl0ZW1fc2RhdGEoaXRlbSk7CisJCQlyZXR1cm4gMDsKKworCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfTE9HSUNBTF9NQVhJTVVNOgorCQkJaWYgKHBhcnNlci0+Z2xvYmFsLmxvZ2ljYWxfbWluaW11bSA8IDApCisJCQkJcGFyc2VyLT5nbG9iYWwubG9naWNhbF9tYXhpbXVtID0gaXRlbV9zZGF0YShpdGVtKTsKKwkJCWVsc2UKKwkJCQlwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21heGltdW0gPSBpdGVtX3VkYXRhKGl0ZW0pOworCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1BIWVNJQ0FMX01JTklNVU06CisJCQlwYXJzZXItPmdsb2JhbC5waHlzaWNhbF9taW5pbXVtID0gaXRlbV9zZGF0YShpdGVtKTsKKwkJCXJldHVybiAwOworCisJCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19QSFlTSUNBTF9NQVhJTVVNOgorCQkJaWYgKHBhcnNlci0+Z2xvYmFsLnBoeXNpY2FsX21pbmltdW0gPCAwKQorCQkJCXBhcnNlci0+Z2xvYmFsLnBoeXNpY2FsX21heGltdW0gPSBpdGVtX3NkYXRhKGl0ZW0pOworCQkJZWxzZQorCQkJCXBhcnNlci0+Z2xvYmFsLnBoeXNpY2FsX21heGltdW0gPSBpdGVtX3VkYXRhKGl0ZW0pOworCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1VOSVRfRVhQT05FTlQ6CisJCQlwYXJzZXItPmdsb2JhbC51bml0X2V4cG9uZW50ID0gaXRlbV9zZGF0YShpdGVtKTsKKwkJCXJldHVybiAwOworCisJCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19VTklUOgorCQkJcGFyc2VyLT5nbG9iYWwudW5pdCA9IGl0ZW1fdWRhdGEoaXRlbSk7CisJCQlyZXR1cm4gMDsKKworCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfUkVQT1JUX1NJWkU6CisJCQlpZiAoKHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9zaXplID0gaXRlbV91ZGF0YShpdGVtKSkgPiAzMikgeworCQkJCWRiZygiaW52YWxpZCByZXBvcnRfc2l6ZSAlZCIsIHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9zaXplKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQlyZXR1cm4gMDsKKworCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfUkVQT1JUX0NPVU5UOgorCQkJaWYgKChwYXJzZXItPmdsb2JhbC5yZXBvcnRfY291bnQgPSBpdGVtX3VkYXRhKGl0ZW0pKSA+IEhJRF9NQVhfVVNBR0VTKSB7CisJCQkJZGJnKCJpbnZhbGlkIHJlcG9ydF9jb3VudCAlZCIsIHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9jb3VudCk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1JFUE9SVF9JRDoKKwkJCWlmICgocGFyc2VyLT5nbG9iYWwucmVwb3J0X2lkID0gaXRlbV91ZGF0YShpdGVtKSkgPT0gMCkgeworCQkJCWRiZygicmVwb3J0X2lkIDAgaXMgaW52YWxpZCIpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCXJldHVybiAwOworCisJCWRlZmF1bHQ6CisJCQlkYmcoInVua25vd24gZ2xvYmFsIHRhZyAweCV4IiwgaXRlbS0+dGFnKTsKKwkJCXJldHVybiAtMTsKKwl9Cit9CisKKy8qCisgKiBQcm9jZXNzIGEgbG9jYWwgaXRlbS4KKyAqLworCitzdGF0aWMgaW50IGhpZF9wYXJzZXJfbG9jYWwoc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlciwgc3RydWN0IGhpZF9pdGVtICppdGVtKQoreworCV9fdTMyIGRhdGE7CisJdW5zaWduZWQgbjsKKworCWlmIChpdGVtLT5zaXplID09IDApIHsKKwkJZGJnKCJpdGVtIGRhdGEgZXhwZWN0ZWQgZm9yIGxvY2FsIGl0ZW0iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWRhdGEgPSBpdGVtX3VkYXRhKGl0ZW0pOworCisJc3dpdGNoIChpdGVtLT50YWcpIHsKKworCQljYXNlIEhJRF9MT0NBTF9JVEVNX1RBR19ERUxJTUlURVI6CisKKwkJCWlmIChkYXRhKSB7CisJCQkJLyoKKwkJCQkgKiBXZSB0cmVhdCBpdGVtcyBiZWZvcmUgdGhlIGZpcnN0IGRlbGltaXRlcgorCQkJCSAqIGFzIGdsb2JhbCB0byBhbGwgdXNhZ2Ugc2V0cyAoYnJhbmNoIDApLgorCQkJCSAqIEluIHRoZSBtb21lbnQgd2UgcHJvY2VzcyBvbmx5IHRoZXNlIGdsb2JhbAorCQkJCSAqIGl0ZW1zIGFuZCB0aGUgZmlyc3QgZGVsaW1pdGVyIHNldC4KKwkJCQkgKi8KKwkJCQlpZiAocGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfZGVwdGggIT0gMCkgeworCQkJCQlkYmcoIm5lc3RlZCBkZWxpbWl0ZXJzIik7CisJCQkJCXJldHVybiAtMTsKKwkJCQl9CisJCQkJcGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfZGVwdGgrKzsKKwkJCQlwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9icmFuY2grKzsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2RlcHRoIDwgMSkgeworCQkJCQlkYmcoImJvZ3VzIGNsb3NlIGRlbGltaXRlciIpOworCQkJCQlyZXR1cm4gLTE7CisJCQkJfQorCQkJCXBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2RlcHRoLS07CisJCQl9CisJCQlyZXR1cm4gMTsKKworCQljYXNlIEhJRF9MT0NBTF9JVEVNX1RBR19VU0FHRToKKworCQkJaWYgKHBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2JyYW5jaCA+IDEpIHsKKwkJCQlkYmcoImFsdGVybmF0aXZlIHVzYWdlIGlnbm9yZWQiKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQkJaWYgKGl0ZW0tPnNpemUgPD0gMikKKwkJCQlkYXRhID0gKHBhcnNlci0+Z2xvYmFsLnVzYWdlX3BhZ2UgPDwgMTYpICsgZGF0YTsKKworCQkJcmV0dXJuIGhpZF9hZGRfdXNhZ2UocGFyc2VyLCBkYXRhKTsKKworCQljYXNlIEhJRF9MT0NBTF9JVEVNX1RBR19VU0FHRV9NSU5JTVVNOgorCisJCQlpZiAocGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfYnJhbmNoID4gMSkgeworCQkJCWRiZygiYWx0ZXJuYXRpdmUgdXNhZ2UgaWdub3JlZCIpOworCQkJCXJldHVybiAwOworCQkJfQorCisJCQlpZiAoaXRlbS0+c2l6ZSA8PSAyKQorCQkJCWRhdGEgPSAocGFyc2VyLT5nbG9iYWwudXNhZ2VfcGFnZSA8PCAxNikgKyBkYXRhOworCisJCQlwYXJzZXItPmxvY2FsLnVzYWdlX21pbmltdW0gPSBkYXRhOworCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBISURfTE9DQUxfSVRFTV9UQUdfVVNBR0VfTUFYSU1VTToKKworCQkJaWYgKHBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2JyYW5jaCA+IDEpIHsKKwkJCQlkYmcoImFsdGVybmF0aXZlIHVzYWdlIGlnbm9yZWQiKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQkJaWYgKGl0ZW0tPnNpemUgPD0gMikKKwkJCQlkYXRhID0gKHBhcnNlci0+Z2xvYmFsLnVzYWdlX3BhZ2UgPDwgMTYpICsgZGF0YTsKKworCQkJZm9yIChuID0gcGFyc2VyLT5sb2NhbC51c2FnZV9taW5pbXVtOyBuIDw9IGRhdGE7IG4rKykKKwkJCQlpZiAoaGlkX2FkZF91c2FnZShwYXJzZXIsIG4pKSB7CisJCQkJCWRiZygiaGlkX2FkZF91c2FnZSBmYWlsZWRcbiIpOworCQkJCQlyZXR1cm4gLTE7CisJCQkJfQorCQkJcmV0dXJuIDA7CisKKwkJZGVmYXVsdDoKKworCQkJZGJnKCJ1bmtub3duIGxvY2FsIGl0ZW0gdGFnIDB4JXgiLCBpdGVtLT50YWcpOworCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogUHJvY2VzcyBhIG1haW4gaXRlbS4KKyAqLworCitzdGF0aWMgaW50IGhpZF9wYXJzZXJfbWFpbihzdHJ1Y3QgaGlkX3BhcnNlciAqcGFyc2VyLCBzdHJ1Y3QgaGlkX2l0ZW0gKml0ZW0pCit7CisJX191MzIgZGF0YTsKKwlpbnQgcmV0OworCisJZGF0YSA9IGl0ZW1fdWRhdGEoaXRlbSk7CisKKwlzd2l0Y2ggKGl0ZW0tPnRhZykgeworCQljYXNlIEhJRF9NQUlOX0lURU1fVEFHX0JFR0lOX0NPTExFQ1RJT046CisJCQlyZXQgPSBvcGVuX2NvbGxlY3Rpb24ocGFyc2VyLCBkYXRhICYgMHhmZik7CisJCQlicmVhazsKKwkJY2FzZSBISURfTUFJTl9JVEVNX1RBR19FTkRfQ09MTEVDVElPTjoKKwkJCXJldCA9IGNsb3NlX2NvbGxlY3Rpb24ocGFyc2VyKTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9NQUlOX0lURU1fVEFHX0lOUFVUOgorCQkJcmV0ID0gaGlkX2FkZF9maWVsZChwYXJzZXIsIEhJRF9JTlBVVF9SRVBPUlQsIGRhdGEpOworCQkJYnJlYWs7CisJCWNhc2UgSElEX01BSU5fSVRFTV9UQUdfT1VUUFVUOgorCQkJcmV0ID0gaGlkX2FkZF9maWVsZChwYXJzZXIsIEhJRF9PVVRQVVRfUkVQT1JULCBkYXRhKTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9NQUlOX0lURU1fVEFHX0ZFQVRVUkU6CisJCQlyZXQgPSBoaWRfYWRkX2ZpZWxkKHBhcnNlciwgSElEX0ZFQVRVUkVfUkVQT1JULCBkYXRhKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGJnKCJ1bmtub3duIG1haW4gaXRlbSB0YWcgMHgleCIsIGl0ZW0tPnRhZyk7CisJCQlyZXQgPSAwOworCX0KKworCW1lbXNldCgmcGFyc2VyLT5sb2NhbCwgMCwgc2l6ZW9mKHBhcnNlci0+bG9jYWwpKTsJLyogUmVzZXQgdGhlIGxvY2FsIHBhcnNlciBlbnZpcm9ubWVudCAqLworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFByb2Nlc3MgYSByZXNlcnZlZCBpdGVtLgorICovCisKK3N0YXRpYyBpbnQgaGlkX3BhcnNlcl9yZXNlcnZlZChzdHJ1Y3QgaGlkX3BhcnNlciAqcGFyc2VyLCBzdHJ1Y3QgaGlkX2l0ZW0gKml0ZW0pCit7CisJZGJnKCJyZXNlcnZlZCBpdGVtIHR5cGUsIHRhZyAweCV4IiwgaXRlbS0+dGFnKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZyZWUgYSByZXBvcnQgYW5kIGFsbCByZWdpc3RlcmVkIGZpZWxkcy4gVGhlIGZpZWxkLT51c2FnZSBhbmQKKyAqIGZpZWxkLT52YWx1ZSB0YWJsZSdzIGFyZSBhbGxvY2F0ZWQgYmVoaW5kIHRoZSBmaWVsZCwgc28gd2UgbmVlZAorICogb25seSB0byBmcmVlKGZpZWxkKSBpdHNlbGYuCisgKi8KKworc3RhdGljIHZvaWQgaGlkX2ZyZWVfcmVwb3J0KHN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQpCit7CisJdW5zaWduZWQgbjsKKworCWZvciAobiA9IDA7IG4gPCByZXBvcnQtPm1heGZpZWxkOyBuKyspCisJCWtmcmVlKHJlcG9ydC0+ZmllbGRbbl0pOworCWtmcmVlKHJlcG9ydCk7Cit9CisKKy8qCisgKiBGcmVlIGEgZGV2aWNlIHN0cnVjdHVyZSwgYWxsIHJlcG9ydHMsIGFuZCBhbGwgZmllbGRzLgorICovCisKK3N0YXRpYyB2b2lkIGhpZF9mcmVlX2RldmljZShzdHJ1Y3QgaGlkX2RldmljZSAqZGV2aWNlKQoreworCXVuc2lnbmVkIGksajsKKworCWhpZF9mZl9leGl0KGRldmljZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSElEX1JFUE9SVF9UWVBFUzsgaSsrKSB7CisJCXN0cnVjdCBoaWRfcmVwb3J0X2VudW0gKnJlcG9ydF9lbnVtID0gZGV2aWNlLT5yZXBvcnRfZW51bSArIGk7CisKKwkJZm9yIChqID0gMDsgaiA8IDI1NjsgaisrKSB7CisJCQlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0ID0gcmVwb3J0X2VudW0tPnJlcG9ydF9pZF9oYXNoW2pdOworCQkJaWYgKHJlcG9ydCkKKwkJCQloaWRfZnJlZV9yZXBvcnQocmVwb3J0KTsKKwkJfQorCX0KKworCWlmIChkZXZpY2UtPnJkZXNjKQorCQlrZnJlZShkZXZpY2UtPnJkZXNjKTsKKwlrZnJlZShkZXZpY2UpOworfQorCisvKgorICogRmV0Y2ggYSByZXBvcnQgZGVzY3JpcHRpb24gaXRlbSBmcm9tIHRoZSBkYXRhIHN0cmVhbS4gV2Ugc3VwcG9ydCBsb25nCisgKiBpdGVtcywgdGhvdWdoIHRoZXkgYXJlIG5vdCB1c2VkIHlldC4KKyAqLworCitzdGF0aWMgdTggKmZldGNoX2l0ZW0oX191OCAqc3RhcnQsIF9fdTggKmVuZCwgc3RydWN0IGhpZF9pdGVtICppdGVtKQoreworCXU4IGI7CisKKwlpZiAoKGVuZCAtIHN0YXJ0KSA8PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWIgPSAqc3RhcnQrKzsKKworCWl0ZW0tPnR5cGUgPSAoYiA+PiAyKSAmIDM7CisJaXRlbS0+dGFnICA9IChiID4+IDQpICYgMTU7CisKKwlpZiAoaXRlbS0+dGFnID09IEhJRF9JVEVNX1RBR19MT05HKSB7CisKKwkJaXRlbS0+Zm9ybWF0ID0gSElEX0lURU1fRk9STUFUX0xPTkc7CisKKwkJaWYgKChlbmQgLSBzdGFydCkgPCAyKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJaXRlbS0+c2l6ZSA9ICpzdGFydCsrOworCQlpdGVtLT50YWcgID0gKnN0YXJ0Kys7CisKKwkJaWYgKChlbmQgLSBzdGFydCkgPCBpdGVtLT5zaXplKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJaXRlbS0+ZGF0YS5sb25nZGF0YSA9IHN0YXJ0OworCQlzdGFydCArPSBpdGVtLT5zaXplOworCQlyZXR1cm4gc3RhcnQ7CisJfQorCisJaXRlbS0+Zm9ybWF0ID0gSElEX0lURU1fRk9STUFUX1NIT1JUOworCWl0ZW0tPnNpemUgPSBiICYgMzsKKworCXN3aXRjaCAoaXRlbS0+c2l6ZSkgeworCisJCWNhc2UgMDoKKwkJCXJldHVybiBzdGFydDsKKworCQljYXNlIDE6CisJCQlpZiAoKGVuZCAtIHN0YXJ0KSA8IDEpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlpdGVtLT5kYXRhLnU4ID0gKnN0YXJ0Kys7CisJCQlyZXR1cm4gc3RhcnQ7CisKKwkJY2FzZSAyOgorCQkJaWYgKChlbmQgLSBzdGFydCkgPCAyKQorCQkJCXJldHVybiBOVUxMOworCQkJaXRlbS0+ZGF0YS51MTYgPSBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMTYqKXN0YXJ0KSk7CisJCQlzdGFydCA9IChfX3U4ICopKChfX2xlMTYgKilzdGFydCArIDEpOworCQkJcmV0dXJuIHN0YXJ0OworCisJCWNhc2UgMzoKKwkJCWl0ZW0tPnNpemUrKzsKKwkJCWlmICgoZW5kIC0gc3RhcnQpIDwgNCkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCWl0ZW0tPmRhdGEudTMyID0gbGUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTMyKilzdGFydCkpOworCQkJc3RhcnQgPSAoX191OCAqKSgoX19sZTMyICopc3RhcnQgKyAxKTsKKwkJCXJldHVybiBzdGFydDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFBhcnNlIGEgcmVwb3J0IGRlc2NyaXB0aW9uIGludG8gYSBoaWRfZGV2aWNlIHN0cnVjdHVyZS4gUmVwb3J0cyBhcmUKKyAqIGVudW1lcmF0ZWQsIGZpZWxkcyBhcmUgYXR0YWNoZWQgdG8gdGhlc2UgcmVwb3J0cy4KKyAqLworCitzdGF0aWMgc3RydWN0IGhpZF9kZXZpY2UgKmhpZF9wYXJzZV9yZXBvcnQoX191OCAqc3RhcnQsIHVuc2lnbmVkIHNpemUpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmRldmljZTsKKwlzdHJ1Y3QgaGlkX3BhcnNlciAqcGFyc2VyOworCXN0cnVjdCBoaWRfaXRlbSBpdGVtOworCV9fdTggKmVuZDsKKwl1bnNpZ25lZCBpOworCXN0YXRpYyBpbnQgKCpkaXNwYXRjaF90eXBlW10pKHN0cnVjdCBoaWRfcGFyc2VyICpwYXJzZXIsCisJCQkJICAgICAgc3RydWN0IGhpZF9pdGVtICppdGVtKSA9IHsKKwkJaGlkX3BhcnNlcl9tYWluLAorCQloaWRfcGFyc2VyX2dsb2JhbCwKKwkJaGlkX3BhcnNlcl9sb2NhbCwKKwkJaGlkX3BhcnNlcl9yZXNlcnZlZAorCX07CisKKwlpZiAoIShkZXZpY2UgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkX2RldmljZSksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIE5VTEw7CisJbWVtc2V0KGRldmljZSwgMCwgc2l6ZW9mKHN0cnVjdCBoaWRfZGV2aWNlKSk7CisKKwlpZiAoIShkZXZpY2UtPmNvbGxlY3Rpb24gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkX2NvbGxlY3Rpb24pICoKKwkJCQkgICBISURfREVGQVVMVF9OVU1fQ09MTEVDVElPTlMsIEdGUF9LRVJORUwpKSkgeworCQlrZnJlZShkZXZpY2UpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJbWVtc2V0KGRldmljZS0+Y29sbGVjdGlvbiwgMCwgc2l6ZW9mKHN0cnVjdCBoaWRfY29sbGVjdGlvbikgKgorCQlISURfREVGQVVMVF9OVU1fQ09MTEVDVElPTlMpOworCWRldmljZS0+Y29sbGVjdGlvbl9zaXplID0gSElEX0RFRkFVTFRfTlVNX0NPTExFQ1RJT05TOworCisJZm9yIChpID0gMDsgaSA8IEhJRF9SRVBPUlRfVFlQRVM7IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQoJmRldmljZS0+cmVwb3J0X2VudW1baV0ucmVwb3J0X2xpc3QpOworCisJaWYgKCEoZGV2aWNlLT5yZGVzYyA9IChfX3U4ICopa21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKSkpIHsKKwkJa2ZyZWUoZGV2aWNlLT5jb2xsZWN0aW9uKTsKKwkJa2ZyZWUoZGV2aWNlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCW1lbWNweShkZXZpY2UtPnJkZXNjLCBzdGFydCwgc2l6ZSk7CisJZGV2aWNlLT5yc2l6ZSA9IHNpemU7CisKKwlpZiAoIShwYXJzZXIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkX3BhcnNlciksIEdGUF9LRVJORUwpKSkgeworCQlrZnJlZShkZXZpY2UtPnJkZXNjKTsKKwkJa2ZyZWUoZGV2aWNlLT5jb2xsZWN0aW9uKTsKKwkJa2ZyZWUoZGV2aWNlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCW1lbXNldChwYXJzZXIsIDAsIHNpemVvZihzdHJ1Y3QgaGlkX3BhcnNlcikpOworCXBhcnNlci0+ZGV2aWNlID0gZGV2aWNlOworCisJZW5kID0gc3RhcnQgKyBzaXplOworCXdoaWxlICgoc3RhcnQgPSBmZXRjaF9pdGVtKHN0YXJ0LCBlbmQsICZpdGVtKSkgIT0gTlVMTCkgeworCisJCWlmIChpdGVtLmZvcm1hdCAhPSBISURfSVRFTV9GT1JNQVRfU0hPUlQpIHsKKwkJCWRiZygidW5leHBlY3RlZCBsb25nIGdsb2JhbCBpdGVtIik7CisJCQlrZnJlZShkZXZpY2UtPmNvbGxlY3Rpb24pOworCQkJaGlkX2ZyZWVfZGV2aWNlKGRldmljZSk7CisJCQlrZnJlZShwYXJzZXIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlpZiAoZGlzcGF0Y2hfdHlwZVtpdGVtLnR5cGVdKHBhcnNlciwgJml0ZW0pKSB7CisJCQlkYmcoIml0ZW0gJXUgJXUgJXUgJXUgcGFyc2luZyBmYWlsZWRcbiIsCisJCQkJaXRlbS5mb3JtYXQsICh1bnNpZ25lZClpdGVtLnNpemUsICh1bnNpZ25lZClpdGVtLnR5cGUsICh1bnNpZ25lZClpdGVtLnRhZyk7CisJCQlrZnJlZShkZXZpY2UtPmNvbGxlY3Rpb24pOworCQkJaGlkX2ZyZWVfZGV2aWNlKGRldmljZSk7CisJCQlrZnJlZShwYXJzZXIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlpZiAoc3RhcnQgPT0gZW5kKSB7CisJCQlpZiAocGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrX3B0cikgeworCQkJCWRiZygidW5iYWxhbmNlZCBjb2xsZWN0aW9uIGF0IGVuZCBvZiByZXBvcnQgZGVzY3JpcHRpb24iKTsKKwkJCQlrZnJlZShkZXZpY2UtPmNvbGxlY3Rpb24pOworCQkJCWhpZF9mcmVlX2RldmljZShkZXZpY2UpOworCQkJCWtmcmVlKHBhcnNlcik7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQlpZiAocGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfZGVwdGgpIHsKKwkJCQlkYmcoInVuYmFsYW5jZWQgZGVsaW1pdGVyIGF0IGVuZCBvZiByZXBvcnQgZGVzY3JpcHRpb24iKTsKKwkJCQlrZnJlZShkZXZpY2UtPmNvbGxlY3Rpb24pOworCQkJCWhpZF9mcmVlX2RldmljZShkZXZpY2UpOworCQkJCWtmcmVlKHBhcnNlcik7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQlrZnJlZShwYXJzZXIpOworCQkJcmV0dXJuIGRldmljZTsKKwkJfQorCX0KKworCWRiZygiaXRlbSBmZXRjaGluZyBmYWlsZWQgYXQgb2Zmc2V0ICVkXG4iLCAoaW50KShlbmQgLSBzdGFydCkpOworCWtmcmVlKGRldmljZS0+Y29sbGVjdGlvbik7CisJaGlkX2ZyZWVfZGV2aWNlKGRldmljZSk7CisJa2ZyZWUocGFyc2VyKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIENvbnZlcnQgYSBzaWduZWQgbi1iaXQgaW50ZWdlciB0byBzaWduZWQgMzItYml0IGludGVnZXIuIENvbW1vbgorICogY2FzZXMgYXJlIGRvbmUgdGhyb3VnaCB0aGUgY29tcGlsZXIsIHRoZSBzY3Jld2VkIHRoaW5ncyBoYXMgdG8gYmUKKyAqIGRvbmUgYnkgaGFuZC4KKyAqLworCitzdGF0aWMgX19pbmxpbmVfXyBfX3MzMiBzbnRvMzIoX191MzIgdmFsdWUsIHVuc2lnbmVkIG4pCit7CisJc3dpdGNoIChuKSB7CisJCWNhc2UgODogIHJldHVybiAoKF9fczgpdmFsdWUpOworCQljYXNlIDE2OiByZXR1cm4gKChfX3MxNil2YWx1ZSk7CisJCWNhc2UgMzI6IHJldHVybiAoKF9fczMyKXZhbHVlKTsKKwl9CisJcmV0dXJuIHZhbHVlICYgKDEgPDwgKG4gLSAxKSkgPyB2YWx1ZSB8ICgtMSA8PCBuKSA6IHZhbHVlOworfQorCisvKgorICogQ29udmVydCBhIHNpZ25lZCAzMi1iaXQgaW50ZWdlciB0byBhIHNpZ25lZCBuLWJpdCBpbnRlZ2VyLgorICovCisKK3N0YXRpYyBfX2lubGluZV9fIF9fdTMyIHMzMnRvbihfX3MzMiB2YWx1ZSwgdW5zaWduZWQgbikKK3sKKwlfX3MzMiBhID0gdmFsdWUgPj4gKG4gLSAxKTsKKwlpZiAoYSAmJiBhICE9IC0xKQorCQlyZXR1cm4gdmFsdWUgPCAwID8gMSA8PCAobiAtIDEpIDogKDEgPDwgKG4gLSAxKSkgLSAxOworCXJldHVybiB2YWx1ZSAmICgoMSA8PCBuKSAtIDEpOworfQorCisvKgorICogRXh0cmFjdC9pbXBsZW1lbnQgYSBkYXRhIGZpZWxkIGZyb20vdG8gYSByZXBvcnQuCisgKi8KKworc3RhdGljIF9faW5saW5lX18gX191MzIgZXh0cmFjdChfX3U4ICpyZXBvcnQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbikKK3sKKwlyZXBvcnQgKz0gKG9mZnNldCA+PiA1KSA8PCAyOyBvZmZzZXQgJj0gMzE7CisJcmV0dXJuIChsZTY0X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlNjQqKXJlcG9ydCkpID4+IG9mZnNldCkgJiAoKDEgPDwgbikgLSAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBpbXBsZW1lbnQoX191OCAqcmVwb3J0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIG4sIF9fdTMyIHZhbHVlKQoreworCXJlcG9ydCArPSAob2Zmc2V0ID4+IDUpIDw8IDI7IG9mZnNldCAmPSAzMTsKKwlwdXRfdW5hbGlnbmVkKChnZXRfdW5hbGlnbmVkKChfX2xlNjQqKXJlcG9ydCkKKwkJJiBjcHVfdG9fbGU2NCh+KCgoKF9fdTY0KSAxIDw8IG4pIC0gMSkgPDwgb2Zmc2V0KSkpCisJCXwgY3B1X3RvX2xlNjQoKF9fdTY0KXZhbHVlIDw8IG9mZnNldCksIChfX2xlNjQqKXJlcG9ydCk7Cit9CisKKy8qCisgKiBTZWFyY2ggYW4gYXJyYXkgZm9yIGEgdmFsdWUuCisgKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IHNlYXJjaChfX3MzMiAqYXJyYXksIF9fczMyIHZhbHVlLCB1bnNpZ25lZCBuKQoreworCXdoaWxlIChuLS0pIHsKKwkJaWYgKCphcnJheSsrID09IHZhbHVlKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgaGlkX3Byb2Nlc3NfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaGlkX2R1bXBfaW5wdXQodXNhZ2UsIHZhbHVlKTsKKwlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpCisJCWhpZGlucHV0X2hpZF9ldmVudChoaWQsIGZpZWxkLCB1c2FnZSwgdmFsdWUsIHJlZ3MpOworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYpCisJCWhpZGRldl9oaWRfZXZlbnQoaGlkLCBmaWVsZCwgdXNhZ2UsIHZhbHVlLCByZWdzKTsKK30KKworLyoKKyAqIEFuYWx5c2UgYSByZWNlaXZlZCBmaWVsZCwgYW5kIGZldGNoIHRoZSBkYXRhIGZyb20gaXQuIFRoZSBmaWVsZAorICogY29udGVudCBpcyBzdG9yZWQgZm9yIG5leHQgcmVwb3J0IHByb2Nlc3NpbmcgKHdlIGRvIGRpZmZlcmVudGlhbAorICogcmVwb3J0aW5nIHRvIHRoZSBsYXllcikuCisgKi8KKworc3RhdGljIHZvaWQgaGlkX2lucHV0X2ZpZWxkKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBfX3U4ICpkYXRhLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBuOworCXVuc2lnbmVkIGNvdW50ID0gZmllbGQtPnJlcG9ydF9jb3VudDsKKwl1bnNpZ25lZCBvZmZzZXQgPSBmaWVsZC0+cmVwb3J0X29mZnNldDsKKwl1bnNpZ25lZCBzaXplID0gZmllbGQtPnJlcG9ydF9zaXplOworCV9fczMyIG1pbiA9IGZpZWxkLT5sb2dpY2FsX21pbmltdW07CisJX19zMzIgbWF4ID0gZmllbGQtPmxvZ2ljYWxfbWF4aW11bTsKKwlfX3MzMiAqdmFsdWU7CisKKwlpZiAoISh2YWx1ZSA9IGttYWxsb2Moc2l6ZW9mKF9fczMyKSAqIGNvdW50LCBHRlBfQVRPTUlDKSkpCisJCXJldHVybjsKKworCWZvciAobiA9IDA7IG4gPCBjb3VudDsgbisrKSB7CisKKwkJCXZhbHVlW25dID0gbWluIDwgMCA/IHNudG8zMihleHRyYWN0KGRhdGEsIG9mZnNldCArIG4gKiBzaXplLCBzaXplKSwgc2l6ZSkgOgorCQkJCQkJICAgIGV4dHJhY3QoZGF0YSwgb2Zmc2V0ICsgbiAqIHNpemUsIHNpemUpOworCisJCQlpZiAoIShmaWVsZC0+ZmxhZ3MgJiBISURfTUFJTl9JVEVNX1ZBUklBQkxFKSAvKiBJZ25vcmUgcmVwb3J0IGlmIEVycm9yUm9sbE92ZXIgKi8KKwkJCSAgICAmJiB2YWx1ZVtuXSA+PSBtaW4gJiYgdmFsdWVbbl0gPD0gbWF4CisJCQkgICAgJiYgZmllbGQtPnVzYWdlW3ZhbHVlW25dIC0gbWluXS5oaWQgPT0gSElEX1VQX0tFWUJPQVJEICsgMSkKKwkJCQlnb3RvIGV4aXQ7CisJfQorCisJZm9yIChuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKKworCQlpZiAoSElEX01BSU5fSVRFTV9WQVJJQUJMRSAmIGZpZWxkLT5mbGFncykgeworCQkJaGlkX3Byb2Nlc3NfZXZlbnQoaGlkLCBmaWVsZCwgJmZpZWxkLT51c2FnZVtuXSwgdmFsdWVbbl0sIHJlZ3MpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoZmllbGQtPnZhbHVlW25dID49IG1pbiAmJiBmaWVsZC0+dmFsdWVbbl0gPD0gbWF4CisJCQkmJiBmaWVsZC0+dXNhZ2VbZmllbGQtPnZhbHVlW25dIC0gbWluXS5oaWQKKwkJCSYmIHNlYXJjaCh2YWx1ZSwgZmllbGQtPnZhbHVlW25dLCBjb3VudCkpCisJCQkJaGlkX3Byb2Nlc3NfZXZlbnQoaGlkLCBmaWVsZCwgJmZpZWxkLT51c2FnZVtmaWVsZC0+dmFsdWVbbl0gLSBtaW5dLCAwLCByZWdzKTsKKworCQlpZiAodmFsdWVbbl0gPj0gbWluICYmIHZhbHVlW25dIDw9IG1heAorCQkJJiYgZmllbGQtPnVzYWdlW3ZhbHVlW25dIC0gbWluXS5oaWQKKwkJCSYmIHNlYXJjaChmaWVsZC0+dmFsdWUsIHZhbHVlW25dLCBjb3VudCkpCisJCQkJaGlkX3Byb2Nlc3NfZXZlbnQoaGlkLCBmaWVsZCwgJmZpZWxkLT51c2FnZVt2YWx1ZVtuXSAtIG1pbl0sIDEsIHJlZ3MpOworCX0KKworCW1lbWNweShmaWVsZC0+dmFsdWUsIHZhbHVlLCBjb3VudCAqIHNpemVvZihfX3MzMikpOworZXhpdDoKKwlrZnJlZSh2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgaGlkX2lucHV0X3JlcG9ydChpbnQgdHlwZSwgc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBoaWRfcmVwb3J0X2VudW0gKnJlcG9ydF9lbnVtID0gaGlkLT5yZXBvcnRfZW51bSArIHR5cGU7CisJdTggKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgbGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisJaW50IG4sIHNpemU7CisKKwlpZiAoIWxlbikgeworCQlkYmcoImVtcHR5IHJlcG9ydCIpOworCQlyZXR1cm4gLTE7CisJfQorCisjaWZkZWYgREVCVUdfREFUQQorCXByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fICI6IHJlcG9ydCAoc2l6ZSAldSkgKCVzbnVtYmVyZWQpXG4iLCBsZW4sIHJlcG9ydF9lbnVtLT5udW1iZXJlZCA/ICIiIDogInVuIik7CisjZW5kaWYKKworCW4gPSAwOwkJCQkvKiBOb3JtYWxseSByZXBvcnQgbnVtYmVyIGlzIDAgKi8KKwlpZiAocmVwb3J0X2VudW0tPm51bWJlcmVkKSB7CS8qIERldmljZSB1c2VzIG51bWJlcmVkIHJlcG9ydHMsIGRhdGFbMF0gaXMgcmVwb3J0IG51bWJlciAqLworCQluID0gKmRhdGErKzsKKwkJbGVuLS07CisJfQorCisjaWZkZWYgREVCVUdfREFUQQorCXsKKwkJaW50IGk7CisJCXByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fICI6IHJlcG9ydCAlZCAoc2l6ZSAldSkgPSAiLCBuLCBsZW4pOworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCQlwcmludGsoIiAlMDJ4IiwgZGF0YVtpXSk7CisJCXByaW50aygiXG4iKTsKKwl9CisjZW5kaWYKKworCWlmICghKHJlcG9ydCA9IHJlcG9ydF9lbnVtLT5yZXBvcnRfaWRfaGFzaFtuXSkpIHsKKwkJZGJnKCJ1bmRlZmluZWQgcmVwb3J0X2lkICVkIHJlY2VpdmVkIiwgbik7CisJCXJldHVybiAtMTsKKwl9CisKKwlzaXplID0gKChyZXBvcnQtPnNpemUgLSAxKSA+PiAzKSArIDE7CisKKwlpZiAobGVuIDwgc2l6ZSkKKwkJZGJnKCJyZXBvcnQgJWQgaXMgdG9vIHNob3J0LCAoJWQgPCAlZCkiLCByZXBvcnQtPmlkLCBsZW4sIHNpemUpOworCisJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRERFVikKKwkJaGlkZGV2X3JlcG9ydF9ldmVudChoaWQsIHJlcG9ydCk7CisKKwlmb3IgKG4gPSAwOyBuIDwgcmVwb3J0LT5tYXhmaWVsZDsgbisrKQorCQloaWRfaW5wdXRfZmllbGQoaGlkLCByZXBvcnQtPmZpZWxkW25dLCBkYXRhLCByZWdzKTsKKworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkKKwkJaGlkaW5wdXRfcmVwb3J0X2V2ZW50KGhpZCwgcmVwb3J0KTsKKworCXJldHVybiAwOworfQorCisvKgorICogSW5wdXQgaW50ZXJydXB0IGNvbXBsZXRpb24gaGFuZGxlci4KKyAqLworCitzdGF0aWMgdm9pZCBoaWRfaXJxX2luKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGhpZF9kZXZpY2UJKmhpZCA9IHVyYi0+Y29udGV4dDsKKwlpbnQJCQlzdGF0dXM7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJCWNhc2UgMDoJCQkvKiBzdWNjZXNzICovCisJCQloaWRfaW5wdXRfcmVwb3J0KEhJRF9JTlBVVF9SRVBPUlQsIHVyYiwgcmVncyk7CisJCQlicmVhazsKKwkJY2FzZSAtRUNPTk5SRVNFVDoJLyogdW5saW5rICovCisJCWNhc2UgLUVOT0VOVDoKKwkJY2FzZSAtRVBFUk06CisJCWNhc2UgLUVTSFVURE9XTjoJLyogdW5wbHVnICovCisJCWNhc2UgLUVJTFNFUToJCS8qIHVucGx1ZyB0aW1lb3V0IG9uIHVoY2kgKi8KKwkJCXJldHVybjsKKwkJY2FzZSAtRVRJTUVET1VUOgkvKiBOQUsgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgkJLyogZXJyb3IgKi8KKwkJCXdhcm4oImlucHV0IGlycSBzdGF0dXMgJWQgcmVjZWl2ZWQiLCB1cmItPnN0YXR1cyk7CisJfQorCisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBTTEFCX0FUT01JQyk7CisJaWYgKHN0YXR1cykKKwkJZXJyKCJjYW4ndCByZXN1Ym1pdCBpbnRyLCAlcy0lcy9pbnB1dCVkLCBzdGF0dXMgJWQiLAorCQkJCWhpZC0+ZGV2LT5idXMtPmJ1c19uYW1lLCBoaWQtPmRldi0+ZGV2cGF0aCwKKwkJCQloaWQtPmlmbnVtLCBzdGF0dXMpOworfQorCisvKgorICogT3V0cHV0IHRoZSBmaWVsZCBpbnRvIHRoZSByZXBvcnQuCisgKi8KKworc3RhdGljIHZvaWQgaGlkX291dHB1dF9maWVsZChzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgX191OCAqZGF0YSkKK3sKKwl1bnNpZ25lZCBjb3VudCA9IGZpZWxkLT5yZXBvcnRfY291bnQ7CisJdW5zaWduZWQgb2Zmc2V0ID0gZmllbGQtPnJlcG9ydF9vZmZzZXQ7CisJdW5zaWduZWQgc2l6ZSA9IGZpZWxkLT5yZXBvcnRfc2l6ZTsKKwl1bnNpZ25lZCBuOworCisJZm9yIChuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKKwkJaWYgKGZpZWxkLT5sb2dpY2FsX21pbmltdW0gPCAwKQkvKiBzaWduZWQgdmFsdWVzICovCisJCQlpbXBsZW1lbnQoZGF0YSwgb2Zmc2V0ICsgbiAqIHNpemUsIHNpemUsIHMzMnRvbihmaWVsZC0+dmFsdWVbbl0sIHNpemUpKTsKKwkJZWxzZQkJCQkvKiB1bnNpZ25lZCB2YWx1ZXMgKi8KKwkJCWltcGxlbWVudChkYXRhLCBvZmZzZXQgKyBuICogc2l6ZSwgc2l6ZSwgZmllbGQtPnZhbHVlW25dKTsKKwl9Cit9CisKKy8qCisgKiBDcmVhdGUgYSByZXBvcnQuCisgKi8KKworc3RhdGljIHZvaWQgaGlkX291dHB1dF9yZXBvcnQoc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCwgX191OCAqZGF0YSkKK3sKKwl1bnNpZ25lZCBuOworCisJaWYgKHJlcG9ydC0+aWQgPiAwKQorCQkqZGF0YSsrID0gcmVwb3J0LT5pZDsKKworCWZvciAobiA9IDA7IG4gPCByZXBvcnQtPm1heGZpZWxkOyBuKyspCisJCWhpZF9vdXRwdXRfZmllbGQocmVwb3J0LT5maWVsZFtuXSwgZGF0YSk7Cit9CisKKy8qCisgKiBTZXQgYSBmaWVsZCB2YWx1ZS4gVGhlIHJlcG9ydCB0aGlzIGZpZWxkIGJlbG9uZ3MgdG8gaGFzIHRvIGJlCisgKiBjcmVhdGVkIGFuZCB0cmFuc2ZlcnJlZCB0byB0aGUgZGV2aWNlLCB0byBzZXQgdGhpcyB2YWx1ZSBpbiB0aGUKKyAqIGRldmljZS4KKyAqLworCitpbnQgaGlkX3NldF9maWVsZChzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgdW5zaWduZWQgb2Zmc2V0LCBfX3MzMiB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBzaXplID0gZmllbGQtPnJlcG9ydF9zaXplOworCisJaGlkX2R1bXBfaW5wdXQoZmllbGQtPnVzYWdlICsgb2Zmc2V0LCB2YWx1ZSk7CisKKwlpZiAob2Zmc2V0ID49IGZpZWxkLT5yZXBvcnRfY291bnQpIHsKKwkJZGJnKCJvZmZzZXQgKCVkKSBleGNlZWRzIHJlcG9ydF9jb3VudCAoJWQpIiwgb2Zmc2V0LCBmaWVsZC0+cmVwb3J0X2NvdW50KTsKKwkJaGlkX2R1bXBfZmllbGQoZmllbGQsIDgpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChmaWVsZC0+bG9naWNhbF9taW5pbXVtIDwgMCkgeworCQlpZiAodmFsdWUgIT0gc250bzMyKHMzMnRvbih2YWx1ZSwgc2l6ZSksIHNpemUpKSB7CisJCQlkYmcoInZhbHVlICVkIGlzIG91dCBvZiByYW5nZSIsIHZhbHVlKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlmaWVsZC0+dmFsdWVbb2Zmc2V0XSA9IHZhbHVlOworCXJldHVybiAwOworfQorCisvKgorICogRmluZCBhIHJlcG9ydCBmaWVsZCB3aXRoIGEgc3BlY2lmaWVkIEhJRCB1c2FnZS4KKyAqLworCitzdHJ1Y3QgaGlkX2ZpZWxkICpoaWRfZmluZF9maWVsZF9ieV91c2FnZShzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBfX3UzMiB3YW50ZWRfdXNhZ2UsIGludCB0eXBlKQoreworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisJaW50IGk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcG9ydCwgJmhpZC0+cmVwb3J0X2VudW1bdHlwZV0ucmVwb3J0X2xpc3QsIGxpc3QpCisJCWZvciAoaSA9IDA7IGkgPCByZXBvcnQtPm1heGZpZWxkOyBpKyspCisJCQlpZiAocmVwb3J0LT5maWVsZFtpXS0+bG9naWNhbCA9PSB3YW50ZWRfdXNhZ2UpCisJCQkJcmV0dXJuIHJlcG9ydC0+ZmllbGRbaV07CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgaGlkX3N1Ym1pdF9vdXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCisJcmVwb3J0ID0gaGlkLT5vdXRbaGlkLT5vdXR0YWlsXTsKKworCWhpZF9vdXRwdXRfcmVwb3J0KHJlcG9ydCwgaGlkLT5vdXRidWYpOworCWhpZC0+dXJib3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gKChyZXBvcnQtPnNpemUgLSAxKSA+PiAzKSArIDEgKyAocmVwb3J0LT5pZCA+IDApOworCWhpZC0+dXJib3V0LT5kZXYgPSBoaWQtPmRldjsKKworCWRiZygic3VibWl0dGluZyBvdXQgdXJiIik7CisKKwlpZiAodXNiX3N1Ym1pdF91cmIoaGlkLT51cmJvdXQsIEdGUF9BVE9NSUMpKSB7CisJCWVycigidXNiX3N1Ym1pdF91cmIob3V0KSBmYWlsZWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhpZF9zdWJtaXRfY3RybChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisJdW5zaWduZWQgY2hhciBkaXI7CisJaW50IGxlbjsKKworCXJlcG9ydCA9IGhpZC0+Y3RybFtoaWQtPmN0cmx0YWlsXS5yZXBvcnQ7CisJZGlyID0gaGlkLT5jdHJsW2hpZC0+Y3RybHRhaWxdLmRpcjsKKworCWxlbiA9ICgocmVwb3J0LT5zaXplIC0gMSkgPj4gMykgKyAxICsgKHJlcG9ydC0+aWQgPiAwKTsKKwlpZiAoZGlyID09IFVTQl9ESVJfT1VUKSB7CisJCWhpZF9vdXRwdXRfcmVwb3J0KHJlcG9ydCwgaGlkLT5jdHJsYnVmKTsKKwkJaGlkLT51cmJjdHJsLT5waXBlID0gdXNiX3NuZGN0cmxwaXBlKGhpZC0+ZGV2LCAwKTsKKwkJaGlkLT51cmJjdHJsLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gbGVuOworCX0gZWxzZSB7CisJCWludCBtYXhwYWNrZXQsIHBhZGxlbjsKKworCQloaWQtPnVyYmN0cmwtPnBpcGUgPSB1c2JfcmN2Y3RybHBpcGUoaGlkLT5kZXYsIDApOworCQltYXhwYWNrZXQgPSB1c2JfbWF4cGFja2V0KGhpZC0+ZGV2LCBoaWQtPnVyYmN0cmwtPnBpcGUsIDApOworCQlpZiAobWF4cGFja2V0ID4gMCkgeworCQkJcGFkbGVuID0gKGxlbiArIG1heHBhY2tldCAtIDEpIC8gbWF4cGFja2V0OworCQkJcGFkbGVuICo9IG1heHBhY2tldDsKKwkJCWlmIChwYWRsZW4gPiBISURfQlVGRkVSX1NJWkUpCisJCQkJcGFkbGVuID0gSElEX0JVRkZFUl9TSVpFOworCQl9IGVsc2UKKwkJCXBhZGxlbiA9IDA7CisJCWhpZC0+dXJiY3RybC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHBhZGxlbjsKKwl9CisJaGlkLT51cmJjdHJsLT5kZXYgPSBoaWQtPmRldjsKKworCWhpZC0+Y3ItPmJSZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IGRpcjsKKwloaWQtPmNyLT5iUmVxdWVzdCA9IChkaXIgPT0gVVNCX0RJUl9PVVQpID8gSElEX1JFUV9TRVRfUkVQT1JUIDogSElEX1JFUV9HRVRfUkVQT1JUOworCWhpZC0+Y3ItPndWYWx1ZSA9IGNwdV90b19sZTE2KCgocmVwb3J0LT50eXBlICsgMSkgPDwgOCkgfCByZXBvcnQtPmlkKTsKKwloaWQtPmNyLT53SW5kZXggPSBjcHVfdG9fbGUxNihoaWQtPmlmbnVtKTsKKwloaWQtPmNyLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYobGVuKTsKKworCWRiZygic3VibWl0dGluZyBjdHJsIHVyYjogJXMgd1ZhbHVlPTB4JTA0eCB3SW5kZXg9MHglMDR4IHdMZW5ndGg9JXUiLAorCQloaWQtPmNyLT5iUmVxdWVzdCA9PSBISURfUkVRX1NFVF9SRVBPUlQgPyAiU2V0X1JlcG9ydCIgOiAiR2V0X1JlcG9ydCIsCisJCWhpZC0+Y3ItPndWYWx1ZSwgaGlkLT5jci0+d0luZGV4LCBoaWQtPmNyLT53TGVuZ3RoKTsKKworCWlmICh1c2Jfc3VibWl0X3VyYihoaWQtPnVyYmN0cmwsIEdGUF9BVE9NSUMpKSB7CisJCWVycigidXNiX3N1Ym1pdF91cmIoY3RybCkgZmFpbGVkIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE91dHB1dCBpbnRlcnJ1cHQgY29tcGxldGlvbiBoYW5kbGVyLgorICovCisKK3N0YXRpYyB2b2lkIGhpZF9pcnFfb3V0KHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB1bnBsdWcgPSAwOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCQljYXNlIDA6CQkJLyogc3VjY2VzcyAqLworCQljYXNlIC1FU0hVVERPV046CS8qIHVucGx1ZyAqLworCQljYXNlIC1FSUxTRVE6CQkvKiB1bnBsdWcgdGltZW91dCBvbiB1aGNpICovCisJCQl1bnBsdWcgPSAxOworCQljYXNlIC1FQ09OTlJFU0VUOgkvKiB1bmxpbmsgKi8KKwkJY2FzZSAtRU5PRU5UOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CQkvKiBlcnJvciAqLworCQkJd2Fybigib3V0cHV0IGlycSBzdGF0dXMgJWQgcmVjZWl2ZWQiLCB1cmItPnN0YXR1cyk7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhpZC0+b3V0bG9jaywgZmxhZ3MpOworCisJaWYgKHVucGx1ZykKKwkJaGlkLT5vdXR0YWlsID0gaGlkLT5vdXRoZWFkOworCWVsc2UKKwkJaGlkLT5vdXR0YWlsID0gKGhpZC0+b3V0dGFpbCArIDEpICYgKEhJRF9PVVRQVVRfRklGT19TSVpFIC0gMSk7CisKKwlpZiAoaGlkLT5vdXRoZWFkICE9IGhpZC0+b3V0dGFpbCkgeworCQlpZiAoaGlkX3N1Ym1pdF9vdXQoaGlkKSkgeworCQkJY2xlYXJfYml0KEhJRF9PVVRfUlVOTklORywgJmhpZC0+aW9mbCk7OworCQkJd2FrZV91cCgmaGlkLT53YWl0KTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWQtPm91dGxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCWNsZWFyX2JpdChISURfT1VUX1JVTk5JTkcsICZoaWQtPmlvZmwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhpZC0+b3V0bG9jaywgZmxhZ3MpOworCXdha2VfdXAoJmhpZC0+d2FpdCk7Cit9CisKKy8qCisgKiBDb250cm9sIHBpcGUgY29tcGxldGlvbiBoYW5kbGVyLgorICovCisKK3N0YXRpYyB2b2lkIGhpZF9jdHJsKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB1bnBsdWcgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwkJY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KKwkJCWlmIChoaWQtPmN0cmxbaGlkLT5jdHJsdGFpbF0uZGlyID09IFVTQl9ESVJfSU4pCisJCQkJaGlkX2lucHV0X3JlcG9ydChoaWQtPmN0cmxbaGlkLT5jdHJsdGFpbF0ucmVwb3J0LT50eXBlLCB1cmIsIHJlZ3MpOworCQljYXNlIC1FU0hVVERPV046CS8qIHVucGx1ZyAqLworCQljYXNlIC1FSUxTRVE6CQkvKiB1bnBsdWcgdGltZWN0cmwgb24gdWhjaSAqLworCQkJdW5wbHVnID0gMTsKKwkJY2FzZSAtRUNPTk5SRVNFVDoJLyogdW5saW5rICovCisJCWNhc2UgLUVOT0VOVDoKKwkJY2FzZSAtRVBJUEU6CQkvKiByZXBvcnQgbm90IGF2YWlsYWJsZSAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CQkvKiBlcnJvciAqLworCQkJd2FybigiY3RybCB1cmIgc3RhdHVzICVkIHJlY2VpdmVkIiwgdXJiLT5zdGF0dXMpOworCX0KKworCWlmICh1bnBsdWcpCisJCWhpZC0+Y3RybHRhaWwgPSBoaWQtPmN0cmxoZWFkOworCWVsc2UKKwkJaGlkLT5jdHJsdGFpbCA9IChoaWQtPmN0cmx0YWlsICsgMSkgJiAoSElEX0NPTlRST0xfRklGT19TSVpFIC0gMSk7CisKKwlpZiAoaGlkLT5jdHJsaGVhZCAhPSBoaWQtPmN0cmx0YWlsKSB7CisJCWlmIChoaWRfc3VibWl0X2N0cmwoaGlkKSkgeworCQkJY2xlYXJfYml0KEhJRF9DVFJMX1JVTk5JTkcsICZoaWQtPmlvZmwpOworCQkJd2FrZV91cCgmaGlkLT53YWl0KTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWQtPmN0cmxsb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwljbGVhcl9iaXQoSElEX0NUUkxfUlVOTklORywgJmhpZC0+aW9mbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGlkLT5jdHJsbG9jaywgZmxhZ3MpOworCXdha2VfdXAoJmhpZC0+d2FpdCk7Cit9CisKK3ZvaWQgaGlkX3N1Ym1pdF9yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCwgdW5zaWduZWQgY2hhciBkaXIpCit7CisJaW50IGhlYWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICgoaGlkLT5xdWlya3MgJiBISURfUVVJUktfTk9HRVQpICYmIGRpciA9PSBVU0JfRElSX0lOKQorCQlyZXR1cm47CisKKwlpZiAoaGlkLT51cmJvdXQgJiYgZGlyID09IFVTQl9ESVJfT1VUICYmIHJlcG9ydC0+dHlwZSA9PSBISURfT1VUUFVUX1JFUE9SVCkgeworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZoaWQtPm91dGxvY2ssIGZsYWdzKTsKKworCQlpZiAoKGhlYWQgPSAoaGlkLT5vdXRoZWFkICsgMSkgJiAoSElEX09VVFBVVF9GSUZPX1NJWkUgLSAxKSkgPT0gaGlkLT5vdXR0YWlsKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWQtPm91dGxvY2ssIGZsYWdzKTsKKwkJCXdhcm4oIm91dHB1dCBxdWV1ZSBmdWxsIik7CisJCQlyZXR1cm47CisJCX0KKworCQloaWQtPm91dFtoaWQtPm91dGhlYWRdID0gcmVwb3J0OworCQloaWQtPm91dGhlYWQgPSBoZWFkOworCisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChISURfT1VUX1JVTk5JTkcsICZoaWQtPmlvZmwpKQorCQkJaWYgKGhpZF9zdWJtaXRfb3V0KGhpZCkpCisJCQkJY2xlYXJfYml0KEhJRF9PVVRfUlVOTklORywgJmhpZC0+aW9mbCk7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGlkLT5vdXRsb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGlkLT5jdHJsbG9jaywgZmxhZ3MpOworCisJaWYgKChoZWFkID0gKGhpZC0+Y3RybGhlYWQgKyAxKSAmIChISURfQ09OVFJPTF9GSUZPX1NJWkUgLSAxKSkgPT0gaGlkLT5jdHJsdGFpbCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWQtPmN0cmxsb2NrLCBmbGFncyk7CisJCXdhcm4oImNvbnRyb2wgcXVldWUgZnVsbCIpOworCQlyZXR1cm47CisJfQorCisJaGlkLT5jdHJsW2hpZC0+Y3RybGhlYWRdLnJlcG9ydCA9IHJlcG9ydDsKKwloaWQtPmN0cmxbaGlkLT5jdHJsaGVhZF0uZGlyID0gZGlyOworCWhpZC0+Y3RybGhlYWQgPSBoZWFkOworCisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhJRF9DVFJMX1JVTk5JTkcsICZoaWQtPmlvZmwpKQorCQlpZiAoaGlkX3N1Ym1pdF9jdHJsKGhpZCkpCisJCQljbGVhcl9iaXQoSElEX0NUUkxfUlVOTklORywgJmhpZC0+aW9mbCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWQtPmN0cmxsb2NrLCBmbGFncyk7Cit9CisKK2ludCBoaWRfd2FpdF9pbyhzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCWlmICghd2FpdF9ldmVudF90aW1lb3V0KGhpZC0+d2FpdCwgKCF0ZXN0X2JpdChISURfQ1RSTF9SVU5OSU5HLCAmaGlkLT5pb2ZsKSAmJgorCQkJCQkhdGVzdF9iaXQoSElEX09VVF9SVU5OSU5HLCAmaGlkLT5pb2ZsKSksCisJCQkJCTEwKkhaKSkgeworCQlkYmcoInRpbWVvdXQgd2FpdGluZyBmb3IgY3RybCBvciBvdXQgcXVldWUgdG8gY2xlYXIiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhpZF9nZXRfY2xhc3NfZGVzY3JpcHRvcihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgaWZudW0sCisJCXVuc2lnbmVkIGNoYXIgdHlwZSwgdm9pZCAqYnVmLCBpbnQgc2l6ZSkKK3sKKwlpbnQgcmVzdWx0LCByZXRyaWVzID0gNDsKKworCW1lbXNldChidWYsMCxzaXplKTsJLy8gTWFrZSBzdXJlIHdlIHBhcnNlIHJlYWxseSByZWNlaXZlZCBkYXRhCisKKwlkbyB7CisJCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLAorCQkJCVVTQl9SRVFfR0VUX0RFU0NSSVBUT1IsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX0lOLAorCQkJCSh0eXBlIDw8IDgpLCBpZm51bSwgYnVmLCBzaXplLCBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJCXJldHJpZXMtLTsKKwl9IHdoaWxlIChyZXN1bHQgPCBzaXplICYmIHJldHJpZXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK2ludCBoaWRfb3BlbihzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCWlmIChoaWQtPm9wZW4rKykKKwkJcmV0dXJuIDA7CisKKwloaWQtPnVyYmluLT5kZXYgPSBoaWQtPmRldjsKKworCWlmICh1c2Jfc3VibWl0X3VyYihoaWQtPnVyYmluLCBHRlBfS0VSTkVMKSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBoaWRfY2xvc2Uoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlpZiAoIS0taGlkLT5vcGVuKQorCQl1c2Jfa2lsbF91cmIoaGlkLT51cmJpbik7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGFsbCByZXBvcnRzCisgKi8KKwordm9pZCBoaWRfaW5pdF9yZXBvcnRzKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlpbnQgZXJyLCByZXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcG9ydCwgJmhpZC0+cmVwb3J0X2VudW1bSElEX0lOUFVUX1JFUE9SVF0ucmVwb3J0X2xpc3QsIGxpc3QpIHsKKwkJaW50IHNpemUgPSAoKHJlcG9ydC0+c2l6ZSAtIDEpID4+IDMpICsgMSArIGhpZC0+cmVwb3J0X2VudW1bSElEX0lOUFVUX1JFUE9SVF0ubnVtYmVyZWQ7CisJCWlmIChzaXplID4gSElEX0JVRkZFUl9TSVpFKSBzaXplID0gSElEX0JVRkZFUl9TSVpFOworCQlpZiAoc2l6ZSA+IGhpZC0+dXJiaW4tPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpCisJCQloaWQtPnVyYmluLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gc2l6ZTsKKwkJaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCByZXBvcnQsIFVTQl9ESVJfSU4pOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVwb3J0LCAmaGlkLT5yZXBvcnRfZW51bVtISURfRkVBVFVSRV9SRVBPUlRdLnJlcG9ydF9saXN0LCBsaXN0KQorCQloaWRfc3VibWl0X3JlcG9ydChoaWQsIHJlcG9ydCwgVVNCX0RJUl9JTik7CisKKwllcnIgPSAwOworCXJldCA9IGhpZF93YWl0X2lvKGhpZCk7CisJd2hpbGUgKHJldCkgeworCQllcnIgfD0gcmV0OworCQlpZiAodGVzdF9iaXQoSElEX0NUUkxfUlVOTklORywgJmhpZC0+aW9mbCkpCisJCQl1c2Jfa2lsbF91cmIoaGlkLT51cmJjdHJsKTsKKwkJaWYgKHRlc3RfYml0KEhJRF9PVVRfUlVOTklORywgJmhpZC0+aW9mbCkpCisJCQl1c2Jfa2lsbF91cmIoaGlkLT51cmJvdXQpOworCQlyZXQgPSBoaWRfd2FpdF9pbyhoaWQpOworCX0KKworCWlmIChlcnIpCisJCXdhcm4oInRpbWVvdXQgaW5pdGlhbGl6aW5nIHJlcG9ydHNcbiIpOworCisJdXNiX2NvbnRyb2xfbXNnKGhpZC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoaGlkLT5kZXYsIDApLAorCQlISURfUkVRX1NFVF9JRExFLCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsIDAsCisJCWhpZC0+aWZudW0sIE5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKK30KKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1dBQ09NCQkweDA1NmEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9XQUNPTV9QRU5QQVJUTkVSCTB4MDAwMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1dBQ09NX0dSQVBISVJFCTB4MDAxMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUwkweDAwMjAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9XQUNPTV9QTAkJMHgwMDMwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TMgkweDAwNDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9XQUNPTV9WT0xJVE8JMHgwMDYwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfV0FDT01fUFRVCQkweDAwMDMKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0tCR0VBUgkJMHgwODRlCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfS0JHRUFSX0pBTVNUVURJTwkweDEwMDEKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0FJUFRFSwkJMHgwOGNhCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzAxCQkweDAwMDEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BSVBURUtfMTAJCTB4MDAxMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FJUFRFS18yMAkJMHgwMDIwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzIxCQkweDAwMjEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BSVBURUtfMjIJCTB4MDAyMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FJUFRFS18yMwkJMHgwMDIzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzI0CQkweDAwMjQKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0dSSUZGSU4JCTB4MDc3ZAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1BPV0VSTUFURQkJMHgwNDEwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU09VTkRLTk9CCQkweDA0QUEKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0FURU4JCTB4MDU1NworI2RlZmluZSBVU0JfREVWSUNFX0lEX0FURU5fVUMxMDBLTQkweDIwMDQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BVEVOX0NTMTI0VQkweDIyMDIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BVEVOXzJQT1JUS1ZNCTB4MjIwNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FURU5fNFBPUlRLVk0JMHgyMjA1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVRFTl80UE9SVEtWTUMJMHgyMjA4CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9UT1BNQVgJCTB4MDY2MworI2RlZmluZSBVU0JfREVWSUNFX0lEX1RPUE1BWF9DT0JSQVBBRAkweDAxMDMKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0hBUFAJCTB4MDc4YgorI2RlZmluZSBVU0JfREVWSUNFX0lEX1VHQ0lfRFJJVklORwkweDAwMTAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9VR0NJX0ZMWUlORwkweDAwMjAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9VR0NJX0ZJR0hUSU5HCTB4MDAzMAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfTUdFCQkweDA0NjMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NR0VfVVBTCQkweGZmZmYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NR0VfVVBTMQkJMHgwMDAxCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9PTlRSQUsJCTB4MGEwNworI2RlZmluZSBVU0JfREVWSUNFX0lEX09OVFJBS19BRFUxMDAJMHgwMDY0CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9UQU5HVE9QCQkweDBkM2QKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9UQU5HVE9QX1VTQlBTMgkweDAwMDEKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0VTU0VOVElBTF9SRUFMSVRZCTB4MGQ3ZgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0VTU0VOVElBTF9SRUFMSVRZX1A1IDB4MDEwMAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQTRURUNICQkweDA5ZGEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BNFRFQ0hfV0NQMzJQVQkweDAwMDYKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0NZUFJFU1MJCTB4MDRiNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0NZUFJFU1NfTU9VU0UJMHgwMDAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19ISURDT00JMHg1NTAwCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9CRVJLU0hJUkUJCTB4MGM5OAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0JFUktTSElSRV9QQ1dECTB4MTE0MAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQUxQUwkJMHgwNDMzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfSUJNX0dBTUVQQUQJMHgxMTAxCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TQUlURUsJCTB4MDZhMworI2RlZmluZSBVU0JfREVWSUNFX0lEX1NBSVRFS19SVU1CTEVQQUQJMHhmZjE3CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9ORUMJCTB4MDczZQorI2RlZmluZSBVU0JfREVWSUNFX0lEX05FQ19VU0JfR0FNRV9QQUQJMHgwMzAxCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9DSElDCQkweDA1ZmUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9DSElDX0dBTUVQQUQJMHgwMDE0CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9HTEFCCQkweDA2YzIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF80X1BISURHRVRTRVJWT18zMAkweDAwMzgKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF8xX1BISURHRVRTRVJWT18zMAkweDAwMzkKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF84XzhfOF9JRl9LSVQJMHgwMDQ1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfMF8wXzRfSUZfS0lUCTB4MDA0MAorI2RlZmluZSBVU0JfREVWSUNFX0lEXzBfOF84X0lGX0tJVAkweDAwNTMKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUAkJMHgwOTI1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfMV9QSElER0VUU0VSVk9fMjAJMHg4MTAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfNF9QSElER0VUU0VSVk9fMjAJMHg4MTA0CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9DT0RFTUVSQ1MJCTB4MDdjMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0NPREVNRVJDU19JT1c0MAkweDE1MDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9DT0RFTUVSQ1NfSU9XMjQJMHgxNTAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ09ERU1FUkNTX0lPVzQ4CTB4MTUwMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0NPREVNRVJDU19JT1cyOAkweDE1MDMKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0RFTE9STUUJCTB4MTE2MworI2RlZmluZSBVU0JfREVWSUNFX0lEX0RFTE9STUVfRUFSVEhNQVRFIDB4MDEwMAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfTUNDCQkweDA5ZGIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQ0NfUE1EMTAyNExTCTB4MDA3NgorI2RlZmluZSBVU0JfREVWSUNFX0lEX01DQ19QTUQxMjA4TFMJMHgwMDdhCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9DSElDT05ZCQkweDA0ZjIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9DSElDT05ZX1VTQkhVQl9LQgkweDAxMDAKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0JUQwkJMHgwNDZlCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQlRDX0tFWUJPQVJECTB4NTMwMworCisKKy8qCisgKiBBbHBoYWJldGljYWxseSBzb3J0ZWQgYmxhY2tsaXN0IGJ5IHF1aXJrIHR5cGUuCisgKi8KKworc3RhdGljIHN0cnVjdCBoaWRfYmxhY2tsaXN0IHsKKwlfX3UxNiBpZFZlbmRvcjsKKwlfX3UxNiBpZFByb2R1Y3Q7CisJdW5zaWduZWQgcXVpcmtzOworfSBoaWRfYmxhY2tsaXN0W10gPSB7CisKKwl7IFVTQl9WRU5ET1JfSURfQUlQVEVLLCBVU0JfREVWSUNFX0lEX0FJUFRFS18wMSwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9BSVBURUssIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzEwLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjAsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfQUlQVEVLLCBVU0JfREVWSUNFX0lEX0FJUFRFS18yMSwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9BSVBURUssIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzIyLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjMsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfQUlQVEVLLCBVU0JfREVWSUNFX0lEX0FJUFRFS18yNCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9CRVJLU0hJUkUsIFVTQl9ERVZJQ0VfSURfQkVSS1NISVJFX1BDV0QsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfQ09ERU1FUkNTLCBVU0JfREVWSUNFX0lEX0NPREVNRVJDU19JT1c0MCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9DT0RFTUVSQ1MsIFVTQl9ERVZJQ0VfSURfQ09ERU1FUkNTX0lPVzI0LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0NPREVNRVJDUywgVVNCX0RFVklDRV9JRF9DT0RFTUVSQ1NfSU9XNDgsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfQ09ERU1FUkNTLCBVU0JfREVWSUNFX0lEX0NPREVNRVJDU19JT1cyOCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9DWVBSRVNTLCBVU0JfREVWSUNFX0lEX0NZUFJFU1NfSElEQ09NLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0RFTE9STUUsIFVTQl9ERVZJQ0VfSURfREVMT1JNRV9FQVJUSE1BVEUsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfRVNTRU5USUFMX1JFQUxJVFksIFVTQl9ERVZJQ0VfSURfRVNTRU5USUFMX1JFQUxJVFlfUDUsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF80X1BISURHRVRTRVJWT18zMCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEXzFfUEhJREdFVFNFUlZPXzMwLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfOF84XzhfSUZfS0lULCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfMF8wXzRfSUZfS0lULCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfMF84XzhfSUZfS0lULCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dSSUZGSU4sIFVTQl9ERVZJQ0VfSURfUE9XRVJNQVRFLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dSSUZGSU4sIFVTQl9ERVZJQ0VfSURfU09VTkRLTk9CLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0tCR0VBUiwgVVNCX0RFVklDRV9JRF9LQkdFQVJfSkFNU1RVRElPLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX01DQywgVVNCX0RFVklDRV9JRF9NQ0NfUE1EMTAyNExTLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX01DQywgVVNCX0RFVklDRV9JRF9NQ0NfUE1EMTIwOExTLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX01HRSwgVVNCX0RFVklDRV9JRF9NR0VfVVBTLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX01HRSwgVVNCX0RFVklDRV9JRF9NR0VfVVBTMSwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDEwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDIwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDMwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDQwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDUwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9QRU5QQVJUTkVSLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0dSQVBISVJFLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0dSQVBISVJFICsgMSwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9HUkFQSElSRSArIDIsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fR1JBUEhJUkUgKyAzLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0dSQVBISVJFICsgNCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9JTlRVT1MsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TICsgMSwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9JTlRVT1MgKyAyLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUyArIDMsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TICsgNCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9QTCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9QTCArIDEsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fUEwgKyAyLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX1BMICsgMywgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9QTCArIDQsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fUEwgKyA1LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzIgKyAxLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzIgKyAyLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzIgKyAzLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzIgKyA0LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzIgKyA1LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzIgKyA3LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX1ZPTElUTywgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9QVFUsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0lTRUdST1VQLCBVU0JfREVWSUNFX0lEXzRfUEhJREdFVFNFUlZPXzIwLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUCwgVVNCX0RFVklDRV9JRF8xX1BISURHRVRTRVJWT18yMCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCisJeyBVU0JfVkVORE9SX0lEX0FURU4sIFVTQl9ERVZJQ0VfSURfQVRFTl9VQzEwMEtNLCBISURfUVVJUktfTk9HRVQgfSwKKwl7IFVTQl9WRU5ET1JfSURfQVRFTiwgVVNCX0RFVklDRV9JRF9BVEVOX0NTMTI0VSwgSElEX1FVSVJLX05PR0VUIH0sCisJeyBVU0JfVkVORE9SX0lEX0FURU4sIFVTQl9ERVZJQ0VfSURfQVRFTl8yUE9SVEtWTSwgSElEX1FVSVJLX05PR0VUIH0sCisJeyBVU0JfVkVORE9SX0lEX0FURU4sIFVTQl9ERVZJQ0VfSURfQVRFTl80UE9SVEtWTSwgSElEX1FVSVJLX05PR0VUIH0sCisJeyBVU0JfVkVORE9SX0lEX0FURU4sIFVTQl9ERVZJQ0VfSURfQVRFTl80UE9SVEtWTUMsIEhJRF9RVUlSS19OT0dFVCB9LAorCXsgVVNCX1ZFTkRPUl9JRF9CVEMsIFVTQl9ERVZJQ0VfSURfQlRDX0tFWUJPQVJELCBISURfUVVJUktfTk9HRVR9LAorCXsgVVNCX1ZFTkRPUl9JRF9DSElDT05ZLCBVU0JfREVWSUNFX0lEX0NISUNPTllfVVNCSFVCX0tCLCBISURfUVVJUktfTk9HRVR9LAorCXsgVVNCX1ZFTkRPUl9JRF9UQU5HVE9QLCBVU0JfREVWSUNFX0lEX1RBTkdUT1BfVVNCUFMyLCBISURfUVVJUktfTk9HRVQgfSwKKworCXsgVVNCX1ZFTkRPUl9JRF9BNFRFQ0gsIFVTQl9ERVZJQ0VfSURfQTRURUNIX1dDUDMyUFUsIEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS183IH0sCisJeyBVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19NT1VTRSwgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLXzUgfSwKKworCXsgVVNCX1ZFTkRPUl9JRF9BTFBTLCBVU0JfREVWSUNFX0lEX0lCTV9HQU1FUEFELCBISURfUVVJUktfQkFEUEFEIH0sCisJeyBVU0JfVkVORE9SX0lEX0NISUMsIFVTQl9ERVZJQ0VfSURfQ0hJQ19HQU1FUEFELCBISURfUVVJUktfQkFEUEFEIH0sCisJeyBVU0JfVkVORE9SX0lEX0hBUFAsIFVTQl9ERVZJQ0VfSURfVUdDSV9EUklWSU5HLCBISURfUVVJUktfQkFEUEFEIHwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCisJeyBVU0JfVkVORE9SX0lEX0hBUFAsIFVTQl9ERVZJQ0VfSURfVUdDSV9GTFlJTkcsIEhJRF9RVUlSS19CQURQQUQgfCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKKwl7IFVTQl9WRU5ET1JfSURfSEFQUCwgVVNCX0RFVklDRV9JRF9VR0NJX0ZJR0hUSU5HLCBISURfUVVJUktfQkFEUEFEIHwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCisJeyBVU0JfVkVORE9SX0lEX05FQywgVVNCX0RFVklDRV9JRF9ORUNfVVNCX0dBTUVfUEFELCBISURfUVVJUktfQkFEUEFEIH0sCisJeyBVU0JfVkVORE9SX0lEX1NBSVRFSywgVVNCX0RFVklDRV9JRF9TQUlURUtfUlVNQkxFUEFELCBISURfUVVJUktfQkFEUEFEIH0sCisJeyBVU0JfVkVORE9SX0lEX1RPUE1BWCwgVVNCX0RFVklDRV9JRF9UT1BNQVhfQ09CUkFQQUQsIEhJRF9RVUlSS19CQURQQUQgfSwKKworCXsgMCwgMCB9Cit9OworCitzdGF0aWMgaW50IGhpZF9hbGxvY19idWZmZXJzKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJaWYgKCEoaGlkLT5pbmJ1ZiA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCBISURfQlVGRkVSX1NJWkUsIFNMQUJfQVRPTUlDLCAmaGlkLT5pbmJ1Zl9kbWEpKSkKKwkJcmV0dXJuIC0xOworCWlmICghKGhpZC0+b3V0YnVmID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIEhJRF9CVUZGRVJfU0laRSwgU0xBQl9BVE9NSUMsICZoaWQtPm91dGJ1Zl9kbWEpKSkKKwkJcmV0dXJuIC0xOworCWlmICghKGhpZC0+Y3IgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgc2l6ZW9mKCooaGlkLT5jcikpLCBTTEFCX0FUT01JQywgJmhpZC0+Y3JfZG1hKSkpCisJCXJldHVybiAtMTsKKwlpZiAoIShoaWQtPmN0cmxidWYgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgSElEX0JVRkZFUl9TSVpFLCBTTEFCX0FUT01JQywgJmhpZC0+Y3RybGJ1Zl9kbWEpKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhpZF9mcmVlX2J1ZmZlcnMoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlpZiAoaGlkLT5pbmJ1ZikKKwkJdXNiX2J1ZmZlcl9mcmVlKGRldiwgSElEX0JVRkZFUl9TSVpFLCBoaWQtPmluYnVmLCBoaWQtPmluYnVmX2RtYSk7CisJaWYgKGhpZC0+b3V0YnVmKQorCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCBISURfQlVGRkVSX1NJWkUsIGhpZC0+b3V0YnVmLCBoaWQtPm91dGJ1Zl9kbWEpOworCWlmIChoaWQtPmNyKQorCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCBzaXplb2YoKihoaWQtPmNyKSksIGhpZC0+Y3IsIGhpZC0+Y3JfZG1hKTsKKwlpZiAoaGlkLT5jdHJsYnVmKQorCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCBISURfQlVGRkVSX1NJWkUsIGhpZC0+Y3RybGJ1ZiwgaGlkLT5jdHJsYnVmX2RtYSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RldmljZSAqdXNiX2hpZF9jb25maWd1cmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOworCXN0cnVjdCBoaWRfZGVzY3JpcHRvciAqaGRlc2M7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZDsKKwl1bnNpZ25lZCBxdWlya3MgPSAwLCByc2l6ZSA9IDA7CisJY2hhciAqYnVmLCAqcmRlc2M7CisJaW50IG47CisKKwlmb3IgKG4gPSAwOyBoaWRfYmxhY2tsaXN0W25dLmlkVmVuZG9yOyBuKyspCisJCWlmICgoaGlkX2JsYWNrbGlzdFtuXS5pZFZlbmRvciA9PSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpKSAmJgorCQkJKGhpZF9ibGFja2xpc3Rbbl0uaWRQcm9kdWN0ID09IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKSkKKwkJCQlxdWlya3MgPSBoaWRfYmxhY2tsaXN0W25dLnF1aXJrczsKKworCWlmIChxdWlya3MgJiBISURfUVVJUktfSUdOT1JFKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICh1c2JfZ2V0X2V4dHJhX2Rlc2NyaXB0b3IoaW50ZXJmYWNlLCBISURfRFRfSElELCAmaGRlc2MpICYmICgoIWludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzKSB8fAorCQl1c2JfZ2V0X2V4dHJhX2Rlc2NyaXB0b3IoJmludGVyZmFjZS0+ZW5kcG9pbnRbMF0sIEhJRF9EVF9ISUQsICZoZGVzYykpKSB7CisJCQlkYmcoImNsYXNzIGRlc2NyaXB0b3Igbm90IHByZXNlbnRcbiIpOworCQkJcmV0dXJuIE5VTEw7CisJfQorCisJZm9yIChuID0gMDsgbiA8IGhkZXNjLT5iTnVtRGVzY3JpcHRvcnM7IG4rKykKKwkJaWYgKGhkZXNjLT5kZXNjW25dLmJEZXNjcmlwdG9yVHlwZSA9PSBISURfRFRfUkVQT1JUKQorCQkJcnNpemUgPSBsZTE2X3RvX2NwdShoZGVzYy0+ZGVzY1tuXS53RGVzY3JpcHRvckxlbmd0aCk7CisKKwlpZiAoIXJzaXplIHx8IHJzaXplID4gSElEX01BWF9ERVNDUklQVE9SX1NJWkUpIHsKKwkJZGJnKCJ3ZWlyZCBzaXplIG9mIHJlcG9ydCBkZXNjcmlwdG9yICgldSkiLCByc2l6ZSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmICghKHJkZXNjID0ga21hbGxvYyhyc2l6ZSwgR0ZQX0tFUk5FTCkpKSB7CisJCWRiZygiY291bGRuJ3QgYWxsb2NhdGUgcmRlc2MgbWVtb3J5Iik7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmICgobiA9IGhpZF9nZXRfY2xhc3NfZGVzY3JpcHRvcihkZXYsIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCBISURfRFRfUkVQT1JULCByZGVzYywgcnNpemUpKSA8IDApIHsKKwkJZGJnKCJyZWFkaW5nIHJlcG9ydCBkZXNjcmlwdG9yIGZhaWxlZCIpOworCQlrZnJlZShyZGVzYyk7CisJCXJldHVybiBOVUxMOworCX0KKworI2lmZGVmIERFQlVHX0RBVEEKKwlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiByZXBvcnQgZGVzY3JpcHRvciAoc2l6ZSAldSwgcmVhZCAlZCkgPSAiLCByc2l6ZSwgbik7CisJZm9yIChuID0gMDsgbiA8IHJzaXplOyBuKyspCisJCXByaW50aygiICUwMngiLCAodW5zaWduZWQgY2hhcikgcmRlc2Nbbl0pOworCXByaW50aygiXG4iKTsKKyNlbmRpZgorCisJaWYgKCEoaGlkID0gaGlkX3BhcnNlX3JlcG9ydChyZGVzYywgbikpKSB7CisJCWRiZygicGFyc2luZyByZXBvcnQgZGVzY3JpcHRvciBmYWlsZWQiKTsKKwkJa2ZyZWUocmRlc2MpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlrZnJlZShyZGVzYyk7CisJaGlkLT5xdWlya3MgPSBxdWlya3M7CisKKwlpZiAoaGlkX2FsbG9jX2J1ZmZlcnMoZGV2LCBoaWQpKSB7CisJCWhpZF9mcmVlX2J1ZmZlcnMoZGV2LCBoaWQpOworCQlnb3RvIGZhaWw7CisJfQorCisJZm9yIChuID0gMDsgbiA8IGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBuKyspIHsKKworCQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCQlpbnQgcGlwZTsKKwkJaW50IGludGVydmFsOworCisJCWVuZHBvaW50ID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbbl0uZGVzYzsKKwkJaWYgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgIT0gMykJCS8qIE5vdCBhbiBpbnRlcnJ1cHQgZW5kcG9pbnQgKi8KKwkJCWNvbnRpbnVlOworCisJCS8qIGhhbmRsZSBwb3RlbnRpYWwgaGlnaHNwZWVkIEhJRCBjb3JyZWN0bHkgKi8KKwkJaW50ZXJ2YWwgPSBlbmRwb2ludC0+YkludGVydmFsOworCQlpZiAoZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJCWludGVydmFsID0gMSA8PCAoaW50ZXJ2YWwgLSAxKTsKKworCQkvKiBDaGFuZ2UgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgb2YgbWljZS4gKi8KKwkJaWYgKGhpZC0+Y29sbGVjdGlvbi0+dXNhZ2UgPT0gSElEX0dEX01PVVNFICYmIGhpZF9tb3VzZXBvbGxfaW50ZXJ2YWwgPiAwKQorCQkJaW50ZXJ2YWwgPSBoaWRfbW91c2Vwb2xsX2ludGVydmFsOworCQkKKwkJaWYgKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgeworCQkJaWYgKGhpZC0+dXJiaW4pCisJCQkJY29udGludWU7CisJCQlpZiAoIShoaWQtPnVyYmluID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKSkpCisJCQkJZ290byBmYWlsOworCQkJcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKGRldiwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpOworCQkJdXNiX2ZpbGxfaW50X3VyYihoaWQtPnVyYmluLCBkZXYsIHBpcGUsIGhpZC0+aW5idWYsIDAsCisJCQkJCSBoaWRfaXJxX2luLCBoaWQsIGludGVydmFsKTsKKwkJCWhpZC0+dXJiaW4tPnRyYW5zZmVyX2RtYSA9IGhpZC0+aW5idWZfZG1hOworCQkJaGlkLT51cmJpbi0+dHJhbnNmZXJfZmxhZ3MgfD0oVVJCX05PX1RSQU5TRkVSX0RNQV9NQVAgfCBVUkJfQVNZTkNfVU5MSU5LKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChoaWQtPnVyYm91dCkKKwkJCQljb250aW51ZTsKKwkJCWlmICghKGhpZC0+dXJib3V0ID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKSkpCisJCQkJZ290byBmYWlsOworCQkJcGlwZSA9IHVzYl9zbmRpbnRwaXBlKGRldiwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpOworCQkJdXNiX2ZpbGxfaW50X3VyYihoaWQtPnVyYm91dCwgZGV2LCBwaXBlLCBoaWQtPm91dGJ1ZiwgMCwKKwkJCQkJIGhpZF9pcnFfb3V0LCBoaWQsIGludGVydmFsKTsKKwkJCWhpZC0+dXJib3V0LT50cmFuc2Zlcl9kbWEgPSBoaWQtPm91dGJ1Zl9kbWE7CisJCQloaWQtPnVyYm91dC0+dHJhbnNmZXJfZmxhZ3MgfD0gKFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQIHwgVVJCX0FTWU5DX1VOTElOSyk7CisJCX0KKwl9CisKKwlpZiAoIWhpZC0+dXJiaW4pIHsKKwkJZXJyKCJjb3VsZG4ndCBmaW5kIGFuIGlucHV0IGludGVycnVwdCBlbmRwb2ludCIpOworCQlnb3RvIGZhaWw7CisJfQorCisJaW5pdF93YWl0cXVldWVfaGVhZCgmaGlkLT53YWl0KTsKKworCXNwaW5fbG9ja19pbml0KCZoaWQtPm91dGxvY2spOworCXNwaW5fbG9ja19pbml0KCZoaWQtPmN0cmxsb2NrKTsKKworCWhpZC0+dmVyc2lvbiA9IGxlMTZfdG9fY3B1KGhkZXNjLT5iY2RISUQpOworCWhpZC0+Y291bnRyeSA9IGhkZXNjLT5iQ291bnRyeUNvZGU7CisJaGlkLT5kZXYgPSBkZXY7CisJaGlkLT5pbnRmID0gaW50ZjsKKwloaWQtPmlmbnVtID0gaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisKKwloaWQtPm5hbWVbMF0gPSAwOworCisJaWYgKCEoYnVmID0ga21hbGxvYyg2NCwgR0ZQX0tFUk5FTCkpKQorCQlnb3RvIGZhaWw7CisKKwlpZiAoZGV2LT5tYW51ZmFjdHVyZXIpIHsKKwkJc3RyY2F0KGhpZC0+bmFtZSwgZGV2LT5tYW51ZmFjdHVyZXIpOworCQlpZiAoZGV2LT5wcm9kdWN0KQorCQkJc25wcmludGYoaGlkLT5uYW1lLCA2NCwgIiVzICVzIiwgaGlkLT5uYW1lLCBkZXYtPnByb2R1Y3QpOworCX0gZWxzZSBpZiAoZGV2LT5wcm9kdWN0KSB7CisJCQlzbnByaW50ZihoaWQtPm5hbWUsIDEyOCwgIiVzIiwgZGV2LT5wcm9kdWN0KTsKKwl9IGVsc2UKKwkJc25wcmludGYoaGlkLT5uYW1lLCAxMjgsICIlMDR4OiUwNHgiLAorCQkJbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkJCWxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKKworCXVzYl9tYWtlX3BhdGgoZGV2LCBidWYsIDY0KTsKKwlzbnByaW50ZihoaWQtPnBoeXMsIDY0LCAiJXMvaW5wdXQlZCIsIGJ1ZiwKKwkJCWludGYtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKworCWlmICh1c2Jfc3RyaW5nKGRldiwgZGV2LT5kZXNjcmlwdG9yLmlTZXJpYWxOdW1iZXIsIGhpZC0+dW5pcSwgNjQpIDw9IDApCisJCWhpZC0+dW5pcVswXSA9IDA7CisKKwlrZnJlZShidWYpOworCisJaGlkLT51cmJjdHJsID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhpZC0+dXJiY3RybCkKKwkJZ290byBmYWlsOworCXVzYl9maWxsX2NvbnRyb2xfdXJiKGhpZC0+dXJiY3RybCwgZGV2LCAwLCAodm9pZCAqKSBoaWQtPmNyLAorCQkJICAgICBoaWQtPmN0cmxidWYsIDEsIGhpZF9jdHJsLCBoaWQpOworCWhpZC0+dXJiY3RybC0+c2V0dXBfZG1hID0gaGlkLT5jcl9kbWE7CisJaGlkLT51cmJjdHJsLT50cmFuc2Zlcl9kbWEgPSBoaWQtPmN0cmxidWZfZG1hOworCWhpZC0+dXJiY3RybC0+dHJhbnNmZXJfZmxhZ3MgfD0gKFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQIHwgVVJCX05PX1NFVFVQX0RNQV9NQVAgfCBVUkJfQVNZTkNfVU5MSU5LKTsKKworCXJldHVybiBoaWQ7CisKK2ZhaWw6CisKKwlpZiAoaGlkLT51cmJpbikKKwkJdXNiX2ZyZWVfdXJiKGhpZC0+dXJiaW4pOworCWlmIChoaWQtPnVyYm91dCkKKwkJdXNiX2ZyZWVfdXJiKGhpZC0+dXJib3V0KTsKKwlpZiAoaGlkLT51cmJjdHJsKQorCQl1c2JfZnJlZV91cmIoaGlkLT51cmJjdHJsKTsKKwloaWRfZnJlZV9idWZmZXJzKGRldiwgaGlkKTsKKwloaWRfZnJlZV9kZXZpY2UoaGlkKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBoaWRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisKKwlpZiAoIWhpZCkKKwkJcmV0dXJuOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwl1c2Jfa2lsbF91cmIoaGlkLT51cmJpbik7CisJdXNiX2tpbGxfdXJiKGhpZC0+dXJib3V0KTsKKwl1c2Jfa2lsbF91cmIoaGlkLT51cmJjdHJsKTsKKworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkKKwkJaGlkaW5wdXRfZGlzY29ubmVjdChoaWQpOworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYpCisJCWhpZGRldl9kaXNjb25uZWN0KGhpZCk7CisKKwl1c2JfZnJlZV91cmIoaGlkLT51cmJpbik7CisJdXNiX2ZyZWVfdXJiKGhpZC0+dXJiY3RybCk7CisJaWYgKGhpZC0+dXJib3V0KQorCQl1c2JfZnJlZV91cmIoaGlkLT51cmJvdXQpOworCisJaGlkX2ZyZWVfYnVmZmVycyhoaWQtPmRldiwgaGlkKTsKKwloaWRfZnJlZV9kZXZpY2UoaGlkKTsKK30KKworc3RhdGljIGludCBoaWRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkOworCWNoYXIgcGF0aFs2NF07CisJaW50IGk7CisJY2hhciAqYzsKKworCWRiZygiSElEIHByb2JlIGNhbGxlZCBmb3IgaWZudW0gJWQiLAorCQkJaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKworCWlmICghKGhpZCA9IHVzYl9oaWRfY29uZmlndXJlKGludGYpKSkKKwkJcmV0dXJuIC1FSU87CisKKwloaWRfaW5pdF9yZXBvcnRzKGhpZCk7CisJaGlkX2R1bXBfZGV2aWNlKGhpZCk7CisKKwlpZiAoIWhpZGlucHV0X2Nvbm5lY3QoaGlkKSkKKwkJaGlkLT5jbGFpbWVkIHw9IEhJRF9DTEFJTUVEX0lOUFVUOworCWlmICghaGlkZGV2X2Nvbm5lY3QoaGlkKSkKKwkJaGlkLT5jbGFpbWVkIHw9IEhJRF9DTEFJTUVEX0hJRERFVjsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgaGlkKTsKKworCWlmICghaGlkLT5jbGFpbWVkKSB7CisJCXByaW50ayAoIkhJRCBkZXZpY2Ugbm90IGNsYWltZWQgYnkgaW5wdXQgb3IgaGlkZGV2XG4iKTsKKwkJaGlkX2Rpc2Nvbm5lY3QoaW50Zik7CisJCXJldHVybiAtRUlPOworCX0KKworCXByaW50ayhLRVJOX0lORk8pOworCisJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKQorCQlwcmludGsoImlucHV0Iik7CisJaWYgKGhpZC0+Y2xhaW1lZCA9PSAoSElEX0NMQUlNRURfSU5QVVQgfCBISURfQ0xBSU1FRF9ISURERVYpKQorCQlwcmludGsoIiwiKTsKKwlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWKQorCQlwcmludGsoImhpZGRldiVkIiwgaGlkLT5taW5vcik7CisKKwljID0gIkRldmljZSI7CisJZm9yIChpID0gMDsgaSA8IGhpZC0+bWF4Y29sbGVjdGlvbjsgaSsrKSB7CisJCWlmIChoaWQtPmNvbGxlY3Rpb25baV0udHlwZSA9PSBISURfQ09MTEVDVElPTl9BUFBMSUNBVElPTiAmJgorCQkgICAgKGhpZC0+Y29sbGVjdGlvbltpXS51c2FnZSAmIEhJRF9VU0FHRV9QQUdFKSA9PSBISURfVVBfR0VOREVTSyAmJgorCQkgICAgKGhpZC0+Y29sbGVjdGlvbltpXS51c2FnZSAmIDB4ZmZmZikgPCBBUlJBWV9TSVpFKGhpZF90eXBlcykpIHsKKwkJCWMgPSBoaWRfdHlwZXNbaGlkLT5jb2xsZWN0aW9uW2ldLnVzYWdlICYgMHhmZmZmXTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJdXNiX21ha2VfcGF0aChpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCBwYXRoLCA2Myk7CisKKwlwcmludGsoIjogVVNCIEhJRCB2JXguJTAyeCAlcyBbJXNdIG9uICVzXG4iLAorCQloaWQtPnZlcnNpb24gPj4gOCwgaGlkLT52ZXJzaW9uICYgMHhmZiwgYywgaGlkLT5uYW1lLCBwYXRoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhpZF9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCB1MzIgc3RhdGUpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCisJdXNiX2tpbGxfdXJiKGhpZC0+dXJiaW4pOworCWludGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOworCWRldl9kYmcoJmludGYtPmRldiwgInN1c3BlbmRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhpZF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCWludCBzdGF0dXM7CisKKwlpbnRmLT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTV9TVVNQRU5EX09OOworCWlmIChoaWQtPm9wZW4pCisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKGhpZC0+dXJiaW4sIEdGUF9OT0lPKTsKKwllbHNlCisJCXN0YXR1cyA9IDA7CisJZGV2X2RiZygmaW50Zi0+ZGV2LCAicmVzdW1lIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaGlkX3VzYl9pZHMgW10gPSB7CisJeyAubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUywKKwkJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9JTlRFUkZBQ0VfQ0xBU1NfSElEIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaGlkX3VzYl9pZHMpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaGlkX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkidXNiaGlkIiwKKwkucHJvYmUgPQloaWRfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQloaWRfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CWhpZF9zdXNwZW5kLAorCS5yZXN1bWUgPQloaWRfcmVzdW1lLAorCS5pZF90YWJsZSA9CWhpZF91c2JfaWRzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaGlkX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IGhpZGRldl9pbml0KCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBoaWRkZXZfaW5pdF9mYWlsOworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmaGlkX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJZ290byB1c2JfcmVnaXN0ZXJfZmFpbDsKKwlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisKKwlyZXR1cm4gMDsKK3VzYl9yZWdpc3Rlcl9mYWlsOgorCWhpZGRldl9leGl0KCk7CitoaWRkZXZfaW5pdF9mYWlsOgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBoaWRfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZoaWRfZHJpdmVyKTsKKwloaWRkZXZfZXhpdCgpOworfQorCittb2R1bGVfaW5pdChoaWRfaW5pdCk7Cittb2R1bGVfZXhpdChoaWRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoRFJJVkVSX0xJQ0VOU0UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWRlYnVnLmggYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjkxNzA1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWRlYnVnLmgKQEAgLTAsMCArMSw3MjAgQEAKKy8qCisgKiAkSWQ6IGhpZC1kZWJ1Zy5oLHYgMS44IDIwMDEvMDkvMjUgMDk6Mzc6NTcgdm9qdGVjaCBFeHAgJAorICoKKyAqICAoYykgMTk5OSBBbmRyZWFzIEdhbAkJPGdhbEBjcy51bmktbWFnZGVidXJnLmRlPgorICogIChjKSAyMDAwLTIwMDEgVm9qdGVjaCBQYXZsaWsJPHZvanRlY2hAdWN3LmN6PgorICoKKyAqICBTb21lIGRlYnVnIHN0dWZmIGZvciB0aGUgSElEIHBhcnNlci4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBTaG91bGQgeW91IG5lZWQgdG8gY29udGFjdCBtZSwgdGhlIGF1dGhvciwgeW91IGNhbiBkbyBzbyBlaXRoZXIgYnkKKyAqIGUtbWFpbCAtIG1haWwgeW91ciBtZXNzYWdlIHRvIDx2b2p0ZWNoQHVjdy5jej4sIG9yIGJ5IHBhcGVyIG1haWw6CisgKiBWb2p0ZWNoIFBhdmxpaywgU2ltdW5rb3ZhIDE1OTQsIFByYWd1ZSA4LCAxODIgMDAgQ3plY2ggUmVwdWJsaWMKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKworc3RydWN0IGhpZF91c2FnZV9lbnRyeSB7CisJdW5zaWduZWQgIHBhZ2U7CisJdW5zaWduZWQgIHVzYWdlOworCWNoYXIgICAgICpkZXNjcmlwdGlvbjsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX3VzYWdlX2VudHJ5IGhpZF91c2FnZV90YWJsZVtdID0geworICB7ICAwLCAgICAgIDAsICJVbmRlZmluZWQiIH0sCisgIHsgIDEsICAgICAgMCwgIkdlbmVyaWNEZXNrdG9wIiB9LAorICAgIHswLCAweDAxLCAiUG9pbnRlciJ9LAorICAgIHswLCAweDAyLCAiTW91c2UifSwKKyAgICB7MCwgMHgwNCwgIkpveXN0aWNrIn0sCisgICAgezAsIDB4MDUsICJHYW1lUGFkIn0sCisgICAgezAsIDB4MDYsICJLZXlib2FyZCJ9LAorICAgIHswLCAweDA3LCAiS2V5cGFkIn0sCisgICAgezAsIDB4MDgsICJNdWx0aUF4aXMifSwKKyAgICAgIHswLCAweDMwLCAiWCJ9LAorICAgICAgezAsIDB4MzEsICJZIn0sCisgICAgICB7MCwgMHgzMiwgIloifSwKKyAgICAgIHswLCAweDMzLCAiUngifSwKKyAgICAgIHswLCAweDM0LCAiUnkifSwKKyAgICAgIHswLCAweDM1LCAiUnoifSwKKyAgICAgIHswLCAweDM2LCAiU2xpZGVyIn0sCisgICAgICB7MCwgMHgzNywgIkRpYWwifSwKKyAgICAgIHswLCAweDM4LCAiV2hlZWwifSwKKyAgICAgIHswLCAweDM5LCAiSGF0U3dpdGNoIn0sCisgICAgezAsIDB4M2EsICJDb3VudGVkQnVmZmVyIn0sCisgICAgICB7MCwgMHgzYiwgIkJ5dGVDb3VudCJ9LAorICAgICAgezAsIDB4M2MsICJNb3Rpb25XYWtldXAifSwKKyAgICAgIHswLCAweDNkLCAiU3RhcnQifSwKKyAgICAgIHswLCAweDNlLCAiU2VsZWN0In0sCisgICAgICB7MCwgMHg0MCwgIlZ4In0sCisgICAgICB7MCwgMHg0MSwgIlZ5In0sCisgICAgICB7MCwgMHg0MiwgIlZ6In0sCisgICAgICB7MCwgMHg0MywgIlZicngifSwKKyAgICAgIHswLCAweDQ0LCAiVmJyeSJ9LAorICAgICAgezAsIDB4NDUsICJWYnJ6In0sCisgICAgICB7MCwgMHg0NiwgIlZubyJ9LAorICAgIHswLCAweDgwLCAiU3lzdGVtQ29udHJvbCJ9LCAKKyAgICAgIHswLCAweDgxLCAiU3lzdGVtUG93ZXJEb3duIn0sCisgICAgICB7MCwgMHg4MiwgIlN5c3RlbVNsZWVwIn0sCisgICAgICB7MCwgMHg4MywgIlN5c3RlbVdha2VVcCJ9LAorICAgICAgezAsIDB4ODQsICJTeXN0ZW1Db250ZXh0TWVudSJ9LAorICAgICAgezAsIDB4ODUsICJTeXN0ZW1NYWluTWVudSJ9LAorICAgICAgezAsIDB4ODYsICJTeXN0ZW1BcHBNZW51In0sCisgICAgICB7MCwgMHg4NywgIlN5c3RlbU1lbnVIZWxwIn0sCisgICAgICB7MCwgMHg4OCwgIlN5c3RlbU1lbnVFeGl0In0sCisgICAgICB7MCwgMHg4OSwgIlN5c3RlbU1lbnVTZWxlY3QifSwKKyAgICAgIHswLCAweDhhLCAiU3lzdGVtTWVudVJpZ2h0In0sCisgICAgICB7MCwgMHg4YiwgIlN5c3RlbU1lbnVMZWZ0In0sCisgICAgICB7MCwgMHg4YywgIlN5c3RlbU1lbnVVcCJ9LAorICAgICAgezAsIDB4OGQsICJTeXN0ZW1NZW51RG93biJ9LAorICAgICAgezAsIDB4OTAsICJELVBhZFVwIn0sCisgICAgICB7MCwgMHg5MSwgIkQtUGFkRG93biJ9LAorICAgICAgezAsIDB4OTIsICJELVBhZFJpZ2h0In0sCisgICAgICB7MCwgMHg5MywgIkQtUGFkTGVmdCJ9LAorICB7ICA3LCAwLCAiS2V5Ym9hcmQiIH0sCisgIHsgIDgsIDAsICJMRUQiIH0sCisgICAgICB7MCwgMHgwMSwgIk51bUxvY2sifSwKKyAgICAgIHswLCAweDAyLCAiQ2Fwc0xvY2sifSwKKyAgICAgIHswLCAweDAzLCAiU2Nyb2xsTG9jayJ9LAorICAgICAgezAsIDB4MDQsICJDb21wb3NlIn0sCisgICAgICB7MCwgMHgwNSwgIkthbmEifSwKKyAgeyAgOSwgMCwgIkJ1dHRvbiIgfSwKKyAgeyAxMCwgMCwgIk9yZGluYWwiIH0sCisgIHsgMTIsIDAsICJDb25zdW1lciIgfSwKKyAgICAgIHswLCAweDIzOCwgIkhvcml6b250YWxXaGVlbCJ9LAorICB7IDEzLCAwLCAiRGlnaXRpemVycyIgfSwKKyAgICB7MCwgMHgwMSwgIkRpZ2l0aXplciJ9LAorICAgIHswLCAweDAyLCAiUGVuIn0sCisgICAgezAsIDB4MDMsICJMaWdodFBlbiJ9LAorICAgIHswLCAweDA0LCAiVG91Y2hTY3JlZW4ifSwKKyAgICB7MCwgMHgwNSwgIlRvdWNoUGFkIn0sCisgICAgezAsIDB4MjAsICJTdHlsdXMifSwKKyAgICB7MCwgMHgyMSwgIlB1Y2sifSwKKyAgICB7MCwgMHgyMiwgIkZpbmdlciJ9LAorICAgIHswLCAweDMwLCAiVGlwUHJlc3N1cmUifSwKKyAgICB7MCwgMHgzMSwgIkJhcnJlbFByZXNzdXJlIn0sCisgICAgezAsIDB4MzIsICJJblJhbmdlIn0sCisgICAgezAsIDB4MzMsICJUb3VjaCJ9LAorICAgIHswLCAweDM0LCAiVW5Ub3VjaCJ9LAorICAgIHswLCAweDM1LCAiVGFwIn0sCisgICAgezAsIDB4MzksICJUYWJsZXRGdW5jdGlvbktleSJ9LAorICAgIHswLCAweDNhLCAiUHJvZ3JhbUNoYW5nZUtleSJ9LAorICAgIHswLCAweDNjLCAiSW52ZXJ0In0sCisgICAgezAsIDB4NDIsICJUaXBTd2l0Y2gifSwKKyAgICB7MCwgMHg0MywgIlNlY29uZGFyeVRpcFN3aXRjaCJ9LAorICAgIHswLCAweDQ0LCAiQmFycmVsU3dpdGNoIn0sCisgICAgezAsIDB4NDUsICJFcmFzZXIifSwKKyAgICB7MCwgMHg0NiwgIlRhYmxldFBpY2sifSwKKyAgeyAxNSwgMCwgIlBoeXNpY2FsSW50ZXJmYWNlRGV2aWNlIiB9LAorICAgIHswLCAweDAwLCAiVW5kZWZpbmVkIn0sCisgICAgezAsIDB4MDEsICJQaHlzaWNhbF9JbnRlcmZhY2VfRGV2aWNlIn0sCisgICAgICB7MCwgMHgyMCwgIk5vcm1hbCJ9LAorICAgIHswLCAweDIxLCAiU2V0X0VmZmVjdF9SZXBvcnQifSwKKyAgICAgIHswLCAweDIyLCAiRWZmZWN0X0Jsb2NrX0luZGV4In0sCisgICAgICB7MCwgMHgyMywgIlBhcmFtZXRlcl9CbG9ja19PZmZzZXQifSwKKyAgICAgIHswLCAweDI0LCAiUk9NX0ZsYWcifSwKKyAgICAgIHswLCAweDI1LCAiRWZmZWN0X1R5cGUifSwKKyAgICAgICAgezAsIDB4MjYsICJFVF9Db25zdGFudF9Gb3JjZSJ9LAorICAgICAgICB7MCwgMHgyNywgIkVUX1JhbXAifSwKKyAgICAgICAgezAsIDB4MjgsICJFVF9DdXN0b21fRm9yY2VfRGF0YSJ9LAorICAgICAgICB7MCwgMHgzMCwgIkVUX1NxdWFyZSJ9LAorICAgICAgICB7MCwgMHgzMSwgIkVUX1NpbmUifSwKKyAgICAgICAgezAsIDB4MzIsICJFVF9UcmlhbmdsZSJ9LAorICAgICAgICB7MCwgMHgzMywgIkVUX1Nhd3Rvb3RoX1VwIn0sCisgICAgICAgIHswLCAweDM0LCAiRVRfU2F3dG9vdGhfRG93biJ9LAorICAgICAgICB7MCwgMHg0MCwgIkVUX1NwcmluZyJ9LAorICAgICAgICB7MCwgMHg0MSwgIkVUX0RhbXBlciJ9LAorICAgICAgICB7MCwgMHg0MiwgIkVUX0luZXJ0aWEifSwKKyAgICAgICAgezAsIDB4NDMsICJFVF9GcmljdGlvbiJ9LAorICAgICAgezAsIDB4NTAsICJEdXJhdGlvbiJ9LAorICAgICAgezAsIDB4NTEsICJTYW1wbGVfUGVyaW9kIn0sCisgICAgICB7MCwgMHg1MiwgIkdhaW4ifSwKKyAgICAgIHswLCAweDUzLCAiVHJpZ2dlcl9CdXR0b24ifSwKKyAgICAgIHswLCAweDU0LCAiVHJpZ2dlcl9SZXBlYXRfSW50ZXJ2YWwifSwKKyAgICAgIHswLCAweDU1LCAiQXhlc19FbmFibGUifSwKKyAgICAgICAgezAsIDB4NTYsICJEaXJlY3Rpb25fRW5hYmxlIn0sCisgICAgICB7MCwgMHg1NywgIkRpcmVjdGlvbiJ9LAorICAgICAgezAsIDB4NTgsICJUeXBlX1NwZWNpZmljX0Jsb2NrX09mZnNldCJ9LAorICAgICAgICB7MCwgMHg1OSwgIkJsb2NrX1R5cGUifSwKKyAgICAgICAgezAsIDB4NUEsICJTZXRfRW52ZWxvcGVfUmVwb3J0In0sCisgICAgICAgICAgezAsIDB4NUIsICJBdHRhY2tfTGV2ZWwifSwKKyAgICAgICAgICB7MCwgMHg1QywgIkF0dGFja19UaW1lIn0sCisgICAgICAgICAgezAsIDB4NUQsICJGYWRlX0xldmVsIn0sCisgICAgICAgICAgezAsIDB4NUUsICJGYWRlX1RpbWUifSwKKyAgICAgICAgezAsIDB4NUYsICJTZXRfQ29uZGl0aW9uX1JlcG9ydCJ9LAorICAgICAgICB7MCwgMHg2MCwgIkNQX09mZnNldCJ9LAorICAgICAgICB7MCwgMHg2MSwgIlBvc2l0aXZlX0NvZWZmaWNpZW50In0sCisgICAgICAgIHswLCAweDYyLCAiTmVnYXRpdmVfQ29lZmZpY2llbnQifSwKKyAgICAgICAgezAsIDB4NjMsICJQb3NpdGl2ZV9TYXR1cmF0aW9uIn0sCisgICAgICAgIHswLCAweDY0LCAiTmVnYXRpdmVfU2F0dXJhdGlvbiJ9LAorICAgICAgICB7MCwgMHg2NSwgIkRlYWRfQmFuZCJ9LAorICAgICAgezAsIDB4NjYsICJEb3dubG9hZF9Gb3JjZV9TYW1wbGUifSwKKyAgICAgIHswLCAweDY3LCAiSXNvY2hfQ3VzdG9tX0ZvcmNlX0VuYWJsZSJ9LAorICAgICAgezAsIDB4NjgsICJDdXN0b21fRm9yY2VfRGF0YV9SZXBvcnQifSwKKyAgICAgICAgezAsIDB4NjksICJDdXN0b21fRm9yY2VfRGF0YSJ9LAorICAgICAgICB7MCwgMHg2QSwgIkN1c3RvbV9Gb3JjZV9WZW5kb3JfRGVmaW5lZF9EYXRhIn0sCisgICAgICB7MCwgMHg2QiwgIlNldF9DdXN0b21fRm9yY2VfUmVwb3J0In0sCisgICAgICAgIHswLCAweDZDLCAiQ3VzdG9tX0ZvcmNlX0RhdGFfT2Zmc2V0In0sCisgICAgICAgIHswLCAweDZELCAiU2FtcGxlX0NvdW50In0sCisgICAgICB7MCwgMHg2RSwgIlNldF9QZXJpb2RpY19SZXBvcnQifSwKKyAgICAgICAgezAsIDB4NkYsICJPZmZzZXQifSwKKyAgICAgICAgezAsIDB4NzAsICJNYWduaXR1ZGUifSwKKyAgICAgICAgezAsIDB4NzEsICJQaGFzZSJ9LAorICAgICAgICB7MCwgMHg3MiwgIlBlcmlvZCJ9LAorICAgICAgezAsIDB4NzMsICJTZXRfQ29uc3RhbnRfRm9yY2VfUmVwb3J0In0sCisgICAgICAgIHswLCAweDc0LCAiU2V0X1JhbXBfRm9yY2VfUmVwb3J0In0sCisgICAgICAgIHswLCAweDc1LCAiUmFtcF9TdGFydCJ9LAorICAgICAgICB7MCwgMHg3NiwgIlJhbXBfRW5kIn0sCisgICAgICB7MCwgMHg3NywgIkVmZmVjdF9PcGVyYXRpb25fUmVwb3J0In0sCisgICAgICAgIHswLCAweDc4LCAiRWZmZWN0X09wZXJhdGlvbiJ9LAorICAgICAgICAgIHswLCAweDc5LCAiT3BfRWZmZWN0X1N0YXJ0In0sCisgICAgICAgICAgezAsIDB4N0EsICJPcF9FZmZlY3RfU3RhcnRfU29sbyJ9LAorICAgICAgICAgIHswLCAweDdCLCAiT3BfRWZmZWN0X1N0b3AifSwKKyAgICAgICAgICB7MCwgMHg3QywgIkxvb3BfQ291bnQifSwKKyAgICAgIHswLCAweDdELCAiRGV2aWNlX0dhaW5fUmVwb3J0In0sCisgICAgICAgIHswLCAweDdFLCAiRGV2aWNlX0dhaW4ifSwKKyAgICB7MCwgMHg3RiwgIlBJRF9Qb29sX1JlcG9ydCJ9LAorICAgICAgezAsIDB4ODAsICJSQU1fUG9vbF9TaXplIn0sCisgICAgICB7MCwgMHg4MSwgIlJPTV9Qb29sX1NpemUifSwKKyAgICAgIHswLCAweDgyLCAiUk9NX0VmZmVjdF9CbG9ja19Db3VudCJ9LAorICAgICAgezAsIDB4ODMsICJTaW11bHRhbmVvdXNfRWZmZWN0c19NYXgifSwKKyAgICAgIHswLCAweDg0LCAiUG9vbF9BbGlnbm1lbnQifSwKKyAgICB7MCwgMHg4NSwgIlBJRF9Qb29sX01vdmVfUmVwb3J0In0sCisgICAgICB7MCwgMHg4NiwgIk1vdmVfU291cmNlIn0sCisgICAgICB7MCwgMHg4NywgIk1vdmVfRGVzdGluYXRpb24ifSwKKyAgICAgIHswLCAweDg4LCAiTW92ZV9MZW5ndGgifSwKKyAgICB7MCwgMHg4OSwgIlBJRF9CbG9ja19Mb2FkX1JlcG9ydCJ9LAorICAgICAgezAsIDB4OEIsICJCbG9ja19Mb2FkX1N0YXR1cyJ9LAorICAgICAgezAsIDB4OEMsICJCbG9ja19Mb2FkX1N1Y2Nlc3MifSwKKyAgICAgIHswLCAweDhELCAiQmxvY2tfTG9hZF9GdWxsIn0sCisgICAgICB7MCwgMHg4RSwgIkJsb2NrX0xvYWRfRXJyb3IifSwKKyAgICAgIHswLCAweDhGLCAiQmxvY2tfSGFuZGxlIn0sCisgICAgICB7MCwgMHg5MCwgIlBJRF9CbG9ja19GcmVlX1JlcG9ydCJ9LAorICAgICAgezAsIDB4OTEsICJUeXBlX1NwZWNpZmljX0Jsb2NrX0hhbmRsZSJ9LAorICAgIHswLCAweDkyLCAiUElEX1N0YXRlX1JlcG9ydCJ9LAorICAgICAgezAsIDB4OTQsICJFZmZlY3RfUGxheWluZyJ9LAorICAgICAgezAsIDB4OTUsICJQSURfRGV2aWNlX0NvbnRyb2xfUmVwb3J0In0sCisgICAgICAgIHswLCAweDk2LCAiUElEX0RldmljZV9Db250cm9sIn0sCisgICAgICAgIHswLCAweDk3LCAiRENfRW5hYmxlX0FjdHVhdG9ycyJ9LAorICAgICAgICB7MCwgMHg5OCwgIkRDX0Rpc2FibGVfQWN0dWF0b3JzIn0sCisgICAgICAgIHswLCAweDk5LCAiRENfU3RvcF9BbGxfRWZmZWN0cyJ9LAorICAgICAgICB7MCwgMHg5QSwgIkRDX0RldmljZV9SZXNldCJ9LAorICAgICAgICB7MCwgMHg5QiwgIkRDX0RldmljZV9QYXVzZSJ9LAorICAgICAgICB7MCwgMHg5QywgIkRDX0RldmljZV9Db250aW51ZSJ9LAorICAgICAgezAsIDB4OUYsICJEZXZpY2VfUGF1c2VkIn0sCisgICAgICB7MCwgMHhBMCwgIkFjdHVhdG9yc19FbmFibGVkIn0sCisgICAgICB7MCwgMHhBNCwgIlNhZmV0eV9Td2l0Y2gifSwKKyAgICAgIHswLCAweEE1LCAiQWN0dWF0b3JfT3ZlcnJpZGVfU3dpdGNoIn0sCisgICAgICB7MCwgMHhBNiwgIkFjdHVhdG9yX1Bvd2VyIn0sCisgICAgezAsIDB4QTcsICJTdGFydF9EZWxheSJ9LAorICAgIHswLCAweEE4LCAiUGFyYW1ldGVyX0Jsb2NrX1NpemUifSwKKyAgICB7MCwgMHhBOSwgIkRldmljZV9NYW5hZ2VkX1Bvb2wifSwKKyAgICB7MCwgMHhBQSwgIlNoYXJlZF9QYXJhbWV0ZXJfQmxvY2tzIn0sCisgICAgezAsIDB4QUIsICJDcmVhdGVfTmV3X0VmZmVjdF9SZXBvcnQifSwKKyAgICB7MCwgMHhBQywgIlJBTV9Qb29sX0F2YWlsYWJsZSJ9LAorICB7IDB4ODQsIDAsICJQb3dlciBEZXZpY2UiIH0sCisgICAgeyAweDg0LCAweDAyLCAiUHJlc2VudFN0YXR1cyIgfSwKKyAgICB7IDB4ODQsIDB4MDMsICJDaGFuZ2VTdGF0dXMiIH0sCisgICAgeyAweDg0LCAweDA0LCAiVVBTIiB9LAorICAgIHsgMHg4NCwgMHgwNSwgIlBvd2VyU3VwcGx5IiB9LAorICAgIHsgMHg4NCwgMHgxMCwgIkJhdHRlcnlTeXN0ZW0iIH0sCisgICAgeyAweDg0LCAweDExLCAiQmF0dGVyeVN5c3RlbUlEIiB9LAorICAgIHsgMHg4NCwgMHgxMiwgIkJhdHRlcnkiIH0sCisgICAgeyAweDg0LCAweDEzLCAiQmF0dGVyeUlEIiB9LAorICAgIHsgMHg4NCwgMHgxNCwgIkNoYXJnZXIiIH0sCisgICAgeyAweDg0LCAweDE1LCAiQ2hhcmdlcklEIiB9LAorICAgIHsgMHg4NCwgMHgxNiwgIlBvd2VyQ29udmVydGVyIiB9LAorICAgIHsgMHg4NCwgMHgxNywgIlBvd2VyQ29udmVydGVySUQiIH0sCisgICAgeyAweDg0LCAweDE4LCAiT3V0bGV0U3lzdGVtIiB9LAorICAgIHsgMHg4NCwgMHgxOSwgIk91dGxldFN5c3RlbUlEIiB9LAorICAgIHsgMHg4NCwgMHgxYSwgIklucHV0IiB9LAorICAgIHsgMHg4NCwgMHgxYiwgIklucHV0SUQiIH0sCisgICAgeyAweDg0LCAweDFjLCAiT3V0cHV0IiB9LAorICAgIHsgMHg4NCwgMHgxZCwgIk91dHB1dElEIiB9LAorICAgIHsgMHg4NCwgMHgxZSwgIkZsb3ciIH0sCisgICAgeyAweDg0LCAweDFmLCAiRmxvd0lEIiB9LAorICAgIHsgMHg4NCwgMHgyMCwgIk91dGxldCIgfSwKKyAgICB7IDB4ODQsIDB4MjEsICJPdXRsZXRJRCIgfSwKKyAgICB7IDB4ODQsIDB4MjIsICJHYW5nIiB9LAorICAgIHsgMHg4NCwgMHgyNCwgIlBvd2VyU3VtbWFyeSIgfSwKKyAgICB7IDB4ODQsIDB4MjUsICJQb3dlclN1bW1hcnlJRCIgfSwKKyAgICB7IDB4ODQsIDB4MzAsICJWb2x0YWdlIiB9LAorICAgIHsgMHg4NCwgMHgzMSwgIkN1cnJlbnQiIH0sCisgICAgeyAweDg0LCAweDMyLCAiRnJlcXVlbmN5IiB9LAorICAgIHsgMHg4NCwgMHgzMywgIkFwcGFyZW50UG93ZXIiIH0sCisgICAgeyAweDg0LCAweDM1LCAiUGVyY2VudExvYWQiIH0sCisgICAgeyAweDg0LCAweDQwLCAiQ29uZmlnVm9sdGFnZSIgfSwKKyAgICB7IDB4ODQsIDB4NDEsICJDb25maWdDdXJyZW50IiB9LAorICAgIHsgMHg4NCwgMHg0MywgIkNvbmZpZ0FwcGFyZW50UG93ZXIiIH0sCisgICAgeyAweDg0LCAweDUzLCAiTG93Vm9sdGFnZVRyYW5zZmVyIiB9LAorICAgIHsgMHg4NCwgMHg1NCwgIkhpZ2hWb2x0YWdlVHJhbnNmZXIiIH0sCisgICAgeyAweDg0LCAweDU2LCAiRGVsYXlCZWZvcmVTdGFydHVwIiB9LAorICAgIHsgMHg4NCwgMHg1NywgIkRlbGF5QmVmb3JlU2h1dGRvd24iIH0sCisgICAgeyAweDg0LCAweDU4LCAiVGVzdCIgfSwKKyAgICB7IDB4ODQsIDB4NWEsICJBdWRpYmxlQWxhcm1Db250cm9sIiB9LAorICAgIHsgMHg4NCwgMHg2MCwgIlByZXNlbnQiIH0sCisgICAgeyAweDg0LCAweDYxLCAiR29vZCIgfSwKKyAgICB7IDB4ODQsIDB4NjIsICJJbnRlcm5hbEZhaWx1cmUiIH0sCisgICAgeyAweDg0LCAweDY1LCAiT3ZlcmxvYWQiIH0sCisgICAgeyAweDg0LCAweDY2LCAiT3ZlckNoYXJnZWQiIH0sCisgICAgeyAweDg0LCAweDY3LCAiT3ZlclRlbXBlcmF0dXJlIiB9LAorICAgIHsgMHg4NCwgMHg2OCwgIlNodXRkb3duUmVxdWVzdGVkIiB9LAorICAgIHsgMHg4NCwgMHg2OSwgIlNodXRkb3duSW1taW5lbnQiIH0sCisgICAgeyAweDg0LCAweDZiLCAiU3dpdGNoT24vT2ZmIiB9LAorICAgIHsgMHg4NCwgMHg2YywgIlN3aXRjaGFibGUiIH0sCisgICAgeyAweDg0LCAweDZkLCAiVXNlZCIgfSwKKyAgICB7IDB4ODQsIDB4NmUsICJCb29zdCIgfSwKKyAgICB7IDB4ODQsIDB4NzMsICJDb21tdW5pY2F0aW9uTG9zdCIgfSwKKyAgICB7IDB4ODQsIDB4ZmQsICJpTWFudWZhY3R1cmVyIiB9LAorICAgIHsgMHg4NCwgMHhmZSwgImlQcm9kdWN0IiB9LAorICAgIHsgMHg4NCwgMHhmZiwgImlTZXJpYWxOdW1iZXIiIH0sCisgIHsgMHg4NSwgMCwgIkJhdHRlcnkgU3lzdGVtIiB9LAorICAgIHsgMHg4NSwgMHgwMSwgIlNNQkJhdHRlcnlNb2RlIiB9LAorICAgIHsgMHg4NSwgMHgwMiwgIlNNQkJhdHRlcnlTdGF0dXMiIH0sCisgICAgeyAweDg1LCAweDAzLCAiU01CQWxhcm1XYXJuaW5nIiB9LAorICAgIHsgMHg4NSwgMHgwNCwgIlNNQkNoYXJnZXJNb2RlIiB9LAorICAgIHsgMHg4NSwgMHgwNSwgIlNNQkNoYXJnZXJTdGF0dXMiIH0sCisgICAgeyAweDg1LCAweDA2LCAiU01CQ2hhcmdlclNwZWNJbmZvIiB9LAorICAgIHsgMHg4NSwgMHgwNywgIlNNQlNlbGVjdG9yU3RhdGUiIH0sCisgICAgeyAweDg1LCAweDA4LCAiU01CU2VsZWN0b3JQcmVzZXRzIiB9LAorICAgIHsgMHg4NSwgMHgwOSwgIlNNQlNlbGVjdG9ySW5mbyIgfSwKKyAgICB7IDB4ODUsIDB4MjksICJSZW1haW5pbmdDYXBhY2l0eUxpbWl0IiB9LAorICAgIHsgMHg4NSwgMHgyYywgIkNhcGFjaXR5TW9kZSIgfSwKKyAgICB7IDB4ODUsIDB4NDIsICJCZWxvd1JlbWFpbmluZ0NhcGFjaXR5TGltaXQiIH0sCisgICAgeyAweDg1LCAweDQ0LCAiQ2hhcmdpbmciIH0sCisgICAgeyAweDg1LCAweDQ1LCAiRGlzY2hhcmdpbmciIH0sCisgICAgeyAweDg1LCAweDRiLCAiTmVlZFJlcGxhY2VtZW50IiB9LAorICAgIHsgMHg4NSwgMHg2NiwgIlJlbWFpbmluZ0NhcGFjaXR5IiB9LAorICAgIHsgMHg4NSwgMHg2OCwgIlJ1blRpbWVUb0VtcHR5IiB9LAorICAgIHsgMHg4NSwgMHg2YSwgIkF2ZXJhZ2VUaW1lVG9GdWxsIiB9LAorICAgIHsgMHg4NSwgMHg4MywgIkRlc2lnbkNhcGFjaXR5IiB9LAorICAgIHsgMHg4NSwgMHg4NSwgIk1hbnVmYWN0dXJlckRhdGUiIH0sCisgICAgeyAweDg1LCAweDg5LCAiaURldmljZUNoZW1pc3RyeSIgfSwKKyAgICB7IDB4ODUsIDB4OGIsICJSZWNoYXJnYWJsZSIgfSwKKyAgICB7IDB4ODUsIDB4OGYsICJpT0VNSW5mb3JtYXRpb24iIH0sCisgICAgeyAweDg1LCAweDhkLCAiQ2FwYWNpdHlHcmFudWxhcml0eTEiIH0sCisgICAgeyAweDg1LCAweGQwLCAiQUNQcmVzZW50IiB9LAorICAvKiBwYWdlcyAweGZmMDAgdG8gMHhmZmZmIGFyZSB2ZW5kb3Itc3BlY2lmaWMgKi8KKyAgeyAweGZmZmYsIDAsICJWZW5kb3Itc3BlY2lmaWMtRkYiIH0sCisgIHsgMCwgMCwgTlVMTCB9Cit9OworCitzdGF0aWMgdm9pZCByZXNvbHZfdXNhZ2VfcGFnZSh1bnNpZ25lZCBwYWdlKSB7CisJY29uc3Qgc3RydWN0IGhpZF91c2FnZV9lbnRyeSAqcDsKKworCWZvciAocCA9IGhpZF91c2FnZV90YWJsZTsgcC0+ZGVzY3JpcHRpb247IHArKykKKwkJaWYgKHAtPnBhZ2UgPT0gcGFnZSkgeworCQkJcHJpbnRrKCIlcyIsIHAtPmRlc2NyaXB0aW9uKTsKKwkJCXJldHVybjsKKwkJfQorCXByaW50aygiJTA0eCIsIHBhZ2UpOworfQorCitzdGF0aWMgdm9pZCByZXNvbHZfdXNhZ2UodW5zaWduZWQgdXNhZ2UpIHsKKwljb25zdCBzdHJ1Y3QgaGlkX3VzYWdlX2VudHJ5ICpwOworCisJcmVzb2x2X3VzYWdlX3BhZ2UodXNhZ2UgPj4gMTYpOworCXByaW50aygiLiIpOworCWZvciAocCA9IGhpZF91c2FnZV90YWJsZTsgcC0+ZGVzY3JpcHRpb247IHArKykKKwkJaWYgKHAtPnBhZ2UgPT0gKHVzYWdlID4+IDE2KSkgeworCQkJZm9yKCsrcDsgcC0+ZGVzY3JpcHRpb24gJiYgcC0+dXNhZ2UgIT0gMDsgcCsrKQorCQkJCWlmIChwLT51c2FnZSA9PSAodXNhZ2UgJiAweGZmZmYpKSB7CisJCQkJCXByaW50aygiJXMiLCBwLT5kZXNjcmlwdGlvbik7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQlicmVhazsKKwkJfQorCXByaW50aygiJTA0eCIsIHVzYWdlICYgMHhmZmZmKTsKK30KKworX19pbmxpbmVfXyBzdGF0aWMgdm9pZCB0YWIoaW50IG4pIHsKKwl3aGlsZSAobi0tKSBwcmludGsoIiAiKTsKK30KKworc3RhdGljIHZvaWQgaGlkX2R1bXBfZmllbGQoc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIGludCBuKSB7CisJaW50IGo7CisJCisJaWYgKGZpZWxkLT5waHlzaWNhbCkgeworCQl0YWIobik7CisJCXByaW50aygiUGh5c2ljYWwoIik7CisJCXJlc29sdl91c2FnZShmaWVsZC0+cGh5c2ljYWwpOyBwcmludGsoIilcbiIpOworCX0KKwlpZiAoZmllbGQtPmxvZ2ljYWwpIHsKKwkJdGFiKG4pOworCQlwcmludGsoIkxvZ2ljYWwoIik7CisJCXJlc29sdl91c2FnZShmaWVsZC0+bG9naWNhbCk7IHByaW50aygiKVxuIik7CisJfQorCXRhYihuKTsgcHJpbnRrKCJVc2FnZSglZClcbiIsIGZpZWxkLT5tYXh1c2FnZSk7CisJZm9yIChqID0gMDsgaiA8IGZpZWxkLT5tYXh1c2FnZTsgaisrKSB7CisJCXRhYihuKzIpO3Jlc29sdl91c2FnZShmaWVsZC0+dXNhZ2Vbal0uaGlkKTsgcHJpbnRrKCJcbiIpOworCX0KKwlpZiAoZmllbGQtPmxvZ2ljYWxfbWluaW11bSAhPSBmaWVsZC0+bG9naWNhbF9tYXhpbXVtKSB7CisJCXRhYihuKTsgcHJpbnRrKCJMb2dpY2FsIE1pbmltdW0oJWQpXG4iLCBmaWVsZC0+bG9naWNhbF9taW5pbXVtKTsKKwkJdGFiKG4pOyBwcmludGsoIkxvZ2ljYWwgTWF4aW11bSglZClcbiIsIGZpZWxkLT5sb2dpY2FsX21heGltdW0pOworCX0KKwlpZiAoZmllbGQtPnBoeXNpY2FsX21pbmltdW0gIT0gZmllbGQtPnBoeXNpY2FsX21heGltdW0pIHsKKwkJdGFiKG4pOyBwcmludGsoIlBoeXNpY2FsIE1pbmltdW0oJWQpXG4iLCBmaWVsZC0+cGh5c2ljYWxfbWluaW11bSk7CisJCXRhYihuKTsgcHJpbnRrKCJQaHlzaWNhbCBNYXhpbXVtKCVkKVxuIiwgZmllbGQtPnBoeXNpY2FsX21heGltdW0pOworCX0KKwlpZiAoZmllbGQtPnVuaXRfZXhwb25lbnQpIHsKKwkJdGFiKG4pOyBwcmludGsoIlVuaXQgRXhwb25lbnQoJWQpXG4iLCBmaWVsZC0+dW5pdF9leHBvbmVudCk7CisJfQorCWlmIChmaWVsZC0+dW5pdCkgeworCQljaGFyICpzeXN0ZW1zWzVdID0geyAiTm9uZSIsICJTSSBMaW5lYXIiLCAiU0kgUm90YXRpb24iLCAiRW5nbGlzaCBMaW5lYXIiLCAiRW5nbGlzaCBSb3RhdGlvbiIgfTsKKwkJY2hhciAqdW5pdHNbNV1bOF0gPSB7CisJCQl7ICJOb25lIiwgIk5vbmUiLCAiTm9uZSIsICJOb25lIiwgIk5vbmUiLCAiTm9uZSIsICJOb25lIiwgIk5vbmUiIH0sCisJCQl7ICJOb25lIiwgIkNlbnRpbWV0ZXIiLCAiR3JhbSIsICJTZWNvbmRzIiwgIktlbHZpbiIsICAgICAiQW1wZXJlIiwgIkNhbmRlbGEiLCAiTm9uZSIgfSwKKwkJCXsgIk5vbmUiLCAiUmFkaWFucyIsICAgICJHcmFtIiwgIlNlY29uZHMiLCAiS2VsdmluIiwgICAgICJBbXBlcmUiLCAiQ2FuZGVsYSIsICJOb25lIiB9LAorCQkJeyAiTm9uZSIsICJJbmNoIiwgICAgICAgIlNsdWciLCAiU2Vjb25kcyIsICJGYWhyZW5oZWl0IiwgIkFtcGVyZSIsICJDYW5kZWxhIiwgIk5vbmUiIH0sCisJCQl7ICJOb25lIiwgIkRlZ3JlZXMiLCAgICAiU2x1ZyIsICJTZWNvbmRzIiwgIkZhaHJlbmhlaXQiLCAiQW1wZXJlIiwgIkNhbmRlbGEiLCAiTm9uZSIgfQorCQl9OworCisJCWludCBpOworCQlpbnQgc3lzOworICAgICAgICAgICAgICAgIF9fdTMyIGRhdGEgPSBmaWVsZC0+dW5pdDsKKworCQkvKiBGaXJzdCBuaWJibGUgdGVsbHMgdXMgd2hpY2ggc3lzdGVtIHdlJ3JlIGluLiAqLworCQlzeXMgPSBkYXRhICYgMHhmOworCQlkYXRhID4+PSA0OworCisJCWlmKHN5cyA+IDQpIHsKKwkJCXRhYihuKTsgcHJpbnRrKCJVbml0KEludmFsaWQpXG4iKTsKKwkJfQorCQllbHNlIHsKKwkJCWludCBlYXJsaWVyX3VuaXQgPSAwOworCisJCQl0YWIobik7IHByaW50aygiVW5pdCglcyA6ICIsIHN5c3RlbXNbc3lzXSk7CisKKwkJCWZvciAoaT0xIDsgaTxzaXplb2YoX191MzIpKjIgOyBpKyspIHsKKwkJCQljaGFyIG5pYmJsZSA9IGRhdGEgJiAweGY7CisJCQkJZGF0YSA+Pj0gNDsKKwkJCQlpZiAobmliYmxlICE9IDApIHsKKwkJCQkJaWYoZWFybGllcl91bml0KysgPiAwKQorCQkJCQkJcHJpbnRrKCIqIik7CisJCQkJCXByaW50aygiJXMiLCB1bml0c1tzeXNdW2ldKTsKKwkJCQkJaWYobmliYmxlICE9IDEpIHsKKwkJCQkJCS8qIFRoaXMgaXMgYSBfc2lnbmVkXyBuaWJibGUoISkgKi8KKwkKKwkJCQkJCWludCB2YWwgPSBuaWJibGUgJiAweDc7CisJCQkJCQlpZihuaWJibGUgJiAweDA4KQorCQkJCQkJCXZhbCA9IC0oKDB4NyAmIH52YWwpICsxKTsKKwkJCQkJCXByaW50aygiXiVkIiwgdmFsKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCXByaW50aygiKVxuIik7CisJCX0KKwl9CisJdGFiKG4pOyBwcmludGsoIlJlcG9ydCBTaXplKCV1KVxuIiwgZmllbGQtPnJlcG9ydF9zaXplKTsKKwl0YWIobik7IHByaW50aygiUmVwb3J0IENvdW50KCV1KVxuIiwgZmllbGQtPnJlcG9ydF9jb3VudCk7CisJdGFiKG4pOyBwcmludGsoIlJlcG9ydCBPZmZzZXQoJXUpXG4iLCBmaWVsZC0+cmVwb3J0X29mZnNldCk7CisKKwl0YWIobik7IHByaW50aygiRmxhZ3MoICIpOworCWogPSBmaWVsZC0+ZmxhZ3M7CisJcHJpbnRrKCIlcyIsIEhJRF9NQUlOX0lURU1fQ09OU1RBTlQgJiBqID8gIkNvbnN0YW50ICIgOiAiIik7CisJcHJpbnRrKCIlcyIsIEhJRF9NQUlOX0lURU1fVkFSSUFCTEUgJiBqID8gIlZhcmlhYmxlICIgOiAiQXJyYXkgIik7CisJcHJpbnRrKCIlcyIsIEhJRF9NQUlOX0lURU1fUkVMQVRJVkUgJiBqID8gIlJlbGF0aXZlICIgOiAiQWJzb2x1dGUgIik7CisJcHJpbnRrKCIlcyIsIEhJRF9NQUlOX0lURU1fV1JBUCAmIGogPyAiV3JhcCAiIDogIiIpOworCXByaW50aygiJXMiLCBISURfTUFJTl9JVEVNX05PTkxJTkVBUiAmIGogPyAiTm9uTGluZWFyICIgOiAiIik7CisJcHJpbnRrKCIlcyIsIEhJRF9NQUlOX0lURU1fTk9fUFJFRkVSUkVEICYgaiA/ICJOb1ByZWZmZXJlZFN0YXRlICIgOiAiIik7CisJcHJpbnRrKCIlcyIsIEhJRF9NQUlOX0lURU1fTlVMTF9TVEFURSAmIGogPyAiTnVsbFN0YXRlICIgOiAiIik7CisJcHJpbnRrKCIlcyIsIEhJRF9NQUlOX0lURU1fVk9MQVRJTEUgJiBqID8gIlZvbGF0aWxlICIgOiAiIik7CisJcHJpbnRrKCIlcyIsIEhJRF9NQUlOX0lURU1fQlVGRkVSRURfQllURSAmIGogPyAiQnVmZmVyZWRCeXRlICIgOiAiIik7CisJcHJpbnRrKCIpXG4iKTsKK30KKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgaGlkX2R1bXBfZGV2aWNlKHN0cnVjdCBoaWRfZGV2aWNlICpkZXZpY2UpIHsKKwlzdHJ1Y3QgaGlkX3JlcG9ydF9lbnVtICpyZXBvcnRfZW51bTsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisJdW5zaWduZWQgaSxrOworCXN0YXRpYyBjaGFyICp0YWJsZVtdID0geyJJTlBVVCIsICJPVVRQVVQiLCAiRkVBVFVSRSJ9OworCQorCWZvciAoaSA9IDA7IGkgPCBISURfUkVQT1JUX1RZUEVTOyBpKyspIHsKKwkJcmVwb3J0X2VudW0gPSBkZXZpY2UtPnJlcG9ydF9lbnVtICsgaTsKKwkJbGlzdCA9IHJlcG9ydF9lbnVtLT5yZXBvcnRfbGlzdC5uZXh0OworCQl3aGlsZSAobGlzdCAhPSAmcmVwb3J0X2VudW0tPnJlcG9ydF9saXN0KSB7CisJCQlyZXBvcnQgPSAoc3RydWN0IGhpZF9yZXBvcnQgKikgbGlzdDsKKwkJCXRhYigyKTsKKwkJCXByaW50aygiJXMiLCB0YWJsZVtpXSk7CisJCQlpZiAocmVwb3J0LT5pZCkKKwkJCQlwcmludGsoIiglZCkiLCByZXBvcnQtPmlkKTsKKwkJCXByaW50aygiWyVzXSIsIHRhYmxlW3JlcG9ydC0+dHlwZV0pOworCQkJcHJpbnRrKCJcbiIpOworCQkJZm9yIChrID0gMDsgayA8IHJlcG9ydC0+bWF4ZmllbGQ7IGsrKykgeworCQkJCXRhYig0KTsKKwkJCQlwcmludGsoIkZpZWxkKCVkKVxuIiwgayk7CisJCQkJaGlkX2R1bXBfZmllbGQocmVwb3J0LT5maWVsZFtrXSwgNik7CisJCQl9CisJCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgaGlkX2R1bXBfaW5wdXQoc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKSB7CisJcHJpbnRrKCJoaWQtZGVidWc6IGlucHV0ICIpOworCXJlc29sdl91c2FnZSh1c2FnZS0+aGlkKTsKKwlwcmludGsoIiA9ICVkXG4iLCB2YWx1ZSk7Cit9CisKKworc3RhdGljIGNoYXIgKmV2ZW50c1tFVl9NQVggKyAxXSA9IHsKKwlbRVZfU1lOXSA9ICJTeW5jIiwJCQlbRVZfS0VZXSA9ICJLZXkiLAorCVtFVl9SRUxdID0gIlJlbGF0aXZlIiwJCQlbRVZfQUJTXSA9ICJBYnNvbHV0ZSIsCisJW0VWX01TQ10gPSAiTWlzYyIsCQkJW0VWX0xFRF0gPSAiTEVEIiwKKwlbRVZfU05EXSA9ICJTb3VuZCIsCQkJW0VWX1JFUF0gPSAiUmVwZWF0IiwKKwlbRVZfRkZdID0gIkZvcmNlRmVlZGJhY2siLAkJW0VWX1BXUl0gPSAiUG93ZXIiLAorCVtFVl9GRl9TVEFUVVNdID0gIkZvcmNlRmVlZGJhY2tTdGF0dXMiLAorfTsKKworc3RhdGljIGNoYXIgKnN5bmNzWzJdID0geworCVtTWU5fUkVQT1JUXSA9ICJSZXBvcnQiLAkJW1NZTl9DT05GSUddID0gIkNvbmZpZyIsCit9Oworc3RhdGljIGNoYXIgKmtleXNbS0VZX01BWCArIDFdID0geworCVtLRVlfUkVTRVJWRURdID0gIlJlc2VydmVkIiwJCVtLRVlfRVNDXSA9ICJFc2MiLAorCVtLRVlfMV0gPSAiMSIsCQkJCVtLRVlfMl0gPSAiMiIsCisJW0tFWV8zXSA9ICIzIiwJCQkJW0tFWV80XSA9ICI0IiwKKwlbS0VZXzVdID0gIjUiLAkJCQlbS0VZXzZdID0gIjYiLAorCVtLRVlfN10gPSAiNyIsCQkJCVtLRVlfOF0gPSAiOCIsCisJW0tFWV85XSA9ICI5IiwJCQkJW0tFWV8wXSA9ICIwIiwKKwlbS0VZX01JTlVTXSA9ICJNaW51cyIsCQkJW0tFWV9FUVVBTF0gPSAiRXF1YWwiLAorCVtLRVlfQkFDS1NQQUNFXSA9ICJCYWNrc3BhY2UiLAkJW0tFWV9UQUJdID0gIlRhYiIsCisJW0tFWV9RXSA9ICJRIiwJCQkJW0tFWV9XXSA9ICJXIiwKKwlbS0VZX0VdID0gIkUiLAkJCQlbS0VZX1JdID0gIlIiLAorCVtLRVlfVF0gPSAiVCIsCQkJCVtLRVlfWV0gPSAiWSIsCisJW0tFWV9VXSA9ICJVIiwJCQkJW0tFWV9JXSA9ICJJIiwKKwlbS0VZX09dID0gIk8iLAkJCQlbS0VZX1BdID0gIlAiLAorCVtLRVlfTEVGVEJSQUNFXSA9ICJMZWZ0QnJhY2UiLAkJW0tFWV9SSUdIVEJSQUNFXSA9ICJSaWdodEJyYWNlIiwKKwlbS0VZX0VOVEVSXSA9ICJFbnRlciIsCQkJW0tFWV9MRUZUQ1RSTF0gPSAiTGVmdENvbnRyb2wiLAorCVtLRVlfQV0gPSAiQSIsCQkJCVtLRVlfU10gPSAiUyIsCisJW0tFWV9EXSA9ICJEIiwJCQkJW0tFWV9GXSA9ICJGIiwKKwlbS0VZX0ddID0gIkciLAkJCQlbS0VZX0hdID0gIkgiLAorCVtLRVlfSl0gPSAiSiIsCQkJCVtLRVlfS10gPSAiSyIsCisJW0tFWV9MXSA9ICJMIiwJCQkJW0tFWV9TRU1JQ09MT05dID0gIlNlbWljb2xvbiIsCisJW0tFWV9BUE9TVFJPUEhFXSA9ICJBcG9zdHJvcGhlIiwJW0tFWV9HUkFWRV0gPSAiR3JhdmUiLAorCVtLRVlfTEVGVFNISUZUXSA9ICJMZWZ0U2hpZnQiLAkJW0tFWV9CQUNLU0xBU0hdID0gIkJhY2tTbGFzaCIsCisJW0tFWV9aXSA9ICJaIiwJCQkJW0tFWV9YXSA9ICJYIiwKKwlbS0VZX0NdID0gIkMiLAkJCQlbS0VZX1ZdID0gIlYiLAorCVtLRVlfQl0gPSAiQiIsCQkJCVtLRVlfTl0gPSAiTiIsCisJW0tFWV9NXSA9ICJNIiwJCQkJW0tFWV9DT01NQV0gPSAiQ29tbWEiLAorCVtLRVlfRE9UXSA9ICJEb3QiLAkJCVtLRVlfU0xBU0hdID0gIlNsYXNoIiwKKwlbS0VZX1JJR0hUU0hJRlRdID0gIlJpZ2h0U2hpZnQiLAlbS0VZX0tQQVNURVJJU0tdID0gIktQQXN0ZXJpc2siLAorCVtLRVlfTEVGVEFMVF0gPSAiTGVmdEFsdCIsCQlbS0VZX1NQQUNFXSA9ICJTcGFjZSIsCisJW0tFWV9DQVBTTE9DS10gPSAiQ2Fwc0xvY2siLAkJW0tFWV9GMV0gPSAiRjEiLAorCVtLRVlfRjJdID0gIkYyIiwJCQlbS0VZX0YzXSA9ICJGMyIsCisJW0tFWV9GNF0gPSAiRjQiLAkJCVtLRVlfRjVdID0gIkY1IiwKKwlbS0VZX0Y2XSA9ICJGNiIsCQkJW0tFWV9GN10gPSAiRjciLAorCVtLRVlfRjhdID0gIkY4IiwJCQlbS0VZX0Y5XSA9ICJGOSIsCisJW0tFWV9GMTBdID0gIkYxMCIsCQkJW0tFWV9OVU1MT0NLXSA9ICJOdW1Mb2NrIiwKKwlbS0VZX1NDUk9MTExPQ0tdID0gIlNjcm9sbExvY2siLAlbS0VZX0tQN10gPSAiS1A3IiwKKwlbS0VZX0tQOF0gPSAiS1A4IiwJCQlbS0VZX0tQOV0gPSAiS1A5IiwKKwlbS0VZX0tQTUlOVVNdID0gIktQTWludXMiLAkJW0tFWV9LUDRdID0gIktQNCIsCisJW0tFWV9LUDVdID0gIktQNSIsCQkJW0tFWV9LUDZdID0gIktQNiIsCisJW0tFWV9LUFBMVVNdID0gIktQUGx1cyIsCQlbS0VZX0tQMV0gPSAiS1AxIiwKKwlbS0VZX0tQMl0gPSAiS1AyIiwJCQlbS0VZX0tQM10gPSAiS1AzIiwKKwlbS0VZX0tQMF0gPSAiS1AwIiwJCQlbS0VZX0tQRE9UXSA9ICJLUERvdCIsCisJW0tFWV9aRU5LQUtVSEFOS0FLVV0gPSAiWmVua2FrdS9IYW5rYWt1IiwgW0tFWV8xMDJORF0gPSAiMTAybmQiLAorCVtLRVlfRjExXSA9ICJGMTEiLAkJCVtLRVlfRjEyXSA9ICJGMTIiLAorCVtLRVlfUk9dID0gIlJPIiwJCQlbS0VZX0tBVEFLQU5BXSA9ICJLYXRha2FuYSIsCisJW0tFWV9ISVJBR0FOQV0gPSAiSElSQUdBTkEiLAkJW0tFWV9IRU5LQU5dID0gIkhlbmthbiIsCisJW0tFWV9LQVRBS0FOQUhJUkFHQU5BXSA9ICJLYXRha2FuYS9IaXJhZ2FuYSIsIFtLRVlfTVVIRU5LQU5dID0gIk11aGVua2FuIiwKKwlbS0VZX0tQSlBDT01NQV0gPSAiS1BKcENvbW1hIiwJCVtLRVlfS1BFTlRFUl0gPSAiS1BFbnRlciIsCisJW0tFWV9SSUdIVENUUkxdID0gIlJpZ2h0Q3RybCIsCQlbS0VZX0tQU0xBU0hdID0gIktQU2xhc2giLAorCVtLRVlfU1lTUlFdID0gIlN5c1JxIiwJCQlbS0VZX1JJR0hUQUxUXSA9ICJSaWdodEFsdCIsCisJW0tFWV9MSU5FRkVFRF0gPSAiTGluZUZlZWQiLAkJW0tFWV9IT01FXSA9ICJIb21lIiwKKwlbS0VZX1VQXSA9ICJVcCIsCQkJW0tFWV9QQUdFVVBdID0gIlBhZ2VVcCIsCisJW0tFWV9MRUZUXSA9ICJMZWZ0IiwJCQlbS0VZX1JJR0hUXSA9ICJSaWdodCIsCisJW0tFWV9FTkRdID0gIkVuZCIsCQkJW0tFWV9ET1dOXSA9ICJEb3duIiwKKwlbS0VZX1BBR0VET1dOXSA9ICJQYWdlRG93biIsCQlbS0VZX0lOU0VSVF0gPSAiSW5zZXJ0IiwKKwlbS0VZX0RFTEVURV0gPSAiRGVsZXRlIiwJCVtLRVlfTUFDUk9dID0gIk1hY3JvIiwKKwlbS0VZX01VVEVdID0gIk11dGUiLAkJCVtLRVlfVk9MVU1FRE9XTl0gPSAiVm9sdW1lRG93biIsCisJW0tFWV9WT0xVTUVVUF0gPSAiVm9sdW1lVXAiLAkJW0tFWV9QT1dFUl0gPSAiUG93ZXIiLAorCVtLRVlfS1BFUVVBTF0gPSAiS1BFcXVhbCIsCQlbS0VZX0tQUExVU01JTlVTXSA9ICJLUFBsdXNNaW51cyIsCisJW0tFWV9QQVVTRV0gPSAiUGF1c2UiLAkJCVtLRVlfS1BDT01NQV0gPSAiS1BDb21tYSIsCisJW0tFWV9IQU5HVUVMXSA9ICJIYW5ndWVsIiwJCVtLRVlfSEFOSkFdID0gIkhhbmphIiwKKwlbS0VZX1lFTl0gPSAiWWVuIiwJCQlbS0VZX0xFRlRNRVRBXSA9ICJMZWZ0TWV0YSIsCisJW0tFWV9SSUdIVE1FVEFdID0gIlJpZ2h0TWV0YSIsCQlbS0VZX0NPTVBPU0VdID0gIkNvbXBvc2UiLAorCVtLRVlfU1RPUF0gPSAiU3RvcCIsCQkJW0tFWV9BR0FJTl0gPSAiQWdhaW4iLAorCVtLRVlfUFJPUFNdID0gIlByb3BzIiwJCQlbS0VZX1VORE9dID0gIlVuZG8iLAorCVtLRVlfRlJPTlRdID0gIkZyb250IiwJCQlbS0VZX0NPUFldID0gIkNvcHkiLAorCVtLRVlfT1BFTl0gPSAiT3BlbiIsCQkJW0tFWV9QQVNURV0gPSAiUGFzdGUiLAorCVtLRVlfRklORF0gPSAiRmluZCIsCQkJW0tFWV9DVVRdID0gIkN1dCIsCisJW0tFWV9IRUxQXSA9ICJIZWxwIiwJCQlbS0VZX01FTlVdID0gIk1lbnUiLAorCVtLRVlfQ0FMQ10gPSAiQ2FsYyIsCQkJW0tFWV9TRVRVUF0gPSAiU2V0dXAiLAorCVtLRVlfU0xFRVBdID0gIlNsZWVwIiwJCQlbS0VZX1dBS0VVUF0gPSAiV2FrZVVwIiwKKwlbS0VZX0ZJTEVdID0gIkZpbGUiLAkJCVtLRVlfU0VOREZJTEVdID0gIlNlbmRGaWxlIiwKKwlbS0VZX0RFTEVURUZJTEVdID0gIkRlbGV0ZUZpbGUiLAlbS0VZX1hGRVJdID0gIlgtZmVyIiwKKwlbS0VZX1BST0cxXSA9ICJQcm9nMSIsCQkJW0tFWV9QUk9HMl0gPSAiUHJvZzIiLAorCVtLRVlfV1dXXSA9ICJXV1ciLAkJCVtLRVlfTVNET1NdID0gIk1TRE9TIiwKKwlbS0VZX0NPRkZFRV0gPSAiQ29mZmVlIiwJCVtLRVlfRElSRUNUSU9OXSA9ICJEaXJlY3Rpb24iLAorCVtLRVlfQ1lDTEVXSU5ET1dTXSA9ICJDeWNsZVdpbmRvd3MiLAlbS0VZX01BSUxdID0gIk1haWwiLAorCVtLRVlfQk9PS01BUktTXSA9ICJCb29rbWFya3MiLAkJW0tFWV9DT01QVVRFUl0gPSAiQ29tcHV0ZXIiLAorCVtLRVlfQkFDS10gPSAiQmFjayIsCQkJW0tFWV9GT1JXQVJEXSA9ICJGb3J3YXJkIiwKKwlbS0VZX0NMT1NFQ0RdID0gIkNsb3NlQ0QiLAkJW0tFWV9FSkVDVENEXSA9ICJFamVjdENEIiwKKwlbS0VZX0VKRUNUQ0xPU0VDRF0gPSAiRWplY3RDbG9zZUNEIiwJW0tFWV9ORVhUU09OR10gPSAiTmV4dFNvbmciLAorCVtLRVlfUExBWVBBVVNFXSA9ICJQbGF5UGF1c2UiLAkJW0tFWV9QUkVWSU9VU1NPTkddID0gIlByZXZpb3VzU29uZyIsCisJW0tFWV9TVE9QQ0RdID0gIlN0b3BDRCIsCQlbS0VZX1JFQ09SRF0gPSAiUmVjb3JkIiwKKwlbS0VZX1JFV0lORF0gPSAiUmV3aW5kIiwJCVtLRVlfUEhPTkVdID0gIlBob25lIiwKKwlbS0VZX0lTT10gPSAiSVNPS2V5IiwJCQlbS0VZX0NPTkZJR10gPSAiQ29uZmlnIiwKKwlbS0VZX0hPTUVQQUdFXSA9ICJIb21lUGFnZSIsCQlbS0VZX1JFRlJFU0hdID0gIlJlZnJlc2giLAorCVtLRVlfRVhJVF0gPSAiRXhpdCIsCQkJW0tFWV9NT1ZFXSA9ICJNb3ZlIiwKKwlbS0VZX0VESVRdID0gIkVkaXQiLAkJCVtLRVlfU0NST0xMVVBdID0gIlNjcm9sbFVwIiwKKwlbS0VZX1NDUk9MTERPV05dID0gIlNjcm9sbERvd24iLAlbS0VZX0tQTEVGVFBBUkVOXSA9ICJLUExlZnRQYXJlbnRoZXNpcyIsCisJW0tFWV9LUFJJR0hUUEFSRU5dID0gIktQUmlnaHRQYXJlbnRoZXNpcyIsIFtLRVlfRjEzXSA9ICJGMTMiLAorCVtLRVlfRjE0XSA9ICJGMTQiLAkJCVtLRVlfRjE1XSA9ICJGMTUiLAorCVtLRVlfRjE2XSA9ICJGMTYiLAkJCVtLRVlfRjE3XSA9ICJGMTciLAorCVtLRVlfRjE4XSA9ICJGMTgiLAkJCVtLRVlfRjE5XSA9ICJGMTkiLAorCVtLRVlfRjIwXSA9ICJGMjAiLAkJCVtLRVlfRjIxXSA9ICJGMjEiLAorCVtLRVlfRjIyXSA9ICJGMjIiLAkJCVtLRVlfRjIzXSA9ICJGMjMiLAorCVtLRVlfRjI0XSA9ICJGMjQiLAkJCVtLRVlfUExBWUNEXSA9ICJQbGF5Q0QiLAorCVtLRVlfUEFVU0VDRF0gPSAiUGF1c2VDRCIsCQlbS0VZX1BST0czXSA9ICJQcm9nMyIsCisJW0tFWV9QUk9HNF0gPSAiUHJvZzQiLAkJCVtLRVlfU1VTUEVORF0gPSAiU3VzcGVuZCIsCisJW0tFWV9DTE9TRV0gPSAiQ2xvc2UiLAkJCVtLRVlfUExBWV0gPSAiUGxheSIsCisJW0tFWV9GQVNURk9SV0FSRF0gPSAiRmFzdCBGb3J3YXJkIiwJW0tFWV9CQVNTQk9PU1RdID0gIkJhc3MgQm9vc3QiLAorCVtLRVlfUFJJTlRdID0gIlByaW50IiwJCQlbS0VZX0hQXSA9ICJIUCIsCisJW0tFWV9DQU1FUkFdID0gIkNhbWVyYSIsCQlbS0VZX1NPVU5EXSA9ICJTb3VuZCIsCisJW0tFWV9RVUVTVElPTl0gPSAiUXVlc3Rpb24iLAkJW0tFWV9FTUFJTF0gPSAiRW1haWwiLAorCVtLRVlfQ0hBVF0gPSAiQ2hhdCIsCQkJW0tFWV9TRUFSQ0hdID0gIlNlYXJjaCIsCisJW0tFWV9DT05ORUNUXSA9ICJDb25uZWN0IiwJCVtLRVlfRklOQU5DRV0gPSAiRmluYW5jZSIsCisJW0tFWV9TUE9SVF0gPSAiU3BvcnQiLAkJCVtLRVlfU0hPUF0gPSAiU2hvcCIsCisJW0tFWV9BTFRFUkFTRV0gPSAiQWx0ZXJuYXRlIEVyYXNlIiwJW0tFWV9DQU5DRUxdID0gIkNhbmNlbCIsCisJW0tFWV9CUklHSFRORVNTRE9XTl0gPSAiQnJpZ2h0bmVzcyBkb3duIiwgW0tFWV9CUklHSFRORVNTVVBdID0gIkJyaWdodG5lc3MgdXAiLAorCVtLRVlfTUVESUFdID0gIk1lZGlhIiwJCQlbS0VZX1VOS05PV05dID0gIlVua25vd24iLAorCVtCVE5fMF0gPSAiQnRuMCIsCQkJW0JUTl8xXSA9ICJCdG4xIiwKKwlbQlROXzJdID0gIkJ0bjIiLAkJCVtCVE5fM10gPSAiQnRuMyIsCisJW0JUTl80XSA9ICJCdG40IiwJCQlbQlROXzVdID0gIkJ0bjUiLAorCVtCVE5fNl0gPSAiQnRuNiIsCQkJW0JUTl83XSA9ICJCdG43IiwKKwlbQlROXzhdID0gIkJ0bjgiLAkJCVtCVE5fOV0gPSAiQnRuOSIsCisJW0JUTl9MRUZUXSA9ICJMZWZ0QnRuIiwJCQlbQlROX1JJR0hUXSA9ICJSaWdodEJ0biIsCisJW0JUTl9NSURETEVdID0gIk1pZGRsZUJ0biIsCQlbQlROX1NJREVdID0gIlNpZGVCdG4iLAorCVtCVE5fRVhUUkFdID0gIkV4dHJhQnRuIiwJCVtCVE5fRk9SV0FSRF0gPSAiRm9yd2FyZEJ0biIsCisJW0JUTl9CQUNLXSA9ICJCYWNrQnRuIiwJCQlbQlROX1RBU0tdID0gIlRhc2tCdG4iLAorCVtCVE5fVFJJR0dFUl0gPSAiVHJpZ2dlciIsCQlbQlROX1RIVU1CXSA9ICJUaHVtYkJ0biIsCisJW0JUTl9USFVNQjJdID0gIlRodW1iQnRuMiIsCQlbQlROX1RPUF0gPSAiVG9wQnRuIiwKKwlbQlROX1RPUDJdID0gIlRvcEJ0bjIiLAkJCVtCVE5fUElOS0lFXSA9ICJQaW5raWVCdG4iLAorCVtCVE5fQkFTRV0gPSAiQmFzZUJ0biIsCQkJW0JUTl9CQVNFMl0gPSAiQmFzZUJ0bjIiLAorCVtCVE5fQkFTRTNdID0gIkJhc2VCdG4zIiwJCVtCVE5fQkFTRTRdID0gIkJhc2VCdG40IiwKKwlbQlROX0JBU0U1XSA9ICJCYXNlQnRuNSIsCQlbQlROX0JBU0U2XSA9ICJCYXNlQnRuNiIsCisJW0JUTl9ERUFEXSA9ICJCdG5EZWFkIiwJCQlbQlROX0FdID0gIkJ0bkEiLAorCVtCVE5fQl0gPSAiQnRuQiIsCQkJW0JUTl9DXSA9ICJCdG5DIiwKKwlbQlROX1hdID0gIkJ0blgiLAkJCVtCVE5fWV0gPSAiQnRuWSIsCisJW0JUTl9aXSA9ICJCdG5aIiwJCQlbQlROX1RMXSA9ICJCdG5UTCIsCisJW0JUTl9UUl0gPSAiQnRuVFIiLAkJCVtCVE5fVEwyXSA9ICJCdG5UTDIiLAorCVtCVE5fVFIyXSA9ICJCdG5UUjIiLAkJCVtCVE5fU0VMRUNUXSA9ICJCdG5TZWxlY3QiLAorCVtCVE5fU1RBUlRdID0gIkJ0blN0YXJ0IiwJCVtCVE5fTU9ERV0gPSAiQnRuTW9kZSIsCisJW0JUTl9USFVNQkxdID0gIkJ0blRodW1iTCIsCQlbQlROX1RIVU1CUl0gPSAiQnRuVGh1bWJSIiwKKwlbQlROX1RPT0xfUEVOXSA9ICJUb29sUGVuIiwJCVtCVE5fVE9PTF9SVUJCRVJdID0gIlRvb2xSdWJiZXIiLAorCVtCVE5fVE9PTF9CUlVTSF0gPSAiVG9vbEJydXNoIiwJCVtCVE5fVE9PTF9QRU5DSUxdID0gIlRvb2xQZW5jaWwiLAorCVtCVE5fVE9PTF9BSVJCUlVTSF0gPSAiVG9vbEFpcmJydXNoIiwJW0JUTl9UT09MX0ZJTkdFUl0gPSAiVG9vbEZpbmdlciIsCisJW0JUTl9UT09MX01PVVNFXSA9ICJUb29sTW91c2UiLAkJW0JUTl9UT09MX0xFTlNdID0gIlRvb2xMZW5zIiwKKwlbQlROX1RPVUNIXSA9ICJUb3VjaCIsCQkJW0JUTl9TVFlMVVNdID0gIlN0eWx1cyIsCisJW0JUTl9TVFlMVVMyXSA9ICJTdHlsdXMyIiwJCVtCVE5fVE9PTF9ET1VCTEVUQVBdID0gIlRvb2wgRG91YmxldGFwIiwKKwlbQlROX1RPT0xfVFJJUExFVEFQXSA9ICJUb29sIFRyaXBsZXRhcCIsIFtCVE5fR0VBUl9ET1dOXSA9ICJXaGVlbEJ0biIsCisJW0JUTl9HRUFSX1VQXSA9ICJHZWFyIHVwIiwJCVtLRVlfT0tdID0gIk9rIiwKKwlbS0VZX1NFTEVDVF0gPSAiU2VsZWN0IiwJCVtLRVlfR09UT10gPSAiR290byIsCisJW0tFWV9DTEVBUl0gPSAiQ2xlYXIiLAkJCVtLRVlfUE9XRVIyXSA9ICJQb3dlcjIiLAorCVtLRVlfT1BUSU9OXSA9ICJPcHRpb24iLAkJW0tFWV9JTkZPXSA9ICJJbmZvIiwKKwlbS0VZX1RJTUVdID0gIlRpbWUiLAkJCVtLRVlfVkVORE9SXSA9ICJWZW5kb3IiLAorCVtLRVlfQVJDSElWRV0gPSAiQXJjaGl2ZSIsCQlbS0VZX1BST0dSQU1dID0gIlByb2dyYW0iLAorCVtLRVlfQ0hBTk5FTF0gPSAiQ2hhbm5lbCIsCQlbS0VZX0ZBVk9SSVRFU10gPSAiRmF2b3JpdGVzIiwKKwlbS0VZX0VQR10gPSAiRVBHIiwJCQlbS0VZX1BWUl0gPSAiUFZSIiwKKwlbS0VZX01IUF0gPSAiTUhQIiwJCQlbS0VZX0xBTkdVQUdFXSA9ICJMYW5ndWFnZSIsCisJW0tFWV9USVRMRV0gPSAiVGl0bGUiLAkJCVtLRVlfU1VCVElUTEVdID0gIlN1YnRpdGxlIiwKKwlbS0VZX0FOR0xFXSA9ICJBbmdsZSIsCQkJW0tFWV9aT09NXSA9ICJab29tIiwKKwlbS0VZX01PREVdID0gIk1vZGUiLAkJCVtLRVlfS0VZQk9BUkRdID0gIktleWJvYXJkIiwKKwlbS0VZX1NDUkVFTl0gPSAiU2NyZWVuIiwJCVtLRVlfUENdID0gIlBDIiwKKwlbS0VZX1RWXSA9ICJUViIsCQkJW0tFWV9UVjJdID0gIlRWMiIsCisJW0tFWV9WQ1JdID0gIlZDUiIsCQkJW0tFWV9WQ1IyXSA9ICJWQ1IyIiwKKwlbS0VZX1NBVF0gPSAiU2F0IiwJCQlbS0VZX1NBVDJdID0gIlNhdDIiLAorCVtLRVlfQ0RdID0gIkNEIiwJCQlbS0VZX1RBUEVdID0gIlRhcGUiLAorCVtLRVlfUkFESU9dID0gIlJhZGlvIiwJCQlbS0VZX1RVTkVSXSA9ICJUdW5lciIsCisJW0tFWV9QTEFZRVJdID0gIlBsYXllciIsCQlbS0VZX1RFWFRdID0gIlRleHQiLAorCVtLRVlfRFZEXSA9ICJEVkQiLAkJCVtLRVlfQVVYXSA9ICJBdXgiLAorCVtLRVlfTVAzXSA9ICJNUDMiLAkJCVtLRVlfQVVESU9dID0gIkF1ZGlvIiwKKwlbS0VZX1ZJREVPXSA9ICJWaWRlbyIsCQkJW0tFWV9ESVJFQ1RPUlldID0gIkRpcmVjdG9yeSIsCisJW0tFWV9MSVNUXSA9ICJMaXN0IiwJCQlbS0VZX01FTU9dID0gIk1lbW8iLAorCVtLRVlfQ0FMRU5EQVJdID0gIkNhbGVuZGFyIiwJCVtLRVlfUkVEXSA9ICJSZWQiLAorCVtLRVlfR1JFRU5dID0gIkdyZWVuIiwJCQlbS0VZX1lFTExPV10gPSAiWWVsbG93IiwKKwlbS0VZX0JMVUVdID0gIkJsdWUiLAkJCVtLRVlfQ0hBTk5FTFVQXSA9ICJDaGFubmVsVXAiLAorCVtLRVlfQ0hBTk5FTERPV05dID0gIkNoYW5uZWxEb3duIiwJW0tFWV9GSVJTVF0gPSAiRmlyc3QiLAorCVtLRVlfTEFTVF0gPSAiTGFzdCIsCQkJW0tFWV9BQl0gPSAiQUIiLAorCVtLRVlfTkVYVF0gPSAiTmV4dCIsCQkJW0tFWV9SRVNUQVJUXSA9ICJSZXN0YXJ0IiwKKwlbS0VZX1NMT1ddID0gIlNsb3ciLAkJCVtLRVlfU0hVRkZMRV0gPSAiU2h1ZmZsZSIsCisJW0tFWV9CUkVBS10gPSAiQnJlYWsiLAkJCVtLRVlfUFJFVklPVVNdID0gIlByZXZpb3VzIiwKKwlbS0VZX0RJR0lUU10gPSAiRGlnaXRzIiwJCVtLRVlfVEVFTl0gPSAiVEVFTiIsCisJW0tFWV9UV0VOXSA9ICJUV0VOIiwJCQlbS0VZX0RFTF9FT0xdID0gIkRlbGV0ZUVPTCIsCisJW0tFWV9ERUxfRU9TXSA9ICJEZWxldGVFT1MiLAkJW0tFWV9JTlNfTElORV0gPSAiSW5zZXJ0TGluZSIsCisJW0tFWV9ERUxfTElORV0gPSAiRGVsZXRlTGluZSIsCit9OworCitzdGF0aWMgY2hhciAqcmVsYXRpdmVzW1JFTF9NQVggKyAxXSA9IHsKKwlbUkVMX1hdID0gIlgiLAkJCVtSRUxfWV0gPSAiWSIsCisJW1JFTF9aXSA9ICJaIiwJCQlbUkVMX0hXSEVFTF0gPSAiSFdoZWVsIiwKKwlbUkVMX0RJQUxdID0gIkRpYWwiLAkJW1JFTF9XSEVFTF0gPSAiV2hlZWwiLCAKKwlbUkVMX01JU0NdID0gIk1pc2MiLAkKK307CisKK3N0YXRpYyBjaGFyICphYnNvbHV0ZXNbQUJTX01BWCArIDFdID0geworCVtBQlNfWF0gPSAiWCIsCQkJW0FCU19ZXSA9ICJZIiwKKwlbQUJTX1pdID0gIloiLAkJCVtBQlNfUlhdID0gIlJ4IiwKKwlbQUJTX1JZXSA9ICJSeSIsCQlbQUJTX1JaXSA9ICJSeiIsCisJW0FCU19USFJPVFRMRV0gPSAiVGhyb3R0bGUiLAlbQUJTX1JVRERFUl0gPSAiUnVkZGVyIiwKKwlbQUJTX1dIRUVMXSA9ICJXaGVlbCIsCQlbQUJTX0dBU10gPSAiR2FzIiwKKwlbQUJTX0JSQUtFXSA9ICJCcmFrZSIsCQlbQUJTX0hBVDBYXSA9ICJIYXQwWCIsCisJW0FCU19IQVQwWV0gPSAiSGF0MFkiLAkJW0FCU19IQVQxWF0gPSAiSGF0MVgiLAorCVtBQlNfSEFUMVldID0gIkhhdDFZIiwJCVtBQlNfSEFUMlhdID0gIkhhdDJYIiwKKwlbQUJTX0hBVDJZXSA9ICJIYXQyWSIsCQlbQUJTX0hBVDNYXSA9ICJIYXQzWCIsCisJW0FCU19IQVQzWV0gPSAiSGF0IDNZIiwJCVtBQlNfUFJFU1NVUkVdID0gIlByZXNzdXJlIiwKKwlbQUJTX0RJU1RBTkNFXSA9ICJEaXN0YW5jZSIsCVtBQlNfVElMVF9YXSA9ICJYVGlsdCIsCisJW0FCU19USUxUX1ldID0gIllUaWx0IiwJCVtBQlNfVE9PTF9XSURUSF0gPSAiVG9vbCBXaWR0aCIsCisJW0FCU19WT0xVTUVdID0gIlZvbHVtZSIsCVtBQlNfTUlTQ10gPSAiTWlzYyIsCit9OworCitzdGF0aWMgY2hhciAqbWlzY1tNU0NfTUFYICsgMV0gPSB7CisJW01TQ19TRVJJQUxdID0gIlNlcmlhbCIsCVtNU0NfUFVMU0VMRURdID0gIlB1bHNlbGVkIiwKKwlbTVNDX0dFU1RVUkVdID0gIkdlc3R1cmUiLAlbTVNDX1JBV10gPSAiUmF3RGF0YSIKK307CisKK3N0YXRpYyBjaGFyICpsZWRzW0xFRF9NQVggKyAxXSA9IHsKKwlbTEVEX05VTUxdID0gIk51bUxvY2siLAkJW0xFRF9DQVBTTF0gPSAiQ2Fwc0xvY2siLCAKKwlbTEVEX1NDUk9MTExdID0gIlNjcm9sbExvY2siLAlbTEVEX0NPTVBPU0VdID0gIkNvbXBvc2UiLAorCVtMRURfS0FOQV0gPSAiS2FuYSIsCQlbTEVEX1NMRUVQXSA9ICJTbGVlcCIsIAorCVtMRURfU1VTUEVORF0gPSAiU3VzcGVuZCIsCVtMRURfTVVURV0gPSAiTXV0ZSIsCisJW0xFRF9NSVNDXSA9ICJNaXNjIiwKK307CisKK3N0YXRpYyBjaGFyICpyZXBlYXRzW1JFUF9NQVggKyAxXSA9IHsKKwlbUkVQX0RFTEFZXSA9ICJEZWxheSIsCQlbUkVQX1BFUklPRF0gPSAiUGVyaW9kIgorfTsKKworc3RhdGljIGNoYXIgKnNvdW5kc1tTTkRfTUFYICsgMV0gPSB7CisJW1NORF9DTElDS10gPSAiQ2xpY2siLAkJW1NORF9CRUxMXSA9ICJCZWxsIiwKKwlbU05EX1RPTkVdID0gIlRvbmUiCit9OworCitzdGF0aWMgY2hhciAqKm5hbWVzW0VWX01BWCArIDFdID0geworCVtFVl9TWU5dID0gc3luY3MsCQkJW0VWX0tFWV0gPSBrZXlzLAorCVtFVl9SRUxdID0gcmVsYXRpdmVzLAkJCVtFVl9BQlNdID0gYWJzb2x1dGVzLAorCVtFVl9NU0NdID0gbWlzYywJCQlbRVZfTEVEXSA9IGxlZHMsCisJW0VWX1NORF0gPSBzb3VuZHMsCQkJW0VWX1JFUF0gPSByZXBlYXRzLAorfTsKKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgcmVzb2x2X2V2ZW50KF9fdTggdHlwZSwgX191MTYgY29kZSkgeworCisJcHJpbnRrKCIlcy4lcyIsIGV2ZW50c1t0eXBlXSA/IGV2ZW50c1t0eXBlXSA6ICI/IiwKKwkJbmFtZXNbdHlwZV0gPyAobmFtZXNbdHlwZV1bY29kZV0gPyBuYW1lc1t0eXBlXVtjb2RlXSA6ICI/IikgOiAiPyIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWZmLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmU2OTg2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWZmLmMKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqICRJZDogaGlkLWZmLmMsdiAxLjIgMjAwMi8wNC8xOCAyMjowMjo0NyBqZGVuZXV4IEV4cCAkCisgKgorICogIEZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIGhpZCBkZXZpY2VzLgorICogIE5vdCBhbGwgaGlkIGRldmljZXMgdXNlIHRoZSBzYW1lIHByb3RvY29sLiBGb3IgZXhhbXBsZSwgc29tZSB1c2UgUElELAorICogIG90aGVyIHVzZSB0aGVpciBvd24gcHJvcHJpZXRhcnkgcHJvY290b2wuCisgKgorICogIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IEpvaGFubiBEZW5ldXgKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBTaG91bGQgeW91IG5lZWQgdG8gY29udGFjdCBtZSwgdGhlIGF1dGhvciwgeW91IGNhbiBkbyBzbyBieQorICogZS1tYWlsIC0gbWFpbCB5b3VyIG1lc3NhZ2UgdG8gPGpvaGFubi5kZW5ldXhAaXQudXUuc2U+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisKKyN1bmRlZiBERUJVRworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSAiaGlkLmgiCisKKy8qIERyaXZlcnMnIGluaXRpYWxpemluZyBmdW5jdGlvbnMgKi8KK2V4dGVybiBpbnQgaGlkX2xnZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSogaGlkKTsKK2V4dGVybiBpbnQgaGlkX2xnM2RfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSogaGlkKTsKK2V4dGVybiBpbnQgaGlkX3BpZF9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpOworZXh0ZXJuIGludCBoaWRfdG1mZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpOworCisvKgorICogVGhpcyB0YWJsZSBjb250YWlucyBwb2ludGVycyB0byBpbml0aWFsaXplcnMuIFRvIGFkZCBzdXBwb3J0IGZvciBuZXcKKyAqIGRldmljZXMsIHlvdSBuZWVkIHRvIGFkZCB0aGUgVVNCIHZlbmRvciBhbmQgcHJvZHVjdCBpZHMgaGVyZS4KKyAqLworc3RydWN0IGhpZF9mZl9pbml0aWFsaXplciB7CisJdTE2IGlkVmVuZG9yOworCXUxNiBpZFByb2R1Y3Q7CisJaW50ICgqaW5pdCkoc3RydWN0IGhpZF9kZXZpY2UqKTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2ZmX2luaXRpYWxpemVyIGluaXRzW10gPSB7CisjaWZkZWYgQ09ORklHX0xPR0lURUNIX0ZGCisJezB4NDZkLCAweGMyMTEsIGhpZF9sZ2ZmX2luaXR9LCAvLyBMb2dpdGVjaCBDb3JkbGVzcyBydW1ibGUgcGFkCisJezB4NDZkLCAweGMyODMsIGhpZF9sZ2ZmX2luaXR9LCAvLyBMb2dpdGVjaCBXaW5nbWFuIEZvcmNlIDNkCisJezB4NDZkLCAweGMyOTUsIGhpZF9sZ2ZmX2luaXR9LAkvLyBMb2dpdGVjaCBNT01PIGZvcmNlIHdoZWVsCisJezB4NDZkLCAweGMyMTksIGhpZF9sZ2ZmX2luaXR9LCAvLyBMb2dpdGVjaCBDb3JkbGVzcyBydW1ibGUgcGFkIDIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19ISURfUElECisJezB4NDVlLCAweDAwMWIsIGhpZF9waWRfaW5pdH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGCisJezB4NDRmLCAweGIzMDQsIGhpZF90bWZmX2luaXR9LAorI2VuZGlmCisJezAsIDAsIE5VTEx9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitzdGF0aWMgc3RydWN0IGhpZF9mZl9pbml0aWFsaXplciAqaGlkX2dldF9mZl9pbml0KF9fdTE2IGlkVmVuZG9yLAorCQkJCQkJICBfX3UxNiBpZFByb2R1Y3QpCit7CisJc3RydWN0IGhpZF9mZl9pbml0aWFsaXplciAqaW5pdDsKKwlmb3IgKGluaXQgPSBpbml0czsKKwkgICAgIGluaXQtPmlkVmVuZG9yCisJICAgICAmJiAhKGluaXQtPmlkVmVuZG9yID09IGlkVmVuZG9yCisJCSAgJiYgaW5pdC0+aWRQcm9kdWN0ID09IGlkUHJvZHVjdCk7CisJICAgICBpbml0KyspOworCisJcmV0dXJuIGluaXQtPmlkVmVuZG9yPyBpbml0IDogTlVMTDsKK30KKworaW50IGhpZF9mZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpCit7CisJc3RydWN0IGhpZF9mZl9pbml0aWFsaXplciAqaW5pdDsKKworCWluaXQgPSBoaWRfZ2V0X2ZmX2luaXQobGUxNl90b19jcHUoaGlkLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQkJICAgICAgIGxlMTZfdG9fY3B1KGhpZC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOworCisJaWYgKCFpbml0KSB7CisJCWRiZygiaGlkX2ZmX2luaXQgY291bGQgbm90IGZpbmQgaW5pdGlhbGl6ZXIiKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCXJldHVybiBpbml0LT5pbml0KGhpZCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtaW5wdXQuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1pbnB1dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NTNjMzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtaW5wdXQuYwpAQCAtMCwwICsxLDYzMCBAQAorLyoKKyAqICRJZDogaGlkLWlucHV0LmMsdiAxLjIgMjAwMi8wNC8yMyAwMDo1OToyNSByZGFtYXppbyBFeHAgJAorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMSBWb2p0ZWNoIFBhdmxpaworICoKKyAqICBVU0IgSElEIHRvIExpbnV4IElucHV0IG1hcHBpbmcKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBTaG91bGQgeW91IG5lZWQgdG8gY29udGFjdCBtZSwgdGhlIGF1dGhvciwgeW91IGNhbiBkbyBzbyBlaXRoZXIgYnkKKyAqIGUtbWFpbCAtIG1haWwgeW91ciBtZXNzYWdlIHRvIDx2b2p0ZWNoQHVjdy5jej4sIG9yIGJ5IHBhcGVyIG1haWw6CisgKiBWb2p0ZWNoIFBhdmxpaywgU2ltdW5rb3ZhIDE1OTQsIFByYWd1ZSA4LCAxODIgMDAgQ3plY2ggUmVwdWJsaWMKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyN1bmRlZiBERUJVRworCisjaW5jbHVkZSAiaGlkLmgiCisKKyNkZWZpbmUgdW5rCUtFWV9VTktOT1dOCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGhpZF9rZXlib2FyZFsyNTZdID0geworCSAgMCwgIDAsICAwLCAgMCwgMzAsIDQ4LCA0NiwgMzIsIDE4LCAzMywgMzQsIDM1LCAyMywgMzYsIDM3LCAzOCwKKwkgNTAsIDQ5LCAyNCwgMjUsIDE2LCAxOSwgMzEsIDIwLCAyMiwgNDcsIDE3LCA0NSwgMjEsIDQ0LCAgMiwgIDMsCisJICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMjgsICAxLCAxNCwgMTUsIDU3LCAxMiwgMTMsIDI2LAorCSAyNywgNDMsIDQzLCAzOSwgNDAsIDQxLCA1MSwgNTIsIDUzLCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwKKwkgNjUsIDY2LCA2NywgNjgsIDg3LCA4OCwgOTksIDcwLDExOSwxMTAsMTAyLDEwNCwxMTEsMTA3LDEwOSwxMDYsCisJMTA1LDEwOCwxMDMsIDY5LCA5OCwgNTUsIDc0LCA3OCwgOTYsIDc5LCA4MCwgODEsIDc1LCA3NiwgNzcsIDcxLAorCSA3MiwgNzMsIDgyLCA4MywgODYsMTI3LDExNiwxMTcsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwKKwkxOTEsMTkyLDE5MywxOTQsMTM0LDEzOCwxMzAsMTMyLDEyOCwxMjksMTMxLDEzNywxMzMsMTM1LDEzNiwxMTMsCisJMTE1LDExNCx1bmssdW5rLHVuaywxMjEsdW5rLCA4OSwgOTMsMTI0LCA5MiwgOTQsIDk1LHVuayx1bmssdW5rLAorCTEyMiwxMjMsIDkwLCA5MSwgODUsdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuaywKKwl1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssCisJdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLAorCXVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuaywKKwl1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssCisJIDI5LCA0MiwgNTYsMTI1LCA5NywgNTQsMTAwLDEyNiwxNjQsMTY2LDE2NSwxNjMsMTYxLDExNSwxMTQsMTEzLAorCTE1MCwxNTgsMTU5LDEyOCwxMzYsMTc3LDE3OCwxNzYsMTQyLDE1MiwxNzMsMTQwLHVuayx1bmssdW5rLHVuaworfTsKKworc3RhdGljIHN0cnVjdCB7CisJX19zMzIgeDsKKwlfX3MzMiB5OworfSAgaGlkX2hhdF90b19heGlzW10gPSB7eyAwLCAwfSwgeyAwLC0xfSwgeyAxLC0xfSwgeyAxLCAwfSwgeyAxLCAxfSwgeyAwLCAxfSwgey0xLCAxfSwgey0xLCAwfSwgey0xLC0xfX07CisKKyNkZWZpbmUgbWFwX2FicyhjKQlkbyB7IHVzYWdlLT5jb2RlID0gYzsgdXNhZ2UtPnR5cGUgPSBFVl9BQlM7IGJpdCA9IGlucHV0LT5hYnNiaXQ7IG1heCA9IEFCU19NQVg7IH0gd2hpbGUgKDApCisjZGVmaW5lIG1hcF9yZWwoYykJZG8geyB1c2FnZS0+Y29kZSA9IGM7IHVzYWdlLT50eXBlID0gRVZfUkVMOyBiaXQgPSBpbnB1dC0+cmVsYml0OyBtYXggPSBSRUxfTUFYOyB9IHdoaWxlICgwKQorI2RlZmluZSBtYXBfa2V5KGMpCWRvIHsgdXNhZ2UtPmNvZGUgPSBjOyB1c2FnZS0+dHlwZSA9IEVWX0tFWTsgYml0ID0gaW5wdXQtPmtleWJpdDsgbWF4ID0gS0VZX01BWDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbWFwX2xlZChjKQlkbyB7IHVzYWdlLT5jb2RlID0gYzsgdXNhZ2UtPnR5cGUgPSBFVl9MRUQ7IGJpdCA9IGlucHV0LT5sZWRiaXQ7IG1heCA9IExFRF9NQVg7IH0gd2hpbGUgKDApCisjZGVmaW5lIG1hcF9mZihjKQlkbyB7IHVzYWdlLT5jb2RlID0gYzsgdXNhZ2UtPnR5cGUgPSBFVl9GRjsgIGJpdCA9IGlucHV0LT5mZmJpdDsgIG1heCA9ICBGRl9NQVg7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgbWFwX2Fic19jbGVhcihjKQlkbyB7IG1hcF9hYnMoYyk7IGNsZWFyX2JpdChjLCBiaXQpOyB9IHdoaWxlICgwKQorI2RlZmluZSBtYXBfa2V5X2NsZWFyKGMpCWRvIHsgbWFwX2tleShjKTsgY2xlYXJfYml0KGMsIGJpdCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIG1hcF9mZl9lZmZlY3QoYykJZG8geyBzZXRfYml0KGMsIGlucHV0LT5mZmJpdCk7IH0gd2hpbGUgKDApCisKK3N0YXRpYyB2b2lkIGhpZGlucHV0X2NvbmZpZ3VyZV91c2FnZShzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCisJCQkJICAgICBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9ICZoaWRpbnB1dC0+aW5wdXQ7CisJc3RydWN0IGhpZF9kZXZpY2UgKmRldmljZSA9IGhpZGlucHV0LT5pbnB1dC5wcml2YXRlOworCWludCBtYXgsIGNvZGU7CisJdW5zaWduZWQgbG9uZyAqYml0OworCisJZmllbGQtPmhpZGlucHV0ID0gaGlkaW5wdXQ7CisKKyNpZmRlZiBERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJNYXBwaW5nOiAiKTsKKwlyZXNvbHZfdXNhZ2UodXNhZ2UtPmhpZCk7CisJcHJpbnRrKCIgLS0tPiAiKTsKKyNlbmRpZgorCisJaWYgKGZpZWxkLT5mbGFncyAmIEhJRF9NQUlOX0lURU1fQ09OU1RBTlQpCisJCWdvdG8gaWdub3JlOworCisJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpIHsKKworCQljYXNlIEhJRF9VUF9VTkRFRklORUQ6CisJCQlnb3RvIGlnbm9yZTsKKworCQljYXNlIEhJRF9VUF9LRVlCT0FSRDoKKworCQkJc2V0X2JpdChFVl9SRVAsIGlucHV0LT5ldmJpdCk7CisKKwkJCWlmICgodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgPCAyNTYpIHsKKwkJCQlpZiAoIWhpZF9rZXlib2FyZFt1c2FnZS0+aGlkICYgSElEX1VTQUdFXSkgZ290byBpZ25vcmU7CisJCQkJbWFwX2tleV9jbGVhcihoaWRfa2V5Ym9hcmRbdXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV0pOworCQkJfSBlbHNlCisJCQkJbWFwX2tleShLRVlfVU5LTk9XTik7CisKKwkJCWJyZWFrOworCisJCWNhc2UgSElEX1VQX0JVVFRPTjoKKworCQkJY29kZSA9ICgodXNhZ2UtPmhpZCAtIDEpICYgMHhmKTsKKworCQkJc3dpdGNoIChmaWVsZC0+YXBwbGljYXRpb24pIHsKKwkJCQljYXNlIEhJRF9HRF9NT1VTRToKKwkJCQljYXNlIEhJRF9HRF9QT0lOVEVSOiAgY29kZSArPSAweDExMDsgYnJlYWs7CisJCQkJY2FzZSBISURfR0RfSk9ZU1RJQ0s6IGNvZGUgKz0gMHgxMjA7IGJyZWFrOworCQkJCWNhc2UgSElEX0dEX0dBTUVQQUQ6ICBjb2RlICs9IDB4MTMwOyBicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlzd2l0Y2ggKGZpZWxkLT5waHlzaWNhbCkgeworCQkJCQkJY2FzZSBISURfR0RfTU9VU0U6CisJCQkJCQljYXNlIEhJRF9HRF9QT0lOVEVSOiAgY29kZSArPSAweDExMDsgYnJlYWs7CisJCQkJCQljYXNlIEhJRF9HRF9KT1lTVElDSzogY29kZSArPSAweDEyMDsgYnJlYWs7CisJCQkJCQljYXNlIEhJRF9HRF9HQU1FUEFEOiAgY29kZSArPSAweDEzMDsgYnJlYWs7CisJCQkJCQlkZWZhdWx0OiAgICAgICAgICAgICAgY29kZSArPSAweDEwMDsKKwkJCQkJfQorCQkJfQorCisJCQltYXBfa2V5KGNvZGUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBISURfVVBfR0VOREVTSzoKKworCQkJaWYgKCh1c2FnZS0+aGlkICYgMHhmMCkgPT0gMHg4MCkgewkvKiBTeXN0ZW1Db250cm9sICovCisJCQkJc3dpdGNoICh1c2FnZS0+aGlkICYgMHhmKSB7CisJCQkJCWNhc2UgMHgxOiBtYXBfa2V5X2NsZWFyKEtFWV9QT1dFUik7ICBicmVhazsKKwkJCQkJY2FzZSAweDI6IG1hcF9rZXlfY2xlYXIoS0VZX1NMRUVQKTsgIGJyZWFrOworCQkJCQljYXNlIDB4MzogbWFwX2tleV9jbGVhcihLRVlfV0FLRVVQKTsgYnJlYWs7CisJCQkJCWRlZmF1bHQ6IGdvdG8gdW5rbm93bjsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmICgodXNhZ2UtPmhpZCAmIDB4ZjApID09IDB4OTApIHsJLyogRC1wYWQgKi8KKwkJCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKwkJCQkJY2FzZSBISURfR0RfVVA6CSAgIHVzYWdlLT5oYXRfZGlyID0gMTsgYnJlYWs7CisJCQkJCWNhc2UgSElEX0dEX0RPV046ICB1c2FnZS0+aGF0X2RpciA9IDU7IGJyZWFrOworCQkJCQljYXNlIEhJRF9HRF9SSUdIVDogdXNhZ2UtPmhhdF9kaXIgPSAzOyBicmVhazsKKwkJCQkJY2FzZSBISURfR0RfTEVGVDogIHVzYWdlLT5oYXRfZGlyID0gNzsgYnJlYWs7CisJCQkJCWRlZmF1bHQ6IGdvdG8gdW5rbm93bjsKKwkJCQl9CisJCQkJaWYgKGZpZWxkLT5kcGFkKSB7CisJCQkJCW1hcF9hYnMoZmllbGQtPmRwYWQpOworCQkJCQlnb3RvIGlnbm9yZTsKKwkJCQl9CisJCQkJbWFwX2FicyhBQlNfSEFUMFgpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKworCQkJCS8qIFRoZXNlIHVzYWdlIElEcyBtYXAgZGlyZWN0bHkgdG8gdGhlIHVzYWdlIGNvZGVzLiAqLworCQkJCWNhc2UgSElEX0dEX1g6IGNhc2UgSElEX0dEX1k6IGNhc2UgSElEX0dEX1o6CisJCQkJY2FzZSBISURfR0RfUlg6IGNhc2UgSElEX0dEX1JZOiBjYXNlIEhJRF9HRF9SWjoKKwkJCQljYXNlIEhJRF9HRF9TTElERVI6IGNhc2UgSElEX0dEX0RJQUw6IGNhc2UgSElEX0dEX1dIRUVMOgorCQkJCQlpZiAoZmllbGQtPmZsYWdzICYgSElEX01BSU5fSVRFTV9SRUxBVElWRSkgCisJCQkJCQltYXBfcmVsKHVzYWdlLT5oaWQgJiAweGYpOworCQkJCQllbHNlCisJCQkJCQltYXBfYWJzKHVzYWdlLT5oaWQgJiAweGYpOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgSElEX0dEX0hBVFNXSVRDSDoKKwkJCQkJdXNhZ2UtPmhhdF9taW4gPSBmaWVsZC0+bG9naWNhbF9taW5pbXVtOworCQkJCQl1c2FnZS0+aGF0X21heCA9IGZpZWxkLT5sb2dpY2FsX21heGltdW07CisJCQkJCW1hcF9hYnMoQUJTX0hBVDBYKTsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIEhJRF9HRF9TVEFSVDoJbWFwX2tleV9jbGVhcihCVE5fU1RBUlQpOwlicmVhazsKKwkJCQljYXNlIEhJRF9HRF9TRUxFQ1Q6CW1hcF9rZXlfY2xlYXIoQlROX1NFTEVDVCk7CWJyZWFrOworCisJCQkJZGVmYXVsdDogZ290byB1bmtub3duOworCQkJfQorCisJCQlicmVhazsKKworCQljYXNlIEhJRF9VUF9MRUQ6CisJCQlpZiAoKCh1c2FnZS0+aGlkIC0gMSkgJiAweGZmZmYpID49IExFRF9NQVgpCisJCQkJZ290byBpZ25vcmU7CisJCQltYXBfbGVkKCh1c2FnZS0+aGlkIC0gMSkgJiAweGZmZmYpOworCQkJYnJlYWs7CisKKwkJY2FzZSBISURfVVBfRElHSVRJWkVSOgorCisJCQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiAweGZmKSB7CisKKwkJCQljYXNlIDB4MzA6IC8qIFRpcFByZXNzdXJlICovCisJCQkJCWlmICghdGVzdF9iaXQoQlROX1RPVUNILCBpbnB1dC0+a2V5Yml0KSkgeworCQkJCQkJZGV2aWNlLT5xdWlya3MgfD0gSElEX1FVSVJLX05PVE9VQ0g7CisJCQkJCQlzZXRfYml0KEVWX0tFWSwgaW5wdXQtPmV2Yml0KTsKKwkJCQkJCXNldF9iaXQoQlROX1RPVUNILCBpbnB1dC0+a2V5Yml0KTsKKwkJCQkJfQorCisJCQkJCW1hcF9hYnNfY2xlYXIoQUJTX1BSRVNTVVJFKTsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIDB4MzI6IC8qIEluUmFuZ2UgKi8KKwkJCQkJc3dpdGNoIChmaWVsZC0+cGh5c2ljYWwgJiAweGZmKSB7CisJCQkJCQljYXNlIDB4MjE6IG1hcF9rZXkoQlROX1RPT0xfTU9VU0UpOyBicmVhazsKKwkJCQkJCWNhc2UgMHgyMjogbWFwX2tleShCVE5fVE9PTF9GSU5HRVIpOyBicmVhazsKKwkJCQkJCWRlZmF1bHQ6IG1hcF9rZXkoQlROX1RPT0xfUEVOKTsgYnJlYWs7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIDB4M2M6IC8qIEludmVydCAqLworCQkJCQltYXBfa2V5X2NsZWFyKEJUTl9UT09MX1JVQkJFUik7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSAweDMzOiAvKiBUb3VjaCAqLworCQkJCWNhc2UgMHg0MjogLyogVGlwU3dpdGNoICovCisJCQkJY2FzZSAweDQzOiAvKiBUaXBTd2l0Y2gyICovCisJCQkJCWRldmljZS0+cXVpcmtzICY9IH5ISURfUVVJUktfTk9UT1VDSDsKKwkJCQkJbWFwX2tleV9jbGVhcihCVE5fVE9VQ0gpOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgMHg0NDogLyogQmFycmVsU3dpdGNoICovCisJCQkJCW1hcF9rZXlfY2xlYXIoQlROX1NUWUxVUyk7CisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDogIGdvdG8gdW5rbm93bjsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgSElEX1VQX0NPTlNVTUVSOgkvKiBVU0IgSFVUIHYxLjEsIHBhZ2VzIDU2LTYyICovCisKKwkJCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgeworCQkJCWNhc2UgMHgwMDA6IGdvdG8gaWdub3JlOworCQkJCWNhc2UgMHgwMzQ6IG1hcF9rZXlfY2xlYXIoS0VZX1NMRUVQKTsJCWJyZWFrOworCQkJCWNhc2UgMHgwMzY6IG1hcF9rZXlfY2xlYXIoQlROX01JU0MpOwkJYnJlYWs7CisJCQkJY2FzZSAweDA4YTogbWFwX2tleV9jbGVhcihLRVlfV1dXKTsJCWJyZWFrOworCQkJCWNhc2UgMHgwOTU6IG1hcF9rZXlfY2xlYXIoS0VZX0hFTFApOwkJYnJlYWs7CisJCQkJY2FzZSAweDBiMDogbWFwX2tleV9jbGVhcihLRVlfUExBWSk7CQlicmVhazsKKwkJCQljYXNlIDB4MGIxOiBtYXBfa2V5X2NsZWFyKEtFWV9QQVVTRSk7CQlicmVhazsKKwkJCQljYXNlIDB4MGIyOiBtYXBfa2V5X2NsZWFyKEtFWV9SRUNPUkQpOwkJYnJlYWs7CisJCQkJY2FzZSAweDBiMzogbWFwX2tleV9jbGVhcihLRVlfRkFTVEZPUldBUkQpOwlicmVhazsKKwkJCQljYXNlIDB4MGI0OiBtYXBfa2V5X2NsZWFyKEtFWV9SRVdJTkQpOwkJYnJlYWs7CisJCQkJY2FzZSAweDBiNTogbWFwX2tleV9jbGVhcihLRVlfTkVYVFNPTkcpOwlicmVhazsKKwkJCQljYXNlIDB4MGI2OiBtYXBfa2V5X2NsZWFyKEtFWV9QUkVWSU9VU1NPTkcpOwlicmVhazsKKwkJCQljYXNlIDB4MGI3OiBtYXBfa2V5X2NsZWFyKEtFWV9TVE9QQ0QpOwkJYnJlYWs7CisJCQkJY2FzZSAweDBiODogbWFwX2tleV9jbGVhcihLRVlfRUpFQ1RDRCk7CQlicmVhazsKKwkJCQljYXNlIDB4MGNkOiBtYXBfa2V5X2NsZWFyKEtFWV9QTEFZUEFVU0UpOwlicmVhazsKKwkJCSAgICAgICAgY2FzZSAweDBlMDogbWFwX2Fic19jbGVhcihBQlNfVk9MVU1FKTsJCWJyZWFrOworCQkJCWNhc2UgMHgwZTI6IG1hcF9rZXlfY2xlYXIoS0VZX01VVEUpOwkJYnJlYWs7CisJCQkJY2FzZSAweDBlNTogbWFwX2tleV9jbGVhcihLRVlfQkFTU0JPT1NUKTsJYnJlYWs7CisJCQkJY2FzZSAweDBlOTogbWFwX2tleV9jbGVhcihLRVlfVk9MVU1FVVApOwlicmVhazsKKwkJCQljYXNlIDB4MGVhOiBtYXBfa2V5X2NsZWFyKEtFWV9WT0xVTUVET1dOKTsJYnJlYWs7CisJCQkJY2FzZSAweDE4MzogbWFwX2tleV9jbGVhcihLRVlfQ09ORklHKTsJCWJyZWFrOworCQkJCWNhc2UgMHgxOGE6IG1hcF9rZXlfY2xlYXIoS0VZX01BSUwpOwkJYnJlYWs7CisJCQkJY2FzZSAweDE5MjogbWFwX2tleV9jbGVhcihLRVlfQ0FMQyk7CQlicmVhazsKKwkJCQljYXNlIDB4MTk0OiBtYXBfa2V5X2NsZWFyKEtFWV9GSUxFKTsJCWJyZWFrOworCQkJCWNhc2UgMHgyMWE6IG1hcF9rZXlfY2xlYXIoS0VZX1VORE8pOwkJYnJlYWs7CisJCQkJY2FzZSAweDIxYjogbWFwX2tleV9jbGVhcihLRVlfQ09QWSk7CQlicmVhazsKKwkJCQljYXNlIDB4MjFjOiBtYXBfa2V5X2NsZWFyKEtFWV9DVVQpOwkJYnJlYWs7CisJCQkJY2FzZSAweDIxZDogbWFwX2tleV9jbGVhcihLRVlfUEFTVEUpOwkJYnJlYWs7CisJCQkJY2FzZSAweDIyMTogbWFwX2tleV9jbGVhcihLRVlfRklORCk7CQlicmVhazsKKwkJCQljYXNlIDB4MjIzOiBtYXBfa2V5X2NsZWFyKEtFWV9IT01FUEFHRSk7CWJyZWFrOworCQkJCWNhc2UgMHgyMjQ6IG1hcF9rZXlfY2xlYXIoS0VZX0JBQ0spOwkJYnJlYWs7CisJCQkJY2FzZSAweDIyNTogbWFwX2tleV9jbGVhcihLRVlfRk9SV0FSRCk7CQlicmVhazsKKwkJCQljYXNlIDB4MjI2OiBtYXBfa2V5X2NsZWFyKEtFWV9TVE9QKTsJCWJyZWFrOworCQkJCWNhc2UgMHgyMjc6IG1hcF9rZXlfY2xlYXIoS0VZX1JFRlJFU0gpOwkJYnJlYWs7CisJCQkJY2FzZSAweDIyYTogbWFwX2tleV9jbGVhcihLRVlfQk9PS01BUktTKTsJYnJlYWs7CisJCQkJY2FzZSAweDIzODogbWFwX3JlbChSRUxfSFdIRUVMKTsJCWJyZWFrOworCQkJCWRlZmF1bHQ6ICAgIGdvdG8gdW5rbm93bjsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgSElEX1VQX0hQVkVORE9SOgkvKiBSZXBvcnRlZCBvbiBhIER1dGNoIGxheW91dCBIUDUzMDggKi8KKworCQkJc2V0X2JpdChFVl9SRVAsIGlucHV0LT5ldmJpdCk7CisJCQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0UpIHsKKwkJCSAgICAgICAgY2FzZSAweDAyMTogbWFwX2tleV9jbGVhcihLRVlfUFJJTlQpOyAgICAgICAgICAgYnJlYWs7CisJCQkJY2FzZSAweDA3MDogbWFwX2tleV9jbGVhcihLRVlfSFApOwkJYnJlYWs7CisJCQkJY2FzZSAweDA3MTogbWFwX2tleV9jbGVhcihLRVlfQ0FNRVJBKTsJCWJyZWFrOworCQkJCWNhc2UgMHgwNzI6IG1hcF9rZXlfY2xlYXIoS0VZX1NPVU5EKTsJCWJyZWFrOworCQkJCWNhc2UgMHgwNzM6IG1hcF9rZXlfY2xlYXIoS0VZX1FVRVNUSU9OKTsJYnJlYWs7CisJCQkJY2FzZSAweDA4MDogbWFwX2tleV9jbGVhcihLRVlfRU1BSUwpOwkJYnJlYWs7CisJCQkJY2FzZSAweDA4MTogbWFwX2tleV9jbGVhcihLRVlfQ0hBVCk7CQlicmVhazsKKwkJCQljYXNlIDB4MDgyOiBtYXBfa2V5X2NsZWFyKEtFWV9TRUFSQ0gpOwkJYnJlYWs7CisJCQkJY2FzZSAweDA4MzogbWFwX2tleV9jbGVhcihLRVlfQ09OTkVDVCk7CSAgICAgICAgYnJlYWs7CisJCQkJY2FzZSAweDA4NDogbWFwX2tleV9jbGVhcihLRVlfRklOQU5DRSk7CQlicmVhazsKKwkJCQljYXNlIDB4MDg1OiBtYXBfa2V5X2NsZWFyKEtFWV9TUE9SVCk7CQlicmVhazsKKwkJCQljYXNlIDB4MDg2OiBtYXBfa2V5X2NsZWFyKEtFWV9TSE9QKTsJICAgICAgICBicmVhazsKKwkJCQlkZWZhdWx0OiAgICBnb3RvIGlnbm9yZTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgSElEX1VQX01TVkVORE9SOgorCisJCQlnb3RvIGlnbm9yZTsKKwkJCQorCQljYXNlIEhJRF9VUF9QSUQ6CisKKwkJCXNldF9iaXQoRVZfRkYsIGlucHV0LT5ldmJpdCk7CisJCQlzd2l0Y2godXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgeworCQkJCWNhc2UgMHgyNjogbWFwX2ZmX2VmZmVjdChGRl9DT05TVEFOVCk7CWdvdG8gaWdub3JlOworCQkJCWNhc2UgMHgyNzogbWFwX2ZmX2VmZmVjdChGRl9SQU1QKTsJZ290byBpZ25vcmU7CisJCQkJY2FzZSAweDI4OiBtYXBfZmZfZWZmZWN0KEZGX0NVU1RPTSk7CWdvdG8gaWdub3JlOworCQkJCWNhc2UgMHgzMDogbWFwX2ZmX2VmZmVjdChGRl9TUVVBUkUpOwltYXBfZmZfZWZmZWN0KEZGX1BFUklPRElDKTsgZ290byBpZ25vcmU7CisJCQkJY2FzZSAweDMxOiBtYXBfZmZfZWZmZWN0KEZGX1NJTkUpOwltYXBfZmZfZWZmZWN0KEZGX1BFUklPRElDKTsgZ290byBpZ25vcmU7CisJCQkJY2FzZSAweDMyOiBtYXBfZmZfZWZmZWN0KEZGX1RSSUFOR0xFKTsJbWFwX2ZmX2VmZmVjdChGRl9QRVJJT0RJQyk7IGdvdG8gaWdub3JlOworCQkJCWNhc2UgMHgzMzogbWFwX2ZmX2VmZmVjdChGRl9TQVdfVVApOwltYXBfZmZfZWZmZWN0KEZGX1BFUklPRElDKTsgZ290byBpZ25vcmU7CisJCQkJY2FzZSAweDM0OiBtYXBfZmZfZWZmZWN0KEZGX1NBV19ET1dOKTsJbWFwX2ZmX2VmZmVjdChGRl9QRVJJT0RJQyk7IGdvdG8gaWdub3JlOworCQkJCWNhc2UgMHg0MDogbWFwX2ZmX2VmZmVjdChGRl9TUFJJTkcpOwlnb3RvIGlnbm9yZTsKKwkJCQljYXNlIDB4NDE6IG1hcF9mZl9lZmZlY3QoRkZfREFNUEVSKTsJZ290byBpZ25vcmU7CisJCQkJY2FzZSAweDQyOiBtYXBfZmZfZWZmZWN0KEZGX0lORVJUSUEpOwlnb3RvIGlnbm9yZTsKKwkJCQljYXNlIDB4NDM6IG1hcF9mZl9lZmZlY3QoRkZfRlJJQ1RJT04pOwlnb3RvIGlnbm9yZTsKKwkJCQljYXNlIDB4N2U6IG1hcF9mZihGRl9HQUlOKTsJCWJyZWFrOworCQkJCWNhc2UgMHg4MzogaW5wdXQtPmZmX2VmZmVjdHNfbWF4ID0gZmllbGQtPnZhbHVlWzBdOyBnb3RvIGlnbm9yZTsKKwkJCQljYXNlIDB4OTg6IG1hcF9mZihGRl9BVVRPQ0VOVEVSKTsJYnJlYWs7CisJCQkJY2FzZSAweGE0OiBtYXBfa2V5X2NsZWFyKEJUTl9ERUFEKTsJYnJlYWs7CisJCQkJZGVmYXVsdDogZ290byBpZ25vcmU7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQl1bmtub3duOgorCQkJaWYgKGZpZWxkLT5yZXBvcnRfc2l6ZSA9PSAxKSB7CisJCQkJaWYgKGZpZWxkLT5yZXBvcnQtPnR5cGUgPT0gSElEX09VVFBVVF9SRVBPUlQpIHsKKwkJCQkJbWFwX2xlZChMRURfTUlTQyk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQltYXBfa2V5KEJUTl9NSVNDKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChmaWVsZC0+ZmxhZ3MgJiBISURfTUFJTl9JVEVNX1JFTEFUSVZFKSB7CisJCQkJbWFwX3JlbChSRUxfTUlTQyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQltYXBfYWJzKEFCU19NSVNDKTsKKwkJCWJyZWFrOworCX0KKworCXNldF9iaXQodXNhZ2UtPnR5cGUsIGlucHV0LT5ldmJpdCk7CisKKwl3aGlsZSAodXNhZ2UtPmNvZGUgPD0gbWF4ICYmIHRlc3RfYW5kX3NldF9iaXQodXNhZ2UtPmNvZGUsIGJpdCkpCisJCXVzYWdlLT5jb2RlID0gZmluZF9uZXh0X3plcm9fYml0KGJpdCwgbWF4ICsgMSwgdXNhZ2UtPmNvZGUpOworCisJaWYgKHVzYWdlLT5jb2RlID4gbWF4KQorCQlnb3RvIGlnbm9yZTsKKworCWlmICgoZGV2aWNlLT5xdWlya3MgJiAoSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLXzcgfCBISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfNSkpICYmCisJCSAodXNhZ2UtPnR5cGUgPT0gRVZfUkVMKSAmJiAodXNhZ2UtPmNvZGUgPT0gUkVMX1dIRUVMKSkgCisJCQlzZXRfYml0KFJFTF9IV0hFRUwsIGJpdCk7CisKKwlpZiAoKChkZXZpY2UtPnF1aXJrcyAmIEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS181KSAmJiAodXNhZ2UtPmhpZCA9PSAweDAwMDkwMDA1KSkKKwkJfHwgKChkZXZpY2UtPnF1aXJrcyAmIEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS183KSAmJiAodXNhZ2UtPmhpZCA9PSAweDAwMDkwMDA3KSkpCisJCWdvdG8gaWdub3JlOworCisJaWYgKHVzYWdlLT50eXBlID09IEVWX0FCUykgeworCisJCWludCBhID0gZmllbGQtPmxvZ2ljYWxfbWluaW11bTsKKwkJaW50IGIgPSBmaWVsZC0+bG9naWNhbF9tYXhpbXVtOworCisJCWlmICgoZGV2aWNlLT5xdWlya3MgJiBISURfUVVJUktfQkFEUEFEKSAmJiAodXNhZ2UtPmNvZGUgPT0gQUJTX1ggfHwgdXNhZ2UtPmNvZGUgPT0gQUJTX1kpKSB7CisJCQlhID0gZmllbGQtPmxvZ2ljYWxfbWluaW11bSA9IDA7CisJCQliID0gZmllbGQtPmxvZ2ljYWxfbWF4aW11bSA9IDI1NTsKKwkJfQorCQkKKwkJaWYgKGZpZWxkLT5hcHBsaWNhdGlvbiA9PSBISURfR0RfR0FNRVBBRCB8fCBmaWVsZC0+YXBwbGljYXRpb24gPT0gSElEX0dEX0pPWVNUSUNLKQorCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIHVzYWdlLT5jb2RlLCBhLCBiLCAoYiAtIGEpID4+IDgsIChiIC0gYSkgPj4gNCk7CisJCWVsc2UJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIHVzYWdlLT5jb2RlLCBhLCBiLCAwLCAwKTsKKwkJCisJfQorCisJaWYgKHVzYWdlLT5oYXRfbWluIDwgdXNhZ2UtPmhhdF9tYXggfHwgdXNhZ2UtPmhhdF9kaXIpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IHVzYWdlLT5jb2RlOyBpIDwgdXNhZ2UtPmNvZGUgKyAyICYmIGkgPD0gbWF4OyBpKyspIHsKKwkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBpLCAtMSwgMSwgMCwgMCk7CisJCQlzZXRfYml0KGksIGlucHV0LT5hYnNiaXQpOworCQl9CisJCWlmICh1c2FnZS0+aGF0X2RpciAmJiAhZmllbGQtPmRwYWQpCisJCQlmaWVsZC0+ZHBhZCA9IHVzYWdlLT5jb2RlOworCX0KKworI2lmZGVmIERFQlVHCisJcmVzb2x2X2V2ZW50KHVzYWdlLT50eXBlLCB1c2FnZS0+Y29kZSk7CisJcHJpbnRrKCJcbiIpOworI2VuZGlmCisJcmV0dXJuOworCitpZ25vcmU6CisjaWZkZWYgREVCVUcKKwlwcmludGsoIklHTk9SRURcbiIpOworI2VuZGlmCisJcmV0dXJuOworfQorCit2b2lkIGhpZGlucHV0X2hpZF9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9ICZmaWVsZC0+aGlkaW5wdXQtPmlucHV0OworCWludCAqcXVpcmtzID0gJmhpZC0+cXVpcmtzOworCisJaWYgKCFpbnB1dCkKKwkJcmV0dXJuOworCisJaW5wdXRfcmVncyhpbnB1dCwgcmVncyk7CisKKwlpZiAoIXVzYWdlLT50eXBlKQorCQlyZXR1cm47CisKKwlpZiAoKChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS181KSAmJiAodXNhZ2UtPmhpZCA9PSAweDAwMDkwMDA1KSkKKwkJfHwgKChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS183KSAmJiAodXNhZ2UtPmhpZCA9PSAweDAwMDkwMDA3KSkpIHsKKwkJaWYgKHZhbHVlKSBoaWQtPnF1aXJrcyB8PSAgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLX09OOworCQllbHNlICAgICAgIGhpZC0+cXVpcmtzICY9IH5ISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfT047CisJCXJldHVybjsKKwl9CisKKwlpZiAoKGhpZC0+cXVpcmtzICYgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLX09OKSAmJiAodXNhZ2UtPmNvZGUgPT0gUkVMX1dIRUVMKSkgeworCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIFJFTF9IV0hFRUwsIHZhbHVlKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1c2FnZS0+aGF0X21pbiA8IHVzYWdlLT5oYXRfbWF4IHx8IHVzYWdlLT5oYXRfZGlyKSB7IAorCQlpbnQgaGF0X2RpciA9IHVzYWdlLT5oYXRfZGlyOworCQlpZiAoIWhhdF9kaXIpCisJCQloYXRfZGlyID0gKHZhbHVlIC0gdXNhZ2UtPmhhdF9taW4pICogOCAvICh1c2FnZS0+aGF0X21heCAtIHVzYWdlLT5oYXRfbWluICsgMSkgKyAxOworCQlpZiAoaGF0X2RpciA8IDAgfHwgaGF0X2RpciA+IDgpIGhhdF9kaXIgPSAwOworCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIHVzYWdlLT5jb2RlICAgICwgaGlkX2hhdF90b19heGlzW2hhdF9kaXJdLngpOworICAgICAgICAgICAgICAgIGlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdXNhZ2UtPmNvZGUgKyAxLCBoaWRfaGF0X3RvX2F4aXNbaGF0X2Rpcl0ueSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKwlpZiAodXNhZ2UtPmhpZCA9PSAoSElEX1VQX0RJR0lUSVpFUiB8IDB4MDAzYykpIHsgLyogSW52ZXJ0ICovCisJCSpxdWlya3MgPSB2YWx1ZSA/ICgqcXVpcmtzIHwgSElEX1FVSVJLX0lOVkVSVCkgOiAoKnF1aXJrcyAmIH5ISURfUVVJUktfSU5WRVJUKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1c2FnZS0+aGlkID09IChISURfVVBfRElHSVRJWkVSIHwgMHgwMDMyKSkgeyAvKiBJblJhbmdlICovCisJCWlmICh2YWx1ZSkgeworCQkJaW5wdXRfZXZlbnQoaW5wdXQsIHVzYWdlLT50eXBlLCAoKnF1aXJrcyAmIEhJRF9RVUlSS19JTlZFUlQpID8gQlROX1RPT0xfUlVCQkVSIDogdXNhZ2UtPmNvZGUsIDEpOworCQkJcmV0dXJuOworCQl9CisJCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdXNhZ2UtPmNvZGUsIDApOworCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIEJUTl9UT09MX1JVQkJFUiwgMCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAodXNhZ2UtPmhpZCA9PSAoSElEX1VQX0RJR0lUSVpFUiB8IDB4MDAzMCkgJiYgKCpxdWlya3MgJiBISURfUVVJUktfTk9UT1VDSCkpIHsgLyogUHJlc3N1cmUgKi8KKwkJaW50IGEgPSBmaWVsZC0+bG9naWNhbF9taW5pbXVtOworCQlpbnQgYiA9IGZpZWxkLT5sb2dpY2FsX21heGltdW07CisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9LRVksIEJUTl9UT1VDSCwgdmFsdWUgPiBhICsgKChiIC0gYSkgPj4gMykpOworCX0KKworCWlmICh1c2FnZS0+aGlkID09IChISURfVVBfUElEIHwgMHg4M1VMKSkgeyAvKiBTaW11bHRhbmVvdXMgRWZmZWN0cyBNYXggKi8KKwkJaW5wdXQtPmZmX2VmZmVjdHNfbWF4ID0gdmFsdWU7CisJCWRiZygiTWF4aW11bSBFZmZlY3RzIC0gJWQiLGlucHV0LT5mZl9lZmZlY3RzX21heCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAodXNhZ2UtPmhpZCA9PSAoSElEX1VQX1BJRCB8IDB4N2ZVTCkpIHsKKwkJZGJnKCJQSUQgUG9vbCBSZXBvcnRcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYoKHVzYWdlLT50eXBlID09IEVWX0tFWSkgJiYgKHVzYWdlLT5jb2RlID09IDApKSAvKiBLZXkgMCBpcyAidW5hc3NpZ25lZCIsIG5vdCBLRVlfVU5LTk9XTiAqLworCQlyZXR1cm47CisKKwlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIHVzYWdlLT5jb2RlLCB2YWx1ZSk7CisKKwlpZiAoKGZpZWxkLT5mbGFncyAmIEhJRF9NQUlOX0lURU1fUkVMQVRJVkUpICYmICh1c2FnZS0+dHlwZSA9PSBFVl9LRVkpKQorCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIHVzYWdlLT5jb2RlLCAwKTsKK30KKwordm9pZCBoaWRpbnB1dF9yZXBvcnRfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaDsKKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dDsKKworCWxpc3RfZm9yX2VhY2ggKGxoLCAmaGlkLT5pbnB1dHMpIHsKKwkJaGlkaW5wdXQgPSBsaXN0X2VudHJ5KGxoLCBzdHJ1Y3QgaGlkX2lucHV0LCBsaXN0KTsKKwkJaW5wdXRfc3luYygmaGlkaW5wdXQtPmlucHV0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaGlkaW5wdXRfZmluZF9maWVsZChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIHN0cnVjdCBoaWRfZmllbGQgKipmaWVsZCkKK3sKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCWludCBpLCBqOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXBvcnQsICZoaWQtPnJlcG9ydF9lbnVtW0hJRF9PVVRQVVRfUkVQT1JUXS5yZXBvcnRfbGlzdCwgbGlzdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgcmVwb3J0LT5tYXhmaWVsZDsgaSsrKSB7CisJCQkqZmllbGQgPSByZXBvcnQtPmZpZWxkW2ldOworCQkJZm9yIChqID0gMDsgaiA8ICgqZmllbGQpLT5tYXh1c2FnZTsgaisrKQorCQkJCWlmICgoKmZpZWxkKS0+dXNhZ2Vbal0udHlwZSA9PSB0eXBlICYmICgqZmllbGQpLT51c2FnZVtqXS5jb2RlID09IGNvZGUpCisJCQkJCXJldHVybiBqOworCQl9CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBoaWRpbnB1dF9pbnB1dF9ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IGhpZF9maWVsZCAqZmllbGQ7CisJaW50IG9mZnNldDsKKworCWlmICh0eXBlID09IEVWX0ZGKQorCQlyZXR1cm4gaGlkX2ZmX2V2ZW50KGhpZCwgZGV2LCB0eXBlLCBjb2RlLCB2YWx1ZSk7CisKKwlpZiAodHlwZSAhPSBFVl9MRUQpCisJCXJldHVybiAtMTsKKworCWlmICgob2Zmc2V0ID0gaGlkaW5wdXRfZmluZF9maWVsZChoaWQsIHR5cGUsIGNvZGUsICZmaWVsZCkpID09IC0xKSB7CisJCXdhcm4oImV2ZW50IGZpZWxkIG5vdCBmb3VuZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaGlkX3NldF9maWVsZChmaWVsZCwgb2Zmc2V0LCB2YWx1ZSk7CisJaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCBmaWVsZC0+cmVwb3J0LCBVU0JfRElSX09VVCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoaWRpbnB1dF9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gZGV2LT5wcml2YXRlOworCXJldHVybiBoaWRfb3BlbihoaWQpOworfQorCitzdGF0aWMgdm9pZCBoaWRpbnB1dF9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGRldi0+cHJpdmF0ZTsKKwloaWRfY2xvc2UoaGlkKTsKK30KKworLyoKKyAqIFJlZ2lzdGVyIHRoZSBpbnB1dCBkZXZpY2U7IHByaW50IGEgbWVzc2FnZS4KKyAqIENvbmZpZ3VyZSB0aGUgaW5wdXQgbGF5ZXIgaW50ZXJmYWNlCisgKiBSZWFkIGFsbCByZXBvcnRzIGFuZCBpbml0aWFsaXplIHRoZSBhYnNvbHV0ZSBmaWVsZCB2YWx1ZXMuCisgKi8KKworaW50IGhpZGlucHV0X2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaGlkLT5kZXY7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9IE5VTEw7CisJaW50IGksIGosIGs7CisKKwlJTklUX0xJU1RfSEVBRCgmaGlkLT5pbnB1dHMpOworCisJZm9yIChpID0gMDsgaSA8IGhpZC0+bWF4Y29sbGVjdGlvbjsgaSsrKQorCQlpZiAoaGlkLT5jb2xsZWN0aW9uW2ldLnR5cGUgPT0gSElEX0NPTExFQ1RJT05fQVBQTElDQVRJT04gfHwKKwkJICAgIGhpZC0+Y29sbGVjdGlvbltpXS50eXBlID09IEhJRF9DT0xMRUNUSU9OX1BIWVNJQ0FMKQorCQkgICAgCWlmIChJU19JTlBVVF9BUFBMSUNBVElPTihoaWQtPmNvbGxlY3Rpb25baV0udXNhZ2UpKQorCQkJCWJyZWFrOworCisJaWYgKGkgPT0gaGlkLT5tYXhjb2xsZWN0aW9uKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKGsgPSBISURfSU5QVVRfUkVQT1JUOyBrIDw9IEhJRF9PVVRQVVRfUkVQT1JUOyBrKyspCisJCWxpc3RfZm9yX2VhY2hfZW50cnkocmVwb3J0LCAmaGlkLT5yZXBvcnRfZW51bVtrXS5yZXBvcnRfbGlzdCwgbGlzdCkgeworCisJCQlpZiAoIXJlcG9ydC0+bWF4ZmllbGQpCisJCQkJY29udGludWU7CisKKwkJCWlmICghaGlkaW5wdXQpIHsKKwkJCQloaWRpbnB1dCA9IGttYWxsb2Moc2l6ZW9mKCpoaWRpbnB1dCksIEdGUF9LRVJORUwpOworCQkJCWlmICghaGlkaW5wdXQpIHsKKwkJCQkJZXJyKCJPdXQgb2YgbWVtb3J5IGR1cmluZyBoaWQgaW5wdXQgcHJvYmUiKTsKKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KKwkJCQltZW1zZXQoaGlkaW5wdXQsIDAsIHNpemVvZigqaGlkaW5wdXQpKTsKKworCQkJCWxpc3RfYWRkX3RhaWwoJmhpZGlucHV0LT5saXN0LCAmaGlkLT5pbnB1dHMpOworCisJCQkJaGlkaW5wdXQtPmlucHV0LnByaXZhdGUgPSBoaWQ7CisJCQkJaGlkaW5wdXQtPmlucHV0LmV2ZW50ID0gaGlkaW5wdXRfaW5wdXRfZXZlbnQ7CisJCQkJaGlkaW5wdXQtPmlucHV0Lm9wZW4gPSBoaWRpbnB1dF9vcGVuOworCQkJCWhpZGlucHV0LT5pbnB1dC5jbG9zZSA9IGhpZGlucHV0X2Nsb3NlOworCisJCQkJaGlkaW5wdXQtPmlucHV0Lm5hbWUgPSBoaWQtPm5hbWU7CisJCQkJaGlkaW5wdXQtPmlucHV0LnBoeXMgPSBoaWQtPnBoeXM7CisJCQkJaGlkaW5wdXQtPmlucHV0LnVuaXEgPSBoaWQtPnVuaXE7CisJCQkJaGlkaW5wdXQtPmlucHV0LmlkLmJ1c3R5cGUgPSBCVVNfVVNCOworCQkJCWhpZGlucHV0LT5pbnB1dC5pZC52ZW5kb3IgPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOworCQkJCWhpZGlucHV0LT5pbnB1dC5pZC5wcm9kdWN0ID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJCQkJaGlkaW5wdXQtPmlucHV0LmlkLnZlcnNpb24gPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKKwkJCQloaWRpbnB1dC0+aW5wdXQuZGV2ID0gJmhpZC0+aW50Zi0+ZGV2OworCQkJfQorCisJCQlmb3IgKGkgPSAwOyBpIDwgcmVwb3J0LT5tYXhmaWVsZDsgaSsrKQorCQkJCWZvciAoaiA9IDA7IGogPCByZXBvcnQtPmZpZWxkW2ldLT5tYXh1c2FnZTsgaisrKQorCQkJCQloaWRpbnB1dF9jb25maWd1cmVfdXNhZ2UoaGlkaW5wdXQsIHJlcG9ydC0+ZmllbGRbaV0sCisJCQkJCQkJCSByZXBvcnQtPmZpZWxkW2ldLT51c2FnZSArIGopOworCQkJCisJCQlpZiAoaGlkLT5xdWlya3MgJiBISURfUVVJUktfTVVMVElfSU5QVVQpIHsKKwkJCQkvKiBUaGlzIHdpbGwgbGVhdmUgaGlkaW5wdXQgTlVMTCwgc28gdGhhdCBpdAorCQkJCSAqIGFsbG9jYXRlcyBhbm90aGVyIG9uZSBpZiB3ZSBoYXZlIG1vcmUgaW5wdXRzIG9uCisJCQkJICogdGhlIHNhbWUgaW50ZXJmYWNlLiBTb21lIGRldmljZXMgKGUuZy4gSGFwcCdzCisJCQkJICogVUdDSSkgY3JhbSBhIGxvdCBvZiB1bnJlbGF0ZWQgaW5wdXRzIGludG8gdGhlCisJCQkJICogc2FtZSBpbnRlcmZhY2UuICovCisJCQkJaGlkaW5wdXQtPnJlcG9ydCA9IHJlcG9ydDsKKwkJCQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoJmhpZGlucHV0LT5pbnB1dCk7CisJCQkJaGlkaW5wdXQgPSBOVUxMOworCQkJfQorCQl9CisKKwkvKiBUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgd2hlbiB3ZSBhcmUgYSBzaW5nbGUtaW5wdXQgKG1vc3Qgb2YgdGhlCisJICogdGltZSkuIElPVywgbm90IGEgSElEX1FVSVJLX01VTFRJX0lOUFVULiBUaGUgaGlkX2ZmX2luaXQoKSBpcworCSAqIG9ubHkgdXNlZnVsIGluIHRoaXMgY2FzZSwgYW5kIG5vdCBmb3IgbXVsdGktaW5wdXQgcXVpcmtzLiAqLworCWlmIChoaWRpbnB1dCkgeworCQloaWRfZmZfaW5pdChoaWQpOworCQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoJmhpZGlucHV0LT5pbnB1dCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaGlkaW5wdXRfZGlzY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxoLCAqbmV4dDsKKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dDsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShsaCwgbmV4dCwgJmhpZC0+aW5wdXRzKSB7CisJCWhpZGlucHV0ID0gbGlzdF9lbnRyeShsaCwgc3RydWN0IGhpZF9pbnB1dCwgbGlzdCk7CisJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKCZoaWRpbnB1dC0+aW5wdXQpOworCQlsaXN0X2RlbCgmaGlkaW5wdXQtPmxpc3QpOworCQlrZnJlZShoaWRpbnB1dCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWxnZmYuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1sZ2ZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ3NDA0YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1sZ2ZmLmMKQEAgLTAsMCArMSw1MjggQEAKKy8qCisgKiAkJAorICoKKyAqIEZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIGhpZC1jb21wbGlhbnQgZm9yIHNvbWUgb2YgdGhlIGRldmljZXMgZnJvbQorICogTG9naXRlY2gsIG5hbWVseToKKyAqIC0gV2luZ01hbiBDb3JkbGVzcyBSdW1ibGVQYWQKKyAqIC0gV2luZ01hbiBGb3JjZSAzRAorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCBKb2hhbm4gRGVuZXV4CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogU2hvdWxkIHlvdSBuZWVkIHRvIGNvbnRhY3QgbWUsIHRoZSBhdXRob3IsIHlvdSBjYW4gZG8gc28gYnkKKyAqIGUtbWFpbCAtIG1haWwgeW91ciBtZXNzYWdlIHRvIDxqb2hhbm4uZGVuZXV4QGl0LnV1LnNlPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKy8vI2RlZmluZSBERUJVRworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSA8bGludXgvY2lyY19idWYuaD4KKworI2luY2x1ZGUgImhpZC5oIgorI2luY2x1ZGUgImZpeHAtYXJpdGguaCIKKworCisvKiBQZXJpb2RpY2l0eSBvZiB0aGUgdXBkYXRlICovCisjZGVmaW5lIFBFUklPRCAoSFovMTApCisKKyNkZWZpbmUgUlVOX0FUKHQpIChqaWZmaWVzICsgKHQpKQorCisvKiBFZmZlY3Qgc3RhdHVzICovCisjZGVmaW5lIEVGRkVDVF9TVEFSVEVEIDAgICAgIC8qIEVmZmVjdCBpcyBnb2luZyB0byBwbGF5IGFmdGVyIHNvbWUgdGltZQorCQkJCShmZl9yZXBsYXkuZGVsYXkpICovCisjZGVmaW5lIEVGRkVDVF9QTEFZSU5HIDEgICAgIC8qIEVmZmVjdCBpcyBiZWluZyBwbGF5ZWQgKi8KKyNkZWZpbmUgRUZGRUNUX1VTRUQgICAgMgorCisvLyBGb3IgbGdmZl9kZXZpY2U6OmZsYWdzCisjZGVmaW5lIERFVklDRV9DTE9TSU5HIDAgICAgIC8qIFRoZSBkcml2ZXIgaXMgYmVpbmcgdW5pdGlhbGlzZWQgKi8KKworLyogQ2hlY2sgdGhhdCB0aGUgY3VycmVudCBwcm9jZXNzIGNhbiBhY2Nlc3MgYW4gZWZmZWN0ICovCisjZGVmaW5lIENIRUNLX09XTkVSU0hJUChlZmZlY3QpIChjdXJyZW50LT5waWQgPT0gMCBcCisgICAgICAgIHx8IGVmZmVjdC5vd25lciA9PSBjdXJyZW50LT5waWQpCisKKyNkZWZpbmUgTEdGRl9DSEVDS19PV05FUlNISVAoaSwgbCkgXAorICAgICAgICAoaT49MCAmJiBpPExHRkZfRUZGRUNUUyBcCisgICAgICAgICYmIHRlc3RfYml0KEVGRkVDVF9VU0VELCBsLT5lZmZlY3RzW2ldLmZsYWdzKSBcCisgICAgICAgICYmIENIRUNLX09XTkVSU0hJUChsLT5lZmZlY3RzW2ldKSkKKworI2RlZmluZSBMR0ZGX0VGRkVDVFMgOAorCitzdHJ1Y3QgZGV2aWNlX3R5cGUgeworCXUxNiBpZFZlbmRvcjsKKwl1MTYgaWRQcm9kdWN0OworCXNpZ25lZCBzaG9ydCAqZmY7Cit9OworCitzdHJ1Y3QgbGdmZl9lZmZlY3QgeworCXBpZF90IG93bmVyOworCisJc3RydWN0IGZmX2VmZmVjdCBlZmZlY3Q7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzWzFdOworCXVuc2lnbmVkIGludCBjb3VudDsgICAgICAgICAgLyogTnVtYmVyIG9mIHRpbWVzIGxlZnQgdG8gcGxheSAqLworCXVuc2lnbmVkIGxvbmcgc3RhcnRlZF9hdDsgICAgLyogV2hlbiB0aGUgZWZmZWN0IHN0YXJ0ZWQgdG8gcGxheSAqLworfTsKKworc3RydWN0IGxnZmZfZGV2aWNlIHsKKwlzdHJ1Y3QgaGlkX2RldmljZSogaGlkOworCisJc3RydWN0IGhpZF9yZXBvcnQqIGNvbnN0YW50OworCXN0cnVjdCBoaWRfcmVwb3J0KiBydW1ibGU7CisJc3RydWN0IGhpZF9yZXBvcnQqIGNvbmRpdGlvbjsKKworCXN0cnVjdCBsZ2ZmX2VmZmVjdCBlZmZlY3RzW0xHRkZfRUZGRUNUU107CisJc3BpbmxvY2tfdCBsb2NrOyAgICAgICAgICAgICAvKiBkZXZpY2UtbGV2ZWwgbG9jay4gSGF2aW5nIGxvY2tzIG9uCisJCQkJCWEgcGVyLWVmZmVjdCBiYXNpcyBjb3VsZCBiZSBuaWNlLCBidXQKKwkJCQkJaXNuJ3QgcmVhbGx5IG5lY2Vzc2FyeSAqLworCisJdW5zaWduZWQgbG9uZyBmbGFnc1sxXTsgICAgICAvKiBDb250YWlucyB2YXJpb3VzIGluZm9ybWF0aW9uIGFib3V0IHRoZQorCQkJCSAgICAgICAgc3RhdGUgb2YgdGhlIGRyaXZlciBmb3IgdGhpcyBkZXZpY2UgKi8JCisKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKK307CisKKy8qIENhbGxiYWNrcyAqLworc3RhdGljIHZvaWQgaGlkX2xnZmZfZXhpdChzdHJ1Y3QgaGlkX2RldmljZSogaGlkKTsKK3N0YXRpYyBpbnQgaGlkX2xnZmZfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCisJCQkgIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKTsKK3N0YXRpYyBpbnQgaGlkX2xnZmZfZmx1c2goc3RydWN0IGlucHV0X2RldiAqaW5wdXQsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgaGlkX2xnZmZfdXBsb2FkX2VmZmVjdChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKKwkJCQkgIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCk7CitzdGF0aWMgaW50IGhpZF9sZ2ZmX2VyYXNlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LCBpbnQgaWQpOworCisvKiBMb2NhbCBmdW5jdGlvbnMgKi8KK3N0YXRpYyB2b2lkIGhpZF9sZ2ZmX2lucHV0X2luaXQoc3RydWN0IGhpZF9kZXZpY2UqIGhpZCk7CitzdGF0aWMgdm9pZCBoaWRfbGdmZl90aW1lcih1bnNpZ25lZCBsb25nIHRpbWVyX2RhdGEpOworc3RhdGljIHN0cnVjdCBoaWRfcmVwb3J0KiBoaWRfbGdmZl9kdXBsaWNhdGVfcmVwb3J0KHN0cnVjdCBoaWRfcmVwb3J0Kik7CitzdGF0aWMgdm9pZCBoaWRfbGdmZl9kZWxldGVfcmVwb3J0KHN0cnVjdCBoaWRfcmVwb3J0Kik7CisKK3N0YXRpYyBzaWduZWQgc2hvcnQgZmZfcnVtYmxlW10gPSB7CisJRkZfUlVNQkxFLAorCS0xCit9OworCitzdGF0aWMgc2lnbmVkIHNob3J0IGZmX2pveXN0aWNrW10gPSB7CisJRkZfQ09OU1RBTlQsCisJLTEKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX3R5cGUgZGV2aWNlc1tdID0geworCXsweDA0NmQsIDB4YzIxMSwgZmZfcnVtYmxlfSwKKwl7MHgwNDZkLCAweGMyMTksIGZmX3J1bWJsZX0sCisJezB4MDQ2ZCwgMHhjMjgzLCBmZl9qb3lzdGlja30sCisJezB4MDAwMCwgMHgwMDAwLCBmZl9qb3lzdGlja30KK307CisKK2ludCBoaWRfbGdmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpCit7CisJc3RydWN0IGxnZmZfZGV2aWNlICpwcml2YXRlOworCXN0cnVjdCBoaWRfcmVwb3J0KiByZXBvcnQ7CisJc3RydWN0IGhpZF9maWVsZCogZmllbGQ7CisKKwkvKiBGaW5kIHRoZSByZXBvcnQgdG8gdXNlICovCisJaWYgKGxpc3RfZW1wdHkoJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0KSkgeworCQllcnIoIk5vIG91dHB1dCByZXBvcnQgZm91bmQiKTsKKwkJcmV0dXJuIC0xOworCX0KKwkvKiBDaGVjayB0aGF0IHRoZSByZXBvcnQgbG9va3Mgb2sgKi8KKwlyZXBvcnQgPSAoc3RydWN0IGhpZF9yZXBvcnQqKWhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0Lm5leHQ7CisJaWYgKCFyZXBvcnQpIHsKKwkJZXJyKCJOVUxMIG91dHB1dCByZXBvcnQiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlmaWVsZCA9IHJlcG9ydC0+ZmllbGRbMF07CisJaWYgKCFmaWVsZCkgeworCQllcnIoIk5VTEwgZmllbGQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXByaXZhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGdmZl9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXZhdGUpCisJCXJldHVybiAtMTsKKwltZW1zZXQocHJpdmF0ZSwgMCwgc2l6ZW9mKHN0cnVjdCBsZ2ZmX2RldmljZSkpOworCWhpZC0+ZmZfcHJpdmF0ZSA9IHByaXZhdGU7CisKKwkvKiBJbnB1dCBpbml0ICovCisJaGlkX2xnZmZfaW5wdXRfaW5pdChoaWQpOworCisKKwlwcml2YXRlLT5jb25zdGFudCA9IGhpZF9sZ2ZmX2R1cGxpY2F0ZV9yZXBvcnQocmVwb3J0KTsKKwlpZiAoIXByaXZhdGUtPmNvbnN0YW50KSB7CisJCWtmcmVlKHByaXZhdGUpOworCQlyZXR1cm4gLTE7CisJfQorCXByaXZhdGUtPmNvbnN0YW50LT5maWVsZFswXS0+dmFsdWVbMF0gPSAweDUxOworCXByaXZhdGUtPmNvbnN0YW50LT5maWVsZFswXS0+dmFsdWVbMV0gPSAweDA4OworCXByaXZhdGUtPmNvbnN0YW50LT5maWVsZFswXS0+dmFsdWVbMl0gPSAweDdmOworCXByaXZhdGUtPmNvbnN0YW50LT5maWVsZFswXS0+dmFsdWVbM10gPSAweDdmOworCisJcHJpdmF0ZS0+cnVtYmxlID0gaGlkX2xnZmZfZHVwbGljYXRlX3JlcG9ydChyZXBvcnQpOworCWlmICghcHJpdmF0ZS0+cnVtYmxlKSB7CisJCWhpZF9sZ2ZmX2RlbGV0ZV9yZXBvcnQocHJpdmF0ZS0+Y29uc3RhbnQpOworCQlrZnJlZShwcml2YXRlKTsKKwkJcmV0dXJuIC0xOworCX0KKwlwcml2YXRlLT5ydW1ibGUtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4NDI7CisKKworCXByaXZhdGUtPmNvbmRpdGlvbiA9IGhpZF9sZ2ZmX2R1cGxpY2F0ZV9yZXBvcnQocmVwb3J0KTsKKwlpZiAoIXByaXZhdGUtPmNvbmRpdGlvbikgeworCQloaWRfbGdmZl9kZWxldGVfcmVwb3J0KHByaXZhdGUtPnJ1bWJsZSk7CisJCWhpZF9sZ2ZmX2RlbGV0ZV9yZXBvcnQocHJpdmF0ZS0+Y29uc3RhbnQpOworCQlrZnJlZShwcml2YXRlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXByaXZhdGUtPmhpZCA9IGhpZDsKKworCXNwaW5fbG9ja19pbml0KCZwcml2YXRlLT5sb2NrKTsKKwlpbml0X3RpbWVyKCZwcml2YXRlLT50aW1lcik7CisJcHJpdmF0ZS0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXByaXZhdGU7CisJcHJpdmF0ZS0+dGltZXIuZnVuY3Rpb24gPSBoaWRfbGdmZl90aW1lcjsKKworCS8qIEV2ZW50IGFuZCBleGl0IGNhbGxiYWNrcyAqLworCWhpZC0+ZmZfZXhpdCA9IGhpZF9sZ2ZmX2V4aXQ7CisJaGlkLT5mZl9ldmVudCA9IGhpZF9sZ2ZmX2V2ZW50OworCisJLyogU3RhcnQgdGhlIHVwZGF0ZSB0YXNrICovCisJcHJpdmF0ZS0+dGltZXIuZXhwaXJlcyA9IFJVTl9BVChQRVJJT0QpOworCWFkZF90aW1lcigmcHJpdmF0ZS0+dGltZXIpOyAgLypUT0RPOiBvbmx5IHJ1biB0aGUgdGltZXIgd2hlbiBhdCBsZWFzdAorCQkJCSAgICAgICBvbmUgZWZmZWN0IGlzIHBsYXlpbmcgKi8KKworCXByaW50ayhLRVJOX0lORk8gIkZvcmNlIGZlZWRiYWNrIGZvciBMb2dpdGVjaCBmb3JjZSBmZWVkYmFjayBkZXZpY2VzIGJ5IEpvaGFubiBEZW5ldXggPGpvaGFubi5kZW5ldXhAaXQudXUuc2U+XG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGhpZF9yZXBvcnQqIGhpZF9sZ2ZmX2R1cGxpY2F0ZV9yZXBvcnQoc3RydWN0IGhpZF9yZXBvcnQqIHJlcG9ydCkKK3sKKwlzdHJ1Y3QgaGlkX3JlcG9ydCogcmV0OworCisJcmV0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxnZmZfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXQpCisJCXJldHVybiBOVUxMOworCSpyZXQgPSAqcmVwb3J0OworCisJcmV0LT5maWVsZFswXSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfZmllbGQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJldC0+ZmllbGRbMF0pIHsKKwkJa2ZyZWUocmV0KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCSpyZXQtPmZpZWxkWzBdID0gKnJlcG9ydC0+ZmllbGRbMF07CisKKwlyZXQtPmZpZWxkWzBdLT52YWx1ZSA9IGttYWxsb2Moc2l6ZW9mKHMzMls4XSksIEdGUF9LRVJORUwpOworCWlmICghcmV0LT5maWVsZFswXS0+dmFsdWUpIHsKKwkJa2ZyZWUocmV0LT5maWVsZFswXSk7CisJCWtmcmVlKHJldCk7CisJCXJldHVybiBOVUxMOworCX0KKwltZW1zZXQocmV0LT5maWVsZFswXS0+dmFsdWUsIDAsIHNpemVvZihzMzJbOF0pKTsJCisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBoaWRfbGdmZl9kZWxldGVfcmVwb3J0KHN0cnVjdCBoaWRfcmVwb3J0KiByZXBvcnQpCit7CisJaWYgKHJlcG9ydCkgeworCQlrZnJlZShyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZSk7CisJCWtmcmVlKHJlcG9ydC0+ZmllbGRbMF0pOworCQlrZnJlZShyZXBvcnQpOworCX0KK30KKworc3RhdGljIHZvaWQgaGlkX2xnZmZfaW5wdXRfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSogaGlkKQoreworCXN0cnVjdCBkZXZpY2VfdHlwZSogZGV2ID0gZGV2aWNlczsKKwlzaWduZWQgc2hvcnQqIGZmOworCXUxNiBpZFZlbmRvciA9IGxlMTZfdG9fY3B1KGhpZC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwl1MTYgaWRQcm9kdWN0ID0gbGUxNl90b19jcHUoaGlkLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9IGxpc3RfZW50cnkoaGlkLT5pbnB1dHMubmV4dCwgc3RydWN0IGhpZF9pbnB1dCwgbGlzdCk7CisKKwl3aGlsZSAoZGV2LT5pZFZlbmRvciAmJiAoaWRWZW5kb3IgIT0gZGV2LT5pZFZlbmRvciB8fCBpZFByb2R1Y3QgIT0gZGV2LT5pZFByb2R1Y3QpKQorCQlkZXYrKzsKKworCWZmID0gZGV2LT5mZjsKKworCXdoaWxlICgqZmYgPj0gMCkgeworCQlzZXRfYml0KCpmZiwgaGlkaW5wdXQtPmlucHV0LmZmYml0KTsKKwkJKytmZjsKKwl9CisKKwloaWRpbnB1dC0+aW5wdXQudXBsb2FkX2VmZmVjdCA9IGhpZF9sZ2ZmX3VwbG9hZF9lZmZlY3Q7CisJaGlkaW5wdXQtPmlucHV0LmZsdXNoID0gaGlkX2xnZmZfZmx1c2g7CisKKwlzZXRfYml0KEVWX0ZGLCBoaWRpbnB1dC0+aW5wdXQuZXZiaXQpOworCWhpZGlucHV0LT5pbnB1dC5mZl9lZmZlY3RzX21heCA9IExHRkZfRUZGRUNUUzsKK30KKworc3RhdGljIHZvaWQgaGlkX2xnZmZfZXhpdChzdHJ1Y3QgaGlkX2RldmljZSogaGlkKQoreworCXN0cnVjdCBsZ2ZmX2RldmljZSAqbGdmZiA9IGhpZC0+ZmZfcHJpdmF0ZTsKKworCXNldF9iaXQoREVWSUNFX0NMT1NJTkcsIGxnZmYtPmZsYWdzKTsKKwlkZWxfdGltZXJfc3luYygmbGdmZi0+dGltZXIpOworCisJaGlkX2xnZmZfZGVsZXRlX3JlcG9ydChsZ2ZmLT5jb25kaXRpb24pOworCWhpZF9sZ2ZmX2RlbGV0ZV9yZXBvcnQobGdmZi0+cnVtYmxlKTsKKwloaWRfbGdmZl9kZWxldGVfcmVwb3J0KGxnZmYtPmNvbnN0YW50KTsKKworCWtmcmVlKGxnZmYpOworfQorCitzdGF0aWMgaW50IGhpZF9sZ2ZmX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBpbnB1dF9kZXYqIGlucHV0LAorCQkJICB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbGdmZl9kZXZpY2UgKmxnZmYgPSBoaWQtPmZmX3ByaXZhdGU7CisJc3RydWN0IGxnZmZfZWZmZWN0ICplZmZlY3QgPSBsZ2ZmLT5lZmZlY3RzICsgY29kZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHR5cGUgIT0gRVZfRkYpICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgCWlmICghTEdGRl9DSEVDS19PV05FUlNISVAoY29kZSwgbGdmZikpIHJldHVybiAtRUFDQ0VTOworCWlmICh2YWx1ZSA8IDApICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxnZmYtPmxvY2ssIGZsYWdzKTsKKwkKKwlpZiAodmFsdWUgPiAwKSB7CisJCWlmICh0ZXN0X2JpdChFRkZFQ1RfU1RBUlRFRCwgZWZmZWN0LT5mbGFncykpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxnZmYtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkJaWYgKHRlc3RfYml0KEVGRkVDVF9QTEFZSU5HLCBlZmZlY3QtPmZsYWdzKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGdmZi0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCisJCWVmZmVjdC0+Y291bnQgPSB2YWx1ZTsKKworCQlpZiAoZWZmZWN0LT5lZmZlY3QucmVwbGF5LmRlbGF5KSB7CisJCQlzZXRfYml0KEVGRkVDVF9TVEFSVEVELCBlZmZlY3QtPmZsYWdzKTsKKwkJfSBlbHNlIHsKKwkJCXNldF9iaXQoRUZGRUNUX1BMQVlJTkcsIGVmZmVjdC0+ZmxhZ3MpOworCQl9CisJCWVmZmVjdC0+c3RhcnRlZF9hdCA9IGppZmZpZXM7CisJfQorCWVsc2UgeyAvKiB2YWx1ZSA9PSAwICovCisJCWNsZWFyX2JpdChFRkZFQ1RfU1RBUlRFRCwgZWZmZWN0LT5mbGFncyk7CisJCWNsZWFyX2JpdChFRkZFQ1RfUExBWUlORywgZWZmZWN0LT5mbGFncyk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGdmZi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7CisKK30KKworLyogRXJhc2UgYWxsIGVmZmVjdHMgdGhpcyBwcm9jZXNzIG93bnMgKi8KK3N0YXRpYyBpbnQgaGlkX2xnZmZfZmx1c2goc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gZGV2LT5wcml2YXRlOworCXN0cnVjdCBsZ2ZmX2RldmljZSAqbGdmZiA9IGhpZC0+ZmZfcHJpdmF0ZTsKKwlpbnQgaTsKKworCWZvciAoaT0wOyBpPGRldi0+ZmZfZWZmZWN0c19tYXg7ICsraSkgeworCisJCS8qTk9URTogbm8gbmVlZCB0byBsb2NrIGhlcmUuIFRoZSBvbmx5IHRpbWVzIEVGRkVDVF9VU0VEIGlzCisJCSAgbW9kaWZpZWQgaXMgd2hlbiBlZmZlY3RzIGFyZSB1cGxvYWRlZCBvciB3aGVuIGFuIGVmZmVjdCBpcworCQkgIGVyYXNlZC4gQnV0IGEgcHJvY2VzcyBjYW5ub3QgY2xvc2UgaXRzIGRldi9pbnB1dC9ldmVudFggZmQKKwkJICBhbmQgcGVyZm9ybSBpb2N0bHMgb24gdGhlIHNhbWUgZmQgYWxsIGF0IHRoZSBzYW1lIHRpbWUgKi8KKwkJaWYgKCBjdXJyZW50LT5waWQgPT0gbGdmZi0+ZWZmZWN0c1tpXS5vd25lcgorCQkgICAgICYmIHRlc3RfYml0KEVGRkVDVF9VU0VELCBsZ2ZmLT5lZmZlY3RzW2ldLmZsYWdzKSkgeworCQkJCisJCQlpZiAoaGlkX2xnZmZfZXJhc2UoZGV2LCBpKSkKKwkJCQl3YXJuKCJlcmFzZSBlZmZlY3QgJWQgZmFpbGVkIiwgaSk7CisJCX0KKworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhpZF9sZ2ZmX2VyYXNlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IGlkKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IGxnZmZfZGV2aWNlICpsZ2ZmID0gaGlkLT5mZl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIUxHRkZfQ0hFQ0tfT1dORVJTSElQKGlkLCBsZ2ZmKSkgcmV0dXJuIC1FQUNDRVM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGdmZi0+bG9jaywgZmxhZ3MpOworCWxnZmYtPmVmZmVjdHNbaWRdLmZsYWdzWzBdID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsZ2ZmLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoaWRfbGdmZl91cGxvYWRfZWZmZWN0KHN0cnVjdCBpbnB1dF9kZXYqIGlucHV0LAorCQkJCSAgc3RydWN0IGZmX2VmZmVjdCogZWZmZWN0KQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBpbnB1dC0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbGdmZl9kZXZpY2UgKmxnZmYgPSBoaWQtPmZmX3ByaXZhdGU7CisJc3RydWN0IGxnZmZfZWZmZWN0IG5ldzsKKwlpbnQgaWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkKKwlkYmcoImlvY3RsIHJ1bWJsZSIpOworCisJaWYgKCF0ZXN0X2JpdChlZmZlY3QtPnR5cGUsIGlucHV0LT5mZmJpdCkpIHJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxnZmYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChlZmZlY3QtPmlkID09IC0xKSB7CisJCWludCBpOworCisJCWZvciAoaT0wOyBpPExHRkZfRUZGRUNUUyAmJiB0ZXN0X2JpdChFRkZFQ1RfVVNFRCwgbGdmZi0+ZWZmZWN0c1tpXS5mbGFncyk7ICsraSk7CisJCWlmIChpID49IExHRkZfRUZGRUNUUykgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGdmZi0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIC1FTk9TUEM7CisJCX0KKworCQllZmZlY3QtPmlkID0gaTsKKwkJbGdmZi0+ZWZmZWN0c1tpXS5vd25lciA9IGN1cnJlbnQtPnBpZDsKKwkJbGdmZi0+ZWZmZWN0c1tpXS5mbGFnc1swXSA9IDA7CisJCXNldF9iaXQoRUZGRUNUX1VTRUQsIGxnZmYtPmVmZmVjdHNbaV0uZmxhZ3MpOworCX0KKwllbHNlIGlmICghTEdGRl9DSEVDS19PV05FUlNISVAoZWZmZWN0LT5pZCwgbGdmZikpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGdmZi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CisKKwlpZCA9IGVmZmVjdC0+aWQ7CisJbmV3ID0gbGdmZi0+ZWZmZWN0c1tpZF07CisKKwluZXcuZWZmZWN0ID0gKmVmZmVjdDsKKworCWlmICh0ZXN0X2JpdChFRkZFQ1RfU1RBUlRFRCwgbGdmZi0+ZWZmZWN0c1tpZF0uZmxhZ3MpCisJICAgIHx8IHRlc3RfYml0KEVGRkVDVF9TVEFSVEVELCBsZ2ZmLT5lZmZlY3RzW2lkXS5mbGFncykpIHsKKworCQkvKiBDaGFuZ2luZyByZXBsYXkgcGFyYW1ldGVycyBpcyBub3QgYWxsb3dlZCAoZm9yIHRoZSB0aW1lCisJCSAgIGJlaW5nKSAqLworCQlpZiAobmV3LmVmZmVjdC5yZXBsYXkuZGVsYXkgIT0gbGdmZi0+ZWZmZWN0c1tpZF0uZWZmZWN0LnJlcGxheS5kZWxheQorCQkgICAgfHwgbmV3LmVmZmVjdC5yZXBsYXkubGVuZ3RoICE9IGxnZmYtPmVmZmVjdHNbaWRdLmVmZmVjdC5yZXBsYXkubGVuZ3RoKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsZ2ZmLT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gLUVOT1NZUzsKKwkJfQorCisJCWxnZmYtPmVmZmVjdHNbaWRdID0gbmV3OworCisJfSBlbHNlIHsKKwkJbGdmZi0+ZWZmZWN0c1tpZF0gPSBuZXc7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGdmZi0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBoaWRfbGdmZl90aW1lcih1bnNpZ25lZCBsb25nIHRpbWVyX2RhdGEpCit7CisJc3RydWN0IGxnZmZfZGV2aWNlICpsZ2ZmID0gKHN0cnVjdCBsZ2ZmX2RldmljZSopdGltZXJfZGF0YTsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gbGdmZi0+aGlkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHggPSAweDdmLCB5ID0gMHg3ZjsgICAvLyBDb29yZGluYXRlcyBvZiBjb25zdGFudCBlZmZlY3RzCisJdW5zaWduZWQgaW50IGxlZnQgPSAwLCByaWdodCA9IDA7ICAgLy8gUnVtYmxpbmcKKwlpbnQgaTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsZ2ZmLT5sb2NrLCBmbGFncyk7CisKKyAJZm9yIChpPTA7IGk8TEdGRl9FRkZFQ1RTOyArK2kpIHsKKwkJc3RydWN0IGxnZmZfZWZmZWN0KiBlZmZlY3QgPSBsZ2ZmLT5lZmZlY3RzICtpOworCisJCWlmICh0ZXN0X2JpdChFRkZFQ1RfUExBWUlORywgZWZmZWN0LT5mbGFncykpIHsKKworCQkJc3dpdGNoIChlZmZlY3QtPmVmZmVjdC50eXBlKSB7CisJCQljYXNlIEZGX0NPTlNUQU5UOiB7CisJCQkJLy9UT0RPOiBoYW5kbGUgZW52ZWxvcGVzCisJCQkJaW50IGRlZ3JlZXMgPSBlZmZlY3QtPmVmZmVjdC5kaXJlY3Rpb24gKiAzNjAgPj4gMTY7CisJCQkJeCArPSBmaXhwX211bHQoZml4cF9zaW4oZGVncmVlcyksCisJCQkJCSAgICAgICBmaXhwX25ldzE2KGVmZmVjdC0+ZWZmZWN0LnUuY29uc3RhbnQubGV2ZWwpKTsKKwkJCQl5ICs9IGZpeHBfbXVsdCgtZml4cF9jb3MoZGVncmVlcyksCisJCQkJCSAgICAgICBmaXhwX25ldzE2KGVmZmVjdC0+ZWZmZWN0LnUuY29uc3RhbnQubGV2ZWwpKTsKKwkJCX0gICAgICAgYnJlYWs7CisJCQljYXNlIEZGX1JVTUJMRToKKwkJCQlyaWdodCArPSBlZmZlY3QtPmVmZmVjdC51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlOworCQkJCWxlZnQgKz0gZWZmZWN0LT5lZmZlY3QudS5ydW1ibGUud2Vha19tYWduaXR1ZGU7CisJCQkJYnJlYWs7CisJCQl9OworCisJCQkvKiBPbmUgcnVuIG9mIHRoZSBlZmZlY3QgaXMgZmluaXNoZWQgcGxheWluZyAqLworCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKKwkJCQkJZWZmZWN0LT5zdGFydGVkX2F0CisJCQkJCSsgZWZmZWN0LT5lZmZlY3QucmVwbGF5LmRlbGF5KkhaLzEwMDAKKwkJCQkJKyBlZmZlY3QtPmVmZmVjdC5yZXBsYXkubGVuZ3RoKkhaLzEwMDApKSB7CisJCQkJZGJnKCJGaW5pc2hlZCBwbGF5aW5nIG9uY2UgJWQiLCBpKTsKKwkJCQlpZiAoLS1lZmZlY3QtPmNvdW50IDw9IDApIHsKKwkJCQkJZGJnKCJTdG9wcGVkICVkIiwgaSk7CisJCQkJCWNsZWFyX2JpdChFRkZFQ1RfUExBWUlORywgZWZmZWN0LT5mbGFncyk7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlkYmcoIlN0YXJ0IGFnYWluICVkIiwgaSk7CisJCQkJCWlmIChlZmZlY3QtPmVmZmVjdC5yZXBsYXkubGVuZ3RoICE9IDApIHsKKwkJCQkJCWNsZWFyX2JpdChFRkZFQ1RfUExBWUlORywgZWZmZWN0LT5mbGFncyk7CisJCQkJCQlzZXRfYml0KEVGRkVDVF9TVEFSVEVELCBlZmZlY3QtPmZsYWdzKTsKKwkJCQkJfQorCQkJCQllZmZlY3QtPnN0YXJ0ZWRfYXQgPSBqaWZmaWVzOworCQkJCX0KKwkJCX0KKworCQl9IGVsc2UgaWYgKHRlc3RfYml0KEVGRkVDVF9TVEFSVEVELCBsZ2ZmLT5lZmZlY3RzW2ldLmZsYWdzKSkgeworCQkJLyogQ2hlY2sgaWYgd2Ugc2hvdWxkIHN0YXJ0IHBsYXlpbmcgdGhlIGVmZmVjdCAqLworCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKKwkJCQkJbGdmZi0+ZWZmZWN0c1tpXS5zdGFydGVkX2F0CisJCQkJCSsgbGdmZi0+ZWZmZWN0c1tpXS5lZmZlY3QucmVwbGF5LmRlbGF5KkhaLzEwMDApKSB7CisJCQkJZGJnKCJOb3cgcGxheWluZyAlZCIsIGkpOworCQkJCWNsZWFyX2JpdChFRkZFQ1RfU1RBUlRFRCwgbGdmZi0+ZWZmZWN0c1tpXS5mbGFncyk7CisJCQkJc2V0X2JpdChFRkZFQ1RfUExBWUlORywgbGdmZi0+ZWZmZWN0c1tpXS5mbGFncyk7CisJCQl9CisJCX0KKyAJfQorCisjZGVmaW5lIENMQU1QKHgpIGlmICh4IDwgMCkgeCA9IDA7IGlmICh4ID4gMHhmZikgeCA9IDB4ZmYKKworCS8vIENsYW1wIHZhbHVlcworCUNMQU1QKHgpOworCUNMQU1QKHkpOworCUNMQU1QKGxlZnQpOworCUNMQU1QKHJpZ2h0KTsKKworI3VuZGVmIENMQU1QCisKKwlpZiAoeCAhPSBsZ2ZmLT5jb25zdGFudC0+ZmllbGRbMF0tPnZhbHVlWzJdCisJICAgIHx8IHkgIT0gbGdmZi0+Y29uc3RhbnQtPmZpZWxkWzBdLT52YWx1ZVszXSkgeworCQlsZ2ZmLT5jb25zdGFudC0+ZmllbGRbMF0tPnZhbHVlWzJdID0geDsKKwkJbGdmZi0+Y29uc3RhbnQtPmZpZWxkWzBdLT52YWx1ZVszXSA9IHk7CisJCWRiZygiKHgseSk9KCUwNHgsICUwNHgpIiwgeCwgeSk7CisJCWhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgbGdmZi0+Y29uc3RhbnQsIFVTQl9ESVJfT1VUKTsKKwl9CisKKwlpZiAobGVmdCAhPSBsZ2ZmLT5ydW1ibGUtPmZpZWxkWzBdLT52YWx1ZVsyXQorCSAgICB8fCByaWdodCAhPSBsZ2ZmLT5ydW1ibGUtPmZpZWxkWzBdLT52YWx1ZVszXSkgeworCQlsZ2ZmLT5ydW1ibGUtPmZpZWxkWzBdLT52YWx1ZVsyXSA9IGxlZnQ7CisJCWxnZmYtPnJ1bWJsZS0+ZmllbGRbMF0tPnZhbHVlWzNdID0gcmlnaHQ7CisJCWRiZygiKGxlZnQscmlnaHQpPSglMDR4LCAlMDR4KSIsIGxlZnQsIHJpZ2h0KTsKKwkJaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCBsZ2ZmLT5ydW1ibGUsIFVTQl9ESVJfT1VUKTsKKwl9CisKKwlpZiAoIXRlc3RfYml0KERFVklDRV9DTE9TSU5HLCBsZ2ZmLT5mbGFncykpIHsKKwkJbGdmZi0+dGltZXIuZXhwaXJlcyA9IFJVTl9BVChQRVJJT0QpOworCQlhZGRfdGltZXIoJmxnZmYtPnRpbWVyKTsKKwl9CisKKyAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGdmZi0+bG9jaywgZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLXRtZmYuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC10bWZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY2YTBhNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC10bWZmLmMKQEAgLTAsMCArMSw0NjMgQEAKKy8qCisgKiBGb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciB2YXJpb3VzIEhJRCBjb21wbGlhbnQgZGV2aWNlcyBieSBUaHJ1c3RNYXN0ZXI6CisgKiAgICBUaHJ1c3RNYXN0ZXIgRmlyZVN0b3JtIER1YWwgUG93ZXIgMgorICogYW5kIHBvc3NpYmx5IG90aGVycyB3aG9zZSBkZXZpY2UgaWRzIGhhdmVuJ3QgYmVlbiBhZGRlZC4KKyAqCisgKiAgTW9kaWZpZWQgdG8gc3VwcG9ydCBUaHJ1c3RNYXN0ZXIgZGV2aWNlcyBieSBaaW54IFZlcml0dXNlCisgKiAgb24gMjAwMy0wMS0yNSBmcm9tIHRoZSBMb2dpdGVjaCBmb3JjZSBmZWVkYmFjayBkcml2ZXIsCisgKiAgd2hpY2ggaXMgYnkgSm9oYW5uIERlbmV1eC4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDAzIFppbnggVmVyaXR1c2UgPHppbnhAZXBpY3NvbC5vcmc+CisgKiAgQ29weXJpZ2h0IChjKSAyMDAyIEpvaGFubiBEZW5ldXgKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjdW5kZWYgREVCVUcKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgPGxpbnV4L2NpcmNfYnVmLmg+CisKKyNpbmNsdWRlICJoaWQuaCIKKyNpbmNsdWRlICJmaXhwLWFyaXRoLmgiCisKKy8qIFVzYWdlcyBmb3IgdGhydXN0bWFzdGVyIGRldmljZXMgSSBrbm93IGFib3V0ICovCisjZGVmaW5lIFRIUlVTVE1BU1RFUl9VU0FHRV9SVU1CTEVfTFIJKEhJRF9VUF9HRU5ERVNLIHwgMHhiYikKKyNkZWZpbmUgREVMQVlfQ0FMQyh0LGRlbGF5KQkJKCh0KSArIChkZWxheSkqSFovMTAwMCkKKworLyogRWZmZWN0IHN0YXR1cyAqLworI2RlZmluZSBFRkZFQ1RfU1RBUlRFRCAwCS8qIEVmZmVjdCBpcyBnb2luZyB0byBwbGF5IGFmdGVyIHNvbWUgdGltZSAqLworI2RlZmluZSBFRkZFQ1RfUExBWUlORyAxCS8qIEVmZmVjdCBpcyBwbGF5aW5nICovCisjZGVmaW5lIEVGRkVDVF9VU0VEICAgIDIKKworLyogRm9yIHRtZmZfZGV2aWNlOjpmbGFncyAqLworI2RlZmluZSBERVZJQ0VfQ0xPU0lORyAwCS8qIFRoZSBkcml2ZXIgaXMgYmVpbmcgdW5pdGlhbGlzZWQgKi8KKworLyogQ2hlY2sgdGhhdCB0aGUgY3VycmVudCBwcm9jZXNzIGNhbiBhY2Nlc3MgYW4gZWZmZWN0ICovCisjZGVmaW5lIENIRUNLX09XTkVSU0hJUChlZmZlY3QpIChjdXJyZW50LT5waWQgPT0gMCBcCisgICAgICAgIHx8IGVmZmVjdC5vd25lciA9PSBjdXJyZW50LT5waWQpCisKKyNkZWZpbmUgVE1GRl9DSEVDS19JRChpZCkJKChpZCkgPj0gMCAmJiAoaWQpIDwgVE1GRl9FRkZFQ1RTKQorCisjZGVmaW5lIFRNRkZfQ0hFQ0tfT1dORVJTSElQKGksIGwpIFwKKyAgICAgICAgKHRlc3RfYml0KEVGRkVDVF9VU0VELCBsLT5lZmZlY3RzW2ldLmZsYWdzKSBcCisgICAgICAgICYmIENIRUNLX09XTkVSU0hJUChsLT5lZmZlY3RzW2ldKSkKKworI2RlZmluZSBUTUZGX0VGRkVDVFMgOAorCitzdHJ1Y3QgdG1mZl9lZmZlY3QgeworCXBpZF90IG93bmVyOworCisJc3RydWN0IGZmX2VmZmVjdCBlZmZlY3Q7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzWzFdOworCXVuc2lnbmVkIGludCBjb3VudDsgICAgICAgICAgICAgLyogTnVtYmVyIG9mIHRpbWVzIGxlZnQgdG8gcGxheSAqLworCisJdW5zaWduZWQgbG9uZyBwbGF5X2F0OyAgICAgICAgICAvKiBXaGVuIHRoZSBlZmZlY3Qgc3RhcnRzIHRvIHBsYXkgKi8KKwl1bnNpZ25lZCBsb25nIHN0b3BfYXQ7CQkvKiBXaGVuIHRoZSBlZmZlY3QgZW5kcyAqLworfTsKKworc3RydWN0IHRtZmZfZGV2aWNlIHsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkOworCisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKworCXN0cnVjdCBoaWRfZmllbGQgKnJ1bWJsZTsKKworCXVuc2lnbmVkIGludCBlZmZlY3RzX3BsYXlpbmc7CisJc3RydWN0IHRtZmZfZWZmZWN0IGVmZmVjdHNbVE1GRl9FRkZFQ1RTXTsKKwlzcGlubG9ja190IGxvY2s7ICAgICAgICAgICAgIC8qIGRldmljZS1sZXZlbCBsb2NrLiBIYXZpbmcgbG9ja3Mgb24KKwkJCQkJYSBwZXItZWZmZWN0IGJhc2lzIGNvdWxkIGJlIG5pY2UsIGJ1dAorCQkJCQlpc24ndCByZWFsbHkgbmVjZXNzYXJ5ICovCisKKwl1bnNpZ25lZCBsb25nIGZsYWdzWzFdOyAgICAgIC8qIENvbnRhaW5zIHZhcmlvdXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisJCQkJCXN0YXRlIG9mIHRoZSBkcml2ZXIgZm9yIHRoaXMgZGV2aWNlICovCisKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKK307CisKKy8qIENhbGxiYWNrcyAqLworc3RhdGljIHZvaWQgaGlkX3RtZmZfZXhpdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKTsKK3N0YXRpYyBpbnQgaGlkX3RtZmZfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCisJCQkgIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKTsKK3N0YXRpYyBpbnQgaGlkX3RtZmZfZmx1c2goc3RydWN0IGlucHV0X2RldiAqaW5wdXQsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgaGlkX3RtZmZfdXBsb2FkX2VmZmVjdChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKKwkJCQkgIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCk7CitzdGF0aWMgaW50IGhpZF90bWZmX2VyYXNlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LCBpbnQgaWQpOworCisvKiBMb2NhbCBmdW5jdGlvbnMgKi8KK3N0YXRpYyB2b2lkIGhpZF90bWZmX3JlY2FsY3VsYXRlX3RpbWVyKHN0cnVjdCB0bWZmX2RldmljZSAqdG1mZik7CitzdGF0aWMgdm9pZCBoaWRfdG1mZl90aW1lcih1bnNpZ25lZCBsb25nIHRpbWVyX2RhdGEpOworCitpbnQgaGlkX3RtZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXN0cnVjdCB0bWZmX2RldmljZSAqcHJpdmF0ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQgPSBsaXN0X2VudHJ5KGhpZC0+aW5wdXRzLm5leHQsIHN0cnVjdCBoaWRfaW5wdXQsIGxpc3QpOworCisJcHJpdmF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0bWZmX2RldmljZSksIEdGUF9LRVJORUwpOworCWlmICghcHJpdmF0ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQocHJpdmF0ZSwgMCwgc2l6ZW9mKHN0cnVjdCB0bWZmX2RldmljZSkpOworCWhpZC0+ZmZfcHJpdmF0ZSA9IHByaXZhdGU7CisKKwkvKiBGaW5kIHRoZSByZXBvcnQgdG8gdXNlICovCisJX19saXN0X2Zvcl9lYWNoKHBvcywgJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0KSB7CisJCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQgPSAoc3RydWN0IGhpZF9yZXBvcnQgKilwb3M7CisJCWludCBmaWVsZG51bTsKKworCQlmb3IgKGZpZWxkbnVtID0gMDsgZmllbGRudW0gPCByZXBvcnQtPm1heGZpZWxkOyArK2ZpZWxkbnVtKSB7CisJCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCA9IHJlcG9ydC0+ZmllbGRbZmllbGRudW1dOworCisJCQlpZiAoZmllbGQtPm1heHVzYWdlIDw9IDApCisJCQkJY29udGludWU7CisKKwkJCXN3aXRjaCAoZmllbGQtPnVzYWdlWzBdLmhpZCkgeworCQkJCWNhc2UgVEhSVVNUTUFTVEVSX1VTQUdFX1JVTUJMRV9MUjoKKwkJCQkJaWYgKGZpZWxkLT5yZXBvcnRfY291bnQgPCAyKSB7CisJCQkJCQl3YXJuKCJpZ25vcmluZyBUSFJVU1RNQVNURVJfVVNBR0VfUlVNQkxFX0xSIHdpdGggcmVwb3J0X2NvdW50IDwgMiIpOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKworCQkJCQlpZiAoZmllbGQtPmxvZ2ljYWxfbWF4aW11bSA9PSBmaWVsZC0+bG9naWNhbF9taW5pbXVtKSB7CisJCQkJCQl3YXJuKCJpZ25vcmluZyBUSFJVU1RNQVNURVJfVVNBR0VfUlVNQkxFX0xSIHdpdGggbG9naWNhbF9tYXhpbXVtID09IGxvZ2ljYWxfbWluaW11bSIpOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKworCQkJCQlpZiAocHJpdmF0ZS0+cmVwb3J0ICYmIHByaXZhdGUtPnJlcG9ydCAhPSByZXBvcnQpIHsKKwkJCQkJCXdhcm4oImlnbm9yaW5nIFRIUlVTVE1BU1RFUl9VU0FHRV9SVU1CTEVfTFIgaW4gb3RoZXIgcmVwb3J0Iik7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCisJCQkJCWlmIChwcml2YXRlLT5ydW1ibGUgJiYgcHJpdmF0ZS0+cnVtYmxlICE9IGZpZWxkKSB7CisJCQkJCQl3YXJuKCJpZ25vcmluZyBkdXBsaWNhdGUgVEhSVVNUTUFTVEVSX1VTQUdFX1JVTUJMRV9MUiIpOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKworCQkJCQlwcml2YXRlLT5yZXBvcnQgPSByZXBvcnQ7CisJCQkJCXByaXZhdGUtPnJ1bWJsZSA9IGZpZWxkOworCisJCQkJCXNldF9iaXQoRkZfUlVNQkxFLCBoaWRpbnB1dC0+aW5wdXQuZmZiaXQpOworCQkJCQlicmVhazsKKworCQkJCWRlZmF1bHQ6CisJCQkJCXdhcm4oImlnbm9yaW5nIHVua25vd24gb3V0cHV0IHVzYWdlICUwOHgiLCBmaWVsZC0+dXNhZ2VbMF0uaGlkKTsKKwkJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIEZhbGx0aHJvdWdoIHRvIGhlcmUgb25seSB3aGVuIGEgdmFsaWQgdXNhZ2UgaXMgZm91bmQgKi8KKwkJCWhpZGlucHV0LT5pbnB1dC51cGxvYWRfZWZmZWN0ID0gaGlkX3RtZmZfdXBsb2FkX2VmZmVjdDsKKwkJCWhpZGlucHV0LT5pbnB1dC5mbHVzaCA9IGhpZF90bWZmX2ZsdXNoOworCisJCQlzZXRfYml0KEVWX0ZGLCBoaWRpbnB1dC0+aW5wdXQuZXZiaXQpOworCQkJaGlkaW5wdXQtPmlucHV0LmZmX2VmZmVjdHNfbWF4ID0gVE1GRl9FRkZFQ1RTOworCQl9CisJfQorCisJcHJpdmF0ZS0+aGlkID0gaGlkOworCisJc3Bpbl9sb2NrX2luaXQoJnByaXZhdGUtPmxvY2spOworCWluaXRfdGltZXIoJnByaXZhdGUtPnRpbWVyKTsKKwlwcml2YXRlLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcHJpdmF0ZTsKKwlwcml2YXRlLT50aW1lci5mdW5jdGlvbiA9IGhpZF90bWZmX3RpbWVyOworCisJLyogRXZlbnQgYW5kIGV4aXQgY2FsbGJhY2tzICovCisJaGlkLT5mZl9leGl0ID0gaGlkX3RtZmZfZXhpdDsKKwloaWQtPmZmX2V2ZW50ID0gaGlkX3RtZmZfZXZlbnQ7CisKKwlpbmZvKCJGb3JjZSBmZWVkYmFjayBmb3IgVGhydXN0TWFzdGVyIHJ1bWJsZSBwYWQgZGV2aWNlcyBieSBaaW54IFZlcml0dXNlIDx6aW54QGVwaWNzb2wub3JnPiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhpZF90bWZmX2V4aXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlzdHJ1Y3QgdG1mZl9kZXZpY2UgKnRtZmYgPSBoaWQtPmZmX3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0bWZmLT5sb2NrLCBmbGFncyk7CisKKwlzZXRfYml0KERFVklDRV9DTE9TSU5HLCB0bWZmLT5mbGFncyk7CisJZGVsX3RpbWVyX3N5bmMoJnRtZmYtPnRpbWVyKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRtZmYtPmxvY2ssIGZsYWdzKTsKKworCWtmcmVlKHRtZmYpOworfQorCitzdGF0aWMgaW50IGhpZF90bWZmX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LAorCQkJICB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgdG1mZl9kZXZpY2UgKnRtZmYgPSBoaWQtPmZmX3ByaXZhdGU7CisJc3RydWN0IHRtZmZfZWZmZWN0ICplZmZlY3QgPSAmdG1mZi0+ZWZmZWN0c1tjb2RlXTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHR5cGUgIT0gRVZfRkYpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghVE1GRl9DSEVDS19JRChjb2RlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFUTUZGX0NIRUNLX09XTkVSU0hJUChjb2RlLCB0bWZmKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisJaWYgKHZhbHVlIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdG1mZi0+bG9jaywgZmxhZ3MpOworCisJaWYgKHZhbHVlID4gMCkgeworCQlzZXRfYml0KEVGRkVDVF9TVEFSVEVELCBlZmZlY3QtPmZsYWdzKTsKKwkJY2xlYXJfYml0KEVGRkVDVF9QTEFZSU5HLCBlZmZlY3QtPmZsYWdzKTsKKwkJZWZmZWN0LT5jb3VudCA9IHZhbHVlOworCQllZmZlY3QtPnBsYXlfYXQgPSBERUxBWV9DQUxDKGppZmZpZXMsIGVmZmVjdC0+ZWZmZWN0LnJlcGxheS5kZWxheSk7CisJfSBlbHNlIHsKKwkJY2xlYXJfYml0KEVGRkVDVF9TVEFSVEVELCBlZmZlY3QtPmZsYWdzKTsKKwkJY2xlYXJfYml0KEVGRkVDVF9QTEFZSU5HLCBlZmZlY3QtPmZsYWdzKTsKKwl9CisKKwloaWRfdG1mZl9yZWNhbGN1bGF0ZV90aW1lcih0bWZmKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRtZmYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworCit9CisKKy8qIEVyYXNlIGFsbCBlZmZlY3RzIHRoaXMgcHJvY2VzcyBvd25zICovCisKK3N0YXRpYyBpbnQgaGlkX3RtZmZfZmx1c2goc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gZGV2LT5wcml2YXRlOworCXN0cnVjdCB0bWZmX2RldmljZSAqdG1mZiA9IGhpZC0+ZmZfcHJpdmF0ZTsKKwlpbnQgaTsKKworCWZvciAoaT0wOyBpPGRldi0+ZmZfZWZmZWN0c19tYXg7ICsraSkKKworCSAgICAgLyogTk9URTogbm8gbmVlZCB0byBsb2NrIGhlcmUuIFRoZSBvbmx5IHRpbWVzIEVGRkVDVF9VU0VEIGlzCisJCW1vZGlmaWVkIGlzIHdoZW4gZWZmZWN0cyBhcmUgdXBsb2FkZWQgb3Igd2hlbiBhbiBlZmZlY3QgaXMKKwkJZXJhc2VkLiBCdXQgYSBwcm9jZXNzIGNhbm5vdCBjbG9zZSBpdHMgZGV2L2lucHV0L2V2ZW50WCBmZAorCQlhbmQgcGVyZm9ybSBpb2N0bHMgb24gdGhlIHNhbWUgZmQgYWxsIGF0IHRoZSBzYW1lIHRpbWUgKi8KKworCQlpZiAoY3VycmVudC0+cGlkID09IHRtZmYtPmVmZmVjdHNbaV0ub3duZXIKKwkJICAgICAmJiB0ZXN0X2JpdChFRkZFQ1RfVVNFRCwgdG1mZi0+ZWZmZWN0c1tpXS5mbGFncykpCisJCQlpZiAoaGlkX3RtZmZfZXJhc2UoZGV2LCBpKSkKKwkJCQl3YXJuKCJlcmFzZSBlZmZlY3QgJWQgZmFpbGVkIiwgaSk7CisKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhpZF90bWZmX2VyYXNlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IGlkKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IHRtZmZfZGV2aWNlICp0bWZmID0gaGlkLT5mZl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIVRNRkZfQ0hFQ0tfSUQoaWQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIVRNRkZfQ0hFQ0tfT1dORVJTSElQKGlkLCB0bWZmKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdG1mZi0+bG9jaywgZmxhZ3MpOworCisJdG1mZi0+ZWZmZWN0c1tpZF0uZmxhZ3NbMF0gPSAwOworCWhpZF90bWZmX3JlY2FsY3VsYXRlX3RpbWVyKHRtZmYpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdG1mZi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGlkX3RtZmZfdXBsb2FkX2VmZmVjdChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKKwkJCQkgIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXQtPnByaXZhdGU7CisJc3RydWN0IHRtZmZfZGV2aWNlICp0bWZmID0gaGlkLT5mZl9wcml2YXRlOworCWludCBpZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCF0ZXN0X2JpdChlZmZlY3QtPnR5cGUsIGlucHV0LT5mZmJpdCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChlZmZlY3QtPmlkICE9IC0xICYmICFUTUZGX0NIRUNLX0lEKGVmZmVjdC0+aWQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0bWZmLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoZWZmZWN0LT5pZCA9PSAtMSkgeworCQkvKiBGaW5kIGEgZnJlZSBlZmZlY3QgKi8KKwkJZm9yIChpZCA9IDA7IGlkIDwgVE1GRl9FRkZFQ1RTICYmIHRlc3RfYml0KEVGRkVDVF9VU0VELCB0bWZmLT5lZmZlY3RzW2lkXS5mbGFncyk7ICsraWQpOworCisJCWlmIChpZCA+PSBUTUZGX0VGRkVDVFMpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRtZmYtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAtRU5PU1BDOworCQl9CisKKwkJZWZmZWN0LT5pZCA9IGlkOworCQl0bWZmLT5lZmZlY3RzW2lkXS5vd25lciA9IGN1cnJlbnQtPnBpZDsKKwkJdG1mZi0+ZWZmZWN0c1tpZF0uZmxhZ3NbMF0gPSAwOworCQlzZXRfYml0KEVGRkVDVF9VU0VELCB0bWZmLT5lZmZlY3RzW2lkXS5mbGFncyk7CisKKwl9IGVsc2UgeworCQkvKiBSZS11cGxvYWRpbmcgYW4gb3duZWQgZWZmZWN0LCB0byBjaGFuZ2UgcGFyYW1ldGVycyAqLworCQlpZCA9IGVmZmVjdC0+aWQ7CisJCWNsZWFyX2JpdChFRkZFQ1RfUExBWUlORywgdG1mZi0+ZWZmZWN0c1tpZF0uZmxhZ3MpOworCX0KKworCXRtZmYtPmVmZmVjdHNbaWRdLmVmZmVjdCA9ICplZmZlY3Q7CisKKwloaWRfdG1mZl9yZWNhbGN1bGF0ZV90aW1lcih0bWZmKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRtZmYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyogU3RhcnQgdGhlIHRpbWVyIGZvciB0aGUgbmV4dCBzdGFydC9zdG9wL2RlbGF5ICovCisvKiBBbHdheXMgY2FsbCB0aGlzIHdoaWxlIHRtZmYtPmxvY2sgaXMgbG9ja2VkICovCisKK3N0YXRpYyB2b2lkIGhpZF90bWZmX3JlY2FsY3VsYXRlX3RpbWVyKHN0cnVjdCB0bWZmX2RldmljZSAqdG1mZikKK3sKKwlpbnQgaTsKKwlpbnQgZXZlbnRzID0gMDsKKwl1bnNpZ25lZCBsb25nIG5leHRfdGltZTsKKworCW5leHRfdGltZSA9IDA7CS8qIFNodXQgdXAgY29tcGlsZXIncyBpbmNvcnJlY3Qgd2FybmluZyAqLworCisJLyogRmluZCB0aGUgbmV4dCBjaGFuZ2UgaW4gYW4gZWZmZWN0J3Mgc3RhdHVzICovCisJZm9yIChpID0gMDsgaSA8IFRNRkZfRUZGRUNUUzsgKytpKSB7CisJCXN0cnVjdCB0bWZmX2VmZmVjdCAqZWZmZWN0ID0gJnRtZmYtPmVmZmVjdHNbaV07CisJCXVuc2lnbmVkIGxvbmcgcGxheV90aW1lOworCisJCWlmICghdGVzdF9iaXQoRUZGRUNUX1NUQVJURUQsIGVmZmVjdC0+ZmxhZ3MpKQorCQkJY29udGludWU7CisKKwkJZWZmZWN0LT5zdG9wX2F0ID0gREVMQVlfQ0FMQyhlZmZlY3QtPnBsYXlfYXQsIGVmZmVjdC0+ZWZmZWN0LnJlcGxheS5sZW5ndGgpOworCisJCWlmICghdGVzdF9iaXQoRUZGRUNUX1BMQVlJTkcsIGVmZmVjdC0+ZmxhZ3MpKQorCQkJcGxheV90aW1lID0gZWZmZWN0LT5wbGF5X2F0OworCQllbHNlCisJCQlwbGF5X3RpbWUgPSBlZmZlY3QtPnN0b3BfYXQ7CisKKwkJZXZlbnRzKys7CisKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgcGxheV90aW1lKSkKKwkJCXBsYXlfdGltZSA9IGppZmZpZXM7CisKKwkJaWYgKGV2ZW50cyA9PSAxKQorCQkJbmV4dF90aW1lID0gcGxheV90aW1lOworCQllbHNlIHsKKwkJCWlmICh0aW1lX2FmdGVyKG5leHRfdGltZSwgcGxheV90aW1lKSkKKwkJCQluZXh0X3RpbWUgPSBwbGF5X3RpbWU7CisJCX0KKwl9CisKKwlpZiAoIWV2ZW50cyAmJiB0bWZmLT5lZmZlY3RzX3BsYXlpbmcpIHsKKwkJLyogVHJlYXQgYWxsIGVmZmVjdHMgdHVybmluZyBvZmYgYXMgYW4gZXZlbnQgKi8KKwkJZXZlbnRzID0gMTsKKwkJbmV4dF90aW1lID0gamlmZmllczsKKwl9CisKKwlpZiAoIWV2ZW50cykgeworCQkvKiBObyBldmVudHMsIG5vIHRpbWUsIG5vIG5lZWQgZm9yIGEgdGltZXIuICovCisJCWRlbF90aW1lcl9zeW5jKCZ0bWZmLT50aW1lcik7CisJCXJldHVybjsKKwl9CisKKwltb2RfdGltZXIoJnRtZmYtPnRpbWVyLCBuZXh0X3RpbWUpOworfQorCisvKiBDaGFuZ2VzIHZhbHVlcyBmcm9tIDAgdG8gMHhmZmZmIGludG8gdmFsdWVzIGZyb20gbWluaW11bSB0byBtYXhpbXVtICovCitzdGF0aWMgaW5saW5lIGludCBoaWRfdG1mZl9zY2FsZSh1bnNpZ25lZCBpbnQgaW4sIGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gKGluICogKG1heGltdW0gLSBtaW5pbXVtKSAvIDB4ZmZmZikgKyBtaW5pbXVtOworCWlmIChyZXQgPCBtaW5pbXVtKQorCQlyZXR1cm4gbWluaW11bTsKKwlpZiAocmV0ID4gbWF4aW11bSkKKwkJcmV0dXJuIG1heGltdW07CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaGlkX3RtZmZfdGltZXIodW5zaWduZWQgbG9uZyB0aW1lcl9kYXRhKQoreworCXN0cnVjdCB0bWZmX2RldmljZSAqdG1mZiA9IChzdHJ1Y3QgdG1mZl9kZXZpY2UgKikgdGltZXJfZGF0YTsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdG1mZi0+aGlkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGxlZnQgPSAwLCByaWdodCA9IDA7CS8qIFJ1bWJsaW5nICovCisJaW50IGk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdG1mZi0+bG9jaywgZmxhZ3MpOworCisJdG1mZi0+ZWZmZWN0c19wbGF5aW5nID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBUTUZGX0VGRkVDVFM7ICsraSkgeworCQlzdHJ1Y3QgdG1mZl9lZmZlY3QgKmVmZmVjdCA9ICZ0bWZmLT5lZmZlY3RzW2ldOworCisJCWlmICghdGVzdF9iaXQoRUZGRUNUX1NUQVJURUQsIGVmZmVjdC0+ZmxhZ3MpKQorCQkJY29udGludWU7CisKKwkJaWYgKCF0aW1lX2FmdGVyKGppZmZpZXMsIGVmZmVjdC0+cGxheV9hdCkpCisJCQljb250aW51ZTsKKworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBlZmZlY3QtPnN0b3BfYXQpKSB7CisKKwkJCWRiZygiRmluaXNoZWQgcGxheWluZyBvbmNlICVkIiwgaSk7CisJCQljbGVhcl9iaXQoRUZGRUNUX1BMQVlJTkcsIGVmZmVjdC0+ZmxhZ3MpOworCisJCQlpZiAoLS1lZmZlY3QtPmNvdW50IDw9IDApIHsKKwkJCQlkYmcoIlN0b3BwZWQgJWQiLCBpKTsKKwkJCQljbGVhcl9iaXQoRUZGRUNUX1NUQVJURUQsIGVmZmVjdC0+ZmxhZ3MpOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIHsKKwkJCQlkYmcoIlN0YXJ0IGFnYWluICVkIiwgaSk7CisJCQkJZWZmZWN0LT5wbGF5X2F0ID0gREVMQVlfQ0FMQyhqaWZmaWVzLCBlZmZlY3QtPmVmZmVjdC5yZXBsYXkuZGVsYXkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJKyt0bWZmLT5lZmZlY3RzX3BsYXlpbmc7CisKKwkJc2V0X2JpdChFRkZFQ1RfUExBWUlORywgZWZmZWN0LT5mbGFncyk7CisKKwkJc3dpdGNoIChlZmZlY3QtPmVmZmVjdC50eXBlKSB7CisJCQljYXNlIEZGX1JVTUJMRToKKwkJCQlyaWdodCArPSBlZmZlY3QtPmVmZmVjdC51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlOworCQkJCWxlZnQgKz0gZWZmZWN0LT5lZmZlY3QudS5ydW1ibGUud2Vha19tYWduaXR1ZGU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCUJVRygpOworCQkJCWJyZWFrOworCQl9CisJfQorCisJbGVmdCA9IGhpZF90bWZmX3NjYWxlKGxlZnQsIHRtZmYtPnJ1bWJsZS0+bG9naWNhbF9taW5pbXVtLCB0bWZmLT5ydW1ibGUtPmxvZ2ljYWxfbWF4aW11bSk7CisJcmlnaHQgPSBoaWRfdG1mZl9zY2FsZShyaWdodCwgdG1mZi0+cnVtYmxlLT5sb2dpY2FsX21pbmltdW0sIHRtZmYtPnJ1bWJsZS0+bG9naWNhbF9tYXhpbXVtKTsKKworCWlmIChsZWZ0ICE9IHRtZmYtPnJ1bWJsZS0+dmFsdWVbMF0gfHwgcmlnaHQgIT0gdG1mZi0+cnVtYmxlLT52YWx1ZVsxXSkgeworCQl0bWZmLT5ydW1ibGUtPnZhbHVlWzBdID0gbGVmdDsKKwkJdG1mZi0+cnVtYmxlLT52YWx1ZVsxXSA9IHJpZ2h0OworCQlkYmcoIihsZWZ0LHJpZ2h0KT0oJTA4eCwgJTA4eCkiLCBsZWZ0LCByaWdodCk7CisJCWhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgdG1mZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7CisJfQorCisJaWYgKCF0ZXN0X2JpdChERVZJQ0VfQ0xPU0lORywgdG1mZi0+ZmxhZ3MpKQorCQloaWRfdG1mZl9yZWNhbGN1bGF0ZV90aW1lcih0bWZmKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRtZmYtPmxvY2ssIGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC5oIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ5MzI5YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC5oCkBAIC0wLDAgKzEsNTEwIEBACisjaWZuZGVmIF9fSElEX0gKKyNkZWZpbmUgX19ISURfSAorCisvKgorICogJElkOiBoaWQuaCx2IDEuMjQgMjAwMS8xMi8yNyAxMDozNzo0MSB2b2p0ZWNoIEV4cCAkCisgKgorICogIENvcHlyaWdodCAoYykgMTk5OSBBbmRyZWFzIEdhbAorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDAxIFZvanRlY2ggUGF2bGlrCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogU2hvdWxkIHlvdSBuZWVkIHRvIGNvbnRhY3QgbWUsIHRoZSBhdXRob3IsIHlvdSBjYW4gZG8gc28gZWl0aGVyIGJ5CisgKiBlLW1haWwgLSBtYWlsIHlvdXIgbWVzc2FnZSB0byA8dm9qdGVjaEB1Y3cuY3o+LCBvciBieSBwYXBlciBtYWlsOgorICogVm9qdGVjaCBQYXZsaWssIFNpbXVua292YSAxNTk0LCBQcmFndWUgOCwgMTgyIDAwIEN6ZWNoIFJlcHVibGljCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworLyoKKyAqIFVTQiBISUQgKEh1bWFuIEludGVyZmFjZSBEZXZpY2UpIGludGVyZmFjZSBjbGFzcyBjb2RlCisgKi8KKworI2RlZmluZSBVU0JfSU5URVJGQUNFX0NMQVNTX0hJRAkJMworCisvKgorICogSElEIGNsYXNzIHJlcXVlc3RzCisgKi8KKworI2RlZmluZSBISURfUkVRX0dFVF9SRVBPUlQJCTB4MDEKKyNkZWZpbmUgSElEX1JFUV9HRVRfSURMRQkJMHgwMgorI2RlZmluZSBISURfUkVRX0dFVF9QUk9UT0NPTAkJMHgwMworI2RlZmluZSBISURfUkVRX1NFVF9SRVBPUlQJCTB4MDkKKyNkZWZpbmUgSElEX1JFUV9TRVRfSURMRQkJMHgwQQorI2RlZmluZSBISURfUkVRX1NFVF9QUk9UT0NPTAkJMHgwQgorCisvKgorICogSElEIGNsYXNzIGRlc2NyaXB0b3IgdHlwZXMKKyAqLworCisjZGVmaW5lIEhJRF9EVF9ISUQJCQkoVVNCX1RZUEVfQ0xBU1MgfCAweDAxKQorI2RlZmluZSBISURfRFRfUkVQT1JUCQkJKFVTQl9UWVBFX0NMQVNTIHwgMHgwMikKKyNkZWZpbmUgSElEX0RUX1BIWVNJQ0FMCQkJKFVTQl9UWVBFX0NMQVNTIHwgMHgwMykKKworLyoKKyAqIFdlIHBhcnNlIGVhY2ggZGVzY3JpcHRpb24gaXRlbSBpbnRvIHRoaXMgc3RydWN0dXJlLiBTaG9ydCBpdGVtcyBkYXRhCisgKiB2YWx1ZXMgYXJlIGV4cGFuZGVkIHRvIDMyLWJpdCBzaWduZWQgaW50LCBsb25nIGl0ZW1zIGNvbnRhaW4gYSBwb2ludGVyCisgKiBpbnRvIHRoZSBkYXRhIGFyZWEuCisgKi8KKworc3RydWN0IGhpZF9pdGVtIHsKKwl1bnNpZ25lZCAgZm9ybWF0OworCV9fdTggICAgICBzaXplOworCV9fdTggICAgICB0eXBlOworCV9fdTggICAgICB0YWc7CisJdW5pb24geworCSAgICBfX3U4ICAgdTg7CisJICAgIF9fczggICBzODsKKwkgICAgX191MTYgIHUxNjsKKwkgICAgX19zMTYgIHMxNjsKKwkgICAgX191MzIgIHUzMjsKKwkgICAgX19zMzIgIHMzMjsKKwkgICAgX191OCAgKmxvbmdkYXRhOworCX0gZGF0YTsKK307CisKKy8qCisgKiBISUQgcmVwb3J0IGl0ZW0gZm9ybWF0CisgKi8KKworI2RlZmluZSBISURfSVRFTV9GT1JNQVRfU0hPUlQJMAorI2RlZmluZSBISURfSVRFTV9GT1JNQVRfTE9ORwkxCisKKy8qCisgKiBTcGVjaWFsIHRhZyBpbmRpY2F0aW5nIGxvbmcgaXRlbXMKKyAqLworCisjZGVmaW5lIEhJRF9JVEVNX1RBR19MT05HCTE1CisKKy8qCisgKiBISUQgcmVwb3J0IGRlc2NyaXB0b3IgaXRlbSB0eXBlIChwcmVmaXggYml0IDIsMykKKyAqLworCisjZGVmaW5lIEhJRF9JVEVNX1RZUEVfTUFJTgkJMAorI2RlZmluZSBISURfSVRFTV9UWVBFX0dMT0JBTAkJMQorI2RlZmluZSBISURfSVRFTV9UWVBFX0xPQ0FMCQkyCisjZGVmaW5lIEhJRF9JVEVNX1RZUEVfUkVTRVJWRUQJCTMKKworLyoKKyAqIEhJRCByZXBvcnQgZGVzY3JpcHRvciBtYWluIGl0ZW0gdGFncworICovCisKKyNkZWZpbmUgSElEX01BSU5fSVRFTV9UQUdfSU5QVVQJCQk4CisjZGVmaW5lIEhJRF9NQUlOX0lURU1fVEFHX09VVFBVVAkJOQorI2RlZmluZSBISURfTUFJTl9JVEVNX1RBR19GRUFUVVJFCQkxMQorI2RlZmluZSBISURfTUFJTl9JVEVNX1RBR19CRUdJTl9DT0xMRUNUSU9OCTEwCisjZGVmaW5lIEhJRF9NQUlOX0lURU1fVEFHX0VORF9DT0xMRUNUSU9OCTEyCisKKy8qCisgKiBISUQgcmVwb3J0IGRlc2NyaXB0b3IgbWFpbiBpdGVtIGNvbnRlbnRzCisgKi8KKworI2RlZmluZSBISURfTUFJTl9JVEVNX0NPTlNUQU5UCQkweDAwMQorI2RlZmluZSBISURfTUFJTl9JVEVNX1ZBUklBQkxFCQkweDAwMgorI2RlZmluZSBISURfTUFJTl9JVEVNX1JFTEFUSVZFCQkweDAwNAorI2RlZmluZSBISURfTUFJTl9JVEVNX1dSQVAJCTB4MDA4CQorI2RlZmluZSBISURfTUFJTl9JVEVNX05PTkxJTkVBUgkJMHgwMTAKKyNkZWZpbmUgSElEX01BSU5fSVRFTV9OT19QUkVGRVJSRUQJMHgwMjAKKyNkZWZpbmUgSElEX01BSU5fSVRFTV9OVUxMX1NUQVRFCTB4MDQwCisjZGVmaW5lIEhJRF9NQUlOX0lURU1fVk9MQVRJTEUJCTB4MDgwCisjZGVmaW5lIEhJRF9NQUlOX0lURU1fQlVGRkVSRURfQllURQkweDEwMAorCisvKgorICogSElEIHJlcG9ydCBkZXNjcmlwdG9yIGNvbGxlY3Rpb24gaXRlbSB0eXBlcworICovCisKKyNkZWZpbmUgSElEX0NPTExFQ1RJT05fUEhZU0lDQUwJCTAKKyNkZWZpbmUgSElEX0NPTExFQ1RJT05fQVBQTElDQVRJT04JMQorI2RlZmluZSBISURfQ09MTEVDVElPTl9MT0dJQ0FMCQkyCisKKy8qCisgKiBISUQgcmVwb3J0IGRlc2NyaXB0b3IgZ2xvYmFsIGl0ZW0gdGFncworICovCisKKyNkZWZpbmUgSElEX0dMT0JBTF9JVEVNX1RBR19VU0FHRV9QQUdFCQkwCisjZGVmaW5lIEhJRF9HTE9CQUxfSVRFTV9UQUdfTE9HSUNBTF9NSU5JTVVNCTEKKyNkZWZpbmUgSElEX0dMT0JBTF9JVEVNX1RBR19MT0dJQ0FMX01BWElNVU0JMgorI2RlZmluZSBISURfR0xPQkFMX0lURU1fVEFHX1BIWVNJQ0FMX01JTklNVU0JMworI2RlZmluZSBISURfR0xPQkFMX0lURU1fVEFHX1BIWVNJQ0FMX01BWElNVU0JNAorI2RlZmluZSBISURfR0xPQkFMX0lURU1fVEFHX1VOSVRfRVhQT05FTlQJNQorI2RlZmluZSBISURfR0xPQkFMX0lURU1fVEFHX1VOSVQJCTYKKyNkZWZpbmUgSElEX0dMT0JBTF9JVEVNX1RBR19SRVBPUlRfU0laRQkJNworI2RlZmluZSBISURfR0xPQkFMX0lURU1fVEFHX1JFUE9SVF9JRAkJOAorI2RlZmluZSBISURfR0xPQkFMX0lURU1fVEFHX1JFUE9SVF9DT1VOVAk5CisjZGVmaW5lIEhJRF9HTE9CQUxfSVRFTV9UQUdfUFVTSAkJMTAKKyNkZWZpbmUgSElEX0dMT0JBTF9JVEVNX1RBR19QT1AJCQkxMQorCisvKgorICogSElEIHJlcG9ydCBkZXNjcmlwdG9yIGxvY2FsIGl0ZW0gdGFncworICovCisKKyNkZWZpbmUgSElEX0xPQ0FMX0lURU1fVEFHX1VTQUdFCQkwCisjZGVmaW5lIEhJRF9MT0NBTF9JVEVNX1RBR19VU0FHRV9NSU5JTVVNCTEKKyNkZWZpbmUgSElEX0xPQ0FMX0lURU1fVEFHX1VTQUdFX01BWElNVU0JMgorI2RlZmluZSBISURfTE9DQUxfSVRFTV9UQUdfREVTSUdOQVRPUl9JTkRFWAkzCisjZGVmaW5lIEhJRF9MT0NBTF9JVEVNX1RBR19ERVNJR05BVE9SX01JTklNVU0JNAorI2RlZmluZSBISURfTE9DQUxfSVRFTV9UQUdfREVTSUdOQVRPUl9NQVhJTVVNCTUKKyNkZWZpbmUgSElEX0xPQ0FMX0lURU1fVEFHX1NUUklOR19JTkRFWAkJNworI2RlZmluZSBISURfTE9DQUxfSVRFTV9UQUdfU1RSSU5HX01JTklNVU0JOAorI2RlZmluZSBISURfTE9DQUxfSVRFTV9UQUdfU1RSSU5HX01BWElNVU0JOQorI2RlZmluZSBISURfTE9DQUxfSVRFTV9UQUdfREVMSU1JVEVSCQkxMAorCisvKgorICogSElEIHVzYWdlIHRhYmxlcworICovCisKKyNkZWZpbmUgSElEX1VTQUdFX1BBR0UJCTB4ZmZmZjAwMDAKKworI2RlZmluZSBISURfVVBfVU5ERUZJTkVECTB4MDAwMDAwMDAKKyNkZWZpbmUgSElEX1VQX0dFTkRFU0sgCQkweDAwMDEwMDAwCisjZGVmaW5lIEhJRF9VUF9LRVlCT0FSRCAJMHgwMDA3MDAwMAorI2RlZmluZSBISURfVVBfTEVEIAkJMHgwMDA4MDAwMAorI2RlZmluZSBISURfVVBfQlVUVE9OIAkJMHgwMDA5MDAwMAorI2RlZmluZSBISURfVVBfT1JESU5BTCAJCTB4MDAwYTAwMDAKKyNkZWZpbmUgSElEX1VQX0NPTlNVTUVSCQkweDAwMGMwMDAwCisjZGVmaW5lIEhJRF9VUF9ESUdJVElaRVIgCTB4MDAwZDAwMDAKKyNkZWZpbmUgSElEX1VQX1BJRCAJCTB4MDAwZjAwMDAKKyNkZWZpbmUgSElEX1VQX0hQVkVORE9SICAgICAgICAgMHhmZjdmMDAwMAorI2RlZmluZSBISURfVVBfTVNWRU5ET1IJCTB4ZmYwMDAwMDAKKworI2RlZmluZSBISURfVVNBR0UJCTB4MDAwMGZmZmYKKworI2RlZmluZSBISURfR0RfUE9JTlRFUgkJMHgwMDAxMDAwMQorI2RlZmluZSBISURfR0RfTU9VU0UJCTB4MDAwMTAwMDIKKyNkZWZpbmUgSElEX0dEX0pPWVNUSUNLCQkweDAwMDEwMDA0CisjZGVmaW5lIEhJRF9HRF9HQU1FUEFECQkweDAwMDEwMDA1CisjZGVmaW5lIEhJRF9HRF9LRVlCT0FSRAkJMHgwMDAxMDAwNgorI2RlZmluZSBISURfR0RfS0VZUEFECQkweDAwMDEwMDA3CisjZGVmaW5lIEhJRF9HRF9NVUxUSUFYSVMJMHgwMDAxMDAwOAorI2RlZmluZSBISURfR0RfWAkJMHgwMDAxMDAzMAorI2RlZmluZSBISURfR0RfWQkJMHgwMDAxMDAzMQorI2RlZmluZSBISURfR0RfWgkJMHgwMDAxMDAzMgorI2RlZmluZSBISURfR0RfUlgJCTB4MDAwMTAwMzMKKyNkZWZpbmUgSElEX0dEX1JZCQkweDAwMDEwMDM0CisjZGVmaW5lIEhJRF9HRF9SWgkJMHgwMDAxMDAzNQorI2RlZmluZSBISURfR0RfU0xJREVSCQkweDAwMDEwMDM2CisjZGVmaW5lIEhJRF9HRF9ESUFMCQkweDAwMDEwMDM3CisjZGVmaW5lIEhJRF9HRF9XSEVFTAkJMHgwMDAxMDAzOAorI2RlZmluZSBISURfR0RfSEFUU1dJVENICTB4MDAwMTAwMzkKKyNkZWZpbmUgSElEX0dEX0JVRkZFUgkJMHgwMDAxMDAzYQorI2RlZmluZSBISURfR0RfQllURUNPVU5UCTB4MDAwMTAwM2IKKyNkZWZpbmUgSElEX0dEX01PVElPTgkJMHgwMDAxMDAzYworI2RlZmluZSBISURfR0RfU1RBUlQJCTB4MDAwMTAwM2QKKyNkZWZpbmUgSElEX0dEX1NFTEVDVAkJMHgwMDAxMDAzZQorI2RlZmluZSBISURfR0RfVlgJCTB4MDAwMTAwNDAKKyNkZWZpbmUgSElEX0dEX1ZZCQkweDAwMDEwMDQxCisjZGVmaW5lIEhJRF9HRF9WWgkJMHgwMDAxMDA0MgorI2RlZmluZSBISURfR0RfVkJSWAkJMHgwMDAxMDA0MworI2RlZmluZSBISURfR0RfVkJSWQkJMHgwMDAxMDA0NAorI2RlZmluZSBISURfR0RfVkJSWgkJMHgwMDAxMDA0NQorI2RlZmluZSBISURfR0RfVk5PCQkweDAwMDEwMDQ2CisjZGVmaW5lIEhJRF9HRF9GRUFUVVJFCQkweDAwMDEwMDQ3CisjZGVmaW5lIEhJRF9HRF9VUAkJMHgwMDAxMDA5MAorI2RlZmluZSBISURfR0RfRE9XTgkJMHgwMDAxMDA5MQorI2RlZmluZSBISURfR0RfUklHSFQJCTB4MDAwMTAwOTIKKyNkZWZpbmUgSElEX0dEX0xFRlQJCTB4MDAwMTAwOTMKKworLyoKKyAqIEhJRCByZXBvcnQgdHlwZXMgLS0tIE91Y2ghIEhJRCBzcGVjIHNheXMgMSAyIDMhCisgKi8KKworI2RlZmluZSBISURfSU5QVVRfUkVQT1JUCTAKKyNkZWZpbmUgSElEX09VVFBVVF9SRVBPUlQJMQorI2RlZmluZSBISURfRkVBVFVSRV9SRVBPUlQJMgorCisvKgorICogSElEIGRldmljZSBxdWlya3MuCisgKi8KKworI2RlZmluZSBISURfUVVJUktfSU5WRVJUCQkJMHgwMDEKKyNkZWZpbmUgSElEX1FVSVJLX05PVE9VQ0gJCQkweDAwMgorI2RlZmluZSBISURfUVVJUktfSUdOT1JFCQkJMHgwMDQKKyNkZWZpbmUgSElEX1FVSVJLX05PR0VUCQkJCTB4MDA4CisjZGVmaW5lIEhJRF9RVUlSS19ISURERVYJCQkweDAxMAorI2RlZmluZSBISURfUVVJUktfQkFEUEFECQkJMHgwMjAKKyNkZWZpbmUgSElEX1FVSVJLX01VTFRJX0lOUFVUCQkJMHgwNDAKKyNkZWZpbmUgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLXzcJCTB4MDgwCisjZGVmaW5lIEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS181CQkweDEwMAorI2RlZmluZSBISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfT04JCTB4MjAwCisKKy8qCisgKiBUaGlzIGlzIHRoZSBnbG9iYWwgZW52aXJvbm1lbnQgb2YgdGhlIHBhcnNlci4gVGhpcyBpbmZvcm1hdGlvbiBpcworICogcGVyc2lzdGVudCBmb3IgbWFpbi1pdGVtcy4gVGhlIGdsb2JhbCBlbnZpcm9ubWVudCBjYW4gYmUgc2F2ZWQgYW5kCisgKiByZXN0b3JlZCB3aXRoIFBVU0gvUE9QIHN0YXRlbWVudHMuCisgKi8KKworc3RydWN0IGhpZF9nbG9iYWwgeworCXVuc2lnbmVkIHVzYWdlX3BhZ2U7CisJX19zMzIgICAgbG9naWNhbF9taW5pbXVtOworCV9fczMyICAgIGxvZ2ljYWxfbWF4aW11bTsKKwlfX3MzMiAgICBwaHlzaWNhbF9taW5pbXVtOworCV9fczMyICAgIHBoeXNpY2FsX21heGltdW07CisJX19zMzIgICAgdW5pdF9leHBvbmVudDsKKwl1bnNpZ25lZCB1bml0OworCXVuc2lnbmVkIHJlcG9ydF9pZDsKKwl1bnNpZ25lZCByZXBvcnRfc2l6ZTsKKwl1bnNpZ25lZCByZXBvcnRfY291bnQ7Cit9OworCisvKgorICogVGhpcyBpcyB0aGUgbG9jYWwgZW52aXJvbm1lbnQuIEl0IGlzIHBlcnNpc3RlbnQgdXAgdGhlIG5leHQgbWFpbi1pdGVtLgorICovCisKKyNkZWZpbmUgSElEX01BWF9ERVNDUklQVE9SX1NJWkUJCTQwOTYKKyNkZWZpbmUgSElEX01BWF9VU0FHRVMJCQkxMDI0CisjZGVmaW5lIEhJRF9ERUZBVUxUX05VTV9DT0xMRUNUSU9OUwkxNgorCitzdHJ1Y3QgaGlkX2xvY2FsIHsKKwl1bnNpZ25lZCB1c2FnZVtISURfTUFYX1VTQUdFU107IC8qIHVzYWdlIGFycmF5ICovCisJdW5zaWduZWQgY29sbGVjdGlvbl9pbmRleFtISURfTUFYX1VTQUdFU107IC8qIGNvbGxlY3Rpb24gaW5kZXggYXJyYXkgKi8KKwl1bnNpZ25lZCB1c2FnZV9pbmRleDsKKwl1bnNpZ25lZCB1c2FnZV9taW5pbXVtOworCXVuc2lnbmVkIGRlbGltaXRlcl9kZXB0aDsKKwl1bnNpZ25lZCBkZWxpbWl0ZXJfYnJhbmNoOworfTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIGNvbGxlY3Rpb24gc3RhY2suIFdlIGNsaW1iIHVwIHRoZSBzdGFjayB0byBkZXRlcm1pbmUKKyAqIGFwcGxpY2F0aW9uIGFuZCBmdW5jdGlvbiBvZiBlYWNoIGZpZWxkLgorICovCisKK3N0cnVjdCBoaWRfY29sbGVjdGlvbiB7CisJdW5zaWduZWQgdHlwZTsKKwl1bnNpZ25lZCB1c2FnZTsKKwl1bnNpZ25lZCBsZXZlbDsKK307CisKK3N0cnVjdCBoaWRfdXNhZ2UgeworCXVuc2lnbmVkICBoaWQ7CQkJLyogaGlkIHVzYWdlIGNvZGUgKi8KKwl1bnNpZ25lZCAgY29sbGVjdGlvbl9pbmRleDsJLyogaW5kZXggaW50byBjb2xsZWN0aW9uIGFycmF5ICovCisJLyogaGlkaW5wdXQgZGF0YSAqLworCV9fdTE2ICAgICBjb2RlOwkJCS8qIGlucHV0IGRyaXZlciBjb2RlICovCisJX191OCAgICAgIHR5cGU7CQkJLyogaW5wdXQgZHJpdmVyIHR5cGUgKi8KKwlfX3M4CSAgaGF0X21pbjsJCS8qIGhhdCBzd2l0Y2ggZnVuICovCisJX19zOAkgIGhhdF9tYXg7CQkvKiBkaXR0byAqLworCV9fczgJICBoYXRfZGlyOwkJLyogZGl0dG8gKi8KK307CisKK3N0cnVjdCBoaWRfaW5wdXQ7CisKK3N0cnVjdCBoaWRfZmllbGQgeworCXVuc2lnbmVkICBwaHlzaWNhbDsJCS8qIHBoeXNpY2FsIHVzYWdlIGZvciB0aGlzIGZpZWxkICovCisJdW5zaWduZWQgIGxvZ2ljYWw7CQkvKiBsb2dpY2FsIHVzYWdlIGZvciB0aGlzIGZpZWxkICovCisJdW5zaWduZWQgIGFwcGxpY2F0aW9uOwkJLyogYXBwbGljYXRpb24gdXNhZ2UgZm9yIHRoaXMgZmllbGQgKi8KKwlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZTsJLyogdXNhZ2UgdGFibGUgZm9yIHRoaXMgZnVuY3Rpb24gKi8KKwl1bnNpZ25lZCAgbWF4dXNhZ2U7CQkvKiBtYXhpbXVtIHVzYWdlIGluZGV4ICovCisJdW5zaWduZWQgIGZsYWdzOwkJLyogbWFpbi1pdGVtIGZsYWdzIChpLmUuIHZvbGF0aWxlLGFycmF5LGNvbnN0YW50KSAqLworCXVuc2lnbmVkICByZXBvcnRfb2Zmc2V0OwkvKiBiaXQgb2Zmc2V0IGluIHRoZSByZXBvcnQgKi8KKwl1bnNpZ25lZCAgcmVwb3J0X3NpemU7CQkvKiBzaXplIG9mIHRoaXMgZmllbGQgaW4gdGhlIHJlcG9ydCAqLworCXVuc2lnbmVkICByZXBvcnRfY291bnQ7CQkvKiBudW1iZXIgb2YgdGhpcyBmaWVsZCBpbiB0aGUgcmVwb3J0ICovCisJdW5zaWduZWQgIHJlcG9ydF90eXBlOwkJLyogKGlucHV0LG91dHB1dCxmZWF0dXJlKSAqLworCV9fczMyICAgICp2YWx1ZTsJCS8qIGxhc3Qga25vd24gdmFsdWUocykgKi8KKwlfX3MzMiAgICAgbG9naWNhbF9taW5pbXVtOworCV9fczMyICAgICBsb2dpY2FsX21heGltdW07CisJX19zMzIgICAgIHBoeXNpY2FsX21pbmltdW07CisJX19zMzIgICAgIHBoeXNpY2FsX21heGltdW07CisJX19zMzIgICAgIHVuaXRfZXhwb25lbnQ7CisJdW5zaWduZWQgIHVuaXQ7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsJLyogYXNzb2NpYXRlZCByZXBvcnQgKi8KKwl1bnNpZ25lZCBpbmRleDsJCQkvKiBpbmRleCBpbnRvIHJlcG9ydC0+ZmllbGRbXSAqLworCS8qIGhpZGlucHV0IGRhdGEgKi8KKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dDsJLyogYXNzb2NpYXRlZCBpbnB1dCBzdHJ1Y3R1cmUgKi8KKwlfX3UxNiBkcGFkOwkJCS8qIGRwYWQgaW5wdXQgY29kZSAqLworfTsKKworI2RlZmluZSBISURfTUFYX0ZJRUxEUyA2NAorCitzdHJ1Y3QgaGlkX3JlcG9ydCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXVuc2lnbmVkIGlkOwkJCQkJLyogaWQgb2YgdGhpcyByZXBvcnQgKi8KKwl1bnNpZ25lZCB0eXBlOwkJCQkJLyogcmVwb3J0IHR5cGUgKi8KKwlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZFtISURfTUFYX0ZJRUxEU107CS8qIGZpZWxkcyBvZiB0aGUgcmVwb3J0ICovCisJdW5zaWduZWQgbWF4ZmllbGQ7CQkJCS8qIG1heGltdW0gdmFsaWQgZmllbGQgaW5kZXggKi8KKwl1bnNpZ25lZCBzaXplOwkJCQkJLyogc2l6ZSBvZiB0aGUgcmVwb3J0IChiaXRzKSAqLworCXN0cnVjdCBoaWRfZGV2aWNlICpkZXZpY2U7CQkJLyogYXNzb2NpYXRlZCBkZXZpY2UgKi8KK307CisKK3N0cnVjdCBoaWRfcmVwb3J0X2VudW0geworCXVuc2lnbmVkIG51bWJlcmVkOworCXN0cnVjdCBsaXN0X2hlYWQgcmVwb3J0X2xpc3Q7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydF9pZF9oYXNoWzI1Nl07Cit9OworCisjZGVmaW5lIEhJRF9SRVBPUlRfVFlQRVMgMworCisjZGVmaW5lIEhJRF9CVUZGRVJfU0laRQkJNjQJCS8qIHVzZSA2NCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGFsbCBwb3NzaWJsZSBwYWNrZXRsZW4gKi8KKyNkZWZpbmUgSElEX0NPTlRST0xfRklGT19TSVpFCTI1NgkJLyogdG8gaW5pdCBkZXZpY2VzIHdpdGggPjEwMCByZXBvcnRzICovCisjZGVmaW5lIEhJRF9PVVRQVVRfRklGT19TSVpFCTY0CisKK3N0cnVjdCBoaWRfY29udHJvbF9maWZvIHsKKwl1bnNpZ25lZCBjaGFyIGRpcjsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworfTsKKworI2RlZmluZSBISURfQ0xBSU1FRF9JTlBVVAkxCisjZGVmaW5lIEhJRF9DTEFJTUVEX0hJRERFVgkyCisKKyNkZWZpbmUgSElEX0NUUkxfUlVOTklORwkxCisjZGVmaW5lIEhJRF9PVVRfUlVOTklORwkJMgorCitzdHJ1Y3QgaGlkX2lucHV0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzdHJ1Y3QgaW5wdXRfZGV2IGlucHV0OworfTsKKworc3RydWN0IGhpZF9kZXZpY2UgewkJCQkJCQkvKiBkZXZpY2UgcmVwb3J0IGRlc2NyaXB0b3IgKi8KKwkgX191OCAqcmRlc2M7CisJdW5zaWduZWQgcnNpemU7CisJc3RydWN0IGhpZF9jb2xsZWN0aW9uICpjb2xsZWN0aW9uOwkJCQkvKiBMaXN0IG9mIEhJRCBjb2xsZWN0aW9ucyAqLworCXVuc2lnbmVkIGNvbGxlY3Rpb25fc2l6ZTsJCQkJCS8qIE51bWJlciBvZiBhbGxvY2F0ZWQgaGlkX2NvbGxlY3Rpb25zICovCisJdW5zaWduZWQgbWF4Y29sbGVjdGlvbjsJCQkJCQkvKiBOdW1iZXIgb2YgcGFyc2VkIGNvbGxlY3Rpb25zICovCisJdW5zaWduZWQgbWF4YXBwbGljYXRpb247CQkJCQkvKiBOdW1iZXIgb2YgYXBwbGljYXRpb25zICovCisJdW5zaWduZWQgdmVyc2lvbjsJCQkJCQkvKiBISUQgdmVyc2lvbiAqLworCXVuc2lnbmVkIGNvdW50cnk7CQkJCQkJLyogSElEIGNvdW50cnkgKi8KKwlzdHJ1Y3QgaGlkX3JlcG9ydF9lbnVtIHJlcG9ydF9lbnVtW0hJRF9SRVBPUlRfVFlQRVNdOworCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsJCQkJCQkvKiBVU0IgZGV2aWNlICovCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CQkJCQkvKiBVU0IgaW50ZXJmYWNlICovCisJaW50IGlmbnVtOwkJCQkJCQkvKiBVU0IgaW50ZXJmYWNlIG51bWJlciAqLworCisJdW5zaWduZWQgbG9uZyBpb2ZsOwkJCQkJCS8qIEkvTyBmbGFncyAoQ1RSTF9SVU5OSU5HLCBPVVRfUlVOTklORykgKi8KKworCXN0cnVjdCB1cmIgKnVyYmluOwkJCQkJCS8qIElucHV0IFVSQiAqLworCWNoYXIgKmluYnVmOwkJCQkJCQkvKiBJbnB1dCBidWZmZXIgKi8KKwlkbWFfYWRkcl90IGluYnVmX2RtYTsJCQkJCQkvKiBJbnB1dCBidWZmZXIgZG1hICovCisKKwlzdHJ1Y3QgdXJiICp1cmJjdHJsOwkJCQkJCS8qIENvbnRyb2wgVVJCICovCisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3I7CQkJCQkvKiBDb250cm9sIHJlcXVlc3Qgc3RydWN0ICovCisJZG1hX2FkZHJfdCBjcl9kbWE7CQkJCQkJLyogQ29udHJvbCByZXF1ZXN0IHN0cnVjdCBkbWEgKi8KKwlzdHJ1Y3QgaGlkX2NvbnRyb2xfZmlmbyBjdHJsW0hJRF9DT05UUk9MX0ZJRk9fU0laRV07CQkvKiBDb250cm9sIGZpZm8gKi8KKwl1bnNpZ25lZCBjaGFyIGN0cmxoZWFkLCBjdHJsdGFpbDsJCQkJLyogQ29udHJvbCBmaWZvIGhlYWQgJiB0YWlsICovCisJY2hhciAqY3RybGJ1ZjsJCQkJCQkJLyogQ29udHJvbCBidWZmZXIgKi8KKwlkbWFfYWRkcl90IGN0cmxidWZfZG1hOwkJCQkJCS8qIENvbnRyb2wgYnVmZmVyIGRtYSAqLworCXNwaW5sb2NrX3QgY3RybGxvY2s7CQkJCQkJLyogQ29udHJvbCBmaWZvIHNwaW5sb2NrICovCisKKwlzdHJ1Y3QgdXJiICp1cmJvdXQ7CQkJCQkJLyogT3V0cHV0IFVSQiAqLworCXN0cnVjdCBoaWRfcmVwb3J0ICpvdXRbSElEX0NPTlRST0xfRklGT19TSVpFXTsJCQkvKiBPdXRwdXQgcGlwZSBmaWZvICovCisJdW5zaWduZWQgY2hhciBvdXRoZWFkLCBvdXR0YWlsOwkJCQkJLyogT3V0cHV0IHBpcGUgZmlmbyBoZWFkICYgdGFpbCAqLworCWNoYXIgKm91dGJ1ZjsJCQkJCQkJLyogT3V0cHV0IGJ1ZmZlciAqLworCWRtYV9hZGRyX3Qgb3V0YnVmX2RtYTsJCQkJCQkvKiBPdXRwdXQgYnVmZmVyIGRtYSAqLworCXNwaW5sb2NrX3Qgb3V0bG9jazsJCQkJCQkvKiBPdXRwdXQgZmlmbyBzcGlubG9jayAqLworCisJdW5zaWduZWQgY2xhaW1lZDsJCQkJCQkvKiBDbGFpbWVkIGJ5IGhpZGlucHV0LCBoaWRkZXY/ICovCQorCXVuc2lnbmVkIHF1aXJrczsJCQkJCQkvKiBWYXJpb3VzIHF1aXJrcyB0aGUgZGV2aWNlIGNhbiBwdWxsIG9uIHVzICovCisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGlucHV0czsJCQkJCS8qIFRoZSBsaXN0IG9mIGlucHV0cyAqLworCXZvaWQgKmhpZGRldjsJCQkJCQkJLyogVGhlIGhpZGRldiBzdHJ1Y3R1cmUgKi8KKwlpbnQgbWlub3I7CQkJCQkJCS8qIEhpZGRldiBtaW5vciBudW1iZXIgKi8KKworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CQkJCQkJLyogRm9yIHNsZWVwaW5nICovCisKKwlpbnQgb3BlbjsJCQkJCQkJLyogaXMgdGhlIGRldmljZSBvcGVuIGJ5IGFueW9uZT8gKi8KKwljaGFyIG5hbWVbMTI4XTsJCQkJCQkJLyogRGV2aWNlIG5hbWUgKi8KKwljaGFyIHBoeXNbNjRdOwkJCQkJCQkvKiBEZXZpY2UgcGh5c2ljYWwgbG9jYXRpb24gKi8KKwljaGFyIHVuaXFbNjRdOwkJCQkJCQkvKiBEZXZpY2UgdW5pcXVlIGlkZW50aWZpZXIgKHNlcmlhbCAjKSAqLworCisJdm9pZCAqZmZfcHJpdmF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByaXZhdGUgZGF0YSBmb3IgdGhlIGZvcmNlLWZlZWRiYWNrIGRyaXZlciAqLworCXZvaWQgKCpmZl9leGl0KShzdHJ1Y3QgaGlkX2RldmljZSopOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDYWxsZWQgYnkgaGlkX2V4aXRfZmYoaGlkKSAqLworCWludCAoKmZmX2V2ZW50KShzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKKwkJCXVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKTsKK307CisKKyNkZWZpbmUgSElEX0dMT0JBTF9TVEFDS19TSVpFIDQKKyNkZWZpbmUgSElEX0NPTExFQ1RJT05fU1RBQ0tfU0laRSA0CisKK3N0cnVjdCBoaWRfcGFyc2VyIHsKKwlzdHJ1Y3QgaGlkX2dsb2JhbCAgICAgZ2xvYmFsOworCXN0cnVjdCBoaWRfZ2xvYmFsICAgICBnbG9iYWxfc3RhY2tbSElEX0dMT0JBTF9TVEFDS19TSVpFXTsKKwl1bnNpZ25lZCAgICAgICAgICAgICAgZ2xvYmFsX3N0YWNrX3B0cjsKKwlzdHJ1Y3QgaGlkX2xvY2FsICAgICAgbG9jYWw7CisJdW5zaWduZWQgICAgICAgICAgICAgIGNvbGxlY3Rpb25fc3RhY2tbSElEX0NPTExFQ1RJT05fU1RBQ0tfU0laRV07CisJdW5zaWduZWQgICAgICAgICAgICAgIGNvbGxlY3Rpb25fc3RhY2tfcHRyOworCXN0cnVjdCBoaWRfZGV2aWNlICAgICpkZXZpY2U7Cit9OworCitzdHJ1Y3QgaGlkX2NsYXNzX2Rlc2NyaXB0b3IgeworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKwlfX3UxNiB3RGVzY3JpcHRvckxlbmd0aDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaGlkX2Rlc2NyaXB0b3IgeworCV9fdTggIGJMZW5ndGg7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOworCV9fdTE2IGJjZEhJRDsKKwlfX3U4ICBiQ291bnRyeUNvZGU7CisJX191OCAgYk51bURlc2NyaXB0b3JzOworCisJc3RydWN0IGhpZF9jbGFzc19kZXNjcmlwdG9yIGRlc2NbMV07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2lmZGVmIERFQlVHCisjaW5jbHVkZSAiaGlkLWRlYnVnLmgiCisjZWxzZQorI2RlZmluZSBoaWRfZHVtcF9pbnB1dChhLGIpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgaGlkX2R1bXBfZGV2aWNlKGMpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgaGlkX2R1bXBfZmllbGQoYSxiKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHJlc29sdl91c2FnZShhKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSByZXNvbHZfZXZlbnQoYSxiKQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0hJRElOUFVUCisvKiBBcHBsaWNhdGlvbnMgZnJvbSBISUQgVXNhZ2UgVGFibGVzIDQvOC85OSBWZXJzaW9uIDEuMSAqLworLyogV2UgaWdub3JlIGEgZmV3IGlucHV0IGFwcGxpY2F0aW9ucyB0aGF0IGFyZSBub3Qgd2lkZWx5IHVzZWQgKi8KKyNkZWZpbmUgSVNfSU5QVVRfQVBQTElDQVRJT04oYSkgKCgoYSA+PSAweDAwMDEwMDAwKSAmJiAoYSA8PSAweDAwMDEwMDA4KSkgfHwgKGEgPT0gMHgwMDAxMDA4MCkgfHwgKGEgPT0gMHgwMDBjMDAwMSkpCitleHRlcm4gdm9pZCBoaWRpbnB1dF9oaWRfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKiwgc3RydWN0IGhpZF9maWVsZCAqLCBzdHJ1Y3QgaGlkX3VzYWdlICosIF9fczMyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBoaWRpbnB1dF9yZXBvcnRfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCk7CitleHRlcm4gaW50IGhpZGlucHV0X2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKik7CitleHRlcm4gdm9pZCBoaWRpbnB1dF9kaXNjb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICopOworI2Vsc2UKKyNkZWZpbmUgSVNfSU5QVVRfQVBQTElDQVRJT04oYSkgKDApCitzdGF0aWMgaW5saW5lIHZvaWQgaGlkaW5wdXRfaGlkX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUsIHN0cnVjdCBwdF9yZWdzICpyZWdzKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBoaWRpbnB1dF9yZXBvcnRfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCkgeyB9CitzdGF0aWMgaW5saW5lIGludCBoaWRpbnB1dF9jb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpIHsgcmV0dXJuIC1FTk9ERVY7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBoaWRpbnB1dF9kaXNjb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpIHsgfQorI2VuZGlmCisKK2ludCBoaWRfb3BlbihzdHJ1Y3QgaGlkX2RldmljZSAqKTsKK3ZvaWQgaGlkX2Nsb3NlKHN0cnVjdCBoaWRfZGV2aWNlICopOworaW50IGhpZF9zZXRfZmllbGQoc3RydWN0IGhpZF9maWVsZCAqLCB1bnNpZ25lZCwgX19zMzIpOwordm9pZCBoaWRfc3VibWl0X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqLCB1bnNpZ25lZCBjaGFyIGRpcik7Cit2b2lkIGhpZF9pbml0X3JlcG9ydHMoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCk7CitzdHJ1Y3QgaGlkX2ZpZWxkICpoaWRfZmluZF9maWVsZF9ieV91c2FnZShzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBfX3UzMiB3YW50ZWRfdXNhZ2UsIGludCB0eXBlKTsKK2ludCBoaWRfd2FpdF9pbyhzdHJ1Y3QgaGlkX2RldmljZSogaGlkKTsKKworCisjaWZkZWYgQ09ORklHX0hJRF9GRgoraW50IGhpZF9mZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGhpZF9mZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpIHsgcmV0dXJuIC0xOyB9CisjZW5kaWYKK3N0YXRpYyBpbmxpbmUgdm9pZCBoaWRfZmZfZXhpdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCWlmIChoaWQtPmZmX2V4aXQpCisJCWhpZC0+ZmZfZXhpdChoaWQpOworfQorc3RhdGljIGlubGluZSBpbnQgaGlkX2ZmX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LAorCQkJdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCit7CisJaWYgKGhpZC0+ZmZfZXZlbnQpCisJCXJldHVybiBoaWQtPmZmX2V2ZW50KGhpZCwgaW5wdXQsIHR5cGUsIGNvZGUsIHZhbHVlKTsKKwlyZXR1cm4gLUVOT1NZUzsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZGRldi5jIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkZGV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZiN2M5MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZGRldi5jCkBAIC0wLDAgKzEsODQ0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAwMSBQYXVsIFN0ZXdhcnQKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDEgVm9qdGVjaCBQYXZsaWsKKyAqCisgKiAgSElEIGNoYXIgZGV2aWNlcywgZ2l2aW5nIGFjY2VzcyB0byByYXcgSElEIGRldmljZSBldmVudHMuCisgKgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqIFNob3VsZCB5b3UgbmVlZCB0byBjb250YWN0IG1lLCB0aGUgYXV0aG9yLCB5b3UgY2FuIGRvIHNvIGVpdGhlciBieQorICogZS1tYWlsIC0gbWFpbCB5b3VyIG1lc3NhZ2UgdG8gUGF1bCBTdGV3YXJ0IDxzdGV3YXJ0QHdldGxvZ2ljLm5ldD4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgImhpZC5oIgorI2luY2x1ZGUgPGxpbnV4L2hpZGRldi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgorCisjaWZkZWYgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUworI2RlZmluZSBISURERVZfTUlOT1JfQkFTRQkwCisjZGVmaW5lIEhJRERFVl9NSU5PUlMJCTI1NgorI2Vsc2UKKyNkZWZpbmUgSElEREVWX01JTk9SX0JBU0UJOTYKKyNkZWZpbmUgSElEREVWX01JTk9SUwkJMTYKKyNlbmRpZgorI2RlZmluZSBISURERVZfQlVGRkVSX1NJWkUJNjQKKworc3RydWN0IGhpZGRldiB7CisJaW50IGV4aXN0OworCWludCBvcGVuOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZDsKKwlzdHJ1Y3QgaGlkZGV2X2xpc3QgKmxpc3Q7Cit9OworCitzdHJ1Y3QgaGlkZGV2X2xpc3QgeworCXN0cnVjdCBoaWRkZXZfdXNhZ2VfcmVmIGJ1ZmZlcltISURERVZfQlVGRkVSX1NJWkVdOworCWludCBoZWFkOworCWludCB0YWlsOworCXVuc2lnbmVkIGZsYWdzOworCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmM7CisJc3RydWN0IGhpZGRldiAqaGlkZGV2OworCXN0cnVjdCBoaWRkZXZfbGlzdCAqbmV4dDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgaGlkZGV2ICpoaWRkZXZfdGFibGVbSElEREVWX01JTk9SU107CisKKy8qCisgKiBGaW5kIGEgcmVwb3J0LCBnaXZlbiB0aGUgcmVwb3J0J3MgdHlwZSBhbmQgSUQuICBUaGUgSUQgY2FuIGJlIHNwZWNpZmllZAorICogaW5kaXJlY3RseSBieSBSRVBPUlRfSURfRklSU1QgKHdoaWNoIHJldHVybnMgdGhlIGZpcnN0IHJlcG9ydCBvZiB0aGUgZ2l2ZW4KKyAqIHR5cGUpIG9yIGJ5IChSRVBPUlRfSURfTkVYVCB8IG9sZF9pZCksIHdoaWNoIHJldHVybnMgdGhlIG5leHQgcmVwb3J0IG9mIHRoZQorICogZ2l2ZW4gdHlwZSB3aGljaCBmb2xsb3dzIG9sZF9pZC4KKyAqLworc3RhdGljIHN0cnVjdCBoaWRfcmVwb3J0ICoKK2hpZGRldl9sb29rdXBfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRkZXZfcmVwb3J0X2luZm8gKnJpbmZvKQoreworCXVuc2lnbmVkIGZsYWdzID0gcmluZm8tPnJlcG9ydF9pZCAmIH5ISURfUkVQT1JUX0lEX01BU0s7CisJc3RydWN0IGhpZF9yZXBvcnRfZW51bSAqcmVwb3J0X2VudW07CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKworCWlmIChyaW5mby0+cmVwb3J0X3R5cGUgPCBISURfUkVQT1JUX1RZUEVfTUlOIHx8CisJICAgIHJpbmZvLT5yZXBvcnRfdHlwZSA+IEhJRF9SRVBPUlRfVFlQRV9NQVgpIHJldHVybiBOVUxMOworCisJcmVwb3J0X2VudW0gPSBoaWQtPnJlcG9ydF9lbnVtICsKKwkJKHJpbmZvLT5yZXBvcnRfdHlwZSAtIEhJRF9SRVBPUlRfVFlQRV9NSU4pOworCisJc3dpdGNoIChmbGFncykgeworCWNhc2UgMDogLyogTm90aGluZyB0byBkbyAtLSByZXBvcnRfaWQgaXMgYWxyZWFkeSBzZXQgY29ycmVjdGx5ICovCisJCWJyZWFrOworCisJY2FzZSBISURfUkVQT1JUX0lEX0ZJUlNUOgorCQlsaXN0ID0gcmVwb3J0X2VudW0tPnJlcG9ydF9saXN0Lm5leHQ7CisJCWlmIChsaXN0ID09ICZyZXBvcnRfZW51bS0+cmVwb3J0X2xpc3QpCisJCQlyZXR1cm4gTlVMTDsKKwkJcmluZm8tPnJlcG9ydF9pZCA9ICgoc3RydWN0IGhpZF9yZXBvcnQgKikgbGlzdCktPmlkOworCQlicmVhazsKKwkJCisJY2FzZSBISURfUkVQT1JUX0lEX05FWFQ6CisJCWxpc3QgPSAoc3RydWN0IGxpc3RfaGVhZCAqKQorCQkJcmVwb3J0X2VudW0tPnJlcG9ydF9pZF9oYXNoW3JpbmZvLT5yZXBvcnRfaWQgJiBISURfUkVQT1JUX0lEX01BU0tdOworCQlpZiAobGlzdCA9PSBOVUxMKQorCQkJcmV0dXJuIE5VTEw7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCQlpZiAobGlzdCA9PSAmcmVwb3J0X2VudW0tPnJlcG9ydF9saXN0KQorCQkJcmV0dXJuIE5VTEw7CisJCXJpbmZvLT5yZXBvcnRfaWQgPSAoKHN0cnVjdCBoaWRfcmVwb3J0ICopIGxpc3QpLT5pZDsKKwkJYnJlYWs7CisJCQorCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiByZXBvcnRfZW51bS0+cmVwb3J0X2lkX2hhc2hbcmluZm8tPnJlcG9ydF9pZF07Cit9CisKKy8qCisgKiBQZXJmb3JtIGFuIGV4aGF1c3RpdmUgc2VhcmNoIG9mIHRoZSByZXBvcnQgdGFibGUgZm9yIGEgdXNhZ2UsIGdpdmVuIGl0cworICogdHlwZSBhbmQgdXNhZ2UgaWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGlkX2ZpZWxkICoKK2hpZGRldl9sb29rdXBfdXNhZ2Uoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZGRldl91c2FnZV9yZWYgKnVyZWYpCit7CisJaW50IGksIGo7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzdHJ1Y3QgaGlkX3JlcG9ydF9lbnVtICpyZXBvcnRfZW51bTsKKwlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZDsKKworCWlmICh1cmVmLT5yZXBvcnRfdHlwZSA8IEhJRF9SRVBPUlRfVFlQRV9NSU4gfHwKKwkgICAgdXJlZi0+cmVwb3J0X3R5cGUgPiBISURfUkVQT1JUX1RZUEVfTUFYKSByZXR1cm4gTlVMTDsKKworCXJlcG9ydF9lbnVtID0gaGlkLT5yZXBvcnRfZW51bSArCisJCSh1cmVmLT5yZXBvcnRfdHlwZSAtIEhJRF9SRVBPUlRfVFlQRV9NSU4pOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXBvcnQsICZyZXBvcnRfZW51bS0+cmVwb3J0X2xpc3QsIGxpc3QpCisJCWZvciAoaSA9IDA7IGkgPCByZXBvcnQtPm1heGZpZWxkOyBpKyspIHsKKwkJCWZpZWxkID0gcmVwb3J0LT5maWVsZFtpXTsKKwkJCWZvciAoaiA9IDA7IGogPCBmaWVsZC0+bWF4dXNhZ2U7IGorKykgeworCQkJCWlmIChmaWVsZC0+dXNhZ2Vbal0uaGlkID09IHVyZWYtPnVzYWdlX2NvZGUpIHsKKwkJCQkJdXJlZi0+cmVwb3J0X2lkID0gcmVwb3J0LT5pZDsKKwkJCQkJdXJlZi0+ZmllbGRfaW5kZXggPSBpOworCQkJCQl1cmVmLT51c2FnZV9pbmRleCA9IGo7CisJCQkJCXJldHVybiBmaWVsZDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBoaWRkZXZfc2VuZF9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLAorCQkJICAgICAgc3RydWN0IGhpZGRldl91c2FnZV9yZWYgKnVyZWYpCit7CisJc3RydWN0IGhpZGRldiAqaGlkZGV2ID0gaGlkLT5oaWRkZXY7CisJc3RydWN0IGhpZGRldl9saXN0ICpsaXN0ID0gaGlkZGV2LT5saXN0OworCisJd2hpbGUgKGxpc3QpIHsKKwkJaWYgKHVyZWYtPmZpZWxkX2luZGV4ICE9IEhJRF9GSUVMRF9JTkRFWF9OT05FIHx8CisJCSAgICAobGlzdC0+ZmxhZ3MgJiBISURERVZfRkxBR19SRVBPUlQpICE9IDApIHsKKwkJCWxpc3QtPmJ1ZmZlcltsaXN0LT5oZWFkXSA9ICp1cmVmOworCQkJbGlzdC0+aGVhZCA9IChsaXN0LT5oZWFkICsgMSkgJiAKKwkJCQkoSElEREVWX0JVRkZFUl9TSVpFIC0gMSk7CisJCQlraWxsX2Zhc3luYygmbGlzdC0+ZmFzeW5jLCBTSUdJTywgUE9MTF9JTik7CisJCX0KKworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwl9CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmhpZGRldi0+d2FpdCk7Cit9CisKKy8qCisgKiBUaGlzIGlzIHdoZXJlIGhpZC5jIGNhbGxzIGludG8gaGlkZGV2IHRvIHBhc3MgYW4gZXZlbnQgdGhhdCBvY2N1cnJlZCBvdmVyCisgKiB0aGUgaW50ZXJydXB0IHBpcGUKKyAqLwordm9pZCBoaWRkZXZfaGlkX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAorCQkgICAgICBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIHR5cGUgPSBmaWVsZC0+cmVwb3J0X3R5cGU7CisJc3RydWN0IGhpZGRldl91c2FnZV9yZWYgdXJlZjsKKworCXVyZWYucmVwb3J0X3R5cGUgPSAKKwkgICh0eXBlID09IEhJRF9JTlBVVF9SRVBPUlQpID8gSElEX1JFUE9SVF9UWVBFX0lOUFVUIDoKKwkgICgodHlwZSA9PSBISURfT1VUUFVUX1JFUE9SVCkgPyBISURfUkVQT1JUX1RZUEVfT1VUUFVUIDogCisJICAgKCh0eXBlID09IEhJRF9GRUFUVVJFX1JFUE9SVCkgPyBISURfUkVQT1JUX1RZUEVfRkVBVFVSRTowKSk7CisJdXJlZi5yZXBvcnRfaWQgPSBmaWVsZC0+cmVwb3J0LT5pZDsKKwl1cmVmLmZpZWxkX2luZGV4ID0gZmllbGQtPmluZGV4OworCXVyZWYudXNhZ2VfaW5kZXggPSAodXNhZ2UgLSBmaWVsZC0+dXNhZ2UpOworCXVyZWYudXNhZ2VfY29kZSA9IHVzYWdlLT5oaWQ7CisJdXJlZi52YWx1ZSA9IHZhbHVlOworCisJaGlkZGV2X3NlbmRfZXZlbnQoaGlkLCAmdXJlZik7Cit9CisKKwordm9pZCBoaWRkZXZfcmVwb3J0X2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQpCit7CisJdW5zaWduZWQgdHlwZSA9IHJlcG9ydC0+dHlwZTsKKwlzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZiB1cmVmOworCisJbWVtc2V0KCZ1cmVmLCAwLCBzaXplb2YodXJlZikpOworCXVyZWYucmVwb3J0X3R5cGUgPSAKKwkgICh0eXBlID09IEhJRF9JTlBVVF9SRVBPUlQpID8gSElEX1JFUE9SVF9UWVBFX0lOUFVUIDoKKwkgICgodHlwZSA9PSBISURfT1VUUFVUX1JFUE9SVCkgPyBISURfUkVQT1JUX1RZUEVfT1VUUFVUIDogCisJICAgKCh0eXBlID09IEhJRF9GRUFUVVJFX1JFUE9SVCkgPyBISURfUkVQT1JUX1RZUEVfRkVBVFVSRTowKSk7CisJdXJlZi5yZXBvcnRfaWQgPSByZXBvcnQtPmlkOworCXVyZWYuZmllbGRfaW5kZXggPSBISURfRklFTERfSU5ERVhfTk9ORTsKKworCWhpZGRldl9zZW5kX2V2ZW50KGhpZCwgJnVyZWYpOworfQorLyoKKyAqIGZhc3luYyBmaWxlIG9wCisgKi8KK3N0YXRpYyBpbnQgaGlkZGV2X2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgaGlkZGV2X2xpc3QgKmxpc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZsaXN0LT5mYXN5bmMpOworCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogMDsKK30KKworCisvKgorICogcmVsZWFzZSBmaWxlIG9wCisgKi8KK3N0YXRpYyBpbnQgaGlkZGV2X3JlbGVhc2Uoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlsZSkKK3sKKwlzdHJ1Y3QgaGlkZGV2X2xpc3QgKmxpc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhpZGRldl9saXN0ICoqbGlzdHB0cjsKKworCWxpc3RwdHIgPSAmbGlzdC0+aGlkZGV2LT5saXN0OworCWhpZGRldl9mYXN5bmMoLTEsIGZpbGUsIDApOworCisJd2hpbGUgKCpsaXN0cHRyICYmICgqbGlzdHB0ciAhPSBsaXN0KSkKKwkJbGlzdHB0ciA9ICYoKCpsaXN0cHRyKS0+bmV4dCk7CisJKmxpc3RwdHIgPSAoKmxpc3RwdHIpLT5uZXh0OworCisJaWYgKCEtLWxpc3QtPmhpZGRldi0+b3BlbikgeworCQlpZiAobGlzdC0+aGlkZGV2LT5leGlzdCkgCisJCQloaWRfY2xvc2UobGlzdC0+aGlkZGV2LT5oaWQpOworCQllbHNlCisJCQlrZnJlZShsaXN0LT5oaWRkZXYpOworCX0KKworCWtmcmVlKGxpc3QpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBvcGVuIGZpbGUgb3AKKyAqLworc3RhdGljIGludCBoaWRkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKSB7CisJc3RydWN0IGhpZGRldl9saXN0ICpsaXN0OworCisJaW50IGkgPSBpbWlub3IoaW5vZGUpIC0gSElEREVWX01JTk9SX0JBU0U7CisKKwlpZiAoaSA+PSBISURERVZfTUlOT1JTIHx8ICFoaWRkZXZfdGFibGVbaV0pCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCEobGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRkZXZfbGlzdCksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KGxpc3QsIDAsIHNpemVvZihzdHJ1Y3QgaGlkZGV2X2xpc3QpKTsKKworCWxpc3QtPmhpZGRldiA9IGhpZGRldl90YWJsZVtpXTsKKwlsaXN0LT5uZXh0ID0gaGlkZGV2X3RhYmxlW2ldLT5saXN0OworCWhpZGRldl90YWJsZVtpXS0+bGlzdCA9IGxpc3Q7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBsaXN0OworCisJaWYgKCFsaXN0LT5oaWRkZXYtPm9wZW4rKykKKwkJaWYgKGxpc3QtPmhpZGRldi0+ZXhpc3QpCisJCQloaWRfb3BlbihoaWRkZXZfdGFibGVbaV0tPmhpZCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICJ3cml0ZSIgZmlsZSBvcAorICovCitzdGF0aWMgc3NpemVfdCBoaWRkZXZfd3JpdGUoc3RydWN0IGZpbGUgKiBmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiAicmVhZCIgZmlsZSBvcAorICovCitzdGF0aWMgc3NpemVfdCBoaWRkZXZfcmVhZChzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgX191c2VyICogYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKwlzdHJ1Y3QgaGlkZGV2X2xpc3QgKmxpc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IGV2ZW50X3NpemU7CisJaW50IHJldHZhbCA9IDA7CisKKwlldmVudF9zaXplID0gKChsaXN0LT5mbGFncyAmIEhJRERFVl9GTEFHX1VSRUYpICE9IDApID8KKwkJc2l6ZW9mKHN0cnVjdCBoaWRkZXZfdXNhZ2VfcmVmKSA6IHNpemVvZihzdHJ1Y3QgaGlkZGV2X2V2ZW50KTsKKworCWlmIChjb3VudCA8IGV2ZW50X3NpemUpCisJCXJldHVybiAwOworCisJd2hpbGUgKHJldHZhbCA9PSAwKSB7CisJCWlmIChsaXN0LT5oZWFkID09IGxpc3QtPnRhaWwpIHsKKwkJCWFkZF93YWl0X3F1ZXVlKCZsaXN0LT5oaWRkZXYtPndhaXQsICZ3YWl0KTsKKwkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQkKKwkJCXdoaWxlIChsaXN0LT5oZWFkID09IGxpc3QtPnRhaWwpIHsKKwkJCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCQkJcmV0dmFsID0gLUVBR0FJTjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCQlyZXR2YWwgPSAtRVJFU1RBUlRTWVM7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAoIWxpc3QtPmhpZGRldi0+ZXhpc3QpIHsKKwkJCQkJcmV0dmFsID0gLUVJTzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCQorCQkJCXNjaGVkdWxlKCk7CisJCQl9CisKKwkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmbGlzdC0+aGlkZGV2LT53YWl0LCAmd2FpdCk7CisJCX0KKworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKworCisJCXdoaWxlIChsaXN0LT5oZWFkICE9IGxpc3QtPnRhaWwgJiYgCisJCSAgICAgICByZXR2YWwgKyBldmVudF9zaXplIDw9IGNvdW50KSB7CisJCQlpZiAoKGxpc3QtPmZsYWdzICYgSElEREVWX0ZMQUdfVVJFRikgPT0gMCkgeworCQkJCWlmIChsaXN0LT5idWZmZXJbbGlzdC0+dGFpbF0uZmllbGRfaW5kZXggIT0KKwkJCQkgICAgSElEX0ZJRUxEX0lOREVYX05PTkUpIHsKKwkJCQkJc3RydWN0IGhpZGRldl9ldmVudCBldmVudDsKKwkJCQkJZXZlbnQuaGlkID0gbGlzdC0+YnVmZmVyW2xpc3QtPnRhaWxdLnVzYWdlX2NvZGU7CisJCQkJCWV2ZW50LnZhbHVlID0gbGlzdC0+YnVmZmVyW2xpc3QtPnRhaWxdLnZhbHVlOworCQkJCQlpZiAoY29weV90b191c2VyKGJ1ZmZlciArIHJldHZhbCwgJmV2ZW50LCBzaXplb2Yoc3RydWN0IGhpZGRldl9ldmVudCkpKQorCQkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJCXJldHZhbCArPSBzaXplb2Yoc3RydWN0IGhpZGRldl9ldmVudCk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAobGlzdC0+YnVmZmVyW2xpc3QtPnRhaWxdLmZpZWxkX2luZGV4ICE9IEhJRF9GSUVMRF9JTkRFWF9OT05FIHx8CisJCQkJICAgIChsaXN0LT5mbGFncyAmIEhJRERFVl9GTEFHX1JFUE9SVCkgIT0gMCkgeworCQkJCQlpZiAoY29weV90b191c2VyKGJ1ZmZlciArIHJldHZhbCwgbGlzdC0+YnVmZmVyICsgbGlzdC0+dGFpbCwgc2l6ZW9mKHN0cnVjdCBoaWRkZXZfdXNhZ2VfcmVmKSkpCisJCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQkJcmV0dmFsICs9IHNpemVvZihzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZik7CisJCQkJfQorCQkJfQorCQkJbGlzdC0+dGFpbCA9IChsaXN0LT50YWlsICsgMSkgJiAoSElEREVWX0JVRkZFUl9TSVpFIC0gMSk7CisJCX0KKworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiAicG9sbCIgZmlsZSBvcAorICogTm8ga2VybmVsIGxvY2sgLSBmaW5lCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGlkZGV2X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IGhpZGRldl9saXN0ICpsaXN0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXBvbGxfd2FpdChmaWxlLCAmbGlzdC0+aGlkZGV2LT53YWl0LCB3YWl0KTsKKwlpZiAobGlzdC0+aGVhZCAhPSBsaXN0LT50YWlsKQorCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKwlpZiAoIWxpc3QtPmhpZGRldi0+ZXhpc3QpCisJCXJldHVybiBQT0xMRVJSIHwgUE9MTEhVUDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICJpb2N0bCIgZmlsZSBvcAorICovCitzdGF0aWMgaW50IGhpZGRldl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGhpZGRldl9saXN0ICpsaXN0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoaWRkZXYgKmhpZGRldiA9IGxpc3QtPmhpZGRldjsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaGlkZGV2LT5oaWQ7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGhpZC0+ZGV2OworCXN0cnVjdCBoaWRkZXZfY29sbGVjdGlvbl9pbmZvIGNpbmZvOworCXN0cnVjdCBoaWRkZXZfcmVwb3J0X2luZm8gcmluZm87CisJc3RydWN0IGhpZGRldl9maWVsZF9pbmZvIGZpbmZvOworCXN0cnVjdCBoaWRkZXZfdXNhZ2VfcmVmX211bHRpICp1cmVmX211bHRpPU5VTEw7CisJc3RydWN0IGhpZGRldl91c2FnZV9yZWYgKnVyZWY7CisJc3RydWN0IGhpZGRldl9kZXZpbmZvIGRpbmZvOworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisJc3RydWN0IGhpZF9maWVsZCAqZmllbGQ7CisJdm9pZCBfX3VzZXIgKnVzZXJfYXJnID0gKHZvaWQgX191c2VyICopYXJnOworCWludCBpOworCisJaWYgKCFoaWRkZXYtPmV4aXN0KQorCQlyZXR1cm4gLUVJTzsKKworCXN3aXRjaCAoY21kKSB7CisKKwljYXNlIEhJRElPQ0dWRVJTSU9OOgorCQlyZXR1cm4gcHV0X3VzZXIoSElEX1ZFUlNJT04sIChpbnQgX191c2VyICopYXJnKTsKKworCWNhc2UgSElESU9DQVBQTElDQVRJT046CisJCWlmIChhcmcgPCAwIHx8IGFyZyA+PSBoaWQtPm1heGFwcGxpY2F0aW9uKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJZm9yIChpID0gMDsgaSA8IGhpZC0+bWF4Y29sbGVjdGlvbjsgaSsrKQorCQkJaWYgKGhpZC0+Y29sbGVjdGlvbltpXS50eXBlID09IAorCQkJICAgIEhJRF9DT0xMRUNUSU9OX0FQUExJQ0FUSU9OICYmIGFyZy0tID09IDApCisJCQkJYnJlYWs7CisJCQorCQlpZiAoaSA9PSBoaWQtPm1heGNvbGxlY3Rpb24pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZXR1cm4gaGlkLT5jb2xsZWN0aW9uW2ldLnVzYWdlOworCisJY2FzZSBISURJT0NHREVWSU5GTzoKKwkJZGluZm8uYnVzdHlwZSA9IEJVU19VU0I7CisJCWRpbmZvLmJ1c251bSA9IGRldi0+YnVzLT5idXNudW07CisJCWRpbmZvLmRldm51bSA9IGRldi0+ZGV2bnVtOworCQlkaW5mby5pZm51bSA9IGhpZC0+aWZudW07CisJCWRpbmZvLnZlbmRvciA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisJCWRpbmZvLnByb2R1Y3QgPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwkJZGluZm8udmVyc2lvbiA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworCQlkaW5mby5udW1fYXBwbGljYXRpb25zID0gaGlkLT5tYXhhcHBsaWNhdGlvbjsKKwkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgJmRpbmZvLCBzaXplb2YoZGluZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiAwOworCisJY2FzZSBISURJT0NHRkxBRzoKKwkJaWYgKHB1dF91c2VyKGxpc3QtPmZsYWdzLCAoaW50IF9fdXNlciAqKWFyZykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlyZXR1cm4gMDsKKworCWNhc2UgSElESU9DU0ZMQUc6CisJCXsKKwkJCWludCBuZXdmbGFnczsKKwkJCWlmIChnZXRfdXNlcihuZXdmbGFncywgKGludCBfX3VzZXIgKilhcmcpKQorCQkJCXJldHVybiAtRUZBVUxUOworCisJCQlpZiAoKG5ld2ZsYWdzICYgfkhJRERFVl9GTEFHUykgIT0gMCB8fAorCQkJICAgICgobmV3ZmxhZ3MgJiBISURERVZfRkxBR19SRVBPUlQpICE9IDAgJiYKKwkJCSAgICAgKG5ld2ZsYWdzICYgSElEREVWX0ZMQUdfVVJFRikgPT0gMCkpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWxpc3QtPmZsYWdzID0gbmV3ZmxhZ3M7CisKKwkJCXJldHVybiAwOworCQl9CisKKwljYXNlIEhJRElPQ0dTVFJJTkc6CisJCXsKKwkJCWludCBpZHgsIGxlbjsKKwkJCWNoYXIgKmJ1ZjsKKworCQkJaWYgKGdldF91c2VyKGlkeCwgKGludCBfX3VzZXIgKilhcmcpKQorCQkJCXJldHVybiAtRUZBVUxUOworCisJCQlpZiAoKGJ1ZiA9IGttYWxsb2MoSElEX1NUUklOR19TSVpFLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwkJCQlyZXR1cm4gLUVOT01FTTsKKworCQkJaWYgKChsZW4gPSB1c2Jfc3RyaW5nKGRldiwgaWR4LCBidWYsIEhJRF9TVFJJTkdfU0laRS0xKSkgPCAwKSB7CisJCQkJa2ZyZWUoYnVmKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKworCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZytzaXplb2YoaW50KSwgYnVmLCBsZW4rMSkpIHsKKwkJCQlrZnJlZShidWYpOworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCisJCQlrZnJlZShidWYpOworCisJCQlyZXR1cm4gbGVuOworCQl9CisKKwljYXNlIEhJRElPQ0lOSVRSRVBPUlQ6CisJCWhpZF9pbml0X3JlcG9ydHMoaGlkKTsKKworCQlyZXR1cm4gMDsKKworCWNhc2UgSElESU9DR1JFUE9SVDoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZyaW5mbywgdXNlcl9hcmcsIHNpemVvZihyaW5mbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKHJpbmZvLnJlcG9ydF90eXBlID09IEhJRF9SRVBPUlRfVFlQRV9PVVRQVVQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoKHJlcG9ydCA9IGhpZGRldl9sb29rdXBfcmVwb3J0KGhpZCwgJnJpbmZvKSkgPT0gTlVMTCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcmVwb3J0LCBVU0JfRElSX0lOKTsKKwkJaGlkX3dhaXRfaW8oaGlkKTsKKworCQlyZXR1cm4gMDsKKworCWNhc2UgSElESU9DU1JFUE9SVDoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZyaW5mbywgdXNlcl9hcmcsIHNpemVvZihyaW5mbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKHJpbmZvLnJlcG9ydF90eXBlID09IEhJRF9SRVBPUlRfVFlQRV9JTlBVVCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICgocmVwb3J0ID0gaGlkZGV2X2xvb2t1cF9yZXBvcnQoaGlkLCAmcmluZm8pKSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCByZXBvcnQsIFVTQl9ESVJfT1VUKTsKKworCQlyZXR1cm4gMDsKKworCWNhc2UgSElESU9DR1JFUE9SVElORk86CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcmluZm8sIHVzZXJfYXJnLCBzaXplb2YocmluZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmICgocmVwb3J0ID0gaGlkZGV2X2xvb2t1cF9yZXBvcnQoaGlkLCAmcmluZm8pKSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJcmluZm8ubnVtX2ZpZWxkcyA9IHJlcG9ydC0+bWF4ZmllbGQ7CisKKwkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgJnJpbmZvLCBzaXplb2YocmluZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiAwOworCisJY2FzZSBISURJT0NHRklFTERJTkZPOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJmZpbmZvLCB1c2VyX2FyZywgc2l6ZW9mKGZpbmZvKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmluZm8ucmVwb3J0X3R5cGUgPSBmaW5mby5yZXBvcnRfdHlwZTsKKwkJcmluZm8ucmVwb3J0X2lkID0gZmluZm8ucmVwb3J0X2lkOworCQlpZiAoKHJlcG9ydCA9IGhpZGRldl9sb29rdXBfcmVwb3J0KGhpZCwgJnJpbmZvKSkgPT0gTlVMTCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChmaW5mby5maWVsZF9pbmRleCA+PSByZXBvcnQtPm1heGZpZWxkKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJZmllbGQgPSByZXBvcnQtPmZpZWxkW2ZpbmZvLmZpZWxkX2luZGV4XTsKKwkJbWVtc2V0KCZmaW5mbywgMCwgc2l6ZW9mKGZpbmZvKSk7CisJCWZpbmZvLnJlcG9ydF90eXBlID0gcmluZm8ucmVwb3J0X3R5cGU7CisJCWZpbmZvLnJlcG9ydF9pZCA9IHJpbmZvLnJlcG9ydF9pZDsKKwkJZmluZm8uZmllbGRfaW5kZXggPSBmaWVsZC0+cmVwb3J0X2NvdW50IC0gMTsKKwkJZmluZm8ubWF4dXNhZ2UgPSBmaWVsZC0+bWF4dXNhZ2U7CisJCWZpbmZvLmZsYWdzID0gZmllbGQtPmZsYWdzOworCQlmaW5mby5waHlzaWNhbCA9IGZpZWxkLT5waHlzaWNhbDsKKwkJZmluZm8ubG9naWNhbCA9IGZpZWxkLT5sb2dpY2FsOworCQlmaW5mby5hcHBsaWNhdGlvbiA9IGZpZWxkLT5hcHBsaWNhdGlvbjsKKwkJZmluZm8ubG9naWNhbF9taW5pbXVtID0gZmllbGQtPmxvZ2ljYWxfbWluaW11bTsKKwkJZmluZm8ubG9naWNhbF9tYXhpbXVtID0gZmllbGQtPmxvZ2ljYWxfbWF4aW11bTsKKwkJZmluZm8ucGh5c2ljYWxfbWluaW11bSA9IGZpZWxkLT5waHlzaWNhbF9taW5pbXVtOworCQlmaW5mby5waHlzaWNhbF9tYXhpbXVtID0gZmllbGQtPnBoeXNpY2FsX21heGltdW07CisJCWZpbmZvLnVuaXRfZXhwb25lbnQgPSBmaWVsZC0+dW5pdF9leHBvbmVudDsKKwkJZmluZm8udW5pdCA9IGZpZWxkLT51bml0OworCisJCWlmIChjb3B5X3RvX3VzZXIodXNlcl9hcmcsICZmaW5mbywgc2l6ZW9mKGZpbmZvKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlyZXR1cm4gMDsKKworCWNhc2UgSElESU9DR1VDT0RFOgorCQl1cmVmX211bHRpID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhpZGRldl91c2FnZV9yZWZfbXVsdGkpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmVmX211bHRpKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXVyZWYgPSAmdXJlZl9tdWx0aS0+dXJlZjsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKHVyZWYsIHVzZXJfYXJnLCBzaXplb2YoKnVyZWYpKSkgCisJCQlnb3RvIGZhdWx0OworCisJCXJpbmZvLnJlcG9ydF90eXBlID0gdXJlZi0+cmVwb3J0X3R5cGU7CisJCXJpbmZvLnJlcG9ydF9pZCA9IHVyZWYtPnJlcG9ydF9pZDsKKwkJaWYgKChyZXBvcnQgPSBoaWRkZXZfbG9va3VwX3JlcG9ydChoaWQsICZyaW5mbykpID09IE5VTEwpCisJCQlnb3RvIGludmFsOworCisJCWlmICh1cmVmLT5maWVsZF9pbmRleCA+PSByZXBvcnQtPm1heGZpZWxkKQorCQkJZ290byBpbnZhbDsKKworCQlmaWVsZCA9IHJlcG9ydC0+ZmllbGRbdXJlZi0+ZmllbGRfaW5kZXhdOworCQlpZiAodXJlZi0+dXNhZ2VfaW5kZXggPj0gZmllbGQtPm1heHVzYWdlKQorCQkJZ290byBpbnZhbDsKKworCQl1cmVmLT51c2FnZV9jb2RlID0gZmllbGQtPnVzYWdlW3VyZWYtPnVzYWdlX2luZGV4XS5oaWQ7CisKKwkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgdXJlZiwgc2l6ZW9mKCp1cmVmKSkpCisJCQlnb3RvIGZhdWx0OworCisJCWtmcmVlKHVyZWZfbXVsdGkpOworCQlyZXR1cm4gMDsKKworCWNhc2UgSElESU9DR1VTQUdFOgorCWNhc2UgSElESU9DU1VTQUdFOgorCWNhc2UgSElESU9DR1VTQUdFUzoKKwljYXNlIEhJRElPQ1NVU0FHRVM6CisJY2FzZSBISURJT0NHQ09MTEVDVElPTklOREVYOgorCQl1cmVmX211bHRpID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhpZGRldl91c2FnZV9yZWZfbXVsdGkpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmVmX211bHRpKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXVyZWYgPSAmdXJlZl9tdWx0aS0+dXJlZjsKKwkJaWYgKGNtZCA9PSBISURJT0NHVVNBR0VTIHx8IGNtZCA9PSBISURJT0NTVVNBR0VTKSB7CisJCQlpZiAoY29weV9mcm9tX3VzZXIodXJlZl9tdWx0aSwgdXNlcl9hcmcsIAorCQkJCQkgICBzaXplb2YoKnVyZWZfbXVsdGkpKSkKKwkJCQlnb3RvIGZhdWx0OworCQl9IGVsc2UgeworCQkJaWYgKGNvcHlfZnJvbV91c2VyKHVyZWYsIHVzZXJfYXJnLCBzaXplb2YoKnVyZWYpKSkKKwkJCQlnb3RvIGZhdWx0OworCQl9CisKKwkJaWYgKGNtZCAhPSBISURJT0NHVVNBR0UgJiYgCisJCSAgICBjbWQgIT0gSElESU9DR1VTQUdFUyAmJgorCQkgICAgdXJlZi0+cmVwb3J0X3R5cGUgPT0gSElEX1JFUE9SVF9UWVBFX0lOUFVUKQorCQkJZ290byBpbnZhbDsKKworCQlpZiAodXJlZi0+cmVwb3J0X2lkID09IEhJRF9SRVBPUlRfSURfVU5LTk9XTikgeworCQkJZmllbGQgPSBoaWRkZXZfbG9va3VwX3VzYWdlKGhpZCwgdXJlZik7CisJCQlpZiAoZmllbGQgPT0gTlVMTCkKKwkJCQlnb3RvIGludmFsOworCQl9IGVsc2UgeworCQkJcmluZm8ucmVwb3J0X3R5cGUgPSB1cmVmLT5yZXBvcnRfdHlwZTsKKwkJCXJpbmZvLnJlcG9ydF9pZCA9IHVyZWYtPnJlcG9ydF9pZDsKKwkJCWlmICgocmVwb3J0ID0gaGlkZGV2X2xvb2t1cF9yZXBvcnQoaGlkLCAmcmluZm8pKSA9PSBOVUxMKQorCQkJCWdvdG8gaW52YWw7CisKKwkJCWlmICh1cmVmLT5maWVsZF9pbmRleCA+PSByZXBvcnQtPm1heGZpZWxkKQorCQkJCWdvdG8gaW52YWw7CisKKwkJCWZpZWxkID0gcmVwb3J0LT5maWVsZFt1cmVmLT5maWVsZF9pbmRleF07CisKKwkJCWlmIChjbWQgPT0gSElESU9DR0NPTExFQ1RJT05JTkRFWCkgeworCQkJCWlmICh1cmVmLT51c2FnZV9pbmRleCA+PSBmaWVsZC0+bWF4dXNhZ2UpCisJCQkJCWdvdG8gaW52YWw7CisJCQl9IGVsc2UgaWYgKHVyZWYtPnVzYWdlX2luZGV4ID49IGZpZWxkLT5yZXBvcnRfY291bnQpCisJCQkJZ290byBpbnZhbDsKKworCQkJZWxzZSBpZiAoKGNtZCA9PSBISURJT0NHVVNBR0VTIHx8IGNtZCA9PSBISURJT0NTVVNBR0VTKSAmJgorCQkJCSAodXJlZl9tdWx0aS0+bnVtX3ZhbHVlcyA+IEhJRF9NQVhfTVVMVElfVVNBR0VTIHx8CisJCQkJICB1cmVmLT51c2FnZV9pbmRleCArIHVyZWZfbXVsdGktPm51bV92YWx1ZXMgPj0gZmllbGQtPnJlcG9ydF9jb3VudCkpCisJCQkJZ290byBpbnZhbDsKKwkJCX0KKworCQlzd2l0Y2ggKGNtZCkgeworCQkJY2FzZSBISURJT0NHVVNBR0U6CisJCQkJdXJlZi0+dmFsdWUgPSBmaWVsZC0+dmFsdWVbdXJlZi0+dXNhZ2VfaW5kZXhdOworCQkJCWlmIChjb3B5X3RvX3VzZXIodXNlcl9hcmcsIHVyZWYsIHNpemVvZigqdXJlZikpKQorCQkJCQlnb3RvIGZhdWx0OworCQkJCWdvdG8gZ29vZHJldHVybjsKKworCQkJY2FzZSBISURJT0NTVVNBR0U6CisJCQkJZmllbGQtPnZhbHVlW3VyZWYtPnVzYWdlX2luZGV4XSA9IHVyZWYtPnZhbHVlOworCQkJCWdvdG8gZ29vZHJldHVybjsKKworCQkJY2FzZSBISURJT0NHQ09MTEVDVElPTklOREVYOgorCQkJCWtmcmVlKHVyZWZfbXVsdGkpOworCQkJCXJldHVybiBmaWVsZC0+dXNhZ2VbdXJlZi0+dXNhZ2VfaW5kZXhdLmNvbGxlY3Rpb25faW5kZXg7CisJCQljYXNlIEhJRElPQ0dVU0FHRVM6CisJCQkJZm9yIChpID0gMDsgaSA8IHVyZWZfbXVsdGktPm51bV92YWx1ZXM7IGkrKykKKwkJCQkJdXJlZl9tdWx0aS0+dmFsdWVzW2ldID0gCisJCQkJCSAgICBmaWVsZC0+dmFsdWVbdXJlZi0+dXNhZ2VfaW5kZXggKyBpXTsKKwkJCQlpZiAoY29weV90b191c2VyKHVzZXJfYXJnLCB1cmVmX211bHRpLCAKKwkJCQkJCSBzaXplb2YoKnVyZWZfbXVsdGkpKSkKKwkJCQkJZ290byBmYXVsdDsKKwkJCQlnb3RvIGdvb2RyZXR1cm47CisJCQljYXNlIEhJRElPQ1NVU0FHRVM6CisJCQkJZm9yIChpID0gMDsgaSA8IHVyZWZfbXVsdGktPm51bV92YWx1ZXM7IGkrKykKKwkJCQkJZmllbGQtPnZhbHVlW3VyZWYtPnVzYWdlX2luZGV4ICsgaV0gPSAKKwkJCQkgIAkgICAgdXJlZl9tdWx0aS0+dmFsdWVzW2ldOworCQkJCWdvdG8gZ29vZHJldHVybjsKKwkJfQorCitnb29kcmV0dXJuOgorCQlrZnJlZSh1cmVmX211bHRpKTsKKwkJcmV0dXJuIDA7CitmYXVsdDoKKwkJa2ZyZWUodXJlZl9tdWx0aSk7CisJCXJldHVybiAtRUZBVUxUOworaW52YWw6CQkKKwkJa2ZyZWUodXJlZl9tdWx0aSk7CisJCXJldHVybiAtRUlOVkFMOworCisJY2FzZSBISURJT0NHQ09MTEVDVElPTklORk86CisJCWlmIChjb3B5X2Zyb21fdXNlcigmY2luZm8sIHVzZXJfYXJnLCBzaXplb2YoY2luZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChjaW5mby5pbmRleCA+PSBoaWQtPm1heGNvbGxlY3Rpb24pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQljaW5mby50eXBlID0gaGlkLT5jb2xsZWN0aW9uW2NpbmZvLmluZGV4XS50eXBlOworCQljaW5mby51c2FnZSA9IGhpZC0+Y29sbGVjdGlvbltjaW5mby5pbmRleF0udXNhZ2U7CisJCWNpbmZvLmxldmVsID0gaGlkLT5jb2xsZWN0aW9uW2NpbmZvLmluZGV4XS5sZXZlbDsKKworCQlpZiAoY29weV90b191c2VyKHVzZXJfYXJnLCAmY2luZm8sIHNpemVvZihjaW5mbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCisJZGVmYXVsdDoKKworCQlpZiAoX0lPQ19UWVBFKGNtZCkgIT0gJ0gnIHx8IF9JT0NfRElSKGNtZCkgIT0gX0lPQ19SRUFEKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKF9JT0NfTlIoY21kKSA9PSBfSU9DX05SKEhJRElPQ0dOQU1FKDApKSkgeworCQkJaW50IGxlbjsKKwkJCWlmICghaGlkLT5uYW1lKQorCQkJCXJldHVybiAwOworCQkJbGVuID0gc3RybGVuKGhpZC0+bmFtZSkgKyAxOworCQkJaWYgKGxlbiA+IF9JT0NfU0laRShjbWQpKQorCQkJCSBsZW4gPSBfSU9DX1NJWkUoY21kKTsKKwkJCXJldHVybiBjb3B5X3RvX3VzZXIodXNlcl9hcmcsIGhpZC0+bmFtZSwgbGVuKSA/CisJCQkJLUVGQVVMVCA6IGxlbjsKKwkJfQorCisJCWlmIChfSU9DX05SKGNtZCkgPT0gX0lPQ19OUihISURJT0NHUEhZUygwKSkpIHsKKwkJCWludCBsZW47CisJCQlpZiAoIWhpZC0+cGh5cykKKwkJCQlyZXR1cm4gMDsKKwkJCWxlbiA9IHN0cmxlbihoaWQtPnBoeXMpICsgMTsKKwkJCWlmIChsZW4gPiBfSU9DX1NJWkUoY21kKSkKKwkJCQlsZW4gPSBfSU9DX1NJWkUoY21kKTsKKwkJCXJldHVybiBjb3B5X3RvX3VzZXIodXNlcl9hcmcsIGhpZC0+cGh5cywgbGVuKSA/CisJCQkJLUVGQVVMVCA6IGxlbjsKKwkJfQorCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGlkZGV2X2ZvcHMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLnJlYWQgPQkJaGlkZGV2X3JlYWQsCisJLndyaXRlID0JaGlkZGV2X3dyaXRlLAorCS5wb2xsID0JCWhpZGRldl9wb2xsLAorCS5vcGVuID0JCWhpZGRldl9vcGVuLAorCS5yZWxlYXNlID0JaGlkZGV2X3JlbGVhc2UsCisJLmlvY3RsID0JaGlkZGV2X2lvY3RsLAorCS5mYXN5bmMgPQloaWRkZXZfZmFzeW5jLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIGhpZGRldl9jbGFzcyA9IHsKKwkubmFtZSA9CQkidXNiL2hpZC9oaWRkZXYlZCIsCisJLmZvcHMgPQkJJmhpZGRldl9mb3BzLAorCS5tb2RlID0JCVNfSUZDSFIgfCBTX0lSVUdPIHwgU19JV1VTUiwKKyAgICAgICAJLm1pbm9yX2Jhc2UgPQlISURERVZfTUlOT1JfQkFTRSwKK307CisKKy8qCisgKiBUaGlzIGlzIHdoZXJlIGhpZC5jIGNhbGxzIHVzIHRvIGNvbm5lY3QgYSBoaWQgZGV2aWNlIHRvIHRoZSBoaWRkZXYgZHJpdmVyCisgKi8KK2ludCBoaWRkZXZfY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXN0cnVjdCBoaWRkZXYgKmhpZGRldjsKKwlpbnQgaTsKKwlpbnQgcmV0dmFsOworCisJZm9yIChpID0gMDsgaSA8IGhpZC0+bWF4Y29sbGVjdGlvbjsgaSsrKQorCQlpZiAoaGlkLT5jb2xsZWN0aW9uW2ldLnR5cGUgPT0gCisJCSAgICBISURfQ09MTEVDVElPTl9BUFBMSUNBVElPTiAmJgorCQkgICAgIUlTX0lOUFVUX0FQUExJQ0FUSU9OKGhpZC0+Y29sbGVjdGlvbltpXS51c2FnZSkpCisJCQlicmVhazsKKworCWlmIChpID09IGhpZC0+bWF4Y29sbGVjdGlvbiAmJiAoaGlkLT5xdWlya3MgJiBISURfUVVJUktfSElEREVWKSA9PSAwKQorCQlyZXR1cm4gLTE7CisKKyAJaWYgKCEoaGlkZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhpZGRldiksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIC0xOworCW1lbXNldChoaWRkZXYsIDAsIHNpemVvZihzdHJ1Y3QgaGlkZGV2KSk7CisKKyAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihoaWQtPmludGYsICZoaWRkZXZfY2xhc3MpOworCWlmIChyZXR2YWwpIHsKKwkJZXJyKCJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuIik7CisJCWtmcmVlKGhpZGRldik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZoaWRkZXYtPndhaXQpOworCisgCWhpZGRldl90YWJsZVtoaWQtPmludGYtPm1pbm9yIC0gSElEREVWX01JTk9SX0JBU0VdID0gaGlkZGV2OworCisJaGlkZGV2LT5oaWQgPSBoaWQ7CisJaGlkZGV2LT5leGlzdCA9IDE7CisKKyAJaGlkLT5taW5vciA9IGhpZC0+aW50Zi0+bWlub3I7CisJaGlkLT5oaWRkZXYgPSBoaWRkZXY7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgaXMgd2hlcmUgaGlkLmMgY2FsbHMgdXMgdG8gZGlzY29ubmVjdCBhIGhpZGRldiBkZXZpY2UgZnJvbSB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgaGlkIGRldmljZSAodXN1YWxseSBiZWNhdXNlIHRoZSB1c2IgZGV2aWNlIGhhcyBkaXNjb25uZWN0ZWQpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciBoaWRkZXZfY2xhc3M7Cit2b2lkIGhpZGRldl9kaXNjb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJc3RydWN0IGhpZGRldiAqaGlkZGV2ID0gaGlkLT5oaWRkZXY7CisKKwloaWRkZXYtPmV4aXN0ID0gMDsKKworCWhpZGRldl90YWJsZVtoaWRkZXYtPmhpZC0+bWlub3IgLSBISURERVZfTUlOT1JfQkFTRV0gPSBOVUxMOworCXVzYl9kZXJlZ2lzdGVyX2RldihoaWRkZXYtPmhpZC0+aW50ZiwgJmhpZGRldl9jbGFzcyk7CisKKwlpZiAoaGlkZGV2LT5vcGVuKSB7CisJCWhpZF9jbG9zZShoaWRkZXYtPmhpZCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaGlkZGV2LT53YWl0KTsKKwl9IGVsc2UgeworCQlrZnJlZShoaWRkZXYpOworCX0KK30KKworLyogQ3VycmVudGx5IHRoaXMgZHJpdmVyIGlzIGEgVVNCIGRyaXZlci4gIEl0J3Mgbm90IGEgY29udmVudGlvbmFsIG9uZSBpbgorICogdGhlIHNlbnNlIHRoYXQgaXQgZG9lc24ndCBwcm9iZSBhdCB0aGUgVVNCIGxldmVsLiAgSW5zdGVhZCBpdCB3YWl0cyB0bworICogYmUgY29ubmVjdGVkIGJ5IEhJRCB0aHJvdWdoIHRoZSBoaWRkZXZfY29ubmVjdCAvIGhpZGRldl9kaXNjb25uZWN0CisgKiByb3V0aW5lcy4gIFRoZSByZWFzb24gdG8gcmVnaXN0ZXIgYXMgYSBVU0IgZGV2aWNlIGlzIHRvIGdhaW4gcGFydCBvZiB0aGUKKyAqIG1pbm9yIG51bWJlciBzcGFjZSBmcm9tIHRoZSBVU0IgbWFqb3IuCisgKgorICogSW4gdGhlb3J5LCBzaG91bGQgdGhlIEhJRCBjb2RlIGJlIGdlbmVyYWxpemVkIHRvIG1vcmUgdGhhbiBvbmUgcGh5c2ljYWwKKyAqIG1lZGl1bSAoc2F5LCBJRUVFIDEzODQpLCB0aGlzIGRyaXZlciB3aWxsIHByb2JhYmx5IG5lZWQgdG8gcmVnaXN0ZXIgaXRzCisgKiBvd24gbWFqb3IgbnVtYmVyLCBhbmQgaW4gZG9pbmcgc28sIG5vIGxvbmdlciBuZWVkIHRvIHJlZ2lzdGVyIHdpdGggVVNCLgorICogQXQgdGhhdCBwb2ludCB0aGUgcHJvYmUgcm91dGluZSBhbmQgaGlkZGV2X2RyaXZlciBzdHJ1Y3QgYmVsb3cgd2lsbCBubworICogbG9uZ2VyIGJlIHVzZWZ1bC4KKyAqLworCisKKy8qIFdlIG5ldmVyIGF0dGFjaCBpbiB0aGlzIG1hbm5lciwgYW5kIHJlbHkgb24gSElEIHRvIGNvbm5lY3QgdXMuICBUaGlzCisgKiBpcyB3aHkgdGhlcmUgaXMgbm8gZGlzY29ubmVjdCByb3V0aW5lIGRlZmluZWQgaW4gdGhlIHVzYl9kcml2ZXIgZWl0aGVyLgorICovCitzdGF0aWMgaW50IGhpZGRldl91c2JkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCAKKwkJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmhpZGRldl9pbmZvKQoreworCXJldHVybiAtRU5PREVWOworfQorCisKK3N0YXRpYyAvKiBjb25zdCAqLyBzdHJ1Y3QgdXNiX2RyaXZlciBoaWRkZXZfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJoaWRkZXYiLAorCS5wcm9iZSA9CWhpZGRldl91c2JkX3Byb2JlLAorfTsKKworaW50IF9faW5pdCBoaWRkZXZfaW5pdCh2b2lkKQoreworCWRldmZzX21rX2RpcigidXNiL2hpZCIpOworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmhpZGRldl9kcml2ZXIpOworfQorCit2b2lkIGhpZGRldl9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmhpZGRldl9kcml2ZXIpOworCWRldmZzX3JlbW92ZSgidXNiL2hpZCIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQva2J0YWIuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2tidGFiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY4YzViNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2tidGFiLmMKQEAgLTAsMCArMSwyNDEgQEAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqIHYwLjAuMSAtIE9yaWdpbmFsLCBleHRyZW1lbHkgYmFzaWMgdmVyc2lvbiwgMi40Lnh4IG9ubHkKKyAqIHYwLjAuMiAtIFVwZGF0ZWQsIHdvcmtzIHdpdGggMi41LjYyIGFuZCAyLjQuMjA7CisgKiAgICAgICAgICAgLSBhZGRlZCBwcmVzc3VyZS10aHJlc2hvbGQgbW9kdWxlcyBwYXJhbSBjb2RlIGZyb20KKyAqICAgICAgICAgICAgICBBbGV4IFBlcnJ5IDxhbGV4LnBlcnJ5QGllZWUub3JnPgorICovCisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjAuMiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiSm9zaCBNeWVyIDxqb3NoQGpvc2hpc2FuZXJkLmNvbT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgS0IgR2VhciBKYW1TdHVkaW8gVGFibGV0IGRyaXZlciIKKyNkZWZpbmUgRFJJVkVSX0xJQ0VOU0UgIkdQTCIKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRShEUklWRVJfTElDRU5TRSk7CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9LQkdFQVIJMHgwODRlCisKK3N0YXRpYyBpbnQga2JfcHJlc3N1cmVfY2xpY2sgPSAweDEwOworbW9kdWxlX3BhcmFtKGtiX3ByZXNzdXJlX2NsaWNrLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhrYl9wcmVzc3VyZV9jbGljaywgInByZXNzdXJlIHRocmVzaG9sZCBmb3IgY2xpY2tzIik7CisKK3N0cnVjdCBrYnRhYiB7CisJc2lnbmVkIGNoYXIgKmRhdGE7CisJZG1hX2FkZHJfdCBkYXRhX2RtYTsKKwlzdHJ1Y3QgaW5wdXRfZGV2IGRldjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCXN0cnVjdCB1cmIgKmlycTsKKwlpbnQgb3BlbjsKKwlpbnQgeCwgeTsKKwlpbnQgYnV0dG9uOworCWludCBwcmVzc3VyZTsKKwlfX3UzMiBzZXJpYWxbMl07CisJY2hhciBwaHlzWzMyXTsKK307CisKK3N0YXRpYyB2b2lkIGtidGFiX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBrYnRhYiAqa2J0YWIgPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IGtidGFiLT5kYXRhOworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9ICZrYnRhYi0+ZGV2OworCWludCByZXR2YWw7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCWtidGFiLT54ID0gbGUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTE2ICopICZkYXRhWzFdKSk7CisJa2J0YWItPnkgPSBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMTYgKikgJmRhdGFbM10pKTsKKworCWtidGFiLT5wcmVzc3VyZSA9IChkYXRhWzVdKTsKKworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9PTF9QRU4sIDEpOworCisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCBrYnRhYi0+eCk7CisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCBrYnRhYi0+eSk7CisKKwkvKmlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9VQ0ggLCBkYXRhWzBdICYgMHgwMSk7Ki8KKwlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1JJR0hULCBkYXRhWzBdICYgMHgwMik7CisKKwlpZiggLTEgPT0ga2JfcHJlc3N1cmVfY2xpY2speyAKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19QUkVTU1VSRSwga2J0YWItPnByZXNzdXJlKTsKKwl9IGVsc2UgeworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0xFRlQsIChrYnRhYi0+cHJlc3N1cmUgPiBrYl9wcmVzc3VyZV9jbGljaykgPyAxIDogMCk7CisJfTsKKwkKKwlpbnB1dF9zeW5jKGRldik7CisKKyBleGl0OgorCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXR2YWwpCisJCWVyciAoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHJldHZhbCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBrYnRhYl9pZHNbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9LQkdFQVIsIDB4MTAwMSksIC5kcml2ZXJfaW5mbyA9IDAgfSwKKwl7IH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBrYnRhYl9pZHMpOworCitzdGF0aWMgaW50IGtidGFiX29wZW4oc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCXN0cnVjdCBrYnRhYiAqa2J0YWIgPSBkZXYtPnByaXZhdGU7CisKKwlpZiAoa2J0YWItPm9wZW4rKykKKwkJcmV0dXJuIDA7CisKKwlrYnRhYi0+aXJxLT5kZXYgPSBrYnRhYi0+dXNiZGV2OworCWlmICh1c2Jfc3VibWl0X3VyYihrYnRhYi0+aXJxLCBHRlBfS0VSTkVMKSkgeworCQlrYnRhYi0+b3Blbi0tOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQga2J0YWJfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCXN0cnVjdCBrYnRhYiAqa2J0YWIgPSBkZXYtPnByaXZhdGU7CisKKwlpZiAoIS0ta2J0YWItPm9wZW4pCisJCXVzYl9raWxsX3VyYihrYnRhYi0+aXJxKTsKK30KKworc3RhdGljIGludCBrYnRhYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0IGtidGFiICprYnRhYjsKKwljaGFyIHBhdGhbNjRdOworCisJaWYgKCEoa2J0YWIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga2J0YWIpLCBHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChrYnRhYiwgMCwgc2l6ZW9mKHN0cnVjdCBrYnRhYikpOworCisJa2J0YWItPmRhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgOCwgR0ZQX0tFUk5FTCwgJmtidGFiLT5kYXRhX2RtYSk7CisJaWYgKCFrYnRhYi0+ZGF0YSkgeworCQlrZnJlZShrYnRhYik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWtidGFiLT5pcnEgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICgha2J0YWItPmlycSkgeworCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCAxMCwga2J0YWItPmRhdGEsIGtidGFiLT5kYXRhX2RtYSk7CisJCWtmcmVlKGtidGFiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJa2J0YWItPmRldi5ldmJpdFswXSB8PSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpIHwgQklUKEVWX01TQyk7CisJa2J0YWItPmRldi5hYnNiaXRbMF0gfD0gQklUKEFCU19YKSB8IEJJVChBQlNfWSkgfCBCSVQoQUJTX1BSRVNTVVJFKTsKKworCWtidGFiLT5kZXYua2V5Yml0W0xPTkcoQlROX0xFRlQpXSB8PSBCSVQoQlROX0xFRlQpIHwgQklUKEJUTl9SSUdIVCkgfCBCSVQoQlROX01JRERMRSk7CisKKwlrYnRhYi0+ZGV2LmtleWJpdFtMT05HKEJUTl9ESUdJKV0gfD0gQklUKEJUTl9UT09MX1BFTikgfCBCSVQoQlROX1RPVUNIKTsKKworCWtidGFiLT5kZXYubXNjYml0WzBdIHw9IEJJVChNU0NfU0VSSUFMKTsKKworCWtidGFiLT5kZXYuYWJzbWF4W0FCU19YXSA9IDB4MjAwMDsKKwlrYnRhYi0+ZGV2LmFic21heFtBQlNfWV0gPSAweDE3NTA7CisJa2J0YWItPmRldi5hYnNtYXhbQUJTX1BSRVNTVVJFXSA9IDB4ZmY7CisJCisJa2J0YWItPmRldi5hYnNmdXp6W0FCU19YXSA9IDQ7CisJa2J0YWItPmRldi5hYnNmdXp6W0FCU19ZXSA9IDQ7CisKKwlrYnRhYi0+ZGV2LnByaXZhdGUgPSBrYnRhYjsKKwlrYnRhYi0+ZGV2Lm9wZW4gPSBrYnRhYl9vcGVuOworCWtidGFiLT5kZXYuY2xvc2UgPSBrYnRhYl9jbG9zZTsKKworCXVzYl9tYWtlX3BhdGgoZGV2LCBwYXRoLCA2NCk7CisJc3ByaW50ZihrYnRhYi0+cGh5cywgIiVzL2lucHV0MCIsIHBhdGgpOworCisJa2J0YWItPmRldi5uYW1lID0gIktCIEdlYXIgVGFibGV0IjsKKwlrYnRhYi0+ZGV2LnBoeXMgPSBrYnRhYi0+cGh5czsKKwlrYnRhYi0+ZGV2LmlkLmJ1c3R5cGUgPSBCVVNfVVNCOworCWtidGFiLT5kZXYuaWQudmVuZG9yID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwlrYnRhYi0+ZGV2LmlkLnByb2R1Y3QgPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwlrYnRhYi0+ZGV2LmlkLnZlcnNpb24gPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKKwlrYnRhYi0+ZGV2LmRldiA9ICZpbnRmLT5kZXY7CisJa2J0YWItPnVzYmRldiA9IGRldjsKKworCWVuZHBvaW50ID0gJmludGYtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludFswXS5kZXNjOworCisJdXNiX2ZpbGxfaW50X3VyYihrYnRhYi0+aXJxLCBkZXYsCisJCQkgdXNiX3JjdmludHBpcGUoZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkga2J0YWItPmRhdGEsIDgsCisJCQkga2J0YWJfaXJxLCBrYnRhYiwgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisJa2J0YWItPmlycS0+dHJhbnNmZXJfZG1hID0ga2J0YWItPmRhdGFfZG1hOworCWtidGFiLT5pcnEtPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCisJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKCZrYnRhYi0+ZGV2KTsKKworCXByaW50ayhLRVJOX0lORk8gImlucHV0OiBLQiBHZWFyIFRhYmxldCBvbiAlc1xuIiwgIHBhdGgpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBrYnRhYik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQga2J0YWJfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3Qga2J0YWIgKmtidGFiID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCWlmIChrYnRhYikgeworCQl1c2Jfa2lsbF91cmIoa2J0YWItPmlycSk7CisJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKCZrYnRhYi0+ZGV2KTsKKwkJdXNiX2ZyZWVfdXJiKGtidGFiLT5pcnEpOworCQl1c2JfYnVmZmVyX2ZyZWUoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwgMTAsIGtidGFiLT5kYXRhLCBrYnRhYi0+ZGF0YV9kbWEpOworCQlrZnJlZShrYnRhYik7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIga2J0YWJfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJrYnRhYiIsCisJLnByb2JlID0Ja2J0YWJfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQlrYnRhYl9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWtidGFiX2lkcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGtidGFiX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigma2J0YWJfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG91dDsKKwlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGtidGFiX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigma2J0YWJfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoa2J0YWJfaW5pdCk7Cittb2R1bGVfZXhpdChrYnRhYl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L210b3VjaHVzYi5jIGIvZHJpdmVycy91c2IvaW5wdXQvbXRvdWNodXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0NWE2NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L210b3VjaHVzYi5jCkBAIC0wLDAgKzEsMzY3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBtdG91Y2h1c2IuYyAgLS0gIERyaXZlciBmb3IgTWljcm90b3VjaCAoTm93IDNNKSBVU0IgVG91Y2hzY3JlZW5zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogQmFzZWQgdXBvbiBvcmlnaW5hbCB3b3JrIGJ5IFJhZG9zbGF3IEdhcmJhY3ogKHVzYi1zdXBwb3J0QGl0ZS5wbCkKKyAqICAoaHR0cDovL2ZyZXNobWVhdC5uZXQvcHJvamVjdHMvM210b3VjaHNjcmVlbmRyaXZlcikKKyAqCisgKiBIaXN0b3J5CisgKgorICogIDAuMyAmIDAuNCAgMjAwMiAoVEVKKSB0ZWpvaG5zb25AeWFob28uY29tCisgKiAgICBVcGRhdGVkIHRvIDIuNC4xOCwgdGhlbiAyLjQuMTkKKyAqICAgIE9sZCB2ZXJzaW9uIHN0aWxsIHJlbGllZCBvbiBzdGVhbGluZyBhIG1pbm9yCisgKgorICogIDAuNSAgMDIvMjYvMjAwNCAoVEVKKSB0ZWpvaG5zb25AeWFob28uY29tCisgKiAgICBDb21wbGV0ZSByZXdyaXRlIHVzaW5nIExpbnV4IElucHV0IGluIDIuNi4zCisgKiAgICBVbmZvcnR1bmF0ZWx5IG5vIGNhbGlicmF0aW9uIHN1cHBvcnQgYXQgdGhpcyB0aW1lCisgKgorICogIDEuNCAwNC8yNS8yMDA0IChURUopIHRlam9obnNvbkB5YWhvby5jb20KKyAqICAgIENoYW5nZWQgcmVzZXQgZnJvbSBzdGFuZGFyZCBVU0IgZGV2IHJlc2V0IHRvIHZlbmRvciByZXNldAorICogICAgQ2hhbmdlZCBkYXRhIHNlbnQgdG8gaG9zdCBmcm9tIGNvbXBlbnNhdGVkIHRvIHJhdyBjb29yZGluYXRlcworICogICAgRWxpbWluYXRlZCB2ZW5kb3IvcHJvZHVjdCBtb2R1bGUgcGFyYW1zCisgKiAgICBQZXJmb3JtZWQgbXVsdGlwbGUgc3VjY2Vzc2Z1bGwgdGVzdHMgd2l0aCBhbiBFWElJLTUwMTBVQworICoKKyAqICAxLjUgMDIvMjcvMjAwNSBkZHN0cmVldEBpZWVlLm9yZworICogICAgQWRkZWQgbW9kdWxlIHBhcmFtZXRlciB0byBzZWxlY3QgcmF3IG9yIGh3LWNhbGlicmF0ZWQgY29vcmRpbmF0ZSByZXBvcnRpbmcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKyAgICAgICAgI2RlZmluZSBERUJVRworI2Vsc2UKKyAgICAgICAgI3VuZGVmIERFQlVHCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2RlZmluZSBNVE9VQ0hVU0JfTUlOX1hDICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBNVE9VQ0hVU0JfTUFYX1JBV19YQyAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBNVE9VQ0hVU0JfTUFYX0NBTElCX1hDICAgICAgICAgIDB4ZmZmZgorI2RlZmluZSBNVE9VQ0hVU0JfWENfRlVaWiAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBNVE9VQ0hVU0JfWENfRkxBVCAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBNVE9VQ0hVU0JfTUlOX1lDICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBNVE9VQ0hVU0JfTUFYX1JBV19ZQyAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBNVE9VQ0hVU0JfTUFYX0NBTElCX1lDICAgICAgICAgIDB4ZmZmZgorI2RlZmluZSBNVE9VQ0hVU0JfWUNfRlVaWiAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBNVE9VQ0hVU0JfWUNfRkxBVCAgICAgICAgICAgICAgIDB4MAorCisjZGVmaW5lIE1UT1VDSFVTQl9BU1lOQ19SRVBPUlQgICAgICAgICAgMQorI2RlZmluZSBNVE9VQ0hVU0JfUkVTRVQgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgTVRPVUNIVVNCX1JFUE9SVF9EQVRBX1NJWkUgICAgICAxMQorI2RlZmluZSBNVE9VQ0hVU0JfUkVRX0NUUkxMUl9JRCAgICAgICAgIDEwCisKKyNkZWZpbmUgTVRPVUNIVVNCX0dFVF9SQVdfWEMoZGF0YSkgICAgICAoZGF0YVs4XTw8OCB8IGRhdGFbN10pCisjZGVmaW5lIE1UT1VDSFVTQl9HRVRfQ0FMSUJfWEMoZGF0YSkgICAgKGRhdGFbNF08PDggfCBkYXRhWzNdKQorI2RlZmluZSBNVE9VQ0hVU0JfR0VUX1JBV19ZQyhkYXRhKSAgICAgIChkYXRhWzEwXTw8OCB8IGRhdGFbOV0pCisjZGVmaW5lIE1UT1VDSFVTQl9HRVRfQ0FMSUJfWUMoZGF0YSkgICAgKGRhdGFbNl08PDggfCBkYXRhWzVdKQorI2RlZmluZSBNVE9VQ0hVU0JfR0VUX1hDKGRhdGEpICAgICAgICAgIChyYXdfY29vcmRpbmF0ZXMgPyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UT1VDSFVTQl9HRVRfUkFXX1hDKGRhdGEpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVE9VQ0hVU0JfR0VUX0NBTElCX1hDKGRhdGEpKQorI2RlZmluZSBNVE9VQ0hVU0JfR0VUX1lDKGRhdGEpICAgICAgICAgIChyYXdfY29vcmRpbmF0ZXMgPyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UT1VDSFVTQl9HRVRfUkFXX1lDKGRhdGEpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVE9VQ0hVU0JfR0VUX0NBTElCX1lDKGRhdGEpKQorI2RlZmluZSBNVE9VQ0hVU0JfR0VUX1RPVUNIRUQoZGF0YSkgICAgICgoZGF0YVsyXSAmIDB4NDApID8gMTowKQorCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS41IgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJUb2RkIEUuIEpvaG5zb24sIHRlam9obnNvbkB5YWhvby5jb20iCisjZGVmaW5lIERSSVZFUl9ERVNDICIzTSBVU0IgVG91Y2hzY3JlZW4gRHJpdmVyIgorI2RlZmluZSBEUklWRVJfTElDRU5TRSAiR1BMIgorCitzdGF0aWMgaW50IHJhd19jb29yZGluYXRlcyA9IDE7CisKK21vZHVsZV9wYXJhbShyYXdfY29vcmRpbmF0ZXMsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MocmF3X2Nvb3JkaW5hdGVzLCAicmVwb3J0IHJhdyBjb29yZGluYXRlIHZhbHVlcyAoeSwgZGVmYXVsdCkgb3IgaGFyZHdhcmUtY2FsaWJyYXRlZCBjb29yZGluYXRlIHZhbHVlcyAobikiKTsKKworc3RydWN0IG10b3VjaF91c2IgeworICAgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhOworICAgICAgICBkbWFfYWRkcl90IGRhdGFfZG1hOworICAgICAgICBzdHJ1Y3QgdXJiICppcnE7CisgICAgICAgIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworICAgICAgICBzdHJ1Y3QgaW5wdXRfZGV2IGlucHV0OworICAgICAgICBpbnQgb3BlbjsKKyAgICAgICAgY2hhciBuYW1lWzEyOF07CisgICAgICAgIGNoYXIgcGh5c1s2NF07Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgbXRvdWNodXNiX2RldmljZXMgW10gPSB7CisgICAgICAgIHsgVVNCX0RFVklDRSgweDA1OTYsIDB4MDAwMSkgfSwKKyAgICAgICAgeyB9Cit9OworCitzdGF0aWMgdm9pZCBtdG91Y2h1c2JfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisgICAgICAgIHN0cnVjdCBtdG91Y2hfdXNiICptdG91Y2ggPSB1cmItPmNvbnRleHQ7CisgICAgICAgIGludCByZXR2YWw7CisKKyAgICAgICAgc3dpdGNoICh1cmItPnN0YXR1cykgeworICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN1Y2Nlc3MgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgLUVUSU1FRE9VVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoaXMgdXJiIGlzIHRpbWluZyBvdXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGRiZygiJXMgLSB1cmIgdGltZWQgb3V0IC0gd2FzIHRoZSBkZXZpY2UgdW5wbHVnZ2VkPyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjYXNlIC1FQ09OTlJFU0VUOgorICAgICAgICAgICAgICAgIGNhc2UgLUVOT0VOVDoKKyAgICAgICAgICAgICAgICBjYXNlIC1FU0hVVERPV046CisgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworICAgICAgICAgICAgICAgICAgICAgICAgZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGlucHV0X3JlZ3MoJm10b3VjaC0+aW5wdXQsIHJlZ3MpOworICAgICAgICBpbnB1dF9yZXBvcnRfa2V5KCZtdG91Y2gtPmlucHV0LCBCVE5fVE9VQ0gsCisgICAgICAgICAgICAgICAgICAgICAgICAgTVRPVUNIVVNCX0dFVF9UT1VDSEVEKG10b3VjaC0+ZGF0YSkpOworICAgICAgICBpbnB1dF9yZXBvcnRfYWJzKCZtdG91Y2gtPmlucHV0LCBBQlNfWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBNVE9VQ0hVU0JfR0VUX1hDKG10b3VjaC0+ZGF0YSkpOworICAgICAgICBpbnB1dF9yZXBvcnRfYWJzKCZtdG91Y2gtPmlucHV0LCBBQlNfWSwKKwkJCSAocmF3X2Nvb3JkaW5hdGVzID8gTVRPVUNIVVNCX01BWF9SQVdfWUMgOiBNVE9VQ0hVU0JfTUFYX0NBTElCX1lDKQorICAgICAgICAgICAgICAgICAgICAgICAgIC0gTVRPVUNIVVNCX0dFVF9ZQyhtdG91Y2gtPmRhdGEpKTsKKyAgICAgICAgaW5wdXRfc3luYygmbXRvdWNoLT5pbnB1dCk7CisKK2V4aXQ6CisgICAgICAgIHJldHZhbCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIGVyciAoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0OiAlZCIsCisgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIHJldHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgbXRvdWNodXNiX29wZW4gKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQoreworICAgICAgICBzdHJ1Y3QgbXRvdWNoX3VzYiAqbXRvdWNoID0gaW5wdXQtPnByaXZhdGU7CisKKyAgICAgICAgaWYgKG10b3VjaC0+b3BlbisrKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIG10b3VjaC0+aXJxLT5kZXYgPSBtdG91Y2gtPnVkZXY7CisKKyAgICAgICAgaWYgKHVzYl9zdWJtaXRfdXJiIChtdG91Y2gtPmlycSwgR0ZQX0FUT01JQykpIHsKKyAgICAgICAgICAgICAgICBtdG91Y2gtPm9wZW4tLTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVJTzsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdG91Y2h1c2JfY2xvc2UgKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQoreworICAgICAgICBzdHJ1Y3QgbXRvdWNoX3VzYiAqbXRvdWNoID0gaW5wdXQtPnByaXZhdGU7CisKKyAgICAgICAgaWYgKCEtLW10b3VjaC0+b3BlbikKKyAgICAgICAgICAgICAgICB1c2Jfa2lsbF91cmIgKG10b3VjaC0+aXJxKTsKK30KKworc3RhdGljIGludCBtdG91Y2h1c2JfYWxsb2NfYnVmZmVycyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IG10b3VjaF91c2IgKm10b3VjaCkKK3sKKyAgICAgICAgZGJnKCIlcyAtIGNhbGxlZCIsIF9fRlVOQ1RJT05fXyk7CisKKyAgICAgICAgbXRvdWNoLT5kYXRhID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LCBNVE9VQ0hVU0JfUkVQT1JUX0RBVEFfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTEFCX0FUT01JQywgJm10b3VjaC0+ZGF0YV9kbWEpOworCisgICAgICAgIGlmICghbXRvdWNoLT5kYXRhKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXRvdWNodXNiX2ZyZWVfYnVmZmVycyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IG10b3VjaF91c2IgKm10b3VjaCkKK3sKKyAgICAgICAgZGJnKCIlcyAtIGNhbGxlZCIsIF9fRlVOQ1RJT05fXyk7CisKKyAgICAgICAgaWYgKG10b3VjaC0+ZGF0YSkKKyAgICAgICAgICAgICAgICB1c2JfYnVmZmVyX2ZyZWUodWRldiwgTVRPVUNIVVNCX1JFUE9SVF9EQVRBX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10b3VjaC0+ZGF0YSwgbXRvdWNoLT5kYXRhX2RtYSk7Cit9CisKK3N0YXRpYyBpbnQgbXRvdWNodXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisgICAgICAgIHN0cnVjdCBtdG91Y2hfdXNiICptdG91Y2g7CisgICAgICAgIHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKyAgICAgICAgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKyAgICAgICAgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpbnRmKTsKKyAgICAgICAgY2hhciBwYXRoWzY0XTsKKyAgICAgICAgaW50IG5SZXQ7CisKKyAgICAgICAgZGJnKCIlcyAtIGNhbGxlZCIsIF9fRlVOQ1RJT05fXyk7CisKKyAgICAgICAgZGJnKCIlcyAtIHNldHRpbmcgaW50ZXJmYWNlIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisKKyAgICAgICAgZGJnKCIlcyAtIHNldHRpbmcgZW5kcG9pbnQiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICBlbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzBdLmRlc2M7CisKKyAgICAgICAgaWYgKCEobXRvdWNoID0ga21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgbXRvdWNoX3VzYiksIEdGUF9LRVJORUwpKSkgeworICAgICAgICAgICAgICAgIGVycigiJXMgLSBPdXQgb2YgbWVtb3J5LiIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgIH0KKworICAgICAgICBtZW1zZXQobXRvdWNoLCAwLCBzaXplb2Yoc3RydWN0IG10b3VjaF91c2IpKTsKKyAgICAgICAgbXRvdWNoLT51ZGV2ID0gdWRldjsKKworICAgICAgICBkYmcoIiVzIC0gYWxsb2NhdGluZyBidWZmZXJzIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgaWYgKG10b3VjaHVzYl9hbGxvY19idWZmZXJzKHVkZXYsIG10b3VjaCkpIHsKKyAgICAgICAgICAgICAgICBtdG91Y2h1c2JfZnJlZV9idWZmZXJzKHVkZXYsIG10b3VjaCk7CisgICAgICAgICAgICAgICAga2ZyZWUobXRvdWNoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICAgICAgfQorCisgICAgICAgIG10b3VjaC0+aW5wdXQucHJpdmF0ZSA9IG10b3VjaDsKKyAgICAgICAgbXRvdWNoLT5pbnB1dC5vcGVuID0gbXRvdWNodXNiX29wZW47CisgICAgICAgIG10b3VjaC0+aW5wdXQuY2xvc2UgPSBtdG91Y2h1c2JfY2xvc2U7CisKKyAgICAgICAgdXNiX21ha2VfcGF0aCh1ZGV2LCBwYXRoLCA2NCk7CisgICAgICAgIHNwcmludGYobXRvdWNoLT5waHlzLCAiJXMvaW5wdXQwIiwgcGF0aCk7CisKKyAgICAgICAgbXRvdWNoLT5pbnB1dC5uYW1lID0gbXRvdWNoLT5uYW1lOworICAgICAgICBtdG91Y2gtPmlucHV0LnBoeXMgPSBtdG91Y2gtPnBoeXM7CisgICAgICAgIG10b3VjaC0+aW5wdXQuaWQuYnVzdHlwZSA9IEJVU19VU0I7CisgICAgICAgIG10b3VjaC0+aW5wdXQuaWQudmVuZG9yID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisgICAgICAgIG10b3VjaC0+aW5wdXQuaWQucHJvZHVjdCA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKyAgICAgICAgbXRvdWNoLT5pbnB1dC5pZC52ZXJzaW9uID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworICAgICAgICBtdG91Y2gtPmlucHV0LmRldiA9ICZpbnRmLT5kZXY7CisKKyAgICAgICAgbXRvdWNoLT5pbnB1dC5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX0FCUyk7CisgICAgICAgIG10b3VjaC0+aW5wdXQuYWJzYml0WzBdID0gQklUKEFCU19YKSB8IEJJVChBQlNfWSk7CisgICAgICAgIG10b3VjaC0+aW5wdXQua2V5Yml0W0xPTkcoQlROX1RPVUNIKV0gPSBCSVQoQlROX1RPVUNIKTsKKworICAgICAgICAvKiBVc2VkIHRvIFNjYWxlIENvbXBlbnNhdGVkIERhdGEgYW5kIEZsaXAgWSAqLworICAgICAgICBtdG91Y2gtPmlucHV0LmFic21pbltBQlNfWF0gPSAgTVRPVUNIVVNCX01JTl9YQzsKKyAgICAgICAgbXRvdWNoLT5pbnB1dC5hYnNtYXhbQUJTX1hdID0gIHJhd19jb29yZGluYXRlcyA/IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UT1VDSFVTQl9NQVhfUkFXX1hDIDogTVRPVUNIVVNCX01BWF9DQUxJQl9YQzsKKyAgICAgICAgbXRvdWNoLT5pbnB1dC5hYnNmdXp6W0FCU19YXSA9IE1UT1VDSFVTQl9YQ19GVVpaOworICAgICAgICBtdG91Y2gtPmlucHV0LmFic2ZsYXRbQUJTX1hdID0gTVRPVUNIVVNCX1hDX0ZMQVQ7CisgICAgICAgIG10b3VjaC0+aW5wdXQuYWJzbWluW0FCU19ZXSA9ICBNVE9VQ0hVU0JfTUlOX1lDOworICAgICAgICBtdG91Y2gtPmlucHV0LmFic21heFtBQlNfWV0gPSAgcmF3X2Nvb3JkaW5hdGVzID8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRPVUNIVVNCX01BWF9SQVdfWUMgOiBNVE9VQ0hVU0JfTUFYX0NBTElCX1lDOworICAgICAgICBtdG91Y2gtPmlucHV0LmFic2Z1enpbQUJTX1ldID0gTVRPVUNIVVNCX1lDX0ZVWlo7CisgICAgICAgIG10b3VjaC0+aW5wdXQuYWJzZmxhdFtBQlNfWV0gPSBNVE9VQ0hVU0JfWUNfRkxBVDsKKworCWlmICh1ZGV2LT5tYW51ZmFjdHVyZXIpCisJCXN0cmNhdChtdG91Y2gtPm5hbWUsIHVkZXYtPm1hbnVmYWN0dXJlcik7CisJaWYgKHVkZXYtPnByb2R1Y3QpCisJCXNwcmludGYobXRvdWNoLT5uYW1lLCAiJXMgJXMiLCBtdG91Y2gtPm5hbWUsIHVkZXYtPnByb2R1Y3QpOworCisgICAgICAgIGlmICghc3RybGVuKG10b3VjaC0+bmFtZSkpCisgICAgICAgICAgICAgICAgc3ByaW50ZihtdG91Y2gtPm5hbWUsICJVU0IgVG91Y2hzY3JlZW4gJTA0eDolMDR4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG10b3VjaC0+aW5wdXQuaWQudmVuZG9yLCBtdG91Y2gtPmlucHV0LmlkLnByb2R1Y3QpOworCisgICAgICAgIG5SZXQgPSB1c2JfY29udHJvbF9tc2cobXRvdWNoLT51ZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVE9VQ0hVU0JfUkVTRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworICAgICAgICBkYmcoIiVzIC0gdXNiX2NvbnRyb2xfbXNnIC0gTVRPVUNIVVNCX1JFU0VUIC0gYnl0ZXN8ZXJyOiAlZCIsCisgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIG5SZXQpOworCisgICAgICAgIGRiZygiJXMgLSB1c2JfYWxsb2NfdXJiOiBtdG91Y2gtPmlycSIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIG10b3VjaC0+aXJxID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgaWYgKCFtdG91Y2gtPmlycSkgeworICAgICAgICAgICAgICAgIGRiZygiJXMgLSB1c2JfYWxsb2NfdXJiIGZhaWxlZDogbXRvdWNoLT5pcnEiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgICAgIG10b3VjaHVzYl9mcmVlX2J1ZmZlcnModWRldiwgbXRvdWNoKTsKKyAgICAgICAgICAgICAgICBrZnJlZShtdG91Y2gpOworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgICAgICB9CisKKyAgICAgICAgZGJnKCIlcyAtIHVzYl9maWxsX2ludF91cmIiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICB1c2JfZmlsbF9pbnRfdXJiKG10b3VjaC0+aXJxLAorICAgICAgICAgICAgICAgICAgICAgICAgIG10b3VjaC0+dWRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcmN2aW50cGlwZShtdG91Y2gtPnVkZXYsIDB4ODEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG10b3VjaC0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBNVE9VQ0hVU0JfUkVQT1JUX0RBVEFfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtdG91Y2h1c2JfaXJxLAorICAgICAgICAgICAgICAgICAgICAgICAgIG10b3VjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC0+YkludGVydmFsKTsKKworICAgICAgICBkYmcoIiVzIC0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKCZtdG91Y2gtPmlucHV0KTsKKworICAgICAgICBuUmV0ID0gdXNiX2NvbnRyb2xfbXNnKG10b3VjaC0+dWRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRPVUNIVVNCX0FTWU5DX1JFUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisgICAgICAgIGRiZygiJXMgLSB1c2JfY29udHJvbF9tc2cgLSBNVE9VQ0hVU0JfQVNZTkNfUkVQT1JUIC0gYnl0ZXN8ZXJyOiAlZCIsCisgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIG5SZXQpOworCisgICAgICAgIHByaW50ayhLRVJOX0lORk8gImlucHV0OiAlcyBvbiAlc1xuIiwgbXRvdWNoLT5uYW1lLCBwYXRoKTsKKyAgICAgICAgdXNiX3NldF9pbnRmZGF0YShpbnRmLCBtdG91Y2gpOworCisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdG91Y2h1c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKyAgICAgICAgc3RydWN0IG10b3VjaF91c2IgKm10b3VjaCA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCisgICAgICAgIGRiZygiJXMgLSBjYWxsZWQiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICB1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworICAgICAgICBpZiAobXRvdWNoKSB7CisgICAgICAgICAgICAgICAgZGJnKCIlcyAtIG10b3VjaCBpcyBpbml0aWFsaXplZCwgY2xlYW5pbmcgdXAiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgICAgIHVzYl9raWxsX3VyYihtdG91Y2gtPmlycSk7CisgICAgICAgICAgICAgICAgaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoJm10b3VjaC0+aW5wdXQpOworICAgICAgICAgICAgICAgIHVzYl9mcmVlX3VyYihtdG91Y2gtPmlycSk7CisgICAgICAgICAgICAgICAgbXRvdWNodXNiX2ZyZWVfYnVmZmVycyhpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCBtdG91Y2gpOworICAgICAgICAgICAgICAgIGtmcmVlKG10b3VjaCk7CisgICAgICAgIH0KK30KKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBtdG91Y2h1c2JfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBtdG91Y2h1c2JfZHJpdmVyID0geworICAgICAgICAub3duZXIgPSAgICAgIFRISVNfTU9EVUxFLAorICAgICAgICAubmFtZSA9ICAgICAgICJtdG91Y2h1c2IiLAorICAgICAgICAucHJvYmUgPSAgICAgIG10b3VjaHVzYl9wcm9iZSwKKyAgICAgICAgLmRpc2Nvbm5lY3QgPSBtdG91Y2h1c2JfZGlzY29ubmVjdCwKKyAgICAgICAgLmlkX3RhYmxlID0gICBtdG91Y2h1c2JfZGV2aWNlcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10b3VjaHVzYl9pbml0KHZvaWQpIHsKKyAgICAgICAgZGJnKCIlcyAtIGNhbGxlZCIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJldHVybiB1c2JfcmVnaXN0ZXIoJm10b3VjaHVzYl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbXRvdWNodXNiX2NsZWFudXAodm9pZCkgeworICAgICAgICBkYmcoIiVzIC0gY2FsbGVkIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgdXNiX2RlcmVnaXN0ZXIoJm10b3VjaHVzYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtdG91Y2h1c2JfaW5pdCk7Cittb2R1bGVfZXhpdChtdG91Y2h1c2JfY2xlYW51cCk7CisKK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L3BpZC5jIGIvZHJpdmVycy91c2IvaW5wdXQvcGlkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU2OTYzOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L3BpZC5jCkBAIC0wLDAgKzEsMjk1IEBACisvKgorICogIFBJRCBGb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBoaWQgZGV2aWNlcy4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDAyIFJvZHJpZ28gRGFtYXppby4KKyAqICBQb3J0aW9ucyBieSBKb2hhbm4gRGVuZXV4IGFuZCBCam9ybiBBdWd1c3Rzb24KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBTaG91bGQgeW91IG5lZWQgdG8gY29udGFjdCBtZSwgdGhlIGF1dGhvciwgeW91IGNhbiBkbyBzbyBieQorICogZS1tYWlsIC0gbWFpbCB5b3VyIG1lc3NhZ2UgdG8gPHJkYW1hemlvQGxzaS51c3AuYnI+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJoaWQuaCIKKyNpbmNsdWRlICJwaWQuaCIKKworI2RlZmluZSBERUJVRworCisjZGVmaW5lIENIRUNLX09XTkVSU0hJUChpLCBoaWRfcGlkKQlcCisJKChpKSA8IEZGX0VGRkVDVFNfTUFYICYmIGkgPj0gMCAmJiBcCisJdGVzdF9iaXQoRkZfUElEX0ZMQUdTX1VTRUQsICZoaWRfcGlkLT5lZmZlY3RzWyhpKV0uZmxhZ3MpICYmIFwKKwkoY3VycmVudC0+cGlkID09IDAgfHwgXAorCShoaWRfcGlkKS0+ZWZmZWN0c1soaSldLm93bmVyID09IGN1cnJlbnQtPnBpZCkpCisKKy8qIENhbGxlZCB3aGVuIGEgdHJhbnNmZXIgaXMgY29tcGxldGVkICovCitzdGF0aWMgdm9pZCBoaWRfcGlkX2N0cmxfb3V0KHN0cnVjdCB1cmIgKnUsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWRldl9kYmcoJnUtPmRldi0+ZGV2LCAiaGlkX3BpZF9jdHJsX291dCAtIFRyYW5zZmVyIENvbXBsZXRlZFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGhpZF9waWRfZXhpdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXN0cnVjdCBoaWRfZmZfcGlkICpwcml2YXRlID0gaGlkLT5mZl9wcml2YXRlOworCisJaWYgKHByaXZhdGUtPnVyYmZmb3V0KSB7CisJCXVzYl9raWxsX3VyYihwcml2YXRlLT51cmJmZm91dCk7CisJCXVzYl9mcmVlX3VyYihwcml2YXRlLT51cmJmZm91dCk7CisJfQorfQorCitzdGF0aWMgaW50IHBpZF91cGxvYWRfcGVyaW9kaWMoc3RydWN0IGhpZF9mZl9waWQgKnBpZCwgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0LCBpbnQgaXNfdXBkYXRlKQoreworCWRldl9pbmZvKCZwaWQtPmhpZC0+ZGV2LT5kZXYsICJyZXF1ZXN0ZWQgcGVyaW9kaWMgZm9yY2UgdXBsb2FkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwaWRfdXBsb2FkX2NvbnN0YW50KHN0cnVjdCBoaWRfZmZfcGlkICpwaWQsIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCwgaW50IGlzX3VwZGF0ZSkKK3sKKwlkZXZfaW5mbygmcGlkLT5oaWQtPmRldi0+ZGV2LCAicmVxdWVzdGVkIGNvbnN0YW50IGZvcmNlIHVwbG9hZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGlkX3VwbG9hZF9jb25kaXRpb24oc3RydWN0IGhpZF9mZl9waWQgKnBpZCwgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0LCBpbnQgaXNfdXBkYXRlKQoreworCWRldl9pbmZvKCZwaWQtPmhpZC0+ZGV2LT5kZXYsICJyZXF1ZXN0ZWQgQ29uZGl0aW9uIGZvcmNlIHVwbG9hZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGlkX3VwbG9hZF9yYW1wKHN0cnVjdCBoaWRfZmZfcGlkICpwaWQsIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCwgaW50IGlzX3VwZGF0ZSkKK3sKKwlkZXZfaW5mbygmcGlkLT5oaWQtPmRldi0+ZGV2LCAicmVxdWVzdCByYW1wIGZvcmNlIHVwbG9hZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGlkX3BpZF9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKKwkJCSB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKK3sKKwlkZXZfZGJnKCZoaWQtPmRldi0+ZGV2LCAiUElEIGV2ZW50IHJlY2VpdmVkOiB0eXBlPSVkLGNvZGU9JWQsdmFsdWU9JWQuXG4iLCB0eXBlLCBjb2RlLCB2YWx1ZSk7CisKKwlpZiAodHlwZSAhPSBFVl9GRikKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKKy8qIExvY2sgbXVzdCBiZSBoZWxkIGJ5IGNhbGxlciAqLworc3RhdGljIHZvaWQgaGlkX3BpZF9jdHJsX3BsYXliYWNrKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfcGlkX2VmZmVjdCAqZWZmZWN0LCBpbnQgcGxheSkKK3sKKwlpZiAocGxheSkKKwkJc2V0X2JpdChGRl9QSURfRkxBR1NfUExBWUlORywgJmVmZmVjdC0+ZmxhZ3MpOworCWVsc2UKKwkJY2xlYXJfYml0KEZGX1BJRF9GTEFHU19QTEFZSU5HLCAmZWZmZWN0LT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgaGlkX3BpZF9lcmFzZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIGludCBpZCkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gZGV2LT5wcml2YXRlOworCXN0cnVjdCBoaWRfZmZfcGlkICpwaWQgPSBoaWQtPmZmX3ByaXZhdGU7CisJc3RydWN0IGhpZF9maWVsZCAqZmllbGQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJaWYgKCFDSEVDS19PV05FUlNISVAoaWQsIHBpZCkpCisJCXJldHVybiAtRUFDQ0VTOworCisJLyogRmluZCByZXBvcnQgKi8KKwlmaWVsZCA9IGhpZF9maW5kX2ZpZWxkX2J5X3VzYWdlKGhpZCwgSElEX1VQX1BJRCB8IEZGX1BJRF9VU0FHRV9CTE9DS19GUkVFLAorCQkJCQlISURfT1VUUFVUX1JFUE9SVCk7CisJaWYgKCFmaWVsZCkgeworCQlkZXZfZXJyKCZoaWQtPmRldi0+ZGV2LCAiY291bGRuJ3QgZmluZCByZXBvcnRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXQgPSBoaWRfc2V0X2ZpZWxkKGZpZWxkLCAwLCBwaWQtPmVmZmVjdHNbaWRdLmRldmljZV9pZCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoaWQtPmRldi0+ZGV2LCAiY291bGRuJ3Qgc2V0IGZpZWxkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwloaWRfc3VibWl0X3JlcG9ydChoaWQsIGZpZWxkLT5yZXBvcnQsIFVTQl9ESVJfT1VUKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaWQtPmxvY2ssIGZsYWdzKTsKKwloaWRfcGlkX2N0cmxfcGxheWJhY2soaGlkLCBwaWQtPmVmZmVjdHMgKyBpZCwgMCk7CisJcGlkLT5lZmZlY3RzW2lkXS5mbGFncyA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGlkLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogRXJhc2UgYWxsIGVmZmVjdHMgdGhpcyBwcm9jZXNzIG93bnMgKi8KK3N0YXRpYyBpbnQgaGlkX3BpZF9mbHVzaChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IGhpZF9mZl9waWQgKnBpZCA9IGhpZC0+ZmZfcHJpdmF0ZTsKKwlpbnQgaTsKKworCS8qTk9URTogbm8gbmVlZCB0byBsb2NrIGhlcmUuIFRoZSBvbmx5IHRpbWVzIEVGRkVDVF9VU0VEIGlzCisJICAgbW9kaWZpZWQgaXMgd2hlbiBlZmZlY3RzIGFyZSB1cGxvYWRlZCBvciB3aGVuIGFuIGVmZmVjdCBpcworCSAgIGVyYXNlZC4gQnV0IGEgcHJvY2VzcyBjYW5ub3QgY2xvc2UgaXRzIGRldi9pbnB1dC9ldmVudFggZmQKKwkgICBhbmQgcGVyZm9ybSBpb2N0bHMgb24gdGhlIHNhbWUgZmQgYWxsIGF0IHRoZSBzYW1lIHRpbWUgKi8KKwkvKkZJWE1FOiBtdWx0aXBsZSB0aHJlYWRzLCBhbnlvbmU/ICovCisJZm9yIChpID0gMDsgaSA8IGRldi0+ZmZfZWZmZWN0c19tYXg7ICsraSkKKwkJaWYgKGN1cnJlbnQtPnBpZCA9PSBwaWQtPmVmZmVjdHNbaV0ub3duZXIKKwkJICAgICYmIHRlc3RfYml0KEZGX1BJRF9GTEFHU19VU0VELCAmcGlkLT5lZmZlY3RzW2ldLmZsYWdzKSkKKwkJCWlmIChoaWRfcGlkX2VyYXNlKGRldiwgaSkpCisJCQkJZGV2X3dhcm4oJmhpZC0+ZGV2LT5kZXYsICJlcmFzZSBlZmZlY3QgJWQgZmFpbGVkIiwgaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoaWRfcGlkX3VwbG9hZF9lZmZlY3Qoc3RydWN0IGlucHV0X2RldiAqZGV2LAorCQkJCSBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCit7CisJc3RydWN0IGhpZF9mZl9waWQgKnBpZF9wcml2YXRlID0gKHN0cnVjdCBoaWRfZmZfcGlkICopKGRldi0+cHJpdmF0ZSk7CisJaW50IHJldDsKKwlpbnQgaXNfdXBkYXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkZXZfZGJnKCZwaWRfcHJpdmF0ZS0+aGlkLT5kZXYtPmRldiwgInVwbG9hZCBlZmZlY3QgY2FsbGVkOiBlZmZlY3RfdHlwZT0leFxuIiwgZWZmZWN0LT50eXBlKTsKKwkvKiBDaGVjayB0aGlzIGVmZmVjdCB0eXBlIGlzIHN1cHBvcnRlZCBieSB0aGlzIGRldmljZSAqLworCWlmICghdGVzdF9iaXQoZWZmZWN0LT50eXBlLCBkZXYtPmZmYml0KSkgeworCQlkZXZfZGJnKCZwaWRfcHJpdmF0ZS0+aGlkLT5kZXYtPmRldiwKKwkJCSJpbnZhbGlkIGtpbmQgb2YgZWZmZWN0IHJlcXVlc3RlZC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIElmIHdlIHdhbnQgdG8gY3JlYXRlIGEgbmV3IGVmZmVjdCwgZ2V0IGEgZnJlZSBpZAorCSAqLworCWlmIChlZmZlY3QtPmlkID09IC0xKSB7CisJCWludCBpZCA9IDA7CisKKwkJLy8gU3BpbmxvY2sgc28gd2UgZG9uYHQgZ2V0IGEgcmFjZSBjb25kaXRpb24gd2hlbiBjaG9vc2luZyBJRHMKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBpZF9wcml2YXRlLT5sb2NrLCBmbGFncyk7CisKKwkJd2hpbGUgKGlkIDwgRkZfRUZGRUNUU19NQVgpCisJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoRkZfUElEX0ZMQUdTX1VTRUQsICZwaWRfcHJpdmF0ZS0+ZWZmZWN0c1tpZCsrXS5mbGFncykpCisJCQkJYnJlYWs7CisKKwkJaWYgKGlkID09IEZGX0VGRkVDVFNfTUFYKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaWRfcHJpdmF0ZS0+bG9jaywgZmxhZ3MpOworLy8gVEVNUCAtIFdlIG5lZWQgdG8gZ2V0IGZmX2VmZmVjdHNfbWF4IGNvcnJlY3RseSBmaXJzdDogIHx8IGlkID49IGRldi0+ZmZfZWZmZWN0c19tYXgpIHsKKwkJCWRldl9kYmcoJnBpZF9wcml2YXRlLT5oaWQtPmRldi0+ZGV2LCAiTm90IGVub3VnaCBkZXZpY2UgbWVtb3J5XG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJZWZmZWN0LT5pZCA9IGlkOworCQlkZXZfZGJnKCZwaWRfcHJpdmF0ZS0+aGlkLT5kZXYtPmRldiwgImVmZmVjdCBJRCBpcyAlZFxuLiIsIGlkKTsKKwkJcGlkX3ByaXZhdGUtPmVmZmVjdHNbaWRdLm93bmVyID0gY3VycmVudC0+cGlkOworCQlwaWRfcHJpdmF0ZS0+ZWZmZWN0c1tpZF0uZmxhZ3MgPSAoMSA8PCBGRl9QSURfRkxBR1NfVVNFRCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBpZF9wcml2YXRlLT5sb2NrLCBmbGFncyk7CisKKwkJaXNfdXBkYXRlID0gRkZfUElEX0ZBTFNFOworCX0gZWxzZSB7CisJCS8qIFdlIHdhbnQgdG8gdXBkYXRlIGFuIGVmZmVjdCAqLworCQlpZiAoIUNIRUNLX09XTkVSU0hJUChlZmZlY3QtPmlkLCBwaWRfcHJpdmF0ZSkpCisJCQlyZXR1cm4gLUVBQ0NFUzsKKworCQkvKiBQYXJhbWV0ZXIgdHlwZSBjYW5ub3QgYmUgdXBkYXRlZCAqLworCQlpZiAoZWZmZWN0LT50eXBlICE9IHBpZF9wcml2YXRlLT5lZmZlY3RzW2VmZmVjdC0+aWRdLmVmZmVjdC50eXBlKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJLyogQ2hlY2sgdGhlIGVmZmVjdCBpcyBub3QgYWxyZWFkeSBiZWluZyB1cGRhdGVkICovCisJCWlmICh0ZXN0X2JpdChGRl9QSURfRkxBR1NfVVBEQVRJTkcsICZwaWRfcHJpdmF0ZS0+ZWZmZWN0c1tlZmZlY3QtPmlkXS5mbGFncykpCisJCQlyZXR1cm4gLUVBR0FJTjsKKworCQlpc191cGRhdGUgPSBGRl9QSURfVFJVRTsKKwl9CisKKwkvKgorCSAqIFVwbG9hZCB0aGUgZWZmZWN0CisJICovCisJc3dpdGNoIChlZmZlY3QtPnR5cGUpIHsKKwljYXNlIEZGX1BFUklPRElDOgorCQlyZXQgPSBwaWRfdXBsb2FkX3BlcmlvZGljKHBpZF9wcml2YXRlLCBlZmZlY3QsIGlzX3VwZGF0ZSk7CisJCWJyZWFrOworCisJY2FzZSBGRl9DT05TVEFOVDoKKwkJcmV0ID0gcGlkX3VwbG9hZF9jb25zdGFudChwaWRfcHJpdmF0ZSwgZWZmZWN0LCBpc191cGRhdGUpOworCQlicmVhazsKKworCWNhc2UgRkZfU1BSSU5HOgorCWNhc2UgRkZfRlJJQ1RJT046CisJY2FzZSBGRl9EQU1QRVI6CisJY2FzZSBGRl9JTkVSVElBOgorCQlyZXQgPSBwaWRfdXBsb2FkX2NvbmRpdGlvbihwaWRfcHJpdmF0ZSwgZWZmZWN0LCBpc191cGRhdGUpOworCQlicmVhazsKKworCWNhc2UgRkZfUkFNUDoKKwkJcmV0ID0gcGlkX3VwbG9hZF9yYW1wKHBpZF9wcml2YXRlLCBlZmZlY3QsIGlzX3VwZGF0ZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X2RiZygmcGlkX3ByaXZhdGUtPmhpZC0+ZGV2LT5kZXYsCisJCQkiaW52YWxpZCB0eXBlIG9mIGVmZmVjdCByZXF1ZXN0ZWQgLSAleC5cbiIsCisJCQllZmZlY3QtPnR5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogSWYgYSBwYWNrZXQgd2FzIHNlbnQsIGZvcmJpZCBuZXcgdXBkYXRlcyB1bnRpbCB3ZSBhcmUgbm90aWZpZWQKKwkgKiB0aGF0IHRoZSBwYWNrZXQgd2FzIHVwZGF0ZWQKKwkgKi8KKwlpZiAocmV0ID09IDApCisJCXNldF9iaXQoRkZfUElEX0ZMQUdTX1VQREFUSU5HLCAmcGlkX3ByaXZhdGUtPmVmZmVjdHNbZWZmZWN0LT5pZF0uZmxhZ3MpOworCXBpZF9wcml2YXRlLT5lZmZlY3RzW2VmZmVjdC0+aWRdLmVmZmVjdCA9ICplZmZlY3Q7CisJcmV0dXJuIHJldDsKK30KKworaW50IGhpZF9waWRfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXN0cnVjdCBoaWRfZmZfcGlkICpwcml2YXRlOworCXN0cnVjdCBoaWRfaW5wdXQgKmhpZGlucHV0ID0gbGlzdF9lbnRyeSgmaGlkLT5pbnB1dHMsIHN0cnVjdCBoaWRfaW5wdXQsIGxpc3QpOworCisJcHJpdmF0ZSA9IGhpZC0+ZmZfcHJpdmF0ZSA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBoaWRfZmZfcGlkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2YXRlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXZhdGUtPmhpZCA9IGhpZDsKKworCWhpZC0+ZmZfZXhpdCA9IGhpZF9waWRfZXhpdDsKKwloaWQtPmZmX2V2ZW50ID0gaGlkX3BpZF9ldmVudDsKKworCS8qIE9wZW4gb3V0cHV0IFVSQiAqLworCWlmICghKHByaXZhdGUtPnVyYmZmb3V0ID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKSkpIHsKKwkJa2ZyZWUocHJpdmF0ZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwl1c2JfZmlsbF9jb250cm9sX3VyYihwcml2YXRlLT51cmJmZm91dCwgaGlkLT5kZXYsIDAsCisJCQkgICAgICh2b2lkICopJnByaXZhdGUtPmZmY3IsIHByaXZhdGUtPmN0cmxfYnVmZmVyLCA4LAorCQkJICAgICBoaWRfcGlkX2N0cmxfb3V0LCBoaWQpOworCWhpZGlucHV0LT5pbnB1dC51cGxvYWRfZWZmZWN0ID0gaGlkX3BpZF91cGxvYWRfZWZmZWN0OworCWhpZGlucHV0LT5pbnB1dC5mbHVzaCA9IGhpZF9waWRfZmx1c2g7CisJaGlkaW5wdXQtPmlucHV0LmZmX2VmZmVjdHNfbWF4ID0gODsJLy8gQSByYW5kb20gZGVmYXVsdAorCXNldF9iaXQoRVZfRkYsIGhpZGlucHV0LT5pbnB1dC5ldmJpdCk7CisJc2V0X2JpdChFVl9GRl9TVEFUVVMsIGhpZGlucHV0LT5pbnB1dC5ldmJpdCk7CisKKwlzcGluX2xvY2tfaW5pdCgmcHJpdmF0ZS0+bG9jayk7CisKKwlwcmludGsoS0VSTl9JTkZPICJGb3JjZSBmZWVkYmFjayBkcml2ZXIgZm9yIFBJRCBkZXZpY2VzIGJ5IFJvZHJpZ28gRGFtYXppbyA8cmRhbWF6aW9AbHNpLnVzcC5icj4uXG4iKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvcGlkLmggYi9kcml2ZXJzL3VzYi9pbnB1dC9waWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmNiOTYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvcGlkLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqICBQSUQgRm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgaGlkIGRldmljZXMuCisgKgorICogIENvcHlyaWdodCAoYykgMjAwMiBSb2RyaWdvIERhbWF6aW8uCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogU2hvdWxkIHlvdSBuZWVkIHRvIGNvbnRhY3QgbWUsIHRoZSBhdXRob3IsIHlvdSBjYW4gZG8gc28gYnkKKyAqIGUtbWFpbCAtIG1haWwgeW91ciBtZXNzYWdlIHRvIDxyZGFtYXppb0Bsc2kudXNwLmJyPgorICovCisKKyNkZWZpbmUgRkZfRUZGRUNUU19NQVggNjQKKworI2RlZmluZSBGRl9QSURfRkxBR1NfVVNFRAkxCS8qIElmIHRoZSBlZmZlY3QgZXhpc3RzICovCisjZGVmaW5lIEZGX1BJRF9GTEFHU19VUERBVElORwkyCS8qIElmIHRoZSBlZmZlY3QgaXMgYmVpbmcgdXBkYXRlZCAqLworI2RlZmluZSBGRl9QSURfRkxBR1NfUExBWUlORwkzCS8qIElmIHRoZSBlZmZlY3QgaXMgY3VycmVudGx5IGJlaW5nIHBsYXllZCAqLworCisjZGVmaW5lIEZGX1BJRF9GQUxTRQkwCisjZGVmaW5lIEZGX1BJRF9UUlVFCTEKKworc3RydWN0IGhpZF9waWRfZWZmZWN0IHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXBpZF90IG93bmVyOworCXVuc2lnbmVkIGludCBkZXZpY2VfaWQ7CS8qIFRoZSBkZXZpY2UtYXNzaWduZWQgSUQgKi8KKwlzdHJ1Y3QgZmZfZWZmZWN0IGVmZmVjdDsKK307CisKK3N0cnVjdCBoaWRfZmZfcGlkIHsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkOworCXVuc2lnbmVkIGxvbmcgZ2FpbjsKKworCXN0cnVjdCB1cmIgKnVyYmZmb3V0OworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgZmZjcjsKKwlzcGlubG9ja190IGxvY2s7CisKKwl1bnNpZ25lZCBjaGFyIGN0cmxfYnVmZmVyWzhdOworCisJc3RydWN0IGhpZF9waWRfZWZmZWN0IGVmZmVjdHNbRkZfRUZGRUNUU19NQVhdOworfTsKKworLyoKKyAqIENvbnN0YW50cyBmcm9tIHRoZSBQSUQgdXNhZ2UgdGFibGUgKHN0aWxsIGZhciBmcm9tIGNvbXBsZXRlKQorICovCisKKyNkZWZpbmUgRkZfUElEX1VTQUdFX0JMT0NLX0xPQUQgCTB4ODlVTAorI2RlZmluZSBGRl9QSURfVVNBR0VfQkxPQ0tfRlJFRQkJMHg5MFVMCisjZGVmaW5lIEZGX1BJRF9VU0FHRV9ORVdfRUZGRUNUIAkweEFCVUwKKyNkZWZpbmUgRkZfUElEX1VTQUdFX1BPT0xfUkVQT1JUCTB4N0ZVTApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvcG93ZXJtYXRlLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9wb3dlcm1hdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmEyZjliCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvcG93ZXJtYXRlLmMKQEAgLTAsMCArMSw0NjQgQEAKKy8qCisgKiBBIGRyaXZlciBmb3IgdGhlIEdyaWZmaW4gVGVjaG5vbG9neSwgSW5jLiAiUG93ZXJNYXRlIiBVU0IgY29udHJvbGxlciBkaWFsLgorICoKKyAqIHYxLjEsIChjKTIwMDIgV2lsbGlhbSBSIFNvd2VyYnV0dHMgPHdpbGxAc293ZXJidXR0cy5jb20+CisgKgorICogVGhpcyBkZXZpY2UgaXMgYSBhbm9kaXNlZCBhbHVtaW5pdW0ga25vYiB3aGljaCBjb25uZWN0cyBvdmVyIFVTQi4gSXQgY2FuIG1lYXN1cmUKKyAqIGNsb2Nrd2lzZSBhbmQgYW50aWNsb2Nrd2lzZSByb3RhdGlvbi4gVGhlIGRpYWwgYWxzbyBhY3RzIGFzIGEgcHVzaGJ1dHRvbiB3aXRoCisgKiBhIHNwcmluZyBmb3IgYXV0b21hdGljIHJlbGVhc2UuIFRoZSBiYXNlIGNvbnRhaW5zIGEgcGFpciBvZiBMRURzIHdoaWNoIGlsbHVtaW5hdGUKKyAqIHRoZSB0cmFuc2x1Y2VudCBiYXNlLiBJdCByb3RhdGVzIHdpdGhvdXQgbGltaXQgYW5kIHJlcG9ydHMgaXRzIHJlbGF0aXZlIHJvdGF0aW9uCisgKiBiYWNrIHRvIHRoZSBob3N0IHdoZW4gcG9sbGVkIGJ5IHRoZSBVU0IgY29udHJvbGxlci4KKyAqCisgKiBUZXN0aW5nIHdpdGggdGhlIGtub2IgSSBoYXZlIGhhcyBzaG93biB0aGF0IGl0IG1lYXN1cmVzIGFwcHJveGltYXRlbHkgOTQgImNsaWNrcyIKKyAqIGZvciBvbmUgZnVsbCByb3RhdGlvbi4gVGVzdGluZyB3aXRoIG15IEhpZ2ggU3BlZWQgUm90YXRpb24gQWN0dWF0b3IgKG9rLCBpdCB3YXMgCisgKiBhIHZhcmlhYmxlIHNwZWVkIGNvcmRsZXNzIGVsZWN0cmljIGRyaWxsKSBoYXMgc2hvd24gdGhhdCB0aGUgZGV2aWNlIGNhbiBtZWFzdXJlCisgKiBzcGVlZHMgb2YgdXAgdG8gNyBjbGlja3MgZWl0aGVyIGNsb2Nrd2lzZSBvciBhbnRpY2xvY2t3aXNlIGJldHdlZW4gcG9sbGluZ3MgZnJvbQorICogdGhlIGhvc3QuIElmIGl0IGNvdW50cyBtb3JlIHRoYW4gNyBjbGlja3MgYmVmb3JlIGl0IGlzIHBvbGxlZCwgaXQgd2lsbCB3cmFwIGJhY2sKKyAqIHRvIHplcm8gYW5kIHN0YXJ0IGNvdW50aW5nIGFnYWluLiBUaGlzIHdhcyBhdCBxdWl0ZSBoaWdoIHNwZWVkLCBob3dldmVyLCBhbG1vc3QKKyAqIGNlcnRhaW5seSBmYXN0ZXIgdGhhbiB0aGUgaHVtYW4gaGFuZCBjb3VsZCB0dXJuIGl0LiBHcmlmZmluIHNheSB0aGF0IGl0IGxvc2VzIGEKKyAqIHB1bHNlIG9yIHR3byBvbiBhIGRpcmVjdGlvbiBjaGFuZ2U7IHRoZSBncmFudWxhcml0eSBpcyBzbyBmaW5lIHRoYXQgSSBuZXZlcgorICogbm90aWNlZCB0aGlzIGluIHByYWN0aWNlLgorICoKKyAqIFRoZSBkZXZpY2UncyBtaWNyb2NvbnRyb2xsZXIgY2FuIGJlIHByb2dyYW1tZWQgdG8gc2V0IHRoZSBMRUQgdG8gZWl0aGVyIGEgY29uc3RhbnQKKyAqIGludGVuc2l0eSwgb3IgdG8gYSByaHl0aG1pYyBwdWxzaW5nLiBTZXZlcmFsIHBhdHRlcm5zIGFuZCBzcGVlZHMgYXJlIGF2YWlsYWJsZS4KKyAqCisgKiBHcmlmZmluIHdlcmUgdmVyeSBoYXBweSB0byBwcm92aWRlIGRvY3VtZW50YXRpb24gYW5kIGZyZWUgaGFyZHdhcmUgZm9yIGRldmVsb3BtZW50LgorICoKKyAqIFNvbWUgdXNlcnNwYWNlIHRvb2xzIGFyZSBhdmFpbGFibGUgb24gdGhlIHdlYjogaHR0cDovL3Nvd2VyYnV0dHMuY29tL3Bvd2VybWF0ZS8KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjZGVmaW5lIFBPV0VSTUFURV9WRU5ET1IJMHgwNzdkCS8qIEdyaWZmaW4gVGVjaG5vbG9neSwgSW5jLiAqLworI2RlZmluZSBQT1dFUk1BVEVfUFJPRFVDVF9ORVcJMHgwNDEwCS8qIEdyaWZmaW4gUG93ZXJNYXRlICovCisjZGVmaW5lIFBPV0VSTUFURV9QUk9EVUNUX09MRAkweDA0QUEJLyogR3JpZmZpbiBzb3VuZEtub2IgKi8KKworI2RlZmluZSBDT05UT1VSX1ZFTkRPUgkJMHgwNWYzCS8qIENvbnRvdXIgRGVzaWduLCBJbmMuICovCisjZGVmaW5lIENPTlRPVVJfSk9HCQkweDAyNDAJLyogSm9nIGFuZCBTaHV0dGxlICovCisKKy8qIHRoZXNlIGFyZSB0aGUgY29tbWFuZCBjb2RlcyB3ZSBzZW5kIHRvIHRoZSBkZXZpY2UgKi8KKyNkZWZpbmUgU0VUX1NUQVRJQ19CUklHSFRORVNTICAweDAxCisjZGVmaW5lIFNFVF9QVUxTRV9BU0xFRVAgICAgICAgMHgwMgorI2RlZmluZSBTRVRfUFVMU0VfQVdBS0UgICAgICAgIDB4MDMKKyNkZWZpbmUgU0VUX1BVTFNFX01PREUgICAgICAgICAweDA0CisKKy8qIHRoZXNlIHJlZmVyIHRvIGJpdHMgaW4gdGhlIHBvd2VybWF0ZV9kZXZpY2UncyByZXF1aXJlc191cGRhdGUgZmllbGQuICovCisjZGVmaW5lIFVQREFURV9TVEFUSUNfQlJJR0hUTkVTUyAoMTw8MCkKKyNkZWZpbmUgVVBEQVRFX1BVTFNFX0FTTEVFUCAgICAgICgxPDwxKQorI2RlZmluZSBVUERBVEVfUFVMU0VfQVdBS0UgICAgICAgKDE8PDIpCisjZGVmaW5lIFVQREFURV9QVUxTRV9NT0RFICAgICAgICAoMTw8MykKKworLyogYXQgbGVhc3QgdHdvIHZlcnNpb25zIG9mIHRoZSBoYXJkd2FyZSBleGlzdCwgd2l0aCBkaWZmZXJpbmcgcGF5bG9hZAorICAgc2l6ZXMuIHRoZSBmaXJzdCB0aHJlZSBieXRlcyBhbHdheXMgY29udGFpbiB0aGUgImludGVyZXN0aW5nIiBkYXRhIGluCisgICB0aGUgcmVsZXZhbnQgZm9ybWF0LiAqLworI2RlZmluZSBQT1dFUk1BVEVfUEFZTE9BRF9TSVpFX01BWCA2CisjZGVmaW5lIFBPV0VSTUFURV9QQVlMT0FEX1NJWkVfTUlOIDMKK3N0cnVjdCBwb3dlcm1hdGVfZGV2aWNlIHsKKwlzaWduZWQgY2hhciAqZGF0YTsKKwlkbWFfYWRkcl90IGRhdGFfZG1hOworCXN0cnVjdCB1cmIgKmlycSwgKmNvbmZpZzsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjb25maWdjcjsKKwlkbWFfYWRkcl90IGNvbmZpZ2NyX2RtYTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlzdHJ1Y3QgaW5wdXRfZGV2IGlucHV0OworCXNwaW5sb2NrX3QgbG9jazsKKwlpbnQgc3RhdGljX2JyaWdodG5lc3M7CisJaW50IHB1bHNlX3NwZWVkOworCWludCBwdWxzZV90YWJsZTsKKwlpbnQgcHVsc2VfYXNsZWVwOworCWludCBwdWxzZV9hd2FrZTsKKwlpbnQgcmVxdWlyZXNfdXBkYXRlOyAvLyBwaHlzaWNhbCBzZXR0aW5ncyB3aGljaCBhcmUgb3V0IG9mIHN5bmMKKwljaGFyIHBoeXNbNjRdOworfTsKKworc3RhdGljIGNoYXIgcG1fbmFtZV9wb3dlcm1hdGVbXSA9ICJHcmlmZmluIFBvd2VyTWF0ZSI7CitzdGF0aWMgY2hhciBwbV9uYW1lX3NvdW5ka25vYltdID0gIkdyaWZmaW4gU291bmRLbm9iIjsKKworc3RhdGljIHZvaWQgcG93ZXJtYXRlX2NvbmZpZ19jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworLyogQ2FsbGJhY2sgZm9yIGRhdGEgYXJyaXZpbmcgZnJvbSB0aGUgUG93ZXJNYXRlIG92ZXIgdGhlIFVTQiBpbnRlcnJ1cHQgcGlwZSAqLworc3RhdGljIHZvaWQgcG93ZXJtYXRlX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwb3dlcm1hdGVfZGV2aWNlICpwbSA9IHVyYi0+Y29udGV4dDsKKwlpbnQgcmV0dmFsOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBoYW5kbGUgdXBkYXRlcyB0byBkZXZpY2Ugc3RhdGUgKi8KKwlpbnB1dF9yZWdzKCZwbS0+aW5wdXQsIHJlZ3MpOworCWlucHV0X3JlcG9ydF9rZXkoJnBtLT5pbnB1dCwgQlROXzAsIHBtLT5kYXRhWzBdICYgMHgwMSk7CisJaW5wdXRfcmVwb3J0X3JlbCgmcG0tPmlucHV0LCBSRUxfRElBTCwgcG0tPmRhdGFbMV0pOworCWlucHV0X3N5bmMoJnBtLT5pbnB1dCk7CisKK2V4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKK30KKworLyogRGVjaWRlIGlmIHdlIG5lZWQgdG8gaXNzdWUgYSBjb250cm9sIG1lc3NhZ2UgYW5kIGRvIHNvLiBNdXN0IGJlIGNhbGxlZCB3aXRoIHBtLT5sb2NrIHRha2VuICovCitzdGF0aWMgdm9pZCBwb3dlcm1hdGVfc3luY19zdGF0ZShzdHJ1Y3QgcG93ZXJtYXRlX2RldmljZSAqcG0pCit7CisJaWYgKHBtLT5yZXF1aXJlc191cGRhdGUgPT0gMCkgCisJCXJldHVybjsgLyogbm8gdXBkYXRlcyBhcmUgcmVxdWlyZWQgKi8KKwlpZiAocG0tPmNvbmZpZy0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgCisJCXJldHVybjsgLyogYW4gdXBkYXRlIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3M7IGl0J2xsIGlzc3VlIHRoaXMgdXBkYXRlIHdoZW4gaXQgY29tcGxldGVzICovCisKKwlpZiAocG0tPnJlcXVpcmVzX3VwZGF0ZSAmIFVQREFURV9QVUxTRV9BU0xFRVApeworCQlwbS0+Y29uZmlnY3ItPndWYWx1ZSA9IGNwdV90b19sZTE2KCBTRVRfUFVMU0VfQVNMRUVQICk7CisJCXBtLT5jb25maWdjci0+d0luZGV4ID0gY3B1X3RvX2xlMTYoIHBtLT5wdWxzZV9hc2xlZXAgPyAxIDogMCApOworCQlwbS0+cmVxdWlyZXNfdXBkYXRlICY9IH5VUERBVEVfUFVMU0VfQVNMRUVQOworCX1lbHNlIGlmIChwbS0+cmVxdWlyZXNfdXBkYXRlICYgVVBEQVRFX1BVTFNFX0FXQUtFKXsKKwkJcG0tPmNvbmZpZ2NyLT53VmFsdWUgPSBjcHVfdG9fbGUxNiggU0VUX1BVTFNFX0FXQUtFICk7CisJCXBtLT5jb25maWdjci0+d0luZGV4ID0gY3B1X3RvX2xlMTYoIHBtLT5wdWxzZV9hd2FrZSA/IDEgOiAwICk7CisJCXBtLT5yZXF1aXJlc191cGRhdGUgJj0gflVQREFURV9QVUxTRV9BV0FLRTsKKwl9ZWxzZSBpZiAocG0tPnJlcXVpcmVzX3VwZGF0ZSAmIFVQREFURV9QVUxTRV9NT0RFKXsKKwkJaW50IG9wLCBhcmc7CisJCS8qIHRoZSBwb3dlcm1hdGUgdGFrZXMgYW4gb3BlcmF0aW9uIGFuZCBhbiBhcmd1bWVudCBmb3IgaXRzIHB1bHNlIGFsZ29yaXRobS4KKwkJICAgdGhlIG9wZXJhdGlvbiBjYW4gYmU6CisJCSAgIDA6IGRpdmlkZSB0aGUgc3BlZWQKKwkJICAgMTogcHVsc2UgYXQgbm9ybWFsIHNwZWVkCisJCSAgIDI6IG11bHRpcGx5IHRoZSBzcGVlZAorCQkgICB0aGUgYXJndW1lbnQgb25seSBoYXMgYW4gZWZmZWN0IGZvciBvcGVyYXRpb25zIDAgYW5kIDIsIGFuZCByYW5nZXMgYmV0d2VlbgorCQkgICAxIChsZWFzdCBlZmZlY3QpIHRvIDI1NSAobWF4aW11bSBlZmZlY3QpLgorICAgICAgIAorCQkgICB0aHVzLCBzZXZlcmFsIHN0YXRlcyBhcmUgZXF1aXZhbGVudCBhbmQgYXJlIGNvYWxlc2NlZCBpbnRvIG9uZSBzdGF0ZS4KKworCQkgICB3ZSBtYXAgdGhpcyBvbnRvIGEgcmFuZ2UgZnJvbSAwIHRvIDUxMCwgd2l0aDoKKwkJICAgMCAtLSAyNTQgICAgLS0gdXNlIGRpdmlkZSAoMCA9IHNsb3dlc3QpCisJCSAgIDI1NSAgICAgICAgIC0tIHVzZSBub3JtYWwgc3BlZWQKKwkJICAgMjU2IC0tIDUxMCAgLS0gdXNlIG11bHRpcGxlICg1MTAgPSBmYXN0ZXN0KS4KKworCQkgICBPbmx5IHZhbHVlcyBvZiAnYXJnJyBxdWl0ZSBjbG9zZSB0byAyNTUgYXJlIHBhcnRpY3VsYXJseSB1c2VmdWwvc3BlY3RhY3VsYXIuCisJCSovICAgIAorCQlpZiAocG0tPnB1bHNlX3NwZWVkIDwgMjU1KXsKKwkJCW9wID0gMDsgICAgICAgICAgICAgICAgICAgLy8gZGl2aWRlCisJCQlhcmcgPSAyNTUgLSBwbS0+cHVsc2Vfc3BlZWQ7CisJCX0gZWxzZSBpZiAocG0tPnB1bHNlX3NwZWVkID4gMjU1KXsKKwkJCW9wID0gMjsgICAgICAgICAgICAgICAgICAgLy8gbXVsdGlwbHkKKwkJCWFyZyA9IHBtLT5wdWxzZV9zcGVlZCAtIDI1NTsKKwkJfSBlbHNlIHsKKwkJCW9wID0gMTsgICAgICAgICAgICAgICAgICAgLy8gbm9ybWFsIHNwZWVkCisJCQlhcmcgPSAwOyAgICAgICAgICAgICAgICAgIC8vIGNhbiBiZSBhbnkgdmFsdWUKKwkJfQorCQlwbS0+Y29uZmlnY3ItPndWYWx1ZSA9IGNwdV90b19sZTE2KCAocG0tPnB1bHNlX3RhYmxlIDw8IDgpIHwgU0VUX1BVTFNFX01PREUgKTsKKwkJcG0tPmNvbmZpZ2NyLT53SW5kZXggPSBjcHVfdG9fbGUxNiggKGFyZyA8PCA4KSB8IG9wICk7CisJCXBtLT5yZXF1aXJlc191cGRhdGUgJj0gflVQREFURV9QVUxTRV9NT0RFOworCX1lbHNlIGlmIChwbS0+cmVxdWlyZXNfdXBkYXRlICYgVVBEQVRFX1NUQVRJQ19CUklHSFRORVNTKXsKKwkJcG0tPmNvbmZpZ2NyLT53VmFsdWUgPSBjcHVfdG9fbGUxNiggU0VUX1NUQVRJQ19CUklHSFRORVNTICk7CisJCXBtLT5jb25maWdjci0+d0luZGV4ID0gY3B1X3RvX2xlMTYoIHBtLT5zdGF0aWNfYnJpZ2h0bmVzcyApOworCQlwbS0+cmVxdWlyZXNfdXBkYXRlICY9IH5VUERBVEVfU1RBVElDX0JSSUdIVE5FU1M7CisJfWVsc2V7CisJCXByaW50ayhLRVJOX0VSUiAicG93ZXJtYXRlOiB1bmtub3duIHVwZGF0ZSByZXF1aXJlZCIpOworCQlwbS0+cmVxdWlyZXNfdXBkYXRlID0gMDsgLyogZnVkZ2UgdGhlIGJ1ZyAqLworCQlyZXR1cm47CisJfQorCisvKglwcmludGsoInBvd2VybWF0ZTogJTA0eCAlMDR4XG4iLCBwbS0+Y29uZmlnY3ItPndWYWx1ZSwgcG0tPmNvbmZpZ2NyLT53SW5kZXgpOyAqLworCisJcG0tPmNvbmZpZ2NyLT5iUmVxdWVzdFR5cGUgPSAweDQxOyAvKiB2ZW5kb3IgcmVxdWVzdCAqLworCXBtLT5jb25maWdjci0+YlJlcXVlc3QgPSAweDAxOworCXBtLT5jb25maWdjci0+d0xlbmd0aCA9IDA7CisKKwl1c2JfZmlsbF9jb250cm9sX3VyYihwbS0+Y29uZmlnLCBwbS0+dWRldiwgdXNiX3NuZGN0cmxwaXBlKHBtLT51ZGV2LCAwKSwKKwkJCSAgICAgKHZvaWQgKikgcG0tPmNvbmZpZ2NyLCBOVUxMLCAwLAorCQkJICAgICBwb3dlcm1hdGVfY29uZmlnX2NvbXBsZXRlLCBwbSk7CisJcG0tPmNvbmZpZy0+c2V0dXBfZG1hID0gcG0tPmNvbmZpZ2NyX2RtYTsKKwlwbS0+Y29uZmlnLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fU0VUVVBfRE1BX01BUDsKKworCWlmICh1c2Jfc3VibWl0X3VyYihwbS0+Y29uZmlnLCBHRlBfQVRPTUlDKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJwb3dlcm1hdGU6IHVzYl9zdWJtaXRfdXJiKGNvbmZpZykgZmFpbGVkIik7Cit9CisKKy8qIENhbGxlZCB3aGVuIG91ciBhc3luY2hyb25vdXMgY29udHJvbCBtZXNzYWdlIGNvbXBsZXRlcy4gV2UgbWF5IG5lZWQgdG8gaXNzdWUgYW5vdGhlciBpbW1lZGlhdGVseSAqLworc3RhdGljIHZvaWQgcG93ZXJtYXRlX2NvbmZpZ19jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwb3dlcm1hdGVfZGV2aWNlICpwbSA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHVyYi0+c3RhdHVzKQorCQlwcmludGsoS0VSTl9FUlIgInBvd2VybWF0ZTogY29uZmlnIHVyYiByZXR1cm5lZCAlZFxuIiwgdXJiLT5zdGF0dXMpOworCQorCXNwaW5fbG9ja19pcnFzYXZlKCZwbS0+bG9jaywgZmxhZ3MpOworCXBvd2VybWF0ZV9zeW5jX3N0YXRlKHBtKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbS0+bG9jaywgZmxhZ3MpOworfQorCisvKiBTZXQgdGhlIExFRCB1cCBhcyBkZXNjcmliZWQgYW5kIGJlZ2luIHRoZSBzeW5jIHdpdGggdGhlIGhhcmR3YXJlIGlmIHJlcXVpcmVkICovCitzdGF0aWMgdm9pZCBwb3dlcm1hdGVfcHVsc2VfbGVkKHN0cnVjdCBwb3dlcm1hdGVfZGV2aWNlICpwbSwgaW50IHN0YXRpY19icmlnaHRuZXNzLCBpbnQgcHVsc2Vfc3BlZWQsIAorCQkJCWludCBwdWxzZV90YWJsZSwgaW50IHB1bHNlX2FzbGVlcCwgaW50IHB1bHNlX2F3YWtlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAocHVsc2Vfc3BlZWQgPCAwKQorCQlwdWxzZV9zcGVlZCA9IDA7CisJaWYgKHB1bHNlX3RhYmxlIDwgMCkKKwkJcHVsc2VfdGFibGUgPSAwOworCWlmIChwdWxzZV9zcGVlZCA+IDUxMCkKKwkJcHVsc2Vfc3BlZWQgPSA1MTA7CisJaWYgKHB1bHNlX3RhYmxlID4gMikKKwkJcHVsc2VfdGFibGUgPSAyOworCisJcHVsc2VfYXNsZWVwID0gISFwdWxzZV9hc2xlZXA7CisJcHVsc2VfYXdha2UgPSAhIXB1bHNlX2F3YWtlOworCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG0tPmxvY2ssIGZsYWdzKTsKKworCS8qIG1hcmsgc3RhdGUgdXBkYXRlcyB3aGljaCBhcmUgcmVxdWlyZWQgKi8KKwlpZiAoc3RhdGljX2JyaWdodG5lc3MgIT0gcG0tPnN0YXRpY19icmlnaHRuZXNzKXsKKwkJcG0tPnN0YXRpY19icmlnaHRuZXNzID0gc3RhdGljX2JyaWdodG5lc3M7CisJCXBtLT5yZXF1aXJlc191cGRhdGUgfD0gVVBEQVRFX1NUQVRJQ19CUklHSFRORVNTOwkJCisJfQorCWlmIChwdWxzZV9hc2xlZXAgIT0gcG0tPnB1bHNlX2FzbGVlcCl7CisJCXBtLT5wdWxzZV9hc2xlZXAgPSBwdWxzZV9hc2xlZXA7CisJCXBtLT5yZXF1aXJlc191cGRhdGUgfD0gKFVQREFURV9QVUxTRV9BU0xFRVAgfCBVUERBVEVfU1RBVElDX0JSSUdIVE5FU1MpOworCX0KKwlpZiAocHVsc2VfYXdha2UgIT0gcG0tPnB1bHNlX2F3YWtlKXsKKwkJcG0tPnB1bHNlX2F3YWtlID0gcHVsc2VfYXdha2U7CisJCXBtLT5yZXF1aXJlc191cGRhdGUgfD0gKFVQREFURV9QVUxTRV9BV0FLRSB8IFVQREFURV9TVEFUSUNfQlJJR0hUTkVTUyk7CisJfQorCWlmIChwdWxzZV9zcGVlZCAhPSBwbS0+cHVsc2Vfc3BlZWQgfHwgcHVsc2VfdGFibGUgIT0gcG0tPnB1bHNlX3RhYmxlKXsKKwkJcG0tPnB1bHNlX3NwZWVkID0gcHVsc2Vfc3BlZWQ7CisJCXBtLT5wdWxzZV90YWJsZSA9IHB1bHNlX3RhYmxlOworCQlwbS0+cmVxdWlyZXNfdXBkYXRlIHw9IFVQREFURV9QVUxTRV9NT0RFOworCX0KKworCXBvd2VybWF0ZV9zeW5jX3N0YXRlKHBtKTsKKyAgIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qIENhbGxiYWNrIGZyb20gdGhlIElucHV0IGxheWVyIHdoZW4gYW4gZXZlbnQgYXJyaXZlcyBmcm9tIHVzZXJzcGFjZSB0byBjb25maWd1cmUgdGhlIExFRCAqLworc3RhdGljIGludCBwb3dlcm1hdGVfaW5wdXRfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCBfdmFsdWUpCit7CisJdW5zaWduZWQgaW50IGNvbW1hbmQgPSAodW5zaWduZWQgaW50KV92YWx1ZTsKKwlzdHJ1Y3QgcG93ZXJtYXRlX2RldmljZSAqcG0gPSBkZXYtPnByaXZhdGU7CisKKwlpZiAodHlwZSA9PSBFVl9NU0MgJiYgY29kZSA9PSBNU0NfUFVMU0VMRUQpeworCQkvKiAgCisJCSAgICBiaXRzICAwLSA3OiA4IGJpdHM6IExFRCBicmlnaHRuZXNzCisJCSAgICBiaXRzICA4LTE2OiA5IGJpdHM6IHB1bHNpbmcgc3BlZWQgbW9kaWZpZXIgKDAgLi4uIDUxMCk7IDAtMjU0ID0gc2xvd2VyLCAyNTUgPSBzdGFuZGFyZCwgMjU2LTUxMCA9IGZhc3Rlci4KKwkJICAgIGJpdHMgMTctMTg6IDIgYml0czogcHVsc2UgdGFibGUgKDAsIDEsIDIgdmFsaWQpCisJCSAgICBiaXQgICAgIDE5OiAxIGJpdCA6IHB1bHNlIHdoaWxzdCBhc2xlZXA/CisJCSAgICBiaXQgICAgIDIwOiAxIGJpdCA6IHB1bHNlIGNvbnN0YW50bHk/CisJCSovICAKKwkJaW50IHN0YXRpY19icmlnaHRuZXNzID0gY29tbWFuZCAmIDB4RkY7ICAgLy8gYml0cyAwLTcKKwkJaW50IHB1bHNlX3NwZWVkID0gKGNvbW1hbmQgPj4gOCkgJiAweDFGRjsgLy8gYml0cyA4LTE2CisJCWludCBwdWxzZV90YWJsZSA9IChjb21tYW5kID4+IDE3KSAmIDB4MzsgIC8vIGJpdHMgMTctMTgKKwkJaW50IHB1bHNlX2FzbGVlcCA9IChjb21tYW5kID4+IDE5KSAmIDB4MTsgLy8gYml0IDE5CisJCWludCBwdWxzZV9hd2FrZSAgPSAoY29tbWFuZCA+PiAyMCkgJiAweDE7IC8vIGJpdCAyMAorICAKKwkJcG93ZXJtYXRlX3B1bHNlX2xlZChwbSwgc3RhdGljX2JyaWdodG5lc3MsIHB1bHNlX3NwZWVkLCBwdWxzZV90YWJsZSwgcHVsc2VfYXNsZWVwLCBwdWxzZV9hd2FrZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG93ZXJtYXRlX2FsbG9jX2J1ZmZlcnMoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHN0cnVjdCBwb3dlcm1hdGVfZGV2aWNlICpwbSkKK3sKKwlwbS0+ZGF0YSA9IHVzYl9idWZmZXJfYWxsb2ModWRldiwgUE9XRVJNQVRFX1BBWUxPQURfU0laRV9NQVgsCisJCQkJICAgIFNMQUJfQVRPTUlDLCAmcG0tPmRhdGFfZG1hKTsKKwlpZiAoIXBtLT5kYXRhKQorCQlyZXR1cm4gLTE7CisJcG0tPmNvbmZpZ2NyID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LCBzaXplb2YoKihwbS0+Y29uZmlnY3IpKSwKKwkJCQkJU0xBQl9BVE9NSUMsICZwbS0+Y29uZmlnY3JfZG1hKTsKKwlpZiAoIXBtLT5jb25maWdjcikKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBvd2VybWF0ZV9mcmVlX2J1ZmZlcnMoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHN0cnVjdCBwb3dlcm1hdGVfZGV2aWNlICpwbSkKK3sKKwlpZiAocG0tPmRhdGEpCisJCXVzYl9idWZmZXJfZnJlZSh1ZGV2LCBQT1dFUk1BVEVfUEFZTE9BRF9TSVpFX01BWCwKKwkJCQlwbS0+ZGF0YSwgcG0tPmRhdGFfZG1hKTsKKwlpZiAocG0tPmNvbmZpZ2NyKQorCQl1c2JfYnVmZmVyX2ZyZWUodWRldiwgc2l6ZW9mKCoocG0tPmNvbmZpZ2NyKSksCisJCQkJcG0tPmNvbmZpZ2NyLCBwbS0+Y29uZmlnY3JfZG1hKTsKK30KKworLyogQ2FsbGVkIHdoZW5ldmVyIGEgVVNCIGRldmljZSBtYXRjaGluZyBvbmUgaW4gb3VyIHN1cHBvcnRlZCBkZXZpY2VzIHRhYmxlIGlzIGNvbm5lY3RlZCAqLworc3RhdGljIGludCBwb3dlcm1hdGVfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCXN0cnVjdCBwb3dlcm1hdGVfZGV2aWNlICpwbTsKKwlpbnQgcGlwZSwgbWF4cDsKKwljaGFyIHBhdGhbNjRdOworCisJaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOworCWlmICghKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkpCisJCXJldHVybiAtRUlPOworCWlmICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIDMpICE9IDMpCisJCXJldHVybiAtRUlPOworCisJdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJMHgwYSwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkwLCBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlciwgTlVMTCwgMCwKKwkJVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCisJaWYgKCEocG0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcG93ZXJtYXRlX2RldmljZSksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQocG0sIDAsIHNpemVvZihzdHJ1Y3QgcG93ZXJtYXRlX2RldmljZSkpOworCXBtLT51ZGV2ID0gdWRldjsKKworCWlmIChwb3dlcm1hdGVfYWxsb2NfYnVmZmVycyh1ZGV2LCBwbSkpIHsKKwkJcG93ZXJtYXRlX2ZyZWVfYnVmZmVycyh1ZGV2LCBwbSk7CisJCWtmcmVlKHBtKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcG0tPmlycSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbS0+aXJxKSB7CisJCXBvd2VybWF0ZV9mcmVlX2J1ZmZlcnModWRldiwgcG0pOworCQlrZnJlZShwbSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBtLT5jb25maWcgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghcG0tPmNvbmZpZykgeworCQl1c2JfZnJlZV91cmIocG0tPmlycSk7CisJCXBvd2VybWF0ZV9mcmVlX2J1ZmZlcnModWRldiwgcG0pOworCQlrZnJlZShwbSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNwaW5fbG9ja19pbml0KCZwbS0+bG9jayk7CisJaW5pdF9pbnB1dF9kZXYoJnBtLT5pbnB1dCk7CisKKwkvKiBnZXQgYSBoYW5kbGUgdG8gdGhlIGludGVycnVwdCBkYXRhIHBpcGUgKi8KKwlwaXBlID0gdXNiX3JjdmludHBpcGUodWRldiwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpOworCW1heHAgPSB1c2JfbWF4cGFja2V0KHVkZXYsIHBpcGUsIHVzYl9waXBlb3V0KHBpcGUpKTsKKworCWlmKG1heHAgPCBQT1dFUk1BVEVfUEFZTE9BRF9TSVpFX01JTiB8fCBtYXhwID4gUE9XRVJNQVRFX1BBWUxPQURfU0laRV9NQVgpeworCQlwcmludGsoInBvd2VybWF0ZTogRXhwZWN0ZWQgcGF5bG9hZCBvZiAlZC0tJWQgYnl0ZXMsIGZvdW5kICVkIGJ5dGVzIVxuIiwKKwkJCVBPV0VSTUFURV9QQVlMT0FEX1NJWkVfTUlOLCBQT1dFUk1BVEVfUEFZTE9BRF9TSVpFX01BWCwgbWF4cCk7CisJCW1heHAgPSBQT1dFUk1BVEVfUEFZTE9BRF9TSVpFX01BWDsKKwl9CisKKwl1c2JfZmlsbF9pbnRfdXJiKHBtLT5pcnEsIHVkZXYsIHBpcGUsIHBtLT5kYXRhLAorCQkJIG1heHAsIHBvd2VybWF0ZV9pcnEsCisJCQkgcG0sIGVuZHBvaW50LT5iSW50ZXJ2YWwpOworCXBtLT5pcnEtPnRyYW5zZmVyX2RtYSA9IHBtLT5kYXRhX2RtYTsKKwlwbS0+aXJxLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCS8qIHJlZ2lzdGVyIG91ciBpbnRlcnJ1cHQgVVJCIHdpdGggdGhlIFVTQiBzeXN0ZW0gKi8KKwlpZiAodXNiX3N1Ym1pdF91cmIocG0tPmlycSwgR0ZQX0tFUk5FTCkpIHsKKwkJcG93ZXJtYXRlX2ZyZWVfYnVmZmVycyh1ZGV2LCBwbSk7CisJCWtmcmVlKHBtKTsKKwkJcmV0dXJuIC1FSU87IC8qIGZhaWx1cmUgKi8KKwl9CisKKwlzd2l0Y2ggKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSkgeworCWNhc2UgUE9XRVJNQVRFX1BST0RVQ1RfTkVXOiBwbS0+aW5wdXQubmFtZSA9IHBtX25hbWVfcG93ZXJtYXRlOyBicmVhazsKKwljYXNlIFBPV0VSTUFURV9QUk9EVUNUX09MRDogcG0tPmlucHV0Lm5hbWUgPSBwbV9uYW1lX3NvdW5ka25vYjsgYnJlYWs7CisJZGVmYXVsdDogCisJCXBtLT5pbnB1dC5uYW1lID0gcG1fbmFtZV9zb3VuZGtub2I7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInBvd2VybWF0ZTogdW5rbm93biBwcm9kdWN0IGlkICUwNHhcbiIsCisJCSAgICAgICBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOworCX0KKworCXBtLT5pbnB1dC5wcml2YXRlID0gcG07CisJcG0tPmlucHV0LmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfUkVMKSB8IEJJVChFVl9NU0MpOworCXBtLT5pbnB1dC5rZXliaXRbTE9ORyhCVE5fMCldID0gQklUKEJUTl8wKTsKKwlwbS0+aW5wdXQucmVsYml0W0xPTkcoUkVMX0RJQUwpXSA9IEJJVChSRUxfRElBTCk7CisJcG0tPmlucHV0Lm1zY2JpdFtMT05HKE1TQ19QVUxTRUxFRCldID0gQklUKE1TQ19QVUxTRUxFRCk7CisJcG0tPmlucHV0LmlkLmJ1c3R5cGUgPSBCVVNfVVNCOworCXBtLT5pbnB1dC5pZC52ZW5kb3IgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwlwbS0+aW5wdXQuaWQucHJvZHVjdCA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwlwbS0+aW5wdXQuaWQudmVyc2lvbiA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKKwlwbS0+aW5wdXQuZXZlbnQgPSBwb3dlcm1hdGVfaW5wdXRfZXZlbnQ7CisJcG0tPmlucHV0LmRldiA9ICZpbnRmLT5kZXY7CisJcG0tPmlucHV0LnBoeXMgPSBwbS0+cGh5czsKKworCWlucHV0X3JlZ2lzdGVyX2RldmljZSgmcG0tPmlucHV0KTsKKworCXVzYl9tYWtlX3BhdGgodWRldiwgcGF0aCwgNjQpOworCXNucHJpbnRmKHBtLT5waHlzLCA2NCwgIiVzL2lucHV0MCIsIHBhdGgpOworCXByaW50ayhLRVJOX0lORk8gImlucHV0OiAlcyBvbiAlc1xuIiwgcG0tPmlucHV0Lm5hbWUsIHBtLT5pbnB1dC5waHlzKTsKKwkKKwkvKiBmb3JjZSBhbiB1cGRhdGUgb2YgZXZlcnl0aGluZyAqLworCXBtLT5yZXF1aXJlc191cGRhdGUgPSBVUERBVEVfUFVMU0VfQVNMRUVQIHwgVVBEQVRFX1BVTFNFX0FXQUtFIHwgVVBEQVRFX1BVTFNFX01PREUgfCBVUERBVEVfU1RBVElDX0JSSUdIVE5FU1M7CisJcG93ZXJtYXRlX3B1bHNlX2xlZChwbSwgMHg4MCwgMjU1LCAwLCAxLCAwKTsgLy8gc2V0IGRlZmF1bHQgcHVsc2UgcGFyYW1ldGVycworICAKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHBtKTsKKwlyZXR1cm4gMDsKK30KKworLyogQ2FsbGVkIHdoZW4gYSBVU0IgZGV2aWNlIHdlJ3ZlIGFjY2VwdGVkIG93bmVyc2hpcCBvZiBpcyByZW1vdmVkICovCitzdGF0aWMgdm9pZCBwb3dlcm1hdGVfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgcG93ZXJtYXRlX2RldmljZSAqcG0gPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJaWYgKHBtKSB7CisJCXBtLT5yZXF1aXJlc191cGRhdGUgPSAwOworCQl1c2Jfa2lsbF91cmIocG0tPmlycSk7CisJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKCZwbS0+aW5wdXQpOworCQl1c2JfZnJlZV91cmIocG0tPmlycSk7CisJCXVzYl9mcmVlX3VyYihwbS0+Y29uZmlnKTsKKwkJcG93ZXJtYXRlX2ZyZWVfYnVmZmVycyhpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCBwbSk7CisKKwkJa2ZyZWUocG0pOworCX0KK30KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHBvd2VybWF0ZV9kZXZpY2VzIFtdID0geworCXsgVVNCX0RFVklDRShQT1dFUk1BVEVfVkVORE9SLCBQT1dFUk1BVEVfUFJPRFVDVF9ORVcpIH0sCisJeyBVU0JfREVWSUNFKFBPV0VSTUFURV9WRU5ET1IsIFBPV0VSTUFURV9QUk9EVUNUX09MRCkgfSwKKwl7IFVTQl9ERVZJQ0UoQ09OVE9VUl9WRU5ET1IsIENPTlRPVVJfSk9HKSB9LAorCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBwb3dlcm1hdGVfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwb3dlcm1hdGVfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorICAgICAgICAubmFtZSA9ICAgICAgICAgInBvd2VybWF0ZSIsCisgICAgICAgIC5wcm9iZSA9ICAgICAgICBwb3dlcm1hdGVfcHJvYmUsCisgICAgICAgIC5kaXNjb25uZWN0ID0gICBwb3dlcm1hdGVfZGlzY29ubmVjdCwKKyAgICAgICAgLmlkX3RhYmxlID0gICAgIHBvd2VybWF0ZV9kZXZpY2VzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcG93ZXJtYXRlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZwb3dlcm1hdGVfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHBvd2VybWF0ZV9jbGVhbnVwKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnBvd2VybWF0ZV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChwb3dlcm1hdGVfaW5pdCk7Cittb2R1bGVfZXhpdChwb3dlcm1hdGVfY2xlYW51cCk7CisKK01PRFVMRV9BVVRIT1IoICJXaWxsaWFtIFIgU293ZXJidXR0cyIgKTsKK01PRFVMRV9ERVNDUklQVElPTiggIkdyaWZmaW4gVGVjaG5vbG9neSwgSW5jIFBvd2VyTWF0ZSBkcml2ZXIiICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC90b3VjaGtpdHVzYi5jIGIvZHJpdmVycy91c2IvaW5wdXQvdG91Y2hraXR1c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzFmMWJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvdG91Y2hraXR1c2IuYwpAQCAtMCwwICsxLDMxMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogdG91Y2hraXR1c2IuYyAgLS0gIERyaXZlciBmb3IgZUdhbGF4IFRvdWNoS2l0IFVTQiBUb3VjaHNjcmVlbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgYnkgRGFuaWVsIFJpdHoKKyAqIENvcHlyaWdodCAoQykgYnkgVG9kZCBFLiBKb2huc29uIChtdG91Y2h1c2IuYykKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiBCYXNlZCB1cG9uIG10b3VjaHVzYi5jCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyNkZWZpbmUgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2lmICFkZWZpbmVkKERFQlVHKSAmJiBkZWZpbmVkKENPTkZJR19VU0JfREVCVUcpCisjZGVmaW5lIERFQlVHCisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworCisjZGVmaW5lIFRPVUNIS0lUX01JTl9YQwkJCTB4MAorI2RlZmluZSBUT1VDSEtJVF9NQVhfWEMJCQkweDA3ZmYKKyNkZWZpbmUgVE9VQ0hLSVRfWENfRlVaWgkJMHgwCisjZGVmaW5lIFRPVUNIS0lUX1hDX0ZMQVQJCTB4MAorI2RlZmluZSBUT1VDSEtJVF9NSU5fWUMJCQkweDAKKyNkZWZpbmUgVE9VQ0hLSVRfTUFYX1lDCQkJMHgwN2ZmCisjZGVmaW5lIFRPVUNIS0lUX1lDX0ZVWloJCTB4MAorI2RlZmluZSBUT1VDSEtJVF9ZQ19GTEFUCQkweDAKKyNkZWZpbmUgVE9VQ0hLSVRfUkVQT1JUX0RBVEFfU0laRQk4CisKKyNkZWZpbmUgVE9VQ0hLSVRfRE9XTgkJCTB4MDEKKyNkZWZpbmUgVE9VQ0hLSVRfUE9JTlRfVE9VQ0gJCTB4ODEKKyNkZWZpbmUgVE9VQ0hLSVRfUE9JTlRfTk9UT1VDSAkJMHg4MAorCisjZGVmaW5lIFRPVUNIS0lUX0dFVF9UT1VDSEVEKGRhdCkJKCgoKGRhdClbMF0pICYgVE9VQ0hLSVRfRE9XTikgPyAxIDogMCkKKyNkZWZpbmUgVE9VQ0hLSVRfR0VUX1goZGF0KQkJKCgoZGF0KVszXSA8PCA3KSB8IChkYXQpWzRdKQorI2RlZmluZSBUT1VDSEtJVF9HRVRfWShkYXQpCQkoKChkYXQpWzFdIDw8IDcpIHwgKGRhdClbMl0pCisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCQkidjAuMSIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUgkJCSJEYW5pZWwgUml0eiA8ZGFuaWVsLnJpdHpAZ214LmNoPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MJCQkiZUdhbGF4IFRvdWNoS2l0IFVTQiBISUQgVG91Y2hzY3JlZW4gRHJpdmVyIgorCitzdGF0aWMgaW50IHN3YXBfeHk7Cittb2R1bGVfcGFyYW0oc3dhcF94eSwgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHN3YXBfeHksICJJZiBzZXQgWCBhbmQgWSBheGVzIGFyZSBzd2FwcGVkLiIpOworCitzdHJ1Y3QgdG91Y2hraXRfdXNiIHsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCWRtYV9hZGRyX3QgZGF0YV9kbWE7CisJc3RydWN0IHVyYiAqaXJxOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0cnVjdCBpbnB1dF9kZXYgaW5wdXQ7CisJaW50IG9wZW47CisJY2hhciBuYW1lWzEyOF07CisJY2hhciBwaHlzWzY0XTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB0b3VjaGtpdF9kZXZpY2VzW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgzODIzLCAweDAwMDEpfSwKKwl7VVNCX0RFVklDRSgweDBlZWYsIDB4MDAwMSl9LAorCXt9Cit9OworCitzdGF0aWMgdm9pZCB0b3VjaGtpdF9pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdG91Y2hraXRfdXNiICp0b3VjaGtpdCA9IHVyYi0+Y29udGV4dDsKKwlpbnQgcmV0dmFsOworCWludCB4LCB5OworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FVElNRURPVVQ6CisJCS8qIHRoaXMgdXJiIGlzIHRpbWluZyBvdXQgKi8KKwkJZGJnKCIlcyAtIHVyYiB0aW1lZCBvdXQgLSB3YXMgdGhlIGRldmljZSB1bnBsdWdnZWQ/IiwKKwkJICAgIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLAorCQkgICAgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChzd2FwX3h5KSB7CisJCXkgPSBUT1VDSEtJVF9HRVRfWCh0b3VjaGtpdC0+ZGF0YSk7CisJCXggPSBUT1VDSEtJVF9HRVRfWSh0b3VjaGtpdC0+ZGF0YSk7CisJfSBlbHNlIHsKKwkJeCA9IFRPVUNIS0lUX0dFVF9YKHRvdWNoa2l0LT5kYXRhKTsKKwkJeSA9IFRPVUNIS0lUX0dFVF9ZKHRvdWNoa2l0LT5kYXRhKTsKKwl9CisKKwlpbnB1dF9yZWdzKCZ0b3VjaGtpdC0+aW5wdXQsIHJlZ3MpOworCWlucHV0X3JlcG9ydF9rZXkoJnRvdWNoa2l0LT5pbnB1dCwgQlROX1RPVUNILAorCSAgICAgICAgICAgICAgICAgVE9VQ0hLSVRfR0VUX1RPVUNIRUQodG91Y2hraXQtPmRhdGEpKTsKKwlpbnB1dF9yZXBvcnRfYWJzKCZ0b3VjaGtpdC0+aW5wdXQsIEFCU19YLCB4KTsKKwlpbnB1dF9yZXBvcnRfYWJzKCZ0b3VjaGtpdC0+aW5wdXQsIEFCU19ZLCB5KTsKKwlpbnB1dF9zeW5jKCZ0b3VjaGtpdC0+aW5wdXQpOworCitleGl0OgorCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdDogJWQiLAorCQkgICAgX19GVU5DVElPTl9fLCByZXR2YWwpOworfQorCitzdGF0aWMgaW50IHRvdWNoa2l0X29wZW4oc3RydWN0IGlucHV0X2RldiAqaW5wdXQpCit7CisJc3RydWN0IHRvdWNoa2l0X3VzYiAqdG91Y2hraXQgPSBpbnB1dC0+cHJpdmF0ZTsKKworCWlmICh0b3VjaGtpdC0+b3BlbisrKQorCQlyZXR1cm4gMDsKKworCXRvdWNoa2l0LT5pcnEtPmRldiA9IHRvdWNoa2l0LT51ZGV2OworCisJaWYgKHVzYl9zdWJtaXRfdXJiKHRvdWNoa2l0LT5pcnEsIEdGUF9BVE9NSUMpKSB7CisJCXRvdWNoa2l0LT5vcGVuLS07CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0b3VjaGtpdF9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3sKKwlzdHJ1Y3QgdG91Y2hraXRfdXNiICp0b3VjaGtpdCA9IGlucHV0LT5wcml2YXRlOworCisJaWYgKCEtLXRvdWNoa2l0LT5vcGVuKQorCQl1c2Jfa2lsbF91cmIodG91Y2hraXQtPmlycSk7Cit9CisKK3N0YXRpYyBpbnQgdG91Y2hraXRfYWxsb2NfYnVmZmVycyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCQkgIHN0cnVjdCB0b3VjaGtpdF91c2IgKnRvdWNoa2l0KQoreworCXRvdWNoa2l0LT5kYXRhID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LCBUT1VDSEtJVF9SRVBPUlRfREFUQV9TSVpFLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTEFCX0FUT01JQywgJnRvdWNoa2l0LT5kYXRhX2RtYSk7CisKKwlpZiAoIXRvdWNoa2l0LT5kYXRhKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdG91Y2hraXRfZnJlZV9idWZmZXJzKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJCSAgc3RydWN0IHRvdWNoa2l0X3VzYiAqdG91Y2hraXQpCit7CisJaWYgKHRvdWNoa2l0LT5kYXRhKQorCQl1c2JfYnVmZmVyX2ZyZWUodWRldiwgVE9VQ0hLSVRfUkVQT1JUX0RBVEFfU0laRSwKKwkJICAgICAgICAgICAgICAgIHRvdWNoa2l0LT5kYXRhLCB0b3VjaGtpdC0+ZGF0YV9kbWEpOworfQorCitzdGF0aWMgaW50IHRvdWNoa2l0X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgdG91Y2hraXRfdXNiICp0b3VjaGtpdDsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJY2hhciBwYXRoWzY0XTsKKworCWludGVyZmFjZSA9IGludGYtPmN1cl9hbHRzZXR0aW5nOworCWVuZHBvaW50ID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbMF0uZGVzYzsKKworCXRvdWNoa2l0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHRvdWNoa2l0X3VzYiksIEdGUF9LRVJORUwpOworCWlmICghdG91Y2hraXQpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KHRvdWNoa2l0LCAwLCBzaXplb2Yoc3RydWN0IHRvdWNoa2l0X3VzYikpOworCXRvdWNoa2l0LT51ZGV2ID0gdWRldjsKKworCWlmICh0b3VjaGtpdF9hbGxvY19idWZmZXJzKHVkZXYsIHRvdWNoa2l0KSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCXRvdWNoa2l0LT5pbnB1dC5wcml2YXRlID0gdG91Y2hraXQ7CisJdG91Y2hraXQtPmlucHV0Lm9wZW4gPSB0b3VjaGtpdF9vcGVuOworCXRvdWNoa2l0LT5pbnB1dC5jbG9zZSA9IHRvdWNoa2l0X2Nsb3NlOworCisJdXNiX21ha2VfcGF0aCh1ZGV2LCBwYXRoLCA2NCk7CisJc3ByaW50Zih0b3VjaGtpdC0+cGh5cywgIiVzL2lucHV0MCIsIHBhdGgpOworCisJdG91Y2hraXQtPmlucHV0Lm5hbWUgPSB0b3VjaGtpdC0+bmFtZTsKKwl0b3VjaGtpdC0+aW5wdXQucGh5cyA9IHRvdWNoa2l0LT5waHlzOworCXRvdWNoa2l0LT5pbnB1dC5pZC5idXN0eXBlID0gQlVTX1VTQjsKKwl0b3VjaGtpdC0+aW5wdXQuaWQudmVuZG9yID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisJdG91Y2hraXQtPmlucHV0LmlkLnByb2R1Y3QgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJdG91Y2hraXQtPmlucHV0LmlkLnZlcnNpb24gPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisJdG91Y2hraXQtPmlucHV0LmRldiA9ICZpbnRmLT5kZXY7CisKKwl0b3VjaGtpdC0+aW5wdXQuZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOworCXRvdWNoa2l0LT5pbnB1dC5hYnNiaXRbMF0gPSBCSVQoQUJTX1gpIHwgQklUKEFCU19ZKTsKKwl0b3VjaGtpdC0+aW5wdXQua2V5Yml0W0xPTkcoQlROX1RPVUNIKV0gPSBCSVQoQlROX1RPVUNIKTsKKworCS8qIFVzZWQgdG8gU2NhbGUgQ29tcGVuc2F0ZWQgRGF0YSAqLworCXRvdWNoa2l0LT5pbnB1dC5hYnNtaW5bQUJTX1hdID0gVE9VQ0hLSVRfTUlOX1hDOworCXRvdWNoa2l0LT5pbnB1dC5hYnNtYXhbQUJTX1hdID0gVE9VQ0hLSVRfTUFYX1hDOworCXRvdWNoa2l0LT5pbnB1dC5hYnNmdXp6W0FCU19YXSA9IFRPVUNIS0lUX1hDX0ZVWlo7CisJdG91Y2hraXQtPmlucHV0LmFic2ZsYXRbQUJTX1hdID0gVE9VQ0hLSVRfWENfRkxBVDsKKwl0b3VjaGtpdC0+aW5wdXQuYWJzbWluW0FCU19ZXSA9IFRPVUNIS0lUX01JTl9ZQzsKKwl0b3VjaGtpdC0+aW5wdXQuYWJzbWF4W0FCU19ZXSA9IFRPVUNIS0lUX01BWF9ZQzsKKwl0b3VjaGtpdC0+aW5wdXQuYWJzZnV6eltBQlNfWV0gPSBUT1VDSEtJVF9ZQ19GVVpaOworCXRvdWNoa2l0LT5pbnB1dC5hYnNmbGF0W0FCU19ZXSA9IFRPVUNIS0lUX1lDX0ZMQVQ7CisKKwlpZiAodWRldi0+bWFudWZhY3R1cmVyKQorCQlzdHJjYXQodG91Y2hraXQtPm5hbWUsIHVkZXYtPm1hbnVmYWN0dXJlcik7CisJaWYgKHVkZXYtPnByb2R1Y3QpCisJCXNwcmludGYodG91Y2hraXQtPm5hbWUsICIlcyAlcyIsIHRvdWNoa2l0LT5uYW1lLCB1ZGV2LT5wcm9kdWN0KTsKKworCWlmICghc3RybGVuKHRvdWNoa2l0LT5uYW1lKSkKKwkJc3ByaW50Zih0b3VjaGtpdC0+bmFtZSwgIlVTQiBUb3VjaHNjcmVlbiAlMDR4OiUwNHgiLAorCQkgICAgICAgIHRvdWNoa2l0LT5pbnB1dC5pZC52ZW5kb3IsIHRvdWNoa2l0LT5pbnB1dC5pZC5wcm9kdWN0KTsKKworCXRvdWNoa2l0LT5pcnEgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghdG91Y2hraXQtPmlycSkgeworCQlkYmcoIiVzIC0gdXNiX2FsbG9jX3VyYiBmYWlsZWQ6IHRvdWNoa2l0LT5pcnEiLCBfX0ZVTkNUSU9OX18pOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlX2J1ZmZlcnM7CisJfQorCisJdXNiX2ZpbGxfaW50X3VyYih0b3VjaGtpdC0+aXJxLCB0b3VjaGtpdC0+dWRldiwKKwkgICAgICAgICAgICAgICAgIHVzYl9yY3ZpbnRwaXBlKHRvdWNoa2l0LT51ZGV2LCAweDgxKSwKKwkgICAgICAgICAgICAgICAgIHRvdWNoa2l0LT5kYXRhLCBUT1VDSEtJVF9SRVBPUlRfREFUQV9TSVpFLAorCSAgICAgICAgICAgICAgICAgdG91Y2hraXRfaXJxLCB0b3VjaGtpdCwgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisKKwlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoJnRvdWNoa2l0LT5pbnB1dCk7CisKKwlwcmludGsoS0VSTl9JTkZPICJpbnB1dDogJXMgb24gJXNcbiIsIHRvdWNoa2l0LT5uYW1lLCBwYXRoKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHRvdWNoa2l0KTsKKworCXJldHVybiAwOworCitvdXRfZnJlZV9idWZmZXJzOgorCXRvdWNoa2l0X2ZyZWVfYnVmZmVycyh1ZGV2LCB0b3VjaGtpdCk7CitvdXRfZnJlZToKKwlrZnJlZSh0b3VjaGtpdCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdG91Y2hraXRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdG91Y2hraXRfdXNiICp0b3VjaGtpdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlkYmcoIiVzIC0gY2FsbGVkIiwgX19GVU5DVElPTl9fKTsKKworCWlmICghdG91Y2hraXQpCisJCXJldHVybjsKKworCWRiZygiJXMgLSB0b3VjaGtpdCBpcyBpbml0aWFsaXplZCwgY2xlYW5pbmcgdXAiLCBfX0ZVTkNUSU9OX18pOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoJnRvdWNoa2l0LT5pbnB1dCk7CisJdXNiX2tpbGxfdXJiKHRvdWNoa2l0LT5pcnEpOworCXVzYl9mcmVlX3VyYih0b3VjaGtpdC0+aXJxKTsKKwl0b3VjaGtpdF9mcmVlX2J1ZmZlcnMoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwgdG91Y2hraXQpOworCWtmcmVlKHRvdWNoa2l0KTsKK30KKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHRvdWNoa2l0X2RldmljZXMpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdG91Y2hraXRfZHJpdmVyID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJPSAidG91Y2hraXR1c2IiLAorCS5wcm9iZQkJPSB0b3VjaGtpdF9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IHRvdWNoa2l0X2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlCT0gdG91Y2hraXRfZGV2aWNlcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRvdWNoa2l0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZ0b3VjaGtpdF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdG91Y2hraXRfY2xlYW51cCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZ0b3VjaGtpdF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh0b3VjaGtpdF9pbml0KTsKK21vZHVsZV9leGl0KHRvdWNoa2l0X2NsZWFudXApOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L3VzYmtiZC5jIGIvZHJpdmVycy91c2IvaW5wdXQvdXNia2JkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE1MTRiMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L3VzYmtiZC5jCkBAIC0wLDAgKzEsMzcwIEBACisvKgorICogJElkOiB1c2JrYmQuYyx2IDEuMjcgMjAwMS8xMi8yNyAxMDozNzo0MSB2b2p0ZWNoIEV4cCAkCisgKgorICogIENvcHlyaWdodCAoYykgMTk5OS0yMDAxIFZvanRlY2ggUGF2bGlrCisgKgorICogIFVTQiBISURCUCBLZXlib2FyZCBzdXBwb3J0CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKiAKKyAqIFNob3VsZCB5b3UgbmVlZCB0byBjb250YWN0IG1lLCB0aGUgYXV0aG9yLCB5b3UgY2FuIGRvIHNvIGVpdGhlciBieQorICogZS1tYWlsIC0gbWFpbCB5b3VyIG1lc3NhZ2UgdG8gPHZvanRlY2hAdWN3LmN6Piwgb3IgYnkgcGFwZXIgbWFpbDoKKyAqIFZvanRlY2ggUGF2bGlrLCBTaW11bmtvdmEgMTU5NCwgUHJhZ3VlIDgsIDE4MiAwMCBDemVjaCBSZXB1YmxpYworICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAdWN3LmN6PiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBISUQgQm9vdCBQcm90b2NvbCBrZXlib2FyZCBkcml2ZXIiCisjZGVmaW5lIERSSVZFUl9MSUNFTlNFICJHUEwiCisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoRFJJVkVSX0xJQ0VOU0UpOworCitzdGF0aWMgdW5zaWduZWQgY2hhciB1c2Jfa2JkX2tleWNvZGVbMjU2XSA9IHsKKwkgIDAsICAwLCAgMCwgIDAsIDMwLCA0OCwgNDYsIDMyLCAxOCwgMzMsIDM0LCAzNSwgMjMsIDM2LCAzNywgMzgsCisJIDUwLCA0OSwgMjQsIDI1LCAxNiwgMTksIDMxLCAyMCwgMjIsIDQ3LCAxNywgNDUsIDIxLCA0NCwgIDIsICAzLAorCSAgNCwgIDUsICA2LCAgNywgIDgsICA5LCAxMCwgMTEsIDI4LCAgMSwgMTQsIDE1LCA1NywgMTIsIDEzLCAyNiwKKwkgMjcsIDQzLCA0MywgMzksIDQwLCA0MSwgNTEsIDUyLCA1MywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsCisJIDY1LCA2NiwgNjcsIDY4LCA4NywgODgsIDk5LCA3MCwxMTksMTEwLDEwMiwxMDQsMTExLDEwNywxMDksMTA2LAorCTEwNSwxMDgsMTAzLCA2OSwgOTgsIDU1LCA3NCwgNzgsIDk2LCA3OSwgODAsIDgxLCA3NSwgNzYsIDc3LCA3MSwKKwkgNzIsIDczLCA4MiwgODMsIDg2LDEyNywxMTYsMTE3LDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsCisJMTkxLDE5MiwxOTMsMTk0LDEzNCwxMzgsMTMwLDEzMiwxMjgsMTI5LDEzMSwxMzcsMTMzLDEzNSwxMzYsMTEzLAorCTExNSwxMTQsICAwLCAgMCwgIDAsMTIxLCAgMCwgODksIDkzLDEyNCwgOTIsIDk0LCA5NSwgIDAsICAwLCAgMCwKKwkxMjIsMTIzLCA5MCwgOTEsIDg1LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCisJICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAorCSAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKKwkgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCisJICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAorCSAyOSwgNDIsIDU2LDEyNSwgOTcsIDU0LDEwMCwxMjYsMTY0LDE2NiwxNjUsMTYzLDE2MSwxMTUsMTE0LDExMywKKwkxNTAsMTU4LDE1OSwxMjgsMTM2LDE3NywxNzgsMTc2LDE0MiwxNTIsMTczLDE0MAorfTsKKworc3RydWN0IHVzYl9rYmQgeworCXN0cnVjdCBpbnB1dF9kZXYgZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CisJdW5zaWduZWQgY2hhciBvbGRbOF07CisJc3RydWN0IHVyYiAqaXJxLCAqbGVkOworCXVuc2lnbmVkIGNoYXIgbmV3bGVkczsKKwljaGFyIG5hbWVbMTI4XTsKKwljaGFyIHBoeXNbNjRdOworCWludCBvcGVuOworCisJdW5zaWduZWQgY2hhciAqbmV3OworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmNyOworCXVuc2lnbmVkIGNoYXIgKmxlZHM7CisJZG1hX2FkZHJfdCBjcl9kbWE7CisJZG1hX2FkZHJfdCBuZXdfZG1hOworCWRtYV9hZGRyX3QgbGVkc19kbWE7Cit9OworCitzdGF0aWMgdm9pZCB1c2Jfa2JkX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfa2JkICprYmQgPSB1cmItPmNvbnRleHQ7CisJaW50IGk7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoJLyogdW5saW5rICovCisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJcmV0dXJuOworCS8qIC1FUElQRTogIHNob3VsZCBjbGVhciB0aGUgaGFsdCAqLworCWRlZmF1bHQ6CQkvKiBlcnJvciAqLworCQlnb3RvIHJlc3VibWl0OworCX0KKworCWlucHV0X3JlZ3MoJmtiZC0+ZGV2LCByZWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCWlucHV0X3JlcG9ydF9rZXkoJmtiZC0+ZGV2LCB1c2Jfa2JkX2tleWNvZGVbaSArIDIyNF0sIChrYmQtPm5ld1swXSA+PiBpKSAmIDEpOworCisJZm9yIChpID0gMjsgaSA8IDg7IGkrKykgeworCisJCWlmIChrYmQtPm9sZFtpXSA+IDMgJiYgbWVtc2NhbihrYmQtPm5ldyArIDIsIGtiZC0+b2xkW2ldLCA2KSA9PSBrYmQtPm5ldyArIDgpIHsKKwkJCWlmICh1c2Jfa2JkX2tleWNvZGVba2JkLT5vbGRbaV1dKQorCQkJCWlucHV0X3JlcG9ydF9rZXkoJmtiZC0+ZGV2LCB1c2Jfa2JkX2tleWNvZGVba2JkLT5vbGRbaV1dLCAwKTsKKwkJCWVsc2UKKwkJCQlpbmZvKCJVbmtub3duIGtleSAoc2NhbmNvZGUgJSN4KSByZWxlYXNlZC4iLCBrYmQtPm9sZFtpXSk7CisJCX0KKworCQlpZiAoa2JkLT5uZXdbaV0gPiAzICYmIG1lbXNjYW4oa2JkLT5vbGQgKyAyLCBrYmQtPm5ld1tpXSwgNikgPT0ga2JkLT5vbGQgKyA4KSB7CisJCQlpZiAodXNiX2tiZF9rZXljb2RlW2tiZC0+bmV3W2ldXSkKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KCZrYmQtPmRldiwgdXNiX2tiZF9rZXljb2RlW2tiZC0+bmV3W2ldXSwgMSk7CisJCQllbHNlCisJCQkJaW5mbygiVW5rbm93biBrZXkgKHNjYW5jb2RlICUjeCkgcHJlc3NlZC4iLCBrYmQtPm5ld1tpXSk7CisJCX0KKwl9CisKKwlpbnB1dF9zeW5jKCZrYmQtPmRldik7CisKKwltZW1jcHkoa2JkLT5vbGQsIGtiZC0+bmV3LCA4KTsKKworcmVzdWJtaXQ6CisJaSA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIFNMQUJfQVRPTUlDKTsKKwlpZiAoaSkKKwkJZXJyICgiY2FuJ3QgcmVzdWJtaXQgaW50ciwgJXMtJXMvaW5wdXQwLCBzdGF0dXMgJWQiLAorCQkJCWtiZC0+dXNiZGV2LT5idXMtPmJ1c19uYW1lLAorCQkJCWtiZC0+dXNiZGV2LT5kZXZwYXRoLCBpKTsKK30KKworaW50IHVzYl9rYmRfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgdXNiX2tiZCAqa2JkID0gZGV2LT5wcml2YXRlOworCisJaWYgKHR5cGUgIT0gRVZfTEVEKQorCQlyZXR1cm4gLTE7CisKKworCWtiZC0+bmV3bGVkcyA9ICghIXRlc3RfYml0KExFRF9LQU5BLCAgICBkZXYtPmxlZCkgPDwgMykgfCAoISF0ZXN0X2JpdChMRURfQ09NUE9TRSwgZGV2LT5sZWQpIDw8IDMpIHwKKwkJICAgICAgICghIXRlc3RfYml0KExFRF9TQ1JPTExMLCBkZXYtPmxlZCkgPDwgMikgfCAoISF0ZXN0X2JpdChMRURfQ0FQU0wsICAgZGV2LT5sZWQpIDw8IDEpIHwKKwkJICAgICAgICghIXRlc3RfYml0KExFRF9OVU1MLCAgICBkZXYtPmxlZCkpOworCisJaWYgKGtiZC0+bGVkLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKQorCQlyZXR1cm4gMDsKKworCWlmICgqKGtiZC0+bGVkcykgPT0ga2JkLT5uZXdsZWRzKQorCQlyZXR1cm4gMDsKKworCSooa2JkLT5sZWRzKSA9IGtiZC0+bmV3bGVkczsKKwlrYmQtPmxlZC0+ZGV2ID0ga2JkLT51c2JkZXY7CisJaWYgKHVzYl9zdWJtaXRfdXJiKGtiZC0+bGVkLCBHRlBfQVRPTUlDKSkKKwkJZXJyKCJ1c2Jfc3VibWl0X3VyYihsZWRzKSBmYWlsZWQiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1c2Jfa2JkX2xlZChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfa2JkICprYmQgPSB1cmItPmNvbnRleHQ7CisKKwlpZiAodXJiLT5zdGF0dXMpCisJCXdhcm4oImxlZCB1cmIgc3RhdHVzICVkIHJlY2VpdmVkIiwgdXJiLT5zdGF0dXMpOworCQorCWlmICgqKGtiZC0+bGVkcykgPT0ga2JkLT5uZXdsZWRzKQorCQlyZXR1cm47CisKKwkqKGtiZC0+bGVkcykgPSBrYmQtPm5ld2xlZHM7CisJa2JkLT5sZWQtPmRldiA9IGtiZC0+dXNiZGV2OworCWlmICh1c2Jfc3VibWl0X3VyYihrYmQtPmxlZCwgR0ZQX0FUT01JQykpCisJCWVycigidXNiX3N1Ym1pdF91cmIobGVkcykgZmFpbGVkIik7Cit9CisKK3N0YXRpYyBpbnQgdXNiX2tiZF9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2tiZCAqa2JkID0gZGV2LT5wcml2YXRlOworCisJaWYgKGtiZC0+b3BlbisrKQorCQlyZXR1cm4gMDsKKworCWtiZC0+aXJxLT5kZXYgPSBrYmQtPnVzYmRldjsKKwlpZiAodXNiX3N1Ym1pdF91cmIoa2JkLT5pcnEsIEdGUF9LRVJORUwpKSB7CisJCWtiZC0+b3Blbi0tOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXNiX2tiZF9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IHVzYl9rYmQgKmtiZCA9IGRldi0+cHJpdmF0ZTsKKworCWlmICghLS1rYmQtPm9wZW4pCisJCXVzYl9raWxsX3VyYihrYmQtPmlycSk7Cit9CisKK3N0YXRpYyBpbnQgdXNiX2tiZF9hbGxvY19tZW0oc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgc3RydWN0IHVzYl9rYmQgKmtiZCkKK3sKKwlpZiAoIShrYmQtPmlycSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm4gLTE7CisJaWYgKCEoa2JkLT5sZWQgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIC0xOworCWlmICghKGtiZC0+bmV3ID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIDgsIFNMQUJfQVRPTUlDLCAma2JkLT5uZXdfZG1hKSkpCisJCXJldHVybiAtMTsKKwlpZiAoIShrYmQtPmNyID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIHNpemVvZihzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KSwgU0xBQl9BVE9NSUMsICZrYmQtPmNyX2RtYSkpKQorCQlyZXR1cm4gLTE7CisJaWYgKCEoa2JkLT5sZWRzID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIDEsIFNMQUJfQVRPTUlDLCAma2JkLT5sZWRzX2RtYSkpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXNiX2tiZF9mcmVlX21lbShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBzdHJ1Y3QgdXNiX2tiZCAqa2JkKQoreworCWlmIChrYmQtPmlycSkKKwkJdXNiX2ZyZWVfdXJiKGtiZC0+aXJxKTsKKwlpZiAoa2JkLT5sZWQpCisJCXVzYl9mcmVlX3VyYihrYmQtPmxlZCk7CisJaWYgKGtiZC0+bmV3KQorCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCA4LCBrYmQtPm5ldywga2JkLT5uZXdfZG1hKTsKKwlpZiAoa2JkLT5jcikKKwkJdXNiX2J1ZmZlcl9mcmVlKGRldiwgc2l6ZW9mKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpLCBrYmQtPmNyLCBrYmQtPmNyX2RtYSk7CisJaWYgKGtiZC0+bGVkcykKKwkJdXNiX2J1ZmZlcl9mcmVlKGRldiwgMSwga2JkLT5sZWRzLCBrYmQtPmxlZHNfZG1hKTsKK30KKworc3RhdGljIGludCB1c2Jfa2JkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICogZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpZmFjZSk7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0IHVzYl9rYmQgKmtiZDsKKwlpbnQgaSwgcGlwZSwgbWF4cDsKKwljaGFyIHBhdGhbNjRdOworCisJaW50ZXJmYWNlID0gaWZhY2UtPmN1cl9hbHRzZXR0aW5nOworCisJaWYgKGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDEpCisJCXJldHVybiAtRU5PREVWOworCisJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOworCWlmICghKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkpCisJCXJldHVybiAtRU5PREVWOworCWlmICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIDMpICE9IDMpCisJCXJldHVybiAtRU5PREVWOworCisJcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKGRldiwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpOworCW1heHAgPSB1c2JfbWF4cGFja2V0KGRldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOworCisJaWYgKCEoa2JkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9rYmQpLCBHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChrYmQsIDAsIHNpemVvZihzdHJ1Y3QgdXNiX2tiZCkpOworCisJaWYgKHVzYl9rYmRfYWxsb2NfbWVtKGRldiwga2JkKSkgeworCQl1c2Jfa2JkX2ZyZWVfbWVtKGRldiwga2JkKTsKKwkJa2ZyZWUoa2JkKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJa2JkLT51c2JkZXYgPSBkZXY7CisKKwlrYmQtPmRldi5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX0xFRCkgfCBCSVQoRVZfUkVQKTsKKwlrYmQtPmRldi5sZWRiaXRbMF0gPSBCSVQoTEVEX05VTUwpIHwgQklUKExFRF9DQVBTTCkgfCBCSVQoTEVEX1NDUk9MTEwpIHwgQklUKExFRF9DT01QT1NFKSB8IEJJVChMRURfS0FOQSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjU1OyBpKyspCisJCXNldF9iaXQodXNiX2tiZF9rZXljb2RlW2ldLCBrYmQtPmRldi5rZXliaXQpOworCWNsZWFyX2JpdCgwLCBrYmQtPmRldi5rZXliaXQpOworCQorCWtiZC0+ZGV2LnByaXZhdGUgPSBrYmQ7CisJa2JkLT5kZXYuZXZlbnQgPSB1c2Jfa2JkX2V2ZW50OworCWtiZC0+ZGV2Lm9wZW4gPSB1c2Jfa2JkX29wZW47CisJa2JkLT5kZXYuY2xvc2UgPSB1c2Jfa2JkX2Nsb3NlOworCisJdXNiX2ZpbGxfaW50X3VyYihrYmQtPmlycSwgZGV2LCBwaXBlLAorCQkJIGtiZC0+bmV3LCAobWF4cCA+IDggPyA4IDogbWF4cCksCisJCQkgdXNiX2tiZF9pcnEsIGtiZCwgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisJa2JkLT5pcnEtPnRyYW5zZmVyX2RtYSA9IGtiZC0+bmV3X2RtYTsKKwlrYmQtPmlycS0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwlrYmQtPmNyLT5iUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0U7CisJa2JkLT5jci0+YlJlcXVlc3QgPSAweDA5OworCWtiZC0+Y3ItPndWYWx1ZSA9IGNwdV90b19sZTE2KDB4MjAwKTsKKwlrYmQtPmNyLT53SW5kZXggPSBjcHVfdG9fbGUxNihpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlcik7CisJa2JkLT5jci0+d0xlbmd0aCA9IGNwdV90b19sZTE2KDEpOworCisJdXNiX21ha2VfcGF0aChkZXYsIHBhdGgsIDY0KTsKKwlzcHJpbnRmKGtiZC0+cGh5cywgIiVzL2lucHV0MCIsIHBhdGgpOworCisJa2JkLT5kZXYubmFtZSA9IGtiZC0+bmFtZTsKKwlrYmQtPmRldi5waHlzID0ga2JkLT5waHlzOwkKKwlrYmQtPmRldi5pZC5idXN0eXBlID0gQlVTX1VTQjsKKwlrYmQtPmRldi5pZC52ZW5kb3IgPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOworCWtiZC0+ZGV2LmlkLnByb2R1Y3QgPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwlrYmQtPmRldi5pZC52ZXJzaW9uID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisJa2JkLT5kZXYuZGV2ID0gJmlmYWNlLT5kZXY7CisKKwlpZiAoZGV2LT5tYW51ZmFjdHVyZXIpCisJCXN0cmNhdChrYmQtPm5hbWUsIGRldi0+bWFudWZhY3R1cmVyKTsKKwlpZiAoZGV2LT5wcm9kdWN0KQorCQlzcHJpbnRmKGtiZC0+bmFtZSwgIiVzICVzIiwga2JkLT5uYW1lLCBkZXYtPnByb2R1Y3QpOworCisJaWYgKCFzdHJsZW4oa2JkLT5uYW1lKSkKKwkJc3ByaW50ZihrYmQtPm5hbWUsICJVU0IgSElEQlAgS2V5Ym9hcmQgJTA0eDolMDR4IiwKKwkJCWtiZC0+ZGV2LmlkLnZlbmRvciwga2JkLT5kZXYuaWQucHJvZHVjdCk7CisKKwl1c2JfZmlsbF9jb250cm9sX3VyYihrYmQtPmxlZCwgZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCSAgICAgKHZvaWQgKikga2JkLT5jciwga2JkLT5sZWRzLCAxLAorCQkJICAgICB1c2Jfa2JkX2xlZCwga2JkKTsKKwlrYmQtPmxlZC0+c2V0dXBfZG1hID0ga2JkLT5jcl9kbWE7CisJa2JkLT5sZWQtPnRyYW5zZmVyX2RtYSA9IGtiZC0+bGVkc19kbWE7CisJa2JkLT5sZWQtPnRyYW5zZmVyX2ZsYWdzIHw9IChVUkJfTk9fVFJBTlNGRVJfRE1BX01BUAorCQkJCXwgVVJCX05PX1NFVFVQX0RNQV9NQVApOworCisJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKCZrYmQtPmRldik7CisKKwlwcmludGsoS0VSTl9JTkZPICJpbnB1dDogJXMgb24gJXNcbiIsIGtiZC0+bmFtZSwgcGF0aCk7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGlmYWNlLCBrYmQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1c2Jfa2JkX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9rYmQgKmtiZCA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCQorCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJaWYgKGtiZCkgeworCQl1c2Jfa2lsbF91cmIoa2JkLT5pcnEpOworCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSgma2JkLT5kZXYpOworCQl1c2Jfa2JkX2ZyZWVfbWVtKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIGtiZCk7CisJCWtmcmVlKGtiZCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX2tiZF9pZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTygzLCAxLCAxKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHVzYl9rYmRfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX2tiZF9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJInVzYmtiZCIsCisJLnByb2JlID0JdXNiX2tiZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9rYmRfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQl1c2Jfa2JkX2lkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdXNiX2tiZF9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdCA9IHVzYl9yZWdpc3RlcigmdXNiX2tiZF9kcml2ZXIpOworCWlmIChyZXN1bHQgPT0gMCkKKwkJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2Jfa2JkX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmdXNiX2tiZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh1c2Jfa2JkX2luaXQpOworbW9kdWxlX2V4aXQodXNiX2tiZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L3VzYm1vdXNlLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC91c2Jtb3VzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMTU1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC91c2Jtb3VzZS5jCkBAIC0wLDAgKzEsMjUyIEBACisvKgorICogJElkOiB1c2Jtb3VzZS5jLHYgMS4xNSAyMDAxLzEyLzI3IDEwOjM3OjQxIHZvanRlY2ggRXhwICQKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEgVm9qdGVjaCBQYXZsaWsKKyAqCisgKiAgVVNCIEhJREJQIE1vdXNlIHN1cHBvcnQKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqIAorICogU2hvdWxkIHlvdSBuZWVkIHRvIGNvbnRhY3QgbWUsIHRoZSBhdXRob3IsIHlvdSBjYW4gZG8gc28gZWl0aGVyIGJ5CisgKiBlLW1haWwgLSBtYWlsIHlvdXIgbWVzc2FnZSB0byA8dm9qdGVjaEB1Y3cuY3o+LCBvciBieSBwYXBlciBtYWlsOgorICogVm9qdGVjaCBQYXZsaWssIFNpbXVua292YSAxNTk0LCBQcmFndWUgOCwgMTgyIDAwIEN6ZWNoIFJlcHVibGljCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuNiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAdWN3LmN6PiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBISUQgQm9vdCBQcm90b2NvbCBtb3VzZSBkcml2ZXIiCisjZGVmaW5lIERSSVZFUl9MSUNFTlNFICJHUEwiCisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoRFJJVkVSX0xJQ0VOU0UpOworCitzdHJ1Y3QgdXNiX21vdXNlIHsKKwljaGFyIG5hbWVbMTI4XTsKKwljaGFyIHBoeXNbNjRdOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CisJc3RydWN0IGlucHV0X2RldiBkZXY7CisJc3RydWN0IHVyYiAqaXJxOworCWludCBvcGVuOworCisJc2lnbmVkIGNoYXIgKmRhdGE7CisJZG1hX2FkZHJfdCBkYXRhX2RtYTsKK307CisKK3N0YXRpYyB2b2lkIHVzYl9tb3VzZV9pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX21vdXNlICptb3VzZSA9IHVyYi0+Y29udGV4dDsKKwlzaWduZWQgY2hhciAqZGF0YSA9IG1vdXNlLT5kYXRhOworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9ICZtb3VzZS0+ZGV2OworCWludCBzdGF0dXM7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoJLyogdW5saW5rICovCisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJcmV0dXJuOworCS8qIC1FUElQRTogIHNob3VsZCBjbGVhciB0aGUgaGFsdCAqLworCWRlZmF1bHQ6CQkvKiBlcnJvciAqLworCQlnb3RvIHJlc3VibWl0OworCX0KKworCWlucHV0X3JlZ3MoZGV2LCByZWdzKTsKKworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTEVGVCwgICBkYXRhWzBdICYgMHgwMSk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9SSUdIVCwgIGRhdGFbMF0gJiAweDAyKTsKKwlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX01JRERMRSwgZGF0YVswXSAmIDB4MDQpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU0lERSwgICBkYXRhWzBdICYgMHgwOCk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9FWFRSQSwgIGRhdGFbMF0gJiAweDEwKTsKKworCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWCwgICAgIGRhdGFbMV0pOworCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWSwgICAgIGRhdGFbMl0pOworCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfV0hFRUwsIGRhdGFbM10pOworCisJaW5wdXRfc3luYyhkZXYpOworcmVzdWJtaXQ6CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgU0xBQl9BVE9NSUMpOworCWlmIChzdGF0dXMpCisJCWVyciAoImNhbid0IHJlc3VibWl0IGludHIsICVzLSVzL2lucHV0MCwgc3RhdHVzICVkIiwKKwkJCQltb3VzZS0+dXNiZGV2LT5idXMtPmJ1c19uYW1lLAorCQkJCW1vdXNlLT51c2JkZXYtPmRldnBhdGgsIHN0YXR1cyk7Cit9CisKK3N0YXRpYyBpbnQgdXNiX21vdXNlX29wZW4oc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCXN0cnVjdCB1c2JfbW91c2UgKm1vdXNlID0gZGV2LT5wcml2YXRlOworCisJaWYgKG1vdXNlLT5vcGVuKyspCisJCXJldHVybiAwOworCisJbW91c2UtPmlycS0+ZGV2ID0gbW91c2UtPnVzYmRldjsKKwlpZiAodXNiX3N1Ym1pdF91cmIobW91c2UtPmlycSwgR0ZQX0tFUk5FTCkpIHsKKwkJbW91c2UtPm9wZW4tLTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYl9tb3VzZV9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IHVzYl9tb3VzZSAqbW91c2UgPSBkZXYtPnByaXZhdGU7CisKKwlpZiAoIS0tbW91c2UtPm9wZW4pCisJCXVzYl9raWxsX3VyYihtb3VzZS0+aXJxKTsKK30KKworc3RhdGljIGludCB1c2JfbW91c2VfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKiBpbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqIGlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICogZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzdHJ1Y3QgdXNiX21vdXNlICptb3VzZTsKKwlpbnQgcGlwZSwgbWF4cDsKKwljaGFyIHBhdGhbNjRdOworCisJaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisKKwlpZiAoaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHMgIT0gMSkgCisJCXJldHVybiAtRU5PREVWOworCisJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOworCWlmICghKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkpIAorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSAhPSAzKSAKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwaXBlID0gdXNiX3JjdmludHBpcGUoZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyk7CisJbWF4cCA9IHVzYl9tYXhwYWNrZXQoZGV2LCBwaXBlLCB1c2JfcGlwZW91dChwaXBlKSk7CisKKwlpZiAoIShtb3VzZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfbW91c2UpLCBHRlBfS0VSTkVMKSkpIAorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQobW91c2UsIDAsIHNpemVvZihzdHJ1Y3QgdXNiX21vdXNlKSk7CisKKwltb3VzZS0+ZGF0YSA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCA4LCBTTEFCX0FUT01JQywgJm1vdXNlLT5kYXRhX2RtYSk7CisJaWYgKCFtb3VzZS0+ZGF0YSkgeworCQlrZnJlZShtb3VzZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1vdXNlLT5pcnEgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghbW91c2UtPmlycSkgeworCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCA4LCBtb3VzZS0+ZGF0YSwgbW91c2UtPmRhdGFfZG1hKTsKKwkJa2ZyZWUobW91c2UpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwltb3VzZS0+dXNiZGV2ID0gZGV2OworCisJbW91c2UtPmRldi5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFTCk7CisJbW91c2UtPmRldi5rZXliaXRbTE9ORyhCVE5fTU9VU0UpXSA9IEJJVChCVE5fTEVGVCkgfCBCSVQoQlROX1JJR0hUKSB8IEJJVChCVE5fTUlERExFKTsKKwltb3VzZS0+ZGV2LnJlbGJpdFswXSA9IEJJVChSRUxfWCkgfCBCSVQoUkVMX1kpOworCW1vdXNlLT5kZXYua2V5Yml0W0xPTkcoQlROX01PVVNFKV0gfD0gQklUKEJUTl9TSURFKSB8IEJJVChCVE5fRVhUUkEpOworCW1vdXNlLT5kZXYucmVsYml0WzBdIHw9IEJJVChSRUxfV0hFRUwpOworCisJbW91c2UtPmRldi5wcml2YXRlID0gbW91c2U7CisJbW91c2UtPmRldi5vcGVuID0gdXNiX21vdXNlX29wZW47CisJbW91c2UtPmRldi5jbG9zZSA9IHVzYl9tb3VzZV9jbG9zZTsKKworCXVzYl9tYWtlX3BhdGgoZGV2LCBwYXRoLCA2NCk7CisJc3ByaW50Zihtb3VzZS0+cGh5cywgIiVzL2lucHV0MCIsIHBhdGgpOworCisJbW91c2UtPmRldi5uYW1lID0gbW91c2UtPm5hbWU7CisJbW91c2UtPmRldi5waHlzID0gbW91c2UtPnBoeXM7CisJbW91c2UtPmRldi5pZC5idXN0eXBlID0gQlVTX1VTQjsKKwltb3VzZS0+ZGV2LmlkLnZlbmRvciA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisJbW91c2UtPmRldi5pZC5wcm9kdWN0ID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJbW91c2UtPmRldi5pZC52ZXJzaW9uID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisJbW91c2UtPmRldi5kZXYgPSAmaW50Zi0+ZGV2OworCisJaWYgKGRldi0+bWFudWZhY3R1cmVyKQorCQlzdHJjYXQobW91c2UtPm5hbWUsIGRldi0+bWFudWZhY3R1cmVyKTsKKwlpZiAoZGV2LT5wcm9kdWN0KQorCQlzcHJpbnRmKG1vdXNlLT5uYW1lLCAiJXMgJXMiLCBtb3VzZS0+bmFtZSwgZGV2LT5wcm9kdWN0KTsKKworCWlmICghc3RybGVuKG1vdXNlLT5uYW1lKSkKKwkJc3ByaW50Zihtb3VzZS0+bmFtZSwgIlVTQiBISURCUCBNb3VzZSAlMDR4OiUwNHgiLAorCQkJbW91c2UtPmRldi5pZC52ZW5kb3IsIG1vdXNlLT5kZXYuaWQucHJvZHVjdCk7CisKKwl1c2JfZmlsbF9pbnRfdXJiKG1vdXNlLT5pcnEsIGRldiwgcGlwZSwgbW91c2UtPmRhdGEsCisJCQkgKG1heHAgPiA4ID8gOCA6IG1heHApLAorCQkJIHVzYl9tb3VzZV9pcnEsIG1vdXNlLCBlbmRwb2ludC0+YkludGVydmFsKTsKKwltb3VzZS0+aXJxLT50cmFuc2Zlcl9kbWEgPSBtb3VzZS0+ZGF0YV9kbWE7CisJbW91c2UtPmlycS0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoJm1vdXNlLT5kZXYpOworCXByaW50ayhLRVJOX0lORk8gImlucHV0OiAlcyBvbiAlc1xuIiwgbW91c2UtPm5hbWUsIHBhdGgpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBtb3VzZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYl9tb3VzZV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JfbW91c2UgKm1vdXNlID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwlpZiAobW91c2UpIHsKKwkJdXNiX2tpbGxfdXJiKG1vdXNlLT5pcnEpOworCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSgmbW91c2UtPmRldik7CisJCXVzYl9mcmVlX3VyYihtb3VzZS0+aXJxKTsKKwkJdXNiX2J1ZmZlcl9mcmVlKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIDgsIG1vdXNlLT5kYXRhLCBtb3VzZS0+ZGF0YV9kbWEpOworCQlrZnJlZShtb3VzZSk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX21vdXNlX2lkX3RhYmxlIFtdID0geworCXsgVVNCX0lOVEVSRkFDRV9JTkZPKDMsIDEsIDIpIH0sCisgICAgeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgdXNiX21vdXNlX2lkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9tb3VzZV9kcml2ZXIgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQk9ICJ1c2Jtb3VzZSIsCisJLnByb2JlCQk9IHVzYl9tb3VzZV9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IHVzYl9tb3VzZV9kaXNjb25uZWN0LAorCS5pZF90YWJsZQk9IHVzYl9tb3VzZV9pZF90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9tb3VzZV9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbCA9IHVzYl9yZWdpc3RlcigmdXNiX21vdXNlX2RyaXZlcik7CisJaWYgKHJldHZhbCA9PSAwKSAKKwkJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2JfbW91c2VfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZ1c2JfbW91c2VfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNiX21vdXNlX2luaXQpOworbW9kdWxlX2V4aXQodXNiX21vdXNlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvd2Fjb20uYyBiL2RyaXZlcnMvdXNiL2lucHV0L3dhY29tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVjMDRkZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L3dhY29tLmMKQEAgLTAsMCArMSw5NTEgQEAKKy8qCisgKiAgVVNCIFdhY29tIEdyYXBoaXJlIGFuZCBXYWNvbSBJbnR1b3MgdGFibGV0IHN1cHBvcnQKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQgVm9qdGVjaCBQYXZsaWsJPHZvanRlY2hAdWN3LmN6PgorICogIENvcHlyaWdodCAoYykgMjAwMCBBbmRyZWFzIEJhY2ggQWFlbgk8YWJhY2hAc3RvZmFuZXQuZGs+CisgKiAgQ29weXJpZ2h0IChjKSAyMDAwIENsaWZmb3JkIFdvbGYJCTxjbGlmZm9yZEBjbGlmZm9yZC5hdD4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAgU2FtIE1vc2VsCQk8c2FtLm1vc2VsQGNvbXB1dGVyLm9yZz4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAgSmFtZXMgRS4gQmxhaXIJCTxjb3J2dXNAZ251Lm9yZz4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAgRGFuaWVsIEVnZ2VyCQk8ZWdnZXJAc3VzZS5kZT4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDEgRnJlZGVyaWMgTGVwaWVkCQk8ZmxlcGllZEBtYW5kcmFrZXNvZnQuY29tPgorICogIENvcHlyaWdodCAoYykgMjAwNCBQYW5hZ2lvdGlzIElzc2FyaXMJPHBhbmFnaW90aXMuaXNzYXJpc0BtZWNoLmt1bGV1dmVuLmFjLmJlPgorICogIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IFBpbmcgQ2hlbmcJCTxwaW5nY0B3YWNvbS5jb20+CisgKgorICogIENoYW5nZUxvZzoKKyAqICAgICAgdjAuMSAodnApICAtIEluaXRpYWwgcmVsZWFzZQorICogICAgICB2MC4yIChhYmEpIC0gU3VwcG9ydCBmb3IgYWxsIGJ1dHRvbnMgLyBjb21iaW5hdGlvbnMKKyAqICAgICAgdjAuMyAodnApICAtIFN1cHBvcnQgZm9yIEludHVvcyBhZGRlZAorICoJdjAuNCAoc20pICAtIFN1cHBvcnQgZm9yIG1vcmUgSW50dW9zIG1vZGVscywgbWVudXN0cmlwCisgKgkJCXJlbGF0aXZlIG1vZGUsIHByb3hpbWl0eS4KKyAqCXYwLjUgKHZwKSAgLSBCaWcgY2xlYW51cCwgbmlmdHkgZmVhdHVyZXMgcmVtb3ZlZCwKKyAqIAkJCXRoZXkgYmVsb25nIGluIHVzZXJzcGFjZQorICoJdjEuOCAodnApICAtIFN1Ym1pdCBVUkIgb25seSB3aGVuIG9wZXJhdGluZywgbW92ZWQgdG8gQ1ZTLAorICoJCQl1c2UgaW5wdXRfcmVwb3J0X2tleSBpbnN0ZWFkIG9mIHJlcG9ydF9idG4gYW5kCisgKgkJCW90aGVyIGNsZWFudXBzCisgKgl2MS4xMSAodnApIC0gQWRkIFVSQiAtPmRldiBzZXR0aW5nIGZvciBuZXcga2VybmVscworICoJdjEuMTEgKGpiKSAtIEFkZCBzdXBwb3J0IGZvciB0aGUgNEQgTW91c2UgJiBMZW5zCisgKgl2MS4xMiAoZGUpIC0gQWRkIHN1cHBvcnQgZm9yIHR3byBtb3JlIGlua2luZyBwZW4gSURzCisgKgl2MS4xNCAodnApIC0gVXNlIG5ldyBVU0IgZGV2aWNlIGlkIHByb2Jpbmcgc2NoZW1lLgorICoJCSAgICAgRml4IFdhY29tIEdyYXBoaXJlIG1vdXNlIHdoZWVsCisgKgl2MS4xOCAodnApIC0gRml4IG1vdXNlIHdoZWVsIGRpcmVjdGlvbgorICoJCSAgICAgTWFrZSBtb3VzZSByZWxhdGl2ZQorICogICAgICB2MS4yMCAoZmwpIC0gUmVwb3J0IHRvb2wgaWQgZm9yIEludHVvcyBkZXZpY2VzCisgKiAgICAgICAgICAgICAgICAgLSBNdWx0aSB0b29scyBzdXBwb3J0CisgKiAgICAgICAgICAgICAgICAgLSBDb3JyZWN0ZWQgSW50dW9zIHByb3RvY29sIGRlY29kaW5nIChhaXJicnVzaCwgNEQgbW91c2UsIGxlbnMgY3Vyc29yLi4uKQorICogICAgICAgICAgICAgICAgIC0gQWRkIFBMIG1vZGVscyBzdXBwb3J0CisgKgkJICAgLSBGaXggV2Fjb20gR3JhcGhpcmUgbW91c2Ugd2hlZWwgYWdhaW4KKyAqCXYxLjIxICh2cCkgLSBSZW1vdmVkIHByb3RvY29sIGRlc2NyaXB0aW9ucworICoJCSAgIC0gQWRkZWQgTUlTQ19TRVJJQUwgZm9yIHRvb2wgc2VyaWFsIG51bWJlcnMKKyAqCSAgICAgIChnYikgLSBJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgorICogICAgdjEuMjEuMSAoZmwpIC0gYWRkZWQgR3JhcGhpcmUyIHN1cHBvcnQKKyAqICAgIHYxLjIxLjIgKGZsKSAtIGFkZGVkIEludHVvczIgc3VwcG9ydAorICogICAgICAgICAgICAgICAgIC0gYWRkZWQgYWxsIHRoZSBQTCBpZHMKKyAqICAgIHYxLjIxLjMgKGZsKSAtIGFkZGVkIGFub3RoZXIgZXJhc2VyIGlkIGZyb20gTmVpbCBPa2Ftb3RvCisgKiAgICAgICAgICAgICAgICAgLSBhZGRlZCBzbW9vdGggZmlsdGVyIGZvciBHcmFwaGlyZSBmcm9tIFBlcmkgSGFua2V5CisgKiAgICAgICAgICAgICAgICAgLSBhZGRlZCBQZW5QYXJ0bmVyIHN1cHBvcnQgZnJvbSBPbGFmIHZhbiBFcworICogICAgICAgICAgICAgICAgIC0gbmV3IHRvb2wgaWRzIGZyb20gT2xlIE1hcnRpbiBCam9lcm5kYWxlbgorICoJdjEuMjkgKHBjKSAtIEFkZCBzdXBwb3J0IGZvciBtb3JlIHRhYmxldHMKKyAqCQkgICAtIEZpeCBwcmVzc3VyZSByZXBvcnRpbmcKKyAqCXYxLjMwICh2cCkgLSBNZXJnZSAyLjQgYW5kIDIuNSBkcml2ZXJzCisgKgkJICAgLSBTaW5jZSAyLjUgbm93IGhhcyBpbnB1dF9zeW5jKCksIHJlbW92ZSBNU0NfU0VSSUFMIGFidXNlCisgKgkJICAgLSBDbGVhbnVwcyBoZXJlIGFuZCB0aGVyZQorICogICAgdjEuMzAuMSAocGkpIC0gQWRkZWQgR3JhcGhpcmUzIHN1cHBvcnQKKyAqCXYxLjQwIChwYykgLSBBZGQgc3VwcG9ydCBmb3Igc2V2ZXJhbCBuZXcgZGV2aWNlcywgZml4IGVyYXNlciByZXBvcnRpbmcsIC4uLgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuNDAiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHVjdy5jej4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgV2Fjb20gR3JhcGhpcmUgYW5kIFdhY29tIEludHVvcyB0YWJsZXQgZHJpdmVyIgorI2RlZmluZSBEUklWRVJfTElDRU5TRSAiR1BMIgorCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKERSSVZFUl9MSUNFTlNFKTsKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1dBQ09NCTB4MDU2YQorCitzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgeworCWNoYXIgKm5hbWU7CisJaW50IHBrdGxlbjsKKwlpbnQgeF9tYXg7CisJaW50IHlfbWF4OworCWludCBwcmVzc3VyZV9tYXg7CisJaW50IGRpc3RhbmNlX21heDsKKwlpbnQgdHlwZTsKKwl1c2JfY29tcGxldGVfdCBpcnE7Cit9OworCitzdHJ1Y3Qgd2Fjb20geworCXNpZ25lZCBjaGFyICpkYXRhOworCWRtYV9hZGRyX3QgZGF0YV9kbWE7CisJc3RydWN0IGlucHV0X2RldiBkZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKKwlzdHJ1Y3QgdXJiICppcnE7CisJc3RydWN0IHdhY29tX2ZlYXR1cmVzICpmZWF0dXJlczsKKwlpbnQgdG9vbFsyXTsKKwlpbnQgb3BlbjsKKwlfX3UzMiBzZXJpYWxbMl07CisJY2hhciBwaHlzWzMyXTsKK307CisKKyNkZWZpbmUgVVNCX1JFUV9TRVRfUkVQT1JUCTB4MDkKK3N0YXRpYyBpbnQgdXNiX3NldF9yZXBvcnQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHVuc2lnbmVkIGNoYXIgdHlwZSwKKwkJCQl1bnNpZ25lZCBjaGFyIGlkLCB2b2lkICpidWYsIGludCBzaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2coaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwKKwkJdXNiX3NuZGN0cmxwaXBlKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIDApLAorICAgICAgICAgICAgICAgIFVTQl9SRVFfU0VUX1JFUE9SVCwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorICAgICAgICAgICAgICAgICh0eXBlIDw8IDgpICsgaWQsIGludGYtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorCQlidWYsIHNpemUsIDEwMDApOworfQorCitzdGF0aWMgdm9pZCB3YWNvbV9wbF9pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgd2Fjb20gKndhY29tID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSAmd2Fjb20tPmRldjsKKwlpbnQgcHJveCwgcHJlc3N1cmU7CisJaW50IHJldHZhbDsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGRhdGFbMF0gIT0gMikgeworCQlkYmcoIndhY29tX3BsX2lycTogcmVjZWl2ZWQgdW5rbm93biByZXBvcnQgIyVkIiwgZGF0YVswXSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlwcm94ID0gZGF0YVsxXSAmIDB4NDA7CisKKwlpbnB1dF9yZWdzKGRldiwgcmVncyk7CisJCisJaWYgKHByb3gpIHsKKworCQlwcmVzc3VyZSA9IChzaWduZWQgY2hhcikoKGRhdGFbN10gPDwgMSkgfCAoKGRhdGFbNF0gPj4gMikgJiAxKSk7CisJCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnByZXNzdXJlX21heCA+IDI1NSkKKwkJCXByZXNzdXJlID0gKHByZXNzdXJlIDw8IDEpIHwgKChkYXRhWzRdID4+IDYpICYgMSk7CisJCXByZXNzdXJlICs9ICh3YWNvbS0+ZmVhdHVyZXMtPnByZXNzdXJlX21heCArIDEpIC8gMjsKKworCQkvKgorCQkgKiBpZiBnb2luZyBmcm9tIG91dCBvZiBwcm94aW1pdHkgaW50byBwcm94aW1pdHkgc2VsZWN0IGJldHdlZW4gdGhlIGVyYXNlcgorCQkgKiBhbmQgdGhlIHBlbiBiYXNlZCBvbiB0aGUgc3RhdGUgb2YgdGhlIHN0eWx1czIgYnV0dG9uLCBjaG9vc2UgZXJhc2VyIGlmCisJCSAqIHByZXNzZWQgZWxzZSBjaG9vc2UgcGVuLiBpZiBub3QgYSBwcm94aW1pdHkgY2hhbmdlIGZyb20gb3V0IHRvIGluLCBzZW5kCisJCSAqIGFuIG91dCBvZiBwcm94aW1pdHkgZm9yIHByZXZpb3VzIHRvb2wgdGhlbiBhIGluIGZvciBuZXcgdG9vbC4KKwkJICovCisJCWlmICghd2Fjb20tPnRvb2xbMF0pIHsKKwkJCS8qIEdvaW5nIGludG8gcHJveGltaXR5IHNlbGVjdCB0b29sICovCisJCQl3YWNvbS0+dG9vbFsxXSA9IChkYXRhWzRdICYgMHgyMCk/IEJUTl9UT09MX1JVQkJFUiA6IEJUTl9UT09MX1BFTjsKKwkJfQorCQllbHNlIHsKKwkJCS8qIHdhcyBlbnRlcmVkIHdpdGggc3R5bHVzMiBwcmVzc2VkICovCisJCQlpZiAod2Fjb20tPnRvb2xbMV0gPT0gQlROX1RPT0xfUlVCQkVSICYmICEoZGF0YVs0XSAmIDB4MjApICkgeworCQkJCS8qIHJlcG9ydCBvdXQgcHJveGltaXR5IGZvciBwcmV2aW91cyB0b29sICovCisJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIHdhY29tLT50b29sWzFdLCAwKTsKKwkJCQlpbnB1dF9zeW5jKGRldik7CisJCQkJd2Fjb20tPnRvb2xbMV0gPSBCVE5fVE9PTF9QRU47CisJCQkJZ290byBleGl0OworCQkJfQorCQl9CisJCWlmICh3YWNvbS0+dG9vbFsxXSAhPSBCVE5fVE9PTF9SVUJCRVIpIHsKKwkJCS8qIFVua25vd24gdG9vbCBzZWxlY3RlZCBkZWZhdWx0IHRvIHBlbiB0b29sICovCisJCQl3YWNvbS0+dG9vbFsxXSA9IEJUTl9UT09MX1BFTjsKKwkJfQorCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgd2Fjb20tPnRvb2xbMV0sIHByb3gpOyAvKiByZXBvcnQgaW4gcHJveGltaXR5IGZvciB0b29sICovCisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgZGF0YVszXSB8ICgoX191MzIpZGF0YVsyXSA8PCA3KSB8ICgoX191MzIpKGRhdGFbMV0gJiAweDAzKSA8PCAxNCkpOworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIGRhdGFbNl0gfCAoKF9fdTMyKWRhdGFbNV0gPDwgNykgfCAoKF9fdTMyKShkYXRhWzRdICYgMHgwMykgPDwgMTQpKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19QUkVTU1VSRSwgcHJlc3N1cmUpOworCisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9VQ0gsIGRhdGFbNF0gJiAweDA4KTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TVFlMVVMsIGRhdGFbNF0gJiAweDEwKTsKKwkJLyogT25seSBhbGxvdyB0aGUgc3R5bHVzMiBidXR0b24gdG8gYmUgcmVwb3J0ZWQgZm9yIHRoZSBwZW4gdG9vbC4gKi8KKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TVFlMVVMyLCAod2Fjb20tPnRvb2xbMV0gPT0gQlROX1RPT0xfUEVOKSAmJiAoZGF0YVs0XSAmIDB4MjApKTsKKwl9CisJZWxzZSB7CisJCS8qIHJlcG9ydCBwcm94aW1pdHktb3V0IG9mIGEgKHZhbGlkKSB0b29sICovCisJCWlmICh3YWNvbS0+dG9vbFsxXSAhPSBCVE5fVE9PTF9SVUJCRVIpIHsKKwkJCS8qIFVua25vd24gdG9vbCBzZWxlY3RlZCBkZWZhdWx0IHRvIHBlbiB0b29sICovCisJCQl3YWNvbS0+dG9vbFsxXSA9IEJUTl9UT09MX1BFTjsKKwkJfQorCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgd2Fjb20tPnRvb2xbMV0sIHByb3gpOworCX0KKworCXdhY29tLT50b29sWzBdID0gcHJveDsgLyogU2F2ZSBwcm94aW1pdHkgc3RhdGUgKi8KKwlpbnB1dF9zeW5jKGRldik7CisKK2V4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKK30KKworc3RhdGljIHZvaWQgd2Fjb21fcHR1X2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB3YWNvbSAqd2Fjb20gPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHdhY29tLT5kYXRhOworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9ICZ3YWNvbS0+ZGV2OworCWludCByZXR2YWw7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChkYXRhWzBdICE9IDIpCisJeworCQlwcmludGsoS0VSTl9JTkZPICJ3YWNvbV9wdHVfaXJxOiByZWNlaXZlZCB1bmtub3duIHJlcG9ydCAjJWRcbiIsIGRhdGFbMF0pOworCQlnb3RvIGV4aXQ7CisJfQorCisJaW5wdXRfcmVncyhkZXYsIHJlZ3MpOworCWlmIChkYXRhWzFdICYgMHgwNCkKKwl7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9PTF9SVUJCRVIsIGRhdGFbMV0gJiAweDIwKTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT1VDSCwgZGF0YVsxXSAmIDB4MDgpOworCX0KKwllbHNlCisJeworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPT0xfUEVOLCBkYXRhWzFdICYgMHgyMCk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9VQ0gsIGRhdGFbMV0gJiAweDAxKTsKKwl9CisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSAmZGF0YVsyXSkpOworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwgbGUxNl90b19jcHUoKihfX2xlMTYgKikgJmRhdGFbNF0pKTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1BSRVNTVVJFLCBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSAmZGF0YVs2XSkpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU1RZTFVTLCBkYXRhWzFdICYgMHgwMik7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TVFlMVVMyLCBkYXRhWzFdICYgMHgxMCk7CisKKwlpbnB1dF9zeW5jKGRldik7CisKK2V4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKK30KKworc3RhdGljIHZvaWQgd2Fjb21fcGVucGFydG5lcl9pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgd2Fjb20gKndhY29tID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSAmd2Fjb20tPmRldjsKKwlpbnQgcmV0dmFsOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoZGF0YVswXSAhPSAyKSB7CisJCXByaW50ayhLRVJOX0lORk8gIndhY29tX3BlbnBhcnRuZXJfaXJxOiByZWNlaXZlZCB1bmtub3duIHJlcG9ydCAjJWRcbiIsIGRhdGFbMF0pOworCQlnb3RvIGV4aXQ7CisJfQorCisJaW5wdXRfcmVncyhkZXYsIHJlZ3MpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9PTF9QRU4sIDEpOworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgbGUxNl90b19jcHUoKihfX2xlMTYgKikgJmRhdGFbMV0pKTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIGxlMTZfdG9fY3B1KCooX19sZTE2ICopICZkYXRhWzNdKSk7CisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19QUkVTU1VSRSwgKHNpZ25lZCBjaGFyKWRhdGFbNl0gKyAxMjcpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9VQ0gsICgoc2lnbmVkIGNoYXIpZGF0YVs2XSA+IC04MCkgJiYgIShkYXRhWzVdICYgMHgyMCkpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU1RZTFVTLCAoZGF0YVs1XSAmIDB4NDApKTsKKwlpbnB1dF9zeW5jKGRldik7CisKK2V4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKK30KKworc3RhdGljIHZvaWQgd2Fjb21fZ3JhcGhpcmVfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHdhY29tICp3YWNvbSA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gd2Fjb20tPmRhdGE7CisJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gJndhY29tLT5kZXY7CisJaW50IHgsIHk7CisJaW50IHJldHZhbDsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGRhdGFbMF0gIT0gMikgeworCQlkYmcoIndhY29tX2dyYXBoaXJlX2lycTogcmVjZWl2ZWQgdW5rbm93biByZXBvcnQgIyVkIiwgZGF0YVswXSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwl4ID0gbGUxNl90b19jcHUoKihfX2xlMTYgKikgJmRhdGFbMl0pOworCXkgPSBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSAmZGF0YVs0XSk7CisKKwlpbnB1dF9yZWdzKGRldiwgcmVncyk7CisKKwlzd2l0Y2ggKChkYXRhWzFdID4+IDUpICYgMykgeworCisJCWNhc2UgMDoJLyogUGVuICovCisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPT0xfUEVOLCBkYXRhWzFdICYgMHg4MCk7CisJCQlicmVhazsKKworCQljYXNlIDE6IC8qIFJ1YmJlciAqLworCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT09MX1JVQkJFUiwgZGF0YVsxXSAmIDB4ODApOworCQkJYnJlYWs7CisKKwkJY2FzZSAyOiAvKiBNb3VzZSB3aXRoIHdoZWVsICovCisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX01JRERMRSwgZGF0YVsxXSAmIDB4MDQpOworCQkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9XSEVFTCwgKHNpZ25lZCBjaGFyKSBkYXRhWzZdKTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCisgICAgICAgICAgICAgICAgY2FzZSAzOiAvKiBNb3VzZSB3aXRob3V0IHdoZWVsICovCisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPT0xfTU9VU0UsIGRhdGFbN10gPiAyNCk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0xFRlQsIGRhdGFbMV0gJiAweDAxKTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fUklHSFQsIGRhdGFbMV0gJiAweDAyKTsKKwkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfRElTVEFOQ0UsIGRhdGFbN10pOworCisJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsIHgpOworCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCB5KTsKKworCQkJaW5wdXRfc3luYyhkZXYpOworCQkJZ290byBleGl0OworCX0KKworCWlmIChkYXRhWzFdICYgMHg4MCkgeworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsIHgpOworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIHkpOworCX0KKworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUFJFU1NVUkUsIGxlMTZfdG9fY3B1KCooX19sZTE2ICopICZkYXRhWzZdKSk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT1VDSCwgZGF0YVsxXSAmIDB4MDEpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU1RZTFVTLCBkYXRhWzFdICYgMHgwMik7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TVFlMVVMyLCBkYXRhWzFdICYgMHgwNCk7CisKKwlpbnB1dF9zeW5jKGRldik7CisKK2V4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKK30KKworc3RhdGljIGludCB3YWNvbV9pbnR1b3NfaW5vdXQoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB3YWNvbSAqd2Fjb20gPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHdhY29tLT5kYXRhOworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9ICZ3YWNvbS0+ZGV2OworCWludCBpZHg7CisKKwkvKiB0b29sIG51bWJlciAqLworCWlkeCA9IGRhdGFbMV0gJiAweDAxOworCisJLyogRW50ZXIgcmVwb3J0ICovCisJaWYgKChkYXRhWzFdICYgMHhmYykgPT0gMHhjMCkKKwl7CisJCS8qIHNlcmlhbCBudW1iZXIgb2YgdGhlIHRvb2wgKi8KKwkJd2Fjb20tPnNlcmlhbFtpZHhdID0gKChfX3UzMikoZGF0YVszXSAmIDB4MGYpIDw8IDI4KSArCisJCQkoKF9fdTMyKWRhdGFbNF0gPDwgMjApICsgKChfX3UzMilkYXRhWzVdIDw8IDEyKSArCisJCQkoKF9fdTMyKWRhdGFbNl0gPDwgNCkgKyAoZGF0YVs3XSA+PiA0KTsKKworCQlzd2l0Y2ggKCgoX191MzIpZGF0YVsyXSA8PCA0KSB8IChkYXRhWzNdID4+IDQpKSB7CisJCQljYXNlIDB4ODEyOiAvKiBJbmtpbmcgcGVuICovCisJCQljYXNlIDB4ODAxOiAvKiBJbnR1b3MzIElua2luZyBwZW4gKi8KKwkJCWNhc2UgMHgwMTI6CisJCQkJd2Fjb20tPnRvb2xbaWR4XSA9IEJUTl9UT09MX1BFTkNJTDsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHg4MjI6IC8qIFBlbiAqLworCQkJY2FzZSAweDg0MjoKKwkJCWNhc2UgMHg4NTI6CisJCQljYXNlIDB4ODIzOiAvKiBJbnR1b3MzIEdyaXAgUGVuICovCisJCQljYXNlIDB4ODEzOiAvKiBJbnR1b3MzIENsYXNzaWMgUGVuICovCisJCQljYXNlIDB4ODg1OiAvKiBJbnR1b3MzIE1hcmtlciBQZW4gKi8KKwkJCWNhc2UgMHgwMjI6CisJCQkJd2Fjb20tPnRvb2xbaWR4XSA9IEJUTl9UT09MX1BFTjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHg4MzI6IC8qIFN0cm9rZSBwZW4gKi8KKwkJCWNhc2UgMHgwMzI6CisJCQkJd2Fjb20tPnRvb2xbaWR4XSA9IEJUTl9UT09MX0JSVVNIOworCQkJCWJyZWFrOworCQkJY2FzZSAweDAwNzogLyogTW91c2UgNEQgYW5kIDJEICovCisJCSAgICAgICAgY2FzZSAweDA5YzoKKwkJCWNhc2UgMHgwOTQ6CisJCQljYXNlIDB4MDE3OiAvKiBJbnR1b3MzIDJEIE1vdXNlICovCisJCQkJd2Fjb20tPnRvb2xbaWR4XSA9IEJUTl9UT09MX01PVVNFOworCQkJCWJyZWFrOworCQkJY2FzZSAweDA5NjogLyogTGVucyBjdXJzb3IgKi8KKwkJCWNhc2UgMHgwOTc6IC8qIEludHVvczMgTGVucyBjdXJzb3IgKi8KKwkJCQl3YWNvbS0+dG9vbFtpZHhdID0gQlROX1RPT0xfTEVOUzsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHg4MmE6IC8qIEVyYXNlciAqLworCQkJY2FzZSAweDg1YToKKwkJICAgICAgICBjYXNlIDB4OTFhOgorCQkJY2FzZSAweGQxYToKKwkJCWNhc2UgMHgwZmE6CisJCQljYXNlIDB4ODJiOiAvKiBJbnR1b3MzIEdyaXAgUGVuIEVyYXNlciAqLworCQkJY2FzZSAweDgxYjogLyogSW50dW9zMyBDbGFzc2ljIFBlbiBFcmFzZXIgKi8KKwkJCWNhc2UgMHg5MWI6IC8qIEludHVvczMgQWlyYnJ1c2ggRXJhc2VyICovCisJCQkJd2Fjb20tPnRvb2xbaWR4XSA9IEJUTl9UT09MX1JVQkJFUjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHhkMTI6CisJCQljYXNlIDB4OTEyOgorCQkJY2FzZSAweDExMjoKKwkJCWNhc2UgMHg5MTM6IC8qIEludHVvczMgQWlyYnJ1c2ggKi8KKwkJCQl3YWNvbS0+dG9vbFtpZHhdID0gQlROX1RPT0xfQUlSQlJVU0g7CisJCQkJYnJlYWs7CS8qIEFpcmJydXNoICovCisJCQlkZWZhdWx0OiAvKiBVbmtub3duIHRvb2wgKi8KKwkJCQl3YWNvbS0+dG9vbFtpZHhdID0gQlROX1RPT0xfUEVOOworCQl9CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFtpZHhdLCAxKTsKKwkJaW5wdXRfZXZlbnQoZGV2LCBFVl9NU0MsIE1TQ19TRVJJQUwsIHdhY29tLT5zZXJpYWxbaWR4XSk7CisJCWlucHV0X3N5bmMoZGV2KTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogRXhpdCByZXBvcnQgKi8KKwlpZiAoKGRhdGFbMV0gJiAweGZlKSA9PSAweDgwKSB7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFtpZHhdLCAwKTsKKwkJaW5wdXRfZXZlbnQoZGV2LCBFVl9NU0MsIE1TQ19TRVJJQUwsIHdhY29tLT5zZXJpYWxbaWR4XSk7CisJCWlucHV0X3N5bmMoZGV2KTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdhY29tX2ludHVvc19nZW5lcmFsKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgd2Fjb20gKndhY29tID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSAmd2Fjb20tPmRldjsKKwl1bnNpZ25lZCBpbnQgdDsKKworCS8qIGdlbmVyYWwgcGVuIHBhY2tldCAqLworCWlmICgoZGF0YVsxXSAmIDB4YjgpID09IDB4YTApCisJeworCQl0ID0gKChfX3UzMilkYXRhWzZdIDw8IDIpIHwgKChkYXRhWzddID4+IDYpICYgMyk7CisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUFJFU1NVUkUsIHQpOworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1RJTFRfWCwKKwkJCQkoKGRhdGFbN10gPDwgMSkgJiAweDdlKSB8IChkYXRhWzhdID4+IDcpKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19USUxUX1ksIGRhdGFbOF0gJiAweDdmKTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TVFlMVVMsIGRhdGFbMV0gJiAyKTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TVFlMVVMyLCBkYXRhWzFdICYgNCk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9VQ0gsIHQgPiAxMCk7CisJfQorCisJLyogYWlyYnJ1c2ggc2Vjb25kIHBhY2tldCAqLworCWlmICgoZGF0YVsxXSAmIDB4YmMpID09IDB4YjQpCisJeworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1dIRUVMLAorCQkJCSgoX191MzIpZGF0YVs2XSA8PCAyKSB8ICgoZGF0YVs3XSA+PiA2KSAmIDMpKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19USUxUX1gsCisJCQkJKChkYXRhWzddIDw8IDEpICYgMHg3ZSkgfCAoZGF0YVs4XSA+PiA3KSk7CisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfVElMVF9ZLCBkYXRhWzhdICYgMHg3Zik7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgd2Fjb21faW50dW9zX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB3YWNvbSAqd2Fjb20gPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHdhY29tLT5kYXRhOworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9ICZ3YWNvbS0+ZGV2OworCXVuc2lnbmVkIGludCB0OworCWludCBpZHg7CisJaW50IHJldHZhbDsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGRhdGFbMF0gIT0gMiAmJiBkYXRhWzBdICE9IDUgJiYgZGF0YVswXSAhPSA2KSB7CisJCWRiZygid2Fjb21faW50dW9zX2lycTogcmVjZWl2ZWQgdW5rbm93biByZXBvcnQgIyVkIiwgZGF0YVswXSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpbnB1dF9yZWdzKGRldiwgcmVncyk7CisKKwkvKiB0b29sIG51bWJlciAqLworCWlkeCA9IGRhdGFbMV0gJiAweDAxOworCisJLyogcHJvY2VzcyBpbi9vdXQgcHJveCBldmVudHMgKi8KKwlpZiAod2Fjb21faW50dW9zX2lub3V0KHVyYikpIGdvdG8gZXhpdDsKKworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgYmUxNl90b19jcHUoKihfX2JlMTYgKikgJmRhdGFbMl0pKTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIGJlMTZfdG9fY3B1KCooX19iZTE2ICopICZkYXRhWzRdKSk7CisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ESVNUQU5DRSwgZGF0YVs5XSk7CisKKwkvKiBwcm9jZXNzIGdlbmVyYWwgcGFja2V0cyAqLworCXdhY29tX2ludHVvc19nZW5lcmFsKHVyYik7CisJCisJaWYgKChkYXRhWzFdICYgMHhiYykgPT0gMHhhOCB8fCAoZGF0YVsxXSAmIDB4YmUpID09IDB4YjApIHsJCS8qIDREIG1vdXNlIG9yIExlbnMgY3Vyc29yIHBhY2tldHMgKi8KKworCQlpZiAoZGF0YVsxXSAmIDB4MDIpIHsJCQkJCQkvKiBSb3RhdGlvbiBwYWNrZXQgKi8KKworCQkJdCA9ICgoX191MzIpZGF0YVs2XSA8PCAzKSB8ICgoZGF0YVs3XSA+PiA1KSAmIDcpOworCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWiwgKGRhdGFbN10gJiAweDIwKSA/ICgodCAtIDEpIC8gMikgOiAtdCAvIDIpOworCisJCX0gZWxzZSB7CisKKwkgCQlpZiAoKGRhdGFbMV0gJiAweDEwKSA9PSAwKSB7CQkJCS8qIDREIG1vdXNlIHBhY2tldHMgKi8KKworCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTEVGVCwgICBkYXRhWzhdICYgMHgwMSk7CisJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9NSURETEUsIGRhdGFbOF0gJiAweDAyKTsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1JJR0hULCAgZGF0YVs4XSAmIDB4MDQpOworCisJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TSURFLCAgIGRhdGFbOF0gJiAweDIwKTsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0VYVFJBLCAgZGF0YVs4XSAmIDB4MTApOworCQkJCXQgPSAoKF9fdTMyKWRhdGFbNl0gPDwgMikgfCAoKGRhdGFbN10gPj4gNikgJiAzKTsKKwkJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1RIUk9UVExFLCAoZGF0YVs4XSAmIDB4MDgpID8gLXQgOiB0KTsKKworCQkJfSBlbHNlIHsKKwkJCQlpZiAod2Fjb20tPnRvb2xbaWR4XSA9PSBCVE5fVE9PTF9NT1VTRSkgewkvKiAyRCBtb3VzZSBwYWNrZXRzICovCQorCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0xFRlQsICAgZGF0YVs4XSAmIDB4MDQpOworCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX01JRERMRSwgZGF0YVs4XSAmIDB4MDgpOworCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1JJR0hULCAgZGF0YVs4XSAmIDB4MTApOworCQkJCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1dIRUVMLCAKKwkJCQkJICAgICgtKF9fdTMyKShkYXRhWzhdICYgMHgwMSkgKyAoX191MzIpKChkYXRhWzhdICYgMHgwMikgPj4gMSkpKTsKKwkJCQl9CisJCQkJZWxzZSB7ICAgICAvKiBMZW5zIGN1cnNvciBwYWNrZXRzICovCisJCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTEVGVCwgICBkYXRhWzhdICYgMHgwMSk7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTUlERExFLCBkYXRhWzhdICYgMHgwMik7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fUklHSFQsICBkYXRhWzhdICYgMHgwNCk7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU0lERSwgICBkYXRhWzhdICYgMHgxMCk7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fRVhUUkEsICBkYXRhWzhdICYgMHgwOCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQorCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFtpZHhdLCAxKTsKKwlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1NFUklBTCwgd2Fjb20tPnNlcmlhbFtpZHhdKTsKKwlpbnB1dF9zeW5jKGRldik7CisKK2V4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKK30KKworc3RhdGljIHZvaWQgd2Fjb21faW50dW9zM19pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgd2Fjb20gKndhY29tID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSAmd2Fjb20tPmRldjsKKwl1bnNpZ25lZCBpbnQgdDsKKwlpbnQgaWR4LCByZXR2YWw7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIGNoZWNrIGZvciB2YWxpZCByZXBvcnQgKi8KKwlpZiAoZGF0YVswXSAhPSAyICYmIGRhdGFbMF0gIT0gNSAmJiBkYXRhWzBdICE9IDEyKQorCXsKKwkJcHJpbnRrKEtFUk5fSU5GTyAid2Fjb21faW50dW9zM19pcnE6IHJlY2VpdmVkIHVua25vd24gcmVwb3J0ICMlZFxuIiwgZGF0YVswXSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpbnB1dF9yZWdzKGRldiwgcmVncyk7CisKKwkvKiB0b29sIGluZGV4IGlzIGFsd2F5cyAwIGhlcmUgc2luY2UgdGhlcmUgaXMgbm8gZHVhbCBpbnB1dCB0b29sICovCisJaWR4ID0gZGF0YVsxXSAmIDB4MDE7CisKKwkvKiBwYWQgcGFja2V0cy4gV29ya3MgYXMgYSBzZWNvbmQgdG9vbCBhbmQgaXMgYWx3YXlzIGluIHByb3ggKi8KKwlpZiAoZGF0YVswXSA9PSAxMikKKwl7CisJCS8qIGluaXRpYXRlIHRoZSBwYWQgYXMgYSBkZXZpY2UgKi8KKwkJaWYgKHdhY29tLT50b29sWzFdICE9IEJUTl9UT09MX0ZJTkdFUikKKwkJeworCQkJd2Fjb20tPnRvb2xbMV0gPSBCVE5fVE9PTF9GSU5HRVI7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgd2Fjb20tPnRvb2xbMV0sIDEpOworCQl9CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fMCwgKGRhdGFbNV0gJiAweDAxKSk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fMSwgKGRhdGFbNV0gJiAweDAyKSk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fMiwgKGRhdGFbNV0gJiAweDA0KSk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fMywgKGRhdGFbNV0gJiAweDA4KSk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fNCwgKGRhdGFbNl0gJiAweDAxKSk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fNSwgKGRhdGFbNl0gJiAweDAyKSk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fNiwgKGRhdGFbNl0gJiAweDA0KSk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fNywgKGRhdGFbNl0gJiAweDA4KSk7CisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUlgsICgoZGF0YVsxXSAmIDB4MWYpIDw8IDgpIHwgZGF0YVsyXSk7CisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUlksICgoZGF0YVszXSAmIDB4MWYpIDw8IDgpIHwgZGF0YVs0XSk7CisJCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0VSSUFMLCAweGZmZmZmZmZmKTsKKwkJaW5wdXRfc3luYyhkZXYpOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogcHJvY2VzcyBpbi9vdXQgcHJveCBldmVudHMgKi8KKwlpZiAod2Fjb21faW50dW9zX2lub3V0KHVyYikpIGdvdG8gZXhpdDsKKworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgKChfX3UzMilkYXRhWzJdIDw8IDkpIHwgKChfX3UzMilkYXRhWzNdIDw8IDEpIHwgKChkYXRhWzldID4+IDEpICYgMSkpOworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwgKChfX3UzMilkYXRhWzRdIDw8IDkpIHwgKChfX3UzMilkYXRhWzVdIDw8IDEpIHwgKGRhdGFbOV0gJiAxKSk7CisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ESVNUQU5DRSwgKChkYXRhWzldID4+IDIpICYgMHgzZikpOworCisJLyogcHJvY2VzcyBnZW5lcmFsIHBhY2tldHMgKi8KKwl3YWNvbV9pbnR1b3NfZ2VuZXJhbCh1cmIpOworCisJaWYgKChkYXRhWzFdICYgMHhiYykgPT0gMHhhOCB8fCAoZGF0YVsxXSAmIDB4YmUpID09IDB4YjApCisJeworCQkvKiBNYXJrZXIgcGVuIHJvdGF0aW9uIHBhY2tldC4gUmVwb3J0ZWQgYXMgd2hlZWwgZHVlIHRvIHZhbHVhdG9yIGxpbWl0YXRpb24gKi8KKwkJaWYgKGRhdGFbMV0gJiAweDAyKQorCQl7CisJCQl0ID0gKChfX3UzMilkYXRhWzZdIDw8IDMpIHwgKChkYXRhWzddID4+IDUpICYgNyk7CisJCQl0ID0gKGRhdGFbN10gJiAweDIwKSA/ICgodCA+IDkwMCkgPyAoKHQtMSkgLyAyIC0gMTM1MCkgOgorCQkJCSgodC0xKSAvIDIgKyA0NTApKSA6ICg0NTAgLSB0IC8gMikgOworCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19XSEVFTCwgdCk7CisJCX0KKworCQkvKiAyRCBtb3VzZSBwYWNrZXRzICovCisJCWlmICh3YWNvbS0+dG9vbFtpZHhdID09IEJUTl9UT09MX01PVVNFKQorCQl7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0xFRlQsICAgZGF0YVs4XSAmIDB4MDQpOworCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9NSURETEUsIGRhdGFbOF0gJiAweDA4KTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fUklHSFQsICBkYXRhWzhdICYgMHgxMCk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1NJREUsICAgZGF0YVs4XSAmIDB4NDApOworCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9FWFRSQSwgIGRhdGFbOF0gJiAweDIwKTsKKwkJCS8qIG1vdXNlIHdoZWVsIGlzIHBvc2l0aXZlIHdoZW4gcm9sbGVkIGJhY2t3YXJkcyAqLworCQkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9XSEVFTCwgICgoX191MzIpKChkYXRhWzhdICYgMHgwMikgPj4gMSkKKwkJCQkJIC0gKF9fdTMyKShkYXRhWzhdICYgMHgwMSkpKTsKKwkJfQorCX0KKworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFtpZHhdLCAxKTsKKwlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1NFUklBTCwgd2Fjb20tPnNlcmlhbFtpZHhdKTsKKwlpbnB1dF9zeW5jKGRldik7CisKK2V4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgX19GVU5DVElPTl9fLCByZXR2YWwpOworfQorCitzdGF0aWMgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzW10gPSB7CisJeyAiV2Fjb20gUGVucGFydG5lciIsICAgIDcsICAgNTA0MCwgIDM3ODAsICAyNTUsIDMyLCAwLCB3YWNvbV9wZW5wYXJ0bmVyX2lycSB9LAorICAgICAgICB7ICJXYWNvbSBHcmFwaGlyZSIsICAgICAgOCwgIDEwMjA2LCAgNzQyMiwgIDUxMSwgMzIsIDEsIHdhY29tX2dyYXBoaXJlX2lycSB9LAorCXsgIldhY29tIEdyYXBoaXJlMiA0eDUiLCA4LCAgMTAyMDYsICA3NDIyLCAgNTExLCAzMiwgMSwgd2Fjb21fZ3JhcGhpcmVfaXJxIH0sCisgCXsgIldhY29tIEdyYXBoaXJlMiA1eDciLCA4LCAgMTM5MTgsIDEwMjA2LCAgNTExLCAzMiwgMSwgd2Fjb21fZ3JhcGhpcmVfaXJxIH0sCisJeyAiV2Fjb20gR3JhcGhpcmUzIiwgICAgIDgsICAxMDIwOCwgIDc0MjQsICA1MTEsIDMyLCAxLCB3YWNvbV9ncmFwaGlyZV9pcnEgfSwKKwl7ICJXYWNvbSBHcmFwaGlyZTMgNng4IiwgOCwgIDE2NzA0LCAxMjA2NCwgIDUxMSwgMzIsIDEsIHdhY29tX2dyYXBoaXJlX2lycSB9LAorICAJeyAiV2Fjb20gSW50dW9zIDR4NSIsICAgMTAsICAxMjcwMCwgMTA2MDAsIDEwMjMsIDE1LCAyLCB3YWNvbV9pbnR1b3NfaXJxIH0sCisgCXsgIldhY29tIEludHVvcyA2eDgiLCAgIDEwLCAgMjAzMjAsIDE2MjQwLCAxMDIzLCAxNSwgMiwgd2Fjb21faW50dW9zX2lycSB9LAorIAl7ICJXYWNvbSBJbnR1b3MgOXgxMiIsICAxMCwgIDMwNDgwLCAyNDA2MCwgMTAyMywgMTUsIDIsIHdhY29tX2ludHVvc19pcnEgfSwKKyAJeyAiV2Fjb20gSW50dW9zIDEyeDEyIiwgMTAsICAzMDQ4MCwgMzE2ODAsIDEwMjMsIDE1LCAyLCB3YWNvbV9pbnR1b3NfaXJxIH0sCisgCXsgIldhY29tIEludHVvcyAxMngxOCIsIDEwLCAgNDU3MjAsIDMxNjgwLCAxMDIzLCAxNSwgMiwgd2Fjb21faW50dW9zX2lycSB9LAorIAl7ICJXYWNvbSBQTDQwMCIsICAgICAgICAgOCwgICA1NDA4LCAgNDA1NiwgIDI1NSwgMzIsIDMsIHdhY29tX3BsX2lycSB9LAorIAl7ICJXYWNvbSBQTDUwMCIsICAgICAgICAgOCwgICA2MTQ0LCAgNDYwOCwgIDI1NSwgMzIsIDMsIHdhY29tX3BsX2lycSB9LAorIAl7ICJXYWNvbSBQTDYwMCIsICAgICAgICAgOCwgICA2MTI2LCAgNDYwNCwgIDI1NSwgMzIsIDMsIHdhY29tX3BsX2lycSB9LAorIAl7ICJXYWNvbSBQTDYwMFNYIiwgICAgICAgOCwgICA2MjYwLCAgNTAxNiwgIDI1NSwgMzIsIDMsIHdhY29tX3BsX2lycSB9LAorIAl7ICJXYWNvbSBQTDU1MCIsICAgICAgICAgOCwgICA2MTQ0LCAgNDYwOCwgIDUxMSwgMzIsIDMsIHdhY29tX3BsX2lycSB9LAorIAl7ICJXYWNvbSBQTDgwMCIsICAgICAgICAgOCwgICA3MjIwLCAgNTc4MCwgIDUxMSwgMzIsIDMsIHdhY29tX3BsX2lycSB9LAorCXsgIldhY29tIEludHVvczIgNHg1IiwgICAxMCwgMTI3MDAsIDEwNjAwLCAxMDIzLCAxNSwgMiwgd2Fjb21faW50dW9zX2lycSB9LAorCXsgIldhY29tIEludHVvczIgNng4IiwgICAxMCwgMjAzMjAsIDE2MjQwLCAxMDIzLCAxNSwgMiwgd2Fjb21faW50dW9zX2lycSB9LAorCXsgIldhY29tIEludHVvczIgOXgxMiIsICAxMCwgMzA0ODAsIDI0MDYwLCAxMDIzLCAxNSwgMiwgd2Fjb21faW50dW9zX2lycSB9LAorCXsgIldhY29tIEludHVvczIgMTJ4MTIiLCAxMCwgMzA0ODAsIDMxNjgwLCAxMDIzLCAxNSwgMiwgd2Fjb21faW50dW9zX2lycSB9LAorCXsgIldhY29tIEludHVvczIgMTJ4MTgiLCAxMCwgNDU3MjAsIDMxNjgwLCAxMDIzLCAxNSwgMiwgd2Fjb21faW50dW9zX2lycSB9LAorCXsgIldhY29tIFZvbGl0byIsICAgICAgICA4LCAgIDUxMDQsICAzNzEyLCAgNTExLCAzMiwgMSwgd2Fjb21fZ3JhcGhpcmVfaXJxIH0sCisJeyAiV2Fjb20gQ2ludGlxIFBhcnRuZXIiLDgsICAyMDQ4MCwgMTUzNjAsICA1MTEsIDMyLCAzLCB3YWNvbV9wdHVfaXJxIH0sCisJeyAiV2Fjb20gSW50dW9zMyA0eDUiLCAgIDEwLCAyNTQwMCwgMjAzMjAsIDEwMjMsIDE1LCA0LCB3YWNvbV9pbnR1b3MzX2lycSB9LAorCXsgIldhY29tIEludHVvczMgNng4IiwgICAxMCwgNDA2NDAsIDMwNDgwLCAxMDIzLCAxNSwgNCwgd2Fjb21faW50dW9zM19pcnEgfSwKKwl7ICJXYWNvbSBJbnR1b3MzIDl4MTIiLCAgMTAsIDYwOTYwLCA0NTcyMCwgMTAyMywgMTUsIDQsIHdhY29tX2ludHVvczNfaXJxIH0sCisJeyAiV2Fjb20gSW50dW9zMiA2eDgiLCAgIDEwLCAyMDMyMCwgMTYyNDAsIDEwMjMsIDE1LCAyLCB3YWNvbV9pbnR1b3NfaXJxIH0sCisgCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHdhY29tX2lkc1tdID0geworCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDAwKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDEwKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDExKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDEyKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDEzKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDE0KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDIwKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDIxKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDIyKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDIzKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDI0KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDMwKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDMxKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDMyKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDMzKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDM0KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDM1KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDQxKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDQyKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDQzKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDQ0KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDQ1KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDYwKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDAzKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweEIwKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweEIxKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweEIyKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDQ3KSB9LAorCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHdhY29tX2lkcyk7CisKK3N0YXRpYyBpbnQgd2Fjb21fb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IHdhY29tICp3YWNvbSA9IGRldi0+cHJpdmF0ZTsKKworCWlmICh3YWNvbS0+b3BlbisrKQorCQlyZXR1cm4gMDsKKworCXdhY29tLT5pcnEtPmRldiA9IHdhY29tLT51c2JkZXY7CisJaWYgKHVzYl9zdWJtaXRfdXJiKHdhY29tLT5pcnEsIEdGUF9LRVJORUwpKSB7CisJCXdhY29tLT5vcGVuLS07CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3YWNvbV9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IHdhY29tICp3YWNvbSA9IGRldi0+cHJpdmF0ZTsKKworCWlmICghLS13YWNvbS0+b3BlbikKKwkJdXNiX2tpbGxfdXJiKHdhY29tLT5pcnEpOworfQorCitzdGF0aWMgaW50IHdhY29tX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwljaGFyIHJlcF9kYXRhWzJdID0gezB4MDIsIDB4MDJ9OworCXN0cnVjdCB3YWNvbSAqd2Fjb207CisJY2hhciBwYXRoWzY0XTsKKworCWlmICghKHdhY29tID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdhY29tKSwgR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQod2Fjb20sIDAsIHNpemVvZihzdHJ1Y3Qgd2Fjb20pKTsKKworCXdhY29tLT5kYXRhID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIDEwLCBHRlBfS0VSTkVMLCAmd2Fjb20tPmRhdGFfZG1hKTsKKwlpZiAoIXdhY29tLT5kYXRhKSB7CisJCWtmcmVlKHdhY29tKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJd2Fjb20tPmlycSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3YWNvbS0+aXJxKSB7CisJCXVzYl9idWZmZXJfZnJlZShkZXYsIDEwLCB3YWNvbS0+ZGF0YSwgd2Fjb20tPmRhdGFfZG1hKTsKKwkJa2ZyZWUod2Fjb20pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl3YWNvbS0+ZmVhdHVyZXMgPSB3YWNvbV9mZWF0dXJlcyArIChpZCAtIHdhY29tX2lkcyk7CisKKwl3YWNvbS0+ZGV2LmV2Yml0WzBdIHw9IEJJVChFVl9LRVkpIHwgQklUKEVWX0FCUyk7CisJd2Fjb20tPmRldi5hYnNiaXRbMF0gfD0gQklUKEFCU19YKSB8IEJJVChBQlNfWSkgfCBCSVQoQUJTX1BSRVNTVVJFKTsKKwl3YWNvbS0+ZGV2LmtleWJpdFtMT05HKEJUTl9ESUdJKV0gfD0gQklUKEJUTl9UT09MX1BFTikgfCBCSVQoQlROX1RPVUNIKSB8IEJJVChCVE5fU1RZTFVTKTsKKworCXN3aXRjaCAod2Fjb20tPmZlYXR1cmVzLT50eXBlKSB7CisJCWNhc2UgMToKKwkJCXdhY29tLT5kZXYuZXZiaXRbMF0gfD0gQklUKEVWX1JFTCk7CisJCQl3YWNvbS0+ZGV2LnJlbGJpdFswXSB8PSBCSVQoUkVMX1dIRUVMKTsKKwkJCXdhY29tLT5kZXYuYWJzYml0WzBdIHw9IEJJVChBQlNfRElTVEFOQ0UpOworCQkJd2Fjb20tPmRldi5rZXliaXRbTE9ORyhCVE5fTEVGVCldIHw9IEJJVChCVE5fTEVGVCkgfCBCSVQoQlROX1JJR0hUKSB8IEJJVChCVE5fTUlERExFKTsKKyAJCQl3YWNvbS0+ZGV2LmtleWJpdFtMT05HKEJUTl9ESUdJKV0gfD0gQklUKEJUTl9UT09MX1JVQkJFUikgfCBCSVQoQlROX1RPT0xfTU9VU0UpIHwgQklUKEJUTl9TVFlMVVMyKTsKKwkJCWJyZWFrOworCisJCWNhc2UgNDogLyogbmV3IGZ1bmN0aW9ucyBmb3IgSW50dW9zMyAqLworCQkJd2Fjb20tPmRldi5rZXliaXRbTE9ORyhCVE5fRElHSSldIHw9IEJJVChCVE5fVE9PTF9GSU5HRVIpOworCQkJd2Fjb20tPmRldi5rZXliaXRbTE9ORyhCVE5fTEVGVCldIHw9IEJJVChCVE5fMCkgfCBCSVQoQlROXzEpIHwgQklUKEJUTl8yKSB8IEJJVChCVE5fMykgfCBCSVQoQlROXzQpIHwgQklUKEJUTl81KSB8IEJJVChCVE5fNikgfCBCSVQoQlROXzcpOworCQkJd2Fjb20tPmRldi5hYnNiaXRbMF0gfD0gQklUKEFCU19SWCkgfCBCSVQoQUJTX1JZKTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCisJCWNhc2UgMjoKKwkJCXdhY29tLT5kZXYuZXZiaXRbMF0gfD0gQklUKEVWX01TQykgfCBCSVQoRVZfUkVMKTsKKwkJCXdhY29tLT5kZXYubXNjYml0WzBdIHw9IEJJVChNU0NfU0VSSUFMKTsKKwkJCXdhY29tLT5kZXYucmVsYml0WzBdIHw9IEJJVChSRUxfV0hFRUwpOworCQkJd2Fjb20tPmRldi5rZXliaXRbTE9ORyhCVE5fTEVGVCldIHw9IEJJVChCVE5fTEVGVCkgfCBCSVQoQlROX1JJR0hUKSB8IEJJVChCVE5fTUlERExFKSB8IEJJVChCVE5fU0lERSkgfCBCSVQoQlROX0VYVFJBKTsKKyAJCQl3YWNvbS0+ZGV2LmtleWJpdFtMT05HKEJUTl9ESUdJKV0gfD0gQklUKEJUTl9UT09MX1JVQkJFUikgfCBCSVQoQlROX1RPT0xfTU9VU0UpCXwgQklUKEJUTl9UT09MX0JSVVNIKQorCQkJCQkJCSAgfCBCSVQoQlROX1RPT0xfUEVOQ0lMKSB8IEJJVChCVE5fVE9PTF9BSVJCUlVTSCkgfCBCSVQoQlROX1RPT0xfTEVOUykgfCBCSVQoQlROX1NUWUxVUzIpOworCQkJd2Fjb20tPmRldi5hYnNiaXRbMF0gfD0gQklUKEFCU19ESVNUQU5DRSkgfCBCSVQoQUJTX1dIRUVMKSB8IEJJVChBQlNfVElMVF9YKSB8IEJJVChBQlNfVElMVF9ZKSB8IEJJVChBQlNfUlopIHwgQklUKEFCU19USFJPVFRMRSk7CisJCQlicmVhazsKKworCQljYXNlIDM6CisgCQkJd2Fjb20tPmRldi5rZXliaXRbTE9ORyhCVE5fRElHSSldIHw9IEJJVChCVE5fU1RZTFVTMikgfCBCSVQoQlROX1RPT0xfUlVCQkVSKTsKKwkJCWJyZWFrOworCX0KKworCXdhY29tLT5kZXYuYWJzbWF4W0FCU19YXSA9IHdhY29tLT5mZWF0dXJlcy0+eF9tYXg7CisJd2Fjb20tPmRldi5hYnNtYXhbQUJTX1ldID0gd2Fjb20tPmZlYXR1cmVzLT55X21heDsKKwl3YWNvbS0+ZGV2LmFic21heFtBQlNfUFJFU1NVUkVdID0gd2Fjb20tPmZlYXR1cmVzLT5wcmVzc3VyZV9tYXg7CisJd2Fjb20tPmRldi5hYnNtYXhbQUJTX0RJU1RBTkNFXSA9IHdhY29tLT5mZWF0dXJlcy0+ZGlzdGFuY2VfbWF4OworCXdhY29tLT5kZXYuYWJzbWF4W0FCU19USUxUX1hdID0gMTI3OworCXdhY29tLT5kZXYuYWJzbWF4W0FCU19USUxUX1ldID0gMTI3OworCXdhY29tLT5kZXYuYWJzbWF4W0FCU19XSEVFTF0gPSAxMDIzOworCisJd2Fjb20tPmRldi5hYnNtYXhbQUJTX1JYXSA9IDQwOTc7CisJd2Fjb20tPmRldi5hYnNtYXhbQUJTX1JZXSA9IDQwOTc7CisJd2Fjb20tPmRldi5hYnNtaW5bQUJTX1JaXSA9IC05MDA7CisJd2Fjb20tPmRldi5hYnNtYXhbQUJTX1JaXSA9IDg5OTsKKwl3YWNvbS0+ZGV2LmFic21pbltBQlNfVEhST1RUTEVdID0gLTEwMjM7CisJd2Fjb20tPmRldi5hYnNtYXhbQUJTX1RIUk9UVExFXSA9IDEwMjM7CisKKwl3YWNvbS0+ZGV2LmFic2Z1enpbQUJTX1hdID0gNDsKKwl3YWNvbS0+ZGV2LmFic2Z1enpbQUJTX1ldID0gNDsKKworCXdhY29tLT5kZXYucHJpdmF0ZSA9IHdhY29tOworCXdhY29tLT5kZXYub3BlbiA9IHdhY29tX29wZW47CisJd2Fjb20tPmRldi5jbG9zZSA9IHdhY29tX2Nsb3NlOworCisJdXNiX21ha2VfcGF0aChkZXYsIHBhdGgsIDY0KTsKKwlzcHJpbnRmKHdhY29tLT5waHlzLCAiJXMvaW5wdXQwIiwgcGF0aCk7CisKKwl3YWNvbS0+ZGV2Lm5hbWUgPSB3YWNvbS0+ZmVhdHVyZXMtPm5hbWU7CisJd2Fjb20tPmRldi5waHlzID0gd2Fjb20tPnBoeXM7CisJd2Fjb20tPmRldi5pZC5idXN0eXBlID0gQlVTX1VTQjsKKwl3YWNvbS0+ZGV2LmlkLnZlbmRvciA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisJd2Fjb20tPmRldi5pZC5wcm9kdWN0ID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJd2Fjb20tPmRldi5pZC52ZXJzaW9uID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisJd2Fjb20tPmRldi5kZXYgPSAmaW50Zi0+ZGV2OworCXdhY29tLT51c2JkZXYgPSBkZXY7CisKKwllbmRwb2ludCA9ICZpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnRbMF0uZGVzYzsKKworCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnBrdGxlbiA+IDEwKQorCQlCVUcoKTsKKworCXVzYl9maWxsX2ludF91cmIod2Fjb20tPmlycSwgZGV2LAorCQkJIHVzYl9yY3ZpbnRwaXBlKGRldiwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJIHdhY29tLT5kYXRhLCB3YWNvbS0+ZmVhdHVyZXMtPnBrdGxlbiwKKwkJCSB3YWNvbS0+ZmVhdHVyZXMtPmlycSwgd2Fjb20sIGVuZHBvaW50LT5iSW50ZXJ2YWwpOworCXdhY29tLT5pcnEtPnRyYW5zZmVyX2RtYSA9IHdhY29tLT5kYXRhX2RtYTsKKwl3YWNvbS0+aXJxLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCWlucHV0X3JlZ2lzdGVyX2RldmljZSgmd2Fjb20tPmRldik7CisKKwkvKiBhc2sgdGhlIHRhYmxldCB0byByZXBvcnQgdGFibGV0IGRhdGEgKi8KKwl1c2Jfc2V0X3JlcG9ydChpbnRmLCAzLCAyLCByZXBfZGF0YSwgMik7CisJLyogcmVwZWF0IG9uY2UgKG5vdCBzdXJlIHdoeSB0aGUgZmlyc3QgY2FsbCBvZnRlbiBmYWlscykgKi8KKwl1c2Jfc2V0X3JlcG9ydChpbnRmLCAzLCAyLCByZXBfZGF0YSwgMik7CisKKwlwcmludGsoS0VSTl9JTkZPICJpbnB1dDogJXMgb24gJXNcbiIsIHdhY29tLT5mZWF0dXJlcy0+bmFtZSwgcGF0aCk7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHdhY29tKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3YWNvbV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB3YWNvbSAqd2Fjb20gPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJaWYgKHdhY29tKSB7CisJCXVzYl9raWxsX3VyYih3YWNvbS0+aXJxKTsKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoJndhY29tLT5kZXYpOworCQl1c2JfZnJlZV91cmIod2Fjb20tPmlycSk7CisJCXVzYl9idWZmZXJfZnJlZShpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCAxMCwgd2Fjb20tPmRhdGEsIHdhY29tLT5kYXRhX2RtYSk7CisJCWtmcmVlKHdhY29tKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB3YWNvbV9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJIndhY29tIiwKKwkucHJvYmUgPQl3YWNvbV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXdhY29tX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0Jd2Fjb21faWRzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd2Fjb21faW5pdCh2b2lkKQoreworCWludCByZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJndhY29tX2RyaXZlcik7CisJaWYgKHJlc3VsdCA9PSAwKQorCQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdhY29tX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmd2Fjb21fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQod2Fjb21faW5pdCk7Cittb2R1bGVfZXhpdCh3YWNvbV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L3hwYWQuYyBiL2RyaXZlcnMvdXNiL2lucHV0L3hwYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjVlZGIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQveHBhZC5jCkBAIC0wLDAgKzEsMzYyIEBACisvKgorICogWC1Cb3ggZ2FtZXBhZCAtIHYwLjAuNQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMiBNYXJrbyBGcmllZGVtYW5uIDxtZnJAYm14LWNoZW1uaXR6LmRlPgorICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbjoKKyAqICAtIGluZm9ybWF0aW9uIGZyb20gICAgIGh0dHA6Ly9ldWMuanAvcGVyaXBocy94Ym94LWNvbnRyb2xsZXIuamEuaHRtbAorICogIC0gdGhlIGlGb3JjZSBkcml2ZXIgICAgZHJpdmVycy9jaGFyL2pveXN0aWNrL2lmb3JjZS5jCisgKiAgLSB0aGUgc2tlbGV0b24tZHJpdmVyICBkcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYworICoKKyAqIFRoYW5rcyB0bzoKKyAqICAtIElUTyBUYWtheXVraSBmb3IgcHJvdmlkaW5nIGVzc2VudGlhbCB4cGFkIGluZm9ybWF0aW9uIG9uIGhpcyB3ZWJzaXRlCisgKiAgLSBWb2p0ZWNoIFBhdmxpayAgICAgLSBpZm9yY2UgZHJpdmVyIC8gaW5wdXQgc3Vic3lzdGVtCisgKiAgLSBHcmVnIEtyb2FoLUhhcnRtYW4gLSB1c2Itc2tlbGV0b24gZHJpdmVyCisgKgorICogVE9ETzoKKyAqICAtIGZpbmUgdHVuZSBheGVzCisgKiAgLSBmaXggImFuYWxvZyIgYnV0dG9ucyAocmVwb3J0ZWQgYXMgZGlnaXRhbCBub3cpCisgKiAgLSBnZXQgcnVtYmxlIHdvcmtpbmcKKyAqCisgKiBIaXN0b3J5OgorICoKKyAqIDIwMDItMDYtMjcgLSAwLjAuMSA6IGZpcnN0IHZlcnNpb24sIGp1c3Qgc2FpZCAiWEJPWCBISUQgY29udHJvbGxlciIKKyAqCisgKiAyMDAyLTA3LTAyIC0gMC4wLjIgOiBiYXNpYyB3b3JraW5nIHZlcnNpb24KKyAqICAtIGFsbCBheGVzIGFuZCA5IG9mIHRoZSAxMCBidXR0b25zIHdvcmsgKGdlcm1hbiBJbnRlckFjdCBkZXZpY2UpCisgKiAgLSB0aGUgYmxhY2sgYnV0dG9uIGRvZXMgbm90IHdvcmsKKyAqCisgKiAyMDAyLTA3LTE0IC0gMC4wLjMgOiByZXdvcmsgYnkgVm9qdGVjaCBQYXZsaWsKKyAqICAtIGluZGVudGF0aW9uIGZpeGVzCisgKiAgLSB1c2IgKyBpbnB1dCBpbml0IHNlcXVlbmNlIGZpeGVzCisgKgorICogMjAwMi0wNy0xNiAtIDAuMC40IDogbWlub3IgY2hhbmdlcywgbWVyZ2Ugd2l0aCBWb2p0ZWNoJ3MgdjAuMC4zCisgKiAgLSB2ZXJpZmllZCB0aGUgbGFjayBvZiBISUQgYW5kIHJlcG9ydCBkZXNjcmlwdG9ycworICogIC0gdmVyaWZpZWQgdGhhdCBBTEwgYnV0dG9ucyBXT1JLCisgKiAgLSBmaXhlZCBkLXBhZCB0byBheGVzIG1hcHBpbmcKKyAqCisgKiAyMDAyLTA3LTE3IC0gMC4wLjUgOiBzaW1wbGlmaWVkIGQtcGFkIGhhbmRsaW5nCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC4wLjUiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIk1hcmtvIEZyaWVkZW1hbm4gPG1mckBibXgtY2hlbW5pdHouZGU+IgorI2RlZmluZSBEUklWRVJfREVTQyAiWC1Cb3ggcGFkIGRyaXZlciIKKworI2RlZmluZSBYUEFEX1BLVF9MRU4gMzIKKworc3RhdGljIHN0cnVjdCB4cGFkX2RldmljZSB7CisJdTE2IGlkVmVuZG9yOworCXUxNiBpZFByb2R1Y3Q7CisJY2hhciAqbmFtZTsKK30geHBhZF9kZXZpY2VbXSA9IHsKKwl7IDB4MDQ1ZSwgMHgwMjAyLCAiTWljcm9zb2Z0IFgtQm94IHBhZCAoVVMpIiB9LAorCXsgMHgwNDVlLCAweDAyODUsICJNaWNyb3NvZnQgWC1Cb3ggcGFkIChKYXBhbikiIH0sCisJeyAweDA1ZmQsIDB4MTA3YSwgIkludGVyQWN0ICdQb3dlclBhZCBQcm8nIFgtQm94IHBhZCAoR2VybWFueSkiIH0sCisJeyAweDAwMDAsIDB4MDAwMCwgIlgtQm94IHBhZCIgfQorfTsKKworc3RhdGljIHNpZ25lZCBzaG9ydCB4cGFkX2J0bltdID0geworCUJUTl9BLCBCVE5fQiwgQlROX0MsIEJUTl9YLCBCVE5fWSwgQlROX1osCS8qICJhbmFsb2ciIGJ1dHRvbnMgKi8KKwlCVE5fU1RBUlQsIEJUTl9CQUNLLCBCVE5fVEhVTUJMLCBCVE5fVEhVTUJSLAkvKiBzdGFydC9iYWNrL3N0aWNrcyAqLworCS0xCQkJCQkJLyogdGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK3N0YXRpYyBzaWduZWQgc2hvcnQgeHBhZF9hYnNbXSA9IHsKKwlBQlNfWCwgQUJTX1ksCQkvKiBsZWZ0IHN0aWNrICovCisJQUJTX1JYLCBBQlNfUlksCQkvKiByaWdodCBzdGljayAqLworCUFCU19aLCBBQlNfUlosCQkvKiB0cmlnZ2VycyBsZWZ0L3JpZ2h0ICovCisJQUJTX0hBVDBYLCBBQlNfSEFUMFksCS8qIGRpZ2l0YWwgcGFkICovCisJLTEJCQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHhwYWRfdGFibGUgW10gPSB7CisJeyBVU0JfSU5URVJGQUNFX0lORk8oJ1gnLCAnQicsIDApIH0sCS8qIFgtQm94IFVTQi1JRiBub3QgYXBwcm92ZWQgY2xhc3MgKi8KKwl7IH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgeHBhZF90YWJsZSk7CisKK3N0cnVjdCB1c2JfeHBhZCB7CisJc3RydWN0IGlucHV0X2RldiBkZXY7CQkJLyogaW5wdXQgZGV2aWNlIGludGVyZmFjZSAqLworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwkJLyogdXNiIGRldmljZSAqLworCQorCXN0cnVjdCB1cmIgKmlycV9pbjsJCQkvKiB1cmIgZm9yIGludGVycnVwdCBpbiByZXBvcnQgKi8KKwl1bnNpZ25lZCBjaGFyICppZGF0YTsJCQkvKiBpbnB1dCBkYXRhICovCisJZG1hX2FkZHJfdCBpZGF0YV9kbWE7CisJCisJY2hhciBwaHlzWzY1XTsJCQkJLyogcGh5c2ljYWwgZGV2aWNlIHBhdGggKi8KKwlpbnQgb3Blbl9jb3VudDsJCQkJLyogcmVmZXJlbmNlIGNvdW50ICovCit9OworCisvKgorICoJeHBhZF9wcm9jZXNzX3BhY2tldAorICoKKyAqCUNvbXBsZXRlcyBhIHJlcXVlc3QgYnkgY29udmVydGluZyB0aGUgZGF0YSBpbnRvIGV2ZW50cyBmb3IgdGhlCisgKglpbnB1dCBzdWJzeXN0ZW0uCisgKgorICoJVGhlIHVzZWQgcmVwb3J0IGRlc2NyaXB0b3Igd2FzIHRha2VuIGZyb20gSVRPIFRha2F5dWtpcyB3ZWJzaXRlOgorICoJIGh0dHA6Ly9ldWMuanAvcGVyaXBocy94Ym94LWNvbnRyb2xsZXIuamEuaHRtbAorICovCisKK3N0YXRpYyB2b2lkIHhwYWRfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHVzYl94cGFkICp4cGFkLCB1MTYgY21kLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSAmeHBhZC0+ZGV2OworCisJaW5wdXRfcmVncyhkZXYsIHJlZ3MpOworCQorCS8qIGxlZnQgc3RpY2sgKi8KKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsIChfX3MxNikgKCgoX19zMTYpZGF0YVsxM10gPDwgOCkgfCBkYXRhWzEyXSkpOworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwgKF9fczE2KSAoKChfX3MxNilkYXRhWzE1XSA8PCA4KSB8IGRhdGFbMTRdKSk7CisJCisJLyogcmlnaHQgc3RpY2sgKi8KKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1JYLCAoX19zMTYpICgoKF9fczE2KWRhdGFbMTddIDw8IDgpIHwgZGF0YVsxNl0pKTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1JZLCAoX19zMTYpICgoKF9fczE2KWRhdGFbMTldIDw8IDgpIHwgZGF0YVsxOF0pKTsKKwkKKwkvKiB0cmlnZ2VycyBsZWZ0L3JpZ2h0ICovCisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19aLCBkYXRhWzEwXSk7CisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWiwgZGF0YVsxMV0pOworCQorCS8qIGRpZ2l0YWwgcGFkICovCisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19IQVQwWCwgISEoZGF0YVsyXSAmIDB4MDgpIC0gISEoZGF0YVsyXSAmIDB4MDQpKTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX0hBVDBZLCAhIShkYXRhWzJdICYgMHgwMikgLSAhIShkYXRhWzJdICYgMHgwMSkpOworCQorCS8qIHN0YXJ0L2JhY2sgYnV0dG9ucyBhbmQgc3RpY2sgcHJlc3MgbGVmdC9yaWdodCAqLworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU1RBUlQsIChkYXRhWzJdICYgMHgxMCkgPj4gNCk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9CQUNLLCAoZGF0YVsyXSAmIDB4MjApID4+IDUpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVEhVTUJMLCAoZGF0YVsyXSAmIDB4NDApID4+IDYpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVEhVTUJSLCBkYXRhWzJdID4+IDcpOworCQorCS8qICJhbmFsb2ciIGJ1dHRvbnMgQSwgQiwgWCwgWSAqLworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fQSwgZGF0YVs0XSk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9CLCBkYXRhWzVdKTsKKwlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1gsIGRhdGFbNl0pOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fWSwgZGF0YVs3XSk7CisJCisJLyogImFuYWxvZyIgYnV0dG9ucyBibGFjaywgd2hpdGUgKi8KKwlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0MsIGRhdGFbOF0pOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fWiwgZGF0YVs5XSk7CisKKwlpbnB1dF9zeW5jKGRldik7Cit9CisKK3N0YXRpYyB2b2lkIHhwYWRfaXJxX2luKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl94cGFkICp4cGFkID0gdXJiLT5jb250ZXh0OworCWludCByZXR2YWw7CisJCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisJCisJeHBhZF9wcm9jZXNzX3BhY2tldCh4cGFkLCAwLCB4cGFkLT5pZGF0YSwgcmVncyk7CisKK2V4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKK30KKworc3RhdGljIGludCB4cGFkX29wZW4gKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQgPSBkZXYtPnByaXZhdGU7CisJCisJaWYgKHhwYWQtPm9wZW5fY291bnQrKykKKwkJcmV0dXJuIDA7CisJCisJeHBhZC0+aXJxX2luLT5kZXYgPSB4cGFkLT51ZGV2OworCWlmICh1c2Jfc3VibWl0X3VyYih4cGFkLT5pcnFfaW4sIEdGUF9LRVJORUwpKSB7CisJCXhwYWQtPm9wZW5fY291bnQtLTsKKwkJcmV0dXJuIC1FSU87CisJfQorCQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB4cGFkX2Nsb3NlIChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IHVzYl94cGFkICp4cGFkID0gZGV2LT5wcml2YXRlOworCQorCWlmICghLS14cGFkLT5vcGVuX2NvdW50KQorCQl1c2Jfa2lsbF91cmIoeHBhZC0+aXJxX2luKTsKK30KKworc3RhdGljIGludCB4cGFkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpbnRmKTsKKwlzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQgPSBOVUxMOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBfaXJxX2luOworCWNoYXIgcGF0aFs2NF07CisJaW50IGk7CisJCisJZm9yIChpID0gMDsgeHBhZF9kZXZpY2VbaV0uaWRWZW5kb3I7IGkrKykgeworCQlpZiAoKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IHhwYWRfZGV2aWNlW2ldLmlkVmVuZG9yKSAmJgorCQkgICAgKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSB4cGFkX2RldmljZVtpXS5pZFByb2R1Y3QpKQorCQkJYnJlYWs7CisJfQorCQorCWlmICgoeHBhZCA9IGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgdXNiX3hwYWQpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgeworCQllcnIoImNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG5ldyBwYWQiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldCh4cGFkLCAwLCBzaXplb2Yoc3RydWN0IHVzYl94cGFkKSk7CisJCisJeHBhZC0+aWRhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsIFhQQURfUEtUX0xFTiwKKwkJCQkgICAgICAgU0xBQl9BVE9NSUMsICZ4cGFkLT5pZGF0YV9kbWEpOworCWlmICgheHBhZC0+aWRhdGEpIHsKKwkJa2ZyZWUoeHBhZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXhwYWQtPmlycV9pbiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisgICAgICAgIGlmICgheHBhZC0+aXJxX2luKSB7CisJCWVycigiY2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgbmV3IHBhZCBpcnEgdXJiIik7CisJCXVzYl9idWZmZXJfZnJlZSh1ZGV2LCBYUEFEX1BLVF9MRU4sIHhwYWQtPmlkYXRhLCB4cGFkLT5pZGF0YV9kbWEpOworICAgICAgICAgICAgICAgIGtmcmVlKHhwYWQpOworCQlyZXR1cm4gLUVOT01FTTsKKyAgICAgICAgfQorCQorCWVwX2lycV9pbiA9ICZpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnRbMF0uZGVzYzsKKwkKKwl1c2JfZmlsbF9pbnRfdXJiKHhwYWQtPmlycV9pbiwgdWRldiwKKwkJCSB1c2JfcmN2aW50cGlwZSh1ZGV2LCBlcF9pcnFfaW4tPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJIHhwYWQtPmlkYXRhLCBYUEFEX1BLVF9MRU4sIHhwYWRfaXJxX2luLAorCQkJIHhwYWQsIGVwX2lycV9pbi0+YkludGVydmFsKTsKKwl4cGFkLT5pcnFfaW4tPnRyYW5zZmVyX2RtYSA9IHhwYWQtPmlkYXRhX2RtYTsKKwl4cGFkLT5pcnFfaW4tPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCQorCXhwYWQtPnVkZXYgPSB1ZGV2OworCQorCXhwYWQtPmRldi5pZC5idXN0eXBlID0gQlVTX1VTQjsKKwl4cGFkLT5kZXYuaWQudmVuZG9yID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisJeHBhZC0+ZGV2LmlkLnByb2R1Y3QgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJeHBhZC0+ZGV2LmlkLnZlcnNpb24gPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisJeHBhZC0+ZGV2LmRldiA9ICZpbnRmLT5kZXY7CisJeHBhZC0+ZGV2LnByaXZhdGUgPSB4cGFkOworCXhwYWQtPmRldi5uYW1lID0geHBhZF9kZXZpY2VbaV0ubmFtZTsKKwl4cGFkLT5kZXYucGh5cyA9IHhwYWQtPnBoeXM7CisJeHBhZC0+ZGV2Lm9wZW4gPSB4cGFkX29wZW47CisJeHBhZC0+ZGV2LmNsb3NlID0geHBhZF9jbG9zZTsKKwkKKwl1c2JfbWFrZV9wYXRoKHVkZXYsIHBhdGgsIDY0KTsKKwlzbnByaW50Zih4cGFkLT5waHlzLCA2NCwgICIlcy9pbnB1dDAiLCBwYXRoKTsKKwkKKwl4cGFkLT5kZXYuZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOworCQorCWZvciAoaSA9IDA7IHhwYWRfYnRuW2ldID49IDA7IGkrKykKKwkJc2V0X2JpdCh4cGFkX2J0bltpXSwgeHBhZC0+ZGV2LmtleWJpdCk7CisJCisJZm9yIChpID0gMDsgeHBhZF9hYnNbaV0gPj0gMDsgaSsrKSB7CisJCQorCQlzaWduZWQgc2hvcnQgdCA9IHhwYWRfYWJzW2ldOworCQkKKwkJc2V0X2JpdCh0LCB4cGFkLT5kZXYuYWJzYml0KTsKKwkJCisJCXN3aXRjaCAodCkgeworCQkJY2FzZSBBQlNfWDoKKwkJCWNhc2UgQUJTX1k6CisJCQljYXNlIEFCU19SWDoKKwkJCWNhc2UgQUJTX1JZOgkvKiB0aGUgdHdvIHN0aWNrcyAqLworCQkJCXhwYWQtPmRldi5hYnNtYXhbdF0gPSAgMzI3Njc7CisJCQkJeHBhZC0+ZGV2LmFic21pblt0XSA9IC0zMjc2ODsKKwkJCQl4cGFkLT5kZXYuYWJzZmxhdFt0XSA9IDEyODsKKwkJCQl4cGFkLT5kZXYuYWJzZnV6elt0XSA9IDE2OworCQkJCWJyZWFrOworCQkJY2FzZSBBQlNfWjoKKwkJCWNhc2UgQUJTX1JaOgkvKiB0aGUgdHJpZ2dlcnMgKi8KKwkJCQl4cGFkLT5kZXYuYWJzbWF4W3RdID0gMjU1OworCQkJCXhwYWQtPmRldi5hYnNtaW5bdF0gPSAwOworCQkJCWJyZWFrOworCQkJY2FzZSBBQlNfSEFUMFg6CisJCQljYXNlIEFCU19IQVQwWToJLyogdGhlIGQtcGFkICovCisJCQkJeHBhZC0+ZGV2LmFic21heFt0XSA9ICAxOworCQkJCXhwYWQtPmRldi5hYnNtaW5bdF0gPSAtMTsKKwkJCQlicmVhazsKKwkJfQorCX0KKwkKKwlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoJnhwYWQtPmRldik7CisJCisJcHJpbnRrKEtFUk5fSU5GTyAiaW5wdXQ6ICVzIG9uICVzIiwgeHBhZC0+ZGV2Lm5hbWUsIHBhdGgpOworCQorCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgeHBhZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHhwYWRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKwkKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCWlmICh4cGFkKSB7CisJCXVzYl9raWxsX3VyYih4cGFkLT5pcnFfaW4pOworCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSgmeHBhZC0+ZGV2KTsKKwkJdXNiX2ZyZWVfdXJiKHhwYWQtPmlycV9pbik7CisJCXVzYl9idWZmZXJfZnJlZShpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCBYUEFEX1BLVF9MRU4sIHhwYWQtPmlkYXRhLCB4cGFkLT5pZGF0YV9kbWEpOworCQlrZnJlZSh4cGFkKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB4cGFkX2RyaXZlciA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCT0gInhwYWQiLAorCS5wcm9iZQkJPSB4cGFkX3Byb2JlLAorCS5kaXNjb25uZWN0CT0geHBhZF9kaXNjb25uZWN0LAorCS5pZF90YWJsZQk9IHhwYWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1c2JfeHBhZF9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdCA9IHVzYl9yZWdpc3RlcigmeHBhZF9kcml2ZXIpOworCWlmIChyZXN1bHQgPT0gMCkKKwkJaW5mbyhEUklWRVJfREVTQyAiOiIgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2JfeHBhZF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnhwYWRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNiX3hwYWRfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2JfeHBhZF9leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9LY29uZmlnIGIvZHJpdmVycy91c2IvbWVkaWEvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTIzMmVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvS2NvbmZpZwpAQCAtMCwwICsxLDIxMyBAQAorIworIyBVU0IgTXVsdGltZWRpYSBkZXZpY2UgY29uZmlndXJhdGlvbgorIworY29tbWVudCAiVVNCIE11bHRpbWVkaWEgZGV2aWNlcyIKKwlkZXBlbmRzIG9uIFVTQgorCitjb25maWcgVVNCX0RBQlVTQgorCXRyaXN0YXRlICJEQUJVU0IgZHJpdmVyIgorCWRlcGVuZHMgb24gVVNCCisJLS0taGVscC0tLQorCSAgQSBEaWdpdGFsIEF1ZGlvIEJyb2FkY2FzdGluZyAoREFCKSBSZWNlaXZlciBmb3IgVVNCIGFuZCBMaW51eAorCSAgYnJvdWdodCB0byB5b3UgYnkgdGhlIERBQi1UZWFtCisJICA8aHR0cDovL3d3d2JvZGUuY3MudHVtLmVkdS9QYXIvYXJjaC9kYWIvPi4gIFRoaXMgZHJpdmVyIGNhbiBiZSB0YWtlbgorCSAgYXMgYW4gZXhhbXBsZSBmb3IgVVJCLWJhc2VkIGJ1bGssIGNvbnRyb2wsIGFuZCBpc29jaHJvbm91cworCSAgdHJhbnNhY3Rpb25zLiBVUkIncyBhcmUgZXhwbGFpbmVkIGluCisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9VUkIudHh0Pi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZGFidXNiLgorCitjb21tZW50ICJWaWRlbzRMaW51eCBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE11bHRpbWVkaWEgZGV2aWNlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWPW4KKworY29uZmlnIFVTQl9WSUNBTQorCXRyaXN0YXRlICJVU0IgM2NvbSBIb21lQ29ubmVjdCAoYWthIHZpY2FtKSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFViAmJiBFWFBFUklNRU5UQUwKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIDNjb20gaG9tZWNvbm5lY3QgY2FtZXJhICh2aWNhbSkuCisKKwkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KKwkgICJWaWRlbyBGb3IgTGludXgiICh1bmRlciBNdWx0aW1lZGlhIERldmljZXMpIHRvIHVzZSB0aGlzIGRyaXZlci4KKwkgIEluZm9ybWF0aW9uIG9uIHRoaXMgQVBJIGFuZCBwb2ludGVycyB0byAidjRsIiBwcm9ncmFtcyBtYXkgYmUgZm91bmQKKwkgIGF0IDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWw+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2aWNhbS4KKworY29uZmlnIFVTQl9EU0JSCisJdHJpc3RhdGUgIkQtTGluayBVU0IgRk0gcmFkaW8gc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYgJiYgRVhQRVJJTUVOVEFMCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHRoaXMgdHlwZSBvZiByYWRpbyB0byB5b3VyCisJICBjb21wdXRlcidzIFVTQiBwb3J0LiBOb3RlIHRoYXQgdGhlIGF1ZGlvIGlzIG5vdCBkaWdpdGFsLCBhbmQKKwkgIHlvdSBtdXN0IGNvbm5lY3QgdGhlIGxpbmUgb3V0IGNvbm5lY3RvciB0byBhIHNvdW5kIGNhcmQgb3IgYQorCSAgc2V0IG9mIHNwZWFrZXJzLgorCisJICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiAgWW91IG11c3QgZW5hYmxlCisJICAoWSBvciBNIGluIGNvbmZpZykgVmlkZW8gRm9yIExpbnV4ICh1bmRlciBDaGFyYWN0ZXIgRGV2aWNlcykKKwkgIHRvIHVzZSB0aGlzIGRyaXZlci4gIEluZm9ybWF0aW9uIG9uIHRoaXMgQVBJIGFuZCBwb2ludGVycyB0bworCSAgInY0bCIgcHJvZ3JhbXMgbWF5IGJlIGZvdW5kIGF0CisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sPi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZHNicjEwMC4KKworY29uZmlnIFVTQl9JQk1DQU0KKwl0cmlzdGF0ZSAiVVNCIElCTSAoWGlybGluaykgQy1pdCBDYW1lcmEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBJQk0gIkMtSXQiIGNhbWVyYSwgYWxzbyBrbm93biBhcworCSAgIlhpcmxpbmsgUEMgQ2FtZXJhIiB0byB5b3VyIGNvbXB1dGVyJ3MgVVNCIHBvcnQuICBGb3IgbW9yZQorCSAgaW5mb3JtYXRpb24sIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvaWJtY2FtLnR4dD4uCisKKwkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuICBZb3UgbXVzdCBlbmFibGUKKwkgIChZIG9yIE0gaW4gY29uZmlnKSBWaWRlbyBGb3IgTGludXggKHVuZGVyIENoYXJhY3RlciBEZXZpY2VzKQorCSAgdG8gdXNlIHRoaXMgZHJpdmVyLiAgSW5mb3JtYXRpb24gb24gdGhpcyBBUEkgYW5kIHBvaW50ZXJzIHRvCisJICAidjRsIiBwcm9ncmFtcyBtYXkgYmUgZm91bmQgYXQKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWw+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpYm1jYW0uCisKKwkgIFRoaXMgY2FtZXJhIGhhcyBzZXZlcmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aGljaAorCSAgY2FuIGJlIHNwZWNpZmllZCB3aGVuIHlvdSBsb2FkIHRoZSBtb2R1bGUuIFJlYWQKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL2libWNhbS50eHQ+IHRvIGxlYXJuIG1vcmUuCisKK2NvbmZpZyBVU0JfS09OSUNBV0MKKwl0cmlzdGF0ZSAiVVNCIEtvbmljYSBXZWJjYW0gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHdlYmNhbXMgYmFzZWQgb24gYSBLb25pY2EKKwkgIGNoaXBzZXQuIFRoaXMgaXMga25vd24gdG8gd29yayB3aXRoIHRoZSBJbnRlbCBZQzc2IHdlYmNhbS4KKworCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gIFlvdSBtdXN0IGVuYWJsZQorCSAgKFkgb3IgTSBpbiBjb25maWcpIFZpZGVvIEZvciBMaW51eCAodW5kZXIgQ2hhcmFjdGVyIERldmljZXMpCisJICB0byB1c2UgdGhpcyBkcml2ZXIuICBJbmZvcm1hdGlvbiBvbiB0aGlzIEFQSSBhbmQgcG9pbnRlcnMgdG8KKwkgICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZCBhdAorCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGtvbmljYXdjLgorCitjb25maWcgVVNCX09WNTExCisJdHJpc3RhdGUgIlVTQiBPVjUxMSBDYW1lcmEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdGhpcyB0eXBlIG9mIGNhbWVyYSB0byB5b3VyCisJICBjb21wdXRlcidzIFVTQiBwb3J0LiBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2Ivb3Y1MTEudHh0PiBmb3IgbW9yZQorCSAgaW5mb3JtYXRpb24gYW5kIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGNhbWVyYXMuCisKKwkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KKwkgICJWaWRlbyBGb3IgTGludXgiICh1bmRlciBDaGFyYWN0ZXIgRGV2aWNlcykgdG8gdXNlIHRoaXMgZHJpdmVyLgorCSAgSW5mb3JtYXRpb24gb24gdGhpcyBBUEkgYW5kIHBvaW50ZXJzIHRvICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZAorCSAgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG92NTExLgorCitjb25maWcgVVNCX1NFNDAxCisJdHJpc3RhdGUgIlVTQiBTRTQwMSBDYW1lcmEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdGhpcyB0eXBlIG9mIGNhbWVyYSB0byB5b3VyCisJICBjb21wdXRlcidzIFVTQiBwb3J0LiBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2Ivc2U0MDEudHh0PiBmb3IgbW9yZQorCSAgaW5mb3JtYXRpb24gYW5kIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGNhbWVyYXMuCisKKwkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KKwkgICJWaWRlbyBGb3IgTGludXgiICh1bmRlciBNdWx0aW1lZGlhIERldmljZXMpIHRvIHVzZSB0aGlzIGRyaXZlci4KKwkgIEluZm9ybWF0aW9uIG9uIHRoaXMgQVBJIGFuZCBwb2ludGVycyB0byAidjRsIiBwcm9ncmFtcyBtYXkgYmUgZm91bmQKKwkgIGF0IDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWw+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzZTQwMS4KKworY29uZmlnIFVTQl9TTjlDMTAyCisJdHJpc3RhdGUgIlVTQiBTTjlDMTB4IFBDIENhbWVyYSBDb250cm9sbGVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIFNPTmlYIFNOOUMxMDEsCisJICBTTjlDMTAyIG9yIFNOOUMxMDMgUEMgQ2FtZXJhIENvbnRyb2xsZXJzLgorCisJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2Ivc245YzEwMi50eHQ+IGZvciBtb3JlIGluZm9ybWF0aW9ucy4KKworCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gWW91IG11c3Qgc2F5IFkgb3IgTSB0bworCSAgIlZpZGVvIEZvciBMaW51eCIgdG8gdXNlIHRoaXMgZHJpdmVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzbjljMTAyLgorCitjb25maWcgVVNCX1NUVjY4MAorCXRyaXN0YXRlICJVU0IgU1RWNjgwIChQZW5jYW0pIENhbWVyYSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFVgorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0aGlzIHR5cGUgb2YgY2FtZXJhIHRvIHlvdXIKKwkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFRoaXMgaW5jbHVkZXMgdGhlIFBlbmNhbSBsaW5lIG9mIGNhbWVyYXMuCisJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2Ivc3R2NjgwLnR4dD4gZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGZvcgorCSAgYSBsaXN0IG9mIHN1cHBvcnRlZCBjYW1lcmFzLgorCisJICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiBZb3UgbXVzdCBzYXkgWSBvciBNIHRvCisJICAiVmlkZW8gRm9yIExpbnV4IiAodW5kZXIgTXVsdGltZWRpYSBEZXZpY2VzKSB0byB1c2UgdGhpcyBkcml2ZXIuCisJICBJbmZvcm1hdGlvbiBvbiB0aGlzIEFQSSBhbmQgcG9pbnRlcnMgdG8gInY0bCIgcHJvZ3JhbXMgbWF5IGJlIGZvdW5kCisJICBhdCA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sPi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc3R2NjgwLgorCitjb25maWcgVVNCX1c5OTY4Q0YKKwl0cmlzdGF0ZSAiVVNCIFc5OTZbODddQ0YgSlBFRyBEdWFsIE1vZGUgQ2FtZXJhIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWICYmIEkyQyAmJiBWSURFT19PVkNBTUNISVAKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gT1Y2ODEgb3IKKwkgIFdpbmJvbmQgVzk5NjdDRi9XOTk2OENGIEpQRUcgVVNCIER1YWwgTW9kZSBDYW1lcmEgQ2hpcHMuCisJCisJICBUaGlzIGRyaXZlciBoYXMgYW4gb3B0aW9uYWwgcGx1Z2luLCB3aGljaCBpcyBkaXN0cmlidXRlZCBhcyBhCisJICBzZXBhcmF0ZSBtb2R1bGUgb25seSAocmVsZWFzZWQgdW5kZXIgR1BMKS4gSXQgYWxsb3dzIHRvIHVzZSBoaWdoZXIgCisJICByZXNvbHV0aW9ucyBhbmQgZnJhbWVyYXRlcywgYnV0IGNhbm5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgb2ZmaWNpYWwgCisJICBMaW51eCBrZXJuZWwgZm9yIHBlcmZvcm1hbmNlIHB1cnBvc2VzLgorCisJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2Ivdzk5NjhjZi50eHQ+IGZvciBtb3JlIGluZm9ybWF0aW9ucy4KKworCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IGFuZCB0aGUgSTJDIEFQSXMuIEl0IG5lZWRzIHRoZQorCSAgT21uaVZpc2lvbiBDYW1lcmEgQ2hpcCBzdXBwb3J0IGFzIHdlbGwuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KKwkgICJWaWRlbyBGb3IgTGludXgiLCAiSTJDIFN1cHBvcnQiIGFuZCAiT21uaVZpc2lvbiBDYW1lcmEgQ2hpcCAKKwkgIHN1cHBvcnQiIHRvIHVzZSB0aGlzIGRyaXZlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdzk5NjhjZi4KKworY29uZmlnIFVTQl9QV0MKKwl0cmlzdGF0ZSAiVVNCIFBoaWxpcHMgQ2FtZXJhcyIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYKKwktLS1oZWxwLS0tCisJICBTYXkgWSBvciBNIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGVzZSBQaGlsaXBzICYgT0VNCisgICAgICAgICAgd2ViY2FtczoKKyAgICAgICAgICAgKiBQaGlsaXBzIFBDQTY0NSwgUENBNjQ2CisgICAgICAgICAgICogUGhpbGlwcyBQQ1ZDNjc1LCBQQ1ZDNjgwLCBQQ1ZDNjkwCisgICAgICAgICAgICogUGhpbGlwcyBQQ1ZDNzIwLzQwLCBQQ1ZDNzMwLCBQQ1ZDNzQwLCBQQ1ZDNzUwCisJICAgKiBBc2tleSBWQzAxMAorCSAgICogTG9naXRlY2ggUXVpY2tDYW0gUHJvIDMwMDAsIDQwMDAsICdab29tJywgJ05vdGVib29rIFBybycgCisgICAgICAgICAgICAgYW5kICdPcmJpdCcvJ1NwaGVyZScKKyAgICAgICAgICAgKiBTYW1zdW5nIE1QQy1DMTAsIE1QQy1DMzAKKwkgICAqIENyZWF0aXZlIFdlYmNhbSA1LCBQcm8gRXgKKwkgICAqIFNPVEVDIEFmaW5hIEV5ZQorCSAgICogVmlzaW9uaXRlIFZDUy1VQzMwMCwgVkNTLVVNMTAwCisJICAgCisJICBUaGUgUENBNjM1LCBQQ1ZDNjY1IGFuZCBQQ1ZDNzIwLzIwIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyCisJICBhbmQgbmV2ZXIgd2lsbCBiZSwgYnV0IHRoZSA2NjUgYW5kIDcyMC8yMCBhcmUgc3VwcG9ydGVkIGJ5IG90aGVyIAorCSAgZHJpdmVycy4KKworCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL3BoaWxpcHMudHh0PiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQKKwkgIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMuCisKKwkgIFRoZSBidWlsdC1pbiBtaWNyb3Bob25lIGlzIGVuYWJsZWQgYnkgc2VsZWN0aW5nIFVTQiBBdWRpbyBzdXBwb3J0LgorCisJICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiBZb3UgbXVzdCBzYXkgWSBvciBNIHRvCisJICAiVmlkZW8gRm9yIExpbnV4IiAodW5kZXIgQ2hhcmFjdGVyIERldmljZXMpIHRvIHVzZSB0aGlzIGRyaXZlci4KKwkgIEluZm9ybWF0aW9uIG9uIHRoaXMgQVBJIGFuZCBwb2ludGVycyB0byAidjRsIiBwcm9ncmFtcyBtYXkgYmUgZm91bmQKKwkgIGF0IDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWw+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwd2MuCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9tZWRpYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjc2ZGY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvTWFrZWZpbGUKQEAgLTAsMCArMSwxNyBAQAorIworIyBNYWtlZmlsZSBmb3IgVVNCIE1lZGlhIGRyaXZlcnMKKyMKKworc245YzEwMi1vYmpzCTo9IHNuOWMxMDJfY29yZS5vIHNuOWMxMDJfaHY3MTMxZC5vIHNuOWMxMDJfbWkwMzQzLm8gc245YzEwMl9wYXMxMDZiLm8gc245YzEwMl9wYXMyMDJiY2IubyBzbjljMTAyX3RhczUxMTBjMWIubyBzbjljMTAyX3RhczUxMzBkMWIubworCitvYmotJChDT05GSUdfVVNCX0RBQlVTQikJKz0gZGFidXNiLm8KK29iai0kKENPTkZJR19VU0JfRFNCUikJCSs9IGRzYnIxMDAubworb2JqLSQoQ09ORklHX1VTQl9JQk1DQU0pCSs9IGlibWNhbS5vIHVzYnZpZGVvLm8gdWx0cmFjYW0ubworb2JqLSQoQ09ORklHX1VTQl9LT05JQ0FXQykJKz0ga29uaWNhd2MubyB1c2J2aWRlby5vCitvYmotJChDT05GSUdfVVNCX09WNTExKQkJKz0gb3Y1MTEubworb2JqLSQoQ09ORklHX1VTQl9TRTQwMSkJCSs9IHNlNDAxLm8KK29iai0kKENPTkZJR19VU0JfU045QzEwMikJKz0gc245YzEwMi5vCitvYmotJChDT05GSUdfVVNCX1NUVjY4MCkJKz0gc3R2NjgwLm8KK29iai0kKENPTkZJR19VU0JfVklDQU0pCQkrPSB2aWNhbS5vIHVzYnZpZGVvLm8KK29iai0kKENPTkZJR19VU0JfVzk5NjhDRikJKz0gdzk5NjhjZi5vCitvYmotJChDT05GSUdfVVNCX1BXQykgICAgICAgICAgICs9IHB3Yy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL2RhYmZpcm13YXJlLmggYi9kcml2ZXJzL3VzYi9tZWRpYS9kYWJmaXJtd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNGQ4MDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9kYWJmaXJtd2FyZS5oCkBAIC0wLDAgKzEsMTQwOCBAQAorLyoKKyAqIGRhYmRhdGEuaCAtIGRhYiB1c2IgZmlybXdhcmUgYW5kIGJpdHN0cmVhbSBkYXRhCisgKi8KKworc3RhdGljIElOVEVMX0hFWF9SRUNPUkQgZmlybXdhcmVbXSA9IHsKKworeyAgMiwgMHgwMDAwLCAwLCB7MHgyMSwweDU3fSB9LAoreyAgMywgMHgwMDAzLCAwLCB7MHgwMiwweDAxLDB4NjZ9IH0sCit7ICAzLCAweDAwMGIsIDAsIHsweDAyLDB4MDEsMHg2Nn0gfSwKK3sgIDMsIDB4MDAxMywgMCwgezB4MDIsMHgwMSwweDY2fSB9LAoreyAgMywgMHgwMDFiLCAwLCB7MHgwMiwweDAxLDB4NjZ9IH0sCit7ICAzLCAweDAwMjMsIDAsIHsweDAyLDB4MDEsMHg2Nn0gfSwKK3sgIDMsIDB4MDAyYiwgMCwgezB4MDIsMHgwMSwweDY2fSB9LAoreyAgMywgMHgwMDMzLCAwLCB7MHgwMiwweDAzLDB4MGZ9IH0sCit7ICAzLCAweDAwM2IsIDAsIHsweDAyLDB4MDEsMHg2Nn0gfSwKK3sgIDMsIDB4MDA0MywgMCwgezB4MDIsMHgwMSwweDAwfSB9LAoreyAgMywgMHgwMDRiLCAwLCB7MHgwMiwweDAxLDB4NjZ9IH0sCit7ICAzLCAweDAwNTMsIDAsIHsweDAyLDB4MDEsMHg2Nn0gfSwKK3sgIDMsIDB4MDA1YiwgMCwgezB4MDIsMHgwNCwweGJkfSB9LAoreyAgMywgMHgwMDYzLCAwLCB7MHgwMiwweDAxLDB4Njd9IH0sCit7ICAzLCAweDAxMDAsIDAsIHsweDAyLDB4MGMsMHg1YX0gfSwKK3sgIDMsIDB4MDEwNCwgMCwgezB4MDIsMHgwMSwweGVkfSB9LAoreyAgMywgMHgwMTA4LCAwLCB7MHgwMiwweDAyLDB4NTF9IH0sCit7ICAzLCAweDAxMGMsIDAsIHsweDAyLDB4MDIsMHg3Y30gfSwKK3sgIDMsIDB4MDExMCwgMCwgezB4MDIsMHgwMiwweGU0fSB9LAoreyAgMSwgMHgwMTE0LCAwLCB7MHgzMn0gfSwKK3sgIDEsIDB4MDExOCwgMCwgezB4MzJ9IH0sCit7ICAzLCAweDAxMWMsIDAsIHsweDAyLDB4MDUsMHhmZH0gfSwKK3sgIDMsIDB4MDEyMCwgMCwgezB4MDIsMHgwMCwweDAwfSB9LAoreyAgMywgMHgwMTI0LCAwLCB7MHgwMiwweDAwLDB4MDB9IH0sCit7ICAzLCAweDAxMjgsIDAsIHsweDAyLDB4MDQsMHgzY30gfSwKK3sgIDMsIDB4MDEyYywgMCwgezB4MDIsMHgwNCwweDZhfSB9LAoreyAgMywgMHgwMTMwLCAwLCB7MHgwMiwweDAwLDB4MDB9IH0sCit7ICAzLCAweDAxMzQsIDAsIHsweDAyLDB4MDAsMHgwMH0gfSwKK3sgIDMsIDB4MDEzOCwgMCwgezB4MDIsMHgwMCwweDAwfSB9LAoreyAgMywgMHgwMTNjLCAwLCB7MHgwMiwweDAwLDB4MDB9IH0sCit7ICAzLCAweDAxNDAsIDAsIHsweDAyLDB4MDAsMHgwMH0gfSwKK3sgIDMsIDB4MDE0NCwgMCwgezB4MDIsMHgwMCwweDAwfSB9LAoreyAgMywgMHgwMTQ4LCAwLCB7MHgwMiwweDAwLDB4MDB9IH0sCit7ICAzLCAweDAxNGMsIDAsIHsweDAyLDB4MDAsMHgwMH0gfSwKK3sgIDMsIDB4MDE1MCwgMCwgezB4MDIsMHgwMCwweDAwfSB9LAoreyAgMywgMHgwMTU0LCAwLCB7MHgwMiwweDAwLDB4MDB9IH0sCit7IDEwLCAweDAxNTcsIDAsIHsweDc1LDB4ODEsMHg3ZiwweGU1LDB4ODIsMHg2MCwweDAzLDB4MDIsMHgwMSwweDYxfSB9LAoreyAgNSwgMHgwMTYxLCAwLCB7MHgxMiwweDA3LDB4NmYsMHgyMSwweDY0fSB9LAoreyAgMSwgMHgwMTY2LCAwLCB7MHgzMn0gfSwKK3sgMTQsIDB4MDE2NywgMCwgezB4YzAsMHhkMCwweGMwLDB4ODYsMHhjMCwweDgyLDB4YzAsMHg4MywweGMwLDB4ZTAsMHg5MCwweDdmLDB4OTcsMHhlMH0gfSwKK3sgMTQsIDB4MDE3NSwgMCwgezB4NDQsMHg4MCwweGYwLDB4OTAsMHg3ZiwweDY5LDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMH0gfSwKK3sgMTQsIDB4MDE4MywgMCwgezB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMH0gfSwKK3sgMTQsIDB4MDE5MSwgMCwgezB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHg5MCwweDdmLDB4OTcsMHhlMH0gfSwKK3sgIDMsIDB4MDE5ZiwgMCwgezB4NTUsMHg3ZiwweGYwfSB9LAoreyAxNCwgMHgwMWEyLCAwLCB7MHg5MCwweDdmLDB4OWEsMHhlMCwweDMwLDB4ZTQsMHgyMywweDkwLDB4N2YsMHg2OCwweGYwLDB4ZjAsMHhmMCwweGYwfSB9LAoreyAxNCwgMHgwMWIwLCAwLCB7MHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwfSB9LAoreyAxNCwgMHgwMWJlLCAwLCB7MHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwfSB9LAoreyAxNCwgMHgwMWNjLCAwLCB7MHhlNSwweGQ4LDB4YzIsMHhlMywweGY1LDB4ZDgsMHhkMCwweGUwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweDg2fSB9LAoreyAgMywgMHgwMWRhLCAwLCB7MHhkMCwweGQwLDB4MzJ9IH0sCit7ICA4LCAweDAxZGQsIDAsIHsweDc1LDB4ODYsMHgwMCwweDkwLDB4ZmYsMHhjMywweDdjLDB4MDV9IH0sCit7ICA3LCAweDAxZTUsIDAsIHsweGEzLDB4ZTUsMHg4MiwweDQ1LDB4ODMsMHg3MCwweGY5fSB9LAoreyAgMSwgMHgwMWVjLCAwLCB7MHgyMn0gfSwKK3sgMTQsIDB4MDFlZCwgMCwgezB4YzAsMHhlMCwweGMwLDB4ZjAsMHhjMCwweDgyLDB4YzAsMHg4MywweGMwLDB4MDIsMHhjMCwweDAzLDB4YzAsMHhkMH0gfSwKK3sgMTQsIDB4MDFmYiwgMCwgezB4NzUsMHhkMCwweDAwLDB4YzAsMHg4NiwweDc1LDB4ODYsMHgwMCwweGU1LDB4OTEsMHhjMiwweGU0LDB4ZjUsMHg5MX0gfSwKK3sgMTMsIDB4MDIwOSwgMCwgezB4OTAsMHg4OCwweDAwLDB4ZTAsMHhmNSwweDQxLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwMiwweGYwLDB4OTB9IH0sCit7ICA5LCAweDAyMTYsIDAsIHsweDdmLDB4YWIsMHg3NCwweDAyLDB4ZjAsMHhlNSwweDMyLDB4NjAsMHgyMX0gfSwKK3sgIDQsIDB4MDIxZiwgMCwgezB4N2EsMHgwMCwweDdiLDB4MDB9IH0sCit7IDExLCAweDAyMjMsIDAsIHsweGMzLDB4ZWEsMHg5NCwweDE4LDB4ZWIsMHg2NCwweDgwLDB4OTQsMHg4MCwweDUwLDB4MTJ9IH0sCit7IDE0LCAweDAyMmUsIDAsIHsweDkwLDB4N2YsMHg2OSwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHgwYSwweGJhLDB4MDB9IH0sCit7ICAyLCAweDAyM2MsIDAsIHsweDAxLDB4MGJ9IH0sCit7ICAyLCAweDAyM2UsIDAsIHsweDgwLDB4ZTN9IH0sCit7ICAyLCAweDAyNDAsIDAsIHsweGQwLDB4ODZ9IH0sCit7IDE0LCAweDAyNDIsIDAsIHsweGQwLDB4ZDAsMHhkMCwweDAzLDB4ZDAsMHgwMiwweGQwLDB4ODMsMHhkMCwweDgyLDB4ZDAsMHhmMCwweGQwLDB4ZTB9IH0sCit7ICAxLCAweDAyNTAsIDAsIHsweDMyfSB9LAoreyAxNCwgMHgwMjUxLCAwLCB7MHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHhkMCwweDc1LDB4ZDAsMHgwMCwweGMwfSB9LAoreyAxNCwgMHgwMjVmLCAwLCB7MHg4NiwweDc1LDB4ODYsMHgwMCwweGU1LDB4OTEsMHhjMiwweGU0LDB4ZjUsMHg5MSwweDkwLDB4N2YsMHhhYiwweDc0fSB9LAoreyAgNCwgMHgwMjZkLCAwLCB7MHgwNCwweGYwLDB4ZDAsMHg4Nn0gfSwKK3sgMTEsIDB4MDI3MSwgMCwgezB4ZDAsMHhkMCwweGQwLDB4ODMsMHhkMCwweDgyLDB4ZDAsMHhmMCwweGQwLDB4ZTAsMHgzMn0gfSwKK3sgMTQsIDB4MDI3YywgMCwgezB4YzAsMHhlMCwweGMwLDB4ZjAsMHhjMCwweDgyLDB4YzAsMHg4MywweGMwLDB4MDIsMHhjMCwweDAzLDB4YzAsMHgwNH0gfSwKK3sgMTQsIDB4MDI4YSwgMCwgezB4YzAsMHgwNSwweGMwLDB4MDYsMHhjMCwweDA3LDB4YzAsMHgwMCwweGMwLDB4MDEsMHhjMCwweGQwLDB4NzUsMHhkMH0gfSwKK3sgMTMsIDB4MDI5OCwgMCwgezB4MDAsMHhjMCwweDg2LDB4NzUsMHg4NiwweDAwLDB4ZTUsMHg5MSwweGMyLDB4ZTQsMHhmNSwweDkxLDB4OTB9IH0sCit7IDEyLCAweDAyYTUsIDAsIHsweDdmLDB4YWIsMHg3NCwweDA4LDB4ZjAsMHg3NSwweDZlLDB4MDAsMHg3NSwweDZmLDB4MDIsMHgxMn0gfSwKK3sgIDYsIDB4MDJiMSwgMCwgezB4MTEsMHg0NCwweDc1LDB4NzAsMHgzOSwweDc1fSB9LAoreyAgNiwgMHgwMmI3LCAwLCB7MHg3MSwweDBjLDB4NzUsMHg3MiwweDAyLDB4MTJ9IH0sCit7IDEyLCAweDAyYmQsIDAsIHsweDExLDB4NzUsMHg5MCwweDdmLDB4ZDYsMHhlNCwweGYwLDB4NzUsMHhkOCwweDIwLDB4ZDAsMHg4Nn0gfSwKK3sgMTQsIDB4MDJjOSwgMCwgezB4ZDAsMHhkMCwweGQwLDB4MDEsMHhkMCwweDAwLDB4ZDAsMHgwNywweGQwLDB4MDYsMHhkMCwweDA1LDB4ZDAsMHgwNH0gfSwKK3sgMTMsIDB4MDJkNywgMCwgezB4ZDAsMHgwMywweGQwLDB4MDIsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZjAsMHhkMCwweGUwLDB4MzJ9IH0sCit7IDE0LCAweDAyZTQsIDAsIHsweGMwLDB4ZTAsMHhjMCwweGYwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwweGQwLDB4NzUsMHhkMCwweDAwLDB4YzB9IH0sCit7IDE0LCAweDAyZjIsIDAsIHsweDg2LDB4NzUsMHg4NiwweDAwLDB4ZTUsMHg5MSwweGMyLDB4ZTQsMHhmNSwweDkxLDB4OTAsMHg3ZiwweGFiLDB4NzR9IH0sCit7ICA0LCAweDAzMDAsIDAsIHsweDEwLDB4ZjAsMHhkMCwweDg2fSB9LAoreyAxMSwgMHgwMzA0LCAwLCB7MHhkMCwweGQwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGYwLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAxNCwgMHgwMzBmLCAwLCB7MHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHgwMiwweGMwLDB4MDMsMHhjMCwweDA0fSB9LAoreyAxNCwgMHgwMzFkLCAwLCB7MHhjMCwweDA1LDB4YzAsMHgwNiwweGMwLDB4MDcsMHhjMCwweDAwLDB4YzAsMHgwMSwweGMwLDB4ZDAsMHg3NSwweGQwfSB9LAoreyAxMiwgMHgwMzJiLCAwLCB7MHgwMCwweGMwLDB4ODYsMHg3NSwweDg2LDB4MDAsMHg3NSwweDZlLDB4MDAsMHg3NSwweDZmLDB4MDJ9IH0sCit7ICA3LCAweDAzMzcsIDAsIHsweDEyLDB4MTEsMHg0NCwweDc1LDB4NzAsMHg0MCwweDc1fSB9LAoreyAgNiwgMHgwMzNlLCAwLCB7MHg3MSwweDBjLDB4NzUsMHg3MiwweDAyLDB4MTJ9IH0sCit7IDE0LCAweDAzNDQsIDAsIHsweDExLDB4NzUsMHg5MCwweDdmLDB4ZDYsMHg3NCwweDAyLDB4ZjAsMHg5MCwweDdmLDB4ZDYsMHg3NCwweDA2LDB4ZjB9IH0sCit7ICA1LCAweDAzNTIsIDAsIHsweDc1LDB4ZDgsMHgxMCwweGQwLDB4ODZ9IH0sCit7IDE0LCAweDAzNTcsIDAsIHsweGQwLDB4ZDAsMHhkMCwweDAxLDB4ZDAsMHgwMCwweGQwLDB4MDcsMHhkMCwweDA2LDB4ZDAsMHgwNSwweGQwLDB4MDR9IH0sCit7IDEzLCAweDAzNjUsIDAsIHsweGQwLDB4MDMsMHhkMCwweDAyLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGYwLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAxMywgMHgwMzcyLCAwLCB7MHg5MCwweDdmLDB4YTUsMHg3NCwweDgwLDB4ZjAsMHg5MCwweDdmLDB4YTYsMHg3NCwweDlhLDB4ZjAsMHgxMn0gfSwKK3sgMTIsIDB4MDM3ZiwgMCwgezB4MTAsMHgxYiwweDkwLDB4N2YsMHhhNiwweGU1LDB4NDIsMHhmMCwweDEyLDB4MTAsMHgxYiwweDkwfSB9LAoreyAxMywgMHgwMzhiLCAwLCB7MHg3ZiwweGE2LDB4ZTUsMHg0MywweGYwLDB4MTIsMHgxMCwweDFiLDB4OTAsMHg3ZiwweGE1LDB4NzQsMHg0MH0gfSwKK3sgIDEsIDB4MDM5OCwgMCwgezB4ZjB9IH0sCit7ICAxLCAweDAzOTksIDAsIHsweDIyfSB9LAoreyAxMywgMHgwMzlhLCAwLCB7MHg5MCwweDdmLDB4YTUsMHg3NCwweDgwLDB4ZjAsMHg5MCwweDdmLDB4YTYsMHg3NCwweDlhLDB4ZjAsMHgxMn0gfSwKK3sgMTIsIDB4MDNhNywgMCwgezB4MTAsMHgxYiwweDkwLDB4N2YsMHhhNiwweGU1LDB4NDQsMHhmMCwweDEyLDB4MTAsMHgxYiwweDkwfSB9LAoreyAxMiwgMHgwM2IzLCAwLCB7MHg3ZiwweGE2LDB4ZTUsMHg0NSwweGYwLDB4MTIsMHgxMCwweDFiLDB4OTAsMHg3ZiwweGE2LDB4ZTV9IH0sCit7IDExLCAweDAzYmYsIDAsIHsweDQ2LDB4ZjAsMHgxMiwweDEwLDB4MWIsMHg5MCwweDdmLDB4YTUsMHg3NCwweDQwLDB4ZjB9IH0sCit7ICAxLCAweDAzY2EsIDAsIHsweDIyfSB9LAoreyAxMCwgMHgwM2NiLCAwLCB7MHg3NSwweDQ0LDB4MDIsMHg3NSwweDQ1LDB4MDAsMHg3NSwweDQ2LDB4MDAsMHgxMn0gfSwKK3sgIDksIDB4MDNkNSwgMCwgezB4MDMsMHg5YSwweDc1LDB4NDIsMHgwMywweDc1LDB4NDMsMHgwMCwweDEyfSB9LAoreyAgMiwgMHgwM2RlLCAwLCB7MHgwMywweDcyfSB9LAoreyAgMSwgMHgwM2UwLCAwLCB7MHgyMn0gfSwKK3sgMTIsIDB4MDNlMSwgMCwgezB4OTAsMHg4OCwweDAwLDB4ZTUsMHgzNiwweGYwLDB4OTAsMHg4OCwweDAwLDB4NzQsMHgxMCwweDI1fSB9LAoreyAgOSwgMHgwM2VkLCAwLCB7MHgzNiwweGYwLDB4MTIsMHgwMSwweGRkLDB4NzUsMHg0MiwweDAxLDB4NzV9IH0sCit7ICA5LCAweDAzZjYsIDAsIHsweDQzLDB4MTgsMHgxMiwweDAzLDB4NzIsMHg3NSwweDQ0LDB4MDIsMHg3NX0gfSwKK3sgIDksIDB4MDNmZiwgMCx7MHg0NSwweDAwLDB4NzUsMHg0NiwweDAwLDB4MTIsMHgwMywweDlhLDB4NzV9IH0sCit7ICA4LCAweDA0MDgsIDAsezB4NDIsMHgwMywweDc1LDB4NDMsMHg0NCwweDEyLDB4MDMsMHg3Mn0gfSwKK3sgIDEsIDB4MDQxMCwgMCx7MHgyMn0gfSwKK3sgMTQsIDB4MDQxMSwgMCwgezB4YzAsMHhlMCwweGMwLDB4ZjAsMHhjMCwweDgyLDB4YzAsMHg4MywweGMwLDB4ZDAsMHg3NSwweGQwLDB4MDAsMHhjMH0gfSwKK3sgMTQsIDB4MDQxZiwgMCwgezB4ODYsMHg3NSwweDg2LDB4MDAsMHhlNSwweDkxLDB4YzIsMHhlNCwweGY1LDB4OTEsMHg5MCwweDdmLDB4YWEsMHg3NH0gfSwKK3sgIDQsIDB4MDQyZCwgMCwgezB4MDIsMHhmMCwweGQwLDB4ODZ9IH0sCit7IDExLCAweDA0MzEsIDAsIHsweGQwLDB4ZDAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZjAsMHhkMCwweGUwLDB4MzJ9IH0sCit7IDE0LCAweDA0M2MsIDAsIHsweGMwLDB4ZTAsMHhjMCwweGYwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwweGQwLDB4NzUsMHhkMCwweDAwLDB4YzB9IH0sCit7IDE0LCAweDA0NGEsIDAsIHsweDg2LDB4NzUsMHg4NiwweDAwLDB4ZTUsMHg5MSwweGMyLDB4ZTQsMHhmNSwweDkxLDB4OTAsMHg3ZiwweGE5LDB4NzR9IH0sCit7ICA3LCAweDA0NTgsIDAsIHsweDA0LDB4ZjAsMHg3NSwweDMwLDB4MDEsMHhkMCwweDg2fSB9LAoreyAxMSwgMHgwNDVmLCAwLCB7MHhkMCwweGQwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGYwLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAxNCwgMHgwNDZhLCAwLCB7MHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHhkMCwweDc1LDB4ZDAsMHgwMCwweGMwfSB9LAoreyAxNCwgMHgwNDc4LCAwLCB7MHg4NiwweDc1LDB4ODYsMHgwMCwweGU1LDB4OTEsMHhjMiwweGU0LDB4ZjUsMHg5MSwweDkwLDB4N2YsMHhhYSwweDc0fSB9LAoreyAgNywgMHgwNDg2LCAwLCB7MHgwNCwweGYwLDB4NzUsMHgzMSwweDAxLDB4ZDAsMHg4Nn0gfSwKK3sgMTEsIDB4MDQ4ZCwgMCwgezB4ZDAsMHhkMCwweGQwLDB4ODMsMHhkMCwweDgyLDB4ZDAsMHhmMCwweGQwLDB4ZTAsMHgzMn0gfSwKK3sgMTQsIDB4MDQ5OCwgMCwgezB4YzAsMHhlMCwweGMwLDB4ZjAsMHhjMCwweDgyLDB4YzAsMHg4MywweGMwLDB4ZDAsMHg3NSwweGQwLDB4MDAsMHhjMH0gfSwKK3sgMTIsIDB4MDRhNiwgMCwgezB4ODYsMHg3NSwweDg2LDB4MDAsMHhlNSwweDkxLDB4YzIsMHhlNSwweGY1LDB4OTEsMHhkMCwweDg2fSB9LAoreyAxMSwgMHgwNGIyLCAwLCB7MHhkMCwweGQwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGYwLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAxNCwgMHgwNGJkLCAwLCB7MHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHhkMCwweDc1LDB4ZDAsMHgwMCwweGMwfSB9LAoreyAxMiwgMHgwNGNiLCAwLCB7MHg4NiwweDc1LDB4ODYsMHgwMCwweGU1LDB4OTEsMHhjMiwweGU3LDB4ZjUsMHg5MSwweGQwLDB4ODZ9IH0sCit7IDExLCAweDA0ZDcsIDAsIHsweGQwLDB4ZDAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZjAsMHhkMCwweGUwLDB4MzJ9IH0sCit7IDEyLCAweDA0ZTIsIDAsIHsweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmEsMHg4YSwweDIwLDB4OTAsMHg3ZiwweDk2LDB4ZTQsMHhmMH0gfSwKK3sgIDEsIDB4MDRlZSwgMCwgezB4MjJ9IH0sCit7ICA3LCAweDA0ZWYsIDAsIHsweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmEsMHg4YSwweDIxfSB9LAoreyAgMSwgMHgwNGY2LCAwLCB7MHgyMn0gfSwKK3sgMTQsIDB4MDRmNywgMCwgezB4OTAsMHgxNywweDEzLDB4ZTAsMHhmYSwweDkwLDB4MTcsMHgxNSwweGUwLDB4ZmIsMHg3NCwweDgwLDB4MmEsMHhmYX0gfSwKK3sgMTQsIDB4MDUwNSwgMCwgezB4NzQsMHg4MCwweDJiLDB4ZmIsMHhlYSwweDAzLDB4MDMsMHg1NCwweDNmLDB4ZmMsMHhlYSwweGM0LDB4MjMsMHg1NH0gfSwKK3sgMTQsIDB4MDUxMywgMCwgezB4MWYsMHhmYSwweDJjLDB4ZmEsMHhlYiwweDAzLDB4MDMsMHg1NCwweDNmLDB4ZmMsMHhlYiwweGM0LDB4MjMsMHg1NH0gfSwKK3sgMTEsIDB4MDUyMSwgMCwgezB4MWYsMHhmYiwweDJjLDB4ZmIsMHg5MCwweDE3LDB4MGEsMHhlMCwweGZjLDB4NjAsMHgwMn0gfSwKK3sgIDIsIDB4MDUyYywgMCwgezB4N2EsMHgwMH0gfSwKK3sgIDcsIDB4MDUyZSwgMCwgezB4OTAsMHgxNywweDBjLDB4ZTAsMHhmYywweDYwLDB4MDJ9IH0sCit7ICAyLCAweDA1MzUsIDAsIHsweDdiLDB4MDB9IH0sCit7IDExLCAweDA1MzcsIDAsIHsweGVhLDB4MmIsMHhmYywweGMzLDB4MTMsMHhmNSwweDNhLDB4NzUsMHg0NCwweDAyLDB4OGJ9IH0sCit7ICA3LCAweDA1NDIsIDAsIHsweDQ1LDB4OGEsMHg0NiwweDEyLDB4MDMsMHg5YSwweDc1fSB9LAoreyAgOSwgMHgwNTQ5LCAwLCB7MHg2ZSwweDA4LDB4NzUsMHg2ZiwweDAwLDB4MTIsMHgxMSwweDQ0LDB4NzV9IH0sCit7ICA0LCAweDA1NTIsIDAsIHsweDcwLDB4NDcsMHg3NSwweDcxfSB9LAoreyAgOCwgMHgwNTU2LCAwLCB7MHgwYywweDc1LDB4NzIsMHgwMiwweDEyLDB4MTEsMHg3NSwweDg1fSB9LAoreyAgNSwgMHgwNTVlLCAwLCB7MHgzYSwweDczLDB4MTIsMHgxMSwweGEwfSB9LAoreyAgMSwgMHgwNTYzLCAwLCB7MHgyMn0gfSwKK3sgMTQsIDB4MDU2NCwgMCwgezB4OTAsMHg3ZiwweDk2LDB4ZTAsMHhmYSwweDkwLDB4N2YsMHg5NiwweDc0LDB4ODAsMHg2NSwweDAyLDB4ZjAsMHg5MH0gfSwKK3sgMTQsIDB4MDU3MiwgMCwgezB4N2YsMHhlYiwweGUwLDB4ZmEsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGZiLDB4OTAsMHg3ZiwweGVmLDB4ZTAsMHhmY30gfSwKK3sgMTQsIDB4MDU4MCwgMCwgezB4MzMsMHg5NSwweGUwLDB4ZmQsMHg4YywweDA1LDB4N2MsMHgwMCwweDkwLDB4N2YsMHhlZSwweGUwLDB4ZmUsMHgzM30gfSwKK3sgMTQsIDB4MDU4ZSwgMCwgezB4OTUsMHhlMCwweGZmLDB4ZWMsMHgyZSwweGZjLDB4ZWQsMHgzZiwweGZkLDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHhmZX0gfSwKK3sgIDUsIDB4MDU5YywgMCwgezB4YmUsMHgwMSwweDAyLDB4ODAsMHgwM30gfSwKK3sgIDMsIDB4MDVhMSwgMCwgezB4MDIsMHgwNSwweGY5fSB9LAoreyAgNiwgMHgwNWE0LCAwLCB7MHhiYywweDAxLDB4MjEsMHhiZCwweDAwLDB4MWV9IH0sCit7IDE0LCAweDA1YWEsIDAsIHsweGVhLDB4YzQsMHgwMywweDU0LDB4ZjgsMHhmYywweGViLDB4MjUsMHhlMCwweGZkLDB4MmMsMHgyNCwweDAwLDB4ZmN9IH0sCit7IDE0LCAweDA1YjgsIDAsIHsweGU0LDB4MzQsMHgxNywweGZkLDB4OTAsMHg3ZSwweGMwLDB4ZTAsMHhmZSwweDhjLDB4ODIsMHg4ZCwweDgzLDB4ZjB9IH0sCit7ICAyLCAweDA1YzYsIDAsIHsweDgwLDB4MzF9IH0sCit7IDE0LCAweDA1YzgsIDAsIHsweGVhLDB4YzQsMHgwMywweDU0LDB4ZjgsMHhmYSwweGViLDB4MjUsMHhlMCwweGZiLDB4MmEsMHhmYSwweDI0LDB4MDB9IH0sCit7IDE0LCAweDA1ZDYsIDAsIHsweGZiLDB4ZTQsMHgzNCwweDE3LDB4ZmMsMHg5MCwweDdlLDB4YzAsMHhlMCwweGZkLDB4OGIsMHg4MiwweDhjLDB4ODN9IH0sCit7IDE0LCAweDA1ZTQsIDAsIHsweGYwLDB4NzQsMHgwMSwweDJhLDB4MjQsMHgwMCwweGZhLDB4ZTQsMHgzNCwweDE3LDB4ZmIsMHg5MCwweDdlLDB4YzF9IH0sCit7ICA3LCAweDA1ZjIsIDAsIHsweGUwLDB4ZmMsMHg4YSwweDgyLDB4OGIsMHg4MywweGYwfSB9LAoreyAgMywgMHgwNWY5LCAwLCB7MHg3NSwweDM4LDB4MDF9IH0sCit7ICAxLCAweDA1ZmMsIDAsIHsweDIyfSB9LAoreyAxNCwgMHgwNWZkLCAwLCB7MHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHgwMiwweGMwLDB4MDMsMHhjMCwweDA0fSB9LAoreyAxNCwgMHgwNjBiLCAwLCB7MHhjMCwweDA1LDB4YzAsMHgwNiwweGMwLDB4MDcsMHhjMCwweDAwLDB4YzAsMHgwMSwweGMwLDB4ZDAsMHg3NSwweGQwfSB9LAoreyAxMywgMHgwNjE5LCAwLCB7MHgwMCwweGMwLDB4ODYsMHg3NSwweDg2LDB4MDAsMHhlNSwweDkxLDB4YzIsMHhlNCwweGY1LDB4OTEsMHg5MH0gfSwKK3sgMTMsIDB4MDYyNiwgMCwgezB4N2YsMHhhYSwweDc0LDB4MDEsMHhmMCwweDEyLDB4MDUsMHg2NCwweDc1LDB4MzcsMHgwMCwweGQwLDB4ODZ9IH0sCit7IDE0LCAweDA2MzMsIDAsIHsweGQwLDB4ZDAsMHhkMCwweDAxLDB4ZDAsMHgwMCwweGQwLDB4MDcsMHhkMCwweDA2LDB4ZDAsMHgwNSwweGQwLDB4MDR9IH0sCit7IDEzLCAweDA2NDEsIDAsIHsweGQwLDB4MDMsMHhkMCwweDAyLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGYwLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAxNCwgMHgwNjRlLCAwLCB7MHg5MCwweDdmLDB4ZWIsMHhlMCwweGZhLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmYiwweDkwLDB4N2YsMHhlZSwweGUwfSB9LAoreyAxNCwgMHgwNjVjLCAwLCB7MHhmYywweDMzLDB4OTUsMHhlMCwweGZkLDB4OTAsMHg3ZiwweDk2LDB4ZTAsMHhmZSwweDkwLDB4N2YsMHg5NiwweDc0fSB9LAoreyAxNCwgMHgwNjZhLCAwLCB7MHg4MCwweDY1LDB4MDYsMHhmMCwweDkwLDB4N2YsMHgwMCwweDc0LDB4MDEsMHhmMCwweGVhLDB4YzQsMHgwMywweDU0fSB9LAoreyAxNCwgMHgwNjc4LCAwLCB7MHhmOCwweGZlLDB4ZWIsMHgyNSwweGUwLDB4ZmIsMHgyZSwweGZlLDB4MjQsMHgwMCwweGZiLDB4ZTQsMHgzNCwweDE3fSB9LAoreyAxNCwgMHgwNjg2LCAwLCB7MHhmZiwweDhiLDB4ODIsMHg4ZiwweDgzLDB4ZTAsMHhmYiwweDc0LDB4MDEsMHgyZSwweDI0LDB4MDAsMHhmZSwweGU0fSB9LAoreyAxNCwgMHgwNjk0LCAwLCB7MHgzNCwweDE3LDB4ZmYsMHg4ZSwweDgyLDB4OGYsMHg4MywweGUwLDB4ZmUsMHg5MCwweDdmLDB4ZTksMHhlMCwweGZmfSB9LAoreyAgMywgMHgwNmEyLCAwLCB7MHhiZiwweDgxLDB4MGF9IH0sCit7IDEwLCAweDA2YTUsIDAsIHsweDkwLDB4N2YsMHgwMCwweGViLDB4ZjAsMHg5MCwweDdmLDB4MDEsMHhlZSwweGYwfSB9LAoreyAgOCwgMHgwNmFmLCAwLCB7MHg5MCwweDdmLDB4ZTksMHhlMCwweGZiLDB4YmIsMHg4MiwweDFhfSB9LAoreyAgMywgMHgwNmI3LCAwLCB7MHhiYSwweDAxLDB4MGN9IH0sCit7IDEyLCAweDA2YmEsIDAsIHsweDkwLDB4N2YsMHgwMCwweGU0LDB4ZjAsMHg5MCwweDdmLDB4MDEsMHhlNCwweGYwLDB4ODAsMHgwYn0gfSwKK3sgMTEsIDB4MDZjNiwgMCwgezB4OTAsMHg3ZiwweDAwLDB4ZTQsMHhmMCwweDkwLDB4N2YsMHgwMSwweDc0LDB4YjUsMHhmMH0gfSwKK3sgIDgsIDB4MDZkMSwgMCwgezB4OTAsMHg3ZiwweGU5LDB4ZTAsMHhmYiwweGJiLDB4ODMsMHgxYn0gfSwKK3sgIDMsIDB4MDZkOSwgMCwgezB4YmEsMHgwMSwweDBkfSB9LAoreyAxMywgMHgwNmRjLCAwLCB7MHg5MCwweDdmLDB4MDAsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4MDEsMHhlNCwweGYwLDB4ODAsMHgwYn0gfSwKK3sgMTEsIDB4MDZlOSwgMCwgezB4OTAsMHg3ZiwweDAwLDB4ZTQsMHhmMCwweDkwLDB4N2YsMHgwMSwweDc0LDB4MTIsMHhmMH0gfSwKK3sgIDgsIDB4MDZmNCwgMCwgezB4OTAsMHg3ZiwweGU5LDB4ZTAsMHhmYiwweGJiLDB4ODQsMHgxY30gfSwKK3sgIDMsIDB4MDZmYywgMCwgezB4YmEsMHgwMSwweDBkfSB9LAoreyAxMywgMHgwNmZmLCAwLCB7MHg5MCwweDdmLDB4MDAsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4MDEsMHhlNCwweGYwLDB4ODAsMHgwY30gfSwKK3sgMTIsIDB4MDcwYywgMCwgezB4OTAsMHg3ZiwweDAwLDB4NzQsMHg4MCwweGYwLDB4OTAsMHg3ZiwweDAxLDB4NzQsMHgwMSwweGYwfSB9LAoreyAgNSwgMHgwNzE4LCAwLCB7MHg5MCwweDdmLDB4YjUsMHhlYywweGYwfSB9LAoreyAgMSwgMHgwNzFkLCAwLCB7MHgyMn0gfSwKK3sgMTIsIDB4MDcxZSwgMCwgezB4NzUsMHgzNiwweDBkLDB4OTAsMHg4OCwweDAwLDB4NzQsMHgxZCwweGYwLDB4NzUsMHg2YiwweDgwfSB9LAoreyAxMCwgMHgwNzJhLCAwLCB7MHg3NSwweDZjLDB4M2MsMHgxMiwweDEwLDB4ZTIsMHg3NSwweDZiLDB4ODAsMHg3NX0gfSwKK3sgIDksIDB4MDczNCwgMCwgezB4NmMsMHgwZiwweDEyLDB4MTAsMHhlMiwweDc1LDB4NmIsMHg4MCwweDc1fSB9LAoreyAgOSwgMHgwNzNkLCAwLCB7MHg2YywweDA2LDB4MTIsMHgxMCwweGUyLDB4NzUsMHg2YiwweDgwLDB4NzV9IH0sCit7ICA3LCAweDA3NDYsIDAsIHsweDZjLDB4MDEsMHgxMiwweDEwLDB4ZTIsMHg3YSwweDAwfSB9LAoreyAgMywgMHgwNzRkLCAwLCB7MHhiYSwweGZmLDB4MDB9IH0sCit7ICAyLCAweDA3NTAsIDAsIHsweDUwLDB4MGF9IH0sCit7IDEwLCAweDA3NTIsIDAsIHsweGMwLDB4MDIsMHgxMiwweDAxLDB4ZGQsMHhkMCwweDAyLDB4MGEsMHg4MCwweGYxfSB9LAoreyAxMCwgMHgwNzVjLCAwLCB7MHg3NSwweDZiLDB4ODAsMHg3NSwweDZjLDB4M2MsMHgxMiwweDEwLDB4ZTIsMHg3NX0gfSwKK3sgIDgsIDB4MDc2NiwgMCwgezB4NmIsMHg4MCwweDc1LDB4NmMsMHgwZiwweDEyLDB4MTAsMHhlMn0gfSwKK3sgIDEsIDB4MDc2ZSwgMCwgezB4MjJ9IH0sCit7IDE0LCAweDA3NmYsIDAsIHsweDkwLDB4N2YsMHhhMSwweGU0LDB4ZjAsMHg5MCwweDdmLDB4YWYsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4OTJ9IH0sCit7IDE0LCAweDA3N2QsIDAsIHsweDc0LDB4MDIsMHhmMCwweDc1LDB4OGUsMHgzMSwweDc1LDB4ODksMHgyMSwweDc1LDB4ODgsMHgwMCwweDc1LDB4Yzh9IH0sCit7IDE0LCAweDA3OGIsIDAsIHsweDAwLDB4NzUsMHg4ZCwweDQwLDB4NzUsMHg5OCwweDQwLDB4NzUsMHhjMCwweDQwLDB4NzUsMHg4NywweDAwLDB4NzV9IH0sCit7ICA5LCAweDA3OTksIDAsIHsweDIwLDB4MDAsMHg3NSwweDIxLDB4MDAsMHg3NSwweDIyLDB4MDAsMHg3NX0gfSwKK3sgIDUsIDB4MDdhMiwgMCwgezB4MjMsMHgwMCwweDc1LDB4NDcsMHgwMH0gfSwKK3sgIDcsIDB4MDdhNywgMCwgezB4YzMsMHhlNSwweDQ3LDB4OTQsMHgyMCwweDUwLDB4MTF9IH0sCit7IDEzLCAweDA3YWUsIDAsIHsweGU1LDB4NDcsMHgyNCwweDAwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHgxNywweGY1LDB4ODMsMHhlNCwweGYwfSB9LAoreyAgNCwgMHgwN2JiLCAwLCB7MHgwNSwweDQ3LDB4ODAsMHhlOH0gfSwKK3sgIDksIDB4MDdiZiwgMCwgezB4ZTQsMHhmNSwweDQwLDB4ZjUsMHgzZiwweGU0LDB4ZjUsMHgzYywweGY1fSB9LAoreyAgNywgMHgwN2M4LCAwLCB7MHgzYiwweGU0LDB4ZjUsMHgzZSwweGY1LDB4M2QsMHg3NX0gfSwKK3sgMTEsIDB4MDdjZiwgMCwgezB4MzIsMHgwMCwweDc1LDB4MzcsMHgwMCwweDc1LDB4MzksMHgwMCwweDkwLDB4N2YsMHg5M30gfSwKK3sgMTQsIDB4MDdkYSwgMCwgezB4NzQsMHgzYywweGYwLDB4OTAsMHg3ZiwweDljLDB4NzQsMHhmZiwweGYwLDB4OTAsMHg3ZiwweDk2LDB4NzQsMHg4MH0gfSwKK3sgMTQsIDB4MDdlOCwgMCwgezB4ZjAsMHg5MCwweDdmLDB4OTQsMHg3NCwweDcwLDB4ZjAsMHg5MCwweDdmLDB4OWQsMHg3NCwweDhmLDB4ZjAsMHg5MH0gfSwKK3sgMTQsIDB4MDdmNiwgMCwgezB4N2YsMHg5NywweGU0LDB4ZjAsMHg5MCwweDdmLDB4OTUsMHg3NCwweGMyLDB4ZjAsMHg5MCwweDdmLDB4OTgsMHg3NH0gfSwKK3sgMTQsIDB4MDgwNCwgMCwgezB4MjgsMHhmMCwweDkwLDB4N2YsMHg5ZSwweDc0LDB4MjgsMHhmMCwweDkwLDB4N2YsMHhmMCwweGU0LDB4ZjAsMHg5MH0gfSwKK3sgMTQsIDB4MDgxMiwgMCwgezB4N2YsMHhmMSwweGU0LDB4ZjAsMHg5MCwweDdmLDB4ZjIsMHhlNCwweGYwLDB4OTAsMHg3ZiwweGYzLDB4ZTQsMHhmMH0gfSwKK3sgMTQsIDB4MDgyMCwgMCwgezB4OTAsMHg3ZiwweGY0LDB4ZTQsMHhmMCwweDkwLDB4N2YsMHhmNSwweGU0LDB4ZjAsMHg5MCwweDdmLDB4ZjYsMHhlNH0gfSwKK3sgMTQsIDB4MDgyZSwgMCwgezB4ZjAsMHg5MCwweDdmLDB4ZjcsMHhlNCwweGYwLDB4OTAsMHg3ZiwweGY4LDB4ZTQsMHhmMCwweDkwLDB4N2YsMHhmOX0gfSwKK3sgMTQsIDB4MDgzYywgMCwgezB4NzQsMHgzOCwweGYwLDB4OTAsMHg3ZiwweGZhLDB4NzQsMHhhMCwweGYwLDB4OTAsMHg3ZiwweGZiLDB4NzQsMHhhMH0gfSwKK3sgMTQsIDB4MDg0YSwgMCwgezB4ZjAsMHg5MCwweDdmLDB4ZmMsMHg3NCwweGEwLDB4ZjAsMHg5MCwweDdmLDB4ZmQsMHg3NCwweGEwLDB4ZjAsMHg5MH0gfSwKK3sgMTQsIDB4MDg1OCwgMCwgezB4N2YsMHhmZSwweDc0LDB4YTAsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4YTAsMHhmMCwweDkwLDB4N2YsMHhlMH0gfSwKK3sgMTQsIDB4MDg2NiwgMCwgezB4NzQsMHgwMywweGYwLDB4OTAsMHg3ZiwweGUxLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGRkLDB4NzQsMHg4MH0gfSwKK3sgMTEsIDB4MDg3NCwgMCwgezB4ZjAsMHgxMiwweDEyLDB4NDMsMHgxMiwweDA3LDB4MWUsMHg3YSwweDAwLDB4N2IsMHgwMH0gfSwKK3sgIDksIDB4MDg3ZiwgMCwgezB4YzMsMHhlYSwweDk0LDB4MWUsMHhlYiwweDk0LDB4MDAsMHg1MCwweDE3fSB9LAoreyAxMiwgMHgwODg4LCAwLCB7MHg5MCwweDg4LDB4MDAsMHhlMCwweGY1LDB4NDcsMHg5MCwweDg4LDB4MGIsMHhlMCwweGY1LDB4NDd9IH0sCit7ICA5LCAweDA4OTQsIDAsIHsweDkwLDB4N2YsMHg2OCwweGYwLDB4MGEsMHhiYSwweDAwLDB4MDEsMHgwYn0gfSwKK3sgIDIsIDB4MDg5ZCwgMCwgezB4ODAsMHhlMH0gfSwKK3sgMTIsIDB4MDg5ZiwgMCwgezB4MTIsMHgwMywweGUxLDB4OTAsMHg3ZiwweGQ2LDB4ZTQsMHhmMCwweDdhLDB4MDAsMHg3YiwweDAwfSB9LAoreyAxMywgMHgwOGFiLCAwLCB7MHg4YSwweDA0LDB4OGIsMHgwNSwweGMzLDB4ZWEsMHg5NCwweGUwLDB4ZWIsMHg5NCwweDJlLDB4NTAsMHgxYX0gfSwKK3sgMTQsIDB4MDhiOCwgMCwgezB4YzAsMHgwMiwweGMwLDB4MDMsMHhjMCwweDA0LDB4YzAsMHgwNSwweDEyLDB4MDEsMHhkZCwweGQwLDB4MDUsMHhkMH0gfSwKK3sgMTAsIDB4MDhjNiwgMCwgezB4MDQsMHhkMCwweDAzLDB4ZDAsMHgwMiwweDBhLDB4YmEsMHgwMCwweDAxLDB4MGJ9IH0sCit7ICAyLCAweDA4ZDAsIDAsIHsweDgwLDB4ZDl9IH0sCit7IDEzLCAweDA4ZDIsIDAsIHsweDkwLDB4N2YsMHhkNiwweDc0LDB4MDIsMHhmMCwweDkwLDB4N2YsMHhkNiwweDc0LDB4MDYsMHhmMCwweDkwfSB9LAoreyAxNCwgMHgwOGRmLCAwLCB7MHg3ZiwweGRlLDB4NzQsMHgwNSwweGYwLDB4OTAsMHg3ZiwweGRmLDB4NzQsMHgwNSwweGYwLDB4OTAsMHg3ZiwweGFjfSB9LAoreyAxNCwgMHgwOGVkLCAwLCB7MHhlNCwweGYwLDB4OTAsMHg3ZiwweGFkLDB4NzQsMHgwNSwweGYwLDB4NzUsMHhhOCwweDgwLDB4NzUsMHhmOCwweDEwfSB9LAoreyAxMywgMHgwOGZiLCAwLCB7MHg5MCwweDdmLDB4YWUsMHg3NCwweDBiLDB4ZjAsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDg4LDB4ZjAsMHg5MH0gfSwKK3sgMTIsIDB4MDkwOCwgMCwgezB4N2YsMHhhYiwweDc0LDB4MDgsMHhmMCwweDc1LDB4ZTgsMHgxMSwweDc1LDB4MzIsMHgwMSwweDc1fSB9LAoreyAxMiwgMHgwOTE0LCAwLCB7MHgzMSwweDAwLDB4NzUsMHgzMCwweDAwLDB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMiwweDA0LDB4Zjd9IH0sCit7IDEwLCAweDA5MjAsIDAsIHsweGQwLDB4MDUsMHhkMCwweDA0LDB4NzUsMHgzNCwweDAwLDB4NzUsMHgzNSwweDAxfSB9LAoreyAxMywgMHgwOTJhLCAwLCB7MHg5MCwweDdmLDB4YWUsMHg3NCwweDAzLDB4ZjAsMHg4YywweDAyLDB4YmEsMHgwMCwweDAyLDB4ODAsMHgwM30gfSwKK3sgIDMsIDB4MDkzNywgMCwgezB4MDIsMHgwYSwweDNmfSB9LAoreyAxMiwgMHgwOTNhLCAwLCB7MHg4NSwweDMzLDB4MzQsMHg5MCwweDdmLDB4OWQsMHg3NCwweDhmLDB4ZjAsMHg5MCwweDdmLDB4OTd9IH0sCit7IDE0LCAweDA5NDYsIDAsIHsweDc0LDB4MDgsMHhmMCwweDkwLDB4N2YsMHg5ZCwweDc0LDB4ODgsMHhmMCwweDkwLDB4N2YsMHg5YSwweGUwLDB4ZmF9IH0sCit7IDEyLCAweDA5NTQsIDAsIHsweDc0LDB4MDUsMHg1YSwweGY1LDB4MzMsMHg5MCwweDdmLDB4OWQsMHg3NCwweDhmLDB4ZjAsMHg5MH0gfSwKK3sgMTMsIDB4MDk2MCwgMCwgezB4N2YsMHg5NywweDc0LDB4MDIsMHhmMCwweDkwLDB4N2YsMHg5ZCwweDc0LDB4ODIsMHhmMCwweGU1LDB4MzN9IH0sCit7IDEzLCAweDA5NmQsIDAsIHsweDI1LDB4ZTAsMHhmYSwweDkwLDB4N2YsMHg5YSwweGUwLDB4NTQsMHgwNSwweGZiLDB4NGEsMHhmNSwweDMzfSB9LAoreyAgMiwgMHgwOTdhLCAwLCB7MHg2MCwweDBjfSB9LAoreyAxMiwgMHgwOTdjLCAwLCB7MHg5MCwweDdmLDB4OTYsMHhlMCwweGZhLDB4OTAsMHg3ZiwweDk2LDB4NzQsMHg4MCwweDRhLDB4ZjB9IH0sCit7IDExLCAweDA5ODgsIDAsIHsweDc1LDB4NmUsMHgwMCwweDc1LDB4NmYsMHgwMCwweGMwLDB4MDQsMHhjMCwweDA1LDB4MTJ9IH0sCit7IDE0LCAweDA5OTMsIDAsIHsweDExLDB4NDQsMHhkMCwweDA1LDB4ZDAsMHgwNCwweDkwLDB4MTcsMHgxMywweGUwLDB4ZmEsMHg3NCwweDgwLDB4MmF9IH0sCit7ICA2LCAweDA5YTEsIDAsIHsweGZhLDB4ZTUsMHgzMywweGI0LDB4MDQsMHgyOX0gfSwKK3sgIDMsIDB4MDlhNywgMCwgezB4YmEsMHhhMCwweDAwfSB9LAoreyAgMiwgMHgwOWFhLCAwLCB7MHg1MCwweDI0fSB9LAoreyAxMywgMHgwOWFjLCAwLCB7MHg5MCwweDE3LDB4MTMsMHhlMCwweDA0LDB4ZmIsMHgwYiwweDkwLDB4MTcsMHgxMywweGViLDB4ZjAsMHg5MH0gfSwKK3sgMTQsIDB4MDliOSwgMCwgezB4MTcsMHgxMywweGUwLDB4ZmIsMHg5MCwweDE3LDB4MTUsMHhmMCwweGMwLDB4MDIsMHhjMCwweDA0LDB4YzAsMHgwNX0gfSwKK3sgIDksIDB4MDljNywgMCwgezB4MTIsMHgwNCwweGY3LDB4ZDAsMHgwNSwweGQwLDB4MDQsMHhkMCwweDAyfSB9LAoreyAgNSwgMHgwOWQwLCAwLCB7MHhlNSwweDMzLDB4YjQsMHgwMiwweDI2fSB9LAoreyAgNiwgMHgwOWQ1LCAwLCB7MHhjMywweDc0LDB4MDQsMHg5YSwweDUwLDB4MjB9IH0sCit7IDEzLCAweDA5ZGIsIDAsIHsweDkwLDB4MTcsMHgxMywweGUwLDB4ZmEsMHgxYSwweDFhLDB4OTAsMHgxNywweDEzLDB4ZWEsMHhmMCwweDkwfSB9LAoreyAxMywgMHgwOWU4LCAwLCB7MHgxNywweDEzLDB4ZTAsMHhmYSwweDkwLDB4MTcsMHgxNSwweGYwLDB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMn0gfSwKK3sgIDYsIDB4MDlmNSwgMCwgezB4MDQsMHhmNywweGQwLDB4MDUsMHhkMCwweDA0fSB9LAoreyAgNSwgMHgwOWZiLCAwLCB7MHhlNSwweDMzLDB4YjQsMHgwOCwweDFkfSB9LAoreyAgNCwgMHgwYTAwLCAwLCB7MHhlNSwweDM0LDB4NzAsMHgxOX0gfSwKK3sgMTAsIDB4MGEwNCwgMCwgezB4NzQsMHgwMSwweDI1LDB4MzUsMHg1NCwweDBmLDB4ZjUsMHgzNSwweDg1LDB4MzV9IH0sCit7IDEyLCAweDBhMGUsIDAsIHsweDc1LDB4NzUsMHg3NiwweDAwLDB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMiwweDEzLDB4ZmUsMHhkMH0gfSwKK3sgIDMsIDB4MGExYSwgMCwgezB4MDUsMHhkMCwweDA0fSB9LAoreyAgNSwgMHgwYTFkLCAwLCB7MHhlNSwweDMzLDB4YjQsMHgwMSwweDFkfSB9LAoreyAgNCwgMHgwYTIyLCAwLCB7MHhlNSwweDM0LDB4NzAsMHgxOX0gfSwKK3sgMTAsIDB4MGEyNiwgMCwgezB4ZTUsMHgzNSwweDI0LDB4ZmYsMHg1NCwweDBmLDB4ZjUsMHgzNSwweDg1LDB4MzV9IH0sCit7IDEyLCAweDBhMzAsIDAsIHsweDc1LDB4NzUsMHg3NiwweDAwLDB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMiwweDEzLDB4ZmUsMHhkMH0gfSwKK3sgIDMsIDB4MGEzYywgMCwgezB4MDUsMHhkMCwweDA0fSB9LAoreyAxNCwgMHgwYTNmLCAwLCB7MHhjMCwweDA0LDB4YzAsMHgwNSwweDEyLDB4MDEsMHhkZCwweGQwLDB4MDUsMHhkMCwweDA0LDB4OTAsMHg3ZiwweDk2fSB9LAoreyAxNCwgMHgwYTRkLCAwLCB7MHhlMCwweGZhLDB4OTAsMHg3ZiwweDk2LDB4NzQsMHg3ZiwweDVhLDB4ZjAsMHg5MCwweDdmLDB4OTcsMHg3NCwweDA4fSB9LAoreyAxMCwgMHgwYTViLCAwLCB7MHhmMCwweGMzLDB4ZWMsMHg5NCwweDAwLDB4ZWQsMHg5NCwweDAyLDB4NDAsMHgwOH0gfSwKK3sgIDgsIDB4MGE2NSwgMCwgezB4OTAsMHg3ZiwweDk2LDB4ZTAsMHhmYSwweDIwLDB4ZTYsMHgwOH0gfSwKK3sgIDgsIDB4MGE2ZCwgMCwgezB4YzMsMHhlNCwweDljLDB4NzQsMHgwOCwweDlkLDB4NTAsMHgxM30gfSwKK3sgMTQsIDB4MGE3NSwgMCwgezB4OTAsMHg3ZiwweDk2LDB4ZTAsMHhmYSwweDkwLDB4N2YsMHg5NiwweDc0LDB4NDAsMHg2NSwweDAyLDB4ZjAsMHg3Y30gfSwKK3sgIDUsIDB4MGE4MywgMCwgezB4MDAsMHg3ZCwweDAwLDB4ODAsMHgwNX0gfSwKK3sgIDUsIDB4MGE4OCwgMCwgezB4MGMsMHhiYywweDAwLDB4MDEsMHgwZH0gfSwKK3sgIDUsIDB4MGE4ZCwgMCwgezB4ZTUsMHgzOCwweGI0LDB4MDEsMHgwZX0gfSwKK3sgMTMsIDB4MGE5MiwgMCwgezB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMiwweDA0LDB4ZjcsMHhkMCwweDA1LDB4ZDAsMHgwNCwweDc1LDB4Mzh9IH0sCit7ICAxLCAweDBhOWYsIDAsIHsweDAwfSB9LAoreyAgNywgMHgwYWEwLCAwLCB7MHhlNSwweDMxLDB4NzAsMHgwMywweDAyLDB4MDksMHgyYX0gfSwKK3sgMTAsIDB4MGFhNywgMCwgezB4OTAsMHg3ZiwweGM5LDB4ZTAsMHhmYSwweDcwLDB4MDMsMHgwMiwweDBjLDB4MmR9IH0sCit7IDE0LCAweDBhYjEsIDAsIHsweDkwLDB4N2YsMHg5NiwweGUwLDB4ZmEsMHg5MCwweDdmLDB4OTYsMHg3NCwweDgwLDB4NjUsMHgwMiwweGYwLDB4OTB9IH0sCit7ICA5LCAweDBhYmYsIDAsIHsweDdkLDB4YzAsMHhlMCwweGZhLDB4YmEsMHgyYywweDAyLDB4ODAsMHgwM30gfSwKK3sgIDMsIDB4MGFjOCwgMCwgezB4MDIsMHgwYiwweDM2fSB9LAoreyAgNSwgMHgwYWNiLCAwLCB7MHg3NSwweDMyLDB4MDAsMHg3YiwweDAwfSB9LAoreyAgMywgMHgwYWQwLCAwLCB7MHhiYiwweDY0LDB4MDB9IH0sCit7ICAyLCAweDBhZDMsIDAsIHsweDUwLDB4MWN9IH0sCit7IDE0LCAweDBhZDUsIDAsIHsweGMwLDB4MDIsMHhjMCwweDAzLDB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMiwweDAxLDB4ZGQsMHhkMCwweDA1LDB4ZDB9IH0sCit7IDEzLCAweDBhZTMsIDAsIHsweDA0LDB4ZDAsMHgwMywweGQwLDB4MDIsMHg5MCwweDg4LDB4MGYsMHhlMCwweGY1LDB4NDcsMHgwYiwweDgwfSB9LAoreyAgMSwgMHgwYWYwLCAwLCB7MHhkZn0gfSwKK3sgMTMsIDB4MGFmMSwgMCwgezB4YzAsMHgwMiwweGMwLDB4MDQsMHhjMCwweDA1LDB4MTIsMHgwNywweDFlLDB4MTIsMHgwMywweGUxLDB4MTJ9IH0sCit7IDEyLCAweDBhZmUsIDAsIHsweDA0LDB4ZjcsMHhkMCwweDA1LDB4ZDAsMHgwNCwweGQwLDB4MDIsMHg3NSwweDZlLDB4MDAsMHg3NX0gfSwKK3sgMTMsIDB4MGIwYSwgMCwgezB4NmYsMHgwMSwweGMwLDB4MDIsMHhjMCwweDA0LDB4YzAsMHgwNSwweDEyLDB4MTEsMHg0NCwweGQwLDB4MDV9IH0sCit7ICA5LCAweDBiMTcsIDAsIHsweGQwLDB4MDQsMHhkMCwweDAyLDB4NzUsMHg3MCwweDRkLDB4NzUsMHg3MX0gfSwKK3sgMTEsIDB4MGIyMCwgMCwgezB4MGMsMHg3NSwweDcyLDB4MDIsMHhjMCwweDAyLDB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMn0gfSwKK3sgMTEsIDB4MGIyYiwgMCwgezB4MTEsMHg3NSwweGQwLDB4MDUsMHhkMCwweDA0LDB4ZDAsMHgwMiwweDAyLDB4MGMsMHgyZH0gfSwKK3sgIDMsIDB4MGIzNiwgMCwgezB4YmEsMHgyYSwweDNifSB9LAoreyAxMywgMHgwYjM5LCAwLCB7MHg5MCwweDdmLDB4OTgsMHg3NCwweDIwLDB4ZjAsMHhjMCwweDAyLDB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMn0gfSwKK3sgMTQsIDB4MGI0NiwgMCwgezB4MDEsMHhkZCwweGQwLDB4MDUsMHhkMCwweDA0LDB4ZDAsMHgwMiwweDkwLDB4N2YsMHg5OCwweDc0LDB4MjgsMHhmMH0gfSwKK3sgIDIsIDB4MGI1NCwgMCwgezB4N2IsMHgwMH0gfSwKK3sgIDMsIDB4MGI1NiwgMCwgezB4YmIsMHgwYSwweDAwfSB9LAoreyAgNSwgMHgwYjU5LCAwLCB7MHg0MCwweDAzLDB4MDIsMHgwYywweDJkfSB9LAoreyAxNCwgMHgwYjVlLCAwLCB7MHhjMCwweDAyLDB4YzAsMHgwMywweGMwLDB4MDQsMHhjMCwweDA1LDB4MTIsMHgwMSwweGRkLDB4ZDAsMHgwNSwweGQwfSB9LAoreyAgOCwgMHgwYjZjLCAwLCB7MHgwNCwweGQwLDB4MDMsMHhkMCwweDAyLDB4MGIsMHg4MCwweGUyfSB9LAoreyAgMywgMHgwYjc0LCAwLCB7MHhiYSwweDJiLDB4MWF9IH0sCit7ICA4LCAweDBiNzcsIDAsIHsweDkwLDB4N2YsMHhjOSwweGUwLDB4ZmIsMHhiYiwweDQwLDB4MTJ9IH0sCit7IDE0LCAweDBiN2YsIDAsIHsweGMwLDB4MDIsMHhjMCwweDA0LDB4YzAsMHgwNSwweDEyLDB4MTIsMHgwNSwweGQwLDB4MDUsMHhkMCwweDA0LDB4ZDB9IH0sCit7ICA0LCAweDBiOGQsIDAsIHsweDAyLDB4MDIsMHgwYywweDJkfSB9LAoreyAgMywgMHgwYjkxLCAwLCB7MHhiYSwweDEwLDB4MWZ9IH0sCit7IDE0LCAweDBiOTQsIDAsIHsweDkwLDB4N2YsMHg5NiwweGUwLDB4ZmIsMHg5MCwweDdmLDB4OTYsMHg3NCwweDgwLDB4NjUsMHgwMywweGYwLDB4YzB9IH0sCit7IDE0LCAweDBiYTIsIDAsIHsweDAyLDB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMiwweDEwLDB4M2QsMHhkMCwweDA1LDB4ZDAsMHgwNCwweGQwLDB4MDJ9IH0sCit7ICAzLCAweDBiYjAsIDAsIHsweDAyLDB4MGMsMHgyZH0gfSwKK3sgIDMsIDB4MGJiMywgMCwgezB4YmEsMHgxMSwweDEyfSB9LAoreyAxNCwgMHgwYmI2LCAwLCB7MHhjMCwweDAyLDB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMiwweDEwLDB4NmEsMHhkMCwweDA1LDB4ZDAsMHgwNCwweGQwfSB9LAoreyAgNCwgMHgwYmM0LCAwLCB7MHgwMiwweDAyLDB4MGMsMHgyZH0gfSwKK3sgIDMsIDB4MGJjOCwgMCwgezB4YmEsMHgxMiwweDEyfSB9LAoreyAxNCwgMHgwYmNiLCAwLCB7MHhjMCwweDAyLDB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMiwweDEwLDB4OGYsMHhkMCwweDA1LDB4ZDAsMHgwNCwweGQwfSB9LAoreyAgNCwgMHgwYmQ5LCAwLCB7MHgwMiwweDAyLDB4MGMsMHgyZH0gfSwKK3sgIDMsIDB4MGJkZCwgMCwgezB4YmEsMHgxMywweDBifSB9LAoreyAxMSwgMHgwYmUwLCAwLCB7MHg5MCwweDdkLDB4YzEsMHhlMCwweGZiLDB4OTAsMHg4OCwweDAwLDB4ZjAsMHg4MCwweDQyfSB9LAoreyAgMywgMHgwYmViLCAwLCB7MHhiYSwweDE0LDB4MTF9IH0sCit7IDE0LCAweDBiZWUsIDAsIHsweGMwLDB4MDIsMHhjMCwweDA0LDB4YzAsMHgwNSwweDEyLDB4MTEsMHhkZCwweGQwLDB4MDUsMHhkMCwweDA0LDB4ZDB9IH0sCit7ICAzLCAweDBiZmMsIDAsIHsweDAyLDB4ODAsMHgyZX0gfSwKK3sgIDMsIDB4MGJmZiwgMCwgezB4YmEsMHgxNSwweDFkfSB9LAoreyAxMiwgMHgwYzAyLCAwLCB7MHg5MCwweDdkLDB4YzEsMHhlMCwweGY1LDB4NzUsMHg5MCwweDdkLDB4YzIsMHhlMCwweGY1LDB4NzZ9IH0sCit7IDE0LCAweDBjMGUsIDAsIHsweGMwLDB4MDIsMHhjMCwweDA0LDB4YzAsMHgwNSwweDEyLDB4MTMsMHhmZSwweGQwLDB4MDUsMHhkMCwweDA0LDB4ZDB9IH0sCit7ICAzLCAweDBjMWMsIDAsIHsweDAyLDB4ODAsMHgwZX0gfSwKK3sgIDMsIDB4MGMxZiwgMCwgezB4YmEsMHgxNiwweDBifSB9LAoreyAxMSwgMHgwYzIyLCAwLCB7MHhjMCwweDA0LDB4YzAsMHgwNSwweDEyLDB4MTMsMHhhMywweGQwLDB4MDUsMHhkMCwweDA0fSB9LAoreyAxMSwgMHgwYzJkLCAwLCB7MHg5MCwweDdmLDB4YzksMHhlNCwweGYwLDB4NzUsMHgzMSwweDAwLDB4MDIsMHgwOSwweDJhfSB9LAoreyAgMSwgMHgwYzM4LCAwLCB7MHgyMn0gfSwKK3sgIDcsIDB4MGMzOSwgMCwgezB4NTMsMHg1NSwweDUwLDB4NDUsMHg0ZSwweDQ0LDB4MDB9IH0sCit7ICA3LCAweDBjNDAsIDAsIHsweDUyLDB4NDUsMHg1MywweDU1LDB4NGQsMHg0NSwweDAwfSB9LAoreyAgNiwgMHgwYzQ3LCAwLCB7MHgyMCwweDU2LDB4NmYsMHg2YywweDIwLDB4MDB9IH0sCit7IDEzLCAweDBjNGQsIDAsIHsweDQ0LDB4NDEsMHg0MiwweDU1LDB4NTMsMHg0MiwweDIwLDB4NzYsMHgzMSwweDJlLDB4MzAsMHgzMCwweDAwfSB9LAoreyAxNCwgMHgwYzVhLCAwLCB7MHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHgwMiwweGMwLDB4MDMsMHhjMCwweDA0fSB9LAoreyAxNCwgMHgwYzY4LCAwLCB7MHhjMCwweDA1LDB4YzAsMHgwNiwweGMwLDB4MDcsMHhjMCwweDAwLDB4YzAsMHgwMSwweGMwLDB4ZDAsMHg3NSwweGQwfSB9LAoreyAxMywgMHgwYzc2LCAwLCB7MHgwMCwweGMwLDB4ODYsMHg3NSwweDg2LDB4MDAsMHhlNSwweDkxLDB4YzIsMHhlNCwweGY1LDB4OTEsMHg5MH0gfSwKK3sgMTQsIDB4MGM4MywgMCwgezB4N2YsMHhhYiwweDc0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHhlOCwweGUwLDB4ZmEsMHg5MCwweDdmLDB4ZTksMHhlMH0gfSwKK3sgIDYsIDB4MGM5MSwgMCwgezB4ZmIsMHhiYiwweDAwLDB4MDIsMHg4MCwweDAzfSB9LAoreyAgMywgMHgwYzk3LCAwLCB7MHgwMiwweDBkLDB4Mzh9IH0sCit7ICAzLCAweDBjOWEsIDAsIHsweGJhLDB4ODAsMHgxNH0gfSwKK3sgMTQsIDB4MGM5ZCwgMCwgezB4OTAsMHg3ZiwweDAwLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3ZiwweDAxLDB4ZTQsMHhmMCwweDkwLDB4N2YsMHhiNX0gfSwKK3sgIDYsIDB4MGNhYiwgMCwgezB4NzQsMHgwMiwweGYwLDB4MDIsMHgwZSwweGNkfSB9LAoreyAgNSwgMHgwY2IxLCAwLCB7MHhiYSwweDgyLDB4MDIsMHg4MCwweDAzfSB9LAoreyAgMywgMHgwY2I2LCAwLCB7MHgwMiwweDBkLDB4MWR9IH0sCit7ICA4LCAweDBjYjksIDAsIHsweDkwLDB4N2YsMHhlYywweGUwLDB4ZmMsMHhiYywweDAxLDB4MDB9IH0sCit7ICAyLCAweDBjYzEsIDAsIHsweDQwLDB4MjF9IH0sCit7ICA2LCAweDBjYzMsIDAsIHsweGMzLDB4NzQsMHgwNywweDljLDB4NDAsMHgxYn0gfSwKK3sgMTQsIDB4MGNjOSwgMCwgezB4ZWMsMHgyNCwweGZmLDB4MjUsMHhlMCwweGZkLDB4MjQsMHhjNiwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNX0gfSwKK3sgMTMsIDB4MGNkNywgMCwgezB4ODMsMHhlMCwweGZkLDB4NTMsMHgwNSwweDAxLDB4OTAsMHg3ZiwweDAwLDB4ZWQsMHhmMCwweDgwLDB4MmJ9IH0sCit7ICAzLCAweDBjZTQsIDAsIHsweGJjLDB4ODEsMHgwMH0gfSwKK3sgIDIsIDB4MGNlNywgMCwgezB4NDAsMHgyMX0gfSwKK3sgIDYsIDB4MGNlOSwgMCwgezB4YzMsMHg3NCwweDg3LDB4OWMsMHg0MCwweDFifSB9LAoreyAxNCwgMHgwY2VmLCAwLCB7MHhlYywweDI0LDB4N2YsMHgyNSwweGUwLDB4ZmMsMHgyNCwweGI2LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1fSB9LAoreyAxMywgMHgwY2ZkLCAwLCB7MHg4MywweGUwLDB4ZmMsMHg1MywweDA0LDB4MDEsMHg5MCwweDdmLDB4MDAsMHhlYywweGYwLDB4ODAsMHgwNX0gfSwKK3sgIDUsIDB4MGQwYSwgMCwgezB4OTAsMHg3ZiwweDAwLDB4ZTQsMHhmMH0gfSwKK3sgMTQsIDB4MGQwZiwgMCwgezB4OTAsMHg3ZiwweDAxLDB4ZTQsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDIsMHhmMCwweDAyLDB4MGUsMHhjZH0gfSwKK3sgIDUsIDB4MGQxZCwgMCwgezB4YmEsMHg4MSwweDAyLDB4ODAsMHgwM30gfSwKK3sgIDMsIDB4MGQyMiwgMCwgezB4MDIsMHgwZSwweGM1fSB9LAoreyAxNCwgMHgwZDI1LCAwLCB7MHg5MCwweDdmLDB4MDAsMHhlNCwweGYwLDB4OTAsMHg3ZiwweDAxLDB4ZTQsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0fSB9LAoreyAgNSwgMHgwZDMzLCAwLCB7MHgwMiwweGYwLDB4MDIsMHgwZSwweGNkfSB9LAoreyAgMywgMHgwZDM4LCAwLCB7MHhiYiwweDAxLDB4MmR9IH0sCit7ICA2LCAweDBkM2IsIDAsIHsweGJhLDB4MDAsMHgwMywweDAyLDB4MGUsMHhjZH0gfSwKK3sgIDMsIDB4MGQ0MSwgMCwgezB4YmEsMHgwMiwweDExfSB9LAoreyAxMywgMHgwZDQ0LCAwLCB7MHg3NSwweDU5LDB4MDAsMHhjMCwweDAyLDB4YzAsMHgwMywweDEyLDB4MGUsMHhmMCwweGQwLDB4MDMsMHhkMH0gfSwKK3sgIDQsIDB4MGQ1MSwgMCwgezB4MDIsMHgwMiwweDBlLDB4Y2R9IH0sCit7ICA1LCAweDBkNTUsIDAsIHsweGJhLDB4MjEsMHgwMiwweDgwLDB4MDN9IH0sCit7ICAzLCAweDBkNWEsIDAsIHsweDAyLDB4MGUsMHhjZH0gfSwKK3sgMTEsIDB4MGQ1ZCwgMCwgezB4NzUsMHgzNywweDAxLDB4OTAsMHg3ZiwweGM1LDB4ZTQsMHhmMCwweDAyLDB4MGUsMHhjZH0gfSwKK3sgIDMsIDB4MGQ2OCwgMCwgezB4YmIsMHgwMywweDFmfSB9LAoreyAgNiwgMHgwZDZiLCAwLCB7MHhiYSwweDAwLDB4MDMsMHgwMiwweDBlLDB4Y2R9IH0sCit7ICA1LCAweDBkNzEsIDAsIHsweGJhLDB4MDIsMHgwMiwweDgwLDB4MDN9IH0sCit7ICAzLCAweDBkNzYsIDAsIHsweDAyLDB4MGUsMHhjZH0gfSwKK3sgMTMsIDB4MGQ3OSwgMCwgezB4NzUsMHg1OSwweDAxLDB4YzAsMHgwMiwweGMwLDB4MDMsMHgxMiwweDBlLDB4ZjAsMHhkMCwweDAzLDB4ZDB9IH0sCit7ICA0LCAweDBkODYsIDAsIHsweDAyLDB4MDIsMHgwZSwweGNkfSB9LAoreyAgMywgMHgwZDhhLCAwLCB7MHhiYiwweDA2LDB4NTR9IH0sCit7ICA1LCAweDBkOGQsIDAsIHsweGJhLDB4ODAsMHgwMiwweDgwLDB4MDN9IH0sCit7ICAzLCAweDBkOTIsIDAsIHsweDAyLDB4MGUsMHhjNX0gfSwKK3sgIDgsIDB4MGQ5NSwgMCwgezB4OTAsMHg3ZiwweGViLDB4ZTAsMHhmYywweGJjLDB4MDEsMHgxNX0gfSwKK3sgMTIsIDB4MGQ5ZCwgMCwgezB4N2MsMHhmYiwweDdkLDB4MGYsMHg4ZCwweDA2LDB4N2YsMHgwMCwweDkwLDB4N2YsMHhkNCwweGVlfSB9LAoreyAgOSwgMHgwZGE5LCAwLCB7MHhmMCwweDkwLDB4N2YsMHhkNSwweGVjLDB4ZjAsMHgwMiwweDBlLDB4Y2R9IH0sCit7IDEwLCAweDBkYjIsIDAsIHsweDkwLDB4N2YsMHhlYiwweGUwLDB4ZmMsMHhiYywweDAyLDB4MDIsMHg4MCwweDAzfSB9LAoreyAgMywgMHgwZGJjLCAwLCB7MHgwMiwweDBlLDB4YzV9IH0sCit7IDEwLCAweDBkYmYsIDAsIHsweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmMsMHhiYywweDAwLDB4MDIsMHg4MCwweDAzfSB9LAoreyAgMywgMHgwZGM5LCAwLCB7MHgwMiwweDBlLDB4YzV9IH0sCit7IDEyLCAweDBkY2MsIDAsIHsweDdjLDB4M2IsMHg3ZCwweDBmLDB4OGQsMHgwNiwweDdmLDB4MDAsMHg5MCwweDdmLDB4ZDQsMHhlZX0gfSwKK3sgIDksIDB4MGRkOCwgMCwgezB4ZjAsMHg5MCwweDdmLDB4ZDUsMHhlYywweGYwLDB4MDIsMHgwZSwweGNkfSB9LAoreyAgNiwgMHgwZGUxLCAwLCB7MHhiYiwweDA3LDB4MDMsMHgwMiwweDBlLDB4YzV9IH0sCit7ICAzLCAweDBkZTcsIDAsIHsweGJiLDB4MDgsMHgxMH0gfSwKK3sgMTMsIDB4MGRlYSwgMCwgezB4YWMsMHg0OCwweDkwLDB4N2YsMHgwMCwweGVjLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAxLDB4ZjB9IH0sCit7ICAzLCAweDBkZjcsIDAsIHsweDAyLDB4MGUsMHhjZH0gfSwKK3sgIDMsIDB4MGRmYSwgMCwgezB4YmIsMHgwOSwweDMxfSB9LAoreyAgNSwgMHgwZGZkLCAwLCB7MHhiYSwweDAwLDB4MDIsMHg4MCwweDAzfSB9LAoreyAgMywgMHgwZTAyLCAwLCB7MHgwMiwweDBlLDB4YzV9IH0sCit7IDE0LCAweDBlMDUsIDAsIHsweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmMsMHhjMywweDc0LDB4MDEsMHg5YywweDUwLDB4MDMsMHgwMiwweDBlLDB4YzV9IH0sCit7ICA4LCAweDBlMTMsIDAsIHsweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmMsMHhiYywweDAwLDB4MGF9IH0sCit7IDEwLCAweDBlMWIsIDAsIHsweDkwLDB4MTcsMHgyMSwweGU0LDB4ZjAsMHg5MCwweDE3LDB4MjIsMHhlNCwweGYwfSB9LAoreyAgOSwgMHgwZTI1LCAwLCB7MHg5MCwweDdmLDB4ZWEsMHhlMCwweGY1LDB4NDgsMHgwMiwweDBlLDB4Y2R9IH0sCit7ICAzLCAweDBlMmUsIDAsIHsweGJiLDB4MGEsMHgyN30gfSwKK3sgIDUsIDB4MGUzMSwgMCwgezB4YmEsMHg4MSwweDAyLDB4ODAsMHgwM30gfSwKK3sgIDMsIDB4MGUzNiwgMCwgezB4MDIsMHgwZSwweGM1fSB9LAoreyAxNCwgMHgwZTM5LCAwLCB7MHg5MCwweDdmLDB4ZWMsMHhlMCwweGZhLDB4MjQsMHgyMCwweGZhLDB4ZTQsMHgzNCwweDE3LDB4ZmMsMHg4YSwweDgyfSB9LAoreyAxNCwgMHgwZTQ3LCAwLCB7MHg4YywweDgzLDB4ZTAsMHhmYSwweDkwLDB4N2YsMHgwMCwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMSwweGYwfSB9LAoreyAgMywgMHgwZTU1LCAwLCB7MHgwMiwweDBlLDB4Y2R9IH0sCit7ICA1LCAweDBlNTgsIDAsIHsweGJiLDB4MGIsMHgwMiwweDgwLDB4MDN9IH0sCit7ICAzLCAweDBlNWQsIDAsIHsweDAyLDB4MGUsMHhhOX0gfSwKK3sgMTMsIDB4MGU2MCwgMCwgezB4OTAsMHgxNywweDIwLDB4ZTQsMHhmMCwweDkwLDB4N2YsMHhlYywweGUwLDB4ZmEsMHhiYSwweDAxLDB4MWF9IH0sCit7ICA4LCAweDBlNmQsIDAsIHsweDkwLDB4N2YsMHhlZCwweGUwLDB4ZmEsMHhiYSwweDAwLDB4MTJ9IH0sCit7IDE0LCAweDBlNzUsIDAsIHsweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmEsMHg5MCwweDE3LDB4MjEsMHhmMCwweGMwLDB4MDMsMHgxMiwweDA0LDB4ZTJ9IH0sCit7ICA0LCAweDBlODMsIDAsIHsweGQwLDB4MDMsMHg4MCwweDQ2fSB9LAoreyAgOCwgMHgwZTg3LCAwLCB7MHg5MCwweDdmLDB4ZWMsMHhlMCwweGZhLDB4YmEsMHgwMiwweDNlfSB9LAoreyAgOCwgMHgwZThmLCAwLCB7MHg5MCwweDdmLDB4ZWQsMHhlMCwweGZhLDB4YmEsMHgwMCwweDM2fSB9LAoreyAxMywgMHgwZTk3LCAwLCB7MHhjMCwweDAzLDB4MTIsMHgwNCwweGVmLDB4ZDAsMHgwMywweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmEsMHg5MH0gfSwKK3sgIDUsIDB4MGVhNCwgMCwgezB4MTcsMHgyMiwweGYwLDB4ODAsMHgyNH0gfSwKK3sgIDUsIDB4MGVhOSwgMCwgezB4YmIsMHgxMiwweDAyLDB4ODAsMHgxN30gfSwKK3sgIDUsIDB4MGVhZSwgMCwgezB4YmIsMHg4MSwweDAyLDB4ODAsMHgwZH0gfSwKK3sgIDUsIDB4MGViMywgMCwgezB4YmIsMHg4MywweDAyLDB4ODAsMHgwOH0gfSwKK3sgIDUsIDB4MGViOCwgMCwgezB4YmIsMHg4MiwweDAyLDB4ODAsMHgwM30gfSwKK3sgIDMsIDB4MGViZCwgMCwgezB4YmIsMHg4NCwweDA1fSB9LAoreyAgNSwgMHgwZWMwLCAwLCB7MHgxMiwweDA2LDB4NGUsMHg4MCwweDA4fSB9LAoreyAgOCwgMHgwZWM1LCAwLCB7MHg5MCwweDdmLDB4YjQsMHg3NCwweDAzLDB4ZjAsMHg4MCwweDA2fSB9LAoreyAgNiwgMHgwZWNkLCAwLCB7MHg5MCwweDdmLDB4YjQsMHg3NCwweDAyLDB4ZjB9IH0sCit7ICAyLCAweDBlZDMsIDAsIHsweGQwLDB4ODZ9IH0sCit7IDE0LCAweDBlZDUsIDAsIHsweGQwLDB4ZDAsMHhkMCwweDAxLDB4ZDAsMHgwMCwweGQwLDB4MDcsMHhkMCwweDA2LDB4ZDAsMHgwNSwweGQwLDB4MDR9IH0sCit7IDEzLCAweDBlZTMsIDAsIHsweGQwLDB4MDMsMHhkMCwweDAyLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGYwLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAxMSwgMHgwZWYwLCAwLCB7MHg5MCwweDdmLDB4ZWMsMHhlMCwweGY1LDB4NWEsMHhjMywweDk0LDB4MDEsMHg0MCwweDFkfSB9LAoreyAgNywgMHgwZWZiLCAwLCB7MHhjMywweDc0LDB4MDcsMHg5NSwweDVhLDB4NDAsMHgxNn0gfSwKK3sgMTMsIDB4MGYwMiwgMCwgezB4ZTUsMHg1YSwweDI0LDB4ZmYsMHgyNSwweGUwLDB4ZmEsMHgyNCwweGM2LDB4ZjUsMHg4MiwweGU0LDB4MzR9IH0sCit7ICA5LCAweDBmMGYsIDAsIHsweDdmLDB4ZjUsMHg4MywweGFhLDB4NTksMHhlYSwweGYwLDB4ODAsMHgyMn0gfSwKK3sgIDcsIDB4MGYxOCwgMCwgezB4YzMsMHhlNSwweDVhLDB4OTQsMHg4MSwweDQwLDB4MWJ9IH0sCit7ICA3LCAweDBmMWYsIDAsIHsweGMzLDB4NzQsMHg4NywweDk1LDB4NWEsMHg0MCwweDE0fSB9LAoreyAxMywgMHgwZjI2LCAwLCB7MHhlNSwweDVhLDB4MjQsMHhmZiwweDI1LDB4ZTAsMHhmYSwweDI0LDB4YjYsMHhmNSwweDgyLDB4ZTQsMHgzNH0gfSwKK3sgIDcsIDB4MGYzMywgMCwgezB4N2YsMHhmNSwweDgzLDB4YWEsMHg1OSwweGVhLDB4ZjB9IH0sCit7ICAxLCAweDBmM2EsIDAsIHsweDIyfSB9LAoreyAxNCwgMHgwZjNiLCAwLCB7MHgwOSwweDAyLDB4YmEsMHgwMCwweDAzLDB4MDEsMHgwMCwweDQwLDB4MDAsMHgwOSwweDA0LDB4MDAsMHgwMCwweDAwfSB9LAoreyAxNCwgMHgwZjQ5LCAwLCB7MHgwMSwweDAxLDB4MDAsMHgwMCwweDA5LDB4MjQsMHgwMSwweDAwLDB4MDEsMHgzZCwweDAwLDB4MDEsMHgwMSwweDBjfSB9LAoreyAxNCwgMHgwZjU3LCAwLCB7MHgyNCwweDAyLDB4MDEsMHgxMCwweDA3LDB4MDAsMHgwMiwweDAzLDB4MDAsMHgwMCwweDAwLDB4MGQsMHgyNCwweDA2fSB9LAoreyAxNCwgMHgwZjY1LCAwLCB7MHgwMywweDAxLDB4MDIsMHgxNSwweDAwLDB4MDMsMHgwMCwweDAzLDB4MDAsMHgwMCwweDA5LDB4MjQsMHgwMywweDAyfSB9LAoreyAxNCwgMHgwZjczLCAwLCB7MHgwMSwweDAxLDB4MDAsMHgwMSwweDAwLDB4MDksMHgyNCwweDAzLDB4MDQsMHgwMiwweDAzLDB4MDAsMHgwMywweDAwfSB9LAoreyAxNCwgMHgwZjgxLCAwLCB7MHgwOSwweDI0LDB4MDMsMHgwNSwweDAzLDB4MDYsMHgwMCwweDAxLDB4MDAsMHgwOSwweDA0LDB4MDEsMHgwMCwweDAwfSB9LAoreyAxNCwgMHgwZjhmLCAwLCB7MHgwMSwweDAyLDB4MDAsMHgwMCwweDA5LDB4MDQsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAyLDB4MDAsMHgwMCwweDA3fSB9LAoreyAxNCwgMHgwZjlkLCAwLCB7MHgyNCwweDAxLDB4MDIsMHgwMSwweDAxLDB4MDAsMHgwYiwweDI0LDB4MDIsMHgwMSwweDAyLDB4MDIsMHgxMCwweDAxfSB9LAoreyAxNCwgMHgwZmFiLCAwLCB7MHg4MCwweGJiLDB4MDAsMHgwOSwweDA1LDB4ODgsMHgwNSwweDAwLDB4MDEsMHgwMSwweDAwLDB4MDAsMHgwNywweDI1fSB9LAoreyAxNCwgMHgwZmI5LCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDksMHgwNCwweDAyLDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAxNCwgMHgwZmM3LCAwLCB7MHgwNywweDA1LDB4ODIsMHgwMiwweDQwLDB4MDAsMHgwMCwweDA3LDB4MDUsMHgwMiwweDAyLDB4NDAsMHgwMCwweDAwfSB9LAoreyAxNCwgMHgwZmQ1LCAwLCB7MHgwOSwweDA0LDB4MDIsMHgwMSwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNywweDA1LDB4ODIsMHgwMiwweDQwfSB9LAoreyAxNCwgMHgwZmUzLCAwLCB7MHgwMCwweDAwLDB4MDcsMHgwNSwweDAyLDB4MDIsMHg0MCwweDAwLDB4MDAsMHgwOSwweDA1LDB4ODksMHgwNSwweGEwfSB9LAoreyAxMCwgMHgwZmYxLCAwLCB7MHgwMSwweDAxLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHgwMH0gfSwKK3sgMTQsIDB4MGZmYiwgMCwgezB4MTIsMHgwMSwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQ3LDB4MDUsMHg5OSwweDk5LDB4MDAsMHgwMX0gfSwKK3sgMTQsIDB4MTAwOSwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA5LDB4MDIsMHhiYX0gfSwKK3sgIDQsIDB4MTAxNywgMCwgezB4MDAsMHgwMywweDAxLDB4MDB9IH0sCit7ICAyLCAweDEwMWIsIDAsIHsweDdhLDB4MDB9IH0sCit7ICAzLCAweDEwMWQsIDAsIHsweGJhLDB4MDUsMHgwMH0gfSwKK3sgIDIsIDB4MTAyMCwgMCwgezB4NTAsMHgxN30gfSwKK3sgIDgsIDB4MTAyMiwgMCwgezB4OTAsMHg3ZiwweGE1LDB4ZTAsMHhmYiwweDMwLDB4ZTAsMHgwNX0gfSwKK3sgIDUsIDB4MTAyYSwgMCwgezB4OTAsMHgwMCwweDAxLDB4ODAsMHgwZH0gfSwKK3sgMTAsIDB4MTAyZiwgMCwgezB4YzAsMHgwMiwweDEyLDB4MDEsMHhkZCwweGQwLDB4MDIsMHgwYSwweDgwLDB4ZTR9IH0sCit7ICAzLCAweDEwMzksIDAsIHsweDkwLDB4MDAsMHgwMX0gfSwKK3sgIDEsIDB4MTAzYywgMCwgezB4MjJ9IH0sCit7IDE0LCAweDEwM2QsIDAsIHsweDkwLDB4N2QsMHhjMSwweGUwLDB4ZjksMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZmIsMHg3YywweDAwLDB4N2R9IH0sCit7ICA0LCAweDEwNGIsIDAsIHsweDdlLDB4ZWIsMHg2MCwweDEyfSB9LAoreyAxNCwgMHgxMDRmLCAwLCB7MHg4OSwweDgyLDB4OGEsMHg4MywweGUwLDB4YTMsMHhhOSwweDgyLDB4YWEsMHg4MywweDhjLDB4ODIsMHg4ZCwweDgzfSB9LAoreyAgNCwgMHgxMDVkLCAwLCB7MHhmMCwweDBjLDB4ZGIsMHhlZX0gfSwKK3sgIDgsIDB4MTA2MSwgMCwgezB4OTAsMHg3ZCwweGMzLDB4ZTAsMHg5MCwweDdmLDB4YjksMHhmMH0gfSwKK3sgIDEsIDB4MTA2OSwgMCwgezB4MjJ9IH0sCit7IDE0LCAweDEwNmEsIDAsIHsweDkwLDB4N2QsMHhjMSwweGUwLDB4ZjksMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZmIsMHg3YywweGM0LDB4N2R9IH0sCit7ICA0LCAweDEwNzgsIDAsIHsweDdkLDB4ZWIsMHg2MCwweGU1fSB9LAoreyAxNCwgMHgxMDdjLCAwLCB7MHg4YywweDgyLDB4OGQsMHg4MywweGUwLDB4MGMsMHg4OSwweDgyLDB4OGEsMHg4MywweGYwLDB4YTMsMHhhOSwweDgyfSB9LAoreyAgNCwgMHgxMDhhLCAwLCB7MHhhYSwweDgzLDB4ZGIsMHhlZX0gfSwKK3sgIDEsIDB4MTA4ZSwgMCwgezB4MjJ9IH0sCit7IDE0LCAweDEwOGYsIDAsIHsweDkwLDB4N2YsMHhhNSwweDc0LDB4ODAsMHhmMCwweDA1LDB4ODYsMHg5MCwweDdkLDB4YzEsMHhlMCwweDA1LDB4ODZ9IH0sCit7IDE0LCAweDEwOWQsIDAsIHsweGEzLDB4ZjAsMHgxMiwweDEwLDB4MWIsMHg5MCwweDdmLDB4YTYsMHgwNSwweDg2LDB4YTMsMHhhMywweGUwLDB4Zjl9IH0sCit7ICA1LCAweDEwYWIsIDAsIHsweDYwLDB4MTYsMHhhMywweDA1LDB4ODZ9IH0sCit7IDEzLCAweDEwYjAsIDAsIHsweDkwLDB4N2YsMHhhNiwweDA1LDB4ODYsMHhlMCwweGEzLDB4MDUsMHg4NiwweGYwLDB4YzAsMHgwMSwweDEyfSB9LAoreyAgNiwgMHgxMGJkLCAwLCB7MHgxMCwweDFiLDB4ZDAsMHgwMSwweGQ5LDB4ZWR9IH0sCit7ICA2LCAweDEwYzMsIDAsIHsweDkwLDB4N2YsMHhhNSwweDc0LDB4NDAsMHhmMH0gfSwKK3sgIDEsIDB4MTBjOSwgMCwgezB4MjJ9IH0sCit7ICA4LCAweDEwY2EsIDAsIHsweDkwLDB4ODgsMHgwMiwweDc0LDB4MDEsMHhmMCwweDdhLDB4MDB9IH0sCit7ICAzLCAweDEwZDIsIDAsIHsweGJhLDB4ZmYsMHgwMH0gfSwKK3sgIDIsIDB4MTBkNSwgMCwgezB4NTAsMHgwYX0gfSwKK3sgMTAsIDB4MTBkNywgMCwgezB4YzAsMHgwMiwweDEyLDB4MDEsMHhkZCwweGQwLDB4MDIsMHgwYSwweDgwLDB4ZjF9IH0sCit7ICAxLCAweDEwZTEsIDAsIHsweDIyfSB9LAoreyAgNSwgMHgxMGUyLCAwLCB7MHhlNSwweDZiLDB4YjQsMHhjMCwweDA4fSB9LAoreyAgOCwgMHgxMGU3LCAwLCB7MHg5MCwweDg4LDB4MDMsMHhlNSwweDZjLDB4ZjAsMHg4MCwweDA2fSB9LAoreyAgNiwgMHgxMGVmLCAwLCB7MHg5MCwweDg4LDB4MDIsMHhlNSwweDZjLDB4ZjB9IH0sCit7ICA0LCAweDEwZjUsIDAsIHsweDdhLDB4MDAsMHg3YiwweDAwfSB9LAoreyAxMSwgMHgxMGY5LCAwLCB7MHhjMywweGVhLDB4OTQsMHgzMiwweGViLDB4NjQsMHg4MCwweDk0LDB4ODAsMHg1MCwweDA3fSB9LAoreyAgNSwgMHgxMTA0LCAwLCB7MHgwYSwweGJhLDB4MDAsMHgwMSwweDBifSB9LAoreyAgMiwgMHgxMTA5LCAwLCB7MHg4MCwweGVlfSB9LAoreyAgMSwgMHgxMTBiLCAwLCB7MHgyMn0gfSwKK3sgMTAsIDB4MTEwYywgMCwgezB4OTAsMHg4OCwweDAzLDB4ZTUsMHg2ZCwweGYwLDB4MDUsMHgzOSwweDdhLDB4MDB9IH0sCit7ICAzLCAweDExMTYsIDAsIHsweGJhLDB4MjgsMHgwMH0gfSwKK3sgIDIsIDB4MTExOSwgMCwgezB4NTAsMHgwM30gfSwKK3sgIDMsIDB4MTExYiwgMCwgezB4MGEsMHg4MCwweGY4fSB9LAoreyAgNSwgMHgxMTFlLCAwLCB7MHhlNSwweDM5LDB4YjQsMHgxMCwweDA4fSB9LAoreyAgOCwgMHgxMTIzLCAwLCB7MHg5MCwweDg4LDB4MDIsMHg3NCwweGMwLDB4ZjAsMHg4MCwweDBlfSB9LAoreyAgNSwgMHgxMTJiLCAwLCB7MHhlNSwweDM5LDB4YjQsMHgyMCwweDA5fSB9LAoreyAgOSwgMHgxMTMwLCAwLCB7MHg5MCwweDg4LDB4MDIsMHg3NCwweDgwLDB4ZjAsMHg3NSwweDM5LDB4MDB9IH0sCit7ICAyLCAweDExMzksIDAsIHsweDdhLDB4MDB9IH0sCit7ICAzLCAweDExM2IsIDAsIHsweGJhLDB4MjgsMHgwMH0gfSwKK3sgIDIsIDB4MTEzZSwgMCwgezB4NTAsMHgwM30gfSwKK3sgIDMsIDB4MTE0MCwgMCwgezB4MGEsMHg4MCwweGY4fSB9LAoreyAgMSwgMHgxMTQzLCAwLCB7MHgyMn0gfSwKK3sgIDQsIDB4MTE0NCwgMCwgezB4ZTUsMHg2ZiwweDYwLDB4MDJ9IH0sCit7ICAyLCAweDExNDgsIDAsIHsweDgwLDB4MDd9IH0sCit7ICA3LCAweDExNGEsIDAsIHsweDdhLDB4MDAsMHg3NSwweDM5LDB4MDAsMHg4MCwweDA1fSB9LAoreyAgNSwgMHgxMTUxLCAwLCB7MHg3YSwweDQwLDB4NzUsMHgzOSwweDEwfSB9LAoreyAgOSwgMHgxMTU2LCAwLCB7MHhlNSwweDZlLDB4MmEsMHhmYSwweGU1LDB4NmUsMHgyNSwweDM5LDB4ZjV9IH0sCit7IDEwLCAweDExNWYsIDAsIHsweDM5LDB4OTAsMHg4OCwweDAyLDB4NzQsMHg4MCwweDJhLDB4ZjAsMHg3YSwweDAwfSB9LAoreyAgOCwgMHgxMTY5LCAwLCB7MHhjMywweGVhLDB4NjQsMHg4MCwweDk0LDB4YTgsMHg1MCwweDAzfSB9LAoreyAgMywgMHgxMTcxLCAwLCB7MHgwYSwweDgwLDB4ZjV9IH0sCit7ICAxLCAweDExNzQsIDAsIHsweDIyfSB9LAoreyAgNiwgMHgxMTc1LCAwLCB7MHhhYSwweDcwLDB4YWIsMHg3MSwweGFjLDB4NzJ9IH0sCit7IDEyLCAweDExN2IsIDAsIHsweDhhLDB4ODIsMHg4YiwweDgzLDB4OGMsMHhmMCwweDEyLDB4MTQsMHhlZSwweGZkLDB4NjAsMHgxOH0gfSwKK3sgMTMsIDB4MTE4NywgMCwgezB4OGQsMHg2ZCwweGMwLDB4MDIsMHhjMCwweDAzLDB4YzAsMHgwNCwweDEyLDB4MTEsMHgwYywweGQwLDB4MDR9IH0sCit7ICA5LCAweDExOTQsIDAsIHsweGQwLDB4MDMsMHhkMCwweDAyLDB4MGEsMHhiYSwweDAwLDB4MDEsMHgwYn0gfSwKK3sgIDIsIDB4MTE5ZCwgMCwgezB4ODAsMHhkY30gfSwKK3sgIDEsIDB4MTE5ZiwgMCwgezB4MjJ9IH0sCit7IDEzLCAweDExYTAsIDAsIHsweGU1LDB4NzMsMHhjNCwweDU0LDB4MGYsMHhmYSwweDUzLDB4MDIsMHgwZiwweGMzLDB4NzQsMHgwOSwweDlhfSB9LAoreyAgMiwgMHgxMWFkLCAwLCB7MHg1MCwweDA2fSB9LAoreyAgNiwgMHgxMWFmLCAwLCB7MHg3NCwweDM3LDB4MmEsMHhmYiwweDgwLDB4MDR9IH0sCit7ICA0LCAweDExYjUsIDAsIHsweDc0LDB4MzAsMHgyYSwweGZifSB9LAoreyAxMiwgMHgxMWI5LCAwLCB7MHg4YiwweDZkLDB4YzAsMHgwMywweDEyLDB4MTEsMHgwYywweGQwLDB4MDMsMHhhYSwweDczLDB4NTN9IH0sCit7ICA4LCAweDExYzUsIDAsIHsweDAyLDB4MGYsMHhjMywweDc0LDB4MDksMHg5YSwweDUwLDB4MDZ9IH0sCit7ICA2LCAweDExY2QsIDAsIHsweDc0LDB4MzcsMHgyYSwweGZiLDB4ODAsMHgwNH0gfSwKK3sgIDQsIDB4MTFkMywgMCwgezB4NzQsMHgzMCwweDJhLDB4ZmJ9IH0sCit7ICA1LCAweDExZDcsIDAsIHsweDhiLDB4NmQsMHgxMiwweDExLDB4MGN9IH0sCit7ICAxLCAweDExZGMsIDAsIHsweDIyfSB9LAoreyAgNywgMHgxMWRkLCAwLCB7MHg5MCwweDdkLDB4YzMsMHhlMCwweGZhLDB4NjAsMHgwZn0gfSwKK3sgMTIsIDB4MTFlNCwgMCwgezB4OTAsMHg3ZCwweGMxLDB4ZTAsMHhmNSwweDZlLDB4OTAsMHg3ZCwweGMyLDB4ZTAsMHhmNSwweDZmfSB9LAoreyAgMywgMHgxMWYwLCAwLCB7MHgxMiwweDExLDB4NDR9IH0sCit7IDEyLCAweDExZjMsIDAsIHsweDkwLDB4N2QsMHhmZiwweGU0LDB4ZjAsMHg3NSwweDcwLDB4YzQsMHg3NSwweDcxLDB4N2QsMHg3NX0gfSwKK3sgIDUsIDB4MTFmZiwgMCwgezB4NzIsMHgwMSwweDEyLDB4MTEsMHg3NX0gfSwKK3sgIDEsIDB4MTIwNCwgMCwgezB4MjJ9IH0sCit7ICAyLCAweDEyMDUsIDAsIHsweDdhLDB4MDR9IH0sCit7ICAzLCAweDEyMDcsIDAsIHsweGJhLDB4NDAsMHgwMH0gfSwKK3sgIDIsIDB4MTIwYSwgMCwgezB4NTAsMHgzNn0gfSwKK3sgMTQsIDB4MTIwYywgMCwgezB4ZWEsMHgyNCwweGMwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZCwweGY1LDB4ODMsMHhlMCwweGZiLDB4N2MsMHgwMH0gfSwKK3sgIDMsIDB4MTIxYSwgMCwgezB4YmMsMHgwOCwweDAwfSB9LAoreyAgMiwgMHgxMjFkLCAwLCB7MHg1MCwweDIwfSB9LAoreyAgNiwgMHgxMjFmLCAwLCB7MHg4YiwweDA1LDB4ZWQsMHgzMCwweGU3LDB4MGJ9IH0sCit7IDExLCAweDEyMjUsIDAsIHsweDkwLDB4N2YsMHg5NiwweDc0LDB4NDIsMHhmMCwweDc0LDB4YzMsMHhmMCwweDgwLDB4MDh9IH0sCit7ICA4LCAweDEyMzAsIDAsIHsweDkwLDB4N2YsMHg5NiwweGU0LDB4ZjAsMHg3NCwweDgxLDB4ZjB9IH0sCit7ICA3LCAweDEyMzgsIDAsIHsweGViLDB4MjUsMHhlMCwweGZiLDB4MGMsMHg4MCwweGRifSB9LAoreyAgMywgMHgxMjNmLCAwLCB7MHgwYSwweDgwLDB4YzV9IH0sCit7ICAxLCAweDEyNDIsIDAsIHsweDIyfSB9LAoreyAgNCwgMHgxMjQzLCAwLCB7MHg3YSwweDAwLDB4N2IsMHhlZn0gfSwKK3sgIDMsIDB4MTI0NywgMCwgezB4YmEsMHgxMCwweDAwfSB9LAoreyAgMiwgMHgxMjRhLCAwLCB7MHg1MCwweDIwfSB9LAoreyAxNCwgMHgxMjRjLCAwLCB7MHg3NCwweDExLDB4MmIsMHhmYiwweDI0LDB4MDAsMHhmYywweGU0LDB4MzQsMHgxOCwweGZkLDB4OGMsMHg4MiwweDhkfSB9LAoreyAxNCwgMHgxMjVhLCAwLCB7MHg4MywweGU0LDB4ZjAsMHhlYSwweDI0LDB4MDAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDE5LDB4ZjUsMHg4MywweGU0fSB9LAoreyAgNCwgMHgxMjY4LCAwLCB7MHhmMCwweDBhLDB4ODAsMHhkYn0gfSwKK3sgIDEsIDB4MTI2YywgMCwgezB4MjJ9IH0sCit7IDE0LCAweDEyNmQsIDAsIHsweDc0LDB4ZjgsMHgyNCwweDAwLDB4ZjUsMHg4MiwweDc0LDB4MDMsMHgzNCwweDg0LDB4ZjUsMHg4MywweGU0LDB4ZjB9IH0sCit7IDE0LCAweDEyN2IsIDAsIHsweDc0LDB4ZjksMHgyNCwweDAwLDB4ZjUsMHg4MiwweDc0LDB4MDMsMHgzNCwweDg0LDB4ZjUsMHg4MywweGU0LDB4ZjB9IH0sCit7IDE0LCAweDEyODksIDAsIHsweDc0LDB4ZmEsMHgyNCwweDAwLDB4ZjUsMHg4MiwweDc0LDB4MDMsMHgzNCwweDg0LDB4ZjUsMHg4MywweGU0LDB4ZjB9IH0sCit7IDE0LCAweDEyOTcsIDAsIHsweDc0LDB4ZmIsMHgyNCwweDAwLDB4ZjUsMHg4MiwweDc0LDB4MDMsMHgzNCwweDg0LDB4ZjUsMHg4MywweGU0LDB4ZjB9IH0sCit7IDE0LCAweDEyYTUsIDAsIHsweDc0LDB4ZmYsMHgyNCwweDAwLDB4ZjUsMHg4MiwweDc0LDB4MDMsMHgzNCwweDg0LDB4ZjUsMHg4MywweGU0LDB4ZjB9IH0sCit7ICAxLCAweDEyYjMsIDAsIHsweDIyfSB9LAoreyAxNCwgMHgxMmI0LCAwLCB7MHgxMiwweDAzLDB4Y2IsMHgxMiwweDEyLDB4NmQsMHg3YSwweGMwLDB4N2IsMHg4NywweDdjLDB4MDEsMHg3NCwweDAxfSB9LAoreyAxNCwgMHgxMmMyLCAwLCB7MHgyYSwweGZkLDB4ZTQsMHgzYiwweGZlLDB4OGMsMHgwNywweDhhLDB4ODIsMHg4YiwweDgzLDB4OGMsMHhmMCwweDc0fSB9LAoreyAxNCwgMHgxMmQwLCAwLCB7MHgwMSwweDEyLDB4MTQsMHhiZiwweDJkLDB4ZmEsMHhlNCwweDNlLDB4ZmIsMHg4ZiwweDA0LDB4OGQsMHg4MiwweDhlfSB9LAoreyAxNCwgMHgxMmRlLCAwLCB7MHg4MywweDhmLDB4ZjAsMHg3NCwweDA2LDB4MTIsMHgxNCwweGJmLDB4NzQsMHgwMSwweDJhLDB4ZmQsMHhlNCwweDNifSB9LAoreyAxNCwgMHgxMmVjLCAwLCB7MHhmZSwweDhjLDB4MDcsMHg4YSwweDgyLDB4OGIsMHg4MywweDhjLDB4ZjAsMHhlNCwweDEyLDB4MTQsMHhiZiwweDc0fSB9LAoreyAxNCwgMHgxMmZhLCAwLCB7MHgwMSwweDJkLDB4ZmEsMHhlNCwweDNlLDB4ZmIsMHg4ZiwweDA0LDB4OGQsMHg4MiwweDhlLDB4ODMsMHg4ZiwweGYwfSB9LAoreyAxNCwgMHgxMzA4LCAwLCB7MHg3NCwweDBiLDB4MTIsMHgxNCwweGJmLDB4NzQsMHgwMSwweDJhLDB4ZmQsMHhlNCwweDNiLDB4ZmUsMHg4YywweDA3fSB9LAoreyAxNCwgMHgxMzE2LCAwLCB7MHg4YSwweDgyLDB4OGIsMHg4MywweDhjLDB4ZjAsMHg3NCwweDA4LDB4MTIsMHgxNCwweGJmLDB4NzQsMHgwMSwweDJkfSB9LAoreyAxNCwgMHgxMzI0LCAwLCB7MHhmYSwweGU0LDB4M2UsMHhmYiwweDhmLDB4MDQsMHg4ZCwweDgyLDB4OGUsMHg4MywweDhmLDB4ZjAsMHg3NCwweDAxfSB9LAoreyAxNCwgMHgxMzMyLCAwLCB7MHgxMiwweDE0LDB4YmYsMHgyYSwweGZkLDB4ZTQsMHgzYiwweGZlLDB4OGMsMHgwNywweDhhLDB4ODIsMHg4YiwweDgzfSB9LAoreyAxNCwgMHgxMzQwLCAwLCB7MHg4YywweGYwLDB4ZTQsMHgxMiwweDE0LDB4YmYsMHg3NCwweDAxLDB4MmQsMHhmYSwweGU0LDB4M2UsMHhmYiwweDhmfSB9LAoreyAxNCwgMHgxMzRlLCAwLCB7MHgwNCwweDhkLDB4ODIsMHg4ZSwweDgzLDB4OGYsMHhmMCwweDc0LDB4MDMsMHgxMiwweDE0LDB4YmYsMHg3ZCwweDAwfSB9LAoreyAgMywgMHgxMzVjLCAwLCB7MHhiZCwweDA2LDB4MDB9IH0sCit7ICAyLCAweDEzNWYsIDAsIHsweDUwLDB4MTJ9IH0sCit7IDExLCAweDEzNjEsIDAsIHsweDhhLDB4ODIsMHg4YiwweDgzLDB4OGMsMHhmMCwweDBhLDB4YmEsMHgwMCwweDAxLDB4MGJ9IH0sCit7ICA3LCAweDEzNmMsIDAsIHsweGU0LDB4MTIsMHgxNCwweGJmLDB4MGQsMHg4MCwweGU5fSB9LAoreyAxMywgMHgxMzczLCAwLCB7MHg4YSwweDgyLDB4OGIsMHg4MywweDhjLDB4ZjAsMHhlNSwweDc0LDB4MTIsMHgxNCwweGJmLDB4NzQsMHhmOX0gfSwKK3sgMTQsIDB4MTM4MCwgMCwgezB4MjQsMHgwMCwweGY1LDB4ODIsMHg3NCwweDAzLDB4MzQsMHg4NCwweGY1LDB4ODMsMHg3NCwweDBmLDB4ZjAsMHg3NH0gfSwKK3sgMTQsIDB4MTM4ZSwgMCwgezB4ZmUsMHgyNCwweDAwLDB4ZjUsMHg4MiwweDc0LDB4MDMsMHgzNCwweDg0LDB4ZjUsMHg4MywweDc0LDB4MDEsMHhmMH0gfSwKK3sgIDYsIDB4MTM5YywgMCwgezB4MTIsMHgwMywweGUxLDB4MTIsMHgwNCwweGY3fSB9LAoreyAgMSwgMHgxM2EyLCAwLCB7MHgyMn0gfSwKK3sgMTMsIDB4MTNhMywgMCwgezB4OTAsMHg3ZCwweGMxLDB4ZTAsMHhmYSwweDI0LDB4MDAsMHhmYiwweGU0LDB4MzQsMHgxOSwweGZjLDB4OTB9IH0sCit7IDE0LCAweDEzYjAsIDAsIHsweDdkLDB4YzIsMHhlMCwweGZkLDB4OGIsMHg4MiwweDhjLDB4ODMsMHhmMCwweDc1LDB4ZjAsMHgxMSwweGVhLDB4YTR9IH0sCit7ICAzLCAweDEzYmUsIDAsIHsweGZhLDB4N2IsMHgwMH0gfSwKK3sgIDMsIDB4MTNjMSwgMCwgezB4YmIsMHgxMCwweDAwfSB9LAoreyAgMiwgMHgxM2M0LCAwLCB7MHg1MCwweDI0fSB9LAoreyAxNCwgMHgxM2M2LCAwLCB7MHhlYSwweDI0LDB4MDAsMHhmYywweGU0LDB4MzQsMHgxOCwweGZkLDB4ZWIsMHgyYywweGZjLDB4ZTQsMHgzZCwweGZkfSB9LAoreyAxNCwgMHgxM2Q0LCAwLCB7MHg3NCwweDA0LDB4MmIsMHgyNCwweGMwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZCwweGY1LDB4ODMsMHhlMCwweGZlfSB9LAoreyAgOCwgMHgxM2UyLCAwLCB7MHg4YywweDgyLDB4OGQsMHg4MywweGYwLDB4MGIsMHg4MCwweGQ3fSB9LAoreyAxNCwgMHgxM2VhLCAwLCB7MHhlYSwweDI0LDB4MDAsMHhmYSwweGU0LDB4MzQsMHgxOCwweGZiLDB4NzQsMHgxMCwweDJhLDB4ZjUsMHg4MiwweGU0fSB9LAoreyAgNSwgMHgxM2Y4LCAwLCB7MHgzYiwweGY1LDB4ODMsMHhlNCwweGYwfSB9LAoreyAgMSwgMHgxM2ZkLCAwLCB7MHgyMn0gfSwKK3sgIDQsIDB4MTNmZSwgMCwgezB4ZTUsMHg3NiwweDYwLDB4MDJ9IH0sCit7ICAyLCAweDE0MDIsIDAsIHsweDgwLDB4MTZ9IH0sCit7IDEyLCAweDE0MDQsIDAsIHsweDc0LDB4MGYsMHg1NSwweDc1LDB4ZmEsMHg4YSwweDc1LDB4MjQsMHgwMCwweGY1LDB4ODIsMHhlNH0gfSwKK3sgMTAsIDB4MTQxMCwgMCwgezB4MzQsMHgxOSwweGY1LDB4ODMsMHhlMCwweGY1LDB4NzQsMHgxMiwweDEyLDB4YjR9IH0sCit7IDEwLCAweDE0MWEsIDAsIHsweDEyLDB4MTAsMHhjYSwweDc1LDB4NmUsMHgwMCwweDc1LDB4NmYsMHgwMCwweDEyfSB9LAoreyAgNiwgMHgxNDI0LCAwLCB7MHgxMSwweDQ0LDB4NzUsMHg3MCwweGI5LDB4NzV9IH0sCit7ICA2LCAweDE0MmEsIDAsIHsweDcxLDB4MTQsMHg3NSwweDcyLDB4MDIsMHgxMn0gfSwKK3sgMTEsIDB4MTQzMCwgMCwgezB4MTEsMHg3NSwweGU1LDB4NzYsMHhiNCwweDAyLDB4MDQsMHg3NCwweDAxLDB4ODAsMHgwMX0gfSwKK3sgIDEsIDB4MTQzYiwgMCwgezB4ZTR9IH0sCit7ICAzLCAweDE0M2MsIDAsIHsweGZhLDB4NzAsMHgwZn0gfSwKK3sgMTIsIDB4MTQzZiwgMCwgezB4NzQsMHgwMSwweDI1LDB4NzUsMHhmNSwweDczLDB4YzAsMHgwMiwweDEyLDB4MTEsMHhhMCwweGQwfSB9LAoreyAgMywgMHgxNDRiLCAwLCB7MHgwMiwweDgwLDB4MGF9IH0sCit7IDEwLCAweDE0NGUsIDAsIHsweDg1LDB4NzUsMHg3MywweGMwLDB4MDIsMHgxMiwweDExLDB4YTAsMHhkMCwweDAyfSB9LAoreyAxMiwgMHgxNDU4LCAwLCB7MHg3NSwweDZlLDB4MDAsMHg3NSwweDZmLDB4MDEsMHhjMCwweDAyLDB4MTIsMHgxMSwweDQ0LDB4ZDB9IH0sCit7ICA0LCAweDE0NjQsIDAsIHsweDAyLDB4ZWEsMHg3MCwweDFhfSB9LAoreyAxMywgMHgxNDY4LCAwLCB7MHg3NSwweGYwLDB4MTEsMHhlNSwweDc1LDB4YTQsMHhmYSwweDI0LDB4MDAsMHhmYSwweGU0LDB4MzQsMHgxOH0gfSwKK3sgIDksIDB4MTQ3NSwgMCwgezB4ZmIsMHg4YSwweDcwLDB4OGIsMHg3MSwweDc1LDB4NzIsMHgwMSwweDEyfSB9LAoreyAgNCwgMHgxNDdlLCAwLCB7MHgxMSwweDc1LDB4ODAsMHgzNn0gfSwKK3sgIDIsIDB4MTQ4MiwgMCwgezB4N2EsMHgwMH0gfSwKK3sgIDMsIDB4MTQ4NCwgMCwgezB4YmEsMHgxMCwweDAwfSB9LAoreyAgMiwgMHgxNDg3LCAwLCB7MHg1MCwweDJmfSB9LAoreyAxMywgMHgxNDg5LCAwLCB7MHhlYSwweDI0LDB4MDAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDE5LDB4ZjUsMHg4MywweGUwLDB4ZmIsMHhlNX0gfSwKK3sgIDQsIDB4MTQ5NiwgMCwgezB4NzUsMHhiNSwweDAzLDB4MWJ9IH0sCit7IDE0LCAweDE0OWEsIDAsIHsweDc1LDB4ZjAsMHgxMSwweGVhLDB4YTQsMHhmYiwweDI0LDB4MDAsMHhmYiwweGU0LDB4MzQsMHgxOCwweGZjLDB4OGJ9IH0sCit7ICA5LCAweDE0YTgsIDAsIHsweDcwLDB4OGMsMHg3MSwweDc1LDB4NzIsMHgwMSwweGMwLDB4MDIsMHgxMn0gfSwKK3sgIDQsIDB4MTRiMSwgMCwgezB4MTEsMHg3NSwweGQwLDB4MDJ9IH0sCit7ICAzLCAweDE0YjUsIDAsIHsweDBhLDB4ODAsMHhjY30gfSwKK3sgIDEsIDB4MTRiOCwgMCwgezB4MjJ9IH0sCit7ICA2LCAweDE0YjksIDAsIHsweDUwLDB4NzIsMHg2ZiwweDY3LDB4MjAsMHgwMH0gfSwKK3sgMTQsIDB4MTRiZiwgMCwgezB4YzgsMHhjMCwweGUwLDB4YzgsMHhjMCwweGUwLDB4ZTUsMHhmMCwweDYwLDB4MGIsMHgxNCwweDYwLDB4MGYsMHgxNH0gfSwKK3sgIDcsIDB4MTRjZCwgMCwgezB4NjAsMHgxMSwweDE0LDB4NjAsMHgxMiwweDgwLDB4MTV9IH0sCit7ICA3LCAweDE0ZDQsIDAsIHsweGQwLDB4ZTAsMHhhOCwweDgyLDB4ZjYsMHg4MCwweDBlfSB9LAoreyAgNSwgMHgxNGRiLCAwLCB7MHhkMCwweGUwLDB4ZjAsMHg4MCwweDA5fSB9LAoreyAgNCwgMHgxNGUwLCAwLCB7MHhkMCwweGUwLDB4ODAsMHgwNX0gfSwKK3sgIDUsIDB4MTRlNCwgMCwgezB4ZDAsMHhlMCwweGE4LDB4ODIsMHhmMn0gfSwKK3sgIDQsIDB4MTRlOSwgMCwgezB4YzgsMHhkMCwweGUwLDB4Yzh9IH0sCit7ICAxLCAweDE0ZWQsIDAsIHsweDIyfSB9LAoreyAxNCwgMHgxNGVlLCAwLCB7MHhjOCwweGMwLDB4ZTAsMHhlNSwweGYwLDB4NjAsMHgwZCwweDE0LDB4NjAsMHgwZiwweDE0LDB4NjAsMHgwZiwweDE0fSB9LAoreyAgNiwgMHgxNGZjLCAwLCB7MHg2MCwweDEwLDB4NzQsMHhmZiwweDgwLDB4MGZ9IH0sCit7ICA1LCAweDE1MDIsIDAsIHsweGE4LDB4ODIsMHhlNiwweDgwLDB4MGF9IH0sCit7ICAzLCAweDE1MDcsIDAsIHsweGUwLDB4ODAsMHgwN30gfSwKK3sgIDQsIDB4MTUwYSwgMCwgezB4ZTQsMHg5MywweDgwLDB4MDN9IH0sCit7ICAzLCAweDE1MGUsIDAsIHsweGE4LDB4ODIsMHhlMn0gfSwKK3sgIDQsIDB4MTUxMSwgMCwgezB4ZjgsMHhkMCwweGUwLDB4Yzh9IH0sCit7ICAxLCAweDE1MTUsIDAsIHsweDIyfSB9LAoreyAgMCwgMHgwMDAwLCAxLCB7MH0gfQorCit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBiaXRzdHJlYW1bXSA9IHsKKworMHgwMCwweDA5LDB4MEYsMHhGMCwweDBGLDB4RjAsMHgwRiwweEYwLCAweDBGLDB4RjAsMHgwMCwweDAwLDB4MDEsMHg2MSwweDAwLDB4MEQsCisweDY0LDB4NjEsMHg2MiwweDc1LDB4NzMsMHg2MiwweDc0LDB4NzIsIDB4MkUsMHg2RSwweDYzLDB4NjQsMHgwMCwweDYyLDB4MDAsMHgwQiwKKzB4NzMsMHgzMSwweDMwLDB4NzgsMHg2QywweDc2LDB4NzEsMHgzMSwgMHgzMCwweDMwLDB4MDAsMHg2MywweDAwLDB4MEIsMHgzMSwweDM5LAorMHgzOSwweDM5LDB4MkYsMHgzMCwweDM5LDB4MkYsMHgzMiwweDM0LCAweDAwLDB4NjQsMHgwMCwweDA5LDB4MzEsMHgzMCwweDNBLDB4MzQsCisweDMyLDB4M0EsMHgzNCwweDM2LDB4MDAsMHg2NSwweDAwLDB4MDAsIDB4MkUsMHhDMCwweEZGLDB4MjAsMHgxNywweDVGLDB4OUYsMHg1QiwKKzB4RkUsMHhGQiwweEJCLDB4QjcsMHhCQiwweEJCLDB4RkIsMHhCRiwgMHhBRiwweEVGLDB4RkIsMHhERiwweEI3LDB4RkIsMHhGQiwweDdGLAorMHhCRiwweEI3LDB4RUYsMHhGMiwweEZGLDB4RkIsMHhGRSwweEZGLCAweEZGLDB4RUYsMHhGRiwweEZFLDB4RkYsMHhCRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhBRiwweEZGLDB4RkEsMHhGRiwweEZGLDB4RkYsIDB4QzksMHhGRiwweEZGLDB4RkYsMHhERiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGQiwweEZGLDB4QTMsMHhGRiwweEZCLAorMHhGRSwweEZGLDB4QkYsMHhFRiwweEUzLDB4RkUsMHhGRiwweEJGLCAweEUzLDB4RkUsMHhGRiwweEJGLDB4NkYsMHhGQiwweEY2LDB4RkYsCisweEJGLDB4RkYsMHg0NywweEZGLDB4RkYsMHg5RiwweEVFLDB4RjksIDB4RkUsMHhDRiwweDlGLDB4RUYsMHhGQiwweENGLDB4OUIsMHhFRSwKKzB4RjgsMHhGRSwweEVGLDB4OEYsMHhFRSwweEZCLDB4RkUsMHgwQiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4QkYsMHhGRiwweEZGLDB4RkIsMHhGRiwweEZGLCAweEJGLDB4RkYsMHhGRiwweEZDLDB4MTcsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweDdGLDB4RkYsMHhGRiwweEZGLDB4N0YsIDB4RkYsMHhGRiwweEZCLDB4RkYsMHhGRiwweDdGLDB4RkYsMHhGRiwKKzB4RkMsMHgzRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGQiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkUsMHg1RiwweEZGLCAweEZGLDB4RkQsMHhGRiwweEZGLDB4REIsMHhGRiwweEZELDB4RkYsCisweDc3LDB4RkYsMHhGRCwweEZGLDB4RkYsMHhERiwweEZFLDB4RkQsIDB4RkYsMHhGRiwweEYyLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRCwweEZGLDB4RkYsMHhGRiwweEZELDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEUxLAorMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHgzRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RTMsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhCRiwKKzB4RkYsMHhGRSwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweDY3LDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHg3RiwweEZGLDB4RkYsMHhGRiwweDdGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhERiwweEZGLDB4RkYsMHhGRiwweDJGLDB4RkYsCisweEYzLDB4RkQsMHhGRiwweDdGLDB4REUsMHhGNywweEZELDB4RkYsIDB4N0YsMHhGNywweDdELDB4RkYsMHg3RiwweERGLDB4RjcsMHhCRCwKKzB4RkYsMHg3RiwweEZGLDB4MUYsMHhGRiwweEVGLDB4RkIsMHhGRSwgMHhGRiwweEJGLDB4RUYsMHhGQiwweEZFLDB4RkYsMHhFRiwweEZCLAorMHhGRSwweEZGLDB4QkYsMHhFRiwweEZCLDB4RkUsMHhGRiwweEZGLCAweDNGLDB4RkUsMHg3RiwweDlGLDB4RTcsMHhGOSwweEZFLDB4N0YsCisweDlGLDB4RTcsMHhGQSwweDdGLDB4OUYsMHhFNywweEY5LDB4RkUsIDB4N0YsMHg5RiwweEU3LDB4RkYsMHhGQywweDdGLDB4QkYsMHhCRiwKKzB4RUYsMHhGQiwweEZFLDB4RkYsMHhCRiwweEVGLDB4RkIsMHhCNywgMHhCRiwweEVGLDB4RkIsMHhGRSwweEZGLDB4QkYsMHhFRiwweEZCLAorMHhGRiwweEUwLDB4RkQsMHhGOSwweEZFLDB4N0YsMHg5RiwweEU3LCAweEY5LDB4RkUsMHg3RiwweDlELDB4RjksMHhGRSwweDdELDB4OUQsCisweEU3LDB4RjksMHhGRSwweDdGLDB4OUYsMHhFRCwweEVELDB4RkYsIDB4RkQsMHhGRiwweDdGLDB4REYsMHhGNywweEZELDB4RkYsMHg3RiwKKzB4REYsMHhGRCwweEZGLDB4N0YsMHhERiwweEY3LDB4RkQsMHhGRiwgMHg3RiwweERGLDB4RkYsMHg5QiwweEZGLDB4RUYsMHhGQiwweEZFLAorMHhGQiwweEJGLDB4RUYsMHhCQiwweEZFLDB4RkYsMHhBRiwweEJCLCAweEJFLDB4RkYsMHhCRiwweEVGLDB4RkIsMHhGRSwweEZGLDB4RkYsCisweEI3LDB4QkYsMHhEQiwweEY2LDB4QkQsMHhCRiwweDZCLDB4REIsIDB4RjYsMHhGOSwweEJGLDB4NUIsMHhENiwweEY5LDB4QkYsMHg2RiwKKzB4REIsMHhGNiwweEZELDB4QkYsMHhGRiwweDBFLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4NUYsMHhGRiwweEY3LDB4RkYsMHhGRiwweDdGLAorMHhGNywweEJELDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4REYsMHg5RiwweEZGLDB4RkYsMHhGRiwweEZFLDB4RkYsCisweEZGLDB4RUYsMHhGRSwweEZFLDB4RkYsMHhGRiwweDc3LDB4RkYsIDB4RkIsMHhGQiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjgsMHgzRiwKKzB4RkYsMHhGRCwweEZGLDB4RkYsMHhGRiwweEZELDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGNCwweDdGLDB4RkYsMHhGRSwweEZELCAweEJFLDB4RkYsMHhERiwweEZFLDB4RkYsMHhGRiwweEVGLDB4N0YsCisweEZGLDB4Q0YsMHhGRiwweENGLDB4RkYsMHhGRiwweEZGLDB4REYsIDB4RTYsMHhGRiwweEZGLDB4N0YsMHhERiwweEY3LDB4REQsMHg3RiwKKzB4N0YsMHhERiwweEY3LDB4RkYsMHg3RiwweERGLDB4RDcsMHhGRCwgMHhGRiwweDdGLDB4REYsMHhGNywweEZGLDB4Q0QsMHhGRiwweEYyLAorMHhGRiwweEZGLDB4NEYsMHg3RiwweEY0LDB4RkYsMHhGRiwweEZGLCAweEU3LDB4RUYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhCQiwweEZGLDB4RUYsMHhGRiwweEZFLDB4RkYsIDB4RkYsMHhGRiwweEVGLDB4RkYsMHhGRiwweEVGLDB4RkYsMHhGQiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHg2NSwgMHhFRiwweEZGLDB4RkYsMHg3RiwweEZGLDB4RkQsMHhFRiwweEZGLAorMHhGRiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZFLDB4Q0YsMHhERiwweEZFLDB4RkYsCisweEZGLDB4RkIsMHhGRiwweEZGLDB4RkYsMHhGRiwweEYzLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkUsMHhERiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkUsMHhCRiwweEZGLCAweEZGLDB4RkYsMHhFMywweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhFRiwweEVCLDB4RkYsMHhGRSwweEJGLDB4RkYsIDB4RUIsMHhGRiwweEZDLDB4N0YsMHhGRiwweEZGLDB4RkYsMHhFRSwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4REQsMHhGRiwgMHhENiwweEZGLDB4RkQsMHhCRiwweEZGLDB4RkIsMHhGRiwweEZFLAorMHhGRCwweEZGLDB4RkYsMHhGRCwweEVGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweERFLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhCRiwweEZGLDB4RkQsMHhGRiwweDdGLDB4QkYsIDB4RkYsMHg1RiwweERGLDB4RkYsMHhGRiwweEJGLDB4NzcsMHhGRiwKKzB4RkYsMHhGRiwweDdGLDB4RDcsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEMzLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhERiwweEVGLAorMHhGRiwweEZGLDB4RkUsMHhGQiwweEZGLDB4RkYsMHhERiwweEJGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RUQsMHhGRiwweEI3LDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4QUYsMHg3RiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweERGLDB4QkYsMHhERiwweEYzLDB4RkQsMHhGQiwweEZGLDB4NUIsCisweEZELDB4RkYsMHhCRiwweEVGLDB4RjcsMHhGRiwweEZGLDB4N0QsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGOCwweDNCLDB4RkYsMHhCRiwKKzB4NkYsMHhGRiwweEZFLDB4RkYsMHhCRiwweEZGLDB4RUIsMHg3RCwgMHhGRiwweEVGLDB4RkIsMHhGRSwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEYyLDB4N0YsMHhGQywweEZGLDB4M0YsMHhERiwweEVELCAweEZFLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhFRiwweDVGLDB4RjcsCisweEI1LDB4RkYsMHhFRiwweEZGLDB4RkYsMHhGRiwweEUwLDB4M0YsIDB4OUYsMHg5RSwweEZGLDB4RkYsMHhFRiwweEZGLDB4REYsMHhGRiwKKzB4QkYsMHg1RiwweEJGLDB4Q0YsMHhGMywweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHg2OSwweEFGLDB4MzMsMHhGRCwweEZGLAorMHhGQiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkMsMHhGRiwweDdGLCAweEQ5LDB4RkYsMHhERiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjUsCisweEEzLDB4REYsMHg2RSwweERFLDB4RkYsMHhGRiwweEJELDB4RkYsIDB4RkYsMHhGRSwweEZGLDB4RkYsMHhGRiwweEZFLDB4RTcsMHhGRCwKKzB4RkYsMHhGRiwweEZGLDB4RjksMHhFRiwweEM2LDB4RkUsMHhCNywgMHhBRCwweEU1LDB4RjksMHhGRiwweEZGLDB4RkYsMHhDRiwweEZGLAorMHhGRiwweEZGLDB4Q0QsMHhGQiwweDdGLDB4RkYsMHhGRiwweEZGLCAweEY5LDB4RjYsMHgwRiwweERGLDB4RUMsMHhDRiwweDdGLDB4RkYsCisweEZCLDB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRCwweEZGLDB4RkUsIDB4RjksMHhGRCwweDdGLDB4RkYsMHg3RiwweEZGLDB4RjksMHg1QiwKKzB4RkYsMHg3MywweERDLDB4RkQsMHg3QiwweERGLDB4RkYsMHhGRiwgMHhGRiwweDdCLDB4RkYsMHhGRiwweEY3LDB4NTMsMHhENiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhEOCwweDlGLDB4RkUsMHhGRiwweEVGLCAweDdGLDB4RUUsMHhGRiwweEZGLDB4RkYsMHhGQiwweEVELDB4RUQsCisweEZELDB4RkYsMHhGRSwweEZGLDB4RkYsMHhGQiwweDdGLDB4RkYsIDB4RTIsMHg3RiwweEZGLDB4NkYsMHhEOCwweDU3LDB4RjcsMHhGRiwKKzB4RkYsMHhGRiwweERGLDB4RkYsMHhFOCwweEZGLDB4RkYsMHhGRCwgMHhGRiwweEZGLDB4RkMsMHg3RiwweEZGLDB4RTQsMHhGRiwweEZCLAorMHhFRiwweEZCLDB4RkUsMHhERiwweEI3LDB4RUQsMHhGRiwweEZFLCAweERGLDB4N0YsMHhGRiwweEZFLDB4N0YsMHhCNywweEZGLDB4RkYsCisweEZGLDB4RkYsMHg4OSwweEZGLDB4RkYsMHhDRiwweEYzLDB4RkUsIDB4N0YsMHhGRiwweEVGLDB4RkYsMHhGRSwweDdFLDB4N0YsMHhGQiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGMSwgMHhGRiwweEVCLDB4N0EsMHhENSwweEJGLDB4NkYsMHhEQiwweEJFLAorMHhGRCwweEI3LDB4RDgsMHhGNiwweEU1LDB4QkYsMHg2RiwweEZCLCAweEZFLDB4RjUsMHhCRCwweDdFLDB4MDYsMHhGRiwweERGLDB4RjcsCisweEZCLDB4RjYsMHhGRiwweDNGLDB4RkYsMHhEQiwweEZGLDB4RkYsIDB4NkYsMHhGQiwweEY3LDB4RkYsMHhGRiwweEZGLDB4RkIsMHhGRSwKKzB4RjcsMHhBRiwweEZGLDB4QjcsMHhFRCwweEVGLDB4RjcsMHhGRSwgMHhGRiwweEZGLDB4REYsMHhGRiwweEZFLDB4RkYsMHhFRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhCRiwweEY3LDB4RkMsMHgxRiwweEVFLCAweEZCLDB4RkUsMHhCRCwweEZGLDB4N0YsMHg1RiwweEQ3LDB4RkQsCisweEZCLDB4NDMsMHhGRiwweEZGLDB4RkQsMHhGRiwweDVGLDB4RkYsIDB4RjcsMHhGRiwweEY5LDB4M0YsMHhGRiwweENGLDB4RjMsMHhGRCwKKzB4RjcsMHg3RSwweEVGLDB4QTcsMHhGOSwweEZFLDB4OEYsMHhBNywgMHhFOSwweEYzLDB4N0UsMHg5RiwweEZCLDB4RjgsMHhGRiwweEZGLAorMHgzRiwweEZELDB4N0YsMHg1RiwweERGLDB4RkQsMHhGRiwweEZGLCAweDVGLDB4RkYsMHhGRCwweDVGLDB4RkYsMHhGRiwweDdGLDB4RkQsCisweDdGLDB4RkQsMHg5RiwweEZGLDB4RTAsMHhGRiwweEZBLDB4RjgsIDB4QkUsMHg2RiwweDlGLDB4RTYsMHhGOCwweEJFLDB4M0YsMHg5QSwKKzB4RjksMHhCRSwweDZGLDB4OUYsMHhFMiwweEY5LDB4RkUsMHg2RiwgMHg5RiwweEY5LDB4RkYsMHhGNSwweEZELDB4N0YsMHhDRiwweERGLAorMHhGRCwweEZELDB4N0YsMHhGRiwweEY1LDB4RkYsMHhGRiwweEZGLCAweEY3LDB4RjUsMHhGRCwweDBGLDB4REIsMHhGRiwweEQzLDB4RkYsCisweEVCLDB4RkEsMHhGRiwweEZGLDB4QkYsMHhGRiwweEZBLDB4RkYsIDB4RkYsMHhDQiwweEZCLDB4RkUsMHhGRiwweEZGLDB4RUIsMHhGQSwKKzB4RkUsMHhGRiwweEZGLDB4QjcsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhCRiwweEZGLDB4REYsMHhGNSwweEZGLDB4RkYsMHhENywweEZGLAorMHhGRiwweEZGLDB4REYsMHhENywweEY1LDB4RkYsMHg3RiwweEZFLCAweDRGLDB4RkYsMHhGRCwweEZGLDB4N0YsMHg3RiwweEZGLDB4QUQsCisweEVCLDB4RkIsMHhGRiwweEFELDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4QUYsMHhFQiwweEZCLDB4RkYsMHhGQywweDBELDB4RkYsMHhGRiwKKzB4REYsMHhEMiwweEZELDB4RkYsMHhGRiwweEZELDB4RjYsMHhGRiwgMHhGRiwweDdGLDB4RkYsMHhGRiwweDFGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZCLDB4M0YsMHg3RCwweEVCLDB4MzIsMHhGRSwweEJGLCAweDJGLDB4RUIsMHhGQSwweEFFLDB4QkQsMHhFMCwweEZBLDB4N0UsCisweEJGLDB4QUQsMHhFQiwweEZBLDB4RkUsMHhCRiwweEY1LDB4N0YsIDB4RkYsMHhERSwweEZFLDB4RTMsMHhGQiwweEZGLDB4RkYsMHhGRiwKKzB4REYsMHhFRiwweDRGLDB4REYsMHhGRiwweDdGLDB4REYsMHhGRiwgMHhGNywweEZGLDB4RkYsMHhGOCwweDdGLDB4RkYsMHhGRiwweEVGLAorMHhGQiwweEZGLDB4RkYsMHhGRiwweEVGLDB4RkYsMHhGRiwweERGLCAweEVELDB4RkIsMHhERiwweEZGLDB4QkYsMHhGRiwweEZGLDB4RkYsCisweDgxLDB4RkYsMHhGRiwweEZGLDB4RkYsMHgzRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZFLDB4REQsMHhGRSwweEVGLDB4RkQsMHhGRiwKKzB4RkYsMHhGQiwweEZFLDB4RjcsMHhGRiwweDkzLDB4RkQsMHhGQiwgMHg3RSwweEZGLDB4RkUsMHg4NywweEU5LDB4RkYsMHg3RiwweEIzLAorMHg5RiwweEZFLDB4RkUsMHhGRiwweEFGLDB4RkQsMHhGRSwweDdFLCAweDNGLDB4RkUsMHg2NywweEZGLDB4RkYsMHhGNywweEZGLDB4RkYsCisweEZDLDB4RjcsMHhERiwweEZELDB4RkYsMHg3RiwweEZGLDB4RkYsIDB4N0YsMHg2RCwweEZGLDB4RkYsMHhGRSwweEZGLDB4RkYsMHgyRiwKKzB4RkYsMHhCRiwweEZGLDB4RkYsMHhFRSwweEZGLDB4QkUsMHhGRiwgMHhGRiwweEZFLDB4RkYsMHhFRiwweEZGLDB4RkYsMHhGRSwweEZGLAorMHhFRiwweEZGLDB4RkYsMHhGQSwweDVGLDB4RkYsMHhGRiwweEZCLCAweEZGLDB4RkYsMHhFRiwweEZGLDB4RkIsMHhGRSwweEZELDB4RkYsCisweEZFLDB4RkYsMHhGQiwweEZGLDB4RkYsMHhGRiwweDdGLDB4RkYsIDB4RkUsMHhCRiwweERGLDB4RkYsMHhGQiwweEZGLDB4RkYsMHhGNywKKzB4RkMsMHhGRCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHg3RiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjIsMHg3RiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEYzLDB4RkYsMHhGRiwweEZGLDB4RUYsMHhGQiwweEZGLDB4RkYsCisweEZGLDB4REYsMHhFMiwweEZGLDB4RkYsMHhGQiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGQiwweEU3LDB4RkYsMHhGRCwKKzB4RkYsMHhGRiwweEZGLDB4QkYsMHhGRiwweEZGLDB4RkYsMHhFRCwgMHhFRiwweEZELDB4RkYsMHhGRiwweERGLDB4RDcsMHhGNSwweEZELAorMHg3RiwweDVELDB4RkQsMHhGRiwweDdGLDB4REYsMHg5NywweEY0LCAweEZELDB4N0IsMHg1RiwweEZGLDB4QzksMHhGRiwweEZCLDB4RkUsCisweEZGLDB4QkYsMHhGRiwweDVGLDB4RkYsMHhGRiwweEY3LDB4RkYsIDB4RUYsMHhGRCwweEZGLDB4RUYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGNywweEZGLDB4RDcsMHhGRCwweDdELDB4N0YsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhFRiwweERGLDB4RjcsMHhGRCwweEZGLAorMHhCQiwweEZGLDB4RkYsMHg3RiwweEZGLDB4RkUsMHhFMywweEZGLCAweEY5LDB4RkUsMHg3RiwweEJGLDB4RUYsMHhGQiwweEZFLDB4RkYsCisweEJGLDB4RjksMHhGRSwweEZGLDB4OUYsMHhFRiwweEY5LDB4RkUsIDB4RkYsMHhCRiwweEYzLDB4REEsMHhGRiwweDM3LDB4Q0QsMHhGMywKKzB4N0MsMHhERiwweDM3LDB4Q0QsMHhGMywweDdGLDB4MzcsMHhDRCwgMHhGMywweDdDLDB4REYsMHgzNywweENDLDB4RjMsMHg3RiwweDVBLAorMHhCRCwweEY2LDB4RkQsMHhCRiwweDZGLDB4REIsMHhGNiwweEZELCAweEJGLDB4NkYsMHhERSwweEZELDB4QkYsMHg2RiwweERCLDB4RjYsCisweEZELDB4QkYsMHg2RiwweEZFLDB4RjEsMHg2RiwweEVCLDB4N0EsIDB4REUsMHhCNywweEFELDB4RUIsMHg3QSwweERFLDB4QjcsMHhBRiwKKzB4N0EsMHhERSwweEI3LDB4QUQsMHhFQiwweDdBLDB4REUsMHhCNywgMHhGRiwweDdFLDB4RkYsMHhGRSwweENELDB4QjMsMHg2QywweERCLAorMHgzNiwweENELDB4QjMsMHg2QywweERFLDB4Q0QsMHhCMywweDZDLCAweERCLDB4MzYsMHhDRCwweEIzLDB4NkMsMHhERiwweEM5LDB4QkYsCisweEY3LDB4QkQsMHhFRiwweDdBLDB4OUUsMHhBNywweEE5LDB4RUEsIDB4N0EsMHhCNywweEJELDB4RUEsMHg3QiwweERFLDB4QTcsMHhCRCwKKzB4Q0EsMHg3MiwweDhELDB4OTEsMHhGRiwweEVGLDB4RkIsMHhGRSwgMHhGRiwweEJGLDB4RUYsMHhGQiwweEZFLDB4RjcsMHhFRiwweEZCLAorMHhGRSwweEZGLDB4QkYsMHhFRiwweEZCLDB4RkUsMHhGRiwweEZFLCAweDg3LDB4RkYsMHhGNiwweEZELDB4QkYsMHg2RiwweERCLDB4RjYsCisweEZELDB4QkYsMHg2RiwweEY2LDB4RkQsMHhCRiwweDZGLDB4REIsIDB4RjYsMHhGRCwweEJGLDB4NkYsMHhGRSwweDRGLDB4RkYsMHhCRiwKKzB4RUYsMHhCQiwweEVFLDB4RkIsMHhCRSwweEVGLDB4QkIsMHhFRiwgMHhCRSwweEVGLDB4QkIsMHhFRSwweEZCLDB4QkUsMHhFRiwweEJCLAorMHhFRiwweEZDLDB4NUYsMHhGRiwweEZGLDB4RkYsMHgzRiwweENGLCAweEYzLDB4RkMsMHhGRiwweDNGLDB4Q0YsMHhGQywweEZGLDB4M0YsCisweENGLDB4RjMsMHhGQywweEZGLDB4M0YsMHhDRiwweEZELDB4OUYsIDB4RkUsMHhCRiwweEFGLDB4RUIsMHhGQSwweEZFLDB4QkYsMHhBRiwKKzB4RUIsMHhGRSwweEJGLDB4QUYsMHhFQiwweEZBLDB4RkUsMHhCRiwgMHhBRiwweEVCLDB4RkYsMHhFMSwweDZGLDB4RkQsMHhGRiwweDdGLAorMHhERiwweEY3LDB4RkQsMHhGRiwweDdGLDB4REYsMHhGRCwweEZGLCAweDdGLDB4REYsMHhGNywweEZELDB4RkYsMHg3RiwweERGLDB4RkYsCisweDdBLDB4QkYsMHhGQiwweEZFLDB4REYsMHhCNywweEVELDB4RkIsIDB4N0UsMHhERiwweEI3LDB4RkIsMHg3RSwweERGLDB4QjcsMHhFRCwKKzB4RkIsMHg3RSwweERGLDB4QjcsMHhGRiwweEM5LDB4RkYsMHhGRiwgMHhCRiwweEVGLDB4RkIsMHhGRSwweEZGLDB4QkYsMHhFRiwweEZCLAorMHhGRiwweEJGLDB4RUYsMHhGQiwweEZFLDB4RkYsMHhCRiwweEVFLCAweEZCLDB4RkUsMHhCQiwweEZGLDB4RkUsMHhGRiwweEJGLDB4RUYsCisweEZCLDB4RkUsMHhGRiwweEJGLDB4RUYsMHhGRSwweEZGLDB4QkYsIDB4RUYsMHhGQiwweEZFLDB4RkYsMHgzRiwweENGLDB4RkYsMHhFNywKKzB4RkUsMHhGRiwweEY1LDB4RkQsMHg3NywweDVELDB4RDcsMHgzNSwgMHhERCwweDc3LDB4RDcsMHhGNSwweENELDB4N0IsMHg1RCwweEQ3LAorMHhGNSwweERELDB4NzcsMHhGRSwweDI3LDB4RkYsMHhGRiwweDhCLCAweEUyLDB4RjgsMHhCRSwweDJGLDB4OEIsMHhFMiwweEY5LDB4QUYsCisweDhCLDB4RTIsMHhGOCwweEJFLDB4MkYsMHg4QiwweEUyLDB4RjksIDB4RkUsMHgxRiwweEZGLDB4NUYsMHhENywweEY1LDB4RkQsMHg3RiwKKzB4NUYsMHhENywweEY1LDB4RkYsMHg1RiwweEQ3LDB4RjUsMHhGRCwgMHg3RiwweDVGLDB4RDcsMHhGNSwweEZGLDB4RkEsMHgzRiwweEZFLAorMHhCRiwweEFGLDB4RUIsMHhGQSwweEZFLDB4QkYsMHhBRiwweEVCLCAweEVDLDB4QkYsMHhBRiwweEVCLDB4RkEsMHhGRSwweEJGLDB4QUYsCisweEVCLDB4RkYsMHhGRSwweDdGLDB4RkQsMHg3RiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhFNiwgMHhGRiwweEZBLDB4REYsMHhGNywweEZELDB4RkYsMHg3RiwweERGLAorMHhGNywweEZDLDB4RkYsMHhERiwweEY3LDB4RkQsMHhGRiwweDdGLCAweERGLDB4RjcsMHhGRCwweEZGLDB4RjUsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZCLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHgwMiwweEZGLDB4RkUsMHhCRiwweEFCLDB4RUIsMHhGQSwgMHhCRSwweEJGLDB4MjMsMHhFQiwweERFLDB4MUYsMHhBRiwweEVBLAorMHhGQSwweEZFLDB4QUYsMHhBRiwweEVCLDB4RkQsMHg5NywweEZGLCAweEYzLDB4RkMsMHg3QiwweDFGLDB4Q0YsMHhGMSwweEZDLDB4N0YsCisweDFGLDB4RjEsMHhGQywweDc3LDB4MUYsMHhDRCwweEYxLDB4RkMsIDB4RkYsMHgxRiwweEZFLDB4ODcsMHhGRiwweEFGLDB4RUYsMHhGQSwKKzB4RkUsMHhGRiwweEFGLDB4RUYsMHhGQSwweEZELDB4QkYsMHgyQiwgMHhGQiwweDdFLDB4QkYsMHhCRiwweEVCLDB4RkIsMHhGQiwweEZCLAorMHhERiwweEZGLDB4RkIsMHhGNywweEZGLDB4RkYsMHg3RiwweEY3LCAweEY3LDB4RkYsMHhGRCwweERGLDB4RkUsMHhGQywweERGLDB4RkYsCisweERGLDB4RkYsMHhGRCwweEZGLDB4REEsMHhCRiwweEZGLDB4QkIsIDB4RUYsMHhGQiwweEY5LDB4RkYsMHhCRSwweEVGLDB4RkIsMHhGQiwKKzB4QkYsMHhFRiwweEZCLDB4RkUsMHhGRiwweEJGLDB4RUYsMHhGQiwgMHhGRiwweEY3LDB4N0YsMHhGRCwweEQ3LDB4RkYsMHhGRiwweDdGLAorMHhGRiwweEZGLDB4RkYsMHhGRSwweEY3LDB4RkYsMHhGRSwweEZGLCAweEY3LDB4RkYsMHhGRiwweDdGLDB4RkYsMHhGRiwweEVDLDB4RkYsCisweEZGLDB4RkUsMHhERiwweEJGLDB4RkYsMHhGQiwweEZFLDB4RkYsIDB4QkIsMHg2OCwweEFFLDB4MUYsMHhBRSwweEZCLDB4RkIsMHhGRiwKKzB4RkYsMHhCRiwweEZGLDB4RDUsMHhGRiwweDdGLDB4RkYsMHhGRiwgMHhGNywweEZFLDB4RkUsMHhGRiwweEJGLDB4RUYsMHg5RiwweEZELAorMHg3RiwweEZGLDB4Q0IsMHhGRiwweEZGLDB4REYsMHhGRiwweEZGLCAweEJCLDB4RjcsMHhCRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4REYsCisweEZGLDB4QkYsMHhGQiwweEZGLDB4RkYsMHhGRiwweERFLDB4M0YsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEE3LDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEVGLDB4RkYsMHg3RiwweEZCLDB4RkQsMHhGQiwgMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4Q0YsMHhGMywweDdDLAorMHhGRiwweDdGLDB4OEQsMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZCLDB4RkYsMHhGNywweEZCLDB4RkUsMHhGRCwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGNywweEZELDB4RkYsMHg3RiwweEZELDB4MUYsIDB4RkQsMHhGRiwweEZGLDB4RkYsMHhGRiwweEJGLDB4REYsMHhGRiwKKzB4RkYsMHhGRSwweDVDLDB4RkYsMHg2RCwweEZGLDB4N0YsMHhBQiwgMHhFNywweEYxLDB4RkYsMHhGRCwweDlGLDB4RkYsMHhGRiwweEFELAorMHhFQiwweDdBLDB4M0YsMHgxRiwweEZGLDB4RkYsMHhGRSwweEJGLCAweEFGLDB4RjMsMHhERSwweEY1LDB4RkYsMHg4RiwweEZCLDB4REYsCisweEU2LDB4N0YsMHhGRiwweERGLDB4RjMsMHhGRCwweEZGLDB4N0UsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZELDB4RjcsMHhGMywKKzB4N0YsMHhERiwweEY3LDB4RUYsMHhGRiwweEY2LDB4M0YsMHg5RiwgMHhERiwweEZGLDB4RkYsMHhFRSwweEZGLDB4RkYsMHhFRiwweEZCLAorMHhGRiwweEZGLDB4RjksMHhGQiwweEZFLDB4NEYsMHhCRiwweEVGLCAweEJCLDB4RkYsMHg2OSwweEFGLDB4QUYsMHhGQywweEZGLDB4M0YsCisweERELDB4RkYsMHhGQywweEJGLDB4OEYsMHhGRiwweEZELDB4RjMsIDB4QkYsMHhFRCwweDlFLDB4RkMsMHhCRiwweDZGLDB4RjUsMHhEMywKKzB4REYsMHhGRiwweERCLDB4RDYsMHhGNSwweEVGLDB4RkQsMHhGRSwgMHhGRiwweEI5LDB4RkYsMHgxRiwweEQyLDB4QTksMHhBRiwweEZGLAorMHhEQiwweEY3LDB4QkYsMHhFRiwweDQ2LDB4RkYsMHhGRiwweEFELCAweEVCLDB4N0EsMHhERiwweEVGLDB4RjcsMHhGRiwweDdGLDB4RjcsCisweDlGLDB4RUQsMHhGRiwweDdGLDB4RkYsMHhBRCwweEVCLDB4N0YsIDB4RjUsMHg2RiwweEZGLDB4RkQsMHhGQiwweEQ2LDB4RjQsMHhGNywKKzB4RkIsMHhGOSwweDdFLDB4N0YsMHhGRiwweDVGLDB4QzIsMHhGRSwgMHhCRiwweEZELDB4RkIsMHgzMywweERGLDB4RjksMHg1QiwweEZGLAorMHhGRiwweERELDB4NjcsMHg3RCwweENGLDB4RUYsMHhEQiwweEVDLCAweEZGLDB4NzcsMHhERCwweEY3LDB4RkQsMHhGRiwweEZGLDB4REUsCisweEE3LDB4QkYsMHhENCwweDlGLDB4RkYsMHhGRiwweEJGLDB4RUYsIDB4RkUsMHhGRiwweERGLDB4RUYsMHhCQiwweEZGLDB4RkYsMHhFRiwKKzB4RUIsMHhGQSwweEZGLDB4RUYsMHhCRCwweEZCLDB4RkYsMHhFMiwgMHg3RiwweEZGLDB4REYsMHhERiwweEY3LDB4RkQsMHhCRiwweEJCLAorMHg3MywweEY3LDB4RkQsMHg3RiwweERGLDB4REUsMHhGNywweEJGLCAweEVBLDB4REIsMHhGNiwweEZGLDB4RDYsMHhGRiwweEZGLDB4NjYsCisweEZGLDB4QkUsMHhGRiwweEJGLDB4NkIsMHhEOSwweEY2LDB4REYsIDB4RkYsMHhGQiwweDdFLDB4N0YsMHhCNywweDdFLDB4RkYsMHhGRSwKKzB4RkYsMHhDRCwweEZGLDB4RkUsMHg3RiwweEZGLDB4RkMsMHhGRCwgMHgzRiwweEZCLDB4RkIsMHhGNywweEZGLDB4RkYsMHhGQiwweEY2LAorMHg3RCwweEZFLDB4N0YsMHhGRiwweEZDLDB4RkYsMHhCOSwweEZGLCAweEY5LDB4RkEsMHhGRSwweEJGLDB4QUYsMHg1QiwweEQ2LDB4RUQsCisweEFELDB4N0IsMHhGNiwweEY5LDB4QkYsMHhFRiwweEY4LDB4RkEsIDB4RkUsMHhCRiwweEZFLDB4RTYsMHhGRiwweEZGLDB4RjcsMHhGRCwKKzB4RkYsMHg3RiwweEJGLDB4RUYsMHhGMywweEZGLDB4RkYsMHg2RiwgMHhGNywweEZFLDB4RkYsMHhGRiwweEY3LDB4RkQsMHhGRSwweEY3LAorMHhFRiwweEZGLDB4RkIsMHhFRiwweEZCLDB4N0UsMHhERSwweEZFLCAweEZGLDB4QkYsMHhGRiwweEZFLDB4RkYsMHhGRiwweEZCLDB4RkYsCisweEZGLDB4RUYsMHhGQiwweDZGLDB4RkMsMHgxRiwweEZFLDB4RTcsIDB4RkYsMHhGRiwweEZGLDB4RUYsMHhGRiwweEQzLDB4QjQsMHhCQiwKKzB4RkYsMHhGRiwweEZELDB4QkYsMHg2RiwweEUzLDB4RkUsMHhGRiwgMHhCRiwweEZDLDB4QkYsMHhGNywweENGLDB4RjcsMHhGRCwweEZGLAorMHgyRiwweERGLDB4QUIsMHhFQSwweEZGLDB4REYsMHhFNywweEVBLCAweDlBLDB4QUYsMHhFRiwweEZCLDB4RkUsMHhGRiwweEY1LDB4M0YsCisweEZELDB4N0UsMHhGRiwweEQ3LDB4RjUsMHhGQiwweEZGLDB4RkQsIDB4RjcsMHhGRiwweDdGLDB4RkUsMHhGNywweEZELDB4RkYsMHhENywKKzB4RkYsMHhENywweDdGLDB4RUUsMHg3RiwweEZBLDB4NzksMHhGRSwgMHgyRiwweDhCLDB4RTYsMHhGOSwweEZFLDB4M0YsMHg5RSwweEY5LAorMHhCRSwweDJGLDB4MEIsMHhFNywweEY5LDB4RkUsMHgyRiwweDlGLCAweEZELDB4RkYsMHhGRSwweDdELDB4N0YsMHg1RiwweEQ3LDB4RkYsCisweEZGLDB4N0YsMHhGRiwweEZELDB4RkYsMHg3RiwweDVGLDB4OTcsIDB4RkYsMHhGRCwweDdGLDB4NUYsMHhGRiwweEUzLDB4RkYsMHhGRiwKKzB4RkEsMHhGRSwweEJGLDB4QUYsMHhGQiwweEZCLDB4RkYsMHhGRiwgMHhDRiwweEVCLDB4RkUsMHhCRiwweEFGLDB4RkYsMHhGQSwweEZFLAorMHhCRiwweEZGLDB4ODcsMHhGRiwweEZGLDB4RjUsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRCwweEZGLDB4N0YsMHhGRiwweEZGLDB4RkYsCisweEZCLDB4RkYsMHhGRiwweEY1LDB4RkYsMHhGRiwweEZFLDB4MEYsIDB4RkYsMHhGRCwweEVCLDB4RkYsMHhGRiwweEY3LDB4RkYsMHhFRiwKKzB4N0IsMHhERiwweEZFLDB4RkYsMHhGRiwweERGLDB4RjcsMHhGRCwgMHhFQiwweDdGLDB4REYsMHhGRiwweDVGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZELDB4QkYsMHhGRiwweDdFLDB4RkEsMHhCRiwweEM3LCAweERCLDB4RjcsMHhCRCwweDNGLDB4RkIsMHhGRiwweEY2LDB4RkYsCisweEZBLDB4QUYsMHhGRiwweEVCLDB4RkEsMHhGRSwweDNGLDB4MkYsIDB4RUEsMHhGQSwweDNFLDB4QUQsMHhDOSwweEJBLDB4RjYsMHhBRCwKKzB4QUYsMHhFQiwweEZBLDB4RjYsMHhCRiwweEZFLDB4N0YsMHhGRiwgMHhGRiwweEZELDB4RkYsMHhGMSwweDdGLDB4M0YsMHhDRiwweEYxLAorMHhFRiwweEZGLDB4N0YsMHhGRiwweEJDLDB4REYsMHhERiwweEY3LCAweERELDB4RkYsMHhFMCwweDdGLDB4RkYsMHhGRiwweEZFLDB4RkYsCisweEZBLDB4RUMsMHhCQiwweDdGLDB4NUYsMHhGRiwweEZCLDB4RUMsIDB4RkYsMHhFRiwweEI3LDB4RkYsMHhGNywweEZGLDB4RkYsMHhCNSwKKzB4RkYsMHhGRiwweDdGLDB4RkYsMHhGRiwweEZGLDB4RUUsMHhERiwgMHg1RiwweERGLDB4REUsMHhGRiwweEFFLDB4RTcsMHg3NywweEZGLAorMHhGRiwweERGLDB4RjcsMHhGRiwweEUzLDB4RkYsMHhGQSwweEJCLCAweEZFLDB4RkYsMHhBRiwweEZELDB4RkIsMHhGRSwweEJGLDB4QUIsCisweEY5LDB4RkUsMHhGRiwweEJGLDB4N0YsMHhCRiwweEZFLDB4QkQsIDB4RkUsMHhENywweEZGLDB4OUYsMHhGRCwweEZGLDB4QkUsMHhFRiwKKzB4RkYsMHhFRSwweEZELDB4QkIsMHg1QiwweEVGLDB4RkYsMHg3RiwgMHhFRiwweEZGLDB4RUYsMHhGRiwweDdGLDB4RkYsMHg0RiwweEZGLAorMHhFRiwweEZCLDB4QkMsMHhGQywweEZGLDB4RkYsMHhGRiwweEZFLCAweEZFLDB4RkQsMHhGQSwweEZFLDB4RkIsMHhGRiwweEZELDB4RjMsCisweEZCLDB4RkYsMHhGOCwweDVGLDB4RkYsMHhGRiwweEQ3LDB4RjUsIDB4RkQsMHhERiwweEVGLDB4RkYsMHhGMywweERDLDB4NUYsMHhDRSwKKzB4RjUsMHhCRCwweEZGLDB4RkYsMHhENywweEZGLDB4RkYsMHhGOSwgMHgzRiwweEZGLDB4REYsMHhGNywweEZGLDB4RkUsMHhGRiwweEZELAorMHhGRiwweEZCLDB4RkYsMHhGNywweEI5LDB4N0QsMHhGRSwweERGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RjksMHg3RiwweEZGLDB4RkUsCisweEZGLDB4RkYsMHg3RiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RjcsIDB4RjYsMHhGRiwweEJGLDB4RjEsMHhGOCwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhFMCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjksMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEVGLDB4RUYsMHhGRiwweEZGLAorMHg5QiwweEZCLDB4N0YsMHhGRiwweEZGLDB4RkYsMHhDMSwweEZGLCAweERGLDB4RkYsMHgzRiwweDVGLDB4RDcsMHhCRiwweEVGLDB4QkIsCisweERFLDB4RUUsMHhGRiwweDdGLDB4REYsMHhGRiwweEZFLDB4RjUsIDB4N0YsMHhERiwweEZGLDB4OTksMHhGRiwweEZGLDB4RkEsMHhGRiwKKzB4QkYsMHhGRCwweEVCLDB4N0EsMHhGRiwweEI3LDB4RkUsMHhGRSwgMHhGRiwweEZGLDB4RUYsMHhGRiwweEZGLDB4RkQsMHhCRiwweEZGLAorMHg5NywweEZGLDB4RkQsMHhGNywweEZGLDB4N0YsMHhGNywweEZGLCAweEZGLDB4RkQsMHg1RiwweEZFLDB4RjMsMHhGOSwweERGLDB4REYsCisweEZGLDB4RkYsMHhGQywweEZGLDB4RkYsMHg4MywweEZGLDB4RkYsIDB4RkUsMHhGRiwweDlFLDB4RUMsMHhGQiwweEVFLDB4RkYsMHg5RiwKKzB4QkYsMHhFRiwweEZGLDB4RkUsMHhFRCwweDdCLDB4RkYsMHhGRiwgMHhGRiwweEYxLDB4NUEsMHhGRiwweEZGLDB4RkQsMHhGRiwweDdDLAorMHg2OSwweDNCLDB4REYsMHhGRiwweDdGLDB4MUYsMHhERiwweEZGLCAweEZELDB4QkEsMHhGRiwweEZGLDB4RkIsMHhGRiwweDVCLDB4QkQsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RDcsMHhCNiwweEVELDB4RTksIDB4RkYsMHhENiwweEJELDB4NkYsMHg1RiwweEZCLDB4RkYsMHhFRiwKKzB4RkYsMHg1RiwweEZFLDB4RjYsMHg2RiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEY3LDB4RUIsMHg3QSwweERGLDB4RkYsMHg5RiwweDdGLAorMHg3RiwweEZGLDB4QjcsMHhGRiwweEZGLDB4RkUsMHhERiwweEZGLCAweDZDLDB4RkYsMHhGQiwweEZGLDB4QkIsMHg2RiwweEVCLDB4RkUsCisweENDLDB4RjcsMHhBNSwweEZBLDB4NUMsMHhGNSwweDc1LDB4QkIsIDB4QjcsMHhERiwweEZFLDB4NkYsMHg1RiwweEM1LDB4QkYsMHhGRCwKKzB4N0IsMHhGRSwweEZGLDB4OTUsMHhFNywweDI5LDB4Q0YsMHg0RiwgMHhGNSwweDkxLDB4RUUsMHg2QiwweERGLDB4RUYsMHhGRCwweDU0LAorMHhGNSwweEJELDB4QjEsMHhGRiwweEVGLDB4RUUsMHhGQiwweEJFLCAweEJGLDB4QUYsMHhGRSwweERFLDB4QkQsMHg2RiwweERBLDB4RjIsCisweEZGLDB4QUYsMHhCRSwweEZGLDB4RkYsMHhGRCwweDdFLDB4QTcsIDB4RkYsMHhGNywweEZGLDB4QkYsMHhFRiwweDdCLDB4RjYsMHhGRCwKKzB4QkQsMHg0QSwweEYyLDB4ODUsMHg4NSwweEJGLDB4NUIsMHhGRSwgMHhCNSwweEZELDB4RkEsMHhGRiwweDRGLDB4RkYsMHhGRSwweERGLAorMHhGRiwweEVELDB4RkYsMHhCRiwweEZGLDB4QkYsMHg3RiwweEZFLCAweEZGLDB4QjcsMHg2RCwweEZGLDB4RjcsMHhCRiwweEJGLDB4RUYsCisweEZELDB4MUYsMHhGRiwweEZFLDB4N0QsMHhGRiwweDY3LDB4RkYsIDB4RkYsMHhGRiwweDNGLDB4N0YsMHhGRSwweEJGLDB4RkYsMHhFNywKKzB4REYsMHhFNywweEZGLDB4RUYsMHg2QiwweEZDLDB4MUYsMHhGRiwgMHhCRiwweEVGLDB4RkIsMHhGRSwweERFLDB4QkYsMHhBRiwweEZBLAorMHhGRiwweEI2LDB4RUYsMHhGOSwweEZFLDB4RkYsMHg4RiwweEVGLCAweERCLDB4RUYsMHhBQiwweDZGLDB4RkIsMHhGRSwweEZGLDB4RkYsCisweEVGLDB4RkQsMHhGRiwweDdGLDB4RkYsMHhGRiwweERFLDB4RkYsIDB4RkYsMHhFRiwweEZGLDB4RkYsMHhGRiwweDNGLDB4RkYsMHg2QywKKzB4RkYsMHhCRiwweEZCLDB4RkYsMHhGRSwweEZGLDB4RkIsMHhGRSwgMHhERiwweEZGLDB4RkYsMHhFRiwweEZGLDB4RkYsMHhCRiwweEZGLAorMHhGRiwweEZFLDB4RkIsMHhGRiwweEQ1LDB4N0YsMHhGRiwweEZGLCAweEVGLDB4RkIsMHhGRiwweEZGLDB4QkYsMHhFRiwweDQzLDB4QjUsCisweEZELDB4NkYsMHhDRiwweEQ2LDB4QkUsMHgzRiwweDdGLDB4REIsIDB4RkUsMHhDMywweEZGLDB4RkQsMHhGRiwweEFGLDB4RUIsMHhGQiwKKzB4RkMsMHhGRiwweDNFLDB4RUYsMHhFOCwweEZBLDB4QkQsMHhDRCwgMHhBQSwweEZFLDB4RkUsMHg3RCwweENGLDB4RkYsMHhCNywweEZGLAorMHhGNywweEZGLDB4RkYsMHhGRiwweEZELDB4RkYsMHg3NSwweENELCAweDUyLDB4RDcsMHhGRCwweEZCLDB4RjcsMHhERCwweEZCLDB4RUYsCisweEVCLDB4RkYsMHhGRiwweDRGLDB4RkYsMHhCRiwweDlGLDB4RTcsIDB4RjksMHhGQywweDdGLDB4OEIsMHhDMywweEY5LDB4QUYsMHg4RiwKKzB4RTcsMHhFOSwweEJFLDB4N0YsMHg5RiwweEU2LDB4RjksMHhGQywgMHg1RiwweEZGLDB4RkYsMHhGNywweEZELDB4RkYsMHg3QSwweDVGLAorMHhENywweEVELDB4RkYsMHhGRiwweEQ3LDB4RkYsMHhERCwweDdGLCAweEU3LDB4RkYsMHhGQywweEZGLDB4RkMsMHgzRiwweEZGLDB4RkYsCisweEZGLDB4RkIsMHhGRiwweEZFLDB4QkYsMHhBRiwweEZGLDB4RkQsIDB4RkYsMHhFRiwweEZGLDB4RUIsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGNywweDdGLDB4RkYsMHg3RiwweERGLDB4RkYsMHhGRCwgMHhGRCwweDdGLDB4RkUsMHhGNywweEZELDB4N0YsMHhERiwweEZGLAorMHhGRCwweEZGLDB4RkYsMHhERiwweEZCLDB4RkYsMHhFRSwweEZGLCAweEZCLDB4RkYsMHhGNywweEZELDB4RkYsMHg3QSwweERGLDB4RjUsCisweEZELDB4RkEsMHhERiwweEY3LDB4RkMsMHhGRiwweDdGLDB4REYsIDB4QkYsMHhFRCwweEZGLDB4QzksMHhGRiwweERGLDB4RkYsMHhCRiwKKzB4MkYsMHhGQiwweEZGLDB4QkMsMHhBRCwweEZGLDB4RjcsMHhGRiwgMHhGRiwweEVGLDB4RDMsMHhGRiwweDdELDB4QkYsMHg2RiwweEZGLAorMHhGQSwweEZGLDB4RkUsMHhCRiwweEFFLDB4RUEsMHhGQSwweEJFLCAweEFELDB4QTUsMHhFQiwweENFLDB4QkYsMHhBNywweEVCLDB4NUEsCisweERFLDB4QkQsMHhBRiwweDZCLDB4RkQsMHg1NywweEZGLDB4RkYsIDB4RjQsMHg3RiwweDFGLDB4N0YsMHhGRCwweEZGLDB4N0YsMHgzNiwKKzB4RjAsMHhERiwweDc5LDB4RkYsMHhGRiwweEZGLDB4RjcsMHhGRCwgMHhCRiwweEZGLDB4ODcsMHhGRiwweEZCLDB4RjMsMHhGQywweEZGLAorMHhGRiwweEZGLDB4RkYsMHg3RSwweEZGLDB4QkYsMHhERiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkQsMHhCRiwweEY4LDB4OUYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4QkYsMHhGRiwweEZGLDB4RkQsIDB4RjcsMHhGQywweEJELDB4RkYsMHhGRSwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZCLDB4RjksMHhCRiwweEZGLDB4RkYsMHhFQiwgMHhFMiwweEZFLDB4RkYsMHhCRiwweEVGLDB4QTksMHhCQSwweDJGLAorMHhFQiwweEY5LDB4RkUsMHg3NywweERGLDB4RjcsMHhGRiwweEZGLCAweEY5LDB4N0YsMHhGRiwweEZGLDB4N0YsMHhFRiwweEQ3LDB4RkYsCisweEZELDB4RkYsMHhGQiwweEY1LDB4RkYsMHhCRiwweDZGLDB4REYsIDB4RkYsMHhGRiwweEZELDB4RkYsMHhGRiwweEYwLDB4RkYsMHhGRiwKKzB4RkYsMHgzRiwweENGLDB4RkYsMHhCQSwweEVFLDB4OUIsMHhCRiwgMHhFRSwweEQ3LDB4RkUsMHhDRCwweEVGLDB4RkYsMHhERiwweEJGLAorMHhGRiwweEZGLDB4QzUsMHhGRiwweEZGLDB4RkQsMHg3RiwweDRGLCAweEZELDB4RjYsMHhEOSwweEZGLDB4NEYsMHhENiwweEZELDB4QkYsCisweDZFLDB4RkYsMHhGRiwweEY0LDB4N0YsMHhGRiwweDdGLDB4OEIsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGNywweEZGLDB4RjksMHhGRSwKKzB4MzcsMHhGRiwweEQ5LDB4RkIsMHhGNSwweEFGLDB4RkQsMHhGRiwgMHhGRiwweEZCLDB4RkYsMHhGRiwweDA3LDB4RkYsMHhGRiwweEZGLAorMHhGQiwweEY3LDB4RkYsMHhGRCwweEZGLDB4N0MsMHhGQSwweDdFLCAweDRGLDB4RkMsMHhERiwweDFELDB4QzcsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4QUUsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZELDB4RkIsIDB4RkYsMHhGRiwweEZFLDB4RkUsMHhGQywweEZGLDB4N0YsMHg3RiwKKzB4QkYsMHhFRiwweEZFLDB4RkYsMHhGRiwweEZGLDB4NUYsMHhGRCwgMHhGRiwweEZGLDB4RkYsMHhGRCwweDZGLDB4NUEsMHhENywweDdCLAorMHhCRSwweDVGLDB4RkUsMHgzOSwweEZGLDB4RjcsMHhGRiwweEY3LCAweEZELDB4RkUsMHhBQSwweDFGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZFLDB4RkUsMHhBQiwweEFGLDB4RkQsMHhGRSwweEJGLDB4RkYsIDB4RjcsMHhGRiwweDdGLDB4RkUsMHg4RiwweEUzLDB4RkIsMHhFRSwKKzB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRiwweEVCLDB4RkIsMHhGRiwgMHhGRCwweEJGLDB4RUYsMHhERiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGQiwweEU0LDB4M0YsMHhGRiwweERGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RjMsMHhFRiwweEJCLDB4RkIsCisweEJGLDB4RUYsMHhCQiwweEZGLDB4RDcsMHhCRiwweEZGLDB4RkYsIDB4RkYsMHgyOSwweEFGLDB4RjcsMHhGRiwweEZGLDB4RkIsMHhGRiwKKzB4RkIsMHhFNiwweEZGLDB4MEYsMHhGQiwweDNGLDB4REYsMHgwRiwgMHhGRiwweEFGLDB4RkYsMHhGRiwweEZGLDB4RjUsMHhDMywweERGLAorMHg1RiwweEZGLDB4RkYsMHhGRiwweEZFLDB4NkIsMHhDQSwweEJFLCAweEJDLDB4RkYsMHg5RiwweEYyLDB4QkYsMHhGRiwweEZFLDB4RkEsCisweEZGLDB4RkYsMHhFRiwweDE2LDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGQywweERGLDB4OTcsMHhGRCwweDc5LDB4RkYsMHgzNywKKzB4RTcsMHg3RiwweEZGLDB4RkYsMHhCNSwweEZGLDB4RkYsMHhGNiwgMHgyRiwweEZGLDB4RkQsMHhGQiwweEZFLDB4RkYsMHhGRiwweEZELAorMHg1RiwweDU3LDB4NUYsMHhGRiwweERCLDB4NTIsMHhERiwweEZGLCAweEZELDB4QkYsMHhGRiwweEZGLDB4RkMsMHhEQiwweEZGLDB4N0IsCisweEI1LDB4RkQsMHg3RiwweEZGLDB4NzEsMHg5QywweDZFLDB4RkYsIDB4RjYsMHgzNSwweEE1LDB4OUIsMHhGRiwweEZGLDB4RkQsMHhGRiwKKzB4RkYsMHhEQiwweDlFLDB4N0YsMHhGRSwweEVGLDB4RkIsMHhGRiwgMHhGRiwweEJELDB4RUYsMHhGRiwweERFLDB4QjcsMHhGOSwweDRCLAorMHhGRiwweEY1LDB4RUYsMHhGRiwweEZGLDB4RkYsMHhFOCwweDdFLCAweEZGLDB4RUEsMHhERiwweEY3LDB4RkYsMHhGRCwweDY5LDB4NUIsCisweEZDLDB4OUYsMHhFRiwweDc4LDB4RDYsMHhGRiwweEVCLDB4RUYsIDB4RkYsMHhGRiwweEZGLDB4RTgsMHhGRiwweEZGLDB4RUQsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RTMsMHhGOSwweEY2LDB4QkYsMHhGRiwgMHhGRiwweEZFLDB4REYsMHhGRiwweDdGLDB4RkYsMHhGRiwweEZGLAorMHhEMSwweEZGLDB4RkYsMHhFNywweEZGLDB4RkYsMHhGRiwweEZGLCAweEU3LDB4RjksMHhGRiwweEJGLDB4N0YsMHhEOSwweEZGLDB4RkQsCisweEZFLDB4N0YsMHhGRiwweEZFLDB4RkYsMHhGOSwweEZGLDB4RkIsIDB4RDYsMHhERiwweEJGLDB4RUYsMHg1QiwweEQ2LDB4RkYsMHhCRiwKKzB4RkIsMHhGNiwweEZGLDB4QkYsMHhFRiwweEY4LDB4RjYsMHhERCwgMHhCRSwweEZFLDB4MTYsMHhGRiwweEJGLDB4RUYsMHhGRiwweEZFLAorMHhGRiwweEJGLDB4RUYsMHhGRiwweEZGLDB4RkYsMHg2RiwweEZCLCAweEZGLDB4RkYsMHhGRiwweDZGLDB4RjMsMHhGRiwweEY3LDB4RUYsCisweEZCLDB4RkYsMHhCRiwweEZGLDB4RUYsMHhGRSwweEZGLDB4QkYsIDB4RkYsMHhGRiwweEZGLDB4QkUsMHhCRiwweEZGLDB4RUYsMHhGRiwKKzB4N0YsMHhFRiwweEZGLDB4RkQsMHgxNywweEZCLDB4N0IsMHhGRiwgMHhGRiwweEZELDB4N0YsMHhEQiwweEY2LDB4RjQsMHg3RiwweEZBLAorMHhGRSwweEY1LDB4QkYsMHhFQiwweEUzLDB4RjcsMHhGRiwweEZGLCAweEU5LDB4QkYsMHhGRiwweEFGLDB4RjcsMHhGRCwweEYzLDB4N0UsCisweDhGLDB4QTMsMHhFQSwweEZGLDB4Q0IsMHhGMywweEVFLDB4RkYsIDB4QkYsMHhFRiwweEY3LDB4RjksMHhGRiwweEZFLDB4N0YsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RjUsMHhGQiwweEY2LDB4RkYsMHhGNSwgMHgyRiwweEZFLDB4RkIsMHhENywweEJGLDB4RkYsMHhCRSwweERGLAorMHg5RiwweEZGLDB4RjAsMHhGRiwweEZGLDB4RjksMHhGRSwweDdGLCAweDhGLDB4QTMsMHhGOCwweEZFLDB4NkYsMHg5RiwweEY5LDB4RjYsCisweDJGLDB4OUYsMHhFNywweEY5LDB4RkUsMHgyRiwweDlGLDB4RTEsIDB4RkYsMHhGRiwweEZGLDB4N0YsMHhERiwweEY3LDB4RjUsMHhGRCwKKzB4N0YsMHg3RiwweEY1LDB4RkYsMHg5RiwweDVGLDB4RkIsMHhGRSwgMHhGRiwweDdGLDB4RkYsMHhGRiwweENCLDB4RkYsMHhGRiwweEZCLAorMHhGRSwweEZGLDB4QkYsMHhBRiwweEZCLDB4RkUsMHhGRiwweERGLCAweEZFLDB4RkUsMHhCRiwweEY3LDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4QzcsMHhGRiwweEZGLDB4RkQsMHhGRiwweDdGLDB4REQsIDB4RjcsMHhGRCwweEZGLDB4RkYsMHhENywweEZGLDB4RkQsMHg3RiwKKzB4RkYsMHhGQiwweEZELDB4RkYsMHhGRiwweEZFLDB4RUYsMHg3RiwgMHhGRCwweEVGLDB4RkIsMHhGRSwweEZCLDB4RkQsMHhGRiwweDdGLAorMHhERiwweEZELDB4RkYsMHg3QSwweERGLDB4RjcsMHhGRCwweEZGLCAweEZGLDB4RkYsMHhGRiwweDFGLDB4RkYsMHhGRiwweEQzLDB4RjcsCisweEZGLDB4RkYsMHg2RiwweERCLDB4RkYsMHhGRiwweEVGLDB4Q0IsIDB4RjQsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRSwKKzB4MjksMHhGRiwweEU4LDB4REEsMHg3NiwweDlGLDB4QUYsMHg2QSwgMHhEQSwweEZFLDB4MzUsMHhFQiwweERBLDB4RDYsMHhCRiwweEFCLAorMHhFQiwweDdBLDB4REUsMHhCRiwweEQ3LDB4N0YsMHhGRiwweEZFLCAweEZGLDB4QkYsMHhFRiwweEZELDB4REYsMHg3NywweEJGLDB4RkQsCisweDM3LDB4RUYsMHhGRiwweEVGLDB4RkYsMHgzRiwweEZGLDB4RkYsIDB4RkYsMHhGRSwweDdGLDB4RkYsMHhGRiwweEZGLDB4RjcsMHg3RSwKKzB4REYsMHhGRiwweEZGLDB4RkYsMHhGQSwweEI3LDB4N0YsMHhGRiwgMHhGRiwweEZFLDB4RkYsMHhGRiwweEZGLDB4RkYsMHg4OSwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4OUYsMHhGQiwweEZGLDB4RkYsMHhGRiwweEU3LDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEFBLDB4RkYsMHhBQiwweEZCLDB4RkEsIDB4RUYsMHhCRiwweEZGLDB4REYsMHhGQSwweDdCLDB4QjksMHhGRSwKKzB4RkUsMHhGRiwweEZELDB4RkYsMHhGNywweEZFLDB4M0YsMHhGRiwgMHhCNywweEZGLDB4RjcsMHhFRSwweEZGLDB4N0YsMHhFRiwweEZGLAorMHhGRiwweDdGLDB4RkYsMHgxRiwweEZCLDB4RkYsMHhCRiwweEZCLCAweEZFLDB4RkYsMHhCRCwweEZGLDB4RkYsMHgyRiwweEZGLDB4QkYsCisweEZGLDB4N0YsMHhERiwweEZBLDB4RkYsMHhGRiwweEZDLDB4RUUsIDB4RjUsMHhGMywweEJFLDB4RkIsMHgwRiwweEVGLDB4RjMsMHhCRSwKKzB4RUYsMHhGQywweDVGLDB4RkYsMHg1QSwweEZGLDB4RjcsMHhERiwgMHhGRiwweEZGLDB4RkUsMHhENSwweEZDLDB4NUYsMHhGQiwweEYyLAorMHhGRiwweEZGLDB4MkYsMHhCQiwweEYzLDB4RkYsMHhGRiwweEJGLCAweEZGLDB4RUYsMHhGRiwweEVGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEJGLDB4RkYsMHhGRiwweEZELDB4N0IsMHhGRiwweERGLDB4QjksIDB4RkYsMHhGQiwweEZGLDB4RDgsMHg3RiwweEZGLDB4RkYsMHhGRiwKKzB4RkIsMHhGRiwweEZDLDB4N0YsMHgxRiwweEJGLDB4RTAsMHhERiwgMHhGNywweEVGLDB4RkYsMHhGRCwweDdGLDB4RkUsMHhERiwweEZGLAorMHhFMCwweEZGLDB4RkYsMHhGRCwweEVGLDB4RkIsMHhGRiwweEZFLCAweEY3LDB4REYsMHhGRiwweEVCLDB4NUYsMHhGRiwweEY3LDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEJGLDB4RkYsMHhGRCwweEZGLDB4RkQsIDB4RkYsMHhGRiwweEZGLDB4RjcsMHhGRCwweEZGLDB4M0IsMHhEQywKKzB4RkQsMHg2RCwweDdCLDB4NUYsMHg1NywweEY1LDB4RkQsMHg3RiwgMHg1RiwweEZGLDB4QjEsMHhGRiwweEVCLDB4RkYsMHhGRiwweEZGLAorMHhGQiwweEZCLDB4RkUsMHhGRiwweEJGLDB4RkIsMHhCRSwweEZGLCAweEJGLDB4RUYsMHhGQiwweEZFLDB4RkYsMHhBRiwweEZFLDB4RjcsCisweERGLDB4REYsMHhGRiwweEZGLDB4RkYsMHg3RiwweENGLDB4RjMsIDB4RjgsMHhGRiwweEQ3LDB4RkIsMHhGRiwweDVGLDB4QkYsMHhGNywKKzB4RkIsMHhGRiwweDdGLDB4RkUsMHgyMywweEZGLDB4RkYsMHhGRSwgMHg3RiwweEYzLDB4RkYsMHhGQiwweEZFLDB4RkYsMHhGRiwweEYzLAorMHhGRiwweEZGLDB4RjUsMHhGOSwweEZGLDB4M0YsMHhGRiwweEZGLCAweEYwLDB4OUEsMHhGRiwweEJFLDB4N0YsMHhGRiwweEZDLDB4RjksCisweEZGLDB4RkQsMHhBRiwweEVCLDB4RkUsMHhCRiwweEZGLDB4Q0YsIDB4RjMsMHhGRSwweDdGLDB4RkYsMHhGRiwweDVCLDB4QkQsMHhGRiwKKzB4QkMsMHhFQiwweEZGLDB4RDcsMHhENCwweEFGLDB4QUYsMHhGRCwgMHhGRiwweENGLDB4RjcsMHhGRCwweEZGLDB4N0YsMHhERiwweEY3LAorMHhGRCwweEZFLDB4RkYsMHg2RiwweEZGLDB4RkIsMHhGRiwweEZGLCAweEZGLDB4RkQsMHg3RiwweDVFLDB4RkQsMHhCRiwweERCLDB4RjYsCisweEZELDB4QkYsMHg2RiwweEZCLDB4RUUsMHhGRCwweEZGLDB4N0EsIDB4RkYsMHhGQSwweEZCLDB4RkYsMHgzRiwweEZCLDB4QjcsMHg1RiwKKzB4RDYsMHhGNywweDFGLDB4NzEsMHhEQywweDc3LDB4MUQsMHhDNywgMHgzMSwweERDLDB4NzcsMHhERiwweEY5LDB4QkYsMHhGNSwweDVCLAorMHhGNCwweEQ3LDB4OUQsMHhBRSwweEZGLDB4QkYsMHhGRCwweEJGLCAweERCLDB4RjYsMHhGRCwweEJGLDB4NkYsMHhEQiwweEY2LDB4RkUsCisweDNELDB4ODEsMHhGRiwweEVCLDB4RkUsMHhGRSwweEZFLDB4RkYsIDB4RUIsMHg3QSwweERGLDB4N0QsMHg3NywweDdELDB4RjUsMHg3OSwKKzB4REYsMHg1NywweERELDB4RjUsMHg3RCwweDdFLDB4RTYsMHhGRiwgMHhENiwweDNGLDB4QkYsMHg3RiwweEZGLDB4RDQsMHhGNSwweDNGLAorMHhCRiwweEZCLDB4QkUsMHhFRiwweEIzLDB4RUUsMHhGQiwweDlFLCAweEVGLDB4QkIsMHhGRSwweDhCLDB4RkYsMHhGRSwweERGLDB4QjcsCisweEVELDB4RkYsMHhGNywweEZELDB4RkUsMHhGRiwweEVGLDB4QkIsIDB4RUUsMHhGRiwweEJFLDB4RUYsMHhCQiwweEVFLDB4RUIsMHhGQywKKzB4MUYsMHhGRiwweEZGLDB4RkQsMHhGRiwweEU3LDB4RkYsMHhGNywgMHhGRCwweEZGLDB4RUYsMHhGRSwweEZGLDB4QkYsMHhFRiwweEZCLAorMHhGRSwweEZGLDB4QkYsMHhFQiwweEZBLDB4MUYsMHhGRiwweEI3LCAweEVGLDB4NUIsMHhGRSwweEZGLDB4QUYsMHhFQiwweERELDB4RTcsCisweERFLDB4NzcsMHg5RCwweEU3LDB4NzksMHhERSwweDc3LDB4OUQsIDB4QkYsMHhFNiwweDZGLDB4RkYsMHhGRSwweEZGLDB4QkYsMHhFRiwKKzB4RkIsMHhGRSwweEZELDB4QkYsMHg2RiwweEY2LDB4RkQsMHhCRiwgMHg2RiwweERCLDB4RjYsMHhGRCwweEJGLDB4RkYsMHg3RSwweEZGLAorMHhGRiwweEZCLDB4RkUsMHhGRSwweEZGLDB4RUYsMHhGQiwweEZELCAweEVGLDB4N0UsMHhGNywweEJELDB4RUYsMHg3QiwweERFLDB4RjcsCisweEJELDB4RUYsMHhGRiwweEQ1LDB4RkYsMHhCRiwweEZGLDB4RUYsIDB4RkUsMHhGRiwweEZDLDB4M0YsMHgwRiwweEU3LDB4RkUsMHg3RiwKKzB4OUYsMHhFNywweEY5LDB4RkUsMHg3RiwweDlGLDB4RTcsMHhGRSwgMHhGMywweEZGLDB4RkUsMHhERiwweEFELDB4REYsMHg2NywweEVFLAorMHhGQiwweEJGLDB4RUYsMHhGRSwweEZGLDB4QkYsMHhFRiwweEZCLCAweEZFLDB4RkYsMHhCRiwweEVGLDB4RkYsMHgyMywweEZGLDB4RkYsCisweEZGLDB4RkYsMHg3RiwweEZGLDB4RjMsMHhCQywweERCLDB4RkUsIDB4RkIsMHhGRiwweEZCLDB4QkUsMHhGNywweEZCLDB4RkYsMHg3RiwKKzB4REYsMHhGRiwweENGLDB4RkIsMHhGRiwweDlGLDB4RTMsMHhGOSwgMHhCRSwweDNGLDB4OEYsMHhFNywweDc5LDB4RkYsMHg5RCwweEU3LAorMHhGOSwweEZFLDB4N0YsMHg5RiwweEU3LDB4RjksMHhGRSwweDVGLCAweEZGLDB4Q0YsMHhGNywweEZGLDB4RkYsMHhGRiwweERGLDB4RjcsCisweEZFLDB4N0YsMHhFNywweEY5LDB4RkUsMHg3RiwweEZGLDB4RkYsIDB4RkIsMHhGRSwweEZGLDB4RkYsMHhCRiwweEZGLDB4QkYsMHhCRiwKKzB4RkYsMHhGRSwweEZGLDB4QkYsMHhFRiwweEZGLDB4RkQsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjcsMHhGRCwweEZGLAorMHhGRiwweDNGLDB4RkYsMHhCRiwweEZGLDB4RjcsMHhGRiwweEZGLCAweDdGLDB4REYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhFOCwweEVGLDB4RkYsIDB4NUYsMHhGNywweEJGLDB4RjksMHhGRSwweERGLDB4QjcsMHhGRCwKKzB4RkYsMHhERiwweEY3LDB4RkQsMHhGRiwweDdGLDB4REYsMHhGNywgMHhGRCwweEZGLDB4REQsMHhGRiwweEYyLDB4RkYsMHhCRiwweEZGLAorMHhGRiwweEJGLDB4RkYsMHhGRiwweDJGLDB4RjIsMHhGRiwweEJGLCAweDJGLDB4N0IsMHhEMiwweEY3LDB4QkYsMHgyRiwweEZGLDB4QkIsCisweEZGLDB4RUUsMHg4RiwweEFGLDB4RUIsMHhGQSwweEZFLDB4M0YsIDB4QTcsMHg2OSwweENFLDB4OEYsMHhBNCwweEVBLDB4RkEsMHhFRSwKKzB4QjcsMHhBRSwweEVCLDB4RkQsMHhDNywweEZGLDB4RjcsMHhGNywgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4N0YsMHgzRSwweEYzLAorMHg3NCwweEZGLDB4M0YsMHg0RiwweEZGLDB4RTcsMHhGRiwweDNGLCAweEZFLDB4QTcsMHhGRiwweEZGLDB4REYsMHhGNywweEI3LDB4RkYsCisweEY3LDB4RkYsMHhCQSwweEVGLDB4MzcsMHhFQiwweEZCLDB4RkUsIDB4QkYsMHhGQiwweEZFLDB4RjMsMHhGRiwweEY5LDB4REYsMHhGRiwKKzB4QkYsMHhGRiwweEZGLDB4RkYsMHhCRiwweEZGLDB4RkYsMHhGRiwgMHhGRCwweERGLDB4RkYsMHhGRCwweEZGLDB4RkYsMHhGQiwweEZFLAorMHhGRCwweEZGLDB4RkIsMHhCRiwweEZFLDB4M0YsMHhFRCwweEZGLCAweERGLDB4QkUsMHgzRCwweEE3LDB4RkIsMHhGQSwweDNGLDB4RTYsCisweEUxLDB4RkUsMHhGRSwweDNGLDB4RUYsMHhFMywweERGLDB4RjUsIDB4N0YsMHhGRSwweEZGLDB4N0UsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RUYsMHg2RiwweEY2LDB4RkYsMHg3RCwweEVGLDB4RDcsMHhERSwgMHhGRiwweDdELDB4RUYsMHhGRiwweEYyLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHg3QiwweERFLDB4RkIsMHhFNiwweEVFLCAweEVGLDB4MzcsMHg2RSwweEYzLDB4N0UsMHhFQiwweDM3LDB4RUYsCisweEZGLDB4QzEsMHhGRiwweEZFLDB4RkYsMHhGNywweEVGLDB4RkYsIDB4RkYsMHhGRiwweEJGLDB4M0YsMHhEMiwweERGLDB4QkYsMHgyRiwKKzB4N0IsMHhFMiwweEZGLDB4RkUsMHgzQiwweEJELDB4REIsMHhGRiwgMHhGRSwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhFRiwweEZFLAorMHhGRiwweEZCLDB4RkYsMHhGRiwweEJGLDB4RkYsMHhGQiwweERGLCAweEZGLDB4QkYsMHhGRiwweEI3LDB4RkYsMHhGRiwweEJGLDB4RUYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDBGLDB4RkYsIDB4N0YsMHhGRiwweDFGLDB4RUYsMHhGMSwweEZELDB4RkYsMHhGNiwKKzB4QUYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RUYsMHhGRiwgMHhGRiwweEZGLDB4RkUsMHg5RiwweEZGLDB4RkYsMHhGRiwweDc3LAorMHhFRiwweEY3LDB4RkIsMHhGRiwweEZFLDB4NUYsMHhGRiwweEZGLCAweEJGLDB4Q0YsMHhGQiwweEY3LDB4REQsMHhGNywweEY1LDB4RkYsCisweDVGLDB4RDUsMHhGNSwweEZELDB4N0YsMHg1RiwweEQ3LDB4RjUsIDB4RkYsMHhGQiwweDBGLDB4RkYsMHhGRiwweEE5LDB4RUEsMHg3QSwKKzB4RkYsMHhBRiwweDhGLDB4RkUsMHhERiwweEFGLDB4RUYsMHhGQiwgMHhGRSwweEZGLDB4QkYsMHhFRiwweEZCLDB4REYsMHhFNSwweDVGLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4QkQsMHg1NywweEZGLCAweEZGLDB4NkYsMHg3NywweEJGLDB4RjcsMHhGQiwweEZGLDB4N0YsCisweEJGLDB4RjcsMHhGRiwweEZDLDB4QkYsMHhGRiwweDlGLDB4RkYsIDB4RkYsMHhFRiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsMHgxRiwKKzB4Q0YsMHhGRiwweEZDLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGQiwgMHg2NSwweEFGLDB4RjMsMHg3QywweEZGLDB4M0YsMHhERiwweEZGLAorMHhGRCwweEU5LDB4RkUsMHg3RiwweEU3LDB4RkYsMHhGRSwweDdGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkQsMHhFMywweERGLDB4RkIsCisweERCLDB4RjYsMHhGRCwweEVGLDB4NUIsMHhGQiwweEZGLDB4REYsIDB4RkMsMHhGRiwweDNGLDB4REYsMHhGMywweEZELDB4RkYsMHg3RiwKKzB4REYsMHhFRiwweDY2LDB4RkYsMHhERiwweEFELDB4RUIsMHg3QSwgMHhERSwweEY3LDB4RjcsMHhFNywweEQ5LDB4RkQsMHg5RiwweDY3LAorMHhEOSwweEY2LDB4N0QsMHg5RiwweEU3LDB4REYsMHhGNSwweDQ3LCAweEZELDB4NjUsMHg1QiwweEQ2LDB4RjQsMHhGRSwweEZGLDB4RUYsCisweEZGLDB4NkQsMHhGNiwweERELDB4QjcsMHg2RCwweERCLDB4NzYsIDB4REMsMHhCNywweDdELDB4RkEsMHg5QiwweEY2LDB4NkQsMHg5RCwKKzB4NjcsMHg1OSwweERGLDB4RjcsMHhERCwweEZGLDB4RUIsMHhGRSwgMHhCRiwweEFGLDB4RUIsMHhGQSwweEZFLDB4QkYsMHhBRiwweEUzLAorMHhEMSwweDlGLDB4RkYsMHhCRCwweEJGLDB4RUYsMHhGRSwweEY3LCAweEJGLDB4QkYsMHhGNywweEQ3LDB4N0YsMHhERCwweEY3LDB4OUQsCisweERGLDB4N0YsMHhERiwweEY3LDB4RkYsMHhFMCwweDdGLDB4RkQsIDB4QzEsMHhERiwweEY3LDB4RkQsMHhDNywweDdGLDB4N0YsMHhGQiwKKzB4RkYsMHhCQiwweEVDLDB4RkIsMHgzRSwweEZGLDB4QkYsMHhFQywgMHhGQiwweEZGLDB4RDgsMHg3RiwweEJGLDB4NkMsMHhGRiwweEJFLAorMHhGRiwweEJGLDB4RUQsMHhGRiwweEVGLDB4RkUsMHhGQiwweEJGLCAweEVGLDB4RkIsMHhGRSwweEZGLDB4QkYsMHhFRSwweEZGLDB4QzUsCisweEZGLDB4QUYsMHg2RiwweEZGLDB4RkMsMHhGRCwweDNGLDB4RTcsIDB4RkYsMHhGRSwweEZGLDB4RUYsMHhGQiwweEZFLDB4RkYsMHhCRiwKKzB4RUYsMHhGQiwweEZFLDB4QkYsMHg4OSwweEZFLDB4RkEsMHhCQSwgMHhGRSwweEJGLDB4QUYsMHhGQiwweEY2LDB4RjUsMHhEOSwweDdELAorMHg5NywweDY1LDB4RDksMHg3NCwweDVELDB4OTcsMHg2NSwweEQzLCAweEZFLDB4RDYsMHhGRiwweEJGLDB4RjcsMHhGRCwweEZGLDB4N0YsCisweEJGLDB4Q0YsMHhGQiwweEZFLDB4RkYsMHhFRiwweEZCLDB4RkUsIDB4RkYsMHhCRiwweEVGLDB4RkIsMHhGRiwweEY2LDB4OEYsMHhGQiwKKzB4RkYsMHhFRiwweEZCLDB4N0UsMHhEQiwweEZFLDB4RkYsMHhCRSwgMHhFRiwweEVFLDB4RkIsMHhCRSwweEVGLDB4QkIsMHhFRSwweEZCLAorMHhCRSwweEZGLDB4RkYsMHhERiwweEZGLDB4NDMsMHhGRiwweEZGLCAweEZCLDB4RUYsMHg1RiwweEI3LDB4RkUsMHg3RiwweEU3LDB4RjksCisweEZFLDB4N0YsMHg5RiwweEU3LDB4RjksMHhGRSwweDdGLDB4RjksIDB4QkYsMHhGRSwweEFGLDB4NzcsMHhGRCwweEZGLDB4MkYsMHhBRiwKKzB4QTcsMHhGRSwweEZGLDB4RUYsMHhGQiwweEZFLDB4RkYsMHhCRiwgMHhFRiwweEZCLDB4RkUsMHhGRiwweEYxLDB4N0YsMHhFRiwweERGLAorMHhGRiwweDk3LDB4RjUsMHhFRiwweEZGLDB4REYsMHhGRiwweEZGLCAweEJGLDB4RkYsMHhCRiwweEZGLDB4RkYsMHhGRSwweEZGLDB4RkYsCisweEZGLDB4RTAsMHhGRiwweEZGLDB4RjksMHhGRSwweDJGLDB4OEIsIDB4RTMsMHhGOCwweEJFLDB4NzcsMHg5RiwweEY5LDB4REEsMHg3NywKKzB4OUQsMHhFNywweDc5LDB4REUsMHg3NywweDlGLDB4REQsMHhGRiwgMHhGRCwweEZELDB4N0YsMHg1RiwweEQ3LDB4RkQsMHhGRiwweDdGLAorMHhFNywweEZFLDB4N0YsMHg5NywweEU3LDB4RkIsMHhGRSwweEZGLCAweEJGLDB4RUYsMHhGRiwweEFCLDB4RkYsMHhFRiwweEZBLDB4RkUsCisweEJGLDB4QUYsMHhGRiwweEZBLDB4RkYsMHhGRiwweERGLDB4RkYsIDB4RkIsMHhGRiwweEY3LDB4RkQsMHhGRiwweDdGLDB4REYsMHhGRiwKKzB4NjcsMHhGRiwweEY3LDB4RjUsMHhGRiwweEZGLDB4RkYsMHhERiwgMHhGRCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RUYsMHhGRiwweEJELCAweEVCLDB4RkYsMHhGRiwweEY3LDB4QUQsMHhFQiwweEZGLDB4REYsCisweEZELDB4RkYsMHgzRiwweERGLDB4RjcsMHhGRCwweEZGLDB4N0YsIDB4REYsMHhGRiwweDVGLDB4RkYsMHhGNywweEZGLDB4RkYsMHhGRCwKKzB4QkYsMHhGRiwweENCLDB4RjQsMHhGRiwweDdGLDB4RDMsMHhGNywgMHhGRCwweDNGLDB4N0YsMHhEMywweEY3LDB4RkYsMHhGQywweDNGLAorMHhGRiwweEVBLDB4RkEsMHhCRSwweEFGLDB4QUIsMHhFQiwweEJBLCAweEY0LDB4OTUsMHg2QiwweDUyLDB4RDQsMHhBRCwweDJGLDB4NEEsCisweEQyLDB4RjYsMHhCRiwweEQyLDB4N0YsMHhGNywweDNGLDB4RkYsIDB4RkYsMHhGMywweDdGLDB4RkYsMHhGRiwweEY3LDB4RkYsMHhCQSwKKzB4REYsMHhGQiwweEZELDB4RkYsMHhCRiwweEZGLDB4RkIsMHhGRiwgMHhGOCwweDdGLDB4RUEsMHhGRiwweEZFLDB4RkUsMHhERiwweEZGLAorMHhGNywweEZGLDB4N0YsMHhCQiwweEZGLDB4RkYsMHhCRiwweERGLCAweEZCLDB4RkYsMHhGRiwweEJGLDB4RkYsMHhCMSwweDdGLDB4RkYsCisweEZCLDB4RUYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4QkYsIDB4Q0YsMHhGRSwweEZGLDB4RkYsMHhFRiwweEZGLDB4RjcsMHhGRiwKKzB4RkYsMHhGRiwweEYxLDB4RkYsMHg2OSwweEJFLDB4RkEsMHhCRiwgMHhBRiwweEUyLDB4RkYsMHhGRSwweEZELDB4QUYsMHhGMywweEZFLAorMHhGRiwweEJGLDB4RUYsMHhGQiwweEZDLDB4RkYsMHhGRiwweDA3LCAweEZELDB4OTUsMHhEQiwweERGLDB4N0YsMHhERiwweEFGLDB4RkYsCisweEY3LDB4QUYsMHgzNiwweEZFLDB4QkYsMHg2NSwweEVCLDB4RjYsIDB4RkUsMHg5RiwweDZGLDB4RkUsMHgwNywweEZGLDB4Q0YsMHhGRiwKKzB4RjgsMHhGRSwweEZGLDB4Q0YsMHhGRiwweEY2LDB4RkEsMHhFNywgMHhGQiwweEZFLDB4RkYsMHhCQiwweEVELDB4RjksMHhGRiwweEZGLAorMHhGRiwweDVGLDB4RkYsMHhGRiwweEZGLDB4NzUsMHhGRiwweEVGLCAweDdFLDB4RkQsMHhFMCwweEU4LDB4NUUsMHhEMywweEU1LDB4RjksCisweDNFLDB4NUYsMHhENywweEY3LDB4RkYsMHhGQSwweDJGLDB4RkIsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRSwweEZGLDB4RkYsMHg3RiwKKzB4N0YsMHhENywweEY1LDB4N0QsMHg1RiwweDU3LDB4RDUsMHhGNSwgMHhFRiwweEZGLDB4RjMsMHg3RiwweEZDLDB4N0YsMHhGRiwweEM3LAorMHhGMSwweEZGLDB4RkYsMHgxRiwweENGLDB4QjAsMHhGRiwweDNGLCAweENGLDB4RjMsMHhGQywweEZGLDB4M0YsMHhDRSwweEZGLDB4RTQsCisweEZGLDB4REYsMHg3RiwweEZFLDB4RjcsMHhCQiwweEZGLDB4RkYsIDB4REYsMHhFRiwweEVFLDB4RkYsMHhCRiwweEVGLDB4RkIsMHhGRSwKKzB4QkYsMHhCRiwweEVGLDB4RkYsMHhEMSwweEZGLDB4RkYsMHhGRiwgMHhGRCwweEZCLDB4RkYsMHhGRCwweEZGLDB4RkIsMHg5RiwweEU5LAorMHhGRSwweDdGLDB4OUYsMHhFNywweEY5LDB4RkUsMHg3RiwweEJGLCAweEZGLDB4QjMsMHhGRiwweEZGLDB4RjcsMHhGRiwweEZGLDB4QUYsCisweEY3LDB4RkYsMHhCNiwweDNGLDB4RUIsMHhGQSwweEZFLDB4QkYsIDB4QUYsMHhFQiwweEZBLDB4RkUsMHhCRiwweEZFLDB4QTcsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGNywweEZGLDB4RkYsMHhGRiwgMHhGRSwweDlGLDB4RjcsMHhGOSwweEZGLDB4N0YsMHg5RiwweEU3LAorMHhGRiwweEZGLDB4RkUsMHhBRiwweDZGLDB4RkYsMHhGRiwweEZGLCAweDlGLDB4RkYsMHhERiwweEZGLDB4N0QsMHg1RiwweERELDB4RkYsCisweEZCLDB4QkYsMHhFNywweEJCLDB4RkYsMHhGQiwweERGLDB4NkQsIDB4NUYsMHg3RSwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RUIsMHhGNywweEZGLDB4RTcsMHhFRiwweEY3LDB4RkYsMHhGRiwgMHg3RiwweEZGLDB4RjcsMHhGRiwweEZDLDB4OEYsMHhGRiwweEVGLAorMHhGRCwweEZFLDB4RkYsMHhCRSwweEY0LDB4RjIsMHg3RCwweEQ3LCAweENGLDB4RkYsMHgzRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4Q0YsMHg2QiwweEZGLDB4QkYsMHgzRiwweEZCLDB4RjIsIDB4RkMsMHg3RiwweEVCLDB4RkYsMHg5RiwweEZBLDB4RkYsMHhGRiwKKzB4M0YsMHhGRiwweEYzLDB4RkYsMHhGRiwweEZELDB4NzAsMHhGNywgMHhGRiwweEZGLDB4QkYsMHhGRiwweEZCLDB4RDcsMHhGRSwweEY1LAorMHg3NywweEZGLDB4MTUsMHhERCwweDc3LDB4RkQsMHhGRiwweDdGLCAweERGLDB4RjcsMHhGQiwweENELDB4QkYsMHhGRiwweEZELDB4RkYsCisweEZGLDB4REYsMHgzNywweENELDB4RjksMHhFQywweEZFLDB4RUYsIDB4QkIsMHhGNCwweEZCLDB4M0YsMHg0RiwweEIzLDB4RkYsMHhGRCwKKzB4Q0IsMHhGRiwweEU5LDB4N0UsMHg1NCwweDlGLDB4RTUsMHg0QiwgMHhCNywweEZGLDB4REQsMHg3RCwweEM3LDB4NzEsMHhERCwweDc3LAorMHg1RCwweEQ3LDB4NzUsMHhDRCwweDdGLDB4RDYsMHhGRiwweEQzLCAweEY2LDB4RjksMHgzRiwweDZELDB4OTUsMHhBRiwweDdGLDB4RkUsCisweEZGLDB4RUYsMHhGQiwweEZFLDB4RkYsMHhCRiwweEVGLDB4RkIsIDB4RkUsMHhGNiwweEM3LDB4RkYsMHhBRCwweDdCLDB4Q0EsMHhGRiwKKzB4QkYsMHhCRiwweEVGLDB4RkQsMHhFMywweERGLDB4QjcsMHhFRCwgMHhGQiwweDdFLDB4REYsMHgzNywweEVELDB4RTMsMHhGQiwweERGLAorMHhGRiwweDUyLDB4NUMsMHgxNSwweEZELDB4Q0YsMHg3RiwweERGLCAweEZFLDB4RUYsMHhFRiwweEZCLDB4RkUsMHhGRiwweEJGLDB4RUMsCisweDdCLDB4RkUsMHhGRiwweEZFLDB4M0UsMHg3RiwweERBLDB4RjcsIDB4RkQsMHhGRiwweDdGLDB4RkYsMHhGRiwweEZCLDB4RUYsMHhCQiwKKzB4NkYsMHhGQiwweEZFLDB4RkYsMHhCRiwweEVGLDB4RkIsMHhGRiwgMHhGNywweDdELDB4RkYsMHhEOCwweEZGLDB4RkQsMHhCRiwweDdGLAorMHhGQiwweEZGLDB4RkYsMHg5RiwweEZCLDB4RkUsMHg3RiwweDlGLCAweEU3LDB4RjksMHhGRSwweDdGLDB4OUYsMHhFQSwweDdGLDB4RjYsCisweEJGLDB4QkQsMHg2QSwweDVBLDB4RjYsMHhFNSwweEJGLDB4NzcsIDB4NUYsMHg2RCwweERELDB4NzcsMHg1RCwweEQ3LDB4NzUsMHhERCwKKzB4NzcsMHhGRiwweEE1LDB4QkYsMHhDRiwweEZCLDB4RkYsMHhGRiwgMHhCRiwweENGLDB4RkIsMHhGRCwweEZGLDB4QkYsMHhGMywweEZFLAorMHhGRiwweEJGLDB4RUYsMHhGQiwweEZFLDB4RkYsMHhGRCwweEFCLCAweEZGLDB4QkYsMHhCRiwweEZGLDB4RkIsMHhGRiwweDdGLDB4RUYsCisweEZGLDB4QkUsMHhGQiwweEVFLDB4RkIsMHhCRSwweEVGLDB4QkIsIDB4RUUsMHhGQiwweEJGLDB4RkYsMHhCNSwweEZGLDB4RDAsMHhCQywKKzB4RkQsMHgyRiwweDRCLDB4RjcsMHhGRiwweEZGLDB4OUYsMHhGOSwgMHhGRSwweDdGLDB4OUYsMHhFNywweEY5LDB4RkUsMHg3RiwweDlGLAorMHhGQSwweDhGLDB4RkQsMHhBQiwweEZBLDB4REEsMHhCRiwweEFGLCAweEIzLDB4RkQsMHhGRiwweEJGLDB4RkIsMHhGRSwweEZGLDB4QkYsCisweEVGLDB4RkIsMHhGRSwweEY3LDB4QkYsMHhGRiwweDlGLDB4RkYsIDB4NzcsMHhGNywweEJELDB4RkQsMHg3NywweERGLDB4RkYsMHg3RSwKKzB4REYsMHhFRCwweEJCLDB4RkUsMHhGRiwweEJFLDB4RUYsMHhGQiwgMHhGRSwweEZGLDB4RkEsMHgzRiwweEZGLDB4QkUsMHg2RiwweDhGLAorMHhFNiwweEY5LDB4RkUsMHg3RiwweDlGLDB4QzcsMHhGRSwweDdGLCAweDlGLDB4RTcsMHhGOSwweEZFLDB4N0YsMHg5RiwweEU3LDB4RkIsCisweDdGLDB4RkYsMHg3RiwweENGLDB4RkYsMHhGRCwweEZGLDB4RkYsIDB4REYsMHhGQiwweEFGLDB4QkYsMHhFRiwweEZGLDB4RkUsMHhGRiwKKzB4OUYsMHhFRiwweEZCLDB4RkYsMHhGQywweEZGLDB4RkIsMHhGRSwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZFLDB4RkYsMHhGRiwweEY3LAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RjUsMHhGRiwweEZGLDB4RkYsMHgzRiwweERGLDB4RjcsCisweEZGLDB4RkYsMHg3RiwweEVGLDB4RkUsMHhGRiwweEJGLDB4RkYsIDB4RkIsMHhGRiwweEZGLDB4QkYsMHhFRiwweEZGLDB4QjMsMHg3RiwKKzB4RkYsMHg3QiwweDVFLDB4RjcsMHhGRCwweEZGLDB4N0IsMHg3RiwgMHhGNywweEZGLDB4N0YsMHhERiwweEY3LDB4RkQsMHhGRiwweDdGLAorMHhERiwweEY3LDB4RkYsMHgxNywweEZGLDB4RkYsMHhGRiwweDdGLCAweEZGLDB4RkYsMHhERCwweEY2LDB4RkMsMHhCRiwweENCLDB4RjIsCisweEJDLDB4QkYsMHgyRiwweENCLDB4RjIsMHhGQywweEJGLDB4RkUsIDB4OEYsMHhGRiwweEZBLDB4N0UsMHhCRiwweEE3LDB4RUIsMHhEQSwKKzB4RkMsMHhCRiwweEFGLDB4N0EsMHhGRSwweEJGLDB4QUYsMHhFQSwgMHhGQSwweEZFLDB4QkYsMHhBRiwweEY0LDB4REYsMHhGRSwweEZGLAorMHhGMywweDNDLDB4N0YsMHgzRSwweEZGLDB4Q0YsMHhGOCwweEJGLCAweDhGLDB4RTMsMHhGOCwweEZFLDB4M0YsMHg4RiwweEU3LDB4RTgsCisweEZGLDB4RkMsMHg5RiwweEZGLDB4RkYsMHhDRiwweEVCLDB4QjMsIDB4RTcsMHhGQiwweDdCLDB4RjMsMHhGRSwweEZGLDB4Q0YsMHhEQiwKKzB4RkIsMHhGQiwweEJGLDB4NkYsMHg2RiwweERGLDB4RUMsMHg3RiwgMHhGRiwweEZGLDB4RjcsMHhGRCwweEZELDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEIyLDB4QkYsMHhGRiwweERFLDB4RkQsMHhCRCwweEVGLCAweEZCLDB4RjYsMHhERiwweEVBLDB4RTcsMHhEQiwweEZFLDB4QkIsCisweEZGLDB4RUIsMHhGQiwweEJGLDB4OUYsMHg4RiwweEU4LDB4RkUsIDB4M0YsMHg4RiwweEEzLDB4RjgsMHhGRSwweDNGLDB4OEYsMHhGRiwKKzB4RjgsMHg3RSwweEZELDB4RkQsMHg3RiwweEZGLDB4RkIsMHhDRCwgMHhGRiwweEZELDB4RkYsMHg1RiwweEVGLDB4RkQsMHhGRiwweEZGLAorMHhERiwweEY3LDB4RkQsMHhGRiwweEJFLDB4OTAsMHhGRiwweEZGLCAweEVFLDB4RkYsMHgzRiwweEJGLDB4RjMsMHhCQiwweEZFLDB4QjcsCisweEFCLDB4RkEsMHhGRSwweEFGLDB4QUQsMHhFQSwweEZBLDB4REUsIDB4QUIsMHhGRiwweDYzLDB4RkYsMHhGRSwweEYyLDB4RkYsMHhCMywKKzB4RkYsMHhERiwweEVFLDB4N0QsMHhGRiwweDAzLDB4RjEsMHhGNCwgMHgzRiwweDFGLDB4QzMsMHhGMSwweEVDLDB4N0YsMHhGRSwweDZGLAorMHhGRiwweEZCLDB4RkIsMHhGRiwweDlGLDB4RkYsMHhCRiwweEZGLCAweDdCLDB4NUYsMHhGRCwweEZGLDB4REYsMHhGNywweEZELDB4RkQsCisweDdGLDB4N0YsMHhERiwweEZFLDB4Q0YsMHhGQiwweEZGLDB4RkYsIDB4QUYsMHhGQiwweEZGLDB4MUYsMHhFRiwweEE1LDB4RkQsMHhCRiwKKzB4REYsMHhGQiwweDdELDB4RkYsMHhCRiwweERGLDB4RkIsMHhGRiwgMHhGRCwweDNCLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZELAorMHhBRiwweEYzLDB4RkYsMHhGQiwweDdGLDB4QkYsMHhENywweEZCLCAweEJGLDB4N0YsMHhCQiwweEY3LDB4RkYsMHhGOCwweDdGLDB4RkYsCisweEZBLDB4NUYsMHhENywweEZGLDB4REYsMHg3RiwweEVGLDB4RkYsIDB4RkYsMHg3RiwweERCLDB4RjcsMHhGRCwweEZGLDB4N0YsMHhERiwKKzB4QjcsMHhGQiwweEVDLDB4RkYsMHhGRiwweEY3LDB4QkYsMHhFRiwgMHhGRCwweEZDLDB4RkIsMHhGRiwweEVGLDB4RjAsMHhGRSwweDNGLAorMHg4RiwweEUzLDB4RjgsMHhGRSwweDNGLDB4OEYsMHhFRiwweDhELCAweEZGLDB4RkYsMHhFRiwweDdGLDB4QkYsMHhGRiwweEZCLDB4RkYsCisweERCLDB4QkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RUYsMHhEOCwweEZGLDB4MkUsMHg3RiwKKzB4QkUsMHhFRiwweEZFLDB4NkUsMHhGRiwweEJGLDB4RjksMHhGRiwgMHhGRiwweEYzLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGQywweDY2LDB4QkUsMHg0NywweEYzLDB4N0YsMHhERiwweEZFLCAweDg3LDB4OUYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEU3LDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhENiwweDZGLDB4N0MsIDB4RkIsMHg0RiwweEQyLDB4RkYsMHhGRCwweDJCLDB4RkUsMHhGRiwKKzB4RkYsMHhGRCwweDVGLDB4RDcsMHhENSwweEY1LDB4N0QsMHhGRiwgMHhGRiwweEZGLDB4QkYsMHg5QiwweEZGLDB4RkYsMHhERiwweEI3LAorMHhGRiwweEZGLDB4REYsMHhGRiwweDNGLDB4Q0YsMHhGRSwweDdGLCAweEJGLDB4RUYsMHhGQiwweEZDLDB4RkYsMHgzRiwweEZGLDB4RDksCisweEJGLDB4RkUsMHg5NywweEVDLDB4OEYsMHhCNywweEZFLDB4OUIsIDB4N0QsMHhGRCwweEI3LDB4REQsMHg3NywweDFELDB4QzcsMHg3MSwKKzB4REQsMHg3NywweDVELDB4RDcsMHhGMywweDZGLDB4RkQsMHgzRiwgMHg3MywweERELDB4QUYsMHhGRCwweDdBLDB4RkYsMHhGRiwweEFGLAorMHhGRSwweEZELDB4QkYsMHhFRiwweEZCLDB4RkUsMHhGRiwweEJGLCAweEVGLDB4NjYsMHg3RiwweEZGLDB4RkYsMHhCRiwweEJGLDB4RkYsCisweEZCLDB4RkYsMHhGNywweERGLDB4RkQsMHhGQiwweDdELDB4REYsIDB4QjcsMHhDRCwweEYzLDB4N0MsMHg1RiwweDNGLDB4OTEsMHgzRiwKKzB4RkYsMHgzRCwweEVGLDB4N0IsMHhGRiwweEZDLDB4RkYsMHhDQSwgMHhFRiwweEZFLDB4RkYsMHhCRCwweEVGLDB4RkIsMHgxRSwweEU3LAorMHhCQiwweEVDLDB4N0YsMHhCMywweEZGLDB4RkQsMHg5RiwweEZGLCAweEZGLDB4RkUsMHhGRiwweEZGLDB4N0YsMHhCRiwweEZCLDB4RkUsCisweEZGLDB4QkYsMHhFRiwweEZCLDB4RUUsMHhGQiwweEJGLDB4REYsIDB4NjcsMHhGRiwweEZGLDB4QkYsMHhFRiwweERCLDB4RkYsMHhCQywKKzB4RkUsMHg3RiwweEZCLDB4RkYsMHg5RiwweEVGLDB4RjksMHhGRSwgMHg3RiwweDlGLDB4RTcsMHhGOSwweEZFLDB4ODcsMHhGRiwweEVFLAorMHhGQiwweEJFLDB4RTUsMHhCRiwweEVGLDB4RjksMHhENywweDY1LCAweEY3LDB4REQsMHhFNywweDdELDB4REYsMHg3NywweDVELDB4RDcsCisweDdGLDB4RjgsMHg5QiwweEZFLDB4RkYsMHhCRiwweEVGLDB4RkIsIDB4RkYsMHhGRiwweEJGLDB4RUYsMHhGQiwweEZGLDB4N0YsMHhDRiwKKzB4RjMsMHhGQywweEZGLDB4QkYsMHhFRiwweEZGLDB4REIsMHgzRiwgMHhFRiwweEZCLDB4RkUsMHhGRiwweERGLDB4RkYsMHhGRSwweEZCLAorMHhCQiwweEVGLDB4QkYsMHhFRiwweEJCLDB4RUUsMHhGQiwweEJFLCAweEVGLDB4QkIsMHhGRiwweEZDLDB4N0YsMHhGRCwweDNCLDB4NUIsCisweEQ2LDB4RTUsMHhGRCwweDRGLDB4QzMsMHhGQiwweEZGLDB4QkYsIDB4RUYsMHhGQiwweEZFLDB4RkYsMHhCRiwweEVGLDB4RkIsMHhGRiwKKzB4QjQsMHhGRiwweEZBLDB4QkMsMHg4RiwweEIyLDB4RTksMHhEMiwgMHgyRSwweENGLDB4RkIsMHhGRiwweEJGLDB4RUYsMHhGQiwweEZFLAorMHhGRiwweEJGLDB4RUYsMHhGQiwweEZGLDB4RUMsMHhGRiwweEZELCAweEZELDB4N0YsMHhERiwweEY3LDB4RTQsMHhERiwweDVGLDB4RkYsCisweEZGLDB4RkIsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEMzLDB4RkYsMHhFRiwweEU2LDB4RjgsMHhGRSwKKzB4M0YsMHg4QiwweDgzLDB4RjksMHhGRSwweDdGLDB4RTcsMHhGOSwgMHhGRSwweDdGLDB4OUYsMHhFNywweEY5LDB4RkUsMHg3RiwweDE3LAorMHhGRCwweEZGLDB4RkYsMHhGRiwweDdGLDB4NUYsMHhGNywweDJDLCAweEZGLDB4RkYsMHhGRiwweEZFLDB4N0YsMHhGRiwweEU3LDB4RjksCisweEZFLDB4N0YsMHg5RiwweEZFLDB4MkYsMHhGRiwweEZGLDB4RUYsIDB4RkYsMHhGRSwweEJGLDB4RUYsMHhBRCwweEZGLDB4RkYsMHg3RiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRSwweERGLDB4RkYsMHhERiwweEZGLDB4RkQsMHhGRCwweDdGLAorMHhERiwweEY3LDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGQSwweDNGLDB4RkUsCisweEY3LDB4RkQsMHhFRiwweDdBLDB4RkYsMHhCMSwweEJELDB4RkYsIDB4N0YsMHhGNywweEZELDB4RkYsMHg3RiwweERGLDB4RjcsMHhGRCwKKzB4RkYsMHg3RiwweEYzLDB4MjcsMHhGRiwweERGLDB4RkYsMHhERCwgMHhGRiwweEZDLDB4OUIsMHhGRiwweENCLDB4RkMsMHhCRiwweDJGLAorMHhDQiwweEYyLDB4RkMsMHhCRiwweDJGLDB4QzksMHhGRiwweERFLCAweEZGLDB4REYsMHhBRiwweEVCLDB4REEsMHhGRSwweEJCLDB4QUYsCisweEVCLDB4RjgsMHhGNywweEFGLDB4RTgsMHhGQSwweEZFLDB4QkYsIDB4QUYsMHhFQiwweEYyLDB4RkYsMHhGRCwweEZGLDB4RkYsMHhFRiwKKzB4QkQsMHhENywweEJGLDB4RkYsMHhGRiwweERFLDB4OEYsMHhCOCwgMHhERSwweDM3LDB4OEQsMHhBMywweDc4LDB4REEsMHgzRiwweDhGLAorMHhGRiwweEExLDB4RkYsMHhGRiwweEZCLDB4RkIsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhBNywweEJELDB4RkIsMHg3NiwweEZELDB4QkYsCisweEVGLDB4REIsMHhGRSwweEJCLDB4QkYsMHhGRSwweDI3LDB4N0YsIDB4RkYsMHhGRSwweEZFLDB4RkQsMHhGNSwweEZGLDB4RUYsMHhGNSwKKzB4REYsMHgxRiwweEU3LDB4RkQsMHhGRiwweDdGLDB4REYsMHhGNywgMHhGRCwweEZGLDB4RkYsMHhDRCwweEZELDB4QUUsMHhGRiwweEZBLAorMHgzRSwweDNGLDB4QUIsMHhGRCwweEY4LDB4N0UsMHg4RiwweEUzLCAweEY4LDB4RkUsMHgzRSwweDhGLDB4RTMsMHhGOCwweEZGLDB4RkUsCisweDFGLDB4RUYsMHhERiwweEJGLDB4RkUsMHhERSwweERGLDB4RDksIDB4RkYsMHhERiwweEJDLDB4RkYsMHhGRiwweDdGLDB4RkYsMHhFRiwKKzB4RkQsMHg3RiwweERGLDB4RjcsMHhGOSwweDNGLDB4RkUsMHhGRiwgMHhGRiwweDZGLDB4RkUsMHhERSwweEJGLDB4RjcsMHhFRCwweEVBLAorMHhGRCwweDhGLDB4ODMsMHhGOCwweEVBLDB4M0YsMHg4RiwweEVGLCAweEZGLDB4RjQsMHg3RiwweEZGLDB4RUYsMHhFRiwweDdCLDB4RjMsCisweEYxLDB4NUYsMHhGRiwweEZGLDB4RjEsMHgzQiwweDdGLDB4REYsIDB4RjcsMHhGRCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RTAsMHhGRiwKKzB4RkYsMHhGRiwweEY3LDB4RkYsMHg2RiwweEZGLDB4N0YsMHhGRiwgMHhGRiwweEY3LDB4REUsMHhGNywweEJGLDB4RUYsMHhGQiwweEY3LAorMHhGRCwweEZGLDB4RkYsMHhGNSwweEZBLDB4RkYsMHhGRiwweEZCLCAweEU3LDB4RkYsMHhGMywweEY4LDB4N0YsMHhGMywweERGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDFGLDB4RUYsIDB4QkIsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRCwKKzB4RkYsMHg3RiwweEZGLDB4OUYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhDRiwweEZGLDB4MzcsMHhGRiwweEZGLAorMHg3RiwweERGLDB4NzcsMHg1RCwweEU3LDB4RkMsMHhGRiwweEJGLCAweEY3LDB4RjUsMHhGQiwweEZGLDB4RkYsMHhENywweEY1LDB4RkIsCisweEZGLDB4RkYsMHg0NSwweEZELDB4N0YsMHhFQSwweEZELDB4QkUsIDB4QkYsMHhERiwweEY3LDB4RkYsMHhGRiwweERCLDB4RkIsMHhGRSwKKzB4RkYsMHhCRiwweEVGLDB4RkYsMHhGRiwweEZGLDB4RkIsMHg1RiwgMHg3RiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZFLDB4RkYsMHhFRiwweEZELDB4RkYsMHg3RiwweERGLCAweEZGLDB4RUYsMHhGQiwweEY4LDB4MEYsMHhGMywweEZGLDB4RjksCisweDJFLDB4RkIsMHhGRSwweEZDLDB4RjMsMHhFRiwweEZGLDB4RkYsIDB4QkYsMHhGRiwweEZCLDB4RTcsMHhGRiwweEZFLDB4N0UsMHhGRiwKKzB4QzAsMHg2QiwweENGLDB4RkYsMHgzNCwweERGLDB4RjEsMHhGRCwgMHhGRiwweEVGLDB4RkYsMHhGRiwweEZGLDB4REYsMHhGNywweEZELAorMHhDRiwweDdGLDB4OUMsMHhGRCwweEZELDB4NkMsMHhGNywweEZGLCAweEY2LDB4RkQsMHhFQiwweDJCLDB4OUYsMHhGRiwweEZDLDB4RkUsCisweDdFLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhENywweEYzLDB4RjcsIDB4RkYsMHhGQiwweEUxLDB4QkYsMHhGRiwweEVCLDB4N0EsMHhERSwKKzB4RDcsMHhGQiwweEZGLDB4RjksMHhGRSwweEZGLDB4RkYsMHhGMywgMHhERSwweDdGLDB4RkQsMHhFNywweDdGLDB4RkYsMHhGRCwweEJCLAorMHhGRiwweEZGLDB4N0UsMHhDQywweEY2LDB4QUYsMHg1RiwweDdGLCAweEZFLDB4RjQsMHg3RCwweEY3LDB4RkQsMHhCQiwweDZFLDB4REIsCisweEI3LDB4RkYsMHhGNywweERGLDB4NjYsMHhGRiwweEZGLDB4RjcsIDB4M0QsMHhDRiwweERFLDB4QkQsMHhGRiwweEZGLDB4REUsMHhEQiwKKzB4OEQsMHhGNywweDdFLDB4REYsMHhCNywweEVGLDB4N0YsMHhGRiwgMHhGNiwweDg3LDB4RkYsMHhGRiwweEVGLDB4RkUsMHhERSwweEJGLAorMHhGRiwweEZGLDB4RkYsMHhCQiwweEVGLDB4RkQsMHhGRiwweDdCLCAweERFLDB4RjcsMHgzRiwweEZGLDB4QkYsMHhGQiwweERCLDB4RkYsCisweEYyLDB4QjYsMHhGRCwweEJELDB4N0YsMHhFNywweEZGLDB4RkYsIDB4RkYsMHg2RiwweEY3LDB4RkYsMHhGRiwweEZGLDB4RkUsMHg3NywKKzB4RkYsMHhCRiwweEY4LDB4QUYsMHhGRiwweERGLDB4QkYsMHhGRiwgMHhCRiwweDdGLDB4RkIsMHhGRiwweEZGLDB4RkYsMHhEQiwweEZFLAorMHhGRiwweEJGLDB4RkYsMHhGQSwweEZGLDB4RkQsMHhGRiwweEY2LCAweDdGLDB4RkYsMHg5RiwweEZGLDB4RkYsMHgzRiwweEVGLDB4RjgsCisweEVFLDB4N0UsMHg5RiwweEJBLDB4RkUsMHhCRiwweDhGLDB4RUYsIDB4RkUsMHhGRSwweEY5LDB4RkYsMHhGQSwweDdGLDB4RkUsMHg3RSwKKzB4QkYsMHhBRiwweEZCLDB4OTYsMHhGRCwweDlGLDB4RUYsMHg1RSwgMHg2NSwweEJFLDB4RUYsMHg1QiwweEI2LDB4RkYsMHhCRSwweEUzLAorMHhGRiwweEI1LDB4QkYsMHhGRiwweEZELDB4RkYsMHg3RiwweEZGLCAweEVGLDB4REYsMHhGRSwweEZGLDB4QkYsMHhGQiwweEZFLDB4RkYsCisweEJGLDB4Q0YsMHhGRiwweEZGLDB4RkYsMHhGRCwweDlCLDB4RkYsIDB4RkUsMHhGQiwweEZFLDB4REYsMHhGRiwweDdGLDB4RkYsMHhGNywKKzB4RkUsMHhGRiwweERGLDB4RkIsMHhGQiwweEZFLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhCNywweEZFLDB4RkEsMHhGRiwweEFCLAorMHhFRiwweEZGLDB4RkQsMHhCNSwweDdCLDB4N0YsMHhGQiwweEY3LCAweEZELDB4RkYsMHhGRiwweERELDB4RkYsMHhFRiwweDhGLDB4RkYsCisweDJGLDB4RkYsMHhGQiwweDdDLDB4RkYsMHgzRiwweERGLDB4NzMsIDB4RUIsMHhGRSwweDNGLDB4RkYsMHhFRiwweEZCLDB4RkUsMHhGRiwKKzB4RUYsMHhGRCwweEZGLDB4QkYsMHhGRCwweDBGLDB4RkYsMHhGRiwgMHhGRiwweEY1LDB4RjksMHhGRiwweDdGLDB4RDcsMHhGRCwweEZGLAorMHhERiwweEZGLDB4RjcsMHhGQiwweEZGLDB4N0YsMHhCRiwweEZGLCAweEZGLDB4RjAsMHg5RiwweEZGLDB4RkUsMHg3RiwweDhCLDB4RTMsCisweEY5LDB4REUsMHgyNywweDlCLDB4RTYsMHhCRSwweDdGLDB4OUIsIDB4QzMsMHhGOCwweERFLDB4N0YsMHg5RCwweEU3LDB4RkUsMHg3RiwKKzB4RkYsMHhGRiwweDVGLDB4RDcsMHhGRiwweEZGLDB4RkYsMHg0RiwgMHhGQiwweEZGLDB4RkYsMHg3RiwweEZGLDB4QUYsMHhGRiwweDlGLAorMHg3RiwweEZCLDB4RkYsMHhFOCwweEZGLDB4RkYsMHhGRSwweEJGLCAweEFGLDB4RkYsMHhGRiwweEZFLDB4QkYsMHhFRiwweEY3LDB4RkYsCisweEJGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEY3LDB4RkYsIDB4RkMsMHhGRiwweEZGLDB4RkQsMHg3RiwweEZGLDB4RkYsMHhGRiwKKzB4RkQsMHgzRiwweENGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGNywgMHhGRiwweEZELDB4N0YsMHhGRiwweEZGLDB4OTMsMHhGRiwweEZGLAorMHg3QSwweERGLDB4RjcsMHhGRiwweEZGLDB4N0IsMHg3RiwweEI3LCAweEVGLDB4RkYsMHhGRiwweEZELDB4QkYsMHhGRCwweEZCLDB4RkYsCisweEY3LDB4RkYsMHhENywweEZGLDB4RkYsMHhGRiwweEZDLDB4OUYsIDB4NkYsMHhDQiwweEZGLDB4RjQsMHhCQiwweERGLDB4RDYsMHhGRCwKKzB4QkYsMHgyRiwweEQzLDB4RjcsMHhGRiwweERGLDB4RkYsMHhDRiwgMHhGRiwweEZBLDB4QkUsMHhCRCwweEFGLDB4NkEsMHhEQSwweEJFLAorMHhCQiwweEFCLDB4M0EsMHhCRSwweDJELDB4QUUsMHhFQiwweERBLCAweEY2LDB4M0YsMHhBRCwweEY1LDB4REQsMHhGRiwweENGLDB4RjEsCisweEZGLDB4RjksMHg3RiwweEZGLDB4NzMsMHhGRSwweEZGLDB4Q0YsIDB4QzMsMHhGNCwweEY3LDB4MkYsMHhGMywweEZGLDB4RkMsMHhGRiwKKzB4N0MsMHgxRiwweEZGLDB4M0YsMHg0RiwweEZGLDB4N0UsMHhGRiwgMHhFRiwweEJELDB4RjYsMHhGRSwweEZGLDB4MkIsMHhFRiwweERDLAorMHhGQiwweEZELDB4RkYsMHhGQiwweEZGLDB4RUEsMHg3QiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkIsMHhGNywweERGLDB4RkYsCisweEUzLDB4N0QsMHhGRiwweEI3LDB4RkYsMHhCRiwweEZGLDB4RkYsIDB4REYsMHhGRiwweEY4LDB4RkYsMHhCRiwweEZGLDB4QkYsMHhFQiwKKzB4RTcsMHhGQSwweEZFLDB4M0QsMHhCRiwweEU5LDB4RkMsMHhCRiwgMHhGRiwweEZBLDB4RkIsMHhGRSwweEZGLDB4RkYsMHhGRiwweEQ5LAorMHhGRiwweEZGLDB4RkYsMHhGNiwweDdGLDB4RkYsMHhGNiwweDdELCAweEZGLDB4REYsMHhDRiwweEZELDB4QkYsMHhGQiwweEVGLDB4N0UsCisweEZGLDB4N0YsMHhGRiwweEZGLDB4RDMsMHhGRiwweEZELDB4RkIsIDB4RkYsMHhGQiwweEZGLDB4RkYsMHhGRiwweEVGLDB4RkYsMHhCRiwKKzB4RkUsMHhGRiwweEY3LDB4RUYsMHhGRiwweEZGLDB4RkYsMHhGQiwgMHhGRiwweDg3LDB4RkYsMHhGRCwweEZGLDB4RkYsMHhGRiwweEZGLAorMHg3QiwweEZFLDB4RkYsMHhGRSwweDNCLDB4RjcsMHhGNywweEZGLCAweDNGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDBGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZCLDB4RkYsMHhGRiwweEZGLDB4RjcsIDB4RkYsMHhGRiwweEFELDB4RkYsMHhGRSwweEY3LDB4RkYsMHhGRiwKKzB4NUYsMHhGRiwweEZGLDB4REYsMHhGRiwweEZELDB4RkYsMHhGNSwgMHhGRiwweERGLDB4RkYsMHhCRCwweEZGLDB4RTksMHhGRiwweEM3LAorMHhGMywweEZGLDB4RkYsMHhGNywweEZGLDB4RjMsMHhGRiwweEY4LCAweDNCLDB4RkYsMHhGRiwweDdCLDB4REYsMHhCRiwweEZCLDB4RUYsCisweEZCLDB4RkYsMHhGQiwweEY3LDB4RjcsMHhCQiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZCLDB4RkYsMHhGRSwweDdGLDB4RjMsMHg3RiwKKzB4NUUsMHhCNywweEJGLDB4RkQsMHg3RiwweEZGLDB4RjksMHg3RiwgMHhGQiwweEZGLDB4RUIsMHhGRCwweDdGLDB4N0YsMHhGRiwweEVGLAorMHhGQiwweEUwLDB4M0YsMHhGRSwweEJGLDB4QkYsMHhERiwweEZGLCAweDdFLDB4RkYsMHhGNywweEZGLDB4RkYsMHhGRSwweEJGLDB4RkYsCisweERCLDB4NzgsMHhGRiwweEZGLDB4RkYsMHhFRSwweEExLDB4QkYsIDB4RjUsMHhERSwweEZCLDB4RjcsMHhGRiwweEZCLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZCLDB4RkYsMHhGRiwweEQ3LDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RUYsMHhGMCwweEZGLDB4RkYsMHhGRiwweEYzLAorMHhGNywweEZGLDB4RUYsMHhGRiwweEU3LDB4Q0YsMHhGRiwweEZCLCAweEZGLDB4RUYsMHhGRiwweEZGLDB4OUYsMHg5RiwweEVGLDB4RkMsCisweDE2LDB4QkYsMHhGRSwweEYzLDB4RTQsMHhGRiwweEZGLDB4QzYsIDB4RkYsMHhFNywweEZGLDB4RkYsMHhGRCwweEZGLDB4QkYsMHhGRiwKKzB4RkYsMHgzRiwweEZGLDB4QkYsMHhENiwweEFGLDB4N0YsMHhGRSwgMHg2QiwweDdFLDB4N0YsMHhGRiwweEFGLDB4RkYsMHhGRiwweEJGLAorMHhGRiwweDVGLDB4RkYsMHhGRSwweEZGLDB4RkYsMHhGRSwweEZGLCAweEZGLDB4QkQsMHhEQiwweEZGLDB4RkUsMHg1RiwweEYyLDB4RkYsCisweEZGLDB4NUYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RUYsMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4REUsMHhCRiwKKzB4RkYsMHhGRiwweEVGLDB4RkIsMHg3NywweEZFLDB4QkQsMHg3RiwgMHg1RiwweEZGLDB4RkYsMHhGRiwweERGLDB4NkYsMHhFRCwweEZGLAorMHhGRCwweEZGLDB4N0YsMHhGRCwweDZGLDB4RkYsMHhGRiwweDc3LCAweERBLDB4Q0YsMHhGRCwweDVGLDB4RkYsMHhCRiwweEZGLDB4RkYsCisweERGLDB4N0YsMHhGRiwweEZCLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4NjYsMHg3RiwweEZGLDB4RkUsMHhCRiwweEU3LDB4QkYsMHhGQSwKKzB4RkYsMHhGRSwweEZGLDB4RkYsMHhGRiwweERGLDB4RkYsMHg1OSwgMHhFRiwweEZGLDB4RUYsMHhGQiwweDdGLDB4ODksMHhGRiwweEZGLAorMHhFOSwweEZGLDB4NkYsMHhGRiwweEY1LDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHg3RiwweEYyLDB4RjcsMHhGRiwweEZGLDB4RUYsCisweEY4LDB4N0YsMHhGQiwweEZGLDB4RkQsMHhGRiwweEZGLDB4RDksIDB4RkYsMHhFRiwweEJCLDB4RkYsMHhGRiwweEZGLDB4QkYsMHhFRiwKKzB4REUsMHhGRiwweEZGLDB4OUYsMHg3RiwweERGLDB4RkYsMHhGNywgMHhGRiwweEZGLDB4RkYsMHhGRiwweERGLDB4RkYsMHhGRiwweEFGLAorMHhGRiwweEZGLDB4RjcsMHgzRiwweEVCLDB4OUYsMHhGRSwweDdGLCAweDlFLDB4N0YsMHg5RiwweEZFLDB4ODcsMHhGRiwweEVELDB4REIsCisweDU2LDB4RkYsMHhCRiwweEFGLDB4MEIsMHhEMiwweEZGLDB4RUYsIDB4REIsMHg2RSwweDdELDB4QkQsMHg2RiwweEY4LDB4RkUsMHgzRiwKKzB4RkEsMHg1QiwweEZGLDB4RkQsMHhCRiwweEVGLDB4RkYsMHhCRiwgMHg2RiwweERCLDB4RTYsMHhGRiwweEZGLDB4M0YsMHhGRiwweERGLAorMHhGRSwweEZGLDB4RkYsMHhGRiwweEZGLDB4REEsMHgzRiwweEZGLCAweEZCLDB4RkUsMHhGRSwweEZGLDB4RkYsMHhERiwweEY3LDB4QkQsCisweEZGLDB4RkQsMHhGRiwweEZFLDB4RkYsMHhGQiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEYxLDB4NUYsMHhGRCwweDlGLDB4REYsMHhGRCwKKzB4RkYsMHhGRCwweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHg3NiwgMHhGQSwweEZGLDB4RkYsMHg3RiwweEUzLDB4RjgsMHhGRiwweEFFLAorMHhGRiwweEZCLDB4N0UsMHg5RCwweDczLDB4RkYsMHhGQSwweDdGLCAweERGLDB4RkYsMHhGRiwweDdGLDB4RkYsMHhGQiwweENELDB4RkYsCisweDdGLDB4RUYsMHhGQiwweEZGLDB4RkQsMHhGRiwweEY3LDB4N0YsIDB4N0YsMHhFRiwweEZGLDB4RUQsMHhGRiwweEZGLDB4RkYsMHhCNSwKKzB4RkYsMHhCRiwweEZGLDB4QkYsMHhGRCwweEVGLDB4REIsMHhGNywgMHhGRiwweDkzLDB4RkYsMHhFRiwweEUyLDB4RjksMHhCRSwweDdGLAorMHg4QiwweEU3LDB4RjksMHhGRSwweDZCLDB4RTcsMHhGOSwweEZFLCAweDdGLDB4OUYsMHhFNywweEY5LDB4RkUsMHg3RiwweDQ3LDB4RkYsCisweEZGLDB4RkQsMHhGRiwweDlGLDB4RkYsMHhENywweEZGLDB4RkYsIDB4RkYsMHhGRiwweEY1LDB4RkYsMHg5RiwweEZGLDB4RjcsMHhGRSwKKzB4RkYsMHhCRiwweEZFLDB4NkYsMHhGRiwweEZGLDB4RkIsMHhGRiwgMHhGRiwweEZGLDB4QUYsMHhGRiwweEZGLDB4RkYsMHg3RiwweEZCLAorMHhGRiwweEZFLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZELCAweERGLDB4RkYsMHhGRiwweEY3LDB4RkYsMHhGRiwweEZGLDB4REYsCisweEZGLDB4RkYsMHhGRiwweDVGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4NUYsMHhGQiwweEZFLDB4RkYsMHhGOCwweDM3LDB4RkYsMHhGRiwKKzB4RUYsMHhGRiwweDdGLDB4RkUsMHhCRiwweEZGLDB4RkYsMHhGRSwgMHhCRiwweEZGLDB4RkYsMHg3RiwweEZGLDB4QkYsMHhGRCwweEZGLAorMHg3RiwweEZBLDB4N0YsMHhGRiwweEZGLDB4NkYsMHhGRiwweEZGLCAweDdELDB4RkYsMHhDRiwweEZGLDB4RkYsMHhGRiwweDRGLDB4RkYsCisweEYyLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZBLDB4QkYsIDB4RkYsMHhBRSwweEVCLDB4RkEsMHhGRSwweEJCLDB4QUQsMHhFQiwKKzB4RkEsMHhGNywweEFGLDB4NkIsMHhGQSwweEY2LDB4QkYsMHgyNSwgMHhFOSwweEYyLDB4N0YsMHg0NSwweEZGLDB4RkYsMHhGRCwweEY3LAorMHhGNywweEJGLDB4RkYsMHhERiwweEZGLDB4RkYsMHhCRiwweEZCLCAweEZGLDB4REYsMHhGMywweEZGLDB4RjcsMHgzRiwweENGLDB4RkYsCisweEExLDB4RkYsMHhGRiwweEJGLDB4RTcsMHhGRiwweEZGLDB4N0YsIDB4RkYsMHgzRCwweEZGLDB4RkYsMHhGRiwweEY3LDB4RkYsMHgyRiwKKzB4RkYsMHhGQiwweEY1LDB4N0YsMHhGRSwweDU3LDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEY3LAorMHgzRiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsMHhGRCwweEZFLCAweEY3LDB4RUUsMHhBRiwweEZFLDB4RUUsMHhFNywweEZBLDB4RkYsCisweEZFLDB4OUQsMHhGOSwweDVFLDB4RkUsMHhGRiwweEVCLDB4RkYsIDB4RkYsMHhERiwweEE3LDB4RkYsMHhGRiwweEZGLDB4RkMsMHhEQiwKKzB4RkYsMHhGRiwweEZGLDB4N0UsMHhGQiwweEZGLDB4RkYsMHhFRiwgMHhGQiwweEZELDB4RkYsMHhEQiwweEZGLDB4RkYsMHhGRiwweEVGLAorMHhGRiwweEZGLDB4RkYsMHhGRCwweEJGLDB4RkUsMHhCRiwweEZGLCAweDZGLDB4N0YsMHhGRiwweEY3LDB4RkYsMHhGRiwweEY5LDB4RkYsCisweEY3LDB4RkYsMHhCRiwweERFLDB4RjcsMHhGRiwweEZGLDB4RkYsIDB4RkEsMHg3RiwweEZELDB4QkYsMHg1RiwweEZGLDB4RkYsMHhCRiwKKzB4RkYsMHhFRCwweEZGLDB4RjcsMHhCRiwweEZGLDB4RkYsMHhFRiwgMHhGRiwweERGLDB4RkYsMHhGRiwweEZGLDB4RTYsMHhGRiwweEZCLAorMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGNywweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEVCLDB4RkYsCisweEZELDB4RkYsMHhGNSwweEZGLDB4RjYsMHg3RiwweERGLDB4QkQsIDB4Q0YsMHhGRiwweEZGLDB4RkYsMHhGRiwweERGLDB4RkYsMHhGRiwKKzB4RkYsMHhGOSwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhFMywgMHhGRiwweEVFLDB4QkYsMHhGRiwweDdELDB4RUYsMHhGRSwweEZGLAorMHhGRiwweEZGLDB4QkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZFLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RTcsMHhGRiwweEI1LDB4QUUsCisweEZGLDB4RkYsMHhCNiwweEZFLDB4QkYsMHhGRiwweEZGLDB4QkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHgyNywweEZGLDB4RUYsMHhGRSwweDdGLDB4REYsMHhGRiwgMHg3RSwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkQsMHhGRiwweEY3LDB4RjksMHg5RiwweEZGLCAweDVGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4N0YsCisweEZGLDB4RkYsMHhGRSwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4MEYsMHhGRiwweEU3LDB4QkYsMHhGRSwKKzB4RkYsMHhCRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkMsMHhCRiwgMHhGRiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsMHhGRiwweEM0LAorMHg2QiwweEZGLDB4MjksMHgxRiwweEZCLDB4QUYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEVGLDB4MUIsMHhGRSwweEZGLDB4RkMsCisweDZGLDB4RkYsMHhGRiwweEZELDB4NkEsMHhGNywweEQ3LDB4RjUsIDB4QkYsMHhGRiwweEZFLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkUsMHhCRiwweEZGLDB4RkYsMHhGQSwweEZGLDB4RkYsMHhGNywgMHhGQiwweERELDB4QkYsMHhGRiwweEU3LDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkQsMHg3RiwweEZGLCAweEZGLDB4RjUsMHhGRiwweEZGLDB4RjcsMHhGRCwweEIzLDB4RUYsCisweEZELDB4N0UsMHg1RCwweEZGLDB4RkQsMHhGRiwweEZGLDB4RkYsIDB4RkQsMHg3RiwweEQyLDB4RjUsMHhGQiwweDdFLDB4Q0IsMHhCNywKKzB4RkYsMHhGRiwweEZGLDB4QzYsMHhGRiwweEZELDB4RUUsMHg2MywgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjYsMHhGRCwweDY1LAorMHg1QiwweERGLDB4RkYsMHhENSwweEZGLDB4RkYsMHhGRiwweEY2LCAweEU3LDB4QkYsMHhGNywweEE5LDB4RkYsMHhGRiwweEVELDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RUIsMHhGRiwweEZGLDB4RkYsIDB4QUYsMHhGRiwweEZGLDB4RkYsMHhGOCwweDFCLDB4RkYsMHhFMywKKzB4RDAsMHhCRiwweEZGLDB4RTEsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEQ3LDB4RkYsMHhGRiwweEZGLDB4NUYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4QUYsMHhGRiwweERCLDB4NzYsMHhCRiwweEZGLCAweDdGLDB4RkYsMHhCRiwweEVGLDB4RkUsMHhGRiwweEJGLDB4RUYsCisweEZCLDB4RkUsMHhGRiwweEZGLDB4RkYsMHhCRiwweEYyLDB4N0YsIDB4RkYsMHg5RiwweEZFLDB4QkQsMHhGRSwweDdGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEY3LDB4M0YsMHhFQywweDdGLDB4RjYsMHg5NSwweEJCLAorMHhFRiwweEY4LDB4RkUsMHhGQywweEJGLDB4MkYsMHhEQSwweEZDLCAweEJGLDB4MkYsMHhDQiwweEYyLDB4RkMsMHhCRiwweEVGLDB4RkYsCisweEE5LDB4QkYsMHhDRiwweEZCLDB4RkYsMHhGRiwweEZGLDB4RkUsIDB4REQsMHhCNywweDZELDB4RjYsMHhEOSwweEI2LDB4NkQsMHg5QiwKKzB4NzYsMHhEOSwweEJGLDB4RkIsMHhGRCwweEEzLDB4RkYsMHhCRiwgMHhFRiwweEZGLDB4RUYsMHhGRiwweEZGLDB4RkYsMHg3RiwweERGLAorMHhGRCwweEVGLDB4N0IsMHhERSwweEY3LDB4RkQsMHhFRiwweDdGLCAweEZGLDB4RkYsMHgwNSwweEZGLDB4RkEsMHhGRSwweDdGLDB4RUYsCisweEUzLDB4RkYsMHhGRiwweEZELDB4N0YsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHg1RiwweEZGLDB4RkYsMHhGRCwweDdGLDB4RkIsMHhBRiwKKzB4RkYsMHg2MywweEM4LDB4RkYsMHhCRiwweEVGLDB4RkYsMHhGRiwgMHhGQSwweDdGLDB4RkYsMHhGRiwweEZGLDB4RkUsMHg5RiwweEY3LAorMHhGRiwweEZBLDB4QkYsMHhGRSwweDlGLDB4RkIsMHg3RiwweEZGLCAweEZGLDB4RUYsMHhENywweEZGLDB4RkYsMHhGNSwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRCwweDdGLDB4RkYsMHhGRiwweEJGLDB4RkYsIDB4RjksMHhCRiwweEZGLDB4QkUsMHgyNywweDlGLDB4RTcsMHhGOSwKKzB4RkUsMHg3RiwweDhCLDB4RTcsMHhGRSwweDdGLDB4OUYsMHhFMiwgMHhGOSwweEZFLDB4N0YsMHg5RiwweEU3LDB4RjEsMHg3RiwweEZGLAorMHhGRiwweEZGLDB4RkIsMHhGRSwweEZGLDB4RkYsMHhGRiwweEQ3LCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RjUsMHhGRiwweEZGLDB4RkYsCisweEQ3LDB4RkYsMHhGQSwweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsIDB4RkQsMHhGRiwweEZGLDB4RkYsMHhBRiwweEY3LDB4RkYsMHhGRiwKKzB4RkYsMHhFQiwweEZGLDB4RkYsMHhGRiwweEFGLDB4RkYsMHhDNCwgMHhGRiwweEY3LDB4RkYsMHhGRiwweEVGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweDVGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhENywweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RUIsMHhGRiwweEZCLDB4N0EsCisweERGLDB4RjcsMHhGRCwweEZGLDB4RkYsMHhGRSwweEJGLDB4RkYsIDB4RkYsMHg3RiwweEZGLDB4QUYsMHhGRiwweEZGLDB4RkYsMHhGNywKKzB4RUYsMHhFMywweEZGLDB4REQsMHhEMiwweEZGLDB4REYsMHhGRiwgMHhGRiwweEYyLDB4RkMsMHhCRiwweENCLDB4RjYsMHhGRCwweEJGLAorMHgyRiwweENCLDB4RkYsMHg3RiwweERGLDB4REUsMHhBRiwweEZGLCAweERBLDB4RUUsMHhCRiwweEFGLDB4RTksMHhGQSwweEY0LDB4QkQsCisweEFGLDB4NUEsMHhBRSwweEJCLDB4QUIsMHg2QiwweERBLDB4REUsIDB4QkYsMHhBRCwweEQ3LDB4NUUsMHhGRiwweEZGLDB4QkYsMHhGQywKKzB4RkYsMHhERiwweEZELDB4RkYsMHhGRiwweEZGLDB4RkYsMHhERiwgMHhGNywweEZGLDB4RkYsMHhGRiwweEZGLDB4RkQsMHhGRiwweEZBLAorMHgxRiwweEZGLDB4RkUsMHhGQiwweEVGLDB4QkYsMHhGRCwweEZGLCAweEZELDB4QkQsMHg3NywweEZGLDB4RkYsMHhGRiwweEZGLDB4OUQsCisweEVGLDB4RkYsMHhGRiwweEZGLDB4RUYsMHg3RCwweEZGLDB4RkIsIDB4RkUsMHhFRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGNywKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhFRSwgMHhCRiwweEU0LDB4RkIsMHhGRiwweEZFLDB4M0YsMHhGRSwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhBRiwweEVBLDB4RkUsMHhCRiwweEFGLCAweEVCLDB4RkEsMHhGRSwweEZGLDB4RkYsMHhGRiwweDU1LDB4RjYsCisweEZGLDB4RkUsMHhGNywweEZGLDB4N0YsMHhGRiwweEVCLDB4RjcsIDB4NUYsMHhDNSwweEZELDB4N0YsMHg1RiwweEQ3LDB4RjUsMHhGRiwKKzB4NkYsMHhGQiwweEZGLDB4OEEsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhFQiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkIsMHhCRiwweEJGLAorMHhFRiwweEZCLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGQiwweEZGLCAweDc3LDB4REYsMHhGQiwweEZGLDB4RkQsMHg3RiwweEVGLDB4RkYsCisweEZGLDB4RkYsMHhCRiwweDdGLDB4RkYsMHhERiwweEJGLDB4RkYsIDB4RkIsMHhGRiwweEZGLDB4RkYsMHhGRSwweEVGLDB4REYsMHhGRiwKKzB4RkUsMHhGRiwweDlGLDB4RUYsMHg3RCwweEZGLDB4RjcsMHhGRiwgMHg3RiwweEZGLDB4RkYsMHhERiwweEY3LDB4RkQsMHhGRiwweEVGLAorMHhERiwweEZGLDB4REYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkQsMHhGRiwweEZGLDB4RkIsCisweEZELDB4RkYsMHhCRiwweERGLDB4RDEsMHhGRiwweEY4LDB4M0IsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4N0UsMHhEQiwweEZELDB4RkYsMHg3NywweERCLDB4QjcsMHg3RCwgMHhCRiwweEZCLDB4RkYsMHhGOCwweDdGLDB4RUQsMHg3QiwweDVFLAorMHhGRiwweEZFLDB4RkYsMHhGRiwweDRGLDB4RDcsMHhGRCwweDdGLCAweERGLDB4RDcsMHhGNSwweEZGLDB4N0YsMHhGRiwweEZGLDB4RkYsCisweEYyLDB4M0YsMHhGRSwweEZGLDB4QkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhCRiwweEVGLDB4RkUsMHhGRiwweDNCLDB4RUUsMHhGRiwKKzB4RkMsMHhFRiwweEZGLDB4RkYsMHhGRiwweDg1LDB4RkYsMHhGRCwgMHhGRSwweEZGLDB4RjUsMHhGRiwweEZGLDB4RkUsMHhGRiwweERGLAorMHhGQiwweEZGLDB4NUYsMHhCRiwweEZGLDB4RkQsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhBOCwweEZGLDB4RkYsMHg5RiwweDlFLDB4RkYsCisweEZGLDB4RkYsMHg3RiwweEYzLDB4RkYsMHhGRiwweENGLDB4RkYsIDB4RjcsMHhGRCwweEZGLDB4N0YsMHhGRiwweEZGLDB4RkMsMHgxNiwKKzB4QkYsMHhDRiwweEEzLDB4RTUsMHhFRiwweDdGLDB4RkYsMHhGMywgMHhFNCwweEZGLDB4Q0YsMHg5MywweEZDLDB4RkYsMHgzRiwweENGLAorMHhGRiwweEZGLDB4RkYsMHhENiwweDBGLDB4N0QsMHhCRiwweDZFLCAweEZCLDB4RjQsMHhGQywweEFGLDB4NkQsMHhEQiwweDc3LDB4QjcsCisweDZELDB4REIsMHhGNiwweEZELDB4QkYsMHhGRiwweEZGLDB4RkYsIDB4QkYsMHg5QiwweEZBLDB4REUsMHhCNywweEI3LDB4RUQsMHhGOSwKKzB4N0UsMHhCNywweEFDLDB4RUIsMHhENiwweEIzLDB4QUQsMHhFQiwgMHg3QSwweERGLDB4RkYsMHhGRiwweEZGLDB4RDgsMHhCRiwweEZGLAorMHhCNywweEVELDB4OUYsMHg2RiwweERELDB4RjcsMHg2OCwweERCLCAweDM3LDB4QjMsMHg2QywweERCLDB4MzYsMHhDRCwweEIzLDB4N0YsCisweEZGLDB4N0YsMHhGNSwweDZGLDB4RkQsMHhFRiwweDc5LDB4M0QsIDB4RjcsMHg5MywweEU0LDB4N0EsMHg5RSwweEFELDB4RUEsMHg3QSwKKzB4OUUsMHhGNywweEJELDB4RUYsMHhGRiwweEZGLDB4RkYsMHg3NiwgMHg3RiwweEZCLDB4QzYsMHhGRiwweEJCLDB4RUYsMHhEQSwweEZFLAorMHhGRCwweEJGLDB4RkIsMHhGRSwweEZGLDB4QkYsMHhFRiwweEZCLCAweEZGLDB4RkYsMHhGQiwweEZGLDB4QTUsMHhGRiwweEZELDB4QUIsCisweDZGLDB4NzgsMHhERSwweDE3LDB4OEYsMHg3OSwweERGLDB4RkQsIDB4RkYsMHg3RiwweERGLDB4RjcsMHhGRCwweEZGLDB4RkYsMHhGQiwKKzB4RkYsMHhGQiwweEZGLDB4RUYsMHhGQiwweEVGLDB4RkIsMHhGRSwgMHhGRiwweEJCLDB4REEsMHhGMywweEVGLDB4M0IsMHhDRSwweEYzLAorMHhCQywweEVGLDB4M0YsMHhDRiwweERGLDB4RkYsMHhCNywweEZGLCAweEZGLDB4RkYsMHhDRiwweDczLDB4RkYsMHhCRiwweEVGLDB4RkYsCisweEYzLDB4RkYsMHgzRiwweENGLDB4RjMsMHhGQywweEZGLDB4M0QsIDB4Q0YsMHg5RiwweEZFLDB4MDcsMHhGRiwweEFGLDB4RUIsMHhGRSwKKzB4RkQsMHhCRiwweEVGLDB4RUIsMHhGQSwweEZGLDB4QUYsMHhFQiwgMHhGQSwweEZFLDB4QkYsMHhBRiwweEZCLDB4RkUsMHgzRiwweEZCLAorMHg5QiwweEZGLDB4N0YsMHhERiwweEZGLDB4RjMsMHhGRSwweEZGLCAweERFLDB4RjcsMHhCRiwweDdCLDB4REUsMHhGNywweEJELDB4RUYsCisweDdCLDB4RkUsMHhGRiwweEZGLDB4REYsMHgzRiwweEZFLDB4RkYsIDB4QjcsMHhGRiwweEVGLDB4RjcsMHhGRiwweEJGLDB4RUQsMHhGRSwKKzB4REYsMHhCNywweEVELDB4RkIsMHg3RSwweERGLDB4RkYsMHhGRiwgMHhGRiwweEZELDB4NUYsMHhFRiwweEVCLDB4RkEsMHhGRSwweEY1LAorMHhCRiwweDZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZFLDB4RjgsMHhGRiwweEE4LDB4RkYsCisweEZGLDB4QkYsMHhFRiwweEZCLDB4NkEsMHhGQiwweEI3LDB4RUYsIDB4RkIsMHhGRiwweEJGLDB4RUYsMHhGQiwweEZFLDB4RkYsMHhCRiwKKzB4RUYsMHhGQiwweEZGLDB4RTAsMHhGRiwweEZGLDB4RkQsMHg3RiwgMHg1QywweEQ3LDB4N0QsMHhERiwweEYzLDB4NUMsMHhGNSwweENELAorMHg3MywweDVFLDB4RDcsMHhCNSwweEZELDB4N0YsMHhFRiwweEZGLCAweERCLDB4RkYsMHhGRiwweEUyLDB4RjgsMHhCRSwweDJGLDB4OEYsCisweEU3LDB4RjgsMHhCRSwweDZCLDB4RTIsMHhGOCwweEJFLDB4MkYsIDB4OEIsMHhFMiwweEY5LDB4RkUsMHg3RiwweEU3LDB4RkYsMHhENywKKzB4RjUsMHhGRCwweDdGLDB4RkYsMHhGNywweEY1LDB4RkQsMHg3RiwgMHhENywweEY1LDB4RkQsMHg3RiwweDVGLDB4RDcsMHhGNSwweEZGLAorMHhGRiwweEZGLDB4OEYsMHhGRiwweEFGLDB4RUIsMHhGQSwweEZGLCAweEZGLDB4QkYsMHhFQiwweEZBLDB4RkYsMHgyRiwweEVCLDB4RkEsCisweEZFLDB4QkYsMHhBRiwweEVCLDB4RkYsMHhGRiwweEZFLDB4NUYsIDB4RkYsMHg1RiwweEZGLDB4RkYsMHhGRCwweEZGLDB4RkYsMHhENywKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEJGLDB4RkUsMHhCNywweEZELAorMHhGRiwweDdFLDB4REYsMHhGNywweEFELDB4RkYsMHg3RiwweEY3LCAweEZELDB4RkYsMHg3RiwweERGLDB4RjcsMHhGRCwweEZGLDB4N0YsCisweEY2LDB4N0YsMHhGRiwweEZGLDB4RkYsMHhEQiwweEY2LDB4RkMsIDB4QUYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEY3LDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEVDLDB4QkYsMHhGRiwgMHhBRiwweEVCLDB4RkEsMHhGNiwweEFCLDB4OEYsMHhFQiwweEZBLAorMHhGNywweEE1LDB4RUIsMHhGQSwweEJFLDB4QkYsMHhBRiwweEVCLCAweEZBLDB4RkYsMHg2RCwweEZGLDB4RkYsMHg3RiwweERGLDB4MzMsCisweERELDB4RkYsMHg3RiwweEZFLDB4RjcsMHhGQywweDdGLDB4RkIsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhBOSwKKzB4RkYsMHhGRCwweEZGLDB4RkYsMHhGRSwweEZGLDB4RkYsMHhERiwgMHhGRiwweEZGLDB4RUYsMHhFRiwweEZELDB4RkYsMHg3RiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRSwweEE3LDB4RkYsMHhGRiwweEZGLCAweDc3LDB4REYsMHhGNywweEZELDB4OUYsMHg3RiwweEZFLDB4NzcsCisweEVGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhBRiwweEJGLDB4QUYsMHhGRiwweEY5LDB4QkUsMHhCRiwKKzB4OEYsMHhGQiwweEZFLDB4RkUsMHhFRiwweEZCLDB4RkUsMHhGRiwgMHhCRiwweEVGLDB4RkIsMHhGRiwweEZGLDB4RkQsMHhERiwweDZGLAorMHhFRiwweEZGLDB4N0YsMHhGRiwweEJGLDB4QkYsMHhERiwweEZGLCAweEZDLDB4RkYsMHhERiwweEY3LDB4RkQsMHhFRiwweDdGLDB4REYsCisweEZGLDB4RkYsMHhGRiwweDNGLDB4RjYsMHhGRiwweENGLDB4RkYsIDB4REIsMHhGQiwweEY3LDB4RkYsMHhFQiwweDdBLDB4RkYsMHhGRiwKKzB4RkYsMHhCRiwweEVGLDB4RkIsMHhGRiwweEZGLDB4RkYsMHhGRSwgMHg2RCwweEZELDB4RkYsMHg1RiwweEZCLDB4RkYsMHhGRiwweEY3LAorMHhGRiwweDVGLDB4RjUsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RjgsMHhGRiwweEZCLDB4RkYsCisweEZGLDB4RkQsMHhGRiwweEZGLDB4RkYsMHhGRiwweEU3LDB4RjYsIDB4QkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZCLDB4RkYsMHhGRiwKKzB4RkYsMHhDOSwweEZGLDB4RkYsMHhGRiwweEJELDB4RkYsMHhCRiwgMHhBRiwweEVGLDB4RUYsMHgzRiwweEQxLDB4RkMsMHg3RiwweEZCLAorMHhDNywweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhFMywweEZGLCAweEZGLDB4RkYsMHhGRiwweEZELDB4RkYsMHhGRiwweDc3LDB4RkYsCisweERGLDB4QjcsMHhGRCwweEY3LDB4RkQsMHhGNywweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4NTcsMHhGRiwweEY3LDB4QTUsMHhGRCwKKzB4M0YsMHhERiwweEJGLDB4QkYsMHhGRSwweDdGLDB4RkYsMHhGRiwgMHhGRiwweERGLDB4RkEsMHhGRCwweEZGLDB4RkYsMHhGRiwweEZFLAorMHg4NywweEZGLDB4RTksMHhGRiwweEZFLDB4RUYsMHhCRiwweEVGLCAweEZFLDB4RkUsMHhGRiwweEVGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkEsMHg5RiwweEZGLDB4M0YsIDB4RkYsMHhGRCwweEZELDB4NTcsMHhERiwweEZELDB4RjMsMHhGRiwKKzB4REYsMHhGRCwweEZGLDB4NUYsMHhERiwweEY1LDB4RkQsMHhGRiwgMHhGRiwweEY5LDB4OEYsMHhGRiwweEZGLDB4RkYsMHhFRSwweDdGLAorMHhGRiwweEZGLDB4QkYsMHg1RSwweEZFLDB4RUMsMHhGQiwweDNGLCAweDdGLDB4OUYsMHhFRiwweEY5LDB4RkYsMHhGRiwweENELDB4NkIsCisweEZGLDB4RkYsMHhGRiwweEM1LDB4RjMsMHhGQywweEZBLDB4MzgsIDB4RkYsMHhBRiwweDNGLDB4RUUsMHg3RiwweDlGLDB4RkYsMHhEOSwKKzB4RkYsMHhGRiwweEZELDB4N0EsMHhGNywweEZGLDB4RjMsMHhGRiwgMHhBRiwweDZGLDB4REIsMHhGMiwweEI5LDB4RTksMHhGQiwweEZGLAorMHhGRiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RUYsMHhGRiwweEZCLCAweEM1LDB4QkYsMHhGRiwweEVGLDB4RkYsMHg1RSwweEI3LDB4QUQsCisweENELDB4NzksMHg3QywweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRCwweDkzLDB4RkYsMHhFRiwKKzB4RUEsMHhGRSwweEJGLDB4RUYsMHg1QiwweEQyLDB4Q0QsMHhGNSwgMHg2RCwweDc3LDB4REYsMHhGNywweEZELDB4RkYsMHg3RiwweERGLAorMHhGRiwweEZGLDB4NjYsMHhGRiwweEQ1LDB4NjUsMHg3RCwweDVGLCAweDc1LDB4OUQsMHg2NSwweDdGLDB4RDYsMHhGQiwweDRGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEY2LDB4QzcsIDB4RkYsMHhCRiwweEVGLDB4RkEsMHhGRSwweEZGLDB4QkYsMHhFQiwKKzB4RkYsMHhERiwweEZGLDB4N0UsMHhGRiwweEZGLDB4RUYsMHhGRCwgMHg3RSwweEQ3LDB4RkYsMHg3OCwweERGLDB4RkYsMHg1RiwweERGLAorMHhGNSwweEJGLDB4N0YsMHhERiwweEM1LDB4RkYsMHgzRiwweEY2LCAweDdFLDB4RkYsMHgwRiwweEVGLDB4RjIsMHgzRSwweEJGLDB4RkYsCisweEZCLDB4M0YsMHhGRiwweEZCLDB4N0YsMHhGRiwweEIzLDB4RkUsIDB4RkIsMHhGNiwweEZELDB4RkYsMHhEQSwweEY3LDB4RkQsMHhGRiwKKzB4N0YsMHhERiwweEY3LDB4QkYsMHhGRiwweEZBLDB4N0YsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHg5RiwweEZGLDB4RjMsMHhEQywweEY5LAorMHhCRiwweENFLDB4RTcsMHhGOSwweEZFLDB4N0YsMHg5RiwweEU3LCAweEZGLDB4RkYsMHhFMiwweDdGLDB4RkUsMHhGRiwweEJGLDB4RUYsCisweEVCLDB4RkEsMHhGRiwweDlGLDB4NjcsMHgxRSwweEZGLDB4OEYsIDB4RTcsMHhGOCwweEZFLDB4N0YsMHg4RiwweEVGLDB4RkYsMHhCRCwKKzB4QkYsMHhGRiwweEZCLDB4RkYsMHhGRiwweERGLDB4RjcsMHhGRiwgMHhGQywweEZGLDB4QkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRCwweEIzLDB4RkYsMHhGRiwweEVGLCAweEZGLDB4RkYsMHhCRiwweEVELDB4RkYsMHhGQiwweEVFLDB4RkUsCisweEZGLDB4RkYsMHhFRiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhCNSwweEZGLDB4QjcsMHhGRCwweEZELDB4NkUsMHhGRiwKKzB4RkYsMHhGRSwweEZELDB4MkYsMHhEOCwweEZFLDB4QkYsMHg4RiwgMHhFQiwweEY5LDB4RkUsMHgzRiwweEZGLDB4RkEsMHhDRiwweEZGLAorMHhFNywweEQ5LDB4RkEsMHhCRiwweERGLDB4NzcsMHhGQywweEZCLCAweDNGLDB4QUIsMHhGRSwweEZGLDB4QkYsMHhFRiwweEZCLDB4RkUsCisweEZGLDB4RkYsMHhFRSwweDFGLDB4RkYsMHhERiwweEY3LDB4RkYsIDB4RkYsMHhGRiwweDVGLDB4OTcsMHgzNSwweEJGLDB4NUUsMHhGRSwKKzB4QkYsMHhFRiwweEZGLDB4RjcsMHhGRCwweEZGLDB4RkYsMHhGQSwgMHhCRiwweEZGLDB4QkUsMHg2RiwweDlGLDB4RTcsMHhGOCwweEJFLAorMHgyRiwweDhCLDB4NjYsMHg5NCwweDdELDB4OUQsMHhFNywweEY5LCAweEZFLDB4N0YsMHg5RiwweEU3LDB4RjEsMHg3RiwweEZGLDB4RkYsCisweEZGLDB4RjcsMHhGNSwweEZELDB4N0YsMHg1RiwweEZCLDB4RkQsIDB4OUUsMHhGRiwweEZCLDB4RkUsMHhGRiwweEZGLDB4RUYsMHhGRiwKKzB4RkYsMHhBMCwweEZGLDB4RkYsMHhGRiwweEJGLDB4RUYsMHhFQiwgMHhGQSwweEZFLDB4QkYsMHhCNywweEY3LDB4RjcsMHhGRiwweEZGLAorMHhGRCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhERCwweEZGLCAweEZELDB4RkYsMHhGRiwweEZGLDB4RDcsMHhGRiwweEZGLDB4RkYsCisweDdGLDB4RjUsMHhGRiwweEZGLDB4RUYsMHhGRiwweEZGLDB4RkYsIDB4QkYsMHhGRiwweEZGLDB4QUIsMHhGRSwweEZCLDB4RkUsMHhGRiwKKzB4RjcsMHhBRiwweEZGLDB4RkYsMHhERSwweEY3LDB4RUIsMHg1RiwgMHhERiwweEY3LDB4RkQsMHhGRiwweDdGLDB4REYsMHhGRiwweEZGLAorMHhCMywweEZGLDB4QzksMHhGRSwweEZGLDB4RkYsMHhGRiwweEZGLCAweEQ2LDB4RkYsMHhGRiwweENCLDB4RkYsMHhGRiwweERGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkMsMHg4RiwweEZGLDB4QkEsIDB4QkUsMHhCRiwweEFGLDB4RUIsMHg3OCwweEZFLDB4QjcsMHhBRCwKKzB4M0EsMHhGRSwweEI3LDB4QUYsMHhFQiwweDdBLDB4RkUsMHhCRiwgMHhBRiwweEZGLDB4OUYsMHhGRiwweEZGLDB4REYsMHhGQywweEZGLAorMHhGRiwweEZFLDB4QzMsMHhGRSwweEZGLDB4RkYsMHgzMywweEZDLCAweEZGLDB4QkYsMHhERiwweEYzLDB4RkYsMHhGRiwweEJCLDB4OUYsCisweEZGLDB4RkYsMHhGRiwweEVCLDB4REYsMHhGRiwweEZGLDB4QUYsIDB4RjcsMHg2RiwweEY5LDB4QkYsMHhFRiwweEZELDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RTMsMHg3RiwweEZGLDB4RkYsMHhGRiwgMHhGQiwweEZGLDB4RkYsMHhCRiwweEZELDB4RkIsMHhGNywweEZGLAorMHhERiwweEY3LDB4RkYsMHhGRSwweEVGLDB4NUYsMHhCRCwweEZGLCAweEZBLDB4RkYsMHhGOCwweEZGLDB4QkYsMHhBRiwweEZCLDB4RkUsCisweEZFLDB4M0YsMHhFRiwweEU4LDB4RkYsMHhERiwweEYzLDB4RkQsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEVELDB4RkYsMHhGQiwKKzB4RkQsMHhGRiwweEFGLDB4RkYsMHhGRiwweEZFLDB4RkUsMHhCRiwgMHhEQiwweEZGLDB4RkYsMHhGRiwweEJGLDB4RkYsMHhERiwweEZGLAorMHhGRCwweEZGLDB4Q0IsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEJGLDB4NkYsMHhGRiwweDdGLDB4QjcsMHhCMywweEZGLDB4RkYsCisweERGLDB4RkYsMHhGQiwweEVGLDB4RkYsMHhGRiwweEZGLDB4MDcsIDB4RkYsMHhGQiwweEZGLDB4RkYsMHhGRiwweEVELDB4RkYsMHhGNSwKKzB4N0MsMHhGRiwweDdGLDB4RkUsMHhGRiwweEZGLDB4RUYsMHhDRiwgMHhGRiwweEZCLDB4RkYsMHhGRiwweDJGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEYzLDB4RkYsMHhGQiwweEZGLDB4RkUsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4QkYsMHhGRiwweEZGLDB4RkYsCisweEZELDB4MUIsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZFLDB4N0MsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RUYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZCLDB4QkYsMHg3RiwgMHhGRCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhEQiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZELCAweEZGLDB4RkYsMHhGMCwweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGQiwweEZGLDB4REYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZELDB4QkYsMHhGRSwKKzB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEVGLDB4RkUsMHhGRiwweEJGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RUYsMHhGQSwweEI1LDB4RkYsMHhGRiwweEZGLCAweEY3LDB4RjcsMHhGRiwweEZGLDB4RkYsMHhGRiwweERGLDB4RkIsCisweEZDLDB4RkYsMHhGRiwweEZFLDB4RkYsMHg3RiwweERGLDB4QkYsIDB4RkYsMHhDQiwweEJGLDB4RjksMHhGRSwweDdGLDB4OUYsMHhFNywKKzB4RjksMHhGRSwweDdGLDB4OTcsMHhFMSwweEZFLDB4NzksMHg5RiwgMHhFNywweEZELDB4RkUsMHg3RiwweERGLDB4RkUsMHgzNywweEZGLAorMHhGQiwweERFLDB4REUsMHhCRCwweEVGLDB4RjMsMHhGRSwweEZCLCAweEFGLDB4RUIsMHhGRSwweEZGLDB4RkYsMHhDRiwweEZGLDB4RkUsCisweEZGLDB4QkYsMHhGRiwweDhGLDB4RkYsMHhFRiwweEZCLDB4RkUsIDB4RkYsMHhCRiwweEU3LDB4RjksMHg1RSwweDdGLDB4RUYsMHhGQiwKKzB4REEsMHhGRiwweEJGLDB4RUYsMHhGQiwweEZFLDB4RkYsMHhGRCwgMHgxRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweERGLAorMHhGRiwweEZGLDB4N0YsMHhGRiwweEZGLDB4RjcsMHhGQiwweDdGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkMsMHgzRiwweEZGLDB4QkYsCisweEVGLDB4RkIsMHhGRSwweEZGLDB4QkYsMHhFRiwweDdCLDB4N0YsIDB4QkYsMHhFRiwweEZCLDB4RkUsMHhGRiwweEI1LDB4RUYsMHhGQiwKKzB4QkYsMHhGQSwweDdGLDB4RkMsMHhGRiwweDNGLDB4Q0YsMHhGMywgMHhGQywweEZGLDB4M0YsMHhDRiwweEJDLDB4RkYsMHgzRiwweEVGLAorMHhGMywweEZDLDB4RkUsMHgzRiwweENGLDB4RkYsMHhFRSwweEVGLCAweEZCLDB4RkUsMHhGRiwweEJGLDB4RUYsMHhGQiwweDZBLDB4RDcsCisweEI3LDB4RkIsMHhGOCwweEZGLDB4QjcsMHhFRiwweEJBLDB4RkUsIDB4RkYsMHhCRiwweDdGLDB4RTksMHhGRiwweEY5LDB4N0UsMHg1RiwKKzB4OTcsMHhFNSwweEY5LDB4RkUsMHg3RiwweEJGLDB4RjksMHg3RSwgMHg1RiwweDlGLDB4RTUsMHhGQiwweEZFLDB4NUYsMHhCNywweEZGLAorMHhBMywweEZGLDB4RjcsMHhGRCwweEZGLDB4N0YsMHhERiwweEY3LCAweEZELDB4RkYsMHg1RSwweEY3LDB4N0QsMHhGRiwweDc3LDB4REYsCisweEY3LDB4RkQsMHhGRiwweDdGLDB4RkYsMHhENywweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRCwweERGLDB4RkIsMHg3RiwKKzB4RkYsMHhGRiwweEVGLDB4RkYsMHhGRSwweEZCLDB4RkYsMHhGRiwgMHhCRiwweEZFLDB4OEYsMHhGRiwweERGLDB4RjcsMHhGRCwweEZELAorMHg3RiwweERGLDB4RjcsMHhGRCwweDNFLDB4REYsMHhGNSwweEJELCAweEZGLDB4N0YsMHhERiwweEY3LDB4RkQsMHhGNywweEZGLDB4OUYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRCwweEZGLDB4QkUsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkQsMHgzRiwweEZGLDB4REYsMHhGNywgMHhGRCwweEZGLDB4N0YsMHhERiwweEY3LDB4RkQsMHhGRiwweENGLAorMHg3NywweEZDLDB4RkYsMHg1RiwweERGLDB4RjcsMHhGRCwweEZGLCAweEY0LDB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRCwweEZGLDB4RkYsMHhGRiwweEVFLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhFRCwweEZCLDB4RkYsMHhGRiwweEJGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RTksMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkIsMHhGRiwweEZGLDB4RkYsMHhEMywweEZGLDB4RkYsCisweEJGLDB4M0YsMHhGQiwweEZGLDB4RkYsMHhGRiwweEZCLDB4RjMsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZFLDB4RkYsMHhGNywgMHhGRiwweEZGLDB4RkYsMHhGRiwweDE3LDB4RkYsMHhGRiwweEZGLAorMHhERiwweEZGLDB4RkQsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweERGLDB4REYsMHhGRiwweEZELDB4RkYsMHhGRiwweERGLDB4RjcsCisweEZGLDB4NEYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsMHhGRCwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRSwweEZGLDB4OUYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHg3RiwweEZGLCAweEZGLDB4RkYsMHg3QSwweDNGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGMiwKKzB4N0YsMHhGRiwweEZCLDB4RkUsMHhGRiwweEJGLDB4RUYsMHhGOCwgMHhGRSwweEZGLDB4QkYsMHhGQiwweEZFLDB4RkYsMHg4RiwweEVDLAorMHhGQiwweEZFLDB4RkYsMHhCRiwweEY4LDB4RjcsMHhGRSwweEZGLCAweEJGLDB4RUYsMHhGQiwweEZFLDB4RkQsMHhCRiwweENGLDB4RUMsCisweEZGLDB4M0YsMHhFRiwweERCLDB4RjgsMHhGRiwweEJGLDB4Q0YsIDB4RkYsMHhGOSwweEZGLDB4RkYsMHhCRiwweEZGLDB4RkIsMHhGRiwKKzB4RkYsMHhGRiwweEVGLDB4RkIsMHhERiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4QkYsMHhGRiwweEZGLDB4RkYsMHhCQiwweEZGLAorMHhFRiwweEZCLDB4RkUsMHhFRiwweEJGLDB4RUUsMHhFQiwweEZCLCAweEZFLDB4RkYsMHhFRiwweEZFLDB4RUUsMHhCRiwweEZFLDB4RUIsCisweEZGLDB4RUYsMHhGRiwweDE3LDB4RkYsMHg3RSwweEVCLDB4QkIsIDB4RkUsMHhCRiwweEJFLDB4RkIsMHhFRiwweDVCLDB4RjcsMHhCRCwKKzB4RkIsMHhDRiwweEJGLDB4QkYsMHhCQiwweEZCLDB4N0UsMHhDQywgMHhFRiwweEZGCisKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9kYWJ1c2IuYyBiL2RyaXZlcnMvdXNiL21lZGlhL2RhYnVzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MjMyOTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9kYWJ1c2IuYwpAQCAtMCwwICsxLDg3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogICAgICBkYWJ1c2IuYyAgLS0gIGRhYiB1c2IgZHJpdmVyLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk5ICBEZXRpIEZsaWVnbCAoZGV0aUBmbGllZ2wuZGUpCisgKgorICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqCisgKgorICogICRJZDogZGFidXNiLmMsdiAxLjU0IDIwMDAvMDcvMjQgMjE6Mzk6MzkgZGV0aSBFeHAgJAorICoKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorCisjaW5jbHVkZSAiZGFidXNiLmgiCisjaW5jbHVkZSAiZGFiZmlybXdhcmUuaCIKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuNTQiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkRldGkgRmxpZWdsLCBkZXRpQGZsaWVnbC5kZSIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkRBQi1VU0IgSW50ZXJmYWNlIERyaXZlciBmb3IgTGludXggKGMpMTk5OSIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTCisjZGVmaW5lIE5SREFCVVNCIDI1NgorI2Vsc2UKKyNkZWZpbmUgTlJEQUJVU0IgNAorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBkYWJ1c2JfdCBkYWJ1c2JbTlJEQUJVU0JdOworc3RhdGljIGludCBidWZmZXJzID0gMjU2Oworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGRhYnVzYl9kcml2ZXI7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgZGFidXNiX2FkZF9idWZfdGFpbCAocGRhYnVzYl90IHMsIHN0cnVjdCBsaXN0X2hlYWQgKmRzdCwgc3RydWN0IGxpc3RfaGVhZCAqc3JjKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCWludCByZXQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZzLT5sb2NrLCBmbGFncyk7CisKKwlpZiAobGlzdF9lbXB0eSAoc3JjKSkgeworCQkvLyBubyBlbGVtZW50cyBpbiBzb3VyY2UgYnVmZmVyCisJCXJldCA9IC0xOworCQlnb3RvIGVycjsKKwl9CisJdG1wID0gc3JjLT5uZXh0OworCWxpc3RfbW92ZV90YWlsICh0bXAsIGRzdCk7CisKKyAgZXJyOglzcGluX3VubG9ja19pcnFyZXN0b3JlICgmcy0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmZGVmIERFQlVHIAorc3RhdGljIHZvaWQgZHVtcF91cmIgKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlkYmcoInVyYiAgICAgICAgICAgICAgICAgICA6JXAiLCB1cmIpOworCWRiZygiZGV2ICAgICAgICAgICAgICAgICAgIDolcCIsIHVyYi0+ZGV2KTsKKwlkYmcoInBpcGUgICAgICAgICAgICAgICAgICA6JTA4WCIsIHVyYi0+cGlwZSk7CisJZGJnKCJzdGF0dXMgICAgICAgICAgICAgICAgOiVkIiwgdXJiLT5zdGF0dXMpOworCWRiZygidHJhbnNmZXJfZmxhZ3MgICAgICAgIDolMDhYIiwgdXJiLT50cmFuc2Zlcl9mbGFncyk7CisJZGJnKCJ0cmFuc2Zlcl9idWZmZXIgICAgICAgOiVwIiwgdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCWRiZygidHJhbnNmZXJfYnVmZmVyX2xlbmd0aDolZCIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisJZGJnKCJhY3R1YWxfbGVuZ3RoICAgICAgICAgOiVkIiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwlkYmcoInNldHVwX3BhY2tldCAgICAgICAgICA6JXAiLCB1cmItPnNldHVwX3BhY2tldCk7CisJZGJnKCJzdGFydF9mcmFtZSAgICAgICAgICAgOiVkIiwgdXJiLT5zdGFydF9mcmFtZSk7CisJZGJnKCJudW1iZXJfb2ZfcGFja2V0cyAgICAgOiVkIiwgdXJiLT5udW1iZXJfb2ZfcGFja2V0cyk7CisJZGJnKCJpbnRlcnZhbCAgICAgICAgICAgICAgOiVkIiwgdXJiLT5pbnRlcnZhbCk7CisJZGJnKCJlcnJvcl9jb3VudCAgICAgICAgICAgOiVkIiwgdXJiLT5lcnJvcl9jb3VudCk7CisJZGJnKCJjb250ZXh0ICAgICAgICAgICAgICAgOiVwIiwgdXJiLT5jb250ZXh0KTsKKwlkYmcoImNvbXBsZXRlICAgICAgICAgICAgICA6JXAiLCB1cmItPmNvbXBsZXRlKTsKK30KKyNlbmRpZgorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgZGFidXNiX2NhbmNlbF9xdWV1ZSAocGRhYnVzYl90IHMsIHN0cnVjdCBsaXN0X2hlYWQgKnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlwYnVmZl90IGI7CisKKwlkYmcoImRhYnVzYl9jYW5jZWxfcXVldWUiKTsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmcy0+bG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShiLCBxLCBidWZmX2xpc3QpIHsKKyNpZmRlZiBERUJVRworCQlkdW1wX3VyYihiLT5wdXJiKTsKKyNlbmRpZgorCQl1c2JfdW5saW5rX3VyYiAoYi0+cHVyYik7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZzLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBkYWJ1c2JfZnJlZV9xdWV1ZSAoc3RydWN0IGxpc3RfaGVhZCAqcSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlwYnVmZl90IGI7CisKKwlkYmcoImRhYnVzYl9mcmVlX3F1ZXVlIik7CisJZm9yIChwID0gcS0+bmV4dDsgcCAhPSBxOykgeworCQliID0gbGlzdF9lbnRyeSAocCwgYnVmZl90LCBidWZmX2xpc3QpOworCisjaWZkZWYgREVCVUcgCisJCWR1bXBfdXJiKGItPnB1cmIpOworI2VuZGlmCisJCWlmIChiLT5wdXJiLT50cmFuc2Zlcl9idWZmZXIpCisJCQlrZnJlZSAoYi0+cHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJdXNiX2ZyZWVfdXJiKGItPnB1cmIpOworCQl0bXAgPSBwLT5uZXh0OworCQlsaXN0X2RlbCAocCk7CisJCWtmcmVlIChiKTsKKwkJcCA9IHRtcDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IGRhYnVzYl9mcmVlX2J1ZmZlcnMgKHBkYWJ1c2JfdCBzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJZGJnKCJkYWJ1c2JfZnJlZV9idWZmZXJzIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOworCisJZGFidXNiX2ZyZWVfcXVldWUgKCZzLT5mcmVlX2J1ZmZfbGlzdCk7CisJZGFidXNiX2ZyZWVfcXVldWUgKCZzLT5yZWNfYnVmZl9saXN0KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKKworCXMtPmdvdF9tZW0gPSAwOworCXJldHVybiAwOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIGRhYnVzYl9pc29fY29tcGxldGUgKHN0cnVjdCB1cmIgKnB1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXBidWZmX3QgYiA9IHB1cmItPmNvbnRleHQ7CisJcGRhYnVzYl90IHMgPSBiLT5zOworCWludCBpOworCWludCBsZW47CisJaW50IGRzdCA9IDA7CisJdm9pZCAqYnVmID0gcHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCisJZGJnKCJkYWJ1c2JfaXNvX2NvbXBsZXRlIik7CisKKwkvLyBwcm9jZXNzIGlmIFVSQiB3YXMgbm90IGtpbGxlZAorCWlmIChwdXJiLT5zdGF0dXMgIT0gLUVOT0VOVCkgeworCQl1bnNpZ25lZCBpbnQgcGlwZSA9IHVzYl9yY3Zpc29jcGlwZSAocHVyYi0+ZGV2LCBfREFCVVNCX0lTT1BJUEUpOworCQlpbnQgcGlwZXNpemUgPSB1c2JfbWF4cGFja2V0IChwdXJiLT5kZXYsIHBpcGUsIHVzYl9waXBlb3V0IChwaXBlKSk7CisJCWZvciAoaSA9IDA7IGkgPCBwdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKQorCQkJaWYgKCFwdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpIHsKKwkJCQlsZW4gPSBwdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoOworCQkJCWlmIChsZW4gPD0gcGlwZXNpemUpIHsKKwkJCQkJbWVtY3B5IChidWYgKyBkc3QsIGJ1ZiArIHB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCwgbGVuKTsKKwkJCQkJZHN0ICs9IGxlbjsKKwkJCQl9CisJCQkJZWxzZQorCQkJCQllcnIoImRhYnVzYl9pc29fY29tcGxldGU6IGludmFsaWQgbGVuICVkIiwgbGVuKTsKKwkJCX0KKwkJCWVsc2UKKwkJCQl3YXJuKCJkYWJ1c2JfaXNvX2NvbXBsZXRlOiBjb3JydXB0ZWQgcGFja2V0IHN0YXR1czogJWQiLCBwdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpOworCQlpZiAoZHN0ICE9IHB1cmItPmFjdHVhbF9sZW5ndGgpCisJCQllcnIoImRzdCE9cHVyYi0+YWN0dWFsX2xlbmd0aDolZCE9JWQiLCBkc3QsIHB1cmItPmFjdHVhbF9sZW5ndGgpOworCX0KKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0ICgmcy0+cGVuZGluZ19pbykgJiYgIXMtPnJlbW92ZV9wZW5kaW5nICYmIHMtPnN0YXRlICE9IF9zdG9wcGVkKSB7CisJCXMtPm92ZXJydW5zKys7CisJCWVycigib3ZlcnJ1biAoJWQpIiwgcy0+b3ZlcnJ1bnMpOworCX0KKwl3YWtlX3VwICgmcy0+d2FpdCk7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBkYWJ1c2JfYWxsb2NfYnVmZmVycyAocGRhYnVzYl90IHMpCit7CisJaW50IGJ1ZmZlcnMgPSAwOworCXBidWZmX3QgYjsKKwl1bnNpZ25lZCBpbnQgcGlwZSA9IHVzYl9yY3Zpc29jcGlwZSAocy0+dXNiZGV2LCBfREFCVVNCX0lTT1BJUEUpOworCWludCBwaXBlc2l6ZSA9IHVzYl9tYXhwYWNrZXQgKHMtPnVzYmRldiwgcGlwZSwgdXNiX3BpcGVvdXQgKHBpcGUpKTsKKwlpbnQgcGFja2V0cyA9IF9JU09QSVBFU0laRSAvIHBpcGVzaXplOworCWludCB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gcGFja2V0cyAqIHBpcGVzaXplOworCWludCBpOworCisJZGJnKCJkYWJ1c2JfYWxsb2NfYnVmZmVycyBwaXBlc2l6ZTolZCBwYWNrZXRzOiVkIHRyYW5zZmVyX2J1ZmZlcl9sZW46JWQiLAorCQkgcGlwZXNpemUsIHBhY2tldHMsIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCisJd2hpbGUgKGJ1ZmZlcnMgPCAocy0+dG90YWxfYnVmZmVyX3NpemUgPDwgMTApKSB7CisJCWIgPSAocGJ1ZmZfdCkga21hbGxvYyAoc2l6ZW9mIChidWZmX3QpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFiKSB7CisJCQllcnIoImttYWxsb2Moc2l6ZW9mKGJ1ZmZfdCkpPT1OVUxMIik7CisJCQlnb3RvIGVycjsKKwkJfQorCQltZW1zZXQgKGIsIDAsIHNpemVvZiAoYnVmZl90KSk7CisJCWItPnMgPSBzOworCQliLT5wdXJiID0gdXNiX2FsbG9jX3VyYihwYWNrZXRzLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFiLT5wdXJiKSB7CisJCQllcnIoInVzYl9hbGxvY191cmIgPT0gTlVMTCIpOworCQkJa2ZyZWUgKGIpOworCQkJZ290byBlcnI7CisJCX0KKworCQliLT5wdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jICh0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFiLT5wdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKKwkJCWtmcmVlIChiLT5wdXJiKTsKKwkJCWtmcmVlIChiKTsKKwkJCWVycigia21hbGxvYyglZCk9PU5VTEwiLCB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJYi0+cHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJCWItPnB1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gcGFja2V0czsKKwkJYi0+cHVyYi0+Y29tcGxldGUgPSBkYWJ1c2JfaXNvX2NvbXBsZXRlOworCQliLT5wdXJiLT5jb250ZXh0ID0gYjsKKwkJYi0+cHVyYi0+ZGV2ID0gcy0+dXNiZGV2OworCQliLT5wdXJiLT5waXBlID0gcGlwZTsKKwkJYi0+cHVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisKKwkJZm9yIChpID0gMDsgaSA8IHBhY2tldHM7IGkrKykgeworCQkJYi0+cHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0ID0gaSAqIHBpcGVzaXplOworCQkJYi0+cHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID0gcGlwZXNpemU7CisJCX0KKworCQlidWZmZXJzICs9IHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJCWxpc3RfYWRkX3RhaWwgKCZiLT5idWZmX2xpc3QsICZzLT5mcmVlX2J1ZmZfbGlzdCk7CisJfQorCXMtPmdvdF9tZW0gPSBidWZmZXJzOworCisJcmV0dXJuIDA7CisKKwllcnI6CisJZGFidXNiX2ZyZWVfYnVmZmVycyAocyk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBkYWJ1c2JfYnVsayAocGRhYnVzYl90IHMsIHBidWxrX3RyYW5zZmVyX3QgcGIpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgcGlwZTsKKwlpbnQgYWN0dWFsX2xlbmd0aDsKKworCWRiZygiZGFidXNiX2J1bGsiKTsKKworCWlmICghcGItPnBpcGUpCisJCXBpcGUgPSB1c2JfcmN2YnVsa3BpcGUgKHMtPnVzYmRldiwgMik7CisJZWxzZQorCQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlIChzLT51c2JkZXYsIDIpOworCisJcmV0PXVzYl9idWxrX21zZyhzLT51c2JkZXYsIHBpcGUsIHBiLT5kYXRhLCBwYi0+c2l6ZSwgJmFjdHVhbF9sZW5ndGgsIDEwMCk7CisJaWYocmV0PDApIHsKKwkJZXJyKCJkYWJ1c2I6IHVzYl9idWxrX21zZyBmYWlsZWQoJWQpIixyZXQpOworCisJCWlmICh1c2Jfc2V0X2ludGVyZmFjZSAocy0+dXNiZGV2LCBfREFCVVNCX0lGLCAxKSA8IDApIHsKKwkJCWVycigic2V0X2ludGVyZmFjZSBmYWlsZWQiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwl9CisJCisJaWYoIHJldCA9PSAtRVBJUEUgKSB7CisJCXdhcm4oIkNMRUFSX0ZFQVRVUkUgcmVxdWVzdCB0byByZW1vdmUgU1RBTEwgY29uZGl0aW9uLiIpOworCQlpZih1c2JfY2xlYXJfaGFsdChzLT51c2JkZXYsIHVzYl9waXBlZW5kcG9pbnQocGlwZSkpKQorCQkJZXJyKCJyZXF1ZXN0IGZhaWxlZCIpOworCX0KKworCXBiLT5zaXplID0gYWN0dWFsX2xlbmd0aDsKKwlyZXR1cm4gcmV0OworfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgaW50IGRhYnVzYl93cml0ZW1lbSAocGRhYnVzYl90IHMsIGludCBwb3MsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4pCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyICp0cmFuc2Zlcl9idWZmZXIgPSAga21hbGxvYyAobGVuLCBHRlBfS0VSTkVMKTsKKworCWlmICghdHJhbnNmZXJfYnVmZmVyKSB7CisJCWVycigiZGFidXNiX3dyaXRlbWVtOiBrbWFsbG9jKCVkKSBmYWlsZWQuIiwgbGVuKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtY3B5ICh0cmFuc2Zlcl9idWZmZXIsIGRhdGEsIGxlbik7CisKKwlyZXQ9dXNiX2NvbnRyb2xfbXNnKHMtPnVzYmRldiwgdXNiX3NuZGN0cmxwaXBlKCBzLT51c2JkZXYsIDAgKSwgMHhhMCwgMHg0MCwgcG9zLCAwLCB0cmFuc2Zlcl9idWZmZXIsIGxlbiwgMzAwKTsKKworCWtmcmVlICh0cmFuc2Zlcl9idWZmZXIpOworCXJldHVybiByZXQ7Cit9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBpbnQgZGFidXNiXzgwNTFfcmVzZXQgKHBkYWJ1c2JfdCBzLCB1bnNpZ25lZCBjaGFyIHJlc2V0X2JpdCkKK3sKKwlkYmcoImRhYnVzYl84MDUxX3Jlc2V0OiAlZCIscmVzZXRfYml0KTsKKwlyZXR1cm4gZGFidXNiX3dyaXRlbWVtIChzLCBDUFVDU19SRUcsICZyZXNldF9iaXQsIDEpOworfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgaW50IGRhYnVzYl9sb2FkbWVtIChwZGFidXNiX3QgcywgY29uc3QgY2hhciAqZm5hbWUpCit7CisJaW50IHJldDsKKwlQSU5URUxfSEVYX1JFQ09SRCBwdHIgPSBmaXJtd2FyZTsKKworCWRiZygiRW50ZXIgZGFidXNiX2xvYWRtZW0gKGludGVybmFsKSIpOworCQorCXJldCA9IGRhYnVzYl84MDUxX3Jlc2V0IChzLCAxKTsKKwl3aGlsZSAocHRyLT5UeXBlID09IDApIHsKKworCQlkYmcoImRhYnVzYl93cml0ZW1lbTogJTA0WCAlcCAlZCkiLCBwdHItPkFkZHJlc3MsIHB0ci0+RGF0YSwgcHRyLT5MZW5ndGgpOworCisJCXJldCA9IGRhYnVzYl93cml0ZW1lbSAocywgcHRyLT5BZGRyZXNzLCBwdHItPkRhdGEsIHB0ci0+TGVuZ3RoKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWVycigiZGFidXNiX3dyaXRlbWVtIGZhaWxlZCAoJWQgJTA0WCAlcCAlZCkiLCByZXQsIHB0ci0+QWRkcmVzcywgcHRyLT5EYXRhLCBwdHItPkxlbmd0aCk7CisJCQlicmVhazsKKwkJfQorCQlwdHIrKzsKKwl9CisJcmV0ID0gZGFidXNiXzgwNTFfcmVzZXQgKHMsIDApOworCisJZGJnKCJkYWJ1c2JfbG9hZG1lbTogZXhpdCIpOworCisJcmV0dXJuIHJldDsKK30KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGljIGludCBkYWJ1c2JfZnBnYV9jbGVhciAocGRhYnVzYl90IHMsIHBidWxrX3RyYW5zZmVyX3QgYikKK3sKKwliLT5zaXplID0gNDsKKwliLT5kYXRhWzBdID0gMHgyYTsKKwliLT5kYXRhWzFdID0gMDsKKwliLT5kYXRhWzJdID0gMDsKKwliLT5kYXRhWzNdID0gMDsKKworCWRiZygiZGFidXNiX2ZwZ2FfY2xlYXIiKTsKKworCXJldHVybiBkYWJ1c2JfYnVsayAocywgYik7Cit9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBpbnQgZGFidXNiX2ZwZ2FfaW5pdCAocGRhYnVzYl90IHMsIHBidWxrX3RyYW5zZmVyX3QgYikKK3sKKwliLT5zaXplID0gNDsKKwliLT5kYXRhWzBdID0gMHgyYzsKKwliLT5kYXRhWzFdID0gMDsKKwliLT5kYXRhWzJdID0gMDsKKwliLT5kYXRhWzNdID0gMDsKKworCWRiZygiZGFidXNiX2ZwZ2FfaW5pdCIpOworCisJcmV0dXJuIGRhYnVzYl9idWxrIChzLCBiKTsKK30KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGljIGludCBkYWJ1c2JfZnBnYV9kb3dubG9hZCAocGRhYnVzYl90IHMsIGNvbnN0IGNoYXIgKmZuYW1lKQoreworCXBidWxrX3RyYW5zZmVyX3QgYiA9IGttYWxsb2MgKHNpemVvZiAoYnVsa190cmFuc2Zlcl90KSwgR0ZQX0tFUk5FTCk7CisJdW5zaWduZWQgaW50IGJsZW4sIG47CisJaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyICpidWYgPSBiaXRzdHJlYW07CisKKwlkYmcoIkVudGVyIGRhYnVzYl9mcGdhX2Rvd25sb2FkIChpbnRlcm5hbCkiKTsKKworCWlmICghYikgeworCQllcnIoImttYWxsb2Moc2l6ZW9mKGJ1bGtfdHJhbnNmZXJfdCkpPT1OVUxMIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWItPnBpcGUgPSAxOworCXJldCA9IGRhYnVzYl9mcGdhX2NsZWFyIChzLCBiKTsKKwltZGVsYXkgKDEwKTsKKwlibGVuID0gYnVmWzczXSArIChidWZbNzJdIDw8IDgpOworCisJZGJnKCJCaXRzdHJlYW0gbGVuOiAlaSIsIGJsZW4pOworCisJYi0+ZGF0YVswXSA9IDB4MmI7CisJYi0+ZGF0YVsxXSA9IDA7CisJYi0+ZGF0YVsyXSA9IDA7CisJYi0+ZGF0YVszXSA9IDYwOworCisJZm9yIChuID0gMDsgbiA8PSBibGVuICsgNjA7IG4gKz0gNjApIHsKKwkJLy8gc29tZSBjY2xrcyBmb3Igc3RhcnR1cAorCQliLT5zaXplID0gNjQ7CisJCW1lbWNweSAoYi0+ZGF0YSArIDQsIGJ1ZiArIDc0ICsgbiwgNjApOworCQlyZXQgPSBkYWJ1c2JfYnVsayAocywgYik7CisJCWlmIChyZXQgPCAwKSB7CisJCQllcnIoImRhYnVzYl9idWxrIGZhaWxlZC4iKTsKKwkJCWJyZWFrOworCQl9CisJCW1kZWxheSAoMSk7CisJfQorCisJcmV0ID0gZGFidXNiX2ZwZ2FfaW5pdCAocywgYik7CisJa2ZyZWUgKGIpOworCisJZGJnKCJleGl0IGRhYnVzYl9mcGdhX2Rvd25sb2FkIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRhYnVzYl9zdG9wIChwZGFidXNiX3QgcykKK3sKKwlkYmcoImRhYnVzYl9zdG9wIik7CisKKwlzLT5zdGF0ZSA9IF9zdG9wcGVkOworCWRhYnVzYl9jYW5jZWxfcXVldWUgKHMsICZzLT5yZWNfYnVmZl9saXN0KTsKKworCWRiZygicGVuZGluZ19pbzogJWQiLCBzLT5wZW5kaW5nX2lvLmNvdW50ZXIpOworCisJcy0+cGVuZGluZ19pby5jb3VudGVyID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYWJ1c2Jfc3RhcnRyZWsgKHBkYWJ1c2JfdCBzKQoreworCWlmICghcy0+Z290X21lbSAmJiBzLT5zdGF0ZSAhPSBfc3RhcnRlZCkgeworCisJCWRiZygiZGFidXNiX3N0YXJ0cmVrIik7CisKKwkJaWYgKGRhYnVzYl9hbGxvY19idWZmZXJzIChzKSA8IDApCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJZGFidXNiX3N0b3AgKHMpOworCQlzLT5zdGF0ZSA9IF9zdGFydGVkOworCQlzLT5yZWFkcHRyID0gMDsKKwl9CisKKwlpZiAoIWxpc3RfZW1wdHkgKCZzLT5mcmVlX2J1ZmZfbGlzdCkpIHsKKwkJcGJ1ZmZfdCBlbmQ7CisJCWludCByZXQ7CisJCQorCXdoaWxlICghZGFidXNiX2FkZF9idWZfdGFpbCAocywgJnMtPnJlY19idWZmX2xpc3QsICZzLT5mcmVlX2J1ZmZfbGlzdCkpIHsKKworCQkJZGJnKCJzdWJtaXR0aW5nOiBlbmQ6JXAgcy0+cmVjX2J1ZmZfbGlzdDolcCIsIHMtPnJlY19idWZmX2xpc3QucHJldiwgJnMtPnJlY19idWZmX2xpc3QpOworCisJCQllbmQgPSBsaXN0X2VudHJ5IChzLT5yZWNfYnVmZl9saXN0LnByZXYsIGJ1ZmZfdCwgYnVmZl9saXN0KTsKKworCQkJcmV0ID0gdXNiX3N1Ym1pdF91cmIgKGVuZC0+cHVyYiwgR0ZQX0tFUk5FTCk7CisJCQlpZiAocmV0KSB7CisJCQkJZXJyKCJ1c2Jfc3VibWl0X3VyYiByZXR1cm5lZDolZCIsIHJldCk7CisJCQkJaWYgKGRhYnVzYl9hZGRfYnVmX3RhaWwgKHMsICZzLT5mcmVlX2J1ZmZfbGlzdCwgJnMtPnJlY19idWZmX2xpc3QpKQorCQkJCQllcnIoInN0YXJ0cmVrOiBkYWJ1c2JfYWRkX2J1Zl90YWlsIGZhaWxlZCIpOworCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZQorCQkJCWF0b21pY19pbmMgKCZzLT5wZW5kaW5nX2lvKTsKKwkJfQorCQlkYmcoInBlbmRpbmdfaW86ICVkIixzLT5wZW5kaW5nX2lvLmNvdW50ZXIpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBkYWJ1c2JfcmVhZCAoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKK3sKKwlwZGFidXNiX3QgcyA9IChwZGFidXNiX3QpIGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIHJldCA9IDA7CisJaW50IHJlbTsKKwlpbnQgY250OworCXBidWZmX3QgYjsKKwlzdHJ1Y3QgdXJiICpwdXJiID0gTlVMTDsKKworCWRiZygiZGFidXNiX3JlYWQiKTsKKworCWlmICgqcHBvcykKKwkJcmV0dXJuIC1FU1BJUEU7CisKKwlpZiAocy0+cmVtb3ZlX3BlbmRpbmcpCisJCXJldHVybiAtRUlPOworCisKKwlpZiAoIXMtPnVzYmRldikKKwkJcmV0dXJuIC1FSU87CisKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCWRhYnVzYl9zdGFydHJlayAocyk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUgKCZzLT5sb2NrLCBmbGFncyk7CisKKwkJaWYgKGxpc3RfZW1wdHkgKCZzLT5yZWNfYnVmZl9saXN0KSkgeworCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CisKKwkJCWVycigiZXJyb3I6IHJlY19idWZfbGlzdCBpcyBlbXB0eSIpOworCQkJZ290byBlcnI7CisJCX0KKwkJCisJCWIgPSBsaXN0X2VudHJ5IChzLT5yZWNfYnVmZl9saXN0Lm5leHQsIGJ1ZmZfdCwgYnVmZl9saXN0KTsKKwkJcHVyYiA9IGItPnB1cmI7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOworCisJCWlmIChwdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCQkvLyByZXR1cm4gbm9uYmxvY2tpbmcKKwkJCSB7CisJCQkJaWYgKCFyZXQpCisJCQkJCXJldCA9IC1FQUdBSU47CisJCQkJZ290byBlcnI7CisJCQl9CisKKwkJCWludGVycnVwdGlibGVfc2xlZXBfb24gKCZzLT53YWl0KTsKKworCQkJaWYgKHNpZ25hbF9wZW5kaW5nIChjdXJyZW50KSkgeworCQkJCWlmICghcmV0KQorCQkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCQkJZ290byBlcnI7CisJCQl9CisKKwkJCXNwaW5fbG9ja19pcnFzYXZlICgmcy0+bG9jaywgZmxhZ3MpOworCisJCQlpZiAobGlzdF9lbXB0eSAoJnMtPnJlY19idWZmX2xpc3QpKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOworCQkJCWVycigiZXJyb3I6IHN0aWxsIG5vIGJ1ZmZlciBhdmFpbGFibGUuIik7CisJCQkJZ290byBlcnI7CisJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CisJCQlzLT5yZWFkcHRyID0gMDsKKwkJfQorCQlpZiAocy0+cmVtb3ZlX3BlbmRpbmcpIHsKKwkJCXJldCA9IC1FSU87CisJCQlnb3RvIGVycjsKKwkJfQorCisJCXJlbSA9IHB1cmItPmFjdHVhbF9sZW5ndGggLSBzLT5yZWFkcHRyOwkJLy8gc2V0IHJlbWFpbmluZyBieXRlcyB0byBjb3B5CisKKwkJaWYgKGNvdW50ID49IHJlbSkKKwkJCWNudCA9IHJlbTsKKwkJZWxzZQorCQkJY250ID0gY291bnQ7CisKKwkJZGJnKCJjb3B5X3RvX3VzZXI6JXAgJXAgJWQiLGJ1ZiwgcHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgcy0+cmVhZHB0ciwgY250KTsKKworCQlpZiAoY29weV90b191c2VyIChidWYsIHB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHMtPnJlYWRwdHIsIGNudCkpIHsKKwkJCWVycigicmVhZDogY29weV90b191c2VyIGZhaWxlZCIpOworCQkJaWYgKCFyZXQpCisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJcy0+cmVhZHB0ciArPSBjbnQ7CisJCWNvdW50IC09IGNudDsKKwkJYnVmICs9IGNudDsKKwkJcmV0ICs9IGNudDsKKworCQlpZiAocy0+cmVhZHB0ciA9PSBwdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCQkvLyBmaW5pc2hlZCwgdGFrZSBuZXh0IGJ1ZmZlcgorCQkJaWYgKGRhYnVzYl9hZGRfYnVmX3RhaWwgKHMsICZzLT5mcmVlX2J1ZmZfbGlzdCwgJnMtPnJlY19idWZmX2xpc3QpKQorCQkJCWVycigicmVhZDogZGFidXNiX2FkZF9idWZfdGFpbCBmYWlsZWQiKTsKKwkJCXMtPnJlYWRwdHIgPSAwOworCQl9CisJfQorICAgICAgZXJyOgkJCS8vdXAoJnMtPm11dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRhYnVzYl9vcGVuIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgZGV2bnVtID0gaW1pbm9yKGlub2RlKTsKKwlwZGFidXNiX3QgczsKKworCWlmIChkZXZudW0gPCBEQUJVU0JfTUlOT1IgfHwgZGV2bnVtID49IChEQUJVU0JfTUlOT1IgKyBOUkRBQlVTQikpCisJCXJldHVybiAtRUlPOworCisJcyA9ICZkYWJ1c2JbZGV2bnVtIC0gREFCVVNCX01JTk9SXTsKKworCWRiZygiZGFidXNiX29wZW4iKTsKKwlkb3duICgmcy0+bXV0ZXgpOworCisJd2hpbGUgKCFzLT51c2JkZXYgfHwgcy0+b3BlbmVkKSB7CisJCXVwICgmcy0+bXV0ZXgpOworCisJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQltc2xlZXBfaW50ZXJydXB0aWJsZSg1MDApOworCisJCWlmIChzaWduYWxfcGVuZGluZyAoY3VycmVudCkpIHsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJCWRvd24gKCZzLT5tdXRleCk7CisJfQorCWlmICh1c2Jfc2V0X2ludGVyZmFjZSAocy0+dXNiZGV2LCBfREFCVVNCX0lGLCAxKSA8IDApIHsKKwkJdXAoJnMtPm11dGV4KTsKKwkJZXJyKCJzZXRfaW50ZXJmYWNlIGZhaWxlZCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcy0+b3BlbmVkID0gMTsKKwl1cCAoJnMtPm11dGV4KTsKKworCWZpbGUtPmZfcG9zID0gMDsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBzOworCisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworfQorCitzdGF0aWMgaW50IGRhYnVzYl9yZWxlYXNlIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlwZGFidXNiX3QgcyA9IChwZGFidXNiX3QpIGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWRiZygiZGFidXNiX3JlbGVhc2UiKTsKKworCWRvd24gKCZzLT5tdXRleCk7CisJZGFidXNiX3N0b3AgKHMpOworCWRhYnVzYl9mcmVlX2J1ZmZlcnMgKHMpOworCXVwICgmcy0+bXV0ZXgpOworCisJaWYgKCFzLT5yZW1vdmVfcGVuZGluZykgeworCQlpZiAodXNiX3NldF9pbnRlcmZhY2UgKHMtPnVzYmRldiwgX0RBQlVTQl9JRiwgMCkgPCAwKQorCQkJZXJyKCJzZXRfaW50ZXJmYWNlIGZhaWxlZCIpOworCX0KKwllbHNlCisJCXdha2VfdXAgKCZzLT5yZW1vdmVfb2spOworCisJcy0+b3BlbmVkID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYWJ1c2JfaW9jdGwgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlwZGFidXNiX3QgcyA9IChwZGFidXNiX3QpIGZpbGUtPnByaXZhdGVfZGF0YTsKKwlwYnVsa190cmFuc2Zlcl90IHBidWxrOworCWludCByZXQgPSAwOworCWludCB2ZXJzaW9uID0gREFCVVNCX1ZFUlNJT047CisKKwlkYmcoImRhYnVzYl9pb2N0bCIpOworCisJaWYgKHMtPnJlbW92ZV9wZW5kaW5nKQorCQlyZXR1cm4gLUVJTzsKKworCWRvd24gKCZzLT5tdXRleCk7CisKKwlpZiAoIXMtPnVzYmRldikgeworCQl1cCAoJnMtPm11dGV4KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJc3dpdGNoIChjbWQpIHsKKworCWNhc2UgSU9DVExfREFCX0JVTEs6CisJCXBidWxrID0gKHBidWxrX3RyYW5zZmVyX3QpIGttYWxsb2MgKHNpemVvZiAoYnVsa190cmFuc2Zlcl90KSwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFwYnVsaykgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyIChwYnVsaywgKHZvaWQgX191c2VyICopIGFyZywgc2l6ZW9mIChidWxrX3RyYW5zZmVyX3QpKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWtmcmVlIChwYnVsayk7CisJCQlicmVhazsKKwkJfQorCisJCXJldD1kYWJ1c2JfYnVsayAocywgcGJ1bGspOworCQlpZihyZXQ9PTApCisJCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgcGJ1bGssCisJCQkJCSBzaXplb2YoYnVsa190cmFuc2Zlcl90KSkpCisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJa2ZyZWUgKHBidWxrKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ1RMX0RBQl9PVkVSUlVOUzoKKwkJcmV0ID0gcHV0X3VzZXIgKHMtPm92ZXJydW5zLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSBhcmcpOworCQlicmVhazsKKworCWNhc2UgSU9DVExfREFCX1ZFUlNJT046CisJCXJldCA9IHB1dF91c2VyICh2ZXJzaW9uLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSBhcmcpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9JT0NUTENNRDsKKwkJYnJlYWs7CisJfQorCXVwICgmcy0+bXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRhYnVzYl9mb3BzID0KK3sKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubGxzZWVrID0Jbm9fbGxzZWVrLAorCS5yZWFkID0JCWRhYnVzYl9yZWFkLAorCS5pb2N0bCA9CWRhYnVzYl9pb2N0bCwKKwkub3BlbiA9CQlkYWJ1c2Jfb3BlbiwKKwkucmVsZWFzZSA9CWRhYnVzYl9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIGRhYnVzYl9jbGFzcyA9IHsKKwkubmFtZSA9CQkidXNiL2RhYnVzYiVkIiwKKwkuZm9wcyA9CQkmZGFidXNiX2ZvcHMsCisJLm1vZGUgPQkJU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JUkdSUCB8IFNfSVdHUlAsCisJLm1pbm9yX2Jhc2UgPQlEQUJVU0JfTUlOT1IsCit9OworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGljIGludCBkYWJ1c2JfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlpbnQgcmV0dmFsOworCXBkYWJ1c2JfdCBzOworCisJZGJnKCJkYWJ1c2I6IHByb2JlOiB2ZW5kb3IgaWQgMHgleCwgZGV2aWNlIGlkIDB4JXggaWZudW06JWQiLAorCSAgICBsZTE2X3RvX2NwdSh1c2JkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCSAgICBsZTE2X3RvX2NwdSh1c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSwKKwkgICAgaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKworCS8qIFdlIGRvbid0IGhhbmRsZSBtdWx0aXBsZSBjb25maWd1cmF0aW9ucyAqLworCWlmICh1c2JkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGludGYtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciAhPSBfREFCVVNCX0lGICYmCisJICAgIGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4OTk5OSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKworCisJcyA9ICZkYWJ1c2JbaW50Zi0+bWlub3JdOworCisJZG93biAoJnMtPm11dGV4KTsKKwlzLT5yZW1vdmVfcGVuZGluZyA9IDA7CisJcy0+dXNiZGV2ID0gdXNiZGV2OworCXMtPmRldm51bSA9IGludGYtPm1pbm9yOworCisJaWYgKHVzYl9yZXNldF9jb25maWd1cmF0aW9uICh1c2JkZXYpIDwgMCkgeworCQllcnIoInJlc2V0X2NvbmZpZ3VyYXRpb24gZmFpbGVkIik7CisJCWdvdG8gcmVqZWN0OworCX0KKwlpZiAobGUxNl90b19jcHUodXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gMHgyMTMxKSB7CisJCWRhYnVzYl9sb2FkbWVtIChzLCBOVUxMKTsKKwkJZ290byByZWplY3Q7CisJfQorCWVsc2UgeworCQlkYWJ1c2JfZnBnYV9kb3dubG9hZCAocywgTlVMTCk7CisKKwkJaWYgKHVzYl9zZXRfaW50ZXJmYWNlIChzLT51c2JkZXYsIF9EQUJVU0JfSUYsIDApIDwgMCkgeworCQkJZXJyKCJzZXRfaW50ZXJmYWNlIGZhaWxlZCIpOworCQkJZ290byByZWplY3Q7CisJCX0KKwl9CisJZGJnKCJib3VuZCB0byBpbnRlcmZhY2U6ICVkIiwgaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBzKTsKKwl1cCAoJnMtPm11dGV4KTsKKworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJmRhYnVzYl9jbGFzcyk7CisJaWYgKHJldHZhbCkgeworCQl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7CisKKyAgICAgIHJlamVjdDoKKwl1cCAoJnMtPm11dGV4KTsKKwlzLT51c2JkZXYgPSBOVUxMOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgdm9pZCBkYWJ1c2JfZGlzY29ubmVjdCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJd2FpdF9xdWV1ZV90IF9fd2FpdDsKKwlwZGFidXNiX3QgcyA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCisJZGJnKCJkYWJ1c2JfZGlzY29ubmVjdCIpOworCQorCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZfX3dhaXQsIGN1cnJlbnQpOworCQorCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCWlmIChzKSB7CisJCXVzYl9kZXJlZ2lzdGVyX2RldiAoaW50ZiwgJmRhYnVzYl9jbGFzcyk7CisJCXMtPnJlbW92ZV9wZW5kaW5nID0gMTsKKwkJd2FrZV91cCAoJnMtPndhaXQpOworCQlhZGRfd2FpdF9xdWV1ZSgmcy0+cmVtb3ZlX29rLCAmX193YWl0KTsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOworCQlpZiAocy0+c3RhdGUgPT0gX3N0YXJ0ZWQpCisJCQlzY2hlZHVsZSgpOworCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKKwkJcmVtb3ZlX3dhaXRfcXVldWUoJnMtPnJlbW92ZV9vaywgJl9fd2FpdCk7CisJCQorCQlzLT51c2JkZXYgPSBOVUxMOworCQlzLT5vdmVycnVucyA9IDA7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGFidXNiX2lkcyBbXSA9IHsKKwkvLyB7IFVTQl9ERVZJQ0UoMHgwNTQ3LCAweDIxMzEpIH0sCS8qIEFuMjEzMSBjaGlwLCBubyBib290IFJPTSAqLworCXsgVVNCX0RFVklDRSgweDA1NDcsIDB4OTk5OSkgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBkYWJ1c2JfaWRzKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGRhYnVzYl9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImRhYnVzYiIsCisJLnByb2JlID0JZGFidXNiX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JZGFidXNiX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JZGFidXNiX2lkcywKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IF9faW5pdCBkYWJ1c2JfaW5pdCAodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIHU7CisKKwkvKiBpbml0aWFsaXplIHN0cnVjdCAqLworCWZvciAodSA9IDA7IHUgPCBOUkRBQlVTQjsgdSsrKSB7CisJCXBkYWJ1c2JfdCBzID0gJmRhYnVzYlt1XTsKKwkJbWVtc2V0IChzLCAwLCBzaXplb2YgKGRhYnVzYl90KSk7CisJCWluaXRfTVVURVggKCZzLT5tdXRleCk7CisJCXMtPnVzYmRldiA9IE5VTEw7CisJCXMtPnRvdGFsX2J1ZmZlcl9zaXplID0gYnVmZmVyczsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCAoJnMtPndhaXQpOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkICgmcy0+cmVtb3ZlX29rKTsKKwkJc3Bpbl9sb2NrX2luaXQgKCZzLT5sb2NrKTsKKwkJSU5JVF9MSVNUX0hFQUQgKCZzLT5mcmVlX2J1ZmZfbGlzdCk7CisJCUlOSVRfTElTVF9IRUFEICgmcy0+cmVjX2J1ZmZfbGlzdCk7CisJfQorCisJLyogcmVnaXN0ZXIgbWlzYyBkZXZpY2UgKi8KKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmRhYnVzYl9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gb3V0OworCisJZGJnKCJkYWJ1c2JfaW5pdDogZHJpdmVyIHJlZ2lzdGVyZWQiKTsKKworCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKworb3V0OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkYWJ1c2JfY2xlYW51cCAodm9pZCkKK3sKKwlkYmcoImRhYnVzYl9jbGVhbnVwIik7CisKKwl1c2JfZGVyZWdpc3RlciAoJmRhYnVzYl9kcml2ZXIpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oYnVmZmVycywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MgKGJ1ZmZlcnMsICJOdW1iZXIgb2YgYnVmZmVycyAoZGVmYXVsdD0yNTYpIik7CisKK21vZHVsZV9pbml0IChkYWJ1c2JfaW5pdCk7Cittb2R1bGVfZXhpdCAoZGFidXNiX2NsZWFudXApOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL2RhYnVzYi5oIGIvZHJpdmVycy91c2IvbWVkaWEvZGFidXNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBiNjY2ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL2RhYnVzYi5oCkBAIC0wLDAgKzEsODUgQEAKKyNkZWZpbmUgX0JVTEtfREFUQV9MRU4gNjQKK3R5cGVkZWYgc3RydWN0Cit7CisJdW5zaWduZWQgY2hhciBkYXRhW19CVUxLX0RBVEFfTEVOXTsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcGlwZTsKK31idWxrX3RyYW5zZmVyX3QsKnBidWxrX3RyYW5zZmVyX3Q7CisKKyNkZWZpbmUgREFCVVNCX01JTk9SIDI0MAkJLyogc29tZSB1bmFzc2lnbmVkIFVTQiBtaW5vciAqLworI2RlZmluZSBEQUJVU0JfVkVSU0lPTiAweDEwMDAKKyNkZWZpbmUgSU9DVExfREFCX0JVTEsgICAgICAgICAgICAgIF9JT1dSKCdkJywgMHgzMCwgYnVsa190cmFuc2Zlcl90KQorI2RlZmluZSBJT0NUTF9EQUJfT1ZFUlJVTlMJICAgIF9JT1IoJ2QnLCAgMHgxNSwgaW50KQorI2RlZmluZSBJT0NUTF9EQUJfVkVSU0lPTiAgICAgICAgICAgX0lPUignZCcsIDB4M2YsIGludCkgCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3R5cGVkZWYgZW51bSB7IF9zdG9wcGVkPTAsIF9zdGFydGVkIH0gZHJpdmVyX3N0YXRlX3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJc3RydWN0IHNlbWFwaG9yZSBtdXRleDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcmVtb3ZlX29rOworCXNwaW5sb2NrX3QgbG9jazsKKwlhdG9taWNfdCBwZW5kaW5nX2lvOworCWRyaXZlcl9zdGF0ZV90IHN0YXRlOworCWludCByZW1vdmVfcGVuZGluZzsKKwlpbnQgZ290X21lbTsKKwlpbnQgdG90YWxfYnVmZmVyX3NpemU7CisJdW5zaWduZWQgaW50IG92ZXJydW5zOworCWludCByZWFkcHRyOworCWludCBvcGVuZWQ7CisJaW50IGRldm51bTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfYnVmZl9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgcmVjX2J1ZmZfbGlzdDsKK30gZGFidXNiX3QsKnBkYWJ1c2JfdDsKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisJcGRhYnVzYl90IHM7CisJc3RydWN0IHVyYiAqcHVyYjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJ1ZmZfbGlzdDsKK30gYnVmZl90LCpwYnVmZl90OworCit0eXBlZGVmIHN0cnVjdAoreworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Cit9IGJ1bGtfY29tcGxldGlvbl9jb250ZXh0X3QsICpwYnVsa19jb21wbGV0aW9uX2NvbnRleHRfdDsKKworCisjZGVmaW5lIF9EQUJVU0JfSUYgMgorI2RlZmluZSBfREFCVVNCX0lTT1BJUEUgMHgwOQorI2RlZmluZSBfSVNPUElQRVNJWkUJMTYzODQKKworI2RlZmluZSBfQlVMS19EQVRBX0xFTiA2NAorLy8gVmVuZG9yIHNwZWNpZmljIHJlcXVlc3QgY29kZSBmb3IgQW5jaG9yIFVwbG9hZC9Eb3dubG9hZAorLy8gVGhpcyBvbmUgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGNvcmUKKyNkZWZpbmUgQU5DSE9SX0xPQURfSU5URVJOQUwgIDB4QTAKKworLy8gRVotVVNCIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3Rlci4gIEJpdCAwIGNvbnRyb2xzIDgwNTEgcmVzZXQKKyNkZWZpbmUgQ1BVQ1NfUkVHICAgIDB4N0Y5MgorI2RlZmluZSBfVE9UQUxfQlVGRkVSUyAzODQKKworI2RlZmluZSBNQVhfSU5URUxfSEVYX1JFQ09SRF9MRU5HVEggMTYKKworI2lmbmRlZiBfQllURV9ERUZJTkVECisjZGVmaW5lIF9CWVRFX0RFRklORUQKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBCWVRFOworI2VuZGlmIC8vICFfQllURV9ERUZJTkVECisKKyNpZm5kZWYgX1dPUkRfREVGSU5FRAorI2RlZmluZSBfV09SRF9ERUZJTkVECit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFdPUkQ7CisjZW5kaWYgLy8gIV9XT1JEX0RFRklORUQKKwordHlwZWRlZiBzdHJ1Y3QgX0lOVEVMX0hFWF9SRUNPUkQKK3sKKyAgIEJZVEUgIExlbmd0aDsKKyAgIFdPUkQgIEFkZHJlc3M7CisgICBCWVRFICBUeXBlOworICAgQllURSAgRGF0YVtNQVhfSU5URUxfSEVYX1JFQ09SRF9MRU5HVEhdOworfSBJTlRFTF9IRVhfUkVDT1JELCAqUElOVEVMX0hFWF9SRUNPUkQ7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvZHNicjEwMC5jIGIvZHJpdmVycy91c2IvbWVkaWEvZHNicjEwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MDNmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9kc2JyMTAwLmMKQEAgLTAsMCArMSw0MjkgQEAKKy8qIEEgZHJpdmVyIGZvciB0aGUgRC1MaW5rIERTQi1SMTAwIFVTQiByYWRpby4gIFRoZSBSMTAwIHBsdWdzCisgaW50byBib3RoIHRoZSBVU0IgYW5kIGFuIGFuYWxvZyBhdWRpbyBpbnB1dCwgc28gdGhpcyB0aGluZworIG9ubHkgZGVhbHMgd2l0aCBpbml0aWFsaXNhdGlvbiBhbmQgZnJlcXVlbmN5IHNldHRpbmcsIHRoZQorIGF1ZGlvIGRhdGEgaGFzIHRvIGJlIGhhbmRsZWQgYnkgYSBzb3VuZCBkcml2ZXIuCisKKyBNYWpvciBpc3N1ZTogSSBjYW4ndCBmaW5kIG91dCB3aGVyZSB0aGUgZGV2aWNlIHJlcG9ydHMgdGhlIHNpZ25hbAorIHN0cmVuZ3RoLCBhbmQgaW5kZWVkIHRoZSB3aW5kb3dzIHNvZnR3YXJlIGFwcGVhcmFudGx5IGp1c3QgbG9va3MKKyBhdCB0aGUgc3RlcmVvIGluZGljYXRvciBhcyB3ZWxsLiAgU28sIHNjYW5uaW5nIHdpbGwgb25seSBmaW5kCisgc3RlcmVvIHN0YXRpb25zLiAgU2FkLCBidXQgSSBjYW4ndCBoZWxwIGl0LgorCisgQWxzbywgdGhlIHdpbmRvd3MgcHJvZ3JhbSBzZW5kcyBvb2RsZXMgb2YgbWVzc2FnZXMgb3ZlciB0byB0aGUKKyBkZXZpY2UsIGFuZCBJIGNvdWxkbid0IGZpZ3VyZSBvdXQgdGhlaXIgbWVhbmluZy4gIE15IHN1c3BpY2lvbgorIGlzIHRoYXQgdGhleSBkb24ndCBoYXZlIGFueTotKQorCisgWW91IG1pZ2h0IGZpbmQgc29tZSBpbnRlcmVzdGluZyBzdHVmZiBhYm91dCB0aGlzIG1vZHVsZSBhdAorIGh0dHA6Ly91bmltdXQuZnNrLnVuaS1oZWlkZWxiZXJnLmRlL3VuaW11dC9kZW1pL2RzYnIKKworIENvcHlyaWdodCAoYykgMjAwMCBNYXJrdXMgRGVtbGVpdG5lciA8bXNkZW1sZWlAY2wudW5pLWhlaWRlbGJlcmcuZGU+CisKKyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCisgSGlzdG9yeToKKworIFZlcnNpb24gMC40MDoKKyAgTWFya3VzOiBVcGRhdGVzIGZvciAyLjYueCBrZXJuZWxzLCBjb2RlIGxheW91dCBjaGFuZ2VzLCBuYW1lIHNhbml0aXppbmcKKworIFZlcnNpb24gMC4zMDoKKyAJTWFya3VzOiBVcGRhdGVzIGZvciAyLjUueCBrZXJuZWwgYW5kIG1vcmUgSVNPIGNvbXBsaWFudCBzb3VyY2UKKworIFZlcnNpb24gMC4yNToKKyAgICAgICAgUFNMIGFuZCBNYXJrdXM6IENsZWFudXAsIHJhZGlvIG5vdyBkb2Vzbid0IHN0b3Agb24gZGV2aWNlIGNsb3NlCisKKyBWZXJzaW9uIDAuMjQ6CisgCU1hcmt1czogSG9wZSBJIGdvdCB0aGVzZSBzaWxseSBWSURFT19UVU5FUl9MT1cgaXNzdWVzIGZpbmFsbHkKKwlyaWdodC4gIFNvbWUgbWlub3IgY2xlYW51cCwgaW1wcm92ZWQgc3RhbmRhbG9uZSBjb21waWxhdGlvbgorCisgVmVyc2lvbiAwLjIzOgorIAlNYXJrdXM6IFNpZ24gZXh0ZW5zaW9uIGJ1ZyBmaXhlZCBieSBkZWNsYXJpbmcgdHJhbnNmZXJfYnVmZmVyIHVuc2lnbmVkCisKKyBWZXJzaW9uIDAuMjI6CisgCU1hcmt1czogU29tZSAoYnJvd24gYmFnKSBjbGVhbnVwIGluIHdoYXQgVklESU9DU1RVTkVSIHJldHVybnMsIAorCXRoYW5rcyB0byBNaWtlIENveCBmb3IgcG9pbnRpbmcgdGhlIHByb2JsZW0gb3V0LgorCisgVmVyc2lvbiAwLjIxOgorIAlNYXJrdXM6IE1pbm9yIGNsZWFudXAsIHdhcm5pbmdzIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLCBsYW1lIGF0dGVtcHQKKwl0byBhZGhlcmUgdG8gRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZQorCisgVmVyc2lvbiAwLjI6IAorIAlCcmFkIEhhcmRzIDxicmFkaEBkeW5hbWl0ZS5jb20uYXU+OiBGaXhlcyB0byBtYWtlIGl0IHdvcmsgYXMgbm9uLW1vZHVsZQorCU1hcmt1czogQ29weXJpZ2h0IGNsYXJpZmljYXRpb24KKworIFZlcnNpb24gMC4wMTogTWFya3VzOiBpbml0aWFsIHJlbGVhc2UKKworKi8KKworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuNDAiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIk1hcmt1cyBEZW1sZWl0bmVyIDxtc2RlbWxlaUB0dWNhbmEuaGFydmFyZC5lZHU+IgorI2RlZmluZSBEUklWRVJfREVTQyAiRC1MaW5rIERTQi1SMTAwIFVTQiBGTSByYWRpbyBkcml2ZXIiCisKKyNkZWZpbmUgRFNCMTAwX1ZFTkRPUiAweDA0YjQKKyNkZWZpbmUgRFNCMTAwX1BST0RVQ1QgMHgxMDAyCisKKy8qIENvbW1hbmRzIHRoZSBkZXZpY2UgYXBwZWFycyB0byB1bmRlcnN0YW5kICovCisjZGVmaW5lIERTQjEwMF9UVU5FIDEKKyNkZWZpbmUgRFNCMTAwX09OT0ZGIDIKKworI2RlZmluZSBUQl9MRU4gMTYKKworLyogRnJlcXVlbmN5IGxpbWl0cyBpbiBNSHogLS0gdGhlc2UgYXJlIEV1cm9wZWFuIHZhbHVlcy4gIEZvciBKYXBhbmVzZQorZGV2aWNlcywgdGhhdCB3b3VsZCBiZSA3NiBhbmQgOTEuICAqLworI2RlZmluZSBGUkVRX01JTiAgODcuNQorI2RlZmluZSBGUkVRX01BWCAxMDguMAorI2RlZmluZSBGUkVRX01VTCAxNjAwMAorCisKK3N0YXRpYyBpbnQgdXNiX2RzYnIxMDBfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgdm9pZCB1c2JfZHNicjEwMF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKK3N0YXRpYyBpbnQgdXNiX2RzYnIxMDBfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyBpbnQgdXNiX2RzYnIxMDBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IHVzYl9kc2JyMTAwX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKKworc3RhdGljIGludCByYWRpb19uciA9IC0xOworbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOworCisvKiBEYXRhIGZvciBvbmUgKHBoeXNpY2FsKSBkZXZpY2UgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvZGV2OworCXVuc2lnbmVkIGNoYXIgdHJhbnNmZXJfYnVmZmVyW1RCX0xFTl07CisJaW50IGN1cmZyZXE7CisJaW50IHN0ZXJlbzsKKwlpbnQgdXNlcnM7CisJaW50IHJlbW92ZWQ7Cit9IGRzYnIxMDBfZGV2aWNlOworCisKKy8qIEZpbGUgc3lzdGVtIGludGVyZmFjZSAqLworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiX2RzYnIxMDBfZm9wcyA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkub3BlbiA9CQl1c2JfZHNicjEwMF9vcGVuLAorCS5yZWxlYXNlID0gICAgIAl1c2JfZHNicjEwMF9jbG9zZSwKKwkuaW9jdGwgPSAgICAgICAgdXNiX2RzYnIxMDBfaW9jdGwsCisJLmxsc2VlayA9ICAgICAgIG5vX2xsc2VlaywKK307CisKKy8qIFY0TCBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGRzYnIxMDBfdmlkZW9kZXZfdGVtcGxhdGU9Cit7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJIkQtTGluayBEU0ItUiAxMDAiLAorCS50eXBlID0JCVZJRF9UWVBFX1RVTkVSLAorCS5oYXJkd2FyZSA9CVZJRF9IQVJEV0FSRV9BWlRFQ0gsCisJLmZvcHMgPSAgICAgICAgICZ1c2JfZHNicjEwMF9mb3BzLAorCS5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX2RzYnIxMDBfZGV2aWNlX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShEU0IxMDBfVkVORE9SLCBEU0IxMDBfUFJPRFVDVCkgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCB1c2JfZHNicjEwMF9kZXZpY2VfdGFibGUpOworCisvKiBVU0Igc3Vic3lzdGVtIGludGVyZmFjZSAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9kc2JyMTAwX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiZHNicjEwMCIsCisJLnByb2JlID0JdXNiX2RzYnIxMDBfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2JfZHNicjEwMF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CXVzYl9kc2JyMTAwX2RldmljZV90YWJsZSwKK307CisKKy8qIExvdy1sZXZlbCBkZXZpY2UgaW50ZXJmYWNlIGJlZ2lucyBoZXJlICovCisKKy8qIHN3aXRjaCBvbiByYWRpbyAqLworc3RhdGljIGludCBkc2JyMTAwX3N0YXJ0KGRzYnIxMDBfZGV2aWNlICpyYWRpbykKK3sKKwlpZiAodXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX1NUQVRVUywgCisJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKKwkJCTB4MDAsIDB4QzcsIHJhZGlvLT50cmFuc2Zlcl9idWZmZXIsIDgsIDMwMCk8MCB8fAorCXVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUocmFkaW8tPnVzYmRldiwgMCksCisJCQlEU0IxMDBfT05PRkYsIAorCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCisJCQkweDAxLCAweDAwLCByYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApPDApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gKHJhZGlvLT50cmFuc2Zlcl9idWZmZXIpWzBdOworfQorCisKKy8qIHN3aXRjaCBvZmYgcmFkaW8gKi8KK3N0YXRpYyBpbnQgZHNicjEwMF9zdG9wKGRzYnIxMDBfZGV2aWNlICpyYWRpbykKK3sKKwlpZiAodXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX1NUQVRVUywgCisJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKKwkJCTB4MTYsIDB4MUMsIHJhZGlvLT50cmFuc2Zlcl9idWZmZXIsIDgsIDMwMCk8MCB8fAorCXVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUocmFkaW8tPnVzYmRldiwgMCksCisJCQlEU0IxMDBfT05PRkYsIAorCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCisJCQkweDAwLCAweDAwLCByYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApPDApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gKHJhZGlvLT50cmFuc2Zlcl9idWZmZXIpWzBdOworfQorCisvKiBzZXQgYSBmcmVxdWVuY3ksIGZyZXEgaXMgZGVmaW5lZCBieSB2NGwncyBUVU5FUl9MT1csIGkuZS4gMS8xNnRoIGtIeiAqLworc3RhdGljIGludCBkc2JyMTAwX3NldGZyZXEoZHNicjEwMF9kZXZpY2UgKnJhZGlvLCBpbnQgZnJlcSkKK3sKKwlmcmVxID0gKGZyZXEvMTYqODApLzEwMDArODU2OworCWlmICh1c2JfY29udHJvbF9tc2cocmFkaW8tPnVzYmRldiwgdXNiX3JjdmN0cmxwaXBlKHJhZGlvLT51c2JkZXYsIDApLAorCQkJRFNCMTAwX1RVTkUsIAorCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCisJCQkoZnJlcT4+OCkmMHgwMGZmLCBmcmVxJjB4ZmYsIAorCQkJcmFkaW8tPnRyYW5zZmVyX2J1ZmZlciwgOCwgMzAwKTwwIHx8CisJICAgdXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKKwkJIAlVU0JfUkVRX0dFVF9TVEFUVVMsIAorCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCisJCQkweDk2LCAweEI3LCByYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApPDAgfHwKKwl1c2JfY29udHJvbF9tc2cocmFkaW8tPnVzYmRldiwgdXNiX3JjdmN0cmxwaXBlKHJhZGlvLT51c2JkZXYsIDApLAorCQkJVVNCX1JFUV9HRVRfU1RBVFVTLCAKKwkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCAgVVNCX0RJUl9JTiwKKwkJCTB4MDAsIDB4MjQsIHJhZGlvLT50cmFuc2Zlcl9idWZmZXIsIDgsIDMwMCk8MCkgeworCQlyYWRpby0+c3RlcmVvID0gLTE7CisJCXJldHVybiAtMTsKKwl9CisJcmFkaW8tPnN0ZXJlbyA9ICEgKChyYWRpby0+dHJhbnNmZXJfYnVmZmVyKVswXSYweDAxKTsKKwlyZXR1cm4gKHJhZGlvLT50cmFuc2Zlcl9idWZmZXIpWzBdOworfQorCisvKiByZXR1cm4gdGhlIGRldmljZSBzdGF0dXMuICBUaGlzIGlzLCBpbiBlZmZlY3QsIGp1c3Qgd2hldGhlciBpdAorc2VlcyBhIHN0ZXJlbyBzaWduYWwgb3Igbm90LiAgUGl0eS4gKi8KK3N0YXRpYyB2b2lkIGRzYnIxMDBfZ2V0c3RhdChkc2JyMTAwX2RldmljZSAqcmFkaW8pCit7CisJaWYgKHVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUocmFkaW8tPnVzYmRldiwgMCksCisJCVVTQl9SRVFfR0VUX1NUQVRVUywgCisJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX0lOLAorCQkweDAwICwgMHgyNCwgcmFkaW8tPnRyYW5zZmVyX2J1ZmZlciwgOCwgMzAwKTwwKQorCQlyYWRpby0+c3RlcmVvID0gLTE7CisJZWxzZQorCQlyYWRpby0+c3RlcmVvID0gISAocmFkaW8tPnRyYW5zZmVyX2J1ZmZlclswXSYweDAxKTsKK30KKworCisvKiBVU0Igc3Vic3lzdGVtIGludGVyZmFjZSBiZWdpbnMgaGVyZSAqLworCisvKiBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIHByZXNlbnQgYW5kIHJlZ2lzdGVyIHdpdGggdjRsIGFuZAordXNiIGlmIGl0IGlzICovCitzdGF0aWMgaW50IHVzYl9kc2JyMTAwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCAKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJZHNicjEwMF9kZXZpY2UgKnJhZGlvOworCisJaWYgKCEocmFkaW8gPSBrbWFsbG9jKHNpemVvZihkc2JyMTAwX2RldmljZSksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCEocmFkaW8tPnZpZGVvZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCkpKSB7CisJCWtmcmVlKHJhZGlvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbWNweShyYWRpby0+dmlkZW9kZXYsICZkc2JyMTAwX3ZpZGVvZGV2X3RlbXBsYXRlLCAKKwkJc2l6ZW9mKGRzYnIxMDBfdmlkZW9kZXZfdGVtcGxhdGUpKTsKKwlyYWRpby0+cmVtb3ZlZCA9IDA7CisJcmFkaW8tPnVzZXJzID0gMDsKKwlyYWRpby0+dXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlyYWRpby0+Y3VyZnJlcSA9IEZSRVFfTUlOKkZSRVFfTVVMOworCXZpZGVvX3NldF9kcnZkYXRhKHJhZGlvLT52aWRlb2RldiwgcmFkaW8pOworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UocmFkaW8tPnZpZGVvZGV2LCBWRkxfVFlQRV9SQURJTywKKwkJcmFkaW9fbnIpKSB7CisJCXdhcm4oIkNvdWxkIG5vdCByZWdpc3RlciB2aWRlbyBkZXZpY2UiKTsKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2UocmFkaW8tPnZpZGVvZGV2KTsKKwkJa2ZyZWUocmFkaW8pOworCQlyZXR1cm4gLUVJTzsKKwl9CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCByYWRpbyk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGhhbmRsZSB1bnBsdWdnaW5nIG9mIHRoZSBkZXZpY2UsIHJlbGVhc2UgZGF0YSBzdHJ1Y3R1cmVzCitpZiBub3RoaW5nIGtlZXBzIHVzIGZyb20gZG9pbmcgaXQuICBJZiBzb21ldGhpbmcgaXMgc3RpbGwKK2tlZXBpbmcgdXMgYnVzeSwgdGhlIHJlbGVhc2UgY2FsbGJhY2sgb2YgdjRsIHdpbGwgdGFrZSBjYXJlCitvZiByZWxlYXNpbmcgaXQuICBzdHY2ODAuYyBkb2VzIG5vdCByZWxhc2UgaXRzIHByaXZhdGUKK2RhdGEsIHNvIEkgZG9uJ3QgZG8gdGhpcyBoZXJlIGVpdGhlci4gIENoZWNraW5nIG91dCB0aGUKK2NvZGUgSSdkIGV4cGVjdCBJIGJldHRlciBkaWQgdGhhdCwgYnV0IGlmIHRoZXJlJ3MgYSBtZW1vcnkKK2xlYWsgaGVyZSBpdCdzIHRpbnkgKH41MCBieXRlcyBwZXIgZGlzY29ubmVjdCkgKi8KK3N0YXRpYyB2b2lkIHVzYl9kc2JyMTAwX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJZHNicjEwMF9kZXZpY2UgKnJhZGlvID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCWlmIChyYWRpbykgeworCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShyYWRpby0+dmlkZW9kZXYpOworCQlyYWRpby0+dmlkZW9kZXYgPSBOVUxMOworCQlpZiAocmFkaW8tPnVzZXJzKSB7CisJCQlrZnJlZShyYWRpbyk7CisJCX0gZWxzZSB7CisJCQlyYWRpby0+cmVtb3ZlZCA9IDE7CisJCX0KKwl9Cit9CisKKworLyogVmlkZW8gZm9yIExpbnV4IGludGVyZmFjZSAqLworCitzdGF0aWMgaW50IHVzYl9kc2JyMTAwX2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlkc2JyMTAwX2RldmljZSAqcmFkaW89dmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisKKwlpZiAoIXJhZGlvKQorCQlyZXR1cm4gLUVJTzsKKworCXN3aXRjaChjbWQpIHsKKwkJY2FzZSBWSURJT0NHQ0FQOiB7CisJCQlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSAqdiA9IGFyZzsKKworCQkJbWVtc2V0KHYsIDAsIHNpemVvZigqdikpOworCQkJdi0+dHlwZSA9IFZJRF9UWVBFX1RVTkVSOworCQkJdi0+Y2hhbm5lbHMgPSAxOworCQkJdi0+YXVkaW9zID0gMTsKKwkJCXN0cmNweSh2LT5uYW1lLCAiRC1MaW5rIFItMTAwIFVTQiBGTSBSYWRpbyIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NHVFVORVI6IHsKKwkJCXN0cnVjdCB2aWRlb190dW5lciAqdiA9IGFyZzsKKworCQkJZHNicjEwMF9nZXRzdGF0KHJhZGlvKTsKKwkJCWlmKHYtPnR1bmVyKQkvKiBPbmx5IDEgdHVuZXIgKi8gCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl2LT5yYW5nZWxvdyA9IEZSRVFfTUlOKkZSRVFfTVVMOworCQkJdi0+cmFuZ2VoaWdoID0gRlJFUV9NQVgqRlJFUV9NVUw7CisJCQl2LT5mbGFncyA9IFZJREVPX1RVTkVSX0xPVzsKKwkJCXYtPm1vZGUgPSBWSURFT19NT0RFX0FVVE87CisJCQl2LT5zaWduYWwgPSByYWRpby0+c3RlcmVvKjB4NzAwMDsKKwkJCQkvKiBEb24ndCBrbm93IGhvdyB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoICovCisJCQl2LT5mbGFncyB8PSBWSURFT19UVU5FUl9TVEVSRU9fT04qcmFkaW8tPnN0ZXJlbzsKKwkJCXN0cmNweSh2LT5uYW1lLCAiRFNCIFItMTAwIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ1NUVU5FUjogeworCQkJc3RydWN0IHZpZGVvX3R1bmVyICp2ID0gYXJnOworCisJCQlpZih2LT50dW5lciE9MCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCS8qIE9ubHkgMSB0dW5lciBzbyBubyBzZXR0aW5nIG5lZWRlZCAhICovCisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ0dGUkVROiB7CisJCQlpbnQgKmZyZXEgPSBhcmc7CisKKwkJCWlmIChyYWRpby0+Y3VyZnJlcT09LTEpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkqZnJlcSA9IHJhZGlvLT5jdXJmcmVxOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NTRlJFUTogeworCQkJaW50ICpmcmVxID0gYXJnOworCisJCQlyYWRpby0+Y3VyZnJlcSA9ICpmcmVxOworCQkJaWYgKGRzYnIxMDBfc2V0ZnJlcShyYWRpbywgcmFkaW8tPmN1cmZyZXEpPT0tMSkKKwkJCQl3YXJuKCJTZXQgZnJlcXVlbmN5IGZhaWxlZCIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NHQVVESU86IHsKKwkJCXN0cnVjdCB2aWRlb19hdWRpbyAqdiA9IGFyZzsKKworCQkJbWVtc2V0KHYsIDAsIHNpemVvZigqdikpOworCQkJdi0+ZmxhZ3MgfD0gVklERU9fQVVESU9fTVVUQUJMRTsKKwkJCXYtPm1vZGUgPSBWSURFT19TT1VORF9TVEVSRU87CisJCQl2LT52b2x1bWUgPSAxOworCQkJdi0+c3RlcCA9IDE7CisJCQlzdHJjcHkodi0+bmFtZSwgIlJhZGlvIik7CisJCQlyZXR1cm4gMDsJCQkKKwkJfQorCQljYXNlIFZJRElPQ1NBVURJTzogeworCQkJc3RydWN0IHZpZGVvX2F1ZGlvICp2ID0gYXJnOworCisJCQlpZiAodi0+YXVkaW8pIAorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKHYtPmZsYWdzJlZJREVPX0FVRElPX01VVEUpIHsKKwkJCQlpZiAoZHNicjEwMF9zdG9wKHJhZGlvKT09LTEpCisJCQkJCXdhcm4oIlJhZGlvIGRpZCBub3QgcmVzcG9uZCBwcm9wZXJseSIpOworCQkJfQorCQkJZWxzZQorCQkJCWlmIChkc2JyMTAwX3N0YXJ0KHJhZGlvKT09LTEpCisJCQkJCXdhcm4oIlJhZGlvIGRpZCBub3QgcmVzcG9uZCBwcm9wZXJseSIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQorfQorCitzdGF0aWMgaW50IHVzYl9kc2JyMTAwX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLCB1c2JfZHNicjEwMF9kb19pb2N0bCk7Cit9CisKK3N0YXRpYyBpbnQgdXNiX2RzYnIxMDBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlkc2JyMTAwX2RldmljZSAqcmFkaW89dmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisKKwlyYWRpby0+dXNlcnMgPSAxOworCWlmIChkc2JyMTAwX3N0YXJ0KHJhZGlvKTwwKSB7CisJCXdhcm4oIlJhZGlvIGRpZCBub3Qgc3RhcnQgdXAgcHJvcGVybHkiKTsKKwkJcmFkaW8tPnVzZXJzID0gMDsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRzYnIxMDBfc2V0ZnJlcShyYWRpbywgcmFkaW8tPmN1cmZyZXEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzYl9kc2JyMTAwX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWRzYnIxMDBfZGV2aWNlICpyYWRpbz12aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKworCWlmICghcmFkaW8pCisJCXJldHVybiAtRU5PREVWOworCXJhZGlvLT51c2VycyA9IDA7CisJaWYgKHJhZGlvLT5yZW1vdmVkKSB7CisJCWtmcmVlKHJhZGlvKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGRzYnIxMDBfaW5pdCh2b2lkKQoreworCWludCByZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnVzYl9kc2JyMTAwX2RyaXZlcik7CisJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkc2JyMTAwX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmdXNiX2RzYnIxMDBfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQgKGRzYnIxMDBfaW5pdCk7Cittb2R1bGVfZXhpdCAoZHNicjEwMF9leGl0KTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvaWJtY2FtLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9pYm1jYW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTQxZmM3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvaWJtY2FtLmMKQEAgLTAsMCArMSwzOTMyIEBACisvKgorICogVVNCIElCTSBDLUl0IFZpZGVvIENhbWVyYSBkcml2ZXIKKyAqCisgKiBTdXBwb3J0cyBYaXJsaW5rIEMtSXQgVmlkZW8gQ2FtZXJhLCBJQk0gUEMgQ2FtZXJhLAorICogSUJNIE5ldENhbWVyYSBhbmQgVmVvIFN0aW5ncmF5LgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIGVhcmxpZXIgd29yayBvZjoKKyAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgSm9oYW5uZXMgRXJkZmVsdAorICogKEMpIENvcHlyaWdodCAxOTk5IFJhbmR5IER1bmxhcAorICoKKyAqIDUvMjQvMDAgUmVtb3ZlZCBvcHRpb25hbCAoYW5kIHVubmVjZXNzYXJ5KSBsb2NraW5nIG9mIHRoZSBkcml2ZXIgd2hpbGUKKyAqIHRoZSBkZXZpY2UgcmVtYWlucyBwbHVnZ2VkIGluLiBDb3JyZWN0ZWQgcmFjZSBjb25kaXRpb25zIGluIGlibWNhbV9vcGVuCisgKiBhbmQgaWJtY2FtX3Byb2JlKCkgcm91dGluZXMgdXNpbmcgdGhpcyBhcyBhIGd1aWRlbGluZToKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlICJ1c2J2aWRlby5oIgorCisjZGVmaW5lIElCTUNBTV9WRU5ET1JfSUQJMHgwNTQ1CisjZGVmaW5lIElCTUNBTV9QUk9EVUNUX0lECTB4ODA4MAorI2RlZmluZSBORVRDQU1fUFJPRFVDVF9JRAkweDgwMDIJLyogSUJNIE5ldENhbWVyYSwgY2xvc2UgdG8gbW9kZWwgMiAqLworI2RlZmluZSBWRU9fODAwQ19QUk9EVUNUX0lECTB4ODAwQwkvKiBWZW8gU3RpbmdyYXksIHJlcGFja2FnZWQgTW9kZWwgMiAqLworI2RlZmluZSBWRU9fODAwRF9QUk9EVUNUX0lECTB4ODAwRAkvKiBWZW8gU3RpbmdyYXksIHJlcGFja2FnZWQgTW9kZWwgNCAqLworCisjZGVmaW5lIE1BWF9JQk1DQU0JCTQJLyogSG93IG1hbnkgZGV2aWNlcyB3ZSBhbGxvdyB0byBjb25uZWN0ICovCisjZGVmaW5lIFVTRVNfSUJNQ0FNX1BVVFBJWEVMICAgIDAgICAgICAgLyogMD1GYXN0L29vcHMgMT1TbG93L3NlY3VyZSAqLworCisvKiBIZWFkZXIgc2lnbmF0dXJlcyAqLworCisvKiBNb2RlbCAxIGhlYWRlcjogMDAgRkYgMDAgeHggKi8KKyNkZWZpbmUgSERSU0lHX01PREVMMV8xMjh4OTYJMHgwNgkvKiBVIFkgViBZIC4uLiAqLworI2RlZmluZSBIRFJTSUdfTU9ERUwxXzE3NngxNDQJMHgwZQkvKiBVIFkgViBZIC4uLiAqLworI2RlZmluZSBIRFJTSUdfTU9ERUwxXzM1MngyODgJMHgwMAkvKiBWIFkgVSBZIC4uLiAqLworCisjZGVmaW5lCUlCTUNBTV9NT0RFTF8xCTEJLyogWFZQLTUwMSwgMyBpbnRlcmZhY2VzLCByZXYuIDAuMDIgKi8KKyNkZWZpbmUgSUJNQ0FNX01PREVMXzIJMgkvKiBLU1gtWDk5MDMsIDIgaW50ZXJmYWNlcywgcmV2LiAzLjBhICovCisjZGVmaW5lIElCTUNBTV9NT0RFTF8zCTMJLyogS1NYLVg5OTAyLCAyIGludGVyZmFjZXMsIHJldi4gMy4wMSAqLworI2RlZmluZQlJQk1DQU1fTU9ERUxfNAk0CS8qIElCTSBOZXRDYW1lcmEsIDA1NDUvODAwMi8zLjBhICovCisKKy8qIFZpZGVvIHNpemVzIHN1cHBvcnRlZCAqLworI2RlZmluZQlWSURFT1NJWkVfMTI4eDk2CVZJREVPU0laRSgxMjgsIDk2KQorI2RlZmluZQlWSURFT1NJWkVfMTc2eDE0NAlWSURFT1NJWkUoMTc2LDE0NCkKKyNkZWZpbmUJVklERU9TSVpFXzM1MngyODgJVklERU9TSVpFKDM1MiwyODgpCisjZGVmaW5lCVZJREVPU0laRV8zMjB4MjQwCVZJREVPU0laRSgzMjAsMjQwKQorI2RlZmluZQlWSURFT1NJWkVfMzUyeDI0MAlWSURFT1NJWkUoMzUyLDI0MCkKKyNkZWZpbmUJVklERU9TSVpFXzY0MHg0ODAJVklERU9TSVpFKDY0MCw0ODApCisjZGVmaW5lCVZJREVPU0laRV8xNjB4MTIwCVZJREVPU0laRSgxNjAsMTIwKQorCisvKiBWaWRlbyBzaXplcyBzdXBwb3J0ZWQgKi8KK2VudW0geworCVNJWkVfMTI4eDk2ID0gMCwKKwlTSVpFXzE2MHgxMjAsCisJU0laRV8xNzZ4MTQ0LAorCVNJWkVfMzIweDI0MCwKKwlTSVpFXzM1MngyNDAsCisJU0laRV8zNTJ4Mjg4LAorCVNJWkVfNjQweDQ4MCwKKwkvKiBBZGQvcmVtb3ZlL3JlYXJyYW5nZSBpdGVtcyBiZWZvcmUgdGhpcyBsaW5lICovCisJU0laRV9MYXN0SXRlbQorfTsKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGxpdmVzIGluIHV2ZC0+dXNlciBmaWVsZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWludCBpbml0aWFsaXplZDsJLyogSGFkIHdlIGFscmVhZHkgc2VudCBpbml0IHNlcXVlbmNlPyAqLworCWludCBjYW1lcmFfbW9kZWw7CS8qIFdoYXQgdHlwZSBvZiBJQk0gY2FtZXJhIHdlIGdvdD8gKi8KKwlpbnQgaGFzX2hkcjsKK30gaWJtY2FtX3Q7CisjZGVmaW5lCUlCTUNBTV9UKHV2ZCkJKChpYm1jYW1fdCAqKSgodXZkKS0+dXNlcl9kYXRhKSkKKworc3RhdGljIHN0cnVjdCB1c2J2aWRlbyAqY2FtczsKKworc3RhdGljIGludCBkZWJ1ZzsKKworc3RhdGljIGludCBmbGFnczsgLyogPSBGTEFHU19ESVNQTEFZX0hJTlRTIHwgRkxBR1NfT1ZFUkxBWV9TVEFUUzsgKi8KKworc3RhdGljIGNvbnN0IGludCBtaW5fY2FudmFzV2lkdGggID0gODsKK3N0YXRpYyBjb25zdCBpbnQgbWluX2NhbnZhc0hlaWdodCA9IDQ7CisKK3N0YXRpYyBpbnQgbGlnaHRpbmcgPSAxOyAvKiBNZWRpdW0gKi8KKworI2RlZmluZSBTSEFSUE5FU1NfTUlOCTAKKyNkZWZpbmUgU0hBUlBORVNTX01BWAk2CitzdGF0aWMgaW50IHNoYXJwbmVzcyA9IDQ7IC8qIExvdyBub2lzZSwgZ29vZCBkZXRhaWxzICovCisKKyNkZWZpbmUgRlJBTUVSQVRFX01JTgkwCisjZGVmaW5lIEZSQU1FUkFURV9NQVgJNgorc3RhdGljIGludCBmcmFtZXJhdGUgPSAtMTsKKworc3RhdGljIGludCBzaXplID0gU0laRV8zNTJ4Mjg4OworCisvKgorICogSGVyZSB3ZSBkZWZpbmUgc2V2ZXJhbCBpbml0aWFsaXphdGlvbiB2YXJpYWJsZXMuIFRoZXkgbWF5CisgKiBiZSB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgc2V0IGNvbG9yLCBodWUsIGJyaWdodG5lc3MgYW5kCisgKiBjb250cmFzdCB0byBkZXNpcmVkIHZhbHVlcy4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGluCisgKiBjYXNlIG9mIHdlYmNhbXMgKHdoaWNoIGhhdmUgbm8gY29udHJvbHMgYW5kIG5vIG9uLXNjcmVlbgorICogb3V0cHV0KSBhbmQgYWxzbyB3aGVuIGEgY2xpZW50IFY0TCBzb2Z0d2FyZSBpcyB1c2VkIHRoYXQKKyAqIGRvZXMgbm90IGhhdmUgc29tZSBvZiB0aG9zZSBjb250cm9scy4gSW4gYW55IGNhc2UgaXQncworICogZ29vZCB0byBoYXZlIHN0YXJ0dXAgdmFsdWVzIGFzIG9wdGlvbnMuCisgKgorICogVGhlc2UgdmFsdWVzIGFyZSBhbGwgaW4gWzAuLjI1NV0gcmFuZ2UuIFRoaXMgc2ltcGxpZmllcworICogb3BlcmF0aW9uLiBOb3RlIHRoYXQgYWN0dWFsIHZhbHVlcyBvZiBWNEwgdmFyaWFibGVzIG1heQorICogYmUgc2NhbGVkIHVwIChhcyBtdWNoIGFzIDw8IDgpLiBVc2VyIGNhbiBzZWUgdGhhdCBvbmx5CisgKiBvbiBvdmVybGF5IG91dHB1dCwgaG93ZXZlciwgb3IgdGhyb3VnaCBhIFY0TCBjbGllbnQuCisgKi8KK3N0YXRpYyBpbnQgaW5pdF9icmlnaHRuZXNzID0gMTI4Oworc3RhdGljIGludCBpbml0X2NvbnRyYXN0ID0gMTkyOworc3RhdGljIGludCBpbml0X2NvbG9yID0gMTI4Oworc3RhdGljIGludCBpbml0X2h1ZSA9IDEyODsKK3N0YXRpYyBpbnQgaHVlX2NvcnJlY3Rpb24gPSAxMjg7CisKKy8qIFNldHRpbmdzIGZvciBjYW1lcmEgbW9kZWwgMiAqLworc3RhdGljIGludCBpbml0X21vZGVsMl9yZzIgPSAtMTsKK3N0YXRpYyBpbnQgaW5pdF9tb2RlbDJfc2F0ID0gLTE7CitzdGF0aWMgaW50IGluaXRfbW9kZWwyX3liID0gLTE7CisKKy8qIDAxLjAxLjA4IC0gQWRkZWQgZm9yIFJDQSB2aWRlbyBpbiBzdXBwb3J0IC1MTyAqLworLyogU2V0dGluZ3MgZm9yIGNhbWVyYSBtb2RlbCAzICovCitzdGF0aWMgaW50IGluaXRfbW9kZWwzX2lucHV0ID0gMDsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsOiAwLTkgKGRlZmF1bHQ9MCkiKTsKK21vZHVsZV9wYXJhbShmbGFncywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZmxhZ3MsICJCaXRmaWVsZDogMD1WSURJT0NTWU5DLCAxPUIvVywgMj1zaG93IGhpbnRzLCAzPXNob3cgc3RhdHMsIDQ9dGVzdCBwYXR0ZXJuLCA1PXNlcGFyYXRlIGZyYW1lcywgNj1jbGVhbiBmcmFtZXMiKTsKK21vZHVsZV9wYXJhbShmcmFtZXJhdGUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGZyYW1lcmF0ZSwgIkZyYW1lcmF0ZSBzZXR0aW5nOiAwPXNsb3dlc3QsIDY9ZmFzdGVzdCAoZGVmYXVsdD0yKSIpOworbW9kdWxlX3BhcmFtKGxpZ2h0aW5nLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhsaWdodGluZywgIlBob3Rvc2Vuc2l0aXZpdHk6IDA9YnJpZ2h0LCAxPW1lZGl1bSAoZGVmYXVsdCksIDI9bG93IGxpZ2h0Iik7Cittb2R1bGVfcGFyYW0oc2hhcnBuZXNzLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhzaGFycG5lc3MsICJNb2RlbDEgbm9pc2UgcmVkdWN0aW9uOiAwPXNtb290aCwgNj1zaGFycCAoZGVmYXVsdD00KSIpOworbW9kdWxlX3BhcmFtKHNpemUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNpemUsICJJbWFnZSBzaXplOiAwPTEyOHg5NiAxPTE2MHgxMjAgMj0xNzZ4MTQ0IDM9MzIweDI0MCA0PTM1MngyNDAgNT0zNTJ4Mjg4IDY9NjQweDQ4MCAgKGRlZmF1bHQ9NSkiKTsKK21vZHVsZV9wYXJhbShpbml0X2JyaWdodG5lc3MsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGluaXRfYnJpZ2h0bmVzcywgIkJyaWdodG5lc3MgcHJlY29uZmlndXJhdGlvbjogMC0yNTUgKGRlZmF1bHQ9MTI4KSIpOworbW9kdWxlX3BhcmFtKGluaXRfY29udHJhc3QsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGluaXRfY29udHJhc3QsICJDb250cmFzdCBwcmVjb25maWd1cmF0aW9uOiAwLTI1NSAoZGVmYXVsdD0xOTIpIik7Cittb2R1bGVfcGFyYW0oaW5pdF9jb2xvciwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5pdF9jb2xvciwgIkNvbG9yIHByZWNvbmZpZ3VyYXRpb246IDAtMjU1IChkZWZhdWx0PTEyOCkiKTsKK21vZHVsZV9wYXJhbShpbml0X2h1ZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5pdF9odWUsICJIdWUgcHJlY29uZmlndXJhdGlvbjogMC0yNTUgKGRlZmF1bHQ9MTI4KSIpOworbW9kdWxlX3BhcmFtKGh1ZV9jb3JyZWN0aW9uLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhodWVfY29ycmVjdGlvbiwgIllVViBjb2xvcnNwYWNlIHJlZ3VsYXRpb246IDAtMjU1IChkZWZhdWx0PTEyOCkiKTsKKworbW9kdWxlX3BhcmFtKGluaXRfbW9kZWwyX3JnMiwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5pdF9tb2RlbDJfcmcyLCAiTW9kZWwyIHByZWNvbmZpZ3VyYXRpb246IDAtMjU1IChkZWZhdWx0PTQ3KSIpOworbW9kdWxlX3BhcmFtKGluaXRfbW9kZWwyX3NhdCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5pdF9tb2RlbDJfc2F0LCAiTW9kZWwyIHByZWNvbmZpZ3VyYXRpb246IDAtMjU1IChkZWZhdWx0PTUyKSIpOworbW9kdWxlX3BhcmFtKGluaXRfbW9kZWwyX3liLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbml0X21vZGVsMl95YiwgIk1vZGVsMiBwcmVjb25maWd1cmF0aW9uOiAwLTI1NSAoZGVmYXVsdD0xNjApIik7CisKKy8qIDAxLjAxLjA4IC0gQWRkZWQgZm9yIFJDQSB2aWRlbyBpbiBzdXBwb3J0IC1MTyAqLworbW9kdWxlX3BhcmFtKGluaXRfbW9kZWwzX2lucHV0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbml0X21vZGVsM19pbnB1dCwgIk1vZGVsMyBpbnB1dDogMD1DQ0QgMT1SQ0EiKTsKKworTU9EVUxFX0FVVEhPUiAoIkRtaXRyaSIpOworTU9EVUxFX0RFU0NSSVBUSU9OICgiSUJNL1hpcmxpbmsgQy1pdCBVU0IgQ2FtZXJhIERyaXZlciBmb3IgTGludXggKGMpIDIwMDAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogU3RpbGwgbXlzdGVyaW91cyBpMmMgY29tbWFuZHMgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCB1bmtub3duXzg4ID0gMHgwMDg4Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHVua25vd25fODkgPSAweDAwODk7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgYnJpZ2h0XzN4WzNdID0geyAweDAwMzEsIDB4MDAzMiwgMHgwMDMzIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgY29udHJhc3RfMTQgPSAweDAwMTQ7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbGlnaHRfMjcgPSAweDAwMjc7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgc2hhcnBfMTMgPSAweDAwMTM7CisKKy8qIGkyYyBjb21tYW5kcyBmb3IgTW9kZWwgMiBjYW1lcmFzICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbW9kMl9icmlnaHRuZXNzID0gMHgwMDFhOwkJLyogJDViIC4uICRlZTsgZGVmYXVsdD0kNWEgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBtb2QyX3NldF9mcmFtZXJhdGUgPSAweDAwMWM7CS8qIDAgKGZhc3QpLi4gJDFGIChzbG93KSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG1vZDJfY29sb3JfYmFsYW5jZV9yZzIgPSAweDAwMWU7CS8qIDAgKHJlZCkgLi4gJDdGIChncmVlbikgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBtb2QyX3NhdHVyYXRpb24gPSAweDAwMjA7CQkvKiAwIChiL3cpIC0gJDdGIChmdWxsIGNvbG9yKSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG1vZDJfY29sb3JfYmFsYW5jZV95YiA9IDB4MDAyMjsJLyogMC4uJDdGLCAkNTAgaXMgYWJvdXQgcmlnaHQgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBtb2QyX2h1ZSA9IDB4MDAyNDsJCQkvKiAwLi4kN0YsICQ3MCBpcyBhYm91dCByaWdodCAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG1vZDJfc2Vuc2l0aXZpdHkgPSAweDAwMjg7CQkvKiAwIChtaW4pIC4uICQxRiAobWF4KSAqLworCitzdHJ1Y3Qgc3RydWN0X2luaXREYXRhIHsKKwl1bnNpZ25lZCBjaGFyIHJlcTsKKwl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKKwl1bnNpZ25lZCBzaG9ydCBpbmRleDsKK307CisKKy8qCisgKiBpYm1jYW1fc2l6ZV90b192aWRlb3NpemUoKQorICoKKyAqIFRoaXMgcHJvY2VkdXJlIGNvbnZlcnRzIG1vZHVsZSBvcHRpb24gJ3NpemUnIGludG8gdGhlIGFjdHVhbAorICogdmlkZW9zaXplX3QgdGhhdCBkZWZpbmVzIHRoZSBpbWFnZSBzaXplIGluIHBpeGVscy4gV2UgbmVlZAorICogc2ltcGxpZmllZCAnc2l6ZScgYmVjYXVzZSB1c2VyIHdhbnRzIGEgc2ltcGxlIGVudW1lcmF0ZWQgbGlzdAorICogb2YgY2hvaWNlcywgbm90IGFuIGluZmluaXRlIHNldCBvZiBwb3NzaWJpbGl0aWVzLgorICovCitzdGF0aWMgdmlkZW9zaXplX3QgaWJtY2FtX3NpemVfdG9fdmlkZW9zaXplKGludCBzaXplKQoreworCXZpZGVvc2l6ZV90IHZzID0gVklERU9TSVpFXzM1MngyODg7CisJUkVTVFJJQ1RfVE9fUkFOR0Uoc2l6ZSwgMCwgKFNJWkVfTGFzdEl0ZW0tMSkpOworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgU0laRV8xMjh4OTY6CisJCXZzID0gVklERU9TSVpFXzEyOHg5NjsKKwkJYnJlYWs7CisJY2FzZSBTSVpFXzE2MHgxMjA6CisJCXZzID0gVklERU9TSVpFXzE2MHgxMjA7CisJCWJyZWFrOworCWNhc2UgU0laRV8xNzZ4MTQ0OgorCQl2cyA9IFZJREVPU0laRV8xNzZ4MTQ0OworCQlicmVhazsKKwljYXNlIFNJWkVfMzIweDI0MDoKKwkJdnMgPSBWSURFT1NJWkVfMzIweDI0MDsKKwkJYnJlYWs7CisJY2FzZSBTSVpFXzM1MngyNDA6CisJCXZzID0gVklERU9TSVpFXzM1MngyNDA7CisJCWJyZWFrOworCWNhc2UgU0laRV8zNTJ4Mjg4OgorCQl2cyA9IFZJREVPU0laRV8zNTJ4Mjg4OworCQlicmVhazsKKwljYXNlIFNJWkVfNjQweDQ4MDoKKwkJdnMgPSBWSURFT1NJWkVfNjQweDQ4MDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyKCJzaXplPSVkLiBpcyBub3QgdmFsaWQiLCBzaXplKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiB2czsKK30KKworLyoKKyAqIGlibWNhbV9maW5kX2hlYWRlcigpCisgKgorICogTG9jYXRlIG9uZSBvZiBzdXBwb3J0ZWQgaGVhZGVyIG1hcmtlcnMgaW4gdGhlIHF1ZXVlLgorICogT25jZSBmb3VuZCwgcmVtb3ZlIGFsbCBwcmVjZWRpbmcgYnl0ZXMgQU5EIHRoZSBtYXJrZXIgKDQgYnl0ZXMpCisgKiBmcm9tIHRoZSBkYXRhIHB1bXAgcXVldWUuIFdoYXRldmVyIGZvbGxvd3MgbXVzdCBiZSB2aWRlbyBsaW5lcy4KKyAqCisgKiBIaXN0b3J5OgorICogMS8yMS8wMCAgQ3JlYXRlZC4KKyAqLworc3RhdGljIGVudW0gUGFyc2VTdGF0ZSBpYm1jYW1fZmluZF9oZWFkZXIoc3RydWN0IHV2ZCAqdXZkKSAvKiBGSVhNRTogQWRkIGZyYW1lIGhlcmUgKi8KK3sKKwlzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lOworCWlibWNhbV90ICppY2FtOworCisJaWYgKCh1dmQtPmN1cmZyYW1lKSA8IDAgfHwgKHV2ZC0+Y3VyZnJhbWUgPj0gVVNCVklERU9fTlVNRlJBTUVTKSkgeworCQllcnIoImlibWNhbV9maW5kX2hlYWRlcjogSWxsZWdhbCBmcmFtZSAlZC4iLCB1dmQtPmN1cmZyYW1lKTsKKwkJcmV0dXJuIHNjYW5fRW5kUGFyc2U7CisJfQorCWljYW0gPSBJQk1DQU1fVCh1dmQpOworCWFzc2VydChpY2FtICE9IE5VTEwpOworCWZyYW1lID0gJnV2ZC0+ZnJhbWVbdXZkLT5jdXJmcmFtZV07CisJaWNhbS0+aGFzX2hkciA9IDA7CisJc3dpdGNoIChpY2FtLT5jYW1lcmFfbW9kZWwpIHsKKwljYXNlIElCTUNBTV9NT0RFTF8xOgorCXsKKwkJY29uc3QgaW50IG1hcmtlcl9sZW4gPSA0OworCQl3aGlsZSAoUmluZ1F1ZXVlX0dldExlbmd0aCgmdXZkLT5kcCkgPj0gbWFya2VyX2xlbikgeworCQkJaWYgKChSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDApID09IDB4MDApICYmCisJCQkgICAgKFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMSkgPT0gMHhGRikgJiYKKwkJCSAgICAoUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAyKSA9PSAweDAwKSkKKwkJCXsKKyNpZiAwCQkJCS8qIFRoaXMgY29kZSBoZWxwcyB0byBkZXRlY3QgbmV3IGZyYW1lIG1hcmtlcnMgKi8KKwkJCQlpbmZvKCJIZWFkZXIgc2lnOiAwMCBGRiAwMCAlMDJYIiwgUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAzKSk7CisjZW5kaWYKKwkJCQlmcmFtZS0+aGVhZGVyID0gUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAzKTsKKwkJCQlpZiAoKGZyYW1lLT5oZWFkZXIgPT0gSERSU0lHX01PREVMMV8xMjh4OTYpIHx8CisJCQkJICAgIChmcmFtZS0+aGVhZGVyID09IEhEUlNJR19NT0RFTDFfMTc2eDE0NCkgfHwKKwkJCQkgICAgKGZyYW1lLT5oZWFkZXIgPT0gSERSU0lHX01PREVMMV8zNTJ4Mjg4KSkKKwkJCQl7CisjaWYgMAorCQkJCQlpbmZvKCJIZWFkZXIgZm91bmQuIik7CisjZW5kaWYKKwkJCQkJUklOR19RVUVVRV9ERVFVRVVFX0JZVEVTKCZ1dmQtPmRwLCBtYXJrZXJfbGVuKTsKKwkJCQkJaWNhbS0+aGFzX2hkciA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCS8qIElmIHdlIGFyZSBzdGlsbCBoZXJlIHRoZW4gdGhpcyBkb2Vzbid0IGxvb2sgbGlrZSBhIGhlYWRlciAqLworCQkJUklOR19RVUVVRV9ERVFVRVVFX0JZVEVTKCZ1dmQtPmRwLCAxKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBJQk1DQU1fTU9ERUxfMjoKK2Nhc2UgSUJNQ0FNX01PREVMXzQ6CisJeworCQlpbnQgbWFya2VyX2xlbiA9IDA7CisJCXN3aXRjaCAodXZkLT52aWRlb3NpemUpIHsKKwkJY2FzZSBWSURFT1NJWkVfMTc2eDE0NDoKKwkJCW1hcmtlcl9sZW4gPSAxMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbWFya2VyX2xlbiA9IDI7CisJCQlicmVhazsKKwkJfQorCQl3aGlsZSAoUmluZ1F1ZXVlX0dldExlbmd0aCgmdXZkLT5kcCkgPj0gbWFya2VyX2xlbikgeworCQkJaWYgKChSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDApID09IDB4MDApICYmCisJCQkgICAgKFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMSkgPT0gMHhGRikpCisJCQl7CisjaWYgMAorCQkJCWluZm8oIkhlYWRlciBmb3VuZC4iKTsKKyNlbmRpZgorCQkJCVJJTkdfUVVFVUVfREVRVUVVRV9CWVRFUygmdXZkLT5kcCwgbWFya2VyX2xlbik7CisJCQkJaWNhbS0+aGFzX2hkciA9IDE7CisJCQkJZnJhbWUtPmhlYWRlciA9IEhEUlNJR19NT0RFTDFfMTc2eDE0NDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIElmIHdlIGFyZSBzdGlsbCBoZXJlIHRoZW4gdGhpcyBkb2Vzbid0IGxvb2sgbGlrZSBhIGhlYWRlciAqLworCQkJUklOR19RVUVVRV9ERVFVRVVFX0JZVEVTKCZ1dmQtPmRwLCAxKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBJQk1DQU1fTU9ERUxfMzoKKwl7CS8qCisJCSAqIEhlYWRlcnM6IChvbmUgcHJlY2VkZXMgZXZlcnkgZnJhbWUpLiBuYz1ubyBjb21wcmVzc2lvbiwKKwkJICogYnE9YmVzdCBxdWFsaXR5IGJmPWJlc3QgZnJhbWUgcmF0ZS4KKwkJICoKKwkJICogMTc2eDE0NDogMDAgRkYgMDIgeyAwQT1uYyBDQT1icSBFQT1iZiB9CisJCSAqIDMyMHgyNDA6IDAwIEZGIDAyIHsgMDg9bmMgMjg9YnEgNjg9YmYgfQorCQkgKiA2NDB4NDgwOiAwMCBGRiAwMyB7IDA4PW5jIDI4PWJxIDY4PWJmIH0KKwkJICoKKwkJICogQnl0ZXMgJzAwIEZGJyBzZWVtIHRvIGluZGljYXRlIGhlYWRlci4gT3RoZXIgdHdvIGJ5dGVzCisJCSAqIGVuY29kZSB0aGUgZnJhbWUgdHlwZS4gVGhpcyBpcyBhIHNldCBvZiBiaXQgZmllbGRzIHRoYXQKKwkJICogZW5jb2RlIGltYWdlIHNpemUsIGNvbXByZXNzaW9uIHR5cGUgZXRjLiBUaGVzZSBmaWVsZHMKKwkJICogZG8gTk9UIGNvbnRhaW4gZnJhbWUgbnVtYmVyIGJlY2F1c2UgYWxsIGZyYW1lcyBjYXJyeQorCQkgKiB0aGUgc2FtZSBoZWFkZXIuCisJCSAqLworCQljb25zdCBpbnQgbWFya2VyX2xlbiA9IDQ7CisJCXdoaWxlIChSaW5nUXVldWVfR2V0TGVuZ3RoKCZ1dmQtPmRwKSA+PSBtYXJrZXJfbGVuKSB7CisJCQlpZiAoKFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMCkgPT0gMHgwMCkgJiYKKwkJCSAgICAoUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAxKSA9PSAweEZGKSAmJgorCQkJICAgIChSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDIpICE9IDB4RkYpKQorCQkJeworCQkJCS8qCisJCQkJICogQ29tYmluZSAyIGJ5dGVzIG9mIGZyYW1lIHR5cGUgaW50byBvbmUKKwkJCQkgKiBlYXN5IHRvIHVzZSB2YWx1ZQorCQkJCSAqLworCQkJCXVuc2lnbmVkIGxvbmcgYnl0ZTMsIGJ5dGU0OworCisJCQkJYnl0ZTMgPSBSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDIpOworCQkJCWJ5dGU0ID0gUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAzKTsKKwkJCQlmcmFtZS0+aGVhZGVyID0gKGJ5dGUzIDw8IDgpIHwgYnl0ZTQ7CisjaWYgMAorCQkJCWluZm8oIkhlYWRlciBmb3VuZC4iKTsKKyNlbmRpZgorCQkJCVJJTkdfUVVFVUVfREVRVUVVRV9CWVRFUygmdXZkLT5kcCwgbWFya2VyX2xlbik7CisJCQkJaWNhbS0+aGFzX2hkciA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBJZiB3ZSBhcmUgc3RpbGwgaGVyZSB0aGVuIHRoaXMgZG9lc24ndCBsb29rIGxpa2UgYSBoZWFkZXIgKi8KKwkJCVJJTkdfUVVFVUVfREVRVUVVRV9CWVRFUygmdXZkLT5kcCwgMSk7CisJCX0KKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlpZiAoIWljYW0tPmhhc19oZHIpIHsKKwkJaWYgKHV2ZC0+ZGVidWcgPiAyKQorCQkJaW5mbygiU2tpcHBpbmcgZnJhbWUsIG5vIGhlYWRlciIpOworCQlyZXR1cm4gc2Nhbl9FbmRQYXJzZTsKKwl9CisKKwkvKiBIZWFkZXIgZm91bmQgKi8KKwlpY2FtLT5oYXNfaGRyID0gMTsKKwl1dmQtPnN0YXRzLmhlYWRlcl9jb3VudCsrOworCWZyYW1lLT5zY2Fuc3RhdGUgPSBTY2FuU3RhdGVfTGluZXM7CisJZnJhbWUtPmN1cmxpbmUgPSAwOworCisJaWYgKGZsYWdzICYgRkxBR1NfRk9SQ0VfVEVTVFBBVFRFUk4pIHsKKwkJdXNidmlkZW9fVGVzdFBhdHRlcm4odXZkLCAxLCAxKTsKKwkJcmV0dXJuIHNjYW5fTmV4dEZyYW1lOworCX0KKwlyZXR1cm4gc2Nhbl9Db250aW51ZTsKK30KKworLyoKKyAqIGlibWNhbV9wYXJzZV9saW5lcygpCisgKgorICogUGFyc2Ugb25lIGxpbmUgKGludGVybGFjZWQpIGZyb20gdGhlIGJ1ZmZlciwgcHV0CisgKiBkZWNvZGVkIFJHQiB2YWx1ZSBpbnRvIHRoZSBjdXJyZW50IGZyYW1lIGJ1ZmZlcgorICogYW5kIGFkZCB0aGUgd3JpdHRlbiBudW1iZXIgb2YgYnl0ZXMgKFJHQikgdG8KKyAqIHRoZSAqcGNvcHlsZW4uCisgKgorICogSGlzdG9yeToKKyAqIDIxLUphbi0yMDAwIENyZWF0ZWQuCisgKiAxMi1PY3QtMjAwMCBSZXdvcmtlZCB0byByZWZsZWN0IGludGVybGFjZWQgbmF0dXJlIG9mIHRoZSBkYXRhLgorICovCitzdGF0aWMgZW51bSBQYXJzZVN0YXRlIGlibWNhbV9wYXJzZV9saW5lcygKKwlzdHJ1Y3QgdXZkICp1dmQsCisJc3RydWN0IHVzYnZpZGVvX2ZyYW1lICpmcmFtZSwKKwlsb25nICpwY29weWxlbikKK3sKKwl1bnNpZ25lZCBjaGFyICpmOworCWlibWNhbV90ICppY2FtOworCXVuc2lnbmVkIGludCBsZW4sIHNjYW5MZW5ndGgsIHNjYW5IZWlnaHQsIG9yZGVyX3V2LCBvcmRlcl95YzsKKwlpbnQgdjRsX2xpbmVzaXplOyAvKiBWNEwgbGluZSBvZmZzZXQgKi8KKwljb25zdCBpbnQgaHVlX2NvcnIgID0gKHV2ZC0+dnBpYy5odWUgLSAweDgwMDApID4+IDEwOwkvKiAtMzIuLiszMSAqLworCWNvbnN0IGludCBodWUyX2NvcnIgPSAoaHVlX2NvcnJlY3Rpb24gLSAxMjgpIC8gNDsJCS8qIC0zMi4uKzMxICovCisJY29uc3QgaW50IGNjbSA9IDEyODsgLyogQ29sb3IgY29ycmVjdGlvbiBtZWRpYW4gLSBzZWUgYmVsb3cgKi8KKwlpbnQgeSwgdSwgdiwgaSwgZnJhbWVfZG9uZT0wLCBjb2xvcl9jb3JyOworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGxpbmVCdWZmZXJbNjQwKjNdOworCXVuc2lnbmVkIGNvbnN0IGNoYXIgKmNocm9tYUxpbmUsICpsdW1hTGluZTsKKworCWFzc2VydCh1dmQgIT0gTlVMTCk7CisJYXNzZXJ0KGZyYW1lICE9IE5VTEwpOworCWljYW0gPSBJQk1DQU1fVCh1dmQpOworCWFzc2VydChpY2FtICE9IE5VTEwpOworCWNvbG9yX2NvcnIgPSAodXZkLT52cGljLmNvbG91ciAtIDB4ODAwMCkgPj4gODsgLyogLTEyOC4uKzEyNyA9IC1jY20uLisoY2NtLTEpKi8KKwlSRVNUUklDVF9UT19SQU5HRShjb2xvcl9jb3JyLCAtY2NtLCBjY20rMSk7CisKKwl2NGxfbGluZXNpemUgPSBWSURFT1NJWkVfWChmcmFtZS0+cmVxdWVzdCkgKiBWNExfQllURVNfUEVSX1BJWEVMOworCisJaWYgKElCTUNBTV9UKHV2ZCktPmNhbWVyYV9tb2RlbCA9PSBJQk1DQU1fTU9ERUxfNCkgeworCQkvKiBNb2RlbCA0IGZyYW1lIG1hcmtlcnMgZG8gbm90IGNhcnJ5IGltYWdlIHNpemUgaWRlbnRpZmljYXRpb24gKi8KKwkJc3dpdGNoICh1dmQtPnZpZGVvc2l6ZSkgeworCQljYXNlIFZJREVPU0laRV8xMjh4OTY6CisJCWNhc2UgVklERU9TSVpFXzE2MHgxMjA6CisJCWNhc2UgVklERU9TSVpFXzE3NngxNDQ6CisJCQlzY2FuTGVuZ3RoID0gVklERU9TSVpFX1godXZkLT52aWRlb3NpemUpOworCQkJc2NhbkhlaWdodCA9IFZJREVPU0laRV9ZKHV2ZC0+dmlkZW9zaXplKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZXJyKCJpYm1jYW1fcGFyc2VfbGluZXM6IFdyb25nIG1vZGUuIik7CisJCQlyZXR1cm4gc2Nhbl9PdXQ7CisJCX0KKwkJb3JkZXJfeWMgPSAxOwkvKiBvcmRlcl95YzogdHJ1ZT1ZYyBmYWxzZT1jWSAoJ2MnPWVpdGhlciBVIG9yIFYpICovCisJCW9yZGVyX3V2ID0gMTsJLyogQWx3YXlzIHRydWUgaW4gdGhpcyBhbGdvcml0aG0gKi8KKwl9IGVsc2UgeworCQlzd2l0Y2ggKGZyYW1lLT5oZWFkZXIpIHsKKwkJY2FzZSBIRFJTSUdfTU9ERUwxXzEyOHg5NjoKKwkJCXNjYW5MZW5ndGggPSAxMjg7CisJCQlzY2FuSGVpZ2h0ID0gOTY7CisJCQlvcmRlcl91diA9IDE7CS8qIFUgWSBWIFkgLi4uICovCisJCQlicmVhazsKKwkJY2FzZSBIRFJTSUdfTU9ERUwxXzE3NngxNDQ6CisJCQlzY2FuTGVuZ3RoID0gMTc2OworCQkJc2NhbkhlaWdodCA9IDE0NDsKKwkJCW9yZGVyX3V2ID0gMTsJLyogVSBZIFYgWSAuLi4gKi8KKwkJCWJyZWFrOworCQljYXNlIEhEUlNJR19NT0RFTDFfMzUyeDI4ODoKKwkJCXNjYW5MZW5ndGggPSAzNTI7CisJCQlzY2FuSGVpZ2h0ID0gMjg4OworCQkJb3JkZXJfdXYgPSAwOwkvKiBZIFYgWSBWIC4uLiAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnIoIlVua25vd24gaGVhZGVyIHNpZ25hdHVyZSAwMCBGRiAwMCAlMDJsWCIsIGZyYW1lLT5oZWFkZXIpOworCQkJcmV0dXJuIHNjYW5fTmV4dEZyYW1lOworCQl9CisJCS8qIG9yZGVyX3ljOiB0cnVlPVljIGZhbHNlPWNZICgnYyc9ZWl0aGVyIFUgb3IgVikgKi8KKwkJb3JkZXJfeWMgPSAoSUJNQ0FNX1QodXZkKS0+Y2FtZXJhX21vZGVsID09IElCTUNBTV9NT0RFTF8yKTsKKwl9CisKKwlsZW4gPSBzY2FuTGVuZ3RoICogMzsKKwlhc3NlcnQobGVuIDw9IHNpemVvZihsaW5lQnVmZmVyKSk7CisKKwkvKgorCSAqIExpbmVzIGFyZSBvcmdhbml6ZWQgdGhpcyB3YXk6CisJICoKKwkgKiBJNDIwOgorCSAqIH5+fn4KKwkgKiA8c2Nhbkxlbmd0aC0+CisJICogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKwkgKiB8LS0tLS1ZLS0tLS18LS0tVVZVVlVWLi4uVVZVVi0tLS0tfCBcCisJICogfC0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgIFwKKwkgKiB8PC0tIDE3NiAtLT58PC0tLS0tLSAxNzYqMiAtLS0tLS0+fCAgVG90YWwgNzIuIGxpbmVzIChpbnRlcmxhY2VkKQorCSAqIHwuLi4JICAgLi4uIHwgICAgICAgIC4uLiAgICAgICAgICB8ICAvCisJICogfDwtLSAzNTIgLS0+fDwtLS0tLS0gMzUyKjIgLS0tLS0tPnwgIFRvdGFsIDE0NC4gbGluZXMgKGludGVybGFjZWQpCisJICogfF9fX19fX19fX19ffF9fX19fX19fX19fX19fX19fX19fX3wgLworCSAqICBcICAgICAgICAgICBcCisJICogICBsdW1hTGluZSAgICBjaHJvbWFMaW5lCisJICovCisKKwkvKiBNYWtlIHN1cmUgdGhlcmUncyBlbm91Z2ggZGF0YSBmb3IgdGhlIGVudGlyZSBsaW5lICovCisJaWYgKFJpbmdRdWV1ZV9HZXRMZW5ndGgoJnV2ZC0+ZHApIDwgbGVuKQorCQlyZXR1cm4gc2Nhbl9PdXQ7CisKKwkvKiBTdWNrIG9uZSBsaW5lIG91dCBvZiB0aGUgcmluZyBxdWV1ZSAqLworCVJpbmdRdWV1ZV9EZXF1ZXVlKCZ1dmQtPmRwLCBsaW5lQnVmZmVyLCBsZW4pOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCBvdXIgd3JpdGluZyBpbnRvIG91dHB1dCBidWZmZXIKKwkgKiB3aWxsIG5vdCBleGNlZWQgdGhlIGJ1ZmZlci4gTWluZCB0aGF0IHdlIG1heSB3cml0ZQorCSAqIG5vdCBpbnRvIGN1cnJlbnQgb3V0cHV0IHNjYW5saW5lIGJ1dCBpbiBzZXZlcmFsIGFmdGVyCisJICogaXQgYXMgd2VsbCAoaWYgd2UgZW5sYXJnZSBpbWFnZSB2ZXJ0aWNhbGx5LikKKwkgKi8KKwlpZiAoKGZyYW1lLT5jdXJsaW5lICsgMikgPj0gVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpKQorCQlyZXR1cm4gc2Nhbl9OZXh0RnJhbWU7CisKKwkvKgorCSAqIE5vdyB3ZSBhcmUgc3VyZSB0aGF0IGVudGlyZSBsaW5lIChyZXByZXNlbnRpbmcgYWxsICdzY2FuTGVuZ3RoJworCSAqIHBpeGVscyBmcm9tIHRoZSBjYW1lcmEpIGlzIGF2YWlsYWJsZSBpbiB0aGUgYnVmZmVyLiBXZQorCSAqIHN0YXJ0IGNvcHlpbmcgdGhlIGxpbmUgbGVmdC1hbGlnbmVkIHRvIHRoZSBWNEwgYnVmZmVyLgorCSAqIElmIHRoZSBjYW1lcmEgbGluZSBpcyBzaG9ydGVyIHRoZW4gd2Ugc2hvdWxkIHBhZCB0aGUgVjRMCisJICogYnVmZmVyIHdpdGggc29tZXRoaW5nIChibGFjaykgdG8gY29tcGxldGUgdGhlIGxpbmUuCisJICovCisJYXNzZXJ0KGZyYW1lLT5kYXRhICE9IE5VTEwpOworCWYgPSBmcmFtZS0+ZGF0YSArICh2NGxfbGluZXNpemUgKiBmcmFtZS0+Y3VybGluZSk7CisKKwkvKgorCSAqIFRvIG9idGFpbiBjaHJvbWluYW5jZSBkYXRhIGZyb20gdGhlICdjaHJvbWFMaW5lJyB1c2UgdGhpczoKKwkgKiAgIHYgPSBjaHJvbWFMaW5lWzBdOyAvLyAwLTE6WzBdLCAyLTM6WzRdLCA0LTU6WzhdLi4uCisJICogICB1ID0gY2hyb21hTGluZVsyXTsgLy8gMC0xOlsyXSwgMi0zOls2XSwgNC01OlsxMF0uLi4KKwkgKgorCSAqIEluZGljZXMgbXVzdCBiZSBjYWxjdWxhdGVkIHRoaXMgd2F5OgorCSAqIHZfaW5kZXggPSAoaSA+PiAxKSA8PCAyOworCSAqIHVfaW5kZXggPSAoaSA+PiAxKSA8PCAyICsgMjsKKwkgKgorCSAqIHdoZXJlICdpJyBpcyB0aGUgY29sdW1uIG51bWJlciBbMC4uVklERU9TSVpFX1goZnJhbWUtPnJlcXVlc3QpLTFdCisJICovCisJbHVtYUxpbmUgPSBsaW5lQnVmZmVyOworCWNocm9tYUxpbmUgPSBsaW5lQnVmZmVyICsgc2Nhbkxlbmd0aDsKKwlmb3IgKGkgPSAwOyBpIDwgVklERU9TSVpFX1goZnJhbWUtPnJlcXVlc3QpOyBpKyspCisJeworCQl1bnNpZ25lZCBjaGFyIHJ2LCBndiwgYnY7CS8qIFJHQiBjb21wb25lbnRzICovCisKKwkJLyogQ2hlY2sgZm9yIHZhcmlvdXMgdmlzdWFsIGRlYnVnZ2luZyBoaW50cyAoY29sb3JpemVkIHBpeGVscykgKi8KKwkJaWYgKChmbGFncyAmIEZMQUdTX0RJU1BMQVlfSElOVFMpICYmIChpY2FtLT5oYXNfaGRyKSkgeworCQkJLyoKKwkJCSAqIFRoaXMgaXMgYmFkIGFuZCBzaG91bGQgbm90IGhhcHBlbi4gVGhpcyBtZWFucyB0aGF0CisJCQkgKiB3ZSBzb21laG93IG92ZXJzaG9vdCB0aGUgbGluZSBhbmQgZW5jb3VudGVyZWQgbmV3CisJCQkgKiBmcmFtZSEgT2J2aW91c2x5IG91ciBjYW1lcmEvVjRMIGZyYW1lIHNpemUgaXMgb3V0CisJCQkgKiBvZiB3aGFjay4gVGhpcyBjeWFuIGRvdCB3aWxsIGhlbHAgeW91IHRvIGZpZ3VyZQorCQkJICogb3V0IHdoZXJlIGV4YWN0bHkgdGhlIG5ldyBmcmFtZSBhcnJpdmVkLgorCQkJICovCisJCQlpZiAoaWNhbS0+aGFzX2hkciA9PSAxKSB7CisJCQkJYnYgPSAwOyAvKiBZZWxsb3cgbWFya2VyICovCisJCQkJZ3YgPSAweEZGOworCQkJCXJ2ID0gMHhGRjsKKwkJCX0gZWxzZSB7CisJCQkJYnYgPSAweEZGOyAvKiBDeWFuIG1hcmtlciAqLworCQkJCWd2ID0gMHhGRjsKKwkJCQlydiA9IDA7CisJCQl9CisJCQlpY2FtLT5oYXNfaGRyID0gMDsKKwkJCWdvdG8gbWFrZV9waXhlbDsKKwkJfQorCisJCS8qCisJCSAqIENoZWNrIGlmIHdlIGFyZSBzdGlsbCBpbiByYW5nZS4gV2UgbWF5IGJlIG91dCBvZiByYW5nZSBpZiBvdXIKKwkJICogVjRMIGNhbnZhcyBpcyB3aWRlciBvciB0YWxsZXIgdGhhbiB0aGUgY2FtZXJhICJuYXRpdmUiIGltYWdlLgorCQkgKiBUaGVuIHdlIHF1aWNrbHkgZmlsbCB0aGUgcmVtYWluZGVyIG9mIHRoZSBsaW5lIHdpdGggemVyb3MgdG8KKwkJICogbWFrZSBibGFjayBjb2xvciBhbmQgcXVpdCB0aGUgaG9yaXpvbnRhbCBzY2FubmluZyBsb29wLgorCQkgKi8KKwkJaWYgKCgoZnJhbWUtPmN1cmxpbmUgKyAyKSA+PSBzY2FuSGVpZ2h0KSB8fCAoaSA+PSBzY2FuTGVuZ3RoKSkgeworCQkJY29uc3QgaW50IGogPSBpICogVjRMX0JZVEVTX1BFUl9QSVhFTDsKKyNpZiBVU0VTX0lCTUNBTV9QVVRQSVhFTAorCQkJLyogUmVmcmVzaCAnZicgYmVjYXVzZSB3ZSBkb24ndCB1c2UgaXQgbXVjaCB3aXRoIFBVVFBJWEVMICovCisJCQlmID0gZnJhbWUtPmRhdGEgKyAodjRsX2xpbmVzaXplICogZnJhbWUtPmN1cmxpbmUpICsgajsKKyNlbmRpZgorCQkJbWVtc2V0KGYsIDAsIHY0bF9saW5lc2l6ZSAtIGopOworCQkJYnJlYWs7CisJCX0KKworCQl5ID0gbHVtYUxpbmVbaV07CisJCWlmIChmbGFncyAmIEZMQUdTX01PTk9DSFJPTUUpIC8qIFVzZSBtb25vY2hyb21lIGZvciBkZWJ1Z2dpbmcgKi8KKwkJCXJ2ID0gZ3YgPSBidiA9IHk7CisJCWVsc2UgeworCQkJaW50IG9mZl8wLCBvZmZfMjsKKworCQkJb2ZmXzAgPSAoaSA+PiAxKSA8PCAyOworCQkJb2ZmXzIgPSBvZmZfMCArIDI7CisKKwkJCWlmIChvcmRlcl95YykgeworCQkJCW9mZl8wKys7CisJCQkJb2ZmXzIrKzsKKwkJCX0KKwkJCWlmICghb3JkZXJfdXYpIHsKKwkJCQlvZmZfMCArPSAyOworCQkJCW9mZl8yIC09IDI7CisJCQl9CisJCQl1ID0gY2hyb21hTGluZVtvZmZfMF0gKyBodWVfY29ycjsKKwkJCXYgPSBjaHJvbWFMaW5lW29mZl8yXSArIGh1ZTJfY29ycjsKKworCQkJLyogQXBwbHkgY29sb3IgY29ycmVjdGlvbiAqLworCQkJaWYgKGNvbG9yX2NvcnIgIT0gMCkgeworCQkJCS8qIE1hZ25pZnkgdXAgdG8gMiB0aW1lcywgcmVkdWNlIGRvd24gdG8gemVybyBzYXR1cmF0aW9uICovCisJCQkJdSA9IDEyOCArICgoY2NtICsgY29sb3JfY29ycikgKiAodSAtIDEyOCkpIC8gY2NtOworCQkJCXYgPSAxMjggKyAoKGNjbSArIGNvbG9yX2NvcnIpICogKHYgLSAxMjgpKSAvIGNjbTsKKwkJCX0KKwkJCVlVVl9UT19SR0JfQllfVEhFX0JPT0soeSwgdSwgdiwgcnYsIGd2LCBidik7CisJCX0KKworCW1ha2VfcGl4ZWw6CisJCS8qCisJCSAqIFRoZSBwdXJwb3NlIG9mIGNyZWF0aW5nIHRoZSBwaXhlbCBoZXJlLCBpbiBvbmUsCisJCSAqIGRlZGljYXRlZCBwbGFjZSBpcyB0aGF0IHdlIG1heSBuZWVkIHRvIG1ha2UgdGhlCisJCSAqIHBpeGVsIHdpZGVyIGFuZCB0YWxsZXIgdGhhbiBpdCBhY3R1YWxseSBpcy4gVGhpcworCQkgKiBtYXkgYmUgdXNlZCBpZiBjYW1lcmEgZ2VuZXJhdGVzIHNtYWxsIGZyYW1lcyBmb3IKKwkJICogc2FrZSBvZiBmcmFtZSByYXRlIChvciBhbnkgb3RoZXIgcmVhc29uLikKKwkJICoKKwkJICogVGhlIG91dHB1dCBkYXRhIGNvbnNpc3RzIG9mIEIsIEcsIFIgYnl0ZXMKKwkJICogKGluIHRoaXMgb3JkZXIpLgorCQkgKi8KKyNpZiBVU0VTX0lCTUNBTV9QVVRQSVhFTAorCQlSR0IyNF9QVVRQSVhFTChmcmFtZSwgaSwgZnJhbWUtPmN1cmxpbmUsIHJ2LCBndiwgYnYpOworI2Vsc2UKKwkJKmYrKyA9IGJ2OworCQkqZisrID0gZ3Y7CisJCSpmKysgPSBydjsKKyNlbmRpZgorCQkvKgorCQkgKiBUeXBpY2FsbHkgd2UgZG8gbm90IGRlY2lkZSB3aXRoaW4gYSBsZWdpdGltYXRlIGZyYW1lCisJCSAqIHRoYXQgd2Ugd2FudCB0byBlbmQgdGhlIGZyYW1lLiBIb3dldmVyIGRlYnVnZ2luZyBjb2RlCisJCSAqIG1heSBkZXRlY3QgbWFya2VyIG9mIG5ldyBmcmFtZSB3aXRoaW4gdGhlIGRhdGEuIFRoZW4KKwkJICogdGhpcyBjb25kaXRpb24gYWN0aXZhdGVzLiBUaGUgJ2RhdGEnIHBvaW50ZXIgaXMgYWxyZWFkeQorCQkgKiBwb2ludGluZyBhdCB0aGUgbmV3IG1hcmtlciwgc28gd2UnZCBiZXR0ZXIgbGVhdmUgaXQgYXMgaXMuCisJCSAqLworCQlpZiAoZnJhbWVfZG9uZSkKKwkJCWJyZWFrOwkvKiBFbmQgc2Nhbm5pbmcgb2YgbGluZXMgKi8KKwl9CisJLyoKKwkgKiBBY2NvdW50IGZvciBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3ZSB3cm90ZSBpbnRvIG91dHB1dCBWNEwgZnJhbWUuCisJICogV2UgZG8gaXQgaGVyZSwgYWZ0ZXIgd2UgYXJlIGRvbmUgd2l0aCB0aGUgc2NhbmxpbmUsIGJlY2F1c2Ugd2UKKwkgKiBtYXkgZmlsbCBtb3JlIHRoYW4gb25lIG91dHB1dCBzY2FubGluZSBpZiB3ZSBkbyB2ZXJ0aWNhbAorCSAqIGVubGFyZ2VtZW50LgorCSAqLworCWZyYW1lLT5jdXJsaW5lICs9IDI7CisJaWYgKHBjb3B5bGVuICE9IE5VTEwpCisJCSpwY29weWxlbiArPSAyICogdjRsX2xpbmVzaXplOworCWZyYW1lLT5kZWludGVybGFjZSA9IERlaW50ZXJsYWNlX0ZpbGxPZGRMaW5lczsKKworCWlmIChmcmFtZV9kb25lIHx8IChmcmFtZS0+Y3VybGluZSA+PSBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkpKQorCQlyZXR1cm4gc2Nhbl9OZXh0RnJhbWU7CisJZWxzZQorCQlyZXR1cm4gc2Nhbl9Db250aW51ZTsKK30KKworLyoKKyAqIGlibWNhbV9tb2RlbDJfMzIweDI0MF9wYXJzZV9saW5lcygpCisgKgorICogVGhpcyBwcm9jZWR1cmUgZGVhbHMgd2l0aCBhIHdlaXJkIFJHQiBmb3JtYXQgdGhhdCBpcyBwcm9kdWNlZCBieSBJQk0KKyAqIGNhbWVyYSBtb2RlbCAyIGluIG1vZGVzIDMyMHgyNDAgYW5kIGFib3ZlOyAneCcgYmVsb3cgaXMgMTU5IG9yIDE3NSwKKyAqIGRlcGVuZGluZyBvbiBob3Jpem9udGFsIHNpemUgb2YgdGhlIHBpY3R1cmU6CisgKgorICogPC0tLSAxNjAgb3IgMTc2IHBhaXJzIG9mIFJBLFJCIGJ5dGVzIC0tLS0tPgorICogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiBcCisgKiB8IFJBMCB8IFJCMCB8IFJBMSB8IFJCMSB8IC4uLiB8IFJBeCB8IFJCeCB8ICBcICAgVGhpcyBpcyBwYWlyIG9mIGhvcml6b250YWwgbGluZXMsCisgKiB8LS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rIC4uLiArLS0tLS0rLS0tLS18ICAgKi0gb3Igb25lIGludGVybGFjZWQgbGluZSwgdG90YWwKKyAqIHwgQjAgIHwgRzAgIHwgQjEgIHwgRzEgIHwgLi4uIHwgQnggIHwgR3ggIHwgIC8gICAxMjAgb3IgMTQ0IHN1Y2ggcGFpcnMgd2hpY2ggeWllbGQKKyAqIHw9PT09PSs9PT09PSs9PT09PSs9PT09PSsgLi4uICs9PT09PSs9PT09PXwgLyAgICAyNDAgb3IgMjg4IGxpbmVzIGFmdGVyIGRlaW50ZXJsYWNpbmcuCisgKgorICogRWFjaCBncm91cCBvZiBGT1VSIGJ5dGVzIChSQWksIFJCaSwgQmksIEdpKSB3aGVyZSBpPTAuLmZyYW1lX3dpZHRoLzItMQorICogZGVmaW5lcyBPTkUgcGl4ZWwuIFRoZXJlZm9yZSB0aGlzIGZvcm1hdCB5aWVsZHMgMTc2eDE0NCAiZGVjb2RlZCIKKyAqIHJlc29sdXRpb24gYXQgYmVzdC4gSSBkbyBub3Qga25vdyB3aHkgY2FtZXJhIHNlbmRzIHN1Y2ggZm9ybWF0IC0gdGhlCisgKiBwcmV2aW91cyBtb2RlbCAoMSkganVzdCB1c2VkIGludGVybGFjZWQgSTQyMCBhbmQgZXZlcnlvbmUgd2FzIGhhcHB5LgorICoKKyAqIEkgZG8gbm90IGtub3cgd2hhdCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFJBaSBhbmQgUkJpIGJ5dGVzLiBCb3RoCisgKiBzZWVtaW5nbHkgcmVwcmVzZW50IFIgY29tcG9uZW50LCBidXQgc2xpZ2h0bHkgdmFyeSBpbiB2YWx1ZSAoc28gdGhhdAorICogdGhlIHBpY3R1cmUgbG9va3MgYSBiaXQgY29sb3JlZCBpZiBvbmUgb3IgYW5vdGhlciBpcyB1c2VkKS4gSSB1c2UKKyAqIHRoZW0gYm90aCBhcyBSIGNvbXBvbmVudCBpbiBhdHRlbXB0IHRvIGF0IGxlYXN0IHBhcnRpYWxseSByZWNvdmVyIHRoZQorICogbG9zdCByZXNvbHV0aW9uLgorICovCitzdGF0aWMgZW51bSBQYXJzZVN0YXRlIGlibWNhbV9tb2RlbDJfMzIweDI0MF9wYXJzZV9saW5lcygKKwlzdHJ1Y3QgdXZkICp1dmQsCisJc3RydWN0IHVzYnZpZGVvX2ZyYW1lICpmcmFtZSwKKwlsb25nICpwY29weWxlbikKK3sKKwl1bnNpZ25lZCBjaGFyICpmLCAqbGEsICpsYjsKKwl1bnNpZ25lZCBpbnQgbGVuOworCWludCB2NGxfbGluZXNpemU7IC8qIFY0TCBsaW5lIG9mZnNldCAqLworCWludCBpLCBqLCBmcmFtZV9kb25lPTAsIGNvbG9yX2NvcnI7CisJaW50IHNjYW5MZW5ndGgsIHNjYW5IZWlnaHQ7CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgbGluZUJ1ZmZlclszNTIqMl07CisKKwlzd2l0Y2ggKHV2ZC0+dmlkZW9zaXplKSB7CisJY2FzZSBWSURFT1NJWkVfMzIweDI0MDoKKwljYXNlIFZJREVPU0laRV8zNTJ4MjQwOgorCWNhc2UgVklERU9TSVpFXzM1MngyODg6CisJCXNjYW5MZW5ndGggPSBWSURFT1NJWkVfWCh1dmQtPnZpZGVvc2l6ZSk7CisJCXNjYW5IZWlnaHQgPSBWSURFT1NJWkVfWSh1dmQtPnZpZGVvc2l6ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycigiaWJtY2FtX21vZGVsMl8zMjB4MjQwX3BhcnNlX2xpbmVzOiBXcm9uZyBtb2RlLiIpOworCQlyZXR1cm4gc2Nhbl9PdXQ7CisJfQorCisJY29sb3JfY29yciA9ICh1dmQtPnZwaWMuY29sb3VyKSA+PiA4OyAvKiAwLi4rMjU1ICovCisJdjRsX2xpbmVzaXplID0gVklERU9TSVpFX1goZnJhbWUtPnJlcXVlc3QpICogVjRMX0JZVEVTX1BFUl9QSVhFTDsKKworCWxlbiA9IHNjYW5MZW5ndGggKiAyOyAvKiBTZWUgZXhwbGFuYXRpb24gYWJvdmUgKi8KKwlhc3NlcnQobGVuIDw9IHNpemVvZihsaW5lQnVmZmVyKSk7CisKKwkvKiBNYWtlIHN1cmUgdGhlcmUncyBlbm91Z2ggZGF0YSBmb3IgdGhlIGVudGlyZSBsaW5lICovCisJaWYgKFJpbmdRdWV1ZV9HZXRMZW5ndGgoJnV2ZC0+ZHApIDwgbGVuKQorCQlyZXR1cm4gc2Nhbl9PdXQ7CisKKwkvKiBTdWNrIG9uZSBsaW5lIG91dCBvZiB0aGUgcmluZyBxdWV1ZSAqLworCVJpbmdRdWV1ZV9EZXF1ZXVlKCZ1dmQtPmRwLCBsaW5lQnVmZmVyLCBsZW4pOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCBvdXIgd3JpdGluZyBpbnRvIG91dHB1dCBidWZmZXIKKwkgKiB3aWxsIG5vdCBleGNlZWQgdGhlIGJ1ZmZlci4gTWluZCB0aGF0IHdlIG1heSB3cml0ZQorCSAqIG5vdCBpbnRvIGN1cnJlbnQgb3V0cHV0IHNjYW5saW5lIGJ1dCBpbiBzZXZlcmFsIGFmdGVyCisJICogaXQgYXMgd2VsbCAoaWYgd2UgZW5sYXJnZSBpbWFnZSB2ZXJ0aWNhbGx5LikKKwkgKi8KKwlpZiAoKGZyYW1lLT5jdXJsaW5lICsgMikgPj0gVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpKQorCQlyZXR1cm4gc2Nhbl9OZXh0RnJhbWU7CisKKwlsYSA9IGxpbmVCdWZmZXI7CisJbGIgPSBsaW5lQnVmZmVyICsgc2Nhbkxlbmd0aDsKKworCS8qCisJICogTm93IHdlIGFyZSBzdXJlIHRoYXQgZW50aXJlIGxpbmUgKHJlcHJlc2VudGluZyBhbGwKKwkgKiAgICAgICAgIFZJREVPU0laRV9YKGZyYW1lLT5yZXF1ZXN0KQorCSAqIHBpeGVscyBmcm9tIHRoZSBjYW1lcmEpIGlzIGF2YWlsYWJsZSBpbiB0aGUgc2NyYXRjaCBidWZmZXIuIFdlCisJICogc3RhcnQgY29weWluZyB0aGUgbGluZSBsZWZ0LWFsaWduZWQgdG8gdGhlIFY0TCBidWZmZXIgKHdoaWNoCisJICogbWlnaHQgYmUgbGFyZ2VyIC0gbm90IHNtYWxsZXIsIGhvcGVmdWxseSkuIElmIHRoZSBjYW1lcmEKKwkgKiBsaW5lIGlzIHNob3J0ZXIgdGhlbiB3ZSBzaG91bGQgcGFkIHRoZSBWNEwgYnVmZmVyIHdpdGggc29tZXRoaW5nCisJICogKGJsYWNrIGluIHRoaXMgY2FzZSkgdG8gY29tcGxldGUgdGhlIGxpbmUuCisJICovCisJZiA9IGZyYW1lLT5kYXRhICsgKHY0bF9saW5lc2l6ZSAqIGZyYW1lLT5jdXJsaW5lKTsKKworCS8qIEZpbGwgdGhlIDItbGluZSBzdHJpcCAqLworCWZvciAoaSA9IDA7IGkgPCBWSURFT1NJWkVfWChmcmFtZS0+cmVxdWVzdCk7IGkrKykgeworCQlpbnQgeSwgcnYsIGd2LCBidjsJLyogUkdCIGNvbXBvbmVudHMgKi8KKworCQlqID0gaSAmICh+MSk7CisKKwkJLyogQ2hlY2sgZm9yIHZhcmlvdXMgdmlzdWFsIGRlYnVnZ2luZyBoaW50cyAoY29sb3JpemVkIHBpeGVscykgKi8KKwkJaWYgKChmbGFncyAmIEZMQUdTX0RJU1BMQVlfSElOVFMpICYmIChJQk1DQU1fVCh1dmQpLT5oYXNfaGRyKSkgeworCQkJaWYgKElCTUNBTV9UKHV2ZCktPmhhc19oZHIgPT0gMSkgeworCQkJCWJ2ID0gMDsgLyogWWVsbG93IG1hcmtlciAqLworCQkJCWd2ID0gMHhGRjsKKwkJCQlydiA9IDB4RkY7CisJCQl9IGVsc2UgeworCQkJCWJ2ID0gMHhGRjsgLyogQ3lhbiBtYXJrZXIgKi8KKwkJCQlndiA9IDB4RkY7CisJCQkJcnYgPSAwOworCQkJfQorCQkJSUJNQ0FNX1QodXZkKS0+aGFzX2hkciA9IDA7CisJCQlnb3RvIG1ha2VfcGl4ZWw7CisJCX0KKworCQkvKgorCQkgKiBDaGVjayBpZiB3ZSBhcmUgc3RpbGwgaW4gcmFuZ2UuIFdlIG1heSBiZSBvdXQgb2YgcmFuZ2UgaWYgb3VyCisJCSAqIFY0TCBjYW52YXMgaXMgd2lkZXIgb3IgdGFsbGVyIHRoYW4gdGhlIGNhbWVyYSAibmF0aXZlIiBpbWFnZS4KKwkJICogVGhlbiB3ZSBxdWlja2x5IGZpbGwgdGhlIHJlbWFpbmRlciBvZiB0aGUgbGluZSB3aXRoIHplcm9zIHRvCisJCSAqIG1ha2UgYmxhY2sgY29sb3IgYW5kIHF1aXQgdGhlIGhvcml6b250YWwgc2Nhbm5pbmcgbG9vcC4KKwkJICovCisJCWlmICgoKGZyYW1lLT5jdXJsaW5lICsgMikgPj0gc2NhbkhlaWdodCkgfHwgKGkgPj0gc2Nhbkxlbmd0aCkpIHsKKwkJCWNvbnN0IGludCBqID0gaSAqIFY0TF9CWVRFU19QRVJfUElYRUw7CisjaWYgVVNFU19JQk1DQU1fUFVUUElYRUwKKwkJCS8qIFJlZnJlc2ggJ2YnIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIGl0IG11Y2ggd2l0aCBQVVRQSVhFTCAqLworCQkJZiA9IGZyYW1lLT5kYXRhICsgKHY0bF9saW5lc2l6ZSAqIGZyYW1lLT5jdXJsaW5lKSArIGo7CisjZW5kaWYKKwkJCW1lbXNldChmLCAwLCB2NGxfbGluZXNpemUgLSBqKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogSGVyZSBJIHVzZSBSQSBhbmQgUkIgY29tcG9uZW50cywgb25lIHBlciBwaHlzaWNhbCBwaXhlbC4KKwkJICogVGhpcyBjYXVzZXMgZmluZSB2ZXJ0aWNhbCBncmlkIG9uIHRoZSBwaWN0dXJlIGJ1dCBtYXkgaW1wcm92ZQorCQkgKiBob3Jpem9udGFsIHJlc29sdXRpb24uIElmIHlvdSBwcmVmZXIgcmVwbGljYXRpbmcsIHVzZSB0aGlzOgorCQkgKiAgIHJ2ID0gbGFbaiArIDBdOyAgIC4uLiBvciAuLi4gcnYgPSBsYVtqICsgMV07CisJCSAqIHRoZW4gdGhlIHBpeGVsIHdpbGwgYmUgcmVwbGljYXRlZC4KKwkJICovCisJCXJ2ID0gbGFbaV07CisJCWd2ID0gbGJbaiArIDFdOworCQlidiA9IGxiW2ogKyAwXTsKKworCQl5ID0gKHJ2ICsgZ3YgKyBidikgLyAzOyAvKiBCcmlnaHRuZXNzIChiYWRseSBjYWxjdWxhdGVkKSAqLworCisJCWlmIChmbGFncyAmIEZMQUdTX01PTk9DSFJPTUUpIC8qIFVzZSBtb25vY2hyb21lIGZvciBkZWJ1Z2dpbmcgKi8KKwkJCXJ2ID0gZ3YgPSBidiA9IHk7CisJCWVsc2UgaWYgKGNvbG9yX2NvcnIgIT0gMTI4KSB7CisKKwkJCS8qIENhbGN1bGF0ZSBkaWZmZXJlbmNlIGJldHdlZW4gY29sb3IgYW5kIGJyaWdodG5lc3MgKi8KKwkJCXJ2IC09IHk7CisJCQlndiAtPSB5OworCQkJYnYgLT0geTsKKworCQkJLyogU2NhbGUgZGlmZmVyZW5jZXMgKi8KKwkJCXJ2ID0gKHJ2ICogY29sb3JfY29ycikgLyAxMjg7CisJCQlndiA9IChndiAqIGNvbG9yX2NvcnIpIC8gMTI4OworCQkJYnYgPSAoYnYgKiBjb2xvcl9jb3JyKSAvIDEyODsKKworCQkJLyogUmVhcHBseSBicmlnaHRuZXNzICovCisJCQlydiArPSB5OworCQkJZ3YgKz0geTsKKwkJCWJ2ICs9IHk7CisKKwkJCS8qIFdhdGNoIGZvciBvdmVyZmxvd3MgKi8KKwkJCVJFU1RSSUNUX1RPX1JBTkdFKHJ2LCAwLCAyNTUpOworCQkJUkVTVFJJQ1RfVE9fUkFOR0UoZ3YsIDAsIDI1NSk7CisJCQlSRVNUUklDVF9UT19SQU5HRShidiwgMCwgMjU1KTsKKwkJfQorCisJbWFrZV9waXhlbDoKKwkJUkdCMjRfUFVUUElYRUwoZnJhbWUsIGksIGZyYW1lLT5jdXJsaW5lLCBydiwgZ3YsIGJ2KTsKKwl9CisJLyoKKwkgKiBBY2NvdW50IGZvciBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3ZSB3cm90ZSBpbnRvIG91dHB1dCBWNEwgZnJhbWUuCisJICogV2UgZG8gaXQgaGVyZSwgYWZ0ZXIgd2UgYXJlIGRvbmUgd2l0aCB0aGUgc2NhbmxpbmUsIGJlY2F1c2Ugd2UKKwkgKiBtYXkgZmlsbCBtb3JlIHRoYW4gb25lIG91dHB1dCBzY2FubGluZSBpZiB3ZSBkbyB2ZXJ0aWNhbAorCSAqIGVubGFyZ2VtZW50LgorCSAqLworCWZyYW1lLT5jdXJsaW5lICs9IDI7CisJKnBjb3B5bGVuICs9IHY0bF9saW5lc2l6ZSAqIDI7CisJZnJhbWUtPmRlaW50ZXJsYWNlID0gRGVpbnRlcmxhY2VfRmlsbE9kZExpbmVzOworCisJaWYgKGZyYW1lX2RvbmUgfHwgKGZyYW1lLT5jdXJsaW5lID49IFZJREVPU0laRV9ZKGZyYW1lLT5yZXF1ZXN0KSkpCisJCXJldHVybiBzY2FuX05leHRGcmFtZTsKKwllbHNlCisJCXJldHVybiBzY2FuX0NvbnRpbnVlOworfQorCitzdGF0aWMgZW51bSBQYXJzZVN0YXRlIGlibWNhbV9tb2RlbDNfcGFyc2VfbGluZXMoCisJc3RydWN0IHV2ZCAqdXZkLAorCXN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUsCisJbG9uZyAqcGNvcHlsZW4pCit7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpjb2xvcjsKKwl1bnNpZ25lZCBpbnQgbGVuOworCWludCB2NGxfbGluZXNpemU7IC8qIFY0TCBsaW5lIG9mZnNldCAqLworCWNvbnN0IGludCBodWVfY29yciAgPSAodXZkLT52cGljLmh1ZSAtIDB4ODAwMCkgPj4gMTA7CS8qIC0zMi4uKzMxICovCisJY29uc3QgaW50IGh1ZTJfY29yciA9IChodWVfY29ycmVjdGlvbiAtIDEyOCkgLyA0OwkJLyogLTMyLi4rMzEgKi8KKwljb25zdCBpbnQgY2NtID0gMTI4OyAvKiBDb2xvciBjb3JyZWN0aW9uIG1lZGlhbiAtIHNlZSBiZWxvdyAqLworCWludCBpLCB1LCB2LCBydywgZGF0YV93PTAsIGRhdGFfaD0wLCBjb2xvcl9jb3JyOworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGxpbmVCdWZmZXJbNjQwKjNdOworCisJY29sb3JfY29yciA9ICh1dmQtPnZwaWMuY29sb3VyIC0gMHg4MDAwKSA+PiA4OyAvKiAtMTI4Li4rMTI3ID0gLWNjbS4uKyhjY20tMSkqLworCVJFU1RSSUNUX1RPX1JBTkdFKGNvbG9yX2NvcnIsIC1jY20sIGNjbSsxKTsKKworCXY0bF9saW5lc2l6ZSA9IFZJREVPU0laRV9YKGZyYW1lLT5yZXF1ZXN0KSAqIFY0TF9CWVRFU19QRVJfUElYRUw7CisKKwkvKiBUaGUgaGVhZGVyIHRlbGxzIHVzIHdoYXQgc29ydCBvZiBkYXRhIGlzIGluIHRoaXMgZnJhbWUgKi8KKwlzd2l0Y2ggKGZyYW1lLT5oZWFkZXIpIHsKKwkJLyoKKwkJICogVW5jb21wcmVzc2VkIG1vZGVzICh0aGF0IGFyZSBlYXN5IHRvIGRlY29kZSkuCisJCSAqLworCWNhc2UgMHgwMzA4OgorCQlkYXRhX3cgPSA2NDA7CisJCWRhdGFfaCA9IDQ4MDsKKwkJYnJlYWs7CisJY2FzZSAweDAyMDg6CisJCWRhdGFfdyA9IDMyMDsKKwkJZGF0YV9oID0gMjQwOworCQlicmVhazsKKwljYXNlIDB4MDIwQToKKwkJZGF0YV93ID0gMTYwOworCQlkYXRhX2ggPSAxMjA7CisJCWJyZWFrOworCQkvKgorCQkgKiBDb21wcmVzc2VkIG1vZGVzIChWaUNFIC0gdGhhdCBJIGRvbid0IGtub3cgaG93IHRvIGRlY29kZSkuCisJCSAqLworCWNhc2UgMHgwMzI4OgkvKiA2NDB4NDgwLCBiZXN0IHF1YWxpdHkgY29tcHJlc3Npb24gKi8KKwljYXNlIDB4MDM2ODoJLyogNjQweDQ4MCwgYmVzdCBmcmFtZSByYXRlIGNvbXByZXNzaW9uICovCisJY2FzZSAweDAyMjg6CS8qIDMyMHgyNDAsIGJlc3QgcXVhbGl0eSBjb21wcmVzc2lvbiAqLworCWNhc2UgMHgwMjY4OgkvKiAzMjB4MjQwLCBiZXN0IGZyYW1lIHJhdGUgY29tcHJlc3Npb24gKi8KKwljYXNlIDB4MDJDQToJLyogMTYweDEyMCwgYmVzdCBxdWFsaXR5IGNvbXByZXNzaW9uICovCisJY2FzZSAweDAyRUE6CS8qIDE2MHgxMjAsIGJlc3QgZnJhbWUgcmF0ZSBjb21wcmVzc2lvbiAqLworCQkvKiBEbyBub3RoaW5nIHdpdGggdGhpcyAtIG5vdCBzdXBwb3J0ZWQgKi8KKwkJZXJyKCJVbnN1cHBvcnRlZCBtb2RlICQlMDRseCIsIGZyYW1lLT5oZWFkZXIpOworCQlyZXR1cm4gc2Nhbl9OZXh0RnJhbWU7CisJZGVmYXVsdDoKKwkJLyogQ2F0Y2ggdW5rbm93biBoZWFkZXJzLCBtYXkgaGVscCBpbiBsZWFybmluZyBuZXcgaGVhZGVycyAqLworCQllcnIoIlN0cmFuZ2UgZnJhbWUtPmhlYWRlcj0kJTA4bHgiLCBmcmFtZS0+aGVhZGVyKTsKKwkJcmV0dXJuIHNjYW5fTmV4dEZyYW1lOworCX0KKworCS8qCisJICogTWFrZSBzdXJlIHRoYXQgb3VyIHdyaXRpbmcgaW50byBvdXRwdXQgYnVmZmVyCisJICogd2lsbCBub3QgZXhjZWVkIHRoZSBidWZmZXIuIE5vdGUgdGhhdCB3ZSBtYXkgd3JpdGUKKwkgKiBub3QgaW50byBjdXJyZW50IG91dHB1dCBzY2FubGluZSBidXQgaW4gc2V2ZXJhbCBhZnRlcgorCSAqIGl0IGFzIHdlbGwgKGlmIHdlIGVubGFyZ2UgaW1hZ2UgdmVydGljYWxseS4pCisJICovCisJaWYgKChmcmFtZS0+Y3VybGluZSArIDEpID49IGRhdGFfaCkgeworCQlpZiAodXZkLT5kZWJ1ZyA+PSAzKQorCQkJaW5mbygiUmVhY2hlZCBsaW5lICVkLiAoZnJhbWUgaXMgZG9uZSkiLCBmcmFtZS0+Y3VybGluZSk7CisJCXJldHVybiBzY2FuX05leHRGcmFtZTsKKwl9CisKKwkvKiBNYWtlIHN1cmUgdGhlcmUncyBlbm91Z2ggZGF0YSBmb3IgdGhlIGVudGlyZSBsaW5lICovCisJbGVuID0gMyAqIGRhdGFfdzsgLyogPHktZGF0YT4gPHV2LWRhdGE+ICovCisJYXNzZXJ0KGxlbiA8PSBzaXplb2YobGluZUJ1ZmZlcikpOworCisJLyogTWFrZSBzdXJlIHRoZXJlJ3MgZW5vdWdoIGRhdGEgZm9yIHRoZSBlbnRpcmUgbGluZSAqLworCWlmIChSaW5nUXVldWVfR2V0TGVuZ3RoKCZ1dmQtPmRwKSA8IGxlbikKKwkJcmV0dXJuIHNjYW5fT3V0OworCisJLyogU3VjayBvbmUgbGluZSBvdXQgb2YgdGhlIHJpbmcgcXVldWUgKi8KKwlSaW5nUXVldWVfRGVxdWV1ZSgmdXZkLT5kcCwgbGluZUJ1ZmZlciwgbGVuKTsKKworCWRhdGEgPSBsaW5lQnVmZmVyOworCWNvbG9yID0gZGF0YSArIGRhdGFfdzsJCS8qIFBvaW50IHRvIHdoZXJlIGNvbG9yIHBsYW5lcyBiZWdpbiAqLworCisJLyogQm90dG9tLXRvLXRvcCBzY2FubmluZyAqLworCXJ3ID0gKGludClWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkgLSAoaW50KShmcmFtZS0+Y3VybGluZSkgLSAxOworCVJFU1RSSUNUX1RPX1JBTkdFKHJ3LCAwLCBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCktMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVklERU9TSVpFX1goZnJhbWUtPnJlcXVlc3QpOyBpKyspIHsKKwkJaW50IHksIHJ2LCBndiwgYnY7CS8qIFJHQiBjb21wb25lbnRzICovCisKKwkJaWYgKGkgPCBkYXRhX3cpIHsKKwkJCXkgPSBkYXRhW2ldOwkvKiBMdW1pbm9zaXR5IGlzIHRoZSBmaXJzdCBsaW5lICovCisKKwkJCS8qIEFwcGx5IHN0YXRpYyBjb2xvciBjb3JyZWN0aW9uICovCisJCQl1ID0gY29sb3JbaSoyXSArIGh1ZV9jb3JyOworCQkJdiA9IGNvbG9yW2kqMiArIDFdICsgaHVlMl9jb3JyOworCisJCQkvKiBBcHBseSBjb2xvciBjb3JyZWN0aW9uICovCisJCQlpZiAoY29sb3JfY29yciAhPSAwKSB7CisJCQkJLyogTWFnbmlmeSB1cCB0byAyIHRpbWVzLCByZWR1Y2UgZG93biB0byB6ZXJvIHNhdHVyYXRpb24gKi8KKwkJCQl1ID0gMTI4ICsgKChjY20gKyBjb2xvcl9jb3JyKSAqICh1IC0gMTI4KSkgLyBjY207CisJCQkJdiA9IDEyOCArICgoY2NtICsgY29sb3JfY29ycikgKiAodiAtIDEyOCkpIC8gY2NtOworCQkJfQorCQl9IGVsc2UKKwkJCXkgPSAwLCB1ID0gdiA9IDEyODsKKworCQlZVVZfVE9fUkdCX0JZX1RIRV9CT09LKHksIHUsIHYsIHJ2LCBndiwgYnYpOworCQlSR0IyNF9QVVRQSVhFTChmcmFtZSwgaSwgcncsIHJ2LCBndiwgYnYpOyAvKiBEb25lIGJ5IGRlaW50ZXJsYWNpbmcgbm93ICovCisJfQorCWZyYW1lLT5kZWludGVybGFjZSA9IERlaW50ZXJsYWNlX0ZpbGxFdmVuTGluZXM7CisKKwkvKgorCSAqIEFjY291bnQgZm9yIG51bWJlciBvZiBieXRlcyB0aGF0IHdlIHdyb3RlIGludG8gb3V0cHV0IFY0TCBmcmFtZS4KKwkgKiBXZSBkbyBpdCBoZXJlLCBhZnRlciB3ZSBhcmUgZG9uZSB3aXRoIHRoZSBzY2FubGluZSwgYmVjYXVzZSB3ZQorCSAqIG1heSBmaWxsIG1vcmUgdGhhbiBvbmUgb3V0cHV0IHNjYW5saW5lIGlmIHdlIGRvIHZlcnRpY2FsCisJICogZW5sYXJnZW1lbnQuCisJICovCisJZnJhbWUtPmN1cmxpbmUgKz0gMjsKKwkqcGNvcHlsZW4gKz0gMiAqIHY0bF9saW5lc2l6ZTsKKworCWlmIChmcmFtZS0+Y3VybGluZSA+PSBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkpIHsKKwkJaWYgKHV2ZC0+ZGVidWcgPj0gMykgeworCQkJaW5mbygiQWxsIHJlcXVlc3RlZCBsaW5lcyAoJWxkLikgZG9uZS4iLAorCQkJICAgICBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkpOworCQl9CisJCXJldHVybiBzY2FuX05leHRGcmFtZTsKKwl9IGVsc2UKKwkJcmV0dXJuIHNjYW5fQ29udGludWU7Cit9CisKKy8qCisgKiBpYm1jYW1fbW9kZWw0XzEyOHg5Nl9wYXJzZV9saW5lcygpCisgKgorICogVGhpcyBkZWNvZGVyIGlzIGZvciBvbmUgc3RyYW5nZSBkYXRhIGZvcm1hdCB0aGF0IGlzIHByb2R1Y2VkIGJ5IE1vZGVsIDQKKyAqIGNhbWVyYSBvbmx5IGluIDEyOHg5NiBtb2RlLiBUaGlzIGlzIFJHQiBmb3JtYXQgYW5kIGhlcmUgaXMgaXRzIGRlc2NyaXB0aW9uLgorICogRmlyc3Qgb2YgYWxsLCB0aGlzIGlzIG5vbi1pbnRlcmxhY2VkIHN0cmVhbSwgbWVhbmluZyB0aGF0IGFsbCBzY2FuIGxpbmVzCisgKiBhcmUgcHJlc2VudCBpbiB0aGUgZGF0YXN0cmVhbS4gVGhlcmUgYXJlIDk2IGNvbnNlY3V0aXZlIGJsb2NrcyBvZiBkYXRhCisgKiB0aGF0IGRlc2NyaWJlIGFsbCA5NiBsaW5lcyBvZiB0aGUgaW1hZ2UuIEVhY2ggYmxvY2sgaXMgNSoxMjggYnl0ZXMgbG9uZworICogYW5kIGNhcnJpZXMgUiwgRywgQiBjb21wb25lbnRzLiBUaGUgZm9ybWF0IG9mIHRoZSBibG9jayBpcyBzaG93biBpbiB0aGUKKyAqIGNvZGUgYmVsb3cuIEZpcnN0IDEyOCoyIGJ5dGVzIGFyZSBpbnRlcmxlYXZlZCBSIGFuZCBHIGNvbXBvbmVudHMuIFRoZW4KKyAqIHdlIGhhdmUgYSBnYXAgKGp1bmsgZGF0YSkgNjQgYnl0ZXMgbG9uZy4gVGhlbiBmb2xsb3cgQiBhbmQgc29tZXRoaW5nCisgKiBlbHNlLCBhbHNvIGludGVybGVhdmVkICh0aGlzIG1ha2VzIGFub3RoZXIgMTI4KjIgYnl0ZXMpLiBBZnRlciB0aGF0CisgKiBwcm9iYWJseSBhbm90aGVyIDY0IGJ5dGVzIG9mIGp1bmsgZm9sbG93LgorICoKKyAqIEhpc3Rvcnk6CisgKiAxMC1GZWItMjAwMSBDcmVhdGVkLgorICovCitzdGF0aWMgZW51bSBQYXJzZVN0YXRlIGlibWNhbV9tb2RlbDRfMTI4eDk2X3BhcnNlX2xpbmVzKAorCXN0cnVjdCB1dmQgKnV2ZCwKKwlzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lLAorCWxvbmcgKnBjb3B5bGVuKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGFfcnYsICpkYXRhX2d2LCAqZGF0YV9idjsKKwl1bnNpZ25lZCBpbnQgbGVuOworCWludCBpLCB2NGxfbGluZXNpemU7IC8qIFY0TCBsaW5lIG9mZnNldCAqLworCWNvbnN0IGludCBkYXRhX3c9MTI4LCBkYXRhX2g9OTY7CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgbGluZUJ1ZmZlclsxMjgqNV07CisKKwl2NGxfbGluZXNpemUgPSBWSURFT1NJWkVfWChmcmFtZS0+cmVxdWVzdCkgKiBWNExfQllURVNfUEVSX1BJWEVMOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCBvdXIgd3JpdGluZyBpbnRvIG91dHB1dCBidWZmZXIKKwkgKiB3aWxsIG5vdCBleGNlZWQgdGhlIGJ1ZmZlci4gTm90ZSB0aGF0IHdlIG1heSB3cml0ZQorCSAqIG5vdCBpbnRvIGN1cnJlbnQgb3V0cHV0IHNjYW5saW5lIGJ1dCBpbiBzZXZlcmFsIGFmdGVyCisJICogaXQgYXMgd2VsbCAoaWYgd2UgZW5sYXJnZSBpbWFnZSB2ZXJ0aWNhbGx5LikKKwkgKi8KKwlpZiAoKGZyYW1lLT5jdXJsaW5lICsgMSkgPj0gZGF0YV9oKSB7CisJCWlmICh1dmQtPmRlYnVnID49IDMpCisJCQlpbmZvKCJSZWFjaGVkIGxpbmUgJWQuIChmcmFtZSBpcyBkb25lKSIsIGZyYW1lLT5jdXJsaW5lKTsKKwkJcmV0dXJuIHNjYW5fTmV4dEZyYW1lOworCX0KKworCS8qCisJICogUkdSR1JHIC4uLi4gUkdSR19fX19fX19fX19fX19CP0I/Qj8gLi4uIEI/Qj9fX19fX19fX19fX18KKwkgKiA8LS0tLSAxMjgqMiAtLS0+PC0tLS0gNjQgLS0tPjwtLS0gMTI4KjIgLS0tPjwtLS0gNjQgLS0tPgorCSAqLworCisJLyogTWFrZSBzdXJlIHRoZXJlJ3MgZW5vdWdoIGRhdGEgZm9yIHRoZSBlbnRpcmUgbGluZSAqLworCWxlbiA9IDUgKiBkYXRhX3c7CisJYXNzZXJ0KGxlbiA8PSBzaXplb2YobGluZUJ1ZmZlcikpOworCisJLyogTWFrZSBzdXJlIHRoZXJlJ3MgZW5vdWdoIGRhdGEgZm9yIHRoZSBlbnRpcmUgbGluZSAqLworCWlmIChSaW5nUXVldWVfR2V0TGVuZ3RoKCZ1dmQtPmRwKSA8IGxlbikKKwkJcmV0dXJuIHNjYW5fT3V0OworCisJLyogU3VjayBvbmUgbGluZSBvdXQgb2YgdGhlIHJpbmcgcXVldWUgKi8KKwlSaW5nUXVldWVfRGVxdWV1ZSgmdXZkLT5kcCwgbGluZUJ1ZmZlciwgbGVuKTsKKworCWRhdGFfcnYgPSBsaW5lQnVmZmVyOworCWRhdGFfZ3YgPSBsaW5lQnVmZmVyICsgMTsKKwlkYXRhX2J2ID0gbGluZUJ1ZmZlciArIGRhdGFfdyoyICsgZGF0YV93LzI7CisJZm9yIChpID0gMDsgaSA8IFZJREVPU0laRV9YKGZyYW1lLT5yZXF1ZXN0KTsgaSsrKSB7CisJCWludCBydiwgZ3YsIGJ2OwkvKiBSR0IgY29tcG9uZW50cyAqLworCQlpZiAoaSA8IGRhdGFfdykgeworCQkJY29uc3QgaW50IGogPSBpICogMjsKKwkJCWd2ID0gZGF0YV9ydltqXTsKKwkJCXJ2ID0gZGF0YV9ndltqXTsKKwkJCWJ2ID0gZGF0YV9idltqXTsKKwkJCWlmIChmbGFncyAmIEZMQUdTX01PTk9DSFJPTUUpIHsKKwkJCQl1bnNpZ25lZCBsb25nIHk7CisJCQkJeSA9IHJ2ICsgZ3YgKyBidjsKKwkJCQl5IC89IDM7CisJCQkJaWYgKHkgPiAweEZGKQorCQkJCQl5ID0gMHhGRjsKKwkJCQlydiA9IGd2ID0gYnYgPSAodW5zaWduZWQgY2hhcikgeTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXJ2ID0gZ3YgPSBidiA9IDA7CisJCX0KKwkJUkdCMjRfUFVUUElYRUwoZnJhbWUsIGksIGZyYW1lLT5jdXJsaW5lLCBydiwgZ3YsIGJ2KTsKKwl9CisJZnJhbWUtPmRlaW50ZXJsYWNlID0gRGVpbnRlcmxhY2VfTm9uZTsKKwlmcmFtZS0+Y3VybGluZSsrOworCSpwY29weWxlbiArPSB2NGxfbGluZXNpemU7CisKKwlpZiAoZnJhbWUtPmN1cmxpbmUgPj0gVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpKSB7CisJCWlmICh1dmQtPmRlYnVnID49IDMpIHsKKwkJCWluZm8oIkFsbCByZXF1ZXN0ZWQgbGluZXMgKCVsZC4pIGRvbmUuIiwKKwkJCSAgICAgVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpKTsKKwkJfQorCQlyZXR1cm4gc2Nhbl9OZXh0RnJhbWU7CisJfSBlbHNlCisJCXJldHVybiBzY2FuX0NvbnRpbnVlOworfQorCisvKgorICogaWJtY2FtX1Byb2Nlc3NJc29jRGF0YSgpCisgKgorICogR2VuZXJpYyByb3V0aW5lIHRvIHBhcnNlIHRoZSByaW5nIHF1ZXVlIGRhdGEuIEl0IGVtcGxveXMgZWl0aGVyCisgKiBpYm1jYW1fZmluZF9oZWFkZXIoKSBvciBpYm1jYW1fcGFyc2VfbGluZXMoKSB0byBkbyBtb3N0CisgKiBvZiB3b3JrLgorICoKKyAqIEhpc3Rvcnk6CisgKiAxLzIxLzAwICBDcmVhdGVkLgorICovCitzdGF0aWMgdm9pZCBpYm1jYW1fUHJvY2Vzc0lzb2NEYXRhKHN0cnVjdCB1dmQgKnV2ZCwKKwkJCQkgICBzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lKQoreworCWVudW0gUGFyc2VTdGF0ZSBuZXdzdGF0ZTsKKwlsb25nIGNvcHlsZW4gPSAwOworCWludCBtb2QgPSBJQk1DQU1fVCh1dmQpLT5jYW1lcmFfbW9kZWw7CisKKwl3aGlsZSAoMSkgeworCQluZXdzdGF0ZSA9IHNjYW5fT3V0OworCQlpZiAoUmluZ1F1ZXVlX0dldExlbmd0aCgmdXZkLT5kcCkgPiAwKSB7CisJCQlpZiAoZnJhbWUtPnNjYW5zdGF0ZSA9PSBTY2FuU3RhdGVfU2Nhbm5pbmcpIHsKKwkJCQluZXdzdGF0ZSA9IGlibWNhbV9maW5kX2hlYWRlcih1dmQpOworCQkJfSBlbHNlIGlmIChmcmFtZS0+c2NhbnN0YXRlID09IFNjYW5TdGF0ZV9MaW5lcykgeworCQkJCWlmICgobW9kID09IElCTUNBTV9NT0RFTF8yKSAmJgorCQkJCSAgICAoKHV2ZC0+dmlkZW9zaXplID09IFZJREVPU0laRV8zNTJ4Mjg4KSB8fAorCQkJCSAgICAgKHV2ZC0+dmlkZW9zaXplID09IFZJREVPU0laRV8zMjB4MjQwKSB8fAorCQkJCSAgICAgKHV2ZC0+dmlkZW9zaXplID09IFZJREVPU0laRV8zNTJ4MjQwKSkpCisJCQkJeworCQkJCQluZXdzdGF0ZSA9IGlibWNhbV9tb2RlbDJfMzIweDI0MF9wYXJzZV9saW5lcygKKwkJCQkJCXV2ZCwgZnJhbWUsICZjb3B5bGVuKTsKKwkJCQl9IGVsc2UgaWYgKG1vZCA9PSBJQk1DQU1fTU9ERUxfNCkgeworCQkJCQkvKgorCQkJCQkgKiBNb2RlbCA0IGNhbWVyYXMgKElCTSBOZXRDYW1lcmEpIHVzZSBNb2RlbCAyIGRlY29kZXIgKFJHQikKKwkJCQkJICogZm9yIDMyMHgyNDAgYW5kIGFib3ZlOyAxNjB4MTIwIGFuZCAxNzZ4MTQ0IHVzZXMgTW9kZWwgMQorCQkJCQkgKiBkZWNvZGVyIChZVVYpLCBhbmQgMTI4eDk2IG1vZGUgdXNlcyA/Pz8KKwkJCQkJICovCisJCQkJCWlmICgodXZkLT52aWRlb3NpemUgPT0gVklERU9TSVpFXzM1MngyODgpIHx8CisJCQkJCSAgICAodXZkLT52aWRlb3NpemUgPT0gVklERU9TSVpFXzMyMHgyNDApIHx8CisJCQkJCSAgICAodXZkLT52aWRlb3NpemUgPT0gVklERU9TSVpFXzM1MngyNDApKQorCQkJCQl7CisJCQkJCQluZXdzdGF0ZSA9IGlibWNhbV9tb2RlbDJfMzIweDI0MF9wYXJzZV9saW5lcyh1dmQsIGZyYW1lLCAmY29weWxlbik7CisJCQkJCX0gZWxzZSBpZiAodXZkLT52aWRlb3NpemUgPT0gVklERU9TSVpFXzEyOHg5NikgeworCQkJCQkJbmV3c3RhdGUgPSBpYm1jYW1fbW9kZWw0XzEyOHg5Nl9wYXJzZV9saW5lcyh1dmQsIGZyYW1lLCAmY29weWxlbik7CisJCQkJCX0gZWxzZSB7CisJCQkJCQluZXdzdGF0ZSA9IGlibWNhbV9wYXJzZV9saW5lcyh1dmQsIGZyYW1lLCAmY29weWxlbik7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKG1vZCA9PSBJQk1DQU1fTU9ERUxfMykgeworCQkJCQluZXdzdGF0ZSA9IGlibWNhbV9tb2RlbDNfcGFyc2VfbGluZXModXZkLCBmcmFtZSwgJmNvcHlsZW4pOworCQkJCX0gZWxzZSB7CisJCQkJCW5ld3N0YXRlID0gaWJtY2FtX3BhcnNlX2xpbmVzKHV2ZCwgZnJhbWUsICZjb3B5bGVuKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKG5ld3N0YXRlID09IHNjYW5fQ29udGludWUpCisJCQljb250aW51ZTsKKwkJZWxzZSBpZiAoKG5ld3N0YXRlID09IHNjYW5fTmV4dEZyYW1lKSB8fCAobmV3c3RhdGUgPT0gc2Nhbl9PdXQpKQorCQkJYnJlYWs7CisJCWVsc2UKKwkJCXJldHVybjsgLyogc2Nhbl9FbmRQYXJzZSAqLworCX0KKworCWlmIChuZXdzdGF0ZSA9PSBzY2FuX05leHRGcmFtZSkgeworCQlmcmFtZS0+ZnJhbWVTdGF0ZSA9IEZyYW1lU3RhdGVfRG9uZTsKKwkJdXZkLT5jdXJmcmFtZSA9IC0xOworCQl1dmQtPnN0YXRzLmZyYW1lX251bSsrOworCQlpZiAoKG1vZCA9PSBJQk1DQU1fTU9ERUxfMikgfHwgKG1vZCA9PSBJQk1DQU1fTU9ERUxfNCkpIHsKKwkJCS8qIE5lZWQgc29mdHdhcmUgY29udHJhc3QgYWRqdXN0bWVudCBmb3IgdGhvc2UgY2FtZXJhcyAqLworCQkJZnJhbWUtPmZsYWdzIHw9IFVTQlZJREVPX0ZSQU1FX0ZMQUdfU09GVFdBUkVfQ09OVFJBU1Q7CisJCX0KKwl9CisKKwkvKiBVcGRhdGUgdGhlIGZyYW1lJ3MgdW5jb21wcmVzc2VkIGxlbmd0aC4gKi8KKwlmcmFtZS0+c2VxUmVhZF9MZW5ndGggKz0gY29weWxlbjsKKworI2lmIDAKKwl7CisJCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGo9MDsKKwkJbWVtc2V0KGZyYW1lLT5kYXRhLCBqKyssIHV2ZC0+bWF4X2ZyYW1lX3NpemUpOworCQlmcmFtZS0+ZnJhbWVTdGF0ZSA9IEZyYW1lU3RhdGVfUmVhZHk7CisJfQorI2VuZGlmCit9CisKKy8qCisgKiBpYm1jYW1fdmVpbygpCisgKgorICogSGlzdG9yeToKKyAqIDEvMjcvMDAgIEFkZGVkIGNoZWNrIGZvciBkZXYgPT0gTlVMTDsgdGhpcyBoYXBwZW5zIGlmIGNhbWVyYSBpcyB1bnBsdWdnZWQuCisgKi8KK3N0YXRpYyBpbnQgaWJtY2FtX3ZlaW8oCisJc3RydWN0IHV2ZCAqdXZkLAorCXVuc2lnbmVkIGNoYXIgcmVxLAorCXVuc2lnbmVkIHNob3J0IHZhbHVlLAorCXVuc2lnbmVkIHNob3J0IGluZGV4KQoreworCXN0YXRpYyBjb25zdCBjaGFyIHByb2NbXSA9ICJpYm1jYW1fdmVpbyI7CisJdW5zaWduZWQgY2hhciBjcFs4XSAvKiA9IHsgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiwgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiB9ICovOworCWludCBpOworCisJaWYgKCFDQU1FUkFfSVNfT1BFUkFUSU9OQUwodXZkKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocmVxID09IDEpIHsKKwkJaSA9IHVzYl9jb250cm9sX21zZygKKwkJCXV2ZC0+ZGV2LAorCQkJdXNiX3JjdmN0cmxwaXBlKHV2ZC0+ZGV2LCAwKSwKKwkJCXJlcSwKKwkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQsCisJCQl2YWx1ZSwKKwkJCWluZGV4LAorCQkJY3AsCisJCQlzaXplb2YoY3ApLAorCQkJMTAwMCk7CisjaWYgMAorCQlpbmZvKCJVU0IgPT4gJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggIgorCQkgICAgICAgIihyZXE9JCUwMnggdmFsPSQlMDR4IGluZD0kJTA0eCkiLAorCQkgICAgICAgY3BbMF0sY3BbMV0sY3BbMl0sY3BbM10sY3BbNF0sY3BbNV0sY3BbNl0sY3BbN10sCisJCSAgICAgICByZXEsIHZhbHVlLCBpbmRleCk7CisjZW5kaWYKKwl9IGVsc2UgeworCQlpID0gdXNiX2NvbnRyb2xfbXNnKAorCQkJdXZkLT5kZXYsCisJCQl1c2Jfc25kY3RybHBpcGUodXZkLT5kZXYsIDApLAorCQkJcmVxLAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQsCisJCQl2YWx1ZSwKKwkJCWluZGV4LAorCQkJTlVMTCwKKwkJCTAsCisJCQkxMDAwKTsKKwl9CisJaWYgKGkgPCAwKSB7CisJCWVycigiJXM6IEVSUk9SPSVkLiBDYW1lcmEgc3RvcHBlZDsgUmVjb25uZWN0IG9yIHJlbG9hZCBkcml2ZXIuIiwKKwkJICAgIHByb2MsIGkpOworCQl1dmQtPmxhc3RfZXJyb3IgPSBpOworCX0KKwlyZXR1cm4gaTsKK30KKworLyoKKyAqIGlibWNhbV9jYWxjdWxhdGVfZnBzKCkKKyAqCisgKiBUaGlzIHByb2NlZHVyZSByb3VnaGx5IGNhbGN1bGF0ZXMgdGhlIHJlYWwgZnJhbWUgcmF0ZSBiYXNlZAorICogb24gRlBTIGNvZGUgKGZyYW1lcmF0ZT1OTk4gb3B0aW9uKS4gQWN0dWFsIEZQUyBkaWZmZXJzCisgKiBzbGlnaHRseSBkZXBlbmRpbmcgb24gbGlnaHRpbmcgY29uZGl0aW9ucywgc28gdGhhdCBhY3R1YWwgZnJhbWUKKyAqIHJhdGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgY2FtZXJhLiBTaW5jZSBJIGRvbid0IGtub3cgaG93IHRvIGFzaworICogdGhlIGNhbWVyYSB3aGF0IEZQUyBpcyBub3cgSSBoYXZlIHRvIHVzZSB0aGUgRlBTIGNvZGUgaW5zdGVhZC4KKyAqCisgKiBUaGUgRlBTIGNvZGUgaXMgaW4gcmFuZ2UgWzAuLjZdLCAwIGlzIHNsb3dlc3QsIDYgaXMgZmFzdGVzdC4KKyAqIENvcnJlc3BvbmRpbmcgcmVhbCBGUFMgc2hvdWxkIGJlIGluIHJhbmdlIFszLi4zMF0gZnJhbWVzIHBlciBzZWNvbmQuCisgKiBUaGUgY29udmVyc2lvbiBmb3JtdWxhIGlzIG9idmlvdXM6CisgKgorICogcmVhbF9mcHMgPSAzICsgKGZwc19jb2RlICogNC41KQorICoKKyAqIEhpc3Rvcnk6CisgKiAxLzE4LzAwICBDcmVhdGVkLgorICovCitzdGF0aWMgaW50IGlibWNhbV9jYWxjdWxhdGVfZnBzKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlyZXR1cm4gMyArIGZyYW1lcmF0ZSo0ICsgZnJhbWVyYXRlLzI7Cit9CisKKy8qCisgKiBpYm1jYW1fc2VuZF9GRl8wNF8wMigpCisgKgorICogVGhpcyBwcm9jZWR1cmUgc2VuZHMgbWFnaWMgMy1jb21tYW5kIHByZWZpeCB0byB0aGUgY2FtZXJhLgorICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBwcmVmaXggaXMgbm90IGtub3duLgorICoKKyAqIEhpc3Rvcnk6CisgKiAxLzIvMDAgICBDcmVhdGVkLgorICovCitzdGF0aWMgdm9pZCBpYm1jYW1fc2VuZF9GRl8wNF8wMihzdHJ1Y3QgdXZkICp1dmQpCit7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwRkYsIDB4MDEyNyk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDQsIDB4MDEyNCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDIsIDB4MDEyNCk7Cit9CisKK3N0YXRpYyB2b2lkIGlibWNhbV9zZW5kXzAwXzA0XzA2KHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTI0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNiwgMHgwMTI0KTsKK30KKworc3RhdGljIHZvaWQgaWJtY2FtX3NlbmRfeF8wMChzdHJ1Y3QgdXZkICp1dmQsIHVuc2lnbmVkIHNob3J0IHgpCit7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCB4LCAgICAgIDB4MDEyNyk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNCk7Cit9CisKK3N0YXRpYyB2b2lkIGlibWNhbV9zZW5kX3hfMDBfMDUoc3RydWN0IHV2ZCAqdXZkLCB1bnNpZ25lZCBzaG9ydCB4KQoreworCWlibWNhbV9zZW5kX3hfMDAodXZkLCB4KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNSwgMHgwMTI0KTsKK30KKworc3RhdGljIHZvaWQgaWJtY2FtX3NlbmRfeF8wMF8wNV8wMihzdHJ1Y3QgdXZkICp1dmQsIHVuc2lnbmVkIHNob3J0IHgpCit7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCB4LCAgICAgIDB4MDEyNyk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDUsIDB4MDEyNCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDIsIDB4MDEyNCk7Cit9CisKK3N0YXRpYyB2b2lkIGlibWNhbV9zZW5kX3hfMDFfMDBfMDUoc3RydWN0IHV2ZCAqdXZkLCB1bnNpZ25lZCBzaG9ydCB4KQoreworCWlibWNhbV92ZWlvKHV2ZCwgMCwgeCwgICAgICAweDAxMjcpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMjQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA1LCAweDAxMjQpOworfQorCitzdGF0aWMgdm9pZCBpYm1jYW1fc2VuZF94XzAwXzA1XzAyXzAxKHN0cnVjdCB1dmQgKnV2ZCwgdW5zaWduZWQgc2hvcnQgeCkKK3sKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIHgsICAgICAgMHgwMTI3KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNSwgMHgwMTI0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMiwgMHgwMTI0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTI0KTsKK30KKworc3RhdGljIHZvaWQgaWJtY2FtX3NlbmRfeF8wMF8wNV8wMl8wOF8wMShzdHJ1Y3QgdXZkICp1dmQsIHVuc2lnbmVkIHNob3J0IHgpCit7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCB4LCAgICAgIDB4MDEyNyk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDUsIDB4MDEyNCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDIsIDB4MDEyNCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDgsIDB4MDEyNCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDEyNCk7Cit9CisKK3N0YXRpYyB2b2lkIGlibWNhbV9QYWNrZXRfRm9ybWF0MShzdHJ1Y3QgdXZkICp1dmQsIHVuc2lnbmVkIGNoYXIgZmtleSwgdW5zaWduZWQgY2hhciB2YWwpCit7CisJaWJtY2FtX3NlbmRfeF8wMV8wMF8wNSh1dmQsIHVua25vd25fODgpOworCWlibWNhbV9zZW5kX3hfMDBfMDUodXZkLCBma2V5KTsKKwlpYm1jYW1fc2VuZF94XzAwXzA1XzAyXzA4XzAxKHV2ZCwgdmFsKTsKKwlpYm1jYW1fc2VuZF94XzAwXzA1KHV2ZCwgdW5rbm93bl84OCk7CisJaWJtY2FtX3NlbmRfeF8wMF8wNV8wMl8wMSh1dmQsIGZrZXkpOworCWlibWNhbV9zZW5kX3hfMDBfMDUodXZkLCB1bmtub3duXzg5KTsKKwlpYm1jYW1fc2VuZF94XzAwKHV2ZCwgZmtleSk7CisJaWJtY2FtX3NlbmRfMDBfMDRfMDYodXZkKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDEsIDB4MDAwMCwgMHgwMTI2KTsKKwlpYm1jYW1fc2VuZF9GRl8wNF8wMih1dmQpOworfQorCitzdGF0aWMgdm9pZCBpYm1jYW1fUGFja2V0Rm9ybWF0MihzdHJ1Y3QgdXZkICp1dmQsIHVuc2lnbmVkIGNoYXIgZmtleSwgdW5zaWduZWQgY2hhciB2YWwpCit7CisJaWJtY2FtX3NlbmRfeF8wMV8wMF8wNQkodXZkLCB1bmtub3duXzg4KTsKKwlpYm1jYW1fc2VuZF94XzAwXzA1CSh1dmQsIGZrZXkpOworCWlibWNhbV9zZW5kX3hfMDBfMDVfMDIJKHV2ZCwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgaWJtY2FtX21vZGVsMl9QYWNrZXQyKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBmZiwgMHgwMTJkKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhMywgMHgwMTI0KTsKK30KKworc3RhdGljIHZvaWQgaWJtY2FtX21vZGVsMl9QYWNrZXQxKHN0cnVjdCB1dmQgKnV2ZCwgdW5zaWduZWQgc2hvcnQgdjEsIHVuc2lnbmVkIHNob3J0IHYyKQoreworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGZmLCAweDAxMmUpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgdjEsICAgICAweDAxMmYpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGZmLCAweDAxMzApOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhjNzE5LCAweDAxMjQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgdjIsICAgICAweDAxMjcpOworCisJaWJtY2FtX21vZGVsMl9QYWNrZXQyKHV2ZCk7Cit9CisKKy8qCisgKiBpYm1jYW1fbW9kZWwzX1BhY2tldDEoKQorICoKKyAqIDAwXzAwNzhfMDEyZAkKKyAqIDAwXzAwOTdfMDEyZgorICogMDBfZDE0MV8wMTI0CQorICogMDBfMDA5Nl8wMTI3CisgKiAwMF9mZWE4XzAxMjQJCisqLworc3RhdGljIHZvaWQgaWJtY2FtX21vZGVsM19QYWNrZXQxKHN0cnVjdCB1dmQgKnV2ZCwgdW5zaWduZWQgc2hvcnQgdjEsIHVuc2lnbmVkIHNob3J0IHYyKQoreworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDc4LCAweDAxMmQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgdjEsICAgICAweDAxMmYpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgdjIsICAgICAweDAxMjcpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworfQorCitzdGF0aWMgdm9pZCBpYm1jYW1fbW9kZWw0X0JyaWdodG5lc3NQYWNrZXQoc3RydWN0IHV2ZCAqdXZkLCBpbnQgaSkKK3sKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyNiwgMHgwMTJmKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIGksICAgICAgMHgwMTI3KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTMwKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODJhOCwgMHgwMTI0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOCwgMHgwMTJkKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTJmKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmZmYSwgMHgwMTI0KTsKK30KKworLyoKKyAqIGlibWNhbV9hZGp1c3RfY29udHJhc3QoKQorICoKKyAqIFRoZSBjb250cmFzdCB2YWx1ZSBjaGFuZ2VzIGZyb20gMCAoaGlnaCBjb250cmFzdCkgdG8gMTUgKGxvdyBjb250cmFzdCkuCisgKiBUaGlzIGlzIGluIHJldmVyc2UgdG8gdXN1YWwgb3JkZXIgb2YgdGhpbmdzIChzdWNoIGFzIFRWIGNvbnRyb2xzKSwgc28KKyAqIHdlIHJldmVyc2UgaXQgYWdhaW4gaGVyZS4KKyAqCisgKiBUT0RPOiB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIHNlbmQgdGhlIHNldHVwIDUgdGltZXMuLi4KKyAqCisgKiBIaXN0b3J5OgorICogMS8yLzAwICAgQ3JlYXRlZC4KKyAqLworc3RhdGljIHZvaWQgaWJtY2FtX2FkanVzdF9jb250cmFzdChzdHJ1Y3QgdXZkICp1dmQpCit7CisJdW5zaWduZWQgY2hhciBhX2NvbnRyYXN0ID0gdXZkLT52cGljLmNvbnRyYXN0ID4+IDEyOworCXVuc2lnbmVkIGNoYXIgbmV3X2NvbnRyYXN0OworCisJaWYgKGFfY29udHJhc3QgPj0gMTYpCisJCWFfY29udHJhc3QgPSAxNTsKKwluZXdfY29udHJhc3QgPSAxNSAtIGFfY29udHJhc3Q7CisJaWYgKG5ld19jb250cmFzdCA9PSB1dmQtPnZwaWNfb2xkLmNvbnRyYXN0KQorCQlyZXR1cm47CisJdXZkLT52cGljX29sZC5jb250cmFzdCA9IG5ld19jb250cmFzdDsKKwlzd2l0Y2ggKElCTUNBTV9UKHV2ZCktPmNhbWVyYV9tb2RlbCkgeworCWNhc2UgSUJNQ0FNX01PREVMXzE6CisJeworCQljb25zdCBpbnQgbnRyaWVzID0gNTsKKwkJaW50IGk7CisJCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspIHsKKwkJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIGNvbnRyYXN0XzE0LCBuZXdfY29udHJhc3QpOworCQkJaWJtY2FtX3NlbmRfRkZfMDRfMDIodXZkKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBJQk1DQU1fTU9ERUxfMjoKKwljYXNlIElCTUNBTV9NT0RFTF80OgorCQkvKiBNb2RlbHMgMiwgNCBkbyBub3QgaGF2ZSB0aGlzIGNvbnRyb2w7IGltcGxlbWVudGVkIGluIHNvZnR3YXJlLiAqLworCQlicmVhazsKKwljYXNlIElCTUNBTV9NT0RFTF8zOgorCXsJLyogUHJlc2V0IGhhcmR3YXJlIHZhbHVlcyAqLworCQlzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwkJCXVuc2lnbmVkIHNob3J0IGN2MTsKKwkJCXVuc2lnbmVkIHNob3J0IGN2MjsKKwkJCXVuc2lnbmVkIHNob3J0IGN2MzsKKwkJfSBjdls3XSA9IHsKKwkJCXsgMHgwNSwgMHgwNSwgMHgwZiB9LAkvKiBNaW5pbXVtICovCisJCQl7IDB4MDQsIDB4MDQsIDB4MTYgfSwKKwkJCXsgMHgwMiwgMHgwMywgMHgxNiB9LAorCQkJeyAweDAyLCAweDA4LCAweDE2IH0sCisJCQl7IDB4MDEsIDB4MGMsIDB4MTYgfSwKKwkJCXsgMHgwMSwgMHgwZSwgMHgxNiB9LAorCQkJeyAweDAxLCAweDEwLCAweDE2IH0JLyogTWF4aW11bSAqLworCQl9OworCQlpbnQgaSA9IGFfY29udHJhc3QgLyAyOworCQlSRVNUUklDVF9UT19SQU5HRShpLCAwLCA2KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwYyk7CS8qIFN0b3AgKi8KKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDY3LCBjdltpXS5jdjEpOworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNWIsIGN2W2ldLmN2Mik7CisJCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA1YywgY3ZbaV0uY3YzKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDExNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMGMpOwkvKiBHbyEgKi8KKwkJdXNiX2NsZWFyX2hhbHQodXZkLT5kZXYsIHVzYl9yY3Zpc29jcGlwZSh1dmQtPmRldiwgdXZkLT52aWRlb19lbmRwKSk7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBpYm1jYW1fY2hhbmdlX2xpZ2h0aW5nX2NvbmRpdGlvbnMoKQorICoKKyAqIENhbWVyYSBtb2RlbCAxOgorICogV2UgaGF2ZSAzIGxldmVscyBvZiBsaWdodGluZyBjb25kaXRpb25zOiAwPUJyaWdodCwgMT1NZWRpdW0sIDI9TG93LgorICoKKyAqIENhbWVyYSBtb2RlbCAyOgorICogV2UgaGF2ZSAxNiBsZXZlbHMgb2YgbGlnaHRpbmcsIDAgZm9yIGJyaWdodCBsaWdodCBhbmQgdXAgdG8gMTUgZm9yCisgKiBsb3cgbGlnaHQuIEJ1dCB2YWx1ZXMgYWJvdmUgNSBvciBzbyBhcmUgdXNlbGVzcyBiZWNhdXNlIGNhbWVyYSBpcworICogbm90IHJlYWxseSBjYXBhYmxlIHRvIHByb2R1Y2UgYW55dGhpbmcgd29ydGggdmlld2luZyBhdCBzdWNoIGxpZ2h0LgorICogVGhpcyBzZXR0aW5nIG1heSBiZSBhbHRlcmVkIG9ubHkgaW4gY2VydGFpbiBjYW1lcmEgc3RhdGUuCisgKgorICogTG93IGxpZ2h0aW5nIGZvcmNlcyBzbG93ZXIgRlBTLiBMaWdodGluZyBpcyBzZXQgYXMgYSBtb2R1bGUgcGFyYW1ldGVyLgorICoKKyAqIEhpc3Rvcnk6CisgKiAxLzUvMDAgICBDcmVhdGVkLgorICogMi8yMC8wMCAgQWRkZWQgc3VwcG9ydCBmb3IgTW9kZWwgMiBjYW1lcmFzLgorICovCitzdGF0aWMgdm9pZCBpYm1jYW1fY2hhbmdlX2xpZ2h0aW5nX2NvbmRpdGlvbnMoc3RydWN0IHV2ZCAqdXZkKQoreworCXN0YXRpYyBjb25zdCBjaGFyIHByb2NbXSA9ICJpYm1jYW1fY2hhbmdlX2xpZ2h0aW5nX2NvbmRpdGlvbnMiOworCisJaWYgKGRlYnVnID4gMCkKKwkJaW5mbygiJXM6IFNldCBsaWdodGluZyB0byAlaHUuIiwgcHJvYywgbGlnaHRpbmcpOworCisJc3dpdGNoIChJQk1DQU1fVCh1dmQpLT5jYW1lcmFfbW9kZWwpIHsKKwljYXNlIElCTUNBTV9NT0RFTF8xOgorCXsKKwkJY29uc3QgaW50IG50cmllcyA9IDU7CisJCWludCBpOworCQlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQorCQkJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgbGlnaHRfMjcsICh1bnNpZ25lZCBzaG9ydCkgbGlnaHRpbmcpOworCQlicmVhazsKKwl9CisJY2FzZSBJQk1DQU1fTU9ERUxfMjoKKyNpZiAwCisJCS8qCisJCSAqIFRoaXMgY29tbWFuZCBhcHBhcmVudGx5IHJlcXVpcmVzIGNhbWVyYSB0byBiZSBzdG9wcGVkLiBNeQorCQkgKiBleHBlcmltZW50cyBzaG93ZWQgdGhhdCBpdCAtaXMtIHBvc3NpYmxlIHRvIGFsdGVyIHRoZSBsaWdodGluZworCQkgKiBjb25kaXRpb25zIHNldHRpbmcgIm9uIHRoZSBmbHkiLCBidXQgd2h5IGJvdGhlcj8gVGhpcyBzZXR0aW5nIGRvZXMKKwkJICogbm90IHdvcmsgcmVsaWFibHkgaW4gYWxsIGNhc2VzLCBzbyBJIGRlY2lkZWQgc2ltcGx5IHRvIGxlYXZlIHRoZQorCQkgKiBzZXR0aW5nIHdoZXJlIFhpcmxpbmsgcHV0IGl0IC0gaW4gdGhlIGNhbWVyYSBzZXR1cCBwaGFzZS4gVGhpcyBjb2RlCisJCSAqIGlzIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBpdCBkb2VzIG5vdCB3b3JrIGF0IC1hbnktIG1vbWVudCwgc28gaXRzCisJCSAqIHByZXNlbmNlIG1ha2VzIG5vIHNlbnNlLiBZb3UgbWF5IHVzZSBpdCBmb3IgZXhwZXJpbWVudHMuCisJCSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTBjKTsJLyogU3RvcCBjYW1lcmEgKi8KKwkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgbW9kMl9zZW5zaXRpdml0eSwgbGlnaHRpbmcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTBjKTsJLyogU3RhcnQgY2FtZXJhICovCisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSBJQk1DQU1fTU9ERUxfMzoKKwljYXNlIElCTUNBTV9NT0RFTF80OgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIGlibWNhbV9zZXRfc2hhcnBuZXNzKCkKKyAqCisgKiBDYW1lcmFzIG1vZGVsIDEgaGF2ZSBpbnRlcm5hbCBzbW9vdGhpbmcgZmVhdHVyZS4gSXQgaXMgY29udHJvbGxlZCBieSB2YWx1ZSBpbgorICogcmFuZ2UgWzAuLjZdLCB3aGVyZSAwIGlzIG1vc3Qgc21vb3RoIGFuZCA2IGlzIG1vc3Qgc2hhcnAgKHJhdyBpbWFnZSwgSSBndWVzcykuCisgKiBSZWNvbW1lbmRlZCB2YWx1ZSBpcyA0LiBDYW1lcmFzIG1vZGVsIDIgZG8gbm90IGhhdmUgdGhpcyBmZWF0dXJlIGF0IGFsbC4KKyAqLworc3RhdGljIHZvaWQgaWJtY2FtX3NldF9zaGFycG5lc3Moc3RydWN0IHV2ZCAqdXZkKQoreworCXN0YXRpYyBjb25zdCBjaGFyIHByb2NbXSA9ICJpYm1jYW1fc2V0X3NoYXJwbmVzcyI7CisKKwlzd2l0Y2ggKElCTUNBTV9UKHV2ZCktPmNhbWVyYV9tb2RlbCkgeworCWNhc2UgSUJNQ0FNX01PREVMXzE6CisJeworCQlzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgc2FbXSA9IHsgMHgxMSwgMHgxMywgMHgxNiwgMHgxOCwgMHgxYSwgMHg4LCAweDBhIH07CisJCXVuc2lnbmVkIHNob3J0IGksIHN2OworCisJCVJFU1RSSUNUX1RPX1JBTkdFKHNoYXJwbmVzcywgU0hBUlBORVNTX01JTiwgU0hBUlBORVNTX01BWCk7CisJCWlmIChkZWJ1ZyA+IDApCisJCQlpbmZvKCIlczogU2V0IHNoYXJwbmVzcyB0byAlaHUuIiwgcHJvYywgc2hhcnBuZXNzKTsKKworCQlzdiA9IHNhW3NoYXJwbmVzcyAtIFNIQVJQTkVTU19NSU5dOworCQlmb3IgKGk9MDsgaSA8IDI7IGkrKykgeworCQkJaWJtY2FtX3NlbmRfeF8wMV8wMF8wNQkodXZkLCB1bmtub3duXzg4KTsKKwkJCWlibWNhbV9zZW5kX3hfMDBfMDUJCSh1dmQsIHNoYXJwXzEzKTsKKwkJCWlibWNhbV9zZW5kX3hfMDBfMDVfMDIJKHV2ZCwgc3YpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIElCTUNBTV9NT0RFTF8yOgorCWNhc2UgSUJNQ0FNX01PREVMXzQ6CisJCS8qIE1vZGVscyAyLCA0IGRvIG5vdCBoYXZlIHRoaXMgY29udHJvbCAqLworCQlicmVhazsKKwljYXNlIElCTUNBTV9NT0RFTF8zOgorCXsJLyoKKwkJICogIlVzZSBhIHRhYmxlIG9mIG1hZ2ljIG51bWJlcnMuCisJCSAqICBUaGlzIHNldHRpbmcgZG9lc24ndCByZWFsbHkgY2hhbmdlIG11Y2guCisJCSAqICBCdXQgdGhhdCdzIGhvdyBXaW5kb3dzIGRvZXMgaXQuIgorCQkgKi8KKwkJc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJCQl1bnNpZ25lZCBzaG9ydCBzdjE7CisJCQl1bnNpZ25lZCBzaG9ydCBzdjI7CisJCQl1bnNpZ25lZCBzaG9ydCBzdjM7CisJCQl1bnNpZ25lZCBzaG9ydCBzdjQ7CisJCX0gc3ZbN10gPSB7CisJCQl7IDB4MDAsIDB4MDAsIDB4MDUsIDB4MTQgfSwJLyogU21vb3RoZXN0ICovCisJCQl7IDB4MDEsIDB4MDQsIDB4MDUsIDB4MTQgfSwKKwkJCXsgMHgwMiwgMHgwNCwgMHgwNSwgMHgxNCB9LAorCQkJeyAweDAzLCAweDA0LCAweDA1LCAweDE0IH0sCisJCQl7IDB4MDMsIDB4MDUsIDB4MDUsIDB4MTQgfSwKKwkJCXsgMHgwMywgMHgwNiwgMHgwNSwgMHgxNCB9LAorCQkJeyAweDAzLCAweDA3LCAweDA1LCAweDE0IH0JLyogU2hhcnBlc3QgKi8KKwkJfTsKKwkJUkVTVFJJQ1RfVE9fUkFOR0Uoc2hhcnBuZXNzLCBTSEFSUE5FU1NfTUlOLCBTSEFSUE5FU1NfTUFYKTsKKwkJUkVTVFJJQ1RfVE9fUkFOR0Uoc2hhcnBuZXNzLCAwLCA2KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwYyk7CS8qIFN0b3AgKi8KKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDYwLCBzdltzaGFycG5lc3NdLnN2MSk7CisJCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA2MSwgc3Zbc2hhcnBuZXNzXS5zdjIpOworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNjIsIHN2W3NoYXJwbmVzc10uc3YzKTsKKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDYzLCBzdltzaGFycG5lc3NdLnN2NCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMTQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTBjKTsJLyogR28hICovCisJCXVzYl9jbGVhcl9oYWx0KHV2ZC0+ZGV2LCB1c2JfcmN2aXNvY3BpcGUodXZkLT5kZXYsIHV2ZC0+dmlkZW9fZW5kcCkpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTEzKTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIGlibWNhbV9zZXRfYnJpZ2h0bmVzcygpCisgKgorICogVGhpcyBwcm9jZWR1cmUgY2hhbmdlcyBicmlnaHRuZXNzIG9mIHRoZSBwaWN0dXJlLgorICovCitzdGF0aWMgdm9pZCBpYm1jYW1fc2V0X2JyaWdodG5lc3Moc3RydWN0IHV2ZCAqdXZkKQoreworCXN0YXRpYyBjb25zdCBjaGFyIHByb2NbXSA9ICJpYm1jYW1fc2V0X2JyaWdodG5lc3MiOworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBuID0gMTsKKworCWlmIChkZWJ1ZyA+IDApCisJCWluZm8oIiVzOiBTZXQgYnJpZ2h0bmVzcyB0byAlaHUuIiwgcHJvYywgdXZkLT52cGljLmJyaWdodG5lc3MpOworCisJc3dpdGNoIChJQk1DQU1fVCh1dmQpLT5jYW1lcmFfbW9kZWwpIHsKKwljYXNlIElCTUNBTV9NT0RFTF8xOgorCXsKKwkJdW5zaWduZWQgc2hvcnQgaSwgaiwgYnZbM107CisJCWJ2WzBdID0gYnZbMV0gPSBidlsyXSA9IHV2ZC0+dnBpYy5icmlnaHRuZXNzID4+IDEwOworCQlpZiAoYnZbMF0gPT0gKHV2ZC0+dnBpY19vbGQuYnJpZ2h0bmVzcyA+PiAxMCkpCisJCQlyZXR1cm47CisJCXV2ZC0+dnBpY19vbGQuYnJpZ2h0bmVzcyA9IGJ2WzBdOworCQlmb3IgKGo9MDsgaiA8IDM7IGorKykKKwkJCWZvciAoaT0wOyBpIDwgbjsgaSsrKQorCQkJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIGJyaWdodF8zeFtqXSwgYnZbal0pOworCQlicmVhazsKKwl9CisJY2FzZSBJQk1DQU1fTU9ERUxfMjoKKwl7CisJCXVuc2lnbmVkIHNob3J0IGksIGo7CisJCWkgPSB1dmQtPnZwaWMuYnJpZ2h0bmVzcyA+PiAxMjsJLyogMCAuLiAxNSAqLworCQlqID0gMHg2MCArIGkgKiAoKDB4ZWUgLSAweDYwKSAvIDE2KTsJLyogMHg2MCAuLiAweGVlIG9yIHNvICovCisJCWlmICh1dmQtPnZwaWNfb2xkLmJyaWdodG5lc3MgPT0gaikKKwkJCWJyZWFrOworCQl1dmQtPnZwaWNfb2xkLmJyaWdodG5lc3MgPSBqOworCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCBtb2QyX2JyaWdodG5lc3MsIGopOworCQlicmVhazsKKwl9CisJY2FzZSBJQk1DQU1fTU9ERUxfMzoKKwl7CisJCS8qIE1vZGVsIDM6IEJyaWdodG5lc3MgcmFuZ2UgJ2knIGluIFsweDBDLi4weDNGXSAqLworCQl1bnNpZ25lZCBzaG9ydCBpID0KKwkJCTB4MEMgKyAodXZkLT52cGljLmJyaWdodG5lc3MgLyAoMHhGRkZGIC8gKDB4M0YgLSAweDBDICsgMSkpKTsKKwkJUkVTVFJJQ1RfVE9fUkFOR0UoaSwgMHgwQywgMHgzRik7CisJCWlmICh1dmQtPnZwaWNfb2xkLmJyaWdodG5lc3MgPT0gaSkKKwkJCWJyZWFrOworCQl1dmQtPnZwaWNfb2xkLmJyaWdodG5lc3MgPSBpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTBjKTsJLyogU3RvcCAqLworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMzYsIGkpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTE0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDEwYyk7CS8qIEdvISAqLworCQl1c2JfY2xlYXJfaGFsdCh1dmQtPmRldiwgdXNiX3Jjdmlzb2NwaXBlKHV2ZC0+ZGV2LCB1dmQtPnZpZGVvX2VuZHApKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDExMyk7CisJCWJyZWFrOworCX0KKwljYXNlIElCTUNBTV9NT0RFTF80OgorCXsKKwkJLyogTW9kZWwgNDogQnJpZ2h0bmVzcyByYW5nZSAnaScgaW4gWzB4MDQuLjB4YjRdICovCisJCXVuc2lnbmVkIHNob3J0IGkgPSAweDA0ICsgKHV2ZC0+dnBpYy5icmlnaHRuZXNzIC8gKDB4RkZGRiAvICgweGI0IC0gMHgwNCArIDEpKSk7CisJCVJFU1RSSUNUX1RPX1JBTkdFKGksIDB4MDQsIDB4YjQpOworCQlpZiAodXZkLT52cGljX29sZC5icmlnaHRuZXNzID09IGkpCisJCQlicmVhazsKKwkJdXZkLT52cGljX29sZC5icmlnaHRuZXNzID0gaTsKKwkJaWJtY2FtX21vZGVsNF9CcmlnaHRuZXNzUGFja2V0KHV2ZCwgaSk7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGlibWNhbV9zZXRfaHVlKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlzd2l0Y2ggKElCTUNBTV9UKHV2ZCktPmNhbWVyYV9tb2RlbCkgeworCWNhc2UgSUJNQ0FNX01PREVMXzI6CisJeworCQl1bnNpZ25lZCBzaG9ydCBodWUgPSB1dmQtPnZwaWMuaHVlID4+IDk7IC8qIDAgLi4gN0YgKi8KKwkJaWYgKHV2ZC0+dnBpY19vbGQuaHVlID09IGh1ZSkKKwkJCXJldHVybjsKKwkJdXZkLT52cGljX29sZC5odWUgPSBodWU7CisJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIG1vZDJfaHVlLCBodWUpOworCQkvKiBpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCBtb2QyX3NhdHVyYXRpb24sIHNhdCk7ICovCisJCWJyZWFrOworCX0KKwljYXNlIElCTUNBTV9NT0RFTF8zOgorCXsKKyNpZiAwIC8qIFRoaXMgc2VlbXMgbm90IHRvIHdvcmsuIE5vIHByb2JsZW0sIHdpbGwgZml4IHByb2dyYW1tYXRpY2FsbHkgKi8KKwkJdW5zaWduZWQgc2hvcnQgaHVlID0gMHgwNSArICh1dmQtPnZwaWMuaHVlIC8gKDB4RkZGRiAvICgweDM3IC0gMHgwNSArIDEpKSk7CisJCVJFU1RSSUNUX1RPX1JBTkdFKGh1ZSwgMHgwNSwgMHgzNyk7CisJCWlmICh1dmQtPnZwaWNfb2xkLmh1ZSA9PSBodWUpCisJCQlyZXR1cm47CisJCXV2ZC0+dnBpY19vbGQuaHVlID0gaHVlOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTBjKTsJLyogU3RvcCAqLworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwN2UsIGh1ZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMTQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTBjKTsJLyogR28hICovCisJCXVzYl9jbGVhcl9oYWx0KHV2ZC0+ZGV2LCB1c2JfcmN2aXNvY3BpcGUodXZkLT5kZXYsIHV2ZC0+dmlkZW9fZW5kcCkpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTEzKTsKKyNlbmRpZgorCQlicmVhazsKKwl9CisJY2FzZSBJQk1DQU1fTU9ERUxfNDoKKwl7CisJCXVuc2lnbmVkIHNob3J0IHJfZ2FpbiwgZ19nYWluLCBiX2dhaW4sIGh1ZTsKKworCQkvKgorCQkgKiBJIGFtIG5vdCBzdXJlIHIvZy9iX2dhaW4gdmFyaWFibGVzIGV4YWN0bHkgY29udHJvbCBnYWluCisJCSAqIG9mIHRob3NlIGNoYW5uZWxzLiBNb3N0IGxpa2VseSB0aGV5IHN1YnRseSBjaGFuZ2Ugc29tZQorCQkgKiB2ZXJ5IGludGVybmFsIGltYWdlIHByb2Nlc3Npbmcgc2V0dGluZ3MgaW4gdGhlIGNhbWVyYS4KKwkJICogSW4gYW55IGNhc2UsIGhlcmUgaXMgd2hhdCB0aGV5IGRvLCBhbmQgZmVlbCBmcmVlIHRvIHR3ZWFrOgorCQkgKgorCQkgKiByX2dhaW46IHNlcmlvdXNseSBhZmZlY3RzIHJlZCBnYWluCisJCSAqIGdfZ2Fpbjogc2VyaW91c2x5IGFmZmVjdHMgZ3JlZW4gZ2FpbgorCQkgKiBiX2dhaW46IHNlcmlvdXNseSBhZmZlY3RzIGJsdWUgZ2FpbgorCQkgKiBodWU6IGNoYW5nZXMgYXZlcmFnZSBjb2xvciBmcm9tIHZpb2xldCAoMCkgdG8gcmVkICgweEZGKQorCQkgKgorCQkgKiBUaGVzZSBzZXR0aW5ncyBhcmUgcHJlc2V0IGZvciBhIGRlY2VudCB3aGl0ZSBiYWxhbmNlIGluCisJCSAqIDMyMHgyNDAsIDM1MngyODggbW9kZXMuIExvdy1yZXMgbW9kZXMgZXhoaWJpdCBoaWdoZXIgY29udHJhc3QKKwkJICogYW5kIHRoZXJlZm9yZSBtYXkgbmVlZCBkaWZmZXJlbnQgdmFsdWVzIGhlcmUuCisJCSAqLworCQlodWUgPSAyMCArICh1dmQtPnZwaWMuaHVlID4+IDkpOworCQlzd2l0Y2ggKHV2ZC0+dmlkZW9zaXplKSB7CisJCWNhc2UgVklERU9TSVpFXzEyOHg5NjoKKwkJCXJfZ2FpbiA9IDkwOworCQkJZ19nYWluID0gMTY2OworCQkJYl9nYWluID0gMTc1OworCQkJYnJlYWs7CisJCWNhc2UgVklERU9TSVpFXzE2MHgxMjA6CisJCQlyX2dhaW4gPSA3MDsKKwkJCWdfZ2FpbiA9IDE2NjsKKwkJCWJfZ2FpbiA9IDE4NTsKKwkJCWJyZWFrOworCQljYXNlIFZJREVPU0laRV8xNzZ4MTQ0OgorCQkJcl9nYWluID0gMTYwOworCQkJZ19nYWluID0gMTc1OworCQkJYl9nYWluID0gMTg1OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyX2dhaW4gPSAxMjA7CisJCQlnX2dhaW4gPSAxNjY7CisJCQliX2dhaW4gPSAxNzU7CisJCQlicmVhazsKKwkJfQorCQlSRVNUUklDVF9UT19SQU5HRShodWUsIDEsIDB4N2YpOworCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxZSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgZ19nYWluLCAweDAxMjcpOwkvKiBHcmVlbiBnYWluICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgcl9nYWluLCAweDAxMmUpOwkvKiBSZWQgZ2FpbiAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIGJfZ2FpbiwgMHgwMTMwKTsJLyogQmx1ZSBnYWluICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIGh1ZSwgICAgMHgwMTJkKTsJLyogSHVlICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmNTQ1LCAweDAxMjQpOworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogaWJtY2FtX2FkanVzdF9waWN0dXJlKCkKKyAqCisgKiBUaGlzIHByb2NlZHVyZSBnZXRzIGNhbGxlZCBmcm9tIFY0TCBpbnRlcmZhY2UgdG8gdXBkYXRlIHBpY3R1cmUgc2V0dGluZ3MuCisgKiBIZXJlIHdlIGNoYW5nZSBicmlnaHRuZXNzIGFuZCBjb250cmFzdC4KKyAqLworc3RhdGljIHZvaWQgaWJtY2FtX2FkanVzdF9waWN0dXJlKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpYm1jYW1fYWRqdXN0X2NvbnRyYXN0KHV2ZCk7CisJaWJtY2FtX3NldF9icmlnaHRuZXNzKHV2ZCk7CisJaWJtY2FtX3NldF9odWUodXZkKTsKK30KKworc3RhdGljIGludCBpYm1jYW1fbW9kZWwxX3NldHVwKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwljb25zdCBpbnQgbnRyaWVzID0gNTsKKwlpbnQgaTsKKworCWlibWNhbV92ZWlvKHV2ZCwgMSwgMHgwMCwgMHgwMTI4KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDEsIDB4MDAsIDB4MDEwMCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAxLCAweDAxMDApOwkvKiBMRUQgT24gICovCisJaWJtY2FtX3ZlaW8odXZkLCAxLCAweDAwLCAweDAxMDApOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MSwgMHgwMTAwKTsJLyogTEVEIE9mZiAqLworCWlibWNhbV92ZWlvKHV2ZCwgMSwgMHgwMCwgMHgwMTAwKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDEsIDB4MDEwMCk7CS8qIExFRCBPbiAgKi8KKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDEsIDB4MDEwOCk7CisKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDMsIDB4MDExMik7CisJaWJtY2FtX3ZlaW8odXZkLCAxLCAweDAwLCAweDAxMTUpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwNiwgMHgwMTE1KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDEsIDB4MDAsIDB4MDExNik7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDQ0LCAweDAxMTYpOworCWlibWNhbV92ZWlvKHV2ZCwgMSwgMHgwMCwgMHgwMTE2KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4NDAsIDB4MDExNik7CisJaWJtY2FtX3ZlaW8odXZkLCAxLCAweDAwLCAweDAxMTUpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwZSwgMHgwMTE1KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MTksIDB4MDEyYyk7CisKKwlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDAwLCAweDFlKTsKKwlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDM5LCAweDBkKTsKKwlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDM5LCAweDA5KTsKKwlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDNiLCAweDAwKTsKKwlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDI4LCAweDIyKTsKKwlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCBsaWdodF8yNywgMCk7CisJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgMHgyYiwgMHgxZik7CisJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgMHgzOSwgMHgwOCk7CisKKwlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQorCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDJjLCAweDAwKTsKKworCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MzAsIDB4MTQpOworCisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDM5LCAweDAyKTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MDEsIDB4ZTEpOworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgwMiwgMHhjZCk7CisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDAzLCAweGNkKTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MDQsIDB4ZmEpOworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgzZiwgMHhmZik7CisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDM5LCAweDAwKTsKKworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgzOSwgMHgwMik7CisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDBhLCAweDM3KTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MGIsIDB4YjgpOworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgwYywgMHhmMyk7CisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDBkLCAweGUzKTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MGUsIDB4MGQpOworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgwZiwgMHhmMik7CisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDEwLCAweGQ1KTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MTEsIDB4YmEpOworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgxMiwgMHg1Myk7CisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDNmLCAweGZmKTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MzksIDB4MDApOworCisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDM5LCAweDAyKTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MTYsIDB4MDApOworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgxNywgMHgyOCk7CisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDE4LCAweDdkKTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MTksIDB4YmUpOworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgzZiwgMHhmZik7CisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDM5LCAweDAwKTsKKworCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MDAsIDB4MTgpOworCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MTMsIDB4MTgpOworCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MTQsIDB4MDYpOworCisJLyogVGhpcyBpcyBkZWZhdWx0IGJyaWdodG5lc3MgKi8KKwlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQorCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDMxLCAweDM3KTsKKwlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQorCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDMyLCAweDQ2KTsKKwlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQorCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDMzLCAweDU1KTsKKworCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MmUsIDB4MDQpOworCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MmQsIDB4MDQpOworCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MjksIDB4ODApOworCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MmMsIDB4MDEpOworCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MzAsIDB4MTcpOworCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MzksIDB4MDgpOworCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MzQsIDB4MDApOworCisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwLCAweDAxMDEpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMCwgMHgwMTBhKTsKKworCXN3aXRjaCAodXZkLT52aWRlb3NpemUpIHsKKwljYXNlIFZJREVPU0laRV8xMjh4OTY6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MCwgMHgwMTAzKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDYwLCAweDAxMDUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MGMsIDB4MDEwYik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwNCwgMHgwMTFiKTsJLyogU2FtZSBldmVyeXdoZXJlICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwYiwgMHgwMTFkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwLCAweDAxMWUpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwLCAweDAxMjkpOworCQlicmVhazsKKwljYXNlIFZJREVPU0laRV8xNzZ4MTQ0OgorCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YjAsIDB4MDEwMyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4ZiwgMHgwMTA1KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDA2LCAweDAxMGIpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDQsIDB4MDExYik7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MGQsIDB4MDExZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMCwgMHgwMTFlKTsJLyogU2FtZSBldmVyeXdoZXJlICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMywgMHgwMTI5KTsKKwkJYnJlYWs7CisJY2FzZSBWSURFT1NJWkVfMzUyeDI4ODoKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGIwLCAweDAxMDMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OTAsIDB4MDEwNSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMiwgMHgwMTBiKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDA0LCAweDAxMWIpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDA1LCAweDAxMWQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAsIDB4MDExZSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAsIDB4MDEyOSk7CisJCWJyZWFrOworCX0KKworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZiwgMHgwMTJiKTsKKworCS8qIFRoaXMgaXMgYW5vdGhlciBicmlnaHRuZXNzIC0gZG9uJ3Qga25vdyB3aHkgKi8KKwlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQorCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDMxLCAweGMzKTsKKwlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQorCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDMyLCAweGQyKTsKKwlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQorCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDMzLCAweGUxKTsKKworCS8qIERlZmF1bHQgY29udHJhc3QgKi8KKwlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQorCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCBjb250cmFzdF8xNCwgMHgwYSk7CisKKwkvKiBEZWZhdWx0IHNoYXJwbmVzcyAqLworCWZvciAoaT0wOyBpIDwgMjsgaSsrKQorCQlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIHNoYXJwXzEzLCAweDFhKTsJLyogTGV2ZWwgNCBGSVhNRSAqLworCisJLyogRGVmYXVsdCBsaWdodGluZyBjb25kaXRpb25zICovCisJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgbGlnaHRfMjcsIGxpZ2h0aW5nKTsgLyogMD1CcmlnaHQgMj1Mb3cgKi8KKworCS8qIEFzc29ydGVkIGluaXQgKi8KKworCXN3aXRjaCAodXZkLT52aWRlb3NpemUpIHsKKwljYXNlIFZJREVPU0laRV8xMjh4OTY6CisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MmIsIDB4MWUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YzksIDB4MDExOSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODAsIDB4MDEwOSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MzYsIDB4MDEwMik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgxYSwgMHgwMTA0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDA0LCAweDAxMWEpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDJiLCAweDAxMWMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MjMsIDB4MDEyYSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLworI2lmIDAKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwLCAweDAxMDYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MzgsIDB4MDEwNyk7CisjZWxzZQorCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDIsIDB4MDEwNik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgyYSwgMHgwMTA3KTsKKyNlbmRpZgorCQlicmVhazsKKwljYXNlIFZJREVPU0laRV8xNzZ4MTQ0OgorCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDJiLCAweDFlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGM5LCAweDAxMTkpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgwLCAweDAxMDkpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDA0LCAweDAxMDIpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDIsIDB4MDEwNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwNCwgMHgwMTFhKTsJLyogU2FtZSBldmVyeXdoZXJlICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgyYiwgMHgwMTFjKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDIzLCAweDAxMmEpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAxLCAweDAxMDYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4Y2EsIDB4MDEwNyk7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzM1MngyODg6CisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MmIsIDB4MWYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YzksIDB4MDExOSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODAsIDB4MDEwOSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDgsIDB4MDEwMik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMSwgMHgwMTA0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDA0LCAweDAxMWEpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDJmLCAweDAxMWMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MjMsIDB4MDEyYSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDMsIDB4MDEwNik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmNiwgMHgwMTA3KTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAoQ0FNRVJBX0lTX09QRVJBVElPTkFMKHV2ZCkgPyAwIDogLUVGQVVMVCk7Cit9CisKK3N0YXRpYyBpbnQgaWJtY2FtX21vZGVsMl9zZXR1cChzdHJ1Y3QgdXZkICp1dmQpCit7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwMCk7CS8qIExFRCBvbiAqLworCWlibWNhbV92ZWlvKHV2ZCwgMSwgMHgwMDAwLCAweDAxMTYpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDYwLCAweDAxMTYpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAyLCAweDAxMTIpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGJjLCAweDAxMmMpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA4LCAweDAxMmIpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDgpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMzMpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMDIpOworCXN3aXRjaCAodXZkLT52aWRlb3NpemUpIHsKKwljYXNlIFZJREVPU0laRV8xNzZ4MTQ0OgorCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyYywgMHgwMTAzKTsJLyogQWxsIGV4Y2VwdCAzMjB4MjQwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDQpOwkvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI0LCAweDAxMDUpOwkvKiAxNzZ4MTQ0LCAzNTJ4Mjg4ICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGI5LCAweDAxMGEpOwkvKiBVbmlxdWUgdG8gdGhpcyBtb2RlICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM4LCAweDAxMTkpOwkvKiBVbmlxdWUgdG8gdGhpcyBtb2RlICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMDYpOwkvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDkwLCAweDAxMDcpOwkvKiBVbmlxdWUgdG8gZXZlcnkgbW9kZSovCisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzMyMHgyNDA6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI4LCAweDAxMDMpOwkvKiBVbmlxdWUgdG8gdGhpcyBtb2RlICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDQpOwkvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFlLCAweDAxMDUpOwkvKiAzMjB4MjQwLCAzNTJ4MjQwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM5LCAweDAxMGEpOwkvKiBBbGwgZXhjZXB0IDE3NngxNDQgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNzAsIDB4MDExOSk7CS8qIEFsbCBleGNlcHQgMTc2eDE0NCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTA2KTsJLyogU2FtZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA5OCwgMHgwMTA3KTsJLyogVW5pcXVlIHRvIGV2ZXJ5IG1vZGUqLworCQlicmVhazsKKwljYXNlIFZJREVPU0laRV8zNTJ4MjQwOgorCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyYywgMHgwMTAzKTsJLyogQWxsIGV4Y2VwdCAzMjB4MjQwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDQpOwkvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFlLCAweDAxMDUpOwkvKiAzMjB4MjQwLCAzNTJ4MjQwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM5LCAweDAxMGEpOwkvKiBBbGwgZXhjZXB0IDE3NngxNDQgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNzAsIDB4MDExOSk7CS8qIEFsbCBleGNlcHQgMTc2eDE0NCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTA2KTsJLyogU2FtZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBkYSwgMHgwMTA3KTsJLyogVW5pcXVlIHRvIGV2ZXJ5IG1vZGUqLworCQlicmVhazsKKwljYXNlIFZJREVPU0laRV8zNTJ4Mjg4OgorCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyYywgMHgwMTAzKTsJLyogQWxsIGV4Y2VwdCAzMjB4MjQwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDQpOwkvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI0LCAweDAxMDUpOwkvKiAxNzZ4MTQ0LCAzNTJ4Mjg4ICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM5LCAweDAxMGEpOwkvKiBBbGwgZXhjZXB0IDE3NngxNDQgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNzAsIDB4MDExOSk7CS8qIEFsbCBleGNlcHQgMTc2eDE0NCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTA2KTsJLyogU2FtZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBmZSwgMHgwMTA3KTsJLyogVW5pcXVlIHRvIGV2ZXJ5IG1vZGUqLworCQlicmVhazsKKwl9CisJcmV0dXJuIChDQU1FUkFfSVNfT1BFUkFUSU9OQUwodXZkKSA/IDAgOiAtRUZBVUxUKTsKK30KKworLyoKKyAqIGlibWNhbV9tb2RlbDFfc2V0dXBfYWZ0ZXJfdmlkZW9faWYoKQorICoKKyAqIFRoaXMgY29kZSBhZGRzIGZpbmlzaGluZyB0b3VjaGVzIHRvIHRoZSB2aWRlbyBkYXRhIGludGVyZmFjZS4KKyAqIEhlcmUgd2UgY29uZmlndXJlIHRoZSBmcmFtZSByYXRlIGFuZCB0dXJuIG9uIHRoZSBMRUQuCisgKi8KK3N0YXRpYyB2b2lkIGlibWNhbV9tb2RlbDFfc2V0dXBfYWZ0ZXJfdmlkZW9faWYoc3RydWN0IHV2ZCAqdXZkKQoreworCXVuc2lnbmVkIHNob3J0IGludGVybmFsX2ZyYW1lX3JhdGU7CisKKwlSRVNUUklDVF9UT19SQU5HRShmcmFtZXJhdGUsIEZSQU1FUkFURV9NSU4sIEZSQU1FUkFURV9NQVgpOworCWludGVybmFsX2ZyYW1lX3JhdGUgPSBGUkFNRVJBVEVfTUFYIC0gZnJhbWVyYXRlOyAvKiAwPUZhc3QgNj1TbG93ICovCisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAxLCAweDAxMDApOwkvKiBMRUQgT24gICovCisJaWJtY2FtX3ZlaW8odXZkLCAwLCBpbnRlcm5hbF9mcmFtZV9yYXRlLCAweDAxMTEpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMSwgMHgwMTE0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YzAsIDB4MDEwYyk7Cit9CisKK3N0YXRpYyB2b2lkIGlibWNhbV9tb2RlbDJfc2V0dXBfYWZ0ZXJfdmlkZW9faWYoc3RydWN0IHV2ZCAqdXZkKQoreworCXVuc2lnbmVkIHNob3J0IHNldHVwX21vZGVsMl9yZzIsIHNldHVwX21vZGVsMl9zYXQsIHNldHVwX21vZGVsMl95YjsKKworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDApOwkvKiBMRUQgb24gKi8KKworCXN3aXRjaCAodXZkLT52aWRlb3NpemUpIHsKKwljYXNlIFZJREVPU0laRV8xNzZ4MTQ0OgorCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA1MCwgMHgwMTExKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZDAsIDB4MDExMSk7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzMyMHgyNDA6CisJY2FzZSBWSURFT1NJWkVfMzUyeDI0MDoKKwljYXNlIFZJREVPU0laRV8zNTJ4Mjg4OgorCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA0MCwgMHgwMTExKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDExMSk7CisJCWJyZWFrOworCX0KKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA5YiwgMHgwMTBmKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBiYiwgMHgwMTBmKTsKKworCS8qCisJICogSGFyZHdhcmUgc2V0dGluZ3MsIG1heSBhZmZlY3QgQ01PUyBzZW5zb3I7IG5vdCB1c2VyIGNvbnRyb2xzIQorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAweDAwMDQ6IG5vIGVmZmVjdAorCSAqIDB4MDAwNjogaGFyZHdhcmUgZWZmZWN0CisJICogMHgwMDA4OiBubyBlZmZlY3QKKwkgKiAweDAwMGE6IHN0b3BzIHZpZGVvIHN0cmVhbSwgcHJvYmFibHkgaW1wb3J0YW50IGgvdyBzZXR0aW5nCisJICogMHgwMDBjOiBjaGFuZ2VzIGNvbG9yIGluIGhhcmR3YXJlIG1hbm5lciAobm90IHVzZXIgc2V0dGluZykKKwkgKiAweDAwMTI6IGNoYW5nZXMgbnVtYmVyIG9mIGNvbG9ycyAoZG9lcyBub3QgYWZmZWN0IHNwZWVkKQorCSAqIDB4MDAyYTogbm8gZWZmZWN0CisJICogMHgwMDJjOiBoYXJkd2FyZSBzZXR0aW5nIChyZWxhdGVkIHRvIHNjYW4gbGluZXMpCisJICogMHgwMDJlOiBzdG9wcyB2aWRlbyBzdHJlYW0sIHByb2JhYmx5IGltcG9ydGFudCBoL3cgc2V0dGluZworCSAqLworCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAwYSwgMHgwMDVjKTsKKwlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMDQsIDB4MDAwMCk7CisJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDA2LCAweDAwZmIpOworCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAwOCwgMHgwMDAwKTsKKwlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMGMsIDB4MDAwOSk7CisJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDEyLCAweDAwMGEpOworCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAyYSwgMHgwMDAwKTsKKwlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMmMsIDB4MDAwMCk7CisJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDJlLCAweDAwMDgpOworCisJLyoKKwkgKiBGdW5jdGlvbiAweDAwMzAgcG9wcyB1cCBhbGwgb3ZlciB0aGUgcGxhY2UuIEFwcGFyZW50bHkKKwkgKiBpdCBpcyBhIGhhcmR3YXJlIGNvbnRyb2wgcmVnaXN0ZXIsIHdpdGggZXZlcnkgYml0IGFzc2lnbmVkIHRvCisJICogZG8gc29tZXRoaW5nLgorCSAqLworCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAzMCwgMHgwMDAwKTsKKworCS8qCisJICogTWFnaWMgY29udHJvbCBvZiBDTU9TIHNlbnNvci4gT25seSBsb3dlciB2YWx1ZXMgbGlrZQorCSAqIDAtMyB3b3JrLCBhbmQgcGljdHVyZSBzaGlmdHMgbGVmdCBvciByaWdodC4gRG9uJ3QgY2hhbmdlLgorCSAqLworCXN3aXRjaCAodXZkLT52aWRlb3NpemUpIHsKKwljYXNlIFZJREVPU0laRV8xNzZ4MTQ0OgorCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMTQsIDB4MDAwMik7CisJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAxNiwgMHgwMDAyKTsgLyogSG9yaXpvbnRhbCBzaGlmdCAqLworCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMTgsIDB4MDA0YSk7IC8qIEFub3RoZXIgaGFyZHdhcmUgc2V0dGluZyAqLworCQlicmVhazsKKwljYXNlIFZJREVPU0laRV8zMjB4MjQwOgorCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMTQsIDB4MDAwOSk7CisJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAxNiwgMHgwMDA1KTsgLyogSG9yaXpvbnRhbCBzaGlmdCAqLworCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMTgsIDB4MDA0NCk7IC8qIEFub3RoZXIgaGFyZHdhcmUgc2V0dGluZyAqLworCQlicmVhazsKKwljYXNlIFZJREVPU0laRV8zNTJ4MjQwOgorCQkvKiBUaGlzIG1vZGUgZG9lc24ndCB3b3JrIGFzIFdpbmRvd3MgcHJvZ3JhbXMgaXQ7IGNoYW5nZWQgdG8gd29yayAqLworCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMTQsIDB4MDAwOSk7IC8qIFdpbmRvd3Mgc2V0cyB0aGlzIHRvIDggKi8KKwkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDE2LCAweDAwMDMpOyAvKiBIb3Jpem9udGFsIHNoaWZ0ICovCisJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAxOCwgMHgwMDQ0KTsgLyogV2luZG93cyBzZXRzIHRoaXMgdG8gMHgwMDQ1ICovCisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzM1MngyODg6CisJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAxNCwgMHgwMDAzKTsKKwkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDE2LCAweDAwMDIpOyAvKiBIb3Jpem9udGFsIHNoaWZ0ICovCisJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAxOCwgMHgwMDRhKTsgLyogQW5vdGhlciBoYXJkd2FyZSBzZXR0aW5nICovCisJCWJyZWFrOworCX0KKworCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIG1vZDJfYnJpZ2h0bmVzcywgMHgwMDVhKTsKKworCS8qCisJICogV2UgaGF2ZSBvdXIgb3duIGZyYW1lIHJhdGUgc2V0dGluZyB2YXJ5aW5nIGZyb20gMCAoc2xvd2VzdCkgdG8gNiAoZmFzdGVzdCkuCisJICogVGhlIGNhbWVyYSBtb2RlbCAyIGFsbG93cyBmcmFtZSByYXRlIGluIHJhbmdlIFswLi4weDFGXSB3aGVyZSAwIGlzIGFsc28gdGhlCisJICogc2xvd2VzdCBzZXR0aW5nLiBIb3dldmVyIGZvciBhbGwgcHJhY3RpY2FsIHJlYXNvbnMgaGlnaCBzZXR0aW5ncyBtYWtlIG5vCisJICogc2Vuc2UgYmVjYXVzZSBVU0IgaXMgbm90IGZhc3QgZW5vdWdoIHRvIHN1cHBvcnQgaGlnaCBGUFMuIEJlIGF3YXJlIHRoYXQKKwkgKiB0aGUgcGljdHVyZSBkYXRhc3RyZWFtIHdpbGwgYmUgc2V2ZXJlbHkgZGlzcnVwdGVkIGlmIHlvdSBhc2sgZm9yCisJICogZnJhbWUgcmF0ZSBmYXN0ZXIgdGhhbiBhbGxvd2VkIGZvciB0aGUgdmlkZW8gc2l6ZSAtIHNlZSBiZWxvdzoKKwkgKgorCSAqIEFsbG93YWJsZSByYW5nZXMgKG9idGFpbmVkIGV4cGVyaW1lbnRhbGx5IG9uIE9IQ0ksIEs2LTMsIDQ1MCBNSHopOgorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogMTc2eDE0NDogWzYuLjMxXQorCSAqIDMyMHgyNDA6IFs4Li4zMV0KKwkgKiAzNTJ4MjQwOiBbMTAuLjMxXQorCSAqIDM1MngyODg6IFsxNi4uMzFdIEkgaGF2ZSB0byByYWlzZSBsb3dlciB0aHJlc2hvbGQgZm9yIHN0YWJpbGl0eS4uLgorCSAqCisJICogQXMgdXN1YWwsIHNsb3dlciBGUFMgcHJvdmlkZXMgYmV0dGVyIHNlbnNpdGl2aXR5LgorCSAqLworCXsKKwkJc2hvcnQgaHdfZnBzPTMxLCBpX2ZyYW1lcmF0ZTsKKworCQlSRVNUUklDVF9UT19SQU5HRShmcmFtZXJhdGUsIEZSQU1FUkFURV9NSU4sIEZSQU1FUkFURV9NQVgpOworCQlpX2ZyYW1lcmF0ZSA9IEZSQU1FUkFURV9NQVggLSBmcmFtZXJhdGUgKyBGUkFNRVJBVEVfTUlOOworCQlzd2l0Y2ggKHV2ZC0+dmlkZW9zaXplKSB7CisJCWNhc2UgVklERU9TSVpFXzE3NngxNDQ6CisJCQlod19mcHMgPSA2ICsgaV9mcmFtZXJhdGUqNDsKKwkJCWJyZWFrOworCQljYXNlIFZJREVPU0laRV8zMjB4MjQwOgorCQkJaHdfZnBzID0gOCArIGlfZnJhbWVyYXRlKjM7CisJCQlicmVhazsKKwkJY2FzZSBWSURFT1NJWkVfMzUyeDI0MDoKKwkJCWh3X2ZwcyA9IDEwICsgaV9mcmFtZXJhdGUqMjsKKwkJCWJyZWFrOworCQljYXNlIFZJREVPU0laRV8zNTJ4Mjg4OgorCQkJaHdfZnBzID0gMjggKyBpX2ZyYW1lcmF0ZS8yOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHV2ZC0+ZGVidWcgPiAwKQorCQkJaW5mbygiRnJhbWVyYXRlIChoYXJkd2FyZSk6ICVoZC4iLCBod19mcHMpOworCQlSRVNUUklDVF9UT19SQU5HRShod19mcHMsIDAsIDMxKTsKKwkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgbW9kMl9zZXRfZnJhbWVyYXRlLCBod19mcHMpOworCX0KKworCS8qCisJICogVGhpcyBzZXR0aW5nIGRvZXMgbm90IHZpc2libHkgYWZmZWN0IHBpY3R1cmVzOyBsZWZ0IGl0IGhlcmUKKwkgKiBiZWNhdXNlIGl0IHdhcyBwcmVzZW50IGluIFdpbmRvd3MgVVNCIGRhdGEgc3RyZWFtLiBUaGlzIGZ1bmN0aW9uCisJICogZG9lcyBub3QgYWxsb3cgYXJiaXRyYXJ5IHZhbHVlcyBhbmQgYXBwYXJlbnRseSBpcyBhIGJpdCBtYXNrLCB0bworCSAqIGJlIGFjdGl2YXRlZCBvbmx5IGF0IGFwcHJvcHJpYXRlIHRpbWUuIERvbid0IGNoYW5nZSBpdCByYW5kb21seSEKKwkgKi8KKwlzd2l0Y2ggKHV2ZC0+dmlkZW9zaXplKSB7CisJY2FzZSBWSURFT1NJWkVfMTc2eDE0NDoKKwkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDI2LCAweDAwYzIpOworCQlicmVhazsKKwljYXNlIFZJREVPU0laRV8zMjB4MjQwOgorCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMjYsIDB4MDA0NCk7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzM1MngyNDA6CisJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAyNiwgMHgwMDQ2KTsKKwkJYnJlYWs7CisJY2FzZSBWSURFT1NJWkVfMzUyeDI4ODoKKwkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDI2LCAweDAwNDgpOworCQlicmVhazsKKwl9CisKKwlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCBtb2QyX3NlbnNpdGl2aXR5LCBsaWdodGluZyk7CisKKwlpZiAoaW5pdF9tb2RlbDJfcmcyID49IDApIHsKKwkJUkVTVFJJQ1RfVE9fUkFOR0UoaW5pdF9tb2RlbDJfcmcyLCAwLCAyNTUpOworCQlzZXR1cF9tb2RlbDJfcmcyID0gaW5pdF9tb2RlbDJfcmcyOworCX0gZWxzZQorCQlzZXR1cF9tb2RlbDJfcmcyID0gMHgwMDJmOworCisJaWYgKGluaXRfbW9kZWwyX3NhdCA+PSAwKSB7CisJCVJFU1RSSUNUX1RPX1JBTkdFKGluaXRfbW9kZWwyX3NhdCwgMCwgMjU1KTsKKwkJc2V0dXBfbW9kZWwyX3NhdCA9IGluaXRfbW9kZWwyX3NhdDsKKwl9IGVsc2UKKwkJc2V0dXBfbW9kZWwyX3NhdCA9IDB4MDAzNDsKKworCWlmIChpbml0X21vZGVsMl95YiA+PSAwKSB7CisJCVJFU1RSSUNUX1RPX1JBTkdFKGluaXRfbW9kZWwyX3liLCAwLCAyNTUpOworCQlzZXR1cF9tb2RlbDJfeWIgPSBpbml0X21vZGVsMl95YjsKKwl9IGVsc2UKKwkJc2V0dXBfbW9kZWwyX3liID0gMHgwMGEwOworCisJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgbW9kMl9jb2xvcl9iYWxhbmNlX3JnMiwgc2V0dXBfbW9kZWwyX3JnMik7CisJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgbW9kMl9zYXR1cmF0aW9uLCBzZXR1cF9tb2RlbDJfc2F0KTsKKwlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCBtb2QyX2NvbG9yX2JhbGFuY2VfeWIsIHNldHVwX21vZGVsMl95Yik7CisJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgbW9kMl9odWUsIHV2ZC0+dnBpYy5odWUgPj4gOSk7IC8qIDAgLi4gN0YgKi87CisKKwkvKiBIYXJkd2FyZSBjb250cm9sIGNvbW1hbmQgKi8KKwlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMzAsIDB4MDAwNCk7CisKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTBjKTsJLyogR28gY2FtZXJhLCBnbyEgKi8KKwl1c2JfY2xlYXJfaGFsdCh1dmQtPmRldiwgdXNiX3Jjdmlzb2NwaXBlKHV2ZC0+ZGV2LCB1dmQtPnZpZGVvX2VuZHApKTsKK30KKworc3RhdGljIHZvaWQgaWJtY2FtX21vZGVsNF9zZXR1cF9hZnRlcl92aWRlb19pZihzdHJ1Y3QgdXZkICp1dmQpCit7CisJc3dpdGNoICh1dmQtPnZpZGVvc2l6ZSkgeworCWNhc2UgVklERU9TSVpFXzEyOHg5NjoKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMTEpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBiYywgMHgwMTJjKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwODAsIDB4MDEyYik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDgpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTMzKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwOWIsIDB4MDEwZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGJiLCAweDAxMGYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzgsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwYSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDVjLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGZiLCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDA1NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMGMsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA5LCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YWEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDEyLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDgsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODJhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMmEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZmZmEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzNCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNzAsIDB4MDExOSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGQyLCAweDAxMDcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTA2KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNWUsIDB4MDEwNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMDYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBkMCwgMHgwMTExKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzksIDB4MDEwYSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMDIpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyOCwgMHgwMTAzKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFlLCAweDAxMDUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTYsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwYSwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MmE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxNCwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDgsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTBhLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA1YSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDk1NDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxOCwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNDMsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQwNTUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFjLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBlYiwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGFhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzMiwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgyYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM2LCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZmZhLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWUsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxNywgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTMsIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDMxLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTcsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDc4LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzgsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMGMpOworCQlicmVhazsKKwljYXNlIFZJREVPU0laRV8xNjB4MTIwOgorCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTAwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDExMSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGJjLCAweDAxMmMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA4MCwgMHgwMTJiKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwOCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMzMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA5YiwgMHgwMTBmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYmIsIDB4MDEwZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDBhLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNWMsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDQsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZmIsIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMDU1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwYywgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDksIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhhYTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTIsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MmE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmZmYSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM0LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOCwgMHgwMTE5KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZDgsIDB4MDEwNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAyLCAweDAxMDYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBkMCwgMHgwMTExKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYjksIDB4MDEwYSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMDIpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyOCwgMHgwMTAzKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFlLCAweDAxMDUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTYsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwYiwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MmE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxNCwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDgsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTBhLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA1YSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDk1NDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxOCwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNDMsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQwNTUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFjLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjNywgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGFhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzMiwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI1LCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgyYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM2LCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZmZhLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWUsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA0OCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzUsIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGQwLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNDgsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDkwLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzgsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMGMpOworCQlicmVhazsKKwljYXNlIFZJREVPU0laRV8xNzZ4MTQ0OgorCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTAwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDExMSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGJjLCAweDAxMmMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA4MCwgMHgwMTJiKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwOCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMzMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA5YiwgMHgwMTBmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYmIsIDB4MDEwZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDBhLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNWMsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDQsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZmIsIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMDU1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwYywgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDksIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhhYTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTIsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MmE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmZmYSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM0LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOCwgMHgwMTE5KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZDYsIDB4MDEwNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMDYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxOCwgMHgwMTA3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDMsIDB4MDEwNik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGQwLCAweDAxMTEpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBiOSwgMHgwMTBhKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDEwMik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDJjLCAweDAxMDMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTA0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjQsIDB4MDEwNSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxNiwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA3LCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgyYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE0LCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxYSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMGEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDVlLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OTU0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE4LCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA0OSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDA1NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWMsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGM3LCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YWEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDMyLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjgsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODJhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzYsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA4LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZmZmEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxZSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDEwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxMywgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMmEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxMCwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNmQsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDEwYyk7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzMyMHgyNDA6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTExKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYmMsIDB4MDEyYyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDgwLCAweDAxMmIpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTA4KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDEzMyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDliLCAweDAxMGYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBiYiwgMHgwMTBmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM4LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMGEsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA1YywgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBmYiwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQwNTUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDBjLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOSwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGFhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxMiwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA4LCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgyYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDJhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZmZhLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzQsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDcwLCAweDAxMTkpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBkMiwgMHgwMTA3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDMsIDB4MDEwNik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDVlLCAweDAxMDcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTA2KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZDAsIDB4MDExMSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM5LCAweDAxMGEpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTAyKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjgsIDB4MDEwMyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxZSwgMHgwMTA1KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE2LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMGEsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODJhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTQsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA4LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFhLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEwYSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg5NTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTgsIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDQzLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMDU1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxYywgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZWIsIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhhYTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzIsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MmE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzNiwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDgsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmZmYSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFlLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTcsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDEzLCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzMSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE3LCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA3OCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM4LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDQsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTBjKTsKKwkJYnJlYWs7CisJY2FzZSBWSURFT1NJWkVfMzUyeDI4ODoKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMTEpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBiYywgMHgwMTJjKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwODAsIDB4MDEyYik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDgpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTMzKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwOWIsIDB4MDEwZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGJiLCAweDAxMGYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzgsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwYSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDVjLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGZiLCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDA1NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMGMsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA5LCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YWEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDEyLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDgsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODJhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMmEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZmZmEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzNCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNzAsIDB4MDExOSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGYyLCAweDAxMDcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTA2KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwOGMsIDB4MDEwNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMDYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTExKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzksIDB4MDEwYSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMDIpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyYywgMHgwMTAzKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI0LCAweDAxMDUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTYsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNiwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MmE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxNCwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDIsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTBhLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA1ZSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDk1NDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxOCwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNDksIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQwNTUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFjLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjZiwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGFhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzMiwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgyYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM2LCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZmZhLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWUsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxMCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTMsIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI1LCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTAsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDQ4LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzgsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMGMpOworCQlicmVhazsgCisJfQorCXVzYl9jbGVhcl9oYWx0KHV2ZC0+ZGV2LCB1c2JfcmN2aXNvY3BpcGUodXZkLT5kZXYsIHV2ZC0+dmlkZW9fZW5kcCkpOworfQorCitzdGF0aWMgdm9pZCBpYm1jYW1fbW9kZWwzX3NldHVwX2FmdGVyX3ZpZGVvX2lmKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpbnQgaTsKKwkvKgorCSAqIDAxLjAxLjA4IC0gQWRkZWQgZm9yIFJDQSB2aWRlbyBpbiBzdXBwb3J0IC1MTworCSAqIFRoaXMgc3RydWN0IGlzIHVzZWQgdG8gaW5pdCB0aGUgTW9kZWwzIGNhbSB0byB1c2UgdGhlIFJDQSB2aWRlbyBpbiBwb3J0CisJICogaW5zdGVhZCBvZiB0aGUgQ0NEIHNlbnNvci4KKwkgKi8KKwlzdGF0aWMgY29uc3Qgc3RydWN0IHN0cnVjdF9pbml0RGF0YSBpbml0RGF0YVtdID0geworCQl7MCwgMHgwMDAwLCAweDAxMGN9LAorCQl7MCwgMHgwMDA2LCAweDAxMmN9LAorCQl7MCwgMHgwMDc4LCAweDAxMmR9LAorCQl7MCwgMHgwMDQ2LCAweDAxMmZ9LAorCQl7MCwgMHhkMTQxLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZWE4LCAweDAxMjR9LAorCQl7MSwgMHgwMDAwLCAweDAxMTZ9LAorCQl7MCwgMHgwMDY0LCAweDAxMTZ9LAorCQl7MSwgMHgwMDAwLCAweDAxMTV9LAorCQl7MCwgMHgwMDAzLCAweDAxMTV9LAorCQl7MCwgMHgwMDA4LCAweDAxMjN9LAorCQl7MCwgMHgwMDAwLCAweDAxMTd9LAorCQl7MCwgMHgwMDAwLCAweDAxMTJ9LAorCQl7MCwgMHgwMDgwLCAweDAxMDB9LAorCQl7MCwgMHgwMDAwLCAweDAxMDB9LAorCQl7MSwgMHgwMDAwLCAweDAxMTZ9LAorCQl7MCwgMHgwMDYwLCAweDAxMTZ9LAorCQl7MCwgMHgwMDAyLCAweDAxMTJ9LAorCQl7MCwgMHgwMDAwLCAweDAxMjN9LAorCQl7MCwgMHgwMDAxLCAweDAxMTd9LAorCQl7MCwgMHgwMDQwLCAweDAxMDh9LAorCQl7MCwgMHgwMDE5LCAweDAxMmN9LAorCQl7MCwgMHgwMDQwLCAweDAxMTZ9LAorCQl7MCwgMHgwMDBhLCAweDAxMTV9LAorCQl7MCwgMHgwMDBiLCAweDAxMTV9LAorCQl7MCwgMHgwMDc4LCAweDAxMmR9LAorCQl7MCwgMHgwMDQ2LCAweDAxMmZ9LAorCQl7MCwgMHhkMTQxLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZWE4LCAweDAxMjR9LAorCQl7MCwgMHgwMDY0LCAweDAxMTZ9LAorCQl7MCwgMHgwMDAwLCAweDAxMTV9LAorCQl7MCwgMHgwMDAxLCAweDAxMTV9LAorCQl7MCwgMHhmZmZmLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMGFhLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmZmLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMGYyLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDBmLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmZmLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMGY4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMGZjLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmZmLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMGY5LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDNjLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmZmLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDI3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDE5LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDIxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDA2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDQ1LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDJhLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDBlLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDJiLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMGY0LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDJjLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDA0LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDJkLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDE0LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDJlLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAzLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDJmLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAzLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDE0LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDQwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDQwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDUzLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMDF9LAorCQl7MCwgMHgwMGEwLCAweDAxMDN9LAorCQl7MCwgMHgwMDc4LCAweDAxMDV9LAorCQl7MCwgMHgwMDAwLCAweDAxMGF9LAorCQl7MCwgMHgwMDI0LCAweDAxMGJ9LAorCQl7MCwgMHgwMDI4LCAweDAxMTl9LAorCQl7MCwgMHgwMDg4LCAweDAxMWJ9LAorCQl7MCwgMHgwMDAyLCAweDAxMWR9LAorCQl7MCwgMHgwMDAzLCAweDAxMWV9LAorCQl7MCwgMHgwMDAwLCAweDAxMjl9LAorCQl7MCwgMHgwMGZjLCAweDAxMmJ9LAorCQl7MCwgMHgwMDA4LCAweDAxMDJ9LAorCQl7MCwgMHgwMDAwLCAweDAxMDR9LAorCQl7MCwgMHgwMDA4LCAweDAxMWF9LAorCQl7MCwgMHgwMDI4LCAweDAxMWN9LAorCQl7MCwgMHgwMDIxLCAweDAxMmF9LAorCQl7MCwgMHgwMDAwLCAweDAxMTh9LAorCQl7MCwgMHgwMDAwLCAweDAxMzJ9LAorCQl7MCwgMHgwMDAwLCAweDAxMDl9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDMxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDQwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDQwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMGRjLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDMyLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDIwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDQwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDQwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDMwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDA4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHgwMDAzLCAweDAxMDZ9LAorCQl7MCwgMHgwMDYyLCAweDAxMDd9LAorCQl7MCwgMHgwMDAzLCAweDAxMTF9LAorCX07CisjZGVmaW5lIE5VTV9JTklUX0RBVEEgCisKKwl1bnNpZ25lZCBzaG9ydCBjb21wcmVzc2lvbiA9IDA7CS8qIDA9bm9uZSwgNz1iZXN0IGZyYW1lIHJhdGUgICovCisJaW50IGZfcmF0ZTsgLyogMD1GYXN0ZXN0IDc9c2xvd2VzdCAqLworCisJaWYgKElCTUNBTV9UKHV2ZCktPmluaXRpYWxpemVkKQorCQlyZXR1cm47CisKKwkvKiBJbnRlcm5hbCBmcmFtZSByYXRlIGlzIGNvbnRyb2xsZWQgYnkgZl9yYXRlIHZhbHVlICovCisJZl9yYXRlID0gNyAtIGZyYW1lcmF0ZTsKKwlSRVNUUklDVF9UT19SQU5HRShmX3JhdGUsIDAsIDcpOworCisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwMCk7CisJaWJtY2FtX3ZlaW8odXZkLCAxLCAweDAwMDAsIDB4MDExNik7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNjAsIDB4MDExNik7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDIsIDB4MDExMik7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyMyk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDExNyk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNDAsIDB4MDEwOCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTksIDB4MDEyYyk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNjAsIDB4MDExNik7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDIsIDB4MDExNSk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDMsIDB4MDExNSk7CisJaWJtY2FtX3ZlaW8odXZkLCAxLCAweDAwMDAsIDB4MDExNSk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMGIsIDB4MDExNSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDBhLCAweDAwNDApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAwYiwgMHgwMGY2KTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMGMsIDB4MDAwMik7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDBkLCAweDAwMjApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAwZSwgMHgwMDMzKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMGYsIDB4MDAwNyk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDEwLCAweDAwMDApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAxMSwgMHgwMDcwKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMTIsIDB4MDAzMCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDEzLCAweDAwMDApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAxNCwgMHgwMDAxKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMTUsIDB4MDAwMSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDE2LCAweDAwMDEpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAxNywgMHgwMDAxKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMTgsIDB4MDAwMCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDFlLCAweDAwYzMpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAyMCwgMHgwMDAwKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMjgsIDB4MDAxMCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDI5LCAweDAwNTQpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAyYSwgMHgwMDEzKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMmIsIDB4MDAwNyk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDJkLCAweDAwMjgpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAyZSwgMHgwMDAwKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMzEsIDB4MDAwMCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDMyLCAweDAwMDApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzMywgMHgwMDAwKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMzQsIDB4MDAwMCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDM1LCAweDAwMzgpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzYSwgMHgwMDAxKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwM2MsIDB4MDAxZSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDNmLCAweDAwMGEpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA0MSwgMHgwMDAwKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNDYsIDB4MDAzZik7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDQ3LCAweDAwMDApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA1MCwgMHgwMDA1KTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNTIsIDB4MDAxYSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDUzLCAweDAwMDMpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA1YSwgMHgwMDZiKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNWQsIDB4MDAxZSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDVlLCAweDAwMzApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA1ZiwgMHgwMDQxKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNjQsIDB4MDAwOCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDY1LCAweDAwMTUpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA2OCwgMHgwMDBmKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNzksIDB4MDAwMCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDdhLCAweDAwMDApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA3YywgMHgwMDNmKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwODIsIDB4MDAwZik7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDg1LCAweDAwMDApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA5OSwgMHgwMDAwKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwOWIsIDB4MDAyMyk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDljLCAweDAwMjIpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA5ZCwgMHgwMDk2KTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwOWUsIDB4MDA5Nik7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDlmLCAweDAwMGEpOworCisJc3dpdGNoICh1dmQtPnZpZGVvc2l6ZSkgeworCWNhc2UgVklERU9TSVpFXzE2MHgxMjA6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDEpOyAvKiBTYW1lIG9uIDE3NngxNDQsIDMyMHgyNDAgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYTAsIDB4MDEwMyk7IC8qIFNhbWUgb24gMTc2eDE0NCwgMzIweDI0MCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA3OCwgMHgwMTA1KTsgLyogU2FtZSBvbiAxNzZ4MTQ0LCAzMjB4MjQwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMGEpOyAvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI0LCAweDAxMGIpOyAvKiBEaWZmZXJzIGV2ZXJ5d2hlcmUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYTksIDB4MDExOSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE2LCAweDAxMWIpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMiwgMHgwMTFkKTsgLyogU2FtZSBvbiAxNzZ4MTQ0LCAzMjB4MjQwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMWUpOyAvKiBTYW1lIG9uIDE3NngxNDQsIDY0MHg0ODAgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyOSk7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZmMsIDB4MDEyYik7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTgsIDB4MDEwMik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMDQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTFhKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjgsIDB4MDExYyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDIyLCAweDAxMmEpOyAvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMTgpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTMyKTsKKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDIxLCAweDAwMDEpOyAvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgY29tcHJlc3Npb24sIDB4MDEwOSk7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzMyMHgyNDA6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDEpOyAvKiBTYW1lIG9uIDE3NngxNDQsIDMyMHgyNDAgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYTAsIDB4MDEwMyk7IC8qIFNhbWUgb24gMTc2eDE0NCwgMzIweDI0MCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA3OCwgMHgwMTA1KTsgLyogU2FtZSBvbiAxNzZ4MTQ0LCAzMjB4MjQwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMGEpOyAvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI4LCAweDAxMGIpOyAvKiBEaWZmZXJzIGV2ZXJ5d2hlcmUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDIsIDB4MDExZCk7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDExZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjkpOyAvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGZjLCAweDAxMmIpOyAvKiBTYW1lICovCisJCS8qIDQgY29tbWFuZHMgZnJvbSAxNjB4MTIwIHNraXBwZWQgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjIsIDB4MDEyYSk7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDIxLCAweDAwMDEpOyAvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgY29tcHJlc3Npb24sIDB4MDEwOSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGQ5LCAweDAxMTkpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNiwgMHgwMTFiKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjEsIDB4MDEwMik7IC8qIFNhbWUgb24gMzIweDI0MCwgNjQweDQ4MCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxMCwgMHgwMTA0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDQsIDB4MDExYSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDNmLCAweDAxMWMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxYywgMHgwMTE4KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEzMik7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzY0MHg0ODA6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGYwLCAweDAxMDUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTBhKTsgLyogU2FtZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOCwgMHgwMTBiKTsgLyogRGlmZmVycyBldmVyeXdoZXJlICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGQ5LCAweDAxMTkpOyAvKiBTYW1lIG9uIDMyMHgyNDAsIDY0MHg0ODAgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDYsIDB4MDExYik7IC8qIFNhbWUgb24gMzIweDI0MCwgNjQweDQ4MCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTFkKTsgLyogTkMgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDMsIDB4MDExZSk7IC8qIFNhbWUgb24gMTc2eDE0NCwgNjQweDQ4MCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI5KTsgLyogU2FtZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBmYywgMHgwMTJiKTsgLyogU2FtZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyMSwgMHgwMTAyKTsgLyogU2FtZSBvbiAzMjB4MjQwLCA2NDB4NDgwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE2LCAweDAxMDQpOyAvKiBOQyAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTFhKTsgLyogU2FtZSBvbiAzMjB4MjQwLCA2NDB4NDgwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDNmLCAweDAxMWMpOyAvKiBTYW1lIG9uIDMyMHgyNDAsIDY0MHg0ODAgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjIsIDB4MDEyYSk7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWMsIDB4MDExOCk7IC8qIFNhbWUgb24gMzIweDI0MCwgNjQweDQ4MCAqLworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMjEsIDB4MDAwMSk7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCBjb21wcmVzc2lvbiwgMHgwMTA5KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNDAsIDB4MDEwMSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDQwLCAweDAxMDMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTMyKTsgLyogU2FtZSBvbiAzMjB4MjQwLCA2NDB4NDgwICovCisJCWJyZWFrOworCX0KKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwN2UsIDB4MDAwZSk7CS8qIEh1ZSAqLworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzNiwgMHgwMDExKTsJLyogQnJpZ2h0bmVzcyAqLworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA2MCwgMHgwMDAyKTsJLyogU2hhcnBuZXNzICovCisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDYxLCAweDAwMDQpOwkvKiBTaGFycG5lc3MgKi8KKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNjIsIDB4MDAwNSk7CS8qIFNoYXJwbmVzcyAqLworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA2MywgMHgwMDE0KTsJLyogU2hhcnBuZXNzICovCisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDk2LCAweDAwYTApOwkvKiBSZWQgZ2FpbiAqLworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA5NywgMHgwMDk2KTsJLyogQmx1ZSBnYWluICovCisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDY3LCAweDAwMDEpOwkvKiBDb250cmFzdCAqLworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA1YiwgMHgwMDBjKTsJLyogQ29udHJhc3QgKi8KKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNWMsIDB4MDAxNik7CS8qIENvbnRyYXN0ICovCisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDk4LCAweDAwMGIpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAyYywgMHgwMDAzKTsJLyogV2FzIDEsIGJyb2tlIDY0MHg0ODAgKi8KKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMmYsIDB4MDAyYSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDMwLCAweDAwMjkpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzNywgMHgwMDAyKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMzgsIDB4MDA1OSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDNkLCAweDAwMmUpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzZSwgMHgwMDI4KTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNzgsIDB4MDAwNSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDdiLCAweDAwMTEpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA3ZCwgMHgwMDRiKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwN2YsIDB4MDAyMik7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDgwLCAweDAwMGMpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA4MSwgMHgwMDBiKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwODMsIDB4MDBmZCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDg2LCAweDAwMGIpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA4NywgMHgwMDBiKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwN2UsIDB4MDAwZSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDk2LCAweDAwYTApOwkvKiBSZWQgZ2FpbiAqLworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA5NywgMHgwMDk2KTsJLyogQmx1ZSBnYWluICovCisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDk4LCAweDAwMGIpOworCisJc3dpdGNoICh1dmQtPnZpZGVvc2l6ZSkgeworCWNhc2UgVklERU9TSVpFXzE2MHgxMjA6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAyLCAweDAxMDYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTA3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCBmX3JhdGUsIDB4MDExMSk7CS8qIEZyYW1lIHJhdGUgKi8KKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDFmLCAweDAwMDApOyAvKiBTYW1lICovCisJCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzOSwgMHgwMDFmKTsgLyogU2FtZSAqLworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwM2IsIDB4MDAzYyk7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDQwLCAweDAwMGEpOworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNTEsIDB4MDAwYSk7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzMyMHgyNDA6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMDYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA2MiwgMHgwMTA3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCBmX3JhdGUsIDB4MDExMSk7CS8qIEZyYW1lIHJhdGUgKi8KKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDFmLCAweDAwMDApOyAvKiBTYW1lICovCisJCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzOSwgMHgwMDFmKTsgLyogU2FtZSAqLworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwM2IsIDB4MDAzYyk7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDQwLCAweDAwMDgpOworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNTEsIDB4MDAwYik7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzY0MHg0ODA6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAyLCAweDAxMDYpOwkvKiBBZGp1c3RtZW50cyAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBiNCwgMHgwMTA3KTsJLyogQWRqdXN0bWVudHMgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCBmX3JhdGUsIDB4MDExMSk7CS8qIEZyYW1lIHJhdGUgKi8KKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDFmLCAweDAwMDIpOyAvKiAhU2FtZSAqLworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMzksIDB4MDAzZSk7IC8qICFTYW1lICovCisJCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA0MCwgMHgwMDA4KTsKKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDUxLCAweDAwMGEpOworCQlicmVhazsKKwl9CisKKwkvKiAwMS4wMS4wOCAtIEFkZGVkIGZvciBSQ0EgdmlkZW8gaW4gc3VwcG9ydCAtTE8gKi8KKwlpZihpbml0X21vZGVsM19pbnB1dCkgeworCQlpZiAoZGVidWcgPiAwKQorCQkJaW5mbygiU2V0dGluZyBpbnB1dCB0byBSQ0EuIik7CisJCWZvciAoaT0wOyBpIDwgKHNpemVvZihpbml0RGF0YSkvc2l6ZW9mKGluaXREYXRhWzBdKSk7IGkrKykgeworCQkJaWJtY2FtX3ZlaW8odXZkLCBpbml0RGF0YVtpXS5yZXEsIGluaXREYXRhW2ldLnZhbHVlLCBpbml0RGF0YVtpXS5pbmRleCk7CisJCX0KKwl9CisKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTE0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTBjKTsKKwl1c2JfY2xlYXJfaGFsdCh1dmQtPmRldiwgdXNiX3Jjdmlzb2NwaXBlKHV2ZC0+ZGV2LCB1dmQtPnZpZGVvX2VuZHApKTsKK30KKworLyoKKyAqIGlibWNhbV92aWRlb19zdG9wKCkKKyAqCisgKiBUaGlzIGNvZGUgdGVsbHMgY2FtZXJhIHRvIHN0b3Agc3RyZWFtaW5nLiBUaGUgaW50ZXJmYWNlIHJlbWFpbnMKKyAqIGNvbmZpZ3VyZWQgYW5kIGJhbmR3aWR0aCAtIGNsYWltZWQuCisgKi8KK3N0YXRpYyB2b2lkIGlibWNhbV92aWRlb19zdG9wKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlzd2l0Y2ggKElCTUNBTV9UKHV2ZCktPmNhbWVyYV9tb2RlbCkgeworCWNhc2UgSUJNQ0FNX01PREVMXzE6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMCwgMHgwMTBjKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwLCAweDAxMGMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDEsIDB4MDExNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhjMCwgMHgwMTBjKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwLCAweDAxMGMpOworCQlpYm1jYW1fc2VuZF9GRl8wNF8wMih1dmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDEsIDB4MDAsIDB4MDEwMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MSwgMHgwMTAwKTsJLyogTEVEIE9mZiAqLworCQlicmVhazsKKwljYXNlIElCTUNBTV9NT0RFTF8yOgorY2FzZSBJQk1DQU1fTU9ERUxfNDoKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwYyk7CS8qIFN0b3AgdGhlIGNhbWVyYSAqLworCisJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAzMCwgMHgwMDA0KTsKKworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA4MCwgMHgwMTAwKTsJLyogTEVEIE9mZiAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyMCwgMHgwMTExKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYTAsIDB4MDExMSk7CisKKwkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDMwLCAweDAwMDIpOworCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDIwLCAweDAxMTEpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTEyKTsKKwkJYnJlYWs7CisJY2FzZSBJQk1DQU1fTU9ERUxfMzoKKyNpZiAxCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMGMpOworCisJCS8qIEhlcmUgd2UgYXJlIHN1cHBvc2VkIHRvIHNlbGVjdCB2aWRlbyBpbnRlcmZhY2UgYWx0LiBzZXR0aW5nIDAgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDYsIDB4MDEyYyk7CisKKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDQ2LCAweDAwMDApOworCisJCWlibWNhbV92ZWlvKHV2ZCwgMSwgMHgwMDAwLCAweDAxMTYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA2NCwgMHgwMTE2KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAxLCAweDAwMDAsIDB4MDExNSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMTUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTIzKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDExNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMTIpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA4MCwgMHgwMTAwKTsKKwkJSUJNQ0FNX1QodXZkKS0+aW5pdGlhbGl6ZWQgPSAwOworI2VuZGlmCisJCWJyZWFrOworCX0gLyogc3dpdGNoICovCit9CisKKy8qCisgKiBpYm1jYW1fcmVpbml0X2lzbygpCisgKgorICogVGhpcyBwcm9jZWR1cmUgc2VuZHMgY291cGxlIG9mIGNvbW1hbmRzIHRvIHRoZSBjYW1lcmEgYW5kIHRoZW4KKyAqIHJlc2V0cyB0aGUgdmlkZW8gcGlwZS4gVGhpcyBzZXF1ZW5jZSB3YXMgb2JzZXJ2ZWQgdG8gcmVpbml0IHRoZQorICogY2FtZXJhIG9yLCBhdCBsZWFzdCwgdG8gaW5pdGlhdGUgSVNPIGRhdGEgc3RyZWFtLgorICoKKyAqIEhpc3Rvcnk6CisgKiAxLzIvMDAgICBDcmVhdGVkLgorICovCitzdGF0aWMgdm9pZCBpYm1jYW1fcmVpbml0X2lzbyhzdHJ1Y3QgdXZkICp1dmQsIGludCBkb19zdG9wKQoreworCXN3aXRjaCAoSUJNQ0FNX1QodXZkKS0+Y2FtZXJhX21vZGVsKSB7CisJY2FzZSBJQk1DQU1fTU9ERUxfMToKKwkJaWYgKGRvX3N0b3ApCisJCQlpYm1jYW1fdmlkZW9fc3RvcCh1dmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTE0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDEwYyk7CisJCXVzYl9jbGVhcl9oYWx0KHV2ZC0+ZGV2LCB1c2JfcmN2aXNvY3BpcGUodXZkLT5kZXYsIHV2ZC0+dmlkZW9fZW5kcCkpOworCQlpYm1jYW1fbW9kZWwxX3NldHVwX2FmdGVyX3ZpZGVvX2lmKHV2ZCk7CisJCWJyZWFrOworCWNhc2UgSUJNQ0FNX01PREVMXzI6CisJCWlibWNhbV9tb2RlbDJfc2V0dXBfYWZ0ZXJfdmlkZW9faWYodXZkKTsKKwkJYnJlYWs7CisJY2FzZSBJQk1DQU1fTU9ERUxfMzoKKwkJaWJtY2FtX3ZpZGVvX3N0b3AodXZkKTsKKwkJaWJtY2FtX21vZGVsM19zZXR1cF9hZnRlcl92aWRlb19pZih1dmQpOworCQlicmVhazsKKwljYXNlIElCTUNBTV9NT0RFTF80OgorCQlpYm1jYW1fbW9kZWw0X3NldHVwX2FmdGVyX3ZpZGVvX2lmKHV2ZCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgaWJtY2FtX3ZpZGVvX3N0YXJ0KHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpYm1jYW1fY2hhbmdlX2xpZ2h0aW5nX2NvbmRpdGlvbnModXZkKTsKKwlpYm1jYW1fc2V0X3NoYXJwbmVzcyh1dmQpOworCWlibWNhbV9yZWluaXRfaXNvKHV2ZCwgMCk7Cit9CisKKy8qCisgKiBSZXR1cm4gbmVnYXRpdmUgY29kZSBvbiBmYWlsdXJlLCAwIG9uIHN1Y2Nlc3MuCisgKi8KK3N0YXRpYyBpbnQgaWJtY2FtX3NldHVwX29uX29wZW4oc3RydWN0IHV2ZCAqdXZkKQoreworCWludCBzZXR1cF9vayA9IDA7IC8qIFN1Y2Nlc3MgYnkgZGVmYXVsdCAqLworCS8qIFNlbmQgaW5pdCBzZXF1ZW5jZSBvbmx5IG9uY2UsIGl0J3MgbGFyZ2UhICovCisJaWYgKCFJQk1DQU1fVCh1dmQpLT5pbml0aWFsaXplZCkgeyAvKiBGSVhNRSByZW5hbWUgKi8KKwkJc3dpdGNoIChJQk1DQU1fVCh1dmQpLT5jYW1lcmFfbW9kZWwpIHsKKwkJY2FzZSBJQk1DQU1fTU9ERUxfMToKKwkJCXNldHVwX29rID0gaWJtY2FtX21vZGVsMV9zZXR1cCh1dmQpOworCQkJYnJlYWs7CisJCWNhc2UgSUJNQ0FNX01PREVMXzI6CisJCQlzZXR1cF9vayA9IGlibWNhbV9tb2RlbDJfc2V0dXAodXZkKTsKKwkJCWJyZWFrOworCQljYXNlIElCTUNBTV9NT0RFTF8zOgorCQljYXNlIElCTUNBTV9NT0RFTF80OgorCQkJLyogV2UgZG8gYWxsIHNldHVwIHdoZW4gSXNvYyBzdHJlYW0gaXMgcmVxdWVzdGVkICovCisJCQlicmVhazsKKwkJfQorCQlJQk1DQU1fVCh1dmQpLT5pbml0aWFsaXplZCA9IChzZXR1cF9vayAhPSAwKTsKKwl9CisJcmV0dXJuIHNldHVwX29rOworfQorCitzdGF0aWMgdm9pZCBpYm1jYW1fY29uZmlndXJlX3ZpZGVvKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpZiAodXZkID09IE5VTEwpCisJCXJldHVybjsKKworCVJFU1RSSUNUX1RPX1JBTkdFKGluaXRfYnJpZ2h0bmVzcywgMCwgMjU1KTsKKwlSRVNUUklDVF9UT19SQU5HRShpbml0X2NvbnRyYXN0LCAwLCAyNTUpOworCVJFU1RSSUNUX1RPX1JBTkdFKGluaXRfY29sb3IsIDAsIDI1NSk7CisJUkVTVFJJQ1RfVE9fUkFOR0UoaW5pdF9odWUsIDAsIDI1NSk7CisJUkVTVFJJQ1RfVE9fUkFOR0UoaHVlX2NvcnJlY3Rpb24sIDAsIDI1NSk7CisKKwltZW1zZXQoJnV2ZC0+dnBpYywgMCwgc2l6ZW9mKHV2ZC0+dnBpYykpOworCW1lbXNldCgmdXZkLT52cGljX29sZCwgMHg1NSwgc2l6ZW9mKHV2ZC0+dnBpY19vbGQpKTsKKworCXV2ZC0+dnBpYy5jb2xvdXIgPSBpbml0X2NvbG9yIDw8IDg7CisJdXZkLT52cGljLmh1ZSA9IGluaXRfaHVlIDw8IDg7CisJdXZkLT52cGljLmJyaWdodG5lc3MgPSBpbml0X2JyaWdodG5lc3MgPDwgODsKKwl1dmQtPnZwaWMuY29udHJhc3QgPSBpbml0X2NvbnRyYXN0IDw8IDg7CisJdXZkLT52cGljLndoaXRlbmVzcyA9IDEwNSA8PCA4OyAvKiBUaGlzIG9uZSBpc24ndCB1c2VkICovCisJdXZkLT52cGljLmRlcHRoID0gMjQ7CisJdXZkLT52cGljLnBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1JHQjI0OworCisJbWVtc2V0KCZ1dmQtPnZjYXAsIDAsIHNpemVvZih1dmQtPnZjYXApKTsKKwlzdHJjcHkodXZkLT52Y2FwLm5hbWUsICJJQk0gVVNCIENhbWVyYSIpOworCXV2ZC0+dmNhcC50eXBlID0gVklEX1RZUEVfQ0FQVFVSRTsKKwl1dmQtPnZjYXAuY2hhbm5lbHMgPSAxOworCXV2ZC0+dmNhcC5hdWRpb3MgPSAwOworCXV2ZC0+dmNhcC5tYXh3aWR0aCA9IFZJREVPU0laRV9YKHV2ZC0+Y2FudmFzKTsKKwl1dmQtPnZjYXAubWF4aGVpZ2h0ID0gVklERU9TSVpFX1kodXZkLT5jYW52YXMpOworCXV2ZC0+dmNhcC5taW53aWR0aCA9IG1pbl9jYW52YXNXaWR0aDsKKwl1dmQtPnZjYXAubWluaGVpZ2h0ID0gbWluX2NhbnZhc0hlaWdodDsKKworCW1lbXNldCgmdXZkLT52Y2hhbiwgMCwgc2l6ZW9mKHV2ZC0+dmNoYW4pKTsKKwl1dmQtPnZjaGFuLmZsYWdzID0gMDsKKwl1dmQtPnZjaGFuLnR1bmVycyA9IDA7CisJdXZkLT52Y2hhbi5jaGFubmVsID0gMDsKKwl1dmQtPnZjaGFuLnR5cGUgPSBWSURFT19UWVBFX0NBTUVSQTsKKwlzdHJjcHkodXZkLT52Y2hhbi5uYW1lLCAiQ2FtZXJhIik7Cit9CisKKy8qCisgKiBpYm1jYW1fcHJvYmUoKQorICoKKyAqIFRoaXMgcHJvY2VkdXJlIHF1ZXJpZXMgZGV2aWNlIGRlc2NyaXB0b3IgYW5kIGFjY2VwdHMgdGhlIGludGVyZmFjZQorICogaWYgaXQgbG9va3MgbGlrZSBJQk0gQy1pdCBjYW1lcmEuCisgKgorICogSGlzdG9yeToKKyAqIDIyLUphbi0yMDAwIE1vdmVkIGNhbWVyYSBpbml0IGNvZGUgdG8gaWJtY2FtX29wZW4oKQorICogMjc9SmFuLTIwMDAgQ2hhbmdlZCB0byB1c2Ugc3RhdGljIHN0cnVjdHVyZXMsIGFkZGVkIGxvY2tpbmcuCisgKiAyNC1NYXktMjAwMCBDb3JyZWN0ZWQgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbiAoTU9EX3h4eF9VU0VfQ09VTlQpLgorICogMDMtSnVsLTIwMDAgRml4ZWQgZW5kaWFubmVzcyBidWcuCisgKiAxMi1Ob3YtMjAwMCBSZXdvcmtlZCB0byBjb21wbHkgd2l0aCBuZXcgcHJvYmUoKSBzaWduYXR1cmUuCisgKiAyMy1KYW4tMjAwMSBBZGRlZCBjb21wYXRpYmlsaXR5IHdpdGggMi4yLngga2VybmVscy4KKyAqLworc3RhdGljIGludCBpYm1jYW1fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpkZXZpZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgdXZkICp1dmQgPSBOVUxMOworCWludCBpeCwgaSwgbmFzLCBtb2RlbD0wLCBjYW52YXNYPTAsIGNhbnZhc1k9MDsKKwlpbnQgYWN0SW50ZXJmYWNlPS0xLCBpbmFjdEludGVyZmFjZT0tMSwgbWF4UFM9MDsKKwlfX3U4IGlmbnVtID0gaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCXVuc2lnbmVkIGNoYXIgdmlkZW9fZXAgPSAwOworCisJaWYgKGRlYnVnID49IDEpCisJCWluZm8oImlibWNhbV9wcm9iZSglcCwldS4pIiwgaW50ZiwgaWZudW0pOworCisJLyogV2UgZG9uJ3QgaGFuZGxlIG11bHRpLWNvbmZpZyBjYW1lcmFzICovCisJaWYgKGRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBDaGVjayB0aGUgdmVyc2lvbi9yZXZpc2lvbiAqLworCXN3aXRjaCAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkpIHsKKwljYXNlIDB4MDAwMjoKKwkJaWYgKGlmbnVtICE9IDIpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJbW9kZWwgPSBJQk1DQU1fTU9ERUxfMTsKKwkJYnJlYWs7CisJY2FzZSAweDAzMEE6CisJCWlmIChpZm51bSAhPSAwKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWlmICgobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gTkVUQ0FNX1BST0RVQ1RfSUQpIHx8CisJCSAgICAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gVkVPXzgwMERfUFJPRFVDVF9JRCkpCisJCQltb2RlbCA9IElCTUNBTV9NT0RFTF80OworCQllbHNlCisJCQltb2RlbCA9IElCTUNBTV9NT0RFTF8yOworCQlicmVhazsKKwljYXNlIDB4MDMwMToKKwkJaWYgKGlmbnVtICE9IDApCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJbW9kZWwgPSBJQk1DQU1fTU9ERUxfMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyKCJJQk0gY2FtZXJhIHdpdGggcmV2aXNpb24gMHglMDR4IGlzIG5vdCBzdXBwb3J0ZWQuIiwKKwkJCWxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogUHJpbnQgZGV0YWlsZWQgaW5mbyBvbiB3aGF0IHdlIGZvdW5kIHNvIGZhciAqLworCWRvIHsKKwkJY2hhciAqYnJhbmQgPSBOVUxMOworCQlzd2l0Y2ggKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKSB7CisJCWNhc2UgTkVUQ0FNX1BST0RVQ1RfSUQ6CisJCQlicmFuZCA9ICJJQk0gTmV0Q2FtZXJhIjsKKwkJCWJyZWFrOworCQljYXNlIFZFT184MDBDX1BST0RVQ1RfSUQ6CisJCQlicmFuZCA9ICJWZW8gU3RpbmdyYXkgWzgwMENdIjsKKwkJCWJyZWFrOworCQljYXNlIFZFT184MDBEX1BST0RVQ1RfSUQ6CisJCQlicmFuZCA9ICJWZW8gU3RpbmdyYXkgWzgwMERdIjsKKwkJCWJyZWFrOworCQljYXNlIElCTUNBTV9QUk9EVUNUX0lEOgorCQlkZWZhdWx0OgorCQkJYnJhbmQgPSAiSUJNIFBDIENhbWVyYSI7IC8qIGEuay5hLiBYaXJsaW5rIEMtSXQgKi8KKwkJCWJyZWFrOworCQl9CisJCWluZm8oIiVzIFVTQiBjYW1lcmEgZm91bmQgKG1vZGVsICVkLCByZXYuIDB4JTA0eCkiLAorCQkgICAgIGJyYW5kLCBtb2RlbCwgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkpOworCX0gd2hpbGUgKDApOworCisJLyogVmFsaWRhdGUgZm91bmQgaW50ZXJmYWNlOiBtdXN0IGhhdmUgb25lIElTTyBlbmRwb2ludCAqLworCW5hcyA9IGludGYtPm51bV9hbHRzZXR0aW5nOworCWlmIChkZWJ1ZyA+IDApCisJCWluZm8oIk51bWJlciBvZiBhbHRlcm5hdGUgc2V0dGluZ3M9JWQuIiwgbmFzKTsKKwlpZiAobmFzIDwgMikgeworCQllcnIoIlRvbyBmZXcgYWx0ZXJuYXRlIHNldHRpbmdzIGZvciB0aGlzIGNhbWVyYSEiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCS8qIFZhbGlkYXRlIGFsbCBhbHRlcm5hdGUgc2V0dGluZ3MgKi8KKwlmb3IgKGl4PTA7IGl4IDwgbmFzOyBpeCsrKSB7CisJCWNvbnN0IHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKworCQlpbnRlcmZhY2UgPSAmaW50Zi0+YWx0c2V0dGluZ1tpeF07CisJCWkgPSBpbnRlcmZhY2UtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmc7CisJCWlmIChpbnRlcmZhY2UtPmRlc2MuYk51bUVuZHBvaW50cyAhPSAxKSB7CisJCQllcnIoIkludGVyZmFjZSAlZC4gaGFzICV1LiBlbmRwb2ludHMhIiwKKwkJCSAgICBpZm51bSwgKHVuc2lnbmVkKShpbnRlcmZhY2UtPmRlc2MuYk51bUVuZHBvaW50cykpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOworCQlpZiAodmlkZW9fZXAgPT0gMCkKKwkJCXZpZGVvX2VwID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCWVsc2UgaWYgKHZpZGVvX2VwICE9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSB7CisJCQllcnIoIkFsdGVybmF0ZSBzZXR0aW5ncyBoYXZlIGRpZmZlcmVudCBlbmRwb2ludCBhZGRyZXNzZXMhIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlpZiAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAweDAzKSAhPSAweDAxKSB7CisJCQllcnIoIkludGVyZmFjZSAlZC4gaGFzIG5vbi1JU08gZW5kcG9pbnQhIiwgaWZudW0pOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApID09IDApIHsKKwkJCWVycigiSW50ZXJmYWNlICVkLiBoYXMgSVNPIE9VVCBlbmRwb2ludCEiLCBpZm51bSk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlpZiAobGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSA9PSAwKSB7CisJCQlpZiAoaW5hY3RJbnRlcmZhY2UgPCAwKQorCQkJCWluYWN0SW50ZXJmYWNlID0gaTsKKwkJCWVsc2UgeworCQkJCWVycigiTW9yZSB0aGFuIG9uZSBpbmFjdGl2ZSBhbHQuIHNldHRpbmchIik7CisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoYWN0SW50ZXJmYWNlIDwgMCkgeworCQkJCWFjdEludGVyZmFjZSA9IGk7CisJCQkJbWF4UFMgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOworCQkJCWlmIChkZWJ1ZyA+IDApCisJCQkJCWluZm8oIkFjdGl2ZSBzZXR0aW5nPSVkLiBtYXhQUz0lZC4iLCBpLCBtYXhQUyk7CisJCQl9IGVsc2UKKwkJCQllcnIoIk1vcmUgdGhhbiBvbmUgYWN0aXZlIGFsdC4gc2V0dGluZyEgSWdub3JpbmcgIyVkLiIsIGkpOworCQl9CisJfQorCWlmICgobWF4UFMgPD0gMCkgfHwgKGFjdEludGVyZmFjZSA8IDApIHx8IChpbmFjdEludGVyZmFjZSA8IDApKSB7CisJCWVycigiRmFpbGVkIHRvIHJlY29nbml6ZSB0aGUgY2FtZXJhISIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBWYWxpZGF0ZSBvcHRpb25zICovCisJc3dpdGNoIChtb2RlbCkgeworCWNhc2UgSUJNQ0FNX01PREVMXzE6CisJCVJFU1RSSUNUX1RPX1JBTkdFKGxpZ2h0aW5nLCAwLCAyKTsKKwkJUkVTVFJJQ1RfVE9fUkFOR0Uoc2l6ZSwgU0laRV8xMjh4OTYsIFNJWkVfMzUyeDI4OCk7CisJCWlmIChmcmFtZXJhdGUgPCAwKQorCQkJZnJhbWVyYXRlID0gMjsKKwkJY2FudmFzWCA9IDM1MjsKKwkJY2FudmFzWSA9IDI4ODsKKwkJYnJlYWs7CisJY2FzZSBJQk1DQU1fTU9ERUxfMjoKKwkJUkVTVFJJQ1RfVE9fUkFOR0UobGlnaHRpbmcsIDAsIDE1KTsKKwkJUkVTVFJJQ1RfVE9fUkFOR0Uoc2l6ZSwgU0laRV8xNzZ4MTQ0LCBTSVpFXzM1MngyNDApOworCQlpZiAoZnJhbWVyYXRlIDwgMCkKKwkJCWZyYW1lcmF0ZSA9IDI7CisJCWNhbnZhc1ggPSAzNTI7CisJCWNhbnZhc1kgPSAyNDA7CisJCWJyZWFrOworCWNhc2UgSUJNQ0FNX01PREVMXzM6CisJCVJFU1RSSUNUX1RPX1JBTkdFKGxpZ2h0aW5nLCAwLCAxNSk7IC8qIEZJWE1FICovCisJCXN3aXRjaCAoc2l6ZSkgeworCQljYXNlIFNJWkVfMTYweDEyMDoKKwkJCWNhbnZhc1ggPSAxNjA7CisJCQljYW52YXNZID0gMTIwOworCQkJaWYgKGZyYW1lcmF0ZSA8IDApCisJCQkJZnJhbWVyYXRlID0gMjsKKwkJCVJFU1RSSUNUX1RPX1JBTkdFKGZyYW1lcmF0ZSwgMCwgNSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWluZm8oIklCTSBjYW1lcmE6IHVzaW5nIDMyMHgyNDAiKTsKKwkJCXNpemUgPSBTSVpFXzMyMHgyNDA7CisJCQkvKiBObyBicmVhayBoZXJlICovCisJCWNhc2UgU0laRV8zMjB4MjQwOgorCQkJY2FudmFzWCA9IDMyMDsKKwkJCWNhbnZhc1kgPSAyNDA7CisJCQlpZiAoZnJhbWVyYXRlIDwgMCkKKwkJCQlmcmFtZXJhdGUgPSAzOworCQkJUkVTVFJJQ1RfVE9fUkFOR0UoZnJhbWVyYXRlLCAwLCA1KTsKKwkJCWJyZWFrOworCQljYXNlIFNJWkVfNjQweDQ4MDoKKwkJCWNhbnZhc1ggPSA2NDA7CisJCQljYW52YXNZID0gNDgwOworCQkJZnJhbWVyYXRlID0gMDsJLyogU2xvd2VzdCwgYW5kIG1heWJlIGV2ZW4gdGhhdCBpcyB0b28gZmFzdCAqLworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBJQk1DQU1fTU9ERUxfNDoKKwkJUkVTVFJJQ1RfVE9fUkFOR0UobGlnaHRpbmcsIDAsIDIpOworCQlzd2l0Y2ggKHNpemUpIHsKKwkJY2FzZSBTSVpFXzEyOHg5NjoKKwkJCWNhbnZhc1ggPSAxMjg7CisJCQljYW52YXNZID0gOTY7CisJCQlicmVhazsKKwkJY2FzZSBTSVpFXzE2MHgxMjA6CisJCQljYW52YXNYID0gMTYwOworCQkJY2FudmFzWSA9IDEyMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaW5mbygiSUJNIE5ldENhbWVyYTogdXNpbmcgMTc2eDE0NCIpOworCQkJc2l6ZSA9IFNJWkVfMTc2eDE0NDsKKwkJCS8qIE5vIGJyZWFrIGhlcmUgKi8KKwkJY2FzZSBTSVpFXzE3NngxNDQ6CisJCQljYW52YXNYID0gMTc2OworCQkJY2FudmFzWSA9IDE0NDsKKwkJCWJyZWFrOworCQljYXNlIFNJWkVfMzIweDI0MDoKKwkJCWNhbnZhc1ggPSAzMjA7CisJCQljYW52YXNZID0gMjQwOworCQkJYnJlYWs7CisJCWNhc2UgU0laRV8zNTJ4Mjg4OgorCQkJY2FudmFzWCA9IDM1MjsKKwkJCWNhbnZhc1kgPSAyODg7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIoIklCTSBjYW1lcmE6IE1vZGVsICVkLiBub3Qgc3VwcG9ydGVkISIsIG1vZGVsKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJdXZkID0gdXNidmlkZW9fQWxsb2NhdGVEZXZpY2UoY2Ftcyk7CisJaWYgKHV2ZCAhPSBOVUxMKSB7CisJCS8qIEhlcmUgdXZkIGlzIGEgZnVsbHkgYWxsb2NhdGVkIHV2ZCBvYmplY3QgKi8KKwkJdXZkLT5mbGFncyA9IGZsYWdzOworCQl1dmQtPmRlYnVnID0gZGVidWc7CisJCXV2ZC0+ZGV2ID0gZGV2OworCQl1dmQtPmlmYWNlID0gaWZudW07CisJCXV2ZC0+aWZhY2VBbHRJbmFjdGl2ZSA9IGluYWN0SW50ZXJmYWNlOworCQl1dmQtPmlmYWNlQWx0QWN0aXZlID0gYWN0SW50ZXJmYWNlOworCQl1dmQtPnZpZGVvX2VuZHAgPSB2aWRlb19lcDsKKwkJdXZkLT5pc29fcGFja2V0X2xlbiA9IG1heFBTOworCQl1dmQtPnBhbGV0dGVCaXRzID0gMUwgPDwgVklERU9fUEFMRVRURV9SR0IyNDsKKwkJdXZkLT5kZWZhdWx0UGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfUkdCMjQ7CisJCXV2ZC0+Y2FudmFzID0gVklERU9TSVpFKGNhbnZhc1gsIGNhbnZhc1kpOworCQl1dmQtPnZpZGVvc2l6ZSA9IGlibWNhbV9zaXplX3RvX3ZpZGVvc2l6ZShzaXplKTsKKworCQkvKiBJbml0aWFsaXplIGlibWNhbS1zcGVjaWZpYyBkYXRhICovCisJCWFzc2VydChJQk1DQU1fVCh1dmQpICE9IE5VTEwpOworCQlJQk1DQU1fVCh1dmQpLT5jYW1lcmFfbW9kZWwgPSBtb2RlbDsKKwkJSUJNQ0FNX1QodXZkKS0+aW5pdGlhbGl6ZWQgPSAwOworCisJCWlibWNhbV9jb25maWd1cmVfdmlkZW8odXZkKTsKKworCQlpID0gdXNidmlkZW9fUmVnaXN0ZXJWaWRlb0RldmljZSh1dmQpOworCQlpZiAoaSAhPSAwKSB7CisJCQllcnIoInVzYnZpZGVvX1JlZ2lzdGVyVmlkZW9EZXZpY2UoKSBmYWlsZWQuIik7CisJCQl1dmQgPSBOVUxMOworCQl9CisJfQorCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIHV2ZCk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFX1ZFUihJQk1DQU1fVkVORE9SX0lELCBJQk1DQU1fUFJPRFVDVF9JRCwgMHgwMDAyLCAweDAwMDIpIH0sCS8qIE1vZGVsIDEgKi8KKwl7IFVTQl9ERVZJQ0VfVkVSKElCTUNBTV9WRU5ET1JfSUQsIElCTUNBTV9QUk9EVUNUX0lELCAweDAzMGEsIDB4MDMwYSkgfSwJLyogTW9kZWwgMiAqLworCXsgVVNCX0RFVklDRV9WRVIoSUJNQ0FNX1ZFTkRPUl9JRCwgSUJNQ0FNX1BST0RVQ1RfSUQsIDB4MDMwMSwgMHgwMzAxKSB9LAkvKiBNb2RlbCAzICovCisJeyBVU0JfREVWSUNFX1ZFUihJQk1DQU1fVkVORE9SX0lELCBORVRDQU1fUFJPRFVDVF9JRCwgMHgwMzBhLCAweDAzMGEpIH0sCS8qIE1vZGVsIDQgKi8KKwl7IFVTQl9ERVZJQ0VfVkVSKElCTUNBTV9WRU5ET1JfSUQsIFZFT184MDBDX1BST0RVQ1RfSUQsIDB4MDMwYSwgMHgwMzBhKSB9LAkvKiBNb2RlbCAyICovCisJeyBVU0JfREVWSUNFX1ZFUihJQk1DQU1fVkVORE9SX0lELCBWRU9fODAwRF9QUk9EVUNUX0lELCAweDAzMGEsIDB4MDMwYSkgfSwJLyogTW9kZWwgNCAqLworCXsgfSAgLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKy8qCisgKiBpYm1jYW1faW5pdCgpCisgKgorICogVGhpcyBjb2RlIGlzIHJ1biB0byBpbml0aWFsaXplIHRoZSBkcml2ZXIuCisgKgorICogSGlzdG9yeToKKyAqIDEvMjcvMDAgIFJld29ya2VkIHRvIHVzZSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBpYm1jYW0gc3RydWN0dXJlcy4KKyAqIDIxLzEwLzAwIENvbXBsZXRlbHkgcmVkZXNpZ25lZCB0byB1c2UgdXNidmlkZW8gc2VydmljZXMuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGlibWNhbV9pbml0KHZvaWQpCit7CisJc3RydWN0IHVzYnZpZGVvX2NiIGNiVGJsOworCW1lbXNldCgmY2JUYmwsIDAsIHNpemVvZihjYlRibCkpOworCWNiVGJsLnByb2JlID0gaWJtY2FtX3Byb2JlOworCWNiVGJsLnNldHVwT25PcGVuID0gaWJtY2FtX3NldHVwX29uX29wZW47CisJY2JUYmwudmlkZW9TdGFydCA9IGlibWNhbV92aWRlb19zdGFydDsKKwljYlRibC52aWRlb1N0b3AgPSBpYm1jYW1fdmlkZW9fc3RvcDsKKwljYlRibC5wcm9jZXNzRGF0YSA9IGlibWNhbV9Qcm9jZXNzSXNvY0RhdGE7CisJY2JUYmwucG9zdFByb2Nlc3MgPSB1c2J2aWRlb19EZWludGVybGFjZUZyYW1lOworCWNiVGJsLmFkanVzdFBpY3R1cmUgPSBpYm1jYW1fYWRqdXN0X3BpY3R1cmU7CisJY2JUYmwuZ2V0RlBTID0gaWJtY2FtX2NhbGN1bGF0ZV9mcHM7CisJcmV0dXJuIHVzYnZpZGVvX3JlZ2lzdGVyKAorCQkmY2FtcywKKwkJTUFYX0lCTUNBTSwKKwkJc2l6ZW9mKGlibWNhbV90KSwKKwkJImlibWNhbSIsCisJCSZjYlRibCwKKwkJVEhJU19NT0RVTEUsCisJCWlkX3RhYmxlKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlibWNhbV9jbGVhbnVwKHZvaWQpCit7CisJdXNidmlkZW9fRGVyZWdpc3RlcigmY2Ftcyk7Cit9CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CisKK21vZHVsZV9pbml0KGlibWNhbV9pbml0KTsKK21vZHVsZV9leGl0KGlibWNhbV9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL2tvbmljYXdjLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9rb25pY2F3Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NTIxYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9rb25pY2F3Yy5jCkBAIC0wLDAgKzEsOTQ3IEBACisvKgorICoga29uaWNhd2MuYyAtIGtvbmljYSB3ZWJjYW0gZHJpdmVyCisgKgorICogQXV0aG9yOiBTaW1vbiBFdmFucyA8c3BzZUBzZWNyZXQub3JnLnVrPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBTaW1vbiBFdmFucworICoKKyAqIExpY2VuY2U6IEdQTAorICoKKyAqIERyaXZlciBmb3IgVVNCIHdlYmNhbXMgYmFzZWQgb24gS29uaWNhIGNoaXBzZXQuIFRoaXMKKyAqIGNoaXBzZXQgaXMgdXNlZCBpbiBJbnRlbCBZQzc2IGNhbWVyYS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorCisjaW5jbHVkZSAidXNidmlkZW8uaCIKKworI2RlZmluZSBNQVhfQlJJR0hUTkVTUwkxMDgKKyNkZWZpbmUgTUFYX0NPTlRSQVNUCTEwOAorI2RlZmluZSBNQVhfU0FUVVJBVElPTgkxMDgKKyNkZWZpbmUgTUFYX1NIQVJQTkVTUwkxMDgKKyNkZWZpbmUgTUFYX1dISVRFQkFMCTM3MgorI2RlZmluZSBNQVhfU1BFRUQJNgorCisKKyNkZWZpbmUgTUFYX0NBTUVSQVMJMQorCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCSJ2MS40IgorI2RlZmluZSBEUklWRVJfREVTQwkiS29uaWNhIFdlYmNhbSBkcml2ZXIiCisKK2VudW0gY3RybF9yZXEgeworCVNldFdoaXRlYmFsCT0gMHgwMSwKKwlTZXRCcmlnaHRuZXNzCT0gMHgwMiwKKyAgICAgICAgU2V0U2hhcnBuZXNzCT0gMHgwMywKKwlTZXRDb250cmFzdAk9IDB4MDQsCisJU2V0U2F0dXJhdGlvbgk9IDB4MDUsCit9OworCisKK2VudW0gZnJhbWVfc2l6ZXMgeworCVNJWkVfMTYwWDEyMAk9IDAsCisJU0laRV8xNjBYMTM2CT0gMSwKKwlTSVpFXzE3NlgxNDQJPSAyLAorCVNJWkVfMzIwWDI0MAk9IDMsCisJCit9OworCisjZGVmaW5lIE1BWF9GUkFNRV9TSVpFCVNJWkVfMzIwWDI0MAorCitzdGF0aWMgc3RydWN0IHVzYnZpZGVvICpjYW1zOworCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworc3RhdGljIGludCBkZWJ1ZzsKKyNkZWZpbmUgREVCVUcobiwgZm9ybWF0LCBhcmcuLi4pIFwKKwlpZiAobiA8PSBkZWJ1ZykgewkgXAorCQlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiVzKCk6ICIgZm9ybWF0ICJcbiIsIF9fRlVOQ1RJT05fXyAsICMjIGFyZyk7IFwKKwl9CisjZWxzZQorI2RlZmluZSBERUJVRyhuLCBhcmcuLi4pCitzdGF0aWMgY29uc3QgaW50IGRlYnVnID0gMDsKKyNlbmRpZgorCisKKy8qIFNvbWUgZGVmYXVsdCB2YWx1ZXMgZm9yIGluaXRpYWwgY2FtZXJhIHNldHRpbmdzLAorICAgY2FuIGJlIHNldCBieSBtb2Rwcm9iZSAqLworCitzdGF0aWMgaW50IHNpemU7CQorc3RhdGljIGludCBzcGVlZCA9IDY7CQkvKiBTcGVlZCAoZnBzKSAwIChzbG93ZXN0KSB0byA2IChmYXN0ZXN0KSAqLworc3RhdGljIGludCBicmlnaHRuZXNzID0JTUFYX0JSSUdIVE5FU1MvMjsKK3N0YXRpYyBpbnQgY29udHJhc3QgPQlNQVhfQ09OVFJBU1QvMjsKK3N0YXRpYyBpbnQgc2F0dXJhdGlvbiA9CU1BWF9TQVRVUkFUSU9OLzI7CitzdGF0aWMgaW50IHNoYXJwbmVzcyA9CU1BWF9TSEFSUE5FU1MvMjsKK3N0YXRpYyBpbnQgd2hpdGViYWwgPQkzKihNQVhfV0hJVEVCQUwvNCk7CisKK3N0YXRpYyBpbnQgc3BkX3RvX2lmYWNlW10gPSB7IDEsIDAsIDMsIDIsIDQsIDUsIDYgfTsKKworLyogVGhlc2UgRlBTIHNwZWVkcyBhcmUgZnJvbSB0aGUgd2luZG93cyBjb25maWcgYm94LiBUaGV5IGFyZQorICogaW5kZXhlZCBvbiBzaXplICgwLTIpIGFuZCBzcGVlZCAoMC02KS4gRGl2aWRlIGJ5IDMgdG8gZ2V0IHRoZQorICogcmVhbCBmcHMuCisgKi8KKworc3RhdGljIGludCBzcGRfdG9fZnBzW11bN10gPSB7IHsgMjQsIDQwLCA0OCwgNjAsIDcyLCA4MCwgMTAwIH0sCisJCQkgICAgICAgeyAyNCwgNDAsIDQ4LCA2MCwgNzIsIDgwLCAxMDAgfSwKKwkJCSAgICAgICB7IDE4LCAzMCwgMzYsIDQ1LCA1NCwgNjAsIDc1ICB9LAorCQkJICAgICAgIHsgNiwgIDEwLCAxMiwgMTUsIDE4LCAyMSwgMjUgIH0gfTsKKworc3RydWN0IGNhbV9zaXplIHsKKwl1MTYJd2lkdGg7CisJdTE2CWhlaWdodDsKKwl1OAljbWQ7Cit9OworCitzdGF0aWMgc3RydWN0IGNhbV9zaXplIGNhbWVyYV9zaXplc1tdID0geyB7IDE2MCwgMTIwLCAweDcgfSwKKwkJCQkJICB7IDE2MCwgMTM2LCAweGEgfSwKKwkJCQkJICB7IDE3NiwgMTQ0LCAweDQgfSwKKwkJCQkJICB7IDMyMCwgMjQwLCAweDUgfSB9OworCitzdHJ1Y3Qga29uaWNhd2MgeworCXU4IGJyaWdodG5lc3M7CQkvKiBjYW1lcmEgdXNlcyAwIC0gOSwgeDExIGZvciByZWFsIHZhbHVlICovCisJdTggY29udHJhc3Q7CQkvKiBhcyBhYm92ZSAqLworCXU4IHNhdHVyYXRpb247CQkvKiBhcyBhYm92ZSAqLworCXU4IHNoYXJwbmVzczsJCS8qIGFzIGFib3ZlICovCisJdTggd2hpdGVfYmFsOwkJLyogMCAtIDMzLCB4MTEgZm9yIHJlYWwgdmFsdWUgKi8KKwl1OCBzcGVlZDsJCS8qIFN0b3JlZCBhcyAwIC0gNiwgdXNlZCBhcyBpbmRleCBpbiBzcGRfdG9fKiAoYWJvdmUpICovCisJdTggc2l6ZTsJCS8qIEZyYW1lIFNpemUgKi8KKwlpbnQgaGVpZ2h0OworCWludCB3aWR0aDsKKwlzdHJ1Y3QgdXJiICpzdHNfdXJiW1VTQlZJREVPX05VTVNCVUZdOworCXU4IHN0c19idWZbVVNCVklERU9fTlVNU0JVRl1bRlJBTUVTX1BFUl9ERVNDXTsKKwlzdHJ1Y3QgdXJiICpsYXN0X2RhdGFfdXJiOworCWludCBsYXN0ZnJhbWU7CisJaW50IGN1cl9mcmFtZV9zaXplOwkvKiBudW1iZXIgb2YgYnl0ZXMgaW4gY3VycmVudCBmcmFtZSBzaXplICovCisJaW50IG1heGxpbmU7CQkvKiBudW1iZXIgb2YgbGluZXMgcGVyIGZyYW1lICovCisJaW50IHlwbGFuZXN6OwkJLyogTnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBZIHBsYW5lICovCisJdW5zaWduZWQgaW50IGJ1dHRvbnN0czoxOworI2lmZGVmIENPTkZJR19JTlBVVAorCXN0cnVjdCBpbnB1dF9kZXYgaW5wdXQ7CisJY2hhciBpbnB1dF9waHlzbmFtZVs2NF07CisjZW5kaWYKK307CisKKworI2RlZmluZSBrb25pY2F3Y19zZXRfbWlzYyh1dmQsIHJlcSwgdmFsdWUsIGluZGV4KQkJa29uaWNhd2NfY3RybF9tc2codXZkLCBVU0JfRElSX09VVCwgcmVxLCB2YWx1ZSwgaW5kZXgsIE5VTEwsIDApCisjZGVmaW5lIGtvbmljYXdjX2dldF9taXNjKHV2ZCwgcmVxLCB2YWx1ZSwgaW5kZXgsIGJ1Ziwgc3opCWtvbmljYXdjX2N0cmxfbXNnKHV2ZCwgVVNCX0RJUl9JTiwgcmVxLCB2YWx1ZSwgaW5kZXgsIGJ1Ziwgc3opCisjZGVmaW5lIGtvbmljYXdjX3NldF92YWx1ZSh1dmQsIHZhbHVlLCBpbmRleCkJCQlrb25pY2F3Y19jdHJsX21zZyh1dmQsIFVTQl9ESVJfT1VULCAyLCB2YWx1ZSwgaW5kZXgsIE5VTEwsIDApCisKKworc3RhdGljIGludCBrb25pY2F3Y19jdHJsX21zZyhzdHJ1Y3QgdXZkICp1dmQsIHU4IGRpciwgdTggcmVxdWVzdCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIHZvaWQgKmJ1ZiwgaW50IGxlbikKK3sKKyAgICAgICAgaW50IHJldHZhbCA9IHVzYl9jb250cm9sX21zZyh1dmQtPmRldiwKKwkJZGlyID8gdXNiX3JjdmN0cmxwaXBlKHV2ZC0+ZGV2LCAwKSA6IHVzYl9zbmRjdHJscGlwZSh1dmQtPmRldiwgMCksCisJCSAgICByZXF1ZXN0LCAweDQwIHwgZGlyLCB2YWx1ZSwgaW5kZXgsIGJ1ZiwgbGVuLCAxMDAwKTsKKyAgICAgICAgcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrb25pY2F3Y19jYW1lcmFfb24oc3RydWN0IHV2ZCAqdXZkKQoreworICAgICAgICBERUJVRygwLCAiY2FtZXJhIG9uIik7CisgICAgICAgIGtvbmljYXdjX3NldF9taXNjKHV2ZCwgMHgyLCAxLCAweDBiKTsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQga29uaWNhd2NfY2FtZXJhX29mZihzdHJ1Y3QgdXZkICp1dmQpCit7CisgICAgICAgIERFQlVHKDAsICJjYW1lcmEgb2ZmIik7CisgICAgICAgIGtvbmljYXdjX3NldF9taXNjKHV2ZCwgMHgyLCAwLCAweDBiKTsKK30KKworCitzdGF0aWMgdm9pZCBrb25pY2F3Y19zZXRfY2FtZXJhX3NpemUoc3RydWN0IHV2ZCAqdXZkKQoreworCXN0cnVjdCBrb25pY2F3YyAqY2FtID0gKHN0cnVjdCBrb25pY2F3YyAqKXV2ZC0+dXNlcl9kYXRhOworCisJa29uaWNhd2Nfc2V0X21pc2ModXZkLCAweDIsIGNhbWVyYV9zaXplc1tjYW0tPnNpemVdLmNtZCwgMHgwOCk7CisJY2FtLT53aWR0aCA9IGNhbWVyYV9zaXplc1tjYW0tPnNpemVdLndpZHRoOworCWNhbS0+aGVpZ2h0ID0gY2FtZXJhX3NpemVzW2NhbS0+c2l6ZV0uaGVpZ2h0OworCWNhbS0+eXBsYW5lc3ogPSBjYW0tPmhlaWdodCAqIGNhbS0+d2lkdGg7CisJY2FtLT5jdXJfZnJhbWVfc2l6ZSA9IChjYW0tPnlwbGFuZXN6ICogMykgLyAyOworCWNhbS0+bWF4bGluZSA9IGNhbS0+eXBsYW5lc3ogLyAyNTY7CisJdXZkLT52aWRlb3NpemUgPSBWSURFT1NJWkUoY2FtLT53aWR0aCwgY2FtLT5oZWlnaHQpOworfQorCisKK3N0YXRpYyBpbnQga29uaWNhd2Nfc2V0dXBfb25fb3BlbihzdHJ1Y3QgdXZkICp1dmQpCit7CisJc3RydWN0IGtvbmljYXdjICpjYW0gPSAoc3RydWN0IGtvbmljYXdjICopdXZkLT51c2VyX2RhdGE7CisKKwlERUJVRygxLCAic2V0dGluZyBicmlnaHRuZXNzIHRvICVkICglZCkiLCBjYW0tPmJyaWdodG5lc3MsCisJICAgIGNhbS0+YnJpZ2h0bmVzcyAqIDExKTsKKwlrb25pY2F3Y19zZXRfdmFsdWUodXZkLCBjYW0tPmJyaWdodG5lc3MsIFNldEJyaWdodG5lc3MpOworCURFQlVHKDEsICJzZXR0aW5nIHdoaXRlIGJhbGFuY2UgdG8gJWQgKCVkKSIsIGNhbS0+d2hpdGVfYmFsLAorCSAgICBjYW0tPndoaXRlX2JhbCAqIDExKTsKKwlrb25pY2F3Y19zZXRfdmFsdWUodXZkLCBjYW0tPndoaXRlX2JhbCwgU2V0V2hpdGViYWwpOworCURFQlVHKDEsICJzZXR0aW5nIGNvbnRyYXN0IHRvICVkICglZCkiLCBjYW0tPmNvbnRyYXN0LAorCSAgICBjYW0tPmNvbnRyYXN0ICogMTEpOworCWtvbmljYXdjX3NldF92YWx1ZSh1dmQsIGNhbS0+Y29udHJhc3QsIFNldENvbnRyYXN0KTsKKwlERUJVRygxLCAic2V0dGluZyBzYXR1cmF0aW9uIHRvICVkICglZCkiLCBjYW0tPnNhdHVyYXRpb24sCisJICAgIGNhbS0+c2F0dXJhdGlvbiAqIDExKTsKKwlrb25pY2F3Y19zZXRfdmFsdWUodXZkLCBjYW0tPnNhdHVyYXRpb24sIFNldFNhdHVyYXRpb24pOworCURFQlVHKDEsICJzZXR0aW5nIHNoYXJwbmVzcyB0byAlZCAoJWQpIiwgY2FtLT5zaGFycG5lc3MsCisJICAgIGNhbS0+c2hhcnBuZXNzICogMTEpOworCWtvbmljYXdjX3NldF92YWx1ZSh1dmQsIGNhbS0+c2hhcnBuZXNzLCBTZXRTaGFycG5lc3MpOworCWtvbmljYXdjX3NldF9jYW1lcmFfc2l6ZSh1dmQpOworCWNhbS0+bGFzdGZyYW1lID0gLTI7CisJY2FtLT5idXR0b25zdHMgPSAwOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIGtvbmljYXdjX2FkanVzdF9waWN0dXJlKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlzdHJ1Y3Qga29uaWNhd2MgKmNhbSA9IChzdHJ1Y3Qga29uaWNhd2MgKil1dmQtPnVzZXJfZGF0YTsKKworCWtvbmljYXdjX2NhbWVyYV9vZmYodXZkKTsKKwlERUJVRygxLCAibmV3IGJyaWdodG5lc3M6ICVkIiwgdXZkLT52cGljLmJyaWdodG5lc3MpOworCXV2ZC0+dnBpYy5icmlnaHRuZXNzID0gKHV2ZC0+dnBpYy5icmlnaHRuZXNzID4gTUFYX0JSSUdIVE5FU1MpID8gTUFYX0JSSUdIVE5FU1MgOiB1dmQtPnZwaWMuYnJpZ2h0bmVzczsKKwlpZihjYW0tPmJyaWdodG5lc3MgIT0gdXZkLT52cGljLmJyaWdodG5lc3MgLyAxMSkgeworCSAgIGNhbS0+YnJpZ2h0bmVzcyA9IHV2ZC0+dnBpYy5icmlnaHRuZXNzIC8gMTE7CisJICAgREVCVUcoMSwgInNldHRpbmcgYnJpZ2h0bmVzcyB0byAlZCAoJWQpIiwgY2FtLT5icmlnaHRuZXNzLAorCSAgICAgICBjYW0tPmJyaWdodG5lc3MgKiAxMSk7CisJICAga29uaWNhd2Nfc2V0X3ZhbHVlKHV2ZCwgY2FtLT5icmlnaHRuZXNzLCBTZXRCcmlnaHRuZXNzKTsKKwl9CisKKwlERUJVRygxLCAibmV3IGNvbnRyYXN0OiAlZCIsIHV2ZC0+dnBpYy5jb250cmFzdCk7CisJdXZkLT52cGljLmNvbnRyYXN0ID0gKHV2ZC0+dnBpYy5jb250cmFzdCA+IE1BWF9DT05UUkFTVCkgPyBNQVhfQ09OVFJBU1QgOiB1dmQtPnZwaWMuY29udHJhc3Q7CisJaWYoY2FtLT5jb250cmFzdCAhPSB1dmQtPnZwaWMuY29udHJhc3QgLyAxMSkgeworCQljYW0tPmNvbnRyYXN0ID0gdXZkLT52cGljLmNvbnRyYXN0IC8gMTE7CisJCURFQlVHKDEsICJzZXR0aW5nIGNvbnRyYXN0IHRvICVkICglZCkiLCBjYW0tPmNvbnRyYXN0LAorCQkgICAgY2FtLT5jb250cmFzdCAqIDExKTsKKwkJa29uaWNhd2Nfc2V0X3ZhbHVlKHV2ZCwgY2FtLT5jb250cmFzdCwgU2V0Q29udHJhc3QpOworCX0KKwlrb25pY2F3Y19jYW1lcmFfb24odXZkKTsKK30KKworCitzdGF0aWMgaW50IGtvbmljYXdjX2NvbXByZXNzX2lzbyhzdHJ1Y3QgdXZkICp1dmQsIHN0cnVjdCB1cmIgKmRhdGF1cmIsIHN0cnVjdCB1cmIgKnN0c3VyYikKK3sKKwljaGFyICpjZGF0YTsKKwlpbnQgaSwgdG90bGVuID0gMDsKKwl1bnNpZ25lZCBjaGFyICpzdGF0dXMgPSBzdHN1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQga2VlcCA9IDAsIGRpc2NhcmQgPSAwLCBiYWQgPSAwOworCXN0cnVjdCBrb25pY2F3YyAqY2FtID0gKHN0cnVjdCBrb25pY2F3YyAqKXV2ZC0+dXNlcl9kYXRhOworCisJZm9yIChpID0gMDsgaSA8IGRhdGF1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJaW50IGJ1dHRvbiA9IGNhbS0+YnV0dG9uc3RzOworCQl1bnNpZ25lZCBjaGFyIHN0czsKKwkJaW50IG4gPSBkYXRhdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoOworCQlpbnQgc3QgPSBkYXRhdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXM7CisJCWNkYXRhID0gZGF0YXVyYi0+dHJhbnNmZXJfYnVmZmVyICsKKwkJCWRhdGF1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKKworCQkvKiBEZXRlY3QgYW5kIGlnbm9yZSBlcnJvcmVkIHBhY2tldHMgKi8KKwkJaWYgKHN0IDwgMCkgeworCQkJREVCVUcoMSwgIkRhdGEgZXJyb3I6IHBhY2tldD0lZC4gbGVuPSVkLiBzdGF0dXM9JWQuIiwKKwkJCSAgICAgIGksIG4sIHN0KTsKKwkJCXV2ZC0+c3RhdHMuaXNvX2Vycl9jb3VudCsrOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBEZXRlY3QgYW5kIGlnbm9yZSBlbXB0eSBwYWNrZXRzICovCisJCWlmIChuIDw9IDApIHsKKwkJCXV2ZC0+c3RhdHMuaXNvX3NraXBfY291bnQrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU2VlIHdoYXQgdGhlIHN0YXR1cyBkYXRhIHNhaWQgYWJvdXQgdGhlIHBhY2tldCAqLworCQlzdHMgPSAqKHN0YXR1cytzdHN1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCk7CisKKwkJLyogc3RzOiAweDgwLTB4ZmY6IGZyYW1lIHN0YXJ0IHdpdGggZnJhbWUgbnVtYmVyIChpZSAwLTdmKQorCQkgKiBvdGhlcndpc2U6CisJCSAqIGJpdCAwIDA6IGtlZXAgcGFja2V0CisJCSAqCSAxOiBkcm9wIHBhY2tldCAocGFkZGluZyBkYXRhKQorCQkgKgorCQkgKiBiaXQgNCAwIGJ1dHRvbiBub3QgY2xpY2tlZAorCQkgKiAgICAgICAxIGJ1dHRvbiBjbGlja2VkCisJCSAqIGJ1dHRvbiBpcyB1c2VkIHRvIGB0YWtlIGEgcGljdHVyZScgKGluIHNvZnR3YXJlKQorCQkgKi8KKworCQlpZihzdHMgPCAweDgwKSB7CisJCQlidXR0b24gPSAhIShzdHMgJiAweDQwKTsKKwkJCXN0cyAmPSB+MHg0MDsKKwkJfQorCQkKKwkJLyogd29yayBvdXQgdGhlIGJ1dHRvbiBzdGF0dXMsIGJ1dCBkb24ndCBkbworCQkgICBhbnl0aGluZyB3aXRoIGl0IGZvciBub3cgKi8KKworCQlpZihidXR0b24gIT0gY2FtLT5idXR0b25zdHMpIHsKKwkJCURFQlVHKDIsICJidXR0b246ICVzY2xpY2tlZCIsIGJ1dHRvbiA/ICIiIDogInVuIik7CisJCQljYW0tPmJ1dHRvbnN0cyA9IGJ1dHRvbjsKKyNpZmRlZiBDT05GSUdfSU5QVVQKKwkJCWlucHV0X3JlcG9ydF9rZXkoJmNhbS0+aW5wdXQsIEJUTl8wLCBjYW0tPmJ1dHRvbnN0cyk7CisJCQlpbnB1dF9zeW5jKCZjYW0tPmlucHV0KTsKKyNlbmRpZgorCQl9CisKKwkJaWYoc3RzID09IDB4MDEpIHsgLyogZHJvcCBmcmFtZSAqLworCQkJZGlzY2FyZCsrOworCQkJY29udGludWU7CisJCX0KKwkJCisJCWlmKChzdHMgPiAweDAxKSAmJiAoc3RzIDwgMHg4MCkpIHsKKwkJCWluZm8oInVua25vd24gc3RhdHVzICUyLjJ4Iiwgc3RzKTsKKwkJCWJhZCsrOworCQkJY29udGludWU7CisJCX0KKwkJaWYoIXN0cyAmJiBjYW0tPmxhc3RmcmFtZSA9PSAtMikgeworCQkJREVCVUcoMiwgImRyb3BwaW5nIGZyYW1lIGxvb2tpbmcgZm9yIGltYWdlIHN0YXJ0Iik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWtlZXArKzsKKwkJaWYoc3RzICYgMHg4MCkgeyAvKiBmcmFtZSBzdGFydCAqLworCQkJdW5zaWduZWQgY2hhciBtYXJrZXJbXSA9IHsgMCwgMHhmZiwgMCwgMHgwMCB9OworCisJCQlpZihjYW0tPmxhc3RmcmFtZSA9PSAtMikgeworCQkJCURFQlVHKDIsICJmb3VuZCBpbml0aWFsIGltYWdlIik7CisJCQkJY2FtLT5sYXN0ZnJhbWUgPSAtMTsKKwkJCX0KKwkJCQkKKwkJCW1hcmtlclszXSA9IHN0cyAmIDB4N0Y7CisJCQlSaW5nUXVldWVfRW5xdWV1ZSgmdXZkLT5kcCwgbWFya2VyLCA0KTsKKwkJCXRvdGxlbiArPSA0OworCQl9CisKKwkJdG90bGVuICs9IG47CS8qIExpdHRsZSBsb2NhbCBhY2NvdW50aW5nICovCisJCVJpbmdRdWV1ZV9FbnF1ZXVlKCZ1dmQtPmRwLCBjZGF0YSwgbik7CisJfQorCURFQlVHKDgsICJmaW5pc2hlZDoga2VlcCA9ICVkIGRpc2NhcmQgPSAlZCBiYWQgPSAlZCBhZGRlZCAlZCBieXRlcyIsCisJCSAgICBrZWVwLCBkaXNjYXJkLCBiYWQsIHRvdGxlbik7CisJcmV0dXJuIHRvdGxlbjsKK30KKworCitzdGF0aWMgdm9pZCByZXN1Ym1pdF91cmIoc3RydWN0IHV2ZCAqdXZkLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisgICAgICAgIGludCBpLCByZXQ7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBGUkFNRVNfUEVSX0RFU0M7IGkrKykgeworICAgICAgICAgICAgICAgIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzID0gMDsKKyAgICAgICAgfQorICAgICAgICB1cmItPmRldiA9IHV2ZC0+ZGV2OworICAgICAgICB1cmItPnN0YXR1cyA9IDA7CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlERUJVRygzLCAic3VibWl0dGluZyB1cmIgb2YgbGVuZ3RoICVkIiwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKyAgICAgICAgaWYocmV0KQorICAgICAgICAgICAgICAgIGVycigidXNiX3N1Ym1pdF91cmIgZXJyb3IgKCVkKSIsIHJldCk7CisKK30KKworCitzdGF0aWMgdm9pZCBrb25pY2F3Y19pc29jX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1dmQgKnV2ZCA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qga29uaWNhd2MgKmNhbSA9IChzdHJ1Y3Qga29uaWNhd2MgKil1dmQtPnVzZXJfZGF0YTsKKworCS8qIFdlIGRvbid0IHdhbnQgdG8gZG8gYW55dGhpbmcgaWYgd2UgYXJlIGFib3V0IHRvIGJlIHJlbW92ZWQhICovCisJaWYgKCFDQU1FUkFfSVNfT1BFUkFUSU9OQUwodXZkKSkKKwkJcmV0dXJuOworCisJaWYgKCF1dmQtPnN0cmVhbWluZykgeworCQlERUJVRygxLCAiTm90IHN0cmVhbWluZywgYnV0IGludGVycnVwdCEiKTsKKwkJcmV0dXJuOworCX0KKworCURFQlVHKDMsICJnb3QgZnJhbWUgJWQgbGVuID0gJWQgYnVmbGVuID0lZCIsIHVyYi0+c3RhcnRfZnJhbWUsIHVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKworCXV2ZC0+c3RhdHMudXJiX2NvdW50Kys7CisKKwlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID4gMzIpIHsKKwkJY2FtLT5sYXN0X2RhdGFfdXJiID0gdXJiOworCQlyZXR1cm47CisJfQorCS8qIENvcHkgdGhlIGRhdGEgcmVjZWl2ZWQgaW50byByaW5nIHF1ZXVlICovCisJaWYoY2FtLT5sYXN0X2RhdGFfdXJiKSB7CisJCWludCBsZW4gPSAwOworCQlpZih1cmItPnN0YXJ0X2ZyYW1lICE9IGNhbS0+bGFzdF9kYXRhX3VyYi0+c3RhcnRfZnJhbWUpCisJCQllcnIoIkxvc3Qgc3luYyBvbiBmcmFtZXMiKTsKKwkJZWxzZSBpZiAoIXVyYi0+c3RhdHVzICYmICFjYW0tPmxhc3RfZGF0YV91cmItPnN0YXR1cykKKwkJCWxlbiA9IGtvbmljYXdjX2NvbXByZXNzX2lzbyh1dmQsIGNhbS0+bGFzdF9kYXRhX3VyYiwgdXJiKTsKKworCQlyZXN1Ym1pdF91cmIodXZkLCBjYW0tPmxhc3RfZGF0YV91cmIpOworCQlyZXN1Ym1pdF91cmIodXZkLCB1cmIpOworCQljYW0tPmxhc3RfZGF0YV91cmIgPSBOVUxMOworCQl1dmQtPnN0YXRzLnVyYl9sZW5ndGggPSBsZW47CisJCXV2ZC0+c3RhdHMuZGF0YV9jb3VudCArPSBsZW47CisJCWlmKGxlbikKKwkJCVJpbmdRdWV1ZV9XYWtlVXBJbnRlcnJ1cHRpYmxlKCZ1dmQtPmRwKTsKKwkJcmV0dXJuOworCX0KKwlyZXR1cm47Cit9CisKKworc3RhdGljIGludCBrb25pY2F3Y19zdGFydF9kYXRhKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gdXZkLT5kZXY7CisJaW50IGksIGVyckZsYWc7CisJc3RydWN0IGtvbmljYXdjICpjYW0gPSAoc3RydWN0IGtvbmljYXdjICopdXZkLT51c2VyX2RhdGE7CisJaW50IHBrdHN6OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZSA9IE5VTEw7CisKKwlpbnRmID0gdXNiX2lmbnVtX3RvX2lmKGRldiwgdXZkLT5pZmFjZSk7CisJaWYgKGludGYpCisJCWludGVyZmFjZSA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpbnRmLAorCQkJCXNwZF90b19pZmFjZVtjYW0tPnNwZWVkXSk7CisJaWYgKCFpbnRlcmZhY2UpCisJCXJldHVybiAtRU5YSU87CisJcGt0c3ogPSBsZTE2X3RvX2NwdShpbnRlcmZhY2UtPmVuZHBvaW50WzFdLmRlc2Mud01heFBhY2tldFNpemUpOworCURFQlVHKDEsICJwa3RzeiA9ICVkIiwgcGt0c3opOworCWlmICghQ0FNRVJBX0lTX09QRVJBVElPTkFMKHV2ZCkpIHsKKwkJZXJyKCJDYW1lcmEgaXMgbm90IG9wZXJhdGlvbmFsIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwl1dmQtPmN1cmZyYW1lID0gLTE7CisJa29uaWNhd2NfY2FtZXJhX29uKHV2ZCk7CisJLyogQWx0ZXJuYXRlIGludGVyZmFjZSAxIGlzIGlzIHRoZSBiaWdnZXN0IGZyYW1lIHNpemUgKi8KKwlpID0gdXNiX3NldF9pbnRlcmZhY2UoZGV2LCB1dmQtPmlmYWNlLCB1dmQtPmlmYWNlQWx0QWN0aXZlKTsKKwlpZiAoaSA8IDApIHsKKwkJZXJyKCJ1c2Jfc2V0X2ludGVyZmFjZSBlcnJvciIpOworCQl1dmQtPmxhc3RfZXJyb3IgPSBpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIFdlIGRvdWJsZSBidWZmZXIgdGhlIElzbyBsaXN0cyAqLworCWZvciAoaT0wOyBpIDwgVVNCVklERU9fTlVNU0JVRjsgaSsrKSB7CisJCWludCBqLCBrOworCQlzdHJ1Y3QgdXJiICp1cmIgPSB1dmQtPnNidWZbaV0udXJiOworCQl1cmItPmRldiA9IGRldjsKKwkJdXJiLT5jb250ZXh0ID0gdXZkOworCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUoZGV2LCB1dmQtPnZpZGVvX2VuZHApOworCQl1cmItPmludGVydmFsID0gMTsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSB1dmQtPnNidWZbaV0uZGF0YTsKKwkJdXJiLT5jb21wbGV0ZSA9IGtvbmljYXdjX2lzb2NfaXJxOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gRlJBTUVTX1BFUl9ERVNDOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBwa3RzeiAqIEZSQU1FU19QRVJfREVTQzsKKwkJZm9yIChqPWs9MDsgaiA8IEZSQU1FU19QRVJfREVTQzsgaisrLCBrICs9IHBrdHN6KSB7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLm9mZnNldCA9IGs7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLmxlbmd0aCA9IHBrdHN6OworCQl9CisKKwkJdXJiID0gY2FtLT5zdHNfdXJiW2ldOworCQl1cmItPmRldiA9IGRldjsKKwkJdXJiLT5jb250ZXh0ID0gdXZkOworCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUoZGV2LCB1dmQtPnZpZGVvX2VuZHAtMSk7CisJCXVyYi0+aW50ZXJ2YWwgPSAxOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGNhbS0+c3RzX2J1ZltpXTsKKwkJdXJiLT5jb21wbGV0ZSA9IGtvbmljYXdjX2lzb2NfaXJxOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gRlJBTUVTX1BFUl9ERVNDOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBGUkFNRVNfUEVSX0RFU0M7CisJCWZvciAoaj0wOyBqIDwgRlJBTUVTX1BFUl9ERVNDOyBqKyspIHsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ub2Zmc2V0ID0gajsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ubGVuZ3RoID0gMTsKKwkJfQorCX0KKworCWNhbS0+bGFzdF9kYXRhX3VyYiA9IE5VTEw7CisJCisJLyogU3VibWl0IGFsbCBVUkJzICovCisJZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1TQlVGOyBpKyspIHsKKwkJZXJyRmxhZyA9IHVzYl9zdWJtaXRfdXJiKGNhbS0+c3RzX3VyYltpXSwgR0ZQX0tFUk5FTCk7CisJCWlmIChlcnJGbGFnKQorCQkJZXJyKCJ1c2Jfc3VibWl0X2lzb2MoJWQpIHJldCAlZCIsIGksIGVyckZsYWcpOworCisJCWVyckZsYWcgPSB1c2Jfc3VibWl0X3VyYih1dmQtPnNidWZbaV0udXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVyckZsYWcpCisJCQllcnIgKCJ1c2Jfc3VibWl0X2lzb2MoJWQpIHJldCAlZCIsIGksIGVyckZsYWcpOworCX0KKworCXV2ZC0+c3RyZWFtaW5nID0gMTsKKwlERUJVRygxLCAic3RyZWFtaW5nPTEgdmlkZW9fZW5kcD0kJTAyeCIsIHV2ZC0+dmlkZW9fZW5kcCk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQga29uaWNhd2Nfc3RvcF9kYXRhKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpbnQgaSwgajsKKwlzdHJ1Y3Qga29uaWNhd2MgKmNhbTsKKworCWlmICgodXZkID09IE5VTEwpIHx8ICghdXZkLT5zdHJlYW1pbmcpIHx8ICh1dmQtPmRldiA9PSBOVUxMKSkKKwkJcmV0dXJuOworCisJa29uaWNhd2NfY2FtZXJhX29mZih1dmQpOworCXV2ZC0+c3RyZWFtaW5nID0gMDsKKwljYW0gPSAoc3RydWN0IGtvbmljYXdjICopdXZkLT51c2VyX2RhdGE7CisJY2FtLT5sYXN0X2RhdGFfdXJiID0gTlVMTDsKKworCS8qIFVuc2NoZWR1bGUgYWxsIG9mIHRoZSBpc28gdGQncyAqLworCWZvciAoaT0wOyBpIDwgVVNCVklERU9fTlVNU0JVRjsgaSsrKSB7CisJCXVzYl9raWxsX3VyYih1dmQtPnNidWZbaV0udXJiKTsKKwkJdXNiX2tpbGxfdXJiKGNhbS0+c3RzX3VyYltpXSk7CisJfQorCisJaWYgKCF1dmQtPnJlbW92ZV9wZW5kaW5nKSB7CisJCS8qIFNldCBwYWNrZXQgc2l6ZSB0byAwICovCisJCWogPSB1c2Jfc2V0X2ludGVyZmFjZSh1dmQtPmRldiwgdXZkLT5pZmFjZSwgdXZkLT5pZmFjZUFsdEluYWN0aXZlKTsKKwkJaWYgKGogPCAwKSB7CisJCQllcnIoInVzYl9zZXRfaW50ZXJmYWNlKCkgZXJyb3IgJWQuIiwgaik7CisJCQl1dmQtPmxhc3RfZXJyb3IgPSBqOworCQl9CisJfQorfQorCisKK3N0YXRpYyB2b2lkIGtvbmljYXdjX3Byb2Nlc3NfaXNvYyhzdHJ1Y3QgdXZkICp1dmQsIHN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUpCit7CQorCXN0cnVjdCBrb25pY2F3YyAqY2FtID0gKHN0cnVjdCBrb25pY2F3YyAqKXV2ZC0+dXNlcl9kYXRhOworCWludCBtYXhsaW5lID0gY2FtLT5tYXhsaW5lOworCWludCB5cGxhbmVzeiA9IGNhbS0+eXBsYW5lc3o7CisKKwlhc3NlcnQoZnJhbWUgIT0gTlVMTCk7CisKKwlERUJVRyg1LCAibWF4bGluZSA9ICVkIHlwbGFuZXN6ID0gJWQiLCBtYXhsaW5lLCB5cGxhbmVzeik7CisJREVCVUcoMywgIkZyYW1lIHN0YXRlID0gJWQiLCBmcmFtZS0+c2NhbnN0YXRlKTsKKworCWlmKGZyYW1lLT5zY2Fuc3RhdGUgPT0gU2NhblN0YXRlX1NjYW5uaW5nKSB7CisJCWludCBkcm9wID0gMDsKKwkJaW50IGN1cmZyYW1lOworCQlpbnQgZmRyb3BzID0gMDsKKwkJREVCVUcoMywgIlNlYXJjaGluZyBmb3IgbWFya2VyLCBxdWV1ZSBsZW4gPSAlZCIsIFJpbmdRdWV1ZV9HZXRMZW5ndGgoJnV2ZC0+ZHApKTsKKwkJd2hpbGUoUmluZ1F1ZXVlX0dldExlbmd0aCgmdXZkLT5kcCkgPj0gNCkgeworCQkJaWYgKChSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDApID09IDB4MDApICYmCisJCQkgICAgKFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMSkgPT0gMHhmZikgJiYKKwkJCSAgICAoUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAyKSA9PSAweDAwKSAmJgorCQkJICAgIChSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDMpIDwgMHg4MCkpIHsKKwkJCQljdXJmcmFtZSA9IFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMyk7CisJCQkJaWYoY2FtLT5sYXN0ZnJhbWUgPj0gMCkgeworCQkJCQlmZHJvcHMgPSAoMHg4MCArIGN1cmZyYW1lIC0gY2FtLT5sYXN0ZnJhbWUpICYgMHg3RjsKKwkJCQkJZmRyb3BzLS07CisJCQkJCWlmKGZkcm9wcykgeworCQkJCQkJaW5mbygiRHJvcHBlZCAlZCBmcmFtZXMgKCVkIC0+ICVkKSIsIGZkcm9wcywKKwkJCQkJCSAgICAgY2FtLT5sYXN0ZnJhbWUsIGN1cmZyYW1lKTsKKwkJCQkJfQorCQkJCX0KKwkJCQljYW0tPmxhc3RmcmFtZSA9IGN1cmZyYW1lOworCQkJCWZyYW1lLT5jdXJsaW5lID0gMDsKKwkJCQlmcmFtZS0+c2NhbnN0YXRlID0gU2NhblN0YXRlX0xpbmVzOworCQkJCVJJTkdfUVVFVUVfREVRVUVVRV9CWVRFUygmdXZkLT5kcCwgNCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlSSU5HX1FVRVVFX0RFUVVFVUVfQllURVMoJnV2ZC0+ZHAsIDEpOworCQkJZHJvcCsrOworCQl9CisJCWlmKGRyb3ApCisJCQlERUJVRygyLCAiZHJvcHBlZCAlZCBieXRlcyBsb29raW5nIGZvciBuZXcgZnJhbWUiLCBkcm9wKTsKKwl9CisKKwlpZihmcmFtZS0+c2NhbnN0YXRlID09IFNjYW5TdGF0ZV9TY2FubmluZykKKwkJcmV0dXJuOworCQkKKwkvKiBUcnkgdG8gbW92ZSBkYXRhIGZyb20gcXVldWUgaW50byBmcmFtZSBidWZmZXIKKwkgKiBXZSBnZXQgZGF0YSBpbiBibG9ja3Mgb2YgMzg0IGJ5dGVzIG1hZGUgdXAgb2Y6CisJICogMjU2IFksIDY0IFUsIDY0IFYuCisJICogVGhpcyBuZWVkcyB0byBiZSB3cml0dGVuIG91dCBhcyBhIFkgcGxhbmUsIGEgVSBwbGFuZSBhbmQgYSBWIHBsYW5lLgorCSAqLworCQkKKwl3aGlsZSAoIGZyYW1lLT5jdXJsaW5lIDwgbWF4bGluZSAmJiAoUmluZ1F1ZXVlX0dldExlbmd0aCgmdXZkLT5kcCkgPj0gMzg0KSkgeworCQkvKiBZICovCisJCVJpbmdRdWV1ZV9EZXF1ZXVlKCZ1dmQtPmRwLCBmcmFtZS0+ZGF0YSArIChmcmFtZS0+Y3VybGluZSAqIDI1NiksIDI1Nik7CisJCS8qIFUgKi8KKwkJUmluZ1F1ZXVlX0RlcXVldWUoJnV2ZC0+ZHAsIGZyYW1lLT5kYXRhICsgeXBsYW5lc3ogKyAoZnJhbWUtPmN1cmxpbmUgKiA2NCksIDY0KTsKKwkJLyogViAqLworCQlSaW5nUXVldWVfRGVxdWV1ZSgmdXZkLT5kcCwgZnJhbWUtPmRhdGEgKyAoNSAqIHlwbGFuZXN6KS80ICsgKGZyYW1lLT5jdXJsaW5lICogNjQpLCA2NCk7CisJCWZyYW1lLT5zZXFSZWFkX0xlbmd0aCArPSAzODQ7CisJCWZyYW1lLT5jdXJsaW5lKys7CisJfQorCS8qIFNlZSBpZiB3ZSBmaWxsZWQgdGhlIGZyYW1lICovCisJaWYgKGZyYW1lLT5jdXJsaW5lID09IG1heGxpbmUpIHsKKwkJREVCVUcoNSwgImdvdCB3aG9sZSBmcmFtZSIpOworCisJCWZyYW1lLT5mcmFtZVN0YXRlID0gRnJhbWVTdGF0ZV9Eb25lX0hvbGQ7CisJCWZyYW1lLT5jdXJsaW5lID0gMDsKKwkJdXZkLT5jdXJmcmFtZSA9IC0xOworCQl1dmQtPnN0YXRzLmZyYW1lX251bSsrOworCX0KK30KKworCitzdGF0aWMgaW50IGtvbmljYXdjX2ZpbmRfZnBzKGludCBzaXplLCBpbnQgZnBzKQoreworCWludCBpOworCisJZnBzICo9IDM7CisJREVCVUcoMSwgImtvbmljYV9maW5kX2Zwczogc2l6ZSA9ICVkIGZwcyA9ICVkIiwgc2l6ZSwgZnBzKTsKKwlpZihmcHMgPD0gc3BkX3RvX2Zwc1tzaXplXVswXSkKKwkJcmV0dXJuIDA7CisKKwlpZihmcHMgPj0gc3BkX3RvX2Zwc1tzaXplXVtNQVhfU1BFRURdKQorCQlyZXR1cm4gTUFYX1NQRUVEOworCisJZm9yKGkgPSAwOyBpIDwgTUFYX1NQRUVEOyBpKyspIHsKKwkJaWYoKGZwcyA+PSBzcGRfdG9fZnBzW3NpemVdW2ldKSAmJiAoZnBzIDw9IHNwZF90b19mcHNbc2l6ZV1baSsxXSkpIHsKKwkJCURFQlVHKDIsICJmcHMgJWQgYmV0d2VlbiAlZCBhbmQgJWQiLCBmcHMsIGksIGkrMSk7CisJCQlpZiggKGZwcyAtIHNwZF90b19mcHNbc2l6ZV1baV0pIDwgKHNwZF90b19mcHNbc2l6ZV1baSsxXSAtIGZwcykpCisJCQkJcmV0dXJuIGk7CisJCQllbHNlCisJCQkJcmV0dXJuIGkrMTsKKwkJfQorCX0KKwlyZXR1cm4gTUFYX1NQRUVEKzE7Cit9CisKKworc3RhdGljIGludCBrb25pY2F3Y19zZXRfdmlkZW9fbW9kZShzdHJ1Y3QgdXZkICp1dmQsIHN0cnVjdCB2aWRlb193aW5kb3cgKnZ3KQoreworCXN0cnVjdCBrb25pY2F3YyAqY2FtID0gKHN0cnVjdCBrb25pY2F3YyAqKXV2ZC0+dXNlcl9kYXRhOworCWludCBuZXdzcGVlZCA9IGNhbS0+c3BlZWQ7CisJaW50IG5ld3NpemU7CisJaW50IHggPSB2dy0+d2lkdGg7CisJaW50IHkgPSB2dy0+aGVpZ2h0OworCWludCBmcHMgPSB2dy0+ZmxhZ3M7CisKKwlpZih4ID4gMCAmJiB5ID4gMCkgeworCQlERUJVRygyLCAidHJ5aW5nIHRvIGZpbmQgc2l6ZSAlZCwlZCIsIHgsIHkpOworCQlmb3IobmV3c2l6ZSA9IDA7IG5ld3NpemUgPD0gTUFYX0ZSQU1FX1NJWkU7IG5ld3NpemUrKykgeworCQkJaWYoKGNhbWVyYV9zaXplc1tuZXdzaXplXS53aWR0aCA9PSB4KSAmJiAoY2FtZXJhX3NpemVzW25ld3NpemVdLmhlaWdodCA9PSB5KSkKKwkJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCW5ld3NpemUgPSBjYW0tPnNpemU7CisJfQorCisJaWYobmV3c2l6ZSA+IE1BWF9GUkFNRV9TSVpFKSB7CisJCURFQlVHKDEsICJjb3VsZG4ndCBmaW5kIHNpemUgJWQsJWQiLCB4LCB5KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYoZnBzID4gMCkgeworCQlERUJVRygxLCAidHJ5aW5nIHRvIHNldCBmcHMgdG8gJWQiLCBmcHMpOworCQluZXdzcGVlZCA9IGtvbmljYXdjX2ZpbmRfZnBzKG5ld3NpemUsIGZwcyk7CisJCURFQlVHKDEsICJmaW5kX2ZwcyByZXR1cm5lZCAlZCAoJWQpIiwgbmV3c3BlZWQsIHNwZF90b19mcHNbbmV3c2l6ZV1bbmV3c3BlZWRdKTsKKwl9CisKKwlpZihuZXdzcGVlZCA+IE1BWF9TUEVFRCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlERUJVRygxLCAic2V0dGluZyBzaXplIHRvICVkIHNwZWVkIHRvICVkIiwgbmV3c2l6ZSwgbmV3c3BlZWQpOworCWlmKChuZXdzaXplID09IGNhbS0+c2l6ZSkgJiYgKG5ld3NwZWVkID09IGNhbS0+c3BlZWQpKSB7CisJCURFQlVHKDEsICJOb3RoaW5nIHRvIGRvIik7CisJCXJldHVybiAwOworCX0KKwlERUJVRygwLCAic2V0dGluZyB0byAgJWR4JWQgQCAlZCBmcHMiLCBjYW1lcmFfc2l6ZXNbbmV3c2l6ZV0ud2lkdGgsCisJICAgICBjYW1lcmFfc2l6ZXNbbmV3c2l6ZV0uaGVpZ2h0LCBzcGRfdG9fZnBzW25ld3NpemVdW25ld3NwZWVkXS8zKTsKKworCWtvbmljYXdjX3N0b3BfZGF0YSh1dmQpOworCXV2ZC0+aWZhY2VBbHRBY3RpdmUgPSBzcGRfdG9faWZhY2VbbmV3c3BlZWRdOworCURFQlVHKDEsICJuZXcgaW50ZXJmYWNlID0gJWQiLCB1dmQtPmlmYWNlQWx0QWN0aXZlKTsKKwljYW0tPnNwZWVkID0gbmV3c3BlZWQ7CisKKwlpZihjYW0tPnNpemUgIT0gbmV3c2l6ZSkgeworCQljYW0tPnNpemUgPSBuZXdzaXplOworCQlrb25pY2F3Y19zZXRfY2FtZXJhX3NpemUodXZkKTsKKwl9CisKKwkvKiBGbHVzaCB0aGUgaW5wdXQgcXVldWUgYW5kIGNsZWFyIGFueSBjdXJyZW50IGZyYW1lIGluIHByb2dyZXNzICovCisKKwlSaW5nUXVldWVfRmx1c2goJnV2ZC0+ZHApOworCWNhbS0+bGFzdGZyYW1lID0gLTI7CisJaWYodXZkLT5jdXJmcmFtZSAhPSAtMSkgeworCSAgdXZkLT5mcmFtZVt1dmQtPmN1cmZyYW1lXS5jdXJsaW5lID0gMDsKKwkgIHV2ZC0+ZnJhbWVbdXZkLT5jdXJmcmFtZV0uc2VxUmVhZF9MZW5ndGggPSAwOworCSAgdXZkLT5mcmFtZVt1dmQtPmN1cmZyYW1lXS5zZXFSZWFkX0luZGV4ID0gMDsKKwl9CisKKwlrb25pY2F3Y19zdGFydF9kYXRhKHV2ZCk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBrb25pY2F3Y19jYWxjdWxhdGVfZnBzKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlzdHJ1Y3Qga29uaWNhd2MgKmNhbSA9IHV2ZC0+dXNlcl9kYXRhOworCXJldHVybiBzcGRfdG9fZnBzW2NhbS0+c2l6ZV1bY2FtLT5zcGVlZF0vMzsKK30KKworCitzdGF0aWMgdm9pZCBrb25pY2F3Y19jb25maWd1cmVfdmlkZW8oc3RydWN0IHV2ZCAqdXZkKQoreworCXN0cnVjdCBrb25pY2F3YyAqY2FtID0gKHN0cnVjdCBrb25pY2F3YyAqKXV2ZC0+dXNlcl9kYXRhOworCXU4IGJ1ZlsyXTsKKworCW1lbXNldCgmdXZkLT52cGljLCAwLCBzaXplb2YodXZkLT52cGljKSk7CisJbWVtc2V0KCZ1dmQtPnZwaWNfb2xkLCAweDU1LCBzaXplb2YodXZkLT52cGljX29sZCkpOworCisJUkVTVFJJQ1RfVE9fUkFOR0UoYnJpZ2h0bmVzcywgMCwgTUFYX0JSSUdIVE5FU1MpOworCVJFU1RSSUNUX1RPX1JBTkdFKGNvbnRyYXN0LCAwLCBNQVhfQ09OVFJBU1QpOworCVJFU1RSSUNUX1RPX1JBTkdFKHNhdHVyYXRpb24sIDAsIE1BWF9TQVRVUkFUSU9OKTsKKwlSRVNUUklDVF9UT19SQU5HRShzaGFycG5lc3MsIDAsIE1BWF9TSEFSUE5FU1MpOworCVJFU1RSSUNUX1RPX1JBTkdFKHdoaXRlYmFsLCAwLCBNQVhfV0hJVEVCQUwpOworCisJY2FtLT5icmlnaHRuZXNzID0gYnJpZ2h0bmVzcyAvIDExOworCWNhbS0+Y29udHJhc3QgPSBjb250cmFzdCAvIDExOworCWNhbS0+c2F0dXJhdGlvbiA9IHNhdHVyYXRpb24gLyAxMTsKKwljYW0tPnNoYXJwbmVzcyA9IHNoYXJwbmVzcyAvIDExOworCWNhbS0+d2hpdGVfYmFsID0gd2hpdGViYWwgLyAxMTsKKworCXV2ZC0+dnBpYy5jb2xvdXIgPSAxMDg7CisJdXZkLT52cGljLmh1ZSA9IDEwODsKKwl1dmQtPnZwaWMuYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7CisJdXZkLT52cGljLmNvbnRyYXN0ID0gY29udHJhc3Q7CisJdXZkLT52cGljLndoaXRlbmVzcyA9IHdoaXRlYmFsOworCXV2ZC0+dnBpYy5kZXB0aCA9IDY7CisJdXZkLT52cGljLnBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1lVVjQyMFA7CisKKwltZW1zZXQoJnV2ZC0+dmNhcCwgMCwgc2l6ZW9mKHV2ZC0+dmNhcCkpOworCXN0cmNweSh1dmQtPnZjYXAubmFtZSwgIktvbmljYSBXZWJjYW0iKTsKKwl1dmQtPnZjYXAudHlwZSA9IFZJRF9UWVBFX0NBUFRVUkU7CisJdXZkLT52Y2FwLmNoYW5uZWxzID0gMTsKKwl1dmQtPnZjYXAuYXVkaW9zID0gMDsKKwl1dmQtPnZjYXAubWlud2lkdGggPSBjYW1lcmFfc2l6ZXNbU0laRV8xNjBYMTIwXS53aWR0aDsKKwl1dmQtPnZjYXAubWluaGVpZ2h0ID0gY2FtZXJhX3NpemVzW1NJWkVfMTYwWDEyMF0uaGVpZ2h0OworCXV2ZC0+dmNhcC5tYXh3aWR0aCA9IGNhbWVyYV9zaXplc1tTSVpFXzMyMFgyNDBdLndpZHRoOworCXV2ZC0+dmNhcC5tYXhoZWlnaHQgPSBjYW1lcmFfc2l6ZXNbU0laRV8zMjBYMjQwXS5oZWlnaHQ7CisKKwltZW1zZXQoJnV2ZC0+dmNoYW4sIDAsIHNpemVvZih1dmQtPnZjaGFuKSk7CisJdXZkLT52Y2hhbi5mbGFncyA9IDAgOworCXV2ZC0+dmNoYW4udHVuZXJzID0gMDsKKwl1dmQtPnZjaGFuLmNoYW5uZWwgPSAwOworCXV2ZC0+dmNoYW4udHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOworCXN0cmNweSh1dmQtPnZjaGFuLm5hbWUsICJDYW1lcmEiKTsKKworCS8qIFRhbGsgdG8gZGV2aWNlICovCisJREVCVUcoMSwgImRldmljZSBpbml0Iik7CisJaWYoIWtvbmljYXdjX2dldF9taXNjKHV2ZCwgMHgzLCAwLCAweDEwLCBidWYsIDIpKQorCQlERUJVRygyLCAiMywxMCAtPiAlMi4yeCAlMi4yeCIsIGJ1ZlswXSwgYnVmWzFdKTsKKwlpZigha29uaWNhd2NfZ2V0X21pc2ModXZkLCAweDMsIDAsIDB4MTAsIGJ1ZiwgMikpCisJCURFQlVHKDIsICIzLDEwIC0+ICUyLjJ4ICUyLjJ4IiwgYnVmWzBdLCBidWZbMV0pOworCWlmKGtvbmljYXdjX3NldF9taXNjKHV2ZCwgMHgyLCAwLCAweGQpKQorCQlERUJVRygyLCAiMiwwLGQgZmFpbGVkIik7CisJREVCVUcoMSwgInNldHRpbmcgaW5pdGlhbCB2YWx1ZXMiKTsKK30KKworCitzdGF0aWMgaW50IGtvbmljYXdjX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqZGV2aWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHV2ZCAqdXZkID0gTlVMTDsKKwlpbnQgaXgsIGksIG5hczsKKwlpbnQgYWN0SW50ZXJmYWNlPS0xLCBpbmFjdEludGVyZmFjZT0tMSwgbWF4UFM9MDsKKwl1bnNpZ25lZCBjaGFyIHZpZGVvX2VwID0gMDsKKworCURFQlVHKDEsICJrb25pY2F3Y19wcm9iZSglcCkiLCBpbnRmKTsKKworCS8qIFdlIGRvbid0IGhhbmRsZSBtdWx0aS1jb25maWcgY2FtZXJhcyAqLworCWlmIChkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpCisJCXJldHVybiAtRU5PREVWOworCisJaW5mbygiS29uaWNhIFdlYmNhbSAocmV2LiAweCUwNHgpIiwgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkpOworCVJFU1RSSUNUX1RPX1JBTkdFKHNwZWVkLCAwLCBNQVhfU1BFRUQpOworCisJLyogVmFsaWRhdGUgZm91bmQgaW50ZXJmYWNlOiBtdXN0IGhhdmUgb25lIElTTyBlbmRwb2ludCAqLworCW5hcyA9IGludGYtPm51bV9hbHRzZXR0aW5nOworCWlmIChuYXMgIT0gOCkgeworCQllcnIoIkluY29ycmVjdCBudW1iZXIgb2YgYWx0ZXJuYXRlIHNldHRpbmdzICglZCkgZm9yIHRoaXMgY2FtZXJhISIsIG5hcyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwkvKiBWYWxpZGF0ZSBhbGwgYWx0ZXJuYXRlIHNldHRpbmdzICovCisJZm9yIChpeD0wOyBpeCA8IG5hczsgaXgrKykgeworCQljb25zdCBzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisKKwkJaW50ZXJmYWNlID0gJmludGYtPmFsdHNldHRpbmdbaXhdOworCQlpID0gaW50ZXJmYWNlLT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nOworCQlpZiAoaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHMgIT0gMikgeworCQkJZXJyKCJJbnRlcmZhY2UgJWQuIGhhcyAldS4gZW5kcG9pbnRzISIsCisJCQkgICAgaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsCisJCQkgICAgKHVuc2lnbmVkKShpbnRlcmZhY2UtPmRlc2MuYk51bUVuZHBvaW50cykpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFsxXS5kZXNjOworCQlERUJVRygxLCAiZm91bmQgZW5kcG9pbnQ6IGFkZHI6IDB4JTIuMnggbWF4cHMgPSAweCU0LjR4IiwKKwkJICAgIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzLCBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpKTsKKwkJaWYgKHZpZGVvX2VwID09IDApCisJCQl2aWRlb19lcCA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCQllbHNlIGlmICh2aWRlb19lcCAhPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcykgeworCQkJZXJyKCJBbHRlcm5hdGUgc2V0dGluZ3MgaGF2ZSBkaWZmZXJlbnQgZW5kcG9pbnQgYWRkcmVzc2VzISIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJaWYgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMHgwMykgIT0gMHgwMSkgeworCQkJZXJyKCJJbnRlcmZhY2UgJWQuIGhhcyBub24tSVNPIGVuZHBvaW50ISIsCisJCQkgICAgaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApID09IDApIHsKKwkJCWVycigiSW50ZXJmYWNlICVkLiBoYXMgSVNPIE9VVCBlbmRwb2ludCEiLAorCQkJICAgIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWlmIChsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpID09IDApIHsKKwkJCWlmIChpbmFjdEludGVyZmFjZSA8IDApCisJCQkJaW5hY3RJbnRlcmZhY2UgPSBpOworCQkJZWxzZSB7CisJCQkJZXJyKCJNb3JlIHRoYW4gb25lIGluYWN0aXZlIGFsdC4gc2V0dGluZyEiKTsKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChpID09IHNwZF90b19pZmFjZVtzcGVlZF0pIHsKKwkJCQkvKiBUaGlzIG9uZSBpcyB0aGUgcmVxdWVzdGVkIG9uZSAqLworCQkJCWFjdEludGVyZmFjZSA9IGk7CisJCQl9CisJCX0KKwkJaWYgKGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkgPiBtYXhQUykKKwkJCW1heFBTID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKKwl9CisJaWYoYWN0SW50ZXJmYWNlID09IC0xKSB7CisJCWVycigiQ2FudCBmaW5kIHJlcXVpcmVkIGVuZHBvaW50Iik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCURFQlVHKDEsICJTZWxlY3RpbmcgcmVxdWVzdGVkIGFjdGl2ZSBzZXR0aW5nPSVkLiBtYXhQUz0lZC4iLCBhY3RJbnRlcmZhY2UsIG1heFBTKTsKKworCXV2ZCA9IHVzYnZpZGVvX0FsbG9jYXRlRGV2aWNlKGNhbXMpOworCWlmICh1dmQgIT0gTlVMTCkgeworCQlzdHJ1Y3Qga29uaWNhd2MgKmNhbSA9IChzdHJ1Y3Qga29uaWNhd2MgKikodXZkLT51c2VyX2RhdGEpOworCQkvKiBIZXJlIHV2ZCBpcyBhIGZ1bGx5IGFsbG9jYXRlZCB1dmQgb2JqZWN0ICovCisJCWZvcihpID0gMDsgaSA8IFVTQlZJREVPX05VTVNCVUY7IGkrKykgeworCQkJY2FtLT5zdHNfdXJiW2ldID0gdXNiX2FsbG9jX3VyYihGUkFNRVNfUEVSX0RFU0MsIEdGUF9LRVJORUwpOworCQkJaWYoY2FtLT5zdHNfdXJiW2ldID09IE5VTEwpIHsKKwkJCQl3aGlsZShpLS0pIHsKKwkJCQkJdXNiX2ZyZWVfdXJiKGNhbS0+c3RzX3VyYltpXSk7CisJCQkJfQorCQkJCWVycigiY2FuJ3QgYWxsb2NhdGUgdXJicyIpOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQl9CisJCWNhbS0+c3BlZWQgPSBzcGVlZDsKKwkJUkVTVFJJQ1RfVE9fUkFOR0Uoc2l6ZSwgU0laRV8xNjBYMTIwLCBTSVpFXzMyMFgyNDApOworCQljYW0tPndpZHRoID0gY2FtZXJhX3NpemVzW3NpemVdLndpZHRoOworCQljYW0tPmhlaWdodCA9IGNhbWVyYV9zaXplc1tzaXplXS5oZWlnaHQ7CisJCWNhbS0+c2l6ZSA9IHNpemU7CisKKwkJdXZkLT5mbGFncyA9IDA7CisJCXV2ZC0+ZGVidWcgPSBkZWJ1ZzsKKwkJdXZkLT5kZXYgPSBkZXY7CisJCXV2ZC0+aWZhY2UgPSBpbnRmLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisJCXV2ZC0+aWZhY2VBbHRJbmFjdGl2ZSA9IGluYWN0SW50ZXJmYWNlOworCQl1dmQtPmlmYWNlQWx0QWN0aXZlID0gYWN0SW50ZXJmYWNlOworCQl1dmQtPnZpZGVvX2VuZHAgPSB2aWRlb19lcDsKKwkJdXZkLT5pc29fcGFja2V0X2xlbiA9IG1heFBTOworCQl1dmQtPnBhbGV0dGVCaXRzID0gMUwgPDwgVklERU9fUEFMRVRURV9ZVVY0MjBQOworCQl1dmQtPmRlZmF1bHRQYWxldHRlID0gVklERU9fUEFMRVRURV9ZVVY0MjBQOworCQl1dmQtPmNhbnZhcyA9IFZJREVPU0laRSgzMjAsIDI0MCk7CisJCXV2ZC0+dmlkZW9zaXplID0gVklERU9TSVpFKGNhbS0+d2lkdGgsIGNhbS0+aGVpZ2h0KTsKKworCQkvKiBJbml0aWFsaXplIGtvbmljYXdjIHNwZWNpZmljIGRhdGEgKi8KKwkJa29uaWNhd2NfY29uZmlndXJlX3ZpZGVvKHV2ZCk7CisKKwkJaSA9IHVzYnZpZGVvX1JlZ2lzdGVyVmlkZW9EZXZpY2UodXZkKTsKKwkJdXZkLT5tYXhfZnJhbWVfc2l6ZSA9ICgzMjAgKiAyNDAgKiAzKS8yOworCQlpZiAoaSAhPSAwKSB7CisJCQllcnIoInVzYnZpZGVvX1JlZ2lzdGVyVmlkZW9EZXZpY2UoKSBmYWlsZWQuIik7CisJCQl1dmQgPSBOVUxMOworCQl9CisjaWZkZWYgQ09ORklHX0lOUFVUCisJCS8qIFJlZ2lzdGVyIGlucHV0IGRldmljZSBmb3IgYnV0dG9uICovCisJCW1lbXNldCgmY2FtLT5pbnB1dCwgMCwgc2l6ZW9mKHN0cnVjdCBpbnB1dF9kZXYpKTsKKwkJY2FtLT5pbnB1dC5uYW1lID0gIktvbmljYXdjIHNuYXBzaG90IGJ1dHRvbiI7CisJCWNhbS0+aW5wdXQucHJpdmF0ZSA9IGNhbTsKKwkJY2FtLT5pbnB1dC5ldmJpdFswXSA9IEJJVChFVl9LRVkpOworCQljYW0tPmlucHV0LmtleWJpdFtMT05HKEJUTl8wKV0gPSBCSVQoQlROXzApOworCQljYW0tPmlucHV0LmlkLmJ1c3R5cGUgPSBCVVNfVVNCOworCQljYW0tPmlucHV0LmlkLnZlbmRvciA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisJCWNhbS0+aW5wdXQuaWQucHJvZHVjdCA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCQljYW0tPmlucHV0LmlkLnZlcnNpb24gPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKKwkJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKCZjYW0tPmlucHV0KTsKKwkJCisJCXVzYl9tYWtlX3BhdGgoZGV2LCBjYW0tPmlucHV0X3BoeXNuYW1lLCA1Nik7CisJCXN0cmNhdChjYW0tPmlucHV0X3BoeXNuYW1lLCAiL2lucHV0MCIpOworCQljYW0tPmlucHV0LnBoeXMgPSBjYW0tPmlucHV0X3BoeXNuYW1lOworCQlpbmZvKCJrb25pY2F3YzogJXMgb24gJXNcbiIsIGNhbS0+aW5wdXQubmFtZSwgY2FtLT5pbnB1dC5waHlzKTsKKyNlbmRpZgorCX0KKworCWlmICh1dmQpIHsKKwkJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgdXZkKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlPOworfQorCisKK3N0YXRpYyB2b2lkIGtvbmljYXdjX2ZyZWVfdXZkKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qga29uaWNhd2MgKmNhbSA9IChzdHJ1Y3Qga29uaWNhd2MgKil1dmQtPnVzZXJfZGF0YTsKKworI2lmZGVmIENPTkZJR19JTlBVVAorCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKCZjYW0tPmlucHV0KTsKKyNlbmRpZgorCWZvciAoaT0wOyBpIDwgVVNCVklERU9fTlVNU0JVRjsgaSsrKSB7CisJCXVzYl9mcmVlX3VyYihjYW0tPnN0c191cmJbaV0pOworCQljYW0tPnN0c191cmJbaV0gPSBOVUxMOworCX0KK30KKworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoMHgwNGM4LCAweDA3MjApIH0sIC8qIEludGVsIFlDIDc2ICovCisJeyB9ICAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworCitzdGF0aWMgaW50IF9faW5pdCBrb25pY2F3Y19pbml0KHZvaWQpCit7CisJc3RydWN0IHVzYnZpZGVvX2NiIGNiVGJsOworCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwltZW1zZXQoJmNiVGJsLCAwLCBzaXplb2YoY2JUYmwpKTsKKwljYlRibC5wcm9iZSA9IGtvbmljYXdjX3Byb2JlOworCWNiVGJsLnNldHVwT25PcGVuID0ga29uaWNhd2Nfc2V0dXBfb25fb3BlbjsKKwljYlRibC5wcm9jZXNzRGF0YSA9IGtvbmljYXdjX3Byb2Nlc3NfaXNvYzsKKwljYlRibC5nZXRGUFMgPSBrb25pY2F3Y19jYWxjdWxhdGVfZnBzOworCWNiVGJsLnNldFZpZGVvTW9kZSA9IGtvbmljYXdjX3NldF92aWRlb19tb2RlOworCWNiVGJsLnN0YXJ0RGF0YVB1bXAgPSBrb25pY2F3Y19zdGFydF9kYXRhOworCWNiVGJsLnN0b3BEYXRhUHVtcCA9IGtvbmljYXdjX3N0b3BfZGF0YTsKKwljYlRibC5hZGp1c3RQaWN0dXJlID0ga29uaWNhd2NfYWRqdXN0X3BpY3R1cmU7CisJY2JUYmwudXNlckZyZWUgPSBrb25pY2F3Y19mcmVlX3V2ZDsKKwlyZXR1cm4gdXNidmlkZW9fcmVnaXN0ZXIoCisJCSZjYW1zLAorCQlNQVhfQ0FNRVJBUywKKwkJc2l6ZW9mKHN0cnVjdCBrb25pY2F3YyksCisJCSJrb25pY2F3YyIsCisJCSZjYlRibCwKKwkJVEhJU19NT0RVTEUsCisJCWlkX3RhYmxlKTsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQga29uaWNhd2NfY2xlYW51cCh2b2lkKQoreworCXVzYnZpZGVvX0RlcmVnaXN0ZXIoJmNhbXMpOworfQorCisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlNpbW9uIEV2YW5zIDxzcHNlQHNlY3JldC5vcmcudWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworbW9kdWxlX3BhcmFtKHNwZWVkLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhzcGVlZCwgIkluaXRpYWwgc3BlZWQ6IDAgKHNsb3dlc3QpIC0gNiAoZmFzdGVzdCkiKTsKK21vZHVsZV9wYXJhbShzaXplLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhzaXplLCAiSW5pdGlhbCBTaXplIDA6IDE2MHgxMjAgMTogMTYweDEzNiAyOiAxNzZ4MTQ0IDM6IDMyMHgyNDAiKTsKK21vZHVsZV9wYXJhbShicmlnaHRuZXNzLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhicmlnaHRuZXNzLCAiSW5pdGlhbCBicmlnaHRuZXNzIDAgLSAxMDgiKTsKK21vZHVsZV9wYXJhbShjb250cmFzdCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoY29udHJhc3QsICJJbml0aWFsIGNvbnRyYXN0IDAgLSAxMDgiKTsKK21vZHVsZV9wYXJhbShzYXR1cmF0aW9uLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhzYXR1cmF0aW9uLCAiSW5pdGlhbCBzYXR1cmF0aW9uIDAgLSAxMDgiKTsKK21vZHVsZV9wYXJhbShzaGFycG5lc3MsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNoYXJwbmVzcywgIkluaXRpYWwgYnJpZ2h0bmVzcyAwIC0gMTA4Iik7Cittb2R1bGVfcGFyYW0od2hpdGViYWwsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHdoaXRlYmFsLCAiSW5pdGlhbCB3aGl0ZSBiYWxhbmNlIDAgLSAzNjMiKTsKKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWw6IDAtOSAoZGVmYXVsdD0wKSIpOworI2VuZGlmCisKK21vZHVsZV9pbml0KGtvbmljYXdjX2luaXQpOworbW9kdWxlX2V4aXQoa29uaWNhd2NfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9vdjUxMS5jIGIvZHJpdmVycy91c2IvbWVkaWEvb3Y1MTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmQ3ZmZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvb3Y1MTEuYwpAQCAtMCwwICsxLDYxMzEgQEAKKy8qCisgKiBPbW5pVmlzaW9uIE9WNTExIENhbWVyYS10by1VU0IgQnJpZGdlIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDAzIE1hcmsgVy4gTWNDbGVsbGFuZAorICogT3JpZ2luYWwgZGVjb21wcmVzc2lvbiBjb2RlIENvcHlyaWdodCAxOTk4LTIwMDAgT21uaVZpc2lvbiBUZWNobm9sb2dpZXMKKyAqIE1hbnkgaW1wcm92ZW1lbnRzIGJ5IEJyZXQgV2FsbGFjaCA8YndhbGxhYzFAc2FuLnJyLmNvbT4KKyAqIENvbG9yIGZpeGVzIGJ5IGJ5IE9yaW9uIFNreSBMYXdsb3IgPG9sYXdsb3JAYWNtLm9yZz4gKDIvMjYvMjAwMCkKKyAqIFNuYXBzaG90IGNvZGUgYnkgS2V2aW4gTW9vcmUKKyAqIE9WNzYyMCBmaXhlcyBieSBDaGFybCBQLiBCb3RoYSA8Y3Bib3RoYUBpZWVlLm9yZz4KKyAqIENoYW5nZXMgYnkgQ2xhdWRpbyBNYXRzdW9rYSA8Y2xhdWRpb0Bjb25lY3RpdmEuY29tPgorICogT3JpZ2luYWwgU0FBNzExMUEgY29kZSBieSBEYXZlIFBlcmtzIDxkcGVya3NAaWJtLm5ldD4KKyAqIFVSQiBlcnJvciBtZXNzYWdlcyBmcm9tIHB3YyBkcml2ZXIgYnkgTmVtb3NvZnQKKyAqIGdlbmVyaWNfaW9jdGwoKSBjb2RlIGZyb20gdmlkZW9kZXYuYyBieSBHZXJkIEtub3JyIGFuZCBBbGFuIENveAorICogTWVtb3J5IG1hbmFnZW1lbnQgKHJ2bWFsbG9jKSBjb2RlIGZyb20gYnR0diBkcml2ZXIsIGJ5IEdlcmQgS25vcnIgYW5kIG90aGVycworICoKKyAqIEJhc2VkIG9uIHRoZSBMaW51eCBDUGlBIGRyaXZlciB3cml0dGVuIGJ5IFBldGVyIFByZWdsZXIsCisgKiBTY290dCBKLiBCZXJ0aW4gYW5kIEpvaGFubmVzIEVyZGZlbHQuCisgKiAKKyAqIFBsZWFzZSBzZWUgdGhlIGZpbGU6IERvY3VtZW50YXRpb24vdXNiL292NTExLnR4dAorICogYW5kIHRoZSB3ZWJzaXRlIGF0OiAgaHR0cDovL2FscGhhLmR5bmRucy5vcmcvb3Y1MTEKKyAqIGZvciBtb3JlIGluZm8uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2lmIGRlZmluZWQgKF9faTM4Nl9fKQorCSNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJvdjUxMS5oIgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS42NCBmb3IgTGludXggMi41IgorI2RlZmluZSBFTUFJTCAibWFya0BhbHBoYS5keW5kbnMub3JnIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJNYXJrIE1jQ2xlbGxhbmQgPG1hcmtAYWxwaGEuZHluZG5zLm9yZz4gJiBCcmV0IFdhbGxhY2ggXAorCSYgT3Jpb24gU2t5IExhd2xvciA8b2xhd2xvckBhY20ub3JnPiAmIEtldmluIE1vb3JlICYgQ2hhcmwgUC4gQm90aGEgXAorCTxjcGJvdGhhQGllZWUub3JnPiAmIENsYXVkaW8gTWF0c3Vva2EgPGNsYXVkaW9AY29uZWN0aXZhLmNvbT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJvdjUxMSBVU0IgQ2FtZXJhIERyaXZlciIKKworI2RlZmluZSBPVjUxMV9JMkNfUkVUUklFUyAzCisjZGVmaW5lIEVOQUJMRV9ZX1FVQU5UQUJMRSAxCisjZGVmaW5lIEVOQUJMRV9VVl9RVUFOVEFCTEUgMQorCisjZGVmaW5lIE9WNTExX01BWF9VTklUX1ZJREVPIDE2CisKKy8qIFBpeGVsIGNvdW50ICogYnl0ZXMgcGVyIFlVVjQyMCBwaXhlbCAoMS41KSAqLworI2RlZmluZSBNQVhfRlJBTUVfU0laRSh3LCBoKSAoKHcpICogKGgpICogMyAvIDIpCisKKyNkZWZpbmUgTUFYX0RBVEFfU0laRSh3LCBoKSAoTUFYX0ZSQU1FX1NJWkUodywgaCkgKyBzaXplb2Yoc3RydWN0IHRpbWV2YWwpKQorCisvKiBNYXggc2l6ZSAqIGJ5dGVzIHBlciBZVVY0MjAgcGl4ZWwgKDEuNSkgKyBvbmUgZXh0cmEgaXNvYyBmcmFtZSBmb3Igc2FmZXR5ICovCisjZGVmaW5lIE1BWF9SQVdfREFUQV9TSVpFKHcsIGgpICgodykgKiAoaCkgKiAzIC8gMiArIDEwMjQpCisKKyNkZWZpbmUgRkFUQUxfRVJST1IocmMpICgocmMpIDwgMCAmJiAocmMpICE9IC1FUEVSTSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1vZHVsZSBQYXJhbWV0ZXJzCisgKiAoU2VlIG92NTExLnR4dCBmb3IgZGV0YWlsZWQgZGVzY3JpcHRpb25zIG9mIHRoZXNlKQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoZXNlIHZhcmlhYmxlcyAoYW5kIGFsbCBzdGF0aWMgZ2xvYmFscykgZGVmYXVsdCB0byB6ZXJvICovCitzdGF0aWMgaW50IGF1dG9icmlnaHQJCT0gMTsKK3N0YXRpYyBpbnQgYXV0b2dhaW4JCT0gMTsKK3N0YXRpYyBpbnQgYXV0b2V4cAkJPSAxOworc3RhdGljIGludCBkZWJ1ZzsKK3N0YXRpYyBpbnQgc25hcHNob3Q7CitzdGF0aWMgaW50IGNhbXMJCQk9IDE7CitzdGF0aWMgaW50IGNvbXByZXNzOworc3RhdGljIGludCB0ZXN0cGF0Oworc3RhdGljIGludCBkdW1wcGl4Oworc3RhdGljIGludCBsZWQgCQkJPSAxOworc3RhdGljIGludCBkdW1wX2JyaWRnZTsKK3N0YXRpYyBpbnQgZHVtcF9zZW5zb3I7CitzdGF0aWMgaW50IHByaW50cGg7CitzdGF0aWMgaW50IHBoeQkJCT0gMHgxZjsKK3N0YXRpYyBpbnQgcGh1dgkJCT0gMHgwNTsKK3N0YXRpYyBpbnQgcHZ5CQkJPSAweDA2Oworc3RhdGljIGludCBwdnV2CQkJPSAweDA2Oworc3RhdGljIGludCBxaHkJCQk9IDB4MTQ7CitzdGF0aWMgaW50IHFodXYJCQk9IDB4MDM7CitzdGF0aWMgaW50IHF2eQkJCT0gMHgwNDsKK3N0YXRpYyBpbnQgcXZ1dgkJCT0gMHgwNDsKK3N0YXRpYyBpbnQgbGlnaHRmcmVxOworc3RhdGljIGludCBiYW5kaW5nZmlsdGVyOworc3RhdGljIGludCBjbG9ja2RpdgkJPSAtMTsKK3N0YXRpYyBpbnQgcGFja2V0c2l6ZQkJPSAtMTsKK3N0YXRpYyBpbnQgZnJhbWVkcm9wCQk9IC0xOworc3RhdGljIGludCBmYXN0c2V0Oworc3RhdGljIGludCBmb3JjZV9wYWxldHRlOworc3RhdGljIGludCBiYWNrbGlnaHQ7CitzdGF0aWMgaW50IHVuaXRfdmlkZW9bT1Y1MTFfTUFYX1VOSVRfVklERU9dOworc3RhdGljIGludCByZW1vdmVfemVyb3M7CitzdGF0aWMgaW50IG1pcnJvcjsKK3N0YXRpYyBpbnQgb3Y1MThfY29sb3I7CisKK21vZHVsZV9wYXJhbShhdXRvYnJpZ2h0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhhdXRvYnJpZ2h0LCAiU2Vuc29yIGF1dG9tYXRpY2FsbHkgY2hhbmdlcyBicmlnaHRuZXNzIik7Cittb2R1bGVfcGFyYW0oYXV0b2dhaW4sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGF1dG9nYWluLCAiU2Vuc29yIGF1dG9tYXRpY2FsbHkgY2hhbmdlcyBnYWluIik7Cittb2R1bGVfcGFyYW0oYXV0b2V4cCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoYXV0b2V4cCwgIlNlbnNvciBhdXRvbWF0aWNhbGx5IGNoYW5nZXMgZXhwb3N1cmUiKTsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsCisgICJEZWJ1ZyBsZXZlbDogMD1ub25lLCAxPWluaXRzLCAyPXdhcm5pbmcsIDM9Y29uZmlnLCA0PWZ1bmN0aW9ucywgNT1tYXgiKTsKK21vZHVsZV9wYXJhbShzbmFwc2hvdCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0Moc25hcHNob3QsICJFbmFibGUgc25hcHNob3QgbW9kZSIpOworbW9kdWxlX3BhcmFtKGNhbXMsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGNhbXMsICJOdW1iZXIgb2Ygc2ltdWx0YW5lb3VzIGNhbWVyYXMiKTsKK21vZHVsZV9wYXJhbShjb21wcmVzcywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoY29tcHJlc3MsICJUdXJuIG9uIGNvbXByZXNzaW9uIik7Cittb2R1bGVfcGFyYW0odGVzdHBhdCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModGVzdHBhdCwKKyAgIlJlcGxhY2UgaW1hZ2Ugd2l0aCB2ZXJ0aWNhbCBiYXIgdGVzdHBhdHRlcm4gKG9ubHkgcGFydGlhbGx5IHdvcmtpbmcpIik7Cittb2R1bGVfcGFyYW0oZHVtcHBpeCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZHVtcHBpeCwgIkR1bXAgcmF3IHBpeGVsIGRhdGEiKTsKK21vZHVsZV9wYXJhbShsZWQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGxlZCwKKyAgIkxFRCBwb2xpY3kgKE9WNTExKyBvciBsYXRlcikuIDA9b2ZmLCAxPW9uIChkZWZhdWx0KSwgMj1hdXRvIChvbiB3aGVuIG9wZW4pIik7Cittb2R1bGVfcGFyYW0oZHVtcF9icmlkZ2UsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGR1bXBfYnJpZGdlLCAiRHVtcCB0aGUgYnJpZGdlIHJlZ2lzdGVycyIpOworbW9kdWxlX3BhcmFtKGR1bXBfc2Vuc29yLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhkdW1wX3NlbnNvciwgIkR1bXAgdGhlIHNlbnNvciByZWdpc3RlcnMiKTsKK21vZHVsZV9wYXJhbShwcmludHBoLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhwcmludHBoLCAiUHJpbnQgZnJhbWUgc3RhcnQvZW5kIGhlYWRlcnMiKTsKK21vZHVsZV9wYXJhbShwaHksIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHBoeSwgIlByZWRpY3Rpb24gcmFuZ2UgKGhvcml6LiBZKSIpOworbW9kdWxlX3BhcmFtKHBodXYsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHBodXYsICJQcmVkaWN0aW9uIHJhbmdlIChob3Jpei4gVVYpIik7Cittb2R1bGVfcGFyYW0ocHZ5LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhwdnksICJQcmVkaWN0aW9uIHJhbmdlICh2ZXJ0LiBZKSIpOworbW9kdWxlX3BhcmFtKHB2dXYsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHB2dXYsICJQcmVkaWN0aW9uIHJhbmdlICh2ZXJ0LiBVVikiKTsKK21vZHVsZV9wYXJhbShxaHksIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHFoeSwgIlF1YW50aXphdGlvbiB0aHJlc2hvbGQgKGhvcml6LiBZKSIpOworbW9kdWxlX3BhcmFtKHFodXYsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHFodXYsICJRdWFudGl6YXRpb24gdGhyZXNob2xkIChob3Jpei4gVVYpIik7Cittb2R1bGVfcGFyYW0ocXZ5LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhxdnksICJRdWFudGl6YXRpb24gdGhyZXNob2xkICh2ZXJ0LiBZKSIpOworbW9kdWxlX3BhcmFtKHF2dXYsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHF2dXYsICJRdWFudGl6YXRpb24gdGhyZXNob2xkICh2ZXJ0LiBVVikiKTsKK21vZHVsZV9wYXJhbShsaWdodGZyZXEsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGxpZ2h0ZnJlcSwKKyAgIkxpZ2h0IGZyZXF1ZW5jeS4gU2V0IHRvIDUwIG9yIDYwIEh6LCBvciB6ZXJvIGZvciBkZWZhdWx0IHNldHRpbmdzIik7Cittb2R1bGVfcGFyYW0oYmFuZGluZ2ZpbHRlciwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoYmFuZGluZ2ZpbHRlciwKKyAgIkVuYWJsZSBiYW5kaW5nIGZpbHRlciAodG8gcmVkdWNlIGVmZmVjdHMgb2YgZmx1b3Jlc2NlbnQgbGlnaHRpbmcpIik7Cittb2R1bGVfcGFyYW0oY2xvY2tkaXYsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGNsb2NrZGl2LCAiRm9yY2UgcGl4ZWwgY2xvY2sgZGl2aXNvciB0byBhIHNwZWNpZmljIHZhbHVlIik7Cittb2R1bGVfcGFyYW0ocGFja2V0c2l6ZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocGFja2V0c2l6ZSwgIkZvcmNlIGEgc3BlY2lmaWMgaXNvYyBwYWNrZXQgc2l6ZSIpOworbW9kdWxlX3BhcmFtKGZyYW1lZHJvcCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZnJhbWVkcm9wLCAiRm9yY2UgYSBzcGVjaWZpYyBmcmFtZSBkcm9wIHJlZ2lzdGVyIHNldHRpbmciKTsKK21vZHVsZV9wYXJhbShmYXN0c2V0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhmYXN0c2V0LCAiQWxsb3dzIHBpY3R1cmUgc2V0dGluZ3MgdG8gdGFrZSBlZmZlY3QgaW1tZWRpYXRlbHkiKTsKK21vZHVsZV9wYXJhbShmb3JjZV9wYWxldHRlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9wYWxldHRlLCAiRm9yY2UgdGhlIHBhbGV0dGUgdG8gYSBzcGVjaWZpYyB2YWx1ZSIpOworbW9kdWxlX3BhcmFtKGJhY2tsaWdodCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoYmFja2xpZ2h0LCAiRm9yIG9iamVjdHMgdGhhdCBhcmUgbGl0IGZyb20gYmVoaW5kIik7CitzdGF0aWMgaW50IG51bV91djsKK21vZHVsZV9wYXJhbV9hcnJheSh1bml0X3ZpZGVvLCBpbnQsICZudW1fdXYsIDApOworTU9EVUxFX1BBUk1fREVTQyh1bml0X3ZpZGVvLAorICAiRm9yY2UgdXNlIG9mIHNwZWNpZmljIG1pbm9yIG51bWJlcihzKS4gMCBpcyBub3QgYWxsb3dlZC4iKTsKK21vZHVsZV9wYXJhbShyZW1vdmVfemVyb3MsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHJlbW92ZV96ZXJvcywKKyAgIlJlbW92ZSB6ZXJvLXBhZGRpbmcgZnJvbSB1bmNvbXByZXNzZWQgaW5jb21pbmcgZGF0YSIpOworbW9kdWxlX3BhcmFtKG1pcnJvciwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobWlycm9yLCAiUmV2ZXJzZSBpbWFnZSBob3Jpem9udGFsbHkiKTsKK21vZHVsZV9wYXJhbShvdjUxOF9jb2xvciwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0Mob3Y1MThfY29sb3IsICJFbmFibGUgT1Y1MTggY29sb3IgKGV4cGVyaW1lbnRhbCkiKTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNaXNjZWxsYW5lb3VzIEdsb2JhbHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgb3Y1MTFfZHJpdmVyOworCitzdGF0aWMgc3RydWN0IG92NTF4X2RlY29tcF9vcHMgKm92NTExX2RlY29tcF9vcHM7CitzdGF0aWMgc3RydWN0IG92NTF4X2RlY29tcF9vcHMgKm92NTExX21teF9kZWNvbXBfb3BzOworc3RhdGljIHN0cnVjdCBvdjUxeF9kZWNvbXBfb3BzICpvdjUxOF9kZWNvbXBfb3BzOworc3RhdGljIHN0cnVjdCBvdjUxeF9kZWNvbXBfb3BzICpvdjUxOF9tbXhfZGVjb21wX29wczsKKworLyogTnVtYmVyIG9mIHRpbWVzIHRvIHJldHJ5IGEgZmFpbGVkIEkyQyB0cmFuc2FjdGlvbi4gSW5jcmVhc2UgdGhpcyBpZiB5b3UKKyAqIGFyZSBnZXR0aW5nICJGYWlsZWQgdG8gcmVhZCBzZW5zb3IgSUQuLi4iICovCitzdGF0aWMgaW50IGkyY19kZXRlY3RfdHJpZXMgPSA1OworCisvKiBNTVggc3VwcG9ydCBpcyBwcmVzZW50IGluIGtlcm5lbCBhbmQgQ1BVLiBDaGVja2VkIHVwb24gZGVjb21wIG1vZHVsZSBsb2FkLiAqLworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKyNkZWZpbmUgb3Y1MXhfbW14X2F2YWlsYWJsZSAoY3B1X2hhc19tbXgpCisjZWxzZQorI2RlZmluZSBvdjUxeF9tbXhfYXZhaWxhYmxlICgwKQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKFZFTkRfT01OSVZJU0lPTiwgUFJPRF9PVjUxMSkgfSwKKwl7IFVTQl9ERVZJQ0UoVkVORF9PTU5JVklTSU9OLCBQUk9EX09WNTExUExVUykgfSwKKwl7IFVTQl9ERVZJQ0UoVkVORF9PTU5JVklTSU9OLCBQUk9EX09WNTE4KSB9LAorCXsgVVNCX0RFVklDRShWRU5EX09NTklWSVNJT04sIFBST0RfT1Y1MThQTFVTKSB9LAorCXsgVVNCX0RFVklDRShWRU5EX01BVFRFTCwgUFJPRF9NRTJDQU0pIH0sCisJeyB9ICAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBkZXZpY2VfdGFibGUpOworCitzdGF0aWMgdW5zaWduZWQgY2hhciB5UXVhblRhYmxlNTExW10gPSBPVjUxMV9ZUVVBTlRBQkxFOworc3RhdGljIHVuc2lnbmVkIGNoYXIgdXZRdWFuVGFibGU1MTFbXSA9IE9WNTExX1VWUVVBTlRBQkxFOworc3RhdGljIHVuc2lnbmVkIGNoYXIgeVF1YW5UYWJsZTUxOFtdID0gT1Y1MThfWVFVQU5UQUJMRTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHV2UXVhblRhYmxlNTE4W10gPSBPVjUxOF9VVlFVQU5UQUJMRTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFN5bWJvbGljIE5hbWVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogS25vd24gT1Y1MTEtYmFzZWQgY2FtZXJhcyAqLworc3RhdGljIHN0cnVjdCBzeW1ib2xpY19saXN0IGNhbWxpc3RbXSA9IHsKKwl7ICAgMCwgIkdlbmVyaWMgQ2FtZXJhIChubyBJRCkiIH0sCisJeyAgIDEsICJNdXN0ZWsgV0NhbSAzWCIgfSwKKwl7ICAgMywgIkQtTGluayBEU0ItQzMwMCIgfSwKKwl7ICAgNCwgIkdlbmVyaWMgT1Y1MTEvT1Y3NjEwIiB9LAorCXsgICA1LCAiUHVyZXRlayBQVC02MDA3IiB9LAorCXsgICA2LCAiTGlmZXZpZXcgVVNCIExpZmUgVFYgKE5UU0MpIiB9LAorCXsgIDIxLCAiQ3JlYXRpdmUgTGFicyBXZWJDYW0gMyIgfSwKKwl7ICAyMiwgIkxpZmV2aWV3IFVTQiBMaWZlIFRWIChQQUwgRC9LK0IvRykiIH0sCisJeyAgMzYsICJLb2FsYS1DYW0iIH0sCisJeyAgMzgsICJMaWZldmlldyBVU0IgTGlmZSBUViAoUEFMKSIgfSwKKwl7ICA0MSwgIlNhbXN1bmcgQW55Y2FtIE1QQy1NMTAiIH0sCisJeyAgNDMsICJNdGVrdmlzaW9uIFplY2EgTVY0MDIiIH0sCisJeyAgNDYsICJTdW1hIGVPTiIgfSwKKwl7ICA3MCwgIkxpZmV2aWV3IFVTQiBMaWZlIFRWIChQQUwvU0VDQU0pIiB9LAorCXsgMTAwLCAiTGlmZXZpZXcgUm9ib0NhbSIgfSwKKwl7IDEwMiwgIkF2ZXJNZWRpYSBJbnRlckNhbSBFbGl0ZSIgfSwKKwl7IDExMiwgIk1lZGlhRm9ydGUgTVYzMDAiIH0sCS8qIG9yIE9WNzExMCBldmFsdWF0aW9uIGtpdCAqLworCXsgMTM0LCAiRXpvbmljcyBFWkNhbSBJSSIgfSwKKwl7IDE5MiwgIldlYmV5ZSAyMDAwQiIgfSwKKwl7IDI1MywgIkFscGhhIFZpc2lvbiBUZWNoLiBBbHBoYUNhbSBTRSIgfSwKKwl7ICAtMSwgTlVMTCB9Cit9OworCisvKiBWaWRlbzRMaW51eDEgUGFsZXR0ZXMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3ltYm9saWNfbGlzdCB2NGwxX3BsaXN0W10gPSB7CisJeyBWSURFT19QQUxFVFRFX0dSRVksCSJHUkVZIiB9LAorCXsgVklERU9fUEFMRVRURV9ISTI0MCwJIkhJMjQwIiB9LAorCXsgVklERU9fUEFMRVRURV9SR0I1NjUsCSJSR0I1NjUiIH0sCisJeyBWSURFT19QQUxFVFRFX1JHQjI0LAkiUkdCMjQiIH0sCisJeyBWSURFT19QQUxFVFRFX1JHQjMyLAkiUkdCMzIiIH0sCisJeyBWSURFT19QQUxFVFRFX1JHQjU1NSwJIlJHQjU1NSIgfSwKKwl7IFZJREVPX1BBTEVUVEVfWVVWNDIyLAkiWVVWNDIyIiB9LAorCXsgVklERU9fUEFMRVRURV9ZVVlWLAkiWVVZViIgfSwKKwl7IFZJREVPX1BBTEVUVEVfVVlWWSwJIlVZVlkiIH0sCisJeyBWSURFT19QQUxFVFRFX1lVVjQyMCwJIllVVjQyMCIgfSwKKwl7IFZJREVPX1BBTEVUVEVfWVVWNDExLAkiWVVWNDExIiB9LAorCXsgVklERU9fUEFMRVRURV9SQVcsCSJSQVciIH0sCisJeyBWSURFT19QQUxFVFRFX1lVVjQyMlAsIllVVjQyMlAiIH0sCisJeyBWSURFT19QQUxFVFRFX1lVVjQxMVAsIllVVjQxMVAiIH0sCisJeyBWSURFT19QQUxFVFRFX1lVVjQyMFAsIllVVjQyMFAiIH0sCisJeyBWSURFT19QQUxFVFRFX1lVVjQxMFAsIllVVjQxMFAiIH0sCisJeyAtMSwgTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IHN5bWJvbGljX2xpc3QgYnJnbGlzdFtdID0geworCXsgQlJHX09WNTExLAkJIk9WNTExIiB9LAorCXsgQlJHX09WNTExUExVUywJIk9WNTExKyIgfSwKKwl7IEJSR19PVjUxOCwJCSJPVjUxOCIgfSwKKwl7IEJSR19PVjUxOFBMVVMsCSJPVjUxOCsiIH0sCisJeyAtMSwgTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IHN5bWJvbGljX2xpc3Qgc2VubGlzdFtdID0geworCXsgU0VOX09WNzZCRSwJIk9WNzZCRSIgfSwKKwl7IFNFTl9PVjc2MTAsCSJPVjc2MTAiIH0sCisJeyBTRU5fT1Y3NjIwLAkiT1Y3NjIwIiB9LAorCXsgU0VOX09WNzYyMEFFLAkiT1Y3NjIwQUUiIH0sCisJeyBTRU5fT1Y2NjIwLAkiT1Y2NjIwIiB9LAorCXsgU0VOX09WNjYzMCwJIk9WNjYzMCIgfSwKKwl7IFNFTl9PVjY2MzBBRSwJIk9WNjYzMEFFIiB9LAorCXsgU0VOX09WNjYzMEFGLAkiT1Y2NjMwQUYiIH0sCisJeyBTRU5fT1Y4NjAwLAkiT1Y4NjAwIiB9LAorCXsgU0VOX0tTMDEyNywJIktTMDEyNyIgfSwKKwl7IFNFTl9LUzAxMjdCLAkiS1MwMTI3QiIgfSwKKwl7IFNFTl9TQUE3MTExQSwJIlNBQTcxMTFBIiB9LAorCXsgLTEsIE5VTEwgfQorfTsKKworLyogVVJCIGVycm9yIGNvZGVzOiAqLworc3RhdGljIHN0cnVjdCBzeW1ib2xpY19saXN0IHVyYl9lcnJsaXN0W10gPSB7CisJeyAtRU5PU1IsCSJCdWZmZXIgZXJyb3IgKG92ZXJydW4pIiB9LAorCXsgLUVQSVBFLAkiU3RhbGxlZCAoZGV2aWNlIG5vdCByZXNwb25kaW5nKSIgfSwKKwl7IC1FT1ZFUkZMT1csCSJCYWJibGUgKGJhZCBjYWJsZT8pIiB9LAorCXsgLUVQUk9UTywJIkJpdC1zdHVmZiBlcnJvciAoYmFkIGNhYmxlPykiIH0sCisJeyAtRUlMU0VRLAkiQ1JDL1RpbWVvdXQiIH0sCisJeyAtRVRJTUVET1VULAkiTkFLIChkZXZpY2UgZG9lcyBub3QgcmVzcG9uZCkiIH0sCisJeyAtMSwgTlVMTCB9Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTWVtb3J5IG1hbmFnZW1lbnQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgKgorcnZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQoreworCXZvaWQgKm1lbTsKKwl1bnNpZ25lZCBsb25nIGFkcjsKKworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCW1lbSA9IHZtYWxsb2NfMzIoc2l6ZSk7CisJaWYgKCFtZW0pCisJCXJldHVybiBOVUxMOworCisJbWVtc2V0KG1lbSwgMCwgc2l6ZSk7IC8qIENsZWFyIHRoZSByYW0gb3V0LCBubyBqdW5rIHRvIHRoZSB1c2VyICovCisJYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJU2V0UGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOworCQlhZHIgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisKKwlyZXR1cm4gbWVtOworfQorCitzdGF0aWMgdm9pZAorcnZmcmVlKHZvaWQgKm1lbSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgYWRyOworCisJaWYgKCFtZW0pCisJCXJldHVybjsKKworCWFkciA9ICh1bnNpZ25lZCBsb25nKSBtZW07CisJd2hpbGUgKChsb25nKSBzaXplID4gMCkgeworCQlDbGVhclBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKKwkJYWRyICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCXZmcmVlKG1lbSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogUmVnaXN0ZXIgSS9PCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFdyaXRlIGFuIE9WNTF4IHJlZ2lzdGVyICovCitzdGF0aWMgaW50CityZWdfdyhzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgdmFsdWUpCit7CisJaW50IHJjOworCisJUERFQlVHKDUsICIweCUwMlg6MHglMDJYIiwgcmVnLCB2YWx1ZSk7CisKKwlkb3duKCZvdi0+Y2J1Zl9sb2NrKTsKKwlvdi0+Y2J1ZlswXSA9IHZhbHVlOworCXJjID0gdXNiX2NvbnRyb2xfbXNnKG92LT5kZXYsCisJCQkgICAgIHVzYl9zbmRjdHJscGlwZShvdi0+ZGV2LCAwKSwKKwkJCSAgICAgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KT8xOjIgLyogUkVHX0lPICovLAorCQkJICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAwLCAoX191MTYpcmVnLCAmb3YtPmNidWZbMF0sIDEsIDEwMDApOworCXVwKCZvdi0+Y2J1Zl9sb2NrKTsKKworCWlmIChyYyA8IDApCisJCWVycigicmVnIHdyaXRlOiBlcnJvciAlZDogJXMiLCByYywgc3ltYm9saWModXJiX2Vycmxpc3QsIHJjKSk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qIFJlYWQgZnJvbSBhbiBPVjUxeCByZWdpc3RlciAqLworLyogcmV0dXJuczogbmVnYXRpdmUgaXMgZXJyb3IsIHBvcyBvciB6ZXJvIGlzIGRhdGEgKi8KK3N0YXRpYyBpbnQKK3JlZ19yKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBjaGFyIHJlZykKK3sKKwlpbnQgcmM7CisKKwlkb3duKCZvdi0+Y2J1Zl9sb2NrKTsKKwlyYyA9IHVzYl9jb250cm9sX21zZyhvdi0+ZGV2LAorCQkJICAgICB1c2JfcmN2Y3RybHBpcGUob3YtPmRldiwgMCksCisJCQkgICAgIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCk/MTozIC8qIFJFR19JTyAqLywKKwkJCSAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgIDAsIChfX3UxNilyZWcsICZvdi0+Y2J1ZlswXSwgMSwgMTAwMCk7CisKKwlpZiAocmMgPCAwKSB7CisJCWVycigicmVnIHJlYWQ6IGVycm9yICVkOiAlcyIsIHJjLCBzeW1ib2xpYyh1cmJfZXJybGlzdCwgcmMpKTsKKwl9IGVsc2UgeworCQlyYyA9IG92LT5jYnVmWzBdOworCQlQREVCVUcoNSwgIjB4JTAyWDoweCUwMlgiLCByZWcsIG92LT5jYnVmWzBdKTsKKwl9CisKKwl1cCgmb3YtPmNidWZfbG9jayk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBXcml0ZXMgYml0cyBhdCBwb3NpdGlvbnMgc3BlY2lmaWVkIGJ5IG1hc2sgdG8gYW4gT1Y1MXggcmVnLiBCaXRzIHRoYXQgYXJlIGluCisgKiB0aGUgc2FtZSBwb3NpdGlvbiBhcyAxJ3MgaW4gIm1hc2siIGFyZSBjbGVhcmVkIGFuZCBzZXQgdG8gInZhbHVlIi4gQml0cworICogdGhhdCBhcmUgaW4gdGhlIHNhbWUgcG9zaXRpb24gYXMgMCdzIGluICJtYXNrIiBhcmUgcHJlc2VydmVkLCByZWdhcmRsZXNzCisgKiBvZiB0aGVpciByZXNwZWN0aXZlIHN0YXRlIGluICJ2YWx1ZSIuCisgKi8KK3N0YXRpYyBpbnQKK3JlZ193X21hc2soc3RydWN0IHVzYl9vdjUxMSAqb3YsCisJICAgdW5zaWduZWQgY2hhciByZWcsCisJICAgdW5zaWduZWQgY2hhciB2YWx1ZSwKKwkgICB1bnNpZ25lZCBjaGFyIG1hc2spCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyIG9sZHZhbCwgbmV3dmFsOworCisJcmV0ID0gcmVnX3Iob3YsIHJlZyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlvbGR2YWwgPSAodW5zaWduZWQgY2hhcikgcmV0OworCW9sZHZhbCAmPSAofm1hc2spOwkJLyogQ2xlYXIgdGhlIG1hc2tlZCBiaXRzICovCisJdmFsdWUgJj0gbWFzazsJCQkvKiBFbmZvcmNlIG1hc2sgb24gdmFsdWUgKi8KKwluZXd2YWwgPSBvbGR2YWwgfCB2YWx1ZTsJLyogU2V0IHRoZSBkZXNpcmVkIGJpdHMgKi8KKworCXJldHVybiAocmVnX3cob3YsIHJlZywgbmV3dmFsKSk7Cit9CisKKy8qIAorICogV3JpdGVzIG11bHRpcGxlIChuKSBieXRlIHZhbHVlIHRvIGEgc2luZ2xlIHJlZ2lzdGVyLiBPbmx5IHZhbGlkIHdpdGggY2VydGFpbgorICogcmVnaXN0ZXJzICgweDMwIGFuZCAweGM0IC0gMHhjZSkuCisgKi8KK3N0YXRpYyBpbnQKK292NTE4X3JlZ193MzIoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIGNoYXIgcmVnLCB1MzIgdmFsLCBpbnQgbikKK3sKKwlpbnQgcmM7CisKKwlQREVCVUcoNSwgIjB4JTAyWDolN2QsIG49JWQiLCByZWcsIHZhbCwgbik7CisKKwlkb3duKCZvdi0+Y2J1Zl9sb2NrKTsKKworCSooKF9fbGUzMiAqKW92LT5jYnVmKSA9IF9fY3B1X3RvX2xlMzIodmFsKTsKKworCXJjID0gdXNiX2NvbnRyb2xfbXNnKG92LT5kZXYsCisJCQkgICAgIHVzYl9zbmRjdHJscGlwZShvdi0+ZGV2LCAwKSwKKwkJCSAgICAgMSAvKiBSRUdfSU8gKi8sCisJCQkgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgIDAsIChfX3UxNilyZWcsIG92LT5jYnVmLCBuLCAxMDAwKTsKKwl1cCgmb3YtPmNidWZfbG9jayk7CisKKwlpZiAocmMgPCAwKQorCQllcnIoInJlZyB3cml0ZSBtdWx0aXBsZTogZXJyb3IgJWQ6ICVzIiwgcmMsCisJCSAgICBzeW1ib2xpYyh1cmJfZXJybGlzdCwgcmMpKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludAorb3Y1MTFfdXBsb2FkX3F1YW5fdGFibGVzKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCXVuc2lnbmVkIGNoYXIgKnBZVGFibGUgPSB5UXVhblRhYmxlNTExOworCXVuc2lnbmVkIGNoYXIgKnBVVlRhYmxlID0gdXZRdWFuVGFibGU1MTE7CisJdW5zaWduZWQgY2hhciB2YWwwLCB2YWwxOworCWludCBpLCByYywgcmVnID0gUjUxMV9DT01QX0xVVF9CRUdJTjsKKworCVBERUJVRyg0LCAiVXBsb2FkaW5nIHF1YW50aXphdGlvbiB0YWJsZXMiKTsKKworCWZvciAoaSA9IDA7IGkgPCBPVjUxMV9RVUFOVEFCTEVTSVpFIC8gMjsgaSsrKSB7CisJCWlmIChFTkFCTEVfWV9RVUFOVEFCTEUpCXsKKwkJCXZhbDAgPSAqcFlUYWJsZSsrOworCQkJdmFsMSA9ICpwWVRhYmxlKys7CisJCQl2YWwwICY9IDB4MGY7CisJCQl2YWwxICY9IDB4MGY7CisJCQl2YWwwIHw9IHZhbDEgPDwgNDsKKwkJCXJjID0gcmVnX3cob3YsIHJlZywgdmFsMCk7CisJCQlpZiAocmMgPCAwKQorCQkJCXJldHVybiByYzsKKwkJfQorCisJCWlmIChFTkFCTEVfVVZfUVVBTlRBQkxFKSB7CisJCQl2YWwwID0gKnBVVlRhYmxlKys7CisJCQl2YWwxID0gKnBVVlRhYmxlKys7CisJCQl2YWwwICY9IDB4MGY7CisJCQl2YWwxICY9IDB4MGY7CisJCQl2YWwwIHw9IHZhbDEgPDwgNDsKKwkJCXJjID0gcmVnX3cob3YsIHJlZyArIE9WNTExX1FVQU5UQUJMRVNJWkUvMiwgdmFsMCk7CisJCQlpZiAocmMgPCAwKQorCQkJCXJldHVybiByYzsKKwkJfQorCisJCXJlZysrOworCX0KKworCXJldHVybiAwOworfQorCisvKiBPVjUxOCBxdWFudGl6YXRpb24gdGFibGVzIGFyZSA4eDQgKGluc3RlYWQgb2YgOHg4KSAqLworc3RhdGljIGludAorb3Y1MThfdXBsb2FkX3F1YW5fdGFibGVzKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCXVuc2lnbmVkIGNoYXIgKnBZVGFibGUgPSB5UXVhblRhYmxlNTE4OworCXVuc2lnbmVkIGNoYXIgKnBVVlRhYmxlID0gdXZRdWFuVGFibGU1MTg7CisJdW5zaWduZWQgY2hhciB2YWwwLCB2YWwxOworCWludCBpLCByYywgcmVnID0gUjUxMV9DT01QX0xVVF9CRUdJTjsKKworCVBERUJVRyg0LCAiVXBsb2FkaW5nIHF1YW50aXphdGlvbiB0YWJsZXMiKTsKKworCWZvciAoaSA9IDA7IGkgPCBPVjUxOF9RVUFOVEFCTEVTSVpFIC8gMjsgaSsrKSB7CisJCWlmIChFTkFCTEVfWV9RVUFOVEFCTEUpIHsKKwkJCXZhbDAgPSAqcFlUYWJsZSsrOworCQkJdmFsMSA9ICpwWVRhYmxlKys7CisJCQl2YWwwICY9IDB4MGY7CisJCQl2YWwxICY9IDB4MGY7CisJCQl2YWwwIHw9IHZhbDEgPDwgNDsKKwkJCXJjID0gcmVnX3cob3YsIHJlZywgdmFsMCk7CisJCQlpZiAocmMgPCAwKQorCQkJCXJldHVybiByYzsKKwkJfQorCisJCWlmIChFTkFCTEVfVVZfUVVBTlRBQkxFKSB7CisJCQl2YWwwID0gKnBVVlRhYmxlKys7CisJCQl2YWwxID0gKnBVVlRhYmxlKys7CisJCQl2YWwwICY9IDB4MGY7CisJCQl2YWwxICY9IDB4MGY7CisJCQl2YWwwIHw9IHZhbDEgPDwgNDsKKwkJCXJjID0gcmVnX3cob3YsIHJlZyArIE9WNTE4X1FVQU5UQUJMRVNJWkUvMiwgdmFsMCk7CisJCQlpZiAocmMgPCAwKQorCQkJCXJldHVybiByYzsKKwkJfQorCisJCXJlZysrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitvdjUxeF9yZXNldChzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgY2hhciByZXNldF90eXBlKQoreworCWludCByYzsKKworCS8qIFNldHRpbmcgYml0IDAgbm90IGFsbG93ZWQgb24gNTE4LzUxOFBsdXMgKi8KKwlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpCisJCXJlc2V0X3R5cGUgJj0gMHhmZTsKKworCVBERUJVRyg0LCAiUmVzZXQ6IHR5cGU9MHglMDJYIiwgcmVzZXRfdHlwZSk7CisKKwlyYyA9IHJlZ193KG92LCBSNTF4X1NZU19SRVNFVCwgcmVzZXRfdHlwZSk7CisJcmMgPSByZWdfdyhvdiwgUjUxeF9TWVNfUkVTRVQsIDApOworCisJaWYgKHJjIDwgMCkKKwkJZXJyKCJyZXNldDogY29tbWFuZCBmYWlsZWQiKTsKKworCXJldHVybiByYzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBMb3ctbGV2ZWwgSTJDIEkvTyBmdW5jdGlvbnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogTk9URTogRG8gbm90IGNhbGwgdGhpcyBmdW5jdGlvbiBkaXJlY3RseSEKKyAqIFRoZSBPVjUxOCBJMkMgSS9PIHByb2NlZHVyZSBpcyBkaWZmZXJlbnQsIGhlbmNlLCB0aGlzIGZ1bmN0aW9uLgorICogVGhpcyBpcyBub3JtYWxseSBvbmx5IGNhbGxlZCBmcm9tIGkyY193KCkuIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uCisgKiBhbHdheXMgc3VjY2VlZHMgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBzZW5zb3IgaXMgcHJlc2VudCBhbmQgd29ya2luZy4KKyAqLworc3RhdGljIGludAorb3Y1MThfaTJjX3dyaXRlX2ludGVybmFsKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LAorCQkJIHVuc2lnbmVkIGNoYXIgcmVnLAorCQkJIHVuc2lnbmVkIGNoYXIgdmFsdWUpCit7CisJaW50IHJjOworCisJUERFQlVHKDUsICIweCUwMlg6MHglMDJYIiwgcmVnLCB2YWx1ZSk7CisKKwkvKiBTZWxlY3QgY2FtZXJhIHJlZ2lzdGVyICovCisJcmMgPSByZWdfdyhvdiwgUjUxeF9JMkNfU0FERFJfMywgcmVnKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBXcml0ZSAidmFsdWUiIHRvIEkyQyBkYXRhIHBvcnQgb2YgT1Y1MTEgKi8KKwlyYyA9IHJlZ193KG92LCBSNTF4X0kyQ19EQVRBLCB2YWx1ZSk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJLyogSW5pdGlhdGUgMy1ieXRlIHdyaXRlIGN5Y2xlICovCisJcmMgPSByZWdfdyhvdiwgUjUxOF9JMkNfQ1RMLCAweDAxKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gMDsKK30KKworLyogTk9URTogRG8gbm90IGNhbGwgdGhpcyBmdW5jdGlvbiBkaXJlY3RseSEgKi8KK3N0YXRpYyBpbnQKK292NTExX2kyY193cml0ZV9pbnRlcm5hbChzdHJ1Y3QgdXNiX292NTExICpvdiwKKwkJCSB1bnNpZ25lZCBjaGFyIHJlZywKKwkJCSB1bnNpZ25lZCBjaGFyIHZhbHVlKQoreworCWludCByYywgcmV0cmllczsKKworCVBERUJVRyg1LCAiMHglMDJYOjB4JTAyWCIsIHJlZywgdmFsdWUpOworCisJLyogVGhyZWUgYnl0ZSB3cml0ZSBjeWNsZSAqLworCWZvciAocmV0cmllcyA9IE9WNTExX0kyQ19SRVRSSUVTOyA7ICkgeworCQkvKiBTZWxlY3QgY2FtZXJhIHJlZ2lzdGVyICovCisJCXJjID0gcmVnX3cob3YsIFI1MXhfSTJDX1NBRERSXzMsIHJlZyk7CisJCWlmIChyYyA8IDApCisJCQlicmVhazsKKworCQkvKiBXcml0ZSAidmFsdWUiIHRvIEkyQyBkYXRhIHBvcnQgb2YgT1Y1MTEgKi8KKwkJcmMgPSByZWdfdyhvdiwgUjUxeF9JMkNfREFUQSwgdmFsdWUpOworCQlpZiAocmMgPCAwKQorCQkJYnJlYWs7CisKKwkJLyogSW5pdGlhdGUgMy1ieXRlIHdyaXRlIGN5Y2xlICovCisJCXJjID0gcmVnX3cob3YsIFI1MTFfSTJDX0NUTCwgMHgwMSk7CisJCWlmIChyYyA8IDApCisJCQlicmVhazsKKworCQkvKiBSZXRyeSB1bnRpbCBpZGxlICovCisJCWRvCisJCQlyYyA9IHJlZ19yKG92LCBSNTExX0kyQ19DVEwpOworCQl3aGlsZSAocmMgPiAwICYmICgocmMmMSkgPT0gMCkpOyAKKwkJaWYgKHJjIDwgMCkKKwkJCWJyZWFrOworCisJCS8qIEFjaz8gKi8KKwkJaWYgKChyYyYyKSA9PSAwKSB7CisJCQlyYyA9IDA7CisJCQlicmVhazsKKwkJfQorI2lmIDAKKwkJLyogSTJDIGFib3J0ICovCisJCXJlZ193KG92LCBSNTExX0kyQ19DVEwsIDB4MTApOworI2VuZGlmCisJCWlmICgtLXJldHJpZXMgPCAwKSB7CisJCQllcnIoImkyYyB3cml0ZSByZXRyaWVzIGV4aGF1c3RlZCIpOworCQkJcmMgPSAtMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHJjOworfQorCisvKiBOT1RFOiBEbyBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IQorICogVGhlIE9WNTE4IEkyQyBJL08gcHJvY2VkdXJlIGlzIGRpZmZlcmVudCwgaGVuY2UsIHRoaXMgZnVuY3Rpb24uCisgKiBUaGlzIGlzIG5vcm1hbGx5IG9ubHkgY2FsbGVkIGZyb20gaTJjX3IoKS4gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24KKyAqIGFsd2F5cyBzdWNjZWVkcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHNlbnNvciBpcyBwcmVzZW50IGFuZCB3b3JraW5nLgorICovCitzdGF0aWMgaW50CitvdjUxOF9pMmNfcmVhZF9pbnRlcm5hbChzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgY2hhciByZWcpCit7CisJaW50IHJjLCB2YWx1ZTsKKworCS8qIFNlbGVjdCBjYW1lcmEgcmVnaXN0ZXIgKi8KKwlyYyA9IHJlZ193KG92LCBSNTF4X0kyQ19TQUREUl8yLCByZWcpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCS8qIEluaXRpYXRlIDItYnl0ZSB3cml0ZSBjeWNsZSAqLworCXJjID0gcmVnX3cob3YsIFI1MThfSTJDX0NUTCwgMHgwMyk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJLyogSW5pdGlhdGUgMi1ieXRlIHJlYWQgY3ljbGUgKi8KKwlyYyA9IHJlZ193KG92LCBSNTE4X0kyQ19DVEwsIDB4MDUpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCXZhbHVlID0gcmVnX3Iob3YsIFI1MXhfSTJDX0RBVEEpOworCisJUERFQlVHKDUsICIweCUwMlg6MHglMDJYIiwgcmVnLCB2YWx1ZSk7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKKy8qIE5PVEU6IERvIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkhCisgKiByZXR1cm5zOiBuZWdhdGl2ZSBpcyBlcnJvciwgcG9zIG9yIHplcm8gaXMgZGF0YSAqLworc3RhdGljIGludAorb3Y1MTFfaTJjX3JlYWRfaW50ZXJuYWwoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIGNoYXIgcmVnKQoreworCWludCByYywgdmFsdWUsIHJldHJpZXM7CisKKwkvKiBUd28gYnl0ZSB3cml0ZSBjeWNsZSAqLworCWZvciAocmV0cmllcyA9IE9WNTExX0kyQ19SRVRSSUVTOyA7ICkgeworCQkvKiBTZWxlY3QgY2FtZXJhIHJlZ2lzdGVyICovCisJCXJjID0gcmVnX3cob3YsIFI1MXhfSTJDX1NBRERSXzIsIHJlZyk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisKKwkJLyogSW5pdGlhdGUgMi1ieXRlIHdyaXRlIGN5Y2xlICovCisJCXJjID0gcmVnX3cob3YsIFI1MTFfSTJDX0NUTCwgMHgwMyk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisKKwkJLyogUmV0cnkgdW50aWwgaWRsZSAqLworCQlkbworCQkJIHJjID0gcmVnX3Iob3YsIFI1MTFfSTJDX0NUTCk7CisJCXdoaWxlIChyYyA+IDAgJiYgKChyYyYxKSA9PSAwKSk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisKKwkJaWYgKChyYyYyKSA9PSAwKSAvKiBBY2s/ICovCisJCQlicmVhazsKKworCQkvKiBJMkMgYWJvcnQgKi8KKwkJcmVnX3cob3YsIFI1MTFfSTJDX0NUTCwgMHgxMCk7CisKKwkJaWYgKC0tcmV0cmllcyA8IDApIHsKKwkJCWVycigiaTJjIHdyaXRlIHJldHJpZXMgZXhoYXVzdGVkIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwkvKiBUd28gYnl0ZSByZWFkIGN5Y2xlICovCisJZm9yIChyZXRyaWVzID0gT1Y1MTFfSTJDX1JFVFJJRVM7IDsgKSB7CisJCS8qIEluaXRpYXRlIDItYnl0ZSByZWFkIGN5Y2xlICovCisJCXJjID0gcmVnX3cob3YsIFI1MTFfSTJDX0NUTCwgMHgwNSk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisKKwkJLyogUmV0cnkgdW50aWwgaWRsZSAqLworCQlkbworCQkJcmMgPSByZWdfcihvdiwgUjUxMV9JMkNfQ1RMKTsKKwkJd2hpbGUgKHJjID4gMCAmJiAoKHJjJjEpID09IDApKTsKKwkJaWYgKHJjIDwgMCkKKwkJCXJldHVybiByYzsKKworCQlpZiAoKHJjJjIpID09IDApIC8qIEFjaz8gKi8KKwkJCWJyZWFrOworCisJCS8qIEkyQyBhYm9ydCAqLworCQlyYyA9IHJlZ193KG92LCBSNTExX0kyQ19DVEwsIDB4MTApOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCisJCWlmICgtLXJldHJpZXMgPCAwKSB7CisJCQllcnIoImkyYyByZWFkIHJldHJpZXMgZXhoYXVzdGVkIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwl2YWx1ZSA9IHJlZ19yKG92LCBSNTF4X0kyQ19EQVRBKTsKKworCVBERUJVRyg1LCAiMHglMDJYOjB4JTAyWCIsIHJlZywgdmFsdWUpOworCisJLyogVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBpMmNfdygpIHdvcmsgKi8KKwlyYyA9IHJlZ193KG92LCBSNTExX0kyQ19DVEwsIDB4MDUpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCXJldHVybiB2YWx1ZTsKK30KKworLyogcmV0dXJuczogbmVnYXRpdmUgaXMgZXJyb3IsIHBvcyBvciB6ZXJvIGlzIGRhdGEgKi8KK3N0YXRpYyBpbnQKK2kyY19yKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBjaGFyIHJlZykKK3sKKwlpbnQgcmM7CisKKwlkb3duKCZvdi0+aTJjX2xvY2spOworCisJaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KQorCQlyYyA9IG92NTE4X2kyY19yZWFkX2ludGVybmFsKG92LCByZWcpOworCWVsc2UKKwkJcmMgPSBvdjUxMV9pMmNfcmVhZF9pbnRlcm5hbChvdiwgcmVnKTsKKworCXVwKCZvdi0+aTJjX2xvY2spOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitpMmNfdyhzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgdmFsdWUpCit7CisJaW50IHJjOworCisJZG93bigmb3YtPmkyY19sb2NrKTsKKworCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkKKwkJcmMgPSBvdjUxOF9pMmNfd3JpdGVfaW50ZXJuYWwob3YsIHJlZywgdmFsdWUpOworCWVsc2UKKwkJcmMgPSBvdjUxMV9pMmNfd3JpdGVfaW50ZXJuYWwob3YsIHJlZywgdmFsdWUpOworCisJdXAoJm92LT5pMmNfbG9jayk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qIERvIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkhICovCitzdGF0aWMgaW50CitvdjUxeF9pMmNfd3JpdGVfbWFza19pbnRlcm5hbChzdHJ1Y3QgdXNiX292NTExICpvdiwKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgcmVnLAorCQkJICAgICAgdW5zaWduZWQgY2hhciB2YWx1ZSwKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgbWFzaykKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgY2hhciBvbGR2YWwsIG5ld3ZhbDsKKworCWlmIChtYXNrID09IDB4ZmYpIHsKKwkJbmV3dmFsID0gdmFsdWU7CisJfSBlbHNlIHsKKwkJaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KQorCQkJcmMgPSBvdjUxOF9pMmNfcmVhZF9pbnRlcm5hbChvdiwgcmVnKTsKKwkJZWxzZQorCQkJcmMgPSBvdjUxMV9pMmNfcmVhZF9pbnRlcm5hbChvdiwgcmVnKTsKKwkJaWYgKHJjIDwgMCkKKwkJCXJldHVybiByYzsKKworCQlvbGR2YWwgPSAodW5zaWduZWQgY2hhcikgcmM7CisJCW9sZHZhbCAmPSAofm1hc2spOwkJLyogQ2xlYXIgdGhlIG1hc2tlZCBiaXRzICovCisJCXZhbHVlICY9IG1hc2s7CQkJLyogRW5mb3JjZSBtYXNrIG9uIHZhbHVlICovCisJCW5ld3ZhbCA9IG9sZHZhbCB8IHZhbHVlOwkvKiBTZXQgdGhlIGRlc2lyZWQgYml0cyAqLworCX0KKworCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkKKwkJcmV0dXJuIChvdjUxOF9pMmNfd3JpdGVfaW50ZXJuYWwob3YsIHJlZywgbmV3dmFsKSk7CisJZWxzZQorCQlyZXR1cm4gKG92NTExX2kyY193cml0ZV9pbnRlcm5hbChvdiwgcmVnLCBuZXd2YWwpKTsKK30KKworLyogV3JpdGVzIGJpdHMgYXQgcG9zaXRpb25zIHNwZWNpZmllZCBieSBtYXNrIHRvIGFuIEkyQyByZWcuIEJpdHMgdGhhdCBhcmUgaW4KKyAqIHRoZSBzYW1lIHBvc2l0aW9uIGFzIDEncyBpbiAibWFzayIgYXJlIGNsZWFyZWQgYW5kIHNldCB0byAidmFsdWUiLiBCaXRzCisgKiB0aGF0IGFyZSBpbiB0aGUgc2FtZSBwb3NpdGlvbiBhcyAwJ3MgaW4gIm1hc2siIGFyZSBwcmVzZXJ2ZWQsIHJlZ2FyZGxlc3MKKyAqIG9mIHRoZWlyIHJlc3BlY3RpdmUgc3RhdGUgaW4gInZhbHVlIi4KKyAqLworc3RhdGljIGludAoraTJjX3dfbWFzayhzdHJ1Y3QgdXNiX292NTExICpvdiwKKwkgICB1bnNpZ25lZCBjaGFyIHJlZywKKwkgICB1bnNpZ25lZCBjaGFyIHZhbHVlLAorCSAgIHVuc2lnbmVkIGNoYXIgbWFzaykKK3sKKwlpbnQgcmM7CisKKwlkb3duKCZvdi0+aTJjX2xvY2spOworCXJjID0gb3Y1MXhfaTJjX3dyaXRlX21hc2tfaW50ZXJuYWwob3YsIHJlZywgdmFsdWUsIG1hc2spOworCXVwKCZvdi0+aTJjX2xvY2spOworCisJcmV0dXJuIHJjOworfQorCisvKiBTZXQgdGhlIHJlYWQgYW5kIHdyaXRlIHNsYXZlIElEcy4gVGhlICJzbGF2ZSIgYXJndW1lbnQgaXMgdGhlIHdyaXRlIHNsYXZlLAorICogYW5kIHRoZSByZWFkIHNsYXZlIHdpbGwgYmUgc2V0IHRvIChzbGF2ZSArIDEpLiBvdi0+aTJjX2xvY2sgc2hvdWxkIGJlIGhlbGQKKyAqIHdoZW4gY2FsbGluZyB0aGlzLiBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgaTJjIEkvTworICogZnVuY3Rpb25zLgorICovCitzdGF0aWMgaW50CitpMmNfc2V0X3NsYXZlX2ludGVybmFsKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBjaGFyIHNsYXZlKQoreworCWludCByYzsKKworCXJjID0gcmVnX3cob3YsIFI1MXhfSTJDX1dfU0lELCBzbGF2ZSk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJcmMgPSByZWdfdyhvdiwgUjUxeF9JMkNfUl9TSUQsIHNsYXZlICsgMSk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFdyaXRlIHRvIGEgc3BlY2lmaWMgSTJDIHNsYXZlIElEIGFuZCByZWdpc3RlciwgdXNpbmcgdGhlIHNwZWNpZmllZCBtYXNrICovCitzdGF0aWMgaW50CitpMmNfd19zbGF2ZShzdHJ1Y3QgdXNiX292NTExICpvdiwKKwkgICAgdW5zaWduZWQgY2hhciBzbGF2ZSwKKwkgICAgdW5zaWduZWQgY2hhciByZWcsCisJICAgIHVuc2lnbmVkIGNoYXIgdmFsdWUsCisJICAgIHVuc2lnbmVkIGNoYXIgbWFzaykKK3sKKwlpbnQgcmMgPSAwOworCisJZG93bigmb3YtPmkyY19sb2NrKTsKKworCS8qIFNldCBuZXcgc2xhdmUgSURzICovCisJcmMgPSBpMmNfc2V0X3NsYXZlX2ludGVybmFsKG92LCBzbGF2ZSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBvdXQ7CisKKwlyYyA9IG92NTF4X2kyY193cml0ZV9tYXNrX2ludGVybmFsKG92LCByZWcsIHZhbHVlLCBtYXNrKTsKKworb3V0OgorCS8qIFJlc3RvcmUgcHJpbWFyeSBJRHMgKi8KKwlpZiAoaTJjX3NldF9zbGF2ZV9pbnRlcm5hbChvdiwgb3YtPnByaW1hcnlfaTJjX3NsYXZlKSA8IDApCisJCWVycigiQ291bGRuJ3QgcmVzdG9yZSBwcmltYXJ5IEkyQyBzbGF2ZSIpOworCisJdXAoJm92LT5pMmNfbG9jayk7CisJcmV0dXJuIHJjOworfQorCisvKiBSZWFkIGZyb20gYSBzcGVjaWZpYyBJMkMgc2xhdmUgSUQgYW5kIHJlZ2lzdGVyICovCitzdGF0aWMgaW50CitpMmNfcl9zbGF2ZShzdHJ1Y3QgdXNiX292NTExICpvdiwKKwkgICAgdW5zaWduZWQgY2hhciBzbGF2ZSwKKwkgICAgdW5zaWduZWQgY2hhciByZWcpCit7CisJaW50IHJjOworCisJZG93bigmb3YtPmkyY19sb2NrKTsKKworCS8qIFNldCBuZXcgc2xhdmUgSURzICovCisJcmMgPSBpMmNfc2V0X3NsYXZlX2ludGVybmFsKG92LCBzbGF2ZSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpCisJCXJjID0gb3Y1MThfaTJjX3JlYWRfaW50ZXJuYWwob3YsIHJlZyk7CisJZWxzZQorCQlyYyA9IG92NTExX2kyY19yZWFkX2ludGVybmFsKG92LCByZWcpOworCitvdXQ6CisJLyogUmVzdG9yZSBwcmltYXJ5IElEcyAqLworCWlmIChpMmNfc2V0X3NsYXZlX2ludGVybmFsKG92LCBvdi0+cHJpbWFyeV9pMmNfc2xhdmUpIDwgMCkKKwkJZXJyKCJDb3VsZG4ndCByZXN0b3JlIHByaW1hcnkgSTJDIHNsYXZlIik7CisKKwl1cCgmb3YtPmkyY19sb2NrKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qIFNldHMgSTJDIHJlYWQgYW5kIHdyaXRlIHNsYXZlIElEcy4gUmV0dXJucyA8MCBmb3IgZXJyb3IgKi8KK3N0YXRpYyBpbnQKK292NTF4X3NldF9zbGF2ZV9pZHMoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIGNoYXIgc2lkKQoreworCWludCByYzsKKworCWRvd24oJm92LT5pMmNfbG9jayk7CisKKwlyYyA9IGkyY19zZXRfc2xhdmVfaW50ZXJuYWwob3YsIHNpZCk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBvdXQ7CisKKwkvLyBGSVhNRTogSXMgdGhpcyBhY3R1YWxseSBuZWNlc3Nhcnk/CisJcmMgPSBvdjUxeF9yZXNldChvdiwgT1Y1MTFfUkVTRVRfTk9SRUdTKTsKK291dDoKKwl1cCgmb3YtPmkyY19sb2NrKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlX3JlZ3ZhbHMoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHN0cnVjdCBvdjUxMV9yZWd2YWxzICogcFJlZ3ZhbHMpCit7CisJaW50IHJjOworCisJd2hpbGUgKHBSZWd2YWxzLT5idXMgIT0gT1Y1MTFfRE9ORV9CVVMpIHsKKwkJaWYgKHBSZWd2YWxzLT5idXMgPT0gT1Y1MTFfUkVHX0JVUykgeworCQkJaWYgKChyYyA9IHJlZ193KG92LCBwUmVndmFscy0+cmVnLCBwUmVndmFscy0+dmFsKSkgPCAwKQorCQkJCXJldHVybiByYzsKKwkJfSBlbHNlIGlmIChwUmVndmFscy0+YnVzID09IE9WNTExX0kyQ19CVVMpIHsKKwkJCWlmICgocmMgPSBpMmNfdyhvdiwgcFJlZ3ZhbHMtPnJlZywgcFJlZ3ZhbHMtPnZhbCkpIDwgMCkKKwkJCQlyZXR1cm4gcmM7CisJCX0gZWxzZSB7CisJCQllcnIoIkJhZCByZWd2YWwgYXJyYXkiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlwUmVndmFscysrOworCX0KKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIE9WNTExX0RFQlVHCitzdGF0aWMgdm9pZAorZHVtcF9pMmNfcmFuZ2Uoc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCByZWcxLCBpbnQgcmVnbikKK3sKKwlpbnQgaSwgcmM7CisKKwlmb3IgKGkgPSByZWcxOyBpIDw9IHJlZ247IGkrKykgeworCQlyYyA9IGkyY19yKG92LCBpKTsKKwkJaW5mbygiU2Vuc29yWzB4JTAyWF0gPSAweCUwMlgiLCBpLCByYyk7CisJfQorfQorCitzdGF0aWMgdm9pZAorZHVtcF9pMmNfcmVncyhzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlpbmZvKCJJMkMgUkVHUyIpOworCWR1bXBfaTJjX3JhbmdlKG92LCAweDAwLCAweDdDKTsKK30KKworc3RhdGljIHZvaWQKK2R1bXBfcmVnX3JhbmdlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBpbnQgcmVnMSwgaW50IHJlZ24pCit7CisJaW50IGksIHJjOworCisJZm9yIChpID0gcmVnMTsgaSA8PSByZWduOyBpKyspIHsKKwkJcmMgPSByZWdfcihvdiwgaSk7CisJCWluZm8oIk9WNTExWzB4JTAyWF0gPSAweCUwMlgiLCBpLCByYyk7CisJfQorfQorCitzdGF0aWMgdm9pZAorb3Y1MTFfZHVtcF9yZWdzKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCWluZm8oIkNBTUVSQSBJTlRFUkZBQ0UgUkVHUyIpOworCWR1bXBfcmVnX3JhbmdlKG92LCAweDEwLCAweDFmKTsKKwlpbmZvKCJEUkFNIElOVEVSRkFDRSBSRUdTIik7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4MjAsIDB4MjMpOworCWluZm8oIklTTyBGSUZPIFJFR1MiKTsKKwlkdW1wX3JlZ19yYW5nZShvdiwgMHgzMCwgMHgzMSk7CisJaW5mbygiUElPIFJFR1MiKTsKKwlkdW1wX3JlZ19yYW5nZShvdiwgMHgzOCwgMHgzOSk7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4M2UsIDB4M2UpOworCWluZm8oIkkyQyBSRUdTIik7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4NDAsIDB4NDkpOworCWluZm8oIlNZU1RFTSBDT05UUk9MIFJFR1MiKTsKKwlkdW1wX3JlZ19yYW5nZShvdiwgMHg1MCwgMHg1NSk7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4NWUsIDB4NWYpOworCWluZm8oIk9tbmlDRSBSRUdTIik7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4NzAsIDB4NzkpOworCS8qIE5PVEU6IFF1YW50aXphdGlvbiB0YWJsZXMgYXJlIG5vdCByZWFkYWJsZS4gWW91IHdpbGwgZ2V0IHRoZSB2YWx1ZQorCSAqIGluIHJlZy4gMHg3OSBmb3IgZXZlcnkgdGFibGUgcmVnaXN0ZXIgKi8KKwlkdW1wX3JlZ19yYW5nZShvdiwgMHg4MCwgMHg5Zik7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4YTAsIDB4YmYpOworCit9CisKK3N0YXRpYyB2b2lkCitvdjUxOF9kdW1wX3JlZ3Moc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaW5mbygiVklERU8gTU9ERSBSRUdTIik7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4MjAsIDB4MmYpOworCWluZm8oIkRBVEEgUFVNUCBBTkQgU05BUFNIT1QgUkVHUyIpOworCWR1bXBfcmVnX3JhbmdlKG92LCAweDMwLCAweDNmKTsKKwlpbmZvKCJJMkMgUkVHUyIpOworCWR1bXBfcmVnX3JhbmdlKG92LCAweDQwLCAweDRmKTsKKwlpbmZvKCJTWVNURU0gQ09OVFJPTCBBTkQgVkVORE9SIFJFR1MiKTsKKwlkdW1wX3JlZ19yYW5nZShvdiwgMHg1MCwgMHg1Zik7CisJaW5mbygiNjAgLSA2RiIpOworCWR1bXBfcmVnX3JhbmdlKG92LCAweDYwLCAweDZmKTsKKwlpbmZvKCI3MCAtIDdGIik7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4NzAsIDB4N2YpOworCWluZm8oIlkgUVVBTlRJWkFUSU9OIFRBQkxFIik7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4ODAsIDB4OGYpOworCWluZm8oIlVWIFFVQU5USVpBVElPTiBUQUJMRSIpOworCWR1bXBfcmVnX3JhbmdlKG92LCAweDkwLCAweDlmKTsKKwlpbmZvKCJBMCAtIEJGIik7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4YTAsIDB4YmYpOworCWluZm8oIkNCUiIpOworCWR1bXBfcmVnX3JhbmdlKG92LCAweGMwLCAweGNmKTsKK30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRlbXBvcmFyaWx5IHN0b3BzIE9WNTExIGZyb20gZnVuY3Rpb25pbmcuIE11c3QgZG8gdGhpcyBiZWZvcmUgY2hhbmdpbmcKKyAqIHJlZ2lzdGVycyB3aGlsZSB0aGUgY2FtZXJhIGlzIHN0cmVhbWluZyAqLworc3RhdGljIGlubGluZSBpbnQKK292NTF4X3N0b3Aoc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJUERFQlVHKDQsICJzdG9wcGluZyIpOworCW92LT5zdG9wcGVkID0gMTsKKwlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpCisJCXJldHVybiAocmVnX3dfbWFzayhvdiwgUjUxeF9TWVNfUkVTRVQsIDB4M2EsIDB4M2EpKTsKKwllbHNlCisJCXJldHVybiAocmVnX3cob3YsIFI1MXhfU1lTX1JFU0VULCAweDNkKSk7Cit9CisKKy8qIFJlc3RhcnRzIE9WNTExIGFmdGVyIG92NTExX3N0b3AoKSBpcyBjYWxsZWQuIEhhcyBubyBlZmZlY3QgaWYgaXQgaXMgbm90CisgKiBhY3R1YWxseSBzdG9wcGVkIChmb3IgcGVyZm9ybWFuY2UpLiAqLworc3RhdGljIGlubGluZSBpbnQKK292NTF4X3Jlc3RhcnQoc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaWYgKG92LT5zdG9wcGVkKSB7CisJCVBERUJVRyg0LCAicmVzdGFydGluZyIpOworCQlvdi0+c3RvcHBlZCA9IDA7CisKKwkJLyogUmVpbml0aWFsaXplIHRoZSBzdHJlYW0gKi8KKwkJaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KQorCQkJcmVnX3cob3YsIDB4MmYsIDB4ODApOworCisJCXJldHVybiAocmVnX3cob3YsIFI1MXhfU1lTX1JFU0VULCAweDAwKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIFNsZWVwcyB1bnRpbCBubyBmcmFtZXMgYXJlIGFjdGl2ZS4gUmV0dXJucyAhMCBpZiBnb3Qgc2lnbmFsICovCitzdGF0aWMgaW50CitvdjUxeF93YWl0X2ZyYW1lc19pbmFjdGl2ZShzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlyZXR1cm4gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKG92LT53cSwgb3YtPmN1cmZyYW1lIDwgMCk7Cit9CisKKy8qIFJlc2V0cyB0aGUgaGFyZHdhcmUgc25hcHNob3QgYnV0dG9uICovCitzdGF0aWMgdm9pZAorb3Y1MXhfY2xlYXJfc25hcHNob3Qoc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTExKSB7CisJCXJlZ193KG92LCBSNTF4X1NZU19TTkFQLCAweDAwKTsKKwkJcmVnX3cob3YsIFI1MXhfU1lTX1NOQVAsIDB4MDIpOworCQlyZWdfdyhvdiwgUjUxeF9TWVNfU05BUCwgMHgwMCk7CisJfSBlbHNlIGlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgeworCQl3YXJuKCJzbmFwc2hvdCByZXNldCBub3Qgc3VwcG9ydGVkIHlldCBvbiBPVjUxOCgrKSIpOworCX0gZWxzZSB7CisJCWVycigiY2xlYXIgc25hcDogaW52YWxpZCBicmlkZ2UgdHlwZSIpOworCX0KK30KKworI2lmIDAKKy8qIENoZWNrcyB0aGUgc3RhdHVzIG9mIHRoZSBzbmFwc2hvdCBidXR0b24uIFJldHVybnMgMSBpZiBpdCB3YXMgcHJlc3NlZCBzaW5jZQorICogaXQgd2FzIGxhc3QgY2xlYXJlZCwgYW5kIHplcm8gaW4gYWxsIG90aGVyIGNhc2VzIChpbmNsdWRpbmcgZXJyb3JzKSAqLworc3RhdGljIGludAorb3Y1MXhfY2hlY2tfc25hcHNob3Qoc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaW50IHJldCwgc3RhdHVzID0gMDsKKworCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxMSkgeworCQlyZXQgPSByZWdfcihvdiwgUjUxeF9TWVNfU05BUCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQllcnIoIkVycm9yIGNoZWNraW5nIHNuc3BzaG90IHN0YXR1cyAoJWQpIiwgcmV0KTsKKwkJfSBlbHNlIGlmIChyZXQgJiAweDA4KSB7CisJCQlzdGF0dXMgPSAxOworCQl9CisJfSBlbHNlIGlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgeworCQl3YXJuKCJzbmFwc2hvdCBjaGVjayBub3Qgc3VwcG9ydGVkIHlldCBvbiBPVjUxOCgrKSIpOworCX0gZWxzZSB7CisJCWVycigiY2hlY2sgc25hcDogaW52YWxpZCBicmlkZ2UgdHlwZSIpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisjZW5kaWYKKworLyogVGhpcyBkb2VzIGFuIGluaXRpYWwgcmVzZXQgb2YgYW4gT21uaVZpc2lvbiBzZW5zb3IgYW5kIGVuc3VyZXMgdGhhdCBJMkMKKyAqIGlzIHN5bmNocm9uaXplZC4gUmV0dXJucyA8MCBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIGludAoraW5pdF9vdl9zZW5zb3Ioc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaW50IGksIHN1Y2Nlc3M7CisKKwkvKiBSZXNldCB0aGUgc2Vuc29yICovCisJaWYgKGkyY193KG92LCAweDEyLCAweDgwKSA8IDApCisJCXJldHVybiAtRUlPOworCisJLyogV2FpdCBmb3IgaXQgdG8gaW5pdGlhbGl6ZSAqLworCW1zbGVlcCgxNTApOworCisJZm9yIChpID0gMCwgc3VjY2VzcyA9IDA7IGkgPCBpMmNfZGV0ZWN0X3RyaWVzICYmICFzdWNjZXNzOyBpKyspIHsKKwkJaWYgKChpMmNfcihvdiwgT1Y3NjEwX1JFR19JRF9ISUdIKSA9PSAweDdGKSAmJgorCQkgICAgKGkyY19yKG92LCBPVjc2MTBfUkVHX0lEX0xPVykgPT0gMHhBMikpIHsKKwkJCXN1Y2Nlc3MgPSAxOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBSZXNldCB0aGUgc2Vuc29yICovCisJCWlmIChpMmNfdyhvdiwgMHgxMiwgMHg4MCkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCS8qIFdhaXQgZm9yIGl0IHRvIGluaXRpYWxpemUgKi8KKwkJbXNsZWVwKDE1MCk7CisJCS8qIER1bW15IHJlYWQgdG8gc3luYyBJMkMgKi8KKwkJaWYgKGkyY19yKG92LCAweDAwKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoIXN1Y2Nlc3MpCisJCXJldHVybiAtRUlPOworCisJUERFQlVHKDEsICJJMkMgc3luY2VkIGluICVkIGF0dGVtcHQocykiLCBpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitvdjUxMV9zZXRfcGFja2V0X3NpemUoc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCBzaXplKQoreworCWludCBhbHQsIG11bHQ7CisKKwlpZiAob3Y1MXhfc3RvcChvdikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCW11bHQgPSBzaXplID4+IDU7CisKKwlpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MTEpIHsKKwkJaWYgKHNpemUgPT0gMCkKKwkJCWFsdCA9IE9WNTExX0FMVF9TSVpFXzA7CisJCWVsc2UgaWYgKHNpemUgPT0gMjU3KQorCQkJYWx0ID0gT1Y1MTFfQUxUX1NJWkVfMjU3OworCQllbHNlIGlmIChzaXplID09IDUxMykKKwkJCWFsdCA9IE9WNTExX0FMVF9TSVpFXzUxMzsKKwkJZWxzZSBpZiAoc2l6ZSA9PSA3NjkpCisJCQlhbHQgPSBPVjUxMV9BTFRfU0laRV83Njk7CisJCWVsc2UgaWYgKHNpemUgPT0gOTkzKQorCQkJYWx0ID0gT1Y1MTFfQUxUX1NJWkVfOTkzOworCQllbHNlIHsKKwkJCWVycigiU2V0IHBhY2tldCBzaXplOiBpbnZhbGlkIHNpemUgKCVkKSIsIHNpemUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgaWYgKG92LT5icmlkZ2UgPT0gQlJHX09WNTExUExVUykgeworCQlpZiAoc2l6ZSA9PSAwKQorCQkJYWx0ID0gT1Y1MTFQTFVTX0FMVF9TSVpFXzA7CisJCWVsc2UgaWYgKHNpemUgPT0gMzMpCisJCQlhbHQgPSBPVjUxMVBMVVNfQUxUX1NJWkVfMzM7CisJCWVsc2UgaWYgKHNpemUgPT0gMTI5KQorCQkJYWx0ID0gT1Y1MTFQTFVTX0FMVF9TSVpFXzEyOTsKKwkJZWxzZSBpZiAoc2l6ZSA9PSAyNTcpCisJCQlhbHQgPSBPVjUxMVBMVVNfQUxUX1NJWkVfMjU3OworCQllbHNlIGlmIChzaXplID09IDM4NSkKKwkJCWFsdCA9IE9WNTExUExVU19BTFRfU0laRV8zODU7CisJCWVsc2UgaWYgKHNpemUgPT0gNTEzKQorCQkJYWx0ID0gT1Y1MTFQTFVTX0FMVF9TSVpFXzUxMzsKKwkJZWxzZSBpZiAoc2l6ZSA9PSA3NjkpCisJCQlhbHQgPSBPVjUxMVBMVVNfQUxUX1NJWkVfNzY5OworCQllbHNlIGlmIChzaXplID09IDk2MSkKKwkJCWFsdCA9IE9WNTExUExVU19BTFRfU0laRV85NjE7CisJCWVsc2UgeworCQkJZXJyKCJTZXQgcGFja2V0IHNpemU6IGludmFsaWQgc2l6ZSAoJWQpIiwgc2l6ZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSB7CisJCWVycigiU2V0IHBhY2tldCBzaXplOiBJbnZhbGlkIGJyaWRnZSB0eXBlIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCVBERUJVRygzLCAiJWQsIG11bHQ9JWQsIGFsdD0lZCIsIHNpemUsIG11bHQsIGFsdCk7CisKKwlpZiAocmVnX3cob3YsIFI1MXhfRklGT19QU0laRSwgbXVsdCkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCWlmICh1c2Jfc2V0X2ludGVyZmFjZShvdi0+ZGV2LCBvdi0+aWZhY2UsIGFsdCkgPCAwKSB7CisJCWVycigiU2V0IHBhY2tldCBzaXplOiBzZXQgaW50ZXJmYWNlIGVycm9yIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKG92NTF4X3Jlc2V0KG92LCBPVjUxMV9SRVNFVF9OT1JFR1MpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlvdi0+cGFja2V0X3NpemUgPSBzaXplOworCisJaWYgKG92NTF4X3Jlc3RhcnQob3YpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworLyogTm90ZTogVW5saWtlIHRoZSBPVjUxMS9PVjUxMSssIHRoZSBzaXplIGFyZ3VtZW50IGRvZXMgTk9UIGluY2x1ZGUgdGhlCisgKiBvcHRpb25hbCBwYWNrZXQgbnVtYmVyIGJ5dGUuIFRoZSBhY3R1YWwgc2l6ZSAqaXMqIHN0b3JlZCBpbiBvdi0+cGFja2V0X3NpemUsCisgKiB0aG91Z2guICovCitzdGF0aWMgaW50CitvdjUxOF9zZXRfcGFja2V0X3NpemUoc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCBzaXplKQoreworCWludCBhbHQ7CisKKwlpZiAob3Y1MXhfc3RvcChvdikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgeworCQlpZiAoc2l6ZSA9PSAwKQorCQkJYWx0ID0gT1Y1MThfQUxUX1NJWkVfMDsKKwkJZWxzZSBpZiAoc2l6ZSA9PSAxMjgpCisJCQlhbHQgPSBPVjUxOF9BTFRfU0laRV8xMjg7CisJCWVsc2UgaWYgKHNpemUgPT0gMjU2KQorCQkJYWx0ID0gT1Y1MThfQUxUX1NJWkVfMjU2OworCQllbHNlIGlmIChzaXplID09IDM4NCkKKwkJCWFsdCA9IE9WNTE4X0FMVF9TSVpFXzM4NDsKKwkJZWxzZSBpZiAoc2l6ZSA9PSA1MTIpCisJCQlhbHQgPSBPVjUxOF9BTFRfU0laRV81MTI7CisJCWVsc2UgaWYgKHNpemUgPT0gNjQwKQorCQkJYWx0ID0gT1Y1MThfQUxUX1NJWkVfNjQwOworCQllbHNlIGlmIChzaXplID09IDc2OCkKKwkJCWFsdCA9IE9WNTE4X0FMVF9TSVpFXzc2ODsKKwkJZWxzZSBpZiAoc2l6ZSA9PSA4OTYpCisJCQlhbHQgPSBPVjUxOF9BTFRfU0laRV84OTY7CisJCWVsc2UgeworCQkJZXJyKCJTZXQgcGFja2V0IHNpemU6IGludmFsaWQgc2l6ZSAoJWQpIiwgc2l6ZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSB7CisJCWVycigiU2V0IHBhY2tldCBzaXplOiBJbnZhbGlkIGJyaWRnZSB0eXBlIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCVBERUJVRygzLCAiJWQsIGFsdD0lZCIsIHNpemUsIGFsdCk7CisKKwlvdi0+cGFja2V0X3NpemUgPSBzaXplOworCWlmIChzaXplID4gMCkgeworCQkvKiBQcm9ncmFtIElTTyBGSUZPIHNpemUgcmVnIChwYWNrZXQgbnVtYmVyIGlzbid0IGluY2x1ZGVkKSAqLworCQlvdjUxOF9yZWdfdzMyKG92LCAweDMwLCBzaXplLCAyKTsKKworCQlpZiAob3YtPnBhY2tldF9udW1iZXJpbmcpCisJCQkrK292LT5wYWNrZXRfc2l6ZTsKKwl9CisKKwlpZiAodXNiX3NldF9pbnRlcmZhY2Uob3YtPmRldiwgb3YtPmlmYWNlLCBhbHQpIDwgMCkgeworCQllcnIoIlNldCBwYWNrZXQgc2l6ZTogc2V0IGludGVyZmFjZSBlcnJvciIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIHN0cmVhbSAqLworCWlmIChyZWdfdyhvdiwgMHgyZiwgMHg4MCkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChvdjUxeF9yZXN0YXJ0KG92KSA8IDApCisJCXJldHVybiAtRUlPOworCisJaWYgKG92NTF4X3Jlc2V0KG92LCBPVjUxMV9SRVNFVF9OT1JFR1MpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworLyogVXBsb2FkIGNvbXByZXNzaW9uIHBhcmFtcyBhbmQgcXVhbnRpemF0aW9uIHRhYmxlcy4gUmV0dXJucyAwIGZvciBzdWNjZXNzLiAqLworc3RhdGljIGludAorb3Y1MTFfaW5pdF9jb21wcmVzc2lvbihzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlpbnQgcmMgPSAwOworCisJaWYgKCFvdi0+Y29tcHJlc3NfaW5pdGVkKSB7CisJCXJlZ193KG92LCAweDcwLCBwaHkpOworCQlyZWdfdyhvdiwgMHg3MSwgcGh1dik7CisJCXJlZ193KG92LCAweDcyLCBwdnkpOworCQlyZWdfdyhvdiwgMHg3MywgcHZ1dik7CisJCXJlZ193KG92LCAweDc0LCBxaHkpOworCQlyZWdfdyhvdiwgMHg3NSwgcWh1dik7CisJCXJlZ193KG92LCAweDc2LCBxdnkpOworCQlyZWdfdyhvdiwgMHg3NywgcXZ1dik7CisKKwkJaWYgKG92NTExX3VwbG9hZF9xdWFuX3RhYmxlcyhvdikgPCAwKSB7CisJCQllcnIoIkVycm9yIHVwbG9hZGluZyBxdWFudGl6YXRpb24gdGFibGVzIik7CisJCQlyYyA9IC1FSU87CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCW92LT5jb21wcmVzc19pbml0ZWQgPSAxOworb3V0OgorCXJldHVybiByYzsKK30KKworLyogVXBsb2FkIGNvbXByZXNzaW9uIHBhcmFtcyBhbmQgcXVhbnRpemF0aW9uIHRhYmxlcy4gUmV0dXJucyAwIGZvciBzdWNjZXNzLiAqLworc3RhdGljIGludAorb3Y1MThfaW5pdF9jb21wcmVzc2lvbihzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlpbnQgcmMgPSAwOworCisJaWYgKCFvdi0+Y29tcHJlc3NfaW5pdGVkKSB7CisJCWlmIChvdjUxOF91cGxvYWRfcXVhbl90YWJsZXMob3YpIDwgMCkgeworCQkJZXJyKCJFcnJvciB1cGxvYWRpbmcgcXVhbnRpemF0aW9uIHRhYmxlcyIpOworCQkJcmMgPSAtRUlPOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlvdi0+Y29tcHJlc3NfaW5pdGVkID0gMTsKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFNldHMgc2Vuc29yJ3MgY29udHJhc3Qgc2V0dGluZyB0byAidmFsIiAqLworc3RhdGljIGludAorc2Vuc29yX3NldF9jb250cmFzdChzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgc2hvcnQgdmFsKQoreworCWludCByYzsKKworCVBERUJVRygzLCAiJWQiLCB2YWwpOworCisJaWYgKG92LT5zdG9wX2R1cmluZ19zZXQpCisJCWlmIChvdjUxeF9zdG9wKG92KSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKworCXN3aXRjaCAob3YtPnNlbnNvcikgeworCWNhc2UgU0VOX09WNzYxMDoKKwljYXNlIFNFTl9PVjY2MjA6CisJeworCQlyYyA9IGkyY193KG92LCBPVjc2MTBfUkVHX0NOVCwgdmFsID4+IDgpOworCQlpZiAocmMgPCAwKQorCQkJZ290byBvdXQ7CisJCWJyZWFrOworCX0KKwljYXNlIFNFTl9PVjY2MzA6CisJeworCQlyYyA9IGkyY193X21hc2sob3YsIE9WNzYxMF9SRUdfQ05ULCB2YWwgPj4gMTIsIDB4MGYpOworCQlpZiAocmMgPCAwKQorCQkJZ290byBvdXQ7CisJCWJyZWFrOworCX0KKwljYXNlIFNFTl9PVjc2MjA6CisJeworCQl1bnNpZ25lZCBjaGFyIGN0YWJbXSA9IHsKKwkJCTB4MDEsIDB4MDUsIDB4MDksIDB4MTEsIDB4MTUsIDB4MzUsIDB4MzcsIDB4NTcsCisJCQkweDViLCAweGE1LCAweGE3LCAweGM3LCAweGM5LCAweGNmLCAweGVmLCAweGZmCisJCX07CisKKwkJLyogVXNlIFkgZ2FtbWEgY29udHJvbCBpbnN0ZWFkLiBCaXQgMCBlbmFibGVzIGl0LiAqLworCQlyYyA9IGkyY193KG92LCAweDY0LCBjdGFiW3ZhbD4+MTJdKTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gb3V0OworCQlicmVhazsKKwl9CisJY2FzZSBTRU5fU0FBNzExMUE6CisJeworCQlyYyA9IGkyY193KG92LCAweDBiLCB2YWwgPj4gOSk7CisJCWlmIChyYyA8IDApCisJCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJeworCQlQREVCVUcoMywgIlVuc3VwcG9ydGVkIHdpdGggdGhpcyBzZW5zb3IiKTsKKwkJcmMgPSAtRVBFUk07CisJCWdvdG8gb3V0OworCX0KKwl9CisKKwlyYyA9IDA7CQkvKiBTdWNjZXNzICovCisJb3YtPmNvbnRyYXN0ID0gdmFsOworb3V0OgorCWlmIChvdjUxeF9yZXN0YXJ0KG92KSA8IDApCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIHJjOworfQorCisvKiBHZXRzIHNlbnNvcidzIGNvbnRyYXN0IHNldHRpbmcgKi8KK3N0YXRpYyBpbnQKK3NlbnNvcl9nZXRfY29udHJhc3Qoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIHNob3J0ICp2YWwpCit7CisJaW50IHJjOworCisJc3dpdGNoIChvdi0+c2Vuc29yKSB7CisJY2FzZSBTRU5fT1Y3NjEwOgorCWNhc2UgU0VOX09WNjYyMDoKKwkJcmMgPSBpMmNfcihvdiwgT1Y3NjEwX1JFR19DTlQpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCQllbHNlCisJCQkqdmFsID0gcmMgPDwgODsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y2NjMwOgorCQlyYyA9IGkyY19yKG92LCBPVjc2MTBfUkVHX0NOVCk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisJCWVsc2UKKwkJCSp2YWwgPSByYyA8PCAxMjsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y3NjIwOgorCQkvKiBVc2UgWSBnYW1tYSByZWcgaW5zdGVhZC4gQml0IDAgaXMgdGhlIGVuYWJsZSBiaXQuICovCisJCXJjID0gaTJjX3Iob3YsIDB4NjQpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCQllbHNlCisJCQkqdmFsID0gKHJjICYgMHhmZSkgPDwgODsKKwkJYnJlYWs7CisJY2FzZSBTRU5fU0FBNzExMUE6CisJCSp2YWwgPSBvdi0+Y29udHJhc3Q7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVBERUJVRygzLCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCVBERUJVRygzLCAiJWQiLCAqdmFsKTsKKwlvdi0+Y29udHJhc3QgPSAqdmFsOworCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFNldHMgc2Vuc29yJ3MgYnJpZ2h0bmVzcyBzZXR0aW5nIHRvICJ2YWwiICovCitzdGF0aWMgaW50CitzZW5zb3Jfc2V0X2JyaWdodG5lc3Moc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIHNob3J0IHZhbCkKK3sKKwlpbnQgcmM7CisKKwlQREVCVUcoNCwgIiVkIiwgdmFsKTsKKworCWlmIChvdi0+c3RvcF9kdXJpbmdfc2V0KQorCQlpZiAob3Y1MXhfc3RvcChvdikgPCAwKQorCQkJcmV0dXJuIC1FSU87CisKKwlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKKwljYXNlIFNFTl9PVjc2MTA6CisJY2FzZSBTRU5fT1Y3NkJFOgorCWNhc2UgU0VOX09WNjYyMDoKKwljYXNlIFNFTl9PVjY2MzA6CisJCXJjID0gaTJjX3cob3YsIE9WNzYxMF9SRUdfQlJULCB2YWwgPj4gOCk7CisJCWlmIChyYyA8IDApCisJCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y3NjIwOgorCQkvKiA3NjIwIGRvZXNuJ3QgbGlrZSBtYW51YWwgY2hhbmdlcyB3aGVuIGluIGF1dG8gbW9kZSAqLworCQlpZiAoIW92LT5hdXRvX2JydCkgeworCQkJcmMgPSBpMmNfdyhvdiwgT1Y3NjEwX1JFR19CUlQsIHZhbCA+PiA4KTsKKwkJCWlmIChyYyA8IDApCisJCQkJZ290byBvdXQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTRU5fU0FBNzExMUE6CisJCXJjID0gaTJjX3cob3YsIDB4MGEsIHZhbCA+PiA4KTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gb3V0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlQREVCVUcoMywgIlVuc3VwcG9ydGVkIHdpdGggdGhpcyBzZW5zb3IiKTsKKwkJcmMgPSAtRVBFUk07CisJCWdvdG8gb3V0OworCX0KKworCXJjID0gMDsJCS8qIFN1Y2Nlc3MgKi8KKwlvdi0+YnJpZ2h0bmVzcyA9IHZhbDsKK291dDoKKwlpZiAob3Y1MXhfcmVzdGFydChvdikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiByYzsKK30KKworLyogR2V0cyBzZW5zb3IncyBicmlnaHRuZXNzIHNldHRpbmcgKi8KK3N0YXRpYyBpbnQKK3NlbnNvcl9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgc2hvcnQgKnZhbCkKK3sKKwlpbnQgcmM7CisKKwlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKKwljYXNlIFNFTl9PVjc2MTA6CisJY2FzZSBTRU5fT1Y3NkJFOgorCWNhc2UgU0VOX09WNzYyMDoKKwljYXNlIFNFTl9PVjY2MjA6CisJY2FzZSBTRU5fT1Y2NjMwOgorCQlyYyA9IGkyY19yKG92LCBPVjc2MTBfUkVHX0JSVCk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisJCWVsc2UKKwkJCSp2YWwgPSByYyA8PCA4OworCQlicmVhazsKKwljYXNlIFNFTl9TQUE3MTExQToKKwkJKnZhbCA9IG92LT5icmlnaHRuZXNzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlQREVCVUcoMywgIlVuc3VwcG9ydGVkIHdpdGggdGhpcyBzZW5zb3IiKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlQREVCVUcoMywgIiVkIiwgKnZhbCk7CisJb3YtPmJyaWdodG5lc3MgPSAqdmFsOworCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFNldHMgc2Vuc29yJ3Mgc2F0dXJhdGlvbiAoY29sb3IgaW50ZW5zaXR5KSBzZXR0aW5nIHRvICJ2YWwiICovCitzdGF0aWMgaW50CitzZW5zb3Jfc2V0X3NhdHVyYXRpb24oc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIHNob3J0IHZhbCkKK3sKKwlpbnQgcmM7CisKKwlQREVCVUcoMywgIiVkIiwgdmFsKTsKKworCWlmIChvdi0+c3RvcF9kdXJpbmdfc2V0KQorCQlpZiAob3Y1MXhfc3RvcChvdikgPCAwKQorCQkJcmV0dXJuIC1FSU87CisKKwlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKKwljYXNlIFNFTl9PVjc2MTA6CisJY2FzZSBTRU5fT1Y3NkJFOgorCWNhc2UgU0VOX09WNjYyMDoKKwljYXNlIFNFTl9PVjY2MzA6CisJCXJjID0gaTJjX3cob3YsIE9WNzYxMF9SRUdfU0FULCB2YWwgPj4gOCk7CisJCWlmIChyYyA8IDApCisJCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y3NjIwOgorLy8JCS8qIFVzZSBVViBnYW1tYSBjb250cm9sIGluc3RlYWQuIEJpdHMgMCAmIDcgYXJlIHJlc2VydmVkLiAqLworLy8JCXJjID0gb3ZfaTJjX3dyaXRlKG92LT5kZXYsIDB4NjIsICh2YWwgPj4gOSkgJiAweDdlKTsKKy8vCQlpZiAocmMgPCAwKQorLy8JCQlnb3RvIG91dDsKKwkJcmMgPSBpMmNfdyhvdiwgT1Y3NjEwX1JFR19TQVQsIHZhbCA+PiA4KTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gb3V0OworCQlicmVhazsKKwljYXNlIFNFTl9TQUE3MTExQToKKwkJcmMgPSBpMmNfdyhvdiwgMHgwYywgdmFsID4+IDkpOworCQlpZiAocmMgPCAwKQorCQkJZ290byBvdXQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVBERUJVRygzLCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOworCQlyYyA9IC1FUEVSTTsKKwkJZ290byBvdXQ7CisJfQorCisJcmMgPSAwOwkJLyogU3VjY2VzcyAqLworCW92LT5jb2xvdXIgPSB2YWw7CitvdXQ6CisJaWYgKG92NTF4X3Jlc3RhcnQob3YpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qIEdldHMgc2Vuc29yJ3Mgc2F0dXJhdGlvbiAoY29sb3IgaW50ZW5zaXR5KSBzZXR0aW5nICovCitzdGF0aWMgaW50CitzZW5zb3JfZ2V0X3NhdHVyYXRpb24oc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIHNob3J0ICp2YWwpCit7CisJaW50IHJjOworCisJc3dpdGNoIChvdi0+c2Vuc29yKSB7CisJY2FzZSBTRU5fT1Y3NjEwOgorCWNhc2UgU0VOX09WNzZCRToKKwljYXNlIFNFTl9PVjY2MjA6CisJY2FzZSBTRU5fT1Y2NjMwOgorCQlyYyA9IGkyY19yKG92LCBPVjc2MTBfUkVHX1NBVCk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisJCWVsc2UKKwkJCSp2YWwgPSByYyA8PCA4OworCQlicmVhazsKKwljYXNlIFNFTl9PVjc2MjA6CisvLwkJLyogVXNlIFVWIGdhbW1hIHJlZyBpbnN0ZWFkLiBCaXRzIDAgJiA3IGFyZSByZXNlcnZlZC4gKi8KKy8vCQlyYyA9IGkyY19yKG92LCAweDYyKTsKKy8vCQlpZiAocmMgPCAwKQorLy8JCQlyZXR1cm4gcmM7CisvLwkJZWxzZQorLy8JCQkqdmFsID0gKHJjICYgMHg3ZSkgPDwgOTsKKwkJcmMgPSBpMmNfcihvdiwgT1Y3NjEwX1JFR19TQVQpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCQllbHNlCisJCQkqdmFsID0gcmMgPDwgODsKKwkJYnJlYWs7CisJY2FzZSBTRU5fU0FBNzExMUE6CisJCSp2YWwgPSBvdi0+Y29sb3VyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlQREVCVUcoMywgIlVuc3VwcG9ydGVkIHdpdGggdGhpcyBzZW5zb3IiKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlQREVCVUcoMywgIiVkIiwgKnZhbCk7CisJb3YtPmNvbG91ciA9ICp2YWw7CisKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogU2V0cyBzZW5zb3IncyBodWUgKHJlZC9ibHVlIGJhbGFuY2UpIHNldHRpbmcgdG8gInZhbCIgKi8KK3N0YXRpYyBpbnQKK3NlbnNvcl9zZXRfaHVlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBzaG9ydCB2YWwpCit7CisJaW50IHJjOworCisJUERFQlVHKDMsICIlZCIsIHZhbCk7CisKKwlpZiAob3YtPnN0b3BfZHVyaW5nX3NldCkKKwkJaWYgKG92NTF4X3N0b3Aob3YpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCisJc3dpdGNoIChvdi0+c2Vuc29yKSB7CisJY2FzZSBTRU5fT1Y3NjEwOgorCWNhc2UgU0VOX09WNjYyMDoKKwljYXNlIFNFTl9PVjY2MzA6CisJCXJjID0gaTJjX3cob3YsIE9WNzYxMF9SRUdfUkVELCAweEZGIC0gKHZhbCA+PiA4KSk7CisJCWlmIChyYyA8IDApCisJCQlnb3RvIG91dDsKKworCQlyYyA9IGkyY193KG92LCBPVjc2MTBfUkVHX0JMVUUsIHZhbCA+PiA4KTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gb3V0OworCQlicmVhazsKKwljYXNlIFNFTl9PVjc2MjA6CisvLyBIdWUgY29udHJvbCBpcyBjYXVzaW5nIHByb2JsZW1zLiBJIHdpbGwgZW5hYmxlIGl0IG9uY2UgaXQncyBmaXhlZC4KKyNpZiAwCisJCXJjID0gaTJjX3cob3YsIDB4N2EsICh1bnNpZ25lZCBjaGFyKSh2YWwgPj4gOCkgKyAweGIpOworCQlpZiAocmMgPCAwKQorCQkJZ290byBvdXQ7CisKKwkJcmMgPSBpMmNfdyhvdiwgMHg3OSwgKHVuc2lnbmVkIGNoYXIpKHZhbCA+PiA4KSArIDB4Yik7CisJCWlmIChyYyA8IDApCisJCQlnb3RvIG91dDsKKyNlbmRpZgorCQlicmVhazsKKwljYXNlIFNFTl9TQUE3MTExQToKKwkJcmMgPSBpMmNfdyhvdiwgMHgwZCwgKHZhbCArIDMyNzY4KSA+PiA4KTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gb3V0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlQREVCVUcoMywgIlVuc3VwcG9ydGVkIHdpdGggdGhpcyBzZW5zb3IiKTsKKwkJcmMgPSAtRVBFUk07CisJCWdvdG8gb3V0OworCX0KKworCXJjID0gMDsJCS8qIFN1Y2Nlc3MgKi8KKwlvdi0+aHVlID0gdmFsOworb3V0OgorCWlmIChvdjUxeF9yZXN0YXJ0KG92KSA8IDApCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIHJjOworfQorCisvKiBHZXRzIHNlbnNvcidzIGh1ZSAocmVkL2JsdWUgYmFsYW5jZSkgc2V0dGluZyAqLworc3RhdGljIGludAorc2Vuc29yX2dldF9odWUoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIHNob3J0ICp2YWwpCit7CisJaW50IHJjOworCisJc3dpdGNoIChvdi0+c2Vuc29yKSB7CisJY2FzZSBTRU5fT1Y3NjEwOgorCWNhc2UgU0VOX09WNjYyMDoKKwljYXNlIFNFTl9PVjY2MzA6CisJCXJjID0gaTJjX3Iob3YsIE9WNzYxMF9SRUdfQkxVRSk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisJCWVsc2UKKwkJCSp2YWwgPSByYyA8PCA4OworCQlicmVhazsKKwljYXNlIFNFTl9PVjc2MjA6CisJCXJjID0gaTJjX3Iob3YsIDB4N2EpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCQllbHNlCisJCQkqdmFsID0gcmMgPDwgODsKKwkJYnJlYWs7CisJY2FzZSBTRU5fU0FBNzExMUE6CisJCSp2YWwgPSBvdi0+aHVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlQREVCVUcoMywgIlVuc3VwcG9ydGVkIHdpdGggdGhpcyBzZW5zb3IiKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlQREVCVUcoMywgIiVkIiwgKnZhbCk7CisJb3YtPmh1ZSA9ICp2YWw7CisKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludAorc2Vuc29yX3NldF9waWN0dXJlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcCkKK3sKKwlpbnQgcmM7CisKKwlQREVCVUcoNCwgInNlbnNvcl9zZXRfcGljdHVyZSIpOworCisJb3YtPndoaXRlbmVzcyA9IHAtPndoaXRlbmVzczsKKworCS8qIERvbid0IHJldHVybiBlcnJvciBpZiBhIHNldHRpbmcgaXMgdW5zdXBwb3J0ZWQsIG9yIHJlc3Qgb2Ygc2V0dGluZ3MKKyAgICAgICAgICogd2lsbCBub3QgYmUgcGVyZm9ybWVkICovCisKKwlyYyA9IHNlbnNvcl9zZXRfY29udHJhc3Qob3YsIHAtPmNvbnRyYXN0KTsKKwlpZiAoRkFUQUxfRVJST1IocmMpKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9IHNlbnNvcl9zZXRfYnJpZ2h0bmVzcyhvdiwgcC0+YnJpZ2h0bmVzcyk7CisJaWYgKEZBVEFMX0VSUk9SKHJjKSkKKwkJcmV0dXJuIHJjOworCisJcmMgPSBzZW5zb3Jfc2V0X3NhdHVyYXRpb24ob3YsIHAtPmNvbG91cik7CisJaWYgKEZBVEFMX0VSUk9SKHJjKSkKKwkJcmV0dXJuIHJjOworCisJcmMgPSBzZW5zb3Jfc2V0X2h1ZShvdiwgcC0+aHVlKTsKKwlpZiAoRkFUQUxfRVJST1IocmMpKQorCQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc2Vuc29yX2dldF9waWN0dXJlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcCkKK3sKKwlpbnQgcmM7CisKKwlQREVCVUcoNCwgInNlbnNvcl9nZXRfcGljdHVyZSIpOworCisJLyogRG9uJ3QgcmV0dXJuIGVycm9yIGlmIGEgc2V0dGluZyBpcyB1bnN1cHBvcnRlZCwgb3IgcmVzdCBvZiBzZXR0aW5ncworICAgICAgICAgKiB3aWxsIG5vdCBiZSBwZXJmb3JtZWQgKi8KKworCXJjID0gc2Vuc29yX2dldF9jb250cmFzdChvdiwgJihwLT5jb250cmFzdCkpOworCWlmIChGQVRBTF9FUlJPUihyYykpCisJCXJldHVybiByYzsKKworCXJjID0gc2Vuc29yX2dldF9icmlnaHRuZXNzKG92LCAmKHAtPmJyaWdodG5lc3MpKTsKKwlpZiAoRkFUQUxfRVJST1IocmMpKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9IHNlbnNvcl9nZXRfc2F0dXJhdGlvbihvdiwgJihwLT5jb2xvdXIpKTsKKwlpZiAoRkFUQUxfRVJST1IocmMpKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9IHNlbnNvcl9nZXRfaHVlKG92LCAmKHAtPmh1ZSkpOworCWlmIChGQVRBTF9FUlJPUihyYykpCisJCXJldHVybiByYzsKKworCXAtPndoaXRlbmVzcyA9IDEwNSA8PCA4OworCisJcmV0dXJuIDA7Cit9CisKKyNpZiAwCisvLyBGSVhNRTogRXhwb3N1cmUgcmFuZ2UgaXMgb25seSAweDAwLTB4N2YgaW4gaW50ZXJsYWNlIG1vZGUKKy8qIFNldHMgY3VycmVudCBleHBvc3VyZSBmb3Igc2Vuc29yLiBUaGlzIG9ubHkgaGFzIGFuIGVmZmVjdCBpZiBhdXRvLWV4cG9zdXJlCisgKiBpcyBvZmYgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitzZW5zb3Jfc2V0X2V4cG9zdXJlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBjaGFyIHZhbCkKK3sKKwlpbnQgcmM7CisKKwlQREVCVUcoMywgIiVkIiwgdmFsKTsKKworCWlmIChvdi0+c3RvcF9kdXJpbmdfc2V0KQorCQlpZiAob3Y1MXhfc3RvcChvdikgPCAwKQorCQkJcmV0dXJuIC1FSU87CisKKwlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKKwljYXNlIFNFTl9PVjY2MjA6CisJY2FzZSBTRU5fT1Y2NjMwOgorCWNhc2UgU0VOX09WNzYxMDoKKwljYXNlIFNFTl9PVjc2MjA6CisJY2FzZSBTRU5fT1Y3NkJFOgorCWNhc2UgU0VOX09WODYwMDoKKwkJcmMgPSBpMmNfdyhvdiwgMHgxMCwgdmFsKTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gb3V0OworCisJCWJyZWFrOworCWNhc2UgU0VOX0tTMDEyNzoKKwljYXNlIFNFTl9LUzAxMjdCOgorCWNhc2UgU0VOX1NBQTcxMTFBOgorCQlQREVCVUcoMywgIlVuc3VwcG9ydGVkIHdpdGggdGhpcyBzZW5zb3IiKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwlkZWZhdWx0OgorCQllcnIoIlNlbnNvciBub3Qgc3VwcG9ydGVkIGZvciBzZXRfZXhwb3N1cmUiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmMgPSAwOwkJLyogU3VjY2VzcyAqLworCW92LT5leHBvc3VyZSA9IHZhbDsKK291dDoKKwlpZiAob3Y1MXhfcmVzdGFydChvdikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiByYzsKK30KKyNlbmRpZgorCisvKiBHZXRzIGN1cnJlbnQgZXhwb3N1cmUgbGV2ZWwgZnJvbSBzZW5zb3IsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyB1bmRlcgorICogbWFudWFsIGNvbnRyb2wuICovCitzdGF0aWMgaW50CitzZW5zb3JfZ2V0X2V4cG9zdXJlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBjaGFyICp2YWwpCit7CisJaW50IHJjOworCisJc3dpdGNoIChvdi0+c2Vuc29yKSB7CisJY2FzZSBTRU5fT1Y3NjEwOgorCWNhc2UgU0VOX09WNjYyMDoKKwljYXNlIFNFTl9PVjY2MzA6CisJY2FzZSBTRU5fT1Y3NjIwOgorCWNhc2UgU0VOX09WNzZCRToKKwljYXNlIFNFTl9PVjg2MDA6CisJCXJjID0gaTJjX3Iob3YsIDB4MTApOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCQllbHNlCisJCQkqdmFsID0gcmM7CisJCWJyZWFrOworCWNhc2UgU0VOX0tTMDEyNzoKKwljYXNlIFNFTl9LUzAxMjdCOgorCWNhc2UgU0VOX1NBQTcxMTFBOgorCQl2YWwgPSBOVUxMOworCQlQREVCVUcoMywgIlVuc3VwcG9ydGVkIHdpdGggdGhpcyBzZW5zb3IiKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwlkZWZhdWx0OgorCQllcnIoIlNlbnNvciBub3Qgc3VwcG9ydGVkIGZvciBnZXRfZXhwb3N1cmUiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJUERFQlVHKDMsICIlZCIsICp2YWwpOworCW92LT5leHBvc3VyZSA9ICp2YWw7CisKKwlyZXR1cm4gMDsKK30KKworLyogVHVybnMgb24gb3Igb2ZmIHRoZSBMRUQuIE9ubHkgaGFzIGFuIGVmZmVjdCB3aXRoIE9WNTExKy9PVjUxOCgrKSAqLworc3RhdGljIHZvaWQKK292NTF4X2xlZF9jb250cm9sKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBpbnQgZW5hYmxlKQoreworCVBERUJVRyg0LCAiICglcykiLCBlbmFibGUgPyAidHVybiBvbiIgOiAidHVybiBvZmYiKTsKKworCWlmIChvdi0+YnJpZGdlID09IEJSR19PVjUxMVBMVVMpCisJCXJlZ193KG92LCBSNTExX1NZU19MRURfQ1RMLCBlbmFibGUgPyAxIDogMCk7CisJZWxzZSBpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpCisJCXJlZ193X21hc2sob3YsIFI1MThfR1BJT19PVVQsIGVuYWJsZSA/IDB4MDIgOiAweDAwLCAweDAyKTsKKworCXJldHVybjsKK30KKworLyogTWF0Y2hlcyB0aGUgc2Vuc29yJ3MgaW50ZXJuYWwgZnJhbWUgcmF0ZSB0byB0aGUgbGlnaHRpbmcgZnJlcXVlbmN5LgorICogVmFsaWQgZnJlcXVlbmNpZXMgYXJlOgorICoJNTAgLSA1MEh6LCBmb3IgRXVyb3BlYW4gYW5kIEFzaWFuIGxpZ2h0aW5nCisgKgk2MCAtIDYwSHosIGZvciBBbWVyaWNhbiBsaWdodGluZworICoKKyAqIFRlc3RlZCB3aXRoOiBPVjc2MTAsIE9WNzYyMCwgT1Y3NkJFLCBPVjY2MjAKKyAqIFVuc3VwcG9ydGVkOiBLUzAxMjcsIEtTMDEyN0IsIFNBQTcxMTFBCisgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCisgKi8KK3N0YXRpYyBpbnQKK3NlbnNvcl9zZXRfbGlnaHRfZnJlcShzdHJ1Y3QgdXNiX292NTExICpvdiwgaW50IGZyZXEpCit7CisJaW50IHNpeHR5OworCisJUERFQlVHKDQsICIlZCBIeiIsIGZyZXEpOworCisJaWYgKGZyZXEgPT0gNjApCisJCXNpeHR5ID0gMTsKKwllbHNlIGlmIChmcmVxID09IDUwKQorCQlzaXh0eSA9IDA7CisJZWxzZSB7CisJCWVycigiSW52YWxpZCBsaWdodCBmcmVxICglZCBIeikiLCBmcmVxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChvdi0+c2Vuc29yKSB7CisJY2FzZSBTRU5fT1Y3NjEwOgorCQlpMmNfd19tYXNrKG92LCAweDJhLCBzaXh0eT8weDAwOjB4ODAsIDB4ODApOworCQlpMmNfdyhvdiwgMHgyYiwgc2l4dHk/MHgwMDoweGFjKTsKKwkJaTJjX3dfbWFzayhvdiwgMHgxMywgMHgxMCwgMHgxMCk7CisJCWkyY193X21hc2sob3YsIDB4MTMsIDB4MDAsIDB4MTApOworCQlicmVhazsKKwljYXNlIFNFTl9PVjc2MjA6CisJY2FzZSBTRU5fT1Y3NkJFOgorCWNhc2UgU0VOX09WODYwMDoKKwkJaTJjX3dfbWFzayhvdiwgMHgyYSwgc2l4dHk/MHgwMDoweDgwLCAweDgwKTsKKwkJaTJjX3cob3YsIDB4MmIsIHNpeHR5PzB4MDA6MHhhYyk7CisJCWkyY193X21hc2sob3YsIDB4NzYsIDB4MDEsIDB4MDEpOworCQlicmVhazsKKwljYXNlIFNFTl9PVjY2MjA6CisJY2FzZSBTRU5fT1Y2NjMwOgorCQlpMmNfdyhvdiwgMHgyYiwgc2l4dHk/MHhhODoweDI4KTsKKwkJaTJjX3cob3YsIDB4MmEsIHNpeHR5PzB4ODQ6MHhhNCk7CisJCWJyZWFrOworCWNhc2UgU0VOX0tTMDEyNzoKKwljYXNlIFNFTl9LUzAxMjdCOgorCWNhc2UgU0VOX1NBQTcxMTFBOgorCQlQREVCVUcoNSwgIlVuc3VwcG9ydGVkIHdpdGggdGhpcyBzZW5zb3IiKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwlkZWZhdWx0OgorCQllcnIoIlNlbnNvciBub3Qgc3VwcG9ydGVkIGZvciBzZXRfbGlnaHRfZnJlcSIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlvdi0+bGlnaHRmcmVxID0gZnJlcTsKKworCXJldHVybiAwOworfQorCisvKiBJZiBlbmFibGUgaXMgdHJ1ZSwgdHVybiBvbiB0aGUgc2Vuc29yJ3MgYmFuZGluZyBmaWx0ZXIsIG90aGVyd2lzZSB0dXJuIGl0CisgKiBvZmYuIFRoaXMgZmlsdGVyIHRyaWVzIHRvIHJlZHVjZSB0aGUgcGF0dGVybiBvZiBob3Jpem9udGFsIGxpZ2h0L2RhcmsgYmFuZHMKKyAqIGNhdXNlZCBieSBzb21lICh1c3VhbGx5IGZsdW9yZXNjZW50KSBsaWdodGluZy4gVGhlIGxpZ2h0IGZyZXF1ZW5jeSBtdXN0IGJlCisgKiBzZXQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBlbmFibGluZyBpdCB3aXRoIG92NTF4X3NldF9saWdodF9mcmVxKCkuCisgKgorICogVGVzdGVkIHdpdGg6IE9WNzYxMCwgT1Y3NjIwLCBPVjc2QkUsIE9WNjYyMC4KKyAqIFVuc3VwcG9ydGVkOiBLUzAxMjcsIEtTMDEyN0IsIFNBQTcxMTFBCisgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCisgKi8KK3N0YXRpYyBpbnQKK3NlbnNvcl9zZXRfYmFuZGluZ19maWx0ZXIoc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCBlbmFibGUpCit7CisJaW50IHJjOworCisJUERFQlVHKDQsICIgKCVzKSIsIGVuYWJsZSA/ICJ0dXJuIG9uIiA6ICJ0dXJuIG9mZiIpOworCisJaWYgKG92LT5zZW5zb3IgPT0gU0VOX0tTMDEyNyB8fCBvdi0+c2Vuc29yID09IFNFTl9LUzAxMjdCCisJCXx8IG92LT5zZW5zb3IgPT0gU0VOX1NBQTcxMTFBKSB7CisJCVBERUJVRyg1LCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCXJjID0gaTJjX3dfbWFzayhvdiwgMHgyZCwgZW5hYmxlPzB4MDQ6MHgwMCwgMHgwNCk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJb3YtPmJhbmRmaWx0ID0gZW5hYmxlOworCisJcmV0dXJuIDA7Cit9CisKKy8qIElmIGVuYWJsZSBpcyB0cnVlLCB0dXJuIG9uIHRoZSBzZW5zb3IncyBhdXRvIGJyaWdodG5lc3MgY29udHJvbCwgb3RoZXJ3aXNlCisgKiB0dXJuIGl0IG9mZi4KKyAqCisgKiBVbnN1cHBvcnRlZDogS1MwMTI3LCBLUzAxMjdCLCBTQUE3MTExQQorICogUmV0dXJuczogMCBmb3Igc3VjY2VzcworICovCitzdGF0aWMgaW50CitzZW5zb3Jfc2V0X2F1dG9fYnJpZ2h0bmVzcyhzdHJ1Y3QgdXNiX292NTExICpvdiwgaW50IGVuYWJsZSkKK3sKKwlpbnQgcmM7CisKKwlQREVCVUcoNCwgIiAoJXMpIiwgZW5hYmxlID8gInR1cm4gb24iIDogInR1cm4gb2ZmIik7CisKKwlpZiAob3YtPnNlbnNvciA9PSBTRU5fS1MwMTI3IHx8IG92LT5zZW5zb3IgPT0gU0VOX0tTMDEyN0IKKwkJfHwgb3YtPnNlbnNvciA9PSBTRU5fU0FBNzExMUEpIHsKKwkJUERFQlVHKDUsICJVbnN1cHBvcnRlZCB3aXRoIHRoaXMgc2Vuc29yIik7CisJCXJldHVybiAtRVBFUk07CisJfQorCisJcmMgPSBpMmNfd19tYXNrKG92LCAweDJkLCBlbmFibGU/MHgxMDoweDAwLCAweDEwKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlvdi0+YXV0b19icnQgPSBlbmFibGU7CisKKwlyZXR1cm4gMDsKK30KKworLyogSWYgZW5hYmxlIGlzIHRydWUsIHR1cm4gb24gdGhlIHNlbnNvcidzIGF1dG8gZXhwb3N1cmUgY29udHJvbCwgb3RoZXJ3aXNlCisgKiB0dXJuIGl0IG9mZi4KKyAqCisgKiBVbnN1cHBvcnRlZDogS1MwMTI3LCBLUzAxMjdCLCBTQUE3MTExQQorICogUmV0dXJuczogMCBmb3Igc3VjY2VzcworICovCitzdGF0aWMgaW50CitzZW5zb3Jfc2V0X2F1dG9fZXhwb3N1cmUoc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCBlbmFibGUpCit7CisJUERFQlVHKDQsICIgKCVzKSIsIGVuYWJsZSA/ICJ0dXJuIG9uIiA6ICJ0dXJuIG9mZiIpOworCisJc3dpdGNoIChvdi0+c2Vuc29yKSB7CisJY2FzZSBTRU5fT1Y3NjEwOgorCQlpMmNfd19tYXNrKG92LCAweDI5LCBlbmFibGU/MHgwMDoweDgwLCAweDgwKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y2NjIwOgorCWNhc2UgU0VOX09WNzYyMDoKKwljYXNlIFNFTl9PVjc2QkU6CisJY2FzZSBTRU5fT1Y4NjAwOgorCQlpMmNfd19tYXNrKG92LCAweDEzLCBlbmFibGU/MHgwMToweDAwLCAweDAxKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y2NjMwOgorCQlpMmNfd19tYXNrKG92LCAweDI4LCBlbmFibGU/MHgwMDoweDEwLCAweDEwKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5fS1MwMTI3OgorCWNhc2UgU0VOX0tTMDEyN0I6CisJY2FzZSBTRU5fU0FBNzExMUE6CisJCVBERUJVRyg1LCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOworCQlyZXR1cm4gLUVQRVJNOworCWRlZmF1bHQ6CisJCWVycigiU2Vuc29yIG5vdCBzdXBwb3J0ZWQgZm9yIHNldF9hdXRvX2V4cG9zdXJlIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW92LT5hdXRvX2V4cCA9IGVuYWJsZTsKKworCXJldHVybiAwOworfQorCisvKiBNb2RpZmllcyB0aGUgc2Vuc29yJ3MgZXhwb3N1cmUgYWxnb3JpdGhtIHRvIGFsbG93IHByb3BlciBleHBvc3VyZSBvZiBvYmplY3RzCisgKiB0aGF0IGFyZSBpbGx1bWluYXRlZCBmcm9tIGJlaGluZC4KKyAqCisgKiBUZXN0ZWQgd2l0aDogT1Y2NjIwLCBPVjc2MjAKKyAqIFVuc3VwcG9ydGVkOiBPVjc2MTAsIE9WNzZCRSwgS1MwMTI3LCBLUzAxMjdCLCBTQUE3MTExQQorICogUmV0dXJuczogMCBmb3Igc3VjY2VzcworICovCitzdGF0aWMgaW50CitzZW5zb3Jfc2V0X2JhY2tsaWdodChzdHJ1Y3QgdXNiX292NTExICpvdiwgaW50IGVuYWJsZSkKK3sKKwlQREVCVUcoNCwgIiAoJXMpIiwgZW5hYmxlID8gInR1cm4gb24iIDogInR1cm4gb2ZmIik7CisKKwlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKKwljYXNlIFNFTl9PVjc2MjA6CisJY2FzZSBTRU5fT1Y4NjAwOgorCQlpMmNfd19tYXNrKG92LCAweDY4LCBlbmFibGU/MHhlMDoweGMwLCAweGUwKTsKKwkJaTJjX3dfbWFzayhvdiwgMHgyOSwgZW5hYmxlPzB4MDg6MHgwMCwgMHgwOCk7CisJCWkyY193X21hc2sob3YsIDB4MjgsIGVuYWJsZT8weDAyOjB4MDAsIDB4MDIpOworCQlicmVhazsKKwljYXNlIFNFTl9PVjY2MjA6CisJCWkyY193X21hc2sob3YsIDB4NGUsIGVuYWJsZT8weGUwOjB4YzAsIDB4ZTApOworCQlpMmNfd19tYXNrKG92LCAweDI5LCBlbmFibGU/MHgwODoweDAwLCAweDA4KTsKKwkJaTJjX3dfbWFzayhvdiwgMHgwZSwgZW5hYmxlPzB4ODA6MHgwMCwgMHg4MCk7CisJCWJyZWFrOworCWNhc2UgU0VOX09WNjYzMDoKKwkJaTJjX3dfbWFzayhvdiwgMHg0ZSwgZW5hYmxlPzB4ODA6MHg2MCwgMHhlMCk7CisJCWkyY193X21hc2sob3YsIDB4MjksIGVuYWJsZT8weDA4OjB4MDAsIDB4MDgpOworCQlpMmNfd19tYXNrKG92LCAweDI4LCBlbmFibGU/MHgwMjoweDAwLCAweDAyKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y3NjEwOgorCWNhc2UgU0VOX09WNzZCRToKKwljYXNlIFNFTl9LUzAxMjc6CisJY2FzZSBTRU5fS1MwMTI3QjoKKwljYXNlIFNFTl9TQUE3MTExQToKKwkJUERFQlVHKDUsICJVbnN1cHBvcnRlZCB3aXRoIHRoaXMgc2Vuc29yIik7CisJCXJldHVybiAtRVBFUk07CisJZGVmYXVsdDoKKwkJZXJyKCJTZW5zb3Igbm90IHN1cHBvcnRlZCBmb3Igc2V0X2JhY2tsaWdodCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlvdi0+YmFja2xpZ2h0ID0gZW5hYmxlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NlbnNvcl9zZXRfbWlycm9yKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBpbnQgZW5hYmxlKQoreworCVBERUJVRyg0LCAiICglcykiLCBlbmFibGUgPyAidHVybiBvbiIgOiAidHVybiBvZmYiKTsKKworCXN3aXRjaCAob3YtPnNlbnNvcikgeworCWNhc2UgU0VOX09WNjYyMDoKKwljYXNlIFNFTl9PVjY2MzA6CisJY2FzZSBTRU5fT1Y3NjEwOgorCWNhc2UgU0VOX09WNzYyMDoKKwljYXNlIFNFTl9PVjc2QkU6CisJY2FzZSBTRU5fT1Y4NjAwOgorCQlpMmNfd19tYXNrKG92LCAweDEyLCBlbmFibGU/MHg0MDoweDAwLCAweDQwKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5fS1MwMTI3OgorCWNhc2UgU0VOX0tTMDEyN0I6CisJY2FzZSBTRU5fU0FBNzExMUE6CisJCVBERUJVRyg1LCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOworCQlyZXR1cm4gLUVQRVJNOworCWRlZmF1bHQ6CisJCWVycigiU2Vuc29yIG5vdCBzdXBwb3J0ZWQgZm9yIHNldF9taXJyb3IiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJb3YtPm1pcnJvciA9IGVuYWJsZTsKKworCXJldHVybiAwOworfQorCisvKiBSZXR1cm5zIG51bWJlciBvZiBiaXRzIHBlciBwaXhlbCAocmVnYXJkbGVzcyBvZiB3aGVyZSB0aGV5IGFyZSBsb2NhdGVkOworICogcGxhbmFyIG9yIG5vdCksIG9yIHplcm8gZm9yIHVuc3VwcG9ydGVkIGZvcm1hdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK2dldF9kZXB0aChpbnQgcGFsZXR0ZSkKK3sKKwlzd2l0Y2ggKHBhbGV0dGUpIHsKKwljYXNlIFZJREVPX1BBTEVUVEVfR1JFWTogICAgcmV0dXJuIDg7CisJY2FzZSBWSURFT19QQUxFVFRFX1lVVjQyMDogIHJldHVybiAxMjsKKwljYXNlIFZJREVPX1BBTEVUVEVfWVVWNDIwUDogcmV0dXJuIDEyOyAvKiBQbGFuYXIgKi8KKwlkZWZhdWx0OgkJICAgIHJldHVybiAwOyAgLyogSW52YWxpZCBmb3JtYXQgKi8KKwl9Cit9CisKKy8qIEJ5dGVzIHBlciBmcmFtZS4gVXNlZCBieSByZWFkKCkuIFJldHVybiBvZiAwIGluZGljYXRlcyBlcnJvciAqLworc3RhdGljIGlubGluZSBsb25nIGludAorZ2V0X2ZyYW1lX2xlbmd0aChzdHJ1Y3Qgb3Y1MTFfZnJhbWUgKmZyYW1lKQoreworCWlmICghZnJhbWUpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuICgoZnJhbWUtPndpZHRoICogZnJhbWUtPmhlaWdodAorCQkJICogZ2V0X2RlcHRoKGZyYW1lLT5mb3JtYXQpKSA+PiAzKTsKK30KKworc3RhdGljIGludAorbW9kZV9pbml0X292X3NlbnNvcl9yZWdzKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisJCQkgaW50IG1vZGUsIGludCBzdWJfZmxhZywgaW50IHF2Z2EpCit7CisJaW50IGNsb2NrOworCisJLyoqKioqKioqIE1vZGUgKFZHQS9RVkdBKSBhbmQgc2Vuc29yIHNwZWNpZmljIHJlZ3MgKioqKioqKiovCisKKwlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKKwljYXNlIFNFTl9PVjc2MTA6CisJCWkyY193KG92LCAweDE0LCBxdmdhPzB4MjQ6MHgwNCk7CisvLyBGSVhNRTogRG9lcyB0aGlzIGltcHJvdmUgdGhlIGltYWdlIHF1YWxpdHkgb3IgZnJhbWUgcmF0ZT8KKyNpZiAwCisJCWkyY193X21hc2sob3YsIDB4MjgsIHF2Z2E/MHgwMDoweDIwLCAweDIwKTsKKwkJaTJjX3cob3YsIDB4MjQsIDB4MTApOworCQlpMmNfdyhvdiwgMHgyNSwgcXZnYT8weDQwOjB4OGEpOworCQlpMmNfdyhvdiwgMHgyZiwgcXZnYT8weDMwOjB4YjApOworCQlpMmNfdyhvdiwgMHgzNSwgcXZnYT8weDFjOjB4OWMpOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgU0VOX09WNzYyMDoKKy8vCQlpMmNfdyhvdiwgMHgyYiwgMHgwMCk7CisJCWkyY193KG92LCAweDE0LCBxdmdhPzB4YTQ6MHg4NCk7CisJCWkyY193X21hc2sob3YsIDB4MjgsIHF2Z2E/MHgwMDoweDIwLCAweDIwKTsKKwkJaTJjX3cob3YsIDB4MjQsIHF2Z2E/MHgyMDoweDNhKTsKKwkJaTJjX3cob3YsIDB4MjUsIHF2Z2E/MHgzMDoweDYwKTsKKwkJaTJjX3dfbWFzayhvdiwgMHgyZCwgcXZnYT8weDQwOjB4MDAsIDB4NDApOworCQlpMmNfd19tYXNrKG92LCAweDY3LCBxdmdhPzB4ZjA6MHg5MCwgMHhmMCk7CisJCWkyY193X21hc2sob3YsIDB4NzQsIHF2Z2E/MHgyMDoweDAwLCAweDIwKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y3NkJFOgorLy8JCWkyY193KG92LCAweDJiLCAweDAwKTsKKwkJaTJjX3cob3YsIDB4MTQsIHF2Z2E/MHhhNDoweDg0KTsKKy8vIEZJWE1FOiBFbmFibGUgdGhpcyBvbmNlIDc2MjBBRSB1c2VzIDc2MjAgaW5pdGlhbCBzZXR0aW5ncworI2lmIDAKKwkJaTJjX3dfbWFzayhvdiwgMHgyOCwgcXZnYT8weDAwOjB4MjAsIDB4MjApOworCQlpMmNfdyhvdiwgMHgyNCwgcXZnYT8weDIwOjB4M2EpOworCQlpMmNfdyhvdiwgMHgyNSwgcXZnYT8weDMwOjB4NjApOworCQlpMmNfd19tYXNrKG92LCAweDJkLCBxdmdhPzB4NDA6MHgwMCwgMHg0MCk7CisJCWkyY193X21hc2sob3YsIDB4NjcsIHF2Z2E/MHhiMDoweDkwLCAweGYwKTsKKwkJaTJjX3dfbWFzayhvdiwgMHg3NCwgcXZnYT8weDIwOjB4MDAsIDB4MjApOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgU0VOX09WNjYyMDoKKwkJaTJjX3cob3YsIDB4MTQsIHF2Z2E/MHgyNDoweDA0KTsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y2NjMwOgorCQlpMmNfdyhvdiwgMHgxNCwgcXZnYT8weGEwOjB4ODApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIoIkludmFsaWQgc2Vuc29yIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qKioqKioqKiBQYWxldHRlLXNwZWNpZmljIHJlZ3MgKioqKioqKiovCisKKwlpZiAobW9kZSA9PSBWSURFT19QQUxFVFRFX0dSRVkpIHsKKwkJaWYgKG92LT5zZW5zb3IgPT0gU0VOX09WNzYxMCB8fCBvdi0+c2Vuc29yID09IFNFTl9PVjc2QkUpIHsKKwkJCS8qIHRoZXNlIGFyZW4ndCB2YWxpZCBvbiB0aGUgT1Y2NjIwL09WNzYyMC82NjMwPyAqLworCQkJaTJjX3dfbWFzayhvdiwgMHgwZSwgMHg0MCwgMHg0MCk7CisJCX0KKworCQlpZiAob3YtPnNlbnNvciA9PSBTRU5fT1Y2NjMwICYmIG92LT5icmlkZ2UgPT0gQlJHX09WNTE4CisJCSAgICAmJiBvdjUxOF9jb2xvcikgeworCQkJaTJjX3dfbWFzayhvdiwgMHgxMiwgMHgwMCwgMHgxMCk7CisJCQlpMmNfd19tYXNrKG92LCAweDEzLCAweDAwLCAweDIwKTsKKwkJfSBlbHNlIHsKKwkJCWkyY193X21hc2sob3YsIDB4MTMsIDB4MjAsIDB4MjApOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG92LT5zZW5zb3IgPT0gU0VOX09WNzYxMCB8fCBvdi0+c2Vuc29yID09IFNFTl9PVjc2QkUpIHsKKwkJCS8qIG5vdCB2YWxpZCBvbiB0aGUgT1Y2NjIwL09WNzYyMC82NjMwPyAqLworCQkJaTJjX3dfbWFzayhvdiwgMHgwZSwgMHgwMCwgMHg0MCk7CisJCX0KKworCQkvKiBUaGUgT1Y1MTggbmVlZHMgc3BlY2lhbCB0cmVhdG1lbnQuIEFsdGhvdWdoIGJvdGggdGhlIE9WNTE4CisJCSAqIGFuZCB0aGUgT1Y2NjMwIHN1cHBvcnQgYSAxNi1iaXQgdmlkZW8gYnVzLCBvbmx5IHRoZSA4IGJpdCBZCisJCSAqIGJ1cyBpcyBhY3R1YWxseSB1c2VkLiBUaGUgVVYgYnVzIGlzIHRpZWQgdG8gZ3JvdW5kLgorCQkgKiBUaGVyZWZvcmUsIHRoZSBPVjY2MzAgbmVlZHMgdG8gYmUgaW4gOC1iaXQgbXVsdGlwbGV4ZWQKKwkJICogb3V0cHV0IG1vZGUgKi8KKworCQlpZiAob3YtPnNlbnNvciA9PSBTRU5fT1Y2NjMwICYmIG92LT5icmlkZ2UgPT0gQlJHX09WNTE4CisJCSAgICAmJiBvdjUxOF9jb2xvcikgeworCQkJaTJjX3dfbWFzayhvdiwgMHgxMiwgMHgxMCwgMHgxMCk7CisJCQlpMmNfd19tYXNrKG92LCAweDEzLCAweDIwLCAweDIwKTsKKwkJfSBlbHNlIHsKKwkJCWkyY193X21hc2sob3YsIDB4MTMsIDB4MDAsIDB4MjApOworCQl9CisJfQorCisJLyoqKioqKioqIENsb2NrIHByb2dyYW1taW5nICoqKioqKioqLworCisJLyogVGhlIE9WNjYyMCBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nLiBUaGlzIHByZXZlbnRzIHRoZSAKKwkgKiBzZXZlcmUgYmFuZGluZyB0aGF0IG5vcm1hbGx5IG9jY3VycyAqLworCWlmIChvdi0+c2Vuc29yID09IFNFTl9PVjY2MjAgfHwgb3YtPnNlbnNvciA9PSBTRU5fT1Y2NjMwKQorCXsKKwkJLyogQ2xvY2sgZG93biAqLworCisJCWkyY193KG92LCAweDJhLCAweDA0KTsKKworCQlpZiAob3YtPmNvbXByZXNzKSB7CisvLwkJCWNsb2NrID0gMDsgICAgLyogVGhpcyBlbnN1cmVzIHRoZSBoaWdoZXN0IGZyYW1lIHJhdGUgKi8KKwkJCWNsb2NrID0gMzsKKwkJfSBlbHNlIGlmIChjbG9ja2RpdiA9PSAtMSkgeyAgIC8qIElmIHVzZXIgZGlkbid0IG92ZXJyaWRlIGl0ICovCisJCQljbG9jayA9IDM7ICAgIC8qIEdpdmVzIGJldHRlciBleHBvc3VyZSB0aW1lICovCisJCX0gZWxzZSB7CisJCQljbG9jayA9IGNsb2NrZGl2OworCQl9CisKKwkJUERFQlVHKDQsICJTZXR0aW5nIGNsb2NrIGRpdmlzb3IgdG8gJWQiLCBjbG9jayk7CisKKwkJaTJjX3cob3YsIDB4MTEsIGNsb2NrKTsKKworCQlpMmNfdyhvdiwgMHgyYSwgMHg4NCk7CisJCS8qIFRoaXMgbmV4dCBzZXR0aW5nIGlzIGNyaXRpY2FsLiBJdCBzZWVtcyB0byBpbXByb3ZlCisJCSAqIHRoZSBnYWluIG9yIHRoZSBjb250cmFzdC4gVGhlICJyZXNlcnZlZCIgYml0cyBzZWVtCisJCSAqIHRvIGhhdmUgc29tZSBlZmZlY3QgaW4gdGhpcyBjYXNlLiAqLworCQlpMmNfdyhvdiwgMHgyZCwgMHg4NSk7CisJfQorCWVsc2UKKwl7CisJCWlmIChvdi0+Y29tcHJlc3MpIHsKKwkJCWNsb2NrID0gMTsgICAgLyogVGhpcyBlbnN1cmVzIHRoZSBoaWdoZXN0IGZyYW1lIHJhdGUgKi8KKwkJfSBlbHNlIGlmIChjbG9ja2RpdiA9PSAtMSkgeyAgIC8qIElmIHVzZXIgZGlkbid0IG92ZXJyaWRlIGl0ICovCisJCQkvKiBDYWxjdWxhdGUgYW5kIHNldCB0aGUgY2xvY2sgZGl2aXNvciAqLworCQkJY2xvY2sgPSAoKHN1Yl9mbGFnID8gb3YtPnN1YncgKiBvdi0+c3ViaAorCQkJCSAgOiB3aWR0aCAqIGhlaWdodCkKKwkJCQkgKiAobW9kZSA9PSBWSURFT19QQUxFVFRFX0dSRVkgPyAyIDogMykgLyAyKQorCQkJCSAvIDY2MDAwOworCQl9IGVsc2UgeworCQkJY2xvY2sgPSBjbG9ja2RpdjsKKwkJfQorCisJCVBERUJVRyg0LCAiU2V0dGluZyBjbG9jayBkaXZpc29yIHRvICVkIiwgY2xvY2spOworCisJCWkyY193KG92LCAweDExLCBjbG9jayk7CisJfQorCisJLyoqKioqKioqIFNwZWNpYWwgRmVhdHVyZXMgKioqKioqKiovCisKKwlpZiAoZnJhbWVkcm9wID49IDApCisJCWkyY193KG92LCAweDE2LCBmcmFtZWRyb3ApOworCisJLyogVGVzdCBQYXR0ZXJuICovCisJaTJjX3dfbWFzayhvdiwgMHgxMiwgKHRlc3RwYXQ/MHgwMjoweDAwKSwgMHgwMik7CisKKwkvKiBFbmFibGUgYXV0byB3aGl0ZSBiYWxhbmNlICovCisJaTJjX3dfbWFzayhvdiwgMHgxMiwgMHgwNCwgMHgwNCk7CisKKwkvLyBUaGlzIHdpbGwgZ28gYXdheSBhcyBzb29uIGFzIG92NTF4X21vZGVfaW5pdF9zZW5zb3JfcmVncygpCisJLy8gaXMgZnVsbHkgdGVzdGVkLgorCS8qIDc2MjAvNjYyMC82NjMwPyBkb24ndCBoYXZlIHJlZ2lzdGVyIDB4MzUsIHNvIHBsYXkgaXQgc2FmZSAqLworCWlmIChvdi0+c2Vuc29yID09IFNFTl9PVjc2MTAgfHwgb3YtPnNlbnNvciA9PSBTRU5fT1Y3NkJFKSB7CisJCWlmICh3aWR0aCA9PSA2NDAgJiYgaGVpZ2h0ID09IDQ4MCkKKwkJCWkyY193KG92LCAweDM1LCAweDllKTsKKwkJZWxzZQorCQkJaTJjX3cob3YsIDB4MzUsIDB4MWUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzZXRfb3Zfc2Vuc29yX3dpbmRvdyhzdHJ1Y3QgdXNiX292NTExICpvdiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbW9kZSwKKwkJICAgICBpbnQgc3ViX2ZsYWcpCit7CisJaW50IHJldDsKKwlpbnQgaHdzYmFzZSwgaHdlYmFzZSwgdndzYmFzZSwgdndlYmFzZSwgaHdzaXplLCB2d3NpemU7IAorCWludCBob2Zmc2V0LCB2b2Zmc2V0LCBod3NjYWxlID0gMCwgdndzY2FsZSA9IDA7CisKKwkvKiBUaGUgZGlmZmVyZW50IHNlbnNvciBJQ3MgaGFuZGxlIHNldHRpbmcgdXAgb2Ygd2luZG93IGRpZmZlcmVudGx5LgorCSAqIElGIFlPVSBTRVQgSVQgV1JPTkcsIFlPVSBXSUxMIEdFVCBBTEwgWkVSTyBJU09DIERBVEEgRlJPTSBPVjUxeCEhISAqLworCXN3aXRjaCAob3YtPnNlbnNvcikgeworCWNhc2UgU0VOX09WNzYxMDoKKwljYXNlIFNFTl9PVjc2QkU6CisJCWh3c2Jhc2UgPSAweDM4OworCQlod2ViYXNlID0gMHgzYTsKKwkJdndzYmFzZSA9IHZ3ZWJhc2UgPSAweDA1OworCQlicmVhazsKKwljYXNlIFNFTl9PVjY2MjA6CisJY2FzZSBTRU5fT1Y2NjMwOgorCQlod3NiYXNlID0gMHgzODsKKwkJaHdlYmFzZSA9IDB4M2E7CisJCXZ3c2Jhc2UgPSAweDA1OworCQl2d2ViYXNlID0gMHgwNjsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y3NjIwOgorCQlod3NiYXNlID0gMHgyZjsJCS8qIEZyb20gNzYyMC5TRVQgKHNwZWMgaXMgd3JvbmcpICovCisJCWh3ZWJhc2UgPSAweDJmOworCQl2d3NiYXNlID0gdndlYmFzZSA9IDB4MDU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycigiSW52YWxpZCBzZW5zb3IiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKG92LT5zZW5zb3IgPT0gU0VOX09WNjYyMCB8fCBvdi0+c2Vuc29yID09IFNFTl9PVjY2MzApIHsKKwkJLyogTm90ZTogT1Y1MTgoKykgZG9lcyBkb3duc2FtcGxlIG9uIGl0cyBvd24pICovCisJCWlmICgod2lkdGggPiAxNzYgJiYgaGVpZ2h0ID4gMTQ0KQorCQkgICAgfHwgb3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpIHsgIC8qIENJRiAqLworCQkJcmV0ID0gbW9kZV9pbml0X292X3NlbnNvcl9yZWdzKG92LCB3aWR0aCwgaGVpZ2h0LAorCQkJCW1vZGUsIHN1Yl9mbGFnLCAwKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCQlod3NjYWxlID0gMTsKKwkJCXZ3c2NhbGUgPSAxOyAgLyogVGhlIGRhdGFzaGVldCBzYXlzIDA7IGl0J3Mgd3JvbmcgKi8KKwkJCWh3c2l6ZSA9IDM1MjsKKwkJCXZ3c2l6ZSA9IDI4ODsKKwkJfSBlbHNlIGlmICh3aWR0aCA+IDE3NiB8fCBoZWlnaHQgPiAxNDQpIHsKKwkJCWVycigiSWxsZWdhbCBkaW1lbnNpb25zIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlIHsJCQkgICAgLyogUUNJRiAqLworCQkJcmV0ID0gbW9kZV9pbml0X292X3NlbnNvcl9yZWdzKG92LCB3aWR0aCwgaGVpZ2h0LAorCQkJCW1vZGUsIHN1Yl9mbGFnLCAxKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCQlod3NpemUgPSAxNzY7CisJCQl2d3NpemUgPSAxNDQ7CisJCX0KKwl9IGVsc2UgeworCQlpZiAod2lkdGggPiAzMjAgJiYgaGVpZ2h0ID4gMjQwKSB7ICAvKiBWR0EgKi8KKwkJCXJldCA9IG1vZGVfaW5pdF9vdl9zZW5zb3JfcmVncyhvdiwgd2lkdGgsIGhlaWdodCwKKwkJCQltb2RlLCBzdWJfZmxhZywgMCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQkJaHdzY2FsZSA9IDI7CisJCQl2d3NjYWxlID0gMTsKKwkJCWh3c2l6ZSA9IDY0MDsKKwkJCXZ3c2l6ZSA9IDQ4MDsKKwkJfSBlbHNlIGlmICh3aWR0aCA+IDMyMCB8fCBoZWlnaHQgPiAyNDApIHsKKwkJCWVycigiSWxsZWdhbCBkaW1lbnNpb25zIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlIHsJCQkgICAgLyogUVZHQSAqLworCQkJcmV0ID0gbW9kZV9pbml0X292X3NlbnNvcl9yZWdzKG92LCB3aWR0aCwgaGVpZ2h0LAorCQkJCW1vZGUsIHN1Yl9mbGFnLCAxKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCQlod3NjYWxlID0gMTsKKwkJCWh3c2l6ZSA9IDMyMDsKKwkJCXZ3c2l6ZSA9IDI0MDsKKwkJfQorCX0KKworCS8qIENlbnRlciB0aGUgd2luZG93ICovCisJaG9mZnNldCA9ICgoaHdzaXplIC0gd2lkdGgpIC8gMikgPj4gaHdzY2FsZTsKKwl2b2Zmc2V0ID0gKCh2d3NpemUgLSBoZWlnaHQpIC8gMikgPj4gdndzY2FsZTsKKworCS8qIEZJWE1FISAtIFRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byBzdXBwb3J0IDE2MHgxMjAgYW5kIDY2MjAhISEgKi8KKwlpZiAoc3ViX2ZsYWcpIHsKKwkJaTJjX3cob3YsIDB4MTcsIGh3c2Jhc2UrKG92LT5zdWJ4Pj5od3NjYWxlKSk7CisJCWkyY193KG92LCAweDE4LAlod2ViYXNlKygob3YtPnN1Yngrb3YtPnN1YncpPj5od3NjYWxlKSk7CisJCWkyY193KG92LCAweDE5LCB2d3NiYXNlKyhvdi0+c3VieT4+dndzY2FsZSkpOworCQlpMmNfdyhvdiwgMHgxYSwgdndlYmFzZSsoKG92LT5zdWJ5K292LT5zdWJoKT4+dndzY2FsZSkpOworCX0gZWxzZSB7CisJCWkyY193KG92LCAweDE3LCBod3NiYXNlICsgaG9mZnNldCk7CisJCWkyY193KG92LCAweDE4LCBod2ViYXNlICsgaG9mZnNldCArIChod3NpemU+Pmh3c2NhbGUpKTsKKwkJaTJjX3cob3YsIDB4MTksIHZ3c2Jhc2UgKyB2b2Zmc2V0KTsKKwkJaTJjX3cob3YsIDB4MWEsIHZ3ZWJhc2UgKyB2b2Zmc2V0ICsgKHZ3c2l6ZT4+dndzY2FsZSkpOworCX0KKworI2lmZGVmIE9WNTExX0RFQlVHCisJaWYgKGR1bXBfc2Vuc29yKQorCQlkdW1wX2kyY19yZWdzKG92KTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKKy8qIFNldCB1cCB0aGUgT1Y1MTEvT1Y1MTErIHdpdGggdGhlIGdpdmVuIGltYWdlIHBhcmFtZXRlcnMuCisgKgorICogRG8gbm90IHB1dCBhbnkgc2Vuc29yLXNwZWNpZmljIGNvZGUgaW4gaGVyZSAoaW5jbHVkaW5nIEkyQyBJL08gZnVuY3Rpb25zKQorICovCitzdGF0aWMgaW50CitvdjUxMV9tb2RlX2luaXRfcmVncyhzdHJ1Y3QgdXNiX292NTExICpvdiwKKwkJICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtb2RlLCBpbnQgc3ViX2ZsYWcpCit7CisJaW50IGhzZWdzLCB2c2VnczsKKworCWlmIChzdWJfZmxhZykgeworCQl3aWR0aCA9IG92LT5zdWJ3OworCQloZWlnaHQgPSBvdi0+c3ViaDsKKwl9CisKKwlQREVCVUcoMywgIndpZHRoOiVkLCBoZWlnaHQ6JWQsIG1vZGU6JWQsIHN1YjolZCIsCisJICAgICAgIHdpZHRoLCBoZWlnaHQsIG1vZGUsIHN1Yl9mbGFnKTsKKworCS8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBtb3ZlZCB0byBhIDcxMTFhLXNwZWNpZmljIGZ1bmN0aW9uIG9uY2UKKwkvLyBzdWJjYXB0dXJlIGlzIGRlYWx0IHdpdGggcHJvcGVybHkKKwlpZiAob3YtPnNlbnNvciA9PSBTRU5fU0FBNzExMUEpIHsKKwkJaWYgKHdpZHRoID09IDMyMCAmJiBoZWlnaHQgPT0gMjQwKSB7CisJCQkvKiBObyBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgKi8KKwkJfSBlbHNlIGlmICh3aWR0aCA9PSA2NDAgJiYgaGVpZ2h0ID09IDQ4MCkgeworCQkJLyogU2V0IHRoZSBPVjUxMSB1cCBhcyAzMjB4NDgwLCBidXQga2VlcCB0aGUKKwkJCSAqIFY0TCByZXNvbHV0aW9uIGFzIDY0MHg0ODAgKi8KKwkJCXdpZHRoID0gMzIwOworCQl9IGVsc2UgeworCQkJZXJyKCJTQUE3MTExQSBvbmx5IGFsbG93cyAzMjB4MjQwIG9yIDY0MHg0ODAiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJLyogTWFrZSBzdXJlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGEgbXVsdGlwbGUgb2YgOCAqLworCWlmICh3aWR0aCAlIDggfHwgaGVpZ2h0ICUgOCkgeworCQllcnIoIkludmFsaWQgc2l6ZSAoJWQsICVkKSAobW9kZSA9ICVkKSIsIHdpZHRoLCBoZWlnaHQsIG1vZGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAod2lkdGggPCBvdi0+bWlud2lkdGggfHwgaGVpZ2h0IDwgb3YtPm1pbmhlaWdodCkgeworCQllcnIoIlJlcXVlc3RlZCBkaW1lbnNpb25zIGFyZSB0b28gc21hbGwiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKG92NTF4X3N0b3Aob3YpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAobW9kZSA9PSBWSURFT19QQUxFVFRFX0dSRVkpIHsKKwkJcmVnX3cob3YsIFI1MTFfQ0FNX1VWX0VOLCAweDAwKTsKKwkJcmVnX3cob3YsIFI1MTFfU05BUF9VVl9FTiwgMHgwMCk7CisJCXJlZ193KG92LCBSNTExX1NOQVBfT1BUUywgMHgwMSk7CisJfSBlbHNlIHsKKwkJcmVnX3cob3YsIFI1MTFfQ0FNX1VWX0VOLCAweDAxKTsKKwkJcmVnX3cob3YsIFI1MTFfU05BUF9VVl9FTiwgMHgwMSk7CisJCXJlZ193KG92LCBSNTExX1NOQVBfT1BUUywgMHgwMyk7CisJfQorCisJLyogSGVyZSBJJ20gYXNzdW1pbmcgdGhhdCBzbmFwc2hvdCBzaXplID09IGltYWdlIHNpemUuCisJICogSSBob3BlIHRoYXQncyBhbHdheXMgdHJ1ZS4gLS1jbGF1ZGlvCisJICovCisJaHNlZ3MgPSAod2lkdGggPj4gMykgLSAxOworCXZzZWdzID0gKGhlaWdodCA+PiAzKSAtIDE7CisKKwlyZWdfdyhvdiwgUjUxMV9DQU1fUFhDTlQsIGhzZWdzKTsKKwlyZWdfdyhvdiwgUjUxMV9DQU1fTE5DTlQsIHZzZWdzKTsKKwlyZWdfdyhvdiwgUjUxMV9DQU1fUFhESVYsIDB4MDApOworCXJlZ193KG92LCBSNTExX0NBTV9MTkRJViwgMHgwMCk7CisKKwkvKiBZVVY0MjAsIGxvdyBwYXNzIGZpbHRlciBvbiAqLworCXJlZ193KG92LCBSNTExX0NBTV9PUFRTLCAweDAzKTsKKworCS8qIFNuYXBzaG90IGFkZGl0aW9ucyAqLworCXJlZ193KG92LCBSNTExX1NOQVBfUFhDTlQsIGhzZWdzKTsKKwlyZWdfdyhvdiwgUjUxMV9TTkFQX0xOQ05ULCB2c2Vncyk7CisJcmVnX3cob3YsIFI1MTFfU05BUF9QWERJViwgMHgwMCk7CisJcmVnX3cob3YsIFI1MTFfU05BUF9MTkRJViwgMHgwMCk7CisKKwlpZiAob3YtPmNvbXByZXNzKSB7CisJCS8qIEVuYWJsZSBZIGFuZCBVViBxdWFudGl6YXRpb24gYW5kIGNvbXByZXNzaW9uICovCisJCXJlZ193KG92LCBSNTExX0NPTVBfRU4sIDB4MDcpOworCQlyZWdfdyhvdiwgUjUxMV9DT01QX0xVVF9FTiwgMHgwMyk7CisJCW92NTF4X3Jlc2V0KG92LCBPVjUxMV9SRVNFVF9PTU5JQ0UpOworCX0KKworCWlmIChvdjUxeF9yZXN0YXJ0KG92KSA8IDApCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFNldHMgdXAgdGhlIE9WNTE4L09WNTE4KyB3aXRoIHRoZSBnaXZlbiBpbWFnZSBwYXJhbWV0ZXJzCisgKgorICogT1Y1MTggbmVlZHMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBhcHByb2FjaCwgdW50aWwgd2UgY2FuIGZpZ3VyZSBvdXQgd2hhdAorICogdGhlIGluZGl2aWR1YWwgcmVnaXN0ZXJzIGRvLiBBbHNvLCBvbmx5IDE1IEZQUyBpcyBzdXBwb3J0ZWQgbm93LgorICoKKyAqIERvIG5vdCBwdXQgYW55IHNlbnNvci1zcGVjaWZpYyBjb2RlIGluIGhlcmUgKGluY2x1ZGluZyBJMkMgSS9PIGZ1bmN0aW9ucykKKyAqLworc3RhdGljIGludAorb3Y1MThfbW9kZV9pbml0X3JlZ3Moc3RydWN0IHVzYl9vdjUxMSAqb3YsCisJCSAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbW9kZSwgaW50IHN1Yl9mbGFnKQoreworCWludCBoc2VncywgdnNlZ3MsIGhpX3JlczsKKworCWlmIChzdWJfZmxhZykgeworCQl3aWR0aCA9IG92LT5zdWJ3OworCQloZWlnaHQgPSBvdi0+c3ViaDsKKwl9CisKKwlQREVCVUcoMywgIndpZHRoOiVkLCBoZWlnaHQ6JWQsIG1vZGU6JWQsIHN1YjolZCIsCisJICAgICAgIHdpZHRoLCBoZWlnaHQsIG1vZGUsIHN1Yl9mbGFnKTsKKworCWlmICh3aWR0aCAlIDE2IHx8IGhlaWdodCAlIDgpIHsKKwkJZXJyKCJJbnZhbGlkIHNpemUgKCVkLCAlZCkiLCB3aWR0aCwgaGVpZ2h0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHdpZHRoIDwgb3YtPm1pbndpZHRoIHx8IGhlaWdodCA8IG92LT5taW5oZWlnaHQpIHsKKwkJZXJyKCJSZXF1ZXN0ZWQgZGltZW5zaW9ucyBhcmUgdG9vIHNtYWxsIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh3aWR0aCA+PSAzMjAgJiYgaGVpZ2h0ID49IDI0MCkgeworCQloaV9yZXMgPSAxOworCX0gZWxzZSBpZiAod2lkdGggPj0gMzIwIHx8IGhlaWdodCA+PSAyNDApIHsKKwkJZXJyKCJJbnZhbGlkIHdpZHRoL2hlaWdodCBjb21iaW5hdGlvbiAoJWQsICVkKSIsIHdpZHRoLCBoZWlnaHQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQloaV9yZXMgPSAwOworCX0KKworCWlmIChvdjUxeF9zdG9wKG92KSA8IDApCisJCXJldHVybiAtRUlPOworCisJLyoqKioqKioqIFNldCB0aGUgbW9kZSAqKioqKioqKi8KKworCXJlZ193KG92LCAweDJiLCAwKTsKKwlyZWdfdyhvdiwgMHgyYywgMCk7CisJcmVnX3cob3YsIDB4MmQsIDApOworCXJlZ193KG92LCAweDJlLCAwKTsKKwlyZWdfdyhvdiwgMHgzYiwgMCk7CisJcmVnX3cob3YsIDB4M2MsIDApOworCXJlZ193KG92LCAweDNkLCAwKTsKKwlyZWdfdyhvdiwgMHgzZSwgMCk7CisKKwlpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MTggJiYgb3Y1MThfY29sb3IpIHsKKwkJLyogT1Y1MTggbmVlZHMgVSBhbmQgViBzd2FwcGVkICovCisJCWkyY193X21hc2sob3YsIDB4MTUsIDB4MDAsIDB4MDEpOworCisJIAlpZiAobW9kZSA9PSBWSURFT19QQUxFVFRFX0dSRVkpIHsKKwkJCS8qIFNldCAxNi1iaXQgaW5wdXQgZm9ybWF0IChVViBkYXRhIGFyZSBpZ25vcmVkKSAqLworCQkJcmVnX3dfbWFzayhvdiwgMHgyMCwgMHgwMCwgMHgwOCk7CisKKwkJCS8qIFNldCA4LWJpdCAoNDowOjApIG91dHB1dCBmb3JtYXQgKi8KKwkJCXJlZ193X21hc2sob3YsIDB4MjgsIDB4MDAsIDB4ZjApOworCQkJcmVnX3dfbWFzayhvdiwgMHgzOCwgMHgwMCwgMHhmMCk7CisJCX0gZWxzZSB7CisJCQkvKiBTZXQgOC1iaXQgKFlWWVUpIGlucHV0IGZvcm1hdCAqLworCQkJcmVnX3dfbWFzayhvdiwgMHgyMCwgMHgwOCwgMHgwOCk7CisKKwkJCS8qIFNldCAxMi1iaXQgKDQ6MjowKSBvdXRwdXQgZm9ybWF0ICovCisJCQlyZWdfd19tYXNrKG92LCAweDI4LCAweDgwLCAweGYwKTsKKwkJCXJlZ193X21hc2sob3YsIDB4MzgsIDB4ODAsIDB4ZjApOworCQl9CisJfSBlbHNlIHsKKwkJcmVnX3cob3YsIDB4MjgsIChtb2RlID09IFZJREVPX1BBTEVUVEVfR1JFWSkgPyAweDAwOjB4ODApOworCQlyZWdfdyhvdiwgMHgzOCwgKG1vZGUgPT0gVklERU9fUEFMRVRURV9HUkVZKSA/IDB4MDA6MHg4MCk7CisJfQorCisJaHNlZ3MgPSB3aWR0aCAvIDE2OworCXZzZWdzID0gaGVpZ2h0IC8gNDsKKworCXJlZ193KG92LCAweDI5LCBoc2Vncyk7CisJcmVnX3cob3YsIDB4MmEsIHZzZWdzKTsKKworCXJlZ193KG92LCAweDM5LCBoc2Vncyk7CisJcmVnX3cob3YsIDB4M2EsIHZzZWdzKTsKKworCS8qIFdpbmRvd3MgZHJpdmVyIGRvZXMgdGhpcyBoZXJlOyB3aG8ga25vd3Mgd2h5ICovCisJcmVnX3cob3YsIDB4MmYsIDB4ODApOworCisJLyoqKioqKioqIFNldCB0aGUgZnJhbWVyYXRlICh0byAxNSBGUFMpICoqKioqKioqLworCisJLyogTW9kZSBpbmRlcGVuZGVudCwgYnV0IGZyYW1lcmF0ZSBkZXBlbmRlbnQsIHJlZ3MgKi8KKwlyZWdfdyhvdiwgMHg1MSwgMHgwMik7CS8qIENsb2NrIGRpdmlkZXI7IGxvd2VyPT1mYXN0ZXIgKi8KKwlyZWdfdyhvdiwgMHgyMiwgMHgxOCk7CisJcmVnX3cob3YsIDB4MjMsIDB4ZmYpOworCisJaWYgKG92LT5icmlkZ2UgPT0gQlJHX09WNTE4UExVUykKKwkJcmVnX3cob3YsIDB4MjEsIDB4MTkpOworCWVsc2UKKwkJcmVnX3cob3YsIDB4NzEsIDB4MTkpOwkvKiBDb21wcmVzc2lvbi1yZWxhdGVkPyAqLworCisJLy8gRklYTUU6IFNlbnNvci1zcGVjaWZpYworCS8qIEJpdCA1IGlzIHdoYXQgbWF0dGVycyBoZXJlLiBPZiBjb3Vyc2UsIGl0IGlzICJyZXNlcnZlZCIgKi8KKwlpMmNfdyhvdiwgMHg1NCwgMHgyMyk7CisKKwlyZWdfdyhvdiwgMHgyZiwgMHg4MCk7CisKKwlpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MThQTFVTKSB7CisJCXJlZ193KG92LCAweDI0LCAweDk0KTsKKwkJcmVnX3cob3YsIDB4MjUsIDB4OTApOworCQlvdjUxOF9yZWdfdzMyKG92LCAweGM0LCAgICA0MDAsIDIpOwkvKiAxOTBoICAgKi8KKwkJb3Y1MThfcmVnX3czMihvdiwgMHhjNiwgICAgNTQwLCAyKTsJLyogMjFjaCAgICovCisJCW92NTE4X3JlZ193MzIob3YsIDB4YzcsICAgIDU0MCwgMik7CS8qIDIxY2ggICAqLworCQlvdjUxOF9yZWdfdzMyKG92LCAweGM4LCAgICAxMDgsIDIpOwkvKiA2Y2ggICAgKi8KKwkJb3Y1MThfcmVnX3czMihvdiwgMHhjYSwgMTMxMDk4LCAzKTsJLyogMjAwMWFoICovCisJCW92NTE4X3JlZ193MzIob3YsIDB4Y2IsICAgIDUzMiwgMik7CS8qIDIxNGggICAqLworCQlvdjUxOF9yZWdfdzMyKG92LCAweGNjLCAgIDI0MDAsIDIpOwkvKiA5NjBoICAgKi8KKwkJb3Y1MThfcmVnX3czMihvdiwgMHhjZCwgICAgIDMyLCAyKTsJLyogMjBoICAgICovCisJCW92NTE4X3JlZ193MzIob3YsIDB4Y2UsICAgIDYwOCwgMik7CS8qIDI2MGggICAqLworCX0gZWxzZSB7CisJCXJlZ193KG92LCAweDI0LCAweDlmKTsKKwkJcmVnX3cob3YsIDB4MjUsIDB4OTApOworCQlvdjUxOF9yZWdfdzMyKG92LCAweGM0LCAgICA0MDAsIDIpOwkvKiAxOTBoICAgKi8KKwkJb3Y1MThfcmVnX3czMihvdiwgMHhjNiwgICAgNTAwLCAyKTsJLyogMWY0aCAgICovCisJCW92NTE4X3JlZ193MzIob3YsIDB4YzcsICAgIDUwMCwgMik7CS8qIDFmNGggICAqLworCQlvdjUxOF9yZWdfdzMyKG92LCAweGM4LCAgICAxNDIsIDIpOwkvKiA4ZWggICAgKi8KKwkJb3Y1MThfcmVnX3czMihvdiwgMHhjYSwgMTMxMDk4LCAzKTsJLyogMjAwMWFoICovCisJCW92NTE4X3JlZ193MzIob3YsIDB4Y2IsICAgIDUzMiwgMik7CS8qIDIxNGggICAqLworCQlvdjUxOF9yZWdfdzMyKG92LCAweGNjLCAgIDIwMDAsIDIpOwkvKiA3ZDBoICAgKi8KKwkJb3Y1MThfcmVnX3czMihvdiwgMHhjZCwgICAgIDMyLCAyKTsJLyogMjBoICAgICovCisJCW92NTE4X3JlZ193MzIob3YsIDB4Y2UsICAgIDYwOCwgMik7CS8qIDI2MGggICAqLworCX0KKworCXJlZ193KG92LCAweDJmLCAweDgwKTsKKworCWlmIChvdjUxeF9yZXN0YXJ0KG92KSA8IDApCisJCXJldHVybiAtRUlPOworCisJLyogUmVzZXQgaXQganVzdCBmb3IgZ29vZCBtZWFzdXJlICovCisJaWYgKG92NTF4X3Jlc2V0KG92LCBPVjUxMV9SRVNFVF9OT1JFR1MpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBPVjUxMSwgT1Y1MTgsIGFuZCBzZW5zb3Igc3BlY2lmaWMgZnVuY3Rpb25zICovCitzdGF0aWMgaW50Cittb2RlX2luaXRfcmVncyhzdHJ1Y3QgdXNiX292NTExICpvdiwKKwkgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbW9kZSwgaW50IHN1Yl9mbGFnKQoreworCWludCByYyA9IDA7CisKKwlpZiAoIW92IHx8ICFvdi0+ZGV2KQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgeworCQlyYyA9IG92NTE4X21vZGVfaW5pdF9yZWdzKG92LCB3aWR0aCwgaGVpZ2h0LCBtb2RlLCBzdWJfZmxhZyk7CisJfSBlbHNlIHsKKwkJcmMgPSBvdjUxMV9tb2RlX2luaXRfcmVncyhvdiwgd2lkdGgsIGhlaWdodCwgbW9kZSwgc3ViX2ZsYWcpOworCX0KKworCWlmIChGQVRBTF9FUlJPUihyYykpCisJCXJldHVybiByYzsKKworCXN3aXRjaCAob3YtPnNlbnNvcikgeworCWNhc2UgU0VOX09WNzYxMDoKKwljYXNlIFNFTl9PVjc2MjA6CisJY2FzZSBTRU5fT1Y3NkJFOgorCWNhc2UgU0VOX09WODYwMDoKKwljYXNlIFNFTl9PVjY2MjA6CisJY2FzZSBTRU5fT1Y2NjMwOgorCQlyYyA9IHNldF9vdl9zZW5zb3Jfd2luZG93KG92LCB3aWR0aCwgaGVpZ2h0LCBtb2RlLCBzdWJfZmxhZyk7CisJCWJyZWFrOworCWNhc2UgU0VOX0tTMDEyNzoKKwljYXNlIFNFTl9LUzAxMjdCOgorCQllcnIoIktTMDEyNy1zZXJpZXMgZGVjb2RlcnMgbm90IHN1cHBvcnRlZCB5ZXQiKTsKKwkJcmMgPSAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIFNFTl9TQUE3MTExQToKKy8vCQlyYyA9IG1vZGVfaW5pdF9zYWFfc2Vuc29yX3JlZ3Mob3YsIHdpZHRoLCBoZWlnaHQsIG1vZGUsCisvLwkJCQkJICAgICAgIHN1Yl9mbGFnKTsKKworCQlQREVCVUcoMSwgIlNBQSBzdGF0dXMgPSAweCUwMlgiLCBpMmNfcihvdiwgMHgxZikpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIoIlVua25vd24gc2Vuc29yIik7CisJCXJjID0gLUVJTlZBTDsKKwl9CisKKwlpZiAoRkFUQUxfRVJST1IocmMpKQorCQlyZXR1cm4gcmM7CisKKwkvKiBTZW5zb3ItaW5kZXBlbmRlbnQgc2V0dGluZ3MgKi8KKwlyYyA9IHNlbnNvcl9zZXRfYXV0b19icmlnaHRuZXNzKG92LCBvdi0+YXV0b19icnQpOworCWlmIChGQVRBTF9FUlJPUihyYykpCisJCXJldHVybiByYzsKKworCXJjID0gc2Vuc29yX3NldF9hdXRvX2V4cG9zdXJlKG92LCBvdi0+YXV0b19leHApOworCWlmIChGQVRBTF9FUlJPUihyYykpCisJCXJldHVybiByYzsKKworCXJjID0gc2Vuc29yX3NldF9iYW5kaW5nX2ZpbHRlcihvdiwgYmFuZGluZ2ZpbHRlcik7CisJaWYgKEZBVEFMX0VSUk9SKHJjKSkKKwkJcmV0dXJuIHJjOworCisJaWYgKG92LT5saWdodGZyZXEpIHsKKwkJcmMgPSBzZW5zb3Jfc2V0X2xpZ2h0X2ZyZXEob3YsIGxpZ2h0ZnJlcSk7CisJCWlmIChGQVRBTF9FUlJPUihyYykpCisJCQlyZXR1cm4gcmM7CisJfQorCisJcmMgPSBzZW5zb3Jfc2V0X2JhY2tsaWdodChvdiwgb3YtPmJhY2tsaWdodCk7CisJaWYgKEZBVEFMX0VSUk9SKHJjKSkKKwkJcmV0dXJuIHJjOworCisJcmMgPSBzZW5zb3Jfc2V0X21pcnJvcihvdiwgb3YtPm1pcnJvcik7CisJaWYgKEZBVEFMX0VSUk9SKHJjKSkKKwkJcmV0dXJuIHJjOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgc2V0cyB0aGUgZGVmYXVsdCBpbWFnZSBwYXJhbWV0ZXJzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgYXBwcyB0aGF0IHVzZQorICogcmVhZCgpIGFuZCBkbyBub3Qgc2V0IHRoZXNlLgorICovCitzdGF0aWMgaW50CitvdjUxeF9zZXRfZGVmYXVsdF9wYXJhbXMoc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaW50IGk7CisKKwkvKiBTZXQgZGVmYXVsdCBzaXplcyBpbiBjYXNlIElPQ1RMIChWSURJT0NNQ0FQVFVSRSkgaXMgbm90IHVzZWQKKwkgKiAodXNpbmcgcmVhZCgpIGluc3RlYWQpLiAqLworCWZvciAoaSA9IDA7IGkgPCBPVjUxMV9OVU1GUkFNRVM7IGkrKykgeworCQlvdi0+ZnJhbWVbaV0ud2lkdGggPSBvdi0+bWF4d2lkdGg7CisJCW92LT5mcmFtZVtpXS5oZWlnaHQgPSBvdi0+bWF4aGVpZ2h0OworCQlvdi0+ZnJhbWVbaV0uYnl0ZXNfcmVhZCA9IDA7CisJCWlmIChmb3JjZV9wYWxldHRlKQorCQkJb3YtPmZyYW1lW2ldLmZvcm1hdCA9IGZvcmNlX3BhbGV0dGU7CisJCWVsc2UKKwkJCW92LT5mcmFtZVtpXS5mb3JtYXQgPSBWSURFT19QQUxFVFRFX1lVVjQyMDsKKworCQlvdi0+ZnJhbWVbaV0uZGVwdGggPSBnZXRfZGVwdGgob3YtPmZyYW1lW2ldLmZvcm1hdCk7CisJfQorCisJUERFQlVHKDMsICIlZHglZCwgJXMiLCBvdi0+bWF4d2lkdGgsIG92LT5tYXhoZWlnaHQsCisJICAgICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIG92LT5mcmFtZVswXS5mb3JtYXQpKTsKKworCS8qIEluaXRpYWxpemUgdG8gbWF4IHdpZHRoL2hlaWdodCwgWVVWNDIwIG9yIFJHQjI0IChpZiBzdXBwb3J0ZWQpICovCisJaWYgKG1vZGVfaW5pdF9yZWdzKG92LCBvdi0+bWF4d2lkdGgsIG92LT5tYXhoZWlnaHQsCisJCQkgICBvdi0+ZnJhbWVbMF0uZm9ybWF0LCAwKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVmlkZW8gZGVjb2RlciBzdHVmZgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBTZXQgYW5hbG9nIGlucHV0IHBvcnQgb2YgZGVjb2RlciAqLworc3RhdGljIGludAorZGVjb2Rlcl9zZXRfaW5wdXQoc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCBpbnB1dCkKK3sKKwlQREVCVUcoNCwgInBvcnQgJWQiLCBpbnB1dCk7CisKKwlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKKwljYXNlIFNFTl9TQUE3MTExQToKKwl7CisJCS8qIFNlbGVjdCBtb2RlICovCisJCWkyY193X21hc2sob3YsIDB4MDIsIGlucHV0LCAweDA3KTsKKwkJLyogQnlwYXNzIGNocm9taW5hbmNlIHRyYXAgZm9yIG1vZGVzIDQuLjcgKi8KKwkJaTJjX3dfbWFzayhvdiwgMHgwOSwgKGlucHV0ID4gMykgPyAweDgwOjB4MDAsIDB4ODApOworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIEdldCBBU0NJSSBuYW1lIG9mIHZpZGVvIGlucHV0ICovCitzdGF0aWMgaW50CitkZWNvZGVyX2dldF9pbnB1dF9uYW1lKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBpbnQgaW5wdXQsIGNoYXIgKm5hbWUpCit7CisJc3dpdGNoIChvdi0+c2Vuc29yKSB7CisJY2FzZSBTRU5fU0FBNzExMUE6CisJeworCQlpZiAoaW5wdXQgPCAwIHx8IGlucHV0ID4gNykKKwkJCXJldHVybiAtRUlOVkFMOworCQllbHNlIGlmIChpbnB1dCA8IDQpCisJCQlzcHJpbnRmKG5hbWUsICJDVkJTLSVkIiwgaW5wdXQpOworCQllbHNlIC8vIGlmIChpbnB1dCA8IDgpCisJCQlzcHJpbnRmKG5hbWUsICJTLVZpZGVvLSVkIiwgaW5wdXQgLSA0KTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCXNwcmludGYobmFtZSwgIiVzIiwgIkNhbWVyYSIpOworCX0KKworCXJldHVybiAwOworfQorCisvKiBTZXQgbm9ybSAoTlRTQywgUEFMLCBTRUNBTSwgQVVUTykgKi8KK3N0YXRpYyBpbnQKK2RlY29kZXJfc2V0X25vcm0oc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCBub3JtKQoreworCVBERUJVRyg0LCAiJWQiLCBub3JtKTsKKworCXN3aXRjaCAob3YtPnNlbnNvcikgeworCWNhc2UgU0VOX1NBQTcxMTFBOgorCXsKKwkJaW50IHJlZ184LCByZWdfZTsKKworCQlpZiAobm9ybSA9PSBWSURFT19NT0RFX05UU0MpIHsKKwkJCXJlZ184ID0gMHg0MDsJLyogNjAgSHogKi8KKwkJCXJlZ19lID0gMHgwMDsJLyogTlRTQyBNIC8gUEFMIEJHSEkgKi8KKwkJfSBlbHNlIGlmIChub3JtID09IFZJREVPX01PREVfUEFMKSB7CisJCQlyZWdfOCA9IDB4MDA7CS8qIDUwIEh6ICovCisJCQlyZWdfZSA9IDB4MDA7CS8qIE5UU0MgTSAvIFBBTCBCR0hJICovCisJCX0gZWxzZSBpZiAobm9ybSA9PSBWSURFT19NT0RFX0FVVE8pIHsKKwkJCXJlZ184ID0gMHg4MDsJLyogQXV0byBmaWVsZCBkZXRlY3QgKi8KKwkJCXJlZ19lID0gMHgwMDsJLyogTlRTQyBNIC8gUEFMIEJHSEkgKi8KKwkJfSBlbHNlIGlmIChub3JtID09IFZJREVPX01PREVfU0VDQU0pIHsKKwkJCXJlZ184ID0gMHgwMDsJLyogNTAgSHogKi8KKwkJCXJlZ19lID0gMHg1MDsJLyogU0VDQU0gLyBQQUwgNC40MyAqLworCQl9IGVsc2UgeworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpMmNfd19tYXNrKG92LCAweDA4LCByZWdfOCwgMHhjMCk7CisJCWkyY193X21hc2sob3YsIDB4MGUsIHJlZ19lLCAweDcwKTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFJhdyBkYXRhIHBhcnNpbmcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQ29waWVzIGEgNjQtYnl0ZSBzZWdtZW50IGF0IHBJbiB0byBhbiA4eDggYmxvY2sgYXQgcE91dC4gVGhlIHdpZHRoIG9mIHRoZQorICogaW1hZ2UgYXQgcE91dCBpcyBzcGVjaWZpZWQgYnkgdy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCittYWtlXzh4OCh1bnNpZ25lZCBjaGFyICpwSW4sIHVuc2lnbmVkIGNoYXIgKnBPdXQsIGludCB3KQoreworCXVuc2lnbmVkIGNoYXIgKnBPdXQxID0gcE91dDsKKwlpbnQgeCwgeTsKKworCWZvciAoeSA9IDA7IHkgPCA4OyB5KyspIHsKKwkJcE91dDEgPSBwT3V0OworCQlmb3IgKHggPSAwOyB4IDwgODsgeCsrKSB7CisJCQkqcE91dDErKyA9ICpwSW4rKzsKKwkJfQorCQlwT3V0ICs9IHc7CisJfQorfQorCisvKgorICogRm9yIFJBVyBCVyAoWVVWIDQ6MDowKSBpbWFnZXMsIGRhdGEgc2hvdyB1cCBpbiAyNTYgYnl0ZSBzZWdtZW50cy4KKyAqIFRoZSBzZWdtZW50cyByZXByZXNlbnQgNCBzcXVhcmVzIG9mIDh4OCBwaXhlbHMgYXMgZm9sbG93czoKKyAqCisgKiAgICAgIDAgIDEgLi4uICA3ICAgIDY0ICA2NSAuLi4gIDcxICAgLi4uICAxOTIgMTkzIC4uLiAxOTkKKyAqICAgICAgOCAgOSAuLi4gMTUgICAgNzIgIDczIC4uLiAgNzkgICAgICAgIDIwMCAyMDEgLi4uIDIwNworICogICAgICAgICAgIC4uLiAgICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAuLi4KKyAqICAgICA1NiA1NyAuLi4gNjMgICAxMjAgMTIxIC4uLiAxMjcgICAgICAgIDI0OCAyNDkgLi4uIDI1NQorICoKKyAqLyAKK3N0YXRpYyB2b2lkCit5dXY0MDByYXdfdG9feXV2NDAwcChzdHJ1Y3Qgb3Y1MTFfZnJhbWUgKmZyYW1lLAorCQkgICAgIHVuc2lnbmVkIGNoYXIgKnBJbjAsIHVuc2lnbmVkIGNoYXIgKnBPdXQwKQoreworCWludCB4LCB5OworCXVuc2lnbmVkIGNoYXIgKnBJbiwgKnBPdXQsICpwT3V0TGluZTsKKworCS8qIENvcHkgWSAqLworCXBJbiA9IHBJbjA7CisJcE91dExpbmUgPSBwT3V0MDsKKwlmb3IgKHkgPSAwOyB5IDwgZnJhbWUtPnJhd2hlaWdodCAtIDE7IHkgKz0gOCkgeworCQlwT3V0ID0gcE91dExpbmU7CisJCWZvciAoeCA9IDA7IHggPCBmcmFtZS0+cmF3d2lkdGggLSAxOyB4ICs9IDgpIHsKKwkJCW1ha2VfOHg4KHBJbiwgcE91dCwgZnJhbWUtPnJhd3dpZHRoKTsKKwkJCXBJbiArPSA2NDsKKwkJCXBPdXQgKz0gODsKKwkJfQorCQlwT3V0TGluZSArPSA4ICogZnJhbWUtPnJhd3dpZHRoOworCX0KK30KKworLyoKKyAqIEZvciBZVVYgNDoyOjAgaW1hZ2VzLCB0aGUgZGF0YSBzaG93IHVwIGluIDM4NCBieXRlIHNlZ21lbnRzLgorICogVGhlIGZpcnN0IDY0IGJ5dGVzIG9mIGVhY2ggc2VnbWVudCBhcmUgVSwgdGhlIG5leHQgNjQgYXJlIFYuICBUaGUgVSBhbmQKKyAqIFYgYXJlIGFycmFuZ2VkIGFzIGZvbGxvd3M6CisgKgorICogICAgICAwICAxIC4uLiAgNworICogICAgICA4ICA5IC4uLiAxNQorICogICAgICAgICAgIC4uLiAgIAorICogICAgIDU2IDU3IC4uLiA2MworICoKKyAqIFUgYW5kIFYgYXJlIHNoaXBwZWQgYXQgaGFsZiByZXNvbHV0aW9uICgxIFUsViBzYW1wbGUgLT4gb25lIDJ4MiBibG9jaykuCisgKgorICogVGhlIG5leHQgMjU2IGJ5dGVzIGFyZSBmdWxsIHJlc29sdXRpb24gWSBkYXRhIGFuZCByZXByZXNlbnQgNCBzcXVhcmVzCisgKiBvZiA4eDggcGl4ZWxzIGFzIGZvbGxvd3M6CisgKgorICogICAgICAwICAxIC4uLiAgNyAgICA2NCAgNjUgLi4uICA3MSAgIC4uLiAgMTkyIDE5MyAuLi4gMTk5CisgKiAgICAgIDggIDkgLi4uIDE1ICAgIDcyICA3MyAuLi4gIDc5ICAgICAgICAyMDAgMjAxIC4uLiAyMDcKKyAqICAgICAgICAgICAuLi4gICAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgLi4uCisgKiAgICAgNTYgNTcgLi4uIDYzICAgMTIwIDEyMSAuLi4gMTI3ICAgLi4uICAyNDggMjQ5IC4uLiAyNTUKKyAqCisgKiBOb3RlIHRoYXQgdGhlIFUgYW5kIFYgZGF0YSBpbiBvbmUgc2VnbWVudCByZXByZXNlbnQgYSAxNiB4IDE2IHBpeGVsCisgKiBhcmVhLCBidXQgdGhlIFkgZGF0YSByZXByZXNlbnQgYSAzMiB4IDggcGl4ZWwgYXJlYS4gSWYgdGhlIHdpZHRoIGlzIG5vdCBhbgorICogZXZlbiBtdWx0aXBsZSBvZiAzMiwgdGhlIGV4dHJhIDh4OCBibG9ja3Mgd2l0aGluIGEgMzJ4OCBibG9jayBiZWxvbmcgdG8gdGhlCisgKiBuZXh0IGhvcml6b250YWwgc3RyaXBlLgorICoKKyAqIElmIGR1bXBwaXggbW9kdWxlIHBhcmFtIGlzIHNldCwgX3BhcnNlX2RhdGEganVzdCBkdW1wcyB0aGUgaW5jb21pbmcgc2VnbWVudHMsCisgKiB2ZXJiYXRpbSwgaW4gb3JkZXIsIGludG8gdGhlIGZyYW1lLiBXaGVuIHVzZWQgd2l0aCB2aWRjYXQgLWYgcHBtIC1zIDY0MHg0ODAKKyAqIHRoaXMgcHV0cyB0aGUgZGF0YSBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0IGFuZCBjYW4gYmUgYW5hbHl6ZWQgd2l0aCB0aGUKKyAqIHBhcnNlcHBtLmMgdXRpbGl0eSBJIHdyb3RlLiAgVGhhdCdzIGEgbXVjaCBmYXN0ZXIgd2F5IGZvciBmaWd1cmluZyBvdXQgaG93CisgKiB0aGVzZSBkYXRhIGFyZSBzY3JhbWJsZWQuCisgKi8KKworLyogQ29udmVydHMgZnJvbSByYXcsIHVuY29tcHJlc3NlZCBzZWdtZW50cyBhdCBwSW4wIHRvIGEgWVVWNDIwUCBmcmFtZSBhdCBwT3V0MC4KKyAqCisgKiBGSVhNRTogQ3VycmVudGx5IG9ubHkgaGFuZGxlcyB3aWR0aCBhbmQgaGVpZ2h0IHRoYXQgYXJlIG11bHRpcGxlcyBvZiAxNgorICovCitzdGF0aWMgdm9pZAoreXV2NDIwcmF3X3RvX3l1djQyMHAoc3RydWN0IG92NTExX2ZyYW1lICpmcmFtZSwKKwkJICAgICB1bnNpZ25lZCBjaGFyICpwSW4wLCB1bnNpZ25lZCBjaGFyICpwT3V0MCkKK3sKKwlpbnQgaywgeCwgeTsKKwl1bnNpZ25lZCBjaGFyICpwSW4sICpwT3V0LCAqcE91dExpbmU7CisJY29uc3QgdW5zaWduZWQgaW50IGEgPSBmcmFtZS0+cmF3d2lkdGggKiBmcmFtZS0+cmF3aGVpZ2h0OworCWNvbnN0IHVuc2lnbmVkIGludCB3ID0gZnJhbWUtPnJhd3dpZHRoIC8gMjsKKworCS8qIENvcHkgVSBhbmQgViAqLworCXBJbiA9IHBJbjA7CisJcE91dExpbmUgPSBwT3V0MCArIGE7CisJZm9yICh5ID0gMDsgeSA8IGZyYW1lLT5yYXdoZWlnaHQgLSAxOyB5ICs9IDE2KSB7CisJCXBPdXQgPSBwT3V0TGluZTsKKwkJZm9yICh4ID0gMDsgeCA8IGZyYW1lLT5yYXd3aWR0aCAtIDE7IHggKz0gMTYpIHsKKwkJCW1ha2VfOHg4KHBJbiwgcE91dCwgdyk7CisJCQltYWtlXzh4OChwSW4gKyA2NCwgcE91dCArIGEvNCwgdyk7CisJCQlwSW4gKz0gMzg0OworCQkJcE91dCArPSA4OworCQl9CisJCXBPdXRMaW5lICs9IDggKiB3OworCX0KKworCS8qIENvcHkgWSAqLworCXBJbiA9IHBJbjAgKyAxMjg7CisJcE91dExpbmUgPSBwT3V0MDsKKwlrID0gMDsKKwlmb3IgKHkgPSAwOyB5IDwgZnJhbWUtPnJhd2hlaWdodCAtIDE7IHkgKz0gOCkgeworCQlwT3V0ID0gcE91dExpbmU7CisJCWZvciAoeCA9IDA7IHggPCBmcmFtZS0+cmF3d2lkdGggLSAxOyB4ICs9IDgpIHsKKwkJCW1ha2VfOHg4KHBJbiwgcE91dCwgZnJhbWUtPnJhd3dpZHRoKTsKKwkJCXBJbiArPSA2NDsKKwkJCXBPdXQgKz0gODsKKwkJCWlmICgoKytrKSA+IDMpIHsKKwkJCQlrID0gMDsKKwkJCQlwSW4gKz0gMTI4OworCQkJfQorCQl9CisJCXBPdXRMaW5lICs9IDggKiBmcmFtZS0+cmF3d2lkdGg7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIERlY29tcHJlc3Npb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQ2hvb3NlcyBhIGRlY29tcHJlc3Npb24gbW9kdWxlLCBsb2NrcyBpdCwgYW5kIHNldHMgb3YtPmRlY29tcF9vcHMKKyAqIGFjY29yZGluZ2x5LiBSZXR1cm5zIC1FTlhJTyBpZiBkZWNvbXByZXNzb3IgaXMgbm90IGF2YWlsYWJsZSwgb3RoZXJ3aXNlCisgKiByZXR1cm5zIDAgaWYgbm8gb3RoZXIgZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQKK3JlcXVlc3RfZGVjb21wcmVzc29yKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCWlmICghb3YpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKG92LT5kZWNvbXBfb3BzKSB7CisJCWVycigiRVJST1I6IERlY29tcHJlc3NvciBhbHJlYWR5IHJlcXVlc3RlZCEiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbG9ja19rZXJuZWwoKTsKKworCS8qIFRyeSB0byBnZXQgTU1YLCBhbmQgZmFsbCBiYWNrIG9uIG5vLU1NWCBpZiBuZWNlc3NhcnkgKi8KKwlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTEpIHsKKwkJaWYgKG92NTExX21teF9kZWNvbXBfb3BzKSB7CisJCQlQREVCVUcoMywgIlVzaW5nIE9WNTExIE1NWCBkZWNvbXByZXNzb3IiKTsKKwkJCW92LT5kZWNvbXBfb3BzID0gb3Y1MTFfbW14X2RlY29tcF9vcHM7CisJCX0gZWxzZSBpZiAob3Y1MTFfZGVjb21wX29wcykgeworCQkJUERFQlVHKDMsICJVc2luZyBPVjUxMSBkZWNvbXByZXNzb3IiKTsKKwkJCW92LT5kZWNvbXBfb3BzID0gb3Y1MTFfZGVjb21wX29wczsKKwkJfSBlbHNlIHsKKwkJCWVycigiTm8gZGVjb21wcmVzc29yIGF2YWlsYWJsZSIpOworCQl9CisJfSBlbHNlIGlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgeworCQlpZiAob3Y1MThfbW14X2RlY29tcF9vcHMpIHsKKwkJCVBERUJVRygzLCAiVXNpbmcgT1Y1MTggTU1YIGRlY29tcHJlc3NvciIpOworCQkJb3YtPmRlY29tcF9vcHMgPSBvdjUxOF9tbXhfZGVjb21wX29wczsKKwkJfSBlbHNlIGlmIChvdjUxOF9kZWNvbXBfb3BzKSB7CisJCQlQREVCVUcoMywgIlVzaW5nIE9WNTE4IGRlY29tcHJlc3NvciIpOworCQkJb3YtPmRlY29tcF9vcHMgPSBvdjUxOF9kZWNvbXBfb3BzOworCQl9IGVsc2UgeworCQkJZXJyKCJObyBkZWNvbXByZXNzb3IgYXZhaWxhYmxlIik7CisJCX0KKwl9IGVsc2UgeworCQllcnIoIlVua25vd24gYnJpZGdlIik7CisJfQorCisJaWYgKCFvdi0+ZGVjb21wX29wcykKKwkJZ290byBub3N5czsKKworCWlmICghb3YtPmRlY29tcF9vcHMtPm93bmVyKSB7CisJCW92LT5kZWNvbXBfb3BzID0gTlVMTDsKKwkJZ290byBub3N5czsKKwl9CisJCisJaWYgKCF0cnlfbW9kdWxlX2dldChvdi0+ZGVjb21wX29wcy0+b3duZXIpKQorCQlnb3RvIG5vc3lzOworCisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiAwOworCisgbm9zeXM6CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiAtRU5PU1lTOworfQorCisvKiBVbmxvY2tzIGRlY29tcHJlc3Npb24gbW9kdWxlIGFuZCBudWxscyBvdi0+ZGVjb21wX29wcy4gU2FmZSB0byBjYWxsIGV2ZW4KKyAqIGlmIG92LT5kZWNvbXBfb3BzIGlzIE5VTEwuCisgKi8KK3N0YXRpYyB2b2lkCityZWxlYXNlX2RlY29tcHJlc3NvcihzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlpbnQgcmVsZWFzZWQgPSAwOwkvKiBEaWQgd2UgYWN0dWFsbHkgZG8gYW55dGhpbmc/ICovCisKKwlpZiAoIW92KQorCQlyZXR1cm47CisKKwlsb2NrX2tlcm5lbCgpOworCisJaWYgKG92LT5kZWNvbXBfb3BzKSB7CisJCW1vZHVsZV9wdXQob3YtPmRlY29tcF9vcHMtPm93bmVyKTsKKwkJcmVsZWFzZWQgPSAxOworCX0KKworCW92LT5kZWNvbXBfb3BzID0gTlVMTDsKKworCXVubG9ja19rZXJuZWwoKTsKKworCWlmIChyZWxlYXNlZCkKKwkJUERFQlVHKDMsICJEZWNvbXByZXNzb3IgcmVsZWFzZWQiKTsKK30KKworc3RhdGljIHZvaWQKK2RlY29tcHJlc3Moc3RydWN0IHVzYl9vdjUxMSAqb3YsIHN0cnVjdCBvdjUxMV9mcmFtZSAqZnJhbWUsCisJICAgdW5zaWduZWQgY2hhciAqcEluMCwgdW5zaWduZWQgY2hhciAqcE91dDApCit7CisJaWYgKCFvdi0+ZGVjb21wX29wcykKKwkJaWYgKHJlcXVlc3RfZGVjb21wcmVzc29yKG92KSkKKwkJCXJldHVybjsKKworCVBERUJVRyg0LCAiRGVjb21wcmVzc2luZyAlZCBieXRlcyIsIGZyYW1lLT5ieXRlc19yZWN2ZCk7CisKKwlpZiAoZnJhbWUtPmZvcm1hdCA9PSBWSURFT19QQUxFVFRFX0dSRVkKKwkgICAgJiYgb3YtPmRlY29tcF9vcHMtPmRlY29tcF80MDApIHsKKwkJaW50IHJldCA9IG92LT5kZWNvbXBfb3BzLT5kZWNvbXBfNDAwKAorCQkJcEluMCwKKwkJCXBPdXQwLAorCQkJZnJhbWUtPmNvbXBidWYsCisJCQlmcmFtZS0+cmF3d2lkdGgsCisJCQlmcmFtZS0+cmF3aGVpZ2h0LAorCQkJZnJhbWUtPmJ5dGVzX3JlY3ZkKTsKKwkJUERFQlVHKDQsICJERUJVRzogZGVjb21wXzQwMCByZXR1cm5lZCAlZCIsIHJldCk7CisJfSBlbHNlIGlmIChmcmFtZS0+Zm9ybWF0ICE9IFZJREVPX1BBTEVUVEVfR1JFWQorCQkgICAmJiBvdi0+ZGVjb21wX29wcy0+ZGVjb21wXzQyMCkgeworCQlpbnQgcmV0ID0gb3YtPmRlY29tcF9vcHMtPmRlY29tcF80MjAoCisJCQlwSW4wLAorCQkJcE91dDAsCisJCQlmcmFtZS0+Y29tcGJ1ZiwKKwkJCWZyYW1lLT5yYXd3aWR0aCwKKwkJCWZyYW1lLT5yYXdoZWlnaHQsCisJCQlmcmFtZS0+Ynl0ZXNfcmVjdmQpOworCQlQREVCVUcoNCwgIkRFQlVHOiBkZWNvbXBfNDIwIHJldHVybmVkICVkIiwgcmV0KTsKKwl9IGVsc2UgeworCQllcnIoIkRlY29tcHJlc3NvciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZm9ybWF0Iik7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZvcm1hdCBjb252ZXJzaW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEZ1c2VzIGV2ZW4gYW5kIG9kZCBmaWVsZHMgdG9nZXRoZXIsIGFuZCBkb3VibGVzIHdpZHRoLgorICogSU5QVVQ6IGFuIG9kZCBmaWVsZCBmb2xsb3dlZCBieSBhbiBldmVuIGZpZWxkIGF0IHBJbjAsIGluIFlVViBwbGFuYXIgZm9ybWF0CisgKiBPVVRQVVQ6IGEgbm9ybWFsIFlVViBwbGFuYXIgaW1hZ2UsIHdpdGggY29ycmVjdCBhc3BlY3QgcmF0aW8KKyAqLworc3RhdGljIHZvaWQKK2RlaW50ZXJsYWNlKHN0cnVjdCBvdjUxMV9mcmFtZSAqZnJhbWUsIGludCByYXdmb3JtYXQsCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwSW4wLCB1bnNpZ25lZCBjaGFyICpwT3V0MCkKK3sKKwljb25zdCBpbnQgZmllbGRoZWlnaHQgPSBmcmFtZS0+cmF3aGVpZ2h0IC8gMjsKKwljb25zdCBpbnQgZmllbGRwaXggPSBmaWVsZGhlaWdodCAqIGZyYW1lLT5yYXd3aWR0aDsKKwljb25zdCBpbnQgdyA9IGZyYW1lLT53aWR0aDsKKwlpbnQgeCwgeTsKKwl1bnNpZ25lZCBjaGFyICpwSW5FdmVuLCAqcEluT2RkLCAqcE91dDsKKworCVBERUJVRyg1LCAiZmllbGRoZWlnaHQ9JWQiLCBmaWVsZGhlaWdodCk7CisKKwlpZiAoZnJhbWUtPnJhd2hlaWdodCAhPSBmcmFtZS0+aGVpZ2h0KSB7CisJCWVycigiaW52YWxpZCBoZWlnaHQiKTsKKwkJcmV0dXJuOworCX0KKworCWlmICgoZnJhbWUtPnJhd3dpZHRoICogMikgIT0gZnJhbWUtPndpZHRoKSB7CisJCWVycigiaW52YWxpZCB3aWR0aCIpOworCQlyZXR1cm47CisJfQorCisJLyogWSAqLworCXBJbk9kZCA9IHBJbjA7CisJcEluRXZlbiA9IHBJbk9kZCArIGZpZWxkcGl4OworCXBPdXQgPSBwT3V0MDsKKwlmb3IgKHkgPSAwOyB5IDwgZmllbGRoZWlnaHQ7IHkrKykgeworCQlmb3IgKHggPSAwOyB4IDwgZnJhbWUtPnJhd3dpZHRoOyB4KyspIHsKKwkJCSpwT3V0ID0gKnBJbkV2ZW47CisJCQkqKHBPdXQrMSkgPSAqcEluRXZlbisrOworCQkJKihwT3V0K3cpID0gKnBJbk9kZDsKKwkJCSoocE91dCt3KzEpID0gKnBJbk9kZCsrOworCQkJcE91dCArPSAyOworCQl9CisJCXBPdXQgKz0gdzsKKwl9CisKKwlpZiAocmF3Zm9ybWF0ID09IFJBV0ZNVF9ZVVY0MjApIHsKKwkvKiBVICovCisJCXBJbk9kZCA9IHBJbjAgKyBmaWVsZHBpeCAqIDI7CisJCXBJbkV2ZW4gPSBwSW5PZGQgKyBmaWVsZHBpeCAvIDQ7CisJCWZvciAoeSA9IDA7IHkgPCBmaWVsZGhlaWdodCAvIDI7IHkrKykgeworCQkJZm9yICh4ID0gMDsgeCA8IGZyYW1lLT5yYXd3aWR0aCAvIDI7IHgrKykgeworCQkJCSpwT3V0ID0gKnBJbkV2ZW47CisJCQkJKihwT3V0KzEpID0gKnBJbkV2ZW4rKzsKKwkJCQkqKHBPdXQrdy8yKSA9ICpwSW5PZGQ7CisJCQkJKihwT3V0K3cvMisxKSA9ICpwSW5PZGQrKzsKKwkJCQlwT3V0ICs9IDI7CisJCQl9CisJCQlwT3V0ICs9IHcvMjsKKwkJfQorCS8qIFYgKi8KKwkJcEluT2RkID0gcEluMCArIGZpZWxkcGl4ICogMiArIGZpZWxkcGl4IC8gMjsKKwkJcEluRXZlbiA9IHBJbk9kZCArIGZpZWxkcGl4IC8gNDsKKwkJZm9yICh5ID0gMDsgeSA8IGZpZWxkaGVpZ2h0IC8gMjsgeSsrKSB7CisJCQlmb3IgKHggPSAwOyB4IDwgZnJhbWUtPnJhd3dpZHRoIC8gMjsgeCsrKSB7CisJCQkJKnBPdXQgPSAqcEluRXZlbjsKKwkJCQkqKHBPdXQrMSkgPSAqcEluRXZlbisrOworCQkJCSoocE91dCt3LzIpID0gKnBJbk9kZDsKKwkJCQkqKHBPdXQrdy8yKzEpID0gKnBJbk9kZCsrOworCQkJCXBPdXQgKz0gMjsKKwkJCX0KKwkJCXBPdXQgKz0gdy8yOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAorb3Y1MXhfcG9zdHByb2Nlc3NfZ3JleShzdHJ1Y3QgdXNiX292NTExICpvdiwgc3RydWN0IG92NTExX2ZyYW1lICpmcmFtZSkKK3sKKwkJLyogRGVpbnRlcmxhY2UgZnJhbWUsIGlmIG5lY2Vzc2FyeSAqLworCQlpZiAob3YtPnNlbnNvciA9PSBTRU5fU0FBNzExMUEgJiYgZnJhbWUtPnJhd2hlaWdodCA+PSA0ODApIHsKKwkJCWlmIChmcmFtZS0+Y29tcHJlc3NlZCkKKwkJCQlkZWNvbXByZXNzKG92LCBmcmFtZSwgZnJhbWUtPnJhd2RhdGEsCisJCQkJCQkgZnJhbWUtPnRlbXBkYXRhKTsKKwkJCWVsc2UKKwkJCQl5dXY0MDByYXdfdG9feXV2NDAwcChmcmFtZSwgZnJhbWUtPnJhd2RhdGEsCisJCQkJCQkgICAgIGZyYW1lLT50ZW1wZGF0YSk7CisKKwkJCWRlaW50ZXJsYWNlKGZyYW1lLCBSQVdGTVRfWVVWNDAwLCBmcmFtZS0+dGVtcGRhdGEsCisJCQkgICAgICAgICAgICBmcmFtZS0+ZGF0YSk7CisJCX0gZWxzZSB7CisJCQlpZiAoZnJhbWUtPmNvbXByZXNzZWQpCisJCQkJZGVjb21wcmVzcyhvdiwgZnJhbWUsIGZyYW1lLT5yYXdkYXRhLAorCQkJCQkJIGZyYW1lLT5kYXRhKTsKKwkJCWVsc2UKKwkJCQl5dXY0MDByYXdfdG9feXV2NDAwcChmcmFtZSwgZnJhbWUtPnJhd2RhdGEsCisJCQkJCQkgICAgIGZyYW1lLT5kYXRhKTsKKwkJfQorfQorCisvKiBQcm9jZXNzIHJhdyBZVVY0MjAgZGF0YSBpbnRvIHN0YW5kYXJkIFlVVjQyMFAgKi8KK3N0YXRpYyB2b2lkCitvdjUxeF9wb3N0cHJvY2Vzc195dXY0MjAoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHN0cnVjdCBvdjUxMV9mcmFtZSAqZnJhbWUpCit7CisJLyogRGVpbnRlcmxhY2UgZnJhbWUsIGlmIG5lY2Vzc2FyeSAqLworCWlmIChvdi0+c2Vuc29yID09IFNFTl9TQUE3MTExQSAmJiBmcmFtZS0+cmF3aGVpZ2h0ID49IDQ4MCkgeworCQlpZiAoZnJhbWUtPmNvbXByZXNzZWQpCisJCQlkZWNvbXByZXNzKG92LCBmcmFtZSwgZnJhbWUtPnJhd2RhdGEsIGZyYW1lLT50ZW1wZGF0YSk7CisJCWVsc2UKKwkJCXl1djQyMHJhd190b195dXY0MjBwKGZyYW1lLCBmcmFtZS0+cmF3ZGF0YSwKKwkJCQkJICAgICBmcmFtZS0+dGVtcGRhdGEpOworCisJCWRlaW50ZXJsYWNlKGZyYW1lLCBSQVdGTVRfWVVWNDIwLCBmcmFtZS0+dGVtcGRhdGEsCisJCSAgICAgICAgICAgIGZyYW1lLT5kYXRhKTsKKwl9IGVsc2UgeworCQlpZiAoZnJhbWUtPmNvbXByZXNzZWQpCisJCQlkZWNvbXByZXNzKG92LCBmcmFtZSwgZnJhbWUtPnJhd2RhdGEsIGZyYW1lLT5kYXRhKTsKKwkJZWxzZQorCQkJeXV2NDIwcmF3X3RvX3l1djQyMHAoZnJhbWUsIGZyYW1lLT5yYXdkYXRhLAorCQkJCQkgICAgIGZyYW1lLT5kYXRhKTsKKwl9Cit9CisKKy8qIFBvc3QtcHJvY2Vzc2VzIHRoZSBzcGVjaWZpZWQgZnJhbWUuIFRoaXMgY29uc2lzdHMgb2Y6CisgKiAJMS4gRGVjb21wcmVzcyBmcmFtZSwgaWYgbmVjZXNzYXJ5CisgKgkyLiBEZWludGVybGFjZSBmcmFtZSBhbmQgc2NhbGUgdG8gcHJvcGVyIHNpemUsIGlmIG5lY2Vzc2FyeQorICogCTMuIENvbnZlcnQgZnJvbSBZVVYgcGxhbmFyIHRvIGRlc3RpbmF0aW9uIGZvcm1hdCwgaWYgbmVjZXNzYXJ5CisgKiAJNC4gRml4IHRoZSBSR0Igb2Zmc2V0LCBpZiBuZWNlc3NhcnkKKyAqLworc3RhdGljIHZvaWQKK292NTF4X3Bvc3Rwcm9jZXNzKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBzdHJ1Y3Qgb3Y1MTFfZnJhbWUgKmZyYW1lKQoreworCWlmIChkdW1wcGl4KSB7CisJCW1lbXNldChmcmFtZS0+ZGF0YSwgMCwKKwkJCU1BWF9EQVRBX1NJWkUob3YtPm1heHdpZHRoLCBvdi0+bWF4aGVpZ2h0KSk7CisJCVBERUJVRyg0LCAiRHVtcGluZyAlZCBieXRlcyIsIGZyYW1lLT5ieXRlc19yZWN2ZCk7CisJCW1lbWNweShmcmFtZS0+ZGF0YSwgZnJhbWUtPnJhd2RhdGEsIGZyYW1lLT5ieXRlc19yZWN2ZCk7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChmcmFtZS0+Zm9ybWF0KSB7CisJCWNhc2UgVklERU9fUEFMRVRURV9HUkVZOgorCQkJb3Y1MXhfcG9zdHByb2Nlc3NfZ3JleShvdiwgZnJhbWUpOworCQkJYnJlYWs7CisJCWNhc2UgVklERU9fUEFMRVRURV9ZVVY0MjA6CisJCWNhc2UgVklERU9fUEFMRVRURV9ZVVY0MjBQOgorCQkJb3Y1MXhfcG9zdHByb2Nlc3NfeXV2NDIwKG92LCBmcmFtZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVycigiQ2Fubm90IGNvbnZlcnQgZGF0YSB0byAlcyIsCisJCQkgICAgc3ltYm9saWModjRsMV9wbGlzdCwgZnJhbWUtPmZvcm1hdCkpOworCQl9CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE9WNTF4IGRhdGEgdHJhbnNmZXIsIElSUSBoYW5kbGVyCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorb3Y1MTFfbW92ZV9kYXRhKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBjaGFyICppbiwgaW50IG4pCit7CisJaW50IG51bSwgb2Zmc2V0OworCWludCBwbnVtID0gaW5bb3YtPnBhY2tldF9zaXplIC0gMV07CQkvKiBHZXQgcGFja2V0IG51bWJlciAqLworCWludCBtYXhfcmF3ID0gTUFYX1JBV19EQVRBX1NJWkUob3YtPm1heHdpZHRoLCBvdi0+bWF4aGVpZ2h0KTsKKwlzdHJ1Y3Qgb3Y1MTFfZnJhbWUgKmZyYW1lID0gJm92LT5mcmFtZVtvdi0+Y3VyZnJhbWVdOworCXN0cnVjdCB0aW1ldmFsICp0czsKKworCS8qIFNPRi9FT0YgcGFja2V0cyBoYXZlIDFzdCB0byA4dGggYnl0ZXMgemVyb2VkIGFuZCB0aGUgOXRoCisJICogYnl0ZSBub24temVyby4gVGhlIEVPRiBwYWNrZXQgaGFzIGltYWdlIHdpZHRoL2hlaWdodCBpbiB0aGUKKwkgKiAxMHRoIGFuZCAxMXRoIGJ5dGVzLiBUaGUgOXRoIGJ5dGUgaXMgZ2l2ZW4gYXMgZm9sbG93czoKKwkgKgorCSAqIGJpdCA3OiBFT0YKKwkgKiAgICAgNjogY29tcHJlc3Npb24gZW5hYmxlZAorCSAqICAgICA1OiA0MjIvNDIwLzQwMCBtb2RlcworCSAqICAgICA0OiA0MjIvNDIwLzQwMCBtb2RlcworCSAqICAgICAzOiAxCisJICogICAgIDI6IHNuYXBzaG90IGJ1dHRvbiBvbgorCSAqICAgICAxOiBzbmFwc2hvdCBmcmFtZQorCSAqICAgICAwOiBldmVuL29kZCBmaWVsZAorCSAqLworCisJaWYgKHByaW50cGgpIHsKKwkJaW5mbygicGgoJTNkKTogJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMngiLAorCQkgICAgIHBudW0sIGluWzBdLCBpblsxXSwgaW5bMl0sIGluWzNdLCBpbls0XSwgaW5bNV0sIGluWzZdLAorCQkgICAgIGluWzddLCBpbls4XSwgaW5bOV0sIGluWzEwXSwgaW5bMTFdKTsKKwl9CisKKwkvKiBDaGVjayBmb3IgU09GL0VPRiBwYWNrZXQgKi8KKwlpZiAoKGluWzBdIHwgaW5bMV0gfCBpblsyXSB8IGluWzNdIHwgaW5bNF0gfCBpbls1XSB8IGluWzZdIHwgaW5bN10pIHx8CisJICAgICh+aW5bOF0gJiAweDA4KSkKKwkJZ290byBjaGVja19taWRkbGU7CisKKwkvKiBGcmFtZSBlbmQgKi8KKwlpZiAoaW5bOF0gJiAweDgwKSB7CisJCXRzID0gKHN0cnVjdCB0aW1ldmFsICopKGZyYW1lLT5kYXRhCisJCSAgICAgICsgTUFYX0ZSQU1FX1NJWkUob3YtPm1heHdpZHRoLCBvdi0+bWF4aGVpZ2h0KSk7CisJCWRvX2dldHRpbWVvZmRheSh0cyk7CisKKwkJLyogR2V0IHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBmcm9tIHRoZSBFT0YgaGVhZGVyICovCisJCWZyYW1lLT5yYXd3aWR0aCA9ICgoaW50KShpbls5XSkgKyAxKSAqIDg7CisJCWZyYW1lLT5yYXdoZWlnaHQgPSAoKGludCkoaW5bMTBdKSArIDEpICogODsKKworIAkJUERFQlVHKDQsICJGcmFtZSBlbmQsIGZyYW1lPSVkLCBwbnVtPSVkLCB3PSVkLCBoPSVkLCByZWN2ZD0lZCIsCisJCQlvdi0+Y3VyZnJhbWUsIHBudW0sIGZyYW1lLT5yYXd3aWR0aCwgZnJhbWUtPnJhd2hlaWdodCwKKwkJCWZyYW1lLT5ieXRlc19yZWN2ZCk7CisKKwkJLyogVmFsaWRhdGUgdGhlIGhlYWRlciBkYXRhICovCisJCVJFU1RSSUNUX1RPX1JBTkdFKGZyYW1lLT5yYXd3aWR0aCwgb3YtPm1pbndpZHRoLCBvdi0+bWF4d2lkdGgpOworCQlSRVNUUklDVF9UT19SQU5HRShmcmFtZS0+cmF3aGVpZ2h0LCBvdi0+bWluaGVpZ2h0LAorCQkJCSAgb3YtPm1heGhlaWdodCk7CisKKwkJLyogRG9uJ3QgYWxsb3cgYnl0ZSBjb3VudCB0byBleGNlZWQgYnVmZmVyIHNpemUgKi8KKwkJUkVTVFJJQ1RfVE9fUkFOR0UoZnJhbWUtPmJ5dGVzX3JlY3ZkLCA4LCBtYXhfcmF3KTsKKworCQlpZiAoZnJhbWUtPnNjYW5zdGF0ZSA9PSBTVEFURV9MSU5FUykgeworCSAgICAJCWludCBuZXh0ZjsKKworCQkJZnJhbWUtPmdyYWJzdGF0ZSA9IEZSQU1FX0RPTkU7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmZyYW1lLT53cSk7CisKKwkJCS8qIElmIG5leHQgZnJhbWUgaXMgcmVhZHkgb3IgZ3JhYmJpbmcsCisJCQkgKiBwb2ludCB0byBpdCAqLworCQkJbmV4dGYgPSAob3YtPmN1cmZyYW1lICsgMSkgJSBPVjUxMV9OVU1GUkFNRVM7CisJCQlpZiAob3YtPmZyYW1lW25leHRmXS5ncmFic3RhdGUgPT0gRlJBTUVfUkVBRFkKKwkJCSAgICB8fCBvdi0+ZnJhbWVbbmV4dGZdLmdyYWJzdGF0ZSA9PSBGUkFNRV9HUkFCQklORykgeworCQkJCW92LT5jdXJmcmFtZSA9IG5leHRmOworCQkJCW92LT5mcmFtZVtuZXh0Zl0uc2NhbnN0YXRlID0gU1RBVEVfU0NBTk5JTkc7CisJCQl9IGVsc2UgeworCQkJCWlmIChmcmFtZS0+Z3JhYnN0YXRlID09IEZSQU1FX0RPTkUpIHsKKwkJCQkJUERFQlVHKDQsICIqKiBGcmFtZSBkb25lICoqIik7CisJCQkJfSBlbHNlIHsKKwkJCQkJUERFQlVHKDQsICJGcmFtZSBub3QgcmVhZHk/IHN0YXRlID0gJWQiLAorCQkJCQkJb3YtPmZyYW1lW25leHRmXS5ncmFic3RhdGUpOworCQkJCX0KKworCQkJCW92LT5jdXJmcmFtZSA9IC0xOworCQkJfQorCQl9IGVsc2UgeworCQkJUERFQlVHKDUsICJGcmFtZSBkb25lLCBidXQgbm90IHNjYW5uaW5nIik7CisJCX0KKwkJLyogSW1hZ2UgY29ycnVwdGlvbiBjYXVzZWQgYnkgbWlzcGxhY2VkIGZyYW1lLT5zZWdtZW50ID0gMAorCQkgKiBmaXhlZCBieSBjYXJsb3NmQGNvbmVjdGl2YS5jb20uYnIKKwkJICovCisJfSBlbHNlIHsKKwkJLyogRnJhbWUgc3RhcnQgKi8KKwkJUERFQlVHKDQsICJGcmFtZSBzdGFydCwgZnJhbWVudW0gPSAlZCIsIG92LT5jdXJmcmFtZSk7CisKKwkJLyogQ2hlY2sgdG8gc2VlIGlmIGl0J3MgYSBzbmFwc2hvdCBmcmFtZSAqLworCQkvKiBGSVhNRT8/IFNob3VsZCB0aGUgc25hcHNob3QgcmVzZXQgZ28gaGVyZT8gUGVyZm9ybWFuY2U/ICovCisJCWlmIChpbls4XSAmIDB4MDIpIHsKKwkJCWZyYW1lLT5zbmFwc2hvdCA9IDE7CisJCQlQREVCVUcoMywgInNuYXBzaG90IGRldGVjdGVkIik7CisJCX0KKworCQlmcmFtZS0+c2NhbnN0YXRlID0gU1RBVEVfTElORVM7CisJCWZyYW1lLT5ieXRlc19yZWN2ZCA9IDA7CisJCWZyYW1lLT5jb21wcmVzc2VkID0gaW5bOF0gJiAweDQwOworCX0KKworY2hlY2tfbWlkZGxlOgorCS8qIEFyZSB3ZSBpbiBhIGZyYW1lPyAqLworCWlmIChmcmFtZS0+c2NhbnN0YXRlICE9IFNUQVRFX0xJTkVTKSB7CisJCVBERUJVRyg1LCAiTm90IGluIGEgZnJhbWU7IHBhY2tldCBza2lwcGVkIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBJZiBmcmFtZSBzdGFydCwgc2tpcCBoZWFkZXIgKi8KKwlpZiAoZnJhbWUtPmJ5dGVzX3JlY3ZkID09IDApCisJCW9mZnNldCA9IDk7CisJZWxzZQorCQlvZmZzZXQgPSAwOworCisJbnVtID0gbiAtIG9mZnNldCAtIDE7CisKKwkvKiBEdW1wIGFsbCBkYXRhIGV4YWN0bHkgYXMgcmVjZWl2ZWQgKi8KKwlpZiAoZHVtcHBpeCA9PSAyKSB7CisJCWZyYW1lLT5ieXRlc19yZWN2ZCArPSBuIC0gMTsKKwkJaWYgKGZyYW1lLT5ieXRlc19yZWN2ZCA8PSBtYXhfcmF3KQorCQkJbWVtY3B5KGZyYW1lLT5yYXdkYXRhICsgZnJhbWUtPmJ5dGVzX3JlY3ZkIC0gKG4gLSAxKSwKKwkJCQlpbiwgbiAtIDEpOworCQllbHNlCisJCQlQREVCVUcoMywgIlJhdyBkYXRhIGJ1ZmZlciBvdmVycnVuISEgKCVkKSIsCisJCQkJZnJhbWUtPmJ5dGVzX3JlY3ZkIC0gbWF4X3Jhdyk7CisJfSBlbHNlIGlmICghZnJhbWUtPmNvbXByZXNzZWQgJiYgIXJlbW92ZV96ZXJvcykgeworCQlmcmFtZS0+Ynl0ZXNfcmVjdmQgKz0gbnVtOworCQlpZiAoZnJhbWUtPmJ5dGVzX3JlY3ZkIDw9IG1heF9yYXcpCisJCQltZW1jcHkoZnJhbWUtPnJhd2RhdGEgKyBmcmFtZS0+Ynl0ZXNfcmVjdmQgLSBudW0sCisJCQkJaW4gKyBvZmZzZXQsIG51bSk7CisJCWVsc2UKKwkJCVBERUJVRygzLCAiUmF3IGRhdGEgYnVmZmVyIG92ZXJydW4hISAoJWQpIiwKKwkJCQlmcmFtZS0+Ynl0ZXNfcmVjdmQgLSBtYXhfcmF3KTsKKwl9IGVsc2UgeyAvKiBSZW1vdmUgYWxsLXplcm8gRklGTyBsaW5lcyAoYWxpZ25lZCAzMi1ieXRlIGJsb2NrcykgKi8KKwkJaW50IGIsIHJlYWQgPSAwLCBhbGx6ZXJvLCBjb3BpZWQgPSAwOworCQlpZiAob2Zmc2V0KSB7CisJCQlmcmFtZS0+Ynl0ZXNfcmVjdmQgKz0gMzIgLSBvZmZzZXQ7CS8vIEJ5dGVzIG91dAorCQkJbWVtY3B5KGZyYW1lLT5yYXdkYXRhLAlpbiArIG9mZnNldCwgMzIgLSBvZmZzZXQpOworCQkJcmVhZCArPSAzMjsKKwkJfQorCisJCXdoaWxlIChyZWFkIDwgbiAtIDEpIHsKKwkJCWFsbHplcm8gPSAxOworCQkJZm9yIChiID0gMDsgYiA8IDMyOyBiKyspIHsKKwkJCQlpZiAoaW5bcmVhZCArIGJdKSB7CisJCQkJCWFsbHplcm8gPSAwOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChhbGx6ZXJvKSB7CisJCQkJLyogRG9uJ3QgY29weSBpdCAqLworCQkJfSBlbHNlIHsKKwkJCQlpZiAoZnJhbWUtPmJ5dGVzX3JlY3ZkICsgY29waWVkICsgMzIgPD0gbWF4X3JhdykKKwkJCQl7CisJCQkJCW1lbWNweShmcmFtZS0+cmF3ZGF0YQorCQkJCQkJKyBmcmFtZS0+Ynl0ZXNfcmVjdmQgKyBjb3BpZWQsCisJCQkJCQlpbiArIHJlYWQsIDMyKTsKKwkJCQkJY29waWVkICs9IDMyOworCQkJCX0gZWxzZSB7CisJCQkJCVBERUJVRygzLCAiUmF3IGRhdGEgYnVmZmVyIG92ZXJydW4hISIpOworCQkJCX0KKwkJCX0KKwkJCXJlYWQgKz0gMzI7CisJCX0KKworCQlmcmFtZS0+Ynl0ZXNfcmVjdmQgKz0gY29waWVkOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkCitvdjUxOF9tb3ZlX2RhdGEoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIGNoYXIgKmluLCBpbnQgbikKK3sKKwlpbnQgbWF4X3JhdyA9IE1BWF9SQVdfREFUQV9TSVpFKG92LT5tYXh3aWR0aCwgb3YtPm1heGhlaWdodCk7CisJc3RydWN0IG92NTExX2ZyYW1lICpmcmFtZSA9ICZvdi0+ZnJhbWVbb3YtPmN1cmZyYW1lXTsKKwlzdHJ1Y3QgdGltZXZhbCAqdHM7CisKKwkvKiBEb24ndCBjb3B5IHRoZSBwYWNrZXQgbnVtYmVyIGJ5dGUgKi8KKwlpZiAob3YtPnBhY2tldF9udW1iZXJpbmcpCisJCS0tbjsKKworCS8qIEEgZmFsc2UgcG9zaXRpdmUgaGVyZSBpcyBsaWtlbHksIHVudGlsIE9WVCBnaXZlcyBtZQorCSAqIHRoZSBkZWZpbml0aXZlIFNPRi9FT0YgZm9ybWF0ICovCisJaWYgKCghKGluWzBdIHwgaW5bMV0gfCBpblsyXSB8IGluWzNdIHwgaW5bNV0pKSAmJiBpbls2XSkgeworCQlpZiAocHJpbnRwaCkgeworCQkJaW5mbygicGg6ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMngiLCBpblswXSwKKwkJCSAgICAgaW5bMV0sIGluWzJdLCBpblszXSwgaW5bNF0sIGluWzVdLCBpbls2XSwgaW5bN10pOworCQl9CisKKwkJaWYgKGZyYW1lLT5zY2Fuc3RhdGUgPT0gU1RBVEVfTElORVMpIHsKKwkJCVBERUJVRyg0LCAiRGV0ZWN0ZWQgZnJhbWUgZW5kL3N0YXJ0Iik7CisJCQlnb3RvIGVvZjsKKwkJfSBlbHNlIHsgLy9zY2Fuc3RhdGUgPT0gU1RBVEVfU0NBTk5JTkcKKwkJCS8qIEZyYW1lIHN0YXJ0ICovCisJCQlQREVCVUcoNCwgIkZyYW1lIHN0YXJ0LCBmcmFtZW51bSA9ICVkIiwgb3YtPmN1cmZyYW1lKTsKKwkJCWdvdG8gc29mOworCQl9CisJfSBlbHNlIHsKKwkJZ290byBjaGVja19taWRkbGU7CisJfQorCitlb2Y6CisJdHMgPSAoc3RydWN0IHRpbWV2YWwgKikoZnJhbWUtPmRhdGEKKwkgICAgICArIE1BWF9GUkFNRV9TSVpFKG92LT5tYXh3aWR0aCwgb3YtPm1heGhlaWdodCkpOworCWRvX2dldHRpbWVvZmRheSh0cyk7CisKKwlQREVCVUcoNCwgIkZyYW1lIGVuZCwgY3VyZnJhbWUgPSAlZCwgaHc9JWQsIHZ3PSVkLCByZWN2ZD0lZCIsCisJCW92LT5jdXJmcmFtZSwKKwkJKGludCkoaW5bOV0pLCAoaW50KShpblsxMF0pLCBmcmFtZS0+Ynl0ZXNfcmVjdmQpOworCisJLy8gRklYTUU6IFNpbmNlIHdlIGRvbid0IGtub3cgdGhlIGhlYWRlciBmb3JtYXRzIHlldCwKKwkvLyB0aGVyZSBpcyBubyB3YXkgdG8ga25vdyB3aGF0IHRoZSBhY3R1YWwgaW1hZ2Ugc2l6ZSBpcworCWZyYW1lLT5yYXd3aWR0aCA9IGZyYW1lLT53aWR0aDsKKwlmcmFtZS0+cmF3aGVpZ2h0ID0gZnJhbWUtPmhlaWdodDsKKworCS8qIFZhbGlkYXRlIHRoZSBoZWFkZXIgZGF0YSAqLworCVJFU1RSSUNUX1RPX1JBTkdFKGZyYW1lLT5yYXd3aWR0aCwgb3YtPm1pbndpZHRoLCBvdi0+bWF4d2lkdGgpOworCVJFU1RSSUNUX1RPX1JBTkdFKGZyYW1lLT5yYXdoZWlnaHQsIG92LT5taW5oZWlnaHQsIG92LT5tYXhoZWlnaHQpOworCisJLyogRG9uJ3QgYWxsb3cgYnl0ZSBjb3VudCB0byBleGNlZWQgYnVmZmVyIHNpemUgKi8KKwlSRVNUUklDVF9UT19SQU5HRShmcmFtZS0+Ynl0ZXNfcmVjdmQsIDgsIG1heF9yYXcpOworCisJaWYgKGZyYW1lLT5zY2Fuc3RhdGUgPT0gU1RBVEVfTElORVMpIHsKKyAgICAJCWludCBuZXh0ZjsKKworCQlmcmFtZS0+Z3JhYnN0YXRlID0gRlJBTUVfRE9ORTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZmcmFtZS0+d3EpOworCisJCS8qIElmIG5leHQgZnJhbWUgaXMgcmVhZHkgb3IgZ3JhYmJpbmcsCisJCSAqIHBvaW50IHRvIGl0ICovCisJCW5leHRmID0gKG92LT5jdXJmcmFtZSArIDEpICUgT1Y1MTFfTlVNRlJBTUVTOworCQlpZiAob3YtPmZyYW1lW25leHRmXS5ncmFic3RhdGUgPT0gRlJBTUVfUkVBRFkKKwkJICAgIHx8IG92LT5mcmFtZVtuZXh0Zl0uZ3JhYnN0YXRlID09IEZSQU1FX0dSQUJCSU5HKSB7CisJCQlvdi0+Y3VyZnJhbWUgPSBuZXh0ZjsKKwkJCW92LT5mcmFtZVtuZXh0Zl0uc2NhbnN0YXRlID0gU1RBVEVfU0NBTk5JTkc7CisJCQlmcmFtZSA9ICZvdi0+ZnJhbWVbbmV4dGZdOworCQl9IGVsc2UgeworCQkJaWYgKGZyYW1lLT5ncmFic3RhdGUgPT0gRlJBTUVfRE9ORSkgeworCQkJCVBERUJVRyg0LCAiKiogRnJhbWUgZG9uZSAqKiIpOworCQkJfSBlbHNlIHsKKwkJCQlQREVCVUcoNCwgIkZyYW1lIG5vdCByZWFkeT8gc3RhdGUgPSAlZCIsCisJCQkJICAgICAgIG92LT5mcmFtZVtuZXh0Zl0uZ3JhYnN0YXRlKTsKKwkJCX0KKworCQkJb3YtPmN1cmZyYW1lID0gLTE7CisJCQlQREVCVUcoNCwgIlNPRiBkcm9wcGVkIChubyBhY3RpdmUgZnJhbWUpIik7CisJCQlyZXR1cm47ICAvKiBOb3doZXJlIHRvIHN0b3JlIHRoaXMgZnJhbWUgKi8KKwkJfQorCX0KK3NvZjoKKwlQREVCVUcoNCwgIlN0YXJ0aW5nIGNhcHR1cmUgb24gZnJhbWUgJWQiLCBmcmFtZS0+ZnJhbWVudW0pOworCisvLyBTbmFwc2hvdCBub3QgcmV2ZXJzZS1lbmdpbmVlcmVkIHlldC4KKyNpZiAwCisJLyogQ2hlY2sgdG8gc2VlIGlmIGl0J3MgYSBzbmFwc2hvdCBmcmFtZSAqLworCS8qIEZJWE1FPz8gU2hvdWxkIHRoZSBzbmFwc2hvdCByZXNldCBnbyBoZXJlPyBQZXJmb3JtYW5jZT8gKi8KKwlpZiAoaW5bOF0gJiAweDAyKSB7CisJCWZyYW1lLT5zbmFwc2hvdCA9IDE7CisJCVBERUJVRygzLCAic25hcHNob3QgZGV0ZWN0ZWQiKTsKKwl9CisjZW5kaWYKKwlmcmFtZS0+c2NhbnN0YXRlID0gU1RBVEVfTElORVM7CisJZnJhbWUtPmJ5dGVzX3JlY3ZkID0gMDsKKwlmcmFtZS0+Y29tcHJlc3NlZCA9IDE7CisKK2NoZWNrX21pZGRsZToKKwkvKiBBcmUgd2UgaW4gYSBmcmFtZT8gKi8KKwlpZiAoZnJhbWUtPnNjYW5zdGF0ZSAhPSBTVEFURV9MSU5FUykgeworCQlQREVCVUcoNCwgInNjYW5zdGF0ZTogbm8gU09GIHlldCIpOworCQlyZXR1cm47CisJfQorCisJLyogRHVtcCBhbGwgZGF0YSBleGFjdGx5IGFzIHJlY2VpdmVkICovCisJaWYgKGR1bXBwaXggPT0gMikgeworCQlmcmFtZS0+Ynl0ZXNfcmVjdmQgKz0gbjsKKwkJaWYgKGZyYW1lLT5ieXRlc19yZWN2ZCA8PSBtYXhfcmF3KQorCQkJbWVtY3B5KGZyYW1lLT5yYXdkYXRhICsgZnJhbWUtPmJ5dGVzX3JlY3ZkIC0gbiwgaW4sIG4pOworCQllbHNlCisJCQlQREVCVUcoMywgIlJhdyBkYXRhIGJ1ZmZlciBvdmVycnVuISEgKCVkKSIsCisJCQkJZnJhbWUtPmJ5dGVzX3JlY3ZkIC0gbWF4X3Jhdyk7CisJfSBlbHNlIHsKKwkJLyogQWxsIGluY29taW5nIGRhdGEgYXJlIGRpdmlkZWQgaW50byA4LWJ5dGUgc2VnbWVudHMuIElmIHRoZQorCQkgKiBzZWdtZW50IGNvbnRhaW5zIGFsbCB6ZXJvIGJ5dGVzLCBpdCBtdXN0IGJlIHNraXBwZWQuIFRoZXNlCisJCSAqIHplcm8tc2VnbWVudHMgYWxsb3cgdGhlIE9WNTE4IHRvIG1haW5haW4gYSBjb25zdGFudCBkYXRhIHJhdGUKKwkJICogcmVnYXJkbGVzcyBvZiB0aGUgZWZmZWN0aXZlbmVzcyBvZiB0aGUgY29tcHJlc3Npb24uIFNlZ21lbnRzCisJCSAqIGFyZSBhbGlnbmVkIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBpc29jaHJvbm91cworCQkgKiBwYWNrZXQuIFRoZSBmaXJzdCBzZWdtZW50IGluIGVhY2ggaW1hZ2UgaXMgYSBoZWFkZXIgKHRoZQorCQkgKiBkZWNvbXByZXNzb3Igc2tpcHMgaXQgbGF0ZXIpLgorCQkgKi8KKworCQlpbnQgYiwgcmVhZCA9IDAsIGFsbHplcm8sIGNvcGllZCA9IDA7CisKKwkJd2hpbGUgKHJlYWQgPCBuKSB7CisJCQlhbGx6ZXJvID0gMTsKKwkJCWZvciAoYiA9IDA7IGIgPCA4OyBiKyspIHsKKwkJCQlpZiAoaW5bcmVhZCArIGJdKSB7CisJCQkJCWFsbHplcm8gPSAwOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChhbGx6ZXJvKSB7CisJCQkvKiBEb24ndCBjb3B5IGl0ICovCisJCQl9IGVsc2UgeworCQkJCWlmIChmcmFtZS0+Ynl0ZXNfcmVjdmQgKyBjb3BpZWQgKyA4IDw9IG1heF9yYXcpCisJCQkJeworCQkJCQltZW1jcHkoZnJhbWUtPnJhd2RhdGEKKwkJCQkJCSsgZnJhbWUtPmJ5dGVzX3JlY3ZkICsgY29waWVkLAorCQkJCQkJaW4gKyByZWFkLCA4KTsKKwkJCQkJY29waWVkICs9IDg7CisJCQkJfSBlbHNlIHsKKwkJCQkJUERFQlVHKDMsICJSYXcgZGF0YSBidWZmZXIgb3ZlcnJ1biEhIik7CisJCQkJfQorCQkJfQorCQkJcmVhZCArPSA4OworCQl9CisJCWZyYW1lLT5ieXRlc19yZWN2ZCArPSBjb3BpZWQ7CisJfQorfQorCitzdGF0aWMgdm9pZAorb3Y1MXhfaXNvY19pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgdXNiX292NTExICpvdjsKKwlzdHJ1Y3Qgb3Y1MTFfc2J1ZiAqc2J1ZjsKKworCWlmICghdXJiLT5jb250ZXh0KSB7CisJCVBERUJVRyg0LCAibm8gY29udGV4dCIpOworCQlyZXR1cm47CisJfQorCisJc2J1ZiA9IHVyYi0+Y29udGV4dDsKKwlvdiA9IHNidWYtPm92OworCisJaWYgKCFvdiB8fCAhb3YtPmRldiB8fCAhb3YtPnVzZXIpIHsKKwkJUERFQlVHKDQsICJubyBkZXZpY2UsIG9yIG5vdCBvcGVuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIW92LT5zdHJlYW1pbmcpIHsKKwkJUERFQlVHKDQsICJobW1tLi4uIG5vdCBzdHJlYW1pbmcsIGJ1dCBnb3QgaW50ZXJydXB0Iik7CisJCXJldHVybjsKKwl9CisKKyAgICAgICAgaWYgKHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQpIHsKKyAgICAgICAgICAgICAgICBQREVCVUcoNCwgIlVSQiB1bmxpbmtlZCIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisJaWYgKHVyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUyAmJiB1cmItPnN0YXR1cyAhPSAwKSB7CisJCWVycigiRVJST1I6IHVyYi0+c3RhdHVzPSVkOiAlcyIsIHVyYi0+c3RhdHVzLAorCQkgICAgc3ltYm9saWModXJiX2Vycmxpc3QsIHVyYi0+c3RhdHVzKSk7CisJfQorCisJLyogQ29weSB0aGUgZGF0YSByZWNlaXZlZCBpbnRvIG91ciBmcmFtZSBidWZmZXIgKi8KKwlQREVCVUcoNSwgInNidWZbJWRdOiBNb3ZpbmcgJWQgcGFja2V0cyIsIHNidWYtPm4sCisJICAgICAgIHVyYi0+bnVtYmVyX29mX3BhY2tldHMpOworCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJLyogV2FybmluZzogRG9uJ3QgY2FsbCAqX21vdmVfZGF0YSgpIGlmIG5vIGZyYW1lIGFjdGl2ZSEgKi8KKwkJaWYgKG92LT5jdXJmcmFtZSA+PSAwKSB7CisJCQlpbnQgbiA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKKwkJCWludCBzdCA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzOworCQkJdW5zaWduZWQgY2hhciAqY2RhdGE7CisKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA9IDA7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyA9IDA7CisKKwkJCWNkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXIKKwkJCQkrIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OworCisJCQlpZiAoIW4pIHsKKwkJCQlQREVCVUcoNCwgIlplcm8tbGVuZ3RoIHBhY2tldCIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAoc3QpCisJCQkJUERFQlVHKDIsICJkYXRhIGVycm9yOiBbJWRdIGxlbj0lZCwgc3RhdHVzPSVkIiwKKwkJCQkgICAgICAgaSwgbiwgc3QpOworCisJCQlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTEpCisJCQkJb3Y1MTFfbW92ZV9kYXRhKG92LCBjZGF0YSwgbik7CisJCQllbHNlIGlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkKKwkJCQlvdjUxOF9tb3ZlX2RhdGEob3YsIGNkYXRhLCBuKTsKKwkJCWVsc2UKKwkJCQllcnIoIlVua25vd24gYnJpZGdlIGRldmljZSAoJWQpIiwgb3YtPmJyaWRnZSk7CisKKwkJfSBlbHNlIGlmICh3YWl0cXVldWVfYWN0aXZlKCZvdi0+d3EpKSB7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm92LT53cSk7CisJCX0KKwl9CisKKwkvKiBSZXN1Ym1pdCB0aGlzIFVSQiAqLworCXVyYi0+ZGV2ID0gb3YtPmRldjsKKwlpZiAoKGkgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSAhPSAwKQorCQllcnIoInVzYl9zdWJtaXRfdXJiKCkgcmV0ICVkIiwgaSk7CisKKwlyZXR1cm47Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogU3RyZWFtIGluaXRpYWxpemF0aW9uIGFuZCB0ZXJtaW5hdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQKK292NTF4X2luaXRfaXNvYyhzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGZ4LCBlcnIsIG4sIHNpemU7CisKKwlQREVCVUcoMywgIioqKiBJbml0aWFsaXppbmcgY2FwdHVyZSAqKioiKTsKKworCW92LT5jdXJmcmFtZSA9IC0xOworCisJaWYgKG92LT5icmlkZ2UgPT0gQlJHX09WNTExKSB7CisJCWlmIChjYW1zID09IDEpCisJCQlzaXplID0gOTkzOworCQllbHNlIGlmIChjYW1zID09IDIpCisJCQlzaXplID0gNTEzOworCQllbHNlIGlmIChjYW1zID09IDMgfHwgY2FtcyA9PSA0KQorCQkJc2l6ZSA9IDI1NzsKKwkJZWxzZSB7CisJCQllcnIoIlwiY2Ftc1wiIHBhcmFtZXRlciB0b28gaGlnaCEiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0gZWxzZSBpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MTFQTFVTKSB7CisJCWlmIChjYW1zID09IDEpCisJCQlzaXplID0gOTYxOworCQllbHNlIGlmIChjYW1zID09IDIpCisJCQlzaXplID0gNTEzOworCQllbHNlIGlmIChjYW1zID09IDMgfHwgY2FtcyA9PSA0KQorCQkJc2l6ZSA9IDI1NzsKKwkJZWxzZSBpZiAoY2FtcyA+PSA1ICYmIGNhbXMgPD0gOCkKKwkJCXNpemUgPSAxMjk7CisJCWVsc2UgaWYgKGNhbXMgPj0gOSAmJiBjYW1zIDw9IDMxKQorCQkJc2l6ZSA9IDMzOworCQllbHNlIHsKKwkJCWVycigiXCJjYW1zXCIgcGFyYW1ldGVyIHRvbyBoaWdoISIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfSBlbHNlIGlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgeworCQlpZiAoY2FtcyA9PSAxKQorCQkJc2l6ZSA9IDg5NjsKKwkJZWxzZSBpZiAoY2FtcyA9PSAyKQorCQkJc2l6ZSA9IDUxMjsKKwkJZWxzZSBpZiAoY2FtcyA9PSAzIHx8IGNhbXMgPT0gNCkKKwkJCXNpemUgPSAyNTY7CisJCWVsc2UgaWYgKGNhbXMgPj0gNSAmJiBjYW1zIDw9IDgpCisJCQlzaXplID0gMTI4OworCQllbHNlIHsKKwkJCWVycigiXCJjYW1zXCIgcGFyYW1ldGVyIHRvbyBoaWdoISIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfSBlbHNlIHsKKwkJZXJyKCJpbnZhbGlkIGJyaWRnZSB0eXBlIik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvLyBGSVhNRTogT1Y1MTggaXMgaGFyZGNvZGVkIHRvIDE1IEZQUyAoYWx0ZXJuYXRlIDUpIGZvciBub3cKKwlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpIHsKKwkJaWYgKHBhY2tldHNpemUgPT0gLTEpIHsKKwkJCW92NTE4X3NldF9wYWNrZXRfc2l6ZShvdiwgNjQwKTsKKwkJfSBlbHNlIHsKKwkJCWluZm8oIkZvcmNpbmcgcGFja2V0IHNpemUgdG8gJWQiLCBwYWNrZXRzaXplKTsKKwkJCW92NTE4X3NldF9wYWNrZXRfc2l6ZShvdiwgcGFja2V0c2l6ZSk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAocGFja2V0c2l6ZSA9PSAtMSkgeworCQkJb3Y1MTFfc2V0X3BhY2tldF9zaXplKG92LCBzaXplKTsKKwkJfSBlbHNlIHsKKwkJCWluZm8oIkZvcmNpbmcgcGFja2V0IHNpemUgdG8gJWQiLCBwYWNrZXRzaXplKTsKKwkJCW92NTExX3NldF9wYWNrZXRfc2l6ZShvdiwgcGFja2V0c2l6ZSk7CisJCX0KKwl9CisKKwlmb3IgKG4gPSAwOyBuIDwgT1Y1MTFfTlVNU0JVRjsgbisrKSB7CisJCXVyYiA9IHVzYl9hbGxvY191cmIoRlJBTUVTX1BFUl9ERVNDLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmIpIHsKKwkJCWVycigiaW5pdCBpc29jOiB1c2JfYWxsb2NfdXJiIHJldC4gTlVMTCIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJb3YtPnNidWZbbl0udXJiID0gdXJiOworCQl1cmItPmRldiA9IG92LT5kZXY7CisJCXVyYi0+Y29udGV4dCA9ICZvdi0+c2J1ZltuXTsKKwkJdXJiLT5waXBlID0gdXNiX3Jjdmlzb2NwaXBlKG92LT5kZXYsIE9WNTExX0VORFBPSU5UX0FERFJFU1MpOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IG92LT5zYnVmW25dLmRhdGE7CisJCXVyYi0+Y29tcGxldGUgPSBvdjUxeF9pc29jX2lycTsKKwkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IEZSQU1FU19QRVJfREVTQzsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gb3YtPnBhY2tldF9zaXplICogRlJBTUVTX1BFUl9ERVNDOworCQl1cmItPmludGVydmFsID0gMTsKKwkJZm9yIChmeCA9IDA7IGZ4IDwgRlJBTUVTX1BFUl9ERVNDOyBmeCsrKSB7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2Z4XS5vZmZzZXQgPSBvdi0+cGFja2V0X3NpemUgKiBmeDsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbZnhdLmxlbmd0aCA9IG92LT5wYWNrZXRfc2l6ZTsKKwkJfQorCX0KKworCW92LT5zdHJlYW1pbmcgPSAxOworCisJZm9yIChuID0gMDsgbiA8IE9WNTExX05VTVNCVUY7IG4rKykgeworCQlvdi0+c2J1ZltuXS51cmItPmRldiA9IG92LT5kZXY7CisJCWVyciA9IHVzYl9zdWJtaXRfdXJiKG92LT5zYnVmW25dLnVyYiwgR0ZQX0tFUk5FTCk7CisJCWlmIChlcnIpIHsKKwkJCWVycigiaW5pdCBpc29jOiB1c2Jfc3VibWl0X3VyYiglZCkgcmV0ICVkIiwgbiwgZXJyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK292NTF4X3VubGlua19pc29jKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCWludCBuOworCisJLyogVW5zY2hlZHVsZSBhbGwgb2YgdGhlIGlzbyB0ZCdzICovCisJZm9yIChuID0gT1Y1MTFfTlVNU0JVRiAtIDE7IG4gPj0gMDsgbi0tKSB7CisJCWlmIChvdi0+c2J1ZltuXS51cmIpIHsKKwkJCXVzYl9raWxsX3VyYihvdi0+c2J1ZltuXS51cmIpOworCQkJdXNiX2ZyZWVfdXJiKG92LT5zYnVmW25dLnVyYik7CisJCQlvdi0+c2J1ZltuXS51cmIgPSBOVUxMOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAorb3Y1MXhfc3RvcF9pc29jKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCWlmICghb3YtPnN0cmVhbWluZyB8fCAhb3YtPmRldikKKwkJcmV0dXJuOworCisJUERFQlVHKDMsICIqKiogU3RvcHBpbmcgY2FwdHVyZSAqKioiKTsKKworCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkKKwkJb3Y1MThfc2V0X3BhY2tldF9zaXplKG92LCAwKTsKKwllbHNlCisJCW92NTExX3NldF9wYWNrZXRfc2l6ZShvdiwgMCk7CisKKwlvdi0+c3RyZWFtaW5nID0gMDsKKworCW92NTF4X3VubGlua19pc29jKG92KTsKK30KKworc3RhdGljIGludAorb3Y1MXhfbmV3X2ZyYW1lKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBpbnQgZnJhbWVudW0pCit7CisJc3RydWN0IG92NTExX2ZyYW1lICpmcmFtZTsKKwlpbnQgbmV3bnVtOworCisJUERFQlVHKDQsICJvdi0+Y3VyZnJhbWUgPSAlZCwgZnJhbWVudW0gPSAlZCIsIG92LT5jdXJmcmFtZSwgZnJhbWVudW0pOworCisJaWYgKCFvdi0+ZGV2KQorCQlyZXR1cm4gLTE7CisKKwkvKiBJZiB3ZSdyZSBub3QgZ3JhYmJpbmcgYSBmcmFtZSByaWdodCBub3cgYW5kIHRoZSBvdGhlciBmcmFtZSBpcyAqLworCS8qIHJlYWR5IHRvIGJlIGdyYWJiZWQgaW50bywgdGhlbiB1c2UgaXQgaW5zdGVhZCAqLworCWlmIChvdi0+Y3VyZnJhbWUgPT0gLTEpIHsKKwkJbmV3bnVtID0gKGZyYW1lbnVtIC0gMSArIE9WNTExX05VTUZSQU1FUykgJSBPVjUxMV9OVU1GUkFNRVM7CisJCWlmIChvdi0+ZnJhbWVbbmV3bnVtXS5ncmFic3RhdGUgPT0gRlJBTUVfUkVBRFkpCisJCQlmcmFtZW51bSA9IG5ld251bTsKKwl9IGVsc2UKKwkJcmV0dXJuIDA7CisKKwlmcmFtZSA9ICZvdi0+ZnJhbWVbZnJhbWVudW1dOworCisJUERFQlVHKDQsICJmcmFtZW51bSA9ICVkLCB3aWR0aCA9ICVkLCBoZWlnaHQgPSAlZCIsIGZyYW1lbnVtLAorCSAgICAgICBmcmFtZS0+d2lkdGgsIGZyYW1lLT5oZWlnaHQpOworCisJZnJhbWUtPmdyYWJzdGF0ZSA9IEZSQU1FX0dSQUJCSU5HOworCWZyYW1lLT5zY2Fuc3RhdGUgPSBTVEFURV9TQ0FOTklORzsKKwlmcmFtZS0+c25hcHNob3QgPSAwOworCisJb3YtPmN1cmZyYW1lID0gZnJhbWVudW07CisKKwkvKiBNYWtlIHN1cmUgaXQncyBub3QgdG9vIGJpZyAqLworCWlmIChmcmFtZS0+d2lkdGggPiBvdi0+bWF4d2lkdGgpCisJCWZyYW1lLT53aWR0aCA9IG92LT5tYXh3aWR0aDsKKworCWZyYW1lLT53aWR0aCAmPSB+N0w7CQkvKiBNdWx0aXBsZSBvZiA4ICovCisKKwlpZiAoZnJhbWUtPmhlaWdodCA+IG92LT5tYXhoZWlnaHQpCisJCWZyYW1lLT5oZWlnaHQgPSBvdi0+bWF4aGVpZ2h0OworCisJZnJhbWUtPmhlaWdodCAmPSB+M0w7CQkvKiBNdWx0aXBsZSBvZiA0ICovCisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBCdWZmZXIgbWFuYWdlbWVudAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiAtIFlvdSBtdXN0IGFjcXVpcmUgYnVmX2xvY2sgYmVmb3JlIGVudGVyaW5nIHRoaXMgZnVuY3Rpb24uCisgKiAtIEJlY2F1c2UgdGhpcyBjb2RlIHdpbGwgZnJlZSBhbnkgbm9uLW51bGwgcG9pbnRlciwgeW91IG11c3QgYmUgc3VyZSB0byBudWxsCisgKiAgIHRoZW0gaWYgeW91IGV4cGxpY2l0bHkgZnJlZSB0aGVtIHNvbWV3aGVyZSBlbHNlIQorICovCitzdGF0aWMgdm9pZAorb3Y1MXhfZG9fZGVhbGxvYyhzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlpbnQgaTsKKwlQREVCVUcoNCwgImVudGVyZWQiKTsKKworCWlmIChvdi0+ZmJ1ZikgeworCQlydmZyZWUob3YtPmZidWYsIE9WNTExX05VTUZSQU1FUworCQkgICAgICAgKiBNQVhfREFUQV9TSVpFKG92LT5tYXh3aWR0aCwgb3YtPm1heGhlaWdodCkpOworCQlvdi0+ZmJ1ZiA9IE5VTEw7CisJfQorCisJdmZyZWUob3YtPnJhd2ZidWYpOworCW92LT5yYXdmYnVmID0gTlVMTDsKKworCXZmcmVlKG92LT50ZW1wZmJ1Zik7CisJb3YtPnRlbXBmYnVmID0gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBPVjUxMV9OVU1TQlVGOyBpKyspIHsKKwkJaWYgKG92LT5zYnVmW2ldLmRhdGEpIHsKKwkJCWtmcmVlKG92LT5zYnVmW2ldLmRhdGEpOworCQkJb3YtPnNidWZbaV0uZGF0YSA9IE5VTEw7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgT1Y1MTFfTlVNRlJBTUVTOyBpKyspIHsKKwkJb3YtPmZyYW1lW2ldLmRhdGEgPSBOVUxMOworCQlvdi0+ZnJhbWVbaV0ucmF3ZGF0YSA9IE5VTEw7CisJCW92LT5mcmFtZVtpXS50ZW1wZGF0YSA9IE5VTEw7CisJCWlmIChvdi0+ZnJhbWVbaV0uY29tcGJ1ZikgeworCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBvdi0+ZnJhbWVbaV0uY29tcGJ1Zik7CisJCQlvdi0+ZnJhbWVbaV0uY29tcGJ1ZiA9IE5VTEw7CisJCX0KKwl9CisKKwlQREVCVUcoNCwgImJ1ZmZlciBtZW1vcnkgZGVhbGxvY2F0ZWQiKTsKKwlvdi0+YnVmX3N0YXRlID0gQlVGX05PVF9BTExPQ0FURUQ7CisJUERFQlVHKDQsICJsZWF2aW5nIik7Cit9CisKK3N0YXRpYyBpbnQKK292NTF4X2FsbG9jKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCWludCBpOworCWNvbnN0IGludCB3ID0gb3YtPm1heHdpZHRoOworCWNvbnN0IGludCBoID0gb3YtPm1heGhlaWdodDsKKwljb25zdCBpbnQgZGF0YV9idWZzaXplID0gT1Y1MTFfTlVNRlJBTUVTICogTUFYX0RBVEFfU0laRSh3LCBoKTsKKwljb25zdCBpbnQgcmF3X2J1ZnNpemUgPSBPVjUxMV9OVU1GUkFNRVMgKiBNQVhfUkFXX0RBVEFfU0laRSh3LCBoKTsKKworCVBERUJVRyg0LCAiZW50ZXJlZCIpOworCWRvd24oJm92LT5idWZfbG9jayk7CisKKwlpZiAob3YtPmJ1Zl9zdGF0ZSA9PSBCVUZfQUxMT0NBVEVEKQorCQlnb3RvIG91dDsKKworCW92LT5mYnVmID0gcnZtYWxsb2MoZGF0YV9idWZzaXplKTsKKwlpZiAoIW92LT5mYnVmKQorCQlnb3RvIGVycm9yOworCisJb3YtPnJhd2ZidWYgPSB2bWFsbG9jKHJhd19idWZzaXplKTsKKwlpZiAoIW92LT5yYXdmYnVmKQorCQlnb3RvIGVycm9yOworCisJbWVtc2V0KG92LT5yYXdmYnVmLCAwLCByYXdfYnVmc2l6ZSk7CisKKwlvdi0+dGVtcGZidWYgPSB2bWFsbG9jKHJhd19idWZzaXplKTsKKwlpZiAoIW92LT50ZW1wZmJ1ZikKKwkJZ290byBlcnJvcjsKKworCW1lbXNldChvdi0+dGVtcGZidWYsIDAsIHJhd19idWZzaXplKTsKKworCWZvciAoaSA9IDA7IGkgPCBPVjUxMV9OVU1TQlVGOyBpKyspIHsKKwkJb3YtPnNidWZbaV0uZGF0YSA9IGttYWxsb2MoRlJBTUVTX1BFUl9ERVNDICoKKwkJCU1BWF9GUkFNRV9TSVpFX1BFUl9ERVNDLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFvdi0+c2J1ZltpXS5kYXRhKQorCQkJZ290byBlcnJvcjsKKworCQlQREVCVUcoNCwgInNidWZbJWRdIEAgJXAiLCBpLCBvdi0+c2J1ZltpXS5kYXRhKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgT1Y1MTFfTlVNRlJBTUVTOyBpKyspIHsKKwkJb3YtPmZyYW1lW2ldLmRhdGEgPSBvdi0+ZmJ1ZiArIGkgKiBNQVhfREFUQV9TSVpFKHcsIGgpOworCQlvdi0+ZnJhbWVbaV0ucmF3ZGF0YSA9IG92LT5yYXdmYnVmCisJCSArIGkgKiBNQVhfUkFXX0RBVEFfU0laRSh3LCBoKTsKKwkJb3YtPmZyYW1lW2ldLnRlbXBkYXRhID0gb3YtPnRlbXBmYnVmCisJCSArIGkgKiBNQVhfUkFXX0RBVEFfU0laRSh3LCBoKTsKKworCQlvdi0+ZnJhbWVbaV0uY29tcGJ1ZiA9CisJCSAodW5zaWduZWQgY2hhciAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWlmICghb3YtPmZyYW1lW2ldLmNvbXBidWYpCisJCQlnb3RvIGVycm9yOworCisJCVBERUJVRyg0LCAiZnJhbWVbJWRdIEAgJXAiLCBpLCBvdi0+ZnJhbWVbaV0uZGF0YSk7CisJfQorCisJb3YtPmJ1Zl9zdGF0ZSA9IEJVRl9BTExPQ0FURUQ7CitvdXQ6CisJdXAoJm92LT5idWZfbG9jayk7CisJUERFQlVHKDQsICJsZWF2aW5nIik7CisJcmV0dXJuIDA7CitlcnJvcjoKKwlvdjUxeF9kb19kZWFsbG9jKG92KTsKKwl1cCgmb3YtPmJ1Zl9sb2NrKTsKKwlQREVCVUcoNCwgImVycm9yZWQiKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQKK292NTF4X2RlYWxsb2Moc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJUERFQlVHKDQsICJlbnRlcmVkIik7CisJZG93bigmb3YtPmJ1Zl9sb2NrKTsKKwlvdjUxeF9kb19kZWFsbG9jKG92KTsKKwl1cCgmb3YtPmJ1Zl9sb2NrKTsKKwlQREVCVUcoNCwgImxlYXZpbmciKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBWNEwgMSBBUEkKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50CitvdjUxeF92NGwxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHVzYl9vdjUxMSAqb3YgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKKwlpbnQgZXJyLCBpOworCisJUERFQlVHKDQsICJvcGVuaW5nIik7CisKKwlkb3duKCZvdi0+bG9jayk7CisKKwllcnIgPSAtRUJVU1k7CisJaWYgKG92LT51c2VyKQorCQlnb3RvIG91dDsKKworCW92LT5zdWJfZmxhZyA9IDA7CisKKwkvKiBJbiBjYXNlIGFwcCBkb2Vzbid0IHNldCB0aGVtLi4uICovCisJZXJyID0gb3Y1MXhfc2V0X2RlZmF1bHRfcGFyYW1zKG92KTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiBNYWtlIHN1cmUgZnJhbWVzIGFyZSByZXNldCAqLworCWZvciAoaSA9IDA7IGkgPCBPVjUxMV9OVU1GUkFNRVM7IGkrKykgeworCQlvdi0+ZnJhbWVbaV0uZ3JhYnN0YXRlID0gRlJBTUVfVU5VU0VEOworCQlvdi0+ZnJhbWVbaV0uYnl0ZXNfcmVhZCA9IDA7CisJfQorCisJLyogSWYgY29tcHJlc3Npb24gaXMgb24sIG1ha2Ugc3VyZSBub3cgdGhhdCBhCisJICogZGVjb21wcmVzc29yIGNhbiBiZSBsb2FkZWQgKi8KKwlpZiAob3YtPmNvbXByZXNzICYmICFvdi0+ZGVjb21wX29wcykgeworCQllcnIgPSByZXF1ZXN0X2RlY29tcHJlc3Nvcihvdik7CisJCWlmIChlcnIgJiYgIWR1bXBwaXgpCisJCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBvdjUxeF9hbGxvYyhvdik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJZXJyID0gb3Y1MXhfaW5pdF9pc29jKG92KTsKKwlpZiAoZXJyKSB7CisJCW92NTF4X2RlYWxsb2Mob3YpOworCQlnb3RvIG91dDsKKwl9CisKKwlvdi0+dXNlcisrOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IHZkZXY7CisKKwlpZiAob3YtPmxlZF9wb2xpY3kgPT0gTEVEX0FVVE8pCisJCW92NTF4X2xlZF9jb250cm9sKG92LCAxKTsKKworb3V0OgorCXVwKCZvdi0+bG9jayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludAorb3Y1MXhfdjRsMV9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2Jfb3Y1MTEgKm92ID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CisKKwlQREVCVUcoNCwgIm92NTExX2Nsb3NlIik7CisKKwlkb3duKCZvdi0+bG9jayk7CisKKwlvdi0+dXNlci0tOworCW92NTF4X3N0b3BfaXNvYyhvdik7CisKKwlyZWxlYXNlX2RlY29tcHJlc3Nvcihvdik7CisKKwlpZiAob3YtPmxlZF9wb2xpY3kgPT0gTEVEX0FVVE8pCisJCW92NTF4X2xlZF9jb250cm9sKG92LCAwKTsKKworCWlmIChvdi0+ZGV2KQorCQlvdjUxeF9kZWFsbG9jKG92KTsKKworCXVwKCZvdi0+bG9jayk7CisKKwkvKiBEZXZpY2UgdW5wbHVnZ2VkIHdoaWxlIG9wZW4uIE9ubHkgYSBtaW5pbXVtIG9mIHVucmVnaXN0cmF0aW9uIGlzIGRvbmUKKwkgKiBoZXJlOyB0aGUgZGlzY29ubmVjdCBjYWxsYmFjayBhbHJlYWR5IGRpZCB0aGUgcmVzdC4gKi8KKwlpZiAoIW92LT5kZXYpIHsKKwkJZG93bigmb3YtPmNidWZfbG9jayk7CisJCWtmcmVlKG92LT5jYnVmKTsKKwkJb3YtPmNidWYgPSBOVUxMOworCQl1cCgmb3YtPmNidWZfbG9jayk7CisKKwkJb3Y1MXhfZGVhbGxvYyhvdik7CisJCWtmcmVlKG92KTsKKwkJb3YgPSBOVUxMOworCX0KKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKKy8qIERvIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkhICovCitzdGF0aWMgaW50CitvdjUxeF92NGwxX2lvY3RsX2ludGVybmFsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXNiX292NTExICpvdiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCVBERUJVRyg1LCAiSU9DdGw6IDB4JVgiLCBjbWQpOworCisJaWYgKCFvdi0+ZGV2KQorCQlyZXR1cm4gLUVJTzsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBWSURJT0NHQ0FQOgorCXsKKwkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKmIgPSBhcmc7CisKKwkJUERFQlVHKDQsICJWSURJT0NHQ0FQIik7CisKKwkJbWVtc2V0KGIsIDAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSkpOworCQlzcHJpbnRmKGItPm5hbWUsICIlcyBVU0IgQ2FtZXJhIiwKKwkJCXN5bWJvbGljKGJyZ2xpc3QsIG92LT5icmlkZ2UpKTsKKwkJYi0+dHlwZSA9IFZJRF9UWVBFX0NBUFRVUkUgfCBWSURfVFlQRV9TVUJDQVBUVVJFOworCQliLT5jaGFubmVscyA9IG92LT5udW1faW5wdXRzOworCQliLT5hdWRpb3MgPSAwOworCQliLT5tYXh3aWR0aCA9IG92LT5tYXh3aWR0aDsKKwkJYi0+bWF4aGVpZ2h0ID0gb3YtPm1heGhlaWdodDsKKwkJYi0+bWlud2lkdGggPSBvdi0+bWlud2lkdGg7CisJCWItPm1pbmhlaWdodCA9IG92LT5taW5oZWlnaHQ7CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DR0NIQU46CisJeworCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdiA9IGFyZzsKKworCQlQREVCVUcoNCwgIlZJRElPQ0dDSEFOIik7CisKKwkJaWYgKCh1bnNpZ25lZCkodi0+Y2hhbm5lbCkgPj0gb3YtPm51bV9pbnB1dHMpIHsKKwkJCWVycigiSW52YWxpZCBjaGFubmVsICglZCkiLCB2LT5jaGFubmVsKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJdi0+bm9ybSA9IG92LT5ub3JtOworCQl2LT50eXBlID0gVklERU9fVFlQRV9DQU1FUkE7CisJCXYtPmZsYWdzID0gMDsKKy8vCQl2LT5mbGFncyB8PSAob3YtPmhhc19kZWNvZGVyKSA/IFZJREVPX1ZDX05PUk0gOiAwOworCQl2LT50dW5lcnMgPSAwOworCQlkZWNvZGVyX2dldF9pbnB1dF9uYW1lKG92LCB2LT5jaGFubmVsLCB2LT5uYW1lKTsKKworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NTQ0hBTjoKKwl7CisJCXN0cnVjdCB2aWRlb19jaGFubmVsICp2ID0gYXJnOworCQlpbnQgZXJyOworCisJCVBERUJVRyg0LCAiVklESU9DU0NIQU4iKTsKKworCQkvKiBNYWtlIHN1cmUgaXQncyBub3QgYSBjYW1lcmEgKi8KKwkJaWYgKCFvdi0+aGFzX2RlY29kZXIpIHsKKwkJCWlmICh2LT5jaGFubmVsID09IDApCisJCQkJcmV0dXJuIDA7CisJCQllbHNlCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAodi0+bm9ybSAhPSBWSURFT19NT0RFX1BBTCAmJgorCQkgICAgdi0+bm9ybSAhPSBWSURFT19NT0RFX05UU0MgJiYKKwkJICAgIHYtPm5vcm0gIT0gVklERU9fTU9ERV9TRUNBTSAmJgorCQkgICAgdi0+bm9ybSAhPSBWSURFT19NT0RFX0FVVE8pIHsKKwkJCWVycigiSW52YWxpZCBub3JtICglZCkiLCB2LT5ub3JtKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKCh1bnNpZ25lZCkodi0+Y2hhbm5lbCkgPj0gb3YtPm51bV9pbnB1dHMpIHsKKwkJCWVycigiSW52YWxpZCBjaGFubmVsICglZCkiLCB2LT5jaGFubmVsKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJZXJyID0gZGVjb2Rlcl9zZXRfaW5wdXQob3YsIHYtPmNoYW5uZWwpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQllcnIgPSBkZWNvZGVyX3NldF9ub3JtKG92LCB2LT5ub3JtKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DR1BJQ1Q6CisJeworCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcCA9IGFyZzsKKworCQlQREVCVUcoNCwgIlZJRElPQ0dQSUNUIik7CisKKwkJbWVtc2V0KHAsIDAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fcGljdHVyZSkpOworCQlpZiAoc2Vuc29yX2dldF9waWN0dXJlKG92LCBwKSkKKwkJCXJldHVybiAtRUlPOworCisJCS8qIENhbiB3ZSBnZXQgdGhlc2UgZnJvbSBmcmFtZVswXT8gLWNsYXVkaW8/ICovCisJCXAtPmRlcHRoID0gb3YtPmZyYW1lWzBdLmRlcHRoOworCQlwLT5wYWxldHRlID0gb3YtPmZyYW1lWzBdLmZvcm1hdDsKKworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NTUElDVDoKKwl7CisJCXN0cnVjdCB2aWRlb19waWN0dXJlICpwID0gYXJnOworCQlpbnQgaSwgcmM7CisKKwkJUERFQlVHKDQsICJWSURJT0NTUElDVCIpOworCisJCWlmICghZ2V0X2RlcHRoKHAtPnBhbGV0dGUpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKHNlbnNvcl9zZXRfcGljdHVyZShvdiwgcCkpCisJCQlyZXR1cm4gLUVJTzsKKworCQlpZiAoZm9yY2VfcGFsZXR0ZSAmJiBwLT5wYWxldHRlICE9IGZvcmNlX3BhbGV0dGUpIHsKKwkJCWluZm8oIlBhbGV0dGUgcmVqZWN0ZWQgKCVzKSIsCisJCQkgICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIHAtPnBhbGV0dGUpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJLy8gRklYTUU6IEZvcm1hdCBzaG91bGQgYmUgaW5kZXBlbmRlbnQgb2YgZnJhbWVzCisJCWlmIChwLT5wYWxldHRlICE9IG92LT5mcmFtZVswXS5mb3JtYXQpIHsKKwkJCVBERUJVRyg0LCAiRGV0ZWN0ZWQgZm9ybWF0IGNoYW5nZSIpOworCisJCQlyYyA9IG92NTF4X3dhaXRfZnJhbWVzX2luYWN0aXZlKG92KTsKKwkJCWlmIChyYykKKwkJCQlyZXR1cm4gcmM7CisKKwkJCW1vZGVfaW5pdF9yZWdzKG92LCBvdi0+ZnJhbWVbMF0ud2lkdGgsCisJCQkJb3YtPmZyYW1lWzBdLmhlaWdodCwgcC0+cGFsZXR0ZSwgb3YtPnN1Yl9mbGFnKTsKKwkJfQorCisJCVBERUJVRyg0LCAiU2V0dGluZyBkZXB0aD0lZCwgcGFsZXR0ZT0lcyIsCisJCSAgICAgICBwLT5kZXB0aCwgc3ltYm9saWModjRsMV9wbGlzdCwgcC0+cGFsZXR0ZSkpOworCisJCWZvciAoaSA9IDA7IGkgPCBPVjUxMV9OVU1GUkFNRVM7IGkrKykgeworCQkJb3YtPmZyYW1lW2ldLmRlcHRoID0gcC0+ZGVwdGg7CisJCQlvdi0+ZnJhbWVbaV0uZm9ybWF0ID0gcC0+cGFsZXR0ZTsKKwkJfQorCisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ0dDQVBUVVJFOgorCXsKKwkJaW50ICp2ZiA9IGFyZzsKKworCQlQREVCVUcoNCwgIlZJRElPQ0dDQVBUVVJFIik7CisKKwkJb3YtPnN1Yl9mbGFnID0gKnZmOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NTQ0FQVFVSRToKKwl7CisJCXN0cnVjdCB2aWRlb19jYXB0dXJlICp2YyA9IGFyZzsKKworCQlQREVCVUcoNCwgIlZJRElPQ1NDQVBUVVJFIik7CisKKwkJaWYgKHZjLT5mbGFncykKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAodmMtPmRlY2ltYXRpb24pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQl2Yy0+eCAmPSB+M0w7CisJCXZjLT55ICY9IH4xTDsKKwkJdmMtPnkgJj0gfjMxTDsKKworCQlpZiAodmMtPndpZHRoID09IDApCisJCQl2Yy0+d2lkdGggPSAzMjsKKworCQl2Yy0+aGVpZ2h0IC89IDE2OworCQl2Yy0+aGVpZ2h0ICo9IDE2OworCQlpZiAodmMtPmhlaWdodCA9PSAwKQorCQkJdmMtPmhlaWdodCA9IDE2OworCisJCW92LT5zdWJ4ID0gdmMtPng7CisJCW92LT5zdWJ5ID0gdmMtPnk7CisJCW92LT5zdWJ3ID0gdmMtPndpZHRoOworCQlvdi0+c3ViaCA9IHZjLT5oZWlnaHQ7CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DU1dJTjoKKwl7CisJCXN0cnVjdCB2aWRlb193aW5kb3cgKnZ3ID0gYXJnOworCQlpbnQgaSwgcmM7CisKKwkJUERFQlVHKDQsICJWSURJT0NTV0lOOiAlZHglZCIsIHZ3LT53aWR0aCwgdnctPmhlaWdodCk7CisKKyNpZiAwCisJCWlmICh2dy0+ZmxhZ3MpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHZ3LT5jbGlwY291bnQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHZ3LT5oZWlnaHQgIT0gb3YtPm1heGhlaWdodCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAodnctPndpZHRoICE9IG92LT5tYXh3aWR0aCkKKwkJCXJldHVybiAtRUlOVkFMOworI2VuZGlmCisKKwkJcmMgPSBvdjUxeF93YWl0X2ZyYW1lc19pbmFjdGl2ZShvdik7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKKworCQlyYyA9IG1vZGVfaW5pdF9yZWdzKG92LCB2dy0+d2lkdGgsIHZ3LT5oZWlnaHQsCisJCQlvdi0+ZnJhbWVbMF0uZm9ybWF0LCBvdi0+c3ViX2ZsYWcpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCisJCWZvciAoaSA9IDA7IGkgPCBPVjUxMV9OVU1GUkFNRVM7IGkrKykgeworCQkJb3YtPmZyYW1lW2ldLndpZHRoID0gdnctPndpZHRoOworCQkJb3YtPmZyYW1lW2ldLmhlaWdodCA9IHZ3LT5oZWlnaHQ7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NHV0lOOgorCXsKKwkJc3RydWN0IHZpZGVvX3dpbmRvdyAqdncgPSBhcmc7CisKKwkJbWVtc2V0KHZ3LCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX3dpbmRvdykpOworCQl2dy0+eCA9IDA7CQkvKiBGSVhNRSAqLworCQl2dy0+eSA9IDA7CisJCXZ3LT53aWR0aCA9IG92LT5mcmFtZVswXS53aWR0aDsKKwkJdnctPmhlaWdodCA9IG92LT5mcmFtZVswXS5oZWlnaHQ7CisJCXZ3LT5mbGFncyA9IDMwOworCisJCVBERUJVRyg0LCAiVklESU9DR1dJTjogJWR4JWQiLCB2dy0+d2lkdGgsIHZ3LT5oZWlnaHQpOworCisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ0dNQlVGOgorCXsKKwkJc3RydWN0IHZpZGVvX21idWYgKnZtID0gYXJnOworCQlpbnQgaTsKKworCQlQREVCVUcoNCwgIlZJRElPQ0dNQlVGIik7CisKKwkJbWVtc2V0KHZtLCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX21idWYpKTsKKwkJdm0tPnNpemUgPSBPVjUxMV9OVU1GUkFNRVMKKwkJCSAgICogTUFYX0RBVEFfU0laRShvdi0+bWF4d2lkdGgsIG92LT5tYXhoZWlnaHQpOworCQl2bS0+ZnJhbWVzID0gT1Y1MTFfTlVNRlJBTUVTOworCisJCXZtLT5vZmZzZXRzWzBdID0gMDsKKwkJZm9yIChpID0gMTsgaSA8IE9WNTExX05VTUZSQU1FUzsgaSsrKSB7CisJCQl2bS0+b2Zmc2V0c1tpXSA9IHZtLT5vZmZzZXRzW2ktMV0KKwkJCSAgICsgTUFYX0RBVEFfU0laRShvdi0+bWF4d2lkdGgsIG92LT5tYXhoZWlnaHQpOworCQl9CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DTUNBUFRVUkU6CisJeworCQlzdHJ1Y3QgdmlkZW9fbW1hcCAqdm0gPSBhcmc7CisJCWludCByYywgZGVwdGg7CisJCXVuc2lnbmVkIGludCBmID0gdm0tPmZyYW1lOworCisJCVBERUJVRyg0LCAiVklESU9DTUNBUFRVUkU6IGZyYW1lOiAlZCwgJWR4JWQsICVzIiwgZiwgdm0tPndpZHRoLAorCQkJdm0tPmhlaWdodCwgc3ltYm9saWModjRsMV9wbGlzdCwgdm0tPmZvcm1hdCkpOworCisJCWRlcHRoID0gZ2V0X2RlcHRoKHZtLT5mb3JtYXQpOworCQlpZiAoIWRlcHRoKSB7CisJCQlQREVCVUcoMiwgIlZJRElPQ01DQVBUVVJFOiBpbnZhbGlkIGZvcm1hdCAoJXMpIiwKKwkJCSAgICAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCB2bS0+Zm9ybWF0KSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChmID49IE9WNTExX05VTUZSQU1FUykgeworCQkJZXJyKCJWSURJT0NNQ0FQVFVSRTogaW52YWxpZCBmcmFtZSAoJWQpIiwgZik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmICh2bS0+d2lkdGggPiBvdi0+bWF4d2lkdGgKKwkJICAgIHx8IHZtLT5oZWlnaHQgPiBvdi0+bWF4aGVpZ2h0KSB7CisJCQllcnIoIlZJRElPQ01DQVBUVVJFOiByZXF1ZXN0ZWQgZGltZW5zaW9ucyB0b28gYmlnIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChvdi0+ZnJhbWVbZl0uZ3JhYnN0YXRlID09IEZSQU1FX0dSQUJCSU5HKSB7CisJCQlQREVCVUcoNCwgIlZJRElPQ01DQVBUVVJFOiBhbHJlYWR5IGdyYWJiaW5nIik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisKKwkJaWYgKGZvcmNlX3BhbGV0dGUgJiYgKHZtLT5mb3JtYXQgIT0gZm9yY2VfcGFsZXR0ZSkpIHsKKwkJCVBERUJVRygyLCAicGFsZXR0ZSByZWplY3RlZCAoJXMpIiwKKwkJCSAgICAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCB2bS0+Zm9ybWF0KSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmICgob3YtPmZyYW1lW2ZdLndpZHRoICE9IHZtLT53aWR0aCkgfHwKKwkJICAgIChvdi0+ZnJhbWVbZl0uaGVpZ2h0ICE9IHZtLT5oZWlnaHQpIHx8CisJCSAgICAob3YtPmZyYW1lW2ZdLmZvcm1hdCAhPSB2bS0+Zm9ybWF0KSB8fAorCQkgICAgKG92LT5mcmFtZVtmXS5zdWJfZmxhZyAhPSBvdi0+c3ViX2ZsYWcpIHx8CisJCSAgICAob3YtPmZyYW1lW2ZdLmRlcHRoICE9IGRlcHRoKSkgeworCQkJUERFQlVHKDQsICJWSURJT0NNQ0FQVFVSRTogY2hhbmdlIGluIGltYWdlIHBhcmFtZXRlcnMiKTsKKworCQkJcmMgPSBvdjUxeF93YWl0X2ZyYW1lc19pbmFjdGl2ZShvdik7CisJCQlpZiAocmMpCisJCQkJcmV0dXJuIHJjOworCisJCQlyYyA9IG1vZGVfaW5pdF9yZWdzKG92LCB2bS0+d2lkdGgsIHZtLT5oZWlnaHQsCisJCQkJdm0tPmZvcm1hdCwgb3YtPnN1Yl9mbGFnKTsKKyNpZiAwCisJCQlpZiAocmMgPCAwKSB7CisJCQkJUERFQlVHKDEsICJHb3QgZXJyb3Igd2hpbGUgaW5pdGlhbGl6aW5nIHJlZ3MgIik7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKyNlbmRpZgorCQkJb3YtPmZyYW1lW2ZdLndpZHRoID0gdm0tPndpZHRoOworCQkJb3YtPmZyYW1lW2ZdLmhlaWdodCA9IHZtLT5oZWlnaHQ7CisJCQlvdi0+ZnJhbWVbZl0uZm9ybWF0ID0gdm0tPmZvcm1hdDsKKwkJCW92LT5mcmFtZVtmXS5zdWJfZmxhZyA9IG92LT5zdWJfZmxhZzsKKwkJCW92LT5mcmFtZVtmXS5kZXB0aCA9IGRlcHRoOworCQl9CisKKwkJLyogTWFyayBpdCBhcyByZWFkeSAqLworCQlvdi0+ZnJhbWVbZl0uZ3JhYnN0YXRlID0gRlJBTUVfUkVBRFk7CisKKwkJUERFQlVHKDQsICJWSURJT0NNQ0FQVFVSRTogcmVuZXdpbmcgZnJhbWUgJWQiLCBmKTsKKworCQlyZXR1cm4gb3Y1MXhfbmV3X2ZyYW1lKG92LCBmKTsKKwl9CisJY2FzZSBWSURJT0NTWU5DOgorCXsKKwkJdW5zaWduZWQgaW50IGZudW0gPSAqKCh1bnNpZ25lZCBpbnQgKikgYXJnKTsKKwkJc3RydWN0IG92NTExX2ZyYW1lICpmcmFtZTsKKwkJaW50IHJjOworCisJCWlmIChmbnVtID49IE9WNTExX05VTUZSQU1FUykgeworCQkJZXJyKCJWSURJT0NTWU5DOiBpbnZhbGlkIGZyYW1lICglZCkiLCBmbnVtKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJZnJhbWUgPSAmb3YtPmZyYW1lW2ZudW1dOworCisJCVBERUJVRyg0LCAic3luY2luZyB0byBmcmFtZSAlZCwgZ3JhYnN0YXRlID0gJWQiLCBmbnVtLAorCQkgICAgICAgZnJhbWUtPmdyYWJzdGF0ZSk7CisKKwkJc3dpdGNoIChmcmFtZS0+Z3JhYnN0YXRlKSB7CisJCWNhc2UgRlJBTUVfVU5VU0VEOgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWNhc2UgRlJBTUVfUkVBRFk6CisJCWNhc2UgRlJBTUVfR1JBQkJJTkc6CisJCWNhc2UgRlJBTUVfRVJST1I6CityZWRvOgorCQkJaWYgKCFvdi0+ZGV2KQorCQkJCXJldHVybiAtRUlPOworCisJCQlyYyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShmcmFtZS0+d3EsCisJCQkgICAgKGZyYW1lLT5ncmFic3RhdGUgPT0gRlJBTUVfRE9ORSkKKwkJCSAgICB8fCAoZnJhbWUtPmdyYWJzdGF0ZSA9PSBGUkFNRV9FUlJPUikpOworCisJCQlpZiAocmMpCisJCQkJcmV0dXJuIHJjOworCisJCQlpZiAoZnJhbWUtPmdyYWJzdGF0ZSA9PSBGUkFNRV9FUlJPUikgeworCQkJCWlmICgocmMgPSBvdjUxeF9uZXdfZnJhbWUob3YsIGZudW0pKSA8IDApCisJCQkJCXJldHVybiByYzsKKwkJCQlnb3RvIHJlZG87CisJCQl9CisJCQkvKiBGYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBGUkFNRV9ET05FOgorCQkJaWYgKG92LT5zbmFwX2VuYWJsZWQgJiYgIWZyYW1lLT5zbmFwc2hvdCkgeworCQkJCWlmICgocmMgPSBvdjUxeF9uZXdfZnJhbWUob3YsIGZudW0pKSA8IDApCisJCQkJCXJldHVybiByYzsKKwkJCQlnb3RvIHJlZG87CisJCQl9CisKKwkJCWZyYW1lLT5ncmFic3RhdGUgPSBGUkFNRV9VTlVTRUQ7CisKKwkJCS8qIFJlc2V0IHRoZSBoYXJkd2FyZSBzbmFwc2hvdCBidXR0b24gKi8KKwkJCS8qIEZJWE1FIC0gSXMgdGhpcyB0aGUgYmVzdCBwbGFjZSBmb3IgdGhpcz8gKi8KKwkJCWlmICgob3YtPnNuYXBfZW5hYmxlZCkgJiYgKGZyYW1lLT5zbmFwc2hvdCkpIHsKKwkJCQlmcmFtZS0+c25hcHNob3QgPSAwOworCQkJCW92NTF4X2NsZWFyX3NuYXBzaG90KG92KTsKKwkJCX0KKworCQkJLyogRGVjb21wcmVzc2lvbiwgZm9ybWF0IGNvbnZlcnNpb24sIGV0Yy4uLiAqLworCQkJb3Y1MXhfcG9zdHByb2Nlc3Mob3YsIGZyYW1lKTsKKworCQkJYnJlYWs7CisJCX0gLyogZW5kIHN3aXRjaCAqLworCisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ0dGQlVGOgorCXsKKwkJc3RydWN0IHZpZGVvX2J1ZmZlciAqdmIgPSBhcmc7CisKKwkJUERFQlVHKDQsICJWSURJT0NHRkJVRiIpOworCisJCW1lbXNldCh2YiwgMCwgc2l6ZW9mKHN0cnVjdCB2aWRlb19idWZmZXIpKTsKKworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NHVU5JVDoKKwl7CisJCXN0cnVjdCB2aWRlb191bml0ICp2dSA9IGFyZzsKKworCQlQREVCVUcoNCwgIlZJRElPQ0dVTklUIik7CisKKwkJbWVtc2V0KHZ1LCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX3VuaXQpKTsKKworCQl2dS0+dmlkZW8gPSBvdi0+dmRldi0+bWlub3I7CisJCXZ1LT52YmkgPSBWSURFT19OT19VTklUOworCQl2dS0+cmFkaW8gPSBWSURFT19OT19VTklUOworCQl2dS0+YXVkaW8gPSBWSURFT19OT19VTklUOworCQl2dS0+dGVsZXRleHQgPSBWSURFT19OT19VTklUOworCisJCXJldHVybiAwOworCX0KKwljYXNlIE9WNTExSU9DX1dJMkM6CisJeworCQlzdHJ1Y3Qgb3Y1MTFfaTJjX3N0cnVjdCAqdyA9IGFyZzsKKworCQlyZXR1cm4gaTJjX3dfc2xhdmUob3YsIHctPnNsYXZlLCB3LT5yZWcsIHctPnZhbHVlLCB3LT5tYXNrKTsKKwl9CisJY2FzZSBPVjUxMUlPQ19SSTJDOgorCXsKKwkJc3RydWN0IG92NTExX2kyY19zdHJ1Y3QgKnIgPSBhcmc7CisJCWludCByYzsKKworCQlyYyA9IGkyY19yX3NsYXZlKG92LCByLT5zbGF2ZSwgci0+cmVnKTsKKwkJaWYgKHJjIDwgMCkKKwkJCXJldHVybiByYzsKKworCQlyLT52YWx1ZSA9IHJjOworCQlyZXR1cm4gMDsKKwl9CisJZGVmYXVsdDoKKwkJUERFQlVHKDMsICJVbnN1cHBvcnRlZCBJT0N0bDogMHglWCIsIGNtZCk7CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfSAvKiBlbmQgc3dpdGNoICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorb3Y1MXhfdjRsMV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9vdjUxMSAqb3YgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKKwlpbnQgcmM7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZvdi0+bG9jaykpCisJCXJldHVybiAtRUlOVFI7CisKKwlyYyA9IHZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxlLCBjbWQsIGFyZywgb3Y1MXhfdjRsMV9pb2N0bF9pbnRlcm5hbCk7CisKKwl1cCgmb3YtPmxvY2spOworCXJldHVybiByYzsKK30KKworc3RhdGljIHNzaXplX3QKK292NTF4X3Y0bDFfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IG5vYmxvY2sgPSBmaWxlLT5mX2ZsYWdzJk9fTk9OQkxPQ0s7CisJdW5zaWduZWQgbG9uZyBjb3VudCA9IGNudDsKKwlzdHJ1Y3QgdXNiX292NTExICpvdiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCWludCBpLCByYyA9IDAsIGZybXggPSAtMTsKKwlzdHJ1Y3Qgb3Y1MTFfZnJhbWUgKmZyYW1lOworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmb3YtPmxvY2spKQorCQlyZXR1cm4gLUVJTlRSOworCisJUERFQlVHKDQsICIlbGQgYnl0ZXMsIG5vYmxvY2s9JWQiLCBjb3VudCwgbm9ibG9jayk7CisKKwlpZiAoIXZkZXYgfHwgIWJ1ZikgeworCQlyYyA9IC1FRkFVTFQ7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKCFvdi0+ZGV2KSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBlcnJvcjsKKwl9CisKKy8vIEZJWE1FOiBPbmx5IHN1cHBvcnRzIHR3byBmcmFtZXMKKwkvKiBTZWUgaWYgYSBmcmFtZSBpcyBjb21wbGV0ZWQsIHRoZW4gdXNlIGl0LiAqLworCWlmIChvdi0+ZnJhbWVbMF0uZ3JhYnN0YXRlID49IEZSQU1FX0RPTkUpCS8qIF9ET05FIG9yIF9FUlJPUiAqLworCQlmcm14ID0gMDsKKwllbHNlIGlmIChvdi0+ZnJhbWVbMV0uZ3JhYnN0YXRlID49IEZSQU1FX0RPTkUpLyogX0RPTkUgb3IgX0VSUk9SICovCisJCWZybXggPSAxOworCisJLyogSWYgbm9uYmxvY2tpbmcgd2UgcmV0dXJuIGltbWVkaWF0ZWx5ICovCisJaWYgKG5vYmxvY2sgJiYgKGZybXggPT0gLTEpKSB7CisJCXJjID0gLUVBR0FJTjsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBJZiBubyBGUkFNRV9ET05FLCBsb29rIGZvciBhIEZSQU1FX0dSQUJCSU5HIHN0YXRlLiAqLworCS8qIFNlZSBpZiBhIGZyYW1lIGlzIGluIHByb2Nlc3MgKGdyYWJiaW5nKSwgdGhlbiB1c2UgaXQuICovCisJaWYgKGZybXggPT0gLTEpIHsKKwkJaWYgKG92LT5mcmFtZVswXS5ncmFic3RhdGUgPT0gRlJBTUVfR1JBQkJJTkcpCisJCQlmcm14ID0gMDsKKwkJZWxzZSBpZiAob3YtPmZyYW1lWzFdLmdyYWJzdGF0ZSA9PSBGUkFNRV9HUkFCQklORykKKwkJCWZybXggPSAxOworCX0KKworCS8qIElmIG5vIGZyYW1lIGlzIGFjdGl2ZSwgc3RhcnQgb25lLiAqLworCWlmIChmcm14ID09IC0xKSB7CisJCWlmICgocmMgPSBvdjUxeF9uZXdfZnJhbWUob3YsIGZybXggPSAwKSkpIHsKKwkJCWVycigicmVhZDogb3Y1MXhfbmV3X2ZyYW1lIGVycm9yIik7CisJCQlnb3RvIGVycm9yOworCQl9CisJfQorCisJZnJhbWUgPSAmb3YtPmZyYW1lW2ZybXhdOworCityZXN0YXJ0OgorCWlmICghb3YtPmRldikgeworCQlyYyA9IC1FSU87CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogV2FpdCB3aGlsZSB3ZSdyZSBncmFiYmluZyB0aGUgaW1hZ2UgKi8KKwlQREVCVUcoNCwgIldhaXRpbmcgaW1hZ2UgZ3JhYmJpbmciKTsKKwlyYyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShmcmFtZS0+d3EsCisJCShmcmFtZS0+Z3JhYnN0YXRlID09IEZSQU1FX0RPTkUpCisJCXx8IChmcmFtZS0+Z3JhYnN0YXRlID09IEZSQU1FX0VSUk9SKSk7CisKKwlpZiAocmMpCisJCWdvdG8gZXJyb3I7CisKKwlQREVCVUcoNCwgIkdvdCBpbWFnZSwgZnJhbWUtPmdyYWJzdGF0ZSA9ICVkIiwgZnJhbWUtPmdyYWJzdGF0ZSk7CisJUERFQlVHKDQsICJieXRlc19yZWN2ZCA9ICVkIiwgZnJhbWUtPmJ5dGVzX3JlY3ZkKTsKKworCWlmIChmcmFtZS0+Z3JhYnN0YXRlID09IEZSQU1FX0VSUk9SKSB7CisJCWZyYW1lLT5ieXRlc19yZWFkID0gMDsKKwkJZXJyKCIqKiBpY2shICoqIEVycm9yZWQgZnJhbWUgJWQiLCBvdi0+Y3VyZnJhbWUpOworCQlpZiAob3Y1MXhfbmV3X2ZyYW1lKG92LCBmcm14KSkgeworCQkJZXJyKCJyZWFkOiBvdjUxeF9uZXdfZnJhbWUgZXJyb3IiKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJZ290byByZXN0YXJ0OworCX0KKworCisJLyogUmVwZWF0IHVudGlsIHdlIGdldCBhIHNuYXBzaG90IGZyYW1lICovCisJaWYgKG92LT5zbmFwX2VuYWJsZWQpCisJCVBERUJVRyg0LCAiV2FpdGluZyBzbmFwc2hvdCBmcmFtZSIpOworCWlmIChvdi0+c25hcF9lbmFibGVkICYmICFmcmFtZS0+c25hcHNob3QpIHsKKwkJZnJhbWUtPmJ5dGVzX3JlYWQgPSAwOworCQlpZiAoKHJjID0gb3Y1MXhfbmV3X2ZyYW1lKG92LCBmcm14KSkpIHsKKwkJCWVycigicmVhZDogb3Y1MXhfbmV3X2ZyYW1lIGVycm9yIik7CisJCQlnb3RvIGVycm9yOworCQl9CisJCWdvdG8gcmVzdGFydDsKKwl9CisKKwkvKiBDbGVhciB0aGUgc25hcHNob3QgKi8KKwlpZiAob3YtPnNuYXBfZW5hYmxlZCAmJiBmcmFtZS0+c25hcHNob3QpIHsKKwkJZnJhbWUtPnNuYXBzaG90ID0gMDsKKwkJb3Y1MXhfY2xlYXJfc25hcHNob3Qob3YpOworCX0KKworCS8qIERlY29tcHJlc3Npb24sIGZvcm1hdCBjb252ZXJzaW9uLCBldGMuLi4gKi8KKwlvdjUxeF9wb3N0cHJvY2VzcyhvdiwgZnJhbWUpOworCisJUERFQlVHKDQsICJmcm14PSVkLCBieXRlc19yZWFkPSVsZCwgbGVuZ3RoPSVsZCIsIGZybXgsCisJCWZyYW1lLT5ieXRlc19yZWFkLAorCQlnZXRfZnJhbWVfbGVuZ3RoKGZyYW1lKSk7CisKKwkvKiBjb3B5IGJ5dGVzIHRvIHVzZXIgc3BhY2U7IHdlIGFsbG93IGZvciBwYXJ0aWFscyByZWFkcyAqLworLy8JaWYgKChjb3VudCArIGZyYW1lLT5ieXRlc19yZWFkKQorLy8JICAgID4gZ2V0X2ZyYW1lX2xlbmd0aCgoc3RydWN0IG92NTExX2ZyYW1lICopZnJhbWUpKQorLy8JCWNvdW50ID0gZnJhbWUtPnNjYW5sZW5ndGggLSBmcmFtZS0+Ynl0ZXNfcmVhZDsKKworCS8qIEZJWE1FIC0gY291bnQgaGFyZHdpcmVkIHRvIGJlIG9uZSBmcmFtZS4uLiAqLworCWNvdW50ID0gZ2V0X2ZyYW1lX2xlbmd0aChmcmFtZSk7CisKKwlQREVCVUcoNCwgIkNvcHkgdG8gdXNlciBzcGFjZTogJWxkIGJ5dGVzIiwgY291bnQpOworCWlmICgoaSA9IGNvcHlfdG9fdXNlcihidWYsIGZyYW1lLT5kYXRhICsgZnJhbWUtPmJ5dGVzX3JlYWQsIGNvdW50KSkpIHsKKwkJUERFQlVHKDQsICJDb3B5IGZhaWxlZCEgJWQgYnl0ZXMgbm90IGNvcGllZCIsIGkpOworCQlyYyA9IC1FRkFVTFQ7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZnJhbWUtPmJ5dGVzX3JlYWQgKz0gY291bnQ7CisJUERFQlVHKDQsICJ7Y29weX0gY291bnQgdXNlZD0lbGQsIG5ldyBieXRlc19yZWFkPSVsZCIsCisJCWNvdW50LCBmcmFtZS0+Ynl0ZXNfcmVhZCk7CisKKwkvKiBJZiBhbGwgZGF0YSBoYXZlIGJlZW4gcmVhZC4uLiAqLworCWlmIChmcmFtZS0+Ynl0ZXNfcmVhZAorCSAgICA+PSBnZXRfZnJhbWVfbGVuZ3RoKGZyYW1lKSkgeworCQlmcmFtZS0+Ynl0ZXNfcmVhZCA9IDA7CisKKy8vIEZJWE1FOiBPbmx5IHN1cHBvcnRzIHR3byBmcmFtZXMKKwkJLyogTWFyayBpdCBhcyBhdmFpbGFibGUgdG8gYmUgdXNlZCBhZ2Fpbi4gKi8KKwkJb3YtPmZyYW1lW2ZybXhdLmdyYWJzdGF0ZSA9IEZSQU1FX1VOVVNFRDsKKwkJaWYgKChyYyA9IG92NTF4X25ld19mcmFtZShvdiwgIWZybXgpKSkgeworCQkJZXJyKCJvdjUxeF9uZXdfZnJhbWUgcmV0dXJuZWQgZXJyb3IiKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisKKwlQREVCVUcoNCwgInJlYWQgZmluaXNoZWQsIHJldHVybmluZyAlbGQgKHN3ZWV0KSIsIGNvdW50KTsKKworCXVwKCZvdi0+bG9jayk7CisJcmV0dXJuIGNvdW50OworCitlcnJvcjoKKwl1cCgmb3YtPmxvY2spOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludAorb3Y1MXhfdjRsMV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgc2l6ZSAgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7CisJc3RydWN0IHVzYl9vdjUxMSAqb3YgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKKwl1bnNpZ25lZCBsb25nIHBhZ2UsIHBvczsKKworCWlmIChvdi0+ZGV2ID09IE5VTEwpCisJCXJldHVybiAtRUlPOworCisJUERFQlVHKDQsICJtbWFwOiAlbGQgKCVsWCkgYnl0ZXMiLCBzaXplLCBzaXplKTsKKworCWlmIChzaXplID4gKCgoT1Y1MTFfTlVNRlJBTUVTCisJICAgICAgICAgICAgICAqIE1BWF9EQVRBX1NJWkUob3YtPm1heHdpZHRoLCBvdi0+bWF4aGVpZ2h0KQorCSAgICAgICAgICAgICAgKyBQQUdFX1NJWkUgLSAxKSAmIH4oUEFHRV9TSVpFIC0gMSkpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZvdi0+bG9jaykpCisJCXJldHVybiAtRUlOVFI7CisKKwlwb3MgPSAodW5zaWduZWQgbG9uZylvdi0+ZmJ1ZjsKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJcGFnZSA9IHZtYWxsb2NfdG9fcGZuKCh2b2lkICopcG9zKTsKKwkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwYWdlLCBQQUdFX1NJWkUsIFBBR0VfU0hBUkVEKSkgeworCQkJdXAoJm92LT5sb2NrKTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJCXN0YXJ0ICs9IFBBR0VfU0laRTsKKwkJcG9zICs9IFBBR0VfU0laRTsKKwkJaWYgKHNpemUgPiBQQUdFX1NJWkUpCisJCQlzaXplIC09IFBBR0VfU0laRTsKKwkJZWxzZQorCQkJc2l6ZSA9IDA7CisJfQorCisJdXAoJm92LT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb3Y1MTFfZm9wcyA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkub3BlbiA9CQlvdjUxeF92NGwxX29wZW4sCisJLnJlbGVhc2UgPQlvdjUxeF92NGwxX2Nsb3NlLAorCS5yZWFkID0JCW92NTF4X3Y0bDFfcmVhZCwKKwkubW1hcCA9CQlvdjUxeF92NGwxX21tYXAsCisJLmlvY3RsID0Jb3Y1MXhfdjRsMV9pb2N0bCwKKwkubGxzZWVrID0Jbm9fbGxzZWVrLAorfTsKKworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgdmRldl90ZW1wbGF0ZSA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiT1Y1MTEgVVNCIENhbWVyYSIsCisJLnR5cGUgPQkJVklEX1RZUEVfQ0FQVFVSRSwKKwkuaGFyZHdhcmUgPQlWSURfSEFSRFdBUkVfT1Y1MTEsCisJLmZvcHMgPQkJJm92NTExX2ZvcHMsCisJLnJlbGVhc2UgPQl2aWRlb19kZXZpY2VfcmVsZWFzZSwKKwkubWlub3IgPQktMSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogT1Y1MTEgYW5kIHNlbnNvciBjb25maWd1cmF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBpbml0aWFsaXplcyB0aGUgT1Y3NjEwLCBPVjc2MjAsIG9yIE9WNzZCRSBzZW5zb3IuIFRoZSBPVjc2QkUgdXNlcworICogdGhlIHNhbWUgcmVnaXN0ZXIgc2V0dGluZ3MgYXMgdGhlIE9WNzYxMCwgc2luY2UgdGhleSBhcmUgdmVyeSBzaW1pbGFyLgorICovCitzdGF0aWMgaW50Citvdjd4eDBfY29uZmlndXJlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCWludCBpLCBzdWNjZXNzOworCWludCByYzsKKworCS8qIExhd3JlbmNlIEdsYWlzdGVyIDxsZ0BqZm0uYmMuY2E+IHJlcG9ydHM6CisJICoKKwkgKiBSZWdpc3RlciAweDBmIGluIHRoZSA3NjEwIGhhcyB0aGUgZm9sbG93aW5nIGVmZmVjdHM6CisJICoKKwkgKiAweDg1IChBRUMgbWV0aG9kIDEpOiBCZXN0IG92ZXJhbGwsIGdvb2QgY29udHJhc3QgcmFuZ2UKKwkgKiAweDQ1IChBRUMgbWV0aG9kIDIpOiBWZXJ5IG92ZXJleHBvc2VkCisJICogMHhhNSAoc3BlYyBzaGVldCBkZWZhdWx0KTogT2ssIGJ1dCB0aGUgYmxhY2sgbGV2ZWwgaXMKKwkgKglzaGlmdGVkIHJlc3VsdGluZyBpbiBsb3NzIG9mIGNvbnRyYXN0CisJICogMHgwNSAob2xkIGRyaXZlciBzZXR0aW5nKTogdmVyeSBvdmVyZXhwb3NlZCwgdG9vIG11Y2gKKwkgKgljb250cmFzdAorCSAqLworCXN0YXRpYyBzdHJ1Y3Qgb3Y1MTFfcmVndmFscyBhUmVndmFsc05vcm03NjEwW10gPSB7CisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxMCwgMHhmZiB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTYsIDB4MDYgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDI4LCAweDI0IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyYiwgMHhhYyB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTIsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDM4LCAweDgxIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyOCwgMHgyNCB9LAkvKiAwYyAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4MGYsIDB4ODUgfSwJLyogbGcncyBzZXR0aW5nICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxNSwgMHgwMSB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MjAsIDB4MWMgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDIzLCAweDJhIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyNCwgMHgxMCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MjUsIDB4OGEgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDI2LCAweGEyIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyNywgMHhjMiB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MmEsIDB4MDQgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDJjLCAweGZlIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyZCwgMHg5MyB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MzAsIDB4NzEgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDMxLCAweDYwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgzMiwgMHgyNiB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MzMsIDB4MjAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDM0LCAweDQ4IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxMiwgMHgyNCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTEsIDB4MDEgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDBjLCAweDI0IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwZCwgMHgyNCB9LAorCQl7IE9WNTExX0RPTkVfQlVTLCAweDAsIDB4MDAgfSwKKwl9OworCisJc3RhdGljIHN0cnVjdCBvdjUxMV9yZWd2YWxzIGFSZWd2YWxzTm9ybTc2MjBbXSA9IHsKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDAwLCAweDAwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwMSwgMHg4MCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MDIsIDB4ODAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDAzLCAweGMwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwNiwgMHg2MCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MDcsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDBjLCAweDI0IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwYywgMHgyNCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MGQsIDB4MjQgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDExLCAweDAxIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxMiwgMHgyNCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTMsIDB4MDEgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDE0LCAweDg0IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxNSwgMHgwMSB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTYsIDB4MDMgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDE3LCAweDJmIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxOCwgMHhjZiB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTksIDB4MDYgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDFhLCAweGY1IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxYiwgMHgwMCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MjAsIDB4MTggfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDIxLCAweDgwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyMiwgMHg4MCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MjMsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDI2LCAweGEyIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyNywgMHhlYSB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MjgsIDB4MjAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDI5LCAweDAwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyYSwgMHgxMCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MmIsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDJjLCAweDg4IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyZCwgMHg5MSB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MmUsIDB4ODAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDJmLCAweDQ0IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg2MCwgMHgyNyB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NjEsIDB4MDIgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDYyLCAweDVmIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg2MywgMHhkNSB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NjQsIDB4NTcgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDY1LCAweDgzIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg2NiwgMHg1NSB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NjcsIDB4OTIgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDY4LCAweGNmIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg2OSwgMHg3NiB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NmEsIDB4MjIgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDZiLCAweDAwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg2YywgMHgwMiB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NmQsIDB4NDQgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDZlLCAweDgwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg2ZiwgMHgxZCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NzAsIDB4OGIgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDcxLCAweDAwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg3MiwgMHgxNCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NzMsIDB4NTQgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDc0LCAweDAwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg3NSwgMHg4ZSB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NzYsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDc3LCAweGZmIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg3OCwgMHg4MCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NzksIDB4ODAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDdhLCAweDgwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg3YiwgMHhlMiB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4N2MsIDB4MDAgfSwKKwkJeyBPVjUxMV9ET05FX0JVUywgMHgwLCAweDAwIH0sCisJfTsKKworCVBERUJVRyg0LCAic3RhcnRpbmcgY29uZmlndXJhdGlvbiIpOworCisJLyogVGhpcyBsb29rcyByZWR1bmRhbnQsIGJ1dCBpcyBuZWNlc3NhcnkgZm9yIFdlYkNhbSAzICovCisJb3YtPnByaW1hcnlfaTJjX3NsYXZlID0gT1Y3eHgwX1NJRDsKKwlpZiAob3Y1MXhfc2V0X3NsYXZlX2lkcyhvdiwgT1Y3eHgwX1NJRCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoaW5pdF9vdl9zZW5zb3Iob3YpID49IDApIHsKKwkJUERFQlVHKDEsICJPVjd4eDAgc2Vuc29yIGluaXRhbGl6ZWQgKG1ldGhvZCAxKSIpOworCX0gZWxzZSB7CisJCS8qIFJlc2V0IHRoZSA3Nnh4ICovCisJCWlmIChpMmNfdyhvdiwgMHgxMiwgMHg4MCkgPCAwKQorCQkJcmV0dXJuIC0xOworCisJCS8qIFdhaXQgZm9yIGl0IHRvIGluaXRpYWxpemUgKi8KKwkJbXNsZWVwKDE1MCk7CisKKwkJaSA9IDA7CisJCXN1Y2Nlc3MgPSAwOworCQl3aGlsZSAoaSA8PSBpMmNfZGV0ZWN0X3RyaWVzKSB7CisJCQlpZiAoKGkyY19yKG92LCBPVjc2MTBfUkVHX0lEX0hJR0gpID09IDB4N0YpICYmCisJCQkgICAgKGkyY19yKG92LCBPVjc2MTBfUkVHX0lEX0xPVykgPT0gMHhBMikpIHsKKwkJCQlzdWNjZXNzID0gMTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJaSsrOworCQkJfQorCQl9CisKKy8vIFdhcyAoaSA9PSBpMmNfZGV0ZWN0X3RyaWVzKSBwcmV2aW91c2x5LiBUaGlzIG9idmlvdXNseSB1c2VkIHRvIGFsd2F5cyByZXBvcnQKKy8vIHN1Y2Nlc3MuIFdoZXRoZXIgYW55b25lIGFjdHVhbGx5IGRlcGVuZGVkIG9uIHRoYXQgYnVnIGlzIHVua25vd24KKwkJaWYgKChpID49IGkyY19kZXRlY3RfdHJpZXMpICYmIChzdWNjZXNzID09IDApKSB7CisJCQllcnIoIkZhaWxlZCB0byByZWFkIHNlbnNvciBJRC4gWW91IG1pZ2h0IG5vdCBoYXZlIGFuIik7CisJCQllcnIoIk9WNzYxMC8yMCwgb3IgaXQgbWF5IGJlIG5vdCByZXNwb25kaW5nLiBSZXBvcnQiKTsKKwkJCWVycigidGhpcyB0byAiIEVNQUlMKTsKKwkJCWVycigiVGhpcyBpcyBvbmx5IGEgd2FybmluZy4gWW91IGNhbiBhdHRlbXB0IHRvIHVzZSIpOworCQkJZXJyKCJ5b3VyIGNhbWVyYSBhbnl3YXkiKTsKKy8vIE9ubHkgaXNzdWUgYSB3YXJuaW5nIGZvciBub3cKKy8vCQkJcmV0dXJuIC0xOworCQl9IGVsc2UgeworCQkJUERFQlVHKDEsICJPVjd4eDAgaW5pdGlhbGl6ZWQgKG1ldGhvZCAyLCAlZHgpIiwgaSsxKTsKKwkJfQorCX0KKworCS8qIERldGVjdCBzZW5zb3IgKHN1Yil0eXBlICovCisJcmMgPSBpMmNfcihvdiwgT1Y3NjEwX1JFR19DT01fSSk7CisKKwlpZiAocmMgPCAwKSB7CisJCWVycigiRXJyb3IgZGV0ZWN0aW5nIHNlbnNvciB0eXBlIik7CisJCXJldHVybiAtMTsKKwl9IGVsc2UgaWYgKChyYyAmIDMpID09IDMpIHsKKwkJaW5mbygiU2Vuc29yIGlzIGFuIE9WNzYxMCIpOworCQlvdi0+c2Vuc29yID0gU0VOX09WNzYxMDsKKwl9IGVsc2UgaWYgKChyYyAmIDMpID09IDEpIHsKKwkJLyogSSBkb24ndCBrbm93IHdoYXQncyBkaWZmZXJlbnQgYWJvdXQgdGhlIDc2QkUgeWV0LiAqLworCQlpZiAoaTJjX3Iob3YsIDB4MTUpICYgMSkKKwkJCWluZm8oIlNlbnNvciBpcyBhbiBPVjc2MjBBRSIpOworCQllbHNlCisJCQlpbmZvKCJTZW5zb3IgaXMgYW4gT1Y3NkJFIik7CisKKwkJLyogT1Y1MTErIHdpbGwgcmV0dXJuIGFsbCB6ZXJvIGlzb2MgZGF0YSB1bmxlc3Mgd2UKKwkJICogY29uZmlndXJlIHRoZSBzZW5zb3IgYXMgYSA3NjIwLiBTb21lb25lIG5lZWRzIHRvCisJCSAqIGZpbmQgdGhlIGV4YWN0IHJlZy4gc2V0dGluZyB0aGF0IGNhdXNlcyB0aGlzLiAqLworCQlpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MTFQTFVTKSB7CisJCQlpbmZvKCJFbmFibGluZyA1MTErLzc2MjBBRSB3b3JrYXJvdW5kIik7CisJCQlvdi0+c2Vuc29yID0gU0VOX09WNzYyMDsKKwkJfSBlbHNlIHsKKwkJCW92LT5zZW5zb3IgPSBTRU5fT1Y3NkJFOworCQl9CisJfSBlbHNlIGlmICgocmMgJiAzKSA9PSAwKSB7CisJCWluZm8oIlNlbnNvciBpcyBhbiBPVjc2MjAiKTsKKwkJb3YtPnNlbnNvciA9IFNFTl9PVjc2MjA7CisJfSBlbHNlIHsKKwkJZXJyKCJVbmtub3duIGltYWdlIHNlbnNvciB2ZXJzaW9uOiAlZCIsIHJjICYgMyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAob3YtPnNlbnNvciA9PSBTRU5fT1Y3NjIwKSB7CisJCVBERUJVRyg0LCAiV3JpdGluZyA3NjIwIHJlZ2lzdGVycyIpOworCQlpZiAod3JpdGVfcmVndmFscyhvdiwgYVJlZ3ZhbHNOb3JtNzYyMCkpCisJCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJUERFQlVHKDQsICJXcml0aW5nIDc2MTAgcmVnaXN0ZXJzIik7CisJCWlmICh3cml0ZV9yZWd2YWxzKG92LCBhUmVndmFsc05vcm03NjEwKSkKKwkJCXJldHVybiAtMTsKKwl9CisKKwkvKiBTZXQgc2Vuc29yLXNwZWNpZmljIHZhcnMgKi8KKwlvdi0+bWF4d2lkdGggPSA2NDA7CisJb3YtPm1heGhlaWdodCA9IDQ4MDsKKwlvdi0+bWlud2lkdGggPSA2NDsKKwlvdi0+bWluaGVpZ2h0ID0gNDg7CisKKwkvLyBGSVhNRTogVGhlc2UgZG8gbm90IG1hdGNoIHRoZSBhY3R1YWwgc2V0dGluZ3MgeWV0CisJb3YtPmJyaWdodG5lc3MgPSAweDgwIDw8IDg7CisJb3YtPmNvbnRyYXN0ID0gMHg4MCA8PCA4OworCW92LT5jb2xvdXIgPSAweDgwIDw8IDg7CisJb3YtPmh1ZSA9IDB4ODAgPDwgODsKKworCXJldHVybiAwOworfQorCisvKiBUaGlzIGluaXRpYWxpemVzIHRoZSBPVjY2MjAsIE9WNjYzMCwgT1Y2NjMwQUUsIG9yIE9WNjYzMEFGIHNlbnNvci4gKi8KK3N0YXRpYyBpbnQKK292Nnh4MF9jb25maWd1cmUoc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaW50IHJjOworCisJc3RhdGljIHN0cnVjdCBvdjUxMV9yZWd2YWxzIGFSZWd2YWxzTm9ybTZ4MjBbXSA9IHsKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDEyLCAweDgwIH0sIC8qIHJlc2V0ICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxMSwgMHgwMSB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MDMsIDB4NjAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDA1LCAweDdmIH0sIC8qIEZvciB3aGVuIGF1dG9hZGp1c3QgaXMgb2ZmICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwNywgMHhhOCB9LAorCQkvKiBUaGUgcmF0aW8gb2YgMHgwYyBhbmQgMHgwZCAgY29udHJvbHMgdGhlIHdoaXRlIHBvaW50ICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwYywgMHgyNCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MGQsIDB4MjQgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDBmLCAweDE1IH0sIC8qIENPTVMgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDEwLCAweDc1IH0sIC8qIEFFQyBFeHBvc3VyZSB0aW1lICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxMiwgMHgyNCB9LCAvKiBFbmFibGUgQUdDICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxNCwgMHgwNCB9LAorCQkvKiAweDE2OiAweDA2IGhlbHBzIGZyYW1lIHN0YWJpbGl0eSB3aXRoIG1vdmluZyBvYmplY3RzICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxNiwgMHgwNiB9LAorLy8JCXsgT1Y1MTFfSTJDX0JVUywgMHgyMCwgMHgzMCB9LCAvKiBBcGVydHVyZSBjb3JyZWN0aW9uIGVuYWJsZSAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4MjYsIDB4YjIgfSwgLyogQkxDIGVuYWJsZSAqLworCQkvKiAweDI4OiAweDA1IFNlbGVjdHMgUkdCIGZvcm1hdCBpZiBSR0Igb24gKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDI4LCAweDA1IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyYSwgMHgwNCB9LCAvKiBEaXNhYmxlIGZyYW1lcmF0ZSBhZGp1c3QgKi8KKy8vCQl7IE9WNTExX0kyQ19CVVMsIDB4MmIsIDB4YWMgfSwgLyogRnJhbWVyYXRlOyBTZXQgMmFbN10gZmlyc3QgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDJkLCAweDk5IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgzMywgMHhhMCB9LCAvKiBDb2xvciBQcm9jZXNpbmcgUGFyYW1ldGVyICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgzNCwgMHhkMiB9LCAvKiBNYXggQS9EIHJhbmdlICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgzOCwgMHg4YiB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MzksIDB4NDAgfSwKKworCQl7IE9WNTExX0kyQ19CVVMsIDB4M2MsIDB4MzkgfSwgLyogRW5hYmxlIEFFQyBtb2RlIGNoYW5naW5nICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgzYywgMHgzYyB9LCAvKiBDaGFuZ2UgQUVDIG1vZGUgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDNjLCAweDI0IH0sIC8qIERpc2FibGUgQUVDIG1vZGUgY2hhbmdpbmcgKi8KKworCQl7IE9WNTExX0kyQ19CVVMsIDB4M2QsIDB4ODAgfSwKKwkJLyogVGhlc2UgbmV4dCB0d28gcmVnaXN0ZXJzICgweDRhLCAweDRiKSBhcmUgdW5kb2N1bWVudGVkLiBUaGV5CisJCSAqIGNvbnRyb2wgdGhlIGNvbG9yIGJhbGFuY2UgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDRhLCAweDgwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg0YiwgMHg4MCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NGQsIDB4ZDIgfSwgLyogVGhpcyByZWR1Y2VzIG5vaXNlIGEgYml0ICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg0ZSwgMHhjMSB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NGYsIDB4MDQgfSwKKy8vIERvIDUwLTUzIGhhdmUgYW55IGVmZmVjdD8KKy8vIFRvZ2dsZSAweDEyWzJdIG9mZiBhbmQgb24gaGVyZT8KKwkJeyBPVjUxMV9ET05FX0JVUywgMHgwLCAweDAwIH0sCS8qIEVORCBNQVJLRVIgKi8KKwl9OworCisJc3RhdGljIHN0cnVjdCBvdjUxMV9yZWd2YWxzIGFSZWd2YWxzTm9ybTZ4MzBbXSA9IHsKKwkvKk9LKi8JeyBPVjUxMV9JMkNfQlVTLCAweDEyLCAweDgwIH0sIC8qIHJlc2V0ICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxMSwgMHgwMCB9LAorCS8qT0sqLwl7IE9WNTExX0kyQ19CVVMsIDB4MDMsIDB4NjAgfSwKKwkvKjBBPyovCXsgT1Y1MTFfSTJDX0JVUywgMHgwNSwgMHg3ZiB9LCAvKiBGb3Igd2hlbiBhdXRvYWRqdXN0IGlzIG9mZiAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4MDcsIDB4YTggfSwKKwkJLyogVGhlIHJhdGlvIG9mIDB4MGMgYW5kIDB4MGQgIGNvbnRyb2xzIHRoZSB3aGl0ZSBwb2ludCAqLworCS8qT0sqLwl7IE9WNTExX0kyQ19CVVMsIDB4MGMsIDB4MjQgfSwKKwkvKk9LKi8JeyBPVjUxMV9JMkNfQlVTLCAweDBkLCAweDI0IH0sCisJLypBKi8JeyBPVjUxMV9JMkNfQlVTLCAweDBlLCAweDIwIH0sCisvLwkvKjA0PyovCXsgT1Y1MTFfSTJDX0JVUywgMHgxNCwgMHg4MCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTYsIDB4MDMgfSwKKy8vCS8qT0sqLwl7IE9WNTExX0kyQ19CVVMsIDB4MjAsIDB4MzAgfSwgLyogQXBlcnR1cmUgY29ycmVjdGlvbiBlbmFibGUgKi8KKwkJLy8gMjEgJiAyMj8gVGhlIHN1Z2dlc3RlZCB2YWx1ZXMgbG9vayB3cm9uZy4gR28gd2l0aCBkZWZhdWx0CisJLypBKi8JeyBPVjUxMV9JMkNfQlVTLCAweDIzLCAweGMwIH0sCisJLypBKi8JeyBPVjUxMV9JMkNfQlVTLCAweDI1LCAweDlhIH0sIC8vIENoZWNrIHRoaXMgYWdhaW5zdCBkZWZhdWx0CisvLwkvKk9LKi8JeyBPVjUxMV9JMkNfQlVTLCAweDI2LCAweGIyIH0sIC8qIEJMQyBlbmFibGUgKi8KKworCQkvKiAweDI4OiAweDA1IFNlbGVjdHMgUkdCIGZvcm1hdCBpZiBSR0Igb24gKi8KKy8vCS8qMDQ/Ki8JeyBPVjUxMV9JMkNfQlVTLCAweDI4LCAweDA1IH0sCisvLwkvKjA0PyovCXsgT1Y1MTFfSTJDX0JVUywgMHgyOCwgMHg0NSB9LCAvLyBERUJVRzogVHJpc3RhdGUgVVYgYnVzCisKKwkvKk9LKi8JeyBPVjUxMV9JMkNfQlVTLCAweDJhLCAweDA0IH0sIC8qIERpc2FibGUgZnJhbWVyYXRlIGFkanVzdCAqLworLy8JLypPSyovCXsgT1Y1MTFfSTJDX0JVUywgMHgyYiwgMHhhYyB9LCAvKiBGcmFtZXJhdGU7IFNldCAyYVs3XSBmaXJzdCAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4MmQsIDB4OTkgfSwKKy8vCS8qQSovCXsgT1Y1MTFfSTJDX0JVUywgMHgzMywgMHgyNiB9LCAvLyBSZXNlcnZlZCBiaXRzIG9uIDY2MjAKKy8vCS8qZDI/Ki8JeyBPVjUxMV9JMkNfQlVTLCAweDM0LCAweDAzIH0sIC8qIE1heCBBL0QgcmFuZ2UgKi8KKy8vCS8qOGI/Ki8JeyBPVjUxMV9JMkNfQlVTLCAweDM4LCAweDgzIH0sCisvLwkvKjQwPyovCXsgT1Y1MTFfSTJDX0JVUywgMHgzOSwgMHhjMCB9LCAvLyA2NjMwIGFkZHMgYml0IDcKKy8vCQl7IE9WNTExX0kyQ19CVVMsIDB4M2MsIDB4MzkgfSwgLyogRW5hYmxlIEFFQyBtb2RlIGNoYW5naW5nICovCisvLwkJeyBPVjUxMV9JMkNfQlVTLCAweDNjLCAweDNjIH0sIC8qIENoYW5nZSBBRUMgbW9kZSAqLworLy8JCXsgT1Y1MTFfSTJDX0JVUywgMHgzYywgMHgyNCB9LCAvKiBEaXNhYmxlIEFFQyBtb2RlIGNoYW5naW5nICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgzZCwgMHg4MCB9LAorLy8JLypBKi8JeyBPVjUxMV9JMkNfQlVTLCAweDNmLCAweDBlIH0sCisKKwkJLyogVGhlc2UgbmV4dCB0d28gcmVnaXN0ZXJzICgweDRhLCAweDRiKSBhcmUgdW5kb2N1bWVudGVkLiBUaGV5CisJCSAqIGNvbnRyb2wgdGhlIGNvbG9yIGJhbGFuY2UgKi8KKy8vCS8qT0s/Ki8JeyBPVjUxMV9JMkNfQlVTLCAweDRhLCAweDgwIH0sIC8vIENoZWNrIHRoZXNlCisvLwkvKk9LPyovCXsgT1Y1MTFfSTJDX0JVUywgMHg0YiwgMHg4MCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NGQsIDB4MTAgfSwgLyogVSA9IDAuNTYzdSwgViA9IDAuNzE0diAqLworCS8qYzE/Ki8JeyBPVjUxMV9JMkNfQlVTLCAweDRlLCAweDQwIH0sCisKKwkJLyogVVYgYXZlcmFnZSBtb2RlLCBjb2xvciBraWxsZXI6IHN0cm9uZ2VzdCAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4NGYsIDB4MDcgfSwKKworCQl7IE9WNTExX0kyQ19CVVMsIDB4NTQsIDB4MjMgfSwgLyogTWF4IEFHQyBnYWluOiAxOGRCICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg1NywgMHg4MSB9LCAvKiAoZGVmYXVsdCkgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDU5LCAweDAxIH0sIC8qIEFHQyBkYXJrIGN1cnJlbnQgY29tcDogKzEgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDVhLCAweDJjIH0sIC8qICh1bmRvY3VtZW50ZWQpICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg1YiwgMHgwZiB9LCAvKiBBV0IgY2hyb21pbmFuY2UgbGV2ZWxzICovCisvLwkJeyBPVjUxMV9JMkNfQlVTLCAweDVjLCAweDEwIH0sCisJCXsgT1Y1MTFfRE9ORV9CVVMsIDB4MCwgMHgwMCB9LAkvKiBFTkQgTUFSS0VSICovCisJfTsKKworCVBERUJVRyg0LCAic3RhcnRpbmcgc2Vuc29yIGNvbmZpZ3VyYXRpb24iKTsKKworCWlmIChpbml0X292X3NlbnNvcihvdikgPCAwKSB7CisJCWVycigiRmFpbGVkIHRvIHJlYWQgc2Vuc29yIElELiBZb3UgbWlnaHQgbm90IGhhdmUgYW4gT1Y2eHgwLCIpOworCQllcnIoIm9yIGl0IG1heSBiZSBub3QgcmVzcG9uZGluZy4gUmVwb3J0IHRoaXMgdG8gIiBFTUFJTCk7CisJCXJldHVybiAtMTsKKwl9IGVsc2UgeworCQlQREVCVUcoMSwgIk9WNnh4MCBzZW5zb3IgZGV0ZWN0ZWQiKTsKKwl9CisKKwkvKiBEZXRlY3Qgc2Vuc29yIChzdWIpdHlwZSAqLworCXJjID0gaTJjX3Iob3YsIE9WNzYxMF9SRUdfQ09NX0kpOworCisJaWYgKHJjIDwgMCkgeworCQllcnIoIkVycm9yIGRldGVjdGluZyBzZW5zb3IgdHlwZSIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKChyYyAmIDMpID09IDApIHsKKwkJb3YtPnNlbnNvciA9IFNFTl9PVjY2MzA7CisJCWluZm8oIlNlbnNvciBpcyBhbiBPVjY2MzAiKTsKKwl9IGVsc2UgaWYgKChyYyAmIDMpID09IDEpIHsKKwkJb3YtPnNlbnNvciA9IFNFTl9PVjY2MjA7CisJCWluZm8oIlNlbnNvciBpcyBhbiBPVjY2MjAiKTsKKwl9IGVsc2UgaWYgKChyYyAmIDMpID09IDIpIHsKKwkJb3YtPnNlbnNvciA9IFNFTl9PVjY2MzA7CisJCWluZm8oIlNlbnNvciBpcyBhbiBPVjY2MzBBRSIpOworCX0gZWxzZSBpZiAoKHJjICYgMykgPT0gMykgeworCQlvdi0+c2Vuc29yID0gU0VOX09WNjYzMDsKKwkJaW5mbygiU2Vuc29yIGlzIGFuIE9WNjYzMEFGIik7CisJfQorCisJLyogU2V0IHNlbnNvci1zcGVjaWZpYyB2YXJzICovCisJb3YtPm1heHdpZHRoID0gMzUyOworCW92LT5tYXhoZWlnaHQgPSAyODg7CisJb3YtPm1pbndpZHRoID0gNjQ7CisJb3YtPm1pbmhlaWdodCA9IDQ4OworCisJLy8gRklYTUU6IFRoZXNlIGRvIG5vdCBtYXRjaCB0aGUgYWN0dWFsIHNldHRpbmdzIHlldAorCW92LT5icmlnaHRuZXNzID0gMHg4MCA8PCA4OworCW92LT5jb250cmFzdCA9IDB4ODAgPDwgODsKKwlvdi0+Y29sb3VyID0gMHg4MCA8PCA4OworCW92LT5odWUgPSAweDgwIDw8IDg7CisKKwlpZiAob3YtPnNlbnNvciA9PSBTRU5fT1Y2NjIwKSB7CisJCVBERUJVRyg0LCAiV3JpdGluZyA2eDIwIHJlZ2lzdGVycyIpOworCQlpZiAod3JpdGVfcmVndmFscyhvdiwgYVJlZ3ZhbHNOb3JtNngyMCkpCisJCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJUERFQlVHKDQsICJXcml0aW5nIDZ4MzAgcmVnaXN0ZXJzIik7CisJCWlmICh3cml0ZV9yZWd2YWxzKG92LCBhUmVndmFsc05vcm02eDMwKSkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBpbml0aWFsaXplcyB0aGUgS1MwMTI3IGFuZCBLUzAxMjdCIHZpZGVvIGRlY29kZXJzLiAqLworc3RhdGljIGludCAKK2tzMDEyN19jb25maWd1cmUoc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaW50IHJjOworCisvLyBGSVhNRTogSSBkb24ndCBrbm93IGhvdyB0byBzeW5jIG9yIHJlc2V0IGl0IHlldAorI2lmIDAKKwlpZiAob3Y1MXhfaW5pdF9rc19zZW5zb3Iob3YpIDwgMCkgeworCQllcnIoIkZhaWxlZCB0byBpbml0aWFsaXplIHRoZSBLUzAxMjciKTsKKwkJcmV0dXJuIC0xOworCX0gZWxzZSB7CisJCVBERUJVRygxLCAiS1MwMTJ4KEIpIHNlbnNvciBkZXRlY3RlZCIpOworCX0KKyNlbmRpZgorCisJLyogRGV0ZWN0IGRlY29kZXIgc3VidHlwZSAqLworCXJjID0gaTJjX3Iob3YsIDB4MDApOworCWlmIChyYyA8IDApIHsKKwkJZXJyKCJFcnJvciBkZXRlY3Rpbmcgc2Vuc29yIHR5cGUiKTsKKwkJcmV0dXJuIC0xOworCX0gZWxzZSBpZiAocmMgJiAweDA4KSB7CisJCXJjID0gaTJjX3Iob3YsIDB4M2QpOworCQlpZiAocmMgPCAwKSB7CisJCQllcnIoIkVycm9yIGRldGVjdGluZyBzZW5zb3IgdHlwZSIpOworCQkJcmV0dXJuIC0xOworCQl9IGVsc2UgaWYgKChyYyAmIDB4MGYpID09IDApIHsKKwkJCWluZm8oIlNlbnNvciBpcyBhIEtTMDEyNyIpOworCQkJb3YtPnNlbnNvciA9IFNFTl9LUzAxMjc7CisJCX0gZWxzZSBpZiAoKHJjICYgMHgwZikgPT0gOSkgeworCQkJaW5mbygiU2Vuc29yIGlzIGEgS1MwMTI3QiBSZXYuIEEiKTsKKwkJCW92LT5zZW5zb3IgPSBTRU5fS1MwMTI3QjsKKwkJfQorCX0gZWxzZSB7CisJCWVycigiRXJyb3I6IFNlbnNvciBpcyBhbiB1bnN1cHBvcnRlZCBLUzAxMjIiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFNldCBzZW5zb3Itc3BlY2lmaWMgdmFycyAqLworCW92LT5tYXh3aWR0aCA9IDY0MDsKKwlvdi0+bWF4aGVpZ2h0ID0gNDgwOworCW92LT5taW53aWR0aCA9IDY0OworCW92LT5taW5oZWlnaHQgPSA0ODsKKworCS8vIEZJWE1FOiBUaGVzZSBkbyBub3QgbWF0Y2ggdGhlIGFjdHVhbCBzZXR0aW5ncyB5ZXQKKwlvdi0+YnJpZ2h0bmVzcyA9IDB4ODAgPDwgODsKKwlvdi0+Y29udHJhc3QgPSAweDgwIDw8IDg7CisJb3YtPmNvbG91ciA9IDB4ODAgPDwgODsKKwlvdi0+aHVlID0gMHg4MCA8PCA4OworCisJLyogVGhpcyBkZXZpY2UgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIEJhaWwgb3V0IG5vdy4uLiAqLworCWVycigiVGhpcyBzZW5zb3IgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIik7CisJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIFNBQTcxMTFBIHZpZGVvIGRlY29kZXIuICovCitzdGF0aWMgaW50CitzYWE3MTExYV9jb25maWd1cmUoc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaW50IHJjOworCisJLyogU2luY2UgdGhlcmUgaXMgbm8gcmVnaXN0ZXIgcmVzZXQgY29tbWFuZCwgYWxsIHJlZ2lzdGVycyBtdXN0IGJlCisJICogd3JpdHRlbiwgb3RoZXJ3aXNlIGdpdmVzIGVycmF0aWMgcmVzdWx0cyAqLworCXN0YXRpYyBzdHJ1Y3Qgb3Y1MTFfcmVndmFscyBhUmVndmFsc05vcm1TQUE3MTExQVtdID0geworCQl7IE9WNTExX0kyQ19CVVMsIDB4MDYsIDB4Y2UgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDA3LCAweDAwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxMCwgMHg0NCB9LCAvKiBZVVY0MjIsIDI0MC8yODYgbGluZXMgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDBlLCAweDAxIH0sIC8qIE5UU0MgTSBvciBQQUwgQkdISSAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4MDAsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDAxLCAweDAwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwMywgMHgyMyB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MDQsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDA1LCAweDAwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwOCwgMHhjOCB9LCAvKiBBdXRvIGZpZWxkIGZyZXEgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDA5LCAweDAxIH0sIC8qIENocm9tLiB0cmFwIG9mZiwgQVBFUj0wLjI1ICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwYSwgMHg4MCB9LCAvKiBCUklHPTEyOCAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4MGIsIDB4NDAgfSwgLyogQ09OVD0xLjAgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDBjLCAweDQwIH0sIC8qIFNBVE49MS4wICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwZCwgMHgwMCB9LCAvKiBIVUU9MCAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4MGYsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDExLCAweDBjIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxMiwgMHgwMCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTMsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDE0LCAweDAwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxNSwgMHgwMCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTYsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDE3LCAweDAwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwMiwgMHhjMCB9LAkvKiBDb21wb3NpdGUgaW5wdXQgMCAqLworCQl7IE9WNTExX0RPTkVfQlVTLCAweDAsIDB4MDAgfSwKKwl9OworCisvLyBGSVhNRTogSSBkb24ndCBrbm93IGhvdyB0byBzeW5jIG9yIHJlc2V0IGl0IHlldAorI2lmIDAKKwlpZiAob3Y1MXhfaW5pdF9zYWFfc2Vuc29yKG92KSA8IDApIHsKKwkJZXJyKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgU0FBNzExMUEiKTsKKwkJcmV0dXJuIC0xOworCX0gZWxzZSB7CisJCVBERUJVRygxLCAiU0FBNzExMUEgc2Vuc29yIGRldGVjdGVkIik7CisJfQorI2VuZGlmCisKKwkvKiA2NDB4NDgwIG5vdCBzdXBwb3J0ZWQgd2l0aCBQQUwgKi8KKwlpZiAob3YtPnBhbCkgeworCQlvdi0+bWF4d2lkdGggPSAzMjA7CisJCW92LT5tYXhoZWlnaHQgPSAyNDA7CQkvKiBFdmVuIGZpZWxkIG9ubHkgKi8KKwl9IGVsc2UgeworCQlvdi0+bWF4d2lkdGggPSA2NDA7CisJCW92LT5tYXhoZWlnaHQgPSA0ODA7CQkvKiBFdmVuL09kZCBmaWVsZHMgKi8KKwl9CisKKwlvdi0+bWlud2lkdGggPSAzMjA7CisJb3YtPm1pbmhlaWdodCA9IDI0MDsJCS8qIEV2ZW4gZmllbGQgb25seSAqLworCisJb3YtPmhhc19kZWNvZGVyID0gMTsKKwlvdi0+bnVtX2lucHV0cyA9IDg7CisJb3YtPm5vcm0gPSBWSURFT19NT0RFX0FVVE87CisJb3YtPnN0b3BfZHVyaW5nX3NldCA9IDA7CS8qIERlY29kZXIgZ3VhcmFudGVlcyBzdGFibGUgaW1hZ2UgKi8KKworCS8qIERlY29kZXIgZG9lc24ndCBjaGFuZ2UgdGhlc2UgdmFsdWVzLCBzbyB3ZSB1c2UgdGhlc2UgaW5zdGVhZCBvZgorCSAqIGFjdXRhbGx5IHJlYWRpbmcgdGhlIHJlZ2lzdGVycyAod2hpY2ggZG9lc24ndCB3b3JrKSAqLworCW92LT5icmlnaHRuZXNzID0gMHg4MCA8PCA4OworCW92LT5jb250cmFzdCA9IDB4NDAgPDwgOTsKKwlvdi0+Y29sb3VyID0gMHg0MCA8PCA5OworCW92LT5odWUgPSAzMjc2ODsKKworCVBERUJVRyg0LCAiV3JpdGluZyBTQUE3MTExQSByZWdpc3RlcnMiKTsKKwlpZiAod3JpdGVfcmVndmFscyhvdiwgYVJlZ3ZhbHNOb3JtU0FBNzExMUEpKQorCQlyZXR1cm4gLTE7CisKKwkvKiBEZXRlY3QgdmVyc2lvbiBvZiBkZWNvZGVyLiBUaGlzIG11c3QgYmUgZG9uZSBhZnRlciB3cml0aW5nIHRoZQorICAgICAgICAgKiBpbml0aWFsIHJlZ3Mgb3IgdGhlIGRlY29kZXIgd2lsbCBsb2NrIHVwLiAqLworCXJjID0gaTJjX3Iob3YsIDB4MDApOworCisJaWYgKHJjIDwgMCkgeworCQllcnIoIkVycm9yIGRldGVjdGluZyBzZW5zb3IgdmVyc2lvbiIpOworCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJaW5mbygiU2Vuc29yIGlzIGFuIFNBQTcxMTFBICh2ZXJzaW9uIDB4JXgpIiwgcmMpOworCQlvdi0+c2Vuc29yID0gU0VOX1NBQTcxMTFBOworCX0KKworCS8vIEZJWE1FOiBGaXggdGhpcyBmb3IgT1Y1MTgoKykKKwkvKiBMYXRjaCB0byBuZWdhdGl2ZSBlZGdlIG9mIGNsb2NrLiBPdGhlcndpc2UsIHdlIGdldCBpbmNvcnJlY3QKKwkgKiBjb2xvcnMgYW5kIGppdHRlciBpbiB0aGUgZGlnaXRhbCBzaWduYWwuICovCisJaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTExKQorCQlyZWdfdyhvdiwgMHgxMSwgMHgwMCk7CisJZWxzZQorCQl3YXJuKCJTQUE3MTExQSBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIE9WNTE4L09WNTE4KyIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIE9WNTExL09WNTExKyBhbmQgdGhlIHNlbnNvciAqLworc3RhdGljIGludCAKK292NTExX2NvbmZpZ3VyZShzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlzdGF0aWMgc3RydWN0IG92NTExX3JlZ3ZhbHMgYVJlZ3ZhbHNJbml0NTExW10gPSB7CisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfUkVTRVQsCTB4N2YgfSwKKwkgCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfSU5JVCwJCTB4MDEgfSwKKwkgCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfUkVTRVQsCTB4N2YgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19JTklULAkJMHgwMSB9LAorCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX1JFU0VULAkweDNmIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfSU5JVCwJCTB4MDEgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19SRVNFVCwJMHgzZCB9LAorCQl7IE9WNTExX0RPTkVfQlVTLCAweDAsIDB4MDB9LAorCX07CisKKwlzdGF0aWMgc3RydWN0IG92NTExX3JlZ3ZhbHMgYVJlZ3ZhbHNOb3JtNTExW10gPSB7CisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxMV9EUkFNX0ZMT1dfQ1RMLCAJMHgwMSB9LAorCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX1NOQVAsCQkweDAwIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfU05BUCwJCTB4MDIgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19TTkFQLAkJMHgwMCB9LAorCQl7IE9WNTExX1JFR19CVVMsIFI1MTFfRklGT19PUFRTLAkweDFmIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxMV9DT01QX0VOLAkJMHgwMCB9LAorCQl7IE9WNTExX1JFR19CVVMsIFI1MTFfQ09NUF9MVVRfRU4sCTB4MDMgfSwKKwkJeyBPVjUxMV9ET05FX0JVUywgMHgwLCAweDAwIH0sCisJfTsKKworCXN0YXRpYyBzdHJ1Y3Qgb3Y1MTFfcmVndmFscyBhUmVndmFsc05vcm01MTFQbHVzW10gPSB7CisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxMV9EUkFNX0ZMT1dfQ1RMLAkweGZmIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfU05BUCwJCTB4MDAgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19TTkFQLAkJMHgwMiB9LAorCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX1NOQVAsCQkweDAwIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxMV9GSUZPX09QVFMsCTB4ZmYgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTExX0NPTVBfRU4sCQkweDAwIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxMV9DT01QX0xVVF9FTiwJMHgwMyB9LAorCQl7IE9WNTExX0RPTkVfQlVTLCAweDAsIDB4MDAgfSwKKwl9OworCisJUERFQlVHKDQsICIiKTsKKworCW92LT5jdXN0b21pZCA9IHJlZ19yKG92LCBSNTExX1NZU19DVVNUX0lEKTsKKwlpZiAob3YtPmN1c3RvbWlkIDwgMCkgeworCQllcnIoIlVuYWJsZSB0byByZWFkIGNhbWVyYSBicmlkZ2UgcmVnaXN0ZXJzIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJUERFQlVHICgxLCAiQ3VzdG9tSUQgPSAlZCIsIG92LT5jdXN0b21pZCk7CisJb3YtPmRlc2MgPSBzeW1ib2xpYyhjYW1saXN0LCBvdi0+Y3VzdG9taWQpOworCWluZm8oIm1vZGVsOiAlcyIsIG92LT5kZXNjKTsKKworCWlmICgwID09IHN0cmNtcChvdi0+ZGVzYywgTk9UX0RFRklORURfU1RSKSkgeworCQllcnIoIkNhbWVyYSB0eXBlICglZCkgbm90IHJlY29nbml6ZWQiLCBvdi0+Y3VzdG9taWQpOworCQllcnIoIlBsZWFzZSBub3RpZnkgIiBFTUFJTCAiIG9mIHRoZSBuYW1lLCIpOworCQllcnIoIm1hbnVmYWN0dXJlciwgbW9kZWwsIGFuZCB0aGlzIG51bWJlciBvZiB5b3VyIGNhbWVyYS4iKTsKKwkJZXJyKCJBbHNvIGluY2x1ZGUgdGhlIG91dHB1dCBvZiB0aGUgZGV0ZWN0aW9uIHByb2Nlc3MuIik7CisJfSAKKworCWlmIChvdi0+Y3VzdG9taWQgPT0gNzApCQkvKiBVU0IgTGlmZSBUViAoUEFML1NFQ0FNKSAqLworCQlvdi0+cGFsID0gMTsKKworCWlmICh3cml0ZV9yZWd2YWxzKG92LCBhUmVndmFsc0luaXQ1MTEpKQorCQlnb3RvIGVycm9yOworCisJaWYgKG92LT5sZWRfcG9saWN5ID09IExFRF9PRkYgfHwgb3YtPmxlZF9wb2xpY3kgPT0gTEVEX0FVVE8pCisJCW92NTF4X2xlZF9jb250cm9sKG92LCAwKTsKKworCS8qIFRoZSBPVjUxMSsgaGFzIHVuZG9jdW1lbnRlZCBiaXRzIGluIHRoZSBmbG93IGNvbnRyb2wgcmVnaXN0ZXIuCisJICogU2V0dGluZyBpdCB0byAweGZmIGZpeGVzIHRoZSBjb3JydXB0aW9uIHdpdGggbW92aW5nIG9iamVjdHMuICovCisJaWYgKG92LT5icmlkZ2UgPT0gQlJHX09WNTExKSB7CisJCWlmICh3cml0ZV9yZWd2YWxzKG92LCBhUmVndmFsc05vcm01MTEpKQorCQkJZ290byBlcnJvcjsKKwl9IGVsc2UgaWYgKG92LT5icmlkZ2UgPT0gQlJHX09WNTExUExVUykgeworCQlpZiAod3JpdGVfcmVndmFscyhvdiwgYVJlZ3ZhbHNOb3JtNTExUGx1cykpCisJCQlnb3RvIGVycm9yOworCX0gZWxzZSB7CisJCWVycigiSW52YWxpZCBicmlkZ2UiKTsKKwl9CisKKwlpZiAob3Y1MTFfaW5pdF9jb21wcmVzc2lvbihvdikpCisJCWdvdG8gZXJyb3I7CisKKwlvdi0+cGFja2V0X251bWJlcmluZyA9IDE7CisJb3Y1MTFfc2V0X3BhY2tldF9zaXplKG92LCAwKTsKKworCW92LT5zbmFwX2VuYWJsZWQgPSBzbmFwc2hvdDsKKworCS8qIFRlc3QgZm9yIDd4eDAgKi8KKwlQREVCVUcoMywgIlRlc3RpbmcgZm9yIDBWN3h4MCIpOworCW92LT5wcmltYXJ5X2kyY19zbGF2ZSA9IE9WN3h4MF9TSUQ7CisJaWYgKG92NTF4X3NldF9zbGF2ZV9pZHMob3YsIE9WN3h4MF9TSUQpIDwgMCkKKwkJZ290byBlcnJvcjsKKworCWlmIChpMmNfdyhvdiwgMHgxMiwgMHg4MCkgPCAwKSB7CisJCS8qIFRlc3QgZm9yIDZ4eDAgKi8KKwkJUERFQlVHKDMsICJUZXN0aW5nIGZvciAwVjZ4eDAiKTsKKwkJb3YtPnByaW1hcnlfaTJjX3NsYXZlID0gT1Y2eHgwX1NJRDsKKwkJaWYgKG92NTF4X3NldF9zbGF2ZV9pZHMob3YsIE9WNnh4MF9TSUQpIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJaWYgKGkyY193KG92LCAweDEyLCAweDgwKSA8IDApIHsKKwkJCS8qIFRlc3QgZm9yIDh4eDAgKi8KKwkJCVBERUJVRygzLCAiVGVzdGluZyBmb3IgMFY4eHgwIik7CisJCQlvdi0+cHJpbWFyeV9pMmNfc2xhdmUgPSBPVjh4eDBfU0lEOworCQkJaWYgKG92NTF4X3NldF9zbGF2ZV9pZHMob3YsIE9WOHh4MF9TSUQpIDwgMCkKKwkJCQlnb3RvIGVycm9yOworCisJCQlpZiAoaTJjX3cob3YsIDB4MTIsIDB4ODApIDwgMCkgeworCQkJCS8qIFRlc3QgZm9yIFNBQTcxMTFBICovCisJCQkJUERFQlVHKDMsICJUZXN0aW5nIGZvciBTQUE3MTExQSIpOworCQkJCW92LT5wcmltYXJ5X2kyY19zbGF2ZSA9IFNBQTcxMTFBX1NJRDsKKwkJCQlpZiAob3Y1MXhfc2V0X3NsYXZlX2lkcyhvdiwgU0FBNzExMUFfU0lEKSA8IDApCisJCQkJCWdvdG8gZXJyb3I7CisKKwkJCQlpZiAoaTJjX3cob3YsIDB4MGQsIDB4MDApIDwgMCkgeworCQkJCQkvKiBUZXN0IGZvciBLUzAxMjcgKi8KKwkJCQkJUERFQlVHKDMsICJUZXN0aW5nIGZvciBLUzAxMjciKTsKKwkJCQkJb3YtPnByaW1hcnlfaTJjX3NsYXZlID0gS1MwMTI3X1NJRDsKKwkJCQkJaWYgKG92NTF4X3NldF9zbGF2ZV9pZHMob3YsIEtTMDEyN19TSUQpIDwgMCkKKwkJCQkJCWdvdG8gZXJyb3I7CisKKwkJCQkJaWYgKGkyY193KG92LCAweDEwLCAweDAwKSA8IDApIHsKKwkJCQkJCWVycigiQ2FuJ3QgZGV0ZXJtaW5lIHNlbnNvciBzbGF2ZSBJRHMiKTsKKwkJIAkJCQlnb3RvIGVycm9yOworCQkJCQl9IGVsc2UgeworCQkJCQkJaWYgKGtzMDEyN19jb25maWd1cmUob3YpIDwgMCkgeworCQkJCQkJCWVycigiRmFpbGVkIHRvIGNvbmZpZ3VyZSBLUzAxMjciKTsKKwkgCQkJCQkJZ290byBlcnJvcjsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWlmIChzYWE3MTExYV9jb25maWd1cmUob3YpIDwgMCkgeworCQkJCQkJZXJyKCJGYWlsZWQgdG8gY29uZmlndXJlIFNBQTcxMTFBIik7CisJIAkJCQkJZ290byBlcnJvcjsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJZXJyKCJEZXRlY3RlZCB1bnN1cHBvcnRlZCBPVjh4eDAgc2Vuc29yIik7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChvdjZ4eDBfY29uZmlndXJlKG92KSA8IDApIHsKKwkJCQllcnIoIkZhaWxlZCB0byBjb25maWd1cmUgT1Y2eHgwIik7CisgCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlpZiAob3Y3eHgwX2NvbmZpZ3VyZShvdikgPCAwKSB7CisJCQllcnIoIkZhaWxlZCB0byBjb25maWd1cmUgT1Y3eHgwIik7CisJIAkJZ290byBlcnJvcjsKKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnJvcjoKKwllcnIoIk9WNTExIENvbmZpZyBmYWlsZWQiKTsKKworCXJldHVybiAtRUJVU1k7Cit9CisKKy8qIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIE9WNTE4L09WNTE4KyBhbmQgdGhlIHNlbnNvciAqLworc3RhdGljIGludAorb3Y1MThfY29uZmlndXJlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCS8qIEZvciA1MTggYW5kIDUxOCsgKi8KKwlzdGF0aWMgc3RydWN0IG92NTExX3JlZ3ZhbHMgYVJlZ3ZhbHNJbml0NTE4W10gPSB7CisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfUkVTRVQsCTB4NDAgfSwKKwkgCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfSU5JVCwJCTB4ZTEgfSwKKwkgCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfUkVTRVQsCTB4M2UgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19JTklULAkJMHhlMSB9LAorCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX1JFU0VULAkweDAwIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfSU5JVCwJCTB4ZTEgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDQ2LAkJCTB4MDAgfSwgCisJCXsgT1Y1MTFfUkVHX0JVUywgMHg1ZCwJCQkweDAzIH0sCisJCXsgT1Y1MTFfRE9ORV9CVVMsIDB4MCwgMHgwMH0sCisJfTsKKworCXN0YXRpYyBzdHJ1Y3Qgb3Y1MTFfcmVndmFscyBhUmVndmFsc05vcm01MThbXSA9IHsKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19TTkFQLAkJMHgwMiB9LCAvKiBSZXNldCAqLworCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX1NOQVAsCQkweDAxIH0sIC8qIEVuYWJsZSAqLworCQl7IE9WNTExX1JFR19CVVMsIDB4MzEsIAkJCTB4MGYgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDVkLAkJCTB4MDMgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDI0LAkJCTB4OWYgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDI1LAkJCTB4OTAgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDIwLAkJCTB4MDAgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDUxLAkJCTB4MDQgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDcxLAkJCTB4MTkgfSwKKwkJeyBPVjUxMV9ET05FX0JVUywgMHgwLCAweDAwIH0sCisJfTsKKworCXN0YXRpYyBzdHJ1Y3Qgb3Y1MTFfcmVndmFscyBhUmVndmFsc05vcm01MThQbHVzW10gPSB7CisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfU05BUCwJCTB4MDIgfSwgLyogUmVzZXQgKi8KKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19TTkFQLAkJMHgwMSB9LCAvKiBFbmFibGUgKi8KKwkJeyBPVjUxMV9SRUdfQlVTLCAweDMxLCAJCQkweDBmIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHg1ZCwJCQkweDAzIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHgyNCwJCQkweDlmIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHgyNSwJCQkweDkwIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHgyMCwJCQkweDYwIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHg1MSwJCQkweDAyIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHg3MSwJCQkweDE5IH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHg0MCwJCQkweGZmIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHg0MSwJCQkweDQyIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHg0NiwJCQkweDAwIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHgzMywJCQkweDA0IH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHgyMSwJCQkweDE5IH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHgzZiwJCQkweDEwIH0sCisJCXsgT1Y1MTFfRE9ORV9CVVMsIDB4MCwgMHgwMCB9LAorCX07CisKKwlQREVCVUcoNCwgIiIpOworCisJLyogRmlyc3QgNSBiaXRzIG9mIGN1c3RvbSBJRCByZWcgYXJlIGEgcmV2aXNpb24gSUQgb24gT1Y1MTggKi8KKwlpbmZvKCJEZXZpY2UgcmV2aXNpb24gJWQiLCAweDFGICYgcmVnX3Iob3YsIFI1MTFfU1lTX0NVU1RfSUQpKTsKKworCS8qIEdpdmUgaXQgdGhlIGRlZmF1bHQgZGVzY3JpcHRpb24gKi8KKwlvdi0+ZGVzYyA9IHN5bWJvbGljKGNhbWxpc3QsIDApOworCisJaWYgKHdyaXRlX3JlZ3ZhbHMob3YsIGFSZWd2YWxzSW5pdDUxOCkpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBTZXQgTEVEIEdQSU8gcGluIHRvIG91dHB1dCBtb2RlICovCisJaWYgKHJlZ193X21hc2sob3YsIDB4NTcsIDB4MDAsIDB4MDIpIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIExFRCBpcyBvZmYgYnkgZGVmYXVsdCB3aXRoIE9WNTE4OyBoYXZlIHRvIGV4cGxpY2l0bHkgdHVybiBpdCBvbiAqLworCWlmIChvdi0+bGVkX3BvbGljeSA9PSBMRURfT0ZGIHx8IG92LT5sZWRfcG9saWN5ID09IExFRF9BVVRPKQorCQlvdjUxeF9sZWRfY29udHJvbChvdiwgMCk7CisJZWxzZQorCQlvdjUxeF9sZWRfY29udHJvbChvdiwgMSk7CisKKwkvKiBEb24ndCByZXF1aXJlIGNvbXByZXNzaW9uIGlmIGR1bXBwaXggaXMgZW5hYmxlZDsgb3RoZXJ3aXNlIGl0J3MKKwkgKiByZXF1aXJlZC4gT1Y1MTggaGFzIG5vIHVuY29tcHJlc3NlZCBtb2RlLCB0byBzYXZlIFJBTS4gKi8KKwlpZiAoIWR1bXBwaXggJiYgIW92LT5jb21wcmVzcykgeworCQlvdi0+Y29tcHJlc3MgPSAxOworCQl3YXJuKCJDb21wcmVzc2lvbiByZXF1aXJlZCB3aXRoIE9WNTE4Li4uZW5hYmxpbmciKTsKKwl9CisKKwlpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MTgpIHsKKwkJaWYgKHdyaXRlX3JlZ3ZhbHMob3YsIGFSZWd2YWxzTm9ybTUxOCkpCisJCQlnb3RvIGVycm9yOworCX0gZWxzZSBpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MThQTFVTKSB7CisJCWlmICh3cml0ZV9yZWd2YWxzKG92LCBhUmVndmFsc05vcm01MThQbHVzKSkKKwkJCWdvdG8gZXJyb3I7CisJfSBlbHNlIHsKKwkJZXJyKCJJbnZhbGlkIGJyaWRnZSIpOworCX0KKworCWlmIChyZWdfdyhvdiwgMHgyZiwgMHg4MCkgPCAwKQorCQlnb3RvIGVycm9yOworCisJaWYgKG92NTE4X2luaXRfY29tcHJlc3Npb24ob3YpKQorCQlnb3RvIGVycm9yOworCisJaWYgKG92LT5icmlkZ2UgPT0gQlJHX09WNTE4KQorCXsKKwkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmcDsKKwkJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0OworCQlfX3UxNiBteHBzID0gMDsKKworCQlpZnAgPSB1c2JfaWZudW1fdG9faWYob3YtPmRldiwgMCk7CisJCWlmIChpZnApIHsKKwkJCWFsdCA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpZnAsIDcpOworCQkJaWYgKGFsdCkKKwkJCQlteHBzID0gbGUxNl90b19jcHUoYWx0LT5lbmRwb2ludFswXS5kZXNjLndNYXhQYWNrZXRTaXplKTsKKwkJfQorCisJCS8qIFNvbWUgT1Y1MThzIGhhdmUgcGFja2V0IG51bWJlcmluZyBieSBkZWZhdWx0LCBzb21lIGRvbid0ICovCisJCWlmIChteHBzID09IDg5NykKKwkJCW92LT5wYWNrZXRfbnVtYmVyaW5nID0gMTsKKwkJZWxzZQorCQkJb3YtPnBhY2tldF9udW1iZXJpbmcgPSAwOworCX0gZWxzZSB7CisJCS8qIE9WNTE4KyBoYXMgcGFja2V0IG51bWJlcmluZyB0dXJuZWQgb24gYnkgZGVmYXVsdCAqLworCQlvdi0+cGFja2V0X251bWJlcmluZyA9IDE7CisJfQorCisJb3Y1MThfc2V0X3BhY2tldF9zaXplKG92LCAwKTsKKworCW92LT5zbmFwX2VuYWJsZWQgPSBzbmFwc2hvdDsKKworCS8qIFRlc3QgZm9yIDc2eHggKi8KKwlvdi0+cHJpbWFyeV9pMmNfc2xhdmUgPSBPVjd4eDBfU0lEOworCWlmIChvdjUxeF9zZXRfc2xhdmVfaWRzKG92LCBPVjd4eDBfU0lEKSA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBUaGUgT1Y1MTggbXVzdCBiZSBtb3JlIGFnZ3Jlc3NpdmUgYWJvdXQgc2Vuc29yIGRldGVjdGlvbiBzaW5jZQorCSAqIEkyQyB3cml0ZSB3aWxsIG5ldmVyIGZhaWwgaWYgdGhlIHNlbnNvciBpcyBub3QgcHJlc2VudC4gV2UgaGF2ZQorCSAqIHRvIHRyeSB0byBpbml0aWFsaXplIHRoZSBzZW5zb3IgdG8gZGV0ZWN0IGl0cyBwcmVzZW5jZSAqLworCisJaWYgKGluaXRfb3Zfc2Vuc29yKG92KSA8IDApIHsKKwkJLyogVGVzdCBmb3IgNnh4MCAqLworCQlvdi0+cHJpbWFyeV9pMmNfc2xhdmUgPSBPVjZ4eDBfU0lEOworCQlpZiAob3Y1MXhfc2V0X3NsYXZlX2lkcyhvdiwgT1Y2eHgwX1NJRCkgPCAwKQorCQkJZ290byBlcnJvcjsKKworCQlpZiAoaW5pdF9vdl9zZW5zb3Iob3YpIDwgMCkgeworCQkJLyogVGVzdCBmb3IgOHh4MCAqLworCQkJb3YtPnByaW1hcnlfaTJjX3NsYXZlID0gT1Y4eHgwX1NJRDsKKwkJCWlmIChvdjUxeF9zZXRfc2xhdmVfaWRzKG92LCBPVjh4eDBfU0lEKSA8IDApCisJCQkJZ290byBlcnJvcjsKKworCQkJaWYgKGluaXRfb3Zfc2Vuc29yKG92KSA8IDApIHsKKwkJCQllcnIoIkNhbid0IGRldGVybWluZSBzZW5zb3Igc2xhdmUgSURzIik7CisgCQkJCWdvdG8gZXJyb3I7CisJCQl9IGVsc2UgeworCQkJCWVycigiRGV0ZWN0ZWQgdW5zdXBwb3J0ZWQgT1Y4eHgwIHNlbnNvciIpOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAob3Y2eHgwX2NvbmZpZ3VyZShvdikgPCAwKSB7CisJCQkJZXJyKCJGYWlsZWQgdG8gY29uZmlndXJlIE9WNnh4MCIpOworIAkJCQlnb3RvIGVycm9yOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJaWYgKG92N3h4MF9jb25maWd1cmUob3YpIDwgMCkgeworCQkJZXJyKCJGYWlsZWQgdG8gY29uZmlndXJlIE9WN3h4MCIpOworCSAJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisKKwlvdi0+bWF4d2lkdGggPSAzNTI7CisJb3YtPm1heGhlaWdodCA9IDI4ODsKKworCS8vIFRoZSBPVjUxOCBjYW5ub3QgZ28gYXMgbG93IGFzIHRoZSBzZW5zb3IgY2FuCisJb3YtPm1pbndpZHRoID0gMTYwOworCW92LT5taW5oZWlnaHQgPSAxMjA7CisKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJZXJyKCJPVjUxOCBDb25maWcgZmFpbGVkIik7CisKKwlyZXR1cm4gLUVCVVNZOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIHN5c2ZzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2Jfb3Y1MTEgKmNkX3RvX292KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB0b192aWRlb19kZXZpY2UoY2QpOworCXJldHVybiB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19jdXN0b21faWQoc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX292NTExICpvdiA9IGNkX3RvX292KGNkKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgb3YtPmN1c3RvbWlkKTsKK30gCitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoY3VzdG9tX2lkLCBTX0lSVUdPLCBzaG93X2N1c3RvbV9pZCwgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbW9kZWwoc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX292NTExICpvdiA9IGNkX3RvX292KGNkKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgb3YtPmRlc2MpOworfSAKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihtb2RlbCwgU19JUlVHTywgc2hvd19tb2RlbCwgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYnJpZGdlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9vdjUxMSAqb3YgPSBjZF90b19vdihjZCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHN5bWJvbGljKGJyZ2xpc3QsIG92LT5icmlkZ2UpKTsKK30gCitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoYnJpZGdlLCBTX0lSVUdPLCBzaG93X2JyaWRnZSwgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfc2Vuc29yKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9vdjUxMSAqb3YgPSBjZF90b19vdihjZCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHN5bWJvbGljKHNlbmxpc3QsIG92LT5zZW5zb3IpKTsKK30gCitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoc2Vuc29yLCBTX0lSVUdPLCBzaG93X3NlbnNvciwgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYnJpZ2h0bmVzcyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2Jfb3Y1MTEgKm92ID0gY2RfdG9fb3YoY2QpOworCXVuc2lnbmVkIHNob3J0IHg7CisKKwlpZiAoIW92LT5kZXYpCisJCXJldHVybiAtRU5PREVWOworCXNlbnNvcl9nZXRfYnJpZ2h0bmVzcyhvdiwgJngpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB4ID4+IDgpOworfSAKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihicmlnaHRuZXNzLCBTX0lSVUdPLCBzaG93X2JyaWdodG5lc3MsIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBzaG93X3NhdHVyYXRpb24oc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX292NTExICpvdiA9IGNkX3RvX292KGNkKTsKKwl1bnNpZ25lZCBzaG9ydCB4OworCisJaWYgKCFvdi0+ZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlzZW5zb3JfZ2V0X3NhdHVyYXRpb24ob3YsICZ4KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgeCA+PiA4KTsKK30gCitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoc2F0dXJhdGlvbiwgU19JUlVHTywgc2hvd19zYXR1cmF0aW9uLCBOVUxMKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19jb250cmFzdChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2Jfb3Y1MTEgKm92ID0gY2RfdG9fb3YoY2QpOworCXVuc2lnbmVkIHNob3J0IHg7CisKKwlpZiAoIW92LT5kZXYpCisJCXJldHVybiAtRU5PREVWOworCXNlbnNvcl9nZXRfY29udHJhc3Qob3YsICZ4KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgeCA+PiA4KTsKK30gCitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoY29udHJhc3QsIFNfSVJVR08sIHNob3dfY29udHJhc3QsIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBzaG93X2h1ZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2Jfb3Y1MTEgKm92ID0gY2RfdG9fb3YoY2QpOworCXVuc2lnbmVkIHNob3J0IHg7CisKKwlpZiAoIW92LT5kZXYpCisJCXJldHVybiAtRU5PREVWOworCXNlbnNvcl9nZXRfaHVlKG92LCAmeCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHggPj4gOCk7Cit9IAorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGh1ZSwgU19JUlVHTywgc2hvd19odWUsIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBzaG93X2V4cG9zdXJlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9vdjUxMSAqb3YgPSBjZF90b19vdihjZCk7CisJdW5zaWduZWQgY2hhciBleHA7CisKKwlpZiAoIW92LT5kZXYpCisJCXJldHVybiAtRU5PREVWOworCXNlbnNvcl9nZXRfZXhwb3N1cmUob3YsICZleHApOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBleHAgPj4gOCk7Cit9IAorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGV4cG9zdXJlLCBTX0lSVUdPLCBzaG93X2V4cG9zdXJlLCBOVUxMKTsKKworc3RhdGljIHZvaWQgb3ZfY3JlYXRlX3N5c2ZzKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpCit7CisJdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHZkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9jdXN0b21faWQpOworCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfbW9kZWwpOworCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfYnJpZGdlKTsKKwl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX3NlbnNvcik7CisJdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHZkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9icmlnaHRuZXNzKTsKKwl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX3NhdHVyYXRpb24pOworCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfY29udHJhc3QpOworCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfaHVlKTsKKwl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX2V4cG9zdXJlKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBVU0Igcm91dGluZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQKK292NTF4X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqaWRlc2M7CisJc3RydWN0IHVzYl9vdjUxMSAqb3Y7CisJaW50IGk7CisKKwlQREVCVUcoMSwgInByb2JpbmcgZm9yIGRldmljZS4uLiIpOworCisJLyogV2UgZG9uJ3QgaGFuZGxlIG11bHRpLWNvbmZpZyBjYW1lcmFzICovCisJaWYgKGRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZGVzYyA9ICZpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYzsKKworCWlmIChpZGVzYy0+YkludGVyZmFjZUNsYXNzICE9IDB4RkYpCisJCXJldHVybiAtRU5PREVWOworCWlmIChpZGVzYy0+YkludGVyZmFjZVN1YkNsYXNzICE9IDB4MDApCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKChvdiA9IGttYWxsb2Moc2l6ZW9mKCpvdiksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJCWVycigiY291bGRuJ3Qga21hbGxvYyBvdiBzdHJ1Y3QiKTsKKwkJZ290byBlcnJvcl9vdXQ7CisJfQorCisJbWVtc2V0KG92LCAwLCBzaXplb2YoKm92KSk7CisKKwlvdi0+ZGV2ID0gZGV2OworCW92LT5pZmFjZSA9IGlkZXNjLT5iSW50ZXJmYWNlTnVtYmVyOworCW92LT5sZWRfcG9saWN5ID0gbGVkOworCW92LT5jb21wcmVzcyA9IGNvbXByZXNzOworCW92LT5saWdodGZyZXEgPSBsaWdodGZyZXE7CisJb3YtPm51bV9pbnB1dHMgPSAxOwkgICAvKiBWaWRlbyBkZWNvZGVyIGluaXQgZnVuY3RzLiBjaGFuZ2UgdGhpcyAqLworCW92LT5zdG9wX2R1cmluZ19zZXQgPSAhZmFzdHNldDsKKwlvdi0+YmFja2xpZ2h0ID0gYmFja2xpZ2h0OworCW92LT5taXJyb3IgPSBtaXJyb3I7CisJb3YtPmF1dG9fYnJ0ID0gYXV0b2JyaWdodDsKKwlvdi0+YXV0b19nYWluID0gYXV0b2dhaW47CisJb3YtPmF1dG9fZXhwID0gYXV0b2V4cDsKKworCXN3aXRjaCAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpIHsKKwljYXNlIFBST0RfT1Y1MTE6CisJCW92LT5icmlkZ2UgPSBCUkdfT1Y1MTE7CisJCW92LT5iY2xhc3MgPSBCQ0xfT1Y1MTE7CisJCWJyZWFrOworCWNhc2UgUFJPRF9PVjUxMVBMVVM6CisJCW92LT5icmlkZ2UgPSBCUkdfT1Y1MTFQTFVTOworCQlvdi0+YmNsYXNzID0gQkNMX09WNTExOworCQlicmVhazsKKwljYXNlIFBST0RfT1Y1MTg6CisJCW92LT5icmlkZ2UgPSBCUkdfT1Y1MTg7CisJCW92LT5iY2xhc3MgPSBCQ0xfT1Y1MTg7CisJCWJyZWFrOworCWNhc2UgUFJPRF9PVjUxOFBMVVM6CisJCW92LT5icmlkZ2UgPSBCUkdfT1Y1MThQTFVTOworCQlvdi0+YmNsYXNzID0gQkNMX09WNTE4OworCQlicmVhazsKKwljYXNlIFBST0RfTUUyQ0FNOgorCQlpZiAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSAhPSBWRU5EX01BVFRFTCkKKwkJCWdvdG8gZXJyb3I7CisJCW92LT5icmlkZ2UgPSBCUkdfT1Y1MTFQTFVTOworCQlvdi0+YmNsYXNzID0gQkNMX09WNTExOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIoIlVua25vd24gcHJvZHVjdCBJRCAweCUwNHgiLCBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaW5mbygiVVNCICVzIHZpZGVvIGRldmljZSBmb3VuZCIsIHN5bWJvbGljKGJyZ2xpc3QsIG92LT5icmlkZ2UpKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm92LT53cSk7CisKKwlpbml0X01VVEVYKCZvdi0+bG9jayk7CS8qIHRvIDEgPT0gYXZhaWxhYmxlICovCisJaW5pdF9NVVRFWCgmb3YtPmJ1Zl9sb2NrKTsKKwlpbml0X01VVEVYKCZvdi0+cGFyYW1fbG9jayk7CisJaW5pdF9NVVRFWCgmb3YtPmkyY19sb2NrKTsKKwlpbml0X01VVEVYKCZvdi0+Y2J1Zl9sb2NrKTsKKworCW92LT5idWZfc3RhdGUgPSBCVUZfTk9UX0FMTE9DQVRFRDsKKworCWlmICh1c2JfbWFrZV9wYXRoKGRldiwgb3YtPnVzYl9wYXRoLCBPVjUxMV9VU0JfUEFUSF9MRU4pIDwgMCkgeworCQllcnIoInVzYl9tYWtlX3BhdGggZXJyb3IiKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBBbGxvY2F0ZSBjb250cm9sIHRyYW5zZmVyIGJ1ZmZlci4gKi8KKwkvKiBNdXN0IGJlIGttYWxsb2MoKSdlZCwgZm9yIERNQSBjb21wYXRpYmlsaXR5ICovCisJb3YtPmNidWYgPSBrbWFsbG9jKE9WNTExX0NCVUZfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvdi0+Y2J1ZikKKwkJZ290byBlcnJvcjsKKworCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgeworCQlpZiAob3Y1MThfY29uZmlndXJlKG92KSA8IDApCisJCQlnb3RvIGVycm9yOworCX0gZWxzZSB7CisJCWlmIChvdjUxMV9jb25maWd1cmUob3YpIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE9WNTExX05VTUZSQU1FUzsgaSsrKSB7CisJCW92LT5mcmFtZVtpXS5mcmFtZW51bSA9IGk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm92LT5mcmFtZVtpXS53cSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE9WNTExX05VTVNCVUY7IGkrKykgeworCQlvdi0+c2J1ZltpXS5vdiA9IG92OworCQlzcGluX2xvY2tfaW5pdCgmb3YtPnNidWZbaV0ubG9jayk7CisJCW92LT5zYnVmW2ldLm4gPSBpOworCX0KKworCS8qIFVubmVjZXNzYXJ5PyAoVGhpcyBpcyBkb25lIG9uIG9wZW4oKS4gTmVlZCB0byBtYWtlIHN1cmUgdmFyaWFibGVzCisJICogYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHdpdGhvdXQgdGhpcyBiZWZvcmUgcmVtb3ZpbmcgaXQsIHRob3VnaCkuICovCisJaWYgKG92NTF4X3NldF9kZWZhdWx0X3BhcmFtcyhvdikgPCAwKQorCQlnb3RvIGVycm9yOworCisjaWZkZWYgT1Y1MTFfREVCVUcKKwlpZiAoZHVtcF9icmlkZ2UpIHsKKwkJaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTExKQorCQkJb3Y1MTFfZHVtcF9yZWdzKG92KTsKKwkJZWxzZQorCQkJb3Y1MThfZHVtcF9yZWdzKG92KTsKKwl9CisjZW5kaWYKKworCW92LT52ZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKCFvdi0+dmRldikKKwkJZ290byBlcnJvcjsKKworCW1lbWNweShvdi0+dmRldiwgJnZkZXZfdGVtcGxhdGUsIHNpemVvZigqb3YtPnZkZXYpKTsKKwlvdi0+dmRldi0+ZGV2ID0gJmRldi0+ZGV2OworCXZpZGVvX3NldF9kcnZkYXRhKG92LT52ZGV2LCBvdik7CisKKwlmb3IgKGkgPSAwOyBpIDwgT1Y1MTFfTUFYX1VOSVRfVklERU87IGkrKykgeworCQkvKiBNaW5vciAwIGNhbm5vdCBiZSBzcGVjaWZpZWQ7IGFzc3VtZSB1c2VyIHdhbnRzIGF1dG9kZXRlY3QgKi8KKwkJaWYgKHVuaXRfdmlkZW9baV0gPT0gMCkKKwkJCWJyZWFrOworCisJCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2Uob3YtPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsCisJCQl1bml0X3ZpZGVvW2ldKSA+PSAwKSB7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIFVzZSB0aGUgbmV4dCBhdmFpbGFibGUgb25lICovCisJaWYgKChvdi0+dmRldi0+bWlub3IgPT0gLTEpICYmCisJICAgIHZpZGVvX3JlZ2lzdGVyX2RldmljZShvdi0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgLTEpIDwgMCkgeworCQllcnIoInZpZGVvX3JlZ2lzdGVyX2RldmljZSBmYWlsZWQiKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpbmZvKCJEZXZpY2UgYXQgJXMgcmVnaXN0ZXJlZCB0byBtaW5vciAlZCIsIG92LT51c2JfcGF0aCwKKwkgICAgIG92LT52ZGV2LT5taW5vcik7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIG92KTsKKwlvdl9jcmVhdGVfc3lzZnMob3YtPnZkZXYpOworCXJldHVybiAwOworCitlcnJvcjoKKwlpZiAob3YtPnZkZXYpIHsKKwkJaWYgKC0xID09IG92LT52ZGV2LT5taW5vcikKKwkJCXZpZGVvX2RldmljZV9yZWxlYXNlKG92LT52ZGV2KTsKKwkJZWxzZQorCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2Uob3YtPnZkZXYpOworCQlvdi0+dmRldiA9IE5VTEw7CisJfQorCisJaWYgKG92LT5jYnVmKSB7CisJCWRvd24oJm92LT5jYnVmX2xvY2spOworCQlrZnJlZShvdi0+Y2J1Zik7CisJCW92LT5jYnVmID0gTlVMTDsKKwkJdXAoJm92LT5jYnVmX2xvY2spOworCX0KKworCWlmIChvdikgeworCQlrZnJlZShvdik7CisJCW92ID0gTlVMTDsKKwl9CisKK2Vycm9yX291dDoKKwllcnIoIkNhbWVyYSBpbml0aWFsaXphdGlvbiBmYWlsZWQiKTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIHZvaWQKK292NTF4X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9vdjUxMSAqb3YgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCWludCBuOworCisJUERFQlVHKDMsICIiKTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCisJaWYgKCFvdikKKwkJcmV0dXJuOworCisJaWYgKG92LT52ZGV2KQorCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShvdi0+dmRldik7CisKKwlmb3IgKG4gPSAwOyBuIDwgT1Y1MTFfTlVNRlJBTUVTOyBuKyspCisJCW92LT5mcmFtZVtuXS5ncmFic3RhdGUgPSBGUkFNRV9FUlJPUjsKKworCW92LT5jdXJmcmFtZSA9IC0xOworCisJLyogVGhpcyB3aWxsIGNhdXNlIHRoZSBwcm9jZXNzIHRvIHJlcXVlc3QgYW5vdGhlciBmcmFtZSAqLworCWZvciAobiA9IDA7IG4gPCBPVjUxMV9OVU1GUkFNRVM7IG4rKykKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZvdi0+ZnJhbWVbbl0ud3EpOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZvdi0+d3EpOworCisJb3YtPnN0cmVhbWluZyA9IDA7CisJb3Y1MXhfdW5saW5rX2lzb2Mob3YpOworCisJb3YtPmRldiA9IE5VTEw7CisKKwkvKiBGcmVlIHRoZSBtZW1vcnkgKi8KKwlpZiAob3YgJiYgIW92LT51c2VyKSB7CisJCWRvd24oJm92LT5jYnVmX2xvY2spOworCQlrZnJlZShvdi0+Y2J1Zik7CisJCW92LT5jYnVmID0gTlVMTDsKKwkJdXAoJm92LT5jYnVmX2xvY2spOworCisJCW92NTF4X2RlYWxsb2Mob3YpOworCQlrZnJlZShvdik7CisJCW92ID0gTlVMTDsKKwl9CisKKwlQREVCVUcoMywgIkRpc2Nvbm5lY3QgY29tcGxldGUiKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG92NTExX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkib3Y1MTEiLAorCS5pZF90YWJsZSA9CWRldmljZV90YWJsZSwKKwkucHJvYmUgPQlvdjUxeF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CW92NTF4X2Rpc2Nvbm5lY3QKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIE1vZHVsZSByb3V0aW5lcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFJldHVybnMgMCBmb3Igc3VjY2VzcyAqLworaW50CitvdjUxMV9yZWdpc3Rlcl9kZWNvbXBfbW9kdWxlKGludCB2ZXIsIHN0cnVjdCBvdjUxeF9kZWNvbXBfb3BzICpvcHMsIGludCBvdjUxOCwKKwkJCSAgICAgaW50IG1teCkKK3sKKwlpZiAodmVyICE9IERFQ09NUF9JTlRFUkZBQ0VfVkVSKSB7CisJCWVycigiRGVjb21wcmVzc2lvbiBtb2R1bGUgaGFzIGluY29tcGF0aWJsZSIpOworCQllcnIoImludGVyZmFjZSB2ZXJzaW9uICVkIiwgdmVyKTsKKwkJZXJyKCJJbnRlcmZhY2UgdmVyc2lvbiAlZCBpcyByZXF1aXJlZCIsIERFQ09NUF9JTlRFUkZBQ0VfVkVSKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFvcHMpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKG1teCAmJiAhb3Y1MXhfbW14X2F2YWlsYWJsZSkgeworCQllcnIoIk1NWCBub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVtIG9yIGtlcm5lbCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsb2NrX2tlcm5lbCgpOworCisJaWYgKG92NTE4KSB7CisJCWlmIChtbXgpIHsKKwkJCWlmIChvdjUxOF9tbXhfZGVjb21wX29wcykKKwkJCQlnb3RvIGVycl9pbl91c2U7CisJCQllbHNlCisJCQkJb3Y1MThfbW14X2RlY29tcF9vcHMgPSBvcHM7CisJCX0gZWxzZSB7CisJCQlpZiAob3Y1MThfZGVjb21wX29wcykKKwkJCQlnb3RvIGVycl9pbl91c2U7CisJCQllbHNlCisJCQkJb3Y1MThfZGVjb21wX29wcyA9IG9wczsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChtbXgpIHsKKwkJCWlmIChvdjUxMV9tbXhfZGVjb21wX29wcykKKwkJCQlnb3RvIGVycl9pbl91c2U7CisJCQllbHNlCisJCQkJb3Y1MTFfbW14X2RlY29tcF9vcHMgPSBvcHM7CisJCX0gZWxzZSB7CisJCQlpZiAob3Y1MTFfZGVjb21wX29wcykKKwkJCQlnb3RvIGVycl9pbl91c2U7CisJCQllbHNlCisJCQkJb3Y1MTFfZGVjb21wX29wcyA9IG9wczsKKwkJfQorCX0KKworCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gMDsKKworZXJyX2luX3VzZToKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIC1FQlVTWTsKK30KKwordm9pZAorb3Y1MTFfZGVyZWdpc3Rlcl9kZWNvbXBfbW9kdWxlKGludCBvdjUxOCwgaW50IG1teCkKK3sKKwlsb2NrX2tlcm5lbCgpOworCisJaWYgKG92NTE4KSB7CisJCWlmIChtbXgpCisJCQlvdjUxOF9tbXhfZGVjb21wX29wcyA9IE5VTEw7CisJCWVsc2UKKwkJCW92NTE4X2RlY29tcF9vcHMgPSBOVUxMOworCX0gZWxzZSB7CisJCWlmIChtbXgpCisJCQlvdjUxMV9tbXhfZGVjb21wX29wcyA9IE5VTEw7CisJCWVsc2UKKwkJCW92NTExX2RlY29tcF9vcHMgPSBOVUxMOworCX0KKworCXVubG9ja19rZXJuZWwoKTsKK30KKworc3RhdGljIGludCBfX2luaXQKK3VzYl9vdjUxMV9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigmb3Y1MTFfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG91dDsKKworCWluZm8oRFJJVkVSX1ZFUlNJT04gIiA6ICIgRFJJVkVSX0RFU0MpOworCitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0Cit1c2Jfb3Y1MTFfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZvdjUxMV9kcml2ZXIpOworCWluZm8oImRyaXZlciBkZXJlZ2lzdGVyZWQiKTsKKworfQorCittb2R1bGVfaW5pdCh1c2Jfb3Y1MTFfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2Jfb3Y1MTFfZXhpdCk7CisKK0VYUE9SVF9TWU1CT0wob3Y1MTFfcmVnaXN0ZXJfZGVjb21wX21vZHVsZSk7CitFWFBPUlRfU1lNQk9MKG92NTExX2RlcmVnaXN0ZXJfZGVjb21wX21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9vdjUxMS5oIGIvZHJpdmVycy91c2IvbWVkaWEvb3Y1MTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODY1MDlhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvb3Y1MTEuaApAQCAtMCwwICsxLDU2OSBAQAorI2lmbmRlZiBfX0xJTlVYX09WNTExX0gKKyNkZWZpbmUgX19MSU5VWF9PVjUxMV9ICisKKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2RlZmluZSBPVjUxMV9ERUJVRwkvKiBUdXJuIG9uIGRlYnVnIG1lc3NhZ2VzICovCisKKyNpZmRlZiBPVjUxMV9ERUJVRworCSNkZWZpbmUgUERFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKKwkJaWYgKGRlYnVnID49IChsZXZlbCkpIGluZm8oIlslczolZF0gIiBmbXQsIFwKKwkJX19GVU5DVElPTl9fLCBfX0xJTkVfXyAsICMjIGFyZ3MpCisjZWxzZQorCSNkZWZpbmUgUERFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlKDApCisjZW5kaWYKKworLyogVGhpcyBtYWNybyByZXN0cmljdHMgYW4gaW50IHZhcmlhYmxlIHRvIGFuIGluY2x1c2l2ZSByYW5nZSAqLworI2RlZmluZSBSRVNUUklDVF9UT19SQU5HRSh2LG1pLG1hKSB7IFwKKwlpZiAoKHYpIDwgKG1pKSkgKHYpID0gKG1pKTsgXAorCWVsc2UgaWYgKCh2KSA+IChtYSkpICh2KSA9IChtYSk7IFwKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBERUZJTkVTIEZPUiBPVjUxMSBBTkQgT1RIRVIgQ0hJUFMgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBVU0IgSURzICovCisjZGVmaW5lIFZFTkRfT01OSVZJU0lPTgkweDA1QTkKKyNkZWZpbmUgUFJPRF9PVjUxMQkweDA1MTEKKyNkZWZpbmUgUFJPRF9PVjUxMVBMVVMJMHhBNTExCisjZGVmaW5lIFBST0RfT1Y1MTgJMHgwNTE4CisjZGVmaW5lIFBST0RfT1Y1MThQTFVTCTB4QTUxOAorCisjZGVmaW5lIFZFTkRfTUFUVEVMCTB4MDgxMworI2RlZmluZSBQUk9EX01FMkNBTQkweDAwMDIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgT1Y1MXggUkVHSVNURVIgTU5FTU9OSUNTICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBDYW1lcmEgaW50ZXJmYWNlIHJlZ2lzdGVyIG51bWJlcnMgKi8KKyNkZWZpbmUgUjUxMV9DQU1fREVMQVkJCTB4MTAKKyNkZWZpbmUgUjUxMV9DQU1fRURHRQkJMHgxMQorI2RlZmluZSBSNTExX0NBTV9QWENOVAkJMHgxMgorI2RlZmluZSBSNTExX0NBTV9MTkNOVAkJMHgxMworI2RlZmluZSBSNTExX0NBTV9QWERJVgkJMHgxNAorI2RlZmluZSBSNTExX0NBTV9MTkRJVgkJMHgxNQorI2RlZmluZSBSNTExX0NBTV9VVl9FTgkJMHgxNgorI2RlZmluZSBSNTExX0NBTV9MSU5FX01PREUJMHgxNworI2RlZmluZSBSNTExX0NBTV9PUFRTCQkweDE4CisKKy8qIFNuYXBzaG90IG1vZGUgY2FtZXJhIGludGVyZmFjZSByZWdpc3RlciBudW1iZXJzICovCisjZGVmaW5lIFI1MTFfU05BUF9GUkFNRQkJMHgxOQorI2RlZmluZSBSNTExX1NOQVBfUFhDTlQJCTB4MUEKKyNkZWZpbmUgUjUxMV9TTkFQX0xOQ05UCQkweDFCCisjZGVmaW5lIFI1MTFfU05BUF9QWERJVgkJMHgxQworI2RlZmluZSBSNTExX1NOQVBfTE5ESVYJCTB4MUQKKyNkZWZpbmUgUjUxMV9TTkFQX1VWX0VOCQkweDFFCisjZGVmaW5lIFI1MTFfU05BUF9PUFRTCQkweDFGCisKKy8qIERSQU0gcmVnaXN0ZXIgbnVtYmVycyAqLworI2RlZmluZSBSNTExX0RSQU1fRkxPV19DVEwJMHgyMAorI2RlZmluZSBSNTExX0RSQU1fQVJDUAkJMHgyMQorI2RlZmluZSBSNTExX0RSQU1fTVJDCQkweDIyCisjZGVmaW5lIFI1MTFfRFJBTV9SRkMJCTB4MjMKKworLyogSVNPIEZJRk8gcmVnaXN0ZXIgbnVtYmVycyAqLworI2RlZmluZSBSNTF4X0ZJRk9fUFNJWkUJCTB4MzAJLyogMiBieXRlcyB3aWRlIHcvIE9WNTE4KCspICovCisjZGVmaW5lIFI1MTFfRklGT19PUFRTCQkweDMxCisKKy8qIFBhcmFsbGVsIElPIHJlZ2lzdGVyIG51bWJlcnMgKi8KKyNkZWZpbmUgUjUxMV9QSU9fT1BUUwkJMHgzOAorI2RlZmluZSBSNTExX1BJT19EQVRBCQkweDM5CisjZGVmaW5lIFI1MTFfUElPX0JJU1QJCTB4M0UKKyNkZWZpbmUgUjUxOF9HUElPX0lOCQkweDU1CS8qIE9WNTE4KCspIG9ubHkgKi8KKyNkZWZpbmUgUjUxOF9HUElPX09VVAkJMHg1NgkvKiBPVjUxOCgrKSBvbmx5ICovCisjZGVmaW5lIFI1MThfR1BJT19DVEwJCTB4NTcJLyogT1Y1MTgoKykgb25seSAqLworI2RlZmluZSBSNTE4X0dQSU9fUFVMU0VfSU4JMHg1OAkvKiBPVjUxOCgrKSBvbmx5ICovCisjZGVmaW5lIFI1MThfR1BJT19QVUxTRV9DTEVBUgkweDU5CS8qIE9WNTE4KCspIG9ubHkgKi8KKyNkZWZpbmUgUjUxOF9HUElPX1BVTFNFX1BPTAkweDVhCS8qIE9WNTE4KCspIG9ubHkgKi8KKyNkZWZpbmUgUjUxOF9HUElPX1BVTFNFX0VOCTB4NWIJLyogT1Y1MTgoKykgb25seSAqLworI2RlZmluZSBSNTE4X0dQSU9fUkVTRVQJCTB4NWMJLyogT1Y1MTgoKykgb25seSAqLworCisvKiBJMkMgcmVnaXN0ZXJzICovCisjZGVmaW5lIFI1MTFfSTJDX0NUTAkJMHg0MAorI2RlZmluZSBSNTE4X0kyQ19DVEwJCTB4NDcJLyogT1Y1MTgoKykgb25seSAqLworI2RlZmluZSBSNTF4X0kyQ19XX1NJRAkJMHg0MQorI2RlZmluZSBSNTF4X0kyQ19TQUREUl8zCTB4NDIKKyNkZWZpbmUgUjUxeF9JMkNfU0FERFJfMgkweDQzCisjZGVmaW5lIFI1MXhfSTJDX1JfU0lECQkweDQ0CisjZGVmaW5lIFI1MXhfSTJDX0RBVEEJCTB4NDUKKyNkZWZpbmUgUjUxeF9JMkNfQ0xPQ0sJCTB4NDYKKyNkZWZpbmUgUjUxeF9JMkNfVElNRU9VVAkweDQ3CisKKy8qIEkyQyBzbmFwc2hvdCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUjUxMV9TSTJDX1NBRERSXzMJMHg0OAorI2RlZmluZSBSNTExX1NJMkNfREFUQQkJMHg0OQorCisvKiBTeXN0ZW0gY29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUjUxeF9TWVNfUkVTRVQJCTB4NTAKKwkJLyogUmVzZXQgdHlwZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSAJT1Y1MTFfUkVTRVRfVURDCQkweDAxCisjZGVmaW5lIAlPVjUxMV9SRVNFVF9JMkMJCTB4MDIKKyNkZWZpbmUgCU9WNTExX1JFU0VUX0ZJRk8JMHgwNAorI2RlZmluZSAJT1Y1MTFfUkVTRVRfT01OSUNFCTB4MDgKKyNkZWZpbmUgCU9WNTExX1JFU0VUX0RSQU0JMHgxMAorI2RlZmluZSAJT1Y1MTFfUkVTRVRfQ0FNX0lOVAkweDIwCisjZGVmaW5lIAlPVjUxMV9SRVNFVF9PVjUxMQkweDQwCisjZGVmaW5lIAlPVjUxMV9SRVNFVF9OT1JFR1MJMHgzRiAvKiBBbGwgYnV0IE9WNTExICYgcmVncyAqLworI2RlZmluZSAJT1Y1MTFfUkVTRVRfQUxMCQkweDdGCisKKyNkZWZpbmUgUjUxMV9TWVNfQ0xPQ0tfRElWCTB4NTEKKyNkZWZpbmUgUjUxeF9TWVNfU05BUAkJMHg1MgorI2RlZmluZSBSNTF4X1NZU19JTklUICAgICAgICAgCTB4NTMKKyNkZWZpbmUgUjUxMV9TWVNfUFdSX0NMSwkweDU0IC8qIE9WNTExKy9PVjUxOCgrKSBvbmx5ICovCisjZGVmaW5lIFI1MTFfU1lTX0xFRF9DVEwJMHg1NSAvKiBPVjUxMSsgb25seSAqLworI2RlZmluZSBSNTExX1NZU19VU0VSCQkweDVFCisjZGVmaW5lIFI1MTFfU1lTX0NVU1RfSUQJMHg1RgorCisvKiBPbW5pQ0UgKGNvbXByZXNzaW9uKSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUjUxMV9DT01QX1BIWQkJMHg3MAorI2RlZmluZSBSNTExX0NPTVBfUEhVVgkJMHg3MQorI2RlZmluZSBSNTExX0NPTVBfUFZZCQkweDcyCisjZGVmaW5lIFI1MTFfQ09NUF9QVlVWCQkweDczCisjZGVmaW5lIFI1MTFfQ09NUF9RSFkJCTB4NzQKKyNkZWZpbmUgUjUxMV9DT01QX1FIVVYJCTB4NzUKKyNkZWZpbmUgUjUxMV9DT01QX1FWWQkJMHg3NgorI2RlZmluZSBSNTExX0NPTVBfUVZVVgkJMHg3NworI2RlZmluZSBSNTExX0NPTVBfRU4JCTB4NzgKKyNkZWZpbmUgUjUxMV9DT01QX0xVVF9FTgkweDc5CQkKKyNkZWZpbmUgUjUxMV9DT01QX0xVVF9CRUdJTgkweDgwCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICBBTFRFUk5BVEUgTlVNQkVSUyAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogQWx0ZXJuYXRlIG51bWJlcnMgZm9yIHZhcmlvdXMgbWF4IHBhY2tldCBzaXplcyAoT1Y1MTEgb25seSkgKi8KKyNkZWZpbmUgT1Y1MTFfQUxUX1NJWkVfOTkyCTAKKyNkZWZpbmUgT1Y1MTFfQUxUX1NJWkVfOTkzCTEKKyNkZWZpbmUgT1Y1MTFfQUxUX1NJWkVfNzY4CTIKKyNkZWZpbmUgT1Y1MTFfQUxUX1NJWkVfNzY5CTMKKyNkZWZpbmUgT1Y1MTFfQUxUX1NJWkVfNTEyCTQKKyNkZWZpbmUgT1Y1MTFfQUxUX1NJWkVfNTEzCTUKKyNkZWZpbmUgT1Y1MTFfQUxUX1NJWkVfMjU3CTYKKyNkZWZpbmUgT1Y1MTFfQUxUX1NJWkVfMAk3CisKKy8qIEFsdGVybmF0ZSBudW1iZXJzIGZvciB2YXJpb3VzIG1heCBwYWNrZXQgc2l6ZXMgKE9WNTExKyBvbmx5KSAqLworI2RlZmluZSBPVjUxMVBMVVNfQUxUX1NJWkVfMAkwCisjZGVmaW5lIE9WNTExUExVU19BTFRfU0laRV8zMwkxCisjZGVmaW5lIE9WNTExUExVU19BTFRfU0laRV8xMjkJMgorI2RlZmluZSBPVjUxMVBMVVNfQUxUX1NJWkVfMjU3CTMKKyNkZWZpbmUgT1Y1MTFQTFVTX0FMVF9TSVpFXzM4NQk0CisjZGVmaW5lIE9WNTExUExVU19BTFRfU0laRV81MTMJNQorI2RlZmluZSBPVjUxMVBMVVNfQUxUX1NJWkVfNzY5CTYKKyNkZWZpbmUgT1Y1MTFQTFVTX0FMVF9TSVpFXzk2MQk3CisKKy8qIEFsdGVybmF0ZSBudW1iZXJzIGZvciB2YXJpb3VzIG1heCBwYWNrZXQgc2l6ZXMgKE9WNTE4KCspIG9ubHkpICovCisjZGVmaW5lIE9WNTE4X0FMVF9TSVpFXzAJMAorI2RlZmluZSBPVjUxOF9BTFRfU0laRV8xMjgJMQorI2RlZmluZSBPVjUxOF9BTFRfU0laRV8yNTYJMgorI2RlZmluZSBPVjUxOF9BTFRfU0laRV8zODQJMworI2RlZmluZSBPVjUxOF9BTFRfU0laRV81MTIJNAorI2RlZmluZSBPVjUxOF9BTFRfU0laRV82NDAJNQorI2RlZmluZSBPVjUxOF9BTFRfU0laRV83NjgJNgorI2RlZmluZSBPVjUxOF9BTFRfU0laRV84OTYJNworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICBPVjc2MTAgUkVHSVNURVIgTU5FTU9OSUNTICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIE9WNzYxMCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19HQUlOICAgICAgICAgIDB4MDAJLyogZ2FpbiBzZXR0aW5nICg1OjApICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQkxVRSAgICAgICAgICAweDAxCS8qIGJsdWUgY2hhbm5lbCBiYWxhbmNlICovCisjZGVmaW5lIE9WNzYxMF9SRUdfUkVEICAgICAgICAgICAweDAyCS8qIHJlZCBjaGFubmVsIGJhbGFuY2UgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19TQVQgICAgICAgICAgIDB4MDMJLyogc2F0dXJhdGlvbiAqLworCQkJCQkvKiAwNCByZXNlcnZlZCAqLworI2RlZmluZSBPVjc2MTBfUkVHX0NOVCAgICAgICAgICAgMHgwNQkvKiBZIGNvbnRyYXN0ICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQlJUICAgICAgICAgICAweDA2CS8qIFkgYnJpZ2h0bmVzcyAqLworCQkJCQkvKiAwOC0wYiByZXNlcnZlZCAqLworI2RlZmluZSBPVjc2MTBfUkVHX0JMVUVfQklBUyAgICAgMHgwQwkvKiBibHVlIGNoYW5uZWwgYmlhcyAoNTowKSAqLworI2RlZmluZSBPVjc2MTBfUkVHX1JFRF9CSUFTICAgICAgMHgwRAkvKiByZWFkIGNoYW5uZWwgYmlhcyAoNTowKSAqLworI2RlZmluZSBPVjc2MTBfUkVHX0dBTU1BX0NPRUZGICAgMHgwRQkvKiBnYW1tYSBzZXR0aW5ncyAqLworI2RlZmluZSBPVjc2MTBfUkVHX1dCX1JBTkdFICAgICAgMHgwRgkvKiBBRUMvQUxDL1MtQVdCIHNldHRpbmdzICovCisjZGVmaW5lIE9WNzYxMF9SRUdfRVhQICAgICAgICAgICAweDEwCS8qIG1hbnVhbCBleHBvc3VyZSBzZXR0aW5nICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQ0xPQ0sgICAgICAgICAweDExCS8qIHBvbGFyaXR5L2Nsb2NrIHByZXNjYWxlciAqLworI2RlZmluZSBPVjc2MTBfUkVHX0NPTV9BICAgICAgICAgMHgxMgkvKiBtaXNjIGNvbW1vbiByZWdzICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQ09NX0IgICAgICAgICAweDEzCS8qIG1pc2MgY29tbW9uIHJlZ3MgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19DT01fQyAgICAgICAgIDB4MTQJLyogbWlzYyBjb21tb24gcmVncyAqLworI2RlZmluZSBPVjc2MTBfUkVHX0NPTV9EICAgICAgICAgMHgxNQkvKiBtaXNjIGNvbW1vbiByZWdzICovCisjZGVmaW5lIE9WNzYxMF9SRUdfRklFTERfRElWSURFICAweDE2CS8qIGZpZWxkIGludGVydmFsL21vZGUgc2V0dGluZ3MgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19IV0lOX1NUQVJUICAgIDB4MTcJLyogaG9yaXpvbnRhbCB3aW5kb3cgc3RhcnQgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19IV0lOX0VORCAgICAgIDB4MTgJLyogaG9yaXpvbnRhbCB3aW5kb3cgZW5kICovCisjZGVmaW5lIE9WNzYxMF9SRUdfVldJTl9TVEFSVCAgICAweDE5CS8qIHZlcnRpY2FsIHdpbmRvdyBzdGFydCAqLworI2RlZmluZSBPVjc2MTBfUkVHX1ZXSU5fRU5EICAgICAgMHgxQQkvKiB2ZXJ0aWNhbCB3aW5kb3cgZW5kICovCisjZGVmaW5lIE9WNzYxMF9SRUdfUElYRUxfU0hJRlQgICAweDFCCS8qIHBpeGVsIHNoaWZ0ICovCisjZGVmaW5lIE9WNzYxMF9SRUdfSURfSElHSCAgICAgICAweDFDCS8qIG1hbnVmYWN0dXJlciBJRCBNU0IgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19JRF9MT1cgICAgICAgIDB4MUQJLyogbWFudWZhY3R1cmVyIElEIExTQiAqLworCQkJCQkvKiAwZS0wZiByZXNlcnZlZCAqLworI2RlZmluZSBPVjc2MTBfUkVHX0NPTV9FICAgICAgICAgMHgyMAkvKiBtaXNjIGNvbW1vbiByZWdzICovCisjZGVmaW5lIE9WNzYxMF9SRUdfWU9GRlNFVCAgICAgICAweDIxCS8qIFkgY2hhbm5lbCBvZmZzZXQgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19VT0ZGU0VUICAgICAgIDB4MjIJLyogVSBjaGFubmVsIG9mZnNldCAqLworCQkJCQkvKiAyMyByZXNlcnZlZCAqLworI2RlZmluZSBPVjc2MTBfUkVHX0VDVyAgICAgICAgICAgMHgyNAkvKiBFeHBvc3VyZSB3aGl0ZSBsZXZlbCBmb3IgQUVDICovCisjZGVmaW5lIE9WNzYxMF9SRUdfRUNCICAgICAgICAgICAweDI1CS8qIEV4cG9zdXJlIGJsYWNrIGxldmVsIGZvciBBRUMgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19DT01fRiAgICAgICAgIDB4MjYJLyogbWlzYyBzZXR0aW5ncyAqLworI2RlZmluZSBPVjc2MTBfUkVHX0NPTV9HICAgICAgICAgMHgyNwkvKiBtaXNjIHNldHRpbmdzICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQ09NX0ggICAgICAgICAweDI4CS8qIG1pc2Mgc2V0dGluZ3MgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19DT01fSSAgICAgICAgIDB4MjkJLyogbWlzYyBzZXR0aW5ncyAqLworI2RlZmluZSBPVjc2MTBfUkVHX0ZSQU1FUkFURV9IICAgMHgyQQkvKiBmcmFtZSByYXRlIE1TQiArIG1pc2MgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19GUkFNRVJBVEVfTCAgIDB4MkIJLyogZnJhbWUgcmF0ZSBMU0IgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19BTEMgICAgICAgICAgIDB4MkMJLyogQXV0byBMZXZlbCBDb250cm9sIHNldHRpbmdzICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQ09NX0ogICAgICAgICAweDJECS8qIG1pc2Mgc2V0dGluZ3MgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19WT0ZGU0VUICAgICAgIDB4MkUJLyogViBjaGFubmVsIG9mZnNldCBhZGp1c3RtZW50ICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQVJSQVlfQklBUwkgMHgyRgkvKiBBcnJheSBiaWFzIC0tIGRvbid0IGNoYW5nZSAqLworCQkJCQkvKiAzMC0zMiByZXNlcnZlZCAqLworI2RlZmluZSBPVjc2MTBfUkVHX1lHQU1NQSAgICAgICAgMHgzMwkvKiBtaXNjIGdhbW1hIHNldHRpbmdzICg3OjYpICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQklBU19BREpVU1QgICAweDM0CS8qIG1pc2MgYmlhcyBzZXR0aW5ncyAqLworI2RlZmluZSBPVjc2MTBfUkVHX0NPTV9MICAgICAgICAgMHgzNQkvKiBtaXNjIHNldHRpbmdzICovCisJCQkJCS8qIDM2LTM3IHJlc2VydmVkICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQ09NX0sgICAgICAgICAweDM4CS8qIG1pc2MgcmVnaXN0ZXJzICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgIEkyQyBBRERSRVNTRVMgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBPVjd4eDBfU0lEICAgMHg0MgorI2RlZmluZSBPVjZ4eDBfU0lEICAgMHhDMAorI2RlZmluZSBPVjh4eDBfU0lEICAgMHhBMAorI2RlZmluZSBLUzAxMjdfU0lEICAgMHhEOAorI2RlZmluZSBTQUE3MTExQV9TSUQgMHg0OAorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgIE1JU0NFTExBTkVPVVMgREVGSU5FUyAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgSTJDX0NMT0NLX1BSRVNDQUxFUiAJMHgwMworCisjZGVmaW5lIEZSQU1FU19QRVJfREVTQwkJMTAJLyogRklYTUUgLSBXaGF0IHNob3VsZCB0aGlzIGJlPyAqLworI2RlZmluZSBNQVhfRlJBTUVfU0laRV9QRVJfREVTQwk5OTMJLyogRm9yIHN0YXRpY2FsbHkgYWxsb2NhdGVkIHN0dWZmICovCisjZGVmaW5lIFBJWEVMU19QRVJfU0VHCQkyNTYJLyogUGl4ZWxzIHBlciBzZWdtZW50ICovCisKKyNkZWZpbmUgT1Y1MTFfRU5EUE9JTlRfQUREUkVTUwkxCS8qIElzb2MgZW5kcG9pbnQgbnVtYmVyICovCisKKyNkZWZpbmUgT1Y1MTFfTlVNRlJBTUVTCTIKKyNpZiBPVjUxMV9OVU1GUkFNRVMgPiBWSURFT19NQVhfRlJBTUUKKwkjZXJyb3IgIk9WNTExX05VTUZSQU1FUyBpcyB0b28gaGlnaCIKKyNlbmRpZgorCisjZGVmaW5lIE9WNTExX05VTVNCVUYJCTIKKworLyogQ29udHJvbCB0cmFuc2ZlcnMgdXNlIHVwIHRvIDQgYnl0ZXMgKi8KKyNkZWZpbmUgT1Y1MTFfQ0JVRl9TSVpFCQk0CisKKy8qIFNpemUgb2YgdXNiX21ha2VfcGF0aCgpIGJ1ZmZlciAqLworI2RlZmluZSBPVjUxMV9VU0JfUEFUSF9MRU4JNjQKKworLyogQnJpZGdlIHR5cGVzICovCitlbnVtIHsKKwlCUkdfVU5LTk9XTiwKKwlCUkdfT1Y1MTEsCisJQlJHX09WNTExUExVUywKKwlCUkdfT1Y1MTgsCisJQlJHX09WNTE4UExVUywKK307CisKKy8qIEJyaWRnZSBjbGFzc2VzICovCitlbnVtIHsKKwlCQ0xfVU5LTk9XTiwKKwlCQ0xfT1Y1MTEsCisJQkNMX09WNTE4LAorfTsKKworLyogU2Vuc29yIHR5cGVzICovCitlbnVtIHsKKwlTRU5fVU5LTk9XTiwKKwlTRU5fT1Y3NkJFLAorCVNFTl9PVjc2MTAsCisJU0VOX09WNzYyMCwKKwlTRU5fT1Y3NjIwQUUsCisJU0VOX09WNjYyMCwKKwlTRU5fT1Y2NjMwLAorCVNFTl9PVjY2MzBBRSwKKwlTRU5fT1Y2NjMwQUYsCisJU0VOX09WODYwMCwKKwlTRU5fS1MwMTI3LAorCVNFTl9LUzAxMjdCLAorCVNFTl9TQUE3MTExQSwKK307CisKK2VudW0geworCVNUQVRFX1NDQU5OSU5HLAkJLyogU2Nhbm5pbmcgZm9yIHN0YXJ0ICovCisJU1RBVEVfSEVBREVSLAkJLyogUGFyc2luZyBoZWFkZXIgKi8KKwlTVEFURV9MSU5FUywJCS8qIFBhcnNpbmcgbGluZXMgKi8KK307CisKKy8qIEJ1ZmZlciBzdGF0ZXMgKi8KK2VudW0geworCUJVRl9OT1RfQUxMT0NBVEVELAorCUJVRl9BTExPQ0FURUQsCit9OworCisvKiAtLS0tLS0tLS0gRGVmaW5pdGlvbiBvZiBpb2N0bCBpbnRlcmZhY2UgLS0tLS0tLS0tICovCisKKyNkZWZpbmUgT1Y1MTFfSU5URVJGQUNFX1ZFUiAxMDEKKworLyogTEVEIG9wdGlvbnMgKi8KK2VudW0geworCUxFRF9PRkYsCisJTEVEX09OLAorCUxFRF9BVVRPLAorfTsKKworLyogUmF3IGZyYW1lIGZvcm1hdHMgKi8KK2VudW0geworCVJBV0ZNVF9JTlZBTElELAorCVJBV0ZNVF9ZVVY0MDAsCisJUkFXRk1UX1lVVjQyMCwKKwlSQVdGTVRfWVVWNDIyLAorCVJBV0ZNVF9HQlI0MjIsCit9OworCitzdHJ1Y3Qgb3Y1MTFfaTJjX3N0cnVjdCB7CisJdW5zaWduZWQgY2hhciBzbGF2ZTsgLyogV3JpdGUgc2xhdmUgSUQgKHJlYWQgSUQgLSAxKSAqLworCXVuc2lnbmVkIGNoYXIgcmVnOyAgIC8qIEluZGV4IG9mIHJlZ2lzdGVyICovCisJdW5zaWduZWQgY2hhciB2YWx1ZTsgLyogVXNlciBzZXRzIHRoaXMgdy8gd3JpdGUsIGRyaXZlciBkb2VzIHcvIHJlYWQgKi8KKwl1bnNpZ25lZCBjaGFyIG1hc2s7ICAvKiBCaXRzIHRvIGJlIGNoYW5nZWQuIE5vdCB1c2VkIHdpdGggcmVhZCBvcHMgKi8KK307CisKKy8qIGlvY3RscyAqLworI2RlZmluZSBPVjUxMUlPQ19XSTJDICAgICBfSU9XKCd2JywgQkFTRV9WSURJT0NQUklWQVRFICsgNSwgXAorCQkJICAgICAgIHN0cnVjdCBvdjUxMV9pMmNfc3RydWN0KQorI2RlZmluZSBPVjUxMUlPQ19SSTJDICAgIF9JT1dSKCd2JywgQkFTRV9WSURJT0NQUklWQVRFICsgNiwgXAorCQkJICAgICAgIHN0cnVjdCBvdjUxMV9pMmNfc3RydWN0KQorLyogLS0tLS0tLS0tLS0tLSBFbmQgSU9DVEwgaW50ZXJmYWNlIC0tLS0tLS0tLS0tLS0tICovCisKK3N0cnVjdCB1c2Jfb3Y1MTE7CQkvKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCisKK3N0cnVjdCBvdjUxMV9zYnVmIHsKKwlzdHJ1Y3QgdXNiX292NTExICpvdjsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCXN0cnVjdCB1cmIgKnVyYjsKKwlzcGlubG9ja190IGxvY2s7CisJaW50IG47Cit9OworCitlbnVtIHsKKwlGUkFNRV9VTlVTRUQsCQkvKiBVbnVzZWQgKG5vIE1DQVBUVVJFKSAqLworCUZSQU1FX1JFQURZLAkJLyogUmVhZHkgdG8gc3RhcnQgZ3JhYmJpbmcgKi8KKwlGUkFNRV9HUkFCQklORywJCS8qIEluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGdyYWJiZWQgaW50byAqLworCUZSQU1FX0RPTkUsCQkvKiBGaW5pc2hlZCBncmFiYmluZywgYnV0IG5vdCBiZWVuIHN5bmNlZCB5ZXQgKi8KKwlGUkFNRV9FUlJPUiwJCS8qIFNvbWV0aGluZyBiYWQgaGFwcGVuZWQgd2hpbGUgcHJvY2Vzc2luZyAqLworfTsKKworc3RydWN0IG92NTExX3JlZ3ZhbHMgeworCWVudW0geworCQlPVjUxMV9ET05FX0JVUywKKwkJT1Y1MTFfUkVHX0JVUywKKwkJT1Y1MTFfSTJDX0JVUywKKwl9IGJ1czsKKwl1bnNpZ25lZCBjaGFyIHJlZzsKKwl1bnNpZ25lZCBjaGFyIHZhbDsKK307CisKK3N0cnVjdCBvdjUxMV9mcmFtZSB7CisJaW50IGZyYW1lbnVtOwkJLyogSW5kZXggb2YgdGhpcyBmcmFtZSAqLworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CS8qIEZyYW1lIGJ1ZmZlciAqLworCXVuc2lnbmVkIGNoYXIgKnRlbXBkYXRhOyAvKiBUZW1wIGJ1ZmZlciBmb3IgbXVsdGktc3RhZ2UgY29udmVyc2lvbnMgKi8KKwl1bnNpZ25lZCBjaGFyICpyYXdkYXRhOwkvKiBSYXcgY2FtZXJhIGRhdGEgYnVmZmVyICovCisJdW5zaWduZWQgY2hhciAqY29tcGJ1ZjsJLyogVGVtcCBidWZmZXIgZm9yIGRlY29tcHJlc3NvciAqLworCisJaW50IGRlcHRoOwkJLyogQnl0ZXMgcGVyIHBpeGVsICovCisJaW50IHdpZHRoOwkJLyogV2lkdGggYXBwbGljYXRpb24gaXMgZXhwZWN0aW5nICovCisJaW50IGhlaWdodDsJCS8qIEhlaWdodCBhcHBsaWNhdGlvbiBpcyBleHBlY3RpbmcgKi8KKworCWludCByYXd3aWR0aDsJCS8qIEFjdHVhbCB3aWR0aCBvZiBmcmFtZSBzZW50IGZyb20gY2FtZXJhICovCisJaW50IHJhd2hlaWdodDsJCS8qIEFjdHVhbCBoZWlnaHQgb2YgZnJhbWUgc2VudCBmcm9tIGNhbWVyYSAqLworCisJaW50IHN1Yl9mbGFnOwkJLyogU3ViLWNhcHR1cmUgbW9kZSBmb3IgdGhpcyBmcmFtZT8gKi8KKwl1bnNpZ25lZCBpbnQgZm9ybWF0OwkvKiBGb3JtYXQgZm9yIHRoaXMgZnJhbWUgKi8KKwlpbnQgY29tcHJlc3NlZDsJCS8qIElzIGZyYW1lIGNvbXByZXNzZWQ/ICovCisKKwl2b2xhdGlsZSBpbnQgZ3JhYnN0YXRlOwkvKiBTdGF0ZSBvZiBncmFiYmluZyAqLworCWludCBzY2Fuc3RhdGU7CQkvKiBTdGF0ZSBvZiBzY2FubmluZyAqLworCisJaW50IGJ5dGVzX3JlY3ZkOwkvKiBOdW1iZXIgb2YgaW1hZ2UgYnl0ZXMgcmVjZWl2ZWQgZnJvbSBjYW1lcmEgKi8KKworCWxvbmcgYnl0ZXNfcmVhZDsJLyogQW1vdW50IHRoYXQgaGFzIGJlZW4gcmVhZCgpICovCisKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsJLyogUHJvY2Vzc2VzIHdhaXRpbmcgKi8KKworCWludCBzbmFwc2hvdDsJCS8qIFRydWUgaWYgZnJhbWUgd2FzIGEgc25hcHNob3QgKi8KK307CisKKyNkZWZpbmUgREVDT01QX0lOVEVSRkFDRV9WRVIgNAorCisvKiBDb21wcmVzc2lvbiBtb2R1bGUgb3BlcmF0aW9ucyAqLworc3RydWN0IG92NTF4X2RlY29tcF9vcHMgeworCWludCAoKmRlY29tcF80MDApKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosCisJCQkgIGludCwgaW50LCBpbnQpOworCWludCAoKmRlY29tcF80MjApKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosCisJCQkgIGludCwgaW50LCBpbnQpOworCWludCAoKmRlY29tcF80MjIpKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosCisJCQkgIGludCwgaW50LCBpbnQpOworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworfTsKKworc3RydWN0IHVzYl9vdjUxMSB7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OworCisJaW50IGN1c3RvbWlkOworCWNoYXIgKmRlc2M7CisJdW5zaWduZWQgY2hhciBpZmFjZTsKKwljaGFyIHVzYl9wYXRoW09WNTExX1VTQl9QQVRIX0xFTl07CisKKwkvKiBEZXRlcm1pbmVkIGJ5IHNlbnNvciB0eXBlICovCisJaW50IG1heHdpZHRoOworCWludCBtYXhoZWlnaHQ7CisJaW50IG1pbndpZHRoOworCWludCBtaW5oZWlnaHQ7CisKKwlpbnQgYnJpZ2h0bmVzczsKKwlpbnQgY29sb3VyOworCWludCBjb250cmFzdDsKKwlpbnQgaHVlOworCWludCB3aGl0ZW5lc3M7CisJaW50IGV4cG9zdXJlOworCWludCBhdXRvX2JydDsJCS8qIEF1dG8gYnJpZ2h0bmVzcyBlbmFibGVkIGZsYWcgKi8KKwlpbnQgYXV0b19nYWluOwkJLyogQXV0byBnYWluIGNvbnRyb2wgZW5hYmxlZCBmbGFnICovCisJaW50IGF1dG9fZXhwOwkJLyogQXV0byBleHBvc3VyZSBlbmFibGVkIGZsYWcgKi8KKwlpbnQgYmFja2xpZ2h0OwkJLyogQmFja2xpZ2h0IGV4cG9zdXJlIGFsZ29yaXRobSBmbGFnICovCisJaW50IG1pcnJvcjsJCS8qIEltYWdlIGlzIHJldmVyc2VkIGhvcml6b250YWxseSAqLworCisJaW50IGxlZF9wb2xpY3k7CQkvKiBMRUQ6IG9mZnxvbnxhdXRvOyBPVjUxMSsgb25seSAqLworCisJc3RydWN0IHNlbWFwaG9yZSBsb2NrOwkvKiBTZXJpYWxpemVzIHVzZXItYWNjZXNzaWJsZSBvcGVyYXRpb25zICovCisJaW50IHVzZXI7CQkvKiB1c2VyIGNvdW50IGZvciBleGNsdXNpdmUgdXNlICovCisKKwlpbnQgc3RyZWFtaW5nOwkJLyogQXJlIHdlIHN0cmVhbWluZyBJc29jaHJvbm91cz8gKi8KKwlpbnQgZ3JhYmJpbmc7CQkvKiBBcmUgd2UgZ3JhYmJpbmc/ICovCisKKwlpbnQgY29tcHJlc3M7CQkvKiBTaG91bGQgdGhlIG5leHQgZnJhbWUgYmUgY29tcHJlc3NlZD8gKi8KKwlpbnQgY29tcHJlc3NfaW5pdGVkOwkvKiBBcmUgY29tcHJlc3Npb24gcGFyYW1zIHVwbG9hZGVkPyAqLworCisJaW50IGxpZ2h0ZnJlcTsJCS8qIFBvd2VyIChsaWdodGluZykgZnJlcXVlbmN5ICovCisJaW50IGJhbmRmaWx0OwkJLyogQmFuZGluZyBmaWx0ZXIgZW5hYmxlZCBmbGFnICovCisKKwl1bnNpZ25lZCBjaGFyICpmYnVmOwkvKiBWaWRlb2RldiBidWZmZXIgYXJlYSAqLworCXVuc2lnbmVkIGNoYXIgKnRlbXBmYnVmOyAvKiBUZW1wb3JhcnkgKGludGVybWVkaWF0ZSkgYnVmZmVyIGFyZWEgKi8KKwl1bnNpZ25lZCBjaGFyICpyYXdmYnVmOwkvKiBSYXcgY2FtZXJhIGRhdGEgYnVmZmVyIGFyZWEgKi8KKworCWludCBzdWJfZmxhZzsJCS8qIFBpeCBBcnJheSBzdWJjYXB0dXJlIG9uIGZsYWcgKi8KKwlpbnQgc3VieDsJCS8qIFBpeCBBcnJheSBzdWJjYXB0dXJlIHggb2Zmc2V0ICovCisJaW50IHN1Ynk7CQkvKiBQaXggQXJyYXkgc3ViY2FwdHVyZSB5IG9mZnNldCAqLworCWludCBzdWJ3OwkJLyogUGl4IEFycmF5IHN1YmNhcHR1cmUgd2lkdGggKi8KKwlpbnQgc3ViaDsJCS8qIFBpeCBBcnJheSBzdWJjYXB0dXJlIGhlaWdodCAqLworCisJaW50IGN1cmZyYW1lOwkJLyogQ3VycmVudCByZWNlaXZpbmcgc2J1ZiAqLworCXN0cnVjdCBvdjUxMV9mcmFtZSBmcmFtZVtPVjUxMV9OVU1GUkFNRVNdOwkKKworCXN0cnVjdCBvdjUxMV9zYnVmIHNidWZbT1Y1MTFfTlVNU0JVRl07CisKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsJLyogUHJvY2Vzc2VzIHdhaXRpbmcgKi8KKworCWludCBzbmFwX2VuYWJsZWQ7CS8qIFNuYXBzaG90IG1vZGUgZW5hYmxlZCAqLworCQorCWludCBicmlkZ2U7CQkvKiBUeXBlIG9mIGJyaWRnZSAoQlJHXyopICovCisJaW50IGJjbGFzczsJCS8qIENsYXNzIG9mIGJyaWRnZSAoQkNMXyopICovCisJaW50IHNlbnNvcjsJCS8qIFR5cGUgb2YgaW1hZ2Ugc2Vuc29yIGNoaXAgKFNFTl8qKSAqLworCisJaW50IHBhY2tldF9zaXplOwkvKiBGcmFtZSBzaXplIHBlciBpc29jIGRlc2MgKi8KKwlpbnQgcGFja2V0X251bWJlcmluZzsJLyogSXMgSVNPIGZyYW1lIG51bWJlcmluZyBlbmFibGVkPyAqLworCisJc3RydWN0IHNlbWFwaG9yZSBwYXJhbV9sb2NrOwkvKiBwYXJhbXMgbG9jayBmb3IgdGhpcyBjYW1lcmEgKi8KKworCS8qIEZyYW1lYnVmZmVyL3NidWYgbWFuYWdlbWVudCAqLworCWludCBidWZfc3RhdGU7CisJc3RydWN0IHNlbWFwaG9yZSBidWZfbG9jazsKKworCXN0cnVjdCBvdjUxeF9kZWNvbXBfb3BzICpkZWNvbXBfb3BzOworCisJLyogU3RvcCBzdHJlYW1pbmcgd2hpbGUgY2hhbmdpbmcgcGljdHVyZSBzZXR0aW5ncyAqLworCWludCBzdG9wX2R1cmluZ19zZXQ7CisKKwlpbnQgc3RvcHBlZDsJCS8qIFN0cmVhbWluZyBpcyB0ZW1wb3JhcmlseSBwYXVzZWQgKi8KKworCS8qIFZpZGVvIGRlY29kZXIgc3R1ZmYgKi8KKwlpbnQgaW5wdXQ7CQkvKiBDb21wb3NpdGUsIFMtVklERU8sIGV0Yy4uLiAqLworCWludCBudW1faW5wdXRzOwkJLyogTnVtYmVyIG9mIGlucHV0cyAqLworCWludCBub3JtOyAJCS8qIE5UU0MgLyBQQUwgLyBTRUNBTSAqLworCWludCBoYXNfZGVjb2RlcjsJLyogRGV2aWNlIGhhcyBhIHZpZGVvIGRlY29kZXIgKi8KKwlpbnQgcGFsOwkJLyogRGV2aWNlIGlzIGRlc2lnbmVkIGZvciBQQUwgcmVzb2x1dGlvbiAqLworCisJLyogSTJDIGludGVyZmFjZSAqLworCXN0cnVjdCBzZW1hcGhvcmUgaTJjX2xvY2s7CSAgLyogUHJvdGVjdCBJMkMgY29udHJvbGxlciByZWdzICovCisJdW5zaWduZWQgY2hhciBwcmltYXJ5X2kyY19zbGF2ZTsgIC8qIEkyQyB3cml0ZSBpZCBvZiBzZW5zb3IgKi8KKworCS8qIENvbnRyb2wgdHJhbnNhY3Rpb24gc3R1ZmYgKi8KKwl1bnNpZ25lZCBjaGFyICpjYnVmOwkJLyogQnVmZmVyIGZvciBwYXlsb2FkICovCisJc3RydWN0IHNlbWFwaG9yZSBjYnVmX2xvY2s7Cit9OworCisvKiBVc2VkIHRvIHJlcHJlc2VudCBhIGxpc3Qgb2YgdmFsdWVzIGFuZCB0aGVpciByZXNwZWN0aXZlIHN5bWJvbGljIG5hbWVzICovCitzdHJ1Y3Qgc3ltYm9saWNfbGlzdCB7CisJaW50IG51bTsKKwljaGFyICpuYW1lOworfTsKKworI2RlZmluZSBOT1RfREVGSU5FRF9TVFIgIlVua25vd24iCisKKy8qIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIG1hdGNoaW5nIGVsZW1lbnQgaW4gdGhlIHN5bWJvbGljX2xpc3QgYXJyYXkuIFRoZQorICogZW5kIG9mIHRoZSBsaXN0IG11c3QgYmUgbWFya2VkIHdpdGggYW4gZWxlbWVudCB0aGF0IGhhcyBhIE5VTEwgbmFtZS4KKyAqLworc3RhdGljIGlubGluZSBjaGFyICogCitzeW1ib2xpYyhzdHJ1Y3Qgc3ltYm9saWNfbGlzdCBsaXN0W10sIGludCBudW0pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBsaXN0W2ldLm5hbWUgIT0gTlVMTDsgaSsrKQorCQkJaWYgKGxpc3RbaV0ubnVtID09IG51bSkKKwkJCQlyZXR1cm4gKGxpc3RbaV0ubmFtZSk7CisKKwlyZXR1cm4gKE5PVF9ERUZJTkVEX1NUUik7Cit9CisKKy8qIENvbXByZXNzaW9uIHN0dWZmICovCisKKyNkZWZpbmUgT1Y1MTFfUVVBTlRBQkxFU0laRQk2NAorI2RlZmluZSBPVjUxOF9RVUFOVEFCTEVTSVpFCTMyCisKKyNkZWZpbmUgT1Y1MTFfWVFVQU5UQUJMRSB7IFwKKwkwLCAxLCAxLCAyLCAyLCAzLCAzLCA0LCBcCisJMSwgMSwgMSwgMiwgMiwgMywgNCwgNCwgXAorCTEsIDEsIDIsIDIsIDMsIDQsIDQsIDQsIFwKKwkyLCAyLCAyLCAzLCA0LCA0LCA0LCA0LCBcCisJMiwgMiwgMywgNCwgNCwgNSwgNSwgNSwgXAorCTMsIDMsIDQsIDQsIDUsIDUsIDUsIDUsIFwKKwkzLCA0LCA0LCA0LCA1LCA1LCA1LCA1LCBcCisJNCwgNCwgNCwgNCwgNSwgNSwgNSwgNSAgXAorfQorCisjZGVmaW5lIE9WNTExX1VWUVVBTlRBQkxFIHsgXAorCTAsIDIsIDIsIDMsIDQsIDQsIDQsIDQsIFwKKwkyLCAyLCAyLCA0LCA0LCA0LCA0LCA0LCBcCisJMiwgMiwgMywgNCwgNCwgNCwgNCwgNCwgXAorCTMsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIFwKKwk0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCBcCisJNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgXAorCTQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIFwKKwk0LCA0LCA0LCA0LCA0LCA0LCA0LCA0ICBcCit9CisKKyNkZWZpbmUgT1Y1MThfWVFVQU5UQUJMRSB7IFwKKwk1LCA0LCA1LCA2LCA2LCA3LCA3LCA3LCBcCisJNSwgNSwgNSwgNSwgNiwgNywgNywgNywgXAorCTYsIDYsIDYsIDYsIDcsIDcsIDcsIDgsIFwKKwk3LCA3LCA2LCA3LCA3LCA3LCA4LCA4ICBcCit9CisKKyNkZWZpbmUgT1Y1MThfVVZRVUFOVEFCTEUgeyBcCisJNiwgNiwgNiwgNywgNywgNywgNywgNywgXAorCTYsIDYsIDYsIDcsIDcsIDcsIDcsIDcsIFwKKwk2LCA2LCA2LCA3LCA3LCA3LCA3LCA4LCBcCisJNywgNywgNywgNywgNywgNywgOCwgOCAgXAorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9DaGFuZ2VMb2cgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvQ2hhbmdlTG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZWI3MWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvQ2hhbmdlTG9nCkBAIC0wLDAgKzEsMTQzIEBACis5LjAuMgorCisqIEFkZGluZyAjaWZkZWYgdG8gY29tcGlsZSBQV0MgYmVmb3JlIGFuZCBhZnRlciAyLjYuNQorCis5LjAuMQorCis5LjAKKworCis4LjEyCisKKyogSW1wbGVtZW50IG1vdG9yaXplZCBwYW4vdGlsdCBmZWF0dXJlIGZvciBMb2dpdGVjaCBRdWlja0NhbSBPcmJpdC9TcGVyZS4KKworOC4xMS4xCisKKyogRml4IGZvciBQQ1ZDNzIwLzQwLCB3b3VsZCBub3QgYmUgYWJsZSB0byBzZXQgdmlkZW9tb2RlCisqIEZpeCBmb3IgU2Ftc3VuZyBNUEMgbW9kZWxzLCBhcHBlYXJhbnRseSB0aGV5IGFyZSBiYXNlZCBvbiBhIG5ld2VyIGNoaXBzZXQKKworOC4xMQorCisqIDIwIGRldl9oaW50cyAocGVyIHJlcXVlc3QpCisqIEhvdCB1bnBsdWdnaW5nIHNob3VsZCBiZSBiZXR0ZXIsIG5vIG1vcmUgZGFuZ2xpbmcgcG9pbnRlcnMgb3IgbWVtb3J5IGxlYWtzCisqIEFkZGVkIHJlc2VydmVkIExvZ2l0ZWNoIHdlYmNhbSBJRHMKKyogRGV2aWNlIG5vdyByZW1lbWJlcnMgc2l6ZSAmIGZwcyBiZXR3ZWVuIGNsb3NlKCkvb3BlbigpCisqIFJlbW92ZWQgcGFsZXR0ZSBzdHVmZiBhbHRvZ2V0aGVyCisKKzguMTAuMQorCisqIEFkZGVkIElEcyBmb3IgUENWQzcyMEsvNDAgYW5kIENyZWF0aXZlIExhYnMgV2ViY2FtIFBybworCis4LjEwCisKKyogRml4ZWQgSUQgZm9yIFF1aWNrQ2FtIE5vdGVib29rIHBybworKiBBZGRlZCBHUkVBTFNJWkUgaW9jdGwoKSBjYWxsCisqIEZpeGVkIGJ1ZyBpbiBjYXNlIFBXQ1ggd2FzIG5vdCBsb2FkZWQgYW5kIGludmFsaWQgc2l6ZSB3YXMgc2V0CisKKzguOQorCisqIE1lcmdpbmcgd2l0aCBrZXJuZWwgMi41LjQ5CisqIEFkZGluZyBJRHMgZm9yIFF1aWNrQ2FtIFpvb20gJiBRdWlja0NhbSBOb3RlYm9vaworCis4LjgKKworKiBGaXhpbmcgJ2xlZHMnIHBhcmFtZXRlcgorKiBBZGRpbmcgSURzIGZvciBMb2dpdGVjaCBRdWlja0NhbSBQcm8gNDAwMAorKiBNYWtpbmcgVVJCIGluaXQvY2xlYW51cCBhIGxpdHRsZSBuaWNlcgorCis4LjcKKworKiBJbmNvcnBvcmF0aW5nIGNoYW5nZXMgaW4gaW9jdGwoKSBwYXJhbWV0ZXIgcGFzc2luZworKiBBbHNvIGNoYW5nZXMgdG8gVVJCIG1lY2hhbmlzbQorCis4LjYKKworKiBBZGRlZCBJRCdzIGZvciBWaXNpb25pdGUgVkNTIFVNMTAwIGFuZCBVQzMwMAorKiBSZW1vdmVkIFlVVjQyMC1pbnRlcmxhY2VkIHBhbGV0dGUgYWx0b2dldGhlciAod2FzIGNvbmZ1c2luZykKKyogUmVtb3ZlZCBNSVJST1Igc3R1ZmYgYXMgaXQgZGlkbid0IHdvcmsgYW55d2F5CisqIEZpeGVkIGEgcHJvYmxlbSB3aXRoIHRoZSAnbGVkcycgcGFyYW1ldGVyICh3b3VsZG4ndCBibGluaykKKyogQWRkZWQgaW9jdGwoKXMgZm9yIGFkdmFuY2VkIGZlYXR1cmVzOiAnZXh0ZW5kZWQnIHdoaXRlYmFsYW5jZSBpb2N0bCgpcywKKyAgQ09OVE9VUiwgQkFDS0xJR0hULCBGTElDS0VSLCBEWU5OT0lTRS4KKyogVklESU9DR0NBUC5uYW1lIG5vdyBjb250YWlucyByZWFsIGNhbWVyYSBtb2RlbCBuYW1lIGluc3RlYWQgb2YKKyAgJ1BoaWxpcHMgeHh4IHdlYmNhbScKKyogQWRkZWQgUFJPQkUgaW9jdGwgKHNlZSBwcmV2aW91cyBwb2ludCAmIEFQSSBkb2MpCisKKzguNQorCisqIEFkZGluZyBJRHMgZm9yIENyZWF0aXZlIExhYnMgV2ViY2FtIDUKKyogQWRkaW5nIElEcyBmb3IgU09URUMgQ01TLTAwMSB3ZWJjYW0KKyogU29sdmluZyBwb3NzaWJsZSBoYW5nIGluIFZJRElPQ1NZTkMgd2hlbiB1bnBsdWdnaW5nIHRoZSBjYW0gCisqIEZvcmdvdCB0byByZXR1cm4gc3RydWN0dXJlIGluIFZJRElPQ1BXQ0dBV0IsIG9vcHMKKyogVGltZSBpbnRlcnZhbCBmb3IgdGhlIExFRHMgYXJlIG5vdyBpbiBtaWxsaXNlY29uZHMKKworOC40CisKKyogRml4aW5nIHBvd2VyX3NhdmUgb3B0aW9uIGZvciBWZXN0YSByYW5nZQorKiBIYW5kbGluZyBuZXcgZXJyb3IgY29kZXMgaW4gSVNPQyBjYWxsYmFjaworKiBBZGRpbmcgZGV2X2hpbnQgbW9kdWxlIHBhcmFtZXRlciwgdG8gc3BlY2lmeSAvZGV2L3ZpZGVvWCBkZXZpY2Ugbm9kZXMKKworOC4zCisKKyogQWRkaW5nIFNhbXN1bmcgQzEwIGFuZCBDMzAgY2FtZXJhcworKiBSZW1vdmluZyBwYWxldHRlIG1vZHVsZSBwYXJhbWV0ZXIKKyogRml4ZWQgdHlwbyBpbiBJRCBvZiBRdWlja0NhbSAzMDAwIFBybworKiBBZGRpbmcgTEVEIHNldHRpbmdzIChibGlua2luZyB3aGlsZSBpbiB1c2UpIGZvciBUb1VDYW0gY2FtZXJhcy4KKyogVHVybnMgTEVEIG9mZiB3aGVuIGNhbWVyYSBpcyBub3QgaW4gdXNlLgorCis4LjIKKworKiBNYWtpbmcgbW9kdWxlIG1vcmUgc2lsZW50IHdoZW4gdHJhY2UgPSAwIAorKiBBZGRpbmcgUXVpY2tDYW0gMzAwMCBQcm8gSURzCisqIENocm9taW5hbmNlIGNvbnRyb2wgZm9yIHRoZSBWZXN0YSBjYW1lcmFzCisqIEhvcGVmdWxseSBmaXhlZCBwcm9ibGVtcyBvbiBtYWNoaW5lcyB3aXRoIEJJR01FTSBhbmQgPiAxR0Igb2YgUkFNCisqIEluY2x1ZGVkIE9saXZlciBOZXVrZW0ncyBsb2NrX2tlcm5lbCgpIHBhdGNoCisqIEFsbG9jYXRlcyBsZXNzIG1lbW9yeSBmb3IgaW1hZ2UgYnVmZmVycworKiBBZGRzIGlvY3RsKClzIGZvciB0aGUgd2hpdGViYWxhbmNpbmcKKworOC4xCisKKyogQWRkaW5nIHN1cHBvcnQgZm9yIDc1MAorKiBBZGRpbmcgVjRMIEdBVURJTy9TQVVESU8vVU5JVCBpb2N0bCgpIGNhbGxzCisKKzguMAorKiAnZGFtYWdlIGNvbnRyb2wnIGFmdGVyIGluY2x1c2lvbiBpbiAyLjQuNS4KKyogQ2hhbmdlZCB3YWl0LXF1ZXVlIG1lY2hhbmlzbSBpbiByZWFkL21tYXAvcG9sbCBhY2NvcmRpbmcgdG8gdGhlIGJvb2suCisqIEluY2x1ZGVkIFlVVjQyMFAgcGFsZXR0ZS4KKyogQ2hhbmdlZCBpbnRlcmZhY2UgdG8gZGVjb21wcmVzc29yIG1vZHVsZS4KKyogQ2xlYW5lZCB1cCBwd2Mgc3RydWN0dXJlIGEgYml0LgorCis3LjAKKworKiBGaXhlZCBidWcgaW4gdmN2dF80MjBpX3l1eXY7IGV4dHJhIHZhcmlhYmxlcyBvbiBzdGFjayB3ZXJlIG1pc2FsaWduZWQuCisqIFRoZXJlIGlzIG5vdyBhIGNsZWFyIGVycm9yIG1lc3NhZ2Ugd2hlbiBhbiBpbWFnZSBzaXplIGlzIHNlbGVjdGVkIHRoYXQKKyAgaXMgb25seSBzdXBwb3J0ZWQgdXNpbmcgdGhlIGRlY29tcHJlc3NvciwgYW5kIHRoZSBkZWNvbXByZXNzb3IgaXNuJ3QKKyAgbG9hZGVkLgorKiBXaGVuIHRoZSBkZWNvbXByZXNzb3Igd2Fzbid0IGxvYWRlZCwgc2VsZWN0aW5nIGxhcmdlIGltYWdlIHNpemUKKyAgd291bGQgY3JlYXRlIHNrZXdlZCBvciBkb3VibGUgaW1hZ2VzLgorCis2LjMKKworKiBJbnRyb2R1Y2VkIHNwaW5sb2NrcyBmb3IgdGhlIGJ1ZmZlciBwb2ludGVyIG1hbmlwdWxhdGlvbjsgYSBudW1iZXIgb2YKKyAgcmVwb3J0cyBzZWVtIHRvIHN1Z2dlc3QgdGhlIGRvd24oKS91cCgpIHNlbWFwaG9yZXMgd2VyZSB0aGUgY2F1c2Ugb2YKKyAgbG9ja3Vwcywgc2luY2UgdGhleSBhcmUgbm90IHN1aXRhYmxlIGZvciBpbnRlcnJ1cHQvdXNlciBsb2NraW5nLgorKiBTZXBhcmF0ZWQgZGVjb21wcmVzc29yIGFuZCBjb3JlIGNvZGUgaW50byAyIG1vZHVsZXMuCisKKzYuMgorCisqIE5vbi1pbnRlZ3JhbCBpbWFnZSBzaXplcyBhcmUgbm93IHBhZGRlZCB3aXRoIGdyYXkgb3IgYmxhY2suCisqIEFkZGVkIFNIVVRURVJTUEVFRCBpb2N0bCgpLgorKiBGaXhlZCBidWdsZXQgaW4gVklESU9DUFdDU0FHQzsgdGhlIGZ1bmN0aW9uIHdvdWxkIGFsd2F5cyByZXR1cm4gYW4gZXJyb3IsCisgIGV2ZW4gdGhvdWdoIHRoZSBjYWxsIHN1Y2NlZWRlZC4KKyogQWRkZWQgaG90cGx1ZyBzdXBwb3J0IGZvciAyLjQuKi4KKyogTWVtb3J5OiB0aGUgNjQ1LzY0NiB1c2VzIGxlc3MgbWVtb3J5IG5vdy4KKworNi4xCisKKyogVklESU9DU1BJQ1QgcmV0dXJucyAtRUlOVkFMIHdpdGggaW52YWxpZCBwYWxldHRlcy4KKyogQWRkZWQgc2F0dXJhdGlvbiBjb250cm9sLgorKiBTcGxpdCBkZWNvbXByZXNzb3JzIGZyb20gcmVzdC4KKyogRml4ZWQgYnVnIHRoYXQgd291bGQgcmVzZXQgdGhlIGZyYW1lcmF0ZSB0byB0aGUgZGVmYXVsdCBmcmFtZXJhdGUgaWYgCisgIHRoZSByYXRlIGZpZWxkIHdhcyBzZXQgdG8gMCAod2hpY2ggaXMgbm90IHdoYXQgSSBpbnRlbmRlZCwgbmwuIGRvIG5vdCAKKyAgY2hhbmdlIHRoZSBmcmFtZXJhdGUhKS4KKyogVklESU9DUFdDU0NRVUFMIChzZXR0aW5nIGNvbXByZXNzaW9uIHF1YWxpdHkpIG5vdyB0YWtlcyBlZmZlY3QgaW1tZWRpYXRlbHkuCisqIFdvcmthcm91bmQgZm9yIGEgYnVnIGluIHRoZSA3MzAgc2Vuc29yLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL01ha2VmaWxlIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYjQxZWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvTWFrZWZpbGUKQEAgLTAsMCArMSwyMCBAQAoraWZuZXEgKCQoS0VSTkVMUkVMRUFTRSksKQorCitwd2Mtb2Jqcwk6PSBwd2MtaWYubyBwd2MtbWlzYy5vIHB3Yy1jdHJsLm8gcHdjLXVuY29tcHJlc3MubyBwd2MtZGVjMS5vIHB3Yy1kZWMyMy5vIHB3Yy1raWFyYS5vIHB3Yy10aW1vbi5vCisKK29iai0kKENPTkZJR19VU0JfUFdDKSArPSBwd2MubworCitlbHNlCisKK0tESVIgOj0gL2xpYi9tb2R1bGVzLyQoc2hlbGwgdW5hbWUgLXIpL2J1aWxkCitQV0QgOj0gJChzaGVsbCBwd2QpCisKK2RlZmF1bHQ6CisJJChNQUtFKSAtQyAkKEtESVIpIFNVQkRJUlM9JChQV0QpIG1vZHVsZXMKKworZW5kaWYKKworY2xlYW46CisJcm0gLWYgKi5bb2FzXSAuKi5mbGFncyAqLmtvIC4qLmNtZCAuKi5kIC4qLnRtcCAqLm1vZC5jIAorCXJtIC1yZiAudG1wX3ZlcnNpb25zCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9waGlsaXBzLnR4dCBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9waGlsaXBzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGE2NDBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3BoaWxpcHMudHh0CkBAIC0wLDAgKzEsMjM2IEBACitUaGlzIGZpbGUgY29udGFpbnMgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvciB0aGUgUGhpbGlwcyBhbmQgT0VNIHdlYmNhbXMuCitFLW1haWw6IHdlYmNhbUBzbWNjLmRlbW9uLm5sICAgICAgICAgICAgICAgICAgICAgICAgTGFzdCB1cGRhdGVkOiAyMDA0LTAxLTE5CitTaXRlOiBodHRwOi8vd3d3LnNtY2MuZGVtb24ubmwvd2ViY2FtLworCitBcyBvZiB0aGlzIG1vbWVudCwgdGhlIGZvbGxvd2luZyBjYW1lcmFzIGFyZSBzdXBwb3J0ZWQ6CisgKiBQaGlsaXBzIFBDQTY0NQorICogUGhpbGlwcyBQQ0E2NDYKKyAqIFBoaWxpcHMgUENWQzY3NQorICogUGhpbGlwcyBQQ1ZDNjgwCisgKiBQaGlsaXBzIFBDVkM2OTAKKyAqIFBoaWxpcHMgUENWQzcyMC80MAorICogUGhpbGlwcyBQQ1ZDNzMwCisgKiBQaGlsaXBzIFBDVkM3NDAKKyAqIFBoaWxpcHMgUENWQzc1MAorICogQXNrZXkgVkMwMTAKKyAqIENyZWF0aXZlIExhYnMgV2ViY2FtIDUKKyAqIENyZWF0aXZlIExhYnMgV2ViY2FtIFBybyBFeAorICogTG9naXRlY2ggUXVpY2tDYW0gMzAwMCBQcm8KKyAqIExvZ2l0ZWNoIFF1aWNrQ2FtIDQwMDAgUHJvCisgKiBMb2dpdGVjaCBRdWlja0NhbSBOb3RlYm9vayBQcm8KKyAqIExvZ2l0ZWNoIFF1aWNrQ2FtIFpvb20KKyAqIExvZ2l0ZWNoIFF1aWNrQ2FtIE9yYml0CisgKiBMb2dpdGVjaCBRdWlja0NhbSBTcGhlcmUKKyAqIFNhbXN1bmcgTVBDLUMxMAorICogU2Ftc3VuZyBNUEMtQzMwCisgKiBTb3RlYyBBZmluYSBFeWUKKyAqIEFNRSBDVS0wMDEKKyAqIFZpc2lvbml0ZSBWQ1MtVU0xMDAKKyAqIFZpc2lvbml0ZSBWQ1MtVUMzMDAKKworVGhlIG1haW4gd2VicGFnZSBmb3IgdGhlIFBoaWxpcHMgZHJpdmVyIGlzIGF0IHRoZSBhZGRyZXNzIGFib3ZlLiBJdCBjb250YWlucworYSBsb3Qgb2YgZXh0cmEgaW5mb3JtYXRpb24sIGEgRkFRLCBhbmQgdGhlIGJpbmFyeSBwbHVnaW4gJ1BXQ1gnLiBUaGlzIHBsdWdpbgorY29udGFpbnMgZGVjb21wcmVzc2lvbiByb3V0aW5lcyB0aGF0IGFsbG93IHlvdSB0byB1c2UgaGlnaGVyIGltYWdlIHNpemVzIGFuZAorZnJhbWVyYXRlczsgaW4gYWRkaXRpb24gdGhlIHdlYmNhbSB1c2VzIGxlc3MgYmFuZHdpZHRoIG9uIHRoZSBVU0IgYnVzIChoYW5keQoraWYgeW91IHdhbnQgdG8gcnVuIG1vcmUgdGhhbiAxIGNhbWVyYSBzaW11bHRhbmVvdXNseSkuIFRoZXNlIHJvdXRpbmVzIGZhbGwKK3VuZGVyIGEgTkRBLCBhbmQgbWF5IHRoZXJlZm9yIG5vdCBiZSBkaXN0cmlidXRlZCBhcyBzb3VyY2U7IGhvd2V2ZXIsIGl0cyB1c2UKK2lzIGNvbXBsZXRlbHkgb3B0aW9uYWwuCisKK1lvdSBjYW4gYnVpbGQgdGhpcyBjb2RlIGVpdGhlciBpbnRvIHlvdXIga2VybmVsLCBvciBhcyBhIG1vZHVsZS4gSSByZWNvbW1lbmQKK3RoZSBsYXR0ZXIsIHNpbmNlIGl0IG1ha2VzIHRyb3VibGVzaG9vdGluZyBhIGxvdCBlYXNpZXIuIFRoZSBidWlsdC1pbgorbWljcm9waG9uZSBpcyBzdXBwb3J0ZWQgdGhyb3VnaCB0aGUgVVNCIEF1ZGlvIGNsYXNzLgorCitXaGVuIHlvdSBsb2FkIHRoZSBtb2R1bGUgeW91IGNhbiBzZXQgc29tZSBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUKK2NhbWVyYTsgc29tZSBwcm9ncmFtcyBkZXBlbmQgb24gYSBwYXJ0aWN1bGFyIGltYWdlLXNpemUgb3IgLWZvcm1hdCBhbmQKK2Rvbid0IGtub3cgaG93IHRvIHNldCBpdCBwcm9wZXJseSBpbiB0aGUgZHJpdmVyLiBUaGUgb3B0aW9ucyBhcmU6CisKK3NpemUKKyAgIENhbiBiZSBvbmUgb2YgJ3NxY2lmJywgJ3FzaWYnLCAncWNpZicsICdzaWYnLCAnY2lmJyBvcgorICAgJ3ZnYScsIGZvciBhbiBpbWFnZSBzaXplIG9mIHJlc3AuIDEyOHg5NiwgMTYweDEyMCwgMTc2eDE0NCwKKyAgIDMyMHgyNDAsIDM1MngyODggYW5kIDY0MHg0ODAgKG9mIGNvdXJzZSwgb25seSBmb3IgdGhvc2UgY2FtZXJhcyB0aGF0IAorICAgc3VwcG9ydCB0aGVzZSByZXNvbHV0aW9ucykuCisKK2ZwcworICAgU3BlY2lmaWVzIHRoZSBkZXNpcmVkIGZyYW1lcmF0ZS4gSXMgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2Ugb2YgNC0zMC4KKworZmJ1ZnMKKyAgIFRoaXMgcGFyYW10ZXIgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgaW50ZXJuYWwgYnVmZmVycyB0byB1c2UgZm9yIHN0b3JpbmcgCisgICBmcmFtZXMgZnJvbSB0aGUgY2FtLiBUaGlzIHdpbGwgaGVscCBpZiB0aGUgcHJvY2VzcyB0aGF0IHJlYWRzIGltYWdlcyBmcm9tIAorICAgdGhlIGNhbSBpcyBhIGJpdCBzbG93IG9yIG1vbWVudGFyZWx5IGJ1c3kuIEhvd2V2ZXIsIG9uIHNsb3cgbWFjaGluZXMgaXQgCisgICBvbmx5IGludHJvZHVjZXMgbGFnLCBzbyBjaG9vc2UgY2FyZWZ1bGx5LiBUaGUgZGVmYXVsdCBpcyAzLCB3aGljaCBpcyAKKyAgIHJlYXNvbmFibGUuIFlvdSBjYW4gc2V0IGl0IGJldHdlZW4gMiBhbmQgNS4KKworbWJ1ZnMKKyAgIFRoaXMgaXMgYW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDEwLiBJdCB3aWxsIHRlbGwgdGhlIG1vZHVsZSB0aGUgbnVtYmVyIG9mCisgICBidWZmZXJzIHRvIHJlc2VydmUgZm9yIG1tYXAoKSwgVklESU9DQ0dNQlVGLCBWSURJT0NNQ0FQVFVSRSBhbmQgZnJpZW5kcy4KKyAgIFRoZSBkZWZhdWx0IGlzIDIsIHdoaWNoIGlzIGFkZXF1YXRlIGZvciBtb3N0IGFwcGxpY2F0aW9ucyAoZG91YmxlCisgICBidWZmZXJpbmcpLgorICAgICAgCisgICBTaG91bGQgeW91IGV4cGVyaWVuY2UgYSBsb3Qgb2YgJ0R1bXBpbmcgZnJhbWUuLi4nIG1lc3NhZ2VzIGR1cmluZworICAgZ3JhYmJpbmcgd2l0aCBhIHRvb2wgdGhhdCB1c2VzIG1tYXAoKSwgeW91IG1pZ2h0IHdhbnQgdG8gaW5jcmVhc2UgaWYuIAorICAgSG93ZXZlciwgaXQgZG9lc24ndCByZWFsbHkgYnVmZmVyIGltYWdlcywgaXQganVzdCBnaXZlcyB5b3UgYSBiaXQgbW9yZQorICAgc2xhY2sgd2hlbiB5b3VyIHByb2dyYW0gaXMgYmVoaW5kLiBCdXQgeW91IG5lZWQgYSBtdWx0aS10aHJlYWRlZCBvcgorICAgZm9ya2VkIHByb2dyYW0gdG8gcmVhbGx5IHRha2UgYWR2YW50YWdlIG9mIHRoZXNlIGJ1ZmZlcnMuCisKKyAgIFRoZSBhYnNvbHV0ZSBtYXhpbXVtIGlzIDEwLCBidXQgZG9uJ3Qgc2V0IGl0IHRvbyBoaWdoISAgRXZlcnkgYnVmZmVyIHRha2VzCisgICB1cCA0NjAgS0Igb2YgUkFNLCBzbyB1bmxlc3MgeW91IGhhdmUgYSBsb3Qgb2YgbWVtb3J5IHNldHRpbmcgdGhpcyB0bworICAgc29tZXRoaW5nIG1vcmUgdGhhbiA0IGlzIGFuIGFic29sdXRlIHdhc3RlLiAgVGhpcyBtZW1vcnkgaXMgb25seQorICAgYWxsb2NhdGVkIGR1cmluZyBvcGVuKCksIHNvIG5vdGhpbmcgaXMgd2FzdGVkIHdoZW4gdGhlIGNhbWVyYSBpcyBub3QgaW4KKyAgIHVzZS4KKworcG93ZXJfc2F2ZQorICAgV2hlbiBwb3dlcl9zYXZlIGlzIGVuYWJsZWQgKHNldCB0byAxKSwgdGhlIG1vZHVsZSB3aWxsIHRyeSB0byBzaHV0IGRvd24KKyAgIHRoZSBjYW0gb24gY2xvc2UoKSBhbmQgcmUtYWN0aXZhdGUgb24gb3BlbigpLiBUaGlzIHdpbGwgc2F2ZSBwb3dlciBhbmQKKyAgIHR1cm4gb2ZmIHRoZSBMRUQuIE5vdCBhbGwgY2FtZXJhcyBzdXBwb3J0IHRoaXMgdGhvdWdoICh0aGUgNjQ1IGFuZCA2NDYKKyAgIGRvbid0IGhhdmUgcG93ZXIgc2F2aW5nIGF0IGFsbCksIGFuZCBzb21lIG1vZGVscyBkb24ndCB3b3JrIGVpdGhlciAodGhleQorICAgd2lsbCBzaHV0IGRvd24sIGJ1dCBuZXZlciB3YWtlIHVwKS4gQ29uc2lkZXIgdGhpcyBleHBlcmltZW50YWwuIEJ5CisgICBkZWZhdWx0IHRoaXMgb3B0aW9uIGlzIGRpc2FibGVkLgorCitjb21wcmVzc2lvbiAob25seSB1c2VmdWwgd2l0aCB0aGUgcGx1Z2luKQorICAgV2l0aCB0aGlzIG9wdGlvbiB5b3UgY2FuIGNvbnRyb2wgdGhlIGNvbXByZXNzaW9uIGZhY3RvciB0aGF0IHRoZSBjYW1lcmEKKyAgIHVzZXMgdG8gc3F1ZWV6ZSB0aGUgaW1hZ2UgdGhyb3VnaCB0aGUgVVNCIGJ1cy4gWW91IGNhbiBzZXQgdGhlIAorICAgcGFyYW1ldGVyIGJldHdlZW4gMCBhbmQgMzoKKyAgICAgMCA9IHByZWZlciB1bmNvbXByZXNzZWQgaW1hZ2VzOyBpZiB0aGUgcmVxdWVzdGVkIG1vZGUgaXMgbm90IGF2YWlsYWJsZQorICAgICAgICAgaW4gYW4gdW5jb21wcmVzc2VkIGZvcm1hdCwgdGhlIGRyaXZlciB3aWxsIHNpbGVudGx5IHN3aXRjaCB0byBsb3cKKyAgICAgICAgIGNvbXByZXNzaW9uLgorICAgICAxID0gbG93IGNvbXByZXNzaW9uLgorICAgICAyID0gbWVkaXVtIGNvbXByZXNzaW9uLgorICAgICAzID0gaGlnaCBjb21wcmVzc2lvbi4KKyAgICAgIAorICAgSGlnaCBjb21wcmVzc2lvbiB0YWtlcyBsZXNzIGJhbmR3aWR0aCBvZiBjb3Vyc2UsIGJ1dCBpdCBjb3VsZCBhbHNvCisgICBpbnRyb2R1Y2Ugc29tZSB1bndhbnRlZCBhcnRlZmFjdHMuIFRoZSBkZWZhdWx0IGlzIDIsIG1lZGl1bSBjb21wcmVzc2lvbi4KKyAgIFNlZSB0aGUgRkFRIG9uIHRoZSB3ZWJzaXRlIGZvciBhbiBvdmVydmlldyBvZiB3aGljaCBtb2RlcyByZXF1aXJlCisgICBjb21wcmVzc2lvbi4KKworICAgVGhlIGNvbXByZXNzaW9uIHBhcmFtZXRlciBkb2VzIG5vdCBhcHBseSB0byB0aGUgNjQ1IGFuZCA2NDYgY2FtZXJhcworICAgYW5kIE9FTSBtb2RlbHMgZGVyaXZlZCBmcm9tIHRob3NlIChvbmx5IGEgZmV3KS4gTW9zdCBjYW1zIGhvbm91ciB0aGlzCisgICBwYXJhbWV0ZXIuCisKK2xlZHMKKyAgIFRoaXMgc2V0dGluZ3MgdGFrZXMgMiBpbnRlZ2VycywgdGhhdCBkZWZpbmUgdGhlIG9uL29mZiB0aW1lIGZvciB0aGUgTEVECisgICAoaW4gbWlsbGlzZWNvbmRzKS4gT25lIG9mIHRoZSBpbnRlcmVzdGluZyB0aGluZ3MgdGhhdCB5b3UgY2FuIGRvIHdpdGgKKyAgIHRoaXMgaXMgbGV0IHRoZSBMRUQgYmxpbmsgd2hpbGUgdGhlIGNhbWVyYSBpcyBpbiB1c2UuIFRoaXM6CisKKyAgICAgbGVkcz01MDAsNTAwCisgICAgICAKKyAgIHdpbGwgYmxpbmsgdGhlIExFRCBvbmNlIGV2ZXJ5IHNlY29uZC4gQnV0IHdpdGg6CisKKyAgICAgbGVkcz0wLDAKKworICAgdGhlIExFRCBuZXZlciBnb2VzIG9uLCBtYWtpbmcgaXQgc3VpdGFibGUgZm9yIHNpbGVudCBzdXJ2ZWlsbGFuY2UuCisKKyAgIEJ5IGRlZmF1bHQgdGhlIGNhbWVyYSdzIExFRCBpcyBvbiBzb2xpZCB3aGlsZSBpbiB1c2UsIGFuZCB0dXJuZWQgb2ZmCisgICB3aGVuIHRoZSBjYW1lcmEgaXMgbm90IHVzZWQgYW55bW9yZS4KKworICAgVGhpcyBwYXJhbWV0ZXIgd29ya3Mgb25seSB3aXRoIHRoZSBUb1VDYW0gcmFuZ2Ugb2YgY2FtZXJhcyAoNzIwLCA3MzAsIDc0MCwKKyAgIDc1MCkgYW5kIE9FTXMuIEZvciBvdGhlciBjYW1lcmFzIHRoaXMgY29tbWFuZCBpcyBzaWxlbnRseSBpZ25vcmVkLCBhbmQgCisgICB0aGUgTEVEIGNhbm5vdCBiZSBjb250cm9sbGVkLgorCisgICBGaW5hbGx5OiB0aGlzIHBhcmFtZXRlcnMgZG9lcyBub3QgdGFrZSBlZmZlY3QgVU5USUwgdGhlIGZpcnN0IHRpbWUgeW91CisgICBvcGVuIHRoZSBjYW1lcmEgZGV2aWNlLiBVbnRpbCB0aGVuLCB0aGUgTEVEIHJlbWFpbnMgb24uCisKK2Rldl9oaW50CisgICBBIGxvbmcgc3RhbmRpbmcgcHJvYmxlbSB3aXRoIFVTQiBkZXZpY2VzIGlzIHRoZWlyIGR5bmFtaWMgbmF0dXJlOiB5b3UKKyAgIG5ldmVyIGtub3cgd2hhdCBkZXZpY2UgYSBjYW1lcmEgZ2V0cyBhc3NpZ25lZDsgaXQgZGVwZW5kcyBvbiBtb2R1bGUgbG9hZAorICAgb3JkZXIsIHRoZSBodWIgY29uZmlndXJhdGlvbiwgdGhlIG9yZGVyIGluIHdoaWNoIGRldmljZXMgYXJlIHBsdWdnZWQgaW4sCisgICBhbmQgdGhlIHBoYXNlIG9mIHRoZSBtb29uIChpLmUuIGl0IGNhbiBiZSByYW5kb20pLiBXaXRoIHRoaXMgb3B0aW9uIHlvdQorICAgY2FuIGdpdmUgdGhlIGRyaXZlciBhIGhpbnQgYXMgdG8gd2hhdCB2aWRlbyBkZXZpY2Ugbm9kZSAoL2Rldi92aWRlb1gpIGl0CisgICBzaG91bGQgdXNlIHdpdGggYSBzcGVjaWZpYyBjYW1lcmEuIFRoaXMgaXMgYWxzbyBoYW5keSBpZiB5b3UgaGF2ZSB0d28KKyAgIGNhbWVyYXMgb2YgdGhlIHNhbWUgbW9kZWwuCisKKyAgIEEgY2FtZXJhIGlzIHNwZWNpZmllZCBieSBpdHMgdHlwZSAodGhlIG51bWJlciBmcm9tIHRoZSBjYW1lcmEgbW9kZWwsCisgICBsaWtlIFBDQTY0NSwgUENWQzc1MFZDLCBldGMpIGFuZCBvcHRpb25hbGx5IHRoZSBzZXJpYWwgbnVtYmVyICh2aXNpYmxlCisgICBpbiAvcHJvYy9idXMvdXNiL2RldmljZXMpLiBBIGhpbnQgY29uc2lzdHMgb2YgYSBzdHJpbmcgd2l0aCB0aGUgZm9sbG93aW5nCisgICBmb3JtYXQ6CisKKyAgICAgIFt0eXBlWy5zZXJpYWxudW1iZXJdOl1ub2RlCisgICAgICAKKyAgIFRoZSBzcXVhcmUgYnJhY2tldHMgbWVhbiB0aGF0IGJvdGggdGhlIHR5cGUgYW5kIHRoZSBzZXJpYWxudW1iZXIgYXJlCisgICBvcHRpb25hbCwgYnV0IGEgc2VyaWFsbnVtYmVyIGNhbm5vdCBiZSBzcGVjaWZpZWQgd2l0aG91dCBhIHR5cGUgKHdoaWNoCisgICB3b3VsZCBiZSByYXRoZXIgcG9pbnRsZXNzKS4gVGhlIHNlcmlhbG51bWJlciBpcyBzZXBhcmF0ZWQgZnJvbSB0aGUgdHlwZQorICAgYnkgYSAnLic7IHRoZSBub2RlIG51bWJlciBieSBhICc6Jy4KKyAgIAorICAgVGhpcyBzb21ld2hhdCBjcnlwdGljIHN5bnRheCBpcyBiZXN0IGV4cGxhaW5lZCBieSBhIGZldyBleGFtcGxlczoKKworICAgICBkZXZfaGludD0zLDUgICAgICAgICAgICAgIFRoZSBmaXJzdCBkZXRlY3RlZCBjYW0gZ2V0cyBhc3NpZ25lZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9kZXYvdmlkZW8zLCB0aGUgc2Vjb25kIC9kZXYvdmlkZW81LiBBbnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlciBjYW1lcmFzIHdpbGwgZ2V0IHRoZSBmaXJzdCBmcmVlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBzbG90IChzZWUgYmVsb3cpLgorCisgICAgIGRldl9oaW50PTY0NToxLDY4MDoyICAgICAgVGhlIFBDQTY0NSBjYW1lcmEgd2lsbCBnZXQgL2Rldi92aWRlbzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGEgUENWQzY4MCAvZGV2L3ZpZGVvMi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgZGV2X2hpbnQ9NjQ1LjAxMjM6Myw2NDUuNDU2NzowCVRoZSBQQ0E2NDUgY2FtZXJhIHdpdGggc2VyaWFsbnVtYmVyIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAxMjMgZ29lcyB0byAvZGV2L3ZpZGVvMywgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmEgbW9kZWwgd2l0aCB0aGUgNDU2NyBzZXJpYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRzIC9kZXYvdmlkZW8wLgorCisgICAgIGRldl9oaW50PTc1MDoxLDQsNSw2ICAgICAgIFRoZSBQQ1ZDNzUwIGNhbWVyYSB3aWxsIGdldCAvZGV2L3ZpZGVvMSwgdGhlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IDMgUGhpbGlwcyBjYW1zIHdpbGwgdXNlIC9kZXYvdmlkZW80IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIC9kZXYvdmlkZW82LgorCisgICBTb21lIHBvaW50cyB3b3J0aCBrbm93aW5nOgorICAgLSBTZXJpYWxudW1iZXJzIGFyZSBjYXNlIHNlbnNpdGl2ZSBhbmQgbXVzdCBiZSB3cml0dGVuIGZ1bGwsIGluY2x1ZGluZyAKKyAgICAgbGVhZGluZyB6ZXJvZXMgKGl0J3MgdHJlYXRlZCBhcyBhIHN0cmluZykuCisgICAtIElmIGEgZGV2aWNlIG5vZGUgaXMgYWxyZWFkeSBvY2N1cGllZCwgcmVnaXN0cmF0aW9uIHdpbGwgZmFpbCBhbmQgCisgICAgIHRoZSB3ZWJjYW0gaXMgbm90IGF2YWlsYWJsZS4KKyAgIC0gWW91IGNhbiBoYXZlIHVwIHRvIDY0IHZpZGVvIGRldmljZXM7IGJlIHN1cmUgdG8gbWFrZSBlbm91Z2ggZGV2aWNlCisgICAgIG5vZGVzIGluIC9kZXYgaWYgeW91IHdhbnQgdG8gc3ByZWFkIHRoZSBudW1iZXJzICh0aGlzIGRvZXMgbm90IGFwcGx5CisgICAgIHRvIGRldmZzKS4gQWZ0ZXIgL2Rldi92aWRlbzkgY29tZXMgL2Rldi92aWRlbzEwIChub3QgL2Rldi92aWRlb0EpLgorICAgLSBJZiBhIGNhbWVyYSBkb2VzIG5vdCBtYXRjaCBhbnkgZGV2X2hpbnQsIGl0IHdpbGwgc2ltcGx5IGdldCBhc3NpZ25lZAorICAgICB0aGUgZmlyc3QgYXZhaWxhYmxlIGRldmljZSBub2RlLCBqdXN0IGFzIGl0IHVzZWQgdG8gYmUuCisKK3RyYWNlCisgICBJbiBvcmRlciB0byBiZXR0ZXIgZGV0ZWN0IHByb2JsZW1zLCBpdCBpcyBub3cgcG9zc2libGUgdG8gdHVybiBvbiBhCisgICAndHJhY2UnIG9mIHNvbWUgb2YgdGhlIGNhbGxzIHRoZSBtb2R1bGUgbWFrZXM7IGl0IGxvZ3MgYWxsIGl0ZW1zIGluIHlvdXIKKyAgIGtlcm5lbCBsb2cgYXQgZGVidWcgbGV2ZWwuCisKKyAgIFRoZSB0cmFjZSB2YXJpYWJsZSBpcyBhIGJpdG1hc2s7IGVhY2ggYml0IHJlcHJlc2VudHMgYSBjZXJ0YWluIGZlYXR1cmUuCisgICBJZiB5b3Ugd2FudCB0byB0cmFjZSBzb21ldGhpbmcsIGxvb2sgdXAgdGhlIGJpdCB2YWx1ZShzKSBpbiB0aGUgdGFibGUgCisgICBiZWxvdywgYWRkIHRoZSB2YWx1ZXMgdG9nZXRoZXIgYW5kIHN1cHBseSB0aGF0IHRvIHRoZSB0cmFjZSB2YXJpYWJsZS4KKworICAgVmFsdWUgIFZhbHVlICAgRGVzY3JpcHRpb24JCQkJCSAgIERlZmF1bHQKKyAgIChkZWMpICAoaGV4KQorICAgICAgIDEgICAgMHgxICAgTW9kdWxlIGluaXRpYWxpemF0aW9uOyB0aGlzIHdpbGwgbG9nIG1lc3NhZ2VzICAgICAgIE9uCisgICAgICAgICAgICAgICAgICB3aGlsZSBsb2FkaW5nIGFuZCB1bmxvYWRpbmcgdGhlIG1vZHVsZQorCisgICAgICAgMiAgICAweDIgICBwcm9iZSgpIGFuZCBkaXNjb25uZWN0KCkgdHJhY2VzICAgICAgICAgICAgICAgICAgICAgT24KKworICAgICAgIDQgICAgMHg0ICAgVHJhY2Ugb3BlbigpIGFuZCBjbG9zZSgpIGNhbGxzICAgICAgICAgICAgICAgICAgICAgIE9mZgorCisgICAgICAgOCAgICAweDggICByZWFkKCksIG1tYXAoKSBhbmQgYXNzb2NpYXRlZCBpb2N0bCgpIGNhbGxzICAgICAgICAgT2ZmCisKKyAgICAgIDE2ICAgMHgxMCAgIE1lbW9yeSBhbGxvY2F0aW9uIG9mIGJ1ZmZlcnMsIGV0Yy4gICAgICAgICAgICAgICAgICBPZmYKKworICAgICAgMzIgICAweDIwICAgU2hvd2luZyB1bmRlcmZsb3csIG92ZXJmbG93IGFuZCBEdW1waW5nIGZyYW1lICAgICAgIE9uCisgICAgICAgICAgICAgICAgICBtZXNzYWdlcworCisgICAgICA2NCAgIDB4NDAgICBTaG93IHZpZXdwb3J0IGFuZCBpbWFnZSBzaXplcyAgICAgICAgICAgICAgICAgICAgICAgT2ZmCisKKyAgICAgMTI4ICAgMHg4MCAgIFBXQ1ggZGVidWdnaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmYKKworICAgRm9yIGV4YW1wbGUsIHRvIHRyYWNlIHRoZSBvcGVuKCkgJiByZWFkKCkgZnVjdGlvbnMsIHN1bSA4ICsgNCA9IDEyLAorICAgc28geW91IHdvdWxkIHN1cHBseSB0cmFjZT0xMiBkdXJpbmcgaW5zbW9kIG9yIG1vZHByb2JlLiBJZgorICAgeW91IHdhbnQgdG8gdHVybiB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHByb2JpbmcgdHJhY2luZyBvZmYsIHNldCB0cmFjZT0wLgorICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRyYWNlIGlzIDM1ICgweDIzKS4KKworCisKK0V4YW1wbGU6CisgICAgIAorICAgICAjIG1vZHByb2JlIHB3YyBzaXplPWNpZiBmcHM9MTUgcG93ZXJfc2F2ZT0xCisKK1RoZSBmYnVmcywgbWJ1ZnMgYW5kIHRyYWNlIHBhcmFtZXRlcnMgYXJlIGdsb2JhbCBhbmQgYXBwbHkgdG8gYWxsIGNvbm5lY3RlZAorY2FtZXJhcy4gRWFjaCBjYW1lcmEgaGFzIGl0cyBvd24gc2V0IG9mIGJ1ZmZlcnMuCisKK3NpemUgYW5kIGZwcyBvbmx5IHNwZWNpZnkgZGVmYXVsdHMgd2hlbiB5b3Ugb3BlbigpIHRoZSBkZXZpY2U7IHRoaXMgaXMgdG8KK2FjY29tbW9kYXRlIHNvbWUgdG9vbHMgdGhhdCBkb24ndCBzZXQgdGhlIHNpemUuIFlvdSBjYW4gY2hhbmdlIHRoZXNlCitzZXR0aW5ncyBhZnRlciBvcGVuKCkgd2l0aCB0aGUgVmlkZW80TGludXggaW9jdGwoKSBjYWxscy4gVGhlIGRlZmF1bHQgb2YKK2RlZmF1bHRzIGlzIFFDSUYgc2l6ZSBhdCAxMCBmcHMuCisKK1RoZSBjb21wcmVzc2lvbiBwYXJhbWV0ZXIgaXMgc2VtaWdsb2JhbDsgaXQgc2V0cyB0aGUgaW5pdGlhbCBjb21wcmVzc2lvbgorcHJlZmVyZW5jZSBmb3IgYWxsIGNhbWVyYSdzLCBidXQgdGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHNldCBwZXIgY2FtZXJhIHdpdGgKK3RoZSBWSURJT0NQV0NTQ1FVQUwgaW9jdGwoKSBjYWxsLgorCitBbGwgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwuCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtY3RybC5jIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1jdHJsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZhYTkxNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtY3RybC5jCkBAIC0wLDAgKzEsMTYzMCBAQAorLyogRHJpdmVyIGZvciBQaGlsaXBzIHdlYmNhbQorICAgRnVuY3Rpb25zIHRoYXQgc2VuZCB2YXJpb3VzIGNvbnRyb2wgbWVzc2FnZXMgdG8gdGhlIHdlYmNhbSwgaW5jbHVkaW5nCisgICB2aWRlbyBtb2Rlcy4KKyAgIChDKSAxOTk5LTIwMDMgTmVtb3NvZnQgVW52LgorICAgKEMpIDIwMDQgICAgICBMdWMgU2FpbGxhcmQgKGx1Y0BzYWlsbGFyZC5vcmcpCisKKyAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAorICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCisgICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyBhbmQgc3VwcG9ydCByZXF1ZXN0cyB0byA8bHVjQHNhaWxsYXJkLm9yZz4uCisKKyAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAorICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCisgICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyBhbmQgc3VwcG9ydCByZXF1ZXN0cyB0byA8bHVjQHNhaWxsYXJkLm9yZz4uCisgICBUaGUgZGVjb21wcmVzc2lvbiByb3V0aW5lcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYnkgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUKKyAgIE5lbW9zb2Z0IGJpbmFyeSBwd2N4IG1vZHVsZS4gQ2F2ZWF0IGVtcHRvci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisvKgorICAgQ2hhbmdlcworICAgMjAwMS8wOC8wMyAgQWx2YXJhZG8gICBBZGRlZCBtZXRob2RzIGZvciBjaGFuZ2luZyB3aGl0ZSBiYWxhbmNlIGFuZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkL2dyZWVuIGdhaW5zCisgKi8KKworLyogQ29udHJvbCBmdW5jdGlvbnMgZm9yIHRoZSBjYW07IGJyaWdodG5lc3MsIGNvbnRyYXN0LCB2aWRlbyBtb2RlLCBldGMuICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4gCisjZW5kaWYKKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisgCisjaW5jbHVkZSAicHdjLmgiCisjaW5jbHVkZSAicHdjLWlvY3RsLmgiCisjaW5jbHVkZSAicHdjLXVuY29tcHJlc3MuaCIKKyNpbmNsdWRlICJwd2Mta2lhcmEuaCIKKyNpbmNsdWRlICJwd2MtdGltb24uaCIKKyNpbmNsdWRlICJwd2MtZGVjMS5oIgorI2luY2x1ZGUgInB3Yy1kZWMyMy5oIgorCisvKiBSZXF1ZXN0IHR5cGVzOiB2aWRlbyAqLworI2RlZmluZSBTRVRfTFVNX0NUTAkJCTB4MDEKKyNkZWZpbmUgR0VUX0xVTV9DVEwJCQkweDAyCisjZGVmaW5lIFNFVF9DSFJPTV9DVEwJCQkweDAzCisjZGVmaW5lIEdFVF9DSFJPTV9DVEwJCQkweDA0CisjZGVmaW5lIFNFVF9TVEFUVVNfQ1RMCQkJMHgwNQorI2RlZmluZSBHRVRfU1RBVFVTX0NUTAkJCTB4MDYKKyNkZWZpbmUgU0VUX0VQX1NUUkVBTV9DVEwJCTB4MDcKKyNkZWZpbmUgR0VUX0VQX1NUUkVBTV9DVEwJCTB4MDgKKyNkZWZpbmUgU0VUX01QVF9DVEwJCQkweDBECisjZGVmaW5lIEdFVF9NUFRfQ1RMCQkJMHgwRQorCisvKiBTZWxlY3RvcnMgZm9yIHRoZSBMdW1pbmFuY2UgY29udHJvbHMgW0dTXUVUX0xVTV9DVEwgKi8KKyNkZWZpbmUgQUdDX01PREVfRk9STUFUVEVSCQkJMHgyMDAwCisjZGVmaW5lIFBSRVNFVF9BR0NfRk9STUFUVEVSCQkJMHgyMTAwCisjZGVmaW5lIFNIVVRURVJfTU9ERV9GT1JNQVRURVIJCQkweDIyMDAKKyNkZWZpbmUgUFJFU0VUX1NIVVRURVJfRk9STUFUVEVSCQkweDIzMDAKKyNkZWZpbmUgUFJFU0VUX0NPTlRPVVJfRk9STUFUVEVSCQkweDI0MDAKKyNkZWZpbmUgQVVUT19DT05UT1VSX0ZPUk1BVFRFUgkJCTB4MjUwMAorI2RlZmluZSBCQUNLX0xJR0hUX0NPTVBFTlNBVElPTl9GT1JNQVRURVIJMHgyNjAwCisjZGVmaW5lIENPTlRSQVNUX0ZPUk1BVFRFUgkJCTB4MjcwMAorI2RlZmluZSBEWU5BTUlDX05PSVNFX0NPTlRST0xfRk9STUFUVEVSCQkweDI4MDAKKyNkZWZpbmUgRkxJQ0tFUkxFU1NfTU9ERV9GT1JNQVRURVIJCTB4MjkwMAorI2RlZmluZSBBRV9DT05UUk9MX1NQRUVECQkJMHgyQTAwCisjZGVmaW5lIEJSSUdIVE5FU1NfRk9STUFUVEVSCQkJMHgyQjAwCisjZGVmaW5lIEdBTU1BX0ZPUk1BVFRFUgkJCQkweDJDMDAKKworLyogU2VsZWN0b3JzIGZvciB0aGUgQ2hyb21pbmFuY2UgY29udHJvbHMgW0dTXUVUX0NIUk9NX0NUTCAqLworI2RlZmluZSBXQl9NT0RFX0ZPUk1BVFRFUgkJCTB4MTAwMAorI2RlZmluZSBBV0JfQ09OVFJPTF9TUEVFRF9GT1JNQVRURVIJCTB4MTEwMAorI2RlZmluZSBBV0JfQ09OVFJPTF9ERUxBWV9GT1JNQVRURVIJCTB4MTIwMAorI2RlZmluZSBQUkVTRVRfTUFOVUFMX1JFRF9HQUlOX0ZPUk1BVFRFUgkweDEzMDAKKyNkZWZpbmUgUFJFU0VUX01BTlVBTF9CTFVFX0dBSU5fRk9STUFUVEVSCTB4MTQwMAorI2RlZmluZSBDT0xPVVJfTU9ERV9GT1JNQVRURVIJCQkweDE1MDAKKyNkZWZpbmUgU0FUVVJBVElPTl9NT0RFX0ZPUk1BVFRFUjEJCTB4MTYwMAorI2RlZmluZSBTQVRVUkFUSU9OX01PREVfRk9STUFUVEVSMgkJMHgxNzAwCisKKy8qIFNlbGVjdG9ycyBmb3IgdGhlIFN0YXR1cyBjb250cm9scyBbR1NdRVRfU1RBVFVTX0NUTCAqLworI2RlZmluZSBTQVZFX1VTRVJfREVGQVVMVFNfRk9STUFUVEVSCQkweDAyMDAKKyNkZWZpbmUgUkVTVE9SRV9VU0VSX0RFRkFVTFRTX0ZPUk1BVFRFUgkJMHgwMzAwCisjZGVmaW5lIFJFU1RPUkVfRkFDVE9SWV9ERUZBVUxUU19GT1JNQVRURVIJMHgwNDAwCisjZGVmaW5lIFJFQURfQUdDX0ZPUk1BVFRFUgkJCTB4MDUwMAorI2RlZmluZSBSRUFEX1NIVVRURVJfRk9STUFUVEVSCQkJMHgwNjAwCisjZGVmaW5lIFJFQURfUkVEX0dBSU5fRk9STUFUVEVSCQkJMHgwNzAwCisjZGVmaW5lIFJFQURfQkxVRV9HQUlOX0ZPUk1BVFRFUgkJMHgwODAwCisjZGVmaW5lIFNFTlNPUl9UWVBFX0ZPUk1BVFRFUjEJCQkweDBDMDAKKyNkZWZpbmUgUkVBRF9SQVdfWV9NRUFOX0ZPUk1BVFRFUgkJMHgzMTAwCisjZGVmaW5lIFNFVF9QT1dFUl9TQVZFX01PREVfRk9STUFUVEVSCQkweDMyMDAKKyNkZWZpbmUgTUlSUk9SX0lNQUdFX0ZPUk1BVFRFUgkJCTB4MzMwMAorI2RlZmluZSBMRURfRk9STUFUVEVSCQkJCTB4MzQwMAorI2RlZmluZSBTRU5TT1JfVFlQRV9GT1JNQVRURVIyCQkJMHgzNzAwCisKKy8qIEZvcm1hdHRlcnMgZm9yIHRoZSBWaWRlbyBFbmRwb2ludCBjb250cm9scyBbR1NdRVRfRVBfU1RSRUFNX0NUTCAqLworI2RlZmluZSBWSURFT19PVVRQVVRfQ09OVFJPTF9GT1JNQVRURVIJCTB4MDEwMAorCisvKiBGb3JtYXR0ZXJzIGZvciB0aGUgbW90b3JpemVkIHBhbiAmIHRpbHQgW0dTXUVUX01QVF9DVEwgKi8KKyNkZWZpbmUgUFRfUkVMQVRJVkVfQ09OVFJPTF9GT1JNQVRURVIJCTB4MDEKKyNkZWZpbmUgUFRfUkVTRVRfQ09OVFJPTF9GT1JNQVRURVIJCTB4MDIKKyNkZWZpbmUgUFRfU1RBVFVTX0ZPUk1BVFRFUgkJCTB4MDMKKworc3RhdGljIGNoYXIgKnNpemUybmFtZVtQU1pfTUFYXSA9Cit7CisJInN1YlFDSUYiLAorCSJRU0lGIiwKKwkiUUNJRiIsCisJIlNJRiIsCisJIkNJRiIsCisJIlZHQSIsCit9OyAgCisKKy8qKioqKioqKi8KKworLyogRW50cmllcyBmb3IgdGhlIE5hbGEgKDY0NS82NDYpIGNhbWVyYTsgdGhlIE5hbGEgZG9lc24ndCBoYXZlIGNvbXByZXNzaW9uIAorICAgcHJlZmVyZW5jZXMsIHNvIHlvdSBlaXRoZXIgZ2V0IGNvbXByZXNzZWQgb3Igbm9uLWNvbXByZXNzZWQgc3RyZWFtcy4KKyAgIAorICAgQW4gYWx0ZXJuYXRlIHZhbHVlIG9mIDAgbWVhbnMgdGhpcyBtb2RlIGlzIG5vdCBhdmFpbGFibGUgYXQgYWxsLgorICovCisKK3N0cnVjdCBOYWxhX3RhYmxlX2VudHJ5IHsKKwljaGFyIGFsdGVybmF0ZTsJCQkvKiBVU0IgYWx0ZXJuYXRlIHNldHRpbmcgKi8KKwlpbnQgY29tcHJlc3NlZDsJCQkvKiBDb21wcmVzc2VkIHllcy9ubyAqLworCisJdW5zaWduZWQgY2hhciBtb2RlWzNdOwkJLyogcHJlY29tcHV0ZWQgbW9kZSB0YWJsZSAqLworfTsKKworc3RhdGljIHN0cnVjdCBOYWxhX3RhYmxlX2VudHJ5IE5hbGFfdGFibGVbUFNaX01BWF1bOF0gPQoreworI2luY2x1ZGUgInB3Yy1uYWxhLmgiCit9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNkZWZpbmUgU2VuZENvbnRyb2xNc2cocmVxdWVzdCwgdmFsdWUsIGJ1ZmxlbikgXAorCXVzYl9jb250cm9sX21zZyhwZGV2LT51ZGV2LCB1c2Jfc25kY3RybHBpcGUocGRldi0+dWRldiwgMCksIFwKKwkJcmVxdWVzdCwgXAorCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsIFwKKwkJdmFsdWUsIFwKKwkJcGRldi0+dmNpbnRlcmZhY2UsIFwKKwkJJmJ1ZiwgYnVmbGVuLCA1MDApCisKKyNkZWZpbmUgUmVjdkNvbnRyb2xNc2cocmVxdWVzdCwgdmFsdWUsIGJ1ZmxlbikgXAorCXVzYl9jb250cm9sX21zZyhwZGV2LT51ZGV2LCB1c2JfcmN2Y3RybHBpcGUocGRldi0+dWRldiwgMCksIFwKKwkJcmVxdWVzdCwgXAorCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwgXAorCQl2YWx1ZSwgXAorCQlwZGV2LT52Y2ludGVyZmFjZSwgXAorCQkmYnVmLCBidWZsZW4sIDUwMCkKKworCisjaWYgUFdDX0RFQlVHCit2b2lkIHB3Y19oZXhkdW1wKHZvaWQgKnAsIGludCBsZW4pCit7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciAqczsKKwljaGFyIGJ1ZlsxMDBdLCAqZDsKKworCXMgPSAodW5zaWduZWQgY2hhciAqKXA7CisJZCA9IGJ1ZjsKKwkqZCA9ICdcMCc7CisJRGVidWcoIkRvaW5nIGhleGR1bXAgQCAlcCwgJWQgYnl0ZXMuXG4iLCBwLCBsZW4pOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlkICs9IHNwcmludGYoZCwgIiUwMlggIiwgKnMrKyk7CisJCWlmICgoaSAmIDB4RikgPT0gMHhGKSB7CisJCQlEZWJ1ZygiJXNcbiIsIGJ1Zik7CisJCQlkID0gYnVmOworCQkJKmQgPSAnXDAnOworCQl9CisJfQorCWlmICgoaSAmIDB4RikgIT0gMCkKKwkJRGVidWcoIiVzXG4iLCBidWYpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IHNlbmRfdmlkZW9fY29tbWFuZChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50IGluZGV4LCB2b2lkICpidWYsIGludCBidWZsZW4pCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyh1ZGV2LAorCQl1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJCVNFVF9FUF9TVFJFQU1fQ1RMLAorCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCVZJREVPX09VVFBVVF9DT05UUk9MX0ZPUk1BVFRFUiwKKwkJaW5kZXgsCisJCWJ1ZiwgYnVmbGVuLCAxMDAwKTsKK30KKworCisKK3N0YXRpYyBpbmxpbmUgaW50IHNldF92aWRlb19tb2RlX05hbGEoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBzaXplLCBpbnQgZnJhbWVzKQoreworCXVuc2lnbmVkIGNoYXIgYnVmWzNdOworCWludCByZXQsIGZwczsKKwlzdHJ1Y3QgTmFsYV90YWJsZV9lbnRyeSAqcEVudHJ5OworCWludCBmcmFtZXMyZnJhbWVzWzMxXSA9CisJeyAvKiBjbG9zZXN0IG1hdGNoIG9mIGZyYW1lcmF0ZSAqLworCSAgIDAsICAwLCAgMCwgIDAsICA0LCAgLyogIDAtNCAgKi8KKwkgICA1LCAgNSwgIDcsICA3LCAxMCwgIC8qICA1LTkgICovCisgICAgICAgICAgMTAsIDEwLCAxMiwgMTIsIDE1LCAgLyogMTAtMTQgKi8KKyAgICAgICAgICAxNSwgMTUsIDE1LCAyMCwgMjAsICAvKiAxNS0xOSAqLworICAgICAgICAgIDIwLCAyMCwgMjAsIDI0LCAyNCwgIC8qIDIwLTI0ICovCisgICAgICAgICAgMjQsIDI0LCAyNCwgMjQsIDI0LCAgLyogMjUtMjkgKi8KKyAgICAgICAgICAyNCAgICAgICAgICAgICAgICAgICAvKiAzMCAgICAqLworCX07CisJaW50IGZyYW1lczJ0YWJsZVszMV0gPSAKKwl7IDAsIDAsIDAsIDAsIDAsIC8qICAwLTQgICovCisJICAxLCAxLCAxLCAyLCAyLCAvKiAgNS05ICAqLworCSAgMywgMywgNCwgNCwgNCwgLyogMTAtMTQgKi8KKwkgIDUsIDUsIDUsIDUsIDUsIC8qIDE1LTE5ICovCisJICA2LCA2LCA2LCA2LCA3LCAvKiAyMC0yNCAqLworCSAgNywgNywgNywgNywgNywgLyogMjUtMjkgKi8KKwkgIDcgICAgICAgICAgICAgIC8qIDMwICAgICovCisJfTsKKwkKKwlpZiAoc2l6ZSA8IDAgfHwgc2l6ZSA+IFBTWl9DSUYgfHwgZnJhbWVzIDwgNCB8fCBmcmFtZXMgPiAyNSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZnJhbWVzID0gZnJhbWVzMmZyYW1lc1tmcmFtZXNdOworCWZwcyA9IGZyYW1lczJ0YWJsZVtmcmFtZXNdOworCXBFbnRyeSA9ICZOYWxhX3RhYmxlW3NpemVdW2Zwc107CisJaWYgKHBFbnRyeS0+YWx0ZXJuYXRlID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHBFbnRyeS0+Y29tcHJlc3NlZCkKKwkJcmV0dXJuIC1FTk9FTlQ7IC8qIE5vdCBzdXBwb3J0ZWQuICovCisKKwltZW1jcHkoYnVmLCBwRW50cnktPm1vZGUsIDMpOwkKKwlyZXQgPSBzZW5kX3ZpZGVvX2NvbW1hbmQocGRldi0+dWRldiwgcGRldi0+dmVuZHBvaW50LCBidWYsIDMpOworCWlmIChyZXQgPCAwKSB7CisJCURlYnVnKCJGYWlsZWQgdG8gc2VuZCB2aWRlbyBjb21tYW5kLi4uICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlpZiAocEVudHJ5LT5jb21wcmVzc2VkICYmIHBkZXYtPnZwYWxldHRlICE9IFZJREVPX1BBTEVUVEVfUkFXKQorCSB7CisJICAgc3dpdGNoKHBkZXYtPnR5cGUpIHsKKwkgICAgIGNhc2UgNjQ1OgorCSAgICAgY2FzZSA2NDY6CisJICAgICAgIHB3Y19kZWMxX2luaXQocGRldi0+dHlwZSwgcGRldi0+cmVsZWFzZSwgYnVmLCBwZGV2LT5kZWNvbXByZXNzX2RhdGEpOworCSAgICAgICBicmVhazsKKworCSAgICAgY2FzZSA2NzU6CisJICAgICBjYXNlIDY4MDoKKwkgICAgIGNhc2UgNjkwOgorCSAgICAgY2FzZSA3MjA6CisJICAgICBjYXNlIDczMDoKKwkgICAgIGNhc2UgNzQwOgorCSAgICAgY2FzZSA3NTA6CisJICAgICAgIHB3Y19kZWMyM19pbml0KHBkZXYtPnR5cGUsIHBkZXYtPnJlbGVhc2UsIGJ1ZiwgcGRldi0+ZGVjb21wcmVzc19kYXRhKTsKKwkgICAgICAgYnJlYWs7CisJICAgfQorCX0KKyAKKwlwZGV2LT5jbWRfbGVuID0gMzsKKwltZW1jcHkocGRldi0+Y21kX2J1ZiwgYnVmLCAzKTsKKworCS8qIFNldCB2YXJpb3VzIHBhcmFtZXRlcnMgKi8KKwlwZGV2LT52ZnJhbWVzID0gZnJhbWVzOworCXBkZXYtPnZzaXplID0gc2l6ZTsKKwlwZGV2LT52YWx0ZXJuYXRlID0gcEVudHJ5LT5hbHRlcm5hdGU7CisJcGRldi0+aW1hZ2UgPSBwd2NfaW1hZ2Vfc2l6ZXNbc2l6ZV07CisJcGRldi0+ZnJhbWVfc2l6ZSA9IChwZGV2LT5pbWFnZS54ICogcGRldi0+aW1hZ2UueSAqIDMpIC8gMjsKKwlpZiAocEVudHJ5LT5jb21wcmVzc2VkKSB7CisJCWlmIChwZGV2LT5yZWxlYXNlIDwgNSkgeyAvKiA0IGZvbGQgY29tcHJlc3Npb24gKi8KKwkJCXBkZXYtPnZiYW5kbGVuZ3RoID0gNTI4OworCQkJcGRldi0+ZnJhbWVfc2l6ZSAvPSA0OworCQl9CisJCWVsc2UgeworCQkJcGRldi0+dmJhbmRsZW5ndGggPSA3MDQ7CisJCQlwZGV2LT5mcmFtZV9zaXplIC89IDM7CisJCX0KKwl9CisJZWxzZQorCQlwZGV2LT52YmFuZGxlbmd0aCA9IDA7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQgc2V0X3ZpZGVvX21vZGVfVGltb24oc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBzaXplLCBpbnQgZnJhbWVzLCBpbnQgY29tcHJlc3Npb24sIGludCBzbmFwc2hvdCkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZlsxM107CisJY29uc3Qgc3RydWN0IFRpbW9uX3RhYmxlX2VudHJ5ICpwQ2hvb3NlOworCWludCByZXQsIGZwczsKKworCWlmIChzaXplID49IFBTWl9NQVggfHwgZnJhbWVzIDwgNSB8fCBmcmFtZXMgPiAzMCB8fCBjb21wcmVzc2lvbiA8IDAgfHwgY29tcHJlc3Npb24gPiAzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoc2l6ZSA9PSBQU1pfVkdBICYmIGZyYW1lcyA+IDE1KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlmcHMgPSAoZnJhbWVzIC8gNSkgLSAxOworCisJLyogRmluZCBhIHN1cHBvcnRlZCBmcmFtZXJhdGUgd2l0aCBwcm9ncmVzc2l2ZWx5IGhpZ2hlciBjb21wcmVzc2lvbiByYXRpb3MKKwkgICBpZiB0aGUgcHJlZmVycmVkIHJhdGlvIGlzIG5vdCBhdmFpbGFibGUuCisJKi8KKwlwQ2hvb3NlID0gTlVMTDsKKwl3aGlsZSAoY29tcHJlc3Npb24gPD0gMykgeworCSAgIHBDaG9vc2UgPSAmVGltb25fdGFibGVbc2l6ZV1bZnBzXVtjb21wcmVzc2lvbl07CisJICAgaWYgKHBDaG9vc2UtPmFsdGVybmF0ZSAhPSAwKQorCSAgICAgYnJlYWs7CisJICAgY29tcHJlc3Npb24rKzsKKwl9CisJaWYgKHBDaG9vc2UgPT0gTlVMTCB8fCBwQ2hvb3NlLT5hbHRlcm5hdGUgPT0gMCkKKwkJcmV0dXJuIC1FTk9FTlQ7IC8qIE5vdCBzdXBwb3J0ZWQuICovCisKKwltZW1jcHkoYnVmLCBwQ2hvb3NlLT5tb2RlLCAxMyk7CisJaWYgKHNuYXBzaG90KQorCQlidWZbMF0gfD0gMHg4MDsKKwlyZXQgPSBzZW5kX3ZpZGVvX2NvbW1hbmQocGRldi0+dWRldiwgcGRldi0+dmVuZHBvaW50LCBidWYsIDEzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChwQ2hvb3NlLT5iYW5kbGVuZ3RoID4gMCAmJiBwZGV2LT52cGFsZXR0ZSAhPSBWSURFT19QQUxFVFRFX1JBVykKKwkgICBwd2NfZGVjMjNfaW5pdChwZGV2LT50eXBlLCBwZGV2LT5yZWxlYXNlLCBidWYsIHBkZXYtPmRlY29tcHJlc3NfZGF0YSk7CisKKwlwZGV2LT5jbWRfbGVuID0gMTM7CisJbWVtY3B5KHBkZXYtPmNtZF9idWYsIGJ1ZiwgMTMpOworCisJLyogU2V0IHZhcmlvdXMgcGFyYW1ldGVycyAqLworCXBkZXYtPnZmcmFtZXMgPSBmcmFtZXM7CisJcGRldi0+dnNpemUgPSBzaXplOworCXBkZXYtPnZzbmFwc2hvdCA9IHNuYXBzaG90OworCXBkZXYtPnZhbHRlcm5hdGUgPSBwQ2hvb3NlLT5hbHRlcm5hdGU7CisJcGRldi0+aW1hZ2UgPSBwd2NfaW1hZ2Vfc2l6ZXNbc2l6ZV07CisJcGRldi0+dmJhbmRsZW5ndGggPSBwQ2hvb3NlLT5iYW5kbGVuZ3RoOworCWlmIChwQ2hvb3NlLT5iYW5kbGVuZ3RoID4gMCkKKwkJcGRldi0+ZnJhbWVfc2l6ZSA9IChwQ2hvb3NlLT5iYW5kbGVuZ3RoICogcGRldi0+aW1hZ2UueSkgLyA0OworCWVsc2UKKwkJcGRldi0+ZnJhbWVfc2l6ZSA9IChwZGV2LT5pbWFnZS54ICogcGRldi0+aW1hZ2UueSAqIDEyKSAvIDg7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQgc2V0X3ZpZGVvX21vZGVfS2lhcmEoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBzaXplLCBpbnQgZnJhbWVzLCBpbnQgY29tcHJlc3Npb24sIGludCBzbmFwc2hvdCkKK3sKKwljb25zdCBzdHJ1Y3QgS2lhcmFfdGFibGVfZW50cnkgKnBDaG9vc2UgPSBOVUxMOworCWludCBmcHMsIHJldDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZlsxMl07CisJc3RydWN0IEtpYXJhX3RhYmxlX2VudHJ5IFJhd0VudHJ5ID0gezYsIDc3MywgMTI3MiwgezB4QUQsIDB4RjQsIDB4MTAsIDB4MjcsIDB4QjYsIDB4MjQsIDB4OTYsIDB4MDIsIDB4MzAsIDB4MDUsIDB4MDMsIDB4ODB9fTsKKworCWlmIChzaXplID49IFBTWl9NQVggfHwgZnJhbWVzIDwgNSB8fCBmcmFtZXMgPiAzMCB8fCBjb21wcmVzc2lvbiA8IDAgfHwgY29tcHJlc3Npb24gPiAzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoc2l6ZSA9PSBQU1pfVkdBICYmIGZyYW1lcyA+IDE1KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlmcHMgPSAoZnJhbWVzIC8gNSkgLSAxOworCisJLyogc3BlY2lhbCBjYXNlOiBWR0EgQCA1IGZwcyBhbmQgc25hcHNob3QgaXMgcmF3IGJheWVyIG1vZGUgKi8KKwlpZiAoc2l6ZSA9PSBQU1pfVkdBICYmIGZyYW1lcyA9PSA1ICYmIHNuYXBzaG90KQorCXsKKwkJLyogT25seSBhdmFpbGFibGUgaW4gY2FzZSB0aGUgcmF3IHBhbGV0dGUgaXMgc2VsZWN0ZWQgb3IgCisJCSAgIHdlIGhhdmUgdGhlIGRlY29tcHJlc3NvciBhdmFpbGFibGUuIFRoaXMgbW9kZSBpcyAKKwkJICAgb25seSBhdmFpbGFibGUgaW4gY29tcHJlc3NlZCBmb3JtIAorCQkqLworCQlpZiAocGRldi0+dnBhbGV0dGUgPT0gVklERU9fUEFMRVRURV9SQVcpCisJCXsKKwkgICAgICAgICAgICAgICAgSW5mbygiQ2hvb3NpbmcgVkdBLzUgQkFZRVIgbW9kZSAoJWQpLlxuIiwgcGRldi0+dnBhbGV0dGUpOworCQkJcENob29zZSA9ICZSYXdFbnRyeTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUluZm8oIlZHQS81IEJBWUVSIG1vZGUgX211c3RfIGhhdmUgYSBkZWNvbXByZXNzb3IgYXZhaWxhYmxlLCBvciB1c2UgUkFXIHBhbGV0dGUuXG4iKTsKKwkJfQorCX0KKwllbHNlCisJeworICAgICAgICAJLyogRmluZCBhIHN1cHBvcnRlZCBmcmFtZXJhdGUgd2l0aCBwcm9ncmVzc2l2ZWx5IGhpZ2hlciBjb21wcmVzc2lvbiByYXRpb3MKKwkJICAgaWYgdGhlIHByZWZlcnJlZCByYXRpbyBpcyBub3QgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgICAgIFNraXAgdGhpcyBzdGVwIHdoZW4gdXNpbmcgUkFXIG1vZGVzLgorCQkqLworCQl3aGlsZSAoY29tcHJlc3Npb24gPD0gMykgeworCQkJcENob29zZSA9ICZLaWFyYV90YWJsZVtzaXplXVtmcHNdW2NvbXByZXNzaW9uXTsKKwkJCWlmIChwQ2hvb3NlLT5hbHRlcm5hdGUgIT0gMCkKKwkJCQlicmVhazsKKwkJCWNvbXByZXNzaW9uKys7CisJCX0KKwl9CisJaWYgKHBDaG9vc2UgPT0gTlVMTCB8fCBwQ2hvb3NlLT5hbHRlcm5hdGUgPT0gMCkKKwkJcmV0dXJuIC1FTk9FTlQ7IC8qIE5vdCBzdXBwb3J0ZWQuICovCisKKwlEZWJ1ZygiVXNpbmcgYWx0ZXJuYXRlIHNldHRpbmcgJWQuXG4iLCBwQ2hvb3NlLT5hbHRlcm5hdGUpOworCQorCS8qIHVzYl9jb250cm9sX21zZyB3b24ndCB0YWtlIHN0YXRpY2x5IGFsbG9jYXRlZCBhcnJheXMgYXMgYXJndW1lbnQ/PyAqLworCW1lbWNweShidWYsIHBDaG9vc2UtPm1vZGUsIDEyKTsKKwlpZiAoc25hcHNob3QpCisJCWJ1ZlswXSB8PSAweDgwOworCisJLyogRmlybXdhcmUgYnVnOiB2aWRlbyBlbmRwb2ludCBpcyA1LCBidXQgY29tbWFuZHMgYXJlIHNlbnQgdG8gZW5kcG9pbnQgNCAqLworCXJldCA9IHNlbmRfdmlkZW9fY29tbWFuZChwZGV2LT51ZGV2LCA0IC8qIHBkZXYtPnZlbmRwb2ludCAqLywgYnVmLCAxMik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAocENob29zZS0+YmFuZGxlbmd0aCA+IDAgJiYgcGRldi0+dnBhbGV0dGUgIT0gVklERU9fUEFMRVRURV9SQVcpCisJICBwd2NfZGVjMjNfaW5pdChwZGV2LT50eXBlLCBwZGV2LT5yZWxlYXNlLCBidWYsIHBkZXYtPmRlY29tcHJlc3NfZGF0YSk7CisKKwlwZGV2LT5jbWRfbGVuID0gMTI7CisJbWVtY3B5KHBkZXYtPmNtZF9idWYsIGJ1ZiwgMTIpOworCS8qIEFsbCBzZXQgYW5kIGdvICovCisJcGRldi0+dmZyYW1lcyA9IGZyYW1lczsKKwlwZGV2LT52c2l6ZSA9IHNpemU7CisJcGRldi0+dnNuYXBzaG90ID0gc25hcHNob3Q7CisJcGRldi0+dmFsdGVybmF0ZSA9IHBDaG9vc2UtPmFsdGVybmF0ZTsKKwlwZGV2LT5pbWFnZSA9IHB3Y19pbWFnZV9zaXplc1tzaXplXTsKKwlwZGV2LT52YmFuZGxlbmd0aCA9IHBDaG9vc2UtPmJhbmRsZW5ndGg7CisJaWYgKHBkZXYtPnZiYW5kbGVuZ3RoID4gMCkKKwkJcGRldi0+ZnJhbWVfc2l6ZSA9IChwZGV2LT52YmFuZGxlbmd0aCAqIHBkZXYtPmltYWdlLnkpIC8gNDsKKwllbHNlCisJCXBkZXYtPmZyYW1lX3NpemUgPSAocGRldi0+aW1hZ2UueCAqIHBkZXYtPmltYWdlLnkgKiAxMikgLyA4OworCXJldHVybiAwOworfQorCisKKworLyoqCisgICBAcGRldjogZGV2aWNlIHN0cnVjdHVyZQorICAgQHdpZHRoOiB2aWV3cG9ydCB3aWR0aAorICAgQGhlaWdodDogdmlld3BvcnQgaGVpZ2h0CisgICBAZnJhbWU6IGZyYW1lcmF0ZSwgaW4gZnBzCisgICBAY29tcHJlc3Npb246IHByZWZlcnJlZCBjb21wcmVzc2lvbiByYXRpbworICAgQHNuYXBzaG90OiBzbmFwc2hvdCBtb2RlIG9yIHN0cmVhbWluZworICovCitpbnQgcHdjX3NldF92aWRlb19tb2RlKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmcmFtZXMsIGludCBjb21wcmVzc2lvbiwgaW50IHNuYXBzaG90KQoreworICAgICAgICBpbnQgcmV0LCBzaXplOworCisgICAgICAgIFRyYWNlKFRSQUNFX0ZMT1csICJzZXRfdmlkZW9fbW9kZSglZHglZCBAICVkLCBwYWxldHRlICVkKS5cbiIsIHdpZHRoLCBoZWlnaHQsIGZyYW1lcywgcGRldi0+dnBhbGV0dGUpOworCXNpemUgPSBwd2NfZGVjb2RlX3NpemUocGRldiwgd2lkdGgsIGhlaWdodCk7CisJaWYgKHNpemUgPCAwKSB7CisJCURlYnVnKCJDb3VsZCBub3QgZmluZCBzdWl0YWJsZSBzaXplLlxuIik7CisJCXJldHVybiAtRVJBTkdFOworCX0KKwlEZWJ1ZygiZGVjb2RlX3NpemUgPSAlZC5cbiIsIHNpemUpOworCisgICAgICAgIHJldCA9IC1FSU5WQUw7CisJc3dpdGNoKHBkZXYtPnR5cGUpIHsKKwljYXNlIDY0NToKKwljYXNlIDY0NjoKKwkJcmV0ID0gc2V0X3ZpZGVvX21vZGVfTmFsYShwZGV2LCBzaXplLCBmcmFtZXMpOworCQlicmVhazsKKworCWNhc2UgNjc1OgorCWNhc2UgNjgwOgorCWNhc2UgNjkwOgorCQlyZXQgPSBzZXRfdmlkZW9fbW9kZV9UaW1vbihwZGV2LCBzaXplLCBmcmFtZXMsIGNvbXByZXNzaW9uLCBzbmFwc2hvdCk7CisJCWJyZWFrOworCQorCWNhc2UgNzIwOgorCWNhc2UgNzMwOgorCWNhc2UgNzQwOgorCWNhc2UgNzUwOgorCQlyZXQgPSBzZXRfdmlkZW9fbW9kZV9LaWFyYShwZGV2LCBzaXplLCBmcmFtZXMsIGNvbXByZXNzaW9uLCBzbmFwc2hvdCk7CisJCWJyZWFrOworCX0KKwlpZiAocmV0IDwgMCkgeworCQlpZiAocmV0ID09IC1FTk9FTlQpCisJCQlJbmZvKCJWaWRlbyBtb2RlICVzQCVkIGZwcyBpcyBvbmx5IHN1cHBvcnRlZCB3aXRoIHRoZSBkZWNvbXByZXNzb3IgbW9kdWxlIChwd2N4KS5cbiIsIHNpemUybmFtZVtzaXplXSwgZnJhbWVzKTsKKwkJZWxzZSB7CisJCQlFcnIoIkZhaWxlZCB0byBzZXQgdmlkZW8gbW9kZSAlc0AlZCBmcHM7IHJldHVybiBjb2RlID0gJWRcbiIsIHNpemUybmFtZVtzaXplXSwgZnJhbWVzLCByZXQpOworCQl9CisJCXJldHVybiByZXQ7CisJfQorCXBkZXYtPnZpZXcueCA9IHdpZHRoOworCXBkZXYtPnZpZXcueSA9IGhlaWdodDsKKwlwZGV2LT5mcmFtZV90b3RhbF9zaXplID0gcGRldi0+ZnJhbWVfc2l6ZSArIHBkZXYtPmZyYW1lX2hlYWRlcl9zaXplICsgcGRldi0+ZnJhbWVfdHJhaWxlcl9zaXplOworCXB3Y19zZXRfaW1hZ2VfYnVmZmVyX3NpemUocGRldik7CisJVHJhY2UoVFJBQ0VfU0laRSwgIlNldCB2aWV3cG9ydCB0byAlZHglZCwgaW1hZ2Ugc2l6ZSBpcyAlZHglZC5cbiIsIHdpZHRoLCBoZWlnaHQsIHB3Y19pbWFnZV9zaXplc1tzaXplXS54LCBwd2NfaW1hZ2Vfc2l6ZXNbc2l6ZV0ueSk7CisJcmV0dXJuIDA7Cit9CisKKwordm9pZCBwd2Nfc2V0X2ltYWdlX2J1ZmZlcl9zaXplKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQoreworCWludCBpLCBmYWN0b3IgPSAwLCBmaWxsZXIgPSAwOworCisJLyogZm9yIFBBTEVUVEVfWVVWNDIwUCAqLworCXN3aXRjaChwZGV2LT52cGFsZXR0ZSkKKwl7CisJY2FzZSBWSURFT19QQUxFVFRFX1lVVjQyMFA6CisJCWZhY3RvciA9IDY7CisJCWZpbGxlciA9IDEyODsKKwkJYnJlYWs7CisJY2FzZSBWSURFT19QQUxFVFRFX1JBVzoKKwkJZmFjdG9yID0gNjsgLyogY2FuIGJlIHVuY29tcHJlc3NlZCBZVVY0MjBQICovCisJCWZpbGxlciA9IDA7CisJCWJyZWFrOworCX0KKworCS8qIFNldCBzaXplcyBpbiBieXRlcyAqLworCXBkZXYtPmltYWdlLnNpemUgPSBwZGV2LT5pbWFnZS54ICogcGRldi0+aW1hZ2UueSAqIGZhY3RvciAvIDQ7CisJcGRldi0+dmlldy5zaXplICA9IHBkZXYtPnZpZXcueCAgKiBwZGV2LT52aWV3LnkgICogZmFjdG9yIC8gNDsKKworCS8qIEFsaWduIG9mZnNldCwgb3IgeW91J2xsIGdldCBzb21lIHZlcnkgd2VpcmQgcmVzdWx0cyBpbgorCSAgIFlVVjQyMCBtb2RlLi4uIHggbXVzdCBiZSBtdWx0aXBsZSBvZiA0ICh0byBnZXQgdGhlIFkncyBpbgorCSAgIHBsYWNlKSwgYW5kIHkgZXZlbiAob3IgeW91J2xsIG1peHVwIFUgJiBWKS4gVGhpcyBpcyBsZXNzIG9mIGEKKwkgICBwcm9ibGVtIGZvciBZVVY0MjBQLgorCSAqLworCXBkZXYtPm9mZnNldC54ID0gKChwZGV2LT52aWV3LnggLSBwZGV2LT5pbWFnZS54KSAvIDIpICYgMHhGRkZDOworCXBkZXYtPm9mZnNldC55ID0gKChwZGV2LT52aWV3LnkgLSBwZGV2LT5pbWFnZS55KSAvIDIpICYgMHhGRkZFOworCisJLyogRmlsbCBidWZmZXJzIHdpdGggZ3JheSBvciBibGFjayAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhfSU1BR0VTOyBpKyspIHsKKwkJaWYgKHBkZXYtPmltYWdlX3B0cltpXSAhPSBOVUxMKQorCQkJbWVtc2V0KHBkZXYtPmltYWdlX3B0cltpXSwgZmlsbGVyLCBwZGV2LT52aWV3LnNpemUpOworCX0KK30KKworCisKKy8qIEJSSUdIVE5FU1MgKi8KKworaW50IHB3Y19nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKK3sKKwljaGFyIGJ1ZjsKKwlpbnQgcmV0OworCisJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX0xVTV9DVEwsIEJSSUdIVE5FU1NfRk9STUFUVEVSLCAxKTsJCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIGJ1ZiA8PCA5OworfQorCitpbnQgcHdjX3NldF9icmlnaHRuZXNzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgdmFsdWUpCit7CisJY2hhciBidWY7CisKKwlpZiAodmFsdWUgPCAwKQorCQl2YWx1ZSA9IDA7CisJaWYgKHZhbHVlID4gMHhmZmZmKQorCQl2YWx1ZSA9IDB4ZmZmZjsKKwlidWYgPSAodmFsdWUgPj4gOSkgJiAweDdmOworCXJldHVybiBTZW5kQ29udHJvbE1zZyhTRVRfTFVNX0NUTCwgQlJJR0hUTkVTU19GT1JNQVRURVIsIDEpOworfQorCisvKiBDT05UUkFTVCAqLworCitpbnQgcHdjX2dldF9jb250cmFzdChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKK3sKKwljaGFyIGJ1ZjsKKwlpbnQgcmV0OworCisJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX0xVTV9DVEwsIENPTlRSQVNUX0ZPUk1BVFRFUiwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIGJ1ZiA8PCAxMDsKK30KKworaW50IHB3Y19zZXRfY29udHJhc3Qoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCB2YWx1ZSkKK3sKKwljaGFyIGJ1ZjsKKworCWlmICh2YWx1ZSA8IDApCisJCXZhbHVlID0gMDsKKwlpZiAodmFsdWUgPiAweGZmZmYpCisJCXZhbHVlID0gMHhmZmZmOworCWJ1ZiA9ICh2YWx1ZSA+PiAxMCkgJiAweDNmOworCXJldHVybiBTZW5kQ29udHJvbE1zZyhTRVRfTFVNX0NUTCwgQ09OVFJBU1RfRk9STUFUVEVSLCAxKTsKK30KKworLyogR0FNTUEgKi8KKworaW50IHB3Y19nZXRfZ2FtbWEoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCit7CisJY2hhciBidWY7CisJaW50IHJldDsKKwkKKwlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfTFVNX0NUTCwgR0FNTUFfRk9STUFUVEVSLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gYnVmIDw8IDExOworfQorCitpbnQgcHdjX3NldF9nYW1tYShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHZhbHVlKQoreworCWNoYXIgYnVmOworCisJaWYgKHZhbHVlIDwgMCkKKwkJdmFsdWUgPSAwOworCWlmICh2YWx1ZSA+IDB4ZmZmZikKKwkJdmFsdWUgPSAweGZmZmY7CisJYnVmID0gKHZhbHVlID4+IDExKSAmIDB4MWY7CisJcmV0dXJuIFNlbmRDb250cm9sTXNnKFNFVF9MVU1fQ1RMLCBHQU1NQV9GT1JNQVRURVIsIDEpOworfQorCisKKy8qIFNBVFVSQVRJT04gKi8KKworaW50IHB3Y19nZXRfc2F0dXJhdGlvbihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKK3sKKwljaGFyIGJ1ZjsKKwlpbnQgcmV0OworCisJaWYgKHBkZXYtPnR5cGUgPCA2NzUpCisJCXJldHVybiAtMTsKKwlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfQ0hST01fQ1RMLCBwZGV2LT50eXBlIDwgNzMwID8gU0FUVVJBVElPTl9NT0RFX0ZPUk1BVFRFUjIgOiBTQVRVUkFUSU9OX01PREVfRk9STUFUVEVSMSwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIDMyNzY4ICsgYnVmICogMzI3OworfQorCitpbnQgcHdjX3NldF9zYXR1cmF0aW9uKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgdmFsdWUpCit7CisJY2hhciBidWY7CisKKwlpZiAocGRldi0+dHlwZSA8IDY3NSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHZhbHVlIDwgMCkKKwkJdmFsdWUgPSAwOworCWlmICh2YWx1ZSA+IDB4ZmZmZikKKwkJdmFsdWUgPSAweGZmZmY7CisJLyogc2F0dXJhdGlvbiByYW5nZXMgZnJvbSAtMTAwIHRvICsxMDAgKi8KKwlidWYgPSAodmFsdWUgLSAzMjc2OCkgLyAzMjc7CisJcmV0dXJuIFNlbmRDb250cm9sTXNnKFNFVF9DSFJPTV9DVEwsIHBkZXYtPnR5cGUgPCA3MzAgPyBTQVRVUkFUSU9OX01PREVfRk9STUFUVEVSMiA6IFNBVFVSQVRJT05fTU9ERV9GT1JNQVRURVIxLCAxKTsKK30KKworLyogQUdDICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19zZXRfYWdjKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgbW9kZSwgaW50IHZhbHVlKQoreworCWNoYXIgYnVmOworCWludCByZXQ7CisJCisJaWYgKG1vZGUpCisJCWJ1ZiA9IDB4MDsgLyogYXV0byAqLworCWVsc2UKKwkJYnVmID0gMHhmZjsgLyogZml4ZWQgKi8KKworCXJldCA9IFNlbmRDb250cm9sTXNnKFNFVF9MVU1fQ1RMLCBBR0NfTU9ERV9GT1JNQVRURVIsIDEpOworCQorCWlmICghbW9kZSAmJiByZXQgPj0gMCkgeworCQlpZiAodmFsdWUgPCAwKQorCQkJdmFsdWUgPSAwOworCQlpZiAodmFsdWUgPiAweGZmZmYpCisJCQl2YWx1ZSA9IDB4ZmZmZjsKKwkJYnVmID0gKHZhbHVlID4+IDEwKSAmIDB4M0Y7CisJCXJldCA9IFNlbmRDb250cm9sTXNnKFNFVF9MVU1fQ1RMLCBQUkVTRVRfQUdDX0ZPUk1BVFRFUiwgMSk7CisJfQorCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBwd2NfZ2V0X2FnYyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICp2YWx1ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwlpbnQgcmV0OworCQorCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9MVU1fQ1RMLCBBR0NfTU9ERV9GT1JNQVRURVIsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKGJ1ZiAhPSAwKSB7IC8qIGZpeGVkICovCisJCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9MVU1fQ1RMLCBQUkVTRVRfQUdDX0ZPUk1BVFRFUiwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJaWYgKGJ1ZiA+IDB4M0YpCisJCQlidWYgPSAweDNGOworCQkqdmFsdWUgPSAoYnVmIDw8IDEwKTsJCQorCX0KKwllbHNlIHsgLyogYXV0byAqLworCQlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfU1RBVFVTX0NUTCwgUkVBRF9BR0NfRk9STUFUVEVSLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQkvKiBHYWguLi4gdGhpcyB2YWx1ZSByYW5nZXMgZnJvbSAweDAwIC4uLiAweDlGICovCisJCWlmIChidWYgPiAweDlGKQorCQkJYnVmID0gMHg5RjsKKwkJKnZhbHVlID0gLSg0OCArIGJ1ZiAqIDQwOSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19zZXRfc2h1dHRlcl9zcGVlZChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IG1vZGUsIGludCB2YWx1ZSkKK3sKKwljaGFyIGJ1ZlsyXTsKKwlpbnQgc3BlZWQsIHJldDsKKworCisJaWYgKG1vZGUpCisJCWJ1ZlswXSA9IDB4MDsJLyogYXV0byAqLworCWVsc2UKKwkJYnVmWzBdID0gMHhmZjsgLyogZml4ZWQgKi8KKwkKKwlyZXQgPSBTZW5kQ29udHJvbE1zZyhTRVRfTFVNX0NUTCwgU0hVVFRFUl9NT0RFX0ZPUk1BVFRFUiwgMSk7CisKKwlpZiAoIW1vZGUgJiYgcmV0ID49IDApIHsKKwkJaWYgKHZhbHVlIDwgMCkKKwkJCXZhbHVlID0gMDsKKwkJaWYgKHZhbHVlID4gMHhmZmZmKQorCQkJdmFsdWUgPSAweGZmZmY7CisJCXN3aXRjaChwZGV2LT50eXBlKSB7CisJCWNhc2UgNjc1OgorCQljYXNlIDY4MDoKKwkJY2FzZSA2OTA6CisJCQkvKiBzcGVlZCByYW5nZXMgZnJvbSAweDAgdG8gMHgyOTAgKDY1NikgKi8KKwkJCXNwZWVkID0gKHZhbHVlIC8gMTAwKTsKKwkJCWJ1ZlsxXSA9IHNwZWVkID4+IDg7CisJCQlidWZbMF0gPSBzcGVlZCAmIDB4ZmY7CisJCQlicmVhazsKKwkJY2FzZSA3MjA6CisJCWNhc2UgNzMwOgorCQljYXNlIDc0MDoKKwkJY2FzZSA3NTA6CisJCQkvKiBzcGVlZCBzZWVtcyB0byByYW5nZSBmcm9tIDB4MCB0byAweGZmICovCisJCQlidWZbMV0gPSAwOworCQkJYnVmWzBdID0gdmFsdWUgPj4gODsKKwkJCWJyZWFrOworCQl9CisKKwkJcmV0ID0gU2VuZENvbnRyb2xNc2coU0VUX0xVTV9DVEwsIFBSRVNFVF9TSFVUVEVSX0ZPUk1BVFRFUiwgMik7CisJfQorCXJldHVybiByZXQ7Cit9CQorCisKKy8qIFBPV0VSICovCisKK2ludCBwd2NfY2FtZXJhX3Bvd2VyKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgcG93ZXIpCit7CisJY2hhciBidWY7CisKKwlpZiAocGRldi0+dHlwZSA8IDY3NSB8fCAocGRldi0+dHlwZSA8IDczMCAmJiBwZGV2LT5yZWxlYXNlIDwgNikpCisJCXJldHVybiAwOwkvKiBOb3Qgc3VwcG9ydGVkIGJ5IE5hbGEgb3IgVGltb24gPCByZWxlYXNlIDYgKi8KKworCWlmIChwb3dlcikKKwkJYnVmID0gMHgwMDsgLyogYWN0aXZlICovCisJZWxzZQorCQlidWYgPSAweEZGOyAvKiBwb3dlciBzYXZlICovCisJcmV0dXJuIFNlbmRDb250cm9sTXNnKFNFVF9TVEFUVVNfQ1RMLCBTRVRfUE9XRVJfU0FWRV9NT0RFX0ZPUk1BVFRFUiwgMSk7Cit9CisKKworCisvKiBwcml2YXRlIGNhbGxzICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19yZXN0b3JlX3VzZXIoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCit7CisJY2hhciBidWY7IC8qIGR1bW15ICovCisJcmV0dXJuIFNlbmRDb250cm9sTXNnKFNFVF9TVEFUVVNfQ1RMLCBSRVNUT1JFX1VTRVJfREVGQVVMVFNfRk9STUFUVEVSLCAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHdjX3NhdmVfdXNlcihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKK3sKKwljaGFyIGJ1ZjsgLyogZHVtbXkgKi8KKwlyZXR1cm4gU2VuZENvbnRyb2xNc2coU0VUX1NUQVRVU19DVEwsIFNBVkVfVVNFUl9ERUZBVUxUU19GT1JNQVRURVIsIDApOworfQorCitzdGF0aWMgaW5saW5lIGludCBwd2NfcmVzdG9yZV9mYWN0b3J5KHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQoreworCWNoYXIgYnVmOyAvKiBkdW1teSAqLworCXJldHVybiBTZW5kQ29udHJvbE1zZyhTRVRfU1RBVFVTX0NUTCwgUkVTVE9SRV9GQUNUT1JZX0RFRkFVTFRTX0ZPUk1BVFRFUiwgMCk7Cit9CisKKyAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisgLyogUGF0Y2ggYnkgQWx2YXJhZG86IChub3QgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24gICAqLworCisgLyoKKyAgKiB0aGUgY2FtZXJhIHJlY29nbml6ZXMgbW9kZXMgZnJvbSAwIHRvIDQ6CisgICoKKyAgKiAwMDogaW5kb29yIChpbmNhbmRlc2NhbnQgbGlnaHRpbmcpCisgICogMDE6IG91dGRvb3IgKHN1bmxpZ2h0KQorICAqIDAyOiBmbHVvcmVzY2VudCBsaWdodGluZworICAqIDAzOiBtYW51YWwKKyAgKiAwNDogYXV0bworICAqLyAKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19zZXRfYXdiKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgbW9kZSkKK3sKKwljaGFyIGJ1ZjsKKwlpbnQgcmV0OworCQorCWlmIChtb2RlIDwgMCkKKwkgICAgbW9kZSA9IDA7CisJCisJaWYgKG1vZGUgPiA0KQorCSAgICBtb2RlID0gNDsKKwkKKwlidWYgPSBtb2RlICYgMHgwNzsgLyoganVzdCB0aGUgbG93ZXN0IHRocmVlIGJpdHMgKi8KKwkKKwlyZXQgPSBTZW5kQ29udHJvbE1zZyhTRVRfQ0hST01fQ1RMLCBXQl9NT0RFX0ZPUk1BVFRFUiwgMSk7CisJCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19nZXRfYXdiKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCWludCByZXQ7CisJCisJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX0NIUk9NX0NUTCwgV0JfTU9ERV9GT1JNQVRURVIsIDEpOworCisJaWYgKHJldCA8IDApIAorCQlyZXR1cm4gcmV0OworCXJldHVybiBidWY7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19zZXRfcmVkX2dhaW4oc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCB2YWx1ZSkKK3sKKyAgICAgICAgdW5zaWduZWQgY2hhciBidWY7CisKKwlpZiAodmFsdWUgPCAwKQorCQl2YWx1ZSA9IDA7CisJaWYgKHZhbHVlID4gMHhmZmZmKQorCQl2YWx1ZSA9IDB4ZmZmZjsKKwkvKiBvbmx5IHRoZSBtc2IgaXMgY29uc2lkZXJlZCAqLworCWJ1ZiA9IHZhbHVlID4+IDg7CisJcmV0dXJuIFNlbmRDb250cm9sTXNnKFNFVF9DSFJPTV9DVEwsIFBSRVNFVF9NQU5VQUxfUkVEX0dBSU5fRk9STUFUVEVSLCAxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHdjX2dldF9yZWRfZ2FpbihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICp2YWx1ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwlpbnQgcmV0OworCQorCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9DSFJPTV9DVEwsIFBSRVNFVF9NQU5VQUxfUkVEX0dBSU5fRk9STUFUVEVSLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkgICAgcmV0dXJuIHJldDsKKwkqdmFsdWUgPSBidWYgPDwgODsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW5saW5lIGludCBwd2Nfc2V0X2JsdWVfZ2FpbihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCisJaWYgKHZhbHVlIDwgMCkKKwkJdmFsdWUgPSAwOworCWlmICh2YWx1ZSA+IDB4ZmZmZikKKwkJdmFsdWUgPSAweGZmZmY7CisJLyogb25seSB0aGUgbXNiIGlzIGNvbnNpZGVyZWQgKi8KKwlidWYgPSB2YWx1ZSA+PiA4OworCXJldHVybiBTZW5kQ29udHJvbE1zZyhTRVRfQ0hST01fQ1RMLCBQUkVTRVRfTUFOVUFMX0JMVUVfR0FJTl9GT1JNQVRURVIsIDEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwd2NfZ2V0X2JsdWVfZ2FpbihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICp2YWx1ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwlpbnQgcmV0OworCQorCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9DSFJPTV9DVEwsIFBSRVNFVF9NQU5VQUxfQkxVRV9HQUlOX0ZPUk1BVFRFUiwgMSk7CisJaWYgKHJldCA8IDApCisJICAgIHJldHVybiByZXQ7CisJKnZhbHVlID0gYnVmIDw8IDg7CisJcmV0dXJuIDA7Cit9CisKKworLyogVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGFyZSBkaWZmZXJlbnQsIHNpbmNlIHRoZXkgb25seSByZWFkIHRoZQorICAgaW50ZXJuYWwgcmVkL2JsdWUgZ2FpbnMsIHdoaWNoIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgbWFudWFsIAorICAgZ2FpbnMgc2V0IG9yIHJlYWQgYWJvdmUuCisgKi8gICAKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19yZWFkX3JlZF9nYWluKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKnZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCWludCByZXQ7CisJCisJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX1NUQVRVU19DVEwsIFJFQURfUkVEX0dBSU5fRk9STUFUVEVSLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwkqdmFsdWUgPSBidWYgPDwgODsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHdjX3JlYWRfYmx1ZV9nYWluKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKnZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCWludCByZXQ7CisJCisJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX1NUQVRVU19DVEwsIFJFQURfQkxVRV9HQUlOX0ZPUk1BVFRFUiwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJKnZhbHVlID0gYnVmIDw8IDg7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQgcHdjX3NldF93Yl9zcGVlZChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHNwZWVkKQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCQorCS8qIHVzZWZ1bCByYW5nZSBpcyAweDAxLi4weDIwICovCisJYnVmID0gc3BlZWQgLyAweDdmMDsKKwlyZXR1cm4gU2VuZENvbnRyb2xNc2coU0VUX0NIUk9NX0NUTCwgQVdCX0NPTlRST0xfU1BFRURfRk9STUFUVEVSLCAxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHdjX2dldF93Yl9zcGVlZChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICp2YWx1ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwlpbnQgcmV0OworCQorCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9DSFJPTV9DVEwsIEFXQl9DT05UUk9MX1NQRUVEX0ZPUk1BVFRFUiwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJKnZhbHVlID0gYnVmICogMHg3ZjA7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQgcHdjX3NldF93Yl9kZWxheShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IGRlbGF5KQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCQorCS8qIHVzZWZ1bCByYW5nZSBpcyAweDAxLi4weDNGICovCisJYnVmID0gKGRlbGF5ID4+IDEwKTsKKwlyZXR1cm4gU2VuZENvbnRyb2xNc2coU0VUX0NIUk9NX0NUTCwgQVdCX0NPTlRST0xfREVMQVlfRk9STUFUVEVSLCAxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHdjX2dldF93Yl9kZWxheShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICp2YWx1ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwlpbnQgcmV0OworCQorCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9DSFJPTV9DVEwsIEFXQl9DT05UUk9MX0RFTEFZX0ZPUk1BVFRFUiwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJKnZhbHVlID0gYnVmIDw8IDEwOworCXJldHVybiAwOworfQorCisKK2ludCBwd2Nfc2V0X2xlZHMoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBvbl92YWx1ZSwgaW50IG9mZl92YWx1ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZlsyXTsKKworCWlmIChwZGV2LT50eXBlIDwgNzMwKQorCQlyZXR1cm4gMDsKKwlvbl92YWx1ZSAvPSAxMDA7CisJb2ZmX3ZhbHVlIC89IDEwMDsKKwlpZiAob25fdmFsdWUgPCAwKQorCQlvbl92YWx1ZSA9IDA7CisJaWYgKG9uX3ZhbHVlID4gMHhmZikKKwkJb25fdmFsdWUgPSAweGZmOworCWlmIChvZmZfdmFsdWUgPCAwKQorCQlvZmZfdmFsdWUgPSAwOworCWlmIChvZmZfdmFsdWUgPiAweGZmKQorCQlvZmZfdmFsdWUgPSAweGZmOworCisJYnVmWzBdID0gb25fdmFsdWU7CisJYnVmWzFdID0gb2ZmX3ZhbHVlOworCisJcmV0dXJuIFNlbmRDb250cm9sTXNnKFNFVF9TVEFUVVNfQ1RMLCBMRURfRk9STUFUVEVSLCAyKTsKK30KKworaW50IHB3Y19nZXRfbGVkcyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICpvbl92YWx1ZSwgaW50ICpvZmZfdmFsdWUpCit7CisJdW5zaWduZWQgY2hhciBidWZbMl07CisJaW50IHJldDsKKwkKKwlpZiAocGRldi0+dHlwZSA8IDczMCkgeworCQkqb25fdmFsdWUgPSAtMTsKKwkJKm9mZl92YWx1ZSA9IC0xOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfU1RBVFVTX0NUTCwgTEVEX0ZPUk1BVFRFUiwgMik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJKm9uX3ZhbHVlID0gYnVmWzBdICogMTAwOworCSpvZmZfdmFsdWUgPSBidWZbMV0gKiAxMDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19zZXRfY29udG91cihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IGNvbnRvdXIpCit7CisJdW5zaWduZWQgY2hhciBidWY7CisJaW50IHJldDsKKwkKKwlpZiAoY29udG91ciA8IDApCisJCWJ1ZiA9IDB4ZmY7IC8qIGF1dG8gY29udG91ciBvbiAqLworCWVsc2UKKwkJYnVmID0gMHgwOyAvKiBhdXRvIGNvbnRvdXIgb2ZmICovCisJcmV0ID0gU2VuZENvbnRyb2xNc2coU0VUX0xVTV9DVEwsIEFVVE9fQ09OVE9VUl9GT1JNQVRURVIsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCQorCWlmIChjb250b3VyIDwgMCkKKwkJcmV0dXJuIDA7CisJaWYgKGNvbnRvdXIgPiAweGZmZmYpCisJCWNvbnRvdXIgPSAweGZmZmY7CisJCisJYnVmID0gKGNvbnRvdXIgPj4gMTApOyAvKiBjb250b3VyIHByZXNldCBpcyBbMC4uM2ZdICovCisJcmV0ID0gU2VuZENvbnRyb2xNc2coU0VUX0xVTV9DVEwsIFBSRVNFVF9DT05UT1VSX0ZPUk1BVFRFUiwgMSk7CisJaWYgKHJldCA8IDApCQorCQlyZXR1cm4gcmV0OwkKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHdjX2dldF9jb250b3VyKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKmNvbnRvdXIpCit7CisJdW5zaWduZWQgY2hhciBidWY7CisJaW50IHJldDsKKwkKKwlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfTFVNX0NUTCwgQVVUT19DT05UT1VSX0ZPUk1BVFRFUiwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoYnVmID09IDApIHsKKwkJLyogYXV0byBtb2RlIG9mZiwgcXVlcnkgY3VycmVudCBwcmVzZXQgdmFsdWUgKi8KKwkJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX0xVTV9DVEwsIFBSRVNFVF9DT05UT1VSX0ZPUk1BVFRFUiwgMSk7CisJCWlmIChyZXQgPCAwKQkKKwkJCXJldHVybiByZXQ7CisJCSpjb250b3VyID0gYnVmIDw8IDEwOworCX0KKwllbHNlCisJCSpjb250b3VyID0gLTE7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQgcHdjX3NldF9iYWNrbGlnaHQoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBiYWNrbGlnaHQpCit7CisJdW5zaWduZWQgY2hhciBidWY7CisJCisJaWYgKGJhY2tsaWdodCkKKwkJYnVmID0gMHhmZjsKKwllbHNlCisJCWJ1ZiA9IDB4MDsKKwlyZXR1cm4gU2VuZENvbnRyb2xNc2coU0VUX0xVTV9DVEwsIEJBQ0tfTElHSFRfQ09NUEVOU0FUSU9OX0ZPUk1BVFRFUiwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19nZXRfYmFja2xpZ2h0KHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKmJhY2tsaWdodCkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgYnVmOworCQorCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9MVU1fQ1RMLCBCQUNLX0xJR0hUX0NPTVBFTlNBVElPTl9GT1JNQVRURVIsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCSpiYWNrbGlnaHQgPSBidWY7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQgcHdjX3NldF9mbGlja2VyKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgZmxpY2tlcikKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwkKKwlpZiAoZmxpY2tlcikKKwkJYnVmID0gMHhmZjsKKwllbHNlCisJCWJ1ZiA9IDB4MDsKKwlyZXR1cm4gU2VuZENvbnRyb2xNc2coU0VUX0xVTV9DVEwsIEZMSUNLRVJMRVNTX01PREVfRk9STUFUVEVSLCAxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHdjX2dldF9mbGlja2VyKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKmZsaWNrZXIpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwkKKwlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfTFVNX0NUTCwgRkxJQ0tFUkxFU1NfTU9ERV9GT1JNQVRURVIsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCSpmbGlja2VyID0gYnVmOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19zZXRfZHluYW1pY19ub2lzZShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IG5vaXNlKQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCisJaWYgKG5vaXNlIDwgMCkKKwkJbm9pc2UgPSAwOworCWlmIChub2lzZSA+IDMpCisJCW5vaXNlID0gMzsKKwlidWYgPSBub2lzZTsKKwlyZXR1cm4gU2VuZENvbnRyb2xNc2coU0VUX0xVTV9DVEwsIERZTkFNSUNfTk9JU0VfQ09OVFJPTF9GT1JNQVRURVIsIDEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwd2NfZ2V0X2R5bmFtaWNfbm9pc2Uoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCAqbm9pc2UpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwkKKwlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfTFVNX0NUTCwgRFlOQU1JQ19OT0lTRV9DT05UUk9MX0ZPUk1BVFRFUiwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJKm5vaXNlID0gYnVmOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB3Y19tcHRfcmVzZXQoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBmbGFncykKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwkKKwlidWYgPSBmbGFncyAmIDB4MDM7IC8vIG9ubHkgbG93ZXIgdHdvIGJpdHMgYXJlIGN1cnJlbnRseSB1c2VkCisJcmV0dXJuIFNlbmRDb250cm9sTXNnKFNFVF9NUFRfQ1RMLCBQVF9SRVNFVF9DT05UUk9MX0ZPUk1BVFRFUiwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19tcHRfc2V0X2FuZ2xlKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgcGFuLCBpbnQgdGlsdCkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1Zls0XTsKKwkKKwkvKiBzZXQgbmV3IHJlbGF0aXZlIGFuZ2xlOyBhbmdsZXMgYXJlIGV4cHJlc3NlZCBpbiBkZWdyZWVzICogMTAwLAorCSAgIGJ1dCBjYW0gYXMgLjUgZGVncmVlIHJlc29sdXRpb24sIGhlbmNlIGRldmlkZSBieSAyMDAuIEFsc28KKwkgICB0aGUgYW5nbGUgbXVzdCBiZSBtdWx0aXBsaWVkIGJ5IDY0IGJlZm9yZSBpdCdzIHNlbmQgdG8KKwkgICB0aGUgY2FtICg/PykKKwkgKi8KKwlwYW4gID0gIDY0ICogcGFuICAvIDEwMDsKKwl0aWx0ID0gLTY0ICogdGlsdCAvIDEwMDsgLyogcG9zaXRpdmUgdGlsdCBpcyBkb3duLCB3aGljaCBpcyBub3Qgd2hhdCB0aGUgdXNlciB3b3VsZCBleHBlY3QgKi8KKwlidWZbMF0gPSBwYW4gJiAweEZGOworCWJ1ZlsxXSA9IChwYW4gPj4gOCkgJiAweEZGOworCWJ1ZlsyXSA9IHRpbHQgJiAweEZGOworCWJ1ZlszXSA9ICh0aWx0ID4+IDgpICYgMHhGRjsKKwlyZXR1cm4gU2VuZENvbnRyb2xNc2coU0VUX01QVF9DVEwsIFBUX1JFTEFUSVZFX0NPTlRST0xfRk9STUFUVEVSLCA0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHdjX21wdF9nZXRfc3RhdHVzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBzdHJ1Y3QgcHdjX21wdF9zdGF0dXMgKnN0YXR1cykKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgYnVmWzVdOworCQorCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9NUFRfQ1RMLCBQVF9TVEFUVVNfRk9STUFUVEVSLCA1KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlzdGF0dXMtPnN0YXR1cyA9IGJ1ZlswXSAmIDB4NzsgLy8gMyBiaXRzIGFyZSB1c2VkIGZvciByZXBvcnRpbmcKKwlzdGF0dXMtPnRpbWVfcGFuID0gKGJ1ZlsxXSA8PCA4KSArIGJ1ZlsyXTsKKwlzdGF0dXMtPnRpbWVfdGlsdCA9IChidWZbM10gPDwgOCkgKyBidWZbNF07CisJcmV0dXJuIDA7Cit9CisKKworaW50IHB3Y19nZXRfY21vc19zZW5zb3Ioc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCAqc2Vuc29yKQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCWludCByZXQgPSAtMSwgcmVxdWVzdDsKKwkKKwlpZiAocGRldi0+dHlwZSA8IDY3NSkKKwkJcmVxdWVzdCA9IFNFTlNPUl9UWVBFX0ZPUk1BVFRFUjE7CisJZWxzZSBpZiAocGRldi0+dHlwZSA8IDczMCkKKwkJcmV0dXJuIC0xOyAvKiBUaGUgVmVzdGEgc2VyaWVzIGRvZXNuJ3QgaGF2ZSB0aGlzIGNhbGwgKi8KKwllbHNlCisJCXJlcXVlc3QgPSBTRU5TT1JfVFlQRV9GT1JNQVRURVIyOworCQorCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9TVEFUVVNfQ1RMLCByZXF1ZXN0LCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocGRldi0+dHlwZSA8IDY3NSkKKwkJKnNlbnNvciA9IGJ1ZiB8IDB4MTAwOworCWVsc2UKKwkJKnNlbnNvciA9IGJ1ZjsKKwlyZXR1cm4gMDsKK30KKworCisgLyogRW5kIG9mIEFkZC1PbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworLyogTGludXggMi41LnNvbWV0aGluZyBhbmQgMi42IHBhc3MgZGlyZWN0IHBvaW50ZXJzIHRvIGFyZ3VtZW50cyBvZgorICAgaW9jdGwoKSBjYWxscy4gV2l0aCAyLjQsIHlvdSBoYXZlIHRvIGRvIHRlZGlvdXMgY29weV9mcm9tX3VzZXIoKQorICAgYW5kIGNvcHlfdG9fdXNlcigpIGNhbGxzLiBXaXRoIHRoZXNlIG1hY3JvcyB3ZSBjaXJjdW12ZW50IHRoaXMsCisgICBhbmQgbGV0IG1lIG1haW50YWluIG9ubHkgb25lIHNvdXJjZSBmaWxlLiBUaGUgZnVuY3Rpb25hbGl0eSBpcworICAgZXhhY3RseSB0aGUgc2FtZSBvdGhlcndpc2UuCisgKi8gICAKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAwKQorCisvKiBkZWZpbmUgbG9jYWwgdmFyaWFibGUgZm9yIGFyZyAqLworI2RlZmluZSBBUkdfREVGKEFSR190eXBlLCBBUkdfbmFtZSlcCisJQVJHX3R5cGUgKkFSR19uYW1lID0gYXJnOworLyogY29weSBhcmcgdG8gbG9jYWwgdmFyaWFibGUgKi8JCisjZGVmaW5lIEFSR19JTihBUkdfbmFtZSkgLyogbm90aGluZyAqLworLyogYXJndW1lbnQgaXRzZWxmIChyZWZlcmVuY2VkKSAqLworI2RlZmluZSBBUkdSKEFSR19uYW1lKSAoKkFSR19uYW1lKQorLyogYXJndW1lbnQgYWRkcmVzcyAqLworI2RlZmluZSBBUkdBKEFSR19uYW1lKSBBUkdfbmFtZQorLyogY29weSBsb2NhbCB2YXJpYWJsZSB0byBhcmcgKi8KKyNkZWZpbmUgQVJHX09VVChBUkdfbmFtZSkgLyogbm90aGluZyAqLworCisjZWxzZQorCisjZGVmaW5lIEFSR19ERUYoQVJHX3R5cGUsIEFSR19uYW1lKVwKKwlBUkdfdHlwZSBBUkdfbmFtZTsKKyNkZWZpbmUgQVJHX0lOKEFSR19uYW1lKVwKKwlpZiAoY29weV9mcm9tX3VzZXIoJkFSR19uYW1lLCBhcmcsIHNpemVvZihBUkdfbmFtZSkpKSB7XAorCQlyZXQgPSAtRUZBVUxUO1wKKwkJYnJlYWs7XAorCX0KKyNkZWZpbmUgQVJHUihBUkdfbmFtZSkgQVJHX25hbWUKKyNkZWZpbmUgQVJHQShBUkdfbmFtZSkgJkFSR19uYW1lCisjZGVmaW5lIEFSR19PVVQoQVJHX25hbWUpXAorCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmQVJHX25hbWUsIHNpemVvZihBUkdfbmFtZSkpKSB7XAorCQlyZXQgPSAtRUZBVUxUO1wKKwkJYnJlYWs7XAorCX0KKworI2VuZGlmCisKK2ludCBwd2NfaW9jdGwoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaChjbWQpIHsKKwljYXNlIFZJRElPQ1BXQ1JVU0VSOgorCXsKKwkJaWYgKHB3Y19yZXN0b3JlX3VzZXIocGRldikpCisJCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJCisJY2FzZSBWSURJT0NQV0NTVVNFUjoKKwl7CisJCWlmIChwd2Nfc2F2ZV91c2VyKHBkZXYpKQorCQkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCQkKKwljYXNlIFZJRElPQ1BXQ0ZBQ1RPUlk6CisJeworCQlpZiAocHdjX3Jlc3RvcmVfZmFjdG9yeShwZGV2KSkKKwkJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwkKKwljYXNlIFZJRElPQ1BXQ1NDUVVBTDoKKwl7CQorCQlBUkdfREVGKGludCwgcXVhbCkKKworCQlBUkdfSU4ocXVhbCkKKwkJaWYgKEFSR1IocXVhbCkgPCAwIHx8IEFSR1IocXVhbCkgPiAzKQorCQkJcmV0ID0gLUVJTlZBTDsKKwkJZWxzZQorCQkJcmV0ID0gcHdjX3RyeV92aWRlb19tb2RlKHBkZXYsIHBkZXYtPnZpZXcueCwgcGRldi0+dmlldy55LCBwZGV2LT52ZnJhbWVzLCBBUkdSKHF1YWwpLCBwZGV2LT52c25hcHNob3QpOworCQlpZiAocmV0ID49IDApCisJCQlwZGV2LT52Y29tcHJlc3Npb24gPSBBUkdSKHF1YWwpOworCQlicmVhazsKKwl9CisJCisJY2FzZSBWSURJT0NQV0NHQ1FVQUw6CisJeworCQlBUkdfREVGKGludCwgcXVhbCkKKwkJCisJCUFSR1IocXVhbCkgPSBwZGV2LT52Y29tcHJlc3Npb247CisJCUFSR19PVVQocXVhbCkKKwkJYnJlYWs7CisJfQorCQorCWNhc2UgVklESU9DUFdDUFJPQkU6CisJeworCQlBUkdfREVGKHN0cnVjdCBwd2NfcHJvYmUsIHByb2JlKQorCQkKKwkJc3RyY3B5KEFSR1IocHJvYmUpLm5hbWUsIHBkZXYtPnZkZXYtPm5hbWUpOworCQlBUkdSKHByb2JlKS50eXBlID0gcGRldi0+dHlwZTsKKwkJQVJHX09VVChwcm9iZSkKKwkJYnJlYWs7CisJfQorCisJY2FzZSBWSURJT0NQV0NHU0VSSUFMOgorCXsKKwkJQVJHX0RFRihzdHJ1Y3QgcHdjX3NlcmlhbCwgc2VyaWFsKQorCQkKKwkJc3RyY3B5KEFSR1Ioc2VyaWFsKS5zZXJpYWwsIHBkZXYtPnNlcmlhbCk7CisJCUFSR19PVVQoc2VyaWFsKQorCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ1BXQ1NBR0M6CisJeworCQlBUkdfREVGKGludCwgYWdjKQorCisJCUFSR19JTihhZ2MpCisJCWlmIChwd2Nfc2V0X2FnYyhwZGV2LCBBUkdSKGFnYykgPCAwID8gMSA6IDAsIEFSR1IoYWdjKSkpCisJCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJCisJY2FzZSBWSURJT0NQV0NHQUdDOgorCXsKKwkJQVJHX0RFRihpbnQsIGFnYykKKwkJCisJCWlmIChwd2NfZ2V0X2FnYyhwZGV2LCBBUkdBKGFnYykpKQorCQkJcmV0ID0gLUVJTlZBTDsKKwkJQVJHX09VVChhZ2MpCisJCWJyZWFrOworCX0KKwkKKwljYXNlIFZJRElPQ1BXQ1NTSFVUVEVSOgorCXsKKwkJQVJHX0RFRihpbnQsIHNodXR0ZXJfc3BlZWQpCisKKwkJQVJHX0lOKHNodXR0ZXJfc3BlZWQpCisJCXJldCA9IHB3Y19zZXRfc2h1dHRlcl9zcGVlZChwZGV2LCBBUkdSKHNodXR0ZXJfc3BlZWQpIDwgMCA/IDEgOiAwLCBBUkdSKHNodXR0ZXJfc3BlZWQpKTsKKwkJYnJlYWs7CisJfQorCQorICAgICAgICBjYXNlIFZJRElPQ1BXQ1NBV0I6CisJeworCQlBUkdfREVGKHN0cnVjdCBwd2Nfd2hpdGViYWxhbmNlLCB3YikKKwkJCisJCUFSR19JTih3YikKKwkJcmV0ID0gcHdjX3NldF9hd2IocGRldiwgQVJHUih3YikubW9kZSk7CisJCWlmIChyZXQgPj0gMCAmJiBBUkdSKHdiKS5tb2RlID09IFBXQ19XQl9NQU5VQUwpIHsKKwkJCXB3Y19zZXRfcmVkX2dhaW4ocGRldiwgQVJHUih3YikubWFudWFsX3JlZCk7CisJCQlwd2Nfc2V0X2JsdWVfZ2FpbihwZGV2LCBBUkdSKHdiKS5tYW51YWxfYmx1ZSk7CisJCX0KKwkJYnJlYWs7CisJfQorCisJY2FzZSBWSURJT0NQV0NHQVdCOgorCXsKKwkJQVJHX0RFRihzdHJ1Y3QgcHdjX3doaXRlYmFsYW5jZSwgd2IpCisKKwkJbWVtc2V0KEFSR0Eod2IpLCAwLCBzaXplb2Yoc3RydWN0IHB3Y193aGl0ZWJhbGFuY2UpKTsKKwkJQVJHUih3YikubW9kZSA9IHB3Y19nZXRfYXdiKHBkZXYpOworCQlpZiAoQVJHUih3YikubW9kZSA8IDApCisJCQlyZXQgPSAtRUlOVkFMOworCQllbHNlIHsKKwkJCWlmIChBUkdSKHdiKS5tb2RlID09IFBXQ19XQl9NQU5VQUwpIHsKKwkJCQlyZXQgPSBwd2NfZ2V0X3JlZF9nYWluKHBkZXYsICZBUkdSKHdiKS5tYW51YWxfcmVkKTsKKwkJCQlpZiAocmV0IDwgMCkKKwkJCQkJYnJlYWs7CisJCQkJcmV0ID0gcHdjX2dldF9ibHVlX2dhaW4ocGRldiwgJkFSR1Iod2IpLm1hbnVhbF9ibHVlKTsKKwkJCQlpZiAocmV0IDwgMCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoQVJHUih3YikubW9kZSA9PSBQV0NfV0JfQVVUTykgeworCQkJCXJldCA9IHB3Y19yZWFkX3JlZF9nYWluKHBkZXYsICZBUkdSKHdiKS5yZWFkX3JlZCk7CisJCQkJaWYgKHJldCA8IDApCisJCQkJCWJyZWFrOworIAkJCQlyZXQgPXB3Y19yZWFkX2JsdWVfZ2FpbihwZGV2LCAmQVJHUih3YikucmVhZF9ibHVlKTsKKyAJCQkJaWYgKHJldCA8IDApCisgCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlBUkdfT1VUKHdiKQorCQlicmVhazsKKwl9CisJCisJY2FzZSBWSURJT0NQV0NTQVdCU1BFRUQ6CisJeworCQlBUkdfREVGKHN0cnVjdCBwd2Nfd2Jfc3BlZWQsIHdicykKKwkJCisJCWlmIChBUkdSKHdicykuY29udHJvbF9zcGVlZCA+IDApIHsKKwkJCXJldCA9IHB3Y19zZXRfd2Jfc3BlZWQocGRldiwgQVJHUih3YnMpLmNvbnRyb2xfc3BlZWQpOworCQl9CisJCWlmIChBUkdSKHdicykuY29udHJvbF9kZWxheSA+IDApIHsKKwkJCXJldCA9IHB3Y19zZXRfd2JfZGVsYXkocGRldiwgQVJHUih3YnMpLmNvbnRyb2xfZGVsYXkpOworCQl9CisJCWJyZWFrOworCX0KKwkKKwljYXNlIFZJRElPQ1BXQ0dBV0JTUEVFRDoKKwl7CisJCUFSR19ERUYoc3RydWN0IHB3Y193Yl9zcGVlZCwgd2JzKQorCQkKKwkJcmV0ID0gcHdjX2dldF93Yl9zcGVlZChwZGV2LCAmQVJHUih3YnMpLmNvbnRyb2xfc3BlZWQpOworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCQlyZXQgPSBwd2NfZ2V0X3diX2RlbGF5KHBkZXYsICZBUkdSKHdicykuY29udHJvbF9kZWxheSk7CisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CisJCUFSR19PVVQod2JzKQorCQlicmVhazsKKwl9CisKKyAgICAgICAgY2FzZSBWSURJT0NQV0NTTEVEOgorCXsKKwkJQVJHX0RFRihzdHJ1Y3QgcHdjX2xlZHMsIGxlZHMpCisKKwkJQVJHX0lOKGxlZHMpCisJCXJldCA9IHB3Y19zZXRfbGVkcyhwZGV2LCBBUkdSKGxlZHMpLmxlZF9vbiwgQVJHUihsZWRzKS5sZWRfb2ZmKTsKKwkgICAgCWJyZWFrOworCX0KKworCisJY2FzZSBWSURJT0NQV0NHTEVEOgorCXsKKwkJQVJHX0RFRihzdHJ1Y3QgcHdjX2xlZHMsIGxlZHMpCisJCQorCQlyZXQgPSBwd2NfZ2V0X2xlZHMocGRldiwgJkFSR1IobGVkcykubGVkX29uLCAmQVJHUihsZWRzKS5sZWRfb2ZmKTsKKwkJQVJHX09VVChsZWRzKQorCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ1BXQ1NDT05UT1VSOgorCXsKKwkJQVJHX0RFRihpbnQsIGNvbnRvdXIpCisKKwkJQVJHX0lOKGNvbnRvdXIpCisJCXJldCA9IHB3Y19zZXRfY29udG91cihwZGV2LCBBUkdSKGNvbnRvdXIpKTsKKwkJYnJlYWs7CisJfQorCQkJCisJY2FzZSBWSURJT0NQV0NHQ09OVE9VUjoKKwl7CisJCUFSR19ERUYoaW50LCBjb250b3VyKQorCQkKKwkJcmV0ID0gcHdjX2dldF9jb250b3VyKHBkZXYsIEFSR0EoY29udG91cikpOworCQlBUkdfT1VUKGNvbnRvdXIpCisJCWJyZWFrOworCX0KKwkKKwljYXNlIFZJRElPQ1BXQ1NCQUNLTElHSFQ6CisJeworCQlBUkdfREVGKGludCwgYmFja2xpZ2h0KQorCQkKKwkJQVJHX0lOKGJhY2tsaWdodCkKKwkJcmV0ID0gcHdjX3NldF9iYWNrbGlnaHQocGRldiwgQVJHUihiYWNrbGlnaHQpKTsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBWSURJT0NQV0NHQkFDS0xJR0hUOgorCXsKKwkJQVJHX0RFRihpbnQsIGJhY2tsaWdodCkKKwkJCisJCXJldCA9IHB3Y19nZXRfYmFja2xpZ2h0KHBkZXYsIEFSR0EoYmFja2xpZ2h0KSk7CisJCUFSR19PVVQoYmFja2xpZ2h0KQorCQlicmVhazsKKwl9CisJCisJY2FzZSBWSURJT0NQV0NTRkxJQ0tFUjoKKwl7CisJCUFSR19ERUYoaW50LCBmbGlja2VyKQorCQkKKwkJQVJHX0lOKGZsaWNrZXIpCisJCXJldCA9IHB3Y19zZXRfZmxpY2tlcihwZGV2LCBBUkdSKGZsaWNrZXIpKTsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBWSURJT0NQV0NHRkxJQ0tFUjoKKwl7CisJCUFSR19ERUYoaW50LCBmbGlja2VyKQorCQkKKwkJcmV0ID0gcHdjX2dldF9mbGlja2VyKHBkZXYsIEFSR0EoZmxpY2tlcikpOworCQlBUkdfT1VUKGZsaWNrZXIpCisJCWJyZWFrOworCX0KKwkKKwljYXNlIFZJRElPQ1BXQ1NEWU5OT0lTRToKKwl7CisJCUFSR19ERUYoaW50LCBkeW5ub2lzZSkKKwkJCisJCUFSR19JTihkeW5ub2lzZSkKKwkJcmV0ID0gcHdjX3NldF9keW5hbWljX25vaXNlKHBkZXYsIEFSR1IoZHlubm9pc2UpKTsKKwkJYnJlYWs7CisJfQorCQorCWNhc2UgVklESU9DUFdDR0RZTk5PSVNFOgorCXsKKwkJQVJHX0RFRihpbnQsIGR5bm5vaXNlKQorCisJCXJldCA9IHB3Y19nZXRfZHluYW1pY19ub2lzZShwZGV2LCBBUkdBKGR5bm5vaXNlKSk7CisJCUFSR19PVVQoZHlubm9pc2UpOworCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ1BXQ0dSRUFMU0laRToKKwl7CisJCUFSR19ERUYoc3RydWN0IHB3Y19pbWFnZXNpemUsIHNpemUpCisJCQorCQlBUkdSKHNpemUpLndpZHRoID0gcGRldi0+aW1hZ2UueDsKKwkJQVJHUihzaXplKS5oZWlnaHQgPSBwZGV2LT5pbWFnZS55OworCQlBUkdfT1VUKHNpemUpCisJCWJyZWFrOworIAl9CisgCQorIAljYXNlIFZJRElPQ1BXQ01QVFJFU0VUOgorIAl7CisgCQlpZiAocGRldi0+ZmVhdHVyZXMgJiBGRUFUVVJFX01PVE9SX1BBTlRJTFQpCisgCQl7CisJIAkJQVJHX0RFRihpbnQsIGZsYWdzKQorCisgCQkJQVJHX0lOKGZsYWdzKQorCQkJcmV0ID0gcHdjX21wdF9yZXNldChwZGV2LCBBUkdSKGZsYWdzKSk7CisgCQkJaWYgKHJldCA+PSAwKQorIAkJCXsKKyAJCQkJcGRldi0+cGFuX2FuZ2xlID0gMDsKKyAJCQkJcGRldi0+dGlsdF9hbmdsZSA9IDA7CisgCQkJfQorIAkJfQorIAkJZWxzZQorIAkJeworIAkJCXJldCA9IC1FTlhJTzsKKyAJCX0KKyAJCWJyZWFrOwkJCisgCX0KKyAJCisgCWNhc2UgVklESU9DUFdDTVBUR1JBTkdFOgorIAl7CisgCQlpZiAocGRldi0+ZmVhdHVyZXMgJiBGRUFUVVJFX01PVE9SX1BBTlRJTFQpCisgCQl7CisgCQkJQVJHX0RFRihzdHJ1Y3QgcHdjX21wdF9yYW5nZSwgcmFuZ2UpCisgCQkJCisgCQkJQVJHUihyYW5nZSkgPSBwZGV2LT5hbmdsZV9yYW5nZTsKKyAJCQlBUkdfT1VUKHJhbmdlKQorIAkJfQorIAkJZWxzZQorIAkJewkKKyAJCQlyZXQgPSAtRU5YSU87CisgCQl9CisgCQlicmVhazsKKyAJfQorIAkKKyAJY2FzZSBWSURJT0NQV0NNUFRTQU5HTEU6CisgCXsKKyAJCWludCBuZXdfcGFuLCBuZXdfdGlsdDsKKyAJCQorIAkJaWYgKHBkZXYtPmZlYXR1cmVzICYgRkVBVFVSRV9NT1RPUl9QQU5USUxUKQorIAkJeworCSAJCUFSR19ERUYoc3RydWN0IHB3Y19tcHRfYW5nbGVzLCBhbmdsZXMpCisKKwkgCQlBUkdfSU4oYW5nbGVzKQorCQkJLyogVGhlIGNhbWVyYSBjYW4gb25seSBzZXQgcmVsYXRpdmUgYW5nbGVzLCBzbworCQkJICAgZG8gc29tZSBjYWxjdWxhdGlvbnMgd2hlbiBnZXR0aW5nIGFuIGFic29sdXRlIGFuZ2xlIC4KKwkJCSAqLworCQkJaWYgKEFSR1IoYW5nbGVzKS5hYnNvbHV0ZSkKKwkJCXsKKyAJCQkJbmV3X3BhbiAgPSBBUkdSKGFuZ2xlcykucGFuOyAKKyAJCQkJbmV3X3RpbHQgPSBBUkdSKGFuZ2xlcykudGlsdDsKKyAJCQl9CisgCQkJZWxzZQorIAkJCXsKKyAJCQkJbmV3X3BhbiAgPSBwZGV2LT5wYW5fYW5nbGUgICsgQVJHUihhbmdsZXMpLnBhbjsKKyAJCQkJbmV3X3RpbHQgPSBwZGV2LT50aWx0X2FuZ2xlICsgQVJHUihhbmdsZXMpLnRpbHQ7CisJCQl9CisJCQkvKiBjaGVjayBhYnNvbHV0ZSByYW5nZXMgKi8KKwkJCWlmIChuZXdfcGFuICA8IHBkZXYtPmFuZ2xlX3JhbmdlLnBhbl9taW4gIHx8CisJCQkgICAgbmV3X3BhbiAgPiBwZGV2LT5hbmdsZV9yYW5nZS5wYW5fbWF4ICB8fAorCQkJICAgIG5ld190aWx0IDwgcGRldi0+YW5nbGVfcmFuZ2UudGlsdF9taW4gfHwKKwkJCSAgICBuZXdfdGlsdCA+IHBkZXYtPmFuZ2xlX3JhbmdlLnRpbHRfbWF4KQorCQkJeworCQkJCXJldCA9IC1FUkFOR0U7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyogZ28gdG8gcmVsYXRpdmUgcmFuZ2UsIGNoZWNrIGFnYWluICovCisJCQkJbmV3X3BhbiAgLT0gcGRldi0+cGFuX2FuZ2xlOworCQkJCW5ld190aWx0IC09IHBkZXYtPnRpbHRfYW5nbGU7CisJCQkJLyogYW5nbGVzIGFyZSBzcGVjaWZpZWQgaW4gZGVncmVlcyAqIDEwMCwgdGh1cyB0aGUgbGltaXQgPSAzNjAwMCAqLworCQkJCWlmIChuZXdfcGFuIDwgLTM2MDAwIHx8IG5ld19wYW4gPiAzNjAwMCB8fCBuZXdfdGlsdCA8IC0zNjAwMCB8fCBuZXdfdGlsdCA+IDM2MDAwKQorCQkJCQlyZXQgPSAtRVJBTkdFOworCQkJfQorCQkJaWYgKHJldCA9PSAwKSAvKiBubyBlcnJvcnMgc28gZmFyICovCisJCQl7CisJCQkJcmV0ID0gcHdjX21wdF9zZXRfYW5nbGUocGRldiwgbmV3X3BhbiwgbmV3X3RpbHQpOworCQkJCWlmIChyZXQgPj0gMCkKKwkJCQl7CisJCQkJCXBkZXYtPnBhbl9hbmdsZSAgKz0gbmV3X3BhbjsKKwkJCQkJcGRldi0+dGlsdF9hbmdsZSArPSBuZXdfdGlsdDsKKwkJCQl9CisJCQkJaWYgKHJldCA9PSAtRVBJUEUpIC8qIHN0YWxsIC0+IG91dCBvZiByYW5nZSAqLworCQkJCQlyZXQgPSAtRVJBTkdFOwkJCQkKKwkJCX0KKyAJCX0KKyAJCWVsc2UKKyAJCXsKKyAJCQlyZXQgPSAtRU5YSU87CisgCQl9CisgCQlicmVhazsKKyAJfQorCisgCWNhc2UgVklESU9DUFdDTVBUR0FOR0xFOgorIAl7CisgCQkKKyAJCWlmIChwZGV2LT5mZWF0dXJlcyAmIEZFQVRVUkVfTU9UT1JfUEFOVElMVCkKKyAJCXsKKwkgCQlBUkdfREVGKHN0cnVjdCBwd2NfbXB0X2FuZ2xlcywgYW5nbGVzKQorCisgCQkJQVJHUihhbmdsZXMpLmFic29sdXRlID0gMTsKKyAJCQlBUkdSKGFuZ2xlcykucGFuICA9IHBkZXYtPnBhbl9hbmdsZTsKKyAJCQlBUkdSKGFuZ2xlcykudGlsdCA9IHBkZXYtPnRpbHRfYW5nbGU7CisgCQkJQVJHX09VVChhbmdsZXMpCisgCQl9CisgCQllbHNlCisgCQl7CisgCQkJcmV0ID0gLUVOWElPOworIAkJfQorIAkJYnJlYWs7CisgCX0KKyAKKyAJY2FzZSBWSURJT0NQV0NNUFRTVEFUVVM6CisgCXsKKyAJCWlmIChwZGV2LT5mZWF0dXJlcyAmIEZFQVRVUkVfTU9UT1JfUEFOVElMVCkKKyAJCXsKKyAJCQlBUkdfREVGKHN0cnVjdCBwd2NfbXB0X3N0YXR1cywgc3RhdHVzKQorIAkJCQorIAkJCXJldCA9IHB3Y19tcHRfZ2V0X3N0YXR1cyhwZGV2LCBBUkdBKHN0YXR1cykpOworIAkJCUFSR19PVVQoc3RhdHVzKQorIAkJfQorIAkJZWxzZQorIAkJeworIAkJCXJldCA9IC1FTlhJTzsKKyAJCX0KKyAJCWJyZWFrOworCX0KKworCWNhc2UgVklESU9DUFdDR1ZJRENNRDoKKwl7CisJCUFSR19ERUYoc3RydWN0IHB3Y192aWRlb19jb21tYW5kLCBjbWQpOworCQkKKyAgICAgICAgICAgICAgICBBUkdSKGNtZCkudHlwZSA9IHBkZXYtPnR5cGU7CisJCUFSR1IoY21kKS5yZWxlYXNlID0gcGRldi0+cmVsZWFzZTsKKwkJQVJHUihjbWQpLmNvbW1hbmRfbGVuID0gcGRldi0+Y21kX2xlbjsKKwkJbWVtY3B5KCZBUkdSKGNtZCkuY29tbWFuZF9idWYsIHBkZXYtPmNtZF9idWYsIHBkZXYtPmNtZF9sZW4pOworCQlBUkdSKGNtZCkuYmFuZGxlbmd0aCA9IHBkZXYtPnZiYW5kbGVuZ3RoOworCQlBUkdSKGNtZCkuZnJhbWVfc2l6ZSA9IHBkZXYtPmZyYW1lX3NpemU7CisJCUFSR19PVVQoY21kKQorCQlicmVhazsKKwl9CisgICAgICAgLyoKKwljYXNlIFZJRElPQ1BXQ0dWSURUQUJMRToKKwl7CisJCUFSR19ERUYoc3RydWN0IHB3Y190YWJsZV9pbml0X2J1ZmZlciwgdGFibGUpOworCQlBUkdSKHRhYmxlKS5sZW4gPSBwZGV2LT5jbWRfbGVuOworCQltZW1jcHkoJkFSR1IodGFibGUpLmJ1ZmZlciwgcGRldi0+ZGVjb21wcmVzc19kYXRhLCBwZGV2LT5kZWNvbXByZXNzb3ItPnRhYmxlX3NpemUpOworCQlBUkdfT1VUKHRhYmxlKQorCQlicmVhazsKKwl9CisJKi8KKworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9JT0NUTENNRDsKKwkJYnJlYWs7CisJfQorCQorCWlmIChyZXQgPiAwKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OworfQorCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1kZWMxLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWRlYzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2QwM2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1kZWMxLmMKQEAgLTAsMCArMSw0MiBAQAorLyogTGludXggZHJpdmVyIGZvciBQaGlsaXBzIHdlYmNhbQorICAgRGVjb21wcmVzc2lvbiBmb3IgY2hpcHNldCB2ZXJzaW9uIDEKKyAgIChDKSAyMDA0ICAgICAgTHVjIFNhaWxsYXJkIChsdWNAc2FpbGxhcmQub3JnKQorCisgICBOT1RFOiB0aGlzIHZlcnNpb24gb2YgcHdjIGlzIGFuIHVub2ZmaWNpYWwgKG1vZGlmaWVkKSByZWxlYXNlIG9mIHB3YyAmIHBjd3gKKyAgIGRyaXZlciBhbmQgdGh1cyBtYXkgaGF2ZSBidWdzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLgorICAgUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgYW5kIHN1cHBvcnQgcmVxdWVzdHMgdG8gPGx1Y0BzYWlsbGFyZC5vcmc+LgorICAgVGhlIGRlY29tcHJlc3Npb24gcm91dGluZXMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGJ5IHJldmVyc2UtZW5naW5lZXJpbmcgdGhlCisgICBOZW1vc29mdCBiaW5hcnkgcHdjeCBtb2R1bGUuIENhdmVhdCBlbXB0b3IuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworCisKKyNpbmNsdWRlICJwd2MtZGVjMS5oIgorCisKK3ZvaWQgcHdjX2RlYzFfaW5pdChpbnQgdHlwZSwgaW50IHJlbGVhc2UsIHZvaWQgKmJ1ZmZlciwgdm9pZCAqdGFibGUpCit7CisKK30KKwordm9pZCBwd2NfZGVjMV9leGl0KHZvaWQpCit7CisKKworCit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtZGVjMS5oIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1kZWMxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdmZmQ5YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtZGVjMS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qIExpbnV4IGRyaXZlciBmb3IgUGhpbGlwcyB3ZWJjYW0KKyAgIChDKSAyMDA0ICAgICAgTHVjIFNhaWxsYXJkIChsdWNAc2FpbGxhcmQub3JnKQorCisgICBOT1RFOiB0aGlzIHZlcnNpb24gb2YgcHdjIGlzIGFuIHVub2ZmaWNpYWwgKG1vZGlmaWVkKSByZWxlYXNlIG9mIHB3YyAmIHBjd3gKKyAgIGRyaXZlciBhbmQgdGh1cyBtYXkgaGF2ZSBidWdzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLgorICAgUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgYW5kIHN1cHBvcnQgcmVxdWVzdHMgdG8gPGx1Y0BzYWlsbGFyZC5vcmc+LgorICAgVGhlIGRlY29tcHJlc3Npb24gcm91dGluZXMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGJ5IHJldmVyc2UtZW5naW5lZXJpbmcgdGhlCisgICBOZW1vc29mdCBiaW5hcnkgcHdjeCBtb2R1bGUuIENhdmVhdCBlbXB0b3IuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworCisKKyNpZm5kZWYgUFdDX0RFQzFfSAorI2RlZmluZSBQV0NfREVDMV9ICisKK3ZvaWQgcHdjX2RlYzFfaW5pdChpbnQgdHlwZSwgaW50IHJlbGVhc2UsIHZvaWQgKmJ1ZmZlciwgdm9pZCAqcHJpdmF0ZV9kYXRhKTsKK3ZvaWQgcHdjX2RlYzFfZXhpdCh2b2lkKTsKKworI2VuZGlmCisKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWRlYzIzLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWRlYzIzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThmYTNmNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtZGVjMjMuYwpAQCAtMCwwICsxLDYyMyBAQAorLyogTGludXggZHJpdmVyIGZvciBQaGlsaXBzIHdlYmNhbQorICAgRGVjb21wcmVzc2lvbiBmb3IgY2hpcHNldCB2ZXJzaW9uIDIgZXQgMworICAgKEMpIDIwMDQgICAgICBMdWMgU2FpbGxhcmQgKGx1Y0BzYWlsbGFyZC5vcmcpCisKKyAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAorICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCisgICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyBhbmQgc3VwcG9ydCByZXF1ZXN0cyB0byA8bHVjQHNhaWxsYXJkLm9yZz4uCisgICBUaGUgZGVjb21wcmVzc2lvbiByb3V0aW5lcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYnkgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUKKyAgIE5lbW9zb2Z0IGJpbmFyeSBwd2N4IG1vZHVsZS4gQ2F2ZWF0IGVtcHRvci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisjaW5jbHVkZSAicHdjLXRpbW9uLmgiCisjaW5jbHVkZSAicHdjLWtpYXJhLmgiCisjaW5jbHVkZSAicHdjLWRlYzIzLmgiCisjaW5jbHVkZSAicHdjLWlvY3RsLmgiCisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworLyoqKioKKyAqCisgKgorICoKKyAqLworCisKK3N0YXRpYyB2b2lkIGZpbGxfdGFibGVfYTAwMCh1bnNpZ25lZCBpbnQgKnApCit7CisgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdGlhbF92YWx1ZXNbMTJdID0geworICAgICAweEZGQUQ5QjAwLCAweEZGRERFRTAwLCAweDAwMjIxMjAwLCAweDAwNTI2NTAwLAorICAgICAweEZGQzIxRTAwLCAweDAwM0RFMjAwLCAweEZGOTI0QjgwLCAweEZGRDJBMzAwLAorICAgICAweDAwMkQ1RDAwLCAweDAwNkRCNDgwLCAweEZGRUQzRTAwLCAweDAwMTJDMjAwCisgIH07CisgIHN0YXRpYyB1bnNpZ25lZCBpbnQgdmFsdWVzX2Rlcml2YXRlZFsxMl0gPSB7CisgICAgIDB4MDAwMEE0Q0EsIDB4MDAwMDQ0MjQsIDB4RkZGRkJCREMsIDB4RkZGRjVCMzYsCisgICAgIDB4MDAwMDdCQzQsIDB4RkZGRjg0M0MsIDB4MDAwMERCNjksIDB4MDAwMDVBQkEsCisgICAgIDB4RkZGRkE1NDYsIDB4RkZGRjI0OTcsIDB4MDAwMDI1ODQsIDB4RkZGRkRBN0MKKyAgfTsKKyAgdW5zaWduZWQgaW50IHRlbXBfdmFsdWVzWzEyXTsKKyAgaW50IGksajsKKworICBtZW1jcHkodGVtcF92YWx1ZXMsaW5pdGlhbF92YWx1ZXMsc2l6ZW9mKGluaXRpYWxfdmFsdWVzKSk7CisgIGZvciAoaT0wO2k8MjU2O2krKykKKyAgIHsKKyAgICAgZm9yIChqPTA7ajwxMjtqKyspCisgICAgICB7CisJKnArKyA9IHRlbXBfdmFsdWVzW2pdOworCXRlbXBfdmFsdWVzW2pdICs9IHZhbHVlc19kZXJpdmF0ZWRbal07CisgICAgICB9CisgICB9Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfdGFibGVfZDAwMCh1bnNpZ25lZCBjaGFyICpwKQoreworICBpbnQgYml0LGJ5dGU7CisKKyAgZm9yIChiaXQ9MDsgYml0PDg7IGJpdCsrKQorICAgeworICAgICB1bnNpZ25lZCBjaGFyIGJpdHBvd2VyID0gMTw8Yml0OworICAgICB1bnNpZ25lZCBjaGFyIG1hc2sgPSBiaXRwb3dlci0xOworICAgICBmb3IgKGJ5dGU9MDsgYnl0ZTwyNTY7IGJ5dGUrKykKKyAgICAgIHsKKwlpZiAoYnl0ZSAmIGJpdHBvd2VyKQorCSAgKnArKyA9IC0oYnl0ZSAmIG1hc2spOworCWVsc2UKKwkgICpwKysgPSAoYnl0ZSAmIG1hc2spOworICAgICAgfQorICAgfQorfQorCisvKgorICoKKyAqIEtpYXJhOiAwIDw9IHZlciA8PSA3CisgKiBUaW1vbjogMCA8PSB2ZXIgPD0gMTUKKyAqCisgKi8KK3N0YXRpYyB2b2lkIGZpbGxfdGFibGVfY29sb3IodW5zaWduZWQgaW50IHZlcnNpb24sIGNvbnN0IHVuc2lnbmVkIGludCAqcm9tdGFibGUsIAorICAgIHVuc2lnbmVkIGNoYXIgKnAwMDA0LCAKKyAgICB1bnNpZ25lZCBjaGFyICpwODAwNCkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50ICp0YWJsZTsKKyAgdW5zaWduZWQgY2hhciAqcDAsICpwODsKKyAgaW50IGksaixrOworICBpbnQgZGwsYml0LHB3OworCisgIHJvbXRhYmxlICs9IHZlcnNpb24qMjU2OworCisgIGZvciAoaT0wOyBpPDI7IGkrKykKKyAgIHsKKyAgICAgdGFibGUgPSByb210YWJsZSArIGkqMTI4OworCisgICAgIGZvciAoZGw9MDsgZGw8MTY7IGRsKyspCisgICAgICB7CisJcDAgPSBwMDAwNCArIChpPDwxNCkgKyAoZGw8PDEwKTsKKwlwOCA9IHA4MDA0ICsgKGk8PDEyKSArIChkbDw8OCk7CisKKwlmb3IgKGo9MDsgajw4OyBqKysgLCB0YWJsZSsrLCBwMCs9MTI4KQorCSB7CisJICAgZm9yIChrPTA7IGs8MTY7IGsrKykKKwkgICAgeworCSAgICAgIGlmIChrPT0wKQorCQliaXQ9MTsKKwkgICAgICBlbHNlIGlmIChrPj0xICYmIGs8MykKKwkJYml0PSh0YWJsZVswXT4+MTUpJjc7CisJICAgICAgZWxzZSBpZiAoaz49MyAmJiBrPDYpCisJCWJpdD0odGFibGVbMF0+PjEyKSY3OworCSAgICAgIGVsc2UgaWYgKGs+PTYgJiYgazwxMCkKKwkJYml0PSh0YWJsZVswXT4+OSkmNzsKKwkgICAgICBlbHNlIGlmIChrPj0xMCAmJiBrPDEzKQorCQliaXQ9KHRhYmxlWzBdPj42KSY3OworCSAgICAgIGVsc2UgaWYgKGs+PTEzICYmIGs8MTUpCisJCWJpdD0odGFibGVbMF0+PjMpJjc7CisJICAgICAgZWxzZQorCQliaXQ9KHRhYmxlWzBdKSY3OworCSAgICAgIGlmIChrID09IDApCisJCSoodW5zaWduZWQgY2hhciAqKXA4KysgPSA4OworCSAgICAgIGVsc2UKKwkJKih1bnNpZ25lZCBjaGFyICopcDgrKyA9IGogLSBiaXQ7CisJICAgICAgKih1bnNpZ25lZCBjaGFyICopcDgrKyA9IGJpdDsKKworCSAgICAgIHB3ID0gMTw8Yml0OworCSAgICAgIHAwW2srMHgwMF0gPSAoMSpwdykgICsgMHg4MDsKKwkgICAgICBwMFtrKzB4MTBdID0gKDIqcHcpICArIDB4ODA7CisJICAgICAgcDBbaysweDIwXSA9ICgzKnB3KSAgKyAweDgwOworCSAgICAgIHAwW2srMHgzMF0gPSAoNCpwdykgICsgMHg4MDsKKwkgICAgICBwMFtrKzB4NDBdID0gKC1wdykgICArIDB4ODA7CisJICAgICAgcDBbaysweDUwXSA9ICgyKi1wdykgKyAweDgwOworCSAgICAgIHAwW2srMHg2MF0gPSAoMyotcHcpICsgMHg4MDsKKwkgICAgICBwMFtrKzB4NzBdID0gKDQqLXB3KSArIDB4ODA7CisJICAgIH0gLyogZW5kIG9mIGZvciAoaz0wOyBrPDE2OyBrKyssIHA4KyspICovCisJIH0gLyogZW5kIG9mIGZvciAoaj0wOyBqPDg7IGorKyAsIHRhYmxlKyspICovCisgICAgICB9IC8qIGVuZCBvZiBmb3IgKGRsPTA7IGRsPDE2OyBkbCsrKSAqLworICAgfSAvKiBlbmQgb2YgZm9yIChpPTA7IGk8MjsgaSsrKSAqLworfQorCisvKgorICogcHJlY2lzaW9uID0gKHBkZXYtPnh4ICsgcGRldi0+eXkpCisgKgorICovCitzdGF0aWMgdm9pZCBmaWxsX3RhYmxlX2RjMDBfZDgwMCh1bnNpZ25lZCBpbnQgcHJlY2lzaW9uLCB1bnNpZ25lZCBpbnQgKnBkYzAwLCB1bnNpZ25lZCBpbnQgKnBkODAwKQoreworICBpbnQgaTsKKyAgdW5zaWduZWQgaW50IG9mZnNldDEsIG9mZnNldDI7CisgCisgIGZvcihpPTAsb2Zmc2V0MT0weDQwMDAsIG9mZnNldDI9MDsgaTwyNTYgOyBpKyssb2Zmc2V0MSs9MHg3QkM0LCBvZmZzZXQyKz0weDdCQzQpCisgICB7CisgICAgIHVuc2lnbmVkIGludCBtc2IgPSBvZmZzZXQxID4+IDE1OworCisgICAgIGlmICggbXNiID4gMjU1KQorICAgICAgeworCWlmIChtc2IpCisJICBtc2I9MDsKKwllbHNlCisJICBtc2I9MjU1OworICAgICAgfQorCisgICAgICpwZGMwMCsrID0gbXNiIDw8IHByZWNpc2lvbjsKKyAgICAgKnBkODAwKysgPSBvZmZzZXQyOworICAgfQorCit9CisKKy8qCisgKiBzdHJ1Y3QgeworICogICB1bnNpZ25lZCBjaGFyIG9wOwkgICAgLy8gb3BlcmF0aW9uIHRvIGV4ZWN1dGUKKyAqICAgdW5zaWduZWQgY2hhciBiaXRzOyAgICAvLyBiaXRzIHVzZSB0byBwZXJmb3JtIG9wZXJhdGlvbgorICogICB1bnNpZ25lZCBjaGFyIG9mZnNldDE7IC8vIG9mZnNldCB0byBhZGQgdG8gYWNjZXNzIGluIHRoZSB0YWJsZV8wMDA0ICUgMTYKKyAqICAgdW5zaWduZWQgY2hhciBvZmZzZXQyOyAvLyBvZmZzZXQgdG8gYWRkIHRvIGFjY2VzcyBpbiB0aGUgdGFibGVfMDAwNAorICogfQorICoKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCB0YWJsZV9vcHNbXSA9IHsKKzB4MDIsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMywweDAxLDB4MDAsIDB4MDAsMHgwNCwweDAxLDB4MTAsIDB4MDAsMHgwNiwweDAxLDB4MzAsCisweDAyLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDMsMHgwMSwweDQwLCAweDAwLDB4MDUsMHgwMSwweDIwLCAweDAxLDB4MDAsMHgwMCwweDAwLAorMHgwMiwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAzLDB4MDEsMHgwMCwgMHgwMCwweDA0LDB4MDEsMHg1MCwgMHgwMCwweDA1LDB4MDIsMHgwMCwKKzB4MDIsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMywweDAxLDB4NDAsIDB4MDAsMHgwNSwweDAzLDB4MDAsIDB4MDEsMHgwMCwweDAwLDB4MDAsCisweDAyLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDMsMHgwMSwweDAwLCAweDAwLDB4MDQsMHgwMSwweDEwLCAweDAwLDB4MDYsMHgwMiwweDEwLAorMHgwMiwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAzLDB4MDEsMHg0MCwgMHgwMCwweDA1LDB4MDEsMHg2MCwgMHgwMSwweDAwLDB4MDAsMHgwMCwKKzB4MDIsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMywweDAxLDB4MDAsIDB4MDAsMHgwNCwweDAxLDB4NTAsIDB4MDAsMHgwNSwweDAyLDB4NDAsCisweDAyLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDMsMHgwMSwweDQwLCAweDAwLDB4MDUsMHgwMywweDQwLCAweDAxLDB4MDAsMHgwMCwweDAwLAorMHgwMiwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAzLDB4MDEsMHgwMCwgMHgwMCwweDA0LDB4MDEsMHgxMCwgMHgwMCwweDA2LDB4MDEsMHg3MCwKKzB4MDIsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMywweDAxLDB4NDAsIDB4MDAsMHgwNSwweDAxLDB4MjAsIDB4MDEsMHgwMCwweDAwLDB4MDAsCisweDAyLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDMsMHgwMSwweDAwLCAweDAwLDB4MDQsMHgwMSwweDUwLCAweDAwLDB4MDUsMHgwMiwweDAwLAorMHgwMiwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAzLDB4MDEsMHg0MCwgMHgwMCwweDA1LDB4MDMsMHgwMCwgMHgwMSwweDAwLDB4MDAsMHgwMCwKKzB4MDIsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMywweDAxLDB4MDAsIDB4MDAsMHgwNCwweDAxLDB4MTAsIDB4MDAsMHgwNiwweDAyLDB4NTAsCisweDAyLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDMsMHgwMSwweDQwLCAweDAwLDB4MDUsMHgwMSwweDYwLCAweDAxLDB4MDAsMHgwMCwweDAwLAorMHgwMiwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAzLDB4MDEsMHgwMCwgMHgwMCwweDA0LDB4MDEsMHg1MCwgMHgwMCwweDA1LDB4MDIsMHg0MCwKKzB4MDIsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMywweDAxLDB4NDAsIDB4MDAsMHgwNSwweDAzLDB4NDAsIDB4MDEsMHgwMCwweDAwLDB4MDAKK307CisKKy8qCisgKiBUT0RPOiBtdWx0aXBseSBieSA0IGFsbCB2YWx1ZXMKKyAqCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgTXVsSWR4WzI1Nl0gPSB7CisgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAwLCAxLCAyLCAzLCAwLCAxLCAyLCAzLCAwLCAxLCAyLCAzLCAwLCAxLCAyLCAzLAorIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDIsIDIsIDIsIDIsIDMsIDMsIDMsIDMsCisgNCwgNCwgNCwgNCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNCwgNCwgNCwgNCwKKyA2LCA3LCA4LCA5LCA3LDEwLDExLCA4LCA4LDExLDEwLCA3LCA5LCA4LCA3LCA2LAorIDQsIDUsIDUsIDQsIDQsIDUsIDUsIDQsIDQsIDUsIDUsIDQsIDQsIDUsIDUsIDQsCisgMSwgMywgMCwgMiwgMSwgMywgMCwgMiwgMSwgMywgMCwgMiwgMSwgMywgMCwgMiwKKyAwLCAzLCAzLCAwLCAxLCAyLCAyLCAxLCAyLCAxLCAxLCAyLCAzLCAwLCAwLCAzLAorIDAsIDEsIDIsIDMsIDMsIDIsIDEsIDAsIDMsIDIsIDEsIDAsIDAsIDEsIDIsIDMsCisgMSwgMSwgMSwgMSwgMywgMywgMywgMywgMCwgMCwgMCwgMCwgMiwgMiwgMiwgMiwKKyA3LDEwLDExLCA4LCA5LCA4LCA3LCA2LCA2LCA3LCA4LCA5LCA4LDExLDEwLCA3LAorIDQsIDUsIDUsIDQsIDUsIDQsIDQsIDUsIDUsIDQsIDQsIDUsIDQsIDUsIDUsIDQsCisgNywgOSwgNiwgOCwxMCwgOCwgNywxMSwxMSwgNywgOCwxMCwgOCwgNiwgOSwgNywKKyAxLCAzLCAwLCAyLCAyLCAwLCAzLCAxLCAyLCAwLCAzLCAxLCAxLCAzLCAwLCAyLAorIDEsIDIsIDIsIDEsIDMsIDAsIDAsIDMsIDAsIDMsIDMsIDAsIDIsIDEsIDEsIDIsCisxMCwgOCwgNywxMSwgOCwgNiwgOSwgNywgNywgOSwgNiwgOCwxMSwgNywgOCwxMAorfTsKKworCisKK3ZvaWQgcHdjX2RlYzIzX2luaXQoaW50IHR5cGUsIGludCByZWxlYXNlLCB1bnNpZ25lZCBjaGFyICptb2RlLCB2b2lkICpkYXRhKQoreworICBpbnQgZmxhZ3M7CisgIHN0cnVjdCBwd2NfZGVjMjNfcHJpdmF0ZSAqcGRldiA9IGRhdGE7CisgIHJlbGVhc2UgPSByZWxlYXNlOworCisgIHN3aXRjaCAodHlwZSkKKyAgIHsKKyAgICBjYXNlIDcyMDoKKyAgICBjYXNlIDczMDoKKyAgICBjYXNlIDc0MDoKKyAgICBjYXNlIDc1MDoKKyAgICAgIGZsYWdzID0gbW9kZVsyXSYweDE4OwkvKiBvdXI6IGZsYWdzID0gOCwgbW9kZVsyXT09ZTggKi8KKyAgICAgIGlmIChmbGFncz09OCkKKwlwZGV2LT56eiA9IDc7CisgICAgICBlbHNlIGlmIChmbGFncz09MHgxMCkKKwlwZGV2LT56eiA9IDg7CisgICAgICBlbHNlCisJcGRldi0+enogPSA2OworICAgICAgZmxhZ3MgPSBtb2RlWzJdPj41OwkvKiBvdXI6IDcgKi8KKworICAgICAgZmlsbF90YWJsZV9jb2xvcihmbGFncywgKHVuc2lnbmVkIGludCAqKUtpYXJhUm9tVGFibGUsIHBkZXYtPnRhYmxlXzAwMDQsIHBkZXYtPnRhYmxlXzgwMDQpOworICAgICAgYnJlYWs7CisKKworICAgIGNhc2UgNjc1OgorICAgIGNhc2UgNjgwOgorICAgIGNhc2UgNjkwOgorICAgICAgZmxhZ3MgPSBtb2RlWzJdJjY7CisgICAgICBpZiAoZmxhZ3M9PTIpCisJcGRldi0+enogPSA3OworICAgICAgZWxzZSBpZiAoZmxhZ3M9PTQpCisJcGRldi0+enogPSA4OworICAgICAgZWxzZQorCXBkZXYtPnp6ID0gNjsKKyAgICAgIGZsYWdzID0gbW9kZVsyXT4+MzsKKworICAgICAgZmlsbF90YWJsZV9jb2xvcihmbGFncywgKHVuc2lnbmVkIGludCAqKVRpbW9uUm9tVGFibGUsIHBkZXYtPnRhYmxlXzAwMDQsIHBkZXYtPnRhYmxlXzgwMDQpOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgLyogTm90IHN1cHBvcnRlZCAqLworICAgICAgcmV0dXJuOworICAgfQorCisgIC8qICogKiAqICoqICovCisgIHBkZXYtPnh4ID0gOCAtIHBkZXYtPnp6OworICBwZGV2LT55eSA9IDE1IC0gcGRldi0+eHg7CisgIHBkZXYtPnp6bWFzayA9IDB4RkY+PnBkZXYtPnh4OworICAvL3BkZXYtPnp6bWFzayA9ICgxVTw8cGRldi0+enopLTE7CisKKworICBmaWxsX3RhYmxlX2RjMDBfZDgwMChwZGV2LT54eCArIHBkZXYtPnl5LCBwZGV2LT50YWJsZV9kYzAwLCBwZGV2LT50YWJsZV9kODAwKTsKKyAgZmlsbF90YWJsZV9hMDAwKHBkZXYtPnRhYmxlX2EwMDQpOworICBmaWxsX3RhYmxlX2QwMDAocGRldi0+dGFibGVfZDAwNCk7Cit9CisKKworLyoKKyAqIFRvIG1hbmFnZSB0aGUgc3RyZWFtLCB3ZSBrZWVwIGluIGEgMzIgYml0cyB2YXJpYWJsZXMsCisgKiB0aGUgbmV4dCBiaXRzIGluIHRoZSBzdHJlYW0uIGZpbGxfcmVzZXJ2b2lyKCkgYWRkIHRvCisgKiB0aGUgcmVzZXJ2b2lyIGF0IGxlYXN0IHdhbnRlZCBuYml0cy4KKyAqCisgKgorICovCisjZGVmaW5lIGZpbGxfbmJpdHMocmVzZXJ2b2lyLG5iaXRzX2luX3Jlc2Vydm9pcixzdHJlYW0sbmJpdHNfd2FudGVkKSBkbyB7IFwKKyAgIHdoaWxlIChuYml0c19pbl9yZXNlcnZvaXI8bmJpdHNfd2FudGVkKSBcCisgICAgeyBcCisgICAgICByZXNlcnZvaXIgfD0gKCooc3RyZWFtKSsrKSA8PCBuYml0c19pbl9yZXNlcnZvaXI7IFwKKyAgICAgIG5iaXRzX2luX3Jlc2Vydm9pcis9ODsgXAorICAgIH0gXAorfSAgd2hpbGUoMCk7CisKKyNkZWZpbmUgZ2V0X25iaXRzKHJlc2Vydm9pcixuYml0c19pbl9yZXNlcnZvaXIsc3RyZWFtLG5iaXRzX3dhbnRlZCxyZXN1bHQpIGRvIHsgXAorICAgZmlsbF9uYml0cyhyZXNlcnZvaXIsbmJpdHNfaW5fcmVzZXJ2b2lyLHN0cmVhbSxuYml0c193YW50ZWQpOyBcCisgICByZXN1bHQgPSAocmVzZXJ2b2lyKSAmICgoMVU8PG5iaXRzX3dhbnRlZCktMSk7IFwKKyAgIHJlc2Vydm9pciA+Pj0gbmJpdHNfd2FudGVkOyBcCisgICBuYml0c19pbl9yZXNlcnZvaXIgLT0gbmJpdHNfd2FudGVkOyBcCit9ICB3aGlsZSgwKTsKKworCisKK3N0YXRpYyB2b2lkIERlY29tcHJlc3NCYW5kMjMoY29uc3Qgc3RydWN0IHB3Y19kZWMyM19wcml2YXRlICpwZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpyYXd5dXYsCisJCQkgICAgIHVuc2lnbmVkIGNoYXIgKnBsYW5hcl95LAorCQkJICAgICB1bnNpZ25lZCBjaGFyICpwbGFuYXJfdSwKKwkJCSAgICAgdW5zaWduZWQgY2hhciAqcGxhbmFyX3YsCisJCQkgICAgIHVuc2lnbmVkIGludCBpbWFnZV94LAkJLyogYWthIG51bWJlciBvZiBwaXhlbHMgd2FudGVkID8/PyAqLworCQkJICAgICB1bnNpZ25lZCBpbnQgcGl4ZWxzX3Blcl9saW5lLAkvKiBha2EgbnVtYmVyIG9mIHBpeGVscyBwZXIgbGluZSAqLworCQkJICAgICBpbnQgZmxhZ3MpCit7CisKKworICB1bnNpZ25lZCBpbnQgcmVzZXJ2b2lyLCBuYml0c19pbl9yZXNlcnZvaXI7CisgIGludCBmaXJzdF80X2JpdHM7CisgIHVuc2lnbmVkIGludCBieXRlc19wZXJfY2hhbm5lbDsKKyAgaW50IGxpbmVfc2l6ZTsJLyogc2l6ZSBvZiB0aGUgbGluZSAoNFkrVStWKSAqLworICBpbnQgcGFzc2VzOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpwdGFibGUwMDA0LCAqcHRhYmxlODAwNDsKKworICBpbnQgZXZlbl9saW5lOworICB1bnNpZ25lZCBpbnQgdGVtcF9jb2xvcnNbMTZdOworICBpbnQgbmJsb2NrczsKKworICBjb25zdCB1bnNpZ25lZCBjaGFyICpzdHJlYW07CisgIHVuc2lnbmVkIGNoYXIgKmRlc3RfeSwgKmRlc3RfdT1OVUxMLCAqZGVzdF92PU5VTEw7CisgIHVuc2lnbmVkIGludCBvZmZzZXRfdG9fcGxhbmVfdSwgb2Zmc2V0X3RvX3BsYW5lX3Y7CisKKyAgaW50IGk7CisKKworICByZXNlcnZvaXIgPSAwOworICBuYml0c19pbl9yZXNlcnZvaXIgPSAwOworICBzdHJlYW0gPSByYXd5dXYrMTsJLyogVGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHN0cmVhbSBpcyBza2lwcGVkICovCisgIGV2ZW5fbGluZSA9IDE7CisKKyAgZ2V0X25iaXRzKHJlc2Vydm9pcixuYml0c19pbl9yZXNlcnZvaXIsc3RyZWFtLDQsZmlyc3RfNF9iaXRzKTsKKworICBsaW5lX3NpemUgPSBwaXhlbHNfcGVyX2xpbmUqMzsKKworICBmb3IgKHBhc3Nlcz0wO3Bhc3NlczwyO3Bhc3NlcysrKQorICAgeworICAgICBpZiAocGFzc2VzPT0wKQorICAgICAgeworCWJ5dGVzX3Blcl9jaGFubmVsID0gcGl4ZWxzX3Blcl9saW5lOworCWRlc3RfeSA9IHBsYW5hcl95OworCW5ibG9ja3MgPSBpbWFnZV94LzQ7CisgICAgICB9CisgICAgIGVsc2UKKyAgICAgIHsKKwkvKiBGb3JtYXQgcGxhbmFyOiBBbGwgWSwgdGhlbiBhbGwgVSwgdGhlbiBhbGwgViAqLworCWJ5dGVzX3Blcl9jaGFubmVsID0gcGl4ZWxzX3Blcl9saW5lLzI7CisJZGVzdF91ID0gcGxhbmFyX3U7CisJZGVzdF92ID0gcGxhbmFyX3Y7CisJZGVzdF95ID0gZGVzdF91OworCW5ibG9ja3MgPSBpbWFnZV94Lzg7CisgICAgICB9CisKKyAgICAgb2Zmc2V0X3RvX3BsYW5lX3UgPSBieXRlc19wZXJfY2hhbm5lbCoyOworICAgICBvZmZzZXRfdG9fcGxhbmVfdiA9IGJ5dGVzX3Blcl9jaGFubmVsKjM7CisgICAgIC8qCisgICAgIHByaW50ZigiYnl0ZXNfcGVyX2NoYW5uZWwgPSAlZFxuIixieXRlc19wZXJfY2hhbm5lbCk7CisgICAgIHByaW50Zigib2Zmc2V0X3RvX3BsYW5lX3UgPSAlZFxuIixvZmZzZXRfdG9fcGxhbmVfdSk7CisgICAgIHByaW50Zigib2Zmc2V0X3RvX3BsYW5lX3YgPSAlZFxuIixvZmZzZXRfdG9fcGxhbmVfdik7CisgICAgICovCisKKyAgICAgd2hpbGUgKG5ibG9ja3MtLT4wKQorICAgICAgeworCXVuc2lnbmVkIGludCBncmF5X2luZGV4OworCisJZmlsbF9uYml0cyhyZXNlcnZvaXIsbmJpdHNfaW5fcmVzZXJ2b2lyLHN0cmVhbSwxNik7CisJZ3JheV9pbmRleCA9IHJlc2Vydm9pciAmIHBkZXYtPnp6bWFzazsKKwlyZXNlcnZvaXIgPj49IHBkZXYtPnp6OworCW5iaXRzX2luX3Jlc2Vydm9pciAtPSBwZGV2LT56ejsKKworCWZpbGxfbmJpdHMocmVzZXJ2b2lyLG5iaXRzX2luX3Jlc2Vydm9pcixzdHJlYW0sMik7CisKKwlpZiAoIChyZXNlcnZvaXIgJiAzKSA9PSAwKQorCSB7CisJICAgcmVzZXJ2b2lyPj49MjsKKwkgICBuYml0c19pbl9yZXNlcnZvaXItPTI7CisJICAgZm9yIChpPTA7aTwxNjtpKyspCisJICAgICB0ZW1wX2NvbG9yc1tpXSA9IHBkZXYtPnRhYmxlX2RjMDBbZ3JheV9pbmRleF07CisKKwkgfQorCWVsc2UKKwkgeworCSAgIHVuc2lnbmVkIGludCBjaGFubmVsX3YsIG9mZnNldDE7CisKKwkgICAvKiBzd2FwIGJpdCAwIGFuZCAyIG9mIG9mZnNldF9PUiAqLworCSAgIGNoYW5uZWxfdiA9ICgocmVzZXJ2b2lyICYgMSkgPDwgMikgfCAocmVzZXJ2b2lyICYgMikgfCAoKHJlc2Vydm9pciAmIDQpPj4yKTsKKwkgICByZXNlcnZvaXI+Pj0zOworCSAgIG5iaXRzX2luX3Jlc2Vydm9pci09MzsKKworCSAgIGZvciAoaT0wO2k8MTY7aSsrKQorCSAgICAgdGVtcF9jb2xvcnNbaV0gPSBwZGV2LT50YWJsZV9kODAwW2dyYXlfaW5kZXhdOworCisJICAgcHRhYmxlMDAwNCA9IHBkZXYtPnRhYmxlXzAwMDQgKyAocGFzc2VzKjE2Mzg0KSArIChmaXJzdF80X2JpdHMqMTAyNCkgKyAoY2hhbm5lbF92KjEyOCk7CisJICAgcHRhYmxlODAwNCA9IHBkZXYtPnRhYmxlXzgwMDQgKyAocGFzc2VzKjQwOTYpICArIChmaXJzdF80X2JpdHMqMjU2KSAgKyAoY2hhbm5lbF92KjMyKTsKKworCSAgIG9mZnNldDEgPSAwOworCSAgIHdoaWxlKDEpIAorCSAgICB7CisJICAgICAgdW5zaWduZWQgaW50IGluZGV4X2luX3RhYmxlX29wcywgb3AsIHJvd3M9MDsKKwkgICAgICBmaWxsX25iaXRzKHJlc2Vydm9pcixuYml0c19pbl9yZXNlcnZvaXIsc3RyZWFtLDE2KTsKKworCSAgICAgIC8qIG1vZGUgaXMgMCwxIG9yIDIgKi8KKwkgICAgICBpbmRleF9pbl90YWJsZV9vcHMgPSAocmVzZXJ2b2lyJjB4M0YpOworCSAgICAgIG9wID0gdGFibGVfb3BzWyBpbmRleF9pbl90YWJsZV9vcHMqNCBdOworCSAgICAgIGlmIChvcCA9PSAyKQorCSAgICAgICB7CisJCSByZXNlcnZvaXIgPj49IDI7CisJCSBuYml0c19pbl9yZXNlcnZvaXIgLT0gMjsKKwkJIGJyZWFrOwkvKiBleGl0IHRoZSB3aGlsZSgxKSAqLworCSAgICAgICB9CisJICAgICAgaWYgKG9wID09IDApCisJICAgICAgIHsKKwkJIHVuc2lnbmVkIGludCBzaGlmdDsKKworCQkgb2Zmc2V0MSA9IChvZmZzZXQxICsgdGFibGVfb3BzW2luZGV4X2luX3RhYmxlX29wcyo0KzJdKSAmIDB4MEY7CisJCSBzaGlmdCA9IHRhYmxlX29wc1sgaW5kZXhfaW5fdGFibGVfb3BzKjQrMSBdOworCQkgcmVzZXJ2b2lyID4+PSBzaGlmdDsKKwkJIG5iaXRzX2luX3Jlc2Vydm9pciAtPSBzaGlmdDsKKwkJIHJvd3MgPSBwdGFibGUwMDA0WyBvZmZzZXQxICsgdGFibGVfb3BzW2luZGV4X2luX3RhYmxlX29wcyo0KzNdIF07CisJICAgICAgIH0KKwkgICAgICBpZiAob3AgPT0gMSkKKwkgICAgICAgeworCQkgIC8qIDEwYml0cyBbIHh4eHggeHh4eCB5eXl5IDAwMCBdCisJCSAgICogeXl5ID0+IG9mZnNldCBpbiB0aGUgdGFibGU4MDA0CisJCSAgICogeHh4ID0+IG9mZnNldCBpbiB0aGUgdGFibGVkMDA0CisJCSAgICovCisJCSB1bnNpZ25lZCBpbnQgbWFzaywgc2hpZnQ7CisJCSB1bnNpZ25lZCBpbnQgY29sMSwgcm93MSwgdG90YWxfYml0czsKKworCQkgb2Zmc2V0MSA9IChvZmZzZXQxICsgKChyZXNlcnZvaXI+PjMpJjB4MEYpKzEpICYgMHgwRjsKKworCQkgY29sMSA9IChyZXNlcnZvaXI+PjcpICYgMHhGRjsKKwkJIHJvdzEgPSBwdGFibGU4MDA0IFsgb2Zmc2V0MSoyIF07CisKKwkJIC8qIEJpdCBtYXNrIHRhYmxlICovCisJCSBtYXNrID0gcGRldi0+dGFibGVfZDAwNFsgKHJvdzE8PDgpICsgY29sMSBdOworCQkgc2hpZnQgPSBwdGFibGU4MDA0IFsgb2Zmc2V0MSoyICsgMV07CisJCSByb3dzID0gKChtYXNrIDw8IHNoaWZ0KSArIDB4ODApICYgMHhGRjsKKworCQkgdG90YWxfYml0cyA9IHJvdzEgKyA4OworCQkgcmVzZXJ2b2lyID4+PSB0b3RhbF9iaXRzOworCQkgbmJpdHNfaW5fcmVzZXJ2b2lyIC09IHRvdGFsX2JpdHM7CisJICAgICAgIH0KKwkgICAgICAgeworCQkgY29uc3QgdW5zaWduZWQgaW50ICp0YWJsZV9hMDA0ID0gcGRldi0+dGFibGVfYTAwNCArIHJvd3MqMTI7CisJCSB1bnNpZ25lZCBpbnQgKnBvZmZzZXQgPSBNdWxJZHggKyBvZmZzZXQxKjE2OwkvKiA2NC80IChpbnQpICovCisJCSBmb3IgKGk9MDtpPDE2O2krKykKKwkJICB7CisJCSAgICB0ZW1wX2NvbG9yc1tpXSArPSB0YWJsZV9hMDA0WyAqcG9mZnNldCBdOworCQkgICAgcG9mZnNldCsrOworCQkgIH0KKwkgICAgICAgfQorCSAgIH0KKwkgfQorI2RlZmluZSBVU0VfU0lHTkVEX0lOVF9GT1JfQ09MT1IKKyNpZmRlZiBVU0VfU0lHTkVEX0lOVF9GT1JfQ09MT1IKKyMgIGRlZmluZSBDTEFNUCh4KSAoKHgpPjI1NT8yNTU6KCh4KTwwPzA6eCkpCisjZWxzZQorIyAgZGVmaW5lIENMQU1QKHgpICgoeCk+MjU1PzI1NTp4KQorI2VuZGlmCisKKwlpZiAocGFzc2VzID09IDApCisJIHsKKyNpZmRlZiBVU0VfU0lHTkVEX0lOVF9GT1JfQ09MT1IKKwkgICBjb25zdCBpbnQgKmMgPSB0ZW1wX2NvbG9yczsKKyNlbHNlCisJICAgY29uc3QgdW5zaWduZWQgaW50ICpjID0gdGVtcF9jb2xvcnM7CisjZW5kaWYKKwkgICB1bnNpZ25lZCBjaGFyICpkOworCisJICAgZCA9IGRlc3RfeTsKKwkgICBmb3IgKGk9MDtpPDQ7aSsrLGMrKykKKwkgICAgICpkKysgPSBDTEFNUCgoKmMpID4+IHBkZXYtPnl5KTsKKworCSAgIGQgPSBkZXN0X3kgKyBieXRlc19wZXJfY2hhbm5lbDsKKwkgICBmb3IgKGk9MDtpPDQ7aSsrLGMrKykKKwkgICAgICpkKysgPSBDTEFNUCgoKmMpID4+IHBkZXYtPnl5KTsKKworCSAgIGQgPSBkZXN0X3kgKyBvZmZzZXRfdG9fcGxhbmVfdTsKKwkgICBmb3IgKGk9MDtpPDQ7aSsrLGMrKykKKwkgICAgICpkKysgPSBDTEFNUCgoKmMpID4+IHBkZXYtPnl5KTsKKworCSAgIGQgPSBkZXN0X3kgKyBvZmZzZXRfdG9fcGxhbmVfdjsKKwkgICBmb3IgKGk9MDtpPDQ7aSsrLGMrKykKKwkgICAgICpkKysgPSBDTEFNUCgoKmMpID4+IHBkZXYtPnl5KTsKKworCSAgIGRlc3RfeSArPSA0OworCSB9CisJZWxzZSBpZiAocGFzc2VzID09IDEpCisJIHsKKyNpZmRlZiBVU0VfU0lHTkVEX0lOVF9GT1JfQ09MT1IKKwkgICBpbnQgKmMxID0gdGVtcF9jb2xvcnM7CisJICAgaW50ICpjMiA9IHRlbXBfY29sb3JzKzQ7CisjZWxzZQorCSAgIHVuc2lnbmVkIGludCAqYzEgPSB0ZW1wX2NvbG9yczsKKwkgICB1bnNpZ25lZCBpbnQgKmMyID0gdGVtcF9jb2xvcnMrNDsKKyNlbmRpZgorCSAgIHVuc2lnbmVkIGNoYXIgKmQ7CisKKwkgICBkID0gZGVzdF95OworCSAgIGZvciAoaT0wO2k8NDtpKyssYzErKyxjMisrKQorCSAgICB7CisJICAgICAgKmQrKyA9IENMQU1QKCgqYzEpID4+IHBkZXYtPnl5KTsKKwkgICAgICAqZCsrID0gQ0xBTVAoKCpjMikgPj4gcGRldi0+eXkpOworCSAgICB9CisJICAgYzEgPSB0ZW1wX2NvbG9ycysxMjsKKwkgICAvL2MyID0gdGVtcF9jb2xvcnMrODsKKwkgICBkID0gZGVzdF95ICsgYnl0ZXNfcGVyX2NoYW5uZWw7CisJICAgZm9yIChpPTA7aTw0O2krKyxjMSsrLGMyKyspCisJICAgIHsKKwkgICAgICAqZCsrID0gQ0xBTVAoKCpjMSkgPj4gcGRldi0+eXkpOworCSAgICAgICpkKysgPSBDTEFNUCgoKmMyKSA+PiBwZGV2LT55eSk7CisJICAgIH0KKworCSAgIGlmIChldmVuX2xpbmUpCS8qIEVhY2ggbGluZSwgc3dhcCB1L3YgKi8KKwkgICAgeworCSAgICAgIGV2ZW5fbGluZT0wOworCSAgICAgIGRlc3RfeSA9IGRlc3RfdjsKKwkgICAgICBkZXN0X3UgKz0gODsKKwkgICAgfQorCSAgIGVsc2UKKwkgICAgeworCSAgICAgIGV2ZW5fbGluZT0xOworCSAgICAgIGRlc3RfeSA9IGRlc3RfdTsKKwkgICAgICBkZXN0X3YgKz0gODsKKwkgICAgfQorCSB9CisKKyAgICAgIH0gLyogZW5kIG9mIHdoaWxlIChuYmxvY2tzLS0+MCkgKi8KKworICAgfSAvKiBlbmQgb2YgZm9yIChwYXNzZXM9MDtwYXNzZXM8MjtwYXNzZXMrKykgKi8KKworfQorCisKKy8qKgorICoKKyAqIGltYWdlOiBzaXplIG9mIHRoZSBpbWFnZSB3YW50ZWQKKyAqIHZpZXcgOiBzaXplIG9mIHRoZSBpbWFnZSByZXR1cm5lZCBieSB0aGUgY2FtZXJhCisgKiBvZmZzZXQ6ICh4LHkpIHRvIGRpc3BsYXllciBpbWFnZSBpbiB0aGUgdmlldworICoKKyAqIHNyYzogcmF3IGRhdGEKKyAqIGRzdDogaW1hZ2Ugb3V0cHV0CisgKiBmbGFnczogUFdDWF9GTEFHX1BMQU5BUgorICogcGRldjogcHJpdmF0ZSBidWZmZXIKKyAqIGJhbmRsZW5ndGg6CisgKgorICovCit2b2lkIHB3Y19kZWMyM19kZWNvbXByZXNzKGNvbnN0IHN0cnVjdCBwd2NfY29vcmQgKmltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBwd2NfY29vcmQgKnZpZXcsCisJCQkgICAgY29uc3Qgc3RydWN0IHB3Y19jb29yZCAqb2Zmc2V0LAorCQkJICAgIGNvbnN0IHZvaWQgKnNyYywKKwkJCSAgICB2b2lkICpkc3QsCisJCQkgICAgaW50IGZsYWdzLAorCQkJICAgIGNvbnN0IHZvaWQgKmRhdGEsCisJCQkgICAgaW50IGJhbmRsZW5ndGgpCit7CisgIGNvbnN0IHN0cnVjdCBwd2NfZGVjMjNfcHJpdmF0ZSAqcGRldiA9IGRhdGE7CisgIHVuc2lnbmVkIGNoYXIgKnBvdXQsICpwb3V0X3BsYW5hcl95PU5VTEwsICpwb3V0X3BsYW5hcl91PU5VTEwsICpwb3V0X3BsYW5hcl92PU5VTEw7CisgIGludCBpLG4sc3RyaWRlLHBpeGVsX3NpemU7CisKKworICBpZiAoZmxhZ3MgJiBQV0NYX0ZMQUdfQkFZRVIpCisgICB7CisgICAgIHBvdXQgPSBkc3QgKyAodmlldy0+eCAqIG9mZnNldC0+eSkgKyBvZmZzZXQtPng7CisgICAgIHBpeGVsX3NpemUgPSB2aWV3LT54ICogNDsKKyAgIH0KKyAgZWxzZQorICAgeworICAgICBuID0gdmlldy0+eCAqIHZpZXctPnk7CisKKyAgICAgLyogb2Zmc2V0IGluIFkgcGxhbmUgKi8KKyAgICAgc3RyaWRlID0gdmlldy0+eCAqIG9mZnNldC0+eTsKKyAgICAgcG91dF9wbGFuYXJfeSA9IGRzdCArIHN0cmlkZSArIG9mZnNldC0+eDsKKworICAgICAvKiBvZmZzZXRzIGluIFUvViBwbGFuZXMgKi8KKyAgICAgc3RyaWRlID0gKHZpZXctPnggKiBvZmZzZXQtPnkpLzQgKyBvZmZzZXQtPngvMjsKKyAgICAgcG91dF9wbGFuYXJfdSA9IGRzdCArIG4gKyAgICAgKyBzdHJpZGU7CisgICAgIHBvdXRfcGxhbmFyX3YgPSBkc3QgKyBuICsgbi80ICsgc3RyaWRlOworCisgICAgIHBpeGVsX3NpemUgPSB2aWV3LT54ICogNDsKKyAgIH0KKworCisgIGZvciAoaT0wO2k8aW1hZ2UtPnk7aSs9NCkKKyAgIHsKKyAgICAgaWYgKGZsYWdzICYgUFdDWF9GTEFHX0JBWUVSKQorICAgICAgeworCS8vVE9ETzoKKwkvL0RlY29tcHJlc3NCYW5kQmF5ZXIocGRldixzcmMscG91dCxpbWFnZS54LHZpZXctPngsZmxhZ3MpOworCXNyYyArPSBiYW5kbGVuZ3RoOworCXBvdXQgKz0gcGl4ZWxfc2l6ZTsKKyAgICAgIH0KKyAgICAgZWxzZQorICAgICAgeworCURlY29tcHJlc3NCYW5kMjMocGRldixzcmMscG91dF9wbGFuYXJfeSxwb3V0X3BsYW5hcl91LHBvdXRfcGxhbmFyX3YsaW1hZ2UtPngsdmlldy0+eCxmbGFncyk7CisJc3JjICs9IGJhbmRsZW5ndGg7CisJcG91dF9wbGFuYXJfeSArPSBwaXhlbF9zaXplOworCXBvdXRfcGxhbmFyX3UgKz0gdmlldy0+eDsKKwlwb3V0X3BsYW5hcl92ICs9IHZpZXctPng7CisgICAgICB9CisgICB9Cit9CisKK3ZvaWQgcHdjX2RlYzIzX2V4aXQodm9pZCkKK3sKKyAgLyogRG8gbm90aGluZyAqLworCit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtZGVjMjMuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtZGVjMjMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjJhYWNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1kZWMyMy5oCkBAIC0wLDAgKzEsNTggQEAKKy8qIExpbnV4IGRyaXZlciBmb3IgUGhpbGlwcyB3ZWJjYW0KKyAgIChDKSAyMDA0ICAgICAgTHVjIFNhaWxsYXJkIChsdWNAc2FpbGxhcmQub3JnKQorCisgICBOT1RFOiB0aGlzIHZlcnNpb24gb2YgcHdjIGlzIGFuIHVub2ZmaWNpYWwgKG1vZGlmaWVkKSByZWxlYXNlIG9mIHB3YyAmIHBjd3gKKyAgIGRyaXZlciBhbmQgdGh1cyBtYXkgaGF2ZSBidWdzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLgorICAgUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgYW5kIHN1cHBvcnQgcmVxdWVzdHMgdG8gPGx1Y0BzYWlsbGFyZC5vcmc+LgorICAgVGhlIGRlY29tcHJlc3Npb24gcm91dGluZXMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGJ5IHJldmVyc2UtZW5naW5lZXJpbmcgdGhlCisgICBOZW1vc29mdCBiaW5hcnkgcHdjeCBtb2R1bGUuIENhdmVhdCBlbXB0b3IuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworI2lmbmRlZiBQV0NfREVDMjNfSAorI2RlZmluZSBQV0NfREVDMjNfSAorCitzdHJ1Y3QgcHdjX2RlYzIzX3ByaXZhdGUKK3sKKyAgdW5zaWduZWQgY2hhciB4eCx5eSx6eix6em1hc2s7CisKKyAgdW5zaWduZWQgY2hhciB0YWJsZV8wMDA0WzIqMHg0MDAwXTsKKyAgdW5zaWduZWQgY2hhciB0YWJsZV84MDA0WzIqMHgxMDAwXTsKKyAgdW5zaWduZWQgaW50ICB0YWJsZV9hMDA0WzI1NioxMl07CisKKyAgdW5zaWduZWQgY2hhciB0YWJsZV9kMDA0WzgqMjU2XTsKKyAgdW5zaWduZWQgaW50ICB0YWJsZV9kODAwWzI1Nl07CisgIHVuc2lnbmVkIGludCAgdGFibGVfZGMwMFsyNTZdOworfTsKKworCit2b2lkIHB3Y19kZWMyM19pbml0KGludCB0eXBlLCBpbnQgcmVsZWFzZSwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB2b2lkICpwcml2YXRlX2RhdGEpOwordm9pZCBwd2NfZGVjMjNfZXhpdCh2b2lkKTsKK3ZvaWQgcHdjX2RlYzIzX2RlY29tcHJlc3MoY29uc3Qgc3RydWN0IHB3Y19jb29yZCAqaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHB3Y19jb29yZCAqdmlldywKKwkJCSAgICBjb25zdCBzdHJ1Y3QgcHdjX2Nvb3JkICpvZmZzZXQsCisJCQkgICAgY29uc3Qgdm9pZCAqc3JjLAorCQkJICAgIHZvaWQgKmRzdCwKKwkJCSAgICBpbnQgZmxhZ3MsCisJCQkgICAgY29uc3Qgdm9pZCAqZGF0YSwKKwkJCSAgICBpbnQgYmFuZGxlbmd0aCk7CisKKworCisjZW5kaWYKKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtaWYuYyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtaWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDBhNWE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1pZi5jCkBAIC0wLDAgKzEsMjIxMiBAQAorLyogTGludXggZHJpdmVyIGZvciBQaGlsaXBzIHdlYmNhbQorICAgVVNCIGFuZCBWaWRlbzRMaW51eCBpbnRlcmZhY2UgcGFydC4KKyAgIChDKSAxOTk5LTIwMDQgTmVtb3NvZnQgVW52LgorICAgKEMpIDIwMDQgICAgICBMdWMgU2FpbGxhcmQgKGx1Y0BzYWlsbGFyZC5vcmcpCisKKyAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAorICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCisgICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyBhbmQgc3VwcG9ydCByZXF1ZXN0cyB0byA8bHVjQHNhaWxsYXJkLm9yZz4uCisgICBUaGUgZGVjb21wcmVzc2lvbiByb3V0aW5lcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYnkgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUKKyAgIE5lbW9zb2Z0IGJpbmFyeSBwd2N4IG1vZHVsZS4gQ2F2ZWF0IGVtcHRvci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKyovCisKKy8qICAKKyAgIFRoaXMgY29kZSBmb3JtcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIFVTQiBsYXllcnMgYW5kIHRoZSBQaGlsaXBzCisgICBzcGVjaWZpYyBzdHVmZi4gU29tZSBhZGFudmVkIHN0dWZmIG9mIHRoZSBkcml2ZXIgZmFsbHMgdW5kZXIgYW4KKyAgIE5EQSwgc2lnbmVkIGJldHdlZW4gbWUgYW5kIFBoaWxpcHMgQi5WLiwgRWluZGhvdmVuLCB0aGUgTmV0aGVybGFuZHMsIGFuZAorICAgaXMgdGh1cyBub3QgZGlzdHJpYnV0ZWQgaW4gc291cmNlIGZvcm0uIFRoZSBiaW5hcnkgcHdjeC5vIG1vZHVsZSAKKyAgIGNvbnRhaW5zIHRoZSBjb2RlIHRoYXQgZmFsbHMgdW5kZXIgdGhlIE5EQS4KKyAgIAorICAgSW4gY2FzZSB5b3UncmUgd29uZGVyaW5nOiAncHdjJyBzdGFuZHMgZm9yICJQaGlsaXBzIFdlYkNhbSIsIGJ1dCAKKyAgIEkgcmVhbGx5IGRpZG4ndCB3YW50IHRvIHR5cGUgJ3BoaWxpcHNfd2ViX2NhbScgZXZlcnkgdGltZSAoSSdtIGxhenkgYXMKKyAgIGFueSBMaW51eCBrZXJuZWwgaGFja2VyLCBidXQgSSBkb24ndCBsaWtlIHVuY29tcHJlaGVuc2libGUgYWJicmV2aWF0aW9ucworICAgd2l0aG91dCBleHBsYW5hdGlvbikuCisgICAKKyAgIE9oIHllcywgY29udmVudGlvbjogdG8gZGlzY3Rpbmd1aXNoIGJldHdlZW4gYWxsIHRoZSB2YXJpb3VzIHBvaW50ZXJzIHRvCisgICBkZXZpY2Utc3RydWN0dXJlcywgSSB1c2UgdGhlc2UgbmFtZXMgZm9yIHRoZSBwb2ludGVyIHZhcmlhYmxlczoKKyAgIHVkZXY6IHN0cnVjdCB1c2JfZGV2aWNlICoKKyAgIHZkZXY6IHN0cnVjdCB2aWRlb19kZXZpY2UgKgorICAgcGRldjogc3RydWN0IHB3Y19kZXZpdmUgKgorKi8KKworLyogQ29udHJpYnV0b3JzOgorICAgLSBBbHZhcmFkbzogYWRkaW5nIHdoaXRlYmFsYW5jZSBjb2RlCisgICAtIEFsaXN0YXIgTW9pcmU6IFF1aWNrQ2FtIDMwMDAgUHJvIGRldmljZS9wcm9kdWN0IElECisgICAtIFRvbnkgSG95bGU6IENyZWF0aXZlIExhYnMgV2ViY2FtIDUgZGV2aWNlL3Byb2R1Y3QgSUQKKyAgIC0gTWFyayBCdXJhemluOiBzb2x2aW5nIGhhbmcgaW4gVklESU9DU1lOQyB3aGVuIGNhbWVyYSBnZXRzIHVucGx1Z2dlZAorICAgLSBKayBGYW5nOiBTb3RlYyBBZmluYSBFeWUgSUQKKyAgIC0gWGF2aWVyIFJvY2hlOiBRdWlja0NhbSBQcm8gNDAwMCBJRAorICAgLSBKZW5zIEtudWRzZW46IFF1aWNrQ2FtIFpvb20gSUQKKyAgIC0gSi4gRGViZXJ0OiBRdWlja0NhbSBmb3IgTm90ZWJvb2tzIElECisqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgInB3Yy5oIgorI2luY2x1ZGUgInB3Yy1pb2N0bC5oIgorI2luY2x1ZGUgInB3Yy1raWFyYS5oIgorI2luY2x1ZGUgInB3Yy10aW1vbi5oIgorI2luY2x1ZGUgInB3Yy1kZWMyMy5oIgorI2luY2x1ZGUgInB3Yy1kZWMxLmgiCisjaW5jbHVkZSAicHdjLXVuY29tcHJlc3MuaCIKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgZHJpdmVyIHRlbXBsYXRlcyAqLworCisvKiBob3RwbHVnIGRldmljZSB0YWJsZSBzdXBwb3J0ICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcHdjX2RldmljZV90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoMHgwNDcxLCAweDAzMDIpIH0sIC8qIFBoaWxpcHMgbW9kZWxzICovCisJeyBVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzAzKSB9LAorCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MDMwNCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDcxLCAweDAzMDcpIH0sCisJeyBVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzA4KSB9LAorCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MDMwQykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDcxLCAweDAzMTApIH0sCisJeyBVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzExKSB9LAorCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MDMxMikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDcxLCAweDAzMTMpIH0sIC8qIHRoZSAnbmV3JyA3MjBLICovCisJeyBVU0JfREVWSUNFKDB4MDY5QSwgMHgwMDAxKSB9LCAvKiBBc2tleSAqLworCXsgVVNCX0RFVklDRSgweDA0NkQsIDB4MDhCMCkgfSwgLyogTG9naXRlY2ggUXVpY2tDYW0gUHJvIDMwMDAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDZELCAweDA4QjEpIH0sIC8qIExvZ2l0ZWNoIFF1aWNrQ2FtIE5vdGVib29rIFBybyAqLworCXsgVVNCX0RFVklDRSgweDA0NkQsIDB4MDhCMikgfSwgLyogTG9naXRlY2ggUXVpY2tDYW0gUHJvIDQwMDAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDZELCAweDA4QjMpIH0sIC8qIExvZ2l0ZWNoIFF1aWNrQ2FtIFpvb20gKG9sZCBtb2RlbCkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDZELCAweDA4QjQpIH0sIC8qIExvZ2l0ZWNoIFF1aWNrQ2FtIFpvb20gKG5ldyBtb2RlbCkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDZELCAweDA4QjUpIH0sIC8qIExvZ2l0ZWNoIFF1aWNrQ2FtIE9yYml0L1NwaGVyZSAqLworCXsgVVNCX0RFVklDRSgweDA0NkQsIDB4MDhCNikgfSwgLyogTG9naXRlY2ggKHJlc2VydmVkKSAqLworCXsgVVNCX0RFVklDRSgweDA0NkQsIDB4MDhCNykgfSwgLyogTG9naXRlY2ggKHJlc2VydmVkKSAqLworCXsgVVNCX0RFVklDRSgweDA0NkQsIDB4MDhCOCkgfSwgLyogTG9naXRlY2ggKHJlc2VydmVkKSAqLworCXsgVVNCX0RFVklDRSgweDA1NUQsIDB4OTAwMCkgfSwgLyogU2Ftc3VuZyAqLworCXsgVVNCX0RFVklDRSgweDA1NUQsIDB4OTAwMSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDFFLCAweDQwMEMpIH0sIC8qIENyZWF0aXZlIFdlYmNhbSA1ICovCisJeyBVU0JfREVWSUNFKDB4MDQxRSwgMHg0MDExKSB9LCAvKiBDcmVhdGl2ZSBXZWJjYW0gUHJvIEV4ICovCisJeyBVU0JfREVWSUNFKDB4MDRDQywgMHg4MTE2KSB9LCAvKiBBZmluYSBFeWUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNkJFLCAweDgxMTYpIH0sIC8qIG5ldyBBZmluYSBFeWUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwZDgxLCAweDE5MTApIH0sIC8qIFZpc2lvbml0ZSAqLworCXsgVVNCX0RFVklDRSgweDBkODEsIDB4MTkwMCkgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgcHdjX2RldmljZV90YWJsZSk7CisKK3N0YXRpYyBpbnQgdXNiX3B3Y19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyB2b2lkIHVzYl9wd2NfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwd2NfZHJpdmVyID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIlBoaWxpcHMgd2ViY2FtIiwJLyogbmFtZSAqLworCS5pZF90YWJsZSA9CQlwd2NfZGV2aWNlX3RhYmxlLAorCS5wcm9iZSA9CQl1c2JfcHdjX3Byb2JlLAkJLyogcHJvYmUoKSAqLworCS5kaXNjb25uZWN0ID0JCXVzYl9wd2NfZGlzY29ubmVjdCwJLyogZGlzY29ubmVjdCgpICovCit9OworCisjZGVmaW5lIE1BWF9ERVZfSElOVFMJMjAKKyNkZWZpbmUgTUFYX0lTT0NfRVJST1JTCTIwCisKK3N0YXRpYyBpbnQgZGVmYXVsdF9zaXplID0gUFNaX1FDSUY7CitzdGF0aWMgaW50IGRlZmF1bHRfZnBzID0gMTA7CitzdGF0aWMgaW50IGRlZmF1bHRfZmJ1ZnMgPSAzOyAgIC8qIERlZmF1bHQgbnVtYmVyIG9mIGZyYW1lIGJ1ZmZlcnMgKi8KK3N0YXRpYyBpbnQgZGVmYXVsdF9tYnVmcyA9IDI7CS8qIERlZmF1bHQgbnVtYmVyIG9mIG1tYXAoKSBidWZmZXJzICovCisgICAgICAgaW50IHB3Y190cmFjZSA9IFRSQUNFX01PRFVMRSB8IFRSQUNFX0ZMT1cgfCBUUkFDRV9QV0NYOworc3RhdGljIGludCBwb3dlcl9zYXZlID0gMDsKK3N0YXRpYyBpbnQgbGVkX29uID0gMTAwLCBsZWRfb2ZmID0gMDsgLyogZGVmYXVsdHMgdG8gTEVEIHRoYXQgaXMgb24gd2hpbGUgaW4gdXNlICovCisgICAgICAgaW50IHB3Y19wcmVmZXJyZWRfY29tcHJlc3Npb24gPSAyOyAvKiAwLi4zID0gdW5jb21wcmVzc2VkLi5oaWdoICovCitzdGF0aWMgc3RydWN0IHsKKwlpbnQgdHlwZTsKKwljaGFyIHNlcmlhbF9udW1iZXJbMzBdOworCWludCBkZXZpY2Vfbm9kZTsKKwlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldjsKK30gZGV2aWNlX2hpbnRbTUFYX0RFVl9ISU5UU107CisKKy8qKiovCisKK3N0YXRpYyBpbnQgcHdjX3ZpZGVvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGludCBwd2NfdmlkZW9fY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIHNzaXplX3QgcHdjX3ZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogYnVmLAorCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7CitzdGF0aWMgdW5zaWduZWQgaW50IHB3Y192aWRlb19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KTsKK3N0YXRpYyBpbnQgIHB3Y192aWRlb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgaW9jdGxuciwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIGludCAgcHdjX3ZpZGVvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHdjX2ZvcHMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm9wZW4gPQkJcHdjX3ZpZGVvX29wZW4sCisJLnJlbGVhc2UgPSAgICAgCXB3Y192aWRlb19jbG9zZSwKKwkucmVhZCA9CQlwd2NfdmlkZW9fcmVhZCwKKwkucG9sbCA9CQlwd2NfdmlkZW9fcG9sbCwKKwkubW1hcCA9CQlwd2NfdmlkZW9fbW1hcCwKKwkuaW9jdGwgPSAgICAgICAgcHdjX3ZpZGVvX2lvY3RsLAorCS5sbHNlZWsgPSAgICAgICBub19sbHNlZWssCit9Oworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgcHdjX3RlbXBsYXRlID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJQaGlsaXBzIFdlYmNhbSIsCS8qIEZpbGxlZCBpbiBsYXRlciAqLworCS50eXBlID0JCVZJRF9UWVBFX0NBUFRVUkUsCisJLmhhcmR3YXJlID0JVklEX0hBUkRXQVJFX1BXQywKKwkucmVsZWFzZSA9CXZpZGVvX2RldmljZV9yZWxlYXNlLAorCS5mb3BzID0gICAgICAgICAmcHdjX2ZvcHMsCisJLm1pbm9yID0gICAgICAgIC0xLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogT2theSwgdGhpcyBpcyBzb21lIG1hZ2ljIHRoYXQgSSB3b3JrZWQgb3V0IGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCBpdC4uLgorCisgICBUaGUgYmlnZ2VzdCBwcm9ibGVtIHdpdGggYW55IFVTQiBkZXZpY2UgaXMgb2YgY291cnNlOiAid2hhdCB0byBkbyAKKyAgIHdoZW4gdGhlIHVzZXIgdW5wbHVncyB0aGUgZGV2aWNlIHdoaWxlIGl0IGlzIGluIHVzZSBieSBhbiBhcHBsaWNhdGlvbj8iCisgICBXZSBoYXZlIHNldmVyYWwgb3B0aW9uczoKKyAgIDEpIEN1cnNlIHRoZW0gd2l0aCB0aGUgNyBwbGFndWVzIHdoZW4gdGhleSBkbyAocmVxdWlyZXMgZGl2aW5lIGludGVydmVudGlvbikKKyAgIDIpIFRlbGwgdGhlbSBub3QgdG8gKHdvbid0IHdvcms6IHRoZXknbGwgZG8gaXQgYW55d2F5KQorICAgMykgT29wcyB0aGUga2VybmVsICh0aGlzIHdpbGwgaGF2ZSBhIG5lZ2F0aXZlIGVmZmVjdCBvbiBhIHVzZXIncyB1cHRpbWUpCisgICA0KSBEbyBzb21ldGhpbmcgc2Vuc2libGUuCisgICAKKyAgIE9mIGNvdXJzZSwgd2UgZ28gZm9yIG9wdGlvbiA0LgorCisgICBJdCBoYXBwZW5zIHRoYXQgdGhpcyBkZXZpY2Ugd2lsbCBiZSBsaW5rZWQgdG8gdHdvIHRpbWVzLCBvbmNlIGZyb20KKyAgIHVzYl9kZXZpY2UgYW5kIG9uY2UgZnJvbSB0aGUgdmlkZW9fZGV2aWNlIGluIHRoZWlyIHJlc3BlY3RpdmUgJ3ByaXZhdGUnCisgICBwb2ludGVycy4gVGhpcyBpcyBkb25lIHdoZW4gdGhlIGRldmljZSBpcyBwcm9iZWQoKSBhbmQgYWxsIGluaXRpYWxpemF0aW9uCisgICBzdWNjZWVkZWQuIFRoZSBwd2NfZGV2aWNlIHN0cnVjdCBsaW5rcyBiYWNrIHRvIGJvdGggc3RydWN0dXJlcy4KKworICAgV2hlbiBhIGRldmljZSBpcyB1bnBsdWdnZWQgd2hpbGUgaW4gdXNlIGl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSAKKyAgIGxpc3Qgb2Yga25vd24gVVNCIGRldmljZXM7IEkgYWxzbyBkZS1yZWdpc3RlciBpdCBhcyBhIFY0TCBkZXZpY2UsIGJ1dCAKKyAgIHVuZm9ydHVuYXRlbHkgSSBjYW4ndCBmcmVlIHRoZSBtZW1vcnkgc2luY2UgdGhlIHN0cnVjdCBpcyBzdGlsbCBpbiB1c2UKKyAgIGJ5IHRoZSBmaWxlIGRlc2NyaXB0b3IuIFRoaXMgZnJlZS1pbmcgaXMgdGhlbiBkZWZlcmVuZCB1bnRpbCB0aGUgZmlyc3QKKyAgIG9wcG9ydHVuaXR5LiBDcnVkZSwgYnV0IGl0IHdvcmtzLgorICAgCisgICBBIHNtYWxsICdhZHZhbnRhZ2UnIGlzIHRoYXQgaWYgYSB1c2VyIHVucGx1Z3MgdGhlIGNhbSBhbmQgcGx1Z3MgaXQgYmFjaworICAgaW4sIGl0IHNob3VsZCBnZXQgYXNzaWduZWQgdGhlIHNhbWUgdmlkZW8gZGV2aWNlIG1pbm9yLCBidXQgdW5mb3J0dW5hdGVseQorICAgaXQncyBub24tdHJpdmlhbCB0byByZS1saW5rIHRoZSBjYW0gYmFjayB0byB0aGUgdmlkZW8gZGV2aWNlLi4uICh0aGF0IAorICAgd291bGQgc3VyZWx5IGJlIG1hZ2ljISA6KSkKKyovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBQcml2YXRlIGZ1bmN0aW9ucyAqLworCisvKiBIZXJlIHdlIHdhbnQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeS4KKyAqIFRoaXMgaXMgdXNlZCB3aGVuIGluaXRpYWxpemluZyB0aGUgY29udGVudHMgb2YgdGhlIGFyZWEuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBrdmlydF90b19wYSh1bnNpZ25lZCBsb25nIGFkcikgCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcga3ZhLCByZXQ7CisKKwlrdmEgPSAodW5zaWduZWQgbG9uZykgcGFnZV9hZGRyZXNzKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOworCWt2YSB8PSBhZHIgJiAoUEFHRV9TSVpFLTEpOyAvKiByZXN0b3JlIHRoZSBvZmZzZXQgKi8KKwlyZXQgPSBfX3BhKGt2YSk7CisgICAgICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkICogcnZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQoreworCXZvaWQgKiBtZW07CisJdW5zaWduZWQgbG9uZyBhZHI7CisKKwlzaXplPVBBR0VfQUxJR04oc2l6ZSk7CisgICAgICAgIG1lbT12bWFsbG9jXzMyKHNpemUpOworCWlmIChtZW0pIAorCXsKKwkJbWVtc2V0KG1lbSwgMCwgc2l6ZSk7IC8qIENsZWFyIHRoZSByYW0gb3V0LCBubyBqdW5rIHRvIHRoZSB1c2VyICovCisJICAgICAgICBhZHI9KHVuc2lnbmVkIGxvbmcpIG1lbTsKKwkJd2hpbGUgKHNpemUgPiAwKSAKKyAgICAgICAgICAgICAgICB7CisJCQlTZXRQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7CisJCQlhZHIrPVBBR0VfU0laRTsKKwkJCXNpemUtPVBBR0VfU0laRTsKKwkJfQorCX0KKwlyZXR1cm4gbWVtOworfQorCitzdGF0aWMgdm9pZCBydmZyZWUodm9pZCAqIG1lbSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworICAgICAgICB1bnNpZ25lZCBsb25nIGFkcjsKKworCWlmIChtZW0pIAorCXsKKwkgICAgICAgIGFkcj0odW5zaWduZWQgbG9uZykgbWVtOworCQl3aGlsZSAoKGxvbmcpIHNpemUgPiAwKSAKKyAgICAgICAgICAgICAgICB7CisJCQlDbGVhclBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKKwkJCWFkcis9UEFHRV9TSVpFOworCQkJc2l6ZS09UEFHRV9TSVpFOworCQl9CisJCXZmcmVlKG1lbSk7CisJfQorfQorCisKKworCitzdGF0aWMgaW50IHB3Y19hbGxvY2F0ZV9idWZmZXJzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQoreworCWludCBpOworCXZvaWQgKmtidWY7CisKKwlUcmFjZShUUkFDRV9NRU1PUlksICI+PiBwd2NfYWxsb2NhdGVfYnVmZmVycyhwZGV2ID0gMHglcClcbiIsIHBkZXYpOworCisJaWYgKHBkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTlhJTzsKKwkJCisjaWZkZWYgUFdDX01BR0lDCisJaWYgKHBkZXYtPm1hZ2ljICE9IFBXQ19NQUdJQykgeworCQlFcnIoImFsbG9jYXRlX2J1ZmZlcnMoKTogbWFnaWMgZmFpbGVkLlxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorI2VuZGlmCQorCS8qIEFsbG9jYXRlIElzb2Nocm9udW91cyBwaXBlIGJ1ZmZlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0lTT19CVUZTOyBpKyspIHsKKwkJaWYgKHBkZXYtPnNidWZbaV0uZGF0YSA9PSBOVUxMKSB7CisJCQlrYnVmID0ga21hbGxvYyhJU09fQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwpOworCQkJaWYgKGtidWYgPT0gTlVMTCkgeworCQkJCUVycigiRmFpbGVkIHRvIGFsbG9jYXRlIGlzbyBidWZmZXIgJWQuXG4iLCBpKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJCVRyYWNlKFRSQUNFX01FTU9SWSwgIkFsbG9jYXRlZCBpc28gYnVmZmVyIGF0ICVwLlxuIiwga2J1Zik7CisJCQlwZGV2LT5zYnVmW2ldLmRhdGEgPSBrYnVmOworCQkJbWVtc2V0KGtidWYsIDAsIElTT19CVUZGRVJfU0laRSk7CisJCX0KKwl9CisKKwkvKiBBbGxvY2F0ZSBmcmFtZSBidWZmZXIgc3RydWN0dXJlICovCisJaWYgKHBkZXYtPmZidWYgPT0gTlVMTCkgeworCQlrYnVmID0ga21hbGxvYyhkZWZhdWx0X2ZidWZzICogc2l6ZW9mKHN0cnVjdCBwd2NfZnJhbWVfYnVmKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChrYnVmID09IE5VTEwpIHsKKwkJCUVycigiRmFpbGVkIHRvIGFsbG9jYXRlIGZyYW1lIGJ1ZmZlciBzdHJ1Y3R1cmUuXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCVRyYWNlKFRSQUNFX01FTU9SWSwgIkFsbG9jYXRlZCBmcmFtZSBidWZmZXIgc3RydWN0dXJlIGF0ICVwLlxuIiwga2J1Zik7CisJCXBkZXYtPmZidWYgPSBrYnVmOworCQltZW1zZXQoa2J1ZiwgMCwgZGVmYXVsdF9mYnVmcyAqIHNpemVvZihzdHJ1Y3QgcHdjX2ZyYW1lX2J1ZikpOworCX0KKwkvKiBjcmVhdGUgZnJhbWUgYnVmZmVycywgYW5kIG1ha2UgY2lyY3VsYXIgcmluZyAqLworCWZvciAoaSA9IDA7IGkgPCBkZWZhdWx0X2ZidWZzOyBpKyspIHsKKwkJaWYgKHBkZXYtPmZidWZbaV0uZGF0YSA9PSBOVUxMKSB7CisJCQlrYnVmID0gdm1hbGxvYyhQV0NfRlJBTUVfU0laRSk7IC8qIG5lZWQgdm1hbGxvYyBzaW5jZSBmcmFtZSBidWZmZXIgPiAxMjhLICovCisJCQlpZiAoa2J1ZiA9PSBOVUxMKSB7CisJCQkJRXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZnJhbWUgYnVmZmVyICVkLlxuIiwgaSk7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCQlUcmFjZShUUkFDRV9NRU1PUlksICJBbGxvY2F0ZWQgZnJhbWUgYnVmZmVyICVkIGF0ICVwLlxuIiwgaSwga2J1Zik7CisJCQlwZGV2LT5mYnVmW2ldLmRhdGEgPSBrYnVmOworCQkJbWVtc2V0KGtidWYsIDEyOCwgUFdDX0ZSQU1FX1NJWkUpOworCQl9CisJfQorCQorCS8qIEFsbG9jYXRlIGRlY29tcHJlc3NvciB0YWJsZSBzcGFjZSAqLworCWtidWYgPSBOVUxMOworCXN3aXRjaCAocGRldi0+dHlwZSkKKwkgeworCSAgY2FzZSA2NzU6CisJICBjYXNlIDY4MDoKKwkgIGNhc2UgNjkwOgorCSAgY2FzZSA3MjA6CisJICBjYXNlIDczMDoKKwkgIGNhc2UgNzQwOgorCSAgY2FzZSA3NTA6CisJICAgIFRyYWNlKFRSQUNFX01FTU9SWSwicHJpdmF0ZV9kYXRhKCVaZClcbiIsc2l6ZW9mKHN0cnVjdCBwd2NfZGVjMjNfcHJpdmF0ZSkpOworCSAgICBrYnVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHB3Y19kZWMyM19wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CS8qIFRpbW9uICYgS2lhcmEgKi8KKwkgICAgYnJlYWs7CisJICBjYXNlIDY0NToKKwkgIGNhc2UgNjQ2OgorCSAgICAvKiBUT0RPICYgRklYTUUgKi8KKwkgICAga2J1ZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwd2NfZGVjMjNfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCSAgICBicmVhazsKKwkgfQorCWlmIChrYnVmID09IE5VTEwpIHsKKwkgICBFcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBkZWNvbXByZXNzIHRhYmxlLlxuIik7CisJICAgcmV0dXJuIC1FTk9NRU07CisJfQorCXBkZXYtPmRlY29tcHJlc3NfZGF0YSA9IGtidWY7CisJCisJLyogQWxsb2NhdGUgaW1hZ2UgYnVmZmVyOyBkb3VibGUgYnVmZmVyIGZvciBtbWFwKCkgKi8KKwlrYnVmID0gcnZtYWxsb2MoZGVmYXVsdF9tYnVmcyAqIHBkZXYtPmxlbl9wZXJfaW1hZ2UpOworCWlmIChrYnVmID09IE5VTEwpIHsKKwkJRXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2UgYnVmZmVyKHMpLiBuZWVkZWQgKCVkKVxuIixkZWZhdWx0X21idWZzICogcGRldi0+bGVuX3Blcl9pbWFnZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlUcmFjZShUUkFDRV9NRU1PUlksICJBbGxvY2F0ZWQgaW1hZ2UgYnVmZmVyIGF0ICVwLlxuIiwga2J1Zik7CisJcGRldi0+aW1hZ2VfZGF0YSA9IGtidWY7CisJZm9yIChpID0gMDsgaSA8IGRlZmF1bHRfbWJ1ZnM7IGkrKykKKwkJcGRldi0+aW1hZ2VfcHRyW2ldID0ga2J1ZiArIGkgKiBwZGV2LT5sZW5fcGVyX2ltYWdlOworCWZvciAoOyBpIDwgTUFYX0lNQUdFUzsgaSsrKQorCQlwZGV2LT5pbWFnZV9wdHJbaV0gPSBOVUxMOworCisJa2J1ZiA9IE5VTEw7CisJICAKKwlUcmFjZShUUkFDRV9NRU1PUlksICI8PCBwd2NfYWxsb2NhdGVfYnVmZmVycygpXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHdjX2ZyZWVfYnVmZmVycyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKK3sKKwlpbnQgaTsKKworCVRyYWNlKFRSQUNFX01FTU9SWSwgIkVudGVyaW5nIGZyZWVfYnVmZmVycyglcCkuXG4iLCBwZGV2KTsKKworCWlmIChwZGV2ID09IE5VTEwpCisJCXJldHVybjsKKyNpZmRlZiBQV0NfTUFHSUMKKwlpZiAocGRldi0+bWFnaWMgIT0gUFdDX01BR0lDKSB7CisJCUVycigiZnJlZV9idWZmZXJzKCk6IG1hZ2ljIGZhaWxlZC5cbiIpOworCQlyZXR1cm47CisJfQorI2VuZGlmCQorCisJLyogUmVsZWFzZSBJc28tcGlwZSBidWZmZXJzICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9JU09fQlVGUzsgaSsrKQorCQlpZiAocGRldi0+c2J1ZltpXS5kYXRhICE9IE5VTEwpIHsKKwkJCVRyYWNlKFRSQUNFX01FTU9SWSwgIkZyZWVpbmcgSVNPIGJ1ZmZlciBhdCAlcC5cbiIsIHBkZXYtPnNidWZbaV0uZGF0YSk7CisJCQlrZnJlZShwZGV2LT5zYnVmW2ldLmRhdGEpOworCQkJcGRldi0+c2J1ZltpXS5kYXRhID0gTlVMTDsKKwkJfQorCisJLyogVGhlIHNhbWUgZm9yIGZyYW1lIGJ1ZmZlcnMgKi8KKwlpZiAocGRldi0+ZmJ1ZiAhPSBOVUxMKSB7CisJCWZvciAoaSA9IDA7IGkgPCBkZWZhdWx0X2ZidWZzOyBpKyspIHsKKwkJCWlmIChwZGV2LT5mYnVmW2ldLmRhdGEgIT0gTlVMTCkgeworCQkJCVRyYWNlKFRSQUNFX01FTU9SWSwgIkZyZWVpbmcgZnJhbWUgYnVmZmVyICVkIGF0ICVwLlxuIiwgaSwgcGRldi0+ZmJ1ZltpXS5kYXRhKTsKKwkJCQl2ZnJlZShwZGV2LT5mYnVmW2ldLmRhdGEpOworCQkJCXBkZXYtPmZidWZbaV0uZGF0YSA9IE5VTEw7CisJCQl9CisJCX0KKwkJa2ZyZWUocGRldi0+ZmJ1Zik7CisJCXBkZXYtPmZidWYgPSBOVUxMOworCX0KKworCS8qIEludGVybWVkaWF0ZSBkZWNvbXByZXNzaW9uIGJ1ZmZlciAmIHRhYmxlcyAqLworCWlmIChwZGV2LT5kZWNvbXByZXNzX2RhdGEgIT0gTlVMTCkgeworCQlUcmFjZShUUkFDRV9NRU1PUlksICJGcmVlaW5nIGRlY29tcHJlc3Npb24gYnVmZmVyIGF0ICVwLlxuIiwgcGRldi0+ZGVjb21wcmVzc19kYXRhKTsKKwkJa2ZyZWUocGRldi0+ZGVjb21wcmVzc19kYXRhKTsKKwkJcGRldi0+ZGVjb21wcmVzc19kYXRhID0gTlVMTDsKKwl9CisJcGRldi0+ZGVjb21wcmVzc29yID0gTlVMTDsKKworCS8qIFJlbGVhc2UgaW1hZ2UgYnVmZmVycyAqLworCWlmIChwZGV2LT5pbWFnZV9kYXRhICE9IE5VTEwpIHsKKwkJVHJhY2UoVFJBQ0VfTUVNT1JZLCAiRnJlZWluZyBpbWFnZSBidWZmZXIgYXQgJXAuXG4iLCBwZGV2LT5pbWFnZV9kYXRhKTsKKwkJcnZmcmVlKHBkZXYtPmltYWdlX2RhdGEsIGRlZmF1bHRfbWJ1ZnMgKiBwZGV2LT5sZW5fcGVyX2ltYWdlKTsKKwl9CisJcGRldi0+aW1hZ2VfZGF0YSA9IE5VTEw7CisJCisJVHJhY2UoVFJBQ0VfTUVNT1JZLCAiTGVhdmluZyBmcmVlX2J1ZmZlcnMoKS5cbiIpOworfQorCisvKiBUaGUgZnJhbWUgJiBpbWFnZSBidWZmZXIgbWVzcy4gCisKKyAgIFllcywgdGhpcyBpcyBhIG1lc3MuIFdlbGwsIGl0IHVzZWQgdG8gYmUgc2ltcGxlLCBidXQgYWxhcy4uLiAgSW4gdGhpcworICAgbW9kdWxlLCAzIGJ1ZmZlcnMgc2NoZW1lcyBhcmUgdXNlZCB0byBnZXQgdGhlIGRhdGEgZnJvbSB0aGUgVVNCIGJ1cyB0bworICAgdGhlIHVzZXIgcHJvZ3JhbS4gVGhlIGZpcnN0IHNjaGVtZSBpbnZvbHZlcyB0aGUgSVNPIGJ1ZmZlcnMgKGNhbGxlZCB0aHVzCisgICBzaW5jZSB0aGV5IHRyYW5zcG9ydCBJU08gZGF0YSBmcm9tIHRoZSBVU0IgY29udHJvbGxlciksIGFuZCBub3QgcmVhbGx5CisgICBpbnRlcmVzdGluZy4gU3VmZmljZXMgdG8gc2F5IHRoZSBkYXRhIGZyb20gdGhpcyBidWZmZXIgaXMgcXVpY2tseSAKKyAgIGdhdGhlcmVkIGluIGFuIGludGVycnVwdCBoYW5kbGVyIChwd2NfaXNvY19oYW5kbGVyKSBhbmQgcGxhY2VkIGludG8gdGhlCisgICBmcmFtZSBidWZmZXIuCisKKyAgIFRoZSBmcmFtZSBidWZmZXIgaXMgdGhlIHNlY29uZCBzY2hlbWUsIGFuZCBpcyB0aGUgY2VudHJhbCBlbGVtZW50IGhlcmUuCisgICBJdCBjb2xsZWN0cyB0aGUgZGF0YSBmcm9tIGEgc2luZ2xlIGZyYW1lIGZyb20gdGhlIGNhbWVyYSAoaGVuY2UsIHRoZQorICAgbmFtZSkuIEZyYW1lcyBhcmUgZGVsaW1pdGVkIGJ5IHRoZSBVU0IgY2FtZXJhIHdpdGggYSBzaG9ydCBVU0IgcGFja2V0LAorICAgc28gdGhhdCdzIGVhc3kgdG8gZGV0ZWN0LiBUaGUgZnJhbWUgYnVmZmVycyBmb3JtIGEgbGlzdCB0aGF0IGlzIGZpbGxlZAorICAgYnkgdGhlIGNhbWVyYStVU0IgY29udHJvbGxlciBhbmQgZHJhaW5lZCBieSB0aGUgdXNlciBwcm9jZXNzIHRocm91Z2gKKyAgIGVpdGhlciByZWFkKCkgb3IgbW1hcCgpLgorCisgICBUaGUgaW1hZ2UgYnVmZmVyIGlzIHRoZSB0aGlyZCBzY2hlbWUsIGluIHdoaWNoIGZyYW1lcyBhcmUgZGVjb21wcmVzc2VkCisgICBhbmQgY29udmVydGVkIGludG8gcGxhbmFyIGZvcm1hdC4gRm9yIG1tYXAoKSB0aGVyZSBpcyBtb3JlIHRoYW4KKyAgIG9uZSBpbWFnZSBidWZmZXIgYXZhaWxhYmxlLgorCisgICBUaGUgZnJhbWUgYnVmZmVycyBwcm92aWRlIHRoZSBpbWFnZSBidWZmZXJpbmcuIEluIGNhc2UgdGhlIHVzZXIgcHJvY2VzcworICAgaXMgYSBiaXQgc2xvdywgdGhpcyBpbnRyb2R1Y2VzIGxhZyBhbmQgc29tZSB1bmRlc2lyZWQgc2lkZS1lZmZlY3RzLgorICAgVGhlIHByb2JsZW0gYXJpc2VzIHdoZW4gdGhlIGZyYW1lIGJ1ZmZlciBpcyBmdWxsLiBJIHVzZWQgdG8gZHJvcCB0aGUgbGFzdAorICAgZnJhbWUsIHdoaWNoIG1ha2VzIHRoZSBkYXRhIGluIHRoZSBxdWV1ZSBzdGFsZSB2ZXJ5IHF1aWNrbHkuIEJ1dCBkcm9wcGluZworICAgdGhlIGZyYW1lIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSBwcm92ZWQgdG8gYmUgYSBsaXR0ZSBiaXQgbW9yZSBkaWZmaWN1bHQuCisgICBJIHRyaWVkIGEgY2lyY3VsYXIgbGlua2VkIHNjaGVtZSwgYnV0IHRoaXMgaW50cm9kdWNlZCBtb3JlIHByb2JsZW1zIHRoYW4KKyAgIGl0IHNvbHZlZC4KKworICAgQmVjYXVzZSBmaWxsaW5nIGFuZCBkcmFpbmluZyBhcmUgY29tcGxldGVseSBhc3luY2hyb25vdXMgcHJvY2Vzc2VzLCB0aGlzCisgICByZXF1aXJlcyBzb21lIGZpZGRsaW5nIHdpdGggcG9pbnRlcnMgYW5kIG11dGV4ZXMuCisKKyAgIEV2ZW50dWFsbHksIEkgY2FtZSB1cCB3aXRoIGEgc3lzdGVtIHdpdGggMiBsaXN0czogYW4gJ2VtcHR5JyBmcmFtZSBsaXN0CisgICBhbmQgYSAnZnVsbCcgZnJhbWUgbGlzdDoKKyAgICAgKiBJbml0aWFsbHksIGFsbCBmcmFtZSBidWZmZXJzIGJ1dCBvbmUgYXJlIG9uIHRoZSAnZW1wdHknIGxpc3Q7IHRoZSBvbmUKKyAgICAgICByZW1haW5pbmcgYnVmZmVyIGlzIG91ciBpbml0aWFsIGZpbGwgZnJhbWUuCisgICAgICogSWYgYSBmcmFtZSBpcyBuZWVkZWQgZm9yIGZpbGxpbmcsIHdlIHRyeSB0byB0YWtlIGl0IGZyb20gdGhlICdlbXB0eScgCisgICAgICAgbGlzdCwgdW5sZXNzIHRoYXQgbGlzdCBpcyBlbXB0eSwgaW4gd2hpY2ggY2FzZSB3ZSB0YWtlIHRoZSBidWZmZXIgYXQgCisgICAgICAgdGhlIGhlYWQgb2YgdGhlICdmdWxsJyBsaXN0LgorICAgICAqIFdoZW4gb3VyIGZpbGwgYnVmZmVyIGhhcyBiZWVuIGZpbGxlZCwgaXQgaXMgYXBwZW5kZWQgdG8gdGhlICdmdWxsJworICAgICAgIGxpc3QuCisgICAgICogSWYgYSBmcmFtZSBpcyBuZWVkZWQgYnkgcmVhZCgpIG9yIG1tYXAoKSwgaXQgaXMgdGFrZW4gZnJvbSB0aGUgaGVhZCBvZgorICAgICAgIHRoZSAnZnVsbCcgbGlzdCwgaGFuZGxlZCwgYW5kIHRoZW4gYXBwZW5kZWQgdG8gdGhlICdlbXB0eScgbGlzdC4gSWYgbm8KKyAgICAgICBidWZmZXIgaXMgcHJlc2VudCBvbiB0aGUgJ2Z1bGwnIGxpc3QsIHdlIHdhaXQuCisgICBUaGUgYWR2YW50YWdlIGlzIHRoYXQgdGhlIGJ1ZmZlciB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBkZWNvbXByZXNzZWQvCisgICBjb252ZXJ0ZWQsIGlzIG9uIG5laXRoZXIgbGlzdCwgYW5kIHRodXMgbm90IGluIG91ciB3YXkgKGFueSBvdGhlciBzY2hlbWUKKyAgIEkgdHJpZWQgaGFkIHRoZSBwcm9ibGVtIG9mIG9sZCBkYXRhIGxpbmdlcmluZyBpbiB0aGUgcXVldWUpLgorCisgICBXaGF0ZXZlciBzdHJhdGVneSB5b3UgY2hvb3NlLCBpdCBhbHdheXMgcmVtYWlucyBhIHRyYWRlb2ZmOiB3aXRoIG1vcmUKKyAgIGZyYW1lIGJ1ZmZlcnMgdGhlIGNoYW5jZXMgb2YgYSBtaXNzZWQgZnJhbWUgYXJlIHJlZHVjZWQuIE9uIHRoZSBvdGhlcgorICAgaGFuZCwgb24gc2xvd2VyIG1hY2hpbmVzIGl0IGludHJvZHVjZXMgbGFnIGJlY2F1c2UgdGhlIHF1ZXVlIHdpbGwKKyAgIGFsd2F5cyBiZSBmdWxsLgorICovCisKKy8qKgorICBcYnJpZWYgRmluZCBuZXh0IGZyYW1lIGJ1ZmZlciB0byBmaWxsLiBUYWtlIGZyb20gZW1wdHkgb3IgZnVsbCBsaXN0LCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19uZXh0X2ZpbGxfZnJhbWUoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmV0ID0gMDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGRldi0+cHRybG9jaywgZmxhZ3MpOworCWlmIChwZGV2LT5maWxsX2ZyYW1lICE9IE5VTEwpIHsKKwkJLyogYXBwZW5kIHRvICdmdWxsJyBsaXN0ICovCisJCWlmIChwZGV2LT5mdWxsX2ZyYW1lcyA9PSBOVUxMKSB7CisJCQlwZGV2LT5mdWxsX2ZyYW1lcyA9IHBkZXYtPmZpbGxfZnJhbWU7CisJCQlwZGV2LT5mdWxsX2ZyYW1lc190YWlsID0gcGRldi0+ZnVsbF9mcmFtZXM7CisJCX0KKwkJZWxzZSB7CisJCQlwZGV2LT5mdWxsX2ZyYW1lc190YWlsLT5uZXh0ID0gcGRldi0+ZmlsbF9mcmFtZTsKKwkJCXBkZXYtPmZ1bGxfZnJhbWVzX3RhaWwgPSBwZGV2LT5maWxsX2ZyYW1lOworCQl9CisJfQorCWlmIChwZGV2LT5lbXB0eV9mcmFtZXMgIT0gTlVMTCkgeworCQkvKiBXZSBoYXZlIGVtcHR5IGZyYW1lcyBhdmFpbGFibGUuIFRoYXQncyBlYXN5ICovCisJCXBkZXYtPmZpbGxfZnJhbWUgPSBwZGV2LT5lbXB0eV9mcmFtZXM7CisJCXBkZXYtPmVtcHR5X2ZyYW1lcyA9IHBkZXYtPmVtcHR5X2ZyYW1lcy0+bmV4dDsKKwl9CisJZWxzZSB7CisJCS8qIEhtbS4gVGFrZSBpdCBmcm9tIHRoZSBmdWxsIGxpc3QgKi8KKyNpZiBQV0NfREVCVUcKKwkJLyogc2FuaXR5IGNoZWNrICovCisJCWlmIChwZGV2LT5mdWxsX2ZyYW1lcyA9PSBOVUxMKSB7CisJCQlFcnIoIk5laXRoZXIgZW1wdHkgb3IgZnVsbCBmcmFtZXMgYXZhaWxhYmxlIVxuIik7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGV2LT5wdHJsb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorI2VuZGlmCisJCXBkZXYtPmZpbGxfZnJhbWUgPSBwZGV2LT5mdWxsX2ZyYW1lczsKKwkJcGRldi0+ZnVsbF9mcmFtZXMgPSBwZGV2LT5mdWxsX2ZyYW1lcy0+bmV4dDsKKwkJcmV0ID0gMTsKKwl9CisJcGRldi0+ZmlsbF9mcmFtZS0+bmV4dCA9IE5VTEw7CisjaWYgUFdDX0RFQlVHCisJVHJhY2UoVFJBQ0VfU0VRVUVOQ0UsICJBc3NpZ25pbmcgc2VxdWVuY2UgbnVtYmVyICVkLlxuIiwgcGRldi0+c2VxdWVuY2UpOworCXBkZXYtPmZpbGxfZnJhbWUtPnNlcXVlbmNlID0gcGRldi0+c2VxdWVuY2UrKzsKKyNlbmRpZgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkZXYtPnB0cmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCisKKy8qKgorICBcYnJpZWYgUmVzZXQgYWxsIGJ1ZmZlcnMsIHBvaW50ZXJzIGFuZCBsaXN0cywgZXhjZXB0IGZvciB0aGUgaW1hZ2VfdXNlZFtdIGJ1ZmZlci4KKworICBJZiB0aGUgaW1hZ2VfdXNlZFtdIGJ1ZmZlciBpcyBjbGVhcmVkIHRvbywgbW1hcCgpL1ZJRElPQ1NZTkMgd2lsbCBydW4gaW50byB0cm91YmxlLgorICovCitzdGF0aWMgdm9pZCBwd2NfcmVzZXRfYnVmZmVycyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBkZXYtPnB0cmxvY2ssIGZsYWdzKTsKKwlwZGV2LT5mdWxsX2ZyYW1lcyA9IE5VTEw7CisJcGRldi0+ZnVsbF9mcmFtZXNfdGFpbCA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IGRlZmF1bHRfZmJ1ZnM7IGkrKykgeworCQlwZGV2LT5mYnVmW2ldLmZpbGxlZCA9IDA7CisJCWlmIChpID4gMCkKKwkJCXBkZXYtPmZidWZbaV0ubmV4dCA9ICZwZGV2LT5mYnVmW2kgLSAxXTsKKwkJZWxzZQorCQkJcGRldi0+ZmJ1Zi0+bmV4dCA9IE5VTEw7CisJfQorCXBkZXYtPmVtcHR5X2ZyYW1lcyA9ICZwZGV2LT5mYnVmW2RlZmF1bHRfZmJ1ZnMgLSAxXTsKKwlwZGV2LT5lbXB0eV9mcmFtZXNfdGFpbCA9IHBkZXYtPmZidWY7CisJcGRldi0+cmVhZF9mcmFtZSA9IE5VTEw7CisJcGRldi0+ZmlsbF9mcmFtZSA9IHBkZXYtPmVtcHR5X2ZyYW1lczsKKwlwZGV2LT5lbXB0eV9mcmFtZXMgPSBwZGV2LT5lbXB0eV9mcmFtZXMtPm5leHQ7CisKKwlwZGV2LT5pbWFnZV9yZWFkX3BvcyA9IDA7CisJcGRldi0+ZmlsbF9pbWFnZSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRldi0+cHRybG9jaywgZmxhZ3MpOworfQorCisKKy8qKgorICBcYnJpZWYgRG8gYWxsIHRoZSBoYW5kbGluZyBmb3IgZ2V0dGluZyBvbmUgZnJhbWU6IGdldCBwb2ludGVyLCBkZWNvbXByZXNzLCBhZHZhbmNlIHBvaW50ZXJzLgorICovCitzdGF0aWMgaW50IHB3Y19oYW5kbGVfZnJhbWUoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwZGV2LT5wdHJsb2NrLCBmbGFncyk7CisJLyogRmlyc3QgZ3JhYiBvdXIgcmVhZF9mcmFtZTsgdGhpcyBpcyByZW1vdmVkIGZyb20gYWxsIGxpc3RzLCBzbworCSAgIHdlIGNhbiByZWxlYXNlIHRoZSBsb2NrIGFmdGVyIHRoaXMgd2l0aG91dCBwcm9ibGVtcyAqLworCWlmIChwZGV2LT5yZWFkX2ZyYW1lICE9IE5VTEwpIHsKKwkJLyogVGhpcyBjYW4ndCB0aGVvcmV0aWNhbGx5IGhhcHBlbiAqLworCQlFcnIoIkh1aD8gUmVhZCBmcmFtZSBzdGlsbCBpbiB1c2U/XG4iKTsKKwl9CisJZWxzZSB7CisJCWlmIChwZGV2LT5mdWxsX2ZyYW1lcyA9PSBOVUxMKSB7CisJCQlFcnIoIldvb3BzLiBObyBmcmFtZXMgcmVhZHkuXG4iKTsKKwkJfQorCQllbHNlIHsKKwkJCXBkZXYtPnJlYWRfZnJhbWUgPSBwZGV2LT5mdWxsX2ZyYW1lczsKKwkJCXBkZXYtPmZ1bGxfZnJhbWVzID0gcGRldi0+ZnVsbF9mcmFtZXMtPm5leHQ7CisJCQlwZGV2LT5yZWFkX2ZyYW1lLT5uZXh0ID0gTlVMTDsKKwkJfQorCisJCWlmIChwZGV2LT5yZWFkX2ZyYW1lICE9IE5VTEwpIHsKKyNpZiBQV0NfREVCVUcKKwkJCVRyYWNlKFRSQUNFX1NFUVVFTkNFLCAiRGVjb21wcmVzc2luZyBmcmFtZSAlZFxuIiwgcGRldi0+cmVhZF9mcmFtZS0+c2VxdWVuY2UpOworI2VuZGlmCisJCQkvKiBEZWNvbXByZXNzaW9uIGlzIGEgbGVuZ2h0eSBwcm9jZXNzLCBzbyBpdCdzIG91dHNpZGUgb2YgdGhlIGxvY2suCisJCQkgICBUaGlzIGdpdmVzIHRoZSBpc29jX2hhbmRsZXIgdGhlIG9wcG9ydHVuaXR5IHRvIGZpbGwgbW9yZSBmcmFtZXMKKwkJCSAgIGluIHRoZSBtZWFuIHRpbWUuCisJCQkqLworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRldi0+cHRybG9jaywgZmxhZ3MpOworCQkJcmV0ID0gcHdjX2RlY29tcHJlc3MocGRldik7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGRldi0+cHRybG9jaywgZmxhZ3MpOworCisJCQkvKiBXZSdyZSBkb25lIHdpdGggcmVhZF9idWZmZXIsIHRhY2sgaXQgdG8gdGhlIGVuZCBvZiB0aGUgZW1wdHkgYnVmZmVyIGxpc3QgKi8KKwkJCWlmIChwZGV2LT5lbXB0eV9mcmFtZXMgPT0gTlVMTCkgeworCQkJCXBkZXYtPmVtcHR5X2ZyYW1lcyA9IHBkZXYtPnJlYWRfZnJhbWU7CisJCQkJcGRldi0+ZW1wdHlfZnJhbWVzX3RhaWwgPSBwZGV2LT5lbXB0eV9mcmFtZXM7CisJCQl9CisJCQllbHNlIHsKKwkJCQlwZGV2LT5lbXB0eV9mcmFtZXNfdGFpbC0+bmV4dCA9IHBkZXYtPnJlYWRfZnJhbWU7CisJCQkJcGRldi0+ZW1wdHlfZnJhbWVzX3RhaWwgPSBwZGV2LT5yZWFkX2ZyYW1lOworCQkJfQorCQkJcGRldi0+cmVhZF9mcmFtZSA9IE5VTEw7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRldi0+cHRybG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICBcYnJpZWYgQWR2YW5jZSBwb2ludGVycyBvZiBpbWFnZSBidWZmZXIgKGFmdGVyIGVhY2ggdXNlciByZXF1ZXN0KQorKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwd2NfbmV4dF9pbWFnZShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKK3sKKwlwZGV2LT5pbWFnZV91c2VkW3BkZXYtPmZpbGxfaW1hZ2VdID0gMDsKKwlwZGV2LT5maWxsX2ltYWdlID0gKHBkZXYtPmZpbGxfaW1hZ2UgKyAxKSAlIGRlZmF1bHRfbWJ1ZnM7Cit9CisKKworLyogVGhpcyBnZXRzIGNhbGxlZCBmb3IgdGhlIElzb2Nocm9ub3VzIHBpcGUgKHZpZGVvKS4gVGhpcyBpcyBkb25lIGluCisgKiBpbnRlcnJ1cHQgdGltZSwgc28gaXQgaGFzIHRvIGJlIGZhc3QsIG5vdCBjcmFzaCwgYW5kIG5vdCBzdGFsbC4gTmVhdC4KKyAqLworc3RhdGljIHZvaWQgcHdjX2lzb2NfaGFuZGxlcihzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwd2NfZGV2aWNlICpwZGV2OworCWludCBpLCBmc3QsIGZsZW47CisJaW50IGF3YWtlOworCXN0cnVjdCBwd2NfZnJhbWVfYnVmICpmYnVmOworCXVuc2lnbmVkIGNoYXIgKmZpbGxwdHIgPSBOVUxMLCAqaXNvX2J1ZiA9IE5VTEw7CisKKwlhd2FrZSA9IDA7CisJcGRldiA9IChzdHJ1Y3QgcHdjX2RldmljZSAqKXVyYi0+Y29udGV4dDsKKwlpZiAocGRldiA9PSBOVUxMKSB7CisJCUVycigiaXNvY19oYW5kbGVyKCkgY2FsbGVkIHdpdGggTlVMTCBkZXZpY2U/IVxuIik7CisJCXJldHVybjsKKwl9CisjaWZkZWYgUFdDX01BR0lDCisJaWYgKHBkZXYtPm1hZ2ljICE9IFBXQ19NQUdJQykgeworCQlFcnIoImlzb2NfaGFuZGxlcigpIGNhbGxlZCB3aXRoIGJhZCBtYWdpYyFcbiIpOworCQlyZXR1cm47CisJfQorI2VuZGlmCisJaWYgKHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQpIHsKKwkJVHJhY2UoVFJBQ0VfT1BFTiwgInB3Y19pc29jX2hhbmRsZXIoKTogVVJCICglcCkgdW5saW5rZWQgJXNzeW5jaHJvbnVvdXNseS5cbiIsIHVyYiwgdXJiLT5zdGF0dXMgPT0gLUVOT0VOVCA/ICIiIDogImEiKTsKKwkJcmV0dXJuOworCX0KKwlpZiAodXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTICYmIHVyYi0+c3RhdHVzICE9IDApIHsKKwkJY29uc3QgY2hhciAqZXJybXNnOworCisJCWVycm1zZyA9ICJVbmtub3duIjsKKwkJc3dpdGNoKHVyYi0+c3RhdHVzKSB7CisJCQljYXNlIC1FTk9TUjoJCWVycm1zZyA9ICJCdWZmZXIgZXJyb3IgKG92ZXJydW4pIjsgYnJlYWs7CisJCQljYXNlIC1FUElQRToJCWVycm1zZyA9ICJTdGFsbGVkIChkZXZpY2Ugbm90IHJlc3BvbmRpbmcpIjsgYnJlYWs7CisJCQljYXNlIC1FT1ZFUkZMT1c6CWVycm1zZyA9ICJCYWJibGUgKGJhZCBjYWJsZT8pIjsgYnJlYWs7CisJCQljYXNlIC1FUFJPVE86CQllcnJtc2cgPSAiQml0LXN0dWZmIGVycm9yIChiYWQgY2FibGU/KSI7IGJyZWFrOworCQkJY2FzZSAtRUlMU0VROgkJZXJybXNnID0gIkNSQy9UaW1lb3V0IChjb3VsZCBiZSBhbnl0aGluZykiOyBicmVhazsKKwkJCWNhc2UgLUVUSU1FRE9VVDoJZXJybXNnID0gIk5BSyAoZGV2aWNlIGRvZXMgbm90IHJlc3BvbmQpIjsgYnJlYWs7CisJCX0KKwkJVHJhY2UoVFJBQ0VfRkxPVywgInB3Y19pc29jX2hhbmRsZXIoKSBjYWxsZWQgd2l0aCBzdGF0dXMgJWQgWyVzXS5cbiIsIHVyYi0+c3RhdHVzLCBlcnJtc2cpOworCQkvKiBHaXZlIHVwIGFmdGVyIGEgbnVtYmVyIG9mIGNvbnRpZ3VvdXMgZXJyb3JzIG9uIHRoZSBVU0IgYnVzLiAKKwkJICAgQXBwZWFyYW50bHkgc29tZXRoaW5nIGlzIHdyb25nIHNvIHdlIHNpbXVsYXRlIGFuIHVucGx1ZyBldmVudC4KKwkJICovCisJCWlmICgrK3BkZXYtPnZpc29jX2Vycm9ycyA+IE1BWF9JU09DX0VSUk9SUykKKwkJeworCQkJSW5mbygiVG9vIG1hbnkgSVNPQyBlcnJvcnMsIGJhaWxpbmcgb3V0LlxuIik7CisJCQlwZGV2LT5lcnJvcl9zdGF0dXMgPSBFSU87CisJCQlhd2FrZSA9IDE7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBkZXYtPmZyYW1lcSk7CisJCX0KKwkJZ290byBoYW5kbGVyX2VuZDsgLy8gdWdseSwgYnV0IHByYWN0aWNhbAorCX0KKworCWZidWYgPSBwZGV2LT5maWxsX2ZyYW1lOworCWlmIChmYnVmID09IE5VTEwpIHsKKwkJRXJyKCJwd2NfaXNvY19oYW5kbGVyIHdpdGhvdXQgdmFsaWQgZmlsbCBmcmFtZS5cbiIpOworCQlhd2FrZSA9IDE7CisJCWdvdG8gaGFuZGxlcl9lbmQ7CisJfQorCWVsc2UgeworCQlmaWxscHRyID0gZmJ1Zi0+ZGF0YSArIGZidWYtPmZpbGxlZDsKKwl9CisKKwkvKiBSZXNldCBJU09DIGVycm9yIGNvdW50ZXIuIFdlIGRpZCBnZXQgaGVyZSwgYWZ0ZXIgYWxsLiAqLworCXBkZXYtPnZpc29jX2Vycm9ycyA9IDA7CisKKwkvKiB2c3luYzogMCA9IGRvbid0IGNvcHkgZGF0YQorCSAgICAgICAgICAxID0gc3luYy1odW50CisJICAgICAgICAgIDIgPSBzeW5jaGVkCisJICovCisJLyogQ29tcGFjdCBkYXRhICovCisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQlmc3QgID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXM7CisJCWZsZW4gPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGg7CisJCWlzb19idWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OworCQlpZiAoZnN0ID09IDApIHsKKwkJCWlmIChmbGVuID4gMCkgeyAvKiBpZiB2YWxpZCBkYXRhLi4uICovCisJCQkJaWYgKHBkZXYtPnZzeW5jID4gMCkgeyAvKiAuLi5hbmQgd2UgYXJlIG5vdCBzeW5jLWh1bnRpbmcuLi4gKi8KKwkJCQkJcGRldi0+dnN5bmMgPSAyOworCisJCQkJCS8qIC4uLmNvcHkgZGF0YSB0byBmcmFtZSBidWZmZXIsIGlmIHBvc3NpYmxlICovCisJCQkJCWlmIChmbGVuICsgZmJ1Zi0+ZmlsbGVkID4gcGRldi0+ZnJhbWVfdG90YWxfc2l6ZSkgeworCQkJCQkJVHJhY2UoVFJBQ0VfRkxPVywgIkZyYW1lIGJ1ZmZlciBvdmVyZmxvdyAoZmxlbiA9ICVkLCBmcmFtZV90b3RhbF9zaXplID0gJWQpLlxuIiwgZmxlbiwgcGRldi0+ZnJhbWVfdG90YWxfc2l6ZSk7CisJCQkJCQlwZGV2LT52c3luYyA9IDA7IC8qIEhtbSwgbGV0J3Mgd2FpdCBmb3IgYW4gRU9GIChlbmQtb2YtZnJhbWUpICovCisJCQkJCQlwZGV2LT52ZnJhbWVzX2Vycm9yKys7CisJCQkJCX0KKwkJCQkJZWxzZSB7CisJCQkJCQltZW1tb3ZlKGZpbGxwdHIsIGlzb19idWYsIGZsZW4pOworCQkJCQkJZmlsbHB0ciArPSBmbGVuOworCQkJCQl9CisJCQkJfQorCQkJCWZidWYtPmZpbGxlZCArPSBmbGVuOworCQkJfSAvKiAuLmZsZW4gPiAwICovCisKKwkJCWlmIChmbGVuIDwgcGRldi0+dmxhc3RfcGFja2V0X3NpemUpIHsKKwkJCQkvKiBTaG9ydGVyIHBhY2tldC4uLiBXZSBwcm9iYWJseSBoYXZlIHRoZSBlbmQgb2YgYW4gaW1hZ2UtZnJhbWU7IAorCQkJCSAgIHdha2UgdXAgcmVhZCgpIHByb2Nlc3MgYW5kIGxldCBzZWxlY3QoKS9wb2xsKCkgZG8gc29tZXRoaW5nLgorCQkJCSAgIERlY29tcHJlc3Npb24gaXMgZG9uZSBpbiB1c2VyIHRpbWUgb3ZlciB0aGVyZS4KKwkJCQkgKi8KKwkJCQlpZiAocGRldi0+dnN5bmMgPT0gMikgeworCQkJCQkvKiBUaGUgVG9VQ2FtIEZ1biBDTU9TIHNlbnNvciBjYXVzZXMgdGhlIGZpcm13YXJlIHRvIHNlbmQgMiBvciAzIGJvZ3VzIAorCQkJCQkgICBmcmFtZXMgb24gdGhlIFVTQiB3aXJlIGFmdGVyIGFuIGV4cG9zdXJlIGNoYW5nZS4gVGhpcyBjb25kaXRpdGlvbiBpcyAKKwkJCQkJICAgaG93ZXZlciBkZXRlY3RlZCAgaW4gdGhlIGNhbSBhbmQgYSBiaXQgaXMgc2V0IGluIHRoZSBoZWFkZXIuCisJCQkJCSAqLworCQkJCQlpZiAocGRldi0+dHlwZSA9PSA3MzApIHsKKwkJCQkJCXVuc2lnbmVkIGNoYXIgKnB0ciA9ICh1bnNpZ25lZCBjaGFyICopZmJ1Zi0+ZGF0YTsKKwkJCQkJCQorCQkJCQkJaWYgKHB0clsxXSA9PSAxICYmIHB0clswXSAmIDB4MTApIHsKKyNpZiBQV0NfREVCVUcKKwkJCQkJCQlEZWJ1ZygiSHl1bmRhaSBDTU9TIHNlbnNvciBidWcuIERyb3BwaW5nIGZyYW1lICVkLlxuIiwgZmJ1Zi0+c2VxdWVuY2UpOworI2VuZGlmCisJCQkJCQkJcGRldi0+ZHJvcF9mcmFtZXMgKz0gMjsKKwkJCQkJCQlwZGV2LT52ZnJhbWVzX2Vycm9yKys7CisJCQkJCQl9CisJCQkJCQlpZiAoKHB0clswXSBeIHBkZXYtPnZtaXJyb3IpICYgMHgwMSkgeworCQkJCQkJCWlmIChwdHJbMF0gJiAweDAxKQorCQkJCQkJCQlJbmZvKCJTbmFwc2hvdCBidXR0b24gcHJlc3NlZC5cbiIpOworCQkJCQkJCWVsc2UKKwkJCQkJCQkJSW5mbygiU25hcHNob3QgYnV0dG9uIHJlbGVhc2VkLlxuIik7CisJCQkJCQl9CisJCQkJCQlpZiAoKHB0clswXSBeIHBkZXYtPnZtaXJyb3IpICYgMHgwMikgeworCQkJCQkJCWlmIChwdHJbMF0gJiAweDAyKQorCQkJCQkJCQlJbmZvKCJJbWFnZSBpcyBtaXJyb3JlZC5cbiIpOworCQkJCQkJCWVsc2UKKwkJCQkJCQkJSW5mbygiSW1hZ2UgaXMgbm9ybWFsLlxuIik7CisJCQkJCQl9CisJCQkJCQlwZGV2LT52bWlycm9yID0gcHRyWzBdICYgMHgwMzsKKwkJCQkJCS8qIFNvbWV0aW1lcyB0aGUgdHJhaWxlciBvZiB0aGUgNzMwIGlzIHN0aWxsIHNlbnQgYXMgYSA0IGJ5dGUgcGFja2V0IAorCQkJCQkJICAgYWZ0ZXIgYSBzaG9ydCBmcmFtZTsgdGhpcyBjb25kaXRpb24gaXMgZmlsdGVyZWQgb3V0IHNwZWNpZmljYWxseS4gQSA0IGJ5dGUKKwkJCQkJCSAgIGZyYW1lIGRvZXNuJ3QgbWFrZSBzZW5zZSBhbnl3YXkuCisJCQkJCQkgICBTbyB3ZSBnZXQgZWl0aGVyIHRoaXMgc2VxdWVuY2U6IAorCQkJCQkJICAgCWRyb3BfYml0IHNldCAtPiA0IGJ5dGUgZnJhbWUgLT4gc2hvcnQgZnJhbWUgLT4gZ29vZCBmcmFtZQorCQkJCQkJICAgT3IgdGhpcyBvbmU6CisJCQkJCQkgICAJZHJvcF9iaXQgc2V0IC0+IHNob3J0IGZyYW1lIC0+IGdvb2QgZnJhbWUKKwkJCQkJCSAgIFNvIHdlIGRyb3AgZWl0aGVyIDMgb3IgMiBmcmFtZXMgaW4gYWxsIQorCQkJCQkJICovCisJCQkJCQlpZiAoZmJ1Zi0+ZmlsbGVkID09IDQpCisJCQkJCQkJcGRldi0+ZHJvcF9mcmFtZXMrKzsKKwkJCQkJfQorCisJCQkJCS8qIEluIGNhc2Ugd2Ugd2VyZSBpbnN0cnVjdGVkIHRvIGRyb3AgdGhlIGZyYW1lLCBkbyBzbyBzaWxlbnRseS4KKwkJCQkJICAgVGhlIGJ1ZmZlciBwb2ludGVycyBhcmUgbm90IHVwZGF0ZWQgZWl0aGVyIChidXQgdGhlIGNvdW50ZXJzIGFyZSByZXNldCBiZWxvdykuCisJCQkJCSAqLworCQkJCQlpZiAocGRldi0+ZHJvcF9mcmFtZXMgPiAwKQorCQkJCQkJcGRldi0+ZHJvcF9mcmFtZXMtLTsKKwkJCQkJZWxzZSB7CisJCQkJCQkvKiBDaGVjayBmb3IgdW5kZXJmbG93IGZpcnN0ICovCisJCQkJCQlpZiAoZmJ1Zi0+ZmlsbGVkIDwgcGRldi0+ZnJhbWVfdG90YWxfc2l6ZSkgeworCQkJCQkJCVRyYWNlKFRSQUNFX0ZMT1csICJGcmFtZSBidWZmZXIgdW5kZXJmbG93ICglZCBieXRlcyk7IGRpc2NhcmRlZC5cbiIsIGZidWYtPmZpbGxlZCk7CisJCQkJCQkJcGRldi0+dmZyYW1lc19lcnJvcisrOworCQkJCQkJfQorCQkJCQkJZWxzZSB7CisJCQkJCQkJLyogU2VuZCBvbmx5IG9uY2UgcGVyIEVPRiAqLworCQkJCQkJCWF3YWtlID0gMTsgLyogZGVsYXkgd2FrZV91cHMgKi8KKworCQkJCQkJCS8qIEZpbmQgb3VyIG5leHQgZnJhbWUgdG8gZmlsbC4gVGhpcyB3aWxsIGFsd2F5cyBzdWNjZWVkLCBzaW5jZSB3ZQorCQkJCQkJCSAqIG5pY2sgYSBmcmFtZSBmcm9tIGVpdGhlciBlbXB0eSBvciBmdWxsIGxpc3QsIGJ1dCBpZiB3ZSBoYWQgdG8KKwkJCQkJCQkgKiB0YWtlIGl0IGZyb20gdGhlIGZ1bGwgbGlzdCwgaXQgbWVhbnMgYSBmcmFtZSBnb3QgZHJvcHBlZC4KKwkJCQkJCQkgKi8KKwkJCQkJCQlpZiAocHdjX25leHRfZmlsbF9mcmFtZShwZGV2KSkgeworCQkJCQkJCQlwZGV2LT52ZnJhbWVzX2R1bXBlZCsrOworCQkJCQkJCQlpZiAoKHBkZXYtPnZmcmFtZV9jb3VudCA+IEZSQU1FX0xPV01BUkspICYmIChwd2NfdHJhY2UgJiBUUkFDRV9GTE9XKSkgeworCQkJCQkJCQkJaWYgKHBkZXYtPnZmcmFtZXNfZHVtcGVkIDwgMjApCisJCQkJCQkJCQkJVHJhY2UoVFJBQ0VfRkxPVywgIkR1bXBpbmcgZnJhbWUgJWQuXG4iLCBwZGV2LT52ZnJhbWVfY291bnQpOworCQkJCQkJCQkJaWYgKHBkZXYtPnZmcmFtZXNfZHVtcGVkID09IDIwKQorCQkJCQkJCQkJCVRyYWNlKFRSQUNFX0ZMT1csICJEdW1waW5nIGZyYW1lICVkIChsYXN0IG1lc3NhZ2UpLlxuIiwgcGRldi0+dmZyYW1lX2NvdW50KTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQlmYnVmID0gcGRldi0+ZmlsbF9mcmFtZTsKKwkJCQkJCX0KKwkJCQkJfSAvKiAhZHJvcF9mcmFtZXMgKi8KKwkJCQkJcGRldi0+dmZyYW1lX2NvdW50Kys7CisJCQkJfQorCQkJCWZidWYtPmZpbGxlZCA9IDA7CisJCQkJZmlsbHB0ciA9IGZidWYtPmRhdGE7CisJCQkJcGRldi0+dnN5bmMgPSAxOworCQkJfSAvKiAuLiBmbGVuIDwgbGFzdF9wYWNrZXRfc2l6ZSAqLworCQkJcGRldi0+dmxhc3RfcGFja2V0X3NpemUgPSBmbGVuOworCQl9IC8qIC4uc3RhdHVzID09IDAgKi8KKyNpZiBQV0NfREVCVUcKKwkJLyogVGhpcyBpcyBub3JtYWxseSBub3QgaW50ZXJlc3RpbmcgdG8gdGhlIHVzZXIsIHVubGVzcyB5b3UgYXJlIHJlYWxseSBkZWJ1Z2dpbmcgc29tZXRoaW5nICovCisJCWVsc2UgeworCQkJc3RhdGljIGludCBpc29fZXJyb3IgPSAwOworCQkJaXNvX2Vycm9yKys7CisJCQlpZiAoaXNvX2Vycm9yIDwgMjApCisJCQkJVHJhY2UoVFJBQ0VfRkxPVywgIklzbyBmcmFtZSAlZCBvZiBVU0IgaGFzIGVycm9yICVkXG4iLCBpLCBmc3QpOworCQl9CisjZW5kaWYKKwl9CisKK2hhbmRsZXJfZW5kOgorCWlmIChhd2FrZSkKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwZGV2LT5mcmFtZXEpOworCisJdXJiLT5kZXYgPSBwZGV2LT51ZGV2OworCWkgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChpICE9IDApCisJCUVycigiRXJyb3IgKCVkKSByZS1zdWJtaXR0aW5nIHVyYiBpbiBwd2NfaXNvY19oYW5kbGVyLlxuIiwgaSk7Cit9CisKKworc3RhdGljIGludCBwd2NfaXNvY19pbml0KHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgaSwgaiwgcmV0OworCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWRlc2MgPSBOVUxMOworCisJaWYgKHBkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKHBkZXYtPmlzb19pbml0KQorCQlyZXR1cm4gMDsKKwlwZGV2LT52c3luYyA9IDA7CisJdWRldiA9IHBkZXYtPnVkZXY7CisKKwkvKiBHZXQgdGhlIGN1cnJlbnQgYWx0ZXJuYXRlIGludGVyZmFjZSwgYWRqdXN0IHBhY2tldCBzaXplICovCisJaWYgKCF1ZGV2LT5hY3Rjb25maWcpCisJCXJldHVybiAtRUZBVUxUOworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiw1KQorCWlkZXNjID0gJnVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlWzBdLT5hbHRzZXR0aW5nW3BkZXYtPnZhbHRlcm5hdGVdOworI2Vsc2UKKwlpbnRmID0gdXNiX2lmbnVtX3RvX2lmKHVkZXYsIDApOworCWlmIChpbnRmKQorCQlpZGVzYyA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpbnRmLCBwZGV2LT52YWx0ZXJuYXRlKTsKKyNlbmRpZgorCQkKKwlpZiAoIWlkZXNjKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIFNlYXJjaCB2aWRlbyBlbmRwb2ludCAqLworCXBkZXYtPnZtYXhfcGFja2V0X3NpemUgPSAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgaWRlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgaSsrKQorCQlpZiAoKGlkZXNjLT5lbmRwb2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiAweEYpID09IHBkZXYtPnZlbmRwb2ludCkgeworCQkJcGRldi0+dm1heF9wYWNrZXRfc2l6ZSA9IGxlMTZfdG9fY3B1KGlkZXNjLT5lbmRwb2ludFtpXS5kZXNjLndNYXhQYWNrZXRTaXplKTsKKwkJCWJyZWFrOworCQl9CisJCisJaWYgKHBkZXYtPnZtYXhfcGFja2V0X3NpemUgPCAwIHx8IHBkZXYtPnZtYXhfcGFja2V0X3NpemUgPiBJU09fTUFYX0ZSQU1FX1NJWkUpIHsKKwkJRXJyKCJGYWlsZWQgdG8gZmluZCBwYWNrZXQgc2l6ZSBmb3IgdmlkZW8gZW5kcG9pbnQgaW4gY3VycmVudCBhbHRlcm5hdGUgc2V0dGluZy5cbiIpOworCQlyZXR1cm4gLUVORklMRTsgLyogT2RkIGVycm9yLCB0aGF0IHNob3VsZCBiZSBub3RpY2FibGUgKi8KKwl9CisKKwkvKiBTZXQgYWx0ZXJuYXRlIGludGVyZmFjZSAqLworCXJldCA9IDA7CisJVHJhY2UoVFJBQ0VfT1BFTiwgIlNldHRpbmcgYWx0ZXJuYXRlIGludGVyZmFjZSAlZFxuIiwgcGRldi0+dmFsdGVybmF0ZSk7CisJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UocGRldi0+dWRldiwgMCwgcGRldi0+dmFsdGVybmF0ZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0lTT19CVUZTOyBpKyspIHsKKwkJdXJiID0gdXNiX2FsbG9jX3VyYihJU09fRlJBTUVTX1BFUl9ERVNDLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHVyYiA9PSBOVUxMKSB7CisJCQlFcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSB1cmIgJWRcbiIsIGkpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisJCXBkZXYtPnNidWZbaV0udXJiID0gdXJiOworCQlUcmFjZShUUkFDRV9NRU1PUlksICJBbGxvY2F0ZWQgVVJCIGF0IDB4JXBcbiIsIHVyYik7CisJfQorCWlmIChyZXQpIHsKKwkJLyogRGUtYWxsb2NhdGUgaW4gcmV2ZXJzZSBvcmRlciAqLworCQl3aGlsZSAoaSA+PSAwKSB7CisJCQlpZiAocGRldi0+c2J1ZltpXS51cmIgIT0gTlVMTCkKKwkJCQl1c2JfZnJlZV91cmIocGRldi0+c2J1ZltpXS51cmIpOworCQkJcGRldi0+c2J1ZltpXS51cmIgPSBOVUxMOworCQkJaS0tOworCQl9CisJCXJldHVybiByZXQ7CisJfQorCisJLyogaW5pdCBVUkIgc3RydWN0dXJlICovCQorCWZvciAoaSA9IDA7IGkgPCBNQVhfSVNPX0JVRlM7IGkrKykgeworCQl1cmIgPSBwZGV2LT5zYnVmW2ldLnVyYjsKKworCQl1cmItPmludGVydmFsID0gMTsgLy8gZGV2aWsKKwkJdXJiLT5kZXYgPSB1ZGV2OworCSAgICAgICAgdXJiLT5waXBlID0gdXNiX3Jjdmlzb2NwaXBlKHVkZXYsIHBkZXYtPnZlbmRwb2ludCk7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJICAgICAgICB1cmItPnRyYW5zZmVyX2J1ZmZlciA9IHBkZXYtPnNidWZbaV0uZGF0YTsKKwkgICAgICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IElTT19CVUZGRVJfU0laRTsKKwkgICAgICAgIHVyYi0+Y29tcGxldGUgPSBwd2NfaXNvY19oYW5kbGVyOworCSAgICAgICAgdXJiLT5jb250ZXh0ID0gcGRldjsKKwkJdXJiLT5zdGFydF9mcmFtZSA9IDA7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBJU09fRlJBTUVTX1BFUl9ERVNDOworCQlmb3IgKGogPSAwOyBqIDwgSVNPX0ZSQU1FU19QRVJfREVTQzsgaisrKSB7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLm9mZnNldCA9IGogKiBJU09fTUFYX0ZSQU1FX1NJWkU7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLmxlbmd0aCA9IHBkZXYtPnZtYXhfcGFja2V0X3NpemU7CisJCX0KKwl9CisKKwkvKiBsaW5rICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9JU09fQlVGUzsgaSsrKSB7CisJCXJldCA9IHVzYl9zdWJtaXRfdXJiKHBkZXYtPnNidWZbaV0udXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJldCkKKwkJCUVycigiaXNvY19pbml0KCkgc3VibWl0X3VyYiAlZCBmYWlsZWQgd2l0aCBlcnJvciAlZFxuIiwgaSwgcmV0KTsKKwkJZWxzZQorCQkJVHJhY2UoVFJBQ0VfTUVNT1JZLCAiVVJCIDB4JXAgc3VibWl0dGVkLlxuIiwgcGRldi0+c2J1ZltpXS51cmIpOworCX0KKworCS8qIEFsbCBpcyBkb25lLi4uICovCisJcGRldi0+aXNvX2luaXQgPSAxOworCVRyYWNlKFRSQUNFX09QRU4sICI8PCBwd2NfaXNvY19pbml0KClcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwd2NfaXNvY19jbGVhbnVwKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQoreworCWludCBpOworCisJVHJhY2UoVFJBQ0VfT1BFTiwgIj4+IHB3Y19pc29jX2NsZWFudXAoKVxuIik7CisJaWYgKHBkZXYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogVW5saW5raW5nIElTT0MgYnVmZmVycyBvbmUgYnkgb25lICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9JU09fQlVGUzsgaSsrKSB7CisJCXN0cnVjdCB1cmIgKnVyYjsKKworCQl1cmIgPSBwZGV2LT5zYnVmW2ldLnVyYjsKKwkJaWYgKHVyYiAhPSAwKSB7CisJCQlpZiAocGRldi0+aXNvX2luaXQpIHsKKwkJCQlUcmFjZShUUkFDRV9NRU1PUlksICJVbmxpbmtpbmcgVVJCICVwXG4iLCB1cmIpOworCQkJCXVzYl9raWxsX3VyYih1cmIpOworCQkJfQorCQkJVHJhY2UoVFJBQ0VfTUVNT1JZLCAiRnJlZWluZyBVUkJcbiIpOworCQkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCQlwZGV2LT5zYnVmW2ldLnVyYiA9IE5VTEw7CisJCX0KKwl9CisKKwkvKiBTdG9wIGNhbWVyYSwgYnV0IG9ubHkgaWYgd2UgYXJlIHN1cmUgdGhlIGNhbWVyYSBpcyBzdGlsbCB0aGVyZSAodW5wbHVnCisJICAgaXMgc2lnbmFsbGVkIGJ5IEVQSVBFKSAKKwkgKi8KKwlpZiAocGRldi0+ZXJyb3Jfc3RhdHVzICYmIHBkZXYtPmVycm9yX3N0YXR1cyAhPSBFUElQRSkgeworCQlUcmFjZShUUkFDRV9PUEVOLCAiU2V0dGluZyBhbHRlcm5hdGUgaW50ZXJmYWNlIDAuXG4iKTsKKwkJdXNiX3NldF9pbnRlcmZhY2UocGRldi0+dWRldiwgMCwgMCk7CisJfQorCisJcGRldi0+aXNvX2luaXQgPSAwOworCVRyYWNlKFRSQUNFX09QRU4sICI8PCBwd2NfaXNvY19jbGVhbnVwKClcbiIpOworfQorCitpbnQgcHdjX3RyeV92aWRlb19tb2RlKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBuZXdfZnBzLCBpbnQgbmV3X2NvbXByZXNzaW9uLCBpbnQgbmV3X3NuYXBzaG90KQoreworCWludCByZXQsIHN0YXJ0OworCisJLyogU3RvcCBpc29jIHN0dWZmICovCisJcHdjX2lzb2NfY2xlYW51cChwZGV2KTsKKwkvKiBSZXNldCBwYXJhbWV0ZXJzICovCisJcHdjX3Jlc2V0X2J1ZmZlcnMocGRldik7CisJLyogVHJ5IHRvIHNldCB2aWRlbyBtb2RlLi4uICovCisJc3RhcnQgPSByZXQgPSBwd2Nfc2V0X3ZpZGVvX21vZGUocGRldiwgd2lkdGgsIGhlaWdodCwgbmV3X2ZwcywgbmV3X2NvbXByZXNzaW9uLCBuZXdfc25hcHNob3QpOworCWlmIChyZXQpIHsgCisJICAgICAgICBUcmFjZShUUkFDRV9GTE9XLCAicHdjX3NldF92aWRlb19tb2RlIGF0dGVtcHQgMSBmYWlsZWQuXG4iKTsKKwkJLyogVGhhdCBmYWlsZWQuLi4gcmVzdG9yZSBvbGQgbW9kZSAod2Uga25vdyB0aGF0IHdvcmtlZCkgKi8KKwkJc3RhcnQgPSBwd2Nfc2V0X3ZpZGVvX21vZGUocGRldiwgcGRldi0+dmlldy54LCBwZGV2LT52aWV3LnksIHBkZXYtPnZmcmFtZXMsIHBkZXYtPnZjb21wcmVzc2lvbiwgcGRldi0+dnNuYXBzaG90KTsKKwkJaWYgKHN0YXJ0KSB7CisJCSAgICAgICAgVHJhY2UoVFJBQ0VfRkxPVywgInB3Y19zZXRfdmlkZW9fbW9kZSBhdHRlbXB0IDIgZmFpbGVkLlxuIik7CisJCX0KKwl9CisJaWYgKHN0YXJ0ID09IDApCisJeworCQlpZiAocHdjX2lzb2NfaW5pdChwZGV2KSA8IDApCisJCXsKKwkJCUluZm8oIkZhaWxlZCB0byByZXN0YXJ0IElTT0MgdHJhbnNmZXJzIGluIHB3Y190cnlfdmlkZW9fbW9kZS5cbiIpOworCQkJcmV0ID0gLUVBR0FJTjsgLyogbGV0J3MgdHJ5IGFnYWluLCB3aG8ga25vd3MgaWYgaXQgd29ya3MgYSBzZWNvbmQgdGltZSAqLworCQl9CisJfQorCXBkZXYtPmRyb3BfZnJhbWVzKys7IC8qIHRyeSB0byBhdm9pZCBnYXJiYWdlIGR1cmluZyBzd2l0Y2ggKi8KKwlyZXR1cm4gcmV0OyAvKiBSZXR1cm4gb3JpZ2luYWwgZXJyb3IgY29kZSAqLworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBWaWRlbzRMaW51eCBmdW5jdGlvbnMgKi8KKworc3RhdGljIGludCBwd2NfdmlkZW9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldjsKKworCVRyYWNlKFRSQUNFX09QRU4sICI+PiB2aWRlb19vcGVuIGNhbGxlZCh2ZGV2ID0gMHglcCkuXG4iLCB2ZGV2KTsKKwkKKwlwZGV2ID0gKHN0cnVjdCBwd2NfZGV2aWNlICopdmRldi0+cHJpdjsKKwlpZiAocGRldiA9PSBOVUxMKQorCQlCVUcoKTsKKwlpZiAocGRldi0+dm9wZW4pCisJCXJldHVybiAtRUJVU1k7CisJCisJZG93bigmcGRldi0+bW9kbG9jayk7CisJaWYgKCFwZGV2LT51c2JfaW5pdCkgeworCQlUcmFjZShUUkFDRV9PUEVOLCAiRG9pbmcgZmlyc3QgdGltZSBpbml0aWFsaXphdGlvbi5cbiIpOworCQlwZGV2LT51c2JfaW5pdCA9IDE7CisJCQorCQlpZiAocHdjX3RyYWNlICYgVFJBQ0VfT1BFTikKKwkJeworCQkJLyogUXVlcnkgc2Vuc29yIHR5cGUgKi8KKwkJCWNvbnN0IGNoYXIgKnNlbnNvcl90eXBlID0gTlVMTDsKKwkJCWludCByZXQ7CisKKwkJCXJldCA9IHB3Y19nZXRfY21vc19zZW5zb3IocGRldiwgJmkpOworCQkJaWYgKHJldCA+PSAwKQorCQkJeworCQkJCXN3aXRjaChpKSB7CisJCQkJY2FzZSAweDAwOiAgc2Vuc29yX3R5cGUgPSAiSHl1bmRhaSBDTU9TIHNlbnNvciI7IGJyZWFrOworCQkJCWNhc2UgMHgyMDogIHNlbnNvcl90eXBlID0gIlNvbnkgQ0NEIHNlbnNvciArIFREQTg3ODciOyBicmVhazsKKwkJCQljYXNlIDB4MkU6ICBzZW5zb3JfdHlwZSA9ICJTb255IENDRCBzZW5zb3IgKyBFeGFzIDk4TDU5IjsgYnJlYWs7CisJCQkJY2FzZSAweDJGOiAgc2Vuc29yX3R5cGUgPSAiU29ueSBDQ0Qgc2Vuc29yICsgQURJIDk4MDQiOyBicmVhazsKKwkJCQljYXNlIDB4MzA6ICBzZW5zb3JfdHlwZSA9ICJTaGFycCBDQ0Qgc2Vuc29yICsgVERBODc4NyI7IGJyZWFrOworCQkJCWNhc2UgMHgzRTogIHNlbnNvcl90eXBlID0gIlNoYXJwIENDRCBzZW5zb3IgKyBFeGFzIDk4TDU5IjsgYnJlYWs7CisJCQkJY2FzZSAweDNGOiAgc2Vuc29yX3R5cGUgPSAiU2hhcnAgQ0NEIHNlbnNvciArIEFESSA5ODA0IjsgYnJlYWs7CisJCQkJY2FzZSAweDQwOiAgc2Vuc29yX3R5cGUgPSAiVVBBIDEwMjEgc2Vuc29yIjsgYnJlYWs7CisJCQkJY2FzZSAweDEwMDogc2Vuc29yX3R5cGUgPSAiVkdBIHNlbnNvciI7IGJyZWFrOworCQkJCWNhc2UgMHgxMDE6IHNlbnNvcl90eXBlID0gIlBBTCBNUiBzZW5zb3IiOyBicmVhazsKKwkJCQlkZWZhdWx0OiAgICBzZW5zb3JfdHlwZSA9ICJ1bmtub3duIHR5cGUgb2Ygc2Vuc29yIjsgYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKHNlbnNvcl90eXBlICE9IE5VTEwpCisJCQkJSW5mbygiVGhpcyAlcyBjYW1lcmEgaXMgZXF1aXBwZWQgd2l0aCBhICVzICglZCkuXG4iLCBwZGV2LT52ZGV2LT5uYW1lLCBzZW5zb3JfdHlwZSwgaSk7CisJCX0KKwl9CisKKwkvKiBUdXJuIG9uIGNhbWVyYSAqLworCWlmIChwb3dlcl9zYXZlKSB7CisJCWkgPSBwd2NfY2FtZXJhX3Bvd2VyKHBkZXYsIDEpOworCQlpZiAoaSA8IDApCisJCQlJbmZvKCJGYWlsZWQgdG8gcmVzdG9yZSBwb3dlciB0byB0aGUgY2FtZXJhISAoJWQpXG4iLCBpKTsKKwl9CisJLyogU2V0IExFRCBvbi9vZmYgdGltZSAqLworCWlmIChwd2Nfc2V0X2xlZHMocGRldiwgbGVkX29uLCBsZWRfb2ZmKSA8IDApCisJCUluZm8oIkZhaWxlZCB0byBzZXQgTEVEIG9uL29mZiB0aW1lLlxuIik7CisJCisJcHdjX2NvbnN0cnVjdChwZGV2KTsgLyogc2V0IG1pbi9tYXggc2l6ZXMgY29ycmVjdCAqLworCisJLyogU28gZmFyLCBzbyBnb29kLiBBbGxvY2F0ZSBtZW1vcnkuICovCisJaSA9IHB3Y19hbGxvY2F0ZV9idWZmZXJzKHBkZXYpOworCWlmIChpIDwgMCkgeworCQlUcmFjZShUUkFDRV9PUEVOLCAiRmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBtZW1vcnkuXG4iKTsKKwkJdXAoJnBkZXYtPm1vZGxvY2spOworCQlyZXR1cm4gaTsKKwl9CisJCisJLyogUmVzZXQgYnVmZmVycyAmIHBhcmFtZXRlcnMgKi8KKwlwd2NfcmVzZXRfYnVmZmVycyhwZGV2KTsKKwlmb3IgKGkgPSAwOyBpIDwgZGVmYXVsdF9tYnVmczsgaSsrKQorCQlwZGV2LT5pbWFnZV91c2VkW2ldID0gMDsKKwlwZGV2LT52ZnJhbWVfY291bnQgPSAwOworCXBkZXYtPnZmcmFtZXNfZHVtcGVkID0gMDsKKwlwZGV2LT52ZnJhbWVzX2Vycm9yID0gMDsKKwlwZGV2LT52aXNvY19lcnJvcnMgPSAwOworCXBkZXYtPmVycm9yX3N0YXR1cyA9IDA7CisjaWYgUFdDX0RFQlVHCisJcGRldi0+c2VxdWVuY2UgPSAwOworI2VuZGlmCisJcHdjX2NvbnN0cnVjdChwZGV2KTsgLyogc2V0IG1pbi9tYXggc2l6ZXMgY29ycmVjdCAqLworCisJLyogU2V0IHNvbWUgZGVmYXVsdHMgKi8KKwlwZGV2LT52c25hcHNob3QgPSAwOworCisJLyogU3RhcnQgaXNvIHBpcGUgZm9yIHZpZGVvOyBmaXJzdCB0cnkgdGhlIGxhc3QgdXNlZCB2aWRlbyBzaXplCisJICAgKG9yIHRoZSBkZWZhdWx0IG9uZSk7IGlmIHRoYXQgZmFpbHMgdHJ5IFFDSUYvMTAgb3IgUVNJRi8xMDsKKwkgICBpdCB0aGF0IGZhaWxzIHRvbywgZ2l2ZSB1cC4KKwkgKi8KKwlpID0gcHdjX3NldF92aWRlb19tb2RlKHBkZXYsIHB3Y19pbWFnZV9zaXplc1twZGV2LT52c2l6ZV0ueCwgcHdjX2ltYWdlX3NpemVzW3BkZXYtPnZzaXplXS55LCBwZGV2LT52ZnJhbWVzLCBwZGV2LT52Y29tcHJlc3Npb24sIDApOworCWlmIChpKQl7CisJCVRyYWNlKFRSQUNFX09QRU4sICJGaXJzdCBhdHRlbXB0IGF0IHNldF92aWRlb19tb2RlIGZhaWxlZC5cbiIpOworCQlpZiAocGRldi0+dHlwZSA9PSA3MzAgfHwgcGRldi0+dHlwZSA9PSA3NDAgfHwgcGRldi0+dHlwZSA9PSA3NTApCisJCQlpID0gcHdjX3NldF92aWRlb19tb2RlKHBkZXYsIHB3Y19pbWFnZV9zaXplc1tQU1pfUVNJRl0ueCwgcHdjX2ltYWdlX3NpemVzW1BTWl9RU0lGXS55LCAxMCwgcGRldi0+dmNvbXByZXNzaW9uLCAwKTsKKwkJZWxzZQorCQkJaSA9IHB3Y19zZXRfdmlkZW9fbW9kZShwZGV2LCBwd2NfaW1hZ2Vfc2l6ZXNbUFNaX1FDSUZdLngsIHB3Y19pbWFnZV9zaXplc1tQU1pfUUNJRl0ueSwgMTAsIHBkZXYtPnZjb21wcmVzc2lvbiwgMCk7CisJfQorCWlmIChpKSB7CisJCVRyYWNlKFRSQUNFX09QRU4sICJTZWNvbmQgYXR0ZW1wdCBhdCBzZXRfdmlkZW9fbW9kZSBmYWlsZWQuXG4iKTsKKwkJdXAoJnBkZXYtPm1vZGxvY2spOworCQlyZXR1cm4gaTsKKwl9CisJCisJaSA9IHB3Y19pc29jX2luaXQocGRldik7CisJaWYgKGkpIHsKKwkJVHJhY2UoVFJBQ0VfT1BFTiwgIkZhaWxlZCB0byBpbml0IElTT0Mgc3R1ZmYgPSAlZC5cbiIsIGkpOworCQl1cCgmcGRldi0+bW9kbG9jayk7CisJCXJldHVybiBpOworCX0KKworCXBkZXYtPnZvcGVuKys7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gdmRldjsKKwl1cCgmcGRldi0+bW9kbG9jayk7CisJVHJhY2UoVFJBQ0VfT1BFTiwgIjw8IHZpZGVvX29wZW4oKSByZXR1cm5zIDAuXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyogTm90ZSB0aGF0IGFsbCBjbGVhbnVwIGlzIGRvbmUgaW4gdGhlIHJldmVyc2Ugb3JkZXIgYXMgaW4gX29wZW4gKi8KK3N0YXRpYyBpbnQgcHdjX3ZpZGVvX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHB3Y19kZXZpY2UgKnBkZXY7CisJaW50IGk7CisKKwlUcmFjZShUUkFDRV9PUEVOLCAiPj4gdmlkZW9fY2xvc2UgY2FsbGVkKHZkZXYgPSAweCVwKS5cbiIsIHZkZXYpOworCisJcGRldiA9IChzdHJ1Y3QgcHdjX2RldmljZSAqKXZkZXYtPnByaXY7CisJaWYgKHBkZXYtPnZvcGVuID09IDApCisJCUluZm8oInZpZGVvX2Nsb3NlKCkgY2FsbGVkIG9uIGNsb3NlZCBkZXZpY2U/XG4iKTsKKworCS8qIER1bXAgc3RhdGlzdGljcywgYnV0IG9ubHkgaWYgYSByZWFzb25hYmxlIGFtb3VudCBvZiBmcmFtZXMgd2VyZQorCSAgIHByb2Nlc3NlZCAodG8gcHJldmVudCBlbmRsZXNzIGxvZy1lbnRyaWVzIGluIGNhc2Ugb2Ygc25hcC1zaG90CisJICAgcHJvZ3JhbXMpCisJICovCisJaWYgKHBkZXYtPnZmcmFtZV9jb3VudCA+IDIwKQorCQlJbmZvKCJDbG9zaW5nIHZpZGVvIGRldmljZTogJWQgZnJhbWVzIHJlY2VpdmVkLCBkdW1wZWQgJWQgZnJhbWVzLCAlZCBmcmFtZXMgd2l0aCBlcnJvcnMuXG4iLCBwZGV2LT52ZnJhbWVfY291bnQsIHBkZXYtPnZmcmFtZXNfZHVtcGVkLCBwZGV2LT52ZnJhbWVzX2Vycm9yKTsKKworCXN3aXRjaCAocGRldi0+dHlwZSkKKwkgeworCSAgY2FzZSA2NzU6CisJICBjYXNlIDY4MDoKKwkgIGNhc2UgNjkwOgorCSAgY2FzZSA3MjA6CisJICBjYXNlIDczMDoKKwkgIGNhc2UgNzQwOgorCSAgY2FzZSA3NTA6CisJICAgIHB3Y19kZWMyM19leGl0KCk7CS8qIFRpbW9uICYgS2lhcmEgKi8KKwkgICAgYnJlYWs7CisJICBjYXNlIDY0NToKKwkgIGNhc2UgNjQ2OgorCSAgICBwd2NfZGVjMV9leGl0KCk7CisJICAgIGJyZWFrOworCSB9CisKKwlwd2NfaXNvY19jbGVhbnVwKHBkZXYpOworCXB3Y19mcmVlX2J1ZmZlcnMocGRldik7CisKKwkvKiBUdXJuIG9mZiBMRURTIGFuZCBwb3dlciBkb3duIGNhbWVyYSwgYnV0IG9ubHkgd2hlbiBub3QgdW5wbHVnZ2VkICovCisJaWYgKHBkZXYtPmVycm9yX3N0YXR1cyAhPSBFUElQRSkgeworCQkvKiBUdXJuIExFRHMgb2ZmICovCisJCWlmIChwd2Nfc2V0X2xlZHMocGRldiwgMCwgMCkgPCAwKQorCQkJSW5mbygiRmFpbGVkIHRvIHNldCBMRUQgb24vb2ZmIHRpbWUuXG4iKTsKKwkJaWYgKHBvd2VyX3NhdmUpIHsKKwkJCWkgPSBwd2NfY2FtZXJhX3Bvd2VyKHBkZXYsIDApOworCQkJaWYgKGkgPCAwKQorCQkJCUVycigiRmFpbGVkIHRvIHBvd2VyIGRvd24gY2FtZXJhICglZClcbiIsIGkpOworCQl9CisJfQorCXBkZXYtPnZvcGVuID0gMDsKKwlUcmFjZShUUkFDRV9PUEVOLCAiPDwgdmlkZW9fY2xvc2UoKVxuIik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKglGSVhNRTogd2hhdCBhYm91dCB0d28gcGFyYWxsZWwgcmVhZHMgPz8/PworICogICAgICBBTlNXRVI6IE5vdCBzdXBwb3J0ZWQuIFlvdSBjYW4ndCBvcGVuIHRoZSBkZXZpY2UgbW9yZSB0aGFuIG9uY2UsCisgICAgICAgICAgICAgICAgZGVzcGl0ZSB3aGF0IHRoZSBWNEwxIGludGVyZmFjZSBzYXlzLiBGaXJzdCwgSSBkb24ndCBzZWUKKyAgICAgICAgICAgICAgICB0aGUgbmVlZCwgc2Vjb25kIHRoZXJlJ3Mgbm8gbWVjaGFuaXNtIG9mIGFsZXJ0aW5nIHRoZQorICAgICAgICAgICAgICAgIDJuZC8zcmQvLi4uIHByb2Nlc3Mgb2YgZXZlbnRzIGxpa2UgY2hhbmdpbmcgaW1hZ2Ugc2l6ZS4KKyAgICAgICAgICAgICAgICBBbmQgSSBkb24ndCBzZWUgdGhlIHBvaW50IG9mIGJsb2NraW5nIHRoYXQgZm9yIHRoZQorICAgICAgICAgICAgICAgIDJuZC8zcmQvLi4uIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgSW4gbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnRzIHJlYWRpbmcgcGFyYWxsZWwgZnJvbSBhbnkKKyAgICAgICAgICAgICAgICBkZXZpY2UgaXMgdHJpY2t5IGFueWhvdy4KKyAqLworCitzdGF0aWMgc3NpemVfdCBwd2NfdmlkZW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBidWYsCisJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHB3Y19kZXZpY2UgKnBkZXY7CisJaW50IG5vYmxvY2sgPSBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSzsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKyAgICAgICAgaW50IGJ5dGVzX3RvX3JlYWQ7CisKKwlUcmFjZShUUkFDRV9SRUFELCAidmlkZW9fcmVhZCgweCVwLCAlcCwgJVpkKSBjYWxsZWQuXG4iLCB2ZGV2LCBidWYsIGNvdW50KTsKKwlpZiAodmRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlwZGV2ID0gdmRldi0+cHJpdjsKKwlpZiAocGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAocGRldi0+ZXJyb3Jfc3RhdHVzKQorCQlyZXR1cm4gLXBkZXYtPmVycm9yX3N0YXR1czsgLyogU29tZXRoaW5nIGhhcHBlbmVkLCByZXBvcnQgd2hhdC4gKi8KKworCS8qIEluIGNhc2Ugd2UncmUgZG9pbmcgcGFydGlhbCByZWFkcywgd2UgZG9uJ3QgaGF2ZSB0byB3YWl0IGZvciBhIGZyYW1lICovCisJaWYgKHBkZXYtPmltYWdlX3JlYWRfcG9zID09IDApIHsKKwkJLyogRG8gd2FpdCBxdWV1ZWluZyBhY2NvcmRpbmcgdG8gdGhlIChkb2MpYm9vayAqLworCQlhZGRfd2FpdF9xdWV1ZSgmcGRldi0+ZnJhbWVxLCAmd2FpdCk7CisJCXdoaWxlIChwZGV2LT5mdWxsX2ZyYW1lcyA9PSBOVUxMKSB7CisJCQkvKiBDaGVjayBmb3IgdW5wbHVnZ2VkL2V0Yy4gaGVyZSAqLworCQkJaWYgKHBkZXYtPmVycm9yX3N0YXR1cykgeworCQkJCXJlbW92ZV93YWl0X3F1ZXVlKCZwZGV2LT5mcmFtZXEsICZ3YWl0KTsKKwkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQkJCXJldHVybiAtcGRldi0+ZXJyb3Jfc3RhdHVzIDsKKwkJCX0KKwkgICAgICAgICAgICAgICAgaWYgKG5vYmxvY2spIHsKKwkgICAgICAgICAgICAgICAgCXJlbW92ZV93YWl0X3F1ZXVlKCZwZGV2LT5mcmFtZXEsICZ3YWl0KTsKKwkgICAgICAgICAgICAgICAgCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJICAgICAgICAgICAgICAgIAlyZXR1cm4gLUVXT1VMREJMT0NLOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCSAgICAgICAgICAgICAgICAJcmVtb3ZlX3dhaXRfcXVldWUoJnBkZXYtPmZyYW1lcSwgJndhaXQpOworCSAgICAgICAgICAgICAgICAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkgICAgICAgICAgICAgICAgCXJldHVybiAtRVJFU1RBUlRTWVM7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgc2NoZWR1bGUoKTsKKwkgICAgICAgICAgICAgICAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJfQorCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcGRldi0+ZnJhbWVxLCAmd2FpdCk7CisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCQkvKiBEZWNvbXByZXNzIGFuZCByZWxlYXNlIGZyYW1lICovCisJCWlmIChwd2NfaGFuZGxlX2ZyYW1lKHBkZXYpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJVHJhY2UoVFJBQ0VfUkVBRCwgIkNvcHlpbmcgZGF0YSB0byB1c2VyIHNwYWNlLlxuIik7CisJaWYgKHBkZXYtPnZwYWxldHRlID09IFZJREVPX1BBTEVUVEVfUkFXKQorCQlieXRlc190b19yZWFkID0gcGRldi0+ZnJhbWVfc2l6ZTsKKwllbHNlCisgCQlieXRlc190b19yZWFkID0gcGRldi0+dmlldy5zaXplOworCisJLyogY29weSBieXRlcyB0byB1c2VyIHNwYWNlOyB3ZSBhbGxvdyBmb3IgcGFydGlhbCByZWFkcyAqLworCWlmIChjb3VudCArIHBkZXYtPmltYWdlX3JlYWRfcG9zID4gYnl0ZXNfdG9fcmVhZCkKKwkJY291bnQgPSBieXRlc190b19yZWFkIC0gcGRldi0+aW1hZ2VfcmVhZF9wb3M7CisJaWYgKGNvcHlfdG9fdXNlcihidWYsIHBkZXYtPmltYWdlX3B0cltwZGV2LT5maWxsX2ltYWdlXSArIHBkZXYtPmltYWdlX3JlYWRfcG9zLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCXBkZXYtPmltYWdlX3JlYWRfcG9zICs9IGNvdW50OworCWlmIChwZGV2LT5pbWFnZV9yZWFkX3BvcyA+PSBieXRlc190b19yZWFkKSB7IC8qIEFsbCBkYXRhIGhhcyBiZWVuIHJlYWQgKi8KKwkJcGRldi0+aW1hZ2VfcmVhZF9wb3MgPSAwOworCQlwd2NfbmV4dF9pbWFnZShwZGV2KTsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHB3Y192aWRlb19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHB3Y19kZXZpY2UgKnBkZXY7CisKKwlpZiAodmRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlwZGV2ID0gdmRldi0+cHJpdjsKKwlpZiAocGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXBvbGxfd2FpdChmaWxlLCAmcGRldi0+ZnJhbWVxLCB3YWl0KTsKKwlpZiAocGRldi0+ZXJyb3Jfc3RhdHVzKQorCQlyZXR1cm4gUE9MTEVSUjsKKwlpZiAocGRldi0+ZnVsbF9mcmFtZXMgIT0gTlVMTCkgLyogd2UgaGF2ZSBmcmFtZXMgd2FpdGluZyAqLworCQlyZXR1cm4gKFBPTExJTiB8IFBPTExSRE5PUk0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHdjX3ZpZGVvX2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHB3Y19kZXZpY2UgKnBkZXY7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisKKwlpZiAodmRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlwZGV2ID0gdmRldi0+cHJpdjsKKwlpZiAocGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXN3aXRjaCAoY21kKSB7CisJCS8qIFF1ZXJ5IGNhYmFwaWxpdGllcyAqLworCQljYXNlIFZJRElPQ0dDQVA6CisJCXsKKwkJCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5ICpjYXBzID0gYXJnOworCisJCQlzdHJjcHkoY2Fwcy0+bmFtZSwgdmRldi0+bmFtZSk7CisJCQljYXBzLT50eXBlID0gVklEX1RZUEVfQ0FQVFVSRTsKKwkJCWNhcHMtPmNoYW5uZWxzID0gMTsKKwkJCWNhcHMtPmF1ZGlvcyA9IDE7CisJCQljYXBzLT5taW53aWR0aCAgPSBwZGV2LT52aWV3X21pbi54OworCQkJY2Fwcy0+bWluaGVpZ2h0ID0gcGRldi0+dmlld19taW4ueTsKKwkJCWNhcHMtPm1heHdpZHRoICA9IHBkZXYtPnZpZXdfbWF4Lng7CisJCQljYXBzLT5tYXhoZWlnaHQgPSBwZGV2LT52aWV3X21heC55OworCQkJYnJlYWs7CisJCX0KKworCQkvKiBDaGFubmVsIGZ1bmN0aW9ucyAoc2ltdWxhdGUgMSBjaGFubmVsKSAqLworCQljYXNlIFZJRElPQ0dDSEFOOgorCQl7CisJCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdiA9IGFyZzsKKworCQkJaWYgKHYtPmNoYW5uZWwgIT0gMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXYtPmZsYWdzID0gMDsKKwkJCXYtPnR1bmVycyA9IDA7CisJCQl2LT50eXBlID0gVklERU9fVFlQRV9DQU1FUkE7CisJCQlzdHJjcHkodi0+bmFtZSwgIldlYmNhbSIpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQljYXNlIFZJRElPQ1NDSEFOOgorCQl7CisJCQkvKiBUaGUgc3BlYyBzYXlzIHRoZSBhcmd1bWVudCBpcyBhbiBpbnRlZ2VyLCBidXQKKwkJCSAgIHRoZSBidHR2IGRyaXZlciB1c2VzIGEgdmlkZW9fY2hhbm5lbCBhcmcsIHdoaWNoCisJCQkgICBtYWtlcyBzZW5zZSBiZWNhc3VlIGl0IGFsc28gaGFzIHRoZSBub3JtIGZsYWcuCisJCQkgKi8KKwkJCXN0cnVjdCB2aWRlb19jaGFubmVsICp2ID0gYXJnOworCQkJaWYgKHYtPmNoYW5uZWwgIT0gMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXJldHVybiAwOworCQl9CisKKworCQkvKiBQaWN0dXJlIGZ1bmN0aW9uczsgY29udHJhc3QgZXRjLiAqLworCQljYXNlIFZJRElPQ0dQSUNUOgorCQl7CisJCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcCA9IGFyZzsKKwkJCWludCB2YWw7CisKKwkJCXZhbCA9IHB3Y19nZXRfYnJpZ2h0bmVzcyhwZGV2KTsKKwkJCWlmICh2YWwgPj0gMCkKKwkJCQlwLT5icmlnaHRuZXNzID0gdmFsOworCQkJZWxzZQorCQkJCXAtPmJyaWdodG5lc3MgPSAweGZmZmY7CisJCQl2YWwgPSBwd2NfZ2V0X2NvbnRyYXN0KHBkZXYpOworCQkJaWYgKHZhbCA+PSAwKQorCQkJCXAtPmNvbnRyYXN0ID0gdmFsOworCQkJZWxzZQorCQkJCXAtPmNvbnRyYXN0ID0gMHhmZmZmOworCQkJLyogR2FtbWEsIFdoaXRlbmVzcywgd2hhdCdzIHRoZSBkaWZmZXJlbmNlPyA6KSAqLworCQkJdmFsID0gcHdjX2dldF9nYW1tYShwZGV2KTsKKwkJCWlmICh2YWwgPj0gMCkKKwkJCQlwLT53aGl0ZW5lc3MgPSB2YWw7CisJCQllbHNlCisJCQkJcC0+d2hpdGVuZXNzID0gMHhmZmZmOworCQkJdmFsID0gcHdjX2dldF9zYXR1cmF0aW9uKHBkZXYpOworCQkJaWYgKHZhbCA+PSAwKQorCQkJCXAtPmNvbG91ciA9IHZhbDsKKwkJCWVsc2UKKwkJCQlwLT5jb2xvdXIgPSAweGZmZmY7CisJCQlwLT5kZXB0aCA9IDI0OworCQkJcC0+cGFsZXR0ZSA9IHBkZXYtPnZwYWxldHRlOworCQkJcC0+aHVlID0gMHhGRkZGOyAvKiBOL0EgKi8KKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSBWSURJT0NTUElDVDoKKwkJeworCQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnAgPSBhcmc7CisJCQkvKgorCQkJICoJRklYTUU6CVN1cHBvc2Ugd2UgYXJlIG1pZCByZWFkCisJCQkgICAgICAgIEFOU1dFUjogTm8gcHJvYmxlbTogdGhlIGZpcm13YXJlIG9mIHRoZSBjYW1lcmEKKwkJCSAgICAgICAgICAgICAgICBjYW4gaGFuZGxlIGJyaWdodG5lc3MvY29udHJhc3QvZXRjCisJCQkgICAgICAgICAgICAgICAgY2hhbmdlcyBhdCBfYW55XyB0aW1lLCBhbmQgdGhlIHBhbGV0dGUKKwkJCSAgICAgICAgICAgICAgICBpcyB1c2VkIGV4YWN0bHkgb25jZSBpbiB0aGUgdW5jb21wcmVzcworCQkJICAgICAgICAgICAgICAgIHJvdXRpbmUuCisJCQkgKi8KKwkJCXB3Y19zZXRfYnJpZ2h0bmVzcyhwZGV2LCBwLT5icmlnaHRuZXNzKTsKKwkJCXB3Y19zZXRfY29udHJhc3QocGRldiwgcC0+Y29udHJhc3QpOworCQkJcHdjX3NldF9nYW1tYShwZGV2LCBwLT53aGl0ZW5lc3MpOworCQkJcHdjX3NldF9zYXR1cmF0aW9uKHBkZXYsIHAtPmNvbG91cik7CisJCQlpZiAocC0+cGFsZXR0ZSAmJiBwLT5wYWxldHRlICE9IHBkZXYtPnZwYWxldHRlKSB7CisJCQkJc3dpdGNoIChwLT5wYWxldHRlKSB7CisJCQkJCWNhc2UgVklERU9fUEFMRVRURV9ZVVY0MjBQOgorCQkJCQljYXNlIFZJREVPX1BBTEVUVEVfUkFXOgorCQkJCQkJcGRldi0+dnBhbGV0dGUgPSBwLT5wYWxldHRlOworCQkJCQkJcmV0dXJuIHB3Y190cnlfdmlkZW9fbW9kZShwZGV2LCBwZGV2LT5pbWFnZS54LCBwZGV2LT5pbWFnZS55LCBwZGV2LT52ZnJhbWVzLCBwZGV2LT52Y29tcHJlc3Npb24sIHBkZXYtPnZzbmFwc2hvdCk7CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQkvKiBXaW5kb3cvc2l6ZSBwYXJhbWV0ZXJzICovCQkKKwkJY2FzZSBWSURJT0NHV0lOOgorCQl7CisJCQlzdHJ1Y3QgdmlkZW9fd2luZG93ICp2dyA9IGFyZzsKKwkJCQorCQkJdnctPnggPSAwOworCQkJdnctPnkgPSAwOworCQkJdnctPndpZHRoID0gcGRldi0+dmlldy54OworCQkJdnctPmhlaWdodCA9IHBkZXYtPnZpZXcueTsKKwkJCXZ3LT5jaHJvbWFrZXkgPSAwOworCQkJdnctPmZsYWdzID0gKHBkZXYtPnZmcmFtZXMgPDwgUFdDX0ZQU19TSElGVCkgfCAKKwkJCSAgICAgICAgICAgKHBkZXYtPnZzbmFwc2hvdCA/IFBXQ19GUFNfU05BUFNIT1QgOiAwKTsKKwkJCWJyZWFrOworCQl9CisJCQorCQljYXNlIFZJRElPQ1NXSU46CisJCXsKKwkJCXN0cnVjdCB2aWRlb193aW5kb3cgKnZ3ID0gYXJnOworCQkJaW50IGZwcywgc25hcHNob3QsIHJldDsKKworCQkJZnBzID0gKHZ3LT5mbGFncyAmIFBXQ19GUFNfRlJNQVNLKSA+PiBQV0NfRlBTX1NISUZUOworCQkJc25hcHNob3QgPSB2dy0+ZmxhZ3MgJiBQV0NfRlBTX1NOQVBTSE9UOworCQkJaWYgKGZwcyA9PSAwKQorCQkJCWZwcyA9IHBkZXYtPnZmcmFtZXM7CisJCQlpZiAocGRldi0+dmlldy54ID09IHZ3LT53aWR0aCAmJiBwZGV2LT52aWV3LnkgJiYgZnBzID09IHBkZXYtPnZmcmFtZXMgJiYgc25hcHNob3QgPT0gcGRldi0+dnNuYXBzaG90KQorCQkJCXJldHVybiAwOworCQkJcmV0ID0gcHdjX3RyeV92aWRlb19tb2RlKHBkZXYsIHZ3LT53aWR0aCwgdnctPmhlaWdodCwgZnBzLCBwZGV2LT52Y29tcHJlc3Npb24sIHNuYXBzaG90KTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJCWJyZWFrOwkJCisJCX0KKwkJCisJCS8qIFdlIGRvbid0IGhhdmUgb3ZlcmxheSBzdXBwb3J0ICh5ZXQpICovCisJCWNhc2UgVklESU9DR0ZCVUY6CisJCXsKKwkJCXN0cnVjdCB2aWRlb19idWZmZXIgKnZiID0gYXJnOworCisJCQltZW1zZXQodmIsMCxzaXplb2YoKnZiKSk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIG1tYXAoKSBmdW5jdGlvbnMgKi8KKwkJY2FzZSBWSURJT0NHTUJVRjoKKwkJeworCQkJLyogVGVsbCB0aGUgdXNlciBwcm9ncmFtIGhvdyBtdWNoIG1lbW9yeSBpcyBuZWVkZWQgZm9yIGEgbW1hcCgpICovCisJCQlzdHJ1Y3QgdmlkZW9fbWJ1ZiAqdm0gPSBhcmc7CisJCQlpbnQgaTsKKworCQkJbWVtc2V0KHZtLCAwLCBzaXplb2YoKnZtKSk7CisJCQl2bS0+c2l6ZSA9IGRlZmF1bHRfbWJ1ZnMgKiBwZGV2LT5sZW5fcGVyX2ltYWdlOworCQkJdm0tPmZyYW1lcyA9IGRlZmF1bHRfbWJ1ZnM7IC8qIGRvdWJsZSBidWZmZXJpbmcgc2hvdWxkIGJlIGVub3VnaCBmb3IgbW9zdCBhcHBsaWNhdGlvbnMgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBkZWZhdWx0X21idWZzOyBpKyspCisJCQkJdm0tPm9mZnNldHNbaV0gPSBpICogcGRldi0+bGVuX3Blcl9pbWFnZTsKKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSBWSURJT0NNQ0FQVFVSRToKKwkJeworCQkJLyogU3RhcnQgY2FwdHVyZSBpbnRvIGEgZ2l2ZW4gaW1hZ2UgYnVmZmVyIChjYWxsZWQgJ2ZyYW1lJyBpbiB2aWRlb19tbWFwIHN0cnVjdHVyZSkgKi8KKwkJCXN0cnVjdCB2aWRlb19tbWFwICp2bSA9IGFyZzsKKworCQkJVHJhY2UoVFJBQ0VfUkVBRCwgIlZJRElPQ01DQVBUVVJFOiAlZHglZCwgZnJhbWUgJWQsIGZvcm1hdCAlZFxuIiwgdm0tPndpZHRoLCB2bS0+aGVpZ2h0LCB2bS0+ZnJhbWUsIHZtLT5mb3JtYXQpOworCQkJaWYgKHZtLT5mcmFtZSA8IDAgfHwgdm0tPmZyYW1lID49IGRlZmF1bHRfbWJ1ZnMpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCS8qIHhhd3R2IGlzIG5hc3R5LiBJdCBwcm9iZXMgdGhlIGF2YWlsYWJsZSBwYWxldHRlcworCQkJICAgYnkgc2V0dGluZyBhIHZlcnkgc21hbGwgaW1hZ2Ugc2l6ZSBhbmQgdHJ5aW5nCisJCQkgICB2YXJpb3VzIHBhbGV0dGVzLi4uIFRoZSBkcml2ZXIgZG9lc24ndCBzdXBwb3J0CisJCQkgICBzdWNoIHNtYWxsIGltYWdlcywgc28gSSdtIHdvcmtpbmcgYXJvdW5kIGl0LgorCQkJICovCisJCQlpZiAodm0tPmZvcm1hdCkKKwkJCXsKKwkJCQlzd2l0Y2ggKHZtLT5mb3JtYXQpCisJCQkJeworCQkJCQljYXNlIFZJREVPX1BBTEVUVEVfWVVWNDIwUDoKKwkJCQkJY2FzZSBWSURFT19QQUxFVFRFX1JBVzoKKwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmICgodm0tPndpZHRoICE9IHBkZXYtPnZpZXcueCB8fCB2bS0+aGVpZ2h0ICE9IHBkZXYtPnZpZXcueSkgJiYKKwkJCSAgICAodm0tPndpZHRoID49IHBkZXYtPnZpZXdfbWluLnggJiYgdm0tPmhlaWdodCA+PSBwZGV2LT52aWV3X21pbi55KSkgeworCQkJCWludCByZXQ7CisKKwkJCQlUcmFjZShUUkFDRV9PUEVOLCAiVklESU9DTUNBUFRVUkU6IGNoYW5naW5nIHNpemUgdG8gcGxlYXNlIHhhd3R2IDotKC5cbiIpOworCQkJCXJldCA9IHB3Y190cnlfdmlkZW9fbW9kZShwZGV2LCB2bS0+d2lkdGgsIHZtLT5oZWlnaHQsIHBkZXYtPnZmcmFtZXMsIHBkZXYtPnZjb21wcmVzc2lvbiwgcGRldi0+dnNuYXBzaG90KTsKKwkJCQlpZiAocmV0KQorCQkJCQlyZXR1cm4gcmV0OworCQkJfSAvKiAuLi4gc2l6ZSBtaXNtYXRjaCAqLworCisJCQkvKiBGSVhNRTogc2hvdWxkIHdlIGxvY2sgaGVyZT8gKi8KKwkJCWlmIChwZGV2LT5pbWFnZV91c2VkW3ZtLT5mcmFtZV0pCisJCQkJcmV0dXJuIC1FQlVTWTsJLyogYnVmZmVyIHdhc24ndCBhdmFpbGFibGUuIEJ1bW1lciAqLworCQkJcGRldi0+aW1hZ2VfdXNlZFt2bS0+ZnJhbWVdID0gMTsKKworCQkJLyogT2theSwgd2UncmUgZG9uZSBoZXJlLiBJbiB0aGUgU1lOQyBjYWxsIHdlIHdhaXQgdW50aWwgYSAKKwkJCSAgIGZyYW1lIGNvbWVzIGF2YWlsYWJsZSwgdGhlbiBleHBhbmQgaW1hZ2UgaW50byB0aGUgZ2l2ZW4gCisJCQkgICBidWZmZXIuCisJCQkgICBJbiBjb250cmFzdCB0byB0aGUgQ1BpQSBjYW0gdGhlIFBoaWxpcHMgY2FtcyBkZWxpdmVyIGEKKwkJCSAgIGNvbnN0YW50IHN0cmVhbSwgYWxtb3N0IGxpa2UgYSBncmFiYmVyIGNhcmQuIEFsc28sCisJCQkgICB3ZSBoYXZlIHNlcGFyYXRlIGJ1ZmZlcnMgZm9yIHRoZSByYXdkYXRhIGFuZCB0aGUgaW1hZ2UsCisJCQkgICBtZWFuaW5nIHdlIGNhbiBuZWFybHkgYWx3YXlzIGV4cGFuZCBpbnRvIHRoZSByZXF1ZXN0ZWQgYnVmZmVyLgorCQkJICovCisJCQlUcmFjZShUUkFDRV9SRUFELCAiVklESU9DTUNBUFRVUkUgZG9uZS5cbiIpOworCQkJYnJlYWs7CisJCX0KKworCQljYXNlIFZJRElPQ1NZTkM6CisJCXsKKwkJCS8qIFRoZSBkb2Mgc2F5czogIldoZW5ldmVyIGEgYnVmZmVyIGlzIHVzZWQgaXQgc2hvdWxkCisJCQkgICBjYWxsIFZJRElPQ1NZTkMgdG8gZnJlZSB0aGlzIGZyYW1lIHVwIGFuZCBjb250aW51ZS4iCisJCQkgICAKKwkJCSAgIFRoZSBvbmx5IG9kZCB0aGluZyBhYm91dCB0aGlzIHdob2xlIHByb2NlZHVyZSBpcyAKKwkJCSAgIHRoYXQgTUNBUFRVUkUgZmxhZ3MgdGhlIGJ1ZmZlciBhcyAiaW4gdXNlIiwgYW5kCisJCQkgICBTWU5DIGltbWVkaWF0ZWx5IHVubWFya3MgaXQsIHdoaWxlIGl0IGlzbid0IAorCQkJICAgYWZ0ZXIgU1lOQyB0aGF0IHlvdSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBhY3R1YWxseQorCQkJICAgZ290IGZpbGxlZCEgU28geW91IGJldHRlciBub3Qgc3RhcnQgYSBDQVBUVVJFIGluCisJCQkgICB0aGUgc2FtZSBmcmFtZSBpbW1lZGlhdGVseSAodXNlIGRvdWJsZSBidWZmZXJpbmcpLiAKKwkJCSAgIFRoaXMgaXMgbm90IGEgcHJvYmxlbSBmb3IgdGhpcyBjYW0sIHNpbmNlIGl0IGhhcyAKKwkJCSAgIGV4dHJhIGludGVybWVkaWF0ZSBidWZmZXJzLCBidXQgYSBoYXJkd2FyZSAKKwkJCSAgIGdyYWJiZXIgY2FyZCB3aWxsIHRoZW4gb3ZlcndyaXRlIHRoZSBidWZmZXIgCisJCQkgICB5b3UncmUgd29ya2luZyBvbi4KKwkJCSAqLworCQkJaW50ICptYnVmID0gYXJnOworCQkJaW50IHJldDsKKworCQkJVHJhY2UoVFJBQ0VfUkVBRCwgIlZJRElPQ1NZTkMgY2FsbGVkICglZCkuXG4iLCAqbWJ1Zik7CisKKwkJCS8qIGJvdW5kcyBjaGVjayAqLworCQkJaWYgKCptYnVmIDwgMCB8fCAqbWJ1ZiA+PSBkZWZhdWx0X21idWZzKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJLyogY2hlY2sgaWYgdGhpcyBidWZmZXIgd2FzIHJlcXVlc3RlZCBhbnl3YXkgKi8KKwkJCWlmIChwZGV2LT5pbWFnZV91c2VkWyptYnVmXSA9PSAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQkvKiBBZGQgb3Vyc2VsdmVzIHRvIHRoZSBmcmFtZSB3YWl0LXF1ZXVlLgorCQkJICAgCisJCQkgICBGSVhNRTogbmVlZHMgYXVkaXRpbmcgZm9yIHNhZmV0eS4KKwkJCSAgIFFVRVNUSU9OOiBJbiB3aGF0IHJlc3BlY3Q/IEkgdGhpbmsgdGhhdCB1c2luZyB0aGUKKwkJCSAgICAgICAgICAgICBmcmFtZXEgaXMgc2FmZSBub3cuCisJCQkgKi8KKwkJCWFkZF93YWl0X3F1ZXVlKCZwZGV2LT5mcmFtZXEsICZ3YWl0KTsKKwkJCXdoaWxlIChwZGV2LT5mdWxsX2ZyYW1lcyA9PSBOVUxMKSB7CisJCQkJaWYgKHBkZXYtPmVycm9yX3N0YXR1cykgeworCQkJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcGRldi0+ZnJhbWVxLCAmd2FpdCk7CisJCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCQkJCXJldHVybiAtcGRldi0+ZXJyb3Jfc3RhdHVzOworCQkJCX0KKwkJCQorCSAgICAgICAgICAgICAgICAJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJICAgICAgICAgICAgICAgIAkJcmVtb3ZlX3dhaXRfcXVldWUoJnBkZXYtPmZyYW1lcSwgJndhaXQpOworCQkgICAgICAgICAgICAgICAgCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCSAgICAgICAgICAgICAgICAJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkgICAgICAgIAkgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgCXNjaGVkdWxlKCk7CisJCSAgICAgICAgICAgICAgICBzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJfQorCQkJcmVtb3ZlX3dhaXRfcXVldWUoJnBkZXYtPmZyYW1lcSwgJndhaXQpOworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJCQkKKwkJCS8qIFRoZSBmcmFtZSBpcyByZWFkeS4gRXhwYW5kIGluIHRoZSBpbWFnZSBidWZmZXIgCisJCQkgICByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIuIEkgZG9uJ3QgY2FyZSBpZiB5b3UgCisJCQkgICBtbWFwKCkgNSBidWZmZXJzIGFuZCByZXF1ZXN0IGRhdGEgaW4gdGhpcyBvcmRlcjogCisJCQkgICBidWZmZXIgNCAyIDMgMCAxIDIgMyAwIDQgMyAxIC4gLiAuCisJCQkgICBHcmFiYmVyIGhhcmR3YXJlIG1heSBub3QgYmUgc28gZm9yZ2l2aW5nLgorCQkJICovCisJCQlUcmFjZShUUkFDRV9SRUFELCAiVklESU9DU1lOQzogZnJhbWUgcmVhZHkuXG4iKTsKKwkJCXBkZXYtPmZpbGxfaW1hZ2UgPSAqbWJ1ZjsgLyogdGVsbCBpbiB3aGljaCBidWZmZXIgd2Ugd2FudCB0aGUgaW1hZ2UgdG8gYmUgZXhwYW5kZWQgKi8KKwkJCS8qIERlY29tcHJlc3MsIGV0YyAqLworCQkJcmV0ID0gcHdjX2hhbmRsZV9mcmFtZShwZGV2KTsKKwkJCXBkZXYtPmltYWdlX3VzZWRbKm1idWZdID0gMDsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCQkKKwkJY2FzZSBWSURJT0NHQVVESU86CisJCXsKKwkJCXN0cnVjdCB2aWRlb19hdWRpbyAqdiA9IGFyZzsKKwkJCQorCQkJc3RyY3B5KHYtPm5hbWUsICJNaWNyb3Bob25lIik7CisJCQl2LT5hdWRpbyA9IC0xOyAvKiB1bmtub3duIGF1ZGlvIG1pbm9yICovCisJCQl2LT5mbGFncyA9IDA7CisJCQl2LT5tb2RlID0gVklERU9fU09VTkRfTU9OTzsKKwkJCXYtPnZvbHVtZSA9IDA7CisJCQl2LT5iYXNzID0gMDsKKwkJCXYtPnRyZWJsZSA9IDA7CisJCQl2LT5iYWxhbmNlID0gMHg4MDAwOworCQkJdi0+c3RlcCA9IDE7CisJCQlicmVhazsJCisJCX0KKwkJCisJCWNhc2UgVklESU9DU0FVRElPOgorCQl7CisJCQkvKiBEdW1teTogbm90aGluZyBjYW4gYmUgc2V0ICovCisJCQlicmVhazsKKwkJfQorCQkKKwkJY2FzZSBWSURJT0NHVU5JVDoKKwkJeworCQkJc3RydWN0IHZpZGVvX3VuaXQgKnZ1ID0gYXJnOworCQkJCisJCQl2dS0+dmlkZW8gPSBwZGV2LT52ZGV2LT5taW5vciAmIDB4M0Y7CisJCQl2dS0+YXVkaW8gPSAtMTsgLyogbm90IGtub3duIHlldCAqLworCQkJdnUtPnZiaSA9IC0xOworCQkJdnUtPnJhZGlvID0gLTE7CisJCQl2dS0+dGVsZXRleHQgPSAtMTsKKwkJCWJyZWFrOworCQl9CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gcHdjX2lvY3RsKHBkZXYsIGNtZCwgYXJnKTsKKwl9IC8qIC4uc3dpdGNoICovCisJcmV0dXJuIDA7Cit9CQorCitzdGF0aWMgaW50IHB3Y192aWRlb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXJldHVybiB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIHB3Y192aWRlb19kb19pb2N0bCk7Cit9CisKKworc3RhdGljIGludCBwd2NfdmlkZW9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldjsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gdm1hLT52bV9zdGFydDsKKwl1bnNpZ25lZCBsb25nIHNpemUgID0gdm1hLT52bV9lbmQtdm1hLT52bV9zdGFydDsKKwl1bnNpZ25lZCBsb25nIHBhZ2UsIHBvczsKKwkKKwlUcmFjZShUUkFDRV9NRU1PUlksICJtbWFwKDB4JXAsIDB4JWx4LCAlbHUpIGNhbGxlZC5cbiIsIHZkZXYsIHN0YXJ0LCBzaXplKTsKKwlwZGV2ID0gdmRldi0+cHJpdjsKKwkKKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPOworCisJcG9zID0gKHVuc2lnbmVkIGxvbmcpcGRldi0+aW1hZ2VfZGF0YTsKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJcGFnZSA9IHZtYWxsb2NfdG9fcGZuKCh2b2lkICopcG9zKTsKKwkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwYWdlLCBQQUdFX1NJWkUsIFBBR0VfU0hBUkVEKSkKKwkJCXJldHVybiAtRUFHQUlOOworCisJCXN0YXJ0ICs9IFBBR0VfU0laRTsKKwkJcG9zICs9IFBBR0VfU0laRTsKKwkJaWYgKHNpemUgPiBQQUdFX1NJWkUpCisJCQlzaXplIC09IFBBR0VfU0laRTsKKwkJZWxzZQorCQkJc2l6ZSA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBVU0IgZnVuY3Rpb25zICovCisKKy8qIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2hlbiBhIG5ldyBkZXZpY2UgaXMgcGx1Z2dlZCBpbiBvciB0aGUgdXNiIGNvcmUKKyAqIGlzIGxvYWRlZC4KKyAqLworCitzdGF0aWMgaW50IHVzYl9wd2NfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYgPSBOVUxMOworCWludCB2ZW5kb3JfaWQsIHByb2R1Y3RfaWQsIHR5cGVfaWQ7CisJaW50IGksIGhpbnQ7CisJaW50IGZlYXR1cmVzID0gMDsKKwlpbnQgdmlkZW9fbnIgPSAtMTsgLyogZGVmYXVsdDogdXNlIG5leHQgYXZhaWxhYmxlIGRldmljZSAqLworCWNoYXIgc2VyaWFsX251bWJlclszMF0sICpuYW1lOworCisJLyogQ2hlY2sgaWYgd2UgY2FuIGhhbmRsZSB0aGlzIGRldmljZSAqLworCVRyYWNlKFRSQUNFX1BST0JFLCAicHJvYmUoKSBjYWxsZWQgWyUwNFggJTA0WF0sIGlmICVkXG4iLCAKKwkJbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCWxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSwKKwkJaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKworCS8qIHRoZSBpbnRlcmZhY2VzIGFyZSBwcm9iZWQgb25lIGJ5IG9uZS4gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUKKwkgICB2aWRlbyBpbnRlcmZhY2UgKDApIG5vdy4KKwkgICBJbnRlcmZhY2UgMSBpcyB0aGUgQXVkaW8gQ29udHJvbCwgYW5kIGludGVyZmFjZSAyIEF1ZGlvIGl0c2VsZi4KKwkgKi8KKwlpZiAoaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyID4gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl2ZW5kb3JfaWQgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwlwcm9kdWN0X2lkID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCisJaWYgKHZlbmRvcl9pZCA9PSAweDA0NzEpIHsKKwkJc3dpdGNoIChwcm9kdWN0X2lkKSB7CisJCWNhc2UgMHgwMzAyOgorCQkJSW5mbygiUGhpbGlwcyBQQ0E2NDVWQyBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIlBoaWxpcHMgNjQ1IHdlYmNhbSI7CisJCQl0eXBlX2lkID0gNjQ1OworCQkJYnJlYWs7CisJCWNhc2UgMHgwMzAzOgorCQkJSW5mbygiUGhpbGlwcyBQQ0E2NDZWQyBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIlBoaWxpcHMgNjQ2IHdlYmNhbSI7CisJCQl0eXBlX2lkID0gNjQ2OworCQkJYnJlYWs7CisJCWNhc2UgMHgwMzA0OgorCQkJSW5mbygiQXNrZXkgVkMwMTAgdHlwZSAyIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiQXNrZXkgVkMwMTAgd2ViY2FtIjsKKwkJCXR5cGVfaWQgPSA2NDY7CisJCQlicmVhazsKKwkJY2FzZSAweDAzMDc6CisJCQlJbmZvKCJQaGlsaXBzIFBDVkM2NzVLIChWZXN0YSkgVVNCIHdlYmNhbSBkZXRlY3RlZC5cbiIpOworCQkJbmFtZSA9ICJQaGlsaXBzIDY3NSB3ZWJjYW0iOworCQkJdHlwZV9pZCA9IDY3NTsKKwkJCWJyZWFrOworCQljYXNlIDB4MDMwODoKKwkJCUluZm8oIlBoaWxpcHMgUENWQzY4MEsgKFZlc3RhIFBybykgVVNCIHdlYmNhbSBkZXRlY3RlZC5cbiIpOworCQkJbmFtZSA9ICJQaGlsaXBzIDY4MCB3ZWJjYW0iOworCQkJdHlwZV9pZCA9IDY4MDsKKwkJCWJyZWFrOworCQljYXNlIDB4MDMwQzoKKwkJCUluZm8oIlBoaWxpcHMgUENWQzY5MEsgKFZlc3RhIFBybyBTY2FuKSBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIlBoaWxpcHMgNjkwIHdlYmNhbSI7CisJCQl0eXBlX2lkID0gNjkwOworCQkJYnJlYWs7CisJCWNhc2UgMHgwMzEwOgorCQkJSW5mbygiUGhpbGlwcyBQQ1ZDNzMwSyAoVG9VQ2FtIEZ1bikvUENWQzgzMCAoVG9VQ2FtIElJKSBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIlBoaWxpcHMgNzMwIHdlYmNhbSI7CisJCQl0eXBlX2lkID0gNzMwOworCQkJYnJlYWs7CisJCWNhc2UgMHgwMzExOgorCQkJSW5mbygiUGhpbGlwcyBQQ1ZDNzQwSyAoVG9VQ2FtIFBybykvUENWQzg0MCAoVG9VQ2FtIElJKSBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIlBoaWxpcHMgNzQwIHdlYmNhbSI7CisJCQl0eXBlX2lkID0gNzQwOworCQkJYnJlYWs7CisJCWNhc2UgMHgwMzEyOgorCQkJSW5mbygiUGhpbGlwcyBQQ1ZDNzUwSyAoVG9VQ2FtIFBybyBTY2FuKSBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIlBoaWxpcHMgNzUwIHdlYmNhbSI7CisJCQl0eXBlX2lkID0gNzUwOworCQkJYnJlYWs7CisJCWNhc2UgMHgwMzEzOgorCQkJSW5mbygiUGhpbGlwcyBQQ1ZDNzIwSy80MCAoVG9VQ2FtIFhTKSBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIlBoaWxpcHMgNzIwSy80MCB3ZWJjYW0iOworCQkJdHlwZV9pZCA9IDcyMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FTk9ERVY7CisJCQlicmVhazsKKwkJfQorCX0KKwllbHNlIGlmICh2ZW5kb3JfaWQgPT0gMHgwNjlBKSB7CisJCXN3aXRjaChwcm9kdWN0X2lkKSB7CisJCWNhc2UgMHgwMDAxOgorCQkJSW5mbygiQXNrZXkgVkMwMTAgdHlwZSAxIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiQXNrZXkgVkMwMTAgd2ViY2FtIjsKKwkJCXR5cGVfaWQgPSA2NDU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PREVWOworCQkJYnJlYWs7CisJCX0KKwl9CisJZWxzZSBpZiAodmVuZG9yX2lkID09IDB4MDQ2ZCkgeworCQlzd2l0Y2gocHJvZHVjdF9pZCkgeworCQljYXNlIDB4MDhiMDoKKwkJCUluZm8oIkxvZ2l0ZWNoIFF1aWNrQ2FtIFBybyAzMDAwIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiTG9naXRlY2ggUXVpY2tDYW0gUHJvIDMwMDAiOworCQkJdHlwZV9pZCA9IDc0MDsgLyogQ0NEIHNlbnNvciAqLworCQkJYnJlYWs7CisJCWNhc2UgMHgwOGIxOgorCQkJSW5mbygiTG9naXRlY2ggUXVpY2tDYW0gTm90ZWJvb2sgUHJvIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiTG9naXRlY2ggUXVpY2tDYW0gTm90ZWJvb2sgUHJvIjsKKwkJCXR5cGVfaWQgPSA3NDA7IC8qIENDRCBzZW5zb3IgKi8KKwkJCWJyZWFrOworCQljYXNlIDB4MDhiMjoKKwkJCUluZm8oIkxvZ2l0ZWNoIFF1aWNrQ2FtIDQwMDAgUHJvIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiTG9naXRlY2ggUXVpY2tDYW0gUHJvIDQwMDAiOworCQkJdHlwZV9pZCA9IDc0MDsgLyogQ0NEIHNlbnNvciAqLworCQkJYnJlYWs7CisJCWNhc2UgMHgwOGIzOgorCQkJSW5mbygiTG9naXRlY2ggUXVpY2tDYW0gWm9vbSBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIkxvZ2l0ZWNoIFF1aWNrQ2FtIFpvb20iOworCQkJdHlwZV9pZCA9IDc0MDsgLyogQ0NEIHNlbnNvciAqLworCQkJYnJlYWs7CisJCWNhc2UgMHgwOEI0OgorCQkJSW5mbygiTG9naXRlY2ggUXVpY2tDYW0gWm9vbSAobmV3IG1vZGVsKSBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIkxvZ2l0ZWNoIFF1aWNrQ2FtIFpvb20iOworCQkJdHlwZV9pZCA9IDc0MDsgLyogQ0NEIHNlbnNvciAqLworCQkJYnJlYWs7CisJCWNhc2UgMHgwOGI1OgorCQkJSW5mbygiTG9naXRlY2ggUXVpY2tDYW0gT3JiaXQvU3BoZXJlIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiTG9naXRlY2ggUXVpY2tDYW0gT3JiaXQiOworCQkJdHlwZV9pZCA9IDc0MDsgLyogQ0NEIHNlbnNvciAqLworCQkJZmVhdHVyZXMgfD0gRkVBVFVSRV9NT1RPUl9QQU5USUxUOworCQkJYnJlYWs7CisJCWNhc2UgMHgwOGI2OgorCQljYXNlIDB4MDhiNzoKKwkJY2FzZSAweDA4Yjg6CisJCQlJbmZvKCJMb2dpdGVjaCBRdWlja0NhbSBkZXRlY3RlZCAocmVzZXJ2ZWQgSUQpLlxuIik7CisJCQluYW1lID0gIkxvZ2l0ZWNoIFF1aWNrQ2FtIChyZXMuKSI7CisJCQl0eXBlX2lkID0gNzMwOyAvKiBBc3N1bWluZyBDTU9TICovCisJCQlicmVhazsKKyAgICAgICAgCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgCQlicmVhazsKKyAgICAgICAgCX0KKyAgICAgICAgfQorCWVsc2UgaWYgKHZlbmRvcl9pZCA9PSAweDA1NWQpIHsKKwkJLyogSSBkb24ndCBrbm93IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIEMxMCBhbmQgdGhlIEMzMDsKKwkJICAgSSBzdXBwb3NlIHRoZSBkaWZmZXJlbmNlIGlzIHRoZSBzZW5zb3IsIGJ1dCBib3RoIGNhbWVyYXMKKwkJICAgd29yayBlcXVhbGx5IHdlbGwgd2l0aCBhIHR5cGVfaWQgb2YgNjc1CisJCSAqLworCQlzd2l0Y2gocHJvZHVjdF9pZCkgeworCQljYXNlIDB4OTAwMDoKKwkJCUluZm8oIlNhbXN1bmcgTVBDLUMxMCBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIlNhbXN1bmcgTVBDLUMxMCI7CisJCQl0eXBlX2lkID0gNjc1OworCQkJYnJlYWs7CisJCWNhc2UgMHg5MDAxOgorCQkJSW5mbygiU2Ftc3VuZyBNUEMtQzMwIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiU2Ftc3VuZyBNUEMtQzMwIjsKKwkJCXR5cGVfaWQgPSA2NzU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PREVWOworCQkJYnJlYWs7CisJCX0KKwl9CisJZWxzZSBpZiAodmVuZG9yX2lkID09IDB4MDQxZSkgeworCQlzd2l0Y2gocHJvZHVjdF9pZCkgeworCQljYXNlIDB4NDAwYzoKKwkJCUluZm8oIkNyZWF0aXZlIExhYnMgV2ViY2FtIDUgZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiQ3JlYXRpdmUgTGFicyBXZWJjYW0gNSI7CisJCQl0eXBlX2lkID0gNzMwOworCQkJYnJlYWs7CisJCWNhc2UgMHg0MDExOgorCQkJSW5mbygiQ3JlYXRpdmUgTGFicyBXZWJjYW0gUHJvIEV4IGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIkNyZWF0aXZlIExhYnMgV2ViY2FtIFBybyBFeCI7CisJCQl0eXBlX2lkID0gNzQwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCWJyZWFrOworCQl9CisJfQorCWVsc2UgaWYgKHZlbmRvcl9pZCA9PSAweDA0Y2MpIHsKKwkJc3dpdGNoKHByb2R1Y3RfaWQpIHsKKwkJY2FzZSAweDgxMTY6CisJCQlJbmZvKCJTb3RlYyBBZmluYSBFeWUgVVNCIHdlYmNhbSBkZXRlY3RlZC5cbiIpOworCQkJbmFtZSA9ICJTb3RlYyBBZmluYSBFeWUiOworCQkJdHlwZV9pZCA9IDczMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FTk9ERVY7CisJCQlicmVhazsKKwkJfQorCX0KKwllbHNlIGlmICh2ZW5kb3JfaWQgPT0gMHgwNmJlKSB7CisJCXN3aXRjaChwcm9kdWN0X2lkKSB7CisJCWNhc2UgMHg4MTE2OgorCQkJLyogVGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBjYW0gYXMgdGhlIFNvdGVjIEFmaW5hIEV5ZSAqLworCQkJSW5mbygiQU1FIENvLiBBZmluYSBFeWUgVVNCIHdlYmNhbSBkZXRlY3RlZC5cbiIpOworCQkJbmFtZSA9ICJBTUUgQ28uIEFmaW5hIEV5ZSI7CisJCQl0eXBlX2lkID0gNzUwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCWJyZWFrOworCQl9CisJCisJfQorCWVsc2UgaWYgKHZlbmRvcl9pZCA9PSAweDBkODEpIHsKKwkJc3dpdGNoKHByb2R1Y3RfaWQpIHsKKwkJY2FzZSAweDE5MDA6CisJCQlJbmZvKCJWaXNpb25pdGUgVkNTLVVDMzAwIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiVmlzaW9uaXRlIFZDUy1VQzMwMCI7CisJCQl0eXBlX2lkID0gNzQwOyAvKiBDQ0Qgc2Vuc29yICovCisJCQlicmVhazsKKwkJY2FzZSAweDE5MTA6CisJCQlJbmZvKCJWaXNpb25pdGUgVkNTLVVNMTAwIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiVmlzaW9uaXRlIFZDUy1VTTEwMCI7CisJCQl0eXBlX2lkID0gNzMwOyAvKiBDTU9TIHNlbnNvciAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCWJyZWFrOworCQl9CisJfQorCWVsc2UgCisJCXJldHVybiAtRU5PREVWOyAvKiBOb3QgYW55IG9mIHRoZSBrbm93IHR5cGVzOyBidXQgdGhlIGxpc3Qga2VlcHMgZ3Jvd2luZy4gKi8KKworCW1lbXNldChzZXJpYWxfbnVtYmVyLCAwLCAzMCk7CisJdXNiX3N0cmluZyh1ZGV2LCB1ZGV2LT5kZXNjcmlwdG9yLmlTZXJpYWxOdW1iZXIsIHNlcmlhbF9udW1iZXIsIDI5KTsKKwlUcmFjZShUUkFDRV9QUk9CRSwgIkRldmljZSBzZXJpYWwgbnVtYmVyIGlzICVzXG4iLCBzZXJpYWxfbnVtYmVyKTsKKworCWlmICh1ZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyA+IDEpCisJCUluZm8oIldhcm5pbmc6IG1vcmUgdGhhbiAxIGNvbmZpZ3VyYXRpb24gYXZhaWxhYmxlLlxuIik7CisKKwkvKiBBbGxvY2F0ZSBzdHJ1Y3R1cmUsIGluaXRpYWxpemUgcG9pbnRlcnMsIG11dGV4ZXMsIGV0Yy4gYW5kIGxpbmsgaXQgdG8gdGhlIHVzYl9kZXZpY2UgKi8KKwlwZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHB3Y19kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAocGRldiA9PSBOVUxMKSB7CisJCUVycigiT29wcywgY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgcHdjX2RldmljZS5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KHBkZXYsIDAsIHNpemVvZihzdHJ1Y3QgcHdjX2RldmljZSkpOworCXBkZXYtPnR5cGUgPSB0eXBlX2lkOworCXBkZXYtPnZzaXplID0gZGVmYXVsdF9zaXplOworCXBkZXYtPnZmcmFtZXMgPSBkZWZhdWx0X2ZwczsKKwlzdHJjcHkocGRldi0+c2VyaWFsLCBzZXJpYWxfbnVtYmVyKTsKKwlwZGV2LT5mZWF0dXJlcyA9IGZlYXR1cmVzOworCWlmICh2ZW5kb3JfaWQgPT0gMHgwNDZEICYmIHByb2R1Y3RfaWQgPT0gMHgwOEI1KQorCXsKKwkJLyogTG9naXRlY2ggUXVpY2tDYW0gT3JiaXQKKwkgICAgICAgICAgIFRoZSByYW5nZXMgaGF2ZSBiZWVuIGRldGVybWluZWQgZXhwZXJpbWVudGFsbHk7IHRoZXkgbWF5IGRpZmZlciBmcm9tIGNhbSB0byBjYW0uCisJICAgICAgICAgICBBbHNvLCB0aGUgZXhhY3QgcmFuZ2VzIGxlZnQtcmlnaHQgYW5kIHVwLWRvd24gYXJlIGRpZmZlcmVudCBmb3IgbXkgY2FtCisJICAgICAgICAgICovCisJCXBkZXYtPmFuZ2xlX3JhbmdlLnBhbl9taW4gID0gLTcwMDA7CisJCXBkZXYtPmFuZ2xlX3JhbmdlLnBhbl9tYXggID0gIDcwMDA7CisJCXBkZXYtPmFuZ2xlX3JhbmdlLnRpbHRfbWluID0gLTMwMDA7CisJCXBkZXYtPmFuZ2xlX3JhbmdlLnRpbHRfbWF4ID0gIDI1MDA7CisJfQorCisJaW5pdF9NVVRFWCgmcGRldi0+bW9kbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnBkZXYtPnB0cmxvY2spOworCisJcGRldi0+dWRldiA9IHVkZXY7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcGRldi0+ZnJhbWVxKTsKKwlwZGV2LT52Y29tcHJlc3Npb24gPSBwd2NfcHJlZmVycmVkX2NvbXByZXNzaW9uOworCisJLyogQWxsb2NhdGUgdmlkZW9fZGV2aWNlIHN0cnVjdHVyZSAqLworCXBkZXYtPnZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAocGRldi0+dmRldiA9PSAwKQorCXsKKwkJRXJyKCJFcnIsIGNhbm5vdCBhbGxvY2F0ZSB2aWRlb19kZXZpY2Ugc3RydXR1cmUuIEZhaWxpbmcgcHJvYmUuIik7CisJCWtmcmVlKHBkZXYpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtY3B5KHBkZXYtPnZkZXYsICZwd2NfdGVtcGxhdGUsIHNpemVvZihwd2NfdGVtcGxhdGUpKTsKKwlzdHJjcHkocGRldi0+dmRldi0+bmFtZSwgbmFtZSk7CisJcGRldi0+dmRldi0+b3duZXIgPSBUSElTX01PRFVMRTsKKwl2aWRlb19zZXRfZHJ2ZGF0YShwZGV2LT52ZGV2LCBwZGV2KTsKKworCXBkZXYtPnJlbGVhc2UgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisJVHJhY2UoVFJBQ0VfUFJPQkUsICJSZWxlYXNlOiAlMDR4XG4iLCBwZGV2LT5yZWxlYXNlKTsKKworCS8qIE5vdyBzZWFyY2ggZGV2aWNlX2hpbnRbXSB0YWJsZSBmb3IgYSBtYXRjaCwgc28gd2UgY2FuIGhpbnQgYSBub2RlIG51bWJlci4gKi8KKwlmb3IgKGhpbnQgPSAwOyBoaW50IDwgTUFYX0RFVl9ISU5UUzsgaGludCsrKSB7CisJCWlmICgoKGRldmljZV9oaW50W2hpbnRdLnR5cGUgPT0gLTEpIHx8IChkZXZpY2VfaGludFtoaW50XS50eXBlID09IHBkZXYtPnR5cGUpKSAmJgorCQkgICAgIChkZXZpY2VfaGludFtoaW50XS5wZGV2ID09IE5VTEwpKSB7CisJCQkvKiBzbyBmYXIsIHNvIGdvb2QuLi4gdHJ5IHNlcmlhbCBudW1iZXIgKi8KKwkJCWlmICgoZGV2aWNlX2hpbnRbaGludF0uc2VyaWFsX251bWJlclswXSA9PSAnKicpIHx8ICFzdHJjbXAoZGV2aWNlX2hpbnRbaGludF0uc2VyaWFsX251bWJlciwgc2VyaWFsX251bWJlcikpIHsKKwkJCSAgICAJLyogbWF0Y2ghICovCisJCQkgICAgCXZpZGVvX25yID0gZGV2aWNlX2hpbnRbaGludF0uZGV2aWNlX25vZGU7CisJCQkgICAgCVRyYWNlKFRSQUNFX1BST0JFLCAiRm91bmQgaGludCwgd2lsbCB0cnkgdG8gcmVnaXN0ZXIgYXMgL2Rldi92aWRlbyVkXG4iLCB2aWRlb19ucik7CisJCQkgICAgCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcGRldi0+dmRldi0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOworCWkgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UocGRldi0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgdmlkZW9fbnIpOworCWlmIChpIDwgMCkgeworCQlFcnIoIkZhaWxlZCB0byByZWdpc3RlciBhcyB2aWRlbyBkZXZpY2UgKCVkKS5cbiIsIGkpOworCQl2aWRlb19kZXZpY2VfcmVsZWFzZShwZGV2LT52ZGV2KTsgLyogRHJpcC4uLiBkcmlwLi4uIGRyaXAuLi4gKi8KKwkJa2ZyZWUocGRldik7IC8qIE9vcHMsIG5vIG1lbW9yeSBsZWFrcyBwbGVhc2UgKi8KKwkJcmV0dXJuIC1FSU87CisJfQorCWVsc2UgeworCQlJbmZvKCJSZWdpc3RlcmVkIGFzIC9kZXYvdmlkZW8lZC5cbiIsIHBkZXYtPnZkZXYtPm1pbm9yICYgMHgzRik7CisJfQorCisJLyogb2NjdXB5IHNsb3QgKi8KKwlpZiAoaGludCA8IE1BWF9ERVZfSElOVFMpIAorCQlkZXZpY2VfaGludFtoaW50XS5wZGV2ID0gcGRldjsKKworCVRyYWNlKFRSQUNFX1BST0JFLCAicHJvYmUoKSBmdW5jdGlvbiByZXR1cm5pbmcgc3RydWN0IGF0IDB4JXAuXG4iLCBwZGV2KTsKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBwZGV2KTsKKwlyZXR1cm4gMDsKK30KKworLyogVGhlIHVzZXIgamFua2VkIG91dCB0aGUgY2FibGUuLi4gKi8KK3N0YXRpYyB2b2lkIHVzYl9wd2NfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldjsKKwlpbnQgaGludDsKKworCWxvY2tfa2VybmVsKCk7CisJcGRldiA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCWlmIChwZGV2ID09IE5VTEwpIHsKKwkJRXJyKCJwd2NfZGlzY29ubmVjdCgpIENhbGxlZCB3aXRob3V0IHByaXZhdGUgcG9pbnRlci5cbiIpOworCQlnb3RvIGRpc2Nvbm5lY3Rfb3V0OworCX0KKwlpZiAocGRldi0+dWRldiA9PSBOVUxMKSB7CisJCUVycigicHdjX2Rpc2Nvbm5lY3QoKSBhbHJlYWR5IGNhbGxlZCBmb3IgJXBcbiIsIHBkZXYpOworCQlnb3RvIGRpc2Nvbm5lY3Rfb3V0OworCX0KKwlpZiAocGRldi0+dWRldiAhPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpKSB7CisJCUVycigicHdjX2Rpc2Nvbm5lY3QoKSBXb29wczogcG9pbnRlciBtaXNtYXRjaCB1ZGV2L3BkZXYuXG4iKTsKKwkJZ290byBkaXNjb25uZWN0X291dDsKKwl9CisjaWZkZWYgUFdDX01BR0lDCQorCWlmIChwZGV2LT5tYWdpYyAhPSBQV0NfTUFHSUMpIHsKKwkJRXJyKCJwd2NfZGlzY29ubmVjdCgpIE1hZ2ljIG51bWJlciBmYWlsZWQuIENvbnN1bHQgeW91ciBzY3JvbGxzIGFuZCB0cnkgYWdhaW4uXG4iKTsKKwkJZ290byBkaXNjb25uZWN0X291dDsKKwl9CisjZW5kaWYKKwkKKwkvKiBXZSBnb3QgdW5wbHVnZ2VkOyB0aGlzIGlzIHNpZ25hbGxlZCBieSBhbiBFUElQRSBlcnJvciBjb2RlICovCisJaWYgKHBkZXYtPnZvcGVuKSB7CisJCUluZm8oIkRpc2Nvbm5lY3RlZCB3aGlsZSB3ZWJjYW0gaXMgaW4gdXNlIVxuIik7CisJCXBkZXYtPmVycm9yX3N0YXR1cyA9IEVQSVBFOworCX0KKworCS8qIEFsZXJ0IHdhaXRpbmcgcHJvY2Vzc2VzICovCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwZGV2LT5mcmFtZXEpOworCS8qIFdhaXQgdW50aWwgZGV2aWNlIGlzIGNsb3NlZCAqLworCXdoaWxlIChwZGV2LT52b3BlbikKKwkJc2NoZWR1bGUoKTsKKwkvKiBEZXZpY2UgaXMgbm93IGNsb3NlZCwgc28gd2UgY2FuIHNhZmVseSB1bnJlZ2lzdGVyIGl0ICovCisJVHJhY2UoVFJBQ0VfUFJPQkUsICJVbnJlZ2lzdGVyaW5nIHZpZGVvIGRldmljZSBpbiBkaXNjb25uZWN0KCkuXG4iKTsKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZShwZGV2LT52ZGV2KTsKKworCS8qIEZyZWUgbWVtb3J5IChkb24ndCBzZXQgcGRldiB0byAwIGp1c3QgeWV0KSAqLworCWtmcmVlKHBkZXYpOworCitkaXNjb25uZWN0X291dDoKKwkvKiBzZWFyY2ggZGV2aWNlX2hpbnRbXSB0YWJsZSBpZiB3ZSBvY2N1cHkgYSBzbG90LCBieSBhbnkgY2hhbmNlICovCisJZm9yIChoaW50ID0gMDsgaGludCA8IE1BWF9ERVZfSElOVFM7IGhpbnQrKykKKwkJaWYgKGRldmljZV9oaW50W2hpbnRdLnBkZXYgPT0gcGRldikKKwkJCWRldmljZV9oaW50W2hpbnRdLnBkZXYgPSBOVUxMOworCisJdW5sb2NrX2tlcm5lbCgpOworfQorCisKKy8qICpncnVudCogV2UgaGF2ZSB0byBkbyBhdG9pIG91cnNlbHZlcyA6LSggKi8KK3N0YXRpYyBpbnQgcHdjX2F0b2koY29uc3QgY2hhciAqcykKK3sKKwlpbnQgayA9IDA7CisKKwlrID0gMDsKKwl3aGlsZSAoKnMgIT0gJ1wwJyAmJiAqcyA+PSAnMCcgJiYgKnMgPD0gJzknKSB7CisJCWsgPSAxMCAqIGsgKyAoKnMgLSAnMCcpOworCQlzKys7CisJfQorCXJldHVybiBrOworfQorCisKKy8qIAorICogSW5pdGlhbGl6YXRpb24gY29kZSAmIG1vZHVsZSBzdHVmZiAKKyAqLworCitzdGF0aWMgY2hhciBzaXplWzEwXTsKK3N0YXRpYyBpbnQgZnBzID0gMDsKK3N0YXRpYyBpbnQgZmJ1ZnMgPSAwOworc3RhdGljIGludCBtYnVmcyA9IDA7CitzdGF0aWMgaW50IHRyYWNlID0gLTE7CitzdGF0aWMgaW50IGNvbXByZXNzaW9uID0gLTE7CitzdGF0aWMgaW50IGxlZHNbMl0gPSB7IC0xLCAtMSB9Oworc3RhdGljIGNoYXIgKmRldl9oaW50W01BWF9ERVZfSElOVFNdID0geyB9OworCittb2R1bGVfcGFyYW1fc3RyaW5nKHNpemUsIHNpemUsIHNpemVvZihzaXplKSwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNpemUsICJJbml0aWFsIGltYWdlIHNpemUuIE9uZSBvZiBzcWNpZiwgcXNpZiwgcWNpZiwgc2lmLCBjaWYsIHZnYSIpOworbW9kdWxlX3BhcmFtKGZwcywgaW50LCAwMDAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZnBzLCAiSW5pdGlhbCBmcmFtZXMgcGVyIHNlY29uZC4gVmFyaWVzIHdpdGggbW9kZWwsIHVzZWZ1bCByYW5nZSA1LTMwIik7Cittb2R1bGVfcGFyYW0oZmJ1ZnMsIGludCwgMDAwMCk7CitNT0RVTEVfUEFSTV9ERVNDKGZidWZzLCAiTnVtYmVyIG9mIGludGVybmFsIGZyYW1lIGJ1ZmZlcnMgdG8gcmVzZXJ2ZSIpOworbW9kdWxlX3BhcmFtKG1idWZzLCBpbnQsIDAwMDApOworTU9EVUxFX1BBUk1fREVTQyhtYnVmcywgIk51bWJlciBvZiBleHRlcm5hbCAobW1hcCgpZWQpIGltYWdlIGJ1ZmZlcnMiKTsKK21vZHVsZV9wYXJhbSh0cmFjZSwgaW50LCAwMDAwKTsKK01PRFVMRV9QQVJNX0RFU0ModHJhY2UsICJGb3IgZGVidWdnaW5nIHB1cnBvc2VzIik7Cittb2R1bGVfcGFyYW0ocG93ZXJfc2F2ZSwgYm9vbCwgMDAwMCk7CitNT0RVTEVfUEFSTV9ERVNDKHBvd2VyX3NhdmUsICJUdXJuIHBvd2VyIHNhdmUgZmVhdHVyZSBpbiBjYW1lcmEgb24gb3Igb2ZmIik7Cittb2R1bGVfcGFyYW0oY29tcHJlc3Npb24sIGludCwgMDAwMCk7CitNT0RVTEVfUEFSTV9ERVNDKGNvbXByZXNzaW9uLCAiUHJlZmVycmVkIGNvbXByZXNzaW9uIHF1YWxpdHkuIFJhbmdlIDAgKHVuY29tcHJlc3NlZCkgdG8gMyAoaGlnaCBjb21wcmVzc2lvbikiKTsKK21vZHVsZV9wYXJhbV9hcnJheShsZWRzLCBpbnQsIE5VTEwsIDAwMDApOworTU9EVUxFX1BBUk1fREVTQyhsZWRzLCAiTEVEIG9uLG9mZiB0aW1lIGluIG1pbGxpc2Vjb25kcyIpOworbW9kdWxlX3BhcmFtX2FycmF5KGRldl9oaW50LCBjaGFycCwgTlVMTCwgMDAwMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRldl9oaW50LCAiRGV2aWNlIG5vZGUgaGludHMiKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzICYgT0VNIFVTQiB3ZWJjYW0gZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJMdWMgU2FpbGxhcmQgPGx1Y0BzYWlsbGFyZC5vcmc+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9wd2NfaW5pdCh2b2lkKQoreworCWludCBpLCBzejsKKwljaGFyICpzaXplbmFtZXNbUFNaX01BWF0gPSB7ICJzcWNpZiIsICJxc2lmIiwgInFjaWYiLCAic2lmIiwgImNpZiIsICJ2Z2EiIH07CisKKwlJbmZvKCJQaGlsaXBzIHdlYmNhbSBtb2R1bGUgdmVyc2lvbiAiIFBXQ19WRVJTSU9OICIgbG9hZGVkLlxuIik7CisJSW5mbygiU3VwcG9ydHMgUGhpbGlwcyBQQ0E2NDUvNjQ2LCBQQ1ZDNjc1LzY4MC82OTAsIFBDVkM3MjBbNDBdLzczMC83NDAvNzUwICYgUENWQzgzMC84NDAuXG4iKTsKKwlJbmZvKCJBbHNvIHN1cHBvcnRzIHRoZSBBc2tleSBWQzAxMCwgdmFyaW91cyBMb2dpdGVjaCBRdWlja2NhbXMsIFNhbXN1bmcgTVBDLUMxMCBhbmQgTVBDLUMzMCxcbiIpOworCUluZm8oInRoZSBDcmVhdGl2ZSBXZWJDYW0gNSAmIFBybyBFeCwgU09URUMgQWZpbmEgRXllIGFuZCBWaXNpb25pdGUgVkNTLVVDMzAwIGFuZCBWQ1MtVU0xMDAuXG4iKTsKKworCWlmIChmcHMpIHsKKwkJaWYgKGZwcyA8IDQgfHwgZnBzID4gMzApIHsKKwkJCUVycigiRnJhbWVyYXRlIG91dCBvZiBib3VuZHMgKDQtMzApLlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlkZWZhdWx0X2ZwcyA9IGZwczsKKwkJSW5mbygiRGVmYXVsdCBmcmFtZXJhdGUgc2V0IHRvICVkLlxuIiwgZGVmYXVsdF9mcHMpOworCX0KKworCWlmIChzaXplWzBdKSB7CisJCS8qIHN0cmluZzsgdHJ5IG1hdGNoaW5nIHdpdGggYXJyYXkgKi8KKwkJZm9yIChzeiA9IDA7IHN6IDwgUFNaX01BWDsgc3orKykgeworCQkJaWYgKCFzdHJjbXAoc2l6ZW5hbWVzW3N6XSwgc2l6ZSkpIHsgLyogRm91bmQhICovCisJCQkJZGVmYXVsdF9zaXplID0gc3o7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKHN6ID09IFBTWl9NQVgpIHsKKwkJCUVycigiU2l6ZSBub3QgcmVjb2duaXplZDsgdHJ5IHNpemU9W3NxY2lmIHwgcXNpZiB8IHFjaWYgfCBzaWYgfCBjaWYgfCB2Z2FdLlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlJbmZvKCJEZWZhdWx0IGltYWdlIHNpemUgc2V0IHRvICVzIFslZHglZF0uXG4iLCBzaXplbmFtZXNbZGVmYXVsdF9zaXplXSwgcHdjX2ltYWdlX3NpemVzW2RlZmF1bHRfc2l6ZV0ueCwgcHdjX2ltYWdlX3NpemVzW2RlZmF1bHRfc2l6ZV0ueSk7CisJfQorCWlmIChtYnVmcykgeworCQlpZiAobWJ1ZnMgPCAxIHx8IG1idWZzID4gTUFYX0lNQUdFUykgeworCQkJRXJyKCJJbGxlZ2FsIG51bWJlciBvZiBtbWFwKCkgYnVmZmVyczsgdXNlIGEgbnVtYmVyIGJldHdlZW4gMSBhbmQgJWQuXG4iLCBNQVhfSU1BR0VTKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWRlZmF1bHRfbWJ1ZnMgPSBtYnVmczsKKwkJSW5mbygiTnVtYmVyIG9mIGltYWdlIGJ1ZmZlcnMgc2V0IHRvICVkLlxuIiwgZGVmYXVsdF9tYnVmcyk7CisJfQorCWlmIChmYnVmcykgeworCQlpZiAoZmJ1ZnMgPCAyIHx8IGZidWZzID4gTUFYX0ZSQU1FUykgeworCQkJRXJyKCJJbGxlZ2FsIG51bWJlciBvZiBmcmFtZSBidWZmZXJzOyB1c2UgYSBudW1iZXIgYmV0d2VlbiAyIGFuZCAlZC5cbiIsIE1BWF9GUkFNRVMpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJZGVmYXVsdF9mYnVmcyA9IGZidWZzOworCQlJbmZvKCJOdW1iZXIgb2YgZnJhbWUgYnVmZmVycyBzZXQgdG8gJWQuXG4iLCBkZWZhdWx0X2ZidWZzKTsKKwl9CisJaWYgKHRyYWNlID49IDApIHsKKwkJSW5mbygiVHJhY2Ugb3B0aW9uczogMHglMDR4XG4iLCB0cmFjZSk7CisJCXB3Y190cmFjZSA9IHRyYWNlOworCX0KKwlpZiAoY29tcHJlc3Npb24gPj0gMCkgeworCQlpZiAoY29tcHJlc3Npb24gPiAzKSB7CisJCQlFcnIoIkludmFsaWQgY29tcHJlc3Npb24gc2V0dGluZzsgdXNlIGEgbnVtYmVyIGJldHdlZW4gMCAodW5jb21wcmVzc2VkKSBhbmQgMyAoaGlnaCkuXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXB3Y19wcmVmZXJyZWRfY29tcHJlc3Npb24gPSBjb21wcmVzc2lvbjsKKwkJSW5mbygiUHJlZmVycmVkIGNvbXByZXNzaW9uIHNldCB0byAlZC5cbiIsIHB3Y19wcmVmZXJyZWRfY29tcHJlc3Npb24pOworCX0KKwlpZiAocG93ZXJfc2F2ZSkKKwkJSW5mbygiRW5hYmxpbmcgcG93ZXIgc2F2ZSBvbiBvcGVuL2Nsb3NlLlxuIik7CisJaWYgKGxlZHNbMF0gPj0gMCkKKwkJbGVkX29uID0gbGVkc1swXTsKKwlpZiAobGVkc1sxXSA+PSAwKQorCQlsZWRfb2ZmID0gbGVkc1sxXTsKKworCS8qIEJpZyBkZXZpY2Ugbm9kZSB3aG9vcGxhLiBCYXNpY2x5LCBpdCBhbGxvd3MgeW91IHRvIGFzc2lnbiBhCisJICAgZGV2aWNlIG5vZGUgKC9kZXYvdmlkZW9YKSB0byBhIGNhbWVyYSwgYmFzZWQgb24gaXRzIHR5cGUKKwkgICAmIHNlcmlhbCBudW1iZXIuIFRoZSBmb3JtYXQgaXMgW3R5cGVbLnNlcmlhbG51bWJlcl06XW5vZGUuCisKKwkgICBBbnkgY2FtZXJhIHRoYXQgaXNuJ3QgbWF0Y2hlZCBieSB0aGVzZSBydWxlcyBnZXRzIHRoZSBuZXh0CisJICAgYXZhaWxhYmxlIGZyZWUgZGV2aWNlIG5vZGUuCisJICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9ERVZfSElOVFM7IGkrKykgeworCQljaGFyICpzLCAqY29sb24sICpkb3Q7CisKKwkJLyogVGhpcyBsb29wIGFsc28gaW5pdGlhbGl6ZXMgdGhlIGFycmF5ICovCisJCWRldmljZV9oaW50W2ldLnBkZXYgPSBOVUxMOworCQlzID0gZGV2X2hpbnRbaV07CisJCWlmIChzICE9IE5VTEwgJiYgKnMgIT0gJ1wwJykgeworCQkJZGV2aWNlX2hpbnRbaV0udHlwZSA9IC0xOyAvKiB3aWxkY2FyZCAqLworCQkJc3RyY3B5KGRldmljZV9oaW50W2ldLnNlcmlhbF9udW1iZXIsICIqIik7CisKKwkJCS8qIHBhcnNlIHN0cmluZzogY2hvcCBhdCAnOicgJiAnLycgKi8KKwkJCWNvbG9uID0gZG90ID0gczsKKwkJCXdoaWxlICgqY29sb24gIT0gJ1wwJyAmJiAqY29sb24gIT0gJzonKQorCQkJCWNvbG9uKys7CisJCQl3aGlsZSAoKmRvdCAhPSAnXDAnICYmICpkb3QgIT0gJy4nKQorCQkJCWRvdCsrOworCQkJLyogRmV3IHNhbml0eSBjaGVja3MgKi8KKwkJCWlmICgqZG90ICE9ICdcMCcgJiYgZG90ID4gY29sb24pIHsKKwkJCQlFcnIoIk1hbGZvcm1lZCBjYW1lcmEgaGludDogdGhlIGNvbG9uIG11c3QgYmUgYWZ0ZXIgdGhlIGRvdC5cbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJCQlpZiAoKmNvbG9uID09ICdcMCcpIHsKKwkJCQkvKiBObyBjb2xvbiAqLworCQkJCWlmICgqZG90ICE9ICdcMCcpIHsKKwkJCQkJRXJyKCJNYWxmb3JtZWQgY2FtZXJhIGhpbnQ6IG5vIGNvbG9uICsgZGV2aWNlIG5vZGUgZ2l2ZW4uXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQkvKiBObyB0eXBlIG9yIHNlcmlhbCBudW1iZXIgc3BlY2lmaWVkLCBqdXN0IGEgbnVtYmVyLiAqLworCQkJCQlkZXZpY2VfaGludFtpXS5kZXZpY2Vfbm9kZSA9IHB3Y19hdG9pKHMpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCS8qIFRoZXJlJ3MgYSBjb2xvbiwgc28gd2UgaGF2ZSBhdCBsZWFzdCBhIHR5cGUgYW5kIGEgZGV2aWNlIG5vZGUgKi8KKwkJCQlkZXZpY2VfaGludFtpXS50eXBlID0gcHdjX2F0b2kocyk7CisJCQkJZGV2aWNlX2hpbnRbaV0uZGV2aWNlX25vZGUgPSBwd2NfYXRvaShjb2xvbiArIDEpOworCQkJCWlmICgqZG90ICE9ICdcMCcpIHsKKwkJCQkJLyogVGhlcmUncyBhIHNlcmlhbCBudW1iZXIgYXMgd2VsbCAqLworCQkJCQlpbnQgazsKKwkJCQkJCisJCQkJCWRvdCsrOworCQkJCQlrID0gMDsKKwkJCQkJd2hpbGUgKCpkb3QgIT0gJzonICYmIGsgPCAyOSkgeworCQkJCQkJZGV2aWNlX2hpbnRbaV0uc2VyaWFsX251bWJlcltrKytdID0gKmRvdDsKKwkJCQkJCWRvdCsrOworCQkJCQl9CisJCQkJCWRldmljZV9oaW50W2ldLnNlcmlhbF9udW1iZXJba10gPSAnXDAnOworCQkJCX0KKwkJCX0KKyNpZiBQV0NfREVCVUcJCQorCQkJRGVidWcoImRldmljZV9oaW50WyVkXTpcbiIsIGkpOworCQkJRGVidWcoIiAgdHlwZSAgICA6ICVkXG4iLCBkZXZpY2VfaGludFtpXS50eXBlKTsKKwkJCURlYnVnKCIgIHNlcmlhbCMgOiAlc1xuIiwgZGV2aWNlX2hpbnRbaV0uc2VyaWFsX251bWJlcik7CisJCQlEZWJ1ZygiICBub2RlICAgIDogJWRcbiIsIGRldmljZV9oaW50W2ldLmRldmljZV9ub2RlKTsKKyNlbmRpZgkJCQorCQl9CisJCWVsc2UKKwkJCWRldmljZV9oaW50W2ldLnR5cGUgPSAwOyAvKiBub3QgZmlsbGVkICovCisJfSAvKiAuLmZvciBNQVhfREVWX0hJTlRTICovCisKKyAJVHJhY2UoVFJBQ0VfUFJPQkUsICJSZWdpc3RlcmluZyBkcml2ZXIgYXQgYWRkcmVzcyAweCVwLlxuIiwgJnB3Y19kcml2ZXIpOworCXJldHVybiB1c2JfcmVnaXN0ZXIoJnB3Y19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3B3Y19leGl0KHZvaWQpCit7CisJVHJhY2UoVFJBQ0VfTU9EVUxFLCAiRGVyZWdpc3RlcmluZyBkcml2ZXIuXG4iKTsKKwl1c2JfZGVyZWdpc3RlcigmcHdjX2RyaXZlcik7CisJSW5mbygiUGhpbGlwcyB3ZWJjYW0gbW9kdWxlIHJlbW92ZWQuXG4iKTsKK30KKworbW9kdWxlX2luaXQodXNiX3B3Y19pbml0KTsKK21vZHVsZV9leGl0KHVzYl9wd2NfZXhpdCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtaW9jdGwuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTgwNWVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1pb2N0bC5oCkBAIC0wLDAgKzEsMjkyIEBACisjaWZuZGVmIFBXQ19JT0NUTF9ICisjZGVmaW5lIFBXQ19JT0NUTF9ICisKKy8qIChDKSAyMDAxLTIwMDQgTmVtb3NvZnQgVW52LgorICAgKEMpIDIwMDQgICAgICBMdWMgU2FpbGxhcmQgKGx1Y0BzYWlsbGFyZC5vcmcpCisKKyAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAorICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCisgICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyBhbmQgc3VwcG9ydCByZXF1ZXN0cyB0byA8bHVjQHNhaWxsYXJkLm9yZz4uCisgICBUaGUgZGVjb21wcmVzc2lvbiByb3V0aW5lcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYnkgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUKKyAgIE5lbW9zb2Z0IGJpbmFyeSBwd2N4IG1vZHVsZS4gQ2F2ZWF0IGVtcHRvci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisvKiBUaGlzIGlzIHB3Yy1pb2N0bC5oIGJlbG9uZ2luZyB0byBQV0MgOC4xMi4xCisgICBJdCBjb250YWlucyBzdHJ1Y3R1cmVzIGFuZCBkZWZpbmVzIHRvIGNvbW11bmljYXRlIGZyb20gdXNlciBzcGFjZQorICAgZGlyZWN0bHkgdG8gdGhlIGRyaXZlci4KKyAqLworCisvKgorICAgQ2hhbmdlcworICAgMjAwMS8wOC8wMyAgQWx2YXJhZG8gICBBZGRlZCBpb2N0bCBjb25zdGFudHMgdG8gYWNjZXNzIG1ldGhvZHMgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5naW5nIHdoaXRlIGJhbGFuY2UgYW5kIHJlZC9ibHVlIGdhaW5zCisgICAyMDAyLzEyLzE1ICBHLiBILiBGZXJuYW5kZXotVG9yaWJpbyAgIFZJRElPQ0dSRUFMU0laRQorICAgMjAwMy8xMi8xMyAgTmVtb3NmdCBVbnYuIFNvbWUgbW9kaWZpY2F0aW9ucyB0byBtYWtlIGludGVyZmFjaW5nIHRvCisgICAgICAgICAgICAgICBQV0NYIGVhc2llcgorICovCisKKy8qIFRoZXNlIGFyZSBwcml2YXRlIGlvY3RsKCkgY29tbWFuZHMsIHNwZWNpZmljIGZvciB0aGUgUGhpbGlwcyB3ZWJjYW1zLgorICAgVGhleSBjb250YWluIGZ1bmN0aW9ucyBub3QgZm91bmQgaW4gb3RoZXIgd2ViY2FtcywgYW5kIHNldHRpbmdzIG5vdAorICAgc3BlY2lmaWVkIGluIHRoZSBWaWRlbzRMaW51eCBBUEkuCisKKyAgIFRoZSAjZGVmaW5lIG5hbWVzIGFyZSBidWlsdCB1cCBsaWtlIGZvbGxvd3M6CisgICBWSURJT0MJCVZJRGVvIElPQ3RsIHByZWZpeAorICAgICAgICAgUFdDCQlQaGlscHMgV2ViQ2FtCisgICAgICAgICAgICBHICAgICAgICAgICBvcHRpb25hbDogR2V0CisgICAgICAgICAgICBTICAgICAgICAgICBvcHRpb25hbDogU2V0CisgICAgICAgICAgICAgLi4uIAl0aGUgZnVuY3Rpb24KKyAqLworCisKKyAvKiBFbnVtZXJhdGlvbiBvZiBpbWFnZSBzaXplcyAqLworI2RlZmluZSBQU1pfU1FDSUYJMHgwMAorI2RlZmluZSBQU1pfUVNJRgkweDAxCisjZGVmaW5lIFBTWl9RQ0lGCTB4MDIKKyNkZWZpbmUgUFNaX1NJRgkJMHgwMworI2RlZmluZSBQU1pfQ0lGCQkweDA0CisjZGVmaW5lIFBTWl9WR0EJCTB4MDUKKyNkZWZpbmUgUFNaX01BWAkJNgorCisKKy8qIFRoZSBmcmFtZSByYXRlIGlzIGVuY29kZWQgaW4gdGhlIHZpZGVvX3dpbmRvdy5mbGFncyBwYXJhbWV0ZXIgdXNpbmcKKyAgIHRoZSB1cHBlciAxNiBiaXRzLCBzaW5jZSBzb21lIGZsYWdzIGFyZSBkZWZpbmVkIG5vd2FkYXlzLiBUaGUgZm9sbG93aW5nCisgICBkZWZpbmVzIHByb3ZpZGUgYSBtYXNrIGFuZCBzaGlmdCB0byBmaWx0ZXIgb3V0IHRoaXMgdmFsdWUuCisKKyAgIEluICdTbmFwc2hvdCcgbW9kZSB0aGUgY2FtZXJhIGZyZWV6ZXMgaXRzIGF1dG9tYXRpYyBleHBvc3VyZSBhbmQgY29sb3VyCisgICBiYWxhbmNlIGNvbnRyb2xzLgorICovCisjZGVmaW5lIFBXQ19GUFNfU0hJRlQJCTE2CisjZGVmaW5lIFBXQ19GUFNfTUFTSwkJMHgwMEZGMDAwMAorI2RlZmluZSBQV0NfRlBTX0ZSTUFTSwkJMHgwMDNGMDAwMAorI2RlZmluZSBQV0NfRlBTX1NOQVBTSE9UCTB4MDA0MDAwMDAKKworCisvKiBzdHJ1Y3R1cmUgZm9yIHRyYW5zZmVyaW5nIHggJiB5IGNvb3JkaW5hdGVzICovCitzdHJ1Y3QgcHdjX2Nvb3JkCit7CisJaW50IHgsIHk7CQkvKiBndWVzcyB3aGF0ICovCisJaW50IHNpemU7CQkvKiBzaXplLCBvciBvZmZzZXQgKi8KK307CisKKworLyogVXNlZCB3aXRoIFZJRElPQ1BXQ1BST0JFICovCitzdHJ1Y3QgcHdjX3Byb2JlCit7CisJY2hhciBuYW1lWzMyXTsKKwlpbnQgdHlwZTsKK307CisKK3N0cnVjdCBwd2Nfc2VyaWFsCit7CisJY2hhciBzZXJpYWxbMzBdOwkvKiBTdHJpbmcgd2l0aCBzZXJpYWwgbnVtYmVyLiBDb250YWlucyB0ZXJtaW5hdGluZyAwICovCit9OworCQorLyogcHdjX3doaXRlYmFsYW5jZS5tb2RlIHZhbHVlcyAqLworI2RlZmluZSBQV0NfV0JfSU5ET09SCQkwCisjZGVmaW5lIFBXQ19XQl9PVVRET09SCQkxCisjZGVmaW5lIFBXQ19XQl9GTAkJMgorI2RlZmluZSBQV0NfV0JfTUFOVUFMCQkzCisjZGVmaW5lIFBXQ19XQl9BVVRPCQk0CisKKy8qIFVzZWQgd2l0aCBWSURJT0NQV0NbU0ddQVdCIChBdXRvIFdoaXRlIEJhbGFuY2UpLiAKKyAgIFNldCBtb2RlIHRvIG9uZSBvZiB0aGUgUFdDX1dCXyogdmFsdWVzIGFib3ZlLgorICAgKnJlZCBhbmQgKmJsdWUgYXJlIHRoZSByZXNwZWN0aXZlIGdhaW5zIG9mIHRoZXNlIGNvbG91ciBjb21wb25lbnRzIGluc2lkZSAKKyAgIHRoZSBjYW1lcmE7IHJhbmdlIDAuLjY1NTM1CisgICBXaGVuICdtb2RlJyA9PSBQV0NfV0JfTUFOVUFMLCAnbWFudWFsX3JlZCcgYW5kICdtYW51YWxfYmx1ZScgYXJlIHNldCBvciByZWFkOyAKKyAgIG90aGVyd2lzZSB1bmRlZmluZWQuCisgICAncmVhZF9yZWQnIGFuZCAncmVhZF9ibHVlJyBhcmUgcmVhZC1vbmx5LgorKi8gICAKK3N0cnVjdCBwd2Nfd2hpdGViYWxhbmNlCit7CisJaW50IG1vZGU7CisJaW50IG1hbnVhbF9yZWQsIG1hbnVhbF9ibHVlOwkvKiBSL1cgKi8KKwlpbnQgcmVhZF9yZWQsIHJlYWRfYmx1ZTsJLyogUi9PICovCit9OworCisvKiAKKyAgICdjb250cm9sX3NwZWVkJyBhbmQgJ2NvbnRyb2xfZGVsYXknIGFyZSB1c2VkIGluIGF1dG9tYXRpYyB3aGl0ZWJhbGFuY2UgbW9kZSwKKyAgIGFuZCB0ZWxsIHRoZSBjYW1lcmEgaG93IGZhc3QgaXQgc2hvdWxkIHJlYWN0IHRvIGNoYW5nZXMgaW4gbGlnaHRpbmcsIGFuZCAKKyAgIHdpdGggaG93IG11Y2ggZGVsYXkuIFZhbGlkIHZhbHVlcyBhcmUgMC4uNjU1MzUuCisqLworc3RydWN0IHB3Y193Yl9zcGVlZAoreworCWludCBjb250cm9sX3NwZWVkOworCWludCBjb250cm9sX2RlbGF5OworCit9OworCisvKiBVc2VkIHdpdGggVklESU9DUFdDW1NHXUxFRCAqLworc3RydWN0IHB3Y19sZWRzCit7CisJaW50IGxlZF9vbjsJCQkvKiBMZWQgb24tdGltZTsgcmFuZ2UgPSAwLi4yNTAwMCAqLworCWludCBsZWRfb2ZmOwkJCS8qIExlZCBvZmYtdGltZTsgcmFuZ2UgPSAwLi4yNTAwMCAgKi8KK307CisKKy8qIEltYWdlIHNpemUgKHVzZWQgd2l0aCBHUkVBTFNJWkUpICovCitzdHJ1Y3QgcHdjX2ltYWdlc2l6ZQoreworCWludCB3aWR0aDsKKwlpbnQgaGVpZ2h0OworfTsKKworLyogRGVmaW5lcyBhbmQgc3RydWN0dXJlcyBmb3IgTW90b3JpemVkIFBhbiAmIFRpbHQgKi8KKyNkZWZpbmUgUFdDX01QVF9QQU4JCTB4MDEKKyNkZWZpbmUgUFdDX01QVF9USUxUCQkweDAyCisjZGVmaW5lIFBXQ19NUFRfVElNRU9VVAkJMHgwNCAvKiBmb3Igc3RhdHVzICovCisKKy8qIFNldCBhbmdsZXM7IHdoZW4gYWJzb2x1dGUgIT0gMCwgdGhlIGFuZ2xlIGlzIGFic29sdXRlIGFuZCB0aGUgCisgICBkcml2ZXIgY2FsY3VsYXRlcyB0aGUgcmVsYXRpdmUgb2Zmc2V0IGZvciB5b3UuIFRoaXMgY2FuIG9ubHkKKyAgIGJlIHVzZWQgd2l0aCBWSURJT0NQV0NTQU5HTEU7IFZJRElPQ1BXQ0dBTkdMRSBhbHdheXMgcmV0dXJucworICAgYWJzb2x1dGUgYW5nbGVzLgorICovICAgCitzdHJ1Y3QgcHdjX21wdF9hbmdsZXMKK3sKKwlpbnQgYWJzb2x1dGU7CQkvKiB3cml0ZS1vbmx5ICovCisJaW50IHBhbjsJCS8qIGRlZ3JlZXMgKiAxMDAgKi8KKwlpbnQgdGlsdDsJCS8qIGRlZ3Jlc3MgKiAxMDAgKi8KK307CisKKy8qIFJhbmdlIG9mIGFuZ2xlcyBvZiB0aGUgY2FtZXJhLCBib3RoIGhvcml6b250YWxseSBhbmQgdmVydGljYWxseS4KKyAqLworc3RydWN0IHB3Y19tcHRfcmFuZ2UKK3sKKwlpbnQgcGFuX21pbiwgcGFuX21heDsJCS8qIGRlZ3JlZXMgKiAxMDAgKi8KKwlpbnQgdGlsdF9taW4sIHRpbHRfbWF4OworfTsKKworc3RydWN0IHB3Y19tcHRfc3RhdHVzCit7CisJaW50IHN0YXR1czsKKwlpbnQgdGltZV9wYW47CisJaW50IHRpbWVfdGlsdDsKK307CisKKworLyogVGhpcyBpcyB1c2VkIGZvciBvdXQtb2Yta2VybmVsIGRlY29tcHJlc3Npb24uIFdpdGggaXQsIHlvdSBjYW4gZ2V0CisgICBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBpbml0aWFsaXplIGFuZCB1c2UgdGhlIGRlY29tcHJlc3NvcgorICAgcm91dGluZXMgaW4gc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMuCisgKi8gICAKK3N0cnVjdCBwd2NfdmlkZW9fY29tbWFuZAoreworCWludCB0eXBlOwkJLyogY2FtZXJhIHR5cGUgKDY0NSwgNjc1LCA3MzAsIGV0Yy4pICovCisJaW50IHJlbGVhc2U7CQkvKiByZWxlYXNlIG51bWJlciAqLworCisgICAgICAgIGludCBzaXplOwkJLyogb25lIG9mIFBTWl8qICovCisgICAgICAgIGludCBhbHRlcm5hdGU7CisJaW50IGNvbW1hbmRfbGVuOwkvKiBsZW5ndGggb2YgVVNCIHZpZGVvIGNvbW1hbmQgKi8KKwl1bnNpZ25lZCBjaGFyIGNvbW1hbmRfYnVmWzEzXTsJLyogQWN0dWFsIFVTQiB2aWRlbyBjb21tYW5kICovCisJaW50IGJhbmRsZW5ndGg7CQkvKiA+MCA9IGNvbXByZXNzZWQgKi8KKwlpbnQgZnJhbWVfc2l6ZTsJCS8qIFNpemUgb2Ygb25lICh1biljb21wcmVzc2VkIGZyYW1lICovCit9OworCisvKiBGbGFncyBmb3IgUFdDWCBzdWJyb3V0aW5lcy4gTm90IGFsbCBtb2R1bGVzIGhvbm91ciBhbGwgZmxhZ3MuICovCisjZGVmaW5lIFBXQ1hfRkxBR19QTEFOQVIJMHgwMDAxCisjZGVmaW5lIFBXQ1hfRkxBR19CQVlFUgkJMHgwMDA4CisKKworLyogSU9DVEwgZGVmaW5pdGlvbnMgKi8KKworIC8qIFJlc3RvcmUgdXNlciBzZXR0aW5ncyAqLworI2RlZmluZSBWSURJT0NQV0NSVVNFUgkJX0lPKCd2JywgMTkyKQorIC8qIFNhdmUgdXNlciBzZXR0aW5ncyAqLworI2RlZmluZSBWSURJT0NQV0NTVVNFUgkJX0lPKCd2JywgMTkzKQorIC8qIFJlc3RvcmUgZmFjdG9yeSBzZXR0aW5ncyAqLworI2RlZmluZSBWSURJT0NQV0NGQUNUT1JZCV9JTygndicsIDE5NCkKKworIC8qIFlvdSBjYW4gbWFuaXB1bGF0ZSB0aGUgY29tcHJlc3Npb24gZmFjdG9yLiBBIGNvbXByZXNzaW9uIHByZWZlcmVuY2Ugb2YgMAorICAgIG1lYW5zIHVzZSB1bmNvbXByZXNzZWQgbW9kZXMgd2hlbiBhdmFpbGFibGU7IDEgaXMgbG93IGNvbXByZXNzaW9uLCAyIGlzCisgICAgbWVkaXVtIGFuZCAzIGlzIGhpZ2ggY29tcHJlc3Npb24gcHJlZmVycmVkLiBPZiBjb3Vyc2UsIHRoZSBoaWdoZXIgdGhlCisgICAgY29tcHJlc3Npb24sIHRoZSBsb3dlciB0aGUgYmFuZHdpZHRoIHVzZWQgYnV0IG1vcmUgY2hhbmNlIG9mIGFydGVmYWN0cworICAgIGluIHRoZSBpbWFnZS4gVGhlIGRyaXZlciBhdXRvbWF0aWNhbGx5IGNob29zZXMgYSBoaWdoZXIgY29tcHJlc3Npb24gd2hlbgorICAgIHRoZSBwcmVmZXJyZWQgbW9kZSBpcyBub3QgYXZhaWxhYmxlLgorICAqLworIC8qIFNldCBwcmVmZXJyZWQgY29tcHJlc3Npb24gcXVhbGl0eSAoMCA9IHVuY29tcHJlc3NlZCwgMyA9IGhpZ2hlc3QgY29tcHJlc3Npb24pICovCisjZGVmaW5lIFZJRElPQ1BXQ1NDUVVBTAkJX0lPVygndicsIDE5NSwgaW50KQorIC8qIEdldCBwcmVmZXJyZWQgY29tcHJlc3Npb24gcXVhbGl0eSAqLworI2RlZmluZSBWSURJT0NQV0NHQ1FVQUwJCV9JT1IoJ3YnLCAxOTUsIGludCkKKworCisvKiBSZXRyaWV2ZSBzZXJpYWwgbnVtYmVyIG9mIGNhbWVyYSAqLworI2RlZmluZSBWSURJT0NQV0NHU0VSSUFMCV9JT1IoJ3YnLCAxOTgsIHN0cnVjdCBwd2Nfc2VyaWFsKQorCisgLyogVGhpcyBpcyBhIHByb2JlIGZ1bmN0aW9uOyBzaW5jZSBzbyBtYW55IGRldmljZXMgYXJlIHN1cHBvcnRlZCwgaXQKKyAgICBiZWNvbWVzIGRpZmZpY3VsdCB0byBpbmNsdWRlIGFsbCB0aGUgbmFtZXMgaW4gcHJvZ3JhbXMgdGhhdCB3YW50IHRvCisgICAgY2hlY2sgZm9yIHRoZSBlbmhhbmNlZCBQaGlsaXBzIHN0dWZmLiBTbyBpbiBzdGVhZCwgdHJ5IHRoaXMgUFJPQkU7CisgICAgaXQgcmV0dXJucyBhIHN0cnVjdHVyZSB3aXRoIHRoZSBvcmlnaW5hbCBuYW1lLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICBQaGlsaXBzIHR5cGUuCisgICAgVG8gdXNlLCBmaWxsIHRoZSBzdHJ1Y3R1cmUgd2l0aCB6ZXJvZXMsIGNhbGwgUFJPQkUgYW5kIGlmIHRoYXQgc3VjY2VlZHMsCisgICAgY29tcGFyZSB0aGUgbmFtZSB3aXRoIHRoYXQgcmV0dXJuZWQgZnJvbSBWSURJT0NHQ0FQOyB0aGV5IHNob3VsZCBiZSB0aGUKKyAgICBzYW1lLiBJZiBzbywgeW91IGNhbiBiZSBhc3N1cmVkIGl0IGlzIGEgUGhpbGlwcyAoT0VNKSBjYW0gYW5kIHRoZSB0eXBlCisgICAgaXMgdmFsaWQuCisgKi8KKyNkZWZpbmUgVklESU9DUFdDUFJPQkUJCV9JT1IoJ3YnLCAxOTksIHN0cnVjdCBwd2NfcHJvYmUpCisKKyAvKiBTZXQgQUdDIChBdXRvbWF0aWMgR2FpbiBDb250cm9sKTsgaW50IDwgMCA9IGF1dG8sIDAuLjY1NTM1ID0gZml4ZWQgKi8KKyNkZWZpbmUgVklESU9DUFdDU0FHQwkJX0lPVygndicsIDIwMCwgaW50KQorIC8qIEdldCBBR0M7IGludCA8IDAgPSBhdXRvOyA+PSAwID0gZml4ZWQsIHJhbmdlIDAuLjY1NTM1ICovCisjZGVmaW5lIFZJRElPQ1BXQ0dBR0MJCV9JT1IoJ3YnLCAyMDAsIGludCkKKyAvKiBTZXQgc2h1dHRlciBzcGVlZDsgaW50IDwgMCA9IGF1dG87ID49IDAgPSBmaXhlZCwgcmFuZ2UgMC4uNjU1MzUgKi8KKyNkZWZpbmUgVklESU9DUFdDU1NIVVRURVIJX0lPVygndicsIDIwMSwgaW50KQorCisgLyogQ29sb3IgY29tcGVuc2F0aW9uIChBdXRvIFdoaXRlIEJhbGFuY2UpICovCisjZGVmaW5lIFZJRElPQ1BXQ1NBV0IgICAgICAgICAgIF9JT1coJ3YnLCAyMDIsIHN0cnVjdCBwd2Nfd2hpdGViYWxhbmNlKQorI2RlZmluZSBWSURJT0NQV0NHQVdCICAgICAgICAgICBfSU9SKCd2JywgMjAyLCBzdHJ1Y3QgcHdjX3doaXRlYmFsYW5jZSkKKworIC8qIEF1dG8gV0Igc3BlZWQgKi8KKyNkZWZpbmUgVklESU9DUFdDU0FXQlNQRUVECV9JT1coJ3YnLCAyMDMsIHN0cnVjdCBwd2Nfd2Jfc3BlZWQpCisjZGVmaW5lIFZJRElPQ1BXQ0dBV0JTUEVFRAlfSU9SKCd2JywgMjAzLCBzdHJ1Y3QgcHdjX3diX3NwZWVkKQorCisgLyogTEVEcyBvbi9vZmYvYmxpbms7IGludCByYW5nZSAwLi42NTUzNSAqLworI2RlZmluZSBWSURJT0NQV0NTTEVEICAgICAgICAgICBfSU9XKCd2JywgMjA1LCBzdHJ1Y3QgcHdjX2xlZHMpCisjZGVmaW5lIFZJRElPQ1BXQ0dMRUQgICAgICAgICAgIF9JT1IoJ3YnLCAyMDUsIHN0cnVjdCBwd2NfbGVkcykKKworICAvKiBDb250b3VyIChzaGFycG5lc3MpOyBpbnQgPCAwID0gYXV0bywgMC4uNjU1MzYgPSBmaXhlZCAqLworI2RlZmluZSBWSURJT0NQV0NTQ09OVE9VUglfSU9XKCd2JywgMjA2LCBpbnQpCisjZGVmaW5lIFZJRElPQ1BXQ0dDT05UT1VSCV9JT1IoJ3YnLCAyMDYsIGludCkKKworICAvKiBCYWNrbGlnaHQgY29tcGVuc2F0aW9uOyAwID0gb2ZmLCBvdGhlcndpc2Ugb24gKi8KKyNkZWZpbmUgVklESU9DUFdDU0JBQ0tMSUdIVAlfSU9XKCd2JywgMjA3LCBpbnQpCisjZGVmaW5lIFZJRElPQ1BXQ0dCQUNLTElHSFQJX0lPUigndicsIDIwNywgaW50KQorCisgIC8qIEZsaWNrZXJsZXNzIG1vZGU7ID0gMCBvZmYsIG90aGVyd2lzZSBvbiAqLworI2RlZmluZSBWSURJT0NQV0NTRkxJQ0tFUglfSU9XKCd2JywgMjA4LCBpbnQpCisjZGVmaW5lIFZJRElPQ1BXQ0dGTElDS0VSCV9JT1IoJ3YnLCAyMDgsIGludCkgIAorCisgIC8qIER5bmFtaWMgbm9pc2UgcmVkdWN0aW9uOyAwIG9mZiwgMyA9IGhpZ2ggbm9pc2UgcmVkdWN0aW9uICovCisjZGVmaW5lIFZJRElPQ1BXQ1NEWU5OT0lTRQlfSU9XKCd2JywgMjA5LCBpbnQpCisjZGVmaW5lIFZJRElPQ1BXQ0dEWU5OT0lTRQlfSU9SKCd2JywgMjA5LCBpbnQpCisKKyAvKiBSZWFsIGltYWdlIHNpemUgYXMgdXNlZCBieSB0aGUgY2FtZXJhOyB0ZWxscyB5b3Ugd2hldGhlciBvciBub3QgdGhlcmUncyBhIGdyYXkgYm9yZGVyIGFyb3VuZCB0aGUgaW1hZ2UgKi8KKyNkZWZpbmUgVklESU9DUFdDR1JFQUxTSVpFCV9JT1IoJ3YnLCAyMTAsIHN0cnVjdCBwd2NfaW1hZ2VzaXplKQorCisgLyogTW90b3JpemVkIHBhbiAmIHRpbHQgZnVuY3Rpb25zICovIAorI2RlZmluZSBWSURJT0NQV0NNUFRSRVNFVAlfSU9XKCd2JywgMjExLCBpbnQpCisjZGVmaW5lIFZJRElPQ1BXQ01QVEdSQU5HRQlfSU9SKCd2JywgMjExLCBzdHJ1Y3QgcHdjX21wdF9yYW5nZSkKKyNkZWZpbmUgVklESU9DUFdDTVBUU0FOR0xFCV9JT1coJ3YnLCAyMTIsIHN0cnVjdCBwd2NfbXB0X2FuZ2xlcykKKyNkZWZpbmUgVklESU9DUFdDTVBUR0FOR0xFCV9JT1IoJ3YnLCAyMTIsIHN0cnVjdCBwd2NfbXB0X2FuZ2xlcykKKyNkZWZpbmUgVklESU9DUFdDTVBUU1RBVFVTCV9JT1IoJ3YnLCAyMTMsIHN0cnVjdCBwd2NfbXB0X3N0YXR1cykKKworIC8qIEdldCB0aGUgVVNCIHNldC12aWRlbyBjb21tYW5kOyBuZWVkZWQgZm9yIGluaXRpYWxpemluZyBsaWJwd2N4ICovCisjZGVmaW5lIFZJRElPQ1BXQ0dWSURDTUQJX0lPUigndicsIDIxNSwgc3RydWN0IHB3Y192aWRlb19jb21tYW5kKQorc3RydWN0IHB3Y190YWJsZV9pbml0X2J1ZmZlciB7CisgICBpbnQgbGVuOworICAgY2hhciAqYnVmZmVyOworCit9OworI2RlZmluZSBWSURJT0NQV0NHVklEVEFCTEUJX0lPUigndicsIDIxNiwgc3RydWN0IHB3Y190YWJsZV9pbml0X2J1ZmZlcikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWtpYXJhLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWtpYXJhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ4NTgwMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2Mta2lhcmEuYwpAQCAtMCwwICsxLDg5MSBAQAorLyogTGludXggZHJpdmVyIGZvciBQaGlsaXBzIHdlYmNhbQorICAgKEMpIDIwMDQgICAgICBMdWMgU2FpbGxhcmQgKGx1Y0BzYWlsbGFyZC5vcmcpCisKKyAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAorICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCisgICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyBhbmQgc3VwcG9ydCByZXF1ZXN0cyB0byA8bHVjQHNhaWxsYXJkLm9yZz4uCisgICBUaGUgZGVjb21wcmVzc2lvbiByb3V0aW5lcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYnkgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUKKyAgIE5lbW9zb2Z0IGJpbmFyeSBwd2N4IG1vZHVsZS4gQ2F2ZWF0IGVtcHRvci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisKKy8qIFRoaXMgdGFibGVzIGNvbnRhaW5zIGVudHJpZXMgZm9yIHRoZSA3MzAvNzQwLzc1MCAoS2lhcmEpIGNhbWVyYSwgd2l0aAorICAgNCBkaWZmZXJlbnQgcXVhbGl0aWVzIChubyBjb21wcmVzc2lvbiwgbG93LCBtZWRpdW0sIGhpZ2gpLgorICAgSXQgbGlzdHMgdGhlIGJhbmR3aWR0aCByZXF1aXJlbWVudHMgZm9yIHNhaWQgbW9kZSBieSBpdHMgYWx0ZXJuYXRlIGludGVyZmFjZQorICAgbnVtYmVyLiBBbiBhbHRlcm5hdGUgb2YgMCBtZWFucyB0aGF0IHRoZSBtb2RlIGlzIHVuYXZhaWxhYmxlLgorCisgICBUaGVyZSBhcmUgNiAqIDQgKiA0IGVudHJpZXM6CisgICAgIDYgZGlmZmVyZW50IHJlc29sdXRpb25zIHN1YnFjaWYsIHFzaWYsIHFjaWYsIHNpZiwgY2lmLCB2Z2EKKyAgICAgNiBmcmFtZXJhdGVzOiA1LCAxMCwgMTUsIDIwLCAyNSwgMzAKKyAgICAgNCBjb21wcmVzc2lvbiBtb2RpOiBub25lLCBsb3csIG1lZGl1bSwgaGlnaAorCisgICBXaGVuIGFuIHVuY29tcHJlc3NlZCBtb2RlIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBuZXh0IGF2YWlsYWJsZSBjb21wcmVzc2VkIG1vZGUKKyAgIHdpbGwgYmUgY2hvc2VuICh1bmxlc3MgdGhlIGRlY29tcHJlc3NvciBpcyBhYnNlbnQpLiBTb21ldGltZXMgdGhlcmUgYXJlIG9ubHkKKyAgIDEgb3IgMiBjb21wcmVzc2VkIG1vZGVzIGF2YWlsYWJsZTsgaW4gdGhhdCBjYXNlIGVudHJpZXMgYXJlIGR1cGxpY2F0ZWQuCisqLworCisKKyNpbmNsdWRlICJwd2Mta2lhcmEuaCIKKyNpbmNsdWRlICJwd2MtdW5jb21wcmVzcy5oIgorCitjb25zdCBzdHJ1Y3QgS2lhcmFfdGFibGVfZW50cnkgS2lhcmFfdGFibGVbUFNaX01BWF1bNl1bNF0gPQoreworICAgLyogU1FDSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICAgICAvKiAxMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDE1IGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICAgICAvKiAyNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDMwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgfSwKKyAgIC8qIFFTSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MSwgMTQ2LCAgICAwLCB7MHgxRCwgMHhGNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg5MiwgMHgwMCwgMHg4MH19LAorICAgICAgICAgezEsIDE0NiwgICAgMCwgezB4MUQsIDB4RjQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4OTIsIDB4MDAsIDB4ODB9fSwKKyAgICAgICAgIHsxLCAxNDYsICAgIDAsIHsweDFELCAweEY0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDkyLCAweDAwLCAweDgwfX0sCisgICAgICAgICB7MSwgMTQ2LCAgICAwLCB7MHgxRCwgMHhGNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg5MiwgMHgwMCwgMHg4MH19LAorICAgICAgfSwKKyAgICAgIC8qIDEwIGZwcyAqLworICAgICAgeworICAgICAgICAgezIsIDI5MSwgICAgMCwgezB4MUMsIDB4RjQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MjMsIDB4MDEsIDB4ODB9fSwKKyAgICAgICAgIHsxLCAxOTIsICA2MzAsIHsweDE0LCAweEY0LCAweDMwLCAweDEzLCAweEE5LCAweDEyLCAweEUxLCAweDE3LCAweDA4LCAweEMwLCAweDAwLCAweDgwfX0sCisgICAgICAgICB7MSwgMTkyLCAgNjMwLCB7MHgxNCwgMHhGNCwgMHgzMCwgMHgxMywgMHhBOSwgMHgxMiwgMHhFMSwgMHgxNywgMHgwOCwgMHhDMCwgMHgwMCwgMHg4MH19LAorICAgICAgICAgezEsIDE5MiwgIDYzMCwgezB4MTQsIDB4RjQsIDB4MzAsIDB4MTMsIDB4QTksIDB4MTIsIDB4RTEsIDB4MTcsIDB4MDgsIDB4QzAsIDB4MDAsIDB4ODB9fSwKKyAgICAgIH0sCisgICAgICAvKiAxNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHszLCA0MzcsICAgIDAsIHsweDFCLCAweEY0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweEI1LCAweDAxLCAweDgwfX0sCisgICAgICAgICB7MiwgMjkyLCAgNjQwLCB7MHgxMywgMHhGNCwgMHgzMCwgMHgxMywgMHhGNywgMHgxMywgMHgyRiwgMHgxMywgMHgyMCwgMHgyNCwgMHgwMSwgMHg4MH19LAorICAgICAgICAgezIsIDI5MiwgIDY0MCwgezB4MTMsIDB4RjQsIDB4MzAsIDB4MTMsIDB4RjcsIDB4MTMsIDB4MkYsIDB4MTMsIDB4MjAsIDB4MjQsIDB4MDEsIDB4ODB9fSwKKyAgICAgICAgIHsxLCAxOTIsICA0MjAsIHsweDEzLCAweEY0LCAweDMwLCAweDBELCAweDFCLCAweDBDLCAweDUzLCAweDFFLCAweDE4LCAweEMwLCAweDAwLCAweDgwfX0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisgICAgICAgICB7NCwgNTg5LCAgICAwLCB7MHgxQSwgMHhGNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0RCwgMHgwMiwgMHg4MH19LAorICAgICAgICAgezMsIDQ0OCwgIDczMCwgezB4MTIsIDB4RjQsIDB4MzAsIDB4MTYsIDB4QzksIDB4MTYsIDB4MDEsIDB4MEUsIDB4MTgsIDB4QzAsIDB4MDEsIDB4ODB9fSwKKyAgICAgICAgIHsyLCAyOTIsICA0NzYsIHsweDEyLCAweEY0LCAweDMwLCAweDBFLCAweEQ4LCAweDBFLCAweDEwLCAweDE5LCAweDE4LCAweDI0LCAweDAxLCAweDgwfX0sCisgICAgICAgICB7MSwgMTkyLCAgMzEyLCB7MHgxMiwgMHhGNCwgMHg1MCwgMHgwOSwgMHhCMywgMHgwOCwgMHhFQiwgMHgxRSwgMHgxOCwgMHhDMCwgMHgwMCwgMHg4MH19LAorICAgICAgfSwKKyAgICAgIC8qIDI1IGZwcyAqLworICAgICAgeworICAgICAgICAgezUsIDcwMywgICAgMCwgezB4MTksIDB4RjQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4QkYsIDB4MDIsIDB4ODB9fSwKKyAgICAgICAgIHszLCA0NDcsICA2MTAsIHsweDExLCAweEY0LCAweDMwLCAweDEzLCAweDBCLCAweDEyLCAweDQzLCAweDE0LCAweDI4LCAweEJGLCAweDAxLCAweDgwfX0sCisgICAgICAgICB7MiwgMjkyLCAgMzk4LCB7MHgxMSwgMHhGNCwgMHg1MCwgMHgwQywgMHg2QywgMHgwQiwgMHhBNCwgMHgxRSwgMHgyOCwgMHgyNCwgMHgwMSwgMHg4MH19LAorICAgICAgICAgezEsIDE5MywgIDI2MiwgezB4MTEsIDB4RjQsIDB4NTAsIDB4MDgsIDB4MjMsIDB4MDcsIDB4NUIsIDB4MUUsIDB4MjgsIDB4QzEsIDB4MDAsIDB4ODB9fSwKKyAgICAgIH0sCisgICAgICAvKiAzMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHs4LCA4NzQsICAgIDAsIHsweDE4LCAweEY0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDZBLCAweDAzLCAweDgwfX0sCisgICAgICAgICB7NSwgNzA0LCAgNzMwLCB7MHgxMCwgMHhGNCwgMHgzMCwgMHgxNiwgMHhDOSwgMHgxNiwgMHgwMSwgMHgwRSwgMHgyOCwgMHhDMCwgMHgwMiwgMHg4MH19LAorICAgICAgICAgezMsIDQ0OCwgIDQ5MiwgezB4MTAsIDB4RjQsIDB4MzAsIDB4MEYsIDB4NUQsIDB4MEUsIDB4OTUsIDB4MTUsIDB4MjgsIDB4QzAsIDB4MDEsIDB4ODB9fSwKKyAgICAgICAgIHsyLCAyOTIsICAzMjAsIHsweDEwLCAweEY0LCAweDUwLCAweDA5LCAweEZCLCAweDA5LCAweDMzLCAweDFFLCAweDI4LCAweDI0LCAweDAxLCAweDgwfX0sCisgICAgICB9LAorICAgfSwKKyAgIC8qIFFDSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICAgICAvKiAxMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDE1IGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICAgICAvKiAyNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDMwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgfSwKKyAgIC8qIFNJRiAqLworICAgeworICAgICAgLyogNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHs0LCA1ODIsICAgIDAsIHsweDBELCAweEY0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQ2LCAweDAyLCAweDgwfX0sCisgICAgICAgICB7MywgMzg3LCAxMjc2LCB7MHgwNSwgMHhGNCwgMHgzMCwgMHgyNywgMHhEOCwgMHgyNiwgMHg0OCwgMHgwMywgMHgxMCwgMHg4MywgMHgwMSwgMHg4MH19LAorICAgICAgICAgezIsIDI5MSwgIDk2MCwgezB4MDUsIDB4RjQsIDB4MzAsIDB4MUQsIDB4RjIsIDB4MUMsIDB4NjIsIDB4MDQsIDB4MTAsIDB4MjMsIDB4MDEsIDB4ODB9fSwKKyAgICAgICAgIHsxLCAxOTEsICA2MzAsIHsweDA1LCAweEY0LCAweDUwLCAweDEzLCAweEE5LCAweDEyLCAweDE5LCAweDA1LCAweDE4LCAweEJGLCAweDAwLCAweDgwfX0sCisgICAgICB9LAorICAgICAgLyogMTAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHs2LCA3NzUsIDEyNzgsIHsweDA0LCAweEY0LCAweDMwLCAweDI3LCAweEU4LCAweDI2LCAweDU4LCAweDA1LCAweDMwLCAweDA3LCAweDAzLCAweDgwfX0sCisgICAgICAgICB7MywgNDQ3LCAgNzM2LCB7MHgwNCwgMHhGNCwgMHgzMCwgMHgxNiwgMHhGQiwgMHgxNSwgMHg2QiwgMHgwNSwgMHgyOCwgMHhCRiwgMHgwMSwgMHg4MH19LAorICAgICAgICAgezIsIDI5MiwgIDQ4MCwgezB4MDQsIDB4RjQsIDB4NzAsIDB4MEUsIDB4RjksIDB4MEQsIDB4NjksIDB4MDksIDB4MjgsIDB4MjQsIDB4MDEsIDB4ODB9fSwKKyAgICAgIH0sCisgICAgICAvKiAxNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezksIDk1NSwgMTA1MCwgezB4MDMsIDB4RjQsIDB4MzAsIDB4MjAsIDB4Q0YsIDB4MUYsIDB4M0YsIDB4MDYsIDB4NDgsIDB4QkIsIDB4MDMsIDB4ODB9fSwKKyAgICAgICAgIHs0LCA1OTIsICA2NTAsIHsweDAzLCAweEY0LCAweDMwLCAweDE0LCAweDQ0LCAweDEyLCAweEI0LCAweDA4LCAweDMwLCAweDUwLCAweDAyLCAweDgwfX0sCisgICAgICAgICB7MywgNDQ4LCAgNDkyLCB7MHgwMywgMHhGNCwgMHg1MCwgMHgwRiwgMHg1MiwgMHgwRCwgMHhDMiwgMHgwOSwgMHgzOCwgMHhDMCwgMHgwMSwgMHg4MH19LAorICAgICAgfSwKKyAgICAgIC8qIDIwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7OSwgOTU4LCAgNzgyLCB7MHgwMiwgMHhGNCwgMHgzMCwgMHgxOCwgMHg2QSwgMHgxNiwgMHhEQSwgMHgwQiwgMHg1OCwgMHhCRSwgMHgwMywgMHg4MH19LAorICAgICAgICAgezUsIDcwMywgIDU3NCwgezB4MDIsIDB4RjQsIDB4NTAsIDB4MTEsIDB4RTcsIDB4MTAsIDB4NTcsIDB4MEIsIDB4NDAsIDB4QkYsIDB4MDIsIDB4ODB9fSwKKyAgICAgICAgIHszLCA0NDYsICAzNjQsIHsweDAyLCAweEY0LCAweDkwLCAweDBCLCAweDVDLCAweDA5LCAweENDLCAweDBFLCAweDM4LCAweEJFLCAweDAxLCAweDgwfX0sCisgICAgICB9LAorICAgICAgLyogMjUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHs5LCA5NTgsICA2NTQsIHsweDAxLCAweEY0LCAweDMwLCAweDE0LCAweDY2LCAweDEyLCAweEQ2LCAweDBCLCAweDUwLCAweEJFLCAweDAzLCAweDgwfX0sCisgICAgICAgICB7NiwgNzc2LCAgNTMwLCB7MHgwMSwgMHhGNCwgMHg1MCwgMHgxMCwgMHg4QywgMHgwRSwgMHhGQywgMHgwQywgMHg0OCwgMHgwOCwgMHgwMywgMHg4MH19LAorICAgICAgICAgezQsIDU5MiwgIDQwNCwgezB4MDEsIDB4RjQsIDB4NzAsIDB4MEMsIDB4OTYsIDB4MEIsIDB4MDYsIDB4MEIsIDB4NDgsIDB4NTAsIDB4MDIsIDB4ODB9fSwKKyAgICAgIH0sCisgICAgICAvKiAzMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezksIDk1NywgIDUyNiwgezB4MDAsIDB4RjQsIDB4NTAsIDB4MTAsIDB4NjgsIDB4MEUsIDB4RDgsIDB4MEQsIDB4NTgsIDB4QkQsIDB4MDMsIDB4ODB9fSwKKyAgICAgICAgIHs2LCA3NzUsICA0MjYsIHsweDAwLCAweEY0LCAweDcwLCAweDBELCAweDQ4LCAweDBCLCAweEI4LCAweDBGLCAweDUwLCAweDA3LCAweDAzLCAweDgwfX0sCisgICAgICAgICB7NCwgNTkwLCAgMzI0LCB7MHgwMCwgMHg3QSwgMHg4OCwgMHgwQSwgMHgxQywgMHgwOCwgMHhCNCwgMHgwRSwgMHg1MCwgMHg0RSwgMHgwMiwgMHg4MH19LAorICAgICAgfSwKKyAgIH0sCisgICAvKiBDSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICAgICAvKiAxMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDE1IGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICAgICAvKiAyNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDMwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgfSwKKyAgIC8qIFZHQSAqLworICAgeworICAgICAgLyogNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezYsIDc3MywgMTI3MiwgezB4MjUsIDB4RjQsIDB4MzAsIDB4MjcsIDB4QjYsIDB4MjQsIDB4OTYsIDB4MDIsIDB4MzAsIDB4MDUsIDB4MDMsIDB4ODB9fSwKKyAgICAgICAgIHs0LCA1OTIsICA5NzYsIHsweDI1LCAweEY0LCAweDUwLCAweDFFLCAweDc4LCAweDFCLCAweDU4LCAweDAzLCAweDMwLCAweDUwLCAweDAyLCAweDgwfX0sCisgICAgICAgICB7MywgNDQ4LCAgNzM4LCB7MHgyNSwgMHhGNCwgMHg5MCwgMHgxNywgMHgwQywgMHgxMywgMHhFQywgMHgwNCwgMHgzMCwgMHhDMCwgMHgwMSwgMHg4MH19LAorICAgICAgfSwKKyAgICAgIC8qIDEwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7OSwgOTU2LCAgNzg4LCB7MHgyNCwgMHhGNCwgMHg3MCwgMHgxOCwgMHg5QywgMHgxNSwgMHg3QywgMHgwMywgMHg0OCwgMHhCQywgMHgwMywgMHg4MH19LAorICAgICAgICAgezYsIDc3NiwgIDY0MCwgezB4MjQsIDB4RjQsIDB4QjAsIDB4MTMsIDB4RkMsIDB4MTEsIDB4MkMsIDB4MDQsIDB4NDgsIDB4MDgsIDB4MDMsIDB4ODB9fSwKKyAgICAgICAgIHs0LCA1OTIsICA0ODgsIHsweDI0LCAweDdBLCAweEU4LCAweDBGLCAweDNDLCAweDBDLCAweDZDLCAweDA2LCAweDQ4LCAweDUwLCAweDAyLCAweDgwfX0sCisgICAgICB9LAorICAgICAgLyogMTUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHs5LCA5NTcsICA1MjYsIHsweDIzLCAweDdBLCAweEU4LCAweDEwLCAweDY4LCAweDBELCAweDk4LCAweDA2LCAweDU4LCAweEJELCAweDAzLCAweDgwfX0sCisgICAgICAgICB7OSwgOTU3LCAgNTI2LCB7MHgyMywgMHg3QSwgMHhFOCwgMHgxMCwgMHg2OCwgMHgwRCwgMHg5OCwgMHgwNiwgMHg1OCwgMHhCRCwgMHgwMywgMHg4MH19LAorICAgICAgICAgezgsIDg5NSwgIDQ5MiwgezB4MjMsIDB4N0EsIDB4RTgsIDB4MEYsIDB4NUQsIDB4MEMsIDB4OEQsIDB4MDYsIDB4NTgsIDB4N0YsIDB4MDMsIDB4ODB9fSwKKyAgICAgIH0sCisgICAgICAvKiAyMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDI1IGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgICAgLyogMzAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICB9LAorfTsKKworCisvKgorICogUm9tIHRhYmxlIGZvciBraWFyYSBjaGlwcworICoKKyAqIDMyIHJvbXMgdGFibGVzIChvbmUgZm9yIGVhY2ggcmVzb2x1dGlvbiA/KQorICogIDIgdGFibGVzIHBlciByb21zIChvbmUgZm9yIGVhY2ggcGFzc2VzKSAoWSwgYW5kIFUmVikKKyAqIDEyOCBieXRlcyBwZXIgcGFzc2VzCisgKi8KKworY29uc3QgdW5zaWduZWQgaW50IEtpYXJhUm9tVGFibGUgWzhdWzJdWzE2XVs4XSA9ICAKK3sKKyB7IC8qIHZlcnNpb24gMCAqLworICB7IC8qIHZlcnNpb24gMCwgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA5LDB4MDAwMDAwMDksCisgICAgMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDksMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDEyNGEsMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwOTI1MiwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNTIsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI0ZGIsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWI5MmQsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI5MjUsMHgwMDAxYzk2ZSwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiAwLCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDA5LAorICAgIDB4MDAwMDAwMDksMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA5LDB4MDAwMDAwMDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwMTI1MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMDk0OTMsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNTIsMHgwMDAwOTQ5MywKKyAgICAweDAwMDEyNmRjLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDFiNzI1LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0sCisgeyAvKiB2ZXJzaW9uIDEgKi8KKyAgeyAvKiB2ZXJzaW9uIDEsIHBhc3NlcyAwICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwOSwweDAwMDAwMDA5LAorICAgIDB4MDAwMDAwMDksMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwOTI1MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMDk0OTMsMHgwMDAwYTQ5YiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwweDAwMDEyNGRiLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNmRjLDB4MDAwMTI2ZGMsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9LAorICB7IC8qIHZlcnNpb24gMSwgcGFzc2VzIDEgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwMDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDA5LDB4MDAwMDAwMDEsMHgwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDA0OSwweDAwMDAwMjRhLDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAwMDAxfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDAyNGEsMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwMDI0YSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwOTI1MiwweDAwMDAxMjUyLDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDA5MjkyLDB4MDAwMDEyNTIsMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyOTIsMHgwMDAwMTI1MiwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDAxMjUyLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDEyNTIsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5NDkyLDB4MDAwMDk0OTMsMHgwMDAwOTI5MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0KKyB9LAorIHsgLyogdmVyc2lvbiAyICovCisgIHsgLyogdmVyc2lvbiAyLCBwYXNzZXMgMCAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAyNGEsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDEyNGEsMHgwMDAwMTI1MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5MywweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDBhNDliLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI1MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwweDAwMDEyNGRiLDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNGRiLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI1MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxYjcyNCwweDAwMDFiNzI1LDB4MDAwMWI5MjV9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfSwKKyAgeyAvKiB2ZXJzaW9uIDIsIHBhc3NlcyAxICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwOTI5MiwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMGE0OWIsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwYTQ5YiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDBhNDliLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTQ5MiwweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI1MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjUyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9CisgfSwKKyB7IC8qIHZlcnNpb24gMyAqLworICB7IC8qIHZlcnNpb24gMywgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMzZlNCwweDAwMDFiNzI1LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEzNmU0LDB4MDAwMWI3MjUsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxYjkyZCwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxYjcyNCwweDAwMDFiOTJkLDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWM5NmUsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI5MjUsMHgwMDAyNWJiNiwweDAwMDI0Yjc3fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiAzLCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwOTQ5MywweDAwMDBhNDliLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDEyNmRjLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMTI2ZGMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAxMjZkYywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0sCisgeyAvKiB2ZXJzaW9uIDQgKi8KKyAgeyAvKiB2ZXJzaW9uIDQsIHBhc3NlcyAwICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDA5MjUyLDB4MDAwMDEyNTIsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI1MiwweDAwMDA5NDkzLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjUyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxYjcyNCwweDAwMDFiNzI1LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiOTI1LDB4MDAwMWI5MmQsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9LAorICB7IC8qIHZlcnNpb24gNCwgcGFzc2VzIDEgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwMDksMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwMDksMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDAyNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAwMDQ5LDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDAxMjRhLDB4MDAwMDAyNGEsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDEyNGEsMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwOTI1MiwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwOTQ5MywweDAwMDA5NDkzLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjRkYiwweDAwMDBhNDliLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0KKyB9LAorIHsgLyogdmVyc2lvbiA1ICovCisgIHsgLyogdmVyc2lvbiA1LCBwYXNzZXMgMCAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMTI0ZGIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWI3MjUsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI3MjQsMHgwMDAxYjkyZCwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjcyNCwweDAwMDFiOTJkLDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiOTI1LDB4MDAwMWM5NmUsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMWI5MjUsMHgwMDAxYzk2ZSwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMWM5MjQsMHgwMDAyNDk2ZCwweDAwMDI1YmI2LDB4MDAwMjRiNzd9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfSwKKyAgeyAvKiB2ZXJzaW9uIDUsIHBhc3NlcyAxICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjUyLDB4MDAwMDAyNGEsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMDkyOTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDA5NDkzLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNGRiLDB4MDAwMDk0OTMsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI0ZGIsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9CisgfSwKKyB7IC8qIHZlcnNpb24gNiAqLworICB7IC8qIHZlcnNpb24gNiwgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxYjcyNCwweDAwMDFiNzI1LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMWI5MmQsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI3MjQsMHgwMDAxYjkyZCwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjcyNCwweDAwMDFiOTJkLDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiOTI1LDB4MDAwMWI5MmQsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMWI5MjUsMHgwMDAxYzk2ZSwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYzkyZCwweDAwMDFjOTZlLDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFjOTJkLDB4MDAwMjRiNzYsMHgwMDAyNDk2ZX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMTI0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFjOTI0LDB4MDAwMjRiNmQsMHgwMDAyZGRiNiwweDAwMDI1YmJmfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiA2LCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMDkyNTIsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwOTI5MiwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEyNGRiLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNGRiLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEyNGRiLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWM5MjQsMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0sCisgeyAvKiB2ZXJzaW9uIDcgKi8KKyAgeyAvKiB2ZXJzaW9uIDcsIHBhc3NlcyAwICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDFiNzI1LDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMWI3MjUsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI3MjQsMHgwMDAxYjcyNSwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjcyNCwweDAwMDFjOTZlLDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFjOTJkLDB4MDAwMWM5NmUsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWM5MmQsMHgwMDAxYzk2ZSwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYzkyZCwweDAwMDFjOTZlLDB4MDAwMWI5MjV9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFjOTJkLDB4MDAwMjRiNzYsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFiOTI0LDB4MDAwMWM5MmQsMHgwMDAyNGI3NiwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMWI5MjQsMHgwMDAxYzkyZCwweDAwMDI0Yjc2LDB4MDAwMjQ5NmV9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDEyNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAyNDkyNCwweDAwMDI0YjZkLDB4MDAwMmRkYjYsMHgwMDAyNWJiZn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9LAorICB7IC8qIHZlcnNpb24gNywgcGFzc2VzIDEgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwOTQ5MiwweDAwMDA5MjkyLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMGE0OWIsMHgwMDAwOTQ5MywweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEyNGRiLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDEyNGRiLDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTI0ZGIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMjZkYywweDAwMDBhNDliLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMTI0OTIsMHgwMDAxYjZkYiwKKyAgICAweDAwMDFjOTI0LDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0KKyB9Cit9OworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWtpYXJhLmggYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWtpYXJhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI5MjlhYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2Mta2lhcmEuaApAQCAtMCwwICsxLDQ1IEBACisvKiBMaW51eCBkcml2ZXIgZm9yIFBoaWxpcHMgd2ViY2FtCisgICAoQykgMjAwNCAgICAgIEx1YyBTYWlsbGFyZCAobHVjQHNhaWxsYXJkLm9yZykKKworICAgTk9URTogdGhpcyB2ZXJzaW9uIG9mIHB3YyBpcyBhbiB1bm9mZmljaWFsIChtb2RpZmllZCkgcmVsZWFzZSBvZiBwd2MgJiBwY3d4CisgICBkcml2ZXIgYW5kIHRodXMgbWF5IGhhdmUgYnVncyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgb3JpZ2luYWwgdmVyc2lvbi4KKyAgIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIGFuZCBzdXBwb3J0IHJlcXVlc3RzIHRvIDxsdWNAc2FpbGxhcmQub3JnPi4KKyAgIFRoZSBkZWNvbXByZXNzaW9uIHJvdXRpbmVzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBieSByZXZlcnNlLWVuZ2luZWVyaW5nIHRoZQorICAgTmVtb3NvZnQgYmluYXJ5IHB3Y3ggbW9kdWxlLiBDYXZlYXQgZW1wdG9yLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyovCisKKy8qIEVudHJpZXMgZm9yIHRoZSBLaWFyYSAoNzMwLzc0MC83NTApIGNhbWVyYSAqLworCisjaWZuZGVmIFBXQ19LSUFSQV9ICisjZGVmaW5lIFBXQ19LSUFSQV9ICisKKyNpbmNsdWRlICJwd2MtaW9jdGwuaCIKKworc3RydWN0IEtpYXJhX3RhYmxlX2VudHJ5Cit7CisJY2hhciBhbHRlcm5hdGU7CQkJLyogVVNCIGFsdGVybmF0ZSBpbnRlcmZhY2UgKi8KKwl1bnNpZ25lZCBzaG9ydCBwYWNrZXRzaXplOwkvKiBOb3JtYWwgcGFja2V0IHNpemUgKi8KKwl1bnNpZ25lZCBzaG9ydCBiYW5kbGVuZ3RoOwkvKiBCYW5kbGVuZ3RoIHdoZW4gZGVjb21wcmVzc2luZyAqLworCXVuc2lnbmVkIGNoYXIgbW9kZVsxMl07CQkvKiBwcmVjb21wdXRlZCBtb2RlIHNldHRpbmdzIGZvciBjYW0gKi8KK307CisKK2NvbnN0IGV4dGVybiBzdHJ1Y3QgS2lhcmFfdGFibGVfZW50cnkgS2lhcmFfdGFibGVbUFNaX01BWF1bNl1bNF07Citjb25zdCBleHRlcm4gdW5zaWduZWQgaW50IEtpYXJhUm9tVGFibGVbOF1bMl1bMTZdWzhdOworCisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLW1pc2MuYyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtbWlzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YTRiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLW1pc2MuYwpAQCAtMCwwICsxLDE0MCBAQAorLyogTGludXggZHJpdmVyIGZvciBQaGlsaXBzIHdlYmNhbSAKKyAgIFZhcmlvdXMgbWlzY2VsbGFuZW91cyBmdW5jdGlvbnMgYW5kIHRhYmxlcy4KKyAgIChDKSAxOTk5LTIwMDMgTmVtb3NvZnQgVW52LgorICAgKEMpIDIwMDQgICAgICBMdWMgU2FpbGxhcmQgKGx1Y0BzYWlsbGFyZC5vcmcpCisKKyAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAorICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCisgICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyBhbmQgc3VwcG9ydCByZXF1ZXN0cyB0byA8bHVjQHNhaWxsYXJkLm9yZz4uCisgICBUaGUgZGVjb21wcmVzc2lvbiByb3V0aW5lcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYnkgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUKKyAgIE5lbW9zb2Z0IGJpbmFyeSBwd2N4IG1vZHVsZS4gQ2F2ZWF0IGVtcHRvci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAicHdjLmgiCisKK3N0cnVjdCBwd2NfY29vcmQgcHdjX2ltYWdlX3NpemVzW1BTWl9NQVhdID0KK3sKKwl7IDEyOCwgIDk2LCAwIH0sCisJeyAxNjAsIDEyMCwgMCB9LAorCXsgMTc2LCAxNDQsIDAgfSwKKwl7IDMyMCwgMjQwLCAwIH0sCisJeyAzNTIsIDI4OCwgMCB9LAorCXsgNjQwLCA0ODAsIDAgfSwKK307CisKKy8qIHgseSAtPiBQU1pfICovCitpbnQgcHdjX2RlY29kZV9zaXplKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisJaW50IGksIGZpbmQ7CisKKwkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZ28gYmV5b25kIG91ciBtYXggc2l6ZS4KKyAgICAgICAgICAgTkI6IHdlIGhhdmUgZGlmZmVyZW50IGxpbWl0cyBmb3IgUkFXIGFuZCBub3JtYWwgbW9kZXMuIEluIGNhc2UKKyAgICAgICAgICAgeW91IGRvbid0IGhhdmUgdGhlIGRlY29tcHJlc3NvciBsb2FkZWQgb3IgdXNlIFJBVyBtb2RlLCAKKyAgICAgICAgICAgdGhlIG1heGltdW0gdmlld2FibGUgc2l6ZSBpcyBzbWFsbGVyLgorICAgICAgICAqLworCWlmIChwZGV2LT52cGFsZXR0ZSA9PSBWSURFT19QQUxFVFRFX1JBVykKKwl7CisJCWlmICh3aWR0aCA+IHBkZXYtPmFic19tYXgueCB8fCBoZWlnaHQgPiBwZGV2LT5hYnNfbWF4LnkpCisJCXsKKwkJCURlYnVnKCJWSURFT19QQUxFVFRFX1JBVzogZ29pbmcgYmV5b25kIGFic19tYXguXG4iKTsKKyAgICAgICAgICAgICAgICAJcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKwl9CisJZWxzZQorCXsKKwkJaWYgKHdpZHRoID4gcGRldi0+dmlld19tYXgueCB8fCBoZWlnaHQgPiBwZGV2LT52aWV3X21heC55KQorCQl7CisJCQlEZWJ1ZygiVklERU9fUEFMRVRURV8gbm90IFJBVzogZ29pbmcgYmV5b25kIHZpZXdfbWF4LlxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwkvKiBGaW5kIHRoZSBsYXJnZXN0IHNpemUgc3VwcG9ydGVkIGJ5IHRoZSBjYW1lcmEgdGhhdCBmaXRzIGludG8gdGhlCisJICAgcmVxdWVzdGVkIHNpemUuCisJICovCisJZmluZCA9IC0xOworCWZvciAoaSA9IDA7IGkgPCBQU1pfTUFYOyBpKyspIHsKKwkJaWYgKHBkZXYtPmltYWdlX21hc2sgJiAoMSA8PCBpKSkgeworCQkJaWYgKHB3Y19pbWFnZV9zaXplc1tpXS54IDw9IHdpZHRoICYmIHB3Y19pbWFnZV9zaXplc1tpXS55IDw9IGhlaWdodCkKKwkJCQlmaW5kID0gaTsKKwkJfQorCX0KKwlyZXR1cm4gZmluZDsKK30KKworLyogaW5pdGlhbGl6ZSB2YXJpYWJsZXMgZGVwZW5kaW5nIG9uIHR5cGUgYW5kIGRlY29tcHJlc3NvciovCit2b2lkIHB3Y19jb25zdHJ1Y3Qoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCit7CisJc3dpdGNoKHBkZXYtPnR5cGUpIHsKKwljYXNlIDY0NToKKwljYXNlIDY0NjoKKwkJcGRldi0+dmlld19taW4ueCA9IDEyODsKKwkJcGRldi0+dmlld19taW4ueSA9ICA5NjsKKwkJcGRldi0+dmlld19tYXgueCA9IDM1MjsKKwkJcGRldi0+dmlld19tYXgueSA9IDI4ODsKKyAgICAgICAgICAgICAgICBwZGV2LT5hYnNfbWF4LnggID0gMzUyOworICAgICAgICAgICAgICAgIHBkZXYtPmFic19tYXgueSAgPSAyODg7CisJCXBkZXYtPmltYWdlX21hc2sgPSAxIDw8IFBTWl9TUUNJRiB8IDEgPDwgUFNaX1FDSUYgfCAxIDw8IFBTWl9DSUY7CisJCXBkZXYtPnZjaW50ZXJmYWNlID0gMjsKKwkJcGRldi0+dmVuZHBvaW50ID0gNDsKKwkJcGRldi0+ZnJhbWVfaGVhZGVyX3NpemUgPSAwOworCQlwZGV2LT5mcmFtZV90cmFpbGVyX3NpemUgPSAwOworCQlicmVhazsKKwljYXNlIDY3NToKKwljYXNlIDY4MDoKKwljYXNlIDY5MDoKKwkJcGRldi0+dmlld19taW4ueCA9IDEyODsKKwkJcGRldi0+dmlld19taW4ueSA9ICA5NjsKKwkJLyogQW50aGlsbCBidWcgIzM4OiBQV0MgYWx3YXlzIHJlcG9ydHMgbWF4IHNpemUsIGV2ZW4gd2l0aG91dCBQV0NYICovCisJCXBkZXYtPnZpZXdfbWF4LnggPSA2NDA7CisJCXBkZXYtPnZpZXdfbWF4LnkgPSA0ODA7CisJCXBkZXYtPmltYWdlX21hc2sgPSAxIDw8IFBTWl9TUUNJRiB8IDEgPDwgUFNaX1FTSUYgfCAxIDw8IFBTWl9RQ0lGIHwgMSA8PCBQU1pfU0lGIHwgMSA8PCBQU1pfQ0lGIHwgMSA8PCBQU1pfVkdBOworICAgICAgICAgICAgICAgIHBkZXYtPmFic19tYXgueCA9IDY0MDsKKyAgICAgICAgICAgICAgICBwZGV2LT5hYnNfbWF4LnkgPSA0ODA7CisJCXBkZXYtPnZjaW50ZXJmYWNlID0gMzsKKwkJcGRldi0+dmVuZHBvaW50ID0gNDsKKwkJcGRldi0+ZnJhbWVfaGVhZGVyX3NpemUgPSAwOworCQlwZGV2LT5mcmFtZV90cmFpbGVyX3NpemUgPSAwOworCQlicmVhazsKKwljYXNlIDcyMDoKKwljYXNlIDczMDoKKwljYXNlIDc0MDoKKwljYXNlIDc1MDoKKwkJcGRldi0+dmlld19taW4ueCA9IDE2MDsKKwkJcGRldi0+dmlld19taW4ueSA9IDEyMDsKKwkJcGRldi0+dmlld19tYXgueCA9IDY0MDsKKwkJcGRldi0+dmlld19tYXgueSA9IDQ4MDsKKwkJcGRldi0+aW1hZ2VfbWFzayA9IDEgPDwgUFNaX1FTSUYgfCAxIDw8IFBTWl9TSUYgfCAxIDw8IFBTWl9WR0E7CisgICAgICAgICAgICAgICAgcGRldi0+YWJzX21heC54ID0gNjQwOworICAgICAgICAgICAgICAgIHBkZXYtPmFic19tYXgueSA9IDQ4MDsKKwkJcGRldi0+dmNpbnRlcmZhY2UgPSAzOworCQlwZGV2LT52ZW5kcG9pbnQgPSA1OworCQlwZGV2LT5mcmFtZV9oZWFkZXJfc2l6ZSA9IFRPVUNBTV9IRUFERVJfU0laRTsKKwkJcGRldi0+ZnJhbWVfdHJhaWxlcl9zaXplID0gVE9VQ0FNX1RSQUlMRVJfU0laRTsKKwkJYnJlYWs7CisJfQorCURlYnVnKCJ0eXBlID0gJWRcbiIscGRldi0+dHlwZSk7CisJcGRldi0+dnBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1lVVjQyMFA7IC8qIGRlZmF1bHQgKi8KKwlwZGV2LT52aWV3X21pbi5zaXplID0gcGRldi0+dmlld19taW4ueCAqIHBkZXYtPnZpZXdfbWluLnk7CisJcGRldi0+dmlld19tYXguc2l6ZSA9IHBkZXYtPnZpZXdfbWF4LnggKiBwZGV2LT52aWV3X21heC55OworCS8qIGxlbmd0aCBvZiBpbWFnZSwgaW4gWVVWIGZvcm1hdDsgYWx3YXlzIGFsbG9jYXRlIGVub3VnaCBtZW1vcnkuICovCisJcGRldi0+bGVuX3Blcl9pbWFnZSA9IChwZGV2LT5hYnNfbWF4LnggKiBwZGV2LT5hYnNfbWF4LnkgKiAzKSAvIDI7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1uYWxhLmggYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLW5hbGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmM1Y2I2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1uYWxhLmgKQEAgLTAsMCArMSw2NiBAQAorICAgLyogU1FDSUYgKi8KKyAgIHsKKyAgICAgIHswLCAwLCB7MHgwNCwgMHgwMSwgMHgwM319LAorICAgICAgezgsIDAsIHsweDA1LCAweDAxLCAweDAzfX0sCisgICAgICB7NywgMCwgezB4MDgsIDB4MDEsIDB4MDN9fSwKKyAgICAgIHs3LCAwLCB7MHgwQSwgMHgwMSwgMHgwM319LAorICAgICAgezYsIDAsIHsweDBDLCAweDAxLCAweDAzfX0sCisgICAgICB7NSwgMCwgezB4MEYsIDB4MDEsIDB4MDN9fSwKKyAgICAgIHs0LCAwLCB7MHgxNCwgMHgwMSwgMHgwM319LAorICAgICAgezMsIDAsIHsweDE4LCAweDAxLCAweDAzfX0sCisgICB9LAorICAgLyogUVNJRiAqLworICAgeworICAgICAgezB9LAorICAgICAgezB9LAorICAgICAgezB9LAorICAgICAgezB9LAorICAgICAgezB9LAorICAgICAgezB9LAorICAgICAgezB9LAorICAgICAgezB9LAorICAgfSwKKyAgIC8qIFFDSUYgKi8KKyAgIHsKKyAgICAgIHswLCAwLCB7MHgwNCwgMHgwMSwgMHgwMn19LAorICAgICAgezgsIDAsIHsweDA1LCAweDAxLCAweDAyfX0sCisgICAgICB7NywgMCwgezB4MDgsIDB4MDEsIDB4MDJ9fSwKKyAgICAgIHs2LCAwLCB7MHgwQSwgMHgwMSwgMHgwMn19LAorICAgICAgezUsIDAsIHsweDBDLCAweDAxLCAweDAyfX0sCisgICAgICB7NCwgMCwgezB4MEYsIDB4MDEsIDB4MDJ9fSwKKyAgICAgIHsxLCAwLCB7MHgxNCwgMHgwMSwgMHgwMn19LAorICAgICAgezEsIDAsIHsweDE4LCAweDAxLCAweDAyfX0sCisgICB9LAorICAgLyogU0lGICovCisgICB7CisgICAgICB7MH0sCisgICAgICB7MH0sCisgICAgICB7MH0sCisgICAgICB7MH0sCisgICAgICB7MH0sCisgICAgICB7MH0sCisgICAgICB7MH0sCisgICAgICB7MH0sCisgICB9LAorICAgLyogQ0lGICovCisgICB7CisgICAgICB7NCwgMCwgezB4MDQsIDB4MDEsIDB4MDF9fSwKKyAgICAgIHs3LCAxLCB7MHgwNSwgMHgwMywgMHgwMX19LAorICAgICAgezYsIDEsIHsweDA4LCAweDAzLCAweDAxfX0sCisgICAgICB7NCwgMSwgezB4MEEsIDB4MDMsIDB4MDF9fSwKKyAgICAgIHszLCAxLCB7MHgwQywgMHgwMywgMHgwMX19LAorICAgICAgezIsIDEsIHsweDBGLCAweDAzLCAweDAxfX0sCisgICAgICB7MH0sCisgICAgICB7MH0sCisgICB9LAorICAgLyogVkdBICovCisgICB7ICAKKyAgICAgIHswfSwKKyAgICAgIHswfSwKKyAgICAgIHswfSwKKyAgICAgIHswfSwKKyAgICAgIHswfSwKKyAgICAgIHswfSwKKyAgICAgIHswfSwKKyAgICAgIHswfSwKKyAgIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLXRpbW9uLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLXRpbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk1MGE0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtdGltb24uYwpAQCAtMCwwICsxLDE0NDYgQEAKKy8qIExpbnV4IGRyaXZlciBmb3IgUGhpbGlwcyB3ZWJjYW0KKyAgIChDKSAyMDA0ICAgICAgTHVjIFNhaWxsYXJkIChsdWNAc2FpbGxhcmQub3JnKQorCisgICBOT1RFOiB0aGlzIHZlcnNpb24gb2YgcHdjIGlzIGFuIHVub2ZmaWNpYWwgKG1vZGlmaWVkKSByZWxlYXNlIG9mIHB3YyAmIHBjd3gKKyAgIGRyaXZlciBhbmQgdGh1cyBtYXkgaGF2ZSBidWdzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLgorICAgUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgYW5kIHN1cHBvcnQgcmVxdWVzdHMgdG8gPGx1Y0BzYWlsbGFyZC5vcmc+LgorICAgVGhlIGRlY29tcHJlc3Npb24gcm91dGluZXMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGJ5IHJldmVyc2UtZW5naW5lZXJpbmcgdGhlCisgICBOZW1vc29mdCBiaW5hcnkgcHdjeCBtb2R1bGUuIENhdmVhdCBlbXB0b3IuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworCisvKiBUaGlzIHRhYmxlcyBjb250YWlucyBlbnRyaWVzIGZvciB0aGUgNjc1LzY4MC82OTAgKFRpbW9uKSBjYW1lcmEsIHdpdGgKKyAgIDQgZGlmZmVyZW50IHF1YWxpdGllcyAobm8gY29tcHJlc3Npb24sIGxvdywgbWVkaXVtLCBoaWdoKS4KKyAgIEl0IGxpc3RzIHRoZSBiYW5kd2lkdGggcmVxdWlyZW1lbnRzIGZvciBzYWlkIG1vZGUgYnkgaXRzIGFsdGVybmF0ZSBpbnRlcmZhY2UKKyAgIG51bWJlci4gQW4gYWx0ZXJuYXRlIG9mIDAgbWVhbnMgdGhhdCB0aGUgbW9kZSBpcyB1bmF2YWlsYWJsZS4KKworICAgVGhlcmUgYXJlIDYgKiA0ICogNCBlbnRyaWVzOgorICAgICA2IGRpZmZlcmVudCByZXNvbHV0aW9ucyBzdWJxY2lmLCBxc2lmLCBxY2lmLCBzaWYsIGNpZiwgdmdhCisgICAgIDYgZnJhbWVyYXRlczogNSwgMTAsIDE1LCAyMCwgMjUsIDMwCisgICAgIDQgY29tcHJlc3Npb24gbW9kaTogbm9uZSwgbG93LCBtZWRpdW0sIGhpZ2gKKworICAgV2hlbiBhbiB1bmNvbXByZXNzZWQgbW9kZSBpcyBub3QgYXZhaWxhYmxlLCB0aGUgbmV4dCBhdmFpbGFibGUgY29tcHJlc3NlZCBtb2RlCisgICB3aWxsIGJlIGNob3NlbiAodW5sZXNzIHRoZSBkZWNvbXByZXNzb3IgaXMgYWJzZW50KS4gU29tZXRpbWVzIHRoZXJlIGFyZSBvbmx5CisgICAxIG9yIDIgY29tcHJlc3NlZCBtb2RlcyBhdmFpbGFibGU7IGluIHRoYXQgY2FzZSBlbnRyaWVzIGFyZSBkdXBsaWNhdGVkLgorKi8KKworI2luY2x1ZGUgInB3Yy10aW1vbi5oIgorCitjb25zdCBzdHJ1Y3QgVGltb25fdGFibGVfZW50cnkgVGltb25fdGFibGVbUFNaX01BWF1bNl1bNF0gPQoreworICAgLyogU1FDSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MSwgMTQwLCAgICAwLCB7MHgwNSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHg4QywgMHhGQywgMHg4MCwgMHgwMn19LAorICAgICAgICAgezEsIDE0MCwgICAgMCwgezB4MDUsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4OEMsIDB4RkMsIDB4ODAsIDB4MDJ9fSwKKyAgICAgICAgIHsxLCAxNDAsICAgIDAsIHsweDA1LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDhDLCAweEZDLCAweDgwLCAweDAyfX0sCisgICAgICAgICB7MSwgMTQwLCAgICAwLCB7MHgwNSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHg4QywgMHhGQywgMHg4MCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDEwIGZwcyAqLworICAgICAgeworICAgICAgICAgezIsIDI4MCwgICAgMCwgezB4MDQsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MTgsIDB4QTksIDB4ODAsIDB4MDJ9fSwKKyAgICAgICAgIHsyLCAyODAsICAgIDAsIHsweDA0LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDE4LCAweEE5LCAweDgwLCAweDAyfX0sCisgICAgICAgICB7MiwgMjgwLCAgICAwLCB7MHgwNCwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHgxOCwgMHhBOSwgMHg4MCwgMHgwMn19LAorICAgICAgICAgezIsIDI4MCwgICAgMCwgezB4MDQsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MTgsIDB4QTksIDB4ODAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAxNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHszLCA0MTAsICAgIDAsIHsweDAzLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDlBLCAweDcxLCAweDgwLCAweDAyfX0sCisgICAgICAgICB7MywgNDEwLCAgICAwLCB7MHgwMywgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHg5QSwgMHg3MSwgMHg4MCwgMHgwMn19LAorICAgICAgICAgezMsIDQxMCwgICAgMCwgezB4MDMsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4OUEsIDB4NzEsIDB4ODAsIDB4MDJ9fSwKKyAgICAgICAgIHszLCA0MTAsICAgIDAsIHsweDAzLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDlBLCAweDcxLCAweDgwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisgICAgICAgICB7NCwgNTU5LCAgICAwLCB7MHgwMiwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHgyRiwgMHg1NiwgMHg4MCwgMHgwMn19LAorICAgICAgICAgezQsIDU1OSwgICAgMCwgezB4MDIsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MkYsIDB4NTYsIDB4ODAsIDB4MDJ9fSwKKyAgICAgICAgIHs0LCA1NTksICAgIDAsIHsweDAyLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDJGLCAweDU2LCAweDgwLCAweDAyfX0sCisgICAgICAgICB7NCwgNTU5LCAgICAwLCB7MHgwMiwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHgyRiwgMHg1NiwgMHg4MCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDI1IGZwcyAqLworICAgICAgeworICAgICAgICAgezUsIDY1OSwgICAgMCwgezB4MDEsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4OTMsIDB4NDYsIDB4ODAsIDB4MDJ9fSwKKyAgICAgICAgIHs1LCA2NTksICAgIDAsIHsweDAxLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDkzLCAweDQ2LCAweDgwLCAweDAyfX0sCisgICAgICAgICB7NSwgNjU5LCAgICAwLCB7MHgwMSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHg5MywgMHg0NiwgMHg4MCwgMHgwMn19LAorICAgICAgICAgezUsIDY1OSwgICAgMCwgezB4MDEsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4OTMsIDB4NDYsIDB4ODAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAzMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHs3LCA4MzgsICAgIDAsIHsweDAwLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDQ2LCAweDNCLCAweDgwLCAweDAyfX0sCisgICAgICAgICB7NywgODM4LCAgICAwLCB7MHgwMCwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHg0NiwgMHgzQiwgMHg4MCwgMHgwMn19LAorICAgICAgICAgezcsIDgzOCwgICAgMCwgezB4MDAsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NDYsIDB4M0IsIDB4ODAsIDB4MDJ9fSwKKyAgICAgICAgIHs3LCA4MzgsICAgIDAsIHsweDAwLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDQ2LCAweDNCLCAweDgwLCAweDAyfX0sCisgICAgICB9LAorICAgfSwKKyAgIC8qIFFTSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MSwgMTQ2LCAgICAwLCB7MHgyRCwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg5MiwgMHhGQywgMHhDMCwgMHgwMn19LAorICAgICAgICAgezEsIDE0NiwgICAgMCwgezB4MkQsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4OTIsIDB4RkMsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsxLCAxNDYsICAgIDAsIHsweDJELCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDkyLCAweEZDLCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MSwgMTQ2LCAgICAwLCB7MHgyRCwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg5MiwgMHhGQywgMHhDMCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDEwIGZwcyAqLworICAgICAgeworICAgICAgICAgezIsIDI5MSwgICAgMCwgezB4MkMsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MjMsIDB4QTEsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsxLCAxOTEsICA2MzAsIHsweDJDLCAweEY0LCAweDA1LCAweDEzLCAweEE5LCAweDEyLCAweEUxLCAweDE3LCAweDA4LCAweEJGLCAweEY0LCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MSwgMTkxLCAgNjMwLCB7MHgyQywgMHhGNCwgMHgwNSwgMHgxMywgMHhBOSwgMHgxMiwgMHhFMSwgMHgxNywgMHgwOCwgMHhCRiwgMHhGNCwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezEsIDE5MSwgIDYzMCwgezB4MkMsIDB4RjQsIDB4MDUsIDB4MTMsIDB4QTksIDB4MTIsIDB4RTEsIDB4MTcsIDB4MDgsIDB4QkYsIDB4RjQsIDB4QzAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAxNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHszLCA0MzcsICAgIDAsIHsweDJCLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweEI1LCAweDZELCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MiwgMjkxLCAgNjQwLCB7MHgyQiwgMHhGNCwgMHgwNSwgMHgxMywgMHhGNywgMHgxMywgMHgyRiwgMHgxMywgMHgwOCwgMHgyMywgMHhBMSwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezIsIDI5MSwgIDY0MCwgezB4MkIsIDB4RjQsIDB4MDUsIDB4MTMsIDB4RjcsIDB4MTMsIDB4MkYsIDB4MTMsIDB4MDgsIDB4MjMsIDB4QTEsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsxLCAxOTEsICA0MjAsIHsweDJCLCAweEY0LCAweDBELCAweDBELCAweDFCLCAweDBDLCAweDUzLCAweDFFLCAweDA4LCAweEJGLCAweEY0LCAweEMwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisgICAgICAgICB7NCwgNTg4LCAgICAwLCB7MHgyQSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0QywgMHg1MiwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezMsIDQ0NywgIDczMCwgezB4MkEsIDB4RjQsIDB4MDUsIDB4MTYsIDB4QzksIDB4MTYsIDB4MDEsIDB4MEUsIDB4MTgsIDB4QkYsIDB4NjksIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsyLCAyOTIsICA0NzYsIHsweDJBLCAweEY0LCAweDBELCAweDBFLCAweEQ4LCAweDBFLCAweDEwLCAweDE5LCAweDE4LCAweDI0LCAweEExLCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MSwgMTkyLCAgMzEyLCB7MHgyQSwgMHhGNCwgMHgxRCwgMHgwOSwgMHhCMywgMHgwOCwgMHhFQiwgMHgxRSwgMHgxOCwgMHhDMCwgMHhGNCwgMHhDMCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDI1IGZwcyAqLworICAgICAgeworICAgICAgICAgezUsIDcwMywgICAgMCwgezB4MjksIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4QkYsIDB4NDIsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHszLCA0NDcsICA2MTAsIHsweDI5LCAweEY0LCAweDA1LCAweDEzLCAweDBCLCAweDEyLCAweDQzLCAweDE0LCAweDE4LCAweEJGLCAweDY5LCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MiwgMjkyLCAgMzk4LCB7MHgyOSwgMHhGNCwgMHgwRCwgMHgwQywgMHg2QywgMHgwQiwgMHhBNCwgMHgxRSwgMHgxOCwgMHgyNCwgMHhBMSwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezEsIDE5MiwgIDI2MiwgezB4MjksIDB4RjQsIDB4MjUsIDB4MDgsIDB4MjMsIDB4MDcsIDB4NUIsIDB4MUUsIDB4MTgsIDB4QzAsIDB4RjQsIDB4QzAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAzMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHs4LCA4NzMsICAgIDAsIHsweDI4LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDY5LCAweDM3LCAweEMwLCAweDAyfX0sCisgICAgICAgICB7NSwgNzA0LCAgNzc0LCB7MHgyOCwgMHhGNCwgMHgwNSwgMHgxOCwgMHgyMSwgMHgxNywgMHg1OSwgMHgwRiwgMHgxOCwgMHhDMCwgMHg0MiwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezMsIDQ0OCwgIDQ5MiwgezB4MjgsIDB4RjQsIDB4MDUsIDB4MEYsIDB4NUQsIDB4MEUsIDB4OTUsIDB4MTUsIDB4MTgsIDB4QzAsIDB4NjksIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsyLCAyOTEsICAzMjAsIHsweDI4LCAweEY0LCAweDFELCAweDA5LCAweEZCLCAweDA5LCAweDMzLCAweDFFLCAweDE4LCAweDIzLCAweEExLCAweEMwLCAweDAyfX0sCisgICAgICB9LAorICAgfSwKKyAgIC8qIFFDSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MSwgMTkzLCAgICAwLCB7MHgwRCwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHhDMSwgMHhGNCwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezEsIDE5MywgICAgMCwgezB4MEQsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4QzEsIDB4RjQsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsxLCAxOTMsICAgIDAsIHsweDBELCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweEMxLCAweEY0LCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MSwgMTkzLCAgICAwLCB7MHgwRCwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHhDMSwgMHhGNCwgMHhDMCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDEwIGZwcyAqLworICAgICAgeworICAgICAgICAgezMsIDM4NSwgICAgMCwgezB4MEMsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4ODEsIDB4NzksIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsyLCAyOTEsICA4MDAsIHsweDBDLCAweEY0LCAweDA1LCAweDE4LCAweEY0LCAweDE4LCAweDE4LCAweDExLCAweDA4LCAweDIzLCAweEExLCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MiwgMjkxLCAgODAwLCB7MHgwQywgMHhGNCwgMHgwNSwgMHgxOCwgMHhGNCwgMHgxOCwgMHgxOCwgMHgxMSwgMHgwOCwgMHgyMywgMHhBMSwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezEsIDE5NCwgIDUzMiwgezB4MEMsIDB4RjQsIDB4MDUsIDB4MTAsIDB4OUEsIDB4MEYsIDB4QkUsIDB4MUIsIDB4MDgsIDB4QzIsIDB4RjAsIDB4QzAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAxNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHs0LCA1NzcsICAgIDAsIHsweDBCLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDQxLCAweDUyLCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MywgNDQ3LCAgODE4LCB7MHgwQiwgMHhGNCwgMHgwNSwgMHgxOSwgMHg4OSwgMHgxOCwgMHhBRCwgMHgwRiwgMHgxMCwgMHhCRiwgMHg2OSwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezIsIDI5MiwgIDUzNCwgezB4MEIsIDB4RjQsIDB4MDUsIDB4MTAsIDB4QTMsIDB4MEYsIDB4QzcsIDB4MTksIDB4MTAsIDB4MjQsIDB4QTEsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsxLCAxOTUsICAzNTYsIHsweDBCLCAweEY0LCAweDE1LCAweDBCLCAweDExLCAweDBBLCAweDM1LCAweDFFLCAweDEwLCAweEMzLCAweEYwLCAweEMwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisgICAgICAgICB7NiwgNzc2LCAgICAwLCB7MHgwQSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwOCwgMHgzRiwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezQsIDU5MSwgIDgwNCwgezB4MEEsIDB4RjQsIDB4MDUsIDB4MTksIDB4MUUsIDB4MTgsIDB4NDIsIDB4MEYsIDB4MTgsIDB4NEYsIDB4NEUsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHszLCA0NDcsICA2MDgsIHsweDBBLCAweEY0LCAweDA1LCAweDEyLCAweEZELCAweDEyLCAweDIxLCAweDE1LCAweDE4LCAweEJGLCAweDY5LCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MiwgMjkxLCAgMzk2LCB7MHgwQSwgMHhGNCwgMHgxNSwgMHgwQywgMHg1RSwgMHgwQiwgMHg4MiwgMHgxRSwgMHgxOCwgMHgyMywgMHhBMSwgMHhDMCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDI1IGZwcyAqLworICAgICAgeworICAgICAgICAgezksIDkyOCwgICAgMCwgezB4MDksIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4QTAsIDB4MzMsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHs1LCA3MDMsICA4MDAsIHsweDA5LCAweEY0LCAweDA1LCAweDE4LCAweEY0LCAweDE4LCAweDE4LCAweDEwLCAweDE4LCAweEJGLCAweDQyLCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MywgNDQ3LCAgNTA4LCB7MHgwOSwgMHhGNCwgMHgwRCwgMHgwRiwgMHhEMiwgMHgwRSwgMHhGNiwgMHgxQiwgMHgxOCwgMHhCRiwgMHg2OSwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezIsIDI5MiwgIDMzMiwgezB4MDksIDB4RjQsIDB4MUQsIDB4MEEsIDB4NUEsIDB4MDksIDB4N0UsIDB4MUUsIDB4MTgsIDB4MjQsIDB4QTEsIDB4QzAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAzMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezksIDk1NiwgIDg3NiwgezB4MDgsIDB4RjQsIDB4MDUsIDB4MUIsIDB4NTgsIDB4MUEsIDB4N0MsIDB4MEUsIDB4MjAsIDB4QkMsIDB4MzMsIDB4MTAsIDB4MDJ9fSwKKyAgICAgICAgIHs0LCA1OTIsICA1NDIsIHsweDA4LCAweEY0LCAweDA1LCAweDEwLCAweEU0LCAweDEwLCAweDA4LCAweDE3LCAweDIwLCAweDUwLCAweDRFLCAweDEwLCAweDAyfX0sCisgICAgICAgICB7MiwgMjkxLCAgMjY2LCB7MHgwOCwgMHhGNCwgMHgyNSwgMHgwOCwgMHg0OCwgMHgwNywgMHg2QywgMHgxRSwgMHgyMCwgMHgyMywgMHhBMSwgMHgxMCwgMHgwMn19LAorICAgICAgfSwKKyAgIH0sCisgICAvKiBTSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisgICAgICAgICB7NCwgNTgyLCAgICAwLCB7MHgzNSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0NiwgMHg1MiwgMHg2MCwgMHgwMn19LAorICAgICAgICAgezMsIDM4NywgMTI3NiwgezB4MzUsIDB4RjQsIDB4MDUsIDB4MjcsIDB4RDgsIDB4MjYsIDB4NDgsIDB4MDMsIDB4MTAsIDB4ODMsIDB4NzksIDB4NjAsIDB4MDJ9fSwKKyAgICAgICAgIHsyLCAyOTEsICA5NjAsIHsweDM1LCAweEY0LCAweDBELCAweDFELCAweEYyLCAweDFDLCAweDYyLCAweDA0LCAweDEwLCAweDIzLCAweEExLCAweDYwLCAweDAyfX0sCisgICAgICAgICB7MSwgMTkxLCAgNjMwLCB7MHgzNSwgMHhGNCwgMHgxRCwgMHgxMywgMHhBOSwgMHgxMiwgMHgxOSwgMHgwNSwgMHgwOCwgMHhCRiwgMHhGNCwgMHg2MCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDEwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7NiwgNzc1LCAxMjc4LCB7MHgzNCwgMHhGNCwgMHgwNSwgMHgyNywgMHhFOCwgMHgyNiwgMHg1OCwgMHgwNSwgMHgzMCwgMHgwNywgMHgzRiwgMHgxMCwgMHgwMn19LAorICAgICAgICAgezMsIDQ0NywgIDczNiwgezB4MzQsIDB4RjQsIDB4MTUsIDB4MTYsIDB4RkIsIDB4MTUsIDB4NkIsIDB4MDUsIDB4MTgsIDB4QkYsIDB4NjksIDB4MTAsIDB4MDJ9fSwKKyAgICAgICAgIHsyLCAyOTEsICA0ODAsIHsweDM0LCAweEY0LCAweDJELCAweDBFLCAweEY5LCAweDBELCAweDY5LCAweDA5LCAweDE4LCAweDIzLCAweEExLCAweDEwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMTUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHs5LCA5NTUsIDEwNTAsIHsweDMzLCAweEY0LCAweDA1LCAweDIwLCAweENGLCAweDFGLCAweDNGLCAweDA2LCAweDQ4LCAweEJCLCAweDMzLCAweDEwLCAweDAyfX0sCisgICAgICAgICB7NCwgNTkxLCAgNjUwLCB7MHgzMywgMHhGNCwgMHgxNSwgMHgxNCwgMHg0NCwgMHgxMiwgMHhCNCwgMHgwOCwgMHgzMCwgMHg0RiwgMHg0RSwgMHgxMCwgMHgwMn19LAorICAgICAgICAgezMsIDQ0OCwgIDQ5MiwgezB4MzMsIDB4RjQsIDB4MjUsIDB4MEYsIDB4NTIsIDB4MEQsIDB4QzIsIDB4MDksIDB4MjgsIDB4QzAsIDB4NjksIDB4MTAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAyMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezksIDk1OCwgIDc4MiwgezB4MzIsIDB4RjQsIDB4MEQsIDB4MTgsIDB4NkEsIDB4MTYsIDB4REEsIDB4MEIsIDB4NTgsIDB4QkUsIDB4MzMsIDB4RDAsIDB4MDJ9fSwKKyAgICAgICAgIHs1LCA3MDMsICA1NzQsIHsweDMyLCAweEY0LCAweDFELCAweDExLCAweEU3LCAweDEwLCAweDU3LCAweDBCLCAweDQwLCAweEJGLCAweDQyLCAweEQwLCAweDAyfX0sCisgICAgICAgICB7MywgNDQ2LCAgMzY0LCB7MHgzMiwgMHhGNCwgMHgzRCwgMHgwQiwgMHg1QywgMHgwOSwgMHhDQywgMHgwRSwgMHgzMCwgMHhCRSwgMHg2OSwgMHhEMCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDI1IGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7OSwgOTU4LCAgNjU0LCB7MHgzMSwgMHhGNCwgMHgxNSwgMHgxNCwgMHg2NiwgMHgxMiwgMHhENiwgMHgwQiwgMHg1MCwgMHhCRSwgMHgzMywgMHg5MCwgMHgwMn19LAorICAgICAgICAgezYsIDc3NiwgIDUzMCwgezB4MzEsIDB4RjQsIDB4MjUsIDB4MTAsIDB4OEMsIDB4MEUsIDB4RkMsIDB4MEMsIDB4NDgsIDB4MDgsIDB4M0YsIDB4OTAsIDB4MDJ9fSwKKyAgICAgICAgIHs0LCA1OTIsICA0MDQsIHsweDMxLCAweEY0LCAweDM1LCAweDBDLCAweDk2LCAweDBCLCAweDA2LCAweDBCLCAweDM4LCAweDUwLCAweDRFLCAweDkwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMzAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHs5LCA5NTcsICA1MjYsIHsweDMwLCAweEY0LCAweDI1LCAweDEwLCAweDY4LCAweDBFLCAweEQ4LCAweDBELCAweDU4LCAweEJELCAweDMzLCAweDYwLCAweDAyfX0sCisgICAgICAgICB7NiwgNzc1LCAgNDI2LCB7MHgzMCwgMHhGNCwgMHgzNSwgMHgwRCwgMHg0OCwgMHgwQiwgMHhCOCwgMHgwRiwgMHg1MCwgMHgwNywgMHgzRiwgMHg2MCwgMHgwMn19LAorICAgICAgICAgezQsIDU5MCwgIDMyNCwgezB4MzAsIDB4N0EsIDB4NEIsIDB4MEEsIDB4MUMsIDB4MDgsIDB4QjQsIDB4MEUsIDB4NDAsIDB4NEUsIDB4NTIsIDB4NjAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICB9LAorICAgLyogQ0lGICovCisgICB7CisgICAgICAvKiA1IGZwcyAqLworICAgICAgeworICAgICAgICAgezYsIDc3MSwgICAgMCwgezB4MTUsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDMsIDB4M0YsIDB4ODAsIDB4MDJ9fSwKKyAgICAgICAgIHs0LCA0NjUsIDEyNzgsIHsweDE1LCAweEY0LCAweDA1LCAweDI3LCAweEVFLCAweDI2LCAweDM2LCAweDAzLCAweDE4LCAweEQxLCAweDY1LCAweDgwLCAweDAyfX0sCisgICAgICAgICB7MiwgMjkxLCAgODAwLCB7MHgxNSwgMHhGNCwgMHgxNSwgMHgxOCwgMHhGNCwgMHgxNywgMHgzQywgMHgwNSwgMHgxOCwgMHgyMywgMHhBMSwgMHg4MCwgMHgwMn19LAorICAgICAgICAgezEsIDE5MywgIDUyOCwgezB4MTUsIDB4RjQsIDB4MkQsIDB4MTAsIDB4N0UsIDB4MEUsIDB4QzYsIDB4MEEsIDB4MTgsIDB4QzEsIDB4RjQsIDB4ODAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAxMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezksIDkzMiwgMTI3OCwgezB4MTQsIDB4RjQsIDB4MDUsIDB4MjcsIDB4RUUsIDB4MjYsIDB4MzYsIDB4MDQsIDB4MzAsIDB4QTQsIDB4MzMsIDB4MTAsIDB4MDJ9fSwKKyAgICAgICAgIHs0LCA1OTEsICA4MTIsIHsweDE0LCAweEY0LCAweDE1LCAweDE5LCAweDU2LCAweDE3LCAweDlFLCAweDA2LCAweDI4LCAweDRGLCAweDRFLCAweDEwLCAweDAyfX0sCisgICAgICAgICB7MiwgMjkxLCAgNDAwLCB7MHgxNCwgMHhGNCwgMHgzRCwgMHgwQywgMHg3QSwgMHgwQSwgMHhDMiwgMHgwRSwgMHgyOCwgMHgyMywgMHhBMSwgMHgxMCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDE1IGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7OSwgOTU2LCAgODc2LCB7MHgxMywgMHhGNCwgMHgwRCwgMHgxQiwgMHg1OCwgMHgxOSwgMHhBMCwgMHgwNSwgMHgzOCwgMHhCQywgMHgzMywgMHg2MCwgMHgwMn19LAorICAgICAgICAgezUsIDcwMywgIDY0NCwgezB4MTMsIDB4RjQsIDB4MUQsIDB4MTQsIDB4MUMsIDB4MTIsIDB4NjQsIDB4MDgsIDB4MzgsIDB4QkYsIDB4NDIsIDB4NjAsIDB4MDJ9fSwKKyAgICAgICAgIHszLCA0NDgsICA0MTAsIHsweDEzLCAweEY0LCAweDNELCAweDBDLCAweEM0LCAweDBCLCAweDBDLCAweDBFLCAweDM4LCAweEMwLCAweDY5LCAweDYwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHs5LCA5NTYsICA2NTAsIHsweDEyLCAweEY0LCAweDFELCAweDE0LCAweDRBLCAweDEyLCAweDkyLCAweDA5LCAweDQ4LCAweEJDLCAweDMzLCAweDEwLCAweDAzfX0sCisgICAgICAgICB7NiwgNzc2LCAgNTI4LCB7MHgxMiwgMHhGNCwgMHgyRCwgMHgxMCwgMHg3RSwgMHgwRSwgMHhDNiwgMHgwQSwgMHg0MCwgMHgwOCwgMHgzRiwgMHgxMCwgMHgwM319LAorICAgICAgICAgezQsIDU5MSwgIDQwMiwgezB4MTIsIDB4RjQsIDB4M0QsIDB4MEMsIDB4OEYsIDB4MEEsIDB4RDcsIDB4MEUsIDB4NDAsIDB4NEYsIDB4NEUsIDB4MTAsIDB4MDN9fSwKKyAgICAgIH0sCisgICAgICAvKiAyNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezksIDk1NiwgIDU0NCwgezB4MTEsIDB4RjQsIDB4MjUsIDB4MTAsIDB4RjQsIDB4MEYsIDB4M0MsIDB4MEEsIDB4NDgsIDB4QkMsIDB4MzMsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHs3LCA4NDAsICA0NzgsIHsweDExLCAweEY0LCAweDJELCAweDBFLCAweEVCLCAweDBELCAweDMzLCAweDBCLCAweDQ4LCAweDQ4LCAweDNCLCAweEMwLCAweDAyfX0sCisgICAgICAgICB7NSwgNzAzLCAgNDAwLCB7MHgxMSwgMHhGNCwgMHgzRCwgMHgwQywgMHg3QSwgMHgwQSwgMHhDMiwgMHgwRSwgMHg0OCwgMHhCRiwgMHg0MiwgMHhDMCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDMwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7OSwgOTU2LCAgNDM4LCB7MHgxMCwgMHhGNCwgMHgzNSwgMHgwRCwgMHhBQywgMHgwQiwgMHhGNCwgMHgwRCwgMHg1MCwgMHhCQywgMHgzMywgMHgxMCwgMHgwMn19LAorICAgICAgICAgezcsIDgzOCwgIDM4NCwgezB4MTAsIDB4RjQsIDB4NDUsIDB4MEIsIDB4RkQsIDB4MEEsIDB4NDUsIDB4MEYsIDB4NTAsIDB4NDYsIDB4M0IsIDB4MTAsIDB4MDJ9fSwKKyAgICAgICAgIHs2LCA3NzMsICAzNTQsIHsweDEwLCAweDdBLCAweDRCLCAweDBCLCAweDBDLCAweDA5LCAweDgwLCAweDEwLCAweDUwLCAweDA1LCAweDNGLCAweDEwLCAweDAyfX0sCisgICAgICB9LAorICAgfSwKKyAgIC8qIFZHQSAqLworICAgeworICAgICAgLyogNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezYsIDc3MywgMTI3MiwgezB4MUQsIDB4RjQsIDB4MTUsIDB4MjcsIDB4QjYsIDB4MjQsIDB4OTYsIDB4MDIsIDB4MzAsIDB4MDUsIDB4M0YsIDB4MTAsIDB4MDJ9fSwKKyAgICAgICAgIHs0LCA1OTIsICA5NzYsIHsweDFELCAweEY0LCAweDI1LCAweDFFLCAweDc4LCAweDFCLCAweDU4LCAweDAzLCAweDMwLCAweDUwLCAweDRFLCAweDEwLCAweDAyfX0sCisgICAgICAgICB7MywgNDQ4LCAgNzM4LCB7MHgxRCwgMHhGNCwgMHgzRCwgMHgxNywgMHgwQywgMHgxMywgMHhFQywgMHgwNCwgMHgzMCwgMHhDMCwgMHg2OSwgMHgxMCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDEwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7OSwgOTU2LCAgNzg4LCB7MHgxQywgMHhGNCwgMHgzNSwgMHgxOCwgMHg5QywgMHgxNSwgMHg3QywgMHgwMywgMHg0OCwgMHhCQywgMHgzMywgMHgxMCwgMHgwMn19LAorICAgICAgICAgezYsIDc3NiwgIDY0MCwgezB4MUMsIDB4N0EsIDB4NTMsIDB4MTMsIDB4RkMsIDB4MTEsIDB4MkMsIDB4MDQsIDB4NDgsIDB4MDgsIDB4M0YsIDB4MTAsIDB4MDJ9fSwKKyAgICAgICAgIHs0LCA1OTIsICA0ODgsIHsweDFDLCAweDdBLCAweDZCLCAweDBGLCAweDNDLCAweDBDLCAweDZDLCAweDA2LCAweDQ4LCAweDUwLCAweDRFLCAweDEwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMTUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHs5LCA5NTcsICA1MjYsIHsweDFCLCAweDdBLCAweDYzLCAweDEwLCAweDY4LCAweDBELCAweDk4LCAweDA2LCAweDU4LCAweEJELCAweDMzLCAweDgwLCAweDAyfX0sCisgICAgICAgICB7OSwgOTU3LCAgNTI2LCB7MHgxQiwgMHg3QSwgMHg2MywgMHgxMCwgMHg2OCwgMHgwRCwgMHg5OCwgMHgwNiwgMHg1OCwgMHhCRCwgMHgzMywgMHg4MCwgMHgwMn19LAorICAgICAgICAgezgsIDg5NSwgIDQ5MiwgezB4MUIsIDB4N0EsIDB4NkIsIDB4MEYsIDB4NUQsIDB4MEMsIDB4OEQsIDB4MDYsIDB4NTgsIDB4N0YsIDB4MzcsIDB4ODAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAyMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDI1IGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgICAgLyogMzAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICB9LAorfTsKKworLyoKKyAqIDE2IHZlcnNpb25zOgorICogICAyIHRhYmxlcyAgKG9uZSBmb3IgWSwgYW5kIG9uZSBmb3IgVSZWKQorICogICAxNiBsZXZlbHMgb2YgZGV0YWlscyBwZXIgdGFibGVzCisgKiAgIDggYmxvY3MKKyAqLworCitjb25zdCB1bnNpZ25lZCBpbnQgVGltb25Sb21UYWJsZSBbMTZdWzJdWzE2XVs4XSA9ICAKK3sKKyB7IC8qIHZlcnNpb24gMCAqLworICB7IC8qIHZlcnNpb24gMCwgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMDEsCisgICAgMHgwMDAwMDAwMSwweDAwMDAwMDAxLDB4MDAwMDAwMDEsMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAwMSwKKyAgICAweDAwMDAwMDAxLDB4MDAwMDAwMDksMHgwMDAwMDAwOSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwOSwweDAwMDAwMDAxLAorICAgIDB4MDAwMDAwMDksMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA5LDB4MDAwMDAwMDksCisgICAgMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwNDksMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDksMHgwMDAwMDAwOSwKKyAgICAweDAwMDAwMDA5LDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwOSwweDAwMDAwMDA5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMTI1MiwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMTI0YSwweDAwMDAxMjUyLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiAwLCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAwMSwKKyAgICAweDAwMDAwMDAxLDB4MDAwMDAwMDEsMHgwMDAwMDAwMCwweDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwOSwweDAwMDAwMDAxLAorICAgIDB4MDAwMDAwMDEsMHgwMDAwMDAwOSwweDAwMDAwMDAwLDB4MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA5LDB4MDAwMDAwMDksCisgICAgMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDksMHgwMDAwMDAwOSwKKyAgICAweDAwMDAwMDA5LDB4MDAwMDAwMDksMHgwMDAwMDAwMSwweDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDA5LAorICAgIDB4MDAwMDAwMDksMHgwMDAwMDA0OSwweDAwMDAwMDAxLDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwMDksCisgICAgMHgwMDAwMDAwOSwweDAwMDAwMDQ5LDB4MDAwMDAwMDEsMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDAwOSwweDAwMDAwMDAxfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDA5LDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwMDksMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDAwOSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDI0OSwweDAwMDAwMDQ5LDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMjQ5LDB4MDAwMDAwNDksMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDA0OSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAwMjRhLDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0sCisgeyAvKiB2ZXJzaW9uIDEgKi8KKyAgeyAvKiB2ZXJzaW9uIDEsIHBhc3NlcyAwICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDAxLAorICAgIDB4MDAwMDAwMDEsMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA5LDB4MDAwMDAwMDksCisgICAgMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDksMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDksMHgwMDAwMDAwOSwKKyAgICAweDAwMDAwMDA5LDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwOSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9LAorICB7IC8qIHZlcnNpb24gMSwgcGFzc2VzIDEgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA5LDB4MDAwMDAwMDksCisgICAgMHgwMDAwMDAwOSwweDAwMDAwMDAxLDB4MDAwMDAwMDEsMHgwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDksMHgwMDAwMDAwOSwKKyAgICAweDAwMDAwMDA5LDB4MDAwMDAwMDksMHgwMDAwMDAwMSwweDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDAwOSwweDAwMDAwMDAxLDB4MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwMDEsMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDAwOSwweDAwMDAwMDAxfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDI0OSwweDAwMDAwMDA5LDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAwMDksMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDA0OSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMTI0YSwweDAwMDAwMDQ5LDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAxMjRhLDB4MDAwMDAwNDksMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDEyNGEsMHgwMDAwMDI0YSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAwMjRhLDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDAyNGEsMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyNTIsMHgwMDAwMTI1MiwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0KKyB9LAorIHsgLyogdmVyc2lvbiAyICovCisgIHsgLyogdmVyc2lvbiAyLCBwYXNzZXMgMCAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDksMHgwMDAwMDAwOSwKKyAgICAweDAwMDAwMDA5LDB4MDAwMDAwMDksMHgwMDAwMDAwOSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMTI0YSwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDkyNTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfSwKKyAgeyAvKiB2ZXJzaW9uIDIsIHBhc3NlcyAxICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDA5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDAwOSwweDAwMDAwMDAxLDB4MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAwNDksMHgwMDAwMDI0YSwweDAwMDAwMDAxfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAwMjRhLDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDAyNGEsMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyNTIsMHgwMDAwMTI1MiwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwOTI5MiwweDAwMDAxMjUyLDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDA5MjkyLDB4MDAwMDEyNTIsMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwMTI1MiwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDAxMjUyLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTQ5MiwweDAwMDA5NDkzLDB4MDAwMDkyOTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9CisgfSwKKyB7IC8qIHZlcnNpb24gMyAqLworICB7IC8qIHZlcnNpb24gMywgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMTI1MiwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMTI0YSwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwOTI1MiwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwYTQ5YiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjUyLAorICAgIDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAxMjRkYiwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDEyNGRiLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNGRiLDB4MDAwMTM2ZTQsMHgwMDAxYjcyNSwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiAzLCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDAwMSwweDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMDQ5LDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwMTI1MiwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTQ5MywweDAwMDA5MjkyLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5NDkzLDB4MDAwMDkyOTIsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5MywweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTQ5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTMsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI1MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwOTQ5MywweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5MjkyLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0sCisgeyAvKiB2ZXJzaW9uIDQgKi8KKyAgeyAvKiB2ZXJzaW9uIDQsIHBhc3NlcyAwICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMTI0YSwweDAwMDAxMjUyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwYTQ5YiwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjUyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDEyNGRiLDB4MDAwMTI0ZGIsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjUyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWI3MjUsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9LAorICB7IC8qIHZlcnNpb24gNCwgcGFzc2VzIDEgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwMTI1MiwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDA5MjkyLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDBhNDliLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjUyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0KKyB9LAorIHsgLyogdmVyc2lvbiA1ICovCisgIHsgLyogdmVyc2lvbiA1LCBwYXNzZXMgMCAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDBhNDliLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDEyNGRiLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI0ZGIsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDFiNzI1LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMWI3MjUsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxYjkyZCwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjcyNCwweDAwMDFjOTZlLDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfSwKKyAgeyAvKiB2ZXJzaW9uIDUsIHBhc3NlcyAxICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAxMjUyLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTMsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5MywweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDBhNDliLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTQ5MiwweDAwMDA5NDkzLDB4MDAwMTI0ZGIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMDk0OTMsMHgwMDAxMjRkYiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDEyNGRiLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMTI0ZGIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNGRiLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI0ZGIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjUyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9CisgfSwKKyB7IC8qIHZlcnNpb24gNiAqLworICB7IC8qIHZlcnNpb24gNiwgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMzZlNCwweDAwMDFiNzI1LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEzNmU0LDB4MDAwMWI3MjUsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxYjkyZCwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxYjcyNCwweDAwMDFiOTJkLDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWM5NmUsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI5MjUsMHgwMDAyNWJiNiwweDAwMDI0Yjc3fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiA2LCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwOTQ5MywweDAwMDBhNDliLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDEyNmRjLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMTI2ZGMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAxMjZkYywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0sCisgeyAvKiB2ZXJzaW9uIDcgKi8KKyAgeyAvKiB2ZXJzaW9uIDcsIHBhc3NlcyAwICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwYTQ5YiwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDEyNGRiLDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMzZlNCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMzZlNCwweDAwMDFiNzI1LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMWI3MjUsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMWI3MjQsMHgwMDAxYjkyZCwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxYjcyNCwweDAwMDFjOTZlLDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWM5NmUsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI3MjQsMHgwMDAxYzk2ZSwweDAwMDI0OTZlfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjkyNSwweDAwMDFjOTZlLDB4MDAwMjQ5NmV9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDI0OTZkLDB4MDAwMjViYjYsMHgwMDAyNWJiZn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9LAorICB7IC8qIHZlcnNpb24gNywgcGFzc2VzIDEgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTQ5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTMsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDEyNGRiLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI0ZGIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMzZlNCwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEzNmU0LDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNGRiLDB4MDAwMTM2ZTQsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMTI0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMWI5MjUsMHgwMDAxYjcyNSwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0KKyB9LAorIHsgLyogdmVyc2lvbiA4ICovCisgIHsgLyogdmVyc2lvbiA4LCBwYXNzZXMgMCAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMzZlNCwweDAwMDFiNzI1LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMWI3MjUsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMWI3MjQsMHgwMDAxYjkyZCwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI1MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxYjcyNCwweDAwMDFiOTJkLDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiOTI1LDB4MDAwMWM5NmUsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI5MjUsMHgwMDAxYzk2ZSwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjkyNSwweDAwMDI0Yjc2LDB4MDAwMjRiNzd9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiOTI1LDB4MDAwMjRiNzYsMHgwMDAyNWJiZn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWM5MmQsMHgwMDAyNGI3NiwweDAwMDI1YmJmfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAxMjQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAyNGI2ZCwweDAwMDJkZGI2LDB4MDAwMmVmZmZ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfSwKKyAgeyAvKiB2ZXJzaW9uIDgsIHBhc3NlcyAxICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMTI0ZGIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTM2ZTQsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEyNGRiLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMWI3MjUsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI5MjUsMHgwMDAxYjcyNSwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjkyNSwweDAwMDFiNzI1LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDI0OTZkLDB4MDAwMWI5MmQsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9CisgfSwKKyB7IC8qIHZlcnNpb24gOSAqLworICB7IC8qIHZlcnNpb24gOSwgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyNTIsMHgwMDAwMTI1MiwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTMsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNGRiLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjUyLDB4MDAwMDk0OTMsCisgICAgMHgwMDAxMjRkYiwweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNGRiLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWI3MjUsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI5MjUsMHgwMDAxYjkyZCwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiA5LCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDksMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDAwOSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMDI0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDAwNDksMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDEyNGEsMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDkyNTIsMHgwMDAwMTI0YSwweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDA5MjUyLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDA5NDkzLDB4MDAwMDk0OTMsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNGRiLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI1MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0sCisgeyAvKiB2ZXJzaW9uIDEwICovCisgIHsgLyogdmVyc2lvbiAxMCwgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwOTQ5MywweDAwMDBhNDliLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDEyNGRiLDB4MDAwMTI0ZGIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjUyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxYjcyNCwweDAwMDFiOTJkLDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiOTI1LDB4MDAwMWI5MmQsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMjQ5NmQsMHgwMDAxYzk2ZSwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiAxMCwgcGFzc2VzIDEgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAwMjQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyNTIsMHgwMDAwMDI0YSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTQ5MywweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDA5NDkzLDB4MDAwMDEyNTIsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMDk0OTMsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwOTQ5MywweDAwMDA5MjkyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDA5NDkzLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwOTQ5MywweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDA5NDkzLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0KKyB9LAorIHsgLyogdmVyc2lvbiAxMSAqLworICB7IC8qIHZlcnNpb24gMTEsIHBhc3NlcyAwICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTQ5MiwweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAxMjRkYiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNmRjLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMWI3MjQsMHgwMDAxYjcyNSwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjcyNCwweDAwMDFiOTJkLDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMWI5MmQsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI5MjUsMHgwMDAxYzk2ZSwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYjkyNSwweDAwMDFjOTZlLDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxYzkyNCwweDAwMDI0OTZkLDB4MDAwMjViYjYsMHgwMDAyNGI3N30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9LAorICB7IC8qIHZlcnNpb24gMTEsIHBhc3NlcyAxICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjUyLDB4MDAwMDAyNGEsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMDkyOTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDA5NDkzLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNGRiLDB4MDAwMDk0OTMsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI0ZGIsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9CisgfSwKKyB7IC8qIHZlcnNpb24gMTIgKi8KKyAgeyAvKiB2ZXJzaW9uIDEyLCBwYXNzZXMgMCAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNmRjLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWI3MjUsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI3MjQsMHgwMDAxYjkyZCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjcyNCwweDAwMDFiOTJkLDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMWI5MmQsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI5MjUsMHgwMDAxYjkyZCwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYjkyNSwweDAwMDFjOTZlLDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFjOTJkLDB4MDAwMWM5NmUsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMWM5MmQsMHgwMDAyNGI3NiwweDAwMDI0OTZlfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAxMjQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMWM5MjQsMHgwMDAyNGI2ZCwweDAwMDJkZGI2LDB4MDAwMjViYmZ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfSwKKyAgeyAvKiB2ZXJzaW9uIDEyLCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMDkyNTIsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwOTI5MiwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEyNGRiLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNGRiLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEyNGRiLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWM5MjQsMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0sCisgeyAvKiB2ZXJzaW9uIDEzICovCisgIHsgLyogdmVyc2lvbiAxMywgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMjZkYywweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMWI3MjUsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI3MjQsMHgwMDAxYjcyNSwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjcyNCwweDAwMDFiNzI1LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMWM5NmUsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWM5MmQsMHgwMDAxYzk2ZSwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYzkyZCwweDAwMDFjOTZlLDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFjOTJkLDB4MDAwMWM5NmUsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMWM5MmQsMHgwMDAyNGI3NiwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMWI5MjQsMHgwMDAxYzkyZCwweDAwMDI0Yjc2LDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxYjkyNCwweDAwMDFjOTJkLDB4MDAwMjRiNzYsMHgwMDAyNDk2ZX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMTI0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDI0OTI0LDB4MDAwMjRiNmQsMHgwMDAyZGRiNiwweDAwMDI1YmJmfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiAxMywgcGFzc2VzIDEgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwOTQ5MiwweDAwMDA5MjkyLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMGE0OWIsMHgwMDAwOTQ5MywweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEyNGRiLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDEyNGRiLDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTI0ZGIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMjZkYywweDAwMDBhNDliLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMTI0OTIsMHgwMDAxYjZkYiwKKyAgICAweDAwMDFjOTI0LDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0KKyB9LAorIHsgLyogdmVyc2lvbiAxNCAqLworICB7IC8qIHZlcnNpb24gMTQsIHBhc3NlcyAwICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxYjcyNSwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxYjcyNCwweDAwMDFiOTJkLDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMWI5MmQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWM5MmQsMHgwMDAxYzk2ZSwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYzkyZCwweDAwMDFjOTZlLDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFjOTJkLDB4MDAwMjRiNzYsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMWM5MmQsMHgwMDAyNGI3NiwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYzkyZCwweDAwMDI0Yjc2LDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFjOTJkLDB4MDAwMjRiNzYsMHgwMDAyNDk2ZX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiOTI0LDB4MDAwMjQ5NmQsMHgwMDAyNGI3NiwweDAwMDI0Yjc3fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI5MjQsMHgwMDAyNGI2ZCwweDAwMDJkZGI2LDB4MDAwMjViYmZ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDEyNDkyLDB4MDAwMWI2ZGIsCisgICAgMHgwMDAyNDkyNCwweDAwMDJkYjZkLDB4MDAwMzZkYjYsMHgwMDAyZWZmZn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9LAorICB7IC8qIHZlcnNpb24gMTQsIHBhc3NlcyAxICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwOTI5MiwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTM2ZTQsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMzZlNCwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMDk0OTMsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAwYTQ5YiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI0ZGIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDEyNDkyLDB4MDAwMWI2ZGIsCisgICAgMHgwMDAxYzkyNCwweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9CisgfSwKKyB7IC8qIHZlcnNpb24gMTUgKi8KKyAgeyAvKiB2ZXJzaW9uIDE1LCBwYXNzZXMgMCAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMTI0ZGIsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxYjcyNCwweDAwMDFiNzI1LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMWI5MmQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI5MjUsMHgwMDAxYzk2ZSwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYzkyZCwweDAwMDFjOTZlLDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFjOTJkLDB4MDAwMWM5NmUsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMWM5MmQsMHgwMDAxYzk2ZSwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMWI5MjQsMHgwMDAxYzkyZCwweDAwMDI0Yjc2LDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjkyNCwweDAwMDFjOTJkLDB4MDAwMjRiNzYsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiOTI0LDB4MDAwMjQ5NmQsMHgwMDAyNGI3NiwweDAwMDI0OTZlfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWM5MjQsMHgwMDAyNDk2ZCwweDAwMDI1YmI2LDB4MDAwMjRiNzd9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYzkyNCwweDAwMDI0YjZkLDB4MDAwMjViYjYsMHgwMDAyNGI3N30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMTI0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFjOTI0LDB4MDAwMjRiNmQsMHgwMDAyZGRiNiwweDAwMDI1YmJmfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAxMjQ5MiwweDAwMDFiNmRiLAorICAgIDB4MDAwMjQ5MjQsMHgwMDAyZGI2ZCwweDAwMDM2ZGI2LDB4MDAwMmVmZmZ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfSwKKyAgeyAvKiB2ZXJzaW9uIDE1LCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEyNGRiLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxYjcyNCwweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI3MjQsMHgwMDAwYTQ5YiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYjcyNCwweDAwMDBhNDliLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYzkyNCwweDAwMDFiNzI0LDB4MDAwMTI0ZGIsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFjOTI0LDB4MDAwMWI3MjQsMHgwMDAxMjRkYiwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWM5MjQsMHgwMDAxYjcyNCwweDAwMDEyNmRjLDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYzkyNCwweDAwMDFiOTI1LDB4MDAwMTI2ZGMsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFjOTI0LDB4MDAwMWI5MjUsMHgwMDAxMzZlNCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWM5MjQsMHgwMDAxYjkyNSwweDAwMDEzNmU0LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYzkyNCwweDAwMDFiOTI1LDB4MDAwMWI3MjUsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMTI0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFjOTI0LDB4MDAwMWI5MjUsMHgwMDAxYjcyNSwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAxMjQ5MiwweDAwMDFiNmRiLAorICAgIDB4MDAwMjQ5MjQsMHgwMDAyNDk2ZCwweDAwMDFiOTJkLDB4MDAwMWI5MjV9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0KK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLXRpbW9uLmggYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLXRpbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg2YjM3OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtdGltb24uaApAQCAtMCwwICsxLDYxIEBACisvKiBMaW51eCBkcml2ZXIgZm9yIFBoaWxpcHMgd2ViY2FtCisgICAoQykgMjAwNCAgICAgIEx1YyBTYWlsbGFyZCAobHVjQHNhaWxsYXJkLm9yZykKKworICAgTk9URTogdGhpcyB2ZXJzaW9uIG9mIHB3YyBpcyBhbiB1bm9mZmljaWFsIChtb2RpZmllZCkgcmVsZWFzZSBvZiBwd2MgJiBwY3d4CisgICBkcml2ZXIgYW5kIHRodXMgbWF5IGhhdmUgYnVncyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgb3JpZ2luYWwgdmVyc2lvbi4KKyAgIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIGFuZCBzdXBwb3J0IHJlcXVlc3RzIHRvIDxsdWNAc2FpbGxhcmQub3JnPi4KKyAgIFRoZSBkZWNvbXByZXNzaW9uIHJvdXRpbmVzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBieSByZXZlcnNlLWVuZ2luZWVyaW5nIHRoZQorICAgTmVtb3NvZnQgYmluYXJ5IHB3Y3ggbW9kdWxlLiBDYXZlYXQgZW1wdG9yLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyovCisKKworCisvKiBUaGlzIHRhYmxlcyBjb250YWlucyBlbnRyaWVzIGZvciB0aGUgNjc1LzY4MC82OTAgKFRpbW9uKSBjYW1lcmEsIHdpdGgKKyAgIDQgZGlmZmVyZW50IHF1YWxpdGllcyAobm8gY29tcHJlc3Npb24sIGxvdywgbWVkaXVtLCBoaWdoKS4KKyAgIEl0IGxpc3RzIHRoZSBiYW5kd2lkdGggcmVxdWlyZW1lbnRzIGZvciBzYWlkIG1vZGUgYnkgaXRzIGFsdGVybmF0ZSBpbnRlcmZhY2UKKyAgIG51bWJlci4gQW4gYWx0ZXJuYXRlIG9mIDAgbWVhbnMgdGhhdCB0aGUgbW9kZSBpcyB1bmF2YWlsYWJsZS4KKworICAgVGhlcmUgYXJlIDYgKiA0ICogNCBlbnRyaWVzOgorICAgICA2IGRpZmZlcmVudCByZXNvbHV0aW9ucyBzdWJxY2lmLCBxc2lmLCBxY2lmLCBzaWYsIGNpZiwgdmdhCisgICAgIDYgZnJhbWVyYXRlczogNSwgMTAsIDE1LCAyMCwgMjUsIDMwCisgICAgIDQgY29tcHJlc3Npb24gbW9kaTogbm9uZSwgbG93LCBtZWRpdW0sIGhpZ2gKKworICAgV2hlbiBhbiB1bmNvbXByZXNzZWQgbW9kZSBpcyBub3QgYXZhaWxhYmxlLCB0aGUgbmV4dCBhdmFpbGFibGUgY29tcHJlc3NlZCBtb2RlCisgICB3aWxsIGJlIGNob3NlbiAodW5sZXNzIHRoZSBkZWNvbXByZXNzb3IgaXMgYWJzZW50KS4gU29tZXRpbWVzIHRoZXJlIGFyZSBvbmx5CisgICAxIG9yIDIgY29tcHJlc3NlZCBtb2RlcyBhdmFpbGFibGU7IGluIHRoYXQgY2FzZSBlbnRyaWVzIGFyZSBkdXBsaWNhdGVkLgorKi8KKworI2lmbmRlZiBQV0NfVElNT05fSAorI2RlZmluZSBQV0NfVElNT05fSAorCisjaW5jbHVkZSAicHdjLWlvY3RsLmgiCisKK3N0cnVjdCBUaW1vbl90YWJsZV9lbnRyeQoreworCWNoYXIgYWx0ZXJuYXRlOwkJCS8qIFVTQiBhbHRlcm5hdGUgaW50ZXJmYWNlICovCisJdW5zaWduZWQgc2hvcnQgcGFja2V0c2l6ZTsJLyogTm9ybWFsIHBhY2tldCBzaXplICovCisJdW5zaWduZWQgc2hvcnQgYmFuZGxlbmd0aDsJLyogQmFuZGxlbmd0aCB3aGVuIGRlY29tcHJlc3NpbmcgKi8KKwl1bnNpZ25lZCBjaGFyIG1vZGVbMTNdOwkJLyogcHJlY29tcHV0ZWQgbW9kZSBzZXR0aW5ncyBmb3IgY2FtICovCit9OworCitjb25zdCBleHRlcm4gc3RydWN0IFRpbW9uX3RhYmxlX2VudHJ5IFRpbW9uX3RhYmxlW1BTWl9NQVhdWzZdWzRdOworY29uc3QgZXh0ZXJuIHVuc2lnbmVkIGludCBUaW1vblJvbVRhYmxlIFsxNl1bMl1bMTZdWzhdOworCisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtdW5jb21wcmVzcy5jIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy11bmNvbXByZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA2MmU0MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtdW5jb21wcmVzcy5jCkBAIC0wLDAgKzEsMTQ3IEBACisvKiBMaW51eCBkcml2ZXIgZm9yIFBoaWxpcHMgd2ViY2FtCisgICBEZWNvbXByZXNzaW9uIGZyb250ZW5kLgorICAgKEMpIDE5OTktMjAwMyBOZW1vc29mdCBVbnYuCisgICAoQykgMjAwNCAgICAgIEx1YyBTYWlsbGFyZCAobHVjQHNhaWxsYXJkLm9yZykKKworICAgTk9URTogdGhpcyB2ZXJzaW9uIG9mIHB3YyBpcyBhbiB1bm9mZmljaWFsIChtb2RpZmllZCkgcmVsZWFzZSBvZiBwd2MgJiBwY3d4CisgICBkcml2ZXIgYW5kIHRodXMgbWF5IGhhdmUgYnVncyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgb3JpZ2luYWwgdmVyc2lvbi4KKyAgIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIGFuZCBzdXBwb3J0IHJlcXVlc3RzIHRvIDxsdWNAc2FpbGxhcmQub3JnPi4KKyAgIFRoZSBkZWNvbXByZXNzaW9uIHJvdXRpbmVzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBieSByZXZlcnNlLWVuZ2luZWVyaW5nIHRoZQorICAgTmVtb3NvZnQgYmluYXJ5IHB3Y3ggbW9kdWxlLiBDYXZlYXQgZW1wdG9yLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyovCisKKyNpbmNsdWRlIDxhc20vY3VycmVudC5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjaW5jbHVkZSAicHdjLmgiCisjaW5jbHVkZSAicHdjLXVuY29tcHJlc3MuaCIKKyNpbmNsdWRlICJwd2MtZGVjMS5oIgorI2luY2x1ZGUgInB3Yy1kZWMyMy5oIgorCitpbnQgcHdjX2RlY29tcHJlc3Moc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHB3Y19mcmFtZV9idWYgKmZidWY7CisJaW50IG4sIGxpbmUsIGNvbCwgc3RyaWRlOworCXZvaWQgKnl1diwgKmltYWdlOworCXUxNiAqc3JjOworCXUxNiAqZHN0eSwgKmRzdHUsICpkc3R2OworCisJaWYgKHBkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSAmJiBkZWZpbmVkKFBXQ19NQUdJQykKKwlpZiAocGRldi0+bWFnaWMgIT0gUFdDX01BR0lDKSB7CisJCUVycigicHdjX2RlY29tcHJlc3MoKTogbWFnaWMgZmFpbGVkLlxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKyNlbmRpZgorCisJZmJ1ZiA9IHBkZXYtPnJlYWRfZnJhbWU7CisJaWYgKGZidWYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaW1hZ2UgPSBwZGV2LT5pbWFnZV9wdHJbcGRldi0+ZmlsbF9pbWFnZV07CisJaWYgKCFpbWFnZSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwl5dXYgPSBmYnVmLT5kYXRhICsgcGRldi0+ZnJhbWVfaGVhZGVyX3NpemU7ICAvKiBTa2lwIGhlYWRlciAqLworCisJLyogUmF3IGZvcm1hdDsgdGhhdCdzIGVhc3kuLi4gKi8KKwlpZiAocGRldi0+dnBhbGV0dGUgPT0gVklERU9fUEFMRVRURV9SQVcpCisJeworCQltZW1jcHkoaW1hZ2UsIHl1diwgcGRldi0+ZnJhbWVfc2l6ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChwZGV2LT52YmFuZGxlbmd0aCA9PSAwKSB7CisJCS8qIFVuY29tcHJlc3NlZCBtb2RlLiBXZSBjb3B5IHRoZSBkYXRhIGludG8gdGhlIG91dHB1dCBidWZmZXIsCisJCSAgIHVzaW5nIHRoZSB2aWV3cG9ydCBzaXplICh3aGljaCBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlIGltYWdlCisJCSAgIHNpemUpLiBVbmZvcnR1bmF0ZWx5IHdlIGhhdmUgdG8gZG8gYSBiaXQgb2YgYnl0ZSBzdHVmZmluZworCQkgICB0byBnZXQgdGhlIGRlc2lyZWQgb3V0cHV0IGZvcm1hdC9zaXplLgorCQkgKi8KKwkJCS8qCisJCQkgKiBXZSBkbyBzb21lIGJ5dGUgc2h1ZmZsaW5nIGhlcmUgdG8gZ28gZnJvbSB0aGUKKwkJCSAqIG5hdGl2ZSBmb3JtYXQgdG8gWVVWNDIwUC4KKwkJCSAqLworCQkJc3JjID0gKHUxNiAqKXl1djsKKwkJCW4gPSBwZGV2LT52aWV3LnggKiBwZGV2LT52aWV3Lnk7CisKKwkJCS8qIG9mZnNldCBpbiBZIHBsYW5lICovCisJCQlzdHJpZGUgPSBwZGV2LT52aWV3LnggKiBwZGV2LT5vZmZzZXQueSArIHBkZXYtPm9mZnNldC54OworCQkJZHN0eSA9ICh1MTYgKikoaW1hZ2UgKyBzdHJpZGUpOworCisJCQkvKiBvZmZzZXRzIGluIFUvViBwbGFuZXMgKi8KKwkJCXN0cmlkZSA9IHBkZXYtPnZpZXcueCAqIHBkZXYtPm9mZnNldC55IC8gNCArIHBkZXYtPm9mZnNldC54IC8gMjsKKwkJCWRzdHUgPSAodTE2ICopKGltYWdlICsgbiArICAgICAgICAgc3RyaWRlKTsKKwkJCWRzdHYgPSAodTE2ICopKGltYWdlICsgbiArIG4gLyA0ICsgc3RyaWRlKTsKKworCQkJLyogaW5jcmVtZW50IGFmdGVyIGVhY2ggbGluZSAqLworCQkJc3RyaWRlID0gKHBkZXYtPnZpZXcueCAtIHBkZXYtPmltYWdlLngpIC8gMjsgLyogdTE2IGlzIDIgYnl0ZXMgKi8KKworCQkJZm9yIChsaW5lID0gMDsgbGluZSA8IHBkZXYtPmltYWdlLnk7IGxpbmUrKykgeworCQkJCWZvciAoY29sID0gMDsgY29sIDwgcGRldi0+aW1hZ2UueDsgY29sICs9IDQpIHsKKwkJCQkJKmRzdHkrKyA9ICpzcmMrKzsKKwkJCQkJKmRzdHkrKyA9ICpzcmMrKzsKKwkJCQkJaWYgKGxpbmUgJiAxKQorCQkJCQkJKmRzdHYrKyA9ICpzcmMrKzsKKwkJCQkJZWxzZQorCQkJCQkJKmRzdHUrKyA9ICpzcmMrKzsKKwkJCQl9CisJCQkJZHN0eSArPSBzdHJpZGU7CisJCQkJaWYgKGxpbmUgJiAxKQorCQkJCQlkc3R2ICs9IChzdHJpZGUgPj4gMSk7CisJCQkJZWxzZQorCQkJCQlkc3R1ICs9IChzdHJpZGUgPj4gMSk7CisJCQl9CisJfQorCWVsc2UgeworCQkvKiBDb21wcmVzc2VkOyB0aGUgZGVjb21wcmVzc29yIHJvdXRpbmVzIHdpbGwgd3JpdGUgdGhlIGRhdGEKKwkJICAgaW4gcGxhbmFyIGZvcm1hdCBpbW1lZGlhdGVseS4KKwkJICovCisJCWludCBmbGFnczsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmbGFncyA9IFBXQ1hfRkxBR19QTEFOQVI7CisgICAgICAgICAgICAgICAgaWYgKHBkZXYtPnZzaXplID09IFBTWl9WR0EgJiYgcGRldi0+dmZyYW1lcyA9PSA1ICYmIHBkZXYtPnZzbmFwc2hvdCkKKwkJIHsKKwkJICAgcHJpbnRrKEtFUk5fRVJSICJwd2M6IE1vZGUgQmF5ZXIgaXMgbm90IHN1cHBvcnRlZCBmb3Igbm93XG4iKTsKKwkJICAgZmxhZ3MgfD0gUFdDWF9GTEFHX0JBWUVSOworCQkgICByZXR1cm4gLUVOWElPOyAvKiBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzOiBtaXNzaW5nIGRlY29tcHJlc3NvciAqLworCQkgfQorCisJCXN3aXRjaCAocGRldi0+dHlwZSkKKwkJIHsKKwkJICBjYXNlIDY3NToKKwkJICBjYXNlIDY4MDoKKwkJICBjYXNlIDY5MDoKKwkJICBjYXNlIDcyMDoKKwkJICBjYXNlIDczMDoKKwkJICBjYXNlIDc0MDoKKwkJICBjYXNlIDc1MDoKKwkJICAgIHB3Y19kZWMyM19kZWNvbXByZXNzKCZwZGV2LT5pbWFnZSwgJnBkZXYtPnZpZXcsICZwZGV2LT5vZmZzZXQsCisJCQkJeXV2LCBpbWFnZSwKKwkJCQlmbGFncywKKwkJCQlwZGV2LT5kZWNvbXByZXNzX2RhdGEsIHBkZXYtPnZiYW5kbGVuZ3RoKTsKKwkJICAgIGJyZWFrOworCQkgIGNhc2UgNjQ1OgorCQkgIGNhc2UgNjQ2OgorCQkgICAgLyogVE9ETyAmIEZJWE1FICovCisJCSAgICByZXR1cm4gLUVOWElPOyAvKiBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzOiBtaXNzaW5nIGRlY29tcHJlc3NvciAqLworCQkgICAgYnJlYWs7CisJCSB9CisJfQorCXJldHVybiAwOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtdW5jb21wcmVzcy5oIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy11bmNvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNiOTI1MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qIChDKSAxOTk5LTIwMDMgTmVtb3NvZnQgVW52LgorICAgKEMpIDIwMDQgICAgICBMdWMgU2FpbGxhcmQgKGx1Y0BzYWlsbGFyZC5vcmcpCisKKyAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAorICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCisgICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyBhbmQgc3VwcG9ydCByZXF1ZXN0cyB0byA8bHVjQHNhaWxsYXJkLm9yZz4uCisgICBUaGUgZGVjb21wcmVzc2lvbiByb3V0aW5lcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYnkgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUKKyAgIE5lbW9zb2Z0IGJpbmFyeSBwd2N4IG1vZHVsZS4gQ2F2ZWF0IGVtcHRvci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisvKiBUaGlzIGZpbGUgaXMgdGhlIGJyaWRnZSBiZXR3ZWVuIHRoZSBrZXJuZWwgbW9kdWxlIGFuZCB0aGUgcGx1Z2luOyBpdAorICAgZGVzY3JpYmVzIHRoZSBzdHJ1Y3R1cmVzIGFuZCBkYXRhdHlwZXMgdXNlZCBpbiBib3RoIG1vZHVsZXMuIEFueQorICAgc2lnbmlmaWNhbnQgY2hhbmdlIHNob3VsZCBiZSByZWZsZWN0ZWQgYnkgaW5jcmVhc2luZyB0aGUgCisgICBwd2NfZGVjb21wcmVzc29yX3ZlcnNpb24gbWFqb3IgbnVtYmVyLgorICovCisjaWZuZGVmIFBXQ19VTkNPTVBSRVNTX0gKKyNkZWZpbmUgUFdDX1VOQ09NUFJFU1NfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpbmNsdWRlICJwd2MtaW9jdGwuaCIKKworLyogZnJvbSBwd2MtZGVjLmggKi8KKyNkZWZpbmUgUFdDWF9GTEFHX1BMQU5BUiAgICAgICAgMHgwMDAxCisvKiAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2I1MTZkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy5oCkBAIC0wLDAgKzEsMjc4IEBACisvKiAoQykgMTk5OS0yMDAzIE5lbW9zb2Z0IFVudi4KKyAgIChDKSAyMDA0ICAgICAgTHVjIFNhaWxsYXJkIChsdWNAc2FpbGxhcmQub3JnKQorCisgICBOT1RFOiB0aGlzIHZlcnNpb24gb2YgcHdjIGlzIGFuIHVub2ZmaWNpYWwgKG1vZGlmaWVkKSByZWxlYXNlIG9mIHB3YyAmIHBjd3gKKyAgIGRyaXZlciBhbmQgdGh1cyBtYXkgaGF2ZSBidWdzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLgorICAgUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgYW5kIHN1cHBvcnQgcmVxdWVzdHMgdG8gPGx1Y0BzYWlsbGFyZC5vcmc+LgorICAgVGhlIGRlY29tcHJlc3Npb24gcm91dGluZXMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGJ5IHJldmVyc2UtZW5naW5lZXJpbmcgdGhlCisgICBOZW1vc29mdCBiaW5hcnkgcHdjeCBtb2R1bGUuIENhdmVhdCBlbXB0b3IuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworI2lmbmRlZiBQV0NfSAorI2RlZmluZSBQV0NfSAorCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKworI2luY2x1ZGUgInB3Yy11bmNvbXByZXNzLmgiCisjaW5jbHVkZSAicHdjLWlvY3RsLmgiCisKKy8qIERlZmluZXMgYW5kIHN0cnVjdHVyZXMgZm9yIHRoZSBQaGlsaXBzIHdlYmNhbSAqLworLyogVXNlZCBmb3IgY2hlY2tpbmcgbWVtb3J5IGNvcnJ1cHRpb24vcG9pbnRlciB2YWxpZGF0aW9uICovCisjZGVmaW5lIFBXQ19NQUdJQyAweDg5REMxMEFCVUwKKyN1bmRlZiBQV0NfTUFHSUMKKworLyogVHVybiBzb21lIGRlYnVnZ2luZyBvcHRpb25zIG9uL29mZiAqLworI2RlZmluZSBQV0NfREVCVUcgMAorCisvKiBUcmFjZSBjZXJ0YWluIGFjdGlvbnMgaW4gdGhlIGRyaXZlciAqLworI2RlZmluZSBUUkFDRV9NT0RVTEUJMHgwMDAxCisjZGVmaW5lIFRSQUNFX1BST0JFCTB4MDAwMgorI2RlZmluZSBUUkFDRV9PUEVOCTB4MDAwNAorI2RlZmluZSBUUkFDRV9SRUFECTB4MDAwOAorI2RlZmluZSBUUkFDRV9NRU1PUlkJMHgwMDEwCisjZGVmaW5lIFRSQUNFX0ZMT1cJMHgwMDIwCisjZGVmaW5lIFRSQUNFX1NJWkUJMHgwMDQwCisjZGVmaW5lIFRSQUNFX1BXQ1gJMHgwMDgwCisjZGVmaW5lIFRSQUNFX1NFUVVFTkNFCTB4MTAwMAorCisjZGVmaW5lIFRyYWNlKFIsIEEuLi4pIGlmIChwd2NfdHJhY2UgJiBSKSBwcmludGsoS0VSTl9ERUJVRyBQV0NfTkFNRSAiICIgQSkKKyNkZWZpbmUgRGVidWcoQS4uLikgcHJpbnRrKEtFUk5fREVCVUcgUFdDX05BTUUgIiAiIEEpCisjZGVmaW5lIEluZm8oQS4uLikgIHByaW50ayhLRVJOX0lORk8gIFBXQ19OQU1FICIgIiBBKQorI2RlZmluZSBFcnIoQS4uLikgICBwcmludGsoS0VSTl9FUlIgICBQV0NfTkFNRSAiICIgQSkKKworCisvKiBEZWZpbmVzIGZvciBUb1VDYW0gY2FtZXJhcyAqLworI2RlZmluZSBUT1VDQU1fSEVBREVSX1NJWkUJCTgKKyNkZWZpbmUgVE9VQ0FNX1RSQUlMRVJfU0laRQkJNAorCisjZGVmaW5lIEZFQVRVUkVfTU9UT1JfUEFOVElMVAkJMHgwMDAxCisKKy8qIFZlcnNpb24gYmxvY2sgKi8KKyNkZWZpbmUgUFdDX01BSk9SCTkKKyNkZWZpbmUgUFdDX01JTk9SCTAKKyNkZWZpbmUgUFdDX1ZFUlNJT04gCSI5LjAuMi11bm9mZmljaWFsIgorI2RlZmluZSBQV0NfTkFNRSAJInB3YyIKKworLyogVHVybiBjZXJ0YWluIGZlYXR1cmVzIG9uL29mZiAqLworI2RlZmluZSBQV0NfSU5UX1BJUEUgMAorCisvKiBJZ25vcmUgZXJyb3JzIGluIHRoZSBmaXJzdCBOIGZyYW1lcywgdG8gYWxsb3cgZm9yIHN0YXJ0dXAgZGVsYXlzICovCisjZGVmaW5lIEZSQU1FX0xPV01BUksgNQorCisvKiBTaXplIGFuZCBudW1iZXIgb2YgYnVmZmVycyBmb3IgdGhlIElTTyBwaXBlLiAqLworI2RlZmluZSBNQVhfSVNPX0JVRlMJCTIKKyNkZWZpbmUgSVNPX0ZSQU1FU19QRVJfREVTQwkxMAorI2RlZmluZSBJU09fTUFYX0ZSQU1FX1NJWkUJOTYwCisjZGVmaW5lIElTT19CVUZGRVJfU0laRSAJKElTT19GUkFNRVNfUEVSX0RFU0MgKiBJU09fTUFYX0ZSQU1FX1NJWkUpCisKKy8qIEZyYW1lIGJ1ZmZlcnM6IGNvbnRhaW5zIGNvbXByZXNzZWQgb3IgdW5jb21wcmVzc2VkIHZpZGVvIGRhdGEuICovCisjZGVmaW5lIE1BWF9GUkFNRVMJCTUKKy8qIE1heGltdW0gc2l6ZSBhZnRlciBkZWNvbXByZXNzaW9uIGlzIDY0MHg0ODAgWVVWIGRhdGEsIDEuNSAqIDY0MCAqIDQ4MCAqLworI2RlZmluZSBQV0NfRlJBTUVfU0laRSAJCSg0NjA4MDAgKyBUT1VDQU1fSEVBREVSX1NJWkUgKyBUT1VDQU1fVFJBSUxFUl9TSVpFKQorCisvKiBBYnNvbHV0ZSBtYXhpbXVtIG51bWJlciBvZiBidWZmZXJzIGF2YWlsYWJsZSBmb3IgbW1hcCgpICovCisjZGVmaW5lIE1BWF9JTUFHRVMgCQkxMAorCisvKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZXMgd2VyZSBiYXNlZCBvbiBjcGlhLmguIFdoeSByZWludmVudCB0aGUgd2hlZWw/IDotKSAqLworc3RydWN0IHB3Y19pc29fYnVmCit7CisJdm9pZCAqZGF0YTsKKwlpbnQgIGxlbmd0aDsKKwlpbnQgIHJlYWQ7CisJc3RydWN0IHVyYiAqdXJiOworfTsKKworLyogaW50ZXJtZWRpYXRlIGJ1ZmZlcnMgd2l0aCByYXcgZGF0YSBmcm9tIHRoZSBVU0IgY2FtICovCitzdHJ1Y3QgcHdjX2ZyYW1lX2J1ZgoreworICAgdm9pZCAqZGF0YTsKKyAgIHZvbGF0aWxlIGludCBmaWxsZWQ7CQkvKiBudW1iZXIgb2YgYnl0ZXMgZmlsbGVkICovCisgICBzdHJ1Y3QgcHdjX2ZyYW1lX2J1ZiAqbmV4dDsJLyogbGlzdCAqLworI2lmIFBXQ19ERUJVRworICAgaW50IHNlcXVlbmNlOwkJLyogU2VxdWVuY2UgbnVtYmVyICovCisjZW5kaWYKK307CisKK3N0cnVjdCBwd2NfZGV2aWNlCit7CisgICBzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OworI2lmZGVmIFBXQ19NQUdJQworICAgaW50IG1hZ2ljOworI2VuZGlmCisgICAvKiBQb2ludGVyIHRvIG91ciB1c2JfZGV2aWNlICovCisgICBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKyAgIAorICAgaW50IHR5cGU7ICAgICAgICAgICAgICAgICAgICAvKiB0eXBlIG9mIGNhbSAoNjQ1LCA2NDYsIDY3NSwgNjgwLCA2OTAsIDcyMCwgNzMwLCA3NDAsIDc1MCkgKi8KKyAgIGludCByZWxlYXNlOwkJCS8qIHJlbGVhc2UgbnVtYmVyICovCisgICBpbnQgZmVhdHVyZXM7CQkvKiBmZWF0dXJlIGJpdHMgKi8KKyAgIGNoYXIgc2VyaWFsWzMwXTsJCS8qIHNlcmlhbCBudW1iZXIgKHN0cmluZykgKi8KKyAgIGludCBlcnJvcl9zdGF0dXM7CQkvKiBzZXQgd2hlbiBzb21ldGhpbmcgZ29lcyB3cm9uZyB3aXRoIHRoZSBjYW0gKHVucGx1Z2dlZCwgVVNCIGVycm9ycykgKi8KKyAgIGludCB1c2JfaW5pdDsJCS8qIHNldCB3aGVuIHRoZSBjYW0gaGFzIGJlZW4gaW5pdGlhbGl6ZWQgb3ZlciBVU0IgKi8KKworICAgLyoqKiBWaWRlbyBkYXRhICoqKi8KKyAgIGludCB2b3BlbjsJCQkvKiBmbGFnICovCisgICBpbnQgdmVuZHBvaW50OwkJLyogdmlkZW8gaXNvYyBlbmRwb2ludCAqLworICAgaW50IHZjaW50ZXJmYWNlOwkJLyogdmlkZW8gY29udHJvbCBpbnRlcmZhY2UgKi8KKyAgIGludCB2YWx0ZXJuYXRlOwkJLyogYWx0ZXJuYXRlIGludGVyZmFjZSBuZWVkZWQgKi8KKyAgIGludCB2ZnJhbWVzLCB2c2l6ZTsJCS8qIGZyYW1lcy1wZXItc2Vjb25kICYgc2l6ZSAoc2VlIFBTWl8qKSAqLworICAgaW50IHZwYWxldHRlOwkJLyogcGFsZXR0ZTogNDIwUCwgUkFXIG9yIFJHQkJBWUVSICovCisgICBpbnQgdmZyYW1lX2NvdW50OwkJLyogcmVjZWl2ZWQgZnJhbWVzICovCisgICBpbnQgdmZyYW1lc19kdW1wZWQ7IAkJLyogY291bnRlciBmb3IgZHVtcGVkIGZyYW1lcyAqLworICAgaW50IHZmcmFtZXNfZXJyb3I7CQkvKiBmcmFtZXMgcmVjZWl2ZWQgaW4gZXJyb3IgKi8KKyAgIGludCB2bWF4X3BhY2tldF9zaXplOwkvKiBVU0IgbWF4cGFja2V0IHNpemUgKi8KKyAgIGludCB2bGFzdF9wYWNrZXRfc2l6ZTsJLyogZm9yIGZyYW1lIHN5bmNocm9uaXNhdGlvbiAqLworICAgaW50IHZpc29jX2Vycm9yczsJCS8qIG51bWJlciBvZiBjb250aWd1b3VzIElTT0MgZXJyb3JzICovCisgICBpbnQgdmNvbXByZXNzaW9uOwkJLyogZGVzaXJlZCBjb21wcmVzc2lvbiBmYWN0b3IgKi8KKyAgIGludCB2YmFuZGxlbmd0aDsJCS8qIGNvbXByZXNzZWQgYmFuZCBsZW5ndGg7IDAgaXMgdW5jb21wcmVzc2VkICovCisgICBjaGFyIHZzbmFwc2hvdDsJCS8qIHNuYXBzaG90IG1vZGUgKi8KKyAgIGNoYXIgdnN5bmM7CQkJLyogdXNlZCBieSBpc29jIGhhbmRsZXIgKi8KKyAgIGNoYXIgdm1pcnJvcjsJCS8qIGZvciBUb1VDYU0gc2VyaWVzICovCisgICAKKyAgIGludCBjbWRfbGVuOworICAgdW5zaWduZWQgY2hhciBjbWRfYnVmWzEzXTsKKworICAgLyogVGhlIGltYWdlIGFjcXVpc2l0aW9uIHJlcXVpcmVzIDMgdG8gNCBzdGVwczoKKyAgICAgIDEuIGRhdGEgaXMgZ2F0aGVyZWQgaW4gc2hvcnQgcGFja2V0cyBmcm9tIHRoZSBVU0IgY29udHJvbGxlcgorICAgICAgMi4gZGF0YSBpcyBzeW5jaHJvbml6ZWQgYW5kIHBhY2tlZCBpbnRvIGEgZnJhbWUgYnVmZmVyCisgICAgICAzYS4gaW4gY2FzZSBkYXRhIGlzIGNvbXByZXNzZWQsIGRlY29tcHJlc3MgaXQgZGlyZWN0bHkgaW50byBpbWFnZSBidWZmZXIKKyAgICAgIDNiLiBpbiBjYXNlIGRhdGEgaXMgdW5jb21wcmVzc2VkLCBjb3B5IGludG8gaW1hZ2UgYnVmZmVyIHdpdGggdmlld3BvcnQKKyAgICAgIDQuIGRhdGEgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHVzZXIgcHJvY2VzcworCisgICAgICBOb3RlIHRoYXQgTUFYX0lTT19CVUZTICE9IE1BWF9GUkFNRVMgIT0gTUFYX0lNQUdFUy4uLi4KKyAgICAgIFdlIGhhdmUgaW4gZWZmZWN0IGEgYmFjay10by1iYWNrLWRvdWJsZS1idWZmZXIgc3lzdGVtLgorICAgICovCisgICAvKiAxOiBpc29jICovCisgICBzdHJ1Y3QgcHdjX2lzb19idWYgc2J1ZltNQVhfSVNPX0JVRlNdOworICAgY2hhciBpc29faW5pdDsKKworICAgLyogMjogZnJhbWUgKi8KKyAgIHN0cnVjdCBwd2NfZnJhbWVfYnVmICpmYnVmOwkvKiBhbGwgZnJhbWVzICovCisgICBzdHJ1Y3QgcHdjX2ZyYW1lX2J1ZiAqZW1wdHlfZnJhbWVzLCAqZW1wdHlfZnJhbWVzX3RhaWw7CS8qIGFsbCBlbXB0eSBmcmFtZXMgKi8KKyAgIHN0cnVjdCBwd2NfZnJhbWVfYnVmICpmdWxsX2ZyYW1lcywgKmZ1bGxfZnJhbWVzX3RhaWw7CS8qIGFsbCBmaWxsZWQgZnJhbWVzICovCisgICBzdHJ1Y3QgcHdjX2ZyYW1lX2J1ZiAqZmlsbF9mcmFtZTsJLyogZnJhbWUgY3VycmVudGx5IGJlaW5nIGZpbGxlZCAqLworICAgc3RydWN0IHB3Y19mcmFtZV9idWYgKnJlYWRfZnJhbWU7CS8qIGZyYW1lIGN1cnJlbnRseSByZWFkIGJ5IHVzZXIgcHJvY2VzcyAqLworICAgaW50IGZyYW1lX2hlYWRlcl9zaXplLCBmcmFtZV90cmFpbGVyX3NpemU7CisgICBpbnQgZnJhbWVfc2l6ZTsKKyAgIGludCBmcmFtZV90b3RhbF9zaXplOyAvKiBpbmNsdWRpbmcgaGVhZGVyICYgdHJhaWxlciAqLworICAgaW50IGRyb3BfZnJhbWVzOworI2lmIFBXQ19ERUJVRworICAgaW50IHNlcXVlbmNlOwkJCS8qIERlYnVnZ2luZyBhaWQgKi8KKyNlbmRpZgorCisgICAvKiAzOiBkZWNvbXByZXNzaW9uICovCisgICBzdHJ1Y3QgcHdjX2RlY29tcHJlc3NvciAqZGVjb21wcmVzc29yOwkvKiBmdW5jdGlvbiBibG9jayB3aXRoIGRlY29tcHJlc3Npb24gcm91dGluZXMgKi8KKyAgIHZvaWQgKmRlY29tcHJlc3NfZGF0YTsJCS8qIHByaXZhdGUgZGF0YSBmb3IgZGVjb21wcmVzc2lvbiBlbmdpbmUgKi8KKworICAgLyogNDogaW1hZ2UgKi8KKyAgIC8qIFdlIGhhdmUgYW4gJ2ltYWdlJyBhbmQgYSAndmlldycsIHdoZXJlICdpbWFnZScgaXMgdGhlIGZpeGVkLXNpemUgaW1hZ2UKKyAgICAgIGFzIGRlbGl2ZXJlZCBieSB0aGUgY2FtZXJhLCBhbmQgJ3ZpZXcnIGlzIHRoZSBzaXplIHJlcXVlc3RlZCBieSB0aGUKKyAgICAgIHByb2dyYW0uIFRoZSBjYW1lcmEgaW1hZ2UgaXMgY2VudGVyZWQgaW4gdGhpcyB2aWV3cG9ydCwgbGFjZWQgd2l0aAorICAgICAgYSBncmF5IG9yIGJsYWNrIGJvcmRlci4gdmlld19taW4gPD0gaW1hZ2UgPD0gdmlldyA8PSB2aWV3X21heDsKKyAgICAqLworICAgaW50IGltYWdlX21hc2s7CQkJLyogYml0bWFzayBvZiBzdXBwb3J0ZWQgc2l6ZXMgKi8KKyAgIHN0cnVjdCBwd2NfY29vcmQgdmlld19taW4sIHZpZXdfbWF4OwkvKiBtaW5pbXVtIGFuZCBtYXhpbXVtIHZpZXdhYmxlIHNpemVzICovCisgICBzdHJ1Y3QgcHdjX2Nvb3JkIGFic19tYXg7ICAgICAgICAgICAgLyogbWF4aW11bSBzdXBwb3J0ZWQgc2l6ZSB3aXRoIGNvbXByZXNzaW9uICovCisgICBzdHJ1Y3QgcHdjX2Nvb3JkIGltYWdlLCB2aWV3OwkvKiBpbWFnZSBhbmQgdmlld3BvcnQgc2l6ZSAqLworICAgc3RydWN0IHB3Y19jb29yZCBvZmZzZXQ7CQkvKiBvZmZzZXQgd2l0aGluIHRoZSB2aWV3cG9ydCAqLworCisgICB2b2lkICppbWFnZV9kYXRhOwkJCS8qIHRvdGFsIGJ1ZmZlciwgd2hpY2ggaXMgc3ViZGl2aWRlZCBpbnRvIC4uLiAqLworICAgdm9pZCAqaW1hZ2VfcHRyW01BWF9JTUFHRVNdOwkJLyogLi4uc2V2ZXJhbCBpbWFnZXMuLi4gKi8KKyAgIGludCBmaWxsX2ltYWdlOwkJCS8qIC4uLndoaWNoIGFyZSByb3RhdGVkLiAqLworICAgaW50IGxlbl9wZXJfaW1hZ2U7CQkJLyogbGVuZ3RoIHBlciBpbWFnZSAqLworICAgaW50IGltYWdlX3JlYWRfcG9zOwkJCS8qIEluIGNhc2Ugd2UgcmVhZCBkYXRhIGluIHBpZWNlcywga2VlcCB0cmFjayBvZiB3ZXJlIHdlIGFyZSBpbiB0aGUgaW1hZ2VidWZmZXIgKi8KKyAgIGludCBpbWFnZV91c2VkW01BWF9JTUFHRVNdOwkJLyogRm9yIE1DQVBUVVJFIGFuZCBTWU5DICovCisKKyAgIHN0cnVjdCBzZW1hcGhvcmUgbW9kbG9jazsJCS8qIHRvIHByZXZlbnQgcmFjZXMgaW4gdmlkZW9fb3BlbigpLCBldGMgKi8KKyAgIHNwaW5sb2NrX3QgcHRybG9jazsJCQkvKiBmb3IgbWFuaXB1bGF0aW5nIHRoZSBidWZmZXIgcG9pbnRlcnMgKi8KKworICAgLyoqKiBtb3Rvcml6ZWQgcGFuL3RpbHQgZmVhdHVyZSAqLworICAgc3RydWN0IHB3Y19tcHRfcmFuZ2UgYW5nbGVfcmFuZ2U7CisgICBpbnQgcGFuX2FuZ2xlOwkJCS8qIGluIGRlZ3JlZXMgKiAxMDAgKi8KKyAgIGludCB0aWx0X2FuZ2xlOwkJCS8qIGFic29sdXRlIGFuZ2xlOyAwLDAgaXMgaG9tZSBwb3NpdGlvbiAqLworCisgICAvKioqIE1pc2MuIGRhdGEgKioqLworICAgd2FpdF9xdWV1ZV9oZWFkX3QgZnJhbWVxOwkJLyogV2hlbiB3YWl0aW5nIGZvciBhIGZyYW1lIHRvIGZpbmlzaC4uLiAqLworI2lmIFBXQ19JTlRfUElQRQorICAgdm9pZCAqdXNiX2ludF9oYW5kbGVyOwkJLyogZm9yIHRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQgKi8KKyNlbmRpZgorfTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIEdsb2JhbCB2YXJpYWJsZXMgKi8KK2V4dGVybiBpbnQgcHdjX3RyYWNlOworZXh0ZXJuIGludCBwd2NfcHJlZmVycmVkX2NvbXByZXNzaW9uOworCisvKiogZnVuY3Rpb25zIGluIHB3Yy1pZi5jICovCitpbnQgcHdjX3RyeV92aWRlb19tb2RlKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBuZXdfZnBzLCBpbnQgbmV3X2NvbXByZXNzaW9uLCBpbnQgbmV3X3NuYXBzaG90KTsKKworLyoqIEZ1bmN0aW9ucyBpbiBwd2MtbWlzYy5jICovCisvKiBzaXplcyBpbiBwaXhlbHMgKi8KK2V4dGVybiBzdHJ1Y3QgcHdjX2Nvb3JkIHB3Y19pbWFnZV9zaXplc1tQU1pfTUFYXTsKKworaW50IHB3Y19kZWNvZGVfc2l6ZShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKK3ZvaWQgcHdjX2NvbnN0cnVjdChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldik7CisKKy8qKiBGdW5jdGlvbnMgaW4gcHdjLWN0cmwuYyAqLworLyogUmVxdWVzdCBhIGNlcnRhaW4gdmlkZW8gbW9kZS4gUmV0dXJucyA8IDAgaWYgbm90IHBvc3NpYmxlICovCitleHRlcm4gaW50IHB3Y19zZXRfdmlkZW9fbW9kZShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnJhbWVzLCBpbnQgY29tcHJlc3Npb24sIGludCBzbmFwc2hvdCk7CisvKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBieXRlcyBwZXIgaW1hZ2UgKG5vdCBmcmFtZSkgKi8KK2V4dGVybiB2b2lkIHB3Y19zZXRfaW1hZ2VfYnVmZmVyX3NpemUoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpOworCisvKiBWYXJpb3VzIGNvbnRyb2xzOyBzaG91bGQgYmUgb2J2aW91cy4gVmFsdWUgMC4uNjU1MzUsIG9yIDwgMCBvbiBlcnJvciAqLworZXh0ZXJuIGludCBwd2NfZ2V0X2JyaWdodG5lc3Moc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpOworZXh0ZXJuIGludCBwd2Nfc2V0X2JyaWdodG5lc3Moc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCB2YWx1ZSk7CitleHRlcm4gaW50IHB3Y19nZXRfY29udHJhc3Qoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpOworZXh0ZXJuIGludCBwd2Nfc2V0X2NvbnRyYXN0KHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgdmFsdWUpOworZXh0ZXJuIGludCBwd2NfZ2V0X2dhbW1hKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KTsKK2V4dGVybiBpbnQgcHdjX3NldF9nYW1tYShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHZhbHVlKTsKK2V4dGVybiBpbnQgcHdjX2dldF9zYXR1cmF0aW9uKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KTsKK2V4dGVybiBpbnQgcHdjX3NldF9zYXR1cmF0aW9uKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgdmFsdWUpOworZXh0ZXJuIGludCBwd2Nfc2V0X2xlZHMoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBvbl92YWx1ZSwgaW50IG9mZl92YWx1ZSk7CitleHRlcm4gaW50IHB3Y19nZXRfbGVkcyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICpvbl92YWx1ZSwgaW50ICpvZmZfdmFsdWUpOworZXh0ZXJuIGludCBwd2NfZ2V0X2Ntb3Nfc2Vuc29yKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKnNlbnNvcik7CisKKy8qIFBvd2VyIGRvd24gb3IgdXAgdGhlIGNhbWVyYTsgbm90IHN1cHBvcnRlZCBieSBhbGwgbW9kZWxzICovCitleHRlcm4gaW50IHB3Y19jYW1lcmFfcG93ZXIoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBwb3dlcik7CisKKy8qIFByaXZhdGUgaW9jdGwoKXM7IHNlZSBwd2MtaW9jdGwuaCAqLworZXh0ZXJuIGludCBwd2NfaW9jdGwoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CisKKworLyoqIHB3Yy11bmNvbXByZXNzLmMgKi8KKy8qIEV4cGFuZCBmcmFtZSB0byBpbWFnZSwgcG9zc2libHkgaW5jbHVkaW5nIGRlY29tcHJlc3Npb24uIFVzZXMgcmVhZF9mcmFtZSBhbmQgZmlsbF9pbWFnZSAqLworZXh0ZXJuIGludCBwd2NfZGVjb21wcmVzcyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9zZTQwMS5jIGIvZHJpdmVycy91c2IvbWVkaWEvc2U0MDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODViZGFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvc2U0MDEuYwpAQCAtMCwwICsxLDE0MzYgQEAKKy8qCisgKiBFbmRwb2ludHMgKGZvcm1lcmx5IGtub3duIGFzIEFPWCkgc2U0MDEgVVNCIENhbWVyYSBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAgSmVyb2VuIEIuIFZyZWVrZW4gKHBlMXJ4cUBhbXNhdC5vcmcpCisgKgorICogU3RpbGwgc29tZXdoYXQgYmFzZWQgb24gdGhlIExpbnV4IG92NTExIGRyaXZlci4KKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICoKKyAqIFRoYW5rcyB0byBFbmRwb2ludHMgSW5jLiAod3d3LmVuZHBvaW50cy5jb20pIGZvciBtYWtpbmcgZG9jdW1lbnRhdGlvbiBvbgorICogdGhlaXIgY2hpcHNldCBhdmFpbGFibGUgYW5kIHN1cHBvcnRpbmcgbWUgd2hpbGUgd3JpdGluZyB0aGlzIGRyaXZlci4KKyAqIAktIEplcm9lbiBWcmVla2VuCisgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdID0gIjAuMjQiOworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInNlNDAxLmgiCisKK3N0YXRpYyBpbnQgZmxpY2tlcmxlc3M9MDsKK3N0YXRpYyBpbnQgdmlkZW9fbnIgPSAtMTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoMHgwM2U4LCAweDAwMDQpIH0sLyogRW5kcG9pbnRzL0FveCBTRTQwMSAqLworCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MDMwYikgfSwvKiBQaGlsaXBzIFBDVkM2NjVLICovCisJeyBVU0JfREVWSUNFKDB4MDQ3ZCwgMHg1MDAxKSB9LC8qIEtlbnNpbmd0b24gNjcwMTQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDdkLCAweDUwMDIpIH0sLyogS2Vuc2luZ3RvbiA2NzAxKDUvNykgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDdkLCAweDUwMDMpIH0sLyogS2Vuc2luZ3RvbiA2NzAxNiAqLworCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKK01PRFVMRV9BVVRIT1IoIkplcm9lbiBWcmVla2VuIDxwZTFyeHFAYW1zYXQub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTRTQwMSBVU0IgQ2FtZXJhIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworbW9kdWxlX3BhcmFtKGZsaWNrZXJsZXNzLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhmbGlja2VybGVzcywgIk5ldCBmcmVxdWVuY3kgdG8gYWRqdXN0IGV4cG9zdXJlIHRpbWUgdG8gKDAvNTAvNjApIik7Cittb2R1bGVfcGFyYW0odmlkZW9fbnIsIGludCwgMCk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZTQwMV9kcml2ZXI7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBNZW1vcnkgbWFuYWdlbWVudAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgKnJ2bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl2b2lkICptZW07CisJdW5zaWduZWQgbG9uZyBhZHI7CisKKwlzaXplID0gUEFHRV9BTElHTihzaXplKTsKKwltZW0gPSB2bWFsbG9jXzMyKHNpemUpOworCWlmICghbWVtKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldChtZW0sIDAsIHNpemUpOyAvKiBDbGVhciB0aGUgcmFtIG91dCwgbm8ganVuayB0byB0aGUgdXNlciAqLworCWFkciA9ICh1bnNpZ25lZCBsb25nKSBtZW07CisJd2hpbGUgKHNpemUgPiAwKSB7CisJCVNldFBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKKwkJYWRyICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCisJcmV0dXJuIG1lbTsKK30KKworc3RhdGljIHZvaWQgcnZmcmVlKHZvaWQgKm1lbSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgYWRyOworCisJaWYgKCFtZW0pCisJCXJldHVybjsKKworCWFkciA9ICh1bnNpZ25lZCBsb25nKSBtZW07CisJd2hpbGUgKChsb25nKSBzaXplID4gMCkgeworCQlDbGVhclBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKKwkJYWRyICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCXZmcmVlKG1lbSk7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHNlNDAxIHJlZ2lzdGVyIHJlYWQvd3JpdGUgZnVuY3Rpb25zCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBzZTQwMV9zbmRjdHJsKGludCBzZXQsIHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxLCB1bnNpZ25lZCBzaG9ydCByZXEsCisJCQkgdW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIGNoYXIgKmNwLCBpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnICgKKyAgICAgICAgICAgICAgICBzZTQwMS0+ZGV2LAorICAgICAgICAgICAgICAgIHNldCA/IHVzYl9zbmRjdHJscGlwZShzZTQwMS0+ZGV2LCAwKSA6IHVzYl9yY3ZjdHJscGlwZShzZTQwMS0+ZGV2LCAwKSwKKyAgICAgICAgICAgICAgICByZXEsCisgICAgICAgICAgICAgICAgKHNldCA/IFVTQl9ESVJfT1VUIDogVVNCX0RJUl9JTikgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorICAgICAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgY3AsCisgICAgICAgICAgICAgICAgc2l6ZSwKKyAgICAgICAgICAgICAgICAxMDAwCisgICAgICAgICk7Cit9CisKK3N0YXRpYyBpbnQgc2U0MDFfc2V0X2ZlYXR1cmUoc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEsIHVuc2lnbmVkIHNob3J0IHNlbGVjdG9yLAorCQkJICAgICB1bnNpZ25lZCBzaG9ydCBwYXJhbSkKK3sKKwkvKiBzcGVjcyBzYXkgdGhhdCB0aGUgc2VsZWN0b3IgKGFkZHJlc3MpIHNob3VsZCBnbyBpbiB0aGUgdmFsdWUgZmllbGQKKwkgICBhbmQgdGhlIHBhcmFtIGluIGluZGV4LCBidXQgaW4gdGhlIGxvZ3Mgb2YgdGhlIHdpbmRvd3MgZHJpdmVyIHRoZXkgZG8KKwkgICB0aGlzIHRoZSBvdGhlciB3YXkgYXJvdW5kLi4uCisJICovCisJcmV0dXJuIHVzYl9jb250cm9sX21zZyAoCisJCXNlNDAxLT5kZXYsCisJCXVzYl9zbmRjdHJscGlwZShzZTQwMS0+ZGV2LCAwKSwKKwkJU0U0MDFfUkVRX1NFVF9FWFRfRkVBVFVSRSwKKwkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQlwYXJhbSwKKwkJc2VsZWN0b3IsCisgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIDEwMDAKKyAgICAgICAgKTsKK30KKworc3RhdGljIHVuc2lnbmVkIHNob3J0IHNlNDAxX2dldF9mZWF0dXJlKHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxLCAKKwkJCQkgICAgICAgIHVuc2lnbmVkIHNob3J0IHNlbGVjdG9yKQoreworCS8qIEZvciAnc2V0JyB0aGUgc2VsZWNldG9yIHNob3VsZCBiZSBpbiBpbmRleCwgbm90IHN1cmUgaWYgdGhlIHNwZWMgaXMKKwkgICB3cm9uZyBoZXJlIHRvLi4uLgorCSAqLworCXVuc2lnbmVkIGNoYXIgY3BbMl07CisgICAgICAgIHVzYl9jb250cm9sX21zZyAoCisgICAgICAgICAgICAgICAgc2U0MDEtPmRldiwKKyAgICAgICAgICAgICAgICB1c2JfcmN2Y3RybHBpcGUoc2U0MDEtPmRldiwgMCksCisgICAgICAgICAgICAgICAgU0U0MDFfUkVRX0dFVF9FWFRfRkVBVFVSRSwKKyAgICAgICAgICAgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisgICAgICAgIAkwLAorICAgICAgICAgICAgICAgIHNlbGVjdG9yLAorICAgICAgICAgICAgICAgIGNwLAorICAgICAgICAgICAgICAgIDIsCisgICAgICAgICAgICAgICAgMTAwMAorICAgICAgICApOworCXJldHVybiBjcFswXStjcFsxXSoyNTY7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ2FtZXJhIGNvbnRyb2wKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3N0YXRpYyBpbnQgc2U0MDFfc2VuZF9waWN0KHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxKQoreworCXNlNDAxX3NldF9mZWF0dXJlKHNlNDAxLCBIVjcxMzFfUkVHX1RJVEwsIHNlNDAxLT5leHBvc2VfbCk7LyogaW50ZWdyYXRpb24gdGltZSBsb3cgKi8KKwlzZTQwMV9zZXRfZmVhdHVyZShzZTQwMSwgSFY3MTMxX1JFR19USVRNLCBzZTQwMS0+ZXhwb3NlX20pOy8qIGludGVncmF0aW9uIHRpbWUgbWlkICovCisJc2U0MDFfc2V0X2ZlYXR1cmUoc2U0MDEsIEhWNzEzMV9SRUdfVElUVSwgc2U0MDEtPmV4cG9zZV9oKTsvKiBpbnRlZ3JhdGlvbiB0aW1lIG1pZCAqLworCXNlNDAxX3NldF9mZWF0dXJlKHNlNDAxLCBIVjcxMzFfUkVHX0FSTFYsIHNlNDAxLT5yZXNldGxldmVsKTsvKiByZXNldCBsZXZlbCB2YWx1ZSAqLworCXNlNDAxX3NldF9mZWF0dXJlKHNlNDAxLCBIVjcxMzFfUkVHX0FSQ0csIHNlNDAxLT5yZ2Fpbik7LyogcmVkIGNvbG9yIGdhaW4gKi8KKwlzZTQwMV9zZXRfZmVhdHVyZShzZTQwMSwgSFY3MTMxX1JFR19BR0NHLCBzZTQwMS0+Z2dhaW4pOy8qIGdyZWVuIGNvbG9yIGdhaW4gKi8KKwlzZTQwMV9zZXRfZmVhdHVyZShzZTQwMSwgSFY3MTMxX1JFR19BQkNHLCBzZTQwMS0+YmdhaW4pOy8qIGJsdWUgY29sb3IgZ2FpbiAqLworCSAgICAJCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNlNDAxX3NldF9leHBvc3VyZShzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSwgaW50IGJyaWdodG5lc3MpCit7CisJaW50IGludGVncmF0aW9uPWJyaWdodG5lc3M8PDU7CisJCisJaWYgKGZsaWNrZXJsZXNzPT01MCkgeworCQlpbnRlZ3JhdGlvbj1pbnRlZ3JhdGlvbi1pbnRlZ3JhdGlvbiUxMDY2Njc7CisJfQorCWlmIChmbGlja2VybGVzcz09NjApIHsKKwkJaW50ZWdyYXRpb249aW50ZWdyYXRpb24taW50ZWdyYXRpb24lODg4ODk7CisJfQorCXNlNDAxLT5icmlnaHRuZXNzPWludGVncmF0aW9uPj41OworCXNlNDAxLT5leHBvc2VfaD0oaW50ZWdyYXRpb24+PjE2KSYweGZmOworCXNlNDAxLT5leHBvc2VfbT0oaW50ZWdyYXRpb24+PjgpJjB4ZmY7CisJc2U0MDEtPmV4cG9zZV9sPWludGVncmF0aW9uJjB4ZmY7Cit9CisKK3N0YXRpYyBpbnQgc2U0MDFfZ2V0X3BpY3Qoc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEsIHN0cnVjdCB2aWRlb19waWN0dXJlICpwKQoreworCXAtPmJyaWdodG5lc3M9c2U0MDEtPmJyaWdodG5lc3M7CisJaWYgKHNlNDAxLT5lbmhhbmNlKSB7CisJCXAtPndoaXRlbmVzcz0zMjc2ODsKKwl9IGVsc2UgeworCQlwLT53aGl0ZW5lc3M9MDsKKwl9CisJcC0+Y29sb3VyPTY1NTM1OworCXAtPmNvbnRyYXN0PTY1NTM1OworCXAtPmh1ZT1zZTQwMS0+cmdhaW48PDEwOworCXAtPnBhbGV0dGU9c2U0MDEtPnBhbGV0dGU7CisJcC0+ZGVwdGg9MzsgLyogcmdiMjQgKi8KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHNlNDAxX3NldF9waWN0KHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxLCBzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcCkKK3sKKwlpZiAocC0+cGFsZXR0ZSAhPSBWSURFT19QQUxFVFRFX1JHQjI0KQorCQlyZXR1cm4gMTsKKwlzZTQwMS0+cGFsZXR0ZT1wLT5wYWxldHRlOworCWlmIChwLT5odWUhPXNlNDAxLT5odWUpIHsKKwkJc2U0MDEtPnJnYWluPSBwLT5odWU+PjEwOworCQlzZTQwMS0+YmdhaW49IDB4NDAtKHAtPmh1ZT4+MTApOworCQlzZTQwMS0+aHVlPXAtPmh1ZTsKKwl9CisJaWYgKHAtPmJyaWdodG5lc3MhPXNlNDAxLT5icmlnaHRuZXNzKSB7CisJCXNlNDAxX3NldF9leHBvc3VyZShzZTQwMSwgcC0+YnJpZ2h0bmVzcyk7CisJfQorCWlmIChwLT53aGl0ZW5lc3M+PTMyNzY4KSB7CisJCXNlNDAxLT5lbmhhbmNlPTE7CisJfSBlbHNlIHsKKwkJc2U0MDEtPmVuaGFuY2U9MDsKKwl9CisJc2U0MDFfc2VuZF9waWN0KHNlNDAxKTsKKwlzZTQwMV9zZW5kX3BpY3Qoc2U0MDEpOworCXJldHVybiAwOworfQorCisvKgorCUh5dW5kYWkgaGF2ZSBzb21lIHJlYWxseSBuaWNlIGRvY3MgYWJvdXQgdGhpcyBhbmQgb3RoZXIgc2Vuc29yIHJlbGF0ZWQKKwlzdHVmZiBvbiB0aGVpciBob21lcGFnZTogd3d3LmhlaS5jby5rcgorKi8KK3N0YXRpYyB2b2lkIHNlNDAxX2F1dG9fcmVzZXRsZXZlbChzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSkKK3sKKwl1bnNpZ25lZCBpbnQgYWhyYywgYWxyYzsKKwlpbnQgb2xkcmVzZXQ9c2U0MDEtPnJlc2V0bGV2ZWw7CisKKwkvKiBGb3Igc29tZSByZWFzb24gdGhpcyBub3JtYWxseSByZWFkLW9ubHkgcmVnaXN0ZXIgZG9lc24ndCBnZXQgcmVzZXQKKwkgICB0byB6ZXJvIGFmdGVyIHJlYWRpbmcgdGhlbSBqdXN0IG9uY2UuLi4KKwkgKi8KKwlzZTQwMV9nZXRfZmVhdHVyZShzZTQwMSwgSFY3MTMxX1JFR19ISVJFRk5PSCk7IAorCXNlNDAxX2dldF9mZWF0dXJlKHNlNDAxLCBIVjcxMzFfUkVHX0hJUkVGTk9MKTsKKwlzZTQwMV9nZXRfZmVhdHVyZShzZTQwMSwgSFY3MTMxX1JFR19MT1JFRk5PSCk7CisJc2U0MDFfZ2V0X2ZlYXR1cmUoc2U0MDEsIEhWNzEzMV9SRUdfTE9SRUZOT0wpOworCWFocmM9MjU2KnNlNDAxX2dldF9mZWF0dXJlKHNlNDAxLCBIVjcxMzFfUkVHX0hJUkVGTk9IKSArIAorCSAgICBzZTQwMV9nZXRfZmVhdHVyZShzZTQwMSwgSFY3MTMxX1JFR19ISVJFRk5PTCk7CisJYWxyYz0yNTYqc2U0MDFfZ2V0X2ZlYXR1cmUoc2U0MDEsIEhWNzEzMV9SRUdfTE9SRUZOT0gpICsKKwkgICAgc2U0MDFfZ2V0X2ZlYXR1cmUoc2U0MDEsIEhWNzEzMV9SRUdfTE9SRUZOT0wpOworCisJLyogTm90IGFuIGV4YWN0IHNjaWVuY2UsIGJ1dCBpdCBzZWVtcyB0byB3b3JrIHByZXR0eSB3ZWxsLi4uICovCisJaWYgKGFscmMgPiAxMCkgeworCQl3aGlsZSAoYWxyYz49MTAgJiYgc2U0MDEtPnJlc2V0bGV2ZWwgPCA2MykgeworCQkJc2U0MDEtPnJlc2V0bGV2ZWwrKzsKKwkJCWFscmMgLz0yOworCQl9CisJfSBlbHNlIGlmIChhaHJjID4gMjApIHsKKwkJd2hpbGUgKGFocmM+PTIwICYmIHNlNDAxLT5yZXNldGxldmVsID4gMCkgeworCQkJc2U0MDEtPnJlc2V0bGV2ZWwtLTsKKwkJCWFocmMgLz0yOworCQl9CisJfQorCWlmIChzZTQwMS0+cmVzZXRsZXZlbCE9b2xkcmVzZXQpCisJCXNlNDAxX3NldF9mZWF0dXJlKHNlNDAxLCBIVjcxMzFfUkVHX0FSTFYsIHNlNDAxLT5yZXNldGxldmVsKTsKKworCXJldHVybjsKK30KKworLyogaXJxIGhhbmRsZXIgZm9yIHNuYXBzaG90IGJ1dHRvbiAqLworc3RhdGljIHZvaWQgc2U0MDFfYnV0dG9uX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxID0gdXJiLT5jb250ZXh0OworCWludCBzdGF0dXM7CisJCisJaWYgKCFzZTQwMS0+ZGV2KSB7CisJCWluZm8oIm9ob2g6IGRldmljZSB2YXBvdXJpc2hlZCIpOworCQlyZXR1cm47CisJfQorCQorCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+PTIpIHsKKwkJaWYgKHNlNDAxLT5idXR0b24pCisJCQlzZTQwMS0+YnV0dG9ucHJlc3NlZD0xOworCX0KK2V4aXQ6CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cykKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgc2U0MDFfdmlkZW9faXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEgPSB1cmItPmNvbnRleHQ7CisJaW50IGxlbmd0aCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKworCS8qIG9ob2guLi4gKi8KKwlpZiAoIXNlNDAxLT5zdHJlYW1pbmcpCisJCXJldHVybjsKKworCWlmICghc2U0MDEtPmRldikgeworCQlpbmZvICgib2hvaDogZGV2aWNlIHZhcG91cmlzaGVkIik7CisJCXJldHVybjsKKwl9CisKKwkvKiAwIHNpemVkIHBhY2tldHMgaGFwcGVuIGlmIHdlIGFyZSB0byBmYXN0LCBidXQgc29tZXRpbWVzIHRoZSBjYW1lcmEKKwkgICBrZWVwcyBzZW5kaW5nIHRoZW0gZm9yZXZlci4uLgorCSAqLworCWlmIChsZW5ndGggJiYgIXVyYi0+c3RhdHVzKSB7CisJCXNlNDAxLT5udWxscGFja2V0cz0wOworCQlzd2l0Y2goc2U0MDEtPnNjcmF0Y2hbc2U0MDEtPnNjcmF0Y2hfbmV4dF0uc3RhdGUpIHsKKwkJCWNhc2UgQlVGRkVSX1JFQURZOgorCQkJY2FzZSBCVUZGRVJfQlVTWTogeworCQkJCXNlNDAxLT5kcm9wcGVkKys7CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIEJVRkZFUl9VTlVTRUQ6IHsKKwkJCQltZW1jcHkoc2U0MDEtPnNjcmF0Y2hbc2U0MDEtPnNjcmF0Y2hfbmV4dF0uZGF0YSwgKHVuc2lnbmVkIGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlciwgbGVuZ3RoKTsKKwkJCQlzZTQwMS0+c2NyYXRjaFtzZTQwMS0+c2NyYXRjaF9uZXh0XS5zdGF0ZT1CVUZGRVJfUkVBRFk7CisJCQkJc2U0MDEtPnNjcmF0Y2hbc2U0MDEtPnNjcmF0Y2hfbmV4dF0ub2Zmc2V0PXNlNDAxLT5iYXllcm9mZnNldDsKKwkJCQlzZTQwMS0+c2NyYXRjaFtzZTQwMS0+c2NyYXRjaF9uZXh0XS5sZW5ndGg9bGVuZ3RoOworCQkJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZzZTQwMS0+d3EpKSB7CisJCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc2U0MDEtPndxKTsKKwkJCQl9CisJCQkJc2U0MDEtPnNjcmF0Y2hfb3ZlcmZsb3c9MDsKKwkJCQlzZTQwMS0+c2NyYXRjaF9uZXh0Kys7CisJCQkJaWYgKHNlNDAxLT5zY3JhdGNoX25leHQ+PVNFNDAxX05VTVNDUkFUQ0gpCisJCQkJCXNlNDAxLT5zY3JhdGNoX25leHQ9MDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlzZTQwMS0+YmF5ZXJvZmZzZXQrPWxlbmd0aDsKKwkJaWYgKHNlNDAxLT5iYXllcm9mZnNldD49c2U0MDEtPmNoZWlnaHQqc2U0MDEtPmN3aWR0aCkgeworCQkJc2U0MDEtPmJheWVyb2Zmc2V0PTA7CisJCX0KKwl9IGVsc2UgeworCQlzZTQwMS0+bnVsbHBhY2tldHMrKzsKKwkJaWYgKHNlNDAxLT5udWxscGFja2V0cyA+IFNFNDAxX01BWF9OVUxMUEFDS0VUUykgeworCQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnNlNDAxLT53cSkpIHsKKwkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNlNDAxLT53cSk7CisJCQl9CQkKKwkJfQorCX0KKworCS8qIFJlc3VibWl0IHVyYiBmb3IgbmV3IGRhdGEgKi8KKwl1cmItPnN0YXR1cz0wOworCXVyYi0+ZGV2PXNlNDAxLT5kZXY7CisJaWYodXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKSkKKwkJaW5mbygidXJiIGJ1cm5lZCBkb3duIik7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBzZTQwMV9zZW5kX3NpemUoc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKwlpbnQgaT0wOworCWludCBtb2RlPTB4MDM7IC8qIE5vIGNvbXByZXNzaW9uICovCisJaW50IHNlbmRoZWlnaHQ9aGVpZ2h0OworCWludCBzZW5kd2lkdGg9d2lkdGg7CisKKwkvKiBKYW5nR3UgY29tcHJlc3Npb24gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSBjYW1lcmEgc3VwcG9ydGVkIHNpemVzLAorCSAgIGJ1dCBiYXllciBzZWVtcyB0byB3b3JrIHdpdGggYW55IHNpemUgdGhhdCBmaXRzIG9uIHRoZSBzZW5zb3IuCisJICAgV2UgY2hlY2sgaWYgd2UgY2FuIHVzZSBjb21wcmVzc2lvbiB3aXRoIHRoZSBjdXJyZW50IHNpemUgd2l0aCBlaXRoZXIKKwkgICA0IG9yIDE2IHRpbWVzIHN1YmNhcHR1cmluZywgaWYgbm90IHdlIHVzZSB1bmNvbXByZXNzZWQgYmF5ZXIgZGF0YQorCSAgIGJ1dCB0aGlzIHdpbGwgcmVzdWx0IGluIGN1dG91dHMgb2YgdGhlIG1heGltdW0gc2l6ZS4uLi4KKwkgKi8KKwl3aGlsZSAoaTxzZTQwMS0+c2l6ZXMgJiYgIShzZTQwMS0+d2lkdGhbaV09PXdpZHRoICYmIHNlNDAxLT5oZWlnaHRbaV09PWhlaWdodCkpCisJCWkrKzsKKwl3aGlsZSAoaTxzZTQwMS0+c2l6ZXMpIHsKKwkJaWYgKHNlNDAxLT53aWR0aFtpXT09d2lkdGgqMiAmJiBzZTQwMS0+aGVpZ2h0W2ldPT1oZWlnaHQqMikgeworCQkJc2VuZGhlaWdodD1zZTQwMS0+aGVpZ2h0W2ldOworCQkJc2VuZHdpZHRoPXNlNDAxLT53aWR0aFtpXTsKKwkJCW1vZGU9MHg0MDsKKwkJfQorCQlpZiAoc2U0MDEtPndpZHRoW2ldPT13aWR0aCo0ICYmIHNlNDAxLT5oZWlnaHRbaV09PWhlaWdodCo0KSB7CisJCQlzZW5kaGVpZ2h0PXNlNDAxLT5oZWlnaHRbaV07CisJCQlzZW5kd2lkdGg9c2U0MDEtPndpZHRoW2ldOworCQkJbW9kZT0weDQyOworCQl9CisJCWkrKzsKKwl9CisKKwlzZTQwMV9zbmRjdHJsKDEsIHNlNDAxLCBTRTQwMV9SRVFfU0VUX1dJRFRILCBzZW5kd2lkdGgsIE5VTEwsIDApOworCXNlNDAxX3NuZGN0cmwoMSwgc2U0MDEsIFNFNDAxX1JFUV9TRVRfSEVJR0hULCBzZW5kaGVpZ2h0LCBOVUxMLCAwKTsKKwlzZTQwMV9zZXRfZmVhdHVyZShzZTQwMSwgU0U0MDFfT1BFUkFUSU5HTU9ERSwgbW9kZSk7CisKKwlpZiAobW9kZT09MHgwMykgeworCQlzZTQwMS0+Zm9ybWF0PUZNVF9CQVlFUjsKKwl9IGVsc2UgeworCQlzZTQwMS0+Zm9ybWF0PUZNVF9KQU5HR1U7CisJfQorCisJcmV0dXJuOworfQorCisvKgorCUluIHRoaXMgZnVuY3Rpb24gc2U0MDFfc2VuZF9waWN0IGlzIGNhbGxlZCBzZXZlcmFsIHRpbWVzLAorCWZvciBzb21lIHJlYXNvbiAoZGVwZW5kaW5nIG9uIHRoZSBzdGF0ZSBvZiB0aGUgc2Vuc29yIGFuZCB0aGUgcGhhc2Ugb2YKKwl0aGUgbW9vbiA6KSBkb2luZyB0aGlzIG9ubHkgaW4gZWl0aGVyIHBsYWNlIGRvZXNuJ3QgYWx3YXlzIHdvcmsuLi4KKyovCitzdGF0aWMgaW50IHNlNDAxX3N0YXJ0X3N0cmVhbShzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSkKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGVycj0wLCBpOworCXNlNDAxLT5zdHJlYW1pbmc9MTsKKworICAgICAgICBzZTQwMV9zbmRjdHJsKDEsIHNlNDAxLCBTRTQwMV9SRVFfQ0FNRVJBX1BPV0VSLCAxLCBOVUxMLCAwKTsKKyAgICAgICAgc2U0MDFfc25kY3RybCgxLCBzZTQwMSwgU0U0MDFfUkVRX0xFRF9DT05UUk9MLCAxLCBOVUxMLCAwKTsKKworCS8qIFNldCBwaWN0dXJlIHNldHRpbmdzICovCisJc2U0MDFfc2V0X2ZlYXR1cmUoc2U0MDEsIEhWNzEzMV9SRUdfTU9ERV9CLCAweDA1KTsvKndpbmRvd2VkICsgcGl4IGludGcgKi8KKwlzZTQwMV9zZW5kX3BpY3Qoc2U0MDEpOworCisJc2U0MDFfc2VuZF9zaXplKHNlNDAxLCBzZTQwMS0+Y3dpZHRoLCBzZTQwMS0+Y2hlaWdodCk7CisKKwlzZTQwMV9zbmRjdHJsKDEsIHNlNDAxLCBTRTQwMV9SRVFfU1RBUlRfQ09OVElOVU9VU19DQVBUVVJFLCAwLCBOVUxMLCAwKTsKKworCS8qIERvIHNvbWUgbWVtb3J5IGFsbG9jYXRpb24gKi8KKwlmb3IgKGk9MDsgaTxTRTQwMV9OVU1GUkFNRVM7IGkrKykgeworCQlzZTQwMS0+ZnJhbWVbaV0uZGF0YT1zZTQwMS0+ZmJ1ZiArIGkgKiBzZTQwMS0+bWF4ZnJhbWVzaXplOworCQlzZTQwMS0+ZnJhbWVbaV0uY3VycGl4PTA7CisJfQorCWZvciAoaT0wOyBpPFNFNDAxX05VTVNCVUY7IGkrKykgeworCQlzZTQwMS0+c2J1ZltpXS5kYXRhPWttYWxsb2MoU0U0MDFfUEFDS0VUU0laRSwgR0ZQX0tFUk5FTCk7CisJfQorCisJc2U0MDEtPmJheWVyb2Zmc2V0PTA7CisJc2U0MDEtPnNjcmF0Y2hfbmV4dD0wOworCXNlNDAxLT5zY3JhdGNoX3VzZT0wOworCXNlNDAxLT5zY3JhdGNoX292ZXJmbG93PTA7CisJZm9yIChpPTA7IGk8U0U0MDFfTlVNU0NSQVRDSDsgaSsrKSB7CisJCXNlNDAxLT5zY3JhdGNoW2ldLmRhdGE9a21hbGxvYyhTRTQwMV9QQUNLRVRTSVpFLCBHRlBfS0VSTkVMKTsKKwkJc2U0MDEtPnNjcmF0Y2hbaV0uc3RhdGU9QlVGRkVSX1VOVVNFRDsKKwl9CisKKwlmb3IgKGk9MDsgaTxTRTQwMV9OVU1TQlVGOyBpKyspIHsKKwkJdXJiPXVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCWlmKCF1cmIpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHNlNDAxLT5kZXYsCisJCQl1c2JfcmN2YnVsa3BpcGUoc2U0MDEtPmRldiwgU0U0MDFfVklERU9fRU5EUE9JTlQpLAorCQkJc2U0MDEtPnNidWZbaV0uZGF0YSwgU0U0MDFfUEFDS0VUU0laRSwKKwkJCXNlNDAxX3ZpZGVvX2lycSwKKwkJCXNlNDAxKTsKKworCQlzZTQwMS0+dXJiW2ldPXVyYjsKKworCQllcnI9dXNiX3N1Ym1pdF91cmIoc2U0MDEtPnVyYltpXSwgR0ZQX0tFUk5FTCk7CisJCWlmKGVycikKKwkJCWVycigidXJiIGJ1cm5lZCBkb3duIik7CisJfQorCisJc2U0MDEtPmZyYW1lY291bnQ9MDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlNDAxX3N0b3Bfc3RyZWFtKHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxKQoreworCWludCBpOworCisJaWYgKCFzZTQwMS0+c3RyZWFtaW5nIHx8ICFzZTQwMS0+ZGV2KQorCQlyZXR1cm4gMTsKKworCXNlNDAxLT5zdHJlYW1pbmc9MDsKKworCXNlNDAxX3NuZGN0cmwoMSwgc2U0MDEsIFNFNDAxX1JFUV9TVE9QX0NPTlRJTlVPVVNfQ0FQVFVSRSwgMCwgTlVMTCwgMCk7CisKKwlzZTQwMV9zbmRjdHJsKDEsIHNlNDAxLCBTRTQwMV9SRVFfTEVEX0NPTlRST0wsIDAsIE5VTEwsIDApOworCXNlNDAxX3NuZGN0cmwoMSwgc2U0MDEsIFNFNDAxX1JFUV9DQU1FUkFfUE9XRVIsIDAsIE5VTEwsIDApOworCisJZm9yIChpPTA7IGk8U0U0MDFfTlVNU0JVRjsgaSsrKSBpZiAoc2U0MDEtPnVyYltpXSkgeworCQl1c2Jfa2lsbF91cmIoc2U0MDEtPnVyYltpXSk7CisJCXVzYl9mcmVlX3VyYihzZTQwMS0+dXJiW2ldKTsKKwkJc2U0MDEtPnVyYltpXT1OVUxMOworCQlrZnJlZShzZTQwMS0+c2J1ZltpXS5kYXRhKTsKKwl9CisJZm9yIChpPTA7IGk8U0U0MDFfTlVNU0NSQVRDSDsgaSsrKSB7CisJCWtmcmVlKHNlNDAxLT5zY3JhdGNoW2ldLmRhdGEpOworCQlzZTQwMS0+c2NyYXRjaFtpXS5kYXRhPU5VTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2U0MDFfc2V0X3NpemUoc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKwlpbnQgd2Fzc3RyZWFtaW5nPXNlNDAxLT5zdHJlYW1pbmc7CisJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gY2hhbmdlICovCisJaWYgKHNlNDAxLT5jd2lkdGg9PXdpZHRoICYmIHNlNDAxLT5jaGVpZ2h0PT1oZWlnaHQpCisJCXJldHVybiAwOworCisJLyogQ2hlY2sgZm9yIGEgdmFsaWQgbW9kZSAqLworCWlmICghd2lkdGggfHwgIWhlaWdodCkKKwkJcmV0dXJuIDE7CisJaWYgKCh3aWR0aCAmIDEpIHx8IChoZWlnaHQgJiAxKSkKKwkJcmV0dXJuIDE7CisJaWYgKHdpZHRoPnNlNDAxLT53aWR0aFtzZTQwMS0+c2l6ZXMtMV0pCisJCXJldHVybiAxOworCWlmIChoZWlnaHQ+c2U0MDEtPmhlaWdodFtzZTQwMS0+c2l6ZXMtMV0pCisJCXJldHVybiAxOworCisJLyogU3RvcCBhIGN1cnJlbnQgc3RyZWFtIGFuZCBzdGFydCBpdCBhZ2FpbiBhdCB0aGUgbmV3IHNpemUgKi8KKwlpZiAod2Fzc3RyZWFtaW5nKQorCQlzZTQwMV9zdG9wX3N0cmVhbShzZTQwMSk7CisJc2U0MDEtPmN3aWR0aD13aWR0aDsKKwlzZTQwMS0+Y2hlaWdodD1oZWlnaHQ7CisJaWYgKHdhc3N0cmVhbWluZykKKwkJc2U0MDFfc3RhcnRfc3RyZWFtKHNlNDAxKTsKKwlyZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFZpZGVvIERlY29kaW5nCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKwlUaGlzIHNob3VsZG4ndCByZWFsbHkgYmUgZG9uZSBpbiBhIHY0bCBkcml2ZXIuLi4uCisJQnV0IGl0IGRvZXMgbWFrZSB0aGUgaW1hZ2UgbG9vayBhIGxvdCBtb3JlIHVzYWJsZS4KKwlCYXNpY2FsbHkgaXQgbGlmdHMgdGhlIGRhcmsgcGl4ZWxzIG1vcmUgdGhhbiB0aGUgbGlnaHQgcGl4ZWxzLgorKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmhhbmNlX3BpY3R1cmUodW5zaWduZWQgY2hhciAqZnJhbWUsIGludCBsZW4pCit7CisJd2hpbGUgKGxlbi0tKSB7CisJCSpmcmFtZT0oKCgqZnJhbWVeMjU1KSooKmZyYW1lXjI1NSkpLzI1NSleMjU1OworCQlmcmFtZSsrOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlY29kZV9KYW5nR3VfaW50ZWdyYXRlKHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxLCBpbnQgZGF0YSkKK3sKKwlzdHJ1Y3Qgc2U0MDFfZnJhbWUgKmZyYW1lPSZzZTQwMS0+ZnJhbWVbc2U0MDEtPmN1cmZyYW1lXTsKKwlpbnQgbGluZWxlbmd0aD1zZTQwMS0+Y3dpZHRoKjM7CisKKwlpZiAoZnJhbWUtPmN1cmxpbmVwaXggPj0gbGluZWxlbmd0aCkgeworCQlmcmFtZS0+Y3VybGluZXBpeD0wOworCQlmcmFtZS0+Y3VybGluZSs9bGluZWxlbmd0aDsKKwl9CisKKwkvKiBGaXJzdCB0aHJlZSBhcmUgYWJzb2x1dGUsIGFsbCBvdGhlcnMgcmVsYXRpdmUuCisJICogRm9ybWF0IGlzIHJnYiBmcm9tIHJpZ2h0IHRvIGxlZnQgKG1pcnJvcnJlZCBpbWFnZSksIAorCSAqIHdlIGZsaXAgaXQgdG8gZ2V0IGJnciBmcm9tIGxlZnQgdG8gcmlnaHQuICovCisJaWYgKGZyYW1lLT5jdXJsaW5lcGl4IDwgMykgeworCQkqKGZyYW1lLT5jdXJsaW5lLWZyYW1lLT5jdXJsaW5lcGl4KT0xK2RhdGEqNDsKKwl9IGVsc2UgeworCQkqKGZyYW1lLT5jdXJsaW5lLWZyYW1lLT5jdXJsaW5lcGl4KT0KKwkJICAgICooZnJhbWUtPmN1cmxpbmUtZnJhbWUtPmN1cmxpbmVwaXgrMykrZGF0YSo0OworCX0KKwlmcmFtZS0+Y3VybGluZXBpeCsrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVjb2RlX0phbmdHdV92bGMgKHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgYml0X2V4cCwgaW50IHBhY2tldGxlbmd0aCkKK3sKKwlpbnQgcG9zPTA7CisJaW50IHZsY19jb2Q9MDsKKwlpbnQgdmxjX3NpemU9MDsKKwlpbnQgdmxjX2RhdGE9MDsKKwlpbnQgYml0X2N1cjsKKwlpbnQgYml0OworCWRhdGErPTQ7CisJd2hpbGUgKHBvcyA8IHBhY2tldGxlbmd0aCkgeworCQliaXRfY3VyPTg7CisJCXdoaWxlIChiaXRfY3VyICYmIGJpdF9leHApIHsKKwkJCWJpdD0oKCpkYXRhKT4+KGJpdF9jdXItMSkpJjE7CisJCQlpZiAoIXZsY19jb2QpIHsKKwkJCQlpZiAoYml0KSB7CisJCQkJCXZsY19zaXplKys7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKCF2bGNfc2l6ZSkgeworCQkJCQkJZGVjb2RlX0phbmdHdV9pbnRlZ3JhdGUoc2U0MDEsIDApOworCQkJCQl9IGVsc2UgeworCQkJCQkJdmxjX2NvZD0yOworCQkJCQkJdmxjX2RhdGE9MDsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKHZsY19jb2Q9PTIpIHsKKwkJCQkJaWYgKCFiaXQpCisJCQkJCQl2bGNfZGF0YSA9ICAtKDE8PHZsY19zaXplKSArIDE7CisJCQkJCXZsY19jb2QtLTsKKwkJCQl9CisJCQkJdmxjX3NpemUtLTsKKwkJCQl2bGNfZGF0YSs9Yml0PDx2bGNfc2l6ZTsKKwkJCQlpZiAoIXZsY19zaXplKSB7CisJCQkJCWRlY29kZV9KYW5nR3VfaW50ZWdyYXRlKHNlNDAxLCB2bGNfZGF0YSk7CisJCQkJCXZsY19jb2Q9MDsKKwkJCQl9CisJCQl9CisJCQliaXRfY3VyLS07CisJCQliaXRfZXhwLS07CisJCX0KKwkJcG9zKys7CisJCWRhdGErKzsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWNvZGVfSmFuZ0d1IChzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSwgc3RydWN0IHNlNDAxX3NjcmF0Y2ggKmJ1ZmZlcikKK3sKKwl1bnNpZ25lZCBjaGFyICpkYXRhPWJ1ZmZlci0+ZGF0YTsKKwlpbnQgbGVuPWJ1ZmZlci0+bGVuZ3RoOworCWludCBiaXRfZXhwPTAsIHBpeF9leHA9MCwgZnJhbWVpbmZvPTAsIHBhY2tldGxlbmd0aD0wLCBzaXplOworCWludCBkYXRhcG9zPTA7CisKKwkvKiBOZXcgaW1hZ2U/ICovCisJaWYgKCFzZTQwMS0+ZnJhbWVbc2U0MDEtPmN1cmZyYW1lXS5jdXJwaXgpIHsKKwkJc2U0MDEtPmZyYW1lW3NlNDAxLT5jdXJmcmFtZV0uY3VybGluZXBpeD0wOworCQlzZTQwMS0+ZnJhbWVbc2U0MDEtPmN1cmZyYW1lXS5jdXJsaW5lPQorCQkgICAgc2U0MDEtPmZyYW1lW3NlNDAxLT5jdXJmcmFtZV0uZGF0YSsKKwkJICAgIHNlNDAxLT5jd2lkdGgqMy0xOworCQlpZiAoc2U0MDEtPmZyYW1lW3NlNDAxLT5jdXJmcmFtZV0uZ3JhYnN0YXRlPT1GUkFNRV9SRUFEWSkKKwkJCXNlNDAxLT5mcmFtZVtzZTQwMS0+Y3VyZnJhbWVdLmdyYWJzdGF0ZT1GUkFNRV9HUkFCQklORzsKKwkJc2U0MDEtPnZsY2RhdGFwb3M9MDsKKwl9CisJd2hpbGUgKGRhdGFwb3MgPCBsZW4pIHsKKwkJc2l6ZT0xMDI0LXNlNDAxLT52bGNkYXRhcG9zOworCQlpZiAoc2l6ZStkYXRhcG9zID4gbGVuKQorCQkJc2l6ZT1sZW4tZGF0YXBvczsKKwkJbWVtY3B5KHNlNDAxLT52bGNkYXRhK3NlNDAxLT52bGNkYXRhcG9zLCBkYXRhK2RhdGFwb3MsIHNpemUpOworCQlzZTQwMS0+dmxjZGF0YXBvcys9c2l6ZTsKKwkJcGFja2V0bGVuZ3RoPTA7CisJCWlmIChzZTQwMS0+dmxjZGF0YXBvcyA+PSA0KSB7CisJCQliaXRfZXhwPXNlNDAxLT52bGNkYXRhWzNdKyhzZTQwMS0+dmxjZGF0YVsyXTw8OCk7CisJCQlwaXhfZXhwPXNlNDAxLT52bGNkYXRhWzFdKygoc2U0MDEtPnZsY2RhdGFbMF0mMHgzZik8PDgpOworCQkJZnJhbWVpbmZvPXNlNDAxLT52bGNkYXRhWzBdJjB4YzA7CisJCQlwYWNrZXRsZW5ndGg9KChiaXRfZXhwKzQ3KT4+NCk8PDE7CisJCQlpZiAocGFja2V0bGVuZ3RoID4gMTAyNCkgeworCQkJCXNlNDAxLT52bGNkYXRhcG9zPTA7CisJCQkJZGF0YXBvcz1sZW47CisJCQkJcGFja2V0bGVuZ3RoPTA7CisJCQkJc2U0MDEtPmVycm9yKys7CisJCQkJc2U0MDEtPmZyYW1lW3NlNDAxLT5jdXJmcmFtZV0uY3VycGl4PTA7CisJCQl9CisJCX0KKwkJaWYgKHBhY2tldGxlbmd0aCAmJiBzZTQwMS0+dmxjZGF0YXBvcyA+PSBwYWNrZXRsZW5ndGgpIHsKKwkJCWRlY29kZV9KYW5nR3VfdmxjKHNlNDAxLCBzZTQwMS0+dmxjZGF0YSwgYml0X2V4cCwgcGFja2V0bGVuZ3RoKTsKKwkJCXNlNDAxLT5mcmFtZVtzZTQwMS0+Y3VyZnJhbWVdLmN1cnBpeCs9cGl4X2V4cCozOworCQkJZGF0YXBvcys9c2l6ZS0oc2U0MDEtPnZsY2RhdGFwb3MtcGFja2V0bGVuZ3RoKTsKKwkJCXNlNDAxLT52bGNkYXRhcG9zPTA7CisJCQlpZiAoc2U0MDEtPmZyYW1lW3NlNDAxLT5jdXJmcmFtZV0uY3VycGl4Pj1zZTQwMS0+Y3dpZHRoKnNlNDAxLT5jaGVpZ2h0KjMpIHsKKwkJCQlpZiAoc2U0MDEtPmZyYW1lW3NlNDAxLT5jdXJmcmFtZV0uY3VycGl4PT1zZTQwMS0+Y3dpZHRoKnNlNDAxLT5jaGVpZ2h0KjMpIHsKKwkJCQkJaWYgKHNlNDAxLT5mcmFtZVtzZTQwMS0+Y3VyZnJhbWVdLmdyYWJzdGF0ZT09RlJBTUVfR1JBQkJJTkcpIHsKKwkJCQkJCXNlNDAxLT5mcmFtZVtzZTQwMS0+Y3VyZnJhbWVdLmdyYWJzdGF0ZT1GUkFNRV9ET05FOworCQkJCQkJc2U0MDEtPmZyYW1lY291bnQrKzsKKwkJCQkJCXNlNDAxLT5yZWFkY291bnQrKzsKKwkJCQkJfQorCQkJCQlpZiAoc2U0MDEtPmZyYW1lWyhzZTQwMS0+Y3VyZnJhbWUrMSkmKFNFNDAxX05VTUZSQU1FUy0xKV0uZ3JhYnN0YXRlPT1GUkFNRV9SRUFEWSkgeworCQkJCQkJc2U0MDEtPmN1cmZyYW1lPShzZTQwMS0+Y3VyZnJhbWUrMSkgJiAoU0U0MDFfTlVNRlJBTUVTLTEpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJc2U0MDEtPmVycm9yKys7CisJCQkJfQorCQkJCXNlNDAxLT5mcmFtZVtzZTQwMS0+Y3VyZnJhbWVdLmN1cnBpeD0wOworCQkJCWRhdGFwb3M9bGVuOworCQkJfQorCQl9IGVsc2UgeworCQkJZGF0YXBvcys9c2l6ZTsKKwkJfQorCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlY29kZV9iYXllciAoc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEsIHN0cnVjdCBzZTQwMV9zY3JhdGNoICpidWZmZXIpCit7CisJdW5zaWduZWQgY2hhciAqZGF0YT1idWZmZXItPmRhdGE7CisJaW50IGxlbj1idWZmZXItPmxlbmd0aDsKKwlpbnQgb2Zmc2V0PWJ1ZmZlci0+b2Zmc2V0OworCWludCBkYXRhc2l6ZT1zZTQwMS0+Y3dpZHRoKnNlNDAxLT5jaGVpZ2h0OworCXN0cnVjdCBzZTQwMV9mcmFtZSAqZnJhbWU9JnNlNDAxLT5mcmFtZVtzZTQwMS0+Y3VyZnJhbWVdOworCisJdW5zaWduZWQgY2hhciAqZnJhbWVkYXRhPWZyYW1lLT5kYXRhLCAqY3VybGluZSwgKm5leHRsaW5lOworCWludCB3aWR0aD1zZTQwMS0+Y3dpZHRoOworCWludCBibGluZW9mZnNldD0wLCBibGluZTsKKwlpbnQgbGluZWxlbmd0aD13aWR0aCozLCBpOworCQorCisJaWYgKGZyYW1lLT5jdXJwaXg9PTApIHsKKwkJaWYgKGZyYW1lLT5ncmFic3RhdGU9PUZSQU1FX1JFQURZKSB7CisJCQlmcmFtZS0+Z3JhYnN0YXRlPUZSQU1FX0dSQUJCSU5HOworCQl9CisJCWZyYW1lLT5jdXJsaW5lPWZyYW1lZGF0YStsaW5lbGVuZ3RoOworCQlmcmFtZS0+Y3VybGluZXBpeD0wOworCX0KKworCWlmIChvZmZzZXQhPWZyYW1lLT5jdXJwaXgpIHsKKwkJLyogUmVnYXJkIGZyYW1lIGFzIGxvc3QgOiggKi8KKwkJZnJhbWUtPmN1cnBpeD0wOworCQlzZTQwMS0+ZXJyb3IrKzsKKwkJcmV0dXJuOworCX0KKworCS8qIENoZWNrIGlmIHdlIGhhdmUgdG8gbXVjaCBkYXRhICovCisJaWYgKGZyYW1lLT5jdXJwaXgrbGVuID4gZGF0YXNpemUpIHsKKwkJbGVuPWRhdGFzaXplLWZyYW1lLT5jdXJwaXg7CisJfQorCWlmIChzZTQwMS0+Y2hlaWdodCU0KQorCQlibGluZW9mZnNldD0xOworCWJsaW5lPWZyYW1lLT5jdXJwaXgvc2U0MDEtPmN3aWR0aCtibGluZW9mZnNldDsKKworCWN1cmxpbmU9ZnJhbWUtPmN1cmxpbmU7CisJbmV4dGxpbmU9Y3VybGluZStsaW5lbGVuZ3RoOworCWlmIChuZXh0bGluZSA+PSBmcmFtZWRhdGErZGF0YXNpemUqMykKKwkJbmV4dGxpbmU9Y3VybGluZTsKKwl3aGlsZSAobGVuKSB7CisJCWlmIChmcmFtZS0+Y3VybGluZXBpeD49d2lkdGgpIHsKKwkJCWZyYW1lLT5jdXJsaW5lcGl4LT13aWR0aDsKKwkJCWJsaW5lPWZyYW1lLT5jdXJwaXgvd2lkdGgrYmxpbmVvZmZzZXQ7CisJCQljdXJsaW5lKz1saW5lbGVuZ3RoKjI7CisJCQluZXh0bGluZSs9bGluZWxlbmd0aCoyOworCQkJaWYgKGN1cmxpbmUgPj0gZnJhbWVkYXRhK2RhdGFzaXplKjMpIHsKKwkJCQlmcmFtZS0+Y3VybGluZXBpeCsrOworCQkJCWN1cmxpbmUtPTM7CisJCQkJbmV4dGxpbmUtPTM7CisJCQkJbGVuLS07CisJCQkJZGF0YSsrOworCQkJCWZyYW1lLT5jdXJwaXgrKzsKKwkJCX0KKwkJCWlmIChuZXh0bGluZSA+PSBmcmFtZWRhdGErZGF0YXNpemUqMykKKwkJCQluZXh0bGluZT1jdXJsaW5lOworCQl9CisJCWlmICgoYmxpbmUmMSkpIHsKKwkJCWlmICgoZnJhbWUtPmN1cmxpbmVwaXgmMSkpIHsKKwkJCQkqKGN1cmxpbmUrMik9KmRhdGE7CisJCQkJKihjdXJsaW5lLTEpPSpkYXRhOworCQkJCSoobmV4dGxpbmUrMik9KmRhdGE7CisJCQkJKihuZXh0bGluZS0xKT0qZGF0YTsKKwkJCX0gZWxzZSB7CisJCQkJKihjdXJsaW5lKzEpPQorCQkJCQkoKihjdXJsaW5lKzEpKypkYXRhKS8yOworCQkJCSooY3VybGluZS0yKT0KKwkJCQkJKCooY3VybGluZS0yKSsqZGF0YSkvMjsKKwkJCQkqKG5leHRsaW5lKzEpPSpkYXRhOworCQkJCSoobmV4dGxpbmUtMik9KmRhdGE7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoKGZyYW1lLT5jdXJsaW5lcGl4JjEpKSB7CisJCQkJKihjdXJsaW5lKzEpPQorCQkJCQkoKihjdXJsaW5lKzEpKypkYXRhKS8yOworCQkJCSooY3VybGluZS0yKT0KKwkJCQkJKCooY3VybGluZS0yKSsqZGF0YSkvMjsKKwkJCQkqKG5leHRsaW5lKzEpPSpkYXRhOworCQkJCSoobmV4dGxpbmUtMik9KmRhdGE7CisJCQl9IGVsc2UgeworCQkJCSpjdXJsaW5lPSpkYXRhOworCQkJCSooY3VybGluZS0zKT0qZGF0YTsKKwkJCQkqbmV4dGxpbmU9KmRhdGE7CisJCQkJKihuZXh0bGluZS0zKT0qZGF0YTsKKwkJCX0KKwkJfQorCQlmcmFtZS0+Y3VybGluZXBpeCsrOworCQljdXJsaW5lLT0zOworCQluZXh0bGluZS09MzsKKwkJbGVuLS07CisJCWRhdGErKzsKKwkJZnJhbWUtPmN1cnBpeCsrOworCX0KKwlmcmFtZS0+Y3VybGluZT1jdXJsaW5lOworCisJaWYgKGZyYW1lLT5jdXJwaXg+PWRhdGFzaXplKSB7CisJCS8qIEZpeCB0aGUgdG9wIGxpbmUgKi8KKwkJZnJhbWVkYXRhKz1saW5lbGVuZ3RoOworCQlmb3IgKGk9MDsgaTxsaW5lbGVuZ3RoOyBpKyspIHsKKwkJCWZyYW1lZGF0YS0tOworCQkJKmZyYW1lZGF0YT0qKGZyYW1lZGF0YStsaW5lbGVuZ3RoKTsKKwkJfQorCQkvKiBGaXggdGhlIGxlZnQgc2lkZSAoZ3JlZW4gaXMgYWxyZWFkeSBwcmVzZW50KSAqLworCQlmb3IgKGk9MDsgaTxzZTQwMS0+Y2hlaWdodDsgaSsrKSB7CisJCQkqZnJhbWVkYXRhPSooZnJhbWVkYXRhKzMpOworCQkJKihmcmFtZWRhdGErMSk9KihmcmFtZWRhdGErNCk7CisJCQkqKGZyYW1lZGF0YSsyKT0qKGZyYW1lZGF0YSs1KTsKKwkJCWZyYW1lZGF0YSs9bGluZWxlbmd0aDsKKwkJfQorCQlmcmFtZS0+Y3VycGl4PTA7CisJCWZyYW1lLT5ncmFic3RhdGU9RlJBTUVfRE9ORTsKKwkJc2U0MDEtPmZyYW1lY291bnQrKzsKKwkJc2U0MDEtPnJlYWRjb3VudCsrOworCQlpZiAoc2U0MDEtPmZyYW1lWyhzZTQwMS0+Y3VyZnJhbWUrMSkmKFNFNDAxX05VTUZSQU1FUy0xKV0uZ3JhYnN0YXRlPT1GUkFNRV9SRUFEWSkgeworCQkJc2U0MDEtPmN1cmZyYW1lPShzZTQwMS0+Y3VyZnJhbWUrMSkgJiAoU0U0MDFfTlVNRlJBTUVTLTEpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IHNlNDAxX25ld2ZyYW1lKHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxLCBpbnQgZnJhbWVucikKK3sKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKwlpbnQgZXJyb3JzPTA7CisKKwl3aGlsZSAoc2U0MDEtPnN0cmVhbWluZyAmJgorCSAgICAoc2U0MDEtPmZyYW1lW2ZyYW1lbnJdLmdyYWJzdGF0ZT09RlJBTUVfUkVBRFkgfHwKKwkgICAgIHNlNDAxLT5mcmFtZVtmcmFtZW5yXS5ncmFic3RhdGU9PUZSQU1FX0dSQUJCSU5HKSApIHsKKwkJaWYoIXNlNDAxLT5mcmFtZVtmcmFtZW5yXS5jdXJwaXgpIHsKKwkJCWVycm9ycysrOworCQl9CisJCXdhaXRfaW50ZXJydXB0aWJsZSgKKwkJICAgIHNlNDAxLT5zY3JhdGNoW3NlNDAxLT5zY3JhdGNoX3VzZV0uc3RhdGUhPUJVRkZFUl9SRUFEWSwKKwkJICAgICZzZTQwMS0+d3EsCisJCSAgICAmd2FpdAorCQkpOworCQlpZiAoc2U0MDEtPm51bGxwYWNrZXRzID4gU0U0MDFfTUFYX05VTExQQUNLRVRTKSB7CisJCQlzZTQwMS0+bnVsbHBhY2tldHM9MDsKKwkJCWluZm8oInRvIG1hbnkgbnVsbCBsZW5ndGggcGFja2V0cywgcmVzdGFydGluZyBjYXB0dXJlIik7CisJCQlzZTQwMV9zdG9wX3N0cmVhbShzZTQwMSk7CisJCQlzZTQwMV9zdGFydF9zdHJlYW0oc2U0MDEpOwkJCQorCQl9IGVsc2UgeworCQkJaWYgKHNlNDAxLT5zY3JhdGNoW3NlNDAxLT5zY3JhdGNoX3VzZV0uc3RhdGUhPUJVRkZFUl9SRUFEWSkgeworCQkJCXNlNDAxLT5mcmFtZVtmcmFtZW5yXS5ncmFic3RhdGU9RlJBTUVfRVJST1I7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCQlzZTQwMS0+c2NyYXRjaFtzZTQwMS0+c2NyYXRjaF91c2VdLnN0YXRlPUJVRkZFUl9CVVNZOworCQkJaWYgKHNlNDAxLT5mb3JtYXQ9PUZNVF9KQU5HR1UpIHsKKwkJCQlkZWNvZGVfSmFuZ0d1KHNlNDAxLCAmc2U0MDEtPnNjcmF0Y2hbc2U0MDEtPnNjcmF0Y2hfdXNlXSk7CisJCQl9IGVsc2UgeworCQkJCWRlY29kZV9iYXllcihzZTQwMSwgJnNlNDAxLT5zY3JhdGNoW3NlNDAxLT5zY3JhdGNoX3VzZV0pOworCQkJfQorCQkJc2U0MDEtPnNjcmF0Y2hbc2U0MDEtPnNjcmF0Y2hfdXNlXS5zdGF0ZT1CVUZGRVJfVU5VU0VEOworCQkJc2U0MDEtPnNjcmF0Y2hfdXNlKys7CisJCQlpZiAoc2U0MDEtPnNjcmF0Y2hfdXNlPj1TRTQwMV9OVU1TQ1JBVENIKQorCQkJCXNlNDAxLT5zY3JhdGNoX3VzZT0wOworCQkJaWYgKGVycm9ycyA+IFNFNDAxX01BWF9FUlJPUlMpIHsKKwkJCQllcnJvcnM9MDsKKwkJCQlpbmZvKCJ0byBtdWNoIGVycm9ycywgcmVzdGFydGluZyBjYXB0dXJlIik7CisJCQkJc2U0MDFfc3RvcF9zdHJlYW0oc2U0MDEpOworCQkJCXNlNDAxX3N0YXJ0X3N0cmVhbShzZTQwMSk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoc2U0MDEtPmZyYW1lW2ZyYW1lbnJdLmdyYWJzdGF0ZT09RlJBTUVfRE9ORSkKKwkJaWYgKHNlNDAxLT5lbmhhbmNlKQorCQkJZW5oYW5jZV9waWN0dXJlKHNlNDAxLT5mcmFtZVtmcmFtZW5yXS5kYXRhLCBzZTQwMS0+Y2hlaWdodCpzZTQwMS0+Y3dpZHRoKjMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1c2Jfc2U0MDFfcmVtb3ZlX2Rpc2Nvbm5lY3RlZCAoc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEpCit7CisJaW50IGk7CisKKyAgICAgICAgc2U0MDEtPmRldiA9IE5VTEw7CisKKwlmb3IgKGk9MDsgaTxTRTQwMV9OVU1TQlVGOyBpKyspIGlmIChzZTQwMS0+dXJiW2ldKSB7CisJCXVzYl9raWxsX3VyYihzZTQwMS0+dXJiW2ldKTsKKwkJdXNiX2ZyZWVfdXJiKHNlNDAxLT51cmJbaV0pOworCQlzZTQwMS0+dXJiW2ldID0gTlVMTDsKKwkJa2ZyZWUoc2U0MDEtPnNidWZbaV0uZGF0YSk7CisJfQorCWZvciAoaT0wOyBpPFNFNDAxX05VTVNDUkFUQ0g7IGkrKykgaWYgKHNlNDAxLT5zY3JhdGNoW2ldLmRhdGEpIHsKKwkJa2ZyZWUoc2U0MDEtPnNjcmF0Y2hbaV0uZGF0YSk7CisJfQorCWlmIChzZTQwMS0+aW50dXJiKSB7CisJCXVzYl9raWxsX3VyYihzZTQwMS0+aW50dXJiKTsKKwkJdXNiX2ZyZWVfdXJiKHNlNDAxLT5pbnR1cmIpOworCX0KKyAgICAgICAgaW5mbygiJXMgZGlzY29ubmVjdGVkIiwgc2U0MDEtPmNhbWVyYV9uYW1lKTsKKworICAgICAgICAvKiBGcmVlIHRoZSBtZW1vcnkgKi8KKwlrZnJlZShzZTQwMS0+d2lkdGgpOworCWtmcmVlKHNlNDAxLT5oZWlnaHQpOworCWtmcmVlKHNlNDAxKTsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVmlkZW80TGludXgKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3N0YXRpYyBpbnQgc2U0MDFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxID0gKHN0cnVjdCB1c2Jfc2U0MDEgKilkZXY7CisJaW50IGVyciA9IDA7CisKKwlpZiAoc2U0MDEtPnVzZXIpCisJCXJldHVybiAtRUJVU1k7CisJc2U0MDEtPmZidWYgPSBydm1hbGxvYyhzZTQwMS0+bWF4ZnJhbWVzaXplICogU0U0MDFfTlVNRlJBTUVTKTsKKwlpZiAoc2U0MDEtPmZidWYpCisJCWZpbGUtPnByaXZhdGVfZGF0YSA9IGRldjsKKwllbHNlIAorCQllcnIgPSAtRU5PTUVNOworCXNlNDAxLT51c2VyID0gIWVycjsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc2U0MDFfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworICAgICAgICBzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSA9IChzdHJ1Y3QgdXNiX3NlNDAxICopZGV2OworCWludCBpOworCisJcnZmcmVlKHNlNDAxLT5mYnVmLCBzZTQwMS0+bWF4ZnJhbWVzaXplICogU0U0MDFfTlVNRlJBTUVTKTsKKyAgICAgICAgaWYgKHNlNDAxLT5yZW1vdmVkKSB7CisJCXVzYl9zZTQwMV9yZW1vdmVfZGlzY29ubmVjdGVkKHNlNDAxKTsKKwkJaW5mbygiZGV2aWNlIHVucmVnaXN0ZXJlZCIpOworCX0gZWxzZSB7CisJCWZvciAoaT0wOyBpPFNFNDAxX05VTUZSQU1FUzsgaSsrKQorCQkJc2U0MDEtPmZyYW1lW2ldLmdyYWJzdGF0ZT1GUkFNRV9VTlVTRUQ7CisJCWlmIChzZTQwMS0+c3RyZWFtaW5nKQorCQkJc2U0MDFfc3RvcF9zdHJlYW0oc2U0MDEpOworCQlzZTQwMS0+dXNlcj0wOworCX0KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlNDAxX2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKyAgICAgICAgc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEgPSAoc3RydWN0IHVzYl9zZTQwMSAqKXZkZXY7CisKKyAgICAgICAgaWYgKCFzZTQwMS0+ZGV2KQorICAgICAgICAgICAgICAgIHJldHVybiAtRUlPOworCisgICAgICAgIHN3aXRjaCAoY21kKSB7CisJY2FzZSBWSURJT0NHQ0FQOgorCXsKKwkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKmIgPSBhcmc7CisJCXN0cmNweShiLT5uYW1lLCBzZTQwMS0+Y2FtZXJhX25hbWUpOworCQliLT50eXBlID0gVklEX1RZUEVfQ0FQVFVSRTsKKwkJYi0+Y2hhbm5lbHMgPSAxOworCQliLT5hdWRpb3MgPSAwOworCQliLT5tYXh3aWR0aCA9IHNlNDAxLT53aWR0aFtzZTQwMS0+c2l6ZXMtMV07CisJCWItPm1heGhlaWdodCA9IHNlNDAxLT5oZWlnaHRbc2U0MDEtPnNpemVzLTFdOworCQliLT5taW53aWR0aCA9IHNlNDAxLT53aWR0aFswXTsKKwkJYi0+bWluaGVpZ2h0ID0gc2U0MDEtPmhlaWdodFswXTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DR0NIQU46CisJeworCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdiA9IGFyZzsKKworCQlpZiAodi0+Y2hhbm5lbCAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXYtPmZsYWdzID0gMDsKKwkJdi0+dHVuZXJzID0gMDsKKwkJdi0+dHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOworCQlzdHJjcHkodi0+bmFtZSwgIkNhbWVyYSIpOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NTQ0hBTjoKKwl7CisJCXN0cnVjdCB2aWRlb19jaGFubmVsICp2ID0gYXJnOworCisJCWlmICh2LT5jaGFubmVsICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIDA7CisJfQorICAgICAgICBjYXNlIFZJRElPQ0dQSUNUOgorICAgICAgICB7CisJCXN0cnVjdCB2aWRlb19waWN0dXJlICpwID0gYXJnOworCisJCXNlNDAxX2dldF9waWN0KHNlNDAxLCBwKTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DU1BJQ1Q6CisJeworCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcCA9IGFyZzsKKworCQlpZiAoc2U0MDFfc2V0X3BpY3Qoc2U0MDEsIHApKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ1NXSU46CisJeworCQlzdHJ1Y3QgdmlkZW9fd2luZG93ICp2dyA9IGFyZzsKKworCQlpZiAodnctPmZsYWdzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICh2dy0+Y2xpcGNvdW50KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChzZTQwMV9zZXRfc2l6ZShzZTQwMSwgdnctPndpZHRoLCB2dy0+aGVpZ2h0KSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gMDsKKyAgICAgICAgfQorCWNhc2UgVklESU9DR1dJTjoKKwl7CisJCXN0cnVjdCB2aWRlb193aW5kb3cgKnZ3ID0gYXJnOworCisJCXZ3LT54ID0gMDsgICAgICAgICAgICAgICAvKiBGSVhNRSAqLworCQl2dy0+eSA9IDA7CisJCXZ3LT5jaHJvbWFrZXkgPSAwOworCQl2dy0+ZmxhZ3MgPSAwOworCQl2dy0+Y2xpcGNvdW50ID0gMDsKKwkJdnctPndpZHRoID0gc2U0MDEtPmN3aWR0aDsKKwkJdnctPmhlaWdodCA9IHNlNDAxLT5jaGVpZ2h0OworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NHTUJVRjoKKwl7CisJCXN0cnVjdCB2aWRlb19tYnVmICp2bSA9IGFyZzsKKwkJaW50IGk7CisKKwkJbWVtc2V0KHZtLCAwLCBzaXplb2YoKnZtKSk7CisJCXZtLT5zaXplID0gU0U0MDFfTlVNRlJBTUVTICogc2U0MDEtPm1heGZyYW1lc2l6ZTsKKwkJdm0tPmZyYW1lcyA9IFNFNDAxX05VTUZSQU1FUzsKKwkJZm9yIChpPTA7IGk8U0U0MDFfTlVNRlJBTUVTOyBpKyspCisJCQl2bS0+b2Zmc2V0c1tpXSA9IHNlNDAxLT5tYXhmcmFtZXNpemUgKiBpOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NNQ0FQVFVSRToKKwl7CisJCXN0cnVjdCB2aWRlb19tbWFwICp2bSA9IGFyZzsKKworCQlpZiAodm0tPmZvcm1hdCAhPSBWSURFT19QQUxFVFRFX1JHQjI0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICh2bS0+ZnJhbWUgPj0gU0U0MDFfTlVNRlJBTUVTKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChzZTQwMS0+ZnJhbWVbdm0tPmZyYW1lXS5ncmFic3RhdGUgIT0gRlJBTUVfVU5VU0VEKQorCQkJcmV0dXJuIC1FQlVTWTsKKworCQkvKiBJcyB0aGlzIGFjY29yZGluZyB0byB0aGUgdjRsIHNwZWM/Pz8gKi8KKwkJaWYgKHNlNDAxX3NldF9zaXplKHNlNDAxLCB2bS0+d2lkdGgsIHZtLT5oZWlnaHQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXNlNDAxLT5mcmFtZVt2bS0+ZnJhbWVdLmdyYWJzdGF0ZT1GUkFNRV9SRUFEWTsKKworCQlpZiAoIXNlNDAxLT5zdHJlYW1pbmcpCisJCQlzZTQwMV9zdGFydF9zdHJlYW0oc2U0MDEpOworCisJCS8qIFNldCB0aGUgcGljdHVyZSBwcm9wZXJ0aWVzICovCisJCWlmIChzZTQwMS0+ZnJhbWVjb3VudD09MCkKKwkJCXNlNDAxX3NlbmRfcGljdChzZTQwMSk7CisJCS8qIENhbGlicmF0ZSB0aGUgcmVzZXQgbGV2ZWwgYWZ0ZXIgYSBmZXcgZnJhbWVzLiAqLworCQlpZiAoc2U0MDEtPmZyYW1lY291bnQlMjA9PTEpCisJCQlzZTQwMV9hdXRvX3Jlc2V0bGV2ZWwoc2U0MDEpOworCisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ1NZTkM6CisJeworCQlpbnQgKmZyYW1lID0gYXJnOworCQlpbnQgcmV0PTA7CisKKwkJaWYoKmZyYW1lIDwwIHx8ICpmcmFtZSA+PSBTRTQwMV9OVU1GUkFNRVMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZXQ9c2U0MDFfbmV3ZnJhbWUoc2U0MDEsICpmcmFtZSk7CisJCXNlNDAxLT5mcmFtZVsqZnJhbWVdLmdyYWJzdGF0ZT1GUkFNRV9VTlVTRUQ7CisJCXJldHVybiByZXQ7CisJfQorCWNhc2UgVklESU9DR0ZCVUY6CisJeworCQlzdHJ1Y3QgdmlkZW9fYnVmZmVyICp2YiA9IGFyZzsKKworCQltZW1zZXQodmIsIDAsIHNpemVvZigqdmIpKTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DS0VZOgorCQlyZXR1cm4gMDsKKwljYXNlIFZJRElPQ0NBUFRVUkU6CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgVklESU9DU0ZCVUY6CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgVklESU9DR1RVTkVSOgorCWNhc2UgVklESU9DU1RVTkVSOgorCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIFZJRElPQ0dGUkVROgorCWNhc2UgVklESU9DU0ZSRVE6CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgVklESU9DR0FVRElPOgorCWNhc2UgVklESU9DU0FVRElPOgorCQlyZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0lPQ1RMQ01EOworICAgICAgICB9IC8qIGVuZCBzd2l0Y2ggKi8KKworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZTQwMV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXJldHVybiB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIHNlNDAxX2RvX2lvY3RsKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2U0MDFfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlpbnQgcmVhbGNvdW50PWNvdW50LCByZXQ9MDsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEgPSAoc3RydWN0IHVzYl9zZTQwMSAqKWRldjsKKworCisJaWYgKHNlNDAxLT5kZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHJlYWxjb3VudCA+IHNlNDAxLT5jd2lkdGgqc2U0MDEtPmNoZWlnaHQqMykKKwkJcmVhbGNvdW50PXNlNDAxLT5jd2lkdGgqc2U0MDEtPmNoZWlnaHQqMzsKKworCS8qIFNob3VsZG4ndCBoYXBwZW46ICovCisJaWYgKHNlNDAxLT5mcmFtZVswXS5ncmFic3RhdGU9PUZSQU1FX0dSQUJCSU5HKQorCQlyZXR1cm4gLUVCVVNZOworCXNlNDAxLT5mcmFtZVswXS5ncmFic3RhdGU9RlJBTUVfUkVBRFk7CisJc2U0MDEtPmZyYW1lWzFdLmdyYWJzdGF0ZT1GUkFNRV9VTlVTRUQ7CisJc2U0MDEtPmN1cmZyYW1lPTA7CisKKwlpZiAoIXNlNDAxLT5zdHJlYW1pbmcpCisJCXNlNDAxX3N0YXJ0X3N0cmVhbShzZTQwMSk7CisKKwkvKiBTZXQgdGhlIHBpY3R1cmUgcHJvcGVydGllcyAqLworCWlmIChzZTQwMS0+ZnJhbWVjb3VudD09MCkKKwkJc2U0MDFfc2VuZF9waWN0KHNlNDAxKTsKKwkvKiBDYWxpYnJhdGUgdGhlIHJlc2V0IGxldmVsIGFmdGVyIGEgZmV3IGZyYW1lcy4gKi8KKwlpZiAoc2U0MDEtPmZyYW1lY291bnQlMjA9PTEpCisJCXNlNDAxX2F1dG9fcmVzZXRsZXZlbChzZTQwMSk7CisKKwlyZXQ9c2U0MDFfbmV3ZnJhbWUoc2U0MDEsIDApOworCisJc2U0MDEtPmZyYW1lWzBdLmdyYWJzdGF0ZT1GUkFNRV9VTlVTRUQ7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsJCisJaWYgKGNvcHlfdG9fdXNlcihidWYsIHNlNDAxLT5mcmFtZVswXS5kYXRhLCByZWFsY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiByZWFsY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgc2U0MDFfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxID0gKHN0cnVjdCB1c2Jfc2U0MDEgKilkZXY7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IHZtYS0+dm1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBzaXplICA9IHZtYS0+dm1fZW5kLXZtYS0+dm1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBwYWdlLCBwb3M7CisKKwlkb3duKCZzZTQwMS0+bG9jayk7CisKKwlpZiAoc2U0MDEtPmRldiA9PSBOVUxMKSB7CisJCXVwKCZzZTQwMS0+bG9jayk7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoc2l6ZSA+ICgoKFNFNDAxX05VTUZSQU1FUyAqIHNlNDAxLT5tYXhmcmFtZXNpemUpICsgUEFHRV9TSVpFIC0gMSkgJiB+KFBBR0VfU0laRSAtIDEpKSkgeworCQl1cCgmc2U0MDEtPmxvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcG9zID0gKHVuc2lnbmVkIGxvbmcpc2U0MDEtPmZidWY7CisJd2hpbGUgKHNpemUgPiAwKSB7CisJCXBhZ2UgPSB2bWFsbG9jX3RvX3Bmbigodm9pZCAqKXBvcyk7CisJCWlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLCBzdGFydCwgcGFnZSwgUEFHRV9TSVpFLCBQQUdFX1NIQVJFRCkpIHsKKwkJCXVwKCZzZTQwMS0+bG9jayk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCQlzdGFydCArPSBQQUdFX1NJWkU7CisJCXBvcyArPSBQQUdFX1NJWkU7CisJCWlmIChzaXplID4gUEFHRV9TSVpFKQorCQkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJCWVsc2UKKwkJCXNpemUgPSAwOworCX0KKwl1cCgmc2U0MDEtPmxvY2spOworCisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZTQwMV9mb3BzID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorICAgICAgICAub3BlbiA9ICAgICAgICAgc2U0MDFfb3BlbiwKKyAgICAgICAgLnJlbGVhc2UgPSAgICAgIHNlNDAxX2Nsb3NlLAorICAgICAgICAucmVhZCA9ICAgICAgICAgc2U0MDFfcmVhZCwKKyAgICAgICAgLm1tYXAgPSAgICAgICAgIHNlNDAxX21tYXAsCisJLmlvY3RsID0gICAgICAgIHNlNDAxX2lvY3RsLAorCS5sbHNlZWsgPSAgICAgICBub19sbHNlZWssCit9Oworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2Ugc2U0MDFfdGVtcGxhdGUgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisgICAgICAgIC5uYW1lID0gICAgICAgICAic2U0MDEgVVNCIGNhbWVyYSIsCisgICAgICAgIC50eXBlID0gICAgICAgICBWSURfVFlQRV9DQVBUVVJFLAorICAgICAgICAuaGFyZHdhcmUgPSAgICAgVklEX0hBUkRXQVJFX1NFNDAxLAorCS5mb3BzID0gICAgICAgICAmc2U0MDFfZm9wcywKK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBzZTQwMV9pbml0KHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxLCBpbnQgYnV0dG9uKQoreworICAgICAgICBpbnQgaT0wLCByYzsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjcFsweDQwXTsKKwljaGFyIHRlbXBbMjAwXTsKKworCS8qIGxlZCBvbiAqLworICAgICAgICBzZTQwMV9zbmRjdHJsKDEsIHNlNDAxLCBTRTQwMV9SRVFfTEVEX0NPTlRST0wsIDEsIE5VTEwsIDApOworCisJLyogZ2V0IGNhbWVyYSBkZXNjcmlwdG9yICovCisJcmM9c2U0MDFfc25kY3RybCgwLCBzZTQwMSwgU0U0MDFfUkVRX0dFVF9DQU1FUkFfREVTQ1JJUFRPUiwgMCwgY3AsIHNpemVvZihjcCkpOworCWlmIChjcFsxXSE9MHg0MSkgeworCQllcnIoIldyb25nIGRlc2NyaXB0b3IgdHlwZSIpOworCQlyZXR1cm4gMTsKKwl9CisJc3ByaW50ZiAodGVtcCwgIkV4dHJhRmVhdHVyZXM6ICVkIiwgY3BbM10pOworCisJc2U0MDEtPnNpemVzPWNwWzRdK2NwWzVdKjI1NjsKKwlzZTQwMS0+d2lkdGg9a21hbGxvYyhzZTQwMS0+c2l6ZXMqc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOworCWlmICghc2U0MDEtPndpZHRoKQorCQlyZXR1cm4gMTsKKwlzZTQwMS0+aGVpZ2h0PWttYWxsb2Moc2U0MDEtPnNpemVzKnNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNlNDAxLT5oZWlnaHQpIHsKKwkJa2ZyZWUoc2U0MDEtPndpZHRoKTsKKwkJcmV0dXJuIDE7CisJfQorCWZvciAoaT0wOyBpPHNlNDAxLT5zaXplczsgaSsrKSB7CisJCSAgICBzZTQwMS0+d2lkdGhbaV09Y3BbNitpKjQrMF0rY3BbNitpKjQrMV0qMjU2OworCQkgICAgc2U0MDEtPmhlaWdodFtpXT1jcFs2K2kqNCsyXStjcFs2K2kqNCszXSoyNTY7CisJfQorCXNwcmludGYgKHRlbXAsICIlcyBTaXplczoiLCB0ZW1wKTsKKwlmb3IgKGk9MDsgaTxzZTQwMS0+c2l6ZXM7IGkrKykgeworCQlzcHJpbnRmKHRlbXAsICIlcyAlZHglZCIsIHRlbXAsIHNlNDAxLT53aWR0aFtpXSwgc2U0MDEtPmhlaWdodFtpXSk7CisJfQorCWluZm8oIiVzIiwgdGVtcCk7CisJc2U0MDEtPm1heGZyYW1lc2l6ZT1zZTQwMS0+d2lkdGhbc2U0MDEtPnNpemVzLTFdKnNlNDAxLT5oZWlnaHRbc2U0MDEtPnNpemVzLTFdKjM7CisKKwlyYz1zZTQwMV9zbmRjdHJsKDAsIHNlNDAxLCBTRTQwMV9SRVFfR0VUX1dJRFRILCAwLCBjcCwgc2l6ZW9mKGNwKSk7CisJc2U0MDEtPmN3aWR0aD1jcFswXStjcFsxXSoyNTY7CisJcmM9c2U0MDFfc25kY3RybCgwLCBzZTQwMSwgU0U0MDFfUkVRX0dFVF9IRUlHSFQsIDAsIGNwLCBzaXplb2YoY3ApKTsKKwlzZTQwMS0+Y2hlaWdodD1jcFswXStjcFsxXSoyNTY7CisKKwlpZiAoIWNwWzJdICYmIFNFNDAxX0ZPUk1BVF9CQVlFUikgeworCQllcnIoIkJheWVyIGZvcm1hdCBub3Qgc3VwcG9ydGVkISIpOworCQlyZXR1cm4gMTsKKwl9CisJLyogc2V0IG91dHB1dCBtb2RlIChCQVlFUikgKi8KKyAgICAgICAgc2U0MDFfc25kY3RybCgxLCBzZTQwMSwgU0U0MDFfUkVRX1NFVF9PVVRQVVRfTU9ERSwgU0U0MDFfRk9STUFUX0JBWUVSLCBOVUxMLCAwKTsKKworCXJjPXNlNDAxX3NuZGN0cmwoMCwgc2U0MDEsIFNFNDAxX1JFUV9HRVRfQlJULCAwLCBjcCwgc2l6ZW9mKGNwKSk7CisJc2U0MDEtPmJyaWdodG5lc3M9Y3BbMF0rY3BbMV0qMjU2OworCS8qIHNvbWUgZGVmYXVsdCB2YWx1ZXMgKi8KKwlzZTQwMS0+cmVzZXRsZXZlbD0weDJkOworCXNlNDAxLT5yZ2Fpbj0weDIwOworCXNlNDAxLT5nZ2Fpbj0weDIwOworCXNlNDAxLT5iZ2Fpbj0weDIwOworCXNlNDAxX3NldF9leHBvc3VyZShzZTQwMSwgMjAwMDApOworCXNlNDAxLT5wYWxldHRlPVZJREVPX1BBTEVUVEVfUkdCMjQ7CisJc2U0MDEtPmVuaGFuY2U9MTsKKwlzZTQwMS0+ZHJvcHBlZD0wOworCXNlNDAxLT5lcnJvcj0wOworCXNlNDAxLT5mcmFtZWNvdW50PTA7CisJc2U0MDEtPnJlYWRjb3VudD0wOworCisJLyogU3RhcnQgaW50ZXJydXB0IHRyYW5zZmVycyBmb3Igc25hcHNob3QgYnV0dG9uICovCisJaWYgKGJ1dHRvbikgeworCQlzZTQwMS0+aW50dXJiPXVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCWlmICghc2U0MDEtPmludHVyYikgeworCQkJaW5mbygiQWxsb2NhdGlvbiBvZiBpbnR1cmIgZmFpbGVkIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQl1c2JfZmlsbF9pbnRfdXJiKHNlNDAxLT5pbnR1cmIsIHNlNDAxLT5kZXYsCisJCSAgICB1c2JfcmN2aW50cGlwZShzZTQwMS0+ZGV2LCBTRTQwMV9CVVRUT05fRU5EUE9JTlQpLAorCQkgICAgJnNlNDAxLT5idXR0b24sIHNpemVvZihzZTQwMS0+YnV0dG9uKSwKKwkJICAgIHNlNDAxX2J1dHRvbl9pcnEsCisJCSAgICBzZTQwMSwKKwkJICAgIDgKKwkJKTsKKwkJaWYgKHVzYl9zdWJtaXRfdXJiKHNlNDAxLT5pbnR1cmIsIEdGUF9LRVJORUwpKSB7CisJCQlpbmZvKCJpbnQgdXJiIGJ1cm5lZCBkb3duIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0gZWxzZQorCQlzZTQwMS0+aW50dXJiPU5VTEw7CisKKyAgICAgICAgLyogRmxhc2ggdGhlIGxlZCAqLworICAgICAgICBzZTQwMV9zbmRjdHJsKDEsIHNlNDAxLCBTRTQwMV9SRVFfQ0FNRVJBX1BPV0VSLCAxLCBOVUxMLCAwKTsKKyAgICAgICAgc2U0MDFfc25kY3RybCgxLCBzZTQwMSwgU0U0MDFfUkVRX0xFRF9DT05UUk9MLCAxLCBOVUxMLCAwKTsKKyAgICAgICAgc2U0MDFfc25kY3RybCgxLCBzZTQwMSwgU0U0MDFfUkVRX0NBTUVSQV9QT1dFUiwgMCwgTlVMTCwgMCk7CisJc2U0MDFfc25kY3RybCgxLCBzZTQwMSwgU0U0MDFfUkVRX0xFRF9DT05UUk9MLCAwLCBOVUxMLCAwKTsKKworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZTQwMV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisgICAgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKmludGVyZmFjZTsKKyAgICAgICAgc3RydWN0IHVzYl9zZTQwMSAqc2U0MDE7CisgICAgICAgIGNoYXIgKmNhbWVyYV9uYW1lPU5VTEw7CisJaW50IGJ1dHRvbj0xOworCisgICAgICAgIC8qIFdlIGRvbid0IGhhbmRsZSBtdWx0aS1jb25maWcgY2FtZXJhcyAqLworICAgICAgICBpZiAoZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKQorICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworCisgICAgICAgIGludGVyZmFjZSA9ICZpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYzsKKworICAgICAgICAvKiBJcyBpdCBhbiBzZTQwMT8gKi8KKyAgICAgICAgaWYgKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gMHgwM2U4ICYmCisgICAgICAgICAgICBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSAweDAwMDQpIHsKKyAgICAgICAgICAgICAgICBjYW1lcmFfbmFtZT0iRW5kcG9pbnRzL0FveCBTRTQwMSI7CisgICAgICAgIH0gZWxzZSBpZiAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSAweDA0NzEgJiYKKyAgICAgICAgICAgIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4MDMwYikgeworICAgICAgICAgICAgICAgIGNhbWVyYV9uYW1lPSJQaGlsaXBzIFBDVkM2NjVLIjsKKyAgICAgICAgfSBlbHNlIGlmIChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IDB4MDQ3ZCAmJgorCSAgICBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSAweDUwMDEpIHsKKwkJY2FtZXJhX25hbWU9IktlbnNpbmd0b24gVmlkZW9DQU0gNjcwMTQiOworICAgICAgICB9IGVsc2UgaWYgKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gMHgwNDdkICYmCisJICAgIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4NTAwMikgeworCQljYW1lcmFfbmFtZT0iS2Vuc2luZ3RvbiBWaWRlb0NBTSA2NzAxKDUvNykiOworICAgICAgICB9IGVsc2UgaWYgKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gMHgwNDdkICYmCisJICAgIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4NTAwMykgeworCQljYW1lcmFfbmFtZT0iS2Vuc2luZ3RvbiBWaWRlb0NBTSA2NzAxNiI7CisJCWJ1dHRvbj0wOworCX0gZWxzZQorCQlyZXR1cm4gLUVOT0RFVjsKKworICAgICAgICAvKiBDaGVja2luZyB2ZW5kb3IvcHJvZHVjdCBzaG91bGQgYmUgZW5vdWdoLCBidXQgd2hhdCB0aGUgaGVsbCAqLworICAgICAgICBpZiAoaW50ZXJmYWNlLT5iSW50ZXJmYWNlQ2xhc3MgIT0gMHgwMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisgICAgICAgIGlmIChpbnRlcmZhY2UtPmJJbnRlcmZhY2VTdWJDbGFzcyAhPSAweDAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworICAgICAgICAvKiBXZSBmb3VuZCBvbmUgKi8KKyAgICAgICAgaW5mbygiU0U0MDEgY2FtZXJhIGZvdW5kOiAlcyIsIGNhbWVyYV9uYW1lKTsKKworICAgICAgICBpZiAoKHNlNDAxID0ga21hbGxvYyhzaXplb2YoKnNlNDAxKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBlcnIoImNvdWxkbid0IGttYWxsb2Mgc2U0MDEgc3RydWN0Iik7CisJCXJldHVybiAtRU5PTUVNOworICAgICAgICB9CisKKyAgICAgICAgbWVtc2V0KHNlNDAxLCAwLCBzaXplb2YoKnNlNDAxKSk7CisKKyAgICAgICAgc2U0MDEtPmRldiA9IGRldjsKKyAgICAgICAgc2U0MDEtPmlmYWNlID0gaW50ZXJmYWNlLT5iSW50ZXJmYWNlTnVtYmVyOworICAgICAgICBzZTQwMS0+Y2FtZXJhX25hbWUgPSBjYW1lcmFfbmFtZTsKKworCWluZm8oImZpcm13YXJlIHZlcnNpb246ICUwMngiLCBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSAmIDI1NSk7CisKKyAgICAgICAgaWYgKHNlNDAxX2luaXQoc2U0MDEsIGJ1dHRvbikpIHsKKwkJa2ZyZWUoc2U0MDEpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwltZW1jcHkoJnNlNDAxLT52ZGV2LCAmc2U0MDFfdGVtcGxhdGUsIHNpemVvZihzZTQwMV90ZW1wbGF0ZSkpOworCW1lbWNweShzZTQwMS0+dmRldi5uYW1lLCBzZTQwMS0+Y2FtZXJhX25hbWUsIHN0cmxlbihzZTQwMS0+Y2FtZXJhX25hbWUpKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZTQwMS0+d3EpOworCWluaXRfTVVURVgoJnNlNDAxLT5sb2NrKTsKKwl3bWIoKTsKKworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnNlNDAxLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19ucikgPT0gLTEpIHsKKwkJa2ZyZWUoc2U0MDEpOworCQllcnIoInZpZGVvX3JlZ2lzdGVyX2RldmljZSBmYWlsZWQiKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWluZm8oInJlZ2lzdGVyZWQgbmV3IHZpZGVvIGRldmljZTogdmlkZW8lZCIsIHNlNDAxLT52ZGV2Lm1pbm9yKTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIHNlNDAxKTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNlNDAxX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCWlmIChzZTQwMSkgeworCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmc2U0MDEtPnZkZXYpOworCQlpZiAoIXNlNDAxLT51c2VyKXsKKwkJCXVzYl9zZTQwMV9yZW1vdmVfZGlzY29ubmVjdGVkKHNlNDAxKTsKKwkJfSBlbHNlIHsKKwkJCXNlNDAxLT5mcmFtZVswXS5ncmFic3RhdGUgPSBGUkFNRV9FUlJPUjsKKwkJCXNlNDAxLT5mcmFtZVswXS5ncmFic3RhdGUgPSBGUkFNRV9FUlJPUjsKKworCQkJc2U0MDEtPnN0cmVhbWluZyA9IDA7CisKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc2U0MDEtPndxKTsKKwkJCXNlNDAxLT5yZW1vdmVkID0gMTsKKwkJfQorCX0KK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNlNDAxX2RyaXZlciA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisgICAgICAgIC5uYW1lCQk9ICJzZTQwMSIsCisgICAgICAgIC5pZF90YWJsZQk9IGRldmljZV90YWJsZSwKKwkucHJvYmUJCT0gc2U0MDFfcHJvYmUsCisgICAgICAgIC5kaXNjb25uZWN0CT0gc2U0MDFfZGlzY29ubmVjdCwKK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBNb2R1bGUgcm91dGluZXMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IF9faW5pdCB1c2Jfc2U0MDFfaW5pdCh2b2lkKQoreworCWluZm8oIlNFNDAxIHVzYiBjYW1lcmEgZHJpdmVyIHZlcnNpb24gJXMgcmVnaXN0ZXJpbmciLCB2ZXJzaW9uKTsKKwlpZiAoZmxpY2tlcmxlc3MpCisJCWlmIChmbGlja2VybGVzcyE9NTAgJiYgZmxpY2tlcmxlc3MhPTYwKSB7CisJCQlpbmZvKCJJbnZhbGxpZCBmbGlja2VybGVzcyB2YWx1ZSwgdXNlIDAsIDUwIG9yIDYwLiIpOworCQkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZzZTQwMV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3NlNDAxX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2U0MDFfZHJpdmVyKTsKKwlpbmZvKCJTRTQwMSBkcml2ZXIgZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0KHVzYl9zZTQwMV9pbml0KTsKK21vZHVsZV9leGl0KHVzYl9zZTQwMV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3NlNDAxLmggYi9kcml2ZXJzL3VzYi9tZWRpYS9zZTQwMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNTg0NmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9zZTQwMS5oCkBAIC0wLDAgKzEsMjMzIEBACisKKyNpZm5kZWYgX19MSU5VWF9zZTQwMV9ICisjZGVmaW5lIF9fTElOVVhfc2U0MDFfSAorCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisKKyNkZWZpbmUgc2U0MDFfREVCVUcJLyogVHVybiBvbiBkZWJ1ZyBtZXNzYWdlcyAqLworCisjaWZkZWYgc2U0MDFfREVCVUcKKyMgIGRlZmluZSBQREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAoraWYgKGRlYnVnID49IGxldmVsKSBpbmZvKCJbIiBfX1BSRVRUWV9GVU5DVElPTl9fICI6JWRdICIgZm10LCBfX0xJTkVfXyAsICMjIGFyZ3MpCisjZWxzZQorIyAgZGVmaW5lIFBERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSgwKQorI2VuZGlmCisKKy8qIEFuIGFsbW9zdCBkcm9wLWluIHJlcGxhY2VtZW50IGZvciBzbGVlcF9vbl9pbnRlcnJ1cHRpYmxlICovCisjZGVmaW5lIHdhaXRfaW50ZXJydXB0aWJsZSh0ZXN0LCBxdWV1ZSwgd2FpdCkgXAoreyBcCisJYWRkX3dhaXRfcXVldWUocXVldWUsIHdhaXQpOyBcCisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsgXAorCWlmICh0ZXN0KSBcCisJCXNjaGVkdWxlKCk7IFwKKwlyZW1vdmVfd2FpdF9xdWV1ZShxdWV1ZSwgd2FpdCk7IFwKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOyBcCisJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSBcCisJCWJyZWFrOyBcCit9CisKKyNkZWZpbmUgU0U0MDFfUkVRX0dFVF9DQU1FUkFfREVTQ1JJUFRPUgkJMHgwNgorI2RlZmluZSBTRTQwMV9SRVFfU1RBUlRfQ09OVElOVU9VU19DQVBUVVJFCTB4NDEKKyNkZWZpbmUgU0U0MDFfUkVRX1NUT1BfQ09OVElOVU9VU19DQVBUVVJFCTB4NDIKKyNkZWZpbmUgU0U0MDFfUkVRX0NBUFRVUkVfRlJBTUUJCQkweDQzCisjZGVmaW5lIFNFNDAxX1JFUV9HRVRfQlJUCQkJMHg0NAorI2RlZmluZSBTRTQwMV9SRVFfU0VUX0JSVAkJCTB4NDUKKyNkZWZpbmUgU0U0MDFfUkVRX0dFVF9XSURUSAkJCTB4NGMKKyNkZWZpbmUgU0U0MDFfUkVRX1NFVF9XSURUSAkJCTB4NGQKKyNkZWZpbmUgU0U0MDFfUkVRX0dFVF9IRUlHSFQJCQkweDRlCisjZGVmaW5lIFNFNDAxX1JFUV9TRVRfSEVJR0hUCQkJMHg0ZgorI2RlZmluZSBTRTQwMV9SRVFfR0VUX09VVFBVVF9NT0RFCQkweDUwCisjZGVmaW5lIFNFNDAxX1JFUV9TRVRfT1VUUFVUX01PREUJCTB4NTEKKyNkZWZpbmUgU0U0MDFfUkVRX0dFVF9FWFRfRkVBVFVSRQkJMHg1MgorI2RlZmluZSBTRTQwMV9SRVFfU0VUX0VYVF9GRUFUVVJFCQkweDUzCisjZGVmaW5lIFNFNDAxX1JFUV9DQU1FUkFfUE9XRVIJCQkweDU2CisjZGVmaW5lIFNFNDAxX1JFUV9MRURfQ09OVFJPTAkJCTB4NTcKKyNkZWZpbmUgU0U0MDFfUkVRX0JJT1MJCQkJMHhmZgorCisjZGVmaW5lIFNFNDAxX0JJT1NfUkVBRAkJCQkweDA3CisKKyNkZWZpbmUgU0U0MDFfRk9STUFUX0JBWUVSCTB4NDAKKworLyogSHl1bmRhaSBodjcxMzFiIHJlZ2lzdGVycworICAgNzEyMSBhbmQgNzE0MSBzaG91bGQgYmUgdGhlIHNhbWUgKGhhdmVuJ3QgcmVhbGx5IGNoZWNrZWQuLi4pICovCisvKiBNb2RlIHJlZ2lzdGVyczogKi8KKyNkZWZpbmUgSFY3MTMxX1JFR19NT0RFX0EJCTB4MDAKKyNkZWZpbmUgSFY3MTMxX1JFR19NT0RFX0IJCTB4MDEKKyNkZWZpbmUgSFY3MTMxX1JFR19NT0RFX0MJCTB4MDIKKy8qIEZyYW1lIHJlZ2lzdGVyczogKi8KKyNkZWZpbmUgSFY3MTMxX1JFR19GUlNVCQkweDEwCisjZGVmaW5lIEhWNzEzMV9SRUdfRlJTTAkJMHgxMQorI2RlZmluZSBIVjcxMzFfUkVHX0ZDU1UJCTB4MTIKKyNkZWZpbmUgSFY3MTMxX1JFR19GQ1NMCQkweDEzCisjZGVmaW5lIEhWNzEzMV9SRUdfRldIVQkJMHgxNAorI2RlZmluZSBIVjcxMzFfUkVHX0ZXSEwJCTB4MTUKKyNkZWZpbmUgSFY3MTMxX1JFR19GV1dVCQkweDE2CisjZGVmaW5lIEhWNzEzMV9SRUdfRldXTAkJMHgxNworLyogVGltaW5nIHJlZ2lzdGVyczogKi8KKyNkZWZpbmUgSFY3MTMxX1JFR19USEJVCQkweDIwCisjZGVmaW5lIEhWNzEzMV9SRUdfVEhCTAkJMHgyMQorI2RlZmluZSBIVjcxMzFfUkVHX1RWQlUJCTB4MjIKKyNkZWZpbmUgSFY3MTMxX1JFR19UVkJMCQkweDIzCisjZGVmaW5lIEhWNzEzMV9SRUdfVElUVQkJMHgyNQorI2RlZmluZSBIVjcxMzFfUkVHX1RJVE0JCTB4MjYKKyNkZWZpbmUgSFY3MTMxX1JFR19USVRMCQkweDI3CisjZGVmaW5lIEhWNzEzMV9SRUdfVE1DRAkJMHgyOAorLyogQWRqdXN0IFJlZ2lzdGVyczogKi8KKyNkZWZpbmUgSFY3MTMxX1JFR19BUkxWCQkweDMwCisjZGVmaW5lIEhWNzEzMV9SRUdfQVJDRwkJMHgzMQorI2RlZmluZSBIVjcxMzFfUkVHX0FHQ0cJCTB4MzIKKyNkZWZpbmUgSFY3MTMxX1JFR19BQkNHCQkweDMzCisjZGVmaW5lIEhWNzEzMV9SRUdfQVBCVgkJMHgzNAorI2RlZmluZSBIVjcxMzFfUkVHX0FTTFAJCTB4NTQKKy8qIE9mZnNldCBSZWdpc3RlcnM6ICovCisjZGVmaW5lIEhWNzEzMV9SRUdfT0ZTUgkJMHg1MAorI2RlZmluZSBIVjcxMzFfUkVHX09GU0cJCTB4NTEKKyNkZWZpbmUgSFY3MTMxX1JFR19PRlNCCQkweDUyCisvKiBSRXNldCBsZXZlbCBzdGF0aXN0aWNzIHJlZ2lzdGVyczogKi8KKyNkZWZpbmUgSFY3MTMxX1JFR19MT1JFRk5PSAkweDU3CisjZGVmaW5lIEhWNzEzMV9SRUdfTE9SRUZOT0wJMHg1OAorI2RlZmluZSBIVjcxMzFfUkVHX0hJUkVGTk9ICTB4NTkKKyNkZWZpbmUgSFY3MTMxX1JFR19ISVJFRk5PTAkweDVhCisKKy8qIHNlNDAxIHJlZ2lzdGVycyAqLworI2RlZmluZSBTRTQwMV9PUEVSQVRJTkdNT0RFCTB4MjAwMAorCisKKy8qIHNpemUgb2YgdXNiIHRyYW5zZmVycyAqLworI2RlZmluZSBTRTQwMV9QQUNLRVRTSVpFCTQwOTYKKy8qIG51bWJlciBvZiBxdWV1ZWQgYnVsayB0cmFuc2ZlcnMgdG8gdXNlLCBzaG91bGQgYmUgYWJvdXQgOCAqLworI2RlZmluZSBTRTQwMV9OVU1TQlVGCQkxCisvKiByZWFkIHRoZSB1c2Igc3BlY3MgZm9yIHRoaXMgb25lIDopICovCisjZGVmaW5lIFNFNDAxX1ZJREVPX0VORFBPSU5UCTEKKyNkZWZpbmUgU0U0MDFfQlVUVE9OX0VORFBPSU5UCTIKKy8qIG51bWJlciBvZiBmcmFtZXMgc3VwcG9ydGVkIGJ5IHRoZSB2NGwgcGFydCAqLworI2RlZmluZSBTRTQwMV9OVU1GUkFNRVMJCTIKKy8qIHNjcmF0Y2ggYnVmZmVycyBmb3IgcGFzc2luZyBkYXRhIHRvIHRoZSBkZWNvZGVycyAqLworI2RlZmluZSBTRTQwMV9OVU1TQ1JBVENICTMyCisvKiBtYXhpbXVtIGFtb3VudCBvZiBkYXRhIGluIGEgSmFuZ0d1IHBhY2tldCAqLworI2RlZmluZSBTRTQwMV9WTENEQVRBTEVOCTEwMjQKKy8qIG51bWJlciBvZiBudWwgc2l6ZWQgcGFja2V0cyB0byByZWNlaXZlIGJlZm9yZSBraWNraW5nIHRoZSBjYW1lcmEgKi8KKyNkZWZpbmUgU0U0MDFfTUFYX05VTExQQUNLRVRTCTQwMDAKKy8qIG51bWJlciBvZiBkZWNvZGluZyBlcnJvcnMgYmVmb3JlIGtpY2tpbmcgdGhlIGNhbWVyYSAqLworI2RlZmluZSBTRTQwMV9NQVhfRVJST1JTCTIwMAorCitzdHJ1Y3QgdXNiX2RldmljZTsKKworc3RydWN0IHNlNDAxX3NidWYgeworCXVuc2lnbmVkIGNoYXIgKmRhdGE7Cit9OworCitlbnVtIHsKKwlGUkFNRV9VTlVTRUQsCQkvKiBVbnVzZWQgKG5vIE1DQVBUVVJFKSAqLworCUZSQU1FX1JFQURZLAkJLyogUmVhZHkgdG8gc3RhcnQgZ3JhYmJpbmcgKi8KKwlGUkFNRV9HUkFCQklORywJCS8qIEluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGdyYWJiZWQgaW50byAqLworCUZSQU1FX0RPTkUsCQkvKiBGaW5pc2hlZCBncmFiYmluZywgYnV0IG5vdCBiZWVuIHN5bmNlZCB5ZXQgKi8KKwlGUkFNRV9FUlJPUiwJCS8qIFNvbWV0aGluZyBiYWQgaGFwcGVuZWQgd2hpbGUgcHJvY2Vzc2luZyAqLworfTsKKworZW51bSB7CisJRk1UX0JBWUVSLAorCUZNVF9KQU5HR1UsCit9OworCitlbnVtIHsKKwlCVUZGRVJfVU5VU0VELAorCUJVRkZFUl9SRUFEWSwKKwlCVUZGRVJfQlVTWSwKKwlCVUZGRVJfRE9ORSwKK307CisKK3N0cnVjdCBzZTQwMV9zY3JhdGNoIHsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCXZvbGF0aWxlIGludCBzdGF0ZTsKKwlpbnQgb2Zmc2V0OworCWludCBsZW5ndGg7Cit9OworCitzdHJ1Y3Qgc2U0MDFfZnJhbWUgeworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CQkvKiBGcmFtZSBidWZmZXIgKi8KKworCXZvbGF0aWxlIGludCBncmFic3RhdGU7CS8qIFN0YXRlIG9mIGdyYWJiaW5nICovCisKKwl1bnNpZ25lZCBjaGFyICpjdXJsaW5lOworCWludCBjdXJsaW5lcGl4OworCWludCBjdXJwaXg7Cit9OworCitzdHJ1Y3QgdXNiX3NlNDAxIHsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CisKKwkvKiBEZXZpY2Ugc3RydWN0dXJlICovCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKworCXVuc2lnbmVkIGNoYXIgaWZhY2U7CisKKwljaGFyICpjYW1lcmFfbmFtZTsKKworCWludCBjaGFuZ2U7CisJaW50IGJyaWdodG5lc3M7CisJaW50IGh1ZTsKKwlpbnQgcmdhaW47CisJaW50IGdnYWluOworCWludCBiZ2FpbjsKKwlpbnQgZXhwb3NlX2g7CisJaW50IGV4cG9zZV9tOworCWludCBleHBvc2VfbDsKKwlpbnQgcmVzZXRsZXZlbDsKKwkKKwlpbnQgZW5oYW5jZTsKKworCWludCBmb3JtYXQ7CisJaW50IHNpemVzOworCWludCAqd2lkdGg7CisJaW50ICpoZWlnaHQ7CisJaW50IGN3aWR0aDsJCS8qIGN1cnJlbnQgd2lkdGggKi8KKwlpbnQgY2hlaWdodDsJCS8qIGN1cnJlbnQgaGVpZ2h0ICovCisJaW50IHBhbGV0dGU7CisJaW50IG1heGZyYW1lc2l6ZTsKKwlpbnQgY2ZyYW1lc2l6ZTsJCS8qIGN1cnJlbnQgZnJhbWVzaXplICovCisKKwlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CisJaW50IHVzZXI7CQkvKiB1c2VyIGNvdW50IGZvciBleGNsdXNpdmUgdXNlICovCisJaW50IHJlbW92ZWQ7CQkvKiBkZXZpY2UgZGlzY29ubmVjdGVkICovCisKKwlpbnQgc3RyZWFtaW5nOwkJLyogQXJlIHdlIHN0cmVhbWluZyB2aWRlbz8gKi8KKworCWNoYXIgKmZidWY7CQkvKiBWaWRlb2RldiBidWZmZXIgYXJlYSAqLworCisJc3RydWN0IHVyYiAqdXJiW1NFNDAxX05VTVNCVUZdOworCXN0cnVjdCB1cmIgKmludHVyYjsKKwkKKwlpbnQgYnV0dG9uOworCWludCBidXR0b25wcmVzc2VkOworCisJaW50IGN1cmZyYW1lOwkJLyogQ3VycmVudCByZWNlaXZpbmcgZnJhbWUgKi8KKwlzdHJ1Y3Qgc2U0MDFfZnJhbWUgZnJhbWVbU0U0MDFfTlVNRlJBTUVTXTsJCisJaW50IHJlYWRjb3VudDsKKwlpbnQgZnJhbWVjb3VudDsKKwlpbnQgZXJyb3I7CisJaW50IGRyb3BwZWQ7CisKKwlpbnQgc2NyYXRjaF9uZXh0OworCWludCBzY3JhdGNoX3VzZTsKKwlpbnQgc2NyYXRjaF9vdmVyZmxvdzsKKwlzdHJ1Y3Qgc2U0MDFfc2NyYXRjaCBzY3JhdGNoW1NFNDAxX05VTVNDUkFUQ0hdOworCisJLyogRGVjb2RlciBzcGVjaWZpYyBkYXRhOiAqLworCXVuc2lnbmVkIGNoYXIgdmxjZGF0YVtTRTQwMV9WTENEQVRBTEVOXTsKKwlpbnQgdmxjZGF0YXBvczsKKwlpbnQgYmF5ZXJvZmZzZXQ7CisKKwlzdHJ1Y3Qgc2U0MDFfc2J1ZiBzYnVmW1NFNDAxX05VTVNCVUZdOworCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CS8qIFByb2Nlc3NlcyB3YWl0aW5nICovCisKKwlpbnQgbnVsbHBhY2tldHM7Cit9OworCisKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDIuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjhhNGM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMi5oCkBAIC0wLDAgKzEsMjA2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWNEwyIGRyaXZlciBmb3IgU045QzEweCBQQyBDYW1lcmEgQ29udHJvbGxlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICAgICAgICAgICAqCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9TTjlDMTAyX0hfCisjZGVmaW5lIF9TTjlDMTAyX0hfCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKworI2luY2x1ZGUgInNuOWMxMDJfc2Vuc29yLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBTTjlDMTAyX0RFQlVHCisjZGVmaW5lIFNOOUMxMDJfREVCVUdfTEVWRUwgICAgICAgMgorI2RlZmluZSBTTjlDMTAyX01BWF9ERVZJQ0VTICAgICAgIDY0CisjZGVmaW5lIFNOOUMxMDJfUFJFU0VSVkVfSU1HU0NBTEUgMAorI2RlZmluZSBTTjlDMTAyX0ZPUkNFX01VTk1BUCAgICAgIDAKKyNkZWZpbmUgU045QzEwMl9NQVhfRlJBTUVTICAgICAgICAzMgorI2RlZmluZSBTTjlDMTAyX1VSQlMgICAgICAgICAgICAgIDIKKyNkZWZpbmUgU045QzEwMl9JU09fUEFDS0VUUyAgICAgICA3CisjZGVmaW5lIFNOOUMxMDJfQUxURVJOQVRFX1NFVFRJTkcgOAorI2RlZmluZSBTTjlDMTAyX1VSQl9USU1FT1VUICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMiAqIFNOOUMxMDJfSVNPX1BBQ0tFVFMpCisjZGVmaW5lIFNOOUMxMDJfQ1RSTF9USU1FT1VUICAgICAgMzAwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBTTjlDMTAyX01PRFVMRV9OQU1FICAgICAiVjRMMiBkcml2ZXIgZm9yIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzIgorI2RlZmluZSBTTjlDMTAyX01PRFVMRV9BVVRIT1IgICAiKEMpIDIwMDQtMjAwNSBMdWNhIFJpc29saWEiCisjZGVmaW5lIFNOOUMxMDJfQVVUSE9SX0VNQUlMICAgICI8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4iCisjZGVmaW5lIFNOOUMxMDJfTU9EVUxFX0xJQ0VOU0UgICJHUEwiCisjZGVmaW5lIFNOOUMxMDJfTU9EVUxFX1ZFUlNJT04gICIxOjEuMjQiCisjZGVmaW5lIFNOOUMxMDJfTU9EVUxFX1ZFUlNJT05fQ09ERSAgS0VSTkVMX1ZFUlNJT04oMSwgMCwgMjQpCisKK2VudW0gc245YzEwMl9icmlkZ2UgeworCUJSSURHRV9TTjlDMTAxID0gMHgwMSwKKwlCUklER0VfU045QzEwMiA9IDB4MDIsCisJQlJJREdFX1NOOUMxMDMgPSAweDA0LAorfTsKKworU045QzEwMl9JRF9UQUJMRQorU045QzEwMl9TRU5TT1JfVEFCTEUKKworZW51bSBzbjljMTAyX2ZyYW1lX3N0YXRlIHsKKwlGX1VOVVNFRCwKKwlGX1FVRVVFRCwKKwlGX0dSQUJCSU5HLAorCUZfRE9ORSwKKwlGX0VSUk9SLAorfTsKKworc3RydWN0IHNuOWMxMDJfZnJhbWVfdCB7CisJdm9pZCogYnVmbWVtOworCXN0cnVjdCB2NGwyX2J1ZmZlciBidWY7CisJZW51bSBzbjljMTAyX2ZyYW1lX3N0YXRlIHN0YXRlOworCXN0cnVjdCBsaXN0X2hlYWQgZnJhbWU7CisJdW5zaWduZWQgbG9uZyB2bWFfdXNlX2NvdW50OworfTsKKworZW51bSBzbjljMTAyX2Rldl9zdGF0ZSB7CisJREVWX0lOSVRJQUxJWkVEID0gMHgwMSwKKwlERVZfRElTQ09OTkVDVEVEID0gMHgwMiwKKwlERVZfTUlTQ09ORklHVVJFRCA9IDB4MDQsCit9OworCitlbnVtIHNuOWMxMDJfaW9fbWV0aG9kIHsKKwlJT19OT05FLAorCUlPX1JFQUQsCisJSU9fTU1BUCwKK307CisKK2VudW0gc245YzEwMl9zdHJlYW1fc3RhdGUgeworCVNUUkVBTV9PRkYsCisJU1RSRUFNX0lOVEVSUlVQVCwKKwlTVFJFQU1fT04sCit9OworCit0eXBlZGVmIGNoYXIgc245YzEwMl9zb2ZfaGVhZGVyX3RbMTJdOwordHlwZWRlZiBjaGFyIHNuOWMxMDJfZW9mX2hlYWRlcl90WzRdOworCitzdHJ1Y3Qgc245YzEwMl9zeXNmc19hdHRyIHsKKwl1OCByZWcsIGkyY19yZWc7CisJc245YzEwMl9zb2ZfaGVhZGVyX3QgZnJhbWVfaGVhZGVyOworfTsKKworc3RydWN0IHNuOWMxMDJfbW9kdWxlX3BhcmFtIHsKKwl1OCBmb3JjZV9tdW5tYXA7Cit9OworCitzdGF0aWMgREVDTEFSRV9NVVRFWChzbjljMTAyX3N5c2ZzX2xvY2spOworc3RhdGljIERFQ0xBUkVfUldTRU0oc245YzEwMl9kaXNjb25uZWN0KTsKKworc3RydWN0IHNuOWMxMDJfZGV2aWNlIHsKKwlzdHJ1Y3QgZGV2aWNlIGRldjsKKworCXN0cnVjdCB2aWRlb19kZXZpY2UqIHY0bGRldjsKKworCWVudW0gc245YzEwMl9icmlkZ2UgYnJpZGdlOworCXN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yOworCisJc3RydWN0IHVzYl9kZXZpY2UqIHVzYmRldjsKKwlzdHJ1Y3QgdXJiKiB1cmJbU045QzEwMl9VUkJTXTsKKwl2b2lkKiB0cmFuc2Zlcl9idWZmZXJbU045QzEwMl9VUkJTXTsKKwl1OCogY29udHJvbF9idWZmZXI7CisKKwlzdHJ1Y3Qgc245YzEwMl9mcmFtZV90ICpmcmFtZV9jdXJyZW50LCBmcmFtZVtTTjlDMTAyX01BWF9GUkFNRVNdOworCXN0cnVjdCBsaXN0X2hlYWQgaW5xdWV1ZSwgb3V0cXVldWU7CisJdTMyIGZyYW1lX2NvdW50LCBuYnVmZmVycywgbnJlYWRidWZmZXJzOworCisJZW51bSBzbjljMTAyX2lvX21ldGhvZCBpbzsKKwllbnVtIHNuOWMxMDJfc3RyZWFtX3N0YXRlIHN0cmVhbTsKKworCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiBjb21wcmVzc2lvbjsKKworCXN0cnVjdCBzbjljMTAyX3N5c2ZzX2F0dHIgc3lzZnM7CisJc245YzEwMl9zb2ZfaGVhZGVyX3Qgc29mX2hlYWRlcjsKKwl1MTYgcmVnWzMyXTsKKworCXN0cnVjdCBzbjljMTAyX21vZHVsZV9wYXJhbSBtb2R1bGVfcGFyYW07CisKKwllbnVtIHNuOWMxMDJfZGV2X3N0YXRlIHN0YXRlOworCXU4IHVzZXJzOworCisJc3RydWN0IHNlbWFwaG9yZSBkZXZfc2VtLCBmaWxlb3Bfc2VtOworCXNwaW5sb2NrX3QgcXVldWVfbG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBvcGVuLCB3YWl0X2ZyYW1lLCB3YWl0X3N0cmVhbTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZAorc245YzEwMl9hdHRhY2hfc2Vuc29yKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yKQoreworCWNhbS0+c2Vuc29yID0gc2Vuc29yOworCWNhbS0+c2Vuc29yLT5kZXYgPSAmY2FtLT5kZXY7CisJY2FtLT5zZW5zb3ItPnVzYmRldiA9IGNhbS0+dXNiZGV2OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyN1bmRlZiBEQkcKKyN1bmRlZiBLREJHCisjaWZkZWYgU045QzEwMl9ERUJVRworIwlkZWZpbmUgREJHKGxldmVsLCBmbXQsIGFyZ3MuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIChkZWJ1ZyA+PSAobGV2ZWwpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmICgobGV2ZWwpID09IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJZGV2X2VycigmY2FtLT5kZXYsIGZtdCAiXG4iLCAjIyBhcmdzKTsgICAgICAgICAgICAgICAgXAorCQllbHNlIGlmICgobGV2ZWwpID09IDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCWRldl9pbmZvKCZjYW0tPmRldiwgZm10ICJcbiIsICMjIGFyZ3MpOyAgICAgICAgICAgICAgIFwKKwkJZWxzZSBpZiAoKGxldmVsKSA+PSAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlkZXZfaW5mbygmY2FtLT5kZXYsICJbJXM6JWRdICIgZm10ICJcbiIsICAgICAgICAgICAgICBcCisJCQkgICAgICAgICBfX0ZVTkNUSU9OX18sIF9fTElORV9fICwgIyMgYXJncyk7ICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKyMJZGVmaW5lIEtEQkcobGV2ZWwsIGZtdCwgYXJncy4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZiAoZGVidWcgPj0gKGxldmVsKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlpZiAoKGxldmVsKSA9PSAxIHx8IChsZXZlbCkgPT0gMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXByX2luZm8oInNuOWMxMDI6ICIgZm10ICJcbiIsICMjIGFyZ3MpOyAgICAgICAgICAgICAgIFwKKwkJZWxzZSBpZiAoKGxldmVsKSA9PSAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlwcl9kZWJ1Zygic245YzEwMjogWyVzOiVkXSAiIGZtdCAiXG4iLCBfX0ZVTkNUSU9OX18sICBcCisJCQkgICAgICAgICBfX0xJTkVfXyAsICMjIGFyZ3MpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKyNlbHNlCisjCWRlZmluZSBLREJHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIGRvIHs7fSB3aGlsZSgwKTsKKyMJZGVmaW5lIERCRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7O30gd2hpbGUoMCk7CisjZW5kaWYKKworI3VuZGVmIFBEQkcKKyNkZWZpbmUgUERCRyhmbXQsIGFyZ3MuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2Rldl9pbmZvKCZjYW0tPmRldiwgIlslczolZF0gIiBmbXQgIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyAsICMjIGFyZ3MpOworCisjdW5kZWYgUERCR0cKKyNkZWZpbmUgUERCR0coZm10LCBhcmdzLi4uKSBkbyB7O30gd2hpbGUoMCk7IC8qIHBsYWNlaG9sZGVyICovCisKKyNlbmRpZiAvKiBfU045QzEwMl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9jb3JlLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX2NvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTg0MDFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9jb3JlLmMKQEAgLTAsMCArMSwyNzQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWNEwyIGRyaXZlciBmb3IgU045QzEweCBQQyBDYW1lcmEgQ29udHJvbGxlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICAgICAgICAgICAqCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZS1mbGFncy5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9nZW5lcmljLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjaW5jbHVkZSAic245YzEwMi5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBzbjljMTAyX2lkX3RhYmxlKTsKKworTU9EVUxFX0FVVEhPUihTTjlDMTAyX01PRFVMRV9BVVRIT1IgIiAiIFNOOUMxMDJfQVVUSE9SX0VNQUlMKTsKK01PRFVMRV9ERVNDUklQVElPTihTTjlDMTAyX01PRFVMRV9OQU1FKTsKK01PRFVMRV9WRVJTSU9OKFNOOUMxMDJfTU9EVUxFX1ZFUlNJT04pOworTU9EVUxFX0xJQ0VOU0UoU045QzEwMl9NT0RVTEVfTElDRU5TRSk7CisKK3N0YXRpYyBzaG9ydCB2aWRlb19ucltdID0ge1swIC4uLiBTTjlDMTAyX01BWF9ERVZJQ0VTLTFdID0gLTF9OworbW9kdWxlX3BhcmFtX2FycmF5KHZpZGVvX25yLCBzaG9ydCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpZGVvX25yLAorICAgICAgICAgICAgICAgICAiXG48LTF8blssLi4uXT4gU3BlY2lmeSBWNEwyIG1pbm9yIG1vZGUgbnVtYmVyLiIKKyAgICAgICAgICAgICAgICAgIlxuIC0xID0gdXNlIG5leHQgYXZhaWxhYmxlIChkZWZhdWx0KSIKKyAgICAgICAgICAgICAgICAgIlxuICBuID0gdXNlIG1pbm9yIG51bWJlciBuIChpbnRlZ2VyID49IDApIgorICAgICAgICAgICAgICAgICAiXG5Zb3UgY2FuIHNwZWNpZnkgdXAgdG8gIl9fTU9EVUxFX1NUUklORyhTTjlDMTAyX01BWF9ERVZJQ0VTKQorICAgICAgICAgICAgICAgICAiIGNhbWVyYXMgdGhpcyB3YXkuIgorICAgICAgICAgICAgICAgICAiXG5Gb3IgZXhhbXBsZToiCisgICAgICAgICAgICAgICAgICJcbnZpZGVvX25yPS0xLDIsLTEgd291bGQgYXNzaWduIG1pbm9yIG51bWJlciAyIHRvIgorICAgICAgICAgICAgICAgICAiXG50aGUgc2Vjb25kIGNhbWVyYSBhbmQgdXNlIGF1dG8gZm9yIHRoZSBmaXJzdCIKKyAgICAgICAgICAgICAgICAgIlxub25lIGFuZCBmb3IgZXZlcnkgb3RoZXIgY2FtZXJhLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CisKK3N0YXRpYyBzaG9ydCBmb3JjZV9tdW5tYXBbXSA9IHtbMCAuLi4gU045QzEwMl9NQVhfREVWSUNFUy0xXSA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOOUMxMDJfRk9SQ0VfTVVOTUFQfTsKK21vZHVsZV9wYXJhbV9hcnJheShmb3JjZV9tdW5tYXAsIGJvb2wsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9tdW5tYXAsCisgICAgICAgICAgICAgICAgICJcbjwwfDFbLC4uLl0+IEZvcmNlIHRoZSBhcHBsaWNhdGlvbiB0byB1bm1hcCBwcmV2aW91c2x5ICIKKyAgICAgICAgICAgICAgICAgIlxubWFwcGVkIGJ1ZmZlciBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgYW55IFZJRElPQ19TX0NST1Agb3IgIgorICAgICAgICAgICAgICAgICAiXG5WSURJT0NfU19GTVQgaW9jdGwncy4gTm90IGFsbCB0aGUgYXBwbGljYXRpb25zIHN1cHBvcnQgIgorICAgICAgICAgICAgICAgICAiXG50aGlzIGZlYXR1cmUuIFRoaXMgcGFyYW1ldGVyIGlzIHNwZWNpZmljIGZvciBlYWNoICIKKyAgICAgICAgICAgICAgICAgIlxuZGV0ZWN0ZWQgY2FtZXJhLiIKKyAgICAgICAgICAgICAgICAgIlxuIDAgPSBkbyBub3QgZm9yY2UgbWVtb3J5IHVubWFwcGluZyIKKyAgICAgICAgICAgICAgICAgIlxuIDEgPSBmb3JjZSBtZW1vcnkgdW5tYXBwaW5nIChzYXZlIG1lbW9yeSkiCisgICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhTTjlDMTAyX0ZPUkNFX01VTk1BUCkiLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CisKKyNpZmRlZiBTTjlDMTAyX0RFQlVHCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZGVidWcgPSBTTjlDMTAyX0RFQlVHX0xFVkVMOworbW9kdWxlX3BhcmFtKGRlYnVnLCB1c2hvcnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywKKyAgICAgICAgICAgICAgICAgIlxuPG4+IERlYnVnZ2luZyBpbmZvcm1hdGlvbiBsZXZlbCwgZnJvbSAwIHRvIDM6IgorICAgICAgICAgICAgICAgICAiXG4wID0gbm9uZSAodXNlIGNhcmVmdWxseSkiCisgICAgICAgICAgICAgICAgICJcbjEgPSBjcml0aWNhbCBlcnJvcnMiCisgICAgICAgICAgICAgICAgICJcbjIgPSBzaWduaWZpY2FudCBpbmZvcm1hdGlvbnMiCisgICAgICAgICAgICAgICAgICJcbjMgPSBtb3JlIHZlcmJvc2UgbWVzc2FnZXMiCisgICAgICAgICAgICAgICAgICJcbkxldmVsIDMgaXMgdXNlZnVsIGZvciB0ZXN0aW5nIG9ubHksIHdoZW4gb25seSAiCisgICAgICAgICAgICAgICAgICJvbmUgZGV2aWNlIGlzIHVzZWQuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoU045QzEwMl9ERUJVR19MRVZFTCkiLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc245YzEwMl9zb2ZfaGVhZGVyX3Qgc245YzEwMl9zb2ZfaGVhZGVyW10gPSB7CisJezB4ZmYsIDB4ZmYsIDB4MDAsIDB4YzQsIDB4YzQsIDB4OTYsIDB4MDB9LAorCXsweGZmLCAweGZmLCAweDAwLCAweGM0LCAweGM0LCAweDk2LCAweDAxfSwKK307CisKKworc3RhdGljIHNuOWMxMDJfZW9mX2hlYWRlcl90IHNuOWMxMDJfZW9mX2hlYWRlcltdID0geworCXsweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHg0MCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4ODAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweGMwLCAweDAwLCAweDAwLCAweDAwfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQqIHJ2bWFsbG9jKHNpemVfdCBzaXplKQoreworCXZvaWQqIG1lbTsKKwl1bnNpZ25lZCBsb25nIGFkcjsKKworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCisJbWVtID0gdm1hbGxvY18zMigodW5zaWduZWQgbG9uZylzaXplKTsKKwlpZiAoIW1lbSkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQobWVtLCAwLCBzaXplKTsKKworCWFkciA9ICh1bnNpZ25lZCBsb25nKW1lbTsKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJU2V0UGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOworCQlhZHIgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisKKwlyZXR1cm4gbWVtOworfQorCisKK3N0YXRpYyB2b2lkIHJ2ZnJlZSh2b2lkKiBtZW0sIHNpemVfdCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgYWRyOworCisJaWYgKCFtZW0pCisJCXJldHVybjsKKworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCisJYWRyID0gKHVuc2lnbmVkIGxvbmcpbWVtOworCXdoaWxlIChzaXplID4gMCkgeworCQlDbGVhclBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKKwkJYWRyICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCisJdmZyZWUobWVtKTsKK30KKworCitzdGF0aWMgdTMyIAorc245YzEwMl9yZXF1ZXN0X2J1ZmZlcnMoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHUzMiBjb3VudCwgCisgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHNuOWMxMDJfaW9fbWV0aG9kIGlvKQoreworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHAgPSAmKGNhbS0+c2Vuc29yLT5waXhfZm9ybWF0KTsKKwlzdHJ1Y3QgdjRsMl9yZWN0KiByID0gJihjYW0tPnNlbnNvci0+Y3JvcGNhcC5ib3VuZHMpOworCWNvbnN0IHNpemVfdCBpbWFnZXNpemUgPSBjYW0tPm1vZHVsZV9wYXJhbS5mb3JjZV9tdW5tYXAgfHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgaW8gPT0gSU9fUkVBRCA/CisJICAgICAgICAgICAgICAgICAgICAgICAgIChwLT53aWR0aCAqIHAtPmhlaWdodCAqIHAtPnByaXYpIC8gOCA6CisJICAgICAgICAgICAgICAgICAgICAgICAgIChyLT53aWR0aCAqIHItPmhlaWdodCAqIHAtPnByaXYpIC8gODsKKwl2b2lkKiBidWZmID0gTlVMTDsKKwl1MzIgaTsKKworCWlmIChjb3VudCA+IFNOOUMxMDJfTUFYX0ZSQU1FUykKKwkJY291bnQgPSBTTjlDMTAyX01BWF9GUkFNRVM7CisKKwljYW0tPm5idWZmZXJzID0gY291bnQ7CisJd2hpbGUgKGNhbS0+bmJ1ZmZlcnMgPiAwKSB7CisJCWlmICgoYnVmZiA9IHJ2bWFsbG9jKGNhbS0+bmJ1ZmZlcnMgKiBQQUdFX0FMSUdOKGltYWdlc2l6ZSkpKSkKKwkJCWJyZWFrOworCQljYW0tPm5idWZmZXJzLS07CisJfQorCisJZm9yIChpID0gMDsgaSA8IGNhbS0+bmJ1ZmZlcnM7IGkrKykgeworCQljYW0tPmZyYW1lW2ldLmJ1Zm1lbSA9IGJ1ZmYgKyBpKlBBR0VfQUxJR04oaW1hZ2VzaXplKTsKKwkJY2FtLT5mcmFtZVtpXS5idWYuaW5kZXggPSBpOworCQljYW0tPmZyYW1lW2ldLmJ1Zi5tLm9mZnNldCA9IGkqUEFHRV9BTElHTihpbWFnZXNpemUpOworCQljYW0tPmZyYW1lW2ldLmJ1Zi5sZW5ndGggPSBpbWFnZXNpemU7CisJCWNhbS0+ZnJhbWVbaV0uYnVmLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCWNhbS0+ZnJhbWVbaV0uYnVmLnNlcXVlbmNlID0gMDsKKwkJY2FtLT5mcmFtZVtpXS5idWYuZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJCWNhbS0+ZnJhbWVbaV0uYnVmLm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CisJCWNhbS0+ZnJhbWVbaV0uYnVmLmZsYWdzID0gMDsKKwl9CisKKwlyZXR1cm4gY2FtLT5uYnVmZmVyczsKK30KKworCitzdGF0aWMgdm9pZCBzbjljMTAyX3JlbGVhc2VfYnVmZmVycyhzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwlpZiAoY2FtLT5uYnVmZmVycykgeworCQlydmZyZWUoY2FtLT5mcmFtZVswXS5idWZtZW0sCisJCSAgICAgICBjYW0tPm5idWZmZXJzICogY2FtLT5mcmFtZVswXS5idWYubGVuZ3RoKTsKKwkJY2FtLT5uYnVmZmVycyA9IDA7CisJfQorfQorCisKK3N0YXRpYyB2b2lkIHNuOWMxMDJfZW1wdHlfZnJhbWVxdWV1ZXMoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCit7CisJdTMyIGk7CisKKwlJTklUX0xJU1RfSEVBRCgmY2FtLT5pbnF1ZXVlKTsKKwlJTklUX0xJU1RfSEVBRCgmY2FtLT5vdXRxdWV1ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgU045QzEwMl9NQVhfRlJBTUVTOyBpKyspIHsKKwkJY2FtLT5mcmFtZVtpXS5zdGF0ZSA9IEZfVU5VU0VEOworCQljYW0tPmZyYW1lW2ldLmJ1Zi5ieXRlc3VzZWQgPSAwOworCX0KK30KKworCitzdGF0aWMgdm9pZCBzbjljMTAyX3F1ZXVlX3VudXNlZGZyYW1lcyhzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2FtLT5uYnVmZmVyczsgaSsrKQorCQlpZiAoY2FtLT5mcmFtZVtpXS5zdGF0ZSA9PSBGX1VOVVNFRCkgeworCQkJY2FtLT5mcmFtZVtpXS5zdGF0ZSA9IEZfUVVFVUVEOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisJCQlsaXN0X2FkZF90YWlsKCZjYW0tPmZyYW1lW2ldLmZyYW1lLCAmY2FtLT5pbnF1ZXVlKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisJCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgc245YzEwMl93cml0ZV9yZWcoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHU4IHZhbHVlLCB1MTYgaW5kZXgpCit7CisJc3RydWN0IHVzYl9kZXZpY2UqIHVkZXYgPSBjYW0tPnVzYmRldjsKKwl1OCogYnVmZiA9IGNhbS0+Y29udHJvbF9idWZmZXI7CisJaW50IHJlczsKKworCSpidWZmID0gdmFsdWU7CisKKwlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDA4LCAweDQxLAorCSAgICAgICAgICAgICAgICAgICAgICBpbmRleCwgMCwgYnVmZiwgMSwgU045QzEwMl9DVFJMX1RJTUVPVVQpOworCWlmIChyZXMgPCAwKSB7CisJCURCRygzLCAiRmFpbGVkIHRvIHdyaXRlIGEgcmVnaXN0ZXIgKHZhbHVlIDB4JTAyWCwgaW5kZXggIgorCQkgICAgICAgIjB4JTAyWCwgZXJyb3IgJWQpIiwgdmFsdWUsIGluZGV4LCByZXMpCisJCXJldHVybiAtMTsKKwl9CisKKwljYW0tPnJlZ1tpbmRleF0gPSB2YWx1ZTsKKworCXJldHVybiAwOworfQorCisKKy8qIE5PVEU6IHJlYWRpbmcgc29tZSByZWdpc3RlcnMgYWx3YXlzIHJldHVybnMgMCAqLworc3RhdGljIGludCBzbjljMTAyX3JlYWRfcmVnKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCB1MTYgaW5kZXgpCit7CisJc3RydWN0IHVzYl9kZXZpY2UqIHVkZXYgPSBjYW0tPnVzYmRldjsKKwl1OCogYnVmZiA9IGNhbS0+Y29udHJvbF9idWZmZXI7CisJaW50IHJlczsKKworCXJlcyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDB4MDAsIDB4YzEsCisJICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCAwLCBidWZmLCAxLCBTTjlDMTAyX0NUUkxfVElNRU9VVCk7CisJaWYgKHJlcyA8IDApCisJCURCRygzLCAiRmFpbGVkIHRvIHJlYWQgYSByZWdpc3RlciAoaW5kZXggMHglMDJYLCBlcnJvciAlZCkiLAorCQkgICAgaW5kZXgsIHJlcykKKworCXJldHVybiAocmVzID49IDApID8gKGludCkoKmJ1ZmYpIDogLTE7Cit9CisKKworaW50IHNuOWMxMDJfcHJlYWRfcmVnKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCB1MTYgaW5kZXgpCit7CisJaWYgKGluZGV4ID4gMHgxZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gY2FtLT5yZWdbaW5kZXhdOworfQorCisKK3N0YXRpYyBpbnQKK3NuOWMxMDJfaTJjX3dhaXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yKQoreworCWludCBpLCByOworCisJZm9yIChpID0gMTsgaSA8PSA1OyBpKyspIHsKKwkJciA9IHNuOWMxMDJfcmVhZF9yZWcoY2FtLCAweDA4KTsKKwkJaWYgKHIgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWlmIChyICYgMHgwNCkKKwkJCXJldHVybiAwOworCQlpZiAoc2Vuc29yLT5mcmVxdWVuY3kgJiBTTjlDMTAyX0kyQ180MDBLSFopCisJCQl1ZGVsYXkoNSoxNik7CisJCWVsc2UKKwkJCXVkZWxheSgxNioxNik7CisJfQorCXJldHVybiAtRUJVU1k7Cit9CisKKworc3RhdGljIGludAorc245YzEwMl9pMmNfZGV0ZWN0X3JlYWRfZXJyb3Ioc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzZW5zb3IpCit7CisJaW50IHI7CisJciA9IHNuOWMxMDJfcmVhZF9yZWcoY2FtLCAweDA4KTsKKwlyZXR1cm4gKHIgPCAwIHx8IChyID49IDAgJiYgIShyICYgMHgwOCkpKSA/IC1FSU8gOiAwOworfQorCisKK3N0YXRpYyBpbnQKK3NuOWMxMDJfaTJjX2RldGVjdF93cml0ZV9lcnJvcihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzZW5zb3IpCit7CisJaW50IHI7CisJciA9IHNuOWMxMDJfcmVhZF9yZWcoY2FtLCAweDA4KTsKKwlyZXR1cm4gKHIgPCAwIHx8IChyID49IDAgJiYgKHIgJiAweDA4KSkpID8gLUVJTyA6IDA7Cit9CisKKworaW50IAorc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yLCB1OCBkYXRhMCwgdTggZGF0YTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgdTggbiwgdTggYnVmZmVyW10pCit7CisJc3RydWN0IHVzYl9kZXZpY2UqIHVkZXYgPSBjYW0tPnVzYmRldjsKKwl1OCogZGF0YSA9IGNhbS0+Y29udHJvbF9idWZmZXI7CisJaW50IGVyciA9IDAsIHJlczsKKworCS8qIFdyaXRlIGN5Y2xlICovCisJZGF0YVswXSA9ICgoc2Vuc29yLT5pbnRlcmZhY2UgPT0gU045QzEwMl9JMkNfMldJUkVTKSA/IDB4ODAgOiAwKSB8CisJICAgICAgICAgICgoc2Vuc29yLT5mcmVxdWVuY3kgJiBTTjlDMTAyX0kyQ180MDBLSFopID8gMHgwMSA6IDApIHwgMHgxMDsKKwlkYXRhWzFdID0gZGF0YTA7IC8qIEkyQyBzbGF2ZSBpZCAqLworCWRhdGFbMl0gPSBkYXRhMTsgLyogYWRkcmVzcyAqLworCWRhdGFbN10gPSAweDEwOworCXJlcyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIDB4MDgsIDB4NDEsCisJICAgICAgICAgICAgICAgICAgICAgIDB4MDgsIDAsIGRhdGEsIDgsIFNOOUMxMDJfQ1RSTF9USU1FT1VUKTsKKwlpZiAocmVzIDwgMCkKKwkJZXJyICs9IHJlczsKKworCWVyciArPSBzbjljMTAyX2kyY193YWl0KGNhbSwgc2Vuc29yKTsKKworCS8qIFJlYWQgY3ljbGUgLSBuIGJ5dGVzICovCisJZGF0YVswXSA9ICgoc2Vuc29yLT5pbnRlcmZhY2UgPT0gU045QzEwMl9JMkNfMldJUkVTKSA/IDB4ODAgOiAwKSB8CisJICAgICAgICAgICgoc2Vuc29yLT5mcmVxdWVuY3kgJiBTTjlDMTAyX0kyQ180MDBLSFopID8gMHgwMSA6IDApIHwKKwkgICAgICAgICAgKG4gPDwgNCkgfCAweDAyOworCWRhdGFbMV0gPSBkYXRhMDsKKwlkYXRhWzddID0gMHgxMDsKKwlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDA4LCAweDQxLAorCSAgICAgICAgICAgICAgICAgICAgICAweDA4LCAwLCBkYXRhLCA4LCBTTjlDMTAyX0NUUkxfVElNRU9VVCk7CisJaWYgKHJlcyA8IDApCisJCWVyciArPSByZXM7CisKKwllcnIgKz0gc245YzEwMl9pMmNfd2FpdChjYW0sIHNlbnNvcik7CisKKwkvKiBUaGUgZmlyc3QgcmVhZCBieXRlIHdpbGwgYmUgcGxhY2VkIGluIGRhdGFbNF0gKi8KKwlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDAwLCAweGMxLAorCSAgICAgICAgICAgICAgICAgICAgICAweDBhLCAwLCBkYXRhLCA1LCBTTjlDMTAyX0NUUkxfVElNRU9VVCk7CisJaWYgKHJlcyA8IDApCisJCWVyciArPSByZXM7CisKKwllcnIgKz0gc245YzEwMl9pMmNfZGV0ZWN0X3JlYWRfZXJyb3IoY2FtLCBzZW5zb3IpOworCisJUERCR0coIkkyQyByZWFkOiBhZGRyZXNzIDB4JTAyWCwgZmlyc3QgcmVhZCBieXRlOiAweCUwMlgiLCBkYXRhMSwKKwkgICAgICBkYXRhWzRdKQorCisJaWYgKGVycikgeworCQlEQkcoMywgIkkyQyByZWFkIGZhaWxlZCBmb3IgJXMgaW1hZ2Ugc2Vuc29yIiwgc2Vuc29yLT5uYW1lKQorCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGJ1ZmZlcikKKwkJbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZW9mKGJ1ZmZlcikpOworCisJcmV0dXJuIChpbnQpZGF0YVs0XTsKK30KKworCitpbnQgCitzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvciwgdTggbiwgdTggZGF0YTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGRhdGExLCB1OCBkYXRhMiwgdTggZGF0YTMsIHU4IGRhdGE0LCB1OCBkYXRhNSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSogdWRldiA9IGNhbS0+dXNiZGV2OworCXU4KiBkYXRhID0gY2FtLT5jb250cm9sX2J1ZmZlcjsKKwlpbnQgZXJyID0gMCwgcmVzOworCisJLyogV3JpdGUgY3ljbGUuIEl0IHVzdWFsbHkgaXMgYWRkcmVzcyArIHZhbHVlICovCisJZGF0YVswXSA9ICgoc2Vuc29yLT5pbnRlcmZhY2UgPT0gU045QzEwMl9JMkNfMldJUkVTKSA/IDB4ODAgOiAwKSB8CisJICAgICAgICAgICgoc2Vuc29yLT5mcmVxdWVuY3kgJiBTTjlDMTAyX0kyQ180MDBLSFopID8gMHgwMSA6IDApCisJICAgICAgICAgIHwgKChuIC0gMSkgPDwgNCk7CisJZGF0YVsxXSA9IGRhdGEwOworCWRhdGFbMl0gPSBkYXRhMTsKKwlkYXRhWzNdID0gZGF0YTI7CisJZGF0YVs0XSA9IGRhdGEzOworCWRhdGFbNV0gPSBkYXRhNDsKKwlkYXRhWzZdID0gZGF0YTU7CisJZGF0YVs3XSA9IDB4MTQ7CisJcmVzID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgwOCwgMHg0MSwKKwkgICAgICAgICAgICAgICAgICAgICAgMHgwOCwgMCwgZGF0YSwgOCwgU045QzEwMl9DVFJMX1RJTUVPVVQpOworCWlmIChyZXMgPCAwKQorCQllcnIgKz0gcmVzOworCisJZXJyICs9IHNuOWMxMDJfaTJjX3dhaXQoY2FtLCBzZW5zb3IpOworCWVyciArPSBzbjljMTAyX2kyY19kZXRlY3Rfd3JpdGVfZXJyb3IoY2FtLCBzZW5zb3IpOworCisJaWYgKGVycikKKwkJREJHKDMsICJJMkMgd3JpdGUgZmFpbGVkIGZvciAlcyBpbWFnZSBzZW5zb3IiLCBzZW5zb3ItPm5hbWUpCisKKwlQREJHRygiSTJDIHJhdyB3cml0ZTogJXUgYnl0ZXMsIGRhdGEwID0gMHglMDJYLCBkYXRhMSA9IDB4JTAyWCwgIgorCSAgICAgICJkYXRhMiA9IDB4JTAyWCwgZGF0YTMgPSAweCUwMlgsIGRhdGE0ID0gMHglMDJYLCBkYXRhNSA9IDB4JTAyWCIsCisJICAgICAgbiwgZGF0YTAsIGRhdGExLCBkYXRhMiwgZGF0YTMsIGRhdGE0LCBkYXRhNSkKKworCXJldHVybiBlcnIgPyAtMSA6IDA7Cit9CisKKworaW50CitzbjljMTAyX2kyY190cnlfcmVhZChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yLCB1OCBhZGRyZXNzKQoreworCXJldHVybiBzbjljMTAyX2kyY190cnlfcmF3X3JlYWQoY2FtLCBzZW5zb3IsIHNlbnNvci0+aTJjX3NsYXZlX2lkLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcywgMSwgTlVMTCk7Cit9CisKKworaW50IAorc245YzEwMl9pMmNfdHJ5X3dyaXRlKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yLCB1OCBhZGRyZXNzLCB1OCB2YWx1ZSkKK3sKKwlyZXR1cm4gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sIHNlbnNvciwgMywgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vuc29yLT5pMmNfc2xhdmVfaWQsIGFkZHJlc3MsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIDAsIDAsIDApOworfQorCisKK2ludCBzbjljMTAyX2kyY19yZWFkKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCB1OCBhZGRyZXNzKQoreworCWlmICghY2FtLT5zZW5zb3IpCisJCXJldHVybiAtMTsKKworCXJldHVybiBzbjljMTAyX2kyY190cnlfcmVhZChjYW0sIGNhbS0+c2Vuc29yLCBhZGRyZXNzKTsKK30KKworCitpbnQgc245YzEwMl9pMmNfd3JpdGUoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHU4IGFkZHJlc3MsIHU4IHZhbHVlKQoreworCWlmICghY2FtLT5zZW5zb3IpCisJCXJldHVybiAtMTsKKworCXJldHVybiBzbjljMTAyX2kyY190cnlfd3JpdGUoY2FtLCBjYW0tPnNlbnNvciwgYWRkcmVzcywgdmFsdWUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkKgorc245YzEwMl9maW5kX3NvZl9oZWFkZXIoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHZvaWQqIG1lbSwgc2l6ZV90IGxlbikKK3sKKwlzaXplX3Qgc29mbGVuID0gc2l6ZW9mKHNuOWMxMDJfc29mX2hlYWRlcl90KSwgaTsKKwl1OCBqLCBuID0gc2l6ZW9mKHNuOWMxMDJfc29mX2hlYWRlcikgLyBzb2ZsZW47CisKKwlmb3IgKGkgPSAwOyAobGVuID49IHNvZmxlbikgJiYgKGkgPD0gbGVuIC0gc29mbGVuKTsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgbjsgaisrKQorCQkJLyogSXQncyBlbm91Z2ggdG8gY29tcGFyZSA3IGJ5dGVzICovCisJCQlpZiAoIW1lbWNtcChtZW0gKyBpLCBzbjljMTAyX3NvZl9oZWFkZXJbal0sIDcpKSB7CisJCQkJbWVtY3B5KGNhbS0+c29mX2hlYWRlciwgbWVtICsgaSwgc29mbGVuKTsKKwkJCQkvKiBTa2lwIHRoZSBoZWFkZXIgKi8KKwkJCQlyZXR1cm4gbWVtICsgaSArIHNvZmxlbjsKKwkJCX0KKworCXJldHVybiBOVUxMOworfQorCisKK3N0YXRpYyB2b2lkKgorc245YzEwMl9maW5kX2VvZl9oZWFkZXIoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHZvaWQqIG1lbSwgc2l6ZV90IGxlbikKK3sKKwlzaXplX3QgZW9mbGVuID0gc2l6ZW9mKHNuOWMxMDJfZW9mX2hlYWRlcl90KSwgaTsKKwl1bnNpZ25lZCBqLCBuID0gc2l6ZW9mKHNuOWMxMDJfZW9mX2hlYWRlcikgLyBlb2ZsZW47CisKKwlpZiAoY2FtLT5zZW5zb3ItPnBpeF9mb3JtYXQucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1NOOUMxMFgpCisJCXJldHVybiBOVUxMOyAvKiBFT0YgaGVhZGVyIGRvZXMgbm90IGV4aXN0IGluIGNvbXByZXNzZWQgZGF0YSAqLworCisJZm9yIChpID0gMDsgKGxlbiA+PSBlb2ZsZW4pICYmIChpIDw9IGxlbiAtIGVvZmxlbik7IGkrKykKKwkJZm9yIChqID0gMDsgaiA8IG47IGorKykKKwkJCWlmICghbWVtY21wKG1lbSArIGksIHNuOWMxMDJfZW9mX2hlYWRlcltqXSwgZW9mbGVuKSkKKwkJCQlyZXR1cm4gbWVtICsgaTsKKworCXJldHVybiBOVUxMOworfQorCisKK3N0YXRpYyB2b2lkIHNuOWMxMDJfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MqIHJlZ3MpCit7CisJc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0gPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHNuOWMxMDJfZnJhbWVfdCoqIGY7CisJc2l6ZV90IGltYWdlc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJdTggaTsKKwlpbnQgZXJyID0gMDsKKworCWlmICh1cmItPnN0YXR1cyA9PSAtRU5PRU5UKQorCQlyZXR1cm47CisKKwlmID0gJmNhbS0+ZnJhbWVfY3VycmVudDsKKworCWlmIChjYW0tPnN0cmVhbSA9PSBTVFJFQU1fSU5URVJSVVBUKSB7CisJCWNhbS0+c3RyZWFtID0gU1RSRUFNX09GRjsKKwkJaWYgKCgqZikpCisJCQkoKmYpLT5zdGF0ZSA9IEZfUVVFVUVEOworCQlEQkcoMywgIlN0cmVhbSBpbnRlcnJ1cHRlZCIpCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2FtLT53YWl0X3N0cmVhbSk7CisJfQorCisJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKQorCQlyZXR1cm47CisKKwlpZiAoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSB7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2FtLT53YWl0X2ZyYW1lKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjYW0tPnN0cmVhbSA9PSBTVFJFQU1fT0ZGIHx8IGxpc3RfZW1wdHkoJmNhbS0+aW5xdWV1ZSkpCisJCWdvdG8gcmVzdWJtaXRfdXJiOworCisJaWYgKCEoKmYpKQorCQkoKmYpID0gbGlzdF9lbnRyeShjYW0tPmlucXVldWUubmV4dCwgc3RydWN0IHNuOWMxMDJfZnJhbWVfdCwKKwkJICAgICAgICAgICAgICAgICAgZnJhbWUpOworCisJaW1hZ2VzaXplID0gKGNhbS0+c2Vuc29yLT5waXhfZm9ybWF0LndpZHRoICoKKwkgICAgICAgICAgICAgY2FtLT5zZW5zb3ItPnBpeF9mb3JtYXQuaGVpZ2h0ICoKKwkgICAgICAgICAgICAgY2FtLT5zZW5zb3ItPnBpeF9mb3JtYXQucHJpdikgLyA4OworCisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgaW1nLCBsZW4sIHN0YXR1czsKKwkJdm9pZCAqcG9zLCAqc29mLCAqZW9mOworCisJCWxlbiA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKKwkJc3RhdHVzID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXM7CisJCXBvcyA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0ICsgdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwkJaWYgKHN0YXR1cykgeworCQkJREJHKDMsICJFcnJvciBpbiBpc29jaHJvbm91cyBmcmFtZSIpCisJCQkoKmYpLT5zdGF0ZSA9IEZfRVJST1I7CisJCQljb250aW51ZTsKKwkJfQorCisJCVBEQkdHKCJJc29jaHJub3VzIGZyYW1lOiBsZW5ndGggJXUsICMldSBpIiwgbGVuLCBpKQorCisJCS8qCisJCSAgIE5PVEU6IEl0IGlzIHByb2JhYmx5IGNvcnJlY3QgdG8gYXNzdW1lIHRoYXQgU09GIGFuZCBFT0YKKwkJICAgICAgICAgaGVhZGVycyBkbyBub3Qgb2NjdXIgYmV0d2VlbiB0d28gY29uc2VjdXRpdmUgcGFja2V0cywKKwkJICAgICAgICAgYnV0IHdobyBrbm93cy4uV2hhdGV2ZXIgaXMgdGhlIHRydXRoLCB0aGlzIGFzc3VtcHRpb24KKwkJICAgICAgICAgZG9lc24ndCBpbnRyb2R1Y2UgYnVncy4KKwkJKi8KKworcmVkbzoKKwkJc29mID0gc245YzEwMl9maW5kX3NvZl9oZWFkZXIoY2FtLCBwb3MsIGxlbik7CisJCWlmICghc29mKSB7CisJCQllb2YgPSBzbjljMTAyX2ZpbmRfZW9mX2hlYWRlcihjYW0sIHBvcywgbGVuKTsKKwkJCWlmICgoKmYpLT5zdGF0ZSA9PSBGX0dSQUJCSU5HKSB7CitlbmRfb2ZfZnJhbWU6CisJCQkJaW1nID0gbGVuOworCisJCQkJaWYgKGVvZikKKwkJCQkJaW1nID0gKGVvZiA+IHBvcykgPyBlb2YgLSBwb3MgLSAxIDogMDsKKworCQkJCWlmICgoKmYpLT5idWYuYnl0ZXN1c2VkK2ltZyA+IGltYWdlc2l6ZSkgeworCQkJCQl1MzIgYiA9ICgqZiktPmJ1Zi5ieXRlc3VzZWQgKyBpbWcgLQorCQkJCQkgICAgICAgIGltYWdlc2l6ZTsKKwkJCQkJaW1nID0gaW1hZ2VzaXplIC0gKCpmKS0+YnVmLmJ5dGVzdXNlZDsKKwkJCQkJREJHKDMsICJFeHBlY3RlZCBFT0Ygbm90IGZvdW5kOiAiCisJCQkJCSAgICAgICAidmlkZW8gZnJhbWUgY3V0IikKKwkJCQkJaWYgKGVvZikKKwkJCQkJCURCRygzLCAiRXhjZWVkZWQgbGltaXQ6ICsldSAiCisJCQkJCQkgICAgICAgImJ5dGVzIiwgKHVuc2lnbmVkKShiKSkKKwkJCQl9CisKKwkJCQltZW1jcHkoKCpmKS0+YnVmbWVtICsgKCpmKS0+YnVmLmJ5dGVzdXNlZCwgcG9zLAorCQkJCSAgICAgICBpbWcpOworCisJCQkJaWYgKCgqZiktPmJ1Zi5ieXRlc3VzZWQgPT0gMCkKKwkJCQkJZG9fZ2V0dGltZW9mZGF5KCYoKmYpLT5idWYudGltZXN0YW1wKTsKKworCQkJCSgqZiktPmJ1Zi5ieXRlc3VzZWQgKz0gaW1nOworCisJCQkJaWYgKCgqZiktPmJ1Zi5ieXRlc3VzZWQgPT0gaW1hZ2VzaXplIHx8CisJCQkJICAgIChjYW0tPnNlbnNvci0+cGl4X2Zvcm1hdC5waXhlbGZvcm1hdCA9PQorCQkJCSAgICAgICAgICAgICAgICBWNEwyX1BJWF9GTVRfU045QzEwWCAmJiBlb2YpKSB7CisJCQkJCXUzMiBiID0gKCpmKS0+YnVmLmJ5dGVzdXNlZDsKKwkJCQkJKCpmKS0+c3RhdGUgPSBGX0RPTkU7CisJCQkJCSgqZiktPmJ1Zi5zZXF1ZW5jZT0gKytjYW0tPmZyYW1lX2NvdW50OworCQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5xdWV1ZV9sb2NrLAorCQkJCQkgICAgICAgICAgICAgICAgICBsb2NrX2ZsYWdzKTsKKwkJCQkJbGlzdF9tb3ZlX3RhaWwoJigqZiktPmZyYW1lLAorCQkJCQkgICAgICAgICAgICAgICAmY2FtLT5vdXRxdWV1ZSk7CisJCQkJCWlmICghbGlzdF9lbXB0eSgmY2FtLT5pbnF1ZXVlKSkKKwkJCQkJCSgqZikgPSBsaXN0X2VudHJ5KAorCQkJCQkJICAgICAgICBjYW0tPmlucXVldWUubmV4dCwKKwkJCQkJCSAgICAgICAgc3RydWN0IHNuOWMxMDJfZnJhbWVfdCwKKwkJCQkJCSAgICAgICAgZnJhbWUgKTsKKwkJCQkJZWxzZQorCQkJCQkJKCpmKSA9IE5VTEw7CisJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+cXVldWVfbG9jaworCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICwgbG9ja19mbGFncyk7CisJCQkJCW1lbWNweShjYW0tPnN5c2ZzLmZyYW1lX2hlYWRlciwKKwkJCQkJICAgICAgIGNhbS0+c29mX2hlYWRlciwKKwkJCQkJICAgICAgIHNpemVvZihzbjljMTAyX3NvZl9oZWFkZXJfdCkpOworCQkJCQlEQkcoMywgIlZpZGVvIGZyYW1lIGNhcHR1cmVkOiAiCisJCQkJCSAgICAgICAiJWx1IGJ5dGVzIiwgKHVuc2lnbmVkIGxvbmcpKGIpKQorCisJCQkJCWlmICghKCpmKSkKKwkJCQkJCWdvdG8gcmVzdWJtaXRfdXJiOworCisJCQkJfSBlbHNlIGlmIChlb2YpIHsKKwkJCQkJKCpmKS0+c3RhdGUgPSBGX0VSUk9SOworCQkJCQlEQkcoMywgIk5vdCBleHBlY3RlZCBFT0YgYWZ0ZXIgJWx1ICIKKwkJCQkJICAgICAgICJieXRlcyBvZiBpbWFnZSBkYXRhIiwgCisJCQkJCSAgKHVuc2lnbmVkIGxvbmcpKCgqZiktPmJ1Zi5ieXRlc3VzZWQpKQorCQkJCX0KKworCQkJCWlmIChzb2YpIC8qICgxKSAqLworCQkJCQlnb3RvIHN0YXJ0X29mX2ZyYW1lOworCisJCQl9IGVsc2UgaWYgKGVvZikgeworCQkJCURCRygzLCAiRU9GIHdpdGhvdXQgU09GIikKKwkJCQljb250aW51ZTsKKworCQkJfSBlbHNlIHsKKwkJCQlQREJHRygiSWdub3JpbmcgcG9pbnRsZXNzIGlzb2Nocm9ub3VzIGZyYW1lIikKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQl9IGVsc2UgaWYgKCgqZiktPnN0YXRlID09IEZfUVVFVUVEIHx8ICgqZiktPnN0YXRlID09IEZfRVJST1IpIHsKK3N0YXJ0X29mX2ZyYW1lOgorCQkJKCpmKS0+c3RhdGUgPSBGX0dSQUJCSU5HOworCQkJKCpmKS0+YnVmLmJ5dGVzdXNlZCA9IDA7CisJCQlsZW4gLT0gKHNvZiAtIHBvcyk7CisJCQlwb3MgPSBzb2Y7CisJCQlEQkcoMywgIlNPRiBkZXRlY3RlZDogbmV3IHZpZGVvIGZyYW1lIikKKwkJCWlmIChsZW4pCisJCQkJZ290byByZWRvOworCisJCX0gZWxzZSBpZiAoKCpmKS0+c3RhdGUgPT0gRl9HUkFCQklORykgeworCQkJZW9mID0gc245YzEwMl9maW5kX2VvZl9oZWFkZXIoY2FtLCBwb3MsIGxlbik7CisJCQlpZiAoZW9mICYmIGVvZiA8IHNvZikKKwkJCQlnb3RvIGVuZF9vZl9mcmFtZTsgLyogKDEpICovCisJCQllbHNlIHsKKwkJCQlpZiAoY2FtLT5zZW5zb3ItPnBpeF9mb3JtYXQucGl4ZWxmb3JtYXQgPT0KKwkJCQkgICAgVjRMMl9QSVhfRk1UX1NOOUMxMFgpIHsKKwkJCQkJZW9mID0gc29mLXNpemVvZihzbjljMTAyX3NvZl9oZWFkZXJfdCk7CisJCQkJCWdvdG8gZW5kX29mX2ZyYW1lOworCQkJCX0gZWxzZSB7CisJCQkJCURCRygzLCAiU09GIGJlZm9yZSBleHBlY3RlZCBFT0YgYWZ0ZXIgIgorCQkJCQkgICAgICAgIiVsdSBieXRlcyBvZiBpbWFnZSBkYXRhIiwgCisJCQkJCSAgKHVuc2lnbmVkIGxvbmcpKCgqZiktPmJ1Zi5ieXRlc3VzZWQpKQorCQkJCQlnb3RvIHN0YXJ0X29mX2ZyYW1lOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworcmVzdWJtaXRfdXJiOgorCXVyYi0+ZGV2ID0gY2FtLT51c2JkZXY7CisJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoZXJyIDwgMCAmJiBlcnIgIT0gLUVQRVJNKSB7CisJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CisJCURCRygxLCAidXNiX3N1Ym1pdF91cmIoKSBmYWlsZWQiKQorCX0KKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2FtLT53YWl0X2ZyYW1lKTsKK30KKworCitzdGF0aWMgaW50IHNuOWMxMDJfc3RhcnRfdHJhbnNmZXIoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBjYW0tPnVzYmRldjsKKwlzdHJ1Y3QgdXJiKiB1cmI7CisJY29uc3QgdW5zaWduZWQgaW50IHdNYXhQYWNrZXRTaXplW10gPSB7MCwgMTI4LCAyNTYsIDM4NCwgNTEyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4MCwgODAwLCA5MDAsIDEwMjN9OworCWNvbnN0IHVuc2lnbmVkIGludCBwc3ogPSB3TWF4UGFja2V0U2l6ZVtTTjlDMTAyX0FMVEVSTkFURV9TRVRUSU5HXTsKKwlzOCBpLCBqOworCWludCBlcnIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IFNOOUMxMDJfVVJCUzsgaSsrKSB7CisJCWNhbS0+dHJhbnNmZXJfYnVmZmVyW2ldID0ga21hbGxvYyhTTjlDMTAyX0lTT19QQUNLRVRTICogcHN6LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghY2FtLT50cmFuc2Zlcl9idWZmZXJbaV0pIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlEQkcoMSwgIk5vdCBlbm91Z2ggbWVtb3J5IikKKwkJCWdvdG8gZnJlZV9idWZmZXJzOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IFNOOUMxMDJfVVJCUzsgaSsrKSB7CisJCXVyYiA9IHVzYl9hbGxvY191cmIoU045QzEwMl9JU09fUEFDS0VUUywgR0ZQX0tFUk5FTCk7CisJCWNhbS0+dXJiW2ldID0gdXJiOworCQlpZiAoIXVyYikgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCURCRygxLCAidXNiX2FsbG9jX3VyYigpIGZhaWxlZCIpCisJCQlnb3RvIGZyZWVfdXJiczsKKwkJfQorCQl1cmItPmRldiA9IHVkZXY7CisJCXVyYi0+Y29udGV4dCA9IGNhbTsKKwkJdXJiLT5waXBlID0gdXNiX3Jjdmlzb2NwaXBlKHVkZXYsIDEpOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gU045QzEwMl9JU09fUEFDS0VUUzsKKwkJdXJiLT5jb21wbGV0ZSA9IHNuOWMxMDJfdXJiX2NvbXBsZXRlOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGNhbS0+dHJhbnNmZXJfYnVmZmVyW2ldOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBwc3ogKiBTTjlDMTAyX0lTT19QQUNLRVRTOworCQl1cmItPmludGVydmFsID0gMTsKKwkJZm9yIChqID0gMDsgaiA8IFNOOUMxMDJfSVNPX1BBQ0tFVFM7IGorKykgeworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5vZmZzZXQgPSBwc3ogKiBqOworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5sZW5ndGggPSBwc3o7CisJCX0KKwl9CisKKwkvKiBFbmFibGUgdmlkZW8gKi8KKwlpZiAoIShjYW0tPnJlZ1sweDAxXSAmIDB4MDQpKSB7CisJCWVyciA9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgY2FtLT5yZWdbMHgwMV0gfCAweDA0LCAweDAxKTsKKwkJaWYgKGVycikgeworCQkJZXJyID0gLUVJTzsKKwkJCURCRygxLCAiSS9PIGhhcmR3YXJlIGVycm9yIikKKwkJCWdvdG8gZnJlZV91cmJzOworCQl9CisJfQorCisJZXJyID0gdXNiX3NldF9pbnRlcmZhY2UodWRldiwgMCwgU045QzEwMl9BTFRFUk5BVEVfU0VUVElORyk7CisJaWYgKGVycikgeworCQlEQkcoMSwgInVzYl9zZXRfaW50ZXJmYWNlKCkgZmFpbGVkIikKKwkJZ290byBmcmVlX3VyYnM7CisJfQorCisJY2FtLT5mcmFtZV9jdXJyZW50ID0gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBTTjlDMTAyX1VSQlM7IGkrKykgeworCQllcnIgPSB1c2Jfc3VibWl0X3VyYihjYW0tPnVyYltpXSwgR0ZQX0tFUk5FTCk7CisJCWlmIChlcnIpIHsKKwkJCWZvciAoaiA9IGktMTsgaiA+PSAwOyBqLS0pCisJCQkJdXNiX2tpbGxfdXJiKGNhbS0+dXJiW2pdKTsKKwkJCURCRygxLCAidXNiX3N1Ym1pdF91cmIoKSBmYWlsZWQsIGVycm9yICVkIiwgZXJyKQorCQkJZ290byBmcmVlX3VyYnM7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworZnJlZV91cmJzOgorCWZvciAoaSA9IDA7IChpIDwgU045QzEwMl9VUkJTKSAmJiAgY2FtLT51cmJbaV07IGkrKykKKwkJdXNiX2ZyZWVfdXJiKGNhbS0+dXJiW2ldKTsKKworZnJlZV9idWZmZXJzOgorCWZvciAoaSA9IDA7IChpIDwgU045QzEwMl9VUkJTKSAmJiBjYW0tPnRyYW5zZmVyX2J1ZmZlcltpXTsgaSsrKQorCQlrZnJlZShjYW0tPnRyYW5zZmVyX2J1ZmZlcltpXSk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgc245YzEwMl9zdG9wX3RyYW5zZmVyKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gY2FtLT51c2JkZXY7CisJczggaTsKKwlpbnQgZXJyID0gMDsKKworCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSBTTjlDMTAyX1VSQlMtMTsgaSA+PSAwOyBpLS0pIHsKKwkJdXNiX2tpbGxfdXJiKGNhbS0+dXJiW2ldKTsKKwkJdXNiX2ZyZWVfdXJiKGNhbS0+dXJiW2ldKTsKKwkJa2ZyZWUoY2FtLT50cmFuc2Zlcl9idWZmZXJbaV0pOworCX0KKworCWVyciA9IHVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsIDAsIDApOyAvKiAwIE1iL3MgKi8KKwlpZiAoZXJyKQorCQlEQkcoMywgInVzYl9zZXRfaW50ZXJmYWNlKCkgZmFpbGVkIikKKworCXJldHVybiBlcnI7Cit9CisKKworaW50IHNuOWMxMDJfc3RyZWFtX2ludGVycnVwdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWNhbS0+c3RyZWFtID0gU1RSRUFNX0lOVEVSUlVQVDsKKwllcnIgPSB3YWl0X2V2ZW50X3RpbWVvdXQoY2FtLT53YWl0X3N0cmVhbSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgKGNhbS0+c3RyZWFtID09IFNUUkVBTV9PRkYpIHx8CisJICAgICAgICAgICAgICAgICAgICAgICAgIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCksCisJICAgICAgICAgICAgICAgICAgICAgICAgIFNOOUMxMDJfVVJCX1RJTUVPVVQpOworCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJZWxzZSBpZiAoZXJyKSB7CisJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CisJCURCRygxLCAiVGhlIGNhbWVyYSBpcyBtaXNjb25maWd1cmVkLiBUbyB1c2UgaXQsIGNsb3NlIGFuZCAiCisJCSAgICAgICAib3BlbiAvZGV2L3ZpZGVvJWQgYWdhaW4uIiwgY2FtLT52NGxkZXYtPm1pbm9yKQorCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB1OCBzbjljMTAyX3N0cnRvdTgoY29uc3QgY2hhciogYnVmZiwgc2l6ZV90IGxlbiwgc3NpemVfdCogY291bnQpCit7CisJY2hhciBzdHJbNV07CisJY2hhciogZW5kcDsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWlmIChsZW4gPCA0KSB7CisJCXN0cm5jcHkoc3RyLCBidWZmLCBsZW4pOworCQlzdHJbbGVuKzFdID0gJ1wwJzsKKwl9IGVsc2UgeworCQlzdHJuY3B5KHN0ciwgYnVmZiwgNCk7CisJCXN0cls0XSA9ICdcMCc7CisJfQorCisJdmFsID0gc2ltcGxlX3N0cnRvdWwoc3RyLCAmZW5kcCwgMCk7CisKKwkqY291bnQgPSAwOworCWlmICh2YWwgPD0gMHhmZikKKwkJKmNvdW50ID0gKHNzaXplX3QpKGVuZHAgLSBzdHIpOworCWlmICgoKmNvdW50KSAmJiAobGVuID09ICpjb3VudCsxKSAmJiAoYnVmZlsqY291bnRdID09ICdcbicpKQorCQkqY291bnQgKz0gMTsKKworCXJldHVybiAodTgpdmFsOworfQorCisvKgorICAgTk9URSAxOiBiZWluZyBpbnNpZGUgb25lIG9mIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBpbXBsaWVzIHRoYXQgdGhlIHY0bAorICAgICAgICAgICBkZXZpY2UgZXhpc3RzIGZvciBzdXJlIChzZWUga29iamVjdHMgYW5kIHJlZmVyZW5jZSBjb3VudGVycykKKyAgIE5PVEUgMjogYnVmZmVycyBhcmUgUEFHRV9TSVpFIGxvbmcKKyovCisKK3N0YXRpYyBzc2l6ZV90IHNuOWMxMDJfc2hvd19yZWcoc3RydWN0IGNsYXNzX2RldmljZSogY2QsIGNoYXIqIGJ1ZikKK3sKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbTsKKwlzc2l6ZV90IGNvdW50OworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmc245YzEwMl9zeXNmc19sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHRvX3ZpZGVvX2RldmljZShjZCkpOworCWlmICghY2FtKSB7CisJCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwljb3VudCA9IHNwcmludGYoYnVmLCAiJXVcbiIsIGNhbS0+c3lzZnMucmVnKTsKKworCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfSAKKworCitzdGF0aWMgc3NpemVfdCAKK3NuOWMxMDJfc3RvcmVfcmVnKHN0cnVjdCBjbGFzc19kZXZpY2UqIGNkLCBjb25zdCBjaGFyKiBidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW07CisJdTggaW5kZXg7CisJc3NpemVfdCBjb3VudDsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJnNuOWMxMDJfc3lzZnNfbG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh0b192aWRlb19kZXZpY2UoY2QpKTsKKwlpZiAoIWNhbSkgeworCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaW5kZXggPSBzbjljMTAyX3N0cnRvdTgoYnVmLCBsZW4sICZjb3VudCk7CisJaWYgKGluZGV4ID4gMHgxZiB8fCAhY291bnQpIHsKKwkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNhbS0+c3lzZnMucmVnID0gaW5kZXg7CisKKwlEQkcoMiwgIk1vdmVkIFNOOUMxMFggcmVnaXN0ZXIgaW5kZXggdG8gMHglMDJYIiwgY2FtLT5zeXNmcy5yZWcpCisJREJHKDMsICJXcml0dGVuIGJ5dGVzOiAlemQiLCBjb3VudCkKKworCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCisKK3N0YXRpYyBzc2l6ZV90IHNuOWMxMDJfc2hvd192YWwoc3RydWN0IGNsYXNzX2RldmljZSogY2QsIGNoYXIqIGJ1ZikKK3sKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbTsKKwlzc2l6ZV90IGNvdW50OworCWludCB2YWw7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZzbjljMTAyX3N5c2ZzX2xvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodG9fdmlkZW9fZGV2aWNlKGNkKSk7CisJaWYgKCFjYW0pIHsKKwkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICgodmFsID0gc245YzEwMl9yZWFkX3JlZyhjYW0sIGNhbS0+c3lzZnMucmVnKSkgPCAwKSB7CisJCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwljb3VudCA9IHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7CisKKwlEQkcoMywgIlJlYWQgYnl0ZXM6ICV6ZCIsIGNvdW50KQorCisJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9IAorCisKK3N0YXRpYyBzc2l6ZV90CitzbjljMTAyX3N0b3JlX3ZhbChzdHJ1Y3QgY2xhc3NfZGV2aWNlKiBjZCwgY29uc3QgY2hhciogYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtOworCXU4IHZhbHVlOworCXNzaXplX3QgY291bnQ7CisJaW50IGVycjsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJnNuOWMxMDJfc3lzZnNfbG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh0b192aWRlb19kZXZpY2UoY2QpKTsKKwlpZiAoIWNhbSkgeworCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJdmFsdWUgPSBzbjljMTAyX3N0cnRvdTgoYnVmLCBsZW4sICZjb3VudCk7CisJaWYgKCFjb3VudCkgeworCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZXJyID0gc245YzEwMl93cml0ZV9yZWcoY2FtLCB2YWx1ZSwgY2FtLT5zeXNmcy5yZWcpOworCWlmIChlcnIpIHsKKwkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJCXJldHVybiAtRUlPOworCX0KKworCURCRygyLCAiV3JpdHRlbiBTTjlDMTBYIHJlZy4gMHglMDJYLCB2YWwuIDB4JTAyWCIsCisJICAgIGNhbS0+c3lzZnMucmVnLCB2YWx1ZSkKKwlEQkcoMywgIldyaXR0ZW4gYnl0ZXM6ICV6ZCIsIGNvdW50KQorCisJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKworc3RhdGljIHNzaXplX3Qgc245YzEwMl9zaG93X2kyY19yZWcoc3RydWN0IGNsYXNzX2RldmljZSogY2QsIGNoYXIqIGJ1ZikKK3sKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbTsKKwlzc2l6ZV90IGNvdW50OworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmc245YzEwMl9zeXNmc19sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHRvX3ZpZGVvX2RldmljZShjZCkpOworCWlmICghY2FtKSB7CisJCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwljb3VudCA9IHNwcmludGYoYnVmLCAiJXVcbiIsIGNhbS0+c3lzZnMuaTJjX3JlZyk7CisKKwlEQkcoMywgIlJlYWQgYnl0ZXM6ICV6ZCIsIGNvdW50KQorCisJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKworc3RhdGljIHNzaXplX3QgCitzbjljMTAyX3N0b3JlX2kyY19yZWcoc3RydWN0IGNsYXNzX2RldmljZSogY2QsIGNvbnN0IGNoYXIqIGJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbTsKKwl1OCBpbmRleDsKKwlzc2l6ZV90IGNvdW50OworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmc245YzEwMl9zeXNmc19sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHRvX3ZpZGVvX2RldmljZShjZCkpOworCWlmICghY2FtKSB7CisJCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpbmRleCA9IHNuOWMxMDJfc3RydG91OChidWYsIGxlbiwgJmNvdW50KTsKKwlpZiAoIWNvdW50KSB7CisJCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljYW0tPnN5c2ZzLmkyY19yZWcgPSBpbmRleDsKKworCURCRygyLCAiTW92ZWQgc2Vuc29yIHJlZ2lzdGVyIGluZGV4IHRvIDB4JTAyWCIsIGNhbS0+c3lzZnMuaTJjX3JlZykKKwlEQkcoMywgIldyaXR0ZW4gYnl0ZXM6ICV6ZCIsIGNvdW50KQorCisJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKworc3RhdGljIHNzaXplX3Qgc245YzEwMl9zaG93X2kyY192YWwoc3RydWN0IGNsYXNzX2RldmljZSogY2QsIGNoYXIqIGJ1ZikKK3sKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbTsKKwlzc2l6ZV90IGNvdW50OworCWludCB2YWw7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZzbjljMTAyX3N5c2ZzX2xvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodG9fdmlkZW9fZGV2aWNlKGNkKSk7CisJaWYgKCFjYW0pIHsKKwkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICghKGNhbS0+c2Vuc29yLT5zeXNmc19vcHMgJiBTTjlDMTAyX0kyQ19SRUFEKSkgeworCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCisJaWYgKCh2YWwgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgY2FtLT5zeXNmcy5pMmNfcmVnKSkgPCAwKSB7CisJCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwljb3VudCA9IHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7CisKKwlEQkcoMywgIlJlYWQgYnl0ZXM6ICV6ZCIsIGNvdW50KQorCisJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9IAorCisKK3N0YXRpYyBzc2l6ZV90CitzbjljMTAyX3N0b3JlX2kyY192YWwoc3RydWN0IGNsYXNzX2RldmljZSogY2QsIGNvbnN0IGNoYXIqIGJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbTsKKwl1OCB2YWx1ZTsKKwlzc2l6ZV90IGNvdW50OworCWludCBlcnI7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZzbjljMTAyX3N5c2ZzX2xvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodG9fdmlkZW9fZGV2aWNlKGNkKSk7CisJaWYgKCFjYW0pIHsKKwkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICghKGNhbS0+c2Vuc29yLT5zeXNmc19vcHMgJiBTTjlDMTAyX0kyQ19XUklURSkpIHsKKwkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJCXJldHVybiAtRU5PU1lTOworCX0KKworCXZhbHVlID0gc245YzEwMl9zdHJ0b3U4KGJ1ZiwgbGVuLCAmY291bnQpOworCWlmICghY291bnQpIHsKKwkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVyciA9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgY2FtLT5zeXNmcy5pMmNfcmVnLCB2YWx1ZSk7CisJaWYgKGVycikgeworCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJREJHKDIsICJXcml0dGVuIHNlbnNvciByZWcuIDB4JTAyWCwgdmFsLiAweCUwMlgiLAorCSAgICBjYW0tPnN5c2ZzLmkyY19yZWcsIHZhbHVlKQorCURCRygzLCAiV3JpdHRlbiBieXRlczogJXpkIiwgY291bnQpCisKKwl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworCitzdGF0aWMgc3NpemVfdAorc245YzEwMl9zdG9yZV9ncmVlbihzdHJ1Y3QgY2xhc3NfZGV2aWNlKiBjZCwgY29uc3QgY2hhciogYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtOworCWVudW0gc245YzEwMl9icmlkZ2UgYnJpZGdlOworCXNzaXplX3QgcmVzID0gMDsKKwl1OCB2YWx1ZTsKKwlzc2l6ZV90IGNvdW50OworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmc245YzEwMl9zeXNmc19sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHRvX3ZpZGVvX2RldmljZShjZCkpOworCWlmICghY2FtKSB7CisJCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlicmlkZ2UgPSBjYW0tPmJyaWRnZTsKKworCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCisJdmFsdWUgPSBzbjljMTAyX3N0cnRvdTgoYnVmLCBsZW4sICZjb3VudCk7CisJaWYgKCFjb3VudCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGJyaWRnZSkgeworCWNhc2UgQlJJREdFX1NOOUMxMDE6CisJY2FzZSBCUklER0VfU045QzEwMjoKKwkJaWYgKHZhbHVlID4gMHgwZikKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoKHJlcyA9IHNuOWMxMDJfc3RvcmVfcmVnKGNkLCAiMHgxMSIsIDQpKSA+PSAwKQorCQkJcmVzID0gc245YzEwMl9zdG9yZV92YWwoY2QsIGJ1ZiwgbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBCUklER0VfU045QzEwMzoKKwkJaWYgKHZhbHVlID4gMHg3ZikKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoKHJlcyA9IHNuOWMxMDJfc3RvcmVfcmVnKGNkLCAiMHgwNCIsIDQpKSA+PSAwKQorCQkJcmVzID0gc245YzEwMl9zdG9yZV92YWwoY2QsIGJ1ZiwgbGVuKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworCitzdGF0aWMgc3NpemVfdAorc245YzEwMl9zdG9yZV9ibHVlKHN0cnVjdCBjbGFzc19kZXZpY2UqIGNkLCBjb25zdCBjaGFyKiBidWYsIHNpemVfdCBsZW4pCit7CisJc3NpemVfdCByZXMgPSAwOworCXU4IHZhbHVlOworCXNzaXplX3QgY291bnQ7CisKKwl2YWx1ZSA9IHNuOWMxMDJfc3RydG91OChidWYsIGxlbiwgJmNvdW50KTsKKwlpZiAoIWNvdW50IHx8IHZhbHVlID4gMHg3ZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKHJlcyA9IHNuOWMxMDJfc3RvcmVfcmVnKGNkLCAiMHgwNiIsIDQpKSA+PSAwKQorCQlyZXMgPSBzbjljMTAyX3N0b3JlX3ZhbChjZCwgYnVmLCBsZW4pOworCisJcmV0dXJuIHJlczsKK30KKworCitzdGF0aWMgc3NpemVfdAorc245YzEwMl9zdG9yZV9yZWQoc3RydWN0IGNsYXNzX2RldmljZSogY2QsIGNvbnN0IGNoYXIqIGJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzc2l6ZV90IHJlcyA9IDA7CisJdTggdmFsdWU7CisJc3NpemVfdCBjb3VudDsKKworCXZhbHVlID0gc245YzEwMl9zdHJ0b3U4KGJ1ZiwgbGVuLCAmY291bnQpOworCWlmICghY291bnQgfHwgdmFsdWUgPiAweDdmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgocmVzID0gc245YzEwMl9zdG9yZV9yZWcoY2QsICIweDA1IiwgNCkpID49IDApCisJCXJlcyA9IHNuOWMxMDJfc3RvcmVfdmFsKGNkLCBidWYsIGxlbik7CisKKwlyZXR1cm4gcmVzOworfQorCisKK3N0YXRpYyBzc2l6ZV90IHNuOWMxMDJfc2hvd19mcmFtZV9oZWFkZXIoc3RydWN0IGNsYXNzX2RldmljZSogY2QsIGNoYXIqIGJ1ZikKK3sKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbTsKKwlzc2l6ZV90IGNvdW50OworCisJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodG9fdmlkZW9fZGV2aWNlKGNkKSk7CisJaWYgKCFjYW0pCisJCXJldHVybiAtRU5PREVWOworCisJY291bnQgPSBzaXplb2YoY2FtLT5zeXNmcy5mcmFtZV9oZWFkZXIpOworCW1lbWNweShidWYsIGNhbS0+c3lzZnMuZnJhbWVfaGVhZGVyLCBjb3VudCk7CisKKwlEQkcoMywgIkZyYW1lIGhlYWRlciwgcmVhZCBieXRlczogJXpkIiwgY291bnQpCisKKwlyZXR1cm4gY291bnQ7Cit9IAorCisKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihyZWcsIFNfSVJVR08gfCBTX0lXVVNSLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNuOWMxMDJfc2hvd19yZWcsIHNuOWMxMDJfc3RvcmVfcmVnKTsKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUih2YWwsIFNfSVJVR08gfCBTX0lXVVNSLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNuOWMxMDJfc2hvd192YWwsIHNuOWMxMDJfc3RvcmVfdmFsKTsKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihpMmNfcmVnLCBTX0lSVUdPIHwgU19JV1VTUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzbjljMTAyX3Nob3dfaTJjX3JlZywgc245YzEwMl9zdG9yZV9pMmNfcmVnKTsKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihpMmNfdmFsLCBTX0lSVUdPIHwgU19JV1VTUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzbjljMTAyX3Nob3dfaTJjX3ZhbCwgc245YzEwMl9zdG9yZV9pMmNfdmFsKTsKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihncmVlbiwgU19JV1VHTywgTlVMTCwgc245YzEwMl9zdG9yZV9ncmVlbik7CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoYmx1ZSwgU19JV1VHTywgTlVMTCwgc245YzEwMl9zdG9yZV9ibHVlKTsKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihyZWQsIFNfSVdVR08sIE5VTEwsIHNuOWMxMDJfc3RvcmVfcmVkKTsKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihmcmFtZV9oZWFkZXIsIFNfSVJVR08sCisgICAgICAgICAgICAgICAgICAgICAgICAgc245YzEwMl9zaG93X2ZyYW1lX2hlYWRlciwgTlVMTCk7CisKKworc3RhdGljIHZvaWQgc245YzEwMl9jcmVhdGVfc3lzZnMoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdjRsZGV2ID0gY2FtLT52NGxkZXY7CisKKwl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodjRsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcmVnKTsKKwl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodjRsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfdmFsKTsKKwl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodjRsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfZnJhbWVfaGVhZGVyKTsKKwlpZiAoY2FtLT5icmlkZ2UgPT0gQlJJREdFX1NOOUMxMDEgfHwgY2FtLT5icmlkZ2UgPT0gQlJJREdFX1NOOUMxMDIpCisJCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2NGxkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9ncmVlbik7CisJZWxzZSBpZiAoY2FtLT5icmlkZ2UgPT0gQlJJREdFX1NOOUMxMDMpIHsKKwkJdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHY0bGRldiwgJmNsYXNzX2RldmljZV9hdHRyX2JsdWUpOworCQl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodjRsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcmVkKTsKKwl9CisJaWYgKGNhbS0+c2Vuc29yLT5zeXNmc19vcHMpIHsKKwkJdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHY0bGRldiwgJmNsYXNzX2RldmljZV9hdHRyX2kyY19yZWcpOworCQl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodjRsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfaTJjX3ZhbCk7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQKK3NuOWMxMDJfc2V0X3BpeF9mb3JtYXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHBpeCkKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmIChwaXgtPnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9TTjlDMTBYKQorCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCBjYW0tPnJlZ1sweDE4XSB8IDB4ODAsIDB4MTgpOworCWVsc2UKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgY2FtLT5yZWdbMHgxOF0gJiAweDdmLCAweDE4KTsKKworCXJldHVybiBlcnIgPyAtRUlPIDogMDsKK30KKworCitzdGF0aWMgaW50CitzbjljMTAyX3NldF9jb21wcmVzc2lvbihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiogY29tcHJlc3Npb24pCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAoY29tcHJlc3Npb24tPnF1YWxpdHkgPT0gMCkKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgY2FtLT5yZWdbMHgxN10gfCAweDAxLCAweDE3KTsKKwllbHNlIGlmIChjb21wcmVzc2lvbi0+cXVhbGl0eSA9PSAxKQorCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCBjYW0tPnJlZ1sweDE3XSAmIDB4ZmUsIDB4MTcpOworCisJcmV0dXJuIGVyciA/IC1FSU8gOiAwOworfQorCisKK3N0YXRpYyBpbnQgc245YzEwMl9zZXRfc2NhbGUoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHU4IHNjYWxlKQoreworCXU4IHIgPSAwOworCWludCBlcnIgPSAwOworCisJaWYgKHNjYWxlID09IDEpCisJCXIgPSBjYW0tPnJlZ1sweDE4XSAmIDB4Y2Y7CisJZWxzZSBpZiAoc2NhbGUgPT0gMikgeworCQlyID0gY2FtLT5yZWdbMHgxOF0gJiAweGNmOworCQlyIHw9IDB4MTA7CisJfSBlbHNlIGlmIChzY2FsZSA9PSA0KQorCQlyID0gY2FtLT5yZWdbMHgxOF0gfCAweDIwOworCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgciwgMHgxOCk7CisJaWYgKGVycikKKwkJcmV0dXJuIC1FSU87CisKKwlQREJHRygiU2NhbGluZyBmYWN0b3I6ICV1Iiwgc2NhbGUpCisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHNuOWMxMDJfc2V0X2Nyb3Aoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHN0cnVjdCB2NGwyX3JlY3QqIHJlY3QpCit7CisJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gY2FtLT5zZW5zb3I7CisJdTggaF9zdGFydCA9ICh1OCkocmVjdC0+bGVmdCAtIHMtPmNyb3BjYXAuYm91bmRzLmxlZnQpLAorCSAgIHZfc3RhcnQgPSAodTgpKHJlY3QtPnRvcCAtIHMtPmNyb3BjYXAuYm91bmRzLnRvcCksCisJICAgaF9zaXplID0gKHU4KShyZWN0LT53aWR0aCAvIDE2KSwKKwkgICB2X3NpemUgPSAodTgpKHJlY3QtPmhlaWdodCAvIDE2KTsKKwlpbnQgZXJyID0gMDsKKworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIGhfc3RhcnQsIDB4MTIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIHZfc3RhcnQsIDB4MTMpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIGhfc2l6ZSwgMHgxNSk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgdl9zaXplLCAweDE2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gLUVJTzsKKworCVBEQkdHKCJoX3N0YXJ0LCB2X3N0YXJ0LCBoX3NpemUsIHZfc2l6ZSwgaG9fc2l6ZSwgdm9fc2l6ZSAiCisJICAgICAgIiV1ICV1ICV1ICV1IiwgaF9zdGFydCwgdl9zdGFydCwgaF9zaXplLCB2X3NpemUpCisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHNuOWMxMDJfaW5pdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSBjYW0tPnNlbnNvcjsKKwlzdHJ1Y3QgdjRsMl9jb250cm9sIGN0cmw7CisJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybDsKKwlzdHJ1Y3QgdjRsMl9yZWN0KiByZWN0OworCXU4IGkgPSAwLCBuID0gMDsKKwlpbnQgZXJyID0gMDsKKworCWlmICghKGNhbS0+c3RhdGUgJiBERVZfSU5JVElBTElaRUQpKSB7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhbS0+b3Blbik7CisJCXFjdHJsID0gcy0+cWN0cmw7CisJCXJlY3QgPSAmKHMtPmNyb3BjYXAuZGVmcmVjdCk7CisJfSBlbHNlIHsgLyogdXNlIGN1cnJlbnQgdmFsdWVzICovCisJCXFjdHJsID0gcy0+X3FjdHJsOworCQlyZWN0ID0gJihzLT5fcmVjdCk7CisJfQorCisJZXJyICs9IHNuOWMxMDJfc2V0X3NjYWxlKGNhbSwgcmVjdC0+d2lkdGggLyBzLT5waXhfZm9ybWF0LndpZHRoKTsKKwllcnIgKz0gc245YzEwMl9zZXRfY3JvcChjYW0sIHJlY3QpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAocy0+aW5pdCkgeworCQllcnIgPSBzLT5pbml0KGNhbSk7CisJCWlmIChlcnIpIHsKKwkJCURCRygzLCAiU2Vuc29yIGluaXRpYWxpemF0aW9uIGZhaWxlZCIpCisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJaWYgKCEoY2FtLT5zdGF0ZSAmIERFVl9JTklUSUFMSVpFRCkpCisJCWNhbS0+Y29tcHJlc3Npb24ucXVhbGl0eSA9ICBjYW0tPnJlZ1sweDE3XSAmIDB4MDEgPyAwIDogMTsKKwllbHNlCisJCWVyciArPSBzbjljMTAyX3NldF9jb21wcmVzc2lvbihjYW0sICZjYW0tPmNvbXByZXNzaW9uKTsKKwllcnIgKz0gc245YzEwMl9zZXRfcGl4X2Zvcm1hdChjYW0sICZzLT5waXhfZm9ybWF0KTsKKwlpZiAocy0+c2V0X3BpeF9mb3JtYXQpCisJCWVyciArPSBzLT5zZXRfcGl4X2Zvcm1hdChjYW0sICZzLT5waXhfZm9ybWF0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKHMtPnBpeF9mb3JtYXQucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1NOOUMxMFgpCisJCURCRygzLCAiQ29tcHJlc3NlZCB2aWRlbyBmb3JtYXQgaXMgYWN0aXZlLCBxdWFsaXR5ICVkIiwgCisJCSAgICBjYW0tPmNvbXByZXNzaW9uLnF1YWxpdHkpCisJZWxzZQorCQlEQkcoMywgIlVuY29tcHJlc3NlZCB2aWRlbyBmb3JtYXQgaXMgYWN0aXZlIikKKworCWlmIChzLT5zZXRfY3JvcCkKKwkJaWYgKChlcnIgPSBzLT5zZXRfY3JvcChjYW0sIHJlY3QpKSkgeworCQkJREJHKDMsICJzZXRfY3JvcCgpIGZhaWxlZCIpCisJCQlyZXR1cm4gZXJyOworCQl9CisKKwlpZiAocy0+c2V0X2N0cmwpIHsKKwkJbiA9IHNpemVvZihzLT5xY3RybCkgLyBzaXplb2Yocy0+cWN0cmxbMF0pOworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQkJaWYgKHMtPnFjdHJsW2ldLmlkICE9IDAgJiYgCisJCQkgICAgIShzLT5xY3RybFtpXS5mbGFncyAmIFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEKSkgeworCQkJCWN0cmwuaWQgPSBzLT5xY3RybFtpXS5pZDsKKwkJCQljdHJsLnZhbHVlID0gcWN0cmxbaV0uZGVmYXVsdF92YWx1ZTsKKwkJCQllcnIgPSBzLT5zZXRfY3RybChjYW0sICZjdHJsKTsKKwkJCQlpZiAoZXJyKSB7CisJCQkJCURCRygzLCAiU2V0ICVzIGNvbnRyb2wgZmFpbGVkIiwKKwkJCQkJICAgIHMtPnFjdHJsW2ldLm5hbWUpCisJCQkJCXJldHVybiBlcnI7CisJCQkJfQorCQkJCURCRygzLCAiSW1hZ2Ugc2Vuc29yIHN1cHBvcnRzICclcycgY29udHJvbCIsCisJCQkJICAgIHMtPnFjdHJsW2ldLm5hbWUpCisJCQl9CisJfQorCisJaWYgKCEoY2FtLT5zdGF0ZSAmIERFVl9JTklUSUFMSVpFRCkpIHsKKwkJaW5pdF9NVVRFWCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmNhbS0+cXVldWVfbG9jayk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhbS0+d2FpdF9mcmFtZSk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhbS0+d2FpdF9zdHJlYW0pOworCQljYW0tPm5yZWFkYnVmZmVycyA9IDI7CisJCW1lbWNweShzLT5fcWN0cmwsIHMtPnFjdHJsLCBzaXplb2Yocy0+cWN0cmwpKTsKKwkJbWVtY3B5KCYocy0+X3JlY3QpLCAmKHMtPmNyb3BjYXAuZGVmcmVjdCksIAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB2NGwyX3JlY3QpKTsKKwkJY2FtLT5zdGF0ZSB8PSBERVZfSU5JVElBTElaRUQ7CisJfQorCisJREJHKDIsICJJbml0aWFsaXphdGlvbiBzdWNjZWVkZWQiKQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHNuOWMxMDJfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCit7CisJZG93bigmc245YzEwMl9zeXNmc19sb2NrKTsKKworCURCRygyLCAiVjRMMiBkZXZpY2UgL2Rldi92aWRlbyVkIGRlcmVnaXN0ZXJlZCIsIGNhbS0+djRsZGV2LT5taW5vcikKKwl2aWRlb19zZXRfZHJ2ZGF0YShjYW0tPnY0bGRldiwgTlVMTCk7CisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoY2FtLT52NGxkZXYpOworCisJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisKKwlrZnJlZShjYW0tPmNvbnRyb2xfYnVmZmVyKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHNuOWMxMDJfb3BlbihzdHJ1Y3QgaW5vZGUqIGlub2RlLCBzdHJ1Y3QgZmlsZSogZmlscCkKK3sKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbTsKKwlpbnQgZXJyID0gMDsKKworCS8qCisJICAgVGhpcyBpcyB0aGUgb25seSBzYWZlIHdheSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyB3aXRoCisJICAgZGlzY29ubmVjdAorCSovCisJaWYgKCFkb3duX3JlYWRfdHJ5bG9jaygmc245YzEwMl9kaXNjb25uZWN0KSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY2FtLT5kZXZfc2VtKSkgeworCQl1cF9yZWFkKCZzbjljMTAyX2Rpc2Nvbm5lY3QpOworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKworCWlmIChjYW0tPnVzZXJzKSB7CisJCURCRygyLCAiRGV2aWNlIC9kZXYvdmlkZW8lZCBpcyBidXN5Li4uIiwgY2FtLT52NGxkZXYtPm1pbm9yKQorCQlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB8fAorCQkgICAgKGZpbHAtPmZfZmxhZ3MgJiBPX05ERUxBWSkpIHsKKwkJCWVyciA9IC1FV09VTERCTE9DSzsKKwkJCWdvdG8gb3V0OworCQl9CisJCXVwKCZjYW0tPmRldl9zZW0pOworCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfZXhjbHVzaXZlKGNhbS0+b3BlbiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVECisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIWNhbS0+dXNlcnMpOworCQlpZiAoZXJyKSB7CisJCQl1cF9yZWFkKCZzbjljMTAyX2Rpc2Nvbm5lY3QpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKKwkJCXVwX3JlYWQoJnNuOWMxMDJfZGlzY29ubmVjdCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlkb3duKCZjYW0tPmRldl9zZW0pOworCX0KKworCisJaWYgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgeworCQllcnIgPSBzbjljMTAyX2luaXQoY2FtKTsKKwkJaWYgKGVycikgeworCQkJREJHKDEsICJJbml0aWFsaXphdGlvbiBmYWlsZWQgYWdhaW4uICIKKwkJCSAgICAgICAiSSB3aWxsIHJldHJ5IG9uIG5leHQgb3BlbigpLiIpCisJCQlnb3RvIG91dDsKKwkJfQorCQljYW0tPnN0YXRlICY9IH5ERVZfTUlTQ09ORklHVVJFRDsKKwl9CisKKwlpZiAoKGVyciA9IHNuOWMxMDJfc3RhcnRfdHJhbnNmZXIoY2FtKSkpCisJCWdvdG8gb3V0OworCisJZmlscC0+cHJpdmF0ZV9kYXRhID0gY2FtOworCWNhbS0+dXNlcnMrKzsKKwljYW0tPmlvID0gSU9fTk9ORTsKKwljYW0tPnN0cmVhbSA9IFNUUkVBTV9PRkY7CisJY2FtLT5uYnVmZmVycyA9IDA7CisJY2FtLT5mcmFtZV9jb3VudCA9IDA7CisJc245YzEwMl9lbXB0eV9mcmFtZXF1ZXVlcyhjYW0pOworCisJREJHKDMsICJWaWRlbyBkZXZpY2UgL2Rldi92aWRlbyVkIGlzIG9wZW4iLCBjYW0tPnY0bGRldi0+bWlub3IpCisKK291dDoKKwl1cCgmY2FtLT5kZXZfc2VtKTsKKwl1cF9yZWFkKCZzbjljMTAyX2Rpc2Nvbm5lY3QpOworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCBzbjljMTAyX3JlbGVhc2Uoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUqIGZpbHApCit7CisJc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKKworCWRvd24oJmNhbS0+ZGV2X3NlbSk7IC8qIHByZXZlbnQgZGlzY29ubmVjdCgpIHRvIGJlIGNhbGxlZCAqLworCisJc245YzEwMl9zdG9wX3RyYW5zZmVyKGNhbSk7CisKKwlzbjljMTAyX3JlbGVhc2VfYnVmZmVycyhjYW0pOworCisJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7CisJCXNuOWMxMDJfcmVsZWFzZV9yZXNvdXJjZXMoY2FtKTsKKwkJdXAoJmNhbS0+ZGV2X3NlbSk7CisJCWtmcmVlKGNhbSk7CisJCXJldHVybiAwOworCX0KKworCWNhbS0+dXNlcnMtLTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGVfbnIoJmNhbS0+b3BlbiwgMSk7CisKKwlEQkcoMywgIlZpZGVvIGRldmljZSAvZGV2L3ZpZGVvJWQgY2xvc2VkIiwgY2FtLT52NGxkZXYtPm1pbm9yKQorCisJdXAoJmNhbS0+ZGV2X3NlbSk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3NpemVfdAorc245YzEwMl9yZWFkKHN0cnVjdCBmaWxlKiBmaWxwLCBjaGFyIF9fdXNlciAqIGJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QqIGZfcG9zKQoreworCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisJc3RydWN0IHNuOWMxMDJfZnJhbWVfdCogZiwgKiBpOworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwlpbnQgZXJyID0gMDsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNhbS0+ZmlsZW9wX3NlbSkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKKwkJREJHKDEsICJEZXZpY2Ugbm90IHByZXNlbnQiKQorCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgeworCQlEQkcoMSwgIlRoZSBjYW1lcmEgaXMgbWlzY29uZmlndXJlZC4gQ2xvc2UgYW5kIG9wZW4gaXQgYWdhaW4uIikKKwkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChjYW0tPmlvID09IElPX01NQVApIHsKKwkJREJHKDMsICJDbG9zZSBhbmQgb3BlbiB0aGUgZGV2aWNlIGFnYWluIHRvIGNob29zZSAiCisJCSAgICAgICAidGhlIHJlYWQgbWV0aG9kIikKKwkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjYW0tPmlvID09IElPX05PTkUpIHsKKwkJaWYgKCFzbjljMTAyX3JlcXVlc3RfYnVmZmVycyhjYW0sY2FtLT5ucmVhZGJ1ZmZlcnMsIElPX1JFQUQpKSB7CisJCQlEQkcoMSwgInJlYWQoKSBmYWlsZWQsIG5vdCBlbm91Z2ggbWVtb3J5IikKKwkJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJY2FtLT5pbyA9IElPX1JFQUQ7CisJCWNhbS0+c3RyZWFtID0gU1RSRUFNX09OOworCQlzbjljMTAyX3F1ZXVlX3VudXNlZGZyYW1lcyhjYW0pOworCX0KKworCWlmICghY291bnQpIHsKKwkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChsaXN0X2VtcHR5KCZjYW0tPm91dHF1ZXVlKSkgeworCQlpZiAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlCisJCSAgICAgICggY2FtLT53YWl0X2ZyYW1lLCAKKwkJICAgICAgICAoIWxpc3RfZW1wdHkoJmNhbS0+b3V0cXVldWUpKSB8fAorCQkgICAgICAgIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgfHwKKwkJCShjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpICk7CisJCWlmIChlcnIpIHsKKwkJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKKwkJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJaWYgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgeworCQkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKworCWYgPSBsaXN0X2VudHJ5KGNhbS0+b3V0cXVldWUucHJldiwgc3RydWN0IHNuOWMxMDJfZnJhbWVfdCwgZnJhbWUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpLCAmY2FtLT5vdXRxdWV1ZSwgZnJhbWUpCisJCWktPnN0YXRlID0gRl9VTlVTRUQ7CisJSU5JVF9MSVNUX0hFQUQoJmNhbS0+b3V0cXVldWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisKKwlzbjljMTAyX3F1ZXVlX3VudXNlZGZyYW1lcyhjYW0pOworCisJaWYgKGNvdW50ID4gZi0+YnVmLmJ5dGVzdXNlZCkKKwkJY291bnQgPSBmLT5idWYuYnl0ZXN1c2VkOworCisJaWYgKGNvcHlfdG9fdXNlcihidWYsIGYtPmJ1Zm1lbSwgY291bnQpKSB7CisJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJKmZfcG9zICs9IGNvdW50OworCisJUERCR0coIkZyYW1lICMlbHUsIGJ5dGVzIHJlYWQ6ICV6dSIsICh1bnNpZ25lZCBsb25nKWYtPmJ1Zi5pbmRleCxjb3VudCkKKworCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCisJcmV0dXJuIGNvdW50OworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc245YzEwMl9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisJdW5zaWduZWQgaW50IG1hc2sgPSAwOworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY2FtLT5maWxlb3Bfc2VtKSkKKwkJcmV0dXJuIFBPTExFUlI7CisKKwlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKKwkJREJHKDEsICJEZXZpY2Ugbm90IHByZXNlbnQiKQorCQlnb3RvIGVycm9yOworCX0KKworCWlmIChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpIHsKKwkJREJHKDEsICJUaGUgY2FtZXJhIGlzIG1pc2NvbmZpZ3VyZWQuIENsb3NlIGFuZCBvcGVuIGl0IGFnYWluLiIpCisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKGNhbS0+aW8gPT0gSU9fTk9ORSkgeworCQlpZiAoIXNuOWMxMDJfcmVxdWVzdF9idWZmZXJzKGNhbSwgY2FtLT5ucmVhZGJ1ZmZlcnMsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9fUkVBRCkpIHsKKwkJCURCRygxLCAicG9sbCgpIGZhaWxlZCwgbm90IGVub3VnaCBtZW1vcnkiKQorCQkJZ290byBlcnJvcjsKKwkJfQorCQljYW0tPmlvID0gSU9fUkVBRDsKKwkJY2FtLT5zdHJlYW0gPSBTVFJFQU1fT047CisJfQorCisJaWYgKGNhbS0+aW8gPT0gSU9fUkVBRCkKKwkJc245YzEwMl9xdWV1ZV91bnVzZWRmcmFtZXMoY2FtKTsKKworCXBvbGxfd2FpdChmaWxwLCAmY2FtLT53YWl0X2ZyYW1lLCB3YWl0KTsKKworCWlmICghbGlzdF9lbXB0eSgmY2FtLT5vdXRxdWV1ZSkpCisJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKKworCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCisJcmV0dXJuIG1hc2s7CisKK2Vycm9yOgorCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCXJldHVybiBQT0xMRVJSOworfQorCisKK3N0YXRpYyB2b2lkIHNuOWMxMDJfdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QqIHZtYSkKK3sKKwlzdHJ1Y3Qgc245YzEwMl9mcmFtZV90KiBmID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisJZi0+dm1hX3VzZV9jb3VudCsrOworfQorCisKK3N0YXRpYyB2b2lkIHNuOWMxMDJfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0KiB2bWEpCit7CisJLyogTk9URTogYnVmZmVycyBhcmUgbm90IGZyZWVkIGhlcmUgKi8KKwlzdHJ1Y3Qgc245YzEwMl9mcmFtZV90KiBmID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisJZi0+dm1hX3VzZV9jb3VudC0tOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc245YzEwMl92bV9vcHMgPSB7CisJLm9wZW4gPSBzbjljMTAyX3ZtX29wZW4sCisJLmNsb3NlID0gc245YzEwMl92bV9jbG9zZSwKK307CisKKworc3RhdGljIGludCBzbjljMTAyX21tYXAoc3RydWN0IGZpbGUqIGZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisJdW5zaWduZWQgbG9uZyBzaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAorCSAgICAgICAgICAgICAgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0LAorCSAgICAgICAgICAgICAgcG9zLAorCSAgICAgICAgICAgICAgcGFnZTsKKwl1MzIgaTsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNhbS0+ZmlsZW9wX3NlbSkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKKwkJREJHKDEsICJEZXZpY2Ugbm90IHByZXNlbnQiKQorCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgeworCQlEQkcoMSwgIlRoZSBjYW1lcmEgaXMgbWlzY29uZmlndXJlZC4gQ2xvc2UgYW5kIG9wZW4gaXQgYWdhaW4uIikKKwkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChjYW0tPmlvICE9IElPX01NQVAgfHwgISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpIHx8CisJICAgIHNpemUgIT0gUEFHRV9BTElHTihjYW0tPmZyYW1lWzBdLmJ1Zi5sZW5ndGgpKSB7CisJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY2FtLT5uYnVmZmVyczsgaSsrKSB7CisJCWlmICgoY2FtLT5mcmFtZVtpXS5idWYubS5vZmZzZXQ+PlBBR0VfU0hJRlQpID09IHZtYS0+dm1fcGdvZmYpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gY2FtLT5uYnVmZmVycykgeworCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVk1fSU8gaXMgZXZlbnR1YWxseSBnb2luZyB0byByZXBsYWNlIFBhZ2VSZXNlcnZlZCBhbHRvZ2V0aGVyICovCisJdm1hLT52bV9mbGFncyB8PSBWTV9JTzsKKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEOyAvKiBhdm9pZCB0byBzd2FwIG91dCB0aGlzIFZNQSAqLworCisJcG9zID0gKHVuc2lnbmVkIGxvbmcpY2FtLT5mcmFtZVtpXS5idWZtZW07CisJd2hpbGUgKHNpemUgPiAwKSB7IC8qIHNpemUgaXMgcGFnZS1hbGlnbmVkICovCisJCXBhZ2UgPSB2bWFsbG9jX3RvX3Bmbigodm9pZCAqKXBvcyk7CisJCWlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLCBzdGFydCwgcGFnZSwgUEFHRV9TSVpFLAorCQkgICAgICAgICAgICAgICAgICAgIHZtYS0+dm1fcGFnZV9wcm90KSkgeworCQkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCQlzdGFydCArPSBQQUdFX1NJWkU7CisJCXBvcyArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0KKworCXZtYS0+dm1fb3BzID0gJnNuOWMxMDJfdm1fb3BzOworCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gJmNhbS0+ZnJhbWVbaV07CisKKwlzbjljMTAyX3ZtX29wZW4odm1hKTsKKworCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBzbjljMTAyX2lvY3RsX3Y0bDIoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUqIGZpbHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqIGFyZykKK3sKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCisJc3dpdGNoIChjbWQpIHsKKworCWNhc2UgVklESU9DX1FVRVJZQ0FQOgorCXsKKwkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSBjYXAgPSB7CisJCQkuZHJpdmVyID0gInNuOWMxMDIiLAorCQkJLnZlcnNpb24gPSBTTjlDMTAyX01PRFVMRV9WRVJTSU9OX0NPREUsCisJCQkuY2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IAorCQkJICAgICAgICAgICAgICAgIFY0TDJfQ0FQX1JFQURXUklURSB8CisJCQkgICAgICAgICAgICAgICAgVjRMMl9DQVBfU1RSRUFNSU5HLAorCQl9OworCisJCXN0cmxjcHkoY2FwLmNhcmQsIGNhbS0+djRsZGV2LT5uYW1lLCBzaXplb2YoY2FwLmNhcmQpKTsKKwkJaWYgKHVzYl9tYWtlX3BhdGgoY2FtLT51c2JkZXYsIGNhcC5idXNfaW5mbywKKwkJICAgIHNpemVvZihjYXAuYnVzX2luZm8pKSA8IDApCisJCQlzdHJsY3B5KGNhcC5idXNfaW5mbywgY2FtLT5kZXYuYnVzX2lkLAorCQkJICAgICAgICBzaXplb2YoY2FwLmJ1c19pbmZvKSk7CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZjYXAsIHNpemVvZihjYXApKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKKwl7CisJCXN0cnVjdCB2NGwyX2lucHV0IGk7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZpLCBhcmcsIHNpemVvZihpKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoaS5pbmRleCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCW1lbXNldCgmaSwgMCwgc2l6ZW9mKGkpKTsKKwkJc3RyY3B5KGkubmFtZSwgIlVTQiIpOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmaSwgc2l6ZW9mKGkpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DX0dfSU5QVVQ6CisJY2FzZSBWSURJT0NfU19JTlBVVDoKKwl7CisJCWludCBpbmRleDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmluZGV4LCBhcmcsIHNpemVvZihpbmRleCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKGluZGV4ICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ19RVUVSWUNUUkw6CisJeworCQlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSBjYW0tPnNlbnNvcjsKKwkJc3RydWN0IHY0bDJfcXVlcnljdHJsIHFjOworCQl1OCBpLCBuOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmcWMsIGFyZywgc2l6ZW9mKHFjKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQluID0gc2l6ZW9mKHMtPnFjdHJsKSAvIHNpemVvZihzLT5xY3RybFswXSk7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCQlpZiAocWMuaWQgJiYgcWMuaWQgPT0gcy0+cWN0cmxbaV0uaWQpIHsKKwkJCQltZW1jcHkoJnFjLCAmKHMtPnFjdHJsW2ldKSwgc2l6ZW9mKHFjKSk7CisJCQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZxYywgc2l6ZW9mKHFjKSkpCisJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCXJldHVybiAwOworCQkJfQorCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNhc2UgVklESU9DX0dfQ1RSTDoKKwl7CisJCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9IGNhbS0+c2Vuc29yOworCQlzdHJ1Y3QgdjRsMl9jb250cm9sIGN0cmw7CisJCWludCBlcnIgPSAwOworCisJCWlmICghcy0+Z2V0X2N0cmwpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmN0cmwsIGFyZywgc2l6ZW9mKGN0cmwpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWVyciA9IHMtPmdldF9jdHJsKGNhbSwgJmN0cmwpOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmY3RybCwgc2l6ZW9mKGN0cmwpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiBlcnI7CisJfQorCisJY2FzZSBWSURJT0NfU19DVFJMX09MRDoKKwljYXNlIFZJRElPQ19TX0NUUkw6CisJeworCQlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSBjYW0tPnNlbnNvcjsKKwkJc3RydWN0IHY0bDJfY29udHJvbCBjdHJsOworCQl1OCBpLCBuOworCQlpbnQgZXJyID0gMDsKKworCQlpZiAoIXMtPnNldF9jdHJsKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZjdHJsLCBhcmcsIHNpemVvZihjdHJsKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQluID0gc2l6ZW9mKHMtPnFjdHJsKSAvIHNpemVvZihzLT5xY3RybFswXSk7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCQlpZiAoY3RybC5pZCA9PSBzLT5xY3RybFtpXS5pZCkgeworCQkJCWlmIChjdHJsLnZhbHVlIDwgcy0+cWN0cmxbaV0ubWluaW11bSB8fAorCQkJCSAgICBjdHJsLnZhbHVlID4gcy0+cWN0cmxbaV0ubWF4aW11bSkKKwkJCQkJcmV0dXJuIC1FUkFOR0U7CisJCQkJY3RybC52YWx1ZSAtPSBjdHJsLnZhbHVlICUgcy0+cWN0cmxbaV0uc3RlcDsKKwkJCQlicmVhazsKKwkJCX0KKworCQlpZiAoKGVyciA9IHMtPnNldF9jdHJsKGNhbSwgJmN0cmwpKSkKKwkJCXJldHVybiBlcnI7CisKKwkJcy0+X3FjdHJsW2ldLmRlZmF1bHRfdmFsdWUgPSBjdHJsLnZhbHVlOworCisJCVBEQkdHKCJWSURJT0NfU19DVFJMOiBpZCAlbHUsIHZhbHVlICVsdSIsCisJCSAgICAgICh1bnNpZ25lZCBsb25nKWN0cmwuaWQsICh1bnNpZ25lZCBsb25nKWN0cmwudmFsdWUpCisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfQ1JPUENBUDoKKwl7CisJCXN0cnVjdCB2NGwyX2Nyb3BjYXAqIGNjID0gJihjYW0tPnNlbnNvci0+Y3JvcGNhcCk7CisKKwkJY2MtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCWNjLT5waXhlbGFzcGVjdC5udW1lcmF0b3IgPSAxOworCQljYy0+cGl4ZWxhc3BlY3QuZGVub21pbmF0b3IgPSAxOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCBjYywgc2l6ZW9mKCpjYykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfR19DUk9QOgorCXsKKwkJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gY2FtLT5zZW5zb3I7CisJCXN0cnVjdCB2NGwyX2Nyb3AgY3JvcCA9IHsKKwkJCS50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCQl9OworCisJCW1lbWNweSgmKGNyb3AuYyksICYocy0+X3JlY3QpLCBzaXplb2Yoc3RydWN0IHY0bDJfcmVjdCkpOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmY3JvcCwgc2l6ZW9mKGNyb3ApKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DX1NfQ1JPUDoKKwl7CisJCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9IGNhbS0+c2Vuc29yOworCQlzdHJ1Y3QgdjRsMl9jcm9wIGNyb3A7CisJCXN0cnVjdCB2NGwyX3JlY3QqIHJlY3Q7CisJCXN0cnVjdCB2NGwyX3JlY3QqIGJvdW5kcyA9ICYocy0+Y3JvcGNhcC5ib3VuZHMpOworCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwaXhfZm9ybWF0ID0gJihzLT5waXhfZm9ybWF0KTsKKwkJdTggc2NhbGU7CisJCWNvbnN0IGVudW0gc245YzEwMl9zdHJlYW1fc3RhdGUgc3RyZWFtID0gY2FtLT5zdHJlYW07CisJCWNvbnN0IHUzMiBuYnVmZmVycyA9IGNhbS0+bmJ1ZmZlcnM7CisJCXUzMiBpOworCQlpbnQgZXJyID0gMDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmNyb3AsIGFyZywgc2l6ZW9mKGNyb3ApKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJlY3QgPSAmKGNyb3AuYyk7CisKKwkJaWYgKGNyb3AudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoY2FtLT5tb2R1bGVfcGFyYW0uZm9yY2VfbXVubWFwKQorCQkJZm9yIChpID0gMDsgaSA8IGNhbS0+bmJ1ZmZlcnM7IGkrKykKKwkJCQlpZiAoY2FtLT5mcmFtZVtpXS52bWFfdXNlX2NvdW50KSB7CisJCQkJCURCRygzLCAiVklESU9DX1NfQ1JPUCBmYWlsZWQuICIKKwkJCQkJICAgICAgICJVbm1hcCB0aGUgYnVmZmVycyBmaXJzdC4iKQorCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisKKwkJLyogUHJlc2VydmUgUixHIG9yIEIgb3JpZ2luICovCisJCXJlY3QtPmxlZnQgPSAocy0+X3JlY3QubGVmdCAmIDFMKSA/CisJCSAgICAgICAgICAgICByZWN0LT5sZWZ0IHwgMUwgOiByZWN0LT5sZWZ0ICYgfjFMOworCQlyZWN0LT50b3AgPSAocy0+X3JlY3QudG9wICYgMUwpID8KKwkJICAgICAgICAgICAgcmVjdC0+dG9wIHwgMUwgOiByZWN0LT50b3AgJiB+MUw7CisKKwkJaWYgKHJlY3QtPndpZHRoIDwgMTYpCisJCQlyZWN0LT53aWR0aCA9IDE2OworCQlpZiAocmVjdC0+aGVpZ2h0IDwgMTYpCisJCQlyZWN0LT5oZWlnaHQgPSAxNjsKKwkJaWYgKHJlY3QtPndpZHRoID4gYm91bmRzLT53aWR0aCkKKwkJCXJlY3QtPndpZHRoID0gYm91bmRzLT53aWR0aDsKKwkJaWYgKHJlY3QtPmhlaWdodCA+IGJvdW5kcy0+aGVpZ2h0KQorCQkJcmVjdC0+aGVpZ2h0ID0gYm91bmRzLT5oZWlnaHQ7CisJCWlmIChyZWN0LT5sZWZ0IDwgYm91bmRzLT5sZWZ0KQorCQkJcmVjdC0+bGVmdCA9IGJvdW5kcy0+bGVmdDsKKwkJaWYgKHJlY3QtPnRvcCA8IGJvdW5kcy0+dG9wKQorCQkJcmVjdC0+dG9wID0gYm91bmRzLT50b3A7CisJCWlmIChyZWN0LT5sZWZ0ICsgcmVjdC0+d2lkdGggPiBib3VuZHMtPmxlZnQgKyBib3VuZHMtPndpZHRoKQorCQkJcmVjdC0+bGVmdCA9IGJvdW5kcy0+bGVmdCtib3VuZHMtPndpZHRoIC0gcmVjdC0+d2lkdGg7CisJCWlmIChyZWN0LT50b3AgKyByZWN0LT5oZWlnaHQgPiBib3VuZHMtPnRvcCArIGJvdW5kcy0+aGVpZ2h0KQorCQkJcmVjdC0+dG9wID0gYm91bmRzLT50b3ArYm91bmRzLT5oZWlnaHQgLSByZWN0LT5oZWlnaHQ7CisKKwkJcmVjdC0+d2lkdGggJj0gfjE1TDsKKwkJcmVjdC0+aGVpZ2h0ICY9IH4xNUw7CisKKwkJaWYgKFNOOUMxMDJfUFJFU0VSVkVfSU1HU0NBTEUpIHsKKwkJCS8qIENhbGN1bGF0ZSB0aGUgYWN0dWFsIHNjYWxpbmcgZmFjdG9yICovCisJCQl1MzIgYSwgYjsKKwkJCWEgPSByZWN0LT53aWR0aCAqIHJlY3QtPmhlaWdodDsKKwkJCWIgPSBwaXhfZm9ybWF0LT53aWR0aCAqIHBpeF9mb3JtYXQtPmhlaWdodDsKKwkJCXNjYWxlID0gYiA/ICh1OCkoKGEgLyBiKSA8IDQgPyAxIDoKKwkJICAgICAgICAgICAgICAgICAgICAgICAgKChhIC8gYikgPCAxNiA/IDIgOiA0KSkgOiAxOworCQl9IGVsc2UKKwkJCXNjYWxlID0gMTsKKworCQlpZiAoY2FtLT5zdHJlYW0gPT0gU1RSRUFNX09OKQorCQkJaWYgKChlcnIgPSBzbjljMTAyX3N0cmVhbV9pbnRlcnJ1cHQoY2FtKSkpCisJCQkJcmV0dXJuIGVycjsKKworCQlpZiAoY29weV90b191c2VyKGFyZywgJmNyb3AsIHNpemVvZihjcm9wKSkpIHsKKwkJCWNhbS0+c3RyZWFtID0gc3RyZWFtOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKworCQlpZiAoY2FtLT5tb2R1bGVfcGFyYW0uZm9yY2VfbXVubWFwIHx8IGNhbS0+aW8gPT0gSU9fUkVBRCkKKwkJCXNuOWMxMDJfcmVsZWFzZV9idWZmZXJzKGNhbSk7CisKKwkJZXJyID0gc245YzEwMl9zZXRfY3JvcChjYW0sIHJlY3QpOworCQlpZiAocy0+c2V0X2Nyb3ApCisJCQllcnIgKz0gcy0+c2V0X2Nyb3AoY2FtLCByZWN0KTsKKwkJZXJyICs9IHNuOWMxMDJfc2V0X3NjYWxlKGNhbSwgc2NhbGUpOworCisJCWlmIChlcnIpIHsgLyogYXRvbWljLCBubyByb2xsYmFjayBpbiBpb2N0bCgpICovCisJCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOworCQkJREJHKDEsICJWSURJT0NfU19DUk9QIGZhaWxlZCBiZWNhdXNlIG9mIGhhcmR3YXJlICIKKwkJCSAgICAgICAicHJvYmxlbXMuIFRvIHVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAiCisJCQkgICAgICAgIi9kZXYvdmlkZW8lZCBhZ2Fpbi4iLCBjYW0tPnY0bGRldi0+bWlub3IpCisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCXMtPnBpeF9mb3JtYXQud2lkdGggPSByZWN0LT53aWR0aC9zY2FsZTsKKwkJcy0+cGl4X2Zvcm1hdC5oZWlnaHQgPSByZWN0LT5oZWlnaHQvc2NhbGU7CisJCW1lbWNweSgmKHMtPl9yZWN0KSwgcmVjdCwgc2l6ZW9mKCpyZWN0KSk7CisKKwkJaWYgKChjYW0tPm1vZHVsZV9wYXJhbS5mb3JjZV9tdW5tYXAgfHwgY2FtLT5pbyA9PSBJT19SRUFEKSAmJgorCQkgICAgbmJ1ZmZlcnMgIT0gc245YzEwMl9yZXF1ZXN0X2J1ZmZlcnMoY2FtLCBuYnVmZmVycywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbS0+aW8pKSB7CisJCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOworCQkJREJHKDEsICJWSURJT0NfU19DUk9QIGZhaWxlZCBiZWNhdXNlIG9mIG5vdCBlbm91Z2ggIgorCQkJICAgICAgICJtZW1vcnkuIFRvIHVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAiCisJCQkgICAgICAgIi9kZXYvdmlkZW8lZCBhZ2Fpbi4iLCBjYW0tPnY0bGRldi0+bWlub3IpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCWNhbS0+c3RyZWFtID0gc3RyZWFtOworCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DX0VOVU1fRk1UOgorCXsKKwkJc3RydWN0IHY0bDJfZm10ZGVzYyBmbXRkOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmZm10ZCwgYXJnLCBzaXplb2YoZm10ZCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKGZtdGQuaW5kZXggPT0gMCkgeworCQkJc3RyY3B5KGZtdGQuZGVzY3JpcHRpb24sICJiYXllciByZ2IiKTsKKwkJCWZtdGQucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfU0JHR1I4OworCQl9IGVsc2UgaWYgKGZtdGQuaW5kZXggPT0gMSkgeworCQkJc3RyY3B5KGZtdGQuZGVzY3JpcHRpb24sICJjb21wcmVzc2VkIik7CisJCQlmbXRkLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1NOOUMxMFg7CisJCQlmbXRkLmZsYWdzID0gVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEOworCQl9IGVsc2UKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWZtdGQudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJbWVtc2V0KCZmbXRkLnJlc2VydmVkLCAwLCBzaXplb2YoZm10ZC5yZXNlcnZlZCkpOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmZm10ZCwgc2l6ZW9mKGZtdGQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DX0dfRk1UOgorCXsKKwkJc3RydWN0IHY0bDJfZm9ybWF0IGZvcm1hdDsKKwkJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGZtdCA9ICYoY2FtLT5zZW5zb3ItPnBpeF9mb3JtYXQpOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmZm9ybWF0LCBhcmcsIHNpemVvZihmb3JtYXQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChmb3JtYXQudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlwZm10LT5ieXRlc3BlcmxpbmUgPSAocGZtdC0+cGl4ZWxmb3JtYXQ9PVY0TDJfUElYX0ZNVF9TTjlDMTBYKQorCQkgICAgICAgICAgICAgICAgICAgICA/IDAgOiAocGZtdC0+d2lkdGggKiBwZm10LT5wcml2KSAvIDg7CisJCXBmbXQtPnNpemVpbWFnZSA9IHBmbXQtPmhlaWdodCAqICgocGZtdC0+d2lkdGgqcGZtdC0+cHJpdikvOCk7CisJCXBmbXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCQltZW1jcHkoJihmb3JtYXQuZm10LnBpeCksIHBmbXQsIHNpemVvZigqcGZtdCkpOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmZm9ybWF0LCBzaXplb2YoZm9ybWF0KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ19UUllfRk1UOgorCWNhc2UgVklESU9DX1NfRk1UOgorCXsKKwkJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gY2FtLT5zZW5zb3I7CisJCXN0cnVjdCB2NGwyX2Zvcm1hdCBmb3JtYXQ7CisJCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHBpeDsKKwkJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGZtdCA9ICYocy0+cGl4X2Zvcm1hdCk7CisJCXN0cnVjdCB2NGwyX3JlY3QqIGJvdW5kcyA9ICYocy0+Y3JvcGNhcC5ib3VuZHMpOworCQlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3Q7CisJCXU4IHNjYWxlOworCQljb25zdCBlbnVtIHNuOWMxMDJfc3RyZWFtX3N0YXRlIHN0cmVhbSA9IGNhbS0+c3RyZWFtOworCQljb25zdCB1MzIgbmJ1ZmZlcnMgPSBjYW0tPm5idWZmZXJzOworCQl1MzIgaTsKKwkJaW50IGVyciA9IDA7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZmb3JtYXQsIGFyZywgc2l6ZW9mKGZvcm1hdCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcGl4ID0gJihmb3JtYXQuZm10LnBpeCk7CisKKwkJaWYgKGZvcm1hdC50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCW1lbWNweSgmcmVjdCwgJihzLT5fcmVjdCksIHNpemVvZihyZWN0KSk7CisKKwkJeyAvKiBjYWxjdWxhdGUgdGhlIGFjdHVhbCBzY2FsaW5nIGZhY3RvciAqLworCQkJdTMyIGEsIGI7CisJCQlhID0gcmVjdC53aWR0aCAqIHJlY3QuaGVpZ2h0OworCQkJYiA9IHBpeC0+d2lkdGggKiBwaXgtPmhlaWdodDsKKwkJCXNjYWxlID0gYiA/ICh1OCkoKGEgLyBiKSA8IDQgPyAxIDoKKwkJICAgICAgICAgICAgICAgICAgICAgICAgKChhIC8gYikgPCAxNiA/IDIgOiA0KSkgOiAxOworCQl9CisKKwkJcmVjdC53aWR0aCA9IHNjYWxlICogcGl4LT53aWR0aDsKKwkJcmVjdC5oZWlnaHQgPSBzY2FsZSAqIHBpeC0+aGVpZ2h0OworCisJCWlmIChyZWN0LndpZHRoIDwgMTYpCisJCQlyZWN0LndpZHRoID0gMTY7CisJCWlmIChyZWN0LmhlaWdodCA8IDE2KQorCQkJcmVjdC5oZWlnaHQgPSAxNjsKKwkJaWYgKHJlY3Qud2lkdGggPiBib3VuZHMtPmxlZnQgKyBib3VuZHMtPndpZHRoIC0gcmVjdC5sZWZ0KQorCQkJcmVjdC53aWR0aCA9IGJvdW5kcy0+bGVmdCArIGJvdW5kcy0+d2lkdGggLSByZWN0LmxlZnQ7CisJCWlmIChyZWN0LmhlaWdodCA+IGJvdW5kcy0+dG9wICsgYm91bmRzLT5oZWlnaHQgLSByZWN0LnRvcCkKKwkJCXJlY3QuaGVpZ2h0ID0gYm91bmRzLT50b3AgKyBib3VuZHMtPmhlaWdodCAtIHJlY3QudG9wOworCisJCXJlY3Qud2lkdGggJj0gfjE1TDsKKwkJcmVjdC5oZWlnaHQgJj0gfjE1TDsKKworCQl7IC8qIGFkanVzdCB0aGUgc2NhbGluZyBmYWN0b3IgKi8KKwkJCXUzMiBhLCBiOworCQkJYSA9IHJlY3Qud2lkdGggKiByZWN0LmhlaWdodDsKKwkJCWIgPSBwaXgtPndpZHRoICogcGl4LT5oZWlnaHQ7CisJCQlzY2FsZSA9IGIgPyAodTgpKChhIC8gYikgPCA0ID8gMSA6CisJCSAgICAgICAgICAgICAgICAgICAgICAgICgoYSAvIGIpIDwgMTYgPyAyIDogNCkpIDogMTsKKwkJfQorCisJCXBpeC0+d2lkdGggPSByZWN0LndpZHRoIC8gc2NhbGU7CisJCXBpeC0+aGVpZ2h0ID0gcmVjdC5oZWlnaHQgLyBzY2FsZTsKKworCQlpZiAocGl4LT5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfU045QzEwWCAmJgorCQkgICAgcGl4LT5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfU0JHR1I4KQorCQkJcGl4LT5waXhlbGZvcm1hdCA9IHBmbXQtPnBpeGVsZm9ybWF0OworCQlwaXgtPnByaXYgPSBwZm10LT5wcml2OyAvKiBicHAgKi8KKwkJcGl4LT5jb2xvcnNwYWNlID0gcGZtdC0+Y29sb3JzcGFjZTsKKwkJcGl4LT5ieXRlc3BlcmxpbmUgPSAocGl4LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU045QzEwWCkKKwkJICAgICAgICAgICAgICAgICAgICA/IDAgOiAocGl4LT53aWR0aCAqIHBpeC0+cHJpdikgLyA4OworCQlwaXgtPnNpemVpbWFnZSA9IHBpeC0+aGVpZ2h0ICogKChwaXgtPndpZHRoICogcGl4LT5wcml2KSAvIDgpOworCQlwaXgtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCisJCWlmIChjbWQgPT0gVklESU9DX1RSWV9GTVQpIHsKKwkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmZm9ybWF0LCBzaXplb2YoZm9ybWF0KSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmIChjYW0tPm1vZHVsZV9wYXJhbS5mb3JjZV9tdW5tYXApCisJCQlmb3IgKGkgPSAwOyBpIDwgY2FtLT5uYnVmZmVyczsgaSsrKQorCQkJCWlmIChjYW0tPmZyYW1lW2ldLnZtYV91c2VfY291bnQpIHsKKwkJCQkJREJHKDMsICJWSURJT0NfU19GTVQgZmFpbGVkLiAiCisJCQkJCSAgICAgICAiVW5tYXAgdGhlIGJ1ZmZlcnMgZmlyc3QuIikKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCisJCWlmIChjYW0tPnN0cmVhbSA9PSBTVFJFQU1fT04pCisJCQlpZiAoKGVyciA9IHNuOWMxMDJfc3RyZWFtX2ludGVycnVwdChjYW0pKSkKKwkJCQlyZXR1cm4gZXJyOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmZm9ybWF0LCBzaXplb2YoZm9ybWF0KSkpIHsKKwkJCWNhbS0+c3RyZWFtID0gc3RyZWFtOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKworCQlpZiAoY2FtLT5tb2R1bGVfcGFyYW0uZm9yY2VfbXVubWFwICB8fCBjYW0tPmlvID09IElPX1JFQUQpCisJCQlzbjljMTAyX3JlbGVhc2VfYnVmZmVycyhjYW0pOworCisJCWVyciArPSBzbjljMTAyX3NldF9waXhfZm9ybWF0KGNhbSwgcGl4KTsKKwkJZXJyICs9IHNuOWMxMDJfc2V0X2Nyb3AoY2FtLCAmcmVjdCk7CisJCWlmIChzLT5zZXRfcGl4X2Zvcm1hdCkKKwkJCWVyciArPSBzLT5zZXRfcGl4X2Zvcm1hdChjYW0sIHBpeCk7CisJCWlmIChzLT5zZXRfY3JvcCkKKwkJCWVyciArPSBzLT5zZXRfY3JvcChjYW0sICZyZWN0KTsKKwkJZXJyICs9IHNuOWMxMDJfc2V0X3NjYWxlKGNhbSwgc2NhbGUpOworCisJCWlmIChlcnIpIHsgLyogYXRvbWljLCBubyByb2xsYmFjayBpbiBpb2N0bCgpICovCisJCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOworCQkJREJHKDEsICJWSURJT0NfU19GTVQgZmFpbGVkIGJlY2F1c2Ugb2YgaGFyZHdhcmUgIgorCQkJICAgICAgICJwcm9ibGVtcy4gVG8gdXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuICIKKwkJCSAgICAgICAiL2Rldi92aWRlbyVkIGFnYWluLiIsIGNhbS0+djRsZGV2LT5taW5vcikKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJbWVtY3B5KHBmbXQsIHBpeCwgc2l6ZW9mKCpwaXgpKTsKKwkJbWVtY3B5KCYocy0+X3JlY3QpLCAmcmVjdCwgc2l6ZW9mKHJlY3QpKTsKKworCQlpZiAoKGNhbS0+bW9kdWxlX3BhcmFtLmZvcmNlX211bm1hcCAgfHwgY2FtLT5pbyA9PSBJT19SRUFEKSAmJgorCQkgICAgbmJ1ZmZlcnMgIT0gc245YzEwMl9yZXF1ZXN0X2J1ZmZlcnMoY2FtLCBuYnVmZmVycywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbS0+aW8pKSB7CisJCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOworCQkJREJHKDEsICJWSURJT0NfU19GTVQgZmFpbGVkIGJlY2F1c2Ugb2Ygbm90IGVub3VnaCAiCisJCQkgICAgICAgIm1lbW9yeS4gVG8gdXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuICIKKwkJCSAgICAgICAiL2Rldi92aWRlbyVkIGFnYWluLiIsIGNhbS0+djRsZGV2LT5taW5vcikKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJY2FtLT5zdHJlYW0gPSBzdHJlYW07CisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfR19KUEVHQ09NUDoKKwl7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmY2FtLT5jb21wcmVzc2lvbiwKKwkJICAgICAgICAgICAgICAgICBzaXplb2YoY2FtLT5jb21wcmVzc2lvbikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfU19KUEVHQ09NUDoKKwl7CisJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiBqYzsKKwkJY29uc3QgZW51bSBzbjljMTAyX3N0cmVhbV9zdGF0ZSBzdHJlYW0gPSBjYW0tPnN0cmVhbTsKKwkJaW50IGVyciA9IDA7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZqYywgYXJnLCBzaXplb2YoamMpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChqYy5xdWFsaXR5ICE9IDAgJiYgamMucXVhbGl0eSAhPSAxKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGNhbS0+c3RyZWFtID09IFNUUkVBTV9PTikKKwkJCWlmICgoZXJyID0gc245YzEwMl9zdHJlYW1faW50ZXJydXB0KGNhbSkpKQorCQkJCXJldHVybiBlcnI7CisKKwkJZXJyICs9IHNuOWMxMDJfc2V0X2NvbXByZXNzaW9uKGNhbSwgJmpjKTsKKwkJaWYgKGVycikgeyAvKiBhdG9taWMsIG5vIHJvbGxiYWNrIGluIGlvY3RsKCkgKi8KKwkJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CisJCQlEQkcoMSwgIlZJRElPQ19TX0pQRUdDT01QIGZhaWxlZCBiZWNhdXNlIG9mIGhhcmR3YXJlICIKKwkJCSAgICAgICAicHJvYmxlbXMuIFRvIHVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAiCisJCQkgICAgICAgIi9kZXYvdmlkZW8lZCBhZ2Fpbi4iLCBjYW0tPnY0bGRldi0+bWlub3IpCisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCWNhbS0+Y29tcHJlc3Npb24ucXVhbGl0eSA9IGpjLnF1YWxpdHk7CisKKwkJY2FtLT5zdHJlYW0gPSBzdHJlYW07CisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfUkVRQlVGUzoKKwl7CisJCXN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzIHJiOworCQl1MzIgaTsKKwkJaW50IGVycjsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJnJiLCBhcmcsIHNpemVvZihyYikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKHJiLnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CisJCSAgICByYi5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChjYW0tPmlvID09IElPX1JFQUQpIHsKKwkJCURCRygzLCAiQ2xvc2UgYW5kIG9wZW4gdGhlIGRldmljZSBhZ2FpbiB0byBjaG9vc2UgIgorCQkJICAgICAgICJ0aGUgbW1hcCBJL08gbWV0aG9kIikKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IGNhbS0+bmJ1ZmZlcnM7IGkrKykKKwkJCWlmIChjYW0tPmZyYW1lW2ldLnZtYV91c2VfY291bnQpIHsKKwkJCQlEQkcoMywgIlZJRElPQ19SRVFCVUZTIGZhaWxlZC4gIgorCQkJCSAgICAgICAiUHJldmlvdXMgYnVmZmVycyBhcmUgc3RpbGwgbWFwcGVkLiIpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJaWYgKGNhbS0+c3RyZWFtID09IFNUUkVBTV9PTikKKwkJCWlmICgoZXJyID0gc245YzEwMl9zdHJlYW1faW50ZXJydXB0KGNhbSkpKQorCQkJCXJldHVybiBlcnI7CisKKwkJc245YzEwMl9lbXB0eV9mcmFtZXF1ZXVlcyhjYW0pOworCisJCXNuOWMxMDJfcmVsZWFzZV9idWZmZXJzKGNhbSk7CisJCWlmIChyYi5jb3VudCkKKwkJCXJiLmNvdW50ID0gc245YzEwMl9yZXF1ZXN0X2J1ZmZlcnMoY2FtLCByYi5jb3VudCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9fTU1BUCk7CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZyYiwgc2l6ZW9mKHJiKSkpIHsKKwkJCXNuOWMxMDJfcmVsZWFzZV9idWZmZXJzKGNhbSk7CisJCQljYW0tPmlvID0gSU9fTk9ORTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisKKwkJY2FtLT5pbyA9IHJiLmNvdW50ID8gSU9fTU1BUCA6IElPX05PTkU7CisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfUVVFUllCVUY6CisJeworCQlzdHJ1Y3QgdjRsMl9idWZmZXIgYjsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmIsIGFyZywgc2l6ZW9mKGIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChiLnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CisJCSAgICBiLmluZGV4ID49IGNhbS0+bmJ1ZmZlcnMgfHwgY2FtLT5pbyAhPSBJT19NTUFQKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbWVtY3B5KCZiLCAmY2FtLT5mcmFtZVtiLmluZGV4XS5idWYsIHNpemVvZihiKSk7CisKKwkJaWYgKGNhbS0+ZnJhbWVbYi5pbmRleF0udm1hX3VzZV9jb3VudCkKKwkJCWIuZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19NQVBQRUQ7CisKKwkJaWYgKGNhbS0+ZnJhbWVbYi5pbmRleF0uc3RhdGUgPT0gRl9ET05FKQorCQkJYi5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX0RPTkU7CisJCWVsc2UgaWYgKGNhbS0+ZnJhbWVbYi5pbmRleF0uc3RhdGUgIT0gRl9VTlVTRUQpCisJCQliLmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfUVVFVUVEOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYiwgc2l6ZW9mKGIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DX1FCVUY6CisJeworCQlzdHJ1Y3QgdjRsMl9idWZmZXIgYjsKKwkJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmYiwgYXJnLCBzaXplb2YoYikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKGIudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKKwkJICAgIGIuaW5kZXggPj0gY2FtLT5uYnVmZmVycyB8fCBjYW0tPmlvICE9IElPX01NQVApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoY2FtLT5mcmFtZVtiLmluZGV4XS5zdGF0ZSAhPSBGX1VOVVNFRCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWNhbS0+ZnJhbWVbYi5pbmRleF0uc3RhdGUgPSBGX1FVRVVFRDsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJbGlzdF9hZGRfdGFpbCgmY2FtLT5mcmFtZVtiLmluZGV4XS5mcmFtZSwgJmNhbS0+aW5xdWV1ZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisKKwkJUERCR0coIkZyYW1lICMlbHUgcXVldWVkIiwgKHVuc2lnbmVkIGxvbmcpYi5pbmRleCkKKworCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ19EUUJVRjoKKwl7CisJCXN0cnVjdCB2NGwyX2J1ZmZlciBiOworCQlzdHJ1Y3Qgc245YzEwMl9mcmFtZV90ICpmOworCQl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJCWludCBlcnIgPSAwOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmYiwgYXJnLCBzaXplb2YoYikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKGIudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwgY2FtLT5pbyE9IElPX01NQVApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAobGlzdF9lbXB0eSgmY2FtLT5vdXRxdWV1ZSkpIHsKKwkJCWlmIChjYW0tPnN0cmVhbSA9PSBTVFJFQU1fT0ZGKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQorCQkJCXJldHVybiAtRUFHQUlOOworCQkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlCisJCQkgICAgICAoIGNhbS0+d2FpdF9mcmFtZSwgCisJCQkgICAgICAgICghbGlzdF9lbXB0eSgmY2FtLT5vdXRxdWV1ZSkpIHx8CisJCQkgICAgICAgIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgfHwKKwkJCSAgICAgICAgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCWlmIChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpCisJCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJZiA9IGxpc3RfZW50cnkoY2FtLT5vdXRxdWV1ZS5uZXh0LCBzdHJ1Y3Qgc245YzEwMl9mcmFtZV90LAorCQkgICAgICAgICAgICAgICBmcmFtZSk7CisJCWxpc3RfZGVsKGNhbS0+b3V0cXVldWUubmV4dCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisKKwkJZi0+c3RhdGUgPSBGX1VOVVNFRDsKKworCQltZW1jcHkoJmIsICZmLT5idWYsIHNpemVvZihiKSk7CisJCWlmIChmLT52bWFfdXNlX2NvdW50KQorCQkJYi5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX01BUFBFRDsKKworCQlpZiAoY29weV90b191c2VyKGFyZywgJmIsIHNpemVvZihiKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlQREJHRygiRnJhbWUgIyVsdSBkZXF1ZXVlZCIsICh1bnNpZ25lZCBsb25nKWYtPmJ1Zi5pbmRleCkKKworCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ19TVFJFQU1PTjoKKwl7CisJCWludCB0eXBlOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmdHlwZSwgYXJnLCBzaXplb2YodHlwZSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKHR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8IGNhbS0+aW8gIT0gSU9fTU1BUCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChsaXN0X2VtcHR5KCZjYW0tPmlucXVldWUpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJY2FtLT5zdHJlYW0gPSBTVFJFQU1fT047CisKKwkJREJHKDMsICJTdHJlYW0gb24iKQorCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DX1NUUkVBTU9GRjoKKwl7CisJCWludCB0eXBlLCBlcnI7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0eXBlLCBhcmcsIHNpemVvZih0eXBlKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAodHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwgY2FtLT5pbyAhPSBJT19NTUFQKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGNhbS0+c3RyZWFtID09IFNUUkVBTV9PTikKKwkJCWlmICgoZXJyID0gc245YzEwMl9zdHJlYW1faW50ZXJydXB0KGNhbSkpKQorCQkJCXJldHVybiBlcnI7CisKKwkJc245YzEwMl9lbXB0eV9mcmFtZXF1ZXVlcyhjYW0pOworCisJCURCRygzLCAiU3RyZWFtIG9mZiIpCisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfR19QQVJNOgorCXsKKwkJc3RydWN0IHY0bDJfc3RyZWFtcGFybSBzcDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJnNwLCBhcmcsIHNpemVvZihzcCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKHNwLnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJc3AucGFybS5jYXB0dXJlLmV4dGVuZGVkbW9kZSA9IDA7CisJCXNwLnBhcm0uY2FwdHVyZS5yZWFkYnVmZmVycyA9IGNhbS0+bnJlYWRidWZmZXJzOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmc3AsIHNpemVvZihzcCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfU19QQVJNX09MRDoKKwljYXNlIFZJRElPQ19TX1BBUk06CisJeworCQlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtIHNwOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmc3AsIGFyZywgc2l6ZW9mKHNwKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoc3AudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlzcC5wYXJtLmNhcHR1cmUuZXh0ZW5kZWRtb2RlID0gMDsKKworCQlpZiAoc3AucGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID09IDApCisJCQlzcC5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnMgPSBjYW0tPm5yZWFkYnVmZmVyczsKKworCQlpZiAoc3AucGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID4gU045QzEwMl9NQVhfRlJBTUVTKQorCQkJc3AucGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID0gU045QzEwMl9NQVhfRlJBTUVTOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmc3AsIHNpemVvZihzcCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJY2FtLT5ucmVhZGJ1ZmZlcnMgPSBzcC5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnM7CisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfR19TVEQ6CisJY2FzZSBWSURJT0NfU19TVEQ6CisJY2FzZSBWSURJT0NfUVVFUllTVEQ6CisJY2FzZSBWSURJT0NfRU5VTVNURDoKKwljYXNlIFZJRElPQ19RVUVSWU1FTlU6CisJCXJldHVybiAtRUlOVkFMOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl9Cit9CisKKworc3RhdGljIGludCBzbjljMTAyX2lvY3RsKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlKiBmaWxwLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisJaW50IGVyciA9IDA7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjYW0tPmZpbGVvcF9zZW0pKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7CisJCURCRygxLCAiRGV2aWNlIG5vdCBwcmVzZW50IikKKwkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpIHsKKwkJREJHKDEsICJUaGUgY2FtZXJhIGlzIG1pc2NvbmZpZ3VyZWQuIENsb3NlIGFuZCBvcGVuIGl0IGFnYWluLiIpCisJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwllcnIgPSBzbjljMTAyX2lvY3RsX3Y0bDIoaW5vZGUsIGZpbHAsIGNtZCwgKHZvaWQgX191c2VyICopYXJnKTsKKworCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzbjljMTAyX2ZvcHMgPSB7CisJLm93bmVyID0gICBUSElTX01PRFVMRSwKKwkub3BlbiA9ICAgIHNuOWMxMDJfb3BlbiwKKwkucmVsZWFzZSA9IHNuOWMxMDJfcmVsZWFzZSwKKwkuaW9jdGwgPSAgIHNuOWMxMDJfaW9jdGwsCisJLnJlYWQgPSAgICBzbjljMTAyX3JlYWQsCisJLnBvbGwgPSAgICBzbjljMTAyX3BvbGwsCisJLm1tYXAgPSAgICBzbjljMTAyX21tYXAsCisJLmxsc2VlayA9ICBub19sbHNlZWssCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEl0IGV4aXN0cyBhIHNpbmdsZSBpbnRlcmZhY2Ugb25seS4gV2UgZG8gbm90IG5lZWQgdG8gdmFsaWRhdGUgYW55dGhpbmcuICovCitzdGF0aWMgaW50CitzbjljMTAyX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSogaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQqIGlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbTsKKwlzdGF0aWMgdW5zaWduZWQgaW50IGRldl9uciA9IDA7CisJdW5zaWduZWQgaW50IGksIG47CisJaW50IGVyciA9IDAsIHI7CisKKwluID0gc2l6ZW9mKHNuOWMxMDJfaWRfdGFibGUpL3NpemVvZihzbjljMTAyX2lkX3RhYmxlWzBdKTsKKwlmb3IgKGkgPSAwOyBpIDwgbi0xOyBpKyspCisJCWlmIChsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSAKKwkJICAgIHNuOWMxMDJfaWRfdGFibGVbaV0uaWRWZW5kb3IgJiYKKwkJICAgIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PQorCQkgICAgc245YzEwMl9pZF90YWJsZVtpXS5pZFByb2R1Y3QpCisJCQlicmVhazsKKwlpZiAoaSA9PSBuLTEpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCEoY2FtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNuOWMxMDJfZGV2aWNlKSwgR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQoY2FtLCAwLCBzaXplb2YoKmNhbSkpOworCisJY2FtLT51c2JkZXYgPSB1ZGV2OworCisJbWVtY3B5KCZjYW0tPmRldiwgJnVkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBkZXZpY2UpKTsKKworCWlmICghKGNhbS0+Y29udHJvbF9idWZmZXIgPSBrbWFsbG9jKDgsIEdGUF9LRVJORUwpKSkgeworCQlEQkcoMSwgImttYWxsb2MoKSBmYWlsZWQiKQorCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCW1lbXNldChjYW0tPmNvbnRyb2xfYnVmZmVyLCAwLCA4KTsKKworCWlmICghKGNhbS0+djRsZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCkpKSB7CisJCURCRygxLCAidmlkZW9fZGV2aWNlX2FsbG9jKCkgZmFpbGVkIikKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCWluaXRfTVVURVgoJmNhbS0+ZGV2X3NlbSk7CisKKwlyID0gc245YzEwMl9yZWFkX3JlZyhjYW0sIDB4MDApOworCWlmIChyIDwgMCB8fCByICE9IDB4MTApIHsKKwkJREJHKDEsICJTb3JyeSwgdGhpcyBpcyBub3QgYSBTTjlDMTB4IGJhc2VkIGNhbWVyYSAiCisJCSAgICAgICAiKHZpZC9waWQgMHglMDRYLzB4JTA0WCkiLAorCQkgICAgc245YzEwMl9pZF90YWJsZVtpXS5pZFZlbmRvcixzbjljMTAyX2lkX3RhYmxlW2ldLmlkUHJvZHVjdCkKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBmYWlsOworCX0KKworCWNhbS0+YnJpZGdlID0gKHNuOWMxMDJfaWRfdGFibGVbaV0uaWRQcm9kdWN0ICYgMHhmZmMwKSA9PSAweDYwODAgPworCSAgICAgICAgICAgICAgQlJJREdFX1NOOUMxMDMgOiBCUklER0VfU045QzEwMjsKKwlzd2l0Y2ggKGNhbS0+YnJpZGdlKSB7CisJY2FzZSBCUklER0VfU045QzEwMToKKwljYXNlIEJSSURHRV9TTjlDMTAyOgorCQlEQkcoMiwgIlNOOUMxMFsxMl0gUEMgQ2FtZXJhIENvbnRyb2xsZXIgZGV0ZWN0ZWQgIgorCQkgICAgICAgIih2aWQvcGlkIDB4JTA0WC8weCUwNFgpIiwgc245YzEwMl9pZF90YWJsZVtpXS5pZFZlbmRvciwKKwkJICAgIHNuOWMxMDJfaWRfdGFibGVbaV0uaWRQcm9kdWN0KQorCQlicmVhazsKKwljYXNlIEJSSURHRV9TTjlDMTAzOgorCQlEQkcoMiwgIlNOOUMxMDMgUEMgQ2FtZXJhIENvbnRyb2xsZXIgZGV0ZWN0ZWQgIgorCQkgICAgICAgIih2aWQvcGlkIDB4JTA0WC8weCUwNFgpIiwgc245YzEwMl9pZF90YWJsZVtpXS5pZFZlbmRvciwKKwkJICAgIHNuOWMxMDJfaWRfdGFibGVbaV0uaWRQcm9kdWN0KQorCQlicmVhazsKKwl9CisKKwlmb3IgIChpID0gMDsgc245YzEwMl9zZW5zb3JfdGFibGVbaV07IGkrKykgeworCQllcnIgPSBzbjljMTAyX3NlbnNvcl90YWJsZVtpXShjYW0pOworCQlpZiAoIWVycikKKwkJCWJyZWFrOworCX0KKworCWlmICghZXJyICYmIGNhbS0+c2Vuc29yKSB7CisJCURCRygyLCAiJXMgaW1hZ2Ugc2Vuc29yIGRldGVjdGVkIiwgY2FtLT5zZW5zb3ItPm5hbWUpCisJCURCRygzLCAiU3VwcG9ydCBmb3IgJXMgbWFpbnRhaW5lZCBieSAlcyIsCisJCSAgICBjYW0tPnNlbnNvci0+bmFtZSwgY2FtLT5zZW5zb3ItPm1haW50YWluZXIpCisJfSBlbHNlIHsKKwkJREJHKDEsICJObyBzdXBwb3J0ZWQgaW1hZ2Ugc2Vuc29yIGRldGVjdGVkIikKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBmYWlsOworCX0KKworCWlmIChzbjljMTAyX2luaXQoY2FtKSkgeworCQlEQkcoMSwgIkluaXRpYWxpemF0aW9uIGZhaWxlZC4gSSB3aWxsIHJldHJ5IG9uIG9wZW4oKS4iKQorCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOworCX0KKworCXN0cmNweShjYW0tPnY0bGRldi0+bmFtZSwgIlNOOUMxMHggUEMgQ2FtZXJhIik7CisJY2FtLT52NGxkZXYtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY2FtLT52NGxkZXYtPnR5cGUgPSBWSURfVFlQRV9DQVBUVVJFIHwgVklEX1RZUEVfU0NBTEVTOworCWNhbS0+djRsZGV2LT5oYXJkd2FyZSA9IFZJRF9IQVJEV0FSRV9TTjlDMTAyOworCWNhbS0+djRsZGV2LT5mb3BzID0gJnNuOWMxMDJfZm9wczsKKwljYW0tPnY0bGRldi0+bWlub3IgPSB2aWRlb19ucltkZXZfbnJdOworCWNhbS0+djRsZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CisJdmlkZW9fc2V0X2RydmRhdGEoY2FtLT52NGxkZXYsIGNhbSk7CisKKwlkb3duKCZjYW0tPmRldl9zZW0pOworCisJZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGNhbS0+djRsZGV2LCBWRkxfVFlQRV9HUkFCQkVSLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb19ucltkZXZfbnJdKTsKKwlpZiAoZXJyKSB7CisJCURCRygxLCAiVjRMMiBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWxlZCIpCisJCWlmIChlcnIgPT0gLUVORklMRSAmJiB2aWRlb19ucltkZXZfbnJdID09IC0xKQorCQkJREJHKDEsICJGcmVlIC9kZXYvdmlkZW9YIG5vZGUgbm90IGZvdW5kIikKKwkJdmlkZW9fbnJbZGV2X25yXSA9IC0xOworCQlkZXZfbnIgPSAoZGV2X25yIDwgU045QzEwMl9NQVhfREVWSUNFUy0xKSA/IGRldl9ucisxIDogMDsKKwkJdXAoJmNhbS0+ZGV2X3NlbSk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlEQkcoMiwgIlY0TDIgZGV2aWNlIHJlZ2lzdGVyZWQgYXMgL2Rldi92aWRlbyVkIiwgY2FtLT52NGxkZXYtPm1pbm9yKQorCisJY2FtLT5tb2R1bGVfcGFyYW0uZm9yY2VfbXVubWFwID0gZm9yY2VfbXVubWFwW2Rldl9ucl07CisKKwlkZXZfbnIgPSAoZGV2X25yIDwgU045QzEwMl9NQVhfREVWSUNFUy0xKSA/IGRldl9ucisxIDogMDsKKworCXNuOWMxMDJfY3JlYXRlX3N5c2ZzKGNhbSk7CisJREJHKDIsICJPcHRpb25hbCBkZXZpY2UgY29udHJvbCB0aHJvdWdoICdzeXNmcycgaW50ZXJmYWNlIHJlYWR5IikKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2FtKTsKKworCXVwKCZjYW0tPmRldl9zZW0pOworCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJaWYgKGNhbSkgeworCQlrZnJlZShjYW0tPmNvbnRyb2xfYnVmZmVyKTsKKwkJaWYgKGNhbS0+djRsZGV2KQorCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoY2FtLT52NGxkZXYpOworCQlrZnJlZShjYW0pOworCX0KKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyB2b2lkIHNuOWMxMDJfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UqIGludGYpCit7CisJc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJaWYgKCFjYW0pCisJCXJldHVybjsKKworCWRvd25fd3JpdGUoJnNuOWMxMDJfZGlzY29ubmVjdCk7CisKKwlkb3duKCZjYW0tPmRldl9zZW0pOyAKKworCURCRygyLCAiRGlzY29ubmVjdGluZyAlcy4uLiIsIGNhbS0+djRsZGV2LT5uYW1lKQorCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX2FsbCgmY2FtLT5vcGVuKTsKKworCWlmIChjYW0tPnVzZXJzKSB7CisJCURCRygyLCAiRGV2aWNlIC9kZXYvdmlkZW8lZCBpcyBvcGVuISBEZXJlZ2lzdHJhdGlvbiBhbmQgIgorCQkgICAgICAgIm1lbW9yeSBkZWFsbG9jYXRpb24gYXJlIGRlZmVycmVkIG9uIGNsb3NlLiIsCisJCSAgICBjYW0tPnY0bGRldi0+bWlub3IpCisJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CisJCXNuOWMxMDJfc3RvcF90cmFuc2ZlcihjYW0pOworCQljYW0tPnN0YXRlIHw9IERFVl9ESVNDT05ORUNURUQ7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2FtLT53YWl0X2ZyYW1lKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjYW0tPndhaXRfc3RyZWFtKTsKKwl9IGVsc2UgeworCQljYW0tPnN0YXRlIHw9IERFVl9ESVNDT05ORUNURUQ7CisJCXNuOWMxMDJfcmVsZWFzZV9yZXNvdXJjZXMoY2FtKTsKKwl9CisKKwl1cCgmY2FtLT5kZXZfc2VtKTsKKworCWlmICghY2FtLT51c2VycykKKwkJa2ZyZWUoY2FtKTsKKworCXVwX3dyaXRlKCZzbjljMTAyX2Rpc2Nvbm5lY3QpOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzbjljMTAyX3VzYl9kcml2ZXIgPSB7CisJLm93bmVyID0gICAgICBUSElTX01PRFVMRSwKKwkubmFtZSA9ICAgICAgICJzbjljMTAyIiwKKwkuaWRfdGFibGUgPSAgIHNuOWMxMDJfaWRfdGFibGUsCisJLnByb2JlID0gICAgICBzbjljMTAyX3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IHNuOWMxMDJfdXNiX2Rpc2Nvbm5lY3QsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgX19pbml0IHNuOWMxMDJfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyID0gMDsKKworCUtEQkcoMiwgU045QzEwMl9NT0RVTEVfTkFNRSAiIHYiIFNOOUMxMDJfTU9EVUxFX1ZFUlNJT04pCisJS0RCRygzLCBTTjlDMTAyX01PRFVMRV9BVVRIT1IpCisKKwlpZiAoKGVyciA9IHVzYl9yZWdpc3Rlcigmc245YzEwMl91c2JfZHJpdmVyKSkpCisJCUtEQkcoMSwgInVzYl9yZWdpc3RlcigpIGZhaWxlZCIpCisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzbjljMTAyX21vZHVsZV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNuOWMxMDJfdXNiX2RyaXZlcik7Cit9CisKKworbW9kdWxlX2luaXQoc245YzEwMl9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChzbjljMTAyX21vZHVsZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfaHY3MTMxZC5jIGIvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9odjcxMzFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgwNzBkNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfaHY3MTMxZC5jCkBAIC0wLDAgKzEsMjcxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQbHVnLWluIGZvciBIVjcxMzFEIGltYWdlIHNlbnNvciBjb25uZWN0ZWQgdG8gdGhlIFNOOUMxMHggUEMgQ2FtZXJhICAgICAqCisgKiBDb250cm9sbGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICAgICAgICAgICAqCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic245YzEwMl9zZW5zb3IuaCIKKworCitzdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIGh2NzEzMWQ7CisKKworc3RhdGljIGludCBodjcxMzFkX2luaXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCit7CisJaW50IGVyciA9IDA7CisKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAwLCAweDEwKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAwLCAweDExKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAwLCAweDE0KTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDYwLCAweDE3KTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDBlLCAweDE4KTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweGYyLCAweDE5KTsKKworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDEsIDB4MDQpOworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDIsIDB4MDApOworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MjgsIDB4MDApOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IGh2NzEzMWRfZ2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpCit7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CisJCXsKKwkJCWludCByMSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDI2KSwKKwkJCSAgICByMiA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDI3KTsKKwkJCWlmIChyMSA8IDAgfHwgcjIgPCAwKQorCQkJCXJldHVybiAtRUlPOworCQkJY3RybC0+dmFsdWUgPSAocjEgPDwgOCkgfCAocjIgJiAweGZmKTsKKwkJfQorCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX1JFRF9CQUxBTkNFOgorCQlpZiAoKGN0cmwtPnZhbHVlID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MzEpKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJY3RybC0+dmFsdWUgPSAweDNmIC0gKGN0cmwtPnZhbHVlICYgMHgzZik7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgorCQlpZiAoKGN0cmwtPnZhbHVlID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MzMpKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJY3RybC0+dmFsdWUgPSAweDNmIC0gKGN0cmwtPnZhbHVlICYgMHgzZik7CisJCXJldHVybiAwOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFOgorCQlpZiAoKGN0cmwtPnZhbHVlID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MzIpKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJY3RybC0+dmFsdWUgPSAweDNmIC0gKGN0cmwtPnZhbHVlICYgMHgzZik7CisJCXJldHVybiAwOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9SRVNFVF9MRVZFTDoKKwkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDMwKSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlICY9IDB4M2Y7CisJCXJldHVybiAwOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9QSVhFTF9CSUFTX1ZPTFRBR0U6CisJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgzNCkpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSAmPSAweDA3OworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKworc3RhdGljIGludCBodjcxMzFkX3NldF9jdHJsKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKQoreworCWludCBlcnIgPSAwOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MjYsIGN0cmwtPnZhbHVlID4+IDgpOworCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDI3LCBjdHJsLT52YWx1ZSAmIDB4ZmYpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1JFRF9CQUxBTkNFOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDMxLCAweDNmIC0gY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzMywgMHgzZiAtIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0U6CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MzIsIDB4M2YgLSBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9SRVNFVF9MRVZFTDoKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzMCwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFNOOUMxMDJfVjRMMl9DSURfUElYRUxfQklBU19WT0xUQUdFOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDM0LCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBlcnIgPyAtRUlPIDogMDsKK30KKworCitzdGF0aWMgaW50IGh2NzEzMWRfc2V0X2Nyb3Aoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3JlY3QqIHJlY3QpCit7CisJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gJmh2NzEzMWQ7CisJaW50IGVyciA9IDA7CisJdTggaF9zdGFydCA9ICh1OCkocmVjdC0+bGVmdCAtIHMtPmNyb3BjYXAuYm91bmRzLmxlZnQpICsgMiwKKwkgICB2X3N0YXJ0ID0gKHU4KShyZWN0LT50b3AgLSBzLT5jcm9wY2FwLmJvdW5kcy50b3ApICsgMjsKKworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIGhfc3RhcnQsIDB4MTIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIHZfc3RhcnQsIDB4MTMpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IGh2NzEzMWRfc2V0X3BpeF9mb3JtYXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHBpeCkKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmIChwaXgtPnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9TTjlDMTBYKQorCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDQyLCAweDE5KTsKKwllbHNlCisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4ZjIsIDB4MTkpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIGh2NzEzMWQgPSB7CisJLm5hbWUgPSAiSFY3MTMxRCIsCisJLm1haW50YWluZXIgPSAiTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiIsCisJLnN5c2ZzX29wcyA9IFNOOUMxMDJfSTJDX1JFQUQgfCBTTjlDMTAyX0kyQ19XUklURSwKKwkuZnJlcXVlbmN5ID0gU045QzEwMl9JMkNfMTAwS0haLAorCS5pbnRlcmZhY2UgPSBTTjlDMTAyX0kyQ18yV0lSRVMsCisJLmkyY19zbGF2ZV9pZCA9IDB4MTEsCisJLmluaXQgPSAmaHY3MTMxZF9pbml0LAorCS5xY3RybCA9IHsKKwkJeworCQkJLmlkID0gVjRMMl9DSURfRVhQT1NVUkUsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJleHBvc3VyZSIsCisJCQkubWluaW11bSA9IDB4MDI1MCwKKwkJCS5tYXhpbXVtID0gMHhmZmZmLAorCQkJLnN0ZXAgPSAweDAwMDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDI1MCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX1JFRF9CQUxBTkNFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAicmVkIGJhbGFuY2UiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweDNmLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDAwLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gVjRMMl9DSURfQkxVRV9CQUxBTkNFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiYmx1ZSBiYWxhbmNlIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gMHgzZiwKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgyMCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFNOOUMxMDJfVjRMMl9DSURfR1JFRU5fQkFMQU5DRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gImdyZWVuIGJhbGFuY2UiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweDNmLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDFlLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gU045QzEwMl9WNEwyX0NJRF9SRVNFVF9MRVZFTCwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gInJlc2V0IGxldmVsIiwKKwkJCS5taW5pbXVtID0gMHgxOSwKKwkJCS5tYXhpbXVtID0gMHgzZiwKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgzMCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFNOOUMxMDJfVjRMMl9DSURfUElYRUxfQklBU19WT0xUQUdFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAicGl4ZWwgYmlhcyB2b2x0YWdlIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gMHgwNywKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwMiwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJfSwKKwkuZ2V0X2N0cmwgPSAmaHY3MTMxZF9nZXRfY3RybCwKKwkuc2V0X2N0cmwgPSAmaHY3MTMxZF9zZXRfY3RybCwKKwkuY3JvcGNhcCA9IHsKKwkJLmJvdW5kcyA9IHsKKwkJCS5sZWZ0ID0gMCwKKwkJCS50b3AgPSAwLAorCQkJLndpZHRoID0gNjQwLAorCQkJLmhlaWdodCA9IDQ4MCwKKwkJfSwKKwkJLmRlZnJlY3QgPSB7CisJCQkubGVmdCA9IDAsCisJCQkudG9wID0gMCwKKwkJCS53aWR0aCA9IDY0MCwKKwkJCS5oZWlnaHQgPSA0ODAsCisJCX0sCisJfSwKKwkuc2V0X2Nyb3AgPSAmaHY3MTMxZF9zZXRfY3JvcCwKKwkucGl4X2Zvcm1hdCA9IHsKKwkJLndpZHRoID0gNjQwLAorCQkuaGVpZ2h0ID0gNDgwLAorCQkucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfU0JHR1I4LAorCQkucHJpdiA9IDgsCisJfSwKKwkuc2V0X3BpeF9mb3JtYXQgPSAmaHY3MTMxZF9zZXRfcGl4X2Zvcm1hdAorfTsKKworCitpbnQgc245YzEwMl9wcm9iZV9odjcxMzFkKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQoreworCWludCByMCA9IDAsIHIxID0gMCwgZXJyID0gMDsKKworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4MDEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MDEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjgsIDB4MTcpOworCWlmIChlcnIpCisJCXJldHVybiAtRUlPOworCisJcjAgPSBzbjljMTAyX2kyY190cnlfcmVhZChjYW0sICZodjcxMzFkLCAweDAwKTsKKwlyMSA9IHNuOWMxMDJfaTJjX3RyeV9yZWFkKGNhbSwgJmh2NzEzMWQsIDB4MDEpOworCWlmIChyMCA8IDAgfHwgcjEgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChyMCAhPSAweDAwICYmIHIxICE9IDB4MDQpCisJCXJldHVybiAtRU5PREVWOworCisJc245YzEwMl9hdHRhY2hfc2Vuc29yKGNhbSwgJmh2NzEzMWQpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX21pMDM0My5jIGIvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9taTAzNDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjY3NmFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9taTAzNDMuYwpAQCAtMCwwICsxLDM2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUGx1Zy1pbiBmb3IgTUktMDM0MyBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBTTjlDMTB4IFBDIENhbWVyYSAgICAgKgorICogQ29udHJvbGxlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgKgorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNuOWMxMDJfc2Vuc29yLmgiCisKKworc3RhdGljIHN0cnVjdCBzbjljMTAyX3NlbnNvciBtaTAzNDM7CitzdGF0aWMgdTggbWkwMzQzX2kyY19kYXRhWzUrMV07CisKKworc3RhdGljIGludCBtaTAzNDNfaW5pdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTApOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MGEsIDB4MTQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDAsIDB4MDEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjAsIDB4MTcpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDcsIDB4MTgpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4YTAsIDB4MTkpOworCisJZXJyICs9IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoY2FtLCAmbWkwMzQzLCA0LCBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGQsIDB4MDAsIDB4MDEsIDAsIDApOworCWVyciArPSBzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKGNhbSwgJm1pMDM0MywgNCwgbWkwMzQzLmkyY19zbGF2ZV9pZCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBkLCAweDAwLCAweDAwLCAwLCAwKTsKKwllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMywgMHgwMSwgMHhlMSwgMCwgMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoY2FtLCAmbWkwMzQzLCA0LCBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQsIDB4MDIsIDB4ODEsIDAsIDApOworCWVyciArPSBzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKGNhbSwgJm1pMDM0MywgNCwgbWkwMzQzLmkyY19zbGF2ZV9pZCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1LCAweDAwLCAweDE3LCAwLCAwKTsKKwllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgwMCwgMHgxMSwgMCwgMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoY2FtLCAmbWkwMzQzLCA0LCBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjIsIDB4MDQsIDB4OWEsIDAsIDApOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IG1pMDM0M19nZXRfY3RybChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKQoreworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgorCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgJm1pMDM0MywgbWkwMzQzLmkyY19zbGF2ZV9pZCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LCAyKzEsIG1pMDM0M19pMmNfZGF0YSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlID0gbWkwMzQzX2kyY19kYXRhWzJdOworCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJCWlmIChzbjljMTAyX2kyY190cnlfcmF3X3JlYWQoY2FtLCAmbWkwMzQzLCBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzUsIDIrMSwgbWkwMzQzX2kyY19kYXRhKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwkJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sICZtaTAzNDMsIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMCwgMisxLCBtaTAzNDNfaTJjX2RhdGEpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSA9IG1pMDM0M19pMmNfZGF0YVszXSAmIDB4MjAgPyAxIDogMDsKKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9WRkxJUDoKKwkJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sICZtaTAzNDMsIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMCwgMisxLCBtaTAzNDNfaTJjX2RhdGEpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSA9IG1pMDM0M19pMmNfZGF0YVszXSAmIDB4ODAgPyAxIDogMDsKKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9SRURfQkFMQU5DRToKKwkJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sICZtaTAzNDMsIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyZCwgMisxLCBtaTAzNDNfaTJjX2RhdGEpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwkJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sICZtaTAzNDMsIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyYywgMisxLCBtaTAzNDNfaTJjX2RhdGEpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQlicmVhazsKKwljYXNlIFNOOUMxMDJfVjRMMl9DSURfR1JFRU5fQkFMQU5DRToKKwkJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sICZtaTAzNDMsIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyZSwgMisxLCBtaTAzNDNfaTJjX2RhdGEpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJY2FzZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0U6CisJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0U6CisJCWN0cmwtPnZhbHVlID0gbWkwMzQzX2kyY19kYXRhWzNdIHwgKG1pMDM0M19pMmNfZGF0YVsyXSA8PCA4KTsKKwkJaWYgKGN0cmwtPnZhbHVlID49IDB4MTAgJiYgY3RybC0+dmFsdWUgPD0gMHgzZikKKwkJCWN0cmwtPnZhbHVlIC09IDB4MTA7CisJCWVsc2UgaWYgKGN0cmwtPnZhbHVlID49IDB4NjAgJiYgY3RybC0+dmFsdWUgPD0gMHg3ZikKKwkJCWN0cmwtPnZhbHVlIC09IDB4NjA7CisJCWVsc2UgaWYgKGN0cmwtPnZhbHVlID49IDB4ZTAgJiYgY3RybC0+dmFsdWUgPD0gMHhmZikKKwkJCWN0cmwtPnZhbHVlIC09IDB4ZTA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBtaTAzNDNfc2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKK3sKKwl1MTYgcmVnID0gMDsKKwlpbnQgZXJyID0gMDsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJY2FzZSBWNEwyX0NJRF9SRURfQkFMQU5DRToKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwljYXNlIFNOOUMxMDJfVjRMMl9DSURfR1JFRU5fQkFMQU5DRToKKwkJaWYgKGN0cmwtPnZhbHVlIDw9ICgweDNmLTB4MTApKQorCQkJcmVnID0gMHgxMCArIGN0cmwtPnZhbHVlOworCQllbHNlIGlmIChjdHJsLT52YWx1ZSA8PSAoKDB4M2YtMHgxMCkgKyAoMHg3Zi0weDYwKSkpCisJCQlyZWcgPSAweDYwICsgKGN0cmwtPnZhbHVlIC0gKDB4M2YtMHgxMCkpOworCQllbHNlCisJCQlyZWcgPSAweGUwICsgKGN0cmwtPnZhbHVlIC0gKDB4M2YtMHgxMCkgLSAoMHg3Zi0weDYwKSk7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgorCQllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksIGN0cmwtPnZhbHVlLCAweDAwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCQllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzUsIHJlZyA+PiA4LCByZWcgJiAweGZmLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoY2FtLCAmbWkwMzQzLCA0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwLCBjdHJsLT52YWx1ZSA/IDB4NDA6MHgwMCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RybC0+dmFsdWUgPyAweDIwOjB4MDAsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDApOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1ZGTElQOgorCQllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsIGN0cmwtPnZhbHVlID8gMHg4MDoweDAwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHJsLT52YWx1ZSA/IDB4ODA6MHgwMCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJCWVyciArPSBzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKGNhbSwgJm1pMDM0MywgNCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWkwMzQzLmkyY19zbGF2ZV9pZCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyZCwgcmVnID4+IDgsIHJlZyAmIDB4ZmYsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDApOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoY2FtLCAmbWkwMzQzLCA0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJjLCByZWcgPj4gOCwgcmVnICYgMHhmZiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCk7CisJCWJyZWFrOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFOgorCQllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MmIsIHJlZyA+PiA4LCByZWcgJiAweGZmLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwKTsKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoY2FtLCAmbWkwMzQzLCA0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJlLCByZWcgPj4gOCwgcmVnICYgMHhmZiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBlcnIgPyAtRUlPIDogMDsKK30KKworCitzdGF0aWMgaW50IG1pMDM0M19zZXRfY3JvcChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfcmVjdCogcmVjdCkKK3sKKwlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSAmbWkwMzQzOworCWludCBlcnIgPSAwOworCXU4IGhfc3RhcnQgPSAodTgpKHJlY3QtPmxlZnQgLSBzLT5jcm9wY2FwLmJvdW5kcy5sZWZ0KSArIDAsCisJICAgdl9zdGFydCA9ICh1OCkocmVjdC0+dG9wIC0gcy0+Y3JvcGNhcC5ib3VuZHMudG9wKSArIDI7CisKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCBoX3N0YXJ0LCAweDEyKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCB2X3N0YXJ0LCAweDEzKTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCBtaTAzNDNfc2V0X3BpeF9mb3JtYXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGl4KQoreworCWludCBlcnIgPSAwOworCisJaWYgKHBpeC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1NOOUMxMFgpIHsKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoY2FtLCAmbWkwMzQzLCA0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBhLCAweDAwLCAweDAzLCAwLCAwKTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgyMCwgMHgxOSk7CisJfSBlbHNlIHsKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoY2FtLCAmbWkwMzQzLCA0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBhLCAweDAwLCAweDA1LCAwLCAwKTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHhhMCwgMHgxOSk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIG1pMDM0MyA9IHsKKwkubmFtZSA9ICJNSS0wMzQzIiwKKwkubWFpbnRhaW5lciA9ICJMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+IiwKKwkuZnJlcXVlbmN5ID0gU045QzEwMl9JMkNfMTAwS0haLAorCS5pbnRlcmZhY2UgPSBTTjlDMTAyX0kyQ18yV0lSRVMsCisJLmkyY19zbGF2ZV9pZCA9IDB4NWQsCisJLmluaXQgPSAmbWkwMzQzX2luaXQsCisJLnFjdHJsID0geworCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9FWFBPU1VSRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gImV4cG9zdXJlIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gMHgwZiwKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwNiwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0dBSU4sCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJnbG9iYWwgZ2FpbiIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9ICgweDNmLTB4MTApKygweDdmLTB4NjApKygweGZmLTB4ZTApLC8qMHg2ZCovCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDAsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9IRkxJUCwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lID0gImhvcml6b250YWwgbWlycm9yIiwKKwkJCS5taW5pbXVtID0gMCwKKwkJCS5tYXhpbXVtID0gMSwKKwkJCS5zdGVwID0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX1ZGTElQLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkJLm5hbWUgPSAidmVydGljYWwgbWlycm9yIiwKKwkJCS5taW5pbXVtID0gMCwKKwkJCS5tYXhpbXVtID0gMSwKKwkJCS5zdGVwID0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX1JFRF9CQUxBTkNFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAicmVkIGJhbGFuY2UiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAoMHgzZi0weDEwKSsoMHg3Zi0weDYwKSsoMHhmZi0weGUwKSwKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwMCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0JMVUVfQkFMQU5DRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gImJsdWUgYmFsYW5jZSIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9ICgweDNmLTB4MTApKygweDdmLTB4NjApKygweGZmLTB4ZTApLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDAwLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiZ3JlZW4gYmFsYW5jZSIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9ICgoMHgzZi0weDEwKSsoMHg3Zi0weDYwKSsoMHhmZi0weGUwKSksCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDAsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCX0sCisJLmdldF9jdHJsID0gJm1pMDM0M19nZXRfY3RybCwKKwkuc2V0X2N0cmwgPSAmbWkwMzQzX3NldF9jdHJsLAorCS5jcm9wY2FwID0geworCQkuYm91bmRzID0geworCQkJLmxlZnQgPSAwLAorCQkJLnRvcCA9IDAsCisJCQkud2lkdGggPSA2NDAsCisJCQkuaGVpZ2h0ID0gNDgwLAorCQl9LAorCQkuZGVmcmVjdCA9IHsKKwkJCS5sZWZ0ID0gMCwKKwkJCS50b3AgPSAwLAorCQkJLndpZHRoID0gNjQwLAorCQkJLmhlaWdodCA9IDQ4MCwKKwkJfSwKKwl9LAorCS5zZXRfY3JvcCA9ICZtaTAzNDNfc2V0X2Nyb3AsCisJLnBpeF9mb3JtYXQgPSB7CisJCS53aWR0aCA9IDY0MCwKKwkJLmhlaWdodCA9IDQ4MCwKKwkJLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1NCR0dSOCwKKwkJLnByaXYgPSA4LAorCX0sCisJLnNldF9waXhfZm9ybWF0ID0gJm1pMDM0M19zZXRfcGl4X2Zvcm1hdAorfTsKKworCitpbnQgc245YzEwMl9wcm9iZV9taTAzNDMoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCit7CisJaW50IGVyciA9IDA7CisKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAxLCAweDAxKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAwLCAweDAxKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDI4LCAweDE3KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChzbjljMTAyX2kyY190cnlfcmF3X3JlYWQoY2FtLCAmbWkwMzQzLCBtaTAzNDMuaTJjX3NsYXZlX2lkLCAweDAwLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiwgbWkwMzQzX2kyY19kYXRhKSA8IDApCisJCXJldHVybiAtRUlPOworCisJaWYgKG1pMDM0M19pMmNfZGF0YVs0XSAhPSAweDMyICYmIG1pMDM0M19pMmNfZGF0YVszXSAhPSAweGUzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNuOWMxMDJfYXR0YWNoX3NlbnNvcihjYW0sICZtaTAzNDMpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX3BhczEwNmIuYyBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfcGFzMTA2Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZTNlYzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX3BhczEwNmIuYwpAQCAtMCwwICsxLDMwNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUGx1Zy1pbiBmb3IgUEFTMTA2QiBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBTTjlDMTB4IFBDIENhbWVyYSAgICAgKgorICogQ29udHJvbGxlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgKgorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSAic245YzEwMl9zZW5zb3IuaCIKKworCitzdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIHBhczEwNmI7CisKKworc3RhdGljIGludCBwYXMxMDZiX2luaXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCit7CisJaW50IGVyciA9IDA7CisKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAwLCAweDEwKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAwLCAweDExKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAwLCAweDE0KTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDIwLCAweDE3KTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDIwLCAweDE5KTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDA5LCAweDE4KTsKKworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDIsIDB4MGMpOworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDUsIDB4NWEpOworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDYsIDB4ODgpOworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDcsIDB4ODApOworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTAsIDB4MDYpOworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTEsIDB4MDYpOworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTIsIDB4MDApOworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTQsIDB4MDIpOworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTMsIDB4MDEpOworCisJbXNsZWVwKDQwMCk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgcGFzMTA2Yl9nZXRfY3RybChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKK3sKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKKwkJeworCQkJaW50IHIxID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MDMpLAorCQkJICAgIHIyID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MDQpOworCQkJaWYgKHIxIDwgMCB8fCByMiA8IDApCisJCQkJcmV0dXJuIC1FSU87CisJCQljdHJsLT52YWx1ZSA9IChyMSA8PCA0KSB8IChyMiAmIDB4MGYpOworCQl9CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgwYykpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSAmPSAweDFmOworCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDA5KSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlICY9IDB4MWY7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDBlKSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlICY9IDB4MWY7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgwZikpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSAmPSAweDA3OworCQlyZXR1cm4gMDsKKwljYXNlIFNOOUMxMDJfVjRMMl9DSURfR1JFRU5fQkFMQU5DRToKKwkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDBhKSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlID0gKGN0cmwtPnZhbHVlICYgMHgxZikgPDwgMTsKKwkJcmV0dXJuIDA7CisJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX0RBQ19NQUdOSVRVREU6CisJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgwOCkpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSAmPSAweGY4OworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKworc3RhdGljIGludCBwYXMxMDZiX3NldF9jdHJsKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKQoreworCWludCBlcnIgPSAwOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDMsIGN0cmwtPnZhbHVlID4+IDQpOworCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDA0LCBjdHJsLT52YWx1ZSAmIDB4MGYpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1JFRF9CQUxBTkNFOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDBjLCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDA5LCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwZSwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDBmLCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDBhLCBjdHJsLT52YWx1ZSA+PiAxKTsKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwYiwgY3RybC0+dmFsdWUgPj4gMSk7CisJCWJyZWFrOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9EQUNfTUFHTklUVURFOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDA4LCBjdHJsLT52YWx1ZSA8PCAzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTMsIDB4MDEpOworCisJcmV0dXJuIGVyciA/IC1FSU8gOiAwOworfQorCisKK3N0YXRpYyBpbnQgcGFzMTA2Yl9zZXRfY3JvcChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfcmVjdCogcmVjdCkKK3sKKwlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSAmcGFzMTA2YjsKKwlpbnQgZXJyID0gMDsKKwl1OCBoX3N0YXJ0ID0gKHU4KShyZWN0LT5sZWZ0IC0gcy0+Y3JvcGNhcC5ib3VuZHMubGVmdCkgKyA0LAorCSAgIHZfc3RhcnQgPSAodTgpKHJlY3QtPnRvcCAtIHMtPmNyb3BjYXAuYm91bmRzLnRvcCkgKyAzOworCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgaF9zdGFydCwgMHgxMik7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgdl9zdGFydCwgMHgxMyk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgcGFzMTA2Yl9zZXRfcGl4X2Zvcm1hdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGl4KQoreworCWludCBlcnIgPSAwOworCisJaWYgKHBpeC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1NOOUMxMFgpCisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MmMsIDB4MTcpOworCWVsc2UKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgyMCwgMHgxNyk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IgcGFzMTA2YiA9IHsKKwkubmFtZSA9ICJQQVMxMDZCIiwKKwkubWFpbnRhaW5lciA9ICJMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+IiwKKwkuc3lzZnNfb3BzID0gU045QzEwMl9JMkNfUkVBRCB8IFNOOUMxMDJfSTJDX1dSSVRFLAorCS5mcmVxdWVuY3kgPSBTTjlDMTAyX0kyQ180MDBLSFogfCBTTjlDMTAyX0kyQ18xMDBLSFosCisJLmludGVyZmFjZSA9IFNOOUMxMDJfSTJDXzJXSVJFUywKKwkuaTJjX3NsYXZlX2lkID0gMHg0MCwKKwkuaW5pdCA9ICZwYXMxMDZiX2luaXQsCisJLnFjdHJsID0geworCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9FWFBPU1VSRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gImV4cG9zdXJlIiwKKwkJCS5taW5pbXVtID0gMHgxMjUsCisJCQkubWF4aW11bSA9IDB4ZmZmLAorCQkJLnN0ZXAgPSAweDAwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgxNDAsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9HQUlOLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiZ2xvYmFsIGdhaW4iLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweDFmLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDBkLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gVjRMMl9DSURfQ09OVFJBU1QsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJjb250cmFzdCIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4MDcsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDAsIC8qIDB4MDB+MHgwMyBoYXZlIHNhbWUgZWZmZWN0ICovCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9SRURfQkFMQU5DRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gInJlZCBiYWxhbmNlIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gMHgxZiwKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwNCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0JMVUVfQkFMQU5DRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gImJsdWUgYmFsYW5jZSIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4MWYsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDYsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSBTTjlDMTAyX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0UsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJncmVlbiBiYWxhbmNlIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gMHgzZSwKKwkJCS5zdGVwID0gMHgwMiwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwMiwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFNOOUMxMDJfVjRMMl9DSURfREFDX01BR05JVFVERSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gIkRBQyBtYWduaXR1ZGUiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweDFmLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDAxLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwl9LAorCS5nZXRfY3RybCA9ICZwYXMxMDZiX2dldF9jdHJsLAorCS5zZXRfY3RybCA9ICZwYXMxMDZiX3NldF9jdHJsLAorCS5jcm9wY2FwID0geworCQkuYm91bmRzID0geworCQkJLmxlZnQgPSAwLAorCQkJLnRvcCA9IDAsCisJCQkud2lkdGggPSAzNTIsCisJCQkuaGVpZ2h0ID0gMjg4LAorCQl9LAorCQkuZGVmcmVjdCA9IHsKKwkJCS5sZWZ0ID0gMCwKKwkJCS50b3AgPSAwLAorCQkJLndpZHRoID0gMzUyLAorCQkJLmhlaWdodCA9IDI4OCwKKwkJfSwKKwl9LAorCS5zZXRfY3JvcCA9ICZwYXMxMDZiX3NldF9jcm9wLAorCS5waXhfZm9ybWF0ID0geworCQkud2lkdGggPSAzNTIsCisJCS5oZWlnaHQgPSAyODgsCisJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjgsCisJCS5wcml2ID0gOCwgLyogd2UgdXNlIHRoaXMgZmllbGQgYXMgJ2JpdHMgcGVyIHBpeGVsJyAqLworCX0sCisJLnNldF9waXhfZm9ybWF0ID0gJnBhczEwNmJfc2V0X3BpeF9mb3JtYXQKK307CisKKworaW50IHNuOWMxMDJfcHJvYmVfcGFzMTA2YihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgcjAgPSAwLCByMSA9IDAsIGVyciA9IDA7CisJdW5zaWduZWQgaW50IHBpZCA9IDA7CisKKwkvKgorCSAgIE1pbmltYWwgaW5pdGlhbGl6YXRpb24gdG8gZW5hYmxlIHRoZSBJMkMgY29tbXVuaWNhdGlvbgorCSAgIE5PVEU6IGRvIE5PVCBjaGFuZ2UgdGhlIHZhbHVlcyEKKwkqLworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4MDEpOyAvKiBzZW5zb3IgcG93ZXIgZG93biAqLworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MDEpOyAvKiBzZW5zb3IgcG93ZXIgb24gKi8KKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDI4LCAweDE3KTsgLyogc2Vuc29yIGNsb2NrIGF0IDI0IE1IeiAqLworCWlmIChlcnIpCisJCXJldHVybiAtRUlPOworCisJcjAgPSBzbjljMTAyX2kyY190cnlfcmVhZChjYW0sICZwYXMxMDZiLCAweDAwKTsKKwlyMSA9IHNuOWMxMDJfaTJjX3RyeV9yZWFkKGNhbSwgJnBhczEwNmIsIDB4MDEpOworCisJaWYgKHIwIDwgMCB8fCByMSA8IDApCisJCXJldHVybiAtRUlPOworCisJcGlkID0gKHIwIDw8IDExKSB8ICgocjEgJiAweGYwKSA+PiA0KTsKKwlpZiAocGlkICE9IDB4MDA3KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNuOWMxMDJfYXR0YWNoX3NlbnNvcihjYW0sICZwYXMxMDZiKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9wYXMyMDJiY2IuYyBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfcGFzMjAyYmNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNhNTRjNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfcGFzMjAyYmNiLmMKQEAgLTAsMCArMSwyOTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBsdWctaW4gZm9yIFBBUzIwMkJDQiBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBTTjlDMTB4IFBDIENhbWVyYSAgICoKKyAqIENvbnRyb2xsZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBieSBDYXJsb3MgRWR1YXJkbyBNZWRhZ2xpYSBEeW9uaXNpbyAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICA8bWVkYWdsaWFAdW5kbC5vcmcuYnI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vY2FkdS5ob21lbGludXguY29tOjgwODAvICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIERBQyBNYWduaXR1ZGUsIGV4cG9zdXJlIGFuZCBncmVlbiBnYWluIGNvbnRyb2xzIGFkZGVkIGJ5ICAgICAgICAgICAgICAgICoKKyAqIEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICoKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgInNuOWMxMDJfc2Vuc29yLmgiCisKKworc3RhdGljIHN0cnVjdCBzbjljMTAyX3NlbnNvciBwYXMyMDJiY2I7CisKKworc3RhdGljIGludCBwYXMyMDJiY2JfaW5pdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTApOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjAsIDB4MTcpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MzAsIDB4MTkpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDksIDB4MTgpOworCisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwMiwgMHgxNCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwMywgMHg0MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwZCwgMHgyYyk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwZSwgMHgwMSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwZiwgMHhhOSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMCwgMHgwOCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMywgMHg2Myk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxNSwgMHg3MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMSwgMHgwMSk7CisKKwltc2xlZXAoNDAwKTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCBwYXMyMDJiY2JfZ2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKK3sKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKKwkJeworCQkJaW50IHIxID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MDQpLAorCQkJICAgIHIyID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MDUpOworCQkJaWYgKHIxIDwgMCB8fCByMiA8IDApCisJCQkJcmV0dXJuIC1FSU87CisJCQljdHJsLT52YWx1ZSA9IChyMSA8PCA2KSB8IChyMiAmIDB4M2YpOworCQl9CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgwOSkpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSAmPSAweDBmOworCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDA3KSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlICY9IDB4MGY7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDEwKSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlICY9IDB4MWY7CisJCXJldHVybiAwOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFOgorCQlpZiAoKGN0cmwtPnZhbHVlID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MDgpKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJY3RybC0+dmFsdWUgJj0gMHgwZjsKKwkJcmV0dXJuIDA7CisJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX0RBQ19NQUdOSVRVREU6CisJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgwYykpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKworc3RhdGljIGludCBwYXMyMDJiY2Jfc2V0X3BpeF9mb3JtYXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGl4KQoreworCWludCBlcnIgPSAwOworCisJaWYgKHBpeC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1NOOUMxMFgpCisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjQsIDB4MTcpOworCWVsc2UKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgyMCwgMHgxNyk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgcGFzMjAyYmNiX3NldF9jdHJsKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpCit7CisJaW50IGVyciA9IDA7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwNCwgY3RybC0+dmFsdWUgPj4gNik7CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDUsIGN0cmwtPnZhbHVlICYgMHgzZik7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDksIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0U6CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDcsIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDEwLCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDA4LCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9EQUNfTUFHTklUVURFOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDBjLCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDExLCAweDAxKTsKKworCXJldHVybiBlcnIgPyAtRUlPIDogMDsKK30KKworCitzdGF0aWMgaW50IHBhczIwMmJjYl9zZXRfY3JvcChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9yZWN0KiByZWN0KQoreworCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9ICZwYXMyMDJiY2I7CisJaW50IGVyciA9IDA7CisJdTggaF9zdGFydCA9ICh1OCkocmVjdC0+bGVmdCAtIHMtPmNyb3BjYXAuYm91bmRzLmxlZnQpICsgNCwKKwkgICB2X3N0YXJ0ID0gKHU4KShyZWN0LT50b3AgLSBzLT5jcm9wY2FwLmJvdW5kcy50b3ApICsgMzsKKworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIGhfc3RhcnQsIDB4MTIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIHZfc3RhcnQsIDB4MTMpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIHBhczIwMmJjYiA9IHsKKwkubmFtZSA9ICJQQVMyMDJCQ0IiLAorCS5tYWludGFpbmVyID0gIkNhcmxvcyBFZHVhcmRvIE1lZGFnbGlhIER5b25pc2lvICIKKwkgICAgICAgICAgICAgICI8bWVkYWdsaWFAdW5kbC5vcmcuYnI+IiwKKwkuc3lzZnNfb3BzID0gU045QzEwMl9JMkNfUkVBRCB8IFNOOUMxMDJfSTJDX1dSSVRFLAorCS5mcmVxdWVuY3kgPSBTTjlDMTAyX0kyQ180MDBLSFogfCBTTjlDMTAyX0kyQ18xMDBLSFosCisJLmludGVyZmFjZSA9IFNOOUMxMDJfSTJDXzJXSVJFUywKKwkuaTJjX3NsYXZlX2lkID0gMHg0MCwKKwkuaW5pdCA9ICZwYXMyMDJiY2JfaW5pdCwKKwkucWN0cmwgPSB7CisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0VYUE9TVVJFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiZXhwb3N1cmUiLAorCQkJLm1pbmltdW0gPSAweDAxZTUsCisJCQkubWF4aW11bSA9IDB4M2ZmZiwKKwkJCS5zdGVwID0gMHgwMDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDAxZTUsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9HQUlOLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiZ2xvYmFsIGdhaW4iLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweDFmLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDBjLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gVjRMMl9DSURfUkVEX0JBTEFOQ0UsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJyZWQgYmFsYW5jZSIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4MGYsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDEsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0UsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJibHVlIGJhbGFuY2UiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweDBmLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDA1LAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiZ3JlZW4gYmFsYW5jZSIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4MGYsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDAsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSBTTjlDMTAyX1Y0TDJfQ0lEX0RBQ19NQUdOSVRVREUsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJEQUMgbWFnbml0dWRlIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gMHhmZiwKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwNCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJfSwKKwkuZ2V0X2N0cmwgPSAmcGFzMjAyYmNiX2dldF9jdHJsLAorCS5zZXRfY3RybCA9ICZwYXMyMDJiY2Jfc2V0X2N0cmwsCisJLmNyb3BjYXAgPSB7CisJCS5ib3VuZHMgPSB7CisJCQkubGVmdCA9IDAsCisJCQkudG9wID0gMCwKKwkJCS53aWR0aCA9IDY0MCwKKwkJCS5oZWlnaHQgPSA0ODAsCisJCX0sCisJCS5kZWZyZWN0ID0geworCQkJLmxlZnQgPSAwLAorCQkJLnRvcCA9IDAsCisJCQkud2lkdGggPSA2NDAsCisJCQkuaGVpZ2h0ID0gNDgwLAorCQl9LAorCX0sCisJLnNldF9jcm9wID0gJnBhczIwMmJjYl9zZXRfY3JvcCwKKwkucGl4X2Zvcm1hdCA9IHsKKwkJLndpZHRoID0gNjQwLAorCQkuaGVpZ2h0ID0gNDgwLAorCQkucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfU0JHR1I4LAorCQkucHJpdiA9IDgsCisJfSwKKwkuc2V0X3BpeF9mb3JtYXQgPSAmcGFzMjAyYmNiX3NldF9waXhfZm9ybWF0Cit9OworCisKK2ludCBzbjljMTAyX3Byb2JlX3BhczIwMmJjYihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sgICAgICAgCisJaW50IHIwID0gMCwgcjEgPSAwLCBlcnIgPSAwOworCXVuc2lnbmVkIGludCBwaWQgPSAwOworCisJLyoKKwkgKiAgTWluaW1hbCBpbml0aWFsaXphdGlvbiB0byBlbmFibGUgdGhlIEkyQyBjb21tdW5pY2F0aW9uCisJICogIE5PVEU6IGRvIE5PVCBjaGFuZ2UgdGhlIHZhbHVlcyEKKwkgKi8KKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAxLCAweDAxKTsgLyogc2Vuc29yIHBvd2VyIGRvd24gKi8KKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDQwLCAweDAxKTsgLyogc2Vuc29yIHBvd2VyIG9uICovCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgyOCwgMHgxNyk7IC8qIHNlbnNvciBjbG9jayBhdCAyNCBNSHogKi8KKwlpZiAoZXJyKQorCQlyZXR1cm4gLUVJTzsKKworCXIwID0gc245YzEwMl9pMmNfdHJ5X3JlYWQoY2FtLCAmcGFzMjAyYmNiLCAweDAwKTsKKwlyMSA9IHNuOWMxMDJfaTJjX3RyeV9yZWFkKGNhbSwgJnBhczIwMmJjYiwgMHgwMSk7CisKKwlpZiAocjAgPCAwIHx8IHIxIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlwaWQgPSAocjAgPDwgNCkgfCAoKHIxICYgMHhmMCkgPj4gNCk7CisJaWYgKHBpZCAhPSAweDAxNykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzbjljMTAyX2F0dGFjaF9zZW5zb3IoY2FtLCAmcGFzMjAyYmNiKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9zZW5zb3IuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfc2Vuc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZmNzQ4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfc2Vuc29yLmgKQEAgLTAsMCArMSwzNzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSSBmb3IgaW1hZ2Ugc2Vuc29ycyBjb25uZWN0ZWQgdG8gdGhlIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICoKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1NOOUMxMDJfU0VOU09SX0hfCisjZGVmaW5lIF9TTjlDMTAyX1NFTlNPUl9IXworCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCitzdHJ1Y3Qgc245YzEwMl9kZXZpY2U7CitzdHJ1Y3Qgc245YzEwMl9zZW5zb3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAgIE9WRVJWSUVXLgorICAgVGhpcyBpcyBhIHNtYWxsIGludGVyZmFjZSB0aGF0IGFsbG93cyB5b3UgdG8gYWRkIHN1cHBvcnQgZm9yIGFueSBDQ0QvQ01PUworICAgaW1hZ2Ugc2Vuc29ycyBjb25uZWN0ZWQgdG8gdGhlIFNOOUMxMFggYnJpZGdlcy4gVGhlIGVudGlyZSBBUEkgaXMgZG9jdW1lbnRlZAorICAgYmVsb3cuIEluIHRoZSBtb3N0IGdlbmVyYWwgY2FzZSwgdG8gc3VwcG9ydCBhIHNlbnNvciB0aGVyZSBhcmUgdGhyZWUgc3RlcHMKKyAgIHlvdSBoYXZlIHRvIGZvbGxvdzoKKyAgIDEpIGRlZmluZSB0aGUgbWFpbiAic245YzEwMl9zZW5zb3IiIHN0cnVjdHVyZSBieSBzZXR0aW5nIHRoZSBiYXNpYyBmaWVsZHM7CisgICAyKSB3cml0ZSBhIHByb2JpbmcgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJ5IHRoZSBjb3JlIG1vZHVsZSB3aGVuIHRoZSBVU0IKKyAgICAgIGNhbWVyYSBpcyByZWNvZ25pemVkLCB0aGVuIGFkZCBib3RoIHRoZSBVU0IgaWRzIGFuZCB0aGUgbmFtZSBvZiB0aGF0CisgICAgICBmdW5jdGlvbiB0byB0aGUgdHdvIGNvcnJlc3BvbmRpbmcgdGFibGVzIFNFTlNPUl9UQUJMRSBhbmQgSURfVEFCTEUgKHNlZQorICAgICAgYmVsb3cpOworICAgMykgaW1wbGVtZW50IHRoZSBtZXRob2RzIHRoYXQgeW91IHdhbnQvbmVlZCAoYW5kIGZpbGwgdGhlIHJlc3Qgb2YgdGhlIG1haW4KKyAgICAgIHN0cnVjdHVyZSBhY2NvcmRpbmdseSkuCisgICAic245YzEwMl9wYXMxMDZiLmMiIGlzIGFuIGV4YW1wbGUgb2YgYWxsIHRoaXMgc3R1ZmYuIFJlbWVtYmVyIHRoYXQgeW91IGRvCisgICBOT1QgbmVlZCB0byB0b3VjaCB0aGUgc291cmNlIGNvZGUgb2YgdGhlIGNvcmUgbW9kdWxlIGZvciB0aGUgdGhpbmdzIHRvIHdvcmsKKyAgIHByb3Blcmx5LCB1bmxlc3MgeW91IGZpbmQgYnVncyBvciBmbGF3cyBpbiBpdC4gRmluYWxseSwgZG8gbm90IGZvcmdldCB0bworICAgcmVhZCB0aGUgVjRMMiBBUEkgZm9yIGNvbXBsZXRlbmVzcy4KKyovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAgIFByb2JpbmcgZnVuY3Rpb25zOiBvbiBzdWNjZXNzLCB5b3UgbXVzdCBhdHRhY2ggdGhlIHNlbnNvciB0byB0aGUgY2FtZXJhCisgICBieSBjYWxsaW5nIHNuOWMxMDJfYXR0YWNoX3NlbnNvcigpIHByb3ZpZGVkIGJlbG93LgorICAgVG8gZW5hYmxlIHRoZSBJMkMgY29tbXVuaWNhdGlvbiwgeW91IG1pZ2h0IG5lZWQgdG8gcGVyZm9ybSBhIHJlYWxseSBiYXNpYworICAgaW5pdGlhbGl6YXRpb24gb2YgdGhlIFNOOUMxMFggY2hpcCBieSB1c2luZyB0aGUgd3JpdGUgZnVuY3Rpb24gZGVjbGFyZWQgCisgICBhaGVhZC4KKyAgIEZ1bmN0aW9ucyBtdXN0IHJldHVybiAwIG9uIHN1Y2Nlc3MsIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBvdGhlcndpc2UuCisqLworZXh0ZXJuIGludCBzbjljMTAyX3Byb2JlX2h2NzEzMWQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pOworZXh0ZXJuIGludCBzbjljMTAyX3Byb2JlX21pMDM0MyhzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSk7CitleHRlcm4gaW50IHNuOWMxMDJfcHJvYmVfcGFzMTA2YihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSk7CitleHRlcm4gaW50IHNuOWMxMDJfcHJvYmVfcGFzMjAyYmNiKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKTsKK2V4dGVybiBpbnQgc245YzEwMl9wcm9iZV90YXM1MTEwYzFiKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKTsKK2V4dGVybiBpbnQgc245YzEwMl9wcm9iZV90YXM1MTMwZDFiKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKTsKKworLyoKKyAgIEFkZCB0aGUgYWJvdmUgZW50cmllcyB0byB0aGlzIHRhYmxlLiBCZSBzdXJlIHRvIGFkZCB0aGUgZW50cnkgaW4gdGhlIHJpZ2h0CisgICBwbGFjZSwgc2luY2UsIG9uIGZhaWx1cmUsIHRoZSBuZXh0IHByb2Jpbmcgcm91dGluZSBpcyBjYWxsZWQgYWNjb3JkaW5nIHRvIAorICAgdGhlIG9yZGVyIG9mIHRoZSBsaXN0IGJlbG93LCBmcm9tIHRvcCB0byBib3R0b20uCisqLworI2RlZmluZSBTTjlDMTAyX1NFTlNPUl9UQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGludCAoKnNuOWMxMDJfc2Vuc29yX3RhYmxlW10pKHN0cnVjdCBzbjljMTAyX2RldmljZSopID0geyAgICAgICAgICAgICAgXAorCSZzbjljMTAyX3Byb2JlX21pMDM0MywgLyogc3Ryb25nIGRldGVjdGlvbiBiYXNlZCBvbiBTRU5TT1IgaWRzICovICAgICBcCisJJnNuOWMxMDJfcHJvYmVfcGFzMTA2YiwgLyogc3Ryb25nIGRldGVjdGlvbiBiYXNlZCBvbiBTRU5TT1IgaWRzICovICAgIFwKKwkmc245YzEwMl9wcm9iZV9wYXMyMDJiY2IsIC8qIHN0cm9uZyBkZXRlY3Rpb24gYmFzZWQgb24gU0VOU09SIGlkcyAqLyAgXAorCSZzbjljMTAyX3Byb2JlX2h2NzEzMWQsIC8qIHN0cm9uZyBkZXRlY3Rpb24gYmFzZWQgb24gU0VOU09SIGlkcyAqLyAgICBcCisJJnNuOWMxMDJfcHJvYmVfdGFzNTExMGMxYiwgLyogZGV0ZWN0aW9uIGJhc2VkIG9uIFVTQiBwaWQvdmlkICovICAgICAgIFwKKwkmc245YzEwMl9wcm9iZV90YXM1MTMwZDFiLCAvKiBkZXRlY3Rpb24gYmFzZWQgb24gVVNCIHBpZC92aWQgKi8gICAgICAgXAorCU5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9OworCisvKiBBdHRhY2ggYSBwcm9iZWQgc2Vuc29yIHRvIHRoZSBjYW1lcmEuICovCitleHRlcm4gdm9pZCAKK3NuOWMxMDJfYXR0YWNoX3NlbnNvcihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvcik7CisKKy8qIEVhY2ggU045QzEwWCBjYW1lcmEgaGFzIHByb3BlciBQSUQvVklEIGlkZW50aWZpZXJzLiBBZGQgdGhlbSBoZXJlIGluIGNhc2UuKi8KKyNkZWZpbmUgU045QzEwMl9JRF9UQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzbjljMTAyX2lkX3RhYmxlW10gPSB7ICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDEpLCB9LCAvKiBUQVM1MTEwQzFCICovICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwNSksIH0sIC8qIFRBUzUxMTBDMUIgKi8gICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDA5KSwgfSwgLyogUEFTMTA2QiAqLyAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMGQpLCB9LCAvKiBQQVMxMDZCICovICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyNCksIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI1KSwgfSwgLyogVEFTNTEzMEQxQiBhbmQgVEFTNTExMEMxQiAqLyAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMjgpLCB9LCAvKiBQQVMyMDJCQ0IgKi8gICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyOSksIH0sIC8qIFBBUzEwNkIgKi8gICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJhKSwgfSwgLyogSFY3MTMxRCAqLyAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmIpLCB9LCAvKiBNSS0wMzQzICovICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyYyksIH0sIC8qIE9WNzYyMCAqLyAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDMwKSwgfSwgLyogTUkwM3ggKi8gICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwODApLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjA4MiksIH0sIC8qIE1JMDM0MyBhbmQgTUkwMzYwICovICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDgzKSwgfSwgLyogSFY3MTMxW0R8RTFdICovICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwODgpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjA4YSksIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDhiKSwgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwOGMpLCB9LCAvKiBIVjcxMzF4ICovICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjA4ZSksIH0sIC8qIENJUy1WRjEwICovICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDhmKSwgfSwgLyogT1Y3NjMwICovICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYTApLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhMiksIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGEzKSwgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYTgpLCB9LCAvKiBQQVMxMDZCICovICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhYSksIH0sIC8qIFRBUzUxMzBEMUIgKi8gICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGFiKSwgfSwgLyogVEFTNTExMEMxQiAqLyAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYWMpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhZSksIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGFmKSwgfSwgLyogUEFTMjAyQkNCICovICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYjApLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjBiMiksIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGIzKSwgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYjgpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjBiYSksIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGJiKSwgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYmMpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjBiZSksIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAgIFJlYWQvd3JpdGUgcm91dGluZXM6IHRoZXkgYWx3YXlzIHJldHVybiAtMSBvbiBlcnJvciwgMCBvciB0aGUgcmVhZCB2YWx1ZQorICAgb3RoZXJ3aXNlLiBOT1RFIHRoYXQgYSByZWFsIHJlYWQgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIFNOOUMxMFgKKyAgIGNoaXAgZm9yIHNvbWUgb2YgaXRzIHJlZ2lzdGVycy4gVG8gd29yayBhcm91bmQgdGhpcyBwcm9ibGVtLCBhIHBzZXVkby1yZWFkCisgICBjYWxsIGlzIHByb3ZpZGVkIGluc3RlYWQ6IGl0IHJldHVybnMgdGhlIGxhc3Qgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gdmFsdWUgCisgICBvbiB0aGUgcmVnaXN0ZXIgKDAgaWYgaXQgaGFzIG5ldmVyIGJlZW4gd3JpdHRlbiksIHRoZSB1c3VhbCAtMSBvbiBlcnJvci4KKyovCisKKy8qIFRoZSAidHJ5IiBJMkMgSS9PIHZlcnNpb25zIGFyZSB1c2VkIHdoZW4gcHJvYmluZyB0aGUgc2Vuc29yICovCitleHRlcm4gaW50IHNuOWMxMDJfaTJjX3RyeV93cml0ZShzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqLHN0cnVjdCBzbjljMTAyX3NlbnNvciosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBhZGRyZXNzLCB1OCB2YWx1ZSk7CitleHRlcm4gaW50IHNuOWMxMDJfaTJjX3RyeV9yZWFkKHN0cnVjdCBzbjljMTAyX2RldmljZSosc3RydWN0IHNuOWMxMDJfc2Vuc29yKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggYWRkcmVzcyk7CisKKy8qCisgICBUaGVzZSBtdXN0IGJlIHVzZWQgaWYgYW5kIG9ubHkgaWYgdGhlIHNlbnNvciBkb2Vzbid0IGltcGxlbWVudCB0aGUgc3RhbmRhcmQKKyAgIEkyQyBwcm90b2NvbC4gVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGdvb2QgcmVhc29ucyB3aHkgeW91IG11c3QgdXNlIHRoZSAKKyAgIHNpbmdsZS1ieXRlIHZlcnNpb25zIG9mIHRoZXNlIGZ1bmN0aW9uczogZG8gbm90IGFidXNlLiBUaGUgZmlyc3QgZnVuY3Rpb24KKyAgIHdyaXRlcyBuIGJ5dGVzLCBmcm9tIGRhdGEwIHRvIGRhdGFuLCB0byByZWdpc3RlcnMgMHgwOSAtIDB4MDkrbiBvZiBTTjlDMTBYCisgICBjaGlwLiBUaGUgc2Vjb25kIG9uZSBwcm9ncmFtcyB0aGUgcmVnaXN0ZXJzIDB4MDkgYW5kIDB4MTAgd2l0aCBkYXRhMCBhbmQKKyAgIGRhdGExLCBhbmQgcGxhY2VzIHRoZSBuIGJ5dGVzIHJlYWQgZnJvbSB0aGUgc2Vuc29yIHJlZ2lzdGVyIHRhYmxlIGluIHRoZQorICAgYnVmZmVyIHBvaW50ZWQgYnkgJ2J1ZmZlcicuIEJvdGggdGhlIGZ1bmN0aW9ucyByZXR1cm4gLTEgb24gZXJyb3I7IHRoZSB3cml0ZQorICAgdmVyc2lvbiByZXR1cm5zIDAgb24gc3VjY2Vzcywgd2hpbGUgdGhlIHJlYWQgdmVyc2lvbiByZXR1cm5zIHRoZSBmaXJzdCByZWFkCisgICBieXRlLgorKi8KK2V4dGVybiBpbnQgc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvciwgdTggbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggZGF0YTAsIHU4IGRhdGExLCB1OCBkYXRhMiwgdTggZGF0YTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggZGF0YTQsIHU4IGRhdGE1KTsKK2V4dGVybiBpbnQgc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzZW5zb3IsIHU4IGRhdGEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggZGF0YTEsIHU4IG4sIHU4IGJ1ZmZlcltdKTsKKworLyogVG8gYmUgdXNlZCBhZnRlciB0aGUgc2Vuc29yIHN0cnVjdCBoYXMgYmVlbiBhdHRhY2hlZCB0byB0aGUgY2FtZXJhIHN0cnVjdCAqLworZXh0ZXJuIGludCBzbjljMTAyX2kyY193cml0ZShzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqLCB1OCBhZGRyZXNzLCB1OCB2YWx1ZSk7CitleHRlcm4gaW50IHNuOWMxMDJfaTJjX3JlYWQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiwgdTggYWRkcmVzcyk7CisKKy8qIEkvTyBvbiByZWdpc3RlcnMgaW4gdGhlIGJyaWRnZS4gQ291bGQgYmUgdXNlZCBieSB0aGUgc2Vuc29yIG1ldGhvZHMgdG9vICovCitleHRlcm4gaW50IHNuOWMxMDJfd3JpdGVfcmVnKHN0cnVjdCBzbjljMTAyX2RldmljZSosIHU4IHZhbHVlLCB1MTYgaW5kZXgpOworZXh0ZXJuIGludCBzbjljMTAyX3ByZWFkX3JlZyhzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqLCB1MTYgaW5kZXgpOworCisvKgorICAgTk9URTogdGhlcmUgYXJlIG5vIGV4cG9ydGVkIGRlYnVnZ2luZyBmdW5jdGlvbnMuIFRvIHVuaWZvcm0gdGhlIG91dHB1dCB5b3UKKyAgIG11c3QgdXNlIHRoZSBkZXZfaW5mbygpL2Rldl93YXJuKCkvZGV2X2VycigpIG1hY3JvcyBkZWZpbmVkIGluIGRldmljZS5oLAorICAgYWxyZWFkeSBpbmNsdWRlZCBoZXJlLCB0aGUgYXJndW1lbnQgYmVpbmcgdGhlIHN0cnVjdCBkZXZpY2UgJ2Rldicgb2YgdGhlCisgICBzZW5zb3Igc3RydWN0dXJlLiBEbyBOT1QgdXNlIHRoZXNlIG1hY3JvcyBiZWZvcmUgdGhlIHNlbnNvciBpcyBhdHRhY2hlZCBvcgorICAgdGhlIGtlcm5lbCB3aWxsIGNyYXNoISBIb3dldmVyLCB5b3Ugc2hvdWxkIG5vdCBuZWVkIHRvIG5vdGlmeSB0aGUgdXNlciBhYm91dAorICAgY29tbW9uIGVycm9ycyBvciBvdGhlciBtZXNzYWdlcywgc2luY2UgdGhpcyBpcyBkb25lIGJ5IHRoZSBtYXN0ZXIgbW9kdWxlLgorKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitlbnVtIHNuOWMxMDJfaTJjX3N5c2ZzX29wcyB7CisJU045QzEwMl9JMkNfUkVBRCA9IDB4MDEsCisJU045QzEwMl9JMkNfV1JJVEUgPSAweDAyLAorfTsKKworZW51bSBzbjljMTAyX2kyY19mcmVxdWVuY3kgeyAvKiBzZW5zb3JzIG1heSBzdXBwb3J0IGJvdGggdGhlIGZyZXF1ZW5jaWVzICovCisJU045QzEwMl9JMkNfMTAwS0haID0gMHgwMSwKKwlTTjlDMTAyX0kyQ180MDBLSFogPSAweDAyLAorfTsKKworZW51bSBzbjljMTAyX2kyY19pbnRlcmZhY2UgeworCVNOOUMxMDJfSTJDXzJXSVJFUywKKwlTTjlDMTAyX0kyQ18zV0lSRVMsCit9OworCitzdHJ1Y3Qgc245YzEwMl9zZW5zb3IgeworCWNoYXIgbmFtZVszMl0sIC8qIHNlbnNvciBuYW1lICovCisJICAgICBtYWludGFpbmVyWzY0XTsgLyogbmFtZSBvZiB0aGUgbWFudGFpbmVyIDxlbWFpbD4gKi8KKworCS8qIFN1cHBvcnRlZCBvcGVyYXRpb25zIHRocm91Z2ggdGhlICdzeXNmcycgaW50ZXJmYWNlICovCisJZW51bSBzbjljMTAyX2kyY19zeXNmc19vcHMgc3lzZnNfb3BzOworCisJLyoKKwkgICBUaGVzZSBzZW5zb3IgY2FwYWJpbGl0aWVzIG11c3QgYmUgcHJvdmlkZWQgaWYgdGhlIFNOOUMxMFggY29udHJvbGxlcgorCSAgIG5lZWRzIHRvIGNvbW11bmljYXRlIHRocm91Z2ggdGhlIHNlbnNvciBzZXJpYWwgaW50ZXJmYWNlIGJ5IHVzaW5nCisJICAgYXQgbGVhc3Qgb25lIG9mIHRoZSBpMmMgZnVuY3Rpb25zIGF2YWlsYWJsZS4KKwkqLworCWVudW0gc245YzEwMl9pMmNfZnJlcXVlbmN5IGZyZXF1ZW5jeTsKKwllbnVtIHNuOWMxMDJfaTJjX2ludGVyZmFjZSBpbnRlcmZhY2U7CisKKwkvKgorCSAgIFRoaXMgaWRlbnRpZmllciBtdXN0IGJlIHByb3ZpZGVkIGlmIHRoZSBpbWFnZSBzZW5zb3IgaW1wbGVtZW50cworCSAgIHRoZSBzdGFuZGFyZCBJMkMgcHJvdG9jb2wuCisJKi8KKwl1OCBpMmNfc2xhdmVfaWQ7IC8qIHJlZy4gMHgwOSAqLworCisJLyoKKwkgICBOT1RFOiBXaGVyZSBub3Qgbm90ZWQsbW9zdCBvZiB0aGUgZnVuY3Rpb25zIGJlbG93IGFyZSBub3QgbWFuZGF0b3J5LgorCSAgICAgICAgIFNldCB0byBudWxsIGlmIHlvdSBkbyBub3QgaW1wbGVtZW50IHRoZW0uIElmIGltcGxlbWVudGVkLAorCSAgICAgICAgIHRoZXkgbXVzdCByZXR1cm4gMCBvbiBzdWNjZXNzLCB0aGUgcHJvcGVyIGVycm9yIG90aGVyd2lzZS4KKwkqLworCisJaW50ICgqaW5pdCkoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pOworCS8qCisJICAgVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgc2Vuc29yIGhhcyBiZWVuIGF0dGFjaGVkLiAKKwkgICBJdCBzaG91bGQgYmUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBzZW5zb3Igb25seSwgYnV0IG1heSBhbHNvCisJICAgY29uZmlndXJlIHBhcnQgb2YgdGhlIFNOOUMxMFggY2hpcCBpZiBuZWNlc3NhcnkuIFlvdSBkb24ndCBuZWVkIHRvCisJICAgc2V0dXAgcGljdHVyZSBzZXR0aW5ncyBsaWtlIGJyaWdodG5lc3MsIGNvbnRyYXN0LCBldGMuLiBoZXJlLCBpZgorCSAgIHRoZSBjb3JyaXNwb25kaW5nIGNvbnRyb2xzIGFyZSBpbXBsZW1lbnRlZCAoc2VlIGJlbG93KSwgc2luY2UgCisJICAgdGhleSBhcmUgYWRqdXN0ZWQgaW4gdGhlIGNvcmUgZHJpdmVyIGJ5IGNhbGxpbmcgdGhlIHNldF9jdHJsKCkKKwkgICBtZXRob2QgYWZ0ZXIgaW5pdCgpLCB3aGVyZSB0aGUgYXJndW1lbnRzIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMKKwkgICBzcGVjaWZpZWQgaW4gdGhlIHY0bDJfcXVlcnljdHJsIGxpc3Qgb2Ygc3VwcG9ydGVkIGNvbnRyb2xzOworCSAgIFNhbWUgc3VnZ2VzdGlvbnMgYXBwbHkgZm9yIG90aGVyIHNldHRpbmdzLCBfaWZfIHRoZSBjb3JyZXNwb25kaW5nCisJICAgbWV0aG9kcyBhcmUgcHJlc2VudDsgaWYgbm90LCB0aGUgaW5pdGlhbGl6YXRpb24gbXVzdCBjb25maWd1cmUgdGhlCisJICAgc2Vuc29yIGFjY29yZGluZyB0byB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZXMgYmVsb3cuCisJKi8KKworCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBxY3RybFtWNEwyX0NJRF9MQVNUUDEtVjRMMl9DSURfQkFTRV07CisJLyoKKwkgICBPcHRpb25hbCBsaXN0IG9mIGRlZmF1bHQgY29udHJvbHMsIGRlZmluZWQgYXMgaW5kaWNhdGVkIGluIHRoZSAKKwkgICBWNEwyIEFQSS4gTWVudSB0eXBlIGNvbnRyb2xzIGFyZSBub3QgaGFuZGxlZCBieSB0aGlzIGludGVyZmFjZS4KKwkqLworCisJaW50ICgqZ2V0X2N0cmwpKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKTsKKwlpbnQgKCpzZXRfY3RybCkoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCisJICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpOworCS8qCisJICAgWW91IG11c3QgaW1wbGVtZW50IGF0IGxlYXN0IHRoZSBzZXRfY3RybCBtZXRob2QgaWYgeW91IGhhdmUgZGVmaW5lZAorCSAgIHRoZSBsaXN0IGFib3ZlLiBUaGUgcmV0dXJuZWQgdmFsdWUgbXVzdCBmb2xsb3cgdGhlIFY0TDIKKwkgICBzcGVjaWZpY2F0aW9ucyBmb3IgdGhlIFZJRElPQ19HfENfQ1RSTCBpb2N0bHMuIFY0TDJfQ0lEX0h8VkNFTlRFUgorCSAgIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLCBzbyBkbyBub3QgaW1wbGVtZW50IHRoZW0uIEFsc28sCisJICAgeW91IGRvbid0IGhhdmUgdG8gY2hlY2sgd2hldGhlciB0aGUgcGFzc2VkIHZhbHVlcyBhcmUgb3V0IG9mIGJvdW5kcywKKwkgICBnaXZlbiB0aGF0IHRoaXMgaXMgZG9uZSBieSB0aGUgY29yZSBtb2R1bGUuCisJKi8KKworCXN0cnVjdCB2NGwyX2Nyb3BjYXAgY3JvcGNhcDsKKwkvKgorCSAgIFRoaW5rIHRoZSBpbWFnZSBzZW5zb3IgYXMgYSBncmlkIG9mIFIsRyxCIG1vbm9jaHJvbWF0aWMgcGl4ZWxzCisJICAgZGlzcG9zZWQgYWNjb3JkaW5nIHRvIGEgcGFydGljdWxhciBCYXllciBwYXR0ZXJuLCB3aGljaCBkZXNjcmliZXMKKwkgICB0aGUgY29tcGxldGUgYXJyYXkgb2YgcGl4ZWxzLCBmcm9tICgwLDApIHRvICh4bWF4LCB5bWF4KS4gV2Ugd2lsbAorCSAgIHVzZSB0aGlzIGNvb3JkaW5hdGUgc3lzdGVtIGZyb20gbm93IG9uLiBJdCBpcyBhc3N1bWVkIHRoZSBzZW5zb3IKKwkgICBjaGlwIGNhbiBiZSBwcm9ncmFtbWVkIHRvIGNhcHR1cmUvdHJhbnNtaXQgYSBzdWJzZWN0aW9uIG9mIHRoYXQKKwkgICBhcnJheSBvZiBwaXhlbHM6IHdlIHdpbGwgY2FsbCB0aGlzIHN1YnNlY3Rpb24gImFjdGl2ZSB3aW5kb3ciLgorCSAgIEl0IGlzIG5vdCBhbHdheXMgdHJ1ZSB0aGF0IHRoZSBsYXJnZXN0IGFjaGlldmFibGUgYWN0aXZlIHdpbmRvdyBjYW4KKwkgICBjb3ZlciB0aGUgd2hvbGUgYXJyYXkgb2YgcGl4ZWxzLiBUaGUgVjRMMiBBUEkgZGVmaW5lcyBhbm90aGVyCisJICAgYXJlYSBjYWxsZWQgInNvdXJjZSByZWN0YW5nbGUiLCB3aGljaCwgaW4gdHVybiwgaXMgYSBzdWJyZWN0YW5nbGUgb2YKKwkgICB0aGUgYWN0aXZlIHdpbmRvdy4gVGhlIFNOOUMxMFggY2hpcCBpcyBhbHdheXMgcHJvZ3JhbW1lZCB0byByZWFkIHRoZQorCSAgIHNvdXJjZSByZWN0YW5nbGUuCisJICAgVGhlIGJvdW5kcyBvZiBib3RoIHRoZSBhY3RpdmUgd2luZG93IGFuZCB0aGUgc291cmNlIHJlY3RhbmdsZSBhcmUKKwkgICBzcGVjaWZpZWQgaW4gdGhlIGNyb3BjYXAgc3Vic3RydWN0dXJlcyAnYm91bmRzJyBhbmQgJ2RlZnJlY3QnLgorCSAgIEJ5IGRlZmF1bHQsIHRoZSBzb3VyY2UgcmVjdGFuZ2xlIHNob3VsZCBjb3ZlciB0aGUgbGFyZ2VzdCBwb3NzaWJsZQorCSAgIGFyZWEuIEFnYWluLCBpdCBpcyBub3QgYWx3YXlzIHRydWUgdGhhdCB0aGUgbGFyZ2VzdCBzb3VyY2UgcmVjdGFuZ2xlCisJICAgY2FuIGNvdmVyIHRoZSBlbnRpcmUgYWN0aXZlIHdpbmRvdywgYWx0aG91Z2ggaXQgaXMgYSByYXJlIGNhc2UgZm9yIAorCSAgIHRoZSBoYXJkd2FyZSB3ZSBoYXZlLiBUaGUgYm91bmRzIG9mIHRoZSBzb3VyY2UgcmVjdGFuZ2xlIF9tdXN0XyBiZQorCSAgIG11bHRpcGxlIG9mIDE2IGFuZCBtdXN0IHVzZSB0aGUgc2FtZSBjb29yZGluYXRlIHN5c3RlbSBhcyBpbmRpY2F0ZWQKKwkgICBiZWZvcmU7IHRoZWlyIGNlbnRlcnMgc2hhbGwgYWxpZ24gaW5pdGlhbGx5LgorCSAgIElmIG5lY2Vzc2FyeSwgdGhlIHNlbnNvciBjaGlwIG11c3QgYmUgaW5pdGlhbGl6ZWQgZHVyaW5nIGluaXQoKSB0bworCSAgIHNldCB0aGUgYm91bmRzIG9mIHRoZSBhY3RpdmUgc2Vuc29yIHdpbmRvdzsgaG93ZXZlciwgYnkgZGVmYXVsdCwgaXQKKwkgICB1c3VhbGx5IGNvdmVycyB0aGUgbGFyZ2VzdCBhY2hpZXZhYmxlIGFyZWEgKG1heHdpZHRoIHggbWF4aGVpZ2h0KQorCSAgIG9mIHBpeGVscywgc28gbm8gcGFydGljdWxhciBpbml0aWFsaXphdGlvbiBpcyBuZWVkZWQsIGlmIHlvdSBoYXZlCisJICAgZGVmaW5lZCB0aGUgY29ycmVjdCBkZWZhdWx0IGJvdW5kcyBpbiB0aGUgc3RydWN0dXJlcy4KKwkgICBTZWUgdGhlIFY0TDIgQVBJIGZvciBmdXJ0aGVyIGRldGFpbHMuCisJICAgTk9URTogb25jZSB5b3UgaGF2ZSBkZWZpbmVkIHRoZSBib3VuZHMgb2YgdGhlIGFjdGl2ZSB3aW5kb3cKKwkgICAgICAgICAoc3RydWN0IGNyb3BjYXAuYm91bmRzKSB5b3UgbXVzdCBub3QgY2hhbmdlIHRoZW0uYW55bW9yZS4KKwkgICBPbmx5ICdib3VuZHMnIGFuZCAnZGVmcmVjdCcgZmllbGRzIGFyZSBtYW5kYXRvcnksIG90aGVyIGZpZWxkcworCSAgIHdpbGwgYmUgaWdub3JlZC4KKwkqLworCisJaW50ICgqc2V0X2Nyb3ApKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorCSAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9yZWN0KiByZWN0KTsKKwkvKgorCSAgIFRvIGJlIGNhbGxlZCBvbiBWSURJT0NfQ19TRVRDUk9QLiBUaGUgY29yZSBtb2R1bGUgYWx3YXlzIGNhbGxzIGEKKwkgICBkZWZhdWx0IHJvdXRpbmUgd2hpY2ggY29uZmlndXJlcyB0aGUgYXBwcm9wcmlhdGUgU045QzEwWCByZWdzIChhbHNvCisJICAgc2NhbGluZyksIGJ1dCB5b3UgbWF5IG5lZWQgdG8gb3ZlcnJpZGUvYWRqdXN0IHNwZWNpZmljIHN0dWZmLgorCSAgICdyZWN0JyBjb250YWlucyB3aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyB0aGF0IGFyZSBtdWx0aXBsZSBvZiAxNjogaW4KKwkgICBjYXNlIHlvdSBvdmVycmlkZSB0aGUgZGVmYXVsdCBmdW5jdGlvbiwgeW91IGFsd2F5cyBoYXZlIHRvIHByb2dyYW0KKwkgICB0aGUgY2hpcCB0byBtYXRjaCB0aG9zZSB2YWx1ZXM7IG9uIGVycm9yIHJldHVybiB0aGUgY29ycmVzcG9uZGluZworCSAgIGVycm9yIGNvZGUgd2l0aG91dCByb2xsaW5nIGJhY2suCisJICAgTk9URTogaW4gY2FzZSwgeW91IG11c3QgcHJvZ3JhbSB0aGUgU045QzEwWCBjaGlwIHRvIGdldCByaWQgb2YgCisJICAgICAgICAgYmxhbmsgcGl4ZWxzIG9yIGJsYW5rIGxpbmVzIGF0IHRoZSBfc3RhcnRfIG9mIGVhY2ggbGluZSBvcgorCSAgICAgICAgIGZyYW1lIGFmdGVyIGVhY2ggSFNZTkMgb3IgVlNZTkMsIHNvIHRoYXQgdGhlIGltYWdlIHN0YXJ0cyB3aXRoCisJICAgICAgICAgcmVhbCBSR0IgZGF0YSAoc2VlIHJlZ3MgMHgxMiwgMHgxMykgKGhhdmluZyBzZXQgSF9TSVpFIGFuZCwKKwkgICAgICAgICBWX1NJWkUgeW91IGRvbid0IGhhdmUgdG8gY2FyZSBhYm91dCBibGFuayBwaXhlbHMgb3IgYmxhbmsKKwkgICAgICAgICBsaW5lcyBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZSBvciBmcmFtZSkuCisJKi8KKworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgcGl4X2Zvcm1hdDsKKwkvKgorCSAgIFdoYXQgeW91IGhhdmUgdG8gZGVmaW5lIGhlcmUgYXJlOiAxKSBpbml0aWFsICd3aWR0aCcgYW5kICdoZWlnaHQnIG9mCisJICAgdGhlIHRhcmdldCByZWN0YW5nbGUgMikgdGhlIGluaXRpYWwgJ3BpeGVsZm9ybWF0Jywgd2hpY2ggY2FuIGJlCisJICAgZWl0aGVyIFY0TDJfUElYX0ZNVF9TTjlDMTBYIChmb3IgY29tcHJlc3NlZCB2aWRlbykgb3IKKwkgICBWNEwyX1BJWF9GTVRfU0JHR1I4IDMpICdwcml2Jywgd2hpY2ggd2UnbGwgYmUgdXNlZCB0byBpbmRpY2F0ZSB0aGUKKwkgICBudW1iZXIgb2YgYml0cyBwZXIgcGl4ZWwgZm9yIHVuY29tcHJlc3NlZCB2aWRlbywgOCBvciA5IChkZXNwaXRlIHRoZQorCSAgIGN1cnJlbnQgdmFsdWUgb2YgJ3BpeGVsZm9ybWF0JykuCisJICAgTk9URSAxOiBib3RoICd3aWR0aCcgYW5kICdoZWlnaHQnIF9tdXN0XyBiZSBlaXRoZXIgMS8xIG9yIDEvMiBvciAxLzQKKwkgICAgICAgICAgIG9mIGNyb3BjYXAuZGVmcmVjdC53aWR0aCBhbmQgY3JvcGNhcC5kZWZyZWN0LmhlaWdodC4gSQorCSAgICAgICAgICAgc3VnZ2VzdCAxLzEuCisJICAgTk9URSAyOiBUaGUgaW5pdGlhbCBjb21wcmVzc2lvbiBxdWFsaXR5IGlzIGRlZmluZWQgYnkgdGhlIGZpcnN0IGJpdAorCSAgICAgICAgICAgb2YgcmVnIDB4MTcgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaW1hZ2Ugc2Vuc29yLgorCSAgIE5PVEUgMzogYXMgc2FpZCBhYm92ZSwgeW91IGhhdmUgdG8gcHJvZ3JhbSB0aGUgU045QzEwWCBjaGlwIHRvIGdldAorCSAgICAgICAgICAgcmlkIG9mIGFueSBibGFuayBwaXhlbHMsIHNvIHRoYXQgdGhlIG91dHB1dCBvZiB0aGUgc2Vuc29yCisJICAgICAgICAgICBtYXRjaGVzIHRoZSBSR0IgYmF5ZXIgc2VxdWVuY2UgKGkuZS4gQkdCR0JHLi4uR1JHUkdSKS4KKwkqLworCisJaW50ICgqc2V0X3BpeF9mb3JtYXQpKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorCSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwaXgpOworCS8qCisJICAgVG8gYmUgY2FsbGVkIG9uIFZJRElPQ19TX0ZNVCwgd2hlbiBzd2l0Y2hpbmcgZnJvbSB0aGUgU0JHR1I4IHRvCisJICAgU045QzEwWCBwaXhlbCBmb3JtYXQgb3IgdmljZXZlcnNhLiBPbiBlcnJvciByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcKKwkgICBlcnJvciBjb2RlIHdpdGhvdXQgcm9sbGluZyBiYWNrLgorCSovCisKKwljb25zdCBzdHJ1Y3QgZGV2aWNlKiBkZXY7CisJLyoKKwkgICBUaGlzIGlzIHRoZSBhcmd1bWVudCBmb3IgZGV2X2VycigpLCBkZXZfaW5mbygpIGFuZCBkZXZfd2FybigpLiBJdAorCSAgIGlzIHVzZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gWW91IG11c3Qgbm90IGFjY2VzcyB0aGUgc3RydWN0CisJICAgYmVmb3JlIHRoZSBzZW5zb3IgaXMgYXR0YWNoZWQuCisJKi8KKworCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlKiB1c2JkZXY7CisJLyoKKwkgICBQb2ludHMgdG8gdGhlIHVzYl9kZXZpY2Ugc3RydWN0IGFmdGVyIHRoZSBzZW5zb3IgaXMgYXR0YWNoZWQuCisJICAgRG8gbm90IHRvdWNoIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisJKi8KKworCS8qCisJICAgRG8gTk9UIHdyaXRlIHRvIHRoZSBkYXRhIGJlbG93LCBpdCdzIFJFQUQgT05MWS4gSXQgaXMgdXNlZCBieSB0aGUKKwkgICBjb3JlIG1vZHVsZSB0byBzdG9yZSBzdWNjZXNzZnVsbHkgdXBkYXRlZCB2YWx1ZXMgb2YgdGhlIGFib3ZlCisJICAgc2V0dGluZ3MsIGZvciByb2xsYmFja3MuLmV0Yy4uaW4gY2FzZSBvZiBlcnJvcnMgZHVyaW5nIGF0b21pYyBJL08KKwkqLworCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBfcWN0cmxbVjRMMl9DSURfTEFTVFAxLVY0TDJfQ0lEX0JBU0VdOworCXN0cnVjdCB2NGwyX3JlY3QgX3JlY3Q7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFByaXZhdGUgaW9jdGwncyBmb3IgY29udHJvbCBzZXR0aW5ncyBzdXBwb3J0ZWQgYnkgc29tZSBpbWFnZSBzZW5zb3JzICovCisjZGVmaW5lIFNOOUMxMDJfVjRMMl9DSURfREFDX01BR05JVFVERSBWNEwyX0NJRF9QUklWQVRFX0JBU0UKKyNkZWZpbmUgU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDEKKyNkZWZpbmUgU045QzEwMl9WNEwyX0NJRF9SRVNFVF9MRVZFTCBWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAyCisjZGVmaW5lIFNOOUMxMDJfVjRMMl9DSURfUElYRUxfQklBU19WT0xUQUdFIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDMKKworI2VuZGlmIC8qIF9TTjlDMTAyX1NFTlNPUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl90YXM1MTEwYzFiLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX3RhczUxMTBjMWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTBkNjIxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl90YXM1MTEwYzFiLmMKQEAgLTAsMCArMSwxNzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBsdWctaW4gZm9yIFRBUzUxMTBDMUIgaW1hZ2Ugc2Vuc29yIGNvbm5lY3RlZCB0byB0aGUgU045QzEweCBQQyBDYW1lcmEgICoKKyAqIENvbnRyb2xsZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICoKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzbjljMTAyX3NlbnNvci5oIgorCisKK3N0YXRpYyBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IgdGFzNTExMGMxYjsKKworc3RhdGljIHN0cnVjdCB2NGwyX2NvbnRyb2wgdGFzNTExMGMxYl9nYWluOworCisKK3N0YXRpYyBpbnQgdGFzNTExMGMxYl9pbml0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQoreworCWludCBlcnIgPSAwOworCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMSwgMHgwMSk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHg0NCwgMHgwMSk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMCwgMHgxMCk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMCwgMHgxMSk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwYSwgMHgxNCk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHg2MCwgMHgxNyk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwNiwgMHgxOCk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHhmYiwgMHgxOSk7CisKKwllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweGMwLCAweDgwKTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCB0YXM1MTEwYzFiX2dldF9jdHJsKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKQoreworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJCWN0cmwtPnZhbHVlID0gdGFzNTExMGMxYl9nYWluLnZhbHVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHRhczUxMTBjMWJfc2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpCit7CisJaW50IGVyciA9IDA7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCQlpZiAoIShlcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDIwLCAweGY2IC0gY3RybC0+dmFsdWUpKSkKKwkJCXRhczUxMTBjMWJfZ2Fpbi52YWx1ZSA9IGN0cmwtPnZhbHVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gZXJyID8gLUVJTyA6IDA7Cit9CisKKworc3RhdGljIGludCB0YXM1MTEwYzFiX3NldF9jcm9wKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9yZWN0KiByZWN0KQoreworCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9ICZ0YXM1MTEwYzFiOworCWludCBlcnIgPSAwOworCXU4IGhfc3RhcnQgPSAodTgpKHJlY3QtPmxlZnQgLSBzLT5jcm9wY2FwLmJvdW5kcy5sZWZ0KSArIDY5LAorCSAgIHZfc3RhcnQgPSAodTgpKHJlY3QtPnRvcCAtIHMtPmNyb3BjYXAuYm91bmRzLnRvcCkgKyA5OworCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgaF9zdGFydCwgMHgxMik7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgdl9zdGFydCwgMHgxMyk7CisKKwkvKiBEb24ndCBjaGFuZ2UgISAqLworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MTQsIDB4MWEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MGEsIDB4MWIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIHNuOWMxMDJfcHJlYWRfcmVnKGNhbSwgMHgxOSksIDB4MTkpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IHRhczUxMTBjMWJfc2V0X3BpeF9mb3JtYXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHBpeCkKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmIChwaXgtPnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9TTjlDMTBYKQorCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDJiLCAweDE5KTsKKwllbHNlCisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4ZmIsIDB4MTkpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIHRhczUxMTBjMWIgPSB7CisJLm5hbWUgPSAiVEFTNTExMEMxQiIsCisJLm1haW50YWluZXIgPSAiTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiIsCisJLnN5c2ZzX29wcyA9IFNOOUMxMDJfSTJDX1dSSVRFLAorCS5mcmVxdWVuY3kgPSBTTjlDMTAyX0kyQ18xMDBLSFosCisJLmludGVyZmFjZSA9IFNOOUMxMDJfSTJDXzNXSVJFUywKKwkuaW5pdCA9ICZ0YXM1MTEwYzFiX2luaXQsCisJLnFjdHJsID0geworCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9HQUlOLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiZ2xvYmFsIGdhaW4iLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweGY2LAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDQwLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwl9LAorCS5zZXRfY3RybCA9ICZ0YXM1MTEwYzFiX3NldF9jdHJsLAorCS5jcm9wY2FwID0geworCQkuYm91bmRzID0geworCQkJLmxlZnQgPSAwLAorCQkJLnRvcCA9IDAsCisJCQkud2lkdGggPSAzNTIsCisJCQkuaGVpZ2h0ID0gMjg4LAorCQl9LAorCQkuZGVmcmVjdCA9IHsKKwkJCS5sZWZ0ID0gMCwKKwkJCS50b3AgPSAwLAorCQkJLndpZHRoID0gMzUyLAorCQkJLmhlaWdodCA9IDI4OCwKKwkJfSwKKwl9LAorCS5nZXRfY3RybCA9ICZ0YXM1MTEwYzFiX2dldF9jdHJsLAorCS5zZXRfY3JvcCA9ICZ0YXM1MTEwYzFiX3NldF9jcm9wLAorCS5waXhfZm9ybWF0ID0geworCQkud2lkdGggPSAzNTIsCisJCS5oZWlnaHQgPSAyODgsCisJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjgsCisJCS5wcml2ID0gOCwKKwl9LAorCS5zZXRfcGl4X2Zvcm1hdCA9ICZ0YXM1MTEwYzFiX3NldF9waXhfZm9ybWF0Cit9OworCisKK2ludCBzbjljMTAyX3Byb2JlX3RhczUxMTBjMWIoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCit7CisJLyogVGhpcyBzZW5zb3IgaGFzIG5vIGlkZW50aWZpZXJzLCBzbyBsZXQncyBhdHRhY2ggaXQgYW55d2F5ICovCisJc245YzEwMl9hdHRhY2hfc2Vuc29yKGNhbSwgJnRhczUxMTBjMWIpOworCisJLyogU2Vuc29yIGRldGVjdGlvbiBpcyBiYXNlZCBvbiBVU0IgcGlkL3ZpZCAqLworCWlmIChsZTE2X3RvX2NwdSh0YXM1MTEwYzFiLnVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IDB4NjAwMSAmJgorCSAgICBsZTE2X3RvX2NwdSh0YXM1MTEwYzFiLnVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IDB4NjAwNSAmJgorCSAgICBsZTE2X3RvX2NwdSh0YXM1MTEwYzFiLnVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IDB4NjBhYikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfdGFzNTEzMGQxYi5jIGIvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl90YXM1MTMwZDFiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM3OGU5NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfdGFzNTEzMGQxYi5jCkBAIC0wLDAgKzEsMTg4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQbHVnLWluIGZvciBUQVM1MTMwRDFCIGltYWdlIHNlbnNvciBjb25uZWN0ZWQgdG8gdGhlIFNOOUMxMHggUEMgQ2FtZXJhICAqCisgKiBDb250cm9sbGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICAgICAgICAgICAqCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic245YzEwMl9zZW5zb3IuaCIKKworCitzdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIHRhczUxMzBkMWI7CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9jb250cm9sIHRhczUxMzBkMWJfZ2FpbiwgdGFzNTEzMGQxYl9leHBvc3VyZTsKKworCitzdGF0aWMgaW50IHRhczUxMzBkMWJfaW5pdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4MDEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjAsIDB4MTcpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDQsIDB4MDEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4MTApOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NjAsIDB4MTcpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDcsIDB4MTgpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IHRhczUxMzBkMWJfZ2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpCit7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJY3RybC0+dmFsdWUgPSB0YXM1MTMwZDFiX2dhaW4udmFsdWU7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CisJCWN0cmwtPnZhbHVlID0gdGFzNTEzMGQxYl9leHBvc3VyZS52YWx1ZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB0YXM1MTMwZDFiX3NldF9jdHJsKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKQoreworCWludCBlcnIgPSAwOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJaWYgKCEoZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyMCwgMHhmNiAtIGN0cmwtPnZhbHVlKSkpCisJCQl0YXM1MTMwZDFiX2dhaW4udmFsdWUgPSBjdHJsLT52YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKKwkJaWYgKCEoZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg0MCwgMHg0NyAtIGN0cmwtPnZhbHVlKSkpCisJCQl0YXM1MTMwZDFiX2V4cG9zdXJlLnZhbHVlID0gY3RybC0+dmFsdWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBlcnIgPyAtRUlPIDogMDsKK30KKworCitzdGF0aWMgaW50IHRhczUxMzBkMWJfc2V0X2Nyb3Aoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3JlY3QqIHJlY3QpCit7CisJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gJnRhczUxMzBkMWI7CisJdTggaF9zdGFydCA9ICh1OCkocmVjdC0+bGVmdCAtIHMtPmNyb3BjYXAuYm91bmRzLmxlZnQpICsgMTA0LAorCSAgIHZfc3RhcnQgPSAodTgpKHJlY3QtPnRvcCAtIHMtPmNyb3BjYXAuYm91bmRzLnRvcCkgKyAxMjsKKwlpbnQgZXJyID0gMDsKKworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIGhfc3RhcnQsIDB4MTIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIHZfc3RhcnQsIDB4MTMpOworCisJLyogRG8gTk9UIGNoYW5nZSEgKi8KKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDFmLCAweDFhKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDFhLCAweDFiKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCBzbjljMTAyX3ByZWFkX3JlZyhjYW0sIDB4MTkpLCAweDE5KTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCB0YXM1MTMwZDFiX3NldF9waXhfZm9ybWF0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwaXgpCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAocGl4LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU045QzEwWCkKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHg2MywgMHgxOSk7CisJZWxzZQorCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweGYzLCAweDE5KTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIHN0cnVjdCBzbjljMTAyX3NlbnNvciB0YXM1MTMwZDFiID0geworCS5uYW1lID0gIlRBUzUxMzBEMUIiLAorCS5tYWludGFpbmVyID0gIkx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4iLAorCS5zeXNmc19vcHMgPSBTTjlDMTAyX0kyQ19XUklURSwKKwkuZnJlcXVlbmN5ID0gU045QzEwMl9JMkNfMTAwS0haLAorCS5pbnRlcmZhY2UgPSBTTjlDMTAyX0kyQ18zV0lSRVMsCisJLmluaXQgPSAmdGFzNTEzMGQxYl9pbml0LAorCS5xY3RybCA9IHsKKwkJeworCQkJLmlkID0gVjRMMl9DSURfR0FJTiwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gImdsb2JhbCBnYWluIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gMHhmNiwKKwkJCS5zdGVwID0gMHgwMiwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwMCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0VYUE9TVVJFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiZXhwb3N1cmUiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweDQ3LAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDAwLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwl9LAorCS5nZXRfY3RybCA9ICZ0YXM1MTMwZDFiX2dldF9jdHJsLAorCS5zZXRfY3RybCA9ICZ0YXM1MTMwZDFiX3NldF9jdHJsLAorCS5jcm9wY2FwID0geworCQkuYm91bmRzID0geworCQkJLmxlZnQgPSAwLAorCQkJLnRvcCA9IDAsCisJCQkud2lkdGggPSA2NDAsCisJCQkuaGVpZ2h0ID0gNDgwLAorCQl9LAorCQkuZGVmcmVjdCA9IHsKKwkJCS5sZWZ0ID0gMCwKKwkJCS50b3AgPSAwLAorCQkJLndpZHRoID0gNjQwLAorCQkJLmhlaWdodCA9IDQ4MCwKKwkJfSwKKwl9LAorCS5zZXRfY3JvcCA9ICZ0YXM1MTMwZDFiX3NldF9jcm9wLAorCS5waXhfZm9ybWF0ID0geworCQkud2lkdGggPSA2NDAsCisJCS5oZWlnaHQgPSA0ODAsCisJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjgsCisJCS5wcml2ID0gOCwKKwl9LAorCS5zZXRfcGl4X2Zvcm1hdCA9ICZ0YXM1MTMwZDFiX3NldF9waXhfZm9ybWF0Cit9OworCisKK2ludCBzbjljMTAyX3Byb2JlX3RhczUxMzBkMWIoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCit7CisJLyogVGhpcyBzZW5zb3IgaGFzIG5vIGlkZW50aWZpZXJzLCBzbyBsZXQncyBhdHRhY2ggaXQgYW55d2F5ICovCisJc245YzEwMl9hdHRhY2hfc2Vuc29yKGNhbSwgJnRhczUxMzBkMWIpOworCisJLyogU2Vuc29yIGRldGVjdGlvbiBpcyBiYXNlZCBvbiBVU0IgcGlkL3ZpZCAqLworCWlmIChsZTE2X3RvX2NwdSh0YXM1MTMwZDFiLnVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IDB4NjAyNSAmJgorCSAgICBsZTE2X3RvX2NwdSh0YXM1MTMwZDFiLnVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IDB4NjBhYSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3N0djY4MC5jIGIvZHJpdmVycy91c2IvbWVkaWEvc3R2NjgwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0NTVjOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3N0djY4MC5jCkBAIC0wLDAgKzEsMTUwNiBAQAorLyoKKyAqICBTVFYwNjgwIFVTQiBDYW1lcmEgRHJpdmVyLCBieSBLZXZpbiBTaXNzb24gKGtqc2lzc29uQGJlbGxzb3V0aC5uZXQpCisgKiAgCisgKiBUaGFua3MgdG8gU1RNaWNyb2VsZWN0cm9uaWNzIGZvciBpbmZvcm1hdGlvbiBvbiB0aGUgdXNiIGNvbW1hbmRzLCBhbmQgCisgKiB0byBTdGV2ZSBNaWxsZXIgYXQgU1RNIGZvciBoaXMgaGVscCBhbmQgZW5jb3VyYWdlbWVudCB3aGlsZSBJIHdhcyAKKyAqIHdyaXRpbmcgdGhpcyBkcml2ZXIuCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgaGVhdmlseSBvbiB0aGUgCisgKiBFbmRwb2ludHMgKGZvcm1lcmx5IGtub3duIGFzIEFPWCkgc2U0MDEgVVNCIENhbWVyYSBEcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwMCBKZXJvZW4gQi4gVnJlZWtlbiAocGUxcnhxQGFtc2F0Lm9yZykKKyAqCisgKiBTdGlsbCBzb21ld2hhdCBiYXNlZCBvbiB0aGUgTGludXggb3Y1MTEgZHJpdmVyLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiBIaXN0b3J5OiAKKyAqIHZlciAwLjEgT2N0b2JlciwgMjAwMS4gSW5pdGlhbCBhdHRlbXB0LiAKKyAqCisgKiB2ZXIgMC4yIE5vdmVtYmVyLCAyMDAxLiBGaXhlZCBhc2JpbGl0eSB0byByZXNpemUsIGFkZGVkIGJyaWdodG5lc3MKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLCBtYWRlIG1vcmUgc3RhYmxlICg/KQorICoKKyAqIHZlciAwLjIxIE5vdiwgMjAwMS4gICAgIEFkZGVkIGdhbW1hIGNvcnJlY3Rpb24gYW5kIHdoaXRlIGJhbGFuY2UsIAorICogICAgICAgICAgICAgICAgICAgICAgICAgZHVlIHRvIEFsZXhhbmRlciBTY2h3YXJ0ei4gU3RpbGwgdHJ5aW5nIHRvIAorICogICAgICAgICAgICAgICAgICAgICAgICAgaW1wcm92ZSBzdGFibGlsaXR5LiBNb3ZlZCBzdHVmZiBpbnRvIHN0djY4MC5oCisgKgorICogdmVyIDAuMjIgTm92LCAyMDAxLgkgICBBZGRlZCBzaGFycGVuIGZ1bmN0aW9uIChieSBNaWNoYWVsIFN3ZWV0LCAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIG1pa2VAZWFzeXN3LmNvbSkgZnJvbSBHSU1QLCBhbHNvIHVzZWQgaW4gcGVuY2FtLiAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIFNpbXBsZSwgZmFzdCwgZ29vZCBpbnRlZ2VyIG1hdGggcm91dGluZS4KKyAqCisgKiB2ZXIgMC4yMyBEZWMsIDIwMDEgKGdraCkKKyAqIAkJCSAgIFRvb2sgb3V0IHNoYXJwZW4gZnVuY3Rpb24sIHJhbiBjb2RlIHRocm91Z2gKKyAqIAkJCSAgIExpbmRlbnQsIGFuZCBkaWQgb3RoZXIgbWlub3IgdHdlYWtzIHRvIGdldAorICogCQkJICAgdGhpbmdzIHRvIHdvcmsgcHJvcGVybHkgd2l0aCAyLjUuMQorICoKKyAqIHZlciAwLjI0IEphbiwgMjAwMiAoa2pzKSAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkIHRoZSBwcm9ibGVtIHdpdGggd2ViY2FtIGNyYXNoaW5nIGFmdGVyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICB0d28gcGljdHVyZXMuIENoYW5nZWQgdGhlIHdheSBwaWMgaXMgaGFsdmVkIHRvIAorICogICAgICAgICAgICAgICAgICAgICAgICAgaW1wcm92ZSBxdWFsaXR5LiBHb3QgcmlkIG9mIGdyZWVuIGxpbmUgYXJvdW5kIAorICogICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuIEZpeCBicmlnaHRuZXNzIHJlc2V0IHdoZW4gY2hhbmdpbmcgc2l6ZSAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zy4gQWRqdXN0ZWQgZ2FtbWEgZmlsdGVycyBzbGlnaHRseS4KKyAqCisgKiB2ZXIgMC4yNSBKYW4sIDIwMDIgKGtqcykKKyAqCQkJICAgRml4ZWQgYSBidWcgaW4gd2hpY2ggdGhlIGRyaXZlciBzb21ldGltZXMgYXR0ZW1wdGVkCisgKgkJCSAgIHRvIHNldCB0byBhIG5vbi1zdXBwb3J0ZWQgc2l6ZS4gVGhpcyBhbGxvd2VkCisgKgkJCSAgIGdub21lbWVldGluZyB0byB3b3JrLgorICoJCQkgICBGaXhlZCBwcm9jIGVudHJ5IHJlbW92YWwgYnVnLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSAic3R2NjgwLmgiCisKK3N0YXRpYyBpbnQgdmlkZW9fbnIgPSAtMTsKK3N0YXRpYyBpbnQgc3dhcFJHQiA9IDA7ICAgLyogZGVmYXVsdCBmb3IgYXV0byBzbGVlY3QgKi8KK3N0YXRpYyBpbnQgc3dhcFJHQl9vbiA9IDA7IC8qIGRlZmF1bHQgdG8gYWxsb3cgYXV0byBzZWxlY3Q7IC0xPXN3YXAgbmV2ZXIsICsxPSBzd2FwIGFsd2F5cyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IGRlYnVnID0gMDsKKworI2RlZmluZSBQREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAorCWRvIHsgXAorCWlmIChkZWJ1ZyA+PSBsZXZlbCkJXAorCQlpbmZvKCJbJXM6JWRdICIgZm10LCBfX0ZVTkNUSU9OX18sIF9fTElORV9fICwgIyMgYXJncyk7CVwKKwl9IHdoaWxlICgwKQorCisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjI1IgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJLZXZpbiBTaXNzb24gPGtqc2lzc29uQGJlbGxzb3V0aC5uZXQ+IgorI2RlZmluZSBEUklWRVJfREVTQyAiU1RWMDY4MCBVU0IgQ2FtZXJhIERyaXZlciIKKworTU9EVUxFX0FVVEhPUiAoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04gKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFICgiR1BMIik7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyAoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOworbW9kdWxlX3BhcmFtKHN3YXBSR0Jfb24sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDIChzd2FwUkdCX29uLCAiUmVkL2JsdWUgc3dhcDogMT1hbHdheXMsIDA9YXV0bywgLTE9bmV2ZXIiKTsKK21vZHVsZV9wYXJhbSh2aWRlb19uciwgaW50LCAwKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTWVtb3J5IG1hbmFnZW1lbnQKKyAqCisgKiBUaGlzIGlzIGEgc2hhbWVsZXNzIGNvcHkgZnJvbSB0aGUgVVNCLWNwaWEgZHJpdmVyIChsaW51eCBrZXJuZWwKKyAqIHZlcnNpb24gMi4zLjI5IG9yIHNvLCBJIGhhdmUgbm8gaWRlYSB3aGF0IHRoaXMgY29kZSBhY3R1YWxseSBkb2VzIDspLgorICogQWN0dWFsbHkgaXQgc2VlbXMgdG8gYmUgYSBjb3B5IG9mIGEgc2hhbWVsZXNzIGNvcHkgb2YgdGhlIGJ0dHYtZHJpdmVyLgorICogT3IgdGhhdCBpcyBhIGNvcHkgb2YgYSBzaGFtZWxlc3MgY29weSBvZiAuLi4gKFRvIHRoZSBwb3dlcnM6IGlzIHRoZXJlCisgKiBubyBnZW5lcmljIGtlcm5lbC1mdW5jdGlvbiB0byBkbyB0aGlzIHNvcnQgb2Ygc3R1ZmY/KQorICoKKyAqIFllcywgaXQgd2FzIGEgc2hhbWVsZXNzIGNvcHkgZnJvbSB0aGUgYnR0di1kcml2ZXIuIElJUkMsIEFsYW4gc2F5cworICogdGhlcmUgd2lsbCBiZSBvbmUsIGJ1dCBhcHBhcmVudGVseSBub3QgeWV0IC1qZXJkZmVsdAorICoKKyAqIFNvIEkgY29waWVkIGl0IGFnYWluIGZvciB0aGUgb3Y1MTEgZHJpdmVyIC1jbGF1ZGlvCisgKgorICogU2FtZSBmb3IgdGhlIHNlNDAxIGRyaXZlciAtSmVyb2VuCisgKgorICogQW5kIHRoZSBTVFYwNjgwIGRyaXZlciAtIEtldmluCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCAqcnZtYWxsb2MgKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl2b2lkICptZW07CisJdW5zaWduZWQgbG9uZyBhZHI7CisKKwlzaXplID0gUEFHRV9BTElHTihzaXplKTsKKwltZW0gPSB2bWFsbG9jXzMyIChzaXplKTsKKwlpZiAoIW1lbSkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQgKG1lbSwgMCwgc2l6ZSk7CS8qIENsZWFyIHRoZSByYW0gb3V0LCBubyBqdW5rIHRvIHRoZSB1c2VyICovCisJYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJU2V0UGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOworCQlhZHIgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisJcmV0dXJuIG1lbTsKK30KKworc3RhdGljIHZvaWQgcnZmcmVlICh2b2lkICptZW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkcjsKKworCWlmICghbWVtKQorCQlyZXR1cm47CisKKwlhZHIgPSAodW5zaWduZWQgbG9uZykgbWVtOworCXdoaWxlICgobG9uZykgc2l6ZSA+IDApIHsKKwkJQ2xlYXJQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7CisJCWFkciArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0KKwl2ZnJlZSAobWVtKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBwZW5jYW0gcmVhZC93cml0ZSBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBzdHZfc25kY3RybCAoaW50IHNldCwgc3RydWN0IHVzYl9zdHYgKnN0djY4MCwgdW5zaWduZWQgc2hvcnQgcmVxLCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgc2l6ZSkKK3sKKwlpbnQgcmV0ID0gLTE7CisKKwlzd2l0Y2ggKHNldCkgeworCWNhc2UgMDoJCS8qICAweGMxICAqLworCQlyZXQgPSB1c2JfY29udHJvbF9tc2cgKHN0djY4MC0+dWRldiwKKwkJCQkgICAgICAgdXNiX3JjdmN0cmxwaXBlIChzdHY2ODAtPnVkZXYsIDApLAorCQkJCSAgICAgICByZXEsCisJCQkJICAgICAgIChVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UKSwKKwkJCQkgICAgICAgdmFsdWUsIDAsIGJ1ZmZlciwgc2l6ZSwgUEVOQ0FNX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgMToJCS8qICAweDQxICAqLworCQlyZXQgPSB1c2JfY29udHJvbF9tc2cgKHN0djY4MC0+dWRldiwKKwkJCQkgICAgICAgdXNiX3NuZGN0cmxwaXBlIChzdHY2ODAtPnVkZXYsIDApLAorCQkJCSAgICAgICByZXEsCisJCQkJICAgICAgIChVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCksCisJCQkJICAgICAgIHZhbHVlLCAwLCBidWZmZXIsIHNpemUsIFBFTkNBTV9USU1FT1VUKTsKKwkJYnJlYWs7CisKKwljYXNlIDI6CQkvKiAgMHg4MCAgKi8KKwkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnIChzdHY2ODAtPnVkZXYsCisJCQkJICAgICAgIHVzYl9yY3ZjdHJscGlwZSAoc3R2NjgwLT51ZGV2LCAwKSwKKwkJCQkgICAgICAgcmVxLAorCQkJCSAgICAgICAoVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9ERVZJQ0UpLAorCQkJCSAgICAgICB2YWx1ZSwgMCwgYnVmZmVyLCBzaXplLCBQRU5DQU1fVElNRU9VVCk7CisJCWJyZWFrOworCisJY2FzZSAzOgkJLyogIDB4NDAgICovCisJCXJldCA9IHVzYl9jb250cm9sX21zZyAoc3R2NjgwLT51ZGV2LAorCQkJCSAgICAgICB1c2Jfc25kY3RybHBpcGUgKHN0djY4MC0+dWRldiwgMCksCisJCQkJICAgICAgIHJlcSwKKwkJCQkgICAgICAgKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSksCisJCQkJICAgICAgIHZhbHVlLCAwLCBidWZmZXIsIHNpemUsIFBFTkNBTV9USU1FT1VUKTsKKwkJYnJlYWs7CisKKwl9CisJaWYgKChyZXQgPCAwKSAmJiAocmVxICE9IDB4MGEpKSB7CisJCVBERUJVRyAoMSwgIlNUVihlKTogdXNiX2NvbnRyb2xfbXNnIGVycm9yICVpLCByZXF1ZXN0ID0gMHgleCwgZXJyb3IgPSAlaSIsIHNldCwgcmVxLCByZXQpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHN0dl9zZXRfY29uZmlnIChzdHJ1Y3QgdXNiX3N0diAqZGV2LCBpbnQgY29uZmlndXJhdGlvbiwgaW50IGludGVyZmFjZSwgaW50IGFsdGVybmF0ZSkKK3sKKworCWlmIChjb25maWd1cmF0aW9uICE9IGRldi0+dWRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUKKwkJCXx8IHVzYl9yZXNldF9jb25maWd1cmF0aW9uIChkZXYtPnVkZXYpIDwgMCkgeworCQlQREVCVUcgKDEsICJTVFYoZSk6IEZBSUxFRCB0byByZXNldCBjb25maWd1cmF0aW9uICVpIiwgY29uZmlndXJhdGlvbik7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKHVzYl9zZXRfaW50ZXJmYWNlIChkZXYtPnVkZXYsIGludGVyZmFjZSwgYWx0ZXJuYXRlKSA8IDApIHsKKwkJUERFQlVHICgxLCAiU1RWKGUpOiBGQUlMRUQgdG8gc2V0IGFsdGVybmF0ZSBpbnRlcmZhY2UgJWkiLCBhbHRlcm5hdGUpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0dl9zdG9wX3ZpZGVvIChzdHJ1Y3QgdXNiX3N0diAqZGV2KQoreworCWludCBpOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKworCWJ1ZiA9IGttYWxsb2MgKDQwLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJUERFQlVHICgwLCAiU1RWKGUpOiBPdXQgb2YgKHNtYWxsIGJ1ZikgbWVtb3J5Iik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiB0aGlzIGlzIGEgaGlnaCBwcmlvcml0eSBjb21tYW5kOyBpdCBzdG9wcyBhbGwgbG93ZXIgb3JkZXIgY29tbWFuZHMgKi8KKwlpZiAoKGkgPSBzdHZfc25kY3RybCAoMSwgZGV2LCAweDA0LCAweDAwMDAsIGJ1ZiwgMHgwKSkgPCAwKSB7CisJCWkgPSBzdHZfc25kY3RybCAoMCwgZGV2LCAweDgwLCAwLCBidWYsIDB4MDIpOwkvKiBHZXQgTGFzdCBFcnJvcjsgMiA9IGJ1c3kgKi8KKwkJUERFQlVHICgxLCAiU1RWKGkpOiBsYXN0IGVycm9yOiAlaSwgIGNvbW1hbmQgPSAweCV4IiwgYnVmWzBdLCBidWZbMV0pOworCX0gZWxzZSB7CisJCVBERUJVRyAoMSwgIlNUVihpKTogQ2FtZXJhIHJlc2V0IHRvIGlkbGUgbW9kZS4iKTsKKwl9CisKKwlpZiAoKGkgPSBzdHZfc2V0X2NvbmZpZyAoZGV2LCAxLCAwLCAwKSkgPCAwKQorCQlQREVCVUcgKDEsICJTVFYoZSk6IFJlc2V0IGNvbmZpZyBkdXJpbmcgZXhpdCBmYWlsZWQiKTsKKworCS8qICBnZXQgY3VycmVudCBtb2RlICAqLworCWJ1ZlswXSA9IDB4ZjA7CisJaWYgKChpID0gc3R2X3NuZGN0cmwgKDAsIGRldiwgMHg4NywgMCwgYnVmLCAweDA4KSkgIT0gMHgwOCkJLyogZ2V0IG1vZGUgKi8KKwkJUERFQlVHICgwLCAiU1RWKGUpOiBTdG9wX3ZpZGVvOiBwcm9ibGVtIHNldHRpbmcgb3JpZ2luYWwgbW9kZSIpOworCWlmIChkZXYtPm9yaWdNb2RlICE9IGJ1ZlswXSkgeworCQltZW1zZXQgKGJ1ZiwgMCwgOCk7CisJCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSBkZXYtPm9yaWdNb2RlOworCQlpZiAoKGkgPSBzdHZfc25kY3RybCAoMywgZGV2LCAweDA3LCAweDAxMDAsIGJ1ZiwgMHgwOCkpICE9IDB4MDgpIHsKKwkJCVBERUJVRyAoMCwgIlNUVihlKTogU3RvcF92aWRlbzogU2V0X0NhbWVyYV9Nb2RlIGZhaWxlZCIpOworCQkJaSA9IC0xOworCQl9CisJCWJ1ZlswXSA9IDB4ZjA7CisJCWkgPSBzdHZfc25kY3RybCAoMCwgZGV2LCAweDg3LCAwLCBidWYsIDB4MDgpOworCQlpZiAoKGkgIT0gMHgwOCkgfHwgKGJ1ZlswXSAhPSBkZXYtPm9yaWdNb2RlKSkgeworCQkJUERFQlVHICgwLCAiU1RWKGUpOiBjYW1lcmEgTk9UIHNldCB0byBvcmlnaW5hbCByZXNvbHV0aW9uLiIpOworCQkJaSA9IC0xOworCQl9IGVsc2UKKwkJCVBERUJVRyAoMCwgIlNUVihpKTogQ2FtZXJhIHNldCB0byBvcmlnaW5hbCByZXNvbHV0aW9uIik7CisJfQorCS8qIG9yaWdNb2RlICovCisJa2ZyZWUgKGJ1Zik7CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgc3R2X3NldF92aWRlb19tb2RlIChzdHJ1Y3QgdXNiX3N0diAqZGV2KQoreworCWludCBpLCBzdG9wX3ZpZGVvID0gMTsKKwl1bnNpZ25lZCBjaGFyICpidWY7CisKKwlidWYgPSBrbWFsbG9jICg0MCwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCVBERUJVRyAoMCwgIlNUVihlKTogT3V0IG9mIChzbWFsbCBidWYpIG1lbW9yeSIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKChpID0gc3R2X3NldF9jb25maWcgKGRldiwgMSwgMCwgMCkpIDwgMCkgeworCQlrZnJlZSAoYnVmKTsKKwkJcmV0dXJuIGk7CisJfQorCisJaSA9IHN0dl9zbmRjdHJsICgyLCBkZXYsIDB4MDYsIDB4MDEwMCwgYnVmLCAweDEyKTsKKwlpZiAoIShpID4gMCkgJiYgKGJ1Zls4XSA9PSAweDUzKSAmJiAoYnVmWzldID09IDB4MDUpKSB7CisJCVBERUJVRyAoMSwgIlNUVihlKTogQ291bGQgbm90IGdldCBkZXNjcmlwdG9yIDAxMDAuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogIHNldCBhbHRlcm5hdGUgaW50ZXJmYWNlIDEgKi8KKwlpZiAoKGkgPSBzdHZfc2V0X2NvbmZpZyAoZGV2LCAxLCAwLCAxKSkgPCAwKQorCQlnb3RvIGVycm9yOworCisJaWYgKChpID0gc3R2X3NuZGN0cmwgKDAsIGRldiwgMHg4NSwgMCwgYnVmLCAweDEwKSkgIT0gMHgxMCkKKwkJZ290byBlcnJvcjsKKwlQREVCVUcgKDEsICJTVFYoaSk6IFNldHRpbmcgdmlkZW8gbW9kZS4iKTsKKwkvKiAgU3dpdGNoIHRvIFZpZGVvIG1vZGU6IDB4MDEwMCA9IFZHQSAoNjQweDQ4MCksIDB4MDAwMCA9IENJRiAoMzUyeDI4OCkgMHgwMzAwID0gUVZHQSAoMzIweDI0MCkgICovCisJaWYgKChpID0gc3R2X3NuZGN0cmwgKDEsIGRldiwgMHgwOSwgZGV2LT5WaWRlb01vZGUsIGJ1ZiwgMHgwKSkgPCAwKSB7CisJCXN0b3BfdmlkZW8gPSAwOworCQlnb3RvIGVycm9yOworCX0KKwlnb3RvIGV4aXQ7CisKK2Vycm9yOgorCWtmcmVlIChidWYpOworCWlmIChzdG9wX3ZpZGVvID09IDEpCisJCXN0dl9zdG9wX3ZpZGVvIChkZXYpOworCXJldHVybiAtMTsKKworZXhpdDoKKwlrZnJlZSAoYnVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHZfaW5pdCAoc3RydWN0IHVzYl9zdHYgKnN0djY4MCkKK3sKKwlpbnQgaSA9IDA7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgaW50IGJ1ZnNpemU7CisKKwlidWZmZXIgPSBrbWFsbG9jICg0MCwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CisJCVBERUJVRyAoMCwgIlNUVihlKTogT3V0IG9mIChzbWFsbCBidWYpIG1lbW9yeSIpOworCQlyZXR1cm4gLTE7CisJfQorCW1lbXNldCAoYnVmZmVyLCAwLCA0MCk7CisJdWRlbGF5ICgxMDApOworCisJLyogc2V0IGNvbmZpZyAxLCBpbnRlcmZhY2UgMCwgYWx0ZXJuYXRlIDAgKi8KKwlpZiAoKGkgPSBzdHZfc2V0X2NvbmZpZyAoc3R2NjgwLCAxLCAwLCAwKSkgPCAwKSB7CisJCWtmcmVlIChidWZmZXIpOworCQlQREVCVUcgKDAsICJTVFYoZSk6IHNldCBjb25maWcgMSwwLDAgZmFpbGVkIik7CisJCXJldHVybiAtMTsKKwl9CisJLyogcGluZyBjYW1lcmEgdG8gYmUgc3VyZSBTVFYwNjgwIGlzIHByZXNlbnQgKi8KKwlpZiAoKGkgPSBzdHZfc25kY3RybCAoMCwgc3R2NjgwLCAweDg4LCAweDU2NzgsIGJ1ZmZlciwgMHgwMikpICE9IDB4MDIpCisJCWdvdG8gZXJyb3I7CisJaWYgKChidWZmZXJbMF0gIT0gMHg1NikgfHwgKGJ1ZmZlclsxXSAhPSAweDc4KSkgeworCQlQREVCVUcgKDEsICJTVFYoZSk6IGNhbWVyYSBwaW5nIGZhaWxlZCEhIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogZ2V0IGNhbWVyYSBkZXNjcmlwdG9yICovCisJaWYgKChpID0gc3R2X3NuZGN0cmwgKDIsIHN0djY4MCwgMHgwNiwgMHgwMjAwLCBidWZmZXIsIDB4MDkpKSAhPSAweDA5KQorCQlnb3RvIGVycm9yOworCWkgPSBzdHZfc25kY3RybCAoMiwgc3R2NjgwLCAweDA2LCAweDAyMDAsIGJ1ZmZlciwgMHgyMik7CisJaWYgKCEoaSA+PSAwKSAmJiAoYnVmZmVyWzddID09IDB4YTApICYmIChidWZmZXJbOF0gPT0gMHgyMykpIHsKKwkJUERFQlVHICgxLCAiU1RWKGUpOiBDb3VsZCBub3QgZ2V0IGRlc2NyaXB0b3IgMDIwMC4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKChpID0gc3R2X3NuZGN0cmwgKDAsIHN0djY4MCwgMHg4YSwgMCwgYnVmZmVyLCAweDAyKSkgIT0gMHgwMikKKwkJZ290byBlcnJvcjsKKwlpZiAoKGkgPSBzdHZfc25kY3RybCAoMCwgc3R2NjgwLCAweDhiLCAwLCBidWZmZXIsIDB4MjQpKSAhPSAweDI0KQorCQlnb3RvIGVycm9yOworCWlmICgoaSA9IHN0dl9zbmRjdHJsICgwLCBzdHY2ODAsIDB4ODUsIDAsIGJ1ZmZlciwgMHgxMCkpICE9IDB4MTApCisJCWdvdG8gZXJyb3I7CisKKwlzdHY2ODAtPlN1cHBvcnRlZE1vZGVzID0gYnVmZmVyWzddOworCWkgPSBzdHY2ODAtPlN1cHBvcnRlZE1vZGVzOworCXN0djY4MC0+Q0lGID0gMDsKKwlzdHY2ODAtPlZHQSA9IDA7CisJc3R2NjgwLT5RVkdBID0gMDsKKwlpZiAoaSAmIDEpCisJCXN0djY4MC0+Q0lGID0gMTsKKwlpZiAoaSAmIDIpCisJCXN0djY4MC0+VkdBID0gMTsKKwlpZiAoaSAmIDgpCisJCXN0djY4MC0+UVZHQSA9IDE7CisJaWYgKHN0djY4MC0+U3VwcG9ydGVkTW9kZXMgPT0gMCkgeworCQlQREVCVUcgKDAsICJTVFYoZSk6IFRoZXJlIGFyZSBOTyBzdXBwb3J0ZWQgU1RWNjgwIG1vZGVzISEiKTsKKwkJaSA9IC0xOworCQlnb3RvIGVycm9yOworCX0gZWxzZSB7CisJCWlmIChzdHY2ODAtPkNJRikKKwkJCVBERUJVRyAoMCwgIlNUVihpKTogQ0lGIGlzIHN1cHBvcnRlZCIpOworCQlpZiAoc3R2NjgwLT5RVkdBKQorCQkJUERFQlVHICgwLCAiU1RWKGkpOiBRVkdBIGlzIHN1cHBvcnRlZCIpOworCX0KKwkvKiBGVyByZXYsIEFTSUMgcmV2LCBzZW5zb3IgSUQgICovCisJUERFQlVHICgxLCAiU1RWKGkpOiBGaXJtd2FyZSByZXYgaXMgJWkuJWkiLCBidWZmZXJbMF0sIGJ1ZmZlclsxXSk7CisJUERFQlVHICgxLCAiU1RWKGkpOiBBU0lDIHJldiBpcyAlaS4laSIsIGJ1ZmZlclsyXSwgYnVmZmVyWzNdKTsKKwlQREVCVUcgKDEsICJTVFYoaSk6IFNlbnNvciBJRCBpcyAlaSIsIChidWZmZXJbNF0qMTYpICsgKGJ1ZmZlcls1XT4+NCkpOworCisJLyogIHNldCBhbHRlcm5hdGUgaW50ZXJmYWNlIDEgKi8KKwlpZiAoKGkgPSBzdHZfc2V0X2NvbmZpZyAoc3R2NjgwLCAxLCAwLCAxKSkgPCAwKQorCQlnb3RvIGVycm9yOworCisJaWYgKChpID0gc3R2X3NuZGN0cmwgKDAsIHN0djY4MCwgMHg4NSwgMCwgYnVmZmVyLCAweDEwKSkgIT0gMHgxMCkKKwkJZ290byBlcnJvcjsKKwlpZiAoKGkgPSBzdHZfc25kY3RybCAoMCwgc3R2NjgwLCAweDhkLCAwLCBidWZmZXIsIDB4MDgpKSAhPSAweDA4KQorCQlnb3RvIGVycm9yOworCWkgPSBidWZmZXJbM107CisJUERFQlVHICgwLCAiU1RWKGkpOiBDYW1lcmEgaGFzICVpIHBpY3R1cmVzLiIsIGkpOworCisJLyogIGdldCBjdXJyZW50IG1vZGUgKi8KKwlpZiAoKGkgPSBzdHZfc25kY3RybCAoMCwgc3R2NjgwLCAweDg3LCAwLCBidWZmZXIsIDB4MDgpKSAhPSAweDA4KQorCQlnb3RvIGVycm9yOworCXN0djY4MC0+b3JpZ01vZGUgPSBidWZmZXJbMF07CS8qIDAxID0gVkdBLCAwMyA9IFFWR0EsIDAwID0gQ0lGICovCisKKwkvKiBUaGlzIHdpbGwgYXR0ZW1wIENJRiBtb2RlLCBpZiBzdXBwb3J0ZWQuIElmIG5vdCwgc2V0IHRvIFFWR0EgICovCisJbWVtc2V0IChidWZmZXIsIDAsIDgpOworCWlmIChzdHY2ODAtPkNJRikKKwkJYnVmZmVyWzBdID0gMHgwMDsKKwllbHNlIGlmIChzdHY2ODAtPlFWR0EpCisJCWJ1ZmZlclswXSA9IDB4MDM7CisJaWYgKChpID0gc3R2X3NuZGN0cmwgKDMsIHN0djY4MCwgMHgwNywgMHgwMTAwLCBidWZmZXIsIDB4MDgpKSAhPSAweDA4KSB7CisJCVBERUJVRyAoMCwgIlNUVihpKTogU2V0X0NhbWVyYV9Nb2RlIGZhaWxlZCIpOworCQlpID0gLTE7CisJCWdvdG8gZXJyb3I7CisJfQorCWJ1ZmZlclswXSA9IDB4ZjA7CisJc3R2X3NuZGN0cmwgKDAsIHN0djY4MCwgMHg4NywgMCwgYnVmZmVyLCAweDA4KTsKKwlpZiAoKChzdHY2ODAtPkNJRiA9PSAxKSAmJiAoYnVmZmVyWzBdICE9IDB4MDApKSB8fCAoKHN0djY4MC0+UVZHQSA9PSAxKSAmJiAoYnVmZmVyWzBdICE9IDB4MDMpKSkgeworCQlQREVCVUcgKDAsICJTVFYoZSk6IEVycm9yIHNldHRpbmcgY2FtZXJhIHZpZGVvIG1vZGUhIik7CisJCWkgPSAtMTsKKwkJZ290byBlcnJvcjsKKwl9IGVsc2UgeworCQlpZiAoYnVmZmVyWzBdID09IDApIHsKKwkJCXN0djY4MC0+VmlkZW9Nb2RlID0gMHgwMDAwOworCQkJUERFQlVHICgwLCAiU1RWKGkpOiBWaWRlbyBNb2RlIHNldCB0byBDSUYiKTsKKwkJfQorCQlpZiAoYnVmZmVyWzBdID09IDB4MDMpIHsKKwkJCXN0djY4MC0+VmlkZW9Nb2RlID0gMHgwMzAwOworCQkJUERFQlVHICgwLCAiU1RWKGkpOiBWaWRlbyBNb2RlIHNldCB0byBRVkdBIik7CisJCX0KKwl9CisJaWYgKChpID0gc3R2X3NuZGN0cmwgKDAsIHN0djY4MCwgMHg4ZiwgMCwgYnVmZmVyLCAweDEwKSkgIT0gMHgxMCkKKwkJZ290byBlcnJvcjsKKwlidWZzaXplID0gKGJ1ZmZlclswXSA8PCAyNCkgfCAoYnVmZmVyWzFdIDw8IDE2KSB8IChidWZmZXJbMl0gPDwgOCkgfCAoYnVmZmVyWzNdKTsKKwlzdHY2ODAtPmN3aWR0aCA9IChidWZmZXJbNF0gPDwgOCkgfCAoYnVmZmVyWzVdKTsJLyogLT5jYW1lcmEgPSAzMjIsIDM1NiwgNjQ0ICAqLworCXN0djY4MC0+Y2hlaWdodCA9IChidWZmZXJbNl0gPDwgOCkgfCAoYnVmZmVyWzddKTsJLyogLT5jYW1lcmEgPSAyNDIsIDI5MiwgNDg0ICAqLworCXN0djY4MC0+b3JpZ0dhaW4gPSBidWZmZXJbMTJdOworCisJZ290byBleGl0OworCitlcnJvcjoKKwlpID0gc3R2X3NuZGN0cmwgKDAsIHN0djY4MCwgMHg4MCwgMCwgYnVmZmVyLCAweDAyKTsJLyogR2V0IExhc3QgRXJyb3IgKi8KKwlQREVCVUcgKDEsICJTVFYoaSk6IGxhc3QgZXJyb3I6ICVpLCAgY29tbWFuZCA9IDB4JXgiLCBidWZmZXJbMF0sIGJ1ZmZlclsxXSk7CisJa2ZyZWUgKGJ1ZmZlcik7CisJcmV0dXJuIC0xOworCitleGl0OgorCWtmcmVlIChidWZmZXIpOworCisJLyogdmlkZW8gPSAzMjB4MjQwLCAzNTJ4Mjg4ICovCisJaWYgKHN0djY4MC0+Q0lGID09IDEpIHsKKwkJc3R2NjgwLT5tYXh3aWR0aCA9IDM1MjsKKwkJc3R2NjgwLT5tYXhoZWlnaHQgPSAyODg7CisJCXN0djY4MC0+dndpZHRoID0gMzUyOworCQlzdHY2ODAtPnZoZWlnaHQgPSAyODg7CisJfQorCWlmIChzdHY2ODAtPlFWR0EgPT0gMSkgeworCQlzdHY2ODAtPm1heHdpZHRoID0gMzIwOworCQlzdHY2ODAtPm1heGhlaWdodCA9IDI0MDsKKwkJc3R2NjgwLT52d2lkdGggPSAzMjA7CisJCXN0djY4MC0+dmhlaWdodCA9IDI0MDsKKwl9CisKKwlzdHY2ODAtPnJhd2J1ZnNpemUgPSBidWZzaXplOwkvKiBtdXN0IGJlIC4vLiBieSA4ICovCisJc3R2NjgwLT5tYXhmcmFtZXNpemUgPSBidWZzaXplICogMzsJLyogUkdCIHNpemUgKi8KKwlQREVCVUcgKDIsICJTVFYoaSk6IGN3aWR0aCA9ICVpLCBjaGVpZ2h0ID0gJWkiLCBzdHY2ODAtPmN3aWR0aCwgc3R2NjgwLT5jaGVpZ2h0KTsKKwlQREVCVUcgKDEsICJTVFYoaSk6IHdpZHRoID0gJWksIGhlaWdodCA9ICVpLCByYXdidWZzaXplID0gJWxpIiwgc3R2NjgwLT52d2lkdGgsIHN0djY4MC0+dmhlaWdodCwgc3R2NjgwLT5yYXdidWZzaXplKTsKKworCS8qIHNvbWUgZGVmYXVsdCB2YWx1ZXMgKi8KKwlzdHY2ODAtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyID0gMHg4MjsKKwlzdHY2ODAtPmRyb3BwZWQgPSAwOworCXN0djY4MC0+ZXJyb3IgPSAwOworCXN0djY4MC0+ZnJhbWVjb3VudCA9IDA7CisJc3R2NjgwLT5yZWFkY291bnQgPSAwOworCXN0djY4MC0+c3RyZWFtaW5nID0gMDsKKwkvKiBicmlnaHQsIHdoaXRlLCBjb2xvdXIsIGh1ZSwgY29udHJhc3QgYXJlIHNldCBieSBzb2Z0d2FyZSwgbm90IGluIHN0djA2ODAgKi8KKwlzdHY2ODAtPmJyaWdodG5lc3MgPSAzMjc2NzsKKwlzdHY2ODAtPmNoZ2JyaWdodCA9IDA7CisJc3R2NjgwLT53aGl0ZW5lc3MgPSAwOwkvKiBvbmx5IGZvciBncmV5c2NhbGUgKi8KKwlzdHY2ODAtPmNvbG91ciA9IDMyNzY3OworCXN0djY4MC0+Y29udHJhc3QgPSAzMjc2NzsKKwlzdHY2ODAtPmh1ZSA9IDMyNzY3OworCXN0djY4MC0+cGFsZXR0ZSA9IFNUVl9WSURFT19QQUxFVFRFOworCXN0djY4MC0+ZGVwdGggPSAyNDsJLyogcmdiMjQgYml0cyAqLworCWlmICgoc3dhcFJHQl9vbiA9PSAwKSAmJiAoc3dhcFJHQiA9PSAwKSkKKwkJUERFQlVHICgxLCAiU1RWKGkpOiBzd2FwUkdCIGlzIChhdXRvKSBPRkYiKTsKKwllbHNlIGlmICgoc3dhcFJHQl9vbiA9PSAwKSAmJiAoc3dhcFJHQiA9PSAxKSkKKwkJUERFQlVHICgxLCAiU1RWKGkpOiBzd2FwUkdCIGlzIChhdXRvKSBPTiIpOworCWVsc2UgaWYgKHN3YXBSR0Jfb24gPT0gMSkKKwkJUERFQlVHICgxLCAiU1RWKGkpOiBzd2FwUkdCIGlzIChmb3JjZWQpIE9OIik7CisJZWxzZSBpZiAoc3dhcFJHQl9vbiA9PSAtMSkKKwkJUERFQlVHICgxLCAiU1RWKGkpOiBzd2FwUkdCIGlzIChmb3JjZWQpIE9GRiIpOworCQorCWlmIChzdHZfc2V0X3ZpZGVvX21vZGUgKHN0djY4MCkgPCAwKSB7CisJCVBERUJVRyAoMCwgIlNUVihlKTogQ291bGQgbm90IHNldCB2aWRlbyBtb2RlIGluIHN0dl9pbml0Iik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqIGxhc3Qgb2YgcGVuY2FtICByb3V0aW5lcyAgKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBzeXNmcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgc3R2NjgwX2ZpbGUobmFtZSwgdmFyaWFibGUsIGZpZWxkKQkJCQlcCitzdGF0aWMgc3NpemVfdCBzaG93XyMjbmFtZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdG9fdmlkZW9fZGV2aWNlKGNsYXNzX2Rldik7CQlcCisJc3RydWN0IHVzYl9zdHYgKnN0diA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOwkJCVwKKwlyZXR1cm4gc3ByaW50ZihidWYsIGZpZWxkLCBzdHYtPnZhcmlhYmxlKTsJCQlcCit9CQkJCQkJCQkJXAorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfIyNuYW1lLCBOVUxMKTsKKworc3R2NjgwX2ZpbGUobW9kZWwsIGNhbWVyYV9uYW1lLCAiJXNcbiIpOworc3R2NjgwX2ZpbGUoaW5fdXNlLCB1c2VyLCAiJWRcbiIpOworc3R2NjgwX2ZpbGUoc3RyZWFtaW5nLCBzdHJlYW1pbmcsICIlZFxuIik7CitzdHY2ODBfZmlsZShwYWxldHRlLCBwYWxldHRlLCAiJWlcbiIpOworc3R2NjgwX2ZpbGUoZnJhbWVzX3RvdGFsLCByZWFkY291bnQsICIlZFxuIik7CitzdHY2ODBfZmlsZShmcmFtZXNfcmVhZCwgZnJhbWVjb3VudCwgIiVkXG4iKTsKK3N0djY4MF9maWxlKHBhY2tldHNfZHJvcHBlZCwgZHJvcHBlZCwgIiVkXG4iKTsKK3N0djY4MF9maWxlKGRlY29kaW5nX2Vycm9ycywgZXJyb3IsICIlZFxuIik7CisKK3N0YXRpYyB2b2lkIHN0djY4MF9jcmVhdGVfc3lzZnNfZmlsZXMoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldikKK3sKKwl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX21vZGVsKTsKKwl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX2luX3VzZSk7CisJdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHZkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9zdHJlYW1pbmcpOworCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcGFsZXR0ZSk7CisJdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHZkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9mcmFtZXNfdG90YWwpOworCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfZnJhbWVzX3JlYWQpOworCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcGFja2V0c19kcm9wcGVkKTsKKwl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX2RlY29kaW5nX2Vycm9ycyk7Cit9CisKK3N0YXRpYyB2b2lkIHN0djY4MF9yZW1vdmVfc3lzZnNfZmlsZXMoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldikKK3sKKwl2aWRlb19kZXZpY2VfcmVtb3ZlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX21vZGVsKTsKKwl2aWRlb19kZXZpY2VfcmVtb3ZlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX2luX3VzZSk7CisJdmlkZW9fZGV2aWNlX3JlbW92ZV9maWxlKHZkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9zdHJlYW1pbmcpOworCXZpZGVvX2RldmljZV9yZW1vdmVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcGFsZXR0ZSk7CisJdmlkZW9fZGV2aWNlX3JlbW92ZV9maWxlKHZkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9mcmFtZXNfdG90YWwpOworCXZpZGVvX2RldmljZV9yZW1vdmVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfZnJhbWVzX3JlYWQpOworCXZpZGVvX2RldmljZV9yZW1vdmVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcGFja2V0c19kcm9wcGVkKTsKKwl2aWRlb19kZXZpY2VfcmVtb3ZlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX2RlY29kaW5nX2Vycm9ycyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ2FtZXJhIGNvbnRyb2wKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHN0djY4MF9nZXRfcGljdCAoc3RydWN0IHVzYl9zdHYgKnN0djY4MCwgc3RydWN0IHZpZGVvX3BpY3R1cmUgKnApCit7CisJLyogVGhpcyBzZXRzIHZhbHVlcyBmb3IgdjRsIGludGVyZmFjZS4gbWF4L21pbiA9IDY1NTM1LzAgICovCisKKwlwLT5icmlnaHRuZXNzID0gc3R2NjgwLT5icmlnaHRuZXNzOworCXAtPndoaXRlbmVzcyA9IHN0djY4MC0+d2hpdGVuZXNzOwkvKiBncmV5c2NhbGUgKi8KKwlwLT5jb2xvdXIgPSBzdHY2ODAtPmNvbG91cjsKKwlwLT5jb250cmFzdCA9IHN0djY4MC0+Y29udHJhc3Q7CisJcC0+aHVlID0gc3R2NjgwLT5odWU7CisJcC0+cGFsZXR0ZSA9IHN0djY4MC0+cGFsZXR0ZTsKKwlwLT5kZXB0aCA9IHN0djY4MC0+ZGVwdGg7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2NjgwX3NldF9waWN0IChzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwLCBzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcCkKK3sKKwkvKiBTZWUgYWJvdmUgc3R2NjgwX2dldF9waWN0ICAqLworCisJaWYgKHAtPnBhbGV0dGUgIT0gU1RWX1ZJREVPX1BBTEVUVEUpIHsKKwkJUERFQlVHICgyLCAiU1RWKGUpOiBQYWxldHRlIHNldCBlcnJvciBpbiBfc2V0X3BpYyIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoc3R2NjgwLT5icmlnaHRuZXNzICE9IHAtPmJyaWdodG5lc3MpIHsKKwkJc3R2NjgwLT5jaGdicmlnaHQgPSAxOworCQlzdHY2ODAtPmJyaWdodG5lc3MgPSBwLT5icmlnaHRuZXNzOworCX0gCisKKwlzdHY2ODAtPndoaXRlbmVzcyA9IHAtPndoaXRlbmVzczsJLyogZ3JleXNjYWxlICovCisJc3R2NjgwLT5jb2xvdXIgPSBwLT5jb2xvdXI7CisJc3R2NjgwLT5jb250cmFzdCA9IHAtPmNvbnRyYXN0OworCXN0djY4MC0+aHVlID0gcC0+aHVlOworCXN0djY4MC0+cGFsZXR0ZSA9IHAtPnBhbGV0dGU7CisJc3R2NjgwLT5kZXB0aCA9IHAtPmRlcHRoOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN0djY4MF92aWRlb19pcnEgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zdHYgKnN0djY4MCA9IHVyYi0+Y29udGV4dDsKKwlpbnQgbGVuZ3RoID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCisJaWYgKGxlbmd0aCA8IHN0djY4MC0+cmF3YnVmc2l6ZSkKKwkJUERFQlVHICgyLCAiU1RWKGkpOiBMb3N0IGRhdGEgaW4gdHJhbnNmZXI6IGV4cCAlbGksIGdvdCAlaSIsIHN0djY4MC0+cmF3YnVmc2l6ZSwgbGVuZ3RoKTsKKworCS8qIG9ob2guLi4gKi8KKwlpZiAoIXN0djY4MC0+c3RyZWFtaW5nKQorCQlyZXR1cm47CisKKwlpZiAoIXN0djY4MC0+dWRldikgeworCQlQREVCVUcgKDAsICJTVFYoZSk6IGRldmljZSB2YXBvdXJpc2hlZCBpbiB2aWRlb19pcnEiKTsKKwkJcmV0dXJuOworCX0KKworCS8qIDAgc2l6ZWQgcGFja2V0cyBoYXBwZW4gaWYgd2UgYXJlIHRvIGZhc3QsIGJ1dCBzb21ldGltZXMgdGhlIGNhbWVyYQorCSAgIGtlZXBzIHNlbmRpbmcgdGhlbSBmb3JldmVyLi4uCisJICovCisJaWYgKGxlbmd0aCAmJiAhdXJiLT5zdGF0dXMpIHsKKwkJc3R2NjgwLT5udWxscGFja2V0cyA9IDA7CisJCXN3aXRjaCAoc3R2NjgwLT5zY3JhdGNoW3N0djY4MC0+c2NyYXRjaF9uZXh0XS5zdGF0ZSkgeworCQljYXNlIEJVRkZFUl9SRUFEWToKKwkJY2FzZSBCVUZGRVJfQlVTWToKKwkJCXN0djY4MC0+ZHJvcHBlZCsrOworCQkJYnJlYWs7CisKKwkJY2FzZSBCVUZGRVJfVU5VU0VEOgorCQkJbWVtY3B5IChzdHY2ODAtPnNjcmF0Y2hbc3R2NjgwLT5zY3JhdGNoX25leHRdLmRhdGEsCisJCQkgICAgICAgICh1bnNpZ25lZCBjaGFyICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBsZW5ndGgpOworCQkJc3R2NjgwLT5zY3JhdGNoW3N0djY4MC0+c2NyYXRjaF9uZXh0XS5zdGF0ZSA9IEJVRkZFUl9SRUFEWTsKKwkJCXN0djY4MC0+c2NyYXRjaFtzdHY2ODAtPnNjcmF0Y2hfbmV4dF0ubGVuZ3RoID0gbGVuZ3RoOworCQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUgKCZzdHY2ODAtPndxKSkgeworCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSAoJnN0djY4MC0+d3EpOworCQkJfQorCQkJc3R2NjgwLT5zY3JhdGNoX292ZXJmbG93ID0gMDsKKwkJCXN0djY4MC0+c2NyYXRjaF9uZXh0Kys7CisJCQlpZiAoc3R2NjgwLT5zY3JhdGNoX25leHQgPj0gU1RWNjgwX05VTVNDUkFUQ0gpCisJCQkJc3R2NjgwLT5zY3JhdGNoX25leHQgPSAwOworCQkJYnJlYWs7CisJCX0JCS8qIHN3aXRjaCAgKi8KKwl9IGVsc2UgeworCQlzdHY2ODAtPm51bGxwYWNrZXRzKys7CisJCWlmIChzdHY2ODAtPm51bGxwYWNrZXRzID4gU1RWNjgwX01BWF9OVUxMUEFDS0VUUykgeworCQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUgKCZzdHY2ODAtPndxKSkgeworCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSAoJnN0djY4MC0+d3EpOworCQkJfQorCQl9CisJfQkJCS8qICBpZiAtIGVsc2UgKi8KKworCS8qIFJlc3VibWl0IHVyYiBmb3IgbmV3IGRhdGEgKi8KKwl1cmItPnN0YXR1cyA9IDA7CisJdXJiLT5kZXYgPSBzdHY2ODAtPnVkZXY7CisJaWYgKHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpKQorCQlQREVCVUcgKDAsICJTVFYoZSk6IHVyYiBidXJuZWQgZG93biBpbiB2aWRlbyBpcnEiKTsKKwlyZXR1cm47Cit9CQkJCS8qICBfdmlkZW9faXJxICAqLworCitzdGF0aWMgaW50IHN0djY4MF9zdGFydF9zdHJlYW0gKHN0cnVjdCB1c2Jfc3R2ICpzdHY2ODApCit7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBlcnIgPSAwLCBpOworCisJc3R2NjgwLT5zdHJlYW1pbmcgPSAxOworCisJLyogRG8gc29tZSBtZW1vcnkgYWxsb2NhdGlvbiAqLworCWZvciAoaSA9IDA7IGkgPCBTVFY2ODBfTlVNRlJBTUVTOyBpKyspIHsKKwkJc3R2NjgwLT5mcmFtZVtpXS5kYXRhID0gc3R2NjgwLT5mYnVmICsgaSAqIHN0djY4MC0+bWF4ZnJhbWVzaXplOworCQlzdHY2ODAtPmZyYW1lW2ldLmN1cnBpeCA9IDA7CisJfQorCS8qIHBhY2tldCBzaXplID0gNDA5NiAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgU1RWNjgwX05VTVNCVUY7IGkrKykgeworCQlzdHY2ODAtPnNidWZbaV0uZGF0YSA9IGttYWxsb2MgKHN0djY4MC0+cmF3YnVmc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChzdHY2ODAtPnNidWZbaV0uZGF0YSA9PSBOVUxMKSB7CisJCQlQREVCVUcgKDAsICJTVFYoZSk6IENvdWxkIG5vdCBrbWFsbG9jIHJhdyBkYXRhIGJ1ZmZlciAlaSIsIGkpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJc3R2NjgwLT5zY3JhdGNoX25leHQgPSAwOworCXN0djY4MC0+c2NyYXRjaF91c2UgPSAwOworCXN0djY4MC0+c2NyYXRjaF9vdmVyZmxvdyA9IDA7CisJZm9yIChpID0gMDsgaSA8IFNUVjY4MF9OVU1TQ1JBVENIOyBpKyspIHsKKwkJc3R2NjgwLT5zY3JhdGNoW2ldLmRhdGEgPSBrbWFsbG9jIChzdHY2ODAtPnJhd2J1ZnNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoc3R2NjgwLT5zY3JhdGNoW2ldLmRhdGEgPT0gTlVMTCkgeworCQkJUERFQlVHICgwLCAiU1RWKGUpOiBDb3VsZCBub3Qga21hbGxvYyByYXcgc2NyYXRjaCBidWZmZXIgJWkiLCBpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlzdHY2ODAtPnNjcmF0Y2hbaV0uc3RhdGUgPSBCVUZGRVJfVU5VU0VEOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBTVFY2ODBfTlVNU0JVRjsgaSsrKSB7CisJCXVyYiA9IHVzYl9hbGxvY191cmIgKDAsIEdGUF9LRVJORUwpOworCQlpZiAoIXVyYikKKwkJCXJldHVybiAtRU5PTUVNOworCisJCS8qIHNidWYgaXMgdXJiLT50cmFuc2Zlcl9idWZmZXIsIGxhdGVyIGdldHMgbWVtY3B5ZWQgdG8gc2NyYXRjaCAqLworCQl1c2JfZmlsbF9idWxrX3VyYiAodXJiLCBzdHY2ODAtPnVkZXYsCisJCQkJICAgdXNiX3JjdmJ1bGtwaXBlIChzdHY2ODAtPnVkZXYsIHN0djY4MC0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAorCQkJCSAgIHN0djY4MC0+c2J1ZltpXS5kYXRhLCBzdHY2ODAtPnJhd2J1ZnNpemUsCisJCQkJICAgc3R2NjgwX3ZpZGVvX2lycSwgc3R2NjgwKTsKKwkJc3R2NjgwLT51cmJbaV0gPSB1cmI7CisJCWVyciA9IHVzYl9zdWJtaXRfdXJiIChzdHY2ODAtPnVyYltpXSwgR0ZQX0tFUk5FTCk7CisJCWlmIChlcnIpCisJCQlQREVCVUcgKDAsICJTVFYoZSk6IHVyYiBidXJuZWQgZG93biBpbiBzdGFydCBzdHJlYW0iKTsKKwl9CQkJLyogaSBTVFY2ODBfTlVNU0JVRiAqLworCisJc3R2NjgwLT5mcmFtZWNvdW50ID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHY2ODBfc3RvcF9zdHJlYW0gKHN0cnVjdCB1c2Jfc3R2ICpzdHY2ODApCit7CisJaW50IGk7CisKKwlpZiAoIXN0djY4MC0+c3RyZWFtaW5nIHx8ICFzdHY2ODAtPnVkZXYpCisJCXJldHVybiAxOworCisJc3R2NjgwLT5zdHJlYW1pbmcgPSAwOworCisJZm9yIChpID0gMDsgaSA8IFNUVjY4MF9OVU1TQlVGOyBpKyspCisJCWlmIChzdHY2ODAtPnVyYltpXSkgeworCQkJdXNiX2tpbGxfdXJiIChzdHY2ODAtPnVyYltpXSk7CisJCQl1c2JfZnJlZV91cmIgKHN0djY4MC0+dXJiW2ldKTsKKwkJCXN0djY4MC0+dXJiW2ldID0gTlVMTDsKKwkJCWtmcmVlIChzdHY2ODAtPnNidWZbaV0uZGF0YSk7CisJCX0KKwlmb3IgKGkgPSAwOyBpIDwgU1RWNjgwX05VTVNDUkFUQ0g7IGkrKykgeworCQlrZnJlZSAoc3R2NjgwLT5zY3JhdGNoW2ldLmRhdGEpOworCQlzdHY2ODAtPnNjcmF0Y2hbaV0uZGF0YSA9IE5VTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2NjgwX3NldF9zaXplIChzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisJaW50IHdhc3N0cmVhbWluZyA9IHN0djY4MC0+c3RyZWFtaW5nOworCisJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gY2hhbmdlICovCisJaWYgKChzdHY2ODAtPnZ3aWR0aCA9PSB3aWR0aCkgJiYgKHN0djY4MC0+dmhlaWdodCA9PSBoZWlnaHQpKQorCQlyZXR1cm4gMDsKKworCVBERUJVRyAoMSwgIlNUVihpKTogc2l6ZSByZXF1ZXN0IGZvciAlaSB4ICVpIiwgd2lkdGgsIGhlaWdodCk7CisJLyogQ2hlY2sgZm9yIGEgdmFsaWQgbW9kZSAqLworCWlmICgoIXdpZHRoIHx8ICFoZWlnaHQpIHx8ICgod2lkdGggJiAxKSB8fCAoaGVpZ2h0ICYgMSkpKSB7CisJCVBERUJVRyAoMSwgIlNUVihlKTogc2V0X3NpemUgZXJyb3I6IHJlcXVlc3Q6IHYud2lkdGggPSAlaSwgdi5oZWlnaHQgPSAlaSAgYWN0dWFsOiBzdHYud2lkdGggPSAlaSwgc3R2LmhlaWdodCA9ICVpIiwgd2lkdGgsIGhlaWdodCwgc3R2NjgwLT52d2lkdGgsIHN0djY4MC0+dmhlaWdodCk7CisJCXJldHVybiAxOworCX0KKworCWlmICgod2lkdGggPCAoc3R2NjgwLT5tYXh3aWR0aCAvIDIpKSB8fCAoaGVpZ2h0IDwgKHN0djY4MC0+bWF4aGVpZ2h0IC8gMikpKSB7CisJCXdpZHRoID0gc3R2NjgwLT5tYXh3aWR0aCAvIDI7CisJCWhlaWdodCA9IHN0djY4MC0+bWF4aGVpZ2h0IC8gMjsKKwl9IGVsc2UgaWYgKCh3aWR0aCA+PSAxNTgpICYmICh3aWR0aCA8PSAxNjYpICYmIChzdHY2ODAtPlFWR0EgPT0gMSkpIHsKKwkJd2lkdGggPSAxNjA7CisJCWhlaWdodCA9IDEyMDsKKwl9IGVsc2UgaWYgKCh3aWR0aCA+PSAxNzIpICYmICh3aWR0aCA8PSAxODApICYmIChzdHY2ODAtPkNJRiA9PSAxKSkgeworCQl3aWR0aCA9IDE3NjsKKwkJaGVpZ2h0ID0gMTQ0OworCX0gZWxzZSBpZiAoKHdpZHRoID49IDMxOCkgJiYgKHdpZHRoIDw9IDM1MCkgJiYgKHN0djY4MC0+UVZHQSA9PSAxKSkgeworCQl3aWR0aCA9IDMyMDsKKwkJaGVpZ2h0ID0gMjQwOworCX0gZWxzZSBpZiAoKHdpZHRoID49IDM1MCkgJiYgKHdpZHRoIDw9IDM1OCkgJiYgKHN0djY4MC0+Q0lGID09IDEpKSB7CisJCXdpZHRoID0gMzUyOworCQloZWlnaHQgPSAyODg7CisJfSBlbHNlIHsKKwkJUERFQlVHICgxLCAiU1RWKGUpOiByZXF1ZXN0IGZvciBub24tc3VwcG9ydGVkIHNpemU6IHJlcXVlc3Q6IHYud2lkdGggPSAlaSwgdi5oZWlnaHQgPSAlaSAgYWN0dWFsOiBzdHYud2lkdGggPSAlaSwgc3R2LmhlaWdodCA9ICVpIiwgd2lkdGgsIGhlaWdodCwgc3R2NjgwLT52d2lkdGgsIHN0djY4MC0+dmhlaWdodCk7CisJCXJldHVybiAxOworCX0KKwkKKwkvKiBTdG9wIGEgY3VycmVudCBzdHJlYW0gYW5kIHN0YXJ0IGl0IGFnYWluIGF0IHRoZSBuZXcgc2l6ZSAqLworCWlmICh3YXNzdHJlYW1pbmcpCisJCXN0djY4MF9zdG9wX3N0cmVhbSAoc3R2NjgwKTsKKwlzdHY2ODAtPnZ3aWR0aCA9IHdpZHRoOworCXN0djY4MC0+dmhlaWdodCA9IGhlaWdodDsKKwlQREVCVUcgKDEsICJTVFYoaSk6IHNpemUgc2V0IHRvICVpIHggJWkiLCBzdHY2ODAtPnZ3aWR0aCwgc3R2NjgwLT52aGVpZ2h0KTsKKwlpZiAod2Fzc3RyZWFtaW5nKQorCQlzdHY2ODBfc3RhcnRfc3RyZWFtIChzdHY2ODApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWaWRlbyBEZWNvZGluZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqICByb3V0aW5lcyBmcm9tIHRoZSBwZW5jYW0gcHJvZ3JhbTsgaGV5LCB0aGV5IHdvcmshICAqKioqKioqKi8KKworLyoKKyAqIFNUVjA2ODAgVmlzaW9uIENhbWVyYSBDaGlwc2V0IERyaXZlcgorICogQ29weXJpZ2h0IChDKSAyMDAwIEFkYW0gSGFycmlzb24gPGFkYW1AYW50aXNwaW4ub3JnPiAKKyovCisKKyNkZWZpbmUgUkVEIDAKKyNkZWZpbmUgR1JFRU4gMQorI2RlZmluZSBCTFVFIDIKKyNkZWZpbmUgQUQoeCwgeSwgdykgKCgoeSkqKHcpKyh4KSkqMykKKworc3RhdGljIHZvaWQgYmF5ZXJfdW5zaHVmZmxlIChzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwLCBzdHJ1Y3Qgc3R2NjgwX3NjcmF0Y2ggKmJ1ZmZlcikKK3sKKwlpbnQgeCwgeSwgaTsKKwlpbnQgdyA9IHN0djY4MC0+Y3dpZHRoOworCWludCB2dyA9IHN0djY4MC0+Y3dpZHRoLCB2aCA9IHN0djY4MC0+Y2hlaWdodDsKKwl1bnNpZ25lZCBpbnQgcCA9IDA7CisJaW50IGNvbG91ciA9IDAsIGJheWVyID0gMDsKKwl1bnNpZ25lZCBjaGFyICpyYXcgPSBidWZmZXItPmRhdGE7CisJc3RydWN0IHN0djY4MF9mcmFtZSAqZnJhbWUgPSAmc3R2NjgwLT5mcmFtZVtzdHY2ODAtPmN1cmZyYW1lXTsKKwl1bnNpZ25lZCBjaGFyICpvdXRwdXQgPSBmcmFtZS0+ZGF0YTsKKwl1bnNpZ25lZCBjaGFyICp0ZW1wID0gZnJhbWUtPmRhdGE7CisJaW50IG9mZnNldCA9IGJ1ZmZlci0+b2Zmc2V0OworCisJaWYgKGZyYW1lLT5jdXJwaXggPT0gMCkgeworCQlpZiAoZnJhbWUtPmdyYWJzdGF0ZSA9PSBGUkFNRV9SRUFEWSkgeworCQkJZnJhbWUtPmdyYWJzdGF0ZSA9IEZSQU1FX0dSQUJCSU5HOworCQl9CisJfQorCWlmIChvZmZzZXQgIT0gZnJhbWUtPmN1cnBpeCkgewkvKiBSZWdhcmQgZnJhbWUgYXMgbG9zdCA6KCAqLworCQlmcmFtZS0+Y3VycGl4ID0gMDsKKwkJc3R2NjgwLT5lcnJvcisrOworCQlyZXR1cm47CisJfQorCisJaWYgKChzdHY2ODAtPnZ3aWR0aCA9PSAzMjApIHx8IChzdHY2ODAtPnZ3aWR0aCA9PSAxNjApKSB7CisJCXZ3ID0gMzIwOworCQl2aCA9IDI0MDsKKwl9CisJaWYgKChzdHY2ODAtPnZ3aWR0aCA9PSAzNTIpIHx8IChzdHY2ODAtPnZ3aWR0aCA9PSAxNzYpKSB7CisJCXZ3ID0gMzUyOworCQl2aCA9IDI4ODsKKwl9CisKKwltZW1zZXQgKG91dHB1dCwgMCwgMyAqIHZ3ICogdmgpOwkvKiBjbGVhciBvdXRwdXQgbWF0cml4LiAqLworCisJZm9yICh5ID0gMDsgeSA8IHZoOyB5KyspIHsKKwkJZm9yICh4ID0gMDsgeCA8IHZ3OyB4KyspIHsKKwkJCWlmICh4ICYgMSkKKwkJCQlwID0gKihyYXcgKyB5ICogdyArICh4ID4+IDEpKTsKKwkJCWVsc2UKKwkJCQlwID0gKihyYXcgKyB5ICogdyArICh4ID4+IDEpICsgKHcgPj4gMSkpOworCisJCQlpZiAoeSAmIDEpCisJCQkJYmF5ZXIgPSAyOworCQkJZWxzZQorCQkJCWJheWVyID0gMDsKKwkJCWlmICh4ICYgMSkKKwkJCQliYXllcisrOworCisJCQlzd2l0Y2ggKGJheWVyKSB7CisJCQljYXNlIDA6CisJCQljYXNlIDM6CisJCQkJY29sb3VyID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQljb2xvdXIgPSAwOworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCWNvbG91ciA9IDI7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpID0gKHkgKiB2dyArIHgpICogMzsJCisJCQkqKG91dHB1dCArIGkgKyBjb2xvdXIpID0gKHVuc2lnbmVkIGNoYXIpIHA7CisJCX0JCS8qIGZvciB4ICovCisKKwl9CQkJLyogZm9yIHkgKi8KKworCS8qKioqKiogZ2FtbWEgY29ycmVjdGlvbiBwbHVzIGhhcmRjb2RlZCB3aGl0ZSBiYWxhbmNlICovCisJLyogVGhhbmtzIHRvIEFsZXhhbmRlciBTY2h3YXJ0eCA8YWxleGFuZGVyLnNjaHdhcnR4QGdteC5uZXQ+IGZvciB0aGlzIGNvZGUuCisJICAgQ29ycmVjdGlvbiB2YWx1ZXMgcmVkW10sIGdyZWVuW10sIGJsdWVbXSwgYXJlIGdlbmVyYXRlZCBieSAKKwkgICAocG93KGkvMjU2LjAsIEdBTU1BKSoyNTUuMCkqd2hpdGUgYmFsYW5jZVJHQiB3aGVyZSBHQU1NQT0wLjU1LCAxPGk8MjU1LiAKKwkgICBXaGl0ZSBiYWxhbmNlIChSR0IpPSAxLjAsIDEuMTcsIDEuNDguIFZhbHVlcyBhcmUgY2FsY3VsYXRlZCBhcyBkb3VibGUgZmxvYXQgYW5kIAorCSAgIGNvbnZlcnRlZCB0byB1bnNpZ25lZCBjaGFyLiBWYWx1ZXMgYXJlIGluIHN0djY4MC5oICAqLworCisJZm9yICh5ID0gMDsgeSA8IHZoOyB5KyspIHsKKwkJZm9yICh4ID0gMDsgeCA8IHZ3OyB4KyspIHsKKwkJCWkgPSAoeSAqIHZ3ICsgeCkgKiAzOworCQkJKihvdXRwdXQgKyBpKSA9IHJlZFsqKG91dHB1dCArIGkpXTsKKwkJCSoob3V0cHV0ICsgaSArIDEpID0gZ3JlZW5bKihvdXRwdXQgKyBpICsgMSldOworCQkJKihvdXRwdXQgKyBpICsgMikgPSBibHVlWyoob3V0cHV0ICsgaSArIDIpXTsKKwkJfQorCX0KKworCS8qKioqKiogIGJheWVyIGRlbW9zYWljICAqKioqKiovCisJZm9yICh5ID0gMTsgeSA8ICh2aCAtIDEpOyB5KyspIHsKKwkJZm9yICh4ID0gMTsgeCA8ICh2dyAtIDEpOyB4KyspIHsJLyogd29yayBvdXQgcGl4ZWwgdHlwZSAqLworCQkJaWYgKHkgJiAxKQorCQkJCWJheWVyID0gMDsKKwkJCWVsc2UKKwkJCQliYXllciA9IDI7CisJCQlpZiAoISh4ICYgMSkpCisJCQkJYmF5ZXIrKzsKKworCQkJc3dpdGNoIChiYXllcikgeworCQkJY2FzZSAwOgkvKiBncmVlbi4gYmx1ZSBsciwgcmVkIHRiICovCisJCQkJKihvdXRwdXQgKyBBRCAoeCwgeSwgdncpICsgQkxVRSkgPSAoKGludCkgKihvdXRwdXQgKyBBRCAoeCAtIDEsIHksIHZ3KSArIEJMVUUpICsgKGludCkgKihvdXRwdXQgKyBBRCAoeCArIDEsIHksIHZ3KSArIEJMVUUpKSA+PiAxOworCQkJCSoob3V0cHV0ICsgQUQgKHgsIHksIHZ3KSArIFJFRCkgPSAoKGludCkgKihvdXRwdXQgKyBBRCAoeCwgeSAtIDEsIHZ3KSArIFJFRCkgKyAoaW50KSAqKG91dHB1dCArIEFEICh4LCB5ICsgMSwgdncpICsgUkVEKSkgPj4gMTsKKwkJCQlicmVhazsKKworCQkJY2FzZSAxOgkvKiBibHVlLiBncmVlbiBscnRiLCByZWQgZGlhZ29uYWxzICovCisJCQkJKihvdXRwdXQgKyBBRCAoeCwgeSwgdncpICsgR1JFRU4pID0gKChpbnQpICoob3V0cHV0ICsgQUQgKHggLSAxLCB5LCB2dykgKyBHUkVFTikgKyAoaW50KSAqKG91dHB1dCArIEFEICh4ICsgMSwgeSwgdncpICsgR1JFRU4pICsgKGludCkgKihvdXRwdXQgKyBBRCAoeCwgeSAtIDEsIHZ3KSArIEdSRUVOKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHgsIHkgKyAxLCB2dykgKyBHUkVFTikpID4+IDI7CisJCQkJKihvdXRwdXQgKyBBRCAoeCwgeSwgdncpICsgUkVEKSA9ICgoaW50KSAqKG91dHB1dCArIEFEICh4IC0gMSwgeSAtIDEsIHZ3KSArIFJFRCkgKyAoaW50KSAqKG91dHB1dCArIEFEICh4IC0gMSwgeSArIDEsIHZ3KSArIFJFRCkgKyAoaW50KSAqKG91dHB1dCArIEFEICh4ICsgMSwgeSAtIDEsIHZ3KSArIFJFRCkgKyAoaW50KSAqKG91dHB1dCArIEFEICh4ICsgMSwgeSArIDEsIHZ3KSArIFJFRCkpID4+IDI7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMjoJLyogcmVkLiBncmVlbiBscnRiLCBibHVlIGRpYWdvbmFscyAqLworCQkJCSoob3V0cHV0ICsgQUQgKHgsIHksIHZ3KSArIEdSRUVOKSA9ICgoaW50KSAqKG91dHB1dCArIEFEICh4IC0gMSwgeSwgdncpICsgR1JFRU4pICsgKGludCkgKihvdXRwdXQgKyBBRCAoeCArIDEsIHksIHZ3KSArIEdSRUVOKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHgsIHkgLSAxLCB2dykgKyBHUkVFTikgKyAoaW50KSAqKG91dHB1dCArIEFEICh4LCB5ICsgMSwgdncpICsgR1JFRU4pKSA+PiAyOworCQkJCSoob3V0cHV0ICsgQUQgKHgsIHksIHZ3KSArIEJMVUUpID0gKChpbnQpICoob3V0cHV0ICsgQUQgKHggLSAxLCB5IC0gMSwgdncpICsgQkxVRSkgKyAoaW50KSAqKG91dHB1dCArIEFEICh4ICsgMSwgeSAtIDEsIHZ3KSArIEJMVUUpICsgKGludCkgKihvdXRwdXQgKyBBRCAoeCAtIDEsIHkgKyAxLCB2dykgKyBCTFVFKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHggKyAxLCB5ICsgMSwgdncpICsgQkxVRSkpID4+IDI7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMzoJLyogZ3JlZW4uIHJlZCBsciwgYmx1ZSB0YiAqLworCQkJCSoob3V0cHV0ICsgQUQgKHgsIHksIHZ3KSArIFJFRCkgPSAoKGludCkgKihvdXRwdXQgKyBBRCAoeCAtIDEsIHksIHZ3KSArIFJFRCkgKyAoaW50KSAqKG91dHB1dCArIEFEICh4ICsgMSwgeSwgdncpICsgUkVEKSkgPj4gMTsKKwkJCQkqKG91dHB1dCArIEFEICh4LCB5LCB2dykgKyBCTFVFKSA9ICgoaW50KSAqKG91dHB1dCArIEFEICh4LCB5IC0gMSwgdncpICsgQkxVRSkgKyAoaW50KSAqKG91dHB1dCArIEFEICh4LCB5ICsgMSwgdncpICsgQkxVRSkpID4+IDE7CisJCQkJYnJlYWs7CisJCQl9CS8qIHN3aXRjaCAqLworCQl9CQkvKiBmb3IgeCAqLworCX0JCQkvKiBmb3IgeSAgLSBlbmQgZGVtb3NhaWMgICovCisKKwkvKiBmaXggdG9wIGFuZCBib3R0b20gcm93LCBsZWZ0IGFuZCByaWdodCBzaWRlICovCisJaSA9IHZ3ICogMzsKKwltZW1jcHkgKG91dHB1dCwgKG91dHB1dCArIGkpLCBpKTsKKwltZW1jcHkgKChvdXRwdXQgKyAodmggKiBpKSksIChvdXRwdXQgKyAoKHZoIC0gMSkgKiBpKSksIGkpOworCWZvciAoeSA9IDA7IHkgPCB2aDsgeSsrKSB7CisJCWkgPSB5ICogdncgKiAzOworCQltZW1jcHkgKChvdXRwdXQgKyBpKSwgKG91dHB1dCArIGkgKyAzKSwgMyk7CisJCW1lbWNweSAoKG91dHB1dCArIGkgKyAodncgKiAzKSksIChvdXRwdXQgKyBpICsgKHZ3IC0gMSkgKiAzKSwgMyk7CisJfQorCisJLyogIHByb2Nlc3MgYWxsIHJhdyBkYXRhLCB0aGVuIHRyaW0gdG8gc2l6ZSBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoKHN0djY4MC0+dndpZHRoID09IDE2MCkgfHwgKHN0djY4MC0+dndpZHRoID09IDE3NikpICB7CisJCWkgPSAwOworCQlmb3IgKHkgPSAwOyB5IDwgdmg7IHkrKykgeworCQkJaWYgKCEoeSAmIDEpKSB7CisJCQkJZm9yICh4ID0gMDsgeCA8IHZ3OyB4KyspIHsKKwkJCQkJcCA9ICh5ICogdncgKyB4KSAqIDM7CisJCQkJCWlmICghKHggJiAxKSkgeworCQkJCQkJKihvdXRwdXQgKyBpKSA9ICoob3V0cHV0ICsgcCk7CisJCQkJCQkqKG91dHB1dCArIGkgKyAxKSA9ICoob3V0cHV0ICsgcCArIDEpOworCQkJCQkJKihvdXRwdXQgKyBpICsgMikgPSAqKG91dHB1dCArIHAgKyAyKTsKKwkJCQkJCWkgKz0gMzsKKwkJCQkJfQorCQkJCX0gIC8qIGZvciB4ICovCisJCQl9CisJCX0gIC8qIGZvciB5ICovCisJfQorCS8qIHJlc2V0IHRvIHByb3BlciB3aWR0aCAqLworCWlmICgoc3R2NjgwLT52d2lkdGggPT0gMTYwKSkgeworCQl2dyA9IDE2MDsKKwkJdmggPSAxMjA7CisJfQorCWlmICgoc3R2NjgwLT52d2lkdGggPT0gMTc2KSkgeworCQl2dyA9IDE3NjsKKwkJdmggPSAxNDQ7CisJfQorCisJLyogb3V0cHV0IGlzIFJHQjsgc29tZSBwcm9ncmFtcyB3YW50IEJHUiAgKi8KKwkvKiBzd2FwUkdCX29uPTAgLT4gcHJvZ3JhbSBkZWNpZGVzOyAgc3dhcFJHQl9vbj0xLCBhbHdheXMgc3dhcCAqLworCS8qIHN3YXBSR0Jfb249LTEsIG5ldmVyIHN3YXAgKi8KKwlpZiAoKChzd2FwUkdCID09IDEpICYmIChzd2FwUkdCX29uICE9IC0xKSkgfHwgKHN3YXBSR0Jfb24gPT0gMSkpIHsKKwkJZm9yICh5ID0gMDsgeSA8IHZoOyB5KyspIHsKKwkJCWZvciAoeCA9IDA7IHggPCB2dzsgeCsrKSB7CisJCQkJaSA9ICh5ICogdncgKyB4KSAqIDM7CisJCQkJKih0ZW1wKSA9ICoob3V0cHV0ICsgaSk7CisJCQkJKihvdXRwdXQgKyBpKSA9ICoob3V0cHV0ICsgaSArIDIpOworCQkJCSoob3V0cHV0ICsgaSArIDIpID0gKih0ZW1wKTsKKwkJCX0KKwkJfQorCX0KKwkvKiBicmlnaHRuZXNzICovCisJaWYgKHN0djY4MC0+Y2hnYnJpZ2h0ID09IDEpIHsKKwkJaWYgKHN0djY4MC0+YnJpZ2h0bmVzcyA+PSAzMjc2NykgeworCQkJcCA9IChzdHY2ODAtPmJyaWdodG5lc3MgLSAzMjc2NykgLyAyNTY7CisJCQlmb3IgKHggPSAwOyB4IDwgKHZ3ICogdmggKiAzKTsgeCsrKSB7CisJCQkJaWYgKCgqKG91dHB1dCArIHgpICsgKHVuc2lnbmVkIGNoYXIpIHApID4gMjU1KQorCQkJCQkqKG91dHB1dCArIHgpID0gMjU1OworCQkJCWVsc2UKKwkJCQkJKihvdXRwdXQgKyB4KSArPSAodW5zaWduZWQgY2hhcikgcDsKKwkJCX0JLyogZm9yICovCisJCX0gZWxzZSB7CisJCQlwID0gKDMyNzY3IC0gc3R2NjgwLT5icmlnaHRuZXNzKSAvIDI1NjsKKwkJCWZvciAoeCA9IDA7IHggPCAodncgKiB2aCAqIDMpOyB4KyspIHsKKwkJCQlpZiAoKHVuc2lnbmVkIGNoYXIpIHAgPiAqKG91dHB1dCArIHgpKQorCQkJCQkqKG91dHB1dCArIHgpID0gMDsKKwkJCQllbHNlCisJCQkJCSoob3V0cHV0ICsgeCkgLT0gKHVuc2lnbmVkIGNoYXIpIHA7CisJCQl9CS8qIGZvciAqLworCQl9CQkvKiBlbHNlICovCisJfQorCS8qIGlmICovCisJZnJhbWUtPmN1cnBpeCA9IDA7CisJZnJhbWUtPmN1cmxpbmVwaXggPSAwOworCWZyYW1lLT5ncmFic3RhdGUgPSBGUkFNRV9ET05FOworCXN0djY4MC0+ZnJhbWVjb3VudCsrOworCXN0djY4MC0+cmVhZGNvdW50Kys7CisJaWYgKHN0djY4MC0+ZnJhbWVbKHN0djY4MC0+Y3VyZnJhbWUgKyAxKSAmIChTVFY2ODBfTlVNRlJBTUVTIC0gMSldLmdyYWJzdGF0ZSA9PSBGUkFNRV9SRUFEWSkgeworCQlzdHY2ODAtPmN1cmZyYW1lID0gKHN0djY4MC0+Y3VyZnJhbWUgKyAxKSAmIChTVFY2ODBfTlVNRlJBTUVTIC0gMSk7CisJfQorCit9CQkJCS8qIGJheWVyX3Vuc2h1ZmZsZSAqLworCisvKioqKioqKiAgZW5kIHJvdXRpbmVzIGZyb20gdGhlIHBlbmNhbSBwcm9ncmFtICAqKioqKioqKiovCisKK3N0YXRpYyBpbnQgc3R2NjgwX25ld2ZyYW1lIChzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwLCBpbnQgZnJhbWVucikKK3sKKwlpbnQgZXJyb3JzID0gMDsKKworCXdoaWxlIChzdHY2ODAtPnN0cmVhbWluZyAmJiAoc3R2NjgwLT5mcmFtZVtmcmFtZW5yXS5ncmFic3RhdGUgPT0gRlJBTUVfUkVBRFkgfHwgc3R2NjgwLT5mcmFtZVtmcmFtZW5yXS5ncmFic3RhdGUgPT0gRlJBTUVfR1JBQkJJTkcpKSB7CisJCWlmICghc3R2NjgwLT5mcmFtZVtmcmFtZW5yXS5jdXJwaXgpIHsKKwkJCWVycm9ycysrOworCQl9CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSAoc3R2NjgwLT53cSwgKHN0djY4MC0+c2NyYXRjaFtzdHY2ODAtPnNjcmF0Y2hfdXNlXS5zdGF0ZSA9PSBCVUZGRVJfUkVBRFkpKTsKKworCQlpZiAoc3R2NjgwLT5udWxscGFja2V0cyA+IFNUVjY4MF9NQVhfTlVMTFBBQ0tFVFMpIHsKKwkJCXN0djY4MC0+bnVsbHBhY2tldHMgPSAwOworCQkJUERFQlVHICgyLCAiU1RWKGkpOiB0b28gbWFueSBudWxsIGxlbmd0aCBwYWNrZXRzLCByZXN0YXJ0aW5nIGNhcHR1cmUiKTsKKwkJCXN0djY4MF9zdG9wX3N0cmVhbSAoc3R2NjgwKTsKKwkJCXN0djY4MF9zdGFydF9zdHJlYW0gKHN0djY4MCk7CisJCX0gZWxzZSB7CisJCQlpZiAoc3R2NjgwLT5zY3JhdGNoW3N0djY4MC0+c2NyYXRjaF91c2VdLnN0YXRlICE9IEJVRkZFUl9SRUFEWSkgeworCQkJCXN0djY4MC0+ZnJhbWVbZnJhbWVucl0uZ3JhYnN0YXRlID0gRlJBTUVfRVJST1I7CisJCQkJUERFQlVHICgyLCAiU1RWKGUpOiBGUkFNRV9FUlJPUiBpbiBfbmV3ZnJhbWUiKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCXN0djY4MC0+c2NyYXRjaFtzdHY2ODAtPnNjcmF0Y2hfdXNlXS5zdGF0ZSA9IEJVRkZFUl9CVVNZOworCisJCQliYXllcl91bnNodWZmbGUgKHN0djY4MCwgJnN0djY4MC0+c2NyYXRjaFtzdHY2ODAtPnNjcmF0Y2hfdXNlXSk7CisKKwkJCXN0djY4MC0+c2NyYXRjaFtzdHY2ODAtPnNjcmF0Y2hfdXNlXS5zdGF0ZSA9IEJVRkZFUl9VTlVTRUQ7CisJCQlzdHY2ODAtPnNjcmF0Y2hfdXNlKys7CisJCQlpZiAoc3R2NjgwLT5zY3JhdGNoX3VzZSA+PSBTVFY2ODBfTlVNU0NSQVRDSCkKKwkJCQlzdHY2ODAtPnNjcmF0Y2hfdXNlID0gMDsKKwkJCWlmIChlcnJvcnMgPiBTVFY2ODBfTUFYX0VSUk9SUykgeworCQkJCWVycm9ycyA9IDA7CisJCQkJUERFQlVHICgyLCAiU1RWKGkpOiB0b28gbWFueSBlcnJvcnMsIHJlc3RhcnRpbmcgY2FwdHVyZSIpOworCQkJCXN0djY4MF9zdG9wX3N0cmVhbSAoc3R2NjgwKTsKKwkJCQlzdHY2ODBfc3RhcnRfc3RyZWFtIChzdHY2ODApOworCQkJfQorCQl9CQkvKiBlbHNlICovCisJfQkJCS8qIHdoaWxlICovCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZpZGVvNExpbnV4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHN0dl9vcGVuIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCB1c2Jfc3R2ICpzdHY2ODAgPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCWludCBlcnIgPSAwOworCisJLyogd2UgYXJlIGNhbGxlZCB3aXRoIHRoZSBCS0wgaGVsZCAqLworCXN0djY4MC0+dXNlciA9IDE7CisJZXJyID0gc3R2X2luaXQgKHN0djY4MCk7CS8qIG1haW4gaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgY2FtZXJhICovCisKKwlpZiAoZXJyID49IDApIHsKKwkJc3R2NjgwLT5mYnVmID0gcnZtYWxsb2MgKHN0djY4MC0+bWF4ZnJhbWVzaXplICogU1RWNjgwX05VTUZSQU1FUyk7CisJCWlmICghc3R2NjgwLT5mYnVmKSB7CisJCQlQREVCVUcgKDAsICJTVFYoZSk6IENvdWxkIG5vdCBydm1hbGxvYyBmcmFtZSBidWZlciIpOworCQkJZXJyID0gLUVOT01FTTsKKwkJfQorCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBkZXY7CisJfQorCWlmIChlcnIpCisJCXN0djY4MC0+dXNlciA9IDA7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHN0dl9jbG9zZSAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2Jfc3R2ICpzdHY2ODAgPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFNUVjY4MF9OVU1GUkFNRVM7IGkrKykKKwkJc3R2NjgwLT5mcmFtZVtpXS5ncmFic3RhdGUgPSBGUkFNRV9VTlVTRUQ7CisJaWYgKHN0djY4MC0+c3RyZWFtaW5nKQorCQlzdHY2ODBfc3RvcF9zdHJlYW0gKHN0djY4MCk7CisKKwlpZiAoKGkgPSBzdHZfc3RvcF92aWRlbyAoc3R2NjgwKSkgPCAwKQorCQlQREVCVUcgKDEsICJTVFYoZSk6IHN0b3BfdmlkZW8gZmFpbGVkIGluIHN0dl9jbG9zZSIpOworCisJcnZmcmVlIChzdHY2ODAtPmZidWYsIHN0djY4MC0+bWF4ZnJhbWVzaXplICogU1RWNjgwX05VTUZSQU1FUyk7CisJc3R2NjgwLT51c2VyID0gMDsKKworCWlmIChzdHY2ODAtPnJlbW92ZWQpIHsKKwkJa2ZyZWUgKHN0djY4MCk7CisJCXN0djY4MCA9IE5VTEw7CisJCVBERUJVRyAoMCwgIlNUVihpKTogZGV2aWNlIHVucmVnaXN0ZXJlZCIpOworCX0KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djY4MF9kb19pb2N0bCAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9zdHYgKnN0djY4MCA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCisJaWYgKCFzdHY2ODAtPnVkZXYpCisJCXJldHVybiAtRUlPOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFZJRElPQ0dDQVA6eworCQkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKmIgPSBhcmc7CisKKwkJCXN0cmNweSAoYi0+bmFtZSwgc3R2NjgwLT5jYW1lcmFfbmFtZSk7CisJCQliLT50eXBlID0gVklEX1RZUEVfQ0FQVFVSRTsKKwkJCWItPmNoYW5uZWxzID0gMTsKKwkJCWItPmF1ZGlvcyA9IDA7CisJCQliLT5tYXh3aWR0aCA9IHN0djY4MC0+bWF4d2lkdGg7CisJCQliLT5tYXhoZWlnaHQgPSBzdHY2ODAtPm1heGhlaWdodDsKKwkJCWItPm1pbndpZHRoID0gc3R2NjgwLT5tYXh3aWR0aCAvIDI7CisJCQliLT5taW5oZWlnaHQgPSBzdHY2ODAtPm1heGhlaWdodCAvIDI7CisJCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgVklESU9DR0NIQU46eworCQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnYgPSBhcmc7CisKKwkJCWlmICh2LT5jaGFubmVsICE9IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl2LT5mbGFncyA9IDA7CisJCQl2LT50dW5lcnMgPSAwOworCQkJdi0+dHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOworCQkJc3RyY3B5ICh2LT5uYW1lLCAiU1RWIENhbWVyYSIpOworCQkJcmV0dXJuIDA7CisJCX0KKwljYXNlIFZJRElPQ1NDSEFOOnsKKwkJCXN0cnVjdCB2aWRlb19jaGFubmVsICp2ID0gYXJnOworCQkJaWYgKHYtPmNoYW5uZWwgIT0gMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXJldHVybiAwOworCQl9CisJY2FzZSBWSURJT0NHUElDVDp7CisJCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcCA9IGFyZzsKKworCQkJc3R2NjgwX2dldF9waWN0IChzdHY2ODAsIHApOworCQkJcmV0dXJuIDA7CisJCX0KKwljYXNlIFZJRElPQ1NQSUNUOnsKKwkJCXN0cnVjdCB2aWRlb19waWN0dXJlICpwID0gYXJnOworCisJCQlpZiAoc3R2NjgwX3NldF9waWN0IChzdHY2ODAsIHApKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIDA7CisJCX0KKwljYXNlIFZJRElPQ1NXSU46eworCQkJc3RydWN0IHZpZGVvX3dpbmRvdyAqdncgPSBhcmc7CisKKwkJCWlmICh2dy0+ZmxhZ3MpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAodnctPmNsaXBjb3VudCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmICh2dy0+d2lkdGggIT0gc3R2NjgwLT52d2lkdGgpIHsKKwkJCQlpZiAoc3R2NjgwX3NldF9zaXplIChzdHY2ODAsIHZ3LT53aWR0aCwgdnctPmhlaWdodCkpIHsKKwkJCQkJUERFQlVHICgyLCAiU1RWKGUpOiBmYWlsZWQgKGZyb20gdXNlcikgc2V0IHNpemUgaW4gVklESU9DU1dJTiIpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgVklESU9DR1dJTjp7CisJCQlzdHJ1Y3QgdmlkZW9fd2luZG93ICp2dyA9IGFyZzsKKworCQkJdnctPnggPSAwOwkvKiBGSVhNRSAqLworCQkJdnctPnkgPSAwOworCQkJdnctPmNocm9tYWtleSA9IDA7CisJCQl2dy0+ZmxhZ3MgPSAwOworCQkJdnctPmNsaXBjb3VudCA9IDA7CisJCQl2dy0+d2lkdGggPSBzdHY2ODAtPnZ3aWR0aDsKKwkJCXZ3LT5oZWlnaHQgPSBzdHY2ODAtPnZoZWlnaHQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgVklESU9DR01CVUY6eworCQkJc3RydWN0IHZpZGVvX21idWYgKnZtID0gYXJnOworCQkJaW50IGk7CisKKwkJCW1lbXNldCAodm0sIDAsIHNpemVvZiAoKnZtKSk7CisJCQl2bS0+c2l6ZSA9IFNUVjY4MF9OVU1GUkFNRVMgKiBzdHY2ODAtPm1heGZyYW1lc2l6ZTsKKwkJCXZtLT5mcmFtZXMgPSBTVFY2ODBfTlVNRlJBTUVTOworCQkJZm9yIChpID0gMDsgaSA8IFNUVjY4MF9OVU1GUkFNRVM7IGkrKykKKwkJCQl2bS0+b2Zmc2V0c1tpXSA9IHN0djY4MC0+bWF4ZnJhbWVzaXplICogaTsKKwkJCXJldHVybiAwOworCQl9CisJY2FzZSBWSURJT0NNQ0FQVFVSRTp7CisJCQlzdHJ1Y3QgdmlkZW9fbW1hcCAqdm0gPSBhcmc7CisKKwkJCWlmICh2bS0+Zm9ybWF0ICE9IFNUVl9WSURFT19QQUxFVFRFKSB7CisJCQkJUERFQlVHICgyLCAiU1RWKGkpOiBWSURJT0NNQ0FQVFVSRSB2bS5mb3JtYXQgKCVpKSAhPSBWSURFT19QQUxFVFRFICglaSkiLAorCQkJCQl2bS0+Zm9ybWF0LCBTVFZfVklERU9fUEFMRVRURSk7CisJCQkJaWYgKCh2bS0+Zm9ybWF0ID09IDMpICYmIChzd2FwUkdCX29uID09IDApKSAgeworCQkJCQlQREVCVUcgKDIsICJTVFYoaSk6IFZJRElPQ01DQVBUVVJFIHN3YXBSR0IgaXMgKGF1dG8pIE9OIik7CisJCQkJCS8qIHRoaXMgbWF5IGZpeCB0aG9zZSBhcHBzIChlLmcuLCB4YXd0dikgdGhhdCB3YW50IEJHUiAqLworCQkJCQlzd2FwUkdCID0gMTsKKwkJCQl9CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlpZiAodm0tPmZyYW1lID49IFNUVjY4MF9OVU1GUkFNRVMpIHsKKwkJCQlQREVCVUcgKDIsICJTVFYoZSk6IFZJRElPQ01DQVBUVVJFIHZtLmZyYW1lID4gTlVNRlJBTUVTIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlpZiAoKHN0djY4MC0+ZnJhbWVbdm0tPmZyYW1lXS5ncmFic3RhdGUgPT0gRlJBTUVfRVJST1IpCisJCQkgICAgfHwgKHN0djY4MC0+ZnJhbWVbdm0tPmZyYW1lXS5ncmFic3RhdGUgPT0gRlJBTUVfR1JBQkJJTkcpKSB7CisJCQkJUERFQlVHICgyLCAiU1RWKGUpOiBWSURJT0NNQ0FQVFVSRSBncmFic3RhdGUgKCVpKSBlcnJvciIsCisJCQkJCXN0djY4MC0+ZnJhbWVbdm0tPmZyYW1lXS5ncmFic3RhdGUpOworCQkJCXJldHVybiAtRUJVU1k7CisJCQl9CisJCQkvKiBJcyB0aGlzIGFjY29yZGluZyB0byB0aGUgdjRsIHNwZWM/Pz8gKi8KKwkJCWlmIChzdHY2ODAtPnZ3aWR0aCAhPSB2bS0+d2lkdGgpIHsKKwkJCQlpZiAoc3R2NjgwX3NldF9zaXplIChzdHY2ODAsIHZtLT53aWR0aCwgdm0tPmhlaWdodCkpIHsKKwkJCQkJUERFQlVHICgyLCAiU1RWKGUpOiBWSURJT0NNQ0FQVFVSRSBzZXRfc2l6ZSBmYWlsZWQiKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJfQorCQkJc3R2NjgwLT5mcmFtZVt2bS0+ZnJhbWVdLmdyYWJzdGF0ZSA9IEZSQU1FX1JFQURZOworCisJCQlpZiAoIXN0djY4MC0+c3RyZWFtaW5nKQorCQkJCXN0djY4MF9zdGFydF9zdHJlYW0gKHN0djY4MCk7CisKKwkJCXJldHVybiAwOworCQl9CisJY2FzZSBWSURJT0NTWU5DOnsKKwkJCWludCAqZnJhbWUgPSBhcmc7CisJCQlpbnQgcmV0ID0gMDsKKworCQkJaWYgKCpmcmFtZSA8IDAgfHwgKmZyYW1lID49IFNUVjY4MF9OVU1GUkFNRVMpIHsKKwkJCQlQREVCVUcgKDIsICJTVFYoZSk6IEJhZCBmcmFtZSAjIGluIFZJRElPQ1NZTkMiKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCXJldCA9IHN0djY4MF9uZXdmcmFtZSAoc3R2NjgwLCAqZnJhbWUpOworCQkJc3R2NjgwLT5mcmFtZVsqZnJhbWVdLmdyYWJzdGF0ZSA9IEZSQU1FX1VOVVNFRDsKKwkJCXJldHVybiByZXQ7CisJCX0KKwljYXNlIFZJRElPQ0dGQlVGOnsKKwkJCXN0cnVjdCB2aWRlb19idWZmZXIgKnZiID0gYXJnOworCisJCQltZW1zZXQgKHZiLCAwLCBzaXplb2YgKCp2YikpOworCQkJcmV0dXJuIDA7CisJCX0KKwljYXNlIFZJRElPQ0tFWToKKwkJcmV0dXJuIDA7CisJY2FzZSBWSURJT0NDQVBUVVJFOgorCQl7CisJCQlQREVCVUcgKDIsICJTVFYoZSk6IFZJRElPQ0NBUFRVUkUgZmFpbGVkIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCWNhc2UgVklESU9DU0ZCVUY6CisJY2FzZSBWSURJT0NHVFVORVI6CisJY2FzZSBWSURJT0NTVFVORVI6CisJY2FzZSBWSURJT0NHRlJFUToKKwljYXNlIFZJRElPQ1NGUkVROgorCWNhc2UgVklESU9DR0FVRElPOgorCWNhc2UgVklESU9DU0FVRElPOgorCQlyZXR1cm4gLUVJTlZBTDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCX0JCQkvKiBlbmQgc3dpdGNoICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHY2ODBfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLCBzdHY2ODBfZG9faW9jdGwpOworfQorCitzdGF0aWMgaW50IHN0djY4MF9tbWFwIChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2Jfc3R2ICpzdHY2ODAgPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgc2l6ZSAgPSB2bWEtPnZtX2VuZC12bWEtPnZtX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgcGFnZSwgcG9zOworCisJZG93biAoJnN0djY4MC0+bG9jayk7CisKKwlpZiAoc3R2NjgwLT51ZGV2ID09IE5VTEwpIHsKKwkJdXAgKCZzdHY2ODAtPmxvY2spOworCQlyZXR1cm4gLUVJTzsKKwl9CisJaWYgKHNpemUgPiAoKChTVFY2ODBfTlVNRlJBTUVTICogc3R2NjgwLT5tYXhmcmFtZXNpemUpICsgUEFHRV9TSVpFIC0gMSkKKwkJICAgICYgfihQQUdFX1NJWkUgLSAxKSkpIHsKKwkJdXAgKCZzdHY2ODAtPmxvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcG9zID0gKHVuc2lnbmVkIGxvbmcpIHN0djY4MC0+ZmJ1ZjsKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJcGFnZSA9IHZtYWxsb2NfdG9fcGZuKCh2b2lkICopcG9zKTsKKwkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwYWdlLCBQQUdFX1NJWkUsIFBBR0VfU0hBUkVEKSkgeworCQkJdXAgKCZzdHY2ODAtPmxvY2spOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwkJc3RhcnQgKz0gUEFHRV9TSVpFOworCQlwb3MgKz0gUEFHRV9TSVpFOworCQlpZiAoc2l6ZSA+IFBBR0VfU0laRSkKKwkJCXNpemUgLT0gUEFHRV9TSVpFOworCQllbHNlCisJCQlzaXplID0gMDsKKwl9CisJdXAgKCZzdHY2ODAtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0djY4MF9yZWFkIChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGludCByZWFsY291bnQgPSBjb3VudDsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGludCBpOworCisJaWYgKFNUVjY4MF9OVU1GUkFNRVMgIT0gMikgeworCQlQREVCVUcgKDAsICJTVFYoZSk6IFNUVjY4MF9OVU1GUkFNRVMgbmVlZHMgdG8gYmUgMiEiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoc3R2NjgwLT51ZGV2ID09IE5VTEwpCisJCXJldHVybiAtRUlPOworCWlmIChyZWFsY291bnQgPiAoc3R2NjgwLT52d2lkdGggKiBzdHY2ODAtPnZoZWlnaHQgKiAzKSkKKwkJcmVhbGNvdW50ID0gc3R2NjgwLT52d2lkdGggKiBzdHY2ODAtPnZoZWlnaHQgKiAzOworCisJLyogU2hvdWxkbid0IGhhcHBlbjogKi8KKwlpZiAoc3R2NjgwLT5mcmFtZVswXS5ncmFic3RhdGUgPT0gRlJBTUVfR1JBQkJJTkcpIHsKKwkJUERFQlVHICgyLCAiU1RWKGUpOiBGUkFNRV9HUkFCQklORyBpbiBzdHY2ODBfcmVhZCIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlzdHY2ODAtPmZyYW1lWzBdLmdyYWJzdGF0ZSA9IEZSQU1FX1JFQURZOworCXN0djY4MC0+ZnJhbWVbMV0uZ3JhYnN0YXRlID0gRlJBTUVfVU5VU0VEOworCXN0djY4MC0+Y3VyZnJhbWUgPSAwOworCisJaWYgKCFzdHY2ODAtPnN0cmVhbWluZykKKwkJc3R2NjgwX3N0YXJ0X3N0cmVhbSAoc3R2NjgwKTsKKworCWlmICghc3R2NjgwLT5zdHJlYW1pbmcpIHsKKwkJcmV0ID0gc3R2NjgwX25ld2ZyYW1lIChzdHY2ODAsIDApOwkvKiByZXQgc2hvdWxkID0gMCAqLworCX0KKworCXJldCA9IHN0djY4MF9uZXdmcmFtZSAoc3R2NjgwLCAwKTsKKworCWlmICghcmV0KSB7CisJCWlmICgoaSA9IGNvcHlfdG9fdXNlciAoYnVmLCBzdHY2ODAtPmZyYW1lWzBdLmRhdGEsIHJlYWxjb3VudCkpICE9IDApIHsKKwkJCVBERUJVRyAoMiwgIlNUVihlKTogY29weV90b191c2VyIGZyYW1lIDAgZmFpbGVkLCByZXQgY291bnQgPSAlbGkiLCBpKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJfSBlbHNlIHsKKwkJcmVhbGNvdW50ID0gcmV0OworCX0KKwlzdHY2ODAtPmZyYW1lWzBdLmdyYWJzdGF0ZSA9IEZSQU1FX1VOVVNFRDsKKwlyZXR1cm4gcmVhbGNvdW50OworfQkJCQkvKiBzdHY2ODBfcmVhZCAqLworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzdHY2ODBfZm9wcyA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkub3BlbiA9CQlzdHZfb3BlbiwKKwkucmVsZWFzZSA9ICAgICAJc3R2X2Nsb3NlLAorCS5yZWFkID0JCXN0djY4MF9yZWFkLAorCS5tbWFwID0JCXN0djY4MF9tbWFwLAorCS5pb2N0bCA9ICAgICAgICBzdHY2ODBfaW9jdGwsCisJLmxsc2VlayA9ICAgICAgIG5vX2xsc2VlaywKK307CitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBzdHY2ODBfdGVtcGxhdGUgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJIlNUVjA2ODAgVVNCIGNhbWVyYSIsCisJLnR5cGUgPQkJVklEX1RZUEVfQ0FQVFVSRSwKKwkuaGFyZHdhcmUgPQlWSURfSEFSRFdBUkVfU0U0MDEsCisJLmZvcHMgPSAgICAgICAgICZzdHY2ODBfZm9wcywKKwkucmVsZWFzZSA9CXZpZGVvX2RldmljZV9yZWxlYXNlLAorCS5taW5vciA9IAktMSwKK307CisKK3N0YXRpYyBpbnQgc3R2NjgwX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwID0gTlVMTDsKKwljaGFyICpjYW1lcmFfbmFtZSA9IE5VTEw7CisJaW50IHJldHZhbCA9IDA7CisKKwkvKiBXZSBkb24ndCBoYW5kbGUgbXVsdGktY29uZmlnIGNhbWVyYXMgKi8KKwlpZiAoZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKSB7CisJCVBERUJVRyAoMCwgIlNUVihlKTogTnVtYmVyIG9mIENvbmZpZ3VyYXRpb25zICE9IDEiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaW50ZXJmYWNlID0gJmludGYtPmFsdHNldHRpbmdbMF07CisJLyogSXMgaXQgYSBTVFY2ODA/ICovCisJaWYgKChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFVTQl9QRU5DQU1fVkVORE9SX0lEKSAmJgorCSAgICAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gVVNCX1BFTkNBTV9QUk9EVUNUX0lEKSkgeworCQljYW1lcmFfbmFtZSA9ICJTVFYwNjgwIjsKKwkJUERFQlVHICgwLCAiU1RWKGkpOiBTVFYwNjgwIGNhbWVyYSBmb3VuZC4iKTsKKwl9IGVsc2UgeworCQlQREVCVUcgKDAsICJTVFYoZSk6IFZlbmRvci9Qcm9kdWN0IElEIGRvIG5vdCBtYXRjaCBTVFYwNjgwIHZhbHVlcy4iKTsKKwkJUERFQlVHICgwLCAiU1RWKGUpOiBDaGVjayB0aGF0IHRoZSBTVFYwNjgwIGNhbWVyYSBpcyBjb25uZWN0ZWQgdG8gdGhlIGNvbXB1dGVyLiIpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycm9yOworCX0KKwkvKiBXZSBmb3VuZCBvbmUgKi8KKwlpZiAoKHN0djY4MCA9IGttYWxsb2MgKHNpemVvZiAoKnN0djY4MCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJCVBERUJVRyAoMCwgIlNUVihlKTogY291bGRuJ3Qga21hbGxvYyBzdHY2ODAgc3RydWN0LiIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKworCW1lbXNldCAoc3R2NjgwLCAwLCBzaXplb2YgKCpzdHY2ODApKTsKKworCXN0djY4MC0+dWRldiA9IGRldjsKKwlzdHY2ODAtPmNhbWVyYV9uYW1lID0gY2FtZXJhX25hbWU7CisKKwlzdHY2ODAtPnZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAoIXN0djY4MC0+dmRldikgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKwltZW1jcHkoc3R2NjgwLT52ZGV2LCAmc3R2NjgwX3RlbXBsYXRlLCBzaXplb2Yoc3R2NjgwX3RlbXBsYXRlKSk7CisJc3R2NjgwLT52ZGV2LT5kZXYgPSAmaW50Zi0+ZGV2OworCXZpZGVvX3NldF9kcnZkYXRhKHN0djY4MC0+dmRldiwgc3R2NjgwKTsKKworCW1lbWNweSAoc3R2NjgwLT52ZGV2LT5uYW1lLCBzdHY2ODAtPmNhbWVyYV9uYW1lLCBzdHJsZW4gKHN0djY4MC0+Y2FtZXJhX25hbWUpKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkICgmc3R2NjgwLT53cSk7CisJaW5pdF9NVVRFWCAoJnN0djY4MC0+bG9jayk7CisJd21iICgpOworCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSAoc3R2NjgwLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19ucikgPT0gLTEpIHsKKwkJUERFQlVHICgwLCAiU1RWKGUpOiB2aWRlb19yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkIik7CisJCXJldHZhbCA9IC1FSU87CisJCWdvdG8gZXJyb3JfdmRldjsKKwl9CisJUERFQlVHICgwLCAiU1RWKGkpOiByZWdpc3RlcmVkIG5ldyB2aWRlbyBkZXZpY2U6IHZpZGVvJWQiLCBzdHY2ODAtPnZkZXYtPm1pbm9yKTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIHN0djY4MCk7CisJc3R2NjgwX2NyZWF0ZV9zeXNmc19maWxlcyhzdHY2ODAtPnZkZXYpOworCXJldHVybiAwOworCitlcnJvcl92ZGV2OgorCXZpZGVvX2RldmljZV9yZWxlYXNlKHN0djY4MC0+dmRldik7CitlcnJvcjoKKwlrZnJlZShzdHY2ODApOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jfc3R2NjgwX3JlbW92ZV9kaXNjb25uZWN0ZWQgKHN0cnVjdCB1c2Jfc3R2ICpzdHY2ODApCit7CisJaW50IGk7CisKKwlzdHY2ODAtPnVkZXYgPSBOVUxMOworCXN0djY4MC0+ZnJhbWVbMF0uZ3JhYnN0YXRlID0gRlJBTUVfRVJST1I7CisJc3R2NjgwLT5mcmFtZVsxXS5ncmFic3RhdGUgPSBGUkFNRV9FUlJPUjsKKwlzdHY2ODAtPnN0cmVhbWluZyA9IDA7CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUgKCZzdHY2ODAtPndxKTsKKworCWZvciAoaSA9IDA7IGkgPCBTVFY2ODBfTlVNU0JVRjsgaSsrKQorCQlpZiAoc3R2NjgwLT51cmJbaV0pIHsKKwkJCXVzYl9raWxsX3VyYiAoc3R2NjgwLT51cmJbaV0pOworCQkJdXNiX2ZyZWVfdXJiIChzdHY2ODAtPnVyYltpXSk7CisJCQlzdHY2ODAtPnVyYltpXSA9IE5VTEw7CisJCQlrZnJlZSAoc3R2NjgwLT5zYnVmW2ldLmRhdGEpOworCQl9CisJZm9yIChpID0gMDsgaSA8IFNUVjY4MF9OVU1TQ1JBVENIOyBpKyspCisJCWtmcmVlIChzdHY2ODAtPnNjcmF0Y2hbaV0uZGF0YSk7CisJUERFQlVHICgwLCAiU1RWKGkpOiAlcyBkaXNjb25uZWN0ZWQiLCBzdHY2ODAtPmNhbWVyYV9uYW1lKTsKKworCS8qIEZyZWUgdGhlIG1lbW9yeSAqLworCWtmcmVlIChzdHY2ODApOworfQorCitzdGF0aWMgdm9pZCBzdHY2ODBfZGlzY29ubmVjdCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9zdHYgKnN0djY4MCA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisKKwlpZiAoc3R2NjgwKSB7CisJCS8qIFdlIGRvbid0IHdhbnQgcGVvcGxlIHRyeWluZyB0byBvcGVuIHVwIHRoZSBkZXZpY2UgKi8KKwkJaWYgKHN0djY4MC0+dmRldikgeworCQkJc3R2NjgwX3JlbW92ZV9zeXNmc19maWxlcyhzdHY2ODAtPnZkZXYpOworCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2Uoc3R2NjgwLT52ZGV2KTsKKwkJCXN0djY4MC0+dmRldiA9IE5VTEw7CisJCX0KKwkJaWYgKCFzdHY2ODAtPnVzZXIpIHsKKwkJCXVzYl9zdHY2ODBfcmVtb3ZlX2Rpc2Nvbm5lY3RlZCAoc3R2NjgwKTsKKwkJfSBlbHNlIHsKKwkJCXN0djY4MC0+cmVtb3ZlZCA9IDE7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzdHY2ODBfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJzdHY2ODAiLAorCS5wcm9iZSA9CXN0djY4MF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXN0djY4MF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWRldmljZV90YWJsZQorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgTW9kdWxlIHJvdXRpbmVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9zdHY2ODBfaW5pdCAodm9pZCkKK3sKKwlpZiAodXNiX3JlZ2lzdGVyICgmc3R2NjgwX2RyaXZlcikgPCAwKSB7CisJCVBERUJVRyAoMCwgIlNUVihlKTogQ291bGQgbm90IHNldHVwIFNUVjA2ODAgZHJpdmVyIik7CisJCXJldHVybiAtMTsKKwl9CisJUERFQlVHICgwLCAiU1RWKGkpOiB1c2IgY2FtZXJhIGRyaXZlciB2ZXJzaW9uICVzIHJlZ2lzdGVyaW5nIiwgRFJJVkVSX1ZFUlNJT04pOworCisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3N0djY4MF9leGl0ICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgmc3R2NjgwX2RyaXZlcik7CisJUERFQlVHICgwLCAiU1RWKGkpOiBkcml2ZXIgZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0ICh1c2Jfc3R2NjgwX2luaXQpOworbW9kdWxlX2V4aXQgKHVzYl9zdHY2ODBfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9zdHY2ODAuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3N0djY4MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMGUzMTRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvc3R2NjgwLmgKQEAgLTAsMCArMSwyMjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIEZpbGVuYW1lOiBzdHY2ODAuaAorICoKKyAqICBEZXNjcmlwdGlvbjoKKyAqICAgICBUaGlzIGlzIGEgVVNCIGRyaXZlciBmb3IgU1RWMDY4MCBiYXNlZCB1c2IgdmlkZW8gY2FtZXJhcy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHNpemUgb2YgdXNiIHRyYW5zZmVycyAqLworI2RlZmluZSBTVFY2ODBfUEFDS0VUU0laRQk0MDk2CisKKy8qIG51bWJlciBvZiBxdWV1ZWQgYnVsayB0cmFuc2ZlcnMgdG8gdXNlLCBtYXkgaGF2ZSBwcm9ibGVtcyBpZiA+IDEgKi8KKyNkZWZpbmUgU1RWNjgwX05VTVNCVUYJCTEKKworLyogbnVtYmVyIG9mIGZyYW1lcyBzdXBwb3J0ZWQgYnkgdGhlIHY0bCBwYXJ0ICovCisjZGVmaW5lIFNUVjY4MF9OVU1GUkFNRVMJMgorCisvKiBzY3JhdGNoIGJ1ZmZlcnMgZm9yIHBhc3NpbmcgZGF0YSB0byB0aGUgZGVjb2RlcnM6IDIgb3IgNCBhcmUgZ29vZCAqLworI2RlZmluZSBTVFY2ODBfTlVNU0NSQVRDSAkyCisKKy8qIG51bWJlciBvZiBudWwgc2l6ZWQgcGFja2V0cyB0byByZWNlaXZlIGJlZm9yZSBraWNraW5nIHRoZSBjYW1lcmEgKi8KKyNkZWZpbmUgU1RWNjgwX01BWF9OVUxMUEFDS0VUUwkyMDAKKworLyogbnVtYmVyIG9mIGRlY29kaW5nIGVycm9ycyBiZWZvcmUga2lja2luZyB0aGUgY2FtZXJhICovCisjZGVmaW5lIFNUVjY4MF9NQVhfRVJST1JTCTEwMAorCisjZGVmaW5lIFVTQl9QRU5DQU1fVkVORE9SX0lECTB4MDU1MworI2RlZmluZSBVU0JfUEVOQ0FNX1BST0RVQ1RfSUQJMHgwMjAyCisjZGVmaW5lIFBFTkNBTV9USU1FT1VUICAgICAgICAgIDEwMDAKKy8qIGZtdCA0ICovCisjZGVmaW5lIFNUVl9WSURFT19QQUxFVFRFICAgICAgIFZJREVPX1BBTEVUVEVfUkdCMjQKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworCXtVU0JfREVWSUNFIChVU0JfUEVOQ0FNX1ZFTkRPUl9JRCwgVVNCX1BFTkNBTV9QUk9EVUNUX0lEKX0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGRldmljZV90YWJsZSk7CisKK3N0cnVjdCBzdHY2ODBfc2J1ZiB7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKK307CisKK2VudW0geworCUZSQU1FX1VOVVNFRCwJCS8qIFVudXNlZCAobm8gTUNBUFRVUkUpICovCisJRlJBTUVfUkVBRFksCQkvKiBSZWFkeSB0byBzdGFydCBncmFiYmluZyAqLworCUZSQU1FX0dSQUJCSU5HLAkJLyogSW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZ3JhYmJlZCBpbnRvICovCisJRlJBTUVfRE9ORSwJCS8qIEZpbmlzaGVkIGdyYWJiaW5nLCBidXQgbm90IGJlZW4gc3luY2VkIHlldCAqLworCUZSQU1FX0VSUk9SLAkJLyogU29tZXRoaW5nIGJhZCBoYXBwZW5lZCB3aGlsZSBwcm9jZXNzaW5nICovCit9OworCitlbnVtIHsKKwlCVUZGRVJfVU5VU0VELAorCUJVRkZFUl9SRUFEWSwKKwlCVUZGRVJfQlVTWSwKKwlCVUZGRVJfRE9ORSwKK307CisKKy8qIHJhdyBjYW1lcmEgZGF0YSA8LSBzYnVmICh1cmIgdHJhbnNmZXIgYnVmKSAqLworc3RydWN0IHN0djY4MF9zY3JhdGNoIHsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCXZvbGF0aWxlIGludCBzdGF0ZTsKKwlpbnQgb2Zmc2V0OworCWludCBsZW5ndGg7Cit9OworCisvKiBwcm9jZXNzZWQgZGF0YSBmb3IgZGlzcGxheSBlbmRzIHVwIGhlcmUsIGFmdGVyIGJheWVyICovCitzdHJ1Y3Qgc3R2NjgwX2ZyYW1lIHsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOwkvKiBGcmFtZSBidWZmZXIgKi8KKwl2b2xhdGlsZSBpbnQgZ3JhYnN0YXRlOwkvKiBTdGF0ZSBvZiBncmFiYmluZyAqLworCXVuc2lnbmVkIGNoYXIgKmN1cmxpbmU7CisJaW50IGN1cmxpbmVwaXg7CisJaW50IGN1cnBpeDsKK307CisKKy8qIHRoaXMgaXMgYWxtb3N0IHRoZSB2aWRlbyBzdHJ1Y3R1cmUgdXZkX3QsIHdpdGggZXh0cmEgcGFyYW1ldGVycyBmb3Igc3R2ICovCitzdHJ1Y3QgdXNiX3N0diB7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKKworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCisJdW5zaWduZWQgY2hhciBidWxrX2luX2VuZHBvaW50QWRkcjsJLyogX191OCAgdGhlIGFkZHJlc3Mgb2YgdGhlIGJ1bGsgaW4gZW5kcG9pbnQgKi8KKwljaGFyICpjYW1lcmFfbmFtZTsKKworCXVuc2lnbmVkIGludCBWaWRlb01vZGU7CS8qIDB4MDEwMCA9IFZHQSwgMHgwMDAwID0gQ0lGLCAweDAzMDAgPSBRVkdBICovCisJaW50IFN1cHBvcnRlZE1vZGVzOworCWludCBDSUY7CisJaW50IFZHQTsKKwlpbnQgUVZHQTsKKwlpbnQgY3dpZHRoOwkJLyogY2FtZXJhIHdpZHRoICovCisJaW50IGNoZWlnaHQ7CQkvKiBjYW1lcmEgaGVpZ2h0ICovCisJaW50IG1heHdpZHRoOwkJLyogbWF4IHZpZGVvIHdpZHRoICovCisJaW50IG1heGhlaWdodDsJCS8qIG1heCB2aWRlbyBoZWlnaHQgKi8KKwlpbnQgdndpZHRoOwkJLyogY3VycmVudCB3aWR0aCBmb3IgdmlkZW8gd2luZG93ICovCisJaW50IHZoZWlnaHQ7CQkvKiBjdXJyZW50IGhlaWdodCBmb3IgdmlkZW8gd2luZG93ICovCisJdW5zaWduZWQgbG9uZyBpbnQgcmF3YnVmc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGludCBtYXhmcmFtZXNpemU7CS8qIHJhd2J1ZnNpemUgKiAzIGZvciBSR0IgKi8KKworCWludCBvcmlnR2FpbjsKKwlpbnQgb3JpZ01vZGU7CQkvKiBvcmlnaW5hbCBjYW1lcmEgbW9kZSAqLworCisJc3RydWN0IHNlbWFwaG9yZSBsb2NrOwkvKiB0byBsb2NrIHRoZSBzdHJ1Y3R1cmUgKi8KKwlpbnQgdXNlcjsJCS8qIHVzZXIgY291bnQgZm9yIGV4Y2x1c2l2ZSB1c2UgKi8KKwlpbnQgcmVtb3ZlZDsJCS8qIGRldmljZSBkaXNjb25uZWN0ZWQgKi8KKwlpbnQgc3RyZWFtaW5nOwkJLyogQXJlIHdlIHN0cmVhbWluZyB2aWRlbz8gKi8KKwljaGFyICpmYnVmOwkJLyogVmlkZW9kZXYgYnVmZmVyIGFyZWEgKi8KKwlzdHJ1Y3QgdXJiICp1cmJbU1RWNjgwX05VTVNCVUZdOwkvKiAjIG9mIHF1ZXVlZCBidWxrIHRyYW5zZmVycyAqLworCWludCBjdXJmcmFtZTsJCS8qIEN1cnJlbnQgcmVjZWl2aW5nIGZyYW1lICovCisJc3RydWN0IHN0djY4MF9mcmFtZSBmcmFtZVtTVFY2ODBfTlVNRlJBTUVTXTsJLyogIyBmcmFtZXMgc3VwcG9ydGVkIGJ5IHY0bCBwYXJ0ICovCisJaW50IHJlYWRjb3VudDsKKwlpbnQgZnJhbWVjb3VudDsKKwlpbnQgZXJyb3I7CisJaW50IGRyb3BwZWQ7CisJaW50IHNjcmF0Y2hfbmV4dDsKKwlpbnQgc2NyYXRjaF91c2U7CisJaW50IHNjcmF0Y2hfb3ZlcmZsb3c7CisJc3RydWN0IHN0djY4MF9zY3JhdGNoIHNjcmF0Y2hbU1RWNjgwX05VTVNDUkFUQ0hdOwkvKiBmb3IgZGVjb2RlcnMgKi8KKwlzdHJ1Y3Qgc3R2NjgwX3NidWYgc2J1ZltTVFY2ODBfTlVNU0JVRl07CisKKwl1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzczsKKwl1bnNpZ25lZCBpbnQgY2hnYnJpZ2h0OworCXVuc2lnbmVkIGludCB3aGl0ZW5lc3M7CisJdW5zaWduZWQgaW50IGNvbG91cjsKKwl1bnNpZ25lZCBpbnQgY29udHJhc3Q7CisJdW5zaWduZWQgaW50IGh1ZTsKKwl1bnNpZ25lZCBpbnQgcGFsZXR0ZTsKKwl1bnNpZ25lZCBpbnQgZGVwdGg7CS8qIHJnYjI0IGluIGJpdHMgKi8KKworCXdhaXRfcXVldWVfaGVhZF90IHdxOwkvKiBQcm9jZXNzZXMgd2FpdGluZyAqLworCisJaW50IG51bGxwYWNrZXRzOworfTsKKworCitzdGF0aWMgdW5zaWduZWQgY2hhciByZWRbMjU2XSA9IHsgCisJMCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAKKwkxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMjUsIDMwLCAzNSwgMzgsIDQyLCAKKwk0NCwgNDcsIDUwLCA1MywgNTQsIDU3LCA1OSwgNjEsIDYzLCA2NSwgNjcsIDY5LCAKKwk3MSwgNzEsIDczLCA3NSwgNzcsIDc4LCA4MCwgODEsIDgyLCA4NCwgODUsIDg3LCAKKwk4OCwgODksIDkwLCA5MSwgOTMsIDk0LCA5NSwgOTcsIDk4LCA5OCwgOTksIDEwMSwgCisJMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLCAxMTIsIDExMywgCisJMTE0LCAxMTUsIDExNiwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgCisJMTI1LCAxMjUsIDEyNiwgMTI3LCAxMjgsIDEyOSwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgCisJMTM0LCAxMzUsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MCwgMTQxLCAxNDIsIDE0MywgCisJMTQzLCAxNDMsIDE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTAsIDE1MSwgCisJMTUyLCAxNTIsIDE1MiwgMTUzLCAxNTQsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU3LCAxNTgsIDE1OSwgCisJMTU5LCAxNjAsIDE2MSwgMTYxLCAxNjEsIDE2MiwgMTYzLCAxNjMsIDE2NCwgMTY1LCAxNjUsIDE2NiwgCisJMTY3LCAxNjcsIDE2OCwgMTY4LCAxNjksIDE3MCwgMTcwLCAxNzAsIDE3MSwgMTcxLCAxNzIsIDE3MywgCisJMTczLCAxNzQsIDE3NCwgMTc1LCAxNzYsIDE3NiwgMTc3LCAxNzgsIDE3OCwgMTc5LCAxNzksIDE3OSwgCisJMTgwLCAxODAsIDE4MSwgMTgxLCAxODIsIDE4MywgMTgzLCAxODQsIDE4NCwgMTg1LCAxODUsIDE4NiwgCisJMTg3LCAxODcsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg5LCAxOTAsIDE5MCwgMTkxLCAxOTEsIDE5MiwgCisJMTkyLCAxOTMsIDE5MywgMTk0LCAxOTUsIDE5NSwgMTk2LCAxOTYsIDE5NywgMTk3LCAxOTcsIDE5NywgCisJMTk4LCAxOTgsIDE5OSwgMTk5LCAyMDAsIDIwMSwgMjAxLCAyMDIsIDIwMiwgMjAzLCAyMDMsIDIwNCwgCisJMjA0LCAyMDUsIDIwNSwgMjA2LCAyMDYsIDIwNiwgMjA2LCAyMDcsIDIwNywgMjA4LCAyMDgsIDIwOSwgCisJMjA5LCAyMTAsIDIxMCwgMjExLCAyMTEsIDIxMiwgMjEyLCAyMTMsIDIxMywgMjE0LCAyMTQsIDIxNSwgCisJMjE1LCAyMTUsIDIxNSwgMjE2LCAyMTYsIDIxNywgMjE3LCAyMTgsIDIxOCwgMjE4LCAyMTksIDIxOSwgCisJMjIwLCAyMjAsIDIyMSwgMjIxIAorfTsgCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGdyZWVuWzI1Nl0gPSB7CisJMCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKKwkyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjgsIDM0LCAzOSwgNDMsIDQ3LCAKKwk1MCwgNTMsIDU2LCA1OSwgNjEsIDY0LCA2NiwgNjgsIDcxLCA3MywgNzUsIDc3LCAKKwk3OSwgODAsIDgyLCA4NCwgODYsIDg3LCA4OSwgOTEsIDkyLCA5NCwgOTUsIDk3LCAKKwk5OCwgMTAwLCAxMDEsIDEwMiwgMTA0LCAxMDUsIDEwNiwgMTA4LCAxMDksIDExMCwgMTExLCAxMTMsIAorCTExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIAorCTEyNywgMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIAorCTEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLCAxNDQsIDE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIAorCTE1MCwgMTUxLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTYsIDE1NywgMTU4LCAxNTksIAorCTE2MCwgMTYwLCAxNjEsIDE2MiwgMTYzLCAxNjQsIDE2NCwgMTY1LCAxNjYsIDE2NywgMTY3LCAxNjgsIAorCTE2OSwgMTcwLCAxNzAsIDE3MSwgMTcyLCAxNzIsIDE3MywgMTc0LCAxNzUsIDE3NSwgMTc2LCAxNzcsIAorCTE3NywgMTc4LCAxNzksIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgyLCAxODMsIDE4NCwgMTg0LCAxODUsIAorCTE4NiwgMTg2LCAxODcsIDE4NywgMTg4LCAxODksIDE4OSwgMTkwLCAxOTEsIDE5MSwgMTkyLCAxOTMsIAorCTE5MywgMTk0LCAxOTQsIDE5NSwgMTk2LCAxOTYsIDE5NywgMTk4LCAxOTgsIDE5OSwgMTk5LCAyMDAsIAorCTIwMSwgMjAxLCAyMDIsIDIwMiwgMjAzLCAyMDQsIDIwNCwgMjA1LCAyMDUsIDIwNiwgMjA2LCAyMDcsIAorCTIwOCwgMjA4LCAyMDksIDIwOSwgMjEwLCAyMTAsIDIxMSwgMjEyLCAyMTIsIDIxMywgMjEzLCAyMTQsIAorCTIxNCwgMjE1LCAyMTUsIDIxNiwgMjE3LCAyMTcsIDIxOCwgMjE4LCAyMTksIDIxOSwgMjIwLCAyMjAsIAorCTIyMSwgMjIxLCAyMjIsIDIyMiwgMjIzLCAyMjQsIDIyNCwgMjI1LCAyMjUsIDIyNiwgMjI2LCAyMjcsIAorCTIyNywgMjI4LCAyMjgsIDIyOSwgMjI5LCAyMzAsIDIzMCwgMjMxLCAyMzEsIDIzMiwgMjMyLCAyMzMsIAorCTIzMywgMjM0LCAyMzQsIDIzNSwgMjM1LCAyMzYsIDIzNiwgMjM3LCAyMzcsIDIzOCwgMjM4LCAyMzksIAorCTIzOSwgMjQwLCAyNDAsIDI0MSwgMjQxLCAyNDIsIDI0MiwgMjQzLCAyNDMsIDI0MywgMjQ0LCAyNDQsIAorCTI0NSwgMjQ1LCAyNDYsIDI0NiAKK307IAorCitzdGF0aWMgdW5zaWduZWQgY2hhciBibHVlWzI1Nl0gPSB7CisJMCwgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAKKwkyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMzAsIDM3LCA0MiwgNDcsIDUxLCAKKwk1NSwgNTgsIDYxLCA2NCwgNjcsIDcwLCA3MiwgNzQsIDc4LCA4MCwgODIsIDg0LCAKKwk4NiwgODgsIDkwLCA5MiwgOTQsIDk1LCA5NywgMTAwLCAxMDEsIDEwMywgMTA0LCAxMDYsIAorCTEwNywgMTEwLCAxMTEsIDExMiwgMTE0LCAxMTUsIDExNiwgMTE4LCAxMTksIDEyMSwgMTIyLCAxMjQsIAorCTEyNSwgMTI2LCAxMjcsIDEyOCwgMTI5LCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIAorCTEzOSwgMTQwLCAxNDEsIDE0MywgMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIAorCTE1MiwgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OCwgMTU5LCAxNjAsIDE2MSwgMTYyLCAxNjMsIAorCTE2NSwgMTY2LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcxLCAxNzEsIDE3MiwgMTczLCAxNzQsIAorCTE3NiwgMTc2LCAxNzcsIDE3OCwgMTc5LCAxODAsIDE4MCwgMTgxLCAxODIsIDE4MywgMTgzLCAxODQsIAorCTE4NSwgMTg3LCAxODcsIDE4OCwgMTg5LCAxODksIDE5MCwgMTkxLCAxOTIsIDE5MiwgMTkzLCAxOTQsIAorCTE5NCwgMTk1LCAxOTYsIDE5NiwgMTk4LCAxOTksIDIwMCwgMjAwLCAyMDEsIDIwMiwgMjAyLCAyMDMsIAorCTIwNCwgMjA0LCAyMDUsIDIwNSwgMjA2LCAyMDcsIDIwNywgMjA5LCAyMTAsIDIxMCwgMjExLCAyMTIsIAorCTIxMiwgMjEzLCAyMTMsIDIxNCwgMjE1LCAyMTUsIDIxNiwgMjE3LCAyMTcsIDIxOCwgMjE4LCAyMjAsIAorCTIyMSwgMjIxLCAyMjIsIDIyMiwgMjIzLCAyMjQsIDIyNCwgMjI1LCAyMjUsIDIyNiwgMjI2LCAyMjcsIAorCTIyOCwgMjI4LCAyMjksIDIyOSwgMjMxLCAyMzEsIDIzMiwgMjMzLCAyMzMsIDIzNCwgMjM0LCAyMzUsIAorCTIzNSwgMjM2LCAyMzYsIDIzNywgMjM4LCAyMzgsIDIzOSwgMjM5LCAyNDAsIDI0MCwgMjQyLCAyNDIsIAorCTI0MywgMjQzLCAyNDQsIDI0NCwgMjQ1LCAyNDYsIDI0NiwgMjQ3LCAyNDcsIDI0OCwgMjQ4LCAyNDksIAorCTI0OSwgMjUwLCAyNTAsIDI1MSwgMjUxLCAyNTMsIDI1MywgMjU0LCAyNTQsIDI1NSwgMjU1LCAyNTUsIAorCTI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIAorCTI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIAorCTI1NSwgMjU1LCAyNTUsIDI1NSAKK307IApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvdWx0cmFjYW0uYyBiL2RyaXZlcnMvdXNiL21lZGlhL3VsdHJhY2FtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVmZjc1NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3VsdHJhY2FtLmMKQEAgLTAsMCArMSw2NzkgQEAKKy8qCisgKiBVU0IgTkIgQ2FtZXJhIGRyaXZlcgorICoKKyAqIEhJU1RPUlk6CisgKiAyNS1EZWMtMjAwMiBEbWl0cmkgICAgICBSZW1vdmVkIGxpZ2h0aW5nLCBzaGFycG5lc3MgcGFyYW1ldGVycywgbWV0aG9kcy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlICJ1c2J2aWRlby5oIgorCisjZGVmaW5lCVVMVFJBQ0FNX1ZFTkRPUl9JRAkweDA0NjEKKyNkZWZpbmUJVUxUUkFDQU1fUFJPRFVDVF9JRAkweDA4MTMKKworI2RlZmluZSBNQVhfQ0FNRVJBUwkJNAkvKiBIb3cgbWFueSBkZXZpY2VzIHdlIGFsbG93IHRvIGNvbm5lY3QgKi8KKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGxpdmVzIGluIHV2ZF90LT51c2VyIGZpZWxkLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IGluaXRpYWxpemVkOwkvKiBIYWQgd2UgYWxyZWFkeSBzZW50IGluaXQgc2VxdWVuY2U/ICovCisJaW50IGNhbWVyYV9tb2RlbDsJLyogV2hhdCB0eXBlIG9mIElCTSBjYW1lcmEgd2UgZ290PyAqLworICAgICAgICBpbnQgaGFzX2hkcjsKK30gdWx0cmFjYW1fdDsKKyNkZWZpbmUJVUxUUkFDQU1fVCh1dmQpCSgodWx0cmFjYW1fdCAqKSgodXZkKS0+dXNlcl9kYXRhKSkKKworc3RhdGljIHN0cnVjdCB1c2J2aWRlbyAqY2FtcyA9IE5VTEw7CisKK3N0YXRpYyBpbnQgZGVidWcgPSAwOworCitzdGF0aWMgaW50IGZsYWdzID0gMDsgLyogRkxBR1NfRElTUExBWV9ISU5UUyB8IEZMQUdTX09WRVJMQVlfU1RBVFM7ICovCisKK3N0YXRpYyBjb25zdCBpbnQgbWluX2NhbnZhc1dpZHRoICA9IDg7CitzdGF0aWMgY29uc3QgaW50IG1pbl9jYW52YXNIZWlnaHQgPSA0OworCisjZGVmaW5lIEZSQU1FUkFURV9NSU4JMAorI2RlZmluZSBGUkFNRVJBVEVfTUFYCTYKK3N0YXRpYyBpbnQgZnJhbWVyYXRlID0gLTE7CisKKy8qCisgKiBIZXJlIHdlIGRlZmluZSBzZXZlcmFsIGluaXRpYWxpemF0aW9uIHZhcmlhYmxlcy4gVGhleSBtYXkKKyAqIGJlIHVzZWQgdG8gYXV0b21hdGljYWxseSBzZXQgY29sb3IsIGh1ZSwgYnJpZ2h0bmVzcyBhbmQKKyAqIGNvbnRyYXN0IHRvIGRlc2lyZWQgdmFsdWVzLiBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgaW4KKyAqIGNhc2Ugb2Ygd2ViY2FtcyAod2hpY2ggaGF2ZSBubyBjb250cm9scyBhbmQgbm8gb24tc2NyZWVuCisgKiBvdXRwdXQpIGFuZCBhbHNvIHdoZW4gYSBjbGllbnQgVjRMIHNvZnR3YXJlIGlzIHVzZWQgdGhhdAorICogZG9lcyBub3QgaGF2ZSBzb21lIG9mIHRob3NlIGNvbnRyb2xzLiBJbiBhbnkgY2FzZSBpdCdzCisgKiBnb29kIHRvIGhhdmUgc3RhcnR1cCB2YWx1ZXMgYXMgb3B0aW9ucy4KKyAqCisgKiBUaGVzZSB2YWx1ZXMgYXJlIGFsbCBpbiBbMC4uMjU1XSByYW5nZS4gVGhpcyBzaW1wbGlmaWVzCisgKiBvcGVyYXRpb24uIE5vdGUgdGhhdCBhY3R1YWwgdmFsdWVzIG9mIFY0TCB2YXJpYWJsZXMgbWF5CisgKiBiZSBzY2FsZWQgdXAgKGFzIG11Y2ggYXMgPDwgOCkuIFVzZXIgY2FuIHNlZSB0aGF0IG9ubHkKKyAqIG9uIG92ZXJsYXkgb3V0cHV0LCBob3dldmVyLCBvciB0aHJvdWdoIGEgVjRMIGNsaWVudC4KKyAqLworc3RhdGljIGludCBpbml0X2JyaWdodG5lc3MgPSAxMjg7CitzdGF0aWMgaW50IGluaXRfY29udHJhc3QgPSAxOTI7CitzdGF0aWMgaW50IGluaXRfY29sb3IgPSAxMjg7CitzdGF0aWMgaW50IGluaXRfaHVlID0gMTI4Oworc3RhdGljIGludCBodWVfY29ycmVjdGlvbiA9IDEyODsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbDogMC05IChkZWZhdWx0PTApIik7Cittb2R1bGVfcGFyYW0oZmxhZ3MsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGZsYWdzLAorCQkiQml0ZmllbGQ6IDA9VklESU9DU1lOQywgIgorCQkiMT1CL1csICIKKwkJIjI9c2hvdyBoaW50cywgIgorCQkiMz1zaG93IHN0YXRzLCAiCisJCSI0PXRlc3QgcGF0dGVybiwgIgorCQkiNT1zZXBhcmF0ZSBmcmFtZXMsICIKKwkJIjY9Y2xlYW4gZnJhbWVzIik7Cittb2R1bGVfcGFyYW0oZnJhbWVyYXRlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhmcmFtZXJhdGUsICJGcmFtZXJhdGUgc2V0dGluZzogMD1zbG93ZXN0LCA2PWZhc3Rlc3QgKGRlZmF1bHQ9MikiKTsKKworbW9kdWxlX3BhcmFtKGluaXRfYnJpZ2h0bmVzcywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5pdF9icmlnaHRuZXNzLCAiQnJpZ2h0bmVzcyBwcmVjb25maWd1cmF0aW9uOiAwLTI1NSAoZGVmYXVsdD0xMjgpIik7Cittb2R1bGVfcGFyYW0oaW5pdF9jb250cmFzdCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5pdF9jb250cmFzdCwgIkNvbnRyYXN0IHByZWNvbmZpZ3VyYXRpb246IDAtMjU1IChkZWZhdWx0PTE5MikiKTsKK21vZHVsZV9wYXJhbShpbml0X2NvbG9yLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbml0X2NvbG9yLCAiQ29sb3IgcHJlY29uZmlndXJhdGlvbjogMC0yNTUgKGRlZmF1bHQ9MTI4KSIpOworbW9kdWxlX3BhcmFtKGluaXRfaHVlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbml0X2h1ZSwgIkh1ZSBwcmVjb25maWd1cmF0aW9uOiAwLTI1NSAoZGVmYXVsdD0xMjgpIik7Cittb2R1bGVfcGFyYW0oaHVlX2NvcnJlY3Rpb24sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGh1ZV9jb3JyZWN0aW9uLCAiWVVWIGNvbG9yc3BhY2UgcmVndWxhdGlvbjogMC0yNTUgKGRlZmF1bHQ9MTI4KSIpOworCisvKgorICogdWx0cmFjYW1fUHJvY2Vzc0lzb2NEYXRhKCkKKyAqCisgKiBHZW5lcmljIHJvdXRpbmUgdG8gcGFyc2UgdGhlIHJpbmcgcXVldWUgZGF0YS4gSXQgZW1wbG95cyBlaXRoZXIKKyAqIHVsdHJhY2FtX2ZpbmRfaGVhZGVyKCkgb3IgdWx0cmFjYW1fcGFyc2VfbGluZXMoKSB0byBkbyBtb3N0CisgKiBvZiB3b3JrLgorICoKKyAqIDAyLU5vdi0yMDAwIEZpcnN0IChtb3N0bHkgZHVtbXkpIHZlcnNpb24uCisgKiAwNi1Ob3YtMjAwMCBSZXdyb3RlIHRvIGR1bXAgYWxsIGRhdGEgaW50byBmcmFtZS4KKyAqLworc3RhdGljIHZvaWQgdWx0cmFjYW1fUHJvY2Vzc0lzb2NEYXRhKHN0cnVjdCB1dmQgKnV2ZCwgc3RydWN0IHVzYnZpZGVvX2ZyYW1lICpmcmFtZSkKK3sKKwlpbnQgbjsKKworCWFzc2VydCh1dmQgIT0gTlVMTCk7CisJYXNzZXJ0KGZyYW1lICE9IE5VTEwpOworCisJLyogVHJ5IHRvIG1vdmUgZGF0YSBmcm9tIHF1ZXVlIGludG8gZnJhbWUgYnVmZmVyICovCisJbiA9IFJpbmdRdWV1ZV9HZXRMZW5ndGgoJnV2ZC0+ZHApOworCWlmIChuID4gMCkgeworCQlpbnQgbTsKKwkJLyogU2VlIGhvdyBtdWNoIHNwYXJlIHdlIGhhdmUgbGVmdCAqLworCQltID0gdXZkLT5tYXhfZnJhbWVfc2l6ZSAtIGZyYW1lLT5zZXFSZWFkX0xlbmd0aDsKKwkJaWYgKG4gPiBtKQorCQkJbiA9IG07CisJCS8qIE5vdyBtb3ZlIHRoYXQgbXVjaCBkYXRhIGludG8gZnJhbWUgYnVmZmVyICovCisJCVJpbmdRdWV1ZV9EZXF1ZXVlKAorCQkJJnV2ZC0+ZHAsCisJCQlmcmFtZS0+ZGF0YSArIGZyYW1lLT5zZXFSZWFkX0xlbmd0aCwKKwkJCW0pOworCQlmcmFtZS0+c2VxUmVhZF9MZW5ndGggKz0gbTsKKwl9CisJLyogU2VlIGlmIHdlIGZpbGxlZCB0aGUgZnJhbWUgKi8KKwlpZiAoZnJhbWUtPnNlcVJlYWRfTGVuZ3RoID49IHV2ZC0+bWF4X2ZyYW1lX3NpemUpIHsKKwkJZnJhbWUtPmZyYW1lU3RhdGUgPSBGcmFtZVN0YXRlX0RvbmU7CisJCXV2ZC0+Y3VyZnJhbWUgPSAtMTsKKwkJdXZkLT5zdGF0cy5mcmFtZV9udW0rKzsKKwl9Cit9CisKKy8qCisgKiB1bHRyYWNhbV92ZWlvKCkKKyAqCisgKiBIaXN0b3J5OgorICogMS8yNy8wMCAgQWRkZWQgY2hlY2sgZm9yIGRldiA9PSBOVUxMOyB0aGlzIGhhcHBlbnMgaWYgY2FtZXJhIGlzIHVucGx1Z2dlZC4KKyAqLworc3RhdGljIGludCB1bHRyYWNhbV92ZWlvKAorCXN0cnVjdCB1dmQgKnV2ZCwKKwl1bnNpZ25lZCBjaGFyIHJlcSwKKwl1bnNpZ25lZCBzaG9ydCB2YWx1ZSwKKwl1bnNpZ25lZCBzaG9ydCBpbmRleCwKKwlpbnQgaXNfb3V0KQoreworCXN0YXRpYyBjb25zdCBjaGFyIHByb2NbXSA9ICJ1bHRyYWNhbV92ZWlvIjsKKwl1bnNpZ25lZCBjaGFyIGNwWzhdIC8qID0geyAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmIH0gKi87CisJaW50IGk7CisKKwlpZiAoIUNBTUVSQV9JU19PUEVSQVRJT05BTCh1dmQpKQorCQlyZXR1cm4gMDsKKworCWlmICghaXNfb3V0KSB7CisJCWkgPSB1c2JfY29udHJvbF9tc2coCisJCQl1dmQtPmRldiwKKwkJCXVzYl9yY3ZjdHJscGlwZSh1dmQtPmRldiwgMCksCisJCQlyZXEsCisJCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCXZhbHVlLAorCQkJaW5kZXgsCisJCQljcCwKKwkJCXNpemVvZihjcCksCisJCQkxMDAwKTsKKyNpZiAxCisJCWluZm8oIlVTQiA9PiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCAiCisJCSAgICAgICAiKHJlcT0kJTAyeCB2YWw9JCUwNHggaW5kPSQlMDR4KSIsCisJCSAgICAgICBjcFswXSxjcFsxXSxjcFsyXSxjcFszXSxjcFs0XSxjcFs1XSxjcFs2XSxjcFs3XSwKKwkJICAgICAgIHJlcSwgdmFsdWUsIGluZGV4KTsKKyNlbmRpZgorCX0gZWxzZSB7CisJCWkgPSB1c2JfY29udHJvbF9tc2coCisJCQl1dmQtPmRldiwKKwkJCXVzYl9zbmRjdHJscGlwZSh1dmQtPmRldiwgMCksCisJCQlyZXEsCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQl2YWx1ZSwKKwkJCWluZGV4LAorCQkJTlVMTCwKKwkJCTAsCisJCQkxMDAwKTsKKwl9CisJaWYgKGkgPCAwKSB7CisJCWVycigiJXM6IEVSUk9SPSVkLiBDYW1lcmEgc3RvcHBlZDsgUmVjb25uZWN0IG9yIHJlbG9hZCBkcml2ZXIuIiwKKwkJICAgIHByb2MsIGkpOworCQl1dmQtPmxhc3RfZXJyb3IgPSBpOworCX0KKwlyZXR1cm4gaTsKK30KKworLyoKKyAqIHVsdHJhY2FtX2NhbGN1bGF0ZV9mcHMoKQorICovCitzdGF0aWMgaW50IHVsdHJhY2FtX2NhbGN1bGF0ZV9mcHMoc3RydWN0IHV2ZCAqdXZkKQoreworCXJldHVybiAzICsgZnJhbWVyYXRlKjQgKyBmcmFtZXJhdGUvMjsKK30KKworLyoKKyAqIHVsdHJhY2FtX2FkanVzdF9jb250cmFzdCgpCisgKi8KK3N0YXRpYyB2b2lkIHVsdHJhY2FtX2FkanVzdF9jb250cmFzdChzdHJ1Y3QgdXZkICp1dmQpCit7Cit9CisKKy8qCisgKiB1bHRyYWNhbV9zZXRfYnJpZ2h0bmVzcygpCisgKgorICogVGhpcyBwcm9jZWR1cmUgY2hhbmdlcyBicmlnaHRuZXNzIG9mIHRoZSBwaWN0dXJlLgorICovCitzdGF0aWMgdm9pZCB1bHRyYWNhbV9zZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgdXZkICp1dmQpCit7Cit9CisKK3N0YXRpYyB2b2lkIHVsdHJhY2FtX3NldF9odWUoc3RydWN0IHV2ZCAqdXZkKQoreworfQorCisvKgorICogdWx0cmFjYW1fYWRqdXN0X3BpY3R1cmUoKQorICoKKyAqIFRoaXMgcHJvY2VkdXJlIGdldHMgY2FsbGVkIGZyb20gVjRMIGludGVyZmFjZSB0byB1cGRhdGUgcGljdHVyZSBzZXR0aW5ncy4KKyAqIEhlcmUgd2UgY2hhbmdlIGJyaWdodG5lc3MgYW5kIGNvbnRyYXN0LgorICovCitzdGF0aWMgdm9pZCB1bHRyYWNhbV9hZGp1c3RfcGljdHVyZShzdHJ1Y3QgdXZkICp1dmQpCit7CisJdWx0cmFjYW1fYWRqdXN0X2NvbnRyYXN0KHV2ZCk7CisJdWx0cmFjYW1fc2V0X2JyaWdodG5lc3ModXZkKTsKKwl1bHRyYWNhbV9zZXRfaHVlKHV2ZCk7Cit9CisKKy8qCisgKiB1bHRyYWNhbV92aWRlb19zdG9wKCkKKyAqCisgKiBUaGlzIGNvZGUgdGVsbHMgY2FtZXJhIHRvIHN0b3Agc3RyZWFtaW5nLiBUaGUgaW50ZXJmYWNlIHJlbWFpbnMKKyAqIGNvbmZpZ3VyZWQgYW5kIGJhbmR3aWR0aCAtIGNsYWltZWQuCisgKi8KK3N0YXRpYyB2b2lkIHVsdHJhY2FtX3ZpZGVvX3N0b3Aoc3RydWN0IHV2ZCAqdXZkKQoreworfQorCisvKgorICogdWx0cmFjYW1fcmVpbml0X2lzbygpCisgKgorICogVGhpcyBwcm9jZWR1cmUgc2VuZHMgY291cGxlIG9mIGNvbW1hbmRzIHRvIHRoZSBjYW1lcmEgYW5kIHRoZW4KKyAqIHJlc2V0cyB0aGUgdmlkZW8gcGlwZS4gVGhpcyBzZXF1ZW5jZSB3YXMgb2JzZXJ2ZWQgdG8gcmVpbml0IHRoZQorICogY2FtZXJhIG9yLCBhdCBsZWFzdCwgdG8gaW5pdGlhdGUgSVNPIGRhdGEgc3RyZWFtLgorICovCitzdGF0aWMgdm9pZCB1bHRyYWNhbV9yZWluaXRfaXNvKHN0cnVjdCB1dmQgKnV2ZCwgaW50IGRvX3N0b3ApCit7Cit9CisKK3N0YXRpYyB2b2lkIHVsdHJhY2FtX3ZpZGVvX3N0YXJ0KHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwl1bHRyYWNhbV9yZWluaXRfaXNvKHV2ZCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgdWx0cmFjYW1fcmVzZXRQaXBlKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwl1c2JfY2xlYXJfaGFsdCh1dmQtPmRldiwgdXZkLT52aWRlb19lbmRwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1bHRyYWNhbV9hbHRlcm5hdGVTZXR0aW5nKHN0cnVjdCB1dmQgKnV2ZCwgaW50IHNldHRpbmcpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgcHJvY1tdID0gInVsdHJhY2FtX2FsdGVybmF0ZVNldHRpbmciOworCWludCBpOworCWkgPSB1c2Jfc2V0X2ludGVyZmFjZSh1dmQtPmRldiwgdXZkLT5pZmFjZSwgc2V0dGluZyk7CisJaWYgKGkgPCAwKSB7CisJCWVycigiJXM6IHVzYl9zZXRfaW50ZXJmYWNlIGVycm9yIiwgcHJvYyk7CisJCXV2ZC0+bGFzdF9lcnJvciA9IGk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogUmV0dXJuIG5lZ2F0aXZlIGNvZGUgb24gZmFpbHVyZSwgMCBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IHVsdHJhY2FtX3NldHVwX29uX29wZW4oc3RydWN0IHV2ZCAqdXZkKQoreworCWludCBzZXR1cF9vayA9IDA7IC8qIFN1Y2Nlc3MgYnkgZGVmYXVsdCAqLworCS8qIFNlbmQgaW5pdCBzZXF1ZW5jZSBvbmx5IG9uY2UsIGl0J3MgbGFyZ2UhICovCisJaWYgKCFVTFRSQUNBTV9UKHV2ZCktPmluaXRpYWxpemVkKSB7CisJCXVsdHJhY2FtX2FsdGVybmF0ZVNldHRpbmcodXZkLCAweDA0KTsKKwkJdWx0cmFjYW1fYWx0ZXJuYXRlU2V0dGluZyh1dmQsIDB4MDApOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMiwgMHgwMDA0LCAweDAwMGIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMiwgMHgwMDAxLCAweDAwMDUsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMiwgMHg4MDAwLCAweDAwMDAsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwMDAsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMGIwLCAweDAwMDEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwMDIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDBjLCAweDAwMDMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDBiLCAweDAwMDQsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwMDUsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwMDYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDc5LCAweDAwMDcsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDNiLCAweDAwMDgsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAyLCAweDAwMGYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAxLCAweDAwMTAsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwMTEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYmYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAxLCAweDAwYzAsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDEwLCAweDAwY2IsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGE0LCAweDAwMDEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDEwLCAweDAwMDIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDY2LCAweDAwMDcsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDBiLCAweDAwMDgsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDM0LCAweDAwMDksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMGEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDJlLCAweDAwMGIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGQ2LCAweDAwMGMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGZjLCAweDAwMGQsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGYxLCAweDAwMGUsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGRhLCAweDAwMGYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDM2LCAweDAwMTAsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDBiLCAweDAwMTEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAxLCAweDAwMTIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMTMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMTQsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDg3LCAweDAwNTEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDQwLCAweDAwNTIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDU4LCAweDAwNTMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDQwLCAweDAwNTQsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwNDAsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDEwLCAweDAwNDEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDIwLCAweDAwNDIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDMwLCAweDAwNDMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDQwLCAweDAwNDQsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDUwLCAweDAwNDUsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDYwLCAweDAwNDYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDcwLCAweDAwNDcsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDgwLCAweDAwNDgsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDkwLCAweDAwNDksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGEwLCAweDAwNGEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGIwLCAweDAwNGIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGMwLCAweDAwNGMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGQwLCAweDAwNGQsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGUwLCAweDAwNGUsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGYwLCAweDAwNGYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGZmLCAweDAwNTAsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwNTYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDgwLCAweDAwYzEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwY2EsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDgwLCAweDAwYzEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDA0LCAweDAwYzIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwY2EsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAyLCAweDAwYzEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDIwLCAweDAwYzIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwY2EsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzQsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzUsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzcsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzgsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzQsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzUsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzcsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzgsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDQwLCAweDAwYzEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDE3LCAweDAwYzIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwY2EsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzQsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzUsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzcsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzgsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzQsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzUsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzcsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzgsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMGMwLCAweDAwYzEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwY2EsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMiwgMHhjMDQwLCAweDAwMDEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMDgsIDApOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMDksIDApOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMGEsIDApOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMGIsIDApOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMGMsIDApOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMGQsIDApOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMGUsIDApOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMGYsIDApOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMTAsIDApOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDBiLCAweDAwMDgsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDM0LCAweDAwMDksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMGEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDJlLCAweDAwMGIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGQ2LCAweDAwMGMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGZjLCAweDAwMGQsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGYxLCAweDAwMGUsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGRhLCAweDAwMGYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDM2LCAweDAwMTAsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMDEsIDApOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDY0LCAweDAwMDEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDU5LCAweDAwNTEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDNmLCAweDAwNTIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDk0LCAweDAwNTMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGZmLCAweDAwMTEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAzLCAweDAwMTIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGY3LCAweDAwMTMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDA5LCAweDAwMTEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwMDEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwMDAsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDIwLCAweDAwYzEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDEwLCAweDAwYzIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwY2EsIDEpOworCQl1bHRyYWNhbV9hbHRlcm5hdGVTZXR0aW5nKHV2ZCwgMHgwNCk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAyLCAweDAwMDAsIDB4MDAwMSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAyLCAweDAwMDAsIDB4MDAwMSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAyLCAweDAwMDAsIDB4MDAwNiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAyLCAweDkwMDAsIDB4MDAwNywgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAyLCAweDAwNDIsIDB4MDAwMSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAyLCAweDAwMDAsIDB4MDAwYiwgMCk7CisJCXVsdHJhY2FtX3Jlc2V0UGlwZSh1dmQpOworCQlVTFRSQUNBTV9UKHV2ZCktPmluaXRpYWxpemVkID0gKHNldHVwX29rICE9IDApOworCX0KKwlyZXR1cm4gc2V0dXBfb2s7Cit9CisKK3N0YXRpYyB2b2lkIHVsdHJhY2FtX2NvbmZpZ3VyZV92aWRlbyhzdHJ1Y3QgdXZkICp1dmQpCit7CisJaWYgKHV2ZCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlSRVNUUklDVF9UT19SQU5HRShpbml0X2JyaWdodG5lc3MsIDAsIDI1NSk7CisJUkVTVFJJQ1RfVE9fUkFOR0UoaW5pdF9jb250cmFzdCwgMCwgMjU1KTsKKwlSRVNUUklDVF9UT19SQU5HRShpbml0X2NvbG9yLCAwLCAyNTUpOworCVJFU1RSSUNUX1RPX1JBTkdFKGluaXRfaHVlLCAwLCAyNTUpOworCVJFU1RSSUNUX1RPX1JBTkdFKGh1ZV9jb3JyZWN0aW9uLCAwLCAyNTUpOworCisJbWVtc2V0KCZ1dmQtPnZwaWMsIDAsIHNpemVvZih1dmQtPnZwaWMpKTsKKwltZW1zZXQoJnV2ZC0+dnBpY19vbGQsIDB4NTUsIHNpemVvZih1dmQtPnZwaWNfb2xkKSk7CisKKwl1dmQtPnZwaWMuY29sb3VyID0gaW5pdF9jb2xvciA8PCA4OworCXV2ZC0+dnBpYy5odWUgPSBpbml0X2h1ZSA8PCA4OworCXV2ZC0+dnBpYy5icmlnaHRuZXNzID0gaW5pdF9icmlnaHRuZXNzIDw8IDg7CisJdXZkLT52cGljLmNvbnRyYXN0ID0gaW5pdF9jb250cmFzdCA8PCA4OworCXV2ZC0+dnBpYy53aGl0ZW5lc3MgPSAxMDUgPDwgODsgLyogVGhpcyBvbmUgaXNuJ3QgdXNlZCAqLworCXV2ZC0+dnBpYy5kZXB0aCA9IDI0OworCXV2ZC0+dnBpYy5wYWxldHRlID0gVklERU9fUEFMRVRURV9SR0IyNDsKKworCW1lbXNldCgmdXZkLT52Y2FwLCAwLCBzaXplb2YodXZkLT52Y2FwKSk7CisJc3RyY3B5KHV2ZC0+dmNhcC5uYW1lLCAiSUJNIFVsdHJhIENhbWVyYSIpOworCXV2ZC0+dmNhcC50eXBlID0gVklEX1RZUEVfQ0FQVFVSRTsKKwl1dmQtPnZjYXAuY2hhbm5lbHMgPSAxOworCXV2ZC0+dmNhcC5hdWRpb3MgPSAwOworCXV2ZC0+dmNhcC5tYXh3aWR0aCA9IFZJREVPU0laRV9YKHV2ZC0+Y2FudmFzKTsKKwl1dmQtPnZjYXAubWF4aGVpZ2h0ID0gVklERU9TSVpFX1kodXZkLT5jYW52YXMpOworCXV2ZC0+dmNhcC5taW53aWR0aCA9IG1pbl9jYW52YXNXaWR0aDsKKwl1dmQtPnZjYXAubWluaGVpZ2h0ID0gbWluX2NhbnZhc0hlaWdodDsKKworCW1lbXNldCgmdXZkLT52Y2hhbiwgMCwgc2l6ZW9mKHV2ZC0+dmNoYW4pKTsKKwl1dmQtPnZjaGFuLmZsYWdzID0gMDsKKwl1dmQtPnZjaGFuLnR1bmVycyA9IDA7CisJdXZkLT52Y2hhbi5jaGFubmVsID0gMDsKKwl1dmQtPnZjaGFuLnR5cGUgPSBWSURFT19UWVBFX0NBTUVSQTsKKwlzdHJjcHkodXZkLT52Y2hhbi5uYW1lLCAiQ2FtZXJhIik7Cit9CisKKy8qCisgKiB1bHRyYWNhbV9wcm9iZSgpCisgKgorICogVGhpcyBwcm9jZWR1cmUgcXVlcmllcyBkZXZpY2UgZGVzY3JpcHRvciBhbmQgYWNjZXB0cyB0aGUgaW50ZXJmYWNlCisgKiBpZiBpdCBsb29rcyBsaWtlIG91ciBjYW1lcmEuCisgKgorICogSGlzdG9yeToKKyAqIDEyLU5vdi0yMDAwIFJld29ya2VkIHRvIGNvbXBseSB3aXRoIG5ldyBwcm9iZSgpIHNpZ25hdHVyZS4KKyAqIDIzLUphbi0yMDAxIEFkZGVkIGNvbXBhdGliaWxpdHkgd2l0aCAyLjIueCBrZXJuZWxzLgorICovCitzdGF0aWMgaW50IHVsdHJhY2FtX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqZGV2aWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHV2ZCAqdXZkID0gTlVMTDsKKwlpbnQgaXgsIGksIG5hczsKKwlpbnQgYWN0SW50ZXJmYWNlPS0xLCBpbmFjdEludGVyZmFjZT0tMSwgbWF4UFM9MDsKKwl1bnNpZ25lZCBjaGFyIHZpZGVvX2VwID0gMDsKKworCWlmIChkZWJ1ZyA+PSAxKQorCQlpbmZvKCJ1bHRyYWNhbV9wcm9iZSglcCkiLCBpbnRmKTsKKworCS8qIFdlIGRvbid0IGhhbmRsZSBtdWx0aS1jb25maWcgY2FtZXJhcyAqLworCWlmIChkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpCisJCXJldHVybiAtRU5PREVWOworCisJaW5mbygiSUJNIFVsdHJhIGNhbWVyYSBmb3VuZCAocmV2LiAweCUwNHgpIiwKKwkJbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkpOworCisJLyogVmFsaWRhdGUgZm91bmQgaW50ZXJmYWNlOiBtdXN0IGhhdmUgb25lIElTTyBlbmRwb2ludCAqLworCW5hcyA9IGludGYtPm51bV9hbHRzZXR0aW5nOworCWlmIChkZWJ1ZyA+IDApCisJCWluZm8oIk51bWJlciBvZiBhbHRlcm5hdGUgc2V0dGluZ3M9JWQuIiwgbmFzKTsKKwlpZiAobmFzIDwgOCkgeworCQllcnIoIlRvbyBmZXcgYWx0ZXJuYXRlIHNldHRpbmdzIGZvciB0aGlzIGNhbWVyYSEiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCS8qIFZhbGlkYXRlIGFsbCBhbHRlcm5hdGUgc2V0dGluZ3MgKi8KKwlmb3IgKGl4PTA7IGl4IDwgbmFzOyBpeCsrKSB7CisJCWNvbnN0IHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKworCQlpbnRlcmZhY2UgPSAmaW50Zi0+YWx0c2V0dGluZ1tpeF07CisJCWkgPSBpbnRlcmZhY2UtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmc7CisJCWlmIChpbnRlcmZhY2UtPmRlc2MuYk51bUVuZHBvaW50cyAhPSAxKSB7CisJCQllcnIoIkludGVyZmFjZSAlZC4gaGFzICV1LiBlbmRwb2ludHMhIiwKKwkJCSAgICBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlciwKKwkJCSAgICAodW5zaWduZWQpKGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzKSk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzBdLmRlc2M7CisJCWlmICh2aWRlb19lcCA9PSAwKQorCQkJdmlkZW9fZXAgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJZWxzZSBpZiAodmlkZW9fZXAgIT0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpIHsKKwkJCWVycigiQWx0ZXJuYXRlIHNldHRpbmdzIGhhdmUgZGlmZmVyZW50IGVuZHBvaW50IGFkZHJlc3NlcyEiKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWlmICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIDB4MDMpICE9IDB4MDEpIHsKKwkJCWVycigiSW50ZXJmYWNlICVkLiBoYXMgbm9uLUlTTyBlbmRwb2ludCEiLAorCQkJICAgIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSA9PSAwKSB7CisJCQllcnIoIkludGVyZmFjZSAlZC4gaGFzIElTTyBPVVQgZW5kcG9pbnQhIiwKKwkJCSAgICBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlcik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlpZiAobGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSA9PSAwKSB7CisJCQlpZiAoaW5hY3RJbnRlcmZhY2UgPCAwKQorCQkJCWluYWN0SW50ZXJmYWNlID0gaTsKKwkJCWVsc2UgeworCQkJCWVycigiTW9yZSB0aGFuIG9uZSBpbmFjdGl2ZSBhbHQuIHNldHRpbmchIik7CisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoYWN0SW50ZXJmYWNlIDwgMCkgeworCQkJCWFjdEludGVyZmFjZSA9IGk7CisJCQkJbWF4UFMgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOworCQkJCWlmIChkZWJ1ZyA+IDApCisJCQkJCWluZm8oIkFjdGl2ZSBzZXR0aW5nPSVkLiBtYXhQUz0lZC4iLCBpLCBtYXhQUyk7CisJCQl9IGVsc2UgeworCQkJCS8qIEdvdCBhbm90aGVyIGFjdGl2ZSBhbHQuIHNldHRpbmcgKi8KKwkJCQlpZiAobWF4UFMgPCBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpKSB7CisJCQkJCS8qIFRoaXMgb25lIGlzIGJldHRlciEgKi8KKwkJCQkJYWN0SW50ZXJmYWNlID0gaTsKKwkJCQkJbWF4UFMgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOworCQkJCQlpZiAoZGVidWcgPiAwKSB7CisJCQkJCQlpbmZvKCJFdmVuIGJldHRlciBjdGl2ZSBzZXR0aW5nPSVkLiBtYXhQUz0lZC4iLAorCQkJCQkJICAgICBpLCBtYXhQUyk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisJaWYgKChtYXhQUyA8PSAwKSB8fCAoYWN0SW50ZXJmYWNlIDwgMCkgfHwgKGluYWN0SW50ZXJmYWNlIDwgMCkpIHsKKwkJZXJyKCJGYWlsZWQgdG8gcmVjb2duaXplIHRoZSBjYW1lcmEhIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXV2ZCA9IHVzYnZpZGVvX0FsbG9jYXRlRGV2aWNlKGNhbXMpOworCWlmICh1dmQgIT0gTlVMTCkgeworCQkvKiBIZXJlIHV2ZCBpcyBhIGZ1bGx5IGFsbG9jYXRlZCB1dmQgb2JqZWN0ICovCisJCXV2ZC0+ZmxhZ3MgPSBmbGFnczsKKwkJdXZkLT5kZWJ1ZyA9IGRlYnVnOworCQl1dmQtPmRldiA9IGRldjsKKwkJdXZkLT5pZmFjZSA9IGludGYtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKwkJdXZkLT5pZmFjZUFsdEluYWN0aXZlID0gaW5hY3RJbnRlcmZhY2U7CisJCXV2ZC0+aWZhY2VBbHRBY3RpdmUgPSBhY3RJbnRlcmZhY2U7CisJCXV2ZC0+dmlkZW9fZW5kcCA9IHZpZGVvX2VwOworCQl1dmQtPmlzb19wYWNrZXRfbGVuID0gbWF4UFM7CisJCXV2ZC0+cGFsZXR0ZUJpdHMgPSAxTCA8PCBWSURFT19QQUxFVFRFX1JHQjI0OworCQl1dmQtPmRlZmF1bHRQYWxldHRlID0gVklERU9fUEFMRVRURV9SR0IyNDsKKwkJdXZkLT5jYW52YXMgPSBWSURFT1NJWkUoNjQwLCA0ODApOwkvKiBGSVhNRSAqLworCQl1dmQtPnZpZGVvc2l6ZSA9IHV2ZC0+Y2FudmFzOyAvKiB1bHRyYWNhbV9zaXplX3RvX3ZpZGVvc2l6ZShzaXplKTsqLworCisJCS8qIEluaXRpYWxpemUgaWJtY2FtLXNwZWNpZmljIGRhdGEgKi8KKwkJYXNzZXJ0KFVMVFJBQ0FNX1QodXZkKSAhPSBOVUxMKTsKKwkJVUxUUkFDQU1fVCh1dmQpLT5jYW1lcmFfbW9kZWwgPSAwOyAvKiBOb3QgdXNlZCB5ZXQgKi8KKwkJVUxUUkFDQU1fVCh1dmQpLT5pbml0aWFsaXplZCA9IDA7CisKKwkJdWx0cmFjYW1fY29uZmlndXJlX3ZpZGVvKHV2ZCk7CisKKwkJaSA9IHVzYnZpZGVvX1JlZ2lzdGVyVmlkZW9EZXZpY2UodXZkKTsKKwkJaWYgKGkgIT0gMCkgeworCQkJZXJyKCJ1c2J2aWRlb19SZWdpc3RlclZpZGVvRGV2aWNlKCkgZmFpbGVkLiIpOworCQkJdXZkID0gTlVMTDsKKwkJfQorCX0KKworCWlmICh1dmQpIHsKKwkJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgdXZkKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlPOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0geworCXsgVVNCX0RFVklDRShVTFRSQUNBTV9WRU5ET1JfSUQsIFVMVFJBQ0FNX1BST0RVQ1RfSUQpIH0sCisJeyB9ICAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworLyoKKyAqIHVsdHJhY2FtX2luaXQoKQorICoKKyAqIFRoaXMgY29kZSBpcyBydW4gdG8gaW5pdGlhbGl6ZSB0aGUgZHJpdmVyLgorICovCitzdGF0aWMgaW50IF9faW5pdCB1bHRyYWNhbV9pbml0KHZvaWQpCit7CisJc3RydWN0IHVzYnZpZGVvX2NiIGNiVGJsOworCW1lbXNldCgmY2JUYmwsIDAsIHNpemVvZihjYlRibCkpOworCWNiVGJsLnByb2JlID0gdWx0cmFjYW1fcHJvYmU7CisJY2JUYmwuc2V0dXBPbk9wZW4gPSB1bHRyYWNhbV9zZXR1cF9vbl9vcGVuOworCWNiVGJsLnZpZGVvU3RhcnQgPSB1bHRyYWNhbV92aWRlb19zdGFydDsKKwljYlRibC52aWRlb1N0b3AgPSB1bHRyYWNhbV92aWRlb19zdG9wOworCWNiVGJsLnByb2Nlc3NEYXRhID0gdWx0cmFjYW1fUHJvY2Vzc0lzb2NEYXRhOworCWNiVGJsLnBvc3RQcm9jZXNzID0gdXNidmlkZW9fRGVpbnRlcmxhY2VGcmFtZTsKKwljYlRibC5hZGp1c3RQaWN0dXJlID0gdWx0cmFjYW1fYWRqdXN0X3BpY3R1cmU7CisJY2JUYmwuZ2V0RlBTID0gdWx0cmFjYW1fY2FsY3VsYXRlX2ZwczsKKwlyZXR1cm4gdXNidmlkZW9fcmVnaXN0ZXIoCisJCSZjYW1zLAorCQlNQVhfQ0FNRVJBUywKKwkJc2l6ZW9mKHVsdHJhY2FtX3QpLAorCQkidWx0cmFjYW0iLAorCQkmY2JUYmwsCisJCVRISVNfTU9EVUxFLAorCQlpZF90YWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1bHRyYWNhbV9jbGVhbnVwKHZvaWQpCit7CisJdXNidmlkZW9fRGVyZWdpc3RlcigmY2Ftcyk7Cit9CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KHVsdHJhY2FtX2luaXQpOworbW9kdWxlX2V4aXQodWx0cmFjYW1fY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS91c2J2aWRlby5jIGIvZHJpdmVycy91c2IvbWVkaWEvdXNidmlkZW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTg0ODRhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvdXNidmlkZW8uYwpAQCAtMCwwICsxLDIxOTIgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgInVzYnZpZGVvLmgiCisKKyNpZiBkZWZpbmVkKE1BUF9OUikKKyNkZWZpbmUJdmlydF90b19wYWdlKHYpCU1BUF9OUih2KQkvKiBLZXJuZWxzIDIuMi54ICovCisjZW5kaWYKKworc3RhdGljIGludCB2aWRlb19uciA9IC0xOworbW9kdWxlX3BhcmFtKHZpZGVvX25yLCBpbnQsIDApOworCisvKgorICogTG9jYWwgcHJvdG90eXBlcy4KKyAqLworc3RhdGljIHZvaWQgdXNidmlkZW9fRGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CitzdGF0aWMgdm9pZCB1c2J2aWRlb19DYW1lcmFSZWxlYXNlKHN0cnVjdCB1dmQgKnV2ZCk7CisKK3N0YXRpYyBpbnQgdXNidmlkZW9fdjRsX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIGludCB1c2J2aWRlb192NGxfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworc3RhdGljIGludCB1c2J2aWRlb192NGxfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgc3NpemVfdCB1c2J2aWRlb192NGxfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOworc3RhdGljIGludCB1c2J2aWRlb192NGxfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOworCitzdGF0aWMgaW50IHVzYnZpZGVvX1N0YXJ0RGF0YVB1bXAoc3RydWN0IHV2ZCAqdXZkKTsKK3N0YXRpYyB2b2lkIHVzYnZpZGVvX1N0b3BEYXRhUHVtcChzdHJ1Y3QgdXZkICp1dmQpOworc3RhdGljIGludCB1c2J2aWRlb19HZXRGcmFtZShzdHJ1Y3QgdXZkICp1dmQsIGludCBmcmFtZU51bSk7CitzdGF0aWMgaW50IHVzYnZpZGVvX05ld0ZyYW1lKHN0cnVjdCB1dmQgKnV2ZCwgaW50IGZyYW1lbnVtKTsKK3N0YXRpYyB2b2lkIHVzYnZpZGVvX1NvZnR3YXJlQ29udHJhc3RBZGp1c3RtZW50KHN0cnVjdCB1dmQgKnV2ZCwKKwkJCQkJCXN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCAqdXNidmlkZW9fcnZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQoreworCXZvaWQgKm1lbTsKKwl1bnNpZ25lZCBsb25nIGFkcjsKKworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCW1lbSA9IHZtYWxsb2NfMzIoc2l6ZSk7CisJaWYgKCFtZW0pCisJCXJldHVybiBOVUxMOworCisJbWVtc2V0KG1lbSwgMCwgc2l6ZSk7IC8qIENsZWFyIHRoZSByYW0gb3V0LCBubyBqdW5rIHRvIHRoZSB1c2VyICovCisJYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJU2V0UGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOworCQlhZHIgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisKKwlyZXR1cm4gbWVtOworfQorCitzdGF0aWMgdm9pZCB1c2J2aWRlb19ydmZyZWUodm9pZCAqbWVtLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBhZHI7CisKKwlpZiAoIW1lbSkKKwkJcmV0dXJuOworCisJYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKKwl3aGlsZSAoKGxvbmcpIHNpemUgPiAwKSB7CisJCUNsZWFyUGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOworCQlhZHIgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisJdmZyZWUobWVtKTsKK30KKworc3RhdGljIHZvaWQgUmluZ1F1ZXVlX0luaXRpYWxpemUoc3RydWN0IFJpbmdRdWV1ZSAqcnEpCit7CisJYXNzZXJ0KHJxICE9IE5VTEwpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJxLT53cWgpOworfQorCitzdGF0aWMgdm9pZCBSaW5nUXVldWVfQWxsb2NhdGUoc3RydWN0IFJpbmdRdWV1ZSAqcnEsIGludCBycUxlbikKK3sKKwkvKiBNYWtlIHN1cmUgdGhlIHJlcXVlc3RlZCBzaXplIGlzIGEgcG93ZXIgb2YgMiBhbmQKKwkgICByb3VuZCB1cCBpZiBuZWNlc3NhcnkuIFRoaXMgYWxsb3dzIGluZGV4IHdyYXBwaW5nCisJICAgdXNpbmcgbWFza3MgcmF0aGVyIHRoYW4gbW9kdWxvICovCisKKwlpbnQgaSA9IDE7CisJYXNzZXJ0KHJxICE9IE5VTEwpOworCWFzc2VydChycUxlbiA+IDApOworCisJd2hpbGUocnFMZW4gPj4gaSkKKwkJaSsrOworCWlmKHJxTGVuICE9IDEgPDwgKGktMSkpCisJCXJxTGVuID0gMSA8PCBpOworCisJcnEtPmxlbmd0aCA9IHJxTGVuOworCXJxLT5yaSA9IHJxLT53aSA9IDA7CisJcnEtPnF1ZXVlID0gdXNidmlkZW9fcnZtYWxsb2MocnEtPmxlbmd0aCk7CisJYXNzZXJ0KHJxLT5xdWV1ZSAhPSBOVUxMKTsKK30KKworc3RhdGljIGludCBSaW5nUXVldWVfSXNBbGxvY2F0ZWQoY29uc3Qgc3RydWN0IFJpbmdRdWV1ZSAqcnEpCit7CisJaWYgKHJxID09IE5VTEwpCisJCXJldHVybiAwOworCXJldHVybiAocnEtPnF1ZXVlICE9IE5VTEwpICYmIChycS0+bGVuZ3RoID4gMCk7Cit9CisKK3N0YXRpYyB2b2lkIFJpbmdRdWV1ZV9GcmVlKHN0cnVjdCBSaW5nUXVldWUgKnJxKQoreworCWFzc2VydChycSAhPSBOVUxMKTsKKwlpZiAoUmluZ1F1ZXVlX0lzQWxsb2NhdGVkKHJxKSkgeworCQl1c2J2aWRlb19ydmZyZWUocnEtPnF1ZXVlLCBycS0+bGVuZ3RoKTsKKwkJcnEtPnF1ZXVlID0gTlVMTDsKKwkJcnEtPmxlbmd0aCA9IDA7CisJfQorfQorCitpbnQgUmluZ1F1ZXVlX0RlcXVldWUoc3RydWN0IFJpbmdRdWV1ZSAqcnEsIHVuc2lnbmVkIGNoYXIgKmRzdCwgaW50IGxlbikKK3sKKwlpbnQgcnFsLCB0b3JlYWQ7CisKKwlhc3NlcnQocnEgIT0gTlVMTCk7CisJYXNzZXJ0KGRzdCAhPSBOVUxMKTsKKworCXJxbCA9IFJpbmdRdWV1ZV9HZXRMZW5ndGgocnEpOworCWlmKCFycWwpCisJCXJldHVybiAwOworCisJLyogQ2xpcCByZXF1ZXN0ZWQgbGVuZ3RoIHRvIGF2YWlsYWJsZSBkYXRhICovCisJaWYobGVuID4gcnFsKQorCQlsZW4gPSBycWw7CisKKwl0b3JlYWQgPSBsZW47CisJaWYocnEtPnJpID4gcnEtPndpKSB7CisJCS8qIFJlYWQgZGF0YSBmcm9tIHRhaWwgKi8KKwkJaW50IHJlYWQgPSAodG9yZWFkIDwgKHJxLT5sZW5ndGggLSBycS0+cmkpKSA/IHRvcmVhZCA6IHJxLT5sZW5ndGggLSBycS0+cmk7CisJCW1lbWNweShkc3QsIHJxLT5xdWV1ZSArIHJxLT5yaSwgcmVhZCk7CisJCXRvcmVhZCAtPSByZWFkOworCQlkc3QgKz0gcmVhZDsKKwkJcnEtPnJpID0gKHJxLT5yaSArIHJlYWQpICYgKHJxLT5sZW5ndGgtMSk7CisJfQorCWlmKHRvcmVhZCkgeworCQkvKiBSZWFkIGRhdGEgZnJvbSBoZWFkICovCisJCW1lbWNweShkc3QsIHJxLT5xdWV1ZSArIHJxLT5yaSwgdG9yZWFkKTsKKwkJcnEtPnJpID0gKHJxLT5yaSArIHRvcmVhZCkgJiAocnEtPmxlbmd0aC0xKTsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworRVhQT1JUX1NZTUJPTChSaW5nUXVldWVfRGVxdWV1ZSk7CisKK2ludCBSaW5nUXVldWVfRW5xdWV1ZShzdHJ1Y3QgUmluZ1F1ZXVlICpycSwgY29uc3QgdW5zaWduZWQgY2hhciAqY2RhdGEsIGludCBuKQoreworCWludCBlbnF1ZXVlZCA9IDA7CisKKwlhc3NlcnQocnEgIT0gTlVMTCk7CisJYXNzZXJ0KGNkYXRhICE9IE5VTEwpOworCWFzc2VydChycS0+bGVuZ3RoID4gMCk7CisJd2hpbGUgKG4gPiAwKSB7CisJCWludCBtLCBxX2F2YWlsOworCisJCS8qIENhbGN1bGF0ZSB0aGUgbGFyZ2VzdCBjaHVuayB0aGF0IGZpdHMgdGhlIHRhaWwgb2YgdGhlIHJpbmcgKi8KKwkJcV9hdmFpbCA9IHJxLT5sZW5ndGggLSBycS0+d2k7CisJCWlmIChxX2F2YWlsIDw9IDApIHsKKwkJCXJxLT53aSA9IDA7CisJCQlxX2F2YWlsID0gcnEtPmxlbmd0aDsKKwkJfQorCQltID0gbjsKKwkJYXNzZXJ0KHFfYXZhaWwgPiAwKTsKKwkJaWYgKG0gPiBxX2F2YWlsKQorCQkJbSA9IHFfYXZhaWw7CisKKwkJbWVtY3B5KHJxLT5xdWV1ZSArIHJxLT53aSwgY2RhdGEsIG0pOworCQlSSU5HX1FVRVVFX0FEVkFOQ0VfSU5ERVgocnEsIHdpLCBtKTsKKwkJY2RhdGEgKz0gbTsKKwkJZW5xdWV1ZWQgKz0gbTsKKwkJbiAtPSBtOworCX0KKwlyZXR1cm4gZW5xdWV1ZWQ7Cit9CisKK0VYUE9SVF9TWU1CT0woUmluZ1F1ZXVlX0VucXVldWUpOworCitzdGF0aWMgdm9pZCBSaW5nUXVldWVfSW50ZXJydXB0aWJsZVNsZWVwT24oc3RydWN0IFJpbmdRdWV1ZSAqcnEpCit7CisJYXNzZXJ0KHJxICE9IE5VTEwpOworCWludGVycnVwdGlibGVfc2xlZXBfb24oJnJxLT53cWgpOworfQorCit2b2lkIFJpbmdRdWV1ZV9XYWtlVXBJbnRlcnJ1cHRpYmxlKHN0cnVjdCBSaW5nUXVldWUgKnJxKQoreworCWFzc2VydChycSAhPSBOVUxMKTsKKwlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmcnEtPndxaCkpCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcnEtPndxaCk7Cit9CisKK0VYUE9SVF9TWU1CT0woUmluZ1F1ZXVlX1dha2VVcEludGVycnVwdGlibGUpOworCit2b2lkIFJpbmdRdWV1ZV9GbHVzaChzdHJ1Y3QgUmluZ1F1ZXVlICpycSkKK3sKKwlhc3NlcnQocnEgIT0gTlVMTCk7CisJcnEtPnJpID0gMDsKKwlycS0+d2kgPSAwOworfQorCitFWFBPUlRfU1lNQk9MKFJpbmdRdWV1ZV9GbHVzaCk7CisKKworLyoKKyAqIHVzYnZpZGVvX1ZpZGVvc2l6ZVRvU3RyaW5nKCkKKyAqCisgKiBUaGlzIHByb2NlZHVyZSBjb252ZXJ0cyBnaXZlbiB2aWRlb3NpemUgdmFsdWUgdG8gcmVhZGFibGUgc3RyaW5nLgorICoKKyAqIEhpc3Rvcnk6CisgKiAwNy1BdWctMjAwMCBDcmVhdGVkLgorICogMTktT2N0LTIwMDAgUmV3b3JrZWQgZm9yIHVzYnZpZGVvIG1vZHVsZS4KKyAqLworc3RhdGljIHZvaWQgdXNidmlkZW9fVmlkZW9zaXplVG9TdHJpbmcoY2hhciAqYnVmLCBpbnQgYnVmTGVuLCB2aWRlb3NpemVfdCB2cykKK3sKKwljaGFyIHRtcFs0MF07CisJaW50IG47CisKKwluID0gMSArIHNwcmludGYodG1wLCAiJWxkeCVsZCIsIFZJREVPU0laRV9YKHZzKSwgVklERU9TSVpFX1kodnMpKTsKKwlhc3NlcnQobiA8IHNpemVvZih0bXApKTsKKwlpZiAoKGJ1ZiA9PSBOVUxMKSB8fCAoYnVmTGVuIDwgbikpCisJCWVycigidXNidmlkZW9fVmlkZW9zaXplVG9TdHJpbmc6IGJ1ZmZlciBpcyB0b28gc21hbGwuIik7CisJZWxzZQorCQltZW1tb3ZlKGJ1ZiwgdG1wLCBuKTsKK30KKworLyoKKyAqIHVzYnZpZGVvX092ZXJsYXlDaGFyKCkKKyAqCisgKiBIaXN0b3J5OgorICogMDEtRmViLTIwMDAgQ3JlYXRlZC4KKyAqLworc3RhdGljIHZvaWQgdXNidmlkZW9fT3ZlcmxheUNoYXIoc3RydWN0IHV2ZCAqdXZkLCBzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lLAorCQkJCSBpbnQgeCwgaW50IHksIGludCBjaCkKK3sKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgZGlnaXRzWzE2XSA9IHsKKwkJMHhGNkRFLCAvKiAwICovCisJCTB4MjQ5MiwgLyogMSAqLworCQkweEU3Q0UsIC8qIDIgKi8KKwkJMHhFNzlFLCAvKiAzICovCisJCTB4Qjc5MiwgLyogNCAqLworCQkweEYzOUUsIC8qIDUgKi8KKwkJMHhGM0RFLCAvKiA2ICovCisJCTB4RjQ5MiwgLyogNyAqLworCQkweEY3REUsIC8qIDggKi8KKwkJMHhGNzlFLCAvKiA5ICovCisJCTB4NzdEQSwgLyogYSAqLworCQkweEQ3NUMsIC8qIGIgKi8KKwkJMHhGMjRFLCAvKiBjICovCisJCTB4RDZEQywgLyogZCAqLworCQkweEYzNEUsIC8qIGUgKi8KKwkJMHhGMzQ4ICAvKiBmICovCisJfTsKKwl1bnNpZ25lZCBzaG9ydCBkaWdpdDsKKwlpbnQgaXgsIGl5OworCisJaWYgKCh1dmQgPT0gTlVMTCkgfHwgKGZyYW1lID09IE5VTEwpKQorCQlyZXR1cm47CisKKwlpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykKKwkJY2ggLT0gJzAnOworCWVsc2UgaWYgKGNoID49ICdBJyAmJiBjaCA8PSAnRicpCisJCWNoID0gMTAgKyAoY2ggLSAnQScpOworCWVsc2UgaWYgKGNoID49ICdhJyAmJiBjaCA8PSAnZicpCisJCWNoID0gMTAgKyAoY2ggLSAnYScpOworCWVsc2UKKwkJcmV0dXJuOworCWRpZ2l0ID0gZGlnaXRzW2NoXTsKKworCWZvciAoaXk9MDsgaXkgPCA1OyBpeSsrKSB7CisJCWZvciAoaXg9MDsgaXggPCAzOyBpeCsrKSB7CisJCQlpZiAoZGlnaXQgJiAweDgwMDApIHsKKwkJCQlpZiAodXZkLT5wYWxldHRlQml0cyAmICgxTCA8PCBWSURFT19QQUxFVFRFX1JHQjI0KSkgeworLyogVE9ETyAqLwkJCQlSR0IyNF9QVVRQSVhFTChmcmFtZSwgeCtpeCwgeStpeSwgMHhGRiwgMHhGRiwgMHhGRik7CisJCQkJfQorCQkJfQorCQkJZGlnaXQgPSBkaWdpdCA8PCAxOworCQl9CisJfQorfQorCisvKgorICogdXNidmlkZW9fT3ZlcmxheVN0cmluZygpCisgKgorICogSGlzdG9yeToKKyAqIDAxLUZlYi0yMDAwIENyZWF0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIHVzYnZpZGVvX092ZXJsYXlTdHJpbmcoc3RydWN0IHV2ZCAqdXZkLCBzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lLAorCQkJCSAgIGludCB4LCBpbnQgeSwgY29uc3QgY2hhciAqc3RyKQoreworCXdoaWxlICgqc3RyKSB7CisJCXVzYnZpZGVvX092ZXJsYXlDaGFyKHV2ZCwgZnJhbWUsIHgsIHksICpzdHIpOworCQlzdHIrKzsKKwkJeCArPSA0OyAvKiAzIHBpeGVscyBjaGFyYWN0ZXIgKyAxIHNwYWNlICovCisJfQorfQorCisvKgorICogdXNidmlkZW9fT3ZlcmxheVN0YXRzKCkKKyAqCisgKiBPdmVybGF5cyBpbXBvcnRhbnQgZGVidWdnaW5nIGluZm9ybWF0aW9uLgorICoKKyAqIEhpc3Rvcnk6CisgKiAwMS1GZWItMjAwMCBDcmVhdGVkLgorICovCitzdGF0aWMgdm9pZCB1c2J2aWRlb19PdmVybGF5U3RhdHMoc3RydWN0IHV2ZCAqdXZkLCBzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lKQoreworCWNvbnN0IGludCB5X2RpZmYgPSA4OworCWNoYXIgdG1wWzE2XTsKKwlpbnQgeCA9IDEwLCB5PTEwOworCWxvbmcgaSwgaiwgYmFyTGVuZ3RoOworCWNvbnN0IGludCBxaV94MSA9IDYwLCBxaV95MSA9IDEwOworCWNvbnN0IGludCBxaV94MiA9IFZJREVPU0laRV9YKGZyYW1lLT5yZXF1ZXN0KSAtIDEwLCBxaV9oID0gMTA7CisKKwkvKiBDYWxsIHRoZSB1c2VyIGNhbGxiYWNrLCBzZWUgaWYgd2UgbWF5IHByb2NlZWQgYWZ0ZXIgdGhhdCAqLworCWlmIChWQUxJRF9DQUxMQkFDSyh1dmQsIG92ZXJsYXlIb29rKSkgeworCQlpZiAoR0VUX0NBTExCQUNLKHV2ZCwgb3ZlcmxheUhvb2spKHV2ZCwgZnJhbWUpIDwgMCkKKwkJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFdlIGRyYXcgYSAobW9zdGx5KSBob2xsb3cgcmVjdGFuZ2xlIHdpdGggcWlfeHh4IGNvb3JkaW5hdGVzLgorCSAqIExlZnQgZWRnZSBzeW1ib2xpemVzIHRoZSBxdWV1ZSBpbmRleCAwOyByaWdodCBlZGdlIHN5bWJvbGl6ZXMKKwkgKiB0aGUgZnVsbCBjYXBhY2l0eSBvZiB0aGUgcXVldWUuCisJICovCisJYmFyTGVuZ3RoID0gcWlfeDIgLSBxaV94MSAtIDI7CisJaWYgKChiYXJMZW5ndGggPiAxMCkgJiYgKHV2ZC0+cGFsZXR0ZUJpdHMgJiAoMUwgPDwgVklERU9fUEFMRVRURV9SR0IyNCkpKSB7CisvKiBUT0RPICovCWxvbmcgdV9sbywgdV9oaSwgcV91c2VkOworCQlsb25nIG1fcmksIG1fd2ksIG1fbG8sIG1faGk7CisKKwkJLyoKKwkJICogRGV0ZXJtaW5lIGZpbGwgem9uZXMgKHVzZWQgYXJlYXMgb2YgdGhlIHF1ZXVlKToKKwkJICogMCB4eHh4eHh4IHVfbG8gLi4uLi4uIHV2ZC0+ZHAucmkgeHh4eHh4eHggdV9oaSAuLi4uLiB1dmQtPmRwLmxlbmd0aAorCQkgKgorCQkgKiBpZiB1X2xvIDwgMCB0aGVuIHRoZXJlIGlzIG5vIGZpcnN0IGZpbGxlci4KKwkJICovCisKKwkJcV91c2VkID0gUmluZ1F1ZXVlX0dldExlbmd0aCgmdXZkLT5kcCk7CisJCWlmICgodXZkLT5kcC5yaSArIHFfdXNlZCkgPj0gdXZkLT5kcC5sZW5ndGgpIHsKKwkJCXVfaGkgPSB1dmQtPmRwLmxlbmd0aDsKKwkJCXVfbG8gPSAocV91c2VkICsgdXZkLT5kcC5yaSkgJiAodXZkLT5kcC5sZW5ndGgtMSk7CisJCX0gZWxzZSB7CisJCQl1X2hpID0gKHFfdXNlZCArIHV2ZC0+ZHAucmkpOworCQkJdV9sbyA9IC0xOworCQl9CisKKwkJLyogQ29udmVydCBieXRlIGluZGljZXMgaW50byBzY3JlZW4gdW5pdHMgKi8KKwkJbV9yaSA9IHFpX3gxICsgKChiYXJMZW5ndGggKiB1dmQtPmRwLnJpKSAvIHV2ZC0+ZHAubGVuZ3RoKTsKKwkJbV93aSA9IHFpX3gxICsgKChiYXJMZW5ndGggKiB1dmQtPmRwLndpKSAvIHV2ZC0+ZHAubGVuZ3RoKTsKKwkJbV9sbyA9ICh1X2xvID4gMCkgPyAocWlfeDEgKyAoKGJhckxlbmd0aCAqIHVfbG8pIC8gdXZkLT5kcC5sZW5ndGgpKSA6IC0xOworCQltX2hpID0gcWlfeDEgKyAoKGJhckxlbmd0aCAqIHVfaGkpIC8gdXZkLT5kcC5sZW5ndGgpOworCisJCWZvciAoaj1xaV95MTsgaiA8IChxaV95MSArIHFpX2gpOyBqKyspIHsKKwkJCWZvciAoaT1xaV94MTsgaSA8IHFpX3gyOyBpKyspIHsKKwkJCQkvKiBEcmF3IGJvcmRlciBsaW5lcyAqLworCQkJCWlmICgoaiA9PSBxaV95MSkgfHwgKGogPT0gKHFpX3kxICsgcWlfaCAtIDEpKSB8fAorCQkJCSAgICAoaSA9PSBxaV94MSkgfHwgKGkgPT0gKHFpX3gyIC0gMSkpKSB7CisJCQkJCVJHQjI0X1BVVFBJWEVMKGZyYW1lLCBpLCBqLCAweEZGLCAweEZGLCAweEZGKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCS8qIEZvciBhbGwgb3RoZXIgcG9pbnRzIHRoZSBZIGNvb3JkaW5hdGUgZG9lcyBub3QgbWF0dGVyICovCisJCQkJaWYgKChpID49IG1fcmkpICYmIChpIDw9IChtX3JpICsgMykpKSB7CisJCQkJCVJHQjI0X1BVVFBJWEVMKGZyYW1lLCBpLCBqLCAweDAwLCAweEZGLCAweDAwKTsKKwkJCQl9IGVsc2UgaWYgKChpID49IG1fd2kpICYmIChpIDw9IChtX3dpICsgMykpKSB7CisJCQkJCVJHQjI0X1BVVFBJWEVMKGZyYW1lLCBpLCBqLCAweEZGLCAweDAwLCAweDAwKTsKKwkJCQl9IGVsc2UgaWYgKChpIDwgbV9sbykgfHwgKChpID4gbV9yaSkgJiYgKGkgPCBtX2hpKSkpCisJCQkJCVJHQjI0X1BVVFBJWEVMKGZyYW1lLCBpLCBqLCAweDAwLCAweDAwLCAweEZGKTsKKwkJCX0KKwkJfQorCX0KKworCXNwcmludGYodG1wLCAiJThseCIsIHV2ZC0+c3RhdHMuZnJhbWVfbnVtKTsKKwl1c2J2aWRlb19PdmVybGF5U3RyaW5nKHV2ZCwgZnJhbWUsIHgsIHksIHRtcCk7CisJeSArPSB5X2RpZmY7CisKKwlzcHJpbnRmKHRtcCwgIiU4bHgiLCB1dmQtPnN0YXRzLnVyYl9jb3VudCk7CisJdXNidmlkZW9fT3ZlcmxheVN0cmluZyh1dmQsIGZyYW1lLCB4LCB5LCB0bXApOworCXkgKz0geV9kaWZmOworCisJc3ByaW50Zih0bXAsICIlOGx4IiwgdXZkLT5zdGF0cy51cmJfbGVuZ3RoKTsKKwl1c2J2aWRlb19PdmVybGF5U3RyaW5nKHV2ZCwgZnJhbWUsIHgsIHksIHRtcCk7CisJeSArPSB5X2RpZmY7CisKKwlzcHJpbnRmKHRtcCwgIiU4bHgiLCB1dmQtPnN0YXRzLmRhdGFfY291bnQpOworCXVzYnZpZGVvX092ZXJsYXlTdHJpbmcodXZkLCBmcmFtZSwgeCwgeSwgdG1wKTsKKwl5ICs9IHlfZGlmZjsKKworCXNwcmludGYodG1wLCAiJThseCIsIHV2ZC0+c3RhdHMuaGVhZGVyX2NvdW50KTsKKwl1c2J2aWRlb19PdmVybGF5U3RyaW5nKHV2ZCwgZnJhbWUsIHgsIHksIHRtcCk7CisJeSArPSB5X2RpZmY7CisKKwlzcHJpbnRmKHRtcCwgIiU4bHgiLCB1dmQtPnN0YXRzLmlzb19za2lwX2NvdW50KTsKKwl1c2J2aWRlb19PdmVybGF5U3RyaW5nKHV2ZCwgZnJhbWUsIHgsIHksIHRtcCk7CisJeSArPSB5X2RpZmY7CisKKwlzcHJpbnRmKHRtcCwgIiU4bHgiLCB1dmQtPnN0YXRzLmlzb19lcnJfY291bnQpOworCXVzYnZpZGVvX092ZXJsYXlTdHJpbmcodXZkLCBmcmFtZSwgeCwgeSwgdG1wKTsKKwl5ICs9IHlfZGlmZjsKKworCXNwcmludGYodG1wLCAiJTh4IiwgdXZkLT52cGljLmNvbG91cik7CisJdXNidmlkZW9fT3ZlcmxheVN0cmluZyh1dmQsIGZyYW1lLCB4LCB5LCB0bXApOworCXkgKz0geV9kaWZmOworCisJc3ByaW50Zih0bXAsICIlOHgiLCB1dmQtPnZwaWMuaHVlKTsKKwl1c2J2aWRlb19PdmVybGF5U3RyaW5nKHV2ZCwgZnJhbWUsIHgsIHksIHRtcCk7CisJeSArPSB5X2RpZmY7CisKKwlzcHJpbnRmKHRtcCwgIiU4eCIsIHV2ZC0+dnBpYy5icmlnaHRuZXNzID4+IDgpOworCXVzYnZpZGVvX092ZXJsYXlTdHJpbmcodXZkLCBmcmFtZSwgeCwgeSwgdG1wKTsKKwl5ICs9IHlfZGlmZjsKKworCXNwcmludGYodG1wLCAiJTh4IiwgdXZkLT52cGljLmNvbnRyYXN0ID4+IDEyKTsKKwl1c2J2aWRlb19PdmVybGF5U3RyaW5nKHV2ZCwgZnJhbWUsIHgsIHksIHRtcCk7CisJeSArPSB5X2RpZmY7CisKKwlzcHJpbnRmKHRtcCwgIiU4ZCIsIHV2ZC0+dnBpYy53aGl0ZW5lc3MgPj4gOCk7CisJdXNidmlkZW9fT3ZlcmxheVN0cmluZyh1dmQsIGZyYW1lLCB4LCB5LCB0bXApOworCXkgKz0geV9kaWZmOworfQorCisvKgorICogdXNidmlkZW9fUmVwb3J0U3RhdGlzdGljcygpCisgKgorICogVGhpcyBwcm9jZWR1cmUgcHJpbnRzIHBhY2tldCBhbmQgdHJhbnNmZXIgc3RhdGlzdGljcy4KKyAqCisgKiBIaXN0b3J5OgorICogMTQtSmFuLTIwMDAgQ29ycmVjdGVkIGRlZmF1bHQgbXVsdGlwbGllci4KKyAqLworc3RhdGljIHZvaWQgdXNidmlkZW9fUmVwb3J0U3RhdGlzdGljcyhjb25zdCBzdHJ1Y3QgdXZkICp1dmQpCit7CisJaWYgKCh1dmQgIT0gTlVMTCkgJiYgKHV2ZC0+c3RhdHMudXJiX2NvdW50ID4gMCkpIHsKKwkJdW5zaWduZWQgbG9uZyBhbGxQYWNrZXRzLCBiYWRQYWNrZXRzLCBnb29kUGFja2V0cywgcGVyY2VudDsKKwkJYWxsUGFja2V0cyA9IHV2ZC0+c3RhdHMudXJiX2NvdW50ICogQ0FNRVJBX1VSQl9GUkFNRVM7CisJCWJhZFBhY2tldHMgPSB1dmQtPnN0YXRzLmlzb19za2lwX2NvdW50ICsgdXZkLT5zdGF0cy5pc29fZXJyX2NvdW50OworCQlnb29kUGFja2V0cyA9IGFsbFBhY2tldHMgLSBiYWRQYWNrZXRzOworCQkvKiBDYWxjdWxhdGUgcGVyY2VudGFnZSB3aXNlbHksIHJlbWVtYmVyIGludGVnZXIgbGltaXRzICovCisJCWFzc2VydChhbGxQYWNrZXRzICE9IDApOworCQlpZiAoZ29vZFBhY2tldHMgPCAoKCh1bnNpZ25lZCBsb25nKS0xKS8xMDApKQorCQkJcGVyY2VudCA9ICgxMDAgKiBnb29kUGFja2V0cykgLyBhbGxQYWNrZXRzOworCQllbHNlCisJCQlwZXJjZW50ID0gZ29vZFBhY2tldHMgLyAoYWxsUGFja2V0cyAvIDEwMCk7CisJCWluZm8oIlBhY2tldCBTdGF0aXN0aWNzOiBUb3RhbD0lbHUuIEVtcHR5PSVsdS4gVXNhZ2U9JWx1JSUiLAorCQkgICAgIGFsbFBhY2tldHMsIGJhZFBhY2tldHMsIHBlcmNlbnQpOworCQlpZiAodXZkLT5pc29fcGFja2V0X2xlbiA+IDApIHsKKwkJCXVuc2lnbmVkIGxvbmcgYWxsQnl0ZXMsIHhmZXJCeXRlczsKKwkJCWNoYXIgbXVsdGlwbGllciA9ICcgJzsKKwkJCWFsbEJ5dGVzID0gYWxsUGFja2V0cyAqIHV2ZC0+aXNvX3BhY2tldF9sZW47CisJCQl4ZmVyQnl0ZXMgPSB1dmQtPnN0YXRzLmRhdGFfY291bnQ7CisJCQlhc3NlcnQoYWxsQnl0ZXMgIT0gMCk7CisJCQlpZiAoeGZlckJ5dGVzIDwgKCgodW5zaWduZWQgbG9uZyktMSkvMTAwKSkKKwkJCQlwZXJjZW50ID0gKDEwMCAqIHhmZXJCeXRlcykgLyBhbGxCeXRlczsKKwkJCWVsc2UKKwkJCQlwZXJjZW50ID0geGZlckJ5dGVzIC8gKGFsbEJ5dGVzIC8gMTAwKTsKKwkJCS8qIFNjYWxlIHhmZXJCeXRlcyBmb3IgZWFzeSByZWFkaW5nICovCisJCQlpZiAoeGZlckJ5dGVzID4gMTAqMTAyNCkgeworCQkJCXhmZXJCeXRlcyAvPSAxMDI0OworCQkJCW11bHRpcGxpZXIgPSAnSyc7CisJCQkJaWYgKHhmZXJCeXRlcyA+IDEwKjEwMjQpIHsKKwkJCQkJeGZlckJ5dGVzIC89IDEwMjQ7CisJCQkJCW11bHRpcGxpZXIgPSAnTSc7CisJCQkJCWlmICh4ZmVyQnl0ZXMgPiAxMCoxMDI0KSB7CisJCQkJCQl4ZmVyQnl0ZXMgLz0gMTAyNDsKKwkJCQkJCW11bHRpcGxpZXIgPSAnRyc7CisJCQkJCQlpZiAoeGZlckJ5dGVzID4gMTAqMTAyNCkgeworCQkJCQkJCXhmZXJCeXRlcyAvPSAxMDI0OworCQkJCQkJCW11bHRpcGxpZXIgPSAnVCc7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlpbmZvKCJUcmFuc2ZlciBTdGF0aXN0aWNzOiBUcmFuc2ZlcnJlZD0lbHUlY0IgVXNhZ2U9JWx1JSUiLAorCQkJICAgICB4ZmVyQnl0ZXMsIG11bHRpcGxpZXIsIHBlcmNlbnQpOworCQl9CisJfQorfQorCisvKgorICogdXNidmlkZW9fVGVzdFBhdHRlcm4oKQorICoKKyAqIFByb2NlZHVyZSBmb3JtcyBhIHRlc3QgcGF0dGVybiAoeWVsbG93IGdyaWQgb24gYmx1ZSBiYWNrZ3JvdW5kKS4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICogZnVsbGZyYW1lOiBpZiBUUlVFIHRoZW4gZW50aXJlIGZyYW1lIGlzIGZpbGxlZCwgb3RoZXJ3aXNlIHRoZSBwcm9jZWR1cmUKKyAqCSAgICAgIGNvbnRpbnVlcyBmcm9tIHRoZSBjdXJyZW50IHNjYW5saW5lLgorICogcG1vZGUgICAgICAwOiBmaWxsIHRoZSBmcmFtZSB3aXRoIHNvbGlkIGJsdWUgY29sb3IgKGxpa2Ugb24gVkNSIG9yIFRWKQorICoJICAgICAgMTogRHJhdyBhIGNvbG9yZWQgZ3JpZAorICoKKyAqIEhpc3Rvcnk6CisgKiAwMS1GZWItMjAwMCBDcmVhdGVkLgorICovCit2b2lkIHVzYnZpZGVvX1Rlc3RQYXR0ZXJuKHN0cnVjdCB1dmQgKnV2ZCwgaW50IGZ1bGxmcmFtZSwgaW50IHBtb2RlKQoreworCXN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWU7CisJaW50IG51bV9jZWxsID0gMDsKKwlpbnQgc2Nhbl9sZW5ndGggPSAwOworCXN0YXRpYyBpbnQgbnVtX3Bhc3MgPSAwOworCisJaWYgKHV2ZCA9PSBOVUxMKSB7CisJCWVycigiJXM6IHV2ZCA9PSBOVUxMIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoKHV2ZC0+Y3VyZnJhbWUgPCAwKSB8fCAodXZkLT5jdXJmcmFtZSA+PSBVU0JWSURFT19OVU1GUkFNRVMpKSB7CisJCWVycigiJXM6IHV2ZC0+Y3VyZnJhbWU9JWQuIiwgX19GVU5DVElPTl9fLCB1dmQtPmN1cmZyYW1lKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEdyYWIgdGhlIGN1cnJlbnQgZnJhbWUgKi8KKwlmcmFtZSA9ICZ1dmQtPmZyYW1lW3V2ZC0+Y3VyZnJhbWVdOworCisJLyogT3B0aW9uYWxseSBzdGFydCBhdCB0aGUgYmVnaW5uaW5nICovCisJaWYgKGZ1bGxmcmFtZSkgeworCQlmcmFtZS0+Y3VybGluZSA9IDA7CisJCWZyYW1lLT5zZXFSZWFkX0xlbmd0aCA9IDA7CisJfQorI2lmIDAKKwl7CS8qIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgb25seSAqLworCQljaGFyIHRtcFsyMF07CisJCXVzYnZpZGVvX1ZpZGVvc2l6ZVRvU3RyaW5nKHRtcCwgc2l6ZW9mKHRtcCksIGZyYW1lLT5yZXF1ZXN0KTsKKwkJaW5mbygidGVzdHBhdHRlcm46IGZyYW1lPSVzIiwgdG1wKTsKKwl9CisjZW5kaWYKKwkvKiBGb3JtIGV2ZXJ5IHNjYW4gbGluZSAqLworCWZvciAoOyBmcmFtZS0+Y3VybGluZSA8IFZJREVPU0laRV9ZKGZyYW1lLT5yZXF1ZXN0KTsgZnJhbWUtPmN1cmxpbmUrKykgeworCQlpbnQgaTsKKwkJdW5zaWduZWQgY2hhciAqZiA9IGZyYW1lLT5kYXRhICsKKwkJCShWSURFT1NJWkVfWChmcmFtZS0+cmVxdWVzdCkgKiBWNExfQllURVNfUEVSX1BJWEVMICogZnJhbWUtPmN1cmxpbmUpOworCQlmb3IgKGk9MDsgaSA8IFZJREVPU0laRV9YKGZyYW1lLT5yZXF1ZXN0KTsgaSsrKSB7CisJCQl1bnNpZ25lZCBjaGFyIGNiPTB4ODA7CisJCQl1bnNpZ25lZCBjaGFyIGNnID0gMDsKKwkJCXVuc2lnbmVkIGNoYXIgY3IgPSAwOworCisJCQlpZiAocG1vZGUgPT0gMSkgeworCQkJCWlmIChmcmFtZS0+Y3VybGluZSAlIDMyID09IDApCisJCQkJCWNiID0gMCwgY2cgPSBjciA9IDB4RkY7CisJCQkJZWxzZSBpZiAoaSAlIDMyID09IDApIHsKKwkJCQkJaWYgKGZyYW1lLT5jdXJsaW5lICUgMzIgPT0gMSkKKwkJCQkJCW51bV9jZWxsKys7CisJCQkJCWNiID0gMCwgY2cgPSBjciA9IDB4RkY7CisJCQkJfSBlbHNlIHsKKwkJCQkJY2IgPSAoKG51bV9jZWxsKjcpICsgbnVtX3Bhc3MpICYgMHhGRjsKKwkJCQkJY2cgPSAoKG51bV9jZWxsKjUpICsgbnVtX3Bhc3MqMikgJiAweEZGOworCQkJCQljciA9ICgobnVtX2NlbGwqMykgKyBudW1fcGFzcyozKSAmIDB4RkY7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBKdXN0IHRoZSBibHVlIHNjcmVlbiAqLworCQkJfQorCQkJCQorCQkJKmYrKyA9IGNiOworCQkJKmYrKyA9IGNnOworCQkJKmYrKyA9IGNyOworCQkJc2Nhbl9sZW5ndGggKz0gMzsKKwkJfQorCX0KKworCWZyYW1lLT5mcmFtZVN0YXRlID0gRnJhbWVTdGF0ZV9Eb25lOworCWZyYW1lLT5zZXFSZWFkX0xlbmd0aCArPSBzY2FuX2xlbmd0aDsKKwkrK251bV9wYXNzOworCisJLyogV2UgZG8gdGhpcyB1bmNvbmRpdGlvbmFsbHksIHJlZ2FyZGxlc3Mgb2YgRkxBR1NfT1ZFUkxBWV9TVEFUUyAqLworCXVzYnZpZGVvX092ZXJsYXlTdGF0cyh1dmQsIGZyYW1lKTsKK30KKworRVhQT1JUX1NZTUJPTCh1c2J2aWRlb19UZXN0UGF0dGVybik7CisKKworI2lmZGVmIERFQlVHCisvKgorICogdXNidmlkZW9fSGV4RHVtcCgpCisgKgorICogQSBkZWJ1Z2dpbmcgdG9vbC4gUHJpbnRzIGhleCBkdW1wcy4KKyAqCisgKiBIaXN0b3J5OgorICogMjktSnVsLTIwMDAgQWRkZWQgcHJpbnRpbmcgb2Ygb2Zmc2V0cy4KKyAqLwordm9pZCB1c2J2aWRlb19IZXhEdW1wKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4pCit7CisJY29uc3QgaW50IGJ5dGVzX3Blcl9saW5lID0gMzI7CisJY2hhciB0bXBbMTI4XTsgLyogMzIqMyArIDUgKi8KKwlpbnQgaSwgazsKKworCWZvciAoaT1rPTA7IGxlbiA+IDA7IGkrKywgbGVuLS0pIHsKKwkJaWYgKGkgPiAwICYmICgoaSAlIGJ5dGVzX3Blcl9saW5lKSA9PSAwKSkgeworCQkJcHJpbnRrKCIlc1xuIiwgdG1wKTsKKwkJCWs9MDsKKwkJfQorCQlpZiAoKGkgJSBieXRlc19wZXJfbGluZSkgPT0gMCkKKwkJCWsgKz0gc3ByaW50ZigmdG1wW2tdLCAiJTA0eDogIiwgaSk7CisJCWsgKz0gc3ByaW50ZigmdG1wW2tdLCAiJTAyeCAiLCBkYXRhW2ldKTsKKwl9CisJaWYgKGsgPiAwKQorCQlwcmludGsoIiVzXG4iLCB0bXApOworfQorCitFWFBPUlRfU1lNQk9MKHVzYnZpZGVvX0hleER1bXApOworCisjZW5kaWYKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworLyogWFhYOiB0aGlzIHBpZWNlIG9mIGNyYXAgcmVhbGx5IHdhbnRzIHNvbWUgZXJyb3IgaGFuZGxpbmcuLiAqLworc3RhdGljIHZvaWQgdXNidmlkZW9fQ2xpZW50SW5jTW9kQ291bnQoc3RydWN0IHV2ZCAqdXZkKQoreworCWlmICh1dmQgPT0gTlVMTCkgeworCQllcnIoIiVzOiB1dmQgPT0gTlVMTCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJaWYgKHV2ZC0+aGFuZGxlID09IE5VTEwpIHsKKwkJZXJyKCIlczogdXZkLT5oYW5kbGUgPT0gTlVMTCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJaWYgKHV2ZC0+aGFuZGxlLT5tZF9tb2R1bGUgPT0gTlVMTCkgeworCQllcnIoIiVzOiB1dmQtPmhhbmRsZS0+bWRfbW9kdWxlID09IE5VTEwiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCWlmICghdHJ5X21vZHVsZV9nZXQodXZkLT5oYW5kbGUtPm1kX21vZHVsZSkpIHsKKwkJZXJyKCIlczogdHJ5X21vZHVsZV9nZXQoKSA9PSAwIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHZvaWQgdXNidmlkZW9fQ2xpZW50RGVjTW9kQ291bnQoc3RydWN0IHV2ZCAqdXZkKQoreworCWlmICh1dmQgPT0gTlVMTCkgeworCQllcnIoIiVzOiB1dmQgPT0gTlVMTCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJaWYgKHV2ZC0+aGFuZGxlID09IE5VTEwpIHsKKwkJZXJyKCIlczogdXZkLT5oYW5kbGUgPT0gTlVMTCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJaWYgKHV2ZC0+aGFuZGxlLT5tZF9tb2R1bGUgPT0gTlVMTCkgeworCQllcnIoIiVzOiB1dmQtPmhhbmRsZS0+bWRfbW9kdWxlID09IE5VTEwiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCW1vZHVsZV9wdXQodXZkLT5oYW5kbGUtPm1kX21vZHVsZSk7Cit9CisKK2ludCB1c2J2aWRlb19yZWdpc3RlcigKKwlzdHJ1Y3QgdXNidmlkZW8gKipwQ2FtcywKKwljb25zdCBpbnQgbnVtX2NhbXMsCisJY29uc3QgaW50IG51bV9leHRyYSwKKwljb25zdCBjaGFyICpkcml2ZXJOYW1lLAorCWNvbnN0IHN0cnVjdCB1c2J2aWRlb19jYiAqY2JUYmwsCisJc3RydWN0IG1vZHVsZSAqbWQsCisJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkX3RhYmxlKQoreworCXN0cnVjdCB1c2J2aWRlbyAqY2FtczsKKwlpbnQgaSwgYmFzZV9zaXplLCByZXN1bHQ7CisKKwkvKiBDaGVjayBwYXJhbWV0ZXJzIGZvciBzYW5pdHkgKi8KKwlpZiAoKG51bV9jYW1zIDw9IDApIHx8IChwQ2FtcyA9PSBOVUxMKSB8fCAoY2JUYmwgPT0gTlVMTCkpIHsKKwkJZXJyKCIlczogSWxsZWdhbCBjYWxsIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ2hlY2sgcmVnaXN0cmF0aW9uIGNhbGxiYWNrIC0gbXVzdCBiZSBzZXQhICovCisJaWYgKGNiVGJsLT5wcm9iZSA9PSBOVUxMKSB7CisJCWVycigiJXM6IHByb2JlKCkgaXMgcmVxdWlyZWQhIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYmFzZV9zaXplID0gbnVtX2NhbXMgKiBzaXplb2Yoc3RydWN0IHV2ZCkgKyBzaXplb2Yoc3RydWN0IHVzYnZpZGVvKTsKKwljYW1zID0gKHN0cnVjdCB1c2J2aWRlbyAqKSBrbWFsbG9jKGJhc2Vfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNhbXMgPT0gTlVMTCkgeworCQllcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSAlZC4gYnl0ZXMgZm9yIHVzYnZpZGVvIHN0cnVjdCIsIGJhc2Vfc2l6ZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlkYmcoIiVzOiBBbGxvY2F0ZWQgJCVwICglZC4gYnl0ZXMpIGZvciAlZC4gY2FtZXJhcyIsCisJICAgIF9fRlVOQ1RJT05fXywgY2FtcywgYmFzZV9zaXplLCBudW1fY2Ftcyk7CisJbWVtc2V0KGNhbXMsIDAsIGJhc2Vfc2l6ZSk7CisKKwkvKiBDb3B5IGNhbGxiYWNrcywgYXBwbHkgZGVmYXVsdHMgZm9yIHRob3NlIHRoYXQgYXJlIG5vdCBzZXQgKi8KKwltZW1tb3ZlKCZjYW1zLT5jYiwgY2JUYmwsIHNpemVvZihjYW1zLT5jYikpOworCWlmIChjYW1zLT5jYi5nZXRGcmFtZSA9PSBOVUxMKQorCQljYW1zLT5jYi5nZXRGcmFtZSA9IHVzYnZpZGVvX0dldEZyYW1lOworCWlmIChjYW1zLT5jYi5kaXNjb25uZWN0ID09IE5VTEwpCisJCWNhbXMtPmNiLmRpc2Nvbm5lY3QgPSB1c2J2aWRlb19EaXNjb25uZWN0OworCWlmIChjYW1zLT5jYi5zdGFydERhdGFQdW1wID09IE5VTEwpCisJCWNhbXMtPmNiLnN0YXJ0RGF0YVB1bXAgPSB1c2J2aWRlb19TdGFydERhdGFQdW1wOworCWlmIChjYW1zLT5jYi5zdG9wRGF0YVB1bXAgPT0gTlVMTCkKKwkJY2Ftcy0+Y2Iuc3RvcERhdGFQdW1wID0gdXNidmlkZW9fU3RvcERhdGFQdW1wOworCisJY2Ftcy0+bnVtX2NhbWVyYXMgPSBudW1fY2FtczsKKwljYW1zLT5jYW0gPSAoc3RydWN0IHV2ZCAqKSAmY2Ftc1sxXTsKKwljYW1zLT5tZF9tb2R1bGUgPSBtZDsKKwlpZiAoY2Ftcy0+bWRfbW9kdWxlID09IE5VTEwpCisJCXdhcm4oIiVzOiBtb2R1bGUgPT0gTlVMTCEiLCBfX0ZVTkNUSU9OX18pOworCWluaXRfTVVURVgoJmNhbXMtPmxvY2spOwkvKiB0byAxID09IGF2YWlsYWJsZSAqLworCisJZm9yIChpID0gMDsgaSA8IG51bV9jYW1zOyBpKyspIHsKKwkJc3RydWN0IHV2ZCAqdXAgPSAmY2Ftcy0+Y2FtW2ldOworCisJCXVwLT5oYW5kbGUgPSBjYW1zOworCisJCS8qIEFsbG9jYXRlIHVzZXJfZGF0YSBzZXBhcmF0ZWx5IGJlY2F1c2Ugb2Yga21hbGxvYydzIGxpbWl0cyAqLworCQlpZiAobnVtX2V4dHJhID4gMCkgeworCQkJdXAtPnVzZXJfc2l6ZSA9IG51bV9jYW1zICogbnVtX2V4dHJhOworCQkJdXAtPnVzZXJfZGF0YSA9IChjaGFyICopIGttYWxsb2ModXAtPnVzZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAodXAtPnVzZXJfZGF0YSA9PSBOVUxMKSB7CisJCQkJZXJyKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlIHVzZXJfZGF0YSAoJWQuIGJ5dGVzKSIsCisJCQkJICAgIF9fRlVOQ1RJT05fXywgdXAtPnVzZXJfc2l6ZSk7CisJCQkJd2hpbGUgKGkpIHsKKwkJCQkJdXAgPSAmY2Ftcy0+Y2FtWy0taV07CisJCQkJCWtmcmVlKHVwLT51c2VyX2RhdGEpOworCQkJCX0KKwkJCQlrZnJlZShjYW1zKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJCWRiZygiJXM6IEFsbG9jYXRlZCBjYW1zWyVkXS51c2VyX2RhdGE9JCVwICglZC4gYnl0ZXMpIiwKKwkJCSAgICAgX19GVU5DVElPTl9fLCBpLCB1cC0+dXNlcl9kYXRhLCB1cC0+dXNlcl9zaXplKTsKKwkJfQorCX0KKworCS8qCisJICogUmVnaXN0ZXIgb3Vyc2VsdmVzIHdpdGggVVNCIHN0YWNrLgorCSAqLworCXN0cmNweShjYW1zLT5kcnZOYW1lLCAoZHJpdmVyTmFtZSAhPSBOVUxMKSA/IGRyaXZlck5hbWUgOiAiVW5rbm93biIpOworCWNhbXMtPnVzYmRydi5uYW1lID0gY2Ftcy0+ZHJ2TmFtZTsKKwljYW1zLT51c2JkcnYucHJvYmUgPSBjYW1zLT5jYi5wcm9iZTsKKwljYW1zLT51c2JkcnYuZGlzY29ubmVjdCA9IGNhbXMtPmNiLmRpc2Nvbm5lY3Q7CisJY2Ftcy0+dXNiZHJ2LmlkX3RhYmxlID0gaWRfdGFibGU7CisKKwkvKgorCSAqIFVwZGF0ZSBnbG9iYWwgaGFuZGxlIHRvIHVzYnZpZGVvLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50CisJICogYmVjYXVzZSBwcm9iZSgpIGNhbiBiZSBjYWxsZWQgYmVmb3JlIHVzYl9yZWdpc3RlcigpIHJldHVybnMuCisJICogSWYgdGhlIGhhbmRsZSBpcyBub3QgeWV0IHVwZGF0ZWQgdGhlbiB0aGUgcHJvYmUoKSB3aWxsIGZhaWwuCisJICovCisJKnBDYW1zID0gY2FtczsKKwlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmNhbXMtPnVzYmRydik7CisJaWYgKHJlc3VsdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2NhbXM7IGkrKykgeworCQkJc3RydWN0IHV2ZCAqdXAgPSAmY2Ftcy0+Y2FtW2ldOworCQkJa2ZyZWUodXAtPnVzZXJfZGF0YSk7CisJCX0KKwkJa2ZyZWUoY2Ftcyk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworRVhQT1JUX1NZTUJPTCh1c2J2aWRlb19yZWdpc3Rlcik7CisKKy8qCisgKiB1c2J2aWRlb19EZXJlZ2lzdGVyKCkKKyAqCisgKiBQcm9jZWR1cmUgZnJlZXMgYWxsIHVzYnZpZGVvIGFuZCB1c2VyIGRhdGEgc3RydWN0dXJlcy4gQmUgd2FybmVkIHRoYXQKKyAqIGlmIHlvdSBoYWQgc29tZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgY29tcG9uZW50cyBpbiAtPnVzZXIgZmllbGQgdGhlbgorICogeW91IHNob3VsZCBmcmVlIHRoZW0gYmVmb3JlIGNhbGxpbmcgaGVyZS4KKyAqLwordm9pZCB1c2J2aWRlb19EZXJlZ2lzdGVyKHN0cnVjdCB1c2J2aWRlbyAqKnBDYW1zKQoreworCXN0cnVjdCB1c2J2aWRlbyAqY2FtczsKKwlpbnQgaTsKKworCWlmIChwQ2FtcyA9PSBOVUxMKSB7CisJCWVycigiJXM6IHBDYW1zID09IE5VTEwiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCWNhbXMgPSAqcENhbXM7CisJaWYgKGNhbXMgPT0gTlVMTCkgeworCQllcnIoIiVzOiBjYW1zID09IE5VTEwiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJZGJnKCIlczogRGVyZWdpc3RlcmluZyAlcyBkcml2ZXIuIiwgX19GVU5DVElPTl9fLCBjYW1zLT5kcnZOYW1lKTsKKwl1c2JfZGVyZWdpc3RlcigmY2Ftcy0+dXNiZHJ2KTsKKworCWRiZygiJXM6IERlYWxsb2NhdGluZyBjYW1zPSQlcCAoJWQuIGNhbWVyYXMpIiwgX19GVU5DVElPTl9fLCBjYW1zLCBjYW1zLT5udW1fY2FtZXJhcyk7CisJZm9yIChpPTA7IGkgPCBjYW1zLT5udW1fY2FtZXJhczsgaSsrKSB7CisJCXN0cnVjdCB1dmQgKnVwID0gJmNhbXMtPmNhbVtpXTsKKwkJaW50IHdhcm5pbmcgPSAwOworCisJCWlmICh1cC0+dXNlcl9kYXRhICE9IE5VTEwpIHsKKwkJCWlmICh1cC0+dXNlcl9zaXplIDw9IDApCisJCQkJKyt3YXJuaW5nOworCQl9IGVsc2UgeworCQkJaWYgKHVwLT51c2VyX3NpemUgPiAwKQorCQkJCSsrd2FybmluZzsKKwkJfQorCQlpZiAod2FybmluZykgeworCQkJZXJyKCIlczogV2FybmluZzogdXNlcl9kYXRhPSQlcCB1c2VyX3NpemU9JWQuIiwKKwkJCSAgICBfX0ZVTkNUSU9OX18sIHVwLT51c2VyX2RhdGEsIHVwLT51c2VyX3NpemUpOworCQl9IGVsc2UgeworCQkJZGJnKCIlczogRnJlZWluZyAlZC4gJCVwLT51c2VyX2RhdGE9JCVwIiwKKwkJCSAgICBfX0ZVTkNUSU9OX18sIGksIHVwLCB1cC0+dXNlcl9kYXRhKTsKKwkJCWtmcmVlKHVwLT51c2VyX2RhdGEpOworCQl9CisJfQorCS8qIFdob2xlIGFycmF5IHdhcyBhbGxvY2F0ZWQgaW4gb25lIGNodW5rICovCisJZGJnKCIlczogRnJlZWQgJWQgdXZkIHN0cnVjdHVyZXMiLAorCSAgICBfX0ZVTkNUSU9OX18sIGNhbXMtPm51bV9jYW1lcmFzKTsKKwlrZnJlZShjYW1zKTsKKwkqcENhbXMgPSBOVUxMOworfQorCitFWFBPUlRfU1lNQk9MKHVzYnZpZGVvX0RlcmVnaXN0ZXIpOworCisvKgorICogdXNidmlkZW9fRGlzY29ubmVjdCgpCisgKgorICogVGhpcyBwcm9jZWR1cmUgc3RvcHMgYWxsIGRyaXZlciBhY3Rpdml0eS4gRGVhbGxvY2F0aW9uIG9mCisgKiB0aGUgaW50ZXJmYWNlLXByaXZhdGUgc3RydWN0dXJlIChwb2ludGVkIGJ5ICdwdHInKSBpcyBkb25lIG5vdworICogKGlmIHdlIGRvbid0IGhhdmUgYW55IG9wZW4gZmlsZXMpIG9yIGxhdGVyLCB3aGVuIHRob3NlIGZpbGVzCisgKiBhcmUgY2xvc2VkLiBBZnRlciB0aGF0IGRyaXZlciBzaG91bGQgYmUgcmVtb3ZhYmxlLgorICoKKyAqIFRoaXMgY29kZSBoYW5kbGVzIHN1cnByaXNlIHJlbW92YWwuIFRoZSB1dmQtPnVzZXIgaXMgYSBjb3VudGVyIHdoaWNoCisgKiBpbmNyZW1lbnRzIG9uIG9wZW4oKSBhbmQgZGVjcmVtZW50cyBvbiBjbG9zZSgpLiBJZiB3ZSBzZWUgaGVyZSB0aGF0CisgKiB0aGlzIGNvdW50ZXIgaXMgbm90IDAgdGhlbiB3ZSBoYXZlIGEgY2xpZW50IHdobyBzdGlsbCBoYXMgdXMgb3BlbmVkLgorICogV2Ugc2V0IHV2ZC0+cmVtb3ZlX3BlbmRpbmcgZmxhZyBhcyBlYXJseSBhcyBwb3NzaWJsZSwgYW5kIGFmdGVyIHRoYXQKKyAqIGFsbCBhY2Nlc3MgdG8gdGhlIGNhbWVyYSB3aWxsIGdyYWNlZnVsbHkgZmFpbC4gVGhlc2UgZmFpbHVyZXMgc2hvdWxkCisgKiBwcm9tcHQgY2xpZW50IHRvIChldmVudHVhbGx5KSBjbG9zZSB0aGUgdmlkZW8gZGV2aWNlLCBhbmQgdGhlbiAtIGluCisgKiB1c2J2aWRlb192NGxfY2xvc2UoKSAtIHdlIGRlY3JlbWVudCB1dmQtPnV2ZF91c2VkIGFuZCB1c2FnZSBjb3VudGVyLgorICoKKyAqIEhpc3Rvcnk6CisgKiAyMi1KYW4tMjAwMCBBZGRlZCBwb2xsaW5nIG9mIE1PRF9JTl9VU0UgdG8gZGVsYXkgcmVtb3ZhbCB1bnRpbCBhbGwgdXNlcnMgZ29uZS4KKyAqIDI3LUphbi0yMDAwIFJld29ya2VkIHRvIGFsbG93IHBlbmRpbmcgZGlzY29ubmVjdHM7IHNlZSB4eHhfY2xvc2UoKQorICogMjQtTWF5LTIwMDAgQ29ycmVjdGVkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb24gKE1PRF94eHhfVVNFX0NPVU5UKS4KKyAqIDE5LU9jdC0yMDAwIE1vdmVkIHRvIHVzYnZpZGVvIG1vZHVsZS4KKyAqLworc3RhdGljIHZvaWQgdXNidmlkZW9fRGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXZkICp1dmQgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKwlpbnQgaTsKKworCWlmICh1dmQgPT0gTlVMTCkgeworCQllcnIoIiVzKCQlcCk6IElsbGVnYWwgY2FsbC4iLCBfX0ZVTkNUSU9OX18sIGludGYpOworCQlyZXR1cm47CisJfQorCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisKKwl1c2J2aWRlb19DbGllbnRJbmNNb2RDb3VudCh1dmQpOworCWlmICh1dmQtPmRlYnVnID4gMCkKKwkJaW5mbygiJXMoJXAuKSIsIF9fRlVOQ1RJT05fXywgaW50Zik7CisKKwlkb3duKCZ1dmQtPmxvY2spOworCXV2ZC0+cmVtb3ZlX3BlbmRpbmcgPSAxOyAvKiBOb3cgYWxsIElTTyBkYXRhIHdpbGwgYmUgaWdub3JlZCAqLworCisJLyogQXQgdGhpcyB0aW1lIHdlIGFzayB0byBjYW5jZWwgb3V0c3RhbmRpbmcgVVJCcyAqLworCUdFVF9DQUxMQkFDSyh1dmQsIHN0b3BEYXRhUHVtcCkodXZkKTsKKworCWZvciAoaT0wOyBpIDwgVVNCVklERU9fTlVNU0JVRjsgaSsrKQorCQl1c2JfZnJlZV91cmIodXZkLT5zYnVmW2ldLnVyYik7CisKKwl1c2JfcHV0X2Rldih1dmQtPmRldik7CisJdXZkLT5kZXYgPSBOVUxMOyAgICAJICAgIC8qIFVTQiBkZXZpY2UgaXMgbm8gbW9yZSAqLworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnV2ZC0+dmRldik7CisJaWYgKHV2ZC0+ZGVidWcgPiAwKQorCQlpbmZvKCIlczogVmlkZW8gdW5yZWdpc3RlcmVkLiIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAodXZkLT51c2VyKQorCQlpbmZvKCIlczogSW4gdXNlLCBkaXNjb25uZWN0IHBlbmRpbmcuIiwgX19GVU5DVElPTl9fKTsKKwllbHNlCisJCXVzYnZpZGVvX0NhbWVyYVJlbGVhc2UodXZkKTsKKwl1cCgmdXZkLT5sb2NrKTsKKwlpbmZvKCJVU0IgY2FtZXJhIGRpc2Nvbm5lY3RlZC4iKTsKKworCXVzYnZpZGVvX0NsaWVudERlY01vZENvdW50KHV2ZCk7Cit9CisKKy8qCisgKiB1c2J2aWRlb19DYW1lcmFSZWxlYXNlKCkKKyAqCisgKiBUaGlzIGNvZGUgZG9lcyBmaW5hbCByZWxlYXNlIG9mIHV2ZC4gVGhpcyBoYXBwZW5zCisgKiBhZnRlciB0aGUgZGV2aWNlIGlzIGRpc2Nvbm5lY3RlZCAtYW5kLSBhbGwgY2xpZW50cworICogY2xvc2VkIHRoZWlyIGZpbGVzLgorICoKKyAqIEhpc3Rvcnk6CisgKiAyNy1KYW4tMjAwMCBDcmVhdGVkLgorICovCitzdGF0aWMgdm9pZCB1c2J2aWRlb19DYW1lcmFSZWxlYXNlKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpZiAodXZkID09IE5VTEwpIHsKKwkJZXJyKCIlczogSWxsZWdhbCBjYWxsIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCVJpbmdRdWV1ZV9GcmVlKCZ1dmQtPmRwKTsKKwlpZiAoVkFMSURfQ0FMTEJBQ0sodXZkLCB1c2VyRnJlZSkpCisJCUdFVF9DQUxMQkFDSyh1dmQsIHVzZXJGcmVlKSh1dmQpOworCXV2ZC0+dXZkX3VzZWQgPSAwOwkvKiBUaGlzIGlzIGF0b21pYywgbm8gbmVlZCB0byB0YWtlIG11dGV4ICovCit9CisKKy8qCisgKiB1c2J2aWRlb19maW5kX3N0cnVjdCgpCisgKgorICogVGhpcyBjb2RlIHNlYXJjaGVzIHRoZSBhcnJheSBvZiBwcmVhbGxvY2F0ZWQgKHN0YXRpYykgc3RydWN0dXJlcworICogYW5kIHJldHVybnMgaW5kZXggb2YgdGhlIGZpcnN0IG9uZSB0aGF0IGlzbid0IGluIHVzZS4gUmV0dXJucyAtMQorICogaWYgdGhlcmUgYXJlIG5vIGZyZWUgc3RydWN0dXJlcy4KKyAqCisgKiBIaXN0b3J5OgorICogMjctSmFuLTIwMDAgQ3JlYXRlZC4KKyAqLworc3RhdGljIGludCB1c2J2aWRlb19maW5kX3N0cnVjdChzdHJ1Y3QgdXNidmlkZW8gKmNhbXMpCit7CisJaW50IHUsIHJ2ID0gLTE7CisKKwlpZiAoY2FtcyA9PSBOVUxMKSB7CisJCWVycigiTm8gdXNidmlkZW8gaGFuZGxlPyIpOworCQlyZXR1cm4gLTE7CisJfQorCWRvd24oJmNhbXMtPmxvY2spOworCWZvciAodSA9IDA7IHUgPCBjYW1zLT5udW1fY2FtZXJhczsgdSsrKSB7CisJCXN0cnVjdCB1dmQgKnV2ZCA9ICZjYW1zLT5jYW1bdV07CisJCWlmICghdXZkLT51dmRfdXNlZCkgLyogVGhpcyBvbmUgaXMgZnJlZSAqLworCQl7CisJCQl1dmQtPnV2ZF91c2VkID0gMTsJLyogSW4gdXNlIG5vdyAqLworCQkJaW5pdF9NVVRFWCgmdXZkLT5sb2NrKTsJLyogdG8gMSA9PSBhdmFpbGFibGUgKi8KKwkJCXV2ZC0+ZGV2ID0gTlVMTDsKKwkJCXJ2ID0gdTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwKCZjYW1zLT5sb2NrKTsKKwlyZXR1cm4gcnY7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYnZpZGVvX2ZvcHMgPSB7CisJLm93bmVyID0gIFRISVNfTU9EVUxFLAorCS5vcGVuID0gICB1c2J2aWRlb192NGxfb3BlbiwKKwkucmVsZWFzZSA9dXNidmlkZW9fdjRsX2Nsb3NlLAorCS5yZWFkID0gICB1c2J2aWRlb192NGxfcmVhZCwKKwkubW1hcCA9ICAgdXNidmlkZW9fdjRsX21tYXAsCisJLmlvY3RsID0gIHVzYnZpZGVvX3Y0bF9pb2N0bCwKKwkubGxzZWVrID0gbm9fbGxzZWVrLAorfTsKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHVzYnZpZGVvX3RlbXBsYXRlID0geworCS5vd25lciA9ICAgICAgVEhJU19NT0RVTEUsCisJLnR5cGUgPSAgICAgICBWSURfVFlQRV9DQVBUVVJFLAorCS5oYXJkd2FyZSA9ICAgVklEX0hBUkRXQVJFX0NQSUEsCisJLmZvcHMgPSAgICAgICAmdXNidmlkZW9fZm9wcywKK307CisKK3N0cnVjdCB1dmQgKnVzYnZpZGVvX0FsbG9jYXRlRGV2aWNlKHN0cnVjdCB1c2J2aWRlbyAqY2FtcykKK3sKKwlpbnQgaSwgZGV2bnVtOworCXN0cnVjdCB1dmQgKnV2ZCA9IE5VTEw7CisKKwlpZiAoY2FtcyA9PSBOVUxMKSB7CisJCWVycigiTm8gdXNidmlkZW8gaGFuZGxlPyIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlkZXZudW0gPSB1c2J2aWRlb19maW5kX3N0cnVjdChjYW1zKTsKKwlpZiAoZGV2bnVtID09IC0xKSB7CisJCWVycigiSUJNIFVTQiBjYW1lcmEgZHJpdmVyOiBUb28gbWFueSBkZXZpY2VzISIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJdXZkID0gJmNhbXMtPmNhbVtkZXZudW1dOworCWRiZygiRGV2aWNlIGVudHJ5ICMlZC4gYXQgJCVwIiwgZGV2bnVtLCB1dmQpOworCisJLyogTm90IHJlbHlpbmcgdXBvbiBjYWxsZXIgd2UgaW5jcmVhc2UgbW9kdWxlIGNvdW50ZXIgb3Vyc2VsdmVzICovCisJdXNidmlkZW9fQ2xpZW50SW5jTW9kQ291bnQodXZkKTsKKworCWRvd24oJnV2ZC0+bG9jayk7CisJZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1TQlVGOyBpKyspIHsKKwkJdXZkLT5zYnVmW2ldLnVyYiA9IHVzYl9hbGxvY191cmIoRlJBTUVTX1BFUl9ERVNDLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHV2ZC0+c2J1ZltpXS51cmIgPT0gTlVMTCkgeworCQkJZXJyKCJ1c2JfYWxsb2NfdXJiKCVkLikgZmFpbGVkLiIsIEZSQU1FU19QRVJfREVTQyk7CisJCQl1dmQtPnV2ZF91c2VkID0gMDsKKwkJCXV2ZCA9IE5VTEw7CisJCQlnb3RvIGFsbG9jYXRlX2RvbmU7CisJCX0KKwl9CisJdXZkLT51c2VyPTA7CisJdXZkLT5yZW1vdmVfcGVuZGluZyA9IDA7CisJdXZkLT5sYXN0X2Vycm9yID0gMDsKKwlSaW5nUXVldWVfSW5pdGlhbGl6ZSgmdXZkLT5kcCk7CisKKwkvKiBJbml0aWFsaXplIHZpZGVvIGRldmljZSBzdHJ1Y3R1cmUgKi8KKwl1dmQtPnZkZXYgPSB1c2J2aWRlb190ZW1wbGF0ZTsKKwlzcHJpbnRmKHV2ZC0+dmRldi5uYW1lLCAiJS4yMHMgVVNCIENhbWVyYSIsIGNhbXMtPmRydk5hbWUpOworCS8qCisJICogVGhlIGNsaWVudCBpcyBmcmVlIHRvIG92ZXJ3cml0ZSB0aG9zZSBiZWNhdXNlIHdlCisJICogcmV0dXJuIGNvbnRyb2wgdG8gdGhlIGNsaWVudCdzIHByb2JlIGZ1bmN0aW9uIHJpZ2h0IG5vdy4KKwkgKi8KK2FsbG9jYXRlX2RvbmU6CisJdXAgKCZ1dmQtPmxvY2spOworCXVzYnZpZGVvX0NsaWVudERlY01vZENvdW50KHV2ZCk7CisJcmV0dXJuIHV2ZDsKK30KKworRVhQT1JUX1NZTUJPTCh1c2J2aWRlb19BbGxvY2F0ZURldmljZSk7CisKK2ludCB1c2J2aWRlb19SZWdpc3RlclZpZGVvRGV2aWNlKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwljaGFyIHRtcDFbMjBdLCB0bXAyWzIwXTsJLyogQnVmZmVycyBmb3IgcHJpbnRpbmcgKi8KKworCWlmICh1dmQgPT0gTlVMTCkgeworCQllcnIoIiVzOiBJbGxlZ2FsIGNhbGwuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICh1dmQtPnZpZGVvX2VuZHAgPT0gMCkgeworCQlpbmZvKCIlczogTm8gdmlkZW8gZW5kcG9pbnQgc3BlY2lmaWVkOyBkYXRhIHB1bXAgZGlzYWJsZWQuIiwgX19GVU5DVElPTl9fKTsKKwl9CisJaWYgKHV2ZC0+cGFsZXR0ZUJpdHMgPT0gMCkgeworCQllcnIoIiVzOiBObyBwYWxldHRlcyBzcGVjaWZpZWQhIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICh1dmQtPmRlZmF1bHRQYWxldHRlID09IDApIHsKKwkJaW5mbygiJXM6IE5vIGRlZmF1bHQgcGFsZXR0ZSEiLCBfX0ZVTkNUSU9OX18pOworCX0KKworCXV2ZC0+bWF4X2ZyYW1lX3NpemUgPSBWSURFT1NJWkVfWCh1dmQtPmNhbnZhcykgKgorCQlWSURFT1NJWkVfWSh1dmQtPmNhbnZhcykgKiBWNExfQllURVNfUEVSX1BJWEVMOworCXVzYnZpZGVvX1ZpZGVvc2l6ZVRvU3RyaW5nKHRtcDEsIHNpemVvZih0bXAxKSwgdXZkLT52aWRlb3NpemUpOworCXVzYnZpZGVvX1ZpZGVvc2l6ZVRvU3RyaW5nKHRtcDIsIHNpemVvZih0bXAyKSwgdXZkLT5jYW52YXMpOworCisJaWYgKHV2ZC0+ZGVidWcgPiAwKSB7CisJCWluZm8oIiVzOiBpZmFjZT0lZC4gZW5kcG9pbnQ9JCUwMnggcGFsZXR0ZUJpdHM9JCUwOGx4IiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHV2ZC0+aWZhY2UsIHV2ZC0+dmlkZW9fZW5kcCwgdXZkLT5wYWxldHRlQml0cyk7CisJfQorCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnV2ZC0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgdmlkZW9fbnIpID09IC0xKSB7CisJCWVycigiJXM6IHZpZGVvX3JlZ2lzdGVyX2RldmljZSBmYWlsZWQiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVQSVBFOworCX0KKwlpZiAodXZkLT5kZWJ1ZyA+IDEpIHsKKwkJaW5mbygiJXM6IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgpIHN1Y2Nlc3NmdWwiLCBfX0ZVTkNUSU9OX18pOworCX0KKwlpZiAodXZkLT5kZXYgPT0gTlVMTCkgeworCQllcnIoIiVzOiB1dmQtPmRldiA9PSBOVUxMIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaW5mbygiJXMgb24gL2Rldi92aWRlbyVkOiBjYW52YXM9JXMgdmlkZW9zaXplPSVzIiwKKwkgICAgICh1dmQtPmhhbmRsZSAhPSBOVUxMKSA/IHV2ZC0+aGFuZGxlLT5kcnZOYW1lIDogIj8/PyIsCisJICAgICB1dmQtPnZkZXYubWlub3IsIHRtcDIsIHRtcDEpOworCisJdXNiX2dldF9kZXYodXZkLT5kZXYpOworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKHVzYnZpZGVvX1JlZ2lzdGVyVmlkZW9EZXZpY2UpOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCitzdGF0aWMgaW50IHVzYnZpZGVvX3Y0bF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgdXZkICp1dmQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IHZtYS0+dm1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBzaXplICA9IHZtYS0+dm1fZW5kLXZtYS0+dm1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBwYWdlLCBwb3M7CisKKwlpZiAoIUNBTUVSQV9JU19PUEVSQVRJT05BTCh1dmQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChzaXplID4gKCgoVVNCVklERU9fTlVNRlJBTUVTICogdXZkLT5tYXhfZnJhbWVfc2l6ZSkgKyBQQUdFX1NJWkUgLSAxKSAmIH4oUEFHRV9TSVpFIC0gMSkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBvcyA9ICh1bnNpZ25lZCBsb25nKSB1dmQtPmZidWY7CisJd2hpbGUgKHNpemUgPiAwKSB7CisJCXBhZ2UgPSB2bWFsbG9jX3RvX3Bmbigodm9pZCAqKXBvcyk7CisJCWlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLCBzdGFydCwgcGFnZSwgUEFHRV9TSVpFLCBQQUdFX1NIQVJFRCkpCisJCQlyZXR1cm4gLUVBR0FJTjsKKworCQlzdGFydCArPSBQQUdFX1NJWkU7CisJCXBvcyArPSBQQUdFX1NJWkU7CisJCWlmIChzaXplID4gUEFHRV9TSVpFKQorCQkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJCWVsc2UKKwkJCXNpemUgPSAwOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogdXNidmlkZW9fdjRsX29wZW4oKQorICoKKyAqIFRoaXMgaXMgcGFydCBvZiBWaWRlbyA0IExpbnV4IEFQSS4gVGhlIGRyaXZlciBjYW4gYmUgb3BlbmVkIGJ5IG9uZQorICogY2xpZW50IG9ubHkgKGNoZWNrcyBpbnRlcm5hbCBjb3VudGVyICd1dmRzZXInKS4gVGhlIHByb2NlZHVyZQorICogdGhlbiBhbGxvY2F0ZXMgYnVmZmVycyBuZWVkZWQgZm9yIHZpZGVvIHByb2Nlc3NpbmcuCisgKgorICogSGlzdG9yeToKKyAqIDIyLUphbi0yMDAwIFJld3JvdGUsIG1vdmVkIHNjcmF0Y2ggYnVmZmVyIGFsbG9jYXRpb24gaGVyZS4gTm93IHRoZQorICogICAgICAgICAgICAgY2FtZXJhIGlzIGFsc28gaW5pdGlhbGl6ZWQgaGVyZSAob25jZSBwZXIgY29ubmVjdCksIGF0CisgKiAgICAgICAgICAgICBleHBlbnNlIG9mIFY0TCBjbGllbnQgKGl0IHdhaXRzIG9uIG9wZW4oKSBjYWxsKS4KKyAqIDI3LUphbi0yMDAwIFVzZWQgVVNCVklERU9fTlVNU0JVRiBhcyBudW1iZXIgb2YgVVJCIGJ1ZmZlcnMuCisgKiAyNC1NYXktMjAwMCBDb3JyZWN0ZWQgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbiAoTU9EX3h4eF9VU0VfQ09VTlQpLgorICovCitzdGF0aWMgaW50IHVzYnZpZGVvX3Y0bF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHV2ZCAqdXZkID0gKHN0cnVjdCB1dmQgKikgZGV2OworCWNvbnN0IGludCBzYl9zaXplID0gRlJBTUVTX1BFUl9ERVNDICogdXZkLT5pc29fcGFja2V0X2xlbjsKKwlpbnQgaSwgZXJyQ29kZSA9IDA7CisKKwlpZiAodXZkLT5kZWJ1ZyA+IDEpCisJCWluZm8oIiVzKCQlcCkiLCBfX0ZVTkNUSU9OX18sIGRldik7CisKKwl1c2J2aWRlb19DbGllbnRJbmNNb2RDb3VudCh1dmQpOworCWRvd24oJnV2ZC0+bG9jayk7CisKKwlpZiAodXZkLT51c2VyKSB7CisJCWVycigiJXM6IFNvbWVvbmUgdHJpZWQgdG8gb3BlbiBhbiBhbHJlYWR5IG9wZW5lZCBkZXZpY2UhIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyQ29kZSA9IC1FQlVTWTsKKwl9IGVsc2UgeworCQkvKiBDbGVhciBzdGF0aXN0aWNzICovCisJCW1lbXNldCgmdXZkLT5zdGF0cywgMCwgc2l6ZW9mKHV2ZC0+c3RhdHMpKTsKKworCQkvKiBDbGVhbiBwb2ludGVycyBzbyB3ZSBrbm93IGlmIHdlIGFsbG9jYXRlZCBzb21ldGhpbmcgKi8KKwkJZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1TQlVGOyBpKyspCisJCQl1dmQtPnNidWZbaV0uZGF0YSA9IE5VTEw7CisKKwkJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZnJhbWUgYnVmZmVycyAqLworCQl1dmQtPmZidWZfc2l6ZSA9IFVTQlZJREVPX05VTUZSQU1FUyAqIHV2ZC0+bWF4X2ZyYW1lX3NpemU7CisJCXV2ZC0+ZmJ1ZiA9IHVzYnZpZGVvX3J2bWFsbG9jKHV2ZC0+ZmJ1Zl9zaXplKTsKKwkJUmluZ1F1ZXVlX0FsbG9jYXRlKCZ1dmQtPmRwLCBSSU5HX1FVRVVFX1NJWkUpOworCQlpZiAoKHV2ZC0+ZmJ1ZiA9PSBOVUxMKSB8fAorCQkgICAgKCFSaW5nUXVldWVfSXNBbGxvY2F0ZWQoJnV2ZC0+ZHApKSkgeworCQkJZXJyKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlIGZidWYgb3IgZHAiLCBfX0ZVTkNUSU9OX18pOworCQkJZXJyQ29kZSA9IC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQkvKiBBbGxvY2F0ZSBhbGwgYnVmZmVycyAqLworCQkJZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1GUkFNRVM7IGkrKykgeworCQkJCXV2ZC0+ZnJhbWVbaV0uZnJhbWVTdGF0ZSA9IEZyYW1lU3RhdGVfVW51c2VkOworCQkJCXV2ZC0+ZnJhbWVbaV0uZGF0YSA9IHV2ZC0+ZmJ1ZiArIGkqKHV2ZC0+bWF4X2ZyYW1lX3NpemUpOworCQkJCS8qCisJCQkJICogU2V0IGRlZmF1bHQgc2l6ZXMgaW4gY2FzZSBJT0NUTCAoVklESU9DTUNBUFRVUkUpCisJCQkJICogaXMgbm90IHVzZWQgKHVzaW5nIHJlYWQoKSBpbnN0ZWFkKS4KKwkJCQkgKi8KKwkJCQl1dmQtPmZyYW1lW2ldLmNhbnZhcyA9IHV2ZC0+Y2FudmFzOworCQkJCXV2ZC0+ZnJhbWVbaV0uc2VxUmVhZF9JbmRleCA9IDA7CisJCQl9CisJCQlmb3IgKGk9MDsgaSA8IFVTQlZJREVPX05VTVNCVUY7IGkrKykgeworCQkJCXV2ZC0+c2J1ZltpXS5kYXRhID0ga21hbGxvYyhzYl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJCQlpZiAodXZkLT5zYnVmW2ldLmRhdGEgPT0gTlVMTCkgeworCQkJCQllcnJDb2RlID0gLUVOT01FTTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJCWlmIChlcnJDb2RlICE9IDApIHsKKwkJCS8qIEhhdmUgdG8gZnJlZSBhbGwgdGhhdCBtZW1vcnkgKi8KKwkJCWlmICh1dmQtPmZidWYgIT0gTlVMTCkgeworCQkJCXVzYnZpZGVvX3J2ZnJlZSh1dmQtPmZidWYsIHV2ZC0+ZmJ1Zl9zaXplKTsKKwkJCQl1dmQtPmZidWYgPSBOVUxMOworCQkJfQorCQkJUmluZ1F1ZXVlX0ZyZWUoJnV2ZC0+ZHApOworCQkJZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1TQlVGOyBpKyspIHsKKwkJCQlpZiAodXZkLT5zYnVmW2ldLmRhdGEgIT0gTlVMTCkgeworCQkJCQlrZnJlZSAodXZkLT5zYnVmW2ldLmRhdGEpOworCQkJCQl1dmQtPnNidWZbaV0uZGF0YSA9IE5VTEw7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyogSWYgc28gZmFyIG5vIGVycm9ycyB0aGVuIHdlIHNoYWxsIHN0YXJ0IHRoZSBjYW1lcmEgKi8KKwlpZiAoZXJyQ29kZSA9PSAwKSB7CisJCS8qIFN0YXJ0IGRhdGEgcHVtcCBpZiB3ZSBoYXZlIHZhbGlkIGVuZHBvaW50ICovCisJCWlmICh1dmQtPnZpZGVvX2VuZHAgIT0gMCkKKwkJCWVyckNvZGUgPSBHRVRfQ0FMTEJBQ0sodXZkLCBzdGFydERhdGFQdW1wKSh1dmQpOworCQlpZiAoZXJyQ29kZSA9PSAwKSB7CisJCQlpZiAoVkFMSURfQ0FMTEJBQ0sodXZkLCBzZXR1cE9uT3BlbikpIHsKKwkJCQlpZiAodXZkLT5kZWJ1ZyA+IDEpCisJCQkJCWluZm8oIiVzOiBzZXR1cE9uT3BlbiBjYWxsYmFjayIsIF9fRlVOQ1RJT05fXyk7CisJCQkJZXJyQ29kZSA9IEdFVF9DQUxMQkFDSyh1dmQsIHNldHVwT25PcGVuKSh1dmQpOworCQkJCWlmIChlcnJDb2RlIDwgMCkgeworCQkJCQllcnIoIiVzOiBzZXR1cE9uT3BlbiBjYWxsYmFjayBmYWlsZWQgKCVkLikuIiwKKwkJCQkJICAgIF9fRlVOQ1RJT05fXywgZXJyQ29kZSk7CisJCQkJfSBlbHNlIGlmICh1dmQtPmRlYnVnID4gMSkgeworCQkJCQlpbmZvKCIlczogc2V0dXBPbk9wZW4gY2FsbGJhY2sgc3VjY2Vzc2Z1bCIsIF9fRlVOQ1RJT05fXyk7CisJCQkJfQorCQkJfQorCQkJaWYgKGVyckNvZGUgPT0gMCkgeworCQkJCXV2ZC0+c2V0dGluZ3NBZGp1c3RlZCA9IDA7CisJCQkJaWYgKHV2ZC0+ZGVidWcgPiAxKQorCQkJCQlpbmZvKCIlczogT3BlbiBzdWNjZWVkZWQuIiwgX19GVU5DVElPTl9fKTsKKwkJCQl1dmQtPnVzZXIrKzsKKwkJCQlmaWxlLT5wcml2YXRlX2RhdGEgPSB1dmQ7CisJCQl9CisJCX0KKwl9CisJdXAoJnV2ZC0+bG9jayk7CisJaWYgKGVyckNvZGUgIT0gMCkKKwkJdXNidmlkZW9fQ2xpZW50RGVjTW9kQ291bnQodXZkKTsKKwlpZiAodXZkLT5kZWJ1ZyA+IDApCisJCWluZm8oIiVzOiBSZXR1cm5pbmcgJWQuIiwgX19GVU5DVElPTl9fLCBlcnJDb2RlKTsKKwlyZXR1cm4gZXJyQ29kZTsKK30KKworLyoKKyAqIHVzYnZpZGVvX3Y0bF9jbG9zZSgpCisgKgorICogVGhpcyBpcyBwYXJ0IG9mIFZpZGVvIDQgTGludXggQVBJLiBUaGUgcHJvY2VkdXJlCisgKiBzdG9wcyBzdHJlYW1pbmcgYW5kIGRlYWxsb2NhdGVzIGFsbCBidWZmZXJzIHRoYXQgd2VyZSBlYXJsaWVyCisgKiBhbGxvY2F0ZWQgaW4gdXNidmlkZW9fdjRsX29wZW4oKS4KKyAqCisgKiBIaXN0b3J5OgorICogMjItSmFuLTIwMDAgTW92ZWQgc2NyYXRjaCBidWZmZXIgZGVhbGxvY2F0aW9uIGhlcmUuCisgKiAyNy1KYW4tMjAwMCBVc2VkIFVTQlZJREVPX05VTVNCVUYgYXMgbnVtYmVyIG9mIFVSQiBidWZmZXJzLgorICogMjQtTWF5LTIwMDAgTW92ZWQgTU9EX0RFQ19VU0VfQ09VTlQgb3V0c2lkZSBvZiBjb2RlIHRoYXQgY2FuIHNsZWVwLgorICovCitzdGF0aWMgaW50IHVzYnZpZGVvX3Y0bF9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHV2ZCAqdXZkID0gKHN0cnVjdCB1dmQgKikgZGV2OworCWludCBpOworCisJaWYgKHV2ZC0+ZGVidWcgPiAxKQorCQlpbmZvKCIlcygkJXApIiwgX19GVU5DVElPTl9fLCBkZXYpOworCisJZG93bigmdXZkLT5sb2NrKTsKKwlHRVRfQ0FMTEJBQ0sodXZkLCBzdG9wRGF0YVB1bXApKHV2ZCk7CisJdXNidmlkZW9fcnZmcmVlKHV2ZC0+ZmJ1ZiwgdXZkLT5mYnVmX3NpemUpOworCXV2ZC0+ZmJ1ZiA9IE5VTEw7CisJUmluZ1F1ZXVlX0ZyZWUoJnV2ZC0+ZHApOworCisJZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1TQlVGOyBpKyspIHsKKwkJa2ZyZWUodXZkLT5zYnVmW2ldLmRhdGEpOworCQl1dmQtPnNidWZbaV0uZGF0YSA9IE5VTEw7CisJfQorCisjaWYgVVNCVklERU9fUkVQT1JUX1NUQVRTCisJdXNidmlkZW9fUmVwb3J0U3RhdGlzdGljcyh1dmQpOworI2VuZGlmICAgIAorCisJdXZkLT51c2VyLS07CisJaWYgKHV2ZC0+cmVtb3ZlX3BlbmRpbmcpIHsKKwkJaWYgKHV2ZC0+ZGVidWcgPiAwKQorCQkJaW5mbygidXNidmlkZW9fdjRsX2Nsb3NlOiBGaW5hbCBkaXNjb25uZWN0LiIpOworCQl1c2J2aWRlb19DYW1lcmFSZWxlYXNlKHV2ZCk7CisJfQorCXVwKCZ1dmQtPmxvY2spOworCXVzYnZpZGVvX0NsaWVudERlY01vZENvdW50KHV2ZCk7CisKKwlpZiAodXZkLT5kZWJ1ZyA+IDEpCisJCWluZm8oIiVzOiBDb21wbGV0ZWQuIiwgX19GVU5DVElPTl9fKTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXJldHVybiAwOworfQorCisvKgorICogdXNidmlkZW9fdjRsX2lvY3RsKCkKKyAqCisgKiBUaGlzIGlzIHBhcnQgb2YgVmlkZW8gNCBMaW51eCBBUEkuIFRoZSBwcm9jZWR1cmUgaGFuZGxlcyBpb2N0bCgpIGNhbGxzLgorICoKKyAqIEhpc3Rvcnk6CisgKiAyMi1KYW4tMjAwMCBDb3JyZWN0ZWQgVklESU9DU1BJQ1QgdG8gcmVqZWN0IHVuc3VwcG9ydGVkIHNldHRpbmdzLgorICovCitzdGF0aWMgaW50IHVzYnZpZGVvX3Y0bF9kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCB1dmQgKnV2ZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmICghQ0FNRVJBX0lTX09QRVJBVElPTkFMKHV2ZCkpCisJCXJldHVybiAtRUlPOworCisJc3dpdGNoIChjbWQpIHsKKwkJY2FzZSBWSURJT0NHQ0FQOgorCQl7CisJCQlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSAqYiA9IGFyZzsKKwkJCSpiID0gdXZkLT52Y2FwOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NHQ0hBTjoKKwkJeworCQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnYgPSBhcmc7CisJCQkqdiA9IHV2ZC0+dmNoYW47CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ1NDSEFOOgorCQl7CQorCQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnYgPSBhcmc7CisJCQlpZiAodi0+Y2hhbm5lbCAhPSAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NHUElDVDoKKwkJeworCQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnBpYyA9IGFyZzsKKwkJCSpwaWMgPSB1dmQtPnZwaWM7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ1NQSUNUOgorCQl7CisJCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcGljID0gYXJnOworCQkJLyoKKwkJCSAqIFVzZSB0ZW1wb3JhcnkgJ3ZpZGVvX3BpY3R1cmUnIHN0cnVjdHVyZSB0byBwcmVzZXJ2ZSBvdXIKKwkJCSAqIG93biBzZXR0aW5ncyAoc3VjaCBhcyBjb2xvciBkZXB0aCwgcGFsZXR0ZSkgdGhhdCB3ZQorCQkJICogYXJlbid0IGFsbG93aW5nIGV2ZXJ5b25lIChWNEwgY2xpZW50KSB0byBjaGFuZ2UuCisJCQkgKi8KKwkJCXV2ZC0+dnBpYy5icmlnaHRuZXNzID0gcGljLT5icmlnaHRuZXNzOworCQkJdXZkLT52cGljLmh1ZSA9IHBpYy0+aHVlOworCQkJdXZkLT52cGljLmNvbG91ciA9IHBpYy0+Y29sb3VyOworCQkJdXZkLT52cGljLmNvbnRyYXN0ID0gcGljLT5jb250cmFzdDsKKwkJCXV2ZC0+c2V0dGluZ3NBZGp1c3RlZCA9IDA7CS8qIFdpbGwgZm9yY2UgbmV3IHNldHRpbmdzICovCisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ1NXSU46CisJCXsKKwkJCXN0cnVjdCB2aWRlb193aW5kb3cgKnZ3ID0gYXJnOworCisJCQlpZihWQUxJRF9DQUxMQkFDSyh1dmQsIHNldFZpZGVvTW9kZSkpIHsKKwkJCQlyZXR1cm4gR0VUX0NBTExCQUNLKHV2ZCwgc2V0VmlkZW9Nb2RlKSh1dmQsIHZ3KTsKKwkJCX0KKworCQkJaWYgKHZ3LT5mbGFncykKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmICh2dy0+Y2xpcGNvdW50KQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKHZ3LT53aWR0aCAhPSBWSURFT1NJWkVfWCh1dmQtPmNhbnZhcykpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAodnctPmhlaWdodCAhPSBWSURFT1NJWkVfWSh1dmQtPmNhbnZhcykpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DR1dJTjoKKwkJeworCQkJc3RydWN0IHZpZGVvX3dpbmRvdyAqdncgPSBhcmc7CisKKwkJCXZ3LT54ID0gMDsKKwkJCXZ3LT55ID0gMDsKKwkJCXZ3LT53aWR0aCA9IFZJREVPU0laRV9YKHV2ZC0+dmlkZW9zaXplKTsKKwkJCXZ3LT5oZWlnaHQgPSBWSURFT1NJWkVfWSh1dmQtPnZpZGVvc2l6ZSk7CisJCQl2dy0+Y2hyb21ha2V5ID0gMDsKKwkJCWlmIChWQUxJRF9DQUxMQkFDSyh1dmQsIGdldEZQUykpCisJCQkJdnctPmZsYWdzID0gR0VUX0NBTExCQUNLKHV2ZCwgZ2V0RlBTKSh1dmQpOworCQkJZWxzZSAKKwkJCQl2dy0+ZmxhZ3MgPSAxMDsgLyogRklYTUU6IGRvIGJldHRlciEgKi8KKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DR01CVUY6CisJCXsKKwkJCXN0cnVjdCB2aWRlb19tYnVmICp2bSA9IGFyZzsKKwkJCWludCBpOworCisJCQltZW1zZXQodm0sIDAsIHNpemVvZigqdm0pKTsKKwkJCXZtLT5zaXplID0gdXZkLT5tYXhfZnJhbWVfc2l6ZSAqIFVTQlZJREVPX05VTUZSQU1FUzsKKwkJCXZtLT5mcmFtZXMgPSBVU0JWSURFT19OVU1GUkFNRVM7CisJCQlmb3IoaSA9IDA7IGkgPCBVU0JWSURFT19OVU1GUkFNRVM7IGkrKykgCisJCQkgIHZtLT5vZmZzZXRzW2ldID0gaSAqIHV2ZC0+bWF4X2ZyYW1lX3NpemU7CisKKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DTUNBUFRVUkU6CisJCXsKKwkJCXN0cnVjdCB2aWRlb19tbWFwICp2bSA9IGFyZzsKKworCQkJaWYgKHV2ZC0+ZGVidWcgPj0gMSkgeworCQkJCWluZm8oIlZJRElPQ01DQVBUVVJFOiBmcmFtZT0lZC4gc2l6ZT0lZHglZCwgZm9ybWF0PSVkLiIsCisJCQkJICAgICB2bS0+ZnJhbWUsIHZtLT53aWR0aCwgdm0tPmhlaWdodCwgdm0tPmZvcm1hdCk7CisJCQl9CisJCQkvKgorCQkJICogQ2hlY2sgaWYgdGhlIHJlcXVlc3RlZCBzaXplIGlzIHN1cHBvcnRlZC4gSWYgdGhlIHJlcXVlc3RvcgorCQkJICogcmVxdWVzdHMgdG9vIGJpZyBhIGZyYW1lIHRoZW4gd2UgbWF5IGJlIHRyaWNrZWQgaW50byBhY2Nlc3NpbmcKKwkJCSAqIG91dHNpZGUgb2Ygb3duIHByZWFsbG9jYXRlZCBmcmFtZSBidWZmZXIgKGluIHV2ZC0+ZnJhbWUpLgorCQkJICogVGhpcyB3aWxsIGNhdXNlIG9vcHMgb3IgYSBzZWN1cml0eSBob2xlLiBUaGVvcmV0aWNhbGx5LCB3ZQorCQkJICogY291bGQgb25seSBjbGFtcCB0aGUgc2l6ZSBkb3duIHRvIGFjY2VwdGFibGUgYm91bmRzLCBidXQgdGhlbgorCQkJICogd2UnZCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGluc2VydCBvdXIgc21hbGxlciBidWZmZXIgaW50bworCQkJICogbGFyZ2VyIGNhbGxlcidzIGJ1ZmZlci4uLiB0aGlzIGlzIG5vdCBhbiBlYXN5IHF1ZXN0aW9uLiBTbyB3ZQorCQkJICogaGVyZSBqdXN0IGZsYXRseSByZWplY3QgdG9vIGxhcmdlIHJlcXVlc3RzLCBhc3N1bWluZyB0aGF0IHRoZQorCQkJICogY2FsbGVyIHdpbGwgcmVzdWJtaXQgd2l0aCBzbWFsbGVyIHNpemUuIENhbGxlcnMgc2hvdWxkIGtub3cKKwkJCSAqIHdoYXQgc2l6ZSB3ZSBzdXBwb3J0IChyZXR1cm5lZCBieSBWSURJT0NHQ0FQKS4gSG93ZXZlciB2aWRjYXQsCisJCQkgKiBmb3Igb25lLCBkb2VzIG5vdCBjYXJlIGFuZCBhbGxvd3MgdG8gYXNrIGZvciBhbnkgc2l6ZS4KKwkJCSAqLworCQkJaWYgKCh2bS0+d2lkdGggPiBWSURFT1NJWkVfWCh1dmQtPmNhbnZhcykpIHx8CisJCQkgICAgKHZtLT5oZWlnaHQgPiBWSURFT1NJWkVfWSh1dmQtPmNhbnZhcykpKSB7CisJCQkJaWYgKHV2ZC0+ZGVidWcgPiAwKSB7CisJCQkJCWluZm8oIlZJRElPQ01DQVBUVVJFOiBTaXplPSVkeCVkIHRvbyBsYXJnZTsgIgorCQkJCQkgICAgICJhbGxvd2VkIG9ubHkgdXAgdG8gJWxkeCVsZCIsIHZtLT53aWR0aCwgdm0tPmhlaWdodCwKKwkJCQkJICAgICBWSURFT1NJWkVfWCh1dmQtPmNhbnZhcyksIFZJREVPU0laRV9ZKHV2ZC0+Y2FudmFzKSk7CisJCQkJfQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJLyogQ2hlY2sgaWYgdGhlIHBhbGV0dGUgaXMgc3VwcG9ydGVkICovCisJCQlpZiAoKCgxTCA8PCB2bS0+Zm9ybWF0KSAmIHV2ZC0+cGFsZXR0ZUJpdHMpID09IDApIHsKKwkJCQlpZiAodXZkLT5kZWJ1ZyA+IDApIHsKKwkJCQkJaW5mbygiVklESU9DTUNBUFRVUkU6IGZvcm1hdD0lZC4gbm90IHN1cHBvcnRlZCIKKwkJCQkJICAgICAiIChwYWxldHRlQml0cz0kJTA4bHgpIiwKKwkJCQkJICAgICB2bS0+Zm9ybWF0LCB1dmQtPnBhbGV0dGVCaXRzKTsKKwkJCQl9CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlpZiAoKHZtLT5mcmFtZSA8IDApIHx8ICh2bS0+ZnJhbWUgPj0gVVNCVklERU9fTlVNRlJBTUVTKSkgeworCQkJCWVycigiVklESU9DTUNBUFRVUkU6IHZtLmZyYW1lPSVkLiAhRSBbMC0lZF0iLCB2bS0+ZnJhbWUsIFVTQlZJREVPX05VTUZSQU1FUy0xKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWlmICh1dmQtPmZyYW1lW3ZtLT5mcmFtZV0uZnJhbWVTdGF0ZSA9PSBGcmFtZVN0YXRlX0dyYWJiaW5nKSB7CisJCQkJLyogTm90IGFuIGVycm9yIC0gY2FuIGhhcHBlbiAqLworCQkJfQorCQkJdXZkLT5mcmFtZVt2bS0+ZnJhbWVdLnJlcXVlc3QgPSBWSURFT1NJWkUodm0tPndpZHRoLCB2bS0+aGVpZ2h0KTsKKwkJCXV2ZC0+ZnJhbWVbdm0tPmZyYW1lXS5wYWxldHRlID0gdm0tPmZvcm1hdDsKKworCQkJLyogTWFyayBpdCBhcyByZWFkeSAqLworCQkJdXZkLT5mcmFtZVt2bS0+ZnJhbWVdLmZyYW1lU3RhdGUgPSBGcmFtZVN0YXRlX1JlYWR5OworCisJCQlyZXR1cm4gdXNidmlkZW9fTmV3RnJhbWUodXZkLCB2bS0+ZnJhbWUpOworCQl9CisJCWNhc2UgVklESU9DU1lOQzoKKwkJeworCQkJaW50ICpmcmFtZU51bSA9IGFyZzsKKwkJCWludCByZXQ7CisKKwkJCWlmICgqZnJhbWVOdW0gPCAwIHx8ICpmcmFtZU51bSA+PSBVU0JWSURFT19OVU1GUkFNRVMpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJCisJCQlpZiAodXZkLT5kZWJ1ZyA+PSAxKQorCQkJCWluZm8oIlZJRElPQ1NZTkM6IHN5bmNpbmcgdG8gZnJhbWUgJWQuIiwgKmZyYW1lTnVtKTsKKwkJCWlmICh1dmQtPmZsYWdzICYgRkxBR1NfTk9fREVDT0RJTkcpCisJCQkJcmV0ID0gdXNidmlkZW9fR2V0RnJhbWUodXZkLCAqZnJhbWVOdW0pOworCQkJZWxzZSBpZiAoVkFMSURfQ0FMTEJBQ0sodXZkLCBnZXRGcmFtZSkpIHsKKwkJCQlyZXQgPSBHRVRfQ0FMTEJBQ0sodXZkLCBnZXRGcmFtZSkodXZkLCAqZnJhbWVOdW0pOworCQkJCWlmICgocmV0IDwgMCkgJiYgKHV2ZC0+ZGVidWcgPj0gMSkpIHsKKwkJCQkJZXJyKCJWSURJT0NTWU5DOiBnZXRGcmFtZSgpIHJldHVybmVkICVkLiIsIHJldCk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQllcnIoIlZJRElPQ1NZTkM6IGdldEZyYW1lIGlzIG5vdCBzZXQiKTsKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJfQorCisJCQkvKgorCQkJICogVGhlIGZyYW1lIGlzIGluIEZyYW1lU3RhdGVfRG9uZV9Ib2xkIHN0YXRlLiBSZWxlYXNlIGl0CisJCQkgKiByaWdodCBub3cgYmVjYXVzZSBpdHMgZGF0YSBpcyBhbHJlYWR5IG1hcHBlZCBpbnRvCisJCQkgKiB0aGUgdXNlciBzcGFjZSBhbmQgaXQncyB1cCB0byB0aGUgYXBwbGljYXRpb24gdG8KKwkJCSAqIG1ha2UgdXNlIG9mIGl0IHVudGlsIGl0IGFza3MgZm9yIGFub3RoZXIgZnJhbWUuCisJCQkgKi8KKwkJCXV2ZC0+ZnJhbWVbKmZyYW1lTnVtXS5mcmFtZVN0YXRlID0gRnJhbWVTdGF0ZV9VbnVzZWQ7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWNhc2UgVklESU9DR0ZCVUY6CisJCXsKKwkJCXN0cnVjdCB2aWRlb19idWZmZXIgKnZiID0gYXJnOworCisJCQltZW1zZXQodmIsIDAsIHNpemVvZigqdmIpKTsKKyAJCQlyZXR1cm4gMDsKKyAJCX0KKwkJY2FzZSBWSURJT0NLRVk6CisJCQlyZXR1cm4gMDsKKworCQljYXNlIFZJRElPQ0NBUFRVUkU6CisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQljYXNlIFZJRElPQ1NGQlVGOgorCisJCWNhc2UgVklESU9DR1RVTkVSOgorCQljYXNlIFZJRElPQ1NUVU5FUjoKKworCQljYXNlIFZJRElPQ0dGUkVROgorCQljYXNlIFZJRElPQ1NGUkVROgorCisJCWNhc2UgVklESU9DR0FVRElPOgorCQljYXNlIFZJRElPQ1NBVURJTzoKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1c2J2aWRlb192NGxfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLCB1c2J2aWRlb192NGxfZG9faW9jdGwpOworfQorCisvKgorICogdXNidmlkZW9fdjRsX3JlYWQoKQorICoKKyAqIFRoaXMgaXMgbW9zdGx5IGJvcmluZyBzdHVmZi4gV2Ugc2ltcGx5IGFzayBmb3IgYSBmcmFtZSBhbmQgd2hlbiBpdAorICogYXJyaXZlcyBjb3B5IGFsbCB0aGUgdmlkZW8gZGF0YSBmcm9tIGl0IGludG8gdXNlciBzcGFjZS4gVGhlcmUgaXMKKyAqIG5vIG9idmlvdXMgbmVlZCB0byBvdmVycmlkZSB0aGlzIG1ldGhvZC4KKyAqCisgKiBIaXN0b3J5OgorICogMjAtT2N0LTIwMDAgQ3JlYXRlZC4KKyAqIDAxLU5vdi0yMDAwIEFkZGVkIG11dGV4ICh1dmQtPmxvY2spLgorICovCitzdGF0aWMgc3NpemVfdCB1c2J2aWRlb192NGxfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHV2ZCAqdXZkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCBub2Jsb2NrID0gZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0s7CisJaW50IGZybXggPSAtMSwgaTsKKwlzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lOworCisJaWYgKCFDQU1FUkFfSVNfT1BFUkFUSU9OQUwodXZkKSB8fCAoYnVmID09IE5VTEwpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICh1dmQtPmRlYnVnID49IDEpCisJCWluZm8oIiVzOiAlWmQuIGJ5dGVzLCBub2Jsb2NrPSVkLiIsIF9fRlVOQ1RJT05fXywgY291bnQsIG5vYmxvY2spOworCisJZG93bigmdXZkLT5sb2NrKTsJCisKKwkvKiBTZWUgaWYgYSBmcmFtZSBpcyBjb21wbGV0ZWQsIHRoZW4gdXNlIGl0LiAqLworCWZvcihpID0gMDsgaSA8IFVTQlZJREVPX05VTUZSQU1FUzsgaSsrKSB7CisJCWlmICgodXZkLT5mcmFtZVtpXS5mcmFtZVN0YXRlID09IEZyYW1lU3RhdGVfRG9uZSkgfHwKKwkJICAgICh1dmQtPmZyYW1lW2ldLmZyYW1lU3RhdGUgPT0gRnJhbWVTdGF0ZV9Eb25lX0hvbGQpIHx8CisJCSAgICAodXZkLT5mcmFtZVtpXS5mcmFtZVN0YXRlID09IEZyYW1lU3RhdGVfRXJyb3IpKSB7CisJCQlmcm14ID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogRklYTUU6IElmIHdlIGRvbid0IHN0YXJ0IGEgZnJhbWUgaGVyZSB0aGVuIHdobyBldmVyIGRvZXM/ICovCisJaWYgKG5vYmxvY2sgJiYgKGZybXggPT0gLTEpKSB7CisJCWNvdW50ID0gLUVBR0FJTjsKKwkJZ290byByZWFkX2RvbmU7CisJfQorCisJLyoKKwkgKiBJZiBubyBGcmFtZVN0YXRlX0RvbmUsIGxvb2sgZm9yIGEgRnJhbWVTdGF0ZV9HcmFiYmluZyBzdGF0ZS4KKwkgKiBTZWUgaWYgYSBmcmFtZSBpcyBpbiBwcm9jZXNzIChncmFiYmluZyksIHRoZW4gdXNlIGl0LgorCSAqIFdlIHdpbGwgbmVlZCB0byB3YWl0IHVudGlsIGl0IGJlY29tZXMgY29va2VkLCBvZiBjb3Vyc2UuCisJICovCisJaWYgKGZybXggPT0gLTEpIHsKKwkJZm9yKGkgPSAwOyBpIDwgVVNCVklERU9fTlVNRlJBTUVTOyBpKyspIHsKKwkJCWlmICh1dmQtPmZyYW1lW2ldLmZyYW1lU3RhdGUgPT0gRnJhbWVTdGF0ZV9HcmFiYmluZykgeworCQkJCWZybXggPSBpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBJZiBubyBmcmFtZSBpcyBhY3RpdmUsIHN0YXJ0IG9uZS4gV2UgZG9uJ3QgY2FyZSB3aGljaCBvbmUKKwkgKiBpdCB3aWxsIGJlLCBzbyAjMCBpcyBhcyBnb29kIGFzIGFueS4KKwkgKiBJbiByZWFkIGFjY2VzcyBtb2RlIHdlIGRvbid0IGhhdmUgY29udmVuaWVuY2Ugb2YgVklESU9DTUNBUFRVUkUKKwkgKiB0byBzcGVjaWZ5IHRoZSByZXF1ZXN0ZWQgcGFsZXR0ZSAodmlkZW8gZm9ybWF0KSBvbiBwZXItZnJhbWUKKwkgKiBiYXNpcy4gVGhpcyBtZWFucyB0aGF0IHdlIGhhdmUgdG8gcmV0dXJuIGRhdGEgaW4gLXNvbWUtIGZvcm1hdAorCSAqIGFuZCBqdXN0IGhvcGUgdGhhdCB0aGUgY2xpZW50IGtub3dzIHdoYXQgdG8gZG8gd2l0aCBpdC4KKwkgKiBUaGUgZGVmYXVsdCBmb3JtYXQgaXMgY29uZmlndXJlZCBpbiB1dmQtPmRlZmF1bHRQYWxldHRlIGZpZWxkCisJICogYXMgb25lIG9mIFZJREVPX1BBTEVUVEVfeHh4IHZhbHVlcy4gV2Ugc3R1ZmYgaXQgaW50byB0aGUgbmV3CisJICogZnJhbWUgYW5kIGluaXRpYXRlIHRoZSBmcmFtZSBmaWxsaW5nIHByb2Nlc3MuCisJICovCisJaWYgKGZybXggPT0gLTEpIHsKKwkJaWYgKHV2ZC0+ZGVmYXVsdFBhbGV0dGUgPT0gMCkgeworCQkJZXJyKCIlczogTm8gZGVmYXVsdCBwYWxldHRlOyBkb24ndCBrbm93IHdoYXQgdG8gZG8hIiwgX19GVU5DVElPTl9fKTsKKwkJCWNvdW50ID0gLUVGQVVMVDsKKwkJCWdvdG8gcmVhZF9kb25lOworCQl9CisJCWZybXggPSAwOworCQkvKgorCQkgKiBXZSBoYXZlIG5vIHBlci1mcmFtZSBjb250cm9sIG92ZXIgdmlkZW8gc2l6ZS4KKwkJICogVGhlcmVmb3JlIHdlIG9ubHkgY2FuIHVzZSB3aGF0ZXZlciBzaXplIHdhcworCQkgKiBzcGVjaWZpZWQgYXMgZGVmYXVsdC4KKwkJICovCisJCXV2ZC0+ZnJhbWVbZnJteF0ucmVxdWVzdCA9IHV2ZC0+dmlkZW9zaXplOworCQl1dmQtPmZyYW1lW2ZybXhdLnBhbGV0dGUgPSB1dmQtPmRlZmF1bHRQYWxldHRlOworCQl1dmQtPmZyYW1lW2ZybXhdLmZyYW1lU3RhdGUgPSBGcmFtZVN0YXRlX1JlYWR5OworCQl1c2J2aWRlb19OZXdGcmFtZSh1dmQsIGZybXgpOworCQkvKiBOb3cgZnJhbWUgMCBpcyBzdXBwb3NlZCB0byBzdGFydCBmaWxsaW5nLi4uICovCisJfQorCisJLyoKKwkgKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBhY3RpdmUgZnJhbWUuIEl0IGlzIGVpdGhlciBwcmV2aW91c2x5CisJICogY29tcGxldGVkIGZyYW1lIG9yIGZyYW1lIGluIHByb2dyZXNzIGJ1dCBub3QgY29tcGxldGVkIHlldC4KKwkgKi8KKwlmcmFtZSA9ICZ1dmQtPmZyYW1lW2ZybXhdOworCisJLyoKKwkgKiBTaXQgYmFjayAmIHdhaXQgdW50aWwgdGhlIGZyYW1lIGdldHMgZmlsbGVkIGFuZCBwb3N0cHJvY2Vzc2VkLgorCSAqIElmIHdlIGZhaWwgdG8gZ2V0IHRoZSBwaWN0dXJlIFtpbiB0aW1lXSB0aGVuIHJldHVybiB0aGUgZXJyb3IuCisJICogSW4gdGhpcyBjYWxsIHdlIHNwZWNpZnkgdGhhdCB3ZSB3YW50IHRoZSBmcmFtZSB0byBiZSB3YWl0ZWQgZm9yLAorCSAqIHBvc3Rwcm9jZXNzZWQgYW5kIHN3aXRjaGVkIGludG8gRnJhbWVTdGF0ZV9Eb25lX0hvbGQgc3RhdGUuIFRoaXMKKwkgKiBzdGF0ZSBpcyB1c2VkIHRvIGhvbGQgdGhlIGZyYW1lIGFzICJmdWxseSBjb21wbGV0ZWQiIGJldHdlZW4KKwkgKiBzdWJzZXF1ZW50IHBhcnRpYWwgcmVhZHMgb2YgdGhlIHNhbWUgZnJhbWUuCisJICovCisJaWYgKGZyYW1lLT5mcmFtZVN0YXRlICE9IEZyYW1lU3RhdGVfRG9uZV9Ib2xkKSB7CisJCWxvbmcgcnYgPSAtRUZBVUxUOworCQlpZiAodXZkLT5mbGFncyAmIEZMQUdTX05PX0RFQ09ESU5HKQorCQkJcnYgPSB1c2J2aWRlb19HZXRGcmFtZSh1dmQsIGZybXgpOworCQllbHNlIGlmIChWQUxJRF9DQUxMQkFDSyh1dmQsIGdldEZyYW1lKSkKKwkJCXJ2ID0gR0VUX0NBTExCQUNLKHV2ZCwgZ2V0RnJhbWUpKHV2ZCwgZnJteCk7CisJCWVsc2UKKwkJCWVycigiZ2V0RnJhbWUgaXMgbm90IHNldCIpOworCQlpZiAoKHJ2ICE9IDApIHx8IChmcmFtZS0+ZnJhbWVTdGF0ZSAhPSBGcmFtZVN0YXRlX0RvbmVfSG9sZCkpIHsKKwkJCWNvdW50ID0gcnY7CisJCQlnb3RvIHJlYWRfZG9uZTsKKwkJfQorCX0KKworCS8qCisJICogQ29weSBieXRlcyB0byB1c2VyIHNwYWNlLiBXZSBhbGxvdyBmb3IgcGFydGlhbCByZWFkcywgd2hpY2gKKwkgKiBtZWFucyB0aGF0IHRoZSB1c2VyIGFwcGxpY2F0aW9uIGNhbiByZXF1ZXN0IHJlYWQgbGVzcyB0aGFuCisJICogdGhlIGZ1bGwgZnJhbWUgc2l6ZS4gSXQgaXMgdXAgdG8gdGhlIGFwcGxpY2F0aW9uIHRvIGlzc3VlCisJICogc3Vic2VxdWVudCBjYWxscyB1bnRpbCBlbnRpcmUgZnJhbWUgaXMgcmVhZC4KKwkgKgorCSAqIEZpcnN0IHRoaW5ncyBmaXJzdCwgbWFrZSBzdXJlIHdlIGRvbid0IGNvcHkgbW9yZSB0aGFuIHdlCisJICogaGF2ZSAtIGV2ZW4gaWYgdGhlIGFwcGxpY2F0aW9uIHdhbnRzIG1vcmUuIFRoYXQgd291bGQgYmUKKwkgKiBhIGJpZyBzZWN1cml0eSBlbWJhcmFzc21lbnQhCisJICovCisJaWYgKChjb3VudCArIGZyYW1lLT5zZXFSZWFkX0luZGV4KSA+IGZyYW1lLT5zZXFSZWFkX0xlbmd0aCkKKwkJY291bnQgPSBmcmFtZS0+c2VxUmVhZF9MZW5ndGggLSBmcmFtZS0+c2VxUmVhZF9JbmRleDsKKworCS8qCisJICogQ29weSByZXF1ZXN0ZWQgYW1vdW50IG9mIGRhdGEgdG8gdXNlciBzcGFjZS4gV2Ugc3RhcnQKKwkgKiBjb3B5aW5nIGZyb20gdGhlIHBvc2l0aW9uIHdoZXJlIHdlIGxhc3QgbGVmdCBpdCwgd2hpY2gKKwkgKiB3aWxsIGJlIHplcm8gZm9yIGEgbmV3IGZyYW1lIChub3QgcmVhZCBiZWZvcmUpLgorCSAqLworCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBmcmFtZS0+ZGF0YSArIGZyYW1lLT5zZXFSZWFkX0luZGV4LCBjb3VudCkpIHsKKwkJY291bnQgPSAtRUZBVUxUOworCQlnb3RvIHJlYWRfZG9uZTsKKwl9CisKKwkvKiBVcGRhdGUgbGFzdCByZWFkIHBvc2l0aW9uICovCisJZnJhbWUtPnNlcVJlYWRfSW5kZXggKz0gY291bnQ7CisJaWYgKHV2ZC0+ZGVidWcgPj0gMSkgeworCQllcnIoIiVzOiB7Y29weX0gY291bnQgdXNlZD0lWmQsIG5ldyBzZXFSZWFkX0luZGV4PSVsZCIsCisJCQlfX0ZVTkNUSU9OX18sIGNvdW50LCBmcmFtZS0+c2VxUmVhZF9JbmRleCk7CisJfQorCisJLyogRmluYWxseSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgZG9uZSB3aXRoIGFuZCAicmVsZWFzZSIgaXQgKi8KKwlpZiAoZnJhbWUtPnNlcVJlYWRfSW5kZXggPj0gZnJhbWUtPnNlcVJlYWRfTGVuZ3RoKSB7CisJCS8qIEFsbCBkYXRhIGhhcyBiZWVuIHJlYWQgKi8KKwkJZnJhbWUtPnNlcVJlYWRfSW5kZXggPSAwOworCisJCS8qIE1hcmsgaXQgYXMgYXZhaWxhYmxlIHRvIGJlIHVzZWQgYWdhaW4uICovCisJCXV2ZC0+ZnJhbWVbZnJteF0uZnJhbWVTdGF0ZSA9IEZyYW1lU3RhdGVfVW51c2VkOworCQlpZiAodXNidmlkZW9fTmV3RnJhbWUodXZkLCAoZnJteCArIDEpICUgVVNCVklERU9fTlVNRlJBTUVTKSkgeworCQkJZXJyKCIlczogdXNidmlkZW9fTmV3RnJhbWUgZmFpbGVkLiIsIF9fRlVOQ1RJT05fXyk7CisJCX0KKwl9CityZWFkX2RvbmU6CisJdXAoJnV2ZC0+bG9jayk7CQorCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIE1ha2UgYWxsIG9mIHRoZSBibG9ja3Mgb2YgZGF0YSBjb250aWd1b3VzCisgKi8KK3N0YXRpYyBpbnQgdXNidmlkZW9fQ29tcHJlc3NJc29jaHJvbm91cyhzdHJ1Y3QgdXZkICp1dmQsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwljaGFyICpjZGF0YTsKKwlpbnQgaSwgdG90bGVuID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJaW50IG4gPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGg7CisJCWludCBzdCA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzOworCisJCWNkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKKworCQkvKiBEZXRlY3QgYW5kIGlnbm9yZSBlcnJvcmVkIHBhY2tldHMgKi8KKwkJaWYgKHN0IDwgMCkgeworCQkJaWYgKHV2ZC0+ZGVidWcgPj0gMSkKKwkJCQllcnIoIkRhdGEgZXJyb3I6IHBhY2tldD0lZC4gbGVuPSVkLiBzdGF0dXM9JWQuIiwgaSwgbiwgc3QpOworCQkJdXZkLT5zdGF0cy5pc29fZXJyX2NvdW50Kys7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIERldGVjdCBhbmQgaWdub3JlIGVtcHR5IHBhY2tldHMgKi8KKwkJaWYgKG4gPD0gMCkgeworCQkJdXZkLT5zdGF0cy5pc29fc2tpcF9jb3VudCsrOworCQkJY29udGludWU7CisJCX0KKwkJdG90bGVuICs9IG47CS8qIExpdHRsZSBsb2NhbCBhY2NvdW50aW5nICovCisJCVJpbmdRdWV1ZV9FbnF1ZXVlKCZ1dmQtPmRwLCBjZGF0YSwgbik7CisJfQorCXJldHVybiB0b3RsZW47Cit9CisKK3N0YXRpYyB2b2lkIHVzYnZpZGVvX0lzb2NJcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgaSwgcmV0LCBsZW47CisJc3RydWN0IHV2ZCAqdXZkID0gdXJiLT5jb250ZXh0OworCisJLyogV2UgZG9uJ3Qgd2FudCB0byBkbyBhbnl0aGluZyBpZiB3ZSBhcmUgYWJvdXQgdG8gYmUgcmVtb3ZlZCEgKi8KKwlpZiAoIUNBTUVSQV9JU19PUEVSQVRJT05BTCh1dmQpKQorCQlyZXR1cm47CisjaWYgMAorCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiAwKSB7CisJCWluZm8oInVyYj0kJXAgc3RhdHVzPSVkLiBlcnJjb3VudD0lZC4gbGVuZ3RoPSVkLiIsCisJCSAgICAgdXJiLCB1cmItPnN0YXR1cywgdXJiLT5lcnJvcl9jb3VudCwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwl9IGVsc2UgeworCQlzdGF0aWMgaW50IGMgPSAwOworCQlpZiAoYysrICUgMTAwID09IDApCisJCQlpbmZvKCJObyBJc29jIGRhdGEiKTsKKwl9CisjZW5kaWYKKworCWlmICghdXZkLT5zdHJlYW1pbmcpIHsKKwkJaWYgKHV2ZC0+ZGVidWcgPj0gMSkKKwkJCWluZm8oIk5vdCBzdHJlYW1pbmcsIGJ1dCBpbnRlcnJ1cHQhIik7CisJCXJldHVybjsKKwl9CisJCisJdXZkLT5zdGF0cy51cmJfY291bnQrKzsKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDw9IDApCisJCWdvdG8gdXJiX2RvbmVfd2l0aDsKKworCS8qIENvcHkgdGhlIGRhdGEgcmVjZWl2ZWQgaW50byByaW5nIHF1ZXVlICovCisJbGVuID0gdXNidmlkZW9fQ29tcHJlc3NJc29jaHJvbm91cyh1dmQsIHVyYik7CisJdXZkLT5zdGF0cy51cmJfbGVuZ3RoID0gbGVuOworCWlmIChsZW4gPD0gMCkKKwkJZ290byB1cmJfZG9uZV93aXRoOworCisJLyogSGVyZSB3ZSBnb3Qgc29tZSBkYXRhICovCisJdXZkLT5zdGF0cy5kYXRhX2NvdW50ICs9IGxlbjsKKwlSaW5nUXVldWVfV2FrZVVwSW50ZXJydXB0aWJsZSgmdXZkLT5kcCk7CisKK3VyYl9kb25lX3dpdGg6CisJZm9yIChpID0gMDsgaSA8IEZSQU1FU19QRVJfREVTQzsgaSsrKSB7CisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzID0gMDsKKwkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoID0gMDsKKwl9CisJdXJiLT5zdGF0dXMgPSAwOworCXVyYi0+ZGV2ID0gdXZkLT5kZXY7CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0tFUk5FTCk7CisJaWYocmV0KQorCQllcnIoInVzYl9zdWJtaXRfdXJiIGVycm9yICglZCkiLCByZXQpOworCXJldHVybjsKK30KKworLyoKKyAqIHVzYnZpZGVvX1N0YXJ0RGF0YVB1bXAoKQorICoKKyAqIEhpc3Rvcnk6CisgKiAyNy1KYW4tMjAwMCBVc2VkIGlibWNhbS0+aWZhY2UsIGlibWNhbS0+aWZhY2VBbHRBY3RpdmUgaW5zdGVhZAorICogICAgICAgICAgICAgb2YgaGFyZGNvZGVkIHZhbHVlcy4gU2ltcGxpZmllZCBieSB1c2luZyBmb3IgbG9vcCwKKyAqICAgICAgICAgICAgIGFsbG93ZWQgYW55IG51bWJlciBvZiBVUkJzLgorICovCitzdGF0aWMgaW50IHVzYnZpZGVvX1N0YXJ0RGF0YVB1bXAoc3RydWN0IHV2ZCAqdXZkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSB1dmQtPmRldjsKKwlpbnQgaSwgZXJyRmxhZzsKKworCWlmICh1dmQtPmRlYnVnID4gMSkKKwkJaW5mbygiJXMoJCVwKSIsIF9fRlVOQ1RJT05fXywgdXZkKTsKKworCWlmICghQ0FNRVJBX0lTX09QRVJBVElPTkFMKHV2ZCkpIHsKKwkJZXJyKCIlczogQ2FtZXJhIGlzIG5vdCBvcGVyYXRpb25hbCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwl1dmQtPmN1cmZyYW1lID0gLTE7CisKKwkvKiBBbHRlcm5hdGUgaW50ZXJmYWNlIDEgaXMgaXMgdGhlIGJpZ2dlc3QgZnJhbWUgc2l6ZSAqLworCWkgPSB1c2Jfc2V0X2ludGVyZmFjZShkZXYsIHV2ZC0+aWZhY2UsIHV2ZC0+aWZhY2VBbHRBY3RpdmUpOworCWlmIChpIDwgMCkgeworCQllcnIoIiVzOiB1c2Jfc2V0X2ludGVyZmFjZSBlcnJvciIsIF9fRlVOQ1RJT05fXyk7CisJCXV2ZC0+bGFzdF9lcnJvciA9IGk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWlmIChWQUxJRF9DQUxMQkFDSyh1dmQsIHZpZGVvU3RhcnQpKQorCQlHRVRfQ0FMTEJBQ0sodXZkLCB2aWRlb1N0YXJ0KSh1dmQpOworCWVsc2UgCisJCWVycigiJXM6IHZpZGVvU3RhcnQgbm90IHNldCIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBXZSBkb3VibGUgYnVmZmVyIHRoZSBJc28gbGlzdHMgKi8KKwlmb3IgKGk9MDsgaSA8IFVTQlZJREVPX05VTVNCVUY7IGkrKykgeworCQlpbnQgaiwgazsKKwkJc3RydWN0IHVyYiAqdXJiID0gdXZkLT5zYnVmW2ldLnVyYjsKKwkJdXJiLT5kZXYgPSBkZXY7CisJCXVyYi0+Y29udGV4dCA9IHV2ZDsKKwkJdXJiLT5waXBlID0gdXNiX3Jjdmlzb2NwaXBlKGRldiwgdXZkLT52aWRlb19lbmRwKTsKKwkJdXJiLT5pbnRlcnZhbCA9IDE7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gdXZkLT5zYnVmW2ldLmRhdGE7CisJCXVyYi0+Y29tcGxldGUgPSB1c2J2aWRlb19Jc29jSXJxOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gRlJBTUVTX1BFUl9ERVNDOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSB1dmQtPmlzb19wYWNrZXRfbGVuICogRlJBTUVTX1BFUl9ERVNDOworCQlmb3IgKGo9az0wOyBqIDwgRlJBTUVTX1BFUl9ERVNDOyBqKyssIGsgKz0gdXZkLT5pc29fcGFja2V0X2xlbikgeworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5vZmZzZXQgPSBrOworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5sZW5ndGggPSB1dmQtPmlzb19wYWNrZXRfbGVuOworCQl9CisJfQorCisJLyogU3VibWl0IGFsbCBVUkJzICovCisJZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1TQlVGOyBpKyspIHsKKwkJZXJyRmxhZyA9IHVzYl9zdWJtaXRfdXJiKHV2ZC0+c2J1ZltpXS51cmIsIEdGUF9LRVJORUwpOworCQlpZiAoZXJyRmxhZykKKwkJCWVycigiJXM6IHVzYl9zdWJtaXRfaXNvYyglZCkgcmV0ICVkIiwgX19GVU5DVElPTl9fLCBpLCBlcnJGbGFnKTsKKwl9CisKKwl1dmQtPnN0cmVhbWluZyA9IDE7CisJaWYgKHV2ZC0+ZGVidWcgPiAxKQorCQlpbmZvKCIlczogc3RyZWFtaW5nPTEgdmlkZW9fZW5kcD0kJTAyeCIsIF9fRlVOQ1RJT05fXywgdXZkLT52aWRlb19lbmRwKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHVzYnZpZGVvX1N0b3BEYXRhUHVtcCgpCisgKgorICogVGhpcyBwcm9jZWR1cmUgc3RvcHMgc3RyZWFtaW5nIGFuZCBkZWFsbG9jYXRlcyBVUkJzLiBUaGVuIGl0CisgKiBhY3RpdmF0ZXMgemVyby1iYW5kd2lkdGggYWx0LiBzZXR0aW5nIG9mIHRoZSB2aWRlbyBpbnRlcmZhY2UuCisgKgorICogSGlzdG9yeToKKyAqIDIyLUphbi0yMDAwIENvcnJlY3RlZCBvcmRlciBvZiBhY3Rpb25zIHRvIHdvcmsgYWZ0ZXIgc3VycHJpc2UgcmVtb3ZhbC4KKyAqIDI3LUphbi0yMDAwIFVzZWQgdXZkLT5pZmFjZSwgdXZkLT5pZmFjZUFsdEluYWN0aXZlIGluc3RlYWQgb2YgaGFyZGNvZGVkIHZhbHVlcy4KKyAqLworc3RhdGljIHZvaWQgdXNidmlkZW9fU3RvcERhdGFQdW1wKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpbnQgaSwgajsKKworCWlmICgodXZkID09IE5VTEwpIHx8ICghdXZkLT5zdHJlYW1pbmcpIHx8ICh1dmQtPmRldiA9PSBOVUxMKSkKKwkJcmV0dXJuOworCisJaWYgKHV2ZC0+ZGVidWcgPiAxKQorCQlpbmZvKCIlcygkJXApIiwgX19GVU5DVElPTl9fLCB1dmQpOworCisJLyogVW5zY2hlZHVsZSBhbGwgb2YgdGhlIGlzbyB0ZCdzICovCisJZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1TQlVGOyBpKyspIHsKKwkJdXNiX2tpbGxfdXJiKHV2ZC0+c2J1ZltpXS51cmIpOworCX0KKwlpZiAodXZkLT5kZWJ1ZyA+IDEpCisJCWluZm8oIiVzOiBzdHJlYW1pbmc9MCIsIF9fRlVOQ1RJT05fXyk7CisJdXZkLT5zdHJlYW1pbmcgPSAwOworCisJaWYgKCF1dmQtPnJlbW92ZV9wZW5kaW5nKSB7CisJCS8qIEludm9rZSBtaW5pZHJpdmVyJ3MgbWFnaWMgdG8gc3RvcCB0aGUgY2FtZXJhICovCisJCWlmIChWQUxJRF9DQUxMQkFDSyh1dmQsIHZpZGVvU3RvcCkpCisJCQlHRVRfQ0FMTEJBQ0sodXZkLCB2aWRlb1N0b3ApKHV2ZCk7CisJCWVsc2UgCisJCQllcnIoIiVzOiB2aWRlb1N0b3Agbm90IHNldCIsIF9fRlVOQ1RJT05fXyk7CisKKwkJLyogU2V0IHBhY2tldCBzaXplIHRvIDAgKi8KKwkJaiA9IHVzYl9zZXRfaW50ZXJmYWNlKHV2ZC0+ZGV2LCB1dmQtPmlmYWNlLCB1dmQtPmlmYWNlQWx0SW5hY3RpdmUpOworCQlpZiAoaiA8IDApIHsKKwkJCWVycigiJXM6IHVzYl9zZXRfaW50ZXJmYWNlKCkgZXJyb3IgJWQuIiwgX19GVU5DVElPTl9fLCBqKTsKKwkJCXV2ZC0+bGFzdF9lcnJvciA9IGo7CisJCX0KKwl9Cit9CisKKy8qCisgKiB1c2J2aWRlb19OZXdGcmFtZSgpCisgKgorICogSGlzdG9yeToKKyAqIDI5LU1hci0wMCBBZGRlZCBjb3B5aW5nIG9mIHByZXZpb3VzIGZyYW1lIGludG8gdGhlIGN1cnJlbnQgb25lLgorICogNi1BdWctMDAgIEFkZGVkIG1vZGVsIDMgdmlkZW8gc2l6ZXMsIHJlbW92ZWQgcmVkdW5kYW50IHdpZHRoLCBoZWlnaHQuCisgKi8KK3N0YXRpYyBpbnQgdXNidmlkZW9fTmV3RnJhbWUoc3RydWN0IHV2ZCAqdXZkLCBpbnQgZnJhbWVudW0pCit7CisJc3RydWN0IHVzYnZpZGVvX2ZyYW1lICpmcmFtZTsKKwlpbnQgbjsKKworCWlmICh1dmQtPmRlYnVnID4gMSkKKwkJaW5mbygidXNidmlkZW9fTmV3RnJhbWUoJCVwLCVkLikiLCB1dmQsIGZyYW1lbnVtKTsKKworCS8qIElmIHdlJ3JlIG5vdCBncmFiYmluZyBhIGZyYW1lIHJpZ2h0IG5vdyBhbmQgdGhlIG90aGVyIGZyYW1lIGlzICovCisJLyogIHJlYWR5IHRvIGJlIGdyYWJiZWQgaW50bywgdGhlbiB1c2UgaXQgaW5zdGVhZCAqLworCWlmICh1dmQtPmN1cmZyYW1lICE9IC0xKQorCQlyZXR1cm4gMDsKKworCS8qIElmIG5lY2Vzc2FyeSB3ZSBhZGp1c3QgcGljdHVyZSBzZXR0aW5ncyBiZXR3ZWVuIGZyYW1lcyAqLworCWlmICghdXZkLT5zZXR0aW5nc0FkanVzdGVkKSB7CisJCWlmIChWQUxJRF9DQUxMQkFDSyh1dmQsIGFkanVzdFBpY3R1cmUpKQorCQkJR0VUX0NBTExCQUNLKHV2ZCwgYWRqdXN0UGljdHVyZSkodXZkKTsKKwkJdXZkLT5zZXR0aW5nc0FkanVzdGVkID0gMTsKKwl9CisKKwluID0gKGZyYW1lbnVtICsgMSkgJSBVU0JWSURFT19OVU1GUkFNRVM7CisJaWYgKHV2ZC0+ZnJhbWVbbl0uZnJhbWVTdGF0ZSA9PSBGcmFtZVN0YXRlX1JlYWR5KQorCQlmcmFtZW51bSA9IG47CisKKwlmcmFtZSA9ICZ1dmQtPmZyYW1lW2ZyYW1lbnVtXTsKKworCWZyYW1lLT5mcmFtZVN0YXRlID0gRnJhbWVTdGF0ZV9HcmFiYmluZzsKKwlmcmFtZS0+c2NhbnN0YXRlID0gU2NhblN0YXRlX1NjYW5uaW5nOworCWZyYW1lLT5zZXFSZWFkX0xlbmd0aCA9IDA7CS8qIEFjY3VtdWxhdGVkIGluIHh4eF9wYXJzZV9kYXRhKCkgKi8KKwlmcmFtZS0+ZGVpbnRlcmxhY2UgPSBEZWludGVybGFjZV9Ob25lOworCWZyYW1lLT5mbGFncyA9IDA7IC8qIE5vIGZsYWdzIHlldCwgdXAgdG8gbWluaWRyaXZlciAob3IgdXMpIHRvIHNldCB0aGVtICovCisJdXZkLT5jdXJmcmFtZSA9IGZyYW1lbnVtOworCisJLyoKKwkgKiBOb3JtYWxseSB3ZSB3b3VsZCB3YW50IHRvIGNvcHkgcHJldmlvdXMgZnJhbWUgaW50byB0aGUgY3VycmVudCBvbmUKKwkgKiBiZWZvcmUgd2UgZXZlbiBzdGFydCBmaWxsaW5nIGl0IHdpdGggZGF0YTsgdGhpcyBhbGxvd3MgdXMgdG8gc3RvcAorCSAqIGZpbGxpbmcgYXQgYW55IG1vbWVudDsgdG9wIHBvcnRpb24gb2YgdGhlIGZyYW1lIHdpbGwgYmUgbmV3IGFuZAorCSAqIGJvdHRvbSBwb3J0aW9uIHdpbGwgc3RheSBhcyBpdCB3YXMgaW4gcHJldmlvdXMgZnJhbWUuIElmIHdlIGRvbid0CisJICogZG8gdGhhdCB0aGVuIG1pc3NpbmcgY2h1bmtzIG9mIHZpZGVvIHN0cmVhbSB3aWxsIHJlc3VsdCBpbiBmbGlja2VyaW5nCisJICogcG9ydGlvbnMgb2Ygb2xkIGRhdGEgd2hhdGV2ZXIgaXQgd2FzIGJlZm9yZS4KKwkgKgorCSAqIElmIHdlIGNob29zZSBub3QgdG8gY29weSBwcmV2aW91cyBmcmFtZSAodG8sIGZvciBleGFtcGxlLCBzYXZlIGZldworCSAqIGJ1cyBjeWNsZXMgLSB0aGUgZnJhbWUgY2FuIGJlIHByZXR0eSBsYXJnZSEpIHRoZW4gd2UgaGF2ZSBhbiBvcHRpb24KKwkgKiB0byBjbGVhciB0aGUgZnJhbWUgYmVmb3JlIHVzaW5nLiBJZiB3ZSBleHBlcmllbmNlIGxvc3NlcyBpbiB0aGlzCisJICogbW9kZSB0aGVuIG1pc3NpbmcgcGljdHVyZSB3aWxsIGJlIGJsYWNrIChubyBmbGlja2VyaW5nKS4KKwkgKgorCSAqIEZpbmFsbHksIGlmIHVzZXIgY2hvb3NlcyBub3QgdG8gY2xlYW4gdGhlIGN1cnJlbnQgZnJhbWUgYmVmb3JlCisJICogZmlsbGluZyBpdCB3aXRoIGRhdGEgdGhlbiB0aGUgb2xkIGRhdGEgd2lsbCBiZSB2aXNpYmxlIGlmIHdlIGZhaWwKKwkgKiB0byByZWZpbGwgZW50aXJlIGZyYW1lIHdpdGggbmV3IGRhdGEuCisJICovCisJaWYgKCEodXZkLT5mbGFncyAmIEZMQUdTX1NFUEFSQVRFX0ZSQU1FUykpIHsKKwkJLyogVGhpcyBjb3BpZXMgcHJldmlvdXMgZnJhbWUgaW50byB0aGlzIG9uZSB0byBtYXNrIGxvc3NlcyAqLworCQlpbnQgcHJldiA9IChmcmFtZW51bSAtIDEgKyBVU0JWSURFT19OVU1GUkFNRVMpICUgVVNCVklERU9fTlVNRlJBTUVTOworCQltZW1tb3ZlKGZyYW1lLT5kYXRhLCB1dmQtPmZyYW1lW3ByZXZdLmRhdGEsIHV2ZC0+bWF4X2ZyYW1lX3NpemUpOworCX0gZWxzZSB7CisJCWlmICh1dmQtPmZsYWdzICYgRkxBR1NfQ0xFQU5fRlJBTUVTKSB7CisJCQkvKiBUaGlzIHByb3ZpZGVzIGEgImNsZWFuIiBmcmFtZSBidXQgc2xvd3MgdGhpbmdzIGRvd24gKi8KKwkJCW1lbXNldChmcmFtZS0+ZGF0YSwgMCwgdXZkLT5tYXhfZnJhbWVfc2l6ZSk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB1c2J2aWRlb19Db2xsZWN0UmF3RGF0YSgpCisgKgorICogVGhpcyBwcm9jZWR1cmUgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiAncHJvY2Vzc0RhdGEnIGNhbGxiYWNrIGlmIHlvdQorICogb25seSB3YW50IHRvIGR1bXAgdGhlIHJhdyBkYXRhIGZyb20gdGhlIGNhbWVyYSBpbnRvIHRoZSBvdXRwdXQKKyAqIGRldmljZSAoZnJhbWUgYnVmZmVyKS4gWW91IGNhbiBsb29rIGF0IGl0IHdpdGggVjRMIGNsaWVudCwgYnV0IHRoZQorICogaW1hZ2Ugd2lsbCBiZSB1bndhdGNoYWJsZS4gVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIGNvZGUgYW5kIG9mIHRoZQorICogbW9kZSBGTEFHU19OT19ERUNPRElORyBpcyBkZWJ1Z2dpbmcgYW5kIGNhcHR1cmluZyBvZiBkYXRhc3RyZWFtcyBmcm9tCisgKiBuZXcsIHVua25vd24gY2FtZXJhcy4gVGhpcyBwcm9jZWR1cmUgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGludm9rZWQKKyAqIGluc3RlYWQgb2YgdGhlIHNwZWNpZmllZCBjYWxsYmFjayBoYW5kbGVyIHdoZW4gdXZkLT5mbGFncyBoYXMgYml0CisgKiBGTEFHU19OT19ERUNPRElORyBzZXQuIFRoZXJlZm9yZSwgYW55IHJlZ3VsYXIgYnVpbGQgb2YgYW55IGRyaXZlcgorICogYmFzZWQgb24gdXNidmlkZW8gY2FuIHVzZSB0aGlzIGZlYXR1cmUgYXQgYW55IHRpbWUuCisgKi8KK3N0YXRpYyB2b2lkIHVzYnZpZGVvX0NvbGxlY3RSYXdEYXRhKHN0cnVjdCB1dmQgKnV2ZCwgc3RydWN0IHVzYnZpZGVvX2ZyYW1lICpmcmFtZSkKK3sKKwlpbnQgbjsKKworCWFzc2VydCh1dmQgIT0gTlVMTCk7CisJYXNzZXJ0KGZyYW1lICE9IE5VTEwpOworCisJLyogVHJ5IHRvIG1vdmUgZGF0YSBmcm9tIHF1ZXVlIGludG8gZnJhbWUgYnVmZmVyICovCisJbiA9IFJpbmdRdWV1ZV9HZXRMZW5ndGgoJnV2ZC0+ZHApOworCWlmIChuID4gMCkgeworCQlpbnQgbTsKKwkJLyogU2VlIGhvdyBtdWNoIHNwYWNlIHdlIGhhdmUgbGVmdCAqLworCQltID0gdXZkLT5tYXhfZnJhbWVfc2l6ZSAtIGZyYW1lLT5zZXFSZWFkX0xlbmd0aDsKKwkJaWYgKG4gPiBtKQorCQkJbiA9IG07CisJCS8qIE5vdyBtb3ZlIHRoYXQgbXVjaCBkYXRhIGludG8gZnJhbWUgYnVmZmVyICovCisJCVJpbmdRdWV1ZV9EZXF1ZXVlKAorCQkJJnV2ZC0+ZHAsCisJCQlmcmFtZS0+ZGF0YSArIGZyYW1lLT5zZXFSZWFkX0xlbmd0aCwKKwkJCW0pOworCQlmcmFtZS0+c2VxUmVhZF9MZW5ndGggKz0gbTsKKwl9CisJLyogU2VlIGlmIHdlIGZpbGxlZCB0aGUgZnJhbWUgKi8KKwlpZiAoZnJhbWUtPnNlcVJlYWRfTGVuZ3RoID49IHV2ZC0+bWF4X2ZyYW1lX3NpemUpIHsKKwkJZnJhbWUtPmZyYW1lU3RhdGUgPSBGcmFtZVN0YXRlX0RvbmU7CisJCXV2ZC0+Y3VyZnJhbWUgPSAtMTsKKwkJdXZkLT5zdGF0cy5mcmFtZV9udW0rKzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdXNidmlkZW9fR2V0RnJhbWUoc3RydWN0IHV2ZCAqdXZkLCBpbnQgZnJhbWVOdW0pCit7CisJc3RydWN0IHVzYnZpZGVvX2ZyYW1lICpmcmFtZSA9ICZ1dmQtPmZyYW1lW2ZyYW1lTnVtXTsKKworCWlmICh1dmQtPmRlYnVnID49IDIpCisJCWluZm8oIiVzKCQlcCwlZC4pIiwgX19GVU5DVElPTl9fLCB1dmQsIGZyYW1lTnVtKTsKKworCXN3aXRjaCAoZnJhbWUtPmZyYW1lU3RhdGUpIHsKKyAgICAgICAgY2FzZSBGcmFtZVN0YXRlX1VudXNlZDoKKwkJaWYgKHV2ZC0+ZGVidWcgPj0gMikKKwkJCWluZm8oIiVzOiBGcmFtZVN0YXRlX1VudXNlZCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworICAgICAgICBjYXNlIEZyYW1lU3RhdGVfUmVhZHk6CisgICAgICAgIGNhc2UgRnJhbWVTdGF0ZV9HcmFiYmluZzoKKyAgICAgICAgY2FzZSBGcmFtZVN0YXRlX0Vycm9yOgorICAgICAgICB7CisJCWludCBudHJpZXMsIHNpZ25hbFBlbmRpbmc7CisJcmVkbzoKKwkJaWYgKCFDQU1FUkFfSVNfT1BFUkFUSU9OQUwodXZkKSkgeworCQkJaWYgKHV2ZC0+ZGVidWcgPj0gMikKKwkJCQlpbmZvKCIlczogQ2FtZXJhIGlzIG5vdCBvcGVyYXRpb25hbCAoMSkiLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJbnRyaWVzID0gMDsgCisJCWRvIHsKKwkJCVJpbmdRdWV1ZV9JbnRlcnJ1cHRpYmxlU2xlZXBPbigmdXZkLT5kcCk7CisJCQlzaWduYWxQZW5kaW5nID0gc2lnbmFsX3BlbmRpbmcoY3VycmVudCk7CisJCQlpZiAoIUNBTUVSQV9JU19PUEVSQVRJT05BTCh1dmQpKSB7CisJCQkJaWYgKHV2ZC0+ZGVidWcgPj0gMikKKwkJCQkJaW5mbygiJXM6IENhbWVyYSBpcyBub3Qgb3BlcmF0aW9uYWwgKDIpIiwgX19GVU5DVElPTl9fKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCWFzc2VydCh1dmQtPmZidWYgIT0gTlVMTCk7CisJCQlpZiAoc2lnbmFsUGVuZGluZykgeworCQkJCWlmICh1dmQtPmRlYnVnID49IDIpCisJCQkJCWluZm8oIiVzOiBTaWduYWw9JCUwOHgiLCBfX0ZVTkNUSU9OX18sIHNpZ25hbFBlbmRpbmcpOworCQkJCWlmICh1dmQtPmZsYWdzICYgRkxBR1NfUkVUUllfVklESU9DU1lOQykgeworCQkJCQl1c2J2aWRlb19UZXN0UGF0dGVybih1dmQsIDEsIDApOworCQkJCQl1dmQtPmN1cmZyYW1lID0gLTE7CisJCQkJCXV2ZC0+c3RhdHMuZnJhbWVfbnVtKys7CisJCQkJCWlmICh1dmQtPmRlYnVnID49IDIpCisJCQkJCQlpbmZvKCIlczogRm9yY2VkIHRlc3QgcGF0dGVybiBzY3JlZW4iLCBfX0ZVTkNUSU9OX18pOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBTdGFuZGFyZCBhbnN3ZXI6IEludGVycnVwdGVkISAqLworCQkJCQlpZiAodXZkLT5kZWJ1ZyA+PSAyKQorCQkJCQkJaW5mbygiJXM6IEludGVycnVwdGVkISIsIF9fRlVOQ1RJT05fXyk7CisJCQkJCXJldHVybiAtRUlOVFI7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBObyBzaWduYWxzIC0gd2UganVzdCBnb3QgbmV3IGRhdGEgaW4gZHAgcXVldWUgKi8KKwkJCQlpZiAodXZkLT5mbGFncyAmIEZMQUdTX05PX0RFQ09ESU5HKQorCQkJCQl1c2J2aWRlb19Db2xsZWN0UmF3RGF0YSh1dmQsIGZyYW1lKTsKKwkJCQllbHNlIGlmIChWQUxJRF9DQUxMQkFDSyh1dmQsIHByb2Nlc3NEYXRhKSkKKwkJCQkJR0VUX0NBTExCQUNLKHV2ZCwgcHJvY2Vzc0RhdGEpKHV2ZCwgZnJhbWUpOworCQkJCWVsc2UgCisJCQkJCWVycigiJXM6IHByb2Nlc3NEYXRhIG5vdCBzZXQiLCBfX0ZVTkNUSU9OX18pOworCQkJfQorCQl9IHdoaWxlIChmcmFtZS0+ZnJhbWVTdGF0ZSA9PSBGcmFtZVN0YXRlX0dyYWJiaW5nKTsKKwkJaWYgKHV2ZC0+ZGVidWcgPj0gMikgeworCQkJaW5mbygiJXM6IEdyYWJiaW5nIGRvbmU7IHN0YXRlPSVkLiAoJWx1LiBieXRlcykiLAorCQkJICAgICBfX0ZVTkNUSU9OX18sIGZyYW1lLT5mcmFtZVN0YXRlLCBmcmFtZS0+c2VxUmVhZF9MZW5ndGgpOworCQl9CisJCWlmIChmcmFtZS0+ZnJhbWVTdGF0ZSA9PSBGcmFtZVN0YXRlX0Vycm9yKSB7CisJCQlpbnQgcmV0ID0gdXNidmlkZW9fTmV3RnJhbWUodXZkLCBmcmFtZU51bSk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCWVycigiJXM6IHVzYnZpZGVvX05ld0ZyYW1lKCkgZmFpbGVkICglZC4pIiwgX19GVU5DVElPTl9fLCByZXQpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCQlnb3RvIHJlZG87CisJCX0KKwkJLyogTm90ZSB0aGF0IHdlIGZhbGwgdGhyb3VnaCB0byBtZWV0IG91ciBkZXN0aW55IGJlbG93ICovCisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGcmFtZVN0YXRlX0RvbmU6CisJCS8qCisJCSAqIERvIGFsbCBuZWNlc3NhcnkgcG9zdHByb2Nlc3Npbmcgb2YgZGF0YSBwcmVwYXJlZCBpbgorCQkgKiAiaW50ZXJydXB0IiBjb2RlIGFuZCB0aGUgY29sbGVjdGluZyBjb2RlIGFib3ZlLiBUaGUKKwkJICogZnJhbWUgZ2V0cyBtYXJrZWQgYXMgRnJhbWVTdGF0ZV9Eb25lIGJ5IHF1ZXVlIHBhcnNpbmcgY29kZS4KKwkJICogVGhpcyBzdGF0dXMgbWVhbnMgdGhhdCB3ZSBjb2xsZWN0ZWQgZW5vdWdoIGRhdGEgYW5kCisJCSAqIG1vc3QgbGlrZWx5IHByb2Nlc3NlZCBpdCBhcyB3ZSB3ZW50IHRocm91Z2guIEhvd2V2ZXIKKwkJICogdGhlIGRhdGEgbWF5IG5lZWQgcG9zdHByb2Nlc3NpbmcsIHN1Y2ggYXMgZGVpbnRlcmxhY2luZworCQkgKiBvciBwaWN0dXJlIGFkanVzdG1lbnRzIGltcGxlbWVudGVkIGluIHNvZnR3YXJlIChob3Jyb3IhKQorCQkgKgorCQkgKiBBcyBzb29uIGFzIHRoZSBmcmFtZSBiZWNvbWVzICJmaW5hbCIgaXQgZ2V0cyBwcm9tb3RlZCB0bworCQkgKiBGcmFtZVN0YXRlX0RvbmVfSG9sZCBzdGF0dXMgd2hlcmUgaXQgd2lsbCByZW1haW4gdW50aWwgdGhlCisJCSAqIGNhbGxlciBjb25zdW1lZCBhbGwgdGhlIHZpZGVvIGRhdGEgZnJvbSB0aGUgZnJhbWUuIFRoZW4KKwkJICogdGhlIGVtcHR5IHNoZWxsIG9mIGV4LWZyYW1lIGlzIHRocm93biBvdXQgZm9yIGRvZ3MgdG8gZWF0LgorCQkgKiBCdXQgd2UsIHdvcnJpZWQgYWJvdXQgcGV0cywgd2lsbCByZWN5Y2xlIHRoZSBmcmFtZSEKKwkJICovCisJCXV2ZC0+c3RhdHMuZnJhbWVfbnVtKys7CisJCWlmICgodXZkLT5mbGFncyAmIEZMQUdTX05PX0RFQ09ESU5HKSA9PSAwKSB7CisJCQlpZiAoVkFMSURfQ0FMTEJBQ0sodXZkLCBwb3N0UHJvY2VzcykpCisJCQkJR0VUX0NBTExCQUNLKHV2ZCwgcG9zdFByb2Nlc3MpKHV2ZCwgZnJhbWUpOworCQkJaWYgKGZyYW1lLT5mbGFncyAmIFVTQlZJREVPX0ZSQU1FX0ZMQUdfU09GVFdBUkVfQ09OVFJBU1QpCisJCQkJdXNidmlkZW9fU29mdHdhcmVDb250cmFzdEFkanVzdG1lbnQodXZkLCBmcmFtZSk7CisJCX0KKwkJZnJhbWUtPmZyYW1lU3RhdGUgPSBGcmFtZVN0YXRlX0RvbmVfSG9sZDsKKwkJaWYgKHV2ZC0+ZGVidWcgPj0gMikKKwkJCWluZm8oIiVzOiBFbnRlcmVkIEZyYW1lU3RhdGVfRG9uZV9Ib2xkIHN0YXRlLiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAwOworCisJY2FzZSBGcmFtZVN0YXRlX0RvbmVfSG9sZDoKKwkJLyoKKwkJICogV2Ugc3RheSBpbiB0aGlzIHN0YXRlIGluZGVmaW5pdGVseSB1bnRpbCBzb21lb25lIGV4dGVybmFsLAorCQkgKiBsaWtlIGlvY3RsKCkgb3IgcmVhZCgpIGNhbGwgZmluaXNoZXMgZGlnZXN0aW5nIHRoZSBmcmFtZQorCQkgKiBkYXRhLiBUaGVuIGl0IHdpbGwgbWFyayB0aGUgZnJhbWUgYXMgRnJhbWVTdGF0ZV9VbnVzZWQgYW5kCisJCSAqIGl0IHdpbGwgYmUgcmVsZWFzZWQgYmFjayBpbnRvIHRoZSB3aWxkIHRvIHJvYW0gZnJlZWx5LgorCQkgKi8KKwkJaWYgKHV2ZC0+ZGVidWcgPj0gMikKKwkJCWluZm8oIiVzOiBGcmFtZVN0YXRlX0RvbmVfSG9sZCBzdGF0ZS4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBDYXRjaC1hbGwgZm9yIG90aGVyIGNhc2VzLiBXZSBzaGFsbCBub3QgYmUgaGVyZS4gKi8KKwllcnIoIiVzOiBJbnZhbGlkIHN0YXRlICVkLiIsIF9fRlVOQ1RJT05fXywgZnJhbWUtPmZyYW1lU3RhdGUpOworCWZyYW1lLT5mcmFtZVN0YXRlID0gRnJhbWVTdGF0ZV9VbnVzZWQ7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB1c2J2aWRlb19EZWludGVybGFjZUZyYW1lKCkKKyAqCisgKiBUaGlzIHByb2NlZHVyZSBkZWludGVybGFjZXMgdGhlIGdpdmVuIGZyYW1lLiBTb21lIGNhbWVyYXMgcHJvZHVjZQorICogb25seSBoYWxmIG9mIHNjYW5saW5lcyAtIHNvbWV0aW1lcyBvbmx5IGV2ZW4gbGluZXMsIHNvbWV0aW1lcyBvbmx5CisgKiBvZGQgbGluZXMuIFRoZSBkZWludGVybGFjaW5nIG1ldGhvZCBpcyBzdG9yZWQgaW4gZnJhbWUtPmRlaW50ZXJsYWNlCisgKiB2YXJpYWJsZS4KKyAqCisgKiBIZXJlIHdlIHNjYW4gdGhlIGZyYW1lIHZlcnRpY2FsbHkgYW5kIHJlcGxhY2UgbWlzc2luZyBzY2FubGluZXMgd2l0aAorICogYXZlcmFnZSBiZXR3ZWVuIHN1cnJvdW5kaW5nIG9uZXMgLSBiZWZvcmUgYW5kIGFmdGVyLiBJZiB3ZSBoYXZlIG5vCisgKiBsaW5lIGFib3ZlIHRoZW4gd2UganVzdCBjb3B5IG5leHQgbGluZS4gU2ltaWxhcmx5LCBpZiB3ZSBuZWVkIHRvCisgKiBjcmVhdGUgYSBsYXN0IGxpbmUgdGhlbiBwcmVjZWRpbmcgbGluZSBpcyB1c2VkLgorICovCit2b2lkIHVzYnZpZGVvX0RlaW50ZXJsYWNlRnJhbWUoc3RydWN0IHV2ZCAqdXZkLCBzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lKQoreworCWlmICgodXZkID09IE5VTEwpIHx8IChmcmFtZSA9PSBOVUxMKSkKKwkJcmV0dXJuOworCisJaWYgKChmcmFtZS0+ZGVpbnRlcmxhY2UgPT0gRGVpbnRlcmxhY2VfRmlsbEV2ZW5MaW5lcykgfHwKKwkgICAgKGZyYW1lLT5kZWludGVybGFjZSA9PSBEZWludGVybGFjZV9GaWxsT2RkTGluZXMpKQorCXsKKwkJY29uc3QgaW50IHY0bF9saW5lc2l6ZSA9IFZJREVPU0laRV9YKGZyYW1lLT5yZXF1ZXN0KSAqIFY0TF9CWVRFU19QRVJfUElYRUw7CisJCWludCBpID0gKGZyYW1lLT5kZWludGVybGFjZSA9PSBEZWludGVybGFjZV9GaWxsRXZlbkxpbmVzKSA/IDAgOiAxOworCisJCWZvciAoOyBpIDwgVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpOyBpICs9IDIpIHsKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmZzMSwgKmZzMjsKKwkJCXVuc2lnbmVkIGNoYXIgKmZkOworCQkJaW50IGlwLCBpbiwgajsJLyogUHJldmlvdXMgYW5kIG5leHQgbGluZXMgKi8KKworCQkJLyoKKwkJCSAqIE5lZWQgdG8gYXZlcmFnZSBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyICdpJy4KKwkJCSAqIElmIHdlIGdvIG91dCBvZiBib3VuZHMgc2Vla2luZyB0aG9zZSBsaW5lcyB0aGVuCisJCQkgKiB3ZSBwb2ludCBiYWNrIHRvIGV4aXN0aW5nIGxpbmUuCisJCQkgKi8KKwkJCWlwID0gaSAtIDE7CS8qIEZpcnN0LCBnZXQgcm91Z2ggbnVtYmVycyAqLworCQkJaW4gPSBpICsgMTsKKworCQkJLyogTm93IHZhbGlkYXRlICovCisJCQlpZiAoaXAgPCAwKQorCQkJCWlwID0gaW47CisJCQlpZiAoaW4gPj0gVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpKQorCQkJCWluID0gaXA7CisKKwkJCS8qIFNhbml0eSBjaGVjayAqLworCQkJaWYgKChpcCA8IDApIHx8IChpbiA8IDApIHx8CisJCQkgICAgKGlwID49IFZJREVPU0laRV9ZKGZyYW1lLT5yZXF1ZXN0KSkgfHwKKwkJCSAgICAoaW4gPj0gVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpKSkKKwkJCXsKKwkJCQllcnIoIkVycm9yOiBpcD0lZC4gaW49JWQuIHJlcS5oZWlnaHQ9JWxkLiIsCisJCQkJICAgIGlwLCBpbiwgVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogTm93IHdlIG5lZWQgdG8gYXZlcmFnZSBsaW5lcyAnaXAnIGFuZCAnaW4nIHRvIHByb2R1Y2UgbGluZSAnaScgKi8KKwkJCWZzMSA9IGZyYW1lLT5kYXRhICsgKHY0bF9saW5lc2l6ZSAqIGlwKTsKKwkJCWZzMiA9IGZyYW1lLT5kYXRhICsgKHY0bF9saW5lc2l6ZSAqIGluKTsKKwkJCWZkID0gZnJhbWUtPmRhdGEgKyAodjRsX2xpbmVzaXplICogaSk7CisKKwkJCS8qIEF2ZXJhZ2UgbGluZXMgYXJvdW5kIGRlc3RpbmF0aW9uICovCisJCQlmb3IgKGo9MDsgaiA8IHY0bF9saW5lc2l6ZTsgaisrKSB7CisJCQkJZmRbal0gPSAodW5zaWduZWQgY2hhcikoKCgodW5zaWduZWQpIGZzMVtqXSkgKworCQkJCQkJCSAoKHVuc2lnbmVkKWZzMltqXSkpID4+IDEpOworCQkJfQorCQl9CisJfQorCisJLyogT3B0aW9uYWxseSBkaXNwbGF5IHN0YXRpc3RpY3Mgb24gdGhlIHNjcmVlbiAqLworCWlmICh1dmQtPmZsYWdzICYgRkxBR1NfT1ZFUkxBWV9TVEFUUykKKwkJdXNidmlkZW9fT3ZlcmxheVN0YXRzKHV2ZCwgZnJhbWUpOworfQorCitFWFBPUlRfU1lNQk9MKHVzYnZpZGVvX0RlaW50ZXJsYWNlRnJhbWUpOworCisvKgorICogdXNidmlkZW9fU29mdHdhcmVDb250cmFzdEFkanVzdG1lbnQoKQorICoKKyAqIFRoaXMgY29kZSBhZGp1c3RzIHRoZSBjb250cmFzdCBvZiB0aGUgZnJhbWUsIGFzc3VtaW5nIFJHQjI0IGZvcm1hdC4KKyAqIEFzIG1vc3Qgc29mdHdhcmUgaW1hZ2UgcHJvY2Vzc2luZywgdGhpcyBqb2IgaXMgQ1BVLWludGVuc2l2ZS4KKyAqIEdldCBhIGNhbWVyYSB0aGF0IHN1cHBvcnRzIGhhcmR3YXJlIGFkanVzdG1lbnQhCisgKgorICogSGlzdG9yeToKKyAqIDA5LUZlYi0yMDAxICBDcmVhdGVkLgorICovCitzdGF0aWMgdm9pZCB1c2J2aWRlb19Tb2Z0d2FyZUNvbnRyYXN0QWRqdXN0bWVudChzdHJ1Y3QgdXZkICp1dmQsIAorCQkJCQkJc3RydWN0IHVzYnZpZGVvX2ZyYW1lICpmcmFtZSkKK3sKKwlpbnQgaSwgaiwgdjRsX2xpbmVzaXplOworCXNpZ25lZCBsb25nIGFkajsKKwljb25zdCBpbnQgY2NtID0gMTI4OyAvKiBDb2xvciBjb3JyZWN0aW9uIG1lZGlhbiAtIHNlZSBiZWxvdyAqLworCisJaWYgKCh1dmQgPT0gTlVMTCkgfHwgKGZyYW1lID09IE5VTEwpKSB7CisJCWVycigiJXM6IElsbGVnYWwgY2FsbC4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCWFkaiA9ICh1dmQtPnZwaWMuY29udHJhc3QgLSAweDgwMDApID4+IDg7IC8qIC0xMjguLisxMjcgPSAtY2NtLi4rKGNjbS0xKSovCisJUkVTVFJJQ1RfVE9fUkFOR0UoYWRqLCAtY2NtLCBjY20rMSk7CisJaWYgKGFkaiA9PSAwKSB7CisJCS8qIEluIHJhcmUgY2FzZSBvZiBubyBhZGp1c3RtZW50ICovCisJCXJldHVybjsKKwl9CisJdjRsX2xpbmVzaXplID0gVklERU9TSVpFX1goZnJhbWUtPnJlcXVlc3QpICogVjRMX0JZVEVTX1BFUl9QSVhFTDsKKwlmb3IgKGk9MDsgaSA8IFZJREVPU0laRV9ZKGZyYW1lLT5yZXF1ZXN0KTsgaSsrKSB7CisJCXVuc2lnbmVkIGNoYXIgKmZkID0gZnJhbWUtPmRhdGEgKyAodjRsX2xpbmVzaXplICogaSk7CisJCWZvciAoaj0wOyBqIDwgdjRsX2xpbmVzaXplOyBqKyspIHsKKwkJCXNpZ25lZCBsb25nIHYgPSAoc2lnbmVkIGxvbmcpIGZkW2pdOworCQkJLyogTWFnbmlmeSB1cCB0byAyIHRpbWVzLCByZWR1Y2UgZG93biB0byB6ZXJvICovCisJCQl2ID0gMTI4ICsgKChjY20gKyBhZGopICogKHYgLSAxMjgpKSAvIGNjbTsKKwkJCVJFU1RSSUNUX1RPX1JBTkdFKHYsIDAsIDB4RkYpOyAvKiBNdXN0IGZsYXR0ZW4gdGFpbHMgKi8KKwkJCWZkW2pdID0gKHVuc2lnbmVkIGNoYXIpIHY7CisJCX0KKwl9Cit9CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3VzYnZpZGVvLmggYi9kcml2ZXJzL3VzYi9tZWRpYS91c2J2aWRlby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMzkwYTFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvdXNidmlkZW8uaApAQCAtMCwwICsxLDM5MyBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisjaWZuZGVmIHVzYnZpZGVvX2gKKyNkZWZpbmUJdXNidmlkZW9faAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworLyogTW9zdCBoZWxwZnVsIGRlYnVnZ2luZyBhaWQgKi8KKyNkZWZpbmUgYXNzZXJ0KGV4cHIpICgodm9pZCkgKChleHByKSA/IDAgOiAoZXJyKCJhc3NlcnQgZmFpbGVkIGF0IGxpbmUgJWQiLF9fTElORV9fKSkpKQorCisjZGVmaW5lIFVTQlZJREVPX1JFUE9SVF9TVEFUUwkxCS8qIFNldCB0byAwIHRvIGJsb2NrIHN0YXRpc3RpY3Mgb24gY2xvc2UgKi8KKworLyogQml0IGZsYWdzIChvcHRpb25zKSAqLworI2RlZmluZSBGTEFHU19SRVRSWV9WSURJT0NTWU5DCQkoMSA8PCAwKQorI2RlZmluZQlGTEFHU19NT05PQ0hST01FCQkoMSA8PCAxKQorI2RlZmluZSBGTEFHU19ESVNQTEFZX0hJTlRTCQkoMSA8PCAyKQorI2RlZmluZSBGTEFHU19PVkVSTEFZX1NUQVRTCQkoMSA8PCAzKQorI2RlZmluZSBGTEFHU19GT1JDRV9URVNUUEFUVEVSTgkJKDEgPDwgNCkKKyNkZWZpbmUgRkxBR1NfU0VQQVJBVEVfRlJBTUVTCQkoMSA8PCA1KQorI2RlZmluZSBGTEFHU19DTEVBTl9GUkFNRVMJCSgxIDw8IDYpCisjZGVmaW5lCUZMQUdTX05PX0RFQ09ESU5HCQkoMSA8PCA3KQorCisvKiBCaXQgZmxhZ3MgZm9yIGZyYW1lcyAoYXBwbHkgdG8gdGhlIGZyYW1lIHdoZXJlIHRoZXkgYXJlIHNwZWNpZmllZCkgKi8KKyNkZWZpbmUgVVNCVklERU9fRlJBTUVfRkxBR19TT0ZUV0FSRV9DT05UUkFTVAkoMSA8PCAwKQorCisvKiBDYW1lcmEgY2FwYWJpbGl0aWVzIChtYXhpbXVtKSAqLworI2RlZmluZSBDQU1FUkFfVVJCX0ZSQU1FUyAgICAgICAzMgorI2RlZmluZSBDQU1FUkFfTUFYX0lTT19QQUNLRVQgICAxMDIzIC8qIDEwMjIgYWN0dWFsbHkgc2VudCBieSBjYW1lcmEgKi8KKyNkZWZpbmUgRlJBTUVTX1BFUl9ERVNDCQkoQ0FNRVJBX1VSQl9GUkFNRVMpCisjZGVmaW5lIEZSQU1FX1NJWkVfUEVSX0RFU0MJKENBTUVSQV9NQVhfSVNPX1BBQ0tFVCkKKworLyogVGhpcyBtYWNybyByZXN0cmljdHMgYW4gaW50IHZhcmlhYmxlIHRvIGFuIGluY2x1c2l2ZSByYW5nZSAqLworI2RlZmluZSBSRVNUUklDVF9UT19SQU5HRSh2LG1pLG1hKSB7IGlmICgodikgPCAobWkpKSAodikgPSAobWkpOyBlbHNlIGlmICgodikgPiAobWEpKSAodikgPSAobWEpOyB9CisKKyNkZWZpbmUgVjRMX0JZVEVTX1BFUl9QSVhFTCAgICAgMwkvKiBCZWNhdXNlIHdlIHByb2R1Y2UgUkdCMjQgKi8KKworLyoKKyAqIFVzZSB0aGlzIG1hY3JvIHRvIGNvbnN0cnVjdCBjb25zdGFudHMgZm9yIGRpZmZlcmVudCB2aWRlbyBzaXplcy4KKyAqIFdlIGhhdmUgdG8gZGVhbCB3aXRoIGRpZmZlcmVudCB2aWRlbyBzaXplcyB0aGF0IGhhdmUgdG8gYmUKKyAqIGNvbmZpZ3VyZWQgaW4gdGhlIGRldmljZSBvciBjb21wYXJlZCBhZ2FpbnN0IHdoZW4gd2UgcmVjZWl2ZQorICogYSBkYXRhLiBOb3JtYWxseSBvbmUgd291bGQgZGVmaW5lIGEgYnVuY2ggb2YgVklERU9TSVpFX3hfYnlfeQorICogI2RlZmluZXMgYW5kIHRoYXQncyB0aGUgZW5kIG9mIHN0b3J5LiBIb3dldmVyIHRoaXMgc29sdXRpb24KKyAqIGRvZXMgbm90IGFsbG93IHRvIGNvbnZlcnQgYmV0d2VlbiByZWFsIHBpeGVsIHNpemVzIGFuZCB0aGUKKyAqIGNvbnN0YW50IChpbnRlZ2VyKSB2YWx1ZSB0aGF0IG1heSBiZSB1c2VkIHRvIHRhZyBhIGZyYW1lIG9yCisgKiB3aGF0ZXZlci4gVGhlIHNldCBvZiBtYWNyb3MgYmVsb3cgY29uc3RydWN0cyB2aWRlb3NpemUgY29uc3RhbnRzCisgKiBmcm9tIHRoZSBwaXhlbCBzaXplIGFuZCBhbGxvd3MgdG8gcmVjb25zdHJ1Y3QgdGhlIHBpeGVsIHNpemUKKyAqIGZyb20gdGhlIGNvbWJpbmVkIHZhbHVlIGxhdGVyLgorICovCisjZGVmaW5lCVZJREVPU0laRSh4LHkpCSgoKHgpICYgMHhGRkZGTCkgfCAoKCh5KSAmIDB4RkZGRkwpIDw8IDE2KSkKKyNkZWZpbmUJVklERU9TSVpFX1godnMpCSgodnMpICYgMHhGRkZGTCkKKyNkZWZpbmUJVklERU9TSVpFX1kodnMpCSgoKHZzKSA+PiAxNikgJiAweEZGRkZMKQordHlwZWRlZiB1bnNpZ25lZCBsb25nIHZpZGVvc2l6ZV90OworCisvKgorICogVGhpcyBtYWNybyBjaGVja3MgaWYgdGhlIGNhbWVyYSBpcyBzdGlsbCBvcGVyYXRpb25hbC4gVGhlICd1dmQnCisgKiBwb2ludGVyIG11c3QgYmUgdmFsaWQsIHV2ZC0+ZGV2IG11c3QgYmUgdmFsaWQsIHdlIGFyZSBub3QKKyAqIHJlbW92aW5nIHRoZSBkZXZpY2UgYW5kIHRoZSBkZXZpY2UgaGFzIG5vdCBlcnJlZCBvbiB1cy4KKyAqLworI2RlZmluZSBDQU1FUkFfSVNfT1BFUkFUSU9OQUwodXZkKSAoXAorCSh1dmQgIT0gTlVMTCkgJiYgXAorCSgodXZkKS0+ZGV2ICE9IE5VTEwpICYmIFwKKwkoKHV2ZCktPmxhc3RfZXJyb3IgPT0gMCkgJiYgXAorCSghKHV2ZCktPnJlbW92ZV9wZW5kaW5nKSkKKworLyoKKyAqIFdlIHVzZSBtYWNyb3MgdG8gZG8gWVVWIC0+IFJHQiBjb252ZXJzaW9uIGJlY2F1c2UgdGhpcyBpcworICogdmVyeSBpbXBvcnRhbnQgZm9yIHNwZWVkIGFuZCB0b3RhbGx5IHVuaW1wb3J0YW50IGZvciBzaXplLgorICoKKyAqIFlVViAtPiBSR0IgQ29udmVyc2lvbgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogQiA9IDEuMTY0KihZLTE2KQkJICAgICsgMi4wMTgqKFYtMTI4KQorICogRyA9IDEuMTY0KihZLTE2KSAtIDAuODEzKihVLTEyOCkgLSAwLjM5MSooVi0xMjgpCisgKiBSID0gMS4xNjQqKFktMTYpICsgMS41OTYqKFUtMTI4KQorICoKKyAqIElmIHlvdSBmYW5jeSBpbnRlZ2VyIGFyaXRobWV0aWNzIChhcyB5b3Ugc2hvdWxkKSwgaGVhciB0aGlzOgorICoKKyAqIDY1NTM2KkIgPSA3NjI4NCooWS0xNikJCSAgKyAxMzIyNTIqKFYtMTI4KQorICogNjU1MzYqRyA9IDc2Mjg0KihZLTE2KSAtICA1MzI4MSooVS0xMjgpIC0gIDI1NjI1KihWLTEyOCkKKyAqIDY1NTM2KlIgPSA3NjI4NCooWS0xNikgKyAxMDQ1OTUqKFUtMTI4KQorICoKKyAqIE1ha2Ugc3VyZSB0aGUgb3V0cHV0IHZhbHVlcyBhcmUgd2l0aGluIFswLi4yNTVdIHJhbmdlLgorICovCisjZGVmaW5lIExJTUlUX1JHQih4KSAoKCh4KSA8IDApID8gMCA6ICgoKHgpID4gMjU1KSA/IDI1NSA6ICh4KSkpCisjZGVmaW5lIFlVVl9UT19SR0JfQllfVEhFX0JPT0sobXksbXUsbXYsbXIsbWcsbWIpIHsgXAorICAgIGludCBtbV95LCBtbV95YywgbW1fdSwgbW1fdiwgbW1fciwgbW1fZywgbW1fYjsgXAorICAgIG1tX3kgPSAobXkpIC0gMTY7ICBcCisgICAgbW1fdSA9IChtdSkgLSAxMjg7IFwKKyAgICBtbV92ID0gKG12KSAtIDEyODsgXAorICAgIG1tX3ljPSBtbV95ICogNzYyODQ7IFwKKyAgICBtbV9iID0gKG1tX3ljCQkrIDEzMjI1MiptbV92CSkgPj4gMTY7IFwKKyAgICBtbV9nID0gKG1tX3ljIC0gIDUzMjgxKm1tX3UgLSAgMjU2MjUqbW1fdgkpID4+IDE2OyBcCisgICAgbW1fciA9IChtbV95YyArIDEwNDU5NSptbV91CQkJKSA+PiAxNjsgXAorICAgIG1iID0gTElNSVRfUkdCKG1tX2IpOyBcCisgICAgbWcgPSBMSU1JVF9SR0IobW1fZyk7IFwKKyAgICBtciA9IExJTUlUX1JHQihtbV9yKTsgXAorfQorCisjZGVmaW5lCVJJTkdfUVVFVUVfU0laRQkJKDEyOCoxMDI0KQkvKiBNdXN0IGJlIGEgcG93ZXIgb2YgMiAqLworI2RlZmluZQlSSU5HX1FVRVVFX0FEVkFOQ0VfSU5ERVgocnEsaW5kLG4pIChycSktPmluZCA9ICgocnEpLT5pbmQgKyAobikpICYgKChycSktPmxlbmd0aC0xKQorI2RlZmluZQlSSU5HX1FVRVVFX0RFUVVFVUVfQllURVMocnEsbikgUklOR19RVUVVRV9BRFZBTkNFX0lOREVYKHJxLHJpLG4pCisjZGVmaW5lCVJJTkdfUVVFVUVfUEVFSyhycSxvZnMpICgocnEpLT5xdWV1ZVsoKG9mcykgKyAocnEpLT5yaSkgJiAoKHJxKS0+bGVuZ3RoLTEpXSkKKworc3RydWN0IFJpbmdRdWV1ZSB7CisJdW5zaWduZWQgY2hhciAqcXVldWU7CS8qIERhdGEgZnJvbSB0aGUgSXNvYyBkYXRhIHB1bXAgKi8KKwlpbnQgbGVuZ3RoOwkJLyogSG93IG1hbnkgYnl0ZXMgYWxsb2NhdGVkIGZvciB0aGUgcXVldWUgKi8KKwlpbnQgd2k7CQkJLyogVGhhdCdzIHdoZXJlIHdlIHdyaXRlICovCisJaW50IHJpOwkJCS8qIFJlYWQgZnJvbSBoZXJlIHVudGlsIHlvdSBoaXQgd3JpdGUgaW5kZXggKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cWg7CS8qIFByb2Nlc3NlcyB3YWl0aW5nICovCit9OworCitlbnVtIFNjYW5TdGF0ZSB7CisJU2NhblN0YXRlX1NjYW5uaW5nLAkvKiBTY2FubmluZyBmb3IgaGVhZGVyICovCisJU2NhblN0YXRlX0xpbmVzCQkvKiBQYXJzaW5nIGxpbmVzICovCit9OworCisvKiBDb21wbGV0aW9uIHN0YXRlcyBvZiB0aGUgZGF0YSBwYXJzZXIgKi8KK2VudW0gUGFyc2VTdGF0ZSB7CisJc2Nhbl9Db250aW51ZSwJCS8qIEp1c3QgcGFyc2UgbmV4dCBpdGVtICovCisJc2Nhbl9OZXh0RnJhbWUsCQkvKiBGcmFtZSBkb25lLCBzZW5kIGl0IHRvIFY0TCAqLworCXNjYW5fT3V0LAkJLyogTm90IGVub3VnaCBkYXRhIGZvciBmcmFtZSAqLworCXNjYW5fRW5kUGFyc2UJCS8qIEVuZCBwYXJzaW5nICovCit9OworCitlbnVtIEZyYW1lU3RhdGUgeworCUZyYW1lU3RhdGVfVW51c2VkLAkvKiBVbnVzZWQgKG5vIE1DQVBUVVJFKSAqLworCUZyYW1lU3RhdGVfUmVhZHksCS8qIFJlYWR5IHRvIHN0YXJ0IGdyYWJiaW5nICovCisJRnJhbWVTdGF0ZV9HcmFiYmluZywJLyogSW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZ3JhYmJlZCBpbnRvICovCisJRnJhbWVTdGF0ZV9Eb25lLAkvKiBGaW5pc2hlZCBncmFiYmluZywgYnV0IG5vdCBiZWVuIHN5bmNlZCB5ZXQgKi8KKwlGcmFtZVN0YXRlX0RvbmVfSG9sZCwJLyogQXJlIHN5bmNpbmcgb3IgcmVhZGluZyAqLworCUZyYW1lU3RhdGVfRXJyb3IsCS8qIFNvbWV0aGluZyBiYWQgaGFwcGVuZWQgd2hpbGUgcHJvY2Vzc2luZyAqLworfTsKKworLyoKKyAqIFNvbWUgZnJhbWVzIG1heSBjb250YWluIG9ubHkgZXZlbiBvciBvZGQgbGluZXMuIFRoaXMgdHlwZQorICogc3BlY2lmaWVzIHdoYXQgdHlwZSBvZiBkZWludGVybGFjaW5nIGlzIHJlcXVpcmVkLgorICovCitlbnVtIERlaW50ZXJsYWNlIHsKKwlEZWludGVybGFjZV9Ob25lPTAsCisJRGVpbnRlcmxhY2VfRmlsbE9kZExpbmVzLAorCURlaW50ZXJsYWNlX0ZpbGxFdmVuTGluZXMKK307CisKKyNkZWZpbmUgVVNCVklERU9fTlVNRlJBTUVTCTIJLyogSG93IG1hbnkgZnJhbWVzIHdlIHdvcmsgd2l0aCAqLworI2RlZmluZSBVU0JWSURFT19OVU1TQlVGCTIJLyogSG93IG1hbnkgVVJCcyBsaW5rZWQgaW4gYSByaW5nICovCisKKy8qIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgb25lIElzb2MgcmVxdWVzdCAtIFVSQiBhbmQgYnVmZmVyICovCitzdHJ1Y3QgdXNidmlkZW9fc2J1ZiB7CisJY2hhciAqZGF0YTsKKwlzdHJ1Y3QgdXJiICp1cmI7Cit9OworCitzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgeworCWNoYXIgKmRhdGE7CQkvKiBGcmFtZSBidWZmZXIgKi8KKwl1bnNpZ25lZCBsb25nIGhlYWRlcjsJLyogU2lnbmlmaWNhbnQgYml0cyBmcm9tIHRoZSBoZWFkZXIgKi8KKworCXZpZGVvc2l6ZV90IGNhbnZhczsJLyogVGhlIGNhbnZhcyAobWF4LiBpbWFnZSkgYWxsb2NhdGVkICovCisJdmlkZW9zaXplX3QgcmVxdWVzdDsJLyogVGhhdCdzIHdoYXQgdGhlIGFwcGxpY2F0aW9uIGFza2VkIGZvciAqLworCXVuc2lnbmVkIHNob3J0IHBhbGV0dGU7CS8qIFRoZSBkZXNpcmVkIGZvcm1hdCAqLworCisJZW51bSBGcmFtZVN0YXRlIGZyYW1lU3RhdGU7LyogU3RhdGUgb2YgZ3JhYmJpbmcgKi8KKwllbnVtIFNjYW5TdGF0ZSBzY2Fuc3RhdGU7CS8qIFN0YXRlIG9mIHNjYW5uaW5nICovCisJZW51bSBEZWludGVybGFjZSBkZWludGVybGFjZTsKKwlpbnQgZmxhZ3M7CQkvKiBVU0JWSURFT19GUkFNRV9GTEFHX3h4eCBiaXQgZmxhZ3MgKi8KKworCWludCBjdXJsaW5lOwkJLyogTGluZSBvZiBmcmFtZSB3ZSdyZSB3b3JraW5nIG9uICovCisKKwlsb25nIHNlcVJlYWRfTGVuZ3RoOwkvKiBSYXcgZGF0YSBsZW5ndGggb2YgZnJhbWUgKi8KKwlsb25nIHNlcVJlYWRfSW5kZXg7CS8qIEFtb3VudCBvZiBkYXRhIHRoYXQgaGFzIGJlZW4gYWxyZWFkeSByZWFkICovCisKKwl2b2lkICp1c2VyOwkJLyogQWRkaXRpb25hbCBkYXRhIHRoYXQgdXNlciBtYXkgbmVlZCAqLworfTsKKworLyogU3RhdGlzdGljcyB0aGF0IGNhbiBiZSBvdmVybGFpZCBvbiBzY3JlZW4gKi8KK3N0cnVjdCB1c2J2aWRlb19zdGF0aXN0aWNzIHsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmcmFtZV9udW07CS8qIFNlcXVlbnRpYWwgbnVtYmVyIG9mIHRoZSBmcmFtZSAqLworICAgICAgICB1bnNpZ25lZCBsb25nIHVyYl9jb3VudDsgICAgICAgIC8qIEhvdyBtYW55IFVSQnMgd2UgcmVjZWl2ZWQgc28gZmFyICovCisgICAgICAgIHVuc2lnbmVkIGxvbmcgdXJiX2xlbmd0aDsgICAgICAgLyogTGVuZ3RoIG9mIGxhc3QgVVJCICovCisgICAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YV9jb3VudDsgICAgICAgLyogSG93IG1hbnkgYnl0ZXMgd2UgcmVjZWl2ZWQgKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyBoZWFkZXJfY291bnQ7ICAgICAvKiBIb3cgbWFueSBmcmFtZSBoZWFkZXJzIHdlIGZvdW5kICovCisJdW5zaWduZWQgbG9uZyBpc29fc2tpcF9jb3VudDsJLyogSG93IG1hbnkgZW1wdHkgSVNPIHBhY2tldHMgcmVjZWl2ZWQgKi8KKwl1bnNpZ25lZCBsb25nIGlzb19lcnJfY291bnQ7CS8qIEhvdyBtYW55IGJhZCBJU08gcGFja2V0cyByZWNlaXZlZCAqLworfTsKKworc3RydWN0IHVzYnZpZGVvOworCitzdHJ1Y3QgdXZkIHsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CS8qIE11c3QgYmUgdGhlIGZpcnN0IGZpZWxkISAqLworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisJc3RydWN0IHVzYnZpZGVvICpoYW5kbGU7CS8qIFBvaW50cyBiYWNrIHRvIHRoZSBzdHJ1Y3QgdXNidmlkZW8gKi8KKwl2b2lkICp1c2VyX2RhdGE7CQkvKiBDYW1lcmEtZGVwZW5kZW50IGRhdGEgKi8KKwlpbnQgdXNlcl9zaXplOwkJCS8qIFNpemUgb2YgdGhhdCBjYW1lcmEtZGVwZW5kZW50IGRhdGEgKi8KKwlpbnQgZGVidWc7CQkJLyogRGVidWcgbGV2ZWwgZm9yIHVzYnZpZGVvICovCisJdW5zaWduZWQgY2hhciBpZmFjZTsJCS8qIFZpZGVvIGludGVyZmFjZSBudW1iZXIgKi8KKwl1bnNpZ25lZCBjaGFyIHZpZGVvX2VuZHA7CisJdW5zaWduZWQgY2hhciBpZmFjZUFsdEFjdGl2ZTsKKwl1bnNpZ25lZCBjaGFyIGlmYWNlQWx0SW5hY3RpdmU7IC8qIEFsdCBzZXR0aW5ncyAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkvKiBGTEFHU19VU0JWSURFT194eHggKi8KKwl1bnNpZ25lZCBsb25nIHBhbGV0dGVCaXRzOwkvKiBXaGljaCBwYWxldHRlcyB3ZSBhY2NlcHQ/ICovCisJdW5zaWduZWQgc2hvcnQgZGVmYXVsdFBhbGV0dGU7CS8qIFdoYXQgcGFsZXR0ZSB0byB1c2UgZm9yIHJlYWQoKSAqLworCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsKKwlpbnQgdXNlcjsJCS8qIHVzZXIgY291bnQgZm9yIGV4Y2x1c2l2ZSB1c2UgKi8KKworCXZpZGVvc2l6ZV90IHZpZGVvc2l6ZTsJLyogQ3VycmVudCBzZXR0aW5nICovCisJdmlkZW9zaXplX3QgY2FudmFzOwkvKiBUaGlzIGlzIHRoZSB3aWR0aCxoZWlnaHQgb2YgdGhlIFY0TCBjYW52YXMgKi8KKwlpbnQgbWF4X2ZyYW1lX3NpemU7CS8qIEJ5dGVzIGluIG9uZSB2aWRlbyBmcmFtZSAqLworCisJaW50IHV2ZF91c2VkOyAgICAgICAgCS8qIElzIHRoaXMgc3RydWN0dXJlIGluIHVzZT8gKi8KKwlpbnQgc3RyZWFtaW5nOwkJLyogQXJlIHdlIHN0cmVhbWluZyBJc29jaHJvbm91cz8gKi8KKwlpbnQgZ3JhYmJpbmc7CQkvKiBBcmUgd2UgZ3JhYmJpbmc/ICovCisJaW50IHNldHRpbmdzQWRqdXN0ZWQ7CS8qIEhhdmUgd2UgYWRqdXN0ZWQgY29udHJhc3QgZXRjLj8gKi8KKwlpbnQgbGFzdF9lcnJvcjsJCS8qIFdoYXQgY2FsYW1pdHkgc3RydWNrIHVzPyAqLworCisJY2hhciAqZmJ1ZjsJCS8qIFZpZGVvZGV2IGJ1ZmZlciBhcmVhICovCisJaW50IGZidWZfc2l6ZTsJCS8qIFZpZGVvZGV2IGJ1ZmZlciBzaXplICovCisKKwlpbnQgY3VyZnJhbWU7CisJaW50IGlzb19wYWNrZXRfbGVuOwkvKiBWaWRlb21vZGUtZGVwZW5kZW50LCBzYXZlcyBidXMgYmFuZHdpZHRoICovCisKKwlzdHJ1Y3QgUmluZ1F1ZXVlIGRwOwkvKiBJc29jIGRhdGEgcHVtcCAqLworCXN0cnVjdCB1c2J2aWRlb19mcmFtZSBmcmFtZVtVU0JWSURFT19OVU1GUkFNRVNdOworCXN0cnVjdCB1c2J2aWRlb19zYnVmIHNidWZbVVNCVklERU9fTlVNU0JVRl07CisKKwl2b2xhdGlsZSBpbnQgcmVtb3ZlX3BlbmRpbmc7CS8qIElmIHNldCB0aGVuIGFib3V0IHRvIGV4aXQgKi8KKworCXN0cnVjdCB2aWRlb19waWN0dXJlIHZwaWMsIHZwaWNfb2xkOwkvKiBQaWN0dXJlIHNldHRpbmdzICovCisJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgdmNhcDsJCS8qIFZpZGVvIGNhcGFiaWxpdGllcyAqLworCXN0cnVjdCB2aWRlb19jaGFubmVsIHZjaGFuOwkvKiBNYXkgYmUgdXNlZCBmb3IgdHVuZXIgc3VwcG9ydCAqLworCXN0cnVjdCB1c2J2aWRlb19zdGF0aXN0aWNzIHN0YXRzOworCWNoYXIgdmlkZW9OYW1lWzMyXTsJCS8qIEhvbGRzIG5hbWUgbGlrZSAidmlkZW83IiAqLworfTsKKworLyoKKyAqIHVzYnZpZGVvIGNhbGxiYWNrcyAodmlydHVhbCBtZXRob2RzKS4gVGhleSBhcmUgc2V0IHdoZW4gdXNidmlkZW8KKyAqIHNlcnZpY2VzIGFyZSByZWdpc3RlcmVkLiBBbGwgb2YgdGhlc2UgZGVmYXVsdCB0byBOVUxMLCBleGNlcHQgdGhvc2UKKyAqIHRoYXQgZGVmYXVsdCB0byB1c2J2aWRlby1wcm92aWRlZCBtZXRob2RzLgorICovCitzdHJ1Y3QgdXNidmlkZW9fY2IgeworCWludCAoKnByb2JlKShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqKTsKKwl2b2lkICgqdXNlckZyZWUpKHN0cnVjdCB1dmQgKik7CisJdm9pZCAoKmRpc2Nvbm5lY3QpKHN0cnVjdCB1c2JfaW50ZXJmYWNlICopOworCWludCAoKnNldHVwT25PcGVuKShzdHJ1Y3QgdXZkICopOworCXZvaWQgKCp2aWRlb1N0YXJ0KShzdHJ1Y3QgdXZkICopOworCXZvaWQgKCp2aWRlb1N0b3ApKHN0cnVjdCB1dmQgKik7CisJdm9pZCAoKnByb2Nlc3NEYXRhKShzdHJ1Y3QgdXZkICosIHN0cnVjdCB1c2J2aWRlb19mcmFtZSAqKTsKKwl2b2lkICgqcG9zdFByb2Nlc3MpKHN0cnVjdCB1dmQgKiwgc3RydWN0IHVzYnZpZGVvX2ZyYW1lICopOworCXZvaWQgKCphZGp1c3RQaWN0dXJlKShzdHJ1Y3QgdXZkICopOworCWludCAoKmdldEZQUykoc3RydWN0IHV2ZCAqKTsKKwlpbnQgKCpvdmVybGF5SG9vaykoc3RydWN0IHV2ZCAqLCBzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKik7CisJaW50ICgqZ2V0RnJhbWUpKHN0cnVjdCB1dmQgKiwgaW50KTsKKwlpbnQgKCpzdGFydERhdGFQdW1wKShzdHJ1Y3QgdXZkICp1dmQpOworCXZvaWQgKCpzdG9wRGF0YVB1bXApKHN0cnVjdCB1dmQgKnV2ZCk7CisJaW50ICgqc2V0VmlkZW9Nb2RlKShzdHJ1Y3QgdXZkICp1dmQsIHN0cnVjdCB2aWRlb193aW5kb3cgKnZ3KTsKK307CisKK3N0cnVjdCB1c2J2aWRlbyB7CisJaW50IG51bV9jYW1lcmFzOwkJLyogQXMgYWxsb2NhdGVkICovCisJc3RydWN0IHVzYl9kcml2ZXIgdXNiZHJ2OwkvKiBJbnRlcmZhY2UgdG8gdGhlIFVTQiBzdGFjayAqLworCWNoYXIgZHJ2TmFtZVs4MF07CQkvKiBEcml2ZXIgbmFtZSAqLworCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsJCS8qIE11dGV4IHByb3RlY3RpbmcgY2FtZXJhIHN0cnVjdHVyZXMgKi8KKwlzdHJ1Y3QgdXNidmlkZW9fY2IgY2I7CQkvKiBUYWJsZSBvZiBjYWxsYmFja3MgKHZpcnR1YWwgbWV0aG9kcykgKi8KKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkdDsJLyogVmlkZW8gZGV2aWNlIHRlbXBsYXRlICovCisJc3RydWN0IHV2ZCAqY2FtOwkJCS8qIEFycmF5IG9mIGNhbWVyYSBzdHJ1Y3R1cmVzICovCisJc3RydWN0IG1vZHVsZSAqbWRfbW9kdWxlOwkvKiBNaW5pZHJpdmVyIG1vZHVsZSAqLworfTsKKworCisvKgorICogVGhpcyBtYWNybyByZXRyaWV2ZXMgY2FsbGJhY2sgYWRkcmVzcyBmcm9tIHRoZSBzdHJ1Y3QgdXZkIG9iamVjdC4KKyAqIE5vIHZhbGlkaXR5IGNoZWNrcyBhcmUgZG9uZSBoZXJlLCBzbyBiZSBzdXJlIHRvIGNoZWNrIHRoZQorICogY2FsbGJhY2sgYmVmb3JlaGFuZCB3aXRoIFZBTElEX0NBTExCQUNLLgorICovCisjZGVmaW5lCUdFVF9DQUxMQkFDSyh1dmQsY2JOYW1lKSAoKHV2ZCktPmhhbmRsZS0+Y2IuY2JOYW1lKQorCisvKgorICogVGhpcyBtYWNybyByZXR1cm5zIGVpdGhlciBjYWxsYmFjayBwb2ludGVyIG9yIE5VTEwuIFRoaXMgaXMgc2FmZQorICogbWFjcm8sIG1lYW5pbmcgdGhhdCBtb3N0IG9mIGNvbXBvbmVudHMgb2YgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkCisgKiBtYXkgYmUgTlVMTCAtIHRoaXMgb25seSByZXN1bHRzIGluIE5VTEwgYmVpbmcgcmV0dXJuZWQuIFlvdSBtYXkKKyAqIHdpc2ggdG8gdXNlIHRoaXMgbWFjcm8gdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNhbGxiYWNrIGlzIGNhbGxhYmxlLgorICogSG93ZXZlciBrZWVwIGluIG1pbmQgdGhhdCB0aG9zZSBjaGVja3MgdGFrZSB0aW1lLgorICovCisjZGVmaW5lCVZBTElEX0NBTExCQUNLKHV2ZCxjYk5hbWUpICgoKCh1dmQpICE9IE5VTEwpICYmIFwKKwkJKCh1dmQpLT5oYW5kbGUgIT0gTlVMTCkpID8gR0VUX0NBTExCQUNLKHV2ZCxjYk5hbWUpIDogTlVMTCkKKworaW50ICBSaW5nUXVldWVfRGVxdWV1ZShzdHJ1Y3QgUmluZ1F1ZXVlICpycSwgdW5zaWduZWQgY2hhciAqZHN0LCBpbnQgbGVuKTsKK2ludCAgUmluZ1F1ZXVlX0VucXVldWUoc3RydWN0IFJpbmdRdWV1ZSAqcnEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNkYXRhLCBpbnQgbik7Cit2b2lkIFJpbmdRdWV1ZV9XYWtlVXBJbnRlcnJ1cHRpYmxlKHN0cnVjdCBSaW5nUXVldWUgKnJxKTsKK3ZvaWQgUmluZ1F1ZXVlX0ZsdXNoKHN0cnVjdCBSaW5nUXVldWUgKnJxKTsKKworc3RhdGljIGlubGluZSBpbnQgUmluZ1F1ZXVlX0dldExlbmd0aChjb25zdCBzdHJ1Y3QgUmluZ1F1ZXVlICpycSkKK3sKKwlyZXR1cm4gKHJxLT53aSAtIHJxLT5yaSArIHJxLT5sZW5ndGgpICYgKHJxLT5sZW5ndGgtMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IFJpbmdRdWV1ZV9HZXRGcmVlU3BhY2UoY29uc3Qgc3RydWN0IFJpbmdRdWV1ZSAqcnEpCit7CisJcmV0dXJuIHJxLT5sZW5ndGggLSBSaW5nUXVldWVfR2V0TGVuZ3RoKHJxKTsKK30KKwordm9pZCB1c2J2aWRlb19EcmF3TGluZSgKKwlzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lLAorCWludCB4MSwgaW50IHkxLAorCWludCB4MiwgaW50IHkyLAorCXVuc2lnbmVkIGNoYXIgY3IsIHVuc2lnbmVkIGNoYXIgY2csIHVuc2lnbmVkIGNoYXIgY2IpOwordm9pZCB1c2J2aWRlb19IZXhEdW1wKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4pOwordm9pZCB1c2J2aWRlb19TYXlBbmRXYWl0KGNvbnN0IGNoYXIgKndoYXQpOwordm9pZCB1c2J2aWRlb19UZXN0UGF0dGVybihzdHJ1Y3QgdXZkICp1dmQsIGludCBmdWxsZnJhbWUsIGludCBwbW9kZSk7CisKKy8qIE1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzICovCit1bnNpZ25lZCBsb25nIHVzYnZpZGVvX2t2aXJ0X3RvX3BhKHVuc2lnbmVkIGxvbmcgYWRyKTsKKworaW50IHVzYnZpZGVvX3JlZ2lzdGVyKAorCXN0cnVjdCB1c2J2aWRlbyAqKnBDYW1zLAorCWNvbnN0IGludCBudW1fY2FtcywKKwljb25zdCBpbnQgbnVtX2V4dHJhLAorCWNvbnN0IGNoYXIgKmRyaXZlck5hbWUsCisJY29uc3Qgc3RydWN0IHVzYnZpZGVvX2NiICpjYlRhYmxlLAorCXN0cnVjdCBtb2R1bGUgKm1kLAorCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZF90YWJsZSk7CitzdHJ1Y3QgdXZkICp1c2J2aWRlb19BbGxvY2F0ZURldmljZShzdHJ1Y3QgdXNidmlkZW8gKmNhbXMpOworaW50IHVzYnZpZGVvX1JlZ2lzdGVyVmlkZW9EZXZpY2Uoc3RydWN0IHV2ZCAqdXZkKTsKK3ZvaWQgdXNidmlkZW9fRGVyZWdpc3RlcihzdHJ1Y3QgdXNidmlkZW8gKip1dnQpOworCitpbnQgdXNidmlkZW9fdjRsX2luaXRpYWxpemUoc3RydWN0IHZpZGVvX2RldmljZSAqZGV2KTsKKwordm9pZCB1c2J2aWRlb19EZWludGVybGFjZUZyYW1lKHN0cnVjdCB1dmQgKnV2ZCwgc3RydWN0IHVzYnZpZGVvX2ZyYW1lICpmcmFtZSk7CisKKy8qCisgKiBUaGlzIGNvZGUgcGVyZm9ybXMgYm91bmRzIGNoZWNraW5nIC0gdXNlIGl0IHdoZW4gd29ya2luZyB3aXRoCisgKiBuZXcgZm9ybWF0cywgb3IgZWxzZSB5b3UgbWF5IGdldCBvb3BzZXMgYWxsIG92ZXIgdGhlIHBsYWNlLgorICogSWYgcGl4ZWwgZmFsbHMgb3V0IG9mIGJvdW5kcyB0aGVuIGl0IGdldHMgc2hvdmVkIGJhY2sgKGFzIGNsb3NlCisgKiB0byBwbGFjZSBvZiBvZmZlbmNlIGFzIHBvc3NpYmxlKSBhbmQgaXMgcGFpbnRlZCBicmlnaHQgcmVkLgorICoKKyAqIFRoZXJlIGFyZSB0d28gaW1wb3J0YW50IGNvbmNlcHRzOiBmcmFtZSB3aWR0aCwgaGVpZ2h0IGFuZAorICogVjRMIGNhbnZhcyB3aWR0aCwgaGVpZ2h0LiBUaGUgZm9ybWVyIGlzIHRoZSBhcmVhIHJlcXVlc3RlZCBieQorICogdGhlIGFwcGxpY2F0aW9uIC1mb3IgdGhpcyB2ZXJ5IGZyYW1lLS4gVGhlIGxhdHRlciBpcyB0aGUgbGFyZ2VzdAorICogcG9zc2libGUgZnJhbWUgdGhhdCB3ZSBjYW4gc2VydmUgKHdlIGFkdmVydGlzZSB0aGF0IHZpYSBWNEwgaW9jdGwpLgorICogVGhlIGZyYW1lIGRhdGEgaXMgZXhwZWN0ZWQgdG8gYmUgZm9ybWF0dGVkIGFzIGxpbmVzIG9mIGxlbmd0aAorICogVklERU9TSVpFX1goZnItPnJlcXVlc3QpLCB0b3RhbCBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkgbGluZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBSR0IyNF9QVVRQSVhFTCgKKwlzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyLAorCWludCBpeCwgaW50IGl5LAorCXVuc2lnbmVkIGNoYXIgdnIsCisJdW5zaWduZWQgY2hhciB2ZywKKwl1bnNpZ25lZCBjaGFyIHZiKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgKnBmOworCWludCBsaW1pdGVyID0gMCwgbXgsIG15OworCW14ID0gaXg7CisJbXkgPSBpeTsKKwlpZiAobXggPCAwKSB7CisJCW14PTA7CisJCWxpbWl0ZXIrKzsKKwl9IGVsc2UgaWYgKG14ID49IFZJREVPU0laRV9YKChmciktPnJlcXVlc3QpKSB7CisJCW14PSBWSURFT1NJWkVfWCgoZnIpLT5yZXF1ZXN0KSAtIDE7CisJCWxpbWl0ZXIrKzsKKwl9CisJaWYgKG15IDwgMCkgeworCQlteSA9IDA7CisJCWxpbWl0ZXIrKzsKKwl9IGVsc2UgaWYgKG15ID49IFZJREVPU0laRV9ZKChmciktPnJlcXVlc3QpKSB7CisJCW15ID0gVklERU9TSVpFX1koKGZyKS0+cmVxdWVzdCkgLSAxOworCQlsaW1pdGVyKys7CisJfQorCXBmID0gKGZyKS0+ZGF0YSArIFY0TF9CWVRFU19QRVJfUElYRUwqKChpeSkqVklERU9TSVpFX1goKGZyKS0+cmVxdWVzdCkgKyAoaXgpKTsKKwlpZiAobGltaXRlcikgeworCQkqcGYrKyA9IDA7CisJCSpwZisrID0gMDsKKwkJKnBmKysgPSAweEZGOworCX0gZWxzZSB7CisJCSpwZisrID0gKHZiKTsKKwkJKnBmKysgPSAodmcpOworCQkqcGYrKyA9ICh2cik7CisJfQorfQorCisjZW5kaWYgLyogdXNidmlkZW9faCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvdmljYW0uYyBiL2RyaXZlcnMvdXNiL21lZGlhL3ZpY2FtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE1ODU3YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3ZpY2FtLmMKQEAgLTAsMCArMSwxNDA5IEBACisvKgorICogVVNCIFZpQ2FtIFdlYkNhbSBkcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwMiBKb2UgQnVya3MgKGpidXJrc0B3YXZpY2xlLm9yZyksCisgKiAgICAgICAgICAgICAgICAgICAgQ2hyaXN0b3BoZXIgTCBDaGVuZXkgKGNjaGVuZXlAY2hlbmV5LmN4KSwKKyAqICAgICAgICAgICAgICAgICAgICBQYXZlbCBNYWNoZWsgKHBhdmVsQHN1c2UuY3opLAorICogICAgICAgICAgICAgICAgICAgIEpvaG4gVHluZXIgKGp0eW5lckBjcy51Y3IuZWR1KSwKKyAqICAgICAgICAgICAgICAgICAgICBNb25yb2UgV2lsbGlhbXMgKG1vbnJvZUBwb2JveC5jb20pCisgKgorICogU3VwcG9ydHMgM0NPTSBIb21lQ29ubmVjdCBQQyBEaWdpdGFsIFdlYkNhbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgYmFzZWQgaGVhdmlseSBvbiB0aGUgQ1BpQSB3ZWJjYW0gZHJpdmVyIHdoaWNoIHdhcworICogd3JpdHRlbiBieSBQZXRlciBQcmVnbGVyLCBTY290dCBKLiBCZXJ0aW4gYW5kIEpvaGFubmVzIEVyZGZlbHQKKyAqCisgKiBQb3J0aW9ucyBvZiB0aGlzIGNvZGUgd2VyZSBhbHNvIGNvcGllZCBmcm9tIHVzYnZpZGVvLmMKKyAqCisgKiBTcGVjaWFsIHRoYW5rcyB0byB0aGUgdGhlIHdob2xlIHRlYW0gYXQgU291cmNlZm9yZ2UgZm9yIGhlbHAgbWFraW5nCisgKiB0aGlzIGRyaXZlciBiZWNvbWUgYSByZWFsaXR5LiAgTm90YWJseToKKyAqIEFuZHkgQXJtc3Ryb25nIHdobyByZXZlcnNlIGVuZ2luZWVyZWQgdGhlIGNvbG9yIGVuY29kaW5nIGFuZAorICogUGF2ZWwgTWFjaGVrIGFuZCBDaHJpcyBDaGVuZXkgd2hvIHdvcmtlZCBvbiByZXZlcnNlIGVuZ2luZWVyaW5nIHRoZQorICogICAgY2FtZXJhIGNvbnRyb2xzIGFuZCB3cm90ZSB0aGUgZmlyc3QgZ2VuZXJhdGlvbiBkcml2ZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgInVzYnZpZGVvLmgiCisKKy8vICNkZWZpbmUgVklDQU1fREVCVUcKKworI2lmZGVmIFZJQ0FNX0RFQlVHCisjZGVmaW5lIEFEQkcobGluZW5vLGZtdCxhcmdzLi4uKSBwcmludGsoZm10LCBqaWZmaWVzLCBfX0ZVTkNUSU9OX18sIGxpbmVubywgIyNhcmdzKQorI2RlZmluZSBEQkcoZm10LGFyZ3MuLi4pIEFEQkcoKF9fTElORV9fKSxLRVJOX0RFQlVHIF9fRklMRV9fIiglbGQpOiVzICglZCk6ImZtdCwjI2FyZ3MpCisjZWxzZQorI2RlZmluZSBEQkcoZm1uLGFyZ3MuLi4pIGRvIHt9IHdoaWxlKDApCisjZW5kaWYKKworI2RlZmluZSBEUklWRVJfQVVUSE9SICAgICAgICAgICAiSm9lIEJ1cmtzLCBqYnVya3NAd2F2aWNsZS5vcmciCisjZGVmaW5lIERSSVZFUl9ERVNDICAgICAgICAgICAgICJWaUNhbSBXZWJDYW0gRHJpdmVyIgorCisvKiBEZWZpbmUgdGhlc2UgdmFsdWVzIHRvIG1hdGNoIHlvdXIgZGV2aWNlICovCisjZGVmaW5lIFVTQl9WSUNBTV9WRU5ET1JfSUQJMHgwNGMxCisjZGVmaW5lIFVTQl9WSUNBTV9QUk9EVUNUX0lECTB4MDA5ZAorCisjZGVmaW5lIFZJQ0FNX0JZVEVTX1BFUl9QSVhFTCAgIDMKKyNkZWZpbmUgVklDQU1fTUFYX1JFQURfU0laRSAgICAgKDUxMioyNDIrMTI4KQorI2RlZmluZSBWSUNBTV9NQVhfRlJBTUVfU0laRSAgICAoVklDQU1fQllURVNfUEVSX1BJWEVMKjMyMCoyNDApCisjZGVmaW5lIFZJQ0FNX0ZSQU1FUyAgICAgICAgICAgIDIKKworI2RlZmluZSBWSUNBTV9IRUFERVJfU0laRSAgICAgICA2NAorCisjZGVmaW5lIGNsYW1wKCB4LCBsLCBoICkgICAgICAgIG1heF90KCBfX3R5cGVvZl9fKCB4ICksICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBsICksICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbl90KCBfX3R5cGVvZl9fKCB4ICksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBoICksICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggeCApICkgKQorCisvKiBOb3Qgc3VyZSB3aGF0IGFsbCB0aGUgYnl0ZXMgaW4gdGhlc2UgY2hhcgorICogYXJyYXlzIGRvLCBidXQgdGhleSdyZSBuZWNlc3NhcnkgdG8gbWFrZQorICogdGhlIGNhbWVyYSB3b3JrLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHNldHVwMVtdID0geworCTB4QjYsIDB4QzMsIDB4MUYsIDB4MDAsIDB4MDIsIDB4NjQsIDB4RTcsIDB4NjcsCisJMHhGRCwgMHhGRiwgMHgwRSwgMHhDMCwgMHhFNywgMHgwOSwgMHhERSwgMHgwMCwKKwkweDhFLCAweDAwLCAweEMwLCAweDA5LCAweDQwLCAweDAzLCAweEMwLCAweDE3LAorCTB4NDQsIDB4MDMsIDB4NEIsIDB4QUYsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MDAsCisJMHg0QiwgMHhBRiwgMHg5NywgMHhDRiwgMHgwMCwgMHgwMAorfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgc2V0dXAyW10gPSB7CisJMHhCNiwgMHhDMywgMHgwMywgMHgwMCwgMHgwMywgMHg2NCwgMHgxOCwgMHgwMCwKKwkweDAwLCAweDAwCit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBzZXR1cDNbXSA9IHsKKwkweEI2LCAweEMzLCAweDAxLCAweDAwLCAweDA2LCAweDY0LCAweDAwLCAweDAwCit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBzZXR1cDRbXSA9IHsKKwkweEI2LCAweEMzLCAweDhGLCAweDA2LCAweDAyLCAweDY0LCAweEU3LCAweDA3LAorCTB4MDAsIDB4MDAsIDB4MDgsIDB4QzAsIDB4RTcsIDB4MDcsIDB4MDAsIDB4MDAsCisJMHgzRSwgMHhDMCwgMHhFNywgMHgwNywgMHg1NCwgMHgwMSwgMHhBQSwgMHgwMCwKKwkweEU3LCAweDA3LCAweEM4LCAweDA1LCAweEI2LCAweDAwLCAweEU3LCAweDA3LAorCTB4NDIsIDB4MDEsIDB4RDIsIDB4MDAsIDB4RTcsIDB4MDcsIDB4N0MsIDB4MDAsCisJMHgxNiwgMHgwMCwgMHhFNywgMHgwNywgMHg1NiwgMHgwMCwgMHgxOCwgMHgwMCwKKwkweEU3LCAweDA3LCAweDA2LCAweDAwLCAweDkyLCAweEMwLCAweEU3LCAweDA3LAorCTB4MDAsIDB4MDAsIDB4MUUsIDB4QzAsIDB4RTcsIDB4MDcsIDB4RkYsIDB4RkYsCisJMHgyMiwgMHhDMCwgMHhFNywgMHgwNywgMHgwNCwgMHgwMCwgMHgyNCwgMHhDMCwKKwkweEU3LCAweDA3LCAweEVDLCAweDI3LCAweDI4LCAweEMwLCAweEU3LCAweDA3LAorCTB4MTYsIDB4MDEsIDB4OEUsIDB4MDAsIDB4RTcsIDB4ODcsIDB4MDEsIDB4MDAsCisJMHgwRSwgMHhDMCwgMHg5NywgMHhDRiwgMHhENywgMHgwOSwgMHgwMCwgMHhDMCwKKwkweEU3LCAweDc3LCAweDAxLCAweDAwLCAweDkyLCAweEMwLCAweDA5LCAweEMxLAorCTB4RTcsIDB4MDksIDB4RkUsIDB4MDUsIDB4MjQsIDB4MDEsIDB4RTcsIDB4MDksCisJMHgwNCwgMHgwNiwgMHgyNiwgMHgwMSwgMHhFNywgMHgwNywgMHgwNywgMHgwMCwKKwkweDkyLCAweEMwLCAweEU3LCAweDA1LCAweDAwLCAweEMwLCAweEMwLCAweERGLAorCTB4OTcsIDB4Q0YsIDB4MTcsIDB4MDAsIDB4NTcsIDB4MDAsIDB4MTcsIDB4MDIsCisJMHhENywgMHgwOSwgMHgwMCwgMHhDMCwgMHhFNywgMHg3NywgMHgwMSwgMHgwMCwKKwkweDkyLCAweEMwLCAweDBBLCAweEMxLCAweEU3LCAweDU3LCAweEZGLCAweEZGLAorCTB4RkEsIDB4MDUsIDB4MEQsIDB4QzAsIDB4RTcsIDB4NTcsIDB4MDAsIDB4MDAsCisJMHhGQSwgMHgwNSwgMHgwRiwgMHhDMCwgMHg5RiwgMHhBRiwgMHhDNiwgMHgwMCwKKwkweEU3LCAweDA1LCAweDAwLCAweEMwLCAweEM4LCAweDA1LCAweEMxLCAweDA1LAorCTB4QzAsIDB4MDUsIDB4QzAsIDB4REYsIDB4OTcsIDB4Q0YsIDB4MjcsIDB4REEsCisJMHhGQSwgMHgwNSwgMHhFRiwgMHgwNywgMHgwMSwgMHgwMCwgMHgwQiwgMHgwNiwKKwkweDczLCAweENGLCAweDlGLCAweEFGLCAweDc4LCAweDAxLCAweDlGLCAweEFGLAorCTB4MUEsIDB4MDMsIDB4NkUsIDB4Q0YsIDB4RTcsIDB4MDksIDB4RkMsIDB4MDUsCisJMHgyNCwgMHgwMSwgMHhFNywgMHgwOSwgMHgwMiwgMHgwNiwgMHgyNiwgMHgwMSwKKwkweEU3LCAweDA3LCAweDA3LCAweDAwLCAweDkyLCAweEMwLCAweEU3LCAweDA5LAorCTB4RkMsIDB4MDUsIDB4RkUsIDB4MDUsIDB4RTcsIDB4MDksIDB4MDIsIDB4MDYsCisJMHgwNCwgMHgwNiwgMHhFNywgMHgwOSwgMHgwMCwgMHgwNiwgMHhGQywgMHgwNSwKKwkweEU3LCAweDA5LCAweEZFLCAweDA1LCAweDAwLCAweDA2LCAweDI3LCAweERBLAorCTB4RkEsIDB4MDUsIDB4RTcsIDB4NTcsIDB4MDEsIDB4MDAsIDB4RkEsIDB4MDUsCisJMHgwMiwgMHhDQSwgMHgwNCwgMHhDMCwgMHg5NywgMHhDRiwgMHg5RiwgMHhBRiwKKwkweDY2LCAweDA1LCAweDk3LCAweENGLCAweEU3LCAweDA3LCAweDQwLCAweDAwLAorCTB4MDIsIDB4MDYsIDB4QzgsIDB4MDksIDB4RkMsIDB4MDUsIDB4OUYsIDB4QUYsCisJMHhEQSwgMHgwMiwgMHg5NywgMHhDRiwgMHhDRiwgMHgxNywgMHgwMiwgMHgwMCwKKwkweEVGLCAweDU3LCAweDgxLCAweDAwLCAweDA5LCAweDA2LCAweDlGLCAweEEwLAorCTB4QjYsIDB4MDEsIDB4RUYsIDB4NTcsIDB4ODAsIDB4MDAsIDB4MDksIDB4MDYsCisJMHg5RiwgMHhBMCwgMHg0MCwgMHgwMiwgMHhFRiwgMHg1NywgMHgwMSwgMHgwMCwKKwkweDBCLCAweDA2LCAweDlGLCAweEEwLCAweDQ2LCAweDAzLCAweEU3LCAweDA3LAorCTB4MDEsIDB4MDAsIDB4MEEsIDB4QzAsIDB4NDYsIDB4QUYsIDB4NDcsIDB4QUYsCisJMHg5RiwgMHhBRiwgMHg0MCwgMHgwMiwgMHhFNywgMHgwNywgMHgyRSwgMHgwMCwKKwkweDBBLCAweEMwLCAweEVGLCAweDg3LCAweDgwLCAweDAwLCAweDA5LCAweDA2LAorCTB4OTcsIDB4Q0YsIDB4MDAsIDB4MEUsIDB4MDEsIDB4MDAsIDB4QzAsIDB4NTcsCisJMHg1MSwgMHgwMCwgMHg5RiwgMHhDMCwgMHg5RSwgMHgwMiwgMHhDMCwgMHg1NywKKwkweDUwLCAweDAwLCAweDIwLCAweEMwLCAweEMwLCAweDU3LCAweDU1LCAweDAwLAorCTB4MTIsIDB4QzAsIDB4QzAsIDB4NTcsIDB4NTYsIDB4MDAsIDB4OUYsIDB4QzAsCisJMHg3MiwgMHgwMiwgMHg5RiwgMHhDRiwgMHhENiwgMHgwMiwgMHhDMSwgMHgwQiwKKwkweDA4LCAweDA2LCAweDAxLCAweEQwLCAweDZGLCAweDkwLCAweDA4LCAweDA2LAorCTB4QzAsIDB4MDcsIDB4MDgsIDB4MDAsIDB4QzEsIDB4MEIsIDB4MDgsIDB4MDYsCisJMHg5RiwgMHhBRiwgMHgyOCwgMHgwNSwgMHg5NywgMHhDRiwgMHgyRiwgMHgwRSwKKwkweDAyLCAweDAwLCAweDA4LCAweDA2LCAweEMwLCAweDA3LCAweDA4LCAweDAwLAorCTB4QzEsIDB4MEIsIDB4MDgsIDB4MDYsIDB4OUYsIDB4QUYsIDB4MjgsIDB4MDUsCisJMHg5RiwgMHhDRiwgMHhENiwgMHgwMiwgMHgyRiwgMHgwRSwgMHgwMiwgMHgwMCwKKwkweDA5LCAweDA2LCAweEVGLCAweDg3LCAweDgwLCAweDAwLCAweDA5LCAweDA2LAorCTB4OUYsIDB4Q0YsIDB4RDYsIDB4MDIsIDB4RUYsIDB4NjcsIDB4N0YsIDB4RkYsCisJMHgwOSwgMHgwNiwgMHhFNywgMHg2NywgMHhGRiwgMHhGRCwgMHgyMiwgMHhDMCwKKwkweEU3LCAweDY3LCAweEVGLCAweEZGLCAweDI0LCAweEMwLCAweEU3LCAweDg3LAorCTB4MTAsIDB4MDAsIDB4MjgsIDB4QzAsIDB4OUYsIDB4QUYsIDB4QjgsIDB4MDUsCisJMHhFNywgMHg4NywgMHhFMCwgMHgyMSwgMHgyNCwgMHhDMCwgMHg5RiwgMHhBRiwKKwkweEE4LCAweDA1LCAweEU3LCAweDg3LCAweDA4LCAweDAwLCAweDI0LCAweEMwLAorCTB4RTcsIDB4NjcsIDB4REYsIDB4RkYsIDB4MjQsIDB4QzAsIDB4QzgsIDB4MDcsCisJMHgwQSwgMHgwMCwgMHhDMCwgMHgwNywgMHgwMCwgMHgwMCwgMHhDMSwgMHgwNywKKwkweDAxLCAweDAwLCAweDlGLCAweEFGLCAweDI4LCAweDA1LCAweDlGLCAweEFGLAorCTB4QjgsIDB4MDUsIDB4QzAsIDB4MDcsIDB4OUUsIDB4MDAsIDB4OUYsIDB4QUYsCisJMHg0NCwgMHgwNSwgMHhFNywgMHg2NywgMHhGRiwgMHhGRSwgMHgyNCwgMHhDMCwKKwkweEMwLCAweDA5LCAweDIwLCAweEMwLCAweEU3LCAweDg3LCAweDAwLCAweDAxLAorCTB4MjQsIDB4QzAsIDB4QzAsIDB4NzcsIDB4MDAsIDB4MDIsIDB4MEYsIDB4QzEsCisJMHhFNywgMHg2NywgMHhGNywgMHhGRiwgMHgyNCwgMHhDMCwgMHhFNywgMHg2NywKKwkweEY3LCAweEZGLCAweDI0LCAweEMwLCAweEU3LCAweDg3LCAweDA4LCAweDAwLAorCTB4MjQsIDB4QzAsIDB4MDgsIDB4REEsIDB4NUUsIDB4QzEsIDB4RUYsIDB4MDcsCisJMHg4MCwgMHgwMCwgMHgwOSwgMHgwNiwgMHg5NywgMHhDRiwgMHhFRiwgMHgwNywKKwkweDAxLCAweDAwLCAweDBBLCAweDA2LCAweDk3LCAweENGLCAweEVGLCAweDA3LAorCTB4MDAsIDB4MDAsIDB4MEIsIDB4MDYsIDB4RUYsIDB4MDcsIDB4MDAsIDB4MDAsCisJMHgwQSwgMHgwNiwgMHhFRiwgMHg2NywgMHg3RiwgMHhGRiwgMHgwOSwgMHgwNiwKKwkweEVGLCAweDA3LCAweDAwLCAweDAwLCAweDBELCAweDA2LCAweEU3LCAweDY3LAorCTB4RUYsIDB4RkYsIDB4MjgsIDB4QzAsIDB4RTcsIDB4NjcsIDB4MTcsIDB4RDgsCisJMHgyNCwgMHhDMCwgMHhFNywgMHgwNywgMHgwMCwgMHgwMCwgMHgxRSwgMHhDMCwKKwkweEU3LCAweDA3LCAweEZGLCAweEZGLCAweDIyLCAweEMwLCAweDk3LCAweENGLAorCTB4QzgsIDB4MDcsIDB4MEUsIDB4MDYsIDB4OUYsIDB4QUYsIDB4REEsIDB4MDIsCisJMHhFNywgMHgwNywgMHgwMCwgMHgwMCwgMHhGMiwgMHgwNSwgMHhFNywgMHgwNywKKwkweDEwLCAweDAwLCAweEY2LCAweDA1LCAweEU3LCAweDA3LCAweDBFLCAweDA2LAorCTB4RjQsIDB4MDUsIDB4RTcsIDB4MDcsIDB4RDYsIDB4MDIsIDB4RjgsIDB4MDUsCisJMHhDOCwgMHgwNywgMHhGMiwgMHgwNSwgMHhDMSwgMHgwNywgMHgwMCwgMHg4MCwKKwkweDUwLCAweEFGLCAweDk3LCAweENGLCAweDJGLCAweDBDLCAweDAyLCAweDAwLAorCTB4MDcsIDB4MDYsIDB4MkYsIDB4MEMsIDB4MDQsIDB4MDAsIDB4MDYsIDB4MDYsCisJMHhFNywgMHgwNywgMHgwMCwgMHgwMCwgMHhGMiwgMHgwNSwgMHhFNywgMHgwNywKKwkweDEwLCAweDAwLCAweEY2LCAweDA1LCAweEU3LCAweDA3LCAweEUyLCAweDA1LAorCTB4RjQsIDB4MDUsIDB4RTcsIDB4MDcsIDB4Q0UsIDB4MDIsIDB4RjgsIDB4MDUsCisJMHhDOCwgMHgwNywgMHhGMiwgMHgwNSwgMHhDMSwgMHgwNywgMHgwMCwgMHg4MCwKKwkweDUxLCAweEFGLCAweDk3LCAweENGLCAweDlGLCAweEFGLCAweDY2LCAweDA0LAorCTB4OUYsIDB4QUYsIDB4MUEsIDB4MDMsIDB4NTksIDB4QUYsIDB4OTcsIDB4Q0YsCisJMHhDMCwgMHgwNywgMHgwRSwgMHgwMCwgMHhDMSwgMHgwQiwgMHgwQywgMHgwNiwKKwkweDQxLCAweEQxLCAweDlGLCAweEFGLCAweDI4LCAweDA1LCAweEMwLCAweDA3LAorCTB4M0MsIDB4MDAsIDB4OUYsIDB4QUYsIDB4NDQsIDB4MDUsIDB4NjgsIDB4MDAsCisJMHhDMCwgMHgwNywgMHgzQiwgMHgwMCwgMHg5RiwgMHhBRiwgMHg0NCwgMHgwNSwKKwkweDZGLCAweDAwLCAweDBDLCAweDA2LCAweDY4LCAweDAwLCAweEUwLCAweDA3LAorCTB4MDQsIDB4MDEsIDB4RTgsIDB4MEIsIDB4MEEsIDB4MDYsIDB4RTgsIDB4MDcsCisJMHgwMCwgMHgwMCwgMHhFMCwgMHgwNywgMHgwMCwgMHgwMiwgMHhFMCwgMHgwNywKKwkweEVDLCAweDAxLCAweEUwLCAweDA3LCAweEZDLCAweEZGLCAweDk3LCAweENGLAorCTB4RTcsIDB4MDcsIDB4RkYsIDB4RkYsIDB4RkEsIDB4MDUsIDB4RUYsIDB4MDcsCisJMHgwMCwgMHgwMCwgMHgwQiwgMHgwNiwgMHhFNywgMHgwNywgMHgwRSwgMHgwNiwKKwkweDI0LCAweDAxLCAweEU3LCAweDA3LCAweDBFLCAweDA2LCAweEZFLCAweDA1LAorCTB4RTcsIDB4MDcsIDB4NDAsIDB4MDAsIDB4MjYsIDB4MDEsIDB4RTcsIDB4MDcsCisJMHg0MCwgMHgwMCwgMHgwNCwgMHgwNiwgMHhFNywgMHgwNywgMHgwNywgMHgwMCwKKwkweDkyLCAweEMwLCAweDk3LCAweENGLCAweEVGLCAweDA3LCAweDAyLCAweDAwLAorCTB4MEIsIDB4MDYsIDB4OUYsIDB4QUYsIDB4NzgsIDB4MDEsIDB4RUYsIDB4NzcsCisJMHg4MCwgMHgwMCwgMHgwNywgMHgwNiwgMHg5RiwgMHhDMCwgMHgxNCwgMHgwNCwKKwkweEVGLCAweDc3LCAweDAxLCAweDAwLCAweDA3LCAweDA2LCAweDM3LCAweEMwLAorCTB4RUYsIDB4NzcsIDB4MDEsIDB4MDAsIDB4MEQsIDB4MDYsIDB4MEYsIDB4QzEsCisJMHhFRiwgMHgwNywgMHgwMSwgMHgwMCwgMHgwRCwgMHgwNiwgMHhDMCwgMHgwNywKKwkweDAyLCAweDAwLCAweEMxLCAweDA3LCAweDMwLCAweDAwLCAweDlGLCAweEFGLAorCTB4MjgsIDB4MDUsIDB4QzAsIDB4MDcsIDB4MDEsIDB4MDAsIDB4QzEsIDB4MDcsCisJMHgwMiwgMHgwMCwgMHg5RiwgMHhBRiwgMHgyOCwgMHgwNSwgMHhDOCwgMHgwNywKKwkweEZGLCAweDRGLCAweDlGLCAweEFGLCAweEE4LCAweDA1LCAweEMwLCAweDA3LAorCTB4MzgsIDB4MDAsIDB4OUYsIDB4QUYsIDB4NDQsIDB4MDUsIDB4QzEsIDB4NzcsCisJMHgwMywgMHgwMCwgMHgwMiwgMHhDMSwgMHgwOCwgMHhEQSwgMHg3NSwgMHhDMSwKKwkweEMxLCAweDc3LCAweDAxLCAweDAwLCAweDBBLCAweEMxLCAweEMwLCAweDA3LAorCTB4MDEsIDB4MDAsIDB4QzEsIDB4MDcsIDB4MDIsIDB4MDAsIDB4OUYsIDB4QUYsCisJMHgyOCwgMHgwNSwgMHhFRiwgMHgwNywgMHgwMSwgMHgwMCwgMHgwNiwgMHgwNiwKKwkweDJDLCAweENGLCAweEMwLCAweDA3LCAweDAxLCAweDAwLCAweEMxLCAweDA3LAorCTB4MDQsIDB4MDAsIDB4OUYsIDB4QUYsIDB4MjgsIDB4MDUsIDB4RUYsIDB4MDcsCisJMHgwMCwgMHgwMCwgMHgwNiwgMHgwNiwgMHgyMiwgMHhDRiwgMHhFRiwgMHgwNywKKwkweDAwLCAweDAwLCAweDBELCAweDA2LCAweEVGLCAweDU3LCAweDAxLCAweDAwLAorCTB4MDYsIDB4MDYsIDB4MUIsIDB4QzAsIDB4QzAsIDB4MDcsIDB4MDEsIDB4MDAsCisJMHhDMSwgMHgwNywgMHgwMSwgMHgwMCwgMHg5RiwgMHhBRiwgMHgyOCwgMHgwNSwKKwkweEMwLCAweDA3LCAweDAyLCAweDAwLCAweEMxLCAweDA3LCAweDMwLCAweDAwLAorCTB4OUYsIDB4QUYsIDB4MjgsIDB4MDUsIDB4QzgsIDB4MDcsIDB4RkYsIDB4NEYsCisJMHg5RiwgMHhBRiwgMHhBOCwgMHgwNSwgMHhDMCwgMHgwNywgMHgzOCwgMHgwMCwKKwkweDlGLCAweEFGLCAweDQ0LCAweDA1LCAweEMxLCAweDY3LCAweDAzLCAweDAwLAorCTB4QzEsIDB4NTcsIDB4MDMsIDB4MDAsIDB4MDIsIDB4QzAsIDB4MDgsIDB4REEsCisJMHg3MywgMHhDMSwgMHhDMCwgMHgwNywgMHgwMiwgMHgwMCwgMHhDMSwgMHgwNywKKwkweDEyLCAweDAwLCAweEVGLCAweDU3LCAweDAwLCAweDAwLCAweDA2LCAweDA2LAorCTB4MDIsIDB4QzAsIDB4QzEsIDB4MDcsIDB4MjMsIDB4MDAsIDB4OUYsIDB4QUYsCisJMHgyOCwgMHgwNSwgMHhDMCwgMHgwNywgMHgxNCwgMHgwMCwgMHhDMSwgMHgwQiwKKwkweEVBLCAweDA1LCAweDlGLCAweEFGLCAweDI4LCAweDA1LCAweEMwLCAweDA3LAorCTB4M0UsIDB4MDAsIDB4OUYsIDB4QUYsIDB4MEEsIDB4MDUsIDB4RTcsIDB4MDksCisJMHhFNCwgMHgwNSwgMHhGQSwgMHgwNSwgMHgyNywgMHhEOCwgMHhGQSwgMHgwNSwKKwkweEU3LCAweDA3LCAweDBFLCAweDA2LCAweEZDLCAweDA1LCAweEU3LCAweDA3LAorCTB4NEUsIDB4MDYsIDB4MDAsIDB4MDYsIDB4RTcsIDB4MDcsIDB4NDAsIDB4MDAsCisJMHgwMiwgMHgwNiwgMHg5RiwgMHhBRiwgMHg2NiwgMHgwNSwgMHg5RiwgMHhBRiwKKwkweEM2LCAweDAwLCAweDk3LCAweENGLCAweEMxLCAweDBCLCAweEUyLCAweDA1LAorCTB4NDEsIDB4RDAsIDB4MDEsIDB4RDIsIDB4QzEsIDB4MTcsIDB4MjMsIDB4MDAsCisJMHg5RiwgMHhBRiwgMHhEQywgMHgwNCwgMHhDMCwgMHgwNywgMHgwNCwgMHgwMCwKKwkweEMxLCAweDBCLCAweEUzLCAweDA1LCAweDlGLCAweEFGLCAweDI4LCAweDA1LAorCTB4QzAsIDB4MDcsIDB4MDYsIDB4MDAsIDB4QzEsIDB4MDksIDB4RTYsIDB4MDUsCisJMHg5RiwgMHhBRiwgMHgyOCwgMHgwNSwgMHhDMCwgMHgwNywgMHgwNywgMHgwMCwKKwkweEMxLCAweDA5LCAweEU2LCAweDA1LCAweEMxLCAweEQxLCAweDlGLCAweEFGLAorCTB4MjgsIDB4MDUsIDB4QzAsIDB4MDcsIDB4MEIsIDB4MDAsIDB4QzEsIDB4MDksCisJMHhFOCwgMHgwNSwgMHg5RiwgMHhBRiwgMHgyOCwgMHgwNSwgMHhDMCwgMHgwNywKKwkweDBDLCAweDAwLCAweEMxLCAweDA5LCAweEU4LCAweDA1LCAweEMxLCAweEQxLAorCTB4OUYsIDB4QUYsIDB4MjgsIDB4MDUsIDB4QzAsIDB4MDcsIDB4MEQsIDB4MDAsCisJMHhDMSwgMHgwNywgMHgwOSwgMHgwMCwgMHg5RiwgMHhBRiwgMHgyOCwgMHgwNSwKKwkweEMwLCAweDA3LCAweDAzLCAweDAwLCAweEMxLCAweDA3LCAweDMyLCAweDAwLAorCTB4OUYsIDB4QUYsIDB4MjgsIDB4MDUsIDB4QzAsIDB4MDcsIDB4MEYsIDB4MDAsCisJMHhDMSwgMHgwNywgMHgwMCwgMHgwMCwgMHg5RiwgMHhBRiwgMHgyOCwgMHgwNSwKKwkweDk3LCAweENGLCAweEU3LCAweDY3LCAweEZGLCAweEQ5LCAweDI0LCAweEMwLAorCTB4QzgsIDB4MDcsIDB4MEEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4QzAsIDB4NjcsCisJMHgwMCwgMHgwMiwgMHgyNywgMHg4MCwgMHgyNCwgMHhDMCwgMHhFNywgMHg4NywKKwkweDAwLCAweDA0LCAweDI0LCAweEMwLCAweEU3LCAweDY3LCAweEZGLCAweEY5LAorCTB4MjQsIDB4QzAsIDB4MDEsIDB4RDIsIDB4MDgsIDB4REEsIDB4NzIsIDB4QzEsCisJMHhFNywgMHg4NywgMHgwMCwgMHgyMCwgMHgyNCwgMHhDMCwgMHg5NywgMHhDRiwKKwkweDI3LCAweDAwLCAweDFFLCAweEMwLCAweEU3LCAweDg3LCAweEZGLCAweDAwLAorCTB4MjIsIDB4QzAsIDB4RTcsIDB4NjcsIDB4N0YsIDB4RkYsIDB4MjQsIDB4QzAsCisJMHhFNywgMHg4NywgMHg4MCwgMHgwMCwgMHgyNCwgMHhDMCwgMHhFNywgMHg4NywKKwkweDgwLCAweDAwLCAweDI0LCAweEMwLCAweDk3LCAweENGLCAweDlGLCAweEFGLAorCTB4MEEsIDB4MDUsIDB4NjcsIDB4MDAsIDB4MUUsIDB4QzAsIDB4RTcsIDB4NjcsCisJMHhCRiwgMHhGRiwgMHgyNCwgMHhDMCwgMHhFNywgMHg4NywgMHg0MCwgMHgwMCwKKwkweDI0LCAweEMwLCAweEU3LCAweDg3LCAweDQwLCAweDAwLCAweDI0LCAweEMwLAorCTB4OTcsIDB4Q0YsIDB4OUYsIDB4QUYsIDB4MEEsIDB4MDUsIDB4RTcsIDB4NjcsCisJMHgwMCwgMHhGRiwgMHgyMiwgMHhDMCwgMHhFNywgMHg2NywgMHhGRiwgMHhGRSwKKwkweDI0LCAweEMwLCAweEU3LCAweDY3LCAweEZGLCAweEZFLCAweDI0LCAweEMwLAorCTB4QzEsIDB4MDksIDB4MjAsIDB4QzAsIDB4RTcsIDB4ODcsIDB4MDAsIDB4MDEsCisJMHgyNCwgMHhDMCwgMHg5NywgMHhDRiwgMHhDMCwgMHgwNywgMHg0MCwgMHgwMCwKKwkweEM4LCAweDA5LCAweEZDLCAweDA1LCAweEU3LCAweDY3LCAweDAwLCAweEZGLAorCTB4MjIsIDB4QzAsIDB4RTcsIDB4NjcsIDB4RkYsIDB4RkUsIDB4MjQsIDB4QzAsCisJMHhFNywgMHg2NywgMHhCRiwgMHhGRiwgMHgyNCwgMHhDMCwgMHhFNywgMHg2NywKKwkweEJGLCAweEZGLCAweDI0LCAweEMwLCAweDAwLCAweERBLCAweEU4LCAweDA5LAorCTB4MjAsIDB4QzAsIDB4RTcsIDB4ODcsIDB4NDAsIDB4MDAsIDB4MjQsIDB4QzAsCisJMHhFNywgMHg4NywgMHg0MCwgMHgwMCwgMHgyNCwgMHhDMCwgMHgwMCwgMHhEQSwKKwkweEU4LCAweDA5LCAweDIwLCAweEMwLCAweDZELCAweEMxLCAweEU3LCAweDg3LAorCTB4MDAsIDB4MDEsIDB4MjQsIDB4QzAsIDB4OTcsIDB4Q0YsIDB4RTcsIDB4MDcsCisJMHgzMiwgMHgwMCwgMHgxMiwgMHhDMCwgMHhFNywgMHg3NywgMHgwMCwgMHg4MCwKKwkweDEyLCAweEMwLCAweDdDLCAweEMwLCAweDk3LCAweENGLCAweEU3LCAweDA3LAorCTB4MjAsIDB4NEUsIDB4MTIsIDB4QzAsIDB4RTcsIDB4NzcsIDB4MDAsIDB4ODAsCisJMHgxMiwgMHhDMCwgMHg3QywgMHhDMCwgMHg5NywgMHhDRiwgMHgwOSwgMHgwMiwKKwkweDE5LCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDgwLCAweDk2LCAweDA5LAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwNywgMHgwNSwgMHg4MSwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgc2V0dXA1W10gPSB7CisJMHhCNiwgMHhDMywgMHgyRiwgMHgwMSwgMHgwMywgMHg2NCwgMHgwRSwgMHgwMCwKKwkweDE0LCAweDAwLCAweDFBLCAweDAwLCAweDIwLCAweDAwLCAweDI2LCAweDAwLAorCTB4NEEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NkEsIDB4MDAsIDB4OTIsIDB4MDAsCisJMHg5QSwgMHgwMCwgMHhBMCwgMHgwMCwgMHhCMiwgMHgwMCwgMHhCOCwgMHgwMCwKKwkweEJFLCAweDAwLCAweEMyLCAweDAwLCAweEM4LCAweDAwLCAweENFLCAweDAwLAorCTB4REMsIDB4MDAsIDB4REEsIDB4MDAsIDB4RTIsIDB4MDAsIDB4RTAsIDB4MDAsCisJMHhFOCwgMHgwMCwgMHhFNiwgMHgwMCwgMHhFRSwgMHgwMCwgMHhFQywgMHgwMCwKKwkweEYyLCAweDAwLCAweEY4LCAweDAwLCAweDAyLCAweDAxLCAweDBBLCAweDAxLAorCTB4MEUsIDB4MDEsIDB4MTIsIDB4MDEsIDB4MUUsIDB4MDEsIDB4MjIsIDB4MDEsCisJMHgyOCwgMHgwMSwgMHgyQywgMHgwMSwgMHgzMiwgMHgwMSwgMHgzNiwgMHgwMSwKKwkweDQ0LCAweDAxLCAweDUwLCAweDAxLCAweDVFLCAweDAxLCAweDcyLCAweDAxLAorCTB4NzYsIDB4MDEsIDB4N0EsIDB4MDEsIDB4ODAsIDB4MDEsIDB4ODgsIDB4MDEsCisJMHg4QywgMHgwMSwgMHg5NCwgMHgwMSwgMHg5QywgMHgwMSwgMHhBMCwgMHgwMSwKKwkweEE0LCAweDAxLCAweEFBLCAweDAxLCAweEIwLCAweDAxLCAweEI0LCAweDAxLAorCTB4QkEsIDB4MDEsIDB4RDAsIDB4MDEsIDB4REEsIDB4MDEsIDB4RjYsIDB4MDEsCisJMHhGQSwgMHgwMSwgMHgwMiwgMHgwMiwgMHgzNCwgMHgwMiwgMHgzQywgMHgwMiwKKwkweDQ0LCAweDAyLCAweDRBLCAweDAyLCAweDUwLCAweDAyLCAweDU2LCAweDAyLAorCTB4NzQsIDB4MDIsIDB4NzgsIDB4MDIsIDB4N0UsIDB4MDIsIDB4ODQsIDB4MDIsCisJMHg4QSwgMHgwMiwgMHg4OCwgMHgwMiwgMHg5MCwgMHgwMiwgMHg4RSwgMHgwMiwKKwkweDk0LCAweDAyLCAweEEyLCAweDAyLCAweEE4LCAweDAyLCAweEFFLCAweDAyLAorCTB4QjQsIDB4MDIsIDB4QkEsIDB4MDIsIDB4QjgsIDB4MDIsIDB4QzAsIDB4MDIsCisJMHhCRSwgMHgwMiwgMHhDNCwgMHgwMiwgMHhEMCwgMHgwMiwgMHhENCwgMHgwMiwKKwkweEUwLCAweDAyLCAweEU2LCAweDAyLCAweEVFLCAweDAyLCAweEY4LCAweDAyLAorCTB4RkMsIDB4MDIsIDB4MDYsIDB4MDMsIDB4MUUsIDB4MDMsIDB4MjQsIDB4MDMsCisJMHgyOCwgMHgwMywgMHgzMCwgMHgwMywgMHgyRSwgMHgwMywgMHgzQywgMHgwMywKKwkweDRBLCAweDAzLCAweDRFLCAweDAzLCAweDU0LCAweDAzLCAweDU4LCAweDAzLAorCTB4NUUsIDB4MDMsIDB4NjYsIDB4MDMsIDB4NkUsIDB4MDMsIDB4N0EsIDB4MDMsCisJMHg4NiwgMHgwMywgMHg4RSwgMHgwMywgMHg5NiwgMHgwMywgMHhCMiwgMHgwMywKKwkweEI4LCAweDAzLCAweEM2LCAweDAzLCAweENDLCAweDAzLCAweEQ0LCAweDAzLAorCTB4REEsIDB4MDMsIDB4RTgsIDB4MDMsIDB4RjQsIDB4MDMsIDB4RkMsIDB4MDMsCisJMHgwNCwgMHgwNCwgMHgyMCwgMHgwNCwgMHgyQSwgMHgwNCwgMHgzMiwgMHgwNCwKKwkweDM2LCAweDA0LCAweDNFLCAweDA0LCAweDQ0LCAweDA0LCAweDQyLCAweDA0LAorCTB4NDgsIDB4MDQsIDB4NEUsIDB4MDQsIDB4NEMsIDB4MDQsIDB4NTQsIDB4MDQsCisJMHg1MiwgMHgwNCwgMHg1QSwgMHgwNCwgMHg1RSwgMHgwNCwgMHg2MiwgMHgwNCwKKwkweDY4LCAweDA0LCAweDc0LCAweDA0LCAweDdDLCAweDA0LCAweDgwLCAweDA0LAorCTB4ODgsIDB4MDQsIDB4OEMsIDB4MDQsIDB4OTQsIDB4MDQsIDB4OUEsIDB4MDQsCisJMHhBMiwgMHgwNCwgMHhBNiwgMHgwNCwgMHhBRSwgMHgwNCwgMHhCNCwgMHgwNCwKKwkweEMwLCAweDA0LCAweENDLCAweDA0LCAweEQ4LCAweDA0LCAweDJBLCAweDA1LAorCTB4NDYsIDB4MDUsIDB4NkMsIDB4MDUsIDB4MDAsIDB4MDAKK307CisKKy8qIHJ2bWFsbG9jIC8gcnZmcmVlIGNvcGllZCBmcm9tIHVzYnZpZGVvLmMKKyAqCisgKiBOb3Qgc3VyZSB3aHkgdGhlc2UgYXJlIG5vdCB5ZXQgbm9uLXN0YXRpY3Mgd2hpY2ggSSBjYW4gcmVmZXJlbmNlIHRocm91Z2gKKyAqIHVzYnZpZGVvLmggdGhlIHNhbWUgYXMgaXQgaXMgaW4gMi40LjIwLiAgSSBiZXQgdGhpcyB3aWxsIGdldCBmaXhlZCBzb21ldGltZQorICogaW4gdGhlIGZ1dHVyZS4KKyAqIAorKi8KK3N0YXRpYyB2b2lkICpydm1hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdm9pZCAqbWVtOworCXVuc2lnbmVkIGxvbmcgYWRyOworCisJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CisJbWVtID0gdm1hbGxvY18zMihzaXplKTsKKwlpZiAoIW1lbSkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQobWVtLCAwLCBzaXplKTsgLyogQ2xlYXIgdGhlIHJhbSBvdXQsIG5vIGp1bmsgdG8gdGhlIHVzZXIgKi8KKwlhZHIgPSAodW5zaWduZWQgbG9uZykgbWVtOworCXdoaWxlIChzaXplID4gMCkgeworCQlTZXRQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7CisJCWFkciArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0KKworCXJldHVybiBtZW07Cit9CisKK3N0YXRpYyB2b2lkIHJ2ZnJlZSh2b2lkICptZW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkcjsKKworCWlmICghbWVtKQorCQlyZXR1cm47CisKKwlhZHIgPSAodW5zaWduZWQgbG9uZykgbWVtOworCXdoaWxlICgobG9uZykgc2l6ZSA+IDApIHsKKwkJQ2xlYXJQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7CisJCWFkciArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0KKwl2ZnJlZShtZW0pOworfQorCitzdHJ1Y3QgdmljYW1fY2FtZXJhIHsKKwl1MTYgc2h1dHRlcl9zcGVlZDsJLy8gY2FwdHVyZSBzaHV0dGVyIHNwZWVkCisJdTE2IGdhaW47CQkvLyBjYXB0dXJlIGdhaW4KKworCXU4ICpyYXdfaW1hZ2U7CQkvLyByYXcgZGF0YSBjYXB0dXJlZCBmcm9tIHRoZSBjYW1lcmEKKwl1OCAqZnJhbWVidWY7CQkvLyBwcm9jZXNzZWQgZGF0YSBpbiBSR0IyNCBmb3JtYXQKKwl1OCAqY250cmxidWY7CQkvLyBhcmVhIHVzZWQgdG8gc2VuZCBjb250cm9sIG1zZ3MKKworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsJLy8gdjRsIHZpZGVvIGRldmljZQorCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwkvLyB1c2IgZGV2aWNlCisKKwkvKiBndWFyZCBhZ2FpbnN0IHNpbXVsdGFuZW91cyBhY2Nlc3NlcyB0byB0aGUgY2FtZXJhICovCisJc3RydWN0IHNlbWFwaG9yZSBjYW1fbG9jazsKKworCWludCBpc19pbml0aWFsaXplZDsKKwl1OCBvcGVuX2NvdW50OworCXU4IGJ1bGtFbmRwb2ludDsKKwlpbnQgbmVlZHNEdW1teVJlYWQ7CisKKyNpZiBkZWZpbmVkKENPTkZJR19WSURFT19QUk9DX0ZTKQorCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19kaXI7CisjZW5kaWYKKworfTsKKworc3RhdGljIGludCB2aWNhbV9wcm9iZSggc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgdm9pZCB2aWNhbV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKK3N0YXRpYyB2b2lkIHJlYWRfZnJhbWUoc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtLCBpbnQgZnJhbWVudW0pOworc3RhdGljIHZvaWQgdmljYW1fZGVjb2RlX2NvbG9yKGNvbnN0IHU4ICosIHU4ICopOworCitzdGF0aWMgaW50IF9fc2VuZF9jb250cm9sX21zZyhzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0sCisJCQkgICAgICB1OCByZXF1ZXN0LAorCQkJICAgICAgdTE2IHZhbHVlLAorCQkJICAgICAgdTE2IGluZGV4LAorCQkJICAgICAgdW5zaWduZWQgY2hhciAqY3AsCisJCQkgICAgICB1MTYgc2l6ZSkKK3sKKwlpbnQgc3RhdHVzOworCisJLyogY3AgbXVzdCBiZSBtZW1vcnkgdGhhdCBoYXMgYmVlbiBhbGxvY2F0ZWQgYnkga21hbGxvYyAqLworCisJc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnKGNhbS0+dWRldiwKKwkJCQkgdXNiX3NuZGN0cmxwaXBlKGNhbS0+dWRldiwgMCksCisJCQkJIHJlcXVlc3QsCisJCQkJIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwKKwkJCQkgVVNCX1JFQ0lQX0RFVklDRSwgdmFsdWUsIGluZGV4LAorCQkJCSBjcCwgc2l6ZSwgMTAwMCk7CisKKwlzdGF0dXMgPSBtaW4oc3RhdHVzLCAwKTsKKworCWlmIChzdGF0dXMgPCAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkZhaWxlZCBzZW5kaW5nIGNvbnRyb2wgbWVzc2FnZSwgZXJyb3IgJWQuXG4iLAorCQkgICAgICAgc3RhdHVzKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHNlbmRfY29udHJvbF9tc2coc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtLAorCQkJICAgIHU4IHJlcXVlc3QsCisJCQkgICAgdTE2IHZhbHVlLAorCQkJICAgIHUxNiBpbmRleCwKKwkJCSAgICB1bnNpZ25lZCBjaGFyICpjcCwKKwkJCSAgICB1MTYgc2l6ZSkKK3sKKwlpbnQgc3RhdHVzID0gLUVOT0RFVjsKKwlkb3duKCZjYW0tPmNhbV9sb2NrKTsKKwlpZiAoY2FtLT51ZGV2KSB7CisJCXN0YXR1cyA9IF9fc2VuZF9jb250cm9sX21zZyhjYW0sIHJlcXVlc3QsIHZhbHVlLAorCQkJCQkgICAgaW5kZXgsIGNwLCBzaXplKTsKKwl9CisJdXAoJmNhbS0+Y2FtX2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CitzdGF0aWMgaW50Citpbml0aWFsaXplX2NhbWVyYShzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0pCit7CisJY29uc3Qgc3RydWN0IHsKKwkJdTggKmRhdGE7CisJCXUzMiBzaXplOworCX0gZmlybXdhcmVbXSA9IHsKKwkJeyAuZGF0YSA9IHNldHVwMSwgLnNpemUgPSBzaXplb2Yoc2V0dXAxKSB9LAorCQl7IC5kYXRhID0gc2V0dXAyLCAuc2l6ZSA9IHNpemVvZihzZXR1cDIpIH0sCisJCXsgLmRhdGEgPSBzZXR1cDMsIC5zaXplID0gc2l6ZW9mKHNldHVwMykgfSwKKwkJeyAuZGF0YSA9IHNldHVwNCwgLnNpemUgPSBzaXplb2Yoc2V0dXA0KSB9LAorCQl7IC5kYXRhID0gc2V0dXA1LCAuc2l6ZSA9IHNpemVvZihzZXR1cDUpIH0sCisJCXsgLmRhdGEgPSBzZXR1cDMsIC5zaXplID0gc2l6ZW9mKHNldHVwMykgfSwKKwkJeyAuZGF0YSA9IE5VTEwsIC5zaXplID0gMCB9CisJfTsKKworCWludCBlcnIsIGk7CisKKwlmb3IgKGkgPSAwLCBlcnIgPSAwOyBmaXJtd2FyZVtpXS5kYXRhICYmICFlcnI7IGkrKykgeworCQltZW1jcHkoY2FtLT5jbnRybGJ1ZiwgZmlybXdhcmVbaV0uZGF0YSwgZmlybXdhcmVbaV0uc2l6ZSk7CisKKwkJZXJyID0gc2VuZF9jb250cm9sX21zZyhjYW0sIDB4ZmYsIDAsIDAsCisJCQkJICAgICAgIGNhbS0+Y250cmxidWYsIGZpcm13YXJlW2ldLnNpemUpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQKK3NldF9jYW1lcmFfcG93ZXIoc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtLCBpbnQgc3RhdGUpCit7CisJaW50IHN0YXR1czsKKworCWlmICgoc3RhdHVzID0gc2VuZF9jb250cm9sX21zZyhjYW0sIDB4NTAsIHN0YXRlLCAwLCBOVUxMLCAwKSkgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJaWYgKHN0YXRlKSB7CisJCXNlbmRfY29udHJvbF9tc2coY2FtLCAweDU1LCAxLCAwLCBOVUxMLCAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordmljYW1faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBpb2N0bG5yLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl2b2lkIF9fdXNlciAqdXNlcl9hcmcgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCByZXR2YWwgPSAwOworCisJaWYgKCFjYW0pCisJCXJldHVybiAtRU5PREVWOworCisJc3dpdGNoIChpb2N0bG5yKSB7CisJCS8qIHF1ZXJ5IGNhcGFiaWxpdGllcyAqLworCWNhc2UgVklESU9DR0NBUDoKKwkJeworCQkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgYjsKKworCQkJREJHKCJWSURJT0NHQ0FQXG4iKTsKKwkJCW1lbXNldCgmYiwgMCwgc2l6ZW9mKGIpKTsKKwkJCXN0cmNweShiLm5hbWUsICJWaUNhbS1iYXNlZCBDYW1lcmEiKTsKKwkJCWIudHlwZSA9IFZJRF9UWVBFX0NBUFRVUkU7CisJCQliLmNoYW5uZWxzID0gMTsKKwkJCWIuYXVkaW9zID0gMDsKKwkJCWIubWF4d2lkdGggPSAzMjA7CS8qIFZJREVPU0laRV9DSUYgKi8KKwkJCWIubWF4aGVpZ2h0ID0gMjQwOworCQkJYi5taW53aWR0aCA9IDMyMDsJLyogVklERU9TSVpFXzQ4XzQ4ICovCisJCQliLm1pbmhlaWdodCA9IDI0MDsKKworCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgJmIsIHNpemVvZihiKSkpCisJCQkJcmV0dmFsID0gLUVGQVVMVDsKKworCQkJYnJlYWs7CisJCX0KKwkJLyogZ2V0L3NldCB2aWRlbyBzb3VyY2UgLSB3ZSBhcmUgYSBjYW1lcmEgYW5kIG5vdGhpbmcgZWxzZSAqLworCWNhc2UgVklESU9DR0NIQU46CisJCXsKKwkJCXN0cnVjdCB2aWRlb19jaGFubmVsIHY7CisKKwkJCURCRygiVklESU9DR0NIQU5cbiIpOworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2LCB1c2VyX2FyZywgc2l6ZW9mKHYpKSkgeworCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAodi5jaGFubmVsICE9IDApIHsKKwkJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJCWJyZWFrOworCQkJfQorCisJCQl2LmNoYW5uZWwgPSAwOworCQkJc3RyY3B5KHYubmFtZSwgIkNhbWVyYSIpOworCQkJdi50dW5lcnMgPSAwOworCQkJdi5mbGFncyA9IDA7CisJCQl2LnR5cGUgPSBWSURFT19UWVBFX0NBTUVSQTsKKwkJCXYubm9ybSA9IDA7CisKKwkJCWlmIChjb3B5X3RvX3VzZXIodXNlcl9hcmcsICZ2LCBzaXplb2YodikpKQorCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBWSURJT0NTQ0hBTjoKKwkJeworCQkJaW50IHY7CisKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmdiwgdXNlcl9hcmcsIHNpemVvZih2KSkpCisJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCURCRygiVklESU9DU0NIQU4gJWRcbiIsIHYpOworCisJCQlpZiAocmV0dmFsID09IDAgJiYgdiAhPSAwKQorCQkJCXJldHZhbCA9IC1FSU5WQUw7CisKKwkJCWJyZWFrOworCQl9CisKKwkJLyogaW1hZ2UgcHJvcGVydGllcyAqLworCWNhc2UgVklESU9DR1BJQ1Q6CisJCXsKKwkJCXN0cnVjdCB2aWRlb19waWN0dXJlIHZwOworCQkJREJHKCJWSURJT0NHUElDVFxuIik7CisJCQltZW1zZXQoJnZwLCAwLCBzaXplb2YgKHN0cnVjdCB2aWRlb19waWN0dXJlKSk7CisJCQl2cC5icmlnaHRuZXNzID0gY2FtLT5nYWluIDw8IDg7CisJCQl2cC5kZXB0aCA9IDI0OworCQkJdnAucGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfUkdCMjQ7CisJCQlpZiAoY29weV90b191c2VyKHVzZXJfYXJnLCAmdnAsIHNpemVvZiAoc3RydWN0IHZpZGVvX3BpY3R1cmUpKSkKKwkJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgVklESU9DU1BJQ1Q6CisJCXsKKwkJCXN0cnVjdCB2aWRlb19waWN0dXJlIHZwOworCQkJCisJCQlpZiAoY29weV9mcm9tX3VzZXIoJnZwLCB1c2VyX2FyZywgc2l6ZW9mKHZwKSkpIHsKKwkJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJCWJyZWFrOworCQkJfQorCQkJCisJCQlEQkcoIlZJRElPQ1NQSUNUIGRlcHRoID0gJWQsIHBhbCA9ICVkXG4iLCB2cC5kZXB0aCwKKwkJCSAgICB2cC5wYWxldHRlKTsKKworCQkJY2FtLT5nYWluID0gdnAuYnJpZ2h0bmVzcyA+PiA4OworCisJCQlpZiAodnAuZGVwdGggIT0gMjQKKwkJCSAgICB8fCB2cC5wYWxldHRlICE9IFZJREVPX1BBTEVUVEVfUkdCMjQpCisJCQkJcmV0dmFsID0gLUVJTlZBTDsKKworCQkJYnJlYWs7CisJCX0KKworCQkvKiBnZXQvc2V0IGNhcHR1cmUgd2luZG93ICovCisJY2FzZSBWSURJT0NHV0lOOgorCQl7CisJCQlzdHJ1Y3QgdmlkZW9fd2luZG93IHZ3OworCQkJdncueCA9IDA7CisJCQl2dy55ID0gMDsKKwkJCXZ3LndpZHRoID0gMzIwOworCQkJdncuaGVpZ2h0ID0gMjQwOworCQkJdncuY2hyb21ha2V5ID0gMDsKKwkJCXZ3LmZsYWdzID0gMDsKKwkJCXZ3LmNsaXBzID0gTlVMTDsKKwkJCXZ3LmNsaXBjb3VudCA9IDA7CisKKwkJCURCRygiVklESU9DR1dJTlxuIik7CisKKwkJCWlmIChjb3B5X3RvX3VzZXIodXNlcl9hcmcsICh2b2lkICopJnZ3LCBzaXplb2YodncpKSkKKwkJCQlyZXR2YWwgPSAtRUZBVUxUOworCisJCQkvLyBJJ20gbm90IHN1cmUgd2hhdCB0aGUgZGVhbCB3aXRoIGEgY2FwdHVyZSB3aW5kb3cgaXMsIGl0IGlzIHZlcnkgcG9vcmx5IGRlc2NyaWJlZAorCQkJLy8gaW4gdGhlIGRvYy4gIFNvIEkgd29uJ3Qgc3VwcG9ydCBpdCBub3cuCisJCQlicmVhazsKKwkJfQorCisJY2FzZSBWSURJT0NTV0lOOgorCQl7CisKKwkJCXN0cnVjdCB2aWRlb193aW5kb3cgdnc7CisKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmdncsIHVzZXJfYXJnLCBzaXplb2YodncpKSkgeworCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCURCRygiVklESU9DU1dJTiAlZCB4ICVkXG4iLCB2dy53aWR0aCwgdncuaGVpZ2h0KTsKKwkJCQorCQkJaWYgKCB2dy53aWR0aCAhPSAzMjAgfHwgdncuaGVpZ2h0ICE9IDI0MCApCisJCQkJcmV0dmFsID0gLUVGQVVMVDsKKworCQkJYnJlYWs7CisJCX0KKworCQkvKiBtbWFwIGludGVyZmFjZSAqLworCWNhc2UgVklESU9DR01CVUY6CisJCXsKKwkJCXN0cnVjdCB2aWRlb19tYnVmIHZtOworCQkJaW50IGk7CisKKwkJCURCRygiVklESU9DR01CVUZcbiIpOworCQkJbWVtc2V0KCZ2bSwgMCwgc2l6ZW9mICh2bSkpOworCQkJdm0uc2l6ZSA9CisJCQkgICAgVklDQU1fTUFYX0ZSQU1FX1NJWkUgKiBWSUNBTV9GUkFNRVM7CisJCQl2bS5mcmFtZXMgPSBWSUNBTV9GUkFNRVM7CisJCQlmb3IgKGkgPSAwOyBpIDwgVklDQU1fRlJBTUVTOyBpKyspCisJCQkJdm0ub2Zmc2V0c1tpXSA9IFZJQ0FNX01BWF9GUkFNRV9TSVpFICogaTsKKworCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgKHZvaWQgKikmdm0sIHNpemVvZih2bSkpKQorCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIFZJRElPQ01DQVBUVVJFOgorCQl7CisJCQlzdHJ1Y3QgdmlkZW9fbW1hcCB2bTsKKwkJCS8vIGludCB2aWRlb19zaXplOworCisJCQlpZiAoY29weV9mcm9tX3VzZXIoKHZvaWQgKikmdm0sIHVzZXJfYXJnLCBzaXplb2Yodm0pKSkgeworCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCURCRygiVklESU9DTUNBUFRVUkUgZnJhbWU9JWQsIGhlaWdodD0lZCwgd2lkdGg9JWQsIGZvcm1hdD0lZC5cbiIsdm0uZnJhbWUsdm0ud2lkdGgsdm0uaGVpZ2h0LHZtLmZvcm1hdCk7CisKKwkJCWlmICggdm0uZnJhbWUgPj0gVklDQU1fRlJBTUVTIHx8IHZtLmZvcm1hdCAhPSBWSURFT19QQUxFVFRFX1JHQjI0ICkKKwkJCQlyZXR2YWwgPSAtRUlOVkFMOworCisJCQkvLyBpbiB0aGVvcnkgcmlnaHQgaGVyZSB3ZSdkIHN0YXJ0IHRoZSBpbWFnZSBjYXB0dXJpbmcKKwkJCS8vIChmaWxsIGluIGEgYnVsayB1cmIgYW5kIHN1Ym1pdCBpdCBhc3luY2hyb25vdXNseSkKKwkJCS8vCisJCQkvLyBJbnN0ZWFkIHdlJ3JlIGdvaW5nIHRvIGRvIGEgdG90YWwgaGFjayBqb2IgZm9yIG5vdyBhbmQKKwkJCS8vIHJldHJpZXZlIHRoZSBmcmFtZSBpbiBWSURJT0NTWU5DCisKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIFZJRElPQ1NZTkM6CisJCXsKKwkJCWludCBmcmFtZTsKKworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCh2b2lkICopJmZyYW1lLCB1c2VyX2FyZywgc2l6ZW9mKGludCkpKSB7CisJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCURCRygiVklESU9DU1lOQzogJWRcbiIsIGZyYW1lKTsKKworCQkJcmVhZF9mcmFtZShjYW0sIGZyYW1lKTsKKwkJCXZpY2FtX2RlY29kZV9jb2xvcihjYW0tPnJhd19pbWFnZSwKKwkJCQkJICAgY2FtLT5mcmFtZWJ1ZiArCisJCQkJCSAgIGZyYW1lICogVklDQU1fTUFYX0ZSQU1FX1NJWkUgKTsKKworCQkJYnJlYWs7CisJCX0KKworCQkvKiBwb2ludGxlc3MgdG8gaW1wbGVtZW50IG92ZXJsYXkgd2l0aCB0aGlzIGNhbWVyYSAqLworCWNhc2UgVklESU9DQ0FQVFVSRToKKwljYXNlIFZJRElPQ0dGQlVGOgorCWNhc2UgVklESU9DU0ZCVUY6CisJY2FzZSBWSURJT0NLRVk6CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWJyZWFrOworCisJCS8qIHR1bmVyIGludGVyZmFjZSAtIHdlIGhhdmUgbm9uZSAqLworCWNhc2UgVklESU9DR1RVTkVSOgorCWNhc2UgVklESU9DU1RVTkVSOgorCWNhc2UgVklESU9DR0ZSRVE6CisJY2FzZSBWSURJT0NTRlJFUToKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJYnJlYWs7CisKKwkJLyogYXVkaW8gaW50ZXJmYWNlIC0gd2UgaGF2ZSBub25lICovCisJY2FzZSBWSURJT0NHQVVESU86CisJY2FzZSBWSURJT0NTQVVESU86CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHZhbCA9IC1FTk9JT0NUTENNRDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludAordmljYW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSA9CisJICAgIChzdHJ1Y3QgdmljYW1fY2FtZXJhICopIGRldi0+cHJpdjsKKwlEQkcoIm9wZW5cbiIpOworCisJaWYgKCFjYW0pIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAidmljYW0gdmlkZW9fZGV2aWNlIGltcHJvcGVybHkgaW5pdGlhbGl6ZWQiKTsKKwl9CisKKwkvKiB0aGUgdmlkZW9kZXZfbG9jayBoZWxkIGFib3ZlIHVzIHByb3RlY3RzIHVzIGZyb20KKwkgKiBzaW11bHRhbmVvdXMgb3BlbnMuLi5mb3Igbm93LiB3ZSBwcm9iYWJseSBzaG91bGRuJ3QKKwkgKiByZWx5IG9uIHRoaXMgZmFjdCBmb3JldmVyLgorCSAqLworCisJaWYgKGNhbS0+b3Blbl9jb3VudCA+IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgInZpY2FtX29wZW4gY2FsbGVkIG9uIGFscmVhZHkgb3BlbmVkIGNhbWVyYSIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWNhbS0+cmF3X2ltYWdlID0ga21hbGxvYyhWSUNBTV9NQVhfUkVBRF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhbS0+cmF3X2ltYWdlKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWNhbS0+ZnJhbWVidWYgPSBydm1hbGxvYyhWSUNBTV9NQVhfRlJBTUVfU0laRSAqIFZJQ0FNX0ZSQU1FUyk7CisJaWYgKCFjYW0tPmZyYW1lYnVmKSB7CisJCWtmcmVlKGNhbS0+cmF3X2ltYWdlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY2FtLT5jbnRybGJ1ZiA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhbS0+Y250cmxidWYpIHsKKwkJa2ZyZWUoY2FtLT5yYXdfaW1hZ2UpOworCQlydmZyZWUoY2FtLT5mcmFtZWJ1ZiwgVklDQU1fTUFYX0ZSQU1FX1NJWkUgKiBWSUNBTV9GUkFNRVMpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvLyBGaXJzdCB1cGxvYWQgZmlybXdhcmUsIHRoZW4gdHVybiB0aGUgY2FtZXJhIG9uCisKKwlpZiAoIWNhbS0+aXNfaW5pdGlhbGl6ZWQpIHsKKwkJaW5pdGlhbGl6ZV9jYW1lcmEoY2FtKTsKKworCQljYW0tPmlzX2luaXRpYWxpemVkID0gMTsKKwl9CisKKwlzZXRfY2FtZXJhX3Bvd2VyKGNhbSwgMSk7CisKKwljYW0tPm5lZWRzRHVtbXlSZWFkID0gMTsKKwljYW0tPm9wZW5fY291bnQrKzsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGNhbTsJCisJCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgCit2aWNhbV9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IG9wZW5fY291bnQ7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisKKwlEQkcoImNsb3NlXG4iKTsKKworCS8qIGl0J3Mgbm90IHRoZSBlbmQgb2YgdGhlIHdvcmxkIGlmCisJICogd2UgZmFpbCB0byB0dXJuIHRoZSBjYW1lcmEgb2ZmLgorCSAqLworCisJc2V0X2NhbWVyYV9wb3dlcihjYW0sIDApOworCisJa2ZyZWUoY2FtLT5yYXdfaW1hZ2UpOworCXJ2ZnJlZShjYW0tPmZyYW1lYnVmLCBWSUNBTV9NQVhfRlJBTUVfU0laRSAqIFZJQ0FNX0ZSQU1FUyk7CisJa2ZyZWUoY2FtLT5jbnRybGJ1Zik7CisKKwlkb3duKCZjYW0tPmNhbV9sb2NrKTsKKworCWNhbS0+b3Blbl9jb3VudC0tOworCW9wZW5fY291bnQgPSBjYW0tPm9wZW5fY291bnQ7CisJdWRldiA9IGNhbS0+dWRldjsKKworCXVwKCZjYW0tPmNhbV9sb2NrKTsKKworCWlmICghb3Blbl9jb3VudCAmJiAhdWRldikgeworCQlrZnJlZShjYW0pOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2aWNhbV9kZWNvZGVfY29sb3IoY29uc3QgdTggKmRhdGEsIHU4ICpyZ2IpCit7CisJLyogdmljYW1fZGVjb2RlX2NvbG9yIC0gQ29udmVydCBmcm9tIFZpY2FtIFktQ3ItQ2IgdG8gUkdCCisJICogQ29weXJpZ2h0IChDKSAyMDAyIE1vbnJvZSBXaWxsaWFtcyAobW9ucm9lQHBvYm94LmNvbSkKKwkgKi8KKworCWludCBpLCBwcmV2WSwgbmV4dFk7CisKKwlwcmV2WSA9IDUxMjsKKwluZXh0WSA9IDUxMjsKKworCWRhdGEgKz0gVklDQU1fSEVBREVSX1NJWkU7CisKKwlmb3IoIGkgPSAwOyBpIDwgMjQwOyBpKyssIGRhdGEgKz0gNTEyICkgeworCQljb25zdCBpbnQgeSA9ICggaSAqIDI0MiApIC8gMjQwOworCisJCWludCBqLCBwcmV2WCwgbmV4dFg7CisJCWludCBZLCBDciwgQ2I7CisKKwkJaWYgKCB5ID09IDI0MiAtIDEgKSB7CisJCQluZXh0WSA9IC01MTI7CisJCX0KKworCQlwcmV2WCA9IDE7CisJCW5leHRYID0gMTsKKworCQlmb3IgKCBqID0gMDsgaiA8IDMyMDsgaisrLCByZ2IgKz0gMyApIHsKKwkJCWNvbnN0IGludCB4ID0gKCBqICogNTEyICkgLyAzMjA7CisJCQljb25zdCB1OCAqIGNvbnN0IHNyYyA9ICZkYXRhW3hdOworCisJCQlpZiAoIHggPT0gNTEyIC0gMSApIHsKKwkJCQluZXh0WCA9IC0xOworCQkJfQorCisJCQlDciA9ICggc3JjW3ByZXZYXSAtIHNyY1swXSApICsKKwkJCQkoIHNyY1tuZXh0WF0gLSBzcmNbMF0gKTsKKwkJCUNyIC89IDI7CisKKwkJCUNiID0gKCBzcmNbcHJldlldIC0gc3JjW3ByZXZYICsgcHJldlldICkgKworCQkJCSggc3JjW3ByZXZZXSAtIHNyY1tuZXh0WCArIHByZXZZXSApICsKKwkJCQkoIHNyY1tuZXh0WV0gLSBzcmNbcHJldlggKyBuZXh0WV0gKSArCisJCQkJKCBzcmNbbmV4dFldIC0gc3JjW25leHRYICsgbmV4dFldICk7CisJCQlDYiAvPSA0OworCisJCQlZID0gMTE2MCAqICggc3JjWzBdICsgKCBDciAvIDIgKSAtIDE2ICk7CisKKwkJCWlmICggaSAmIDEgKSB7CisJCQkJaW50IEN0ID0gQ3I7CisJCQkJQ3IgPSBDYjsKKwkJCQlDYiA9IEN0OworCQkJfQorCisJCQlpZiAoICggeCBeIGkgKSAmIDEgKSB7CisJCQkJQ3IgPSAtQ3I7CisJCQkJQ2IgPSAtQ2I7CisJCQl9CisKKwkJCXJnYlswXSA9IGNsYW1wKCAoICggWSArICggMjAxNyAqIENiICkgKSArCisJCQkJCTUwMCApIC8gOTAwLCAwLCAyNTUgKTsKKwkJCXJnYlsxXSA9IGNsYW1wKCAoICggWSAtICggMzkyICogQ2IgKSAtCisJCQkJCSAgKCA4MTMgKiBDciApICkgKworCQkJCQkgIDUwMCApIC8gMTAwMCwgMCwgMjU1ICk7CisJCQlyZ2JbMl0gPSBjbGFtcCggKCAoIFkgKyAoIDE1OTQgKiBDciApICkgKworCQkJCQk1MDAgKSAvIDEzMDAsIDAsIDI1NSApOworCisJCQlwcmV2WCA9IC0xOworCQl9CisKKwkJcHJldlkgPSAtNTEyOworCX0KK30KKworc3RhdGljIHZvaWQKK3JlYWRfZnJhbWUoc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtLCBpbnQgZnJhbWVudW0pCit7CisJdW5zaWduZWQgY2hhciAqcmVxdWVzdCA9IGNhbS0+Y250cmxidWY7CisJaW50IHJlYWxTaHV0dGVyOworCWludCBuOworCWludCBhY3R1YWxfbGVuZ3RoOworCisJaWYgKGNhbS0+bmVlZHNEdW1teVJlYWQpIHsKKwkJY2FtLT5uZWVkc0R1bW15UmVhZCA9IDA7CisJCXJlYWRfZnJhbWUoY2FtLCBmcmFtZW51bSk7CisJfQorCisJbWVtc2V0KHJlcXVlc3QsIDAsIDE2KTsKKwlyZXF1ZXN0WzBdID0gY2FtLT5nYWluOwkvLyAwID0gMCUgZ2FpbiwgRkYgPSAxMDAlIGdhaW4KKworCXJlcXVlc3RbMV0gPSAwOwkvLyA1MTJ4MjQyIGNhcHR1cmUKKworCXJlcXVlc3RbMl0gPSAweDkwOwkvLyB0aGUgZnVuY3Rpb24gb2YgdGhlc2UgdHdvIGJ5dGVzCisJcmVxdWVzdFszXSA9IDB4MDc7CS8vIGlzIG5vdCB5ZXQgdW5kZXJzdG9vZAorCisJaWYgKGNhbS0+c2h1dHRlcl9zcGVlZCA+IDYwKSB7CisJCS8vIFNob3J0IGV4cG9zdXJlCisJCXJlYWxTaHV0dGVyID0KKwkJICAgICgoLTE1NjMxOTAwIC8gY2FtLT5zaHV0dGVyX3NwZWVkKSArIDI2MDUzMykgLyAxMDAwOworCQlyZXF1ZXN0WzRdID0gcmVhbFNodXR0ZXIgJiAweEZGOworCQlyZXF1ZXN0WzVdID0gKHJlYWxTaHV0dGVyID4+IDgpICYgMHhGRjsKKwkJcmVxdWVzdFs2XSA9IDB4MDM7CisJCXJlcXVlc3RbN10gPSAweDAxOworCX0gZWxzZSB7CisJCS8vIExvbmcgZXhwb3N1cmUKKwkJcmVhbFNodXR0ZXIgPSAxNTYwMCAvIGNhbS0+c2h1dHRlcl9zcGVlZCAtIDE7CisJCXJlcXVlc3RbNF0gPSAwOworCQlyZXF1ZXN0WzVdID0gMDsKKwkJcmVxdWVzdFs2XSA9IHJlYWxTaHV0dGVyICYgMHhGRjsKKwkJcmVxdWVzdFs3XSA9IHJlYWxTaHV0dGVyID4+IDg7CisJfQorCisJLy8gUGVyIEpvaG4gTWFya3VzIEJq+HJuZGFsZW4sIGJ5dGUgYXQgaW5kZXggOCBjYXVzZXMgcHJvYmxlbXMgaWYgaXQgaXNuJ3QgMAorCXJlcXVlc3RbOF0gPSAwOworCS8vIGJ5dGVzIDktMTUgZG8gbm90IHNlZW0gdG8gYWZmZWN0IGV4cG9zdXJlIG9yIGltYWdlIHF1YWxpdHkKKworCWRvd24oJmNhbS0+Y2FtX2xvY2spOworCisJaWYgKCFjYW0tPnVkZXYpIHsKKwkJZ290byBkb25lOworCX0KKworCW4gPSBfX3NlbmRfY29udHJvbF9tc2coY2FtLCAweDUxLCAweDgwLCAwLCByZXF1ZXN0LCAxNik7CisKKwlpZiAobiA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiIFByb2JsZW0gc2VuZGluZyBmcmFtZSBjYXB0dXJlIGNvbnRyb2wgbWVzc2FnZSIpOworCQlnb3RvIGRvbmU7CisJfQorCisJbiA9IHVzYl9idWxrX21zZyhjYW0tPnVkZXYsCisJCQkgdXNiX3JjdmJ1bGtwaXBlKGNhbS0+dWRldiwgY2FtLT5idWxrRW5kcG9pbnQpLAorCQkJIGNhbS0+cmF3X2ltYWdlLAorCQkJIDUxMiAqIDI0MiArIDEyOCwgJmFjdHVhbF9sZW5ndGgsIDEwMDAwKTsKKworCWlmIChuIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIlByb2JsZW0gZHVyaW5nIGJ1bGsgcmVhZCBvZiBmcmFtZSBkYXRhOiAlZFxuIiwKKwkJICAgICAgIG4pOworCX0KKworIGRvbmU6CisJdXAoJmNhbS0+Y2FtX2xvY2spOworfQorCitzdGF0aWMgc3NpemVfdAordmljYW1fcmVhZCggc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zICkKK3sKKwlzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlEQkcoInJlYWQgJWQgYnl0ZXMuXG4iLCAoaW50KSBjb3VudCk7CisKKwlpZiAoKnBwb3MgPj0gVklDQU1fTUFYX0ZSQU1FX1NJWkUpIHsKKwkJKnBwb3MgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKnBwb3MgPT0gMCkgeworCQlyZWFkX2ZyYW1lKGNhbSwgMCk7CisJCXZpY2FtX2RlY29kZV9jb2xvcihjYW0tPnJhd19pbWFnZSwKKwkJCQkgICBjYW0tPmZyYW1lYnVmICsKKwkJCQkgICAwICogVklDQU1fTUFYX0ZSQU1FX1NJWkUpOworCX0KKworCWNvdW50ID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgVklDQU1fTUFYX0ZSQU1FX1NJWkUgLSAqcHBvcyk7CisKKwlpZiAoY29weV90b191c2VyKGJ1ZiwgJmNhbS0+ZnJhbWVidWZbKnBwb3NdLCBjb3VudCkpIHsKKwkJY291bnQgPSAtRUZBVUxUOworCX0gZWxzZSB7CisJCSpwcG9zICs9IGNvdW50OworCX0KKworCWlmIChjb3VudCA9PSBWSUNBTV9NQVhfRlJBTUVfU0laRSkgeworCQkqcHBvcyA9IDA7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCisKK3N0YXRpYyBpbnQKK3ZpY2FtX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCS8vIFRPRE86IGFsbG9jYXRlIHRoZSByYXcgZnJhbWUgYnVmZmVyIGlmIG5lY2Vzc2FyeQorCXVuc2lnbmVkIGxvbmcgcGFnZSwgcG9zOworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgc2l6ZSAgPSB2bWEtPnZtX2VuZC12bWEtPnZtX3N0YXJ0OworCXN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmICghY2FtKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCURCRygidmljYW1fbW1hcDogJWxkXG4iLCBzaXplKTsKKworCS8qIFdlIGxldCBtbWFwIGFsbG9jYXRlIGFzIG11Y2ggYXMgaXQgd2FudHMgYmVjYXVzZSBMaW51eCB3YXMgYWRkaW5nIDIwNDggYnl0ZXMKKwkgKiB0byB0aGUgc2l6ZSB0aGUgYXBwbGljYXRpb24gcmVxdWVzdGVkIGZvciBtbWFwIGFuZCBpdCB3YXMgc2NyZXdpbmcgYXBwcyB1cC4KKwkgaWYgKHNpemUgPiBWSUNBTV9GUkFNRVMqVklDQU1fTUFYX0ZSQU1FX1NJWkUpCisJIHJldHVybiAtRUlOVkFMOworCSAqLworCisJcG9zID0gKHVuc2lnbmVkIGxvbmcpY2FtLT5mcmFtZWJ1ZjsKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJcGFnZSA9IHZtYWxsb2NfdG9fcGZuKCh2b2lkICopcG9zKTsKKwkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwYWdlLCBQQUdFX1NJWkUsIFBBR0VfU0hBUkVEKSkKKwkJCXJldHVybiAtRUFHQUlOOworCisJCXN0YXJ0ICs9IFBBR0VfU0laRTsKKwkJcG9zICs9IFBBR0VfU0laRTsKKwkJaWYgKHNpemUgPiBQQUdFX1NJWkUpCisJCQlzaXplIC09IFBBR0VfU0laRTsKKwkJZWxzZQorCQkJc2l6ZSA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19WSURFT19QUk9DX0ZTKQorCitzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICp2aWNhbV9wcm9jX3Jvb3QgPSBOVUxMOworCitzdGF0aWMgaW50IHZpY2FtX3JlYWRfaGVscGVyKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAorCQkJCWludCBjb3VudCwgaW50ICplb2YsIGludCB2YWx1ZSkKK3sKKwljaGFyICpvdXQgPSBwYWdlOworCWludCBsZW47CisKKwlvdXQgKz0gc3ByaW50ZihvdXQsICIlZCIsdmFsdWUpOworCisJbGVuID0gb3V0IC0gcGFnZTsKKwlsZW4gLT0gb2ZmOworCWlmIChsZW4gPCBjb3VudCkgeworCQkqZW9mID0gMTsKKwkJaWYgKGxlbiA8PSAwKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlCisJCWxlbiA9IGNvdW50OworCisJKnN0YXJ0ID0gcGFnZSArIG9mZjsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IHZpY2FtX3JlYWRfcHJvY19zaHV0dGVyKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAorCQkJCWludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIHZpY2FtX3JlYWRfaGVscGVyKHBhZ2Usc3RhcnQsb2ZmLGNvdW50LGVvZiwKKwkJCQkoKHN0cnVjdCB2aWNhbV9jYW1lcmEgKilkYXRhKS0+c2h1dHRlcl9zcGVlZCk7Cit9CisKK3N0YXRpYyBpbnQgdmljYW1fcmVhZF9wcm9jX2dhaW4oY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCisJCQkJaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gdmljYW1fcmVhZF9oZWxwZXIocGFnZSxzdGFydCxvZmYsY291bnQsZW9mLAorCQkJCSgoc3RydWN0IHZpY2FtX2NhbWVyYSAqKWRhdGEpLT5nYWluKTsKK30KKworc3RhdGljIGludAordmljYW1fd3JpdGVfcHJvY19zaHV0dGVyKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWZmZXIsCisJCQkgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3sKKwl1MTYgc3RtcDsKKwljaGFyIGtidWZbOF07CisJc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtID0gKHN0cnVjdCB2aWNhbV9jYW1lcmEgKikgZGF0YTsKKworCWlmIChjb3VudCA+IDYpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGtidWYsIGJ1ZmZlciwgY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXN0bXAgPSAodTE2KSBzaW1wbGVfc3RydG91bChrYnVmLCBOVUxMLCAxMCk7CisJaWYgKHN0bXAgPCA0IHx8IHN0bXAgPiAzMjAwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljYW0tPnNodXR0ZXJfc3BlZWQgPSBzdG1wOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50Cit2aWNhbV93cml0ZV9wcm9jX2dhaW4oc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3sKKwl1MTYgZ3RtcDsKKwljaGFyIGtidWZbOF07CisKKwlzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0gPSAoc3RydWN0IHZpY2FtX2NhbWVyYSAqKSBkYXRhOworCisJaWYgKGNvdW50ID4gNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoa2J1ZiwgYnVmZmVyLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJZ3RtcCA9ICh1MTYpIHNpbXBsZV9zdHJ0b3VsKGtidWYsIE5VTEwsIDEwKTsKKwlpZiAoZ3RtcCA+IDI1NSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FtLT5nYWluID0gZ3RtcDsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHZvaWQKK3ZpY2FtX2NyZWF0ZV9wcm9jX3Jvb3Qodm9pZCkKK3sKKwl2aWNhbV9wcm9jX3Jvb3QgPSBjcmVhdGVfcHJvY19lbnRyeSgidmlkZW8vdmljYW0iLCBTX0lGRElSLCAwKTsKKworCWlmICh2aWNhbV9wcm9jX3Jvb3QpCisJCXZpY2FtX3Byb2Nfcm9vdC0+b3duZXIgPSBUSElTX01PRFVMRTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgImNvdWxkIG5vdCBjcmVhdGUgL3Byb2MgZW50cnkgZm9yIHZpY2FtISIpOworfQorCitzdGF0aWMgdm9pZAordmljYW1fZGVzdHJveV9wcm9jX3Jvb3Qodm9pZCkKK3sKKwlpZiAodmljYW1fcHJvY19yb290KQorCQlyZW1vdmVfcHJvY19lbnRyeSgidmlkZW8vdmljYW0iLCAwKTsKK30KKworc3RhdGljIHZvaWQKK3ZpY2FtX2NyZWF0ZV9wcm9jX2VudHJ5KHN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSkKK3sKKwljaGFyIG5hbWVbNjRdOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50OworCisJREJHKEtFUk5fSU5GTyAidmljYW06IGNyZWF0aW5nIHByb2MgZW50cnlcbiIpOworCisJaWYgKCF2aWNhbV9wcm9jX3Jvb3QgfHwgIWNhbSkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAidmljYW06IGNvdWxkIG5vdCBjcmVhdGUgcHJvYyBlbnRyeSwgJXMgcG9pbnRlciBpcyBudWxsLlxuIiwKKwkJICAgICAgICghY2FtID8gImNhbWVyYSIgOiAicm9vdCIpKTsKKwkJcmV0dXJuOworCX0KKworCXNwcmludGYobmFtZSwgInZpZGVvJWQiLCBjYW0tPnZkZXYubWlub3IpOworCisJY2FtLT5wcm9jX2RpciA9IGNyZWF0ZV9wcm9jX2VudHJ5KG5hbWUsIFNfSUZESVIsIHZpY2FtX3Byb2Nfcm9vdCk7CisKKwlpZiAoICFjYW0tPnByb2NfZGlyICkKKwkJcmV0dXJuOyAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IHJldHVybiBhbiBlcnJvciBoZXJlCisJCisJZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoInNodXR0ZXIiLCBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkJY2FtLT5wcm9jX2Rpcik7CisJaWYgKGVudCkgeworCQllbnQtPmRhdGEgPSBjYW07CisJCWVudC0+cmVhZF9wcm9jID0gdmljYW1fcmVhZF9wcm9jX3NodXR0ZXI7CisJCWVudC0+d3JpdGVfcHJvYyA9IHZpY2FtX3dyaXRlX3Byb2Nfc2h1dHRlcjsKKwkJZW50LT5zaXplID0gNjQ7CisJfQorCisJZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoImdhaW4iLCBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkJY2FtLT5wcm9jX2Rpcik7CisJaWYgKGVudCkgeworCQllbnQtPmRhdGEgPSBjYW07CisJCWVudC0+cmVhZF9wcm9jID0gdmljYW1fcmVhZF9wcm9jX2dhaW47CisJCWVudC0+d3JpdGVfcHJvYyA9IHZpY2FtX3dyaXRlX3Byb2NfZ2FpbjsKKwkJZW50LT5zaXplID0gNjQ7CisJfQorfQorCitzdGF0aWMgdm9pZAordmljYW1fZGVzdHJveV9wcm9jX2VudHJ5KHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0gPSAoc3RydWN0IHZpY2FtX2NhbWVyYSAqKSBwdHI7CisJY2hhciBuYW1lWzE2XTsKKworCWlmICggIWNhbS0+cHJvY19kaXIgKQorCQlyZXR1cm47CisKKwlzcHJpbnRmKG5hbWUsICJ2aWRlbyVkIiwgY2FtLT52ZGV2Lm1pbm9yKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgic2h1dHRlciIsIGNhbS0+cHJvY19kaXIpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJnYWluIiwgY2FtLT5wcm9jX2Rpcik7CisJcmVtb3ZlX3Byb2NfZW50cnkobmFtZSx2aWNhbV9wcm9jX3Jvb3QpOworCWNhbS0+cHJvY19kaXIgPSBOVUxMOworCit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgdmljYW1fY3JlYXRlX3Byb2Nfcm9vdCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB2aWNhbV9kZXN0cm95X3Byb2Nfcm9vdCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB2aWNhbV9jcmVhdGVfcHJvY19lbnRyeShzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0pIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHZpY2FtX2Rlc3Ryb3lfcHJvY19lbnRyeSh2b2lkICpwdHIpIHsgfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZpY2FtX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHZpY2FtX29wZW4sCisJLnJlbGVhc2UJPSB2aWNhbV9jbG9zZSwKKwkucmVhZAkJPSB2aWNhbV9yZWFkLAorCS5tbWFwCQk9IHZpY2FtX21tYXAsCisJLmlvY3RsCQk9IHZpY2FtX2lvY3RsLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorfTsKKworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgdmljYW1fdGVtcGxhdGUgPSB7CisJLm93bmVyIAkJPSBUSElTX01PRFVMRSwKKwkubmFtZSAJCT0gIlZpQ2FtLWJhc2VkIFVTQiBDYW1lcmEiLAorCS50eXBlIAkJPSBWSURfVFlQRV9DQVBUVVJFLAorCS5oYXJkd2FyZSAJPSBWSURfSEFSRFdBUkVfVklDQU0sCisJLmZvcHMgCQk9ICZ2aWNhbV9mb3BzLAorCS5taW5vciAJCT0gLTEsCit9OworCisvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdmljYW1fdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRShVU0JfVklDQU1fVkVORE9SX0lELCBVU0JfVklDQU1fUFJPRFVDVF9JRCl9LAorCXt9CQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB2aWNhbV90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB2aWNhbV9kcml2ZXIgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQk9ICJ2aWNhbSIsCisJLnByb2JlCQk9IHZpY2FtX3Byb2JlLAorCS5kaXNjb25uZWN0CT0gdmljYW1fZGlzY29ubmVjdCwKKwkuaWRfdGFibGUJPSB2aWNhbV90YWJsZQorfTsKKworLyoqCisgKgl2aWNhbV9wcm9iZQorICoJQGludGY6IHRoZSBpbnRlcmZhY2UKKyAqCUBpZDogdGhlIGRldmljZSBpZAorICoKKyAqCUNhbGxlZCBieSB0aGUgdXNiIGNvcmUgd2hlbiBhIG5ldyBkZXZpY2UgaXMgY29ubmVjdGVkIHRoYXQgaXQgdGhpbmtzCisgKgl0aGlzIGRyaXZlciBtaWdodCBiZSBpbnRlcmVzdGVkIGluLgorICovCitzdGF0aWMgaW50Cit2aWNhbV9wcm9iZSggc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlpbnQgYnVsa0VuZHBvaW50ID0gMDsKKwljb25zdCBzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW07CisJCisJcHJpbnRrKEtFUk5fSU5GTyAiVmlDYW0gYmFzZWQgd2ViY2FtIGNvbm5lY3RlZFxuIik7CisKKwlpbnRlcmZhY2UgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKworCURCRyhLRVJOX0RFQlVHICJJbnRlcmZhY2UgJWQuIGhhcyAldS4gZW5kcG9pbnRzIVxuIiwKKwkgICAgICAgaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsICh1bnNpZ25lZCkgKGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzKSk7CisJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOworCisJaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApICYmCisJICAgICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIDMpID09IDB4MDIpKSB7CisJCS8qIHdlIGZvdW5kIGEgYnVsayBpbiBlbmRwb2ludCAqLworCQlidWxrRW5kcG9pbnQgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJObyBidWxrIGluIGVuZHBvaW50IHdhcyBmb3VuZCA/ISAodGhpcyBpcyBiYWQpXG4iKTsKKwl9CisKKwlpZiAoKGNhbSA9CisJICAgICBrbWFsbG9jKHNpemVvZiAoc3RydWN0IHZpY2FtX2NhbWVyYSksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJjb3VsZCBub3QgYWxsb2NhdGUga2VybmVsIG1lbW9yeSBmb3IgdmljYW1fY2FtZXJhIHN0cnVjdFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChjYW0sIDAsIHNpemVvZiAoc3RydWN0IHZpY2FtX2NhbWVyYSkpOworCisJY2FtLT5zaHV0dGVyX3NwZWVkID0gMTU7CisKKwlpbml0X01VVEVYKCZjYW0tPmNhbV9sb2NrKTsKKworCW1lbWNweSgmY2FtLT52ZGV2LCAmdmljYW1fdGVtcGxhdGUsCisJICAgICAgIHNpemVvZiAodmljYW1fdGVtcGxhdGUpKTsKKwljYW0tPnZkZXYucHJpdiA9IGNhbTsJLy8gc29ydCBvZiBhIHJldmVyc2UgbWFwcGluZyBmb3IgdGhvc2UgZnVuY3Rpb25zIHRoYXQgZ2V0IHZkZXYgb25seQorCisJY2FtLT51ZGV2ID0gZGV2OworCWNhbS0+YnVsa0VuZHBvaW50ID0gYnVsa0VuZHBvaW50OworCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmY2FtLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSkgPT0gLTEpIHsKKwkJa2ZyZWUoY2FtKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidmlkZW9fcmVnaXN0ZXJfZGV2aWNlIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXZpY2FtX2NyZWF0ZV9wcm9jX2VudHJ5KGNhbSk7CisKKwlwcmludGsoS0VSTl9JTkZPICJWaUNhbSB3ZWJjYW0gZHJpdmVyIG5vdyBjb250cm9sbGluZyB2aWRlbyBkZXZpY2UgJWRcbiIsY2FtLT52ZGV2Lm1pbm9yKTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIGNhbSk7CisJCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCit2aWNhbV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCWludCBvcGVuX2NvdW50OworCXN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCisJLyogd2UgbXVzdCB1bnJlZ2lzdGVyIHRoZSBkZXZpY2UgYmVmb3JlIHRha2luZyBpdHMKKwkgKiBjYW1fbG9jay4gVGhpcyBpcyBiZWNhdXNlIHRoZSB2aWRlbyBvcGVuIGNhbGwKKwkgKiBob2xkcyB0aGUgc2FtZSBsb2NrIGFzIHZpZGVvIHVucmVnaXN0ZXIuIGlmIHdlCisJICogdW5yZWdpc3RlciBpbnNpZGUgb2YgdGhlIGNhbV9sb2NrIGFuZCBvcGVuIGFsc28KKwkgKiB1c2VzIHRoZSBjYW1fbG9jaywgd2UgZ2V0IGRlYWRsb2NrLgorCSAqLworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmNhbS0+dmRldik7CisKKwkvKiBzdG9wIHRoZSBjYW1lcmEgZnJvbSBiZWluZyB1c2VkICovCisKKwlkb3duKCZjYW0tPmNhbV9sb2NrKTsKKworCS8qIG1hcmsgdGhlIGNhbWVyYSBhcyBnb25lICovCisKKwljYW0tPnVkZXYgPSBOVUxMOworCisJdmljYW1fZGVzdHJveV9wcm9jX2VudHJ5KGNhbSk7CisKKwkvKiB0aGUgb25seSB0aGluZyBsZWZ0IHRvIGRvIGlzIHN5bmNocm9uaXplIHdpdGgKKwkgKiBvdXIgY2xvc2UvcmVsZWFzZSBmdW5jdGlvbiBvbiB3aG8gc2hvdWxkIHJlbGVhc2UKKwkgKiB0aGUgY2FtZXJhIG1lbW9yeS4gaWYgdGhlcmUgYXJlIGFueSB1c2VycyB1c2luZyB0aGUKKwkgKiBjYW1lcmEsIGl0J3MgdGhlaXIgam9iLiBpZiB0aGVyZSBhcmUgbm8gdXNlcnMsCisJICogaXQncyBvdXJzLgorCSAqLworCisJb3Blbl9jb3VudCA9IGNhbS0+b3Blbl9jb3VudDsKKworCXVwKCZjYW0tPmNhbV9sb2NrKTsKKworCWlmICghb3Blbl9jb3VudCkgeworCQlrZnJlZShjYW0pOworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICJWaUNhbS1iYXNlZCBXZWJDYW0gZGlzY29ubmVjdGVkXG4iKTsKK30KKworLyoKKyAqLworc3RhdGljIGludCBfX2luaXQKK3VzYl92aWNhbV9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKwlEQkcoS0VSTl9JTkZPICJWaUNhbS1iYXNlZCBXZWJDYW0gZHJpdmVyIHN0YXJ0dXBcbiIpOworCXZpY2FtX2NyZWF0ZV9wcm9jX3Jvb3QoKTsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnZpY2FtX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiX3JlZ2lzdGVyIGZhaWxlZCFcbiIpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdAordXNiX3ZpY2FtX2V4aXQodm9pZCkKK3sKKwlEQkcoS0VSTl9JTkZPCisJICAgICAgICJWaUNhbS1iYXNlZCBXZWJDYW0gZHJpdmVyIHNodXRkb3duXG4iKTsKKworCXVzYl9kZXJlZ2lzdGVyKCZ2aWNhbV9kcml2ZXIpOworCXZpY2FtX2Rlc3Ryb3lfcHJvY19yb290KCk7Cit9CisKK21vZHVsZV9pbml0KHVzYl92aWNhbV9pbml0KTsKK21vZHVsZV9leGl0KHVzYl92aWNhbV9leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS93OTk2OGNmLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS93OTk2OGNmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg5ZTc5ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2YuYwpAQCAtMCwwICsxLDM4MjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZpZGVvNExpbnV4IGRyaXZlciBmb3IgVzk5Nls4N11DRiBKUEVHIFVTQiBEdWFsIE1vZGUgQ2FtZXJhIENoaXAuICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA0IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIC0gTWVtb3J5IG1hbmFnZW1lbnQgY29kZSBmcm9tIGJ0dHYgZHJpdmVyIGJ5IFJhbHBoIE1ldHpsZXIsICAgICAgICAgICAgICoKKyAqICAgTWFyY3VzIE1ldHpsZXIgYW5kIEdlcmQgS25vcnIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIC0gSTJDIGludGVyZmFjZSB0byBrZXJuZWwsIGhpZ2gtbGV2ZWwgaW1hZ2Ugc2Vuc29yIGNvbnRyb2wgcm91dGluZXMgYW5kICoKKyAqICAgc29tZSBzeW1ib2xpYyBuYW1lcyBmcm9tIE9WNTExIGRyaXZlciBieSBNYXJrIFcuIE1jQ2xlbGxhbmQuICAgICAgICAgICoKKyAqIC0gTG93LWxldmVsIEkyQyBmYXN0IHdyaXRlIGZ1bmN0aW9uIGJ5IFBpb3RyIEN6ZXJjemFrLiAgICAgICAgICAgICAgICAgICoKKyAqIC0gTG93LWxldmVsIEkyQyByZWFkIGZ1bmN0aW9uIGJ5IEZyZWRlcmljIEpvdWF1bHQuICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICoKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgva21vZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlLWZsYWdzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKworI2luY2x1ZGUgInc5OTY4Y2YuaCIKKyNpbmNsdWRlICJ3OTk2OGNmX2RlY29kZXIuaCIKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNb2R1bGUgbWFjcm9zIGFuZCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB3aW5ib25kX2lkX3RhYmxlKTsKKworTU9EVUxFX0FVVEhPUihXOTk2OENGX01PRFVMRV9BVVRIT1IiICJXOTk2OENGX0FVVEhPUl9FTUFJTCk7CitNT0RVTEVfREVTQ1JJUFRJT04oVzk5NjhDRl9NT0RVTEVfTkFNRSk7CitNT0RVTEVfVkVSU0lPTihXOTk2OENGX01PRFVMRV9WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKFc5OTY4Q0ZfTU9EVUxFX0xJQ0VOU0UpOworTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIlZpZGVvIik7CisKK3N0YXRpYyBpbnQgb3Ztb2RfbG9hZCA9IFc5OTY4Q0ZfT1ZNT0RfTE9BRDsKK3N0YXRpYyBpbnQgdnBwbW9kX2xvYWQgPSBXOTk2OENGX1ZQUE1PRF9MT0FEOworc3RhdGljIHVuc2lnbmVkIHNob3J0IHNpbWNhbXMgPSBXOTk2OENGX1NJTUNBTVM7CitzdGF0aWMgc2hvcnQgdmlkZW9fbnJbXT17WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSAtMX07IC8qLTE9Zmlyc3QgZnJlZSovCitzdGF0aWMgdW5zaWduZWQgaW50IHBhY2tldF9zaXplW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXOTk2OENGX1BBQ0tFVF9TSVpFfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtYXhfYnVmZmVyc1tdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXOTk2OENGX0JVRkZFUlN9Oworc3RhdGljIGludCBkb3VibGVfYnVmZmVyW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFc5OTY4Q0ZfRE9VQkxFX0JVRkZFUn07CitzdGF0aWMgaW50IGNsYW1waW5nW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSBXOTk2OENGX0NMQU1QSU5HfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBmaWx0ZXJfdHlwZVtdPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVzk5NjhDRl9GSUxURVJfVFlQRX07CitzdGF0aWMgaW50IGxhcmdldmlld1tdPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSBXOTk2OENGX0xBUkdFVklFV307CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZGVjb21wcmVzc2lvbltdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFc5OTY4Q0ZfREVDT01QUkVTU0lPTn07CitzdGF0aWMgaW50IHVwc2NhbGluZ1tdPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSBXOTk2OENGX1VQU0NBTElOR307CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZm9yY2VfcGFsZXR0ZVtdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0gMH07CitzdGF0aWMgaW50IGZvcmNlX3JnYltdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0gVzk5NjhDRl9GT1JDRV9SR0J9Oworc3RhdGljIGludCBhdXRvYnJpZ2h0W10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSBXOTk2OENGX0FVVE9CUklHSFR9Oworc3RhdGljIGludCBhdXRvZXhwW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSBXOTk2OENGX0FVVE9FWFB9Oworc3RhdGljIHVuc2lnbmVkIHNob3J0IGxpZ2h0ZnJlcVtdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVzk5NjhDRl9MSUdIVEZSRVF9Oworc3RhdGljIGludCBiYW5kaW5nZmlsdGVyW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXOTk2OENGX0JBTkRJTkdGSUxURVJ9Oworc3RhdGljIHNob3J0IGNsb2NrZGl2W10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSBXOTk2OENGX0NMT0NLRElWfTsKK3N0YXRpYyBpbnQgYmFja2xpZ2h0W10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSBXOTk2OENGX0JBQ0tMSUdIVH07CitzdGF0aWMgaW50IG1pcnJvcltdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0gVzk5NjhDRl9NSVJST1J9Oworc3RhdGljIGludCBtb25vY2hyb21lW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV09Vzk5NjhDRl9NT05PQ0hST01FfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzc1tdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXOTk2OENGX0JSSUdIVE5FU1N9Oworc3RhdGljIHVuc2lnbmVkIGludCBodWVbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IFc5OTY4Q0ZfSFVFfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29sb3VyW109e1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0gVzk5NjhDRl9DT0xPVVJ9Oworc3RhdGljIHVuc2lnbmVkIGludCBjb250cmFzdFtdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVzk5NjhDRl9DT05UUkFTVH07CitzdGF0aWMgdW5zaWduZWQgaW50IHdoaXRlbmVzc1tdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFc5OTY4Q0ZfV0hJVEVORVNTfTsKKyNpZmRlZiBXOTk2OENGX0RFQlVHCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZGVidWcgPSBXOTk2OENGX0RFQlVHX0xFVkVMOworc3RhdGljIGludCBzcGVjaWZpY19kZWJ1ZyA9IFc5OTY4Q0ZfU1BFQ0lGSUNfREVCVUc7CisjZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGludCBwYXJhbV9udlsyNF07IC8qIG51bWJlciBvZiB2YWx1ZXMgcGVyIHBhcmFtZXRlciAqLworCisjaWZkZWYgQ09ORklHX0tNT0QKK21vZHVsZV9wYXJhbShvdm1vZF9sb2FkLCBib29sLCAwNjQ0KTsKK21vZHVsZV9wYXJhbSh2cHBtb2RfbG9hZCwgYm9vbCwgMDQ0NCk7CisjZW5kaWYKK21vZHVsZV9wYXJhbShzaW1jYW1zLCB1c2hvcnQsIDA2NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KHZpZGVvX25yLCBzaG9ydCwgJnBhcmFtX252WzBdLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShwYWNrZXRfc2l6ZSwgdWludCwgJnBhcmFtX252WzFdLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShtYXhfYnVmZmVycywgdXNob3J0LCAmcGFyYW1fbnZbMl0sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGRvdWJsZV9idWZmZXIsIGJvb2wsICZwYXJhbV9udlszXSwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoY2xhbXBpbmcsIGJvb2wsICZwYXJhbV9udls0XSwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoZmlsdGVyX3R5cGUsIHVzaG9ydCwgJnBhcmFtX252WzVdLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShsYXJnZXZpZXcsIGJvb2wsICZwYXJhbV9udls2XSwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoZGVjb21wcmVzc2lvbiwgdXNob3J0LCAmcGFyYW1fbnZbN10sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KHVwc2NhbGluZywgYm9vbCwgJnBhcmFtX252WzhdLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShmb3JjZV9wYWxldHRlLCB1c2hvcnQsICZwYXJhbV9udls5XSwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoZm9yY2VfcmdiLCB1c2hvcnQsICZwYXJhbV9udlsxMF0sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGF1dG9icmlnaHQsIGJvb2wsICZwYXJhbV9udlsxMV0sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGF1dG9leHAsIGJvb2wsICZwYXJhbV9udlsxMl0sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGxpZ2h0ZnJlcSwgdXNob3J0LCAmcGFyYW1fbnZbMTNdLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShiYW5kaW5nZmlsdGVyLCBib29sLCAmcGFyYW1fbnZbMTRdLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShjbG9ja2Rpdiwgc2hvcnQsICZwYXJhbV9udlsxNV0sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGJhY2tsaWdodCwgYm9vbCwgJnBhcmFtX252WzE2XSwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkobWlycm9yLCBib29sLCAmcGFyYW1fbnZbMTddLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShtb25vY2hyb21lLCBib29sLCAmcGFyYW1fbnZbMThdLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShicmlnaHRuZXNzLCB1aW50LCAmcGFyYW1fbnZbMTldLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShodWUsIHVpbnQsICZwYXJhbV9udlsyMF0sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGNvbG91ciwgdWludCwgJnBhcmFtX252WzIxXSwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoY29udHJhc3QsIHVpbnQsICZwYXJhbV9udlsyMl0sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KHdoaXRlbmVzcywgdWludCwgJnBhcmFtX252WzIzXSwgMDQ0NCk7CisjaWZkZWYgVzk5NjhDRl9ERUJVRworbW9kdWxlX3BhcmFtKGRlYnVnLCB1c2hvcnQsIDA2NDQpOworbW9kdWxlX3BhcmFtKHNwZWNpZmljX2RlYnVnLCBib29sLCAwNjQ0KTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0tNT0QKK01PRFVMRV9QQVJNX0RFU0Mob3Ztb2RfbG9hZCwgCisgICAgICAgICAgICAgICAgICJcbjwwfDE+IEF1dG9tYXRpYyAnb3ZjYW1jaGlwJyBtb2R1bGUgbG9hZGluZy4iCisgICAgICAgICAgICAgICAgICJcbjAgZGlzYWJsZWQsIDEgZW5hYmxlZC4iCisgICAgICAgICAgICAgICAgICJcbklmIGVuYWJsZWQsJ2luc21vZCcgc2VhcmNoZXMgZm9yIHRoZSByZXF1aXJlZCAnb3ZjYW1jaGlwJyIKKyAgICAgICAgICAgICAgICAgIlxubW9kdWxlIGluIHRoZSBzeXN0ZW0sIGFjY29yZGluZyB0byBpdHMgY29uZmlndXJhdGlvbiwgYW5kIgorICAgICAgICAgICAgICAgICAiXG5hdHRlbXB0cyB0byBsb2FkIHRoYXQgbW9kdWxlIGF1dG9tYXRpY2FsbHkuIFRoaXMgYWN0aW9uIGlzIgorICAgICAgICAgICAgICAgICAiXG5wZXJmb3JtZWQgb25jZSBhcyBzb29uIGFzIHRoZSAndzk5NjhjZicgbW9kdWxlIGlzIGxvYWRlZCIKKyAgICAgICAgICAgICAgICAgIlxuaW50byBtZW1vcnkuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9PVk1PRF9MT0FEKSIuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0ModnBwbW9kX2xvYWQsIAorICAgICAgICAgICAgICAgICAiXG48MHwxPiBBdXRvbWF0aWMgJ3c5OTY4Y2YtdnBwJyBtb2R1bGUgbG9hZGluZy4iCisgICAgICAgICAgICAgICAgICJcbjAgZGlzYWJsZWQsIDEgZW5hYmxlZC4iCisgICAgICAgICAgICAgICAgICJcbklmIGVuYWJsZWQsIGV2ZXJ5IHRpbWUgYW4gYXBwbGljYXRpb24gYXR0ZW1wdHMgdG8gb3BlbiBhIgorICAgICAgICAgICAgICAgICAiXG5jYW1lcmEsICdpbnNtb2QnIHNlYXJjaGVzIGZvciB0aGUgdmlkZW8gcG9zdC1wcm9jZXNzaW5nIgorICAgICAgICAgICAgICAgICAiXG5tb2R1bGUgaW4gdGhlIHN5c3RlbSBhbmQgbG9hZHMgaXQgYXV0b21hdGljYWxseSAoaWYiCisgICAgICAgICAgICAgICAgICJcbnByZXNlbnQpLiBUaGUgb3B0aW9uYWwgJ3c5OTY4Y2YtdnBwJyBtb2R1bGUgYWRkcyBleHRyYSIKKyAgICAgICAgICAgICAgICAgIlxuIGltYWdlIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgdG8gdGhlICd3OTk2OGNmJyBtb2R1bGUsbGlrZSIKKyAgICAgICAgICAgICAgICAgIlxuc29mdHdhcmUgdXAtc2NhbGluZyxjb2xvdXIgY29udmVyc2lvbnMgYW5kIHZpZGVvIGRlY29kaW5nIgorICAgICAgICAgICAgICAgICAiXG5mb3IgdmVyeSBoaWdoIGZyYW1lIHJhdGVzLiIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfVlBQTU9EX0xPQUQpIi4iCisgICAgICAgICAgICAgICAgICJcbiIpOworI2VuZGlmCitNT0RVTEVfUEFSTV9ERVNDKHNpbWNhbXMsIAorICAgICAgICAgICAgICAgICAiXG48bj4gTnVtYmVyIG9mIGNhbWVyYXMgYWxsb3dlZCB0byBzdHJlYW0gc2ltdWx0YW5lb3VzbHkuIgorICAgICAgICAgICAgICAgICAiXG5uIG1heSB2YXJ5IGZyb20gMCB0byAiCisgICAgICAgICAgICAgICAgIF9fTU9EVUxFX1NUUklORyhXOTk2OENGX01BWF9ERVZJQ0VTKSIuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9TSU1DQU1TKSIuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0ModmlkZW9fbnIsCisgICAgICAgICAgICAgICAgICJcbjwtMXxuWywuLi5dPiBTcGVjaWZ5IFY0TCBtaW5vciBtb2RlIG51bWJlci4iCisgICAgICAgICAgICAgICAgICJcbiAtMSA9IHVzZSBuZXh0IGF2YWlsYWJsZSAoZGVmYXVsdCkiCisgICAgICAgICAgICAgICAgICJcbiAgbiA9IHVzZSBtaW5vciBudW1iZXIgbiAoaW50ZWdlciA+PSAwKSIKKyAgICAgICAgICAgICAgICAgIlxuWW91IGNhbiBzcGVjaWZ5IHVwIHRvICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9NQVhfREVWSUNFUykKKyAgICAgICAgICAgICAgICAgIiBjYW1lcmFzIHRoaXMgd2F5LiIKKyAgICAgICAgICAgICAgICAgIlxuRm9yIGV4YW1wbGU6IgorICAgICAgICAgICAgICAgICAiXG52aWRlb19ucj0tMSwyLC0xIHdvdWxkIGFzc2lnbiBtaW5vciBudW1iZXIgMiB0byIKKyAgICAgICAgICAgICAgICAgIlxudGhlIHNlY29uZCBjYW1lcmEgYW5kIHVzZSBhdXRvIGZvciB0aGUgZmlyc3QiCisgICAgICAgICAgICAgICAgICJcbm9uZSBhbmQgZm9yIGV2ZXJ5IG90aGVyIGNhbWVyYS4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhwYWNrZXRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgIlxuPG5bLC4uLl0+IFNwZWNpZnkgdGhlIG1heGltdW0gZGF0YSBwYXlsb2FkIgorICAgICAgICAgICAgICAgICAiXG5zaXplIGluIGJ5dGVzIGZvciBhbHRlcm5hdGUgc2V0dGluZ3MsIGZvciBlYWNoIGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcbm4gaXMgc2NhbGVkIGJldHdlZW4gNjMgYW5kIDEwMjMgIgorICAgICAgICAgICAgICAgICAiKGRlZmF1bHQgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX1BBQ0tFVF9TSVpFKSIpLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKG1heF9idWZmZXJzLAorICAgICAgICAgICAgICAgICAiXG48blssLi4uXT4gRm9yIGFkdmFuY2VkIHVzZXJzLiIKKyAgICAgICAgICAgICAgICAgIlxuU3BlY2lmeSB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmlkZW8gZnJhbWUgYnVmZmVycyIKKyAgICAgICAgICAgICAgICAgIlxudG8gYWxsb2NhdGUgZm9yIGVhY2ggZGV2aWNlLCBmcm9tIDIgdG8gIgorICAgICAgICAgICAgICAgICBfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9NQVhfQlVGRkVSUykKKyAgICAgICAgICAgICAgICAgIi4gKGRlZmF1bHQgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0JVRkZFUlMpIikuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MoZG91YmxlX2J1ZmZlciwgCisgICAgICAgICAgICAgICAgICJcbjwwfDFbLC4uLl0+ICIKKyAgICAgICAgICAgICAgICAgIkhhcmR3YXJlIGRvdWJsZSBidWZmZXJpbmc6IDAgZGlzYWJsZWQsIDEgZW5hYmxlZC4iCisgICAgICAgICAgICAgICAgICJcbkl0IHNob3VsZCBiZSBlbmFibGVkIGlmIHlvdSB3YW50IHNtb290aCB2aWRlbyBvdXRwdXQ6IGlmIgorICAgICAgICAgICAgICAgICAiXG55b3Ugb2J0YWluIG91dCBvZiBzeW5jLiB2aWRlbywgZGlzYWJsZSBpdCwgb3IgdHJ5IHRvIgorICAgICAgICAgICAgICAgICAiXG5kZWNyZWFzZSB0aGUgJ2Nsb2NrZGl2JyBtb2R1bGUgcGFyYW1ldGVyIHZhbHVlLiIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfRE9VQkxFX0JVRkZFUikKKyAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGNsYW1waW5nLCAKKyAgICAgICAgICAgICAgICAgIlxuPDB8MVssLi4uXT4gVmlkZW8gZGF0YSBjbGFtcGluZzogMCBkaXNhYmxlZCwgMSBlbmFibGVkLiIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfQ0xBTVBJTkcpCisgICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhmaWx0ZXJfdHlwZSwgCisgICAgICAgICAgICAgICAgICJcbjwwfDF8MlssLi4uXT4gVmlkZW8gZmlsdGVyIHR5cGUuIgorICAgICAgICAgICAgICAgICAiXG4wIG5vbmUsIDEgKDEtMi0xKSAzLXRhcCBmaWx0ZXIsICIKKyAgICAgICAgICAgICAgICAgIjIgKDItMy02LTMtMikgNS10YXAgZmlsdGVyLiIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfRklMVEVSX1RZUEUpCisgICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcblRoZSBmaWx0ZXIgaXMgdXNlZCB0byByZWR1Y2Ugbm9pc2UgYW5kIGFsaWFzaW5nIGFydGlmYWN0cyIKKyAgICAgICAgICAgICAgICAgIlxucHJvZHVjZWQgYnkgdGhlIENDRCBvciBDTU9TIGltYWdlIHNlbnNvciwgYW5kIHRoZSBzY2FsaW5nIgorICAgICAgICAgICAgICAgICAiIHByb2Nlc3MuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MobGFyZ2V2aWV3LCAKKyAgICAgICAgICAgICAgICAgIlxuPDB8MVssLi4uXT4gTGFyZ2UgdmlldzogMCBkaXNhYmxlZCwgMSBlbmFibGVkLiIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfTEFSR0VWSUVXKQorICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0ModXBzY2FsaW5nLCAKKyAgICAgICAgICAgICAgICAgIlxuPDB8MVssLi4uXT4gU29mdHdhcmUgc2NhbGluZyAoZm9yIG5vbi1jb21wcmVzc2VkIHZpZGVvKToiCisgICAgICAgICAgICAgICAgICJcbjAgZGlzYWJsZWQsIDEgZW5hYmxlZC4iCisgICAgICAgICAgICAgICAgICJcbkRpc2FibGUgaXQgaWYgeW91IGhhdmUgYSBzbG93IENQVSBvciB5b3UgZG9uJ3QgaGF2ZSIKKyAgICAgICAgICAgICAgICAgIiBlbm91Z2ggbWVtb3J5LiIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfVVBTQ0FMSU5HKQorICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgorICAgICAgICAgICAgICAgICAiXG5JZiAndzk5NjhjZi12cHAnIGlzIG5vdCBwcmVzZW50LCB0aGlzIHBhcmFtZXRlciBpcyIKKyAgICAgICAgICAgICAgICAgIiBzZXQgdG8gMC4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhkZWNvbXByZXNzaW9uLAorICAgICAgICAgICAgICAgICAiXG48MHwxfDJbLC4uLl0+IFNvZnR3YXJlIHZpZGVvIGRlY29tcHJlc3Npb246IgorICAgICAgICAgICAgICAgICAiXG4tIDAgZGlzYWJsZXMgZGVjb21wcmVzc2lvbiAoZG9lc24ndCBhbGxvdyBmb3JtYXRzIG5lZWRpbmciCisgICAgICAgICAgICAgICAgICIgZGVjb21wcmVzc2lvbikiCisgICAgICAgICAgICAgICAgICJcbi0gMSBmb3JjZXMgZGVjb21wcmVzc2lvbiAoYWxsb3dzIGZvcm1hdHMgbmVlZGluZyIKKyAgICAgICAgICAgICAgICAgIiBkZWNvbXByZXNzaW9uIG9ubHkpOyIKKyAgICAgICAgICAgICAgICAgIlxuLSAyIGFsbG93cyBhbnkgcGVybWl0dGVkIGZvcm1hdHMuIgorICAgICAgICAgICAgICAgICAiXG5Gb3JtYXRzIHN1cHBvcnRpbmcgY29tcHJlc3NlZCB2aWRlbyBhcmUgWVVWNDIyUCBhbmQiCisgICAgICAgICAgICAgICAgICIgWVVWNDIwUC9ZVVY0MjAgIgorICAgICAgICAgICAgICAgICAiXG5pbiBhbnkgcmVzb2x1dGlvbnMgd2hlcmUgYm90aCB3aWR0aCBhbmQgaGVpZ2h0IGFyZSAiCisgICAgICAgICAgICAgICAgICJhIG11bHRpcGxlIG9mIDE2LiIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfREVDT01QUkVTU0lPTikKKyAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKyAgICAgICAgICAgICAgICAgIlxuSWYgJ3c5OTY4Y2YtdnBwJyBpcyBub3QgcHJlc2VudCwgZm9yY2luZyBkZWNvbXByZXNzaW9uIGlzICIKKyAgICAgICAgICAgICAgICAgIlxubm90IGFsbG93ZWQ7IGluIHRoaXMgY2FzZSB0aGlzIHBhcmFtZXRlciBpcyBzZXQgdG8gMi4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9wYWxldHRlLAorICAgICAgICAgICAgICAgICAiXG48MCIKKyAgICAgICAgICAgICAgICAgInwiIF9fTU9EVUxFX1NUUklORyhWSURFT19QQUxFVFRFX1VZVlkpCisgICAgICAgICAgICAgICAgICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9ZVVY0MjApCisgICAgICAgICAgICAgICAgICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9ZVVY0MjJQKQorICAgICAgICAgICAgICAgICAifCIgX19NT0RVTEVfU1RSSU5HKFZJREVPX1BBTEVUVEVfWVVWNDIwUCkKKyAgICAgICAgICAgICAgICAgInwiIF9fTU9EVUxFX1NUUklORyhWSURFT19QQUxFVFRFX1lVWVYpCisgICAgICAgICAgICAgICAgICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9ZVVY0MjIpCisgICAgICAgICAgICAgICAgICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9HUkVZKQorICAgICAgICAgICAgICAgICAifCIgX19NT0RVTEVfU1RSSU5HKFZJREVPX1BBTEVUVEVfUkdCNTU1KQorICAgICAgICAgICAgICAgICAifCIgX19NT0RVTEVfU1RSSU5HKFZJREVPX1BBTEVUVEVfUkdCNTY1KQorICAgICAgICAgICAgICAgICAifCIgX19NT0RVTEVfU1RSSU5HKFZJREVPX1BBTEVUVEVfUkdCMjQpCisgICAgICAgICAgICAgICAgICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9SR0IzMikKKyAgICAgICAgICAgICAgICAgIlssLi4uXT4iCisgICAgICAgICAgICAgICAgICIgRm9yY2UgcGljdHVyZSBwYWxldHRlLiIKKyAgICAgICAgICAgICAgICAgIlxuSW4gb3JkZXI6IgorICAgICAgICAgICAgICAgICAiXG4tIDAgYWxsb3dzIGFueSBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdHM6IgorICAgICAgICAgICAgICAgICAiXG4tIFVZVlkgICAgMTYgYnBwIC0gT3JpZ2luYWwgdmlkZW8sIGNvbXByZXNzaW9uIGRpc2FibGVkIgorICAgICAgICAgICAgICAgICAiXG4tIFlVVjQyMCAgMTIgYnBwIC0gT3JpZ2luYWwgdmlkZW8sIGNvbXByZXNzaW9uIGVuYWJsZWQiCisgICAgICAgICAgICAgICAgICJcbi0gWVVWNDIyUCAxNiBicHAgLSBPcmlnaW5hbCB2aWRlbywgY29tcHJlc3Npb24gZW5hYmxlZCIKKyAgICAgICAgICAgICAgICAgIlxuLSBZVVY0MjBQIDEyIGJwcCAtIE9yaWdpbmFsIHZpZGVvLCBjb21wcmVzc2lvbiBlbmFibGVkIgorICAgICAgICAgICAgICAgICAiXG4tIFlVVlkgICAgMTYgYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkiCisgICAgICAgICAgICAgICAgICJcbi0gWVVWNDIyICAxNiBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWSIKKyAgICAgICAgICAgICAgICAgIlxuLSBHUkVZICAgICA4IGJwcCAtIFNvZnR3YXJlIGNvbnZlcnNpb24gZnJvbSBVWVZZIgorICAgICAgICAgICAgICAgICAiXG4tIFJHQjU1NSAgMTYgYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkiCisgICAgICAgICAgICAgICAgICJcbi0gUkdCNTY1ICAxNiBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWSIKKyAgICAgICAgICAgICAgICAgIlxuLSBSR0IyNCAgIDI0IGJwcCAtIFNvZnR3YXJlIGNvbnZlcnNpb24gZnJvbSBVWVZZIgorICAgICAgICAgICAgICAgICAiXG4tIFJHQjMyICAgMzIgYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkiCisgICAgICAgICAgICAgICAgICJcbldoZW4gbm90IDAsIHRoaXMgcGFyYW1ldGVyIHdpbGwgb3ZlcnJpZGUgJ2RlY29tcHJlc3Npb24nLiIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAwIGZvciBldmVyeSBkZXZpY2UuIgorICAgICAgICAgICAgICAgICAiXG5Jbml0aWFsIHBhbGV0dGUgaXMgIgorICAgICAgICAgICAgICAgICBfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9QQUxFVFRFX0RFQ09NUF9PTikiLiIKKyAgICAgICAgICAgICAgICAgIlxuSWYgJ3c5OTY4Y2YtdnBwJyBpcyBub3QgcHJlc2VudCwgdGhpcyBwYXJhbWV0ZXIgaXMiCisgICAgICAgICAgICAgICAgICIgc2V0IHRvIDkgKFVZVlkpLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGZvcmNlX3JnYiwgCisgICAgICAgICAgICAgICAgICJcbjwwfDFbLC4uLl0+IFJlYWQgUkdCIHZpZGVvIGRhdGEgaW5zdGVhZCBvZiBCR1I6IgorICAgICAgICAgICAgICAgICAiXG4gMSA9IHVzZSBSR0IgY29tcG9uZW50IG9yZGVyaW5nLiIKKyAgICAgICAgICAgICAgICAgIlxuIDAgPSB1c2UgQkdSIGNvbXBvbmVudCBvcmRlcmluZy4iCisgICAgICAgICAgICAgICAgICJcblRoaXMgcGFyYW1ldGVyIGhhcyBlZmZlY3Qgd2hlbiB1c2luZyBSR0JYIHBhbGV0dGVzIG9ubHkuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9GT1JDRV9SR0IpCisgICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhhdXRvYnJpZ2h0LAorICAgICAgICAgICAgICAgICAiXG48MHwxWywuLi5dPiBJbWFnZSBzZW5zb3IgYXV0b21hdGljYWxseSBjaGFuZ2VzIGJyaWdodG5lc3M6IgorICAgICAgICAgICAgICAgICAiXG4gMCA9IG5vLCAxID0geWVzIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9BVVRPQlJJR0hUKQorICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MoYXV0b2V4cCwKKyAgICAgICAgICAgICAgICAgIlxuPDB8MVssLi4uXT4gSW1hZ2Ugc2Vuc29yIGF1dG9tYXRpY2FsbHkgY2hhbmdlcyBleHBvc3VyZToiCisgICAgICAgICAgICAgICAgICJcbiAwID0gbm8sIDEgPSB5ZXMiCisgICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0FVVE9FWFApCisgICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhsaWdodGZyZXEsCisgICAgICAgICAgICAgICAgICJcbjw1MHw2MFssLi4uXT4gTGlnaHQgZnJlcXVlbmN5IGluIEh6OiIKKyAgICAgICAgICAgICAgICAgIlxuIDUwIGZvciBFdXJvcGVhbiBhbmQgQXNpYW4gbGlnaHRpbmcsIgorICAgICAgICAgICAgICAgICAiIDYwIGZvciBBbWVyaWNhbiBsaWdodGluZy4iCisgICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0xJR0hURlJFUSkKKyAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGJhbmRpbmdmaWx0ZXIsCisgICAgICAgICAgICAgICAgICJcbjwwfDFbLC4uLl0+IEJhbmRpbmcgZmlsdGVyIHRvIHJlZHVjZSBlZmZlY3RzIG9mIgorICAgICAgICAgICAgICAgICAiIGZsdW9yZXNjZW50IGxpZ2h0aW5nOiIKKyAgICAgICAgICAgICAgICAgIlxuIDAgZGlzYWJsZWQsIDEgZW5hYmxlZC4iCisgICAgICAgICAgICAgICAgICJcblRoaXMgZmlsdGVyIHRyaWVzIHRvIHJlZHVjZSB0aGUgcGF0dGVybiBvZiBob3Jpem9udGFsIgorICAgICAgICAgICAgICAgICAiXG5saWdodC9kYXJrIGJhbmRzIGNhdXNlZCBieSBzb21lICh1c3VhbGx5IGZsdW9yZXNjZW50KSIKKyAgICAgICAgICAgICAgICAgIiBsaWdodGluZy4iCisgICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0JBTkRJTkdGSUxURVIpCisgICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhjbG9ja2RpdiwKKyAgICAgICAgICAgICAgICAgIlxuPC0xfG5bLC4uLl0+ICIKKyAgICAgICAgICAgICAgICAgIkZvcmNlIHBpeGVsIGNsb2NrIGRpdmlzb3IgdG8gYSBzcGVjaWZpYyB2YWx1ZSAoZm9yIGV4cGVydHMpOiIKKyAgICAgICAgICAgICAgICAgIlxuICBuIG1heSB2YXJ5IGZyb20gMCB0byAxMjcuIgorICAgICAgICAgICAgICAgICAiXG4gLTEgZm9yIGF1dG9tYXRpYyB2YWx1ZS4iCisgICAgICAgICAgICAgICAgICJcblNlZSBhbHNvIHRoZSAnZG91YmxlX2J1ZmZlcicgbW9kdWxlIHBhcmFtZXRlci4iCisgICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0NMT0NLRElWKQorICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MoYmFja2xpZ2h0LAorICAgICAgICAgICAgICAgICAiXG48MHwxWywuLi5dPiBPYmplY3RzIGFyZSBsaXQgZnJvbSBiZWhpbmQ6IgorICAgICAgICAgICAgICAgICAiXG4gMCA9IG5vLCAxID0geWVzIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9CQUNLTElHSFQpCisgICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhtaXJyb3IsCisgICAgICAgICAgICAgICAgICJcbjwwfDFbLC4uLl0+IFJldmVyc2UgaW1hZ2UgaG9yaXpvbnRhbGx5OiIKKyAgICAgICAgICAgICAgICAgIlxuIDAgPSBubywgMSA9IHllcyIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfTUlSUk9SKQorICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MobW9ub2Nocm9tZSwKKyAgICAgICAgICAgICAgICAgIlxuPDB8MVssLi4uXT4gVXNlIGltYWdlIHNlbnNvciBhcyBtb25vY2hyb21lIHNlbnNvcjoiCisgICAgICAgICAgICAgICAgICJcbiAwID0gbm8sIDEgPSB5ZXMiCisgICAgICAgICAgICAgICAgICJcbk5vdCBhbGwgdGhlIHNlbnNvcnMgc3VwcG9ydCBtb25vY2hyb21lIGNvbG9yLiIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfTU9OT0NIUk9NRSkKKyAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGJyaWdodG5lc3MsIAorICAgICAgICAgICAgICAgICAiXG48blssLi4uXT4gU2V0IHBpY3R1cmUgYnJpZ2h0bmVzcyAoMC02NTUzNSkuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9CUklHSFRORVNTKQorICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgorICAgICAgICAgICAgICAgICAiXG5UaGlzIHBhcmFtZXRlciBoYXMgbm8gZWZmZWN0IGlmICdhdXRvYnJpZ2h0JyBpcyBlbmFibGVkLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGh1ZSwgCisgICAgICAgICAgICAgICAgICJcbjxuWywuLi5dPiBTZXQgcGljdHVyZSBodWUgKDAtNjU1MzUpLiIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfSFVFKQorICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MoY29sb3VyLCAKKyAgICAgICAgICAgICAgICAgIlxuPG5bLC4uLl0+IFNldCBwaWN0dXJlIHNhdHVyYXRpb24gKDAtNjU1MzUpLiIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfQ09MT1VSKQorICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MoY29udHJhc3QsIAorICAgICAgICAgICAgICAgICAiXG48blssLi4uXT4gU2V0IHBpY3R1cmUgY29udHJhc3QgKDAtNjU1MzUpLiIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfQ09OVFJBU1QpCisgICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyh3aGl0ZW5lc3MsIAorICAgICAgICAgICAgICAgICAiXG48blssLi4uXT4gU2V0IHBpY3R1cmUgd2hpdGVuZXNzICgwLTY1NTM1KS4iCisgICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX1dISVRFTkVTUykKKyAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CisjaWZkZWYgVzk5NjhDRl9ERUJVRworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywKKyAgICAgICAgICAgICAgICAgIlxuPG4+IERlYnVnZ2luZyBpbmZvcm1hdGlvbiBsZXZlbCwgZnJvbSAwIHRvIDY6IgorICAgICAgICAgICAgICAgICAiXG4wID0gbm9uZSAodXNlIGNhcmVmdWxseSkiCisgICAgICAgICAgICAgICAgICJcbjEgPSBjcml0aWNhbCBlcnJvcnMiCisgICAgICAgICAgICAgICAgICJcbjIgPSBzaWduaWZpY2FudCBpbmZvcm1hdGlvbnMiCisgICAgICAgICAgICAgICAgICJcbjMgPSBjb25maWd1cmF0aW9uIG9yIGdlbmVyYWwgbWVzc2FnZXMiCisgICAgICAgICAgICAgICAgICJcbjQgPSB3YXJuaW5ncyIKKyAgICAgICAgICAgICAgICAgIlxuNSA9IGNhbGxlZCBmdW5jdGlvbnMiCisgICAgICAgICAgICAgICAgICJcbjYgPSBmdW5jdGlvbiBpbnRlcm5hbHMiCisgICAgICAgICAgICAgICAgICJcbkxldmVsIDUgYW5kIDYgYXJlIHVzZWZ1bCBmb3IgdGVzdGluZyBvbmx5LCB3aGVuIG9ubHkgIgorICAgICAgICAgICAgICAgICAib25lIGRldmljZSBpcyB1c2VkLiIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfREVCVUdfTEVWRUwpIi4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhzcGVjaWZpY19kZWJ1ZywKKyAgICAgICAgICAgICAgICAgIlxuPDB8MT4gRW5hYmxlIG9yIGRpc2FibGUgc3BlY2lmaWMgZGVidWdnaW5nIG1lc3NhZ2VzOiIKKyAgICAgICAgICAgICAgICAgIlxuMCA9IHByaW50IG1lc3NhZ2VzIGNvbmNlcm5pbmcgZXZlcnkgbGV2ZWwiCisgICAgICAgICAgICAgICAgICIgPD0gJ2RlYnVnJyBsZXZlbC4iCisgICAgICAgICAgICAgICAgICJcbjEgPSBwcmludCBtZXNzYWdlcyBjb25jZXJuaW5nIHRoZSBsZXZlbCIKKyAgICAgICAgICAgICAgICAgIiBpbmRpY2F0ZWQgYnkgJ2RlYnVnJy4iCisgICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIgorICAgICAgICAgICAgICAgICBfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9TUEVDSUZJQ19ERUJVRykiLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CisjZW5kaWYgLyogVzk5NjhDRl9ERUJVRyAqLworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNvbWUgcHJvdG90eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVmlkZW80bGludXggaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3OTk2OGNmX2ZvcHM7CitzdGF0aWMgaW50IHc5OTY4Y2Zfb3BlbihzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgZmlsZSopOworc3RhdGljIGludCB3OTk2OGNmX3JlbGVhc2Uoc3RydWN0IGlub2RlKiwgc3RydWN0IGZpbGUqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9tbWFwKHN0cnVjdCBmaWxlKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0Kik7CitzdGF0aWMgaW50IHc5OTY4Y2ZfaW9jdGwoc3RydWN0IGlub2RlKiwgc3RydWN0IGZpbGUqLCB1bnNpZ25lZCwgdW5zaWduZWQgbG9uZyk7CitzdGF0aWMgc3NpemVfdCB3OTk2OGNmX3JlYWQoc3RydWN0IGZpbGUqLCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCopOworc3RhdGljIGludCB3OTk2OGNmX3Y0bF9pb2N0bChzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgZmlsZSosIHVuc2lnbmVkIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCBfX3VzZXIgKik7CisKKy8qIFVTQi1zcGVjaWZpYyAqLworc3RhdGljIGludCB3OTk2OGNmX3N0YXJ0X3RyYW5zZmVyKHN0cnVjdCB3OTk2OGNmX2RldmljZSopOworc3RhdGljIGludCB3OTk2OGNmX3N0b3BfdHJhbnNmZXIoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CitzdGF0aWMgaW50IHc5OTY4Y2Zfd3JpdGVfcmVnKHN0cnVjdCB3OTk2OGNmX2RldmljZSosIHUxNiB2YWx1ZSwgdTE2IGluZGV4KTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9yZWFkX3JlZyhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLCB1MTYgaW5kZXgpOworc3RhdGljIGludCB3OTk2OGNmX3dyaXRlX2ZzYihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLCB1MTYqIGRhdGEpOworc3RhdGljIGludCB3OTk2OGNmX3dyaXRlX3NiKHN0cnVjdCB3OTk2OGNmX2RldmljZSosIHUxNiB2YWx1ZSk7CitzdGF0aWMgaW50IHc5OTY4Y2ZfcmVhZF9zYihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl91cGxvYWRfcXVhbnRpemF0aW9udGFibGVzKHN0cnVjdCB3OTk2OGNmX2RldmljZSopOworc3RhdGljIHZvaWQgdzk5NjhjZl91cmJfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKy8qIExvdy1sZXZlbCBJMkMgKFNNQnVzKSBJL08gKi8KK3N0YXRpYyBpbnQgdzk5NjhjZl9zbWJ1c19zdGFydChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9zbWJ1c19zdG9wKHN0cnVjdCB3OTk2OGNmX2RldmljZSopOworc3RhdGljIGludCB3OTk2OGNmX3NtYnVzX3dyaXRlX2J5dGUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwgdTggdik7CitzdGF0aWMgaW50IHc5OTY4Y2Zfc21idXNfcmVhZF9ieXRlKHN0cnVjdCB3OTk2OGNmX2RldmljZSosIHU4KiB2KTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9zbWJ1c193cml0ZV9hY2soc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CitzdGF0aWMgaW50IHc5OTY4Y2Zfc21idXNfcmVhZF9hY2soc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CitzdGF0aWMgaW50IHc5OTY4Y2Zfc21idXNfcmVmcmVzaF9idXMoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CitzdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX2FkYXBfcmVhZF9ieXRlKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgYWRkcmVzcywgdTgqIHZhbHVlKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9pMmNfYWRhcF9yZWFkX2J5dGVfZGF0YShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLCB1MTYgYWRkcmVzcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggc3ViYWRkcmVzcywgdTgqIHZhbHVlKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9pMmNfYWRhcF93cml0ZV9ieXRlKHN0cnVjdCB3OTk2OGNmX2RldmljZSosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgYWRkcmVzcywgdTggc3ViYWRkcmVzcyk7CitzdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX2FkYXBfZmFzdHdyaXRlX2J5dGVfZGF0YShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGFkZHJlc3MsIHU4IHN1YmFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCB2YWx1ZSk7CisKKy8qIEkyQyBpbnRlcmZhY2UgdG8ga2VybmVsICovCitzdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX2luaXQoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CitzdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX3NtYnVzX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyKiwgdTE2IGFkZHIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzLCBjaGFyIHJlYWRfd3JpdGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGNvbW1hbmQsIGludCBzaXplLCB1bmlvbiBpMmNfc21idXNfZGF0YSopOworc3RhdGljIHUzMiB3OTk2OGNmX2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciopOworc3RhdGljIGludCB3OTk2OGNmX2kyY19hdHRhY2hfaW5mb3JtKHN0cnVjdCBpMmNfY2xpZW50Kik7CitzdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX2RldGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9pMmNfY29udHJvbChzdHJ1Y3QgaTJjX2FkYXB0ZXIqLCB1bnNpZ25lZCBpbnQgY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKKworLyogTWVtb3J5IG1hbmFnZW1lbnQgKi8KK3N0YXRpYyB2b2lkKiBydm1hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpOworc3RhdGljIHZvaWQgcnZmcmVlKHZvaWQgKm1lbSwgdW5zaWduZWQgbG9uZyBzaXplKTsKK3N0YXRpYyB2b2lkIHc5OTY4Y2ZfZGVhbGxvY2F0ZV9tZW1vcnkoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CitzdGF0aWMgaW50ICB3OTk2OGNmX2FsbG9jYXRlX21lbW9yeShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKKworLyogSGlnaC1sZXZlbCBpbWFnZSBzZW5zb3IgY29udHJvbCBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQgdzk5NjhjZl9zZW5zb3Jfc2V0X2NvbnRyb2woc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKixpbnQgY2lkLGludCB2YWwpOworc3RhdGljIGludCB3OTk2OGNmX3NlbnNvcl9nZXRfY29udHJvbChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLGludCBjaWQsaW50ICp2YWwpOworc3RhdGljIGludCB3OTk2OGNmX3NlbnNvcl9jbWQoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CitzdGF0aWMgaW50IHc5OTY4Y2Zfc2Vuc29yX2luaXQoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CitzdGF0aWMgaW50IHc5OTY4Y2Zfc2Vuc29yX3VwZGF0ZV9zZXR0aW5ncyhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9zZW5zb3JfZ2V0X3BpY3R1cmUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CitzdGF0aWMgaW50IHc5OTY4Y2Zfc2Vuc29yX3VwZGF0ZV9waWN0dXJlKHN0cnVjdCB3OTk2OGNmX2RldmljZSosIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fcGljdHVyZSBwaWN0KTsKKworLyogT3RoZXIgaGVscGVyIGZ1bmN0aW9ucyAqLworc3RhdGljIHZvaWQgdzk5NjhjZl9jb25maWd1cmVfY2FtZXJhKHN0cnVjdCB3OTk2OGNmX2RldmljZSosc3RydWN0IHVzYl9kZXZpY2UqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gdzk5NjhjZl9tb2RlbF9pZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZGV2X25yKTsKK3N0YXRpYyB2b2lkIHc5OTY4Y2ZfYWRqdXN0X2NvbmZpZ3VyYXRpb24oc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CitzdGF0aWMgaW50IHc5OTY4Y2ZfdHVybl9vbl9sZWQoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CitzdGF0aWMgaW50IHc5OTY4Y2ZfaW5pdF9jaGlwKHN0cnVjdCB3OTk2OGNmX2RldmljZSopOworc3RhdGljIGlubGluZSB1MTYgdzk5NjhjZl92YWxpZF9wYWxldHRlKHUxNiBwYWxldHRlKTsKK3N0YXRpYyBpbmxpbmUgdTE2IHc5OTY4Y2ZfdmFsaWRfZGVwdGgodTE2IHBhbGV0dGUpOworc3RhdGljIGlubGluZSB1OCB3OTk2OGNmX25lZWRfZGVjb21wcmVzc2lvbih1MTYgcGFsZXR0ZSk7CitzdGF0aWMgaW50IHc5OTY4Y2Zfc2V0X3BpY3R1cmUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwgc3RydWN0IHZpZGVvX3BpY3R1cmUpOworc3RhdGljIGludCB3OTk2OGNmX3NldF93aW5kb3coc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwgc3RydWN0IHZpZGVvX3dpbmRvdyk7CitzdGF0aWMgaW50IHc5OTY4Y2ZfcG9zdHByb2Nlc3NfZnJhbWUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCopOworc3RhdGljIGludCB3OTk2OGNmX2FkanVzdF93aW5kb3dfc2l6ZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLCB1MTYqIHcsIHUxNiogaCk7CitzdGF0aWMgdm9pZCB3OTk2OGNmX2luaXRfZnJhbWVsaXN0KHN0cnVjdCB3OTk2OGNmX2RldmljZSopOworc3RhdGljIHZvaWQgdzk5NjhjZl9wdXNoX2ZyYW1lKHN0cnVjdCB3OTk2OGNmX2RldmljZSosIHU4IGZfbnVtKTsKK3N0YXRpYyB2b2lkIHc5OTY4Y2ZfcG9wX2ZyYW1lKHN0cnVjdCB3OTk2OGNmX2RldmljZSosc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCoqKTsKK3N0YXRpYyB2b2lkIHc5OTY4Y2ZfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CisKKy8qIEludGVybW9kdWxlIGNvbW11bmljYXRpb24gKi8KK3N0YXRpYyBpbnQgdzk5NjhjZl92cHBtb2RfZGV0ZWN0KHN0cnVjdCB3OTk2OGNmX2RldmljZSopOworc3RhdGljIHZvaWQgdzk5NjhjZl92cHBtb2RfcmVsZWFzZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTeW1ib2xpYyBuYW1lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFVzZWQgdG8gcmVwcmVzZW50IGEgbGlzdCBvZiB2YWx1ZXMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgc3ltYm9saWMgbmFtZXMgKi8KK3N0cnVjdCB3OTk2OGNmX3N5bWJvbGljX2xpc3QgeworCWNvbnN0IGludCBudW07CisJY29uc3QgY2hhciAqbmFtZTsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisgIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIG1hdGNoaW5nIGVsZW1lbnQgaW4gdGhlIHN5bWJvbGljX2xpc3QgYXJyYXkuIFRoZQorICBlbmQgb2YgdGhlIGxpc3QgbXVzdCBiZSBtYXJrZWQgd2l0aCBhbiBlbGVtZW50IHRoYXQgaGFzIGEgTlVMTCBuYW1lLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKiAKK3N5bWJvbGljKHN0cnVjdCB3OTk2OGNmX3N5bWJvbGljX2xpc3QgbGlzdFtdLCBjb25zdCBpbnQgbnVtKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgbGlzdFtpXS5uYW1lICE9IE5VTEw7IGkrKykKKwkJaWYgKGxpc3RbaV0ubnVtID09IG51bSkKKwkJCXJldHVybiAobGlzdFtpXS5uYW1lKTsKKworCXJldHVybiAiVW5rbm93biI7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgdzk5NjhjZl9zeW1ib2xpY19saXN0IGNhbWxpc3RbXSA9IHsKKwl7IFc5OTY4Q0ZfTU9EX0dFTkVSSUMsICJXOTk2Wzg3XUNGIEpQRUcgVVNCIER1YWwgTW9kZSBDYW1lcmEiIH0sCisJeyBXOTk2OENGX01PRF9DTFZCV0dQLCAiQ3JlYXRpdmUgTGFicyBWaWRlbyBCbGFzdGVyIFdlYkNhbSBHbyBQbHVzIiB9LAorCisJLyogT3RoZXIgY2FtZXJhcyAoaGF2aW5nIHRoZSBzYW1lIGRlc2NyaXB0b3JzIGFzIEdlbmVyaWMgVzk5Nls4N11DRikgKi8KKwl7IFc5OTY4Q0ZfTU9EX0FEUFZETUEsICJBcm9tYSBEaWdpIFBlbiBWR0EgRHVhbCBNb2RlIEFERy01MDAwIiB9LAorCXsgVzk5ODZDRl9NT0RfQUFVLCAiQVZlck1lZGlhIEFWZXJUViBVU0IiIH0sCisJeyBXOTk2OENGX01PRF9DTFZCV0csICJDcmVhdGl2ZSBMYWJzIFZpZGVvIEJsYXN0ZXIgV2ViQ2FtIEdvIiB9LAorCXsgVzk5NjhDRl9NT0RfTEwsICJMZWJvbiBMREMtMDM1QSIgfSwKKwl7IFc5OTY4Q0ZfTU9EX0VFRU1DLCAiRXpvbmljcyBFWi04MDIgRVpNZWdhIENhbSIgfSwKKwl7IFc5OTY4Q0ZfTU9EX09PRSwgIk9tbmlWaXNpb24gT1Y4NjEwLUVERSIgfSwKKwl7IFc5OTY4Q0ZfTU9EX09EUFZETVBDLCAiT1BDT00gRGlnaSBQZW4gVkdBIER1YWwgTW9kZSBQZW4gQ2FtZXJhIiB9LAorCXsgVzk5NjhDRl9NT0RfUERQSUksICJQcmV0ZWMgRGlnaSBQZW4tSUkiIH0sCisJeyBXOTk2OENGX01PRF9QRFA0ODAsICJQcmV0ZWMgRGlnaVBlbi00ODAiIH0sCisKKwl7ICAtMSwgTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IHc5OTY4Y2Zfc3ltYm9saWNfbGlzdCBzZW5saXN0W10gPSB7CisJeyBDQ19PVjc2QkUsICAgIk9WNzZCRSIgfSwKKwl7IENDX09WNzYxMCwgICAiT1Y3NjEwIiB9LAorCXsgQ0NfT1Y3NjIwLCAgICJPVjc2MjAiIH0sCisJeyBDQ19PVjc2MjBBRSwgIk9WNzYyMEFFIiB9LAorCXsgQ0NfT1Y2NjIwLCAgICJPVjY2MjAiIH0sCisJeyBDQ19PVjY2MzAsICAgIk9WNjYzMCIgfSwKKwl7IENDX09WNjYzMEFFLCAiT1Y2NjMwQUUiIH0sCisJeyBDQ19PVjY2MzBBRiwgIk9WNjYzMEFGIiB9LAorCXsgLTEsIE5VTEwgfQorfTsKKworLyogVmlkZW80TGludXgxIHBhbGV0dGVzICovCitzdGF0aWMgc3RydWN0IHc5OTY4Y2Zfc3ltYm9saWNfbGlzdCB2NGwxX3BsaXN0W10gPSB7CisJeyBWSURFT19QQUxFVFRFX0dSRVksICAgICJHUkVZIiB9LAorCXsgVklERU9fUEFMRVRURV9ISTI0MCwgICAiSEkyNDAiIH0sCisJeyBWSURFT19QQUxFVFRFX1JHQjU2NSwgICJSR0I1NjUiIH0sCisJeyBWSURFT19QQUxFVFRFX1JHQjI0LCAgICJSR0IyNCIgfSwKKwl7IFZJREVPX1BBTEVUVEVfUkdCMzIsICAgIlJHQjMyIiB9LAorCXsgVklERU9fUEFMRVRURV9SR0I1NTUsICAiUkdCNTU1IiB9LAorCXsgVklERU9fUEFMRVRURV9ZVVY0MjIsICAiWVVWNDIyIiB9LAorCXsgVklERU9fUEFMRVRURV9ZVVlWLCAgICAiWVVZViIgfSwKKwl7IFZJREVPX1BBTEVUVEVfVVlWWSwgICAgIlVZVlkiIH0sCisJeyBWSURFT19QQUxFVFRFX1lVVjQyMCwgICJZVVY0MjAiIH0sCisJeyBWSURFT19QQUxFVFRFX1lVVjQxMSwgICJZVVY0MTEiIH0sCisJeyBWSURFT19QQUxFVFRFX1JBVywgICAgICJSQVciIH0sCisJeyBWSURFT19QQUxFVFRFX1lVVjQyMlAsICJZVVY0MjJQIiB9LAorCXsgVklERU9fUEFMRVRURV9ZVVY0MTFQLCAiWVVWNDExUCIgfSwKKwl7IFZJREVPX1BBTEVUVEVfWVVWNDIwUCwgIllVVjQyMFAiIH0sCisJeyBWSURFT19QQUxFVFRFX1lVVjQxMFAsICJZVVY0MTBQIiB9LAorCXsgLTEsIE5VTEwgfQorfTsKKworLyogRGVjb2RlciBlcnJvciBjb2RlczogKi8KK3N0YXRpYyBzdHJ1Y3Qgdzk5NjhjZl9zeW1ib2xpY19saXN0IGRlY29kZXJfZXJybGlzdFtdID0geworCXsgVzk5NjhDRl9ERUNfRVJSX0NPUlJVUFRFRF9EQVRBLCAiQ29ycnVwdGVkIGRhdGEiIH0sCisJeyBXOTk2OENGX0RFQ19FUlJfQlVGX09WRVJGTE9XLCAgICJCdWZmZXIgb3ZlcmZsb3ciIH0sCisJeyBXOTk2OENGX0RFQ19FUlJfTk9fU09JLCAgICAgICAgICJTT0kgbWFya2VyIG5vdCBmb3VuZCIgfSwgICAgIAorCXsgVzk5NjhDRl9ERUNfRVJSX05PX1NPRjAsICAgICAgICAiU09GMCBtYXJrZXIgbm90IGZvdW5kIiB9LAorCXsgVzk5NjhDRl9ERUNfRVJSX05PX1NPUywgICAgICAgICAiU09TIG1hcmtlciBub3QgZm91bmQiIH0sCisJeyBXOTk2OENGX0RFQ19FUlJfTk9fRU9JLCAgICAgICAgICJFT0kgbWFya2VyIG5vdCBmb3VuZCIgfSwKKwl7IC0xLCBOVUxMIH0KK307CisKKy8qIFVSQiBlcnJvciBjb2RlczogKi8KK3N0YXRpYyBzdHJ1Y3Qgdzk5NjhjZl9zeW1ib2xpY19saXN0IHVyYl9lcnJsaXN0W10gPSB7CisJeyAtRU5PTUVNLCAgICAiTm8gbWVtb3J5IGZvciBhbGxvY2F0aW9uIG9mIGludGVybmFsIHN0cnVjdHVyZXMiIH0sCisJeyAtRU5PU1BDLCAgICAiVGhlIGhvc3QgY29udHJvbGxlcidzIGJhbmR3aWR0aCBpcyBhbHJlYWR5IGNvbnN1bWVkIiB9LAorCXsgLUVOT0VOVCwgICAgIlVSQiB3YXMgY2FuY2VsZWQgYnkgdW5saW5rX3VyYiIgfSwKKwl7IC1FWERFViwgICAgICJJU08gdHJhbnNmZXIgb25seSBwYXJ0aWFsbHkgY29tcGxldGVkIiB9LAorCXsgLUVBR0FJTiwgICAgIlRvbyBtYXRjaCBzY2hlZHVsZWQgZm9yIHRoZSBmdXR1cmUiIH0sCisJeyAtRU5YSU8sICAgICAiVVJCIGFscmVhZHkgcXVldWVkIiB9LAorCXsgLUVGQklHLCAgICAgIlRvbyBtdWNoIElTTyBmcmFtZXMgcmVxdWVzdGVkIiB9LAorCXsgLUVOT1NSLCAgICAgIkJ1ZmZlciBlcnJvciAob3ZlcnJ1bikiIH0sCisJeyAtRVBJUEUsICAgICAiU3BlY2lmaWVkIGVuZHBvaW50IGlzIHN0YWxsZWQgKGRldmljZSBub3QgcmVzcG9uZGluZykifSwKKwl7IC1FT1ZFUkZMT1csICJCYWJibGUgKGJhZCBjYWJsZT8pIiB9LAorCXsgLUVQUk9UTywgICAgIkJpdC1zdHVmZiBlcnJvciAoYmFkIGNhYmxlPykiIH0sCisJeyAtRUlMU0VRLCAgICAiQ1JDL1RpbWVvdXQiIH0sCisJeyAtRVRJTUVET1VULCAiTkFLIChkZXZpY2UgZG9lcyBub3QgcmVzcG9uZCkiIH0sCisJeyAtMSwgTlVMTCB9Cit9OworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkKiBydm1hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdm9pZCogbWVtOworCXVuc2lnbmVkIGxvbmcgYWRyOworCisJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CisJbWVtID0gdm1hbGxvY18zMihzaXplKTsKKwlpZiAoIW1lbSkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQobWVtLCAwLCBzaXplKTsgLyogQ2xlYXIgdGhlIHJhbSBvdXQsIG5vIGp1bmsgdG8gdGhlIHVzZXIgKi8KKwlhZHIgPSAodW5zaWduZWQgbG9uZykgbWVtOworCXdoaWxlIChzaXplID4gMCkgeworCQlTZXRQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7CisJCWFkciArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0KKworCXJldHVybiBtZW07Cit9CisKKworc3RhdGljIHZvaWQgcnZmcmVlKHZvaWQqIG1lbSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgYWRyOworCisJaWYgKCFtZW0pCisJCXJldHVybjsKKworCWFkciA9ICh1bnNpZ25lZCBsb25nKSBtZW07CisJd2hpbGUgKChsb25nKSBzaXplID4gMCkgeworCQlDbGVhclBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKKwkJYWRyICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCXZmcmVlKG1lbSk7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBEZWFsbG9jYXRlIHByZXZpb3VzbHkgYWxsb2NhdGVkIG1lbW9yeS4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgdzk5NjhjZl9kZWFsbG9jYXRlX21lbW9yeShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwl1OCBpOworCisJLyogRnJlZSB0aGUgaXNvY2hyb25vdXMgdHJhbnNmZXIgYnVmZmVycyAqLworCWZvciAoaSA9IDA7IGkgPCBXOTk2OENGX1VSQlM7IGkrKykgeworCQlrZnJlZShjYW0tPnRyYW5zZmVyX2J1ZmZlcltpXSk7CisJCWNhbS0+dHJhbnNmZXJfYnVmZmVyW2ldID0gTlVMTDsKKwl9CisKKwkvKiBGcmVlIHRlbXBvcmFyeSBmcmFtZSBidWZmZXIgKi8KKwlpZiAoY2FtLT5mcmFtZV90bXAuYnVmZmVyKSB7CisJCXJ2ZnJlZShjYW0tPmZyYW1lX3RtcC5idWZmZXIsIGNhbS0+ZnJhbWVfdG1wLnNpemUpOworCQljYW0tPmZyYW1lX3RtcC5idWZmZXIgPSBOVUxMOworCX0KKworCS8qIEZyZWUgaGVscGVyIGJ1ZmZlciAqLworCWlmIChjYW0tPmZyYW1lX3ZwcC5idWZmZXIpIHsKKwkJcnZmcmVlKGNhbS0+ZnJhbWVfdnBwLmJ1ZmZlciwgY2FtLT5mcmFtZV92cHAuc2l6ZSk7CisJCWNhbS0+ZnJhbWVfdnBwLmJ1ZmZlciA9IE5VTEw7CisJfQorCisJLyogRnJlZSB2aWRlbyBmcmFtZSBidWZmZXJzICovCisJaWYgKGNhbS0+ZnJhbWVbMF0uYnVmZmVyKSB7CisJCXJ2ZnJlZShjYW0tPmZyYW1lWzBdLmJ1ZmZlciwgY2FtLT5uYnVmZmVycypjYW0tPmZyYW1lWzBdLnNpemUpOworCQljYW0tPmZyYW1lWzBdLmJ1ZmZlciA9IE5VTEw7CisJfQorCisJY2FtLT5uYnVmZmVycyA9IDA7CisKKwlEQkcoNSwgIk1lbW9yeSBzdWNjZXNzZnVsbHkgZGVhbGxvY2F0ZWQiKQorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgQWxsb2NhdGUgbWVtb3J5IGJ1ZmZlcnMgZm9yIFVTQiB0cmFuc2ZlcnMgYW5kIHZpZGVvIGZyYW1lcy4KKyAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgb3BlbigpIG9ubHkuCisgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgbnVtYmVyIG90aGVyd2lzZS4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCB3OTk2OGNmX2FsbG9jYXRlX21lbW9yeShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwljb25zdCB1MTYgcF9zaXplID0gd01heFBhY2tldFNpemVbY2FtLT5hbHRzZXR0aW5nLTFdOworCXZvaWQqIGJ1ZmYgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgaHdfYnVmc2l6ZSwgdnBwX2J1ZnNpemU7CisJdTggaSwgYnBwOworCisJLyogTk9URTogRGVhbGxvY2F0aW9uIGlzIGRvbmUgZWxzZXdoZXJlIGluIGNhc2Ugb2YgZXJyb3IgKi8KKworCS8qIENhbGN1bGF0ZSB0aGUgbWF4IGFtb3VudCBvZiByYXcgZGF0YSBwZXIgZnJhbWUgZnJvbSB0aGUgZGV2aWNlICovCisJaHdfYnVmc2l6ZSA9IGNhbS0+bWF4d2lkdGgqY2FtLT5tYXhoZWlnaHQqMjsKKworCS8qIENhbGN1bGF0ZSB0aGUgbWF4IGJ1Zi4gc2l6ZSBuZWVkZWQgZm9yIHBvc3QtcHJvY2Vzc2luZyByb3V0aW5lcyAqLworCWJwcCA9ICh3OTk2OGNmX3ZwcCkgPyA0IDogMjsKKwlpZiAoY2FtLT51cHNjYWxpbmcpCisJCXZwcF9idWZzaXplID0gbWF4KFc5OTY4Q0ZfTUFYX1dJRFRIKlc5OTY4Q0ZfTUFYX0hFSUdIVCpicHAsCisJCSAgICAgICAgICAgICAgICAgIGNhbS0+bWF4d2lkdGgqY2FtLT5tYXhoZWlnaHQqYnBwKTsKKwllbHNlCisJCXZwcF9idWZzaXplID0gY2FtLT5tYXh3aWR0aCpjYW0tPm1heGhlaWdodCpicHA7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpc29jaHJvbm91cyB0cmFuc2ZlciBidWZmZXJzICovCisJZm9yIChpID0gMDsgaSA8IFc5OTY4Q0ZfVVJCUzsgaSsrKSB7CisJCWlmICghKGNhbS0+dHJhbnNmZXJfYnVmZmVyW2ldID0KKwkJICAgICAga21hbGxvYyhXOTk2OENGX0lTT19QQUNLRVRTKnBfc2l6ZSwgR0ZQX0tFUk5FTCkpKSB7CisJCQlEQkcoMSwgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGlzb2Nocm9ub3VzICIKKwkJCSAgICAgICAidHJhbnNmZXIgYnVmZmVycyAoJXUgYnl0ZXMpIiwgCisJCQkgICAgcF9zaXplICogVzk5NjhDRl9JU09fUEFDS0VUUykKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1lbXNldChjYW0tPnRyYW5zZmVyX2J1ZmZlcltpXSwgMCwgVzk5NjhDRl9JU09fUEFDS0VUUypwX3NpemUpOworCX0KKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHRlbXBvcmFyeSBmcmFtZSBidWZmZXIgKi8KKwlpZiAoIShjYW0tPmZyYW1lX3RtcC5idWZmZXIgPSBydm1hbGxvYyhod19idWZzaXplKSkpIHsKKwkJREJHKDEsICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSB0ZW1wb3JhcnkgIgorCQkgICAgICAgInZpZGVvIGZyYW1lIGJ1ZmZlciAoJWx1IGJ5dGVzKSIsIGh3X2J1ZnNpemUpCisJCXJldHVybiAtRU5PTUVNOworCX0KKwljYW0tPmZyYW1lX3RtcC5zaXplID0gaHdfYnVmc2l6ZTsKKwljYW0tPmZyYW1lX3RtcC5udW1iZXIgPSAtMTsKKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGhlbHBlciBidWZmZXIgKi8KKwlpZiAodzk5NjhjZl92cHApIHsKKwkJaWYgKCEoY2FtLT5mcmFtZV92cHAuYnVmZmVyID0gcnZtYWxsb2ModnBwX2J1ZnNpemUpKSkgeworCQkJREJHKDEsICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBoZWxwZXIgYnVmZmVyIgorCQkJICAgICAgICIgKCVsdSBieXRlcykiLCB2cHBfYnVmc2l6ZSkKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWNhbS0+ZnJhbWVfdnBwLnNpemUgPSB2cHBfYnVmc2l6ZTsKKwl9IGVsc2UKKwkJY2FtLT5mcmFtZV92cHAuYnVmZmVyID0gTlVMTDsKKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdmlkZW8gZnJhbWUgYnVmZmVycyAqLworCWNhbS0+bmJ1ZmZlcnMgPSBjYW0tPm1heF9idWZmZXJzOworCXdoaWxlIChjYW0tPm5idWZmZXJzID49IDIpIHsKKwkJaWYgKChidWZmID0gcnZtYWxsb2MoY2FtLT5uYnVmZmVycyAqIHZwcF9idWZzaXplKSkpCisJCQlicmVhazsKKwkJZWxzZQorCQkJY2FtLT5uYnVmZmVycy0tOworCX0KKworCWlmICghYnVmZikgeworCQlEQkcoMSwgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHZpZGVvIGZyYW1lIGJ1ZmZlcnMiKQorCQljYW0tPm5idWZmZXJzID0gMDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKGNhbS0+bmJ1ZmZlcnMgIT0gY2FtLT5tYXhfYnVmZmVycykKKwkJREJHKDIsICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICV1IHZpZGVvIGZyYW1lIGJ1ZmZlcnMuICIKKwkJICAgICAgICJPbmx5IG1lbW9yeSBmb3IgJXUgYnVmZmVycyBoYXMgYmVlbiBhbGxvY2F0ZWQiLAorCQkgICAgY2FtLT5tYXhfYnVmZmVycywgY2FtLT5uYnVmZmVycykKKworCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5idWZmZXJzOyBpKyspIHsKKwkJY2FtLT5mcmFtZVtpXS5idWZmZXIgPSBidWZmICsgaSp2cHBfYnVmc2l6ZTsKKwkJY2FtLT5mcmFtZVtpXS5zaXplID0gdnBwX2J1ZnNpemU7CisJCWNhbS0+ZnJhbWVbaV0ubnVtYmVyID0gaTsKKwkJLyogQ2lyY3VsYXIgbGlzdCAqLworCQlpZiAoaSAhPSBjYW0tPm5idWZmZXJzLTEpCisJCQljYW0tPmZyYW1lW2ldLm5leHQgPSAmY2FtLT5mcmFtZVtpKzFdOworCQllbHNlCisJCQljYW0tPmZyYW1lW2ldLm5leHQgPSAmY2FtLT5mcmFtZVswXTsKKwkJY2FtLT5mcmFtZVtpXS5zdGF0dXMgPSBGX1VOVVNFRDsKKwl9CisKKwlEQkcoNSwgIk1lbW9yeSBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkIikKKwlyZXR1cm4gMDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBVU0Itc3BlY2lmaWMgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVGhpcyBpcyBhbiBoYW5kbGVyIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBhZnRlciB0aGUgVVJCcyBhcmUgY29tcGxldGVkLgorICBJdCBjb2xsZWN0cyBtdWx0aXBsZSBkYXRhIHBhY2tldHMgY29taW5nIGZyb20gdGhlIGNhbWVyYSBieSBwdXR0aW5nIHRoZW0KKyAgaW50byBmcmFtZSBidWZmZXJzOiBvbmUgb3IgbW9yZSB6ZXJvIGRhdGEgbGVuZ3RoIGRhdGEgcGFja2V0cyBhcmUgdXNlZCB0bworICBtYXJrIHRoZSBlbmQgb2YgYSB2aWRlbyBmcmFtZTsgdGhlIGZpcnN0IG5vbi16ZXJvIGRhdGEgcGFja2V0IGlzIHRoZSBzdGFydAorICBvZiB0aGUgbmV4dCB2aWRlbyBmcmFtZTsgaWYgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQgaW4gYSBwYWNrZXQsIHRoZSBlbnRpcmUKKyAgdmlkZW8gZnJhbWUgaXMgZGlzY2FyZGVkIGFuZCBncmFiYmVkIGFnYWluLgorICBJZiB0aGVyZSBhcmUgbm8gcmVxdWVzdGVkIGZyYW1lcyBpbiB0aGUgRklGTyBsaXN0LCBwYWNrZXRzIGFyZSBjb2xsZWN0ZWQgaW50bworICBhIHRlbXBvcmFyeSBidWZmZXIuIAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCB3OTk2OGNmX3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtID0gKHN0cnVjdCB3OTk2OGNmX2RldmljZSopdXJiLT5jb250ZXh0OworCXN0cnVjdCB3OTk2OGNmX2ZyYW1lX3QqKiBmOworCXVuc2lnbmVkIGludCBsZW4sIHN0YXR1czsKKwl2b2lkKiBwb3M7CisJdTggaTsKKwlpbnQgZXJyID0gMDsKKworCWlmICgoIWNhbS0+c3RyZWFtaW5nKSB8fCBjYW0tPmRpc2Nvbm5lY3RlZCkgeworCQlEQkcoNCwgIkdvdCBpbnRlcnJ1cHQsIGJ1dCBub3Qgc3RyZWFtaW5nIikKKwkJcmV0dXJuOworCX0KKworCS8qICIoKmYpIiB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiAiY2FtLT5mcmFtZV9jdXJyZW50IiAqLworCWYgPSAmY2FtLT5mcmFtZV9jdXJyZW50OworCisJLyogSWYgYSBmcmFtZSBoYXMgYmVlbiByZXF1ZXN0ZWQgYW5kIHdlIGFyZSBncmFiYmluZyBpbnRvICAKKwkgICB0aGUgdGVtcG9yYXJ5IGZyYW1lLCB3ZSdsbCBzd2l0Y2ggdG8gdGhhdCByZXF1ZXN0ZWQgZnJhbWUgKi8KKwlpZiAoKCpmKSA9PSAmY2FtLT5mcmFtZV90bXAgJiYgKmNhbS0+cmVxdWVzdGVkX2ZyYW1lKSB7CisJCWlmIChjYW0tPmZyYW1lX3RtcC5zdGF0dXMgPT0gRl9HUkFCQklORykgeworCQkJdzk5NjhjZl9wb3BfZnJhbWUoY2FtLCAmY2FtLT5mcmFtZV9jdXJyZW50KTsKKwkJCSgqZiktPnN0YXR1cyA9IEZfR1JBQkJJTkc7CisJCQkoKmYpLT5sZW5ndGggPSBjYW0tPmZyYW1lX3RtcC5sZW5ndGg7CisJCQltZW1jcHkoKCpmKS0+YnVmZmVyLCBjYW0tPmZyYW1lX3RtcC5idWZmZXIsCisJCQkgICAgICAgKCpmKS0+bGVuZ3RoKTsKKwkJCURCRyg2LCAiU3dpdGNoZWQgZnJvbSB0ZW1wLiBmcmFtZSB0byBmcmFtZSAjJWQiLCAKKwkJCSAgICAoKmYpLT5udW1iZXIpCisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CisJCWxlbiA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKKwkJc3RhdHVzID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXM7CisJCXBvcyA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0ICsgdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwkJaWYgKHN0YXR1cyAmJiBsZW4gIT0gMCkgeworCQkJREJHKDQsICJVUkIgZmFpbGVkLCBlcnJvciBpbiBkYXRhIHBhY2tldCAiCisJCQkgICAgICAgIihlcnJvciAjJXUsICVzKSIsCisJCQkgICAgc3RhdHVzLCBzeW1ib2xpYyh1cmJfZXJybGlzdCwgc3RhdHVzKSkKKwkJCSgqZiktPnN0YXR1cyA9IEZfRVJST1I7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChsZW4pIHsgLyogc3RhcnQgb2YgZnJhbWUgKi8KKworCQkJaWYgKCgqZiktPnN0YXR1cyA9PSBGX1VOVVNFRCkgeworCQkJCSgqZiktPnN0YXR1cyA9IEZfR1JBQkJJTkc7CisJCQkJKCpmKS0+bGVuZ3RoID0gMDsKKwkJCX0KKworCQkJLyogQnVmZmVyIG92ZXJmbG93cyBzaG91bGRuJ3QgaGFwcGVuLCBob3dldmVyLi4uKi8KKwkJCWlmICgoKmYpLT5sZW5ndGggKyBsZW4gPiAoKmYpLT5zaXplKSB7CisJCQkJREJHKDQsICJCdWZmZXIgb3ZlcmZsb3c6IGJhZCBkYXRhIHBhY2tldHMiKQorCQkJCSgqZiktPnN0YXR1cyA9IEZfRVJST1I7CisJCQl9CisKKwkJCWlmICgoKmYpLT5zdGF0dXMgPT0gRl9HUkFCQklORykgeworCQkJCW1lbWNweSgoKmYpLT5idWZmZXIgKyAoKmYpLT5sZW5ndGgsIHBvcywgbGVuKTsKKwkJCQkoKmYpLT5sZW5ndGggKz0gbGVuOworCQkJfQorCisJCX0gZWxzZSBpZiAoKCpmKS0+c3RhdHVzID09IEZfR1JBQkJJTkcpIHsgLyogZW5kIG9mIGZyYW1lICovCisKKwkJCURCRyg2LCAiRnJhbWUgIyVkIHN1Y2Nlc3NmdWxseSBncmFiYmVkIiwgKCpmKS0+bnVtYmVyKQorCisJCQlpZiAoY2FtLT52cHBfZmxhZyAmIFZQUF9ERUNPTVBSRVNTSU9OKSB7CisJCQkJZXJyID0gdzk5NjhjZl92cHAtPmNoZWNrX2hlYWRlcnMoKCpmKS0+YnVmZmVyLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqZiktPmxlbmd0aCk7CisJCQkJaWYgKGVycikgeworCQkJCQlEQkcoNCwgIlNraXAgY29ycnVwdGVkIGZyYW1lOiAlcyIsCisJCQkJCSAgICBzeW1ib2xpYyhkZWNvZGVyX2Vycmxpc3QsIGVycikpCisJCQkJCSgqZiktPnN0YXR1cyA9IEZfVU5VU0VEOworCQkJCQljb250aW51ZTsgLyogZ3JhYiB0aGlzIGZyYW1lIGFnYWluICovCisJCQkJfQorCQkJfQorCisJCQkoKmYpLT5zdGF0dXMgPSBGX1JFQURZOworCQkJKCpmKS0+cXVldWVkID0gMDsKKworCQkJLyogVGFrZSBhIHBvaW50ZXIgdG8gdGhlIG5ldyBmcmFtZSBmcm9tIHRoZSBGSUZPIGxpc3QuCisJCQkgICBJZiB0aGUgbGlzdCBpcyBlbXB0eSx3ZSdsbCB1c2UgdGhlIHRlbXBvcmFyeSBmcmFtZSovCisJCQlpZiAoKmNhbS0+cmVxdWVzdGVkX2ZyYW1lKQorCQkJCXc5OTY4Y2ZfcG9wX2ZyYW1lKGNhbSwgJmNhbS0+ZnJhbWVfY3VycmVudCk7CisJCQllbHNlIHsKKwkJCQljYW0tPmZyYW1lX2N1cnJlbnQgPSAmY2FtLT5mcmFtZV90bXA7CisJCQkJKCpmKS0+c3RhdHVzID0gRl9VTlVTRUQ7CisJCQl9CisKKwkJfSBlbHNlIGlmICgoKmYpLT5zdGF0dXMgPT0gRl9FUlJPUikKKwkJCSgqZiktPnN0YXR1cyA9IEZfVU5VU0VEOyAvKiBncmFiIGl0IGFnYWluICovCisKKwkJUERCR0coIkZyYW1lIGxlbmd0aCAlbHUgfCBwYWNrLiMldSB8IHBhY2subGVuLiAldSB8IHN0YXRlICVkIiwKKwkJICAgICAgKHVuc2lnbmVkIGxvbmcpKCpmKS0+bGVuZ3RoLCBpLCBsZW4sICgqZiktPnN0YXR1cykKKworCX0gLyogZW5kIGZvciAqLworCisJLyogUmVzdWJtaXQgdGhpcyBVUkIgKi8KKwl1cmItPmRldiA9IGNhbS0+dXNiZGV2OworCXVyYi0+c3RhdHVzID0gMDsKKwlzcGluX2xvY2soJmNhbS0+dXJiX2xvY2spOworCWlmIChjYW0tPnN0cmVhbWluZykKKwkJaWYgKChlcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSkgeworCQkJY2FtLT5taXNjb25maWd1cmVkID0gMTsKKwkJCURCRygxLCAiQ291bGRuJ3QgcmVzdWJtaXQgdGhlIFVSQjogZXJyb3IgJWQsICVzIiwKKwkJCSAgICBlcnIsIHN5bWJvbGljKHVyYl9lcnJsaXN0LCBlcnIpKQorCQl9CisJc3Bpbl91bmxvY2soJmNhbS0+dXJiX2xvY2spOworCisJLyogV2FrZSB1cCB0aGUgdXNlciBwcm9jZXNzICovCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjYW0tPndhaXRfcXVldWUpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFNldHVwIHRoZSBVUkIgc3RydWN0dXJlcyBmb3IgdGhlIGlzb2Nocm9ub3VzIHRyYW5zZmVyLgorICBTdWJtaXQgdGhlIFVSQnMgc28gdGhhdCB0aGUgZGF0YSB0cmFuc2ZlciBiZWdpbnMuCisgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgbnVtYmVyIG90aGVyd2lzZS4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgdzk5NjhjZl9zdGFydF90cmFuc2ZlcihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGNhbS0+dXNiZGV2OworCXN0cnVjdCB1cmIqIHVyYjsKKwljb25zdCB1MTYgcF9zaXplID0gd01heFBhY2tldFNpemVbY2FtLT5hbHRzZXR0aW5nLTFdOworCXUxNiB3LCBoLCBkOworCWludCB2aWRjYXB0OworCXUzMiB0X3NpemU7CisJaW50IGVyciA9IDA7CisJczggaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBXOTk2OENGX1VSQlM7IGkrKykgeworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKFc5OTY4Q0ZfSVNPX1BBQ0tFVFMsIEdGUF9LRVJORUwpOworCQljYW0tPnVyYltpXSA9IHVyYjsKKwkJaWYgKCF1cmIpIHsKKwkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCisJCQkJdXNiX2ZyZWVfdXJiKGNhbS0+dXJiW2pdKTsKKwkJCURCRygxLCAiQ291bGRuJ3QgYWxsb2NhdGUgdGhlIFVSQiBzdHJ1Y3R1cmVzIikKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJdXJiLT5kZXYgPSB1ZGV2OworCQl1cmItPmNvbnRleHQgPSAodm9pZCopY2FtOworCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUodWRldiwgMSk7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBXOTk2OENGX0lTT19QQUNLRVRTOworCQl1cmItPmNvbXBsZXRlID0gdzk5NjhjZl91cmJfY29tcGxldGU7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gY2FtLT50cmFuc2Zlcl9idWZmZXJbaV07CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHBfc2l6ZSpXOTk2OENGX0lTT19QQUNLRVRTOworCQl1cmItPmludGVydmFsID0gMTsKKwkJZm9yIChqID0gMDsgaiA8IFc5OTY4Q0ZfSVNPX1BBQ0tFVFM7IGorKykgeworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5vZmZzZXQgPSBwX3NpemUqajsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ubGVuZ3RoID0gcF9zaXplOworCQl9CisJfQorCisJLyogVHJhbnNmZXIgc2l6ZSBwZXIgZnJhbWUsIGluIFdPUkQgISAqLworCWQgPSBjYW0tPmh3X2RlcHRoOworCXcgPSBjYW0tPmh3X3dpZHRoOworCWggPSBjYW0tPmh3X2hlaWdodDsKKworCXRfc2l6ZSA9ICh3KmgqZCkvMTY7CisKKwllcnIgPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4YmYxNywgMHgwMCk7IC8qIHJlc2V0IGV2ZXJ5dGhpbmcgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweGJmMTAsIDB4MDApOyAvKiBub3JtYWwgb3BlcmF0aW9uICovCisKKwkvKiBUcmFuc2ZlciBzaXplICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdF9zaXplICYgMHhmZmZmLCAweDNkKTsgLyogbG93IGJpdHMgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB0X3NpemUgPj4gMTYsIDB4M2UpOyAgICAvKiBoaWdoIGJpdHMgKi8KKworCWlmIChjYW0tPnZwcF9mbGFnICYgVlBQX0RFQ09NUFJFU1NJT04pCisJCWVyciArPSB3OTk2OGNmX3VwbG9hZF9xdWFudGl6YXRpb250YWJsZXMoY2FtKTsKKworCXZpZGNhcHQgPSB3OTk2OGNmX3JlYWRfcmVnKGNhbSwgMHgxNik7IC8qIHJlYWQgcGljdHVyZSBzZXR0aW5ncyAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHZpZGNhcHR8MHg4MDAwLCAweDE2KTsgLyogY2FwdC4gZW5hYmxlICovCisKKwllcnIgKz0gdXNiX3NldF9pbnRlcmZhY2UodWRldiwgMCwgY2FtLT5hbHRzZXR0aW5nKTsKKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweDhhMDUsIDB4M2MpOyAvKiBVU0IgRklGTyBlbmFibGUgKi8KKworCWlmIChlcnIgfHwgKHZpZGNhcHQgPCAwKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgVzk5NjhDRl9VUkJTOyBpKyspCisJCQl1c2JfZnJlZV91cmIoY2FtLT51cmJbaV0pOworCQlEQkcoMSwgIkNvdWxkbid0IHRlbGwgdGhlIGNhbWVyYSB0byBzdGFydCB0aGUgZGF0YSB0cmFuc2ZlciIpCisJCXJldHVybiBlcnI7CisJfQorCisJdzk5NjhjZl9pbml0X2ZyYW1lbGlzdChjYW0pOworCisJLyogQmVnaW4gdG8gZ3JhYiBpbnRvIHRoZSB0ZW1wb3JhcnkgYnVmZmVyICovCisJY2FtLT5mcmFtZV90bXAuc3RhdHVzID0gRl9VTlVTRUQ7CisJY2FtLT5mcmFtZV90bXAucXVldWVkID0gMDsKKwljYW0tPmZyYW1lX2N1cnJlbnQgPSAmY2FtLT5mcmFtZV90bXA7CisKKwlpZiAoIShjYW0tPnZwcF9mbGFnICYgVlBQX0RFQ09NUFJFU1NJT04pKQorCQlEQkcoNSwgIklzb2Nocm9ub3VzIHRyYW5zZmVyIHNpemU6ICVsdSBieXRlcy9mcmFtZSIsIAorCQkgICAgKHVuc2lnbmVkIGxvbmcpdF9zaXplKjIpCisKKwlEQkcoNSwgIlN0YXJ0aW5nIHRoZSBpc29jaHJvbm91cyB0cmFuc2Zlci4uLiIpCisKKwljYW0tPnN0cmVhbWluZyA9IDE7CisKKwkvKiBTdWJtaXQgdGhlIFVSQnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVzk5NjhDRl9VUkJTOyBpKyspIHsKKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIoY2FtLT51cmJbaV0sIEdGUF9LRVJORUwpOworCQlpZiAoZXJyKSB7CisJCQljYW0tPnN0cmVhbWluZyA9IDA7CisJCQlmb3IgKGogPSBpLTE7IGogPj0gMDsgai0tKSB7CisJCQkJdXNiX2tpbGxfdXJiKGNhbS0+dXJiW2pdKTsKKwkJCQl1c2JfZnJlZV91cmIoY2FtLT51cmJbal0pOworCQkJfQorCQkJREJHKDEsICJDb3VsZG4ndCBzZW5kIGEgdHJhbnNmZXIgcmVxdWVzdCB0byB0aGUgIgorCQkJICAgICAgICJVU0IgY29yZSAoZXJyb3IgIyVkLCAlcykiLCBlcnIsIAorCQkJICAgIHN5bWJvbGljKHVyYl9lcnJsaXN0LCBlcnIpKQorCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgU3RvcCB0aGUgaXNvY2hyb25vdXMgdHJhbnNmZXIgYW5kIHNldCBhbHRlcm5hdGUgc2V0dGluZyB0byAwICgwTWIvcykuCisgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgbnVtYmVyIG90aGVyd2lzZS4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCB3OTk2OGNmX3N0b3BfdHJhbnNmZXIoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBjYW0tPnVzYmRldjsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJaW50IGVyciA9IDA7CisJczggaTsKKworCWlmICghY2FtLT5zdHJlYW1pbmcpCisJCXJldHVybiAwOworCisJLyogVGhpcyBhdm9pZHMgcmFjZSBjb25kaXRpb25zIHdpdGggdXNiX3N1Ym1pdF91cmIoKSAKKwkgICBpbiB0aGUgVVJCIGNvbXBsZXRpdGlvbiBoYW5kbGVyICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+dXJiX2xvY2ssIGxvY2tfZmxhZ3MpOworCWNhbS0+c3RyZWFtaW5nID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPnVyYl9sb2NrLCBsb2NrX2ZsYWdzKTsKKworCWZvciAoaSA9IFc5OTY4Q0ZfVVJCUy0xOyBpID49IDA7IGktLSkKKwkJaWYgKGNhbS0+dXJiW2ldKSB7CisJCQl1c2Jfa2lsbF91cmIoY2FtLT51cmJbaV0pOworCQkJdXNiX2ZyZWVfdXJiKGNhbS0+dXJiW2ldKTsKKwkJCWNhbS0+dXJiW2ldID0gTlVMTDsKKwkJfQorCisJaWYgKGNhbS0+ZGlzY29ubmVjdGVkKQorCQlnb3RvIGV4aXQ7CisKKwllcnIgPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4MGEwNSwgMHgzYyk7IC8qIHN0b3AgVVNCIHRyYW5zZmVyICovCisJZXJyICs9IHVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsIDAsIDApOyAvKiAwIE1iL3MgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweDAwMDAsIDB4MzkpOyAvKiBkaXNhYmxlIEpQRUcgZW5jb2RlciAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4MDAwMCwgMHgxNik7IC8qIHN0b3AgdmlkZW8gY2FwdHVyZSAqLworCisJaWYgKGVycikgeworCQlEQkcoMiwgIkZhaWxlZCB0byB0ZWxsIHRoZSBjYW1lcmEgdG8gc3RvcCB0aGUgaXNvY2hyb25vdXMgIgorCQkgICAgICAgInRyYW5zZmVyLiBIb3dldmVyIHRoaXMgaXMgbm90IGEgY3JpdGljYWwgZXJyb3IuIikKKwkJcmV0dXJuIC1FSU87CisJfQorCitleGl0OgorCURCRyg1LCAiSXNvY2hyb25vdXMgdHJhbnNmZXIgc3RvcHBlZCIpCisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBXcml0ZSBhIFc5OTY4Q0YgcmVnaXN0ZXIuIAorICBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvdGhlcndpc2UuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgdzk5NjhjZl93cml0ZV9yZWcoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIHUxNiB2YWx1ZSwgdTE2IGluZGV4KQoreworCXN0cnVjdCB1c2JfZGV2aWNlKiB1ZGV2ID0gY2FtLT51c2JkZXY7CisJaW50IHJlczsKKworCXJlcyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIDAsCisJICAgICAgICAgICAgICAgICAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIGluZGV4LCBOVUxMLCAwLCBXOTk2OENGX1VTQl9DVFJMX1RJTUVPVVQpOworCisJaWYgKHJlcyA8IDApCisJCURCRyg0LCAiRmFpbGVkIHRvIHdyaXRlIGEgcmVnaXN0ZXIgIgorCQkgICAgICAgIih2YWx1ZSAweCUwNFgsIGluZGV4IDB4JTAyWCwgZXJyb3IgIyVkLCAlcykiLAorCQkgICAgdmFsdWUsIGluZGV4LCByZXMsIHN5bWJvbGljKHVyYl9lcnJsaXN0LCByZXMpKQorCisJcmV0dXJuIChyZXMgPj0gMCkgPyAwIDogLTE7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBSZWFkIGEgVzk5NjhDRiByZWdpc3Rlci4gCisgIFJldHVybiB0aGUgcmVnaXN0ZXIgdmFsdWUgb24gc3VjY2VzcywgLTEgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHc5OTY4Y2ZfcmVhZF9yZWcoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIHUxNiBpbmRleCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSogdWRldiA9IGNhbS0+dXNiZGV2OworCXUxNiogYnVmZiA9IGNhbS0+Y29udHJvbF9idWZmZXI7CisJaW50IHJlczsKKworCXJlcyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDEsCisJICAgICAgICAgICAgICAgICAgICAgIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCSAgICAgICAgICAgICAgICAgICAgICAwLCBpbmRleCwgYnVmZiwgMiwgVzk5NjhDRl9VU0JfQ1RSTF9USU1FT1VUKTsKKworCWlmIChyZXMgPCAwKQorCQlEQkcoNCwgIkZhaWxlZCB0byByZWFkIGEgcmVnaXN0ZXIgIgorCQkgICAgICAgIihpbmRleCAweCUwMlgsIGVycm9yICMlZCwgJXMpIiwKKwkJICAgIGluZGV4LCByZXMsIHN5bWJvbGljKHVyYl9lcnJsaXN0LCByZXMpKQorCisJcmV0dXJuIChyZXMgPj0gMCkgPyAoaW50KSgqYnVmZikgOiAtMTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFdyaXRlIDY0LWJpdCBkYXRhIHRvIHRoZSBmYXN0IHNlcmlhbCBidXMgcmVnaXN0ZXJzLgorICBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvdGhlcndpc2UuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgdzk5NjhjZl93cml0ZV9mc2Ioc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIHUxNiogZGF0YSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSogdWRldiA9IGNhbS0+dXNiZGV2OworCXUxNiB2YWx1ZTsKKwlpbnQgcmVzOworCisJdmFsdWUgPSAqZGF0YSsrOworCisJcmVzID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMCwKKwkgICAgICAgICAgICAgICAgICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfREVWSUNFLAorCSAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgMHgwNiwgZGF0YSwgNiwgVzk5NjhDRl9VU0JfQ1RSTF9USU1FT1VUKTsKKworCWlmIChyZXMgPCAwKQorCQlEQkcoNCwgIkZhaWxlZCB0byB3cml0ZSB0aGUgRlNCIHJlZ2lzdGVycyAiCisJCSAgICAgICAiKGVycm9yICMlZCwgJXMpIiwgcmVzLCBzeW1ib2xpYyh1cmJfZXJybGlzdCwgcmVzKSkKKworCXJldHVybiAocmVzID49IDApID8gMCA6IC0xOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgV3JpdGUgZGF0YSB0byB0aGUgc2VyaWFsIGJ1cyBjb250cm9sIHJlZ2lzdGVyLgorICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIG51bWJlciBvdGhlcndpc2UuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgdzk5NjhjZl93cml0ZV9zYihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgdTE2IHZhbHVlKQoreworCWludCBlcnIgPSAwOworCisJZXJyID0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB2YWx1ZSwgMHgwMSk7CisJdWRlbGF5KFc5OTY4Q0ZfSTJDX0JVU19ERUxBWSk7CisKKwlyZXR1cm4gZXJyOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgUmVhZCBkYXRhIGZyb20gdGhlIHNlcmlhbCBidXMgY29udHJvbCByZWdpc3Rlci4KKyAgUmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHc5OTY4Y2ZfcmVhZF9zYihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgdiA9IDA7CisKKwl2ID0gdzk5NjhjZl9yZWFkX3JlZyhjYW0sIDB4MDEpOworCXVkZWxheShXOTk2OENGX0kyQ19CVVNfREVMQVkpOworCisJcmV0dXJuIHY7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBVcGxvYWQgcXVhbnRpemF0aW9uIHRhYmxlcyBmb3IgdGhlIEpQRUcgY29tcHJlc3Npb24uCisgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHc5OTY4Y2Zfc3RhcnRfdHJhbnNmZXIoKS4KKyAgUmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHc5OTY4Y2ZfdXBsb2FkX3F1YW50aXphdGlvbnRhYmxlcyhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwl1MTYgYSwgYjsKKwlpbnQgZXJyID0gMCwgaSwgajsKKworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4MDAxMCwgMHgzOSk7IC8qIEpQRUcgY2xvY2sgZW5hYmxlICovCisKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IDMyOyBpKyssIGogKz0gMikgeworCQlhID0gWV9RVUFOVEFCTEVbal0gfCAoKHVuc2lnbmVkKShZX1FVQU5UQUJMRVtqKzFdKSA8PCA4KTsKKwkJYiA9IFVWX1FVQU5UQUJMRVtqXSB8ICgodW5zaWduZWQpKFVWX1FVQU5UQUJMRVtqKzFdKSA8PCA4KTsKKwkJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgYSwgMHg0MCtpKTsKKwkJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgYiwgMHg2MCtpKTsKKwl9CisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHgwMDEyLCAweDM5KTsgLyogSlBFRyBlbmNvZGVyIGVuYWJsZSAqLworCisJcmV0dXJuIGVycjsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBMb3ctbGV2ZWwgSTJDIEkvTyBmdW5jdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBJMkMgdHJhbnNmZXIgZnVuY3Rpb25zOiAgICAgICAgICAgICAgICoKKyAqIGkyY19hZGFwX2Zhc3R3cml0ZV9ieXRlX2RhdGEoKSAoYXQgNDAwIGtIeiBiaXQgZnJlcXVlbmN5IG9ubHkpICAgICAgICAgICAqCisgKiBpMmNfYWRhcF9yZWFkX2J5dGVfZGF0YSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogaTJjX2FkYXBfcmVhZF9ieXRlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHc5OTY4Y2Zfc21idXNfc3RhcnQoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCit7CisJaW50IGVyciA9IDA7CisKKwllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MDAxMSk7IC8qIFNERT0xLCBTREE9MCwgU0NMPTEgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MDAxMCk7IC8qIFNERT0xLCBTREE9MCwgU0NMPTAgKi8KKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCB3OTk2OGNmX3NtYnVzX3N0b3Aoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCit7CisJaW50IGVyciA9IDA7CisKKwllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MDAxMSk7IC8qIFNERT0xLCBTREE9MCwgU0NMPTEgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MDAxMyk7IC8qIFNERT0xLCBTREE9MSwgU0NMPTEgKi8KKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCB3OTk2OGNmX3NtYnVzX3dyaXRlX2J5dGUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIHU4IHYpCit7CisJdTggYml0OworCWludCBlcnIgPSAwLCBzZGE7CisKKwlmb3IgKGJpdCA9IDAgOyBiaXQgPCA4IDsgYml0KyspIHsKKwkJc2RhID0gKHYgJiAweDgwKSA/IDIgOiAwOworCQl2IDw8PSAxOworCQkvKiBTREU9MSwgU0RBPXNkYSwgU0NMPTAgKi8KKwkJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDEwIHwgc2RhKTsKKwkJLyogU0RFPTEsIFNEQT1zZGEsIFNDTD0xICovCisJCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgxMSB8IHNkYSk7CisJCS8qIFNERT0xLCBTREE9c2RhLCBTQ0w9MCAqLworCQllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MTAgfCBzZGEpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCB3OTk2OGNmX3NtYnVzX3JlYWRfYnl0ZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgdTgqIHYpCit7CisJdTggYml0OworCWludCBlcnIgPSAwOworCisJKnYgPSAwOworCWZvciAoYml0ID0gMCA7IGJpdCA8IDggOyBiaXQrKykgeworCQkqdiA8PD0gMTsKKwkJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDAwMTMpOworCQkqdiB8PSAodzk5NjhjZl9yZWFkX3NiKGNhbSkgJiAweDAwMDgpID8gMSA6IDA7CisJCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDEyKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgdzk5NjhjZl9zbWJ1c193cml0ZV9hY2soc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCit7CisJaW50IGVyciA9IDA7CisKKwllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MDAxMCk7IC8qIFNERT0xLCBTREE9MCwgU0NMPTAgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MDAxMSk7IC8qIFNERT0xLCBTREE9MCwgU0NMPTEgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MDAxMCk7IC8qIFNERT0xLCBTREE9MCwgU0NMPTAgKi8KKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCB3OTk2OGNmX3NtYnVzX3JlYWRfYWNrKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQoreworCWludCBlcnIgPSAwLCBzZGE7CisKKwllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MDAxMyk7IC8qIFNERT0xLCBTREE9MSwgU0NMPTEgKi8KKwlzZGEgPSAodzk5NjhjZl9yZWFkX3NiKGNhbSkgJiAweDA4KSA/IDEgOiAwOyAvKiBzZGEgPSBTREEgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MDAxMik7IC8qIFNERT0xLCBTREE9MSwgU0NMPTAgKi8KKwlpZiAoc2RhIDwgMCkKKwkJZXJyICs9IHNkYTsKKwlpZiAoc2RhID09IDEpIHsKKwkJREJHKDYsICJDb3VsZG4ndCByZWNlaXZlIHRoZSBBQ0siKQorCQllcnIgKz0gLTE7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworCisvKiBUaGlzIHNlZW1zIHRvIHJlZnJlc2ggdGhlIGNvbW11bmljYXRpb24gdGhyb3VnaCB0aGUgc2VyaWFsIGJ1cyAqLworc3RhdGljIGludCB3OTk2OGNmX3NtYnVzX3JlZnJlc2hfYnVzKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQoreworCWludCBlcnIgPSAwLCBqOworCisJZm9yIChqID0gMTsgaiA8PSAxMDsgaisrKSB7CisJCWVyciA9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHgwMDIwLCAweDAxKTsKKwkJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHgwMDAwLCAweDAxKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKworLyogU01CdXMgcHJvdG9jb2w6IFMgQWRkciBXciBbQV0gU3ViYWRkciBbQV0gVmFsdWUgW0FdIFAgKi8KK3N0YXRpYyBpbnQgCit3OTk2OGNmX2kyY19hZGFwX2Zhc3R3cml0ZV9ieXRlX2RhdGEoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBhZGRyZXNzLCB1OCBzdWJhZGRyZXNzLHU4IHZhbHVlKQoreworCXUxNiogZGF0YSA9IGNhbS0+ZGF0YV9idWZmZXI7CisJaW50IGVyciA9IDA7CisKKwllcnIgKz0gdzk5NjhjZl9zbWJ1c19yZWZyZXNoX2J1cyhjYW0pOworCisJLyogRW5hYmxlIFNCVVMgb3V0cHV0cyAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDIwKTsKKworCWRhdGFbMF0gPSAweDA4MmYgfCAoKGFkZHJlc3MgJiAweDgwKSA/IDB4MTUwMCA6IDB4MCk7CisJZGF0YVswXSB8PSAoYWRkcmVzcyAmIDB4NDApID8gMHg0MDAwIDogMHgwOworCWRhdGFbMV0gPSAweDIwODIgfCAoKGFkZHJlc3MgJiAweDQwKSA/IDB4MDAwNSA6IDB4MCk7CisJZGF0YVsxXSB8PSAoYWRkcmVzcyAmIDB4MjApID8gMHgwMTUwIDogMHgwOworCWRhdGFbMV0gfD0gKGFkZHJlc3MgJiAweDEwKSA/IDB4NTQwMCA6IDB4MDsKKwlkYXRhWzJdID0gMHg4MjA4IHwgKChhZGRyZXNzICYgMHgwOCkgPyAweDAwMTUgOiAweDApOworCWRhdGFbMl0gfD0gKGFkZHJlc3MgJiAweDA0KSA/IDB4MDU0MCA6IDB4MDsKKwlkYXRhWzJdIHw9IChhZGRyZXNzICYgMHgwMikgPyAweDUwMDAgOiAweDA7CisJZGF0YVszXSA9IDB4MWQyMCB8ICgoYWRkcmVzcyAmIDB4MDIpID8gMHgwMDAxIDogMHgwKTsKKwlkYXRhWzNdIHw9IChhZGRyZXNzICYgMHgwMSkgPyAweDAwNTQgOiAweDA7CisKKwllcnIgKz0gdzk5NjhjZl93cml0ZV9mc2IoY2FtLCBkYXRhKTsKKworCWRhdGFbMF0gPSAweDgyMDggfCAoKHN1YmFkZHJlc3MgJiAweDgwKSA/IDB4MDAxNSA6IDB4MCk7CisJZGF0YVswXSB8PSAoc3ViYWRkcmVzcyAmIDB4NDApID8gMHgwNTQwIDogMHgwOworCWRhdGFbMF0gfD0gKHN1YmFkZHJlc3MgJiAweDIwKSA/IDB4NTAwMCA6IDB4MDsKKwlkYXRhWzFdID0gMHgwODIwIHwgKChzdWJhZGRyZXNzICYgMHgyMCkgPyAweDAwMDEgOiAweDApOworCWRhdGFbMV0gfD0gKHN1YmFkZHJlc3MgJiAweDEwKSA/IDB4MDA1NCA6IDB4MDsKKwlkYXRhWzFdIHw9IChzdWJhZGRyZXNzICYgMHgwOCkgPyAweDE1MDAgOiAweDA7CisJZGF0YVsxXSB8PSAoc3ViYWRkcmVzcyAmIDB4MDQpID8gMHg0MDAwIDogMHgwOworCWRhdGFbMl0gPSAweDIwODIgfCAoKHN1YmFkZHJlc3MgJiAweDA0KSA/IDB4MDAwNSA6IDB4MCk7CisJZGF0YVsyXSB8PSAoc3ViYWRkcmVzcyAmIDB4MDIpID8gMHgwMTUwIDogMHgwOworCWRhdGFbMl0gfD0gKHN1YmFkZHJlc3MgJiAweDAxKSA/IDB4NTQwMCA6IDB4MDsKKwlkYXRhWzNdID0gMHgwMDFkOworCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfZnNiKGNhbSwgZGF0YSk7CisKKwlkYXRhWzBdID0gMHg4MjA4IHwgKCh2YWx1ZSAmIDB4ODApID8gMHgwMDE1IDogMHgwKTsKKwlkYXRhWzBdIHw9ICh2YWx1ZSAmIDB4NDApID8gMHgwNTQwIDogMHgwOworCWRhdGFbMF0gfD0gKHZhbHVlICYgMHgyMCkgPyAweDUwMDAgOiAweDA7CisJZGF0YVsxXSA9IDB4MDgyMCB8ICgodmFsdWUgJiAweDIwKSA/IDB4MDAwMSA6IDB4MCk7CisJZGF0YVsxXSB8PSAodmFsdWUgJiAweDEwKSA/IDB4MDA1NCA6IDB4MDsKKwlkYXRhWzFdIHw9ICh2YWx1ZSAmIDB4MDgpID8gMHgxNTAwIDogMHgwOworCWRhdGFbMV0gfD0gKHZhbHVlICYgMHgwNCkgPyAweDQwMDAgOiAweDA7CisJZGF0YVsyXSA9IDB4MjA4MiB8ICgodmFsdWUgJiAweDA0KSA/IDB4MDAwNSA6IDB4MCk7CisJZGF0YVsyXSB8PSAodmFsdWUgJiAweDAyKSA/IDB4MDE1MCA6IDB4MDsKKwlkYXRhWzJdIHw9ICh2YWx1ZSAmIDB4MDEpID8gMHg1NDAwIDogMHgwOworCWRhdGFbM10gPSAweGZlMWQ7CisKKwllcnIgKz0gdzk5NjhjZl93cml0ZV9mc2IoY2FtLCBkYXRhKTsKKworCS8qIERpc2FibGUgU0JVUyBvdXRwdXRzICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDAwMDApOworCisJaWYgKCFlcnIpCisJCURCRyg1LCAiSTJDIHdyaXRlIGJ5dGUgZGF0YSBkb25lLCBhZGRyLjB4JTA0WCwgc3ViYWRkci4weCUwMlggIgorCQkgICAgICAgInZhbHVlIDB4JTAyWCIsIGFkZHJlc3MsIHN1YmFkZHJlc3MsIHZhbHVlKQorCWVsc2UKKwkJREJHKDUsICJJMkMgd3JpdGUgYnl0ZSBkYXRhIGZhaWxlZCwgYWRkci4weCUwNFgsICIKKwkJICAgICAgICJzdWJhZGRyLjB4JTAyWCwgdmFsdWUgMHglMDJYIiwgCisJCSAgICBhZGRyZXNzLCBzdWJhZGRyZXNzLCB2YWx1ZSkKKworCXJldHVybiBlcnI7Cit9CisKKworLyogU01CdXMgcHJvdG9jb2w6IFMgQWRkciBXciBbQV0gU3ViYWRkciBbQV0gUCBTIEFkZHIrMSBSZCBbQV0gW1ZhbHVlXSBOQSBQICovCitzdGF0aWMgaW50IAordzk5NjhjZl9pMmNfYWRhcF9yZWFkX2J5dGVfZGF0YShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBhZGRyZXNzLCB1OCBzdWJhZGRyZXNzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTgqIHZhbHVlKQoreworCWludCBlcnIgPSAwOworCisJLyogU2VyaWFsIGRhdGEgZW5hYmxlICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDAwMTMpOyAvKiBkb24ndCBjaGFuZ2UgISAqLworCisJZXJyICs9IHc5OTY4Y2Zfc21idXNfc3RhcnQoY2FtKTsKKwllcnIgKz0gdzk5NjhjZl9zbWJ1c193cml0ZV9ieXRlKGNhbSwgYWRkcmVzcyk7CisJZXJyICs9IHc5OTY4Y2Zfc21idXNfcmVhZF9hY2soY2FtKTsKKwllcnIgKz0gdzk5NjhjZl9zbWJ1c193cml0ZV9ieXRlKGNhbSwgc3ViYWRkcmVzcyk7CisJZXJyICs9IHc5OTY4Y2Zfc21idXNfcmVhZF9hY2soY2FtKTsKKwllcnIgKz0gdzk5NjhjZl9zbWJ1c19zdG9wKGNhbSk7CisJZXJyICs9IHc5OTY4Y2Zfc21idXNfc3RhcnQoY2FtKTsKKwllcnIgKz0gdzk5NjhjZl9zbWJ1c193cml0ZV9ieXRlKGNhbSwgYWRkcmVzcyArIDEpOworCWVyciArPSB3OTk2OGNmX3NtYnVzX3JlYWRfYWNrKGNhbSk7CisJZXJyICs9IHc5OTY4Y2Zfc21idXNfcmVhZF9ieXRlKGNhbSwgdmFsdWUpOworCWVyciArPSB3OTk2OGNmX3NtYnVzX3dyaXRlX2FjayhjYW0pOworCWVyciArPSB3OTk2OGNmX3NtYnVzX3N0b3AoY2FtKTsKKworCS8qIFNlcmlhbCBkYXRhIGRpc2FibGUgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MDAwMCk7CisKKwlpZiAoIWVycikKKwkJREJHKDUsICJJMkMgcmVhZCBieXRlIGRhdGEgZG9uZSwgYWRkci4weCUwNFgsICIKKwkJICAgICAgICJzdWJhZGRyLjB4JTAyWCwgdmFsdWUgMHglMDJYIiwgCisJCSAgICBhZGRyZXNzLCBzdWJhZGRyZXNzLCAqdmFsdWUpCisJZWxzZQorCQlEQkcoNSwgIkkyQyByZWFkIGJ5dGUgZGF0YSBmYWlsZWQsIGFkZHIuMHglMDRYLCAiCisJCSAgICAgICAic3ViYWRkci4weCUwMlgsIHdyb25nIHZhbHVlIDB4JTAyWCIsCisJCSAgICBhZGRyZXNzLCBzdWJhZGRyZXNzLCAqdmFsdWUpCisKKwlyZXR1cm4gZXJyOworfQorCisKKy8qIFNNQnVzIHByb3RvY29sOiBTIEFkZHIrMSBSZCBbQV0gW1ZhbHVlXSBOQSBQICovCitzdGF0aWMgaW50IAordzk5NjhjZl9pMmNfYWRhcF9yZWFkX2J5dGUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgYWRkcmVzcywgdTgqIHZhbHVlKQoreworCWludCBlcnIgPSAwOworCisJLyogU2VyaWFsIGRhdGEgZW5hYmxlICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDAwMTMpOworCisJZXJyICs9IHc5OTY4Y2Zfc21idXNfc3RhcnQoY2FtKTsKKwllcnIgKz0gdzk5NjhjZl9zbWJ1c193cml0ZV9ieXRlKGNhbSwgYWRkcmVzcyArIDEpOworCWVyciArPSB3OTk2OGNmX3NtYnVzX3JlYWRfYWNrKGNhbSk7CisJZXJyICs9IHc5OTY4Y2Zfc21idXNfcmVhZF9ieXRlKGNhbSwgdmFsdWUpOworCWVyciArPSB3OTk2OGNmX3NtYnVzX3dyaXRlX2FjayhjYW0pOworCWVyciArPSB3OTk2OGNmX3NtYnVzX3N0b3AoY2FtKTsKKyAKKwkvKiBTZXJpYWwgZGF0YSBkaXNhYmxlICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDAwMDApOworCisJaWYgKCFlcnIpCisJCURCRyg1LCAiSTJDIHJlYWQgYnl0ZSBkb25lLCBhZGRyLjB4JTA0WCwgIgorCQkgICAgICAgInZhbHVlIDB4JTAyWCIsIGFkZHJlc3MsICp2YWx1ZSkKKwllbHNlCisJCURCRyg1LCAiSTJDIHJlYWQgYnl0ZSBmYWlsZWQsIGFkZHIuMHglMDRYLCAiCisJCSAgICAgICAid3JvbmcgdmFsdWUgMHglMDJYIiwgYWRkcmVzcywgKnZhbHVlKQorCisJcmV0dXJuIGVycjsKK30KKworCisvKiBTTUJ1cyBwcm90b2NvbDogUyBBZGRyIFdyIFtBXSBWYWx1ZSBbQV0gUCAqLworc3RhdGljIGludCAKK3c5OTY4Y2ZfaTJjX2FkYXBfd3JpdGVfYnl0ZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgYWRkcmVzcywgdTggdmFsdWUpCit7CisJREJHKDQsICJpMmNfd3JpdGVfYnl0ZSgpIGlzIGFuIHVuc3VwcG9ydGVkIHRyYW5zZmVyIG1vZGUiKQorCXJldHVybiAtRUlOVkFMOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEkyQyBpbnRlcmZhY2UgdG8ga2VybmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludAordzk5NjhjZl9pMmNfc21idXNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBhZGRyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgZmxhZ3MsIGNoYXIgcmVhZF93cml0ZSwgdTggY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUsIHVuaW9uIGkyY19zbWJ1c19kYXRhICpkYXRhKQoreworCXN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtID0gaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKKwl1OCBpOworCWludCBlcnIgPSAwOyAKKworCXN3aXRjaCAoYWRkcikgeworCQljYXNlIE9WNnh4MF9TSUQ6CisJCWNhc2UgT1Y3eHgwX1NJRDoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJREJHKDQsICJSZWplY3RlZCBzbGF2ZSBJRCAweCUwNFgiLCBhZGRyKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHNpemUgPT0gSTJDX1NNQlVTX0JZVEUpIHsKKwkJLyogV2h5IGFkZHIgPDw9IDE/IFNlZSBPVlhYWDBfU0lEIGRlZmluZXMgaW4gb3ZjYW1jaGlwLmggKi8KKwkJYWRkciA8PD0gMTsKKworCQlpZiAocmVhZF93cml0ZSA9PSBJMkNfU01CVVNfV1JJVEUpCisgCQkJZXJyID0gdzk5NjhjZl9pMmNfYWRhcF93cml0ZV9ieXRlKGNhbSwgYWRkciwgY29tbWFuZCk7CisJCWVsc2UgaWYgKHJlYWRfd3JpdGUgPT0gSTJDX1NNQlVTX1JFQUQpIAorCQkJZXJyID0gdzk5NjhjZl9pMmNfYWRhcF9yZWFkX2J5dGUoY2FtLGFkZHIsJmRhdGEtPmJ5dGUpOworCisJfSBlbHNlIGlmIChzaXplID09IEkyQ19TTUJVU19CWVRFX0RBVEEpIHsKKwkJYWRkciA8PD0gMTsKKworCQlpZiAocmVhZF93cml0ZSA9PSBJMkNfU01CVVNfV1JJVEUpCisgCQkJZXJyID0gdzk5NjhjZl9pMmNfYWRhcF9mYXN0d3JpdGVfYnl0ZV9kYXRhKGNhbSwgYWRkciwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLCBkYXRhLT5ieXRlKTsKKwkJZWxzZSBpZiAocmVhZF93cml0ZSA9PSBJMkNfU01CVVNfUkVBRCkgeworCQkJZm9yIChpID0gMTsgaSA8PSBXOTk2OENGX0kyQ19SV19SRVRSSUVTOyBpKyspIHsKKwkJCQllcnIgPSB3OTk2OGNmX2kyY19hZGFwX3JlYWRfYnl0ZV9kYXRhKGNhbSxhZGRyLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLCAmZGF0YS0+Ynl0ZSk7CisJCQkJaWYgKGVycikgeworCQkJCQlpZiAodzk5NjhjZl9zbWJ1c19yZWZyZXNoX2J1cyhjYW0pKSB7CisJCQkJCQllcnIgPSAtRUlPOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9IGVsc2UKKwkJCQkJYnJlYWs7CisJCQl9CisKKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCX0gZWxzZSB7CisJCURCRyg0LCAiVW5zdXBwb3J0ZWQgSTJDIHRyYW5zZmVyIG1vZGUgKCVkKSIsIHNpemUpCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIHUzMiB3OTk2OGNmX2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciogYWRhcCkKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFIHwKKwkgICAgICAgSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFX0RBVEEgIHwKKwkgICAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBOworfQorCisKK3N0YXRpYyBpbnQgdzk5NjhjZl9pMmNfYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCogY2xpZW50KQoreworCXN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOworCWNvbnN0IGNoYXIqIGNsaWVudG5hbWUgPSBpMmNfY2xpZW50bmFtZShjbGllbnQpOworCWludCBpZCA9IGNsaWVudC0+ZHJpdmVyLT5pZCwgZXJyID0gMDsKKworCWlmIChpZCA9PSBJMkNfRFJJVkVSSURfT1ZDQU1DSElQKSB7CisJCWNhbS0+c2Vuc29yX2NsaWVudCA9IGNsaWVudDsKKwkJZXJyID0gdzk5NjhjZl9zZW5zb3JfaW5pdChjYW0pOworCQlpZiAoZXJyKSB7CisJCQljYW0tPnNlbnNvcl9jbGllbnQgPSBOVUxMOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0gZWxzZSB7CisJCURCRyg0LCAiUmVqZWN0ZWQgY2xpZW50IFslc10gd2l0aCBkcml2ZXIgWyVzXSIsIAorCQkgICAgY2xpZW50bmFtZSwgY2xpZW50LT5kcml2ZXItPm5hbWUpCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCURCRyg1LCAiSTJDIGF0dGFjaCBjbGllbnQgWyVzXSB3aXRoIGRyaXZlciBbJXNdIiwKKwkgICAgY2xpZW50bmFtZSwgY2xpZW50LT5kcml2ZXItPm5hbWUpCisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX2RldGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQqIGNsaWVudCkKK3sKKwlzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSA9IGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKKwljb25zdCBjaGFyKiBjbGllbnRuYW1lID0gaTJjX2NsaWVudG5hbWUoY2xpZW50KTsKKworCWlmIChjYW0tPnNlbnNvcl9jbGllbnQgPT0gY2xpZW50KQorCQljYW0tPnNlbnNvcl9jbGllbnQgPSBOVUxMOworCisJREJHKDUsICJJMkMgZGV0YWNoIGNsaWVudCBbJXNdIiwgY2xpZW50bmFtZSkKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgCit3OTk2OGNmX2kyY19jb250cm9sKHN0cnVjdCBpMmNfYWRhcHRlciogYWRhcHRlciwgdW5zaWduZWQgaW50IGNtZCwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB3OTk2OGNmX2kyY19pbml0KHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQoreworCWludCBlcnIgPSAwOworCisJc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGFsZ28gPSB7CisJCS5uYW1lID0gICAgICAgICAgIlc5OTZbODddQ0YgYWxnb3JpdGhtIiwKKwkJLmlkID0gICAgICAgICAgICBJMkNfQUxHT19TTUJVUywKKwkJLnNtYnVzX3hmZXIgPSAgICB3OTk2OGNmX2kyY19zbWJ1c194ZmVyLAorCQkuYWxnb19jb250cm9sID0gIHc5OTY4Y2ZfaTJjX2NvbnRyb2wsCisJCS5mdW5jdGlvbmFsaXR5ID0gdzk5NjhjZl9pMmNfZnVuYywKKwl9OworCisJc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBhZGFwID0geworCQkuaWQgPSAgICAgICAgICAgICAgICBJMkNfQUxHT19TTUJVUyB8IEkyQ19IV19TTUJVU19XOTk2OENGLAorCQkuY2xhc3MgPSAgICAgICAgICAgICBJMkNfQ0xBU1NfQ0FNX0RJR0lUQUwsCisJCS5vd25lciA9ICAgICAgICAgICAgIFRISVNfTU9EVUxFLAorCQkuY2xpZW50X3JlZ2lzdGVyID0gICB3OTk2OGNmX2kyY19hdHRhY2hfaW5mb3JtLAorCQkuY2xpZW50X3VucmVnaXN0ZXIgPSB3OTk2OGNmX2kyY19kZXRhY2hfaW5mb3JtLAorCQkuYWxnbyA9ICAgICAgICAgICAgICAmYWxnbywKKwl9OworCisJbWVtY3B5KCZjYW0tPmkyY19hZGFwdGVyLCAmYWRhcCwgc2l6ZW9mKHN0cnVjdCBpMmNfYWRhcHRlcikpOworCXN0cmNweShjYW0tPmkyY19hZGFwdGVyLm5hbWUsICJ3OTk2OGNmIik7CisJaTJjX3NldF9hZGFwZGF0YSgmY2FtLT5pMmNfYWRhcHRlciwgY2FtKTsKKworCURCRyg2LCAiUmVnaXN0ZXJpbmcgSTJDIGFkYXB0ZXIgd2l0aCBrZXJuZWwuLi4iKQorCisJZXJyID0gaTJjX2FkZF9hZGFwdGVyKCZjYW0tPmkyY19hZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlEQkcoMSwgIkZhaWxlZCB0byByZWdpc3RlciB0aGUgSTJDIGFkYXB0ZXIiKQorCWVsc2UKKwkJREJHKDUsICJJMkMgYWRhcHRlciByZWdpc3RlcmVkIikKKworCXJldHVybiBlcnI7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSGVscGVyIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFR1cm4gb24gdGhlIExFRCBvbiBzb21lIHdlYmNhbXMuIEEgYmVlcCBzaG91bGQgYmUgaGVhcmQgdG9vLgorICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIG51bWJlciBvdGhlcndpc2UuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgdzk5NjhjZl90dXJuX29uX2xlZChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4ZmYwMCwgMHgwMCk7IC8qIHBvd2VyLWRvd24gKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweGJmMTcsIDB4MDApOyAvKiByZXNldCBldmVyeXRoaW5nICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHhiZjEwLCAweDAwKTsgLyogbm9ybWFsIG9wZXJhdGlvbiAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4MDAxMCwgMHgwMSk7IC8qIHNlcmlhbCBidXMsIFNEUyBoaWdoICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHgwMDAwLCAweDAxKTsgLyogc2VyaWFsIGJ1cywgU0RTIGxvdyAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4MDAxMCwgMHgwMSk7IC8qIC4uaGlnaCAnYmVlcC1iZWVwJyAqLworCisJaWYgKGVycikKKwkJREJHKDIsICJDb3VsZG4ndCB0dXJuIG9uIHRoZSBMRUQiKQorCisJREJHKDUsICJMRUQgdHVybmVkIG9uIikKKworCXJldHVybiBlcnI7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBXcml0ZSBzb21lIHJlZ2lzdGVycyBmb3IgdGhlIGRldmljZSBpbml0aWFsaXphdGlvbi4KKyAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBvbiBvcGVuKCkuCisgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgbnVtYmVyIG90aGVyd2lzZS4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCB3OTk2OGNmX2luaXRfY2hpcChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwl1bnNpZ25lZCBsb25nIGh3X2J1ZnNpemUgPSBjYW0tPm1heHdpZHRoKmNhbS0+bWF4aGVpZ2h0KjIsCisJICAgICAgICAgICAgICB5MCA9IDB4MDAwMCwKKwkgICAgICAgICAgICAgIHUwID0geTAgKyBod19idWZzaXplLzIsCisJICAgICAgICAgICAgICB2MCA9IHUwICsgaHdfYnVmc2l6ZS80LAorCSAgICAgICAgICAgICAgeTEgPSB2MCArIGh3X2J1ZnNpemUvNCwKKwkgICAgICAgICAgICAgIHUxID0geTEgKyBod19idWZzaXplLzIsCisJICAgICAgICAgICAgICB2MSA9IHUxICsgaHdfYnVmc2l6ZS80OworCWludCBlcnIgPSAwOworCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHhmZjAwLCAweDAwKTsgLyogcG93ZXIgb2ZmICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHhiZjEwLCAweDAwKTsgLyogcG93ZXIgb24gKi8KKworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4NDA1ZCwgMHgwMyk7IC8qIERSQU0gdGltaW5ncyAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4MDAzMCwgMHgwNCk7IC8qIFNEUkFNIHRpbWluZ3MgKi8KKworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHkwICYgMHhmZmZmLCAweDIwKTsgLyogWSBidWYuMCwgbG93ICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgeTAgPj4gMTYsIDB4MjEpOyAgICAvKiBZIGJ1Zi4wLCBoaWdoICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdTAgJiAweGZmZmYsIDB4MjQpOyAvKiBVIGJ1Zi4wLCBsb3cgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB1MCA+PiAxNiwgMHgyNSk7ICAgIC8qIFUgYnVmLjAsIGhpZ2ggKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB2MCAmIDB4ZmZmZiwgMHgyOCk7IC8qIFYgYnVmLjAsIGxvdyAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHYwID4+IDE2LCAweDI5KTsgICAgLyogViBidWYuMCwgaGlnaCAqLworCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgeTEgJiAweGZmZmYsIDB4MjIpOyAvKiBZIGJ1Zi4xLCBsb3cgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB5MSA+PiAxNiwgMHgyMyk7ICAgIC8qIFkgYnVmLjEsIGhpZ2ggKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB1MSAmIDB4ZmZmZiwgMHgyNik7IC8qIFUgYnVmLjEsIGxvdyAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHUxID4+IDE2LCAweDI3KTsgICAgLyogVSBidWYuMSwgaGlnaCAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHYxICYgMHhmZmZmLCAweDJhKTsgLyogViBidWYuMSwgbG93ICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdjEgPj4gMTYsIDB4MmIpOyAgICAvKiBWIGJ1Zi4xLCBoaWdoICovCisKKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB5MSAmIDB4ZmZmZiwgMHgzMik7IC8qIEpQRUcgYnVmIDAgbG93ICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgeTEgPj4gMTYsIDB4MzMpOyAgICAvKiBKUEVHIGJ1ZiAwIGhpZ2ggKi8KKworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHkxICYgMHhmZmZmLCAweDM0KTsgLyogSlBFRyBidWYgMSBsb3cgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB5MSA+PiAxNiwgMHgzNSk7ICAgIC8qIEpQRUcgYnVnIDEgaGlnaCAqLworCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHgwMDAwLCAweDM2KTsvKiBKUEVHIHJlc3RhcnQgaW50ZXJ2YWwgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweDA4MDQsIDB4MzcpOy8qSlBFRyBWTEUgRklGTyB0aHJlc2hvbGQqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4MDAwMCwgMHgzOCk7LyogZGlzYWJsZSBodyB1cC1zY2FsaW5nICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHgwMDAwLCAweDNmKTsgLyogSlBFRy9NQ1RMIHRlc3QgZGF0YSAqLworCisJZXJyICs9IHc5OTY4Y2Zfc2V0X3BpY3R1cmUoY2FtLCBjYW0tPnBpY3R1cmUpOyAvKiB0aGlzIGJlZm9yZSAqLworCWVyciArPSB3OTk2OGNmX3NldF93aW5kb3coY2FtLCBjYW0tPndpbmRvdyk7CisKKwlpZiAoZXJyKQorCQlEQkcoMSwgIkNoaXAgaW5pdGlhbGl6YXRpb24gZmFpbGVkIikKKwllbHNlCisJCURCRyg1LCAiQ2hpcCBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQiKQorCisJcmV0dXJuIGVycjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFJldHVybiBub24temVybyBpZiB0aGUgcGFsZXR0ZSBpcyBzdXBwb3J0ZWQsIDAgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW5saW5lIHUxNiB3OTk2OGNmX3ZhbGlkX3BhbGV0dGUodTE2IHBhbGV0dGUpCit7CisJdTggaSA9IDA7CisJd2hpbGUgKHc5OTY4Y2ZfZm9ybWF0bGlzdFtpXS5wYWxldHRlICE9IDApIHsKKwkJaWYgKHBhbGV0dGUgPT0gdzk5NjhjZl9mb3JtYXRsaXN0W2ldLnBhbGV0dGUpCisJCQlyZXR1cm4gcGFsZXR0ZTsKKwkJaSsrOworCX0KKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFJldHVybiB0aGUgZGVwdGggY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gcGFsZXR0ZS4KKyAgUGFsZXR0ZSBfbXVzdF8gYmUgc3VwcG9ydGVkICEKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGlubGluZSB1MTYgdzk5NjhjZl92YWxpZF9kZXB0aCh1MTYgcGFsZXR0ZSkKK3sKKwl1OCBpPTA7CisJd2hpbGUgKHc5OTY4Y2ZfZm9ybWF0bGlzdFtpXS5wYWxldHRlICE9IHBhbGV0dGUpCisJCWkrKzsKKworCXJldHVybiB3OTk2OGNmX2Zvcm1hdGxpc3RbaV0uZGVwdGg7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGZvcm1hdCByZXF1aXJlcyBkZWNvbXByZXNzaW9uLCAwIG90aGVyd2lzZS4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGlubGluZSB1OCB3OTk2OGNmX25lZWRfZGVjb21wcmVzc2lvbih1MTYgcGFsZXR0ZSkKK3sKKwl1OCBpID0gMDsKKwl3aGlsZSAodzk5NjhjZl9mb3JtYXRsaXN0W2ldLnBhbGV0dGUgIT0gMCkgeworCQlpZiAocGFsZXR0ZSA9PSB3OTk2OGNmX2Zvcm1hdGxpc3RbaV0ucGFsZXR0ZSkKKwkJCXJldHVybiB3OTk2OGNmX2Zvcm1hdGxpc3RbaV0uY29tcHJlc3Npb247CisJCWkrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBDaGFuZ2UgdGhlIHBpY3R1cmUgc2V0dGluZ3Mgb2YgdGhlIGNhbWVyYS4KKyAgUmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50Cit3OTk2OGNmX3NldF9waWN0dXJlKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCBzdHJ1Y3QgdmlkZW9fcGljdHVyZSBwaWN0KQoreworCXUxNiBmbXQsIGh3X2RlcHRoLCBod19wYWxldHRlLCByZWdfdiA9IDB4MDAwMDsKKwlpbnQgZXJyID0gMDsKKworCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgdXNpbmcgYSB2YWxpZCBkZXB0aCAqLworCXBpY3QuZGVwdGggPSB3OTk2OGNmX3ZhbGlkX2RlcHRoKHBpY3QucGFsZXR0ZSk7CisKKwlmbXQgPSBwaWN0LnBhbGV0dGU7CisKKwlod19kZXB0aCA9IHBpY3QuZGVwdGg7IC8qIGRlcHRoIHVzZWQgYnkgdGhlIHdpbmJvbmQgY2hpcCAqLworCWh3X3BhbGV0dGUgPSBwaWN0LnBhbGV0dGU7IC8qIHBhbGV0dGUgdXNlZCBieSB0aGUgd2luYm9uZCBjaGlwICovCisKKwkvKiBWUyAmIEhTIHBvbGFyaXRpZXMgKi8KKwlyZWdfdiA9IChjYW0tPnZzX3BvbGFyaXR5IDw8IDEyKSB8IChjYW0tPmhzX3BvbGFyaXR5IDw8IDExKTsKKworCXN3aXRjaCAoZm10KQorCXsKKwkJY2FzZSBWSURFT19QQUxFVFRFX1VZVlk6CisJCQlyZWdfdiB8PSAweDAwMDA7CisJCQljYW0tPnZwcF9mbGFnID0gVlBQX05PTkU7CisJCQlicmVhazsKKwkJY2FzZSBWSURFT19QQUxFVFRFX1lVVjQyMlA6CisJCQlyZWdfdiB8PSAweDAwMDI7CisJCQljYW0tPnZwcF9mbGFnID0gVlBQX0RFQ09NUFJFU1NJT047CisJCQlicmVhazsKKwkJY2FzZSBWSURFT19QQUxFVFRFX1lVVjQyMDoKKwkJY2FzZSBWSURFT19QQUxFVFRFX1lVVjQyMFA6CisJCQlyZWdfdiB8PSAweDAwMDM7CisJCQljYW0tPnZwcF9mbGFnID0gVlBQX0RFQ09NUFJFU1NJT047CisJCQlicmVhazsKKwkJY2FzZSBWSURFT19QQUxFVFRFX1lVWVY6CisJCWNhc2UgVklERU9fUEFMRVRURV9ZVVY0MjI6CisJCQlyZWdfdiB8PSAweDAwMDA7CisJCQljYW0tPnZwcF9mbGFnID0gVlBQX1NXQVBfWVVWX0JZVEVTOworCQkJaHdfcGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfVVlWWTsKKwkJCWJyZWFrOworCQkvKiBPcmlnaW5hbCB2aWRlbyBpcyB1c2VkIGluc3RlYWQgb2YgUkdCWCBwYWxldHRlcy4gCisJCSAgIFNvZnR3YXJlIGNvbnZlcnNpb24gbGF0ZXIuICovCisJCWNhc2UgVklERU9fUEFMRVRURV9HUkVZOgorCQljYXNlIFZJREVPX1BBTEVUVEVfUkdCNTU1OgorCQljYXNlIFZJREVPX1BBTEVUVEVfUkdCNTY1OgorCQljYXNlIFZJREVPX1BBTEVUVEVfUkdCMjQ6CisJCWNhc2UgVklERU9fUEFMRVRURV9SR0IzMjoKKwkJCXJlZ192IHw9IDB4MDAwMDsgLyogVVlWWSAxNiBiaXQgaXMgdXNlZCAqLworCQkJaHdfZGVwdGggPSAxNjsKKwkJCWh3X3BhbGV0dGUgPSBWSURFT19QQUxFVFRFX1VZVlk7CisJCQljYW0tPnZwcF9mbGFnID0gVlBQX1VZVllfVE9fUkdCWDsKKwkJCWJyZWFrOworCX0KKworCS8qIE5PVEU6IGR1ZSB0byBtZW1vcnkgaXNzdWVzLCBpdCBpcyBiZXR0ZXIgdG8gZGlzYWJsZSB0aGUgaGFyZHdhcmUKKwkgICAgICAgICBkb3VibGUgYnVmZmVyaW5nIGR1cmluZyBjb21wcmVzc2lvbiAqLworCWlmIChjYW0tPmRvdWJsZV9idWZmZXIgJiYgIShjYW0tPnZwcF9mbGFnICYgVlBQX0RFQ09NUFJFU1NJT04pKQorCQlyZWdfdiB8PSAweDAwODA7CisKKwlpZiAoY2FtLT5jbGFtcGluZykKKwkJcmVnX3YgfD0gMHgwMDIwOworCisJaWYgKGNhbS0+ZmlsdGVyX3R5cGUgPT0gMSkKKwkJcmVnX3YgfD0gMHgwMDA4OworCWVsc2UgaWYgKGNhbS0+ZmlsdGVyX3R5cGUgPT0gMikKKwkJcmVnX3YgfD0gMHgwMDBjOworCisJaWYgKChlcnIgPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHJlZ192LCAweDE2KSkpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoKGVyciA9IHc5OTY4Y2Zfc2Vuc29yX3VwZGF0ZV9waWN0dXJlKGNhbSwgcGljdCkpKQorCQlnb3RvIGVycm9yOworCisJLyogSWYgYWxsIHdlbnQgd2VsbCwgdXBkYXRlIHRoZSBkZXZpY2UgZGF0YSBzdHJ1Y3R1cmUgKi8KKwltZW1jcHkoJmNhbS0+cGljdHVyZSwgJnBpY3QsIHNpemVvZihwaWN0KSk7CisJY2FtLT5od19kZXB0aCA9IGh3X2RlcHRoOworCWNhbS0+aHdfcGFsZXR0ZSA9IGh3X3BhbGV0dGU7CisKKwkvKiBTZXR0aW5ncyBjaGFuZ2VkLCBzbyB3ZSBjbGVhciB0aGUgZnJhbWUgYnVmZmVycyAqLworCW1lbXNldChjYW0tPmZyYW1lWzBdLmJ1ZmZlciwgMCwgY2FtLT5uYnVmZmVycypjYW0tPmZyYW1lWzBdLnNpemUpOworCisJREJHKDQsICJQYWxldHRlIGlzICVzLCBkZXB0aCBpcyAldSBicHAiLAorCSAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBwaWN0LnBhbGV0dGUpLCBwaWN0LmRlcHRoKQorCisJcmV0dXJuIDA7CisKK2Vycm9yOgorCURCRygxLCAiRmFpbGVkIHRvIGNoYW5nZSBwaWN0dXJlIHNldHRpbmdzIikKKwlyZXR1cm4gZXJyOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgQ2hhbmdlIHRoZSBjYXB0dXJlIGFyZWEgc2l6ZSBvZiB0aGUgY2FtZXJhLgorICBUaGlzIGZ1bmN0aW9uIF9tdXN0XyBiZSBjYWxsZWQgX2FmdGVyXyB3OTk2OGNmX3NldF9waWN0dXJlKCkuCisgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgbnVtYmVyIG90aGVyd2lzZS4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAordzk5NjhjZl9zZXRfd2luZG93KHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCBzdHJ1Y3QgdmlkZW9fd2luZG93IHdpbikKK3sKKwl1MTYgeCwgeSwgdywgaCwgc2N4LCBzY3ksIGN3LCBjaCwgYXgsIGF5OworCXVuc2lnbmVkIGxvbmcgZncsIGZoOworCXN0cnVjdCBvdmNhbWNoaXBfd2luZG93IHNfd2luOworCWludCBlcnIgPSAwOworCisJLyogV29yayBhcm91bmQgdG8gYXZvaWQgRlAgYXJpdGhtZXRpY3MgKi8KKwkjZGVmaW5lIF9fU0MoeCkgKCh4KSA8PCAxMCkKKwkjZGVmaW5lIF9fVU5TQyh4KSAoKHgpID4+IDEwKQorCisJLyogTWFrZSBzdXJlIHdlIGFyZSB1c2luZyBhIHN1cHBvcnRlZCByZXNvbHV0aW9uICovCisJaWYgKChlcnIgPSB3OTk2OGNmX2FkanVzdF93aW5kb3dfc2l6ZShjYW0sICh1MTYqKSZ3aW4ud2lkdGgsIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUxNiopJndpbi5oZWlnaHQpKSkKKwkJZ290byBlcnJvcjsKKworCS8qIFNjYWxpbmcgZmFjdG9ycyAqLworCWZ3ID0gX19TQyh3aW4ud2lkdGgpIC8gY2FtLT5tYXh3aWR0aDsKKwlmaCA9IF9fU0Mod2luLmhlaWdodCkgLyBjYW0tPm1heGhlaWdodDsKKworCS8qIFNldCB1cCB0aGUgd2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgdXNlZCBieSB0aGUgY2hpcCAqLworCWlmICgod2luLndpZHRoID4gY2FtLT5tYXh3aWR0aCkgfHwgKHdpbi5oZWlnaHQgPiBjYW0tPm1heGhlaWdodCkpIHsKKwkJY2FtLT52cHBfZmxhZyB8PSBWUFBfVVBTQ0FMRTsKKwkJLyogQ2FsY3VsYXRlIGxhcmdlc3QgdyxoIG1hbnRhaW5pbmcgdGhlIHNhbWUgdy9oIHJhdGlvICovCisJCXcgPSAoZncgPj0gZmgpID8gY2FtLT5tYXh3aWR0aCA6IF9fU0Mod2luLndpZHRoKS9maDsKKwkJaCA9IChmdyA+PSBmaCkgPyBfX1NDKHdpbi5oZWlnaHQpL2Z3IDogY2FtLT5tYXhoZWlnaHQ7CisJCWlmICh3IDwgY2FtLT5taW53aWR0aCkgLyoganVzdCBpbiBjYXNlICovCisJCQl3ID0gY2FtLT5taW53aWR0aDsKKwkJaWYgKGggPCBjYW0tPm1pbmhlaWdodCkgLyoganVzdCBpbiBjYXNlICovCisJCQloID0gY2FtLT5taW5oZWlnaHQ7CisJfSBlbHNlIHsKKwkJY2FtLT52cHBfZmxhZyAmPSB+VlBQX1VQU0NBTEU7CisJCXcgPSB3aW4ud2lkdGg7CisJCWggPSB3aW4uaGVpZ2h0OworCX0KKworCS8qIHgseSBvZmZzZXRzIG9mIHRoZSBjcm9wcGVkIGFyZWEgKi8KKwlzY3ggPSBjYW0tPnN0YXJ0X2Nyb3B4OworCXNjeSA9IGNhbS0+c3RhcnRfY3JvcHk7CisKKwkvKiBDYWxjdWxhdGUgY3JvcHBlZCBhcmVhIG1hbnRlaW5pbmcgdGhlIHJpZ2h0IHcvaCByYXRpbyAqLworCWlmIChjYW0tPmxhcmdldmlldyAmJiAhKGNhbS0+dnBwX2ZsYWcgJiBWUFBfVVBTQ0FMRSkpIHsKKwkJY3cgPSAoZncgPj0gZmgpID8gY2FtLT5tYXh3aWR0aCA6IF9fU0Mod2luLndpZHRoKS9maDsKKwkJY2ggPSAoZncgPj0gZmgpID8gX19TQyh3aW4uaGVpZ2h0KS9mdyA6IGNhbS0+bWF4aGVpZ2h0OworCX0gZWxzZSB7CisJCWN3ID0gdzsKKwkJY2ggPSBoOworCX0KKworCS8qIFNldHVwIHRoZSB3aW5kb3cgb2YgdGhlIHNlbnNvciAqLworCXNfd2luLmZvcm1hdCA9IFZJREVPX1BBTEVUVEVfVVlWWTsKKwlzX3dpbi53aWR0aCA9IGNhbS0+bWF4d2lkdGg7CisJc193aW4uaGVpZ2h0ID0gY2FtLT5tYXhoZWlnaHQ7CisJc193aW4ucXVhcnRlciA9IDA7IC8qIGZ1bGwgcHJvZ3Jlc3NpdmUgdmlkZW8gKi8KKworCS8qIENlbnRlciBpdCAqLworCXNfd2luLnggPSAoc193aW4ud2lkdGggLSBjdykgLyAyOworCXNfd2luLnkgPSAoc193aW4uaGVpZ2h0IC0gY2gpIC8gMjsKKworCS8qIENsb2NrIGRpdmlzb3IgKi8KKwlpZiAoY2FtLT5jbG9ja2RpdiA+PSAwKQorCQlzX3dpbi5jbG9ja2RpdiA9IGNhbS0+Y2xvY2tkaXY7IC8qIG1hbnVhbCBvdmVycmlkZSAqLworCWVsc2UKKwkJc3dpdGNoIChjYW0tPnNlbnNvcikgeworCQkJY2FzZSBDQ19PVjY2MjA6CisJCQkJc193aW4uY2xvY2tkaXYgPSAwOworCQkJCWJyZWFrOworCQkJY2FzZSBDQ19PVjY2MzA6CisJCQkJc193aW4uY2xvY2tkaXYgPSAwOworCQkJCWJyZWFrOworCQkJY2FzZSBDQ19PVjc2QkU6CisJCQljYXNlIENDX09WNzYxMDoKKwkJCWNhc2UgQ0NfT1Y3NjIwOgorCQkJCXNfd2luLmNsb2NrZGl2ID0gMDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJc193aW4uY2xvY2tkaXYgPSBXOTk2OENGX0RFRl9DTE9DS0RJVklTT1I7CisJCX0KKworCS8qIFdlIGhhdmUgdG8gc2NhbGUgd2luLnggYW5kIHdpbi55IG9mZnNldHMgKi8KKwlpZiAoIChjYW0tPmxhcmdldmlldyAmJiAhKGNhbS0+dnBwX2ZsYWcgJiBWUFBfVVBTQ0FMRSkpCisJICAgICB8fCAoY2FtLT52cHBfZmxhZyAmIFZQUF9VUFNDQUxFKSApIHsKKwkJYXggPSBfX1NDKHdpbi54KS9mdzsKKwkJYXkgPSBfX1NDKHdpbi55KS9maDsKKwl9IGVsc2UgeworCQlheCA9IHdpbi54OworCQlheSA9IHdpbi55OworCX0KKworCWlmICgoYXggKyBjdykgPiBjYW0tPm1heHdpZHRoKQorCQlheCA9IGNhbS0+bWF4d2lkdGggLSBjdzsKKworCWlmICgoYXkgKyBjaCkgPiBjYW0tPm1heGhlaWdodCkKKwkJYXkgPSBjYW0tPm1heGhlaWdodCAtIGNoOworCisJLyogQWRqdXN0IHdpbi54LCB3aW4ueSAqLworCWlmICggKGNhbS0+bGFyZ2V2aWV3ICYmICEoY2FtLT52cHBfZmxhZyAmIFZQUF9VUFNDQUxFKSkKKwkgICAgIHx8IChjYW0tPnZwcF9mbGFnICYgVlBQX1VQU0NBTEUpICkgeworCQl3aW4ueCA9IF9fVU5TQyhheCpmdyk7CisJCXdpbi55ID0gX19VTlNDKGF5KmZoKTsKKwl9IGVsc2UgeworCQl3aW4ueCA9IGF4OworCQl3aW4ueSA9IGF5OworCX0KKworCS8qIE9mZnNldHMgdXNlZCBieSB0aGUgY2hpcCAqLworCXggPSBheCArIHNfd2luLng7CisJeSA9IGF5ICsgc193aW4ueTsKKworCS8qIEdvICEgKi8KKwlpZiAoKGVyciA9IHc5OTY4Y2Zfc2Vuc29yX2NtZChjYW0sIE9WQ0FNQ0hJUF9DTURfU19NT0RFLCAmc193aW4pKSkKKwkJZ290byBlcnJvcjsKKworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHNjeCArIHgsIDB4MTApOworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHNjeSArIHksIDB4MTEpOworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHNjeCArIHggKyBjdywgMHgxMik7CisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgc2N5ICsgeSArIGNoLCAweDEzKTsKKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB3LCAweDE0KTsKKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCBoLCAweDE1KTsKKworCS8qIEpQRUcgd2lkdGggJiBoZWlnaHQgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB3LCAweDMwKTsKKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCBoLCAweDMxKTsKKworCS8qIFkgJiBVViBmcmFtZSBidWZmZXIgc3RyaWRlcyAoaW4gV09SRCkgKi8KKwlpZiAoY2FtLT52cHBfZmxhZyAmIFZQUF9ERUNPTVBSRVNTSU9OKSB7CisJCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHcvMiwgMHgyYyk7CisJCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHcvNCwgMHgyZCk7CisJfSBlbHNlCisJCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHcsIDB4MmMpOworCisJaWYgKGVycikKKwkJZ290byBlcnJvcjsKKworCS8qIElmIGFsbCB3ZW50IHdlbGwsIHVwZGF0ZSB0aGUgZGV2aWNlIGRhdGEgc3RydWN0dXJlICovCisJbWVtY3B5KCZjYW0tPndpbmRvdywgJndpbiwgc2l6ZW9mKHdpbikpOworCWNhbS0+aHdfd2lkdGggPSB3OworCWNhbS0+aHdfaGVpZ2h0ID0gaDsKKworCS8qIFNldHRpbmdzIGNoYW5nZWQsIHNvIHdlIGNsZWFyIHRoZSBmcmFtZSBidWZmZXJzICovCisJbWVtc2V0KGNhbS0+ZnJhbWVbMF0uYnVmZmVyLCAwLCBjYW0tPm5idWZmZXJzKmNhbS0+ZnJhbWVbMF0uc2l6ZSk7CisKKwlEQkcoNCwgIlRoZSBjYXB0dXJlIGFyZWEgaXMgJWR4JWQsIE9mZnNldCAoeCx5KT0oJXUsJXUpIiwgCisJICAgIHdpbi53aWR0aCwgd2luLmhlaWdodCwgd2luLngsIHdpbi55KQorCisJUERCR0coIng9JXUgLHk9JXUsIHc9JXUsIGg9JXUsIGF4PSV1LCBheT0ldSwgc193aW4ueD0ldSwgc193aW4ueT0ldSwgIgorCSAgICAgICJjdz0ldSwgY2g9JXUsIHdpbi54PSV1LCB3aW4ueT0ldSwgd2luLndpZHRoPSV1LCB3aW4uaGVpZ2h0PSV1IiwKKwkgICAgICB4LCB5LCB3LCBoLCBheCwgYXksIHNfd2luLngsIHNfd2luLnksIGN3LCBjaCwgd2luLngsIHdpbi55LAorCSAgICAgIHdpbi53aWR0aCwgd2luLmhlaWdodCkKKworCXJldHVybiAwOworCitlcnJvcjoKKwlEQkcoMSwgIkZhaWxlZCB0byBjaGFuZ2UgdGhlIGNhcHR1cmUgYXJlYSBzaXplIikKKwlyZXR1cm4gZXJyOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisgIEFkanVzdCB0aGUgYXNrZWQgdmFsdWVzIGZvciB3aW5kb3cgd2lkdGggYW5kIGhlaWdodC4KKyAgUmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IAordzk5NjhjZl9hZGp1c3Rfd2luZG93X3NpemUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIHUxNiogd2lkdGgsIHUxNiogaGVpZ2h0KQoreworCXUxNiBtYXh3LCBtYXhoOworCisJaWYgKCgqd2lkdGggPCBjYW0tPm1pbndpZHRoKSB8fCAoKmhlaWdodCA8IGNhbS0+bWluaGVpZ2h0KSkKKwkJcmV0dXJuIC1FUkFOR0U7CisKKwltYXh3ID0gY2FtLT51cHNjYWxpbmcgJiYgIShjYW0tPnZwcF9mbGFnICYgVlBQX0RFQ09NUFJFU1NJT04pICYmCisJICAgICAgIHc5OTY4Y2ZfdnBwID8gbWF4KCh1MTYpVzk5NjhDRl9NQVhfV0lEVEgsIGNhbS0+bWF4d2lkdGgpCisJICAgICAgICAgICAgICAgICAgIDogY2FtLT5tYXh3aWR0aDsKKwltYXhoID0gY2FtLT51cHNjYWxpbmcgJiYgIShjYW0tPnZwcF9mbGFnICYgVlBQX0RFQ09NUFJFU1NJT04pICYmCisJICAgICAgIHc5OTY4Y2ZfdnBwID8gbWF4KCh1MTYpVzk5NjhDRl9NQVhfSEVJR0hULCBjYW0tPm1heGhlaWdodCkKKwkgICAgICAgICAgICAgICAgICAgOiBjYW0tPm1heGhlaWdodDsKKworCWlmICgqd2lkdGggPiBtYXh3KQorCQkqd2lkdGggPSBtYXh3OworCWlmICgqaGVpZ2h0ID4gbWF4aCkKKwkJKmhlaWdodCA9IG1heGg7CisKKwlpZiAoY2FtLT52cHBfZmxhZyAmIFZQUF9ERUNPTVBSRVNTSU9OKSB7CisJCSp3aWR0aCAgJj0gfjE1TDsgLyogbXVsdGlwbGUgb2YgMTYgKi8KKwkJKmhlaWdodCAmPSB+MTVMOworCX0KKworCVBEQkdHKCJXaW5kb3cgc2l6ZSBhZGp1c3RlZCB3PSV1LCBoPSV1ICIsICp3aWR0aCwgKmhlaWdodCkKKworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgSW5pdGlhbGl6ZSB0aGUgRklGTyBsaXN0IG9mIHJlcXVlc3RlZCBmcmFtZXMuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHc5OTY4Y2ZfaW5pdF9mcmFtZWxpc3Qoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCit7CisJdTggaTsKKworCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5idWZmZXJzOyBpKyspIHsKKwkJY2FtLT5yZXF1ZXN0ZWRfZnJhbWVbaV0gPSBOVUxMOworCQljYW0tPmZyYW1lW2ldLnF1ZXVlZCA9IDA7CisJCWNhbS0+ZnJhbWVbaV0uc3RhdHVzID0gRl9VTlVTRUQ7CisJfQorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgQWRkIGEgZnJhbWUgaW4gdGhlIEZJRk8gbGlzdCBvZiByZXF1ZXN0ZWQgZnJhbWVzLgorICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBwcm9jZXNzIGNvbnRleHQuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHc5OTY4Y2ZfcHVzaF9mcmFtZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgdTggZl9udW0pCit7CisJdTggZjsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5mbGlzdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKworCWZvciAoZj0wOyBjYW0tPnJlcXVlc3RlZF9mcmFtZVtmXSAhPSBOVUxMOyBmKyspOworCWNhbS0+cmVxdWVzdGVkX2ZyYW1lW2ZdID0gJmNhbS0+ZnJhbWVbZl9udW1dOworCWNhbS0+ZnJhbWVbZl9udW1dLnF1ZXVlZCA9IDE7CisJY2FtLT5mcmFtZVtmX251bV0uc3RhdHVzID0gRl9VTlVTRUQ7IC8qIGNsZWFyIHRoZSBzdGF0dXMgKi8KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+Zmxpc3RfbG9jaywgbG9ja19mbGFncyk7CisKKwlEQkcoNiwgIkZyYW1lICMldSBwdXNoZWQgaW50byB0aGUgRklGTyBsaXN0LiBQb3NpdGlvbiAldSIsIGZfbnVtLCBmKQorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgUmVhZCwgc3RvcmUgYW5kIHJlbW92ZSB0aGUgZmlyc3QgcG9pbnRlciBpbiB0aGUgRklGTyBsaXN0IG9mIHJlcXVlc3RlZAorICBmcmFtZXMuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0LgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCAKK3c5OTY4Y2ZfcG9wX2ZyYW1lKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCBzdHJ1Y3Qgdzk5NjhjZl9mcmFtZV90KiogZnJhbWVwKQoreworCXU4IGk7CisKKwlzcGluX2xvY2soJmNhbS0+Zmxpc3RfbG9jayk7CisKKwkqZnJhbWVwID0gY2FtLT5yZXF1ZXN0ZWRfZnJhbWVbMF07CisKKwkvKiBTaGlmdCB0aGUgbGlzdCBvZiBwb2ludGVycyAqLworCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5idWZmZXJzLTE7IGkrKykKKwkJY2FtLT5yZXF1ZXN0ZWRfZnJhbWVbaV0gPSBjYW0tPnJlcXVlc3RlZF9mcmFtZVtpKzFdOworCWNhbS0+cmVxdWVzdGVkX2ZyYW1lW2ldID0gTlVMTDsKKworCXNwaW5fdW5sb2NrKCZjYW0tPmZsaXN0X2xvY2spOworCisJREJHKDYsIlBvcHBlZCBmcmFtZSAjJWQgZnJvbSB0aGUgbGlzdCIsICgqZnJhbWVwKS0+bnVtYmVyKQorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgSGlnaC1sZXZlbCB2aWRlbyBwb3N0LXByb2Nlc3Npbmcgcm91dGluZSBvbiBncmFiYmVkIGZyYW1lcy4KKyAgUmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IAordzk5NjhjZl9wb3N0cHJvY2Vzc19mcmFtZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB3OTk2OGNmX2ZyYW1lX3QqIGZyKQoreworCXZvaWQgKnBJbiA9IGZyLT5idWZmZXIsICpwT3V0ID0gY2FtLT5mcmFtZV92cHAuYnVmZmVyLCAqdG1wOworCXUxNiB3ID0gY2FtLT53aW5kb3cud2lkdGgsCisJICAgIGggPSBjYW0tPndpbmRvdy5oZWlnaHQsCisJICAgIGQgPSBjYW0tPnBpY3R1cmUuZGVwdGgsCisJICAgIGZtdCA9IGNhbS0+cGljdHVyZS5wYWxldHRlLAorCSAgICByZ2IgPSBjYW0tPmZvcmNlX3JnYiwKKwkgICAgaHdfdyA9IGNhbS0+aHdfd2lkdGgsCisJICAgIGh3X2ggPSBjYW0tPmh3X2hlaWdodCwKKwkgICAgaHdfZCA9IGNhbS0+aHdfZGVwdGg7CisJaW50IGVyciA9IDA7CisKKwkjZGVmaW5lIF9QU1dBUChwSW4sIHBPdXQpIHt0bXAgPSAocEluKTsgKHBJbikgPSAocE91dCk7IChwT3V0KSA9IHRtcDt9CisKKwlpZiAoY2FtLT52cHBfZmxhZyAmIFZQUF9ERUNPTVBSRVNTSU9OKSB7CisJCW1lbWNweShwT3V0LCBwSW4sIGZyLT5sZW5ndGgpOworCQlfUFNXQVAocEluLCBwT3V0KQorCQllcnIgPSB3OTk2OGNmX3ZwcC0+ZGVjb2RlKHBJbiwgZnItPmxlbmd0aCwgaHdfdywgaHdfaCwgcE91dCk7CisJCVBEQkdHKCJDb21wcmVzc2VkIGZyYW1lIGxlbmd0aDogJWx1IiwodW5zaWduZWQgbG9uZylmci0+bGVuZ3RoKQorCQlmci0+bGVuZ3RoID0gKGh3X3cqaHdfaCpod19kKS84OworCQlfUFNXQVAocEluLCBwT3V0KQorCQlpZiAoZXJyKSB7CisJCQlEQkcoNCwgIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGRlY29kaW5nIHRoZSBmcmFtZTogIgorCQkJICAgICAgICIlcyIsIHN5bWJvbGljKGRlY29kZXJfZXJybGlzdCwgZXJyKSkKKwkJCXJldHVybiBlcnI7CisJCX0gZWxzZQorCQkJREJHKDYsICJGcmFtZSBkZWNvZGVkIikKKwl9CisKKwlpZiAoY2FtLT52cHBfZmxhZyAmIFZQUF9TV0FQX1lVVl9CWVRFUykgeworCQl3OTk2OGNmX3ZwcC0+c3dhcF95dXZieXRlcyhwSW4sIGZyLT5sZW5ndGgpOworCQlEQkcoNiwgIk9yaWdpbmFsIFVZVlkgY29tcG9uZW50IG9yZGVyaW5nIGNoYW5nZWQiKQorCX0KKworCWlmIChjYW0tPnZwcF9mbGFnICYgVlBQX1VQU0NBTEUpIHsKKwkJdzk5NjhjZl92cHAtPnNjYWxlX3VwKHBJbiwgcE91dCwgaHdfdywgaHdfaCwgaHdfZCwgdywgaCk7CisJCWZyLT5sZW5ndGggPSAodypoKmh3X2QpLzg7CisJCV9QU1dBUChwSW4sIHBPdXQpCisJCURCRyg2LCAiVmVydGljYWwgdXAtc2NhbGluZyBkb25lOiAldSwldSwldWJwcC0+JXUsJXUiLAorCQkgICAgaHdfdywgaHdfaCwgaHdfZCwgdywgaCkKKwl9CisKKwlpZiAoY2FtLT52cHBfZmxhZyAmIFZQUF9VWVZZX1RPX1JHQlgpIHsKKwkJdzk5NjhjZl92cHAtPnV5dnlfdG9fcmdieChwSW4sIGZyLT5sZW5ndGgsIHBPdXQsIGZtdCwgcmdiKTsKKwkJZnItPmxlbmd0aCA9ICh3KmgqZCkvODsKKwkJX1BTV0FQKHBJbiwgcE91dCkKKwkJREJHKDYsICJVWVZZLTE2Yml0IHRvICVzIGNvbnZlcnNpb24gZG9uZSIsIAorCQkgICAgc3ltYm9saWModjRsMV9wbGlzdCwgZm10KSkKKwl9CisKKwlpZiAocE91dCA9PSBmci0+YnVmZmVyKQorCQltZW1jcHkoZnItPmJ1ZmZlciwgY2FtLT5mcmFtZV92cHAuYnVmZmVyLCBmci0+bGVuZ3RoKTsKKworCXJldHVybiAwOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEltYWdlIHNlbnNvciBjb250cm9sIHJvdXRpbmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCAKK3c5OTY4Y2Zfc2Vuc29yX3NldF9jb250cm9sKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCBpbnQgY2lkLCBpbnQgdmFsKQoreworCXN0cnVjdCBvdmNhbWNoaXBfY29udHJvbCBjdGw7CisJaW50IGVycjsKKworCWN0bC5pZCA9IGNpZDsKKwljdGwudmFsdWUgPSB2YWw7CisKKwllcnIgPSB3OTk2OGNmX3NlbnNvcl9jbWQoY2FtLCBPVkNBTUNISVBfQ01EX1NfQ1RSTCwgJmN0bCk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgCit3OTk2OGNmX3NlbnNvcl9nZXRfY29udHJvbChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgaW50IGNpZCwgaW50KiB2YWwpCit7CisJc3RydWN0IG92Y2FtY2hpcF9jb250cm9sIGN0bDsKKwlpbnQgZXJyOworCisJY3RsLmlkID0gY2lkOworCisJZXJyID0gdzk5NjhjZl9zZW5zb3JfY21kKGNhbSwgT1ZDQU1DSElQX0NNRF9HX0NUUkwsICZjdGwpOworCWlmICghZXJyKQorCQkqdmFsID0gY3RsLnZhbHVlOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50Cit3OTk2OGNmX3NlbnNvcl9jbWQoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIHVuc2lnbmVkIGludCBjbWQsIHZvaWQqIGFyZykKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCogYyA9IGNhbS0+c2Vuc29yX2NsaWVudDsKKwlpbnQgcmMgPSAwOworCisJaWYgKCFjIHx8ICFjLT5kcml2ZXIgfHwgIWMtPmRyaXZlci0+Y29tbWFuZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyYyA9IGMtPmRyaXZlci0+Y29tbWFuZChjLCBjbWQsIGFyZyk7CisJLyogVGhlIEkyQyBkcml2ZXIgcmV0dXJucyAtRVBFUk0gb24gbm9uLXN1cHBvcnRlZCBjb250cm9scyAqLworCXJldHVybiAocmMgPCAwICYmIHJjICE9IC1FUEVSTSkgPyByYyA6IDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBVcGRhdGUgc29tZSBzZXR0aW5ncyBvZiB0aGUgaW1hZ2Ugc2Vuc29yLgorICBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgbnVtYmVyIG90aGVyd2lzZS4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCB3OTk2OGNmX3NlbnNvcl91cGRhdGVfc2V0dGluZ3Moc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCit7CisJaW50IGVyciA9IDA7CisKKwkvKiBBdXRvIGJyaWdodG5lc3MgKi8KKwllcnIgPSB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfQVVUT0JSSUdIVCwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtLT5hdXRvX2JydCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIEF1dG8gZXhwb3N1cmUgKi8KKwllcnIgPSB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfQVVUT0VYUCwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtLT5hdXRvX2V4cCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIEJhbmRpbmcgZmlsdGVyICovCisJZXJyID0gdzk5NjhjZl9zZW5zb3Jfc2V0X2NvbnRyb2woY2FtLCBPVkNBTUNISVBfQ0lEX0JBTkRGSUxULCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW0tPmJhbmRmaWx0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogTGlnaHQgZnJlcXVlbmN5ICovCisJZXJyID0gdzk5NjhjZl9zZW5zb3Jfc2V0X2NvbnRyb2woY2FtLCBPVkNBTUNISVBfQ0lEX0ZSRVEsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtLT5saWdodGZyZXEpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBCYWNrIGxpZ2h0ICovCisJZXJyID0gdzk5NjhjZl9zZW5zb3Jfc2V0X2NvbnRyb2woY2FtLCBPVkNBTUNISVBfQ0lEX0JBQ0tMSUdIVCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW0tPmJhY2tsaWdodCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIE1pcnJvciAqLworCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX3NldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9NSVJST1IsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtLT5taXJyb3IpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEdldCBzb21lIGN1cnJlbnQgcGljdHVyZSBzZXR0aW5ncyBmcm9tIHRoZSBpbWFnZSBzZW5zb3IgYW5kIHVwZGF0ZSB0aGUKKyAgaW50ZXJuYWwgJ3BpY3R1cmUnIHN0cnVjdHVyZSBvZiB0aGUgY2FtZXJhLgorICBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgbnVtYmVyIG90aGVyd2lzZS4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCB3OTk2OGNmX3NlbnNvcl9nZXRfcGljdHVyZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyLCB2OworCisJZXJyID0gdzk5NjhjZl9zZW5zb3JfZ2V0X2NvbnRyb2woY2FtLCBPVkNBTUNISVBfQ0lEX0NPTlQsICZ2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWNhbS0+cGljdHVyZS5jb250cmFzdCA9IHY7CisKKwllcnIgPSB3OTk2OGNmX3NlbnNvcl9nZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfQlJJR0hULCAmdik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwljYW0tPnBpY3R1cmUuYnJpZ2h0bmVzcyA9IHY7CisKKwllcnIgPSB3OTk2OGNmX3NlbnNvcl9nZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfU0FULCAmdik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwljYW0tPnBpY3R1cmUuY29sb3VyID0gdjsKKworCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX2dldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9IVUUsICZ2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWNhbS0+cGljdHVyZS5odWUgPSB2OworCisJREJHKDUsICJHb3QgcGljdHVyZSBzZXR0aW5ncyBmcm9tIHRoZSBpbWFnZSBzZW5zb3IiKQorCisJUERCR0coIkJyaWdodG5lc3MsIGNvbnRyYXN0LCBodWUsIGNvbG91ciwgd2hpdGVuZXNzIGFyZSAiCisJICAgICAgIiV1LCV1LCV1LCV1LCV1IiwgY2FtLT5waWN0dXJlLmJyaWdodG5lc3MsY2FtLT5waWN0dXJlLmNvbnRyYXN0LAorCSAgICAgIGNhbS0+cGljdHVyZS5odWUsIGNhbS0+cGljdHVyZS5jb2xvdXIsIGNhbS0+cGljdHVyZS53aGl0ZW5lc3MpCisKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFVwZGF0ZSBwaWN0dXJlIHNldHRpbmdzIG9mIHRoZSBpbWFnZSBzZW5zb3IuCisgIFJldHVybnM6IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50Cit3OTk2OGNmX3NlbnNvcl91cGRhdGVfcGljdHVyZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fcGljdHVyZSBwaWN0KQoreworCWludCBlcnIgPSAwOworCisJaWYgKCghY2FtLT5zZW5zb3JfaW5pdGlhbGl6ZWQpCisJICAgIHx8IHBpY3QuY29udHJhc3QgIT0gY2FtLT5waWN0dXJlLmNvbnRyYXN0KSB7CisJCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX3NldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9DT05ULAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWN0LmNvbnRyYXN0KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZmFpbDsKKwkJREJHKDQsICJDb250cmFzdCBjaGFuZ2VkIGZyb20gJXUgdG8gJXUiLAorCQkgICAgY2FtLT5waWN0dXJlLmNvbnRyYXN0LCBwaWN0LmNvbnRyYXN0KQorCQljYW0tPnBpY3R1cmUuY29udHJhc3QgPSBwaWN0LmNvbnRyYXN0OworCX0KKworCWlmICgoKCFjYW0tPnNlbnNvcl9pbml0aWFsaXplZCkgfHwgCisJICAgIHBpY3QuYnJpZ2h0bmVzcyAhPSBjYW0tPnBpY3R1cmUuYnJpZ2h0bmVzcykgJiYgKCFjYW0tPmF1dG9fYnJ0KSkgeworCQllcnIgPSB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfQlJJR0hULCAKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljdC5icmlnaHRuZXNzKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZmFpbDsKKwkJREJHKDQsICJCcmlnaHRuZXNzIGNoYW5nZWQgZnJvbSAldSB0byAldSIsCisJCSAgICBjYW0tPnBpY3R1cmUuYnJpZ2h0bmVzcywgcGljdC5icmlnaHRuZXNzKQorCQljYW0tPnBpY3R1cmUuYnJpZ2h0bmVzcyA9IHBpY3QuYnJpZ2h0bmVzczsKKwl9CisKKwlpZiAoKCFjYW0tPnNlbnNvcl9pbml0aWFsaXplZCkgfHwgcGljdC5jb2xvdXIgIT0gY2FtLT5waWN0dXJlLmNvbG91cikgeworCQllcnIgPSB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfU0FULCAKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljdC5jb2xvdXIpOworCQlpZiAoZXJyKQorCQkJZ290byBmYWlsOworCQlEQkcoNCwgIkNvbG91ciBjaGFuZ2VkIGZyb20gJXUgdG8gJXUiLAorCQkgICAgY2FtLT5waWN0dXJlLmNvbG91ciwgcGljdC5jb2xvdXIpCisJCWNhbS0+cGljdHVyZS5jb2xvdXIgPSBwaWN0LmNvbG91cjsKKwl9CisKKwlpZiAoKCFjYW0tPnNlbnNvcl9pbml0aWFsaXplZCkgfHwgcGljdC5odWUgIT0gY2FtLT5waWN0dXJlLmh1ZSkgeworCQllcnIgPSB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfSFVFLCAKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljdC5odWUpOworCQlpZiAoZXJyKQorCQkJZ290byBmYWlsOworCQlEQkcoNCwgIkh1ZSBjaGFuZ2VkIGZyb20gJXUgdG8gJXUiLAorCQkgICAgY2FtLT5waWN0dXJlLmh1ZSwgcGljdC5odWUpCisJCWNhbS0+cGljdHVyZS5odWUgPSBwaWN0Lmh1ZTsKKwl9CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlEQkcoNCwgIkZhaWxlZCB0byBjaGFuZ2Ugc2Vuc29yIHBpY3R1cmUgc2V0dGluZyIpCisJcmV0dXJuIGVycjsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDYW1lcmEgY29uZmlndXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHN1cHBvcnRlZCBpbWFnZSBzZW5zb3IgaXMgZGV0ZWN0ZWQuCisgIFJldHVybiAwIGlmIHRoZSBpbml0aWFsaXphdGlvbiBzdWNjZWVkcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHc5OTY4Y2Zfc2Vuc29yX2luaXQoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAoKGVyciA9IHc5OTY4Y2Zfc2Vuc29yX2NtZChjYW0sIE9WQ0FNQ0hJUF9DTURfSU5JVElBTElaRSwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhbS0+bW9ub2Nocm9tZSkpKQorCQlnb3RvIGVycm9yOworCisJaWYgKChlcnIgPSB3OTk2OGNmX3NlbnNvcl9jbWQoY2FtLCBPVkNBTUNISVBfQ01EX1FfU1VCVFlQRSwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhbS0+c2Vuc29yKSkpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBOT1RFOiBNYWtlIHN1cmUgd2lkdGggYW5kIGhlaWdodCBhcmUgYSBtdWx0aXBsZSBvZiAxNiAqLworCXN3aXRjaCAoY2FtLT5zZW5zb3JfY2xpZW50LT5hZGRyKSB7CisJCWNhc2UgT1Y2eHgwX1NJRDoKKwkJCWNhbS0+bWF4d2lkdGggPSAzNTI7CisJCQljYW0tPm1heGhlaWdodCA9IDI4ODsKKwkJCWNhbS0+bWlud2lkdGggPSA2NDsKKwkJCWNhbS0+bWluaGVpZ2h0ID0gNDg7CisJCQlicmVhazsKKwkJY2FzZSBPVjd4eDBfU0lEOgorCQkJY2FtLT5tYXh3aWR0aCA9IDY0MDsKKwkJCWNhbS0+bWF4aGVpZ2h0ID0gNDgwOworCQkJY2FtLT5taW53aWR0aCA9IDY0OworCQkJY2FtLT5taW5oZWlnaHQgPSA0ODsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJREJHKDEsICJOb3Qgc3VwcG9ydGVkIGltYWdlIHNlbnNvciBkZXRlY3RlZCBmb3IgJXMiLAorCQkJICAgIHN5bWJvbGljKGNhbWxpc3QsIGNhbS0+aWQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVGhlc2UgdmFsdWVzIGRlcGVuZCBvbiB0aGUgb25lcyBpbiB0aGUgb3Z4eHgwLmMgc291cmNlcyAqLworCXN3aXRjaCAoY2FtLT5zZW5zb3IpIHsKKwkJY2FzZSBDQ19PVjc2MjA6CisJCQljYW0tPnN0YXJ0X2Nyb3B4ID0gMjg3OworCQkJY2FtLT5zdGFydF9jcm9weSA9IDM1OworCQkJLyogU2VlbXMgdG8gd29yayBhcm91bmQgYSBidWcgaW4gdGhlIGltYWdlIHNlbnNvciAqLworCQkJY2FtLT52c19wb2xhcml0eSA9IDE7CisJCQljYW0tPmhzX3BvbGFyaXR5ID0gMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY2FtLT5zdGFydF9jcm9weCA9IDMyMDsKKwkJCWNhbS0+c3RhcnRfY3JvcHkgPSAzNTsKKwkJCWNhbS0+dnNfcG9sYXJpdHkgPSAxOworCQkJY2FtLT5oc19wb2xhcml0eSA9IDA7CisJfQorCisJaWYgKChlcnIgPSB3OTk2OGNmX3NlbnNvcl91cGRhdGVfc2V0dGluZ3MoY2FtKSkpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoKGVyciA9IHc5OTY4Y2Zfc2Vuc29yX3VwZGF0ZV9waWN0dXJlKGNhbSwgY2FtLT5waWN0dXJlKSkpCisJCWdvdG8gZXJyb3I7CisKKwljYW0tPnNlbnNvcl9pbml0aWFsaXplZCA9IDE7CisKKwlEQkcoMiwgIiVzIGltYWdlIHNlbnNvciBpbml0aWFsaXplZCIsIHN5bWJvbGljKHNlbmxpc3QsIGNhbS0+c2Vuc29yKSkKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJY2FtLT5zZW5zb3JfaW5pdGlhbGl6ZWQgPSAwOworCWNhbS0+c2Vuc29yID0gQ0NfVU5LTk9XTjsKKwlEQkcoMSwgIkltYWdlIHNlbnNvciBpbml0aWFsaXphdGlvbiBmYWlsZWQgZm9yICVzICgvZGV2L3ZpZGVvJWQpLiAiCisJICAgICAgICJUcnkgdG8gZGV0YWNoIGFuZCBhdHRhY2ggdGhpcyBkZXZpY2UgYWdhaW4iLAorCSAgICBzeW1ib2xpYyhjYW1saXN0LCBjYW0tPmlkKSwgY2FtLT52NGxkZXYtPm1pbm9yKQorCXJldHVybiBlcnI7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBGaWxsIHNvbWUgYmFzaWMgZmllbGRzIGluIHRoZSBtYWluIGRldmljZSBkYXRhIHN0cnVjdHVyZS4KKyAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBvbiB3OTk2OGNmX3VzYl9wcm9iZSgpIGZvciBlYWNoIHJlY29nbml6ZWQgCisgIGNhbWVyYS4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQKK3c5OTY4Y2ZfY29uZmlndXJlX2NhbWVyYShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXNiX2RldmljZSogdWRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHc5OTY4Y2ZfbW9kZWxfaWQgbW9kX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IGRldl9ucikKK3sKKwlpbml0X01VVEVYKCZjYW0tPmZpbGVvcF9zZW0pOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhbS0+b3Blbik7CisJc3Bpbl9sb2NrX2luaXQoJmNhbS0+dXJiX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZjYW0tPmZsaXN0X2xvY2spOworCisJY2FtLT51c2VycyA9IDA7CisJY2FtLT5kaXNjb25uZWN0ZWQgPSAwOworCWNhbS0+aWQgPSBtb2RfaWQ7CisJY2FtLT5zZW5zb3IgPSBDQ19VTktOT1dOOworCWNhbS0+c2Vuc29yX2luaXRpYWxpemVkID0gMDsKKworCS8qIENhbGN1bGF0ZSB0aGUgYWx0ZXJuYXRlIHNldHRpbmcgbnVtYmVyIChmcm9tIDEgdG8gMTYpCisJICAgYWNjb3JkaW5nIHRvIHRoZSAncGFja2V0X3NpemUnIG1vZHVsZSBwYXJhbWV0ZXIgKi8KKwlpZiAocGFja2V0X3NpemVbZGV2X25yXSA8IFc5OTY4Q0ZfTUlOX1BBQ0tFVF9TSVpFKQorCQlwYWNrZXRfc2l6ZVtkZXZfbnJdID0gVzk5NjhDRl9NSU5fUEFDS0VUX1NJWkU7CisJZm9yIChjYW0tPmFsdHNldHRpbmcgPSAxOworCSAgICAgcGFja2V0X3NpemVbZGV2X25yXSA8IHdNYXhQYWNrZXRTaXplW2NhbS0+YWx0c2V0dGluZy0xXTsKKwkgICAgIGNhbS0+YWx0c2V0dGluZysrKTsKKworCWNhbS0+bWF4X2J1ZmZlcnMgPSAobWF4X2J1ZmZlcnNbZGV2X25yXSA8IDIgfHwgCisJICAgICAgICAgICAgICAgICAgICBtYXhfYnVmZmVyc1tkZXZfbnJdID4gVzk5NjhDRl9NQVhfQlVGRkVSUykKKwkgICAgICAgICAgICAgICAgICAgPyBXOTk2OENGX0JVRkZFUlMgOiAodTgpbWF4X2J1ZmZlcnNbZGV2X25yXTsKKworCWNhbS0+ZG91YmxlX2J1ZmZlciA9IChkb3VibGVfYnVmZmVyW2Rldl9ucl0gPT0gMCB8fCAKKwkgICAgICAgICAgICAgICAgICAgICAgZG91YmxlX2J1ZmZlcltkZXZfbnJdID09IDEpCisJICAgICAgICAgICAgICAgICAgICAgPyAodTgpZG91YmxlX2J1ZmZlcltkZXZfbnJdOlc5OTY4Q0ZfRE9VQkxFX0JVRkZFUjsKKworCWNhbS0+Y2xhbXBpbmcgPSAoY2xhbXBpbmdbZGV2X25yXSA9PSAwIHx8IGNsYW1waW5nW2Rldl9ucl0gPT0gMSkKKwkgICAgICAgICAgICAgICAgPyAodTgpY2xhbXBpbmdbZGV2X25yXSA6IFc5OTY4Q0ZfQ0xBTVBJTkc7CisJCisJY2FtLT5maWx0ZXJfdHlwZSA9IChmaWx0ZXJfdHlwZVtkZXZfbnJdID09IDAgfHwKKwkgICAgICAgICAgICAgICAgICAgIGZpbHRlcl90eXBlW2Rldl9ucl0gPT0gMSB8fAorCSAgICAgICAgICAgICAgICAgICAgZmlsdGVyX3R5cGVbZGV2X25yXSA9PSAyKQorCSAgICAgICAgICAgICAgICAgICA/ICh1OClmaWx0ZXJfdHlwZVtkZXZfbnJdIDogVzk5NjhDRl9GSUxURVJfVFlQRTsKKworCWNhbS0+Y2FwdHVyZSA9IDE7CisKKwljYW0tPmxhcmdldmlldyA9IChsYXJnZXZpZXdbZGV2X25yXSA9PSAwIHx8IGxhcmdldmlld1tkZXZfbnJdID09IDEpCisJICAgICAgICAgICAgICAgICA/ICh1OClsYXJnZXZpZXdbZGV2X25yXSA6IFc5OTY4Q0ZfTEFSR0VWSUVXOworCisJY2FtLT5kZWNvbXByZXNzaW9uID0gKGRlY29tcHJlc3Npb25bZGV2X25yXSA9PSAwIHx8IAorCSAgICAgICAgICAgICAgICAgICAgICBkZWNvbXByZXNzaW9uW2Rldl9ucl0gPT0gMSB8fAorCSAgICAgICAgICAgICAgICAgICAgICBkZWNvbXByZXNzaW9uW2Rldl9ucl0gPT0gMikKKwkgICAgICAgICAgICAgICAgICAgICA/ICh1OClkZWNvbXByZXNzaW9uW2Rldl9ucl06Vzk5NjhDRl9ERUNPTVBSRVNTSU9OOworCisJY2FtLT51cHNjYWxpbmcgPSAodXBzY2FsaW5nW2Rldl9ucl0gPT0gMCB8fCAKKwkgICAgICAgICAgICAgICAgICB1cHNjYWxpbmdbZGV2X25yXSA9PSAxKQorCSAgICAgICAgICAgICAgICAgPyAodTgpdXBzY2FsaW5nW2Rldl9ucl0gOiBXOTk2OENGX1VQU0NBTElORzsKKworCWNhbS0+YXV0b19icnQgPSAoYXV0b2JyaWdodFtkZXZfbnJdID09IDAgfHwgYXV0b2JyaWdodFtkZXZfbnJdID09IDEpCisJICAgICAgICAgICAgICAgID8gKHU4KWF1dG9icmlnaHRbZGV2X25yXSA6IFc5OTY4Q0ZfQVVUT0JSSUdIVDsKKworCWNhbS0+YXV0b19leHAgPSAoYXV0b2V4cFtkZXZfbnJdID09IDAgfHwgYXV0b2V4cFtkZXZfbnJdID09IDEpCisJICAgICAgICAgICAgICAgID8gKHU4KWF1dG9leHBbZGV2X25yXSA6IFc5OTY4Q0ZfQVVUT0VYUDsKKworCWNhbS0+bGlnaHRmcmVxID0gKGxpZ2h0ZnJlcVtkZXZfbnJdID09IDUwIHx8IGxpZ2h0ZnJlcVtkZXZfbnJdID09IDYwKQorCSAgICAgICAgICAgICAgICAgPyAodTgpbGlnaHRmcmVxW2Rldl9ucl0gOiBXOTk2OENGX0xJR0hURlJFUTsKKworCWNhbS0+YmFuZGZpbHQgPSAoYmFuZGluZ2ZpbHRlcltkZXZfbnJdID09IDAgfHwgCisJICAgICAgICAgICAgICAgICBiYW5kaW5nZmlsdGVyW2Rldl9ucl0gPT0gMSkKKwkgICAgICAgICAgICAgICAgPyAodTgpYmFuZGluZ2ZpbHRlcltkZXZfbnJdIDogVzk5NjhDRl9CQU5ESU5HRklMVEVSOworCisJY2FtLT5iYWNrbGlnaHQgPSAoYmFja2xpZ2h0W2Rldl9ucl0gPT0gMCB8fCBiYWNrbGlnaHRbZGV2X25yXSA9PSAxKQorCSAgICAgICAgICAgICAgICAgPyAodTgpYmFja2xpZ2h0W2Rldl9ucl0gOiBXOTk2OENGX0JBQ0tMSUdIVDsKKworCWNhbS0+Y2xvY2tkaXYgPSAoY2xvY2tkaXZbZGV2X25yXSA9PSAtMSB8fCBjbG9ja2RpdltkZXZfbnJdID49IDApCisJICAgICAgICAgICAgICAgID8gKHM4KWNsb2NrZGl2W2Rldl9ucl0gOiBXOTk2OENGX0NMT0NLRElWOworCisJY2FtLT5taXJyb3IgPSAobWlycm9yW2Rldl9ucl0gPT0gMCB8fCBtaXJyb3JbZGV2X25yXSA9PSAxKQorCSAgICAgICAgICAgICAgPyAodTgpbWlycm9yW2Rldl9ucl0gOiBXOTk2OENGX01JUlJPUjsKKworCWNhbS0+bW9ub2Nocm9tZSA9IChtb25vY2hyb21lW2Rldl9ucl0gPT0gMCB8fCBtb25vY2hyb21lW2Rldl9ucl0gPT0gMSkKKwkgICAgICAgICAgICAgICAgICA/IG1vbm9jaHJvbWVbZGV2X25yXSA6IFc5OTY4Q0ZfTU9OT0NIUk9NRTsKKworCWNhbS0+cGljdHVyZS5icmlnaHRuZXNzID0gKHUxNilicmlnaHRuZXNzW2Rldl9ucl07CisJY2FtLT5waWN0dXJlLmh1ZSA9ICh1MTYpaHVlW2Rldl9ucl07CisJY2FtLT5waWN0dXJlLmNvbG91ciA9ICh1MTYpY29sb3VyW2Rldl9ucl07CisJY2FtLT5waWN0dXJlLmNvbnRyYXN0ID0gKHUxNiljb250cmFzdFtkZXZfbnJdOworCWNhbS0+cGljdHVyZS53aGl0ZW5lc3MgPSAodTE2KXdoaXRlbmVzc1tkZXZfbnJdOworCWlmICh3OTk2OGNmX3ZhbGlkX3BhbGV0dGUoKHUxNilmb3JjZV9wYWxldHRlW2Rldl9ucl0pKSB7CisJCWNhbS0+cGljdHVyZS5wYWxldHRlID0gKHUxNilmb3JjZV9wYWxldHRlW2Rldl9ucl07CisJCWNhbS0+Zm9yY2VfcGFsZXR0ZSA9IDE7CisJfSBlbHNlIHsKKwkJY2FtLT5mb3JjZV9wYWxldHRlID0gMDsKKwkJaWYgKGNhbS0+ZGVjb21wcmVzc2lvbiA9PSAwKQorCQkJY2FtLT5waWN0dXJlLnBhbGV0dGUgPSBXOTk2OENGX1BBTEVUVEVfREVDT01QX09GRjsKKwkJZWxzZSBpZiAoY2FtLT5kZWNvbXByZXNzaW9uID09IDEpCisJCQljYW0tPnBpY3R1cmUucGFsZXR0ZSA9IFc5OTY4Q0ZfUEFMRVRURV9ERUNPTVBfRk9SQ0U7CisJCWVsc2UKKwkJCWNhbS0+cGljdHVyZS5wYWxldHRlID0gVzk5NjhDRl9QQUxFVFRFX0RFQ09NUF9PTjsKKwl9CisJY2FtLT5waWN0dXJlLmRlcHRoID0gdzk5NjhjZl92YWxpZF9kZXB0aChjYW0tPnBpY3R1cmUucGFsZXR0ZSk7CisKKwljYW0tPmZvcmNlX3JnYiA9IChmb3JjZV9yZ2JbZGV2X25yXSA9PSAwIHx8IGZvcmNlX3JnYltkZXZfbnJdID09IDEpCisJICAgICAgICAgICAgICAgICA/ICh1OClmb3JjZV9yZ2JbZGV2X25yXSA6IFc5OTY4Q0ZfRk9SQ0VfUkdCOworCisJY2FtLT53aW5kb3cueCA9IDA7CisJY2FtLT53aW5kb3cueSA9IDA7CisJY2FtLT53aW5kb3cud2lkdGggPSBXOTk2OENGX1dJRFRIOworCWNhbS0+d2luZG93LmhlaWdodCA9IFc5OTY4Q0ZfSEVJR0hUOworCWNhbS0+d2luZG93LmNocm9tYWtleSA9IDA7CisJY2FtLT53aW5kb3cuY2xpcGNvdW50ID0gMDsKKwljYW0tPndpbmRvdy5mbGFncyA9IDA7CisKKwlEQkcoMywgIiVzIGNvbmZpZ3VyZWQgd2l0aCBzZXR0aW5ncyAjJXU6IiwKKwkgICAgc3ltYm9saWMoY2FtbGlzdCwgY2FtLT5pZCksIGRldl9ucikKKwkKKwlEQkcoMywgIi0gRGF0YSBwYWNrZXQgc2l6ZSBmb3IgVVNCIGlzb2Nocm5vdXMgdHJhbnNmZXI6ICV1IGJ5dGVzIiwKKwkgICAgd01heFBhY2tldFNpemVbY2FtLT5hbHRzZXR0aW5nLTFdKQorCQorCURCRygzLCAiLSBOdW1iZXIgb2YgcmVxdWVzdGVkIHZpZGVvIGZyYW1lIGJ1ZmZlcnM6ICV1IiwKKwkgICAgY2FtLT5tYXhfYnVmZmVycykKKworCWlmIChjYW0tPmRvdWJsZV9idWZmZXIpCisJCURCRygzLCAiLSBIYXJkd2FyZSBkb3VibGUgYnVmZmVyaW5nIGVuYWJsZWQiKQorCWVsc2UgCisJCURCRygzLCAiLSBIYXJkd2FyZSBkb3VibGUgYnVmZmVyaW5nIGRpc2FibGVkIikKKworCWlmIChjYW0tPmZpbHRlcl90eXBlID09IDApCisJCURCRygzLCAiLSBWaWRlbyBmaWx0ZXJpbmcgZGlzYWJsZWQiKQorCWVsc2UgaWYgKGNhbS0+ZmlsdGVyX3R5cGUgPT0gMSkKKwkJREJHKDMsICItIFZpZGVvIGZpbHRlcmluZyBlbmFibGVkOiB0eXBlIDEtMi0xIikKKwllbHNlIGlmIChjYW0tPmZpbHRlcl90eXBlID09IDIpCisJCURCRygzLCAiLSBWaWRlbyBmaWx0ZXJpbmcgZW5hYmxlZDogdHlwZSAyLTMtNi0zLTIiKQorCisJaWYgKGNhbS0+Y2xhbXBpbmcpCisJCURCRygzLCAiLSBWaWRlbyBkYXRhIGNsYW1waW5nIChDQ0lSLTYwMSBmb3JtYXQpIGVuYWJsZWQiKQorCWVsc2UKKwkJREJHKDMsICItIFZpZGVvIGRhdGEgY2xhbXBpbmcgKENDSVItNjAxIGZvcm1hdCkgZGlzYWJsZWQiKQorCisJaWYgKGNhbS0+bGFyZ2V2aWV3KQorCQlEQkcoMywgIi0gTGFyZ2UgdmlldyBlbmFibGVkIikKKwllbHNlCisJCURCRygzLCAiLSBMYXJnZSB2aWV3IGRpc2FibGVkIikKKworCWlmICgoY2FtLT5kZWNvbXByZXNzaW9uKSA9PSAwICYmICghY2FtLT5mb3JjZV9wYWxldHRlKSkKKwkJREJHKDMsICItIERlY29tcHJlc3Npb24gZGlzYWJsZWQiKQorCWVsc2UgaWYgKChjYW0tPmRlY29tcHJlc3Npb24pID09IDEgJiYgKCFjYW0tPmZvcmNlX3BhbGV0dGUpKQorCQlEQkcoMywgIi0gRGVjb21wcmVzc2lvbiBmb3JjZWQiKQorCWVsc2UgaWYgKChjYW0tPmRlY29tcHJlc3Npb24pID09IDIgJiYgKCFjYW0tPmZvcmNlX3BhbGV0dGUpKQorCQlEQkcoMywgIi0gRGVjb21wcmVzc2lvbiBhbGxvd2VkIikKKworCWlmIChjYW0tPnVwc2NhbGluZykKKwkJREJHKDMsICItIFNvZnR3YXJlIGltYWdlIHNjYWxpbmcgZW5hYmxlZCIpCisJZWxzZQorCQlEQkcoMywgIi0gU29mdHdhcmUgaW1hZ2Ugc2NhbGluZyBkaXNhYmxlZCIpCisKKwlpZiAoY2FtLT5mb3JjZV9wYWxldHRlKQorCQlEQkcoMywgIi0gSW1hZ2UgcGFsZXR0ZSBmb3JjZWQgdG8gJXMiLAorCQkgICAgc3ltYm9saWModjRsMV9wbGlzdCwgY2FtLT5waWN0dXJlLnBhbGV0dGUpKQorCisJaWYgKGNhbS0+Zm9yY2VfcmdiKQorCQlEQkcoMywgIi0gUkdCIGNvbXBvbmVudCBvcmRlcmluZyB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiBCR1IiKQorCisJaWYgKGNhbS0+YXV0b19icnQpCisJCURCRygzLCAiLSBBdXRvIGJyaWdodG5lc3MgZW5hYmxlZCIpCisJZWxzZQorCQlEQkcoMywgIi0gQXV0byBicmlnaHRuZXNzIGRpc2FibGVkIikKKworCWlmIChjYW0tPmF1dG9fZXhwKQorCQlEQkcoMywgIi0gQXV0byBleHBvc3VyZSBlbmFibGVkIikKKwllbHNlCisJCURCRygzLCAiLSBBdXRvIGV4cG9zdXJlIGRpc2FibGVkIikKKworCWlmIChjYW0tPmJhY2tsaWdodCkKKwkJREJHKDMsICItIEJhY2tsaWdodCBleHBvc3VyZSBhbGdvcml0aG0gZW5hYmxlZCIpCisJZWxzZQorCQlEQkcoMywgIi0gQmFja2xpZ2h0IGV4cG9zdXJlIGFsZ29yaXRobSBkaXNhYmxlZCIpCisKKwlpZiAoY2FtLT5taXJyb3IpCisJCURCRygzLCAiLSBNaXJyb3IgZW5hYmxlZCIpCisJZWxzZQorCQlEQkcoMywgIi0gTWlycm9yIGRpc2FibGVkIikKKworCWlmIChjYW0tPmJhbmRmaWx0KQorCQlEQkcoMywgIi0gQmFuZGluZyBmaWx0ZXIgZW5hYmxlZCIpCisJZWxzZQorCQlEQkcoMywgIi0gQmFuZGluZyBmaWx0ZXIgZGlzYWJsZWQiKQorCisJREJHKDMsICItIFBvd2VyIGxpZ2h0aW5nIGZyZXF1ZW5jeTogJXUiLCBjYW0tPmxpZ2h0ZnJlcSkKKworCWlmIChjYW0tPmNsb2NrZGl2ID09IC0xKQorCQlEQkcoMywgIi0gQXV0b21hdGljIGNsb2NrIGRpdmlzb3IgZW5hYmxlZCIpCisJZWxzZQorCQlEQkcoMywgIi0gQ2xvY2sgZGl2aXNvcjogJWQiLCBjYW0tPmNsb2NrZGl2KQorCisJaWYgKGNhbS0+bW9ub2Nocm9tZSkKKwkJREJHKDMsICItIEltYWdlIHNlbnNvciB1c2VkIGFzIG1vbm9jaHJvbWUiKQorCWVsc2UKKwkJREJHKDMsICItIEltYWdlIHNlbnNvciBub3QgdXNlZCBhcyBtb25vY2hyb21lIikKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIElmIHRoZSB2aWRlbyBwb3N0LXByb2Nlc3NpbmcgbW9kdWxlIGlzIG5vdCBsb2FkZWQsIHNvbWUgcGFyYW1ldGVycworICBtdXN0IGJlIG92ZXJyaWRkZW4uCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHc5OTY4Y2ZfYWRqdXN0X2NvbmZpZ3VyYXRpb24oc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCit7CisJaWYgKCF3OTk2OGNmX3ZwcCkgeworCQlpZiAoY2FtLT5kZWNvbXByZXNzaW9uID09IDEpIHsKKwkJCWNhbS0+ZGVjb21wcmVzc2lvbiA9IDI7CisJCQlEQkcoMiwgIlZpZGVvIHBvc3QtcHJvY2Vzc2luZyBtb2R1bGUgbm90IGZvdW5kOiAiCisJCQkgICAgICAgIidkZWNvbXByZXNzaW9uJyBwYXJhbWV0ZXIgZm9yY2VkIHRvIDIiKQorCQl9CisJCWlmIChjYW0tPnVwc2NhbGluZykgeworCQkJY2FtLT51cHNjYWxpbmcgPSAwOworCQkJREJHKDIsICJWaWRlbyBwb3N0LXByb2Nlc3NpbmcgbW9kdWxlIG5vdCBmb3VuZDogIgorCQkJICAgICAgICIndXBzY2FsaW5nJyBwYXJhbWV0ZXIgZm9yY2VkIHRvIDAiKQorCQl9CisJCWlmIChjYW0tPnBpY3R1cmUucGFsZXR0ZSAhPSBWSURFT19QQUxFVFRFX1VZVlkpIHsKKwkJCWNhbS0+Zm9yY2VfcGFsZXR0ZSA9IDA7CisJCQlEQkcoMiwgIlZpZGVvIHBvc3QtcHJvY2Vzc2luZyBtb2R1bGUgbm90IGZvdW5kOiAiCisJCQkgICAgICAgIidmb3JjZV9wYWxldHRlJyBwYXJhbWV0ZXIgZm9yY2VkIHRvIDAiKQorCQl9CisJCWNhbS0+cGljdHVyZS5wYWxldHRlID0gVklERU9fUEFMRVRURV9VWVZZOworCQljYW0tPnBpY3R1cmUuZGVwdGggPSB3OTk2OGNmX3ZhbGlkX2RlcHRoKGNhbS0+cGljdHVyZS5wYWxldHRlKTsKKwl9Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBSZWxlYXNlIHRoZSByZXNvdXJjZXMgdXNlZCBieSB0aGUgZHJpdmVyLgorICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBkaXNjb25uZWN0IAorICAob3Igb24gY2xvc2UgaWYgZGVhbGxvY2F0aW9uIGhhcyBiZWVuIGRlZmVycmVkKQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCB3OTk2OGNmX3JlbGVhc2VfcmVzb3VyY2VzKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQoreworCWRvd24oJnc5OTY4Y2ZfZGV2bGlzdF9zZW0pOworCisJREJHKDIsICJWNEwgZGV2aWNlIGRlcmVnaXN0ZXJlZDogL2Rldi92aWRlbyVkIiwgY2FtLT52NGxkZXYtPm1pbm9yKQorCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoY2FtLT52NGxkZXYpOworCWxpc3RfZGVsKCZjYW0tPnY0bGxpc3QpOworCWkyY19kZWxfYWRhcHRlcigmY2FtLT5pMmNfYWRhcHRlcik7CisJdzk5NjhjZl9kZWFsbG9jYXRlX21lbW9yeShjYW0pOworCWtmcmVlKGNhbS0+Y29udHJvbF9idWZmZXIpOworCWtmcmVlKGNhbS0+ZGF0YV9idWZmZXIpOworCisJdXAoJnc5OTY4Y2ZfZGV2bGlzdF9zZW0pOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZpZGVvNExpbnV4IGludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCB3OTk2OGNmX29wZW4oc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUqIGZpbHApCit7CisJc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW07CisJaW50IGVycjsKKworCS8qIFRoaXMgdGhlIG9ubHkgc2FmZSB3YXkgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgd2l0aCBkaXNjb25uZWN0ICovCisJaWYgKCFkb3duX3JlYWRfdHJ5bG9jaygmdzk5NjhjZl9kaXNjb25uZWN0KSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWNhbSA9IChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKXZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCisJZG93bigmY2FtLT5kZXZfc2VtKTsKKworCWlmIChjYW0tPnNlbnNvciA9PSBDQ19VTktOT1dOKSB7CisJCURCRygyLCAiTm8gc3VwcG9ydGVkIGltYWdlIHNlbnNvciBoYXMgYmVlbiBkZXRlY3RlZCBieSB0aGUgIgorCQkgICAgICAgIidvdmNhbWNoaXAnIG1vZHVsZSBmb3IgdGhlICVzICgvZGV2L3ZpZGVvJWQpLiBNYWtlICIKKwkJICAgICAgICJzdXJlIGl0IGlzIGxvYWRlZCAqYmVmb3JlKiAocmUpY29ubmVjdGluZyB0aGUgY2FtZXJhLiIsCisJCSAgICBzeW1ib2xpYyhjYW1saXN0LCBjYW0tPmlkKSwgY2FtLT52NGxkZXYtPm1pbm9yKQorCQl1cCgmY2FtLT5kZXZfc2VtKTsKKwkJdXBfcmVhZCgmdzk5NjhjZl9kaXNjb25uZWN0KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGNhbS0+dXNlcnMpIHsKKwkJREJHKDIsICIlcyAoL2Rldi92aWRlbyVkKSBoYXMgYmVlbiBhbHJlYWR5IG9jY3VwaWVkIGJ5ICclcyciLAorCQkgICAgc3ltYm9saWMoY2FtbGlzdCwgY2FtLT5pZCksY2FtLT52NGxkZXYtPm1pbm9yLGNhbS0+Y29tbWFuZCkKKwkJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSyl8fChmaWxwLT5mX2ZsYWdzICYgT19OREVMQVkpKSB7CisJCQl1cCgmY2FtLT5kZXZfc2VtKTsKKwkJCXVwX3JlYWQoJnc5OTY4Y2ZfZGlzY29ubmVjdCk7CisJCQlyZXR1cm4gLUVXT1VMREJMT0NLOworCQl9CisJCXVwKCZjYW0tPmRldl9zZW0pOworCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfZXhjbHVzaXZlKGNhbS0+b3BlbiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW0tPmRpc2Nvbm5lY3RlZCB8fAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFjYW0tPnVzZXJzKTsKKwkJaWYgKGVycikgeworCQkJdXBfcmVhZCgmdzk5NjhjZl9kaXNjb25uZWN0KTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJaWYgKGNhbS0+ZGlzY29ubmVjdGVkKSB7CisJCQl1cF9yZWFkKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJZG93bigmY2FtLT5kZXZfc2VtKTsKKwl9CisKKwlEQkcoNSwgIk9wZW5pbmcgJyVzJywgL2Rldi92aWRlbyVkIC4uLiIsCisJICAgIHN5bWJvbGljKGNhbWxpc3QsIGNhbS0+aWQpLCBjYW0tPnY0bGRldi0+bWlub3IpCisKKwljYW0tPnN0cmVhbWluZyA9IDA7CisJY2FtLT5taXNjb25maWd1cmVkID0gMDsKKworCWlmICghdzk5NjhjZl92cHApCisJCWlmICgoZXJyID0gdzk5NjhjZl92cHBtb2RfZGV0ZWN0KGNhbSkpKQorCQkJZ290byBvdXQ7CisKKwlpZiAoKGVyciA9IHc5OTY4Y2ZfYWxsb2NhdGVfbWVtb3J5KGNhbSkpKQorCQlnb3RvIGRlYWxsb2NhdGVfbWVtb3J5OworCisJaWYgKChlcnIgPSB3OTk2OGNmX2luaXRfY2hpcChjYW0pKSkKKwkJZ290byBkZWFsbG9jYXRlX21lbW9yeTsKKworCWlmICgoZXJyID0gdzk5NjhjZl9zdGFydF90cmFuc2ZlcihjYW0pKSkKKwkJZ290byBkZWFsbG9jYXRlX21lbW9yeTsKKworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGNhbTsKKworCWNhbS0+dXNlcnMrKzsKKwlzdHJjcHkoY2FtLT5jb21tYW5kLCBjdXJyZW50LT5jb21tKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhbS0+d2FpdF9xdWV1ZSk7CisKKwlEQkcoNSwgIlZpZGVvIGRldmljZSBpcyBvcGVuIikKKworCXVwKCZjYW0tPmRldl9zZW0pOworCXVwX3JlYWQoJnc5OTY4Y2ZfZGlzY29ubmVjdCk7CisKKwlyZXR1cm4gMDsKKworZGVhbGxvY2F0ZV9tZW1vcnk6CisJdzk5NjhjZl9kZWFsbG9jYXRlX21lbW9yeShjYW0pOworb3V0OgorCURCRygyLCAiRmFpbGVkIHRvIG9wZW4gdGhlIHZpZGVvIGRldmljZSIpCisJdXAoJmNhbS0+ZGV2X3NlbSk7CisJdXBfcmVhZCgmdzk5NjhjZl9kaXNjb25uZWN0KTsKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgdzk5NjhjZl9yZWxlYXNlKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlKiBmaWxwKQoreworCXN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtOworCisJY2FtID0gKHN0cnVjdCB3OTk2OGNmX2RldmljZSopdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisKKwlkb3duKCZjYW0tPmRldl9zZW0pOyAvKiBwcmV2ZW50IGRpc2Nvbm5lY3QoKSB0byBiZSBjYWxsZWQgKi8KKworCXc5OTY4Y2Zfc3RvcF90cmFuc2ZlcihjYW0pOworCisJdzk5NjhjZl92cHBtb2RfcmVsZWFzZShjYW0pOworCisJaWYgKGNhbS0+ZGlzY29ubmVjdGVkKSB7CisJCXc5OTY4Y2ZfcmVsZWFzZV9yZXNvdXJjZXMoY2FtKTsKKwkJdXAoJmNhbS0+ZGV2X3NlbSk7CisJCWtmcmVlKGNhbSk7CisJCXJldHVybiAwOworCX0KKworCWNhbS0+dXNlcnMtLTsKKwl3OTk2OGNmX2RlYWxsb2NhdGVfbWVtb3J5KGNhbSk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX25yKCZjYW0tPm9wZW4sIDEpOworCisJREJHKDUsICJWaWRlbyBkZXZpY2UgY2xvc2VkIikKKwl1cCgmY2FtLT5kZXZfc2VtKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3NpemVfdAordzk5NjhjZl9yZWFkKHN0cnVjdCBmaWxlKiBmaWxwLCBjaGFyIF9fdXNlciAqIGJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QqIGZfcG9zKQoreworCXN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtOworCXN0cnVjdCB3OTk2OGNmX2ZyYW1lX3QqIGZyOworCWludCBlcnIgPSAwOworCisJY2FtID0gKHN0cnVjdCB3OTk2OGNmX2RldmljZSopdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisKKwlpZiAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCisJCXJldHVybiAtRVdPVUxEQkxPQ0s7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjYW0tPmZpbGVvcF9zZW0pKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJaWYgKGNhbS0+ZGlzY29ubmVjdGVkKSB7CisJCURCRygyLCAiRGV2aWNlIG5vdCBwcmVzZW50IikKKwkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChjYW0tPm1pc2NvbmZpZ3VyZWQpIHsKKwkJREJHKDIsICJUaGUgY2FtZXJhIGlzIG1pc2NvbmZpZ3VyZWQuIENsb3NlIGFuZCBvcGVuIGl0IGFnYWluLiIpCisJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoIWNhbS0+ZnJhbWVbMF0ucXVldWVkKQorCQl3OTk2OGNmX3B1c2hfZnJhbWUoY2FtLCAwKTsKKworCWlmICghY2FtLT5mcmFtZVsxXS5xdWV1ZWQpCisJCXc5OTY4Y2ZfcHVzaF9mcmFtZShjYW0sIDEpOworCisJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNhbS0+d2FpdF9xdWV1ZSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtLT5mcmFtZVswXS5zdGF0dXMgPT0gRl9SRUFEWSB8fAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW0tPmZyYW1lWzFdLnN0YXR1cyA9PSBGX1JFQURZIHx8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbS0+ZGlzY29ubmVjdGVkKTsKKwlpZiAoZXJyKSB7CisJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQlyZXR1cm4gZXJyOworCX0KKwlpZiAoY2FtLT5kaXNjb25uZWN0ZWQpIHsKKwkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWZyID0gKGNhbS0+ZnJhbWVbMF0uc3RhdHVzID09IEZfUkVBRFkpID8gJmNhbS0+ZnJhbWVbMF06JmNhbS0+ZnJhbWVbMV07CisKKwlpZiAodzk5NjhjZl92cHApCisJCXc5OTY4Y2ZfcG9zdHByb2Nlc3NfZnJhbWUoY2FtLCBmcik7CisKKwlpZiAoY291bnQgPiBmci0+bGVuZ3RoKQorCQljb3VudCA9IGZyLT5sZW5ndGg7CisKKwlpZiAoY29weV90b191c2VyKGJ1ZiwgZnItPmJ1ZmZlciwgY291bnQpKSB7CisJCWZyLT5zdGF0dXMgPSBGX1VOVVNFRDsKKwkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwkqZl9wb3MgKz0gY291bnQ7CisKKwlmci0+c3RhdHVzID0gRl9VTlVTRUQ7CisKKwlEQkcoNSwgIiV6dSBieXRlcyByZWFkIiwgY291bnQpCisKKwl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKworc3RhdGljIGludCB3OTk2OGNmX21tYXAoc3RydWN0IGZpbGUqIGZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtID0gKHN0cnVjdCB3OTk2OGNmX2RldmljZSopCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKKwl1bnNpZ25lZCBsb25nIHZzaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAorCSAgICAgICAgICAgICAgcHNpemUgPSBjYW0tPm5idWZmZXJzICogY2FtLT5mcmFtZVswXS5zaXplLAorCSAgICAgICAgICAgICAgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0LAorCSAgICAgICAgICAgICAgcG9zID0gKHVuc2lnbmVkIGxvbmcpY2FtLT5mcmFtZVswXS5idWZmZXIsCisJICAgICAgICAgICAgICBwYWdlOworCisJaWYgKGNhbS0+ZGlzY29ubmVjdGVkKSB7CisJCURCRygyLCAiRGV2aWNlIG5vdCBwcmVzZW50IikKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGNhbS0+bWlzY29uZmlndXJlZCkgeworCQlEQkcoMiwgIlRoZSBjYW1lcmEgaXMgbWlzY29uZmlndXJlZC4gQ2xvc2UgYW5kIG9wZW4gaXQgYWdhaW4iKQorCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlQREJHRygibW1hcHBpbmcgJWx1IGJ5dGVzLi4uIiwgdnNpemUpCisKKwlpZiAodnNpemUgPiBwc2l6ZSAtICh2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdoaWxlICh2c2l6ZSA+IDApIHsKKwkJcGFnZSA9IHZtYWxsb2NfdG9fcGZuKCh2b2lkICopcG9zKTsKKwkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwYWdlICsgdm1hLT52bV9wZ29mZiwKKwkJCQkJCVBBR0VfU0laRSwgdm1hLT52bV9wYWdlX3Byb3QpKQorCQkJcmV0dXJuIC1FQUdBSU47CisJCXN0YXJ0ICs9IFBBR0VfU0laRTsKKwkJcG9zICs9IFBBR0VfU0laRTsKKwkJdnNpemUgLT0gUEFHRV9TSVpFOworCX0KKworCURCRyg1LCAibW1hcCBtZXRob2Qgc3VjY2Vzc2Z1bGx5IGNhbGxlZCIpCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAordzk5NjhjZl9pb2N0bChzdHJ1Y3QgaW5vZGUqIGlub2RlLCBzdHJ1Y3QgZmlsZSogZmlscCwKKyAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW07CisJaW50IGVycjsKKworCWNhbSA9IChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKXZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY2FtLT5maWxlb3Bfc2VtKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWlmIChjYW0tPmRpc2Nvbm5lY3RlZCkgeworCQlEQkcoMiwgIkRldmljZSBub3QgcHJlc2VudCIpCisJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoY2FtLT5taXNjb25maWd1cmVkKSB7CisJCURCRygyLCAiVGhlIGNhbWVyYSBpcyBtaXNjb25maWd1cmVkLiBDbG9zZSBhbmQgb3BlbiBpdCBhZ2Fpbi4iKQorCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZXJyID0gdzk5NjhjZl92NGxfaW9jdGwoaW5vZGUsIGZpbHAsIGNtZCwgKHZvaWQgX191c2VyICopYXJnKTsKKworCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCB3OTk2OGNmX3Y0bF9pb2N0bChzdHJ1Y3QgaW5vZGUqIGlub2RlLCBzdHJ1Y3QgZmlsZSogZmlscCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKiBhcmcpCit7CisJc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW07CisJY29uc3QgY2hhciogdjRsMV9pb2N0bHNbXSA9IHsKKwkJIj8iLCAiQ0dBUCIsICJHQ0hBTiIsICJTQ0hBTiIsICJHVFVORVIiLCAiU1RVTkVSIiwgCisJCSJHUElDVCIsICJTUElDVCIsICJDQ0FQVFVSRSIsICJHV0lOIiwgIlNXSU4iLCAiR0ZCVUYiLAorCQkiU0ZCVUYiLCAiS0VZIiwgIkdGUkVRIiwgIlNGUkVRIiwgIkdBVURJTyIsICJTQVVESU8iLAorCQkiU1lOQyIsICJNQ0FQVFVSRSIsICJHTUJVRiIsICJHVU5JVCIsICJHQ0FQVFVSRSIsICJTQ0FQVFVSRSIsCisJCSJTUExBWU1PREUiLCAiU1dSSVRFTU9ERSIsICJHUExBWUlORk8iLCAiU01JQ1JPQ09ERSIsIAorCQkiR1ZCSUZNVCIsICJTVkJJRk1UIiAKKwl9OworCisJI2RlZmluZSBWNEwxX0lPQ1RMKGNtZCkgXAorCSAgICAgICAgKChfSU9DX05SKChjbWQpKSA8IHNpemVvZih2NGwxX2lvY3Rscykvc2l6ZW9mKGNoYXIqKSkgPyBcCisJICAgICAgICB2NGwxX2lvY3Rsc1tfSU9DX05SKChjbWQpKV0gOiAiPyIpCisKKwljYW0gPSAoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKil2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKKworCXN3aXRjaCAoY21kKSB7CisKKwljYXNlIFZJRElPQ0dDQVA6IC8qIGdldCB2aWRlbyBjYXBhYmlsaXR5ICovCisJeworCQlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSBjYXAgPSB7CisJCQkudHlwZSA9IFZJRF9UWVBFX0NBUFRVUkUgfCBWSURfVFlQRV9TQ0FMRVMsCisJCQkuY2hhbm5lbHMgPSAxLAorCQkJLmF1ZGlvcyA9IDAsCisJCQkubWlud2lkdGggPSBjYW0tPm1pbndpZHRoLAorCQkJLm1pbmhlaWdodCA9IGNhbS0+bWluaGVpZ2h0LAorCQl9OworCQlzcHJpbnRmKGNhcC5uYW1lLCAiVzk5Nls4N11DRiBVU0IgQ2FtZXJhICMlZCIsIAorCQkgICAgICAgIGNhbS0+djRsZGV2LT5taW5vcik7CisJCWNhcC5tYXh3aWR0aCA9IChjYW0tPnVwc2NhbGluZyAmJiB3OTk2OGNmX3ZwcCkKKwkJICAgICAgICAgICAgICAgPyBtYXgoKHUxNilXOTk2OENGX01BWF9XSURUSCwgY2FtLT5tYXh3aWR0aCkgCisJCSAgICAgICAgICAgICAgICAgOiBjYW0tPm1heHdpZHRoOworCQljYXAubWF4aGVpZ2h0ID0gKGNhbS0+dXBzY2FsaW5nICYmIHc5OTY4Y2ZfdnBwKQorCQkgICAgICAgICAgICAgICAgPyBtYXgoKHUxNilXOTk2OENGX01BWF9IRUlHSFQsIGNhbS0+bWF4aGVpZ2h0KQorCQkgICAgICAgICAgICAgICAgICA6IGNhbS0+bWF4aGVpZ2h0OworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmY2FwLCBzaXplb2YoY2FwKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlEQkcoNSwgIlZJRElPQ0dDQVAgc3VjY2Vzc2Z1bGx5IGNhbGxlZCIpCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DR0NIQU46IC8qIGdldCB2aWRlbyBjaGFubmVsIGluZm9ybWF0aW9ucyAqLworCXsKKwkJc3RydWN0IHZpZGVvX2NoYW5uZWwgY2hhbjsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZjaGFuLCBhcmcsIHNpemVvZihjaGFuKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoY2hhbi5jaGFubmVsICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlzdHJjcHkoY2hhbi5uYW1lLCAiQ2FtZXJhIik7CisJCWNoYW4udHVuZXJzID0gMDsKKwkJY2hhbi5mbGFncyA9IDA7CisJCWNoYW4udHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOworCQljaGFuLm5vcm0gPSBWSURFT19NT0RFX0FVVE87CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZjaGFuLCBzaXplb2YoY2hhbikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJREJHKDUsICJWSURJT0NHQ0hBTiBzdWNjZXNzZnVsbHkgY2FsbGVkIikKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NTQ0hBTjogLyogc2V0IGFjdGl2ZSBjaGFubmVsICovCisJeworCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCBjaGFuOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmY2hhbiwgYXJnLCBzaXplb2YoY2hhbikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKGNoYW4uY2hhbm5lbCAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJREJHKDUsICJWSURJT0NTQ0hBTiBzdWNjZXNzZnVsbHkgY2FsbGVkIikKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NHUElDVDogLyogZ2V0IGltYWdlIHByb3BlcnRpZXMgb2YgdGhlIHBpY3R1cmUgKi8KKwl7CisJCWlmICh3OTk2OGNmX3NlbnNvcl9nZXRfcGljdHVyZShjYW0pKQorCQkJcmV0dXJuIC1FSU87CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZjYW0tPnBpY3R1cmUsIHNpemVvZihjYW0tPnBpY3R1cmUpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCURCRyg1LCAiVklESU9DR1BJQ1Qgc3VjY2Vzc2Z1bGx5IGNhbGxlZCIpCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DU1BJQ1Q6IC8qIGNoYW5nZSBwaWN0dXJlIHNldHRpbmdzICovCisJeworCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSBwaWN0OworCQlpbnQgZXJyID0gMDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJnBpY3QsIGFyZywgc2l6ZW9mKHBpY3QpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmICggKGNhbS0+Zm9yY2VfcGFsZXR0ZSB8fCAhdzk5NjhjZl92cHApIAorCQkgICAgICYmIHBpY3QucGFsZXR0ZSAhPSBjYW0tPnBpY3R1cmUucGFsZXR0ZSApIHsKKwkJCURCRyg0LCAiUGFsZXR0ZSAlcyByZWplY3RlZDogb25seSAlcyBpcyBhbGxvd2VkIiwKKwkJCSAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBwaWN0LnBhbGV0dGUpLAorCQkJICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIGNhbS0+cGljdHVyZS5wYWxldHRlKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKCF3OTk2OGNmX3ZhbGlkX3BhbGV0dGUocGljdC5wYWxldHRlKSkgeworCQkJREJHKDQsICJQYWxldHRlICVzIG5vdCBzdXBwb3J0ZWQuIFZJRElPQ1NQSUNUIGZhaWxlZCIsCisJCQkgICAgc3ltYm9saWModjRsMV9wbGlzdCwgcGljdC5wYWxldHRlKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKCFjYW0tPmZvcmNlX3BhbGV0dGUpIHsKKwkJICAgaWYgKGNhbS0+ZGVjb21wcmVzc2lvbiA9PSAwKSB7CisJCSAgICAgIGlmICh3OTk2OGNmX25lZWRfZGVjb21wcmVzc2lvbihwaWN0LnBhbGV0dGUpKSB7CisJCSAgICAgICAgIERCRyg0LCAiRGVjb21wcmVzc2lvbiBkaXNhYmxlZDogcGFsZXR0ZSAlcyBpcyBub3QgIgorCQkgICAgICAgICAgICAgICAgImFsbG93ZWQuIFZJRElPQ1NQSUNUIGZhaWxlZCIsCisJCSAgICAgICAgICAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBwaWN0LnBhbGV0dGUpKQorCQkgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwkJICAgICAgfQorCQkgICB9IGVsc2UgaWYgKGNhbS0+ZGVjb21wcmVzc2lvbiA9PSAxKSB7CisJCSAgICAgIGlmICghdzk5NjhjZl9uZWVkX2RlY29tcHJlc3Npb24ocGljdC5wYWxldHRlKSkgeworCQkgICAgICAgICBEQkcoNCwgIkRlY29tcHJlc3Npb24gZm9yY2VkOiBwYWxldHRlICVzIGlzIG5vdCAiCisJCSAgICAgICAgICAgICAgICAiYWxsb3dlZC4gVklESU9DU1BJQ1QgZmFpbGVkIiwKKwkJICAgICAgICAgICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIHBpY3QucGFsZXR0ZSkpCisJCSAgICAgICAgIHJldHVybiAtRUlOVkFMOworCQkgICAgICB9CisJCSAgIH0KKwkJfQorCisJCWlmIChwaWN0LmRlcHRoICE9IHc5OTY4Y2ZfdmFsaWRfZGVwdGgocGljdC5wYWxldHRlKSkgeworCQkJREJHKDQsICJSZXF1ZXN0ZWQgZGVwdGggJXUgYnBwIGlzIG5vdCB2YWxpZCBmb3IgJXMgIgorCQkJICAgICAgICJwYWxldHRlOiBpZ25vcmVkIGFuZCBjaGFuZ2VkIHRvICV1IGJwcCIsIAorCQkJICAgIHBpY3QuZGVwdGgsIHN5bWJvbGljKHY0bDFfcGxpc3QsIHBpY3QucGFsZXR0ZSksCisJCQkgICAgdzk5NjhjZl92YWxpZF9kZXB0aChwaWN0LnBhbGV0dGUpKQorCQkJcGljdC5kZXB0aCA9IHc5OTY4Y2ZfdmFsaWRfZGVwdGgocGljdC5wYWxldHRlKTsKKwkJfQorCisJCWlmIChwaWN0LnBhbGV0dGUgIT0gY2FtLT5waWN0dXJlLnBhbGV0dGUpIHsKKwkJCWlmKCpjYW0tPnJlcXVlc3RlZF9mcmFtZQorCQkJICAgfHwgY2FtLT5mcmFtZV9jdXJyZW50LT5xdWV1ZWQpIHsKKwkJCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUKKwkJCQkgICAgICAoIGNhbS0+d2FpdF9xdWV1ZSwKKwkJCQkgICAgICAgIGNhbS0+ZGlzY29ubmVjdGVkIHx8CisJCQkJICAgICAgICAoISpjYW0tPnJlcXVlc3RlZF9mcmFtZSAmJgorCQkJCSAgICAgICAgICFjYW0tPmZyYW1lX2N1cnJlbnQtPnF1ZXVlZCkgKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJyOworCQkJCWlmIChjYW0tPmRpc2Nvbm5lY3RlZCkKKwkJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisKKwkJCWlmICh3OTk2OGNmX3N0b3BfdHJhbnNmZXIoY2FtKSkKKwkJCQlnb3RvIGlvY3RsX2ZhaWw7CisKKwkJCWlmICh3OTk2OGNmX3NldF9waWN0dXJlKGNhbSwgcGljdCkpCisJCQkJZ290byBpb2N0bF9mYWlsOworCisJCQlpZiAodzk5NjhjZl9zdGFydF90cmFuc2ZlcihjYW0pKQorCQkJCWdvdG8gaW9jdGxfZmFpbDsKKworCQl9IGVsc2UgaWYgKHc5OTY4Y2Zfc2Vuc29yX3VwZGF0ZV9waWN0dXJlKGNhbSwgcGljdCkpCisJCQlyZXR1cm4gLUVJTzsKKworCisJCURCRyg1LCAiVklESU9DU1BJQ1Qgc3VjY2Vzc2Z1bGx5IGNhbGxlZCIpCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DU1dJTjogLyogc2V0IGNhcHR1cmUgYXJlYSAqLworCXsKKwkJc3RydWN0IHZpZGVvX3dpbmRvdyB3aW47CisJCWludCBlcnIgPSAwOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmd2luLCBhcmcsIHNpemVvZih3aW4pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCURCRyg2LCAiVklESU9DU1dJTiBjYWxsZWQ6IGNsaXBjb3VudD0lZCwgZmxhZ3M9JXUsICIKKwkJICAgICAgICJ4PSV1LCB5PSV1LCAldXgldSIsIHdpbi5jbGlwY291bnQsIHdpbi5mbGFncywKKwkJICAgIHdpbi54LCB3aW4ueSwgd2luLndpZHRoLCB3aW4uaGVpZ2h0KQorCisJCWlmICh3aW4uY2xpcGNvdW50ICE9IDAgfHwgd2luLmZsYWdzICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoKGVyciA9IHc5OTY4Y2ZfYWRqdXN0X3dpbmRvd19zaXplKGNhbSwgKHUxNiopJndpbi53aWR0aCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTE2Kikmd2luLmhlaWdodCkpKSB7CisJCQlEQkcoNCwgIlJlc29sdXRpb24gbm90IHN1cHBvcnRlZCAoJXV4JXUpLiAiCisJCQkgICAgICAgIlZJRElPQ1NXSU4gZmFpbGVkIiwgd2luLndpZHRoLCB3aW4uaGVpZ2h0KQorCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCWlmICh3aW4ueCAhPSBjYW0tPndpbmRvdy54IHx8CisJCSAgICB3aW4ueSAhPSBjYW0tPndpbmRvdy55IHx8CisJCSAgICB3aW4ud2lkdGggIT0gY2FtLT53aW5kb3cud2lkdGggfHwKKwkJICAgIHdpbi5oZWlnaHQgIT0gY2FtLT53aW5kb3cuaGVpZ2h0KSB7CisJCQlpZigqY2FtLT5yZXF1ZXN0ZWRfZnJhbWUKKwkJCSAgIHx8IGNhbS0+ZnJhbWVfY3VycmVudC0+cXVldWVkKSB7CisJCQkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlCisJCQkJICAgICAgKCBjYW0tPndhaXRfcXVldWUsCisJCQkJICAgICAgICBjYW0tPmRpc2Nvbm5lY3RlZCB8fAorCQkJCSAgICAgICAgKCEqY2FtLT5yZXF1ZXN0ZWRfZnJhbWUgJiYKKwkJCQkgICAgICAgICAhY2FtLT5mcmFtZV9jdXJyZW50LT5xdWV1ZWQpICk7CisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsKKwkJCQlpZiAoY2FtLT5kaXNjb25uZWN0ZWQpCisJCQkJCXJldHVybiAtRU5PREVWOworCQkJfQorCisJCQlpZiAodzk5NjhjZl9zdG9wX3RyYW5zZmVyKGNhbSkpCisJCQkJZ290byBpb2N0bF9mYWlsOworCisJCQkvKiBUaGlzIF9tdXN0XyBiZSBjYWxsZWQgYmVmb3JlIHNldF93aW5kb3coKSAqLworCQkJaWYgKHc5OTY4Y2Zfc2V0X3BpY3R1cmUoY2FtLCBjYW0tPnBpY3R1cmUpKQorCQkJCWdvdG8gaW9jdGxfZmFpbDsKKworCQkJaWYgKHc5OTY4Y2Zfc2V0X3dpbmRvdyhjYW0sIHdpbikpCisJCQkJZ290byBpb2N0bF9mYWlsOworCisJCQlpZiAodzk5NjhjZl9zdGFydF90cmFuc2ZlcihjYW0pKQorCQkJCWdvdG8gaW9jdGxfZmFpbDsKKwkJfQorCisJCURCRyg1LCAiVklESU9DU1dJTiBzdWNjZXNzZnVsbHkgY2FsbGVkLiAiKQorCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ0dXSU46IC8qIGdldCBjdXJyZW50IHdpbmRvdyBwcm9wZXJ0aWVzICovCisJeworCQlpZiAoY29weV90b191c2VyKGFyZywmY2FtLT53aW5kb3csc2l6ZW9mKHN0cnVjdCB2aWRlb193aW5kb3cpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCURCRyg1LCAiVklESU9DR1dJTiBzdWNjZXNzZnVsbHkgY2FsbGVkIikKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NHTUJVRjogLyogcmVxdWVzdCBmb3IgbWVtb3J5IChtYXBwZWQpIGJ1ZmZlciAqLworCXsKKwkJc3RydWN0IHZpZGVvX21idWYgbWJ1ZjsKKwkJdTggaTsKKworCQltYnVmLnNpemUgPSBjYW0tPm5idWZmZXJzICogY2FtLT5mcmFtZVswXS5zaXplOworCQltYnVmLmZyYW1lcyA9IGNhbS0+bmJ1ZmZlcnM7CisJCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5idWZmZXJzOyBpKyspCisJCQltYnVmLm9mZnNldHNbaV0gPSAodW5zaWduZWQgbG9uZyljYW0tPmZyYW1lW2ldLmJ1ZmZlciAtCisJCQkgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyljYW0tPmZyYW1lWzBdLmJ1ZmZlcjsKKworCQlpZiAoY29weV90b191c2VyKGFyZywgJm1idWYsIHNpemVvZihtYnVmKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlEQkcoNSwgIlZJRElPQ0dNQlVGIHN1Y2Nlc3NmdWxseSBjYWxsZWQiKQorCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ01DQVBUVVJFOiAvKiBzdGFydCB0aGUgY2FwdHVyZSB0byBhIGZyYW1lICovCisJeworCQlzdHJ1Y3QgdmlkZW9fbW1hcCBtbWFwOworCQlzdHJ1Y3Qgdzk5NjhjZl9mcmFtZV90KiBmcjsKKwkJaW50IGVyciA9IDA7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZtbWFwLCBhcmcsIHNpemVvZihtbWFwKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlEQkcoNiwgIlZJRElPQ01DQVBUVVJFIGNhbGxlZDogZnJhbWUgIyV1LCBmb3JtYXQ9JXMsICVkeCVkIiwKKwkJICAgIG1tYXAuZnJhbWUsIHN5bWJvbGljKHY0bDFfcGxpc3QsIG1tYXAuZm9ybWF0KSwgCisJCSAgICBtbWFwLndpZHRoLCBtbWFwLmhlaWdodCkKKworCQlpZiAobW1hcC5mcmFtZSA+PSBjYW0tPm5idWZmZXJzKSB7CisJCQlEQkcoNCwgIkludmFsaWQgZnJhbWUgbnVtYmVyICgldSkuICIKKwkJCSAgICAgICAiVklESU9DTUNBUFRVUkUgZmFpbGVkIiwgbW1hcC5mcmFtZSkKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKG1tYXAuZm9ybWF0IT1jYW0tPnBpY3R1cmUucGFsZXR0ZSAmJiAKKwkJICAgIChjYW0tPmZvcmNlX3BhbGV0dGUgfHwgIXc5OTY4Y2ZfdnBwKSkgeworCQkJREJHKDQsICJQYWxldHRlICVzIHJlamVjdGVkOiBvbmx5ICVzIGlzIGFsbG93ZWQiLAorCQkJICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIG1tYXAuZm9ybWF0KSwKKwkJCSAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBjYW0tPnBpY3R1cmUucGFsZXR0ZSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmICghdzk5NjhjZl92YWxpZF9wYWxldHRlKG1tYXAuZm9ybWF0KSkgeworCQkJREJHKDQsICJQYWxldHRlICVzIG5vdCBzdXBwb3J0ZWQuICIKKwkJCSAgICAgICAiVklESU9DTUNBUFRVUkUgZmFpbGVkIiwgCisJCQkgICAgc3ltYm9saWModjRsMV9wbGlzdCwgbW1hcC5mb3JtYXQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoIWNhbS0+Zm9yY2VfcGFsZXR0ZSkgeworCQkgICBpZiAoY2FtLT5kZWNvbXByZXNzaW9uID09IDApIHsKKwkJICAgICAgaWYgKHc5OTY4Y2ZfbmVlZF9kZWNvbXByZXNzaW9uKG1tYXAuZm9ybWF0KSkgeworCQkgICAgICAgICBEQkcoNCwgIkRlY29tcHJlc3Npb24gZGlzYWJsZWQ6IHBhbGV0dGUgJXMgaXMgbm90ICIKKwkJICAgICAgICAgICAgICAgICJhbGxvd2VkLiBWSURJT0NTUElDVCBmYWlsZWQiLAorCQkgICAgICAgICAgICAgc3ltYm9saWModjRsMV9wbGlzdCwgbW1hcC5mb3JtYXQpKQorCQkgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwkJICAgICAgfQorCQkgICB9IGVsc2UgaWYgKGNhbS0+ZGVjb21wcmVzc2lvbiA9PSAxKSB7CisJCSAgICAgIGlmICghdzk5NjhjZl9uZWVkX2RlY29tcHJlc3Npb24obW1hcC5mb3JtYXQpKSB7CisJCSAgICAgICAgIERCRyg0LCAiRGVjb21wcmVzc2lvbiBmb3JjZWQ6IHBhbGV0dGUgJXMgaXMgbm90ICIKKwkJICAgICAgICAgICAgICAgICJhbGxvd2VkLiBWSURJT0NTUElDVCBmYWlsZWQiLAorCQkgICAgICAgICAgICAgc3ltYm9saWModjRsMV9wbGlzdCwgbW1hcC5mb3JtYXQpKQorCQkgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwkJICAgICAgfQorCQkgICB9CisJCX0KKworCQlpZiAoKGVyciA9IHc5OTY4Y2ZfYWRqdXN0X3dpbmRvd19zaXplKGNhbSwgKHUxNiopJm1tYXAud2lkdGgsIAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1MTYqKSZtbWFwLmhlaWdodCkpKSB7CisJCQlEQkcoNCwgIlJlc29sdXRpb24gbm90IHN1cHBvcnRlZCAoJWR4JWQpLiAiCisJCQkgICAgICAgIlZJRElPQ01DQVBUVVJFIGZhaWxlZCIsCisJCQkgICAgbW1hcC53aWR0aCwgbW1hcC5oZWlnaHQpCisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJZnIgPSAmY2FtLT5mcmFtZVttbWFwLmZyYW1lXTsKKworCQlpZiAobW1hcC53aWR0aCAgIT0gY2FtLT53aW5kb3cud2lkdGggfHwKKwkJICAgIG1tYXAuaGVpZ2h0ICE9IGNhbS0+d2luZG93LmhlaWdodCB8fAorCQkgICAgbW1hcC5mb3JtYXQgIT0gY2FtLT5waWN0dXJlLnBhbGV0dGUpIHsKKworCQkJc3RydWN0IHZpZGVvX3dpbmRvdyB3aW47CisJCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSBwaWN0OworCisJCQlpZigqY2FtLT5yZXF1ZXN0ZWRfZnJhbWUKKwkJCSAgIHx8IGNhbS0+ZnJhbWVfY3VycmVudC0+cXVldWVkKSB7CisJCQkJREJHKDYsICJWSURJT0NNQ0FQVFVSRS4gQ2hhbmdlIHNldHRpbmdzIGZvciAiCisJCQkJICAgICAgICJmcmFtZSAjJXU6ICVkeCVkLCBmb3JtYXQgJXMuIFdhaXQuLi4iLAorCQkJCSAgICBtbWFwLmZyYW1lLCBtbWFwLndpZHRoLCBtbWFwLmhlaWdodCwKKwkJCSAgICAgICAgICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIG1tYXAuZm9ybWF0KSkKKwkJCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUKKwkJCQkgICAgICAoIGNhbS0+d2FpdF9xdWV1ZSwKKwkJCQkgICAgICAgIGNhbS0+ZGlzY29ubmVjdGVkIHx8CisJCQkJICAgICAgICAoISpjYW0tPnJlcXVlc3RlZF9mcmFtZSAmJgorCQkJCSAgICAgICAgICFjYW0tPmZyYW1lX2N1cnJlbnQtPnF1ZXVlZCkgKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJyOworCQkJCWlmIChjYW0tPmRpc2Nvbm5lY3RlZCkKKwkJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisKKwkJCW1lbWNweSgmd2luLCAmY2FtLT53aW5kb3csIHNpemVvZih3aW4pKTsKKwkJCW1lbWNweSgmcGljdCwgJmNhbS0+cGljdHVyZSwgc2l6ZW9mKHBpY3QpKTsKKwkJCXdpbi53aWR0aCA9IG1tYXAud2lkdGg7CisJCQl3aW4uaGVpZ2h0ID0gbW1hcC5oZWlnaHQ7CisJCQlwaWN0LnBhbGV0dGUgPSBtbWFwLmZvcm1hdDsKKworCQkJaWYgKHc5OTY4Y2Zfc3RvcF90cmFuc2ZlcihjYW0pKQorCQkJCWdvdG8gaW9jdGxfZmFpbDsKKworCQkJLyogVGhpcyBiZWZvcmUgc2V0X3dpbmRvdyAqLworCQkJaWYgKHc5OTY4Y2Zfc2V0X3BpY3R1cmUoY2FtLCBwaWN0KSkgCisJCQkJZ290byBpb2N0bF9mYWlsOworCisJCQlpZiAodzk5NjhjZl9zZXRfd2luZG93KGNhbSwgd2luKSkKKwkJCQlnb3RvIGlvY3RsX2ZhaWw7CisKKwkJCWlmICh3OTk2OGNmX3N0YXJ0X3RyYW5zZmVyKGNhbSkpCisJCQkJZ290byBpb2N0bF9mYWlsOworCisJCX0gZWxzZSAJaWYgKGZyLT5xdWV1ZWQpIHsKKworCQkJREJHKDYsICJXYWl0IHVudGlsIGZyYW1lICMldSBpcyBmcmVlIiwgbW1hcC5mcmFtZSkKKwkJCQorCQkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNhbS0+d2FpdF9xdWV1ZSwgCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtLT5kaXNjb25uZWN0ZWQgfHwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWZyLT5xdWV1ZWQpKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJCWlmIChjYW0tPmRpc2Nvbm5lY3RlZCkKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCXc5OTY4Y2ZfcHVzaF9mcmFtZShjYW0sIG1tYXAuZnJhbWUpOworCQlEQkcoNSwgIlZJRElPQ01DQVBUVVJFKCV1KTogc3VjY2Vzc2Z1bGx5IGNhbGxlZCIsIG1tYXAuZnJhbWUpCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DU1lOQzogLyogd2FpdCB1bnRpbCB0aGUgY2FwdHVyZSBvZiBhIGZyYW1lIGlzIGZpbmlzaGVkICovCisJeworCQl1bnNpZ25lZCBpbnQgZl9udW07CisJCXN0cnVjdCB3OTk2OGNmX2ZyYW1lX3QqIGZyOworCQlpbnQgZXJyID0gMDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmZfbnVtLCBhcmcsIHNpemVvZihmX251bSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKGZfbnVtID49IGNhbS0+bmJ1ZmZlcnMpIHsKKwkJCURCRyg0LCAiSW52YWxpZCBmcmFtZSBudW1iZXIgKCV1KS4gIgorCQkJICAgICAgICJWSURJT0NNQ0FQVFVSRSBmYWlsZWQiLCBmX251bSkKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJREJHKDYsICJWSURJT0NTWU5DIGNhbGxlZCBmb3IgZnJhbWUgIyV1IiwgZl9udW0pCisKKwkJZnIgPSAmY2FtLT5mcmFtZVtmX251bV07CisKKwkJc3dpdGNoIChmci0+c3RhdHVzKSB7CisJCWNhc2UgRl9VTlVTRUQ6CisJCQlpZiAoIWZyLT5xdWV1ZWQpIHsKKwkJCQlEQkcoNCwgIlZJRElPU1lOQzogRnJhbWUgIyV1IG5vdCByZXF1ZXN0ZWQhIiwKKwkJCQkgICAgZl9udW0pCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisJCWNhc2UgRl9FUlJPUjoKKwkJY2FzZSBGX0dSQUJCSU5HOgorCQkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNhbS0+d2FpdF9xdWV1ZSwgCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyLT5zdGF0dXMgPT0gRl9SRUFEWSkKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBjYW0tPmRpc2Nvbm5lY3RlZCk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCQlpZiAoY2FtLT5kaXNjb25uZWN0ZWQpCisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQlicmVhazsKKwkJY2FzZSBGX1JFQURZOgorCQkJYnJlYWs7CisJCX0KKworCQlpZiAodzk5NjhjZl92cHApCisJCQl3OTk2OGNmX3Bvc3Rwcm9jZXNzX2ZyYW1lKGNhbSwgZnIpOworCisJCWZyLT5zdGF0dXMgPSBGX1VOVVNFRDsKKworCQlEQkcoNSwgIlZJRElPQ1NZTkMoJXUpIHN1Y2Nlc3NmdWxseSBjYWxsZWQiLCBmX251bSkKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NHVU5JVDovKiByZXBvcnQgdGhlIHVuaXQgbnVtYmVycyBvZiB0aGUgYXNzb2NpYXRlZCBkZXZpY2VzKi8KKwl7CisJCXN0cnVjdCB2aWRlb191bml0IHVuaXQgPSB7CisJCQkudmlkZW8gPSBjYW0tPnY0bGRldi0+bWlub3IsCisJCQkudmJpID0gVklERU9fTk9fVU5JVCwKKwkJCS5yYWRpbyA9IFZJREVPX05PX1VOSVQsCisJCQkuYXVkaW8gPSBWSURFT19OT19VTklULAorCQkJLnRlbGV0ZXh0ID0gVklERU9fTk9fVU5JVCwKKwkJfTsKKworCQlpZiAoY29weV90b191c2VyKGFyZywgJnVuaXQsIHNpemVvZih1bml0KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlEQkcoNSwgIlZJRElPQ0dVTklUIHN1Y2Nlc3NmdWxseSBjYWxsZWQiKQorCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ0tFWToKKwkJcmV0dXJuIDA7CisKKwljYXNlIFZJRElPQ0dGQlVGOgorCXsKKwkJaWYgKGNsZWFyX3VzZXIoYXJnLCBzaXplb2Yoc3RydWN0IHZpZGVvX2J1ZmZlcikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJREJHKDUsICJWSURJT0NHRkJVRiBzdWNjZXNzZnVsbHkgY2FsbGVkIikKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NHVFVORVI6CisJeworCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgdHVuZXI7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmdHVuZXIsIGFyZywgc2l6ZW9mKHR1bmVyKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAodHVuZXIudHVuZXIgIT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXN0cmNweSh0dW5lci5uYW1lLCAibm9fdHVuZXIiKTsKKwkJdHVuZXIucmFuZ2Vsb3cgPSAwOworCQl0dW5lci5yYW5nZWhpZ2ggPSAwOworCQl0dW5lci5mbGFncyA9IFZJREVPX1RVTkVSX05PUk07CisJCXR1bmVyLm1vZGUgPSBWSURFT19NT0RFX0FVVE87CisJCXR1bmVyLnNpZ25hbCA9IDB4ZmZmZjsKKworCQlpZiAoY29weV90b191c2VyKGFyZywgJnR1bmVyLCBzaXplb2YodHVuZXIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCURCRyg1LCAiVklESU9DR1RVTkVSIHN1Y2Nlc3NmdWxseSBjYWxsZWQiKQorCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ1NUVU5FUjoKKwl7CisJCXN0cnVjdCB2aWRlb190dW5lciB0dW5lcjsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0dW5lciwgYXJnLCBzaXplb2YodHVuZXIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmICh0dW5lci50dW5lciAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKHR1bmVyLm1vZGUgIT0gVklERU9fTU9ERV9BVVRPKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJREJHKDUsICJWSURJT0NTVFVORVIgc3VjY2Vzc2Z1bGx5IGNhbGxlZCIpCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DU0ZCVUY6CisJY2FzZSBWSURJT0NDQVBUVVJFOgorCWNhc2UgVklESU9DR0ZSRVE6CisJY2FzZSBWSURJT0NTRlJFUToKKwljYXNlIFZJRElPQ0dBVURJTzoKKwljYXNlIFZJRElPQ1NBVURJTzoKKwljYXNlIFZJRElPQ1NQTEFZTU9ERToKKwljYXNlIFZJRElPQ1NXUklURU1PREU6CisJY2FzZSBWSURJT0NHUExBWUlORk86CisJY2FzZSBWSURJT0NTTUlDUk9DT0RFOgorCWNhc2UgVklESU9DR1ZCSUZNVDoKKwljYXNlIFZJRElPQ1NWQklGTVQ6CisJCURCRyg0LCAiVW5zdXBwb3J0ZWQgVjRMMSBJT0N0bDogVklESU9DJXMgIgorCQkgICAgICAgIih0eXBlIDB4JTAxWCwgIgorCQkgICAgICAgIm4uIDB4JTAxWCwgIgorCQkgICAgICAgImRpci4gMHglMDFYLCAiIAorCQkgICAgICAgInNpemUgMHglMDJYKSIsCisJCSAgICBWNEwxX0lPQ1RMKGNtZCksCisJCSAgICBfSU9DX1RZUEUoY21kKSxfSU9DX05SKGNtZCksX0lPQ19ESVIoY21kKSxfSU9DX1NJWkUoY21kKSkKKworCQlyZXR1cm4gLUVJTlZBTDsKKworCWRlZmF1bHQ6CisJCURCRyg0LCAiSW52YWxpZCBWNEwxIElPQ3RsOiBWSURJT0MlcyAiCisJCSAgICAgICAidHlwZSAweCUwMVgsICIKKwkJICAgICAgICJuLiAweCUwMVgsICIKKwkJICAgICAgICJkaXIuIDB4JTAxWCwgIgorCQkgICAgICAgInNpemUgMHglMDJYIiwKKwkJICAgIFY0TDFfSU9DVEwoY21kKSwKKwkJICAgIF9JT0NfVFlQRShjbWQpLF9JT0NfTlIoY21kKSxfSU9DX0RJUihjbWQpLF9JT0NfU0laRShjbWQpKQorCisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisKKwl9IC8qIGVuZCBvZiBzd2l0Y2ggKi8KKworaW9jdGxfZmFpbDoKKwljYW0tPm1pc2NvbmZpZ3VyZWQgPSAxOworCURCRygxLCAiVklESU9DJXMgZmFpbGVkIGJlY2F1c2Ugb2YgaGFyZHdhcmUgcHJvYmxlbXMuICIKKwkgICAgICAgIlRvIHVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiBpdCBhZ2Fpbi4iLCBWNEwxX0lPQ1RMKGNtZCkpCisJcmV0dXJuIC1FRkFVTFQ7Cit9CisKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdzk5NjhjZl9mb3BzID0geworCS5vd25lciA9ICAgVEhJU19NT0RVTEUsCisJLm9wZW4gPSAgICB3OTk2OGNmX29wZW4sCisJLnJlbGVhc2UgPSB3OTk2OGNmX3JlbGVhc2UsCisJLnJlYWQgPSAgICB3OTk2OGNmX3JlYWQsCisJLmlvY3RsID0gICB3OTk2OGNmX2lvY3RsLAorCS5tbWFwID0gICAgdzk5NjhjZl9tbWFwLAorCS5sbHNlZWsgPSAgbm9fbGxzZWVrLAorfTsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBVU0IgcHJvYmUgYW5kIFY0TCByZWdpc3RyYXRpb24sIGRpc2Nvbm5lY3QgYW5kIGlkX3RhYmxlW10gZGVmaW5pdGlvbiAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQKK3c5OTY4Y2ZfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlKiBpbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCogaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtOworCWludCBlcnIgPSAwOworCWVudW0gdzk5NjhjZl9tb2RlbF9pZCBtb2RfaWQ7CisJc3RydWN0IGxpc3RfaGVhZCogcHRyOworCXU4IHNjID0gMDsgLyogbnVtYmVyIG9mIHNpbXVsdGFuZW91cyBjYW1lcmFzICovCisJc3RhdGljIHVuc2lnbmVkIHNob3J0IGRldl9uciA9IDA7IC8qIHdlIGFyZSBoYW5kbGluZyBkZXZpY2UgbnVtYmVyIG4gKi8KKworCWlmIChsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSAgPT0gd2luYm9uZF9pZF90YWJsZVswXS5pZFZlbmRvciAmJgorCSAgICBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gd2luYm9uZF9pZF90YWJsZVswXS5pZFByb2R1Y3QpCisJCW1vZF9pZCA9IFc5OTY4Q0ZfTU9EX0NMVkJXR1A7IC8qIHNlZSBjYW1saXN0W10gdGFibGUgKi8KKwllbHNlIGlmIChsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSAgPT0gd2luYm9uZF9pZF90YWJsZVsxXS5pZFZlbmRvciAmJgorCSAgICAgICAgIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSB3aW5ib25kX2lkX3RhYmxlWzFdLmlkUHJvZHVjdCkKKwkJbW9kX2lkID0gVzk5NjhDRl9NT0RfR0VORVJJQzsgLyogc2VlIGNhbWxpc3RbXSB0YWJsZSAqLworCWVsc2UKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwljYW0gPSAoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKikKKwkgICAgICAgICAga21hbGxvYyhzaXplb2Yoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjYW0pCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KGNhbSwgMCwgc2l6ZW9mKCpjYW0pKTsKKworCWluaXRfTVVURVgoJmNhbS0+ZGV2X3NlbSk7CisJZG93bigmY2FtLT5kZXZfc2VtKTsKKworCWNhbS0+dXNiZGV2ID0gdWRldjsKKwkvKiBOT1RFOiBhIGxvY2FsIGNvcHkgaXMgdXNlZCB0byBhdm9pZCBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMgKi8KKwltZW1jcHkoJmNhbS0+ZGV2LCAmdWRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IGRldmljZSkpOworCisJREJHKDIsICIlcyBkZXRlY3RlZCIsIHN5bWJvbGljKGNhbWxpc3QsIG1vZF9pZCkpCisKKwlpZiAoc2ltY2FtcyA+IFc5OTY4Q0ZfTUFYX0RFVklDRVMpCisJCXNpbWNhbXMgPSBXOTk2OENGX1NJTUNBTVM7CisKKwkvKiBIb3cgbWFueSBjYW1lcmFzIGFyZSBjb25uZWN0ZWQgPyAqLworCWRvd24oJnc5OTY4Y2ZfZGV2bGlzdF9zZW0pOworCWxpc3RfZm9yX2VhY2gocHRyLCAmdzk5NjhjZl9kZXZfbGlzdCkKKwkJc2MrKzsKKwl1cCgmdzk5NjhjZl9kZXZsaXN0X3NlbSk7CisKKwlpZiAoc2MgPj0gc2ltY2FtcykgeworCQlEQkcoMiwgIkRldmljZSByZWplY3RlZDogdG9vIG1hbnkgY29ubmVjdGVkIGNhbWVyYXMgIgorCQkgICAgICAgIihtYXguICV1KSIsIHNpbWNhbXMpCisJCWVyciA9IC1FUEVSTTsKKwkJZ290byBmYWlsOworCX0KKworCisJLyogQWxsb2NhdGUgMiBieXRlcyBvZiBtZW1vcnkgZm9yIGNhbWVyYSBjb250cm9sIFVTQiB0cmFuc2ZlcnMgKi8KKwlpZiAoIShjYW0tPmNvbnRyb2xfYnVmZmVyID0gKHUxNiopa21hbGxvYygyLCBHRlBfS0VSTkVMKSkpIHsKKwkJREJHKDEsIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgY2FtZXJhIGNvbnRyb2wgdHJhbnNmZXJzIikKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKwltZW1zZXQoY2FtLT5jb250cm9sX2J1ZmZlciwgMCwgMik7CisKKwkvKiBBbGxvY2F0ZSA4IGJ5dGVzIG9mIG1lbW9yeSBmb3IgVVNCIGRhdGEgdHJhbnNmZXJzIHRvIHRoZSBGU0IgKi8KKwlpZiAoIShjYW0tPmRhdGFfYnVmZmVyID0gKHUxNiopa21hbGxvYyg4LCBHRlBfS0VSTkVMKSkpIHsKKwkJREJHKDEsICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRhdGEgIgorCQkgICAgICAgInRyYW5zZmVycyB0byB0aGUgRlNCIikKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKwltZW1zZXQoY2FtLT5kYXRhX2J1ZmZlciwgMCwgOCk7CisKKwkvKiBSZWdpc3RlciB0aGUgVjRMIGRldmljZSAqLworCWNhbS0+djRsZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKCFjYW0tPnY0bGRldikgeworCQlEQkcoMSwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGEgVjRMIHN0cnVjdHVyZSIpCisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisKKwlzdHJjcHkoY2FtLT52NGxkZXYtPm5hbWUsIHN5bWJvbGljKGNhbWxpc3QsIG1vZF9pZCkpOworCWNhbS0+djRsZGV2LT5vd25lciA9IFRISVNfTU9EVUxFOworCWNhbS0+djRsZGV2LT50eXBlID0gVklEX1RZUEVfQ0FQVFVSRSB8IFZJRF9UWVBFX1NDQUxFUzsKKwljYW0tPnY0bGRldi0+aGFyZHdhcmUgPSBWSURfSEFSRFdBUkVfVzk5NjhDRjsKKwljYW0tPnY0bGRldi0+Zm9wcyA9ICZ3OTk2OGNmX2ZvcHM7CisJY2FtLT52NGxkZXYtPm1pbm9yID0gdmlkZW9fbnJbZGV2X25yXTsKKwljYW0tPnY0bGRldi0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOworCXZpZGVvX3NldF9kcnZkYXRhKGNhbS0+djRsZGV2LCBjYW0pOworCWNhbS0+djRsZGV2LT5kZXYgPSAmY2FtLT5kZXY7CisKKwllcnIgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoY2FtLT52NGxkZXYsIFZGTF9UWVBFX0dSQUJCRVIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvX25yW2Rldl9ucl0pOworCWlmIChlcnIpIHsKKwkJREJHKDEsICJWNEwgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWQiKQorCQlpZiAoZXJyID09IC1FTkZJTEUgJiYgdmlkZW9fbnJbZGV2X25yXSA9PSAtMSkKKwkJCURCRygyLCAiQ291bGRuJ3QgZmluZCBhIGZyZWUgL2Rldi92aWRlb1ggbm9kZSIpCisJCXZpZGVvX25yW2Rldl9ucl0gPSAtMTsKKwkJZGV2X25yID0gKGRldl9uciA8IFc5OTY4Q0ZfTUFYX0RFVklDRVMtMSkgPyBkZXZfbnIrMSA6IDA7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlEQkcoMiwgIlY0TCBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWQiLCBjYW0tPnY0bGRldi0+bWlub3IpCisKKwkvKiBTZXQgc29tZSBiYXNpYyBjb25zdGFudHMgKi8KKwl3OTk2OGNmX2NvbmZpZ3VyZV9jYW1lcmEoY2FtLCB1ZGV2LCBtb2RfaWQsIGRldl9ucik7CisKKwkvKiBBZGQgYSBuZXcgZW50cnkgaW50byB0aGUgbGlzdCBvZiBWNEwgcmVnaXN0ZXJlZCBkZXZpY2VzICovCisJZG93bigmdzk5NjhjZl9kZXZsaXN0X3NlbSk7CisJbGlzdF9hZGQoJmNhbS0+djRsbGlzdCwgJnc5OTY4Y2ZfZGV2X2xpc3QpOworCXVwKCZ3OTk2OGNmX2Rldmxpc3Rfc2VtKTsKKwlkZXZfbnIgPSAoZGV2X25yIDwgVzk5NjhDRl9NQVhfREVWSUNFUy0xKSA/IGRldl9ucisxIDogMDsKKworCXc5OTY4Y2ZfdHVybl9vbl9sZWQoY2FtKTsKKworCXc5OTY4Y2ZfaTJjX2luaXQoY2FtKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2FtKTsKKwl1cCgmY2FtLT5kZXZfc2VtKTsKKwlyZXR1cm4gMDsKKworZmFpbDogLyogRnJlZSB1bnVzZWQgbWVtb3J5ICovCisJaWYgKGNhbS0+Y29udHJvbF9idWZmZXIpCisJCWtmcmVlKGNhbS0+Y29udHJvbF9idWZmZXIpOworCWlmIChjYW0tPmRhdGFfYnVmZmVyKQorCQlrZnJlZShjYW0tPmRhdGFfYnVmZmVyKTsKKwlpZiAoY2FtLT52NGxkZXYpCisJCXZpZGVvX2RldmljZV9yZWxlYXNlKGNhbS0+djRsZGV2KTsKKwl1cCgmY2FtLT5kZXZfc2VtKTsKKwlrZnJlZShjYW0pOworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIHZvaWQgdzk5NjhjZl91c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSogaW50ZikKK3sKKwlzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSA9IAorCSAgIChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKXVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlkb3duX3dyaXRlKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpOworCisJaWYgKGNhbSkgeworCQkvKiBQcmV2ZW50IGNvbmN1cnJlbnQgYWNjZXNzZXMgdG8gZGF0YSAqLworCQlkb3duKCZjYW0tPmRldl9zZW0pOyAKKworCQljYW0tPmRpc2Nvbm5lY3RlZCA9IDE7CisKKwkJREJHKDIsICJEaXNjb25uZWN0aW5nICVzLi4uIiwgc3ltYm9saWMoY2FtbGlzdCwgY2FtLT5pZCkpCisKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX2FsbCgmY2FtLT5vcGVuKTsKKworCQlpZiAoY2FtLT51c2VycykgeworCQkJREJHKDIsICJUaGUgZGV2aWNlIGlzIG9wZW4gKC9kZXYvdmlkZW8lZCkhICIKKwkJCSAgICAgICAiUHJvY2VzcyBuYW1lOiAlcy4gRGVyZWdpc3RyYXRpb24gYW5kIG1lbW9yeSAiCisJCQkgICAgICAgImRlYWxsb2NhdGlvbiBhcmUgZGVmZXJyZWQgb24gY2xvc2UuIiwKKwkJCSAgICBjYW0tPnY0bGRldi0+bWlub3IsIGNhbS0+Y29tbWFuZCkKKwkJCWNhbS0+bWlzY29uZmlndXJlZCA9IDE7CisJCQl3OTk2OGNmX3N0b3BfdHJhbnNmZXIoY2FtKTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2FtLT53YWl0X3F1ZXVlKTsKKwkJfSBlbHNlCisJCQl3OTk2OGNmX3JlbGVhc2VfcmVzb3VyY2VzKGNhbSk7CisKKwkJdXAoJmNhbS0+ZGV2X3NlbSk7CisKKwkJaWYgKCFjYW0tPnVzZXJzKQorCQkJa2ZyZWUoY2FtKTsKKwl9CisKKwl1cF93cml0ZSgmdzk5NjhjZl9kaXNjb25uZWN0KTsKK30KKworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdzk5NjhjZl91c2JfZHJpdmVyID0geworCS5vd25lciA9ICAgICAgVEhJU19NT0RVTEUsCisJLm5hbWUgPSAgICAgICAidzk5NjhjZiIsCisJLmlkX3RhYmxlID0gICB3aW5ib25kX2lkX3RhYmxlLAorCS5wcm9iZSA9ICAgICAgdzk5NjhjZl91c2JfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSB3OTk2OGNmX3VzYl9kaXNjb25uZWN0LAorfTsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNb2R1bGUgaW5pdCwgZXhpdCBhbmQgaW50ZXJtb2R1bGUgY29tbXVuaWNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgdzk5NjhjZl92cHBtb2RfZGV0ZWN0KHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQoreworCWlmICghdzk5NjhjZl92cHApCisJCWlmICh2cHBtb2RfbG9hZCkKKwkJCXJlcXVlc3RfbW9kdWxlKCJ3OTk2OGNmLXZwcCIpOworCisJZG93bigmdzk5NjhjZl92cHBtb2RfbG9jayk7CisKKwlpZiAoIXc5OTY4Y2ZfdnBwKSB7CisJCURCRyg0LCAiVmlkZW8gcG9zdC1wcm9jZXNzaW5nIG1vZHVsZSBub3QgZGV0ZWN0ZWQiKQorCQl3OTk2OGNmX2FkanVzdF9jb25maWd1cmF0aW9uKGNhbSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghdHJ5X21vZHVsZV9nZXQodzk5NjhjZl92cHAtPm93bmVyKSkgeworCQlEQkcoMSwgIkNvdWxkbid0IGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mICIKKwkJICAgICAgICJ0aGUgdmlkZW8gcG9zdC1wcm9jZXNzaW5nIG1vZHVsZSIpCisJCXVwKCZ3OTk2OGNmX3ZwcG1vZF9sb2NrKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCisJdzk5NjhjZl92cHAtPmJ1c3krKzsKKworCURCRyg1LCAiVmlkZW8gcG9zdC1wcm9jZXNzaW5nIG1vZHVsZSBkZXRlY3RlZCIpCisKK291dDoKKwl1cCgmdzk5NjhjZl92cHBtb2RfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgdzk5NjhjZl92cHBtb2RfcmVsZWFzZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwlkb3duKCZ3OTk2OGNmX3ZwcG1vZF9sb2NrKTsKKworCWlmICh3OTk2OGNmX3ZwcCAmJiB3OTk2OGNmX3ZwcC0+YnVzeSkgeworCQltb2R1bGVfcHV0KHc5OTY4Y2ZfdnBwLT5vd25lcik7CisJCXc5OTY4Y2ZfdnBwLT5idXN5LS07CisJCXdha2VfdXAoJnc5OTY4Y2ZfdnBwbW9kX3dhaXQpOworCQlEQkcoNSwgIlZpZGVvIHBvc3QtcHJvY2Vzc2luZyBtb2R1bGUgcmVsZWFzZWQiKQorCX0KKworCXVwKCZ3OTk2OGNmX3ZwcG1vZF9sb2NrKTsKK30KKworCitpbnQgdzk5NjhjZl92cHBtb2RfcmVnaXN0ZXIoc3RydWN0IHc5OTY4Y2ZfdnBwX3QqIHZwcCkKK3sKKwlkb3duKCZ3OTk2OGNmX3ZwcG1vZF9sb2NrKTsKKworCWlmICh3OTk2OGNmX3ZwcCkgeworCQlLREJHKDEsICJWaWRlbyBwb3N0LXByb2Nlc3NpbmcgbW9kdWxlIGFscmVhZHkgcmVnaXN0ZXJlZCIpCisJCXVwKCZ3OTk2OGNmX3ZwcG1vZF9sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdzk5NjhjZl92cHAgPSB2cHA7CisJdzk5NjhjZl92cHAtPmJ1c3kgPSAwOworCisJS0RCRygyLCAiVmlkZW8gcG9zdC1wcm9jZXNzaW5nIG1vZHVsZSByZWdpc3RlcmVkIikKKwl1cCgmdzk5NjhjZl92cHBtb2RfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKKworaW50IHc5OTY4Y2ZfdnBwbW9kX2RlcmVnaXN0ZXIoc3RydWN0IHc5OTY4Y2ZfdnBwX3QqIHZwcCkKK3sKKwlkb3duKCZ3OTk2OGNmX3ZwcG1vZF9sb2NrKTsKKworCWlmICghdzk5NjhjZl92cHApIHsKKwkJdXAoJnc5OTY4Y2ZfdnBwbW9kX2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodzk5NjhjZl92cHAgIT0gdnBwKSB7CisJCUtEQkcoMSwgIk9ubHkgdGhlIG93bmVyIGNhbiB1bnJlZ2lzdGVyIHRoZSB2aWRlbyAiCisJCSAgICAgICAgInBvc3QtcHJvY2Vzc2luZyBtb2R1bGUiKQorCQl1cCgmdzk5NjhjZl92cHBtb2RfbG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh3OTk2OGNmX3ZwcC0+YnVzeSkgeworCQlLREJHKDIsICJWaWRlbyBwb3N0LXByb2Nlc3NpbmcgbW9kdWxlIGJ1c3kuIFdhaXQgZm9yIGl0IHRvIGJlICIKKwkJICAgICAgICAicmVsZWFzZWQuLi4iKQorCQl1cCgmdzk5NjhjZl92cHBtb2RfbG9jayk7CisJCXdhaXRfZXZlbnQodzk5NjhjZl92cHBtb2Rfd2FpdCwgIXc5OTY4Y2ZfdnBwLT5idXN5KTsKKwkJdzk5NjhjZl92cHAgPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisKKwl3OTk2OGNmX3ZwcCA9IE5VTEw7CisKKwl1cCgmdzk5NjhjZl92cHBtb2RfbG9jayk7CisKK291dDoKKwlLREJHKDIsICJWaWRlbyBwb3N0LXByb2Nlc3NpbmcgbW9kdWxlIHVucmVnaXN0ZXJlZCIpCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBfX2luaXQgdzk5NjhjZl9tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwlLREJHKDIsIFc5OTY4Q0ZfTU9EVUxFX05BTUUiICJXOTk2OENGX01PRFVMRV9WRVJTSU9OKQorCUtEQkcoMywgVzk5NjhDRl9NT0RVTEVfQVVUSE9SKQorCisJaWYgKG92bW9kX2xvYWQpCisJCXJlcXVlc3RfbW9kdWxlKCJvdmNhbWNoaXAiKTsKKworCWlmICgoZXJyID0gdXNiX3JlZ2lzdGVyKCZ3OTk2OGNmX3VzYl9kcml2ZXIpKSkKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3OTk2OGNmX21vZHVsZV9leGl0KHZvaWQpCit7CisJLyogdzk5NjhjZl91c2JfZGlzY29ubmVjdCgpIHdpbGwgYmUgY2FsbGVkICovCisJdXNiX2RlcmVnaXN0ZXIoJnc5OTY4Y2ZfdXNiX2RyaXZlcik7CisKKwlLREJHKDIsIFc5OTY4Q0ZfTU9EVUxFX05BTUUiIGRlcmVnaXN0ZXJlZCIpCit9CisKKworbW9kdWxlX2luaXQodzk5NjhjZl9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdCh3OTk2OGNmX21vZHVsZV9leGl0KTsKKworCitFWFBPUlRfU1lNQk9MKHc5OTY4Y2ZfdnBwbW9kX3JlZ2lzdGVyKTsKK0VYUE9SVF9TWU1CT0wodzk5NjhjZl92cHBtb2RfZGVyZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS93OTk2OGNmLmggYi9kcml2ZXJzL3VzYi9tZWRpYS93OTk2OGNmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFjYmZlMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2YuaApAQCAtMCwwICsxLDMzOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmlkZW80TGludXggZHJpdmVyIGZvciBXOTk2Wzg3XUNGIEpQRUcgVVNCIER1YWwgTW9kZSBDYW1lcmEgQ2hpcC4gICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgKgorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfVzk5NjhDRl9IXworI2RlZmluZSBfVzk5NjhDRl9IXworCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorCisjaW5jbHVkZSA8bWVkaWEvb3ZjYW1jaGlwLmg+CisKKyNpbmNsdWRlICJ3OTk2OGNmX3ZwcC5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZhdWx0IHZhbHVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgVzk5NjhDRl9PVk1PRF9MT0FEICAgICAgMSAgLyogYXV0b21hdGljICdvdmNhbWNoaXAnIG1vZHVsZSBsb2FkaW5nICovCisjZGVmaW5lIFc5OTY4Q0ZfVlBQTU9EX0xPQUQgICAgIDEgIC8qIGF1dG9tYXRpYyAndzk5NjhjZi12cHAnIG1vZHVsZSBsb2FkaW5nICovCisKKy8qIENvbW1lbnQvdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byBlbmFibGUvZGlzYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgKi8KKyNkZWZpbmUgVzk5NjhDRl9ERUJVRworCisvKiBUaGVzZSBoYXZlIGVmZmVjdCBvbmx5IGlmIFc5OTY4Q0ZfREVCVUcgaXMgZGVmaW5lZCAqLworI2RlZmluZSBXOTk2OENGX0RFQlVHX0xFVkVMICAgIDIgLyogZnJvbSAwIHRvIDYuIDAgZm9yIG5vIGRlYnVnIGluZm9ybWF0aW9ucyAqLworI2RlZmluZSBXOTk2OENGX1NQRUNJRklDX0RFQlVHIDAgLyogMCBvciAxICovCisKKyNkZWZpbmUgVzk5NjhDRl9NQVhfREVWSUNFUyAgICAzMgorI2RlZmluZSBXOTk2OENGX1NJTUNBTVMgICAgICAgIFc5OTY4Q0ZfTUFYX0RFVklDRVMgLyogc2ltdWx0YW5lb3VzIGNhbWVyYXMgKi8KKworI2RlZmluZSBXOTk2OENGX01BWF9CVUZGRVJTICAgMzIKKyNkZWZpbmUgVzk5NjhDRl9CVUZGRVJTICAgICAgIDIgLyogbi4gb2YgZnJhbWUgYnVmZmVycyBmcm9tIDIgdG8gTUFYX0JVRkZFUlMgKi8KKworLyogTWF4aW11bSBkYXRhIHBheWxvYWQgc2l6ZXMgaW4gYnl0ZXMgZm9yIGFsdGVybmF0ZSBzZXR0aW5ncyAqLworc3RhdGljIGNvbnN0IHUxNiB3TWF4UGFja2V0U2l6ZVtdID0gezEwMjMsIDk1OSwgODk1LCA4MzEsIDc2NywgNzAzLCA2MzksIDU3NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTExLCA0NDcsIDM4MywgMzE5LCAyNTUsIDE5MSwgMTI3LCAgNjN9OworI2RlZmluZSBXOTk2OENGX1BBQ0tFVF9TSVpFICAgICAgMTAyMyAvKiBhY2NvcmRpbmcgdG8gd01heFBhY2tldFNpemVzW10gKi8KKyNkZWZpbmUgVzk5NjhDRl9NSU5fUEFDS0VUX1NJWkUgIDYzIC8qIG1pbmltdW0gdmFsdWUgKi8KKyNkZWZpbmUgVzk5NjhDRl9JU09fUEFDS0VUUyAgICAgIDUgLyogbi5vZiBwYWNrZXRzIGZvciBpc29jaHJvbm91cyB0cmFuc2ZlcnMgKi8KKyNkZWZpbmUgVzk5NjhDRl9VU0JfQ1RSTF9USU1FT1VUIDEwMDAgLyogdGltZW91dCAobXMpIGZvciB1c2IgY29udHJvbCBjb21tYW5kcyAqLworI2RlZmluZSBXOTk2OENGX1VSQlMgICAgICAgICAgICAgMiAvKiBuLiBvZiBzY2hlZHVsZWQgVVJCcyBmb3IgSVNPIHRyYW5zZmVyICovCisKKyNkZWZpbmUgVzk5NjhDRl9JMkNfQlVTX0RFTEFZICAgIDQgLyogZGVsYXkgaW4gdXMgZm9yIEkyQyBiaXQgci93IG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgVzk5NjhDRl9JMkNfUldfUkVUUklFUyAgIDE1IC8qIG51bWJlciBvZiBtYXggSTJDIHIvdyByZXRyaWVzICovCisKKy8qIEF2YWlsYWJsZSB2aWRlbyBmb3JtYXRzICovCitzdHJ1Y3Qgdzk5NjhjZl9mb3JtYXQgeworCWNvbnN0IHUxNiBwYWxldHRlOworCWNvbnN0IHUxNiBkZXB0aDsKKwljb25zdCB1OCBjb21wcmVzc2lvbjsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdzk5NjhjZl9mb3JtYXQgdzk5NjhjZl9mb3JtYXRsaXN0W10gPSB7CisJeyBWSURFT19QQUxFVFRFX1VZVlksICAgIDE2LCAwIH0sIC8qIG9yaWdpbmFsIHZpZGVvICovCisJeyBWSURFT19QQUxFVFRFX1lVVjQyMlAsIDE2LCAxIH0sIC8qIHdpdGggSlBFRyBjb21wcmVzc2lvbiAqLworCXsgVklERU9fUEFMRVRURV9ZVVY0MjBQLCAxMiwgMSB9LCAvKiB3aXRoIEpQRUcgY29tcHJlc3Npb24gKi8KKwl7IFZJREVPX1BBTEVUVEVfWVVWNDIwLCAgMTIsIDEgfSwgLyogc2FtZSBhcyBZVVY0MjBQICovCisJeyBWSURFT19QQUxFVFRFX1lVWVYsICAgIDE2LCAwIH0sIC8qIHNvZnR3YXJlIGNvbnZlcnNpb24gKi8KKwl7IFZJREVPX1BBTEVUVEVfWVVWNDIyLCAgMTYsIDAgfSwgLyogc29mdHdhcmUgY29udmVyc2lvbiAqLworCXsgVklERU9fUEFMRVRURV9HUkVZLCAgICAgOCwgMCB9LCAvKiBzb2Z0d2FyZSBjb252ZXJzaW9uICovCisJeyBWSURFT19QQUxFVFRFX1JHQjU1NSwgIDE2LCAwIH0sIC8qIHNvZnR3YXJlIGNvbnZlcnNpb24gKi8KKwl7IFZJREVPX1BBTEVUVEVfUkdCNTY1LCAgMTYsIDAgfSwgLyogc29mdHdhcmUgY29udmVyc2lvbiAqLworCXsgVklERU9fUEFMRVRURV9SR0IyNCwgICAyNCwgMCB9LCAvKiBzb2Z0d2FyZSBjb252ZXJzaW9uICovCisJeyBWSURFT19QQUxFVFRFX1JHQjMyLCAgIDMyLCAwIH0sIC8qIHNvZnR3YXJlIGNvbnZlcnNpb24gKi8KKwl7IDAsICAgICAgICAgICAgICAgICAgICAgIDAsIDAgfSAgLyogMCBpcyBhIHRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjZGVmaW5lIFc5OTY4Q0ZfREVDT01QUkVTU0lPTiAgICAyIC8qIGRlY29tcDowPWRpc2FibGUsMT1mb3JjZSwyPWFueSBmb3JtYXRzICovCisjZGVmaW5lIFc5OTY4Q0ZfUEFMRVRURV9ERUNPTVBfT0ZGICAgVklERU9fUEFMRVRURV9VWVZZICAgIC8qIHdoZW4gZGVjb21wPTAgKi8KKyNkZWZpbmUgVzk5NjhDRl9QQUxFVFRFX0RFQ09NUF9GT1JDRSBWSURFT19QQUxFVFRFX1lVVjQyMFAgLyogd2hlbiBkZWNvbXA9MSAqLworI2RlZmluZSBXOTk2OENGX1BBTEVUVEVfREVDT01QX09OICAgIFZJREVPX1BBTEVUVEVfVVlWWSAgICAvKiB3aGVuIGRlY29tcD0yICovCisKKyNkZWZpbmUgVzk5NjhDRl9GT1JDRV9SR0IgICAgICAgIDAgIC8qIHJlYWQgUkdCIGluc3RlYWQgb2YgQkdSLCB5ZXM9MS9ubz0wICovCisKKyNkZWZpbmUgVzk5NjhDRl9NQVhfV0lEVEggICAgICA4MDAgLyogSGFzIGVmZmVjdCBpZiB1cC1zY2FsaW5nIGlzIG9uICovCisjZGVmaW5lIFc5OTY4Q0ZfTUFYX0hFSUdIVCAgICAgNjAwIC8qIEhhcyBlZmZlY3QgaWYgdXAtc2NhbGluZyBpcyBvbiAqLworI2RlZmluZSBXOTk2OENGX1dJRFRIICAgICAgICAgIDMyMCAvKiBmcm9tIDEyOCB0byAzNTIsIG11bHRpcGxlIG9mIDE2ICovCisjZGVmaW5lIFc5OTY4Q0ZfSEVJR0hUICAgICAgICAgMjQwIC8qIGZyb20gIDk2IHRvIDI4OCwgbXVsdGlwbGUgb2YgMTYgKi8KKworI2RlZmluZSBXOTk2OENGX0NMQU1QSU5HICAgICAgIDAgLyogMCBkaXNhYmxlLCAxIGVuYWJsZSB2aWRlbyBkYXRhIGNsYW1waW5nICovCisjZGVmaW5lIFc5OTY4Q0ZfRklMVEVSX1RZUEUgICAgMCAvKiAwIGRpc2FibGUgIDEgKDEtMi0xKSwgMiAoMi0zLTYtMy0yKSAqLworI2RlZmluZSBXOTk2OENGX0RPVUJMRV9CVUZGRVIgIDEgLyogMCBkaXNhYmxlLCAxIGVuYWJsZSBkb3VibGUgYnVmZmVyICovCisjZGVmaW5lIFc5OTY4Q0ZfTEFSR0VWSUVXICAgICAgMSAvKiAwIGRpc2FibGUsIDEgZW5hYmxlICovCisjZGVmaW5lIFc5OTY4Q0ZfVVBTQ0FMSU5HICAgICAgMCAvKiAwIGRpc2FibGUsIDEgZW5hYmxlICovCisKKyNkZWZpbmUgVzk5NjhDRl9NT05PQ0hST01FICAgICAwIC8qIDAgbm90IG1vbm9jaHJvbWUsIDEgbW9ub2Nocm9tZSBzZW5zb3IgKi8KKyNkZWZpbmUgVzk5NjhDRl9CUklHSFRORVNTICAgICAzMTAwMCAvKiBmcm9tIDAgdG8gNjU1MzUgKi8KKyNkZWZpbmUgVzk5NjhDRl9IVUUgICAgICAgICAgICAzMjc2OCAvKiBmcm9tIDAgdG8gNjU1MzUgKi8KKyNkZWZpbmUgVzk5NjhDRl9DT0xPVVIgICAgICAgICAzMjc2OCAvKiBmcm9tIDAgdG8gNjU1MzUgKi8KKyNkZWZpbmUgVzk5NjhDRl9DT05UUkFTVCAgICAgICA1MDAwMCAvKiBmcm9tIDAgdG8gNjU1MzUgKi8KKyNkZWZpbmUgVzk5NjhDRl9XSElURU5FU1MgICAgICAzMjc2OCAvKiBmcm9tIDAgdG8gNjU1MzUgKi8KKworI2RlZmluZSBXOTk2OENGX0FVVE9CUklHSFQgICAgIDAgLyogMCBkaXNhYmxlLCAxIGVuYWJsZSBhdXRvbWF0aWMgYnJpZ2h0bmVzcyAqLworI2RlZmluZSBXOTk2OENGX0FVVE9FWFAgICAgICAgIDEgLyogMCBkaXNhYmxlLCAxIGVuYWJsZSBhdXRvbWF0aWMgZXhwb3N1cmUgKi8KKyNkZWZpbmUgVzk5NjhDRl9MSUdIVEZSRVEgICAgICA1MCAvKiBsaWdodCBmcmVxdWVuY3kuIDUwSHogKEV1cm9wZSkgb3IgNjBIeiAqLworI2RlZmluZSBXOTk2OENGX0JBTkRJTkdGSUxURVIgIDAgLyogMCBkaXNhYmxlLCAxIGVuYWJsZSBiYW5kaW5nIGZpbHRlciAqLworI2RlZmluZSBXOTk2OENGX0JBQ0tMSUdIVCAgICAgIDAgLyogMCBvciAxLCAxPW9iamVjdCBpcyBsaXQgZnJvbSBiZWhpbmQgKi8KKyNkZWZpbmUgVzk5NjhDRl9NSVJST1IgICAgICAgICAwIC8qIDAgb3IgMSBbZG9uJ3RdIHJldmVyc2UgaW1hZ2UgaG9yaXpvbnRhbGx5Ki8KKworI2RlZmluZSBXOTk2OENGX0NMT0NLRElWICAgICAgICAgLTEgLyogLTEgPSBhdXRvbWF0aWMgY2xvY2sgZGl2aXNvciAqLworI2RlZmluZSBXOTk2OENGX0RFRl9DTE9DS0RJVklTT1IgIDAgLyogZGVmYXVsdCBzZW5zb3IgY2xvY2sgZGl2aXNvciB2YWx1ZSAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHbG9iYWxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgVzk5NjhDRl9NT0RVTEVfTkFNRSAgICAgIlY0TCBkcml2ZXIgZm9yIFc5OTZbODddQ0YgSlBFRyBVU0IgIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEdWFsIE1vZGUgQ2FtZXJhIENoaXAiCisjZGVmaW5lIFc5OTY4Q0ZfTU9EVUxFX1ZFUlNJT04gICIxOjEuMzMtYmFzaWMiCisjZGVmaW5lIFc5OTY4Q0ZfTU9EVUxFX0FVVEhPUiAgICIoQykgMjAwMi0yMDA0IEx1Y2EgUmlzb2xpYSIKKyNkZWZpbmUgVzk5NjhDRl9BVVRIT1JfRU1BSUwgICAgIjxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiIKKyNkZWZpbmUgVzk5NjhDRl9NT0RVTEVfTElDRU5TRSAgIkdQTCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHdpbmJvbmRfaWRfdGFibGVbXSA9IHsKKwl7CisJCS8qIENyZWF0aXZlIExhYnMgVmlkZW8gQmxhc3RlciBXZWJDYW0gR28gUGx1cyAqLworCQlVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDAzKSwKKwkJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpInc5OTY4Y2YiLAorCX0sCisJeworCQkvKiBHZW5lcmljIFc5OTZbODddQ0YgSlBFRyBVU0IgRHVhbCBNb2RlIENhbWVyYSAqLworCQlVU0JfREVWSUNFKDB4MTA0NiwgMHg5OTY3KSwKKwkJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpInc5OTY4Y2YiLAorCX0sCisJeyB9IC8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisvKiBXOTk2Wzg3XUNGIGNhbWVyYSBtb2RlbHMsIGludGVybmFsIGlkczogKi8KK2VudW0gdzk5NjhjZl9tb2RlbF9pZCB7CisJVzk5NjhDRl9NT0RfR0VORVJJQyA9IDEsIC8qIEdlbmVyaWMgVzk5Nls4N11DRiBiYXNlZCBkZXZpY2UgKi8KKwlXOTk2OENGX01PRF9DTFZCV0dQID0gMTEsLypDcmVhdGl2ZSBMYWJzIFZpZGVvIEJsYXN0ZXIgV2ViQ2FtIEdvIFBsdXMqLworCVc5OTY4Q0ZfTU9EX0FEUFZETUEgPSAyMSwgLyogQXJvbWEgRGlnaSBQZW4gVkdBIER1YWwgTW9kZSBBREctNTAwMCAqLworCVc5OTg2Q0ZfTU9EX0FBVSA9IDMxLCAgICAgLyogQVZlck1lZGlhIEFWZXJUViBVU0IgKi8KKwlXOTk2OENGX01PRF9DTFZCV0cgPSAzNCwgIC8qIENyZWF0aXZlIExhYnMgVmlkZW8gQmxhc3RlciBXZWJDYW0gR28gKi8KKwlXOTk2OENGX01PRF9MTCA9IDM3LCAgICAgIC8qIExlYm9uIExEQy0wMzVBICovCisJVzk5NjhDRl9NT0RfRUVFTUMgPSA0MCwgICAvKiBFem9uaWNzIEVaLTgwMiBFWk1lZ2EgQ2FtICovCisJVzk5NjhDRl9NT0RfT09FID0gNDIsICAgICAvKiBPbW5pVmlzaW9uIE9WODYxMC1FREUgKi8KKwlXOTk2OENGX01PRF9PRFBWRE1QQyA9IDQzLC8qIE9QQ09NIERpZ2kgUGVuIFZHQSBEdWFsIE1vZGUgUGVuIENhbWVyYSAqLworCVc5OTY4Q0ZfTU9EX1BEUElJID0gNDYsICAgLyogUHJldGVjIERpZ2kgUGVuLUlJICovCisJVzk5NjhDRl9NT0RfUERQNDgwID0gNDksICAvKiBQcmV0ZWMgRGlnaVBlbi00ODAgKi8KK307CisKK2VudW0gdzk5NjhjZl9mcmFtZV9zdGF0dXMgeworCUZfUkVBRFksICAgICAgICAgICAgLyogZmluaXNoZWQgZ3JhYmJpbmcgJiByZWFkeSB0byBiZSByZWFkL3N5bmNlZCAqLworCUZfR1JBQkJJTkcsICAgICAgICAgLyogaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZ3JhYmJlZCBpbnRvICovCisJRl9FUlJPUiwgICAgICAgICAgICAvKiBzb21ldGhpbmcgYmFkIGhhcHBlbmVkIHdoaWxlIHByb2Nlc3NpbmcgKi8KKwlGX1VOVVNFRCAgICAgICAgICAgIC8qIHVudXNlZCAobm8gVklESU9DTUNBUFRVUkUpICovCit9OworCitzdHJ1Y3Qgdzk5NjhjZl9mcmFtZV90IHsKKwl2b2lkKiBidWZmZXI7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXUzMiBsZW5ndGg7CisJaW50IG51bWJlcjsKKwllbnVtIHc5OTY4Y2ZfZnJhbWVfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3Qgdzk5NjhjZl9mcmFtZV90KiBuZXh0OworCXU4IHF1ZXVlZDsKK307CisKK2VudW0gdzk5NjhjZl92cHBfZmxhZyB7CisJVlBQX05PTkUgPSAweDAwLAorCVZQUF9VUFNDQUxFID0gMHgwMSwKKwlWUFBfU1dBUF9ZVVZfQllURVMgPSAweDAyLAorCVZQUF9ERUNPTVBSRVNTSU9OID0gMHgwNCwKKwlWUFBfVVlWWV9UT19SR0JYID0gMHgwOCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgdzk5NjhjZl92cHBfdCogdzk5NjhjZl92cHA7CitzdGF0aWMgREVDTEFSRV9NVVRFWCh3OTk2OGNmX3ZwcG1vZF9sb2NrKTsKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh3OTk2OGNmX3ZwcG1vZF93YWl0KTsKKworc3RhdGljIExJU1RfSEVBRCh3OTk2OGNmX2Rldl9saXN0KTsgLyogaGVhZCBvZiBWNEwgcmVnaXN0ZXJlZCBjYW1lcmFzIGxpc3QgKi8KK3N0YXRpYyBERUNMQVJFX01VVEVYKHc5OTY4Y2ZfZGV2bGlzdF9zZW0pOyAvKiBzZW1hcGhvcmUgZm9yIGxpc3QgdHJhdmVyc2FsICovCisKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHc5OTY4Y2ZfZGlzY29ubmVjdCk7IC8qIHByZXZlbnQgcmFjZXMgd2l0aCBvcGVuKCkgKi8KKworLyogTWFpbiBkZXZpY2UgZHJpdmVyIHN0cnVjdHVyZSAqLworc3RydWN0IHc5OTY4Y2ZfZGV2aWNlIHsKKwlzdHJ1Y3QgZGV2aWNlIGRldjsgLyogZGV2aWNlIHN0cnVjdHVyZSAqLworCisJZW51bSB3OTk2OGNmX21vZGVsX2lkIGlkOyAgIC8qIHByaXZhdGUgZGV2aWNlIGlkZW50aWZpZXIgKi8KKworCXN0cnVjdCB2aWRlb19kZXZpY2UqIHY0bGRldjsgLyogLT4gVjRMIHN0cnVjdHVyZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgdjRsbGlzdDsgICAgLyogZW50cnkgb2YgdGhlIGxpc3Qgb2YgVjRMIGNhbWVyYXMgKi8KKworCXN0cnVjdCB1c2JfZGV2aWNlKiB1c2JkZXY7ICAgICAgICAgICAvKiAtPiBtYWluIFVTQiBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgdXJiKiB1cmJbVzk5NjhDRl9VUkJTXTsgICAgICAgLyogLT4gVVNCIHJlcXVlc3QgYmxvY2sgc3RydWN0cyAqLworCXZvaWQqIHRyYW5zZmVyX2J1ZmZlcltXOTk2OENGX1VSQlNdOyAvKiAtPiBJU08gdHJhbnNmZXIgYnVmZmVycyAqLworCXUxNiogY29udHJvbF9idWZmZXI7ICAgICAgICAgICAgICAgICAvKiAtPiBidWZmZXIgZm9yIGNvbnRyb2wgcmVxLiovCisJdTE2KiBkYXRhX2J1ZmZlcjsgICAgICAgICAgICAgICAgICAgIC8qIC0+IGRhdGEgdG8gc2VuZCB0byB0aGUgRlNCICovCisKKwlzdHJ1Y3Qgdzk5NjhjZl9mcmFtZV90IGZyYW1lW1c5OTY4Q0ZfTUFYX0JVRkZFUlNdOworCXN0cnVjdCB3OTk2OGNmX2ZyYW1lX3QgZnJhbWVfdG1wOyAvKiB0ZW1wb3JhcnkgZnJhbWUgKi8KKwlzdHJ1Y3Qgdzk5NjhjZl9mcmFtZV90IGZyYW1lX3ZwcDsgLyogaGVscGVyIGZyYW1lLiovCisJc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCogZnJhbWVfY3VycmVudDsgLyogLT4gZnJhbWUgYmVpbmcgZ3JhYmJlZCAqLworCXN0cnVjdCB3OTk2OGNmX2ZyYW1lX3QqIHJlcXVlc3RlZF9mcmFtZVtXOTk2OENGX01BWF9CVUZGRVJTXTsKKworCXU4IG1heF9idWZmZXJzLCAgIC8qIG51bWJlciBvZiByZXF1ZXN0ZWQgYnVmZmVycyAqLworCSAgIGZvcmNlX3BhbGV0dGUsIC8qIHllcz0xL25vPTAgKi8KKwkgICBmb3JjZV9yZ2IsICAgICAvKiByZWFkIFJHQiBpbnN0ZWFkIG9mIEJHUiwgeWVzPTEsIG5vPTAgKi8KKwkgICBkb3VibGVfYnVmZmVyLCAvKiBoYXJkd2FyZSBkb3VibGUgYnVmZmVyaW5nIHllcz0xL25vPTAgKi8KKwkgICBjbGFtcGluZywgICAgICAvKiB2aWRlbyBkYXRhIGNsYW1waW5nIHllcz0xL25vPTAgKi8KKwkgICBmaWx0ZXJfdHlwZSwgICAvKiAwPWRpc2FibGVkLCAxPTMgdGFwLCAyPTUgdGFwIGZpbHRlciAqLworCSAgIGNhcHR1cmUsICAgICAgIC8qIDA9ZGlzYWJsZWQsIDE9ZW5hYmxlZCAqLworCSAgIGxhcmdldmlldywgICAgIC8qIDA9ZGlzYWJsZWQsIDE9ZW5hYmxlZCAqLworCSAgIGRlY29tcHJlc3Npb24sIC8qIDA9ZGlzYWJsZWQsIDE9Zm9yY2VkLCAyPWFsbG93ZWQgKi8KKwkgICB1cHNjYWxpbmc7ICAgICAvKiBzb2Z0d2FyZSBpbWFnZSBzY2FsaW5nLCAwPWVuYWJsZWQsIDE9ZGlzYWJsZWQgKi8KKworCXN0cnVjdCB2aWRlb19waWN0dXJlIHBpY3R1cmU7IC8qIGN1cnJlbnQgcGljdHVyZSBzZXR0aW5ncyAqLworCXN0cnVjdCB2aWRlb193aW5kb3cgd2luZG93OyAgIC8qIGN1cnJlbnQgd2luZG93IHNldHRpbmdzICovCisKKwl1MTYgaHdfZGVwdGgsICAgIC8qIGRlcHRoICh1c2VkIGJ5IHRoZSBjaGlwKSAqLworCSAgICBod19wYWxldHRlLCAgLyogcGFsZXR0ZSAodXNlZCBieSB0aGUgY2hpcCkgKi8KKwkgICAgaHdfd2lkdGgsICAgIC8qIHdpZHRoICh1c2VkIGJ5IHRoZSBjaGlwKSAqLworCSAgICBod19oZWlnaHQsICAgLyogaGVpZ2h0ICh1c2VkIGJ5IHRoZSBjaGlwKSAqLworCSAgICBoc19wb2xhcml0eSwgLyogMD1uZWdhdGl2ZSBzeW5jIHB1bHNlLCAxPXBvc2l0aXZlIHN5bmMgcHVsc2UgKi8KKwkgICAgdnNfcG9sYXJpdHksIC8qIDA9bmVnYXRpdmUgc3luYyBwdWxzZSwgMT1wb3NpdGl2ZSBzeW5jIHB1bHNlICovCisJICAgIHN0YXJ0X2Nyb3B4LCAvKiBwaXhlbHMgZnJvbSBIUyBpbmFjdGl2ZSBlZGdlIHRvIDFzdCBjcm9wcGVkIHBpeGVsKi8KKwkgICAgc3RhcnRfY3JvcHk7IC8qIHBpeGVscyBmcm9tIFZTIGluYWN0aXZlIGVkZ2UgdG8gMXN0IGNyb3BwZWQgcGl4ZWwqLworCisJZW51bSB3OTk2OGNmX3ZwcF9mbGFnIHZwcF9mbGFnOyAvKiBwb3N0LXByb2Nlc3Npbmcgcm91dGluZXMgaW4gdXNlICovCisKKwl1OCBuYnVmZmVycywgICAgICAvKiBudW1iZXIgb2YgYWxsb2NhdGVkIGZyYW1lIGJ1ZmZlcnMgKi8KKwkgICBhbHRzZXR0aW5nLCAgICAvKiBjYW1lcmEgYWx0ZXJuYXRlIHNldHRpbmcgKi8KKwkgICBkaXNjb25uZWN0ZWQsICAvKiBmbGFnOiB5ZXM9MSwgbm89MCAqLworCSAgIG1pc2NvbmZpZ3VyZWQsIC8qIGZsYWc6IHllcz0xLCBubz0wICovCisJICAgdXNlcnMsICAgICAgICAgLyogZmxhZzogbnVtYmVyIG9mIHVzZXJzIGhvbGRpbmcgdGhlIGRldmljZSAqLworCSAgIHN0cmVhbWluZzsgICAgIC8qIGZsYWc6IHllcz0xLCBubz0wICovCisKKwl1OCBzZW5zb3JfaW5pdGlhbGl6ZWQ7IC8qIGZsYWc6IHllcz0xLCBubz0wICovCisKKwkvKiBEZXRlcm1pbmVkIGJ5IHRoZSBpbWFnZSBzZW5zb3IgdHlwZTogKi8KKwlpbnQgc2Vuc29yLCAgICAgICAvKiB0eXBlIG9mIGltYWdlIHNlbnNvciBjaGlwIChDQ18qKSAqLworCSAgICBtb25vY2hyb21lOyAgIC8qIGltYWdlIHNlbnNvciBpcyAocHJvYmFibHkpIG1vbm9jaHJvbWUgKi8KKwl1MTYgbWF4d2lkdGgsICAgICAvKiBtYXhpbXVtIHdpZHRoIHN1cHBvcnRlZCBieSB0aGUgaW1hZ2Ugc2Vuc29yICovCisJICAgIG1heGhlaWdodCwgICAgLyogbWF4aW11bSBoZWlnaHQgc3VwcG9ydGVkIGJ5IHRoZSBpbWFnZSBzZW5zb3IgKi8KKwkgICAgbWlud2lkdGgsICAgICAvKiBtaW5pbXVtIHdpZHRoIHN1cHBvcnRlZCBieSB0aGUgaW1hZ2Ugc2Vuc29yICovCisJICAgIG1pbmhlaWdodDsgICAgLyogbWluaW11bSBoZWlnaHQgc3VwcG9ydGVkIGJ5IHRoZSBpbWFnZSBzZW5zb3IgKi8KKwl1OCAgYXV0b19icnQsICAgICAvKiBhdXRvIGJyaWdodG5lc3MgZW5hYmxlZCBmbGFnICovCisJICAgIGF1dG9fZXhwLCAgICAgLyogYXV0byBleHBvc3VyZSBlbmFibGVkIGZsYWcgKi8KKwkgICAgYmFja2xpZ2h0LCAgICAvKiBiYWNrbGlnaHQgZXhwb3N1cmUgYWxnb3JpdGhtIGZsYWcgKi8KKwkgICAgbWlycm9yLCAgICAgICAvKiBpbWFnZSBpcyByZXZlcnNlZCBob3Jpem9udGFsbHkgKi8KKwkgICAgbGlnaHRmcmVxLCAgICAvKiBwb3dlciAobGlnaHRpbmcpIGZyZXF1ZW5jeSAqLworCSAgICBiYW5kZmlsdDsgICAgIC8qIGJhbmRpbmcgZmlsdGVyIGVuYWJsZWQgZmxhZyAqLworCXM4ICBjbG9ja2RpdjsgICAgIC8qIGNsb2NrIGRpdmlzb3IgKi8KKworCS8qIEkyQyBpbnRlcmZhY2UgdG8ga2VybmVsICovCisJc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwdGVyOworCXN0cnVjdCBpMmNfY2xpZW50KiBzZW5zb3JfY2xpZW50OworCisJLyogTG9ja3MgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIGRldl9zZW0sICAgIC8qIGZvciBwcm9iZSwgZGlzY29ubmVjdCxvcGVuIGFuZCBjbG9zZSAqLworCSAgICAgICAgICAgICAgICAgZmlsZW9wX3NlbTsgLyogZm9yIHJlYWQgYW5kIGlvY3RsICovCisJc3BpbmxvY2tfdCB1cmJfbG9jaywgICAvKiBmb3Igc3VibWl0X3VyYigpIGFuZCB1bmxpbmtfdXJiKCkgKi8KKwkgICAgICAgICAgIGZsaXN0X2xvY2s7IC8qIGZvciByZXF1ZXN0ZWQgZnJhbWUgbGlzdCBhY2Nlc3NlcyAqLworCXdhaXRfcXVldWVfaGVhZF90IG9wZW4sIHdhaXRfcXVldWU7CisKKwljaGFyIGNvbW1hbmRbMTZdOyAvKiBuYW1lIG9mIHRoZSBwcm9ncmFtIGhvbGRpbmcgdGhlIGRldmljZSAqLworfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTWFjcm9zIGZvciBkZWJ1Z2dpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjdW5kZWYgREJHCisjdW5kZWYgS0RCRworI2lmZGVmIFc5OTY4Q0ZfREVCVUcKKy8qIEZvciBkZXZpY2Ugc3BlY2lmaWMgZGVidWdnaW5nIG1lc3NhZ2VzICovCisjCWRlZmluZSBEQkcobGV2ZWwsIGZtdCwgYXJncy4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKCAoKHNwZWNpZmljX2RlYnVnKSAmJiAoZGVidWcgPT0gKGxldmVsKSkpIHx8ICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICgoIXNwZWNpZmljX2RlYnVnKSAmJiAoZGVidWcgPj0gKGxldmVsKSkpICkgeyAgICAgICAgICAgICAgICAgICAgXAorCQlpZiAoKGxldmVsKSA9PSAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCWRldl9lcnIoJmNhbS0+ZGV2LCBmbXQgIlxuIiwgIyMgYXJncyk7ICAgICAgICAgICAgICAgIFwKKwkJZWxzZSBpZiAoKGxldmVsKSA9PSAyIHx8IChsZXZlbCkgPT0gMykgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlkZXZfaW5mbygmY2FtLT5kZXYsIGZtdCAiXG4iLCAjIyBhcmdzKTsgICAgICAgICAgICAgICBcCisJCWVsc2UgaWYgKChsZXZlbCkgPT0gNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJZGV2X3dhcm4oJmNhbS0+ZGV2LCBmbXQgIlxuIiwgIyMgYXJncyk7ICAgICAgICAgICAgICAgXAorCQllbHNlIGlmICgobGV2ZWwpID49IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCWRldl9pbmZvKCZjYW0tPmRldiwgIlslczolZF0gIiBmbXQgIlxuIiwgICAgICAgICAgICAgIFwKKwkJCSAgICAgICAgIF9fRlVOQ1RJT05fXywgX19MSU5FX18gLCAjIyBhcmdzKTsgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorLyogRm9yIGdlbmVyaWMga2VybmVsIChub3QgZGV2aWNlIHNwZWNpZmljKSBtZXNzYWdlcyAqLworIwlkZWZpbmUgS0RCRyhsZXZlbCwgZm10LCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmICggKChzcGVjaWZpY19kZWJ1ZykgJiYgKGRlYnVnID09IChsZXZlbCkpKSB8fCAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAoKCFzcGVjaWZpY19kZWJ1ZykgJiYgKGRlYnVnID49IChsZXZlbCkpKSApIHsgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgKChsZXZlbCkgPj0gMSAmJiAobGV2ZWwpIDw9IDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlwcl9pbmZvKCJ3OTk2OGNmOiAiIGZtdCAiXG4iLCAjIyBhcmdzKTsgICAgICAgICAgICAgICBcCisJCWVsc2UgaWYgKChsZXZlbCkgPj0gNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJcHJfZGVidWcoInc5OTY4Y2Y6IFslczolZF0gIiBmbXQgIlxuIiwgX19GVU5DVElPTl9fLCAgXAorCQkJICAgICAgICAgX19MSU5FX18gLCAjIyBhcmdzKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisjZWxzZQorCS8qIE5vdCBkZWJ1Z2dpbmc6IG5vdGhpbmcgKi8KKyMJZGVmaW5lIERCRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7O30gd2hpbGUoMCk7CisjCWRlZmluZSBLREJHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIGRvIHs7fSB3aGlsZSgwKTsKKyNlbmRpZgorCisjdW5kZWYgUERCRworI2RlZmluZSBQREJHKGZtdCwgYXJncy4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZGV2X2luZm8oJmNhbS0+ZGV2LCAiWyVzOiVkXSAiIGZtdCAiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fICwgIyMgYXJncyk7CisKKyN1bmRlZiBQREJHRworI2RlZmluZSBQREJHRyhmbXQsIGFyZ3MuLi4pIGRvIHs7fSB3aGlsZSgwKTsgLyogbm90aGluZzogaXQncyBhIHBsYWNlaG9sZGVyICovCisKKyNlbmRpZiAvKiBfVzk5NjhDRl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvdzk5NjhjZl9kZWNvZGVyLmggYi9kcml2ZXJzL3VzYi9tZWRpYS93OTk2OGNmX2RlY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWZhY2NiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvdzk5NjhjZl9kZWNvZGVyLmgKQEAgLTAsMCArMSw4NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmlkZW8gZGVjb2RlciBmb3IgdGhlIFc5OTZbODddQ0YgZHJpdmVyIGZvciBMaW51eC4gICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIDIwMDQgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgKgorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfVzk5NjhDRl9ERUNPREVSX0hfCisjZGVmaW5lIF9XOTk2OENGX0RFQ09ERVJfSF8KKworLyogQ29tbWVudC91bmNvbW1lbnQgdGhpcyBmb3IgaGlnaC9sb3cgcXVhbGl0eSBvZiBjb21wcmVzc2VkIHZpZGVvICovCisjZGVmaW5lIFc5OTY4Q0ZfREVDX0ZBU1RfTE9XUVVBTElUWV9WSURFTworCisjaWZkZWYgVzk5NjhDRl9ERUNfRkFTVF9MT1dRVUFMSVRZX1ZJREVPCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBZX1FVQU5UQUJMRVs2NF0gPSB7CisJMTYsICAxMSwgIDEwLCAgMTYsICAyNCwgIDQwLCAgNTEsICA2MSwKKwkxMiwgIDEyLCAgMTQsICAxOSwgIDI2LCAgNTgsICA2MCwgIDU1LAorCTE0LCAgMTMsICAxNiwgIDI0LCAgNDAsICA1NywgIDY5LCAgNTYsCisJMTQsICAxNywgIDIyLCAgMjksICA1MSwgIDg3LCAgODAsICA2MiwKKwkxOCwgIDIyLCAgMzcsICA1NiwgIDY4LCAxMDksIDEwMywgIDc3LAorCTI0LCAgMzUsICA1NSwgIDY0LCAgODEsIDEwNCwgMTEzLCAgOTIsCisJNDksICA2NCwgIDc4LCAgODcsIDEwMywgMTIxLCAxMjAsIDEwMSwKKwk3MiwgIDkyLCAgOTUsICA5OCwgMTEyLCAxMDAsIDEwMywgIDk5Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBVVl9RVUFOVEFCTEVbNjRdID0geworCTE3LCAgMTgsICAyNCwgIDQ3LCAgOTksICA5OSwgIDk5LCAgOTksCisJMTgsICAyMSwgIDI2LCAgNjYsICA5OSwgIDk5LCAgOTksICA5OSwKKwkyNCwgIDI2LCAgNTYsICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LAorCTQ3LCAgNjYsICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksCisJOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwKKwk5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LAorCTk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksCisJOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OQorfTsKKyNlbHNlCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBZX1FVQU5UQUJMRVs2NF0gPSB7CisJIDgsICAgNSwgICA1LCAgIDgsICAxMiwgIDIwLCAgMjUsICAzMCwKKwkgNiwgICA2LCAgIDcsICAgOSwgIDEzLCAgMjksICAzMCwgIDI3LAorCSA3LCAgIDYsICAgOCwgIDEyLCAgMjAsICAyOCwgIDM0LCAgMjgsCisJIDcsICAgOCwgIDExLCAgMTQsICAyNSwgIDQzLCAgNDAsICAzMSwKKwkgOSwgIDExLCAgMTgsICAyOCwgIDM0LCAgNTQsICA1MSwgIDM4LAorCTEyLCAgMTcsICAyNywgIDMyLCAgNDAsICA1MiwgIDU2LCAgNDYsCisJMjQsICAzMiwgIDM5LCAgNDMsICA1MSwgIDYwLCAgNjAsICA1MCwKKwkzNiwgIDQ2LCAgNDcsICA0OSwgIDU2LCAgNTAsICA1MSwgIDQ5Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBVVl9RVUFOVEFCTEVbNjRdID0geworCSA4LCAgIDksICAxMiwgIDIzLCAgNDksICA0OSwgIDQ5LCAgNDksCisJIDksICAxMCwgIDEzLCAgMzMsICA0OSwgIDQ5LCAgNDksICA0OSwKKwkxMiwgIDEzLCAgMjgsICA0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LAorCTIzLCAgMzMsICA0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksCisJNDksICA0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwKKwk0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LAorCTQ5LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksCisJNDksICA0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OQorfTsKKyNlbmRpZgorCisjZGVmaW5lIFc5OTY4Q0ZfREVDX0VSUl9DT1JSVVBURURfREFUQSAgLTEKKyNkZWZpbmUgVzk5NjhDRl9ERUNfRVJSX0JVRl9PVkVSRkxPVyAgICAtMgorI2RlZmluZSBXOTk2OENGX0RFQ19FUlJfTk9fU09JICAgICAgICAgIC0zCisjZGVmaW5lIFc5OTY4Q0ZfREVDX0VSUl9OT19TT0YwICAgICAgICAgLTQKKyNkZWZpbmUgVzk5NjhDRl9ERUNfRVJSX05PX1NPUyAgICAgICAgICAtNQorI2RlZmluZSBXOTk2OENGX0RFQ19FUlJfTk9fRU9JICAgICAgICAgIC02CisKK2V4dGVybiB2b2lkIHc5OTY4Y2ZfaW5pdF9kZWNvZGVyKHZvaWQpOworZXh0ZXJuIGludCB3OTk2OGNmX2NoZWNrX2hlYWRlcnMoY29uc3QgdW5zaWduZWQgY2hhciogUGluLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQlVGX1NJWkUpOworZXh0ZXJuIGludCB3OTk2OGNmX2RlY29kZShjb25zdCBjaGFyKiBQaW4sIGNvbnN0IHVuc2lnbmVkIGxvbmcgQlVGX1NJWkUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBXLCBjb25zdCB1bnNpZ25lZCBILCBjaGFyKiBQb3V0KTsKKworI2VuZGlmIC8qIF9XOTk2OENGX0RFQ09ERVJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2ZfdnBwLmggYi9kcml2ZXJzL3VzYi9tZWRpYS93OTk2OGNmX3ZwcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNTMxN2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS93OTk2OGNmX3ZwcC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEludGVyZmFjZSBmb3IgdmlkZW8gcG9zdC1wcm9jZXNzaW5nIGZ1bmN0aW9ucyBmb3IgdGhlIFc5OTZbODddQ0YgZHJpdmVyICoKKyAqIGZvciBMaW51eC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA0IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICoKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1c5OTY4Q0ZfVlBQX0hfCisjZGVmaW5lIF9XOTk2OENGX1ZQUF9IXworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKK3N0cnVjdCB3OTk2OGNmX3ZwcF90IHsKKwlzdHJ1Y3QgbW9kdWxlKiBvd25lcjsKKwlpbnQgKCpjaGVja19oZWFkZXJzKShjb25zdCB1bnNpZ25lZCBjaGFyKiwgY29uc3QgdW5zaWduZWQgbG9uZyk7CisJaW50ICgqZGVjb2RlKShjb25zdCBjaGFyKiwgY29uc3QgdW5zaWduZWQgbG9uZywgY29uc3QgdW5zaWduZWQsCisJICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCwgY2hhciopOworCXZvaWQgKCpzd2FwX3l1dmJ5dGVzKSh2b2lkKiwgdW5zaWduZWQgbG9uZyk7CisJdm9pZCAoKnV5dnlfdG9fcmdieCkodTgqLCB1bnNpZ25lZCBsb25nLCB1OCosIHUxNiwgdTgpOworCXZvaWQgKCpzY2FsZV91cCkodTgqLCB1OCosIHUxNiwgdTE2LCB1MTYsIHUxNiwgdTE2KTsKKworCXU4IGJ1c3k7IC8qIHJlYWQtb25seSBmbGFnOiBtb2R1bGUgaXMvaXMgbm90IGluIHVzZSAqLworfTsKKworZXh0ZXJuIGludCB3OTk2OGNmX3ZwcG1vZF9yZWdpc3RlcihzdHJ1Y3Qgdzk5NjhjZl92cHBfdCopOworZXh0ZXJuIGludCB3OTk2OGNmX3ZwcG1vZF9kZXJlZ2lzdGVyKHN0cnVjdCB3OTk2OGNmX3ZwcF90Kik7CisKKyNlbmRpZiAvKiBfVzk5NjhDRl9WUFBfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTg5Njk1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy9LY29uZmlnCkBAIC0wLDAgKzEsMTUyIEBACisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlciBjb25maWd1cmF0aW9uCisjCitjb21tZW50ICJVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzIgorCWRlcGVuZHMgb24gVVNCCisKK2NvbmZpZyBVU0JfRU1JNjIKKwl0cmlzdGF0ZSAiRU1JIDZ8Mm0gVVNCIEF1ZGlvIGludGVyZmFjZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgbG9hZHMgZmlybXdhcmUgdG8gRW1hZ2ljIEVNSSA2fDJtIGxvdyBsYXRlbmN5IFVTQgorCSAgQXVkaW8gYW5kIE1pZGkgaW50ZXJmYWNlLgorCisJICBBZnRlciBmaXJtd2FyZSBsb2FkIHRoZSBkZXZpY2UgaXMgaGFuZGxlZCB3aXRoIHN0YW5kYXJkIGxpbnV4CisJICBVU0IgQXVkaW8gZHJpdmVyLgorCisJICBUaGlzIGNvZGUgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUgKCA9IGNvZGUgd2hpY2ggY2FuIGJlCisJICBpbnNlcnRlZCBpbiBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3Ugd2FudCkuCisJICBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGF1ZGlvLiBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGFzIGEKKwkgIG1vZHVsZSwgc2F5IE0gaGVyZSBhbmQgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnR4dD4uCisKK2NvbmZpZyBVU0JfRU1JMjYKKwl0cmlzdGF0ZSAiRU1JIDJ8NiBVU0IgQXVkaW8gaW50ZXJmYWNlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBsb2FkcyBmaXJtd2FyZSB0byBFbWFnaWMgRU1JIDJ8NiBsb3cgbGF0ZW5jeSBVU0IKKwkgIEF1ZGlvIGludGVyZmFjZS4KKworCSAgQWZ0ZXIgZmlybXdhcmUgbG9hZCB0aGUgZGV2aWNlIGlzIGhhbmRsZWQgd2l0aCBzdGFuZGFyZCBsaW51eAorCSAgVVNCIEF1ZGlvIGRyaXZlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZW1pMjYuCisKK2NvbmZpZyBVU0JfQVVFUlNXQUxECisJdHJpc3RhdGUgIlVTQiBBdWVyc3dhbGQgSVNETiBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhbiBBdWVyc3dhbGQgVVNCIElTRE4gRGV2aWNlCisJICB0byB5b3VyIGNvbXB1dGVyJ3MgVVNCIHBvcnQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGF1ZXJzd2FsZC4KKworY29uZmlnIFVTQl9SSU81MDAKKwl0cmlzdGF0ZSAiVVNCIERpYW1vbmQgUmlvNTAwIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0IgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGEgVVNCIFJpbzUwMCBtcDMgcGxheWVyIHRvIHlvdXIKKwkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFBsZWFzZSByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL3Jpby50eHQ+CisJICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcmlvNTAwLgorCitjb25maWcgVVNCX0xFR09UT1dFUgorCXRyaXN0YXRlICJVU0IgTGVnbyBJbmZyYXJlZCBUb3dlciBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIFVTQiBMZWdvIEluZnJhcmVkIFRvd2VyIHRvIHlvdXIKKwkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuCisKKwkgIFRoaXMgY29kZSBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZSAoID0gY29kZSB3aGljaCBjYW4gYmUKKwkgIGluc2VydGVkIGluIGFuZCByZW1vdmVkIGZyb20gdGhlIHJ1bm5pbmcga2VybmVsIHdoZW5ldmVyIHlvdSB3YW50KS4KKwkgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbGVnb3VzYnRvd2VyLiBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGFzCisJICBhIG1vZHVsZSwgc2F5IE0gaGVyZSBhbmQgcmVhZAorCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy50eHQ+LgorCitjb25maWcgVVNCX0xDRAorCXRyaXN0YXRlICJVU0IgTENEIGRyaXZlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGFuIFVTQkxDRCB0byB5b3VyIGNvbXB1dGVyJ3MKKwkgIFVTQiBwb3J0LiBUaGUgVVNCTENEIGlzIGEgc21hbGwgVVNCIGludGVyZmFjZSBib2FyZCBmb3IKKwkgIGFscGhhbnVtZXJpYyBMQ0QgbW9kdWxlcy4gU2VlIDxodHRwOi8vd3d3LnVzYmxjZC5kZS8+IGZvciBtb3JlCisJICBpbmZvcm1hdGlvbi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNibGNkLgorCitjb25maWcgVVNCX0xFRAorCXRyaXN0YXRlICJVU0IgTEVEIGRyaXZlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGFuIFVTQkxFRCBkZXZpY2UgdG8geW91ciAKKwkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYmxlZC4KKworY29uZmlnIFVTQl9DWVRIRVJNCisJdHJpc3RhdGUgIkN5cHJlc3MgVVNCIHRoZXJtb21ldGVyIGRyaXZlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGEgQ3lwcmVzcyBVU0IgdGhlcm1vbWV0ZXIKKwkgIGRldmljZSB0byB5b3VyIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFRoaXMgZGV2aWNlIGlzIGFsc28ga25vd24KKwkgIGFzIHRoZSBDeXByZXNzIFVTQiBTdGFydGVyIGtpdCBvciBkZW1vIGJvYXJkLiBUaGUgRWxla3RvcgorCSAgbWFnYXppbmUgcHVibGlzaGVkIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIGRldmljZSBpbiBpc3N1ZSAKKwkgICMyOTEuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN5dGhlcm0uCisKK2NvbmZpZyBVU0JfUEhJREdFVEtJVAorCXRyaXN0YXRlICJVU0IgUGhpZGdldEtpdCBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGEgUGhpZGdldEtpdCBVU0IgZGV2aWNlIGZyb20KKwkgIFBoaWRnZXRzIEluYy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcGhpZGdldGtpdC4KKworY29uZmlnIFVTQl9QSElER0VUU0VSVk8KKwl0cmlzdGF0ZSAiVVNCIFBoaWRnZXRTZXJ2byBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGFuIDEgb3IgNCBNb3RvciBQaGlkZ2V0U2Vydm8gCisJICBzZXJ2byBjb250cm9sbGVyIHZlcnNpb24gMi4wIG9yIDMuMC4KKworCSAgUGhpZGdldHMgSW5jLiBoYXMgYSB3ZWIgcGFnZSBhdCA8aHR0cDovL3d3dy5waGlkZ2V0cy5jb20vPi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcGhpZGdldHNlcnZvLgorCitjb25maWcgVVNCX0lETU9VU0UKKwl0cmlzdGF0ZSAiU2llbWVucyBJRCBVU0IgTW91c2UgRmluZ2VycHJpbnQgc2Vuc29yIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgZmluZ2VycHJpbnQgc2Vuc29yIG9uCisJICB0aGUgU2llbWVucyBJRCBNb3VzZS4gVGhlcmUgaXMgYWxzbyBhIFNpZW1lbnMgSUQgTW91c2UKKwkgIF9Qcm9mZXNzaW9uYWxfLCB3aGljaCBoYXMgbm90IGJlZW4gdGVzdGVkIHdpdGggdGhpcyBkcml2ZXIsCisJICBidXQgdXNlcyB0aGUgc2FtZSBzZW5zb3IgYW5kIG1heSB0aGVyZWZvcmUgd29yay4KKworCSAgVGhpcyBkcml2ZXIgY3JlYXRlcyBhbiBlbnRyeSAiL2Rldi9pZG1vdXNlWCIgb3IgIi9kZXYvdXNiL2lkbW91c2VYIiwKKwkgIHdoaWNoIGNhbiBiZSB1c2VkIGJ5LCBlLmcuLCJjYXQgL2Rldi9pZG1vdXNlMCA+IGZpbmdlcnByaW50LnBubSIuCisKKwkgIFNlZSBhbHNvIDxodHRwOi8vd3d3LmZzLnR1bS5kZS9+ZWNodGxlci9pZG1vdXNlLz4uCisKK3NvdXJjZSAiZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2EvS2NvbmZpZyIKKworY29uZmlnIFVTQl9URVNUCisJdHJpc3RhdGUgIlVTQiB0ZXN0aW5nIGRyaXZlciAoREVWRUxPUE1FTlQpIgorCWRlcGVuZHMgb24gVVNCICYmIFVTQl9ERVZJQ0VGUyAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBUaGlzIGRyaXZlciBpcyBmb3IgdGVzdGluZyBob3N0IGNvbnRyb2xsZXIgc29mdHdhcmUuICBJdCBpcyB1c2VkCisJICB3aXRoIHNwZWNpYWxpemVkIGRldmljZSBmaXJtd2FyZSBmb3IgcmVncmVzc2lvbiBhbmQgc3RyZXNzIHRlc3RpbmcsCisJICB0byBoZWxwIHByZXZlbnQgcHJvYmxlbXMgZnJvbSBjcm9wcGluZyB1cCB3aXRoICJyZWFsIiBkcml2ZXJzLgorCisJICBTZWUgPGh0dHA6Ly93d3cubGludXgtdXNiLm9yZy91c2J0ZXN0Lz4gZm9yIG1vcmUgaW5mb3JtYXRpb24sCisJICBpbmNsdWRpbmcgc2FtcGxlIHRlc3QgZGV2aWNlIGZpcm13YXJlIGFuZCAiaG93IHRvIHVzZSBpdCIuCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMzgxNGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlCkBAIC0wLDAgKzEsMjAgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSByZXN0IG9mIHRoZSBVU0IgZHJpdmVycworIyAodGhlIG9uZXMgdGhhdCBkb24ndCBmaXQgaW50byBhbnkgb3RoZXIgY2F0ZWdvcmllcykKKyMKKworb2JqLSQoQ09ORklHX1VTQl9BVUVSU1dBTEQpCSs9IGF1ZXJzd2FsZC5vCitvYmotJChDT05GSUdfVVNCX0NZVEhFUk0pCSs9IGN5dGhlcm0ubworb2JqLSQoQ09ORklHX1VTQl9FTUkyNikJCSs9IGVtaTI2Lm8KK29iai0kKENPTkZJR19VU0JfRU1JNjIpCQkrPSBlbWk2Mi5vCitvYmotJChDT05GSUdfVVNCX0lETU9VU0UpCSs9IGlkbW91c2Uubworb2JqLSQoQ09ORklHX1VTQl9MQ0QpCQkrPSB1c2JsY2Qubworb2JqLSQoQ09ORklHX1VTQl9MRUQpCQkrPSB1c2JsZWQubworb2JqLSQoQ09ORklHX1VTQl9MRUdPVE9XRVIpCSs9IGxlZ291c2J0b3dlci5vCitvYmotJChDT05GSUdfVVNCX1BISURHRVRLSVQpCSs9IHBoaWRnZXRraXQubworb2JqLSQoQ09ORklHX1VTQl9QSElER0VUU0VSVk8pCSs9IHBoaWRnZXRzZXJ2by5vCitvYmotJChDT05GSUdfVVNCX1JJTzUwMCkJKz0gcmlvNTAwLm8KK29iai0kKENPTkZJR19VU0JfVEVTVCkJCSs9IHVzYnRlc3Qubworb2JqLSQoQ09ORklHX1VTQl9VU1M3MjApCSs9IHVzczcyMC5vCisKK29iai0kKENPTkZJR19VU0JfU0lTVVNCVkdBKQkrPSBzaXN1c2J2Z2EvClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9hdWVyc3dhbGQuYyBiL2RyaXZlcnMvdXNiL21pc2MvYXVlcnN3YWxkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUzMGJiOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvYXVlcnN3YWxkLmMKQEAgLTAsMCArMSwyMTYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogICAgICBhdWVyc3dhbGQuYyAgLS0gIEF1ZXJzd2FsZCBQQlgvU3lzdGVtIFRlbGVwaG9uZSB1c2IgZHJpdmVyLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAyMDAxICBXb2xmZ2FuZyBNw7xlcyAod29sZmdhbmdAaWtzdy1tdWVlcy5kZSkKKyAqCisgKiAgICAgIFZlcnkgbXVjaCBjb2RlIG9mIHRoaXMgZHJpdmVyIGlzIGJvcnJvd2VkIGZyb20gZGFidXNiLmMgKERldGkgRmxpZWdsKQorICogICAgICBhbmQgZnJvbSB0aGUgVVNCIFNrZWxldG9uIGRyaXZlciAoR3JlZyBLcm9haC1IYXJ0bWFuKS4gVGhhbmsgeW91LgorICoKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogU3RhbmRhcmQgTGludXggbW9kdWxlIGluY2x1ZGUgZmlsZXMgKi8KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyN1bmRlZiBERUJVRyAgIAkJLyogaW5jbHVkZSBkZWJ1ZyBtYWNyb3MgdW50aWwgaXQncyBkb25lCSovCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBEZWJ1ZyBzdXBwb3J0IAkJCQkJCSAgICAgKi8KKyNpZmRlZiBERUJVRworI2RlZmluZSBkdW1wKCBhZHIsIGxlbikgXAorZG8gewkJCVwKKwl1bnNpZ25lZCBpbnQgdTsJXAorCXByaW50ayAoS0VSTl9ERUJVRyk7IFwKKwlmb3IgKHUgPSAwOyB1IDwgbGVuOyB1KyspIFwKKwkJcHJpbnRrICgiICUwMlgiLCBhZHJbdV0gJiAweEZGKTsgXAorCXByaW50ayAoIlxuIik7IFwKK30gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBkdW1wKCBhZHIsIGxlbikKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVmVyc2lvbiBJbmZvcm1hdGlvbiAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMC45LjExIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICAiV29sZmdhbmcgTcO8ZXMgPHdvbGZnYW5nQGlrc3ctbXVlZXMuZGU+IgorI2RlZmluZSBEUklWRVJfREVTQyAgICAiQXVlcnN3YWxkIFBCWC9TeXN0ZW0gVGVsZXBob25lIHVzYiBkcml2ZXIiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQcml2YXRlIGRlY2xhcmF0aW9ucyBmb3IgQXVlcnN3YWxkIFVTQiBkcml2ZXIgICAgICAgICAgICAgICAgICAgICAqLworCisvKiBBdWVyc3dhbGQgVmVuZG9yIElEICovCisjZGVmaW5lIElEX0FVRVJTV0FMRCAgCTB4MDlCRgorCisjZGVmaW5lIEFVRVJfTUlOT1JfQkFTRQkxMTIJLyogYXVlcnN3YWxkIGRyaXZlciBtaW5vciBudW1iZXIgKi8KKworLyogd2UgY2FuIGhhdmUgdXAgdG8gdGhpcyBudW1iZXIgb2YgZGV2aWNlIHBsdWdnZWQgaW4gYXQgb25jZSAqLworI2RlZmluZSBBVUVSX01BWF9ERVZJQ0VTIDE2CisKKworLyogTnVtYmVyIG9mIHJlYWQgYnVmZmVycyBmb3IgZWFjaCBkZXZpY2UgKi8KKyNkZWZpbmUgQVVfUkJVRkZFUlMgICAgIDEwCisKKy8qIE51bWJlciBvZiBjaGFpbiBlbGVtZW50cyBmb3IgZWFjaCBjb250cm9sIGNoYWluICovCisjZGVmaW5lIEFVQ0hfRUxFTUVOVFMgICAyMAorCisvKiBOdW1iZXIgb2YgcmV0cmllcyBpbiBjb21tdW5pY2F0aW9uICovCisjZGVmaW5lIEFVX1JFVFJJRVMJMTAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHZlbmRvciBzcGVjaWZpYyBwcm90b2NvbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBIZWFkZXIgQnl0ZSAqLworI2RlZmluZSBBVUhfSU5ESVJNQVNLICAgMHg4MCAgICAvKiBtYXNrIGZvciBkaXJlY3QvaW5kaXJlY3QgYml0ICovCisjZGVmaW5lIEFVSF9ESVJFQ1QgICAgICAweDAwICAgIC8qIGRhdGEgaXMgZm9yIFVTQiBkZXZpY2UgKi8KKyNkZWZpbmUgQVVIX0lORElSRUNUICAgIDB4ODAgICAgLyogVVNCIGRldmljZSBpcyByZWxheSAqLworCisjZGVmaW5lIEFVSF9TUExJVE1BU0sgICAweDQwICAgIC8qIG1hc2sgZm9yIHNwbGl0IGJpdCAqLworI2RlZmluZSBBVUhfVU5TUExJVCAgICAgMHgwMCAgICAvKiBkYXRhIGJsb2NrIGlzIGZ1bGwtc2l6ZSAqLworI2RlZmluZSBBVUhfU1BMSVQgICAgICAgMHg0MCAgICAvKiBkYXRhIGJsb2NrIGlzIHBhcnQgb2YgYSBsYXJnZXIgb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdC1ieXRlIGZvbGxvd3MgKi8KKworI2RlZmluZSBBVUhfVFlQRU1BU0sgICAgMHgzRiAgICAvKiBtYXNrIGZvciB0eXBlIG9mIGRhdGEgdHJhbnNmZXIgKi8KKyNkZWZpbmUgQVVIX1RZUEVTSVpFICAgIDB4NDAgICAgLyogZGlmZmVyZW50IHR5cGVzICovCisjZGVmaW5lIEFVSF9EQ0hBTk5FTCAgICAweDAwICAgIC8qIEQgY2hhbm5lbCBkYXRhICovCisjZGVmaW5lIEFVSF9CMUNIQU5ORUwgICAweDAxICAgIC8qIEIxIGNoYW5uZWwgdHJhbnNwYXJlbnQgKi8KKyNkZWZpbmUgQVVIX0IyQ0hBTk5FTCAgIDB4MDIgICAgLyogQjIgY2hhbm5lbCB0cmFuc3BhcmVudCAqLworLyogICAgICAgICAgICAgICAgMHgwMy4uMHgwRiAgICAgICByZXNlcnZlZCBmb3IgZHJpdmVyIGludGVybmFsIHVzZSAqLworI2RlZmluZSBBVUhfQ09NTUFORCAgICAgMHgxMCAgICAvKiBDb21tYW5kIGNoYW5uZWwgKi8KKyNkZWZpbmUgQVVIX0JQUk9UICAgICAgIDB4MTEgICAgLyogQ29uZmlndXJhdGlvbiBibG9jayBwcm90b2NvbCAqLworI2RlZmluZSBBVUhfRFBST1RBTkEgICAgMHgxMiAgICAvKiBEIGNoYW5uZWwgcHJvdG9jb2wgYW5hbHl6ZXIgKi8KKyNkZWZpbmUgQVVIX1RBUEkgICAgICAgIDB4MTMgICAgLyogdGVsZXBob25lIGFwaSBkYXRhIChBVEQpICovCisvKiAgICAgICAgICAgICAgICAweDE0Li4weDNGICAgICAgIHJlc2VydmVkIGZvciBvdGhlciBwcm90b2NvbHMgKi8KKyNkZWZpbmUgQVVIX1VOQVNTSUdORUQgIDB4RkYgICAgLyogaWYgY2hhciBkZXZpY2UgaGFzIG5vIGFzc2lnbmVkIHNlcnZpY2UgKi8KKyNkZWZpbmUgQVVIX0ZJUlNUVVNFUkNIIDB4MTEgICAgLyogZmlyc3QgY2hhbm5lbCB3aGljaCBpcyBhdmFpbGFibGUgZm9yIGRyaXZlciB1c2VycyAqLworCisjZGVmaW5lIEFVSF9TSVpFCTEgCS8qIFNpemUgb2YgSGVhZGVyIEJ5dGUgKi8KKworLyogU3BsaXQgQnl0ZS4gT25seSBwcmVzZW50IGlmIHNwbGl0IGJpdCBpbiBoZWFkZXIgYnl0ZSBzZXQuKi8KKyNkZWZpbmUgQVVTX1NUQVJUTUFTSyAgIDB4ODAgICAgLyogbWFzayBmb3IgZmlyc3QgYmxvY2sgb2Ygc3BsaXR0ZWQgZnJhbWUgKi8KKyNkZWZpbmUgQVVTX0ZJUlNUICAgICAgIDB4ODAgICAgLyogZmlyc3QgYmxvY2sgKi8KKyNkZWZpbmUgQVVTX0ZPTExPVyAgICAgIDB4MDAgICAgLyogZm9sbG93aW5nIGJsb2NrICovCisKKyNkZWZpbmUgQVVTX0VORE1BU0sgICAgIDB4NDAgICAgLyogbWFzayBmb3IgbGFzdCBibG9jayBvZiBzcGxpdHRlZCBmcmFtZSAqLworI2RlZmluZSBBVVNfRU5EICAgICAgICAgMHg0MCAgICAvKiBsYXN0IGJsb2NrICovCisjZGVmaW5lIEFVU19OT0VORCAgICAgICAweDAwICAgIC8qIG5vdCB0aGUgbGFzdCBibG9jayAqLworCisjZGVmaW5lIEFVU19MRU5NQVNLICAgICAweDNGICAgIC8qIG1hc2sgZm9yIGJsb2NrIGxlbmd0aCBpbmZvcm1hdGlvbiAqLworCisvKiBSZXF1ZXN0IHR5cGVzICovCisjZGVmaW5lIEFVVF9SUkVRICAgICAgICAoVVNCX0RJUl9JTiAgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfT1RIRVIpICAgLyogUmVhZCBSZXF1ZXN0ICovCisjZGVmaW5lIEFVVF9XUkVRICAgICAgICAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfT1RIRVIpICAgLyogV3JpdGUgUmVxdWVzdCAqLworCisvKiBWZW5kb3IgUmVxdWVzdHMgKi8KKyNkZWZpbmUgQVVWX0dFVElORk8gICAgIDB4MDAgICAgLyogR2V0RGV2aWNlSW5mbyAqLworI2RlZmluZSBBVVZfV0JMT0NLICAgICAgMHgwMSAgICAvKiBXcml0ZSBCbG9jayAqLworI2RlZmluZSBBVVZfUkJMT0NLICAgICAgMHgwMiAgICAvKiBSZWFkIEJsb2NrICovCisjZGVmaW5lIEFVVl9DSEFOTkVMQ1RMICAweDAzICAgIC8qIENoYW5uZWwgQ29udHJvbCAqLworI2RlZmluZSBBVVZfRFVNTVkJMHgwNAkvKiBEdW1teSBPdXQgZm9yIHJldHJ5ICovCisKKy8qIERldmljZSBJbmZvIFR5cGVzICovCisjZGVmaW5lIEFVRElfTlVNQkNIICAgICAweDAwMDAgIC8qIE51bWJlciBvZiBzdXBwb3J0ZWQgQiBjaGFubmVscyAqLworI2RlZmluZSBBVURJX09VVEZTSVpFICAgMHgwMDAxICAvKiBTaXplIG9mIE9VVCBCIGNoYW5uZWwgZmlmb3MgKi8KKyNkZWZpbmUgQVVESV9NQkNUUkFOUyAgIDB4MDAwMiAgLyogbWF4LiBCbG9ja2xlbmd0aCBvZiBjb250cm9sIHRyYW5zZmVyICovCisKKy8qIEludGVycnVwdCBlbmRwb2ludCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBBVV9JUlFFTkRQICAgICAgMSAgICAgICAvKiBFbmRwb2ludCBudW1iZXIgKi8KKyNkZWZpbmUgQVVfSVJRQ01ESUQgICAgIDE2ICAgICAgLyogQ29tbWFuZC1ibG9jayBJRCAqLworI2RlZmluZSBBVV9CTE9DS1JEWSAgICAgMCAgICAgICAvKiBDb21tYW5kOiBCbG9jayBkYXRhIHJlYWR5IG9uIGN0bCBlbmRwb2ludCAqLworI2RlZmluZSBBVV9JUlFNSU5TSVpFCTUJLyogTnIuIG9mIGJ5dGVzIGRlY29kZWQgaW4gdGhpcyBkcml2ZXIgKi8KKworLyogRGV2aWNlIFN0cmluZyBEZXNjcmlwdG9ycyAqLworI2RlZmluZSBBVVNJX1ZFTkRPUiAgIAkxCS8qICJBdWVyc3dhbGQgR21iSCAmIENvLiBLRyIgKi8KKyNkZWZpbmUgQVVTSV9ERVZJQ0UgICAJMgkvKiBOYW1lIG9mIHRoZSBEZXZpY2UgKi8KKyNkZWZpbmUgQVVTSV9TRVJJQUxOUiAJMwkvKiBTZXJpYWwgTnVtYmVyICovCisjZGVmaW5lIEFVU0lfTVNOICAgICAgCTQJLyogIk1TTiAuLi4iIChmaXJzdCkgTXVsdGlwbGUgU3Vic2NyaWJlciBOdW1iZXIgKi8KKworI2RlZmluZSBBVVNJX0RMRU4JMTAwCS8qIE1heC4gTGVuZ3RoIG9mIERldmljZSBEZXNjcmlwdGlvbiAqLworCisjZGVmaW5lIEFVVl9SRVRSWQkweDEwMQkvKiBGaXJzdCBGaXJtd2FyZSB2ZXJzaW9uIHdoaWNoIGNhbiBkbyBjb250cm9sIHJldHJpZXMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEV4dGVybmFsIGRhdGEgc3RydWN0dXJlcyAvIEludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit0eXBlZGVmIHN0cnVjdAoreworCWNoYXIgX191c2VyICpidWY7CS8qIHJldHVybiBidWZmZXIgZm9yIHN0cmluZyBjb250ZW50cyAqLworCXVuc2lnbmVkIGludCBic2l6ZTsJLyogc2l6ZSBvZiByZXR1cm4gYnVmZmVyICovCit9IGF1ZGV2aW5mb190LCpwYXVkZXZpbmZvX3Q7CisKKy8qIElPIGNvbnRyb2xzICovCisjZGVmaW5lIElPQ1RMX0FVX1NMRU4JICBfSU9SKCAnVScsIDB4RjAsIGludCkgICAgICAgICAvKiByZXR1cm4gdGhlIG1heC4gc3RyaW5nIGRlc2NyaXB0b3IgbGVuZ3RoICovCisjZGVmaW5lIElPQ1RMX0FVX0RFVklORk8gIF9JT1dSKCdVJywgMHhGMSwgYXVkZXZpbmZvX3QpIC8qIGdldCBuYW1lIG9mIGEgc3BlY2lmaWMgZGV2aWNlICovCisjZGVmaW5lIElPQ1RMX0FVX1NFUlZSRVEgIF9JT1coICdVJywgMHhGMiwgaW50KSAJLyogcmVxdWVzdCBhIHNlcnZpY2UgY2hhbm5lbCAqLworI2RlZmluZSBJT0NUTF9BVV9CVUZMRU4JICBfSU9SKCAnVScsIDB4RjMsIGludCkgICAgICAgICAvKiByZXR1cm4gdGhlIG1heC4gYnVmZmVyIGxlbmd0aCBmb3IgdGhlIGRldmljZSAqLworI2RlZmluZSBJT0NUTF9BVV9SWEFWQUlMICBfSU9SKCAnVScsIDB4RjQsIGludCkgICAgICAgICAvKiByZXR1cm4gIT0gMCBpZiBSZWNlaXZlIERhdGEgYXZhaWxhYmxlICovCisjZGVmaW5lIElPQ1RMX0FVX0NPTk5FQ1QgIF9JT1IoICdVJywgMHhGNSwgaW50KSAgICAgICAgIC8qIHJldHVybiAhPSAwIGlmIGNvbm5lY3RlZCB0byBhIHNlcnZpY2UgY2hhbm5lbCAqLworI2RlZmluZSBJT0NUTF9BVV9UWFJFQURZICBfSU9SKCAnVScsIDB4RjYsIGludCkgICAgICAgICAvKiByZXR1cm4gIT0gMCBpZiBUcmFuc21pdHQgY2hhbm5lbCByZWFkeSB0byBzZW5kICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVJyAgMHhGNy4uMHhGRiByZXNldmVkICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBJbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qLworLyogdXJiIGNoYWluIGVsZW1lbnQgKi8KK3N0cnVjdCAgYXVlcmNoYWluOyAgICAgICAgICAgICAgICAgICAgICAvKiBmb3J3YXJkIGZvciBjaXJjdWxhciByZWZlcmVuY2UgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgICAgIHN0cnVjdCBhdWVyY2hhaW4gKmNoYWluOyAgICAgICAgLyogcG9pbnRlciB0byB0aGUgY2hhaW4gdG8gd2hpY2ggdGhpcyBlbGVtZW50IGJlbG9uZ3MgKi8KKyAgICAgICAgc3RydWN0IHVyYiAqIHVyYnA7ICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gYXR0YWNoZWQgdXJiICovCisgICAgICAgIHZvaWQgKmNvbnRleHQ7ICAgICAgICAgICAgICAgICAgLyogc2F2ZWQgVVJCIGNvbnRleHQgKi8KKyAgICAgICAgdXNiX2NvbXBsZXRlX3QgY29tcGxldGU7ICAgICAgICAvKiBzYXZlZCBVUkIgY29tcGxldGlvbiBmdW5jdGlvbiAqLworICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7ICAgICAgICAgIC8qIHRvIGluY2x1ZGUgZWxlbWVudCBpbnRvIGEgbGlzdCAqLworfSBhdWVyY2hhaW5lbGVtZW50X3QsKnBhdWVyY2hhaW5lbGVtZW50X3Q7CisKKy8qIHVyYiBjaGFpbiAqLwordHlwZWRlZiBzdHJ1Y3QgYXVlcmNoYWluCit7CisgICAgICAgIHBhdWVyY2hhaW5lbGVtZW50X3QgYWN0aXZlOyAgICAgLyogZWxlbWVudCB3aGljaCBpcyBzdWJtaXR0ZWQgdG8gdXJiICovCisJc3BpbmxvY2tfdCBsb2NrOyAgICAgICAgICAgICAgICAvKiBwcm90ZWN0aW9uIGFnYWlucyBpbnRlcnJ1cHRzICovCisgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgd2FpdGluZ19saXN0OyAgLyogbGlzdCBvZiB3YWl0aW5nIGVsZW1lbnRzICovCisgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZnJlZV9saXN0OyAgICAgLyogbGlzdCBvZiBhdmFpbGFibGUgZWxlbWVudHMgKi8KK30gYXVlcmNoYWluX3QsKnBhdWVyY2hhaW5fdDsKKworLyogdXJiIGJsb2NraW5nIGNvbXBsZXRpb24gaGVscGVyIHN0cnVjdCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cWg7ICAgIAkvKiB3YWl0IGZvciBjb21wbGV0aW9uICovCisJdW5zaWduZWQgaW50IGRvbmU7CQkvKiBjb21wbGV0aW9uIGZsYWcgKi8KK30gYXVlcmNoYWluX2Noc190LCpwYXVlcmNoYWluX2Noc190OworCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uKi8KKy8qIGJ1ZmZlciBlbGVtZW50ICovCitzdHJ1Y3QgIGF1ZXJidWZjdGw7ICAgICAgICAgICAgICAgICAgICAgLyogZm9yd2FyZCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAgICAgY2hhciAqYnVmcDsgICAgICAgICAgICAgICAgICAgICAvKiByZWZlcmVuY2UgdG8gYWxsb2NhdGVkIGRhdGEgYnVmZmVyICovCisgICAgICAgIHVuc2lnbmVkIGludCBsZW47ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gZGF0YSBidWZmZXIgKi8KKwl1bnNpZ25lZCBpbnQgcmV0cmllczsJCS8qIGZvciB1cmIgcmV0cmllcyAqLworICAgICAgICBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpkcjsJLyogZm9yIHNldHVwIGRhdGEgaW4gY29udHJvbCBtZXNzYWdlcyAqLworICAgICAgICBzdHJ1Y3QgdXJiICogdXJicDsgICAgICAgICAgICAgICAgICAgLyogVVNCIHVyYiAqLworICAgICAgICBzdHJ1Y3QgYXVlcmJ1ZmN0bCAqbGlzdDsgICAgICAgIC8qIHBvaW50ZXIgdG8gbGlzdCAqLworICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGJ1ZmZfbGlzdDsgICAgIC8qIHJlZmVyZW5jZSB0byBuZXh0IGJ1ZmZlciBpbiBsaXN0ICovCit9IGF1ZXJidWZfdCwqcGF1ZXJidWZfdDsKKworLyogYnVmZmVyIGxpc3QgY29udHJvbCBibG9jayAqLwordHlwZWRlZiBzdHJ1Y3QgYXVlcmJ1ZmN0bAoreworICAgICAgICBzcGlubG9ja190IGxvY2s7ICAgICAgICAgICAgICAgIC8qIHByb3RlY3Rpb24gaW4gaW50ZXJydXB0ICovCisgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZnJlZV9idWZmX2xpc3Q7LyogZnJlZSBidWZmZXJzICovCisgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgcmVjX2J1ZmZfbGlzdDsgLyogYnVmZmVycyB3aXRoIHJlY2VpdmUgZGF0YSAqLworfSBhdWVyYnVmY3RsX3QsKnBhdWVyYnVmY3RsX3Q7CisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qLworLyogc2VydmljZSBjb250ZXh0ICovCitzdHJ1Y3QgIGF1ZXJzY29uOyAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yd2FyZCAqLwordHlwZWRlZiB2b2lkICgqYXVlcl9kaXNwYXRjaF90KShzdHJ1Y3QgYXVlcnNjb24qLCBwYXVlcmJ1Zl90KTsKK3R5cGVkZWYgdm9pZCAoKmF1ZXJfZGlzY29ubl90KSAoc3RydWN0IGF1ZXJzY29uKik7Cit0eXBlZGVmIHN0cnVjdCBhdWVyc2NvbgoreworICAgICAgICB1bnNpZ25lZCBpbnQgaWQ7ICAgICAgICAgICAgICAgIC8qIHByb3RvY29sIHNlcnZpY2UgaWQgQVVIX3h4eHggKi8KKyAgICAgICAgYXVlcl9kaXNwYXRjaF90IGRpc3BhdGNoOyAgICAgICAvKiBkaXNwYXRjaCByZWFkIGJ1ZmZlciAqLworCWF1ZXJfZGlzY29ubl90IGRpc2Nvbm5lY3Q7CS8qIGRpc2Nvbm5lY3QgZnJvbSBkZXZpY2UsIHdha2UgdXAgYWxsIGNoYXIgcmVhZGVycyAqLworfSBhdWVyc2Nvbl90LCpwYXVlcnNjb25fdDsKKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiovCisvKiBVU0IgZGV2aWNlIGNvbnRleHQgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJc3RydWN0IHNlbWFwaG9yZSAJbXV0ZXg7ICAgICAgICAgCSAgICAvKiBwcm90ZWN0aW9uIGluIHVzZXIgY29udGV4dCAqLworCWNoYXIgCQkJbmFtZVsyMF07CSAgICAvKiBuYW1lIG9mIHRoZSAvZGV2L3VzYiBlbnRyeSAqLworCXVuc2lnbmVkIGludAkJZHRpbmRleDsJICAgIC8qIGluZGV4IGluIHRoZSBkZXZpY2UgdGFibGUgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAqCXVzYmRldjsgICAgICAJICAgIC8qIFVTQiBkZXZpY2UgaGFuZGxlICovCisJaW50CQkJb3Blbl9jb3VudDsJICAgIC8qIGNvdW50IHRoZSBudW1iZXIgb2Ygb3BlbiBjaGFyYWN0ZXIgY2hhbm5lbHMgKi8KKyAgICAgICAgY2hhciAJCQlkZXZfZGVzY1tBVVNJX0RMRU5dOy8qIGZvciBzdG9yaW5nIGEgdGV4dHVhbCBkZXNjcmlwdGlvbiAqLworICAgICAgICB1bnNpZ25lZCBpbnQgCQltYXhDb250cm9sTGVuZ3RoOyAgIC8qIG1heC4gTGVuZ3RoIG9mIGNvbnRyb2wgcGFrZXQgKHdpdGhvdXQgaGVhZGVyKSAqLworICAgICAgICBzdHJ1Y3QgdXJiICogCQlpbnR1cmJwOyAgICAgICAgICAgIC8qIGludGVycnVwdCB1cmIgKi8KKyAgICAgICAgY2hhciAqCQkJaW50YnVmcDsgICAgICAgICAgICAvKiBkYXRhIGJ1ZmZlciBmb3IgaW50ZXJydXB0IHVyYiAqLworCXVuc2lnbmVkIGludCAJCWlycXNpemU7CSAgICAvKiBzaXplIG9mIGludGVycnVwdCBlbmRwb2ludCAxICovCisgICAgICAgIHN0cnVjdCBhdWVyY2hhaW4gCWNvbnRyb2xjaGFpbjsgIAkgICAgLyogZm9yIGNoYWluaW5nIG9mIGNvbnRyb2wgbWVzc2FnZXMgKi8KKwlhdWVyYnVmY3RsX3QgCQlidWZjdGw7ICAgICAgICAgICAgIC8qIEJ1ZmZlciBjb250cm9sIGZvciBjb250cm9sIHRyYW5zZmVycyAqLworICAgICAgICBwYXVlcnNjb25fdCAJICAgICAJc2VydmljZXNbQVVIX1RZUEVTSVpFXTsvKiBjb250ZXh0IHBvaW50ZXJzIGZvciBlYWNoIHNlcnZpY2UgKi8KKwl1bnNpZ25lZCBpbnQJCXZlcnNpb247CSAgICAvKiBWZXJzaW9uIG9mIHRoZSBkZXZpY2UgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCAJYnVmZmVyd2FpdDsgICAgICAgICAvKiB3YWl0IGZvciBhIGNvbnRyb2wgYnVmZmVyICovCit9IGF1ZXJzd2FsZF90LCpwYXVlcnN3YWxkX3Q7CisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKy8qIGNoYXJhY3RlciBkZXZpY2UgY29udGV4dCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlzdHJ1Y3Qgc2VtYXBob3JlIG11dGV4OyAgICAgICAgIC8qIHByb3RlY3Rpb24gaW4gdXNlciBjb250ZXh0ICovCisJcGF1ZXJzd2FsZF90IGF1ZXJkZXY7ICAgICAgICAgICAvKiBjb250ZXh0IHBvaW50ZXIgb2YgYXNzaWduZWQgZGV2aWNlICovCisgICAgICAgIGF1ZXJidWZjdGxfdCBidWZjdGw7ICAgICAgICAgICAgLyogY29udHJvbHMgdGhlIGJ1ZmZlciBjaGFpbiAqLworICAgICAgICBhdWVyc2Nvbl90IHNjb250ZXh0OyAgICAgICAgICAgIC8qIHNlcnZpY2UgY29udGV4dCAqLworCXdhaXRfcXVldWVfaGVhZF90IHJlYWR3YWl0OyAgICAgLyogZm9yIHN5bmNocm9ub3VzIHJlYWRpbmcgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIHJlYWRtdXRleDsgICAgIC8qIHByb3RlY3Rpb24gYWdhaW5zdCBtdWx0aXBsZSByZWFkcyAqLworCXBhdWVyYnVmX3QgcmVhZGJ1ZjsJCS8qIGJ1ZmZlciBoZWxkIGZvciBwYXJ0aWFsIHJlYWRpbmcgKi8KKwl1bnNpZ25lZCBpbnQgcmVhZG9mZnNldDsJLyogY3VycmVudCBvZmZzZXQgaW4gcmVhZGJ1ZiAqLworCXVuc2lnbmVkIGludCByZW1vdmVkOwkJLyogaXMgIT0gMCBpZiBkZXZpY2UgaXMgcmVtb3ZlZCAqLworfSBhdWVyY2hhcl90LCpwYXVlcmNoYXJfdDsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRm9yd2FyZHMgKi8KK3N0YXRpYyB2b2lkIGF1ZXJzd2FsZF9jdHJscmVhZF9jb21wbGV0ZSAoc3RydWN0IHVyYiAqIHVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgYXVlcnN3YWxkX3JlbW92ZXNlcnZpY2UgKHBhdWVyc3dhbGRfdCBjcCwgcGF1ZXJzY29uX3Qgc2NwKTsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhdWVyc3dhbGRfZHJpdmVyOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBVU0IgY2hhaW4gaGVscGVyIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyogY29tcGxldGlvbiBmdW5jdGlvbiBmb3IgY2hhaW5lZCB1cmJzICovCitzdGF0aWMgdm9pZCBhdWVyY2hhaW5fY29tcGxldGUgKHN0cnVjdCB1cmIgKiB1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAgICAgIGludCByZXN1bHQ7CisKKyAgICAgICAgLyogZ2V0IHBvaW50ZXIgdG8gZWxlbWVudCBhbmQgdG8gY2hhaW4gKi8KKyAgICAgICAgcGF1ZXJjaGFpbmVsZW1lbnRfdCBhY2VwID0gKHBhdWVyY2hhaW5lbGVtZW50X3QpIHVyYi0+Y29udGV4dDsKKyAgICAgICAgcGF1ZXJjaGFpbl90ICAgICAgICAgYWNwID0gYWNlcC0+Y2hhaW47CisKKyAgICAgICAgLyogcmVzdG9yZSBvcmlnaW5hbCBlbnRyaWVzIGluIHVyYiAqLworICAgICAgICB1cmItPmNvbnRleHQgID0gYWNlcC0+Y29udGV4dDsKKyAgICAgICAgdXJiLT5jb21wbGV0ZSA9IGFjZXAtPmNvbXBsZXRlOworCisgICAgICAgIGRiZyAoImF1ZXJjaGFpbl9jb21wbGV0ZSBjYWxsZWQiKTsKKworICAgICAgICAvKiBjYWxsIG9yaWdpbmFsIGNvbXBsZXRpb24gZnVuY3Rpb24KKyAgICAgICAgICAgTk9URTogdGhpcyBmdW5jdGlvbiBtYXkgbGVhZCB0byBtb3JlIHVyYnMgc3VibWl0dGVkIGludG8gdGhlIGNoYWluLgorICAgICAgICAgICAgICAgICAobm8gY2hhaW4gbG9jayBhdCBjYWxsaW5nIGNvbXBsZXRlKCkhKQorICAgICAgICAgICAgICAgICBhY3AtPmFjdGl2ZSAhPSBOVUxMIGlzIHByb3RlY3RpbmcgdXMgYWdhaW5zdCByZWN1cnNpb24uKi8KKyAgICAgICAgdXJiLT5jb21wbGV0ZSAodXJiLCByZWdzKTsKKworICAgICAgICAvKiBkZXRhY2ggZWxlbWVudCBmcm9tIGNoYWluIGRhdGEgc3RydWN0dXJlICovCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZhY3AtPmxvY2ssIGZsYWdzKTsKKyAgICAgICAgaWYgKGFjcC0+YWN0aXZlICE9IGFjZXApIC8qIHBhcmFub2lhIGRlYnVnIGNoZWNrICovCisJICAgICAgICBkYmcgKCJhdWVyY2hhaW5fY29tcGxldGU6IGNvbXBsZXRpb24gb24gbm9uLWFjdGl2ZSBlbGVtZW50IGNhbGxlZCEiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFjcC0+YWN0aXZlID0gTlVMTDsKKworICAgICAgICAvKiBhZGQgdGhlIHVzZWQgY2hhaW4gZWxlbWVudCB0byB0aGUgbGlzdCBvZiBmcmVlIGVsZW1lbnRzICovCisJbGlzdF9hZGRfdGFpbCAoJmFjZXAtPmxpc3QsICZhY3AtPmZyZWVfbGlzdCk7CisgICAgICAgIGFjZXAgPSBOVUxMOworCisgICAgICAgIC8qIGlzIHRoZXJlIGEgbmV3IGVsZW1lbnQgd2FpdGluZyBpbiB0aGUgY2hhaW4/ICovCisgICAgICAgIGlmICghYWNwLT5hY3RpdmUgJiYgIWxpc3RfZW1wdHkgKCZhY3AtPndhaXRpbmdfbGlzdCkpIHsKKyAgICAgICAgICAgICAgICAvKiB5ZXM6IGdldCB0aGUgZW50cnkgKi8KKyAgICAgICAgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bXAgPSBhY3AtPndhaXRpbmdfbGlzdC5uZXh0OworICAgICAgICAgICAgICAgIGxpc3RfZGVsICh0bXApOworICAgICAgICAgICAgICAgIGFjZXAgPSBsaXN0X2VudHJ5ICh0bXAsIGF1ZXJjaGFpbmVsZW1lbnRfdCwgbGlzdCk7CisgICAgICAgICAgICAgICAgYWNwLT5hY3RpdmUgPSBhY2VwOworICAgICAgICB9CisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZhY3AtPmxvY2ssIGZsYWdzKTsKKworICAgICAgICAvKiBzdWJtaXQgdGhlIG5ldyB1cmIgKi8KKyAgICAgICAgaWYgKGFjZXApIHsKKyAgICAgICAgICAgICAgICB1cmIgICAgPSBhY2VwLT51cmJwOworICAgICAgICAgICAgICAgIGRiZyAoImF1ZXJjaGFpbl9jb21wbGV0ZTogc3VibWl0dGluZyBuZXh0IHVyYiBmcm9tIGNoYWluIik7CisJCXVyYi0+c3RhdHVzID0gMDsJLyogbmVlZGVkISAqLworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCisgICAgICAgICAgICAgICAgLyogY2hlY2sgZm9yIHN1Ym1pdCBlcnJvcnMgKi8KKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1cmItPnN0YXR1cyA9IHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRiZygiYXVlcmNoYWluX2NvbXBsZXRlOiB1c2Jfc3VibWl0X3VyYiB3aXRoIGVycm9yIGNvZGUgJWQiLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIGRvIGVycm9yIGhhbmRsaW5nIHZpYSAqdGhpcyogY29tcGxldGlvbiBmdW5jdGlvbiAocmVjdXJzaXZlKSAqLworICAgICAgICAgICAgICAgICAgICAgICAgYXVlcmNoYWluX2NvbXBsZXRlKCB1cmIsIE5VTEwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBzaW1wbGUgcmV0dXJuIHdpdGhvdXQgc3VibWl0dGluZyBhIG5ldyB1cmIuCisgICAgICAgICAgICAgICAgICAgVGhlIGVtcHR5IGNoYWluIGlzIGRldGVjdGVkIHdpdGggYWNwLT5hY3RpdmUgPT0gTlVMTC4gKi8KKyAgICAgICAgfTsKK30KKworCisvKiBzdWJtaXQgZnVuY3Rpb24gZm9yIGNoYWluZWQgdXJicworICAgdGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gY29tcGxldGlvbiBjb250ZXh0IG9yIGZyb20gdXNlciBzcGFjZSEKKyAgIGVhcmx5ID0gMSAtPiBzdWJtaXQgaW4gZnJvbnQgb2YgY2hhaW4KKyovCitzdGF0aWMgaW50IGF1ZXJjaGFpbl9zdWJtaXRfdXJiX2xpc3QgKHBhdWVyY2hhaW5fdCBhY3AsIHN0cnVjdCB1cmIgKiB1cmIsIGludCBlYXJseSkKK3sKKyAgICAgICAgaW50IHJlc3VsdDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICAgICAgcGF1ZXJjaGFpbmVsZW1lbnRfdCBhY2VwID0gTlVMTDsKKworICAgICAgICBkYmcgKCJhdWVyY2hhaW5fc3VibWl0X3VyYiBjYWxsZWQiKTsKKworICAgICAgICAvKiB0cnkgdG8gZ2V0IGEgY2hhaW4gZWxlbWVudCAqLworICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSAoJmFjcC0+bG9jaywgZmxhZ3MpOworICAgICAgICBpZiAoIWxpc3RfZW1wdHkgKCZhY3AtPmZyZWVfbGlzdCkpIHsKKyAgICAgICAgICAgICAgICAvKiB5ZXM6IGdldCB0aGUgZW50cnkgKi8KKyAgICAgICAgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bXAgPSBhY3AtPmZyZWVfbGlzdC5uZXh0OworICAgICAgICAgICAgICAgIGxpc3RfZGVsICh0bXApOworICAgICAgICAgICAgICAgIGFjZXAgPSBsaXN0X2VudHJ5ICh0bXAsIGF1ZXJjaGFpbmVsZW1lbnRfdCwgbGlzdCk7CisgICAgICAgIH0KKyAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmFjcC0+bG9jaywgZmxhZ3MpOworCisgICAgICAgIC8qIGlmIG5vIGNoYWluIGVsZW1lbnQgYXZhaWxhYmxlOiByZXR1cm4gd2l0aCBlcnJvciAqLworICAgICAgICBpZiAoIWFjZXApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGZpbGwgaW4gdGhlIG5ldyBjaGFpbiBlbGVtZW50IHZhbHVlcyAqLworICAgICAgICBhY2VwLT5jaGFpbiAgICA9IGFjcDsKKyAgICAgICAgYWNlcC0+Y29udGV4dCAgPSB1cmItPmNvbnRleHQ7CisgICAgICAgIGFjZXAtPmNvbXBsZXRlID0gdXJiLT5jb21wbGV0ZTsKKyAgICAgICAgYWNlcC0+dXJicCAgICAgPSB1cmI7CisgICAgICAgIElOSVRfTElTVF9IRUFEICgmYWNlcC0+bGlzdCk7CisKKyAgICAgICAgLyogbW9kaWZ5IHVyYiAqLworICAgICAgICB1cmItPmNvbnRleHQgICA9IGFjZXA7CisgICAgICAgIHVyYi0+Y29tcGxldGUgID0gYXVlcmNoYWluX2NvbXBsZXRlOworICAgICAgICB1cmItPnN0YXR1cyAgICA9IC1FSU5QUk9HUkVTUzsgICAgLyogdXNiX3N1Ym1pdF91cmIgZG9lcyB0aGlzLCB0b28gKi8KKworICAgICAgICAvKiBhZGQgZWxlbWVudCB0byBjaGFpbiAtIG9yIHN0YXJ0IGl0IGltbWVkaWF0ZWx5ICovCisgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlICgmYWNwLT5sb2NrLCBmbGFncyk7CisgICAgICAgIGlmIChhY3AtPmFjdGl2ZSkgeworICAgICAgICAgICAgICAgIC8qIHRoZXJlIGlzIHRyYWZmaWMgaW4gdGhlIGNoYWluLCBzaW1wbGUgYWRkIGVsZW1lbnQgdG8gY2hhaW4gKi8KKwkJaWYgKGVhcmx5KSB7CisJCQlkYmcgKCJhZGRpbmcgbmV3IHVyYiB0byBoZWFkIG9mIGNoYWluIik7CisJCQlsaXN0X2FkZCAoJmFjZXAtPmxpc3QsICZhY3AtPndhaXRpbmdfbGlzdCk7CisJCX0gZWxzZSB7CisJCQlkYmcgKCJhZGRpbmcgbmV3IHVyYiB0byBlbmQgb2YgY2hhaW4iKTsKKwkJCWxpc3RfYWRkX3RhaWwgKCZhY2VwLT5saXN0LCAmYWNwLT53YWl0aW5nX2xpc3QpOworCQl9CisJCWFjZXAgPSBOVUxMOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIHRoZSBjaGFpbiBpcyBlbXB0eS4gUHJlcGFyZSByZXN0YXJ0ICovCisgICAgICAgICAgICAgICAgYWNwLT5hY3RpdmUgPSBhY2VwOworICAgICAgICB9CisgICAgICAgIC8qIFNwaW4gaGFzIHRvIGJlIHJlbW92ZWQgYmVmb3JlIHVzYl9zdWJtaXRfdXJiISAqLworICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlICgmYWNwLT5sb2NrLCBmbGFncyk7CisKKyAgICAgICAgLyogU3VibWl0IHVyYiBpZiBpbW1lZGlhdGUgcmVzdGFydCAqLworICAgICAgICBpZiAoYWNlcCkgeworICAgICAgICAgICAgICAgIGRiZygic3VibWl0dGluZyB1cmIgaW1tZWRpYXRlIik7CisJCXVyYi0+c3RhdHVzID0gMDsJLyogbmVlZGVkISAqLworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisgICAgICAgICAgICAgICAgLyogY2hlY2sgZm9yIHN1Ym1pdCBlcnJvcnMgKi8KKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1cmItPnN0YXR1cyA9IHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRiZygiYXVlcmNoYWluX3N1Ym1pdF91cmI6IHVzYl9zdWJtaXRfdXJiIHdpdGggZXJyb3IgY29kZSAlZCIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgZG8gZXJyb3IgaGFuZGxpbmcgdmlhIGNvbXBsZXRpb24gZnVuY3Rpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGF1ZXJjaGFpbl9jb21wbGV0ZSggdXJiLCBOVUxMKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMDsKK30KKworLyogc3VibWl0IGZ1bmN0aW9uIGZvciBjaGFpbmVkIHVyYnMKKyAgIHRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBmcm9tIGNvbXBsZXRpb24gY29udGV4dCBvciBmcm9tIHVzZXIgc3BhY2UhCisqLworc3RhdGljIGludCBhdWVyY2hhaW5fc3VibWl0X3VyYiAocGF1ZXJjaGFpbl90IGFjcCwgc3RydWN0IHVyYiAqIHVyYikKK3sKKwlyZXR1cm4gYXVlcmNoYWluX3N1Ym1pdF91cmJfbGlzdCAoYWNwLCB1cmIsIDApOworfQorCisvKiBjYW5jZWwgYW4gdXJiIHdoaWNoIGlzIHN1Ym1pdHRlZCB0byB0aGUgY2hhaW4KKyAgIHRoZSByZXN1bHQgaXMgMCBpZiB0aGUgdXJiIGlzIGNhbmNlbGxlZCwgb3IgLUVJTlBST0dSRVNTIGlmCisgICBVUkJfQVNZTkNfVU5MSU5LIGlzIHNldCBhbmQgdGhlIGZ1bmN0aW9uIGlzIHN1Y2Nlc3NmdWxseSBzdGFydGVkLgorKi8KK3N0YXRpYyBpbnQgYXVlcmNoYWluX3VubGlua191cmIgKHBhdWVyY2hhaW5fdCBhY3AsIHN0cnVjdCB1cmIgKiB1cmIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICAgICAgc3RydWN0IHVyYiAqIHVyYnA7CisgICAgICAgIHBhdWVyY2hhaW5lbGVtZW50X3QgYWNlcDsKKyAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCisgICAgICAgIGRiZyAoImF1ZXJjaGFpbl91bmxpbmtfdXJiIGNhbGxlZCIpOworCisgICAgICAgIC8qIHNlYXJjaCB0aGUgY2hhaW4gb2Ygd2FpdGluZyBlbGVtZW50cyAqLworICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSAoJmFjcC0+bG9jaywgZmxhZ3MpOworICAgICAgICBsaXN0X2Zvcl9lYWNoICh0bXAsICZhY3AtPndhaXRpbmdfbGlzdCkgeworICAgICAgICAgICAgICAgIGFjZXAgPSBsaXN0X2VudHJ5ICh0bXAsIGF1ZXJjaGFpbmVsZW1lbnRfdCwgbGlzdCk7CisgICAgICAgICAgICAgICAgaWYgKGFjZXAtPnVyYnAgPT0gdXJiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2RlbCAodG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVyYi0+Y29udGV4dCA9IGFjZXAtPmNvbnRleHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB1cmItPmNvbXBsZXRlID0gYWNlcC0+Y29tcGxldGU7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2FkZF90YWlsICgmYWNlcC0+bGlzdCwgJmFjcC0+ZnJlZV9saXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZhY3AtPmxvY2ssIGZsYWdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRiZyAoInVubGluayB3YWl0aW5nIHVyYiIpOworICAgICAgICAgICAgICAgICAgICAgICAgdXJiLT5zdGF0dXMgPSAtRU5PRU5UOworICAgICAgICAgICAgICAgICAgICAgICAgdXJiLT5jb21wbGV0ZSAodXJiLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKiBub3QgZm91bmQuICovCisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZhY3AtPmxvY2ssIGZsYWdzKTsKKworICAgICAgICAvKiBnZXQgdGhlIGFjdGl2ZSB1cmIgKi8KKyAgICAgICAgYWNlcCA9IGFjcC0+YWN0aXZlOworICAgICAgICBpZiAoYWNlcCkgeworICAgICAgICAgICAgICAgIHVyYnAgPSBhY2VwLT51cmJwOworCisgICAgICAgICAgICAgICAgLyogY2hlY2sgaWYgd2UgaGF2ZSB0byBjYW5jZWwgdGhlIGFjdGl2ZSB1cmIgKi8KKyAgICAgICAgICAgICAgICBpZiAodXJicCA9PSB1cmIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vdGUgdGhhdCB0aGVyZSBpcyBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gdGhlIGNoZWNrIGFib3ZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIHVubGluaygpIGNhbGwgYmVjYXVzZSBvZiBubyBsb2NrLiBUaGlzIHJhY2UgaXMgaGFybWxlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIHRoZSB1c2IgbW9kdWxlIHdpbGwgZGV0ZWN0IHRoZSB1bmxpbmsoKSBhZnRlciBjb21wbGV0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgV2UgY2FuJ3QgdXNlIHRoZSBhY3AtPmxvY2sgaGVyZSBiZWNhdXNlIHRoZSBjb21wbGV0aW9uIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50cyB0byBncmFiIGl0LgorCQkJKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGRiZyAoInVubGluayBhY3RpdmUgdXJiIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNiX3VubGlua191cmIgKHVyYnApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIG5vdCBmb3VuZCBhbnl3YXkKKyAgICAgICAgICAgLi4uIGlzIHNvbWUga2luZCBvZiBzdWNjZXNzCisJKi8KKyAgICAgICAgZGJnICgidXJiIHRvIHVubGluayBub3QgZm91bmQgaW4gY2hhaW4iKTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKy8qIGNhbmNlbCBhbGwgdXJicyB3aGljaCBhcmUgaW4gdGhlIGNoYWluLgorICAgdGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgb3IgY29tcGxldGlvbiBoYW5kbGVyLgorKi8KK3N0YXRpYyB2b2lkIGF1ZXJjaGFpbl91bmxpbmtfYWxsIChwYXVlcmNoYWluX3QgYWNwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAgICAgIHN0cnVjdCB1cmIgKiB1cmJwOworICAgICAgICBwYXVlcmNoYWluZWxlbWVudF90IGFjZXA7CisKKyAgICAgICAgZGJnICgiYXVlcmNoYWluX3VubGlua19hbGwgY2FsbGVkIik7CisKKyAgICAgICAgLyogY2xlYXIgdGhlIGNoYWluIG9mIHdhaXRpbmcgZWxlbWVudHMgKi8KKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUgKCZhY3AtPmxvY2ssIGZsYWdzKTsKKyAgICAgICAgd2hpbGUgKCFsaXN0X2VtcHR5ICgmYWNwLT53YWl0aW5nX2xpc3QpKSB7CisgICAgICAgICAgICAgICAgLyogZ2V0IHRoZSBuZXh0IGVudHJ5ICovCisgICAgICAgICAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqdG1wID0gYWNwLT53YWl0aW5nX2xpc3QubmV4dDsKKyAgICAgICAgICAgICAgICBsaXN0X2RlbCAodG1wKTsKKyAgICAgICAgICAgICAgICBhY2VwID0gbGlzdF9lbnRyeSAodG1wLCBhdWVyY2hhaW5lbGVtZW50X3QsIGxpc3QpOworICAgICAgICAgICAgICAgIHVyYnAgPSBhY2VwLT51cmJwOworICAgICAgICAgICAgICAgIHVyYnAtPmNvbnRleHQgPSBhY2VwLT5jb250ZXh0OworICAgICAgICAgICAgICAgIHVyYnAtPmNvbXBsZXRlID0gYWNlcC0+Y29tcGxldGU7CisgICAgICAgICAgICAgICAgbGlzdF9hZGRfdGFpbCAoJmFjZXAtPmxpc3QsICZhY3AtPmZyZWVfbGlzdCk7CisgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmFjcC0+bG9jaywgZmxhZ3MpOworICAgICAgICAgICAgICAgIGRiZyAoInVubGluayB3YWl0aW5nIHVyYiIpOworICAgICAgICAgICAgICAgIHVyYnAtPnN0YXR1cyA9IC1FTk9FTlQ7CisgICAgICAgICAgICAgICAgdXJicC0+Y29tcGxldGUgKHVyYnAsIE5VTEwpOworICAgICAgICAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlICgmYWNwLT5sb2NrLCBmbGFncyk7CisgICAgICAgIH0KKyAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmFjcC0+bG9jaywgZmxhZ3MpOworCisgICAgICAgIC8qIGNsZWFyIHRoZSBhY3RpdmUgdXJiICovCisgICAgICAgIGFjZXAgPSBhY3AtPmFjdGl2ZTsKKyAgICAgICAgaWYgKGFjZXApIHsKKyAgICAgICAgICAgICAgICB1cmJwID0gYWNlcC0+dXJicDsKKyAgICAgICAgICAgICAgICB1cmJwLT50cmFuc2Zlcl9mbGFncyAmPSB+VVJCX0FTWU5DX1VOTElOSzsKKyAgICAgICAgICAgICAgICBkYmcgKCJ1bmxpbmsgYWN0aXZlIHVyYiIpOworICAgICAgICAgICAgICAgIHVzYl9raWxsX3VyYiAodXJicCk7CisgICAgICAgIH0KK30KKworCisvKiBmcmVlIHRoZSBjaGFpbi4KKyAgIHRoaXMgZnVuY3Rpb24gbXVzdCBub3QgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IG9yIGNvbXBsZXRpb24gaGFuZGxlci4KKyovCitzdGF0aWMgdm9pZCBhdWVyY2hhaW5fZnJlZSAocGF1ZXJjaGFpbl90IGFjcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworICAgICAgICBwYXVlcmNoYWluZWxlbWVudF90IGFjZXA7CisKKyAgICAgICAgZGJnICgiYXVlcmNoYWluX2ZyZWUgY2FsbGVkIik7CisKKyAgICAgICAgLyogZmlyc3QsIGNhbmNlbCBhbGwgcGVuZGluZyB1cmJzICovCisgICAgICAgIGF1ZXJjaGFpbl91bmxpbmtfYWxsIChhY3ApOworCisgICAgICAgIC8qIGZyZWUgdGhlIGVsZW1lbnRzICovCisgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlICgmYWNwLT5sb2NrLCBmbGFncyk7CisgICAgICAgIHdoaWxlICghbGlzdF9lbXB0eSAoJmFjcC0+ZnJlZV9saXN0KSkgeworICAgICAgICAgICAgICAgIC8qIGdldCB0aGUgbmV4dCBlbnRyeSAqLworICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtcCA9IGFjcC0+ZnJlZV9saXN0Lm5leHQ7CisgICAgICAgICAgICAgICAgbGlzdF9kZWwgKHRtcCk7CisgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmFjcC0+bG9jaywgZmxhZ3MpOworCQlhY2VwID0gbGlzdF9lbnRyeSAodG1wLCBhdWVyY2hhaW5lbGVtZW50X3QsIGxpc3QpOworICAgICAgICAgICAgICAgIGtmcmVlIChhY2VwKTsKKwkgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlICgmYWNwLT5sb2NrLCBmbGFncyk7CisJfQorICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlICgmYWNwLT5sb2NrLCBmbGFncyk7Cit9CisKKworLyogSW5pdCB0aGUgY2hhaW4gY29udHJvbCBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyB2b2lkIGF1ZXJjaGFpbl9pbml0IChwYXVlcmNoYWluX3QgYWNwKQoreworICAgICAgICAvKiBpbml0IHRoZSBjaGFpbiBkYXRhIHN0cnVjdHVyZSAqLworICAgICAgICBhY3AtPmFjdGl2ZSA9IE5VTEw7CisJc3Bpbl9sb2NrX2luaXQgKCZhY3AtPmxvY2spOworICAgICAgICBJTklUX0xJU1RfSEVBRCAoJmFjcC0+d2FpdGluZ19saXN0KTsKKyAgICAgICAgSU5JVF9MSVNUX0hFQUQgKCZhY3AtPmZyZWVfbGlzdCk7Cit9CisKKy8qIHNldHVwIGEgY2hhaW4uCisgICBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlcmUgaXMgbm8gY29uY3VycmVuY3kgd2hpbGUgc2V0dGluZyB1cCB0aGUgY2hhaW4KKyAgIHJlcXVpcmVtZW50OiBhdWVyY2hhaW5faW5pdCgpCisqLworc3RhdGljIGludCBhdWVyY2hhaW5fc2V0dXAgKHBhdWVyY2hhaW5fdCBhY3AsIHVuc2lnbmVkIGludCBudW1FbGVtZW50cykKK3sKKyAgICAgICAgcGF1ZXJjaGFpbmVsZW1lbnRfdCBhY2VwOworCisgICAgICAgIGRiZyAoImF1ZXJjaGFpbl9zZXR1cCBjYWxsZWQgd2l0aCAlZCBlbGVtZW50cyIsIG51bUVsZW1lbnRzKTsKKworICAgICAgICAvKiBmaWxsIHRoZSBsaXN0IG9mIGZyZWUgZWxlbWVudHMgKi8KKyAgICAgICAgZm9yICg7bnVtRWxlbWVudHM7IG51bUVsZW1lbnRzLS0pIHsKKyAgICAgICAgICAgICAgICBhY2VwID0gKHBhdWVyY2hhaW5lbGVtZW50X3QpIGttYWxsb2MgKHNpemVvZiAoYXVlcmNoYWluZWxlbWVudF90KSwgR0ZQX0tFUk5FTCk7CisgICAgICAgICAgICAgICAgaWYgKCFhY2VwKQorCQkJZ290byBhY19mYWlsOworCQltZW1zZXQgKGFjZXAsIDAsIHNpemVvZiAoYXVlcmNoYWluZWxlbWVudF90KSk7CisgICAgICAgICAgICAgICAgSU5JVF9MSVNUX0hFQUQgKCZhY2VwLT5saXN0KTsKKyAgICAgICAgICAgICAgICBsaXN0X2FkZF90YWlsICgmYWNlcC0+bGlzdCwgJmFjcC0+ZnJlZV9saXN0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKworYWNfZmFpbDovKiBmcmVlIHRoZSBlbGVtZW50cyAqLworICAgICAgICB3aGlsZSAoIWxpc3RfZW1wdHkgKCZhY3AtPmZyZWVfbGlzdCkpIHsKKyAgICAgICAgICAgICAgICAvKiBnZXQgdGhlIG5leHQgZW50cnkgKi8KKyAgICAgICAgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bXAgPSBhY3AtPmZyZWVfbGlzdC5uZXh0OworICAgICAgICAgICAgICAgIGxpc3RfZGVsICh0bXApOworICAgICAgICAgICAgICAgIGFjZXAgPSBsaXN0X2VudHJ5ICh0bXAsIGF1ZXJjaGFpbmVsZW1lbnRfdCwgbGlzdCk7CisgICAgICAgICAgICAgICAga2ZyZWUgKGFjZXApOworICAgICAgICB9CisgICAgICAgIHJldHVybiAtRU5PTUVNOworfQorCisKKy8qIGNvbXBsZXRpb24gaGFuZGxlciBmb3Igc3luY2hyb25vdXMgY2hhaW5lZCBVUkJzICovCitzdGF0aWMgdm9pZCBhdWVyY2hhaW5fYmxvY2tpbmdfY29tcGxldGlvbiAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlwYXVlcmNoYWluX2Noc190IHBjaHMgPSAocGF1ZXJjaGFpbl9jaHNfdCl1cmItPmNvbnRleHQ7CisJcGNocy0+ZG9uZSA9IDE7CisJd21iKCk7CisJd2FrZV91cCAoJnBjaHMtPndxaCk7Cit9CisKKworLyogU3RhcnRzIGNoYWluZWQgdXJiIGFuZCB3YWl0cyBmb3IgY29tcGxldGlvbiBvciB0aW1lb3V0ICovCitzdGF0aWMgaW50IGF1ZXJjaGFpbl9zdGFydF93YWl0X3VyYiAocGF1ZXJjaGFpbl90IGFjcCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgdGltZW91dCwgaW50KiBhY3R1YWxfbGVuZ3RoKQoreworCWF1ZXJjaGFpbl9jaHNfdCBjaHM7CisJaW50IHN0YXR1czsKKworCWRiZyAoImF1ZXJjaGFpbl9zdGFydF93YWl0X3VyYiBjYWxsZWQiKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkICgmY2hzLndxaCk7CisJY2hzLmRvbmUgPSAwOworCisJdXJiLT5jb250ZXh0ID0gJmNoczsKKwlzdGF0dXMgPSBhdWVyY2hhaW5fc3VibWl0X3VyYiAoYWNwLCB1cmIpOworCWlmIChzdGF0dXMpCisJCS8qIHNvbWV0aGluZyB3ZW50IHdyb25nICovCisJCXJldHVybiBzdGF0dXM7CisKKwl0aW1lb3V0ID0gd2FpdF9ldmVudF90aW1lb3V0KGNocy53cWgsIGNocy5kb25lLCB0aW1lb3V0KTsKKworCWlmICghdGltZW91dCAmJiAhY2hzLmRvbmUpIHsKKwkJaWYgKHVyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgewkvKiBObyBjYWxsYmFjaz8hISAqLworCQkJZGJnICgiYXVlcmNoYWluX3N0YXJ0X3dhaXRfdXJiOiByYWNlZCB0aW1lb3V0Iik7CisJCQlzdGF0dXMgPSB1cmItPnN0YXR1czsKKwkJfSBlbHNlIHsKKwkJCWRiZyAoImF1ZXJjaGFpbl9zdGFydF93YWl0X3VyYjogdGltZW91dCIpOworCQkJYXVlcmNoYWluX3VubGlua191cmIgKGFjcCwgdXJiKTsgIC8qIHJlbW92ZSB1cmIgc2FmZWx5ICovCisJCQlzdGF0dXMgPSAtRVRJTUVET1VUOworCQl9CisJfSBlbHNlCisJCXN0YXR1cyA9IHVyYi0+c3RhdHVzOworCisJaWYgKGFjdHVhbF9sZW5ndGgpCisJCSphY3R1YWxfbGVuZ3RoID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCisgIAlyZXR1cm4gc3RhdHVzOworfQorCisKKy8qIGF1ZXJjaGFpbl9jb250cm9sX21zZyAtIEJ1aWxkcyBhIGNvbnRyb2wgdXJiLCBzZW5kcyBpdCBvZmYgYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uCisgICBhY3A6IHBvaW50ZXIgdG8gdGhlIGF1ZXJjaGFpbgorICAgZGV2OiBwb2ludGVyIHRvIHRoZSB1c2IgZGV2aWNlIHRvIHNlbmQgdGhlIG1lc3NhZ2UgdG8KKyAgIHBpcGU6IGVuZHBvaW50ICJwaXBlIiB0byBzZW5kIHRoZSBtZXNzYWdlIHRvCisgICByZXF1ZXN0OiBVU0IgbWVzc2FnZSByZXF1ZXN0IHZhbHVlCisgICByZXF1ZXN0dHlwZTogVVNCIG1lc3NhZ2UgcmVxdWVzdCB0eXBlIHZhbHVlCisgICB2YWx1ZTogVVNCIG1lc3NhZ2UgdmFsdWUKKyAgIGluZGV4OiBVU0IgbWVzc2FnZSBpbmRleCB2YWx1ZQorICAgZGF0YTogcG9pbnRlciB0byB0aGUgZGF0YSB0byBzZW5kCisgICBzaXplOiBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGRhdGEgdG8gc2VuZAorICAgdGltZW91dDogdGltZSB0byB3YWl0IGZvciB0aGUgbWVzc2FnZSB0byBjb21wbGV0ZSBiZWZvcmUgdGltaW5nIG91dCAoaWYgMCB0aGUgd2FpdCBpcyBmb3JldmVyKQorCisgICBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgc2ltcGxlIGNvbnRyb2wgbWVzc2FnZSB0byBhIHNwZWNpZmllZCBlbmRwb2ludAorICAgYW5kIHdhaXRzIGZvciB0aGUgbWVzc2FnZSB0byBjb21wbGV0ZSwgb3IgdGltZW91dC4KKworICAgSWYgc3VjY2Vzc2Z1bCwgaXQgcmV0dXJucyB0aGUgdHJhbnNmZXJyZWQgbGVuZ3RoLCBvdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCisKKyAgIERvbid0IHVzZSB0aGlzIGZ1bmN0aW9uIGZyb20gd2l0aGluIGFuIGludGVycnVwdCBjb250ZXh0LCBsaWtlIGEKKyAgIGJvdHRvbSBoYWxmIGhhbmRsZXIuICBJZiB5b3UgbmVlZCBhbiBhc3luY2hyb25vdXMgbWVzc2FnZSwgb3IgbmVlZCB0byBzZW5kCisgICBhIG1lc3NhZ2UgZnJvbSB3aXRoaW4gaW50ZXJydXB0IGNvbnRleHQsIHVzZSBhdWVyY2hhaW5fc3VibWl0X3VyYigpCisqLworc3RhdGljIGludCBhdWVyY2hhaW5fY29udHJvbF9tc2cgKHBhdWVyY2hhaW5fdCBhY3AsIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBlLCBfX3U4IHJlcXVlc3QsIF9fdTggcmVxdWVzdHR5cGUsCisJCQkgICAgICAgICAgX191MTYgdmFsdWUsIF9fdTE2IGluZGV4LCB2b2lkICpkYXRhLCBfX3UxNiBzaXplLCBpbnQgdGltZW91dCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmRyOworCXN0cnVjdCB1cmIgKnVyYjsKKyAgICAgICAgaW50IGxlbmd0aDsKKworICAgICAgICBkYmcgKCJhdWVyY2hhaW5fY29udHJvbF9tc2ciKTsKKyAgICAgICAgZHIgPSBrbWFsbG9jIChzaXplb2YgKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRyKQorCQlyZXR1cm4gLUVOT01FTTsKKwl1cmIgPSB1c2JfYWxsb2NfdXJiICgwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVyYikgeworICAgICAgICAJa2ZyZWUgKGRyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisgICAgICAgIH0KKworCWRyLT5iUmVxdWVzdFR5cGUgPSByZXF1ZXN0dHlwZTsKKwlkci0+YlJlcXVlc3QgPSByZXF1ZXN0OworCWRyLT53VmFsdWUgID0gY3B1X3RvX2xlMTYgKHZhbHVlKTsKKwlkci0+d0luZGV4ICA9IGNwdV90b19sZTE2IChpbmRleCk7CisJZHItPndMZW5ndGggPSBjcHVfdG9fbGUxNiAoc2l6ZSk7CisKKwl1c2JfZmlsbF9jb250cm9sX3VyYiAodXJiLCBkZXYsIHBpcGUsICh1bnNpZ25lZCBjaGFyKilkciwgZGF0YSwgc2l6ZSwgICAgLyogYnVpbGQgdXJiICovCisJCSAgICAgICAgICBhdWVyY2hhaW5fYmxvY2tpbmdfY29tcGxldGlvbiwgTlVMTCk7CisJcmV0ID0gYXVlcmNoYWluX3N0YXJ0X3dhaXRfdXJiIChhY3AsIHVyYiwgdGltZW91dCwgJmxlbmd0aCk7CisKKwl1c2JfZnJlZV91cmIgKHVyYik7CisJa2ZyZWUgKGRyKTsKKworICAgICAgICBpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwllbHNlCisJCXJldHVybiBsZW5ndGg7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEJ1ZmZlciBMaXN0IGhlbHBlciBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIGZyZWUgYSBzaW5nbGUgYXVlcmJ1ZiAqLworc3RhdGljIHZvaWQgYXVlcmJ1Zl9mcmVlIChwYXVlcmJ1Zl90IGJwKQoreworCWlmIChicC0+YnVmcCkgeworCQlrZnJlZSAoYnAtPmJ1ZnApOworCX0KKwlpZiAoYnAtPmRyKSB7CisJCWtmcmVlIChicC0+ZHIpOworCX0KKwlpZiAoYnAtPnVyYnApIHsKKwkJdXNiX2ZyZWVfdXJiIChicC0+dXJicCk7CisJfQorCWtmcmVlIChicCk7Cit9CisKKy8qIGZyZWUgdGhlIGJ1ZmZlcnMgZnJvbSBhbiBhdWVyYnVmIGxpc3QgKi8KK3N0YXRpYyB2b2lkIGF1ZXJidWZfZnJlZV9saXN0IChzdHJ1Y3QgbGlzdF9oZWFkICpxKQoreworICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlwYXVlcmJ1Zl90IGJwOworCisJZGJnICgiYXVlcmJ1Zl9mcmVlX2xpc3QiKTsKKwlmb3IgKHAgPSBxLT5uZXh0OyBwICE9IHE7KSB7CisJCWJwID0gbGlzdF9lbnRyeSAocCwgYXVlcmJ1Zl90LCBidWZmX2xpc3QpOworCQl0bXAgPSBwLT5uZXh0OworCQlsaXN0X2RlbCAocCk7CisJCXAgPSB0bXA7CisJCWF1ZXJidWZfZnJlZSAoYnApOworCX0KK30KKworLyogaW5pdCB0aGUgbWVtYmVycyBvZiBhIGxpc3QgY29udHJvbCBibG9jayAqLworc3RhdGljIHZvaWQgYXVlcmJ1Zl9pbml0IChwYXVlcmJ1ZmN0bF90IGJjcCkKK3sKKwlkYmcgKCJhdWVyYnVmX2luaXQiKTsKKwlzcGluX2xvY2tfaW5pdCAoJmJjcC0+bG9jayk7CisgICAgICAgIElOSVRfTElTVF9IRUFEICgmYmNwLT5mcmVlX2J1ZmZfbGlzdCk7CisgICAgICAgIElOSVRfTElTVF9IRUFEICgmYmNwLT5yZWNfYnVmZl9saXN0KTsKK30KKworLyogZnJlZSBhbGwgYnVmZmVycyBmcm9tIGFuIGF1ZXJidWYgY2hhaW4gKi8KK3N0YXRpYyB2b2lkIGF1ZXJidWZfZnJlZV9idWZmZXJzIChwYXVlcmJ1ZmN0bF90IGJjcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWRiZyAoImF1ZXJidWZfZnJlZV9idWZmZXJzIik7CisKKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUgKCZiY3AtPmxvY2ssIGZsYWdzKTsKKworCWF1ZXJidWZfZnJlZV9saXN0ICgmYmNwLT5mcmVlX2J1ZmZfbGlzdCk7CisJYXVlcmJ1Zl9mcmVlX2xpc3QgKCZiY3AtPnJlY19idWZmX2xpc3QpOworCisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZiY3AtPmxvY2ssIGZsYWdzKTsKK30KKworLyogc2V0dXAgYSBsaXN0IG9mIGJ1ZmZlcnMgKi8KKy8qIHJlcXVpcmVtZW50OiBhdWVyYnVmX2luaXQoKSAqLworc3RhdGljIGludCBhdWVyYnVmX3NldHVwIChwYXVlcmJ1ZmN0bF90IGJjcCwgdW5zaWduZWQgaW50IG51bUVsZW1lbnRzLCB1bnNpZ25lZCBpbnQgYnVmc2l6ZSkKK3sKKyAgICAgICAgcGF1ZXJidWZfdCBiZXAgPSBOVUxMOworCisgICAgICAgIGRiZyAoImF1ZXJidWZfc2V0dXAgY2FsbGVkIHdpdGggJWQgZWxlbWVudHMgb2YgJWQgYnl0ZXMiLCBudW1FbGVtZW50cywgYnVmc2l6ZSk7CisKKyAgICAgICAgLyogZmlsbCB0aGUgbGlzdCBvZiBmcmVlIGVsZW1lbnRzICovCisgICAgICAgIGZvciAoO251bUVsZW1lbnRzOyBudW1FbGVtZW50cy0tKSB7CisgICAgICAgICAgICAgICAgYmVwID0gKHBhdWVyYnVmX3QpIGttYWxsb2MgKHNpemVvZiAoYXVlcmJ1Zl90KSwgR0ZQX0tFUk5FTCk7CisgICAgICAgICAgICAgICAgaWYgKCFiZXApCisJCQlnb3RvIGJsX2ZhaWw7CisJICAgICAgICBtZW1zZXQgKGJlcCwgMCwgc2l6ZW9mIChhdWVyYnVmX3QpKTsKKyAgICAgICAgICAgICAgICBiZXAtPmxpc3QgPSBiY3A7CisgICAgICAgICAgICAgICAgSU5JVF9MSVNUX0hFQUQgKCZiZXAtPmJ1ZmZfbGlzdCk7CisgICAgICAgICAgICAgICAgYmVwLT5idWZwID0gKGNoYXIgKikga21hbGxvYyAoYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7CisgICAgICAgICAgICAgICAgaWYgKCFiZXAtPmJ1ZnApCisJCQlnb3RvIGJsX2ZhaWw7CisgICAgICAgICAgICAgICAgYmVwLT5kciA9IChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopIGttYWxsb2MgKHNpemVvZiAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksIEdGUF9LRVJORUwpOworICAgICAgICAgICAgICAgIGlmICghYmVwLT5kcikKKwkJCWdvdG8gYmxfZmFpbDsKKyAgICAgICAgICAgICAgICBiZXAtPnVyYnAgPSB1c2JfYWxsb2NfdXJiICgwLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgICAgICAgICBpZiAoIWJlcC0+dXJicCkKKwkJCWdvdG8gYmxfZmFpbDsKKyAgICAgICAgICAgICAgICBsaXN0X2FkZF90YWlsICgmYmVwLT5idWZmX2xpc3QsICZiY3AtPmZyZWVfYnVmZl9saXN0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKworYmxfZmFpbDovKiBub3QgZW5vdWdoIG1lbW9yeS4gRnJlZSBhbGxvY2F0ZWQgZWxlbWVudHMgKi8KKyAgICAgICAgZGJnICgiYXVlcmJ1Zl9zZXR1cDogbm8gbW9yZSBtZW1vcnkiKTsKKwlrZnJlZShiZXApOworICAgICAgICBhdWVyYnVmX2ZyZWVfYnVmZmVycyAoYmNwKTsKKyAgICAgICAgcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qIGluc2VydCBhIHVzZWQgYnVmZmVyIGludG8gdGhlIGZyZWUgbGlzdCAqLworc3RhdGljIHZvaWQgYXVlcmJ1Zl9yZWxlYXNlYnVmKCBwYXVlcmJ1Zl90IGJwKQoreworICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworICAgICAgICBwYXVlcmJ1ZmN0bF90IGJjcCA9IGJwLT5saXN0OworCWJwLT5yZXRyaWVzID0gMDsKKworICAgICAgICBkYmcgKCJhdWVyYnVmX3JlbGVhc2VidWYgY2FsbGVkIik7CisgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlICgmYmNwLT5sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCAoJmJwLT5idWZmX2xpc3QsICZiY3AtPmZyZWVfYnVmZl9saXN0KTsKKyAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmJjcC0+bG9jaywgZmxhZ3MpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBDb21wbGV0aW9uIGhhbmRsZXJzICovCisKKy8qIFZhbHVlcyBvZiB1cmItPnN0YXR1cyBvciByZXN1bHRzIG9mIHVzYl9zdWJtaXRfdXJiKCk6CiswCQlJbml0aWFsLCBPSworLUVJTlBST0dSRVNTCWR1cmluZyBzdWJtaXNzaW9uIHVudGlsIGVuZAorLUVOT0VOVAkJaWYgdXJiIGlzIHVubGlua2VkCistRVRJTUVET1VUCVRyYW5zZmVyIHRpbWVkIG91dCwgTkFLCistRU5PTUVNCQlNZW1vcnkgT3ZlcmZsb3cKKy1FTk9ERVYJCVNwZWNpZmllZCBVU0ItZGV2aWNlIG9yIGJ1cyBkb2Vzbid0IGV4aXN0CistRU5YSU8JCVVSQiBhbHJlYWR5IHF1ZXVlZAorLUVJTlZBTAkJYSkgSW52YWxpZCB0cmFuc2ZlciB0eXBlIHNwZWNpZmllZCAob3Igbm90IHN1cHBvcnRlZCkKKwkJYikgSW52YWxpZCBpbnRlcnJ1cHQgaW50ZXJ2YWwgKDBuMjU2KQorLUVBR0FJTgkJYSkgU3BlY2lmaWVkIElTTyBzdGFydCBmcmFtZSB0b28gZWFybHkKKwkJYikgKHVzaW5nIElTTy1BU0FQKSBUb28gbXVjaCBzY2hlZHVsZWQgZm9yIHRoZSBmdXR1cmUgd2FpdCBzb21lIHRpbWUgYW5kIHRyeSBhZ2Fpbi4KKy1FRkJJRwkJVG9vIG11Y2ggSVNPIGZyYW1lcyByZXF1ZXN0ZWQgKGN1cnJlbnRseSB1aGNpOTAwKQorLUVQSVBFCQlTcGVjaWZpZWQgcGlwZS1oYW5kbGUvRW5kcG9pbnQgaXMgYWxyZWFkeSBzdGFsbGVkCistRU1TR1NJWkUJRW5kcG9pbnQgbWVzc2FnZSBzaXplIGlzIHplcm8sIGRvIGludGVyZmFjZS9hbHRlcm5hdGUgc2V0dGluZworLUVQUk9UTwkJYSkgQml0c3R1ZmYgZXJyb3IKKwkJYikgVW5rbm93biBVU0IgZXJyb3IKKy1FSUxTRVEJCUNSQyBtaXNtYXRjaAorLUVOT1NSCQlCdWZmZXIgZXJyb3IKKy1FUkVNT1RFSU8JU2hvcnQgcGFja2V0IGRldGVjdGVkCistRVhERVYJCUlTTyB0cmFuc2ZlciBvbmx5IHBhcnRpYWxseSBjb21wbGV0ZWQgbG9vayBhdCBpbmRpdmlkdWFsIGZyYW1lIHN0YXR1cyBmb3IgZGV0YWlscworLUVJTlZBTAkJSVNPIG1hZG5lc3MsIGlmIHRoaXMgaGFwcGVuczogTG9nIG9mZiBhbmQgZ28gaG9tZQorLUVPVkVSRkxPVwliYWJibGUKKyovCisKKy8qIGNoZWNrIGlmIGEgc3RhdHVzIGNvZGUgYWxsb3dzIGEgcmV0cnkgKi8KK3N0YXRpYyBpbnQgYXVlcnN3YWxkX3N0YXR1c19yZXRyeSAoaW50IHN0YXR1cykKK3sKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgMDoKKwljYXNlIC1FVElNRURPVVQ6CisJY2FzZSAtRU9WRVJGTE9XOgorCWNhc2UgLUVBR0FJTjoKKwljYXNlIC1FUElQRToKKwljYXNlIC1FUFJPVE86CisJY2FzZSAtRUlMU0VROgorCWNhc2UgLUVOT1NSOgorCWNhc2UgLUVSRU1PVEVJTzoKKwkJcmV0dXJuIDE7IC8qIGRvIGEgcmV0cnkgKi8KKwl9CisJcmV0dXJuIDA7CS8qIG5vIHJldHJ5IHBvc3NpYmxlICovCit9CisKKy8qIENvbXBsZXRpb24gb2YgYXN5bmNocm9ub3VzIHdyaXRlIGJsb2NrICovCitzdGF0aWMgdm9pZCBhdWVyY2hhcl9jdHJsd3JpdGVfY29tcGxldGUgKHN0cnVjdCB1cmIgKiB1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXBhdWVyYnVmX3QgYnAgPSAocGF1ZXJidWZfdCkgdXJiLT5jb250ZXh0OworCXBhdWVyc3dhbGRfdCBjcCA9ICgocGF1ZXJzd2FsZF90KSgoY2hhciAqKShicC0+bGlzdCktKHVuc2lnbmVkIGxvbmcpKCYoKHBhdWVyc3dhbGRfdCkwKS0+YnVmY3RsKSkpOworCWRiZyAoImF1ZXJjaGFyX2N0cmx3cml0ZV9jb21wbGV0ZSBjYWxsZWQiKTsKKworCS8qIHJldXNlIHRoZSBidWZmZXIgKi8KKwlhdWVyYnVmX3JlbGVhc2VidWYgKGJwKTsKKwkvKiBXYWtlIHVwIGFsbCBwcm9jZXNzZXMgd2FpdGluZyBmb3IgYSBidWZmZXIgKi8KKwl3YWtlX3VwICgmY3AtPmJ1ZmZlcndhaXQpOworfQorCisvKiBDb21wbGV0aW9uIGhhbmRsZXIgZm9yIGR1bW15IHJldHJ5IHBhY2tldCAqLworc3RhdGljIHZvaWQgYXVlcnN3YWxkX2N0cmxyZWFkX3dyZXRjb21wbGV0ZSAoc3RydWN0IHVyYiAqIHVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisgICAgICAgIHBhdWVyYnVmX3QgYnAgPSAocGF1ZXJidWZfdCkgdXJiLT5jb250ZXh0OworICAgICAgICBwYXVlcnN3YWxkX3QgY3A7CisJaW50IHJldDsKKyAgICAgICAgZGJnICgiYXVlcnN3YWxkX2N0cmxyZWFkX3dyZXRjb21wbGV0ZSBjYWxsZWQiKTsKKyAgICAgICAgZGJnICgiY29tcGxldGUgd2l0aCBzdGF0dXM6ICVkIiwgdXJiLT5zdGF0dXMpOworCWNwID0gKChwYXVlcnN3YWxkX3QpKChjaGFyICopKGJwLT5saXN0KS0odW5zaWduZWQgbG9uZykoJigocGF1ZXJzd2FsZF90KTApLT5idWZjdGwpKSk7CisKKwkvKiBjaGVjayBpZiBpdCBpcyBwb3NzaWJsZSB0byBhZHZhbmNlICovCisJaWYgKCFhdWVyc3dhbGRfc3RhdHVzX3JldHJ5ICh1cmItPnN0YXR1cykgfHwgIWNwLT51c2JkZXYpIHsKKwkJLyogcmV1c2UgdGhlIGJ1ZmZlciAqLworCQllcnIgKCJjb250cm9sIGR1bW15OiB0cmFuc21pc3Npb24gZXJyb3IgJWQsIGNhbiBub3QgcmV0cnkiLCB1cmItPnN0YXR1cyk7CisJCWF1ZXJidWZfcmVsZWFzZWJ1ZiAoYnApOworCQkvKiBXYWtlIHVwIGFsbCBwcm9jZXNzZXMgd2FpdGluZyBmb3IgYSBidWZmZXIgKi8KKwkJd2FrZV91cCAoJmNwLT5idWZmZXJ3YWl0KTsKKwkJcmV0dXJuOworCX0KKworCS8qIGZpbGwgdGhlIGNvbnRyb2wgbWVzc2FnZSAqLworCWJwLT5kci0+YlJlcXVlc3RUeXBlID0gQVVUX1JSRVE7CisJYnAtPmRyLT5iUmVxdWVzdCAgICAgPSBBVVZfUkJMT0NLOworCWJwLT5kci0+d0xlbmd0aCAgICAgID0gYnAtPmRyLT53VmFsdWU7CS8qIHRlbXBvcmFyeSBzdG9yZWQgKi8KKwlicC0+ZHItPndWYWx1ZSAgICAgICA9IGNwdV90b19sZTE2ICgxKTsJLyogUmV0cnkgRmxhZyAqLworCS8qIGJwLT5kci0+aW5kZXggICAgPSBjaGFubmVsIGlkOyAgICAgICAgICByZW1haW5zICovCisJdXNiX2ZpbGxfY29udHJvbF91cmIgKGJwLT51cmJwLCBjcC0+dXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUgKGNwLT51c2JkZXYsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciopYnAtPmRyLCBicC0+YnVmcCwgbGUxNl90b19jcHUgKGJwLT5kci0+d0xlbmd0aCksCisJCSAgICAgICAgICBhdWVyc3dhbGRfY3RybHJlYWRfY29tcGxldGUsYnApOworCisJLyogc3VibWl0IHRoZSBjb250cm9sIG1zZyBhcyBuZXh0IHBha2V0ICovCisJcmV0ID0gYXVlcmNoYWluX3N1Ym1pdF91cmJfbGlzdCAoJmNwLT5jb250cm9sY2hhaW4sIGJwLT51cmJwLCAxKTsKKyAgICAgICAgaWYgKHJldCkgeworICAgICAgICAJZGJnICgiYXVlcnN3YWxkX2N0cmxyZWFkX2NvbXBsZXRlOiBub256ZXJvIHJlc3VsdCBvZiBhdWVyY2hhaW5fc3VibWl0X3VyYl9saXN0ICVkIiwgcmV0KTsKKyAgICAgICAgCWJwLT51cmJwLT5zdGF0dXMgPSByZXQ7CisgICAgICAgIAlhdWVyc3dhbGRfY3RybHJlYWRfY29tcGxldGUgKGJwLT51cmJwLCBOVUxMKTsKKyAgICAJfQorfQorCisvKiBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIHJlY2VpdmluZyBvZiBjb250cm9sIG1lc3NhZ2VzICovCitzdGF0aWMgdm9pZCBhdWVyc3dhbGRfY3RybHJlYWRfY29tcGxldGUgKHN0cnVjdCB1cmIgKiB1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworICAgICAgICB1bnNpZ25lZCBpbnQgIHNlcnZpY2VpZDsKKyAgICAgICAgcGF1ZXJzd2FsZF90ICBjcDsKKyAgICAgICAgcGF1ZXJzY29uX3QgICBzY3A7CisgICAgICAgIHBhdWVyYnVmX3QgICAgYnAgID0gKHBhdWVyYnVmX3QpIHVyYi0+Y29udGV4dDsKKwlpbnQgcmV0OworICAgICAgICBkYmcgKCJhdWVyc3dhbGRfY3RybHJlYWRfY29tcGxldGUgY2FsbGVkIik7CisKKwljcCA9ICgocGF1ZXJzd2FsZF90KSgoY2hhciAqKShicC0+bGlzdCktKHVuc2lnbmVkIGxvbmcpKCYoKHBhdWVyc3dhbGRfdCkwKS0+YnVmY3RsKSkpOworCisJLyogY2hlY2sgaWYgdGhlcmUgaXMgdmFsaWQgZGF0YSBpbiB0aGlzIHVyYiAqLworICAgICAgICBpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnICgiY29tcGxldGUgd2l0aCBub24temVybyBzdGF0dXM6ICVkIiwgdXJiLT5zdGF0dXMpOworCQkvKiBzaG91bGQgd2UgZG8gYSByZXRyeT8gKi8KKwkJaWYgKCFhdWVyc3dhbGRfc3RhdHVzX3JldHJ5ICh1cmItPnN0YXR1cykKKwkJIHx8ICFjcC0+dXNiZGV2CisJCSB8fCAoY3AtPnZlcnNpb24gPCBBVVZfUkVUUlkpCisgICAgICAgICAgICAgICAgIHx8IChicC0+cmV0cmllcyA+PSBBVV9SRVRSSUVTKSkgeworCQkJLyogcmV1c2UgdGhlIGJ1ZmZlciAqLworCQkJZXJyICgiY29udHJvbCByZWFkOiB0cmFuc21pc3Npb24gZXJyb3IgJWQsIGNhbiBub3QgcmV0cnkiLCB1cmItPnN0YXR1cyk7CisJCQlhdWVyYnVmX3JlbGVhc2VidWYgKGJwKTsKKwkJCS8qIFdha2UgdXAgYWxsIHByb2Nlc3NlcyB3YWl0aW5nIGZvciBhIGJ1ZmZlciAqLworCQkJd2FrZV91cCAoJmNwLT5idWZmZXJ3YWl0KTsKKwkJCXJldHVybjsKKwkJfQorCQlicC0+cmV0cmllcysrOworCQlkYmcgKCJSZXRyeSBjb3VudCA9ICVkIiwgYnAtPnJldHJpZXMpOworCQkvKiBzZW5kIGEgbG9uZyBkdW1teSBjb250cm9sLXdyaXRlLW1lc3NhZ2UgdG8gYWxsb3cgZGV2aWNlIGZpcm13YXJlIHRvIHJlYWN0ICovCisJCWJwLT5kci0+YlJlcXVlc3RUeXBlID0gQVVUX1dSRVE7CisJCWJwLT5kci0+YlJlcXVlc3QgICAgID0gQVVWX0RVTU1ZOworCQlicC0+ZHItPndWYWx1ZSAgICAgICA9IGJwLT5kci0+d0xlbmd0aDsgLyogdGVtcG9yYXJ5IHN0b3JhZ2UgKi8KKwkJLy8gYnAtPmRyLT53SW5kZXggICAgY2hhbm5lbCBJRCByZW1haW5zCisJCWJwLT5kci0+d0xlbmd0aCAgICAgID0gY3B1X3RvX2xlMTYgKDMyKTsgLyogPj0gOCBieXRlcyAqLworCQl1c2JfZmlsbF9jb250cm9sX3VyYiAoYnAtPnVyYnAsIGNwLT51c2JkZXYsIHVzYl9zbmRjdHJscGlwZSAoY3AtPnVzYmRldiwgMCksCisgIAkJCSh1bnNpZ25lZCBjaGFyKilicC0+ZHIsIGJwLT5idWZwLCAzMiwKKwkgICAJCWF1ZXJzd2FsZF9jdHJscmVhZF93cmV0Y29tcGxldGUsYnApOworCisJCS8qIHN1Ym1pdCB0aGUgY29udHJvbCBtc2cgYXMgbmV4dCBwYWtldCAqLworICAgICAgIAkJcmV0ID0gYXVlcmNoYWluX3N1Ym1pdF91cmJfbGlzdCAoJmNwLT5jb250cm9sY2hhaW4sIGJwLT51cmJwLCAxKTsKKyAgICAgICAJCWlmIChyZXQpIHsKKyAgICAgICAgICAgICAgIAkJZGJnICgiYXVlcnN3YWxkX2N0cmxyZWFkX2NvbXBsZXRlOiBub256ZXJvIHJlc3VsdCBvZiBhdWVyY2hhaW5fc3VibWl0X3VyYl9saXN0ICVkIiwgcmV0KTsKKyAgICAgICAgICAgICAgIAkJYnAtPnVyYnAtPnN0YXR1cyA9IHJldDsKKyAgICAgICAgICAgICAgIAkJYXVlcnN3YWxkX2N0cmxyZWFkX3dyZXRjb21wbGV0ZSAoYnAtPnVyYnAsIHJlZ3MpOworCQl9CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLyogZ2V0IHRoZSBhY3R1YWwgYnl0ZWNvdW50IChpbmNsLiBoZWFkZXJieXRlKSAqLworICAgICAgICBicC0+bGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworICAgICAgICBzZXJ2aWNlaWQgPSBicC0+YnVmcFswXSAmIEFVSF9UWVBFTUFTSzsKKyAgICAgICAgZGJnICgiUGFrZXQgd2l0aCBzZXJ2aWNlaWQgJWQgYW5kICVkIGJ5dGVzIHJlY2VpdmVkIiwgc2VydmljZWlkLCBicC0+bGVuKTsKKworICAgICAgICAvKiBkaXNwYXRjaCB0aGUgcGFrZXQgKi8KKyAgICAgICAgc2NwID0gY3AtPnNlcnZpY2VzW3NlcnZpY2VpZF07CisgICAgICAgIGlmIChzY3ApIHsKKyAgICAgICAgICAgICAgICAvKiBsb29rLCBNYSwgYSBsaXN0ZW5lciEgKi8KKyAgICAgICAgICAgICAgICBzY3AtPmRpc3BhdGNoIChzY3AsIGJwKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHJlbGVhc2UgdGhlIHBha2V0ICovCisgICAgICAgIGF1ZXJidWZfcmVsZWFzZWJ1ZiAoYnApOworCS8qIFdha2UgdXAgYWxsIHByb2Nlc3NlcyB3YWl0aW5nIGZvciBhIGJ1ZmZlciAqLworCXdha2VfdXAgKCZjcC0+YnVmZmVyd2FpdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBIYW5kbGluZyBvZiBJbnRlcnJ1cHQgRW5kcG9pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogVGhpcyBpbnRlcnJ1cHQgRW5kcG9pbnQgaXMgdXNlZCB0byBpbmZvcm0gdGhlIGhvc3QgYWJvdXQgd2FpdGluZworICAgbWVzc2FnZXMgZnJvbSB0aGUgVVNCIGRldmljZS4KKyovCisvKiBpbnQgY29tcGxldGlvbiBoYW5kbGVyLiAqLworc3RhdGljIHZvaWQgYXVlcnN3YWxkX2ludF9jb21wbGV0ZSAoc3RydWN0IHVyYiAqIHVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAgICAgIHVuc2lnbmVkICBpbnQgY2hhbm5lbGlkOworICAgICAgICB1bnNpZ25lZCAgaW50IGJ5dGVjb3VudDsKKyAgICAgICAgaW50IHJldDsKKyAgICAgICAgcGF1ZXJidWZfdCAgIGJwID0gTlVMTDsKKyAgICAgICAgcGF1ZXJzd2FsZF90IGNwID0gKHBhdWVyc3dhbGRfdCkgdXJiLT5jb250ZXh0OworCisgICAgICAgIGRiZyAoIiVzIGNhbGxlZCIsIF9fRlVOQ1RJT05fXyk7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworICAgICAgICAvKiBjaGVjayBpZiBhbGwgbmVlZGVkIGRhdGEgd2FzIHJlY2VpdmVkICovCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA8IEFVX0lSUU1JTlNJWkUpIHsKKyAgICAgICAgICAgICAgICBkYmcgKCJpbnZhbGlkIGRhdGEgbGVuZ3RoIHJlY2VpdmVkOiAlZCBieXRlcyIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCWdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGNoZWNrIHRoZSBjb21tYW5kIGNvZGUgKi8KKyAgICAgICAgaWYgKGNwLT5pbnRidWZwWzBdICE9IEFVX0lSUUNNRElEKSB7CisgICAgICAgICAgICAgICAgZGJnICgiaW52YWxpZCBjb21tYW5kIHJlY2VpdmVkOiAlZCIsIGNwLT5pbnRidWZwWzBdKTsKKwkJZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgLyogY2hlY2sgdGhlIGNvbW1hbmQgdHlwZSAqLworICAgICAgICBpZiAoY3AtPmludGJ1ZnBbMV0gIT0gQVVfQkxPQ0tSRFkpIHsKKyAgICAgICAgICAgICAgICBkYmcgKCJpbnZhbGlkIGNvbW1hbmQgdHlwZSByZWNlaXZlZDogJWQiLCBjcC0+aW50YnVmcFsxXSk7CisJCWdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIG5vdyBleHRyYWN0IHRoZSBpbmZvcm1hdGlvbiAqLworICAgICAgICBjaGFubmVsaWQgPSBjcC0+aW50YnVmcFsyXTsKKyAgICAgICAgYnl0ZWNvdW50ID0gKHVuc2lnbmVkIGNoYXIpY3AtPmludGJ1ZnBbM107CisgICAgICAgIGJ5dGVjb3VudCB8PSAodW5zaWduZWQgY2hhciljcC0+aW50YnVmcFs0XSA8PCA4OworCisgICAgICAgIC8qIGNoZWNrIHRoZSBjaGFubmVsIGlkICovCisgICAgICAgIGlmIChjaGFubmVsaWQgPj0gQVVIX1RZUEVTSVpFKSB7CisgICAgICAgICAgICAgICAgZGJnICgiaW52YWxpZCBjaGFubmVsIGlkIHJlY2VpdmVkOiAlZCIsIGNoYW5uZWxpZCk7CisJCWdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGNoZWNrIHRoZSBieXRlIGNvdW50ICovCisgICAgICAgIGlmIChieXRlY291bnQgPiAoY3AtPm1heENvbnRyb2xMZW5ndGgrQVVIX1NJWkUpKSB7CisgICAgICAgICAgICAgICAgZGJnICgiaW52YWxpZCBieXRlIGNvdW50IHJlY2VpdmVkOiAlZCIsIGJ5dGVjb3VudCk7CisJCWdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgICAgICBkYmcgKCJTZXJ2aWNlIENoYW5uZWwgPSAlZCIsIGNoYW5uZWxpZCk7CisgICAgICAgIGRiZyAoIkJ5dGUgQ291bnQgPSAlZCIsIGJ5dGVjb3VudCk7CisKKyAgICAgICAgLyogZ2V0IGEgYnVmZmVyIGZvciB0aGUgbmV4dCBkYXRhIHBha2V0ICovCisgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlICgmY3AtPmJ1ZmN0bC5sb2NrLCBmbGFncyk7CisgICAgICAgIGlmICghbGlzdF9lbXB0eSAoJmNwLT5idWZjdGwuZnJlZV9idWZmX2xpc3QpKSB7CisgICAgICAgICAgICAgICAgLyogeWVzOiBnZXQgdGhlIGVudHJ5ICovCisgICAgICAgICAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqdG1wID0gY3AtPmJ1ZmN0bC5mcmVlX2J1ZmZfbGlzdC5uZXh0OworICAgICAgICAgICAgICAgIGxpc3RfZGVsICh0bXApOworICAgICAgICAgICAgICAgIGJwID0gbGlzdF9lbnRyeSAodG1wLCBhdWVyYnVmX3QsIGJ1ZmZfbGlzdCk7CisgICAgICAgIH0KKyAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmNwLT5idWZjdGwubG9jaywgZmxhZ3MpOworCisgICAgICAgIC8qIGlmIG5vIGJ1ZmZlciBhdmFpbGFibGU6IHNraXAgaXQgKi8KKyAgICAgICAgaWYgKCFicCkgeworICAgICAgICAgICAgICAgIGRiZyAoImF1ZXJzd2FsZF9pbnRfY29tcGxldGU6IG5vIGRhdGEgYnVmZmVyIGF2YWlsYWJsZSIpOworICAgICAgICAgICAgICAgIC8qIGNhbiB3ZSBkbyBzb21ldGhpbmcgbW9yZT8KKwkJICAgVGhpcyBpcyBhIGJpZyBwcm9ibGVtOiBpZiB0aGlzIGludCBwYWNrZXQgaXMgaWdub3JlZCwgdGhlCisJCSAgIGRldmljZSB3aWxsIHdhaXQgZm9yZXZlciBhbmQgbm90IHNpZ25hbCBhbnkgbW9yZSBkYXRhLgorCQkgICBUaGUgb25seSByZWFsIHNvbHV0aW9uIGlzOiBoYXZpbmcgZW5vdWdoIGJ1ZmZlcnMhCisJCSAgIE9yIHBlcmhhcHMgdGVtcG9yYXJ5IGRpc2FibGluZyB0aGUgaW50IGVuZHBvaW50PworCQkqLworCQlnb3RvIGV4aXQ7CisgICAgICAgIH0KKworCS8qIGZpbGwgdGhlIGNvbnRyb2wgbWVzc2FnZSAqLworICAgICAgICBicC0+ZHItPmJSZXF1ZXN0VHlwZSA9IEFVVF9SUkVROworCWJwLT5kci0+YlJlcXVlc3QgICAgID0gQVVWX1JCTE9DSzsKKwlicC0+ZHItPndWYWx1ZSAgICAgICA9IGNwdV90b19sZTE2ICgwKTsKKwlicC0+ZHItPndJbmRleCAgICAgICA9IGNwdV90b19sZTE2IChjaGFubmVsaWQgfCBBVUhfRElSRUNUIHwgQVVIX1VOU1BMSVQpOworCWJwLT5kci0+d0xlbmd0aCAgICAgID0gY3B1X3RvX2xlMTYgKGJ5dGVjb3VudCk7CisJdXNiX2ZpbGxfY29udHJvbF91cmIgKGJwLT51cmJwLCBjcC0+dXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUgKGNwLT51c2JkZXYsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciopYnAtPmRyLCBicC0+YnVmcCwgYnl0ZWNvdW50LAorCQkgICAgICAgICAgYXVlcnN3YWxkX2N0cmxyZWFkX2NvbXBsZXRlLGJwKTsKKworICAgICAgICAvKiBzdWJtaXQgdGhlIGNvbnRyb2wgbXNnICovCisgICAgICAgIHJldCA9IGF1ZXJjaGFpbl9zdWJtaXRfdXJiICgmY3AtPmNvbnRyb2xjaGFpbiwgYnAtPnVyYnApOworICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgZGJnICgiYXVlcnN3YWxkX2ludF9jb21wbGV0ZTogbm9uemVybyByZXN1bHQgb2YgYXVlcmNoYWluX3N1Ym1pdF91cmIgJWQiLCByZXQpOworICAgICAgICAgICAgICAgIGJwLT51cmJwLT5zdGF0dXMgPSByZXQ7CisgICAgICAgICAgICAgICAgYXVlcnN3YWxkX2N0cmxyZWFkX2NvbXBsZXRlKCBicC0+dXJicCwgTlVMTCk7CisJCS8qIGhlcmUgYXBwbGllcyB0aGUgc2FtZSBwcm9ibGVtIGFzIGFib3ZlOiBkZXZpY2UgbG9ja2luZyEgKi8KKyAgICAgICAgfQorZXhpdDoKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0KQorCQllcnIgKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCisJCSAgICAgX19GVU5DVElPTl9fLCByZXQpOworfQorCisvKiBpbnQgbWVtb3J5IGRlYWxsb2NhdGlvbgorICAgTk9URTogbm8gbXV0ZXggcGxlYXNlIQorKi8KK3N0YXRpYyB2b2lkIGF1ZXJzd2FsZF9pbnRfZnJlZSAocGF1ZXJzd2FsZF90IGNwKQoreworICAgICAgICBpZiAoY3AtPmludHVyYnApIHsKKyAgICAgICAgICAgICAgICB1c2JfZnJlZV91cmIgKGNwLT5pbnR1cmJwKTsKKyAgICAgICAgICAgICAgICBjcC0+aW50dXJicCA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNwLT5pbnRidWZwKSB7CisgICAgICAgICAgICAgICAga2ZyZWUgKGNwLT5pbnRidWZwKTsKKyAgICAgICAgICAgICAgICBjcC0+aW50YnVmcCA9IE5VTEw7CisgICAgICAgIH0KK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gYWN0aXZhdGUgdGhlIGludGVycnVwdAorICAgZW5kcG9pbnQuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwgb3IgYW4gZXJyb3IgY29kZS4KKyAgIE5PVEU6IG5vIG11dGV4IHBsZWFzZSEKKyovCitzdGF0aWMgaW50IGF1ZXJzd2FsZF9pbnRfb3BlbiAocGF1ZXJzd2FsZF90IGNwKQoreworICAgICAgICBpbnQgcmV0OworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CisJaW50IGlycXNpemU7CisJZGJnICgiYXVlcnN3YWxkX2ludF9vcGVuIik7CisKKwllcCA9IGNwLT51c2JkZXYtPmVwX2luW0FVX0lSUUVORFBdOworCWlmICghZXApIHsKKwkJcmV0ID0gLUVGQVVMVDsKKyAgCQlnb3RvIGludG9lbmQ7CisgICAgCX0KKwlpcnFzaXplID0gbGUxNl90b19jcHUoZXAtPmRlc2Mud01heFBhY2tldFNpemUpOworCWNwLT5pcnFzaXplID0gaXJxc2l6ZTsKKworCS8qIGFsbG9jYXRlIHRoZSB1cmIgYW5kIGRhdGEgYnVmZmVyICovCisgICAgICAgIGlmICghY3AtPmludHVyYnApIHsKKyAgICAgICAgICAgICAgICBjcC0+aW50dXJicCA9IHVzYl9hbGxvY191cmIgKDAsIEdGUF9LRVJORUwpOworICAgICAgICAgICAgICAgIGlmICghY3AtPmludHVyYnApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FTk9NRU07CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGludG9lbmQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghY3AtPmludGJ1ZnApIHsKKyAgICAgICAgICAgICAgICBjcC0+aW50YnVmcCA9IChjaGFyICopIGttYWxsb2MgKGlycXNpemUsIEdGUF9LRVJORUwpOworICAgICAgICAgICAgICAgIGlmICghY3AtPmludGJ1ZnApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FTk9NRU07CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGludG9lbmQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIHNldHVwIHVyYiAqLworICAgICAgICB1c2JfZmlsbF9pbnRfdXJiIChjcC0+aW50dXJicCwgY3AtPnVzYmRldiwKKwkJCXVzYl9yY3ZpbnRwaXBlIChjcC0+dXNiZGV2LEFVX0lSUUVORFApLCBjcC0+aW50YnVmcCwKKwkJCWlycXNpemUsIGF1ZXJzd2FsZF9pbnRfY29tcGxldGUsIGNwLCBlcC0+ZGVzYy5iSW50ZXJ2YWwpOworICAgICAgICAvKiBzdGFydCB0aGUgdXJiICovCisJY3AtPmludHVyYnAtPnN0YXR1cyA9IDA7CS8qIG5lZWRlZCEgKi8KKwlyZXQgPSB1c2Jfc3VibWl0X3VyYiAoY3AtPmludHVyYnAsIEdGUF9LRVJORUwpOworCitpbnRvZW5kOgorICAgICAgICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgICAgIC8qIGFjdGl2YXRpb24gb2YgaW50ZXJydXB0IGVuZHBvaW50IGhhcyBmYWlsZWQuIE5vdyBjbGVhbiB1cC4gKi8KKyAgICAgICAgICAgICAgICBkYmcgKCJhdWVyc3dhbGRfaW50X29wZW46IGFjdGl2YXRpb24gb2YgaW50IGVuZHBvaW50IGZhaWxlZCIpOworCisgICAgICAgICAgICAgICAgLyogZGVhbGxvY2F0ZSBtZW1vcnkgKi8KKyAgICAgICAgICAgICAgICBhdWVyc3dhbGRfaW50X2ZyZWUgKGNwKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0OworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBkZWFjdGl2YXRlIHRoZSBpbnRlcnJ1cHQKKyAgIGVuZHBvaW50LiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBzdWNjZXNzZnVsIG9yIGFuIGVycm9yIGNvZGUuCisgICBOT1RFOiBubyBtdXRleCBwbGVhc2UhCisqLworc3RhdGljIHZvaWQgYXVlcnN3YWxkX2ludF9yZWxlYXNlIChwYXVlcnN3YWxkX3QgY3ApCit7CisgICAgICAgIGRiZyAoImF1ZXJzd2FsZF9pbnRfcmVsZWFzZSIpOworCisgICAgICAgIC8qIHN0b3AgdGhlIGludCBlbmRwb2ludCAqLworICAgICAgICBpZiAoY3AtPmludHVyYnApCisgICAgICAgICAgICAgICAgdXNiX2tpbGxfdXJiIChjcC0+aW50dXJicCk7CisKKyAgICAgICAgLyogZGVhbGxvY2F0ZSBtZW1vcnkgKi8KKyAgICAgICAgYXVlcnN3YWxkX2ludF9mcmVlIChjcCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogSGVscGVyIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIHdha2UgdXAgd2FpdGluZyByZWFkZXJzICovCitzdGF0aWMgdm9pZCBhdWVyY2hhcl9kaXNjb25uZWN0IChwYXVlcnNjb25fdCBzY3ApCit7CisgICAgICAgIHBhdWVyY2hhcl90IGNjcCA9ICgocGF1ZXJjaGFyX3QpKChjaGFyICopKHNjcCktKHVuc2lnbmVkIGxvbmcpKCYoKHBhdWVyY2hhcl90KTApLT5zY29udGV4dCkpKTsKKwlkYmcgKCJhdWVyY2hhcl9kaXNjb25uZWN0IGNhbGxlZCIpOworCWNjcC0+cmVtb3ZlZCA9IDE7CisJd2FrZV91cCAoJmNjcC0+cmVhZHdhaXQpOworfQorCisKKy8qIGRpc3BhdGNoIGEgcmVhZCBwYWtldCB0byBhIHdhaXRpbmcgY2hhcmFjdGVyIGRldmljZSAqLworc3RhdGljIHZvaWQgYXVlcmNoYXJfY3RybHJlYWRfZGlzcGF0Y2ggKHBhdWVyc2Nvbl90IHNjcCwgcGF1ZXJidWZfdCBicCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworICAgICAgICBwYXVlcmNoYXJfdCBjY3A7CisgICAgICAgIHBhdWVyYnVmX3QgbmV3YnAgPSBOVUxMOworICAgICAgICBjaGFyICogY2hhcnA7CisgICAgICAgIGRiZyAoImF1ZXJjaGFyX2N0cmxyZWFkX2Rpc3BhdGNoIGNhbGxlZCIpOworICAgICAgICBjY3AgPSAoKHBhdWVyY2hhcl90KSgoY2hhciAqKShzY3ApLSh1bnNpZ25lZCBsb25nKSgmKChwYXVlcmNoYXJfdCkwKS0+c2NvbnRleHQpKSk7CisKKyAgICAgICAgLyogZ2V0IGEgcmVhZCBidWZmZXIgZnJvbSBjaGFyYWN0ZXIgZGV2aWNlIGNvbnRleHQgKi8KKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUgKCZjY3AtPmJ1ZmN0bC5sb2NrLCBmbGFncyk7CisgICAgICAgIGlmICghbGlzdF9lbXB0eSAoJmNjcC0+YnVmY3RsLmZyZWVfYnVmZl9saXN0KSkgeworICAgICAgICAgICAgICAgIC8qIHllczogZ2V0IHRoZSBlbnRyeSAqLworICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtcCA9IGNjcC0+YnVmY3RsLmZyZWVfYnVmZl9saXN0Lm5leHQ7CisgICAgICAgICAgICAgICAgbGlzdF9kZWwgKHRtcCk7CisgICAgICAgICAgICAgICAgbmV3YnAgPSBsaXN0X2VudHJ5ICh0bXAsIGF1ZXJidWZfdCwgYnVmZl9saXN0KTsKKyAgICAgICAgfQorICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlICgmY2NwLT5idWZjdGwubG9jaywgZmxhZ3MpOworCisgICAgICAgIGlmICghbmV3YnApIHsKKyAgICAgICAgICAgICAgICBkYmcgKCJObyByZWFkIGJ1ZmZlciBhdmFpbGFibGUsIGRpc2NhcmQgcGFrZXQhIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOyAgICAgLyogbm8gYnVmZmVyLCBubyBkaXNwYXRjaCAqLworICAgICAgICB9CisKKyAgICAgICAgLyogY29weSBpbmZvcm1hdGlvbiB0byBuZXcgYnVmZmVyIGVsZW1lbnQKKyAgICAgICAgICAgKGFsbCBidWZmZXJzIGhhdmUgdGhlIHNhbWUgbGVuZ3RoKSAqLworICAgICAgICBjaGFycCA9IG5ld2JwLT5idWZwOworICAgICAgICBuZXdicC0+YnVmcCA9IGJwLT5idWZwOworICAgICAgICBicC0+YnVmcCA9IGNoYXJwOworICAgICAgICBuZXdicC0+bGVuID0gYnAtPmxlbjsKKworICAgICAgICAvKiBpbnNlcnQgbmV3IGJ1ZmZlciBpbiByZWFkIGxpc3QgKi8KKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUgKCZjY3AtPmJ1ZmN0bC5sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCAoJm5ld2JwLT5idWZmX2xpc3QsICZjY3AtPmJ1ZmN0bC5yZWNfYnVmZl9saXN0KTsKKyAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmNjcC0+YnVmY3RsLmxvY2ssIGZsYWdzKTsKKyAgICAgICAgZGJnICgicmVhZCBidWZmZXIgYXBwZW5kZWQgdG8gcmVjX2xpc3QiKTsKKworICAgICAgICAvKiB3YWtlIHVwIHBlbmRpbmcgc3luY2hyb25vdXMgcmVhZHMgKi8KKwl3YWtlX3VwICgmY2NwLT5yZWFkd2FpdCk7Cit9CisKKworLyogRGVsZXRlIGFuIGF1ZXJzd2FsZCBkcml2ZXIgY29udGV4dCAqLworc3RhdGljIHZvaWQgYXVlcnN3YWxkX2RlbGV0ZSggcGF1ZXJzd2FsZF90IGNwKQoreworCWRiZyggImF1ZXJzd2FsZF9kZWxldGUiKTsKKwlpZiAoY3AgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogV2FrZSB1cCBhbGwgcHJvY2Vzc2VzIHdhaXRpbmcgZm9yIGEgYnVmZmVyICovCisJd2FrZV91cCAoJmNwLT5idWZmZXJ3YWl0KTsKKworCS8qIENsZWFuaW5nIHVwICovCisJYXVlcnN3YWxkX2ludF9yZWxlYXNlIChjcCk7CisJYXVlcmNoYWluX2ZyZWUgKCZjcC0+Y29udHJvbGNoYWluKTsKKwlhdWVyYnVmX2ZyZWVfYnVmZmVycyAoJmNwLT5idWZjdGwpOworCisJLyogcmVsZWFzZSB0aGUgbWVtb3J5ICovCisJa2ZyZWUoIGNwKTsKK30KKworCisvKiBEZWxldGUgYW4gYXVlcnN3YWxkIGNoYXJhY3RlciBjb250ZXh0ICovCitzdGF0aWMgdm9pZCBhdWVyY2hhcl9kZWxldGUoIHBhdWVyY2hhcl90IGNjcCkKK3sKKwlkYmcgKCJhdWVyY2hhcl9kZWxldGUiKTsKKwlpZiAoY2NwID09IE5VTEwpCisJCXJldHVybjsKKworICAgICAgICAvKiB3YWtlIHVwIHBlbmRpbmcgc3luY2hyb25vdXMgcmVhZHMgKi8KKwljY3AtPnJlbW92ZWQgPSAxOworCXdha2VfdXAgKCZjY3AtPnJlYWR3YWl0KTsKKworCS8qIHJlbW92ZSB0aGUgcmVhZCBidWZmZXIgKi8KKwlpZiAoY2NwLT5yZWFkYnVmKSB7CisJCWF1ZXJidWZfcmVsZWFzZWJ1ZiAoY2NwLT5yZWFkYnVmKTsKKwkJY2NwLT5yZWFkYnVmID0gTlVMTDsKKwl9CisKKwkvKiByZW1vdmUgdGhlIGNoYXJhY3RlciBidWZmZXJzICovCisJYXVlcmJ1Zl9mcmVlX2J1ZmZlcnMgKCZjY3AtPmJ1ZmN0bCk7CisKKwkvKiByZWxlYXNlIHRoZSBtZW1vcnkgKi8KKwlrZnJlZSggY2NwKTsKK30KKworCisvKiBhZGQgYSBuZXcgc2VydmljZSB0byB0aGUgZGV2aWNlCisgICBzY3AtPmlkIG11c3QgYmUgc2V0IQorICAgcmV0dXJuOiAwIGlmIE9LLCBlbHNlIGVycm9yIGNvZGUKKyovCitzdGF0aWMgaW50IGF1ZXJzd2FsZF9hZGRzZXJ2aWNlIChwYXVlcnN3YWxkX3QgY3AsIHBhdWVyc2Nvbl90IHNjcCkKK3sKKwlpbnQgcmV0OworCisJLyogaXMgdGhlIGRldmljZSBhdmFpbGFibGU/ICovCisJaWYgKCFjcC0+dXNiZGV2KSB7CisJCWRiZyAoInVzYmRldiA9PSBOVUxMIik7CisJCXJldHVybiAtRUlPOwkvKm5vOiBjYW4gbm90IGFkZCBhIHNlcnZpY2UsIHNvcnJ5Ki8KKwl9CisKKwkvKiBpcyB0aGUgc2VydmljZSBhdmFpbGFibGU/ICovCisJaWYgKGNwLT5zZXJ2aWNlc1tzY3AtPmlkXSkgeworCQlkYmcgKCJzZXJ2aWNlIGlzIGJ1c3kiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOworCX0KKworCS8qIGRldmljZSBpcyBhdmFpbGFibGUsIHNlcnZpY2UgaXMgZnJlZSAqLworCWNwLT5zZXJ2aWNlc1tzY3AtPmlkXSA9IHNjcDsKKworCS8qIHJlZ2lzdGVyIHNlcnZpY2UgaW4gZGV2aWNlICovCisJcmV0ID0gYXVlcmNoYWluX2NvbnRyb2xfbXNnKAorCQkmY3AtPmNvbnRyb2xjaGFpbiwgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBjb250cm9sIGNoYWluICovCisJCWNwLT51c2JkZXYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIGRldmljZSAqLworCQl1c2Jfc25kY3RybHBpcGUgKGNwLT51c2JkZXYsIDApLCAgICAgICAgLyogcGlwZSB0byBjb250cm9sIGVuZHBvaW50ICovCisJCUFVVl9DSEFOTkVMQ1RMLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVU0IgbWVzc2FnZSByZXF1ZXN0IHZhbHVlICovCisJCUFVVF9XUkVRLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVU0IgbWVzc2FnZSByZXF1ZXN0IHR5cGUgdmFsdWUgKi8KKwkJMHgwMSwgICAgICAgICAgICAgIC8qIG9wZW4gICAgICAgICAgICAgICAgIFVTQiBtZXNzYWdlIHZhbHVlICovCisJCXNjcC0+aWQsICAgICAgICAgICAgCQkgICAgICAgIC8qIFVTQiBtZXNzYWdlIGluZGV4IHZhbHVlICovCisJCU5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmQgKi8KKwkJMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZGF0YSB0byBzZW5kICovCisJCUhaICogMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aW1lIHRvIHdhaXQgZm9yIHRoZSBtZXNzYWdlIHRvIGNvbXBsZXRlIGJlZm9yZSB0aW1pbmcgb3V0ICovCisJaWYgKHJldCA8IDApIHsKKwkJZGJnICgiYXVlcnN3YWxkX2FkZHNlcnZpY2U6IGF1ZXJjaGFpbl9jb250cm9sX21zZyByZXR1cm5lZCBlcnJvciBjb2RlICVkIiwgcmV0KTsKKwkJLyogdW5kbyBhYm92ZSBhY3Rpb25zICovCisJCWNwLT5zZXJ2aWNlc1tzY3AtPmlkXSA9IE5VTEw7CisJCXJldHVybiByZXQ7CisJfQorCisJZGJnICgiYXVlcnN3YWxkX2FkZHNlcnZpY2U6IGNoYW5uZWwgb3BlbiBPSyIpOworCXJldHVybiAwOworfQorCisKKy8qIHJlbW92ZSBhIHNlcnZpY2UgZnJvbSB0aGUgdGhlIGRldmljZQorICAgc2NwLT5pZCBtdXN0IGJlIHNldCEgKi8KK3N0YXRpYyB2b2lkIGF1ZXJzd2FsZF9yZW1vdmVzZXJ2aWNlIChwYXVlcnN3YWxkX3QgY3AsIHBhdWVyc2Nvbl90IHNjcCkKK3sKKwlkYmcgKCJhdWVyc3dhbGRfcmVtb3Zlc2VydmljZSBjYWxsZWQiKTsKKworCS8qIGNoZWNrIGlmIHdlIGhhdmUgYSBzZXJ2aWNlIGFsbG9jYXRlZCAqLworCWlmIChzY3AtPmlkID09IEFVSF9VTkFTU0lHTkVEKQorCQlyZXR1cm47CisKKwkvKiBJZiB0aGVyZSBpcyBhIGRldmljZTogY2xvc2UgdGhlIGNoYW5uZWwgKi8KKwlpZiAoY3AtPnVzYmRldikgeworCQkvKiBDbG9zZSB0aGUgc2VydmljZSBjaGFubmVsIGluc2lkZSB0aGUgZGV2aWNlICovCisJCWludCByZXQgPSBhdWVyY2hhaW5fY29udHJvbF9tc2coCisJCSZjcC0+Y29udHJvbGNoYWluLCAgICAgICAgICAgIAkJLyogcG9pbnRlciB0byBjb250cm9sIGNoYWluICovCisJCWNwLT51c2JkZXYsICAgICAgICAgCQkgICAgICAgIC8qIHBvaW50ZXIgdG8gZGV2aWNlICovCisJCXVzYl9zbmRjdHJscGlwZSAoY3AtPnVzYmRldiwgMCksCS8qIHBpcGUgdG8gY29udHJvbCBlbmRwb2ludCAqLworCQlBVVZfQ0hBTk5FTENUTCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogVVNCIG1lc3NhZ2UgcmVxdWVzdCB2YWx1ZSAqLworCQlBVVRfV1JFUSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVVNCIG1lc3NhZ2UgcmVxdWVzdCB0eXBlIHZhbHVlICovCisJCTB4MDAsICAgICAgICAgICAgICAvLyBjbG9zZSAgICAgICAgICAgICAvKiBVU0IgbWVzc2FnZSB2YWx1ZSAqLworCQlzY3AtPmlkLCAgICAgICAgICAgIAkJICAgICAgICAvKiBVU0IgbWVzc2FnZSBpbmRleCB2YWx1ZSAqLworCQlOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byB0aGUgZGF0YSB0byBzZW5kICovCisJCTAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGRhdGEgdG8gc2VuZCAqLworCQlIWiAqIDIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGltZSB0byB3YWl0IGZvciB0aGUgbWVzc2FnZSB0byBjb21wbGV0ZSBiZWZvcmUgdGltaW5nIG91dCAqLworCQlpZiAocmV0IDwgMCkgeworCQkJZGJnICgiYXVlcnN3YWxkX3JlbW92ZXNlcnZpY2U6IGF1ZXJjaGFpbl9jb250cm9sX21zZyByZXR1cm5lZCBlcnJvciBjb2RlICVkIiwgcmV0KTsKKwkJfQorCQllbHNlIHsKKwkJCWRiZyAoImF1ZXJzd2FsZF9yZW1vdmVzZXJ2aWNlOiBjaGFubmVsIGNsb3NlIE9LIik7CisJCX0KKwl9CisKKwkvKiByZW1vdmUgdGhlIHNlcnZpY2UgZnJvbSB0aGUgZGV2aWNlICovCisJY3AtPnNlcnZpY2VzW3NjcC0+aWRdID0gTlVMTDsKKwlzY3AtPmlkID0gQVVIX1VOQVNTSUdORUQ7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBDaGFyIGRldmljZSBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyogT3BlbiBhIG5ldyBjaGFyYWN0ZXIgZGV2aWNlICovCitzdGF0aWMgaW50IGF1ZXJjaGFyX29wZW4gKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCBkdGluZGV4ID0gaW1pbm9yKGlub2RlKTsKKwlwYXVlcnN3YWxkX3QgY3AgPSBOVUxMOworCXBhdWVyY2hhcl90IGNjcCA9IE5VTEw7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisgICAgICAgIGludCByZXQ7CisKKyAgICAgICAgLyogbWlub3IgbnVtYmVyIGluIHJhbmdlPyAqLworCWlmIChkdGluZGV4IDwgMCkgeworCQlyZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgfQorCWludGYgPSB1c2JfZmluZF9pbnRlcmZhY2UoJmF1ZXJzd2FsZF9kcml2ZXIsIGR0aW5kZXgpOworCWlmICghaW50ZikgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiB1c2IgZGV2aWNlIGF2YWlsYWJsZT8gKi8KKwljcCA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCWlmIChjcCA9PSBOVUxMKSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmY3AtPm11dGV4KSkgeworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKworCS8qIHdlIGhhdmUgYWNjZXNzIHRvIHRoZSBkZXZpY2UuIE5vdyBsZXRzIGFsbG9jYXRlIG1lbW9yeSAqLworCWNjcCA9IChwYXVlcmNoYXJfdCkga21hbGxvYyhzaXplb2YoYXVlcmNoYXJfdCksIEdGUF9LRVJORUwpOworCWlmIChjY3AgPT0gTlVMTCkgeworCQllcnIgKCJvdXQgb2YgbWVtb3J5Iik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb2ZhaWw7CisJfQorCisJLyogSW5pdGlhbGl6ZSBkZXZpY2UgZGVzY3JpcHRvciAqLworCW1lbXNldCggY2NwLCAwLCBzaXplb2YoYXVlcmNoYXJfdCkpOworCWluaXRfTVVURVgoICZjY3AtPm11dGV4KTsKKwlpbml0X01VVEVYKCAmY2NwLT5yZWFkbXV0ZXgpOworICAgICAgICBhdWVyYnVmX2luaXQgKCZjY3AtPmJ1ZmN0bCk7CisgICAgICAgIGNjcC0+c2NvbnRleHQuaWQgPSBBVUhfVU5BU1NJR05FRDsKKyAgICAgICAgY2NwLT5zY29udGV4dC5kaXNwYXRjaCA9IGF1ZXJjaGFyX2N0cmxyZWFkX2Rpc3BhdGNoOworCWNjcC0+c2NvbnRleHQuZGlzY29ubmVjdCA9IGF1ZXJjaGFyX2Rpc2Nvbm5lY3Q7CisJaW5pdF93YWl0cXVldWVfaGVhZCAoJmNjcC0+cmVhZHdhaXQpOworCisJcmV0ID0gYXVlcmJ1Zl9zZXR1cCAoJmNjcC0+YnVmY3RsLCBBVV9SQlVGRkVSUywgY3AtPm1heENvbnRyb2xMZW5ndGgrQVVIX1NJWkUpOworICAgICAgIAlpZiAocmV0KSB7CisJCWdvdG8gb2ZhaWw7CisJfQorCisJY3AtPm9wZW5fY291bnQrKzsKKwljY3AtPmF1ZXJkZXYgPSBjcDsKKwlkYmcoIm9wZW4gJXMgYXMgL2Rldi8lcyIsIGNwLT5kZXZfZGVzYywgY3AtPm5hbWUpOworCXVwICgmY3AtPm11dGV4KTsKKworCS8qIGZpbGUgSU8gc3R1ZmYgKi8KKwlmaWxlLT5mX3BvcyA9IDA7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gY2NwOworCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKKworCS8qIEVycm9yIGV4aXQgKi8KK29mYWlsOgl1cCAoJmNwLT5tdXRleCk7CisJYXVlcmNoYXJfZGVsZXRlIChjY3ApOworCXJldHVybiByZXQ7Cit9CisKKworLyogSU9DVEwgZnVuY3Rpb25zICovCitzdGF0aWMgaW50IGF1ZXJjaGFyX2lvY3RsIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcGF1ZXJjaGFyX3QgY2NwID0gKHBhdWVyY2hhcl90KSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IHJldCA9IDA7CisgICAgICAgIGF1ZGV2aW5mb190IGRldmluZm87CisgICAgICAgIHBhdWVyc3dhbGRfdCBjcCA9IE5VTEw7CisJdW5zaWduZWQgaW50IHU7CisJdW5zaWduZWQgaW50IF9fdXNlciAqdXNlcl9hcmcgPSAodW5zaWduZWQgaW50IF9fdXNlciAqKWFyZzsKKworICAgICAgICBkYmcgKCJpb2N0bCIpOworCisJLyogZ2V0IHRoZSBtdXRleGVzICovCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSAoJmNjcC0+bXV0ZXgpKSB7CisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJfQorCWNwID0gY2NwLT5hdWVyZGV2OworCWlmICghY3ApIHsKKwkJdXAgKCZjY3AtPm11dGV4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKGRvd25faW50ZXJydXB0aWJsZSAoJmNwLT5tdXRleCkpIHsKKwkJdXAoJmNjcC0+bXV0ZXgpOworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKworCS8qIENoZWNrIGZvciByZW1vdmFsICovCisJaWYgKCFjcC0+dXNiZGV2KSB7CisJCXVwKCZjcC0+bXV0ZXgpOworCQl1cCgmY2NwLT5tdXRleCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc3dpdGNoIChjbWQpIHsKKworCS8qIHJldHVybiAhPSAwIGlmIFRyYW5zbWl0dCBjaGFubmVsIHJlYWR5IHRvIHNlbmQgKi8KKwljYXNlIElPQ1RMX0FVX1RYUkVBRFk6CisJCWRiZyAoIklPQ1RMX0FVX1RYUkVBRFkiKTsKKwkJdSAgID0gY2NwLT5hdWVyZGV2CisJCSAgICYmIChjY3AtPnNjb250ZXh0LmlkICE9IEFVSF9VTkFTU0lHTkVEKQorCQkgICAmJiAhbGlzdF9lbXB0eSAoJmNwLT5idWZjdGwuZnJlZV9idWZmX2xpc3QpOworCSAgICAgICAgcmV0ID0gcHV0X3VzZXIgKHUsIHVzZXJfYXJnKTsKKwkJYnJlYWs7CisKKwkvKiByZXR1cm4gIT0gMCBpZiBjb25uZWN0ZWQgdG8gYSBzZXJ2aWNlIGNoYW5uZWwgKi8KKwljYXNlIElPQ1RMX0FVX0NPTk5FQ1Q6CisJCWRiZyAoIklPQ1RMX0FVX0NPTk5FQ1QiKTsKKwkJdSA9IChjY3AtPnNjb250ZXh0LmlkICE9IEFVSF9VTkFTU0lHTkVEKTsKKwkgICAgICAgIHJldCA9IHB1dF91c2VyICh1LCB1c2VyX2FyZyk7CisJCWJyZWFrOworCisJLyogcmV0dXJuICE9IDAgaWYgUmVjZWl2ZSBEYXRhIGF2YWlsYWJsZSAqLworCWNhc2UgSU9DVExfQVVfUlhBVkFJTDoKKwkJZGJnICgiSU9DVExfQVVfUlhBVkFJTCIpOworCQlpZiAoY2NwLT5zY29udGV4dC5pZCA9PSBBVUhfVU5BU1NJR05FRCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKwkJdSA9IDA7CS8qIG5vIGRhdGEgKi8KKwkJaWYgKGNjcC0+cmVhZGJ1ZikgeworCQkJaW50IHJlc3RsZW4gPSBjY3AtPnJlYWRidWYtPmxlbiAtIGNjcC0+cmVhZG9mZnNldDsKKwkJCWlmIChyZXN0bGVuID4gMCkKKwkJCQl1ID0gMTsKKwkJfQorCQlpZiAoIXUpIHsKKyAgICAgICAgCQlpZiAoIWxpc3RfZW1wdHkgKCZjY3AtPmJ1ZmN0bC5yZWNfYnVmZl9saXN0KSkgeworCQkJCXUgPSAxOworCQkJfQorCQl9CisJICAgICAgICByZXQgPSBwdXRfdXNlciAodSwgdXNlcl9hcmcpOworCQlicmVhazsKKworCS8qIHJldHVybiB0aGUgbWF4LiBidWZmZXIgbGVuZ3RoIGZvciB0aGUgZGV2aWNlICovCisJY2FzZSBJT0NUTF9BVV9CVUZMRU46CisJCWRiZyAoIklPQ1RMX0FVX0JVRkxFTiIpOworCQl1ID0gY3AtPm1heENvbnRyb2xMZW5ndGg7CisJICAgICAgICByZXQgPSBwdXRfdXNlciAodSwgdXNlcl9hcmcpOworCQlicmVhazsKKworCS8qIHJlcXVlc3RpbmcgYSBzZXJ2aWNlIGNoYW5uZWwgKi8KKyAgICAgICAgY2FzZSBJT0NUTF9BVV9TRVJWUkVROgorCQlkYmcgKCJJT0NUTF9BVV9TRVJWUkVRIik7CisgICAgICAgICAgICAgICAgLyogcmVxdWVzdGluZyBhIHNlcnZpY2UgbWVhbnM6IHJlbGVhc2UgdGhlIHByZXZpb3VzIG9uZSBmaXJzdCAqLworCQlhdWVyc3dhbGRfcmVtb3Zlc2VydmljZSAoY3AsICZjY3AtPnNjb250ZXh0KTsKKwkJLyogZ2V0IHRoZSBjaGFubmVsIG51bWJlciAqLworCQlyZXQgPSBnZXRfdXNlciAodSwgdXNlcl9hcmcpOworCQlpZiAocmV0KSB7CisJCQlicmVhazsKKwkJfQorCQlpZiAoKHUgPCBBVUhfRklSU1RVU0VSQ0gpIHx8ICh1ID49IEFVSF9UWVBFU0laRSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU87CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGJnICgiYXVlcmNoYXIgc2VydmljZSByZXF1ZXN0IHBhcmFtZXRlcnMgYXJlIG9rIik7CisJCWNjcC0+c2NvbnRleHQuaWQgPSB1OworCisJCS8qIHJlcXVlc3QgdGhlIHNlcnZpY2Ugbm93ICovCisJCXJldCA9IGF1ZXJzd2FsZF9hZGRzZXJ2aWNlIChjcCwgJmNjcC0+c2NvbnRleHQpOworCQlpZiAocmV0KSB7CisJCQkvKiBubzogcmV2ZXJ0IHNlcnZpY2UgZW50cnkgKi8KKyAgICAgICAgICAgICAgICAJY2NwLT5zY29udGV4dC5pZCA9IEFVSF9VTkFTU0lHTkVEOworCQl9CisJCWJyZWFrOworCisJLyogZ2V0IGEgc3RyaW5nIGRlc2NyaXB0b3IgZm9yIHRoZSBkZXZpY2UgKi8KKwljYXNlIElPQ1RMX0FVX0RFVklORk86CisJCWRiZyAoIklPQ1RMX0FVX0RFVklORk8iKTsKKyAgICAgICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIgKCZkZXZpbmZvLCAodm9pZCBfX3VzZXIgKikgYXJnLCBzaXplb2YgKGF1ZGV2aW5mb190KSkpIHsKKyAgICAgICAgCQlyZXQgPSAtRUZBVUxUOworCSAgICAgICAgCWJyZWFrOworICAgICAgICAgICAgICAgIH0KKwkJdSA9IHN0cmxlbihjcC0+ZGV2X2Rlc2MpKzE7CisJCWlmICh1ID4gZGV2aW5mby5ic2l6ZSkgeworCQkJdSA9IGRldmluZm8uYnNpemU7CisJCX0KKwkJcmV0ID0gY29weV90b191c2VyKGRldmluZm8uYnVmLCBjcC0+ZGV2X2Rlc2MsIHUpID8gLUVGQVVMVCA6IDA7CisJCWJyZWFrOworCisJLyogZ2V0IHRoZSBtYXguIHN0cmluZyBkZXNjcmlwdG9yIGxlbmd0aCAqLworICAgICAgICBjYXNlIElPQ1RMX0FVX1NMRU46CisJCWRiZyAoIklPQ1RMX0FVX1NMRU4iKTsKKwkJdSA9IEFVU0lfRExFTjsKKwkgICAgICAgIHJldCA9IHB1dF91c2VyICh1LCB1c2VyX2FyZyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGJnICgiSU9DVExfQVVfVU5LTk9XTiIpOworCQlyZXQgPSAtRU5PSU9DVExDTUQ7CisJCWJyZWFrOworICAgICAgICB9CisJLyogcmVsZWFzZSB0aGUgbXV0ZXhlcyAqLworCXVwKCZjcC0+bXV0ZXgpOworCXVwKCZjY3AtPm11dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBSZWFkIGRhdGEgZnJvbSB0aGUgZGV2aWNlICovCitzdGF0aWMgc3NpemVfdCBhdWVyY2hhcl9yZWFkIChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBwcG9zKQoreworICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworCXBhdWVyY2hhcl90IGNjcCA9IChwYXVlcmNoYXJfdCkgZmlsZS0+cHJpdmF0ZV9kYXRhOworICAgICAgICBwYXVlcmJ1Zl90ICAgYnAgPSBOVUxMOworCXdhaXRfcXVldWVfdCB3YWl0OworCisgICAgICAgIGRiZyAoImF1ZXJjaGFyX3JlYWQiKTsKKworCS8qIEVycm9yIGNoZWNraW5nICovCisJaWYgKCFjY3ApCisJCXJldHVybiAtRUlPOworCWlmICgqcHBvcykKKyAJCXJldHVybiAtRVNQSVBFOworICAgICAgICBpZiAoY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwkvKiBnZXQgdGhlIG11dGV4ICovCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSAoJmNjcC0+bXV0ZXgpKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJLyogQ2FuIHdlIGV4cGVjdCB0byByZWFkIHNvbWV0aGluZz8gKi8KKwlpZiAoY2NwLT5zY29udGV4dC5pZCA9PSBBVUhfVU5BU1NJR05FRCkgeworCQl1cCAoJmNjcC0+bXV0ZXgpOworICAgICAgICAgICAgICAgIHJldHVybiAtRUlPOworCX0KKworCS8qIG9ubHkgb25lIHJlYWRlciBwZXIgZGV2aWNlIGFsbG93ZWQgKi8KKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmY2NwLT5yZWFkbXV0ZXgpKSB7CisJCXVwICgmY2NwLT5tdXRleCk7CisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJfQorCisJLyogcmVhZCBkYXRhIGZyb20gcmVhZGJ1ZiwgaWYgYXZhaWxhYmxlICovCitkb3JlYWRidWY6CisJYnAgPSBjY3AtPnJlYWRidWY7CisJaWYgKGJwKSB7CisJCS8qIHJlYWQgdGhlIG1heGltdW0gYnl0ZXMgKi8KKwkJaW50IHJlc3RsZW4gPSBicC0+bGVuIC0gY2NwLT5yZWFkb2Zmc2V0OworCQlpZiAocmVzdGxlbiA8IDApCisJCQlyZXN0bGVuID0gMDsKKwkJaWYgKGNvdW50ID4gcmVzdGxlbikKKwkJCWNvdW50ID0gcmVzdGxlbjsKKwkJaWYgKGNvdW50KSB7CisJCQlpZiAoY29weV90b191c2VyIChidWYsIGJwLT5idWZwK2NjcC0+cmVhZG9mZnNldCwgY291bnQpKSB7CisJCQkJZGJnICgiYXVlcnN3YWxkX3JlYWQ6IGNvcHlfdG9fdXNlciBmYWlsZWQiKTsKKwkJCQl1cCAoJmNjcC0+cmVhZG11dGV4KTsKKwkJCQl1cCAoJmNjcC0+bXV0ZXgpOworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQl9CisJCS8qIGFkdmFuY2UgdGhlIHJlYWQgb2Zmc2V0ICovCisJCWNjcC0+cmVhZG9mZnNldCArPSBjb3VudDsKKwkJcmVzdGxlbiAtPSBjb3VudDsKKwkJLy8gcmV1c2UgdGhlIHJlYWQgYnVmZmVyCisJCWlmIChyZXN0bGVuIDw9IDApIHsKKwkJCWF1ZXJidWZfcmVsZWFzZWJ1ZiAoYnApOworCQkJY2NwLT5yZWFkYnVmID0gTlVMTDsKKwkJfQorCQkvKiByZXR1cm4gd2l0aCBudW1iZXIgb2YgYnl0ZXMgcmVhZCAqLworCQlpZiAoY291bnQpIHsKKwkJCXVwICgmY2NwLT5yZWFkbXV0ZXgpOworCQkJdXAgKCZjY3AtPm11dGV4KTsKKwkJCXJldHVybiBjb3VudDsKKwkJfQorCX0KKworCS8qIGEgcmVhZCBidWZmZXIgaXMgbm90IGF2YWlsYWJsZS4gVHJ5IHRvIGdldCB0aGUgbmV4dCBkYXRhIGJsb2NrLiAqLworZG9yZWFkbGlzdDoKKwkvKiBQcmVwYXJpbmcgZm9yIHNsZWVwICovCisJaW5pdF93YWl0cXVldWVfZW50cnkgKCZ3YWl0LCBjdXJyZW50KTsKKwlzZXRfY3VycmVudF9zdGF0ZSAoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlhZGRfd2FpdF9xdWV1ZSAoJmNjcC0+cmVhZHdhaXQsICZ3YWl0KTsKKworCWJwID0gTlVMTDsKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmNjcC0+YnVmY3RsLmxvY2ssIGZsYWdzKTsKKyAgICAgICAgaWYgKCFsaXN0X2VtcHR5ICgmY2NwLT5idWZjdGwucmVjX2J1ZmZfbGlzdCkpIHsKKyAgICAgICAgICAgICAgICAvKiB5ZXM6IGdldCB0aGUgZW50cnkgKi8KKyAgICAgICAgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bXAgPSBjY3AtPmJ1ZmN0bC5yZWNfYnVmZl9saXN0Lm5leHQ7CisgICAgICAgICAgICAgICAgbGlzdF9kZWwgKHRtcCk7CisgICAgICAgICAgICAgICAgYnAgPSBsaXN0X2VudHJ5ICh0bXAsIGF1ZXJidWZfdCwgYnVmZl9saXN0KTsKKyAgICAgICAgfQorICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlICgmY2NwLT5idWZjdGwubG9jaywgZmxhZ3MpOworCisJLyogaGF2ZSB3ZSBnb3QgZGF0YT8gKi8KKwlpZiAoYnApIHsKKwkJY2NwLT5yZWFkYnVmID0gYnA7CisJCWNjcC0+cmVhZG9mZnNldCA9IEFVSF9TSVpFOyAvKiBmb3IgaGVhZGVyYnl0ZSAqLworCQlzZXRfY3VycmVudF9zdGF0ZSAoVEFTS19SVU5OSU5HKTsKKwkJcmVtb3ZlX3dhaXRfcXVldWUgKCZjY3AtPnJlYWR3YWl0LCAmd2FpdCk7CisJCWdvdG8gZG9yZWFkYnVmOwkJICAvKiBub3cgd2UgY2FuIHJlYWQhICovCisJfQorCisJLyogbm8gZGF0YSBhdmFpbGFibGUuIFNob3VsZCB3ZSB3YWl0PyAqLworCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworICAgICAgICAgICAgICAgIGRiZyAoIk5vIHJlYWQgYnVmZmVyIGF2YWlsYWJsZSwgcmV0dXJuaW5nIC1FQUdBSU4iKTsKKwkJc2V0X2N1cnJlbnRfc3RhdGUgKFRBU0tfUlVOTklORyk7CisJCXJlbW92ZV93YWl0X3F1ZXVlICgmY2NwLT5yZWFkd2FpdCwgJndhaXQpOworCQl1cCAoJmNjcC0+cmVhZG11dGV4KTsKKwkJdXAgKCZjY3AtPm11dGV4KTsKKwkJcmV0dXJuIC1FQUdBSU47ICAvKiBub25ibG9ja2luZywgbm8gZGF0YSBhdmFpbGFibGUgKi8KKyAgICAgICAgfQorCisJLyogeWVzLCB3ZSBzaG91bGQgd2FpdCEgKi8KKwl1cCAoJmNjcC0+bXV0ZXgpOyAvKiBhbGxvdyBvdGhlciBvcGVyYXRpb25zIHdoaWxlIHdlIHdhaXQgKi8KKwlzY2hlZHVsZSgpOworCXJlbW92ZV93YWl0X3F1ZXVlICgmY2NwLT5yZWFkd2FpdCwgJndhaXQpOworCWlmIChzaWduYWxfcGVuZGluZyAoY3VycmVudCkpIHsKKwkJLyogd2FrZWQgdXAgYnkgYSBzaWduYWwgKi8KKwkJdXAgKCZjY3AtPnJlYWRtdXRleCk7CisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJfQorCisJLyogQW55dGhpbmcgbGVmdCB0byByZWFkPyAqLworCWlmICgoY2NwLT5zY29udGV4dC5pZCA9PSBBVUhfVU5BU1NJR05FRCkgfHwgY2NwLT5yZW1vdmVkKSB7CisJCXVwICgmY2NwLT5yZWFkbXV0ZXgpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmY2NwLT5tdXRleCkpIHsKKwkJdXAgKCZjY3AtPnJlYWRtdXRleCk7CisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJfQorCisJLyogdHJ5IHRvIHJlYWQgdGhlIGluY29taW5nIGRhdGEgYWdhaW4gKi8KKwlnb3RvIGRvcmVhZGxpc3Q7Cit9CisKKworLyogV3JpdGUgYSBkYXRhIGJsb2NrIGludG8gdGhlIHJpZ2h0IHNlcnZpY2UgY2hhbm5lbCBvZiB0aGUgZGV2aWNlICovCitzdGF0aWMgc3NpemVfdCBhdWVyY2hhcl93cml0ZSAoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKK3sKKwlwYXVlcmNoYXJfdCBjY3AgPSAocGF1ZXJjaGFyX3QpIGZpbGUtPnByaXZhdGVfZGF0YTsKKyAgICAgICAgcGF1ZXJzd2FsZF90IGNwID0gTlVMTDsKKyAgICAgICAgcGF1ZXJidWZfdCBicDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCXdhaXRfcXVldWVfdCB3YWl0OworCisgICAgICAgIGRiZyAoImF1ZXJjaGFyX3dyaXRlICVkIGJ5dGVzIiwgbGVuKTsKKworCS8qIEVycm9yIGNoZWNraW5nICovCisJaWYgKCFjY3ApCisJCXJldHVybiAtRUlPOworICAgICAgICBpZiAoKnBwb3MpCisJCXJldHVybiAtRVNQSVBFOworICAgICAgICBpZiAobGVuID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKK3dyaXRlX2FnYWluOgorCS8qIGdldCB0aGUgbXV0ZXggKi8KKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmY2NwLT5tdXRleCkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwkvKiBDYW4gd2UgZXhwZWN0IHRvIHdyaXRlIHNvbWV0aGluZz8gKi8KKwlpZiAoY2NwLT5zY29udGV4dC5pZCA9PSBBVUhfVU5BU1NJR05FRCkgeworCQl1cCAoJmNjcC0+bXV0ZXgpOworICAgICAgICAgICAgICAgIHJldHVybiAtRUlPOworCX0KKworCWNwID0gY2NwLT5hdWVyZGV2OworCWlmICghY3ApIHsKKwkJdXAgKCZjY3AtPm11dGV4KTsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisJaWYgKGRvd25faW50ZXJydXB0aWJsZSAoJmNwLT5tdXRleCkpIHsKKwkJdXAgKCZjY3AtPm11dGV4KTsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisJaWYgKCFjcC0+dXNiZGV2KSB7CisJCXVwICgmY3AtPm11dGV4KTsKKwkJdXAgKCZjY3AtPm11dGV4KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCS8qIFByZXBhcmUgZm9yIHNsZWVwICovCisJaW5pdF93YWl0cXVldWVfZW50cnkgKCZ3YWl0LCBjdXJyZW50KTsKKwlzZXRfY3VycmVudF9zdGF0ZSAoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlhZGRfd2FpdF9xdWV1ZSAoJmNwLT5idWZmZXJ3YWl0LCAmd2FpdCk7CisKKwkvKiBUcnkgdG8gZ2V0IGEgYnVmZmVyIGZyb20gdGhlIGRldmljZSBwb29sLgorCSAgIFdlIGNhbid0IHVzZSBhIGJ1ZmZlciBmcm9tIGNjcC0+YnVmY3RsIGJlY2F1c2UgdGhlIHdyaXRlCisJICAgY29tbWFuZCB3aWxsIGxhc3QgYmVvbmQgYSByZWxlYXNlKCkgKi8KKwlicCA9IE5VTEw7CisJc3Bpbl9sb2NrX2lycXNhdmUgKCZjcC0+YnVmY3RsLmxvY2ssIGZsYWdzKTsKKyAgICAgICAgaWYgKCFsaXN0X2VtcHR5ICgmY3AtPmJ1ZmN0bC5mcmVlX2J1ZmZfbGlzdCkpIHsKKyAgICAgICAgICAgICAgICAvKiB5ZXM6IGdldCB0aGUgZW50cnkgKi8KKyAgICAgICAgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bXAgPSBjcC0+YnVmY3RsLmZyZWVfYnVmZl9saXN0Lm5leHQ7CisgICAgICAgICAgICAgICAgbGlzdF9kZWwgKHRtcCk7CisgICAgICAgICAgICAgICAgYnAgPSBsaXN0X2VudHJ5ICh0bXAsIGF1ZXJidWZfdCwgYnVmZl9saXN0KTsKKyAgICAgICAgfQorICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlICgmY3AtPmJ1ZmN0bC5sb2NrLCBmbGFncyk7CisKKwkvKiBhcmUgdGhlcmUgYW55IGJ1ZmZlcnMgbGVmdD8gKi8KKwlpZiAoIWJwKSB7CisJCXVwICgmY3AtPm11dGV4KTsKKwkJdXAgKCZjY3AtPm11dGV4KTsKKworCQkvKiBOT05CTE9DSzogZG9uJ3Qgd2FpdCAqLworCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCXNldF9jdXJyZW50X3N0YXRlIChUQVNLX1JVTk5JTkcpOworCQkJcmVtb3ZlX3dhaXRfcXVldWUgKCZjcC0+YnVmZmVyd2FpdCwgJndhaXQpOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKworCQkvKiBCTE9DS0lORzogd2FpdCAqLworCQlzY2hlZHVsZSgpOworCQlyZW1vdmVfd2FpdF9xdWV1ZSAoJmNwLT5idWZmZXJ3YWl0LCAmd2FpdCk7CisJCWlmIChzaWduYWxfcGVuZGluZyAoY3VycmVudCkpIHsKKwkJCS8qIHdha2VkIHVwIGJ5IGEgc2lnbmFsICovCisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQl9CisJCWdvdG8gd3JpdGVfYWdhaW47CisJfSBlbHNlIHsKKwkJc2V0X2N1cnJlbnRfc3RhdGUgKFRBU0tfUlVOTklORyk7CisJCXJlbW92ZV93YWl0X3F1ZXVlICgmY3AtPmJ1ZmZlcndhaXQsICZ3YWl0KTsKKwl9CisKKwkvKiBwcm90ZWN0IGFnYWluc3QgdG9vIGJpZyB3cml0ZSByZXF1ZXN0cyAqLworCWlmIChsZW4gPiBjcC0+bWF4Q29udHJvbExlbmd0aCkKKwkJbGVuID0gY3AtPm1heENvbnRyb2xMZW5ndGg7CisKKwkvKiBGaWxsIHRoZSBidWZmZXIgKi8KKwlpZiAoY29weV9mcm9tX3VzZXIgKCBicC0+YnVmcCtBVUhfU0laRSwgYnVmLCBsZW4pKSB7CisJCWRiZyAoImNvcHlfZnJvbV91c2VyIGZhaWxlZCIpOworCQlhdWVyYnVmX3JlbGVhc2VidWYgKGJwKTsKKwkJLyogV2FrZSB1cCBhbGwgcHJvY2Vzc2VzIHdhaXRpbmcgZm9yIGEgYnVmZmVyICovCisJCXdha2VfdXAgKCZjcC0+YnVmZmVyd2FpdCk7CisJCXVwICgmY3AtPm11dGV4KTsKKwkJdXAgKCZjY3AtPm11dGV4KTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJLyogc2V0IHRoZSBoZWFkZXIgYnl0ZSAqLworICAgICAgICAqKGJwLT5idWZwKSA9IGNjcC0+c2NvbnRleHQuaWQgfCBBVUhfRElSRUNUIHwgQVVIX1VOU1BMSVQ7CisKKwkvKiBTZXQgdGhlIHRyYW5zZmVyIFBhcmFtZXRlcnMgKi8KKwlicC0+bGVuID0gbGVuK0FVSF9TSVpFOworICAgICAgICBicC0+ZHItPmJSZXF1ZXN0VHlwZSA9IEFVVF9XUkVROworCWJwLT5kci0+YlJlcXVlc3QgICAgID0gQVVWX1dCTE9DSzsKKwlicC0+ZHItPndWYWx1ZSAgICAgICA9IGNwdV90b19sZTE2ICgwKTsKKwlicC0+ZHItPndJbmRleCAgICAgICA9IGNwdV90b19sZTE2IChjY3AtPnNjb250ZXh0LmlkIHwgQVVIX0RJUkVDVCB8IEFVSF9VTlNQTElUKTsKKwlicC0+ZHItPndMZW5ndGggICAgICA9IGNwdV90b19sZTE2IChsZW4rQVVIX1NJWkUpOworCXVzYl9maWxsX2NvbnRyb2xfdXJiIChicC0+dXJicCwgY3AtPnVzYmRldiwgdXNiX3NuZGN0cmxwaXBlIChjcC0+dXNiZGV2LCAwKSwKKyAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciopYnAtPmRyLCBicC0+YnVmcCwgbGVuK0FVSF9TSVpFLAorCQkgICAgYXVlcmNoYXJfY3RybHdyaXRlX2NvbXBsZXRlLCBicCk7CisJLyogdXAgd2UgZ28gKi8KKwlyZXQgPSBhdWVyY2hhaW5fc3VibWl0X3VyYiAoJmNwLT5jb250cm9sY2hhaW4sIGJwLT51cmJwKTsKKwl1cCAoJmNwLT5tdXRleCk7CisJaWYgKHJldCkgeworCQlkYmcgKCJhdWVyY2hhcl93cml0ZTogbm9uemVybyByZXN1bHQgb2YgYXVlcmNoYWluX3N1Ym1pdF91cmIgJWQiLCByZXQpOworCQlhdWVyYnVmX3JlbGVhc2VidWYgKGJwKTsKKwkJLyogV2FrZSB1cCBhbGwgcHJvY2Vzc2VzIHdhaXRpbmcgZm9yIGEgYnVmZmVyICovCisJCXdha2VfdXAgKCZjcC0+YnVmZmVyd2FpdCk7CisJCXVwICgmY2NwLT5tdXRleCk7CisJCXJldHVybiAtRUlPOworCX0KKwllbHNlIHsKKwkJZGJnICgiYXVlcmNoYXJfd3JpdGU6IFdyaXRlIE9LIik7CisJCXVwICgmY2NwLT5tdXRleCk7CisJCXJldHVybiBsZW47CisJfQorfQorCisKKy8qIENsb3NlIGEgY2hhcmFjdGVyIGRldmljZSAqLworc3RhdGljIGludCBhdWVyY2hhcl9yZWxlYXNlIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlwYXVlcmNoYXJfdCBjY3AgPSAocGF1ZXJjaGFyX3QpIGZpbGUtPnByaXZhdGVfZGF0YTsKKwlwYXVlcnN3YWxkX3QgY3A7CisJZGJnKCJyZWxlYXNlIik7CisKKwkvKiBnZXQgdGhlIG11dGV4ZXMgKi8KKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmY2NwLT5tdXRleCkpIHsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisJY3AgPSBjY3AtPmF1ZXJkZXY7CisJaWYgKGNwKSB7CisJCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZjcC0+bXV0ZXgpKSB7CisJCQl1cCAoJmNjcC0+bXV0ZXgpOworCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJfQorCQkvKiByZW1vdmUgYW4gb3BlbiBzZXJ2aWNlICovCisJCWF1ZXJzd2FsZF9yZW1vdmVzZXJ2aWNlIChjcCwgJmNjcC0+c2NvbnRleHQpOworCQkvKiBkZXRhY2ggZnJvbSBkZXZpY2UgKi8KKwkJaWYgKCgtLWNwLT5vcGVuX2NvdW50IDw9IDApICYmIChjcC0+dXNiZGV2ID09IE5VTEwpKSB7CisJCQkvKiB1c2IgZGV2aWNlIHdhaXRzIGZvciByZW1vdmFsICovCisJCQl1cCAoJmNwLT5tdXRleCk7CisJCQlhdWVyc3dhbGRfZGVsZXRlIChjcCk7CisJCX0gZWxzZSB7CisJCQl1cCAoJmNwLT5tdXRleCk7CisJCX0KKwkJY3AgPSBOVUxMOworCQljY3AtPmF1ZXJkZXYgPSBOVUxMOworCX0KKwl1cCAoJmNjcC0+bXV0ZXgpOworCWF1ZXJjaGFyX2RlbGV0ZSAoY2NwKTsKKworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBGaWxlIG9wZXJhdGlvbiBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXVlcnN3YWxkX2ZvcHMgPQoreworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5sbHNlZWsgPQlub19sbHNlZWssCisJLnJlYWQgPQkJYXVlcmNoYXJfcmVhZCwKKwkud3JpdGUgPSAgICAgICAgYXVlcmNoYXJfd3JpdGUsCisJLmlvY3RsID0JYXVlcmNoYXJfaW9jdGwsCisJLm9wZW4gPQkJYXVlcmNoYXJfb3BlbiwKKwkucmVsZWFzZSA9CWF1ZXJjaGFyX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgYXVlcnN3YWxkX2NsYXNzID0geworCS5uYW1lID0JCSJ1c2IvYXVlciVkIiwKKwkuZm9wcyA9CQkmYXVlcnN3YWxkX2ZvcHMsCisJLm1vZGUgPQkJU19JRkNIUiB8IFNfSVJVR08gfCBTX0lXVUdPLAorCS5taW5vcl9iYXNlID0JQVVFUl9NSU5PUl9CQVNFLAorfTsKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFNwZWNpYWwgVVNCIGRyaXZlciBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKiBQcm9iZSBpZiB0aGlzIGRyaXZlciB3YW50cyB0byBzZXJ2ZSBhbiBVU0IgZGV2aWNlCisKKyAgIFRoaXMgZW50cnkgcG9pbnQgaXMgY2FsbGVkIHdoZW5ldmVyIGEgbmV3IGRldmljZSBpcyBhdHRhY2hlZCB0byB0aGUgYnVzLgorICAgVGhlbiB0aGUgZGV2aWNlIGRyaXZlciBoYXMgdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGl0cyBpbnRlcm5hbCBkYXRhCisgICBzdHJ1Y3R1cmVzIGZvciB0aGUgbmV3IGRldmljZS4KKworICAgVGhlICBkZXYgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBkZXZpY2UgY29udGV4dCwgd2hpY2ggY29udGFpbnMgcG9pbnRlcnMKKyAgIHRvIGFsbCBVU0IgZGVzY3JpcHRvcnMuIFRoZSAgaW50ZXJmYWNlIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgaW50ZXJmYWNlCisgICBudW1iZXIuIElmIGEgVVNCIGRyaXZlciB3YW50cyB0byBiaW5kIGl0c2VsZiB0byBhIHBhcnRpY3VsYXIgZGV2aWNlIGFuZAorICAgaW50ZXJmYWNlIGl0IGhhcyB0byByZXR1cm4gYSBwb2ludGVyLiBUaGlzIHBvaW50ZXIgbm9ybWFsbHkgcmVmZXJlbmNlcworICAgdGhlIGRldmljZSBkcml2ZXIncyBjb250ZXh0IHN0cnVjdHVyZS4KKworICAgUHJvYmluZyBub3JtYWxseSBpcyBkb25lIGJ5IGNoZWNraW5nIHRoZSB2ZW5kb3IgYW5kIHByb2R1Y3QgaWRlbnRpZmljYXRpb25zCisgICBvciB0aGUgY2xhc3MgYW5kIHN1YmNsYXNzIGRlZmluaXRpb25zLiBJZiB0aGV5IG1hdGNoIHRoZSBpbnRlcmZhY2UgbnVtYmVyCisgICBpcyBjb21wYXJlZCB3aXRoIHRoZSBvbmVzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyLiBXaGVuIHByb2JpbmcgaXMgZG9uZQorICAgY2xhc3MgYmFzZWQgaXQgbWlnaHQgYmUgbmVjZXNzYXJ5IHRvIHBhcnNlIHNvbWUgbW9yZSBVU0IgZGVzY3JpcHRvcnMgYmVjYXVzZQorICAgdGhlIGRldmljZSBwcm9wZXJ0aWVzIGNhbiBkaWZmZXIgaW4gYSB3aWRlIHJhbmdlLgorKi8KK3N0YXRpYyBpbnQgYXVlcnN3YWxkX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJcGF1ZXJzd2FsZF90IGNwID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgdSA9IDA7CisJX19sZTE2ICpwYnVmOworCWludCByZXQ7CisKKwlkYmcgKCJwcm9iZTogdmVuZG9yIGlkIDB4JXgsIGRldmljZSBpZCAweCV4IiwKKwkgICAgIGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJICAgICBsZTE2X3RvX2NwdSh1c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisKKyAgICAgICAgLyogd2UgdXNlIG9ubHkgdGhlIGZpcnN0IC1hbmQgb25seS0gaW50ZXJmYWNlICovCisgICAgICAgIGlmIChpbnRmLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIgIT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2UgYW5kIGluaXRpYWxpemUgaXQgKi8KKwljcCA9IGttYWxsb2MgKHNpemVvZihhdWVyc3dhbGRfdCksIEdGUF9LRVJORUwpOworCWlmIChjcCA9PSBOVUxMKSB7CisJCWVyciAoIm91dCBvZiBtZW1vcnkiKTsKKwkJZ290byBwZmFpbDsKKwl9CisKKwkvKiBJbml0aWFsaXplIGRldmljZSBkZXNjcmlwdG9yICovCisJbWVtc2V0IChjcCwgMCwgc2l6ZW9mKGF1ZXJzd2FsZF90KSk7CisJaW5pdF9NVVRFWCAoJmNwLT5tdXRleCk7CisJY3AtPnVzYmRldiA9IHVzYmRldjsKKwlhdWVyY2hhaW5faW5pdCAoJmNwLT5jb250cm9sY2hhaW4pOworICAgICAgICBhdWVyYnVmX2luaXQgKCZjcC0+YnVmY3RsKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkICgmY3AtPmJ1ZmZlcndhaXQpOworCisJcmV0ID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCAmYXVlcnN3YWxkX2NsYXNzKTsKKwlpZiAocmV0KSB7CisJCWVyciAoIk5vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS4iKTsKKwkJZ290byBwZmFpbDsKKwl9CisKKwkvKiBHaXZlIHRoZSBkZXZpY2UgYSBuYW1lICovCisJc3ByaW50ZiAoY3AtPm5hbWUsICJ1c2IvYXVlciVkIiwgaW50Zi0+bWlub3IpOworCisJLyogU3RvcmUgdGhlIGluZGV4ICovCisJY3AtPmR0aW5kZXggPSBpbnRmLT5taW5vcjsKKworCS8qIEdldCB0aGUgdXNiIHZlcnNpb24gb2YgdGhlIGRldmljZSAqLworCWNwLT52ZXJzaW9uID0gbGUxNl90b19jcHUoY3AtPnVzYmRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworCWRiZyAoIlZlcnNpb24gaXMgJVgiLCBjcC0+dmVyc2lvbik7CisKKwkvKiBhbGxvdyBzb21lIHRpbWUgdG8gc2V0dGxlIHRoZSBkZXZpY2UgKi8KKwltc2xlZXAoMzM0KTsKKworCS8qIFRyeSB0byBnZXQgYSBzdWl0YWJsZSB0ZXh0dWFsIGRlc2NyaXB0aW9uIG9mIHRoZSBkZXZpY2UgKi8KKwkvKiBEZXZpY2UgbmFtZToqLworCXJldCA9IHVzYl9zdHJpbmcoIGNwLT51c2JkZXYsIEFVU0lfREVWSUNFLCBjcC0+ZGV2X2Rlc2MsIEFVU0lfRExFTi0xKTsKKwlpZiAocmV0ID49IDApIHsKKwkJdSArPSByZXQ7CisJCS8qIEFwcGVuZCBTZXJpYWwgTnVtYmVyICovCisJCW1lbWNweSgmY3AtPmRldl9kZXNjW3VdLCAiLFNlciMgIiwgNik7CisJCXUgKz0gNjsKKwkJcmV0ID0gdXNiX3N0cmluZyggY3AtPnVzYmRldiwgQVVTSV9TRVJJQUxOUiwgJmNwLT5kZXZfZGVzY1t1XSwgQVVTSV9ETEVOLXUtMSk7CisJCWlmIChyZXQgPj0gMCkgeworCQkJdSArPSByZXQ7CisJCQkvKiBBcHBlbmQgc3Vic2NyaWJlciBudW1iZXIgKi8KKwkJCW1lbWNweSgmY3AtPmRldl9kZXNjW3VdLCAiLCAiLCAyKTsKKwkJCXUgKz0gMjsKKwkJCXJldCA9IHVzYl9zdHJpbmcoIGNwLT51c2JkZXYsIEFVU0lfTVNOLCAmY3AtPmRldl9kZXNjW3VdLCBBVVNJX0RMRU4tdS0xKTsKKwkJCWlmIChyZXQgPj0gMCkgeworCQkJCXUgKz0gcmV0OworCQkJfQorCQl9CisJfQorCWNwLT5kZXZfZGVzY1t1XSA9ICdcMCc7CisJaW5mbygiZGV2aWNlIGlzIGEgJXMiLCBjcC0+ZGV2X2Rlc2MpOworCisgICAgICAgIC8qIGdldCB0aGUgbWF4aW11bSBhbGxvd2VkIGNvbnRyb2wgdHJhbnNmZXIgbGVuZ3RoICovCisgICAgICAgIHBidWYgPSAoX19sZTE2ICopIGttYWxsb2MgKDIsIEdGUF9LRVJORUwpOyAgICAvKiB1c2UgYW4gYWxsb2NhdGVkIGJ1ZmZlciBiZWNhdXNlIG9mIHVyYiB0YXJnZXQgKi8KKyAgICAgICAgaWYgKCFwYnVmKSB7CisJCWVyciggIm91dCBvZiBtZW1vcnkiKTsKKwkJZ290byBwZmFpbDsKKwl9CisgICAgICAgIHJldCA9IHVzYl9jb250cm9sX21zZyhjcC0+dXNiZGV2LCAgICAgICAgICAgLyogcG9pbnRlciB0byBkZXZpY2UgKi8KKyAgICAgICAgICAgICAgICB1c2JfcmN2Y3RybHBpcGUoIGNwLT51c2JkZXYsIDAgKSwgICAvKiBwaXBlIHRvIGNvbnRyb2wgZW5kcG9pbnQgKi8KKyAgICAgICAgICAgICAgICBBVVZfR0VUSU5GTywgICAgICAgICAgICAgICAgICAgICAgICAvKiBVU0IgbWVzc2FnZSByZXF1ZXN0IHZhbHVlICovCisgICAgICAgICAgICAgICAgQVVUX1JSRVEsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVVNCIG1lc3NhZ2UgcmVxdWVzdCB0eXBlIHZhbHVlICovCisgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVVNCIG1lc3NhZ2UgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICBBVURJX01CQ1RSQU5TLCAgICAgICAgICAgICAgICAgICAgICAvKiBVU0IgbWVzc2FnZSBpbmRleCB2YWx1ZSAqLworICAgICAgICAgICAgICAgIHBidWYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gdGhlIHJlY2VpdmUgYnVmZmVyICovCisgICAgICAgICAgICAgICAgMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIHRoZSBidWZmZXIgKi8KKyAgICAgICAgICAgICAgICAyMDAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGltZSB0byB3YWl0IGZvciB0aGUgbWVzc2FnZSB0byBjb21wbGV0ZSBiZWZvcmUgdGltaW5nIG91dCAqLworICAgICAgICBpZiAocmV0ID09IDIpIHsKKwkgICAgICAgIGNwLT5tYXhDb250cm9sTGVuZ3RoID0gbGUxNl90b19jcHVwKHBidWYpOworICAgICAgICAgICAgICAgIGtmcmVlKHBidWYpOworICAgICAgICAgICAgICAgIGRiZygic2V0dXA6IG1heC4gYWxsb3dlZCBjb250cm9sIHRyYW5zZmVyc2l6ZSBpcyAlZCBieXRlcyIsIGNwLT5tYXhDb250cm9sTGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBrZnJlZShwYnVmKTsKKyAgICAgICAgICAgICAgICBlcnIoInNldHVwOiBnZXR0aW5nIG1heC4gYWxsb3dlZCBjb250cm9sIHRyYW5zZmVyIGxlbmd0aCBmYWlsZWQgd2l0aCBlcnJvciAlZCIsIHJldCk7CisJCWdvdG8gcGZhaWw7CisgICAgICAgIH0KKworCS8qIGFsbG9jYXRlIGEgY2hhaW4gZm9yIHRoZSBjb250cm9sIG1lc3NhZ2VzICovCisgICAgICAgIGlmIChhdWVyY2hhaW5fc2V0dXAgKCZjcC0+Y29udHJvbGNoYWluLCBBVUNIX0VMRU1FTlRTKSkgeworCQllcnIgKCJvdXQgb2YgbWVtb3J5Iik7CisJCWdvdG8gcGZhaWw7CisJfQorCisgICAgICAgIC8qIGFsbG9jYXRlIGJ1ZmZlcnMgZm9yIGNvbnRyb2wgbWVzc2FnZXMgKi8KKwlpZiAoYXVlcmJ1Zl9zZXR1cCAoJmNwLT5idWZjdGwsIEFVX1JCVUZGRVJTLCBjcC0+bWF4Q29udHJvbExlbmd0aCtBVUhfU0laRSkpIHsKKwkJZXJyICgib3V0IG9mIG1lbW9yeSIpOworCQlnb3RvIHBmYWlsOworCX0KKworCS8qIHN0YXJ0IHRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQgKi8KKwlpZiAoYXVlcnN3YWxkX2ludF9vcGVuIChjcCkpIHsKKwkJZXJyICgiaW50IGVuZHBvaW50IGZhaWxlZCIpOworCQlnb3RvIHBmYWlsOworCX0KKworCS8qIGFsbCBPSyAqLworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIGNwKTsKKwlyZXR1cm4gMDsKKworCS8qIEVycm9yIGV4aXQ6IGNsZWFuIHVwIHRoZSBtZW1vcnkgKi8KK3BmYWlsOglhdWVyc3dhbGRfZGVsZXRlIChjcCk7CisJcmV0dXJuIC1FSU87Cit9CisKKworLyogRGlzY29ubmVjdCBkcml2ZXIgZnJvbSBhIHNlcnZlZCBkZXZpY2UKKworICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBkZXZpY2Ugd2hpY2ggd2FzIHNlcnZlZCBieSB0aGlzIGRyaXZlcgorICAgaXMgZGlzY29ubmVjdGVkLgorCisgICBUaGUgYXJndW1lbnQgIGRldiBzcGVjaWZpZXMgdGhlIGRldmljZSBjb250ZXh0IGFuZCB0aGUgIGRyaXZlcl9jb250ZXh0CisgICByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcHJldmlvdXNseSByZWdpc3RlcmVkICBkcml2ZXJfY29udGV4dCBvZiB0aGUKKyAgIHByb2JlIGZ1bmN0aW9uLiBBZnRlciByZXR1cm5pbmcgZnJvbSB0aGUgZGlzY29ubmVjdCBmdW5jdGlvbiB0aGUgVVNCCisgICBmcmFtZXdvcmsgY29tcGxldGVseSBkZWFsbG9jYXRlcyBhbGwgZGF0YSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aAorICAgdGhpcyBkZXZpY2UuIFNvIGVzcGVjaWFsbHkgdGhlIHVzYl9kZXZpY2Ugc3RydWN0dXJlIG11c3Qgbm90IGJlIHVzZWQKKyAgIGFueSBsb25nZXIgYnkgdGhlIHVzYiBkcml2ZXIuCisqLworc3RhdGljIHZvaWQgYXVlcnN3YWxkX2Rpc2Nvbm5lY3QgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXBhdWVyc3dhbGRfdCBjcCA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCXVuc2lnbmVkIGludCB1OworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisJaWYgKCFjcCkKKwkJcmV0dXJuOworCisJZG93biAoJmNwLT5tdXRleCk7CisJaW5mbyAoImRldmljZSAvZGV2LyVzIG5vdyBkaXNjb25uZWN0aW5nIiwgY3AtPm5hbWUpOworCisJLyogZ2l2ZSBiYWNrIG91ciBVU0IgbWlub3IgbnVtYmVyICovCisJdXNiX2RlcmVnaXN0ZXJfZGV2KGludGYsICZhdWVyc3dhbGRfY2xhc3MpOworCisJLyogU3RvcCB0aGUgaW50ZXJydXB0IGVuZHBvaW50ICovCisJYXVlcnN3YWxkX2ludF9yZWxlYXNlIChjcCk7CisKKwkvKiByZW1vdmUgdGhlIGNvbnRyb2wgY2hhaW4gYWxsb2NhdGVkIGluIGF1ZXJzd2FsZF9wcm9iZQorCSAgIFRoaXMgaGFzIHRoZSBiZW5lZml0IG9mCisJICAgYSkgYWxsIHBlbmRpbmcgKGEpc3luY2hyb25vdXMgdXJicyBhcmUgdW5saW5rZWQKKwkgICBiKSBhbGwgYnVmZmVycyBkZWFsaW5nIHdpdGggdXJicyBhcmUgcmVjbGFpbWVkCisJKi8KKwlhdWVyY2hhaW5fZnJlZSAoJmNwLT5jb250cm9sY2hhaW4pOworCisJaWYgKGNwLT5vcGVuX2NvdW50ID09IDApIHsKKwkJLyogbm9ib2R5IGlzIHVzaW5nIHRoaXMgZGV2aWNlLiBTbyB3ZSBjYW4gY2xlYW4gdXAgbm93ICovCisJCXVwICgmY3AtPm11dGV4KTsvKiB1cCgpIGlzIHBvc3NpYmxlIGhlcmUgYmVjYXVzZSBubyBvdGhlciB0YXNrCisJCQkJICAgY2FuIG9wZW4gdGhlIGRldmljZSAoc2VlIGFib3ZlKS4gSSBkb24ndCB3YW50CisJCQkJICAgdG8ga2ZyZWUoKSBhIGxvY2tlZCBtdXRleC4gKi8KKwkJYXVlcnN3YWxkX2RlbGV0ZSAoY3ApOworCX0gZWxzZSB7CisJCS8qIGRldmljZSBpcyB1c2VkLiBSZW1vdmUgdGhlIHBvaW50ZXIgdG8gdGhlCisJCSAgIHVzYiBkZXZpY2UgKGl0J3Mgbm90IHZhbGlkIGFueSBtb3JlKS4gVGhlIGxhc3QKKwkJICAgcmVsZWFzZSgpIHdpbGwgZG8gdGhlIGNsZWFuIHVwICovCisJCWNwLT51c2JkZXYgPSBOVUxMOworCQl1cCAoJmNwLT5tdXRleCk7CisJCS8qIFRlcm1pbmF0ZSB3YWl0aW5nIHdyaXRlcnMgKi8KKwkJd2FrZV91cCAoJmNwLT5idWZmZXJ3YWl0KTsKKwkJLyogSW5mb3JtIGFsbCB3YWl0aW5nIHJlYWRlcnMgKi8KKwkJZm9yICggdSA9IDA7IHUgPCBBVUhfVFlQRVNJWkU7IHUrKykgeworCQkJcGF1ZXJzY29uX3Qgc2NwID0gY3AtPnNlcnZpY2VzW3VdOworCQkJaWYgKHNjcCkKKwkJCQlzY3AtPmRpc2Nvbm5lY3QoIHNjcCk7CisJCX0KKwl9Cit9CisKKy8qIERlc2NyaXB0b3IgZm9yIHRoZSBkZXZpY2VzIHdoaWNoIGFyZSBzZXJ2ZWQgYnkgdGhpcyBkcml2ZXIuCisgICBOT1RFOiB0aGlzIHN0cnVjdCBpcyBwYXJzZWQgYnkgdGhlIHVzYm1hbmFnZXIgaW5zdGFsbCBzY3JpcHRzLgorICAgICAgICAgRG9uJ3QgY2hhbmdlIHdpdGhvdXQgY2F1dGlvbiEKKyovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgYXVlcnN3YWxkX2lkcyBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UgKElEX0FVRVJTV0FMRCwgMHgwMEMwKSB9LCAgICAgICAgICAvKiBDT01wYWN0IDIxMDQgVVNCICovCisJeyBVU0JfREVWSUNFIChJRF9BVUVSU1dBTEQsIDB4MDBEQikgfSwgICAgICAgICAgLyogQ09NcGFjdCA0NDEwLzIyMDYgVVNCICovCisJeyBVU0JfREVWSUNFIChJRF9BVUVSU1dBTEQsIDB4MDBGMSkgfSwgICAgICAgICAgLyogQ29tZm9ydCAyMDAwIFN5c3RlbSBUZWxlcGhvbmUgKi8KKwl7IFVTQl9ERVZJQ0UgKElEX0FVRVJTV0FMRCwgMHgwMEYyKSB9LCAgICAgICAgICAvKiBDb21mb3J0IDEyMDAgU3lzdGVtIFRlbGVwaG9uZSAqLworICAgICAgICB7IH0JCQkgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworLyogU3RhbmRhcmQgbW9kdWxlIGRldmljZSB0YWJsZSAqLworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBhdWVyc3dhbGRfaWRzKTsKKworLyogU3RhbmRhcmQgdXNiIGRyaXZlciBzdHJ1Y3QgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhdWVyc3dhbGRfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJhdWVyc3dhbGQiLAorCS5wcm9iZSA9CWF1ZXJzd2FsZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CWF1ZXJzd2FsZF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWF1ZXJzd2FsZF9pZHMsCit9OworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogTW9kdWxlIGxvYWRpbmcvdW5sb2FkaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIERyaXZlciBpbml0aWFsaXNhdGlvbi4gQ2FsbGVkIGFmdGVyIG1vZHVsZSBsb2FkaW5nLgorICAgTk9URTogdGhlcmUgaXMgbm8gY29uY3VycmVuY3kgYXQgX2luaXQKKyovCitzdGF0aWMgaW50IF9faW5pdCBhdWVyc3dhbGRfaW5pdCAodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCWRiZyAoImluaXQiKTsKKworCS8qIHJlZ2lzdGVyIGRyaXZlciBhdCB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXJlc3VsdCA9IHVzYl9yZWdpc3RlciAoJmF1ZXJzd2FsZF9kcml2ZXIpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWVyciAoImRyaXZlciBjb3VsZCBub3QgYmUgcmVnaXN0ZXJlZCIpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCisvKiBEcml2ZXIgZGVpbml0LiBDYWxsZWQgYmVmb3JlIG1vZHVsZSByZW1vdmFsLgorICAgTk9URTogdGhlcmUgaXMgbm8gY29uY3VycmVuY3kgYXQgX2NsZWFudXAKKyovCitzdGF0aWMgdm9pZCBfX2V4aXQgYXVlcnN3YWxkX2NsZWFudXAgKHZvaWQpCit7CisJZGJnICgiY2xlYW51cCIpOworCXVzYl9kZXJlZ2lzdGVyICgmYXVlcnN3YWxkX2RyaXZlcik7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogTGludXggZGV2aWNlIGRyaXZlciBtb2R1bGUgZGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKK01PRFVMRV9BVVRIT1IgKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OIChEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSAoIkdQTCIpOworCittb2R1bGVfaW5pdCAoYXVlcnN3YWxkX2luaXQpOworbW9kdWxlX2V4aXQgKGF1ZXJzd2FsZF9jbGVhbnVwKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvY3l0aGVybS5jIGIvZHJpdmVycy91c2IvbWlzYy9jeXRoZXJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI2ZTJiMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvY3l0aGVybS5jCkBAIC0wLDAgKzEsNDMwIEBACisvKiAtKi0gbGludXgtYyAtKi0KKyAqIEN5cHJlc3MgVVNCIFRoZXJtb21ldGVyIGRyaXZlciAKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDA0IEVyaWsgUmlndG9ycCA8ZXJra2lAbGludXgubnU+IDxlcmlrQHJpZ3RvcnAuY29tPgorICogCisgKiBUaGlzIGRyaXZlciB3b3JrcyB3aXRoIEVsZWt0b3IgbWFnYXppbmUgVVNCIEludGVyZmFjZSBhcyBwdWJsaXNoZWQgaW4gCisgKiBpc3N1ZSAjMjkxLiBJdCBzaG91bGQgYWxzbyB3b3JrIHdpdGggdGhlIG9yaWdpbmFsIHN0YXJ0ZXIga2l0L2RlbW8gYm9hcmQKKyAqIGZyb20gQ3lwcmVzcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjAiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkVyaWsgUmlndG9ycCIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkN5cHJlc3MgVVNCIFRoZXJtb21ldGVyIGRyaXZlciIKKworI2RlZmluZSBVU0JfU0tFTF9WRU5ET1JfSUQJMHgwNGI0CisjZGVmaW5lIFVTQl9TS0VMX1BST0RVQ1RfSUQJMHgwMDAyCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVVNCX1NLRUxfVkVORE9SX0lELCBVU0JfU0tFTF9QUk9EVUNUX0lEKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOworCisvKiBTdHJ1Y3R1cmUgdG8gaG9sZCBhbGwgb2Ygb3VyIGRldmljZSBzcGVjaWZpYyBzdHVmZiAqLworc3RydWN0IHVzYl9jeXRoZXJtIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAgICAqdWRldjsJIC8qIHNhdmUgb2ZmIHRoZSB1c2IgZGV2aWNlIHBvaW50ZXIgKi8KKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOyAvKiB0aGUgaW50ZXJmYWNlIGZvciB0aGlzIGRldmljZSAqLworCWludCBicmlnaHRuZXNzOworfTsKKworCisvKiBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzICovCitzdGF0aWMgaW50IGN5dGhlcm1fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyB2b2lkIGN5dGhlcm1fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKKworCisvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IG5lZWRlZCB0byByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSB1c2Igc3Vic3lzdGVtICovCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY3l0aGVybV9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImN5dGhlcm0iLAorCS5wcm9iZSA9CWN5dGhlcm1fcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQljeXRoZXJtX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGUsCit9OworCisvKiBWZW5kb3IgcmVxdWVzdHMgKi8KKy8qIFRoZXkgYWxsIG9wZXJhdGUgb24gb25lIGJ5dGUgYXQgYSB0aW1lICovCisjZGVmaW5lIFBJTkcgICAgICAgMHgwMAorI2RlZmluZSBSRUFEX1JPTSAgIDB4MDEgLyogUmVhZHMgZm9ybSBST00sIHZhbHVlID0gYWRkcmVzcyAqLworI2RlZmluZSBSRUFEX1JBTSAgIDB4MDIgLyogUmVhZHMgZm9ybSBSQU0sIHZhbHVlID0gYWRkcmVzcyAqLworI2RlZmluZSBXUklURV9SQU0gIDB4MDMgLyogV3JpdGUgdG8gUkFNLCB2YWx1ZSA9IGFkZHJlc3MsIGluZGV4ID0gZGF0YSAqLworI2RlZmluZSBSRUFEX1BPUlQgIDB4MDQgLyogUmVhZHMgZnJvbSBwb3J0LCB2YWx1ZSA9IGFkZHJlc3MgKi8KKyNkZWZpbmUgV1JJVEVfUE9SVCAweDA1IC8qIFdyaXRlIHRvIHBvcnQsIHZhbHVlID0gYWRkcmVzcywgaW5kZXggPSBkYXRhICovIAorCisKKy8qIFNlbmQgYSB2ZW5kb3IgY29tbWFuZCB0byBkZXZpY2UgKi8KK3N0YXRpYyBpbnQgdmVuZG9yX2NvbW1hbmQoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciByZXF1ZXN0LCAKKwkJCSAgdW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgY2hhciBpbmRleCwKKwkJCSAgdm9pZCAqYnVmLCBpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCisJCQkgICAgICAgcmVxdWVzdCwgCisJCQkgICAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9PVEhFUiwKKwkJCSAgICAgICB2YWx1ZSwgCisJCQkgICAgICAgaW5kZXgsIGJ1Ziwgc2l6ZSwKKwkJCSAgICAgICBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7Cit9CisKKworCisjZGVmaW5lIEJSSUdIVE5FU1MgMHgyYyAgICAgLyogUkFNIGxvY2F0aW9uIGZvciBicmlnaHRuZXNzIHZhbHVlICovCisjZGVmaW5lIEJSSUdIVE5FU1NfU0VNIDB4MmIgLyogUkFNIGxvY2F0aW9uIGZvciBicmlnaHRuZXNzIHNlbWFwaG9yZSAqLworCitzdGF0aWMgc3NpemVfdCBzaG93X2JyaWdodG5lc3Moc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7ICAgIAorCXN0cnVjdCB1c2JfY3l0aGVybSAqY3l0aGVybSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7ICAgICAKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpIiwgY3l0aGVybS0+YnJpZ2h0bmVzcyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9icmlnaHRuZXNzKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCAKKwkJCSAgICAgIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2N5dGhlcm0gKmN5dGhlcm0gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCWludCByZXR2YWw7CisgICAKKwlidWZmZXIgPSBrbWFsbG9jKDgsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIoJmN5dGhlcm0tPnVkZXYtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwljeXRoZXJtLT5icmlnaHRuZXNzID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CisgICAKKwlpZiAoY3l0aGVybS0+YnJpZ2h0bmVzcyA+IDB4RkYpCisJCWN5dGhlcm0tPmJyaWdodG5lc3MgPSAweEZGOworCWVsc2UgaWYgKGN5dGhlcm0tPmJyaWdodG5lc3MgPCAwKQorCQljeXRoZXJtLT5icmlnaHRuZXNzID0gMDsKKyAgIAorCS8qIFNldCBicmlnaHRuZXNzICovCisJcmV0dmFsID0gdmVuZG9yX2NvbW1hbmQoY3l0aGVybS0+dWRldiwgV1JJVEVfUkFNLCBCUklHSFRORVNTLCAKKwkJCQljeXRoZXJtLT5icmlnaHRuZXNzLCBidWZmZXIsIDgpOworCWlmIChyZXR2YWwpCisJCWRldl9kYmcoJmN5dGhlcm0tPnVkZXYtPmRldiwgInJldHZhbCA9ICVkXG4iLCByZXR2YWwpOworCS8qIEluZm9ybSC1QyB0aGF0IHdlIGhhdmUgY2hhbmdlZCB0aGUgYnJpZ2h0bmVzcyBzZXR0aW5nICovCisJcmV0dmFsID0gdmVuZG9yX2NvbW1hbmQoY3l0aGVybS0+dWRldiwgV1JJVEVfUkFNLCBCUklHSFRORVNTX1NFTSwKKwkJCQkweDAxLCBidWZmZXIsIDgpOworCWlmIChyZXR2YWwpCisJCWRldl9kYmcoJmN5dGhlcm0tPnVkZXYtPmRldiwgInJldHZhbCA9ICVkXG4iLCByZXR2YWwpOworICAgCisJa2ZyZWUoYnVmZmVyKTsKKyAgIAorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGJyaWdodG5lc3MsIFNfSVJVR08gfCBTX0lXVVNSIHwgU19JV0dSUCwgCisJCSAgIHNob3dfYnJpZ2h0bmVzcywgc2V0X2JyaWdodG5lc3MpOworCisKKyNkZWZpbmUgVEVNUCAweDMzIC8qIFJBTSBsb2NhdGlvbiBmb3IgdGVtcGVyYXR1cmUgKi8KKyNkZWZpbmUgU0lHTiAweDM0IC8qIFJBTSBsb2NhdGlvbiBmb3IgdGVtcGVyYXR1cmUgc2lnbiAqLworCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2N5dGhlcm0gKmN5dGhlcm0gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisKKwlpbnQgdGVtcCwgc2lnbjsKKyAgIAorCWJ1ZmZlciA9IGttYWxsb2MoOCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VycigmY3l0aGVybS0+dWRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIHJlYWQgdGVtcGVyYXR1cmUgKi8KKwlyZXR2YWwgPSB2ZW5kb3JfY29tbWFuZChjeXRoZXJtLT51ZGV2LCBSRUFEX1JBTSwgVEVNUCwgMCwgYnVmZmVyLCA4KTsKKwlpZiAocmV0dmFsKQorCQlkZXZfZGJnKCZjeXRoZXJtLT51ZGV2LT5kZXYsICJyZXR2YWwgPSAlZFxuIiwgcmV0dmFsKTsKKwl0ZW1wID0gYnVmZmVyWzFdOworICAgCisJLyogcmVhZCBzaWduICovCisJcmV0dmFsID0gdmVuZG9yX2NvbW1hbmQoY3l0aGVybS0+dWRldiwgUkVBRF9SQU0sIFNJR04sIDAsIGJ1ZmZlciwgOCk7CisJaWYgKHJldHZhbCkKKwkJZGV2X2RiZygmY3l0aGVybS0+dWRldi0+ZGV2LCAicmV0dmFsID0gJWRcbiIsIHJldHZhbCk7CisJc2lnbiA9IGJ1ZmZlclsxXTsKKworCWtmcmVlKGJ1ZmZlcik7CisgICAKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlYyVpLiVpIiwgc2lnbiA/ICctJyA6ICcrJywgdGVtcCA+PiAxLAorCQkgICAgICAgNSoodGVtcCAtICgodGVtcCA+PiAxKSA8PCAxKSkpOworfQorCisKK3N0YXRpYyBzc2l6ZV90IHNldF90ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIodGVtcCwgU19JUlVHTywgc2hvd190ZW1wLCBzZXRfdGVtcCk7CisKKworI2RlZmluZSBCVVRUT04gMHg3YQorCitzdGF0aWMgc3NpemVfdCBzaG93X2J1dHRvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfY3l0aGVybSAqY3l0aGVybSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKworCWJ1ZmZlciA9IGttYWxsb2MoOCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VycigmY3l0aGVybS0+dWRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIGNoZWNrIGJ1dHRvbiAqLworCXJldHZhbCA9IHZlbmRvcl9jb21tYW5kKGN5dGhlcm0tPnVkZXYsIFJFQURfUkFNLCBCVVRUT04sIDAsIGJ1ZmZlciwgOCk7CisJaWYgKHJldHZhbCkKKwkJZGV2X2RiZygmY3l0aGVybS0+dWRldi0+ZGV2LCAicmV0dmFsID0gJWRcbiIsIHJldHZhbCk7CisgICAKKwlyZXR2YWwgPSBidWZmZXJbMV07CisKKwlrZnJlZShidWZmZXIpOworCisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiMSIpOworCWVsc2UKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiMCIpOworfQorCisKK3N0YXRpYyBzc2l6ZV90IHNldF9idXR0b24oc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihidXR0b24sIFNfSVJVR08sIHNob3dfYnV0dG9uLCBzZXRfYnV0dG9uKTsKKworCitzdGF0aWMgc3NpemVfdCBzaG93X3BvcnQwKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfY3l0aGVybSAqY3l0aGVybSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKworCWJ1ZmZlciA9IGttYWxsb2MoOCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VycigmY3l0aGVybS0+dWRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAwOworCX0KKworCXJldHZhbCA9IHZlbmRvcl9jb21tYW5kKGN5dGhlcm0tPnVkZXYsIFJFQURfUE9SVCwgMCwgMCwgYnVmZmVyLCA4KTsKKwlpZiAocmV0dmFsKQorCQlkZXZfZGJnKCZjeXRoZXJtLT51ZGV2LT5kZXYsICJyZXR2YWwgPSAlZFxuIiwgcmV0dmFsKTsKKworCXJldHZhbCA9IGJ1ZmZlclsxXTsKKworCWtmcmVlKGJ1ZmZlcik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZCIsIHJldHZhbCk7Cit9CisKKworc3RhdGljIHNzaXplX3Qgc2V0X3BvcnQwKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9jeXRoZXJtICpjeXRoZXJtID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwlpbnQgcmV0dmFsOworCWludCB0bXA7CisgICAKKwlidWZmZXIgPSBrbWFsbG9jKDgsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIoJmN5dGhlcm0tPnVkZXYtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwl0bXAgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKyAgIAorCWlmICh0bXAgPiAweEZGKQorCQl0bXAgPSAweEZGOworCWVsc2UgaWYgKHRtcCA8IDApCisJCXRtcCA9IDA7CisgICAKKwlyZXR2YWwgPSB2ZW5kb3JfY29tbWFuZChjeXRoZXJtLT51ZGV2LCBXUklURV9QT1JULCAwLAorCQkJCXRtcCwgYnVmZmVyLCA4KTsKKwlpZiAocmV0dmFsKQorCQlkZXZfZGJnKCZjeXRoZXJtLT51ZGV2LT5kZXYsICJyZXR2YWwgPSAlZFxuIiwgcmV0dmFsKTsKKworCWtmcmVlKGJ1ZmZlcik7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihwb3J0MCwgU19JUlVHTyB8IFNfSVdVU1IgfCBTX0lXR1JQLCBzaG93X3BvcnQwLCBzZXRfcG9ydDApOworCitzdGF0aWMgc3NpemVfdCBzaG93X3BvcnQxKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfY3l0aGVybSAqY3l0aGVybSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKworCWJ1ZmZlciA9IGttYWxsb2MoOCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VycigmY3l0aGVybS0+dWRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAwOworCX0KKworCXJldHZhbCA9IHZlbmRvcl9jb21tYW5kKGN5dGhlcm0tPnVkZXYsIFJFQURfUE9SVCwgMSwgMCwgYnVmZmVyLCA4KTsKKwlpZiAocmV0dmFsKQorCQlkZXZfZGJnKCZjeXRoZXJtLT51ZGV2LT5kZXYsICJyZXR2YWwgPSAlZFxuIiwgcmV0dmFsKTsKKyAgIAorCXJldHZhbCA9IGJ1ZmZlclsxXTsKKworCWtmcmVlKGJ1ZmZlcik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZCIsIHJldHZhbCk7Cit9CisKKworc3RhdGljIHNzaXplX3Qgc2V0X3BvcnQxKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9jeXRoZXJtICpjeXRoZXJtID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwlpbnQgcmV0dmFsOworCWludCB0bXA7CisgICAKKwlidWZmZXIgPSBrbWFsbG9jKDgsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIoJmN5dGhlcm0tPnVkZXYtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwl0bXAgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKyAgIAorCWlmICh0bXAgPiAweEZGKQorCQl0bXAgPSAweEZGOworCWVsc2UgaWYgKHRtcCA8IDApCisJCXRtcCA9IDA7CisgICAKKwlyZXR2YWwgPSB2ZW5kb3JfY29tbWFuZChjeXRoZXJtLT51ZGV2LCBXUklURV9QT1JULCAxLAorCQkJCXRtcCwgYnVmZmVyLCA4KTsKKwlpZiAocmV0dmFsKQorCQlkZXZfZGJnKCZjeXRoZXJtLT51ZGV2LT5kZXYsICJyZXR2YWwgPSAlZFxuIiwgcmV0dmFsKTsKKworCWtmcmVlKGJ1ZmZlcik7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihwb3J0MSwgU19JUlVHTyB8IFNfSVdVU1IgfCBTX0lXR1JQLCBzaG93X3BvcnQxLCBzZXRfcG9ydDEpOworCisKKworc3RhdGljIGludCBjeXRoZXJtX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiX2N5dGhlcm0gKmRldiA9IE5VTEw7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisKKwlkZXYgPSBrbWFsbG9jIChzaXplb2Yoc3RydWN0IHVzYl9jeXRoZXJtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRldiA9PSBOVUxMKSB7CisJCWRldl9lcnIgKCZpbnRlcmZhY2UtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQlnb3RvIGVycm9yOworCX0KKwltZW1zZXQgKGRldiwgMHgwMCwgc2l6ZW9mICgqZGV2KSk7CisKKwlkZXYtPnVkZXYgPSB1c2JfZ2V0X2Rldih1ZGV2KTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGVyZmFjZSwgZGV2KTsKKworCWRldi0+YnJpZ2h0bmVzcyA9IDB4RkY7CisKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfYnJpZ2h0bmVzcyk7ICAgCisJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3RlbXApOworCWRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9idXR0b24pOworCWRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9wb3J0MCk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3BvcnQxKTsKKworCWRldl9pbmZvICgmaW50ZXJmYWNlLT5kZXYsIAorCQkgICJDeXByZXNzIHRoZXJtb21ldGVyIGRldmljZSBub3cgYXR0YWNoZWRcbiIpOworCXJldHVybiAwOworCisgZXJyb3I6CisJa2ZyZWUoZGV2KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBjeXRoZXJtX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2N5dGhlcm0gKmRldjsKKworCWRldiA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGVyZmFjZSk7CisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZXJmYWNlLCBOVUxMKTsKKworCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9icmlnaHRuZXNzKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfdGVtcCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2J1dHRvbik7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3BvcnQwKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfcG9ydDEpOworCisJdXNiX3B1dF9kZXYoZGV2LT51ZGV2KTsKKworCWtmcmVlKGRldik7CisKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJDeXByZXNzIHRoZXJtb21ldGVyIG5vdyBkaXNjb25uZWN0ZWRcbiIpOworfQorCisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9jeXRoZXJtX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZjeXRoZXJtX2RyaXZlcik7CisJaWYgKHJlc3VsdCkgCisJewkKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzYl9jeXRoZXJtX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmY3l0aGVybV9kcml2ZXIpOworfQorCisKK21vZHVsZV9pbml0ICh1c2JfY3l0aGVybV9pbml0KTsKK21vZHVsZV9leGl0ICh1c2JfY3l0aGVybV9leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2VtaTI2LmMgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTI2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgxNTUyMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pMjYuYwpAQCAtMCwwICsxLDI1NSBAQAorLyogCisgKiBFbWFnaWMgRU1JIDJ8NiB1c2IgYXVkaW8gaW50ZXJmYWNlIGZpcm13YXJlIGxvYWRlci4KKyAqIENvcHlyaWdodCAoQykgMjAwMgorICogCVRhcGlvIExheHN0cvZtICh0YXBpby5sYXhzdHJvbUBpcHRpbWUuZmkpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICogCisgKiBlbWkyNi5jLHYgMS4xMyAyMDAyLzAzLzA4IDEzOjEwOjI2IHRhcGlvIEV4cAorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjZGVmaW5lIE1BWF9JTlRFTF9IRVhfUkVDT1JEX0xFTkdUSCAxNgordHlwZWRlZiBzdHJ1Y3QgX0lOVEVMX0hFWF9SRUNPUkQKK3sKKwlfX3UzMglsZW5ndGg7CisJX191MzIJYWRkcmVzczsKKwlfX3UzMgl0eXBlOworCV9fdTgJZGF0YVtNQVhfSU5URUxfSEVYX1JFQ09SRF9MRU5HVEhdOworfSBJTlRFTF9IRVhfUkVDT1JELCAqUElOVEVMX0hFWF9SRUNPUkQ7CisKKy8qIGluY2x1ZGUgZmlybXdhcmUgKHZhcmlhYmxlcykgKi8KKyNpbmNsdWRlICJlbWkyNl9mdy5oIgorCisjZGVmaW5lIEVNSTI2X1ZFTkRPUl9JRCAJCTB4MDg2YSAgLyogRW1hZ2ljIFNvZnQtdW5kIEhhcmR3YXJlIEdtQkggKi8KKyNkZWZpbmUgRU1JMjZfUFJPRFVDVF9JRAkJMHgwMTAwCS8qIEVNSSAyfDYgd2l0aG91dCBmaXJtd2FyZSAqLworI2RlZmluZSBFTUkyNkJfUFJPRFVDVF9JRAkJMHgwMTAyCS8qIEVNSSAyfDYgd2l0aG91dCBmaXJtd2FyZSAqLworCisjZGVmaW5lIEFOQ0hPUl9MT0FEX0lOVEVSTkFMCTB4QTAJLyogVmVuZG9yIHNwZWNpZmljIHJlcXVlc3QgY29kZSBmb3IgQW5jaG9yIFVwbG9hZC9Eb3dubG9hZCAoVGhpcyBvbmUgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGNvcmUpICovCisjZGVmaW5lIEFOQ0hPUl9MT0FEX0VYVEVSTkFMCTB4QTMJLyogVGhpcyBjb21tYW5kIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgY29yZS4gUmVxdWlyZXMgZmlybXdhcmUgKi8KKyNkZWZpbmUgQU5DSE9SX0xPQURfRlBHQQkweEE1CS8qIFRoaXMgY29tbWFuZCBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvcmUuIFJlcXVpcmVzIGZpcm13YXJlLiBFbWFnaWMgZXh0ZW5zaW9uICovCisjZGVmaW5lIE1BWF9JTlRFUk5BTF9BRERSRVNTCTB4MUIzRgkvKiBUaGlzIGlzIHRoZSBoaWdoZXN0IGludGVybmFsIFJBTSBhZGRyZXNzIGZvciB0aGUgQU4yMTMxUSAqLworI2RlZmluZSBDUFVDU19SRUcJCTB4N0Y5MiAgLyogRVotVVNCIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3Rlci4gIEJpdCAwIGNvbnRyb2xzIDgwNTEgcmVzZXQgKi8gCisjZGVmaW5lIElOVEVSTkFMX1JBTShhZGRyZXNzKSAgIChhZGRyZXNzIDw9IE1BWF9JTlRFUk5BTF9BRERSRVNTKQorCitzdGF0aWMgaW50IGVtaTI2X3dyaXRlbWVtb3J5KCBzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgYWRkcmVzcywgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbmd0aCwgX191OCBiUmVxdWVzdCk7CitzdGF0aWMgaW50IGVtaTI2X3NldF9yZXNldChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlc2V0X2JpdCk7CitzdGF0aWMgaW50IGVtaTI2X2xvYWRfZmlybXdhcmUgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBlbWkyNl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyB2b2lkIGVtaTI2X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworc3RhdGljIGludCBfX2luaXQgZW1pMjZfaW5pdCAodm9pZCk7CitzdGF0aWMgdm9pZCBfX2V4aXQgZW1pMjZfZXhpdCAodm9pZCk7CisKKworLyogdGhhbmtzIHRvIGRyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jIGNvZGUgKi8KK3N0YXRpYyBpbnQgZW1pMjZfd3JpdGVtZW1vcnkgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBhZGRyZXNzLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuZ3RoLCBfX3U4IHJlcXVlc3QpCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXIgPSAga21hbGxvYyAobGVuZ3RoLCBHRlBfS0VSTkVMKTsKKworCWlmICghYnVmZmVyKSB7CisJCWVycigiZW1pMjY6IGttYWxsb2MoJWQpIGZhaWxlZC4iLCBsZW5ndGgpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtY3B5IChidWZmZXIsIGRhdGEsIGxlbmd0aCk7CisJLyogTm90ZTogdXNiX2NvbnRyb2xfbXNnIHJldHVybnMgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3Igb3IgbGVuZ3RoIG9mIHRoZQorCSAqIAkJIGRhdGEgdGhhdCB3YXMgd3JpdHRlbiEgKi8KKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIHJlcXVlc3QsIDB4NDAsIGFkZHJlc3MsIDAsIGJ1ZmZlciwgbGVuZ3RoLCAzMDApOworCWtmcmVlIChidWZmZXIpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIHRoYW5rcyB0byBkcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYyBjb2RlICovCitzdGF0aWMgaW50IGVtaTI2X3NldF9yZXNldCAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciByZXNldF9iaXQpCit7CisJaW50IHJlc3BvbnNlOworCWluZm8oIiVzIC0gJWQiLCBfX0ZVTkNUSU9OX18sIHJlc2V0X2JpdCk7CisJLyogcHJpbnRrKEtFUk5fREVCVUcgIiVzIC0gJWQiLCBfX0ZVTkNUSU9OX18sIHJlc2V0X2JpdCk7ICovCisJcmVzcG9uc2UgPSBlbWkyNl93cml0ZW1lbW9yeSAoZGV2LCBDUFVDU19SRUcsICZyZXNldF9iaXQsIDEsIDB4YTApOworCWlmIChyZXNwb25zZSA8IDApIHsKKwkJZXJyKCJlbWkyNjogc2V0X3Jlc2V0ICglZCkgZmFpbGVkIiwgcmVzZXRfYml0KTsKKwl9CisJcmV0dXJuIHJlc3BvbnNlOworfQorCisjZGVmaW5lIEZXX0xPQURfU0laRQkJMTAyMworCitzdGF0aWMgaW50IGVtaTI2X2xvYWRfZmlybXdhcmUgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJaW50IGVycjsKKwlpbnQgaTsKKwlpbnQgcG9zID0gMDsJLyogUG9zaXRpb24gaW4gaGV4IHJlY29yZCAqLworCV9fdTMyIGFkZHI7CS8qIEFkZHJlc3MgdG8gd3JpdGUgKi8KKwlfX3U4ICpidWY7CisKKwlidWYgPSBrbWFsbG9jKEZXX0xPQURfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJZXJyKCAiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCAtRU5PTUVNKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byB3cmFwZXJyOworCX0KKworCS8qIEFzc2VydCByZXNldCAoc3RvcCB0aGUgQ1BVIGluIHRoZSBFTUkpICovCisJZXJyID0gZW1pMjZfc2V0X3Jlc2V0KGRldiwxKTsKKwlpZiAoZXJyIDwgMCkgeworCQllcnIoICIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCWdvdG8gd3JhcGVycjsKKwl9CisKKwkvKiAxLiBXZSBuZWVkIHRvIHB1dCB0aGUgbG9hZGVyIGZvciB0aGUgRlBHQSBpbnRvIHRoZSBFWi1VU0IgKi8KKwlmb3IgKGk9MDsgZ19Mb2FkZXJbaV0udHlwZSA9PSAwOyBpKyspIHsKKwkJZXJyID0gZW1pMjZfd3JpdGVtZW1vcnkoZGV2LCBnX0xvYWRlcltpXS5hZGRyZXNzLCBnX0xvYWRlcltpXS5kYXRhLCBnX0xvYWRlcltpXS5sZW5ndGgsIEFOQ0hPUl9MT0FEX0lOVEVSTkFMKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQkJZ290byB3cmFwZXJyOworCQl9CisJfQorCisJLyogRGUtYXNzZXJ0IHJlc2V0IChsZXQgdGhlIENQVSBydW4pICovCisJZXJyID0gZW1pMjZfc2V0X3Jlc2V0KGRldiwwKTsKKworCS8qIDIuIFdlIHVwbG9hZCB0aGUgRlBHQSBmaXJtd2FyZSBpbnRvIHRoZSBFTUkKKwkgKiBOb3RlOiBjb2xsZWN0IHVwIHRvIDEwMjMgKHllcyEpIGJ5dGVzIGFuZCBzZW5kIHRoZW0gd2l0aAorCSAqIGEgc2luZ2xlIHJlcXVlc3QuIFRoaXMgaXMgX211Y2hfIGZhc3RlciEgKi8KKwlkbyB7CisJCWkgPSAwOworCQlhZGRyID0gZ19iaXRzdHJlYW1bcG9zXS5hZGRyZXNzOworCisJCS8qIGludGVsIGhleCByZWNvcmRzIGFyZSB0ZXJtaW5hdGVkIHdpdGggdHlwZSAwIGVsZW1lbnQgKi8KKwkJd2hpbGUgKChnX2JpdHN0cmVhbVtwb3NdLnR5cGUgPT0gMCkgJiYgKGkgKyBnX2JpdHN0cmVhbVtwb3NdLmxlbmd0aCA8IEZXX0xPQURfU0laRSkpIHsKKwkJCW1lbWNweShidWYgKyBpLCBnX2JpdHN0cmVhbVtwb3NdLmRhdGEsIGdfYml0c3RyZWFtW3Bvc10ubGVuZ3RoKTsKKwkJCWkgKz0gZ19iaXRzdHJlYW1bcG9zXS5sZW5ndGg7CisJCQlwb3MrKzsKKwkJfQorCQllcnIgPSBlbWkyNl93cml0ZW1lbW9yeShkZXYsIGFkZHIsIGJ1ZiwgaSwgQU5DSE9SX0xPQURfRlBHQSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJCWdvdG8gd3JhcGVycjsKKwkJfQorCX0gd2hpbGUgKGkgPiAwKTsKKworCS8qIEFzc2VydCByZXNldCAoc3RvcCB0aGUgQ1BVIGluIHRoZSBFTUkpICovCisJZXJyID0gZW1pMjZfc2V0X3Jlc2V0KGRldiwxKTsKKwlpZiAoZXJyIDwgMCkgeworCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJZ290byB3cmFwZXJyOworCX0KKworCS8qIDMuIFdlIG5lZWQgdG8gcHV0IHRoZSBsb2FkZXIgZm9yIHRoZSBmaXJtd2FyZSBpbnRvIHRoZSBFWi1VU0IgKGFnYWluLi4uKSAqLworCWZvciAoaT0wOyBnX0xvYWRlcltpXS50eXBlID09IDA7IGkrKykgeworCQllcnIgPSBlbWkyNl93cml0ZW1lbW9yeShkZXYsIGdfTG9hZGVyW2ldLmFkZHJlc3MsIGdfTG9hZGVyW2ldLmRhdGEsIGdfTG9hZGVyW2ldLmxlbmd0aCwgQU5DSE9SX0xPQURfSU5URVJOQUwpOworCQlpZiAoZXJyIDwgMCkgeworCQkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCQlnb3RvIHdyYXBlcnI7CisJCX0KKwl9CisKKwkvKiBEZS1hc3NlcnQgcmVzZXQgKGxldCB0aGUgQ1BVIHJ1bikgKi8KKwllcnIgPSBlbWkyNl9zZXRfcmVzZXQoZGV2LDApOworCWlmIChlcnIgPCAwKSB7CisJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQlnb3RvIHdyYXBlcnI7CisJfQorCisJLyogNC4gV2UgcHV0IHRoZSBwYXJ0IG9mIHRoZSBmaXJtd2FyZSB0aGF0IGxpZXMgaW4gdGhlIGV4dGVybmFsIFJBTSBpbnRvIHRoZSBFWi1VU0IgKi8KKwlmb3IgKGk9MDsgZ19GaXJtd2FyZVtpXS50eXBlID09IDA7IGkrKykgeworCQlpZiAoIUlOVEVSTkFMX1JBTShnX0Zpcm13YXJlW2ldLmFkZHJlc3MpKSB7CisJCQllcnIgPSBlbWkyNl93cml0ZW1lbW9yeShkZXYsIGdfRmlybXdhcmVbaV0uYWRkcmVzcywgZ19GaXJtd2FyZVtpXS5kYXRhLCBnX0Zpcm13YXJlW2ldLmxlbmd0aCwgQU5DSE9SX0xPQURfRVhURVJOQUwpOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJCQlnb3RvIHdyYXBlcnI7CisJCQl9CisJCX0KKwl9CisJCisJLyogQXNzZXJ0IHJlc2V0IChzdG9wIHRoZSBDUFUgaW4gdGhlIEVNSSkgKi8KKwllcnIgPSBlbWkyNl9zZXRfcmVzZXQoZGV2LDEpOworCWlmIChlcnIgPCAwKSB7CisJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQlnb3RvIHdyYXBlcnI7CisJfQorCisJZm9yIChpPTA7IGdfRmlybXdhcmVbaV0udHlwZSA9PSAwOyBpKyspIHsKKwkJaWYgKElOVEVSTkFMX1JBTShnX0Zpcm13YXJlW2ldLmFkZHJlc3MpKSB7CisJCQllcnIgPSBlbWkyNl93cml0ZW1lbW9yeShkZXYsIGdfRmlybXdhcmVbaV0uYWRkcmVzcywgZ19GaXJtd2FyZVtpXS5kYXRhLCBnX0Zpcm13YXJlW2ldLmxlbmd0aCwgQU5DSE9SX0xPQURfSU5URVJOQUwpOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJCQlnb3RvIHdyYXBlcnI7CisJCQl9CisJCX0KKwl9CisKKwkvKiBEZS1hc3NlcnQgcmVzZXQgKGxldCB0aGUgQ1BVIHJ1bikgKi8KKwllcnIgPSBlbWkyNl9zZXRfcmVzZXQoZGV2LDApOworCWlmIChlcnIgPCAwKSB7CisJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQlnb3RvIHdyYXBlcnI7CisJfQorCisJLyogcmV0dXJuIDEgdG8gZmFpbCB0aGUgZHJpdmVyIGluaWFsaXphdGlvbgorCSAqIGFuZCBnaXZlIHJlYWwgZHJpdmVyIGNoYW5nZSB0byBsb2FkICovCisJZXJyID0gMTsKKword3JhcGVycjoKKwlrZnJlZShidWYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoRU1JMjZfVkVORE9SX0lELCBFTUkyNl9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShFTUkyNl9WRU5ET1JfSUQsIEVNSTI2Ql9QUk9EVUNUX0lEKSB9LAorCXsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlKTsKKworc3RhdGljIGludCBlbWkyNl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCisJaW5mbygiJXMgc3RhcnQiLCBfX0ZVTkNUSU9OX18pOyAKKworCWVtaTI2X2xvYWRfZmlybXdhcmUoZGV2KTsKKworCS8qIGRvIG5vdCByZXR1cm4gdGhlIGRyaXZlciBjb250ZXh0LCBsZXQgcmVhbCBhdWRpbyBkcml2ZXIgZG8gdGhhdCAqLworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgdm9pZCBlbWkyNl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZW1pMjZfZHJpdmVyID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJPSAiZW1pMjYgLSBmaXJtd2FyZSBsb2FkZXIiLAorCS5wcm9iZQkJPSBlbWkyNl9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IGVtaTI2X2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlCT0gaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBlbWkyNl9pbml0ICh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmVtaTI2X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBlbWkyNl9leGl0ICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgmZW1pMjZfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZW1pMjZfaW5pdCk7Cittb2R1bGVfZXhpdChlbWkyNl9leGl0KTsKKworTU9EVUxFX0FVVEhPUigidGFwaW8gbGF4c3Ry9m0iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRW1hZ2ljIEVNSSAyfDYgZmlybXdhcmUgbG9hZGVyLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiB2aTphaTpzeW50YXg9Yzpzdz04OnRzPTg6dHc9ODAKKyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9lbWkyNl9mdy5oIGIvZHJpdmVycy91c2IvbWlzYy9lbWkyNl9mdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0N2ZmMTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTI2X2Z3LmgKQEAgLTAsMCArMSw1Nzc5IEBACisvKgorICogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHRocmVlIGRpZmZlcmVudCBmaWxlcywgcHJvdmlkZWQgYnkgRW1hZ2ljLgorICovCisvKiBnZW5lcmF0ZWQgRnJpIE1hciA4IDE1OjExOjM1IEVFVCAyMDAyICovCisKKy8qCisgKiBUaGlzIGZpcm13YXJlIGlzIGZvciB0aGUgRW1hZ2ljIEVNSSAyfDYgQXVkaW8gSW50ZXJmYWNlCisgKgorICogVGhlIGZpcm13YXJlIGNvbnRhaW5lZCBoZXJlaW4gaXMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDIgRW1hZ2ljCisgKiBhcyBhbiB1bnB1Ymxpc2hlZCB3b3JrLiBUaGlzIG5vdGljZSBkb2VzIG5vdCBpbXBseSB1bnJlc3RyaWN0ZWQKKyAqIG9yIHB1YmxpYyBhY2Nlc3MgdG8gdGhpcyBmaXJtd2FyZSB3aGljaCBpcyBhIHRyYWRlIHNlY3JldCBvZiBFbWFnaWMsCisgKiBhbmQgd2hpY2ggbWF5IG5vdCBiZSByZXByb2R1Y2VkLCB1c2VkLCBzb2xkIG9yIHRyYW5zZmVycmVkIHRvCisgKiBhbnkgdGhpcmQgcGFydHkgd2l0aG91dCBFbWFnaWMncyB3cml0dGVuIGNvbnNlbnQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIAorICogaW1hZ2UgYXMgcGFydCBvZiBhIExpbnV4IG9yIG90aGVyIE9wZW4gU291cmNlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIAorICogaW4gdGV4dCBvciBiaW5hcnkgZm9ybSBhcyByZXF1aXJlZC4gCisgKgorICogVGhpcyBmaXJtd2FyZSBtYXkgbm90IGJlIG1vZGlmaWVkIGFuZCBtYXkgb25seSBiZSB1c2VkIHdpdGggdGhlCisgKiBFbWFnaWMgRU1JIDJ8NiBBdWRpbyBJbnRlcmZhY2UuIERpc3RyaWJ1dGlvbiBhbmQvb3IgTW9kaWZpY2F0aW9uIG9mCisgKiBhbnkgZHJpdmVyIHdoaWNoIGluY2x1ZGVzIHRoaXMgZmlybXdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQsCisgKiByZXF1aXJlcyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3RhdGVtZW50LgorICovCitzdGF0aWMgSU5URUxfSEVYX1JFQ09SRCBnX2JpdHN0cmVhbVtdPXsKK3sgIDE2LCAweDgwMTAsIDAsIHsweGZmLDB4ZmYsMHhmZiwweGZmLDB4YWEsMHg5OSwweDU1LDB4NjYsMHgzMCwweDAwLDB4ODAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDA3IH0gfSwKK3sgIDE2LCAweDgwMjAsIDAsIHsweDMwLDB4MDEsMHg2MCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MGIsMHgzMCwweDAxLDB4MjAsMHgwMSwweDAwLDB4ODAsMHgzZiwweDJkIH0gfSwKK3sgIDE2LCAweDgwMzAsIDAsIHsweDMwLDB4MDAsMHhjMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4ODAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDA5IH0gfSwKK3sgIDE2LCAweDgwNDAsIDAsIHsweDMwLDB4MDAsMHgyMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4ODAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAxIH0gfSwKK3sgIDE2LCAweDgwNTAsIDAsIHsweDMwLDB4MDAsMHg0MCwweDAwLDB4NTAsMHgwMCwweDNlLDB4MDQsMHgwOCwweDEyLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgwNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgwNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA0IH0gfSwKK3sgIDE2LCAweDgwODAsIDAsIHsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEyLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgwOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgwYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDg0IH0gfSwKK3sgIDE2LCAweDgwYjAsIDAsIHsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgwYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgwZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwIH0gfSwKK3sgIDE2LCAweDgwZTAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgwZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxMTAsIDAsIHsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0IH0gfSwKK3sgIDE2LCAweDgxNDAsIDAsIHsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxNzAsIDAsIHsweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg0IH0gfSwKK3sgIDE2LCAweDgxYTAsIDAsIHsweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmNywweDEwLDB4MDEsMHgxNCwweDAwLDB4MjUsMHgwMCwweDA1IH0gfSwKK3sgIDE2LCAweDgxYjAsIDAsIHsweDQwLDB4MDEsMHg1MCwweDAwLDB4OTQsMHgwMCwweDE1LDB4MDAsMHgwNywweDQwLDB4MDEsMHhkMCwweDAwLDB4OTQsMHgwMCwweDI1IH0gfSwKK3sgIDE2LCAweDgxYzAsIDAsIHsweDgwLDB4MDEsMHg2MCwweDAyLDB4ZDgsMHgwMCwweGY2LDB4MDAsMHgyZiwweDgwLDB4MDIsMHhlMCwweDA0LDB4ZDgsMHgzNywweDQ0IH0gfSwKK3sgIDE2LCAweDgxZDAsIDAsIHsweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZjIsMHgwMCwweGNjLDB4OTAsMHgzOSwweDIwIH0gfSwKK3sgIDE2LCAweDgxZTAsIDAsIHsweDBkLDB4OTgsMHgwMywweGQyLDB4MDAsMHhlNywweDgwLDB4MzcsMHgwNCwweDBlLDB4ZjEsMHg4MywweDdlLDB4MDAsMHhkZiwweDkwIH0gfSwKK3sgIDE2LCAweDgxZjAsIDAsIHsweDMxLDB4ZTQsMHg4ZiwweDc5LDB4MDMsMHg3YywweDIwLDB4ZGYsMHgyMiwweDMzLDB4YzAsMHgwYywweGYwLDB4MjIsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweDgyMDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4NjIsMHgwMCwweDgwLDB4MjQsMHgyMiwweDIwIH0gfSwKK3sgIDE2LCAweDgyMTAsIDAsIHsweDA4LDB4OTgsMHgxMiwweGUyLDB4MDAsMHg4YiwweDgxLDB4MjAsMHg5NCwweDA4LDB4NzQsMHgwMiwweDJlLDB4MDAsMHg4YSwweDAxIH0gfSwKK3sgIDE2LCAweDgyMjAsIDAsIHsweDIyLDB4YzgsMHgwOCwweDkyLDB4MDIsMHgzZCwweDgwLDB4OGIsMHg2MCwweDIyLDB4ODAsMHgwOCwweGIwLDB4MDIsMHgyMCwweDA0IH0gfSwKK3sgIDE2LCAweDgyMzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzgsMHgwMCwweGEwLDB4MDAsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweDgyNDAsIDAsIHsweDBiLDB4MTAsMHgwMiwweGMwLDB4MDAsMHhhMSwweDAwLDB4MjQsMHgwOSwweDRhLDB4MzIsMHgwMiwweDQ4LDB4MDAsMHhiMSwweDAwIH0gfSwKK3sgIDE2LCAweDgyNTAsIDAsIHsweDYyLDB4YzAsMHgwOSwweGEwLDB4NDYsMHhjYywweDI0LDB4OTMsMHg0OSwweDJhLDB4ODAsMHg0OCwweDMwLDB4MjIsMHg2MiwweDAxIH0gfSwKK3sgIDE2LCAweDgyNjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDE1LDB4YTgsMHgxMiwweGE4LDB4MDAsMHgyMiwweDAwIH0gfSwKK3sgIDE2LCAweDgyNzAsIDAsIHsweDA4LDB4OTAsMHgwMiwweGUwLDB4MDAsMHg4OSwweDgwLDB4MjIsMHg0NCwweDA4LDB4YjAsMHgxMiwweGE4LDB4MDAsMHhhOSwweDQwIH0gfSwKK3sgIDE2LCAweDgyODAsIDAsIHsweDIyLDB4YzAsMHgwOCwweDkwLDB4ODIsMHhhYywweDAwLDB4OWIsMHgwNCwweDJhLDB4YzQsMHgwOCwweGIwLDB4MDIsMHg3MCwweDA0IH0gfSwKK3sgIDE2LCAweDgyOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE0LDB4ODQsMHgwMCwweGU5LDB4ODAsMHhiMiwweDY0IH0gfSwKK3sgIDE2LCAweDgyYTAsIDAsIHsweDRkLDB4YTAsMHgwMywweGVhLDB4MjAsMHhlOSwweGMwLDB4MzYsMHg0MCwweDBlLDB4YjAsMHgwMywweDQ0LDB4MDAsMHhmYiwweDkwIH0gfSwKK3sgIDE2LCAweDgyYjAsIDAsIHsweGIyLDB4ODgsMHgwZCwweGJjLDB4MDMsMHhlYywweDA4LDB4NWIsMHgwMCwweDM4LDB4NjAsMHgyYywweGIwLDB4NjMsMHg0MCwweDA0IH0gfSwKK3sgIDE2LCAweDgyYzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4YjQsMHgyNiwweGRkLDB4OTAsMHgzNywweDQwIH0gfSwKK3sgIDE2LCAweDgyZDAsIDAsIHsweDRmLDB4ZTAsMHgxMywweGYyLDB4ODAsMHhmZCwweDAwLDB4M2QsMHhhMCwweDBkLDB4NzAsMHgwMywweDc1LDB4MDAsMHg1ZSwweDAwIH0gfSwKK3sgIDE2LCAweDgyZTAsIDAsIHsweDNmLDB4YTQsMHgwZCwweGY5LDB4MDMsMHg1YywweDEwLDB4ZWIsMHgwMCwweDM3LDB4MjAsMHgwZiwweDMwLDB4MDMsMHhiOCwweDAwIH0gfSwKK3sgIDE2LCAweDgyZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGU5LDB4ODAsMHgzMiwweDQwIH0gfSwKK3sgIDE2LCAweDgzMDAsIDAsIHsweDBjLDB4YTEsMHg4MywweGU4LDB4MDAsMHhlOSwweDAwLDB4MzIsMHg0MiwweDBlLDB4YjAsMHgwMywweGFjLDB4NDgsMHhlOSwweDAwIH0gfSwKK3sgIDE2LCAweDgzMTAsIDAsIHsweDNhLDB4ODAsMHgwZSwweGE0LDB4MDMsMHhlYywweDAwLDB4ZWIsMHgwMCwweGIyLDB4MDMsMHgwZSwweGIwLDB4MGIsMHgxMCwweDA0IH0gfSwKK3sgIDE2LCAweDgzMjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4MmUsMHg4MCwweDg5LDB4ZDEsMHgyMCwweDQwIH0gfSwKK3sgIDE2LCAweDgzMzAsIDAsIHsweDA4LDB4YTAsMHgwMiwweGMwLDB4MDAsMHg4MSwweDgwLDB4MjIsMHg1OCwweDA4LDB4ZjUsMHgwMiwweDJmLDB4NDAsMHg4YiwweDAwIH0gfSwKK3sgIDE2LCAweDgzNDAsIDAsIHsweDIwLDB4YzAsMHgwOCwweDMwLDB4NDMsMHg3YywweDAwLDB4ODcsMHgwMCwweDIyLDB4NDAsMHgwOCwweGYwLDB4MDIsMHgzMiwweDAwIH0gfSwKK3sgIDE2LCAweDgzNTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NDIsMHgwMSwweDlhLDB4NDQsMHgyOCwweGEyIH0gfSwKK3sgIDE2LCAweDgzNjAsIDAsIHsweDA4LDB4MTgsMHgwMiwweGMwLDB4ODAsMHhhMSwweDgwLDB4YTAsMHgwMCwweDA4LDB4MzAsMHgwMiwweDhlLDB4MDAsMHhhYiwweDAwIH0gfSwKK3sgIDE2LCAweDgzNzAsIDAsIHsweDJjLDB4NDAsMHgwYSwweDMwLDB4MDIsMHgwYywweDAwLDB4YTMsMHgwMCwweDIwLDB4NDQsMHgwYSwweDMwLDB4MDIsMHgzOCwweDAwIH0gfSwKK3sgIDE2LCAweDgzODAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MCwweDAxLDB4MzIsMHgwMCwweDk2LDB4ODIsMHgyYiwweGEyIH0gfSwKK3sgIDE2LCAweDgzOTAsIDAsIHsweDg4LDB4NWEsMHgwMiwweGYyLDB4MDAsMHgwNSwweDgwLDB4MjksMHhhMCwweDA4LDB4NzgsMHg0MiwweGJlLDB4MDAsMHg4ZSwweDg0IH0gfSwKK3sgIDE2LCAweDgzYTAsIDAsIHsweDJmLDB4NjEsMHgwYSwweGQ4LDB4MDIsMHg0ZSwweDEwLDB4YTcsMHg4MCwweDIwLDB4MjgsMHgwOCwweDc4LDB4MDIsMHgxOCwweDAwIH0gfSwKK3sgIDE2LCAweDgzYjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MDgsMHgwMCwweGYyLDB4MjQsMHgzOCwweDgwIH0gfSwKK3sgIDE2LCAweDgzYzAsIDAsIHsweDJjLDB4MWEsMHgwMywweGM0LDB4MDAsMHhlMCwweDU4LDB4YTAsMHg4MCwweDJlLDB4MzAsMHgwMywweDg4LDB4NDEsMHhlMywweDAyIH0gfSwKK3sgIDE2LCAweDgzZDAsIDAsIHsweDNjLDB4NDAsMHgwNiwweDIwLDB4MDMsMHg4YywweDAwLDB4ZTMsMHgwMCwweDEwLDB4MDAsMHgwZSwweDMxLDB4NDMsMHgxMiwweDAyIH0gfSwKK3sgIDE2LCAweDgzZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDFkLDB4OTgsMHgwMCwweGVlLDB4MDEsMHgzNywweDg0IH0gfSwKK3sgIDE2LCAweDgzZjAsIDAsIHsweDlmLDB4ZDksMHgwMywweGYwLDB4NDgsMHhmZCwweDEwLDB4MzcsMHhjMCwweDA3LDB4YjAsMHgwMywweDVjLDB4MDAsMHhmNiwweDEwIH0gfSwKK3sgIDE2LCAweDg0MDAsIDAsIHsweDMzLDB4YzAsMHgwZCwweGUxLDB4MDMsMHhlZCwweDIwLDB4ZGYsMHgxMCwweDNmLDB4NDgsMHgwZiwweGYwLDB4MjMsMHhkMCwweDA2IH0gfSwKK3sgIDE2LCAweDg0MTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZTQsMHgwMiwweGNiLDB4ODAsMHgzMCwweGMwIH0gfSwKK3sgIDE2LCAweDg0MjAsIDAsIHsweDBjLDB4YTAsMHgwMywweGUyLDB4MDIsMHhjOSwweDAwLDB4M2EsMHg0MCwweDBkLDB4YjYsMHgwMywweDY0LDB4MDAsMHhlYiwweDAwIH0gfSwKK3sgIDE2LCAweDg0MzAsIDAsIHsweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhlZCwweDAwLDB4ZmIsMHgwMSwweDNlLDB4ZTAsMHgwYywweGIwLDB4MDIsMHhlYSwweDAwIH0gfSwKK3sgIDE2LCAweDg0NDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDExLDB4OTQsMHgwMCwweDg3LDB4MDAsMHgyMSwweGMwIH0gfSwKK3sgIDE2LCAweDg0NTAsIDAsIHsweDI4LDB4NjAsMHgwMiwweGQwLDB4MDAsMHg4NSwweDAwLDB4MmQsMHg4MCwweDQ4LDB4ZjAsMHg4MiwweDFjLDB4MDAsMHhiNywweDAwIH0gfSwKK3sgIDE2LCAweDg0NjAsIDAsIHsweDJkLDB4MDAsMHgwYiwweDUwLDB4MDIsMHhkYywweDAwLDB4YjcsMHhhMCwweDJmLDB4ODAsMHgyOCwweDdhLDB4MDIsMHhkMiwweDA0IH0gfSwKK3sgIDE2LCAweDg0NzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMSwweDAwLDB4YmUsMHgwMCwweDg3LDB4ODAsMHgyMSwweGUwIH0gfSwKK3sgIDE2LCAweDg0ODAsIDAsIHsweDI4LDB4NjgsMHgwMiwweGQ3LDB4MDAsMHg4NCwweDgwLDB4MmQsMHhlMCwweDQ5LDB4NzksMHgwNiwweDUzLDB4MDksMHhiNSwweDgwIH0gfSwKK3sgIDE2LCAweDg0OTAsIDAsIHsweDJkLDB4ZTIsMHgwYiwweDc4LDB4MDIsMHhkZSwweDgwLDB4YjcsMHg5MCwweDJkLDB4YjAsMHgwOCwweDc5LDB4MDIsMHhmMCwweDAwIH0gfSwKK3sgIDE2LCAweDg0YTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE0LDB4Y2MsMHgxMCwweDgzLDB4MDEsMHgyOCwweGM4IH0gfSwKK3sgIDE2LCAweDg0YjAsIDAsIHsweDA4LDB4MjAsMHgwMiwweGMyLDB4MDYsMHg4MSwweDAwLDB4MmMsMHhjOCwweDg4LDB4MzAsMHg2MiwweDBlLDB4MjEsMHhiMywweGEwIH0gfSwKK3sgIDE2LCAweDg0YzAsIDAsIHsweDJjLDB4YzEsMHgwYiwweGI2LDB4MDIsMHhjYywweDAwLDB4YjMsMHgwMCwweDJjLDB4ZTAsMHgwOCwweDMwLDB4MDIsMHhkMiwweDA0IH0gfSwKK3sgIDE2LCAweDg0ZDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweGNhLDB4NDAsMHhiMCwweDgwIH0gfSwKK3sgIDE2LCAweDg0ZTAsIDAsIHsweDBjLDB4MmMsMHgwMiwweGY4LDB4MDAsMHhjNiwweDIwLDB4M2YsMHg5MCwweDBkLDB4YTAsMHgwMywweDdiLDB4MDEsMHhlZSwweGUwIH0gfSwKK3sgIDE2LCAweDg0ZjAsIDAsIHsweDNmLDB4YjQsMHgwZiwweGVjLDB4MDMsMHhlOCwweDAwLDB4ZmEsMHgwMCwweDNmLDB4YTAsMHgwYywweGEwLDB4MDMsMHhmYSwweDA0IH0gfSwKK3sgIDE2LCAweDg1MDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4ZTMsMHgwMCwweGY4LDB4MDksMHgyNiwweDAwIH0gfSwKK3sgIDE2LCAweDg1MTAsIDAsIHsweDBmLDB4YzEsMHg4MywweGUwLDB4MTAsMHhmOCwweDQwLDB4M2MsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4MDEsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweDg1MjAsIDAsIHsweDNlLDB4MDAsMHgwZiwweDgxLDB4MDMsMHhlMCwweDA0LDB4ZjgsMHgwMCwweDNlLDB4MTAsMHgwZiwweDgwLDB4MDMsMHhkMiwweDAwIH0gfSwKK3sgIDE2LCAweDg1MzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMiwweGM5LDB4MDAsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweDg1NDAsIDAsIHsweDRmLDB4OTAsMHg2MywweDI2LDB4ODQsMHgzOSwweDAyLDB4YjIsMHg0MCwweDBjLDB4OTEsMHgwMywweDI0LDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweDg1NTAsIDAsIHsweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHgyNCwweDAwLDB4ZjEsMHgwMCwweDNhLDB4NDQsMHgwZiwweDkwLDB4MDMsMHhjMiwweDA0IH0gfSwKK3sgIDE2LCAweDg1NjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NDUsMHgwMCwweDg5LDB4NDAsMHgyZSwweDQwIH0gfSwKK3sgIDE2LCAweDg1NzAsIDAsIHsweDA4LDB4OTIsMHgwYSwweDI0LDB4MDAsMHhiOSwweDMxLDB4MjIsMHg2MCwweDg4LDB4OTQsMHg4YSwweDI0LDB4MjAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweDg1ODAsIDAsIHsweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHgyNCwweDAwLDB4YjksMHgwMCwweDIyLDB4NjgsMHgwYiwweDkwLDB4MDIsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweDg1OTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHhhMCwweDhkLDB4ODQsMHgyZiwweDQwIH0gfSwKK3sgIDE2LCAweDg1YTAsIDAsIHsweDBiLDB4ZDEsMHgwMiwweDI0LDB4MDAsMHhiOSwweDAwLDB4MjIsMHg0YSwweDA4LDB4MTAsMHgwMiwweDJjLDB4NDAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweDg1YjAsIDAsIHsweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHgyNCwweDAwLDB4YjksMHgwMCwweDJhLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhjNiwweDAwIH0gfSwKK3sgIDE2LCAweDg1YzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MTQsMHgwMCwweDg1LDB4ODAsMHgyZCwweDQwIH0gfSwKK3sgIDE2LCAweDg1ZDAsIDAsIHsweDA4LDB4NTAsMHgwMiwweDA0LDB4MGMsMHhiOSwweDAwLDB4YTAsMHg1MCwweDA4LDB4MTQsMHgyMiwweDA0LDB4MDAsMHhiMSwweDAwIH0gfSwKK3sgIDE2LCAweDg1ZTAsIDAsIHsweDJjLDB4NDAsMHgwYiwweDEwLDB4MDIsMHgwNCwweDAwLDB4YjEsMHgyOCwweDIwLDB4NGEsMHgwYiwweDEzLDB4MDIsMHhjMiwweDAxIH0gfSwKK3sgIDE2LCAweDg1ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGMwLDB4NTAsMHgzZSwweDgwIH0gfSwKK3sgIDE2LCAweDg2MDAsIDAsIHsweDBmLDB4YzAsMHg0MywweDIwLDB4MDAsMHhmOCwweDAwLDB4MzAsMHgwMCwweDJjLDB4ODAsMHgyMywweDIwLDB4MDAsMHhmOCwweDUxIH0gfSwKK3sgIDE2LCAweDg2MTAsIDAsIHsweDNlLDB4MTQsMHg4ZiwweDg1LDB4MGIsMHgyMSwweDQwLDB4ZjgsMHg3MCwweDNhLDB4MDgsMHgwZiwweDg0LDB4ODMsMHhlZSwweDAzIH0gfSwKK3sgIDE2LCAweDg2MjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDFkLDB4YzQsMHgwMCwweGY5LDB4MDQsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweDg2MzAsIDAsIHsweDBmLDB4OTAsMHgyMywweGQ0LDB4MDAsMHhmZCwweDAwLDB4M2YsMHg1MCwweDBmLDB4OTQsMHgwMywweGY0LDB4MDQsMHhmZCwweDAwIH0gfSwKK3sgIDE2LCAweDg2NDAsIDAsIHsweDNmLDB4NDEsMHg4ZiwweGQwLDB4NDMsMHhlNSwweDBjLDB4ZjksMHgwMiwweDNmLDB4NGEsMHgwZiwweDkyLDB4MDMsMHhlNiwweDAyIH0gfSwKK3sgIDE2LCAweDg2NTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4ZDQsMHgwMSwweGZkLDB4MDAsMHgzZCwweDQwIH0gfSwKK3sgIDE2LCAweDg2NjAsIDAsIHsweDBjLDB4ZDAsMHgxMywweGY0LDB4MDAsMHhkNSwweDAwLDB4MzMsMHg2YSwweDFjLDB4ZGMsMHg4MywweDM0LDB4MDAsMHhkMSwweDA0IH0gfSwKK3sgIDE2LCAweDg2NzAsIDAsIHsweDNlLDB4NTAsMHgwYywweDkxLDB4MDMsMHhlNiwweGMwLDB4ZGQsMHhiMCwweDMzLDB4NmEsMHgyYywweDljLDB4ODMsMHhlNiwweDAwIH0gfSwKK3sgIDE2LCAweDg2ODAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDEwLDB4ZTAsMHgwOSwweGY4LDB4ODAsMHgyZSwweDAwIH0gfSwKK3sgIDE2LCAweDg2OTAsIDAsIHsweDg4LDB4ODAsMHgwMCwweGU4LDB4MDAsMHhiYSwweDAwLDB4MjIsMHhiMCwweDA4LDB4OGUsMHgwMiwweDI4LDB4MDAsMHg4OCwweGE4IH0gfSwKK3sgIDE2LCAweDg2YTAsIDAsIHsweDI2LDB4MjgsMHgwOCwweDhhLDB4MjIsMHhlMiwweDAwLDB4ODgsMHhlNCwweDIyLDB4MzAsMHgwOCwweDhjLDB4MDIsMHhjZSwweDA0IH0gfSwKK3sgIDE2LCAweDg2YjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHgwMCwweGIxLDB4MjgsMHgyZSwweDQwIH0gfSwKK3sgIDE2LCAweDg2YzAsIDAsIHsweDA4LDB4MTAsMHgwMiwweGM0LDB4MDAsMHg5OSwweDAwLDB4MjAsMHg0MiwweDQ4LDB4MTAsMHgwMiwweDY0LDB4MDEsMHg5MSwweDgwIH0gfSwKK3sgIDE2LCAweDg2ZDAsIDAsIHsweDJjLDB4NDgsMHgwOCwweDEwLDB4MDIsMHhjNCwweGMwLDB4ODEsMHg0MCwweDIwLDB4NGEsMHgwOCwweDEyLDB4MDIsMHhjMiwweDAxIH0gfSwKK3sgIDE2LCAweDg2ZTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4YTQsMHg5NCwweGE5LDB4MDIsMHgyZSwweDQwIH0gfSwKK3sgIDE2LCAweDg2ZjAsIDAsIHsweDBhLDB4OTAsMHgwMiwweDY0LDB4MDAsMHhiOSwweDAwLDB4ODIsMHg2MCwweDA4LDB4OTAsMHgwMiwweDY2LDB4MDAsMHg4OSwweDEwIH0gfSwKK3sgIDE2LCAweDg3MDAsIDAsIHsweDI0LDB4NjIsMHgwOCwweDkwLDB4MDIsMHhlNCwweDAwLDB4ODksMHgwMiwweDIyLDB4NDAsMHgxOCwweDkwLDB4MDIsMHhjNiwweDA0IH0gfSwKK3sgIDE2LCAweDg3MTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTYsMHgwMCwweGI5LDB4MDQsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweDg3MjAsIDAsIHsweDBjLDB4OTAsMHgxMywweGU0LDB4MDAsMHhkMSwweGMwLDB4MTIsMHg1MCwweDI4LDB4OTAsMHgwMywweDQ0LDB4MDAsMHhkOSwweDAwIH0gfSwKK3sgIDE2LCAweDg3MzAsIDAsIHsweDNlLDB4NDAsMHgyOCwweDkyLDB4MDMsMHhlNCwweDAyLDB4ZDksMHgwMCwweDMyLDB4NDIsMHg4YywweDkwLDB4MTIsMHhlOCwweDA0IH0gfSwKK3sgIDE2LCAweDg3NDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAxLDB4YTYsMHgyMCwweGY5LDB4MDAsMHgzZSwweDQxIH0gfSwKK3sgIDE2LCAweDg3NTAsIDAsIHsweDJkLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDIwLDB4M2UsMHg0MCwweDRmLDB4OTAsMHgwMSwweGE0LDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweDg3NjAsIDAsIHsweDM2LDB4NDAsMHg4ZiwweDkyLDB4MDcsMHhlNCwweDAwLDB4ZjEsMHgwMCwweGJlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweDg3NzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGM4LDB4MDAsMHgzZSwweDIwIH0gfSwKK3sgIDE2LCAweDg3ODAsIDAsIHsweDBjLDB4ODAsMHgwMywweGUwLDB4NDAsMHhmOCwweDAwLDB4MzYsMHgxMiwweDJjLDB4MDAsMHgwMywweGUwLDB4YzAsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweDg3OTAsIDAsIHsweDMyLDB4MTAsMHgwZCwweDg0LDB4MDMsMHhhMCwweDAwLDB4ZjgsMHgwMiwweDNlLDB4MDgsMHgwZiwweDgwLDB4MDAsMHhjYSwweDA0IH0gfSwKK3sgIDE2LCAweDg3YTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4M2EsMHg5MCwweDhlLDB4MDAsMHgyZCwweGEwIH0gfSwKK3sgIDE2LCAweDg3YjAsIDAsIHsweDgwLDB4ZTgsMHgwMiwweGZhLDB4MDAsMHhiZSwweDQwLDB4MjMsMHg4MCwweDA4LDB4ZTgsMHgwMiwweGZhLDB4MDAsMHg4YSwweDAwIH0gfSwKK3sgIDE2LCAweDg3YzAsIDAsIHsweDM2LDB4ODAsMHgwOCwweGEwLDB4MDIsMHhlOCwweDAwLDB4YmEsMHgwMCwweDJmLDB4ODAsMHgwYiwweGEwLDB4MDMsMHg4YSwweDAwIH0gfSwKK3sgIDE2LCAweDg3ZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NDYsMHgwMiwweDgzLDB4MDAsMHgyYywweDgwIH0gfSwKK3sgIDE2LCAweDg3ZTAsIDAsIHsweDA4LDB4MjIsMHg0MiwweGM2LDB4ODAsMHhiMSwweDYwLDB4MmUsMHhmNCwweDA4LDB4MzgsMHgyMiwweGNlLDB4MDAsMHhhMywweDAwIH0gfSwKK3sgIDE2LCAweDg3ZjAsIDAsIHsweDIwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhhYywweDAwLDB4YjEsMHgwMCwweDJlLDB4NDAsMHgwYiwweDMwLDB4MDIsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweDg4MDAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDAxLDB4MWUsMHgwMiwweDg1LDB4MDEsMHgyZCwweGMyIH0gfSwKK3sgIDE2LCAweDg4MTAsIDAsIHsweGE4LDB4NDQsMHgwMiwweGQ0LDB4MDAsMHhiZCwweDAxLDB4MjksMHg0MCwweDE4LDB4NjgsMHhkMiwweGRjLDB4MDAsMHg4ZiwweDgwIH0gfSwKK3sgIDE2LCAweDg4MjAsIDAsIHsweDI1LDB4Y2MsMHgyOCwweDczLDB4NDIsMHhkYywweDgwLDB4YjUsMHgzMCwweDJkLDB4YzAsMHgxYiwweDcyLDB4MDIsMHhlOCwweDAwIH0gfSwKK3sgIDE2LCAweDg4MzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgwNCwweGM2LDB4ODIsMHgzZCwweGUwIH0gfSwKK3sgIDE2LCAweDg4NDAsIDAsIHsweDBjLDB4NDgsMHgxMiwweGQ2LDB4MTAsMHhmNSwweDgwLDB4M2MsMHhhMCwweDBjLDB4NzAsMHgwMywweGRlLDB4MDAsMHhlNywweDkwIH0gfSwKK3sgIDE2LCAweDg4NTAsIDAsIHsweDIzLDB4ZWEsMHgwNCwweDdhLDB4MDMsMHg5ZSwweDAwLDB4ZjUsMHg4MCwweDNkLDB4ZTAsMHgwZiwweDdhLDB4MDMsMHhlYSwweDAyIH0gfSwKK3sgIDE2LCAweDg4NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDBkLDB4YWMsMHgwMCwweDljLDB4MDAsMHgzZSwweGMwIH0gfSwKK3sgIDE2LCAweDg4NzAsIDAsIHsweDBmLDB4ODAsMHgwMywweGU0LDB4MTAsMHhmOSwweDAwLDB4MzYsMHgwMSwweDBmLDB4YTAsMHgwMywweGMwLDB4MDAsMHhlYiwweDAwIH0gfSwKK3sgIDE2LCAweDg4ODAsIDAsIHsweDNlLDB4ZDgsMHg0ZSwweGIwLDB4ODMsMHhlYywweDAwLDB4ZjksMHgwMCwweDNlLDB4YzAsMHgwZiwweGI0LDB4NDMsMHg4MiwweDA2IH0gfSwKK3sgIDE2LCAweDg4OTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZGUsMHgwMCwweGNmLDB4ODQsMHgzMSwweGUwIH0gfSwKK3sgIDE2LCAweDg4YTAsIDAsIHsweDBlLDB4YzgsMHg0MywweGQ2LDB4MDAsMHhjZCwweDgwLDB4MzMsMHhlMCwweGNkLDB4ZDksMHgwMywweDNhLDB4MDAsMHhmZiwweDg4IH0gfSwKK3sgIDE2LCAweDg4YjAsIDAsIHsweDMzLDB4ZTAsMHgwZiwweGY5LDB4MTMsMHhmZSwweDI0LDB4ZmQsMHg4MCwweDNmLDB4MjAsMHgwYywweGY2LDB4ODMsMHgxMCwweDAwIH0gfSwKK3sgIDE2LCAweDg4YzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4OWMsMHgwMCwweDg1LDB4MDAsMHgyMSwweGM0IH0gfSwKK3sgIDE2LCAweDg4ZDAsIDAsIHsweDI4LDB4NDAsMHg4MiwweGQwLDB4MDAsMHhkNSwweDAwLDB4MjMsMHg4MCwweDQ4LDB4YzksMHgwMiwweDFjLDB4MDAsMHhiNywweDAwIH0gfSwKK3sgIDE2LCAweDg4ZTAsIDAsIHsweDIxLDB4YzAsMHgwYiwweDcxLDB4MDIsMHhkZSwweDgwLDB4YjUsMHgxMCwweDJkLDB4YzAsMHgyOCwweGYwLDB4MDIsMHgyYSwweDA0IH0gfSwKK3sgIDE2LCAweDg4ZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDAwLDB4OWMsMHgwMCwweDk2LDB4MDAsMHgyMSwweGMwIH0gfSwKK3sgIDE2LCAweDg5MDAsIDAsIHsweDBhLDB4NDEsMHgwMiwweGY1LDB4NDAsMHg4ZCwweDAwLDB4MjEsMHg0MCwweDA5LDB4NTIsMHgwMiwweDk4LDB4MjAsMHhiNywweDAwIH0gfSwKK3sgIDE2LCAweDg5MTAsIDAsIHsweDIxLDB4YzAsMHgwYiwweDcwLDB4MDYsMHhkYywweDgwLDB4YjUsMHgwMCwweDJkLDB4YzAsMHgwOCwweDcwLDB4MDIsMHgwNCwweDAwIH0gfSwKK3sgIDE2LCAweDg5MjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MCwweDE0LDB4Y2MsMHgxMCwweDk4LDB4MDAsMHgwMCwweGMwIH0gfSwKK3sgIDE2LCAweDg5MzAsIDAsIHsweDg4LDB4MDQsMHg4MiwweGMwLDB4MDAsMHg5MSwweDA0LDB4MjAsMHgwMywweDA5LDB4MDAsMHgwMiwweDhhLDB4MDAsMHhiMywweDBhIH0gfSwKK3sgIDE2LCAweDg5NDAsIDAsIHsweDIwLDB4YzQsMHg4YiwweDM0LDB4MDIsMHhjYywweDAwLDB4YjksMHgwMCwweDJjLDB4YzAsMHgwMCwweDMwLDB4MDIsMHgxOCwweDA0IH0gfSwKK3sgIDE2LCAweDg5NTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmOCwweDE1LDB4YWMsMHgwMCwweGRiLDB4MDAsMHhiMCwweGMwIH0gfSwKK3sgIDE2LCAweDg5NjAsIDAsIHsweDBlLDB4OWMsMHgwMiwweGM1LDB4MDAsMHhjMSwweDEwLDB4YjIsMHhjMCwweDBkLDB4YjAsMHgwYiwweGE3LDB4MDgsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweDg5NzAsIDAsIHsweGIzLDB4YzAsMHgwZiwweGZhLDB4MDMsMHhmYywweDAwLDB4ZmQsMHgwMCwweDNlLDB4ZDQsMHgwYywweGYwLDB4MGIsMHgyZSwweDA0IH0gfSwKK3sgIDE2LCAweDg5ODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4ZWMsMHgwNCwweGVkLDB4MDAsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweDg5OTAsIDAsIHsweDBmLDB4ODQsMHgwMywweGU1LDB4NDAsMHhmOSwweDQwLDB4M2UsMHg2MCwweGNlLDB4YjQsMHg0MywweDY0LDB4MDAsMHhmYiwweDgwIH0gfSwKK3sgIDE2LCAweDg5YTAsIDAsIHsweDNlLDB4YzIsMHgwZiwweGIwLDB4MTMsMHhlYywweDAwLDB4ZjksMHgwMiwweDNlLDB4YzAsMHg0ZiwweGIwLDB4MDMsMHhlMSwweDAwIH0gfSwKK3sgIDE2LCAweDg5YjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MCwweDEwLDB4ZmYsMHgwMCwweGNlLDB4MDAsMHgzMywweGMwIH0gfSwKK3sgIDE2LCAweDg5YzAsIDAsIHsweDBlLDB4YzAsMHgwNywweDc0LDB4MDQsMHhlYywweDAwLDB4MTEsMHg4MCwweDBjLDB4Y2EsMHgwMywweGZlLDB4NjAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweDg5ZDAsIDAsIHsweDNmLDB4YzAsMHgwZiwweGYwLDB4ODMsMHgzYywweDAwLDB4ZGQsMHgwMCwweGIzLDB4NTAsMHgyYywweGYwLDB4MDMsMHgyMCwweDA0IH0gfSwKK3sgIDE2LCAweDg5ZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MSwweDAwLDB4NGMsMHgwNCwweDhiLDB4MGIsMHgyMiwweDcwIH0gfSwKK3sgIDE2LCAweDg5ZjAsIDAsIHsweDA4LDB4MDgsMHgwMywweDY3LDB4MjAsMHg4YSwweDg4LDB4YTIsMHgwMCwweDI4LDB4ODQsMHgwMiwweGU3LDB4MDAsMHhiYiwweDAwIH0gfSwKK3sgIDE2LCAweDhhMDAsIDAsIHsweDNlLDB4YzAsMHgwYiwweGIwLDB4MDIsMHgyYywweDAwLDB4YjksMHgwMCwweDIyLDB4NjEsMHgwOCwweGIwLDB4MDMsMHg2MCwweDQwIH0gfSwKK3sgIDE2LCAweDhhMTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweDhiLDB4MjAsMHgyMiwweGUyIH0gfSwKK3sgIDE2LCAweDhhMjAsIDAsIHsweDBhLDB4OGMsMHgwMiwweDI2LDB4MDAsMHhhOSwweDgwLDB4MmEsMHhjMCwweDA4LDB4YjQsMHg0MiwweGVkLDB4MDAsMHhiYiwweDAwIH0gfSwKK3sgIDE2LCAweDhhMzAsIDAsIHsweDJlLDB4YzAsMHgwYiwweDMwLDB4MDIsMHgyYywweDAwLDB4YjksMHgwMCwweDIwLDB4ODAsMHgwOCwweDMwLDB4MDIsMHg2MCwweDAwIH0gfSwKK3sgIDE2LCAweDhhNDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MGUsMHgwMSwweDgxLDB4MDAsMHhhMCwweGMwIH0gfSwKK3sgIDE2LCAweDhhNTAsIDAsIHsweDA4LDB4ODEsMHgwMiwweDQ0LDB4MDAsMHg4MSwweDAwLDB4MjgsMHg4MSwweDA4LDB4MzIsMHgwMiwweGNjLDB4MDAsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweDhhNjAsIDAsIHsweDI4LDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwYywweDgwLDB4YjEsMHgwMCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MTIsMHg0MiwweDAxIH0gfSwKK3sgIDE2LCAweDhhNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDBkLDB4NmMsMHgwMCwweGMyLDB4MDEsMHgzMiwweGMwIH0gfSwKK3sgIDE2LCAweDhhODAsIDAsIHsweDJlLDB4ODAsMHgxNiwweDJjLDB4MDgsMHhlOSwweDAwLDB4M2EsMHg0MCwweDBjLDB4ODAsMHgwMywweGVjLDB4MDAsMHhmNywweDAwIH0gfSwKK3sgIDE2LCAweDhhOTAsIDAsIHsweDJmLDB4YzAsMHgwZiwweGYwLDB4MGIsMHgyYywweDAwLDB4ZDksMHgwMCwweDMwLDB4NDAsMHgwYywweGYwLDB4MDMsMHg2MCwweDAzIH0gfSwKK3sgIDE2LCAweDhhYTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDBkLDB4ZjgsMHgwOCwweGZmLDB4MDAsMHgzZiwweGMwIH0gfSwKK3sgIDE2LCAweDhhYjAsIDAsIHsweDBmLDB4YzIsMHgxNywweGZjLDB4MDAsMHhmNywweDAwLDB4MzcsMHgwMCwweDBmLDB4ODQsMHgwMywweGZjLDB4MDAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweDhhYzAsIDAsIHsweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhlZCwweDAwLDB4ZmQsMHgwMCwweDNmLDB4NDAsMHgwZiwweGYwLDB4MDMsMHhlOCwweDA2IH0gfSwKK3sgIDE2LCAweDhhZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHgwMCwweGNmLDB4MzAsMHgxNywweDQ4IH0gfSwKK3sgIDE2LCAweDhhZTAsIDAsIHsweDBjLDB4NTksMHgwMywweGI5LDB4MDAsMHhkZiwweDI4LDB4MzUsMHgyNCwweDBkLDB4ODIsMHhhMywweDdjLDB4ODAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweDhhZjAsIDAsIHsweDNmLDB4YzgsMHgwZiwweGYyLDB4MDMsMHhlNCwweGEwLDB4ZWYsMHg4MCwweDNmLDB4ZTEsMHg4YywweGQ4LDB4NDMsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweDhiMDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4ZWQsMHg0OCwweDg5LDB4MzQsMHhhMywweDcwIH0gfSwKK3sgIDE2LCAweDhiMTAsIDAsIHsweDI4LDB4YjAsMHgyMywweDYwLDB4MDAsMHg4YiwweGMwLDB4MjIsMHg0MCwweDA4LDB4YjQsMHg4MiwweDJmLDB4NDAsMHhiZiwweGQxIH0gfSwKK3sgIDE2LCAweDhiMjAsIDAsIHsweDZmLDB4ZjQsMHg4ZSwweGJkLDB4MDIsMHhlNywweDAwLDB4YmIsMHg4MCwweDNhLDB4ZTAsMHgwOCwweDk4LDB4MGEsMHgyOCwweDA0IH0gfSwKK3sgIDE2LCAweDhiMzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzQsMHhiMCwweDkxLDB4MDAsMHhhOCwweDUwIH0gfSwKK3sgIDE2LCAweDhiNDAsIDAsIHsweDA4LDB4YjIsMHgwMiwweGM4LDB4ODQsMHg5MywweDAwLDB4MjQsMHg0OSwweDBiLDB4MDIsMHgwMiwweDRjLDB4MDAsMHhiMywweDA0IH0gfSwKK3sgIDE2LCAweDhiNTAsIDAsIHsweDJjLDB4YzAsMHgwYiwweDMwLDB4NDIsMHg4NCwweDAwLDB4YjMsMHgwMCwweDJlLDB4MDAsMHgwYSwweGIwLDB4MTIsMHgyMiwweDAxIH0gfSwKK3sgIDE2LCAweDhiNjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDExLDB4YWMsMHgwMiwweDk5LDB4MTgsMHgyYSwweDQ0IH0gfSwKK3sgIDE2LCAweDhiNzAsIDAsIHsweDA4LDB4YjgsMHg4MiwweGEyLDB4MDEsMHhiYiwweDAwLDB4MjgsMHg2MCwweDBhLDB4YTAsMHgxMiwweDZjLDB4MDAsMHhiYiwweDAwIH0gfSwKK3sgIDE2LCAweDhiODAsIDAsIHsweDZlLDB4YzAsMHgwYSwweGIwLDB4MDIsMHhlNCwweDAwLDB4YmIsMHgwMCwweDJhLDB4MDAsMHgyYSwweGIwLDB4MDIsMHgzOCwweDA0IH0gfSwKK3sgIDE2LCAweDhiOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDExLDB4ZTQsMHgwOCwweGRhLDB4YzAsMHgzYSwweDYwIH0gfSwKK3sgIDE2LCAweDhiYTAsIDAsIHsweDBjLDB4MTgsMHgwYSwweGViLDB4MDQsMHhkYiwweDAwLDB4MzYsMHhlMCwweDA3LDB4ODUsMHg4MywweDZjLDB4MDAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweDhiYjAsIDAsIHsweDJlLDB4YzAsMHgwZiwweGIwLDB4NDMsMHhlNCwweDAwLDB4ZWIsMHgwMCwweDNlLDB4ODgsMHgwZSwweDE4LDB4MDMsMHgxMCwweDA0IH0gfSwKK3sgIDE2LCAweDhiYzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDQxLDB4OWMsMHgxMCwweGU5LDB4MDAsMHgzNywweDYwIH0gfSwKK3sgIDE2LCAweDhiZDAsIDAsIHsweDg3LDB4ZjAsMHgxNywweDcwLDB4MDAsMHhjZiwweDAxLDB4MzcsMHhjMCwweDRjLDB4OTgsMHgwMywweGJjLDB4MDAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweDhiZTAsIDAsIHsweDNmLDB4YzIsMHgwZiwweGYwLDB4MDMsMHhlNCwweDAwLDB4ZmYsMHg0MCwweDNmLDB4ZTQsMHgwZCwweGQ5LDB4MDMsMHhmMCwweDAwIH0gfSwKK3sgIDE2LCAweDhiZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YTQsMHgwMCwweGY0LDB4MDAsMHgzMCwweDQwIH0gfSwKK3sgIDE2LCAweDhjMDAsIDAsIHsweDBmLDB4YjQsMHgwMywweDk5LDB4MDAsMHhmYiwweDAwLDB4M2UsMHhjMCwweDBkLDB4MDQsMHgyMywweDJjLDB4MDgsMHhmYiwweDg4IH0gfSwKK3sgIDE2LCAweDhjMTAsIDAsIHsweDMyLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhlNiwweDAwLDB4ZGIsMHgxMCwweDNlLDB4MDIsMHgwZiwweGIwLDB4ODMsMHhkMCwweDA0IH0gfSwKK3sgIDE2LCAweDhjMjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4MmMsMHgwMCwweGI5LDB4NTAsMHhhMiwweDQ4IH0gfSwKK3sgIDE2LCAweDhjMzAsIDAsIHsweDhiLDB4YjAsMHgwMywweDIwLDB4MDAsMHhkNywweDgwLDB4MmUsMHhkOCwweDAwLDB4ODAsMHgwMiwweDNjLDB4MDAsMHhiZiwweDgwIH0gfSwKK3sgIDE2LCAweDhjNDAsIDAsIHsweDIzLDB4ZTgsMHg4YiwweGYwLDB4MDIsMHhmNCwweDQwLDB4OGIsMHg0MCwweDBjLDB4NDIsMHgwMywweGI2LDB4MDIsMHhmMiwweDAwIH0gfSwKK3sgIDE2LCAweDhjNTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMCwweGIyLDB4NDQsMHgwMCwweGM4IH0gfSwKK3sgIDE2LCAweDhjNjAsIDAsIHsweDBiLDB4MzAsMHgxMiwweDhjLDB4MDAsMHhhMywweDgwLDB4MjQsMHhjOCwweDBiLDB4MDAsMHgwYSwweGNjLDB4MDAsMHhiMywweDQ0IH0gfSwKK3sgIDE2LCAweDhjNzAsIDAsIHsweDA0LDB4YzAsMHgxYiwweDM2LDB4MDIsMHhjNSwweDAxLDB4ODMsMHgwYywweDJjLDB4YTAsMHgwYiwweDMwLDB4MDIsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweDhjODAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAxLDB4MWUsMHgwOCwweGI3LDB4OTAsMHgyMSwweDY0IH0gfSwKK3sgIDE2LCAweDhjOTAsIDAsIHsweDBiLDB4ZjgsMHgwMiwweDRhLDB4MDQsMHg5NywweDgxLDB4MmYsMHhlNCwweDBhLDB4NzgsMHgwMiwweDllLDB4MDAsMHhiNywweDgwIH0gfSwKK3sgIDE2LCAweDhjYTAsIDAsIHsweDIxLDB4ZTAsMHg4YiwweDc4LDB4ODIsMHhkNiwweDg2LDB4ODcsMHg4NCwweDJkLDB4YTAsMHgwYiwweDc4LDB4MDIsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweDhjYjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MDQsMHgwMCwweGYyLDB4MDAsMHgzMCwweGMwIH0gfSwKK3sgIDE2LCAweDhjYzAsIDAsIHsweDBmLDB4MzAsMHgwMywweDhjLDB4MDAsMHhlMywweDBhLDB4M2MsMHhjMCwweDBmLDB4MTgsMHgwMywweDhjLDB4MDAsMHhmMywweDAyIH0gfSwKK3sgIDE2LCAweDhjZDAsIDAsIHsweDMwLDB4YzAsMHgxZiwweDMwLDB4MDEsMHhjNiwweDgwLDB4YzMsMHgwMCwweDNjLDB4YzAsMHgwZiwweDEyLDB4MDMsMHhkYSwweDAyIH0gfSwKK3sgIDE2LCAweDhjZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDBkLDB4YmMsMHgwMCwweGZmLDB4MDAsMHgzZiwweDQxIH0gfSwKK3sgIDE2LCAweDhjZjAsIDAsIHsweDBmLDB4ZjAsMHgwMywweGI4LDB4MDgsMHhmZiwweDA4LDB4M2YsMHhjMCwweDBkLDB4ZjAsMHgwMywweDNjLDB4MjAsMHhmZiwweDA4IH0gfSwKK3sgIDE2LCAweDhkMDAsIDAsIHsweDNiLDB4ZDIsMHgwZiwweGYwLDB4MDMsMHhmNCwweDQwLDB4ZWYsMHgwMCwweDNmLDB4YzQsMHgwZiwweGQwLDB4MDMsMHhkMCwweDA2IH0gfSwKK3sgIDE2LCAweDhkMTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZTQsMHgwMCwweGZlLDB4MDAsMHgzMiwweGMyIH0gfSwKK3sgIDE2LCAweDhkMjAsIDAsIHsweDBjLDB4MzAsMHgwYiwweDI2LDB4MDAsMHhmYiwweDgwLDB4MzYsMHhjMCwweDBkLDB4YTAsMHgwMywweGVjLDB4MDAsMHhmYiwweGUwIH0gfSwKK3sgIDE2LCAweDhkMzAsIDAsIHsweDMyLDB4ZDAsMHgwZiwweGI4LDB4NDMsMHg2NCwweDQ0LDB4ZGIsMHgwNCwweDNlLDB4ODAsMHgwZiwweGIwLDB4MDMsMHhlMiwweDAwIH0gfSwKK3sgIDE2LCAweDhkNDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDExLDB4OWMsMHgwMCwweGI3LDB4MDAsMHhhMSwweGMwIH0gfSwKK3sgIDE2LCAweDhkNTAsIDAsIHsweDg4LDB4NzAsMHgwMywweDEwLDB4MDAsMHhiNywweDIwLDB4MjEsMHhjMCwweDA4LDB4NzAsMHgwMiwweGRjLDB4ODAsMHhiMywweDMwIH0gfSwKK3sgIDE2LCAweDhkNjAsIDAsIHsweDMxLDB4YzgsMHgwYiwweDc0LDB4MDIsMHgxNCwweDAwLDB4ODcsMHg0MCwweDJkLDB4YzAsMHg0YiwweDcwLDB4MDIsMHhkMiwweDAwIH0gfSwKK3sgIDE2LCAweDhkNzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OTYsMHgyMCwweGI2LDB4ODAsMHgyMCwweGUwIH0gfSwKK3sgIDE2LCAweDhkODAsIDAsIHsweDI4LDB4ZjgsMHgwMiwweDk0LDB4MTAsMHhiNywweDgxLDB4MjcsMHhlMiwweDA5LDB4NzgsMHgwMiwweGRlLDB4MDAsMHhiNywweGEwIH0gfSwKK3sgIDE2LCAweDhkOTAsIDAsIHsweGE5LDB4ZTgsMHgwYiwweDM4LDB4MDIsMHg3NiwweDAwLDB4ODcsMHg4MCwweDJkLDB4YTAsMHgwYiwweDU4LDB4MDIsMHhmMCwweDAwIH0gfSwKK3sgIDE2LCAweDhkYTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE0LDB4Y2UsMHgxMCwweGIzLDB4MDAsMHgyMCwweGM0IH0gfSwKK3sgIDE2LCAweDhkYjAsIDAsIHsweDA4LDB4MjAsMHgwMiwweDgwLDB4MTAsMHhiMywweDAwLDB4MjIsMHhjOCwweDA4LDB4YjAsMHgwMiwweGNjLDB4MTEsMHhiMywweDAyIH0gfSwKK3sgIDE2LCAweDhkYzAsIDAsIHsweDI4LDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwNCwweDAwLDB4OTMsMHg4MCwweDJjLDB4ZDIsMHgwYiwweDEwLDB4MDIsMHhkMiwweDA0IH0gfSwKK3sgIDE2LCAweDhkZDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweGZlLDB4NDAsMHgzMiwweGEwIH0gfSwKK3sgIDE2LCAweDhkZTAsIDAsIHsweDBjLDB4ZTQsMHgwMywweDk4LDB4ODAsMHhmYSwweDAwLDB4MzcsMHhhMCwweDBkLDB4ZTAsMHg4MywweGU4LDB4MDAsMHhmZSwweDAwIH0gfSwKK3sgIDE2LCAweDhkZjAsIDAsIHsweDNhLDB4ODAsMHgwYiwweGEwLDB4MDMsMHg2OCwweDAwLDB4ZDgsMHhhMCwweDNmLDB4OTAsMHgwZiwweGEwLDB4MDMsMHhmYSwweDA0IH0gfSwKK3sgIDE2LCAweDhlMDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4ZTAsMHgwOCwweGY4LDB4MDgsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweDhlMTAsIDAsIHsweDBmLDB4ODAsMHgwMywweDIwLDB4MDAsMHhmOCwweDQwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmOCwweDA0IH0gfSwKK3sgIDE2LCAweDhlMjAsIDAsIHsweDMwLDB4MTAsMHgwZiwweDgwLDB4MDMsMHhlMCwweDAyLDB4ZTgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiwweDAwIH0gfSwKK3sgIDE2LCAweDhlMzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGYxLDB4MDAsMHgzMiwweDQwIH0gfSwKK3sgIDE2LCAweDhlNDAsIDAsIHsweDBlLDB4OTAsMHg4MywweGE0LDB4MDAsMHhjOSwweDgwLDB4M2UsMHg0MCwweDBlLDB4OTAsMHgwMywweGE0LDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweDhlNTAsIDAsIHsweDNlLDB4NDAsMHgwYywweDkwLDB4MDMsMHhlNCwweDAwLDB4YzgsMHgwMCwweDNlLDB4NDAsMHg4ZiwweDkwLDB4MDMsMHgwMiwweDA0IH0gfSwKK3sgIDE2LCAweDhlNjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NjQsMHgwMCwweGI5LDB4NDAsMHhhMCwweDYyIH0gfSwKK3sgIDE2LCAweDhlNzAsIDAsIHsweDA4LDB4MTAsMHgwMiwweDI0LDB4MTAsMHg4OSwweDAwLDB4MmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweDhlODAsIDAsIHsweDJlLDB4NTIsMHgwOCwweDk0LDB4MDIsMHhjNCwweDAwLDB4ODksMHg0MCwweDJlLDB4NDAsMHgwYiwweDEwLDB4MDMsMHg2MCwweDEwIH0gfSwKK3sgIDE2LCAweDhlOTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweGI5LDB4MTgsMHgyMiwweDQ0IH0gfSwKK3sgIDE2LCAweDhlYTAsIDAsIHsweDBhLDB4OTAsMHgwMiwweGFjLDB4MDAsMHg4OSwweDEwLDB4MmUsMHhjMCwweDBhLDB4OTAsMHgwMiwweGE0LDB4MDAsMHhiOSwweDgwIH0gfSwKK3sgIDE2LCAweDhlYjAsIDAsIHsweDJlLDB4NjAsMHgwOCwweDk4LDB4MDIsMHhlNiwweDAyLDB4ODksMHgwOCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHgwNiwweDAwIH0gfSwKK3sgIDE2LCAweDhlYzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDQsMHg4MCwweGIxLDB4MjAsMHhhMCwweDQ4IH0gfSwKK3sgIDE2LCAweDhlZDAsIDAsIHsweDA4LDB4OTAsMHgwMiwweDI0LDB4MDgsMHg4MSwweDIzLDB4MmMsMHg1MCwweDA4LDB4MTAsMHgwMiwweDA0LDB4ODAsMHhiMSwweDIwIH0gfSwKK3sgIDE2LCAweDhlZTAsIDAsIHsweDJjLDB4NDgsMHgyOCwweDEyLDB4MDIsMHhlNCwweDgwLDB4ODEsMHgyMCwweDJjLDB4NDAsMHgwYiwweDk4LDB4MDIsMHg0MiwweDA1IH0gfSwKK3sgIDE2LCAweDhlZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGY4LDB4NTAsMHgzMiwweDAwIH0gfSwKK3sgIDE2LCAweDhmMDAsIDAsIHsweDBlLDB4ODUsMHgwMywweGExLDB4ZTAsMHhjYSwweDAwLDB4M2UsMHgwMCwweDBlLDB4ODUsMHgwMywweGEwLDB4MDAsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweDhmMTAsIDAsIHsweDJlLDB4MDAsMHg5YywweGEwLDB4MDMsMHhlMCwweDAwLDB4YzgsMHgyOCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgyZSwweDAxIH0gfSwKK3sgIDE2LCAweDhmMjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDFkLDB4ZjQsMHg0MCwweGY1LDB4MTAsMHgzZiwweDQ0IH0gfSwKK3sgIDE2LCAweDhmMzAsIDAsIHsweDBmLDB4ZDAsMHgwMywweGY0LDB4MDAsMHhmMSwweDEwLDB4M2QsMHg0MCwweDhmLDB4ZDQsMHgwMywweGU0LDB4NTAsMHhmOSwweDEwIH0gfSwKK3sgIDE2LCAweDhmNDAsIDAsIHsweDNlLDB4NDUsMHgwZiwweDkxLDB4MDMsMHhkNCwweDQwLDB4ZmMsMHgwMCwweDNmLDB4YzAsMHg4ZiwweGQwLDB4MjMsMHhlNiwweDA0IH0gfSwKK3sgIDE2LCAweDhmNTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZTYsMHgyMCwweGNkLDB4YTgsMHgzMywweDQwIH0gfSwKK3sgIDE2LCAweDhmNjAsIDAsIHsweDhkLDB4ZDAsMHgwMywweDI2LDB4ODAsMHhjZCwweDAwLDB4M2QsMHg1MCwweDBjLDB4OWEsMHgwMywweDY0LDB4MDAsMHhmOSwweGEwIH0gfSwKK3sgIDE2LCAweDhmNzAsIDAsIHsweDdhLDB4NmEsMHgwZiwweDlhLDB4NjMsMHhlNiwweDgwLDB4YzksMHg4MCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHgwNiwweDAwIH0gfSwKK3sgIDE2LCAweDhmODAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDEwLDB4ZTEsMHgwMCwweDg4LDB4ZTAsMHgzNiwweDAwIH0gfSwKK3sgIDE2LCAweDhmOTAsIDAsIHsweDA4LDB4ODAsMHgwYSwweDIxLDB4NDIsMHhjOCwweDAwLDB4MmUsMHgyOSwweDBjLDB4YTQsMHg0MiwweDIwLDB4MDAsMHhiOCwweDQwIH0gfSwKK3sgIDE2LCAweDhmYTAsIDAsIHsweDJlLDB4MDAsMHgwYiwweDgxLDB4MDIsMHhlMSwweDAwLDB4ODgsMHgwMiwweDNhLDB4MDEsMHgwYiwweGMwLDB4MDIsMHgwZSwweDA0IH0gfSwKK3sgIDE2LCAweDhmYjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHgwMiwweDgxLDB4MDgsMHgyNCwweDQwIH0gfSwKK3sgIDE2LCAweDhmYzAsIDAsIHsweDA5LDB4MTAsMHgwMiwweDA0LDB4MDAsMHg5MSwweDAwLDB4MmMsMHg0MCwweDRiLDB4MTQsMHgwMiwweDQ0LDB4MDAsMHhiNSwweDEwIH0gfSwKK3sgIDE2LCAweDhmZDAsIDAsIHsweDI5LDB4NDAsMHgwYiwweDUwLDB4MDIsMHhmNSwweDAwLDB4YjUsMHgwMCwweDJkLDB4NDAsMHgwYiwweGQwLDB4MDIsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweDhmZTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDExLDB4YTYsMHgwMSwweDg5LDB4MDAsMHgyNiwweDQwIH0gfSwKK3sgIDE2LCAweDhmZjAsIDAsIHsweDA4LDB4OTQsMHgwMiwweDI0LDB4MDEsMHg4OSwweDAwLDB4MmUsMHg0MCwweDFhLDB4OTAsMHgwMiwweDZjLDB4MDAsMHhiZiwweDAyIH0gfSwKK3sgIDE2LCAweDkwMDAsIDAsIHsweDJmLDB4NDAsMHgwYiwweGQwLDB4MDIsMHhmNCwweDAyLDB4YmQsMHg4MCwweDJiLDB4NDAsMHg4YiwweGQ4LDB4M2EsMHgwNiwweDA0IH0gfSwKK3sgIDE2LCAweDkwMTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGM5LDB4MDUsMHgzNiwweDQxIH0gfSwKK3sgIDE2LCAweDkwMjAsIDAsIHsweDBkLDB4MWMsMHgwMywweDI0LDB4MDAsMHhkOSwweDAwLDB4M2UsMHg0MiwweDJmLDB4OTQsMHgwMywweDY0LDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweDkwMzAsIDAsIHsweDNhLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NzAsMHgwZiwweDEwLDB4MDMsMHgyOCwweDA0IH0gfSwKK3sgIDE2LCAweDkwNDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAxLDB4ODQsMHgwOCwweGY5LDB4MjQsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweDkwNTAsIDAsIHsweDBmLDB4OTEsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MSwweDBkLDB4MTAsMHgwMywweGE0LDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweDkwNjAsIDAsIHsweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4YzksMHgwMCwweDNlLDB4NjQsMHgwZiwweDkwLDB4MDMsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweDkwNzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwOCwweGM4LDB4ODAsMHgzMiwweDAyIH0gfSwKK3sgIDE2LCAweDkwODAsIDAsIHsweDBmLDB4ODAsMHgwMywweDAwLDB4MDAsMHhjOCwweDA4LDB4M2EsMHgxMCwweGNlLDB4ODQsMHgwMywweGUwLDB4MDAsMHhmYywweDAwIH0gfSwKK3sgIDE2LCAweDkwOTAsIDAsIHsweDNmLDB4MDAsMHg4ZiwweGMwLDB4MDMsMHhmMCwweDgwLDB4ZmMsMHgwMCwweDNmLDB4MTgsMHgwZiwweGMwLDB4NDMsMHhjYSwweDA0IH0gfSwKK3sgIDE2LCAweDkwYTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4MjgsMHgwMCwweDhlLDB4MDAsMHhhMSwweDgwIH0gfSwKK3sgIDE2LCAweDkwYjAsIDAsIHsweDBiLDB4ZTAsMHgwMiwweDI4LDB4MDAsMHhkZSwweGMyLDB4MjMsMHg5MCwweDAwLDB4YTAsMHgwMiwweGU4LDB4MDAsMHhiYSwweDAwIH0gfSwKK3sgIDE2LCAweDkwYzAsIDAsIHsweDJlLDB4ODAsMHgwYiwweGEwLDB4MDIsMHhlOCwweDAwLDB4ZmEsMHgwMCwweDJlLDB4ODAsMHgwYiwweGEwLDB4MDIsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweDkwZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweDk5LDB4ODEsMHg2MCwweGMwIH0gfSwKK3sgIDE2LCAweDkwZTAsIDAsIHsweDBiLDB4MTAsMHgwMiwweDBjLDB4MDAsMHg5MCwweDEwLDB4MmEsMHhmYywweDBiLDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweDkwZjAsIDAsIHsweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhjYywweDAwLDB4YjMsMHgwMCwweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweDkxMDAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDAxLDB4MWMsMHg4MiwweDk1LDB4NDAsMHgyMSwweGMwIH0gfSwKK3sgIDE2LCAweDkxMTAsIDAsIHsweDBiLDB4NTAsMHgwMiwweDFjLDB4ODAsMHg5MCwweDgwLDB4MjMsMHgwMSwweDA5LDB4NzIsMHgxMiwweGRjLDB4MDAsMHhiNiwweDAwIH0gfSwKK3sgIDE2LCAweDkxMjAsIDAsIHsweDJkLDB4MDAsMHgwYiwweDQwLDB4MDIsMHhkMCwweDAwLDB4YjQsMHgwOSwweDJkLDB4MDAsMHg0YiwweDQwLDB4ODIsMHhlOCwweDAwIH0gfSwKK3sgIDE2LCAweDkxMzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4M2UsMHg4MCwweGRkLDB4ODAsMHhiMSwweGUwIH0gfSwKK3sgIDE2LCAweDkxNDAsIDAsIHsweDBmLDB4ZGEsMHgwMywweDBmLDB4ODAsMHhkNCwweDgwLDB4MzksMHhlMCwweDBiLDB4N2EsMHgwMywweGRlLDB4MDAsMHhmNSwweDgwIH0gfSwKK3sgIDE2LCAweDkxNTAsIDAsIHsweDNkLDB4MjAsMHgwZiwweDQ4LDB4MDMsMHhkNiwweDEwLDB4ZjYsMHg4MSwweDNkLDB4ZTAsMHg4ZiwweDY4LDB4MDMsMHhlYSwweDAyIH0gfSwKK3sgIDE2LCAweDkxNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDFkLDB4YWMsMHgwMCwweGVkLDB4MDAsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweDkxNzAsIDAsIHsweDBmLDB4OTEsMHgwYiwweGVjLDB4MTAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBlLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweDkxODAsIDAsIHsweDNlLDB4YzAsMHg0ZiwweGIwLDB4MDMsMHhlOCwweDAwLDB4ZTksMHgwMSwweDNlLDB4MDAsMHgwZiwweDkwLDB4MDMsMHhjMiwweDA2IH0gfSwKK3sgIDE2LCAweDkxOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHgyMCwweGJmLDB4ODEsMHgzMywweGE0IH0gfSwKK3sgIDE2LCAweDkxYTAsIDAsIHsweDhjLDB4MTksMHgwMywweDNlLDB4MDAsMHhjZCwweDgwLDB4M2YsMHhlMCwweDBmLDB4ZjgsMHg4MywweDNlLDB4MDAsMHhlZiwweDgwIH0gfSwKK3sgIDE2LCAweDkxYjAsIDAsIHsweDNmLDB4ZTAsMHgwZiwweGY5LDB4MTMsMHhmYSwweDEwLDB4ZmQsMHg4MCwweDNmLDB4YTQsMHgwZiwweGQ4LDB4MDMsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweDkxYzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4OWMsMHgwMCwweGJmLDB4MjAsMHgzMSwweGMyIH0gfSwKK3sgIDE2LCAweDkxZDAsIDAsIHsweDA4LDB4NWEsMHgwMiwweDNjLDB4MDIsMHg4NywweDAwLDB4MmQsMHg5NCwweDBiLDB4NzAsMHgwYSwweDFjLDB4NDAsMHg4NiwweDEwIH0gfSwKK3sgIDE2LCAweDkxZTAsIDAsIHsweDJkLDB4MDAsMHgwYiwweDQwLDB4MDIsMHhkNCwweDAwLDB4ZjYsMHgwMCwweDJkLDB4NDAsMHg0YiwweDYwLDB4MDIsMHhlYSwweDA0IH0gfSwKK3sgIDE2LCAweDkxZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwMCwweGI3LDB4MDEsMHgyMywweDgwIH0gfSwKK3sgIDE2LCAweDkyMDAsIDAsIHsweDI4LDB4NTAsMHgwMiwweDFjLDB4MDAsMHg4NCwweDAwLDB4MmQsMHhjMCwweDBiLDB4MzAsMHgwMiwweDFjLDB4MDAsMHhiNSwweDAwIH0gfSwKK3sgIDE2LCAweDkyMTAsIDAsIHsweDJkLDB4MDAsMHgwYiwweDQwLDB4MDYsMHhkMCwweDQwLDB4YjQsMHgwOCwweDJkLDB4ODAsMHgwYiwweDQ4LDB4MDIsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweDkyMjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDE0LDB4Y2MsMHgwMCwweGIzLDB4MDgsMHhhMCwweDIwIH0gfSwKK3sgIDE2LCAweDkyMzAsIDAsIHsweDA4LDB4MTEsMHg4YSwweDBlLDB4MDAsMHg4MCwweDAwLDB4MmMsMHg5MCwweDBiLDB4MzcsMHgwMiwweDBjLDB4MDAsMHg5MCwweDAwIH0gfSwKK3sgIDE2LCAweDkyNDAsIDAsIHsweDJjLDB4YzAsMHgwYiwweDMwLDB4NDIsMHhjYywweDA0LDB4YTMsMHg4MCwweDJjLDB4NTAsMHgwYiwweDMwLDB4MDIsMHhjOCwweDA0IH0gfSwKK3sgIDE2LCAweDkyNTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmMsMHgwMCwweGY5LDB4ODAsMHgzMiwweDYwIH0gfSwKK3sgIDE2LCAweDkyNjAsIDAsIHsweDBjLDB4ZDQsMHgwMywweDNjLDB4ODAsMHg4OCwweDAwLDB4M2UsMHhkMCwweDBmLDB4ZjgsMHgwMywweDI4LDB4MDAsMHhmYSwweDAwIH0gfSwKK3sgIDE2LCAweDkyNzAsIDAsIHsweDNlLDB4YzAsMHgwZiwweGIwLDB4MDcsMHhlYywweDAxLDB4YmIsMHg4MCwweDNlLDB4NTQsMHgwZiwweGIwLDB4MDYsMHhlYSwweDA0IH0gfSwKK3sgIDE2LCAweDkyODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4ZWUsMHgwOCwweGY5LDB4ODAsMHgzYSwweGMwIH0gfSwKK3sgIDE2LCAweDkyOTAsIDAsIHsweDBmLDB4OTAsMHgwMywweGVjLDB4MDAsMHhmOCwweDQwLDB4M2UsMHg1OCwweDBmLDB4YjAsMHg0MywweGU5LDB4MDAsMHhlYiwweDQ0IH0gfSwKK3sgIDE2LCAweDkyYTAsIDAsIHsweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhlMCwweDBkLDB4ZjgsMHgwMCwweDNlLDB4ODAsMHgwZiwweDgwLDB4MDMsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweDkyYjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZGMsMHgwMCwweGNmLDB4MDAsMHgzMywweDQwIH0gfSwKK3sgIDE2LCAweDkyYzAsIDAsIHsweDBjLDB4ZDAsMHgwMywweDNjLDB4MzAsMHhjYywweDAwLDB4M2IsMHhjMCwweDJkLDB4ZjAsMHgwMywweGQ4LDB4MDIsMHhjYywweDAwIH0gfSwKK3sgIDE2LCAweDkyZDAsIDAsIHsweDNkLDB4MDAsMHgwYywweGMwLDB4MDMsMHhmNCwweDAwLDB4ZWUsMHgwMiwweDM3LDB4NDAsMHgwYywweGUwLDB4MDMsMHhjMCwweDQ0IH0gfSwKK3sgIDE2LCAweDkyZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MSwweDA0LDB4NmMsMHgxOCwweDgzLDB4ODQsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweDkyZjAsIDAsIHsweDRhLDB4MTAsMHgwMiwweDBjLDB4MDAsMHhhOCwweDQ4LDB4MmUsMHg2MCwweDA4LDB4YjAsMHgwMiwweGU5LDB4MDAsMHg4OSwweDQwIH0gfSwKK3sgIDE2LCAweDkzMDAsIDAsIHsweDJlLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhlOCwweDEwLDB4YjEsMHgwMSwweDIwLDB4ODAsMHgwYSwweDkwLDB4MDMsMHhhMCwweDQwIH0gfSwKK3sgIDE2LCAweDkzMTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweDhiLDB4ODIsMHgyMiwweDA4IH0gfSwKK3sgIDE2LCAweDkzMjAsIDAsIHsweDA4LDB4OTAsMHgwMiwweDJjLDB4MTQsMHg4OCwweDA0LDB4MmMsMHgwOCwweDA4LDB4YjAsMHgxMiwweGU4LDB4MDAsMHg4YSwweDAwIH0gfSwKK3sgIDE2LCAweDkzMzAsIDAsIHsweDJlLDB4YzAsMHgwYSwweGIwLDB4MDIsMHhlOCwweDAxLDB4YjksMHgwMCwweDI2LDB4MDQsMHgwOCwweDkwLDB4MDIsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweDkzNDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MGMsMHgwMCwweDgzLDB4ODAsMHhhMiwweGMwIH0gfSwKK3sgIDE2LCAweDkzNTAsIDAsIHsweDBhLDB4OTIsMHgwMiwweDJjLDB4MDAsMHhhMiwweDAwLDB4MmMsMHgwMCwweDA4LDB4MzQsMHgwMiwweGM4LDB4MDAsMHg4MywweDAwIH0gfSwKK3sgIDE2LCAweDkzNjAsIDAsIHsweDJjLDB4MDAsMHgyOCwweDAwLDB4MDIsMHhjNCwweDAxLDB4YmEsMHgwMCwweDIyLDB4YzAsMHgwMiwweDIwLDB4MDYsMHhjMiwweDAxIH0gfSwKK3sgIDE2LCAweDkzNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGNhLDB4MDAsMHhiMiwweDAwIH0gfSwKK3sgIDE2LCAweDkzODAsIDAsIHsweDBjLDB4OTIsMHgwYiwweDJjLDB4MDQsMHhjOCwweDA0LDB4M2EsMHgwMCwweDBjLDB4YjQsMHgwMywweGU4LDB4MDAsMHhjOCwweDAwIH0gfSwKK3sgIDE2LCAweDkzOTAsIDAsIHsweDJlLDB4MDAsMHgwYywweDgwLDB4MzMsMHhlMSwweDQwLDB4ZTgsMHgwMCwweDM2LDB4MDAsMHgwYywweDgwLDB4MDMsMHhjMCwweDAzIH0gfSwKK3sgIDE2LCAweDkzYTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDFkLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHgzZCwweDAwIH0gfSwKK3sgIDE2LCAweDkzYjAsIDAsIHsweDBmLDB4ZDEsMHgwYiwweGZjLDB4MDEsMHhmYywweDAwLDB4M2YsMHgwMCwweDBmLDB4ZjAsMHgwMywweGQ4LDB4MDAsMHhmZCwweDAwIH0gfSwKK3sgIDE2LCAweDkzYzAsIDAsIHsweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmYywweDgwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDcsMHhhOCwweDA2IH0gfSwKK3sgIDE2LCAweDkzZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDE1LDB4ZjMsMHgwMCwweGNmLDB4ODAsMHgzNSwweDYwIH0gfSwKK3sgIDE2LCAweDkzZTAsIDAsIHsweDRlLDB4NjgsMHg0MywweDVjLDB4MDAsMHhlNywweDgwLDB4MzksMHhjMCwweDBjLDB4YzEsMHgwMywweDdlLDB4MDAsMHhjZiwweDM0IH0gfSwKK3sgIDE2LCAweDkzZjAsIDAsIHsweDM1LDB4ZTEsMHg0ZCwweGYyLDB4MDMsMHg3YywweDAwLDB4ZGYsMHgzOCwweDNmLDB4YzgsMHgwZiwweGY4LDB4MDMsMHhmMCwweDAwIH0gfSwKK3sgIDE2LCAweDk0MDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDE4LDB4YzgsMHgwMCwweGRiLDB4ODQsMHgyMiwweDYwIH0gfSwKK3sgIDE2LCAweDk0MTAsIDAsIHsweDA4LDB4YWMsMHgwYSwweDJjLDB4MDAsMHg4YiwweDgwLDB4MjIsMHgzMCwweDA4LDB4OTEsMHgyMiwweDJjLDB4OTAsMHgyNywweDYxIH0gfSwKK3sgIDE2LCAweDk0MjAsIDAsIHsweDIyLDB4Y2EsMHg4OCwweGZjLDB4MjIsMHhiZiwweDAwLDB4OGIsMHg2MiwweDJmLDB4ZDAsMHgwOSwweGI4LDB4MDMsMHhiMCwweDA0IH0gfSwKK3sgIDE2LCAweDk0MzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4ZTIsMHg4MCwweGE5LDB4MDIsMHgyNCwweDQwIH0gfSwKK3sgIDE2LCAweDk0NDAsIDAsIHsweDgyLDB4MzQsMHg0MiwweDA0LDB4MDAsMHhhOSwweDAwLDB4MjgsMHhjNSwweDQ4LDB4MzIsMHgwMiwweDRjLDB4MjAsMHg4MywweDMwIH0gfSwKK3sgIDE2LCAweDk0NTAsIDAsIHsweDIwLDB4YzAsMHgwOCwweDMxLDB4MDIsMHgwZCwweDAwLDB4YjMsMHgyMCwweDJjLDB4YzQsMHgwYiwweDMwLDB4MDIsMHhmMiwweDAxIH0gfSwKK3sgIDE2LCAweDk0NjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4YWEsMHgwMiwweGI5LDB4MDQsMHgyMiwweDYwIH0gfSwKK3sgIDE2LCAweDk0NzAsIDAsIHsweDI4LDB4YjIsMHgwMiwweDI2LDB4MDAsMHg4OSwweDg4LDB4MDIsMHhjMCwweDA4LDB4MzEsMHgxMiwweGVjLDB4MDAsMHg4YiwweDAwIH0gfSwKK3sgIDE2LCAweDk0ODAsIDAsIHsweDJhLDB4ZDAsMHgwOCwweGIwLDB4MDIsMHhhYywweDAwLDB4MmIsMHgwMCwweDJlLDB4YzAsMHgwYiwweGIwLDB4MDIsMHhiMCwweDA0IH0gfSwKK3sgIDE2LCAweDk0OTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZTIsMHgwMCwweGUzLDB4MDAsMHgzNiwweDIwIH0gfSwKK3sgIDE2LCAweDk0YTAsIDAsIHsweDBlLDB4YTQsMHg2MywweDZlLDB4MDAsMHhlMSwweGMwLDB4MWEsMHhjMSwweDBjLDB4ODAsMHgwMywweDY4LDB4NzAsMHhjYiwweDAwIH0gfSwKK3sgIDE2LCAweDk0YjAsIDAsIHsweDM2LDB4ODAsMHgwZCwweGIwLDB4MDMsMHg0YywweDAwLDB4ZmIsMHgwNCwweDNlLDB4YzEsMHgwZiwweGIwLDB4MDMsMHhkMCwweDA0IH0gfSwKK3sgIDE2LCAweDk0YzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4YjgsMHgwNCwweGRmLDB4MDAsMHgzZiwweDAwIH0gfSwKK3sgIDE2LCAweDk0ZDAsIDAsIHsweDBmLDB4ZTgsMHgwMywweGZjLDB4MDAsMHhmZCwweDAwLDB4M2YsMHgwMCwweDJiLDB4OTgsMHgwMywweDNhLDB4MDAsMHg3NywweDAwIH0gfSwKK3sgIDE2LCAweDk0ZTAsIDAsIHsweDI3LDB4ZTQsMHgwZiwweGYwLDB4MDMsMHhmYywweDAwLDB4ZGYsMHgwMCwweDNlLDB4YzAsMHgwZCwweGYwLDB4NDMsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweDk0ZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg1MCwweDAwLDB4YTQsMHg2OCwweGNiLDB4MjAsMHgzYSwweDkwIH0gfSwKK3sgIDE2LCAweDk1MDAsIDAsIHsweDBmLDB4MjQsMHhhMywweGFjLDB4MDAsMHhlOSwweDUwLDB4M2EsMHhjMCwweDBlLDB4YjQsMHg4MywweDJjLDB4MDgsMHhlYiwweDAwIH0gfSwKK3sgIDE2LCAweDk1MTAsIDAsIHsweDNhLDB4OTAsMHgwZSwweGIwLDB4OGIsMHhlYywweDgwLDB4ZmIsMHgwMCwweDNlLDB4YzAsMHgwZSwweGIwLDB4MDMsMHg5MCwweDA0IH0gfSwKK3sgIDE2LCAweDk1MjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDAxLDB4MGEsMHgwMCwweDhiLDB4YTAsMHgyMCwweDgwIH0gfSwKK3sgIDE2LCAweDk1MzAsIDAsIHsweDBkLDB4YTgsMHgwMiwweDJjLDB4MDQsMHg4OSwweDQwLDB4MjgsMHhlOCwweDA4LDB4YjIsMHgwMiwweDJjLDB4MDAsMHhhZiwweDAwIH0gfSwKK3sgIDE2LCAweDk1NDAsIDAsIHsweDAyLDB4ODAsMHgwOCwweDdjLDB4MDMsMHgzZCwweDgwLDB4M2YsMHgwMCwweDJmLDB4YzAsMHgwOCwweGIwLDB4MDIsMHgzNiwweDAwIH0gfSwKK3sgIDE2LCAweDk1NTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NDksMHgwMCwweDAzLDB4NDAsMHgyOCwweGMwIH0gfSwKK3sgIDE2LCAweDk1NjAsIDAsIHsweDJiLDB4MjgsMHg0YSwweDI4LDB4MDAsMHhhMSwweDAwLDB4NjgsMHhkMiwweDBhLDB4MjAsMHg0MiwweGE0LDB4MDEsMHhhMywweDAwIH0gfSwKK3sgIDE2LCAweDk1NzAsIDAsIHsweDAyLDB4NDAsMHgwYSwweDM0LDB4MDIsMHgwZCwweDAwLDB4MzMsMHgwMCwweDJjLDB4YzAsMHgwYSwweDMwLDB4MDAsMHhiOCwweDAwIH0gfSwKK3sgIDE2LCAweDk1ODAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDAxLDB4MWEsMHgwMCwweDg3LDB4OTAsMHgyMSwweGU0IH0gfSwKK3sgIDE2LCAweDk1OTAsIDAsIHsweDJiLDB4YzgsMHgxMiwweDNhLDB4MDAsMHg4NSwweGMwLDB4MmIsMHgyMSwweDI4LDB4NjgsMHgwMiwweGI2LDB4MDAsMHhhNywweDg0IH0gfSwKK3sgIDE2LCAweDk1YTAsIDAsIHsweDIzLDB4NjAsMHgwOCwweDM4LDB4ODAsMHgxZSwweDAwLDB4YjcsMHg4MCwweDJkLDB4ZTAsMHgwOCwweDc4LDB4MDIsMHgyZSwweDAwIH0gfSwKK3sgIDE2LCAweDk1YjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MDgsMHgwMCwweGMxLDB4MDAsMHgzOCwweDU0IH0gfSwKK3sgIDE2LCAweDk1YzAsIDAsIHsweDBmLDB4MjYsMHg4MywweDgwLDB4MDAsMHhlMCwweDM0LDB4MjgsMHhjOCwweDBlLDB4MmMsMHgwYiwweDhjLDB4MDAsMHhlMywweDAwIH0gfSwKK3sgIDE2LCAweDk1ZDAsIDAsIHsweDc4LDB4NDUsMHgwZSwweDMwLDB4MDMsMHg4ZSwweDgwLDB4ZjMsMHgwMCwweDNjLDB4YzgsMHgwZSwweDMwLDB4MDMsMHg5MiwweDAyIH0gfSwKK3sgIDE2LCAweDk1ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDFkLDB4YjgsMHgwMCwweGY1LDB4MDIsMHgzZiwweDQ0IH0gfSwKK3sgIDE2LCAweDk1ZjAsIDAsIHsweDBkLDB4OTAsMHgwMywweGY4LDB4MDAsMHhiZCwweDE0LDB4MWYsMHhjMCwweDBmLDB4ZTEsMHgyMywweDVjLDB4NDQsMHg5ZiwweDQyIH0gfSwKK3sgIDE2LCAweDk2MDAsIDAsIHsweDNmLDB4YzAsMHgwZiwweGY0LDB4ODIsMHg3ZCwweDQwLDB4ZmYsMHgxMCwweDNmLDB4YzAsMHg0ZiwweDcwLDB4MDcsMHhkMCwweDA2IH0gfSwKK3sgIDE2LCAweDk2MTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZTgsMHgwMiwweGNiLDB4MDAsMHgzOCwweGMwIH0gfSwKK3sgIDE2LCAweDk2MjAsIDAsIHsweDNjLDB4YTAsMHgwMywweGVjLDB4MDAsMHhlOSwweDAwLDB4M2UsMHhjMCwweDBjLDB4YjAsMHgwMywweDIwLDB4MDQsMHhmYiwweDIxIH0gfSwKK3sgIDE2LCAweDk2MzAsIDAsIHsweDNlLDB4ODAsMHg0ZiwweGI0LDB4MDMsMHhjZiwweDAwLDB4Y2IsMHgwMCwweDNlLDB4Y2MsMHg0ZiwweGIwLDB4NDMsMHhlYSwweDAwIH0gfSwKK3sgIDE2LCAweDk2NDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDkxLDB4OTgsMHgwMCwweDg3LDB4MDAsMHgyMSwweGMwIH0gfSwKK3sgIDE2LCAweDk2NTAsIDAsIHsweDA4LDB4NDAsMHgwMiwweGRjLDB4MDQsMHhiNSwweDAwLDB4MmQsMHgwMCwweDJkLDB4NzAsMHgwMiwweDFjLDB4MWMsMHhiNywweDAyIH0gfSwKK3sgIDE2LCAweDk2NjAsIDAsIHsweDJkLDB4YzAsMHgwYiwweDcyLDB4MDIsMHhkYywweDAwLDB4ODcsMHg0MCwweDJkLDB4Y2EsMHg4YiwweDcwLDB4MDIsMHhmMiwweDA0IH0gfSwKK3sgIDE2LCAweDk2NzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4YmEsMHgwMCwweDg3LDB4ODgsMHgyYiwweGUwIH0gfSwKK3sgIDE2LCAweDk2ODAsIDAsIHsweDE4LDB4NzgsMHgyMiwweGQ2LDB4MTEsMHhhNCwweDgyLDB4MmYsMHhlMCwweDA4LDB4NzgsMHgwMiwweDEyLDB4MDAsMHhiNywweDk0IH0gfSwKK3sgIDE2LCAweDk2OTAsIDAsIHsweDZkLDB4NjAsMHg0YiwweDdhLDB4MDIsMHhkZSwweDQwLDB4YjcsMHhhMCwweDJkLDB4ZTAsMHgwYiwweDc4LDB4MDYsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweDk2YTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE0LDB4YzksMHgxMiwweDgzLDB4ODIsMHgyOCwweGQ0IH0gfSwKK3sgIDE2LCAweDk2YjAsIDAsIHsweDk4LDB4MDAsMHgwNiwweGVmLDB4MDUsMHhiMSwweDkwLDB4MmMsMHhjMSwweDA5LDB4YjQsMHgwMiwweDBjLDB4MDQsMHhiMywweDAxIH0gfSwKK3sgIDE2LCAweDk2YzAsIDAsIHsweDZjLDB4ZjAsMHgwYiwweDMwLDB4MDIsMHhjYywweDAwLDB4YmIsMHgwMCwweDJlLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhkMiwweDA0IH0gfSwKK3sgIDE2LCAweDk2ZDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YjgsMHg0MCwweGNhLDB4ODAsMHgzYiwweGEwIH0gfSwKK3sgIDE2LCAweDk2ZTAsIDAsIHsweDRjLDB4ZTUsMHgwMiwweGY4LDB4ODAsMHhlZSwweDAwLDB4M2QsMHg4MCwweDJjLDB4ZTAsMHgwZiwweDM4LDB4ODAsMHhmYSwweDAwIH0gfSwKK3sgIDE2LCAweDk2ZjAsIDAsIHsweDNmLDB4YTksMHgwZiwweGEwLDB4MDMsMHhlOCwweDAwLDB4YmEsMHgwMiwweDNlLDB4ODAsMHg4YiwweGEwLDB4MDMsMHhmYSwweDA0IH0gfSwKK3sgIDE2LCAweDk3MDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4ZTAsMHgxMCwweGY4LDB4MDAsMHgyNiwweDAyIH0gfSwKK3sgIDE2LCAweDk3MTAsIDAsIHsweDBmLDB4ODQsMHgwMywweGUwLDB4MjQsMHhmOCwweDAwLDB4M2UsMHgwMCwweDRmLDB4ODAsMHhhMywweGUwLDB4MzAsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweDk3MjAsIDAsIHsweDM2LDB4MDIsMHgwZiwweDgwLDB4MjMsMHhlMCwweDA0LDB4MDgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiwweDAwIH0gfSwKK3sgIDE2LCAweDk3MzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGQ5LDB4MDAsMHhiNiwweDQxIH0gfSwKK3sgIDE2LCAweDk3NDAsIDAsIHsweDRlLDB4OTksMHgwYiwweGE0LDB4MDAsMHg2OSwweDEwLDB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMywweGE0LDB4MTAsMHhjOSwweDAwIH0gfSwKK3sgIDE2LCAweDk3NTAsIDAsIHsweDNlLDB4NDAsMHgwZCwweDkyLDB4MDMsMHhlNiwweDAwLDB4ZjksMHgwMCwweDNhLDB4NDAsMHgwZSwweDkwLDB4MDMsMHhjMiwweDA0IH0gfSwKK3sgIDE2LCAweDk3NjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NjQsMHgwMCwweDgxLDB4MDAsMHgyMCwweDQyIH0gfSwKK3sgIDE2LCAweDk3NzAsIDAsIHsweDA4LDB4MTQsMHg5YSwweDI0LDB4MDAsMHg4OSwweDAwLDB4NmUsMHg1MCwweDAwLDB4OTAsMHgwMiwweDI0LDB4MTAsMHhkOSwweDAyIH0gfSwKK3sgIDE2LCAweDk3ODAsIDAsIHsweDZlLDB4NDAsMHgwYiwweDk0LDB4MDMsMHhhNywweDAwLDB4YjksMHgwMCwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDMsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweDk3OTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MDYsMHgwMCwweDk5LDB4MDAsMHhhNiwweDQxIH0gfSwKK3sgIDE2LCAweDk3YTAsIDAsIHsweDBhLDB4OTAsMHgwNiwweDJjLDB4MDAsMHhhOSwweDA5LDB4NmUsMHg1MCwweDA4LDB4OTEsMHgwMiwweDg0LDB4MDQsMHg4OSwweDAwIH0gfSwKK3sgIDE2LCAweDk3YjAsIDAsIHsweDBlLDB4NDAsMHgwYiwweDk0LDB4MDIsMHhlNSwweDQ5LDB4YjksMHgwMCwweDBhLDB4NDAsMHgwYSwweDkwLDB4MDIsMHhjNiwweDAwIH0gfSwKK3sgIDE2LCAweDk3YzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDYsMHgwMCwweDgxLDB4MDAsMHgyMiwweDQwIH0gfSwKK3sgIDE2LCAweDk3ZDAsIDAsIHsweDA4LDB4MTIsMHgyMiwweDA0LDB4ODEsMHhhMSwweDAwLDB4MmMsMHg0MCwweDA4LDB4MTYsMHgwMiwweDA0LDB4MDAsMHg5MSwweDIwIH0gfSwKK3sgIDE2LCAweDk3ZTAsIDAsIHsweDJjLDB4NDAsMHgwYiwweDEyLDB4NDIsMHg4NCwweDg5LDB4YjEsMHgyMCwweDIwLDB4NDgsMHgwOCwweDEwLDB4MDIsMHhjMiwweDAxIH0gfSwKK3sgIDE2LCAweDk3ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGQ4LDB4MDAsMHgzNiwweDAwIH0gfSwKK3sgIDE2LCAweDk4MDAsIDAsIHsweDBhLDB4ODAsMHgwMywweGExLDB4NDAsMHhlOCwweDAwLDB4MmUsMHgwMCwweDBjLDB4MDAsMHgyMywweGExLDB4NDAsMHhjOCwweDUwIH0gfSwKK3sgIDE2LCAweDk4MTAsIDAsIHsweDJlLDB4MTQsMHgwZCwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHg1MCwweDNhLDB4MDAsMHgwZSwweDgwLDB4MDMsMHhlZSwweDAzIH0gfSwKK3sgIDE2LCAweDk4MjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDFkLDB4ZDQsMHgwMCwweGY1LDB4MDAsMHhiZiwweDQwIH0gfSwKK3sgIDE2LCAweDk4MzAsIDAsIHsweDBmLDB4ZDEsMHgwMywweGY0LDB4NDQsMHhkZCwweDAyLDB4M2QsMHg1MCwweDJiLDB4ZDEsMHgyMywweGY0LDB4MDAsMHhmOSwweDEwIH0gfSwKK3sgIDE2LCAweDk4NDAsIDAsIHsweDNmLDB4NDAsMHgwZCwweDkxLDB4MDMsMHhhNCwweDQ4LDB4ZjksMHgxMiwweDNlLDB4NGUsMHgxZiwweDkwLDB4MDMsMHhhNiwweDAyIH0gfSwKK3sgIDE2LCAweDk4NTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4ZjQsMHgwMCwweGM1LDB4MDQsMHgzYiwweDQwIH0gfSwKK3sgIDE2LCAweDk4NjAsIDAsIHsweDBmLDB4ZDgsMHgwMywweGE3LDB4ODAsMHhmZCwweDAwLDB4YjMsMHg2OCwweDBkLDB4ZDgsMHg0MywweGE1LDB4MTAsMHhjOSwweGEwIH0gfSwKK3sgIDE2LCAweDk4NzAsIDAsIHsweDMyLDB4NTEsMHg0ZiwweDVhLDB4NDMsMHgzNiwweDAwLDB4YzksMHhhMCwweDdhLDB4NjgsMHgwYiwweGQwLDB4MDMsMHhjNiwweDAxIH0gfSwKK3sgIDE2LCAweDk4ODAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg3OCwweDE4LDB4Y2EsMHg4OCwweDg4LDB4MDIsMHgwMiwweDAwIH0gfSwKK3sgIDE2LCAweDk4OTAsIDAsIHsweDhkLDB4ODQsMHgyMiwweDIzLDB4NDIsMHhmOCwweDAwLDB4MjIsMHgwNCwweDI4LDB4OGEsMHhhMiwweGFhLDB4OTQsMHg4OCwweGU5IH0gfSwKK3sgIDE2LCAweDk4YTAsIDAsIHsweDIwLDB4YTgsMHgwYSwweDgwLDB4MGEsMHgyMSwweDQwLDB4ODAsMHhlMiwweDJlLDB4MjgsMHgwYiwweDgwLDB4MDIsMHhjZSwweDA0IH0gfSwKK3sgIDE2LCAweDk4YjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA1LDB4YzQsMHgyMCwweGExLDB4MDQsMHhhOCwweGMwIH0gfSwKK3sgIDE2LCAweDk4YzAsIDAsIHsweDBiLDB4MWMsMHgyYSwweDI0LDB4MDAsMHgzOSwweDA0LDB4MjAsMHg0MCwweDJhLDB4MWUsMHgwMiwweGU0LDB4ODAsMHhiMSwweDEwIH0gfSwKK3sgIDE2LCAweDk4ZDAsIDAsIHsweDJhLDB4NDgsMHgwOSwweDE0LDB4NDYsMHgwNCwweDAwLDB4ODEsMHgzOCwweDJjLDB4NWIsMHgwYiwweDEwLDB4MDIsMHhkMiwweDAwIH0gfSwKK3sgIDE2LCAweDk4ZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4YTQsMHgxMiwweGE5LDB4MjQsMHgyMiwweDQwIH0gfSwKK3sgIDE2LCAweDk4ZjAsIDAsIHsweDI5LDB4OTAsMHgwMiwweDI0LDB4MDAsMHgzOSwweDAwLDB4MDIsMHg1OCwweDA4LDB4MTgsMHgxMCwweGU2LDB4MDEsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweDk5MDAsIDAsIHsweGFhLDB4NDQsMHgwOCwweDkwLDB4MDIsMHgyNCwweDAwLDB4ODksMHgwMCwweDBlLDB4NDEsMHgwYiwweDkwLDB4MDIsMHhjNiwweDA0IH0gfSwKK3sgIDE2LCAweDk5MTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDA1LDB4ZTQsMHgwMCwweGUxLDB4MDEsMHgyYSwweDY0IH0gfSwKK3sgIDE2LCAweDk5MjAsIDAsIHsweDJmLDB4OTQsMHgxMywweDI0LDB4MDIsMHg3MSwweDYwLDB4MTIsMHg2MCwweDRkLDB4OTAsMHgwMCwweGM1LDB4MDIsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweDk5MzAsIDAsIHsweDNhLDB4NDAsMHgwZiwweDkwLDB4MjMsMHgyNCwweDAyLDB4YzksMHgwMiwweDNhLDB4NDAsMHgwZiwweDkwLDB4MDIsMHhlOCwweDA0IH0gfSwKK3sgIDE2LCAweDk5NDAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2OCwweDAxLDB4YTQsMHgwMCwweGQ5LDB4MDAsMHgzZSwweDYwIH0gfSwKK3sgIDE2LCAweDk5NTAsIDAsIHsweGFmLDB4OTAsMHg4MywweDY0LDB4ODgsMHhmOSwweDIwLDB4M2UsMHg2MiwweDAzLDB4OTAsMHg4MywweGE0LDB4MDAsMHhjOSwweDAwIH0gfSwKK3sgIDE2LCAweDk5NjAsIDAsIHsweDM2LDB4NjAsMHgwZiwweDEwLDB4MDMsMHhjNCwweDAwLDB4ZjksMHgwMCwweDdlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhkYSwweDAwIH0gfSwKK3sgIDE2LCAweDk5NzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAwLDB4YTEsMHgwMCwweGM4LDB4ODIsMHgzMiwweDAwIH0gfSwKK3sgIDE2LCAweDk5ODAsIDAsIHsweDZmLDB4MDAsMHgwMywweGEwLDB4MDAsMHhkOCwweDQwLDB4MzAsMHgwMCwweDBlLDB4ODAsMHgwMywweDYwLDB4MDQsMHhmOCwweDAxIH0gfSwKK3sgIDE2LCAweDk5OTAsIDAsIHsweDNlLDB4MTAsMHg0ZiwweDgwLDB4OGIsMHgyMiwweDAwLDB4ZjgsMHgwMCwweDMyLDB4MDEsMHgwZSwweDgwLDB4MDMsMHhjYSwweDA0IH0gfSwKK3sgIDE2LCAweDk5YTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAxLDB4MzgsMHgwMCwweDBlLDB4MDAsMHhhOSwweDkwIH0gfSwKK3sgIDE2LCAweDk5YjAsIDAsIHsweDJmLDB4ZTYsMHgyMCwweDg4LDB4MDAsMHg5ZSwweDgwLDB4MjMsMHg4MCwweDBhLDB4ZTgsMHgwMywweDI4LDB4MDAsMHhiYSwweDAwIH0gfSwKK3sgIDE2LCAweDk5YzAsIDAsIHsweDE4LDB4ODAsMHgwZCwweGVjLDB4MDIsMHgzOCwweDgwLDB4YmEsMHgwMCwweGEyLDB4ODAsMHgwOCwweGEwLDB4MDMsMHg4YSwweDAwIH0gfSwKK3sgIDE2LCAweDk5ZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NmMsMHgwMiwweDgzLDB4ODAsMHgyMCwweGM4IH0gfSwKK3sgIDE2LCAweDk5ZTAsIDAsIHsweDBiLDB4MjAsMHgwMiwweDBjLDB4MDEsMHg5MiwweDEwLDB4NjgsMHhjMCwweDNhLDB4M2MsMHgwMiwweGNjLDB4MTAsMHgzYiwweDAyIH0gfSwKK3sgIDE2LCAweDk5ZjAsIDAsIHsweDBjLDB4YzAsMHgyOCwweDNjLDB4MDIsMHg0ZSwweDAwLDB4YjMsMHgwMCwweDI4LDB4YzAsMHgyOCwweDMwLDB4MDIsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweDlhMDAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDAxLDB4MTQsMHgwMCwweDg3LDB4NDIsMHgyYiwweGMwIH0gfSwKK3sgIDE2LCAweDlhMTAsIDAsIHsweDI5LDB4NzAsMHgyMiwweDljLDB4MDAsMHhiNiwweDAwLDB4MmIsMHhjMiwweDBhLDB4NjAsMHg4NiwweDFjLDB4MDAsMHhiNywweDIxIH0gfSwKK3sgIDE2LCAweDlhMjAsIDAsIHsweDI5LDB4YzAsMHgwMCwweDc0LDB4MDIsMHg1YywweDAwLDB4MzcsMHg5MSwweDAxLDB4ZTAsMHgwOCwweDc0LDB4MDIsMHhhOCwweDAwIH0gfSwKK3sgIDE2LCAweDlhMzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgwMCwweGM3LDB4ODAsMHgyMSwweGUwIH0gfSwKK3sgIDE2LCAweDlhNDAsIDAsIHsweDJmLDB4NzgsMHgwMiwweDllLDB4MDAsMHg5NiwweDgwLDB4MzksMHhlMCwweDJlLDB4ZjgsMHgwMywweGRlLDB4MzAsMHhmNywweGQwIH0gfSwKK3sgIDE2LCAweDlhNTAsIDAsIHsweDJkLDB4ZjIsMHgwMCwweDc4LDB4MDMsMHg1MiwweDAwLDB4ZjcsMHhhMiwweDNiLDB4ZTAsMHgwZSwweDc4LDB4MDcsMHhlYSwweDAyIH0gfSwKK3sgIDE2LCAweDlhNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDFkLDB4YjQsMHgwMCwweGZiLDB4MDAsMHgwYywweGMwIH0gfSwKK3sgIDE2LCAweDlhNzAsIDAsIHsweDBmLDB4MzAsMHgwMywweGVjLDB4MTAsMHhkMywweDAwLDB4YjQsMHhjMCwweDJmLDB4ODAsMHgwMywweDZjLDB4NDgsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweDlhODAsIDAsIHsweDNlLDB4YzgsMHg0ZCwweDkwLDB4MDMsMHhhNCwweDAwLDB4ZmIsMHgyMCwweDFlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhjMiwweDA2IH0gfSwKK3sgIDE2LCAweDlhOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHgwMCwweGNjLDB4ODAsMHgyYiwweDJjIH0gfSwKK3sgIDE2LCAweDlhYTAsIDAsIHsweDJmLDB4ZjgsMHgwMywweDdlLDB4MDAsMHg2ZSwweDgwLDB4M2IsMHhhMSwweDBkLDB4ZDgsMHg0MywweDNlLDB4MDAsMHhmZiwweDkwIH0gfSwKK3sgIDE2LCAweDlhYjAsIDAsIHsweDMzLDB4ZTAsMHgwZiwweGU5LDB4MzMsMHhmZSwweDAwLDB4Y2YsMHhjMCwweDNmLDB4ZTIsMHgwZiwweGQ4LDB4MDMsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweDlhYzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4YjQsMHg0MCwweDg3LDB4MDAsMHgyMSwweDA0IH0gfSwKK3sgIDE2LCAweDlhZDAsIDAsIHsweDA4LDB4NzgsMHgwMiwweDFjLDB4MDAsMHg4NiwweDAwLDB4MjEsMHhjMCwweDI4LDB4OTAsMHgwMiwweGRjLDB4MDAsMHhiNywweDEwIH0gfSwKK3sgIDE2LCAweDlhZTAsIDAsIHsweDIxLDB4YzAsMHgwZiwweDczLDB4MDIsMHhjYywweDAwLDB4ODcsMHgwMCwweDJkLDB4YzAsMHgwYiwweDUwLDB4MDIsMHhlYSwweDAwIH0gfSwKK3sgIDE2LCAweDlhZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWQsMHgwMCwweGE0LDB4MDAsMHgyOSwweDQ4IH0gfSwKK3sgIDE2LCAweDliMDAsIDAsIHsweDZhLDB4ZjAsMHg4MiwweDRjLDB4MDAsMHhhZSwweDAwLDB4YTEsMHhjNCwweDI5LDB4NzQsMHgwMiwweDVjLDB4NDAsMHhhMywweDEwIH0gfSwKK3sgIDE2LCAweDliMTAsIDAsIHsweDYxLDB4YzIsMHgwYiwweDYwLDB4MDYsMHhjOCwweDAwLDB4ODcsMHgwMCwweDJkLDB4YzAsMHgwYiwweDUwLDB4MDIsMHhjMCwweDA0IH0gfSwKK3sgIDE2LCAweDliMjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDE0LDB4ZTYsMHgwMSwweGEzLDB4MDIsMHgyMCwweDQwIH0gfSwKK3sgIDE2LCAweDliMzAsIDAsIHsweDI4LDB4M2MsMHgwMiwweDBjLDB4MDAsMHg4MywweDQyLDB4MjAsMHhjOCwweDA4LDB4MTAsMHgwMiwweGNkLDB4MDAsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweDliNDAsIDAsIHsweDI4LDB4ZjAsMHgwYiwweDMwLDB4MDIsMHhjYywweDAxLDB4ODMsMHgwNCwweDJjLDB4YzAsMHg4MywweDEwLDB4MDIsMHhjOCwweDA0IH0gfSwKK3sgIDE2LCAweDliNTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YWEsMHg4MCwweGViLDB4MDAsMHgzOCwweGMwIH0gfSwKK3sgIDE2LCAweDliNjAsIDAsIHsweDBhLDB4OTAsMHgwMywweDdjLDB4MjIsMHhhMiwweDQwLDB4MzIsMHg0OCwweDBkLDB4YjAsMHgwYiwweDNlLDB4MDAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweDliNzAsIDAsIHsweDMzLDB4ZjQsMHgwZiwweDkwLDB4MDMsMHhlYywweDAwLDB4OGYsMHgwMiwweDNmLDB4YzAsMHgwZiwweDkwLDB4MDMsMHhlYSwweDA0IH0gfSwKK3sgIDE2LCAweDliODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4ZTAsMHgwMCwweGQ5LDB4MDIsMHgzZSwweGMwIH0gfSwKK3sgIDE2LCAweDliOTAsIDAsIHsweDBlLDB4YjYsMHgwMywweGVjLDB4MDAsMHhmYSwweDIwLDB4M2UsMHhjMCwweDRmLDB4MjQsMHgyMywweGFjLDB4NjAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweDliYTAsIDAsIHsweGE2LDB4YzAsMHgwZSwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZmIsMHgwMCwweDNjLDB4YzEsMHgwZiwweDkwLDB4MDMsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweDliYjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZjgsMHgwMiwweGNmLDB4MDAsMHgzMywweGUwIH0gfSwKK3sgIDE2LCAweDliYzAsIDAsIHsweDJjLDB4ZjAsMHgxMywweGJjLDB4MDAsMHgyZSwweDEwLDB4YjEsMHg2NCwweDJlLDB4ZjAsMHgwMiwweDNjLDB4MDAsMHhmZiwweDAyIH0gfSwKK3sgIDE2LCAweDliZDAsIDAsIHsweDNmLDB4YzEsMHg0ZCwweGVjLDB4NjMsMHhmZSwweDAwLDB4YjcsMHgwMCwweDNiLDB4YzAsMHgwYywweGQ4LDB4MDMsMHhjMCwweDQ0IH0gfSwKK3sgIDE2LCAweDliZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NmMsMHgyOCwweDgxLDB4ODEsMHgyMiwweGUwIH0gfSwKK3sgIDE2LCAweDliZjAsIDAsIHsweDBhLDB4MzgsMHgwMiwweDNjLDB4MDQsMHhiYSwweGM5LDB4MzIsMHhlMCwweDIwLDB4ODQsMHgwMiwweDJjLDB4MDAsMHhiYiwweDAwIH0gfSwKK3sgIDE2LCAweDljMDAsIDAsIHsweDJlLDB4YzAsMHgwYiwweDljLDB4MDIsMHhlNywweDgxLDB4YmIsMHgwNCwweDIyLDB4YzAsMHgwYSwweDk5LDB4MDIsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweDljMTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MjgsMHg0MCwweDg4LDB4ODAsMHgyMiwweDg4IH0gfSwKK3sgIDE2LCAweDljMjAsIDAsIHsweDI4LDB4YmMsMHg0MiwweGFjLDB4MDAsMHhiYSwweDAwLDB4MmEsMHg4MCwweDA4LDB4ODQsMHgwMiwweGFjLDB4MDAsMHhiYiwweDAwIH0gfSwKK3sgIDE2LCAweDljMzAsIDAsIHsweDJlLDB4YzAsMHgwYiwweGIwLDB4ODIsMHhlOCwweDkwLDB4YWIsMHgwMCwweDYyLDB4YzAsMHgwOCwweGIwLDB4MTIsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweDljNDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDAsMHgwMCwweDg5LDB4MDAsMHgyYSwweDgwIH0gfSwKK3sgIDE2LCAweDljNTAsIDAsIHsweDI4LDB4YjIsMHgwMiwweDBjLDB4MDAsMHhiYSwweDAwLDB4MjAsMHhjMCwweDA4LDB4MDAsMHgwMiwweDhjLDB4MDAsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweDljNjAsIDAsIHsweDJjLDB4YzAsMHgwYiwweDMwLDB4MjAsMHg0YywweDE0LDB4YjMsMHgwMCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhjMiwweDAxIH0gfSwKK3sgIDE2LCAweDljNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NjgsMHgwMCwweGM4LDB4MDAsMHhiMiwweGMwIH0gfSwKK3sgIDE2LCAweDljODAsIDAsIHsweDJjLDB4YjIsMHgwMywweGFjLDB4MDAsMHhmYSwweDAwLDB4M2EsMHhjMCwweDRlLDB4YTUsMHgwMywweGJjLDB4MDAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweDljOTAsIDAsIHsweDNmLDB4YzAsMHgwOSwweGEwLDB4MDMsMHhlOSwweDA0LDB4ZWYsMHgwMCwweGJhLDB4YzAsMHgwYywweGIwLDB4MDEsMHhjMCwweDAxIH0gfSwKK3sgIDE2LCAweDljYTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE5LDB4ZmMsMHgwMCwweGY1LDB4MDAsMHgzNSwweGMwIH0gfSwKK3sgIDE2LCAweDljYjAsIDAsIHsweGFmLDB4MzQsMHgwMywweGZjLDB4MDAsMHhmNCwweDAwLDB4MzksMHhjMCwweDBmLDB4YzIsMHgwMywweDdjLDB4MDAsMHhmZiwweDAxIH0gfSwKK3sgIDE2LCAweDljYzAsIDAsIHsweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmYywweGEwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhlOCwweDA1IH0gfSwKK3sgIDE2LCAweDljZDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHgwMCwweGZmLDB4MjksMHgzZCwweDIwIH0gfSwKK3sgIDE2LCAweDljZTAsIDAsIHsweDhlLDB4YzEsMHgwMywweDMyLDB4NDgsMHhkYywweDgwLDB4MjMsMHgyNSwweDBlLDB4ZjIsMHgwMywweDNjLDB4YzAsMHhkZiwweDg0IH0gfSwKK3sgIDE2LCAweDljZjAsIDAsIHsweDMzLDB4YzksMHgwZiwweGYyLDB4MDMsMHhmYywweDAwLDB4Y2YsMHg4MCwweDMzLDB4NDAsMHgwYywweGYyLDB4MDMsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweDlkMDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4ZWMsMHhjMCwweGJiLDB4NjAsMHgyZSwweDA4IH0gfSwKK3sgIDE2LCAweDlkMTAsIDAsIHsweDA4LDB4ODEsMHgwMiwweDIwLDB4MDQsMHg4OCwweDIwLDB4MjAsMHg0OCwweDA4LDB4ZjEsMHg4MiwweDJkLDB4YzAsMHg4MywweDAwIH0gfSwKK3sgIDE2LCAweDlkMjAsIDAsIHsweDIyLDB4ZDQsMHgwOSwweGY1LDB4MDIsMHhmYywweDA4LDB4OGIsMHgwMSwweDIyLDB4NDAsMHgyOCwweGI0LDB4MDIsMHgyMCwweDA0IH0gfSwKK3sgIDE2LCAweDlkMzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgyMCwweGIzLDB4MDksMHgyYywweDgyIH0gfSwKK3sgIDE2LCAweDlkNDAsIDAsIHsweDA4LDB4MTAsMHgxNiwweGEwLDB4MTAsMHg5MCwweDA4LDB4MjgsMHg0OCwweDBhLDB4MzIsMHgwMiwweDBjLDB4MDAsMHhiYiwweDAwIH0gfSwKK3sgIDE2LCAweDlkNTAsIDAsIHsweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhjYywweDAyLDB4OTMsMHgwMSwweDIwLDB4MDAsMHg4YSwweDMxLDB4MjIsMHhlMiwweDAxIH0gfSwKK3sgIDE2LCAweDlkNjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDE1LDB4YWMsMHgwNCwweGJiLDB4MDAsMHgyYywweDgwIH0gfSwKK3sgIDE2LCAweDlkNzAsIDAsIHsweDA4LDB4ODYsMHgwMiwweGEwLDB4MjAsMHhhMCwweDAwLDB4MmEsMHg2MCwweDBhLDB4YjAsMHgxMCwweDJjLDB4MDAsMHhhYiwweDBjIH0gfSwKK3sgIDE2LCAweDlkODAsIDAsIHsweDZlLDB4YzAsMHgwOSwweGIwLDB4MDIsMHhjYywweDAwLDB4OWIsMHgwMCwweDIyLDB4NjAsMHgwYSwweGIwLDB4MDIsMHhmMCwweDA0IH0gfSwKK3sgIDE2LCAweDlkOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE1LDB4ZWMsMHgwMCwweGJiLDB4MDAsMHgzZSwweDM0IH0gfSwKK3sgIDE2LCAweDlkYTAsIDAsIHsweDA4LDB4YTAsMHgwYiwweDgzLDB4MDAsMHhkOSwweDAyLDB4M2EsMHhlMCwweDJlLDB4YjAsMHgwYiwweDJjLDB4MDAsMHhmOCwweDgwIH0gfSwKK3sgIDE2LCAweDlkYjAsIDAsIHsweDNlLDB4YzAsMHg0ZiwweGIwLDB4MDMsMHhlYywweDAwLDB4Y2EsMHg0MCwweGIyLDB4NzIsMHgwZSwweGIwLDB4MGIsMHhjMCwweDA0IH0gfSwKK3sgIDE2LCAweDlkYzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4YmMsMHgxMCwweGZiLDB4MDAsMHgzZiwweDAwIH0gfSwKK3sgIDE2LCAweDlkZDAsIDAsIHsweDBkLDB4ZjgsMHgxMywweDcwLDB4NDgsMHhkZCwweDQwLDB4MzcsMHhjMiwweDhkLDB4ZjAsMHgwMywweGRjLDB4MDAsMHhkZCwweGM4IH0gfSwKK3sgIDE2LCAweDlkZTAsIDAsIHsweDEzLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmYywweDAwLDB4ZWUsMHg0MCwweDdmLDB4NDAsMHgwZCwweDcwLDB4MDMsMHgzOCwweDAwIH0gfSwKK3sgIDE2LCAweDlkZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGZiLDB4MDEsMHgzMiwweGMwIH0gfSwKK3sgIDE2LCAweDllMDAsIDAsIHsweDA0LDB4MTAsMHgwMywweDIwLDB4NDAsMHhlOCwweDEwLDB4M2EsMHhjMCwweDBkLDB4YjAsMHgwMywweGFjLDB4MDgsMHhmOCwweDQwIH0gfSwKK3sgIDE2LCAweDllMTAsIDAsIHsweGIyLDB4YzAsMHgyYywweGIwLDB4MzMsMHhhNCwweDgyLDB4ZGEsMHg0MCwweGJhLDB4NDAsMHgwZiwweGIwLDB4MDMsMHhkMCwweDA0IH0gfSwKK3sgIDE2LCAweDllMjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4M2MsMHgwOCwweGJmLDB4ODAsMHgyMiwweGM4IH0gfSwKK3sgIDE2LCAweDllMzAsIDAsIHsweDA4LDB4YjcsMHgwMCwweDIzLDB4NDQsMHg4OCwweGQwLDB4MjIsMHhkMCwweDA4LDB4NzAsMHg4MiwweGZjLDB4MDAsMHhiMiwweGUwIH0gfSwKK3sgIDE2LCAweDllNDAsIDAsIHsweDAzLDB4ZjQsMHgwOCwweGY1LDB4MDIsMHgzNywweDA0LDB4OGIsMHhkMSwweDIyLDB4NjAsMHg0YiwweGZkLDB4MDIsMHhmMiwweDAwIH0gfSwKK3sgIDE2LCAweDllNTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMCwweGIzLDB4MTAsMHhhNCwweDQwIH0gfSwKK3sgIDE2LCAweDllNjAsIDAsIHsweDA4LDB4MDAsMHgwMiwweDQ4LDB4MDAsMHhhMCwweDQyLDB4MmEsMHhkMCwweDAxLDB4MzAsMHgwMiwweDhjLDB4MDAsMHhiMywweDgwIH0gfSwKK3sgIDE2LCAweDllNzAsIDAsIHsweDJjLDB4YzAsMHgwOSwweDMxLDB4MDIsMHhjYywweDAwLDB4ODksMHgwMCwweDIyLDB4ZTgsMHgwMywweDM4LDB4MDIsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweDllODAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MCwweDAxLDB4MWUsMHgwMCwweGI3LDB4ODAsMHgyNywweDY0IH0gfSwKK3sgIDE2LCAweDllOTAsIDAsIHsweDY4LDB4NGEsMHgwMiwweDUyLDB4MDAsMHg4YywweDgwLDB4MjEsMHhlMCwweDA4LDB4NzgsMHgwMiwweGRlLDB4MDAsMHhiNywweDgwIH0gfSwKK3sgIDE2LCAweDllYTAsIDAsIHsweDJkLDB4ZTIsMHgxOSwweDM5LDB4MDIsMHg1ZSwweDMwLDB4ODUsMHg5OCwweDIxLDB4ZTQsMHgwYiwweDc5LDB4MDIsMHhkOCwweDAwIH0gfSwKK3sgIDE2LCAweDllYjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweGYzLDB4MjAsMHgzNCwweDAwIH0gfSwKK3sgIDE2LCAweDllYzAsIDAsIHsweDBjLDB4YjgsMHgwMywweDQ4LDB4ODAsMHhlMiwweDIyLDB4MzgsMHhjMCwweDBkLDB4MzAsMHgwMywweDhjLDB4MDAsMHhmMywweDAwIH0gfSwKK3sgIDE2LCAweDllZDAsIDAsIHsweDNlLDB4YzAsMHgwZCwweDMxLDB4MDMsMHhlYywweDAwLDB4Y2IsMHgwMCwweDM4LDB4MDYsMHgwZiwweDMwLDB4ODMsMHhkMiwweDAyIH0gfSwKK3sgIDE2LCAweDllZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDFkLDB4YmMsMHgwMCwweGZmLDB4MDAsMHgzYiwweDAxIH0gfSwKK3sgIDE2LCAweDllZjAsIDAsIHsweDBmLDB4ZDAsMHgwMywweDkwLDB4MDAsMHhmNiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjQsMHgwMSwweGZjLDB4MDAsMHhmZiwweDAxIH0gfSwKK3sgIDE2LCAweDlmMDAsIDAsIHsweDMzLDB4YzIsMHgwZSwweGY1LDB4MTMsMHhiYywweDAwLDB4ZWQsMHgwMCwweDNmLDB4YzQsMHgwZiwweGYwLDB4MDMsMHhkMCwweDA2IH0gfSwKK3sgIDE2LCAweDlmMTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHgwMCwweGZiLDB4MDAsMHgzYywweGMwIH0gfSwKK3sgIDE2LCAweDlmMjAsIDAsIHsweDBlLDB4YTAsMHgwMSwweDY0LDB4MDEsMHhkOCwweDAwLDB4MzIsMHhlMCwweDJjLDB4YjUsMHgwMywweDJjLDB4MDAsMHhmMiwweDAwIH0gfSwKK3sgIDE2LCAweDlmMzAsIDAsIHsweDdhLDB4YzAsMHgwZCwweGI0LDB4MDMsMHgyZCwweDgwLDB4YzksMHgwMiwweDMyLDB4YzAsMHgwYywweGIwLDB4MDMsMHgyYSwweDAwIH0gfSwKK3sgIDE2LCAweDlmNDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDExLDB4OWMsMHg4MCwweGI3LDB4MDAsMHgyZCwweGMwIH0gfSwKK3sgIDE2LCAweDlmNTAsIDAsIHsweDBkLDB4NjAsMHgwMiwweGQwLDB4MDEsMHg4NCwweDAwLDB4MjEsMHhjMCwweDA4LDB4MzAsMHgwMiwweDFkLDB4MDAsMHhiNywweDAwIH0gfSwKK3sgIDE2LCAweDlmNjAsIDAsIHsweDIxLDB4YzgsMHgwYiwweGY0LDB4MDMsMHgxZSwweGMwLDB4ODYsMHgwMCwweDIxLDB4YzAsMHgwOCwweDdjLDB4MDMsMHg1MiwweDA0IH0gfSwKK3sgIDE2LCAweDlmNzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHhjMCwweGI3LDB4OTAsMHgyZCwweGUwIH0gfSwKK3sgIDE2LCAweDlmODAsIDAsIHsweDA4LDB4NzgsMHgwNiwweGQ2LDB4MDEsMHhiNCwweDgyLDB4MjEsMHhlMCwweDA4LDB4NzgsMHgwYSwweDFlLDB4MDAsMHhiNSwweGMwIH0gfSwKK3sgIDE2LCAweDlmOTAsIDAsIHsweDI5LDB4ZTgsMHgwOSwweDc4LDB4MDIsMHgzNiwweGMxLDB4OTcsMHg4MCwweDI4LDB4YjAsMHgwYSwweDdhLDB4MDIsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweDlmYTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE0LDB4Y2MsMHgwMCwweGJiLDB4MDAsMHgyYywweGUwIH0gfSwKK3sgIDE2LCAweDlmYjAsIDAsIHsweDA5LDB4MzUsMHg4MiwweGMwLDB4YzEsMHhhMCwweDUxLDB4MjAsMHhlNCwweDA4LDB4MzAsMHgwMiwweDhjLDB4MDAsMHhiYiwweGM0IH0gfSwKK3sgIDE2LCAweDlmYzAsIDAsIHsweDIwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwNiwweDAwLDB4OTMsMHgxOCwweGFhLDB4YjAsMHgyYSwweDMwLDB4MGEsMHg1MiwweDA0IH0gfSwKK3sgIDE2LCAweDlmZDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweGZhLDB4MDEsMHgzZCwweGFjIH0gfSwKK3sgIDE2LCAweDlmZTAsIDAsIHsweDRjLDB4ZWMsMHgxMywweDc4LDB4MTAsMHhmNiwweDgwLDB4YjMsMHg5MCwweDBjLDB4YTAsMHgwMywweDI4LDB4MDAsMHhmZSwweDAwIH0gfSwKK3sgIDE2LCAweDlmZjAsIDAsIHsweDNhLDB4ODEsMHgwZCwweGEwLDB4MGYsMHgyYSwweDgwLDB4ZGUsMHgwNCwweDNiLDB4YTAsMHgwZSwweGEwLDB4MDMsMHgzYSwweDA0IH0gfSwKK3sgIDE2LCAweGEwMDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGEwMTAsIDAsIHsweDBkLDB4ODAsMHgwMiwweGUxLDB4MDAsMHhkOCwweDQ4LDB4M2UsMHgxMiwweDBmLDB4ODAsMHgxMywweDYwLDB4MDAsMHhmOCwweDYwIH0gfSwKK3sgIDE2LCAweGEwMjAsIDAsIHsweDNlLDB4MDAsMHgwNywweDgwLDB4MDMsMHhhMCwweDAyLDB4ZTgsMHgwNCwweDI2LDB4MDgsMHgwNSwweDgwLDB4MDMsMHg5MiwweDAwIH0gfSwKK3sgIDE2LCAweGEwMzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGY5LDB4MDQsMHgzYSwweDQwIH0gfSwKK3sgIDE2LCAweGEwNDAsIDAsIHsweDBjLDB4MTIsMHgwMywweDI0LDB4ODIsMHhjOSwweDAwLDB4MzYsMHg0NCwweDBmLDB4MTAsMHgwMywweDI0LDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGEwNTAsIDAsIHsweDM2LDB4NDAsMHgwNCwweDkwLDB4MDMsMHgwNCwweDAwLDB4YzksMHgwMCwweDEyLDB4NDAsMHgwYywweDkwLDB4MDMsMHgwMiwweDA0IH0gfSwKK3sgIDE2LCAweGEwNjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NjQsMHgwMCwweGI5LDB4ODEsMHgyMiwweDQwIH0gfSwKK3sgIDE2LCAweGEwNzAsIDAsIHsweDA4LDB4OTAsMHgxYSwweDI0LDB4MDAsMHg4OSwweDAwLDB4MjIsMHg2OCwweDBiLDB4OTksMHgwMiwweDI0LDB4MDAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweGEwODAsIDAsIHsweDIyLDB4NDAsMHg2OCwweDkwLDB4MGEsMHgyNCwweDAwLDB4ODksMHgwMCwweGEyLDB4NDAsMHgwOCwweDkwLDB4MGEsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGEwOTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweGI5LDB4MTAsMHgyMiwweGUwIH0gfSwKK3sgIDE2LCAweGEwYTAsIDAsIHsweDA4LDB4OTQsMHgwMCwweDA0LDB4MDQsMHg4YiwweDA4LDB4MjYsMHhjMCwweDBiLDB4OTAsMHgwMiwweDI0LDB4MDQsMHhiOSwweDBjIH0gfSwKK3sgIDE2LCAweGEwYjAsIDAsIHsweDI0LDB4NDAsMHgwYSwweDEwLDB4MDIsMHgyNCwweDAwLDB4MjMsMHgwMiwweDJhLDB4NDAsMHhhOCwweDEwLDB4MDIsMHgwNiwweDAwIH0gfSwKK3sgIDE2LCAweGEwYzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDQsMHg5MCwweGIxLDB4MjAsMHgyMiwweDQwIH0gfSwKK3sgIDE2LCAweGEwZDAsIDAsIHsweDA4LDB4MTIsMHgwMiwweDBjLDB4MTAsMHg4MSwweDAyLDB4YTAsMHg1MCwweDBiLDB4MTIsMHgwMiwweDA0LDB4ODAsMHhiMSwweDA1IH0gfSwKK3sgIDE2LCAweGEwZTAsIDAsIHsweDAwLDB4NDgsMHgwYSwweDEwLDB4MDIsMHgwNCwweGEwLDB4YTEsMHgwMCwweDI4LDB4NGEsMHgwOCwweDEyLDB4MDAsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweGEwZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGY4LDB4NTAsMHhiYSwweDE0IH0gfSwKK3sgIDE2LCAweGExMDAsIDAsIHsweDBjLDB4ODUsMHgwMywweDAxLDB4NDIsMHhjOCwweDUwLDB4MzQsMHgwMCwweDBmLDB4ODUsMHgwMywweDIxLDB4NDAsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGExMTAsIDAsIHsweDM2LDB4MDAsMHgwZSwweDgwLDB4MTMsMHgyMCwweDgwLDB4ZTAsMHgwMCwweDFhLDB4MDgsMHgwYywweDAwLDB4MDMsMHgyZSwweDAzIH0gfSwKK3sgIDE2LCAweGExMjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDFkLDB4ZTQsMHg0NCwweGY5LDB4MTAsMHgzZiwweDQwIH0gfSwKK3sgIDE2LCAweGExMzAsIDAsIHsweDJmLDB4ZDEsMHgxMywweGY0LDB4MDQsMHhmNSwweDAwLDB4M2YsMHg0MCwweDBmLDB4OTEsMHgwYiwweGU0LDB4NDAsMHhmZiwweDI4IH0gfSwKK3sgIDE2LCAweGExNDAsIDAsIHsweGJlLDB4NGUsMHgwZCwweDk2LDB4ODMsMHhkNCwweGEyLDB4ZGQsMHgyOCwweDM3LDB4NGEsMHgwZiwweDkzLDB4ODMsMHhlNiwweDA2IH0gfSwKK3sgIDE2LCAweGExNTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDA1LDB4ZTQsMHgxMCwweGNkLDB4MDAsMHgzZiwweDQwIH0gfSwKK3sgIDE2LCAweGExNjAsIDAsIHsweDBmLDB4ZDAsMHgwMywweDM1LDB4MDIsMHg1ZCwweDAxLDB4MzEsMHg0NCwweDBmLDB4ZDAsMHgwMywweDI0LDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGExNzAsIDAsIHsweDMyLDB4NjAsMHgwYywweDk4LDB4ODMsMHhlNiwweDQwLDB4ZDksMHgwMCwweDM2LDB4NmEsMHgwYywweDllLDB4ODMsMHgyNiwweDAxIH0gfSwKK3sgIDE2LCAweGExODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDEwLDB4ZTAsMHgwMCwweDg4LDB4MDAsMHgyZSwweDAwIH0gfSwKK3sgIDE2LCAweGExOTAsIDAsIHsweDBiLDB4ODAsMHg0MiwweDAyLDB4ODAsMHg4YSwweDAwLDB4MjIsMHgyMCwweDg4LDB4ODAsMHgwMywweDIwLDB4MDgsMHhiOCwweDgyIH0gfSwKK3sgIDE2LCAweGExYTAsIDAsIHsweDIyLDB4MjEsMHgwOCwweDg4LDB4ODIsMHhlMiwweDQyLDB4ODgsMHhhOCwweDIyLDB4MjAsMHgwOCwweGNlLDB4MDIsMHgwZSwweDA0IH0gfSwKK3sgIDE2LCAweGExYjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHgwMiwweDgxLDB4MDAsMHg2OCwweDQwIH0gfSwKK3sgIDE2LCAweGExYzAsIDAsIHsweDBiLDB4MTAsMHgwMiwweDg0LDB4MDEsMHhiOSwweDAwLDB4MjAsMHg0MCwweDQ5LDB4MTAsMHgwYSwweDA0LDB4MDAsMHhiNSwweDA4IH0gfSwKK3sgIDE2LCAweGExZDAsIDAsIHsweDIxLDB4NDYsMHgwOCwweDUwLDB4MDIsMHhkNCwweDAwLDB4OGQsMHgyMCwweDI1LDB4NGEsMHgwYiwweDUwLDB4MDIsMHg0MiwweDAxIH0gfSwKK3sgIDE2LCAweGExZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDExLDB4YTQsMHgwMCwweDg5LDB4MDQsMHg2ZSwweDU0IH0gfSwKK3sgIDE2LCAweGExZjAsIDAsIHsweDBiLDB4MTAsMHgxMiwweGE0LDB4MDEsMHhhOSwweDAwLDB4YTIsMHg0MCwweDE4LDB4OTAsMHgxNiwweDI0LDB4MDAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweGEyMDAsIDAsIHsweDIzLDB4NDAsMHgxOCwweGQwLDB4MDIsMHhmNCwweDAwLDB4OGQsMHg0MCwweDIxLDB4NGEsMHgwYiwweGQwLDB4MDIsMHg0NiwweDA0IH0gfSwKK3sgIDE2LCAweGEyMTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGM5LDB4MDAsMHgzYSwweDUwIH0gfSwKK3sgIDE2LCAweGEyMjAsIDAsIHsweDhmLDB4OTYsMHgwYiwweDg0LDB4MDIsMHhmMSwweDAxLDB4MzAsMHg0OCwweDhkLDB4OTAsMHgwMywweDI0LDB4MTAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGEyMzAsIDAsIHsweGIyLDB4NDAsMHgyYywweDkwLDB4MDMsMHhlNiwweDQwLDB4ZDEsMHhjMCwweDM2LDB4NTAsMHgyZiwweDkwLDB4MGIsMHg2OCwweDA0IH0gfSwKK3sgIDE2LCAweGEyNDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAxLDB4YTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDYwIH0gfSwKK3sgIDE2LCAweGEyNTAsIDAsIHsweDBmLDB4OTksMHhjMywweDY0LDB4MDAsMHhkOSwweDI4LDB4M2UsMHg0MCwweDBkLDB4OTAsMHgwMywweGE0LDB4MDAsMHhmOSwweDQwIH0gfSwKK3sgIDE2LCAweGEyNjAsIDAsIHsweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNCwweDIwLDB4ZjksMHg0MCwweDNlLDB4NDAsMHgwYywweDkwLDB4MDMsMHg4YSwweDAwIH0gfSwKK3sgIDE2LCAweGEyNzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGY4LDB4MDEsMHgzNiwweDAwIH0gfSwKK3sgIDE2LCAweGEyODAsIDAsIHsweDhmLDB4ODAsMHgwMywweGUwLDB4MDIsMHhmOCwweDA0LDB4MzIsMHgwMCwweDBkLDB4ODAsMHg0MywweDIwLDB4MDIsMHhjYywweDAwIH0gfSwKK3sgIDE2LCAweGEyOTAsIDAsIHsweDNmLDB4MDAsMHgwZiwweGMwLDB4MTMsMHg5MCwweDAyLDB4ZGMsMHg0MCwweDNmLDB4MTAsMHg0YywweGMwLDB4MjMsMHgwYSwweDA0IH0gfSwKK3sgIDE2LCAweGEyYTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4MjgsMHgwMCwweGJhLDB4MDAsMHgyMiwweDgwIH0gfSwKK3sgIDE2LCAweGEyYjAsIDAsIHsweDBiLDB4ZTgsMHgyMCwweGY4LDB4MDAsMHg0ZSwweGMwLDB4MjMsMHhhMCwweDA4LDB4YTAsMHgwMywweDY4LDB4MDAsMHg4YSwweDAwIH0gfSwKK3sgIDE2LCAweGEyYzAsIDAsIHsweDJlLDB4ODAsMHgxZiwweGEwLDB4MDIsMHgyYSwweDA2LDB4OGEsMHgwMCwweDJlLDB4YTAsMHgwMiwweDYwLDB4MDMsMHgwYSwweDAwIH0gfSwKK3sgIDE2LCAweGEyZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NmMsMHgwMCwweGIzLDB4MDAsMHgyMCwweGMwIH0gfSwKK3sgIDE2LCAweGEyZTAsIDAsIHsweDBiLDB4M2QsMHgwMiwweGMwLDB4MDMsMHgyMywweDAwLDB4MjAsMHhlMCwweDAxLDB4YjAsMHgwNiwweDRjLDB4MDAsMHg4YiwweDAwIH0gfSwKK3sgIDE2LCAweGEyZjAsIDAsIHsweDJlLDB4YzAsMHg0YiwweDMwLDB4MDIsMHg4ZSwweDA4LDB4ODMsMHg4MCwweDJjLDB4YzQsMHgwMCwweDM0LDB4OGUsMHg0YSwweDAwIH0gfSwKK3sgIDE2LCAweGEzMDAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDAxLDB4MWMsMHg4MCwweGI1LDB4ODAsMHg2MSwweGMwIH0gfSwKK3sgIDE2LCAweGEzMTAsIDAsIHsweDBiLDB4NDAsMHgwMiwweGQ0LDB4MDAsMHg4NCwweDA4LDB4MjMsMHhjMiwweDA4LDB4NTAsMHgwMiwweDVlLDB4YzAsMHg4NCwweDAxIH0gfSwKK3sgIDE2LCAweGEzMjAsIDAsIHsweDJkLDB4MDAsMHg4YSwweDA4LDB4MDIsMHgxMCwweDI0LDB4ODQsMHgwOCwweDZkLDB4MDAsMHgwYSwweDAzLDB4MTIsMHgyOCwweDAwIH0gfSwKK3sgIDE2LCAweGEzMzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgwMCwweGY1LDB4ODIsMHgyMSwweDYwIH0gfSwKK3sgIDE2LCAweGEzNDAsIDAsIHsweDBmLDB4NzgsMHgwMywweGQ2LDB4MDQsMHhhZSwweDgwLDB4MzEsMHhlMCwweDBkLDB4NTgsMHgyMywweDdlLDB4MDAsMHhjNiwweDgwIH0gfSwKK3sgIDE2LCAweGEzNTAsIDAsIHsweDJkLDB4ZTAsMHgwYiwweDc4LDB4MDMsMHg4ZSwweDAwLDB4ZDcsMHg4MiwweDNkLDB4ZjAsMHgwYywweDdhLDB4MDMsMHg2YSwweDAyIH0gfSwKK3sgIDE2LCAweGEzNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDFkLDB4YWMsMHgwMCwweGYxLDB4MDAsMHhiYSwweGQ4IH0gfSwKK3sgIDE2LCAweGEzNzAsIDAsIHsweDBmLDB4ODAsMHgwMywweGU0LDB4MTIsMHhmOCwweDAwLDB4YmUsMHg4MCwweDBlLDB4MTAsMHgwMywweGVjLDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGEzODAsIDAsIHsweDNlLDB4MDAsMHg1ZiwweDgwLDB4MDMsMHhlMCwweDA4LDB4ZjgsMHgwNCwweDNjLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhjMiwweDA2IH0gfSwKK3sgIDE2LCAweGEzOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4ZmUsMHgyMCwweGZmLDB4ODAsMHgzZiwweGYwIH0gfSwKK3sgIDE2LCAweGEzYTAsIDAsIHsweDBmLDB4ZjgsMHgwMywweGQyLDB4MDAsMHhlZiwweDg0LDB4YjMsMHg2MSwweDBjLDB4YjksMHgwMywweGZlLDB4MDAsMHhmZiwweDgwIH0gfSwKK3sgIDE2LCAweGEzYjAsIDAsIHsweDMzLDB4ZTAsMHgwYywweGY4LDB4MTMsMHgyMiwweDExLDB4Y2QsMHg5MCwweDNmLDB4NjAsMHgwYywweGU4LDB4MDMsMHgxMCwweDAwIH0gfSwKK3sgIDE2LCAweGEzYzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4OWMsMHgwMCwweGY1LDB4MDAsMHgyZCwweGMwIH0gfSwKK3sgIDE2LCAweGEzZDAsIDAsIHsweDBiLDB4MDAsMHgwMiwweGQ0LDB4MDQsMHg4NCwweDIwLDB4MjMsMHg0MCwweDA4LDB4NWEsMHgwMiwweGRjLDB4MDAsMHhiNCwweDAwIH0gfSwKK3sgIDE2LCAweGEzZTAsIDAsIHsweDIxLDB4MDAsMHgyOCwweGMyLDB4MDIsMHgxZSwweDA0LDB4ODYsMHgwNCwweDJkLDB4ODgsMHgwOCwweGQwLDB4MDIsMHgyYSwweDA0IH0gfSwKK3sgIDE2LCAweGEzZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDAwLDB4OWMsMHgwMCwweGI1LDB4MDAsMHgyZCwweDQwIH0gfSwKK3sgIDE2LCAweGE0MDAsIDAsIHsweDBiLDB4NzAsMHgwMiwweGY0LDB4MjAsMHhhNywweDA0LDB4MjEsMHhjMCwweDBhLDB4NTAsMHgwMiwweGRjLDB4MDAsMHhiZSwweDAwIH0gfSwKK3sgIDE2LCAweGE0MTAsIDAsIHsweDIxLDB4YzAsMHgwOCwweDcwLDB4MTIsMHgwMCwweDAwLDB4ODUsMHgwMCwweDJkLDB4NDAsMHg4OCwweDY4LDB4MGEsMHgwNCwweDAwIH0gfSwKK3sgIDE2LCAweGE0MjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MCwweDE0LDB4Y2MsMHgwMCwweGExLDB4MDAsMHgyZSwweGMwIH0gfSwKK3sgIDE2LCAweGE0MzAsIDAsIHsweDFiLDB4MDgsMHgwNiwweGM0LDB4MjAsMHg4MCwweDAwLDB4MjAsMHg5OCwweDFhLDB4MTAsMHgwMiwweGNjLDB4MDAsMHhiMSwweDA4IH0gfSwKK3sgIDE2LCAweGE0NDAsIDAsIHsweDIwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgwYywweDAxLDB4ODIsMHhjMCwweDJjLDB4YWMsMHgyOCwweDkwLDB4MjIsMHgxOCwweDA0IH0gfSwKK3sgIDE2LCAweGE0NTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmMsMHgwMCwweGIzLDB4MDAsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweGE0NjAsIDAsIHsweDBmLDB4YmEsMHgwMywweGU1LDB4MDIsMHhlOSwweDA0LDB4MzIsMHg5MCwweGFlLDB4YjAsMHgwMywweGZjLDB4MTAsMHhmYiwweDQwIH0gfSwKK3sgIDE2LCAweGE0NzAsIDAsIHsweGIyLDB4MDAsMHgwYywweDgwLDB4MGIsMHgyYywweDAyLDB4ODIsMHgxOCwweDNmLDB4YTAsMHgwYywweGQwLDB4MDMsMHgyZSwweDA0IH0gfSwKK3sgIDE2LCAweGE0ODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MCwweDAwLDB4ZWMsMHgwNCwweGZiLDB4MDEsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweGE0OTAsIDAsIHsweDBmLDB4YjYsMHg0MywweGU0LDB4MDAsMHhmOCwweDAwLDB4M2UsMHg4MCwweDAxLDB4OTAsMHgwMywweGVjLDB4MDAsMHhmOCwweDgxIH0gfSwKK3sgIDE2LCAweGE0YTAsIDAsIHsweDNlLDB4ZDAsMHgwZCwweGI0LDB4NTMsMHhlMCwweDAwLDB4ZjksMHg0MCwweDNlLDB4NDAsMHgwZiwweGEwLDB4MDMsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGE0YjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4ZGMsMHgwMiwweGNkLDB4ODAsMHgzMywweDYwIH0gfSwKK3sgIDE2LCAweGE0YzAsIDAsIHsweDJjLDB4ZGEsMHgwMywweGZjLDB4MDAsMHhlYywweDAwLDB4MzMsMHg0MCwweDBmLDB4ZjIsMHgwMywweDdjLDB4MDQsMHhmZSwweDAwIH0gfSwKK3sgIDE2LCAweGE0ZDAsIDAsIHsweDMyLDB4MDAsMHgwYywweGM4LDB4MDMsMHgzYywweDAwLDB4Y2UsMHgwMCwweDMxLDB4ODAsMHgwYywweGQxLDB4MDMsMHgyNCwweDA0IH0gfSwKK3sgIDE2LCAweGE0ZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MSwweDA0LDB4NmMsMHgwMCwweDA5LDB4MDAsMHgyYSwweDY0IH0gfSwKK3sgIDE2LCAweGE0ZjAsIDAsIHsweDA4LDB4OGUsMHgwMiwweGMyLDB4MTAsMHhhMCwweDEwLDB4M2UsMHgxMCwweDBiLDB4OTgsMHgwMiwweGVjLDB4MDAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweGE1MDAsIDAsIHsweDAyLDB4ZDgsMHgwOCwweGJlLDB4MjIsMHgyMCwweDAwLDB4ODksMHgwMCwweDIyLDB4NTAsMHgwOCwweGEwLDB4MDIsMHgyMCwweDQwIH0gfSwKK3sgIDE2LCAweGE1MTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweDBiLDB4MjAsMHgyMiwweDQwIH0gfSwKK3sgIDE2LCAweGE1MjAsIDAsIHsweDA4LDB4YTAsMHgwMiwweGU1LDB4NDIsMHhhYiwweDA0LDB4MjIsMHgxOCwweDBiLDB4YjAsMHgwMiwweDZjLDB4MDAsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweGE1MzAsIDAsIHsweDIwLDB4MDQsMHgwOCwweDAxLDB4MDIsMHgwMCwweDA0LDB4YTgsMHg0MCwweDIyLDB4MTAsMHgwOCwweDgwLDB4MDIsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGE1NDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MGMsMHgwOCwweDgzLDB4MDAsMHgyOCwweDQwIH0gfSwKK3sgIDE2LCAweGE1NTAsIDAsIHsweDA4LDB4MDQsMHgwMiwweGM0LDB4MDIsMHhhOCwweDAwLDB4MmMsMHgwMCwweDBiLDB4MTIsMHgwMiwweGNjLDB4MDAsMHhiMCwweDAwIH0gfSwKK3sgIDE2LCAweGE1NjAsIDAsIHsweDIwLDB4YzAsMHg0MCwweDMwLDB4MDIsMHgwYywweDAwLDB4OGIsMHgwMCwweGE4LDB4YzAsMHgwOCwweDMwLDB4MDIsMHgwMiwweDExIH0gfSwKK3sgIDE2LCAweGE1NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDBkLDB4NmMsMHgwMCwweGM5LDB4MDAsMHgzMywweDQwIH0gfSwKK3sgIDE2LCAweGE1ODAsIDAsIHsweDBjLDB4YjAsMHgwMywweGVjLDB4MDIsMHhlYiwweDAwLDB4MzIsMHg0MCwweDBmLDB4YjAsMHgwMywweDZjLDB4MDAsMHhmYSwweDAwIH0gfSwKK3sgIDE2LCAweGE1OTAsIDAsIHsweDMyLDB4MDAsMHgwYywweDgwLDB4MDMsMHgyMCwweDgwLDB4YzgsMHgwMCwweDMwLDB4MDAsMHgwYywweDgwLDB4MDMsMHgyMCwweDAzIH0gfSwKK3sgIDE2LCAweGE1YTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE5LDB4ZmMsMHgwMCwweGZkLDB4MDAsMHgzZiwweDQwIH0gfSwKK3sgIDE2LCAweGE1YjAsIDAsIHsweDBmLDB4YzIsMHgxMywweGYwLDB4MDAsMHhmNCwweDAwLDB4M2YsMHgwMCwweDRmLDB4ZDQsMHgwMywweGZjLDB4MDAsMHhmNSwweDAwIH0gfSwKK3sgIDE2LCAweGE1YzAsIDAsIHsweDNmLDB4YzAsMHg4ZiwweGYwLDB4MDMsMHhmYywweDQwLDB4ZmYsMHgwMCwweDM3LDB4YzAsMHgyZiwweGYwLDB4MDMsMHhlOCwweDA2IH0gfSwKK3sgIDE2LCAweGE1ZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZjAsMHgwMCwweGNjLDB4MDAsMHgzMywweDAwIH0gfSwKK3sgIDE2LCAweGE1ZTAsIDAsIHsweDBlLDB4ZDAsMHgwYiwweDMzLDB4MDAsMHhjYywweDAwLDB4MzMsMHhlMCwweDBmLDB4YzAsMHg4MywweDdjLDB4MDAsMHhjZiwweDIwIH0gfSwKK3sgIDE2LCAweGE1ZjAsIDAsIHsweDdiLDB4MDksMHg4YywweGY4LDB4MDMsMHhmZSwweDUwLDB4Y2YsMHgzOCwweDNmLDB4ZTEsMHgwZCwweGMyLDB4MDMsMHhmMCwweDAwIH0gfSwKK3sgIDE2LCAweGE2MDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4ZTIsMHgwMCwweDk4LDB4MDgsMHgyMCwweDgwIH0gfSwKK3sgIDE2LCAweGE2MTAsIDAsIHsweDA4LDB4OTgsMHgwMiwweDIwLDB4MDAsMHg4OCwweGQwLDB4MjIsMHhlMCwweDBlLDB4YjQsMHgyMiwweDdkLDB4MTksMHg5ZiwweDY5IH0gfSwKK3sgIDE2LCAweGE2MjAsIDAsIHsweDJlLDB4OTAsMHgwOCwweDMwLDB4OTIsMHgyOCwweDgxLDB4ZGIsMHg2NCwweDJlLDB4ZTEsMHg4OCwweDE2LDB4YTIsMHhlMCwweDA0IH0gfSwKK3sgIDE2LCAweGE2MzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzgsMHgwMCwweDkwLDB4MjQsMHgyMCwweDAxIH0gfSwKK3sgIDE2LCAweGE2NDAsIDAsIHsweDA4LDB4MTAsMHgxNiwweDAwLDB4ODIsMHg4MywweDAxLDB4MjgsMHhjMSwweDBiLDB4MDIsMHg4MiwweDBjLDB4ZTAsMHhhMywweDEwIH0gfSwKK3sgIDE2LCAweGE2NTAsIDAsIHsweDI4LDB4MGUsMHgxYiwweDkyLDB4MDIsMHg4NCwweDg0LDB4OTMsMHgyMCwweDJlLDB4YzAsMHgwOCwweDMxLDB4MDIsMHhlMiwweDAxIH0gfSwKK3sgIDE2LCAweGE2NjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDE1LDB4YTgsMHgxMCwweDk4LDB4MDAsMHgyMiwweDgwIH0gfSwKK3sgIDE2LCAweGE2NzAsIDAsIHsweDA4LDB4OTAsMHgwMiwweDAwLDB4NjAsMHg4YSwweDEwLDB4MmEsMHhjMCwweDBhLDB4MjAsMHgwMiwweDZjLDB4MTgsMHhiYiwweDAwIH0gfSwKK3sgIDE2LCAweGE2ODAsIDAsIHsweDZlLDB4NjAsMHgyYiwweDkwLDB4MDIsMHg0NiwweDIwLDB4OGIsMHgwMCwweDJlLDB4YzIsMHgwOCwweGIxLDB4ODIsMHhmMCwweDA0IH0gfSwKK3sgIDE2LCAweGE2OTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDExLDB4ZTQsMHgwMiwweGNiLDB4MDAsMHhiMiwweDQwIH0gfSwKK3sgIDE2LCAweGE2YTAsIDAsIHsweDJjLDB4OTIsMHgwMywweDI3LDB4MDAsMHg4OCwweDAwLDB4YmEsMHhjMCwweDBmLDB4ODgsMHgwMywweDJjLDB4MDAsMHhlYiwweDA0IH0gfSwKK3sgIDE2LCAweGE2YjAsIDAsIHsweDNhLDB4YTAsMHhjZiwweDJjLDB4YTMsMHhlZCwweDAwLDB4OWIsMHgwMCwweDNjLDB4ZjAsMHgyZCwweDhjLDB4MzMsMHhkMCwweDA0IH0gfSwKK3sgIDE2LCAweGE2YzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4YjQsMHgwNCwweGVmLDB4MDAsMHgzZiwweGMwIH0gfSwKK3sgIDE2LCAweGE2ZDAsIDAsIHsweDBkLDB4NTEsMHgwMywweGYwLDB4MDAsMHhmMSwweDgxLDB4MzcsMHhjMCwweDBlLDB4ZjQsMHgwMywweDljLDB4MTAsMHhjZiwweDAwIH0gfSwKK3sgIDE2LCAweGE2ZTAsIDAsIHsweDNkLDB4ODAsMHgwYywweGVjLDB4MDcsMHhiOCwweDA4LDB4ZmYsMHgwMiwweDFmLDB4YzQsMHgwZiwweGM4LDB4MDMsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGE2ZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4OWUsMHgwMCwweGMzLDB4MDAsMHgzOCwweDQwIH0gfSwKK3sgIDE2LCAweGE3MDAsIDAsIHsweDBjLDB4OTIsMHgwMywweGE0LDB4ODAsMHhmYiwweDIwLDB4M2EsMHhjMCwweDBkLDB4OTQsMHgwMywweDJjLDB4NDAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweGE3MTAsIDAsIHsweDNlLDB4MDEsMHgwZiwweDgwLDB4MDMsMHhlNSwweDAwLDB4ZWIsMHgwMCwweDNhLDB4YzAsMHgwZCwweDg0LDB4MGIsMHgxMCwweDA0IH0gfSwKK3sgIDE2LCAweGE3MjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4MmMsMHgwOCwweDhiLDB4MDIsMHgyMiwweGMwIH0gfSwKK3sgIDE2LCAweGE3MzAsIDAsIHsweDA4LDB4OTIsMHgwMywweDIxLDB4MDAsMHg4YiwweDQ4LDB4MjIsMHhjMCwweDBiLDB4YjcsMHgwMiwweDNkLDB4NDAsMHgzZiwweDAxIH0gfSwKK3sgIDE2LCAweGE3NDAsIDAsIHsweDIyLDB4NzQsMHgwYiwweDkwLDB4MDIsMHgyOCwweDA0LDB4YmYsMHgwMCwweGIyLDB4YzAsMHgwYiwweDg1LDB4MDIsMHgzMiwweDAwIH0gfSwKK3sgIDE2LCAweGE3NTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NDAsMHgwMSwweDgwLDB4MDAsMHgyOCwweDAwIH0gfSwKK3sgIDE2LCAweGE3NjAsIDAsIHsweDA4LDB4MmMsMHgxMiwweDg4LDB4NDAsMHhiMCwweDQwLDB4MDgsMHhjMCwweDBiLDB4MTgsMHgwMiwweDBlLDB4MDAsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweGE3NzAsIDAsIHsweDI4LDB4MjAsMHgxMSwweDMwLDB4MDIsMHgwYywweDAwLDB4YjMsMHgwMCwweDI0LDB4MDAsMHgwOSwweDAwLDB4MDYsMHgzOCwweDAwIH0gfSwKK3sgIDE2LCAweGE3ODAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAxLDB4MTIsMHgwMCwweDg0LDB4ODAsMHgyMSwweGEwIH0gfSwKK3sgIDE2LCAweGE3OTAsIDAsIHsweDI4LDB4NjgsMHgxMiwweDNhLDB4MDAsMHg4NCwweDgwLDB4MjUsMHhlMCwweDhiLDB4NTgsMHgwMiwweDFlLDB4NDAsMHhiNywweDgyIH0gfSwKK3sgIDE2LCAweGE3YTAsIDAsIHsweDIxLDB4YTYsMHgwYiwweDc4LDB4MDIsMHgxYSwweDAwLDB4YjcsMHg4MCwweDIxLDB4MjAsMHgwYiwweDU4LDB4MDIsMHgwOCwweDAwIH0gfSwKK3sgIDE2LCAweGE3YjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MDgsMHgwMCwweGM4LDB4MjEsMHgzOCwweDA5IH0gfSwKK3sgIDE2LCAweGE3YzAsIDAsIHsweDBjLDB4MjgsMHgwMywweDgwLDB4MDEsMHhmMSwweDAwLDB4MzgsMHhjMCwweDBkLDB4ODUsMHgwMiwweDBjLDB4MDAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweGE3ZDAsIDAsIHsweDM4LDB4ODUsMHgwZiwweDEwLDB4MDMsMHg4YywweDAwLDB4ZWIsMHgxMCwweDNjLDB4YzgsMHgwZCwweDMwLDB4MDMsMHgxMiwweDAyIH0gfSwKK3sgIDE2LCAweGE3ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDFkLDB4OTgsMHgwMCwweGZjLDB4MDEsMHgzZiwweDgwIH0gfSwKK3sgIDE2LCAweGE3ZjAsIDAsIHsweDBmLDB4NjgsMHgwMywweGQwLDB4NDAsMHhmYywweDAwLDB4M2IsMHhjMCwweDBkLDB4YzAsMHgwMywweGZjLDB4MjAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweGE4MDAsIDAsIHsweDNiLDB4YzUsMHgwZiwweGYwLDB4MGIsMHhiNCwweDQwLDB4ZmYsMHgxOCwweDNmLDB4MDAsMHgwZiwweGYxLDB4MDMsMHhkMCwweDA2IH0gfSwKK3sgIDE2LCAweGE4MTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZTQsMHgwMCwweGViLDB4MDAsMHhiMCwweDQxIH0gfSwKK3sgIDE2LCAweGE4MjAsIDAsIHsweDBjLDB4YTAsMHgwMywweGUwLDB4MDQsMHhjYSwweDA0LDB4YjAsMHhlMCwweDBlLDB4YjAsMHgwMywweGVjLDB4ODAsMHhjYiwweDIwIH0gfSwKK3sgIDE2LCAweGE4MzAsIDAsIHsweDMyLDB4ODEsMHgwYywweGEwLDB4MDMsMHhlZSwweDAwLDB4ZGIsMHgwMCwweDNlLDB4MDAsMHgwZSwweGIwLDB4MDMsMHgyYSwweDAwIH0gfSwKK3sgIDE2LCAweGE4NDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDExLDB4OTQsMHgwNCwweDg3LDB4MDAsMHgyMSwweGMwIH0gfSwKK3sgIDE2LCAweGE4NTAsIDAsIHsweDQ4LDB4NjAsMHgwMiwweGYwLDB4MDAsMHg4NywweDAwLDB4MjEsMHhjMCwweDA4LDB4NzAsMHgwMiwweGZjLDB4YTAsMHg4MywweDI4IH0gfSwKK3sgIDE2LCAweGE4NjAsIDAsIHsweGEzLDB4ODAsMHgwOCwweDYwLDB4MDIsMHhkYywweDAwLDB4ODcsMHgyMCwweDJkLDB4YzAsMHgwYiwweDcwLDB4MDIsMHgxMiwweDA0IH0gfSwKK3sgIDE2LCAweGE4NzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWMsMHgwMiwweGEzLDB4ODAsMHgyMSwweDYwIH0gfSwKK3sgIDE2LCAweGE4ODAsIDAsIHsweDA4LDB4NjgsMHgwMiwweGQyLDB4MDAsMHg4NywweDgwLDB4MjEsMHhlMCwweDI5LDB4NzgsMHgwMiwweGRlLDB4ODAsMHg4NywweDkwIH0gfSwKK3sgIDE2LCAweGE4OTAsIDAsIHsweDIxLDB4YTAsMHgxOSwweDQ4LDB4MDIsMHhmZSwweDAwLDB4OTcsMHg4MCwweDJkLDB4ZTAsMHgwYSwweDM4LDB4ODIsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweGE4YTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE0LDB4Y2MsMHgwMSwweDgzLDB4ODAsMHgyMCwweGMwIH0gfSwKK3sgIDE2LCAweGE4YjAsIDAsIHsweDA4LDB4MjAsMHg0MiwweGMwLDB4MzAsMHg4MywweDcwLDB4YTAsMHhjMCwweDg5LDB4MzQsMHgwMiwweGNjLDB4MDIsMHg4MywweDAwIH0gfSwKK3sgIDE2LCAweGE4YzAsIDAsIHsweDYwLDB4YzAsMHgyOSwweDAwLDB4MDIsMHhjZSwweDAwLDB4ODMsMHgwMCwweDJjLDB4YzgsMHgwYiwweGJjLDB4MDIsMHgxMiwweDA0IH0gfSwKK3sgIDE2LCAweGE4ZDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTksMHgwMCwweGVhLDB4ZTIsMHgzMiwweDkwIH0gfSwKK3sgIDE2LCAweGE4ZTAsIDAsIHsweDJjLDB4ZTAsMHgwMywweGZiLDB4MDIsMHhjZSwweGMwLDB4MzIsMHg4MCwweDBmLDB4ZTQsMHgwMywweGU4LDB4MDAsMHg4YSwweDAwIH0gfSwKK3sgIDE2LCAweGE4ZjAsIDAsIHsweDMzLDB4ODgsMHgwZCwweDY0LDB4YzMsMHhmYSwweDAwLDB4ZGEsMHgwMCwweDNkLDB4OTAsMHgwZSwweGUwLDB4MGIsMHgzYSwweDA0IH0gfSwKK3sgIDE2LCAweGE5MDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4YzAsMHgyNCwweGY4LDB4MDgsMHgzZSwweDEyIH0gfSwKK3sgIDE2LCAweGE5MTAsIDAsIHsweDBmLDB4YzAsMHgwMywweGUwLDB4NDgsMHhmMCwweDAwLDB4M2UsMHgwMCwweDBlLDB4ODAsMHg5MywweGMwLDB4MDAsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGE5MjAsIDAsIHsweDdlLDB4MDEsMHgwZSwweDgwLDB4YzIsMHhlMCwweDQwLDB4ZjgsMHgwMCwweDdlLDB4MDAsMHg4ZiwweDg0LDB4MDMsMHhkMiwweDAwIH0gfSwKK3sgIDE2LCAweGE5MzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTUsMHgwMCwweGMxLDB4MDEsMHgzMiwweDQ4IH0gfSwKK3sgIDE2LCAweGE5NDAsIDAsIHsweDBjLDB4OTgsMHgwMywweGU2LDB4NDAsMHhjOSwweDAwLDB4MzIsMHg0MCwweDBmLDB4OTAsMHgwMywweDY2LDB4MDAsMHhjOSwweDAwIH0gfSwKK3sgIDE2LCAweGE5NTAsIDAsIHsweDE4LDB4NjEsMHgwYywweDkwLDB4MDMsMHg2NCwweDIwLDB4ZjksMHgwNSwweDNlLDB4NDAsMHgwYywweDkwLDB4ODMsMHgwMiwweDA0IH0gfSwKK3sgIDE2LCAweGE5NjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NjYsMHgyMCwweDg5LDB4MDAsMHgyMCwweDUyIH0gfSwKK3sgIDE2LCAweGE5NzAsIDAsIHsweDI4LDB4MTAsMHhjMiwweDI2LDB4MDIsMHhhOSwweDAwLDB4MjIsMHg0MCwweDBiLDB4OTAsMHgwYSwweDI3LDB4MDAsMHhhOSwweDAwIH0gfSwKK3sgIDE2LCAweGE5ODAsIDAsIHsweDIyLDB4NzAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDA4LDB4YjksMHgwMCwweDJlLDB4NDAsMHgwYSwweDkwLDB4MGEsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGE5OTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMiwweDhkLDB4MDAsMHgyMywweDQwIH0gfSwKK3sgIDE2LCAweGE5YTAsIDAsIHsweDA4LDB4ZDEsMHgwMiwweDg0LDB4MjAsMHg4OSwweDAwLDB4MjIsMHg2MCwweDBiLDB4MTEsMHhmMiwweDI0LDB4YjAsMHg4MSwweDAwIH0gfSwKK3sgIDE2LCAweGE5YjAsIDAsIHsweDJhLDB4NDYsMHgwOCwweDkwLDB4NDIsMHg2NCwweDA4LDB4YjksMHgwMCwweDJlLDB4NDAsMHgwOCwweDkyLDB4MDIsMHgwNiwweDAwIH0gfSwKK3sgIDE2LCAweGE5YzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MTQsMHg4MCwweDg1LDB4MjAsMHgyMywweDQ4IH0gfSwKK3sgIDE2LCAweGE5ZDAsIDAsIHsweDA4LDB4NTIsMHgwMiwweDg0LDB4MDgsMHg4MSwweDAwLDB4MjAsMHg0MCwweDBiLDB4MTIsMHgwMiwweDA0LDB4ODAsMHhhMSwweDIwIH0gfSwKK3sgIDE2LCAweGE5ZTAsIDAsIHsweDI4LDB4NDksMHgyOCwweDkwLDB4MDIsMHgwNCwweDAwLDB4MzEsMHgyMCwweDJlLDB4NDAsMHgwOCwweDMyLDB4MDIsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweGE5ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGM4LDB4NTAsMHhiMiwweDE0IH0gfSwKK3sgIDE2LCAweGFhMDAsIDAsIHsweDBjLDB4YzAsMHgwMywweGExLDB4NDAsMHhjOCwweDAwLDB4YjIsMHgwMCwweDA3LDB4ODUsMHgwMywweDIxLDB4NDAsMHhjOCwweDUwIH0gfSwKK3sgIDE2LCAweGFhMTAsIDAsIHsweDNhLDB4MTUsMHgwYywweDg1LDB4MDMsMHg2MSwweDQwLDB4ZjgsMHg1MSwweDNlLDB4MDAsMHgyYywweDg1LDB4MDMsMHgyZSwweDAzIH0gfSwKK3sgIDE2LCAweGFhMjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDFkLDB4YzQsMHg0OCwweGY5LDB4MTAsMHgzZSwweDQ0IH0gfSwKK3sgIDE2LCAweGFhMzAsIDAsIHsweDRmLDB4OTEsMHgwMywweDc0LDB4MDAsMHhmNSwweDQ0LDB4M2UsMHg0MCwweDBmLDB4ZDEsMHgwMywweGU0LDB4NDAsMHhmOSwweDEwIH0gfSwKK3sgIDE2LCAweGFhNDAsIDAsIHsweDM3LDB4NDQsMHgwZiwweGQwLDB4MDMsMHhkNCwweDAwLDB4ZjksMHgxMCwweDNmLDB4YzAsMHgwZiwweGQxLDB4MDMsMHhlNiwweDA2IH0gfSwKK3sgIDE2LCAweGFhNTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4ZjYsMHhhMCwweGRkLDB4OGMsMHgzMywweDc4IH0gfSwKK3sgIDE2LCAweGFhNjAsIDAsIHsweDBlLDB4ZGEsMHgwMywweDM1LDB4MDAsMHhjZCwweGEwLDB4MzMsMHg0MCwweDBkLDB4ZjgsMHgwYiwweDM2LDB4ODEsMHhlOSwweDgwIH0gfSwKK3sgIDE2LCAweGFhNzAsIDAsIHsweDMzLDB4NzAsMHgwYywweDkxLDB4MDMsMHhlNCwweDQwLDB4ZjksMHhjMCwweDNlLDB4YzAsMHgwZiwweGRjLDB4MDMsMHhjNiwweDAwIH0gfSwKK3sgIDE2LCAweGFhODAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDEwLDB4ZTEsMHgwNCwweGI4LDB4NDAsMHgyMCwweDNjIH0gfSwKK3sgIDE2LCAweGFhOTAsIDAsIHsweDBjLDB4ODUsMHgwMiwweDAyLDB4ODQsMHg4YSwweDQwLDB4MjIsMHgwMCwweDA4LDB4OGYsMHg4MiwweDIzLDB4MDAsMHhiOCwweGU4IH0gfSwKK3sgIDE2LCAweGFhYTAsIDAsIHsweDIyLDB4MjAsMHgwOCwweDg4LDB4MDIsMHhlMiwweDAwLDB4YjgsMHhkMCwweDJlLDB4MDAsMHgwYiwweDhjLDB4MDIsMHhjZSwweDA0IH0gfSwKK3sgIDE2LCAweGFhYjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHgwMCwweDkxLDB4MDAsMHg2MCwweDQ4IH0gfSwKK3sgIDE2LCAweGFhYzAsIDAsIHsweDRiLDB4MTAsMHgwMiwweDA0LDB4OGEsMHg4MSwweDQwLDB4NjAsMHg0MCwweDQ5LDB4MTAsMHgwMiwweDhkLDB4YTAsMHhhMSwweDQxIH0gfSwKK3sgIDE2LCAweGFhZDAsIDAsIHsweDIwLDB4NTAsMHgwOSwweDEyLDB4MjIsMHhjNCwweDgwLDB4YjEsMHgyMCwweDJjLDB4NDAsMHg0YiwweDNlLDB4MDIsMHhjMiwweDAxIH0gfSwKK3sgIDE2LCAweGFhZTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4YTQsMHgwOCwweGI5LDB4MDQsMHhhMCwweDQwIH0gfSwKK3sgIDE2LCAweGFhZjAsIDAsIHsweDQ4LDB4YjAsMHgwMiwweDI0LDB4MDAsMHg4OSwweDAwLDB4ODIsMHg0MCwweDA4LDB4OTAsMHhhNiwweGE0LDB4MDAsMHhiOSwweDA0IH0gfSwKK3sgIDE2LCAweGFiMDAsIDAsIHsweDIyLDB4NTQsMHgyOSwweDk1LDB4MDIsMHhlNSwweDQwLDB4YjksMHgwMCwweDZlLDB4NDAsMHgwYiwweDkyLDB4MDIsMHhjNiwweDA0IH0gfSwKK3sgIDE2LCAweGFiMTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDA1LDB4ZTQsMHgwMCwweDkxLDB4MDAsMHgzMiwweDQwIH0gfSwKK3sgIDE2LCAweGFiMjAsIDAsIHsweDBmLDB4OTAsMHgwOSwweDI0LDB4MDAsMHg4OSwweDkwLDB4MzIsMHg0MCwweDBkLDB4OTQsMHgwMywweGE0LDB4MDAsMHhlOSwweDAyIH0gfSwKK3sgIDE2LCAweGFiMzAsIDAsIHsweDcyLDB4NjAsMHgwZCwweDk0LDB4MDMsMHhlNCwweDAxLDB4ZjksMHgwMSwweDNlLDB4NjAsMHgwZiwweDkwLDB4MDMsMHhlOCwweDA0IH0gfSwKK3sgIDE2LCAweGFiNDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAxLDB4YTQsMHg0MCwweGY5LDB4MDAsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweGFiNTAsIDAsIHsweDRmLDB4OTAsMHgwMywweGU3LDB4MTAsMHhmOSwweDgwLDB4M2UsMHg0MCwweDBmLDB4MTAsMHgxMywweDY0LDB4MDAsMHhmMSwweDAwIH0gfSwKK3sgIDE2LCAweGFiNjAsIDAsIHsweGJlLDB4NDAsMHgwZSwweDkwLDB4MDMsMHhlNiwweDA4LDB4ZjksMHgwMSwweDNlLDB4NjQsMHgwZiwweDkwLDB4MDMsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGFiNzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAwLDB4YTAsMHgwMCwweGY4LDB4MDAsMHgzMiwweDA4IH0gfSwKK3sgIDE2LCAweGFiODAsIDAsIHsweDBjLDB4MDEsMHgwYiwweDIwLDB4NDAsMHhjOCwweDQwLDB4MzIsMHgwMCwweDBlLDB4ODQsMHg4MywweDIwLDB4MDAsMHhmOCwweDA0IH0gfSwKK3sgIDE2LCAweGFiOTAsIDAsIHsweDNlLDB4MDQsMHgwZiwweDgwLDB4MDMsMHgyMSwweDAwLDB4ZTgsMHgwMCwweDNlLDB4MTAsMHgwZiwweDg4LDB4MDMsMHhjYSwweDA0IH0gfSwKK3sgIDE2LCAweGFiYTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4MzgsMHgwMCwweDNlLDB4MDQsMHgyMywweDgwIH0gfSwKK3sgIDE2LCAweGFiYjAsIDAsIHsweDA4LDB4ZWMsMHgxMiwweDM5LDB4NDQsMHhhNiwweDAwLDB4MjgsMHg4MSwweDA4LDB4ZTAsMHgwMCwweDM4LDB4MDgsMHhiYSwweDAwIH0gfSwKK3sgIDE2LCAweGFiYzAsIDAsIHsweDNmLDB4ODAsMHgwYiwweGEwLDB4MDIsMHhhOCwweDAwLDB4OGEsMHgwMiwweDJlLDB4ODAsMHgwYiwweGUwLDB4MDIsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGFiZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NDgsMHgwMCwweDMxLDB4MDAsMHgyNCwweGQwIH0gfSwKK3sgIDE2LCAweGFiZTAsIDAsIHsweDA4LDB4M2UsMHgxMiwweGFlLDB4MDgsMHg4MSwweGEwLDB4MmMsMHhjMCwweDBhLDB4MzgsMHgwMCwweDRjLDB4MDAsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweGFiZjAsIDAsIHsweDZlLDB4YzAsMHgwYSwweDMwLDB4MDIsMHgwYywweDAwLDB4YTMsMHgwMCwweDZjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGFjMDAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDAxLDB4MTgsMHgwMCwweGI1LDB4MTAsMHgyNSwweGMwIH0gfSwKK3sgIDE2LCAweGFjMTAsIDAsIHsweDI4LDB4NjAsMHgxMiwweDkwLDB4MTAsMHhhNSwweDA4LDB4MmQsMHhjMiwweDA4LDB4NjQsMHgyMiwweDU4LDB4MTgsMHhiNywweDAwIH0gfSwKK3sgIDE2LCAweGFjMjAsIDAsIHsweDJkLDB4ODAsMHgwYiwweDc5LDB4MDIsMHhiZSwweGMwLDB4ODcsMHgwMSwweDZkLDB4YzAsMHgwYiwweDYwLDB4MDIsMHhlOCwweDAwIH0gfSwKK3sgIDE2LCAweGFjMzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgwMCwweGY1LDB4ODQsMHgzNSwweDIwIH0gfSwKK3sgIDE2LCAweGFjNDAsIDAsIHsweDhjLDB4MTgsMHgwMiwweDkyLDB4MTAsMHhjNSwweDgwLDB4M2QsMHg2MCwweDBlLDB4YzgsMHgwYiwweDVhLDB4MDgsMHg3NywweGYzIH0gfSwKK3sgIDE2LCAweGFjNTAsIDAsIHsweDNkLDB4YTAsMHgwZiwweGY4LDB4MDMsMHgxZSwweGIwLDB4ZTcsMHg4NSwweDNkLDB4ZTAsMHgwZiwweDc4LDB4MDMsMHhlYSwweDAyIH0gfSwKK3sgIDE2LCAweGFjNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDFkLDB4YWMsMHgwMCwweGYxLDB4MDQsMHhiYSwweDAxIH0gfSwKK3sgIDE2LCAweGFjNzAsIDAsIHsweDBmLDB4YTAsMHg0MywweDYwLDB4MDksMHhlMSwweDAwLDB4MzgsMHg0MCwweDBlLDB4YTAsMHgwMywweGE4LDB4MTQsMHhmYiwweDIwIH0gfSwKK3sgIDE2LCAweGFjODAsIDAsIHsweDNhLDB4ODAsMHgwZiwweGI0LDB4MWIsMHg0YywweDgwLDB4ZmIsMHgyOSwweDNlLDB4YzAsMHgwZiwweGIwLDB4MjMsMHhjMiwweDA2IH0gfSwKK3sgIDE2LCAweGFjOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmEsMHgwMCwweGNkLDB4ODAsMHgzYiwweGUwIH0gfSwKK3sgIDE2LCAweGFjYTAsIDAsIHsweDRlLDB4ZjgsMHgwMywweGYyLDB4MDIsMHhkNCwweDgxLDB4M2IsMHhlMCwweDhlLDB4OTgsMHgwNywweDNlLDB4NDQsMHhlZiwweDkxIH0gfSwKK3sgIDE2LCAweGFjYjAsIDAsIHsweDNmLDB4ZTAsMHg0ZiwweGZjLDB4MDcsMHhlZSwweGQwLDB4Y2YsMHg5OCwweDMzLDB4ZTQsMHgwZiwweGY4LDB4MDMsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGFjYzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDAxLDB4OTgsMHgwMCwweDg1LDB4MTAsMHgyZCwweGM0IH0gfSwKK3sgIDE2LCAweGFjZDAsIDAsIHsweDBkLDB4MTEsMHgwMiwweGYwLDB4MDAsMHg4NSwweDIwLDB4MzEsMHhjNCwweDBiLDB4N2IsMHgwMCwweDM4LDB4NDAsMHhkNywweDEwIH0gfSwKK3sgIDE2LCAweGFjZTAsIDAsIHsweDJkLDB4ODAsMHgwYiwweDcwLDB4NjIsMHhmZSwweGUxLDB4ODcsMHgxNCwweDM5LDB4YzAsMHgwYiwweDYwLDB4MDIsMHhlYSwweDA0IH0gfSwKK3sgIDE2LCAweGFjZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4YmMsMHg0MCwweGE1LDB4MDAsMHgyOSwweDQwIH0gfSwKK3sgIDE2LCAweGFkMDAsIDAsIHsweDBiLDB4NTAsMHg4MiwweGRjLDB4NDAsMHg4NCwweDA0LDB4MmQsMHhjMCwweDBiLDB4MTAsMHgwNiwweDU4LDB4NDQsMHhhNywweDEwIH0gfSwKK3sgIDE2LCAweGFkMTAsIDAsIHsweDJkLDB4ODAsMHgwYiwweDcxLDB4MDIsMHhkYywweDAwLDB4ODcsMHgwNCwweDIxLDB4YzIsMHgwYiwweDUwLDB4MDIsMHhjMCwweDEwIH0gfSwKK3sgIDE2LCAweGFkMjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDE0LDB4Y2MsMHgwYSwweGExLDB4MDEsMHgyYywweDQwIH0gfSwKK3sgIDE2LCAweGFkMzAsIDAsIHsweDg5LDB4MTgsMHgwMiwweGMxLDB4MDAsMHhhMSwweDA4LDB4MjAsMHhjMCwweDBiLDB4MzQsMHgwNiwweDQwLDB4MDAsMHg5MywweDA1IH0gfSwKK3sgIDE2LCAweGFkNDAsIDAsIHsweDJjLDB4MTQsMHgwYiwweDNjLDB4ODYsMHhjZSwweDEwLDB4ODMsMHgwMSwweDI4LDB4ZjEsMHgwYiwweDE0LDB4MDIsMHhjOCwweDA0IH0gfSwKK3sgIDE2LCAweGFkNTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YTAsMHgwMCwweGVkLDB4MDAsMHgzYSwweGMwIH0gfSwKK3sgIDE2LCAweGFkNjAsIDAsIHsweDA3LDB4YmMsMHg2MywweGVkLDB4MDAsMHg4MSwweDQwLDB4M2UsMHhjMCwweDBlLDB4ODgsMHgwMywweDY0LDB4MDAsMHhlZiwweDAwIH0gfSwKK3sgIDE2LCAweGFkNzAsIDAsIHsweDdlLDB4NTAsMHgwZiwweGYwLDB4MDIsMHhmZCwweDQyLDB4Y2YsMHgwMCwweDcyLDB4YzAsMHgxZiwweGI0LDB4MDMsMHhlYSwweDA0IH0gfSwKK3sgIDE2LCAweGFkODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4ZTgsMHgwMCwweDk5LDB4MDAsMHgzZSwweGUwIH0gfSwKK3sgIDE2LCAweGFkOTAsIDAsIHsweDRmLDB4YjQsMHg4MywweGVkLDB4OTAsMHgwOSwweDQwLDB4M2UsMHhjMCwweDBmLDB4YTEsMHg4MywweGE4LDB4MDEsMHhlYiwweDAxIH0gfSwKK3sgIDE2LCAweGFkYTAsIDAsIHsweDNlLDB4MDAsMHgwZiwweGIxLDB4MTMsMHhlYywweDBjLDB4ZmIsMHgwMCwweDNhLDB4YzAsMHg1ZiwweDIwLDB4MjMsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGFkYjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZjgsMHgwMCwweGZkLDB4MDQsMHgzZiwweGIwIH0gfSwKK3sgIDE2LCAweGFkYzAsIDAsIHsweDBkLDB4NjAsMHgwMywweDNlLDB4MDAsMHhjZCwweDAwLDB4MzMsMHhmMCwweDBmLDB4ZjIsMHgwMSwweGYwLDB4MDAsMHhmZiwweDAzIH0gfSwKK3sgIDE2LCAweGFkZDAsIDAsIHsweDNmLDB4MDMsMHgwZiwweGYwLDB4MDEsMHhmYywweDAwLDB4ZmIsMHgwMiwweDMzLDB4YzIsMHgwZiwweGYwLDB4ZTMsMHgwMCwweDQ0IH0gfSwKK3sgIDE2LCAweGFkZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MSwweDA0LDB4NmEsMHgwMCwweGI5LDB4MDIsMHgyZSwweGEwIH0gfSwKK3sgIDE2LCAweGFkZjAsIDAsIHsweDRhLDB4YWMsMHgwMiwweDBlLDB4ODAsMHhmOSwweGMwLDB4MzYsMHhlMSwweDBiLDB4YTAsMHgwMiwweDJhLDB4MDgsMHhiYiwweDAwIH0gfSwKK3sgIDE2LCAweGFlMDAsIDAsIHsweDJlLDB4MjAsMHgwZSwweGIwLDB4MDIsMHhlYywweDAwLDB4ZWIsMHgwMCwweDIyLDB4YzAsMHg4YiwweGIwLDB4MDIsMHgyMCwweDQwIH0gfSwKK3sgIDE2LCAweGFlMTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAxLDB4MjMsMHgwMCwweGE5LDB4MDAsMHgyOCwweGMwIH0gfSwKK3sgIDE2LCAweGFlMjAsIDAsIHsweDA5LDB4YjIsMHgyMiwweDZjLDB4NDAsMHg4OSwweDg5LDB4MmEsMHhjMCwweDBiLDB4MTQsMHgwNiwweDI2LDB4MDAsMHhhYiwweDAyIH0gfSwKK3sgIDE2LCAweGFlMzAsIDAsIHsweDZlLDB4ZTAsMHgwOSwweGIwLDB4MDYsMHg2YywweDAwLDB4YjMsMHgwMiwweDIyLDB4YzAsMHgwYiwweGIwLDB4MDIsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGFlNDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDgsMHgwMCwweGIxLDB4MDAsMHgyYywweGMwIH0gfSwKK3sgIDE2LCAweGFlNTAsIDAsIHsweDBhLDB4MzAsMHgwMiwweDJjLDB4MDAsMHhiYiwweDAwLDB4NjQsMHhjMCwweDBiLDB4MzIsMHgwYSwweDA4LDB4MDAsMHgzMywweDAwIH0gfSwKK3sgIDE2LCAweGFlNjAsIDAsIHsweDZjLDB4ODAsMHgwMiwweDMwLDB4NDYsMHhjYywweDE4LDB4YTMsMHgwMCwweDIwLDB4YzAsMHgwYiwweDI4LDB4MDIsMHgwMiwweDExIH0gfSwKK3sgIDE2LCAweGFlNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4NjgsMHgwMCwweGU5LDB4MDAsMHgzOCwweGMxIH0gfSwKK3sgIDE2LCAweGFlODAsIDAsIHsweDBkLDB4YjEsMHgwYiwweDJjLDB4MDAsMHg4OSwweDAwLDB4M2EsMHhjMCwweDBiLDB4OTAsMHgwMywweDYwLDB4MDAsMHhmZiwweDAyIH0gfSwKK3sgIDE2LCAweGFlOTAsIDAsIHsweDNlLDB4ODAsMHgwZiwweGYwLDB4MDMsMHhmYywweDgwLDB4ZmYsMHgwMCwweDMyLDB4YzAsMHg4ZiwweDgwLDB4MGIsMHgwMCwweDAzIH0gfSwKK3sgIDE2LCAweGFlYTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDExLDB4ZDgsMHgwMCwweGZkLDB4MDQsMHgzZiwweGMwIH0gfSwKK3sgIDE2LCAweGFlYjAsIDAsIHsweDJmLDB4ZjIsMHgwMywweGZjLDB4MTEsMHhlZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjQsMHg0MywweDcwLDB4MDAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweGFlYzAsIDAsIHsweDNmLDB4MDAsMHg0NiwweGYwLDB4MDMsMHhmZCwweDAwLDB4ZWYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGMwLDB4MDMsMHhlOCwweDA2IH0gfSwKK3sgIDE2LCAweGFlZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmUsMHgwMCwweGZmLDB4ODAsMHgzZCwweGUwIH0gfSwKK3sgIDE2LCAweGFlZTAsIDAsIHsweDBjLDB4ZjksMHgxMywweGRlLDB4MDAsMHg3ZiwweDgwLDB4YjMsMHhlMCwweDBmLDB4ZmMsMHgwMywweGJlLDB4NDAsMHhjZiwweDgwIH0gfSwKK3sgIDE2LCAweGFlZjAsIDAsIHsweDMzLDB4ZjAsMHgwZiwweGY4LDB4MDMsMHg3YywweDA0LDB4Y2MsMHg4MCwweDMzLDB4YTAsMHgwYywweGYwLDB4MGIsMHgzMCwweDAxIH0gfSwKK3sgIDE2LCAweGFmMDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4ZTAsMHgyMCwweDg4LDB4MDAsMHgyZSwweDIwIH0gfSwKK3sgIDE2LCAweGFmMTAsIDAsIHsweDA4LDB4ODIsMHgxMiwweGUwLDB4ODAsMHhhOCwweDgxLDB4MjIsMHgwMiwweDBiLDB4ODAsMHgwMiwweDIwLDB4ODAsMHhhOCwweDgwIH0gfSwKK3sgIDE2LCAweGFmMjAsIDAsIHsweDIyLDB4MDgsMHgwYiwweDgwLDB4MDIsMHgyYywweDAyLDB4ODgsMHgwNCwweGFhLDB4MjAsMHgwOCwweGIwLDB4MDIsMHgyMCwweDA0IH0gfSwKK3sgIDE2LCAweGFmMzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4ZWMsMHgwMCwweGEzLDB4MDgsMHgyYywweDgwIH0gfSwKK3sgIDE2LCAweGFmNDAsIDAsIHsweDA4LDB4MzIsMHgwMiwweGM0LDB4MjAsMHhhMywweDAwLDB4MjgsMHg0MCwweDBiLDB4OTIsMHgwMiwweDg0LDB4MDAsMHhhOSwweDAxIH0gfSwKK3sgIDE2LCAweGFmNTAsIDAsIHsweDI4LDB4YzgsMHgxYiwweDEyLDB4ODIsMHhjYywweDQwLDB4YTgsMHgwMCwweDI0LDB4ZTAsMHgwYSwweDMwLDB4NDIsMHgyMiwweDAxIH0gfSwKK3sgIDE2LCAweGFmNjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDExLDB4YTgsMHg4MCwweGE4LDB4MDIsMHgyZSwweDQwIH0gfSwKK3sgIDE2LCAweGFmNzAsIDAsIHsweDY4LDB4ODAsMHgxMCwweGM4LDB4MDAsMHhiOCwweDQwLDB4MmEsMHg5MCwweDBiLDB4YTAsMHgwMCwweDI4LDB4MDAsMHhhYSwweDA4IH0gfSwKK3sgIDE2LCAweGFmODAsIDAsIHsweDJhLDB4MDIsMHgwMywweDIwLDB4MDIsMHg4YywweDAwLDB4YTgsMHg4OCwweDJlLDB4MjAsMHgwYSwweGIwLDB4MDIsMHgzMCwweDA0IH0gfSwKK3sgIDE2LCAweGFmOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZTgsMHgwNCwweGZhLDB4MDAsMHgzYywweDQwIH0gfSwKK3sgIDE2LCAweGFmYTAsIDAsIHsweDBjLDB4YTAsMHgwMywweGU4LDB4MDAsMHhlYiwweDAwLDB4M2EsMHhjMCwweDBmLDB4MjAsMHg1MywweGE4LDB4MDAsMHhlMywweDQwIH0gfSwKK3sgIDE2LCAweGFmYjAsIDAsIHsweDJhLDB4NDAsMHgwZiwweGEwLDB4MDMsMHg2YywweDAwLDB4YTgsMHg4MCwweDM0LDB4MjAsMHgxZSwweGIwLDB4MDMsMHgxMCwweDA0IH0gfSwKK3sgIDE2LCAweGFmYzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4YjQsMHgwMCwweDlkLDB4OTEsMHgzZiwweDgwIH0gfSwKK3sgIDE2LCAweGFmZDAsIDAsIHsweDBmLDB4ZGEsMHgyMywweGY0LDB4MDAsMHhjYywweDIwLDB4MzcsMHgwMCwweDA3LDB4ZDAsMHgxMywweDc0LDB4MDAsMHhiYywweDAwIH0gfSwKK3sgIDE2LCAweGFmZTAsIDAsIHsweGI3LDB4ODAsMHgwYiwweGQwLDB4NDMsMHg3YywweDAwLDB4ZGMsMHgwNCwweDNiLDB4MDAsMHg2ZCwweGYwLDB4MDMsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGFmZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YTgsMHgwMCwweGZhLDB4ODAsMHgzYSwweDAwIH0gfSwKK3sgIDE2LCAweGIwMDAsIDAsIHsweDJjLDB4YTAsMHgwYiwweDIwLDB4MDIsMHhjYiwweDYyLDB4M2UsMHg1MCwweDBlLDB4ODgsMHgwMywweDIwLDB4MDAsMHhkOSwweDEwIH0gfSwKK3sgIDE2LCAweGIwMTAsIDAsIHsweDNlLDB4NzAsMHg4YywweDgwLDB4MzMsMHhlYywweDgwLDB4ZDgsMHg0MCwweDNhLDB4MDIsMHgwZCwweGIwLDB4MDMsMHgxMCwweDA0IH0gfSwKK3sgIDE2LCAweGIwMjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDAxLDB4MGMsMHgwMCwweDM5LDB4ODAsMHgyMiwweGMwIH0gfSwKK3sgIDE2LCAweGIwMzAsIDAsIHsweDBjLDB4OWQsMHg4MiwweDJjLDB4MTAsMHhkMCwweDQwLDB4MmUsMHhhMCwweDA4LDB4YjgsMHgwMywweDRlLDB4MDIsMHg4YSwweDQwIH0gfSwKK3sgIDE2LCAweGIwNDAsIDAsIHsweDBlLDB4YTAsMHgwZCwweGIwLDB4MDMsMHgzZCwweDAwLDB4ZDAsMHg5MCwweDM2LDB4MTAsMHgwYiwweGYwLDB4MDIsMHhiMiwweDAwIH0gfSwKK3sgIDE2LCAweGIwNTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMCwweGIxLDB4MDAsMHg2MCwweGMwIH0gfSwKK3sgIDE2LCAweGIwNjAsIDAsIHsweDhhLDB4MTgsMHgwMiwweDhjLDB4MDgsMHg4MCwweDQwLDB4MGMsMHhhMCwweDAyLDB4MzAsMHgwMiwweGNlLDB4MDAsMHg4MiwweDQ4IH0gfSwKK3sgIDE2LCAweGIwNzAsIDAsIHsweDJjLDB4ODAsMHgyYiwweDMwLDB4MDYsMHg4YywweDAwLDB4ODEsMHgwMiwweDIwLDB4OTAsMHgwOSwweGIwLDB4MDIsMHgzOCwweDAwIH0gfSwKK3sgIDE2LCAweGIwODAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAxLDB4MTIsMHgwMCwweGI2LDB4OTAsMHhhMywweDMwIH0gfSwKK3sgIDE2LCAweGIwOTAsIDAsIHsweDA4LDB4ZTgsMHgyMiwweGIyLDB4MTQsMHg4NywweDgwLDB4MmQsMHg2MCwweDA4LDB4NDksMHgxMiwweDEyLDB4NjEsMHg5NSwweDkwIH0gfSwKK3sgIDE2LCAweGIwYTAsIDAsIHsweDJkLDB4NjEsMHgwYSwweDQ4LDB4MTYsMHgxZSwweDgwLDB4OTUsMHg4MCwweDI1LDB4MjAsMHgwYiwweDc4LDB4MDIsMHg4OCwweDAwIH0gfSwKK3sgIDE2LCAweGIwYjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweGYxLDB4MDAsMHgyOCwweDhjIH0gfSwKK3sgIDE2LCAweGIwYzAsIDAsIHsweDhlLDB4MTAsMHgwMywweDg0LDB4ODAsMHg4MCwweDAwLDB4MmMsMHgwMiwweDBhLDB4OWEsMHgwMiwweGU0LDB4MDAsMHhkMCwweDAwIH0gfSwKK3sgIDE2LCAweGIwZDAsIDAsIHsweDNlLDB4ODAsMHgwYiwweDkxLDB4MDMsMHg4ZSwweDgwLDB4YzIsMHgwOCwweDM4LDB4ODAsMHgwZCwweGIwLDB4MDMsMHgxMiwweDAyIH0gfSwKK3sgIDE2LCAweGIwZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDFkLDB4YjAsMHgwMCwweGY2LDB4MDAsMHgzZiwweDQ0IH0gfSwKK3sgIDE2LCAweGIwZjAsIDAsIHsweDBmLDB4MjEsMHgxMywweDc4LDB4MDAsMHhmZiwweDAwLDB4M2QsMHhjMCwweDBmLDB4ZTAsMHgwMywweDc4LDB4MDAsMHhlZiwweDA0IH0gfSwKK3sgIDE2LCAweGIxMDAsIDAsIHsweDNmLDB4NDAsMHg4ZCwweGU4LDB4MDMsMHhkYywweDA0LDB4ZjYsMHgwMCwweDNmLDB4MDAsMHgwZiwweGYwLDB4ODMsMHhkMCwweDA2IH0gfSwKK3sgIDE2LCAweGIxMTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZTgsMHgwMCwweGU4LDB4ODAsMHgzMiwweDQwIH0gfSwKK3sgIDE2LCAweGIxMjAsIDAsIHsweDBmLDB4ODgsMHgwYiwweDI4LDB4MDAsMHg3OCwweDAyLDB4M2UsMHg4MCwweDBlLDB4MjgsMHgwMywweDI4LDB4MDAsMHhjYSwweDgwIH0gfSwKK3sgIDE2LCAweGIxMzAsIDAsIHsweDMyLDB4MDAsMHgwZiwweGEwLDB4MDMsMHhlYywweDAwLDB4YzksMHg4MCwweDMyLDB4ODAsMHgwZiwweGIwLDB4MDMsMHgyYSwweDAwIH0gfSwKK3sgIDE2LCAweGIxNDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDExLDB4OGMsMHgwMCwweDhmLDB4MDAsMHhhMSwweDgwIH0gfSwKK3sgIDE2LCAweGIxNTAsIDAsIHsweDBiLDB4NzAsMHg0MiwweDE0LDB4MDAsMHhiNywweDAwLDB4MmQsMHg0MSwweDBiLDB4NTAsMHg0MiwweDE0LDB4MDAsMHhhNSwweDAwIH0gfSwKK3sgIDE2LCAweGIxNjAsIDAsIHsweGExLDB4YzAsMHgwYiwweDUwLDB4MDIsMHhmYywweDgwLDB4YTUsMHgwMCwweDIxLDB4MDAsMHgwYiwweGYyLDB4MDIsMHgxMiwweDA0IH0gfSwKK3sgIDE2LCAweGIxNzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4YmEsMHgwMCwweGE0LDB4ODAsMHgyOSwweDMwIH0gfSwKK3sgIDE2LCAweGIxODAsIDAsIHsweDRiLDB4NDgsMHgwNiwweDUyLDB4MDgsMHhiNCwweDgwLDB4MmQsMHgyMCwweDBiLDB4NDgsMHg0MiwweDMyLDB4MDAsMHg4NCwweDgwIH0gfSwKK3sgIDE2LCAweGIxOTAsIDAsIHsweDIxLDB4MjAsMHgwYiwweDQ4LDB4MTIsMHhkZSwweDQwLDB4ODYsMHg4MSwweDI5LDB4YTAsMHgwYiwweDc4LDB4MGEsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweGIxYTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE0LDB4Y2MsMHgwMCwweDgzLDB4MDUsMHgyMCwweGUwIH0gfSwKK3sgIDE2LCAweGIxYjAsIDAsIHsweDBiLDB4MzQsMHgwMiwweDZjLDB4MTAsMHhiMywweDAwLDB4MmMsMHhjMCwweDBiLDB4MzYsMHg0YSwweDBkLDB4MGQsMHhhMywweDAwIH0gfSwKK3sgIDE2LCAweGIxYzAsIDAsIHsweDIwLDB4YzAsMHgwYiwweDM0LDB4ODIsMHhjYywweDAyLDB4YTIsMHgwMCwweDI4LDB4MDAsMHgwYiwweDMwLDB4MDIsMHgxMiwweDA0IH0gfSwKK3sgIDE2LCAweGIxZDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTksMHgyMCwweGVhLDB4NDAsMHgzMCwweGEwIH0gfSwKK3sgIDE2LCAweGIxZTAsIDAsIHsweDA3LDB4YTAsMHg0MywweDY5LDB4NDAsMHhmYSwweDAwLDB4M2MsMHg4MCwweDBmLDB4YTAsMHgwMywweDA4LDB4NDAsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGIxZjAsIDAsIHsweDMwLDB4YTAsMHgwZiwweGE0LDB4MDMsMHhlOCwweDAwLDB4Y2UsMHgwMCwweDNiLDB4OTgsMHgwZiwweGEwLDB4MDMsMHgzYSwweDA0IH0gfSwKK3sgIDE2LCAweGIyMDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4ZDIsMHgwMCwweGZjLDB4MDgsMHgzZiwweDAwIH0gfSwKK3sgIDE2LCAweGIyMTAsIDAsIHsweDBiLDB4YzIsMHgwMywweGIwLDB4MDAsMHhmYywweDAwLDB4M2YsMHgwMCwweDBmLDB4YzAsMHgwMywweGYwLDB4MDAsMHhmYywweDAwIH0gfSwKK3sgIDE2LCAweGIyMjAsIDAsIHsweDNmLDB4MDQsMHgwZiwweGMwLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweGI2LDB4MDIsMHgwZiwweDgwLDB4MDMsMHhkMiwweDAwIH0gfSwKK3sgIDE2LCAweGIyMzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGQ5LDB4MDAsMHgzZSwweDY4IH0gfSwKK3sgIDE2LCAweGIyNDAsIDAsIHsweDRjLDB4OTEsMHgwMSwweGU0LDB4MDgsMHhjOSwweDAwLDB4M2UsMHg0MCwweDJjLDB4OTIsMHgwMywweGU0LDB4MDIsMHhjOSwweGEwIH0gfSwKK3sgIDE2LCAweGIyNTAsIDAsIHsweDNlLDB4NzAsMHgwZSwweDkwLDB4MDMsMHhjNiwweDQyLDB4YzksMHgwMCwweDNlLDB4NDAsMHgwZiwweDEwLDB4MDMsMHgwMiwweDA0IH0gfSwKK3sgIDE2LCAweGIyNjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4ODYsMHgwZSwweDYwIH0gfSwKK3sgIDE2LCAweGIyNzAsIDAsIHsweDA4LDB4OTgsMHgwMiwweGU0LDB4MDgsMHg4OSwweDEwLDB4MmUsMHg2MCwweDA4LDB4OTAsMHgwMiwweGU0LDB4MDAsMHg4OSwweDBjIH0gfSwKK3sgIDE2LCAweGIyODAsIDAsIHsweDJlLDB4NjAsMHgwOCwweDkwLDB4MDIsMHhlNiwweDg4LDB4ODksMHgwMCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhhMCwweDAwIH0gfSwKK3sgIDE2LCAweGIyOTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweDlkLDB4MTAsMHgyZiwweDQwIH0gfSwKK3sgIDE2LCAweGIyYTAsIDAsIHsweDI4LDB4ZDAsMHgwNiwweGY0LDB4MDIsMHhhZCwweDAwLDB4MmYsMHg2MCwweDA4LDB4ZDAsMHgwMiwweGY0LDB4MDAsMHg4ZCwweDAwIH0gfSwKK3sgIDE2LCAweGIyYjAsIDAsIHsweDJmLDB4NDAsMHgwYSwweGQwLDB4MDIsMHhlNCwweDAwLDB4ODksMHgwMCwweDJlLDB4NjAsMHgwYiwweDkwLDB4MDIsMHgwNiwweDAwIH0gfSwKK3sgIDE2LCAweGIyYzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MzQsMHgwMCwweDg1LDB4MDAsMHgyZCwweDQwIH0gfSwKK3sgIDE2LCAweGIyZDAsIDAsIHsweDA4LDB4NTgsMHgwMiwweGQ0LDB4MDAsMHhhNSwweDAyLDB4MmQsMHg0MCwweDA4LDB4NTAsMHgwMCwweGQ0LDB4MDAsMHg4NSwweDAwIH0gfSwKK3sgIDE2LCAweGIyZTAsIDAsIHsweDJkLDB4NDAsMHgwOCwweDU0LDB4MDIsMHhjNCwweDgwLDB4ODEsMHgwMCwweDJjLDB4NjAsMHgwYiwweDE0LDB4MDIsMHg4MiwweDAxIH0gfSwKK3sgIDE2LCAweGIyZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGQ4LDB4NTIsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGIzMDAsIDAsIHsweDBjLDB4MDUsMHgwMywweGUxLDB4NDAsMHhlOCwweDA0LDB4M2UsMHgxNCwweDBjLDB4ODUsMHgwMywweGUxLDB4NDAsMHhjOCwweDAwIH0gfSwKK3sgIDE2LCAweGIzMTAsIDAsIHsweDNlLDB4MTQsMHgwZSwweGMwLDB4MDMsMHhlMCwweDAwLDB4YzAsMHgwMiwweDNlLDB4MDAsMHg0ZiwweDgwLDB4MjMsMHgyZSwweDAzIH0gfSwKK3sgIDE2LCAweGIzMjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDFkLDB4ZjQsMHgwMCwweGY5LDB4MDEsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweGIzMzAsIDAsIHsweDRmLDB4OTAsMHgxMywweGU0LDB4MDAsMHhkOSwweDAwLDB4MWUsMHg0MCwweDBmLDB4OTAsMHgwMywweGM0LDB4MTAsMHhmMSwweDAwIH0gfSwKK3sgIDE2LCAweGIzNDAsIDAsIHsweDFlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNCwweGUwLDB4ZmQsMHgyOCwweDNmLDB4NDAsMHgwZiwweDk0LDB4MDMsMHhlNiwweDA2IH0gfSwKK3sgIDE2LCAweGIzNTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4YTQsMHgwMCwweGZkLDB4MDAsMHgzZiwweDQwIH0gfSwKK3sgIDE2LCAweGIzNjAsIDAsIHsweDRkLDB4NTAsMHgwMiwweGU0LDB4MDAsMHg5NSwweDA0LDB4MzMsMHg0MCwweDI4LDB4ZDAsMHgwMywweGY0LDB4MDAsMHhmZCwweDAwIH0gfSwKK3sgIDE2LCAweGIzNzAsIDAsIHsweDMzLDB4NDAsMHgwZiwweDkxLDB4MDMsMHgzNCwweDAwLDB4Y2QsMHg0MCwweDMzLDB4NDAsMHgwZiwweDk4LDB4ODEsMHgwNiwweDAwIH0gfSwKK3sgIDE2LCAweGIzODAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDEwLDB4ZTAsMHgxMCwweGI4LDB4MDAsMHgyZSwweDAwIH0gfSwKK3sgIDE2LCAweGIzOTAsIDAsIHsweDBiLDB4ODAsMHgwMiwweGUwLDB4MTAsMHhiOCwweDAwLDB4MjIsMHgwMCwweDA4LDB4ODAsMHgwMiwweGUwLDB4MDAsMHhiOCwweDAwIH0gfSwKK3sgIDE2LCAweGIzYTAsIDAsIHsweDIyLDB4MDAsMHgwYiwweDg4LDB4MDMsMHhjMiwweDgwLDB4ODgsMHg4MCwweDIyLDB4MDAsMHgwYiwweDhjLDB4MDIsMHgwZSwweDA0IH0gfSwKK3sgIDE2LCAweGIzYjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4YzQsMHgwMCwweGIxLDB4MDAsMHgyYywweGMwIH0gfSwKK3sgIDE2LCAweGIzYzAsIDAsIHsweDBiLDB4MTAsMHgwMiwweGM0LDB4MDAsMHhiYiwweDAwLDB4MjIsMHg0MCwweDA4LDB4MTAsMHgwMiwweGM0LDB4MDEsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweGIzZDAsIDAsIHsweDIwLDB4NDAsMHgxYiwweDkwLDB4MDIsMHgwNCwweDIyLDB4ODksMHgwMCwweDIwLDB4NjAsMHgwYiwweDEyLDB4ODIsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweGIzZTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4YTQsMHg0NCwweGI5LDB4MDAsMHgyZSwweGMwIH0gfSwKK3sgIDE2LCAweGIzZjAsIDAsIHsweDRiLDB4OTAsMHgwMiwweGU0LDB4MTAsMHhiOSwweDAyLDB4MDIsMHg0MCwweDA4LDB4OTEsMHg0MiwweGU0LDB4MDAsMHhiOSwweDgwIH0gfSwKK3sgIDE2LCAweGI0MDAsIDAsIHsweDIyLDB4NDAsMHgwYiwweDkyLDB4MDIsMHhjNCwweDAwLDB4OTksMHg0MCwweDIyLDB4NDAsMHg0YiwweDkwLDB4MTIsMHgwNiwweDA0IH0gfSwKK3sgIDE2LCAweGI0MTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTYsMHgwMCwweGI5LDB4MDEsMHgzZSwweDU4IH0gfSwKK3sgIDE2LCAweGI0MjAsIDAsIHsweDBkLDB4OTAsMHgwMywweGU2LDB4MDAsMHhkMSwweDAwLDB4MzIsMHg2MCwweDBjLDB4OTgsMHgwMiwweGU2LDB4NDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGI0MzAsIDAsIHsweGIyLDB4NDAsMHgwZiwweDE4LDB4MDMsMHgyNCwweDAwLDB4YzksMHg4MCwweDMyLDB4NTAsMHgwZiwweDkwLDB4MjMsMHgyOCwweDA0IH0gfSwKK3sgIDE2LCAweGI0NDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAxLDB4YTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQyIH0gfSwKK3sgIDE2LCAweGI0NTAsIDAsIHsweDBiLDB4OTAsMHgwMywweGU3LDB4MDgsMHhmOSwweDAwLDB4YmUsMHg0OCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGI0NjAsIDAsIHsweDNlLDB4NDAsMHgwZiwweDk4LDB4MDMsMHhhNCwweDAwLDB4ZTksMHhhMCwweGJlLDB4NDAsMHgwZiwweDEwLDB4MGIsMHg0YSwweDAwIH0gfSwKK3sgIDE2LCAweGI0NzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGQ4LDB4MDEsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGI0ODAsIDAsIHsweDBmLDB4ODAsMHg4YiwweDIwLDB4MDAsMHhmOCwweDIwLDB4M2UsMHgwMSwweDBmLDB4ODEsMHgwMywweGUwLDB4MDAsMHhmOCwweDA4IH0gfSwKK3sgIDE2LCAweGI0OTAsIDAsIHsweDNhLDB4MDAsMHgwYywweDgwLDB4MDMsMHhlMCwweDAwLDB4ZDgsMHg0MCwweDMyLDB4MDAsMHgwZiwweDgwLDB4MTMsMHgwYSwweDA0IH0gfSwKK3sgIDE2LCAweGI0YTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4MjgsMHgwMCwweDhhLDB4ODAsMHgyZiwweDkxIH0gfSwKK3sgIDE2LCAweGI0YjAsIDAsIHsweDBiLDB4ZWUsMHgwMiwweDI4LDB4MDEsMHhiZSwweDAwLDB4MjAsMHg4MCwweDBiLDB4YTAsMHgwMiwweGVhLDB4ODAsMHhiNiwweDQ4IH0gfSwKK3sgIDE2LCAweGI0YzAsIDAsIHsweDIyLDB4ODAsMHgwZCwweGEwLDB4MDIsMHhmYSwweDAyLDB4ODYsMHg0MSwweGEzLDB4YTYsMHgwYiwweGEwLDB4MDMsMHgwYSwweDAwIH0gfSwKK3sgIDE2LCAweGI0ZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweDkzLDB4ODAsMHgyYywweGMwIH0gfSwKK3sgIDE2LCAweGI0ZTAsIDAsIHsweDBiLDB4MzAsMHgwMiwweDBjLDB4MTAsMHhiMywweDAwLDB4MjgsMHhjMCwweDBiLDB4MzgsMHgwMiwweGNjLDB4MDAsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweGI0ZjAsIDAsIHsweDI4LDB4YzAsMHgwOSwweDMwLDB4MDIsMHhjNiwweDAxLDB4ODMsMHg2MCwweDIwLDB4NzAsMHgwYiwweDMwLDB4MGEsMHg0YSwweDAwIH0gfSwKK3sgIDE2LCAweGI1MDAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDAxLDB4MmUsMHg4OCwweDg1LDB4MDgsMHgyZCwweDgwIH0gfSwKK3sgIDE2LCAweGI1MTAsIDAsIHsweDRiLDB4ZjgsMHgwNiwweDFjLDB4ODAsMHhiNywweDAwLDB4MjEsMHhjMCwweDBiLDB4NTAsMHgwMiwweGQ0LDB4MDAsMHhiNiwweDAwIH0gfSwKK3sgIDE2LCAweGI1MjAsIDAsIHsweDI5LDB4NjAsMHgwOSwweDcwLDB4MDIsMHhkMCwweGEwLDB4OGQsMHgwMCwweDIxLDB4NDAsMHgwYiwweDMyLDB4MDIsMHgyOCwweDAwIH0gfSwKK3sgIDE2LCAweGI1MzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgwMCwweGQ1LDB4ODAsMHgzZCwweGUwIH0gfSwKK3sgIDE2LCAweGI1NDAsIDAsIHsweDhmLDB4NzgsMHgwMywweDFlLDB4ODQsMHhiNywweDgyLDB4M2QsMHg2MCwweDBmLDB4NTksMHgwMywweGRlLDB4MDAsMHhmNywweDgwIH0gfSwKK3sgIDE2LCAweGI1NTAsIDAsIHsweDI5LDB4NjAsMHgxNSwweDc4LDB4MDMsMHhkZSwweDAwLDB4YzcsMHg4MCwweDMxLDB4NjAsMHgwZiwweDdjLDB4MDMsMHg2YSwweDAyIH0gfSwKK3sgIDE2LCAweGI1NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDFkLDB4YWMsMHg0MCwweGU5LDB4MDAsMHgzZSwweDgwIH0gfSwKK3sgIDE2LCAweGI1NzAsIDAsIHsweDBmLDB4YTAsMHgwMywweGVkLDB4MzAsMHhmYiwweDAwLDB4MzYsMHhjMSwweDBmLDB4OTYsMHgwMywweGU0LDB4MDAsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweGI1ODAsIDAsIHsweDM0LDB4NDAsMHgwZiwweGI3LDB4ODMsMHhlYywweDQwLDB4MjEsMHgwMCwweDNlLDB4NDAsMHgwZiwweGIwLDB4MDMsMHhjMiwweDA2IH0gfSwKK3sgIDE2LCAweGI1OTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHgwMCwweGZmLDB4ODEsMHgzMywweGUwIH0gfSwKK3sgIDE2LCAweGI1YTAsIDAsIHsweDBmLDB4ZjksMHgwMywweGRlLDB4MjAsMHhjZiwweDgxLDB4M2YsMHhlMCwweDA3LDB4NzgsMHgwMywweDNlLDB4MDAsMHhmZiwweDgwIH0gfSwKK3sgIDE2LCAweGI1YjAsIDAsIHsweDNmLDB4ZTAsMHgwNCwweGY4LDB4MTMsMHhmZSwweDAyLDB4ZGUsMHg4MCwweDMzLDB4NjAsMHgwZiwweGY4LDB4MDMsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGI1YzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4OWMsMHgwMCwweGI3LDB4MDAsMHgyMSwweGM0IH0gfSwKK3sgIDE2LCAweGI1ZDAsIDAsIHsweDBiLDB4NWEsMHgwMiwweGRjLDB4NDgsMHg4NiwweDUwLDB4MmQsMHhjMCwweDBiLDB4MzEsMHgwMiwweDk0LDB4NjAsMHhiNCwweDE4IH0gfSwKK3sgIDE2LCAweGI1ZTAsIDAsIHsweDJkLDB4NDAsMHg0OCwweDcwLDB4MDIsMHhlOCwweDAwLDB4YTUsMHgxMCwweDIxLDB4NDAsMHgwYiwweDcxLDB4MDIsMHgyYSwweDA0IH0gfSwKK3sgIDE2LCAweGI1ZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwMCwweGJkLDB4MDAsMHgyMSwweDQyIH0gfSwKK3sgIDE2LCAweGI2MDAsIDAsIHsweDBiLDB4NzAsMHgwMiwweGZjLDB4MDIsMHg4NSwweDAwLDB4MjUsMHg0MCwweDBiLDB4NTAsMHgwMiwweDljLDB4MDAsMHhiNywweDAwIH0gfSwKK3sgIDE2LCAweGI2MTAsIDAsIHsweDJmLDB4NDAsMHgyOCwweDcxLDB4MDIsMHhkYywweDAwLDB4YTYsMHgwMCwweDIxLDB4YzAsMHgwYiwweDcwLDB4MDIsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGI2MjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDE0LDB4NmQsMHg4MCwweGIxLDB4MjAsMHhhMCwweDUwIH0gfSwKK3sgIDE2LCAweGI2MzAsIDAsIHsweDBiLDB4YjIsMHgwNiwweGNlLDB4MDAsMHhhMCwweDM0LDB4MmUsMHhmMCwweDBiLDB4MTgsMHgwMiwweDg1LDB4MjAsMHhiMywweDRhIH0gfSwKK3sgIDE2LCAweGI2NDAsIDAsIHsweDJjLDB4NTQsMHg4OCwweDM4LDB4MDIsMHhjYywweDEwLDB4YTEsMHgwMCwweDIwLDB4YjAsMHgwYiwweDMwLDB4MDIsMHgwOCwweDA0IH0gfSwKK3sgIDE2LCAweGI2NTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmUsMHg4MCwweGYzLDB4MDgsMHgxMCwweDU0IH0gfSwKK3sgIDE2LCAweGI2NjAsIDAsIHsweDBiLDB4ODgsMHgxMywweGZmLDB4MDAsMHhjMCwweDgwLDB4M2UsMHg2NCwweDBmLDB4YjQsMHg4MywweDA3LDB4MDAsMHhmOSwweGMwIH0gfSwKK3sgIDE2LCAweGI2NzAsIDAsIHsweDNlLDB4ZjAsMHgwYywweGZjLDB4MTMsMHhmNCwweDAwLDB4ZWEsMHgwMCwweDMyLDB4NzAsMHgwZiwweGYwLDB4MGIsMHgyYSwweDA0IH0gfSwKK3sgIDE2LCAweGI2ODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4ZWMsMHgwMCwweGY5LDB4MDAsMHgzZSwweDEwIH0gfSwKK3sgIDE2LCAweGI2OTAsIDAsIHsweDA3LDB4OTEsMHgwMywweGVjLDB4YzAsMHg1OCwweDAwLDB4M2UsMHg0NCwweDBmLDB4OTIsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGI2YTAsIDAsIHsweDNlLDB4YzAsMHg4ZiwweGIzLDB4MDMsMHhlMCwweDAwLDB4YmIsMHgwMCwweGJlLDB4NDQsMHgwZiwweGIwLDB4MDMsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGI2YjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMiwweGNkLDB4MDQsMHgzMywweGUwIH0gfSwKK3sgIDE2LCAweGI2YzAsIDAsIHsweDBjLDB4YzAsMHgwMywweDNjLDB4MDgsMHhmZSwweDAwLDB4MzMsMHg2MCwweDJjLDB4ZDAsMHgwMiwweGI0LDB4ODAsMHhjZiwweDAwIH0gfSwKK3sgIDE2LCAweGI2ZDAsIDAsIHsweDNmLDB4NTIsMHgwNywweGYwLDB4MTMsMHhmYywweDAwLDB4Y2UsMHgxMCwweDMzLDB4NDIsMHgwYywweGIwLDB4MDMsMHhjMCwweDQ0IH0gfSwKK3sgIDE2LCAweGI2ZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MSwweDA0LDB4NmMsMHgwMCwweDg5LDB4MDAsMHgyYSwweGIwIH0gfSwKK3sgIDE2LCAweGI2ZjAsIDAsIHsweDA4LDB4ODgsMHgwMiwweDJjLDB4MDAsMHhiYSwweDAwLDB4MzYsMHg0NCwweDA4LDB4OTAsMHgwMCwweDI2LDB4MDAsMHhkYiwweGMwIH0gfSwKK3sgIDE2LCAweGI3MDAsIDAsIHsweDJlLDB4NDAsMHgwYiwweGIwLDB4MDIsMHhlYywweDAwLDB4ODMsMHhjMCwweDI4LDB4NDAsMHgwYSwweGIwLDB4MDIsMHhlMCwweDQwIH0gfSwKK3sgIDE2LCAweGI3MTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweDhiLDB4MDAsMHgyMiwweDA4IH0gfSwKK3sgIDE2LCAweGI3MjAsIDAsIHsweDFhLDB4YTIsMHgwMiwweDJjLDB4MTAsMHhiOSwweDIwLDB4MjIsMHg0MCwweDA4LDB4MzAsMHgwMiwweDJjLDB4MDQsMHhhYSwweDU0IH0gfSwKK3sgIDE2LCAweGI3MzAsIDAsIHsweDJlLDB4YzAsMHgwYiwweGIwLDB4MTIsMHhjYywweDAwLDB4OGIsMHgwOCwweDIyLDB4NDAsMHgwOCwweGIwLDB4MDIsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGI3NDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MGMsMHgwMCwweDgzLDB4MDQsMHgyYSwweDAwIH0gfSwKK3sgIDE2LCAweGI3NTAsIDAsIHsweDBhLDB4MDgsMHg4MiwweDBjLDB4MDAsMHhiOCwweDAwLDB4NjQsMHg0MCwweDA4LDB4MzAsMHgwMiwweGE0LDB4MDAsMHhiMCwweDAwIH0gfSwKK3sgIDE2LCAweGI3NjAsIDAsIHsweDJjLDB4YzAsMHg4YiwweDMwLDB4MTAsMHhjOCwweDAyLDB4OGIsMHgwMCwweDJhLDB4NDAsMHgwYSwweDMwLDB4MDIsMHhjMiwweDAxIH0gfSwKK3sgIDE2LCAweGI3NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGM5LDB4MDAsMHgzMiwweDAwIH0gfSwKK3sgIDE2LCAweGI3ODAsIDAsIHsweDFhLDB4ODIsMHgwMywweDNjLDB4MDAsMHhmOSwweDAwLDB4MzIsMHg0MCwweDBjLDB4ZDEsMHgwMywweGFjLDB4MDAsMHhlYiwweDAwIH0gfSwKK3sgIDE2LCAweGI3OTAsIDAsIHsweDNlLDB4NDAsMHgwZiwweGYwLDB4MDMsMHhlZCwweDAwLDB4YzMsMHgwMCwweDMyLDB4YzAsMHg4YywweGIwLDB4MDMsMHhjMCwweDAzIH0gfSwKK3sgIDE2LCAweGI3YTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE5LDB4ZmMsMHgwMCwweGY1LDB4MDAsMHgzZiwweDAwIH0gfSwKK3sgIDE2LCAweGI3YjAsIDAsIHsweDBkLDB4ODAsMHg0YiwweGZjLDB4MDAsMHg3YywweDAwLDB4M2YsMHg0MCwweDBmLDB4ZDIsMHgwYiwweDc0LDB4MDAsMHhkZiwweDAwIH0gfSwKK3sgIDE2LCAweGI3YzAsIDAsIHsweDFkLDB4NDAsMHg4ZiwweGYwLDB4MDMsMHhmYywweGEwLDB4ZmYsMHgwMCwweDNmLDB4ODAsMHgwZiwweGYwLDB4MDMsMHhlOCwweDA2IH0gfSwKK3sgIDE2LCAweGI3ZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHgwMCwweGRmLDB4ODQsMHgzYiwweGUwIH0gfSwKK3sgIDE2LCAweGI3ZTAsIDAsIHsweDBmLDB4ZjgsMHgwYiwweDNlLDB4MDAsMHhlYywweDgwLDB4MzMsMHhlMSwweDBjLDB4MzAsMHgwMywweDNjLDB4ODAsMHhjZiwweDQ4IH0gfSwKK3sgIDE2LCAweGI3ZjAsIDAsIHsweDM3LDB4YzAsMHgwZSwweDQwLDB4MDMsMHhlMCwweGMwLDB4YzcsMHg5MSwweGIzLDB4MDQsMHgwYywweGYwLDB4MDMsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweGI4MDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4ZWYsMHgwNCwweDhiLDB4ODAsMHgyMiwweDQxIH0gfSwKK3sgIDE2LCAweGI4MTAsIDAsIHsweDBiLDB4YjAsMHg4MiwweDJlLDB4MDAsMHg4OCwweDgwLDB4YTIsMHhlMCwweDBhLDB4YTIsMHg5MiwweGFkLDB4ODAsMHg4NywweDQyIH0gfSwKK3sgIDE2LCAweGI4MjAsIDAsIHsweDIzLDB4ZDgsMHg4YSwweGFkLDB4MDIsMHhlMCwweGMwLDB4OGIsMHgwMCwweDIwLDB4NGMsMHg0OCwweGE0LDB4MDIsMHgyMCwweDA0IH0gfSwKK3sgIDE2LCAweGI4MzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHg1OCwweGJiLDB4MDAsMHgyOCwweDgwIH0gfSwKK3sgIDE2LCAweGI4NDAsIDAsIHsweDBiLDB4YjIsMHg0MiwweDI0LDB4MDAsMHhhOCwweDAwLDB4MmEsMHhjMCwweDBhLDB4MTAsMHgwMiwweDA0LDB4NjAsMHhhMywweDIwIH0gfSwKK3sgIDE2LCAweGI4NTAsIDAsIHsweDI0LDB4ZDIsMHgwOCwweDAwLDB4NDIsMHg4YywweDgzLDB4OWIsMHgwMSwweDIwLDB4NDksMHgwOCwweDMzLDB4YzIsMHgyMiwweDAxIH0gfSwKK3sgIDE2LCAweGI4NjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDE1LDB4YWMsMHgwMCwweGFiLDB4ODgsMHgyMiwweGEwIH0gfSwKK3sgIDE2LCAweGI4NzAsIDAsIHsweDBiLDB4YjgsMHgwMiwweDI2LDB4MGMsMHhhOCwweDAwLDB4MmEsMHhjMCwweDBhLDB4OTIsMHgwMiwweGE0LDB4MDAsMHhhYiwweDA2IH0gfSwKK3sgIDE2LCAweGI4ODAsIDAsIHsweDIyLDB4YzAsMHgwYSwweGIwLDB4MDIsMHhlOCwweDAwLDB4OWIsMHgwMCwweDAyLDB4NDAsMHgwOCwweGEwLDB4NDIsMHgzMCwweDA0IH0gfSwKK3sgIDE2LCAweGI4OTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWMsMHgwMCwweGQzLDB4ODAsMHgzYSwweGUwIH0gfSwKK3sgIDE2LCAweGI4YTAsIDAsIHsweDBmLDB4MTgsMHgwMSwweDA2LDB4MDAsMHhlOCwweDMwLDB4MzgsMHg2NiwweDBlLDB4YjgsMHgwMywweDJhLDB4NDAsMHhlYiwweDAwIH0gfSwKK3sgIDE2LCAweGI4YjAsIDAsIHsweDM2LDB4YzEsMHgwZSwweDk2LDB4MDMsMHhlMiwweDgwLDB4ZGEsMHgwOCwweDMyLDB4ODAsMHgyYywweGJiLDB4MDMsMHgxMCwweDA0IH0gfSwKK3sgIDE2LCAweGI4YzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4OWMsMHgwMCwweGRmLDB4MDAsMHgzZiwweGMwIH0gfSwKK3sgIDE2LCAweGI4ZDAsIDAsIHsweDBmLDB4ZDAsMHgwMywweGY0LDB4MDAsMHhkYywweDgwLDB4MzcsMHg2MCwweDBmLDB4ZTgsMHgwMywweGZhLDB4MDAsMHhkZiwweDAxIH0gfSwKK3sgIDE2LCAweGI4ZTAsIDAsIHsweDNmLDB4YzAsMHgwZiwweGMwLDB4NDMsMHhlNiwweDRjLDB4ZWYsMHhhMCwweDNmLDB4NDQsMHgwZiwweGEwLDB4MDMsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGI4ZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHg0MCwweGRiLDB4MDAsMHgzNiwweDgwIH0gfSwKK3sgIDE2LCAweGI5MDAsIDAsIHsweDBjLDB4OTgsMHgwMywweDI2LDB4MDAsMHhmOCwweDAwLDB4M2UsMHhjMCwweDBlLDB4MTgsMHgwMywweDg0LDB4MDIsMHhlMywweDAxIH0gfSwKK3sgIDE2LCAweGI5MTAsIDAsIHsweDM4LDB4YzEsMHgwZSwweGI0LDB4MDMsMHhhYywweDgwLDB4Y2EsMHgxOCwweDNhLDB4ZDAsMHgyYywweDMwLDB4MDMsMHgxMCwweDA0IH0gfSwKK3sgIDE2LCAweGI5MjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4M2YsMHg0MCwweGI5LDB4ODgsMHgyZSwweDgwIH0gfSwKK3sgIDE2LCAweGI5MzAsIDAsIHsweDA4LDB4YmMsMHgwMiwweGEzLDB4MDAsMHhiMCwweDAwLDB4MGUsMHhjMCwweDA4LDB4YjAsMHgwNiwweDIwLDB4MDAsMHg4ZiwweDA0IH0gfSwKK3sgIDE2LCAweGI5NDAsIDAsIHsweDIzLDB4YzEsMHgwOCwweGI5LDB4MTIsMHgyZiwweDAwLDB4ODMsMHg4MCwweDM2LDB4NDAsMHgwOCwweGFkLDB4MDIsMHgzMiwweDAwIH0gfSwKK3sgIDE2LCAweGI5NTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMCwweGIyLDB4MDAsMHgyYywweGMwIH0gfSwKK3sgIDE2LCAweGI5NjAsIDAsIHsweDA5LDB4MzIsMHgwMiwweDg0LDB4MDAsMHgzMywweDAwLDB4MmMsMHhiMiwweDBhLDB4MzYsMHgxMiwweDhjLDB4MDgsMHg5MywweDA1IH0gfSwKK3sgIDE2LCAweGI5NzAsIDAsIHsweDIwLDB4YzAsMHgwYiwweDE4LDB4MDIsMHhlZCwweDAwLDB4OTEsMHg4MCwweDZhLDB4MDAsMHgwOCwweDEwLDB4MDIsMHgzOCwweDAwIH0gfSwKK3sgIDE2LCAweGI5ODAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAxLDB4MWUsMHgwMCwweGI3LDB4ODAsMHgyZCwweGUwIH0gfSwKK3sgIDE2LCAweGI5OTAsIDAsIHsweDA5LDB4NzgsMHgwMiwweDk3LDB4NDAsMHhiNCwweDgwLDB4MmYsMHhhMCwweDA4LDB4ZTgsMHgwMiwweDBlLDB4NDAsMHg5NywweDgyIH0gfSwKK3sgIDE2LCAweGI5YTAsIDAsIHsweDIxLDB4ZTAsMHg5OCwweDY4LDB4ODIsMHgxYSwweDE4LDB4OWQsMHg5MCwweDJkLDB4YTEsMHgxOCwweDU4LDB4MDIsMHgwOCwweDAwIH0gfSwKK3sgIDE2LCAweGI5YjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHhjMCwweGYzLDB4MDAsMHgzZSwweGMwIH0gfSwKK3sgIDE2LCAweGI5YzAsIDAsIHsweDBkLDB4YjAsMHg0MywweDg0LDB4NDAsMHhmMCwweDAwLDB4M2MsMHg4MiwweDBlLDB4MzgsMHgxMiwweDhjLDB4NDQsMHhmMywweDMwIH0gfSwKK3sgIDE2LCAweGI5ZDAsIDAsIHsweGJhLDB4YzEsMHgxZSwweDEwLDB4NDcsMHg4ZSwweDIyLDB4ZDEsMHgxMCwweDM4LDB4MTgsMHgwYywweDMwLDB4ODMsMHgxMiwweDAyIH0gfSwKK3sgIDE2LCAweGI5ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDFkLDB4YmMsMHg0MCwweGZmLDB4MDAsMHgzZiwweGMwIH0gfSwKK3sgIDE2LCAweGI5ZjAsIDAsIHsweDBlLDB4ZTAsMHgwMywweGY0LDB4NDAsMHhmYywweDAwLDB4M2QsMHhjNCwweDBmLDB4ZDAsMHgwMSwweGY0LDB4NDEsMHhlZiwweDE4IH0gfSwKK3sgIDE2LCAweGJhMDAsIDAsIHsweDNmLDB4YzQsMHgxZiwweGYwLDB4MDMsMHhmOCwweDQ4LDB4ZWYsMHgxNCwweDMzLDB4ODAsMHgwZiwweGMxLDB4MDMsMHhkMCwweDA2IH0gfSwKK3sgIDE2LCAweGJhMTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZmMsMHg0MCwweGZiLDB4MDAsMHgzZSwweGMwIH0gfSwKK3sgIDE2LCAweGJhMjAsIDAsIHsweDBmLDB4OTgsMHgwMywweDI0LDB4MDAsMHhjYiwweDAwLDB4M2UsMHg0MCwweDBmLDB4YjAsMHgwMywweGE4LDB4MDAsMHhkYiwweDI4IH0gfSwKK3sgIDE2LCAweGJhMzAsIDAsIHsweDNlLDB4YzQsMHgxZiwweDkwLDB4MjMsMHhlYywweDAwLDB4Y2EsMHgwMCwweDMyLDB4ZTAsMHgwYywweDkwLDB4MDMsMHhlYSwweDAwIH0gfSwKK3sgIDE2LCAweGJhNDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDExLDB4OWMsMHg4MCwweGI3LDB4MDAsMHgyZCwweGMwIH0gfSwKK3sgIDE2LCAweGJhNTAsIDAsIHsweDRiLDB4NTAsMHg1MiwweDE0LDB4MDAsMHhkNCwweDAxLDB4MmQsMHg4MCwweDBiLDB4NjAsMHgwMiwweGQ4LDB4MDAsMHhhNywweDIwIH0gfSwKK3sgIDE2LCAweGJhNjAsIDAsIHsweDJkLDB4YzUsMHgwYiwweDQwLDB4MTYsMHhkYywweDAwLDB4ODQsMHgwMCwweDIzLDB4YzAsMHgwOCwweDQwLDB4MDIsMHhkMiwweDA0IH0gfSwKK3sgIDE2LCAweGJhNzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHg4MCwweGI3LDB4ODAsMHgyZCwweGUwIH0gfSwKK3sgIDE2LCAweGJhODAsIDAsIHsweDBiLDB4NzgsMHgwYSwweDk2LDB4MDAsMHg5NCwweDgwLDB4MmQsMHg2MCwweDFiLDB4NzgsMHgwNiwweGQyLDB4MDAsMHhhNywweDgwIH0gfSwKK3sgIDE2LCAweGJhOTAsIDAsIHsweDJkLDB4ZTAsMHgwYiwweDc4LDB4MjIsMHhkZSwweDAwLDB4ODcsMHg4MiwweDIxLDB4ZTAsMHgwOCwweDU4LDB4MDIsMHhmMCwweDAwIH0gfSwKK3sgIDE2LCAweGJhYTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE0LDB4Y2MsMHgwMCwweGIzLDB4ZTQsMHgyYywweGMwIH0gfSwKK3sgIDE2LCAweGJhYjAsIDAsIHsweDFiLDB4MjEsMHgwMiwweDgxLDB4MDAsMHg5MCwweDAwLDB4MmMsMHhjOCwweDBiLDB4MzksMHgwMiwweGNlLDB4MDAsMHhhMywweDAwIH0gfSwKK3sgIDE2LCAweGJhYzAsIDAsIHsweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhjZCwweDAwLDB4OGIsMHgyMCwweDIwLDB4ZjAsMHgwOCwweGIyLDB4MDIsMHhkMiwweDA0IH0gfSwKK3sgIDE2LCAweGJhZDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweGZlLDB4YTAsMHgzZiwweDgyIH0gfSwKK3sgIDE2LCAweGJhZTAsIDAsIHsweDBmLDB4ZTgsMHgwMywweDk4LDB4MzAsMHhkNiwweDAwLDB4M2YsMHhhMCwweDBmLDB4ZTAsMHgwMywweGJhLDB4YzAsMHhmYSwweDAwIH0gfSwKK3sgIDE2LCAweGJhZjAsIDAsIHsweDNlLDB4ODAsMHgwZiwweGVjLDB4MzMsMHhmOCwweDAyLDB4Y2UsMHgwMCwweGIzLDB4YjgsMHgyYywweGVjLDB4ODMsMHhmYSwweDA0IH0gfSwKK3sgIDE2LCAweGJiMDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4ZTAsMHgxOCwweGY4LDB4NDAsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGJiMTAsIDAsIHsweDBmLDB4ODAsMHgwMiwweDYwLDB4ODQsMHhmOCwweDA1LDB4MmUsMHgwNCwweDhmLDB4ODAsMHg0MSwweGUwLDB4MDAsMHg3OCwweDAyIH0gfSwKK3sgIDE2LCAweGJiMjAsIDAsIHsweDNlLDB4MDAsMHgwZiwweDgxLDB4ODMsMHhlMCwweDIwLDB4ZjgsMHgwMCwweGJlLDB4MDIsMHgwZiwweDgwLDB4MDMsMHhkMiwweDAwIH0gfSwKK3sgIDE2LCAweGJiMzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTYsMHgxOCwweGY5LDB4MjAsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweGJiNDAsIDAsIHsweDBmLDB4OWMsMHgwMywweGU0LDB4NDAsMHhjOSwweDAwLDB4MzIsMHg2MSwweDBjLDB4OTAsMHgxMywweGM0LDB4MDgsMHhjOSwweDAxIH0gfSwKK3sgIDE2LCAweGJiNTAsIDAsIHsweDNlLDB4NDEsMHgwZiwweDE4LDB4MDMsMHgyNCwweDAwLDB4YzksMHhhMCwweDMyLDB4NDAsMHgwZiwweDk4LDB4NDMsMHgwMiwweDA0IH0gfSwKK3sgIDE2LCAweGJiNjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NjUsMHgwMCwweGIxLDB4YzAsMHgyMiwweDQwIH0gfSwKK3sgIDE2LCAweGJiNzAsIDAsIHsweDBiLDB4OWMsMHgwMiwweGU3LDB4MTAsMHg4OSwweDAwLDB4MjgsMHg0NCwweDA4LDB4OTQsMHgyMiwweGU0LDB4MTAsMHg4OSwweDAwIH0gfSwKK3sgIDE2LCAweGJiODAsIDAsIHsweDJlLDB4NDAsMHgwYiwweDlmLDB4MjIsMHgyNiwweDYwLDB4ODksMHg4MCwweDIyLDB4NDAsMHgwYiwweDkxLDB4MGEsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGJiOTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHg4MCwweGI5LDB4MDAsMHgyZSwweGMwIH0gfSwKK3sgIDE2LCAweGJiYTAsIDAsIHsweDRiLDB4YjQsMHgwMiwweGU0LDB4MjAsMHg4OSwweDIwLDB4MjIsMHg0MCwweDA4LDB4OTQsMHgwMiwweGVjLDB4MDAsMHg4OSwweDAwIH0gfSwKK3sgIDE2LCAweGJiYjAsIDAsIHsweDJlLDB4NDEsMHgwYiwweDkwLDB4MDIsMHgwNCwweDAwLDB4ODksMHg0MCwweDIyLDB4NDAsMHgwYiwweDkwLDB4MDIsMHgwNiwweDAwIH0gfSwKK3sgIDE2LCAweGJiYzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDQsMHgwMCwweGIxLDB4MDQsMHgyMCwweDQwIH0gfSwKK3sgIDE2LCAweGJiZDAsIDAsIHsweDhiLDB4MTAsMHgwMiwweGU0LDB4MDUsMHg4MSwweDAwLDB4MjgsMHg0MCwweDI4LDB4MTIsMHgxMiwweGM0LDB4ODIsMHg4MSwweDIwIH0gfSwKK3sgIDE2LCAweGJiZTAsIDAsIHsweDJjLDB4NDgsMHgwYiwweDEyLDB4MGEsMHgwNCwweDgyLDB4ODEsMHgwMCwweDIwLDB4NDgsMHgwYiwweDEyLDB4MDIsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweGJiZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjgsMHhhMCwweGZhLDB4MDIsMHgzZSwweDE0IH0gfSwKK3sgIDE2LCAweGJjMDAsIDAsIHsweDBmLDB4ODUsMHgwMywweGUwLDB4MDAsMHhjOCwweDAwLDB4MzIsMHgwMCwweDBjLDB4ODUsMHgwMywweGMxLDB4NDAsMHhjOCwweDUzIH0gfSwKK3sgIDE2LCAweGJjMTAsIDAsIHsweDNlLDB4MTQsMHgwZiwweDgwLDB4MDMsMHgwMSwweDQ4LDB4YzAsMHg1MCwweGIyLDB4MTQsMHgwZiwweDg1LDB4MDMsMHgyZSwweDAzIH0gfSwKK3sgIDE2LCAweGJjMjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDFkLDB4ZTQsMHgwMCwweGZkLDB4MDAsMHhiZiwweDQwIH0gfSwKK3sgIDE2LCAweGJjMzAsIDAsIHsweDBmLDB4NTAsMHgxMywweGQ0LDB4MDIsMHhmZCwweDAwLDB4MmYsMHhjMCwweDBmLDB4ZDEsMHgwMywweGY0LDB4NDAsMHhmOSwweDEwIH0gfSwKK3sgIDE2LCAweGJjNDAsIDAsIHsweDNlLDB4NDQsMHgwZiwweGQxLDB4MDMsMHhmNCwweDQwLDB4ZmYsMHgwMCwweGJmLDB4NDQsMHgwZiwweGQxLDB4MDMsMHhlNiwweDA2IH0gfSwKK3sgIDE2LCAweGJjNTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZTYsMHhhMCwweGZkLDB4MDEsMHgzZSwweDQ0IH0gfSwKK3sgIDE2LCAweGJjNjAsIDAsIHsweDBmLDB4ZDEsMHgwMywweGQ0LDB4MDAsMHhjNSwweDAwLDB4MzMsMHg0MSwweDBmLDB4ZGIsMHgwMywweDI3LDB4MjAsMHhkOSwweGUwIH0gfSwKK3sgIDE2LCAweGJjNzAsIDAsIHsweGIyLDB4NzAsMHgwZCwweGRhLDB4ODMsMHhmNiwweDQwLDB4Y2YsMHgxMCwweDMyLDB4NzgsMHgyZCwweGRhLDB4MDMsMHgwNiwweDAwIH0gfSwKK3sgIDE2LCAweGJjODAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDEwLDB4ZTEsMHgwMCwweGI4LDB4MDAsMHgyZSwweDI4IH0gfSwKK3sgIDE2LCAweGJjOTAsIDAsIHsweDBiLDB4ODgsMHg0MiwweGUwLDB4MTAsMHhkOCwweDAwLDB4MjIsMHgwMCwweDBiLDB4OGMsMHgwYSwweDIzLDB4MDAsMHg4OCwweGMwIH0gfSwKK3sgIDE2LCAweGJjYTAsIDAsIHsweDIyLDB4MjgsMHgwOCwweDg0LDB4MDIsMHhjMiwweDgwLDB4ODAsMHhhMCwweDIyLDB4MzAsMHg0OCwweGFhLDB4ODIsMHgwZSwweDA0IH0gfSwKK3sgIDE2LCAweGJjYjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHgwMCwweGIxLDB4MDAsMHgyYywweDQwIH0gfSwKK3sgIDE2LCAweGJjYzAsIDAsIHsweDhiLDB4MTIsMHgwMiwweGM0LDB4MDAsMHg5OSwweDAyLDB4MjgsMHg0MCwweDhiLDB4MTYsMHgwMiwweDg0LDB4ODEsMHg5MSwweDMwIH0gfSwKK3sgIDE2LCAweGJjZDAsIDAsIHsweDIwLDB4NTgsMHgwOSwweDEwLDB4MDIsMHhjNSwweDAwLDB4ODEsMHgwMCwweDY0LDB4NGQsMHgwOCwweDM0LDB4MDIsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweGJjZTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4YWMsMHgwYywweGI5LDB4MDQsMHgyZSwweDQ4IH0gfSwKK3sgIDE2LCAweGJjZjAsIDAsIHsweDBiLDB4OTQsMHgwNiwweGU0LDB4MDAsMHg5OSwweDQwLDB4YWEsMHg0MCwweDBiLDB4OTIsMHgyMiwweGE0LDB4MDAsMHg4OSwweDAwIH0gfSwKK3sgIDE2LCAweGJkMDAsIDAsIHsweDYwLDB4NDAsMHgwOCwweDk0LDB4MDIsMHhlNCwweDAwLDB4ODksMHg4MCwweGE2LDB4NTAsMHgwOCwweDkyLDB4MDIsMHgwNiwweDA0IH0gfSwKK3sgIDE2LCAweGJkMTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGY5LDB4OTgsMHgzZSwweDQ4IH0gfSwKK3sgIDE2LCAweGJkMjAsIDAsIHsweDBmLDB4OTgsMHgwMywweGU1LDB4MjAsMHhkOSwweDAwLDB4M2EsMHg2NCwweDBmLDB4OTQsMHg4MywweGE0LDB4YzAsMHhkOSwweDAyIH0gfSwKK3sgIDE2LCAweGJkMzAsIDAsIHsweDcyLDB4NDAsMHg0ZCwweDkwLDB4NDIsMHhlNCwweDgyLDB4YzksMHg0MCwweDM2LDB4NDAsMHgwYywweDkwLDB4MGIsMHgyOCwweDA0IH0gfSwKK3sgIDE2LCAweGJkNDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAxLDB4YWMsMHgyOCwweGY5LDB4ODgsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweGJkNTAsIDAsIHsweDBmLDB4OTksMHgxMywweGU3LDB4MDAsMHhmOSwweGMwLDB4MzYsMHg2MCwweDBmLDB4OTAsMHgwMywweDY2LDB4MDAsMHhmMSwweDAwIH0gfSwKK3sgIDE2LCAweGJkNjAsIDAsIHsweDdlLDB4NDAsMHgwZiwweDk5LDB4MDcsMHhlNCwweDYwLDB4ZjksMHgwMCwweDM4LDB4NDAsMHgwZiwweDk4LDB4MDMsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGJkNzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGY4LDB4MTAsMHgzMiwweDAwIH0gfSwKK3sgIDE2LCAweGJkODAsIDAsIHsweDBmLDB4ODIsMHgwYiwweDIxLDB4MDAsMHhlOCwweDAwLDB4MzYsMHgwNCwweDBjLDB4ODYsMHgwMywweGUxLDB4MDAsMHhkOCwweDAwIH0gfSwKK3sgIDE2LCAweGJkOTAsIDAsIHsweDMyLDB4MDAsMHgwZiwweDgwLDB4MDMsMHg2MSwweDAwLDB4YzgsMHgwMCwweDMyLDB4MDAsMHgwZiwweDAwLDB4MDMsMHgwYSwweDA0IH0gfSwKK3sgIDE2LCAweGJkYTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4MjgsMHgyMCwweGJlLDB4MDAsMHgyMiwweDgwIH0gfSwKK3sgIDE2LCAweGJkYjAsIDAsIHsweDI4LDB4ZWMsMHgwMiwweDE5LDB4MDQsMHg4MiwweDAwLDB4MDMsMHg4MCwweDBkLDB4ZTQsMHg4MiwweGU4LDB4MDAsMHg4YSwweDAxIH0gfSwKK3sgIDE2LCAweGJkYzAsIDAsIHsweGFhLDB4ODAsMHg4YiwweGVkLDB4ODIsMHgzYiwweDgwLDB4OGUsMHg5MCwweDM2LDB4ODAsMHgwYiwweGUwLDB4MDMsMHg0YSwweDAwIH0gfSwKK3sgIDE2LCAweGJkZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NDIsMHgwMCwweGIzLDB4ODAsMHgyMCwweGMwIH0gfSwKK3sgIDE2LCAweGJkZTAsIDAsIHsweDZiLDB4MzQsMHgxNiwweDQwLDB4YzAsMHg4MywweDEwLDB4MjQsMHg3MiwweDg4LDB4YjAsMHgwMiwweGVjLDB4MDAsMHg4MywweDAwIH0gfSwKK3sgIDE2LCAweGJkZjAsIDAsIHsweDI0LDB4YzAsMHgwYiwweDA0LDB4MDIsMHg2ZiwweDA5LDB4OWIsMHgwMCwweDI0LDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwYSwweDAwIH0gfSwKK3sgIDE2LCAweGJlMDAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDAxLDB4MTQsMHgwMCwweGI3LDB4ODAsMHgyMywweGU0IH0gfSwKK3sgIDE2LCAweGJlMTAsIDAsIHsweDI4LDB4NzgsMHg4MiwweDc0LDB4MTQsMHg4ZiwweDAwLDB4NjEsMHhlMCwweDA5LDB4NTAsMHgxMiwweGRjLDB4MDQsMHg4NywweDIyIH0gfSwKK3sgIDE2LCAweGJlMjAsIDAsIHsweDI1LDB4YzgsMHgxYiwweDc4LDB4MDIsMHgxNCwweDAwLDB4OTQsMHg0MCwweGE1LDB4YzAsMHgwYiwweDYwLDB4MjIsMHg2OCwweDAwIH0gfSwKK3sgIDE2LCAweGJlMzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MTIsMHgyMCwweGI3LDB4ODAsMHhiMSwweGUwIH0gfSwKK3sgIDE2LCAweGJlNDAsIDAsIHsweDhmLDB4ZjgsMHgwMywweDEyLDB4MDIsMHhlNywweDgwLDB4MzUsMHhlMCwweDBjLDB4NjgsMHgwNiwweGNmLDB4YzIsMHhjZiwweGIwIH0gfSwKK3sgIDE2LCAweGJlNTAsIDAsIHsweDI1LDB4ZjQsMHgwZiwweDU4LDB4MDMsMHg1YSwweDAyLDB4ZDUsMHg4MCwweDc1LDB4ZmEsMHg0ZiwweGY4LDB4MDMsMHgyYSwweDAyIH0gfSwKK3sgIDE2LCAweGJlNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDFkLDB4YTUsMHg5MCwweGYzLDB4MDAsMHgzZCwweGMwIH0gfSwKK3sgIDE2LCAweGJlNzAsIDAsIHsweDRmLDB4YjAsMHgxMywweGE4LDB4MDQsMHhmYiwweDAwLDB4M2MsMHhjMCwweDBmLDB4ODAsMHg0MywweGVjLDB4ODAsMHhlYiwweDYwIH0gfSwKK3sgIDE2LCAweGJlODAsIDAsIHsweDNhLDB4YzksMHgwZiwweDMwLDB4MDMsMHhlYywweDAwLDB4ZTksMHgwMCwweDNlLDB4YzgsMHgwZiwweGEwLDB4MDMsMHhjMiwweDA2IH0gfSwKK3sgIDE2LCAweGJlOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZjYsMHgwMCwweGVlLDB4ODAsMHgzZiwweGUwIH0gfSwKK3sgIDE2LCAweGJlYTAsIDAsIHsweDBkLDB4ODksMHgwMywweGQyLDB4NDAsMHhlNSwweDgxLDB4MzksMHhlMCwweDNjLDB4ZjksMHgwNywweGZlLDB4MDAsMHhjZiwweDg4IH0gfSwKK3sgIDE2LCAweGJlYjAsIDAsIHsweDNmLDB4ZTAsMHgwZiwweGU4LDB4MDMsMHhmMiwweDA4LDB4Y2UsMHg4MCwweDMzLDB4ZTAsMHgwYywweGY4LDB4MDMsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGJlYzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4OTQsMHg0NCwweGM2LDB4MDAsMHgyZiwweGMwIH0gfSwKK3sgIDE2LCAweGJlZDAsIDAsIHsweDA4LDB4NTgsMHgwMiwweGQwLDB4YzQsMHg4NSwweDI0LDB4MjEsMHg5MCwweDA4LDB4NTQsMHgxMiwweGRjLDB4ODIsMHgwNywweDAwIH0gfSwKK3sgIDE2LCAweGJlZTAsIDAsIHsweDJkLDB4YzAsMHgwYiwweDcwLDB4MDYsMHhkNCwweDAwLDB4OGUsMHg0OCwweDIxLDB4YzAsMHgwYSwweDYwLDB4MDIsMHgyYSwweDA0IH0gfSwKK3sgIDE2LCAweGJlZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwMCwweGE3LDB4NDAsMHgyZCwweGMwIH0gfSwKK3sgIDE2LCAweGJmMDAsIDAsIHsweDA4LDB4NDIsMHgwMiwweGQwLDB4MDAsMHhhZCwweDAwLDB4MjksMHhjMCwweDA4LDB4NzAsMHgyMiwweGRjLDB4MjgsMHg4NywweDAwIH0gfSwKK3sgIDE2LCAweGJmMTAsIDAsIHsweDJkLDB4YzAsMHgwYiwweDQwLDB4MDIsMHg5OCwweDAwLDB4OTcsMHgwMCwweGEwLDB4YzQsMHgwOCwweDcwLDB4MDIsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGJmMjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDE0LDB4Y2MsMHgwOCwweDkzLDB4MDAsMHgyYywweGUwIH0gfSwKK3sgIDE2LCAweGJmMzAsIDAsIHsweDA4LDB4M2MsMHgyMiwweGMxLDB4MDAsMHg4MSwweDAwLDB4MjAsMHg4MCwweDg4LDB4MTUsMHgwMiwweGNlLDB4MzAsMHg4MywweDAwIH0gfSwKK3sgIDE2LCAweGJmNDAsIDAsIHsweDJjLDB4YzAsMHgwYiwweDNjLDB4MDIsMHhjYywweDA0LDB4OTMsMHhjMCwweDIwLDB4ZjQsMHg0YSwweDBjLDB4ODIsMHgwOCwweDA0IH0gfSwKK3sgIDE2LCAweGJmNTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YTAsMHgwMCwweGUzLDB4YzAsMHgxZiwweGUwIH0gfSwKK3sgIDE2LCAweGJmNjAsIDAsIHsweDZjLDB4MTAsMHg4MywweGUwLDB4MDQsMHhlYiwweDAwLDB4M2EsMHg1MiwweDRjLDB4YjQsMHgwMywweGZlLDB4MDIsMHhjZiwweDAwIH0gfSwKK3sgIDE2LCAweGJmNzAsIDAsIHsweDNmLDB4YzAsMHgwZiwweDg0LDB4NDMsMHhlMSwweDAyLDB4ZDgsMHhjMiwweDMzLDB4YzAsMHgwYywweDg0LDB4MGIsMHgyYSwweDA0IH0gfSwKK3sgIDE2LCAweGJmODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4ZTksMHgwMCwweGViLDB4MTAsMHgzZSwweGM0IH0gfSwKK3sgIDE2LCAweGJmOTAsIDAsIHsweDBlLDB4OTQsMHgwMywweGU0LDB4MDAsMHhmYiwweDE4LDB4M2UsMHhjMiwweDBmLDB4YjYsMHgwMywweGVjLDB4MDAsMHhmYiwweDAxIH0gfSwKK3sgIDE2LCAweGJmYTAsIDAsIHsweDNlLDB4YzAsMHgwZiwweDM1LDB4MDMsMHhjNCwweDI4LDB4ZWEsMHg0MiwweDNlLDB4YzAsMHgwZiwweDgxLDB4MDMsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGJmYjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHg0MCwweGZmLDB4MDAsMHgzMywweGMwIH0gfSwKK3sgIDE2LCAweGJmYzAsIDAsIHsweDBjLDB4YzAsMHhhMywweDMwLDB4MjgsMHhjZCwweGEwLDB4MzMsMHhjMCwweDBjLDB4ZTgsMHgwMywweDBjLDB4MDAsMHhlZiwweDA1IH0gfSwKK3sgIDE2LCAweGJmZDAsIDAsIHsweDNkLDB4YzAsMHgwYywweGNhLDB4ODMsMHgzYywweDAwLDB4Y2QsMHgwOCwweDNmLDB4YzIsMHgwYywweGEwLDB4MDMsMHhjMCwweDQ0IH0gfSwKK3sgIDE2LCAweGJmZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MSwweDA0LDB4NjcsMHgwMCwweGJiLDB4ODAsMHgyMCwweGMwIH0gfSwKK3sgIDE2LCAweGJmZjAsIDAsIHsweDA4LDB4YWEsMHgwMiwweDA4LDB4MDAsMHhhMSwweDAxLDB4MzQsMHhkMSwweDA4LDB4YTQsMHgxMiwweDJjLDB4MDAsMHg4YiwweDAwIH0gfSwKK3sgIDE2LCAweGMwMDAsIDAsIHsweDZlLDB4YzAsMHg4OCwweGIyLDB4MDIsMHgyYywweDA4LDB4ODksMHg4MCwweDJlLDB4YzAsMHgwYSwweGE4LDB4MDMsMHhhMCwweDQwIH0gfSwKK3sgIDE2LCAweGMwMTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweGJhLDB4ODAsMHhhMiwweGMwIH0gfSwKK3sgIDE2LCAweGMwMjAsIDAsIHsweDA4LDB4YTgsMHgwYSwweGEwLDB4MDAsMHg4YiwweDAwLDB4YTIsMHhjMCwweDQ4LDB4MTEsMHgwMiwweGFjLDB4MDQsMHg4YiwweDAwIH0gfSwKK3sgIDE2LCAweGMwMzAsIDAsIHsweDJlLDB4YzAsMHgwMCwweDgwLDB4MTIsMHgyYSwweDA4LDB4OGIsMHgxNCwweDJjLDB4YzAsMHgwOCwweDg4LDB4MDIsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGMwNDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MGMsMHgwMCwweGIyLDB4MDAsMHgyMiwweGMwIH0gfSwKK3sgIDE2LCAweGMwNTAsIDAsIHsweDA4LDB4YjIsMHgxMiwweDgwLDB4MDAsMHhhYiwweDAxLDB4MjQsMHhjMCwweDA4LDB4MDAsMHgwMiwweDBjLDB4MDQsMHg4MywweDAwIH0gfSwKK3sgIDE2LCAweGMwNjAsIDAsIHsweDJjLDB4YzAsMHgwOCwweDMwLDB4MDIsMHgwNywweDAwLDB4ODIsMHgwMCwweDI0LDB4YzAsMHgwOCwweDA4LDB4MDIsMHg4MiwweDAxIH0gfSwKK3sgIDE2LCAweGMwNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGZiLDB4MDAsMHgzMiwweGMwIH0gfSwKK3sgIDE2LCAweGMwODAsIDAsIHsweDBjLDB4YTIsMHgwMywweGEwLDB4MDAsMHhjOSwweDAwLDB4MzIsMHhjMCwweDI0LDB4OTQsMHgwMywweDNjLDB4MDIsMHhjZiwweDAwIH0gfSwKK3sgIDE2LCAweGMwOTAsIDAsIHsweDJmLDB4YzAsMHgwNCwweDgwLDB4MGIsMHgwOSwweDAyLDB4Y2IsMHgwMSwweDNmLDB4YzAsMHgyYywweGEwLDB4MDMsMHhjMCwweDAzIH0gfSwKK3sgIDE2LCAweGMwYTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE5LDB4ZGMsMHgwMCwweGZkLDB4MDIsMHgzZiwweGMwIH0gfSwKK3sgIDE2LCAweGMwYjAsIDAsIHsweDRmLDB4ZTQsMHgxMywweDcwLDB4MDAsMHhmZCwweDAwLDB4M2YsMHhjMCwweDBmLDB4YzIsMHg4MywweGZjLDB4MDAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweGMwYzAsIDAsIHsweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGMwLDB4MDMsMHhhOCwweDA2IH0gfSwKK3sgIDE2LCAweGMwZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHgyMCwweGVmLDB4MzAsMHgzZiwweDA0IH0gfSwKK3sgIDE2LCAweGMwZTAsIDAsIHsweDZjLDB4ODgsMHgwMywweDNhLDB4NDIsMHhlNCwweDkxLDB4M2YsMHgwZCwweDBkLDB4NDgsMHgwMywweDNjLDB4YzAsMHhmZiwweDAyIH0gfSwKK3sgIDE2LCAweGMwZjAsIDAsIHsweDMzLDB4NDQsMHgwYywweGY0LDB4MDMsMHhmYywweDgyLDB4ZGYsMHgzMCwweDMzLDB4NjAsMHgwZCwweGYxLDB4MDMsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweGMxMDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDEwLDB4ZWQsMHgwMCwweDhiLDB4NzAsMHgyZSwweDE4IH0gfSwKK3sgIDE2LCAweGMxMTAsIDAsIHsweDg4LDB4MjIsMHg0YSwweDJjLDB4ODIsMHhlYSwweDI2LDB4MmUsMHgwYywweDBiLDB4YjgsMHg0MiwweDNkLDB4ODAsMHhiZiwweDkwIH0gfSwKK3sgIDE2LCAweGMxMjAsIDAsIHsweDJhLDB4NTQsMHgyOCwweGI0LDB4MDIsMHhjZCwweDAwLDB4ZGIsMHg0MCwweDJhLDB4NGEsMHg0OCwweDMwLDB4MDIsMHhhMCwweDA0IH0gfSwKK3sgIDE2LCAweGMxMzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHhiMCwweGEzLDB4MDAsMHg2YywweDEwIH0gfSwKK3sgIDE2LCAweGMxNDAsIDAsIHsweDA5LDB4MDAsMHg4MiwweDIwLDB4ODIsMHhhMCwweDIwLDB4MmMsMHg4OCwweDRiLDB4ODAsMHgwMCwweDBjLDB4NDAsMHhiMywweDAxIH0gfSwKK3sgIDE2LCAweGMxNTAsIDAsIHsweDIwLDB4NDgsMHgwYiwweDM2LDB4MDIsMHg4YywweGUwLDB4ODMsMHg2NCwweDI0LDB4NDAsMHgyOCwweDMyLDB4MDIsMHgyMiwweDAxIH0gfSwKK3sgIDE2LCAweGMxNjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDExLDB4YWMsMHgwMCwweDhiLDB4MDAsMHgyZSwweDAwIH0gfSwKK3sgIDE2LCAweGMxNzAsIDAsIHsweDA5LDB4ODAsMHg4MCwweGE2LDB4MDAsMHhiYSwweDExLDB4MmUsMHg4OCwweDBiLDB4YjAsMHgwMCwweDJjLDB4MDAsMHhiYiwweDAyIH0gfSwKK3sgIDE2LCAweGMxODAsIDAsIHsweDAyLDB4NDAsMHgwOSwweGIwLDB4MDIsMHhlYywweDAwLDB4OGIsMHgwMCwweDJjLDB4YzgsMHgwOCwweGI4LDB4ODIsMHhiMCwweDA0IH0gfSwKK3sgIDE2LCAweGMxOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWMsMHgwMCwweGViLDB4MDAsMHgzZSwweDkyIH0gfSwKK3sgIDE2LCAweGMxYTAsIDAsIHsweDBkLDB4ODAsMHgwMywweDBhLDB4MjAsMHhlOSwweDAwLDB4M2UsMHg1MCwweDQ1LDB4ODAsMHgwMSwweDJjLDB4MDQsMHhmMywweDAwIH0gfSwKK3sgIDE2LCAweGMxYjAsIDAsIHsweDkwLDB4NjAsMHgwOSwweGIwLDB4MDMsMHhlYywweDAwLDB4OGIsMHgwMiwweDI2LDB4NTAsMHg4ZCwweGJjLDB4MDMsMHgxMCwweDA0IH0gfSwKK3sgIDE2LCAweGMxYzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAxLDB4YmMsMHgwMCwweGZmLDB4MDIsMHgzZiwweDgwIH0gfSwKK3sgIDE2LCAweGMxZDAsIDAsIHsweDBlLDB4ZjksMHgwMiwweDdjLDB4MjIsMHhhZiwweDAwLDB4M2YsMHg2MCwweDAzLDB4YzAsMHgwYiwweGZjLDB4MTAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweGMxZTAsIDAsIHsweDNmLDB4NGEsMHg0ZSwweGYwLDB4MDMsMHhmYywweDAwLDB4ZjcsMHgwMCwweDJiLDB4NjAsMHgwZiwweDcwLDB4MDMsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGMxZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGZiLDB4MDAsMHhiMCwweDAwIH0gfSwKK3sgIDE2LCAweGMyMDAsIDAsIHsweDBmLDB4ODIsMHgwYiwweGE5LDB4MDAsMHhjOSwweDAwLDB4MzIsMHhkMiwweDBmLDB4YTAsMHg4MywweGFjLDB4MDAsMHhjYiwweDEwIH0gfSwKK3sgIDE2LCAweGMyMTAsIDAsIHsweDNlLDB4NDAsMHgwYywweGIwLDB4MDMsMHhlYywweDAwLDB4ZGIsMHgwMCwweDMyLDB4NTAsMHgyYywweDk1LDB4MDMsMHgxMCwweDA0IH0gfSwKK3sgIDE2LCAweGMyMjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4M2MsMHgwNCwweGJmLDB4MDIsMHgyMiwweDgwIH0gfSwKK3sgIDE2LCAweGMyMzAsIDAsIHsweDBiLDB4OTgsMHgwMCwweDI5LDB4MDAsMHhjYiwweDQwLDB4MjIsMHhjMCwweDBiLDB4MjQsMHgwMiwweDNjLDB4MDgsMHg4ZiwweDUwIH0gfSwKK3sgIDE2LCAweGMyNDAsIDAsIHsweDJlLDB4NTAsMHgwZCwweGYwLDB4MDIsMHhmZCwweDQyLDB4OGYsMHg1OCwweDIyLDB4ZTAsMHg0OCwweGI1LDB4MDIsMHgzMiwweDAwIH0gfSwKK3sgIDE2LCAweGMyNTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NmMsMHgwMCwweGIzLDB4MDAsMHgyNCwweDQwIH0gfSwKK3sgIDE2LCAweGMyNjAsIDAsIHsweDRiLDB4OTQsMHgwMCwweDQ5LDB4MDAsMHg5MCwweDgwLDB4MDQsMHgzMCwweDA5LDB4MDAsMHgwZSwweDRjLDB4MDAsMHg4MywweDgwIH0gfSwKK3sgIDE2LCAweGMyNzAsIDAsIHsweDJjLDB4YzAsMHgwOSwweDMwLDB4MjIsMHg2ZSwweDQyLDB4ODMsMHg4MCwweDIwLDB4NDgsMHgwOCwweDM4LDB4MDIsMHgzOCwweDAwIH0gfSwKK3sgIDE2LCAweGMyODAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAxLDB4MWUsMHgwMCwweGI3LDB4ODAsMHg2NSwweDIwIH0gfSwKK3sgIDE2LCAweGMyOTAsIDAsIHsweDBiLDB4NzgsMHg4MiwweDdhLDB4MDgsMHg4YywweGMwLDB4MjUsMHhhMywweDRiLDB4NzgsMHgwMiwweDVlLDB4MDQsMHg4NywweDg0IH0gfSwKK3sgIDE2LCAweGMyYTAsIDAsIHsweDJkLDB4NjEsMHg4OSwweDc4LDB4MDIsMHhkZSwweDA0LDB4ODcsMHg4MCwweGU5LDB4NjIsMHgwOCwweDc4LDB4MDIsMHgwOCwweDAwIH0gfSwKK3sgIDE2LCAweGMyYjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweGZiLDB4MDAsMHgzNCwweDQ4IH0gfSwKK3sgIDE2LCAweGMyYzAsIDAsIHsweDBmLDB4M2IsMHgwMywweDQ4LDB4MDAsMHg5MywweDQ4LDB4MzQsMHg1MCwweDBkLDB4MDAsMHgwMywweDZjLDB4MDAsMHhjMywweDEwIH0gfSwKK3sgIDE2LCAweGMyZDAsIDAsIHsweDFjLDB4YzIsMHgwNSwweDMwLDB4MDMsMHhjYywweDQwLDB4Y2IsMHgwMCwweDMyLDB4NDAsMHgwYywweDIwLDB4MDMsMHgxMiwweDAyIH0gfSwKK3sgIDE2LCAweGMyZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDFkLDB4YmMsMHgyMCwweGZmLDB4MDEsMHgwMywweDQwIH0gfSwKK3sgIDE2LCAweGMyZjAsIDAsIHsweDBmLDB4ZjAsMHgyMywweDFjLDB4MDAsMHhmZiwweDAwLDB4M2IsMHg4MCwweDBmLDB4YjAsMHgyMywweDNjLDB4MDIsMHhmZiwweDUwIH0gfSwKK3sgIDE2LCAweGMzMDAsIDAsIHsweDNkLDB4YzQsMHgwZiwweGYxLDB4MDMsMHhlYywweDAwLDB4ZWYsMHgwMCwweGI3LDB4YzAsMHgwZiwweGUxLDB4MDMsMHhkMCwweDA2IH0gfSwKK3sgIDE2LCAweGMzMTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4ZWMsMHgwMCwweGZiLDB4MDIsMHgzZSwweGUwIH0gfSwKK3sgIDE2LCAweGMzMjAsIDAsIHsweDBjLDB4ODAsMHgwMywweDQ4LDB4MDIsMHhjOCwweDgxLDB4MzIsMHgwMCwweDBmLDB4OTAsMHg0MiwweGVjLDB4YTAsMHhmYiwweDEwIH0gfSwKK3sgIDE2LCAweGMzMzAsIDAsIHsweDNlLDB4ZTAsMHgwYywweGIxLDB4MDMsMHhlYywweDQwLDB4ZmIsMHgxMCwweDMyLDB4NDAsMHgxZiwweGYwLDB4MDMsMHgyYSwweDAwIH0gfSwKK3sgIDE2LCAweGMzNDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDExLDB4OWMsMHgwMCwweGI3LDB4MjQsMHgyZCwweDgwIH0gfSwKK3sgIDE2LCAweGMzNTAsIDAsIHsweDA4LDB4NzAsMHg0MiwweGQ4LDB4MTAsMHg4YywweDAyLDB4MjEsMHg0MCwweDBiLDB4NTAsMHgwMiwweGRkLDB4MDAsMHhlNywweDIwIH0gfSwKK3sgIDE2LCAweGMzNjAsIDAsIHsweDJmLDB4NDAsMHgwOCwweDcwLDB4MDIsMHhkYywweDA1LDB4YjcsMHgwMCwweDIxLDB4YzAsMHgwYiwweGYwLDB4MDIsMHgxMiwweDA0IH0gfSwKK3sgIDE2LCAweGMzNzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHgwMCwweGI3LDB4OTAsMHgyZiwweDQwIH0gfSwKK3sgIDE2LCAweGMzODAsIDAsIHsweDBhLDB4NjgsMHgwMiwweDdhLDB4MDAsMHg5NywweDgwLDB4MjEsMHhlMCwweDBiLDB4NzgsMHgwMiwweGRlLDB4MDAsMHhiNywweDgwIH0gfSwKK3sgIDE2LCAweGMzOTAsIDAsIHsweDJkLDB4ZTAsMHgwOCwweDc4LDB4MDYsMHhkZSwweDAwLDB4YjcsMHhhMCwweDIxLDB4NjAsMHgwYiwweDc4LDB4NDIsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweGMzYTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE0LDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyYywweGMwIH0gfSwKK3sgIDE2LCAweGMzYjAsIDAsIHsweDBhLDB4MzQsMHgwMiwweGM4LDB4MDAsMHg4MywweDRhLDB4MjAsMHhmOCwweDBiLDB4MzEsMHgwMiwweGNjLDB4MDAsMHhhMywweDAwIH0gfSwKK3sgIDE2LCAweGMzYzAsIDAsIHsweDJjLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhjYywweDAwLDB4YjMsMHgwMCwweDIwLDB4YjIsMHgwYiwweDIwLDB4NDIsMHgxMiwweDA0IH0gfSwKK3sgIDE2LCAweGMzZDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweGJhLDB4MDAsMHgzZiwweDg4IH0gfSwKK3sgIDE2LCAweGMzZTAsIDAsIHsweDJlLDB4ZTAsMHg0MywweDU5LDB4ODgsMHhkZSwweDAwLDB4MzMsMHhiMCwweDBmLDB4NmMsMHgwMywweGU4LDB4MDAsMHhmYSwweDAwIH0gfSwKK3sgIDE2LCAweGMzZjAsIDAsIHsweDNlLDB4ODAsMHgyYywweGEwLDB4MDMsMHhlOCwweDA0LDB4ZmEsMHgwMCwweDIzLDB4YjgsMHgwZiwweGUwLDB4OGIsMHgzYSwweDA0IH0gfSwKK3sgIDE2LCAweGM0MDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4ZTAsMHgwNCwweGY4LDB4MDEsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGM0MTAsIDAsIHsweDA5LDB4ODIsMHgyMSwweGUwLDB4MDAsMHhmOCwweDQwLDB4YmUsMHgxNCwweDBmLDB4ODQsMHg4MSwweGUwLDB4MDAsMHhlOCwweDAwIH0gfSwKK3sgIDE2LCAweGM0MjAsIDAsIHsweDNlLDB4MDAsMHgxZiwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweGJlLDB4MDAsMHgwZiwweDg4LDB4MDMsMHhkMiwweDAwIH0gfSwKK3sgIDE2LCAweGM0MzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGUxLDB4MDAsMHgzMiwweDQwIH0gfSwKK3sgIDE2LCAweGM0NDAsIDAsIHsweDBjLDB4OTAsMHg0MywweGU0LDB4MjAsMHhkOSwweDAwLDB4M2MsMHg0NCwweDA4LDB4OTAsMHgwMywweDI0LDB4MDAsMHhmOSwweDAxIH0gfSwKK3sgIDE2LCAweGM0NTAsIDAsIHsweDNlLDB4NDgsMHgwZiwweDEwLDB4NDMsMHgyNSwweDAwLDB4YzksMHgwMCwweGIyLDB4NDAsMHgwYywweDkwLDB4MDMsMHgwMiwweDA0IH0gfSwKK3sgIDE2LCAweGM0NjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NjQsMHgwMCwweGI5LDB4MDAsMHhhMCwweDQwIH0gfSwKK3sgIDE2LCAweGM0NzAsIDAsIHsweDA4LDB4OTgsMHgwMiwweGU2LDB4MDgsMHhhOSwweDYwLDB4MmUsMHg0OSwweDA4LDB4OTQsMHgwMiwweDI0LDB4MDAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweGM0ODAsIDAsIHsweDJlLDB4NzAsMHgwYiwweDkwLDB4MDIsMHgyNiwweDAyLDB4ODksMHgwMCwweGEwLDB4NDAsMHgwYSwweDkwLDB4MGEsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGM0OTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweGI5LDB4MDAsMHgyMiwweDQwIH0gfSwKK3sgIDE2LCAweGM0YTAsIDAsIHsweDA4LDB4OTgsMHgwNCwweGU2LDB4MDAsMHg5OSwweDgwLDB4MmUsMHg0MCwweDBhLDB4YjEsMHgwMiwweDI0LDB4MDAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweGM0YjAsIDAsIHsweDBlLDB4NDAsMHgwYiwweDkwLDB4MGEsMHgwNCwweDAwLDB4ODEsMHgwMSwweDIyLDB4YzAsMHgwOCwweDEwLDB4MDIsMHgwNiwweDAwIH0gfSwKK3sgIDE2LCAweGM0YzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDQsMHg4MCwweGIxLDB4MjAsMHgyMiwweDQ4IH0gfSwKK3sgIDE2LCAweGM0ZDAsIDAsIHsweDA4LDB4MTgsMHgwNiwweGM0LDB4MDAsMHhhMSwweDAwLDB4MmMsMHg0OCwweDJhLDB4MzAsMHgwMiwweDA0LDB4ODAsMHhiMSwweDIyIH0gfSwKK3sgIDE2LCAweGM0ZTAsIDAsIHsweDJjLDB4NDgsMHgwYiwweDEyLDB4MDIsMHgwNSwweDgwLDB4ODEsMHg2MCwweDIyLDB4NTAsMHgwYSwweDE0LDB4MDIsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweGM0ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGY4LDB4NTAsMHgzMiwweDE0IH0gfSwKK3sgIDE2LCAweGM1MDAsIDAsIHsweDBjLDB4ODUsMHgwMywweGUxLDB4NDAsMHhkOCwweDUwLDB4M2UsMHgxNCwweDBlLDB4ODAsMHgwYiwweDIxLDB4NDAsMHhmYSwweDAwIH0gfSwKK3sgIDE2LCAweGM1MTAsIDAsIHsweDNlLDB4OTQsMHgwZiwweDg1LDB4MDMsMHgyMCwweDAwLDB4YzAsMHgwMCwweDMyLDB4MDAsMHgwYywweDgwLDB4MDMsMHgyZSwweDAzIH0gfSwKK3sgIDE2LCAweGM1MjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDFkLDB4ZTQsMHg0MSwweGY5LDB4MTAsMHgzZCwweDQ1IH0gfSwKK3sgIDE2LCAweGM1MzAsIDAsIHsweDBmLDB4ZDAsMHgwMywweGY0LDB4MDAsMHhmZiwweDAwLDB4M2YsMHg0NSwweDBkLDB4ZDAsMHgwMywweGU0LDB4NDAsMHhmOSwweDEwIH0gfSwKK3sgIDE2LCAweGM1NDAsIDAsIHsweDNmLDB4NDQsMHgwZiwweDkxLDB4MDMsMHhlNCwweDQyLDB4ZjksMHgxMCwweDNmLDB4NDAsMHgwZiwweGQ0LDB4MDMsMHhlNiwweDA2IH0gfSwKK3sgIDE2LCAweGM1NTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweGM1NjAsIDAsIHsweDBjLDB4ZDAsMHgwMywweGY0LDB4MDgsMHg4ZCwweDAyLDB4M2YsMHg0MCwweDBmLDB4ZDAsMHgwMywweGU0LDB4MDAsMHhjZCwweDAwIH0gfSwKK3sgIDE2LCAweGM1NzAsIDAsIHsweDMzLDB4NDAsMHgwYywweDkwLDB4MDMsMHgyNCwweDAwLDB4ZjksMHgwMCwweDMyLDB4NDAsMHg0YywweDk4LDB4MjMsMHgwNiwweDAwIH0gfSwKK3sgIDE2LCAweGM1ODAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDEwLDB4ZTAsMHgwMCwweGU4LDB4MDAsMHgyZSwweDAwIH0gfSwKK3sgIDE2LCAweGM1OTAsIDAsIHsweDQ4LDB4ODAsMHgwMiwweGU4LDB4MDAsMHhkMCwweDAwLDB4MmUsMHg4MCwweDBiLDB4ODAsMHgxMiwweGUwLDB4MDIsMHg4OCwweDAwIH0gfSwKK3sgIDE2LCAweGM1YTAsIDAsIHsweGEyLDB4MDAsMHgwYSwweDgwLDB4MTIsMHgyMiwweDAwLDB4YjgsMHg4MSwweDIyLDB4MjgsMHgwOCwweGNmLDB4MDIsMHgwZSwweDA0IH0gfSwKK3sgIDE2LCAweGM1YjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHgwMCwweGIxLDB4MDAsMHgyYywweDQwIH0gfSwKK3sgIDE2LCAweGM1YzAsIDAsIHsweDI4LDB4MTAsMHgwMiwweGM0LDB4MDAsMHg4MSwweDAwLDB4MmMsMHg0MCwweDBiLDB4MTAsMHgwMiwweGM0LDB4MDAsMHg5MSwweDAwIH0gfSwKK3sgIDE2LCAweGM1ZDAsIDAsIHsweDI2LDB4NDAsMHgwOSwweDEwLDB4MDIsMHg1NCwweGEwLDB4YjUsMHgyYywweGE1LDB4NDIsMHgwOCwweDUwLDB4ODIsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweGM1ZTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4YTQsMHgwMCwweGE5LDB4MDAsMHgyZSwweDUwIH0gfSwKK3sgIDE2LCAweGM1ZjAsIDAsIHsweDU4LDB4OTAsMHgwMiwweGU0LDB4ODAsMHg5YiwweDAwLDB4MmUsMHg0NSwweDhiLDB4OTIsMHgwMiwweGU0LDB4MDAsMHg5OSwweDAwIH0gfSwKK3sgIDE2LCAweGM2MDAsIDAsIHsweDI2LDB4NDQsMHgwYiwweDkwLDB4MDIsMHg2NCwweDA4LDB4YjUsMHgwMCwweDI1LDB4NGEsMHgwOCwweDUxLDB4MDIsMHgwNiwweDA0IH0gfSwKK3sgIDE2LCAweGM2MTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDU0IH0gfSwKK3sgIDE2LCAweGM2MjAsIDAsIHsweDBjLDB4OTAsMHg0MywweGM0LDB4MDAsMHhjOSwweDkwLDB4M2UsMHg3MCwweDBmLDB4OTgsMHgwMywweGU0LDB4MDAsMHhkOSwweDAwIH0gfSwKK3sgIDE2LCAweGM2MzAsIDAsIHsweDM0LDB4NjAsMHg0ZCwweDkwLDB4MGEsMHg2NCwweDAwLDB4ZjksMHgwMCwweDM2LDB4NDAsMHgyYywweDllLDB4MDMsMHgyOCwweDA0IH0gfSwKK3sgIDE2LCAweGM2NDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAxLDB4YTQsMHgwMCwweGY5LDB4MDAsMHgzYywweDQwIH0gfSwKK3sgIDE2LCAweGM2NTAsIDAsIHsweDBmLDB4OWMsMHgwMywweGU2LDB4MzAsMHhmOSwweDAwLDB4M2UsMHg2MiwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhlOSwweDAwIH0gfSwKK3sgIDE2LCAweGM2NjAsIDAsIHsweDNhLDB4NDAsMHg0ZSwweDkwLDB4MDMsMHhhNCwweDAwLDB4NzksMHgwYywweDNhLDB4NDAsMHgwZiwweDkwLDB4MWIsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGM2NzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGM2ODAsIDAsIHsweDBjLDB4ODEsMHgxMywweGUxLDB4MDgsMHhjOCwweDQ4LDB4MzIsMHgwMCwweDNjLDB4ODAsMHgwMywweGMwLDB4MDAsMHhmMCwweDEwIH0gfSwKK3sgIDE2LCAweGM2OTAsIDAsIHsweDNlLDB4MDYsMHgwYywweDgwLDB4MDMsMHhmMCwweDA4LDB4Y2MsMHgwMCwweDMzLDB4MDQsMHgwYywweGMwLDB4MDMsMHgwYSwweDA0IH0gfSwKK3sgIDE2LCAweGM2YTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4MjgsMHgwMCwweGJhLDB4MDAsMHgyZSwweDgwIH0gfSwKK3sgIDE2LCAweGM2YjAsIDAsIHsweDA4LDB4ZWMsMHg0MiwweGZhLDB4MjAsMHg4ZSwweDAwLDB4MjMsMHhhMCwweDA4LDB4ZTgsMHg0MiwweGU4LDB4MDAsMHhiZSwweDgwIH0gfSwKK3sgIDE2LCAweGM2YzAsIDAsIHsweDJmLDB4ODAsMHgwOCwweGEwLDB4MDIsMHhlOCwweDAwLDB4ZGEsMHgwMCwweDIyLDB4ODAsMHg0OCwweGUwLDB4MDIsMHgwYSwweDAwIH0gfSwKK3sgIDE2LCAweGM2ZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweGIzLDB4MDAsMHgyYywweGMwIH0gfSwKK3sgIDE2LCAweGM2ZTAsIDAsIHsweDA5LDB4MzQsMHg4MiwweGM5LDB4MDAsMHg4MywweDgwLDB4MjAsMHhmMCwweDA4LDB4MzAsMHg4MiwweGNjLDB4MDAsMHhiMywweDgwIH0gfSwKK3sgIDE2LCAweGM2ZjAsIDAsIHsweDJjLDB4ZjAsMHgwOCwweGIwLDB4MDIsMHhjMSwweDIwLDB4ODAsMHgwMCwweGEwLDB4MzIsMHgwOCwweDAwLDB4MDIsMHgwYSwweDAwIH0gfSwKK3sgIDE2LCAweGM3MDAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDAxLDB4MWMsMHhjMCwweGI3LDB4MDEsMHgyZiwweGM4IH0gfSwKK3sgIDE2LCAweGM3MTAsIDAsIHsweDg5LDB4NTAsMHgwMiwweGQ4LDB4MDIsMHg4NywweGM0LDB4MjEsMHhlMiwweDQ4LDB4NzAsMHg4MiwweGRjLDB4MDAsMHhiNywweDAwIH0gfSwKK3sgIDE2LCAweGM3MjAsIDAsIHsweDJjLDB4NDAsMHgwOCwweDcyLDB4MDIsMHhjZSwweDAwLDB4OTcsMHgwOCwweDIzLDB4YzAsMHgwOCwweDcwLDB4MDIsMHgyOCwweDAwIH0gfSwKK3sgIDE2LCAweGM3MzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgwMCwweGY3LDB4ZTEsMHgzZCwweGU4IH0gfSwKK3sgIDE2LCAweGM3NDAsIDAsIHsweDJkLDB4NjgsMHgwMywweGYyLDB4MDAsMHhjNywweDgwLDB4YjAsMHhlMCwweDA4LDB4NjgsMHgwMywweGRmLDB4ODAsMHhmNiwweDgwIH0gfSwKK3sgIDE2LCAweGM3NTAsIDAsIHsweDNkLDB4ZTAsMHg4YywweDdlLDB4MDMsMHhkYSwweDAwLDB4Y2MsMHg4MCwweDMxLDB4MjAsMHgwYywweGM4LDB4MGIsMHgyYSwweDAyIH0gfSwKK3sgIDE2LCAweGM3NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDFkLDB4YWMsMHgwOCwweGZiLDB4MDAsMHgzYywweGMwIH0gfSwKK3sgIDE2LCAweGM3NzAsIDAsIHsweDBlLDB4ODAsMHgwMywweGUwLDB4MDgsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4YjAsMHgwMiwweGVjLDB4MDAsMHhmYSwweDAwIH0gfSwKK3sgIDE2LCAweGM3ODAsIDAsIHsweDNlLDB4NDAsMHgyZiwweGIwLDB4MDMsMHhlNCwweDAwLDB4ZmIsMHgwMCwweDNjLDB4YzAsMHgyZiwweGIwLDB4MDMsMHhjMiwweDA2IH0gfSwKK3sgIDE2LCAweGM3OTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHgwMCwweGZmLDB4OTIsMHg3ZiwweGVhIH0gfSwKK3sgIDE2LCAweGM3YTAsIDAsIHsweDBjLDB4ZjgsMHgwMywweGZlLDB4MDAsMHhjYywweGEwLDB4M2YsMHgyMCwweDBkLDB4ZjksMHgwMywweDNlLDB4MDAsMHhjZiwweDgwIH0gfSwKK3sgIDE2LCAweGM3YjAsIDAsIHsweDMzLDB4NjAsMHgwZiwweGY4LDB4MDMsMHhmNiwweDAwLDB4ZWYsMHg4NCwweDMzLDB4ZTAsMHgyYywweGM4LDB4MDMsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGM3YzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4OWMsMHgwMCwweGI3LDB4MDAsMHgyZiwweGM4IH0gfSwKK3sgIDE2LCAweGM3ZDAsIDAsIHsweDA4LDB4NTQsMHgwMiwweGQ4LDB4MDAsMHhkNiwweDA0LDB4MmQsMHgwMSwweDA4LDB4NjksMHgwMiwweDFjLDB4MDAsMHg4NSwweDAwIH0gfSwKK3sgIDE2LCAweGM3ZTAsIDAsIHsweDIxLDB4NDMsMHgwYiwweDcwLDB4MDMsMHg5YSwweGMwLDB4OGMsMHgwMCwweGEzLDB4MDIsMHgwOCwweGYxLDB4MDIsMHgyYSwweDA0IH0gfSwKK3sgIDE2LCAweGM3ZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwMCwweGI3LDB4MDEsMHgyZCwweGNjIH0gfSwKK3sgIDE2LCAweGM4MDAsIDAsIHsweDA4LDB4NzAsMHgwMiwweGQ0LDB4MDAsMHg5NCwweDI4LDB4MmQsMHhjMiwweDA4LDB4YzIsMHgwMiwweDVjLDB4MDAsMHg4NiwweDAwIH0gfSwKK3sgIDE2LCAweGM4MTAsIDAsIHsweDIxLDB4ODAsMHgwYiwweDcxLDB4MDIsMHhkYywweDAwLDB4YTcsMHgxMCwweDIxLDB4YzAsMHgwOCwweDQ4LDB4MDIsMHg0MCwweDAwIH0gfSwKK3sgIDE2LCAweGM4MjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDE0LDB4Y2MsMHgwOCwweGIzLDB4MDAsMHgyYywweGYwIH0gfSwKK3sgIDE2LCAweGM4MzAsIDAsIHsweDA4LDB4MDUsMHgwMiwweGMwLDB4MjAsMHg5MCwweDgwLDB4MmUsMHgwMCwweDA4LDB4MDAsMHg4MiwweDRjLDB4MDIsMHg4MCwweDAwIH0gfSwKK3sgIDE2LCAweGM4NDAsIDAsIHsweGEwLDB4NjEsMHgwYiwweDMwLDB4MDIsMHhhMCwweDAwLDB4ODAsMHgwMCwweGEwLDB4MzAsMHg4OCwweGIxLDB4MGEsMHg0OCwweDA0IH0gfSwKK3sgIDE2LCAweGM4NTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmMsMHgwMCwweGZmLDB4MDAsMHgyZCwweGM4IH0gfSwKK3sgIDE2LCAweGM4NjAsIDAsIHsweDBjLDB4M2QsMHgwMywweGU0LDB4MDAsMHhkYiwweDAyLDB4M2UsMHhmMCwweDJjLDB4OTAsMHg0YiwweDdjLDB4MDAsMHhjMSwweDAwIH0gfSwKK3sgIDE2LCAweGM4NzAsIDAsIHsweDMyLDB4MjAsMHg0ZiwweGYwLDB4MTMsMHhlMCwweDAwLDB4ZTgsMHgwMSwweDMyLDB4MDAsMHg4YywweGFjLDB4MDMsMHg2YSwweDA0IH0gfSwKK3sgIDE2LCAweGM4ODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4ZWMsMHgwMCwweGZiLDB4MDQsMHgzZSwweGMyIH0gfSwKK3sgIDE2LCAweGM4OTAsIDAsIHsweDRmLDB4YjAsMHgwMywweGUwLDB4MDQsMHhmYSwweDQwLDB4M2UsMHhjMiwweDRlLDB4OTgsMHgyMywweGFjLDB4MTAsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGM4YTAsIDAsIHsweDNlLDB4NTAsMHgwNywweGIwLDB4MTMsMHhhYywweDAwLDB4ZmIsMHgwMCwweDNlLDB4YzIsMHgwZiwweDkyLDB4MDMsMHhhMCwweDAwIH0gfSwKK3sgIDE2LCAweGM4YjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZGMsMHgwMCwweGNmLDB4MDAsMHgzZiwweGMwIH0gfSwKK3sgIDE2LCAweGM4YzAsIDAsIHsweDBjLDB4YzgsMHgyMywweDM2LDB4ODIsMHhjZiwweDgwLDB4M2YsMHg4MCwweDBjLDB4ZTAsMHgwMywweGVjLDB4MDAsMHhmOSwweDIwIH0gfSwKK3sgIDE2LCAweGM4ZDAsIDAsIHsweDMzLDB4YzAsMHgwZSwweGYwLDB4MDMsMHhmOCwweDEwLDB4ZGMsMHgwMCwweDMzLDB4MDAsMHg0YywweGU4LDB4MjEsMHgwMCwweDQ0IH0gfSwKK3sgIDE2LCAweGM4ZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MSwweDA0LDB4NmMsMHgwMCwweGFiLDB4MDAsMHgyZSwweGMwIH0gfSwKK3sgIDE2LCAweGM4ZjAsIDAsIHsweDRhLDB4OGQsMHg0MiwweDIxLDB4MDAsMHg4YiwweDQyLDB4MmUsMHhkMiwweDA4LDB4YjAsMHgwMywweGVjLDB4MDAsMHhiOCwweDg4IH0gfSwKK3sgIDE2LCAweGM5MDAsIDAsIHsweDM0LDB4NjIsMHgwZCwweGIwLDB4MDIsMHhlNCwweDAwLDB4OGIsMHgwMCwweDIyLDB4YzAsMHgwOCwweDkwLDB4MGEsMHgyMCwweDQwIH0gfSwKK3sgIDE2LCAweGM5MTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweDhiLDB4MDAsMHgyZSwweGMwIH0gfSwKK3sgIDE2LCAweGM5MjAsIDAsIHsweDA4LDB4YTAsMHgwMiwweDBkLDB4MDAsMHg4OSwweDEwLDB4MmUsMHgwOCwweDI4LDB4OTIsMHgwMiwweGVjLDB4MDQsMHhiYiwweDAwIH0gfSwKK3sgIDE2LCAweGM5MzAsIDAsIHsweDIyLDB4YTAsMHgwOCwweGIwLDB4MDIsMHg2NCwweDAyLDB4YjMsMHgwMiwweDIwLDB4YzAsMHgwOCwweGEyLDB4MDIsMHhhMCwweDAwIH0gfSwKK3sgIDE2LCAweGM5NDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MGMsMHgwMCwweGEzLDB4MDAsMHgyZSwweGMwIH0gfSwKK3sgIDE2LCAweGM5NTAsIDAsIHsweDBhLDB4OTAsMHgyMiwweDBjLDB4MTAsMHg4MCwweDAwLDB4MmMsMHgwMCwweDE4LDB4MDIsMHg4MiwweGNjLDB4MDAsMHhiMCwweDAwIH0gfSwKK3sgIDE2LCAweGM5NjAsIDAsIHsweDI2LDB4NDAsMHgwOSwweDMwLDB4MDIsMHhjOCwweDIwLDB4ODAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDEwLDB4MDYsMHg4MiwweDAxIH0gfSwKK3sgIDE2LCAweGM5NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGNiLDB4MDAsMHgyZSwweGMwIH0gfSwKK3sgIDE2LCAweGM5ODAsIDAsIHsweDBjLDB4YTEsMHgwMiwweDI0LDB4MDAsMHg4OCwweDAwLDB4M2MsMHgwMCwweDBjLDB4ODAsMHgwMywweGVjLDB4MDAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweGM5OTAsIDAsIHsweDMyLDB4ODAsMHgwZSwweGIwLDB4MDMsMHhjYywweDgwLDB4ZGIsMHgwMCwweDMyLDB4YzAsMHgwYywweGEwLDB4MDMsMHg4MCwweDAzIH0gfSwKK3sgIDE2LCAweGM5YTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDFkLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwIH0gfSwKK3sgIDE2LCAweGM5YjAsIDAsIHsweDRmLDB4YzIsMHgxMywweGQ0LDB4MTAsMHhmYywweDAwLDB4M2YsMHgwMCwweDBmLDB4MDAsMHgwMywweGJjLDB4MDAsMHhmYywweDAwIH0gfSwKK3sgIDE2LCAweGM5YzAsIDAsIHsweDNmLDB4NDAsMHgwZiwweGYwLDB4MjMsMHhlMCwweDEyLDB4ZmMsMHgwMSwweGJmLDB4MDAsMHgwZiwweGQwLDB4MDMsMHg2OCwweDAyIH0gfSwKK3sgIDE2LCAweGM5ZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHgwMCwweGM3LDB4ODAsMHgzMywweGMwIH0gfSwKK3sgIDE2LCAweGM5ZTAsIDAsIHsweDhiLDB4YjQsMHgwMywweGIwLDB4YzAsMHhjZiwweDJlLDB4MWYsMHgwYywweDRmLDB4YzMsMHgwMywweDMwLDB4ODAsMHhmZiwweDAxIH0gfSwKK3sgIDE2LCAweGM5ZjAsIDAsIHsweDNmLDB4MDgsMHgwZiwweGYwLDB4MDAsMHg3YywweDAwLDB4ZmYsMHgyMSwweDMzLDB4ZTQsMHgwYywweGUwLDB4MDMsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweGNhMDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4ZWUsMHgwMCwweDhiLDB4ODIsMHgyMywweGYwIH0gfSwKK3sgIDE2LCAweGNhMTAsIDAsIHsweDBiLDB4YjUsMHgxMiwweDBkLDB4ODgsMHg4OCwweGMwLDB4MGUsMHg5OCwweDBiLDB4ODYsMHgwMiwweDIxLDB4MDAsMHhiYiwweGMwIH0gfSwKK3sgIDE2LCAweGNhMjAsIDAsIHsweDJlLDB4ZTQsMHg0YiwweGY3LDB4ODMsMHgyZiwweDQ0LDB4YmYsMHg5MCwweDIyLDB4YzgsMHg0OCwweGE2LDB4ODIsMHgyMCwweDA0IH0gfSwKK3sgIDE2LCAweGNhMzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgwOSwweDhhLDB4MDAsMHgyMCwweDUwIH0gfSwKK3sgIDE2LCAweGNhNDAsIDAsIHsweDRiLDB4YjIsMHgwYSwweDgwLDB4Y2MsMHg4MywweDAxLDB4MGMsMHg4YywweDBiLDB4MjMsMHgwYSwweDA0LDB4NjAsMHhiMywweDE0IH0gfSwKK3sgIDE2LCAweGNhNTAsIDAsIHsweDI0LDB4NDAsMHg0YiwweDMwLDB4MDIsMHhjYywweDEwLDB4YjMsMHgwMCwweDIwLDB4YzgsMHhlOSwweDExLDB4MDYsMHg2MiwweDAxIH0gfSwKK3sgIDE2LCAweGNhNjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDE1LDB4YWMsMHgwMSwweDhhLDB4ODAsMHhhMiwweDQ0IH0gfSwKK3sgIDE2LCAweGNhNzAsIDAsIHsweDBiLDB4YjAsMHgwMiwweGExLDB4MDQsMHg4OCwweDQwLDB4MmUsMHhhMCwweDBiLDB4MjAsMHgwMiwweDI4LDB4MjAsMHhiYiwweDQwIH0gfSwKK3sgIDE2LCAweGNhODAsIDAsIHsweDJlLDB4NDAsMHgwYiwweGIwLDB4MDIsMHgyYywweDA4LDB4YmIsMHgwMCwweDIyLDB4YzAsMHgwOSwweGIwLDB4MDIsMHg3MCwweDA0IH0gfSwKK3sgIDE2LCAweGNhOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWMsMHgwMCwweGMzLDB4ODMsMHgzMiwweGUwIH0gfSwKK3sgIDE2LCAweGNhYTAsIDAsIHsweDhmLDB4MDAsMHgwMywweGEwLDB4MDIsMHhjYiwweGM0LDB4M2UsMHgyOCwweDA3LDB4OGIsMHgwMywweDIxLDB4MDAsMHhmOSwweGMwIH0gfSwKK3sgIDE2LCAweGNhYjAsIDAsIHsweDNlLDB4MTAsMHgwZiwweGIwLDB4MDMsMHhlYywweDAwLDB4N2IsMHgwMCwweDMyLDB4YzAsMHgwZCwweGEwLDB4MDMsMHg1MCwweDA0IH0gfSwKK3sgIDE2LCAweGNhYzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4OWMsMHgwMiwweGZmLDB4MDAsMHgzZiwweGUwIH0gfSwKK3sgIDE2LCAweGNhZDAsIDAsIHsweDBmLDB4ZjQsMHg0MywweDVlLDB4ODAsMHhmYywweDk0LDB4M2YsMHgwMCwweDBmLDB4YzAsMHgyYiwweGYyLDB4NTAsMHhmZCwweDIxIH0gfSwKK3sgIDE2LCAweGNhZTAsIDAsIHsweDdlLDB4ODQsMHg4ZiwweGYwLDB4MDMsMHg2YywweDBjLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwZSwweDYyLDB4MDMsMHhiOCwweDAwIH0gfSwKK3sgIDE2LCAweGNhZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGViLDB4MDAsMHgzMiwweDQwIH0gfSwKK3sgIDE2LCAweGNiMDAsIDAsIHsweDJjLDB4ODAsMHgwMywweDY5LDB4MDAsMHhjYiwweDMwLDB4YjIsMHgwMCwweDRmLDB4YjMsMHg0MywweGU1LDB4MDAsMHhjYiwweDQwIH0gfSwKK3sgIDE2LCAweGNiMTAsIDAsIHsweDcyLDB4MTgsMHgyYywweGIwLDB4MDMsMHhlYywweDI4LDB4YzMsMHgyMSwweDNhLDB4YzEsMHgwZiwweDk0LDB4MDMsMHgxMCwweDA0IH0gfSwKK3sgIDE2LCAweGNiMjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4M2MsMHgwMCwweDhiLDB4MjAsMHgyMiwweDUwIH0gfSwKK3sgIDE2LCAweGNiMzAsIDAsIHsweDA4LDB4YjAsMHgwMiwweDI4LDB4MDAsMHg4OCwweGMwLDB4MmEsMHgwMCwweDhiLDB4YjQsMHgwMiwweGU4LDB4MDAsMHhkYiwweDAwIH0gfSwKK3sgIDE2LCAweGNiNDAsIDAsIHsweDYyLDB4MzAsMHgwOCwweGYwLDB4MDIsMHhmYywweDAwLDB4OGYsMHg4MCwweDIyLDB4YzAsMHgwYiwweDk1LDB4NDcsMHgzMiwweDAwIH0gfSwKK3sgIDE2LCAweGNiNTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMCwweGIxLDB4MDAsMHgyMCwweGMyIH0gfSwKK3sgIDE2LCAweGNiNjAsIDAsIHsweDQ4LDB4MzAsMHgwMiwweDQ5LDB4ODAsMHg4MywweDQyLDB4NjAsMHgxMiwweDBiLDB4MzAsMHgwMiwweGM4LDB4MDAsMHg4MiwweDAyIH0gfSwKK3sgIDE2LCAweGNiNzAsIDAsIHsweDJjLDB4MzAsMHgwOSwweGIwLDB4MDIsMHhjZiwweDAxLDB4ODMsMHg1MCwweDJhLDB4YzAsMHgwYiwweDIwLDB4MDIsMHhiOCwweDAwIH0gfSwKK3sgIDE2LCAweGNiODAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAxLDB4MWUsMHgwMCwweDlkLDB4ODAsMHhhMCwweGUwIH0gfSwKK3sgIDE2LCAweGNiOTAsIDAsIHsweDA4LDB4NzksMHgyMiwweDVlLDB4NjAsMHg4NywweDkwLDB4MjksMHhhMCwweDBiLDB4NzgsMHgwMiwweGM2LDB4MDAsMHg5MiwweDgxIH0gfSwKK3sgIDE2LCAweGNiYTAsIDAsIHsweDA1LDB4ZTAsMHgwOSwweDc4LDB4MDIsMHhkZSwweDQwLDB4ODcsMHg4MCwweDIxLDB4ZTAsMHgwYiwweDI5LDB4MDIsMHgwOCwweDAwIH0gfSwKK3sgIDE2LCAweGNiYjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHg0MCwweGYyLDB4MDAsMHgzMCwweGMwIH0gfSwKK3sgIDE2LCAweGNiYzAsIDAsIHsweDA4LDB4M2EsMHgwMywweDQ0LDB4MDQsMHhjMywweDE0LDB4MzAsMHhjMCwweDBmLDB4MjIsMHgwMywweGNjLDB4ODAsMHhjMiwweDAwIH0gfSwKK3sgIDE2LCAweGNiZDAsIDAsIHsweGE0LDB4ZDIsMHgwZCwweDMwLDB4MTMsMHhjYywweDIwLDB4YzMsMHgwMCwweDM4LDB4YzQsMHg0ZiwweDA0LDB4NDMsMHgxMiwweDAyIH0gfSwKK3sgIDE2LCAweGNiZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDFkLDB4OWMsMHgwMCwweGVlLDB4MDAsMHgzZiwweGUwIH0gfSwKK3sgIDE2LCAweGNiZjAsIDAsIHsweDBmLDB4NzAsMHgwMywweGI0LDB4MDIsMHhmNCwweDEwLDB4M2YsMHhjMCwweDhmLDB4YTAsMHgwMywweGZjLDB4MDAsMHg3ZSwweDAwIH0gfSwKK3sgIDE2LCAweGNjMDAsIDAsIHsweDNiLDB4YzAsMHgwZSwweGYwLDB4ODMsMHhlYywweDAwLDB4ZjcsMHgwMCwweDNmLDB4YzAsMHgwZiwweGMwLDB4MDMsMHhkMCwweDA2IH0gfSwKK3sgIDE2LCAweGNjMTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZmMsMHgwMCwweGY5LDB4MDAsMHgzZSwweGMwIH0gfSwKK3sgIDE2LCAweGNjMjAsIDAsIHsweDBmLDB4YTAsMHgwMywweGFhLDB4MTIsMHhjYiwweDAxLDB4MzIsMHg4MCwweDBmLDB4YjAsMHgxMywweDI4LDB4MTQsMHhmOSwweDgwIH0gfSwKK3sgIDE2LCAweGNjMzAsIDAsIHsweDNhLDB4NDAsMHgwMywweGI0LDB4MDMsMHhlYywweDQyLDB4Y2IsMHgxOCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHgyYSwweDAwIH0gfSwKK3sgIDE2LCAweGNjNDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDExLDB4OWQsMHgwMCwweGI1LDB4MDAsMHgyZCwweGM0IH0gfSwKK3sgIDE2LCAweGNjNTAsIDAsIHsweDBiLDB4NzAsMHg0YiwweDdjLDB4MDAsMHg4NCwweDAwLDB4MjEsMHg4MCwweDBiLDB4NzAsMHgwMiwweDk0LDB4MTAsMHhiMiwweDAwIH0gfSwKK3sgIDE2LCAweGNjNjAsIDAsIHsweDI5LDB4YzAsMHgwYiwweDcyLDB4ODIsMHhkYywweDAwLDB4ODcsMHgyMCwweDJkLDB4YzEsMHgwZSwweDcwLDB4MDIsMHgxMiwweDA0IH0gfSwKK3sgIDE2LCAweGNjNzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHgwMCwweGI3LDB4ODAsMHgyZCwweGUwIH0gfSwKK3sgIDE2LCAweGNjODAsIDAsIHsweDBiLDB4NjgsMHgwMiwweDllLDB4MDAsMHg4MywweDgwLDB4MjEsMHhlMCwweDViLDB4MzgsMHgwMiwweDFlLDB4MDAsMHhiNCwweGMwIH0gfSwKK3sgIDE2LCAweGNjOTAsIDAsIHsweDI1LDB4ZTAsMHgwOSwweDc4LDB4MzIsMHhjZSwweDAwLDB4OTcsMHg4MCwweDJkLDB4ZTAsMHgwYiwweDVjLDB4NGUsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweGNjYTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE0LDB4Y2MsMHgwMCwweGIzLDB4NDQsMHgyYywweGMwIH0gfSwKK3sgIDE2LCAweGNjYjAsIDAsIHsweDBiLDB4M2MsMHgwMiwweGNjLDB4NDAsMHg5MywweDA4LDB4MjAsMHhlMCwweDBiLDB4MzAsMHgwMiwweDhjLDB4MTAsMHhiMywweGMwIH0gfSwKK3sgIDE2LCAweGNjYzAsIDAsIHsweDI4LDB4ZDgsMHgxYiwweDMwLDB4MDIsMHhjYywweDA4LDB4OTMsMHgwMSwweDZjLDB4YzAsMHgwYSwweGI4LDB4ODIsMHgxMiwweDA0IH0gfSwKK3sgIDE2LCAweGNjZDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweGY2LDB4MTAsMHgzZSwweDgwIH0gfSwKK3sgIDE2LCAweGNjZTAsIDAsIHsweDRiLDB4ZWQsMHg4MywweGI4LDB4MDAsMHhjZSwweGU0LDB4YjMsMHhhMywweDBmLDB4ZTAsMHgwMywweDM4LDB4MDAsMHhmZSwweDAwIH0gfSwKK3sgIDE2LCAweGNjZjAsIDAsIHsweDNiLDB4ODAsMHgwZCwweGEwLDB4MDIsMHhlOCwweDAwLDB4ZGEsMHgwMCwweDNlLDB4ODAsMHgwZiwweGU4LDB4MDIsMHgzYSwweDA0IH0gfSwKK3sgIDE2LCAweGNkMDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4ZTAsMHgxMCwweGY4LDB4NDAsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGNkMTAsIDAsIHsweDBmLDB4ODAsMHgxMywweDYwLDB4MDAsMHhlMCwweDAwLDB4M2UsMHgwMCwweDQzLDB4MDgsMHgwMywweGUwLDB4MDAsMHhmOCwweDA4IH0gfSwKK3sgIDE2LCAweGNkMjAsIDAsIHsweDNhLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZTgsMHg0MCwweDNlLDB4MDAsMHgwZSwweDgwLDB4MjMsMHhkMiwweDAwIH0gfSwKK3sgIDE2LCAweGNkMzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4YzQsMHgwMCwweGQ5LDB4YzAsMHhiZSwweDQwIH0gfSwKK3sgIDE2LCAweGNkNDAsIDAsIHsweDBmLDB4OTAsMHgwMywweGU2LDB4MDAsMHhmOSwweDAwLDB4MzIsMHg0MCwweDAxLDB4OWEsMHgwMywweDI0LDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGNkNTAsIDAsIHsweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjNCwweDQwLDB4MDksMHgxMCwweDBlLDB4NDAsMHgwZiwweDlhLDB4MDMsMHgwMiwweDA0IH0gfSwKK3sgIDE2LCAweGNkNjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NjQsMHgwNCwweDg5LDB4MDQsMHhhMiwweDYwIH0gfSwKK3sgIDE2LCAweGNkNzAsIDAsIHsweDhiLDB4OWQsMHg4MCwweGE2LDB4MDAsMHhiOSwweDgwLDB4MjIsMHg0MCwweDQ4LDB4OTgsMHgwMiwweDI0LDB4MDAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweGNkODAsIDAsIHsweDJlLDB4NDAsMHg4YiwweDkwLDB4MDIsMHhlNCwweDk0LDB4ODksMHg2MCwweDJlLDB4NDAsMHgwYiwweDk0LDB4MGIsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGNkOTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweDk5LDB4MDgsMHhhZSwweDQ4IH0gfSwKK3sgIDE2LCAweGNkYTAsIDAsIHsweDRiLDB4MTAsMHgwMiwweGU1LDB4ODEsMHhiOSwweDEwLDB4MjAsMHg0NCwweDFiLDB4OTQsMHgwMiwweDI0LDB4MTAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweGNkYjAsIDAsIHsweDZlLDB4NjAsMHgwYiwweDkwLDB4MDIsMHhlNCwweDAwLDB4ODksMHgwMCwweDJlLDB4NDAsMHgwYiwweDk0LDB4MDIsMHgwNiwweDAwIH0gfSwKK3sgIDE2LCAweGNkYzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDQsMHg4MCwweDg5LDB4MDAsMHhhMCwweDY4IH0gfSwKK3sgIDE2LCAweGNkZDAsIDAsIHsweDBiLDB4MTIsMHgwMiwweDg0LDB4ODksMHhiMSwweDIwLDB4MjAsMHg0OCwweDFhLDB4MTIsMHgxMiwweDA0LDB4ODAsMHhiMSwweDIyIH0gfSwKK3sgIDE2LCAweGNkZTAsIDAsIHsweDBjLDB4NDgsMHgwYiwweDEyLDB4MDIsMHhjNCwweDgxLDB4YTEsMHgyMCwweDJjLDB4NDAsMHgwYiwweDEyLDB4MDIsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweGNkZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGQ4LDB4MDAsMHhiZSwweDAwIH0gfSwKK3sgIDE2LCAweGNlMDAsIDAsIHsweDBmLDB4MDUsMHgwYiwweGUxLDB4NDAsMHhmOCwweDAwLDB4MzIsMHgxNCwweDBmLDB4ODUsMHgwMywweDIxLDB4NDAsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGNlMTAsIDAsIHsweDJlLDB4ODAsMHgwZiwweDg1LDB4MTMsMHhlMCwweDAyLDB4YzgsMHgwMCwweDNlLDB4MTQsMHgwZiwweDA1LDB4MDEsMHgyZSwweDAzIH0gfSwKK3sgIDE2LCAweGNlMjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDFkLDB4ZTQsMHg0MCwweGZkLDB4MDAsMHhiZiwweDQ0IH0gfSwKK3sgIDE2LCAweGNlMzAsIDAsIHsweDBmLDB4ZDEsMHgwMywweGY0LDB4NDAsMHg3ZCwweDEwLDB4YmYsMHg0NCwweDQ1LDB4ZjEsMHgyYiwweGY0LDB4NDAsMHhmZCwweDEwIH0gfSwKK3sgIDE2LCAweGNlNDAsIDAsIHsweDNmLDB4NDQsMHgwZiwweDkxLDB4MDMsMHhlNCwweDQwLDB4ZDksMHgxMCwweDNlLDB4NDAsMHgwZiwweGQxLDB4MDMsMHhhNiwweDA2IH0gfSwKK3sgIDE2LCAweGNlNTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZjYsMHgwMCwweGZkLDB4MDAsMHgxZiwweDYyIH0gfSwKK3sgIDE2LCAweGNlNjAsIDAsIHsweDBmLDB4ZDgsMHg4MiwweDM2LDB4MDAsMHhiZCwweGEwLDB4M2IsMHg2OCwweDBjLDB4ZGMsMHg4MywweDI2LDB4YzgsMHhkOSwweGEwIH0gfSwKK3sgIDE2LCAweGNlNzAsIDAsIHsweDMzLDB4NjAsMHgwZCwweDk5LDB4ODMsMHg1NiwweDIwLDB4ZDUsMHhhOCwweDJlLDB4NDQsMHgwYywweGQ4LDB4ODMsMHg4NiwweDA0IH0gfSwKK3sgIDE2LCAweGNlODAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDEwLDB4ZTEsMHg0OCwweGI4LDB4MDAsMHgyZSwweDAwIH0gfSwKK3sgIDE2LCAweGNlOTAsIDAsIHsweDBiLDB4MGEsMHg4MiwweDIyLDB4MjAsMHhiOCwweDUwLDB4MjIsMHhiYSwweDA4LDB4OGEsMHgyMiwweDIyLDB4ODAsMHg4OCwweDAwIH0gfSwKK3sgIDE2LCAweGNlYTAsIDAsIHsweDIyLDB4MDEsMHgwOCwweDBjLDB4MDIsMHgyMCwweDAwLDB4ODgsMHgwMCwweDJlLDB4MjgsMHg4OCwweDg4LDB4MDIsMHhjZSwweDA0IH0gfSwKK3sgIDE2LCAweGNlYjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHgwMCwweGIxLDB4MDAsMHgyYywweDQwIH0gfSwKK3sgIDE2LCAweGNlYzAsIDAsIHsweDFiLDB4MTAsMHgwYSwweDg0LDB4NDAsMHhiMSwweDAwLDB4MjgsMHg1OCwweDBhLDB4MzIsMHgwMiwweDA1LDB4MDAsMHg5OSwweDQwIH0gfSwKK3sgIDE2LCAweGNlZDAsIDAsIHsweDIwLDB4NjUsMHgwOSwweDEwLDB4NDIsMHhjNCwweDAwLDB4OTEsMHgwMCwweDJjLDB4NDAsMHgwYSwweDMwLDB4ODIsMHhjMiwweDAxIH0gfSwKK3sgIDE2LCAweGNlZTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDExLDB4YTQsMHgwMCwweGI5LDB4MDAsMHgyZSwweDQwIH0gfSwKK3sgIDE2LCAweGNlZjAsIDAsIHsweDFiLDB4OTAsMHgwMiwweGE1LDB4ODAsMHhiOSwweDEwLDB4MjIsMHg0OCwweDA4LDB4MTAsMHg0MiwweDA0LDB4MTAsMHgwOSwweDAwIH0gfSwKK3sgIDE2LCAweGNmMDAsIDAsIHsweDIyLDB4NDAsMHgwOCwweDkwLDB4MDIsMHhlNCwweDAwLDB4OWIsMHgwMCwweDJjLDB4NDAsMHgwYSwweDk0LDB4MjIsMHhjNiwweDA0IH0gfSwKK3sgIDE2LCAweGNmMTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGY5LDB4MjAsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweGNmMjAsIDAsIHsweDBmLDB4OTAsMHgxMywweGE3LDB4MTAsMHhmOSwweDYwLDB4YmEsMHg1MCwweDJlLDB4OWMsMHgwYSwweDI1LDB4ODQsMHhkMSwweGYwIH0gfSwKK3sgIDE2LCAweGNmMzAsIDAsIHsweGIyLDB4NjAsMHgwZCwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZDksMHgwMCwweDNlLDB4NDAsMHgwZSwweDkwLDB4MDMsMHhhOCwweDAwIH0gfSwKK3sgIDE2LCAweGNmNDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAxLDB4YTQsMHgwYywweGY5LDB4OTAsMHgzZSwweDZhIH0gfSwKK3sgIDE2LCAweGNmNTAsIDAsIHsweDhmLDB4OTAsMHgyMywweDY2LDB4MDAsMHhmMSwweDA4LDB4M2MsMHg0MCwweDBmLDB4OWMsMHg0MywweGU0LDB4NDAsMHhmOSwweDgwIH0gfSwKK3sgIDE2LCAweGNmNjAsIDAsIHsweDNhLDB4NDQsMHgwZiwweDkwLDB4MDMsMHgyNCwweDA0LDB4ZTksMHgwMiwweDNlLDB4NDAsMHgyZCwweDkxLDB4MTMsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGNmNzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGU4LDB4MjAsMHgzZSwweDAxIH0gfSwKK3sgIDE2LCAweGNmODAsIDAsIHsweDBjLDB4MDAsMHgwMywweGExLDB4MjAsMHhlOCwweDUwLDB4MzIsMHgxMCwweDJjLDB4OGMsMHgwMywweDIxLDB4MDAsMHhlOCwweDAwIH0gfSwKK3sgIDE2LCAweGNmOTAsIDAsIHsweDMyLDB4MDIsMHgwZiwweDAwLDB4MTMsMHgyMCwweDg4LDB4YzgsMHgwOCwweDMyLDB4MDAsMHgwZiwweDhjLDB4MDMsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGNmYTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4MjgsMHgyMCwweDhlLDB4ZTMsMHgyZiwweDkwIH0gfSwKK3sgIDE2LCAweGNmYjAsIDAsIHsweDBhLDB4ZTAsMHgwNiwweDNiLDB4MDAsMHhlZSwweDA0LDB4MjMsMHg5MCwweDA4LDB4ZTAsMHgwMiwweDI4LDB4MDgsMHg4YSwweDAyIH0gfSwKK3sgIDE2LCAweGNmYzAsIDAsIHsweDc1LDB4OTAsMHg4YiwweGEwLDB4NDEsMHg1OCwweDkwLDB4OGUsMHg4MCwweDJhLDB4ODEsMHgwYiwweGUwLDB4MDMsMHg4YSwweDEwIH0gfSwKK3sgIDE2LCAweGNmZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGUsMHgwMCwweGEzLDB4MDAsMHg2YywweDYwIH0gfSwKK3sgIDE2LCAweGNmZTAsIDAsIHsweDA4LDB4MzgsMHgxYSwweDhlLDB4NDAsMHhhMCwweDgwLDB4MjAsMHhjYywweDA5LDB4MzAsMHgwMiwweDBjLDB4MDUsMHhhMywweDA0IH0gfSwKK3sgIDE2LCAweGNmZjAsIDAsIHsweDI4LDB4YzQsMHgwYiwweDMwLDB4MDIsMHgwZCwweDAxLDB4ODMsMHhjMCwweDIwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGQwMDAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDAxLDB4MWUsMHgwOCwweDg3LDB4MDAsMHgyZCwweDYyIH0gfSwKK3sgIDE2LCAweGQwMTAsIDAsIHsweDBiLDB4NzAsMHg5MiwweDFjLDB4MDgsMHhhMCwweDAwLDB4NjEsMHhjMCwweDA5LDB4NjAsMHgwNiwweDFjLDB4ODAsMHhhNywweDAwIH0gfSwKK3sgIDE2LCAweGQwMjAsIDAsIHsweDIxLDB4YzAsMHgwYiwweDcyLDB4MDIsMHg1OCwweDAxLDB4ODcsMHg4OCwweDI5LDB4YzAsMHgwYiwweDYwLDB4MTIsMHhhOCwweDAwIH0gfSwKK3sgIDE2LCAweGQwMzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgwMCwweGU2LDB4ODAsMHgzZCwweDYwIH0gfSwKK3sgIDE2LCAweGQwNDAsIDAsIHsweDBjLDB4NzgsMHg0MiwweDk2LDB4MDAsMHhlNCwweDgwLDB4YTMsMHg2MCwweDBkLDB4NzgsMHgwMywweDNmLDB4MDAsMHhlMywweDgwIH0gfSwKK3sgIDE2LCAweGQwNTAsIDAsIHsweDIxLDB4ZTAsMHgwZiwweDdiLDB4MDMsMHgxNiwweDA4LDB4YzcsMHg4MCwweDMxLDB4ZTIsMHg0ZiwweDc4LDB4NDMsMHhlYSwweDAyIH0gfSwKK3sgIDE2LCAweGQwNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDFkLDB4OGMsMHgwMSwweGY4LDB4MDAsMHgzYywweDQwIH0gfSwKK3sgIDE2LCAweGQwNzAsIDAsIHsweDBlLDB4YjAsMHgwMiwweGVjLDB4MDAsMHhmOCwweDAxLDB4M2UsMHg0MCwweDRlLDB4MzAsMHgzMywweGVkLDB4MjAsMHhkYiwweDAxIH0gfSwKK3sgIDE2LCAweGQwODAsIDAsIHsweGJlLDB4YzAsMHgwZiwweGI0LDB4MDMsMHhlYywweDAwLDB4ZmIsMHgwMCwweDNlLDB4ZDgsMHgwZiwweGEwLDB4MDMsMHhjMiwweDA2IH0gfSwKK3sgIDE2LCAweGQwOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHgwMCwweGM3LDB4ODQsMHgyMywweDYwIH0gfSwKK3sgIDE2LCAweGQwYTAsIDAsIHsweDBjLDB4NzgsMHgwYiwweGJlLDB4MDAsMHhmZCwweDgwLDB4M2YsMHhlMCwweDBmLDB4ZWIsMHgwMywweDNlLDB4MDAsMHhjZiwweDgwIH0gfSwKK3sgIDE2LCAweGQwYjAsIDAsIHsweDNiLDB4MjUsMHgwYywweGY4LDB4ODMsMHg3ZSwweDQwLDB4Y2QsMHg4MCwweDMzLDB4ZTIsMHgwYiwweGY5LDB4MDMsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGQwYzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4OWMsMHgwMiwweDg3LDB4MDAsMHgxNSwweDQ4IH0gfSwKK3sgIDE2LCAweGQwZDAsIDAsIHsweDA4LDB4NzAsMHgwMiwweDE0LDB4MjAsMHhiNiwweDAwLDB4MzUsMHg5YSwweDQ5LDB4YzgsMHgwMywweDljLDB4ODQsMHhhNywweDAwIH0gfSwKK3sgIDE2LCAweGQwZTAsIDAsIHsweDM5LDB4ZDAsMHgwYSwweDcwLDB4MDIsMHgxYSwweDA4LDB4YTQsMHgwMCwweDIxLDB4YzAsMHgwOSwweDYxLDB4NDIsMHgyYSwweDA0IH0gfSwKK3sgIDE2LCAweGQwZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwMCwweDg3LDB4MDAsMHgyMSwweDQwIH0gfSwKK3sgIDE2LCAweGQxMDAsIDAsIHsweDA4LDB4NzEsMHgwMiwweDk0LDB4MDAsMHhiNSwweDAwLDB4MmQsMHg0MCwweDBiLDB4ZjEsMHgyMiwweDVjLDB4MDIsMHgwNywweDA4IH0gfSwKK3sgIDE2LCAweGQxMTAsIDAsIHsweDJjLDB4NTAsMHgwOCwweDcwLDB4MDIsMHg1MCwweDAwLDB4ODcsMHgwMCwweDJkLDB4YzQsMHgwYiwweDUwLDB4NDIsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGQxMjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDE0LDB4Y2MsMHgwMCwweDgzLDB4MDIsMHgyNCwweDQwIH0gfSwKK3sgIDE2LCAweGQxMzAsIDAsIHsweDE4LDB4M2QsMHgwYSwweDAxLDB4MDAsMHhiMCwweDU4LDB4MjQsMHgyMCwweDA5LDB4MzAsMHgwMiwweDhmLDB4NDAsMHg4MywweGUwIH0gfSwKK3sgIDE2LCAweGQxNDAsIDAsIHsweDJjLDB4YzEsMHgwYSwweDMwLDB4NDIsMHgwOCwweDAwLDB4YjMsMHgwMSwweDZjLDB4YzAsMHgwOSwweDA4LDB4MTYsMHgwOCwweDA0IH0gfSwKK3sgIDE2LCAweGQxNTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4OGMsMHgwMCwweDhiLDB4MDAsMHgzMiwweDQwIH0gfSwKK3sgIDE2LCAweGQxNjAsIDAsIHsweDBjLDB4MjUsMHgwMywweGE4LDB4NDgsMHhmOCwweDgxLDB4M2UsMHg4MCwweDBmLDB4ODAsMHg2MywweDdjLDB4MDAsMHhjYiwweDgwIH0gfSwKK3sgIDE2LCAweGQxNzAsIDAsIHsweDNhLDB4YzAsMHgwYywweGYwLDB4MDMsMHg2YywweDAwLDB4Y2EsMHgwMiwweGJmLDB4YzAsMHgwZiwweDk4LDB4OGIsMHgyYSwweDA0IH0gfSwKK3sgIDE2LCAweGQxODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4ZWMsMHgwMCwweGY5LDB4MDAsMHgzZSwweDUwIH0gfSwKK3sgIDE2LCAweGQxOTAsIDAsIHsweDJmLDB4YTQsMHgwYiwweGM4LDB4MDAsMHhmMCwweDQwLDB4M2UsMHhkMCwweDBmLDB4YTAsMHgzMywweGVjLDB4MjAsMHhmYiwweDA0IH0gfSwKK3sgIDE2LCAweGQxYTAsIDAsIHsweDdhLDB4ZTAsMHgwZiwweGIwLDB4MDMsMHhlZCwweDA4LDB4ZTksMHgwMywweDMyLDB4YzAsMHgwZCwweDkwLDB4MDMsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGQxYjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZWMsMHg0MCwweGVlLDB4MDAsMHgzZSwweGMwIH0gfSwKK3sgIDE2LCAweGQxYzAsIDAsIHsweDBjLDB4ZGEsMHgwMywweDcwLDB4MDQsMHhjYywweDAyLDB4YjEsMHhhMCwweDBlLDB4ZjAsMHgyMywweGVjLDB4MDAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweGQxZDAsIDAsIHsweDM3LDB4MjAsMHhjZCwweGIwLDB4NzMsMHhlYywweDg4LDB4ZmIsMHg4MCwweDNmLDB4YzAsMHgwZiwweDMwLDB4MDMsMHgwMCwweDQ0IH0gfSwKK3sgIDE2LCAweGQxZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MSwweDA0LDB4NmUsMHgwMCwweDg4LDB4ODAsMHgyYywweGUxIH0gfSwKK3sgIDE2LCAweGQxZjAsIDAsIHsweDA4LDB4OTQsMHgwYSwweGE5LDB4MDIsMHg4OCwweDQwLDB4MjIsMHhkMCwweDA4LDB4YjksMHg0MiwweGVjLDB4MDQsMHhiYiwweDAwIH0gfSwKK3sgIDE2LCAweGQyMDAsIDAsIHsweDJjLDB4ZDQsMHgwZCwweGIwLDB4MDIsMHhlZCwweDIwLDB4YmIsMHhkMCwweDJlLDB4YzAsMHgwYiwweGIwLDB4MDIsMHhhMCwweDQwIH0gfSwKK3sgIDE2LCAweGQyMTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MjQsMHgwMCwweGFiLDB4ODAsMHgyZSwweGYwIH0gfSwKK3sgIDE2LCAweGQyMjAsIDAsIHsweDI5LDB4YTAsMHg4MiwweDZkLDB4MDAsMHg4OCwweDA4LDB4MjIsMHgwNCwweDA4LDB4OTAsMHg0MiwweGVjLDB4MDAsMHhiYiwweDAwIH0gfSwKK3sgIDE2LCAweGQyMzAsIDAsIHsweDJhLDB4ODEsMHgwOCwweGIwLDB4MDIsMHhlNCwweDA5LDB4YmEsMHgwNCwweDJlLDB4YzEsMHg0YiwweDk4LDB4ODIsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGQyNDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDQsMHgwMCwweDgzLDB4MDAsMHgyYywweGMwIH0gfSwKK3sgIDE2LCAweGQyNTAsIDAsIHsweDBhLDB4MjEsMHgwMiwweDg0LDB4MTAsMHg4MiwweDAwLDB4ZTAsMHgwMCwweDE4LDB4MGEsMHgxMiwweGNjLDB4MDAsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweGQyNjAsIDAsIHsweDBjLDB4YzAsMHgwOSwweDMwLDB4MDIsMHhjYywweDkwLDB4YjAsMHgwMCwweDJjLDB4YzAsMHgwYiwweDEwLDB4MDIsMHg4MiwweDAxIH0gfSwKK3sgIDE2LCAweGQyNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NjQsMHgwMCwweGViLDB4MDAsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGQyODAsIDAsIHsweDJjLDB4YjQsMHgwMywweDY0LDB4MDgsMHg4OCwweDAwLDB4YjIsMHgwMCwweDBjLDB4YjIsMHg0MywweGZjLDB4MDAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweGQyOTAsIDAsIHsweDU2LDB4MDAsMHgwYywweGYwLDB4MDEsMHhlNCwweDAwLDB4ZmIsMHgwMCwweDNmLDB4YzAsMHgwZiwweDgwLDB4MGIsMHgwMCwweDAzIH0gfSwKK3sgIDE2LCAweGQyYTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDFkLDB4ZjQsMHgwMCwweGZmLDB4MDAsMHgzZiwweDQwIH0gfSwKK3sgIDE2LCAweGQyYjAsIDAsIHsweDJkLDB4ZjAsMHg2MSwweGYwLDB4MDAsMHhmNCwweDAwLDB4MjcsMHgwMSwweDBkLDB4YjEsMHgxMSwweGZjLDB4MDAsMHhmZiwweDAyIH0gfSwKK3sgIDE2LCAweGQyYzAsIDAsIHsweDA3LDB4YzAsMHgwZiwweGYwLDB4MDMsMHhlYywweDQwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGMwLDB4MDMsMHg2OCwweDA2IH0gfSwKK3sgIDE2LCAweGQyZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZjYsMHgwMCwweGVmLDB4OTAsMHgzZCwweDRjIH0gfSwKK3sgIDE2LCAweGQyZTAsIDAsIHsweDJjLDB4YzAsMHgxMywweGY0LDB4MDgsMHhmZCwweDIwLDB4MzcsMHg0YywweDhlLDB4ODIsMHg4MywweDc0LDB4ODQsMHhkYywweGMyIH0gfSwKK3sgIDE2LCAweGQyZjAsIDAsIHsweDNmLDB4ZDgsMHgwZCwweGYyLDB4MDMsMHhlYywweGMwLDB4ZmYsMHg4MSwweDNmLDB4MDAsMHgwYywweGY4LDB4MDMsMHhmMCwweDAwIH0gfSwKK3sgIDE2LCAweGQzMDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4ZTYsMHgwMCwweDhiLDB4MjQsMHgyZSwweDVjIH0gfSwKK3sgIDE2LCAweGQzMTAsIDAsIHsweDA4LDB4OGQsMHgwMiwweGZmLDB4NDgsMHhiOSwweDkwLDB4MmYsMHg1NCwweDBiLDB4ODQsMHg4MiwweDNlLDB4NDAsMHhhMCwweDgwIH0gfSwKK3sgIDE2LCAweGQzMjAsIDAsIHsweDJlLDB4YzQsMHgwYSwweGZjLDB4NDIsMHhlZCwweDgwLDB4YjksMHg4MCwweDJlLDB4NjAsMHgwYSwweDk4LDB4MTIsMHhlMCwweDA0IH0gfSwKK3sgIDE2LCAweGQzMzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4ZTQsMHgwMSwweGEzLDB4MDAsMHgyOCwweDQ4IH0gfSwKK3sgIDE2LCAweGQzNDAsIDAsIHsweDBhLDB4MDAsMHg0MiwweGM0LDB4MDAsMHhiMSwweDAwLDB4MmMsMHg0OSwweDBiLDB4MGEsMHg0MiwweDA0LDB4YTIsMHg5MSwweDIxIH0gfSwKK3sgIDE2LCAweGQzNTAsIDAsIHsweDJjLDB4YzksMHgwOCwweDMxLDB4MDIsMHg4YywweGMxLDB4YTMsMHgwMCwweDJjLDB4NDAsMHgwOCwweDE4LDB4MDIsMHhhMiwweDAxIH0gfSwKK3sgIDE2LCAweGQzNjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDE1LDB4YTAsMHgyMCwweDhiLDB4ODIsMHgyZSwweDQ0IH0gfSwKK3sgIDE2LCAweGQzNzAsIDAsIHsweDU4LDB4ODAsMHgwMiwweGU0LDB4MDAsMHhiYiwweDEwLDB4MmUsMHg0MCwweDBiLDB4YTEsMHgxMiwweDBjLDB4MDEsMHg4OSwweDEwIH0gfSwKK3sgIDE2LCAweGQzODAsIDAsIHsweDJlLDB4YzAsMHgwYSwweGIwLDB4MDIsMHhlYywweDAxLDB4YjgsMHg4MCwweDJlLDB4ZTIsMHgwYSwweGExLDB4MDIsMHhmMCwweDA0IH0gfSwKK3sgIDE2LCAweGQzOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWIsMHg0MCwweGViLDB4NDAsMHgzZSwweDYwIH0gfSwKK3sgIDE2LCAweGQzYTAsIDAsIHsweDBlLDB4ODcsMHgzMywweGU0LDB4MDAsMHhiOSwweGExLDB4MzYsMHhjMCwweDBlLDB4YTgsMHgwYiwweDI2LDB4MDAsMHhkYSwweGMwIH0gfSwKK3sgIDE2LCAweGQzYjAsIDAsIHsweDNlLDB4YzAsMHg4ZCwweGIwLDB4MDMsMHhlYywweDAwLDB4ZmIsMHg4NSwweDNlLDB4ZTEsMHgwOCwweGI4LDB4MDMsMHg5MCwweDA1IH0gfSwKK3sgIDE2LCAweGQzYzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4YjgsMHgwMCwweGZmLDB4MDIsMHgyZiwweDYwIH0gfSwKK3sgIDE2LCAweGQzZDAsIDAsIHsweDAzLDB4ZTgsMHg4MywweGZjLDB4MTAsMHhmZCwweDgwLDB4MWYsMHg0MCwweDFmLDB4ZDAsMHgxMywweGJlLDB4NDAsMHhlZSwweDA0IH0gfSwKK3sgIDE2LCAweGQzZTAsIDAsIHsweDNmLDB4YzAsMHgwZiwweGYwLDB4NDMsMHhmYywweDA4LDB4ZmQsMHgwMCwweDNjLDB4YzAsMHgwZiwweGQwLDB4MTEsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGQzZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YTQsMHgwMCwweGRiLDB4MDAsMHhiMiwweDQwIH0gfSwKK3sgIDE2LCAweGQ0MDAsIDAsIHsweDBlLDB4OTQsMHgwMywweDI0LDB4MDAsMHhkOSwweDAwLDB4YmEsMHhjMCwweDBjLDB4MjAsMHgwMywweGU0LDB4OTAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweGQ0MTAsIDAsIHsweDNhLDB4YzAsMHgwYywweGIwLDB4MDMsMHhlYywweDAxLDB4ZmEsMHgwMCwweDNlLDB4ZDAsMHgyYywweDk4LDB4MDMsMHg5MCwweDA0IH0gfSwKK3sgIDE2LCAweGQ0MjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4MDMsMHgwMCwweDhiLDB4MDAsMHgyMiwweDQ4IH0gfSwKK3sgIDE2LCAweGQ0MzAsIDAsIHsweDA4LDB4ODQsMHgyMiwweDJjLDB4MDAsMHhiOSwweDAwLDB4MjIsMHhjMCwweDA4LDB4YTAsMHgwMiwweGVkLDB4MDAsMHg4YiwweGEwIH0gfSwKK3sgIDE2LCAweGQ0NDAsIDAsIHsweDIxLDB4YzAsMHgwOCwweGYwLDB4MDIsMHhmYywweDAwLDB4YjksMHg4MCwweDJlLDB4YzAsMHgwOCwweGEwLDB4MDIsMHgzMiwweDAwIH0gfSwKK3sgIDE2LCAweGQ0NTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NDUsMHgyMCwweDkzLDB4MDAsMHgyMiwweGY4IH0gfSwKK3sgIDE2LCAweGQ0NjAsIDAsIHsweDBiLDB4MzAsMHgwYSwweDg0LDB4NDAsMHhiMiwweDAwLDB4MjAsMHg0MCwweDA4LDB4MTAsMHgwMiwweGM0LDB4MDAsMHg4MCwweDgwIH0gfSwKK3sgIDE2LCAweGQ0NzAsIDAsIHsweDI4LDB4YzAsMHgyOCwweDM5LDB4MDIsMHg0YywweDAwLDB4YjEsMHgwMCwweDJjLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhiOCwweDAwIH0gfSwKK3sgIDE2LCAweGQ0ODAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAxLDB4MzYsMHgwMCwweDlmLDB4ODAsMHgyMSwweDYwIH0gfSwKK3sgIDE2LCAweGQ0OTAsIDAsIHsweDA5LDB4MzgsMHgwMiwweDllLDB4MDAsMHhiMiwweGMwLDB4MjAsMHg2MCwweDQ4LDB4NDgsMHgxMiwweGQ2LDB4YzYsMHg4NiwweGQwIH0gfSwKK3sgIDE2LCAweGQ0YTAsIDAsIHsweDIxLDB4ZTAsMHgwOCwweDc4LDB4MDAsMHhkZSwweDgwLDB4YjcsMHg4MiwweDJkLDB4ZTAsMHgwOCwweGY4LDB4MDIsMHgwOCwweDAwIH0gfSwKK3sgIDE2LCAweGQ0YjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgyMCwweGQzLDB4MTAsMHgzMCwweGM4IH0gfSwKK3sgIDE2LCAweGQ0YzAsIDAsIHsweDBmLDB4MzAsMHgwMywweDg0LDB4MDAsMHhmMSwweDAwLDB4MzAsMHg0MCwweDI0LDB4MTksMHgwMywweGU0LDB4YzAsMHhlMCwweDQwIH0gfSwKK3sgIDE2LCAweGQ0ZDAsIDAsIHsweDNhLDB4YzAsMHgwYywweDMyLDB4MDMsMHhjZSwweDgwLDB4YjEsMHgyOCwweDNjLDB4YzAsMHgwYywweDMwLDB4MTMsMHg5MiwweDAyIH0gfSwKK3sgIDE2LCAweGQ0ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDFkLDB4OWMsMHgwMCwweGU2LDB4MDAsMHg3ZiwweGMwIH0gfSwKK3sgIDE2LCAweGQ0ZjAsIDAsIHsweDBlLDB4ZjAsMHgyMywweDc0LDB4NDAsMHhmZiwweDEwLDB4M2YsMHg0MCwweDRmLDB4ZDAsMHgwMywweGZjLDB4ZDIsMHhjZSwweDA0IH0gfSwKK3sgIDE2LCAweGQ1MDAsIDAsIHsweDNmLDB4YzAsMHgwZiwweGY0LDB4MDMsMHhmYywweDAwLDB4ZmUsMHgwMCwweDNmLDB4YzAsMHgwZiwweDcxLDB4MDMsMHhkMCwweDEyIH0gfSwKK3sgIDE2LCAweGQ1MTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWUsMHgwMCwweGNiLDB4MDAsMHgxNiwweGMwIH0gfSwKK3sgIDE2LCAweGQ1MjAsIDAsIHsweDBkLDB4ODAsMHgwMywweDI3LDB4MjAsMHhjYiwweDAwLDB4M2UsMHhjMiwweDBhLDB4YjAsMHg1MywweGU0LDB4MjgsMHhjMSwweDgxIH0gfSwKK3sgIDE2LCAweGQ1MzAsIDAsIHsweDMyLDB4YzEsMHgwZSwweGI5LDB4MDMsMHgyYywweDAwLDB4ZjEsMHg4MCwweDM1LDB4ZTAsMHgwYywweGI4LDB4MDMsMHgyYSwweDA0IH0gfSwKK3sgIDE2LCAweGQ1NDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDExLDB4OWMsMHgwMiwweDg3LDB4MTAsMHgyZCwweDQwIH0gfSwKK3sgIDE2LCAweGQ1NTAsIDAsIHsweDA4LDB4NzAsMHgwMywweDVjLDB4MDAsMHhhNywweDAwLDB4MmQsMHg0MCwweDI4LDB4NzAsMHgwMiwweGQ0LDB4MDQsMHg4NywweDA0IH0gfSwKK3sgIDE2LCAweGQ1NjAsIDAsIHsweGExLDB4ZDAsMHgwYiwweDcyLDB4MDIsMHgxZCwweDAwLDB4ZjcsMHgwMCwweDIxLDB4YzAsMHgwZCwweDUwLDB4MDIsMHgxMiwweDA0IH0gfSwKK3sgIDE2LCAweGQ1NzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHgwMCwweDg1LDB4ODAsMHgyNSwweGUwIH0gfSwKK3sgIDE2LCAweGQ1ODAsIDAsIHsweDA5LDB4NzgsMHgwMiwweDM3LDB4MDMsMHg4NywweDgwLDB4MmYsMHhlMCwweDA4LDB4NzgsMHgxMiwweGM2LDB4MTAsMHg4ZCwweDgwIH0gfSwKK3sgIDE2LCAweGQ1OTAsIDAsIHsweDI1LDB4ZTgsMHgwYiwweDM4LDB4MDIsMHgxZSwweDgwLDB4YmMsMHg4NCwweDI1LDB4ZTAsMHgwOCwweDU4LDB4MDIsMHg3MCwweDAwIH0gfSwKK3sgIDE2LCAweGQ1YTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE0LDB4Y2QsMHg4MCwweDgzLDB4ODgsMHgyYywweGMwIH0gfSwKK3sgIDE2LCAweGQ1YjAsIDAsIHsweDA4LDB4M2MsMHgwMiwweDRlLDB4MDEsMHhhMywweGQyLDB4MmUsMHhjNCwweDA4LDB4YjEsMHgwMiwweGNjLDB4MDAsMHg4MywweDgwIH0gfSwKK3sgIDE2LCAweGQ1YzAsIDAsIHsweDI0LDB4YzEsMHgwYiwweDMwLDB4MDIsMHgwYywweDAwLDB4YjMsMHg0MCwweGEwLDB4ZDIsMHgwOSwweDMwLDB4MTIsMHg1MiwweDAwIH0gfSwKK3sgIDE2LCAweGQ1ZDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YmEsMHgwMCwweGNhLDB4YzAsMHgzNiwweDgwIH0gfSwKK3sgIDE2LCAweGQ1ZTAsIDAsIHsweDBkLDB4NjcsMHgxMywweDI4LDB4MDAsMHhjZSwweDAwLDB4M2UsMHhhMCwweDBjLDB4ZWQsMHgwMywweGU4LDB4MDAsMHhjZSwweGUwIH0gfSwKK3sgIDE2LCAweGQ1ZjAsIDAsIHsweDM2LDB4ODAsMHgxZSwweGEwLDB4MGIsMHgyOCwweDA0LDB4ZmUsMHgwMCwweGI3LDB4YjIsMHgwYywweGUwLDB4MGIsMHg3YSwweDAwIH0gfSwKK3sgIDE2LCAweGQ2MDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4ZTAsMHg0MCwweGY4LDB4MTAsMHgyZSwweDEwIH0gfSwKK3sgIDE2LCAweGQ2MTAsIDAsIHsweDBmLDB4ODAsMHgwMywweGUwLDB4MDEsMHhkOCwweDBhLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGMwLDB4MDIsMHhmOCwweDA4IH0gfSwKK3sgIDE2LCAweGQ2MjAsIDAsIHsweDNhLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhlMCwweDEwLDB4ZTgsMHgyMCwweGJlLDB4MDAsMHgwZiwweDgwLDB4MTMsMHg5MiwweDAwIH0gfSwKK3sgIDE2LCAweGQ2MzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTUsMHgwMCwweGZiLDB4MDAsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweGQ2NDAsIDAsIHsweDBjLDB4OTEsMHgwMywweDI2LDB4MDAsMHg2MSwweDgwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweDI0LDB4MDAsMHhjOSwweDAwIH0gfSwKK3sgIDE2LCAweGQ2NTAsIDAsIHsweDFlLDB4NDAsMHgwYywweDljLDB4MDMsMHhlNCwweDAxLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjMiwweDAwIH0gfSwKK3sgIDE2LCAweGQ2NjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NjcsMHgwMCwweGI5LDB4MDAsMHgyYywweDQwIH0gfSwKK3sgIDE2LCAweGQ2NzAsIDAsIHsweDAwLDB4OWMsMHgwMiwweGE2LDB4MDAsMHg3OSwweDAwLDB4MjIsMHg0MCwweDI4LDB4OTAsMHgwMiwweDI0LDB4MDAsMHg4OSwweDAwIH0gfSwKK3sgIDE2LCAweGQ2ODAsIDAsIHsweDJjLDB4NDQsMHgwOCwweDk4LDB4MDIsMHhlNCwweDAwLDB4YjksMHg4MCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhlMCwweDAxIH0gfSwKK3sgIDE2LCAweGQ2OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4MjQsMHgwMCwweGJiLDB4MDAsMHgyNiwweDUwIH0gfSwKK3sgIDE2LCAweGQ2YTAsIDAsIHsweDI4LDB4OTAsMHg4MiwweDI0LDB4ODQsMHg5OSwweDIwLDB4MjIsMHg0MCwweDQ5LDB4OTAsMHgwMiwweDI0LDB4MDAsMHg4OSwweDAwIH0gfSwKK3sgIDE2LCAweGQ2YjAsIDAsIHsweDJlLDB4NDAsMHgwOCwweDkwLDB4MDIsMHhlNCwweDAwLDB4YjksMHg2MCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhjNiwweDA0IH0gfSwKK3sgIDE2LCAweGQ2YzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDYsMHgwMCwweGIxLDB4MDAsMHgyZSwweDQ4IH0gfSwKK3sgIDE2LCAweGQ2ZDAsIDAsIHsweDA4LDB4MTIsMHgwMiwweDg0LDB4ODAsMHhiMSwweDIwLDB4YTAsMHg0OCwweDA5LDB4MTIsMHgwYSwweDA0LDB4ODAsMHg4MSwweDAwIH0gfSwKK3sgIDE2LCAweGQ2ZTAsIDAsIHsweDJjLDB4NDgsMHgyOCwweDEyLDB4NDIsMHhjNCwweDg4LDB4MzEsMHgwMCwweDJjLDB4NDAsMHgwYiwweDE4LDB4MDIsMHhjMiwweDAxIH0gfSwKK3sgIDE2LCAweGQ2ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGY4LDB4NTAsMHgzNiwweDE0IH0gfSwKK3sgIDE2LCAweGQ3MDAsIDAsIHsweDBjLDB4ODAsMHgwMywweDIwLDB4MDAsMHhlOCwweDAwLDB4MzIsMHgxNCwweDBjLDB4ODUsMHgwMywweDIxLDB4NDAsMHhjOCwweDUwIH0gfSwKK3sgIDE2LCAweGQ3MTAsIDAsIHsweDNlLDB4MTQsMHgwYywweDgwLDB4MDMsMHhlMSwweDQwLDB4MzgsMHgwMCwweDNlLDB4MDAsMHg4ZiwweDgwLDB4MDMsMHhlZSwweDAzIH0gfSwKK3sgIDE2LCAweGQ3MjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDFkLDB4ZDQsMHgwMCwweGZiLDB4MDQsMHgzZCwweDQ0IH0gfSwKK3sgIDE2LCAweGQ3MzAsIDAsIHsweDBmLDB4NTEsMHgyMywweGQ0LDB4NDgsMHhlZCwweDEwLDB4M2QsMHg0NCwweDRlLDB4ZDEsMHgyMywweGY0LDB4NDIsMHhmZCwweDAwIH0gfSwKK3sgIDE2LCAweGQ3NDAsIDAsIHsweDNlLDB4NDQsMHg4ZiwweDkxLDB4MDMsMHhlNCwweDU4LDB4ZmQsMHgwMCwweDNmLDB4NTAsMHgwZiwweDUwLDB4MDMsMHhlNiwweDA2IH0gfSwKK3sgIDE2LCAweGQ3NTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZjQsMHgwMCwweGY5LDB4MDAsMHgzZCwweDQwIH0gfSwKK3sgIDE2LCAweGQ3NjAsIDAsIHsweDBjLDB4ZDAsMHgwMywweGY0LDB4MDAsMHhkZCwweDAyLDB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMywweGU0LDB4NDAsMHhjOSwweDEwIH0gfSwKK3sgIDE2LCAweGQ3NzAsIDAsIHsweDM3LDB4NDAsMHgwNywweGQwLDB4MDcsMHgyNCwweDAwLDB4ZTUsMHgwMCwweDJmLDB4NmEsMHgwZiwweDcwLDB4MDMsMHgwNiwweDAwIH0gfSwKK3sgIDE2LCAweGQ3ODAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDEwLDB4ZTAsMHgwMCwweGI4LDB4MDAsMHgzYSwweDAwIH0gfSwKK3sgIDE2LCAweGQ3OTAsIDAsIHsweDgwLDB4ODAsMHgwMiwweGUwLDB4MDAsMHg4OCwweDAwLDB4MmUsMHgwMCwweDBhLDB4ODAsMHg1MywweGEyLDB4ODAsMHgyYywweGEwIH0gfSwKK3sgIDE2LCAweGQ3YTAsIDAsIHsweDIyLDB4MDAsMHgwYiwweDgwLDB4MGEsMHgyMCwweDAwLDB4YjgsMHgwMCwweDJlLDB4MTAsMHgwOSwweDgwLDB4MDMsMHgwZSwweDA0IH0gfSwKK3sgIDE2LCAweGQ3YjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHgwMCwweGIxLDB4MDAsMHg2YywweDQwIH0gfSwKK3sgIDE2LCAweGQ3YzAsIDAsIHsweDJhLDB4MTAsMHgwMiwweDg0LDB4MDEsMHg4MSwweDgwLDB4MmUsMHg0MCwweDA5LDB4MTAsMHgwMiwweGY0LDB4MDAsMHg4ZCwweDA0IH0gfSwKK3sgIDE2LCAweGQ3ZDAsIDAsIHsweDIwLDB4NDAsMHgwYiwweDEwLDB4MDIsMHg4NCwweDAwLDB4YjEsMHgwMCwweDJjLDB4NDAsMHgwYiwweDk4LDB4MDIsMHg0MiwweDAxIH0gfSwKK3sgIDE2LCAweGQ3ZTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDExLDB4YTQsMHgyMCwweGI5LDB4MDAsMHgyYSwweDQwIH0gfSwKK3sgIDE2LCAweGQ3ZjAsIDAsIHsweDg4LDB4YjQsMHgwMiwweGU2LDB4MDEsMHhhOSwweDIwLDB4MmUsMHg0OCwweDBhLDB4OTAsMHgwMCwweGE0LDB4NDAsMHhhZCwweDQwIH0gfSwKK3sgIDE2LCAweGQ4MDAsIDAsIHsweDIyLDB4NDAsMHgwYiwweDkwLDB4MTIsMHhhNCwweDA0LDB4YjksMHgwMSwweDJlLDB4NDEsMHgwYiwweDkwLDB4MDIsMHgwNiwweDA0IH0gfSwKK3sgIDE2LCAweGQ4MTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGY5LDB4YzAsMHgzZSwweDYwIH0gfSwKK3sgIDE2LCAweGQ4MjAsIDAsIHsweDBjLDB4OTQsMHgxMywweGE2LDB4MDIsMHhkOSwweDQyLDB4MWMsMHg2MCwweDBjLDB4OWUsMHgwMSwweGM2LDB4MDQsMHhjMSwweDAwIH0gfSwKK3sgIDE2LCAweGQ4MzAsIDAsIHsweGIyLDB4NDAsMHgxZiwweDkwLDB4MDIsMHhhNCwweDAwLDB4ZTksMHgwOCwweDNlLDB4NjgsMHg0ZiwweDk4LDB4MGIsMHg2OCwweDA0IH0gfSwKK3sgIDE2LCAweGQ4NDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAxLDB4YTYsMHg0MCwweGY5LDB4MjAsMHgzOCwweDcwIH0gfSwKK3sgIDE2LCAweGQ4NTAsIDAsIHsweDBmLDB4OTEsMHgwMywweGU0LDB4MDAsMHhkOSwweDgwLDB4M2UsMHg0MCwweDBmLDB4OWMsMHgxMywweGE0LDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGQ4NjAsIDAsIHsweDNlLDB4NDAsMHgwZiwweDEwLDB4MDMsMHg2NCwweDEwLDB4ZjksMHgwYSwweDNlLDB4NTAsMHgwZCwweDlhLDB4MDMsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGQ4NzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTEsMHgwMCwweGQ4LDB4MDQsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGQ4ODAsIDAsIHsweDBjLDB4ODEsMHgxMywweGMwLDB4MDIsMHhkOCwweDIwLDB4M2UsMHgwMCwweDJkLDB4ODQsMHgwMywweGUwLDB4MDAsMHhjYywweDA4IH0gfSwKK3sgIDE2LCAweGQ4OTAsIDAsIHsweDNhLDB4MDAsMHgwZiwweDgwLDB4NDMsMHhlMCwweDAwLDB4ZjgsMHg0MSwweDMyLDB4MDAsMHgwNywweDgxLDB4OGIsMHgwYSwweDA0IH0gfSwKK3sgIDE2LCAweGQ4YTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4M2EsMHg2MCwweDhhLDB4MDAsMHgyZiwweGE4IH0gfSwKK3sgIDE2LCAweGQ4YjAsIDAsIHsweDBhLDB4ZTAsMHgyMiwweGU4LDB4MDIsMHg3ZSwweDQ4LDB4MmUsMHg4MCwweDA4LDB4YTAsMHg0MiwweGU4LDB4MDQsMHg4ZSwweDAwIH0gfSwKK3sgIDE2LCAweGQ4YzAsIDAsIHsweDIzLDB4YTgsMHgwYiwweGE4LDB4ODIsMHhlOCwweDAwLDB4ZWUsMHgwMCwweGEyLDB4ODAsMHg0YiwweDYwLDB4MDIsMHgwYSwweDAwIH0gfSwKK3sgIDE2LCAweGQ4ZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweDkzLDB4MDAsMHg2YywweGMwIH0gfSwKK3sgIDE2LCAweGQ4ZTAsIDAsIHsweDA4LDB4MzAsMHgwMiwweGNjLDB4MDAsMHgxMywweDgxLDB4MmMsMHhjMCwweDA4LDB4MzAsMHgwMiwweGNlLDB4NDAsMHg4MiwweDQwIH0gfSwKK3sgIDE2LCAweGQ4ZjAsIDAsIHsweDI4LDB4ZTAsMHgwYiwweDM4LDB4MDIsMHhjYywweDAwLDB4YjMsMHgxMCwweDI0LDB4YzAsMHg4YiwweDM4LDB4MDIsMHgwYSwweDAwIH0gfSwKK3sgIDE2LCAweGQ5MDAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDAxLDB4MWUsMHgwMCwweDg3LDB4MjAsMHgyZiwweGMwIH0gfSwKK3sgIDE2LCAweGQ5MTAsIDAsIHsweDBhLDB4NzAsMHgwMiwweGRjLDB4MGEsMHhiNiwweDAwLDB4MmMsMHhjOCwweDg4LDB4NzIsMHgwNiwweGQ4LDB4MDAsMHg4NiwweDAwIH0gfSwKK3sgIDE2LCAweGQ5MjAsIDAsIHsweDIxLDB4YzAsMHgwYiwweDcwLDB4MDIsMHhkYywweDg0LDB4YWYsMHg4MCwweGE1LDB4YzAsMHgwYiwweGQwLDB4MDIsMHgyOCwweDAwIH0gfSwKK3sgIDE2LCAweGQ5MzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgwMCwweGQ3LDB4ODAsMHgzZCwweGEwIH0gfSwKK3sgIDE2LCAweGQ5NDAsIDAsIHsweDFjLDB4NzgsMHgxMywweGQ2LDB4MDIsMHhkNywweDgwLDB4M2QsMHhlYywweDA4LDB4N2UsMHgyMywweGZlLDB4MDAsMHhjZSwweDgwIH0gfSwKK3sgIDE2LCAweGQ5NTAsIDAsIHsweDM5LDB4NjAsMHgwZiwweDc4LDB4MDMsMHhkZiwweDAwLDB4ZjYsMHg4MCwweDc1LDB4ZTAsMHgwZiwweDc4LDB4MDMsMHgyYSwweDAyIH0gfSwKK3sgIDE2LCAweGQ5NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDFkLDB4OGMsMHgwMCwweGZiLDB4MTAsMHgzZSwweDgwIH0gfSwKK3sgIDE2LCAweGQ5NzAsIDAsIHsweDFmLDB4YTAsMHgyMSwweGNjLDB4MDAsMHhmYSwweDAwLDB4M2UsMHhjMCwweDBlLDB4YjAsMHgwMywweGU4LDB4MDIsMHhmYSwweDAwIH0gfSwKK3sgIDE2LCAweGQ5ODAsIDAsIHsweDNlLDB4NDAsMHgwZiwweGIwLDB4MTMsMHhlYywweDAwLDB4ZWEsMHgwMSwweDNhLDB4YzAsMHgwZiwweDkwLDB4MDMsMHhjMiwweDA2IH0gfSwKK3sgIDE2LCAweGQ5OTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmMsMHgwMCwweGZmLDB4ODAsMHgzZiwweDYwIH0gfSwKK3sgIDE2LCAweGQ5YTAsIDAsIHsweDA4LDB4OTksMHgwNywweDdlLDB4MDAsMHhkZCwweDgwLDB4M2YsMHhlMiwweDBjLDB4ZjgsMHgwMywweGY2LDB4MDIsMHhkZiwweDgwIH0gfSwKK3sgIDE2LCAweGQ5YjAsIDAsIHsweGIzLDB4ZTAsMHgwYywweGY4LDB4MDMsMHgzZSwweDQxLDB4Y2MsMHg4MCwweDMzLDB4ZTQsMHgwZiwweGY4LDB4MDMsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGQ5YzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4OWMsMHg0MCwweGI3LDB4MDAsMHgyZCwweGMwIH0gfSwKK3sgIDE2LCAweGQ5ZDAsIDAsIHsweDBkLDB4NWEsMHgyMiwweGRjLDB4ODAsMHg3NSwweDAwLDB4MmQsMHhjMCwweDA4LDB4NzEsMHgwMiwweGYwLDB4MjAsMHg4NywweDAwIH0gfSwKK3sgIDE2LCAweGQ5ZTAsIDAsIHsweDIxLDB4YzAsMHgwYSwweDcwLDB4MDIsMHgxYywweDAwLDB4ZDQsMHgyOCwweDIxLDB4YzAsMHgwYiwweDcyLDB4MDIsMHhlYSwweDA0IH0gfSwKK3sgIDE2LCAweGQ5ZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHg0MCwweGI3LDB4MDAsMHgyZCwweDAwIH0gfSwKK3sgIDE2LCAweGRhMDAsIDAsIHsweDA4LDB4NzIsMHgyMiwweGY0LDB4MDAsMHg4NywweDAwLDB4MmQsMHhjMiwweDA4LDB4NzAsMHgwMiwweGQ0LDB4MDAsMHg4NywweDgwIH0gfSwKK3sgIDE2LCAweGRhMTAsIDAsIHsweDI1LDB4NDAsMHgwOSwweDMwLDB4MDIsMHg1YywweDAxLDB4YWQsMHgwMCwweDI5LDB4ZDAsMHg0YiwweDcwLDB4MDIsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGRhMjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDE0LDB4Y2MsMHgwMCwweGJiLDB4YzgsMHgyYywweGEwIH0gfSwKK3sgIDE2LCAweGRhMzAsIDAsIHsweDA5LDB4MjAsMHgwMiwweGNlLDB4MDAsMHhhMywweDAwLDB4MmMsMHhlMCwweGE4LDB4M2QsMHg0MiwweGMyLDB4MDAsMHg4YiwweDgwIH0gfSwKK3sgIDE2LCAweGRhNDAsIDAsIHsweDI0LDB4NDAsMHgwYiwweDMwLDB4MGEsMHg2YywweDA4LDB4YTMsMHg0MCwweGE4LDB4ZTAsMHgwYiwweDM0LDB4MDIsMHhjOCwweDA0IH0gfSwKK3sgIDE2LCAweGRhNTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YWQsMHgwMCwweGZmLDB4NDgsMHgzYywweDI4IH0gfSwKK3sgIDE2LCAweGRhNjAsIDAsIHsweDBjLDB4YTksMHgyMywweDZjLDB4ODAsMHg4YiwweDAwLDB4M2YsMHhjMCwweDBjLDB4ZmMsMHgwMywweGVjLDB4MDAsMHhkOCwweDgwIH0gfSwKK3sgIDE2LCAweGRhNzAsIDAsIHsweDM0LDB4NDAsMHgwZCwweDMwLDB4MDMsMHg3YywweDAyLDB4YTMsMHg0MCwweDM4LDB4NjgsMHgwZiwweDI0LDB4MDMsMHhlYSwweDA0IH0gfSwKK3sgIDE2LCAweGRhODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4ZWQsMHg4OCwweGZiLDB4MDAsMHgzZSwweDUwIH0gfSwKK3sgIDE2LCAweGRhOTAsIDAsIHsweDBmLDB4YTEsMHgwMywweGVjLDB4MDQsMHgzYSwweGMwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHg4MywweGU4LDB4MDIsMHhmOCwweDEwIH0gfSwKK3sgIDE2LCAweGRhYTAsIDAsIHsweDNhLDB4NDEsMHgwZSwweDkwLDB4MDMsMHhhYywweDAwLDB4OWIsMHgwOCwweGI2LDB4NDAsMHgwZiwweDgxLDB4MDMsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGRhYjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHhiMywweDIwIH0gfSwKK3sgIDE2LCAweGRhYzAsIDAsIHsweDBjLDB4NTAsMHgxMywweDFjLDB4MDksMHhjZCwweDgzLDB4MzMsMHhjMCwweDgzLDB4NzAsMHgwMCwweDNjLDB4MDAsMHhkYywweDEwIH0gfSwKK3sgIDE2LCAweGRhZDAsIDAsIHsweDMyLDB4NjAsMHgwZSwweGYxLDB4NDMsMHgyYywweDAwLDB4Y2UsMHgwNCwweDNiLDB4NzAsMHgwYywweGYwLDB4ODMsMHgwMCwweDQ0IH0gfSwKK3sgIDE2LCAweGRhZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MSwweDA0LDB4NjcsMHg4MCwweGJiLDB4MDEsMHg2MiwweDIxIH0gfSwKK3sgIDE2LCAweGRhZjAsIDAsIHsweDhhLDB4ODksMHgyMCwweDJjLDB4MDAsMHg4MCwweGUwLDB4MjIsMHhjMCwweDBiLDB4YjAsMHgwMywweGQ4LDB4MTAsMHg4YywweDA0IH0gfSwKK3sgIDE2LCAweGRiMDAsIDAsIHsweDIyLDB4NDAsMHgwNSwweDkwLDB4MDIsMHhhYywweDAwLDB4ZDgsMHg4MCwweDM2LDB4NDAsMHgwYSwweDkwLDB4MDIsMHgyMCwweDQwIH0gfSwKK3sgIDE2LCAweGRiMTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MjYsMHgwMCwweGJiLDB4MDAsMHgyMiwweDA2IH0gfSwKK3sgIDE2LCAweGRiMjAsIDAsIHsweDA4LDB4ODAsMHgwMiwweDJlLDB4MDAsMHg4OCwweDIwLDB4MjIsMHhjMCwweDA5LDB4YjAsMHgwMiwweGE0LDB4MDAsMHg5OSwweDAwIH0gfSwKK3sgIDE2LCAweGRiMzAsIDAsIHsweDYyLDB4YzQsMHgwOCwweGIwLDB4MDYsMHgyYywweDAwLDB4ODgsMHg4MCwweDIyLDB4NDEsMHgwOCwweGEwLDB4MDIsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGRiNDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MGMsMHgwMCwweGIzLDB4MDAsMHgyMCwweDQwIH0gfSwKK3sgIDE2LCAweGRiNTAsIDAsIHsweDBhLDB4MDAsMHg4MiwweDBjLDB4MDAsMHg4MCwweDAwLDB4MjAsMHhjMCwweDBiLDB4MzAsMHgyMiwweGEwLDB4MDAsMHg4MSwweDAwIH0gfSwKK3sgIDE2LCAweGRiNjAsIDAsIHsweGEwLDB4YzAsMHgwOSwweDMwLDB4MDIsMHg4YywweDAwLDB4OTAsMHgwMCwweDI0LDB4NDAsMHgwYSwweDI4LDB4MDIsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweGRiNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NjAsMHgwMCwweGZiLDB4MDIsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGRiODAsIDAsIHsweDJjLDB4OTIsMHgwMywweDJjLDB4MDIsMHg4OCwweDAwLDB4MzEsMHhjMCwweDBiLDB4YjUsMHgwMiwweGE0LDB4MDAsMHhkMSwweDA0IH0gfSwKK3sgIDE2LCAweGRiOTAsIDAsIHsweDMyLDB4NDAsMHgwZSwweDkwLDB4MDMsMHgyYywweDQwLDB4YzksMHgwMCwweDNhLDB4NDAsMHg4YywweGEwLDB4MDMsMHgwMCwweDAzIH0gfSwKK3sgIDE2LCAweGRiYTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDFkLDB4ZjQsMHgwMCwweGZmLDB4MDAsMHgyZiwweDAwIH0gfSwKK3sgIDE2LCAweGRiYjAsIDAsIHsweDBmLDB4YzAsMHgwMywweGRjLDB4MDAsMHhmYywweDAwLDB4M2YsMHhjMSwweDBmLDB4ZjAsMHg0MywweGYwLDB4MDAsMHhmZCwweDAwIH0gfSwKK3sgIDE2LCAweGRiYzAsIDAsIHsweDNmLDB4NDAsMHg0ZiwweGQwLDB4MDMsMHhmYywweDAwLDB4ZjUsMHgwMCwweDNmLDB4NDAsMHgwZiwweGUwLDB4MDMsMHhlOCwweDA2IH0gfSwKK3sgIDE2LCAweGRiZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZDgsMHg4MCwweGNjLDB4MDAsMHhiNywweDA0IH0gfSwKK3sgIDE2LCAweGRiZTAsIDAsIHsweDRlLDB4ZTEsMHgwMywweDNjLDB4MjAsMHhkZiwweDEwLDB4MzEsMHg4MCwweDA2LDB4ZjAsMHgwMywweDdmLDB4MDAsMHhmZiwweGMwIH0gfSwKK3sgIDE2LCAweGRiZjAsIDAsIHsweDNiLDB4YzAsMHgwZSwweGYyLDB4MDMsMHg1ZSwweDAwLDB4ZWYsMHgxMCwweDMzLDB4ZDAsMHgyYywweGYyLDB4MDMsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweGRjMDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDEwLDB4ZTksMHgwMCwweDg4LDB4YzYsMHgyMCwweDVjIH0gfSwKK3sgIDE2LCAweGRjMTAsIDAsIHsweDA4LDB4YTQsMHg1NywweDY1LDB4MDAsMHg4ZiwweDUyLDB4MmEsMHhmMCwweDA5LDB4ZmMsMHgwMiwweDA0LDB4MDAsMHhiYiwweDAwIH0gfSwKK3sgIDE2LCAweGRjMjAsIDAsIHsweDJkLDB4ZDksMHgwOSwweDc0LDB4ODMsMHg2NCwweDI4LDB4ODMsMHg0NCwweDIyLDB4ODQsMHg4OCwweDA2LDB4ODIsMHgzMCwweDA0IH0gfSwKK3sgIDE2LCAweGRjMzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4YzksMHgwMCwweDgwLDB4MTAsMHgyMCwweDA4IH0gfSwKK3sgIDE2LCAweGRjNDAsIDAsIHsweDA4LDB4MzEsMHgxMiwweDA0LDB4YjIsMHhhMywweDAwLDB4MjAsMHg4NCwweDFiLDB4MzQsMHgwMiwweDBjLDB4ODAsMHhiMywweDIwIH0gfSwKK3sgIDE2LCAweGRjNTAsIDAsIHsweDJjLDB4YzcsMHgwOSwweDM2LDB4MDIsMHg4YywweDgwLDB4OTMsMHg0MCwweGFjLDB4YzgsMHgwOCwweDMxLDB4MjgsMHgzMiwweDAxIH0gfSwKK3sgIDE2LCAweGRjNjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDE1LDB4YTksMHgwMCwweDg4LDB4MDAsMHhhMiwweDUwIH0gfSwKK3sgIDE2LCAweGRjNzAsIDAsIHsweDA4LDB4MzUsMHgwMiwweDI0LDB4MDAsMHg4YiwweDA0LDB4MmUsMHhjMSwweDA5LDB4YjAsMHgwMiwweDI0LDB4OTQsMHhiYiwweDAwIH0gfSwKK3sgIDE2LCAweGRjODAsIDAsIHsweDJlLDB4YzAsMHgwYiwweGIwLDB4MDIsMHhjYywweDYwLDB4OGIsMHgwMCwweDJlLDB4ODAsMHgwOCwweDgwLDB4MDAsMHgzMCwweDA0IH0gfSwKK3sgIDE2LCAweGRjOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE1LDB4ZTcsMHgwMiwweGNiLDB4MTgsMHhiMiwweDgwIH0gfSwKK3sgIDE2LCAweGRjYTAsIDAsIHsweDJjLDB4YWMsMHgwYSwweDJlLDB4MDgsMHhlYiwweDAwLDB4MzIsMHgxMiwweDRlLDB4YjAsMHgwMywweDJiLDB4ODAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweGRjYjAsIDAsIHsweDNhLDB4YzAsMHgwYSwweGIwLDB4MDMsMHhhYiwweDA4LDB4ZWIsMHgwNCwweDJlLDB4NDgsMHgwYywweGI4LDB4ODMsMHgwMCwweDA0IH0gfSwKK3sgIDE2LCAweGRjYzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4YjYsMHg4MCwweGZmLDB4ODAsMHgzOSwweGNhIH0gfSwKK3sgIDE2LCAweGRjZDAsIDAsIHsweDBkLDB4ZTgsMHgwMywweGQ2LDB4NDAsMHhlNywweDA0LDB4M2IsMHg2NiwweDRlLDB4NzAsMHgwMywweGI4LDB4MDAsMHhmZiwweDAxIH0gfSwKK3sgIDE2LCAweGRjZTAsIDAsIHsweDNmLDB4YzAsMHg2YywweGYwLDB4MDMsMHg3MCwweDA2LDB4ZTcsMHgwMCwweDMxLDB4MDQsMHgwZiwweGMxLDB4NDMsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGRjZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4ODUsMHgwMCwweGNiLDB4NDAsMHgzMiwweDkwIH0gfSwKK3sgIDE2LCAweGRkMDAsIDAsIHsweDJmLDB4YjAsMHgwYiwweDY0LDB4ODAsMHhmYiwweDA4LDB4YmEsMHgxMCwweDBkLDB4YjAsMHhhNywweDJkLDB4MDAsMHhmYiwweDA0IH0gfSwKK3sgIDE2LCAweGRkMTAsIDAsIHsweDNlLDB4YzAsMHg4ZSwweGIwLDB4MDMsMHg2ZCwweDAwLDB4ZGIsMHgwMSwweDMyLDB4NDAsMHg4YywweDMzLDB4MDMsMHg5MCwweDA0IH0gfSwKK3sgIDE2LCAweGRkMjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4MjQsMHgwMCwweDgzLDB4ZTAsMHhhMiwweGQwIH0gfSwKK3sgIDE2LCAweGRkMzAsIDAsIHsweDQwLDB4YjAsMHgwMiwweDI1LDB4MDQsMHhiZiwweDgwLDB4YTAsMHg1MCwweDA4LDB4ZjgsMHgwMiwweDIwLDB4MDAsMHg4YiwweDAyIH0gfSwKK3sgIDE2LCAweGRkNDAsIDAsIHsweDJmLDB4ZDAsMHgwOCwweGYwLDB4MDIsMHgyNCwweDAwLDB4OGYsMHg4MCwweDM2LDB4MDEsMHgwOCwweDg0LDB4NDIsMHgzNiwweDAwIH0gfSwKK3sgIDE2LCAweGRkNTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDA1LDB4NDQsMHgwMCwweDgzLDB4NDgsMHgyMCwweGM0IH0gfSwKK3sgIDE2LCAweGRkNjAsIDAsIHsweDA5LDB4MDAsMHgwMiwweDQ2LDB4MDAsMHhiMywweDAxLDB4YTgsMHg5MCwweDE5LDB4MzAsMHgxMiwweDhjLDB4MDAsMHhhMywweDA0IH0gfSwKK3sgIDE2LCAweGRkNzAsIDAsIHsweDJlLDB4ZTIsMHgwYSwweGIwLDB4MDIsMHgwYywweDAwLDB4ODMsMHg0OSwweDI4LDB4YzAsMHgwOSwweDNjLDB4MDIsMHgzOCwweDAwIH0gfSwKK3sgIDE2LCAweGRkODAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmMCwweDAxLDB4MzYsMHgwNCwweDgzLDB4ODAsMHgyMSwweGUxIH0gfSwKK3sgIDE2LCAweGRkOTAsIDAsIHsweDA4LDB4MzgsMHgxMiwweDFlLDB4MjgsMHhiMywweDk4LDB4MjEsMHhhMCwweDE5LDB4MzgsMHg4MiwweDk2LDB4MDAsMHg4NywweDgzIH0gfSwKK3sgIDE2LCAweGRkYTAsIDAsIHsweDJkLDB4ZTIsMHgwOCwweDc4LDB4MjIsMHgzNiwweDhjLDB4ODcsMHg4MCwweDJkLDB4ZTAsMHgwOSwweDc5LDB4MDIsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGRkYjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MDQsMHgwMCwweGMzLDB4MzAsMHgzMCwweGM4IH0gfSwKK3sgIDE2LCAweGRkYzAsIDAsIHsweDRkLDB4MDAsMHgwYiwweDRjLDB4ODAsMHhmMywweDEyLDB4MzgsMHhjMCwweDBkLDB4M2EsMHgwMiwweDhjLDB4ODAsMHhmMywweDAwIH0gfSwKK3sgIDE2LCAweGRkZDAsIDAsIHsweDNjLDB4YzAsMHgwZSwweDMwLDB4MGIsMHgwZSwweDAwLDB4YzMsMHgwYywweDNhLDB4YzAsMHgwZCwweDMwLDB4MDMsMHgxMiwweDAyIH0gfSwKK3sgIDE2LCAweGRkZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDFkLDB4YjQsMHgwNiwweGZmLDB4MTAsMHgzZiwweGMwIH0gfSwKK3sgIDE2LCAweGRkZjAsIDAsIHsweDBmLDB4YjAsMHgxMywweGJjLDB4MDAsMHhmZiwweDEwLDB4N2YsMHhjMCwweDBlLDB4ZjEsMHhhMywweDdjLDB4MDAsMHhmZiwweDEyIH0gfSwKK3sgIDE2LCAweGRlMDAsIDAsIHsweDNmLDB4YzIsMHgwZiwweGY1LDB4MjMsMHhiYywweDQxLDB4ZWYsMHgxOCwweDM3LDB4ODAsMHhhZSwweGMwLDB4MDMsMHg1MCwweDA2IH0gfSwKK3sgIDE2LCAweGRlMTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZTQsMHgwMCwweGRiLDB4MDAsMHgzZSwweGRhIH0gfSwKK3sgIDE2LCAweGRlMjAsIDAsIHsweDBjLDB4ODAsMHgwMywweDY2LDB4MTAsMHg4YiwweDAwLDB4MzIsMHg4MCwweDhjLDB4YjYsMHgwMywweDRhLDB4MDAsMHg0YiwweDgwIH0gfSwKK3sgIDE2LCAweGRlMzAsIDAsIHsweDMyLDB4YzgsMHgwYywweGI0LDB4MDMsMHgwYSwweDEwLDB4ZGIsMHgwMCwweDNlLDB4YzEsMHgwYywweGIwLDB4NDMsMHgyYSwweDAwIH0gfSwKK3sgIDE2LCAweGRlNDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDExLDB4YjQsMHgwMCwweDg3LDB4MDQsMHgyYywweGMwIH0gfSwKK3sgIDE2LCAweGRlNTAsIDAsIHsweDBkLDB4NzAsMHgwMywweDFjLDB4MDgsMHg4NywweDQ4LDB4MjAsMHg4MSwweDBkLDB4NzIsMHg4MiwweDVjLDB4MDAsMHhkNywweDAwIH0gfSwKK3sgIDE2LCAweGRlNjAsIDAsIHsweDIxLDB4Y2MsMHgyOCwweGYwLDB4MDIsMHgxYywweDEwLDB4ODcsMHgyMCwweDJjLDB4MDAsMHgwOCwweDQwLDB4MGEsMHgzMiwweDA0IH0gfSwKK3sgIDE2LCAweGRlNzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4OTYsMHgwMCwweGI3LDB4ODEsMHgyZCwweGUwIH0gfSwKK3sgIDE2LCAweGRlODAsIDAsIHsweDA4LDB4NDgsMHgwMiwweDBlLDB4MDQsMHg4NywweDgwLDB4MjEsMHhlMCwweDA4LDB4NzgsMHgwMiwweDNlLDB4MDEsMHg4NywweDgwIH0gfSwKK3sgIDE2LCAweGRlOTAsIDAsIHsweDIxLDB4ZTAsMHgxOCwweDc5LDB4MDIsMHgzYSwweDAxLDB4OTcsMHhhMCwweDJkLDB4NjAsMHgwOCwweDM4LDB4MDIsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGRlYTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE0LDB4YzYsMHgwMCwweGEzLDB4YzYsMHgyYywweGMwIH0gfSwKK3sgIDE2LCAweGRlYjAsIDAsIHsweDA5LDB4MzAsMHgwMiwweDBjLDB4MDEsMHg4MywweDAwLDB4MjAsMHhlMCwweDA5LDB4MzAsMHgwMiwweDRlLDB4MDAsMHg5MywweDAwIH0gfSwKK3sgIDE2LCAweGRlYzAsIDAsIHsweDIwLDB4YzAsMHg0OSwweDMwLDB4MjIsMHgwZiwweDY0LDB4ODMsMHgwMiwweDZjLDB4ZDQsMHgyOCwweDMwLDB4MDIsMHgxMiwweDA0IH0gfSwKK3sgIDE2LCAweGRlZDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDExLDB4YWIsMHg4MCwweGZhLDB4ZTAsMHgzYywweDg4IH0gfSwKK3sgIDE2LCAweGRlZTAsIDAsIHsweDBjLDB4ZTAsMHgwMiwweDI4LDB4MDIsMHhjYSwweDAwLDB4YjMsMHhhOSwweDBjLDB4YTAsMHgwMywweDNiLDB4MTAsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGRlZjAsIDAsIHsweGEyLDB4ODAsMHgwYywweGEwLDB4MGIsMHgzOCwweDAwLDB4ZGEsMHgwMCwweDNmLDB4YjAsMHgwYywweGU2LDB4MDMsMHgzYSwweDA0IH0gfSwKK3sgIDE2LCAweGRmMDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4YzAsMHgyMCwweDk4LDB4MDgsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGRmMTAsIDAsIHsweDBmLDB4ODAsMHgwYiwweGUxLDB4MDAsMHhmOCwweDAxLDB4M2MsMHgxMCwweDRmLDB4MDAsMHgwMywweGEwLDB4NDAsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGRmMjAsIDAsIHsweDNlLDB4MTAsMHgwZSwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNjLDB4MDIsMHgyZiwweDA0LDB4OTMsMHhkMiwweDAwIH0gfSwKK3sgIDE2LCAweGRmMzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGMxLDB4YzEsMHgzMiwweDQwIH0gfSwKK3sgIDE2LCAweGRmNDAsIDAsIHsweDBjLDB4OTgsMHgwMywweDI2LDB4NDAsMHhmOSwweDAwLDB4MzIsMHg0MCwweDBjLDB4OTgsMHgwMywweDI0LDB4MjQsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGRmNTAsIDAsIHsweDNjLDB4NjAsMHgwYywweDEwLDB4MDMsMHhhNCwweDAwLDB4ZjksMHg4MiwweDMyLDB4NDAsMHgwYywweDkwLDB4MDMsMHgwMiwweDA0IH0gfSwKK3sgIDE2LCAweGRmNjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4MDAsMHgyMiwweDUwIH0gfSwKK3sgIDE2LCAweGRmNzAsIDAsIHsweDBkLDB4OTgsMHgwMiwweDI1LDB4ODAsMHhiOSwweDAwLDB4MjIsMHg1MiwweDBkLDB4OWMsMHgwMiwweDI0LDB4MDAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweGRmODAsIDAsIHsweDJlLDB4NjAsMHgwOCwweDkwLDB4NDIsMHgyNCwweDAwLDB4YjksMHg0MCwweDM2LDB4NDAsMHgwOCwweDkwLDB4MGEsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGRmOTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweDhkLDB4MDAsMHgyMywweDQwIH0gfSwKK3sgIDE2LCAweGRmYTAsIDAsIHsweDA4LDB4MTIsMHgwMiwweDI0LDB4MDAsMHhhMSwweDEwLDB4YTIsMHg2MCwweDA4LDB4OTIsMHg4YSwweDI0LDB4MDAsMHhiOSwweDAxIH0gfSwKK3sgIDE2LCAweGRmYjAsIDAsIHsweDJlLDB4NDYsMHgwOCwweDkwLDB4MDIsMHhhNCwweDAwLDB4YjEsMHg1MCwweDIyLDB4NDAsMHgyOCwweDkwLDB4ODIsMHgwNiwweDAwIH0gfSwKK3sgIDE2LCAweGRmYzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDQsMHg4NCwweDg1LDB4MjAsMHhhMSwweGQ4IH0gfSwKK3sgIDE2LCAweGRmZDAsIDAsIHsweDA5LDB4MTAsMHgwMiwweDA0LDB4ODAsMHhiMywweDIwLDB4MjAsMHg0MCwweDI5LDB4MTIsMHgwNiwweDA0LDB4MDAsMHhiMSwweDAxIH0gfSwKK3sgIDE2LCAweGRmZTAsIDAsIHsweDJjLDB4NDgsMHgyOCwweDEyLDB4MDIsMHgwNCwweDAwLDB4YjEsMHgyMCwweDI0LDB4NDgsMHgwOCwweDEyLDB4MDIsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweGRmZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MiwweDhhLDB4MDAsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweGUwMDAsIDAsIHsweDBjLDB4MDUsMHgwMywweDIxLDB4NDAsMHhlMCwweDUwLDB4YjIsMHgwMCwweDJjLDB4ODAsMHgwMiwweDIxLDB4NDAsMHhmMCwweDUwIH0gfSwKK3sgIDE2LCAweGUwMTAsIDAsIHsweDNjLDB4MTQsMHgwYywweDg1LDB4MTMsMHhhMSwweDUwLDB4ZjgsMHg1MCwweDMyLDB4MTQsMHgwYywweDg1LDB4MjMsMHgyZSwweDAzIH0gfSwKK3sgIDE2LCAweGUwMjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDFkLDB4ZjQsMHg0MCwweGY5LDB4MTAsMHgzZSwweDQ0IH0gfSwKK3sgIDE2LCAweGUwMzAsIDAsIHsweDBmLDB4ZDQsMHgwYiwweGY0LDB4NDQsMHhmOSwweDEwLDB4M2YsMHg1MCwweDRmLDB4MTEsMHgwMywweGY0LDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGUwNDAsIDAsIHsweDNlLDB4NDQsMHgwZiwweDkxLDB4NTMsMHhmNCwweDE0LDB4ZjksMHgxMCwweDNmLDB4NDQsMHgwZiwweGQxLDB4MDMsMHhlNiwweDAyIH0gfSwKK3sgIDE2LCAweGUwNTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDA1LDB4ZTYsMHhhMCwweGRkLDB4ODgsMHhiMywweDY2IH0gfSwKK3sgIDE2LCAweGUwNjAsIDAsIHsweDBjLDB4ZGMsMHg4MywweDM2LDB4ODgsMHhiZCwweGEwLDB4MzcsMHg2YSwweDBjLDB4ZGEsMHgwYiwweDI1LDB4MDIsMHhjOSwweDQwIH0gfSwKK3sgIDE2LCAweGUwNzAsIDAsIHsweDNmLDB4NzgsMHg0ZiwweDk4LDB4YjMsMHhlNSwweDA0LDB4Y2QsMHhhMCwweDcyLDB4NzgsMHgwYywweGQ4LDB4OGIsMHgyNiwweDE0IH0gfSwKK3sgIDE2LCAweGUwODAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDEwLDB4ZTMsMHgwMCwweDg4LDB4NDIsMHgyMiwweDMxIH0gfSwKK3sgIDE2LCAweGUwOTAsIDAsIHsweDA4LDB4MGEsMHgwMiwweDIyLDB4YTAsMHhiOCwweGY5LDB4MjIsMHgxMCwweDBkLDB4ODQsMHgxMiwweDZhLDB4ODAsMHg4OCwweDgwIH0gfSwKK3sgIDE2LCAweGUwYTAsIDAsIHsweDJlLDB4MjAsMHgwYiwweDA4LDB4MDIsMHhlMiwweDgwLDB4YTgsMHhhOCwweGEyLDB4MzgsMHg0OCwweGE4LDB4MDIsMHgwZSwweDAwIH0gfSwKK3sgIDE2LCAweGUwYjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA1LDB4YzQsMHhhMiwweDgxLDB4MDAsMHgyMCwweDQ4IH0gfSwKK3sgIDE2LCAweGUwYzAsIDAsIHsweDA4LDB4MTIsMHg0MiwweDQ1LDB4MDAsMHhiMSwweDAwLDB4MjQsMHg0MCwweDA5LDB4MTQsMHgwMiwweDI0LDB4MDAsMHg4MSwweDIwIH0gfSwKK3sgIDE2LCAweGUwZDAsIDAsIHsweDJjLDB4NTgsMHgwYiwweDEwLDB4ODIsMHhjNCwweDA0LDB4OTEsMHg0MCwweDY0LDB4NmMsMHgwOCwweDMwLDB4ODIsMHgxMiwweDA1IH0gfSwKK3sgIDE2LCAweGUwZTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4YTQsMHgwMCwweDg5LDB4MDAsMHgyMiwweDQxIH0gfSwKK3sgIDE2LCAweGUwZjAsIDAsIHsweDA4LDB4OTAsMHg4YSwweDY0LDB4ODAsMHhiOSwweDAwLDB4MjIsMHg1MCwweDA5LDB4OTAsMHgwNiwweDY0LDB4MDgsMHg5OSwweDAwIH0gfSwKK3sgIDE2LCAweGUxMDAsIDAsIHsweDJlLDB4NDAsMHgwYiwweDkwLDB4MDYsMHhjNCwweDAxLDB4YjksMHgwMiwweDI2LDB4NjEsMHg4OCwweDkwLDB4MDIsMHgwNiwweDA0IH0gfSwKK3sgIDE2LCAweGUxMTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGM5LDB4MDAsMHgyMiwweDQwIH0gfSwKK3sgIDE2LCAweGUxMjAsIDAsIHsweDJjLDB4OTQsMHgyMywweDY0LDB4MDAsMHhiOSwweDAwLDB4MzYsMHg0MCwweDA5LDB4OTAsMHgxMywweDA1LDB4MDAsMHhjOSwweDAwIH0gfSwKK3sgIDE2LCAweGUxMzAsIDAsIHsweDNlLDB4NDAsMHg0ZiwweDkwLDB4MTMsMHhlNSwweGMwLDB4ZDksMHgwMCwweDI2LDB4NDAsMHgyYywweDk0LDB4MDMsMHgyOCwweDAwIH0gfSwKK3sgIDE2LCAweGUxNDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2OCwweDAxLDB4YTQsMHgwMiwweGU5LDB4MDgsMHgzYywweDQwIH0gfSwKK3sgIDE2LCAweGUxNTAsIDAsIHsweDBmLDB4OTAsMHgwYiwweGE0LDB4MDAsMHhmMSwweDAwLDB4M2UsMHg0MSwweDBmLDB4OTAsMHg0MywweGE0LDB4ODgsMHhlOSwweDA0IH0gfSwKK3sgIDE2LCAweGUxNjAsIDAsIHsweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNiwweDAwLDB4ZTEsMHgwMCwweDNhLDB4NDAsMHg5ZiwweDkyLDB4NjMsMHhkYSwweDAwIH0gfSwKK3sgIDE2LCAweGUxNzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4ODAsMHgxMCwweGUwLDB4MDEsMHgzMiwweDAwIH0gfSwKK3sgIDE2LCAweGUxODAsIDAsIHsweDhmLDB4ODAsMHgwMywweDIwLDB4MDAsMHhkOCwweDA4LDB4MzAsMHgwMSwweDhjLDB4MDAsMHgwMywweGUxLDB4MDIsMHhjOCwweDA0IH0gfSwKK3sgIDE2LCAweGUxOTAsIDAsIHsweDNlLDB4MDAsMHgwYywweDgwLDB4MGIsMHgyMSwweDAwLDB4YzgsMHgwMCwweDc4LDB4MDAsMHgwZiwweDg2LDB4MDMsMHgwYSwweDAwIH0gfSwKK3sgIDE2LCAweGUxYTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4MjgsMHgwMCwweDhlLDB4NDAsMHgyYiwweDgyIH0gfSwKK3sgIDE2LCAweGUxYjAsIDAsIHsweDBiLDB4YTAsMHgwMiwweDNhLDB4MDAsMHg4ZSwweDgwLDB4MjMsMHg4MiwweDA4LDB4ZTIsMHgwMiwweDI4LDB4MTAsMHg4YSwweDAwIH0gfSwKK3sgIDE2LCAweGUxYzAsIDAsIHsweDJmLDB4OTgsMHgyOCwweGEwLDB4MTIsMHgyOCwweDAwLDB4OGUsMHgyMCwweDJlLDB4ODAsMHg0YiwweGU0LDB4MDIsMHgwYSwweDAwIH0gfSwKK3sgIDE2LCAweGUxZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMiwweGEyLDB4NDAsMHgyMCwweDgwIH0gfSwKK3sgIDE2LCAweGUxZTAsIDAsIHsweDBiLDB4YjAsMHgwMiwweDRlLDB4NDAsMHg5MywweGMwLDB4YTAsMHgyMCwweDA4LDB4MzYsMHgwMiwweDhjLDB4MDAsMHg5MywweDAwIH0gfSwKK3sgIDE2LCAweGUxZjAsIDAsIHsweDJjLDB4ZTIsMHgwOCwweDMwLDB4MDYsMHg0YywweDEyLDB4OTMsMHgwOCwweDI4LDB4YzAsMHgwYiwweGIwLDB4MDIsMHgwYSwweDAwIH0gfSwKK3sgIDE2LCAweGUyMDAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDAxLDB4MWMsMHgwOCwweDgyLDB4NDAsMHgyOSwweDQwIH0gfSwKK3sgIDE2LCAweGUyMTAsIDAsIHsweDBiLDB4NzAsMHgwMiwweDVlLDB4MDgsMHg4NCwweDA4LDB4MjMsMHg0MCwweDA4LDB4NzAsMHgwNiwweDFjLDB4ODAsMHg4NywweDAwIH0gfSwKK3sgIDE2LCAweGUyMjAsIDAsIHsweDJkLDB4MjAsMHgwOCwweDc5LDB4MTIsMHg1YywweDAwLDB4OTQsMHgwMCwweDJkLDB4YzAsMHgwYiwweDMwLDB4NDIsMHgyOCwweDAwIH0gfSwKK3sgIDE2LCAweGUyMzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4M2UsMHgwMCwweGU0LDB4ODAsMHgzMSwweGExIH0gfSwKK3sgIDE2LCAweGUyNDAsIDAsIHsweDBmLDB4NTgsMHgxMywweDc2LDB4MDAsMHhkMCwweDgwLDB4MzEsMHhjMCwweDBjLDB4MzgsMHgwMywweGJlLDB4ODAsMHhkNywweDgxIH0gfSwKK3sgIDE2LCAweGUyNTAsIDAsIHsweDNmLDB4MjAsMHg4YywweDc5LDB4MDMsMHg3ZiwweDAxLDB4ZDYsMHg4MCwweDM5LDB4ZTgsMHg0ZiwweDY4LDB4MDMsMHgyYSwweDAwIH0gfSwKK3sgIDE2LCAweGUyNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDFkLDB4YmUsMHgwMCwweGZhLDB4MDAsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGUyNzAsIDAsIHsweDhmLDB4OTYsMHgwYiwweGE0LDB4MDAsMHhlYSwweDAwLDB4M2MsMHhjMCwweDBmLDB4OTAsMHgwMywweGFjLDB4MjAsMHhmYiwweDQwIH0gfSwKK3sgIDE2LCAweGUyODAsIDAsIHsweDJlLDB4MDAsMHgwZiwweGIyLDB4MDMsMHhhZCwweGEwLDB4ZWEsMHgwMCwweDNlLDB4YzAsMHgwZiwweGEwLDB4MWIsMHhjMiwweDA0IH0gfSwKK3sgIDE2LCAweGUyOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4ZmUsMHgwOCwweGRlLDB4ODEsMHgzMywweGE0IH0gfSwKK3sgIDE2LCAweGUyYTAsIDAsIHsweDBlLDB4ZmMsMHgxMywweDNlLDB4MDAsMHhmYywweDgwLDB4MTMsMHgyMCwweDBjLDB4NjgsMHgwMywweDNlLDB4MjAsMHhmZiwweGM4IH0gfSwKK3sgIDE2LCAweGUyYjAsIDAsIHsweDNmLDB4NjAsMHgxZCwweGY4LDB4MDMsMHg3ZSwweDAwLDB4YzcsMHg4MCwweDMzLDB4ZTIsMHgwYywweGQ4LDB4MDMsMHgxMCwweDAwIH0gfSwKK3sgIDE2LCAweGUyYzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4OWMsMHgwMCwweDg2LDB4NDEsMHgzMSwweGM0IH0gfSwKK3sgIDE2LCAweGUyZDAsIDAsIHsweDA4LDB4NzksMHg0MiwweDljLDB4MDAsMHhiYywweDEwLDB4MjEsMHg0MCwweDg1LDB4MzUsMHgwMywweDVjLDB4MDAsMHhiNywweDAwIH0gfSwKK3sgIDE2LCAweGUyZTAsIDAsIHsweDJkLDB4YzAsMHgwOCwweDcyLDB4MDIsMHgyYywweDAwLDB4YTcsMHgwMSwweDM3LDB4YzAsMHgwOCwweDUxLDB4NDIsMHgyYSwweDAwIH0gfSwKK3sgIDE2LCAweGUyZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDAwLDB4OGMsMHg0MCwweDgyLDB4MDAsMHgyNCwweDgxIH0gfSwKK3sgIDE2LCAweGUzMDAsIDAsIHsweDA4LDB4ZDgsMHgwMiwweDE0LDB4MjAsMHhiNSwweDAwLDB4MjAsMHg0MCwweDA5LDB4NjAsMHgwMiwweDFjLDB4NDAsMHhiNywweDAwIH0gfSwKK3sgIDE2LCAweGUzMTAsIDAsIHsweDJjLDB4NDAsMHgwYiwweDMwLDB4MjIsMHhkYywweDAwLDB4OTcsMHgwMCwweDIxLDB4YzQsMHgwOCwweDQwLDB4MDIsMHg0NCwweDAwIH0gfSwKK3sgIDE2LCAweGUzMjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MCwweDE0LDB4ZWMsMHgwMCwweDkyLDB4MDYsMHgyMCwweDkwIH0gfSwKK3sgIDE2LCAweGUzMzAsIDAsIHsweDM4LDB4MTUsMHgwMiwweDg2LDB4MDAsMHhiOCwweDAwLDB4NjAsMHg1MCwweDA5LDB4MzAsMHgwMiwweDRlLDB4MDEsMHhiYiwweDAwIH0gfSwKK3sgIDE2LCAweGUzNDAsIDAsIHsweDJlLDB4NDAsMHgwYiwweDMwLDB4MDIsMHhjZSwweDIwLDB4YjMsMHgwMCwweDI0LDB4ZjAsMHg0OCwweDAyLDB4MGEsMHg1OCwweDA0IH0gfSwKK3sgIDE2LCAweGUzNTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmMsMHgwMCwweGNhLDB4MDAsMHhhNiwweDk0IH0gfSwKK3sgIDE2LCAweGUzNjAsIDAsIHsweDJjLDB4OTAsMHgwMywweDJlLDB4MDAsMHhmYiwweDA1LDB4YjIsMHg4NSwweDBkLDB4OTAsMHgwMywweDNmLDB4OTAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweGUzNzAsIDAsIHsweDdlLDB4ODAsMHgxZiwweGYwLDB4NDMsMHhmYywweDIxLDB4OWEsMHgwMCwweDMzLDB4YzgsMHgzYywweGIyLDB4MDMsMHg2YSwweDA0IH0gfSwKK3sgIDE2LCAweGUzODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MCwweDAwLDB4ZWMsMHgwMiwweGVhLDB4NDAsMHgzZCwweDgwIH0gfSwKK3sgIDE2LCAweGUzOTAsIDAsIHsweDBmLDB4MTAsMHg5MywweGVkLDB4MDAsMHhmYiwweDQwLDB4M2UsMHg5MCwweDhmLDB4MzAsMHgwMywweGVjLDB4ODAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweGUzYTAsIDAsIHsweDNlLDB4OTEsMHgxYywweGIwLDB4MDMsMHgyYywweDEwLDB4ZTgsMHgwMCwweDNlLDB4YzgsMHgxZiwweDkwLDB4MDMsMHhhNSwweDEwIH0gfSwKK3sgIDE2LCAweGUzYjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4ZmMsMHgwMiwweGU0LDB4MDAsMHg3MywweGEwIH0gfSwKK3sgIDE2LCAweGUzYzAsIDAsIHsweDBjLDB4ZmMsMHgwMywweDdjLDB4MDIsMHhmZiwweDEwLDB4MTMsMHhjNCwweDFjLDB4YzAsMHgwMywweDNjLDB4MDAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweGUzZDAsIDAsIHsweDM3LDB4ZTAsMHgwZCwweGYwLDB4MDMsMHhmYywweDAwLDB4ZWQsMHg4MCwweDMxLDB4YzAsMHgwYywweDMyLDB4NjMsMHgyMCwweDA0IH0gfSwKK3sgIDE2LCAweGUzZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4NCwweDAwLDB4NmMsMHgwMCwweDhhLDB4YzAsMHgyMiwweGIxIH0gfSwKK3sgIDE2LCAweGUzZjAsIDAsIHsweDhhLDB4YjgsMHg0MywweDRhLDB4MTAsMHhkYiwweDIwLDB4MjAsMHhmMCwweDBhLDB4OTQsMHgwMywweDZjLDB4MDAsMHhiYiwweDA3IH0gfSwKK3sgIDE2LCAweGU0MDAsIDAsIHsweDIyLDB4YjgsMHgwOCwweGIwLDB4MDIsMHhlYywweDExLDB4ZTgsMHhjMCwweGIyLDB4YzAsMHgyYSwweDkyLDB4MWEsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGU0MTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAxLDB4MmMsMHgwMCwweGFhLDB4ODAsMHgyMiwweDk4IH0gfSwKK3sgIDE2LCAweGU0MjAsIDAsIHsweDA4LDB4OTAsMHgwMiwweDJmLDB4MDMsMHhiYiwweDAxLDB4MmEsMHg4MywweDA4LDB4YjIsMHg0ZSwweDJjLDB4MDQsMHhhYiwweDAyIH0gfSwKK3sgIDE2LCAweGU0MzAsIDAsIHsweDIyLDB4YzQsMHgyOCwweGIwLDB4MjIsMHhlYywweDA5LDB4YjMsMHg1MCwweDYyLDB4YzAsMHgwOCwweGIwLDB4MDIsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGU0NDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MGMsMHgwMSwweDgzLDB4MDAsMHg2MCwweDgwIH0gfSwKK3sgIDE2LCAweGU0NTAsIDAsIHsweDA4LDB4MTIsMHgwYSwweDQ0LDB4MDAsMHg5MywweDAwLDB4MmEsMHg4MCwweDRhLDB4MzAsMHgwMiwweDBjLDB4MDAsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweGU0NjAsIDAsIHsweDYwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhjYywweDAwLDB4YjMsMHgwMiwweDYwLDB4YzAsMHgwOCwweDAwLDB4NDYsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweGU0NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDBkLDB4NmMsMHgwMCwweGU4LDB4MDIsMHgyMiwweDgwIH0gfSwKK3sgIDE2LCAweGU0ODAsIDAsIHsweDJjLDB4ZjIsMHg0MywweDJjLDB4MDAsMHhmYiwweDAwLDB4YmEsMHhjMCwweDA4LDB4YTUsMHgwMiwweDNjLDB4MDAsMHhlZiwweDAwIH0gfSwKK3sgIDE2LCAweGU0OTAsIDAsIHsweDM2LDB4YzAsMHg0ZCwweGYwLDB4MTMsMHhmZCwweDUxLDB4ZmIsMHgwMCwweDMyLDB4YzAsMHgwYywweGIwLDB4MDMsMHgyMCwweDAxIH0gfSwKK3sgIDE2LCAweGU0YTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDFkLDB4ZmMsMHgwMCwweDdlLDB4MDQsMHgzZiwweDgwIH0gfSwKK3sgIDE2LCAweGU0YjAsIDAsIHsweDBmLDB4MzEsMHg0MywweGYwLDB4MDIsMHhmZiwweDAwLDB4MzcsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDgsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweGU0YzAsIDAsIHsweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmYywweDAwLDB4ZWYsMHgwMCwweDNiLDB4YzAsMHgwZiwweGMwLDB4MDMsMHhlOCwweDE2IH0gfSwKK3sgIDE2LCAweGU0ZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZjIsMHg0MCwweGZjLDB4ODAsMHgzZiwweDI0IH0gfSwKK3sgIDE2LCAweGU0ZTAsIDAsIHsweDBkLDB4ZDgsMHg1MywweGQ2LDB4MDQsMHhkZiwweDMyLDB4M2YsMHhjYywweDRjLDB4YzAsMHg0MywweGZjLDB4MDAsMHhkZiwweDYwIH0gfSwKK3sgIDE2LCAweGU0ZjAsIDAsIHsweDM3LDB4YzAsMHgwZiwweGM0LDB4MDMsMHg3YywweGQwLDB4ZGYsMHgyMCwweDMzLDB4ZDgsMHgwZCwweGY4LDB4NDMsMHhmMCwweDAwIH0gfSwKK3sgIDE2LCAweGU1MDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDE4LDB4ZTgsMHg4MCwweGIwLDB4MDEsMHgyZSwweDA4IH0gfSwKK3sgIDE2LCAweGU1MTAsIDAsIHsweDg4LDB4OTAsMHgwMiwweGVjLDB4MjAsMHg4YiwweDcwLDB4MmYsMHhjYywweDA4LDB4YjMsMHg4MiwweGZkLDB4ZTAsMHhiZiwweDQwIH0gfSwKK3sgIDE2LCAweGU1MjAsIDAsIHsweDIyLDB4ZDgsMHgwYiwweDkzLDB4MDIsMHhmZCwweGMwLDB4YWYsMHgxMCwweDI4LDB4ZjAsMHgwOCwweGJjLDB4MTIsMHhmMCwweDA0IH0gfSwKK3sgIDE2LCAweGU1MzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzQsMHgwMCwweGIwLDB4MDAsMHgyZSwweDAxIH0gfSwKK3sgIDE2LCAweGU1NDAsIDAsIHsweDBhLDB4MTIsMHg4MiwweGVjLDB4ODAsMHhiMywweDAwLDB4MmMsMHhjOCwweDBhLDB4MDAsMHgzMiwweDhjLDB4MDAsMHhhMywweDMwIH0gfSwKK3sgIDE2LCAweGU1NTAsIDAsIHsweDIwLDB4ZDIsMHgwOSwweDAwLDB4MDIsMHg4YywweDgwLDB4ODMsMHgwMCwweDI4LDB4ZDgsMHgwYiwweDM0LDB4MTIsMHhmMiwweDAxIH0gfSwKK3sgIDE2LCAweGU1NjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4YWMsMHgwMSwweGI4LDB4MDIsMHgyZSwweDAwIH0gfSwKK3sgIDE2LCAweGU1NzAsIDAsIHsweDBhLDB4OTAsMHgxMiwweGVjLDB4MTAsMHg4YiwweDAwLDB4MmUsMHhjMCwweDBhLDB4YjAsMHgwMCwweGVjLDB4MDAsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweGU1ODAsIDAsIHsweDIyLDB4YzEsMHgwYiwweDkyLDB4MDIsMHhjYywweDAxLDB4YWIsMHgwMCwweDJhLDB4YzAsMHgwMiwweGIwLDB4MDIsMHhmMCwweDA0IH0gfSwKK3sgIDE2LCAweGU1OTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZTAsMHgwMCwweGZhLDB4MGMsMHgzZSwweGMwIH0gfSwKK3sgIDE2LCAweGU1YTAsIDAsIHsweDBmLDB4YTAsMHgxMywweGVlLDB4MjAsMHhkYiwweDAwLDB4M2UsMHhjMCwweDJlLDB4ODgsMHg1MywweGVjLDB4MDAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweGU1YjAsIDAsIHsweGIyLDB4YzAsMHg4ZiwweGFjLDB4ODMsMHhhYywweDA4LDB4ZGIsMHgwMCwweDFhLDB4YzAsMHg0ZiwweGIwLDB4MDMsMHhjMCwweDA0IH0gfSwKK3sgIDE2LCAweGU1YzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4YjgsMHgwMCwweGZlLDB4MDAsMHgzZiwweGMwIH0gfSwKK3sgIDE2LCAweGU1ZDAsIDAsIHsweDJkLDB4ZTAsMHgwMywweGZlLDB4ODAsMHg3ZiwweDAwLDB4M2YsMHhjMCwweDBkLDB4ZDIsMHgwMywweGZjLDB4MDAsMHhiZiwweDAxIH0gfSwKK3sgIDE2LCAweGU1ZTAsIDAsIHsweDNlLDB4YzAsMHgwZCwweGM4LDB4MDMsMHhmYywweDBjLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwOSwweGYwLDB4MjMsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGU1ZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YTQsMHgwMCwweGZhLDB4NDAsMHgzMiwweGMxIH0gfSwKK3sgIDE2LCAweGU2MDAsIDAsIHsweDBmLDB4YTAsMHgwMywweDI5LDB4MDgsMHhkYiwweDAwLDB4M2UsMHhjMCwweDBlLDB4ODUsMHgwMywweGVjLDB4MjAsMHhjYiwweDAwIH0gfSwKK3sgIDE2LCAweGU2MTAsIDAsIHsweDNhLDB4YzAsMHgwZSwweGE0LDB4MDMsMHhlYywweDAwLDB4ZmIsMHgwMCwweDNhLDB4YzIsMHgwZSwweGIwLDB4MDMsMHgxMCwweDA0IH0gfSwKK3sgIDE2LCAweGU2MjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4MmMsMHgwMCwweGJhLDB4NjAsMHgyMCwweGMwIH0gfSwKK3sgIDE2LCAweGU2MzAsIDAsIHsweDBiLDB4YTAsMHgwMiwweDA4LDB4MDAsMHhhZiwweDAwLDB4MmYsMHhkMCwweDBiLDB4YjUsMHgwMiwweGZlLDB4MDIsMHg4ZiwweDAwIH0gfSwKK3sgIDE2LCAweGU2NDAsIDAsIHsweDJmLDB4YzAsMHgwZCwweDgwLDB4MGEsMHgzYywweDAwLDB4YjcsMHgwMCwweDIzLDB4YzIsMHgwNSwweGYwLDB4MjIsMHgzNiwweDAwIH0gfSwKK3sgIDE2LCAweGU2NTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA0LDB4NDAsMHgwMCwweGIxLDB4ODgsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGU2NjAsIDAsIHsweDBiLDB4MTAsMHgwMiwweDBjLDB4MDAsMHg4MywweDAwLDB4MmUsMHhjOCwweDBiLDB4MDgsMHgwNiwweDRkLDB4NDAsMHg4MywweDAwIH0gfSwKK3sgIDE2LCAweGU2NzAsIDAsIHsweDIwLDB4YzAsMHgwOCwweDMwLDB4MDYsMHgwYywweDA4LDB4OTMsMHgyMCwweDBhLDB4ZTAsMHg0YSwweDMwLDB4MDIsMHgzOCwweDAwIH0gfSwKK3sgIDE2LCAweGU2ODAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDEwLDB4NWEsMHgwMCwweGI1LDB4OTAsMHgyMSwweDIwIH0gfSwKK3sgIDE2LCAweGU2OTAsIDAsIHsweDBiLDB4NTgsMHg0MiwweDNlLDB4MDAsMHhhNywweDgwLDB4MmQsMHhlMCwweDBiLDB4NjksMHgwMiwweGRlLDB4NDAsMHg4NywweDkyIH0gfSwKK3sgIDE2LCAweGU2YTAsIDAsIHsweDJkLDB4ZTAsMHgwOSwweDE4LDB4MDIsMHg5ZSwweDAxLDB4YjcsMHg4MCwweDI5LDB4ZTAsMHgwMywweDcwLDB4MDIsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGU2YjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4NDQsMHgwMCwweGYxLDB4MDEsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweGU2YzAsIDAsIHsweDVmLDB4MTgsMHgwMywweDBjLDB4MTAsMHg4MywweDAwLDB4M2MsMHhjNCwweDBlLDB4MDQsMHgwMywweGVjLDB4MDAsMHg4MywweDAwIH0gfSwKK3sgIDE2LCAweGU2ZDAsIDAsIHsweDMwLDB4YzQsMHgwYywweDMxLDB4MDMsMHg4YywweDAwLDB4ZjMsMHgwMCwweDM4LDB4YzgsMHgwZSwweDMxLDB4MDMsMHgxMiwweDAyIH0gfSwKK3sgIDE2LCAweGU2ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4YmMsMHgwMCwweGZkLDB4MDQsMHhiZiwweDA0IH0gfSwKK3sgIDE2LCAweGU2ZjAsIDAsIHsweDRmLDB4NTgsMHgwMywweGY4LDB4MDgsMHhlZiwweDA4LDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMSwweGZjLDB4MDAsMHhmZiwweDRjIH0gfSwKK3sgIDE2LCAweGU3MDAsIDAsIHsweDNmLDB4YzEsMHgwZiwweGQwLDB4MDMsMHgzYywweDAwLDB4ZjcsMHgwMCwweDM3LDB4YzIsMHgwZCwweDcyLDB4MDMsMHhkMCwweDA2IH0gfSwKK3sgIDE2LCAweGU3MTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4ZTIsMHgwMCwweGRiLDB4MDAsMHgzMiwweGMwIH0gfSwKK3sgIDE2LCAweGU3MjAsIDAsIHsweDRkLDB4YTgsMHgwMywweDJjLDB4MDgsMHhmYiwweDAwLDB4N2UsMHhjOCwweDhmLDB4YjAsMHgwYiwweDZmLDB4NDUsMHhlYiwweGMyIH0gfSwKK3sgIDE2LCAweGU3MzAsIDAsIHsweDM2LDB4YzAsMHgwNywweGEwLDB4MDMsMHhlZiwweDIwLDB4Y2IsMHg1MCwweGIyLDB4YzAsMHgwYywweDc5LDB4MDMsMHgyYSwweDAwIH0gfSwKK3sgIDE2LCAweGU3NDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE5LDB4OTgsMHgwMCwweDhmLDB4MDAsMHgyMSwweGMwIH0gfSwKK3sgIDE2LCAweGU3NTAsIDAsIHsweDBiLDB4NjAsMHgwMywweDVjLDB4MDAsMHgzNywweDAwLDB4MmQsMHhkMiwweDBiLDB4MzAsMHgwMiwweDBjLDB4YTgsMHg4NywweDI0IH0gfSwKK3sgIDE2LCAweGU3NjAsIDAsIHsweDIxLDB4ZDAsMHgwOSwweDcwLDB4MDIsMHhkZCwweDg4LDB4ODcsMHgyYSwweDIzLDB4ZTgsMHgwOCwweDcwLDB4MDIsMHgzMiwweDA0IH0gfSwKK3sgIDE2LCAweGU3NzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAwLDB4YjYsMHgwMCwweDk3LDB4ODAsMHgyMSwweGUwIH0gfSwKK3sgIDE2LCAweGU3ODAsIDAsIHsweDBiLDB4NjgsMHgwMiwweDFlLDB4MDAsMHhiNywweDgwLDB4MmQsMHhlOCwweDhiLDB4NDgsMHg4MiwweDFlLDB4ODAsMHhhMywweDg0IH0gfSwKK3sgIDE2LCAweGU3OTAsIDAsIHsweDI1LDB4ZTgsMHgwYiwweDY4LDB4MDIsMHhjZSwweDAyLDB4ODcsMHg4MCwweDIxLDB4ZTAsMHgwOCwweDdhLDB4MDIsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGU3YTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2OCwweDA0LDB4Y2MsMHgwOCwweDgzLDB4ODIsMHgyMCwweGUwIH0gfSwKK3sgIDE2LCAweGU3YjAsIDAsIHsweDhiLDB4MmEsMHgwMiwweDQ4LDB4NDAsMHhiMywweDAwLDB4MmMsMHhjMCwweDBiLDB4MzAsMHg4MiwweDBjLDB4MDAsMHg4MywweDAwIH0gfSwKK3sgIDE2LCAweGU3YzAsIDAsIHsweDAwLDB4YzEsMHgwOSwweDMxLDB4MDIsMHhjYywweDAwLDB4ODMsMHgwMCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MGEsMHgxMiwweDA0IH0gfSwKK3sgIDE2LCAweGU3ZDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4ZTgsMHgwMCwweGRhLDB4YTAsMHgzMiwweGE4IH0gfSwKK3sgIDE2LCAweGU3ZTAsIDAsIHsweDhkLDB4YTgsMHgwMywweDNiLDB4MDAsMHhmYSwweDAwLDB4M2UsMHg4MCwweDBmLDB4ZTQsMHgwMywweDY4LDB4MDAsMHhlYSwweDAyIH0gfSwKK3sgIDE2LCAweGU3ZjAsIDAsIHsweDM2LDB4ODAsMHgwZiwweGU0LDB4MDMsMHhlOCwweDAwLDB4Y2EsMHgwMCwweDMyLDB4ODAsMHgyYywweGEwLDB4MDMsMHgzYSwweDA0IH0gfSwKK3sgIDE2LCAweGU4MDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAxLDB4YTAsMHgxMCwweGY4LDB4MDAsMHhiZSwweDIwIH0gfSwKK3sgIDE2LCAweGU4MTAsIDAsIHsweDhmLDB4YzEsMHgwMywweGUwLDB4MjQsMHhmOCwweDAwLDB4M2UsMHgxMCwweDBmLDB4ODQsMHgwMywweGUwLDB4MDAsMHhmOCwweDAxIH0gfSwKK3sgIDE2LCAweGU4MjAsIDAsIHsweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHgwMSwweGJlLDB4MTAsMHgwZiwweDgwLDB4MDMsMHhkMiwweDAwIH0gfSwKK3sgIDE2LCAweGU4MzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4YTQsMHgwMCwweGY5LDB4NDAsMHgzMiwweDQwIH0gfSwKK3sgIDE2LCAweGU4NDAsIDAsIHsweGNmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhjOSwweDAwLDB4MGUsMHg1MCwweDBmLDB4MWEsMHgwMywweDI2LDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGU4NTAsIDAsIHsweDNlLDB4NDAsMHgwZiwweDkwLDB4ODEsMHhlNCwweDAwLDB4ZjksMHg4MCwweDMyLDB4NDAsMHgwYywweDkwLDB4MDMsMHhjMiwweDA0IH0gfSwKK3sgIDE2LCAweGU4NjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NjQsMHgwNCwweGIxLDB4MDQsMHgyMiwweDQwIH0gfSwKK3sgIDE2LCAweGU4NzAsIDAsIHsweDBiLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhhOSwweDAwLDB4MmUsMHg1MywweDBiLDB4OTIsMHgwYSwweDI2LDB4NDgsMHhiOSwweDA0IH0gfSwKK3sgIDE2LCAweGU4ODAsIDAsIHsweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhlNCwweDAwLDB4YjksMHg4MCwweDAyLDB4NTAsMHgwOCwweDkwLDB4MDIsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGU4OTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDA1LDB4MjQsMHgwMCwweGJkLDB4MDAsMHgyMywweDQwIH0gfSwKK3sgIDE2LCAweGU4YTAsIDAsIHsweDBiLDB4ZDAsMHgxMiwweGM0LDB4MDAsMHg4OSwweDAyLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgyMiwweDI0LDB4MDAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweGU4YjAsIDAsIHsweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhlNCwweDAwLDB4YjEsMHgyMCwweDIwLDB4NDAsMHg2OCwweDkwLDB4MjIsMHhjNiwweDAwIH0gfSwKK3sgIDE2LCAweGU4YzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDE0LDB4MTQsMHgwMCwweGJmLDB4MTIsMHhhMSwweDQwIH0gfSwKK3sgIDE2LCAweGU4ZDAsIDAsIHsweDBiLDB4NTAsMHgwMiwweGM0LDB4MDAsMHhhMSwweDIwLDB4MmMsMHg0OCwweDBiLDB4MTIsMHgwMiwweDA0LDB4MTAsMHhiMSwweDExIH0gfSwKK3sgIDE2LCAweGU4ZTAsIDAsIHsweDJjLDB4NDgsMHgwYiwweDEzLDB4MjIsMHhjNCwweDAwLDB4YjEsMHg0MCwweDIwLDB4NWEsMHgwOCwweDEwLDB4MDIsMHhjMiwweDAxIH0gfSwKK3sgIDE2LCAweGU4ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGY4LDB4NDAsMHgzMiwweDE0IH0gfSwKK3sgIDE2LCAweGU5MDAsIDAsIHsweDBmLDB4NDUsMHgwMywweGUxLDB4NDAsMHhjOCwweDUwLDB4M2UsMHgxNSwweDhmLDB4ODUsMHgwMywweDIxLDB4ZTgsMHhmOCwweDY4IH0gfSwKK3sgIDE2LCAweGU5MTAsIDAsIHsweDNlLDB4MTQsMHgwZiwweDg0LDB4MDMsMHhlMSwweGUwLDB4ZjAsMHgyOCwweDMyLDB4YTgsMHhjYywweDgwLDB4MjMsMHhlZSwweDAzIH0gfSwKK3sgIDE2LCAweGU5MjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDE1LDB4YzQsMHgxMCwweGY5LDB4MjAsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweGU5MzAsIDAsIHsweDBmLDB4OTAsMHgwMywweGY0LDB4MDAsMHhmOSwweDEwLDB4M2UsMHg0NCwweDBmLDB4ZDEsMHgwMywweGU0LDB4MDAsMHhmOSwweDIwIH0gfSwKK3sgIDE2LCAweGU5NDAsIDAsIHsweDNlLDB4NDQsMHgwZiwweGQzLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweGJlLDB4NDAsMHgwZiwweDk0LDB4MDMsMHhlNiwweDA2IH0gfSwKK3sgIDE2LCAweGU5NTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4ZTQsMHgwMCwweGZkLDB4MTAsMHgzMywweDQwIH0gfSwKK3sgIDE2LCAweGU5NjAsIDAsIHsweDBjLDB4ZDAsMHgwMywweDI0LDB4MDAsMHhkOSwweDAwLDB4M2YsMHg0MCwweDRjLDB4ZDAsMHgwMywweGY2LDB4MDAsMHhmZCwweDkwIH0gfSwKK3sgIDE2LCAweGU5NzAsIDAsIHsweDNhLDB4NDAsMHgwYywweDkwLDB4MDMsMHhlNiwweGEwLDB4ZmQsMHhhOCwweDM3LDB4NjgsMHgwYywweGQ4LDB4ODMsMHgyNiwweDAwIH0gfSwKK3sgIDE2LCAweGU5ODAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDEwLDB4ZTAsMHgwOCwweGM4LDB4YTAsMHgyMiwweDAwIH0gfSwKK3sgIDE2LCAweGU5OTAsIDAsIHsweDA4LDB4ODAsMHgwMiwweDIwLDB4MDAsMHg4OCwweDAwLDB4MmUsMHgwMCwweDBjLDB4ODAsMHgxMiwweGUwLDB4MDAsMHhiOCwweDgwIH0gfSwKK3sgIDE2LCAweGU5YTAsIDAsIHsweDIyLDB4MDAsMHgwZCwweDBhLDB4MDIsMHhlMywweDgwLDB4YjAsMHhjMCwweDIwLDB4MzQsMHgwOCwweDg0LDB4MDMsMHg0ZSwweDA0IH0gfSwKK3sgIDE2LCAweGU5YjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4ODQsMHgwOSwweGExLDB4MDAsMHgyMCwweDQxIH0gfSwKK3sgIDE2LCAweGU5YzAsIDAsIHsweDA4LDB4OTAsMHgwMiwweDI0LDB4MDAsMHg5MSwweDAwLDB4MmMsMHg0MCwweDA4LDB4MTAsMHgwMiwweGM1LDB4MDAsMHhiMSwweDYwIH0gfSwKK3sgIDE2LCAweGU5ZDAsIDAsIHsweDIwLDB4NDAsMHgwOCwweDEwLDB4YTIsMHhjNCwweDIwLDB4YjEsMHgyOCwweDI0LDB4NGEsMHgwOCwweDEwLDB4MDIsMHg1MiwweDAxIH0gfSwKK3sgIDE2LCAweGU5ZTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE0LDB4YTQsMHgwMSwweDgxLDB4MDAsMHhhMiwweDQwIH0gfSwKK3sgIDE2LCAweGU5ZjAsIDAsIHsweGE4LDB4OTAsMHgwMCwweDI1LDB4NDAsMHg4OSwweDAxLDB4MmMsMHg0MCwweDA4LDB4OTQsMHgwMiwweGU0LDB4MDAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweGVhMDAsIDAsIHsweDJhLDB4NDAsMHgwOSwweDkwLDB4MDIsMHhlNCwweDAxLDB4YjksMHgwNCwweDIyLDB4NDEsMHg0OCwweDkwLDB4MDIsMHg0NiwweDA0IH0gfSwKK3sgIDE2LCAweGVhMTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE0LDB4YTUsMHgyMCwweGU5LDB4MDAsMHgzMiwweDQwIH0gfSwKK3sgIDE2LCAweGVhMjAsIDAsIHsweDRjLDB4MTAsMHgwYiwweDI2LDB4MDAsMHhkOSwweDAwLDB4M2UsMHg0MCwweDJjLDB4OTgsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGVhMzAsIDAsIHsweGIyLDB4NDAsMHgwYywweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDM2LDB4NDAsMHgyYywweDkwLDB4MDMsMHg2OCwweDA0IH0gfSwKK3sgIDE2LCAweGVhNDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAxLDB4YTQsMHgwMCwweGU5LDB4MDAsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweGVhNTAsIDAsIHsweDBmLDB4OTAsMHgwMywweGU2LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBlLDB4OWEsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGVhNjAsIDAsIHsweDM2LDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNjLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhkYSwweDAwIH0gfSwKK3sgIDE2LCAweGVhNzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4YTEsMHgwMCwweGY4LDB4MDAsMHgzMiwweDAwIH0gfSwKK3sgIDE2LCAweGVhODAsIDAsIHsweDBmLDB4ODAsMHgxMywweGEwLDB4MDAsMHhjOCwweDAwLDB4MzIsMHgwNCwweDhjLDB4ODAsMHgwMywweGEwLDB4YzAsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGVhOTAsIDAsIHsweDNhLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgyMCwweDAwLDB4YzAsMHgwOSwweDMyLDB4MDAsMHg0YywweDgwLDB4MDEsMHgwYSwweDA0IH0gfSwKK3sgIDE2LCAweGVhYTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4MjgsMHgwMCwweGJlLDB4MDAsMHgyMCwweDgwIH0gfSwKK3sgIDE2LCAweGVhYjAsIDAsIHsweDBiLDB4ZTAsMHgwMiwweDg4LDB4MDAsMHhhYSwweDAwLDB4MDMsMHhhMCwweDBhLDB4ZTYsMHgwMiwweGZhLDB4MDAsMHg4YSwweDAwIH0gfSwKK3sgIDE2LCAweGVhYzAsIDAsIHsweDMyLDB4ODAsMHgwYiwweGEwLDB4MDIsMHgyOCwweDAwLDB4OGUsMHg4MCwweGEzLDB4ODAsMHgyOCwweDIwLDB4MDIsMHg4YSwweDAwIH0gfSwKK3sgIDE2LCAweGVhZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NmMsMHgwMCwweGIzLDB4NDgsMHgyMCwweDQwIH0gfSwKK3sgIDE2LCAweGVhZTAsIDAsIHsweDBiLDB4MTAsMHgwMiwweDBjLDB4MDAsMHg4MywweDAwLDB4MjAsMHhjMCwweDA4LDB4MzQsMHg4MiwweDhlLDB4MDQsMHg5OSwweDAwIH0gfSwKK3sgIDE2LCAweGVhZjAsIDAsIHsweDBhLDB4YzAsMHgxYiwweDMwLDB4MDIsMHgwYywweDAyLDB4OTAsMHg1MCwweDIwLDB4NjAsMHgwOCwweDMwLDB4MDIsMHgwYSwweDAwIH0gfSwKK3sgIDE2LCAweGViMDAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDExLDB4MWMsMHg4MCwweGJkLDB4MGEsMHgyMSwweDQ4IH0gfSwKK3sgIDE2LCAweGViMTAsIDAsIHsweDBiLDB4NTIsMHgwMiwweDljLDB4NDAsMHhhMywweGEwLDB4MjAsMHg4MCwweDBhLDB4NjAsMHgwMiwweGNlLDB4MDAsMHg4NSwweDIwIH0gfSwKK3sgIDE2LCAweGViMjAsIDAsIHsweDIxLDB4YzQsMHgwYiwweDdhLDB4MDYsMHgxZSwweDgwLDB4OTUsMHgyMCwweDIxLDB4OTAsMHgwOCwweDcwLDB4MDIsMHgyOCwweDAwIH0gfSwKK3sgIDE2LCAweGViMzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA4LDB4MWUsMHg4MCwweGY3LDB4ODAsMHhiMSwweDc5IH0gfSwKK3sgIDE2LCAweGViNDAsIDAsIHsweDBmLDB4ZGIsMHgwMiwweDNlLDB4MjAsMHhjNywweGEwLDB4YjEsMHg2MCwweGNjLDB4NzgsMHgxMywweDk2LDB4MDAsMHhmMSwweGYwIH0gfSwKK3sgIDE2LCAweGViNTAsIDAsIHsweDM5LDB4ZTIsMHgwZiwweDdiLDB4MTMsMHgwZiwweDAwLDB4ZDQsMHhhMCwweDMxLDB4NjAsMHgyYywweDcwLDB4MDMsMHgyYSwweDAyIH0gfSwKK3sgIDE2LCAweGViNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDE1LDB4YWMsMHgwMCwweGY3LDB4MDAsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweGViNzAsIDAsIHsweDBmLDB4OTAsMHgwMywweGVkLDB4ODAsMHhmYiwweDEwLDB4M2UsMHg0MCwweDBiLDB4YjAsMHgyMywweGVjLDB4MDAsMHhmOSwweDIwIH0gfSwKK3sgIDE2LCAweGViODAsIDAsIHsweDNhLDB4ZDgsMHgwZiwweGIwLDB4MGIsMHhlZCwweDgxLDB4ZWQsMHgxMCwweDNlLDB4ODAsMHgwZiwweDMwLDB4MDMsMHhjMiwweDA2IH0gfSwKK3sgIDE2LCAweGViOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4YmUsMHgyMCwweGVlLDB4ODAsMHgzMywweDYwIH0gfSwKK3sgIDE2LCAweGViYTAsIDAsIHsweDBjLDB4ZDgsMHg4MywweDFlLDB4MDAsMHg2ZiwweDgwLDB4MzMsMHhlMCwweDBmLDB4YjgsMHgxMSwweDMyLDB4MDQsMHhmNSwweDgwIH0gfSwKK3sgIDE2LCAweGViYjAsIDAsIHsweDMzLDB4ZTAsMHgwZiwweGY4LDB4ODMsMHgyZiwweDQwLDB4ZmUsMHg4MCwweGIzLDB4ZTAsMHgwYywweGY4LDB4MDMsMHgxMCwweDAwIH0gfSwKK3sgIDE2LCAweGViYzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE4LDB4OWMsMHgwMCwweGJjLDB4MDAsMHhhMSwweDQ0IH0gfSwKK3sgIDE2LCAweGViZDAsIDAsIHsweDA4LDB4MTAsMHgwMywweDVjLDB4MDAsMHg4ZiwweDAwLDB4MjEsMHg4MCwweDBiLDB4ZWEsMHgyMiwweDFjLDB4ODAsMHhiNSwweDAxIH0gfSwKK3sgIDE2LCAweGViZTAsIDAsIHsweDIxLDB4YzAsMHgwYiwweGYwLDB4MDIsMHgxZSwweDgwLDB4YmUsMHgwMCwweDIzLDB4ODAsMHgyYSwweDcwLDB4MDIsMHgyYSwweDA0IH0gfSwKK3sgIDE2LCAweGViZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgyMCwweGE3LDB4MDAsMHgyMywweDQwIH0gfSwKK3sgIDE2LCAweGVjMDAsIDAsIHsweDBiLDB4NTAsMHgwYSwweDNjLDB4MDAsMHhhNywweDAwLDB4MjUsMHhjMCwweDBhLDB4NDMsMHgwMiwweDEwLDB4MDAsMHhiNSwweDAwIH0gfSwKK3sgIDE2LCAweGVjMTAsIDAsIHsweDIxLDB4YzAsMHgwYiwweDcwLDB4ODIsMHgxYywweDgwLDB4YjQsMHgwMCwweDIxLDB4YzAsMHgwOCwweDcwLDB4MDIsMHgwNCwweDAwIH0gfSwKK3sgIDE2LCAweGVjMjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDA0LDB4OGUsMHgwNCwweGIzLDB4MDAsMHgyMiwweDQwIH0gfSwKK3sgIDE2LCAweGVjMzAsIDAsIHsweDA5LDB4MTQsMHgwMiwweDRjLDB4MDAsMHg4MywweDAwLDB4MjAsMHhjMCwweDBiLDB4MjQsMHg4MiwweDA0LDB4MDAsMHhiMSwweDAwIH0gfSwKK3sgIDE2LCAweGVjNDAsIDAsIHsweDIwLDB4YzAsMHg4YiwweDNhLDB4MDIsMHgyYywweDAxLDB4YjAsMHgwMCwweDIwLDB4ODAsMHgwYSwweDMwLDB4MDIsMHgxYSwweDA0IH0gfSwKK3sgIDE2LCAweGVjNTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4OWUsMHgwMCwweGViLDB4MDQsMHgzMywweDQwIH0gfSwKK3sgIDE2LCAweGVjNjAsIDAsIHsweDJkLDB4ZGMsMHgwMywweDFkLDB4NjAsMHhlZiwweDAwLDB4MzIsMHgwMCwweGNmLDB4OWEsMHgwMywweDI4LDB4MDAsMHhmZCwweDAwIH0gfSwKK3sgIDE2LCAweGVjNzAsIDAsIHsweDMzLDB4YzEsMHg4YiwweGZjLDB4MGIsMHgzYywweDAwLDB4ZmMsMHgwMCwweDMyLDB4ODAsMHgwYywweDkwLDB4MDMsMHgyYSwweDA0IH0gfSwKK3sgIDE2LCAweGVjODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4YWMsMHgxMCwweGY4LDB4MDAsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweGVjOTAsIDAsIHsweDBlLDB4OTgsMHgyMywweGFjLDB4MDQsMHhmYiwweDAwLDB4M2MsMHgwMCwweDBmLDB4ODQsMHgyMCwweGVkLDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGVjYTAsIDAsIHsweDNlLDB4YzAsMHg0ZiwweGIwLDB4MDMsMHhlYywweDAwLDB4ZmQsMHgwMCwweDNlLDB4ODAsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwIH0gfSwKK3sgIDE2LCAweGVjYjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMSwweDEwLDB4ZmMsMHgwMCwweGNmLDB4ODAsMHgzMywweDQwIH0gfSwKK3sgIDE2LCAweGVjYzAsIDAsIHsweDBjLDB4ZDAsMHg4MywweGZjLDB4MDAsMHhlZiwweDAwLDB4M2YsMHg0MCwweDBjLDB4ZjEsMHg0MSwweDMwLDB4MTAsMHhjZCwweDAwIH0gfSwKK3sgIDE2LCAweGVjZDAsIDAsIHsweDNmLDB4YzAsMHgwMCwweDcwLDB4MTMsMHgzYywweDAwLDB4ZTQsMHgwMCwweGIxLDB4ZDAsMHgwYywweDEwLDB4MDMsMHgyMCwweDA0IH0gfSwKK3sgIDE2LCAweGVjZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMSwweDA0LDB4MmMsMHgwMCwweDhhLDB4ZTQsMHgyYSwweDQwIH0gfSwKK3sgIDE2LCAweGVjZjAsIDAsIHsweDI4LDB4OTAsMHgwMiwweGVjLDB4MDAsMHg4YiwweDAwLDB4M2UsMHgwMiwweDBhLDB4ODAsMHgwMiwweDJjLDB4ODIsMHg4OSwweDA0IH0gfSwKK3sgIDE2LCAweGVkMDAsIDAsIHsweDJlLDB4YzEsMHgwYSwweGIwLDB4MGEsMHgyYywweDAwLDB4ODksMHgwMiwweDIyLDB4ZjIsMHgyYSwweDk4LDB4MDIsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGVkMTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMiwweDgwLDB4MTQsMHgyYSwweDQwIH0gfSwKK3sgIDE2LCAweGVkMjAsIDAsIHsweDA4LDB4OTAsMHgwMiwweGVjLDB4MDgsMHhhYiwweDA0LDB4MmUsMHg4NCwweDA4LDB4MTAsMHg4MiwweDgwLDB4MTAsMHg4OSwweDAzIH0gfSwKK3sgIDE2LCAweGVkMzAsIDAsIHsweDJjLDB4YzAsMHg0YSwweGIwLDB4MjIsMHgyYywweDAwLDB4YWEsMHgwMCwweDIyLDB4ODAsMHgwOCwweDkxLDB4MDIsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGVkNDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDE0LDB4MmMsMHgwMCwweDgwLDB4MDAsMHgyOCwweDQwIH0gfSwKK3sgIDE2LCAweGVkNTAsIDAsIHsweDA4LDB4MTEsMHgwMiwweGVjLDB4MDAsMHg4MywweDAwLDB4MmMsMHg4MSwweDBhLDB4MDAsMHg1YSwweDg4LDB4MDAsMHgwMSwweDAwIH0gfSwKK3sgIDE2LCAweGVkNjAsIDAsIHsweDJjLDB4YzAsMHgwYSwweDMwLDB4MDIsMHgwYywweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgwYSwweDEwLDB4MDIsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweGVkNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGM5LDB4MDAsMHgzYSwweDQwIH0gfSwKK3sgIDE2LCAweGVkODAsIDAsIHsweDBjLDB4ZDQsMHgwMywweGZjLDB4MDAsMHhlYiwweDAwLDB4M2UsMHg0MCwweDBjLDB4OTIsMHgwMywweGEwLDB4MDAsMHg0ZCwweDAwIH0gfSwKK3sgIDE2LCAweGVkOTAsIDAsIHsweDNmLDB4YzAsMHgwZSwweGYwLDB4MzMsMHgzYywweDgwLDB4ZTgsMHgwMCwweDMyLDB4YzAsMHgwYywweDkwLDB4MDMsMHgyMCwweDAzIH0gfSwKK3sgIDE2LCAweGVkYTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDExLDB4ZmMsMHgwMCwweGZjLDB4MDAsMHgzZCwweDQwIH0gfSwKK3sgIDE2LCAweGVkYjAsIDAsIHsweDBmLDB4NTAsMHgwMywweGZjLDB4MDIsMHgzZiwweDA0LDB4M2IsMHgwMSwweDRmLDB4YzQsMHgxMywweDcwLDB4MDAsMHhmZCwweDAwIH0gfSwKK3sgIDE2LCAweGVkYzAsIDAsIHsweDNmLDB4YzAsMHgxZiwweGYwLDB4MDEsMHhmYywweDQwLDB4ZmMsMHgwMCwweDNmLDB4YzAsMHgwZiwweGQwLDB4MTMsMHhlOCwweDA2IH0gfSwKK3sgIDE2LCAweGVkZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZjgsMHhlMCwweGZmLDB4ODAsMHgzZCwweGMwIH0gfSwKK3sgIDE2LCAweGVkZTAsIDAsIHsweDBkLDB4ZjMsMHg4MiwweGYwLDB4ODAsMHhmZiwweDQwLDB4MzEsMHhjYiwweDBjLDB4ZjMsMHgwMywweGZkLDB4MDQsMHhlZiwweGMxIH0gfSwKK3sgIDE2LCAweGVkZjAsIDAsIHsweDMzLDB4ZTAsMHgwZiwweDc5LDB4MDMsMHhmZSwweDAwLDB4Y2YsMHg0MiwweDMzLDB4ZjAsMHg0YywweGY4LDB4MDMsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweGVlMDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDEwLDB4ZTksMHgwOCwweGI5LDB4ODEsMHgyZiwweGYwIH0gfSwKK3sgIDE2LCAweGVlMTAsIDAsIHsweDA4LDB4ZjQsMHg1MiwweGU5LDB4MjAsMHhiZiwweDQwLDB4MjMsMHhmMCwweDBhLDB4ZjMsMHgwMiwweGZkLDB4MDgsMHg4YiwweDAwIH0gfSwKK3sgIDE2LCAweGVlMjAsIDAsIHsweDM2LDB4ZTAsMHgwYiwweDgwLDB4MjIsMHhlOCwweDgwLDB4OGYsMHg0MCwweDIyLDB4YzAsMHgwOCwweGIwLDB4ODIsMHgzMCwweDA0IH0gfSwKK3sgIDE2LCAweGVlMzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4Y2MsMHgwMCwweGIxLDB4ODAsMHgyYywweGM1IH0gfSwKK3sgIDE2LCAweGVlNDAsIDAsIHsweDA5LDB4MzIsMHg0MiwweGM4LDB4YzAsMHhiMywweDMxLDB4MjAsMHhjMSwweDA4LDB4MzIsMHgwMiwweGNjLDB4ZDQsMHhiYiwweDIwIH0gfSwKK3sgIDE2LCAweGVlNTAsIDAsIHsweDY4LDB4YzAsMHgwYiwweDMwLDB4MDIsMHhjYywweDIwLDB4OTMsMHg2MCwweDIwLDB4ODgsMHgwOCwweDMyLDB4MDIsMHgzMiwweDAxIH0gfSwKK3sgIDE2LCAweGVlNjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDE1LDB4YTAsMHgwMCwweGJiLDB4ODAsMHgyZSwweGMwIH0gfSwKK3sgIDE2LCAweGVlNzAsIDAsIHsweDA4LDB4YjAsMHgwMiwweGVhLDB4MDAsMHhiYiwweDAwLDB4NjIsMHhjMSwweDBhLDB4YjAsMHgwMiwweGNjLDB4MDAsMHhhYiwweDAwIH0gfSwKK3sgIDE2LCAweGVlODAsIDAsIHsweDJlLDB4YzAsMHgwYiwweGEwLDB4MDAsMHhlOCwweDAwLDB4ODMsMHgwMCwweDIyLDB4YzEsMHgwOCwweDMwLDB4MDIsMHgzMCwweDA0IH0gfSwKK3sgIDE2LCAweGVlOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE1LDB4ZTgsMHg5MCwweGZiLDB4ODAsMHgzZSwweGMwIH0gfSwKK3sgIDE2LCAweGVlYTAsIDAsIHsweDBkLDB4YjAsMHgwMywweGUyLDB4MTAsMHhmYiwweDAwLDB4MzIsMHhjMCwweDRjLDB4YjAsMHgxMywweGVjLDB4MDAsMHhlOSwweDU0IH0gfSwKK3sgIDE2LCAweGVlYjAsIDAsIHsweDNhLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhlNiwweDAwLDB4Y2IsMHgwMCwweGIyLDB4NDAsMHgwYywweGIwLDB4MDMsMHgwNCwweDA0IH0gfSwKK3sgIDE2LCAweGVlYzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4YjgsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwIH0gfSwKK3sgIDE2LCAweGVlZDAsIDAsIHsweDhmLDB4ZjAsMHgwMywweGYwLDB4MDAsMHhmNywweDAyLDB4YmYsMHhjMSwweDBmLDB4ZjAsMHgyMywweGZjLDB4MDAsMHhkZiwweDA2IH0gfSwKK3sgIDE2LCAweGVlZTAsIDAsIHsweDM3LDB4YzAsMHg4ZiwweGM5LDB4MDcsMHhmYSwweDkyLDB4ZmYsMHgwNCwweDNmLDB4NTAsMHgyZiwweGYwLDB4MDMsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGVlZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg1MCwweDEwLDB4YWMsMHgwMCwweGM5LDB4MDAsMHgzZSwweGMyIH0gfSwKK3sgIDE2LCAweGVmMDAsIDAsIHsweDBlLDB4YjAsMHgyMywweGU0LDB4MDAsMHhlYiwweDAwLDB4M2EsMHhjOCwweDBlLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGVmMTAsIDAsIHsweDNlLDB4YzAsMHgwZiwweGI0LDB4MDMsMHhhNCwweDAwLDB4ZmIsMHgwMCwweDNlLDB4ODAsMHgwZiwweGIwLDB4ODMsMHhkMCwweDA0IH0gfSwKK3sgIDE2LCAweGVmMjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4MjgsMHgwMCwweDhiLDB4NzQsMHgyZCwweGMwIH0gfSwKK3sgIDE2LCAweGVmMzAsIDAsIHsweDA4LDB4ZjAsMHgwMiwweGU0LDB4MDAsMHg4ZiwweDAwLDB4MjEsMHhmMCwweDA4LDB4ZjAsMHgwMiwweGZjLDB4MTAsMHhkMywweDAwIH0gfSwKK3sgIDE2LCAweGVmNDAsIDAsIHsweDJlLDB4YzAsMHgwYiwweDkwLDB4MTIsMHgyYywweDAwLDB4ZWYsMHgwMCwweDJlLDB4YzAsMHgwYiwweGI2LDB4MDIsMHhmNiwweDAwIH0gfSwKK3sgIDE2LCAweGVmNTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDA1LDB4NDgsMHgwMCwweGEzLDB4MDAsMHgyYywweGM0IH0gfSwKK3sgIDE2LCAweGVmNjAsIDAsIHsweDBhLDB4MzAsMHgwMiwweGMwLDB4MDAsMHhhMywweDAwLDB4NjgsMHhmMCwweDBhLDB4MzAsMHgxMiwweGNjLDB4MDQsMHhhMiwweDAwIH0gfSwKK3sgIDE2LCAweGVmNzAsIDAsIHsweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhlYywweDAwLDB4YjMsMHgwMSwweDJlLDB4YzAsMHgwYiwweDM0LDB4MDIsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGVmODAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiMCwweDAxLDB4MGMsMHgwMCwweDg3LDB4ODAsMHgyZCwweGU4IH0gfSwKK3sgIDE2LCAweGVmOTAsIDAsIHsweDA4LDB4NzgsMHg0MiwweGRhLDB4MDAsMHg4NywweDgwLDB4MjUsMHhlMCwweDA4LDB4NzksMHgwMiwweGNlLDB4MDAsMHg5NiwweDgwIH0gfSwKK3sgIDE2LCAweGVmYTAsIDAsIHsweDJkLDB4ZTAsMHgwYiwweGQ5LDB4MDIsMHhkZSwweDAwLDB4YTcsMHg4MCwweDJkLDB4ZTAsMHgwYiwweDc4LDB4MDIsMHhmYywweDAwIH0gfSwKK3sgIDE2LCAweGVmYjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHg0MCwweGUzLDB4MTAsMHgzYywweGMwIH0gfSwKK3sgIDE2LCAweGVmYzAsIDAsIHsweDBhLDB4MzgsMHgwMywweGU4LDB4MDAsMHhlYiwweDAwLDB4MzgsMHhjMiwweDBhLDB4MzAsMHgwMywweGNjLDB4MDAsMHhlMywweDQwIH0gfSwKK3sgIDE2LCAweGVmZDAsIDAsIHsweDNjLDB4YzAsMHgwZiwweDM0LDB4MDMsMHhjZCwweDAwLDB4ZjMsMHgyMCwweDNjLDB4ODgsMHgwZiwweDMwLDB4MDMsMHhkMiwweDAyIH0gfSwKK3sgIDE2LCAweGVmZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDFkLDB4YjQsMHg4MCwweGZmLDB4MDQsMHgzZiwweGM4IH0gfSwKK3sgIDE2LCAweGVmZjAsIDAsIHsweDBmLDB4ZjAsMHg4MywweGY4LDB4NDAsMHhmZiwweDE4LDB4M2IsMHhjMCwweDBmLDB4ZjQsMHg4MywweGZjLDB4MDAsMHhlZSwweDAyIH0gfSwKK3sgIDE2LCAweGYwMDAsIDAsIHsweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHgzYywweDAwLDB4ZWYsMHgwOCwweDNmLDB4ODAsMHgwZiwweGYwLDB4MTMsMHhkMCwweDA2IH0gfSwKK3sgIDE2LCAweGYwMTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4ZTgsMHgwMCwweGNiLDB4MDAsMHgzZSwweGYyIH0gfSwKK3sgIDE2LCAweGYwMjAsIDAsIHsweDRkLDB4YjIsMHgxMywweGU4LDB4MDQsMHhjYiwweDAxLDB4MzIsMHhmOCwweDRkLDB4YjIsMHgxMywweDZkLDB4MjAsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGYwMzAsIDAsIHsweDNlLDB4YzAsMHgwZiwweDMwLDB4MDMsMHgyNCwweDAwLDB4ZmIsMHgwMCwweDNlLDB4NDAsMHg4ZiwweGI4LDB4MDMsMHgyYSwweDAwIH0gfSwKK3sgIDE2LCAweGYwNDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDExLDB4OGMsMHgwMCwweDg2LDB4MDAsMHgyYywweGMwIH0gfSwKK3sgIDE2LCAweGYwNTAsIDAsIHsweDA4LDB4NzMsMHgwMiwweGQ4LDB4MTIsMHg4NywweDMwLDB4MjAsMHhjYiwweDA4LDB4ZjIsMHgwMiwweDFkLDB4MDUsMHhiNSwweDAwIH0gfSwKK3sgIDE2LCAweGYwNjAsIDAsIHsweDJkLDB4YzAsMHgwYiwweDYwLDB4MDMsMHg1MCwweDEwLDB4YjcsMHgwOSwweDJkLDB4YzAsMHgwYiwweGYwLDB4MDIsMHgzMiwweDA0IH0gfSwKK3sgIDE2LCAweGYwNzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4OWUsMHgwMCwweDg3LDB4ODAsMHgyZCwweGU0IH0gfSwKK3sgIDE2LCAweGYwODAsIDAsIHsweDA5LDB4N2EsMHgwMiwweGNlLDB4MDEsMHg4NywweDgwLDB4MjEsMHhlYywweDA5LDB4NzgsMHgwMiwweDVlLDB4ODAsMHhiNywweGMwIH0gfSwKK3sgIDE2LCAweGYwOTAsIDAsIHsweDJkLDB4ZTAsMHgwYiwweGY4LDB4MDIsMHgxZSwweDAwLDB4YjcsMHhhMCwweDJkLDB4NjAsMHgwYiwweDc4LDB4MDIsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGYwYTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE0LDB4ZWUsMHgwMCwweDgyLDB4ODAsMHgyYywweGMwIH0gfSwKK3sgIDE2LCAweGYwYjAsIDAsIHsweDA4LDB4MzAsMHgwMiwweGVjLDB4MDAsMHg4MywweDAwLDB4YTAsMHhjMCwweDA4LDB4MzAsMHgwMiwweDBjLDB4MDAsMHhiMywweDgwIH0gfSwKK3sgIDE2LCAweGYwYzAsIDAsIHsweDJjLDB4YzEsMHgwYiwweDMwLDB4MDIsMHg0ZSwweDAwLDB4YjMsMHgwMCwweDJjLDB4ZjEsMHgwYiwweDMwLDB4MGEsMHgxMiwweDA0IH0gfSwKK3sgIDE2LCAweGYwZDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YmEsMHg4MCwweGM2LDB4MDAsMHgzZSwweDgwIH0gfSwKK3sgIDE2LCAweGYwZTAsIDAsIHsweDBkLDB4YTAsMHgwMywweGY4LDB4NDAsMHhjYSwweDAwLDB4MzIsMHg4MCwweDBkLDB4YTAsMHgxMywweDY4LDB4MDAsMHhmZSwweDAyIH0gfSwKK3sgIDE2LCAweGYwZjAsIDAsIHsweDdlLDB4ODAsMHgwZiwweGVkLDB4ODMsMHgzOSwweDEwLDB4ZmEsMHgwMCwweDNmLDB4OGMsMHgwZiwweGEwLDB4MDMsMHgzYSwweDA0IH0gfSwKK3sgIDE2LCAweGYxMDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4ZTAsMHgxMiwweGY4LDB4OTAsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGYxMTAsIDAsIHsweDBmLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmOCwweDA1LDB4M2UsMHgwMCwweDBlLDB4MDAsMHgwMywweGUwLDB4MDAsMHhmOCwweDgwIH0gfSwKK3sgIDE2LCAweGYxMjAsIDAsIHsweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhlMCwweDYwLDB4ZjgsMHgwMCwweDdlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiwweDAwIH0gfSwKK3sgIDE2LCAweGYxMzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGM5LDB4ODAsMHgzMiwweDY0IH0gfSwKK3sgIDE2LCAweGYxNDAsIDAsIHsweDBmLDB4OTAsMHg0MywweGU0LDB4MDYsMHhjMSwweDA0LDB4M2EsMHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhlOSwweDAwIH0gfSwKK3sgIDE2LCAweGYxNTAsIDAsIHsweDMyLDB4NDAsMHgwZiwweDkwLDB4MDMsMHgyNCwweDAwLDB4YzEsMHgwMSwweDMyLDB4NDAsMHgwYywweDkwLDB4MDMsMHhjMiwweDA0IH0gfSwKK3sgIDE2LCAweGYxNjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4YzAsMHgyMiwweDQwIH0gfSwKK3sgIDE2LCAweGYxNzAsIDAsIHsweDBiLDB4OTAsMHgwMiwweDI0LDB4MDAsMHg4OSwweDAwLDB4MjIsMHg1MCwweDFiLDB4OTAsMHgyMiwweDI0LDB4MDAsMHg4MSwweDAwIH0gfSwKK3sgIDE2LCAweGYxODAsIDAsIHsweDIyLDB4NDAsMHgwYiwweDkwLDB4MjIsMHgyNCwweDA4LDB4YzksMHgwMCwweDIwLDB4NDAsMHgwOCwweDk0LDB4MDIsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGYxOTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweDk5LDB4MjAsMHgyMiwweDQwIH0gfSwKK3sgIDE2LCAweGYxYTAsIDAsIHsweDBiLDB4MTAsMHgwMiwweGE0LDB4MDAsMHg4OSwweDAwLDB4MmEsMHg1OCwweDBiLDB4OTAsMHgwMiwweDg0LDB4MDAsMHhhOSwweDAwIH0gfSwKK3sgIDE2LCAweGYxYjAsIDAsIHsweDIyLDB4NDAsMHgwYiwweDEwLDB4MGEsMHgwNCwweDAwLDB4OTksMHgwMiwweDIyLDB4YzEsMHgwOCwweDkwLDB4ODIsMHhjNiwweDAwIH0gfSwKK3sgIDE2LCAweGYxYzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDQsMHgwMCwweDkxLDB4MDIsMHhhMCwweGM4IH0gfSwKK3sgIDE2LCAweGYxZDAsIDAsIHsweDBiLDB4MTIsMHgwMiwweDA0LDB4ODAsMHg4MSwweDIyLDB4MjAsMHg0OCwweDliLDB4MTIsMHgwMiwweDA0LDB4OTAsMHg4OSwweDAxIH0gfSwKK3sgIDE2LCAweGYxZTAsIDAsIHsweDIwLDB4NDAsMHgwYiwweDEwLDB4MDIsMHgwNCwweDAyLDB4ODEsMHgyMiwweDIyLDB4NDAsMHgwOCwweDEwLDB4MDIsMHhjMiwweDAxIH0gfSwKK3sgIDE2LCAweGYxZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MiwweGRhLDB4MDEsMHgzMiwweDAxIH0gfSwKK3sgIDE2LCAweGYyMDAsIDAsIHsweDBmLDB4ODUsMHgwMywweGExLDB4NDAsMHhjMCwweDUwLDB4M2EsMHgwMSwweDhiLDB4ODUsMHgyMywweGExLDB4NDQsMHhlOCwweDUwIH0gfSwKK3sgIDE2LCAweGYyMTAsIDAsIHsweGIyLDB4MDAsMHgwZiwweDg1LDB4MDMsMHgyMSwweDQ4LDB4ZDgsMHg1MSwweDMyLDB4MTQsMHgyYywweDg1LDB4MDMsMHhlZSwweDAzIH0gfSwKK3sgIDE2LCAweGYyMjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDFkLDB4ZjUsMHgwMCwweGVkLDB4MDIsMHgzZSwweDQ0IH0gfSwKK3sgIDE2LCAweGYyMzAsIDAsIHsweDBmLDB4OTEsMHgwMywweGY0LDB4NDAsMHhmOSwweDEwLDB4M2UsMHg0NCwweDBmLDB4OTEsMHgwMywweGU0LDB4NDAsMHhmZCwweDAwIH0gfSwKK3sgIDE2LCAweGYyNDAsIDAsIHsweDNlLDB4NDAsMHgwZiwweGQwLDB4MDMsMHhmNCwweDAwLDB4ZTksMHgxMCwweGJmLDB4NDAsMHgwZiwweDkwLDB4MDMsMHg2NiwweDA2IH0gfSwKK3sgIDE2LCAweGYyNTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZTYsMHgyMSwweGM1LDB4MDAsMHgzMywweDY4IH0gfSwKK3sgIDE2LCAweGYyNjAsIDAsIHsweDBmLDB4OWEsMHgwMywweDZmLDB4ODgsMHhjOSwweGMwLDB4MzMsMHg2OCwweDBjLDB4OWUsMHgwMywweDI3LDB4ODAsMHhkOSwweDQwIH0gfSwKK3sgIDE2LCAweGYyNzAsIDAsIHsweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjNSwweDEwLDB4ZDksMHhlOCwweDM2LDB4NTAsMHgwYywweGQwLDB4MDMsMHhlNiwweDAwIH0gfSwKK3sgIDE2LCAweGYyODAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDEwLDB4ZTEsMHgwOCwweDg4LDB4MDAsMHg4MiwweDAwIH0gfSwKK3sgIDE2LCAweGYyOTAsIDAsIHsweDBiLDB4OGUsMHg4MiwweGViLDB4YzgsMHg4OCwweGUwLDB4MjIsMHgwMCwweDI4LDB4ODgsMHg0MiwweGEyLDB4ODAsMHg4YSwweDgwIH0gfSwKK3sgIDE2LCAweGYyYTAsIDAsIHsweDIyLDB4MDAsMHgwYiwweGFhLDB4MDIsMHhlMiwweDAwLDB4ODgsMHhjMCwweDIyLDB4YTksMHgwOCwweDhhLDB4MDMsMHg4ZSwweDA0IH0gfSwKK3sgIDE2LCAweGYyYjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA1LDB4YzQsMHgwMCwweDgxLDB4MDAsMHgyMCwweGQwIH0gfSwKK3sgIDE2LCAweGYyYzAsIDAsIHsweDBiLDB4MTEsMHgzMiwweDg0LDB4ODQsMHg4MSwweDYwLDB4NjAsMHg1MCwweDA4LDB4MTYsMHgwNiwweDA1LDB4MDAsMHg5MSwweDIwIH0gfSwKK3sgIDE2LCAweGYyZDAsIDAsIHsweDIwLDB4NDAsMHgwYiwweDEwLDB4ODIsMHhlNCwweDA5LDB4OTEsMHgyMCwweDI0LDB4NDAsMHgwOCwweDEwLDB4YzIsMHhkMiwweDAxIH0gfSwKK3sgIDE2LCAweGYyZTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4YTQsMHgwNCwweDg5LDB4MDQsMHgyMiwweDQwIH0gfSwKK3sgIDE2LCAweGYyZjAsIDAsIHsweDBiLDB4OTAsMHgwMiwweGM0LDB4MDAsMHhhOSwweDAwLDB4MjIsMHg0MSwweDAwLDB4OTAsMHgwMiwweGE0LDB4MDAsMHg4MSwweDAwIH0gfSwKK3sgIDE2LCAweGYzMDAsIDAsIHsweDIyLDB4NDAsMHgwYiwweDkyLDB4MjIsMHhlNSwweDgwLDB4OTksMHgwMSwweDIyLDB4NjEsMHgwOCwweDkwLDB4MDIsMHg4NiwweDA0IH0gfSwKK3sgIDE2LCAweGYzMTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE0LDB4YTUsMHg4MiwweDgxLDB4OTAsMHgzMiwweDQwIH0gfSwKK3sgIDE2LCAweGYzMjAsIDAsIHsweDBmLDB4OTAsMHgxMywweDY3LDB4MDIsMHhjOSwweDAwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgyMywweDI0LDB4MDQsMHhkOSwweGMwIH0gfSwKK3sgIDE2LCAweGYzMzAsIDAsIHsweGIyLDB4NDAsMHgwZiwweDljLDB4MDMsMHhlNiwweDAwLDB4ZDksMHgwMCwweDM2LDB4NTAsMHgwYywweDkwLDB4MDMsMHhlOCwweDA0IH0gfSwKK3sgIDE2LCAweGYzNDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2OCwweDAwLDB4YTYsMHg4MCwweGY5LDB4MDAsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweGYzNTAsIDAsIHsweDBmLDB4OTAsMHgwMywweGU3LDB4MDAsMHhkOSwweDAwLDB4YmMsMHg0MiwweDBmLDB4OTAsMHg1MywweGU0LDB4MDQsMHhmOSwweDEwIH0gfSwKK3sgIDE2LCAweGYzNjAsIDAsIHsweDNlLDB4NDAsMHgwZiwweDk4LDB4MDMsMHhlNiwweDA0LDB4ZTEsMHgwMCwweDNlLDB4NDAsMHgyZiwweDkwLDB4MDMsMHhkYSwweDAwIH0gfSwKK3sgIDE2LCAweGYzNzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4ODEsMHgxMCwweDQ4LDB4MTAsMHgzMiwweDA4IH0gfSwKK3sgIDE2LCAweGYzODAsIDAsIHsweDBjLDB4ODAsMHgwZiwweDIxLDB4MDIsMHhjOCwweDAwLDB4M2EsMHgwNCwweDBmLDB4ODAsMHgwNywweDYwLDB4MDAsMHhmOCwweDQwIH0gfSwKK3sgIDE2LCAweGYzOTAsIDAsIHsweGIyLDB4MDAsMHgwZiwweDg0LDB4MGIsMHgyMCwweDAwLDB4ZDgsMHgwMCwweDM2LDB4MTAsMHgwYywweDgwLDB4MDMsMHhjYSwweDA0IH0gfSwKK3sgIDE2LCAweGYzYTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA0LDB4MjgsMHgwNCwweDhlLDB4ODAsMHgyMywweDgwIH0gfSwKK3sgIDE2LCAweGYzYjAsIDAsIHsweDA4LDB4YTAsMHg0MiwweDI4LDB4MDAsMHg4YSwweDAwLDB4MjMsMHhhMCwweDRiLDB4YTAsMHgwMiwweGU4LDB4MDAsMHhiYSwweDAwIH0gfSwKK3sgIDE2LCAweGYzYzAsIDAsIHsweDc2LDB4ODAsMHgwYiwweGEwLDB4MDIsMHgwOCwweDAwLDB4OGEsMHgwMCwweDMyLDB4ODAsMHgwOCwweGUwLDB4MDMsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGYzZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweDgyLDB4MDAsMHgyMCwweGQwIH0gfSwKK3sgIDE2LCAweGYzZTAsIDAsIHsweDA4LDB4MzAsMHgwMiwweDBjLDB4MDAsMHg5YiwweDAwLDB4MjgsMHhjMCwweDFhLDB4YjAsMHgwMiwweDZjLDB4MDAsMHhiMywweDAyIH0gfSwKK3sgIDE2LCAweGYzZjAsIDAsIHsweDIwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwYywweDAwLDB4YTMsMHgwMCwweDIyLDB4YzAsMHgyOCwweDM0LDB4ODIsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGY0MDAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAxLDB4MWMsMHgwMCwweDg3LDB4MDAsMHgyMCwweGUwIH0gfSwKK3sgIDE2LCAweGY0MTAsIDAsIHsweDA4LDB4NzgsMHgwMiwweDBjLDB4MDAsMHg5NywweDIwLDB4MjUsMHhjMCwweDBiLDB4NzEsMHgwMiwweGRjLDB4ODEsMHhiNywweDIwIH0gfSwKK3sgIDE2LCAweGY0MjAsIDAsIHsweDIxLDB4YzAsMHgwYiwweDdhLDB4NDIsMHgzYywweDgwLDB4ODcsMHgyMCwweDIxLDB4YzAsMHgwOCwweDcwLDB4MDIsMHhlOCwweDAwIH0gfSwKK3sgIDE2LCAweGY0MzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA4LDB4MGUsMHg4MiwweGM3LDB4ODAsMHhiMSwweGUwIH0gfSwKK3sgIDE2LCAweGY0NDAsIDAsIHsweDJjLDB4ZmEsMHgwNiwweDFlLDB4MDgsMHhkMywweGIxLDB4MzksMHg2MCwweDRlLDB4NzgsMHgxMiwweDVlLDB4YTAsMHhmZiwweGYwIH0gfSwKK3sgIDE2LCAweGY0NTAsIDAsIHsweDIxLDB4ZTAsMHgwZiwweGY4LDB4MDMsMHgxZiwweDA4LDB4ZTMsMHhhMCwweDMzLDB4ZTAsMHgwYywweDY4LDB4MDMsMHhlYSwweDAyIH0gfSwKK3sgIDE2LCAweGY0NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDFkLDB4YWMsMHg0MCwweGZiLDB4MDAsMHgzZSwweGMwIH0gfSwKK3sgIDE2LCAweGY0NzAsIDAsIHsweDBmLDB4YjIsMHgwMywweGVkLDB4YTgsMHhlYiwweDEwLDB4M2EsMHg4MCwweDBmLDB4YjAsMHhjMywweGVjLDB4NDAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweGY0ODAsIDAsIHsweDNlLDB4YzAsMHgwZiwweGIwLDB4ODMsMHhlYywweDgwLDB4ZWIsMHg3MCwweGJlLDB4YzQsMHgwZiwweGIwLDB4MDMsMHg4MiwweDA2IH0gfSwKK3sgIDE2LCAweGY0OTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4ZmUsMHgwMCwweGNlLDB4ODAsMHhiMywweDYwIH0gfSwKK3sgIDE2LCAweGY0YTAsIDAsIHsweDBmLDB4ZmMsMHg4MywweDdlLDB4MjAsMHhlZiwweGIwLDB4M2IsMHhlMCwweDBmLDB4YjgsMHgwMywweDNlLDB4MDAsMHhjZiwweDgxIH0gfSwKK3sgIDE2LCAweGY0YjAsIDAsIHsweDNmLDB4ZTAsMHg4ZiwweGY4LDB4ODMsMHhlZiwweDQwLDB4ZmYsMHhjMiwweDMzLDB4ZTEsMHgwYywweGY4LDB4MDMsMHhkMCwweDAwIH0gfSwKK3sgIDE2LCAweGY0YzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4OWMsMHg4MiwweDg3LDB4MTgsMHgyMSwweDgwIH0gfSwKK3sgIDE2LCAweGY0ZDAsIDAsIHsweDBiLDB4MzAsMHgwMiwweDFjLDB4NjAsMHhkNywweDEwLDB4MjEsMHhkMCwweDBiLDB4N2IsMHgwMiwweDNjLDB4MDAsMHhkNywweDAwIH0gfSwKK3sgIDE2LCAweGY0ZTAsIDAsIHsweDJkLDB4YzAsMHgwYiwweDcwLDB4MDIsMHhkZSwweDAwLDB4YmYsMHgwMCwweGEzLDB4YzQsMHgwOCwweDcwLDB4MDMsMHhhYSwweDA0IH0gfSwKK3sgIDE2LCAweGY0ZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YmMsMHgxMSwweDg3LDB4MDAsMHgyMSwweGMwIH0gfSwKK3sgIDE2LCAweGY1MDAsIDAsIHsweDBiLDB4MzAsMHgwMiwweDFjLDB4MDAsMHg5MywweDIwLDB4NjksMHhjMCwweDBiLDB4NzAsMHgwMiwweDFjLDB4MDAsMHg4NywweDAwIH0gfSwKK3sgIDE2LCAweGY1MTAsIDAsIHsweDJkLDB4YzAsMHgwYiwweDcxLDB4MDIsMHhkYywweDIwLDB4YjcsMHgxMCwweDIxLDB4YzAsMHgwOCwweDYwLDB4MDIsMHg4NCwweDAwIH0gfSwKK3sgIDE2LCAweGY1MjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MCwweDE0LDB4Y2QsMHgwMCwweDgzLDB4NDAsMHgyMCwweGMwIH0gfSwKK3sgIDE2LCAweGY1MzAsIDAsIHsweDRiLDB4MzAsMHgwMiwweDBjLDB4MDEsMHg4MywweDAwLDB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBjLDB4MDAsMHg5MywweDgwIH0gfSwKK3sgIDE2LCAweGY1NDAsIDAsIHsweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhjYywweDAxLDB4YjMsMHgwMCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MjIsMHg5OCwweDA0IH0gfSwKK3sgIDE2LCAweGY1NTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmYsMHgyMCwweGNhLDB4YzAsMHgzMiwweDgwIH0gfSwKK3sgIDE2LCAweGY1NjAsIDAsIHsweDBmLDB4ZjAsMHgwMywweDNlLDB4MDAsMHg5ZiwweDAwLDB4M2EsMHg4MCwweDBmLDB4ZjAsMHgwYiwweDNjLDB4MDAsMHhjZiwweDk4IH0gfSwKK3sgIDE2LCAweGY1NzAsIDAsIHsweDNlLDB4YzAsMHgwZiwweGY2LDB4MDMsMHhmZiwweDAwLDB4ZmYsMHgwMCwweDMxLDB4ZTAsMHgyYywweGIwLDB4MDMsMHhhZSwweDA0IH0gfSwKK3sgIDE2LCAweGY1ODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4Y2MsMHg4MCwweGZiLDB4MDAsMHgzZSwweDUwIH0gfSwKK3sgIDE2LCAweGY1OTAsIDAsIHsweDBmLDB4YjAsMHgwMywweGFjLDB4MDIsMHhmYiwweDAwLDB4N2UsMHg1MCwweDBmLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweGY1YTAsIDAsIHsweDNlLDB4YzAsMHgwZiwweGIyLDB4MDMsMHhlYywweDIwLDB4ZjMsMHgwMCwweDNlLDB4YzYsMHgwZiwweDkwLDB4MDMsMHhhMCwweDAwIH0gfSwKK3sgIDE2LCAweGY1YjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMiwweGNmLDB4OTgsMHg3MywweGM4IH0gfSwKK3sgIDE2LCAweGY1YzAsIDAsIHsweDBmLDB4NzAsMHgwMywweDNjLDB4MDAsMHhmZiwweDAwLDB4MzMsMHgyOCwweDBmLDB4YjAsMHgwMiwweDFjLDB4MDAsMHg0ZiwweDAwIH0gfSwKK3sgIDE2LCAweGY1ZDAsIDAsIHsweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmYywweDAwLDB4ZmYsMHgwMSwweDMzLDB4YzAsMHgwYywweGU0LDB4MDMsMHhlNCwweDA0IH0gfSwKK3sgIDE2LCAweGY1ZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NmMsMHgwMCwweDgzLDB4ODAsMHhhMiwweGY4IH0gfSwKK3sgIDE2LCAweGY1ZjAsIDAsIHsweDBiLDB4YjAsMHg0MiwweDJjLDB4MDAsMHhiYiwweDAwLDB4MzIsMHgxMCwweDBmLDB4YjAsMHgwMywweDZjLDB4MDQsMHhhYiwweDAwIH0gfSwKK3sgIDE2LCAweGY2MDAsIDAsIHsweDJlLDB4YzAsMHgwYiwweGIwLDB4MTIsMHhlYywweDA0LDB4ZWIsMHgwMCwweDIyLDB4YzAsMHg0YSwweDk0LDB4ODIsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGY2MTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4NmMsMHgwMCwweDhhLDB4MDAsMHgyMiwweDAwIH0gfSwKK3sgIDE2LCAweGY2MjAsIDAsIHsweDBiLDB4YjAsMHgwMiwweDJjLDB4MDAsMHhiMywweDAwLDB4YTIsMHhjMCwweDBiLDB4MzAsMHgwMiwweGFjLDB4MDAsMHhhYiwweDA0IH0gfSwKK3sgIDE2LCAweGY2MzAsIDAsIHsweDJlLDB4YzAsMHgwYiwweGIwLDB4NDIsMHhlYywweDAwLDB4YmIsMHgwMCwweDIyLDB4YzAsMHgwOCwweGIwLDB4MjIsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGY2NDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MGMsMHgwMCwweDhiLDB4MDEsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGY2NTAsIDAsIHsweDBiLDB4MzAsMHgwNiwweDBjLDB4MDAsMHhiMywweDAwLDB4MjAsMHhjMCwweDBhLDB4MzIsMHgwYSwweGNjLDB4MDAsMHhhMywweDAwIH0gfSwKK3sgIDE2LCAweGY2NjAsIDAsIHsweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhjYywweDAwLDB4YTMsMHgwMCwweDIyLDB4YzAsMHg0YSwweDAwLDB4MTIsMHhjMiwweDAxIH0gfSwKK3sgIDE2LCAweGY2NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4NmMsMHgwMCwweDhiLDB4MDQsMHgyMiwweGMwIH0gfSwKK3sgIDE2LCAweGY2ODAsIDAsIHsweDBmLDB4ZjEsMHgwMywweDFjLDB4MDAsMHhmZiwweDA0LDB4MzIsMHhjMCwweDBiLDB4ZjIsMHgwMywweGJjLDB4MDAsMHhlZiwweDAwIH0gfSwKK3sgIDE2LCAweGY2OTAsIDAsIHsweDNlLDB4YzAsMHgwNywweGYwLDB4MDMsMHhmYywweDgwLDB4ZmYsMHgwMCwweGIyLDB4YzAsMHgwYywweGEwLDB4MDMsMHhlMCwweDAzIH0gfSwKK3sgIDE2LCAweGY2YTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE5LDB4ZGMsMHgwMCwweGY1LDB4MDAsMHgzZiwweGMwIH0gfSwKK3sgIDE2LCAweGY2YjAsIDAsIHsweDBmLDB4ZjAsMHgwMywweGZjLDB4MDEsMHhmZiwweDAyLDB4M2IsMHhjMCwweDBmLDB4ZjEsMHgwMywweDdjLDB4MDAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweGY2YzAsIDAsIHsweDNmLDB4YzAsMHgwZiwweGYwLDB4MTMsMHhmYywweDQwLDB4ZWYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGMwLDB4MDMsMHhlOCwweDA2IH0gfSwKK3sgIDE2LCAweGY2ZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDE1LDB4ZjIsMHg0MCwweGNjLDB4ODAsMHgzNywweDIwIH0gfSwKK3sgIDE2LCAweGY2ZTAsIDAsIHsweDBjLDB4ZDgsMHgwMywweGIwLDB4NDQsMHhmYywweDA4LDB4M2YsMHgwZSwweDBmLDB4YzEsMHgwMywweGZjLDB4MDAsMHhjYywweDk0IH0gfSwKK3sgIDE2LCAweGY2ZjAsIDAsIHsweDNmLDB4MGEsMHgyZSwweGM0LDB4MDMsMHg3ZCwweDgwLDB4Y2YsMHgxMCwweDNmLDB4YzAsMHgwZiwweGMwLDB4ODMsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweGY3MDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA4LDB4ZTAsMHg5MCwweDg4LDB4MDIsMHgyMiwweDgxIH0gfSwKK3sgIDE2LCAweGY3MTAsIDAsIHsweDA4LDB4OTIsMHgxMywweGE0LDB4NDAsMHgzYiwweDYwLDB4MjIsMHgxOCwweDBiLDB4ODEsMHgwMiwweGZjLDB4ZDQsMHg4MSwweDAwIH0gfSwKK3sgIDE2LCAweGY3MjAsIDAsIHsweDNhLDB4YjAsMHgwYSwweDk0LDB4MDIsMHgzZCwweDQwLDB4YWYsMHg2MywweDJmLDB4ZGYsMHgwYiwweDk4LDB4MDAsMHgyMCwweDA0IH0gfSwKK3sgIDE2LCAweGY3MzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4ZTAsMHgwMCwweDg4LDB4MDAsMHgyMCwweDQwIH0gfSwKK3sgIDE2LCAweGY3NDAsIDAsIHsweDg4LDB4MzAsMHg4MiwweGMwLDB4MDAsMHhiMCwweDA4LDB4MjgsMHg4MCwweDBhLDB4MTAsMHgwMiwweGNjLDB4MjAsMHg4MCwweDAxIH0gfSwKK3sgIDE2LCAweGY3NTAsIDAsIHsweDJjLDB4NDAsMHgxYiwweDA2LDB4MDIsMHg4YywweDkwLDB4OTMsMHg2MCwweDY4LDB4YzAsMHg0YSwweDAwLDB4NDIsMHgyMiwweDAxIH0gfSwKK3sgIDE2LCAweGY3NjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4YTAsMHgwMiwweDg4LDB4MDAsMHgyMiwweGMwIH0gfSwKK3sgIDE2LCAweGY3NzAsIDAsIHsweDA4LDB4YjAsMHgwMiwweGU0LDB4MjAsMHhiYiwweDg4LDB4MjYsMHg5OCwweDBiLDB4ODAsMHg0MiwweGNjLDB4MTgsMHg4YSwweDAwIH0gfSwKK3sgIDE2LCAweGY3ODAsIDAsIHsweDJlLDB4YzIsMHgxYiwweDk4LDB4MDIsMHhhYywweDAwLDB4YWIsMHgwMCwweDJlLDB4YzAsMHgwYiwweDk4LDB4ODIsMHgzMCwweDA0IH0gfSwKK3sgIDE2LCAweGY3OTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDExLDB4ZTMsMHhjMCwweGNiLDB4MDIsMHgzMiwweDAwIH0gfSwKK3sgIDE2LCAweGY3YTAsIDAsIHsweDJjLDB4ODAsMHgwMywweGFlLDB4MDgsMHhiOSwweDAwLDB4M2UsMHg3MCwweDBmLDB4YjksMHgwMywweGVjLDB4MDIsMHg0OCwweDQ4IH0gfSwKK3sgIDE2LCAweGY3YjAsIDAsIHsweDNjLDB4YzAsMHgwZiwweDhjLDB4OTMsMHhlYywweDAwLDB4ZGIsMHgwMCwweDFhLDB4YzAsMHgwZSwweGFjLDB4MDMsMHgxMCwweDA0IH0gfSwKK3sgIDE2LCAweGY3YzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4YjIsMHgwMCwweGZmLDB4MDAsMHhiYiwweDgwIH0gfSwKK3sgIDE2LCAweGY3ZDAsIDAsIHsweDBmLDB4YzAsMHg0MywweGI2LDB4NDAsMHhiZCwweDAwLDB4M2IsMHg2MCwweDBmLDB4ZTgsMHgwMywweGZjLDB4MDAsMHhmZiwweDk0IH0gfSwKK3sgIDE2LCAweGY3ZTAsIDAsIHsweDNiLDB4ZTQsMHgwZSwweDYwLDB4MGYsMHg2YywweDA4LDB4ZWYsMHgwMSwweDNmLDB4YzAsMHgwZiwweDYwLDB4MDMsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGY3ZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YTEsMHgwMCwweGZiLDB4MDAsMHgzZSwweDYwIH0gfSwKK3sgIDE2LCAweGY4MDAsIDAsIHsweDBmLDB4YTAsMHgwMywweGVkLDB4MDAsMHhmOSwweDQwLDB4M2EsMHgwMCwweDBmLDB4OTAsMHgwMywweGVjLDB4MDIsMHhjOSwweDA0IH0gfSwKK3sgIDE2LCAweGY4MTAsIDAsIHsweDMyLDB4ZDAsMHgwZiwweDkwLDB4MDMsMHgyYywweDA4LDB4ZGIsMHgwMCwweGI2LDB4YzAsMHgwZCwweGI0LDB4MDMsMHhkMCwweDA0IH0gfSwKK3sgIDE2LCAweGY4MjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4MDAsMHgwMCwweGIzLDB4ODksMHgyZSwweGUwIH0gfSwKK3sgIDE2LCAweGY4MzAsIDAsIHsweDBiLDB4YTQsMHgwMywweGE0LDB4MDEsMHhiOSwweDAwLDB4MmUsMHgwMSwweDBiLDB4OTAsMHg0MiwweGZjLDB4MTAsMHg4OSwweDUwIH0gfSwKK3sgIDE2LCAweGY4NDAsIDAsIHsweGEyLDB4YzAsMHg4ZCwweGI0LDB4MDIsMHgzYywweDQ0LDB4OGYsMHgwMCwweDIzLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhmMiwweDAwIH0gfSwKK3sgIDE2LCAweGY4NTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA0LDB4MGMsMHgwMCwweGIwLDB4ODAsMHgyZSwweDAwIH0gfSwKK3sgIDE2LCAweGY4NjAsIDAsIHsweDBiLDB4MTIsMHgwMiwweGM4LDB4MDAsMHhiYSwweDAwLDB4MmMsMHhjMCwweDBiLDB4MjAsMHgwMiwweGNjLDB4MDAsMHhhMiwweDAwIH0gfSwKK3sgIDE2LCAweGY4NzAsIDAsIHsweDIwLDB4MDAsMHgyYiwweDJkLDB4OWEsMHgyZSwweDQyLDB4ODMsMHgwMCwweDI4LDB4YzAsMHgwOCwweDIwLDB4MDIsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGY4ODAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAwLDB4MWUsMHgwNCwweGI0LDB4ODAsMHgyZCwweGEwIH0gfSwKK3sgIDE2LCAweGY4OTAsIDAsIHsweDBiLDB4NTgsMHgwMiwweDkyLDB4MDAsMHhiNiwweDgwLDB4MmQsMHhlMCwweDBiLDB4NjgsMHgwMiwweGRlLDB4NDAsMHhhNiwweDgwIH0gfSwKK3sgIDE2LCAweGY4YTAsIDAsIHsweDIxLDB4MjQsMHgyOSwweDQ4LDB4MDIsMHgxZSwweDgwLDB4ODcsMHg4MCwweDY5LDB4ZTAsMHgwOCwweDYxLDB4MDIsMHhjOCwweDAwIH0gfSwKK3sgIDE2LCAweGY4YjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE4LDB4MGMsMHgwMCwweGYwLDB4MzAsMHgzYywweDRjIH0gfSwKK3sgIDE2LCAweGY4YzAsIDAsIHsweDBmLDB4MzIsMHgwMywweGM4LDB4ODAsMHhiMiwweDAwLDB4MzgsMHg4MCwweDBmLDB4MWIsMHgwMywweGVjLDB4MDAsMHhlMCwweDMwIH0gfSwKK3sgIDE2LCAweGY4ZDAsIDAsIHsweDMwLDB4MDQsMHgwZiwweGIxLDB4MDMsMHgwZSwweDg1LDB4Y2IsMHgwMCwweDNhLDB4YzAsMHgwYywweDMxLDB4MDMsMHhkMiwweDAyIH0gfSwKK3sgIDE2LCAweGY4ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDFjLDB4YmMsMHgwMCwweGZjLDB4MTEsMHgzZiwweGM0IH0gfSwKK3sgIDE2LCAweGY4ZjAsIDAsIHsweDBmLDB4YjgsMHgxMywweGIwLDB4MDQsMHhmZSwweDAyLDB4M2YsMHg4MCwweDBmLDB4YzAsMHgwMywweGZkLDB4MDAsMHhkZiwweDEyIH0gfSwKK3sgIDE2LCAweGY5MDAsIDAsIHsweDFkLDB4MDQsMHgwZiwweGQwLDB4NDMsMHhiYywweDAxLDB4ZWYsMHgxMCwweDMzLDB4YzQsMHgwZSwweGYzLDB4MDMsMHhkMCwweDA2IH0gfSwKK3sgIDE2LCAweGY5MTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4ZWUsMHgwMCwweGNiLDB4MDAsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGY5MjAsIDAsIHsweDBmLDB4ODAsMHgwMywweDI4LDB4MDAsMHhmOCwweDAwLDB4M2UsMHg0MCwweDNkLDB4YjAsMHgwMywweGVmLDB4MDgsMHhjOSwweDAwIH0gfSwKK3sgIDE2LCAweGY5MzAsIDAsIHsweDNhLDB4MDAsMHgwYywweGEwLDB4MDMsMHhlYywweDk4LDB4ZmIsMHgyMCwweDMyLDB4ZDIsMHgwYywweGE4LDB4MDMsMHgyYSwweDAyIH0gfSwKK3sgIDE2LCAweGY5NDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDExLDB4OWMsMHgwMCwweDg3LDB4MDEsMHgyZCwweDgwIH0gfSwKK3sgIDE2LCAweGY5NTAsIDAsIHsweDBiLDB4NDAsMHg0MiwweDFjLDB4MDQsMHgzNywweDAwLDB4YTEsMHg0MCwweDA4LDB4NjAsMHgwMiwweGNjLDB4ODAsMHg4NywweDAwIH0gfSwKK3sgIDE2LCAweGY5NjAsIDAsIHsweDJkLDB4ODAsMHgyZSwweDcwLDB4MDIsMHhkYywweGE5LDB4YjcsMHgyOCwweDIxLDB4ZDAsMHgwOCwweDcwLDB4MDIsMHgxMiwweDAwIH0gfSwKK3sgIDE2LCAweGY5NzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAwLDB4YmUsMHgwMiwweDg3LDB4ODAsMHgyZCwweDYwIH0gfSwKK3sgIDE2LCAweGY5ODAsIDAsIHsweDRiLDB4ZTgsMHgwMiwweDVhLDB4MDEsMHhiNCwweDg4LDB4MjgsMHhlMCwweDg4LDB4NzgsMHhjMiwweGRlLDB4NTIsMHg4NiwweGMwIH0gfSwKK3sgIDE2LCAweGY5OTAsIDAsIHsweDI5LDB4NjAsMHgwOCwweDY4LDB4MDIsMHhkZSwweDQwLDB4YjMsMHg5MiwweGUxLDB4ZTgsMHgyOCwweDI4LDB4MDIsMHg3MCwweDAwIH0gfSwKK3sgIDE2LCAweGY5YTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2OCwweDE0LDB4Y2MsMHgwMCwweDhiLDB4ODAsMHgyZSwweGMwIH0gfSwKK3sgIDE2LCAweGY5YjAsIDAsIHsweDBiLDB4MjAsMHgwMiwweDRkLDB4ODAsMHg5YiwweDIwLDB4MjAsMHhlMCwweDA4LDB4MzgsMHgwMiwweGNjLDB4MDAsMHg4MywweDgwIH0gfSwKK3sgIDE2LCAweGY5YzAsIDAsIHsweDJjLDB4YzAsMHgwYSwweGIwLDB4MDIsMHhjYywweDA4LDB4YjMsMHgwMCwweDIwLDB4YzAsMHgwOCwweDMxLDB4MDIsMHg1MiwweDA0IH0gfSwKK3sgIDE2LCAweGY5ZDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDA1LDB4YTgsMHgwMCwweGNhLDB4ZTAsMHgzZSwweDgwIH0gfSwKK3sgIDE2LCAweGY5ZTAsIDAsIHsweDFmLDB4YTQsMHgwYiwweDc5LDB4MDAsMHhmZSwweDAwLDB4M2YsMHg4MiwweDFkLDB4ZTAsMHgwMywweGU4LDB4MDAsMHhjZSwweDQwIH0gfSwKK3sgIDE2LCAweGY5ZjAsIDAsIHsweDNiLDB4ODgsMHgyYywweGU0LDB4MDMsMHhlOCwweDAxLDB4ZmEsMHgwMCwweDMyLDB4ODAsMHgwYywweGU4LDB4MDMsMHg3YSwweDA0IH0gfSwKK3sgIDE2LCAweGZhMDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDExLDB4YTAsMHgwMCwweGY4LDB4MDksMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGZhMTAsIDAsIHsweDhmLDB4YzAsMHg4MywweGEwLDB4MTgsMHhmOCwweDAwLDB4M2MsMHgyMCwweDBmLDB4ODgsMHgwMywweGUwLDB4MDAsMHhmOCwweDA4IH0gfSwKK3sgIDE2LCAweGZhMjAsIDAsIHsweDNlLDB4MjAsMHgwZSwweDgwLDB4ODMsMHhlMSwweDAxLDB4ZjAsMHgwMCwweDNjLDB4MDAsMHgwZiwweDgwLDB4MGIsMHg5MiwweDAwIH0gfSwKK3sgIDE2LCAweGZhMzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4YTQsMHgwMCwweGY5LDB4NDIsMHgzMiwweDQwIH0gfSwKK3sgIDE2LCAweGZhNDAsIDAsIHsweDRjLDB4OTgsMHgwMywweDA0LDB4MDAsMHhjOSwweDAwLDB4M2EsMHg0MCwweDBmLDB4OTAsMHgyMywweDI0LDB4MDAsMHhiOSwweDgxIH0gfSwKK3sgIDE2LCAweGZhNTAsIDAsIHsweDNjLDB4NDAsMHgwYywweDkyLDB4MDMsMHgyNCwweDAwLDB4ZjksMHgwNSwweDMyLDB4NDAsMHg2YywweDkwLDB4YzMsMHhjMiwweDA0IH0gfSwKK3sgIDE2LCAweGZhNjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4MjQsMHgxNCwweGI5LDB4MDAsMHhhMiwweDU0IH0gfSwKK3sgIDE2LCAweGZhNzAsIDAsIHsweDA4LDB4OWIsMHgxYSwweDI0LDB4MDIsMHg4OSwweDAwLDB4MjIsMHg0MCwweDI4LDB4OTAsMHgwMiwweGE0LDB4MDAsMHhiOSwweDkwIH0gfSwKK3sgIDE2LCAweGZhODAsIDAsIHsweDJlLDB4NDAsMHgyOCwweDljLDB4ODIsMHgyNSwweDA0LDB4YjksMHgwMCwweDIyLDB4NDAsMHgwOCwweDk4LDB4MTIsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGZhOTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweGFkLDB4MDAsMHgyMywweDQwIH0gfSwKK3sgIDE2LCAweGZhYTAsIDAsIHsweDA4LDB4NTAsMHgwMiwweDY0LDB4MDAsMHg4OSwweDAwLDB4MmEsMHg0MCwweDA4LDB4MTAsMHgwMiwweDY0LDB4MDAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweGZhYjAsIDAsIHsweDZlLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyNSwweDAwLDB4YTksMHgwMCwweDIyLDB4NDAsMHgwOCwweDkxLDB4MDYsMHhjNiwweDAwIH0gfSwKK3sgIDE2LCAweGZhYzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MTQsMHgwMCwweGI1LDB4MTAsMHhhMSwweDQ0IH0gfSwKK3sgIDE2LCAweGZhZDAsIDAsIHsweDI4LDB4NTAsMHgwMiwweDQ0LDB4ODAsMHg4MSwweDMwLDB4MjAsMHg0OCwweDA4LDB4MTIsMHgwMiwweDg0LDB4NDAsMHhiMSwweDgwIH0gfSwKK3sgIDE2LCAweGZhZTAsIDAsIHsweDZjLDB4YzgsMHgwOCwweDEyLDB4MDIsMHgwNCwweDgwLDB4YjEsMHgzNCwweDIwLDB4NDgsMHgwOCwweDEyLDB4MDIsMHhjMiwweDAxIH0gfSwKK3sgIDE2LCAweGZhZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGU4LDB4NDAsMHgzMiwweDkwIH0gfSwKK3sgIDE2LCAweGZiMDAsIDAsIHsweDBjLDB4YzUsMHgwMywweDYxLDB4NDAsMHhjMCwweDQwLDB4M2EsMHgxNCwweDBmLDB4ODUsMHgwMywweDIxLDB4YjAsMHhmOCwweDUwIH0gfSwKK3sgIDE2LCAweGZiMTAsIDAsIHsweDNlLDB4MDAsMHgwYywweDg1LDB4MDMsMHgyMSwweDQwLDB4ZjgsMHg0MCwweGIwLDB4MTQsMHgwYywweDgwLDB4MDMsMHhlZSwweDAxIH0gfSwKK3sgIDE2LCAweGZiMjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDFkLDB4YzQsMHgwNCwweGY5LDB4MjIsMHgwZSwweDQ4IH0gfSwKK3sgIDE2LCAweGZiMzAsIDAsIHsweDBmLDB4MTAsMHgxMywweGI0LDB4NDAsMHhmZCwweDMwLDB4M2YsMHg0NCwweDRmLDB4ZDEsMHgwMCwweGU0LDB4ODQsMHhmZiwweDAxIH0gfSwKK3sgIDE2LCAweGZiNDAsIDAsIHsweDNkLDB4NDQsMHgwZiwweGQxLDB4MGIsMHhlNCwweDQwLDB4ZjksMHgzMCwweDNlLDB4NDQsMHgwZiwweGQxLDB4MDMsMHhlNiwweDA0IH0gfSwKK3sgIDE2LCAweGZiNTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDA1LDB4ZTQsMHgwMCwweGRkLDB4NDAsMHgzZiwweDUwIH0gfSwKK3sgIDE2LCAweGZiNjAsIDAsIHsweDBjLDB4ZDAsMHgwMywweDJjLDB4MDAsMHhjOSwweDAwLDB4MzYsMHg0MCwweDBmLDB4OTAsMHgxMywweDI3LDB4MDQsMHhmNSwweDAxIH0gfSwKK3sgIDE2LCAweGZiNzAsIDAsIHsweDM3LDB4NDAsMHgwYywweGYwLDB4MDMsMHhmNiwweDIwLDB4ZjksMHhhOCwweDMyLDB4NjgsMHgwYywweGQwLDB4MDMsMHhjNiwweDAwIH0gfSwKK3sgIDE2LCAweGZiODAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAwLDB4ZTAsMHgwMCwweDg4LDB4YTAsMHgyZSwweDI4IH0gfSwKK3sgIDE2LCAweGZiOTAsIDAsIHsweDI4LDB4ODAsMHgwMiwweDIwLDB4MDAsMHg4OCwweGEwLDB4MjIsMHgwMCwweDBiLDB4ODAsMHgwYSwweDYyLDB4ODAsMHhiOCwweDAwIH0gfSwKK3sgIDE2LCAweGZiYTAsIDAsIHsweDIyLDB4MDAsMHgwOCwweDgwLDB4MDIsMHhlMSwweDAwLDB4YjgsMHhlMCwweDIyLDB4M2EsMHgwOCwweGEwLDB4MDIsMHhjZSwweDA0IH0gfSwKK3sgIDE2LCAweGZiYjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4ODQsMHgwMiwweDgxLDB4MDAsMHgyZSwweDQwIH0gfSwKK3sgIDE2LCAweGZiYzAsIDAsIHsweDA4LDB4MTAsMHgwYSwweDQ0LDB4MDIsMHg4MSwweDA4LDB4MjQsMHg0MCwweDBhLDB4MTAsMHgwMiwweDQ1LDB4ODAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweGZiZDAsIDAsIHsweDI0LDB4NDAsMHgyOSwweDEwLDB4MDIsMHhjNCwweDAwLDB4YjEsMHgwOCwweDI0LDB4NDQsMHgwOCwweDEwLDB4MDIsMHhjMiwweDAxIH0gfSwKK3sgIDE2LCAweGZiZTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE0LDB4YTQsMHgwNCwweDg5LDB4MDEsMHgyZSwweDUwIH0gfSwKK3sgIDE2LCAweGZiZjAsIDAsIHsweDQ4LDB4YjIsMHgwMiwweDY0LDB4MDAsMHg5MSwweDAwLDB4MjIsMHg0NiwweDBiLDB4OTAsMHgwMiwweDY0LDB4MDAsMHhiOSwweDAxIH0gfSwKK3sgIDE2LCAweGZjMDAsIDAsIHsweDI2LDB4YzAsMHgwOSwweGIwLDB4MTIsMHhlNCwweDAwLDB4YjEsMHgwMCwweDI2LDB4NDAsMHgwOCwweDkwLDB4MDIsMHhjNiwweDA0IH0gfSwKK3sgIDE2LCAweGZjMTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDA0LDB4ZTQsMHgwMCwweGM5LDB4MDAsMHgzYywweDQwIH0gfSwKK3sgIDE2LCAweGZjMjAsIDAsIHsweDBjLDB4OTAsMHgwMywweDY0LDB4MDAsMHhjOSwweDAyLDB4MzYsMHg1MCwweDBlLDB4OTMsMHgwMywweDI0LDB4MDAsMHhmOSwweDkwIH0gfSwKK3sgIDE2LCAweGZjMzAsIDAsIHsweDM2LDB4NDgsMHgwZCwweDk0LDB4ODMsMHhlNCwweDA4LDB4ZjksMHgwMCwweGI2LDB4NDAsMHgwYywweDk0LDB4MDMsMHhlOCwweDA0IH0gfSwKK3sgIDE2LCAweGZjNDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2OCwweDEwLDB4YTQsMHgwMCwweGU5LDB4MDAsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweGZjNTAsIDAsIHsweDBmLDB4OTAsMHgxMywweGE0LDB4MDAsMHhlOSwweDAyLDB4MmUsMHg2MSwweDA1LDB4OTAsMHgwMywweGE0LDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGZjNjAsIDAsIHsweDNhLDB4NDAsMHgwZSwweDkwLDB4NDMsMHhlNCwweDEwLDB4ZjksMHgwMCwweDM4LDB4NDAsMHgyZiwweDkwLDB4MDMsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGZjNzAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGQ4LDB4MDEsMHgzMiwweDA0IH0gfSwKK3sgIDE2LCAweGZjODAsIDAsIHsweDBmLDB4ODAsMHg0MywweGMwLDB4MDEsMHhjOCwweDAwLDB4YjIsMHgwMSwweDBjLDB4ODAsMHgwMywweDIwLDB4MDAsMHhjOCwweDQwIH0gfSwKK3sgIDE2LCAweGZjOTAsIDAsIHsweDMwLDB4MDAsMHg4YywweDg0LDB4ODMsMHhlMCwweDAwLDB4YzgsMHgwMCwweDMyLDB4MDAsMHg2YywweDg0LDB4MDMsMHhjYSwweDA0IH0gfSwKK3sgIDE2LCAweGZjYTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MjgsMHgwMCwweGJhLDB4MDAsMHgyMywweDgwIH0gfSwKK3sgIDE2LCAweGZjYjAsIDAsIHsweDBiLDB4ZWEsMHgwMiwweGU4LDB4MDAsMHhhYSwweDAwLDB4MjIsMHg4MCwweDA4LDB4YTAsMHgwMiwweDI4LDB4MDAsMHg4NiwweDIwIH0gfSwKK3sgIDE2LCAweGZjYzAsIDAsIHsweDM3LDB4YTAsMHg4ZCwweGU0LDB4MDIsMHhmOCwweDAwLDB4ZGEsMHgwMCwweDIyLDB4ODAsMHgwOCwweGEwLDB4MDIsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGZjZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4NmMsMHgwMCwweGIzLDB4MDAsMHgyMCwweGMwIH0gfSwKK3sgIDE2LCAweGZjZTAsIDAsIHsweDBiLDB4YjgsMHgwMiwweDRjLDB4MDQsMHg4MywweDAwLDB4MjAsMHhjMCwweDA4LDB4YjAsMHgwMiwweDBjLDB4MDIsMHg4MywweDAwIH0gfSwKK3sgIDE2LCAweGZjZjAsIDAsIHsweDIwLDB4NDAsMHgyOCwweDM0LDB4MDIsMHhjZSwweDkwLDB4ODMsMHgwMCwweGEwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGZkMDAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAxLDB4MWMsMHhjMCwweGI1LDB4ODgsMHgyMSwweDQwIH0gfSwKK3sgIDE2LCAweGZkMTAsIDAsIHsweDBiLDB4NzAsMHgwMiwweGRjLDB4ODAsMHhhMywweDIwLDB4MjEsMHhlMCwweDQ4LDB4MzIsMHg0MiwweDBlLDB4OTAsMHg4ZSwweDAxIH0gfSwKK3sgIDE2LCAweGZkMjAsIDAsIHsweDY1LDB4NTAsMHgwOSwweDcwLDB4MDIsMHhkZSwweDIwLDB4OTMsMHgyMSwweDIxLDB4YzAsMHgwOCwweDcwLDB4MDIsMHhlOCwweDAwIH0gfSwKK3sgIDE2LCAweGZkMzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDE4LDB4MWUsMHgwMCwweGZmLDB4ODAsMHhiMSwweGEwIH0gfSwKK3sgIDE2LCAweGZkNDAsIDAsIHsweDBmLDB4NDgsMHgwMiwweDdlLDB4MDAsMHg4NywweGEwLDB4MzMsMHhlMCwweDI4LDB4N2EsMHgwYiwweDFmLDB4MDAsMHhjNCwweDgwIH0gfSwKK3sgIDE2LCAweGZkNTAsIDAsIHsweDMxLDB4NjAsMHg4YywweDU4LDB4MDMsMHhmZSwweDAwLDB4YzcsMHhjOCwweDMzLDB4ZTgsMHgwYywweDU4LDB4MDMsMHhlYSwweDAyIH0gfSwKK3sgIDE2LCAweGZkNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDFkLDB4YWMsMHgwMCwweGZmLDB4MDAsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGZkNzAsIDAsIHsweDBmLDB4OTAsMHgyMywweGVjLDB4YTAsMHhmYiwweDQwLDB4M2UsMHhjMCwweDhmLDB4YjUsMHgwMywweGVkLDB4ODAsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGZkODAsIDAsIHsweDNjLDB4NDAsMHgwZiwweGIwLDB4MDMsMHhlOCwweDAwLDB4ZmIsMHgwMiwweDNlLDB4ZDAsMHgwZiwweDkwLDB4MDMsMHhjMiwweDA2IH0gfSwKK3sgIDE2LCAweGZkOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MCwweDA0LDB4YmUsMHgwMCwweGZmLDB4ODAsMHgzZiwweGUwIH0gfSwKK3sgIDE2LCAweGZkYTAsIDAsIHsweDBmLDB4ZDksMHgwMywweGZlLDB4MjAsMHhjZiwweGM4LDB4MzMsMHhlYSwweDhmLDB4ZmMsMHgwMywweDNmLDB4MDAsMHhmZCwweDgwIH0gfSwKK3sgIDE2LCAweGZkYjAsIDAsIHsweDNmLDB4NjAsMHgwZSwweGU4LDB4MDMsMHhmMiwweDAwLDB4Y2YsMHg4MCwweDJmLDB4ZmUsMHgwYywweDc4LDB4MDMsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZkYzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDAwLDB4OWMsMHgwMCwweGI1LDB4MDIsMHgyZCwweGMwIH0gfSwKK3sgIDE2LCAweGZkZDAsIDAsIHsweDBiLDB4NTgsMHg0MiwweGRjLDB4ODAsMHhjZiwweDAwLDB4MjEsMHhjMSwweDBiLDB4MzAsMHgxMiwweDFjLDB4NDAsMHhiNCwweDAyIH0gfSwKK3sgIDE2LCAweGZkZTAsIDAsIHsweDJkLDB4NDYsMHgwOCwweDcxLDB4MTIsMHhjOCwweDAwLDB4ZTcsMHgwMCwweDJkLDB4YzQsMHgwOCwweDcwLDB4MDMsMHg2YSwweDA0IH0gfSwKK3sgIDE2LCAweGZkZjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwMCwweGI3LDB4MDAsMHgyZCwweDAyIH0gfSwKK3sgIDE2LCAweGZlMDAsIDAsIHsweDBiLDB4NDYsMHgwMiwweGRjLDB4MDgsMHg5NywweDAwLDB4MjEsMHhjOSwweDBhLDB4MzAsMHgyMiwweDFjLDB4MDAsMHhiNCwweDAwIH0gfSwKK3sgIDE2LCAweGZlMTAsIDAsIHsweDJkLDB4NDAsMHgwYSwweDUwLDB4ODIsMHhjNCwweDAwLDB4YjcsMHgwMCwweDJjLDB4YzgsMHgyOCwweDUwLDB4MDIsMHg0MCwweDEwIH0gfSwKK3sgIDE2LCAweGZlMjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE0LDB4OGMsMHgxOCwweGIzLDB4MDAsMHgyZSwweDIwIH0gfSwKK3sgIDE2LCAweGZlMzAsIDAsIHsweDBiLDB4MTgsMHgwMiwweGNmLDB4NGEsMHg4MywweGMyLDB4MjAsMHhjMSwweDBiLDB4MzQsMHgyMiwweDBjLDB4MDQsMHhiOCwweDU4IH0gfSwKK3sgIDE2LCAweGZlNDAsIDAsIHsweDJjLDB4NDAsMHgwYiwweDI4LDB4MDIsMHhjOCwweDAwLDB4YTMsMHgwMCwweDJjLDB4YzAsMHgwOCwweDE0LDB4MDIsMHg0OCwweDA0IH0gfSwKK3sgIDE2LCAweGZlNTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4YmMsMHgwMCwweGZiLDB4MDAsMHgzZSwweDgwIH0gfSwKK3sgIDE2LCAweGZlNjAsIDAsIHsweDBmLDB4YTAsMHgwMiwweGZjLDB4MDAsMHhkZiwweGEwLDB4YjMsMHhjMCwweDBlLDB4ZjAsMHgwYiwweDNjLDB4MDAsMHhmYiwweGMwIH0gfSwKK3sgIDE2LCAweGZlNzAsIDAsIHsweDNjLDB4YTAsMHgwZSwweGJkLDB4MDMsMHhlYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwYywweDMwLDB4MDMsMHg2YSwweDA0IH0gfSwKK3sgIDE2LCAweGZlODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDEwLDB4ZWMsMHgwMCwweGY5LDB4MDAsMHgzZSwweDAxIH0gfSwKK3sgIDE2LCAweGZlOTAsIDAsIHsweDhmLDB4YjEsMHg0MywweGVjLDB4MDAsMHhmMywweDAwLDB4M2UsMHhjMCwweDRmLDB4YjAsMHgxMywweGVjLDB4MDAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweGZlYTAsIDAsIHsweDNlLDB4ODAsMHgwYywweDg0LDB4MDMsMHhlMSwweDAwLDB4NzMsMHgwMCwweDNlLDB4YzEsMHgwZiwweGIyLDB4NDMsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGZlYjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDUwLDB4ZmMsMHgxMCwweGZmLDB4ODAsMHgzNywweGMwIH0gfSwKK3sgIDE2LCAweGZlYzAsIDAsIHsweDBjLDB4ZTAsMHgwMywweGZjLDB4MjAsMHhmZiwweDA4LDB4MzMsMHhjMCwweDBmLDB4ZjAsMHg4MywweGJjLDB4MDAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweGZlZDAsIDAsIHsweDMzLDB4YzAsMHgyZSwweDQwLDB4MDMsMHgxYywweDAxLDB4Y2YsMHgwMCwweDExLDB4YzAsMHg0YywweGQwLDB4MDMsMHgwMCwweDQ0IH0gfSwKK3sgIDE2LCAweGZlZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MSwweDA0LDB4NmMsMHgwNCwweGIzLDB4MDIsMHgyMiwweDcyIH0gfSwKK3sgIDE2LCAweGZlZjAsIDAsIHsweDA4LDB4YTEsMHgxNiwweGVjLDB4MDAsMHhiYiwweDA0LDB4MjIsMHhjMCwweDBiLDB4YjAsMHg0MiwweGVjLDB4MDAsMHhiYSwweDE5IH0gfSwKK3sgIDE2LCAweGZmMDAsIDAsIHsweGI2LDB4ZDAsMHgwOCwweDljLDB4NGEsMHgyNiwweDgwLDB4ZGIsMHgwMCwweDIyLDB4YzAsMHgwOCwweDkwLDB4MDMsMHg2MCwweDQwIH0gfSwKK3sgIDE2LCAweGZmMTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweGI5LDB4MTAsMHg2MiwweDIwIH0gfSwKK3sgIDE2LCAweGZmMjAsIDAsIHsweDQ4LDB4YTAsMHgwMiwweGVjLDB4MDAsMHhiYiwweDAwLDB4MjIsMHhjMCwweDBiLDB4YjAsMHgwMiwweGVjLDB4MTAsMHhiYiwweDAwIH0gfSwKK3sgIDE2LCAweGZmMzAsIDAsIHsweDY2LDB4MDgsMHgwYSwweGE4LDB4MTIsMHgyNiwweDEwLDB4OWIsMHgwMCwweDJhLDB4YzAsMHgyOCwweGIwLDB4MjYsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGZmNDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MGMsMHgwMCwweGI5LDB4MDAsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGZmNTAsIDAsIHsweDA4LDB4MzIsMHgwMiwweGNjLDB4MDQsMHhiMywweDAwLDB4MjAsMHhjMCwweDRiLDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweGZmNjAsIDAsIHsweDIwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgwMSwweDAwLDB4OTMsMHgwMCwweDI4LDB4YzAsMHgwOCwweDMwLDB4MDYsMHg0MiwweDExIH0gfSwKK3sgIDE2LCAweGZmNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDFjLDB4NmMsMHgwMCwweGY5LDB4MDAsMHhiMiwweDQwIH0gfSwKK3sgIDE2LCAweGZmODAsIDAsIHsweDBjLDB4ODIsMHgwMiwweGRjLDB4MDEsMHhmZiwweDAwLDB4YjIsMHhjMCwweDBiLDB4ZjEsMHgwMywweGJjLDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGZmOTAsIDAsIHsweDI2LDB4NDAsMHgyZSwweDgwLDB4MDMsMHgyMSwweDA0LDB4Y2YsMHgwMCwweGJiLDB4YzAsMHgwYywweDkwLDB4MDMsMHgwMCwweDAzIH0gfSwKK3sgIDE2LCAweGZmYTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDFkLDB4ZmMsMHgwMCwweGZkLDB4MDAsMHgzZiwweDQwIH0gfSwKK3sgIDE2LCAweGZmYjAsIDAsIHsweDBmLDB4ODEsMHgwMywweGZjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgyMywweGZjLDB4MDAsMHhmYywweDAwIH0gfSwKK3sgIDE2LCAweGZmYzAsIDAsIHsweDJkLDB4NDAsMHgyZiwweGMwLDB4MDMsMHhmMCwweDg4LDB4ZmYsMHgwMCwweDM3LDB4YzAsMHg4ZiwweGQwLDB4MDMsMHhlOCwweDAyIH0gfSwKK3sgIDE2LCAweGZmZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmUsMHg0MCwweGZmLDB4ODAsMHgzMywweGMyIH0gfSwKK3sgIDE2LCAweGZmZTAsIDAsIHsweDBjLDB4ZjgsMHgwMywweDdjLDB4YTAsMHhmZiwweDkwLDB4M2YsMHhjNCwweDJjLDB4YjQsMHgwMywweGJjLDB4ODAsMHhjZiwweDQwIH0gfSwKK3sgIDE2LCAweGZmZjAsIDAsIHsweDM3LDB4ZTAsMHgwZiwweGYxLDB4OTMsMHg2ZSwweDQ0LDB4YmYsMHgzMCwweDNmLDB4MjAsMHgyYywweGY4LDB4NjMsMHhmMCwweDA0IH0gfSwKK3sgIDE2LCAweDgwMTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4ZWMsMHgwMCwweGViLDB4MjAsMHgyMywweGYwIH0gfSwKK3sgIDE2LCAweDgwMjAsIDAsIHsweDA4LDB4YjgsMHg1MiwweDNkLDB4MDAsMHhiMywweDAwLDB4MmUsMHhkYywweDA4LDB4ZjQsMHg0MiwweDFjLDB4NDIsMHg4YiwweDQwIH0gfSwKK3sgIDE2LCAweDgwMzAsIDAsIHsweDIyLDB4YzgsMHgwYiwweGY2LDB4MDMsMHg2YywweDg4LDB4YmIsMHgzMCwweDJlLDB4MDAsMHgwOCwweGIyLDB4MDIsMHhlMCwweDA0IH0gfSwKK3sgIDE2LCAweDgwNDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgwMCwweGJiLDB4MDgsMHgyMCwweGMwIH0gfSwKK3sgIDE2LCAweDgwNTAsIDAsIHsweDA4LDB4MzAsMHgwMiwweDRjLDB4YTAsMHhiMywweDIwLDB4MjYsMHg4MCwweDg4LDB4MzYsMHgwMiwweGNjLDB4YTAsMHg5MywweDYwIH0gfSwKK3sgIDE2LCAweDgwNjAsIDAsIHsweGE0LDB4YzIsMHgwYSwweDMyLDB4NDIsMHg0YywweDkwLDB4YjMsMHgyMCwweDJjLDB4MGIsMHg4OCwweDMwLDB4ODIsMHhlMiwweDAxIH0gfSwKK3sgIDE2LCAweDgwNzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDE1LDB4YWMsMHgwOCwweGJiLDB4MjIsMHhhMiwweGMwIH0gfSwKK3sgIDE2LCAweDgwODAsIDAsIHsweDA4LDB4YjAsMHgwMiwweDJjLDB4MDAsMHhiYiwweDAwLDB4MmUsMHg5MCwweDA4LDB4YjAsMHgwMiwweGVjLDB4MDAsMHg5YiwweDAwIH0gfSwKK3sgIDE2LCAweDgwOTAsIDAsIHsweDIyLDB4YzAsMHgwYiwweGIwLDB4MDIsMHg2YywweDAwLDB4YmIsMHgwMiwweDJlLDB4MjAsMHgwOCwweGIwLDB4MDIsMHhmMCwweDAwIH0gfSwKK3sgIDE2LCAweDgwYTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWMsMHgwMCwweGIxLDB4ODMsMHgzMiwweGMwIH0gfSwKK3sgIDE2LCAweDgwYjAsIDAsIHsweDBjLDB4MWEsMHgwMywweDZjLDB4MTAsMHhmYiwweDAwLDB4MzQsMHhjMCwweDBjLDB4YjAsMHgwMywweGVjLDB4MDgsMHhkYSwweDAwIH0gfSwKK3sgIDE2LCAweDgwYzAsIDAsIHsweDM2LDB4YzAsMHgwZSwweGIwLDB4MGIsMHg2YywweDAwLDB4ZmIsMHgwMCwweDNlLDB4MjgsMHgwYywweGIwLDB4MDIsMHhkMCwweDAwIH0gfSwKK3sgIDE2LCAweDgwZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4YmMsMHgwMCwweGVkLDB4ODAsMHgzZiwweGMwIH0gfSwKK3sgIDE2LCAweDgwZTAsIDAsIHsweDBmLDB4ZDQsMHgwMywweGVjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjOCwweDBmLDB4YjAsMHgwMywweDNjLDB4MDAsMHhlZSwweDQwIH0gfSwKK3sgIDE2LCAweDgwZjAsIDAsIHsweDNmLDB4YzAsMHgwZiwweDcwLDB4MDMsMHhmYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4ODAsMHgwZiwweGYwLDB4MDMsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweDgxMDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGZiLDB4MjAsMHhiMCwweGMwIH0gfSwKK3sgIDE2LCAweDgxMTAsIDAsIHsweDBmLDB4YjQsMHgwMywweGFjLDB4MDIsMHhjYiwweDAwLDB4MzIsMHg5MCwweDBlLDB4YjAsMHgwMywweDZjLDB4MDAsMHhlYiwweDAwIH0gfSwKK3sgIDE2LCAweDgxMjAsIDAsIHsweDNhLDB4YzAsMHgwYywweGIwLDB4MDIsMHhlYywweDAwLDB4ZmIsMHgwMCwweDNlLDB4OTEsMHgwZiwweGIwLDB4MDMsMHg5MCwweDAwIH0gfSwKK3sgIDE2LCAweDgxMzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4MmMsMHgwMCwweGJiLDB4ODAsMHgyMywweGQ3IH0gfSwKK3sgIDE2LCAweDgxNDAsIDAsIHsweDBiLDB4OTAsMHgwMiwweDNjLDB4MTQsMHg4YiwweDAwLDB4NmEsMHgwOCwweDI4LDB4ZjAsMHgwMCwweGJjLDB4MDAsMHg4MywweDAwIH0gfSwKK3sgIDE2LCAweDgxNTAsIDAsIHsweGJlLDB4YzAsMHg4OCwweGYwLDB4MTMsMHgyYywweDAwLDB4ZWYsMHgwMCwweDJlLDB4ODAsMHgwYiwweGIwLDB4MDcsMHhiMiwweDAwIH0gfSwKK3sgIDE2LCAweDgxNjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMCwweGIzLDB4NDAsMHgyMCwweGQwIH0gfSwKK3sgIDE2LCAweDgxNzAsIDAsIHsweDBiLDB4MjgsMHgwMiwweDhjLDB4MDAsMHg4MywweDAxLDB4MjAsMHhjMCwweDFhLDB4YjgsMHgwMCwweDZjLDB4MTAsMHhhMSwweDAwIH0gfSwKK3sgIDE2LCAweDgxODAsIDAsIHsweDY4LDB4YzAsMHgyYSwweDMwLDB4MDIsMHg4YywweDAwLDB4YjMsMHgwMiwweDJlLDB4MDAsMHg0YiwweDMwLDB4MDIsMHhmOCwweDA0IH0gfSwKK3sgIDE2LCAweDgxOTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAxLDB4MWUsMHgwMCwweGI3LDB4YTAsMHgyMSwweGUwIH0gfSwKK3sgIDE2LCAweDgxYTAsIDAsIHsweDBiLDB4ZWMsMHhjMiwweDFlLDB4MDQsMHg4NywweDgwLDB4MjksMHhlNCwweDA4LDB4NzksMHg4MiwweDllLDB4NDAsMHhhZiwweDkwIH0gfSwKK3sgIDE2LCAweDgxYjAsIDAsIHsweDI5LDB4ZTAsMHgwYSwweDM4LDB4MDAsMHgxZSwweDAwLDB4YTcsMHg5MCwweDJkLDB4MjQsMHgwYiwweDc4LDB4MDIsMHg4OCwweDAwIH0gfSwKK3sgIDE2LCAweDgxYzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHg1MCwweGZiLDB4MDksMHgzMCwweGMwIH0gfSwKK3sgIDE2LCAweDgxZDAsIDAsIHsweDBmLDB4MjAsMHgwMiwweDhjLDB4NDAsMHhjMywweDAwLDB4MjAsMHhjMCwweDBhLDB4MzgsMHgwMywweDRjLDB4NDQsMHhlMSwweDAwIH0gfSwKK3sgIDE2LCAweDgxZTAsIDAsIHsweGFhLDB4YzAsMHgwZSwweDMxLDB4NDMsMHg4ZSwweDAwLDB4ZjMsMHgwMCwweDNjLDB4MDAsMHgwZiwweDMwLDB4MDMsMHhkMiwweDAyIH0gfSwKK3sgIDE2LCAweDgxZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDRkLDB4YmMsMHgwMCwweGZmLDB4MjAsMHgzZiwweGQwIH0gfSwKK3sgIDE2LCAweDgyMDAsIDAsIHsweDRmLDB4NzAsMHgwMywweGZjLDB4MDAsMHhmZiwweDAwLDB4M2QsMHhjMCwweDBmLDB4ZjMsMHg0MywweGZjLDB4NDAsMHhkNywweDAwIH0gfSwKK3sgIDE2LCAweDgyMTAsIDAsIHsweGJmLDB4YzAsMHgwZCwweGY0LDB4YzMsMHhmYywweDQwLDB4ZmYsMHgwMCwweDNmLDB4NDAsMHgwZiwweGYwLDB4MDMsMHhkMCwweDA2IH0gfSwKK3sgIDE2LCAweDgyMjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHgwMCwweGZiLDB4MDAsMHgzMiwweGQwIH0gfSwKK3sgIDE2LCAweDgyMzAsIDAsIHsweDBkLDB4OTAsMHgwMSwweGVkLDB4YzAsMHhmYiwweDAwLDB4M2UsMHhjMCwweDFmLDB4YmEsMHgwMywweGFjLDB4YzAsMHhjOCwweDAwIH0gfSwKK3sgIDE2LCAweDgyNDAsIDAsIHsweDMyLDB4ZTAsMHg4ZCwweGI0LDB4NDMsMHhlYywweDAwLDB4ZmIsMHgwMCwweDM2LDB4YTAsMHgwYywweGIwLDB4MDMsMHg2YSwweDAwIH0gfSwKK3sgIDE2LCAweDgyNTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDExLDB4OWMsMHgwMCwweGI3LDB4MDAsMHgyMSwweGM4IH0gfSwKK3sgIDE2LCAweDgyNjAsIDAsIHsweDA4LDB4NjAsMHgwMiwweGRjLDB4MjAsMHhiNywweDAwLDB4MmQsMHhjMCwweDBmLDB4NzQsMHhhMiwweDFjLDB4MjgsMHhkNiwweDAwIH0gfSwKK3sgIDE2LCAweDgyNzAsIDAsIHsweDM1LDB4YzAsMHgwOCwweDcyLDB4MDIsMHg1YywweDA4LDB4YjcsMHg0NCwweGExLDB4ODAsMHg0OCwweDcwLDB4MDIsMHgxMiwweDAwIH0gfSwKK3sgIDE2LCAweDgyODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHgwMCwweGI3LDB4ODAsMHgyMCwweGU0IH0gfSwKK3sgIDE2LCAweDgyOTAsIDAsIHsweDA5LDB4NzgsMHgyNiwweGRlLDB4MDAsMHhiNywweDgwLDB4MmQsMHhlMiwweDBhLDB4NzAsMHgxMiwweDhjLDB4ODgsMHg4MSwweDgwIH0gfSwKK3sgIDE2LCAweDgyYTAsIDAsIHsweDIxLDB4ZTAsMHgwOSwweDc4LDB4MDIsMHhkZSwweDAwLDB4YjMsMHhhMCwweDI1LDB4YTAsMHgyOCwweDc4LDB4MDIsMHg3MCwweDA0IH0gfSwKK3sgIDE2LCAweDgyYjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE0LDB4Y2MsMHgwMSwweGJiLDB4ODAsMHgyMCwweGMwIH0gfSwKK3sgIDE2LCAweDgyYzAsIDAsIHsweDA4LDB4MzAsMHg0MiwweGVjLDB4MDAsMHhiMywweDAwLDB4MmMsMHhjMCwweDBhLDB4MzAsMHgyMiwweDBjLDB4MDAsMHg5MywweDAwIH0gfSwKK3sgIDE2LCAweDgyZDAsIDAsIHsweDI0LDB4YzEsMHgwOCwweDMwLDB4MDIsMHhjYywweDAwLDB4YjMsMHgwMCwweDIwLDB4ZTAsMHgwOCwweGIwLDB4MDIsMHgxMiwweDA0IH0gfSwKK3sgIDE2LCAweDgyZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweGZhLDB4MDgsMHhiMiwweDgwIH0gfSwKK3sgIDE2LCAweDgyZjAsIDAsIHsweDBkLDB4ZTIsMHgwMywweGU4LDB4MDAsMHhmYSwweDAwLDB4M2YsMHg4MCwweDBhLDB4YTAsMHgwMywweGE4LDB4MDAsMHhjZSwweDUwIH0gfSwKK3sgIDE2LCAweDgzMDAsIDAsIHsweDMyLDB4ODAsMHgwNSwweGEwLDB4MDMsMHhlOCwweDAwLDB4ZmEsMHgwMCwweDM3LDB4YTgsMHgwYywweGEwLDB4MDMsMHg3YSwweDA0IH0gfSwKK3sgIDE2LCAweDgzMTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4NjAsMHgwOCwweGY4LDB4MDAsMHgzYywweDAwIH0gfSwKK3sgIDE2LCAweDgzMjAsIDAsIHsweDBmLDB4ODgsMHgwMSwweGUwLDB4MDAsMHhmOCwweDA0LDB4M2MsMHgwMCwweDRmLDB4MDAsMHgxMywweGMwLDB4MDAsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweDgzMzAsIDAsIHsweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHg2MCwweDAwLDB4ZjgsMHgwMiwweDNlLDB4MDEsMHgwZiwweDgwLDB4MDMsMHhkMiwweDAwIH0gfSwKK3sgIDE2LCAweDgzNDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGY5LDB4OTAsMHgxMiwweDQwIH0gfSwKK3sgIDE2LCAweDgzNTAsIDAsIHsweDBjLDB4OTAsMHgwMywweGE0LDB4MDAsMHhjOSwweDAwLDB4M2UsMHg3MCwweDBlLDB4OTQsMHgzMywweDI0LDB4MDgsMHhjOSwweDAwIH0gfSwKK3sgIDE2LCAweDgzNjAsIDAsIHsweDJhLDB4NDAsMHgwYiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNhLDB4NDAsMHgwZiwweDkwLDB4MDMsMHgwMiwweDA0IH0gfSwKK3sgIDE2LCAweDgzNzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NjQsMHgwMCwweGI5LDB4NDIsMHgyMiwweDYwIH0gfSwKK3sgIDE2LCAweDgzODAsIDAsIHsweDA4LDB4MTAsMHgwMiwweDI0LDB4MDAsMHg4OSwweDAzLDB4MmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweGE0LDB4MDEsMHg4MSwweDA0IH0gfSwKK3sgIDE2LCAweDgzOTAsIDAsIHsweDNlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhlNCwweDAwLDB4YjksMHgwMiwweDIyLDB4NDAsMHgwZSwweDkwLDB4MDIsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweDgzYTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweGI5LDB4NDAsMHgyYSwweDRhIH0gfSwKK3sgIDE2LCAweDgzYjAsIDAsIHsweDA4LDB4OTEsMHgwMiwweGE0LDB4MDAsMHg4OSwweDAwLDB4MmUsMHg0MCwweDFhLDB4OTAsMHgwYSwweDI0LDB4MDQsMHg4OSwweDAwIH0gfSwKK3sgIDE2LCAweDgzYzAsIDAsIHsweDJhLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhlNCwweDAwLDB4YjEsMHgwMCwweDJhLDB4NDAsMHgwYiwweDkwLDB4MDIsMHgwNiwweDAwIH0gfSwKK3sgIDE2LCAweDgzZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDQsMHgwMCwweGIxLDB4MDEsMHhhOCwweDQ4IH0gfSwKK3sgIDE2LCAweDgzZTAsIDAsIHsweDg4LDB4OTAsMHgwMiwweDA0LDB4ODAsMHg4MSwweDQwLDB4MmMsMHg1MCwweDE4LDB4MTQsMHgwYSwweDg0LDB4MTAsMHg4OSwweDQwIH0gfSwKK3sgIDE2LCAweDgzZjAsIDAsIHsweDJjLDB4NDAsMHgwYiwweDEwLDB4MDIsMHhjNCwweDAwLDB4MzEsMHgyMCwweDIwLDB4NDAsMHgwYSwweDEwLDB4MGEsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweDg0MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGYwLDB4NTAsMHgzYSwweDAwIH0gfSwKK3sgIDE2LCAweDg0MTAsIDAsIHsweDJjLDB4YTAsMHgwMiwweGExLDB4NDIsMHhjOCwweDAwLDB4M2UsMHgwMCwweGRlLDB4MDAsMHgyMywweDIxLDB4NDIsMHg4OCwweDAwIH0gfSwKK3sgIDE2LCAweDg0MjAsIDAsIHsweDM4LDB4MTQsMHgwZiwweDg1LDB4MDMsMHhlMSwweDQwLDB4ZjgsMHg1MCwweDM4LDB4MTQsMHgwZiwweDA1LDB4MDMsMHgyZSwweDAxIH0gfSwKK3sgIDE2LCAweDg0MzAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDFkLDB4ZTQsMHgwOCwweGZkLDB4MDAsMHgzNiwweDQ0IH0gfSwKK3sgIDE2LCAweDg0NDAsIDAsIHsweDBmLDB4ZDAsMHgwMywweDY0LDB4NDAsMHhmOSwweDAwLDB4M2QsMHg1MCwweDBmLDB4OTQsMHgwMywweGU1LDB4MDAsMHg3ZCwweDQwIH0gfSwKK3sgIDE2LCAweDg0NTAsIDAsIHsweDNlLDB4NDAsMHgwZiwweDk0LDB4MDMsMHhlNCwweDAwLDB4ZjksMHgxMCwweDNmLDB4NDAsMHgwZSwweDkwLDB4MDMsMHhlNiwweDA0IH0gfSwKK3sgIDE2LCAweDg0NjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZTQsMHgwMCwweGZkLDB4NDAsMHgzMywweDY4IH0gfSwKK3sgIDE2LCAweDg0NzAsIDAsIHsweDBjLDB4ZDAsMHgwMywweGU3LDB4ODEsMHhmOSwweDAwLDB4MzMsMHg3OCwweDBkLDB4ZDgsMHgxMywweDI2LDB4YTAsMHhjZCwweGEwIH0gfSwKK3sgIDE2LCAweDg0ODAsIDAsIHsweDMyLDB4NDAsMHgwZCwweDliLDB4MDMsMHgyNCwweDAwLDB4ZjksMHhhMCwweDNjLDB4NDQsMHgyYywweDkwLDB4MDcsMHg4NiwweDAwIH0gfSwKK3sgIDE2LCAweDg0OTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDEwLDB4ZTAsMHgwMCwweGI4LDB4YTAsMHhhMiwweDEwIH0gfSwKK3sgIDE2LCAweDg0YTAsIDAsIHsweDE4LDB4ODAsMHgwMywweDgyLDB4ODQsMHhiOCwweDgwLDB4MzYsMHgyYywweDJlLDB4MGYsMHgwMiwweGEzLDB4YTAsMHhkOCwweGUwIH0gfSwKK3sgIDE2LCAweDg0YjAsIDAsIHsweDM2LDB4MjIsMHg4YiwweDA4LDB4MDMsMHg0MiwweGEwLDB4ZjgsMHhlMCwweDJlLDB4MjgsMHgwOCwweDg4LDB4MDIsMHhjZSwweDA0IH0gfSwKK3sgIDE2LCAweDg0YzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHgwMCwweGIxLDB4MDAsMHhhMCwweDUwIH0gfSwKK3sgIDE2LCAweDg0ZDAsIDAsIHsweDI4LDB4MzAsMHgwMiwweGM1LDB4ODAsMHhiMSwweDA4LDB4MjAsMHg0MCwweDA5LDB4MTAsMHhhMiwweDQ0LDB4MDgsMHg4MSwweDQ4IH0gfSwKK3sgIDE2LCAweDg0ZTAsIDAsIHsweDIwLDB4NDAsMHgwYiwweDE0LDB4MDIsMHgwNCwweDgwLDB4YjEsMHgzOCwweDJjLDB4NDgsMHgwOCwweDEyLDB4ODIsMHg4MiwweDAxIH0gfSwKK3sgIDE2LCAweDg0ZjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDExLDB4YTQsMHgwMCwweGIxLDB4MDAsMHgyMiwweDQwIH0gfSwKK3sgIDE2LCAweDg1MDAsIDAsIHsweDA4LDB4OTIsMHgwMiwweGU0LDB4MDAsMHhiOSwweDAyLDB4MjYsMHg1OCwweDRhLDB4OTAsMHgwMiwweGU0LDB4MDgsMHg5OSwweDQwIH0gfSwKK3sgIDE2LCAweDg1MTAsIDAsIHsweDI2LDB4NDAsMHgwYiwweDkwLDB4MDIsMHg2NCwweDA4LDB4YjksMHgwMSwweDJjLDB4NDgsMHgwOCwweDkwLDB4MTIsMHhjNiwweDA0IH0gfSwKK3sgIDE2LCAweDg1MjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGY5LDB4ODAsMHgzMiwweDQwIH0gfSwKK3sgIDE2LCAweDg1MzAsIDAsIHsweDA4LDB4OTgsMHg4MywweGU0LDB4MDQsMHhiOSwweDAxLDB4MzAsMHg0MCwweDBkLDB4OTAsMHgwYiwweDY0LDB4MDIsMHhjOSwweDAwIH0gfSwKK3sgIDE2LCAweDg1NDAsIDAsIHsweDMyLDB4NDAsMHgwZiwweDkwLDB4MDMsMHgyNCwweDAwLDB4ZjksMHgwMCwweDFlLDB4NTgsMHgwYywweDkwLDB4MDMsMHhhOCwweDA0IH0gfSwKK3sgIDE2LCAweDg1NTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAxLDB4YTQsMHgwMCwweGY5LDB4MjAsMHgzYywweDQwIH0gfSwKK3sgIDE2LCAweDg1NjAsIDAsIHsweDBmLDB4OTgsMHgwMywweGE0LDB4MDAsMHhiOSwweDAwLDB4M2UsMHg0MiwweDhlLDB4MTAsMHg0YiwweDg0LDB4MDQsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweDg1NzAsIDAsIHsweDNlLDB4NDAsMHg4ZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZTksMHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweDg1ODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGQ4LDB4MDAsMHgzMiwweDA4IH0gfSwKK3sgIDE2LCAweDg1OTAsIDAsIHsweDBmLDB4ODQsMHg4MywweGEwLDB4MDQsMHhjOCwweDA0LDB4M2UsMHgwMCwweDgzLDB4ODAsMHgwMSwweDIwLDB4MDAsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweDg1YTAsIDAsIHsweDMyLDB4MDAsMHgwZiwweDAwLDB4MDMsMHhhMCwweDAwLDB4YzgsMHgwMCwweDMyLDB4MTAsMHg0ZSwweDgwLDB4MTMsMHhjYSwweDA0IH0gfSwKK3sgIDE2LCAweDg1YjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4MjgsMHgwMCwweDhlLDB4OTAsMHhhMywweDgwIH0gfSwKK3sgIDE2LCAweDg1YzAsIDAsIHsweDBiLDB4ZTQsMHgwMiwweDI4LDB4MDAsMHhjYSwweDAwLDB4MmYsMHg4MCwweDRhLDB4YTAsMHgxMywweGE4LDB4MDAsMHhhYSwweDAwIH0gfSwKK3sgIDE2LCAweDg1ZDAsIDAsIHsweDM2LDB4ODEsMHgwYiwweGEwLDB4MDIsMHgyOCwweDAwLDB4OGEsMHgwMCwweDIyLDB4ODAsMHgwOCwweGEwLDB4MDMsMHg4YSwweDAwIH0gfSwKK3sgIDE2LCAweDg1ZTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweDkzLDB4YzAsMHgyMCwweGQwIH0gfSwKK3sgIDE2LCAweDg1ZjAsIDAsIHsweDBiLDB4MzQsMHgwMiwweDhjLDB4MDAsMHg4YiwweDAwLDB4MmMsMHhmMCwweDhiLDB4MTgsMHgwMiwweDRjLDB4MDAsMHg4MywweDAwIH0gfSwKK3sgIDE2LCAweDg2MDAsIDAsIHsweDYwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHg4YywweDAyLDB4ODMsMHgwMCwweDI4LDB4YzEsMHgwYSwweDMwLDB4MDIsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweDg2MTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDAxLDB4MWUsMHgwMCwweGI0LDB4MGIsMHg2OSwweGMwIH0gfSwKK3sgIDE2LCAweDg2MjAsIDAsIHsweDA5LDB4NTgsMHgwNiwweDFlLDB4ODAsMHg5NywweDEwLDB4MmYsMHhjMiwweDQ4LDB4NzAsMHg4MiwweDljLDB4ODAsMHhhNywweDA4IH0gfSwKK3sgIDE2LCAweDg2MzAsIDAsIHsweDI1LDB4Y2MsMHgwYiwweDcwLDB4MDIsMHgxZSwweDgxLDB4ODcsMHhhMiwweGFiLDB4YzQsMHgwOCwweDczLDB4MDIsMHhlOCwweDAwIH0gfSwKK3sgIDE2LCAweDg2NDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4M2UsMHgxMCwweGRjLDB4ODQsMHgyMSwweGUwIH0gfSwKK3sgIDE2LCAweDg2NTAsIDAsIHsweDBmLDB4NzgsMHg0MiwweDlmLDB4MDIsMHhjNywweDg4LDB4M2QsMHhlMCwweDJmLDB4NzEsMHgwMywweDRlLDB4MDAsMHhjZiwweDgwIH0gfSwKK3sgIDE2LCAweDg2NjAsIDAsIHsweDIxLDB4ZTIsMHgwZiwweDc4LDB4ODMsMHg5ZSwweDQ5LDB4Y2YsMHhkMCwweDM5LDB4ZTgsMHgwZSwweDc4LDB4MDMsMHhlYSwweDAyIH0gfSwKK3sgIDE2LCAweDg2NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDRkLDB4YWMsMHg0MCwweGNhLDB4MDAsMHgzNiwweDAwIH0gfSwKK3sgIDE2LCAweDg2ODAsIDAsIHsweDhmLDB4MzAsMHgyMywweGVjLDB4YTgsMHhlYiwweDQwLDB4M2MsMHhjMCwweDBmLDB4OTYsMHg0MywweGVkLDB4ODAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweDg2OTAsIDAsIHsweDNlLDB4ZDgsMHg4ZiwweGIxLDB4NDMsMHhlZCwweDgwLDB4ZmIsMHgyMCwweDM2LDB4Y2EsMHgwZiwweGIwLDB4YTMsMHg4MiwweDA2IH0gfSwKK3sgIDE2LCAweDg2YTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHg4MCwweGZjLDB4ODAsMHgzMSwweGUwIH0gfSwKK3sgIDE2LCAweDg2YjAsIDAsIHsweDA1LDB4YWEsMHgxMCwweGZlLDB4NDQsMHhmZiwweDkwLDB4M2YsMHhlMSwweGNmLDB4ZjksMHgxNywweDNmLDB4MjAsMHhkNywweDgwIH0gfSwKK3sgIDE2LCAweDg2YzAsIDAsIHsweDhiLDB4ZTQsMHgwZiwweGY4LDB4MDMsMHgzZSwweDMwLDB4ZmYsMHg4MCwweDM3LDB4ZTAsMHgwZiwweGY4LDB4MDAsMHg0MCwweDAwIH0gfSwKK3sgIDE2LCAweDg2ZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4OWMsMHgwMCwweGJkLDB4MTAsMHgyMSwweGMwIH0gfSwKK3sgIDE2LCAweDg2ZTAsIDAsIHsweDA4LDB4NGEsMHgwMiwweGRjLDB4YzAsMHhiNywweDAwLDB4MmQsMHhjMiwweDBjLDB4ZDMsMHgwMiwweDFjLDB4ODAsMHg4NywweDAwIH0gfSwKK3sgIDE2LCAweDg2ZjAsIDAsIHsweDI5LDB4YzAsMHg0YiwweDcyLDB4MDIsMHgxYywweDAwLDB4YjcsMHgwMSwweDIxLDB4YzAsMHgwYiwweGYwLDB4MTIsMHgyYSwweDA0IH0gfSwKK3sgIDE2LCAweDg3MDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHg5MCwweDM0LDB4MDAsMHgyMSwweDgwIH0gfSwKK3sgIDE2LCAweDg3MTAsIDAsIHsweDA5LDB4NzAsMHgwMCwweDVjLDB4MGMsMHhiNywweDAwLDB4MmQsMHhjNCwweDA4LDB4NTAsMHgxYSwweDBjLDB4MDAsMHg5NywweDAwIH0gfSwKK3sgIDE2LCAweDg3MjAsIDAsIHsweDIxLDB4YzAsMHg0YiwweDMwLDB4MDIsMHgxYywweDAwLDB4YjcsMHgwMCwweDI1LDB4YzAsMHgwYiwweDcwLDB4MDIsMHg0MCwweDAwIH0gfSwKK3sgIDE2LCAweDg3MzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDE0LDB4Y2MsMHgwMCwweGIwLDB4MDAsMHg2MCwweDAwIH0gfSwKK3sgIDE2LCAweDg3NDAsIDAsIHsweDA4LDB4M2UsMHgwMiwweGNjLDB4MDAsMHhiMywweDAyLDB4MGMsMHhlMCwweDJiLDB4YjAsMHgwMiwweDBjLDB4MDAsMHg5MywweDAwIH0gfSwKK3sgIDE2LCAweDg3NTAsIDAsIHsweDI4LDB4YzAsMHgwYiwweGIwLDB4MDIsMHgyYywweDEwLDB4YjMsMHgwMCwweDIwLDB4ZDYsMHgwMywweDMwLDB4MDIsMHgwOCwweDA0IH0gfSwKK3sgIDE2LCAweDg3NjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmMsMHgwMCwweGZiLDB4MDAsMHhiMiwweDAwIH0gfSwKK3sgIDE2LCAweDg3NzAsIDAsIHsweDA1LDB4YmUsMHgwMywweDdjLDB4MDAsMHhmZiwweDAwLDB4M2UsMHgyMCwweDBjLDB4YjAsMHgwMywweDNjLDB4MDAsMHhkOSwweDgwIH0gfSwKK3sgIDE2LCAweDg3ODAsIDAsIHsweDMzLDB4YzAsMHg4YiwweGYwLDB4MDMsMHgzYywweDAwLDB4ZmYsMHgwMCwweDM3LDB4ZTAsMHgwZiwweGYwLDB4MDMsMHg2YSwweDA0IH0gfSwKK3sgIDE2LCAweDg3OTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4ZWMsMHgwMCwweGZiLDB4MDQsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweDg3YTAsIDAsIHsweDBmLDB4YTQsMHgyMywweGNjLDB4MDAsMHhmYiwweDAwLDB4M2UsMHg4MSwweDA4LDB4OTAsMHgwMywweGVjLDB4MDAsMHhlOSwweDE0IH0gfSwKK3sgIDE2LCAweDg3YjAsIDAsIHsweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhlYywweDEwLDB4ZmIsMHgwMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweDg3YzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHgzNywweDgwIH0gfSwKK3sgIDE2LCAweDg3ZDAsIDAsIHsweDBmLDB4ZmEsMHgwMywweGZjLDB4MDAsMHhjZiwweDAwLDB4M2YsMHg5MCwweDA2LDB4ZGMsMHgyMywweDNjLDB4MDAsMHhmZCwweDEwIH0gfSwKK3sgIDE2LCAweDg3ZTAsIDAsIHsweDMzLDB4YzAsMHgwZiwweGYwLDB4MGIsMHgzYywweDAwLDB4NDMsMHgwMCwweDMzLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhjMCwweDQ0IH0gfSwKK3sgIDE2LCAweDg3ZjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MSwweDAwLDB4NmMsMHgwOSwweGJiLDB4MTksMHgyMiwweDMyIH0gfSwKK3sgIDE2LCAweDg4MDAsIDAsIHsweDBiLDB4YmUsMHgwMywweDZjLDB4MDAsMHg4YiwweDAwLDB4MmMsMHg5MCwweDBkLDB4YjgsMHgwMiwweGFjLDB4MDAsMHhiMSwweDAwIH0gfSwKK3sgIDE2LCAweDg4MTAsIDAsIHsweGYyLDB4YzAsMHgwYiwweGIwLDB4MTIsMHhhYywweDAwLDB4OGIsMHgwMCwweDIyLDB4YzAsMHgwYiwweGIwLDB4MDMsMHhhMCwweDQwIH0gfSwKK3sgIDE2LCAweDg4MjAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgxMCwweGIzLDB4MDAsMHgyNiwweDIwIH0gfSwKK3sgIDE2LCAweDg4MzAsIDAsIHsweDBiLDB4OTAsMHgxMiwweGVjLDB4MDEsMHg4YiwweDAwLDB4MmEsMHhjMiwweDBhLDB4OTAsMHgwMiwweDJjLDB4MDAsMHhiYiwweDAwIH0gfSwKK3sgIDE2LCAweDg4NDAsIDAsIHsweGEyLDB4YzAsMHgwYiwweGIwLDB4MDIsMHgyYywweDAwLDB4YWIsMHgwMCwweDJhLDB4YzAsMHgwYiwweGIwLDB4MDIsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweDg4NTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MGMsMHgwMSwweGIzLDB4MDAsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweDg4NjAsIDAsIHsweDBiLDB4MDAsMHgwMiwweDhjLDB4MDAsMHg4MywweDAwLDB4MmUsMHhjMCwweDBiLDB4MzQsMHgwMiwweDhjLDB4MDAsMHhiYiwweDAwIH0gfSwKK3sgIDE2LCAweDg4NzAsIDAsIHsweDIwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwZCwweDAwLDB4YTMsMHgwMCwweGEwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHg4MiwweDAxIH0gfSwKK3sgIDE2LCAweDg4ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGJiLDB4MDQsMHgzNiwweDgwIH0gfSwKK3sgIDE2LCAweDg4OTAsIDAsIHsweDBmLDB4YjIsMHgwMiwweGZjLDB4MDIsMHhjZiwweDAyLDB4MzgsMHhjMCwweDBlLDB4ZjAsMHgwMywweDNjLDB4MDAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweDg4YTAsIDAsIHsweDIzLDB4YzAsMHgwZiwweGYwLDB4MDMsMHgzZCwweDAyLDB4ZWYsMHgwMCwweDMzLDB4YzAsMHgwZiwweGYwLDB4NDMsMHhjMCwweDAzIH0gfSwKK3sgIDE2LCAweDg4YjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDFkLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHgzZiwweDAwIH0gfSwKK3sgIDE2LCAweDg4YzAsIDAsIHsweDBmLDB4ZjQsMHgyMywweDdjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBkLDB4ZDAsMHgwMywweGZjLDB4MDAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweDg4ZDAsIDAsIHsweDNiLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmYywweDg4LDB4ZGYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhhOCwweDA2IH0gfSwKK3sgIDE2LCAweDg4ZTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZjAsMHg1MCwweGNlLDB4MTIsMHgzMywweGQwIH0gfSwKK3sgIDE2LCAweDg4ZjAsIDAsIHsweDRjLDB4ODYsMHg4MywweDMwLDB4ODAsMHg1ZiwweDY4LDB4MzMsMHhjNCwweDBmLDB4ZjMsMHg4MywweDNjLDB4YzAsMHhjYywweDM4IH0gfSwKK3sgIDE2LCAweDg5MDAsIDAsIHsweGIzLDB4MDgsMHgwYywweGM2LDB4MDMsMHhmMSwweGEwLDB4ZmYsMHgwMCwweDMzLDB4MjQsMHgwYywweGMyLDB4MDMsMHhmMCwweDAwIH0gfSwKK3sgIDE2LCAweDg5MTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4ZWMsMHg4MCwweGQyLDB4MjAsMHgyMywweGQ4IH0gfSwKK3sgIDE2LCAweDg5MjAsIDAsIHsweDBkLDB4OTYsMHgwMiwweDg4LDB4NjAsMHhhZiwweDQwLDB4MjMsMHhkYywweDBiLDB4ZjYsMHgwMiwweDNjLDB4YzIsMHg4OCwweDYwIH0gfSwKK3sgIDE2LCAweDg5MzAsIDAsIHsweDIyLDB4NTIsMHgwOCwweDkxLDB4MjIsMHhlMSwweDAwLDB4YjcsMHgyNCwweGEyLDB4NDgsMHg4YSwweDg0LDB4ODIsMHg2MCwweDA0IH0gfSwKK3sgIDE2LCAweDg5NDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzQsMHgwMCwweDgxLDB4MDAsMHhlMCwweGM0IH0gfSwKK3sgIDE2LCAweDg5NTAsIDAsIHsweDBhLDB4MDAsMHgwMiwweDA0LDB4ODAsMHhhMywweDIwLDB4YTgsMHhjMCwweDFiLDB4MzAsMHgwYSwweDBjLDB4MDAsMHhhMCwweDAwIH0gfSwKK3sgIDE2LCAweDg5NjAsIDAsIHsweDI4LDB4MGMsMHgwOSwweDAyLDB4MDIsMHhjNCwweDgwLDB4YjMsMHgxYywweDIyLDB4MDgsMHgxOSwweDAzLDB4MDIsMHhlMiwweDExIH0gfSwKK3sgIDE2LCAweDg5NzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDE1LDB4YTQsMHgwMCwweDk5LDB4ODAsMHg2MiwweGMwIH0gfSwKK3sgIDE2LCAweDg5ODAsIDAsIHsweDBiLDB4YTAsMHgzMiwweGE0LDB4NTEsMHhhYiwweDAwLDB4MmEsMHhjMCwweDhiLDB4YjAsMHgwMCwweDBjLDB4MDAsMHhhOSwweGMwIH0gfSwKK3sgIDE2LCAweDg5OTAsIDAsIHsweDJhLDB4MjEsMHgwOCwweGI4LDB4MjIsMHhlMiwweDAwLDB4YmIsMHgwMCwweDIyLDB4ODQsMHgxYiwweGE4LDB4NDIsMHg3MCwweDA0IH0gfSwKK3sgIDE2LCAweDg5YTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZTIsMHgwMCwweGNiLDB4YzksMHgzMiwweGMwIH0gfSwKK3sgIDE2LCAweDg5YjAsIDAsIHsweDBlLDB4OGIsMHgxMywweDIyLDB4MTAsMHhkYiwweDAxLDB4MzIsMHhjMCwweDBmLDB4YjAsMHgwYiwweDJjLDB4MDAsMHg2OCwweDgxIH0gfSwKK3sgIDE2LCAweDg5YzAsIDAsIHsweDNhLDB4MjIsMHgyYywweDg4LDB4MjMsMHhlMywweDAwLDB4ZmIsMHgwMCwweDMwLDB4MzAsMHg4ZCwweDljLDB4ODMsMHhkMCwweDA0IH0gfSwKK3sgIDE2LCAweDg5ZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4YmEsMHg0MCwweGY3LDB4MDQsMHgzZSwweGMyIH0gfSwKK3sgIDE2LCAweDg5ZTAsIDAsIHsweDBkLDB4ZDgsMHgyMywweGQ4LDB4MDAsMHg3YiwweDAwLDB4MzcsMHhjMCwweDBmLDB4NzAsMHgzMywweGZjLDB4MTAsMHhkMiwweDAwIH0gfSwKK3sgIDE2LCAweDg5ZjAsIDAsIHsweDM1LDB4YzAsMHg4ZiwweGMwLDB4MDMsMHhmNCwweDAwLDB4ZjcsMHgwMiwweDNmLDB4ZTAsMHgwZSwweDgwLDB4MDMsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweDhhMDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4ODEsMHgyMCwweGM4LDB4MDgsMHgzMCwweGMwIH0gfSwKK3sgIDE2LCAweDhhMTAsIDAsIHsweDBjLDB4MDAsMHg4MywweDI0LDB4NDAsMHhjMywweDg5LDB4M2EsMHhjMCwweDBlLDB4YjAsMHgwYiwweDJjLDB4MDgsMHhjOSwweDQ4IH0gfSwKK3sgIDE2LCAweDhhMjAsIDAsIHsweDcyLDB4NTQsMHgwZiwweDkxLDB4MDMsMHhlZCwweDAyLDB4ZWIsMHg4YSwweDNhLDB4NjIsMHg4YywweDgwLDB4MGIsMHgxMCwweDA0IH0gfSwKK3sgIDE2LCAweDhhMzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4MmIsMHgwNCwweDg4LDB4NDAsMHhhMywweGMyIH0gfSwKK3sgIDE2LCAweDhhNDAsIDAsIHsweDAyLDB4YWUsMHgxMiwweDI3LDB4NDIsMHg4ZiwweDQ0LDB4MjMsMHhjMiwweDBiLDB4ZjQsMHgwMiwweDNkLDB4MDAsMHgwYSwweDQwIH0gfSwKK3sgIDE2LCAweDhhNTAsIDAsIHsweDIyLDB4ZTAsMHgwYiwweGI1LDB4MDIsMHhlYywweDIwLDB4OGYsMHg0NCwweGEyLDB4NDAsMHg4ZCwweGJkLDB4MjMsMHgzMiwweDAwIH0gfSwKK3sgIDE2LCAweDhhNjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NDksMHg0MCwweDgzLDB4ODEsMHgyNCwweGMxIH0gfSwKK3sgIDE2LCAweDhhNzAsIDAsIHsweDA4LDB4MjgsMHgwMiwweDAxLDB4MDAsMHg5MywweDAwLDB4YTAsMHhlOCwweDBhLDB4MzAsMHg4MiwweDhmLDB4NjAsMHhiMywweDkwIH0gfSwKK3sgIDE2LCAweDhhODAsIDAsIHsweDYwLDB4YjgsMHgwYiwweDI4LDB4MTIsMHg0YSwweDAwLDB4OTMsMHgwMCwweDIwLDB4OTAsMHgwOSwweDIwLDB4MDIsMHg3OCwweDAwIH0gfSwKK3sgIDE2LCAweDhhOTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAxLDB4MWUsMHgwMiwweDg3LDB4YTgsMHgyNSwweGUwIH0gfSwKK3sgIDE2LCAweDhhYTAsIDAsIHsweDBhLDB4N2IsMHgwMiwweDFhLDB4MDQsMHg4NywweDgwLDB4MjEsMHhlNCwweDBiLDB4NzgsMHg4MiwweDhlLDB4MDIsMHg5NiwweDkxIH0gfSwKK3sgIDE2LCAweDhhYjAsIDAsIHsweDIxLDB4MjEsMHgwYiwweDY5LDB4NDAsMHhkYiwweDQwLDB4OTcsMHg5MiwweDIzLDB4YTAsMHg4OSwweDU4LDB4ODIsMHgwOCwweDAwIH0gfSwKK3sgIDE2LCAweDhhYzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MjUsMHg4MiwweGMzLDB4MDAsMHgzNCwweGMwIH0gfSwKK3sgIDE2LCAweDhhZDAsIDAsIHsweDBjLDB4OWIsMHg0MywweDA4LDB4ZDAsMHhkMywweDIwLDB4MzgsMHhjMCwweDBlLDB4YjAsMHgwMywweDhjLDB4MDAsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweDhhZTAsIDAsIHsweDIwLDB4ODAsMHgwNywweDEwLDB4MDMsMHhlMCwweDAwLDB4ZDMsMHgxMCwweDM4LDB4MTgsMHgwZCwweDMwLDB4MDMsMHg1MiwweDAyIH0gfSwKK3sgIDE2LCAweDhhZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDFkLDB4YjQsMHgwMCwweDdmLDB4MjAsMHgxYiwweGQwIH0gfSwKK3sgIDE2LCAweDhiMDAsIDAsIHsweDBmLDB4ZjEsMHgwMywweGY4LDB4NDAsMHhlZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4YjQsMHgwMywweDdjLDB4MjAsMHhjZiwweDA0IH0gfSwKK3sgIDE2LCAweDhiMTAsIDAsIHsweGJmLDB4NDAsMHgwZiwweGYwLDB4MDMsMHhlNCwweDEwLDB4ZWYsMHgxOCwweDNkLDB4YzAsMHgwZiwweGUwLDB4MDMsMHhkMCwweDA2IH0gfSwKK3sgIDE2LCAweDhiMjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZTgsMHgwMCwweGUzLDB4MDAsMHhiMiwweGM0IH0gfSwKK3sgIDE2LCAweDhiMzAsIDAsIHsweDBjLDB4YTAsMHgwMywweDI0LDB4MDAsMHhkYiwweDY4LDB4MzIsMHhjOCwweDBjLDB4YjQsMHgwMywweGVjLDB4ODAsMHhjOCwweDgwIH0gfSwKK3sgIDE2LCAweDhiNDAsIDAsIHsweGI2LDB4ZTAsMHgwYywweGEwLDB4MDMsMHgyZSwweDAwLDB4Y2IsMHhlMCwweGIyLDB4NjAsMHgwYywweGI4LDB4MGIsMHgyYSwweDAwIH0gfSwKK3sgIDE2LCAweDhiNTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDExLDB4OWMsMHgwMiwweDg3LDB4MDAsMHhhMSwweGM4IH0gfSwKK3sgIDE2LCAweDhiNjAsIDAsIHsweDA4LDB4NzAsMHgwMiwweDFjLDB4MDgsMHg5NywweDAyLDB4MjEsMHhkNCwweDA4LDB4NzQsMHgwMiwweGRjLDB4YzAsMHgwNywweDAwIH0gfSwKK3sgIDE2LCAweDhiNzAsIDAsIHsweDIxLDB4YzAsMHg4OCwweDcwLDB4MDIsMHgxOCwweDAwLDB4ODMsMHgwOCwweDIxLDB4YzAsMHgwOCwweDUwLDB4MDIsMHgxMiwweDA0IH0gfSwKK3sgIDE2LCAweDhiODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHgyMCwweGFkLDB4ODAsMHgyOSwweGUwIH0gfSwKK3sgIDE2LCAweDhiOTAsIDAsIHsweDA4LDB4NTgsMHgwMiwweDFlLDB4MDAsMHg5NywweGIwLDB4MjEsMHhlOCwweDA4LDB4NzgsMHgwMiwweGRlLDB4MTAsMHgxNSwweDgwIH0gfSwKK3sgIDE2LCAweDhiYTAsIDAsIHsweDIxLDB4YTEsMHgwOCwweDQ4LDB4MDIsMHg1ZSwweDAwLDB4ODcsMHhhNCwweDY1LDB4YTAsMHgwOCwweDc4LDB4MDIsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweDhiYjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE0LDB4Y2YsMHgxMCwweDgxLDB4NzAsMHhhOCwweGMwIH0gfSwKK3sgIDE2LCAweDhiYzAsIDAsIHsweDM4LDB4MzAsMHgwYSwweDBkLDB4MDAsMHg5MywweDAwLDB4YTAsMHhjMSwweDI4LDB4MzAsMHgwMiwweGNjLDB4MDIsMHg4MywweDg4IH0gfSwKK3sgIDE2LCAweDhiZDAsIDAsIHsweDIwLDB4ZTAsMHgzOCwweDM0LDB4MGEsMHg0ZCwweDcyLDB4ODMsMHgwMCwweDI0LDB4ZTgsMHgyOCwweDM0LDB4ODIsMHgxMiwweDA0IH0gfSwKK3sgIDE2LCAweDhiZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YmEsMHg0MCwweGVlLDB4YzAsMHhiYSwweDgwIH0gfSwKK3sgIDE2LCAweDhiZjAsIDAsIHsweDBjLDB4ZTAsMHgwMywweDM5LDB4MTAsMHhkYSwweDAwLDB4MzIsMHg4MCwweDBjLDB4YTAsMHgwMywweGU4LDB4MDAsMHhkZSwweGM4IH0gfSwKK3sgIDE2LCAweDhjMDAsIDAsIHsweDMzLDB4YTAsMHgwYywweGUwLDB4MDMsMHg3YiwweDAwLDB4Y2EsMHgwMCwweDM3LDB4YjEsMHgwYywweGU0LDB4MjMsMHgzYSwweDA0IH0gfSwKK3sgIDE2LCAweDhjMTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4YzEsMHgwMCwweGY4LDB4MDAsMHgzNiwweDAwIH0gfSwKK3sgIDE2LCAweDhjMjAsIDAsIHsweDBmLDB4ODAsMHgwMywweGMwLDB4MjAsMHgzOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4MDAsMHgwMywweGUwLDB4MDAsMHhmOCwweDAyIH0gfSwKK3sgIDE2LCAweDhjMzAsIDAsIHsweDNhLDB4MjQsMHgwZiwweDgwLDB4ODMsMHhhMCwweDAxLDB4ZjgsMHgwNCwweDNhLDB4MDQsMHgwZCwweDgwLDB4MTMsMHhkMiwweDAwIH0gfSwKK3sgIDE2LCAweDhjNDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHg0NCwweGMxLDB4MDAsMHgzMiwweDQwIH0gfSwKK3sgIDE2LCAweDhjNTAsIDAsIHsweDBjLDB4OTAsMHgzMiwweDI0LDB4MGMsMHhjMSwweDA2LDB4MzgsMHg0MCwweDBkLDB4OTAsMHgwOSwweDA0LDB4MDAsMHhkOSwweDAwIH0gfSwKK3sgIDE2LCAweDhjNjAsIDAsIHsweDNlLDB4NDAsMHgwZiwweDE4LDB4MDMsMHgyNCwweDAwLDB4ZjksMHgwMSwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjMiwweDA0IH0gfSwKK3sgIDE2LCAweDhjNzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NjQsMHgwNiwweDg5LDB4MDAsMHgyYSwweDUwIH0gfSwKK3sgIDE2LCAweDhjODAsIDAsIHsweDA4LDB4OTQsMHgwYSwweDI0LDB4MDAsMHg4OSwweDQyLDB4MjIsMHg1MCwweDBhLDB4OTAsMHgxMiwweDI1LDB4MDAsMHg4OSwweDAwIH0gfSwKK3sgIDE2LCAweDhjOTAsIDAsIHsweDJlLDB4NTAsMHgwYiwweDljLDB4MGEsMHgyNSwweDEwLDB4YjksMHgwMCwweDJlLDB4NTAsMHgwYiwweDkwLDB4MDIsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweDhjYTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgyMCwweDg5LDB4MDAsMHgyMCwweDQyIH0gfSwKK3sgIDE2LCAweDhjYjAsIDAsIHsweDA4LDB4MTAsMHhjMiwweGFjLDB4MTAsMHg4OSwweDA4LDB4MmEsMHg0MiwweDA5LDB4OTAsMHgwMiwweDI0LDB4MjAsMHg5OSwweDAwIH0gfSwKK3sgIDE2LCAweDhjYzAsIDAsIHsweDJlLDB4NDIsMHgwYSwweGIxLDB4ODIsMHgyYywweDIwLDB4YjksMHgwMCwweDZlLDB4NDIsMHgwYiwweDkwLDB4MDIsMHhjNiwweDAwIH0gfSwKK3sgIDE2LCAweDhjZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDQsMHgwMCwweDgzLDB4MDAsMHgyOCwweDQ4IH0gfSwKK3sgIDE2LCAweDhjZTAsIDAsIHsweDA4LDB4MTIsMHg2MiwweDhjLDB4ODAsMHg4MSwweDAwLDB4MjAsMHg0MCwweDAyLDB4MTAsMHgwMiwweDg0LDB4ODAsMHg4MSwweDIwIH0gfSwKK3sgIDE2LCAweDhjZjAsIDAsIHsweDJjLDB4NDksMHgwYiwweDEyLDB4MDYsMHgwNCwweDg0LDB4YjMsMHgwMiwweDZjLDB4NDAsMHgwYiwweDEyLDB4MDIsMHhjMiwweDAxIH0gfSwKK3sgIDE2LCAweDhkMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NDEsMHhlMCwweGM4LDB4NzgsMHgzMCwweDE0IH0gfSwKK3sgIDE2LCAweDhkMTAsIDAsIHsweDRjLDB4MDUsMHgxMywweGExLDB4NDIsMHhjMCwweDc4LDB4MzgsMHgxZSwweDBkLDB4ODcsMHg4MywweDAxLDB4NDAsMHhkMCwweDUwIH0gfSwKK3sgIDE2LCAweDhkMjAsIDAsIHsweDNjLDB4MTQsMHgwZSwweDA1LDB4MDMsMHgwMSwweDQwLDB4ZjgsMHg3OCwweDNjLDB4MTQsMHgwZiwweDA1LDB4MDMsMHhlZSwweDAzIH0gfSwKK3sgIDE2LCAweDhkMzAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDFkLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHgwZSwweDQ0IH0gfSwKK3sgIDE2LCAweDhkNDAsIDAsIHsweDJmLDB4ZjEsMHgwMywweDc0LDB4NDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBkLDB4OTAsMHgwMywweDY0LDB4NDAsMHhmZCwweDEwIH0gfSwKK3sgIDE2LCAweDhkNTAsIDAsIHsweDNmLDB4NDQsMHgwZiwweGQxLDB4MDEsMHhmNCwweDQwLDB4ZjksMHgwMSwweDNmLDB4YzAsMHgwZiwweGQxLDB4MDMsMHhlNiwweDA2IH0gfSwKK3sgIDE2LCAweDhkNjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZTYsMHgyMiwweGU5LDB4ODgsMHhiMiwweDQwIH0gfSwKK3sgIDE2LCAweDhkNzAsIDAsIHsweDBmLDB4OTAsMHgwMywweDI0LDB4MTYsMHhjOSwweDhjLDB4MzYsMHg3YiwweDhmLDB4OWMsMHg4MywweGE3LDB4OTAsMHhjOSwweDAwIH0gfSwKK3sgIDE2LCAweDhkODAsIDAsIHsweDNlLDB4NTAsMHgwNCwweDk0LDB4MTMsMHgyNCwweDUwLDB4YzksMHhlMCwweDNlLDB4NTAsMHgwZiwweDkwLDB4MDMsMHgwNiwweDAwIH0gfSwKK3sgIDE2LCAweDhkOTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDEwLDB4ZTIsMHg4MCwweDg4LDB4YTAsMHgyMiwweDI4IH0gfSwKK3sgIDE2LCAweDhkYTAsIDAsIHsweDBiLDB4OGEsMHgwMiwweDJhLDB4ODAsMHg4OCwweGE0LDB4MjIsMHgzMCwweDA4LDB4OGUsMHgwYSwweDIyLDB4MDIsMHg4OCwweGEwIH0gfSwKK3sgIDE2LCAweDhkYjAsIDAsIHsweDJlLDB4MjgsMHg4OCwweGFhLDB4MTIsMHgyMiwweDkwLDB4ODgsMHhmNCwweDJlLDB4MjAsMHgwYiwweGM4LDB4MDIsMHgwZSwweDA0IH0gfSwKK3sgIDE2LCAweDhkYzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4ZDQsMHgyMCwweGE1LDB4MDgsMHgyMSwweDQyIH0gfSwKK3sgIDE2LCAweDhkZDAsIDAsIHsweDBiLDB4NTAsMHg4MiwweDE0LDB4MzEsMHg4NSwweDA4LDB4MjUsMHg0MCwweDBhLDB4NTAsMHgyMiwweDk0LDB4NDAsMHg4NSwweDA4IH0gfSwKK3sgIDE2LCAweDhkZTAsIDAsIHsweDZkLDB4NDAsMHgwOCwweDUwLDB4MDIsMHg1NCwweDAyLDB4OTUsMHgwMCwweDJkLDB4NDgsMHgwYiwweDUwLDB4ODIsMHg0MiwweDAxIH0gfSwKK3sgIDE2LCAweDhkZjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4ODQsMHgwMCwweDhkLDB4MTAsMHgyMywweDQwIH0gfSwKK3sgIDE2LCAweDhlMDAsIDAsIHsweDBiLDB4ZDAsMHgwMCwweDM0LDB4MDEsMHg4ZCwweDAwLDB4MjMsMHg0MSwweDU4LDB4ZDAsMHgwMiwweDM0LDB4MDAsMHg4ZCwweDA4IH0gfSwKK3sgIDE2LCAweDhlMTAsIDAsIHsweDJmLDB4NTAsMHgwOCwweGQyLDB4MDIsMHg3NCwweDgwLDB4OWQsMHgwMCwweDJmLDB4NDgsMHgwYiwweGRjLDB4MDIsMHg0NiwweDA0IH0gfSwKK3sgIDE2LCAweDhlMjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTcsMHg0MCwweGU5LDB4YzAsMHgzMiwweDQwIH0gfSwKK3sgIDE2LCAweDhlMzAsIDAsIHsweDBmLDB4OTAsMHgwOSwweDI2LDB4MDAsMHhjOSwweDA0LDB4MzYsMHg0MCwweDFmLDB4OTAsMHgyMywweGE0LDB4MDgsMHhjOSwweDQwIH0gfSwKK3sgIDE2LCAweDhlNDAsIDAsIHsweDNlLDB4NDAsMHgwYywweDk0LDB4MGIsMHg2NCwweDIwLDB4ZDksMHgwMiwweDNlLDB4NDEsMHgwZiwweDk0LDB4MDMsMHg2OCwweDA0IH0gfSwKK3sgIDE2LCAweDhlNTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAxLDB4YTQsMHgwMCwweGY5LDB4ODAsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweDhlNjAsIDAsIHsweDBmLDB4MTQsMHgwMywweGM1LDB4MDgsMHhmOSwweDAwLDB4M2UsMHg0MCwweDFmLDB4OTAsMHgyMywweGU0LDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweDhlNzAsIDAsIHsweDNjLDB4NDAsMHhhZiwweDk4LDB4MDMsMHg4NiwweDAwLDB4ZTksMHgwMCwweDNlLDB4NDAsMHgwZiwweDEwLDB4MGIsMHg4YSwweDAwIH0gfSwKK3sgIDE2LCAweDhlODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YjAsMHgwMCwweGRjLDB4NDAsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweDhlOTAsIDAsIHsweDBmLDB4YzAsMHgwMywweDMxLDB4MDIsMHhjNCwweDA0LDB4YjEsMHgwMCwweDNjLDB4NDAsMHgwMywweDEwLDB4MDAsMHhmYywweDQwIH0gfSwKK3sgIDE2LCAweDhlYTAsIDAsIHsweDMzLDB4MDAsMHgwYywweGM0LDB4MDMsMHhiMSwweDAwLDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgwYywweGM0LDB4MDMsMHhjYSwweDA0IH0gfSwKK3sgIDE2LCAweDhlYjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4MjgsMHgwMCwweDhhLDB4ODAsMHgyMiwweGEwIH0gfSwKK3sgIDE2LCAweDhlYzAsIDAsIHsweDBiLDB4YTAsMHgwMiwweDJhLDB4MDAsMHg4YSwweDg0LDB4MjIsMHhhMSwweDA4LDB4YTAsMHgwMiwweDI4LDB4MDgsMHhiYSwweDAxIH0gfSwKK3sgIDE2LCAweDhlZDAsIDAsIHsweDIyLDB4ODAsMHgwOCwweGEwLDB4MmIsMHgyOCwweDAwLDB4OGEsMHg4MCwweDJhLDB4ODAsMHgwOCwweGUwLDB4MDIsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweDhlZTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMiwweDliLDB4ODEsMHgyMCwweGUwIH0gfSwKK3sgIDE2LCAweDhlZjAsIDAsIHsweDhiLDB4MzgsMHgwNiwweGNlLDB4MDAsMHg5MywweDgwLDB4MjAsMHhjMCwweDA4LDB4MzgsMHgwMiwweDBjLDB4MDAsMHhiMywweDgwIH0gfSwKK3sgIDE2LCAweDhmMDAsIDAsIHsweDZjLDB4ZTAsMHgwYSwweGIwLDB4MDIsMHg0YywweDAwLDB4OTMsMHgwMCwweDIwLDB4ZTAsMHgwOCwweDMwLDB4MDIsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweDhmMTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDAxLDB4MTAsMHgwNCwweDgwLDB4MDgsMHgyMSwweDAyIH0gfSwKK3sgIDE2LCAweDhmMjAsIDAsIHsweDRiLDB4NDQsMHgwNiwweGQwLDB4MjAsMHg5MCwweDA4LDB4MjEsMHgwMiwweDgwLDB4NDQsMHgwMiwweDEwLDB4MDAsMHhiNCwweGMwIH0gfSwKK3sgIDE2LCAweDhmMzAsIDAsIHsweDJkLDB4MTAsMHg0OCwweDQwLDB4MDIsMHgwMCwweDAwLDB4OTQsMHg4OSwweDI5LDB4MzAsMHgwOCwweDQwLDB4MDIsMHhlOCwweDAwIH0gfSwKK3sgIDE2LCAweDhmNDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MzIsMHgwMCwweGQ2LDB4ODAsMHgzMSwweGEwIH0gfSwKK3sgIDE2LCAweDhmNTAsIDAsIHsweDBmLDB4ZTgsMHgwYiwweGNhLDB4MDAsMHhkNiwweDgwLDB4MjMsMHhhMCwweDA0LDB4ZjgsMHgwYiwweDFhLDB4MDAsMHhmZiwweDgwIH0gfSwKK3sgIDE2LCAweDhmNjAsIDAsIHsweGJmLDB4YTAsMHgyZSwweGM4LDB4MTMsMHhkYSwweDAyLDB4NWUsMHg4MCwweDczLDB4YTAsMHgyYywweDc4LDB4MDMsMHhlYSwweDAyIH0gfSwKK3sgIDE2LCAweDhmNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDFkLDB4YWMsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweDhmODAsIDAsIHsweDBmLDB4OTAsMHgwMywweDI0LDB4MDAsMHhlOSwweDAwLDB4M2UsMHg0MCwweDBlLDB4ODAsMHgwMywweGU0LDB4MDAsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweDhmOTAsIDAsIHsweDMyLDB4NDAsMHgwZiwweGIwLDB4MDMsMHhlNCwweDAxLDB4ZTksMHgwNCwweDM2LDB4NDAsMHgwZiwweDgwLDB4MDMsMHhjMiwweDA2IH0gfSwKK3sgIDE2LCAweDhmYTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHgwMCwweGNkLDB4ODAsMHgzMywweDYwIH0gfSwKK3sgIDE2LCAweDhmYjAsIDAsIHsweDBjLDB4ZDgsMHg0MywweDM2LDB4MDAsMHhjZCwweDgwLDB4MzMsMHg2MCwweDBjLDB4ZDksMHgyMywweGJlLDB4MDAsMHg0ZCwweDgwIH0gfSwKK3sgIDE2LCAweDhmYzAsIDAsIHsweDMzLDB4NjAsMHgwOCwweGY4LDB4MGIsMHgzZSwweDAwLDB4ZmQsMHg4NCwweDNmLDB4NjAsMHgwZiwweGY5LDB4MDMsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweDhmZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4OTAsMHgwNCwweGRlLDB4MDAsMHgyMywweDgwIH0gfSwKK3sgIDE2LCAweDhmZTAsIDAsIHsweDA4LDB4NjAsMHgwMiwweGI4LDB4MjAsMHg4ZSwweDA0LDB4MjMsMHg4MCwweDA4LDB4NjgsMHgwMiwweDEwLDB4MDAsMHg4ZSwweDIwIH0gfSwKK3sgIDE2LCAweDhmZjAsIDAsIHsweDIzLDB4ODIsMHgwOCwweDQwLDB4MDIsMHgxMiwweDAwLDB4ZjYsMHgwMCwweDJkLDB4ODAsMHgwYiwweDQxLDB4YTAsMHhlYSwweDA0IH0gfSwKK3sgIDE2LCAweDkwMDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTAsMHgwMCwweDg0LDB4MDAsMHgyMSwweDAwIH0gfSwKK3sgIDE2LCAweDkwMTAsIDAsIHsweDA4LDB4NDEsMHgwMiwweDUwLDB4NDAsMHg5NCwweDAwLDB4MjEsMHgwMCwweDBhLDB4NTIsMHgwMiwweGQ4LDB4MDAsMHg4NSwweDAyIH0gfSwKK3sgIDE2LCAweDkwMjAsIDAsIHsweDI1LDB4MDQsMHgwOCwweDQwLDB4MjIsMHgxOCwweDA4LDB4YjQsMHgwMCwweDJkLDB4MTAsMHgwYiwweDc4LDB4NDAsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweDkwMzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDE0LDB4ZWUsMHgyMiwweDkzLDB4MDAsMHgyMCwweGMwIH0gfSwKK3sgIDE2LCAweDkwNDAsIDAsIHsweDA4LDB4MzgsMHgwMiwweGVjLDB4MDAsMHg5MywweDAwLDB4MjAsMHhjMSwweDJhLDB4MjAsMHgwMiwweDY0LDB4MDIsMHg4MiwweDEwIH0gfSwKK3sgIDE2LCAweDkwNTAsIDAsIHsweDI0LDB4ZjAsMHgwYSwweDNjLDB4NDIsMHgyNCwweDI4LDB4YjMsMHgwMCwweDJjLDB4ZTAsMHgwYiwweDg4LDB4ODIsMHhjOCwweDA0IH0gfSwKK3sgIDE2LCAweDkwNjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YWQsMHgwMCwweGNiLDB4MDAsMHhiMiwweGMwIH0gfSwKK3sgIDE2LCAweDkwNzAsIDAsIHsweGFjLDB4YmUsMHgwMywweDZlLDB4MDIsMHhkYiwweDAwLDB4YjIsMHhjMCwweDFlLDB4YTAsMHgwMywweGU0LDB4MDAsMHhjYSwweDExIH0gfSwKK3sgIDE2LCAweDkwODAsIDAsIHsweGI2LDB4ZDAsMHhhYywweGJjLDB4MDMsMHgyNCwweDAwLDB4ZmIsMHgwMCwweDNlLDB4YzAsMHhjZiwweDg0LDB4MDMsMHhlYSwweDA0IH0gfSwKK3sgIDE2LCAweDkwOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4ZTAsMHg0MCwweGY4LDB4MDAsMHgzYywweDAwIH0gfSwKK3sgIDE2LCAweDkwYTAsIDAsIHsweDJmLDB4ODIsMHgwMywweGEwLDB4MDAsMHhlOCwweDAwLDB4M2UsMHgwMCwweDFkLDB4OTAsMHgxMywweGE4LDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweDkwYjAsIDAsIHsweDNhLDB4MDAsMHg4MSwweDgzLDB4NDMsMHhlOCwweDAwLDB4ZTgsMHgwMywweDNlLDB4MDQsMHgwZiwweGIwLDB4MDMsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweDkwYzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZTAsMHgwMCwweGQ2LDB4MDAsMHgzNywweDgwIH0gfSwKK3sgIDE2LCAweDkwZDAsIDAsIHsweDBjLDB4YTAsMHgwMywweGY4LDB4MDAsMHhjZSwweDAwLDB4MzMsMHg4MCwweDBkLDB4YTAsMHgxMywweDIwLDB4MDgsMHhjZSwweDAwIH0gfSwKK3sgIDE2LCAweDkwZTAsIDAsIHsweDMzLDB4ODIsMHgwYywweDQwLDB4NzMsMHgzMCwweDE4LDB4Y2UsMHgwMCwweDFmLDB4ODAsMHg0ZiwweGMxLDB4NDMsMHgwMCwweDQ0IH0gfSwKK3sgIDE2LCAweDkwZjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MSwweDA0LDB4N2MsMHgwMCwweDhkLDB4MDAsMHgyMywweDQwIH0gfSwKK3sgIDE2LCAweDkxMDAsIDAsIHsweDBhLDB4ZDAsMHgwMiwweGY0LDB4MDAsMHg4ZCwweDAwLDB4MjMsMHg0MCwweDA4LDB4ZDQsMHg4MCwweDNlLDB4NDIsMHg4ZCwweDQwIH0gfSwKK3sgIDE2LCAweDkxMTAsIDAsIHsweDIzLDB4NDAsMHgwOCwweGYwLDB4MDIsMHgzZSwweDQwLDB4OGQsMHgwMCwweDBmLDB4NDAsMHgwYiwweGY0LDB4MDIsMHgyMCwweDQwIH0gfSwKK3sgIDE2LCAweDkxMjAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweDk5LDB4MDAsMHhhNiwweDQwIH0gfSwKK3sgIDE2LCAweDkxMzAsIDAsIHsweDA4LDB4OTAsMHgwNiwweGU0LDB4MDAsMHg5MSwweDAwLDB4MjAsMHg0MCwweDg4LDB4MDAsMHgwMiwweDI0LDB4MDgsMHg4MCwweDQwIH0gfSwKK3sgIDE2LCAweDkxNDAsIDAsIHsweDIwLDB4NDAsMHgwYSwweGIwLDB4MDIsMHgyNCwweDAwLDB4ODksMHgwMCwweDBlLDB4NDAsMHgwYiwweDg0LDB4MDIsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweDkxNTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDAsMHgwMCwweDgyLDB4MDAsMHgyMCwweDgwIH0gfSwKK3sgIDE2LCAweDkxNjAsIDAsIHsweDBhLDB4MjEsMHgwNiwweGM4LDB4MDEsMHg4MiwweDAwLDB4MjAsMHg4MCwweDA4LDB4MzIsMHg4MiwweDA4LDB4MDgsMHg4MywweDAwIH0gfSwKK3sgIDE2LCAweDkxNzAsIDAsIHsweDYwLDB4ODAsMHgwYSwweDAwLDB4MTIsMHgwOCwweDgwLDB4ODIsMHgwMCwweDJjLDB4ODAsMHgwYiwweDMwLDB4MGEsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweDkxODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NjAsMHgwMCwweGQ4LDB4MDAsMHgzNiwweDAwIH0gfSwKK3sgIDE2LCAweDkxOTAsIDAsIHsweDBjLDB4ODQsMHgyMywweGUwLDB4MDAsMHhjOCwweDAwLDB4MzIsMHgwMCwweDBkLDB4ODIsMHgwYiwweDIwLDB4MDIsMHhjOCwweDAwIH0gfSwKK3sgIDE2LCAweDkxYTAsIDAsIHsweDMyLDB4MDAsMHgwZSwweDAwLDB4MDMsMHgyMCwweDAyLDB4YzgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgwMCwweDAzIH0gfSwKK3sgIDE2LCAweDkxYjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDFkLDB4ZmMsMHgwMCwweGJmLDB4MDAsMHgzZiwweGMwIH0gfSwKK3sgIDE2LCAweDkxYzAsIDAsIHsweDBmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZiwweDAwLDB4YmYsMHhjMCwweDhmLDB4YjAsMHgwMywweGZjLDB4MDgsMHhmZiwweDAyIH0gfSwKK3sgIDE2LCAweDkxZDAsIDAsIHsweDNmLDB4YzAsMHgwZCwweGYwLDB4MDMsMHhlZCwweDAwLDB4ZmYsMHgwMiwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhlOCwweDA2IH0gfSwKK3sgIDE2LCAweDkxZTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAxLDB4ZjAsMHg4YywweGZmLDB4MDAsMHgzZCwweDYwIH0gfSwKK3sgIDE2LCAweDkxZjAsIDAsIHsweDJjLDB4YjIsMHg4MywweDdjLDB4OTAsMHhkZiwweDM4LDB4MzEsMHhlMCwweDBmLDB4ZjgsMHgwMywweDNjLDB4MDAsMHhmZiwweDIwIH0gfSwKK3sgIDE2LCAweDkyMDAsIDAsIHsweDNmLDB4YzQsMHgwZSwweGY0LDB4MDMsMHg3YywweDAwLDB4ZjQsMHg4MCwweDMzLDB4MDAsMHgwZCwweGY4LDB4MDMsMHhmMCwweDAwIH0gfSwKK3sgIDE2LCAweDkyMTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4ZTEsMHgyMCwweGJiLDB4NjIsMHgyZSwweDQyIH0gfSwKK3sgIDE2LCAweDkyMjAsIDAsIHsweDI4LDB4ZjQsMHg0MiwweDNlLDB4NDAsMHg4ZiwweDQ0LDB4MjIsMHhlMCwweDBiLDB4YjAsMHg4MywweDdmLDB4NDQsMHhiZiwweGMxIH0gfSwKK3sgIDE2LCAweDkyMzAsIDAsIHsweDJkLDB4ZGMsMHgyYSwweGY2LDB4MDIsMHgzZiwweDQ1LDB4YjgsMHg4MCwweDIyLDB4NjEsMHg4OCwweGI4LDB4MDIsMHhlMCwweDA0IH0gfSwKK3sgIDE2LCAweDkyNDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzUsMHg4MCwweGIyLDB4MTgsMHgyZSwweGM4IH0gfSwKK3sgIDE2LCAweDkyNTAsIDAsIHsweDI5LDB4MzAsMHgzMiwweDBjLDB4MDgsMHhiMywweDIwLDB4MjAsMHhjMCwweDRiLDB4OTIsMHgwMiwweDBjLDB4MDAsMHhiMywweDQwIH0gfSwKK3sgIDE2LCAweDkyNjAsIDAsIHsweDJjLDB4YzAsMHg4OSwweDM0LDB4MTIsMHg0YywweDAwLDB4YjAsMHgwMCwweDI0LDB4YzEsMHg0OSwweDMwLDB4MDIsMHhlMiwweDAxIH0gfSwKK3sgIDE2LCAweDkyNzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDExLDB4YTQsMHgwMCwweGJhLDB4MGMsMHgyZSwweGUwIH0gfSwKK3sgIDE2LCAweDkyODAsIDAsIHsweGE5LDB4YjAsMHgwNiwweDJjLDB4MDAsMHg4YiwweDAwLDB4YTIsMHhjMCwweDBiLDB4OTAsMHgwMCwweDZjLDB4MDAsMHhiYiwweDAwIH0gfSwKK3sgIDE2LCAweDkyOTAsIDAsIHsweDJlLDB4YzAsMHgwYiwweDMwLDB4MDIsMHg2YywweDAwLDB4YmEsMHg4MCwweDI2LDB4ZjAsMHgwOCwweGIwLDB4MDIsMHhmMCwweDA0IH0gfSwKK3sgIDE2LCAweDkyYTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDExLDB4ZWUsMHgwMCwweGZiLDB4YzQsMHgzZSwweDc4IH0gfSwKK3sgIDE2LCAweDkyYjAsIDAsIHsweDJkLDB4YjAsMHgwMywweDZjLDB4MDgsMHhmYiwweDAwLDB4MzIsMHhjMCwweDhiLDB4MjQsMHg4MywweDJjLDB4MDAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweDkyYzAsIDAsIHsweDNlLDB4YzAsMHg4ZiwweGIwLDB4MGIsMHg2YywweDA4LDB4YjIsMHhlMCwweDE2LDB4NjAsMHg4ZCwweGIwLDB4MjMsMHhkMCwweDA0IH0gfSwKK3sgIDE2LCAweDkyZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4YmUsMHg5OCwweGZmLDB4NDAsMHgzZiwweGMwIH0gfSwKK3sgIDE2LCAweDkyZTAsIDAsIHsweDBlLDB4NzAsMHgwMywweGRjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZTAsMHgwMywweGZjLDB4MDAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweDkyZjAsIDAsIHsweDNmLDB4YzAsMHgwZSwweGYwLDB4MDMsMHhhYywweDAwLDB4ZmUsMHgwMCwweGI5LDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweDkzMDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWQsMHgwMCwweGZhLDB4NDAsMHgzZSwweGQwIH0gfSwKK3sgIDE2LCAweDkzMTAsIDAsIHsweDBlLDB4YjIsMHgwMywweGVjLDB4MDAsMHhjMywweDAwLDB4M2UsMHhjMCwweDBjLDB4YTAsMHgwMywweDJjLDB4MDEsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweDkzMjAsIDAsIHsweDNjLDB4YzAsMHgwZSwweGI4LDB4MDMsMHhlYywweDAwLDB4ZGEsMHgwMCwweDNhLDB4ZDAsMHg0ZiwweGIwLDB4MjMsMHhkMCwweDA0IH0gfSwKK3sgIDE2LCAweDkzMzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4MmMsMHgwMCwweGJhLDB4MDAsMHgyYywweGMwIH0gfSwKK3sgIDE2LCAweDkzNDAsIDAsIHsweDA4LDB4ZjQsMHgwNywweGJjLDB4MTQsMHhkZiwweDAwLDB4M2UsMHhjMCwweDFhLDB4YTAsMHg1MiwweGJjLDB4MDAsMHhiZiwweDA0IH0gfSwKK3sgIDE2LCAweDkzNTAsIDAsIHsweDNmLDB4YzAsMHg4YSwweGYwLDB4MDMsMHhiYywweDAwLDB4ZmEsMHgwMCwweDIyLDB4YzgsMHgwZiwweGIwLDB4MDMsMHhmMiwweDAwIH0gfSwKK3sgIDE2LCAweDkzNjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NDgsMHgwMSwweGIxLDB4MDAsMHg2YywweGMyIH0gfSwKK3sgIDE2LCAweDkzNzAsIDAsIHsweDBhLDB4MzAsMHg0MiwweGNjLDB4MDAsMHg4MywweDA1LDB4MmMsMHhjMCwweDA4LDB4MzAsMHgwMiwweDhjLDB4MDEsMHhiMywweDA0IH0gfSwKK3sgIDE2LCAweDkzODAsIDAsIHsweDJjLDB4YzAsMHgwYSwweDMwLDB4MjIsMHg4YywweDAwLDB4ODAsMHg4MCwweDI4LDB4YzAsMHgwYiwweDMwLDB4MjIsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweDkzOTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAxLDB4MWUsMHgwOCwweGI3LDB4ODAsMHg2ZiwweGUwIH0gfSwKK3sgIDE2LCAweDkzYTAsIDAsIHsweDE4LDB4NzgsMHgwMiwweDhlLDB4NDAsMHhiNywweDgwLDB4MmQsMHhlMCwweDBhLDB4NzgsMHgwMiwweDllLDB4MDAsMHhiNywweDgwIH0gfSwKK3sgIDE2LCAweDkzYjAsIDAsIHsweDI5LDB4ZTEsMHgwYSwweDc4LDB4MDIsMHg5ZSwweDAxLDB4YmMsMHg4MCwweDI5LDB4ZTQsMHgwYiwweDc4LDB4MDIsMHhjOCwweDAwIH0gfSwKK3sgIDE2LCAweDkzYzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MDksMHg0MCwweGYxLDB4MjAsMHgzYywweGM0IH0gfSwKK3sgIDE2LCAweDkzZDAsIDAsIHsweDBlLDB4MzksMHgwMiwweGNjLDB4MDAsMHhjMywweDAwLDB4MmMsMHhjNCwweDA4LDB4OTIsMHgwMywweDhjLDB4ODgsMHhiMywweDEwIH0gfSwKK3sgIDE2LCAweDkzZTAsIDAsIHsweDJjLDB4YzQsMHgwZSwweGIwLDB4MDcsMHg4YywweDAwLDB4YzIsMHgwOCwweDM4LDB4YzAsMHgwZiwweDMwLDB4NDMsMHhkMiwweDAyIH0gfSwKK3sgIDE2LCAweDkzZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDFkLDB4YmMsMHgxMCwweGZjLDB4MDAsMHg3ZiwweGMwIH0gfSwKK3sgIDE2LCAweDk0MDAsIDAsIHsweDBmLDB4ZjAsMHg4MywweGZjLDB4MjEsMHhkZiwweDA4LDB4M2IsMHhjMCwweDhmLDB4OTAsMHgwMSwweGZjLDB4MjEsMHhmZiwweDBjIH0gfSwKK3sgIDE2LCAweDk0MTAsIDAsIHsweDNmLDB4YzIsMHgwZiwweGYxLDB4MDMsMHhlYywweDAwLDB4ZWYsMHgwMCwweDc3LDB4YzAsMHgxZSwweGYwLDB4MDMsMHg5MCwweDA2IH0gfSwKK3sgIDE2LCAweDk0MjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZTgsMHgwMSwweGY5LDB4MDAsMHgzMiwweGMwIH0gfSwKK3sgIDE2LCAweDk0MzAsIDAsIHsweDBmLDB4YjIsMHgwMywweGVlLDB4OTAsMHhkYiwweGUxLDB4M2EsMHhjMCwweDRkLDB4MzgsMHgxMywweDJkLDB4MzAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweDk0NDAsIDAsIHsweDNlLDB4ZTAsMHg0ZiwweGJhLDB4NDMsMHgyYywweDQwLDB4ZmEsMHgwMCwweDNmLDB4YzAsMHg4YywweGIwLDB4MDMsMHhlYSwweDAwIH0gfSwKK3sgIDE2LCAweDk0NTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDExLDB4OWMsMHgwMCwweGIxLDB4MDAsMHgyMSwweGMwIH0gfSwKK3sgIDE2LCAweDk0NjAsIDAsIHsweDBiLDB4NzEsMHgwMiwweGNjLDB4MjAsMHhhNywweDI4LDB4MjEsMHhjMCwweDBiLDB4NzAsMHgxMywweDVjLDB4MDgsMHhiNywweDEwIH0gfSwKK3sgIDE2LCAweDk0NzAsIDAsIHsweDJkLDB4YzQsMHg0YiwweDM0LDB4ODMsMHgxYywweGMxLDB4YjcsMHgwMiwweDJkLDB4YzAsMHgxYSwweDcwLDB4MDIsMHhkMiwweDA0IH0gfSwKK3sgIDE2LCAweDk0ODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWEsMHgyMCwweGI0LDB4YzQsMHgyNSwweGEyIH0gfSwKK3sgIDE2LCAweDk0OTAsIDAsIHsweDBiLDB4NzgsMHgwNiwweGRlLDB4MDAsMHg4MywweDgwLDB4MjksMHhlMCwweDFiLDB4ZjgsMHgwMiwweDVlLDB4ODAsMHhhNywweGEwIH0gfSwKK3sgIDE2LCAweDk0YTAsIDAsIHsweDJkLDB4YzgsMHgwYSwweDcyLDB4MDIsMHgxZSwweDAwLDB4YTYsMHg4MCwweDI4LDB4ZTAsMHgwOCwweDc4LDB4MDIsMHhmMCwweDAwIH0gfSwKK3sgIDE2LCAweDk0YjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE0LDB4ZWQsMHgwMCwweGIzLDB4NDAsMHgyNCwweGMzIH0gfSwKK3sgIDE2LCAweDk0YzAsIDAsIHsweDBiLDB4MzAsMHg0MiwweGNjLDB4MDAsMHhhMywweDAwLDB4MjAsMHhjMCwweDFiLDB4MzQsMHgwMiwweDRjLDB4MDAsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweDk0ZDAsIDAsIHsweDJjLDB4YzAsMHg0YiwweDMwLDB4MDIsMHgwYywweDAwLDB4YjMsMHg4OCwweDJjLDB4ZDQsMHgwYSwweDMwLDB4MDIsMHhkMiwweDA0IH0gfSwKK3sgIDE2LCAweDk0ZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YjgsMHgwMCwweGZlLDB4NDAsMHhiNywweGEwIH0gfSwKK3sgIDE2LCAweDk0ZjAsIDAsIHsweDBmLDB4YTAsMHgwMywweGU4LDB4MDAsMHhkYSwweDAwLDB4M2EsMHg4MCwweDBmLDB4ZTIsMHgwMywweDY4LDB4MDAsMHhmYSwweDAwIH0gfSwKK3sgIDE2LCAweDk1MDAsIDAsIHsweDNlLDB4ODAsMHgwZiwweGEwLDB4MGIsMHgyOCwweDAwLDB4ZWUsMHhlMCwweDNmLDB4YjAsMHgwNCwweGEwLDB4MDMsMHhmYSwweDA0IH0gfSwKK3sgIDE2LCAweDk1MTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4ZTAsMHgwNCwweGYwLDB4MDgsMHgzYSwweDEwIH0gfSwKK3sgIDE2LCAweDk1MjAsIDAsIHsweDBmLDB4ODQsMHgwMywweGUwLDB4MTAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDRmLDB4ODAsMHg4MywweGUwLDB4MDAsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweDk1MzAsIDAsIHsweDNjLDB4MDAsMHgwZiwweDgwLDB4MDMsMHg4MCwweDAwLDB4ZjgsMHg0MCwweDNlLDB4MDksMHgwZiwweDgwLDB4MDMsMHhkMiwweDAwIH0gfSwKK3sgIDE2LCAweDk1NDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgyMCwweGU5LDB4MDAsMHgzMiwweDQ0IH0gfSwKK3sgIDE2LCAweDk1NTAsIDAsIHsweDBjLDB4OTAsMHgwMywweDI0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgxMywweGU0LDB4MDAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweDk1NjAsIDAsIHsweDFlLDB4NDAsMHgwYywweDEwLDB4MDMsMHgyNCwweDAwLDB4YzksMHhhMCwweDNjLDB4NjQsMHgwYywweDkwLDB4MDMsMHg4MiwweDA0IH0gfSwKK3sgIDE2LCAweDk1NzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4MDAsMHgyMiwweDY4IH0gfSwKK3sgIDE2LCAweDk1ODAsIDAsIHsweDA4LDB4MTMsMHgwMiwweDI0LDB4MDgsMHhmOSwweDAwLDB4MmUsMHg0OCwweDFiLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweDk1OTAsIDAsIHsweDNlLDB4NDAsMHgwYywweDkwLDB4MDIsMHgyNCwweDA4LDB4ZjksMHg0MCwweDJlLDB4NjAsMHgwYSwweDkwLDB4MDYsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweDk1YTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4MjQsMHgwMCwweGE5LDB4MDAsMHgyMCwweDQwIH0gfSwKK3sgIDE2LCAweDk1YjAsIDAsIHsweDA4LDB4OTAsMHgwMiwweDI0LDB4MDAsMHhiOSwweDAxLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweDk1YzAsIDAsIHsweDJlLDB4NDAsMHgwOCwweDkyLDB4MjIsMHgyNCwweDAwLDB4ODksMHgwMCwweDJlLDB4NDAsMHgwOCwweDkwLDB4MDIsMHhjNiwweDAwIH0gfSwKK3sgIDE2LCAweDk1ZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDQsMHg4MCwweDgxLDB4MjEsMHhlMCwweDUwIH0gfSwKK3sgIDE2LCAweDk1ZTAsIDAsIHsweDI4LDB4MTYsMHgwYSwweDA0LDB4ODAsMHhhMSwweDQwLDB4MmMsMHg0MCwweDRiLDB4MTQsMHgyMiwweGM0LDB4MDAsMHhiMSwweDAwIH0gfSwKK3sgIDE2LCAweDk1ZjAsIDAsIHsweDJjLDB4NTAsMHgwOSwweDE0LDB4MDIsMHgwNCwweDA0LDB4YjEsMHgwMCwweDJjLDB4NDAsMHgwYSwweDEwLDB4MDIsMHhjMiwweDAxIH0gfSwKK3sgIDE2LCAweDk2MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGU4LDB4NTAsMHgzMiwweDAwIH0gfSwKK3sgIDE2LCAweDk2MTAsIDAsIHsweDhjLDB4ODAsMHgwMiwweDIwLDB4MDAsMHhiOCwweDAwLDB4M2UsMHgwMCwweDBiLDB4ODAsMHgzMywweGUwLDB4MTAsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweDk2MjAsIDAsIHsweDNlLDB4MDAsMHgwYywweDgwLDB4MDMsMHgyMCwweDA4LDB4Y2EsMHgwMCwweDNlLDB4MDAsMHgwYywweDgwLDB4MDMsMHhhZSwweDAzIH0gfSwKK3sgIDE2LCAweDk2MzAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDFkLDB4ZmMsMHg0MCwweGZkLDB4MTAsMHgyZiwweDQxIH0gfSwKK3sgIDE2LCAweDk2NDAsIDAsIHsweDRmLDB4OTEsMHgwMywweGU0LDB4NDAsMHhmOSwweDQwLDB4M2UsMHg0MCwweDRmLDB4ZDAsMHg2MywweGU1LDB4MDAsMHhmOSwweDQwIH0gfSwKK3sgIDE2LCAweDk2NTAsIDAsIHsweDNhLDB4NTAsMHgyZSwweDk0LDB4MDMsMHg2NSwweDAwLDB4ZWQsMHgwMCwweDNmLDB4NTAsMHgwZiwweDkwLDB4MDMsMHhlNiwweDA2IH0gfSwKK3sgIDE2LCAweDk2NjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4ZTYsMHgwMCwweGY5LDB4ZTAsMHgzMywweDUwIH0gfSwKK3sgIDE2LCAweDk2NzAsIDAsIHsweDBjLDB4ZGEsMHgwMywweGE2LDB4MDAsMHhkOSwweDgwLDB4M2YsMHg0MCwweDBmLDB4OTEsMHgwMywweGE2LDB4MDAsMHhmOSwweDg4IH0gfSwKK3sgIDE2LCAweDk2ODAsIDAsIHsweDNlLDB4NjgsMHgwYywweGRlLDB4MDMsMHg2NiwweDAwLDB4ZWQsMHgwMCwweDNiLDB4NjksMHgwYywweDkwLDB4MDMsMHhjNiwweDAwIH0gfSwKK3sgIDE2LCAweDk2OTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDEwLDB4ZTEsMHgwOCwweGI4LDB4ZTAsMHgyMCwweDIwIH0gfSwKK3sgIDE2LCAweDk2YTAsIDAsIHsweDE4LDB4OGUsMHgyNiwweGUxLDB4MDAsMHg4MCwweGEwLDB4MmUsMHgwMCwweDRiLDB4ODgsMHg0MiwweGUxLDB4NTAsMHhiOCwweDQwIH0gfSwKK3sgIDE2LCAweDk2YjAsIDAsIHsweDJlLDB4MmEsMHgwZCwweDBhLDB4MDIsMHgyMCwweDA4LDB4YjgsMHgwMCwweDJlLDB4MTQsMHgwZCwweDgwLDB4MDIsMHhjZSwweDA0IH0gfSwKK3sgIDE2LCAweDk2YzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzUsMHgwMCwweGIxLDB4NjAsMHgyMCwweDQwIH0gfSwKK3sgIDE2LCAweDk2ZDAsIDAsIHsweDA4LDB4MzEsMHhhMiwweGM1LDB4MDAsMHg5MSwweDQ4LDB4MmMsMHg0MCwweDFiLDB4MTIsMHgwMiwweDg0LDB4MDAsMHhiMSwweDAwIH0gfSwKK3sgIDE2LCAweDk2ZTAsIDAsIHsweDJjLDB4NTAsMHgwOSwweDE2LDB4MDIsMHgwNSwweDAwLDB4YTMsMHgwNCwweDI4LDB4NDAsMHgwOCwweDEwLDB4MDIsMHhjMiwweDAxIH0gfSwKK3sgIDE2LCAweDk2ZjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4YTQsMHgwMCwweGI5LDB4MDgsMHgyMCwweDcwIH0gfSwKK3sgIDE2LCAweDk3MDAsIDAsIHsweDI4LDB4OTAsMHgwMiwweGU0LDB4MDAsMHg4OSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweGU0LDB4MDgsMHhiOSwweDAzIH0gfSwKK3sgIDE2LCAweDk3MTAsIDAsIHsweDJjLDB4NDAsMHgyOSwweDkwLDB4MDIsMHg2NCwweDAwLDB4YjksMHgwMCwweDJlLDB4NjIsMHgwOSwweDkwLDB4MDIsMHhjNiwweDA0IH0gfSwKK3sgIDE2LCAweDk3MjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDA1LDB4ZTUsMHgwMCwweGY5LDB4ZDAsMHhiMiwweDcwIH0gfSwKK3sgIDE2LCAweDk3MzAsIDAsIHsweDA4LDB4OTAsMHgwMywweGU0LDB4MDAsMHhkOSwweDA0LDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGE0LDB4MTAsMHhmOSwweDAyIH0gfSwKK3sgIDE2LCAweDk3NDAsIDAsIHsweDNlLDB4NDAsMHgwZCwweDkwLDB4MmIsMHg2NCwweDAwLDB4ZTksMHg4ZCwweDNhLDB4NjAsMHgwYywweDkwLDB4MDMsMHhlOCwweDA0IH0gfSwKK3sgIDE2LCAweDk3NTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAxLDB4YTQsMHgwMCwweGY5LDB4ODAsMHgzZSwweDQyIH0gfSwKK3sgIDE2LCAweDk3NjAsIDAsIHsweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OWEsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweDk3NzAsIDAsIHsweDNlLDB4NDAsMHgyZiwweDEwLDB4MDMsMHhhNCwweDAwLDB4ZjksMHgyMiwweDNjLDB4NDAsMHg0ZiwweDkwLDB4MDMsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweDk3ODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAwLDB4YTAsMHgwMCwweGYwLDB4NDAsMHgzMiwweDAwIH0gfSwKK3sgIDE2LCAweDk3OTAsIDAsIHsweDBjLDB4ODAsMHgwMywweGMwLDB4MDAsMHhmOCwweDAwLDB4MzIsMHgyMCwweDFmLDB4ODAsMHgwMywweGUwLDB4MDAsMHhjOCwweDAwIH0gfSwKK3sgIDE2LCAweDk3YTAsIDAsIHsweDMyLDB4MDAsMHgwYywweDgwLDB4MDIsMHgyMCwweDAwLDB4YzgsMHhjMCwweDNlLDB4MDAsMHgwYywweDgwLDB4MDMsMHhjYSwweDA0IH0gfSwKK3sgIDE2LCAweDk3YjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDE1LDB4MjgsMHgxMCwweGJhLDB4MDAsMHgyMywweGEwIH0gfSwKK3sgIDE2LCAweDk3YzAsIDAsIHsweDBhLDB4ZTQsMHgwMiwweGU4LDB4MDAsMHhiYSwweDAwLDB4MmIsMHhhMSwweDBiLDB4YTAsMHgwMiwweGU4LDB4MDAsMHhhYSwweDAwIH0gfSwKK3sgIDE2LCAweDk3ZDAsIDAsIHsweDJhLDB4ODEsMHgwYSwweGEwLDB4MDMsMHhlOCwweDA4LDB4ZGUsMHgwMCwweDJlLDB4ODAsMHgwYSwweGEwLDB4MDIsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweDk3ZTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweGIzLDB4MDQsMHhhMCwweGIxIH0gfSwKK3sgIDE2LCAweDk3ZjAsIDAsIHsweDA4LDB4MzYsMHgyMiwweGNjLDB4MDAsMHhiMywweDAwLDB4MjAsMHhlNCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDAsMHg4MywweDAwIH0gfSwKK3sgIDE2LCAweDk4MDAsIDAsIHsweDIwLDB4YzAsMHgwOCwweDE4LDB4MDIsMHgwYywweDAwLDB4OTEsMHgwMSwweDJjLDB4YzAsMHgwOCwweDMwLDB4MDYsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweDk4MTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDAxLDB4MWMsMHhjOCwweGIzLDB4MjEsMHgyMSwweGMyIH0gfSwKK3sgIDE2LCAweDk4MjAsIDAsIHsweDJhLDB4NzAsMHgwMiwweGRjLDB4MDAsMHhiNywweGEwLDB4MjksMHhjMCwweDBiLDB4NzIsMHgwMiwweGNlLDB4MDAsMHhhNywweDgxIH0gfSwKK3sgIDE2LCAweDk4MzAsIDAsIHsweDI5LDB4YzAsMHg0YSwweDc0LDB4MDIsMHhmZSwweDAwLDB4OTcsMHgwMSwweDJjLDB4YzAsMHgwYSwweDcwLDB4MTIsMHhlOCwweDAwIH0gfSwKK3sgIDE2LCAweDk4NDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHg4MCwweGY3LDB4YzAsMHgzMSwweGUwIH0gfSwKK3sgIDE2LCAweDk4NTAsIDAsIHsweDBjLDB4NDgsMHgwMywweGRlLDB4MTEsMHhmNywweDgwLDB4MjEsMHhlMCwweDBiLDB4N2EsMHgwMywweGRlLDB4MDAsMHhjMywweDgwIH0gfSwKK3sgIDE2LCAweDk4NjAsIDAsIHsweDMzLDB4ZDgsMHg2YywweDc4LDB4MDMsMHgzZSwweDAwLDB4ZDYsMHg4MCwweDNkLDB4ZTAsMHgwYywweDc4LDB4MDMsMHhlYSwweDAyIH0gfSwKK3sgIDE2LCAweDk4NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDBkLDB4YWMsMHgwOCwweGZiLDB4ODAsMHgzZSwweGMwIH0gfSwKK3sgIDE2LCAweDk4ODAsIDAsIHsweDBmLDB4ZDAsMHgwMywweGVjLDB4MDQsMHhmYiwweDNjLDB4M2UsMHhjMCwweDBmLDB4YjYsMHgwNywweDZjLDB4MDEsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweDk4OTAsIDAsIHsweDNlLDB4ZDAsMHgwZiwweDk0LDB4MDcsMHhlYywweDAxLDB4ZWEsMHgwMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhjMiwweDA2IH0gfSwKK3sgIDE2LCAweDk4YTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4ZmUsMHgwMCwweGNmLDB4YTQsMHgzYiwweDYwIH0gfSwKK3sgIDE2LCAweDk4YjAsIDAsIHsweDA4LDB4ZDksMHgwMywweDdlLDB4MDAsMHhjZiwweDgwLDB4M2YsMHgyNSwweDRmLDB4ZmMsMHg4NywweGJlLDB4MDAsMHhjZiwweDgwIH0gfSwKK3sgIDE2LCAweDk4YzAsIDAsIHsweDdmLDB4ZmMsMHgwYywweGZjLDB4MDMsMHg3YywweDAwLDB4ZjYsMHg5MCwweDMzLDB4ZTAsMHgwZiwweGY4LDB4MDMsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweDk4ZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4OWMsMHgwOCwweDhmLDB4MjgsMHgyMSwweDQwIH0gfSwKK3sgIDE2LCAweDk4ZTAsIDAsIHsweDA4LDB4ZDAsMHgwMiwweDFjLDB4NDAsMHhhNywweDIwLDB4MzEsMHgwNCwweDFiLDB4NzgsMHgwMiwweGRjLDB4ODAsMHhkNywweDAwIH0gfSwKK3sgIDE2LCAweDk4ZjAsIDAsIHsweDJmLDB4YzQsMHgxYSwweGQwLDB4MDIsMHgxZSwweDQ4LDB4YjYsMHgwMCwweDYxLDB4YzAsMHgwYiwweDcwLDB4MDYsMHhlYSwweDA0IH0gfSwKK3sgIDE2LCAweDk5MDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OGMsMHgwMCwweDg3LDB4MzAsMHg2OSwweDQ0IH0gfSwKK3sgIDE2LCAweDk5MTAsIDAsIHsweDA4LDB4NTAsMHgyMiwweDBjLDB4MDAsMHg4NywweDAxLDB4MmQsMHg0NCwweDhiLDB4NzAsMHgwNiwweDhjLDB4MTAsMHg4NywweDAwIH0gfSwKK3sgIDE2LCAweDk5MjAsIDAsIHsweDI5LDB4YzksMHgwOCwweDUwLDB4MDIsMHgxYywweDQ0LDB4YTYsMHgwMCwweDYxLDB4YzAsMHgwYiwweDcwLDB4MDIsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweDk5MzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDE0LDB4Y2QsMHgwMCwweDgzLDB4ODgsMHg2MCwweDQwIH0gfSwKK3sgIDE2LCAweDk5NDAsIDAsIHsweDAwLDB4MTAsMHgwMiwweDRjLDB4MDAsMHgyYiwweDAwLDB4MmMsMHg0MSwweDFiLDB4MzAsMHgwMiwweGNjLDB4MDAsMHg5MywweDAwIH0gfSwKK3sgIDE2LCAweDk5NTAsIDAsIHsweDJjLDB4YzAsMHgwYSwweDMwLDB4NDIsMHgwYywweDAwLDB4YjIsMHg0MCwweDIwLDB4ZjEsMHgwYiwweDMwLDB4MDIsMHhjOCwweDA0IH0gfSwKK3sgIDE2LCAweDk5NjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmQsMHg0MSwweGNmLDB4YzAsMHhiYSwweGYwIH0gfSwKK3sgIDE2LCAweDk5NzAsIDAsIHsweDI4LDB4OTAsMHgxYiwweDZjLDB4MDgsMHhjZiwweDAwLDB4MmMsMHhjMCwweDBmLDB4ZjAsMHgwMywweGFjLDB4MDAsMHg4YiwweDAwIH0gfSwKK3sgIDE2LCAweDk5ODAsIDAsIHsweDNmLDB4YzAsMHg2YywweGIwLDB4NGIsMHgyYywweDAxLDB4ZmIsMHg0MCwweDIyLDB4YzgsMHgwZiwweGIwLDB4MDMsMHhlYSwweDA0IH0gfSwKK3sgIDE2LCAweDk5OTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4ZWMsMHgwNCwweGZiLDB4MDQsMHgzZiwweGQ0IH0gfSwKK3sgIDE2LCAweDk5YTAsIDAsIHsweDBmLDB4MTAsMHgwMywweGFjLDB4MDAsMHhmYiwweDAwLDB4MzIsMHhjMCwweDVmLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmYiwweDA0IH0gfSwKK3sgIDE2LCAweDk5YjAsIDAsIHsweDNlLDB4YzAsMHg0ZiwweDEwLDB4MTMsMHhlYywweDAwLDB4ZmIsMHg4OCwweDNlLDB4YzAsMHg0ZiwweGIwLDB4MDMsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweDk5YzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZGMsMHgwMCwweGM3LDB4MDAsMHgzMywweDYyIH0gfSwKK3sgIDE2LCAweDk5ZDAsIDAsIHsweDBjLDB4YzAsMHgwYiwweDNjLDB4MDAsMHhlZiwweDAwLDB4MzMsMHhlMCwweDFjLDB4ZjAsMHgxMywweDNjLDB4MDgsMHhmNywweDAwIH0gfSwKK3sgIDE2LCAweDk5ZTAsIDAsIHsweDMxLDB4YzAsMHgwZSwweGQ4LDB4MDMsMHhiYywweDAwLDB4ZmUsMHgwMCwweDNkLDB4YzYsMHgwYywweGYwLDB4MDMsMHhjMCwweDQ0IH0gfSwKK3sgIDE2LCAweDk5ZjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MSwweDA0LDB4NmMsMHgwMCwweGNiLDB4MDMsMHgyMiwweDQ3IH0gfSwKK3sgIDE2LCAweDlhMDAsIDAsIHsweDA4LDB4OTgsMHg0MiwweDJjLDB4MDAsMHg5YiwweDAwLDB4MmEsMHhjMCwweDBhLDB4YjAsMHgwMiwweDJjLDB4MDAsMHhiYiwweDA0IH0gfSwKK3sgIDE2LCAweDlhMTAsIDAsIHsweDJhLDB4YzAsMHgwYSwweGIwLDB4MDIsMHhhYywweDA4LDB4ZmEsMHgwMCwweDJlLDB4NjAsMHgwOCwweGIwLDB4MDIsMHhlMCwweDQwIH0gfSwKK3sgIDE2LCAweDlhMjAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweDliLDB4MDAsMHgyMCwweDQwIH0gfSwKK3sgIDE2LCAweDlhMzAsIDAsIHsweDA4LDB4OTgsMHgwMiwweDJjLDB4MDAsMHhiYiwweDAwLDB4MjIsMHg4OCwweDA4LDB4MzAsMHgwMiwweDJjLDB4MDAsMHhiYiwweDAwIH0gfSwKK3sgIDE2LCAweDlhNDAsIDAsIHsweDIyLDB4YzAsMHg4YSwweDkyLDB4MDIsMHhhYywweDAwLDB4YWEsMHg4MCwweDJlLDB4YzAsMHgwOCwweGIwLDB4MDYsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweDlhNTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MGMsMHgwMCwweDgzLDB4MDAsMHhhMCwweDQwIH0gfSwKK3sgIDE2LCAweDlhNjAsIDAsIHsweDA4LDB4MTAsMHgwMiwweDBjLDB4MDAsMHhiMywweDAwLDB4MjgsMHg4MCwweDBhLDB4MzIsMHgxMiwweDBjLDB4MDAsMHhiMywweDA0IH0gfSwKK3sgIDE2LCAweDlhNzAsIDAsIHsweDI4LDB4YzAsMHgwYSwweDMwLDB4MjIsMHg4YywweDIwLDB4YjIsMHgwMCwweDJjLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhjMiwweDAxIH0gfSwKK3sgIDE2LCAweDlhODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMiwweGNiLDB4MDAsMHgzMCwweDQwIH0gfSwKK3sgIDE2LCAweDlhOTAsIDAsIHsweDFjLDB4OTQsMHgwMywweDJjLDB4MDAsMHhlZiwweDAwLDB4MzIsMHhjMCwweDg4LDB4ZjAsMHg4YiwweDJjLDB4MDAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweDlhYTAsIDAsIHsweDMzLDB4YzAsMHhhZSwweGYwLDB4MDMsMHhhYywweDgwLDB4ZWEsMHgwMSwweDNlLDB4YzAsMHgyYywweGIwLDB4MDMsMHhjMCwweDAzIH0gfSwKK3sgIDE2LCAweDlhYjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDFkLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHgyZiwweDQwIH0gfSwKK3sgIDE2LCAweDlhYzAsIDAsIHsweDA3LDB4ZDIsMHg4MywweGZjLDB4MDAsMHhkZiwweDA0LDB4M2YsMHhjMCwweDBmLDB4YjAsMHgwMywweGZjLDB4MDAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweDlhZDAsIDAsIHsweDNmLDB4YzAsMHgwZiwweGQwLDB4MGIsMHhlYywweDAwLDB4ZWUsMHgwMCwweDNmLDB4NDAsMHgwZiwweGYwLDB4MDMsMHhlOCwweDA2IH0gfSwKK3sgIDE2LCAweDlhZTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZjUsMHgwMCwweGNmLDB4MDgsMHgzZiwweDQ4IH0gfSwKK3sgIDE2LCAweDlhZjAsIDAsIHsweDBmLDB4YzMsMHg5MywweDcwLDB4ZDAsMHhkYywweDMwLDB4M2YsMHhkOCwweDBjLDB4YjIsMHgwMywweDNjLDB4YzAsMHhmZiwweDQwIH0gfSwKK3sgIDE2LCAweDliMDAsIDAsIHsweDMzLDB4YzQsMHgyYywweGYxLDB4MDMsMHg2MiwweDUwLDB4ZmMsMHgzNCwweDMzLDB4MDAsMHgwZiwweDVjLDB4MDMsMHhmMCwweDAwIH0gfSwKK3sgIDE2LCAweDliMTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4YzQsMHg4MCwweDhiLDB4MDAsMHgyZiwweDVhIH0gfSwKK3sgIDE2LCAweDliMjAsIDAsIHsweDBiLDB4YTYsMHgxMiwweDIxLDB4YzAsMHg4OSwweDcwLDB4MmYsMHhkYywweDA4LDB4ZjIsMHhjMiwweDNkLDB4ZDAsMHhiZiwweDQwIH0gfSwKK3sgIDE2LCAweDliMzAsIDAsIHsweDM3LDB4ZGMsMHg4OCwweGY1LDB4MGEsMHgyMCwweDgwLDB4ZTgsMHgxMCwweDJhLDB4MTYsMHgwYiwweDkwLDB4MDIsMHhlMCwweDA0IH0gfSwKK3sgIDE2LCAweDliNDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzAsMHgwMCwweDgzLDB4MDgsMHgyYywweDQ0IH0gfSwKK3sgIDE2LCAweDliNTAsIDAsIHsweDBiLDB4MDIsMHgwMiwweDBjLDB4MDAsMHg4MCwweDAwLDB4MmMsMHhjOCwweDA4LDB4MzMsMHg0MiwweDhjLDB4OTAsMHhiMywweDMwIH0gfSwKK3sgIDE2LCAweDliNjAsIDAsIHsweDI4LDB4YzgsMHg0YSwweDMyLDB4MTIsMHg4MCwweDBjLDB4YjAsMHhhMCwweDI4LDB4MjgsMHgwYiwweDEyLDB4MDIsMHhlMiwweDAxIH0gfSwKK3sgIDE2LCAweDliNzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDE1LDB4YTIsMHgwMCwweDhiLDB4MDAsMHgyZSwweDQ4IH0gfSwKK3sgIDE2LCAweDliODAsIDAsIHsweDBiLDB4YTAsMHgyMiwweDIwLDB4MjAsMHg4OCwweDgwLDB4MmUsMHhjMCwweDI4LDB4YjAsMHgwYSwweGFjLDB4MDAsMHhiYiwweDAwIH0gfSwKK3sgIDE2LCAweDliOTAsIDAsIHsweDJlLDB4YzAsMHgwYSwweGIwLDB4MDIsMHhhMCwweDAwLDB4YWIsMHg4MiwweDJhLDB4YTAsMHgwYiwweGIyLDB4MDIsMHhmMCwweDA0IH0gfSwKK3sgIDE2LCAweDliYTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZTcsMHgwMCwweGNiLDB4MDAsMHgzZSwweGMwIH0gfSwKK3sgIDE2LCAweDliYjAsIDAsIHsweGNmLDB4OWMsMHgwYiwweDIxLDB4MDAsMHhkOCwweDg4LDB4M2UsMHhjMCwweDBjLDB4YjAsMHgwMywweGFjLDB4MDAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweDliYzAsIDAsIHsweDNhLDB4YzAsMHgwZSwweGIwLDB4NDMsMHhlOCwweDQwLDB4ZjgsMHg4MCwweDNhLDB4NjAsMHgwZiwweDk4LDB4MDMsMHhkMCwweDA0IH0gfSwKK3sgIDE2LCAweDliZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4YjQsMHgwMCwweGZmLDB4MDAsMHgwZiwweGUwIH0gfSwKK3sgIDE2LCAweDliZTAsIDAsIHsweDA3LDB4YTEsMHgwMywweGU4LDB4MDIsMHhmYiwweDAwLDB4M2YsMHhjMCwweDBmLDB4NzAsMHgyMywweDdjLDB4MDAsMHhmZiwweDAyIH0gfSwKK3sgIDE2LCAweDliZjAsIDAsIHsweDM1LDB4YzAsMHg0ZCwweGIwLDB4MDMsMHg3NCwweDIwLDB4ZmMsMHgwMSwweDNmLDB4MDAsMHgwZiwweGY4LDB4MDMsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweDljMDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YTUsMHgwMCwweGNiLDB4MDAsMHhiYSwweDQwIH0gfSwKK3sgIDE2LCAweDljMTAsIDAsIHsweDBjLDB4MTQsMHgwYiwweDJmLDB4MjIsMHhjOSwweDQwLDB4MzIsMHhjMCwweDhlLDB4YjAsMHgwMywweGFjLDB4MDAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweDljMjAsIDAsIHsweDNlLDB4YzAsMHgwZSwweGIwLDB4MDMsMHhlNCwweDAwLDB4YzksMHgwMCwweDMyLDB4MDAsMHgyYywweDkwLDB4MDMsMHgxMCwweDA0IH0gfSwKK3sgIDE2LCAweDljMzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDAxLDB4MjQsMHgwMCwweDhmLDB4MDAsMHgyMiwweDQwIH0gfSwKK3sgIDE2LCAweDljNDAsIDAsIHsweDJjLDB4YTUsMHg0MiwweDI5LDB4MDAsMHg4YiwweDA0LDB4YTMsMHhjMSwweDBkLDB4ZjAsMHgwYSwweDNjLDB4MDAsMHhiZiwweDAwIH0gfSwKK3sgIDE2LCAweDljNTAsIDAsIHsweDNmLDB4YzAsMHgwOCwweGYwLDB4MDEsMHg2OSwweDAwLDB4ZGEsMHgwNSwweDIyLDB4ZDAsMHgwOCwweDk0LDB4MDMsMHg3MiwweDAwIH0gfSwKK3sgIDE2LCAweDljNjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NjAsMHg0MCwweDgzLDB4MDEsMHgyMCwweGMwIH0gfSwKK3sgIDE2LCAweDljNzAsIDAsIHsweDA5LDB4MDAsMHgwMiwweDIwLDB4MDAsMHg4MiwweDYwLDB4MjIsMHhjMCwweDA4LDB4MzAsMHg0MiwweDRjLDB4MTAsMHhiYiwweDAyIH0gfSwKK3sgIDE2LCAweDljODAsIDAsIHsweDJjLDB4YzAsMHgwOCwweGIwLDB4MTIsMHgwNSwweDAwLDB4OWIsMHgwMCwweDIwLDB4ODIsMHgwOSwweDMyLDB4MDIsMHgzOCwweDAwIH0gfSwKK3sgIDE2LCAweDljOTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAxLDB4MTYsMHg5MCwweDg3LDB4ODAsMHgyMCwweGUwIH0gfSwKK3sgIDE2LCAweDljYTAsIDAsIHsweDA4LDB4NTgsMHgwMiwweDE2LDB4MTQsMHg4NCwweDgxLDB4MjEsMHhlMCwweDI5LDB4MzksMHgwMiwweDVlLDB4MDAsMHhiNywweDgwIH0gfSwKK3sgIDE2LCAweDljYjAsIDAsIHsweDI4LDB4ZTAsMHgwOCwweDc4LDB4MDIsMHg3YSwweDgwLDB4OTYsMHg4MSwweDIxLDB4ZTAsMHgwOSwweGY4LDB4MDIsMHg0OCwweDAwIH0gfSwKK3sgIDE2LCAweDljYzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MDgsMHgwOSwweDhiLDB4MTAsMHgzOCwweDQ0IH0gfSwKK3sgIDE2LCAweDljZDAsIDAsIHsweDRkLDB4MjUsMHgxMiwweDBjLDB4MDAsMHhjMiwweDEwLDB4MjIsMHhjOCwweDBhLDB4MzgsMHgwMywweGNjLDB4MDAsMHhmMywweDEwIH0gfSwKK3sgIDE2LCAweDljZTAsIDAsIHsweDJjLDB4YzAsMHgwYywweDMwLDB4MDMsMHg4YSwweGMwLDB4ZDksMHgxMCwweDMyLDB4NDAsMHgyZCwweDEwLDB4MDMsMHgxMiwweDAyIH0gfSwKK3sgIDE2LCAweDljZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDFkLDB4YmMsMHg4MCwweGZmLDB4MDAsMHgzZiwweDQwIH0gfSwKK3sgIDE2LCAweDlkMDAsIDAsIHsweDBmLDB4ZjAsMHgwMywweGY0LDB4NDAsMHhlZCwweDAwLDB4M2YsMHhjMCwweDBlLDB4ZjMsMHgwMywweGJjLDB4MDQsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweDlkMTAsIDAsIHsweDNmLDB4YzIsMHgwZiwweGYwLDB4MGIsMHhkNCwweDAwLDB4ZmYsMHgxMCwweGJmLDB4ODAsMHgwZSwweGYwLDB4MDMsMHhkMCwweDA2IH0gfSwKK3sgIDE2LCAweDlkMjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZmEsMHgwMCwweGNiLDB4MDIsMHgzZSwweGMwIH0gfSwKK3sgIDE2LCAweDlkMzAsIDAsIHsweDBmLDB4OTAsMHgwMywweGEwLDB4MDAsMHhjYiwweDAwLDB4M2EsMHhjYSwweDBjLDB4YjMsMHgxMywweGFmLDB4MjQsMHhjYiwweDQ4IH0gfSwKK3sgIDE2LCAweDlkNDAsIDAsIHsweDFlLDB4YzgsMHgwZiwweGI2LDB4MDMsMHgyYywweDAwLDB4ZmEsMHgwMCwweDNlLDB4YzAsMHgwZiwweDkwLDB4MDMsMHhlYSwweDAwIH0gfSwKK3sgIDE2LCAweDlkNTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDExLDB4OWMsMHgwOCwweDg3LDB4MjAsMHgyZCwweGM0IH0gfSwKK3sgIDE2LCAweDlkNjAsIDAsIHsweDBiLDB4NTAsMHgxMiwweGRjLDB4MDQsMHg4NywweDAwLDB4MmMsMHhjMCwweDA4LDB4NzAsMHhhMiwweDFkLDB4MDAsMHhhNywweDQwIH0gfSwKK3sgIDE2LCAweDlkNzAsIDAsIHsweDI1LDB4Y2IsMHg4YiwweDc0LDB4ODIsMHgxYywweDAwLDB4YjcsMHgwMCwweDJkLDB4YzEsMHgwYiwweDcwLDB4MDIsMHhkMiwweDA0IH0gfSwKK3sgIDE2LCAweDlkODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWEsMHgwMSwweDg3LDB4OTAsMHgyZCwweGUwIH0gfSwKK3sgIDE2LCAweDlkOTAsIDAsIHsweDBiLDB4NzgsMHgwMiwweGNlLDB4MDAsMHg4NiwweDgwLDB4MmQsMHhlNCwweDI5LDB4N2EsMHgwMiwweDllLDB4ODAsMHg4NywweGEwIH0gfSwKK3sgIDE2LCAweDlkYTAsIDAsIHsweDZkLDB4ZTgsMHgwYiwweDc4LDB4MDIsMHgxZSwweDAwLDB4YjUsMHg4MCwweDJkLDB4NjAsMHgwYiwweDc4LDB4MDIsMHhmMCwweDAwIH0gfSwKK3sgIDE2LCAweDlkYjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE0LDB4Y2QsMHgwMCwweDgzLDB4MDIsMHgyYywweGUwIH0gfSwKK3sgIDE2LCAweDlkYzAsIDAsIHsweDBiLDB4MzAsMHgwMiwweGNjLDB4MDAsMHg4MywweGUwLDB4MmMsMHhjMCwweDA4LDB4MzAsMHgwMiwweDBjLDB4MDAsMHhhMywweDAwIH0gfSwKK3sgIDE2LCAweDlkZDAsIDAsIHsweDI0LDB4YzAsMHgwYiwweGIwLDB4MDIsMHgwZSwweDIwLDB4YjMsMHgwOCwweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhkMiwweDA0IH0gfSwKK3sgIDE2LCAweDlkZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YjgsMHg4MiwweGNhLDB4MDAsMHgzZSwweGE4IH0gfSwKK3sgIDE2LCAweDlkZjAsIDAsIHsweDBmLDB4ZTAsMHgwMywweGY4LDB4MDIsMHg4ZSwweDgwLDB4M2UsMHg4MCwweDBkLDB4YTAsMHg1YiwweGE4LDB4MDAsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweDllMDAsIDAsIHsweDNlLDB4ODAsMHgwZiwweGEwLDB4MDMsMHgzYiwweDgwLDB4ZmUsMHg0MiwweDJmLDB4ODAsMHgwZiwweGE4LDB4MDMsMHhmYSwweDA0IH0gfSwKK3sgIDE2LCAweDllMTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4ZTAsMHgyMCwweGY4LDB4MDAsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweDllMjAsIDAsIHsweDBmLDB4MDYsMHgwMywweGMwLDB4MDAsMHhmOCwweDExLDB4M2UsMHgwMCwweDBmLDB4MDAsMHgwMywweGUwLDB4MDAsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweDllMzAsIDAsIHsweDM2LDB4MDAsMHgwZiwweDgwLDB4MGIsMHhlMCwweDAwLDB4ZjgsMHgwNCwweDNlLDB4MjAsMHgwZiwweDgxLDB4MDMsMHhkMiwweDAwIH0gfSwKK3sgIDE2LCAweDllNDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweDllNTAsIDAsIHsweDBjLDB4OWEsMHgwMywweDI0LDB4NDAsMHhjOSwweGMwLDB4M2UsMHg0MCwweDRjLDB4OTAsMHgwMywweDI0LDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweDllNjAsIDAsIHsweDM2LDB4NDAsMHgwNywweDkwLDB4MDMsMHgyNCwweDAwLDB4YzksMHgwNCwweDMyLDB4NjAsMHgwZiwweDkwLDB4MDMsMHhjMiwweDA0IH0gfSwKK3sgIDE2LCAweDllNzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NjQsMHgwMCwweGI5LDB4MDIsMHgyZSwweDQwIH0gfSwKK3sgIDE2LCAweDllODAsIDAsIHsweDBhLDB4OTIsMHgwMiwweDI1LDB4MDIsMHg4OSwweGUwLDB4MmUsMHg0MCwweDk4LDB4OTAsMHgwMiwweDI0LDB4MDAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweDllOTAsIDAsIHsweDIyLDB4NDAsMHgwOSwweDkwLDB4MDIsMHgwNCwweDAwLDB4ZDksMHgwMCwweDIyLDB4NDQsMHgwYiwweDljLDB4MDIsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweDllYTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MmMsMHgwMCwweGI5LDB4MDAsMHgyYywweDQwIH0gfSwKK3sgIDE2LCAweDllYjAsIDAsIHsweDA4LDB4OTAsMHgwMiwweDI0LDB4MjgsMHg4OSwweDAwLDB4MmMsMHg0MCwweDY4LDB4OTAsMHg0MiwweDI0LDB4MGMsMHhiMSwweDA0IH0gfSwKK3sgIDE2LCAweDllYzAsIDAsIHsweDI2LDB4NDAsMHgwYiwweDkwLDB4MGEsMHgyYywweDgwLDB4ODEsMHgwMCwweDIyLDB4NDAsMHhjYiwweDkyLDB4ODIsMHhjNiwweDAwIH0gfSwKK3sgIDE2LCAweDllZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDQsMHgwMCwweGIxLDB4MjAsMHgyYywweDQ4IH0gfSwKK3sgIDE2LCAweDllZTAsIDAsIHsweDBhLDB4MTIsMHgwMiwweDA0LDB4ODAsMHg4MSwweDIxLDB4MmMsMHg0YywweDA4LDB4MTEsMHgwMiwweDA0LDB4MDgsMHhiMSwweDEwIH0gfSwKK3sgIDE2LCAweDllZjAsIDAsIHsweDIwLDB4NGMsMHgwOSwweDEyLDB4MDIsMHgyNCwweDAxLDB4OTEsMHgyMCwweGEwLDB4NDgsMHgwYiwweDEwLDB4MDIsMHhjMiwweDAxIH0gfSwKK3sgIDE2LCAweDlmMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NDEsMHhlMCwweGY4LDB4NTAsMHgzZSwweDE0IH0gfSwKK3sgIDE2LCAweDlmMTAsIDAsIHsweDBjLDB4ODUsMHgwMywweDIxLDB4NDAsMHhjOCwweDUwLDB4M2UsMHgxMCwweDA4LDB4MDYsMHg4MywweDAxLDB4ZjAsMHhmOCwweDY4IH0gfSwKK3sgIDE2LCAweDlmMjAsIDAsIHsweDM2LDB4MTAsMHgwZiwweDA1LDB4MDMsMHgyOSwweDQwLDB4YzgsMHg1MCwweDMyLDB4OTQsMHgwZiwweDg1LDB4MDMsMHhlZSwweDAzIH0gfSwKK3sgIDE2LCAweDlmMzAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDFkLDB4ZjQsMHgwMCwweGY5LDB4MTAsMHgzZiwweDQ0IH0gfSwKK3sgIDE2LCAweDlmNDAsIDAsIHsweDBmLDB4ZDEsMHgwYiwweGY0LDB4NDAsMHhmZCwweDEyLDB4MmUsMHg0YywweDAzLDB4OTIsMHgwYiwweGU0LDB4MDAsMHhmOSwweDIwIH0gfSwKK3sgIDE2LCAweDlmNTAsIDAsIHsweDNlLDB4NGMsMHgwZiwweDkxLDB4MDMsMHhmYywweDAwLDB4ZmQsMHgxMCwweDNmLDB4NDQsMHgwZiwweGQwLDB4MDMsMHhlNiwweDA2IH0gfSwKK3sgIDE2LCAweDlmNjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZjYsMHgyMCwweGM5LDB4MDEsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweDlmNzAsIDAsIHsweDBmLDB4ZDAsMHgwMywweDNjLDB4MDAsMHhiZCwweDAwLDB4MzIsMHg2MywweDBjLDB4OWUsMHg0MywweDI3LDB4MDAsMHhlOSwweGMwIH0gfSwKK3sgIDE2LCAweDlmODAsIDAsIHsweDNlLDB4NjgsMHgwYywweDk4LDB4MDMsMHgzNCwweDAwLDB4ZjksMHgxMCwweDNmLDB4NDAsMHgwZiwweGQwLDB4MDMsMHhjNiwweDAwIH0gfSwKK3sgIDE2LCAweDlmOTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDEwLDB4YzIsMHgyMCwweGQ4LDB4MDAsMHgyZSwweDAwIH0gfSwKK3sgIDE2LCAweDlmYTAsIDAsIHsweDBiLDB4ODAsMHg1MiwweDI4LDB4MDQsMHhiOCwweDAwLDB4MjIsMHgzOCwweDA4LDB4ODgsMHgwMywweDYyLDB4MDAsMHg4OCwweGYwIH0gfSwKK3sgIDE2LCAweDlmYjAsIDAsIHsweDJlLDB4M2EsMHg0OCwweDhmLDB4MGEsMHgyMCwweDAwLDB4YjAsMHg4MCwweDJlLDB4MDAsMHgwYiwweDgwLDB4MDIsMHhjZSwweDA0IH0gfSwKK3sgIDE2LCAweDlmYzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHg4MCwweDgxLDB4MDAsMHgyYywweDQwIH0gfSwKK3sgIDE2LCAweDlmZDAsIDAsIHsweDBiLDB4MTAsMHgwMiwweDA0LDB4MDAsMHhiMSwweDAwLDB4MjAsMHg0MiwweDQ4LDB4MTQsMHg0MiwweDA1LDB4ODAsMHhhMSwweDIwIH0gfSwKK3sgIDE2LCAweDlmZTAsIDAsIHsweDJjLDB4NDQsMHgwOCwweDEwLDB4ODIsMHgwNCwweDAwLDB4YjEsMHgyMCwweDJjLDB4NDAsMHgwYiwweDEwLDB4MDIsMHhjMiwweDAxIH0gfSwKK3sgIDE2LCAweDlmZjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4YTUsMHgwMSwweDk5LDB4MDAsMHgyZSwweDQwIH0gfSwKK3sgIDE2LCAweGEwMDAsIDAsIHsweDBiLDB4OTAsMHgwMiwweDI0LDB4NDAsMHhiYiwweDAxLDB4MjIsMHg0MSwweDA4LDB4OTAsMHgxMiwweDI0LDB4MDAsMHhhOSwweDAwIH0gfSwKK3sgIDE2LCAweGEwMTAsIDAsIHsweDJjLDB4NDAsMHgwOCwweDEwLDB4NDAsMHgyNCwweDA4LDB4YjksMHg0MCwweDZlLDB4NTAsMHgwYiwweDkyLDB4MDIsMHhjNiwweDA0IH0gfSwKK3sgIDE2LCAweGEwMjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTcsMHgxNCwweGM5LDB4MDUsMHgzZSwweDQxIH0gfSwKK3sgIDE2LCAweGEwMzAsIDAsIHsweDBmLDB4OTAsMHgwYiwweDI0LDB4MDQsMHhmOSwweDA4LDB4YjIsMHg0MCwweDJjLDB4OTAsMHgwYSwweDI0LDB4MDAsMHhlOSwweDAwIH0gfSwKK3sgIDE2LCAweGEwNDAsIDAsIHsweDNlLDB4NDAsMHgyYywweDkwLDB4MDMsMHgyNywweDAwLDB4ZjksMHg4MCwweDNlLDB4NjAsMHgwZiwweDkwLDB4MDMsMHhlOCwweDA0IH0gfSwKK3sgIDE2LCAweGEwNTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAxLDB4ODQsMHg4OCwweGY5LDB4MDAsMHgzZSwweDQ4IH0gfSwKK3sgIDE2LCAweGEwNjAsIDAsIHsweDBmLDB4OTksMHgwMywweGU2LDB4MDAsMHhmOSwweDAyLDB4M2MsMHg0MCwweGFmLDB4MTAsMHgwMywweGU0LDB4MTIsMHhkOSwweDA0IH0gfSwKK3sgIDE2LCAweGEwNzAsIDAsIHsweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNSwweDAwLDB4ZjksMHhjMCwweDNlLDB4NjQsMHgwZiwweDkwLDB4ODMsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGEwODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTEsMHgwMCwweGM4LDB4MDAsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGEwOTAsIDAsIHsweDBmLDB4ODAsMHgwMywweDIxLDB4MDAsMHhjOCwweDQwLDB4YjIsMHgwMCwweDBjLDB4ODAsMHgwMywweDIwLDB4MTAsMHhjOCwweDAwIH0gfSwKK3sgIDE2LCAweGEwYTAsIDAsIHsweDMyLDB4MDAsMHgwYywweDgwLDB4MDMsMHhlMCwweDgwLDB4ZjgsMHgwNCwweDMyLDB4MDAsMHgyYywweDgwLDB4MGIsMHgwYSwweDA0IH0gfSwKK3sgIDE2LCAweGEwYjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4MjgsMHgwMCwweGNhLDB4MDAsMHgyZSwweDgwIH0gfSwKK3sgIDE2LCAweGEwYzAsIDAsIHsweDBiLDB4ZTgsMHgwYSwweDM4LDB4MTAsMHg4ZSwweGMwLDB4MjIsMHg4MCwweDBkLDB4YTAsMHgwMiwweDI4LDB4MDAsMHgwYSwweDA0IH0gfSwKK3sgIDE2LCAweGEwZDAsIDAsIHsweDAyLDB4ODAsMHgyOCwweGEwLDB4MDIsMHhmYiwweDAwLDB4YmEsMHgwMCwweDM3LDB4YjAsMHg0OCwweGVhLDB4MDIsMHgwYSwweDAwIH0gfSwKK3sgIDE2LCAweGEwZTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweDkzLDB4MDEsMHgyYywweGMwIH0gfSwKK3sgIDE2LCAweGEwZjAsIDAsIHsweDhiLDB4YjAsMHg0MiwweDBjLDB4OTAsMHg5YiwweDIwLDB4MjAsMHhjMCwweDQ4LDB4MzAsMHg0MiwweDJjLDB4MDAsMHg4MywweDAwIH0gfSwKK3sgIDE2LCAweGExMDAsIDAsIHsweDIwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhjZCwweDQwLDB4YjMsMHgwMCwweDI0LDB4YzgsMHgwOCwweDM4LDB4MDIsMHgwYSwweDAwIH0gfSwKK3sgIDE2LCAweGExMTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDAxLDB4MTQsMHgwMCwweDg3LDB4MDAsMHgyZCwweGMwIH0gfSwKK3sgIDE2LCAweGExMjAsIDAsIHsweDBiLDB4MjQsMHgwNiwweDE2LDB4MDAsMHg5MywweDA4LDB4MjEsMHhjOCwweDA5LDB4MzEsMHgwMiwweDBjLDB4ODAsMHg4NywweGEwIH0gfSwKK3sgIDE2LCAweGExMzAsIDAsIHsweDIxLDB4YzAsMHgxOCwweDcyLDB4MDIsMHhkYywweDAwLDB4YjcsMHhiNCwweDI0LDB4ZTMsMHgwOCwweDc4LDB4MDIsMHgyOCwweDAwIH0gfSwKK3sgIDE2LCAweGExNDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgwMiwweDk3LDB4YTAsMHgzZCwweGYwIH0gfSwKK3sgIDE2LCAweGExNTAsIDAsIHsweDBmLDB4NDgsMHgwMywweDNlLDB4MDAsMHhkNiwweDgwLDB4MzAsMHhlMCwweDJjLDB4N2EsMHgwMiwweDFlLDB4ODIsMHhjMywweGYwIH0gfSwKK3sgIDE2LCAweGExNjAsIDAsIHsweDMzLDB4ZWMsMHgwYywweDdjLDB4MDMsMHhkNiwweDAwLDB4ZjcsMHg4MCwweDM1LDB4ZTAsMHgwYywweGQ4LDB4MDMsMHgyYSwweDAyIH0gfSwKK3sgIDE2LCAweGExNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDE5LDB4YTUsMHhhMCwweGZiLDB4MDAsMHgzZSwweGNhIH0gfSwKK3sgIDE2LCAweGExODAsIDAsIHsweDBmLDB4ODAsMHgwMywweGVjLDB4MDIsMHhlYSwweDAwLDB4M2UsMHhjNiwweDBmLDB4YjQsMHgwYiwweGVkLDB4NDAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweGExOTAsIDAsIHsweGJlLDB4YzAsMHgwZiwweGI2LDB4NDMsMHhlMCwweDAwLDB4ZmIsMHgwMiwweDNlLDB4ODAsMHgwZiwweDkwLDB4MDMsMHhjMiwweDA2IH0gfSwKK3sgIDE2LCAweGExYTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHgwMiwweGNmLDB4ODgsMHgzZiwweGUwIH0gfSwKK3sgIDE2LCAweGExYjAsIDAsIHsweDBjLDB4YjksMHgwMywweGZlLDB4MDAsMHhkZCwweDgxLDB4MzMsMHhlMCwweDhjLDB4ZmMsMHgwMywweDNmLDB4MDQsMHhjZiwweDgwIH0gfSwKK3sgIDE2LCAweGExYzAsIDAsIHsweDMzLDB4ZTIsMHg0ZiwweGZjLDB4MDMsMHgzZSwweDAwLDB4Y2YsMHhjMCwweDMzLDB4NjQsMHgwYywweGY4LDB4MDMsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGExZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4OTQsMHg0MCwweDg3LDB4MDAsMHgyZiwweGMxIH0gfSwKK3sgIDE2LCAweGExZTAsIDAsIHsweDBkLDB4NjksMHhhMiwweGQwLDB4NDAsMHhiYywweDAwLDB4MjMsMHhjMCwweDA4LDB4ZjAsMHgwMiwweDljLDB4MDAsMHg4NywweDAwIH0gfSwKK3sgIDE2LCAweGExZjAsIDAsIHsweDIxLDB4YzAsMHgwYiwweDcwLDB4MGEsMHgzYywweDA0LDB4ODcsMHgxMCwweDIxLDB4NGMsMHgwOCwweDYwLDB4MDIsMHhlYSwweDA0IH0gfSwKK3sgIDE2LCAweGEyMDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWUsMHgwMCwweDg3LDB4MDAsMHgyZCwweGMwIH0gfSwKK3sgIDE2LCAweGEyMTAsIDAsIHsweDA5LDB4NjIsMHgwMiwweGQ4LDB4MDAsMHg5NywweDAwLDB4MjEsMHhjNCwweDA4LDB4NzAsMHgwMiwweDBjLDB4NDAsMHg5NywweDAwIH0gfSwKK3sgIDE2LCAweGEyMjAsIDAsIHsweDIxLDB4YzQsMHgwYiwweDMwLDB4MDIsMHg1OCwweDAwLDB4YTcsMHgwOCwweDIxLDB4ODAsMHgwOCwweDYwLDB4ODIsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGEyMzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDE0LDB4ZTQsMHgyNSwweDgzLDB4MDAsMHgyYywweGMwIH0gfSwKK3sgIDE2LCAweGEyNDAsIDAsIHsweDA5LDB4MjIsMHgwMiwweGNjLDB4MjAsMHhiMiwweDAwLDB4MjAsMHhjMCwweDI4LDB4YjAsMHgwMiwweDhjLDB4MDAsMHg5MywweDAwIH0gfSwKK3sgIDE2LCAweGEyNTAsIDAsIHsweDIwLDB4YzAsMHgwYiwweDMwLDB4NDIsMHg2YywweDIwLDB4ODMsMHgwOCwweDIwLDB4ZTIsMHgwOCwweGI4LDB4MDIsMHhjOCwweDA0IH0gfSwKK3sgIDE2LCAweGEyNjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YTQsMHgwMCwweGNmLDB4MDAsMHgzZiwweGMwIH0gfSwKK3sgIDE2LCAweGEyNzAsIDAsIHsweDBkLDB4OWMsMHgwMywweGU4LDB4MDAsMHhkYiwweDgwLDB4MzMsMHhjMCwweDBjLDB4ZjAsMHgwYiwweDNjLDB4MDYsMHhkZiwweDAwIH0gfSwKK3sgIDE2LCAweGEyODAsIDAsIHsweGIzLDB4YzAsMHgwYiwweGYwLDB4MDcsMHg2OCwweDAwLDB4ZWYsMHg0MCwweDMyLDB4YTgsMHgwYywweGE4LDB4MDMsMHhlYSwweDA0IH0gfSwKK3sgIDE2LCAweGEyOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4ZWMsMHgwMCwweGZiLDB4MDAsMHgyZSwweGMwIH0gfSwKK3sgIDE2LCAweGEyYTAsIDAsIHsweDBmLDB4OTQsMHgwMywweGM1LDB4NDAsMHhmYSwweDMwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweDZjLDB4MDAsMHhlYiwweDAwIH0gfSwKK3sgIDE2LCAweGEyYjAsIDAsIHsweDNlLDB4YzAsMHgwZiwweDMwLDB4MTMsMHhhZCwweDQwLDB4ZmIsMHgwMiwweDNlLDB4ZDAsMHgwZiwweGI0LDB4MDMsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGEyYzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZTQsMHgwMCwweGM3LDB4MDAsMHgzMSwweGMxIH0gfSwKK3sgIDE2LCAweGEyZDAsIDAsIHsweDhjLDB4ZDAsMHgwMywweDM0LDB4MDAsMHhjZCwweDAwLDB4M2QsMHhjMCwweDBjLDB4ZjAsMHgwMSwweDdjLDB4MDAsMHhkYiwweDAxIH0gfSwKK3sgIDE2LCAweGEyZTAsIDAsIHsweDNkLDB4YzAsMHg0YywweGYwLDB4MGIsMHgzMCwweDAyLDB4YzMsMHgwMCwweDMyLDB4MDAsMHgwZiwweGQwLDB4MDMsMHgwMCwweDQ0IH0gfSwKK3sgIDE2LCAweGEyZjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MSwweDA0LDB4NmUsMHg0MCwweDhiLDB4MDAsMHgyYSwweGMwIH0gfSwKK3sgIDE2LCAweGEzMDAsIDAsIHsweDI4LDB4ODQsMHg0MiwweDIyLDB4ODAsMHg4OCwweDgwLDB4M2EsMHhjMCwweDBkLDB4YjAsMHgwMiwweGFjLDB4MDgsMHg4YiwweDAwIH0gfSwKK3sgIDE2LCAweGEzMTAsIDAsIHsweDJlLDB4YzAsMHgwOCwweGIwLDB4MDIsMHgyMywweDIwLDB4OGIsMHgwMCwweDIyLDB4MzAsMHg4YiwweDhjLDB4MDIsMHgyMCwweDQwIH0gfSwKK3sgIDE2LCAweGEzMjAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MjQsMHgwMCwweDhiLDB4MDAsMHgyMiwweGMwIH0gfSwKK3sgIDE2LCAweGEzMzAsIDAsIHsweDA4LDB4MzgsMHg4NiwweDJhLDB4MDAsMHg4OSwweDgwLDB4MmEsMHhjMCwweDA4LDB4YjAsMHgwMiwweGNjLDB4MDAsMHg5YiwweDAwIH0gfSwKK3sgIDE2LCAweGEzNDAsIDAsIHsweDJlLDB4YzAsMHgwOCwweGIwLDB4NDIsMHgyNiwweDAwLDB4OGIsMHgwMCwweDIyLDB4NzEsMHgwYiwweDhjLDB4MDIsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGEzNTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MGMsMHgwMCwweDgzLDB4MDAsMHgyOCwweGMwIH0gfSwKK3sgIDE2LCAweGEzNjAsIDAsIHsweDA4LDB4MzIsMHg0MiwweDAwLDB4MDAsMHg4MSwweDAwLDB4MjgsMHhjMCwweDA5LDB4MzAsMHg1MiwweDhjLDB4MDgsMHg4MywweDAwIH0gfSwKK3sgIDE2LCAweGEzNzAsIDAsIHsweDJjLDB4YzAsMHgxOCwweDMwLDB4MDYsMHgwMCwweDAwLDB4ODMsMHgwMCwweGEwLDB4MDAsMHgwYiwweDAwLDB4MDIsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweGEzODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NzQsMHgwMiwweDhiLDB4MDAsMHgzMywweGMwIH0gfSwKK3sgIDE2LCAweGEzOTAsIDAsIHsweDBjLDB4OTIsMHgwYiwweDIwLDB4MDIsMHhjOCwweDAwLDB4M2IsMHhjMCwweDBjLDB4ZjUsMHgwMywweGZjLDB4MDAsMHhkZiwweDAxIH0gfSwKK3sgIDE2LCAweGEzYTAsIDAsIHsweDNmLDB4YzEsMHgwNCwweGYwLDB4MzMsMHgyMSwweDQwLDB4Y2YsMHgwMCwweDMyLDB4MDAsMHgwZiwweDgwLDB4MGIsMHgwMCwweDAzIH0gfSwKK3sgIDE2LCAweGEzYjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE5LDB4ZmMsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwIH0gfSwKK3sgIDE2LCAweGEzYzAsIDAsIHsweDBmLDB4YzQsMHgwMywweGYwLDB4MDAsMHg5YywweDAwLDB4M2IsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweGEzZDAsIDAsIHsweDJmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmMCwweDgwLDB4ZmYsMHgwMCwweDNmLDB4MDAsMHgwZiwweGMwLDB4MDMsMHhlOCwweDA2IH0gfSwKK3sgIDE2LCAweGEzZTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZjAsMHhjMCwweGZmLDB4YTAsMHgzMSwweDI0IH0gfSwKK3sgIDE2LCAweGEzZjAsIDAsIHsweDBlLDB4ZjAsMHg2MywweDEwLDB4MDQsMHhlZiwweDY0LDB4M2YsMHhjMCwweDRjLDB4ZjMsMHgwMywweDFjLDB4ODAsMHhkZiwweDA4IH0gfSwKK3sgIDE2LCAweGE0MDAsIDAsIHsweDM3LDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmMCwweGEwLDB4ZmMsMHgwMCwweDMxLDB4MDgsMHgyYywweGQyLDB4MDMsMHhmMCwweDAwIH0gfSwKK3sgIDE2LCAweGE0MTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4ZTEsMHgwMCwweGJiLDB4YzEsMHgyMiwweDQ4IH0gfSwKK3sgIDE2LCAweGE0MjAsIDAsIHsweDA4LDB4ZmQsMHgwMiwweDJlLDB4MDAsMHg5NywweDAwLDB4MmYsMHhjMiwweDQ4LDB4NzEsMHgyMywweDdlLDB4NDAsMHhiZiwweDAwIH0gfSwKK3sgIDE2LCAweGE0MzAsIDAsIHsweDIxLDB4YzUsMHg0YiwweGY1LDB4MDIsMHhlZiwweDAwLDB4YmIsMHg0MCwweDM2LDB4ZTAsMHgwOCwweGE4LDB4MDIsMHhlMCwweDA0IH0gfSwKK3sgIDE2LCAweGE0NDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzUsMHg4NCwweGIzLDB4MTEsMHhhMiwweGM5IH0gfSwKK3sgIDE2LCAweGE0NTAsIDAsIHsweDBhLDB4MzAsMHgwMiwweDAwLDB4MDEsMHhiMywweDMwLDB4MjgsMHhjNCwweDA4LDB4MzIsMHg0MiwweDBjLDB4MDAsMHhhMywweDA4IH0gfSwKK3sgIDE2LCAweGE0NjAsIDAsIHsweGEwLDB4Y2EsMHgwYSwweDMyLDB4ODIsMHg4MCwweDEwLDB4YjAsMHg0MSwweDI0LDB4MTEsMHgwOCwweDMxLDB4MDIsMHhlMiwweDAxIH0gfSwKK3sgIDE2LCAweGE0NzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDE1LDB4YTUsMHgwMCwweGJiLDB4MDAsMHgyMiwweGUxIH0gfSwKK3sgIDE2LCAweGE0ODAsIDAsIHsweDI4LDB4YjAsMHgwMiwweDJjLDB4ODAsMHg5YiwweDAwLDB4MmUsMHhjMCwweDA4LDB4YjAsMHgwMiwweDZjLDB4MDAsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweGE0OTAsIDAsIHsweDIyLDB4YzAsMHgwYiwweGIwLDB4MDAsMHhlYywweDIwLDB4YmIsMHgwMCwweDI2LDB4YzAsMHgwOCwweDgwLDB4MDIsMHhmMCwweDA0IH0gfSwKK3sgIDE2LCAweGE0YTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZTMsMHg0MCwweGY3LDB4MDQsMHgzMiwweGMwIH0gfSwKK3sgIDE2LCAweGE0YjAsIDAsIHsweDRlLDB4YjAsMHgyMywweDJlLDB4MjAsMHhlYiwweDAwLDB4MWUsMHhjMCwweDBjLDB4YjAsMHgwMSwweDJjLDB4MDAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweGE0YzAsIDAsIHsweDM2LDB4YzAsMHgxZiwweGIwLDB4MDMsMHhlMSwweDQwLDB4ZmIsMHgwMCwweDM2LDB4OTgsMHgwYywweDkwLDB4MDMsMHhkMCwweDA0IH0gfSwKK3sgIDE2LCAweGE0ZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4YjYsMHgwNCwweGZmLDB4MDIsMHgzZiwweGMwIH0gfSwKK3sgIDE2LCAweGE0ZTAsIDAsIHsweDBmLDB4ZjAsMHgwMywweGZlLDB4MDAsMHhlZiwweDAyLDB4M2QsMHhjMCwweDBmLDB4ZjAsMHgyMywweGZjLDB4MDAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweGE0ZjAsIDAsIHsweDNmLDB4YzAsMHg0ZiwweGYwLDB4MDMsMHhmYywweDAwLDB4ZjQsMHgwMCwweDNiLDB4NDAsMHgwZiwweGEwLDB4MTMsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGE1MDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWEsMHgyMCwweGViLDB4MTAsMHgzNiwweGMwIH0gfSwKK3sgIDE2LCAweGE1MTAsIDAsIHsweDBkLDB4YjAsMHgwNywweGVjLDB4MjAsMHhkYiwweDAwLDB4MzIsMHhjMCwweDBjLDB4YjAsMHgwMiwweDZjLDB4MjAsMHhlYiwweDAwIH0gfSwKK3sgIDE2LCAweGE1MjAsIDAsIHsweDNlLDB4YzEsMHgwZCwweGIwLDB4MDMsMHhlMCwweDIwLDB4ZGIsMHhhMCwweDMyLDB4OTAsMHg0YywweGIwLDB4MGIsMHgxMCwweDA0IH0gfSwKK3sgIDE2LCAweGE1MzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4MmQsMHgwMCwweDhmLDB4ODAsMHgyMCwweGMxIH0gfSwKK3sgIDE2LCAweGE1NDAsIDAsIHsweDA4LDB4NzAsMHgxMiwweGNmLDB4MDAsMHg4ZiwweDAwLDB4YTMsMHhjMCwweDBkLDB4ZjAsMHgwMiwweDNjLDB4MDAsMHg4ZiwweDAwIH0gfSwKK3sgIDE2LCAweGE1NTAsIDAsIHsweDM3LDB4YzAsMHg4OCwweGYwLDB4MDIsMHhlYywweDAwLDB4ODgsMHgwMCwweDIwLDB4NDAsMHgwOCwweDgwLDB4MDIsMHgzMiwweDAwIH0gfSwKK3sgIDE2LCAweGE1NjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMCwweGEzLDB4ODAsMHgyNCwweDgxIH0gfSwKK3sgIDE2LCAweGE1NzAsIDAsIHsweDA5LDB4MzAsMHgwNiwweGNjLDB4NDAsMHg5MywweDAwLDB4MjgsMHhjMSwweDA4LDB4YjAsMHgwMiwweGNmLDB4NDAsMHhhMywweDAwIH0gfSwKK3sgIDE2LCAweGE1ODAsIDAsIHsweDJjLDB4YzAsMHgwOSwweDMwLDB4MDIsMHhjZCwweDAwLDB4OTAsMHg0MCwweDYwLDB4NDAsMHgyOCwweDEwLDB4MDIsMHgzOCwweDAwIH0gfSwKK3sgIDE2LCAweGE1OTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAxLDB4MGUsMHgwMCwweDg3LDB4ODAsMHgyMywweGUwIH0gfSwKK3sgIDE2LCAweGE1YTAsIDAsIHsweDQ4LDB4NzksMHgwMiwweGRlLDB4NDEsMHg5NywweDgwLDB4MjksMHhlMCwweDE5LDB4NzgsMHgwNiwweDllLDB4MDAsMHg4NywweDgwIH0gfSwKK3sgIDE2LCAweGE1YjAsIDAsIHsweDI1LDB4ZTAsMHgwOCwweDc4LDB4MDIsMHhkMiwweDAzLDB4ODMsMHg4MCwweDIxLDB4YTAsMHgwOCwweDY4LDB4MDIsMHgwOCwweDAwIH0gfSwKK3sgIDE2LCAweGE1YzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweGEzLDB4MDAsMHgzNCwweGMwIH0gfSwKK3sgIDE2LCAweGE1ZDAsIDAsIHsweDBkLDB4MzAsMHg0MiwweGNjLDB4MDEsMHhkMywweDEwLDB4M2EsMHhjNSwweDBjLDB4MzksMHgwMywweGNjLDB4MDAsMHhlMywweDA0IH0gfSwKK3sgIDE2LCAweGE1ZTAsIDAsIHsweDNjLDB4YzQsMHgwZCwweDMwLDB4MDMsMHhjZSwweDAwLDB4ZDAsMHgwMCwweDMwLDB4NDAsMHgwYywweDMwLDB4MDMsMHgxMiwweDAyIH0gfSwKK3sgIDE2LCAweGE1ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDFkLDB4YmMsMHgwMCwweGY3LDB4MDAsMHgzZiwweGMwIH0gfSwKK3sgIDE2LCAweGE2MDAsIDAsIHsweDFmLDB4ZjAsMHg1MywweGZjLDB4MDAsMHhlZiwweDA4LDB4MzcsMHhkMSwweDBmLDB4ZjAsMHg4MywweDdjLDB4MDAsMHhmNywweDQwIH0gfSwKK3sgIDE2LCAweGE2MTAsIDAsIHsweDNmLDB4YzEsMHgwZiwweGYxLDB4MDMsMHhkMCwweDAwLDB4ZmYsMHgwMCwweGJmLDB4ODQsMHgwZiwweGM4LDB4MDMsMHhkMCwweDA2IH0gfSwKK3sgIDE2LCAweGE2MjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZTAsMHgwMCwweGZiLDB4MDAsMHgzZSwweGUwIH0gfSwKK3sgIDE2LCAweGE2MzAsIDAsIHsweDJjLDB4YmUsMHg4MywweGVjLDB4MDAsMHhlYiwweDQwLDB4M2UsMHhjMCwweDBmLDB4YjQsMHgwMywweGVkLDB4MjAsMHhmYiwweDEwIH0gfSwKK3sgIDE2LCAweGE2NDAsIDAsIHsweGI2LDB4ZDIsMHgwZiwweGI0LDB4ODMsMHhlYywweDAwLDB4ZGIsMHg4MCwweDM2LDB4YzEsMHgwYywweDkwLDB4MjEsMHgyYSwweDAwIH0gfSwKK3sgIDE2LCAweGE2NTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDExLDB4OTQsMHgwMCwweGI3LDB4MDAsMHgyZiwweGMwIH0gfSwKK3sgIDE2LCAweGE2NjAsIDAsIHsweDA4LDB4MzYsMHgwMiwweDBjLDB4MDgsMHg4NywweDMwLDB4MmQsMHhkOSwweDhiLDB4NzIsMHg4NiwweGRkLDB4MDAsMHhiMywweDIwIH0gfSwKK3sgIDE2LCAweGE2NzAsIDAsIHsweDIxLDB4YzgsMHgwYiwweDc0LDB4MDIsMHhkMCwweDAyLDB4ODQsMHgwMCwweGEwLDB4MDAsMHgyOCwweDIwLDB4MDIsMHgxMiwweDA0IH0gfSwKK3sgIDE2LCAweGE2ODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWEsMHgwMCwweGI3LDB4ODAsMHgyZCwweGUwIH0gfSwKK3sgIDE2LCAweGE2OTAsIDAsIHsweDA4LDB4N2EsMHgwMiwweDlkLDB4MDAsMHhhNywweGEwLDB4MmQsMHhlMCwweDBiLDB4NzgsMHgwMiwweDllLDB4ODAsMHhhNywweDgwIH0gfSwKK3sgIDE2LCAweGE2YTAsIDAsIHsweDIxLDB4ZTQsMHgwOCwweDdhLDB4MjYsMHg5ZSwweDE4LDB4ODMsMHgwNCwweDIxLDB4ZTAsMHgwOCwweDc4LDB4MGEsMHg3MCwweDAwIH0gfSwKK3sgIDE2LCAweGE2YjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE0LDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyYywweGUwIH0gfSwKK3sgIDE2LCAweGE2YzAsIDAsIHsweDU4LDB4MzAsMHgxMiwweDBlLDB4ODIsMHg4MywweDAwLDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDEsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweGE2ZDAsIDAsIHsweDIwLDB4YzEsMHgwYiwweDMwLDB4MDIsMHhjMCwweDA4LDB4ODgsMHhkMiwweDIwLDB4MjAsMHgwOCwweDAwLDB4MDIsMHg1MiwweDA0IH0gfSwKK3sgIDE2LCAweGE2ZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YjgsMHg2MCwweGZhLDB4MDAsMHgzZiwweDgyIH0gfSwKK3sgIDE2LCAweGE2ZjAsIDAsIHsweDBjLDB4YTAsMHgwMywweGZhLDB4MDAsMHhhYSwweDAwLDB4MWUsMHg4MCwweDhmLDB4YTAsMHgwMywweGU4LDB4MDAsMHhmMiwweDAwIH0gfSwKK3sgIDE2LCAweGE3MDAsIDAsIHsweDMyLDB4ODAsMHgxZiwweGEwLDB4MDMsMHhlOCwweDAwLDB4ZGEsMHgwMCwweDM2LDB4ODgsMHhhYywweGUwLDB4MDMsMHg3YSwweDA0IH0gfSwKK3sgIDE2LCAweGE3MTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4ZTEsMHgwMCwweGY4LDB4MDAsMHgzZSwweDIwIH0gfSwKK3sgIDE2LCAweGE3MjAsIDAsIHsweDRmLDB4ODAsMHgwMywweGUxLDB4MDAsMHhmMCwweDAwLDB4M2MsMHgwMCwweDBiLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmOCwweDAyIH0gfSwKK3sgIDE2LCAweGE3MzAsIDAsIHsweDNhLDB4MDAsMHgwZiwweDgwLDB4NDMsMHhmMSwweDAwLDB4ZmMsMHgwYSwweDNkLDB4MDAsMHgwZiwweGMwLDB4MDMsMHg5MiwweDAwIH0gfSwKK3sgIDE2LCAweGE3NDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTYsMHgwMCwweGM5LDB4OTAsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweGE3NTAsIDAsIHsweDBmLDB4OTIsMHgwMywweGU0LDB4MDAsMHhkOSwweDAwLDB4MzIsMHg0MCwweDA0LDB4OTAsMHgwNywweGU3LDB4MDAsMHhmOSwweDEwIH0gfSwKK3sgIDE2LCAweGE3NjAsIDAsIHsweDMwLDB4NDAsMHgwYywweDkwLDB4NDMsMHhlNCwweDA5LDB4ZDksMHg4MCwweDIyLDB4NDAsMHgyYywweDEwLDB4MGIsMHgwMiwweDA0IH0gfSwKK3sgIDE2LCAweGE3NzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NjQsMHg2MCwweDg5LDB4YzAsMHgyZSwweDQwIH0gfSwKK3sgIDE2LCAweGE3ODAsIDAsIHsweDBiLDB4OTgsMHgyNiwweGM1LDB4ODAsMHg4OSwweDAwLDB4MjIsMHg0MCwweDI4LDB4OTAsMHgxMiwweGU3LDB4MTAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweGE3OTAsIDAsIHsweDM2LDB4NDAsMHgyOCwweDkwLDB4MTIsMHhjNSwweDgzLDB4YzksMHg4MCwweGI2LDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGE3YTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MDQsMHgwMCwweDg5LDB4NDAsMHgyZSwweDQxIH0gfSwKK3sgIDE2LCAweGE3YjAsIDAsIHsweDRiLDB4OTAsMHgwMiwweGU0LDB4MDAsMHg5OSwweDAwLDB4YTIsMHg0MCwweDBhLDB4OTAsMHgwMiwweGU1LDB4MDAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweGE3YzAsIDAsIHsweGUyLDB4NDEsMHgwOCwweDkwLDB4NDIsMHhlNCwweDAwLDB4OWQsMHg1MCwweGFiLDB4NGEsMHgwOCwweGQwLDB4MjYsMHgwNiwweDAwIH0gfSwKK3sgIDE2LCAweGE3ZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDQsMHg4MiwweDgxLDB4MjAsMHgyYywweDUwIH0gfSwKK3sgIDE2LCAweGE3ZTAsIDAsIHsweDBiLDB4MTAsMHgwMiwweGU0LDB4MDAsMHg4MSwweDQwLDB4MjAsMHg1MCwweDRhLDB4MTQsMHgzMiwweGM0LDB4MDAsMHhiMSwweDQwIH0gfSwKK3sgIDE2LCAweGE3ZjAsIDAsIHsweDI0LDB4NTEsMHgxOCwweDE0LDB4MTIsMHhkNCwweDAwLDB4ODUsMHg0MCwweDJkLDB4NDAsMHgwOCwweDUwLDB4MDYsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweGE4MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGM4LDB4MDAsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGE4MTAsIDAsIHsweDBmLDB4ODAsMHgwMiwweGUwLDB4MDAsMHhkOCwweDAwLDB4MzIsMHgwMCwweDBhLDB4ODAsMHgwMiwweGUwLDB4MTAsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGE4MjAsIDAsIHsweDMyLDB4MDAsMHgwNCwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZDgsMHgwMCwweDNhLDB4MDAsMHgwYywweGMwLDB4MDMsMHgyZSwweDAzIH0gfSwKK3sgIDE2LCAweGE4MzAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDFkLDB4ZjQsMHg0MCwweGY5LDB4MTAsMHgzZiwweDQxIH0gfSwKK3sgIDE2LCAweGE4NDAsIDAsIHsweDBmLDB4OTQsMHgwMywweGY1LDB4MDAsMHhmOSwweDQwLDB4M2UsMHg1MCwweDBkLDB4OTQsMHgwMywweGU1LDB4MTAsMHhmOSwweDQwIH0gfSwKK3sgIDE2LCAweGE4NTAsIDAsIHsweDNlLDB4NTAsMHg0ZiwweDk0LDB4MDMsMHhjNSwweDAwLDB4ZTksMHg0MSwweDM2LDB4NTAsMHgwZiwweDk0LDB4MDMsMHhlNiwweDA2IH0gfSwKK3sgIDE2LCAweGE4NjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZjYsMHgwMCwweGZkLDB4YTgsMHgzYSwweDQwIH0gfSwKK3sgIDE2LCAweGE4NzAsIDAsIHsweDBjLDB4ZDgsMHgyMywweDM2LDB4MDAsMHhlOSwweGEwLDB4M2UsMHg3OCwweDBmLDB4OWUsMHgwMywweGI2LDB4ODAsMHhjZCwweGUyIH0gfSwKK3sgIDE2LCAweGE4ODAsIDAsIHsweDMyLDB4NjgsMHgwYywweDliLDB4MDMsMHgzNiwweDgyLDB4NGQsMHhhMCwweDM3LDB4NjgsMHg4YywweDk4LDB4MDMsMHgwNiwweDAwIH0gfSwKK3sgIDE2LCAweGE4OTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDEwLDB4ZWIsMHhhMCwweGI4LDB4NDAsMHgyMCwweDIwIH0gfSwKK3sgIDE2LCAweGE4YTAsIDAsIHsweDA4LDB4ODUsMHgwMiwweDIxLDB4NTEsMHg4OCwweGMwLDB4MmUsMHgyOSwweDBiLDB4OGUsMHgwMiwweGUxLDB4MDAsMHhkOCwweGUwIH0gfSwKK3sgIDE2LCAweGE4YjAsIDAsIHsweDIyLDB4MzIsMHgwZCwweDhkLDB4MjMsMHg2MSwweDQ4LDB4OTgsMHhkNCwweGEyLDB4MTAsMHgyOCwweDg0LDB4MDIsMHgwZSwweDA0IH0gfSwKK3sgIDE2LCAweGE4YzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzUsMHgwMCwweGIzLDB4MDAsMHgyYSwweDRhIH0gfSwKK3sgIDE2LCAweGE4ZDAsIDAsIHsweDI4LDB4MTAsMHg0ZSwweGE0LDB4MDgsMHhhMSwweDY4LDB4MjgsMHg0NCwweDBiLDB4MTQsMHgwMiwweGM1LDB4MDAsMHg4MSwweDQwIH0gfSwKK3sgIDE2LCAweGE4ZTAsIDAsIHsweGEwLDB4NTAsMHgwOCwweDEwLDB4MDIsMHgwNCwweDAyLDB4OTEsMHgyYSwweDIwLDB4NDQsMHgyOCwweDE0LDB4NGEsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweGE4ZjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4YWMsMHg4MCwweGI5LDB4MDAsMHgyMiwweDQwIH0gfSwKK3sgIDE2LCAweGE5MDAsIDAsIHsweDQ4LDB4OTAsMHgwNiwweGE0LDB4MDAsMHhhOSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgyMiwweGU0LDB4MDAsMHg5OSwweDAwIH0gfSwKK3sgIDE2LCAweGE5MTAsIDAsIHsweDIyLDB4NDAsMHgwOSwweDEwLDB4MDIsMHg2NCwweDAyLDB4OTksMHgwMCwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgwNiwweDA0IH0gfSwKK3sgIDE2LCAweGE5MjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzOCwweDU4IH0gfSwKK3sgIDE2LCAweGE5MzAsIDAsIHsweDBjLDB4OTAsMHg1MywweDg0LDB4MTQsMHhhOSwweDA0LDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhjOSwweDAwIH0gfSwKK3sgIDE2LCAweGE5NDAsIDAsIHsweDMyLDB4NDAsMHgwYywweDkwLDB4MDMsMHgyNCwweDA0LDB4ZDksMHgwMCwweGI2LDB4NDAsMHg0YywweDkwLDB4MGIsMHgyOCwweDA0IH0gfSwKK3sgIDE2LCAweGE5NTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAxLDB4YTQsMHgwMCwweGY5LDB4MDIsMHgzZSwweDQ5IH0gfSwKK3sgIDE2LCAweGE5NjAsIDAsIHsweDBmLDB4MTAsMHg0MywweDY0LDB4MDAsMHhkOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGM0LDB4MDAsMHhmMSwweDAyIH0gfSwKK3sgIDE2LCAweGE5NzAsIDAsIHsweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjNCwweDAyLDB4ZTksMHgwNCwweDNjLDB4NDAsMHgwZiwweDFjLDB4MDMsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGE5ODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTEsMHg4MCwweGM4LDB4MjAsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGE5OTAsIDAsIHsweDhjLDB4ODAsMHgwYiwweDIwLDB4MDAsMHhlOCwweDAyLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGEwLDB4ODIsMHhjOCwweDAwIH0gfSwKK3sgIDE2LCAweGE5YTAsIDAsIHsweDZjLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgyMCwweDEwLDB4YzgsMHgwMCwweDMyLDB4MDIsMHgwYywweDgwLDB4MDMsMHgwYSwweDA0IH0gfSwKK3sgIDE2LCAweGE5YjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4MzgsMHgwMCwweDg2LDB4MDAsMHgyZSwweDgwIH0gfSwKK3sgIDE2LCAweGE5YzAsIDAsIHsweDY4LDB4YTgsMHg4MCwweDNhLDB4MDAsMHg4YSwweDAwLDB4MmUsMHg4MCwweDBiLDB4YTAsMHgwMiwweGY4LDB4MDAsMHg4YSwweDAwIH0gfSwKK3sgIDE2LCAweGE5ZDAsIDAsIHsweDJlLDB4ODAsMHgwYiwweGEwLDB4MGEsMHgzYSwweDAwLDB4OGUsMHgxMCwweDIzLDB4ODAsMHgwOCwweGEwLDB4MDMsMHgwYSwweDAwIH0gfSwKK3sgIDE2LCAweGE5ZTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGQsMHgwMCwweDgzLDB4MDAsMHgyYywweGMwIH0gfSwKK3sgIDE2LCAweGE5ZjAsIDAsIHsweDA4LDB4MzgsMHgwMCwweDBjLDB4NjAsMHgyMywweDAwLDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNjLDB4NDAsMHg4MywweDAwIH0gfSwKK3sgIDE2LCAweGFhMDAsIDAsIHsweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwYywweDAyLDB4OGEsMHg4MCwweGEwLDB4ZTAsMHgyOCwweDMwLDB4MGEsMHg0YSwweDAwIH0gfSwKK3sgIDE2LCAweGFhMTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDAxLDB4MTYsMHgyMCwweDg3LDB4MDIsMHgyZCwweGMxIH0gfSwKK3sgIDE2LCAweGFhMjAsIDAsIHsweDQ4LDB4NzAsMHgxMiwweDdjLDB4MDAsMHhhNywweDIwLDB4MmQsMHhjOSwweDBiLDB4NzIsMHgwMCwweGRjLDB4MDAsMHg4NywweDA4IH0gfSwKK3sgIDE2LCAweGFhMzAsIDAsIHsweDJkLDB4YzQsMHgxYiwweDMyLDB4MDIsMHgxZCwweDAxLDB4ODcsMHg0MiwweDIxLDB4YzIsMHgwOCwweDcwLDB4MDIsMHgyOCwweDAwIH0gfSwKK3sgIDE2LCAweGFhNDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4M2UsMHgwMiwweGM3LDB4ODAsMHgzZCwweGVjIH0gfSwKK3sgIDE2LCAweGFhNTAsIDAsIHsweDBjLDB4NTgsMHgwMywweDFlLDB4MDAsMHhlNywweDgwLDB4M2QsMHhlYywweDBmLDB4N2YsMHgwMywweDk2LDB4MDAsMHhjNywweDgwIH0gfSwKK3sgIDE2LCAweGFhNjAsIDAsIHsweDJkLDB4ZTIsMHgwNywweDc5LDB4MDMsMHgwYSwweDA2LDB4YzMsMHg4MCwweDMwLDB4MjAsMHg4YywweDM4LDB4MDMsMHg2YSwweDAyIH0gfSwKK3sgIDE2LCAweGFhNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDFkLDB4YWMsMHgwMCwweGZiLDB4MDAsMHgzZSwweGMwIH0gfSwKK3sgIDE2LCAweGFhODAsIDAsIHsweDBmLDB4MTAsMHg0MywweDhjLDB4MDAsMHhkYiwweDM4LDB4M2UsMHhkOCwweDBmLDB4YjAsMHgwMywweGNjLDB4MDQsMHhmYiwweDQ0IH0gfSwKK3sgIDE2LCAweGFhOTAsIDAsIHsweDNlLDB4YzAsMHg4ZiwweGI2LDB4MTMsMHhlYywweDAyLDB4ZmYsMHgwMiwweDNlLDB4MDAsMHgwZiwweGIwLDB4MDMsMHhjMiwweDA2IH0gfSwKK3sgIDE2LCAweGFhYTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmEsMHgwMCwweGZmLDB4ODAsMHgzMSwweGUzIH0gfSwKK3sgIDE2LCAweGFhYjAsIDAsIHsweDBlLDB4ZjgsMHgyMywweGZlLDB4MDIsMHhkZiwweDgwLDB4YjcsMHhlMiwweDBlLDB4ZjgsMHgwMywweDdlLDB4MDAsMHg2ZCwweGQwIH0gfSwKK3sgIDE2LCAweGFhYzAsIDAsIHsweDMzLDB4ZTAsMHgwYywweGY4LDB4OWIsMHg3NiwweGMwLDB4ZGYsMHg4NCwweGIzLDB4ZTAsMHgwNCwweGY4LDB4MDMsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGFhZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4OTAsMHg0MCwweGI3LDB4MDIsMHgyMSwweGM0IH0gfSwKK3sgIDE2LCAweGFhZTAsIDAsIHsweDA4LDB4N2IsMHg0MiwweGRjLDB4MDAsMHg4NywweDAwLDB4MjEsMHhjNCwweDBiLDB4MzAsMHgwMCwweDEwLDB4ODAsMHg4ZCwweDAwIH0gfSwKK3sgIDE2LCAweGFhZjAsIDAsIHsweDIzLDB4YzAsMHgwZCwweGYyLDB4MDIsMHgwNCwweDQyLDB4OGYsMHgwMCwweDI5LDB4YzgsMHgyOCwweDcwLDB4MDIsMHhlYSwweDA0IH0gfSwKK3sgIDE2LCAweGFiMDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTQsMHgwMCwweGI2LDB4MDAsMHgyMywweGMwIH0gfSwKK3sgIDE2LCAweGFiMTAsIDAsIHsweDBhLDB4NzIsMHgwMiwweDhjLDB4MDAsMHg4NywweDAwLDB4MjEsMHhjMCwweDBhLDB4MzAsMHgwMiwweDA0LDB4MDEsMHhhNywweDAyIH0gfSwKK3sgIDE2LCAweGFiMjAsIDAsIHsweDIxLDB4YzAsMHgwOCwweDcwLDB4NDIsMHgwMCwweDhhLDB4ODcsMHgwMCwweDIxLDB4YzAsMHgyOCwweDcwLDB4MDIsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGFiMzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDE0LDB4YzUsMHgwMCwweGIwLDB4MDAsMHhhMCwweGQwIH0gfSwKK3sgIDE2LCAweGFiNDAsIDAsIHsweDA4LDB4YjAsMHgwMiwweGM5LDB4NDIsMHg4YiwweDAwLDB4MjAsMHhjMCwweDBiLDB4MzAsMHgyMiwweDA0LDB4MDAsMHg4MywweDAwIH0gfSwKK3sgIDE2LCAweGFiNTAsIDAsIHsweGEwLDB4YzAsMHg0OSwweDMwLDB4MDIsMHg0NSwweDQwLDB4OTMsMHhjMCwweGE4LDB4ZDQsMHgwMCwweDM1LDB4MDIsMHhjOCwweDA0IH0gfSwKK3sgIDE2LCAweGFiNjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YWMsMHgwMCwweGJiLDB4MDAsMHgzMSwweGMwIH0gfSwKK3sgIDE2LCAweGFiNzAsIDAsIHsweDBlLDB4YjAsMHgyMywweGNkLDB4MDAsMHhkZiwweDAwLDB4MzcsMHhjMCwweDBlLDB4ZjAsMHgwMSwweDY4LDB4MDAsMHhlMywweDAwIH0gfSwKK3sgIDE2LCAweGFiODAsIDAsIHsweDMzLDB4YzAsMHgxYywweGYwLDB4MDMsMHg0NSwweDAwLDB4ZGEsMHhjOCwweDkyLDB4ZDQsMHgyYywweGI0LDB4MDMsMHhlYSwweDA0IH0gfSwKK3sgIDE2LCAweGFiOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4ZTUsMHgyMCwweGZiLDB4MDAsMHgzZSwweGMwIH0gfSwKK3sgIDE2LCAweGFiYTAsIDAsIHsweDBmLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmYiwweDAwLDB4M2UsMHhjMCwweDRmLDB4YjAsMHgwMywweGFkLDB4MDAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweGFiYjAsIDAsIHsweDdlLDB4YzAsMHgxZiwweDMwLDB4MDMsMHhhNCwweDgwLDB4ZTksMHgyMCwweDNjLDB4YzAsMHgwZiwweDMyLDB4MDMsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGFiYzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZGMsMHgwMCwweGM3LDB4MDAsMHgzMywweGMyIH0gfSwKK3sgIDE2LCAweGFiZDAsIDAsIHsweDJjLDB4ZjAsMHgwMywweDNlLDB4MjAsMHhkYiwweDAwLDB4MTMsMHhjMCwweDBjLDB4NzAsMHgwMywweDNjLDB4ODAsMHhlZiwweDA0IH0gfSwKK3sgIDE2LCAweGFiZTAsIDAsIHsweDczLDB4YzEsMHgwZiwweGYwLDB4MjIsMHgzMCwweDAwLDB4YzYsMHgwMCwweGIyLDB4YzAsMHgwYywweGYwLDB4MDMsMHgwMCwweDQ0IH0gfSwKK3sgIDE2LCAweGFiZjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MSwweDAwLDB4NjksMHgwMCwweDhiLDB4NDQsMHhhMiwweGMxIH0gfSwKK3sgIDE2LCAweGFjMDAsIDAsIHsweDg4LDB4YjAsMHgwMywweDZjLDB4MDAsMHg4YiwweDAwLDB4MjIsMHhjMCwweDI4LDB4YjAsMHgwYSwweDJkLDB4MDAsMHhiYiwweDAwIH0gfSwKK3sgIDE2LCAweGFjMTAsIDAsIHsweDYyLDB4YzAsMHgwYiwweGIwLDB4MDIsMHgyNiwweDAyLDB4OGIsMHg4MCwweDIyLDB4YzAsMHgwOCwweGIwLDB4MDMsMHgyMCwweDQwIH0gfSwKK3sgIDE2LCAweGFjMjAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MjgsMHgwMSwweDhhLDB4MDgsMHgyMiwweGMwIH0gfSwKK3sgIDE2LCAweGFjMzAsIDAsIHsweDA4LDB4YjIsMHgwMiwweDZjLDB4NDAsMHg5YiwweDAwLDB4MjgsMHhjMCwweDQ4LDB4YjAsMHgxNiwweDI5LDB4MDQsMHhiOSwweDAxIH0gfSwKK3sgIDE2LCAweGFjNDAsIDAsIHsweDIyLDB4YzAsMHg0OSwweGIwLDB4MDYsMHhhZSwweDA5LDB4OGIsMHg4MCwweDIyLDB4ZTAsMHg0OCwweGIwLDB4MDIsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGFjNTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDAsMHgwMiwweDgyLDB4MDAsMHgyMiwweGMwIH0gfSwKK3sgIDE2LCAweGFjNjAsIDAsIHsweDg4LDB4YjAsMHgwMiwweDQ0LDB4MDAsMHg4MywweDAwLDB4MjgsMHhjMCwweDA4LDB4MzAsMHgwMiwweDA4LDB4MDAsMHhiMSwweDAwIH0gfSwKK3sgIDE2LCAweGFjNzAsIDAsIHsweDIwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHg4YywweDAwLDB4ODMsMHg4MCwweDIwLDB4ZTAsMHgwOCwweDMwLDB4MGEsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweGFjODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NjQsMHgwMCwweGNhLDB4MDAsMHgzMywweGMwIH0gfSwKK3sgIDE2LCAweGFjOTAsIDAsIHsweDBjLDB4YjIsMHgwMywweDJjLDB4MDAsMHhkZiwweDAwLDB4M2IsMHhjMCwweDRjLDB4ZjUsMHgxMywweDJjLDB4MDQsMHhlZiwweDAwIH0gfSwKK3sgIDE2LCAweGFjYTAsIDAsIHsweGEzLDB4YzAsMHgwZCwweGYwLDB4MDMsMHhhOCwweDQwLDB4Y2IsMHgwMCwweGIyLDB4MDAsMHgyYywweGIwLDB4MDMsMHgwMCwweDAzIH0gfSwKK3sgIDE2LCAweGFjYjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDFkLDB4ZjAsMHgwMCwweGY0LDB4MDAsMHgzZiwweGMwIH0gfSwKK3sgIDE2LCAweGFjYzAsIDAsIHsweDBmLDB4YjEsMHgwMywweGYwLDB4MDAsMHhmZiwweDAwLDB4MzcsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweGFjZDAsIDAsIHsweDNmLDB4YzAsMHgwNywweGYwLDB4MGIsMHg3YywweDA4LDB4ZmYsMHgwMSwweDNmLDB4MDAsMHgwZiwweGYwLDB4MDMsMHhhOCwweDA2IH0gfSwKK3sgIDE2LCAweGFjZTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZjAsMHhjNSwweGVkLDB4MzMsMHgzYiwweGNjIH0gfSwKK3sgIDE2LCAweGFjZjAsIDAsIHsweDBjLDB4ZjAsMHgwMywweDMwLDB4NDAsMHhmZiwweDI1LDB4M2YsMHhjYywweDBjLDB4ZjMsMHg4MywweDNjLDB4ZDAsMHhkZiwweDQ4IH0gfSwKK3sgIDE2LCAweGFkMDAsIDAsIHsweDM3LDB4MzAsMHg0YywweGYzLDB4MDMsMHhmZCwweDgwLDB4Y2YsMHgyOCwweDMzLDB4ZDgsMHgwYywweGYxLDB4MDMsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweGFkMTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4ZWMsMHhkMCwweGJiLDB4MzEsMHgyMCwweGNjIH0gfSwKK3sgIDE2LCAweGFkMjAsIDAsIHsweDg4LDB4ZjMsMHg0MiwweDIwLDB4NTAsMHhiZiwweDkwLDB4MmYsMHhjNCwweDBhLDB4ZjYsMHgwMiwweDdkLDB4YzAsMHg4ZiwweDQwIH0gfSwKK3sgIDE2LCAweGFkMzAsIDAsIHsweDI2LDB4NDAsMHg4ZiwweGY2LDB4MDIsMHhmZCwweDAwLDB4ZmYsMHgwOCwweDM5LDB4YzgsMHgwOCwweGY2LDB4MDIsMHhhMCwweDA0IH0gfSwKK3sgIDE2LCAweGFkNDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzQsMHg4MCwweGExLDB4MjAsMHgyOCwweGM5IH0gfSwKK3sgIDE2LCAweGFkNTAsIDAsIHsweDA4LDB4MzAsMHg5YSwweDAwLDB4MDksMHhiMywweDAwLDB4MmMsMHhjMCwweDIwLDB4MzAsMHgwMiwweDRjLDB4OTAsMHg4MywweDIwIH0gfSwKK3sgIDE2LCAweGFkNjAsIDAsIHsweDAyLDB4MDgsMHgwYiwweDMzLDB4MTIsMHhjZCwweDgwLDB4OTMsMHgyMCwweDI0LDB4ZDgsMHgwOCwweDM0LDB4MjIsMHgyMiwweDAxIH0gfSwKK3sgIDE2LCAweGFkNzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDExLDB4YWUsMHgwMCwweGJiLDB4MTAsMHgyMiwweGMwIH0gfSwKK3sgIDE2LCAweGFkODAsIDAsIHsweDA4LDB4YjAsMHgwMiwweDI2LDB4MDEsMHgzYiwweDAxLDB4NmUsMHhjMCwweDA4LDB4YjAsMHgwMiwweDRjLDB4MDgsMHg4YiwweDAwIH0gfSwKK3sgIDE2LCAweGFkOTAsIDAsIHsweGEyLDB4ODksMHgwYiwweGIwLDB4MDIsMHhlYywweDAwLDB4YWIsMHgwMCwweDZhLDB4YzEsMHgyOCwweGIwLDB4MDIsMHhiMCwweDA0IH0gfSwKK3sgIDE2LCAweGFkYTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4NmUsMHgwMCwweGU4LDB4YzEsMHgzYSwweGMwIH0gfSwKK3sgIDE2LCAweGFkYjAsIDAsIHsweDJjLDB4YjAsMHg0MywweDI2LDB4MDAsMHhmYiwweDA2LDB4M2UsMHhjMSwweDBjLDB4YjAsMHgwYiwweDJjLDB4MDIsMHhjYiwweDAwIH0gfSwKK3sgIDE2LCAweGFkYzAsIDAsIHsweDM0LDB4MjIsMHg5ZiwweGIwLDB4NDMsMHhlYywweDAwLDB4OWIsMHgwMiwweDM2LDB4YzEsMHg4YywweGIwLDB4MDMsMHgxMCwweDA0IH0gfSwKK3sgIDE2LCAweGFkZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4YmMsMHgwMCwweGZjLDB4ODAsMHgzZCwweGQwIH0gfSwKK3sgIDE2LCAweGFkZTAsIDAsIHsweDJmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmYiwweDAwLDB4M2QsMHhjMCwweDA3LDB4MzAsMHgwMywweGJjLDB4MDAsMHhlZiwweDA0IH0gfSwKK3sgIDE2LCAweGFkZjAsIDAsIHsweDNmLDB4ZTAsMHg1ZSwweGIwLDB4MDEsMHhmYywweDAwLDB4ZmYsMHgwMCwweDFiLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGFlMDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGNiLDB4MDEsMHgzZSwweGM5IH0gfSwKK3sgIDE2LCAweGFlMTAsIDAsIHsweDBjLDB4YjAsMHgxNywweDIwLDB4ODQsMHhlYiwweDAwLDB4YjIsMHhjMSwweDBkLDB4YjAsMHgwMywweDZjLDB4MDAsMHhjMywweDAwIH0gfSwKK3sgIDE2LCAweGFlMjAsIDAsIHsweDMyLDB4NTAsMHgwZiwweGIwLDB4MDMsMHgwYywweDQwLDB4YzMsMHgwMCwweDdlLDB4YzAsMHgwYywweDMwLDB4MDMsMHgxMCwweDA0IH0gfSwKK3sgIDE2LCAweGFlMzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4MmMsMHgwMCwweDhhLDB4NTgsMHgyZSwweGUwIH0gfSwKK3sgIDE2LCAweGFlNDAsIDAsIHsweDQ4LDB4ZjAsMHgwMiwweDJkLDB4MDAsMHhlZiwweDAxLDB4MjMsMHhjMCwweDA4LDB4ZjAsMHgyMiwweDNjLDB4MDQsMHg4ZiwweDYwIH0gfSwKK3sgIDE2LCAweGFlNTAsIDAsIHsweDM2LDB4NTQsMHgwYiwweGYwLDB4MGEsMHgzZCwweDQwLDB4OGYsMHgwMCwweDJmLDB4YzAsMHgwOCwweGYwLDB4MDMsMHg3MiwweDAwIH0gfSwKK3sgIDE2LCAweGFlNjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NDAsMHgwMCwweDg5LDB4ODAsMHgyYywweDEwIH0gfSwKK3sgIDE2LCAweGFlNzAsIDAsIHsweDA4LDB4YjAsMHgwMiwweDQ5LDB4MDAsMHhhMywweGEwLDB4MjQsMHhjMCwweDA5LDB4MzAsMHgwMiwweDRjLDB4MDAsMHg4MywweGM5IH0gfSwKK3sgIDE2LCAweGFlODAsIDAsIHsweDIwLDB4OTAsMHg0MiwweDMwLDB4MTIsMHg0ZCwweDAwLDB4ODMsMHgwMCwweDZhLDB4YzAsMHgwOSwweDMwLDB4MDIsMHgzOCwweDAwIH0gfSwKK3sgIDE2LCAweGFlOTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAxLDB4MTYsMHgwMCwweDg1LDB4ODAsMHg2ZCwweDYyIH0gfSwKK3sgIDE2LCAweGFlYTAsIDAsIHsweDA4LDB4N2UsMHgwMiwweDU2LDB4NDAsMHgyNywweDgwLDB4MjUsMHhlMCwweDE5LDB4NzgsMHgwNiwweDBlLDB4MDAsMHg4MywweDgwIH0gfSwKK3sgIDE2LCAweGFlYjAsIDAsIHsweDYxLDB4YTAsMHgwYiwweDc4LDB4MDIsMHg0ZSwweDAwLDB4ODcsMHg4MiwweDZkLDB4ZTAsMHgwOSwweDc5LDB4MDIsMHg0OCwweDAwIH0gfSwKK3sgIDE2LCAweGFlYzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MmMsMHgwMiwweGMzLDB4NjEsMHgzYywweDg4IH0gfSwKK3sgIDE2LCAweGFlZDAsIDAsIHsweDJjLDB4YmEsMHgxMiwweDQ5LDB4MTAsMHhlMywweDJjLDB4MzYsMHhjMCwweDBkLDB4MzAsMHg1MywweDRjLDB4NDQsMHhjMywweDAwIH0gfSwKK3sgIDE2LCAweGFlZTAsIDAsIHsweDIwLDB4MDEsMHgwZiwweDMxLDB4MDMsMHg0YywweDAwLDB4YzMsMHgwMSwweDNjLDB4YzAsMHgyZCwweGIxLDB4MDMsMHgxMiwweDAyIH0gfSwKK3sgIDE2LCAweGFlZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDFkLDB4YmMsMHgwMCwweGZmLDB4MDAsMHgzZiwweDAwIH0gfSwKK3sgIDE2LCAweGFmMDAsIDAsIHsweDRmLDB4ZjEsMHgwOSwweGIwLDB4MDAsMHhmZiwweDAwLDB4M2IsMHhjMCwweDBlLDB4ZjQsMHgwMSwweGZkLDB4MjQsMHhmZiwweDQwIH0gfSwKK3sgIDE2LCAweGFmMTAsIDAsIHsweGJmLDB4YzAsMHgwNywweGYwLDB4MDMsMHhiYywweDAwLDB4NmYsMHgxMCwweDNmLDB4YzQsMHgxZSwweGYxLDB4ODMsMHhkMCwweDA2IH0gfSwKK3sgIDE2LCAweGFmMjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4YzQsMHgwMCwweGU4LDB4MDQsMHgzMiwweDAwIH0gfSwKK3sgIDE2LCAweGFmMzAsIDAsIHsweDBjLDB4YjYsMHgwMywweGU4LDB4MDIsMHhjYiwweDAwLDB4MzYsMHhjYSwweDBmLDB4YjUsMHgwMywweGFkLDB4MDAsMHhmYiwweDIwIH0gfSwKK3sgIDE2LCAweGFmNDAsIDAsIHsweDNlLDB4NDAsMHgwZiwweGIzLDB4MDMsMHhlYywweDgwLDB4ZmIsMHhhOCwweDMyLDB4YzYsMHg4YywweGI2LDB4MDMsMHgyYSwweDAwIH0gfSwKK3sgIDE2LCAweGFmNTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDExLDB4OTQsMHgwMiwweGU2LDB4MDAsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGFmNjAsIDAsIHsweDA4LDB4NzMsMHgwMiwweGRjLDB4MDAsMHg4NywweDcwLDB4MmQsMHhkMCwweDBiLDB4ZjAsMHgwMiwweDFjLDB4ODQsMHhiNywweDIwIH0gfSwKK3sgIDE2LCAweGFmNzAsIDAsIHsweDJkLDB4YzAsMHgwYiwweDcwLDB4ODIsMHhkZCwweDI0LDB4YjcsMHg0MCwweDM0LDB4YzksMHgyOCwweDcyLDB4ODIsMHg5MiwweDA0IH0gfSwKK3sgIDE2LCAweGFmODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4YmUsMHgwMiwweGFjLDB4ODAsMHhhMSwweDIwIH0gfSwKK3sgIDE2LCAweGFmOTAsIDAsIHsweDA4LDB4NzksMHgwMCwweGNlLDB4MDQsMHg4NywweDgwLDB4NjUsMHhlMCwweDBiLDB4N2EsMHgwMiwweDllLDB4MDAsMHhiNywweDkwIH0gfSwKK3sgIDE2LCAweGFmYTAsIDAsIHsweDZkLDB4YTAsMHgwYiwweDc4LDB4MDIsMHhkZSwweDAwLDB4YjcsMHg4MCwweDIxLDB4ZTAsMHgwOCwweDc4LDB4MDIsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweGFmYjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE0LDB4ZWQsMHg4MiwweGFiLDB4ZTAsMHgyMCwweGU0IH0gfSwKK3sgIDE2LCAweGFmYzAsIDAsIHsweDA4LDB4MzAsMHgwMiwweGVlLDB4MDQsMHg4MywweDAwLDB4MmMsMHhjMSwweDFiLDB4MzAsMHgwMiwweDBjLDB4MDgsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweGFmZDAsIDAsIHsweDY0LDB4ZjYsMHgwYiwweGIwLDB4MDIsMHhjYywweDA0LDB4YjMsMHgwMCwweDI2LDB4YzAsMHgwOCwweDMwLDB4MDIsMHg5MiwweDA0IH0gfSwKK3sgIDE2LCAweGFmZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YmIsMHg4MCwweGVlLDB4NDksMHgzMSwweGEwIH0gfSwKK3sgIDE2LCAweGFmZjAsIDAsIHsweDJjLDB4YTAsMHgwMywweGZhLDB4MDAsMHhjYSwweDAyLDB4MzYsMHg4MCwweDBmLDB4YTAsMHgwMywweGE4LDB4MDAsMHhmYSwweDAyIH0gfSwKK3sgIDE2LCAweGIwMDAsIDAsIHsweDNmLDB4OTAsMHgwZiwweGEwLDB4NjMsMHhlOCwweDAwLDB4ZmEsMHgwMCwweDMyLDB4ODAsMHgwYywweGEwLDB4MjMsMHgzYSwweDA0IH0gfSwKK3sgIDE2LCAweGIwMTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4ZTAsMHgwYSwweGU4LDB4MDAsMHgzZSwweDA4IH0gfSwKK3sgIDE2LCAweGIwMjAsIDAsIHsweDBmLDB4ODAsMHgwMywweGUzLDB4NTAsMHhmMCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgxMywweGUwLDB4MDAsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGIwMzAsIDAsIHsweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhlMCwweDAxLDB4ZjgsMHgwMSwweDdlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiwweDAwIH0gfSwKK3sgIDE2LCAweGIwNDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHg0MCwweGM5LDB4YTEsMHgzMiwweDQwIH0gfSwKK3sgIDE2LCAweGIwNTAsIDAsIHsweDIwLDB4MTEsMHgwMSwweGE2LDB4NDAsMHhjOSwweDg0LDB4MzYsMHg0MCwweDBkLDB4OTAsMHgwMywweDQ0LDB4MDAsMHg0MSwweDAwIH0gfSwKK3sgIDE2LCAweGIwNjAsIDAsIHsweDMyLDB4NDAsMHgwZiwweDkwLDB4MGIsMHgyNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHg0YywweDEwLDB4MDMsMHgwMiwweDA0IH0gfSwKK3sgIDE2LCAweGIwNzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4ODIsMHhhMiwweDQwIH0gfSwKK3sgIDE2LCAweGIwODAsIDAsIHsweDA4LDB4OWMsMHgwMiwweDI1LDB4MDAsMHg4OSwweGM4LDB4MjIsMHg0MCwweDA4LDB4OTAsMHg0MiwweDI0LDB4MDAsMHg4OSwweDIwIH0gfSwKK3sgIDE2LCAweGIwOTAsIDAsIHsweDIyLDB4NjAsMHgwYiwweDkwLDB4MDIsMHgyNCwweDEwLDB4YjksMHgwMCwweDJlLDB4NDAsMHgwOCwweDkwLDB4MDMsMHg2MCwweDAwIH0gfSwKK3sgIDE2LCAweGIwYTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweDg5LDB4MDQsMHgyMiwweGNhIH0gfSwKK3sgIDE2LCAweGIwYjAsIDAsIHsweDBhLDB4OTAsMHgwYSwweDI1LDB4MDIsMHg4OSwweDIwLDB4MjAsMHg0MCwweDI4LDB4MTAsMHgwMiwweDY0LDB4MDEsMHhhOSwweDAwIH0gfSwKK3sgIDE2LCAweGIwYzAsIDAsIHsweDIyLDB4NGIsMHgwYiwweDkwLDB4MDIsMHgyNCwweDAxLDB4YjksMHgwMCwweDJlLDB4NDEsMHgyOCwweDkwLDB4MDIsMHgwNiwweDAwIH0gfSwKK3sgIDE2LCAweGIwZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDQsMHg5MCwweDgxLDB4YTAsMHgyMCwweDQ4IH0gfSwKK3sgIDE2LCAweGIwZTAsIDAsIHsweDBhLDB4MzIsMHgwMiwweDA0LDB4ODAsMHg4MSwweDAwLDB4MjAsMHg0NCwweDA4LDB4MTEsMHgwMiwweDA0LDB4ZDAsMHhhMSwweDIwIH0gfSwKK3sgIDE2LCAweGIwZjAsIDAsIHsweDIwLDB4NDAsMHgwYiwweDExLDB4MDIsMHgwNiwweDAwLDB4YjEsMHgzMSwweDJjLDB4NDgsMHgwOCwweDE0LDB4MDIsMHg0MiwweDAxIH0gfSwKK3sgIDE2LCAweGIxMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MiwweGM4LDB4NTQsMHgzMiwweDE0IH0gfSwKK3sgIDE2LCAweGIxMTAsIDAsIHsweDBlLDB4ODUsMHgwMywweDIxLDB4NDQsMHhjOCwweDI4LDB4YjIsMHgxYSwweDRjLDB4ODYsMHg5MywweDYxLDB4MTQsMHhlOCwweDUwIH0gfSwKK3sgIDE2LCAweGIxMjAsIDAsIHsweDIyLDB4MTQsMHgwZiwweDg2LDB4ODMsMHgyMSwweDQwLDB4ZjAsMHg0MCwweDFlLDB4MTQsMHgwYywweDAwLDB4MDMsMHgyZSwweDAzIH0gfSwKK3sgIDE2LCAweGIxMzAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDFkLDB4NzQsMHg0NCwweGY1LDB4MTAsMHgzZiwweDQ0IH0gfSwKK3sgIDE2LCAweGIxNDAsIDAsIHsweDBkLDB4OTEsMHgwMywweDc0LDB4NDAsMHhmOSwweDAwLDB4M2UsMHg0OCwweDBiLDB4OTIsMHgwMywweGU0LDB4YzIsMHhkOSwweDEwIH0gfSwKK3sgIDE2LCAweGIxNTAsIDAsIHsweGJmLDB4NDAsMHgwZiwweDkyLDB4MDMsMHhlNSwweDA0LDB4ZjksMHgzMCwweDNlLDB4NDQsMHgwZiwweDk0LDB4NDMsMHhlNiwweDA2IH0gfSwKK3sgIDE2LCAweGIxNjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZjYsMHgyMiwweGNkLDB4YTEsMHgzMywweDYxIH0gfSwKK3sgIDE2LCAweGIxNzAsIDAsIHsweDBjLDB4ZDgsMHhkMywweDM0LDB4MTAsMHhjZCwweGE4LDB4M2UsMHg2MCwweDhlLDB4OWMsMHg5MywweGE3LDB4MDgsMHhjZCwweDgwIH0gfSwKK3sgIDE2LCAweGIxODAsIDAsIHsweDMzLDB4NDAsMHgwZSwweDlhLDB4ZDMsMHgzNiwweGEwLDB4YzksMHg4MCwweDMyLDB4NjAsMHgwYywweDk5LDB4MDMsMHgwNiwweDAwIH0gfSwKK3sgIDE2LCAweGIxOTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDEwLDB4ZTMsMHg4OCwweDhhLDB4YTAsMHgyMCwweDI4IH0gfSwKK3sgIDE2LCAweGIxYTAsIDAsIHsweDA4LDB4ODAsMHgyMiwweDIwLDB4MTIsMHg4OCwweDQwLDB4MmMsMHgyOCwweDA4LDB4OGEsMHgwMiwweDIyLDB4MDAsMHg4OCwweDAwIH0gfSwKK3sgIDE2LCAweGIxYjAsIDAsIHsweDIyLDB4MDAsMHgwYiwweDhjLDB4MDMsMHgyMSwweDAwLDB4ODgsMHhkMCwweGEyLDB4M2UsMHgyOCwweDhkLDB4MDIsMHgwZSwweDA0IH0gfSwKK3sgIDE2LCAweGIxYzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4Y2UsMHgyMCwweGExLDB4NDgsMHgyMCwweDUyIH0gfSwKK3sgIDE2LCAweGIxZDAsIDAsIHsweDI5LDB4MTAsMHgwMiwweDI0LDB4MDMsMHg4MSwweDAwLDB4MmMsMHg1MiwweDBhLDB4MTAsMHgxMiwweDg1LDB4MTAsMHg5MSwweDQwIH0gfSwKK3sgIDE2LCAweGIxZTAsIDAsIHsweGE0LDB4NDAsMHgwYSwweDEyLDB4ODIsMHg0NCwweDAwLDB4OTEsMHgyOCwweDI0LDB4NDAsMHgyOCwweDEyLDB4MDIsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweGIxZjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4YTQsMHgwMCwweGE5LDB4MTQsMHgyMiwweDQwIH0gfSwKK3sgIDE2LCAweGIyMDAsIDAsIHsweDA5LDB4OTAsMHgwMiwweGE0LDB4MDEsMHg4OSwweDA0LDB4MmMsMHg0MCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDAsMHg5OSwweDAwIH0gfSwKK3sgIDE2LCAweGIyMTAsIDAsIHsweDIyLDB4NDQsMHg0YiwweDEwLDB4NDIsMHgyNCwweDE0LDB4OTksMHgwMCwweDI2LDB4NDAsMHgwOCwweDEwLDB4MDIsMHgwNiwweDA0IH0gfSwKK3sgIDE2LCAweGIyMjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHg0MCwweGU5LDB4NDAsMHhiMiwweDc4IH0gfSwKK3sgIDE2LCAweGIyMzAsIDAsIHsweDBkLDB4OTAsMHgwYiwweDI0LDB4MjIsMHhjOSwweDAzLDB4M2UsMHg0MSwweDBlLDB4OTAsMHgwMywweGE0LDB4MDIsMHhkOSwweDAwIH0gfSwKK3sgIDE2LCAweGIyNDAsIDAsIHsweDE2LDB4NTgsMHgwNiwweDkwLDB4MGIsMHg2NCwweDAyLDB4ZDksMHgwMCwweDM2LDB4NDAsMHgwYywweDkwLDB4MGIsMHgyOCwweDA0IH0gfSwKK3sgIDE2LCAweGIyNTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAxLDB4ODQsMHgwMCwweGQ5LDB4ODAsMHgzZSwweDRhIH0gfSwKK3sgIDE2LCAweGIyNjAsIDAsIHsweDBlLDB4OTAsMHgwMywweDY0LDB4MjAsMHhmOSwweDA4LDB4M2UsMHg0MSwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhlMSwweDA4IH0gfSwKK3sgIDE2LCAweGIyNzAsIDAsIHsweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjNCwweDAwLDB4ZTEsMHgwMCwweDM4LDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGIyODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwOSwweGYwLDB4NDAsMHhiMCwweDEwIH0gfSwKK3sgIDE2LCAweGIyOTAsIDAsIHsweDRjLDB4MDAsMHgwYiwweDIwLDB4MDAsMHhmOCwweDAwLDB4M2EsMHgwMCwweDFjLDB4MDAsMHgwMywweGUwLDB4MDAsMHhjOCwweDAwIH0gfSwKK3sgIDE2LCAweGIyYTAsIDAsIHsweDM2LDB4MDAsMHgwYywweDgwLDB4MDMsMHgyMCwweDAwLDB4YzgsMHgwMCwweDMyLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgwYSwweDA0IH0gfSwKK3sgIDE2LCAweGIyYjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4MjgsMHgwMCwweDNlLDB4ODgsMHgyMywweGEyIH0gfSwKK3sgIDE2LCAweGIyYzAsIDAsIHsweDQ4LDB4ZTAsMHgwMCwweDE5LDB4ODAsMHhiZSwweDg4LDB4MmUsMHg4MCwweDBkLDB4YTAsMHg0MiwweGU4LDB4MDAsMHg4ZSwweDAwIH0gfSwKK3sgIDE2LCAweGIyZDAsIDAsIHsweDIzLDB4OTAsMHgwOCwweGEwLDB4MGEsMHgzYSwweDAwLDB4ZGEsMHgwMCwweDM2LDB4ODAsMHgwYiwweGEwLDB4MGEsMHgwYSwweDAwIH0gfSwKK3sgIDE2LCAweGIyZTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweGIzLDB4ODAsMHgyMCwweGUwIH0gfSwKK3sgIDE2LCAweGIyZjAsIDAsIHsweDI4LDB4MzAsMHhjMiwweDBmLDB4MTAsMHhiMywweDQwLDB4MjgsMHhjMCwweDBiLDB4MzAsMHgwMiwweGVjLDB4MTEsMHg4MywweDQwIH0gfSwKK3sgIDE2LCAweGIzMDAsIDAsIHsweDI4LDB4ZDIsMHgwYSwweDMwLDB4MDIsMHgwYywweGMwLDB4ODMsMHgwMCwweDIwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwYSwweDAwIH0gfSwKK3sgIDE2LCAweGIzMTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDAxLDB4MWMsMHgwMCwweGI2LDB4MDAsMHgyMSwweGMwIH0gfSwKK3sgIDE2LCAweGIzMjAsIDAsIHsweDA4LDB4MjAsMHhjMiwweDFjLDB4MTAsMHhiNSwweDAwLDB4MmQsMHhjOCwweDBhLDB4NzIsMHgwMiwweGRjLDB4NDAsMHg4NSwweDA4IH0gfSwKK3sgIDE2LCAweGIzMzAsIDAsIHsweDI5LDB4YTIsMHgxYSwweDcyLDB4MjIsMHgwYywweDAwLDB4OTMsMHgzMCwweDA1LDB4YzQsMHgwYiwweDMyLDB4MjIsMHgyOCwweDAwIH0gfSwKK3sgIDE2LCAweGIzNDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MTYsMHgwMCwweGIyLDB4ODAsMHgzMSwweDIwIH0gfSwKK3sgIDE2LCAweGIzNTAsIDAsIHsweDBjLDB4NTgsMHgwMywweDFlLDB4MDAsMHhmNywweDgwLDB4MzksMHhmOCwweDBiLDB4N2MsMHgyMiwweGNlLDB4NDAsMHhjZiwweDgwIH0gfSwKK3sgIDE2LCAweGIzNjAsIDAsIHsweDliLDB4NjAsMHgyZSwweDNiLDB4MDMsMHgxYSwweDAwLDB4YzcsMHhhOCwweDExLDB4ZTAsMHgwZiwweDc4LDB4MDMsMHgyYSwweDAyIH0gfSwKK3sgIDE2LCAweGIzNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDFkLDB4YTQsMHgwMCwweGZhLDB4MDAsMHgzZSwweGMwIH0gfSwKK3sgIDE2LCAweGIzODAsIDAsIHsweDBmLDB4OTAsMHgyMywweGU4LDB4MDAsMHhmYiwweDAwLDB4M2UsMHhkMCwweDJkLDB4YjYsMHgwMywweGVkLDB4MDIsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGIzOTAsIDAsIHsweDMyLDB4NDAsMHgwZCwweGIwLDB4MDcsMHhlYywweDAwLDB4ZmIsMHg2MCwweDNlLDB4YzgsMHgwZiwweGI1LDB4MDMsMHhjMiwweDA2IH0gfSwKK3sgIDE2LCAweGIzYTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHgwMCwweGZmLDB4ODAsMHgzMywweGEwIH0gfSwKK3sgIDE2LCAweGIzYjAsIDAsIHsweDBjLDB4ZjgsMHgwYiwweDMyLDB4NDAsMHhjZSwweDgxLDB4MzcsMHhmMCwweDBjLDB4YmMsMHgwMywweGZlLDB4MDAsMHhmZiwweDg0IH0gfSwKK3sgIDE2LCAweGIzYzAsIDAsIHsweDMzLDB4ZTAsMHgyYywweGY4LDB4ODMsMHhlNiwweDAyLDB4Y2YsMHg4NSwweDMzLDB4ZjAsMHgwYywweGZjLDB4MDMsMHgwMCwweDE0IH0gfSwKK3sgIDE2LCAweGIzZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4OWMsMHgwMCwweGJlLDB4MDAsMHgzNSwweGM2IH0gfSwKK3sgIDE2LCAweGIzZTAsIDAsIHsweDI4LDB4MzAsMHgwMiwweDMwLDB4NDAsMHg4NywweDAwLDB4MjMsMHhjMCwweDA4LDB4N2EsMHgwMiwweGRjLDB4MDAsMHhiZSwweDAwIH0gfSwKK3sgIDE2LCAweGIzZjAsIDAsIHsweDIzLDB4YzAsMHgwOCwweDcwLDB4MTIsMHhmZSwweDAwLDB4ODcsMHgwMCwweDIxLDB4YzAsMHgwOCwweGYwLDB4MDIsMHgyYSwweDA0IH0gfSwKK3sgIDE2LCAweGI0MDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTUsMHgyMCwweGI2LDB4MDAsMHgyMCwweDgwIH0gfSwKK3sgIDE2LCAweGI0MTAsIDAsIHsweDA4LDB4MzEsMHgwMiwweDVjLDB4MDEsMHg4NywweDAwLDB4MjUsMHhjMCwweDA4LDB4NzIsMHgwMiwweGRjLDB4MDAsMHhiNiwweDAwIH0gfSwKK3sgIDE2LCAweGI0MjAsIDAsIHsweDIxLDB4ZDAsMHgwOSwweDcwLDB4MDIsMHhkNCwweDA4LDB4OTMsMHgwMCwweDIwLDB4YzAsMHgwOCwweDcwLDB4MDIsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGI0MzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDE0LDB4YzQsMHgwMCwweGIwLDB4ZTAsMHgyNCwweDYwIH0gfSwKK3sgIDE2LCAweGI0NDAsIDAsIHsweDA4LDB4MjAsMHgwNiwweDQ4LDB4MDEsMHg4MCwweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweGNjLDB4MDQsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweGI0NTAsIDAsIHsweDIwLDB4ODQsMHgwYiwweDMwLDB4MDIsMHhlOCwweDAwLDB4OWIsMHgwMCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHgwOCwweDA0IH0gfSwKK3sgIDE2LCAweGI0NjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YWMsMHgwMCwweGI5LDB4ZTAsMHgzMiwweDgwIH0gfSwKK3sgIDE2LCAweGI0NzAsIDAsIHsweDZjLDB4YjAsMHgyMywweDZmLDB4MDAsMHhjMywweDAwLDB4MzcsMHhjMSwweDNjLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmYSwweDAwIH0gfSwKK3sgIDE2LCAweGI0ODAsIDAsIHsweGIwLDB4YzAsMHgwOSwweGYwLDB4MDMsMHhlYywweDEwLDB4ZGYsMHgwMCwweDczLDB4YzAsMHgwYywweGYwLDB4MGIsMHgyYSwweDAwIH0gfSwKK3sgIDE2LCAweGI0OTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4ZWMsMHgxMCwweGY4LDB4MDAsMHgzZSwweDQyIH0gfSwKK3sgIDE2LCAweGI0YTAsIDAsIHsweDBmLDB4MjQsMHgwMywweGE4LDB4NjAsMHhmOCwweDAwLDB4M2MsMHhjMSwweDBmLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmOSwweDQwIH0gfSwKK3sgIDE2LCAweGI0YjAsIDAsIHsweDNlLDB4ODAsMHgwNCwweGIwLDB4MjMsMHhlMSwweDAwLDB4ZWIsMHgwMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGI0YzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZjQsMHgwMCwweGVlLDB4MDAsMHgzZCwweDMwIH0gfSwKK3sgIDE2LCAweGI0ZDAsIDAsIHsweDBjLDB4YzAsMHgwMywweDE0LDB4MDAsMHhjYywweGEwLDB4YjMsMHhjMCwweDRjLDB4NzAsMHgwMywweDVjLDB4MTAsMHhkZiwweDAwIH0gfSwKK3sgIDE2LCAweGI0ZTAsIDAsIHsweDNmLDB4MDAsMHgwYywweGYwLDB4MDMsMHhmOCwweDAwLDB4Y2YsMHgwMCwweDIzLDB4YzAsMHgwYywweGYwLDB4MDMsMHgwMCwweDQwIH0gfSwKK3sgIDE2LCAweGI0ZjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MSwweDA0LDB4NjQsMHgwMCwweGJhLDB4ODEsMHgyZSwweDU4IH0gfSwKK3sgIDE2LCAweGI1MDAsIDAsIHsweDA4LDB4ODgsMHgwMiwweDI3LDB4ODAsMHg4OSwweDIwLDB4MjIsMHhjMCwweDI4LDB4YjAsMHgwMiwweDJjLDB4MDAsMHg4OCwweDgzIH0gfSwKK3sgIDE2LCAweGI1MTAsIDAsIHsweDJlLDB4MjAsMHgwNSwweGIwLDB4NjIsMHhlMywweDAwLDB4OGIsMHgwMCwweDJhLDB4YzAsMHgwOCwweGIwLDB4MDMsMHg2MCwweDQwIH0gfSwKK3sgIDE2LCAweGI1MjAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MjYsMHgwMCwweGI5LDB4ODEsMHgyZSwweDQwIH0gfSwKK3sgIDE2LCAweGI1MzAsIDAsIHsweDA4LDB4OGMsMHgwNiwweDI2LDB4MDAsMHg4OCwweDAwLDB4MjIsMHhjMCwweDA4LDB4YjAsMHgxNiwweDZjLDB4MDAsMHg5OCwweDg4IH0gfSwKK3sgIDE2LCAweGI1NDAsIDAsIHsweDJlLDB4MjAsMHgwOCwweGIwLDB4MDQsMHhlMywweDAxLDB4MGIsMHgwMCwweDI4LDB4YzAsMHgwOCwweDMwLDB4MDIsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGI1NTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDQsMHgwMCwweGIwLDB4MDAsMHgyYywweGMwIH0gfSwKK3sgIDE2LCAweGI1NjAsIDAsIHsweDI4LDB4MDAsMHgwZSwweDAwLDB4MTAsMHg4MCwweDAwLDB4MjAsMHhjMCwweDA4LDB4MzIsMHgwMiwweDBjLDB4MDAsMHg4MCwweDA0IH0gfSwKK3sgIDE2LCAweGI1NzAsIDAsIHsweDJlLDB4MjAsMHgwOSwweDMwLDB4MDIsMHhjNCwweDEyLDB4ODMsMHgwMCwweDI4LDB4YzAsMHgwOCwweDMwLDB4MDIsMHg0MiwweDAxIH0gfSwKK3sgIDE2LCAweGI1ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGZhLDB4MDAsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGI1OTAsIDAsIHsweDJjLDB4OTEsMHgwMywweDIwLDB4MDAsMHg4YSwweDAwLDB4MzMsMHhjMCwweDBjLDB4ZjAsMHgwMywweDdjLDB4MDAsMHhkOCwweDAwIH0gfSwKK3sgIDE2LCAweGI1YTAsIDAsIHsweDJlLDB4NDAsMHgwYywweGYwLDB4MDMsMHhlMCwweDgwLDB4Y2YsMHgwMCwweDNiLDB4YzAsMHgwYywweGYwLDB4MDMsMHgwMCwweDAzIH0gfSwKK3sgIDE2LCAweGI1YjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDFkLDB4ZmMsMHgwMCwweGZjLDB4MDEsMHgzZiwweDQwIH0gfSwKK3sgIDE2LCAweGI1YzAsIDAsIHsweDBmLDB4YzAsMHgxMywweGYwLDB4MDAsMHhmNCwweDAwLDB4M2YsMHhjMSwweDBmLDB4ZjQsMHgyMywweGZjLDB4MDgsMHhmYywweDAwIH0gfSwKK3sgIDE2LCAweGI1ZDAsIDAsIHsweDNmLDB4MDAsMHgwZiwweGYwLDB4MDMsMHhmMCwweDQwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhlOCwweDA2IH0gfSwKK3sgIDE2LCAweGI1ZTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHgyMCwweGNkLDB4MTAsMHgzOSwweGM4IH0gfSwKK3sgIDE2LCAweGI1ZjAsIDAsIHsweDBkLDB4YzEsMHgwMywweDNjLDB4ODAsMHhlZiwweDkwLDB4MjMsMHhkOCwweDBmLDB4ZjgsMHgwMCwweGZlLDB4MDAsMHhjZiwweDgwIH0gfSwKK3sgIDE2LCAweGI2MDAsIDAsIHsweDFmLDB4ZDAsMHgwZiwweGY5LDB4MDMsMHhmZiwweDAwLDB4ZTcsMHhjMCwweDMzLDB4YzQsMHgwZiwweGYwLDB4MDMsMHhiMCwweDAwIH0gfSwKK3sgIDE2LCAweGI2MTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDEwLDB4ZmUsMHgwMiwweDg5LDB4NDAsMHgyMywweGYwIH0gfSwKK3sgIDE2LCAweGI2MjAsIDAsIHsweDA4LDB4ODUsMHgxMCwweDNjLDB4MDAsMHg4YiwweDAwLDB4YTMsMHhkYywweDRiLDB4YjIsMHg4MiwweGVjLDB4MjAsMHg4YiwweDAwIH0gfSwKK3sgIDE2LCAweGI2MzAsIDAsIHsweDI2LDB4YzAsMHg0YiwweGIwLDB4MDIsMHhlYywweDEwLDB4YjksMHgwNCwweDJhLDB4YzksMHgwYiwweGI1LDB4ODAsMHhmMCwweDA0IH0gfSwKK3sgIDE2LCAweGI2NDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4Y2MsMHgwMCwweDgxLDB4NjQsMHgyOCwweGM0IH0gfSwKK3sgIDE2LCAweGI2NTAsIDAsIHsweDA5LDB4YjIsMHgwYSwweDBjLDB4ZjAsMHhhMywweDIwLDB4MjAsMHhjOCwweDBiLDB4MzIsMHgwMiwweGVjLDB4MDIsMHg4MywweDA4IH0gfSwKK3sgIDE2LCAweGI2NjAsIDAsIHsweDJjLDB4YzgsMHgwOSwweDMyLDB4MDIsMHhjYywweDgwLDB4YWIsMHhhMCwweDIwLDB4YzgsMHgwYiwweDMyLDB4MDAsMHhiMiwweDAxIH0gfSwKK3sgIDE2LCAweGI2NzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDE1LDB4YWMsMHgxMCwweDg5LDB4MDAsMHgyMiwweGMwIH0gfSwKK3sgIDE2LCAweGI2ODAsIDAsIHsweDA4LDB4YjIsMHgxMiwweDJjLDB4MDIsMHgwYiwweDAwLDB4MjIsMHhjMCwweDBiLDB4YjgsMHgwMiwweGVjLDB4MDAsMHg4YiwweDAwIH0gfSwKK3sgIDE2LCAweGI2OTAsIDAsIHsweDI2LDB4YzAsMHg0YiwweGIwLDB4NDYsMHhlYywweDAwLDB4YjksMHgwMCwweDBhLDB4YzAsMHgwYiwweGIwLDB4MDIsMHhmMCwweDA0IH0gfSwKK3sgIDE2LCAweGI2YTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhkMCwweDE1LDB4ZWMsMHgxMCwweGM5LDB4ZTAsMHgzYSwweGMwIH0gfSwKK3sgIDE2LCAweGI2YjAsIDAsIHsweDBkLDB4MjgsMHgwMywweDJjLDB4MDAsMHhlYiwweDEwLDB4MzIsMHhjMCwweDBmLDB4ODIsMHgwMywweGM0LDB4MDAsMHhjYiwweDAwIH0gfSwKK3sgIDE2LCAweGI2YzAsIDAsIHsweDNlLDB4YzEsMHgwZiwweGIwLDB4MDYsMHhlYywweDA4LDB4ZTksMHgwMCwweGIyLDB4YzAsMHgwZiwweGIwLDB4MTMsMHg5MCwweDA0IH0gfSwKK3sgIDE2LCAweGI2ZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4OWMsMHgwMCwweGY1LDB4YTAsMHgzZiwweGMwIH0gfSwKK3sgIDE2LCAweGI2ZTAsIDAsIHsweDBmLDB4ZTgsMHgwMywweGZjLDB4MDgsMHhmZiwweDAwLDB4M2YsMHhjMCwweDhmLDB4YzAsMHgwMywweGZjLDB4MDAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweGI2ZjAsIDAsIHsweDM3LDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmYywweDAwLDB4ZmYsMHgwNCwweDNlLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGI3MDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg1MCwweDEwLDB4YWMsMHgwMCwweGY5LDB4NDAsMHgzNCwweGMwIH0gfSwKK3sgIDE2LCAweGI3MTAsIDAsIHsweDBkLDB4YjQsMHgwMywweDJjLDB4MDAsMHhkYiwweDQwLDB4M2UsMHhjMCwweDJjLDB4ODAsMHgwMywweDY0LDB4MDgsMHhmYiwweDEwIH0gfSwKK3sgIDE2LCAweGI3MjAsIDAsIHsweDNlLDB4YzYsMHg4ZiwweGIwLDB4MDMsMHhlYywweDAwLDB4ZjksMHg4MCwweDMyLDB4YzAsMHgwYywweGIwLDB4MGIsMHgxNCwweDA0IH0gfSwKK3sgIDE2LCAweGI3MzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4M2UsMHgyMCwweGU5LDB4YzgsMHgzNywweGQ0IH0gfSwKK3sgIDE2LCAweGI3NDAsIDAsIHsweDQ4LDB4YWEsMHgyMiwweDFjLDB4MDAsMHg4YiwweDAwLDB4NmYsMHhlMCwweDA4LDB4ODUsMHg4MiwweGVkLDB4NDAsMHhiYiwweDg0IH0gfSwKK3sgIDE2LCAweGI3NTAsIDAsIHsweDJmLDB4YzAsMHg0YiwweGI4LDB4MDMsMHhhZCwweDQwLDB4YjMsMHgwMCwweDIzLDB4ZDQsMHgwOCwweGY3LDB4MDIsMHgzMiwweDAwIH0gfSwKK3sgIDE2LCAweGI3NjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4NGMsMHgwMCwweGIxLDB4NjQsMHhhNCwweGMwIH0gfSwKK3sgIDE2LCAweGI3NzAsIDAsIHsweDA5LDB4MjAsMHgwYSwweDBjLDB4MDQsMHhiOCwweDAwLDB4NmMsMHhjMCwweDA4LDB4MzgsMHgwMiwweGM4LDB4NDAsMHhiMywweDgwIH0gfSwKK3sgIDE2LCAweGI3ODAsIDAsIHsweDJjLDB4ZDEsMHgwYiwweDMwLDB4MDIsMHhjYywweDA0LDB4YjMsMHgwMCwweDI4LDB4YzAsMHgwOCwweDMwLDB4MDIsMHgzYSwweDAwIH0gfSwKK3sgIDE2LCAweGI3OTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiMCwweDAxLDB4MWUsMHgwMCwweGE1LDB4ODAsMHgyNSwweGUwIH0gfSwKK3sgIDE2LCAweGI3YTAsIDAsIHsweDg4LDB4M2EsMHgxMiwweDFlLDB4MDAsMHhhNiwweDkwLDB4MmQsMHhlMiwweDA4LDB4NzksMHgwMiwweGRhLDB4MDAsMHhiNywweDgyIH0gfSwKK3sgIDE2LCAweGI3YjAsIDAsIHsweDJkLDB4ZTAsMHgwMywweDc4LDB4ODIsMHg5ZSwweDAwLDB4YmMsMHhjMSwweDI5LDB4ZTAsMHgwOCwweDc4LDB4MDIsMHgyYywweDEwIH0gfSwKK3sgIDE2LCAweGI3YzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OSwweDA4LDB4MGMsMHgwMCwweGYzLDB4MDAsMHgzNCwweGMwIH0gfSwKK3sgIDE2LCAweGI3ZDAsIDAsIHsweDBkLDB4M2UsMHgwMywweDBjLDB4MDAsMHhmMCwweDQwLDB4MmUsMHhjMCwweDBjLDB4MzAsMHg0MywweGM4LDB4MDAsMHhmMywweDAwIH0gfSwKK3sgIDE2LCAweGI3ZTAsIDAsIHsweDNjLDB4YzAsMHgwNywweDMwLDB4MDMsMHhjYywweDgwLDB4ZjIsMHgwMCwweDM4LDB4YzAsMHgwYywweDMwLDB4MDMsMHgxMiwweDAyIH0gfSwKK3sgIDE2LCAweGI3ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE5LDB4YmQsMHgyMCwweGY3LDB4MDAsMHgzZiwweGMyIH0gfSwKK3sgIDE2LCAweGI4MDAsIDAsIHsweDBmLDB4ZjEsMHgwYiwweGRjLDB4MjAsMHhkZSwweDA0LDB4M2YsMHhkMiwweDA3LDB4ZjAsMHgxMywweGY4LDB4NDAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweGI4MTAsIDAsIHsweDNmLDB4YzAsMHgwNywweGYwLDB4MDMsMHhmYywweDAwLDB4ZmQsMHgwMCwweDM3LDB4YzAsMHgwZiwweDcwLDB4MDMsMHhkMCwweDA2IH0gfSwKK3sgIDE2LCAweGI4MjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhYSwweDA1LDB4Y2YsMHgwMCwweGRjLDB4MDAsMHgzZSwweGNhIH0gfSwKK3sgIDE2LCAweGI4MzAsIDAsIHsweDBmLDB4YTAsMHgwMCwweGFjLDB4OTIsMHhjOSwweDAwLDB4MzIsMHhjMCwweDBmLDB4YjAsMHgxMSwweGE0LDB4MDgsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweGI4NDAsIDAsIHsweDJlLDB4YzAsMHg0ZiwweGIwLDB4MjMsMHhlYywweDAwLDB4ZjksMHgwMCwweDNlLDB4YzQsMHgwZiwweGIwLDB4MDMsMHhlYSwweDAwIH0gfSwKK3sgIDE2LCAweGI4NTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDkxLDB4OWMsMHgwMCwweDg0LDB4MDAsMHgwMSwweGMwIH0gfSwKK3sgIDE2LCAweGI4NjAsIDAsIHsweDRiLDB4NzAsMHgyMiwweDFjLDB4YzAsMHg4NywweDAwLDB4MjEsMHhjMCwweDRiLDB4NzAsMHgwMiwweDFjLDB4MDAsMHhiNywweDAxIH0gfSwKK3sgIDE2LCAweGI4NzAsIDAsIHsweDI1LDB4ZDgsMHgwYiwweDcwLDB4MjIsMHhkYywweDAwLDB4YjYsMHgwMCwweDJkLDB4YzAsMHgwYiwweDcyLDB4MjIsMHhmMiwweDA0IH0gfSwKK3sgIDE2LCAweGI4ODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4OWUsMHg4MCwweDk3LDB4ODAsMHhhOSwweGUwIH0gfSwKK3sgIDE2LCAweGI4OTAsIDAsIHsweDBiLDB4ZjgsMHgwMiwweGNlLDB4MDgsMHg4NSwweDgwLDB4MjksMHhlOCwweDBiLDB4ZmMsMHgwMiwweDE3LDB4MDAsMHhiNywweDgwIH0gfSwKK3sgIDE2LCAweGI4YTAsIDAsIHsweDJkLDB4ZTAsMHg4YiwweDc4LDB4MDIsMHhkZSwweDAwLDB4YjQsMHhjMCwweDJkLDB4ZTgsMHgwYiwweDc5LDB4MDIsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGI4YjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE0LDB4Y2MsMHgwMCwweDgzLDB4MDgsMHhhMCwweGMwIH0gfSwKK3sgIDE2LCAweGI4YzAsIDAsIHsweDhiLDB4M2MsMHgwMiwweDRjLDB4MDAsMHg4MywweDAwLDB4YTAsMHhjMCwweDFiLDB4M2MsMHgwYSwweDBmLDB4MjksMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweGI4ZDAsIDAsIHsweDI0LDB4YzAsMHgwYiwweDMwLDB4MDIsMHhjYywweDAwLDB4YjMsMHg4MCwweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhkMiwweDA0IH0gfSwKK3sgIDE2LCAweGI4ZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweGRlLDB4MDAsMHgzYSwweDgwIH0gfSwKK3sgIDE2LCAweGI4ZjAsIDAsIHsweDBmLDB4ZWEsMHgwMiwweGU4LDB4MDAsMHhjZSwweDAwLDB4M2EsMHg4MCwweDBmLDB4ZTAsMHgwMywweDM4LDB4MDAsMHhmYSwweDAwIH0gfSwKK3sgIDE2LCAweGI5MDAsIDAsIHsweDNlLDB4ODAsMHgwZiwweGEwLDB4MDMsMHhlOCwweDAwLDB4ZmUsMHgwMCwweDNlLDB4ODAsMHgwYiwweGEwLDB4MDMsMHhmYSwweDA0IH0gfSwKK3sgIDE2LCAweGI5MTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4MDQsMHhiYSwweDAxIH0gfSwKK3sgIDE2LCAweGI5MjAsIDAsIHsweDBmLDB4ODIsMHgwYiwweDgwLDB4MDQsMHhmOCwweDgwLDB4M2UsMHgwMCwweDBmLDB4ODYsMHgwMywweDYwLDB4MDAsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGI5MzAsIDAsIHsweDM2LDB4MDAsMHgwZiwweDgwLDB4MjMsMHhlMSwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiwweDAwIH0gfSwKK3sgIDE2LCAweGI5NDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMSwweGY5LDB4MDAsMHgzMiwweDQwIH0gfSwKK3sgIDE2LCAweGI5NTAsIDAsIHsweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHg0OSwweDAwLDB4MzIsMHg0MCwweDBiLDB4OTAsMHgwMywweDI0LDB4MDAsMHg0OSwweDAwIH0gfSwKK3sgIDE2LCAweGI5NjAsIDAsIHsweDNjLDB4NDAsMHgwZCwweDkwLDB4MDMsMHhlNCwweDA4LDB4YzksMHgwMCwweDNlLDB4NjAsMHgwYywweDkwLDB4MDMsMHgwMiwweDA0IH0gfSwKK3sgIDE2LCAweGI5NzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NjQsMHgwMCwweGI5LDB4NDAsMHhhMiwweDY0IH0gfSwKK3sgIDE2LCAweGI5ODAsIDAsIHsweDBiLDB4MTgsMHgwMiwweDI1LDB4MDAsMHhkMSwweDUwLDB4MzYsMHg1MCwweDRlLDB4OTAsMHgwYSwweDI0LDB4MDIsMHg4OSwweDQwIH0gfSwKK3sgIDE2LCAweGI5OTAsIDAsIHsweDNhLDB4NTEsMHgwOCwweDk0LDB4MDIsMHhlNSwweDIyLDB4ODksMHg0NCwweDJlLDB4NjAsMHgyOCwweDkwLDB4MGEsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGI5YTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4MjQsMHgwMCwweGIxLDB4MDgsMHgyMiwweDQwIH0gfSwKK3sgIDE2LCAweGI5YjAsIDAsIHsweDRiLDB4OTIsMHg4MiwweGE1LDB4MDAsMHhhOSwweDA4LDB4MjIsMHg1MCwweDBhLDB4MTAsMHgwMiwweDBjLDB4MDAsMHhhOSwweDQwIH0gfSwKK3sgIDE2LCAweGI5YzAsIDAsIHsweDZlLDB4NTAsMHgwYiwweDk0LDB4MDIsMHhjNCwweDA0LDB4ODksMHg0NCwweDZjLDB4NDgsMHg4OCwweDEwLDB4MDIsMHg0NiwweDAwIH0gfSwKK3sgIDE2LCAweGI5ZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDQsMHgwMCwweGIxLDB4NDAsMHhlMCwweDQwIH0gfSwKK3sgIDE2LCAweGI5ZTAsIDAsIHsweDFiLDB4MTQsMHgwYSwweDA0LDB4MDAsMHhiOSwweDAwLDB4MjQsMHg0MCwweDFhLDB4MTAsMHgyMiwweDA0LDB4MDAsMHhhMSwweDAwIH0gfSwKK3sgIDE2LCAweGI5ZjAsIDAsIHsweDI4LDB4NDAsMHgwYSwweDEwLDB4MTIsMHhjNCwweDAwLDB4ODEsMHgwMiwweDZjLDB4NDAsMHgwOCwweDEyLDB4MDIsMHg0MiwweDAxIH0gfSwKK3sgIDE2LCAweGJhMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwOCwweGIwLDB4MDAsMHgzMiwweDAwIH0gfSwKK3sgIDE2LCAweGJhMTAsIDAsIHsweDRmLDB4ODAsMHgwMiwweGExLDB4NTAsMHhlMCwweDUwLDB4MzIsMHgxNCwweDBlLDB4YTUsMHgyMywweDIxLDB4NDAsMHhlOCwweDUwIH0gfSwKK3sgIDE2LCAweGJhMjAsIDAsIHsweDNlLDB4MTQsMHgwZiwweDg1LDB4MDMsMHhlMSwweDQwLDB4YzgsMHg1MCwweDFlLDB4MTQsMHgwYywweDg1LDB4NDMsMHg2ZSwweDAzIH0gfSwKK3sgIDE2LCAweGJhMzAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhkOCwweDE5LDB4ZTUsMHgwMCwweGZkLDB4NDAsMHgzZSwweDUwIH0gfSwKK3sgIDE2LCAweGJhNDAsIDAsIHsweDBmLDB4NzQsMHgwMywweGE1LDB4MDAsMHg1ZCwweDAwLDB4M2UsMHg1MCwweDBhLDB4NTAsMHgxMywweGY0LDB4MDAsMHhkOSwweDAwIH0gfSwKK3sgIDE2LCAweGJhNTAsIDAsIHsweDNhLDB4NTAsMHgwZCwweDkwLDB4MTMsMHhlNCwweDAwLDB4ZmYsMHgwMCwweDNlLDB4NTAsMHgwZiwweDkxLDB4MDMsMHhhNiwweDA2IH0gfSwKK3sgIDE2LCAweGJhNjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZjYsMHg5MCwweGJkLDB4ZTgsMHgyMywweDZiIH0gfSwKK3sgIDE2LCAweGJhNzAsIDAsIHsweDBiLDB4ZGEsMHgwYiwweDM2LDB4ODAsMHhjOSwweDAwLDB4MzIsMHg2OCwweDQ2LDB4OTAsMHg0MywweGU0LDB4MDAsMHg0OSwweDAwIH0gfSwKK3sgIDE2LCAweGJhODAsIDAsIHsweDMyLDB4NjgsMHgwYywweDkwLDB4MDMsMHgyNCwweDQwLDB4ZjksMHgwMCwweDMyLDB4NjAsMHgwYywweDljLDB4MDMsMHhjNiwweDAxIH0gfSwKK3sgIDE2LCAweGJhOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg3OCwweDEwLDB4ZTEsMHgwMCwweGI4LDB4ZTAsMHhhMiwweDExIH0gfSwKK3sgIDE2LCAweGJhYTAsIDAsIHsweDBiLDB4OGUsMHgwYSwweDIzLDB4MjIsMHg4OCwweDgwLDB4MmEsMHgzMSwweDI4LDB4ODgsMHgwMiwweDYyLDB4MDAsMHg4OCwweDgwIH0gfSwKK3sgIDE2LCAweGJhYjAsIDAsIHsweGEyLDB4MzAsMHgyOCwweDg4LDB4OGEsMHgyMiwweDAwLDB4YjgsMHhhOCwweGEyLDB4MzksMHgwOCwweGNhLDB4MDIsMHhjZSwweDA0IH0gfSwKK3sgIDE2LCAweGJhYzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA1LDB4YzUsMHgwOCwweDIxLDB4MDAsMHgwMCwweDQwIH0gfSwKK3sgIDE2LCAweGJhZDAsIDAsIHsweDAzLDB4MTQsMHg4MiwweDg1LDB4ODAsMHhhZCwweDA4LDB4MjEsMHg1MiwweDk4LDB4NTAsMHg4MiwweDM0LDB4MjMsMHg4NSwweDA4IH0gfSwKK3sgIDE2LCAweGJhZTAsIDAsIHsweDIxLDB4NTIsMHgwOCwweDUwLDB4MDYsMHg1NCwweDAwLDB4YjUsMHgyMCwweDIxLDB4NWEsMHgwOSwweDU0LDB4MDIsMHhkMiwweDAxIH0gfSwKK3sgIDE2LCAweGJhZjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDExLDB4YTQsMHgwMCwweGI5LDB4NjEsMHgyMiwweDQwIH0gfSwKK3sgIDE2LCAweGJiMDAsIDAsIHsweDBiLDB4OTAsMHgwNiwweDA0LDB4MDAsMHhhZCwweDAwLDB4NjksMHg0MCwweDA4LDB4ZDAsMHgwMiwweDc0LDB4MDAsMHg4NSwweDAwIH0gfSwKK3sgIDE2LCAweGJiMTAsIDAsIHsweDAxLDB4NDAsMHgwMCwweDcwLDB4MDYsMHg3NCwweDA0LDB4YjUsMHgwMCwweDIzLDB4NDAsMHgwOSwweGQwLDB4MDIsMHhjNiwweDA0IH0gfSwKK3sgIDE2LCAweGJiMjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE0LDB4YTQsMHgwMCwweGU5LDB4MDAsMHgzMiwweDQwIH0gfSwKK3sgIDE2LCAweGJiMzAsIDAsIHsweDRmLDB4OTUsMHgwYiwweGE0LDB4MDAsMHhlOSwweDAwLDB4MzIsMHg0MCwweDhjLDB4OTAsMHgwMywweDI0LDB4MDAsMHhjOSwweDAwIH0gfSwKK3sgIDE2LCAweGJiNDAsIDAsIHsweDMyLDB4NDAsMHgwYywweDkwLDB4MDMsMHg2NCwweDA4LDB4ZjksMHgwMCwweDMyLDB4NDAsMHgzZCwweDkwLDB4MDMsMHhlOCwweDA0IH0gfSwKK3sgIDE2LCAweGJiNTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2OCwweDAxLDB4YTQsMHgwOCwweGY5LDB4MDAsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweGJiNjAsIDAsIHsweDRmLDB4OTAsMHg4YiwweGU0LDB4MDQsMHhkOSwweDAxLDB4M2UsMHg0MCwweDBkLDB4OTAsMHgwMywweDY0LDB4MDAsMHhkOSwweDAxIH0gfSwKK3sgIDE2LCAweGJiNzAsIDAsIHsweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhhNCwweDAwLDB4ZjksMHgwMCwweDNjLDB4NDAsMHgwZSwweDkwLDB4MDMsMHhkYSwweDAwIH0gfSwKK3sgIDE2LCAweGJiODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGY4LDB4NDAsMHgzNiwweDIwIH0gfSwKK3sgIDE2LCAweGJiOTAsIDAsIHsweDE3LDB4ODQsMHgwMywweDIwLDB4MjEsMHhjOCwweDAwLDB4N2UsMHgwMiwweDJjLDB4ODAsMHg0MywweDIwLDB4MDAsMHhlOCwweDAyIH0gfSwKK3sgIDE2LCAweGJiYTAsIDAsIHsweDNlLDB4MDEsMHgwZiwweDgwLDB4MDMsMHhlMCwweDAwLDB4YzgsMHg0MCwweDFlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhjYSwweDA0IH0gfSwKK3sgIDE2LCAweGJiYjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4MmEsMHg4OCwweGI2LDB4MDIsMHgyMywweGEwIH0gfSwKK3sgIDE2LCAweGJiYzAsIDAsIHsweDBiLDB4ZWMsMHg0MiwweDJiLDB4MDAsMHhkMiwweDgwLDB4NmUsMHhiMSwweDA4LDB4YTAsMHgyMiwweDA4LDB4MDAsMHhlYSwweDA0IH0gfSwKK3sgIDE2LCAweGJiZDAsIDAsIHsweDNhLDB4ODAsMHg5ZiwweGEwLDB4MDMsMHhhOCwweDAwLDB4OGEsMHgwNCwweDJlLDB4ODAsMHgwYiwweGE4LDB4MDIsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGJiZTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweGIyLDB4MDAsMHhhNCwweGUxIH0gfSwKK3sgIDE2LCAweGJiZjAsIDAsIHsweDhiLDB4YjQsMHgzMiwweDQ3LDB4NDUsMHg4MywweDkwLDB4MmMsMHhmNCwweDRiLDB4MzgsMHgxMiwweDBlLDB4NDQsMHhhMywweDAxIH0gfSwKK3sgIDE2LCAweGJjMDAsIDAsIHsweDJjLDB4YzAsMHg0YiwweDMwLDB4MDIsMHhjZSwweDAwLDB4OTMsMHgwMCwweDZjLDB4YzAsMHgwYiwweDM4LDB4MDIsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGJjMTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDAxLDB4MWMsMHgwMCwweGI3LDB4NDQsMHgyMSwweGMyIH0gfSwKK3sgIDE2LCAweGJjMjAsIDAsIHsweDBiLDB4NTQsMHgwMiwweDU0LDB4MDUsMHg4NywweDAwLDB4MmMsMHg0MCwweDliLDB4NmMsMHgwMiwweDE4LDB4MTAsMHhhNywweDA0IH0gfSwKK3sgIDE2LCAweGJjMzAsIDAsIHsweDI5LDB4YzAsMHgwYSwweDcwLDB4MDIsMHg5YiwweDAwLDB4OTcsMHgwNCwweDBkLDB4ODAsMHgwYiwweDYwLDB4ODIsMHhlOCwweDAwIH0gfSwKK3sgIDE2LCAweGJjNDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgwMCwweGYzLDB4ODAsMHgzNSwweGUwIH0gfSwKK3sgIDE2LCAweGJjNTAsIDAsIHsweDBiLDB4MzgsMHgwMiwweDUyLDB4MTAsMHg4NCwweDgwLDB4MmQsMHhhMCwweDBmLDB4ZjgsMHgwYiwweDFlLDB4MDAsMHhlNiwweDgwIH0gfSwKK3sgIDE2LCAweGJjNjAsIDAsIHsweDFkLDB4YTAsMHgwYiwweDY4LDB4MDMsMHhmZSwweDAyLDB4ZDYsMHg4MCwweDNkLDB4ZTAsMHgwZiwweDc4LDB4MDMsMHhlYSwweDAyIH0gfSwKK3sgIDE2LCAweGJjNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYSwweDFkLDB4YWMsMHgwMCwweGZiLDB4MDAsMHgzZSwweGMxIH0gfSwKK3sgIDE2LCAweGJjODAsIDAsIHsweDhiLDB4OTAsMHgwYiwweDgwLDB4MGEsMHhiOCwweDAxLDB4MmUsMHgwMCwweDBjLDB4YjAsMHgwMywweGU4LDB4MDAsMHhmYSwweDAwIH0gfSwKK3sgIDE2LCAweGJjOTAsIDAsIHsweDNlLDB4YzAsMHgwZiwweGEwLDB4NDMsMHhlYywweDAwLDB4ZWIsMHgwMCwweDNlLDB4ODAsMHgwZiwweGE2LDB4MjMsMHhjMiwweDAyIH0gfSwKK3sgIDE2LCAweGJjYTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHgwMCwweGZlLDB4ODAsMHgzMywweDIwIH0gfSwKK3sgIDE2LCAweGJjYjAsIDAsIHsweDRlLDB4YzksMHgxMiwweGY2LDB4NTAsMHhlZiwweDkwLDB4M2YsMHhlMCwweDBjLDB4MTksMHgwMCwweGI2LDB4NDIsMHhjZiwweDIxIH0gfSwKK3sgIDE2LCAweGJjYzAsIDAsIHsweDNmLDB4ZTAsMHgwZSwweGY5LDB4MDIsMHhlNiwweGMwLDB4ZmYsMHg4MCwweDNmLDB4ZTAsMHg0YywweGRjLDB4MDMsMHg0MCwweDAwIH0gfSwKK3sgIDE2LCAweGJjZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhYSwweDExLDB4OTQsMHgwMCwweGI3LDB4MDAsMHg4MSwweDQwIH0gfSwKK3sgIDE2LCAweGJjZTAsIDAsIHsweDA4LDB4MDMsMHgwMiwweDE0LDB4YzQsMHg4NywweDAxLDB4MmQsMHhjOCwweDA4LDB4NmEsMHgxMiwweDM4LDB4NDAsMHg4NywweDAyIH0gfSwKK3sgIDE2LCAweGJjZjAsIDAsIHsweDJkLDB4YzAsMHgwOCwweDcxLDB4MTIsMHhkMiwweDgwLDB4YjcsMHgwMCwweDJkLDB4ODAsMHgwOCwweDYwLDB4MDIsMHgyYSwweDA0IH0gfSwKK3sgIDE2LCAweGJkMDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwMCwweGI3LDB4MTAsMHgyMSwweDgwIH0gfSwKK3sgIDE2LCAweGJkMTAsIDAsIHsweDA4LDB4ZjQsMHgxMiwweDk0LDB4MDQsMHhhNiwweDAwLDB4MmMsMHhjMCwweDE4LDB4ZDIsMHgwMiwweDE0LDB4NDgsMHg4NiwweDEwIH0gfSwKK3sgIDE2LCAweGJkMjAsIDAsIHsweDJkLDB4ODAsMHgwYSwweDYxLDB4MzIsMHhkNCwweDAwLDB4YjYsMHgxOCwweDJkLDB4YzQsMHgwOCwweDU4LDB4MDIsMHgwMCwweDEwIH0gfSwKK3sgIDE2LCAweGJkMzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDE0LDB4YzQsMHgwMCwweGIzLDB4MDAsMHgyMCwweGMwIH0gfSwKK3sgIDE2LCAweGJkNDAsIDAsIHsweDQwLDB4YjAsMHgyMiwweDA0LDB4MDAsMHg4MiwweDgxLDB4MGMsMHhjMCwweDA4LDB4MzAsMHgwYSwweDBhLDB4MDAsMHg4YSwweDAwIH0gfSwKK3sgIDE2LCAweGJkNTAsIDAsIHsweDJlLDB4YzAsMHgwOCwweGEwLDB4MDIsMHhjNCwweDAwLDB4YmIsMHgwMCwweDJlLDB4ODAsMHgwOCwweDIwLDB4MDIsMHgwOCwweDA0IH0gfSwKK3sgIDE2LCAweGJkNjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YWMsMHgwMCwweGZiLDB4MDAsMHhhMCwweGMwIH0gfSwKK3sgIDE2LCAweGJkNzAsIDAsIHsweDI0LDB4OTQsMHgyMywweGFjLDB4MTAsMHhlYiwweGEwLDB4MGUsMHhjMCwweDBjLDB4YjAsMHgwMiwweDJlLDB4MjAsMHhjOSwweDAwIH0gfSwKK3sgIDE2LCAweGJkODAsIDAsIHsweDJlLDB4NDAsMHgwZSwweDkwLDB4MDMsMHhlYywweDAwLDB4ZjksMHg4MCwweDNlLDB4NDAsMHg2YywweGEwLDB4MGIsMHgyYSwweDA0IH0gfSwKK3sgIDE2LCAweGJkOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4Y2MsMHgwMCwweGZiLDB4MDAsMHgzZSwweGMwIH0gfSwKK3sgIDE2LCAweGJkYTAsIDAsIHsweDg5LDB4OTAsMHgwMywweDJjLDB4MDAsMHhmYiwweDAyLDB4M2UsMHg0MCwweDRmLDB4YTAsMHgwMywweDZkLDB4MDEsMHhmYiwweDQxIH0gfSwKK3sgIDE2LCAweGJkYjAsIDAsIHsweDNlLDB4YzAsMHg4ZiwweGI0LDB4MDMsMHhlOCwweDAwLDB4ZmIsMHgyMCwweDNlLDB4NTAsMHgwZiwweGE0LDB4MDMsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGJkYzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMCwweGMzLDB4MjAsMHhiMiwweGMwIH0gfSwKK3sgIDE2LCAweGJkZDAsIDAsIHsweDBkLDB4ZDAsMHgwMywweDM4LDB4MDAsMHhjZCwweDAwLDB4M2YsMHg4MCwweDBkLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZCwweDAyIH0gfSwKK3sgIDE2LCAweGJkZTAsIDAsIHsweDM2LDB4MDAsMHgwYywweGQwLDB4MDMsMHgzZiwweDA4LDB4ZmMsMHgwNCwweDEyLDB4YzAsMHgwYywweGEwLDB4MDMsMHhjMCwweDQ0IH0gfSwKK3sgIDE2LCAweGJkZjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NmMsMHgwMiwweDhiLDB4YzgsMHgyMiwweGMwIH0gfSwKK3sgIDE2LCAweGJlMDAsIDAsIHsweDA4LDB4OTgsMHgwYSwweDJhLDB4NDAsMHg4OSwweDIwLDB4MmUsMHgwMSwweDhlLDB4YjAsMHgxMiwweGVjLDB4ODAsMHhiYiwweGYwIH0gfSwKK3sgIDE2LCAweGJlMTAsIDAsIHsweDIyLDB4ZTUsMHgwOCwweGJkLDB4MDIsMHgyZSwweDAwLDB4YmIsMHg5MCwweDIyLDB4ZWQsMHgwOCwweGEyLDB4MDIsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGJlMjAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweDhiLDB4MDEsMHgyMiwweDAwIH0gfSwKK3sgIDE2LCAweGJlMzAsIDAsIHsweDQ5LDB4YTgsMHgxZSwweDA0LDB4MDAsMHg4YiwweDAxLDB4MmUsMHhjMCwweDQ5LDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweGJlNDAsIDAsIHsweDIyLDB4NDAsMHgwYSwweDkwLDB4MDIsMHgyYywweDAwLDB4YjksMHgwMCwweDJhLDB4NDAsMHgwOCwweDgwLDB4MDIsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGJlNTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDQsMHgwMCwweDgxLDB4MDAsMHgyMCwweDQwIH0gfSwKK3sgIDE2LCAweGJlNjAsIDAsIHsweDA4LDB4MjAsMHgwMiwweDA0LDB4MDAsMHg4MywweDAwLDB4MmMsMHhjMCwweDBhLDB4MjAsMHg0MiwweGNjLDB4MDAsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweGJlNzAsIDAsIHsweDIwLDB4YzAsMHgwMiwweDMwLDB4MDIsMHgwOCwweDg0LDB4YjMsMHgwNCwweDA4LDB4NDAsMHgwOCwweDIwLDB4MDIsMHhjMiwweDExIH0gfSwKK3sgIDE2LCAweGJlODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweDhiLDB4MDAsMHhiMiwweDgwIH0gfSwKK3sgIDE2LCAweGJlOTAsIDAsIHsweDBkLDB4YjEsMHgwMywweDI0LDB4MDIsMHhjYiwweDAxLDB4M2UsMHhjMCwweDRkLDB4OTAsMHg0MywweGU0LDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGJlYTAsIDAsIHsweGIyLDB4MDAsMHgyZSwweDkwLDB4MGIsMHgyYywweDgwLDB4ZjgsMHgwMCwweGJhLDB4YzAsMHgyYywweDgwLDB4MDMsMHhjMCwweDAzIH0gfSwKK3sgIDE2LCAweGJlYjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDFkLDB4ZjQsMHgwMCwweDdkLDB4MDAsMHgzZiwweGMwIH0gfSwKK3sgIDE2LCAweGJlYzAsIDAsIHsweDBmLDB4NzIsMHgwMywweGQ0LDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBlLDB4ZjEsMHg0NywweGZjLDB4MDAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweGJlZDAsIDAsIHsweDNiLDB4YzAsMHgwZCwweGYwLDB4MTMsMHhmYywweDUwLDB4ZmYsMHgwMCwweDM3LDB4YzAsMHgwZiwweGUwLDB4MDMsMHhlOCwweDA2IH0gfSwKK3sgIDE2LCAweGJlZTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZjAsMHhjNCwweGNjLDB4MzMsMHgzZiwweDA0IH0gfSwKK3sgIDE2LCAweGJlZjAsIDAsIHsweDJjLDB4ZjYsMHgwMywweDM4LDB4NjAsMHhjYywweDkwLDB4YjMsMHgyMCwweDBmLDB4ZjEsMHgyMywweGYwLDB4NjAsMHhmZiwweDAxIH0gfSwKK3sgIDE2LCAweGJmMDAsIDAsIHsweDIzLDB4YzgsMHgwYywweGYyLDB4OGEsMHgzYywweDgxLDB4ZGYsMHgzMCwweDNmLDB4NjQsMHgwYywweGQ4LDB4MDMsMHgzMCwweDA0IH0gfSwKK3sgIDE2LCAweGJmMTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4ZTAsMHhjMiwweDhhLDB4MzAsMHgyZSwweDE4IH0gfSwKK3sgIDE2LCAweGJmMjAsIDAsIHsweDA4LDB4ZjUsMHgzMCwweGE1LDB4OTQsMHg1OCwweDIyLDB4MjIsMHgyMSwweDRiLDB4ZjMsMHgwMiwweGUxLDB4MDAsMHg5ZiwweDcwIH0gfSwKK3sgIDE2LCAweGJmMzAsIDAsIHsweDJiLDB4ZTQsMHgwYSwweGY0LDB4MTIsMHgxZCwweDQwLDB4YWYsMHg3MiwweDJjLDB4NDksMHgyZiwweDMwLDB4ODIsMHhhMCwweDA2IH0gfSwKK3sgIDE2LCAweGJmNDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzQsMHg4MCwweDgwLDB4YTAsMHgyYywweDk4IH0gfSwKK3sgIDE2LCAweGJmNTAsIDAsIHsweDA4LDB4MzIsMHgyMiwweDA4LDB4MDAsMHg4MiwweDAwLDB4MjgsMHgwMCwweDAzLDB4MzIsMHgwMiwweGMwLDB4ODQsMHhiMywweDBjIH0gfSwKK3sgIDE2LCAweGJmNjAsIDAsIHsweDIwLDB4YzAsMHg1OCwweDMyLDB4OTIsMHg4YywweDMwLDB4YTMsMHgyMCwweDJlLDB4YzAsMHg0OCwweDEyLDB4NDIsMHg2MiwweDAxIH0gfSwKK3sgIDE2LCAweGJmNzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDE1LDB4YTgsMHgwMCwweDhiLDB4MDAsMHgyZSwweDIwIH0gfSwKK3sgIDE2LCAweGJmODAsIDAsIHsweDA4LDB4YjAsMHgwYSwweDIwLDB4MDEsMHg5OCwweDAwLDB4MmEsMHgyMiwweDBiLDB4YjAsMHgwMiwweGU2LDB4MDAsMHg5YiwweDAwIH0gfSwKK3sgIDE2LCAweGJmOTAsIDAsIHsweDIyLDB4YzAsMHgwYSwweGIwLDB4MTIsMHhhYywweDA0LDB4YWIsMHgwMCwweDJlLDB4YzAsMHgwMywweGIwLDB4MDIsMHhmMCwweDAwIH0gfSwKK3sgIDE2LCAweGJmYTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE1LDB4ZTUsMHgwMCwweGM4LDB4MDAsMHgzZSwweGIwIH0gfSwKK3sgIDE2LCAweGJmYjAsIDAsIHsweDBjLDB4YjAsMHgwMywweDI5LDB4MDAsMHhjOCwweDAwLDB4M2EsMHgyMCwweDRmLDB4YjAsMHgwMywweGUyLDB4MjAsMHhmYiwweDAxIH0gfSwKK3sgIDE2LCAweGJmYzAsIDAsIHsweGIwLDB4YzAsMHgwYywweGIwLDB4MDMsMHgyYywweDAwLDB4ZmIsMHgwMiwweDNjLDB4NDEsMHgwYywweDkwLDB4NDMsMHg0OCwweDA0IH0gfSwKK3sgIDE2LCAweGJmZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4YTIsMHg4MCwweGZlLDB4NDAsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGJmZTAsIDAsIHsweDBmLDB4ZjAsMHg2MywweGVjLDB4MDAsMHhiZiwweGM0LDB4MTcsMHg0MiwweDBmLDB4ZjAsMHgwMywweGVjLDB4MDAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweGJmZjAsIDAsIHsweDFmLDB4YzEsMHgwZiwweGIwLDB4MDMsMHg1YywweDAwLDB4ZmIsMHgwMCwweDNmLDB4NDAsMHg0ZiwweGYwLDB4MDAsMHhiOCwweDAwIH0gfSwKK3sgIDE2LCAweGMwMDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YTUsMHgwMiwweGM4LDB4MDAsMHgzZSwweDkwIH0gfSwKK3sgIDE2LCAweGMwMTAsIDAsIHsweDJjLDB4YjAsMHgwYiwweDAxLDB4MDYsMHhjYiwweDAxLDB4M2UsMHg1MCwweDVmLDB4YjAsMHgxMywweDIxLDB4MTAsMHhjYiwweDAwIH0gfSwKK3sgIDE2LCAweGMwMjAsIDAsIHsweDdlLDB4YzAsMHgwYywweGIwLDB4MGIsMHgyYywweDAwLDB4Y2IsMHgwMCwweDMyLDB4YzAsMHgwYywweDkwLDB4MDMsMHgxMCwweDA0IH0gfSwKK3sgIDE2LCAweGMwMzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4MjgsMHgwMSwweDhiLDB4ZDAsMHgyYywweDM0IH0gfSwKK3sgIDE2LCAweGMwNDAsIDAsIHsweDQ4LDB4ZmYsMHgwMiwweDMwLDB4MDAsMHhhYSwweDA0LDB4MmUsMHg2OSwweDBmLDB4ZjAsMHgwMywweDY4LDB4MTAsMHhkZiwweDAwIH0gfSwKK3sgIDE2LCAweGMwNTAsIDAsIHsweDJmLDB4ZDQsMHgwZCwweGYwLDB4MDIsMHgzZSwweDAwLDB4NWYsMHgwNCwweGI2LDB4YzAsMHgwOCwweGIwLDB4MDMsMHg3MiwweDAwIH0gfSwKK3sgIDE2LCAweGMwNjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NjksMHg5MCwweDgxLDB4ODAsMHgyYywweDAwIH0gfSwKK3sgIDE2LCAweGMwNzAsIDAsIHsweDQ4LDB4YjgsMHgwMiwweDA4LDB4MDksMHg5OSwweDAwLDB4NGMsMHhiMCwweDBiLDB4MzAsMHgwMiwweDBjLDB4MDAsMHg4YiwweDAwIH0gfSwKK3sgIDE2LCAweGMwODAsIDAsIHsweDJjLDB4YzAsMHgwOSwweGIwLDB4NDAsMHgwYywweDQwLDB4ODMsMHgwMCwweDAwLDB4NDAsMHgwYSwweDkwLDB4MDIsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweGMwOTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAxLDB4MTYsMHgwMCwweDg0LDB4ODgsMHgyZCwweGU0IH0gfSwKK3sgIDE2LCAweGMwYTAsIDAsIHsweDQ4LDB4MzksMHgwMiwweDE2LDB4MDAsMHhiNCwweDgwLDB4MmQsMHhlMCwweDBhLDB4N2IsMHgwNiwweDVlLDB4MDAsMHg5NywweDgwIH0gfSwKK3sgIDE2LCAweGMwYjAsIDAsIHsweDJkLDB4ZTIsMHgwOSwweDc4LDB4MDIsMHgxZSwweDkwLDB4OTcsMHg4MCwweDI1LDB4NjQsMHg4YSwweDc4LDB4MDIsMHg0OCwweDAwIH0gfSwKK3sgIDE2LCAweGMwYzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGQsMHgwMCwweDgxLDB4MTAsMHgyYywweDk2IH0gfSwKK3sgIDE2LCAweGMwZDAsIDAsIHsweDA4LDB4MzEsMHgyMywweDBjLDB4MDAsMHg5MCwweDIwLDB4M2MsMHhjNCwweDFiLDB4YjgsMHgwMiwweDA4LDB4NDAsMHhjMywweDAwIH0gfSwKK3sgIDE2LCAweGMwZTAsIDAsIHsweDJjLDB4YzQsMHgwZCwweDMwLDB4MDMsMHgwZSwweDQwLDB4YzMsMHgxMCwweDMwLDB4YzAsMHg0ZSwweDEwLDB4MDcsMHgxYSwweDEyIH0gfSwKK3sgIDE2LCAweGMwZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDFkLDB4YmMsMHgwMCwweDdkLDB4MDUsMHgzZiwweGM1IH0gfSwKK3sgIDE2LCAweGMxMDAsIDAsIHsweDBmLDB4YjEsMHgwYiwweGY0LDB4MDAsMHhlZiwweDAwLDB4MWYsMHg0NSwweDBmLDB4ZjAsMHg0MywweGZjLDB4MDEsMHhmZiwweDQwIH0gfSwKK3sgIDE2LCAweGMxMTAsIDAsIHsweDNkLDB4YzQsMHgxZiwweGYwLDB4MDYsMHhmYywweDEwLDB4ZmYsMHgwMCwweDNiLDB4YzEsMHgyZCwweGYxLDB4MDMsMHhkMCwweDA2IH0gfSwKK3sgIDE2LCAweGMxMjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHgwNCwweGNiLDB4MDQsMHgzZSwweGEwIH0gfSwKK3sgIDE2LCAweGMxMzAsIDAsIHsweDQ0LDB4YjYsMHgwMywweDI4LDB4MDQsMHhjYiwweDgwLDB4MzIsMHg4MCwweDBmLDB4YjMsMHg5MywweDYwLDB4MDgsMHhmYiwweDIwIH0gfSwKK3sgIDE2LCAweGMxNDAsIDAsIHsweDNlLDB4ZDIsMHgxZiwweGIzLDB4MDMsMHgyZCwweDgwLDB4ZmIsMHg2MSwweDdlLDB4NDAsMHg4YywweDk4LDB4MDMsMHgyYSwweDAwIH0gfSwKK3sgIDE2LCAweGMxNTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDExLDB4ODQsMHgwYywweDg2LDB4MDUsMHgyZCwweGMwIH0gfSwKK3sgIDE2LCAweGMxNjAsIDAsIHsweDA4LDB4ZjQsMHg4MiwweDhjLDB4OTAsMHg4NSwweDAwLDB4YTEsMHhjMCwweDBiLDB4ZjAsMHgwMiwweDVjLDB4MDAsMHgzNywweDAwIH0gfSwKK3sgIDE2LCAweGMxNzAsIDAsIHsweDJkLDB4ZDAsMHgwYiwweDcxLDB4MDIsMHgxYywweGM4LDB4YjcsMHg0OCwweDJkLDB4NDAsMHgwYSwweDcwLDB4MDIsMHgxMiwweDA0IH0gfSwKK3sgIDE2LCAweGMxODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHgwMCwweDg3LDB4ODAsMHgyZCwweGExIH0gfSwKK3sgIDE2LCAweGMxOTAsIDAsIHsweDYwLDB4NzgsMHg0YSwweDE2LDB4ZDAsMHhhNywweDgwLDB4MjksMHhlMCwweDBiLDB4NzgsMHg1MiwweDk2LDB4MDEsMHhiNywweDkwIH0gfSwKK3sgIDE2LCAweGMxYTAsIDAsIHsweDJkLDB4ZTgsMHgwYiwweDdhLDB4MjIsMHg1ZSwweDQwLDB4YjcsMHhhMCwweDJmLDB4ZTEsMHg0OCwweDUwLDB4MjIsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweGMxYjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE0LDB4Y2MsMHgxMCwweDgzLDB4ODQsMHgyYywweGMwIH0gfSwKK3sgIDE2LCAweGMxYzAsIDAsIHsweDA4LDB4MzAsMHgwMiwweGE0LDB4MTAsMHg4MywweGNiLDB4MjgsMHhlMCwweDBiLDB4MzAsMHgyYSwweDRmLDB4NDAsMHg5MywweDAwIH0gfSwKK3sgIDE2LCAweGMxZDAsIDAsIHsweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHg0YywweDEwLDB4YjMsMHgwMiwweDJjLDB4YzAsMHhhYSwweDMwLDB4MDIsMHgxMiwweDA0IH0gfSwKK3sgIDE2LCAweGMxZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YjgsMHgwMCwweGNlLDB4YTAsMHgzZiwweDgwIH0gfSwKK3sgIDE2LCAweGMxZjAsIDAsIHsweDRjLDB4YTAsMHgyYiwweDNhLDB4MDAsMHhjZSwweDQwLDB4M2IsMHhiOCwweDBmLDB4YTAsMHgwMywweGI5LDB4MDAsMHhiYSwweDAwIH0gfSwKK3sgIDE2LCAweGMyMDAsIDAsIHsweDNlLDB4ODAsMHgwZiwweGEwLDB4MDMsMHg2OCwweDAwLDB4ZmEsMHgwMCwweDdlLDB4ODAsMHgxYywweGEwLDB4MGIsMHgzYSwweDA0IH0gfSwKK3sgIDE2LCAweGMyMTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4ZTAsMHgwMiwweGY4LDB4MDAsMHgzZSwweDA0IH0gfSwKK3sgIDE2LCAweGMyMjAsIDAsIHsweDhmLDB4MDAsMHgwMywweGUwLDB4NGEsMHhmOCwweDEwLDB4MjYsMHgxOCwweDBmLDB4ODAsMHgwMywweGEwLDB4ODAsMHhmOCwweDAyIH0gfSwKK3sgIDE2LCAweGMyMzAsIDAsIHsweDNlLDB4MDAsMHg4ZiwweDAwLDB4MGIsMHhhMCwweDAwLDB4ZjgsMHgwMiwweDNlLDB4MDAsMHgwZiwweDgwLDB4MTMsMHhkMiwweDAwIH0gfSwKK3sgIDE2LCAweGMyNDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgyMCwweGM5LDB4MDAsMHgzMiwweDQwIH0gfSwKK3sgIDE2LCAweGMyNTAsIDAsIHsweDRkLDB4OTksMHgwMywweDI0LDB4MDAsMHhjOSwweDAyLDB4M2UsMHg2OCwweDBmLDB4OTAsMHgwMiwweDI0LDB4MDAsMHhlOSwweDAwIH0gfSwKK3sgIDE2LCAweGMyNjAsIDAsIHsweDMwLDB4NDAsMHg4YywweDkwLDB4MDMsMHgwNCwweDQwLDB4YzksMHgwMCwweDNlLDB4NDAsMHgwYywweDkwLDB4MDMsMHgwMiwweDA0IH0gfSwKK3sgIDE2LCAweGMyNzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NjQsMHgyMCwweDg5LDB4MDYsMHgyMiwweDUwIH0gfSwKK3sgIDE2LCAweGMyODAsIDAsIHsweDhiLDB4OWMsMHhjMiwweDI0LDB4MDAsMHhkOSwweDAxLDB4MmUsMHg0MCwweDBiLDB4OTAsMHg0MiwweDI0LDB4MDgsMHhiOSwweDAxIH0gfSwKK3sgIDE2LCAweGMyOTAsIDAsIHsweDIyLDB4NDYsMHgwZCwweDkwLDB4MGEsMHgyNiwweDAyLDB4ODksMHgwMCwweDJjLDB4NDAsMHgwYSwweDEwLDB4MDIsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGMyYTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4MDYsMHgwMCwweDkxLDB4NDAsMHg0MiwweDcwIH0gfSwKK3sgIDE2LCAweGMyYjAsIDAsIHsweDBiLDB4OTAsMHgxMiwweDJjLDB4MDIsMHg4YiwweDAwLDB4MmUsMHg0MCwweDBiLDB4MTAsMHgyMiwweGU0LDB4MTAsMHhiMSwweDAwIH0gfSwKK3sgIDE2LCAweGMyYzAsIDAsIHsweGEyLDB4NDAsMHg0OCwweDkwLDB4MTIsMHgyNCwweDA4LDB4OTksMHgwMiwweDJlLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgwNiwweDAwIH0gfSwKK3sgIDE2LCAweGMyZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDQsMHg5MiwweDkxLDB4MjAsMHhlMCwweDQ4IH0gfSwKK3sgIDE2LCAweGMyZTAsIDAsIHsweDBiLDB4MTIsMHgwMiwweDA0LDB4MDIsMHg5MSwweDEwLDB4MmMsMHhjMCwweDBiLDB4MTAsMHgwNiwweDg0LDB4YzAsMHhiMSwweDEwIH0gfSwKK3sgIDE2LCAweGMyZjAsIDAsIHsweDIwLDB4NDgsMHg4OSwweDExLDB4MDIsMHgwNSwweDgwLDB4OTEsMHg0MCwweDJlLDB4NDQsMHgyYSwweDk0LDB4MDIsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweGMzMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGQ4LDB4NTAsMHgzMCwweDE0IH0gfSwKK3sgIDE2LCAweGMzMTAsIDAsIHsweDBmLDB4ODUsMHgwYiwweDIxLDB4ZTAsMHg4MCwweDQwLDB4M2UsMHgwMCwweDBmLDB4ODcsMHg4YiwweGUxLDB4MGMsMHhmOCwweDZjIH0gfSwKK3sgIDE2LCAweGMzMjAsIDAsIHsweDMyLDB4MDAsMHg4NCwweDA2LDB4ODMsMHgyMCwweDA0LDB4ZDgsMHgyOCwweDNlLDB4MTAsMHgwYywweDAwLDB4MDMsMHgyZSwweDAzIH0gfSwKK3sgIDE2LCAweGMzMzAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDFkLDB4ZjQsMHg0MCwweGFkLDB4MTAsMHgzZiwweDQ1IH0gfSwKK3sgIDE2LCAweGMzNDAsIDAsIHsweDBmLDB4OTEsMHgwMywweGZjLDB4MTgsMHg3ZCwweDIwLDB4MWYsMHg0MSwweDBmLDB4OTAsMHgwMywweDc0LDB4YzAsMHhmOSwweDIxIH0gfSwKK3sgIDE2LCAweGMzNTAsIDAsIHsweDNlLDB4NDQsMHgwZiwweDkyLDB4MDEsMHhlNCwweDQwLDB4ZTksMHgwMCwweDNkLDB4NDgsMHg0ZiwweGQwLDB4MDMsMHhlNiwweDA2IH0gfSwKK3sgIDE2LCAweGMzNjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZjcsMHg4MCwweGZkLDB4ZTAsMHgzMywweDcwIH0gfSwKK3sgIDE2LCAweGMzNzAsIDAsIHsweDBjLDB4ZGEsMHgwMywweDI2LDB4MjAsMHhjOSwweDQwLDB4MzEsMHg0MCwweDBlLDB4OWEsMHgwMywweDI0LDB4MDAsMHhmOSwweDgwIH0gfSwKK3sgIDE2LCAweGMzODAsIDAsIHsweDNiLDB4NjAsMHgwZiwweDljLDB4ODMsMHgzNiwweGEwLDB4ZjksMHhhMSwweGIwLDB4NDAsMHgwZiwweDkxLDB4MDMsMHhjNiwweDAwIH0gfSwKK3sgIDE2LCAweGMzOTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDEwLDB4ZTIsMHg5MCwweGI4LDB4YTAsMHgyMiwweDI4IH0gfSwKK3sgIDE2LCAweGMzYTAsIDAsIHsweDI4LDB4ODgsMHgwYSwweDIyLDB4MDIsMHg4OCwweGEwLDB4MjIsMHgwMCwweDA4LDB4ODgsMHgwMiwweGMyLDB4ODAsMHhiOCwweDg4IH0gfSwKK3sgIDE2LCAweGMzYjAsIDAsIHsweDIyLDB4MDQsMHgwYiwweDhlLDB4MDMsMHgyMiwweDgwLDB4YjgsMHhkMCwweDJhLDB4MjAsMHgwYiwweDg4LDB4MDIsMHhjZSwweDA0IH0gfSwKK3sgIDE2LCAweGMzYzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzUsMHg4MCwweGIxLDB4NjEsMHgwMCwweDU4IH0gfSwKK3sgIDE2LCAweGMzZDAsIDAsIHsweDQ4LDB4MTYsMHg4YSwweDA0LDB4YTAsMHg4OSwweDAxLDB4MjIsMHg0MCwweDFhLDB4MTQsMHg4OCwweDA0LDB4MjAsMHhiMSwweDQwIH0gfSwKK3sgIDE2LCAweGMzZTAsIDAsIHsweDI4LDB4NDAsMHgwYiwweDEwLDB4MGEsMHgwNCwweDIwLDB4YjEsMHgyYywweDIwLDB4NGEsMHgwYiwweDEyLDB4MDIsMHhjMiwweDAxIH0gfSwKK3sgIDE2LCAweGMzZjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4YTUsMHg5MCwweGJiLDB4NDAsMHgyMCwweDQwIH0gfSwKK3sgIDE2LCAweGM0MDAsIDAsIHsweDA4LDB4OTAsMHgwMiwweDI0LDB4NDAsMHg4OSwweDQyLDB4NjIsMHg1OCwweDA4LDB4MTAsMHgwMiwweGU1LDB4MDAsMHhiOSwweDAzIH0gfSwKK3sgIDE2LCAweGM0MTAsIDAsIHsweDIyLDB4YzAsMHgwYiwweDkwLDB4MDIsMHhhNCwweDE0LDB4MzEsMHgwMCwweDJhLDB4NDQsMHgwYiwweDkwLDB4MDIsMHhjNiwweDA0IH0gfSwKK3sgIDE2LCAweGM0MjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDEwLDB4YTUsMHgwMCwweGY5LDB4MDEsMHgzMiwweDQwIH0gfSwKK3sgIDE2LCAweGM0MzAsIDAsIHsweDhjLDB4OTAsMHgwMywweDI3LDB4MDAsMHhjMSwweDk0LDB4MzAsMHg0MCwweDBlLDB4OTAsMHgwMywweDI0LDB4MDAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGM0NDAsIDAsIHsweDNhLDB4NDAsMHgwZiwweDkwLDB4MDMsMHgyNCwweDAwLDB4ZjksMHgwMCwweDMyLDB4NjAsMHgwNywweDkwLDB4MjcsMHhlOCwweDA1IH0gfSwKK3sgIDE2LCAweGM0NTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAwLDB4YTQsMHgxOCwweGY5LDB4MDAsMHhiZSwweDQ0IH0gfSwKK3sgIDE2LCAweGM0NjAsIDAsIHsweDBmLDB4OTAsMHgwMywweGM0LDB4MDAsMHhmOSwweDAwLDB4YmUsMHg2MSwweDhmLDB4OTAsMHgwMywweGE0LDB4MDAsMHhmMSwweDAwIH0gfSwKK3sgIDE2LCAweGM0NzAsIDAsIHsweDFlLDB4NDAsMHgwZiwweDEwLDB4MDMsMHgyNCwweDA4LDB4ZjksMHgwMCwweDdlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGM0ODAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTEsMHg4MSwweGY4LDB4MDAsMHgzMiwweDA0IH0gfSwKK3sgIDE2LCAweGM0OTAsIDAsIHsweDBjLDB4MDAsMHhkMywweDIxLDB4MDAsMHhkOCwweDA0LDB4M2EsMHgxNCwweDljLDB4ODAsMHgwMywweDIxLDB4MDEsMHhjOCwweDAwIH0gfSwKK3sgIDE2LCAweGM0YTAsIDAsIHsweDM2LDB4MDAsMHgwYywweDgwLDB4MTMsMHgyMCwweDEwLDB4YzgsMHgwMCwweDMyLDB4MDAsMHgyYywweDgwLDB4MDMsMHhjYSwweDA0IH0gfSwKK3sgIDE2LCAweGM0YjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA0LDB4M2EsMHgwMCwweGJlLDB4ODQsMHgyMywweDg1IH0gfSwKK3sgIDE2LCAweGM0YzAsIDAsIHsweDA4LDB4ZWMsMHg4MywweDY4LDB4MDQsMHg4YSwweDAwLDB4MmYsMHg5MCwweDRkLDB4YTAsMHgwMiwweDI4LDB4MDEsMHhkYSwweDAwIH0gfSwKK3sgIDE2LCAweGM0ZDAsIDAsIHsweDIzLDB4YjAsMHgwYSwweGEwLDB4MDIsMHgyYSwweDA4LDB4ZGEsMHgwMSwweDIyLDB4ODAsMHgwZiwweGEwLDB4MDIsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGM0ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweGJiLDB4ZjAsMHgyMCwweGMwIH0gfSwKK3sgIDE2LCAweGM0ZjAsIDAsIHsweDA4LDB4M2MsMHgwYSwweDBjLDB4MDAsMHg5MywweDAxLDB4MjgsMHhjOCwweDg5LDB4MzAsMHgwNiwweDRjLDB4MDAsMHg4MywweDAyIH0gfSwKK3sgIDE2LCAweGM1MDAsIDAsIHsweDJjLDB4ZjYsMHgwOCwweDMwLDB4MDIsMHgwNCwweDAwLDB4YTMsMHgwMCwweDIwLDB4YzAsMHgwYSwweDMwLDB4MDIsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGM1MTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAxLDB4MWQsMHgxMSwweGIzLDB4MDAsMHhhMCwweGMwIH0gfSwKK3sgIDE2LCAweGM1MjAsIDAsIHsweDA4LDB4NTAsMHgwMiwweDVjLDB4MTAsMHg4NywweDAxLDB4NmQsMHg4MSwweDQ5LDB4MzIsMHg1MiwweDFlLDB4YzMsMHg4NywweDAwIH0gfSwKK3sgIDE2LCAweGM1MzAsIDAsIHsweDI4LDB4ZTAsMHgwYSwweDMyLDB4MjYsMHgxZiwweDAwLDB4MzcsMHgwMCwweDIzLDB4ZTAsMHgwYiwweDcyLDB4MDIsMHhjOCwweDAwIH0gfSwKK3sgIDE2LCAweGM1NDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA4LDB4MTIsMHgwMCwweGI3LDB4ODIsMHgzMSwweDIwIH0gfSwKK3sgIDE2LCAweGM1NTAsIDAsIHsweDA4LDB4MDgsMHgzNywweDBmLDB4MDgsMHhkNywweGUwLDB4MzksMHg2MCwweDE5LDB4N2EsMHgwYiwweDVlLDB4MGMsMHg4MywweGIyIH0gfSwKK3sgIDE2LCAweGM1NjAsIDAsIHsweDdkLDB4ZTAsMHgwYywweDdhLDB4MGIsMHgzZSwweDAyLDB4YWYsMHhhMCwweGIxLDB4ZTAsMHgwZSwweDdhLDB4MDMsMHhjYSwweDAyIH0gfSwKK3sgIDE2LCAweGM1NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDFkLDB4YTAsMHgxMCwweGZiLDB4MDAsMHgzZSwweGMwIH0gfSwKK3sgIDE2LCAweGM1ODAsIDAsIHsweDZmLDB4YjAsMHg0MywweGVjLDB4MTEsMHhmYiwweDAwLDB4M2UsMHg0MCwweDBmLDB4YjUsMHgwMywweGVjLDB4MjAsMHhmYiwweDUwIH0gfSwKK3sgIDE2LCAweGM1OTAsIDAsIHsweDM2LDB4MDAsMHgwZiwweGI1LDB4NDMsMHhlNSwweGExLDB4ZGIsMHg3OCwweDNlLDB4YzAsMHgwZiwweGI0LDB4MDMsMHhjMiwweDA2IH0gfSwKK3sgIDE2LCAweGM1YTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4ZmUsMHgwMCwweGZmLDB4YTAsMHgzZiwweGEwIH0gfSwKK3sgIDE2LCAweGM1YjAsIDAsIHsweDBkLDB4YzksMHgxMywweDNlLDB4MDAsMHhjZiwweGQwLDB4M2QsMHhlOCwweDAyLDB4ZmYsMHgxMywweDNlLDB4MDAsMHhjZiwweDgyIH0gfSwKK3sgIDE2LCAweGM1YzAsIDAsIHsweDNmLDB4NjAsMHgwYywweGZjLDB4MjMsMHgzZSwweDEwLDB4ZWYsMHg4MCwweDMzLDB4ZjIsMHgwYywweGZjLDB4ODMsMHgxMCwweDAwIH0gfSwKK3sgIDE2LCAweGM1ZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4OWMsMHg0MCwweGI1LDB4MDEsMHgyZCwweGQwIH0gfSwKK3sgIDE2LCAweGM1ZTAsIDAsIHsweDA4LDB4NTgsMHgwMiwweDFjLDB4NDAsMHg1NywweDEwLDB4MmQsMHg1YSwweDI4LDB4MzEsMHgwMiwweGJjLDB4MDEsMHg5NywweDEwIH0gfSwKK3sgIDE2LCAweGM1ZjAsIDAsIHsweDJkLDB4MDAsMHgwYSwweDcwLDB4MDIsMHg4NCwweDA0LDB4Y2YsMHgwMCwweDI5LDB4YzAsMHgwYSwweGYwLDB4MDIsMHgyYSwweDA0IH0gfSwKK3sgIDE2LCAweGM2MDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTAsMHgwMCwweGI3LDB4MmEsMHgyZCwweDgyIH0gfSwKK3sgIDE2LCAweGM2MTAsIDAsIHsweDA4LDB4NDIsMHgyMiwweDNjLDB4MDAsMHg4NywweDExLDB4MGQsMHhjYywweDg4LDB4MzIsMHgwMiwweDFkLDB4MDAsMHg5NywweDAwIH0gfSwKK3sgIDE2LCAweGM2MjAsIDAsIHsweDJjLDB4YzQsMHgwOCwweDMwLDB4MDIsMHgxNCwweDAwLDB4YTcsMHgwMCwweDIzLDB4YzAsMHgwOSwweDcwLDB4ODIsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGM2MzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MCwweDE0LDB4YzAsMHgyMCwweGIwLDB4MjAsMHgyYywweDUwIH0gfSwKK3sgIDE2LCAweGM2NDAsIDAsIHsweDA4LDB4MTAsMHgwMiwweDJkLDB4YzAsMHg5MywweGUyLDB4MmMsMHgyMSwweDA4LDB4MzAsMHgwMiwweDBlLDB4MDgsMHg5MywweDAwIH0gfSwKK3sgIDE2LCAweGM2NTAsIDAsIHsweDJjLDB4NDAsMHgwYSwweDMwLDB4MDIsMHg4YywweDAwLDB4OTMsMHgwMCwweDJhLDB4YzAsMHgwYiwweDMwLDB4MDIsMHgxOCwweDA0IH0gfSwKK3sgIDE2LCAweGM2NjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YWMsMHgwMCwweGY4LDB4YzAsMHgzZSwweDgwIH0gfSwKK3sgIDE2LCAweGM2NzAsIDAsIHsweDJjLDB4YTAsMHgwYiwweDNmLDB4MDAsMHhjNywweDYwLDB4M2UsMHhkMCwweDBjLDB4ZjAsMHgwYiwweDNjLDB4MDAsMHhjZiwweDAwIH0gfSwKK3sgIDE2LCAweGM2ODAsIDAsIHsweDNlLDB4ODAsMHgwYywweGYwLDB4MGIsMHgyYywweDAwLDB4ZWYsMHgwMCwweDMzLDB4YzEsMHgwZCwweGYwLDB4MGIsMHgyYSwweDA0IH0gfSwKK3sgIDE2LCAweGM2OTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4ZWMsMHg0MCwweGYzLDB4NDAsMHgzZSwweDUwIH0gfSwKK3sgIDE2LCAweGM2YTAsIDAsIHsweDhlLDB4YjQsMHgwMywweGVjLDB4MTAsMHhmYiwweDAwLDB4M2UsMHgwOSwweDBmLDB4YjAsMHgxMywweGVjLDB4NDIsMHhlYiwweDAwIH0gfSwKK3sgIDE2LCAweGM2YjAsIDAsIHsweDNjLDB4MDAsMHg4ZiwweGIwLDB4MTMsMHhjNCwweDExLDB4ZTMsMHgwMCwweDNlLDB4YzAsMHgwZSwweGIwLDB4MDMsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGM2YzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMCwweGZjLDB4ODAsMHgzMSwweDIyIH0gfSwKK3sgIDE2LCAweGM2ZDAsIDAsIHsweDBjLDB4YTgsMHgwMywweDNjLDB4MDAsMHhjZiwweDAwLDB4MzMsMHhhMCwweDBlLDB4ZjAsMHgwMywweGRjLDB4MDAsMHhjZiwweDAwIH0gfSwKK3sgIDE2LCAweGM2ZTAsIDAsIHsweDFmLDB4ZjAsMHgwYywweGYwLDB4MDMsMHhmNCwweDAwLDB4Y2YsMHgwMiwweDMzLDB4YzAsMHgwYywweGYwLDB4MDIsMHgwMCwweDU0IH0gfSwKK3sgIDE2LCAweGM2ZjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MSwweDA0LDB4NmYsMHgwMCwweGJiLDB4YzAsMHgyMiwweDcwIH0gfSwKK3sgIDE2LCAweGM3MDAsIDAsIHsweDBhLDB4YjksMHg0MiwweDJjLDB4MTAsMHg4YiwweDAwLDB4NzYsMHgxMSwweDgzLDB4YjAsMHgwMiwweGVjLDB4MTAsMHhhYiwweDAwIH0gfSwKK3sgIDE2LCAweGM3MTAsIDAsIHsweDJlLDB4YjAsMHgwYSwweGIwLDB4MDMsMHhlYywweDA0LDB4OGIsMHgwMCwweGEyLDB4YzAsMHgyOCwweGIwLDB4MDIsMHgyMCwweDQwIH0gfSwKK3sgIDE2LCAweGM3MjAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4NjUsMHg0MCwweGI4LDB4MjAsMHgyMiwweDQ0IH0gfSwKK3sgIDE2LCAweGM3MzAsIDAsIHsweDU4LDB4MzQsMHgwYSwweDJjLDB4MDAsMHg4YiwweDAwLDB4MjIsMHg4NCwweDRiLDB4YjAsMHgwMiwweGVjLDB4MDAsMHg4YiwweDAwIH0gfSwKK3sgIDE2LCAweGM3NDAsIDAsIHsweDZlLDB4YzAsMHgwOCwweGIwLDB4NDIsMHhlNiwweDA0LDB4OGIsMHgwMCwweDAyLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhhMCwweDAxIH0gfSwKK3sgIDE2LCAweGM3NTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweGIxLDB4MDAsMHgyMCwweGMwIH0gfSwKK3sgIDE2LCAweGM3NjAsIDAsIHsweDBhLDB4MzAsMHgwYSwweDBjLDB4MDAsMHg4YiwweDAzLDB4MjQsMHg4MCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDAsMHhhMywweDAwIH0gfSwKK3sgIDE2LCAweGM3NzAsIDAsIHsweDZjLDB4MDAsMHgwYSwweDMwLDB4MDIsMHg4ZCwweDAwLDB4ODMsMHgwMCwweDIwLDB4YzAsMHgxOCwweDMwLDB4MDIsMHg4MiwweDAwIH0gfSwKK3sgIDE2LCAweGM3ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4NjQsMHgwMCwweGY4LDB4MDAsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweGM3OTAsIDAsIHsweDRjLDB4YTAsMHgwYiwweDJjLDB4MDIsMHhjZiwweDAwLDB4MjIsMHg0MCwweDBlLDB4ZjUsMHgwMywweGZjLDB4MDAsMHhjZiwweDAxIH0gfSwKK3sgIDE2LCAweGM3YTAsIDAsIHsweDNlLDB4MDAsMHgwYywweGYwLDB4MTIsMHhkZCwweDAyLDB4Y2YsMHgwMiwweDMzLDB4YzAsMHg0YywweGYwLDB4MGIsMHg4MCwweDAzIH0gfSwKK3sgIDE2LCAweGM3YjAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhNCwweDE5LDB4ZjAsMHgwMCwweGZjLDB4MDAsMHgzZiwweDQwIH0gfSwKK3sgIDE2LCAweGM3YzAsIDAsIHsweDBmLDB4YjEsMHgwMywweGRjLDB4MDAsMHhiZiwweDAxLDB4M2YsMHgwMCwweDBmLDB4ZjIsMHgyMywweGZjLDB4MTAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweGM3ZDAsIDAsIHsweDNmLDB4MDAsMHgwZiwweGYwLDB4MDEsMHhmNCwweDg0LDB4ZmYsMHgwMCwweDNkLDB4YzAsMHg0ZiwweGYwLDB4MTMsMHg2OCwweDA2IH0gfSwKK3sgIDE2LCAweGM3ZTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmUsMHg0MCwweGRmLDB4ODAsMHgzMywweGM4IH0gfSwKK3sgIDE2LCAweGM3ZjAsIDAsIHsweDBjLDB4ZjgsMHgwMywweDNjLDB4MGEsMHg5ZiwweGMwLDB4M2YsMHhmMCwweDA4LDB4YjgsMHgwMiwweDNlLDB4MDAsMHhmZiwweDgwIH0gfSwKK3sgIDE2LCAweGM4MDAsIDAsIHsweDNmLDB4ZDgsMHgwYywweGY5LDB4NjEsMHgyZSwweDQwLDB4NmYsMHg5MCwweDNmLDB4ZTQsMHg4ZiwweGYxLDB4ODMsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweGM4MTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4ZWMsMHgwNCwweDhiLDB4ODAsMHgyMywweGYwIH0gfSwKK3sgIDE2LCAweGM4MjAsIDAsIHsweDA4LDB4YjgsMHgwMiwweDNkLDB4NDAsMHhhYiwweDAwLDB4MGUsMHgwOCwweDQ4LDB4MjIsMHg4MiwweDZjLDB4MjAsMHhiYiwweDAwIH0gfSwKK3sgIDE2LCAweGM4MzAsIDAsIHsweDJmLDB4ZDAsMHg0OCwweGIwLDB4MDIsMHgyYywweDAwLDB4YmIsMHgwMCwweDJlLDB4YzEsMHgwYiwweGIwLDB4MDIsMHgzMCwweDA0IH0gfSwKK3sgIDE2LCAweGM4NDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgwMiwweDgzLDB4MDEsMHhhMCwweGM1IH0gfSwKK3sgIDE2LCAweGM4NTAsIDAsIHsweDA4LDB4YjAsMHg0YSwweDRjLDB4YTAsMHg4MCwweDI0LDB4MjgsMHhjOCwweDA5LDB4MzIsMHgwMiwweDRjLDB4MDAsMHhiMywweDA4IH0gfSwKK3sgIDE2LCAweGM4NjAsIDAsIHsweDJlLDB4ZDEsMHgyOSwweGIyLDB4M2EsMHgwYywweDg0LDB4YTMsMHgyMSwweDJjLDB4YzgsMHg0YiwweGIyLDB4MGEsMHgzMiwweDAxIH0gfSwKK3sgIDE2LCAweGM4NzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDE1LDB4YWMsMHgwOCwweDhiLDB4MDAsMHgyMiwweGMwIH0gfSwKK3sgIDE2LCAweGM4ODAsIDAsIHsweDA4LDB4YjAsMHgwMiwweDRjLDB4MDAsMHg4OCwweDIxLDB4MjQsMHgyMSwweDA5LDB4YjAsMHg0NiwweDZjLDB4MDAsMHhiYiwweDA2IH0gfSwKK3sgIDE2LCAweGM4OTAsIDAsIHsweDJlLDB4YzAsMHgwOSwweGIwLDB4MDIsMHgyYywweDEwLDB4YmIsMHgwMCwweDJlLDB4YzAsMHgwYiwweGIwLDB4MDIsMHgzMCwweDA0IH0gfSwKK3sgIDE2LCAweGM4YTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWMsMHgwMCwweGNiLDB4MDAsMHgzMiwweGMwIH0gfSwKK3sgIDE2LCAweGM4YjAsIDAsIHsweDBjLDB4YjksMHgwMiwweDZjLDB4MDAsMHhjYiwweGM4LDB4M2EsMHhjMCwweDJkLDB4OTAsMHgwYiwweDJjLDB4MDgsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweGM4YzAsIDAsIHsweDNlLDB4YzAsMHgwZCwweDMwLDB4NDIsMHgyYywweDAwLDB4ZWIsMHgwMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MTMsMHgwMCwweDA0IH0gfSwKK3sgIDE2LCAweGM4ZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4YmMsMHgwMCwweGVmLDB4MDAsMHgzZCwweGMwIH0gfSwKK3sgIDE2LCAweGM4ZTAsIDAsIHsweDBmLDB4ZjAsMHgwMywweGJjLDB4MDYsMHhlZiwweDgyLDB4M2YsMHg0MCwweDRlLDB4YzksMHg4MywweGJjLDB4MDAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweGM4ZjAsIDAsIHsweDdmLDB4YzAsMHgxYywweGYwLDB4MTMsMHg3YywweDAwLDB4ZmYsMHgwNCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGM5MDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGZiLDB4MDIsMHgzZSwweGMwIH0gfSwKK3sgIDE2LCAweGM5MTAsIDAsIHsweDBlLDB4YjAsMHgwMywweGFjLDB4MjAsMHhkOCwweDQwLDB4M2UsMHhjMCwweDhjLDB4OTAsMHgwYiwweDJjLDB4MDAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweGM5MjAsIDAsIHsweDNlLDB4YzksMHgwZCwweGIwLDB4MzMsMHhlYywweDA4LDB4ZmIsMHgwMiwweDNlLDB4YzAsMHgwZiwweGIwLDB4MGIsMHg1NCwweDA0IH0gfSwKK3sgIDE2LCAweGM5MzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4MmMsMHgwMCwweGIzLDB4MDAsMHgyZiwweGMwIH0gfSwKK3sgIDE2LCAweGM5NDAsIDAsIHsweDBiLDB4MzAsMHgxMiwweGZjLDB4MDAsMHg4OCwweGEwLDB4MmUsMHg0MCwweDI4LDB4OTQsMHgwMiwweDJjLDB4MTAsMHhiYiwweDA0IH0gfSwKK3sgIDE2LCAweGM5NTAsIDAsIHsweDJkLDB4YzAsMHgyOCwweGIwLDB4MDIsMHhlYywweDAwLDB4YmIsMHgwMCwweDJlLDB4YzAsMHgwYiwweDcyLDB4MDYsMHgzMiwweDAwIH0gfSwKK3sgIDE2LCAweGM5NjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NmMsMHgwMCwweGIzLDB4MDAsMHgyYywweGUwIH0gfSwKK3sgIDE2LCAweGM5NzAsIDAsIHsweDBhLDB4MTAsMHgwMiwweGNkLDB4MDAsMHg5MywweDAwLDB4MmMsMHhjMCwweDA4LDB4YjAsMHgwMiwweDRjLDB4MDAsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweGM5ODAsIDAsIHsweDI4LDB4YzAsMHgwOCwweDMwLDB4MDIsMHhjYywweDAwLDB4YjMsMHgwMCwweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHgzYSwweDAwIH0gfSwKK3sgIDE2LCAweGM5OTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAxLDB4MWUsMHg0MCwweGI3LDB4ODAsMHgyZCwweGUyIH0gfSwKK3sgIDE2LCAweGM5YTAsIDAsIHsweDBiLDB4NTgsMHgwMiwweGRlLDB4MDIsMHg5NywweDgxLDB4MmYsMHhhMCwweDA4LDB4NjgsMHgwMiwweDVlLDB4MDAsMHhiNywweDgxIH0gfSwKK3sgIDE2LCAweGM5YjAsIDAsIHsweDJmLDB4ZTAsMHgwOCwweDc5LDB4MDIsMHhkZSwweDAwLDB4YjcsMHg4MSwweDJkLDB4ZTAsMHgwYiwweDc4LDB4MDIsMHgzYywweDAwIH0gfSwKK3sgIDE2LCAweGM5YzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweGYzLDB4MDAsMHgzYywweGMwIH0gfSwKK3sgIDE2LCAweGM5ZDAsIDAsIHsweDBlLDB4MzIsMHgwMywweGNjLDB4ODAsMHhkMywweDAwLDB4M2MsMHhjNCwweDBjLDB4MzksMHgwMywweDRjLDB4MDgsMHhmMywweDFhIH0gfSwKK3sgIDE2LCAweGM5ZTAsIDAsIHsweDNjLDB4YzYsMHgwZCwweDMwLDB4MDMsMHhjZSwweDIwLDB4ZjMsMHgwOCwweDNjLDB4YzAsMHgwZiwweDMwLDB4MDMsMHg1MiwweDAyIH0gfSwKK3sgIDE2LCAweGM5ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDFkLDB4YWMsMHgwMCwweGZiLDB4MDAsMHgyZSwweGMwIH0gfSwKK3sgIDE2LCAweGNhMDAsIDAsIHsweDBiLDB4YjAsMHgwMywweGNjLDB4MjAsMHhlYiwweDAwLDB4M2MsMHg4MCwweDBmLDB4YjAsMHg0MSwweGFjLDB4MDAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweGNhMTAsIDAsIHsweDNjLDB4YzIsMHgwZiwweGIwLDB4MDMsMHhlYywweDQwLDB4ZmIsMHgwMCwweDNlLDB4YzAsMHgwZiwweDMwLDB4MDMsMHhkMCwweDA2IH0gfSwKK3sgIDE2LCAweGNhMjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWUsMHgwMiwweGMzLDB4ODAsMHgzMCwweGNlIH0gfSwKK3sgIDE2LCAweGNhMzAsIDAsIHsweDBkLDB4OTgsMHgwMywweGFjLDB4YTAsMHhjMywweDgwLDB4YjIsMHhjMCwweDBmLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweGNhNDAsIDAsIHsweDNlLDB4ZDIsMHg0ZiwweGIwLDB4MDksMHgyZSwweDA4LDB4NGIsMHgwMSwweDNlLDB4YzAsMHgyNCwweGIwLDB4MDMsMHhlYSwweDAwIH0gfSwKK3sgIDE2LCAweGNhNTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDExLDB4OWMsMHgwMCwweDg3LDB4MDEsMHgyMSwweGMwIH0gfSwKK3sgIDE2LCAweGNhNjAsIDAsIHsweDQ4LDB4NTAsMHgxMiwweDRjLDB4MDAsMHg4NywweDAwLDB4MzUsMHhjMCwweDRiLDB4NjAsMHgwMiwweGRjLDB4MDQsMHhiNywweDAxIH0gfSwKK3sgIDE2LCAweGNhNzAsIDAsIHsweDJkLDB4YzAsMHgwYiwweDcwLDB4MDIsMHgxYywweDAwLDB4ODcsMHgwMCwweDJkLDB4YzEsMHgwYywweDcyLDB4MDIsMHhmMiwweDA0IH0gfSwKK3sgIDE2LCAweGNhODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHgwMCwweDg3LDB4ODAsMHgyMywweGUwIH0gfSwKK3sgIDE2LCAweGNhOTAsIDAsIHsweDA4LDB4ZjgsMHgwMiwweGRlLDB4ODAsMHg4ZiwweDgxLDB4MjEsMHhlMCwweDRiLDB4NzgsMHgxMiwweGRlLDB4MDQsMHgzNywweDgwIH0gfSwKK3sgIDE2LCAweGNhYTAsIDAsIHsweDJkLDB4ZTgsMHgwYiwweGY4LDB4MDIsMHgzZSwweDE4LDB4ODcsMHg4MCwweDJmLDB4ZTAsMHgwOSwweDc5LDB4MDIsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGNhYjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE0LDB4Y2MsMHgwMCwweDgzLDB4MDAsMHhhMCwweGMwIH0gfSwKK3sgIDE2LCAweGNhYzAsIDAsIHsweDI4LDB4MzAsMHg0MiwweDRjLDB4MDAsMHg4MywweDAwLDB4MjQsMHhjMCwweDBiLDB4MzgsMHgwNiwweGNjLDB4MDQsMHhiMywweDAwIH0gfSwKK3sgIDE2LCAweGNhZDAsIDAsIHsweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwYywweDAyLDB4ODMsMHgwMCwweDJjLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhkMiwweDA0IH0gfSwKK3sgIDE2LCAweGNhZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweGNhLDB4MDAsMHgzMSwweDgwIH0gfSwKK3sgIDE2LCAweGNhZjAsIDAsIHsweDA4LDB4ZTAsMHgwMiwweDk4LDB4MDIsMHhjZSwweDAwLDB4MzMsMHg4NCwweDBiLDB4ZWEsMHgwMywweGU4LDB4MDAsMHhiYSwweDAwIH0gfSwKK3sgIDE2LCAweGNiMDAsIDAsIHsweDNmLDB4ODEsMHgwZiwweGEwLDB4MDMsMHgyOCwweDAwLDB4Y2EsMHgwMCwweDNlLDB4ODAsMHgwZCwweGUwLDB4MDMsMHhmYSwweDA0IH0gfSwKK3sgIDE2LCAweGNiMTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGNiMjAsIDAsIHsweDBlLDB4ODQsMHgyMywweGEwLDB4MDAsMHhmOCwweDAwLDB4M2EsMHgxMCwweDBmLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGNiMzAsIDAsIHsweDNlLDB4MTAsMHgwZiwweDgwLDB4MTMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZCwweDgwLDB4MDMsMHhkMiwweDAwIH0gfSwKK3sgIDE2LCAweGNiNDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMSwweGY5LDB4MDAsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweGNiNTAsIDAsIHsweDBjLDB4OWEsMHgxMywweGU0LDB4MDAsMHhjOSwweDAwLDB4M2UsMHg0MCwweDBjLDB4OTgsMHgyMywweGU0LDB4ODAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGNiNjAsIDAsIHsweDNlLDB4NDAsMHgyYywweDk4LDB4MDMsMHg2NCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgwYywweDkwLDB4MDMsMHhjMiwweDA0IH0gfSwKK3sgIDE2LCAweGNiNzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NjQsMHgwNCwweGI5LDB4MDAsMHgyZSwweDQwIH0gfSwKK3sgIDE2LCAweGNiODAsIDAsIHsweDY4LDB4OWMsMHgyMiwweGU0LDB4MDIsMHg4OSwweDAxLDB4N2MsMHg1MCwweDhkLDB4OTgsMHgyMiwweGU0LDB4ODAsMHhiOSwweDIwIH0gfSwKK3sgIDE2LCAweGNiOTAsIDAsIHsweDJlLDB4NTAsMHg0OCwweDEwLDB4MGIsMHgyNSwweDAwLDB4YjksMHg0NCwweDJjLDB4NDAsMHgyOCwweDkwLDB4MDAsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGNiYTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweGI5LDB4MDAsMHgyZSwweDUwIH0gfSwKK3sgIDE2LCAweGNiYjAsIDAsIHsweDA4LDB4OTAsMHgwMiwweGU0LDB4MDQsMHg4OSwweDAwLDB4MmUsMHg1MCwweDBhLDB4OTIsMHgwMiwweGU0LDB4MDAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweGNiYzAsIDAsIHsweDJjLDB4NDAsMHgwOCwweDkxLDB4MDIsMHgyNCwweDAwLDB4YjksMHgwMCwweDJlLDB4NDAsMHgwOCwweDkwLDB4MDIsMHhjNiwweDAwIH0gfSwKK3sgIDE2LCAweGNiZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDUsMHgwMCwweGIxLDB4MDEsMHgyYywweDQwIH0gfSwKK3sgIDE2LCAweGNiZTAsIDAsIHsweDQ4LDB4MzAsMHgwMiwweGU0LDB4MDAsMHg4MSwweDAwLDB4MmEsMHg0MCwweDRiLDB4MTAsMHgwMiwweGM0LDB4MDAsMHhiMSwweDAwIH0gfSwKK3sgIDE2LCAweGNiZjAsIDAsIHsweDBjLDB4YzAsMHgwOCwweDkwLDB4MDIsMHgwYywweDAwLDB4YjMsMHgwMCwweDJlLDB4NDAsMHg0OCwweDEyLDB4MDIsMHhjMiwweDAxIH0gfSwKK3sgIDE2LCAweGNjMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGI4LDB4MDEsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGNjMTAsIDAsIHsweDFjLDB4ODAsMHgwNywweGUxLDB4NTAsMHhjOCwweDUwLDB4MmUsMHgxNCwweDFlLDB4ODUsMHgwMywweGUxLDB4NDEsMHhmOCwweDUwIH0gfSwKK3sgIDE2LCAweGNjMjAsIDAsIHsweDNlLDB4MTQsMHgwYywweDg1LDB4MTMsMHgyMSwweDQ4LDB4ZjgsMHg1MCwweDNlLDB4MTQsMHgwYywweDg1LDB4NDMsMHhlZSwweDAzIH0gfSwKK3sgIDE2LCAweGNjMzAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDE5LDB4YzQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDUxIH0gfSwKK3sgIDE2LCAweGNjNDAsIDAsIHsweDBmLDB4NTAsMHgwMywweGU1LDB4MDAsMHhmZCwweDAwLDB4M2YsMHg0MCwweDFkLDB4ZDAsMHgwMywweGY0LDB4MTAsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGNjNTAsIDAsIHsweDNlLDB4NTAsMHgwZiwweDUwLDB4MDAsMHg5NCwweDAwLDB4ZjksMHgwMCwweDNkLDB4NDAsMHgwZiwweDkxLDB4MDMsMHhlNiwweDA2IH0gfSwKK3sgIDE2LCAweGNjNjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4ZTQsMHg1MCwweGNkLDB4MDAsMHgzMSwweDYwIH0gfSwKK3sgIDE2LCAweGNjNzAsIDAsIHsweDA0LDB4ZDAsMHgwMywweDM2LDB4ODAsMHhjMSwweDQyLDB4MmUsMHg1MCwweDFmLDB4OTQsMHgwMywweGU1LDB4MDAsMHhlOSwweDAyIH0gfSwKK3sgIDE2LCAweGNjODAsIDAsIHsweDJlLDB4NzIsMHgwYSwweDkwLDB4MjIsMHgwNSwweDA4LDB4ZTksMHg0MCwweDNlLDB4NTAsMHg0MCwweDljLDB4MDMsMHgyNiwweDAwIH0gfSwKK3sgIDE2LCAweGNjOTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDEwLDB4YzIsMHg4MiwweDg4LDB4MDAsMHgyMiwweDE1IH0gfSwKK3sgIDE2LCAweGNjYTAsIDAsIHsweDA4LDB4ODAsMHgwMiwweDIzLDB4NTgsMHg4OCwweGEwLDB4MmUsMHgyOCwweDBiLDB4YWEsMHg0MiwweGUyLDB4ODIsMHg4OCwweDgwIH0gfSwKK3sgIDE2LCAweGNjYjAsIDAsIHsweDJlLDB4MzgsMHgyOCwweDg4LDB4MDIsMHgyMiwweDgwLDB4YjgsMHhhMCwweDNhLDB4MjgsMHgwOCwweGNkLDB4MDIsMHgwZSwweDA0IH0gfSwKK3sgIDE2LCAweGNjYzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHgwMCwweDgxLDB4MDAsMHhhNiwweDQwIH0gfSwKK3sgIDE2LCAweGNjZDAsIDAsIHsweDI4LDB4MTAsMHgwYSwweDI0LDB4MjYsMHg5NSwweDAwLDB4MGQsMHg0MCwweDBiLDB4NTAsMHgwMiwweDc0LDB4MDAsMHg4NSwweDA4IH0gfSwKK3sgIDE2LCAweGNjZTAsIDAsIHsweDJmLDB4NDAsMHg3OSwweGQyLDB4YWEsMHgxNCwweDAwLDB4YTUsMHgwMSwweDJmLDB4NDAsMHgzOCwweDUwLDB4MDIsMHgxMiwweDAxIH0gfSwKK3sgIDE2LCAweGNjZjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4YTQsMHgwNCwweDg5LDB4MDAsMHgyNiwweDQwIH0gfSwKK3sgIDE2LCAweGNkMDAsIDAsIHsweDA4LDB4OTEsMHgwMiwweDI0LDB4MTAsMHg5ZCwweDA4LDB4MmYsMHg0MCwweDBiLDB4ZDAsMHgwMiwweGY0LDB4MDAsMHg4ZCwweDAyIH0gfSwKK3sgIDE2LCAweGNkMTAsIDAsIHsweDJmLDB4NDAsMHgwOSwweGQwLDB4MDAsMHgzNCwweDAwLDB4YmQsMHgwMCwweDBiLDB4NDAsMHgxOCwweDcwLDB4MDIsMHgwNiwweDA0IH0gfSwKK3sgIDE2LCAweGNkMjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4YzQsMHgwMCwweGM5LDB4MDUsMHgzNiwweDQxIH0gfSwKK3sgIDE2LCAweGNkMzAsIDAsIHsweDRjLDB4OTAsMHg2MywweDI0LDB4MDAsMHhkOSwweDAwLDB4M2UsMHg0MCwweDBiLDB4OTAsMHgwMywweDQ0LDB4MDgsMHhjOSwweDAwIH0gfSwKK3sgIDE2LCAweGNkNDAsIDAsIHsweDNlLDB4NDAsMHgxNSwweDEwLDB4MDMsMHgyNCwweDAwLDB4ZTksMHgwMCwweDNjLDB4NDAsMHgwYywweDkwLDB4MDMsMHgyOCwweDA0IH0gfSwKK3sgIDE2LCAweGNkNTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAxLDB4YTQsMHgwNCwweGY5LDB4MDAsMHgzYSwweDQwIH0gfSwKK3sgIDE2LCAweGNkNjAsIDAsIHsweDRmLDB4OTgsMHgwMywweGU0LDB4MDAsMHhlOSwweDk5LDB4M2UsMHg0MCwweDRmLDB4OTAsMHgwMywweGU0LDB4MjAsMHhmOSwweDBhIH0gfSwKK3sgIDE2LCAweGNkNzAsIDAsIHsweDNlLDB4NDAsMHgwZSwweDkwLDB4NDMsMHg2NCwweDI0LDB4ZjksMHgwOCwweDNhLDB4NDIsMHgwZiwweDkwLDB4OGIsMHhkYSwweDAwIH0gfSwKK3sgIDE2LCAweGNkODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGM4LDB4MDAsMHgxMiwweDAwIH0gfSwKK3sgIDE2LCAweGNkOTAsIDAsIHsweDBjLDB4ODAsMHg0MywweGUwLDB4MDAsMHhjOCwweDQwLDB4MzIsMHgwMCwweDBmLDB4ODQsMHg1MywweGUwLDB4MTAsMHhmOCwweDAwIH0gfSwKK3sgIDE2LCAweGNkYTAsIDAsIHsweDNlLDB4MDAsMHgwZCwweDgwLDB4MjMsMHgyMCwweDAwLDB4ZDgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgwYSwweDA0IH0gfSwKK3sgIDE2LCAweGNkYjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4MzgsMHgwMiwweDgyLDB4MDAsMHhhMSwweDg4IH0gfSwKK3sgIDE2LCAweGNkYzAsIDAsIHsweDA4LDB4NjAsMHgyMiwweGM4LDB4MDAsMHg4YSwweDQwLDB4MzYsMHhhMSwweDBiLDB4YTAsMHgwMiwweGU5LDB4MTAsMHhiYSwweDQ0IH0gfSwKK3sgIDE2LCAweGNkZDAsIDAsIHsweDJjLDB4ODAsMHgwYywweGE0LDB4MTIsMHgyOSwweDAyLDB4OGEsMHg0NCwweDJlLDB4OTgsMHgwYiwweGE0LDB4MDIsMHgwYSwweDAwIH0gfSwKK3sgIDE2LCAweGNkZTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgxMCwweDgzLDB4MDAsMHgyMCwweGUwIH0gfSwKK3sgIDE2LCAweGNkZjAsIDAsIHsweDE4LDB4MzAsMHg5MiwweGM0LDB4MDgsMHg5MywweDQwLDB4MjAsMHhlMCwweDBiLDB4MzAsMHgwMiwweGNkLDB4MDAsMHhiMywweDQwIH0gfSwKK3sgIDE2LCAweGNlMDAsIDAsIHsweDJjLDB4YzAsMHgwYiwweDNhLDB4NDIsMHhjZCwweDAwLDB4ODMsMHg0MCwweDJjLDB4ZDAsMHgwYiwweDM4LDB4MDIsMHg0YSwweDAwIH0gfSwKK3sgIDE2LCAweGNlMTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDQxLDB4MWMsMHgwMCwweDg3LDB4MDAsMHgyMSwweGMwIH0gfSwKK3sgIDE2LCAweGNlMjAsIDAsIHsweDI4LDB4NzAsMHgwMiwweGQxLDB4MDAsMHg5ZCwweDgwLDB4MjUsMHhjMiwweDRiLDB4NjAsMHgwMiwweGRjLDB4MDgsMHhiNywweDAyIH0gfSwKK3sgIDE2LCAweGNlMzAsIDAsIHsweDJjLDB4YzAsMHgwYSwweDc0LDB4MDIsMHhmZSwweDAwLDB4ODcsMHgwMCwweDJkLDB4YzAsMHgwYiwweDM0LDB4MDIsMHg2OCwweDAwIH0gfSwKK3sgIDE2LCAweGNlNDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgwMCwweGM3LDB4ODQsMHgzMSwweGUwIH0gfSwKK3sgIDE2LCAweGNlNTAsIDAsIHsweDBjLDB4NjgsMHgwMywweGQ2LDB4MDAsMHg5NywweDgwLDB4MzEsMHhhMCwweDBmLDB4NTgsMHgxMywweGRlLDB4MDgsMHhmNywweDgyIH0gfSwKK3sgIDE2LCAweGNlNjAsIDAsIHsweDNkLDB4YTAsMHgwZiwweGY4LDB4MGIsMHhkZSwweDAwLDB4YzcsMHg4MCwweDNkLDB4ZTAsMHgwZiwweDc4LDB4OGIsMHg2YSwweDAyIH0gfSwKK3sgIDE2LCAweGNlNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDFkLDB4YWQsMHg4MCwweGYzLDB4MDAsMHgzZSwweGMxIH0gfSwKK3sgIDE2LCAweGNlODAsIDAsIHsweDBmLDB4YTAsMHgyMywweGMwLDB4MDIsMHhlOSwweDAwLDB4M2UsMHg4MSwweDBmLDB4ODAsMHgwMywweGVjLDB4MDAsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweGNlOTAsIDAsIHsweDNlLDB4YzAsMHgwZCwweGIwLDB4MTMsMHgyYywweDAwLDB4ZWIsMHgwMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHg4MiwweDAyIH0gfSwKK3sgIDE2LCAweGNlYTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmYsMHgzMiwweGM3LDB4ODAsMHgzMywweDYwIH0gfSwKK3sgIDE2LCAweGNlYjAsIDAsIHsweDBmLDB4NzgsMHgwMywweDNlLDB4YzgsMHg0ZSwweDgwLDB4MjMsMHg2NCwweDBjLDB4ZjgsMHgwMywweDNhLDB4MDAsMHhjZSwweDgwIH0gfSwKK3sgIDE2LCAweGNlYzAsIDAsIHsweDEzLDB4ZWMsMHgwNiwweGQ4LDB4MDMsMHgzYSwweDAwLDB4ZGUsMHg4MCwweDMzLDB4YTQsMHgwYywweGM4LDB4MDMsMHhkMCwweDAwIH0gfSwKK3sgIDE2LCAweGNlZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4OWMsMHgwMCwweDg3LDB4MTAsMHgwMSwweGMwIH0gfSwKK3sgIDE2LCAweGNlZTAsIDAsIHsweDBiLDB4NzAsMHgwMiwweDE4LDB4NTAsMHg4NCwweDAwLDB4MmIsMHg0NCwweDA4LDB4NjAsMHgxMiwweDk4LDB4MDAsMHg4NiwweDEzIH0gfSwKK3sgIDE2LCAweGNlZjAsIDAsIHsweDIxLDB4YzQsMHg4OCwweDUwLDB4MDIsMHgxOCwweDgwLDB4ODYsMHgwMCwweDIxLDB4ODAsMHgwOCwweDYxLDB4MDIsMHhlYSwweDA0IH0gfSwKK3sgIDE2LCAweGNmMDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwMCwweDg3LDB4MDAsMHgyMSwweDQwIH0gfSwKK3sgIDE2LCAweGNmMTAsIDAsIHsweDBiLDB4ZjEsMHgwMiwweDVjLDB4ODAsMHgwNiwweDAwLDB4MjEsMHgwMCwweDg4LDB4ZDAsMHgwMiwweDVjLDB4MDAsMHg4NywweDAwIH0gfSwKK3sgIDE2LCAweGNmMjAsIDAsIHsweDIwLDB4ODksMHg4YSwweGYxLDB4MDIsMHgxYywweDA4LDB4ODcsMHgxMCwweDIxLDB4ODEsMHg4OCwweDQ4LDB4MDIsMHhjNiwweDAwIH0gfSwKK3sgIDE2LCAweGNmMzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDE0LDB4Y2MsMHgxMCwweDgzLDB4MDQsMHhhMCwweGMxIH0gfSwKK3sgIDE2LCAweGNmNDAsIDAsIHsweDBiLDB4MzAsMHgwYSwweDQ4LDB4MGMsMHg4OCwweDA2LDB4NjAsMHgzOCwweDA4LDB4MDQsMHg0MiwweGVjLDB4MDEsMHg4YiwweDA0IH0gfSwKK3sgIDE2LCAweGNmNTAsIDAsIHsweDIyLDB4YzEsMHgwOCwweDMwLDB4MGEsMHgyYywweDAwLDB4OGIsMHgwMCwweDIyLDB4ODAsMHgwMCwweDIwLDB4MDIsMHhkOCwweDA0IH0gfSwKK3sgIDE2LCAweGNmNjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmMsMHgwMCwweGMzLDB4MDAsMHgyMiwweDgwIH0gfSwKK3sgIDE2LCAweGNmNzAsIDAsIHsweDhmLDB4OTAsMHgwMywweDY0LDB4MGEsMHhjYiwweDAyLDB4YjIsMHhmMiwweDIwLDB4MzUsMHgxMiwweDY0LDB4MGEsMHhjOSwweDAwIH0gfSwKK3sgIDE2LCAweGNmODAsIDAsIHsweGIyLDB4NDAsMHgwZSwweGEwLDB4MDMsMHgyNCwweDBhLDB4YzksMHgwMCwweGEyLDB4NDAsMHgyYywweGEwLDB4MDMsMHhlZSwweDA0IH0gfSwKK3sgIDE2LCAweGNmOTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4ZWMsMHgwMCwweGZiLDB4MDAsMHgzYywweDgwIH0gfSwKK3sgIDE2LCAweGNmYTAsIDAsIHsweDBmLDB4OTAsMHgwMywweGE1LDB4MDAsMHhkYiwweDQwLDB4M2UsMHhkMCwweDRkLDB4YjQsMHgxMywweGE0LDB4MDgsMHhmYiwweDAxIH0gfSwKK3sgIDE2LCAweGNmYjAsIDAsIHsweDNlLDB4YzAsMHgxYywweGEwLDB4MDMsMHg2YywweDAwLDB4ZmIsMHgwNCwweDNlLDB4NTAsMHg0ZiwweGE0LDB4MDMsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGNmYzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHgzMywweGMwIH0gfSwKK3sgIDE2LCAweGNmZDAsIDAsIHsweDBjLDB4ZTgsMHg0MywweDI2LDB4MDAsMHhkZiwweDgwLDB4YjMsMHhlMCwweDBmLDB4ZjgsMHgwMywweDdjLDB4MDAsMHhjZCwweDAwIH0gfSwKK3sgIDE2LCAweGNmZTAsIDAsIHsweDMzLDB4MDQsMHgwYywweGUwLDB4MjMsMHgzNCwweDQwLDB4Y2QsMHgwMCwweDIzLDB4NDAsMHgwYywweGUwLDB4MDMsMHhlMCwweDA0IH0gfSwKK3sgIDE2LCAweGNmZjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MSwweDA0LDB4NmMsMHgxMCwweGJiLDB4MDAsMHhhMiwweGQyIH0gfSwKK3sgIDE2LCAweGQwMDAsIDAsIHsweDA4LDB4MjgsMHgwMiwweDA0LDB4NjAsMHg4YiwweDE5LDB4MjIsMHhjNiwweDBlLDB4YjEsMHg4YSwweDJlLDB4NDAsMHg4YiwweDkwIH0gfSwKK3sgIDE2LCAweGQwMTAsIDAsIHsweDIyLDB4YzEsMHgwOCwweGE0LDB4ODIsMHgyYywweDAwLDB4OGIsMHg5MCwweDIyLDB4NjQsMHg0OCwweGE0LDB4MDIsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGQwMjAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweGJiLDB4MDAsMHgyMiwweDAwIH0gfSwKK3sgIDE2LCAweGQwMzAsIDAsIHsweDA4LDB4OTEsMHgyZSwweDI0LDB4MDAsMHg5YiwweDAwLDB4MjIsMHhjMCwweDhiLDB4YjAsMHgxMiwweDIwLDB4MDQsMHg4OCwweDAwIH0gfSwKK3sgIDE2LCAweGQwNDAsIDAsIHsweDIyLDB4NDAsMHgwOCwweDEwLDB4MjIsMHgyMCwweDAwLDB4ODgsMHgwMSwweDJhLDB4ZDAsMHgwOCwweDgwLDB4NDIsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGQwNTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MGMsMHgwMCwweGIzLDB4MDQsMHgyMCwweDgwIH0gfSwKK3sgIDE2LCAweGQwNjAsIDAsIHsweDA4LDB4MTAsMHgwNiwweDA0LDB4MTAsMHg4MywweDAwLDB4MjAsMHhjMCwweDhiLDB4YjAsMHgxMiwweDAwLDB4MDAsMHg4MiwweDAwIH0gfSwKK3sgIDE2LCAweGQwNzAsIDAsIHsweDIwLDB4YzAsMHgyOCwweDEwLDB4NDIsMHgwOSwweDA2LDB4ODIsMHgwMCwweDI4LDB4YzAsMHgwOCwweDIwLDB4MDIsMHhjMiwweDAxIH0gfSwKK3sgIDE2LCAweGQwODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4N2MsMHgwMCwweGJiLDB4MDAsMHgzMiwweDQwIH0gfSwKK3sgIDE2LCAweGQwOTAsIDAsIHsweDJjLDB4YjAsMHgwMywweDI0LDB4MDAsMHhkMywweDAwLDB4MzIsMHhjMCwweDVmLDB4YjUsMHgwMywweDBjLDB4MDIsMHhjMSwweDAwIH0gfSwKK3sgIDE2LCAweGQwYTAsIDAsIHsweGIyLDB4MDAsMHgwYywweGIwLDB4MGIsMHgwNSwweDAwLDB4YzEsMHgwMCwweGI4LDB4YzAsMHgyYywweDgwLDB4MTMsMHhlMCwweDAzIH0gfSwKK3sgIDE2LCAweGQwYjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDFkLDB4ZGMsMHgwMCwweGZmLDB4MDAsMHgxZiwweGMwIH0gfSwKK3sgIDE2LCAweGQwYzAsIDAsIHsweDg3LDB4ZjAsMHgwMSwweGY0LDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBlLDB4NzAsMHg0MywweGZjLDB4MTAsMHg3ZiwweDAwIH0gfSwKK3sgIDE2LCAweGQwZDAsIDAsIHsweDNmLDB4YzAsMHgwZiwweDcwLDB4MDMsMHhmYywweDAwLDB4ZmYsMHgwMCwweDM3LDB4YzAsMHgwZiwweGUwLDB4MDMsMHhlOCwweDA2IH0gfSwKK3sgIDE2LCAweGQwZTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZjEsMHg4NCwweGZlLDB4NjEsMHgzMSwweGQ4IH0gfSwKK3sgIDE2LCAweGQwZjAsIDAsIHsweDBjLDB4YjIsMHhjMywweGZjLDB4ZTAsMHhjYywweDgwLDB4N2IsMHhjMCwweDBlLDB4ZjEsMHgwMywweDdjLDB4ZTAsMHhjYywweDgzIH0gfSwKK3sgIDE2LCAweGQxMDAsIDAsIHsweDNmLDB4MjAsMHgwZiwweGYwLDB4Y2IsMHgzMiwweDQ0LDB4ZGMsMHg4NCwweDNmLDB4MjUsMHg0YywweGYyLDB4NDMsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweGQxMTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4ZTQsMHg0OCwweGIwLDB4MTAsMHgyMiwweGRjIH0gfSwKK3sgIDE2LCAweGQxMjAsIDAsIHsweDA4LDB4YjYsMHgwMiwweGZkLDB4OTIsMHg4OCwweDg1LDB4MjMsMHhmNCwweDQwLDB4ZjEsMHgwMiwweGVkLDB4MDAsMHg4OCwweDJkIH0gfSwKK3sgIDE2LCAweGQxMzAsIDAsIHsweDBlLDB4NjAsMHgwYiwweGJjLDB4MTIsMHgyYywweDEwLDB4YTgsMHg4MiwweDJlLDB4MDAsMHgwYSwweGZjLDB4MjIsMHhhMCwweDA0IH0gfSwKK3sgIDE2LCAweGQxNDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzAsMHg4MCwweGIzLDB4MjIsMHgyOCwweGMwIH0gfSwKK3sgIDE2LCAweGQxNTAsIDAsIHsweDA4LDB4MzAsMHg4MiwweGNjLDB4MDEsMHg4OCwweDAwLDB4MmMsMHhjMCwweDRhLDB4MzIsMHgwMiwweGNjLDB4MDAsMHgwMSwweDAxIH0gfSwKK3sgIDE2LCAweGQxNjAsIDAsIHsweDI4LDB4MDAsMHg0YiwweGIwLDB4MDIsMHhhMCwweDAwLDB4ODAsMHgwMCwweDJjLDB4MDksMHgwOCwweDM0LDB4MDIsMHg2MiwweDAxIH0gfSwKK3sgIDE2LCAweGQxNzAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDE1LDB4YWMsMHgwNCwweGIyLDB4MTAsMHgyYSwweGMxIH0gfSwKK3sgIDE2LCAweGQxODAsIDAsIHsweDA4LDB4YjAsMHgwMiwweGVjLDB4MTAsMHg4OSwweDgwLDB4MjIsMHhjMCwweDA4LDB4YjAsMHgwMiwweGVjLDB4MDgsMHg4OCwweDAwIH0gfSwKK3sgIDE2LCAweGQxOTAsIDAsIHsweDJlLDB4NDAsMHg4MywweGIwLDB4MDIsMHhhMCwweDQwLDB4YjksMHg4MCwweDJjLDB4MjEsMHgwYSwweGIwLDB4MDIsMHhmMCwweDA0IH0gfSwKK3sgIDE2LCAweGQxYTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWMsMHgwMCwweGZhLDB4MDAsMHhiYSwweGMwIH0gfSwKK3sgIDE2LCAweGQxYjAsIDAsIHsweDJjLDB4YjAsMHg0MywweGVjLDB4MDAsMHhjMCwweDgwLDB4M2UsMHhjMCwweDhlLDB4YjAsMHgwMywweDRjLDB4MGMsMHhjOCwweDEwIH0gfSwKK3sgIDE2LCAweGQxYzAsIDAsIHsweDNlLDB4ODAsMHg4ZiwweGIwLDB4MDMsMHg4MiwweDEwLDB4ZDgsMHg4MiwweDNlLDB4MjgsMHgwYywweGIwLDB4MGIsMHg1MCwweDA0IH0gfSwKK3sgIDE2LCAweGQxZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4YjYsMHg4MCwweGZkLDB4MDIsMHgzNywweGMxIH0gfSwKK3sgIDE2LCAweGQxZTAsIDAsIHsweDBmLDB4YjAsMHgwMywweGZjLDB4MDAsMHhmZCwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHg1MywweGZjLDB4MDIsMHhmZiwweDAxIH0gfSwKK3sgIDE2LCAweGQxZjAsIDAsIHsweDJmLDB4YTQsMHg4YiwweGYwLDB4ODMsMHg3YywweDAwLDB4YWQsMHgwMiwweDJmLDB4NDAsMHgwMywweDcwLDB4MDMsMHhiOCwweDAwIH0gfSwKK3sgIDE2LCAweGQyMDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGZiLDB4MDQsMHgzMiwweGMwIH0gfSwKK3sgIDE2LCAweGQyMTAsIDAsIHsweDRjLDB4YjAsMHgyMywweDJjLDB4MDAsMHhmOCwweDQwLDB4M2UsMHhjMiwweDBjLDB4YjAsMHgwMywweDJjLDB4MDAsMHhmYiwweDQxIH0gfSwKK3sgIDE2LCAweGQyMjAsIDAsIHsweDMyLDB4YzIsMHgwZiwweGIwLDB4NDMsMHgyZCwweDAwLDB4YzgsMHg1MCwweDNlLDB4NDAsMHgwYywweGIwLDB4MGIsMHgxMCwweDA0IH0gfSwKK3sgIDE2LCAweGQyMzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDA1LDB4MmYsMHg5MCwweGI5LDB4NTAsMHgwMywweGMwIH0gfSwKK3sgIDE2LCAweGQyNDAsIDAsIHsweDE4LDB4ZjAsMHgxYSwweDNjLDB4MDAsMHhiOSwweDMyLDB4MmQsMHhlMCwweDM4LDB4ZjAsMHg2MCwweDNjLDB4MDQsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGQyNTAsIDAsIHsweDNlLDB4ZjAsMHgwYiwweDdjLDB4ODAsMHgyYywweDAwLDB4ZDksMHhjMCwweDJlLDB4NDAsMHgwZCwweGYwLDB4MDIsMHgzMiwweDAwIH0gfSwKK3sgIDE2LCAweGQyNjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGIsMHgyNCwweGIyLDB4MTAsMHgwMiwweGMxIH0gfSwKK3sgIDE2LCAweGQyNzAsIDAsIHsweDI4LDB4MzAsMHgwMiwweDZjLDB4MDQsMHhiMiwweGMxLDB4MmMsMHhjMCwweDA4LDB4MzAsMHgwMCwweDBjLDB4MDAsMHhiMiwweDAwIH0gfSwKK3sgIDE2LCAweGQyODAsIDAsIHsweDI4LDB4MjQsMHgwMywweDNjLDB4MGEsMHgwMCwweDAwLDB4ODIsMHhjOCwweDJjLDB4YTAsMHgwOCwweDMwLDB4MDIsMHgzOCwweDAwIH0gfSwKK3sgIDE2LCAweGQyOTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAxLDB4MTYsMHgwMCwweGI0LDB4ODAsMHgyMSwweGU0IH0gfSwKK3sgIDE2LCAweGQyYTAsIDAsIHsweDQ4LDB4N2IsMHgwMiwweDVlLDB4MDAsMHhiNiwweDgwLDB4NmQsMHhlMiwweDQ4LDB4NzksMHgyMiwweDFlLDB4NDAsMHhhYywweDg0IH0gfSwKK3sgIDE2LCAweGQyYjAsIDAsIHsweDJkLDB4ZTAsMHgwYiwweGZhLDB4MDAsMHg1MiwweDQwLDB4OTYsMHg4MCwweDJkLDB4ZTgsMHgxOSwweDM4LDB4MDIsMHgwOCwweDAwIH0gfSwKK3sgIDE2LCAweGQyYzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MDgsMHg0MCwweGYzLDB4MTAsMHhiMCwweGM0IH0gfSwKK3sgIDE2LCAweGQyZDAsIDAsIHsweDA4LDB4M2EsMHgwMiwweDRjLDB4OTAsMHhmMywweDEwLDB4M2MsMHhjYywweDA4LDB4MzEsMHgwMywweDBjLDB4NDksMHhiMCwweDQwIH0gfSwKK3sgIDE2LCAweGQyZTAsIDAsIHsweDMwLDB4MDUsMHgwZiwweDMwLDB4MDcsMHgyMSwweDQwLDB4NDMsMHgwMSwweDNlLDB4YzIsMHgxYywweDMwLDB4NDMsMHgxMiwweDAyIH0gfSwKK3sgIDE2LCAweGQyZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDBkLDB4YmMsMHgxMCwweGZjLDB4MTAsMHgzZiwweGM1IH0gfSwKK3sgIDE2LCAweGQzMDAsIDAsIHsweDBmLDB4ZjEsMHgwMSwweGJjLDB4MDQsMHhmZiwweDA0LDB4M2YsMHhjNCwweDBmLDB4YjEsMHg0YiwweGZjLDB4NjQsMHhmNywweDAwIH0gfSwKK3sgIDE2LCAweGQzMTAsIDAsIHsweDM3LDB4YzAsMHgwZiwweDcyLDB4NTMsMHhhYywweDQ0LDB4ZmYsMHgwMSwweDNmLDB4YzksMHgwZiwweGY0LDB4MDMsMHhkMCwweDA2IH0gfSwKK3sgIDE2LCAweGQzMjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHgwOCwweGZhLDB4MDAsMHgzZSwweGUwIH0gfSwKK3sgIDE2LCAweGQzMzAsIDAsIHsweDBjLDB4YjAsMHgwMywweDJjLDB4MDAsMHhjYiwweDAyLDB4M2UsMHhjYSwweDBmLDB4YjIsMHgwNywweDJlLDB4MDAsMHhkYiwweDAyIH0gfSwKK3sgIDE2LCAweGQzNDAsIDAsIHsweDMyLDB4MDgsMHgwZiwweDMxLDB4MDMsMHgyYywweDAwLDB4Y2IsMHgwNCwweDNlLDB4ODAsMHgwYywweDM1LDB4MDMsMHgyYSwweDAwIH0gfSwKK3sgIDE2LCAweGQzNTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDExLDB4OTQsMHgwMCwweGI1LDB4MDAsMHgyZCwweGM4IH0gfSwKK3sgIDE2LCAweGQzNjAsIDAsIHsweDA4LDB4NzAsMHgwYSwweDFjLDB4MjIsMHg4NywweDAwLDB4MmQsMHhjOSwweDBiLDB4ZjIsMHg4MiwweDljLDB4ODAsMHhhNiwweDAwIH0gfSwKK3sgIDE2LCAweGQzNzAsIDAsIHsweDA5LDB4OGIsMHgwYiwweDcwLDB4MGEsMHgxYywweDAyLDB4ODUsMHgwMCwweDJkLDB4NDAsMHgwOCwweDcwLDB4MDIsMHg5MiwweDA0IH0gfSwKK3sgIDE2LCAweGQzODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHgwMCwweGI3LDB4ODAsMHgyYywweGVjIH0gfSwKK3sgIDE2LCAweGQzOTAsIDAsIHsweDA4LDB4N2IsMHgwMiwweDVlLDB4NDAsMHg4NSwweDg5LDB4MmQsMHhlYywweDhiLDB4N2IsMHgwMiwweDRlLDB4ODQsMHg4ZiwweDgwIH0gfSwKK3sgIDE2LCAweGQzYTAsIDAsIHsweDI1LDB4NjQsMHgwYiwweGZhLDB4MDIsMHgxMiwweDA4LDB4OTcsMHg4MCwweDZmLDB4ZTEsMHgwOCwweDdhLDB4MDIsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweGQzYjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE0LDB4Y2MsMHgyMCwweGIzLDB4NjQsMHgyYywweGMwIH0gfSwKK3sgIDE2LCAweGQzYzAsIDAsIHsweDA4LDB4MzAsMHgwNiwweDBjLDB4MTAsMHg4MywweDhhLDB4NmMsMHhjMCwweDViLDB4MzAsMHg0MiwweGNjLDB4MDAsMHhhYiwweDEwIH0gfSwKK3sgIDE2LCAweGQzZDAsIDAsIHsweDJjLDB4ZjIsMHgwYiwweDMwLDB4MDIsMHgwZCwweDAwLDB4OTMsMHgwNCwweDJjLDB4ZDUsMHgwOCwweDMwLDB4MGEsMHg5MiwweDA0IH0gfSwKK3sgIDE2LCAweGQzZTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YmIsMHgwMCwweGZlLDB4YzAsMHgzZSwweDgwIH0gfSwKK3sgIDE2LCAweGQzZjAsIDAsIHsweDJjLDB4YTAsMHgwMywweDY4LDB4MDAsMHhjNiwweDQwLDB4M2YsMHg4MCwweDBmLDB4YTAsMHgwMiwweDY4LDB4MDAsMHhjZSwweDQ0IH0gfSwKK3sgIDE2LCAweGQ0MDAsIDAsIHsweDM2LDB4OTAsMHg0ZiwweDYwLDB4MDMsMHgxYiwweDcwLDB4ZGUsMHhkOCwweDNmLDB4YTAsMHgwYywweDIwLDB4MDMsMHgzYSwweDA0IH0gfSwKK3sgIDE2LCAweGQ0MTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4ZTAsMHg0MCwweGY4LDB4MTAsMHgzZSwweDAwIH0gfSwKK3sgIDE2LCAweGQ0MjAsIDAsIHsweDBmLDB4ODAsMHgwMywweGEwLDB4MTAsMHhmOCwweDQyLDB4M2UsMHgxMCwweDFmLDB4ODAsMHgwMywweGEwLDB4MDAsMHhlOCwweDBjIH0gfSwKK3sgIDE2LCAweGQ0MzAsIDAsIHsweDNhLDB4MDQsMHgxZiwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZTgsMHg0NSwweDdlLDB4MDIsMHgyZiwweDgwLDB4MDMsMHhkMiwweDAwIH0gfSwKK3sgIDE2LCAweGQ0NDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4NjQsMHgwMCwweGU5LDB4ODAsMHgzMiwweDQwIH0gfSwKK3sgIDE2LCAweGQ0NTAsIDAsIHsweDBmLDB4OTAsMHgwYiwweDA0LDB4MDgsMHhkOSwweDgwLDB4MzYsMHg0MCwweDBmLDB4MTAsMHgxMywweDI0LDB4MDgsMHhmOSwweDAwIH0gfSwKK3sgIDE2LCAweGQ0NjAsIDAsIHsweDcyLDB4NzAsMHgwZiwweDkxLDB4MTMsMHgyNCwweDEwLDB4YzksMHgxMCwweDNlLDB4NjksMHgwYywweDkwLDB4MDMsMHgwMiwweDA0IH0gfSwKK3sgIDE2LCAweGQ0NzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4NjQsMHgwOCwweGI5LDB4ODAsMHgyMiwweDQwIH0gfSwKK3sgIDE2LCAweGQ0ODAsIDAsIHsweDBiLDB4MTAsMHgwMiwweDI0LDB4MDAsMHg4OSwweGM0LDB4MjIsMHg1MiwweDBiLDB4OTAsMHg0MiwweDI0LDB4MDAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweGQ0OTAsIDAsIHsweDIyLDB4ZTAsMHgwYiwweDkwLDB4MTIsMHgyNCwweDA0LDB4ZDksMHg0YSwweDJlLDB4NjAsMHgwOCwweDkwLDB4MDMsMHg2MCwweDAwIH0gfSwKK3sgIDE2LCAweGQ0YTAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweGIxLDB4MTgsMHgyMiwweDQwIH0gfSwKK3sgIDE2LCAweGQ0YjAsIDAsIHsweDBiLDB4OTAsMHgwMiwweDI0LDB4MDAsMHg4YiwweDIwLDB4MjYsMHg0OSwweDBiLDB4OTAsMHgwMiwweDY0LDB4MDAsMHhiOSwweDAwIH0gfSwKK3sgIDE2LCAweGQ0YzAsIDAsIHsweGEyLDB4NDAsMHgwYiwweDkwLDB4OGEsMHgyNCwweDAwLDB4OGIsMHgwMCwweDJjLDB4NDAsMHhhOCwweDkwLDB4MDIsMHgwNiwweDAwIH0gfSwKK3sgIDE2LCAweGQ0ZDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDQsMHg4NCwweGIxLDB4MjAsMHhhMCwweDQ4IH0gfSwKK3sgIDE2LCAweGQ0ZTAsIDAsIHsweDBiLDB4MTEsMHgwNiwweDA0LDB4MDAsMHg4MywweDAwLDB4MDAsMHg0MCwweDRiLDB4MTEsMHgwMiwweDA0LDB4NDksMHhiMSwweDEwIH0gfSwKK3sgIDE2LCAweGQ0ZjAsIDAsIHsweDI4LDB4NDAsMHgwYiwweDEwLDB4MDIsMHgyNCwweDQxLDB4OTEsMHgwMCwweDJjLDB4NTAsMHgwOCwweDEwLDB4MDIsMHg0MiwweDAxIH0gfSwKK3sgIDE2LCAweGQ1MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjksMHg0MCwweGU4LDB4NTAsMHgzMiwweDE0IH0gfSwKK3sgIDE2LCAweGQ1MTAsIDAsIHsweDBmLDB4ODYsMHg5MywweDIxLDB4ZTIsMHhjOCwweDAwLDB4MzYsMHgwYSwweDBiLDB4ODYsMHg4YiwweDYxLDB4YTgsMHhmOCwweDQwIH0gfSwKK3sgIDE2LCAweGQ1MjAsIDAsIHsweDIyLDB4ODAsMHgwZiwweDgyLDB4YTMsMHgyMSwweDA4LDB4YzgsMHgwMiwweDNlLDB4MDAsMHgwYywweDgwLDB4NDMsMHgyZSwweDAzIH0gfSwKK3sgIDE2LCAweGQ1MzAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDFkLDB4ZjQsMHg0OCwweGZkLDB4MTIsMHgzZSwweDQ0IH0gfSwKK3sgIDE2LCAweGQ1NDAsIDAsIHsweDBmLDB4MTIsMHgwMywweGM0LDB4MDAsMHg3ZCwweDAxLDB4MWUsMHg0MCwweDBiLDB4OTIsMHgwMywweGU0LDB4ODAsMHhmNSwweDIwIH0gfSwKK3sgIDE2LCAweGQ1NTAsIDAsIHsweDM2LDB4NDAsMHgwZiwweDkwLDB4MDMsMHhkNCwweDkwLDB4N2QsMHgwMCwweDNkLDB4NDAsMHgwZiwweDk0LDB4MDMsMHhlNiwweDA2IH0gfSwKK3sgIDE2LCAweGQ1NjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4ZjYsMHhjMSwweGRkLDB4ODgsMHgzMiwweDcyIH0gfSwKK3sgIDE2LCAweGQ1NzAsIDAsIHsweDBjLDB4OTgsMHgwMywweDI2LDB4MjIsMHhkZCwweDAwLDB4M2YsMHg2MiwweDJjLDB4OTksMHg4MywweDQ2LDB4YTAsMHhjOSwweDQwIH0gfSwKK3sgIDE2LCAweGQ1ODAsIDAsIHsweGIyLDB4NDAsMHgwZiwweGQ4LDB4MDMsMHgyNCwweDAwLDB4ZmQsMHgwMCwweDMzLDB4NTEsMHgyYywweGQ4LDB4ODMsMHgwNiwweDAwIH0gfSwKK3sgIDE2LCAweGQ1OTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDEwLDB4ZTMsMHhjMiwweDg4LDB4YzAsMHgyMiwweDMwIH0gfSwKK3sgIDE2LCAweGQ1YTAsIDAsIHsweDA4LDB4OGMsMHg0MiwweDIyLDB4MTEsMHg4YSwweDAxLDB4MmUsMHgwMCwweDA4LDB4ODgsMHg1MiwweDIzLDB4MDAsMHg4MCwweGEzIH0gfSwKK3sgIDE2LCAweGQ1YjAsIDAsIHsweDJhLDB4MDAsMHg0YiwweDgwLDB4NDIsMHgyMiwweGEwLDB4YjgsMHgwMCwweDIyLDB4MjgsMHgwOCwweDg0LDB4MDIsMHg4ZSwweDA0IH0gfSwKK3sgIDE2LCAweGQ1YzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHgwMCwweDgxLDB4MmQsMHgyMCwweDQ4IH0gfSwKK3sgIDE2LCAweGQ1ZDAsIDAsIHsweDY4LDB4MTQsMHg4MCwweDA0LDB4MjAsMHg4MSwweDAwLDB4MmUsMHg0MCwweDBiLDB4MTIsMHgxMiwweDA0LDB4MjQsMHg4MSwweDIwIH0gfSwKK3sgIDE2LCAweGQ1ZTAsIDAsIHsweDIwLDB4NDAsMHgwYiwweDk0LDB4MzIsMHgwNCwweDkwLDB4YjksMHgwMCwweDIwLDB4NDAsMHg0OCwweDEwLDB4NGEsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweGQ1ZjAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4YTQsMHgwMCwweDg5LDB4MjAsMHgyMiwweDQwIH0gfSwKK3sgIDE2LCAweGQ2MDAsIDAsIHsweDA4LDB4OTAsMHgxMiwweDI0LDB4MDAsMHg4OSwweDAwLDB4MmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDgsMHg4OSwweDQwIH0gfSwKK3sgIDE2LCAweGQ2MTAsIDAsIHsweDIyLDB4NTAsMHgwYiwweGIwLDB4MDIsMHgyNCwweDIwLDB4YjksMHgwOSwweGEyLDB4NDQsMHgwOCwweDkwLDB4MDIsMHg4NiwweDA0IH0gfSwKK3sgIDE2LCAweGQ2MjAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGQ5LDB4MDgsMHhiMiwweDQwIH0gfSwKK3sgIDE2LCAweGQ2MzAsIDAsIHsweDRjLDB4MTAsMHgyMywweDA0LDB4MDQsMHhkOSwweGMxLDB4M2UsMHg0MCwweDhmLDB4OTAsMHgwYiwweDA0LDB4MDgsMHhjMSwweDQwIH0gfSwKK3sgIDE2LCAweGQ2NDAsIDAsIHsweDEyLDB4NDAsMHgwZiwweDkwLDB4NDMsMHgyNCwweDA0LDB4ZjEsMHg0MSwweDMwLDB4NzgsMHgwYywweDkwLDB4MDMsMHgyOCwweDA0IH0gfSwKK3sgIDE2LCAweGQ2NTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAxLDB4ODYsMHg2NCwweGY5LDB4ODAsMHgzZSwweDQwIH0gfSwKK3sgIDE2LCAweGQ2NjAsIDAsIHsweDBmLDB4OTAsMHgwYiwweGU0LDB4MDAsMHhmOSwweDk4LDB4M2UsMHg0MCwweDJmLDB4MTAsMHgwMywweGE0LDB4MDIsMHhmOSwweDEwIH0gfSwKK3sgIDE2LCAweGQ2NzAsIDAsIHsweDNlLDB4NDAsMHgwZiwweDkwLDB4MGIsMHhlNiwweDQwLDB4ZjksMHg5MCwweDNlLDB4NjAsMHgwZiwweDkwLDB4MDMsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGQ2ODAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGM4LDB4NDEsMHgzMiwweDAwIH0gfSwKK3sgIDE2LCAweGQ2OTAsIDAsIHsweDBjLDB4ODAsMHgwNywweDIwLDB4MTAsMHhjOCwweDEwLDB4M2UsMHgwYywweDBlLDB4ODAsMHgwMywweGUwLDB4MDQsMHhjOCwweDAwIH0gfSwKK3sgIDE2LCAweGQ2YTAsIDAsIHsweGJhLDB4MDAsMHgwZiwweDgxLDB4NDMsMHgyMCwweDAwLDB4ZjgsMHg3MCwweDNlLDB4MDAsMHgwZiwweDAwLDB4MGIsMHgwYSwweDA0IH0gfSwKK3sgIDE2LCAweGQ2YjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4MzksMHgwMiwweDhlLDB4MjAsMHhhMywweDgwIH0gfSwKK3sgIDE2LCAweGQ2YzAsIDAsIHsweDI4LDB4ZTAsMHgwYSwweDM4LDB4MTAsMHhhZSwweDA0LDB4M2QsMHhhMSwweDhlLDB4ZTAsMHgwMiwweGY4LDB4MDAsMHg4ZSwweDAwIH0gfSwKK3sgIDE2LCAweGQ2ZDAsIDAsIHsweDc2LDB4ODAsMHgwYiwweDYwLDB4MDMsMHg3OCwweDAwLDB4YmUsMHg0MCwweDJmLDB4ODIsMHgwYiwweGEwLDB4MDMsMHhjYSwweDAwIH0gfSwKK3sgIDE2LCAweGQ2ZTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGQsMHgwMCwweDhiLDB4ODgsMHgyMiwweGMwIH0gfSwKK3sgIDE2LCAweGQ2ZjAsIDAsIHsweDE4LDB4MzAsMHgwMiwweDBjLDB4MDAsMHg4MywweDQ0LDB4MmMsMHhkMCwweDFiLDB4MzAsMHgxMiwweGNjLDB4MDYsMHg4MywweDAwIH0gfSwKK3sgIDE2LCAweGQ3MDAsIDAsIHsweDIwLDB4YzEsMHgwYiwweDMwLDB4ODIsMHgwYywweDAxLDB4YjMsMHgwMCwweDJjLDB4NDAsMHgwYiwweDMwLDB4MDIsMHgwYSwweDAwIH0gfSwKK3sgIDE2LCAweGQ3MTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDAxLDB4MWMsMHgwMCwweDg1LDB4MDAsMHgyMCwweGNjIH0gfSwKK3sgIDE2LCAweGQ3MjAsIDAsIHsweDA4LDB4NzAsMHgwNiwweDFjLDB4ODQsMHhhNywweDAxLDB4MjksMHhjMCwweDBiLDB4NzIsMHgyMiwweGRjLDB4ODAsMHg4NywweDM0IH0gfSwKK3sgIDE2LCAweGQ3MzAsIDAsIHsweDYxLDB4ODAsMHgwYiwweDEwLDB4MDIsMHg1YywweDAwLDB4YjcsMHgwMCwweDJkLDB4YzAsMHgwYiwweDcwLDB4MDIsMHhlOCwweDAwIH0gfSwKK3sgIDE2LCAweGQ3NDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MGUsMHgwMCwweDhjLDB4ODAsMHgzMSwweGUwIH0gfSwKK3sgIDE2LCAweGQ3NTAsIDAsIHsweDBjLDB4ZmUsMHgwMiwweDNmLDB4MDAsMHhjNSwweDgwLDB4MmQsMHhlMCwweDBlLDB4NzgsMHgwMywweGRmLDB4YTAsMHhjNywweGEwIH0gfSwKK3sgIDE2LCAweGQ3NjAsIDAsIHsweDIxLDB4NjAsMHgwZiwweDc4LDB4MDMsMHgxZSwweDgwLDB4ZjcsMHg4MCwweDNkLDB4ZTAsMHgwZiwweDc4LDB4MDMsMHgyYSwweDAyIH0gfSwKK3sgIDE2LCAweGQ3NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDFkLDB4YWMsMHgwMCwweGY5LDB4MDAsMHgzZSwweGMwIH0gfSwKK3sgIDE2LCAweGQ3ODAsIDAsIHsweDBmLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmYSwweDAwLDB4M2UsMHhjMCwweDA2LDB4YjAsMHgwMywweGVjLDB4ODAsMHhmYiwweDI4IH0gfSwKK3sgIDE2LCAweGQ3OTAsIDAsIHsweDM2LDB4ZDgsMHg0ZiwweGEwLDB4MDMsMHhlYywweDEwLDB4ZmEsMHgwMCwweDNlLDB4NTAsMHgwZiwweDMwLDB4MDMsMHhjMiwweDA2IH0gfSwKK3sgIDE2LCAweGQ3YTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmEsMHgwMCwweGNjLDB4ODAsMHhiMywweGUwIH0gfSwKK3sgIDE2LCAweGQ3YjAsIDAsIHsweDBmLDB4ZjgsMHgwMywweDNlLDB4MDAsMHhjZiwweDkwLDB4M2YsMHg2MCwweDRmLDB4ZjgsMHhjMywweDNlLDB4MDAsMHhlZiwweDgwIH0gfSwKK3sgIDE2LCAweGQ3YzAsIDAsIHsweDMzLDB4ZjAsMHgwYywweDdhLDB4MDMsMHgzZSwweDcwLDB4YzUsMHg5MCwweDMzLDB4ZjEsMHgwYywweDc4LDB4MDMsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGQ3ZDAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4YjgsMHgwMCwweDg3LDB4MDAsMHgyMSwweGMwIH0gfSwKK3sgIDE2LCAweGQ3ZTAsIDAsIHsweDBiLDB4NzAsMHg0YSwweDFjLDB4MDAsMHg4NywweDEwLDB4MmQsMHhjMCwweDRiLDB4NzEsMHgwYSwweDNjLDB4NDQsMHg4ZiwweDEyIH0gfSwKK3sgIDE2LCAweGQ3ZjAsIDAsIHsweDIxLDB4ODYsMHgwZCwweDcyLDB4MDIsMHgxZSwweDAwLDB4ODcsMHgwMCwweDIzLDB4NDAsMHgwOCwweDcwLDB4MGEsMHgyYSwweDA0IH0gfSwKK3sgIDE2LCAweGQ4MDAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwMCwweDg0LDB4MDAsMHgyNSwweGMwIH0gfSwKK3sgIDE2LCAweGQ4MTAsIDAsIHsweDBiLDB4NzEsMHgwYSwweDBjLDB4MDAsMHhhNywweDEyLDB4MmQsMHg4NCwweDBiLDB4NzAsMHgwYSwweDFjLDB4MDAsMHhiNywweDA4IH0gfSwKK3sgIDE2LCAweGQ4MjAsIDAsIHsweDIzLDB4NDAsMHgwOSwweGYzLDB4MWEsMHg1YywweDg2LDB4OTcsMHgwOCwweDI1LDB4NDAsMHgwOCwweDcwLDB4MDIsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGQ4MzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDE0LDB4Y2MsMHgyMCwweDgxLDB4MjAsMHgyNiwweGMwIH0gfSwKK3sgIDE2LCAweGQ4NDAsIDAsIHsweDBiLDB4MzAsMHgwMiwweDJjLDB4MDAsMHg4MiwweDQyLDB4MmMsMHg4MCwweDBiLDB4MzAsMHgyMiwweDBjLDB4MDgsMHg5YiwweDgwIH0gfSwKK3sgIDE2LCAweGQ4NTAsIDAsIHsweDIwLDB4ZTAsMHgwOSwweDIwLDB4MDIsMHg0ZCwweDA4LDB4OTIsMHgwMCwweDI0LDB4ZTUsMHgwOCwweDMwLDB4MGEsMHgwOCwweDA0IH0gfSwKK3sgIDE2LCAweGQ4NjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YWUsMHg4MiwweGNhLDB4ZTAsMHhiNywweGMwIH0gfSwKK3sgIDE2LCAweGQ4NzAsIDAsIHsweDBmLDB4ZjAsMHgxMywweDNjLDB4MGEsMHhjOSwweGM4LDB4M2UsMHg0MCwweDBmLDB4ZjAsMHgwMywweDNjLDB4MDQsMHhmZiwweDg0IH0gfSwKK3sgIDE2LCAweGQ4ODAsIDAsIHsweDMyLDB4YzAsMHgwZCwweDkwLDB4MTMsMHg3YywweDAwLDB4ZDksMHgwMCwweGY2LDB4YzAsMHgyYywweDEwLDB4MDMsMHgyYSwweDA0IH0gfSwKK3sgIDE2LCAweGQ4OTAsIDAsIHsweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4ZTQsMHgwMCwweGYzLDB4MDAsMHgzYSwweGMxIH0gfSwKK3sgIDE2LCAweGQ4YTAsIDAsIHsweDRmLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmOSwweDA4LDB4M2MsMHgwMCwweDBmLDB4MzAsMHgxMywweGVjLDB4MDAsMHhlYiwweDA0IH0gfSwKK3sgIDE2LCAweGQ4YjAsIDAsIHsweGJlLDB4MTgsMHgwZiwweDkwLDB4MjMsMHhhYywweDYwLDB4ZTksMHgwMiwweDNhLDB4NDAsMHg0ZiwweDkwLDB4MDMsMHhlMCwweDAwIH0gfSwKK3sgIDE2LCAweGQ4YzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMCwweGNhLDB4MDAsMHgzMywweGMwIH0gfSwKK3sgIDE2LCAweGQ4ZDAsIDAsIHsweDBjLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhjZCwweDAyLDB4N2YsMHg0MCwweDBjLDB4ZjAsMHg0MiwweDNjLDB4MDAsMHhjZiwweDA4IH0gfSwKK3sgIDE2LCAweGQ4ZTAsIDAsIHsweDM3LDB4MTAsMHgwZiwweGQwLDB4MDMsMHhmYywweDEwLDB4Y2QsMHgwOCwweDNmLDB4NjYsMHgyYywweGQ5LDB4MDMsMHgwMCwweDQ0IH0gfSwKK3sgIDE2LCAweGQ4ZjAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MSwweDA0LDB4NjMsMHg4MCwweDhiLDB4ZTAsMHgyMiwweGMwIH0gfSwKK3sgIDE2LCAweGQ5MDAsIDAsIHsweDA4LDB4YjAsMHgyMiwweGVjLDB4MDAsMHhkOCwweDgwLDB4NmUsMHgyMCwweDY4LDB4YjAsMHgxYSwweDJjLDB4MDEsMHhmYiwweDAwIH0gfSwKK3sgIDE2LCAweGQ5MTAsIDAsIHsweDIyLDB4MTgsMHgwYiwweDg4LDB4NDMsMHg0YywweDAwLDB4ODgsMHhhMCwweDJjLDB4YzAsMHgxZCwweDkwLDB4MDIsMHgyMCwweDQwIH0gfSwKK3sgIDE2LCAweGQ5MjAsIDAsIHsweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAxLDB4MDgsMHg4MCwweDhiLDB4MjAsMHgyMiwweGMwIH0gfSwKK3sgIDE2LCAweGQ5MzAsIDAsIHsweDA4LDB4YjAsMHgyMiwweGVjLDB4MDAsMHg4OCwweDg4LDB4MmUsMHg2MiwweDQ4LDB4YjAsMHgxYSwweGNjLDB4MDAsMHg4YiwweDAwIH0gfSwKK3sgIDE2LCAweGQ5NDAsIDAsIHsweDI2LDB4YzAsMHg0YSwweDg4LDB4MDIsMHhlYywweDAwLDB4MDgsMHg4NCwweDJlLDB4NDAsMHgwOSwweDkwLDB4MDIsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGQ5NTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MDAsMHgwMCwweDgzLDB4MDAsMHg2MCwweGMwIH0gfSwKK3sgIDE2LCAweGQ5NjAsIDAsIHsweDA4LDB4MzAsMHgwMiwweGNjLDB4MDAsMHg5MCwweDA2LDB4NmMsMHgwMCwweDA4LDB4MzAsMHgwMiwweDhjLDB4MDAsMHhhMywweDA0IH0gfSwKK3sgIDE2LCAweGQ5NzAsIDAsIHsweDIwLDB4MDAsMHg4YiwweDAwLDB4MDYsMHg0YywweDIxLDB4ODAsMHgwMCwweDZjLDB4YzAsMHg0OSwweDEwLDB4MGEsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweGQ5ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGNhLDB4MDAsMHhiMiwweGMxIH0gfSwKK3sgIDE2LCAweGQ5OTAsIDAsIHsweDg4LDB4YjQsMHgwMywweGVjLDB4MTAsMHhjOCwweDAwLDB4MmUsMHgwMCwweDBjLDB4YjAsMHgwYiwweGJjLDB4MDgsMHg4ZiwweDAwIH0gfSwKK3sgIDE2LCAweGQ5YTAsIDAsIHsweDM2LDB4MDAsMHgwNiwweDgwLDB4MDMsMHhlYywweDgwLDB4YzgsMHgwMiwweDNmLDB4YzEsMHgwYywweDkwLDB4MDMsMHgwMCwweDAzIH0gfSwKK3sgIDE2LCAweGQ5YjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDFkLDB4ZjAsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwIH0gfSwKK3sgIDE2LCAweGQ5YzAsIDAsIHsweDBmLDB4NzIsMHg4MywweGZjLDB4MTgsMHhmYywweDAzLDB4M2YsMHgwMCwweDhmLDB4NzAsMHgwMywweDdjLDB4MDAsMHhmZiwweDAwIH0gfSwKK3sgIDE2LCAweGQ5ZDAsIDAsIHsweDNkLDB4MDAsMHgwZiwweGMwLDB4MjMsMHg4YywweDA2LDB4ZmMsMHgwMCwweDNmLDB4NDAsMHgwZSwweGQwLDB4MDMsMHhlOCwweDA2IH0gfSwKK3sgIDE2LCAweGQ5ZTAsIDAsIHsweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDEsMHgwMywweDcwLDB4NDAsMHhkYywweDEwIH0gfSwKK3sgIDE2LCAweGQ5ZjAsIDAsIHsweDM3LDB4MDQsMHgwZCwweGMxLDB4MDMsMHg3MCwweDQwLDB4ZGMsMHgxMCwweDM3LDB4MDQsMHgwZCwweGMxLDB4MDEsMHg3MCwweDQwIH0gfSwKK3sgIDE2LCAweGRhMDAsIDAsIHsweDljLDB4MTAsMHgxNywweDE0LDB4MDUsMHhjMSwweDAzLDB4NzAsMHg0MCwweGRjLDB4MTAsMHgxNywweDA0LDB4MGQsMHhjMCwweDMxIH0gfSwKK3sgIDE2LCAweGRhMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDQsMHgwNSwweDcxLDB4MDEsMHg1YywweDQwIH0gfSwKK3sgIDE2LCAweGRhMjAsIDAsIHsweDU3LDB4MTAsMHgxNSwweGM0LDB4MDUsMHgyMSwweDAxLDB4NWMsMHg0MCwweDU3LDB4MTAsMHgxNSwweGM0LDB4MDEsMHg3MSwweDAxIH0gfSwKK3sgIDE2LCAweGRhMzAsIDAsIHsweDVjLDB4NDAsMHgxNywweDEwLDB4MDUsMHhjNCwweDA1LDB4NzEsMHgwNSwweDVjLDB4NDEsMHg1NywweDEwLDB4MTUsMHhjMCwweDExIH0gfSwKK3sgIDE2LCAweGRhNDAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDIwIH0gfSwKK3sgIDE2LCAweGRhNTAsIDAsIHsweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwIH0gfSwKK3sgIDE2LCAweGRhNjAsIDAsIHsweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MCwweDIwIH0gfSwKK3sgIDE2LCAweGRhNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgwMCwweDYwLDB4MDAsMHg1OCwweDAwIH0gfSwKK3sgIDE2LCAweGRhODAsIDAsIHsweDE2LDB4MDAsMHgwNSwweDgwLDB4MDEsMHg2MCwweDAwLDB4NTgsMHgwMCwweDE2LDB4MDAsMHgwNSwweDgwLDB4MDUsMHg2MCwweDAwIH0gfSwKK3sgIDE2LCAweGRhOTAsIDAsIHsweDU4LDB4MDAsMHgxNiwweDE4LDB4MDEsMHg4MCwweDAxLDB4NjAsMHgwMCwweDU4LDB4MDAsMHg1NiwweDAwLDB4MDUsMHg4MCwweDIwIH0gfSwKK3sgIDE2LCAweGRhYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDgsMHgwNSwweDIyLDB4MDEsMHgxYywweDgwIH0gfSwKK3sgIDE2LCAweGRhYjAsIDAsIHsweDQ3LDB4MjAsMHgxMSwweGM4LDB4MDQsMHg3MiwweDAxLDB4NWMsMHg4MCwweDU3LDB4MjAsMHgxMSwweGM4LDB4MDQsMHg3MiwweDQxIH0gfSwKK3sgIDE2LCAweGRhYzAsIDAsIHsweDVjLDB4ODAsMHg1NywweDIwLDB4MTEsMHhjOCwweDA0LDB4NzIsMHgwMSwweDFjLDB4ODAsMHg0NywweDIwLDB4MTUsMHhjMCwweDMxIH0gfSwKK3sgIDE2LCAweGRhZDAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDAsMHgwMCwweDYwLDB4MDAsMHgxOCwweDAwIH0gfSwKK3sgIDE2LCAweGRhZTAsIDAsIHsweDA2LDB4MDAsMHgwMSwweDgwLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgwMCwweDA2LDB4MDAsMHgwMSwweDgwLDB4MDAsMHg2MCwweDAwIH0gfSwKK3sgIDE2LCAweGRhZjAsIDAsIHsweDE4LDB4MDAsMHgwNiwweDAwLDB4MDEsMHg4MCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MDAsMHgwNiwweDAwLDB4MDEsMHg4MCwweDMxIH0gfSwKK3sgIDE2LCAweGRiMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDgsMHgwNCwweDIyLDB4MDEsMHgwOCwweDgwIH0gfSwKK3sgIDE2LCAweGRiMTAsIDAsIHsweDQyLDB4MjAsMHgxMCwweDg4LDB4MDQsMHgyMiwweDAxLDB4MDgsMHg4MCwweDQyLDB4MjAsMHgxMCwweDgwLDB4MDQsMHgyMywweDAxIH0gfSwKK3sgIDE2LCAweGRiMjAsIDAsIHsweDA4LDB4ODAsMHg0MiwweDIwLDB4MTAsMHg4OCwweDA0LDB4MjIsMHgwMSwweDA4LDB4MDAsMHg0MiwweDIwLDB4MTAsMHg4MCwweDIxIH0gfSwKK3sgIDE2LCAweGRiMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NGEsMHgwNSwweDQyLDB4ODEsMHg1MCwweGEwIH0gfSwKK3sgIDE2LCAweGRiNDAsIDAsIHsweDQ0LDB4MmMsMHgxMSwweDBiLDB4MDQsMHg0MiwweDgxLDB4MTAsMHhlMCwweDU0LDB4MjgsMHgxMSwweDAyLDB4MDAsMHg0MiwweDgxIH0gfSwKK3sgIDE2LCAweGRiNTAsIDAsIHsweDEwLDB4YTAsMHg0NCwweDM4LDB4MTEsMHgwYiwweDA1LDB4NDIsMHg4MSwweDEwLDB4MjEsMHgxNCwweDI4LDB4MTUsMHgwMCwweDMxIH0gfSwKK3sgIDE2LCAweGRiNjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MGMsMHgwMSwweDU3LDB4MDAsMHg1NCwweGMwIH0gfSwKK3sgIDE2LCAweGRiNzAsIDAsIHsweDE1LDB4MzAsMHgwNCwweDRjLDB4MDEsMHgxMywweDAwLDB4NTQsMHhjMCwweDE1LDB4NzAsMHgwNSwweDRjLDB4MDEsMHg1MywweDAwIH0gfSwKK3sgIDE2LCAweGRiODAsIDAsIHsweDU0LDB4YzAsMHgxNSwweDMwLDB4ODUsMHg0YywweDAxLDB4MTMsMHgwMCwweDU0LDB4YzAsMHgxNSwweDMwLDB4MDUsMHg0MCwweDIxIH0gfSwKK3sgIDE2LCAweGRiOTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgxMCwweDAwIH0gfSwKK3sgIDE2LCAweGRiYTAsIDAsIHsweDA0LDB4MDAsMHgwMCwweDQwLDB4MDAsMHgxMCwweDAwLDB4MTAsMHg2MiwweDA0LDB4MDAsMHgwMSwweDA4LDB4MDQsMHg0MSwweDAwIH0gfSwKK3sgIDE2LCAweGRiYjAsIDAsIHsweDEwLDB4MDAsMHg0NCwweDE4LDB4MTEsMHgwMCwweDAwLDB4MTAsMHgwMCwweDEwLDB4ODAsMHgwNCwweDAwLDB4MDEsMHgwMSwweDIwIH0gfSwKK3sgIDE2LCAweGRiYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ1LDB4NjAsMHgwMiwweDA4LDB4MDAsMHg4MiwweDAwIH0gfSwKK3sgIDE2LCAweGRiZDAsIDAsIHsweDIwLDB4ODAsMHgwOCwweDYwLDB4MDIsMHgxOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgwOCwweDIwLDB4MDAsMHgwOCwweDIwIH0gfSwKK3sgIDE2LCAweGRiZTAsIDAsIHsweDgyLDB4MDAsMHgwMCwweDgwLDB4ODAsMHgyMCwweDAyLDB4MTgsMHgwMCwweDgyLDB4MDAsMHgyMCwweDgwLDB4MDgsMHgwMSwweDMxIH0gfSwKK3sgIDE2LCAweGRiZjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDAsMHgwNSwweDY0LDB4MDEsMHg1OCwweDAwIH0gfSwKK3sgIDE2LCAweGRjMDAsIDAsIHsweDU2LDB4MDAsMHgxNSwweDgwLDB4MDUsMHg2MCwweDAxLDB4NTgsMHgwMCwweDU2LDB4NDAsMHgxNSwweDgwLDB4MDUsMHg2MCwweDAxIH0gfSwKK3sgIDE2LCAweGRjMTAsIDAsIHsweDU4LDB4MDAsMHg1NiwweDAwLDB4MTUsMHg4MCwweDA1LDB4NjAsMHgwMSwweDU4LDB4MDAsMHg3NiwweDAwLDB4MTUsMHg4MCwweDMxIH0gfSwKK3sgIDE2LCAweGRjMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDAsMHgwMywweDYwLDB4MDAsMHhkOCwweDAwIH0gfSwKK3sgIDE2LCAweGRjMzAsIDAsIHsweDM2LDB4MDAsMHgwZCwweDgwLDB4MDMsMHg2MCwweDAwLDB4OTgsMHgwMCwweDM2LDB4MDAsMHgxZCwweDg4LDB4MDUsMHg2MCwweDAwIH0gfSwKK3sgIDE2LCAweGRjNDAsIDAsIHsweGQ4LDB4MDAsMHgxNiwweDAwLDB4MGQsMHg4MCwweDAzLDB4NjAsMHgwMCwweGQ4LDB4ODAsMHg0NiwweDAwLDB4MGQsMHg4MCwweDMxIH0gfSwKK3sgIDE2LCAweGRjNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDIsMHgwNCwweDMwLDB4ODEsMHgwYywweDIwIH0gfSwKK3sgIDE2LCAweGRjNjAsIDAsIHsweDQzLDB4MDgsMHgxMCwweGMyLDB4MDQsMHgzMCwweDgxLDB4MGMsMHgyMiwweDQxLDB4MDgsMHgxOCwweGMyLDB4MDQsMHgzMCwweDg5IH0gfSwKK3sgIDE2LCAweGRjNzAsIDAsIHsweDBjLDB4MjAsMHgwMywweDA4LDB4MTAsMHhjMiwweDA0LDB4MzAsMHg4MSwweDBjLDB4MjAsMHg0MywweDA4LDB4MTAsMHhjMCwweDEwIH0gfSwKK3sgIDE2LCAweGRjODAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHgwYywweDAwIH0gfSwKK3sgIDE2LCAweGRjOTAsIDAsIHsweDAzLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgzMCwweDAwLDB4MGMsMHgwMCwweDAzLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweGRjYTAsIDAsIHsweDBjLDB4MDAsMHgwMywweDAwLDB4MDAsMHhjMCwweDAwLDB4MzAsMHgwMCwweDBjLDB4MDAsMHgwMywweDAwLDB4MDAsMHhjMCwweDAxIH0gfSwKK3sgIDE2LCAweGRjYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDIsMHgwMSwweDMwLDB4ODAsMHg0YywweDIwIH0gfSwKK3sgIDE2LCAweGRjYzAsIDAsIHsweDEzLDB4MDgsMHgwNCwweGMyLDB4MDEsMHgzMCwweDgwLDB4NGMsMHgyMCwweDEzLDB4MDgsMHgwNCwweGMzLDB4MDEsMHgzMCwweDgwIH0gfSwKK3sgIDE2LCAweGRjZDAsIDAsIHsweDRjLDB4MjAsMHgxMywweDA4LDB4MDQsMHhjMiwweDAxLDB4MzAsMHg4MCwweDRjLDB4MzAsMHgxMywweDA4LDB4MDQsMHhjMCwweDIxIH0gfSwKK3sgIDE2LCAweGRjZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDIsMHgwNSwweDYwLDB4ODEsMHg1OCwweDIwIH0gfSwKK3sgIDE2LCAweGRjZjAsIDAsIHsweDU2LDB4MDgsMHgxMSwweDgyLDB4MDUsMHg2MCwweDgxLDB4NTgsMHgyMCwweDU2LDB4MDgsMHgxMSwweDgzLDB4MDAsMHg2MCwweDgxIH0gfSwKK3sgIDE2LCAweGRkMDAsIDAsIHsweDU4LDB4MjAsMHg0NiwweDA4LDB4MTEsMHg4MiwweDA0LDB4NjAsMHg4MSwweDE4LDB4MzAsMHg1NiwweDA4LDB4MTUsMHg4MCwweDMwIH0gfSwKK3sgIDE2LCAweGRkMTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDIsMHgwMCwweDIwLDB4ODAsMHgwOCwweDIwIH0gfSwKK3sgIDE2LCAweGRkMjAsIDAsIHsweDAyLDB4MDgsMHgwMCwweDgyLDB4MDAsMHgyMCwweDgwLDB4MDgsMHgyMCwweDAyLDB4MDgsMHgwMCwweDgyLDB4MDAsMHgzMCwweDgwIH0gfSwKK3sgIDE2LCAweGRkMzAsIDAsIHsweDA4LDB4MjAsMHgwMiwweDAwLDB4MDAsMHg4MiwweDAwLDB4MjAsMHg4MCwweDA4LDB4MjAsMHgwMywweDA4LDB4MDAsMHg4MCwweDMxIH0gfSwKK3sgIDE2LCAweGRkNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDIsMHgwNCwweDYwLDB4ODEsMHgxOCwweDIwIH0gfSwKK3sgIDE2LCAweGRkNTAsIDAsIHsweDQ2LDB4NDgsMHgxMSwweDkyLDB4MDQsMHg2MCwweDgxLDB4MTksMHgyMCwweDQ2LDB4MjgsMHgxMSwweDgyLDB4MDAsMHgzNCwweDgxIH0gfSwKK3sgIDE2LCAweGRkNjAsIDAsIHsweDE4LDB4MjAsMHg0NiwweDQ4LDB4MTEsMHg5MiwweDA0LDB4NjAsMHg4MSwweDE4LDB4MjAsMHg0MywweDA4LDB4MTEsMHg4MCwweDExIH0gfSwKK3sgIDE2LCAweGRkNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NjAsMHgwNCwweDU4LDB4MDEsMHg1NiwweDAwIH0gfSwKK3sgIDE2LCAweGRkODAsIDAsIHsweDU1LDB4ODAsMHgxNSwweDYwLDB4MDQsMHg1OCwweDAxLDB4MTYsMHgwMCwweDU1LDB4ODAsMHgwMSwweDYwLDB4MDQsMHgxOCwweDAxIH0gfSwKK3sgIDE2LCAweGRkOTAsIDAsIHsweDU2LDB4MDAsMHg0NSwweDgwLDB4MTEsMHg2MCwweDA0LDB4NTgsMHgwMSwweDE2LDB4MDAsMHg0MSwweDgwLDB4MTEsMHg0MCwweDMxIH0gfSwKK3sgIDE2LCAweGRkYTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDYsMHgwMSwweDQxLDB4ODAsMHg1MCwweDYwIH0gfSwKK3sgIDE2LCAweGRkYjAsIDAsIHsweDE0LDB4MTgsMHgwNSwweDA2LDB4MDEsMHg0MSwweDgwLDB4NTAsMHg2MCwweDA0LDB4MTgsMHgwNSwweDA2LDB4MDAsMHg0MSwweDgwIH0gfSwKK3sgIDE2LCAweGRkYzAsIDAsIHsweDEwLDB4NjAsMHgxNCwweDE4LDB4MDUsMHgwNiwweDAxLDB4NDEsMHg4MCwweDUwLDB4NjAsMHgxNCwweDE4LDB4MDUsMHgwMCwweDIwIH0gfSwKK3sgIDE2LCAweGRkZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMSwweDAwLDB4ODAsMHg0MCwweDIwIH0gfSwKK3sgIDE2LCAweGRkZTAsIDAsIHsweDEwLDB4NDgsMHgwNCwweDEyLDB4MDEsMHgwMCwweDgwLDB4NDEsMHgyMCwweDEwLDB4MDgsMHgwNCwweDAyLDB4MDEsMHgwNCwweDgwIH0gfSwKK3sgIDE2LCAweGRkZjAsIDAsIHsweDQwLDB4MjAsMHg1MCwweDQ4LDB4MDQsMHgxMiwweDAxLDB4MDAsMHg4NCwweDQwLDB4MjAsMHgxMCwweDA4LDB4MDQsMHgwMCwweDIwIH0gfSwKK3sgIDE2LCAweGRlMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDYsMHgwMywweDUxLDB4ODAsMHhkNCwweDYwIH0gfSwKK3sgIDE2LCAweGRlMTAsIDAsIHsweDMwLDB4MTgsMHgwZCwweDQ2LDB4MDMsMHg1MSwweDgwLDB4ZDUsMHg2MCwweDM1LDB4MTgsMHgwZCwweDQ2LDB4MDMsMHgwNSwweDgwIH0gfSwKK3sgIDE2LCAweGRlMjAsIDAsIHsweGQ0LDB4NjAsMHgxNSwweDE4LDB4MGQsMHg0NiwweDAzLDB4MTEsMHg4MCwweGQ0LDB4NjAsMHgzNSwweDE4LDB4MGQsMHg0MCwweDMxIH0gfSwKK3sgIDE2LCAweGRlMzAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDYsMHgwNSwweDcxLDB4ODAsMHg1YywweDYwIH0gfSwKK3sgIDE2LCAweGRlNDAsIDAsIHsweDk3LDB4MTgsMHgxNSwweGM2LDB4MDUsMHg3MSwweDgxLDB4NWMsMHgyMCwweDU3LDB4MTgsMHgxNSwweGM2LDB4MDMsMHg3MCwweDgxIH0gfSwKK3sgIDE2LCAweGRlNTAsIDAsIHsweDVjLDB4NjAsMHg1NywweDE4LDB4MTEsMHhjNiwweDA1LDB4MzEsMHg4MSwweDVjLDB4NjAsMHg3NywweDE4LDB4MTUsMHhjMCwweDMxIH0gfSwKK3sgIDE2LCAweGRlNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ1LDB4NDYsMHgwMywweDcxLDB4ODAsMHhkYywweDYwIH0gfSwKK3sgIDE2LCAweGRlNzAsIDAsIHsweDM3LDB4MTgsMHgwZCwweGM2LDB4MDMsMHg3MSwweDgwLDB4ZGQsMHg2MCwweDM3LDB4MTgsMHgwNSwweGM2LDB4MDEsMHg3NSwweDgxIH0gfSwKK3sgIDE2LCAweGRlODAsIDAsIHsweGRjLDB4NjAsMHgzNywweDE4LDB4MGQsMHhjNiwweDAzLDB4NzEsMHg4NCwweDVjLDB4NjAsMHgxNywweDE4LDB4MTksMHhjMCwweDExIH0gfSwKK3sgIDE2LCAweGRlOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ1LDB4NDYsMHgwNSwweDcxLDB4ODEsMHg1YywweDYwIH0gfSwKK3sgIDE2LCAweGRlYTAsIDAsIHsweDU3LDB4MTgsMHgxNCwweDg2LDB4MDUsMHg3MSwweDgxLDB4NWMsMHg2MCwweDU3LDB4MTgsMHgwNSwweGM2LDB4MDQsMHgzMSwweDgxIH0gfSwKK3sgIDE2LCAweGRlYjAsIDAsIHsweDVjLDB4NjAsMHg1NywweDE4LDB4MTUsMHhjNiwweDA1LDB4NzEsMHg4MCwweDVjLDB4NjAsMHg0MywweDE4LDB4MTUsMHhjMCwweDExIH0gfSwKK3sgIDE2LCAweGRlYzAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDIwIH0gfSwKK3sgIDE2LCAweGRlZDAsIDAsIHsweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHg3MCwweDgwIH0gfSwKK3sgIDE2LCAweGRlZTAsIDAsIHsweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjAsMHgxNywweDA4LDB4MDQsMHg4MCwweDAwIH0gfSwKK3sgIDE2LCAweGRlZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDYsMHgwMSwweDYxLDB4ODAsMHg1OCwweDYwIH0gfSwKK3sgIDE2LCAweGRmMDAsIDAsIHsweDE2LDB4MTgsMHg0MSwweDg2LDB4MDEsMHg2MSwweDgwLDB4MTgsMHg2MCwweDA2LDB4M2MsMHgwNSwweDg2LDB4MDQsMHg2MSwweDgwIH0gfSwKK3sgIDE2LCAweGRmMTAsIDAsIHsweDE4LDB4NjAsMHgxNiwweDE4LDB4MDEsMHg4NiwweDAwLDB4NjEsMHg4MCwweDU4LDB4NjAsMHg1NiwweDE4LDB4MTUsMHg4MCwweDEwIH0gfSwKK3sgIDE2LCAweGRmMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ1LDB4NDAsMHgwNSwweDcwLDB4MDEsMHg1YywweDAwIH0gfSwKK3sgIDE2LCAweGRmMzAsIDAsIHsweDU3LDB4MDAsMHgxNSwweGMwLDB4MDQsMHg3MCwweDAxLDB4NWMsMHgwMCwweDU3LDB4MDAsMHgxMCwweGMwLDB4MDQsMHg3MCwweDAwIH0gfSwKK3sgIDE2LCAweGRmNDAsIDAsIHsweDFjLDB4MDAsMHg0NywweDAwLDB4MTEsMHhjMCwweDA0LDB4NzAsMHgwMSwweDVjLDB4MDAsMHg0NywweDAwLDB4MDEsMHhjMCwweDExIH0gfSwKK3sgIDE2LCAweGRmNTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ1LDB4NDIsMHgwMCwweDYwLDB4ODAsMHgxOCwweDIwIH0gfSwKK3sgIDE2LCAweGRmNjAsIDAsIHsweDA2LDB4MDgsMHgwMSwweDgyLDB4MDAsMHg2MCwweDgwLDB4MTgsMHgyMCwweDA2LDB4MDgsMHgwMCwweDgyLDB4MDAsMHg2MCwweDgwIH0gfSwKK3sgIDE2LCAweGRmNzAsIDAsIHsweDE4LDB4MjAsMHgwNiwweDA4LDB4MDEsMHg4MiwweDAwLDB4NjAsMHg4MCwweDE4LDB4MjAsMHgwNiwweDA4LDB4MDEsMHg4MCwweDExIH0gfSwKK3sgIDE2LCAweGRmODAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4NDIsMHgwNCwweDIwLDB4ODEsMHgwOCwweDIwIH0gfSwKK3sgIDE2LCAweGRmOTAsIDAsIHsweDQyLDB4MDgsMHgxMCwweDgyLDB4MDQsMHgyMCwweDgxLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMSwweDgyLDB4MDQsMHgyMCwweDgwIH0gfSwKK3sgIDE2LCAweGRmYTAsIDAsIHsweDA4LDB4MjAsMHg0MiwweDA4LDB4MTAsMHg4MiwweDA0LDB4MjAsMHg4MSwweDA4LDB4MjAsMHg0MiwweDA4LDB4MDAsMHg4MCwweDExIH0gfSwKK3sgIDE2LCAweGRmYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ1LDB4NDIsMHgwNSwweDQwLDB4ODEsMHg1MCwweDIwIH0gfSwKK3sgIDE2LCAweGRmYzAsIDAsIHsweDU0LDB4MDgsMHgxNSwweDAyLDB4MDUsMHg0MCwweDgxLDB4MTAsMHgyMCwweDU0LDB4MGMsMHgxNSwweDQyLDB4MDAsMHg0MCwweDgxIH0gfSwKK3sgIDE2LCAweGRmZDAsIDAsIHsweDUwLDB4MjAsMHg0NCwweDA4LDB4MTEsMHgwMiwweDA1LDB4NDAsMHg4MSwweDEwLDB4MjAsMHgxNCwweDA4LDB4MDUsMHgwMCwweDExIH0gfSwKK3sgIDE2LCAweGRmZTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDMsMHgwMSwweDUwLDB4YzAsMHg1NCwweDMwIH0gfSwKK3sgIDE2LCAweGRmZjAsIDAsIHsweDE1LDB4MDgsMHgwNSwweDQyLDB4MDEsMHg1MCwweGMwLDB4NTQsMHgzMCwweDE1LDB4MGMsMHgwNSwweDQzLDB4MDEsMHg1MCwweGMwIH0gfSwKK3sgIDE2LCAweGUwMDAsIDAsIHsweDU0LDB4MzAsMHgxNSwweDBjLDB4MDUsMHg0MiwweDAxLDB4NTAsMHhjMCwweDU0LDB4MzAsMHgxNSwweDBjLDB4MDUsMHg0MCwweDEwIH0gfSwKK3sgIDE2LCAweGUwMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDQyLDB4MDAsMHgxMCwweDgwIH0gfSwKK3sgIDE2LCAweGUwMjAsIDAsIHsweDA0LDB4MjAsMHgwMSwweDg4LDB4MDAsMHg2MiwweDAwLDB4MTAsMHg4MCwweDA0LDB4MDAsMHgxMSwweDA4LDB4MDAsMHg0MiwweDAwIH0gfSwKK3sgIDE2LCAweGUwMzAsIDAsIHsweDEwLDB4ODAsMHgwNCwweDIwLDB4MDEsMHgwOCwweDAwLDB4NDIsMHgwMSwweDEwLDB4ODAsMHgwNCwweDIwLDB4MDEsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGUwNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ1LDB4NDIsMHgwMiwweDAwLDB4ODAsMHg4MCwweDIwIH0gfSwKK3sgIDE2LCAweGUwNTAsIDAsIHsweDIwLDB4MDgsMHgwOCwweDAyLDB4MDIsMHgyMCwweDgwLDB4ODAsMHgyMCwweDIwLDB4MjgsMHgwMCwweDAyLDB4MDIsMHgwMCwweDgwIH0gfSwKK3sgIDE2LCAweGUwNjAsIDAsIHsweDgwLDB4MjAsMHgyMCwweDBhLDB4MDgsMHgwMiwweDAyLDB4MDAsMHg4MCwweDAwLDB4MjAsMHgyMCwweDA4LDB4MDgsMHgwMCwweDExIH0gfSwKK3sgIDE2LCAweGUwNzAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ1LDB4NDAsMHgwNSwweDYwLDB4MDEsMHg1OCwweDAwIH0gfSwKK3sgIDE2LCAweGUwODAsIDAsIHsweDU2LDB4MDAsMHgwNSwweDgwLDB4MDUsMHg2MCwweDAxLDB4NTgsMHgwOCwweDU2LDB4MDAsMHgxNSwweDgwLDB4MDcsMHg2MCwweDAyIH0gfSwKK3sgIDE2LCAweGUwOTAsIDAsIHsweDU4LDB4MDAsMHg1NiwweDQwLDB4MTUsMHg4MCwweDA1LDB4NjAsMHgwMywweDE4LDB4MDAsMHg3NiwweDAwLDB4MTUsMHg4MCwweDExIH0gfSwKK3sgIDE2LCAweGUwYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDAsMHgwMywweDYwLDB4MDAsMHhkOCwweDAwIH0gfSwKK3sgIDE2LCAweGUwYjAsIDAsIHsweDM2LDB4MDAsMHgwZCwweDgwLDB4MDEsMHg2MCwweDAwLDB4ZDgsMHgwYSwweDM2LDB4MDAsMHgwZCwweDgwLDB4MDUsMHg3MCwweDA5IH0gfSwKK3sgIDE2LCAweGUwYzAsIDAsIHsweGQ4LDB4MDEsMHgzNiwweDAwLDB4MGQsMHg4MCwweDAzLDB4NjAsMHgwMCwweGQ4LDB4MDAsMHg1NywweDAwLDB4MGQsMHg4MCwweDAwIH0gfSwKK3sgIDE2LCAweGUwZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDMwLDB4MDEsMHgwYywweDAwIH0gfSwKK3sgIDE2LCAweGUwZTAsIDAsIHsweDQzLDB4MDAsMHgxMCwweGMwLDB4MDAsMHgzMCwweDAxLDB4MGMsMHgwMCwweDQzLDB4MjAsMHgxMCwweGMwLDB4MDQsMHg2MCwweDAxIH0gfSwKK3sgIDE2LCAweGUwZjAsIDAsIHsweDBjLDB4MDAsMHg0MywweDQwLDB4NTAsMHhjMSwweDA0LDB4MzAsMHgwMSwweDBjLDB4MDAsMHg0NiwweDAwLDB4MTAsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGUxMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHgwYywweDAwIH0gfSwKK3sgIDE2LCAweGUxMTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgzMCwweDAwLDB4MGMsMHgwMCwweDAzLDB4MDAsMHgwMCwweGQwLDB4MDAsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGUxMjAsIDAsIHsweDBjLDB4MDAsMHgwMywweDQwLDB4MDAsMHhjMCwweDAwLDB4MzAsMHgwMCwweDBkLDB4MDAsMHgwMiwweDAwLDB4MDAsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGUxMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHgwMSwweDMxLDB4NDAsMHg0YywweDUwIH0gfSwKK3sgIDE2LCAweGUxNDAsIDAsIHsweDEzLDB4MTAsMHgwNCwweGM0LDB4MDEsMHgzMSwweDQwLDB4NGMsMHg1MCwweDEzLDB4MTQsMHgwNCwweGM1LDB4MTEsMHgzMSwweDQxIH0gfSwKK3sgIDE2LCAweGUxNTAsIDAsIHsweDRjLDB4NTAsMHgxMywweDE0LDB4MDQsMHhjNSwweDAxLDB4MzEsMHg0MCwweDRjLDB4NTAsMHgxMywweDE0LDB4MDQsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGUxNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjMsMHgwNSwweDY4LDB4YzEsMHg1YSwweDMwIH0gfSwKK3sgIDE2LCAweGUxNzAsIDAsIHsweDU2LDB4OGMsMHgxMSwweGEzLDB4MDQsMHg2OCwweGMxLDB4MWEsMHgzMCwweDU2LDB4OGMsMHgxMSwweGEzLDB4MDUsMHg2OCwweGMwIH0gfSwKK3sgIDE2LCAweGUxODAsIDAsIHsweDVhLDB4MzAsMHg0NiwweDhjLDB4MTEsMHhhMywweDA0LDB4NjgsMHhjMSwweDVhLDB4MzAsMHgxNiwweDhjLDB4MTUsMHg4MCwweDAwIH0gfSwKK3sgIDE2LCAweGUxOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDAwIH0gfSwKK3sgIDE2LCAweGUxYTAsIDAsIHsweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgyMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4MjAsMHgwMCwweDkwLDB4MDAsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGUxYjAsIDAsIHsweDA4LDB4MDAsMHgwMiwweDQwLDB4MDAsMHg4MCwweDAwLDB4MjAsMHgwMCwweDA5LDB4MDAsMHgwMiwweDAwLDB4MDAsMHg4MCwweDAwIH0gfSwKK3sgIDE2LCAweGUxYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHg0NCwweDYyLDB4MDEsMHgxOCwweDg0IH0gfSwKK3sgIDE2LCAweGUxZDAsIDAsIHsweDQ2LDB4MjEsMHgxMSwweDg4LDB4NDQsMHg2MiwweDExLDB4MTgsMHg4NCwweDQ2LDB4MDEsMHgxMSwweDg4LDB4NDQsMHg2MiwweDEwIH0gfSwKK3sgIDE2LCAweGUxZTAsIDAsIHsweDE4LDB4ODQsMHg0NiwweDIxLDB4MTEsMHg4OCwweDQ0LDB4NjIsMHgxMSwweDE4LDB4ODQsMHgwNiwweDIxLDB4MTEsMHg4MCwweDAwIH0gfSwKK3sgIDE2LCAweGUxZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0NSwweDUwLDB4MTEsMHg1NCwweDA0IH0gfSwKK3sgIDE2LCAweGUyMDAsIDAsIHsweDU1LDB4MDEsMHgxMSwweDQwLDB4NDUsMHg1MCwweDExLDB4MTQsMHgwMCwweDQ1LDB4MDEsMHgxMSwweDQwLDB4NDQsMHg1MCwweDAwIH0gfSwKK3sgIDE2LCAweGUyMTAsIDAsIHsweDE0LDB4MDQsMHg0NSwweDAwLDB4MTUsMHg0MCwweDQ0LDB4NTAsMHgxMSwweDE0LDB4MDQsMHg1NSwweDAxLDB4MTEsMHg0MCwweDAwIH0gfSwKK3sgIDE2LCAweGUyMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgyMSwweDQyLDB4MDgsMHg1MCwweDgyIH0gfSwKK3sgIDE2LCAweGUyMzAsIDAsIHsweDE0LDB4MjAsMHg4NSwweDA4LDB4MjEsMHg0MiwweDA4LDB4NTAsMHg4MiwweDA0LDB4MjAsMHg4NSwweDA4LDB4MjEsMHg0MiwweDA4IH0gfSwKK3sgIDE2LCAweGUyNDAsIDAsIHsweDUwLDB4ODIsMHgxNCwweDIwLDB4MDUsMHgwOCwweDIxLDB4NDIsMHgwOCwweDUwLDB4ODIsMHgxNCwweDIwLDB4ODUsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGUyNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGEsMHgwMSwweDAyLDB4ODAsMHg0MCwweGEwIH0gfSwKK3sgIDE2LCAweGUyNjAsIDAsIHsweDEwLDB4MjgsMHgwNCwweDBhLDB4MDEsMHgwMiwweDgwLDB4NDAsMHhhMCwweDEwLDB4MjgsMHg0MCwweDBhLDB4MDEsMHgwMiwweDgwIH0gfSwKK3sgIDE2LCAweGUyNzAsIDAsIHsweDQwLDB4YTAsMHgxMCwweDI4LDB4NDQsMHgwYSwweDAxLDB4MDIsMHg4MCwweDQwLDB4YTAsMHgxMCwweDI4LDB4MDQsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGUyODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGMsMHgwMywweDUzLDB4MDAsMHhkNCwweGMwIH0gfSwKK3sgIDE2LCAweGUyOTAsIDAsIHsweDM1LDB4MzAsMHgwZCwweDRjLDB4MDEsMHg1MywweDAwLDB4ZDQsMHhjMCwweDM1LDB4MTAsMHgwYywweDRjLDB4MDMsMHg1MywweDAwIH0gfSwKK3sgIDE2LCAweGUyYTAsIDAsIHsweGQ0LDB4YzAsMHgzNSwweDMwLDB4MGQsMHg0YywweDAzLDB4NTMsMHgwMCwweGQ0LDB4YzAsMHgzNSwweDMwLDB4MGQsMHg0MCwweDAwIH0gfSwKK3sgIDE2LCAweGUyYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweDcyLDB4MDEsMHg1YywweDgwIH0gfSwKK3sgIDE2LCAweGUyYzAsIDAsIHsweDE3LDB4MjAsMHgwNSwweGM4LDB4MDYsMHg3MiwweDAxLDB4NWMsMHg4MCwweDU3LDB4MjAsMHgxNSwweGM4LDB4MDIsMHg3MiwweDAxIH0gfSwKK3sgIDE2LCAweGUyZDAsIDAsIHsweDVjLDB4ODAsMHg1NywweDIwLDB4MTUsMHhjOCwweDA1LDB4NzIsMHgwMSwweDVjLDB4ODAsMHgzNywweDIwLDB4MTEsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGUyZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjMsMHgxOCwweDQwLDB4YzYsMHgxMiwweDMxIH0gfSwKK3sgIDE2LCAweGUyZjAsIDAsIHsweDg0LDB4OGMsMHgyMSwweDIzLDB4MDgsMHg0OCwweGM2LDB4MTIsMHgzMCwweDg0LDB4MGMsMHg2MSwweDIzLDB4MTAsMHg0OCwweGMyIH0gfSwKK3sgIDE2LCAweGUzMDAsIDAsIHsweDEyLDB4MzEsMHg4NCwweDhjLDB4MDEsMHgyMywweDA4LDB4NDgsMHhjNiwweDEyLDB4MzEsMHgwNCwweDhjLDB4NjEsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGUzMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweDRmLDB4ZmYsMHhkMywweGZmIH0gfSwKK3sgIDE2LCAweGUzMjAsIDAsIHsweGY0LDB4ZmYsMHhmZCwweDNmLDB4ZmYsMHg0ZiwweGZmLDB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhmZCwweDNmLDB4ZmYsMHg0ZiwweGZmIH0gfSwKK3sgIDE2LCAweGUzMzAsIDAsIHsweGQzLDB4ZmYsMHhmNCwweGZmLDB4ZmQsMHgzZiwweGZmLDB4NGYsMHhmZiwweGQzLDB4ZmYsMHhmNCwweGZmLDB4ZmQsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGUzNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGUzNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGUzNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGUzNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmMsMHhkYiwweDBmLDB4YjYsMHhjMiwweGNkIH0gfSwKK3sgIDE2LCAweGUzODAsIDAsIHsweGIwLDB4YjMsMHg2YywweDJjLDB4ZGIsMHgwYiwweDM2LDB4YzIsMHhkZiwweGIwLDB4YjMsMHg2YywweDJjLDB4ZGIsMHgwYiwweDdlIH0gfSwKK3sgIDE2LCAweGUzOTAsIDAsIHsweGMyLDB4Y2QsMHhiMCwweGI3LDB4ZmQsMHgyYywweGRiLDB4MGIsMHgzNiwweGMyLDB4Y2QsMHhiMCwweGIzLDB4NmMsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGUzYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzMsMHgzYywweDRmLDB4Y2YsMHgxMywweDMzIH0gfSwKK3sgIDE2LCAweGUzYjAsIDAsIHsweGM0LDB4Y2MsMHhmMSwweDMzLDB4M2MsMHg0YywweGNmLDB4MTMsMHgzZiwweGM0LDB4Y2MsMHhmMSwweDMzLDB4M2MsMHg0YywweGZmIH0gfSwKK3sgIDE2LCAweGUzYzAsIDAsIHsweDEzLDB4MzMsMHhjNCwweGNmLDB4ZmQsMHgzMywweDNjLDB4NGMsMHhjZiwweDEzLDB4MzMsMHhjNCwweGNjLDB4ZjEsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGUzZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2IsMHg3ZSwweDRlLDB4ZGYsMHg5MywweGI3IH0gfSwKK3sgIDE2LCAweGUzZTAsIDAsIHsweGU0LDB4ZWMsMHg3OSwweDNiLDB4MWUsMHg0ZSwweGRmLDB4OTMsMHhiZiwweGU0LDB4OGQsMHhmOSwweDNiLDB4NzgsMHg0ZSwweGZmIH0gfSwKK3sgIDE2LCAweGUzZjAsIDAsIHsweDkzLDB4YjcsMHhlNCwweGVkLDB4ZmQsMHgzYiwweDFlLDB4NGUsMHhkZiwweDkzLDB4YjcsMHg4NCwweGVkLDB4ZjksMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGU0MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMiwweDcwLDB4NDAsMHg5YywweDEwIH0gfSwKK3sgIDE2LCAweGU0MTAsIDAsIHsweDI3LDB4MWMsMHgwOSwweGMxLDB4MDEsMHgzMCwweDQwLDB4MWMsMHgxMCwweDY3LDB4MDQsMHgwOSwweGMxLDB4MDIsMHg3MCwweDQxIH0gfSwKK3sgIDE2LCAweGU0MjAsIDAsIHsweDljLDB4MTEsMHgwNywweDE0LDB4MDEsMHhjMSwweDAyLDB4NzAsMHg0MCwweDljLDB4NTAsMHgwNywweDFjLDB4MDEsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGU0MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwNSwweDcxLDB4MDEsMHg1YywweDQwIH0gfSwKK3sgIDE2LCAweGU0NDAsIDAsIHsweDU3LDB4MTAsMHg1NSwweGM0LDB4MDEsMHgzMSwweDAwLDB4NWMsMHg0MCwweDU3LDB4MTAsMHgxNSwweGM0LDB4MDUsMHg3MSwweDAxIH0gfSwKK3sgIDE2LCAweGU0NTAsIDAsIHsweGRjLDB4NDAsMHgxNywweDE4LDB4MWQsMHhjNCwweDA1LDB4NzEsMHgwNSwweDVjLDB4NDAsMHg1NywweDEwLDB4MWQsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGU0NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDIwIH0gfSwKK3sgIDE2LCAweGU0NzAsIDAsIHsweDEyLDB4MDAsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwIH0gfSwKK3sgIDE2LCAweGU0ODAsIDAsIHsweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4NjAsMHgxMiwweDA4LDB4MDQsMHg4MCwweDAwIH0gfSwKK3sgIDE2LCAweGU0OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MDAsMHgxOCwweDAwIH0gfSwKK3sgIDE2LCAweGU0YTAsIDAsIHsweDA2LDB4MDAsMHg0MSwweDgwLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgwMCwweDQ2LDB4MDAsMHgwMSwweDgwLDB4MDAsMHg2MCwweDAwIH0gfSwKK3sgIDE2LCAweGU0YjAsIDAsIHsweDEwLDB4MDAsMHgwNiwweDEwLDB4MDEsMHg4MCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MjAsMHg0NiwweDEwLDB4MDEsMHg4MCwweDAwIH0gfSwKK3sgIDE2LCAweGU0YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNCwweDcyLDB4MDEsMHgxYywweDgwIH0gfSwKK3sgIDE2LCAweGU0ZDAsIDAsIHsweDQ3LDB4MjAsMHgxMSwweGM4LDB4MDQsMHg3MiwweDAxLDB4MWMsMHg4MCwweDA3LDB4MjAsMHgxMSwweGM4LDB4MDQsMHg3MywweDAwIH0gfSwKK3sgIDE2LCAweGU0ZTAsIDAsIHsweDFjLDB4ODAsMHg0NywweDIwLDB4MTEsMHhjYywweDA0LDB4NzIsMHgwMSwweDFjLDB4ODAsMHg0NywweDIwLDB4MTEsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGU0ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MDAsMHgxOCwweDAwIH0gfSwKK3sgIDE2LCAweGU1MDAsIDAsIHsweDA2LDB4MDAsMHgwMSwweDg0LDB4MDAsMHg2MCwweDAwLDB4MTgsMHgwMCwweDA2LDB4MDAsMHgwMSwweDgwLDB4MDAsMHg2MCwweDQwIH0gfSwKK3sgIDE2LCAweGU1MTAsIDAsIHsweDE4LDB4MDAsMHgwNiwweDA0LDB4MDEsMHg4MSwweDAwLDB4NjAsMHgwMCwweDE4LDB4MDAsMHgwNiwweDE0LDB4MDEsMHg4MCwweDAwIH0gfSwKK3sgIDE2LCAweGU1MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNCwweDIyLDB4MDEsMHgwOCwweDgwIH0gfSwKK3sgIDE2LCAweGU1MzAsIDAsIHsweDQyLDB4NzAsMHgxMCwweDhjLDB4MDQsMHgyMiwweDAxLDB4MDgsMHhjMCwweDAyLDB4MjAsMHgxMCwweDg4LDB4MDQsMHgyMiwweDAwIH0gfSwKK3sgIDE2LCAweGU1NDAsIDAsIHsweDA4LDB4ODAsMHg0MiwweDUwLDB4MTAsMHgwOCwweDA0LDB4MjIsMHgwMSwweDA5LDB4MDAsMHg0MiwweDQwLDB4MTAsMHg4MCwweDAwIH0gfSwKK3sgIDE2LCAweGU1NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmUsMHgwNCwweDRhLDB4ODEsMHgxMiwweGEwIH0gfSwKK3sgIDE2LCAweGU1NjAsIDAsIHsweDQ0LDB4YTgsMHgxMSwweDJhLDB4MDQsMHg0YSwweDgxLDB4MTIsMHhhMCwweDA0LDB4YTgsMHgxMSwweDJhLDB4MDQsMHg0YiwweDgwIH0gfSwKK3sgIDE2LCAweGU1NzAsIDAsIHsweDEyLDB4YTAsMHg0NCwweDg4LDB4MDEsMHgyZSwweDA0LDB4NGEsMHg4MSwweDEyLDB4MjAsMHgwNCwweDk4LDB4MDEsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGU1ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweGMwLDB4MGUsMHgwMCwweDUzLDB4MDAsMHgxNCwweGMwIH0gfSwKK3sgIDE2LCAweGU1OTAsIDAsIHsweDA1LDB4MzAsMHgwMSwweDRjLDB4MDAsMHg1MywweDAwLDB4MTQsMHhlMCwweDA1LDB4MzAsMHgwMSwweDRjLDB4MDAsMHg1MywweDAwIH0gfSwKK3sgIDE2LCAweGU1YTAsIDAsIHsweDA0LDB4YzAsMHgwNSwweDMwLDB4MDAsMHg0YywweDAwLDB4MDMsMHgwMCwweDE0LDB4YzAsMHgwNSwweDMwLDB4MDAsMHg0MCwweDEwIH0gfSwKK3sgIDE2LCAweGU1YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweGMwLDB4MDQsMHgwMCwweDQwLDB4MDAsMHgxMCwweDAwIH0gfSwKK3sgIDE2LCAweGU1YzAsIDAsIHsweDA0LDB4NTgsMHgwMSwweDA0LDB4MDAsMHg0MCwweDAwLDB4MTAsMHgwMCwweDA0LDB4MDAsMHgwMSwweDAwLDB4MDAsMHg0MSwweDAwIH0gfSwKK3sgIDE2LCAweGU1ZDAsIDAsIHsweDA0LDB4MDAsMHg0NCwweDU4LDB4MTAsMHg0NCwweDAwLDB4MDAsMHgwMCwweDExLDB4ODAsMHgwNCwweDUwLDB4MTAsMHg0MCwweDMwIH0gfSwKK3sgIDE2LCAweGU1ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweGMwLDB4NDAsMHgwMiwweDAwLDB4MDAsMHg4MCwweDAwIH0gfSwKK3sgIDE2LCAweGU1ZjAsIDAsIHsweDIwLDB4MDAsMHgwOCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGU2MDAsIDAsIHsweDg0LDB4MDAsMHgwMCwweDAwLDB4MDgsMHg0MCwweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgyMCwweDAwLDB4MDgsMHg0MCwweDMwIH0gfSwKK3sgIDE2LCAweGU2MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweGMwLDB4NDAsMHgwMCwweDYwLDB4MDEsMHgxOCwweDAwIH0gfSwKK3sgIDE2LCAweGU2MjAsIDAsIHsweDQ2LDB4MDAsMHgwMSwweDgwLDB4MDYsMHg2MCwweDAxLDB4OTgsMHgwMCwweDQ2LDB4MDAsMHgxMSwweDgwLDB4MDQsMHg2MCwweDAxIH0gfSwKK3sgIDE2LCAweGU2MzAsIDAsIHsweDE4LDB4MDAsMHg0NiwweDAwLDB4MTEsMHg4MCwweDA0LDB4MjAsMHgwMSwweDE4LDB4MDAsMHg2NiwweDAwLDB4MTEsMHg4MCwweDMwIH0gfSwKK3sgIDE2LCAweGU2NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDAxLDB4NDAsMHgwMCwweDYwLDB4MDAsMHg5OCwweDAwIH0gfSwKK3sgIDE2LCAweGU2NTAsIDAsIHsweDI2LDB4MDAsMHgwOSwweDgwLDB4MDIsMHg2MCwweDAxLDB4OTgsMHgwMCwweDA2LDB4MDAsMHgwYywweDgwLDB4MDIsMHg2MCwweDAwIH0gfSwKK3sgIDE2LCAweGU2NjAsIDAsIHsweDE4LDB4MDAsMHgwNiwweDAwLDB4MDEsMHg4MCwweDAyLDB4NjAsMHgwMCwweDk4LDB4ODAsMHgwNiwweDAwLDB4MDEsMHg4MiwweDAwIH0gfSwKK3sgIDE2LCAweGU2NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQ1LDB4NDIsMHgwMCwweDMwLDB4ODEsMHgwYywweDIwIH0gfSwKK3sgIDE2LCAweGU2ODAsIDAsIHsweDQzLDB4MDgsMHgxMCwweGMyLDB4MjQsMHgzMCwweDgxLDB4OGMsMHgyMCwweDAzLDB4MDgsMHgxMCwweGMyLDB4MDQsMHgyMCwweDgwIH0gfSwKK3sgIDE2LCAweGU2OTAsIDAsIHsweDBjLDB4MjAsMHgwMywweDA4LDB4MTgsMHhjMiwweDA0LDB4MzAsMHg4MSwweDBjLDB4MjAsMHg0MywweDA4LDB4MTgsMHhjMCwweDExIH0gfSwKK3sgIDE2LCAweGU2YTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHgwYywweDAwIH0gfSwKK3sgIDE2LCAweGU2YjAsIDAsIHsweDAzLDB4MDAsMHgwMCwweGMwLDB4NDAsMHgzMCwweDAwLDB4MGMsMHgwMCwweDAzLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgzMCwweDAwIH0gfSwKK3sgIDE2LCAweGU2YzAsIDAsIHsweDBjLDB4MDAsMHgwMywweDIwLDB4MDAsMHhjMCwweDAwLDB4MzAsMHgwMCwweDBjLDB4MDAsMHgwMywweDIwLDB4MDAsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGU2ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAxLDB4MDIsMHgxMCwweDMwLDB4ODAsMHgwYywweDIwIH0gfSwKK3sgIDE2LCAweGU2ZTAsIDAsIHsweDAzLDB4MDgsMHgwMCwweGMyLDB4MDAsMHgzMCwweDgwLDB4MGMsMHgyMCwweDAzLDB4MDgsMHgwMCwweGMyLDB4MDEsMHgyMCwweDgwIH0gfSwKK3sgIDE2LCAweGU2ZjAsIDAsIHsweDBjLDB4MjAsMHgwMywweDJjLDB4MDAsMHhjMiwweDAwLDB4MzAsMHg4MCwweDBjLDB4MzAsMHg0MywweDJjLDB4MDAsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGU3MDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQ1LDB4NDIsMHgwNCwweDYwLDB4ODEsMHgxOCwweDIwIH0gfSwKK3sgIDE2LCAweGU3MTAsIDAsIHsweDQ2LDB4MDgsMHgxMSwweDgyLDB4MDQsMHg2MCwweDgwLDB4MTgsMHgyMCwweDQ2LDB4MDgsMHgxMSwweDgyLDB4MDQsMHg2MCwweDgxIH0gfSwKK3sgIDE2LCAweGU3MjAsIDAsIHsweDE4LDB4MjAsMHg0NiwweDBjLDB4MTEsMHhjMiwweDA0LDB4NjAsMHg4MSwweDE4LDB4MzAsMHg0NiwweDBjLDB4MTEsMHhjMCwweDExIH0gfSwKK3sgIDE2LCAweGU3MzAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAxLDB4NDIsMHgwMCwweDIwLDB4ODAsMHgwOCwweDIwIH0gfSwKK3sgIDE2LCAweGU3NDAsIDAsIHsweDAyLDB4MjgsMHgwMCwweDgyLDB4MDAsMHgyMCwweDgwLDB4MDgsMHgyMCwweDAyLDB4MDgsMHgwMCwweDgyLDB4MDAsMHgyMCwweDgwIH0gfSwKK3sgIDE2LCAweGU3NTAsIDAsIHsweDA4LDB4MjAsMHgwMiwweDA4LDB4MDEsMHg4MiwweDAwLDB4MjAsMHg4MCwweDA4LDB4MjAsMHgwMywweDA4LDB4MDEsMHg4MCwweDAwIH0gfSwKK3sgIDE2LCAweGU3NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg1MCwweDAxLDB4NDIsMHgwNCwweDYwLDB4ODEsMHgxOCwweDIwIH0gfSwKK3sgIDE2LCAweGU3NzAsIDAsIHsweDQ2LDB4MjgsMHgxMSwweDgyLDB4MDQsMHg2MCwweDgwLDB4MTgsMHgyMCwweDQ2LDB4MDgsMHgxMSwweDgyLDB4MDQsMHg2MCwweDgxIH0gfSwKK3sgIDE2LCAweGU3ODAsIDAsIHsweDE4LDB4MjAsMHg0NiwweDA4LDB4MTAsMHg4MiwweDA0LDB4NjAsMHg4MSwweDE4LDB4MjAsMHg0MywweDA4LDB4MTAsMHg4MCwweDAwIH0gfSwKK3sgIDE2LCAweGU3OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQ1LDB4NDAsMHgwNCwweDUwLDB4MDEsMHgxNCwweDAwIH0gfSwKK3sgIDE2LCAweGU3YTAsIDAsIHsweDQ1LDB4MDAsMHgxMSwweDQwLDB4MjUsMHgwMCwweDAwLDB4MTQsMHgwMCwweDQ1LDB4MDAsMHgxMSwweDQwLDB4MDQsMHg1MCwweDAxIH0gfSwKK3sgIDE2LCAweGU3YjAsIDAsIHsweDE0LDB4MDAsMHg0NSwweDAwLDB4MDAsMHg0MCwweDA0LDB4NTAsMHgwMSwweDQwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHg0MiwweDExIH0gfSwKK3sgIDE2LCAweGU3YzAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4MDYsMHgwMCwweDQxLDB4ODAsMHgxMCwweDYwIH0gfSwKK3sgIDE2LCAweGU3ZDAsIDAsIHsweDA0LDB4MTgsMHgwMSwweDA2LDB4MDAsMHg0MSwweDgwLDB4MTAsMHg2MCwweDA0LDB4MTgsMHgwMSwweDA2LDB4MDAsMHg0MSwweDgwIH0gfSwKK3sgIDE2LCAweGU3ZTAsIDAsIHsweDEwLDB4NjAsMHgwNCwweDE4LDB4MDEsMHgwNiwweDAwLDB4NDEsMHg4MCwweDEwLDB4NjAsMHgwNCwweDE4LDB4MDEsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGU3ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4MDIsMHgwNSwweDAwLDB4ODAsMHg0MCwweDIxIH0gfSwKK3sgIDE2LCAweGU4MDAsIDAsIHsweDEwLDB4MDgsMHgwNCwweDAwLDB4MDEsMHgwMCwweDgwLDB4NDAsMHgyMCwweDEwLDB4MDgsMHgwNCwweDAyLDB4MDEsMHgwMCwweDgwIH0gfSwKK3sgIDE2LCAweGU4MTAsIDAsIHsweDQwLDB4MjAsMHg1MCwweDA4LDB4MTQsMHgwMiwweDExLDB4MDAsMHg4NCwweDQwLDB4MjAsMHgxMCwweDA4LDB4MTQsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGU4MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQ1LDB4NDYsMHgwMSwweDUxLDB4ODAsMHhkNCwweDYwIH0gfSwKK3sgIDE2LCAweGU4MzAsIDAsIHsweDM1LDB4MTgsMHgwZCwweDQ2LDB4MDMsMHg1MSwweDgwLDB4ZDQsMHg2MCwweDE1LDB4MTgsMHgwZCwweDQ2LDB4MDMsMHg1MSwweDgwIH0gfSwKK3sgIDE2LCAweGU4NDAsIDAsIHsweDU0LDB4NjAsMHgxNSwweDE4LDB4MGQsMHg0NiwweDAzLDB4NTEsMHg4MCwweGQ0LDB4NjAsMHgzNSwweDE4LDB4MGQsMHg0MCwweDExIH0gfSwKK3sgIDE2LCAweGU4NTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4NDYsMHgwNCwweDcxLDB4ODEsMHgxYywweDYwIH0gfSwKK3sgIDE2LCAweGU4NjAsIDAsIHsweDQ1LDB4MTgsMHgxMSwweGQ2LDB4MDQsMHg3MSwweDgxLDB4MWMsMHg2MCwweDY3LDB4MTgsMHgxMSwweGM2LDB4MDQsMHg3MSwweDgxIH0gfSwKK3sgIDE2LCAweGU4NzAsIDAsIHsweDljLDB4NjAsMHg0NywweDE4LDB4MTEsMHhjNiwweDA0LDB4NzEsMHg4MSwweDFjLDB4NjAsMHg2NywweDE4LDB4MTEsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGU4ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4NDYsMHgwMiwweDcxLDB4ODAsMHg5YywweDYwIH0gfSwKK3sgIDE2LCAweGU4OTAsIDAsIHsweDI3LDB4MTgsMHgwOSwweGM2LDB4MDAsMHg3MSwweDgwLDB4OWMsMHg2MCwweDY3LDB4MTgsMHgwOSwweGM2LDB4MDIsMHg3MSwweDgwIH0gfSwKK3sgIDE2LCAweGU4YTAsIDAsIHsweDljLDB4NjEsMHgyNywweDE4LDB4MDEsMHhjNiwweDAyLDB4NzEsMHg4MCwweDljLDB4NjAsMHgwNywweDE4LDB4MDEsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGU4YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg1MCwweDQ1LDB4NDYsMHgwNSwweDcxLDB4ODEsMHg1YywweDYwIH0gfSwKK3sgIDE2LCAweGU4YzAsIDAsIHsweDU3LDB4MTgsMHg1NSwweGQ2LDB4MDEsMHg3MSwweDgxLDB4NWMsMHg2MCwweDU3LDB4MTgsMHgxNSwweGM2LDB4MDUsMHg3MSwweDgxIH0gfSwKK3sgIDE2LCAweGU4ZDAsIDAsIHsweDVjLDB4NjAsMHg1NywweDE4LDB4MTgsMHhjNiwweDA1LDB4NzEsMHg4MSwweDVjLDB4NjAsMHg0MywweDE4LDB4MTgsMHg4MiwweDExIH0gfSwKK3sgIDE2LCAweGU4ZTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA0LDB4NTIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDIwIH0gfSwKK3sgIDE2LCAweGU4ZjAsIDAsIHsweDEyLDB4NDgsMHgwNCwweDkwLDB4MDEsMHgyMCwweDgwLDB4NDksMHgyMCwweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyNCwweDgwIH0gfSwKK3sgIDE2LCAweGU5MDAsIDAsIHsweDQ4LDB4MjAsMHgxMiwweDQ4LDB4MDAsMHg5MiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjAsMHgxNywweDQ4LDB4MDQsMHg4MCwweDAxIH0gfSwKK3sgIDE2LCAweGU5MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4MDYsMHgwMCwweDYxLDB4ODAsMHgxOCwweDYwIH0gfSwKK3sgIDE2LCAweGU5MjAsIDAsIHsweDA2LDB4M2MsMHgwMSwweDg2LDB4MDAsMHg2MSwweDgwLDB4MTgsMHg2MCwweDQ2LDB4MTgsMHgwMSwweDg2LDB4MDAsMHg2MSwweDgwIH0gfSwKK3sgIDE2LCAweGU5MzAsIDAsIHsweDE4LDB4NjAsMHgwNiwweDE4LDB4MDEsMHg4NiwweDAwLDB4NjEsMHg4MCwweDE4LDB4NjAsMHg0NiwweDE4LDB4MDEsMHg4MCwweDAxIH0gfSwKK3sgIDE2LCAweGU5NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQxLDB4NjAsMHgwNCwweDc4LDB4MDEsMHgxZSwweDAwIH0gfSwKK3sgIDE2LCAweGU5NTAsIDAsIHsweDQ3LDB4ODAsMHgxMSwweGUwLDB4MjQsMHg3OCwweDAxLDB4MWUsMHgwMCwweDA3LDB4ODAsMHgxMSwweGUwLDB4MDQsMHg3OCwweDAxIH0gfSwKK3sgIDE2LCAweGU5NjAsIDAsIHsweDFlLDB4MDAsMHg0NywweDgwLDB4MTEsMHhlMCwweDA0LDB4MzgsMHgwMSwweDFlLDB4MDAsMHg0NywweDgwLDB4MTEsMHhjMCwweDExIH0gfSwKK3sgIDE2LCAweGU5NzAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAxLDB4MTIsMHgwMCwweDYwLDB4ODAsMHgxOCwweDIwIH0gfSwKK3sgIDE2LCAweGU5ODAsIDAsIHsweDA2LDB4NDgsMHgwMSwweDkyLDB4MDAsMHg2MCwweDgwLDB4MTksMHgyMCwweDA2LDB4MDgsMHgwMSwweDgyLDB4MDAsMHg2NCwweDgwIH0gfSwKK3sgIDE2LCAweGU5OTAsIDAsIHsweDE4LDB4MjAsMHgwNiwweDQ4LDB4MDEsMHg5MywweDAwLDB4MjAsMHg4MCwweDE4LDB4MjAsMHgwNiwweDQ4LDB4MDEsMHg4MCwweDAwIH0gfSwKK3sgIDE2LCAweGU5YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAxLDB4NDIsMHgwNCwweDIwLDB4ODEsMHgwOCwweDIwIH0gfSwKK3sgIDE2LCAweGU5YjAsIDAsIHsweDQyLDB4MDgsMHgxMCwweDgyLDB4MDQsMHgyMCwweDgxLDB4MDgsMHgyMCwweDAyLDB4MDgsMHgxMCwweDgyLDB4MDQsMHgyMCwweDgxIH0gfSwKK3sgIDE2LCAweGU5YzAsIDAsIHsweDA4LDB4MjAsMHg0MiwweDA4LDB4MTAsMHg4YSwweDA0LDB4NjAsMHg4MSwweDA4LDB4MjAsMHg0MiwweDA4LDB4MTAsMHg4MCwweDAwIH0gfSwKK3sgIDE2LCAweGU5ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQ1LDB4NDIsMHgwNCwweDQwLDB4ODEsMHgxMCwweDIwIH0gfSwKK3sgIDE2LCAweGU5ZTAsIDAsIHsweDQ0LDB4MDgsMHgxMSwweDAyLDB4MDQsMHg0MCwweDgxLDB4MTAsMHgyMCwweDA0LDB4MDgsMHgxMSwweDAyLDB4MDQsMHg0MCwweDgxIH0gfSwKK3sgIDE2LCAweGU5ZjAsIDAsIHsweDEwLDB4MjEsMHg0NCwweDA4LDB4MDEsMHgwMiwweDA0LDB4NTAsMHg4MSwweDEwLDB4MjAsMHgwNCwweDA4LDB4MDEsMHgwMCwweDExIH0gfSwKK3sgIDE2LCAweGVhMDAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4MDMsMHgwMCwweDUwLDB4YzAsMHgxNCwweDMwIH0gfSwKK3sgIDE2LCAweGVhMTAsIDAsIHsweDA1LDB4MGMsMHgwMSwweDQzLDB4MDAsMHg1MCwweGMwLDB4MTQsMHgzMCwweDA1LDB4MGMsMHgwMSwweDQzLDB4MDAsMHg1MCwweDgwIH0gfSwKK3sgIDE2LCAweGVhMjAsIDAsIHsweDE0LDB4MzAsMHgwNSwweDA4LDB4MDEsMHg0YSwweDAwLDB4NTAsMHhjMCwweDE0LDB4MzAsMHgwNSwweDA4LDB4MDEsMHg0MCwweDAwIH0gfSwKK3sgIDE2LCAweGVhMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4MDgsMHgwMCwweDQyLDB4MDAsMHgxMCwweDgwIH0gfSwKK3sgIDE2LCAweGVhNDAsIDAsIHsweDA0LDB4MjAsMHgwMSwweDA4LDB4MDAsMHg0MiwweDAwLDB4MTAsMHg4MCwweDA0LDB4MjAsMHgwMSwweDA4LDB4MDAsMHg0MiwweDAwIH0gfSwKK3sgIDE2LCAweGVhNTAsIDAsIHsweDEwLDB4ODAsMHgwNCwweDIwLDB4MTEsMHgwMCwweDAwLDB4NDIsMHgwMCwweDEwLDB4ODAsMHgwNCwweDIwLDB4MTEsMHgwMCwweDEwIH0gfSwKK3sgIDE2LCAweGVhNjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQ1LDB4NDIsMHgwMiwweDAwLDB4ODAsMHg4MCwweDIwIH0gfSwKK3sgIDE2LCAweGVhNzAsIDAsIHsweDIwLDB4MDgsMHgwOCwweDAyLDB4MDAsMHgwMCwweDgwLDB4ODAsMHgyMCwweDIwLDB4MDgsMHgwOCwweDAyLDB4MDIsMHgwMCwweDgwIH0gfSwKK3sgIDE2LCAweGVhODAsIDAsIHsweDgwLDB4MjAsMHgyMCwweDA4LDB4MDgsMHgwMiwweDAyLDB4MDAsMHg4MCwweDgwLDB4MjAsMHgyMCwweDA4LDB4MDgsMHgwMCwweDExIH0gfSwKK3sgIDE2LCAweGVhOTAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAxLDB4NDAsMHgwMCwweDYwLDB4MDEsMHgxOCwweDAwIH0gfSwKK3sgIDE2LCAweGVhYTAsIDAsIHsweDQ2LDB4MDAsMHgxMSwweDgwLDB4MDYsMHg2MCwweDAxLDB4MTgsMHgwMCwweDQ2LDB4MDAsMHgxMSwweDgwLDB4MDQsMHg2MCwweDAxIH0gfSwKK3sgIDE2LCAweGVhYjAsIDAsIHsweDE4LDB4MDAsMHg0NiwweDAwLDB4MTEsMHg4MCwweDA0LDB4NjAsMHgwMSwweDE4LDB4MDAsMHg2NiwweDAwLDB4MTEsMHg4MCwweDEwIH0gfSwKK3sgIDE2LCAweGVhYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAxLDB4NDAsMHgwMiwweDY0LDB4MDAsMHg5OCwweDAwIH0gfSwKK3sgIDE2LCAweGVhZDAsIDAsIHsweDI2LDB4MDAsMHgwOSwweDkwLDB4MDYsMHg2MCwweDAxLDB4OTgsMHgwMCwweDI2LDB4NDAsMHgwOSwweDgwLDB4MDIsMHg2MCwweDAwIH0gfSwKK3sgIDE2LCAweGVhZTAsIDAsIHsweDk4LDB4MDAsMHgyNiwweDAwLDB4MDAsMHg5MCwweDAyLDB4NjAsMHgwMCwweDk4LDB4MDAsMHgwNywweDAwLDB4MDEsMHg4MCwweDAwIH0gfSwKK3sgIDE2LCAweGVhZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQ1LDB4NjAsMHgwNCwweDM4LDB4MDUsMHgwZSwweDAwIH0gfSwKK3sgIDE2LCAweGViMDAsIDAsIHsweDQzLDB4ODAsMHgxMCwweGUwLDB4NDQsMHgzOCwweDAxLDB4MGUsMHgwMCwweDQzLDB4ODAsMHgxMCwweGUwLDB4MDQsMHgzOCwweDAxIH0gfSwKK3sgIDE2LCAweGViMTAsIDAsIHsweDBlLDB4MDAsMHg0MywweDgwLDB4MTgsMHhhMCwweDA0LDB4MzgsMHgwMSwweDBlLDB4MDAsMHg0NiwweDgwLDB4MTgsMHg4MCwweDExIH0gfSwKK3sgIDE2LCAweGViMjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg1MCwweDAwLDB4MDEsMHgwMCwweDMwLDB4NDAsMHgwYywweDEwIH0gfSwKK3sgIDE2LCAweGViMzAsIDAsIHsweDAzLDB4MDQsMHgwMCwweGM1LDB4MDAsMHgzMCwweDQwLDB4MGMsMHgxMCwweDAzLDB4MTQsMHgwMCwweGMxLDB4MDAsMHgzMCwweDQwIH0gfSwKK3sgIDE2LCAweGViNDAsIDAsIHsweDBjLDB4MTAsMHgwMywweDA0LDB4MDAsMHg4NywweDQwLDB4MzAsMHg0MCwweDBjLDB4MTAsMHgwMiwweDA0LDB4MDAsMHg4MCwweDAwIH0gfSwKK3sgIDE2LCAweGViNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA0LDB4MDUsMHgwMCwweDM1LDB4NDAsMHgwYywweDUwIH0gfSwKK3sgIDE2LCAweGViNjAsIDAsIHsweDAzLDB4MTQsMHgwMCwweGQ1LDB4MDQsMHgzMSwweDQxLDB4MGMsMHg1MCwweDAzLDB4NWMsMHgwMCwweGM1LDB4MDAsMHgzMSwweDAwIH0gfSwKK3sgIDE2LCAweGViNzAsIDAsIHsweDBjLDB4NTAsMHgwMywweDEwLDB4MDAsMHg5NCwweDAwLDB4MzEsMHg0MCwweDBjLDB4NTAsMHg0MywweDEwLDB4MDAsMHhjMiwweDAwIH0gfSwKK3sgIDE2LCAweGViODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQ1LDB4NDMsMHgwNSwweDIwLDB4YzEsMHgxOCwweDMwIH0gfSwKK3sgIDE2LCAweGViOTAsIDAsIHsweDQ2LDB4MGMsMHgxMSwweDk3LDB4MDAsMHg2MCwweGMwLDB4MTgsMHgzMCwweDQ2LDB4MWMsMHgxMSwweDgzLDB4MDQsMHg2MCwweGMxIH0gfSwKK3sgIDE2LCAweGViYTAsIDAsIHsweDE4LDB4MzAsMHg1MiwweDBjLDB4MTEsMHg4NywweDA0LDB4NjAsMHhjMSwweDE4LDB4MzAsMHg0NiwweDBjLDB4MTEsMHg4MCwweDExIH0gfSwKK3sgIDE2LCAweGViYjAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAxLDB4MDAsMHgwMCwweDIxLDB4NDAsMHgwOCwweDAwIH0gfSwKK3sgIDE2LCAweGViYzAsIDAsIHsweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgyMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgyMCwweDAwIH0gfSwKK3sgIDE2LCAweGViZDAsIDAsIHsweDA4LDB4MDAsMHgwMiwweDAwLDB4MDAsMHg4MCwweDAwLDB4MjAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDAwLDB4MDAsMHg4MCwweDAwIH0gfSwKK3sgIDE2LCAweGViZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAxLDB4NDgsMHg0NCwweDIyLDB4MDEsMHgxOCwweDg0IH0gfSwKK3sgIDE2LCAweGViZjAsIDAsIHsweDQ2LDB4MjEsMHgxMSwweDk4LDB4MDAsMHg2MiwweDEwLDB4MTgsMHg4NCwweDQ0LDB4MjAsMHgxMSwweDg4LDB4NDQsMHg2MiwweDExIH0gfSwKK3sgIDE2LCAweGVjMDAsIDAsIHsweDE4LDB4ODQsMHg0MiwweDIxLDB4MTEsMHg4MCwweDQ0LDB4NjIsMHgxMSwweDE4LDB4ODQsMHg0NiwweDIxLDB4MTEsMHg4MCwweDAwIH0gfSwKK3sgIDE2LCAweGVjMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQ1LDB4NDAsMHgwNCwweDUwLDB4MTEsMHgxNCwweDA0IH0gfSwKK3sgIDE2LCAweGVjMjAsIDAsIHsweDQ1LDB4MDAsMHgxMSwweDQxLDB4MDAsMHg1MCwweDEwLDB4MTQsMHgwMCwweDQ1LDB4MDEsMHgxMSwweDQwLDB4NDQsMHg1MCwweDExIH0gfSwKK3sgIDE2LCAweGVjMzAsIDAsIHsweDE0LDB4MDQsMHg0NSwweDAxLDB4MDEsMHg0MCwweDQ0LDB4NTAsMHgxMSwweDE0LDB4MDQsMHgwNSwweDAxLDB4MDEsMHg0MCwweDExIH0gfSwKK3sgIDE2LCAweGVjNDAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMCwweDgyIH0gfSwKK3sgIDE2LCAweGVjNTAsIDAsIHsweDA0LDB4MjAsMHgwMSwweDA4LDB4MjAsMHg0MiwweDA4LDB4MTAsMHg4MiwweDA0LDB4MjAsMHg4MSwweDA4LDB4MjAsMHg0MiwweDA4IH0gfSwKK3sgIDE2LCAweGVjNjAsIDAsIHsweDEwLDB4ODIsMHgwNCwweDIyLDB4ODEsMHgwOCwweDIwLDB4NTIsMHgwOCwweDEwLDB4OGEsMHgwNCwweDIyLDB4ODEsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGVjNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MGEsMHgwMSwweDAyLDB4ODQsMHg0MCwweGExIH0gfSwKK3sgIDE2LCAweGVjODAsIDAsIHsweDEwLDB4MjgsMHgwMCwweDBhLDB4MDEsMHgwMiwweDgwLDB4NDAsMHhhMCwweDEwLDB4MjgsMHgwNCwweDBhLDB4MDEsMHgwMiwweDgwIH0gfSwKK3sgIDE2LCAweGVjOTAsIDAsIHsweDQwLDB4YTAsMHgxMCwweDJjLDB4MTQsMHgwYSwweDAwLDB4MDIsMHg4MCwweDQwLDB4YjAsMHgxMCwweDJjLDB4MTQsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGVjYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQ1LDB4NGQsMHgwMywweDUzLDB4NDAsMHhkNCwweGQwIH0gfSwKK3sgIDE2LCAweGVjYjAsIDAsIHsweDM1LDB4MzAsMHgwYywweDRkLDB4MDMsMHg1MywweDQwLDB4ZDQsMHhkMCwweDM1LDB4MzQsMHgwZCwweDRkLDB4MDMsMHg1MywweDQwIH0gfSwKK3sgIDE2LCAweGVjYzAsIDAsIHsweGQ0LDB4ZDAsMHgzNSwweDM0LDB4MGQsMHg0ZCwweDAyLDB4MTMsMHg0MCwweGQ0LDB4ZDAsMHgzNSwweDM0LDB4MGQsMHg0MCwweDExIH0gfSwKK3sgIDE2LCAweGVjZDAsIDAsIHsweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAxLDB4MDgsMHgwNCwweDcyLDB4MDEsMHgxYywweDgwIH0gfSwKK3sgIDE2LCAweGVjZTAsIDAsIHsweDQ3LDB4MjAsMHgxNSwweGM4LDB4MDQsMHg3MiwweDAxLDB4MWMsMHg4MCwweDQ3LDB4MjAsMHgxMSwweGM4LDB4MDQsMHg3MiwweDExIH0gfSwKK3sgIDE2LCAweGVjZjAsIDAsIHsweDFjLDB4ODAsMHg0NywweDI2LDB4MTEsMHhjOCwweDQ0LDB4NzIsMHgwMSwweDFjLDB4OTAsMHg2NywweDI2LDB4MTEsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGVkMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjMsMHgwOCwweDQwLDB4YzYsMHgxMiwweDMxIH0gfSwKK3sgIDE2LCAweGVkMTAsIDAsIHsweDg0LDB4OGMsMHgwMSwweDAzLDB4MDgsMHg0OCwweGM2LDB4MTIsMHgzMCwweDg0LDB4MGMsMHg2MSwweDIzLDB4MTgsMHg0OCwweGMyIH0gfSwKK3sgIDE2LCAweGVkMjAsIDAsIHsweDEyLDB4MzEsMHg4NCwweDhjLDB4MDEsMHgwMywweDA4LDB4NDgsMHhjNiwweDEyLDB4MzEsMHgwNCwweDhjLDB4MDEsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGVkMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweDRmLDB4ZmYsMHhkMywweGZmIH0gfSwKK3sgIDE2LCAweGVkNDAsIDAsIHsweGY0LDB4ZmYsMHhmZCwweDNmLDB4ZmYsMHg0ZiwweGZmLDB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhmZCwweDNmLDB4ZmYsMHg0ZiwweGZmIH0gfSwKK3sgIDE2LCAweGVkNTAsIDAsIHsweGQzLDB4ZmYsMHhmNCwweGZmLDB4ZmQsMHgzZiwweGZmLDB4NGYsMHhmZiwweGQzLDB4ZmYsMHhmNCwweGZmLDB4ZmQsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGVkNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGVkNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGVkODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGVkOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmQsMHhmYiwweDBmLDB4YjYsMHhjMiwweGNkIH0gfSwKK3sgIDE2LCAweGVkYTAsIDAsIHsweGIwLDB4YjcsMHhmZCwweDNmLDB4ZmIsMHgwYiwweDM2LDB4YzIsMHhkZiwweGIwLDB4ZmIsMHg2YywweDJjLDB4ZGIsMHgwYiwweDdlIH0gfSwKK3sgIDE2LCAweGVkYjAsIDAsIHsweGMyLDB4Y2QsMHhiMCwweGI3LDB4ZmQsMHgzZiwweGZiLDB4MGIsMHgzNiwweGMyLDB4Y2QsMHhmNCwweGI3LDB4ZmQsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGVkYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzMsMHhmYywweDRmLDB4Y2YsMHgxMywweDMzIH0gfSwKK3sgIDE2LCAweGVkZDAsIDAsIHsweGM0LDB4Y2YsMHhmZCwweDNmLDB4ZmMsMHg0YywweGNmLDB4MTMsMHgzZiwweGM0LDB4ZmMsMHhmMSwweDMzLDB4M2MsMHg0YywweGZmIH0gfSwKK3sgIDE2LCAweGVkZTAsIDAsIHsweDEzLDB4MzMsMHhjNCwweGNmLDB4ZmQsMHgzZiwweGZjLDB4NGMsMHhjZiwweDEzLDB4MzMsMHhmNCwweGNmLDB4ZmQsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGVkZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2IsMHg3ZSwweDRlLDB4ZGYsMHg5MywweGI3IH0gfSwKK3sgIDE2LCAweGVlMDAsIDAsIHsweGU0LDB4ZWQsMHhmOSwweDNmLDB4ZmUsMHg0ZSwweGRmLDB4OTMsMHhiNywweGU0LDB4ZWQsMHhmOSwweDNiLDB4N2UsMHg0ZSwweGM3IH0gfSwKK3sgIDE2LCAweGVlMTAsIDAsIHsweDkzLDB4YjcsMHhlNCwweGVjLDB4NjEsMHgyMywweDFlLDB4NGUsMHhkZiwweDkzLDB4YjcsMHg4NCwweGVjLDB4NjEsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGVlMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjNSwweDI0LDB4YTEsMHg0YSwweDI0IH0gfSwKK3sgIDE2LCAweGVlMzAsIDAsIHsweDYzLDB4MDEsMHgxNCwweDAyLDB4NDQsMHgwMCwweDgxLDB4MGIsMHgyOCwweDcxLDB4MDIsMHgxMCwweDgyLDB4NDAsMHgzOCwweDExIH0gfSwKK3sgIDE2LCAweGVlNDAsIDAsIHsweDQxLDB4MDQsMHg1MCwweDA4LDB4MTgsMHg4MiwweDg3LDB4MzgsMHgzMSwweGMzLDB4MmMsMHg1MiwweDBhLDB4MTAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGVlNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHg0NSwweDEyLDB4ODEsMHg0NCwweDgwIH0gfSwKK3sgIDE2LCAweGVlNjAsIDAsIHsweDcxLDB4MjEsMHgxYywweDBhLDB4MDcsMHgxYSwweDgxLDB4MDIsMHhhMCwweDUyLDB4MjAsMHgxNCwweDQ4LDB4MDcsMHgxMiwweDgxIH0gfSwKK3sgIDE2LCAweGVlNzAsIDAsIHsweGM2LDB4ODAsMHg2MCwweDIwLDB4MDgsMHg4OCwweDQ3LDB4MDIsMHgwMSwweDRhLDB4ODAsMHg3MCwweDIwLDB4MTAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGVlODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHhjNSwweDJjLDB4MDEsMHg0YSwweDAwIH0gfSwKK3sgIDE2LCAweGVlOTAsIDAsIHsweDUyLDB4MDksMHgxYywweDgwLDB4MDcsMHgyNCwweDIxLDB4MDgsMHgwOCwweDcxLDB4MDIsMHgxMCwweDgwLDB4NDUsMHgyMCwweGExIH0gfSwKK3sgIDE2LCAweGVlYTAsIDAsIHsweDQ5LDB4MjgsMHg1MiwweDAxLDB4MTQsMHhjMCwweDQ1LDB4MDAsMHg5MSwweGM0LDB4MDAsMHg3MiwweDAyLDB4MTAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGVlYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwNywweDIwLDB4MDEsMHhjMSwweDAwIH0gfSwKK3sgIDE2LCAweGVlYzAsIDAsIHsweDcxLDB4MDksMHgxMCwweDgwLDB4MDcsMHgwMCwweDAxLDB4MDEsMHgwMCwweDcwLDB4MDgsMHgxOCwweDgwLDB4MDcsMHgwMCwweDAxIH0gfSwKK3sgIDE2LCAweGVlZDAsIDAsIHsweDg5LDB4MjAsMHg1MiwweDAxLDB4MGMsMHg4MCwweDQ2LDB4MzAsMHg4MSwweDQ1LDB4MDQsMHg2MCwweDAwLDB4MTAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGVlZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHhjMiwweDAyLDB4MjAsMHgwMCwweDg4IH0gfSwKK3sgIDE2LCAweGVlZjAsIDAsIHsweDIwLDB4MjIsMHgwMCwweDA4LDB4YzIsMHgyMiwweDgwLDB4NDAsMHg4OCwweDAyLDB4MjIsMHgwMCwweDA4LDB4ODIsMHgwYSwweGEwIH0gfSwKK3sgIDE2LCAweGVmMDAsIDAsIHsweDBjLDB4YTgsMHgwMiwweDIyLDB4MDAsMHgwOCwweDgwLDB4MGEsMHgwMCwweDgwLDB4OGMsMHgwMiwweDIyLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGVmMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHg0MywweDAwLDB4MDAsMHg0MCwweDIwIH0gfSwKK3sgIDE2LCAweGVmMjAsIDAsIHsweDMwLDB4MDgsMHgwNCwweDQwLDB4NDEsMHgzMCwweDEwLDB4YzgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MDMsMHgwMCwweDEwIH0gfSwKK3sgIDE2LCAweGVmMzAsIDAsIHsweGMwLDB4MDAsMHgxMSwweDA4LDB4MDAsMHhjMiwweDQzLDB4MTAsMHg4MCwweGMwLDB4MjAsMHgwMSwweDA4LDB4MDAsMHgwMiwweDAwIH0gfSwKK3sgIDE2LCAweGVmNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDgsMHhjMywweDBhLDB4MjAsMHhjMSwweDhjIH0gfSwKK3sgIDE2LCAweGVmNTAsIDAsIHsweDEyLDB4MjIsMHgwNCwweDg4LDB4MDEsMHgzNiwweDIwLDB4YzMsMHgwOCwweDEyLDB4MjgsMHgwNCwweDA4LDB4MDEsMHgwNCwweDAwIH0gfSwKK3sgIDE2LCAweGVmNjAsIDAsIHsweDRhLDB4YTgsMHgyMiwweDAxLDB4MDQsMHhjOCwweDQxLDB4MjYsMHgzMCwweGMwLDB4ODgsMHgwMiwweDIxLDB4MDAsMHgwMiwweDAwIH0gfSwKK3sgIDE2LCAweGVmNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDgsMHgwMCwweDBhLDB4MTAsMHhjMSwweDgwIH0gfSwKK3sgIDE2LCAweGVmODAsIDAsIHsweDMyLDB4MjEsMHgwYywweDg4LDB4NDMsMHgwMiwweDgwLDB4NDQsMHg4MCwweDEyLDB4MjksMHgwNCwweDA4LDB4NDIsMHgwYSwweDkwIH0gfSwKK3sgIDE2LCAweGVmOTAsIDAsIHsweDhhLDB4ODAsMHgwMCwweDIwLDB4MDQsMHg0OCwweDAzLDB4MGEsMHgxMCwweDgyLDB4ODAsMHgwMCwweDIwLDB4MDAsMHgwMiwweDAwIH0gfSwKK3sgIDE2LCAweGVmYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGEsMHg4NywweDAyLDB4YTEsMHg4MCwweGFjIH0gfSwKK3sgIDE2LCAweGVmYjAsIDAsIHsweDQzLDB4MjksMHgxNCwweDhhLDB4ODQsMHgwMiwweGExLDB4MDAsMHhhYywweDQxLDB4MjAsMHgxMCwweDA4LDB4MDYsMHgyNiwweDMxIH0gfSwKK3sgIDE2LCAweGVmYzAsIDAsIHsweDgwLDB4YTQsMHg2MCwweDIwLDB4MTQsMHg0YSwweDQ0LDB4MzIsMHg4MSwweDgxLDB4YWMsMHg2MCwweDJhLDB4MTgsMHgwMiwweDAwIH0gfSwKK3sgIDE2LCAweGVmZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDgsMHgwNywweDIyLDB4MDEsMHhjNSwweDgwIH0gfSwKK3sgIDE2LCAweGVmZTAsIDAsIHsweDczLDB4MjEsMHgxYywweGM4LDB4MDcsMHgyYSwweDAxLDB4MGMsMHg4MCwweDcyLDB4MjAsMHgxMCwweDQ4LDB4NDcsMHgyNiwweDExIH0gfSwKK3sgIDE2LCAweGVmZjAsIDAsIHsweGM1LDB4ODAsMHg3MywweDIwLDB4MWMsMHg4OCwweDA3LDB4MmEsMHgxMSwweDQ5LDB4ODAsMHg3MCwweDIwLDB4MTQsMHgwMiwweDAwIH0gfSwKK3sgIDE2LCAweGYwMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHg0NSwweDEwLDB4MzEsMHhjOSwweDBjIH0gfSwKK3sgIDE2LCAweGYwMTAsIDAsIHsweDczLDB4MDIsMHgxYywweGMwLDB4NDcsMHgwNCwweDAxLDB4MGEsMHgwYywweDUxLDB4MGEsMHgxMCwweDgyLDB4NDcsMHgyMCwweDMxIH0gfSwKK3sgIDE2LCAweGYwMjAsIDAsIHsweGM4LDB4MDAsMHg3MiwweDAyLDB4MWMsMHg0MCwweDA1LDB4MzAsMHgxMSwweGM0LDB4MDAsMHg3MiwweDAxLDB4MTgsMHgwMiwweDAwIH0gfSwKK3sgIDE2LCAweGYwMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4MTAsMHgwNiwweDI0LDB4MDEsMHg0NSwweDA0IH0gfSwKK3sgIDE2LCAweGYwNDAsIDAsIHsweDUxLDB4ODEsMHgxOCwweDkwLDB4NDcsMHgxNCwweDAxLDB4MDQsMHgwNCwweDcxLDB4ODgsMHgxMCwweDEyLDB4MDUsMHgzNCwweDAxIH0gfSwKK3sgIDE2LCAweGYwNTAsIDAsIHsweDQ0LDB4MDQsMHg1MSwweDQwLDB4MTgsMHhkMCwweDA3LDB4MzgsMHgwMSwweGM0LDB4MDQsMHg1MiwweDAxLDB4MTQsMHhjMiwweDA0IH0gfSwKK3sgIDE2LCAweGYwNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4NywweDAwLDB4MjEsMHg4OSwweDBjIH0gfSwKK3sgIDE2LCAweGYwNzAsIDAsIHsweDYwLDB4MDEsMHgxYywweGQwLDB4NDUsMHgyNCwweDAxLDB4YzEsMHgwYywweDQyLDB4MDEsMHgwMCwweDAwLDB4YzUsMHgyMCwweDMxIH0gfSwKK3sgIDE2LCAweGYwODAsIDAsIHsweDQxLDB4MDgsMHg0MCwweDAwLDB4MTgsMHg4MCwweDQ1LDB4MDAsMHgyMSwweDQxLDB4MGMsMHg3MCwweDQyLDB4MWMsMHhjMiwweDAwIH0gfSwKK3sgIDE2LCAweGYwOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMSwweDFjLDB4ODAsMHhjNCwweDIwIH0gfSwKK3sgIDE2LCAweGYwYTAsIDAsIHsweDMxLDB4MDgsMHgxMCwweDQyLDB4NDIsMHgwOCwweDgwLDB4YzYsMHgyMCwweDMxLDB4MDksMHgwMCwweDIwLDB4MDMsMHgxYywweDkwIH0gfSwKK3sgIDE2LCAweGYwYjAsIDAsIHsweGM0LDB4MjAsMHgwMSwweDQ5LDB4MGMsMHg0MiwweDQzLDB4MTAsMHg4MCwweDQ0LDB4MjAsMHgzMSwweDA4LDB4MTAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGYwYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg4MywweDIwLDB4MzAsMHg0OCwweDBjIH0gfSwKK3sgIDE2LCAweGYwZDAsIDAsIHsweDMyLDB4NDAsMHgxMCwweDkwLDB4ODEsMHgyNCwweDIwLDB4YzgsMHgwNCwweDMyLDB4NDAsMHgxMCwweDIwLDB4YzMsMHgyMCwweDgwIH0gfSwKK3sgIDE2LCAweGYwZTAsIDAsIHsweGM4LDB4MDAsMHgwMiwweDRhLDB4MGMsMHhhMCwweDAxLDB4MjQsMHgxMCwweGM4LDB4MDgsMHgzMiwweDQxLDB4MTAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGYwZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4OTAsMHgwMywweDAwLDB4MDAsMHhjOSwweDA0IH0gfSwKK3sgIDE2LCAweGYxMDAsIDAsIHsweDMwLDB4NDAsMHgwMCwweDkwLDB4MDAsMHgyMCwweDAwLDB4ODAsMHgwMCwweDEwLDB4NDAsMHgxMCwweDAwLDB4NDAsMHgyMCwweDEwIH0gfSwKK3sgIDE2LCAweGYxMTAsIDAsIHsweGMyLDB4MDAsMHgwMCwweDgwLDB4MDgsMHgyMCwweDQzLDB4MDgsMHgxMCwweDgxLDB4MDAsMHgzMiwweDQwLDB4MGMsMHhjMCwweDA0IH0gfSwKK3sgIDE2LCAweGYxMjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGYxMzAsIDAsIHsweDEwLDB4MDAsMHgwMCwweGYwLDB4MTAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDAsMHgwMCwweGYwLDB4MTAsMHg4MCwweDQwIH0gfSwKK3sgIDE2LCAweGYxNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHhmMCwweDEwLDB4OTAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGYxNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweDNjLDB4MTAsMHg4MCwweDkwLDB4NDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGYxNjAsIDAsIHsweDAwLDB4ODAsMHgxMCwweDkwLDB4YTAsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDkwLDB4ODAsMHg4MCwweDAwIH0gfSwKK3sgIDE2LCAweGYxNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg5MCwweDgwLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHg4ZiwweDBmIH0gfSwKK3sgIDE2LCAweGYxODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHhjNiwweGJhLDB4MDYsMHhjMCwweDFjIH0gfSwKK3sgIDE2LCAweGYxOTAsIDAsIHsweDQ5LDB4MjgsMHg2MSwweDE0LDB4MmIsMHgxYywweDBlLDB4NDAsMHgzZiwweGQ5LDB4YmYsMHhkOSwweGFhLDB4YmMsMHgxYSwweDVmIH0gfSwKK3sgIDE2LCAweGYxYTAsIDAsIHsweDAwLDB4MTAsMHhhNiwweDUwLDB4M2IsMHg2MSwweGIzLDB4MjUsMHhiYywweDQwLDB4MTksMHhiZiwweGZmLDB4ZTksMHg4MCwweDAwIH0gfSwKK3sgIDE2LCAweGYxYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg5MiwweDE0LDB4OTQsMHg4MCwweDBjIH0gfSwKK3sgIDE2LCAweGYxYzAsIDAsIHsweDA3LDB4M2YsMHgyYiwweDk0LDB4ODYsMHgxNCwweDg0LDB4ODAsMHgyOCwweDAwLDB4MDAsMHg0OSwweDE0LDB4MDQsMHg4NiwweDEyIH0gfSwKK3sgIDE2LCAweGYxZDAsIDAsIHsweDgwLDB4MDAsMHg0MSwweDI3LDB4MzQsMHhkMCwweDkwLDB4ODQsMHg5MiwweDAwLDB4MmQsMHg4YSwweDIxLDB4MWUsMHg4MCwweDAwIH0gfSwKK3sgIDE2LCAweGYxZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweGEyIH0gfSwKK3sgIDE2LCAweGYxZjAsIDAsIHsweGIxLDB4MDEsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHg4NCwweGIxLDB4NzgsMHgyOCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGYyMDAsIDAsIHsweDA4LDB4YjEsMHgzMiwweDE0LDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4YTgsMHgyMywweDU0LDB4MjEsMHg0MCwweDAwIH0gfSwKK3sgIDE2LCAweGYyMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGYyMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDJmLDB4ZmYsMHhmZSwweGY3LDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJmLDB4ZDcsMHhmZSwweGVmIH0gfSwKK3sgIDE2LCAweGYyMzAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4N2YsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGYyNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGYyNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDBmLDB4ZWYsMHg3NywweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNlLDB4ZmYsMHhmZSwweGVmIH0gfSwKK3sgIDE2LCAweGYyNjAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4YmYsMHhmZiwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGYyNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGYyODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhkZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmIH0gfSwKK3sgIDE2LCAweGYyOTAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweDdmLDB4MmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGYyYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGYyYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDFmLDB4ZmYsMHhmZiwweGVmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDFmLDB4ZWYsMHhlZiwweGVmIH0gfSwKK3sgIDE2LCAweGYyYzAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGYyZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGYyZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhlZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJmLDB4YWYsMHhkZiwweGZmIH0gfSwKK3sgIDE2LCAweGYyZjAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGVmLDB4ZmYsMHhmNywweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGYzMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGYzMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDNmLDB4ZGYsMHhkZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmIH0gfSwKK3sgIDE2LCAweGYzMjAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxZiwweGZmLDB4ZGYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGYzMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHhjNCwweDI0LDB4YTEsMHgwMCwweDJjIH0gfSwKK3sgIDE2LCAweGYzNDAsIDAsIHsweDUyLDB4MGIsMHgxOCwweGMyLDB4ODYsMHgyYywweGExLDB4ODAsMHgzOCwweDYyLDB4MGEsMHgwOCwweDQwLDB4YzQsMHgyYywweGExIH0gfSwKK3sgIDE2LCAweGYzNTAsIDAsIHsweDA4LDB4MjgsMHg0MiwweDBiLDB4MTQsMHgwMCwweDg1LDB4MTQsMHhhMSwweDA4LDB4MjgsMHg0MywweDBhLDB4MTAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGYzNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNCwweDEyLDB4MDEsMHgwMywweDgwIH0gfSwKK3sgIDE2LCAweGYzNzAsIDAsIHsweDYxLDB4MjAsMHgxMCwweDA4LDB4MDcsMHgxMiwweDQxLDB4NDIsMHg4MCwweDcwLDB4MjAsMHgxYywweDA4LDB4MDQsMHgxYSwweDAxIH0gfSwKK3sgIDE2LCAweGYzODAsIDAsIHsweDg0LDB4ODEsMHg0MCwweDIwLDB4MTgsMHgwOCwweDQ2LDB4MzYsMHg4MSwweDA1LDB4ODAsMHg2MywweDIwLDB4MTAsMHgwMCwweDAxIH0gfSwKK3sgIDE2LCAweGYzOTAsIDAsIHsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4NCwweDI0LDB4MjEsMHgwMCwweDBjIH0gfSwKK3sgIDE2LCAweGYzYTAsIDAsIHsweDUyLDB4MDIsMHgxNCwweDAwLDB4ODcsMHgyOCwweDIxLDB4ODEsMHgwOCwweDcyLDB4MDYsMHgxYywweDgyLDB4ODQsMHgyMCwweDIxIH0gfSwKK3sgIDE2LCAweGYzYjAsIDAsIHsweDQ4LDB4MTgsMHg0MiwweDAzLDB4NTQsMHg4MCwweDQ1LDB4MzAsMHgyNSwweDRhLDB4MTgsMHg1MywweDAyLDB4MTAsMHgwMCwweDAxIH0gfSwKK3sgIDE2LCAweGYzYzAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNCwweDIyLDB4MDEsMHgwMSwweDgwIH0gfSwKK3sgIDE2LCAweGYzZDAsIDAsIHsweDQyLDB4MjAsMHgxOCwweGM4LDB4NDQsMHgyMiwweDAxLDB4ODAsMHg4NCwweDQyLDB4MjAsMHgxYywweDg4LDB4MDQsMHgyMiwweDAxIH0gfSwKK3sgIDE2LCAweGYzZTAsIDAsIHsweDAwLDB4ODAsMHg0MCwweDIwLDB4MTAsMHg4OCwweDQ0LDB4MzYsMHgwMSwweDQwLDB4ODAsMHg0MSwweDAwLDB4MTAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGYzZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA4LDB4MjAsMHgwMCwweDBjIH0gfSwKK3sgIDE2LCAweGY0MDAsIDAsIHsweDIyLDB4MDMsMHgwNCwweDQwLDB4ODEsMHgwMCwweDIwLDB4ODQsMHgwOCwweDAzLDB4MDAsMHgwMCwweDgwLDB4YzIsMHgwMCwweDIwIH0gfSwKK3sgIDE2LCAweGY0MTAsIDAsIHsweGM0LDB4MDgsMHgwMCwweDAzLDB4MDgsMHg4OCwweDgyLDB4MTYsMHhhMCwweDQwLDB4ODgsMHgzMiwweDIyLDB4ODAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY0MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgwMSwweDAwLDB4ODAsMHgwNCwweDIwIH0gfSwKK3sgIDE2LCAweGY0MzAsIDAsIHsweDEwLDB4MDgsMHgwYywweGMyLDB4MTIsMHgxMCwweDg0LDB4YzgsMHgyMiwweDEyLDB4MDgsMHgwNCwweDAyLDB4MDMsMHgwMCwweDg4IH0gfSwKK3sgIDE2LCAweGY0NDAsIDAsIHsweDAwLDB4MjEsMHgwMCwweDBjLDB4MGMsMHg0MCwweDQxLDB4MzAsMHgwMCwweDg0LDB4MjAsMHgxMCwweDA4LDB4MDAsMHgwMiwweDAwIH0gfSwKK3sgIDE2LCAweGY0NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDgsMHg4MiwweDA2LDB4MjAsMHgwOCwweDhjIH0gfSwKK3sgIDE2LCAweGY0NjAsIDAsIHsweDMyLDB4MjIsMHgwYywweDg4LDB4ODEsMHgyNiwweDIwLDB4NGQsMHg4OCwweDIzLDB4MjIsMHg4MCwweDg4LDB4ODMsMHgwNiwweDIwIH0gfSwKK3sgIDE2LCAweGY0NzAsIDAsIHsweDA4LDB4ODgsMHgwMCwweDIzLDB4MDQsMHg4YSwweDgxLDB4MzYsMHgyMCwweDRiLDB4ODgsMHgzMiwweDIyLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY0ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDgsMHgwMiwweDAyLDB4MDAsMHgwOSwweDgwIH0gfSwKK3sgIDE2LCAweGY0OTAsIDAsIHsweDMyLDB4MjAsMHgwNCwweDg4LDB4NjAsMHgyMiwweDAwLDB4ODksMHg4NCwweDAwLDB4MjAsMHgwOCwweDk4LDB4MDAsMHgwMiwweDAwIH0gfSwKK3sgIDE2LCAweGY0YTAsIDAsIHsweDAwLDB4ODAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDAyLDB4M2EsMHg4MCwweDQ4LDB4ODAsMHgzMCwweDIwLDB4MDAsMHgwMiwweDAwIH0gfSwKK3sgIDE2LCAweGY0YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MGEsMHhjNCwweDFhLDB4YTEsMHg4MCwweGE4IH0gfSwKK3sgIDE2LCAweGY0YzAsIDAsIHsweDQxLDB4MmEsMHgxMCwweGNhLDB4YzcsMHgxYSwweGExLDB4MDQsMHhhZCwweDcxLDB4MmEsMHgxOCwweDRhLDB4ZDQsMHgwNiwweGIxIH0gfSwKK3sgIDE2LCAweGY0ZDAsIDAsIHsweDAwLDB4YTgsMHg3MSwweDJhLDB4MTAsMHgwOCwweDg0LDB4MjYsMHgyOSwweDA2LDB4YWMsMHg1MiwweDJhLDB4MTAsMHgwMiwweDAwIH0gfSwKK3sgIDE2LCAweGY0ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDgsMHgwNCwweDJhLDB4MDEsMHg0MSwweDgwIH0gfSwKK3sgIDE2LCAweGY0ZjAsIDAsIHsweDQyLDB4MjAsMHgxYywweDAwLDB4MDQsMHgwYSwweDAxLDB4MDksMHg4NCwweDUxLDB4MjAsMHgxYywweDg4LDB4NDQsMHgwMiwweDAxIH0gfSwKK3sgIDE2LCAweGY1MDAsIDAsIHsweDA4LDB4ODAsMHg0MCwweDIwLDB4MTAsMHg0YSwweDQ3LDB4MDIsMHgwMSwweDQ4LDB4ODAsMHg2MywweDIwLDB4MTAsMHgwMiwweDAwIH0gfSwKK3sgIDE2LCAweGY1MTAsIDAsIHsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHhjNCwweDEwLDB4MjEsMHg4MSwweDBjIH0gfSwKK3sgIDE2LCAweGY1MjAsIDAsIHsweDQxLDB4MDIsMHgwYywweDAwLDB4YzAsMHgyMCwweDYxLDB4MGQsMHgwZSwweDcyLDB4MDIsMHgxYywweDQwLDB4YzQsMHgwOCwweDMxIH0gfSwKK3sgIDE2LCAweGY1MzAsIDAsIHsweDA0LDB4MTgsMHg0MiwweDAyLDB4MTAsMHg4MCwweDg3LDB4MjAsMHhiMSwweGM0LDB4MGMsMHg1MywweDAyLDB4MTAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY1NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4MjAsMHgwNywweDI0LDB4MDEsMHhjYywweDAwIH0gfSwKK3sgIDE2LCAweGY1NTAsIDAsIHsweDcyLDB4NDAsMHgxNCwweDAwLDB4MDQsMHgyNCwweDAxLDB4MDgsMHgwMCwweDczLDB4NDEsMHgxMCwweGMwLDB4MDcsMHgzMCwweDExIH0gfSwKK3sgIDE2LCAweGY1NjAsIDAsIHsweGNjLDB4MDAsMHg3MSwweDAxLDB4MTAsMHgwMiwweDA0LDB4MjAsMHg4MSwweDQ2LDB4MTAsMHg0MiwweDQwLDB4MTAsMHgwMiwweDA0IH0gfSwKK3sgIDE2LCAweGY1NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHhjNSwweDEwLDB4MjEsMHgwMCwweDA4IH0gfSwKK3sgIDE2LCAweGY1ODAsIDAsIHsweDYyLDB4MDIsMHgxYywweDkwLDB4YzUsMHgyNCwweDIxLDB4MDAsMHgwYywweDcwLDB4ODIsMHgxYywweDEwLDB4YzQsMHgyMCwweDMxIH0gfSwKK3sgIDE2LCAweGY1OTAsIDAsIHsweDg4LDB4MDIsMHg0MCwweDA2LDB4MWMsMHgwMCwweDg1LDB4MDAsMHhhMSwweDAwLDB4MGMsMHg0MCwweDQyLDB4MDAsMHgwMiwweDAwIH0gfSwKK3sgIDE2LCAweGY1YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjIsMHgwNSwweDE0LDB4ODAsMHgwMSwweDIwIH0gfSwKK3sgIDE2LCAweGY1YjAsIDAsIHsweDMwLDB4MDgsMHgwYywweDQyLDB4MDYsMHgwMCwweDgwLDB4MDEsMHgyNCwweDUxLDB4MDgsMHgwYywweDAyLDB4NDEsMHgwMCwweDgwIH0gfSwKK3sgIDE2LCAweGY1YzAsIDAsIHsweDRjLDB4MjAsMHgwMCwweDA4LDB4MGMsMHgzMCwweDQyLDB4MDQsMHgwMCwweDA0LDB4MjAsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY1ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHhjNiwweDI0LDB4MjAsMHgwMCwweDBjIH0gfSwKK3sgIDE2LCAweGY1ZTAsIDAsIHsweDMyLDB4YzIsMHgwNCwweDgwLDB4YzcsMHgzMCwweDIwLDB4MDAsMHgwYywweDUzLDB4YzIsMHgwNCwweDEwLDB4YzIsMHgyOCwweDcwIH0gfSwKK3sgIDE2LCAweGY1ZjAsIDAsIHsweDBjLDB4MDksMHgwMiwweDAyLDB4NGMsMHg4MCwweDgxLDB4MDQsMHgzMCwweDA5LDB4MGMsMHgwMiwweDQyLDB4MTAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY2MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4ODAsMHgwMSwweDM4LDB4MDAsMHgwMiwweDAwIH0gfSwKK3sgIDE2LCAweGY2MTAsIDAsIHsweDEyLDB4NDAsMHgwYywweDIwLDB4MDcsMHgzNCwweDA0LDB4MDIsMHgwMCwweDYzLDB4MDEsMHgwOCwweDEwLDB4MDAsMHgyNCwweDEwIH0gfSwKK3sgIDE2LCAweGY2MjAsIDAsIHsweDA0LDB4MDAsMHgwMiwweDAxLDB4MDQsMHg4MiwweDAxLDB4MDgsMHg4MCwweDA5LDB4MTAsMHgwMiwweDQwLDB4MTAsMHgwMCwweDA0IH0gfSwKK3sgIDE2LCAweGY2MzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgyMCwweDEwLDB4ODAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY2NDAsIDAsIHsweDIwLDB4ODAsMHgwMCwweGYwLDB4MjAsMHgxMCwweDgwLDB4MDAsMHgwMCwweDIwLDB4ODAsMHgwMCwweGQwLDB4ODAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY2NTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDEwLDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjYywweDQwIH0gfSwKK3sgIDE2LCAweGY2NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweDNjLDB4MTAsMHg4MCwweDgwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY2NzAsIDAsIHsweDAwLDB4MDAsMHgxMCwweDkwLDB4ODAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDkwLDB4ODAsMHgwMCwweDkwIH0gfSwKK3sgIDE2LCAweGY2ODAsIDAsIHsweDgwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgxMCwweGEwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAwLDB4MTAsMHg4YywweDA4IH0gfSwKK3sgIDE2LCAweGY2OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzQsMHgxYSwweGJlLDB4MTcsMHg4MCwweDAwIH0gfSwKK3sgIDE2LCAweGY2YTAsIDAsIHsweDNlLDB4NDAsMHgyNiwweDZmLDB4YmEsMHhlMywweDI0LDB4ODAsMHgwMCwweDE2LDB4NTksMHhiZCwweDgyLDB4ODEsMHg4MiwweGQ4IH0gfSwKK3sgIDE2LCAweGY2YjAsIDAsIHsweDgwLDB4MDAsMHgwMCwweDE5LDB4OTksMHg4NiwweDgwLDB4NjQsMHg4MCwweGMwLDB4M2YsMHhkOSwweDk5LDB4ODAsMHgwMCwweDAxIH0gfSwKK3sgIDE2LCAweGY2YzAsIDAsIHsweGYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDYsMHgxNiwweDAyLDB4OTQsMHgwMCwweDE2IH0gfSwKK3sgIDE2LCAweGY2ZDAsIDAsIHsweGMwLDB4MTYsMHg5NCwweDgyLDB4OTAsMHgxNiwweDEwLDB4ODAsMHgyMSwweDE4LDB4MjgsMHgyOCwweDAyLDB4MGEsMHgwMiwweDA4IH0gfSwKK3sgIDE2LCAweGY2ZTAsIDAsIHsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDgyLDB4ODAsMHgxNCwweDAwLDB4MDEsMHgxNCwweDExLDB4YTAsMHg0MCwweDAwIH0gfSwKK3sgIDE2LCAweGY2ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDg0IH0gfSwKK3sgIDE2LCAweGY3MDAsIDAsIHsweDAyLDB4ODQsMHhhOCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHg5MSwweDIyLDB4ODQsMHg0MSwweGEyLDB4MDgsMHgyNCwweDAxIH0gfSwKK3sgIDE2LCAweGY3MTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4ODQsMHgwMSwweDQ0LDB4MDEsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY3MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGY3MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDNlLDB4ZjcsMHhmZiwweGY3LDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJmLDB4ZTcsMHhiNywweGZmIH0gfSwKK3sgIDE2LCAweGY3NDAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyZiwweGZlLDB4N2YsMHhmNywweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY3NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGY3NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDM2LDB4YmYsMHhmZSwweGRmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBmLDB4ZjcsMHhkZiwweGZmIH0gfSwKK3sgIDE2LCAweGY3NzAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZCwweGI3LDB4YjcsMHhlZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY3ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGY3OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDFmLDB4ZGYsMHhkZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBmLDB4ZGYsMHhkZiwweGZmIH0gfSwKK3sgIDE2LCAweGY3YTAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGVmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY3YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGY3YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDNmLDB4YmYsMHg3ZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHg3ZiwweGY3IH0gfSwKK3sgIDE2LCAweGY3ZDAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGRmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY3ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGY3ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDNmLDB4N2UsMHhmZiwweGZmLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmUsMHhmZiwweGZmIH0gfSwKK3sgIDE2LCAweGY4MDAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY4MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGY4MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDM3LDB4ZmYsMHg2ZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmIH0gfSwKK3sgIDE2LCAweGY4MzAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY4NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY4NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY4NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY4NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4MjAsMHgwMSwweDAyLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY4ODAsIDAsIHsweDMwLDB4MDAsMHg0MywweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY4OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY4YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY4YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY4YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY4ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY4ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY4ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwIH0gfSwKK3sgIDE2LCAweGY5MDAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY5MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY5MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY5MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY5NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY5NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweGMwLDB4MzAsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGY5NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY5NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY5ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY5OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY5YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY5YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4YzAsMHgzMCwweGMwLDB4MzAsMHhjMCwweDMwIH0gfSwKK3sgIDE2LCAweGY5YzAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY5ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY5ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGY5ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZhMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZhMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBmLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBmIH0gfSwKK3sgIDE2LCAweGZhMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZhMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZhNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZhNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZhNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZhNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmIH0gfSwKK3sgIDE2LCAweGZhODAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZhOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZhYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZhYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZhYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZhZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBmLDB4MDAsMHgzMCwweGMwLDB4MzAsMHhjMCwweDBmIH0gfSwKK3sgIDE2LCAweGZhZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZhZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZiMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZiMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZiMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZiMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEzLDB4NmIsMHgwMCwweGMwLDB4MDAsMHhjZiwweDJjIH0gfSwKK3sgIDE2LCAweGZiNDAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZiNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZiNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZiNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZiODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZiOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZiwweDAwLDB4MGYsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZiYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZiYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZiYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZiZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZiZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZiZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4YzAsMHgwZiwweDAwLDB4MGYsMHgwMCwweDMwIH0gfSwKK3sgIDE2LCAweGZjMDAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZjMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZjMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZjMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZjNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZjNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGMwLDB4M2YsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGZjNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZjNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZjODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZjOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZjYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZjYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4YzAsMHgzZiwweGMwLDB4M2YsMHhjMCwweDMwIH0gfSwKK3sgIDE2LCAweGZjYzAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZjZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZjZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZjZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZkMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZkMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBmLDB4MDAsMHgwZiwweDAwLDB4MGYsMHgwMCwweDBmIH0gfSwKK3sgIDE2LCAweGZkMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZkMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZkNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZkNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZkNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZkNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4YzAsMHgwZiwweDAwLDB4MGYsMHgwMCwweDNmIH0gfSwKK3sgIDE2LCAweGZkODAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZkOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZkYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZkYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZkYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZkZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBmLDB4MDAsMHgzZiwweGMwLDB4M2YsMHhjMCwweDBmIH0gfSwKK3sgIDE2LCAweGZkZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZkZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZlMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZlMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZlMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZlMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNiwweDMzLDB4NWQsMHg4MCwweGMwLDB4MDAsMHhmZCwweGFjIH0gfSwKK3sgIDE2LCAweGZlNDAsIDAsIHsweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZlNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZlNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZlNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZlODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZlOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZlYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZlYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZlYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZlZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZlZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZlZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwIH0gfSwKK3sgIDE2LCAweGZmMDAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZmMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZmMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZmMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZmNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZmNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweGMwLDB4MzAsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweGZmNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZmNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZmODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZmOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZmYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZmYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4YzAsMHgzMCwweGMwLDB4MzAsMHhjMCwweDMwIH0gfSwKK3sgIDE2LCAweGZmYzAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZmZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZmZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweGZmZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgwMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgwMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBmLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBmIH0gfSwKK3sgIDE2LCAweDgwMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgwNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgwNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgwNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgwNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgwODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmIH0gfSwKK3sgIDE2LCAweDgwOTAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgwYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgwYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgwYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgwZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgwZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBmLDB4MDAsMHgzMCwweGMwLDB4MzAsMHhjMCwweDBmIH0gfSwKK3sgIDE2LCAweDgwZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEzLDB4NzQsMHhjMCwweGMwLDB4MDAsMHhmMCwweGVjIH0gfSwKK3sgIDE2LCAweDgxNTAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZiwweDAwLDB4MGYsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgxZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgyMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4YzAsMHgwZiwweDAwLDB4MGYsMHgwMCwweDMwIH0gfSwKK3sgIDE2LCAweDgyMTAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgyMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgyMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgyNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgyNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgyNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGMwLDB4M2YsMHhjMCwweDAwIH0gfSwKK3sgIDE2LCAweDgyNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgyODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgyOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgyYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgyYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgyYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE5LDB4ODYsMHgxMCwweDgwLDB4MzAsMHg4MiwweDNkIH0gfSwKK3sgIDE2LCAweDgyZDAsIDAsIHsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgyZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgyZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgzMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgzMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgzMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBmLDB4MDAsMHgwZiwweDAwLDB4MGYsMHgwMCwweDBmIH0gfSwKK3sgIDE2LCAweDgzMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgzNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgzNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgzNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgzNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgzODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4YzAsMHgwZiwweDAwLDB4MGYsMHgwMCwweDNmIH0gfSwKK3sgIDE2LCAweDgzOTAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgzYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgzYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgzYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgzZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDgzZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBmLDB4MDAsMHgzZiwweGMwLDB4M2YsMHhjMCwweDBmIH0gfSwKK3sgIDE2LCAweDgzZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg0MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg0MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg0MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg0MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg0NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzNywweDY1LDB4MjUsMHhlNCwweDgwLDB4MDAsMHhiMCwweDg4IH0gfSwKK3sgIDE2LCAweDg0NTAsIDAsIHsweGFiLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg0NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg0NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg0ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg0OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg0YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg0YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg0YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDIwLDB4MDEsMHgwMiwweDAyLDB4MDAsMHgwMCwweDMwLDB4MDAsMHg0MywweDAwIH0gfSwKK3sgIDE2LCAweDg0ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg0ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg0ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg1MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg1MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg1MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg1MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg1NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg1NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg1NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg1NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg1ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg1OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg1YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg1YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg1YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg1ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg1ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg1ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg2MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg2MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg2MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg2MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg2NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg2NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg2NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg2NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg2ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg2OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg2YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg2YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg2YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg2ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg2ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg2ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg3MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg3MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg3MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg3MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg3NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg3NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg3NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg3NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg3ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg3OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg3YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg3YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg3YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg3ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg3ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg3ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg4MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg4MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg4MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg4MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg4NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg4NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg4NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg4NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg4ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg4OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg4YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg4YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg4YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg4ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg4ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg4ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg5MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg5MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg5MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg5MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg5NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg5NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg5NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg5NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg5ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg5OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg5YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg5YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg5YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg5ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg5ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDg5ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhhMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhhMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhhMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhhMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhhNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhhNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhhNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhhNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhhODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhhOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhhYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhhYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhhYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhhZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhhZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhhZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhiMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhiMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhiMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhiMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhiNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhiNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhiNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhiNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhiODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhiOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhiYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhiYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhiYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhiZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhiZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhiZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhjMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhjMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhjMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhjMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhjNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhjNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhjNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhjNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhjODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhjOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhjYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhjYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhjYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhjZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhjZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhjZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhkMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhkMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhkMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhkMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhkNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhkNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhkNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhkNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhkODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhkOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhkYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhkYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhkYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhkZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhkZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhkZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhlMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhlMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhlMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhlMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhlNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhlNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhlNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhlNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhlODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhlOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhlYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhlYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhlYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhlZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhlZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhlZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhmMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhmMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhmMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhmMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhmNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhmNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhmNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhmNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhmODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhmOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhmYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhmYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhmYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhmZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhmZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDhmZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDkwMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDkwMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDkwMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDkwMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDkwNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDkwNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDkwNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDkwNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDkwODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDkwOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDkwYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDkwYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDkwYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDkwZDAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDQ0LDB4NzIsMHgzMCwweDAwLDB4ODAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAzIH0gfSwKK3sgIDE2LCAweDkwZTAsIDAsIHsweDMwLDB4MDAsMHg0MCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDkwZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDkxMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDE2LCAweDkxMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDgwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwNSwweDMwLDB4MDAsMHhhMCwweDAxIH0gfSwKK3sgIDE2LCAweDkxMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4ZTEsMHg1YSwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDEyLCAweDkxMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9IH0sCit7ICAwICwgMHgwMDAwLCAxLCB7MCB9fQorfTsKKy8vIFZFUlNJT049MS4xLjEuMTMxCisvLyBEQVRFPTIwMDFkZWMwNgorLy8gUFJPRFVDVD1FTUkgMnw2CisvKgorICogVGhpcyBmaXJtd2FyZSBpcyBmb3IgdGhlIEVtYWdpYyBFTUkgMnw2IEF1ZGlvIEludGVyZmFjZQorICoKKyAqIFRoZSBmaXJtd2FyZSBjb250YWluZWQgaGVyZWluIGlzIENvcHlyaWdodCAoYykgMTk5OS0yMDAyIEVtYWdpYworICogYXMgYW4gdW5wdWJsaXNoZWQgd29yay4gVGhpcyBub3RpY2UgZG9lcyBub3QgaW1wbHkgdW5yZXN0cmljdGVkCisgKiBvciBwdWJsaWMgYWNjZXNzIHRvIHRoaXMgZmlybXdhcmUgd2hpY2ggaXMgYSB0cmFkZSBzZWNyZXQgb2YgRW1hZ2ljLAorICogYW5kIHdoaWNoIG1heSBub3QgYmUgcmVwcm9kdWNlZCwgdXNlZCwgc29sZCBvciB0cmFuc2ZlcnJlZCB0bworICogYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQgRW1hZ2ljJ3Mgd3JpdHRlbiBjb25zZW50LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgZmlybXdhcmUgbWF5IG5vdCBiZSBtb2RpZmllZCBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aXRoIHRoZQorICogRW1hZ2ljIEVNSSAyfDYgQXVkaW8gSW50ZXJmYWNlLiBEaXN0cmlidXRpb24gYW5kL29yIE1vZGlmaWNhdGlvbiBvZgorICogYW55IGRyaXZlciB3aGljaCBpbmNsdWRlcyB0aGlzIGZpcm13YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LAorICogcmVxdWlyZXMgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHN0YXRlbWVudC4KKyAqLworc3RhdGljIElOVEVMX0hFWF9SRUNPUkQgZ19GaXJtd2FyZVtdID0geworeyAgIDMsMHgwMDAwLDAsezB4MDIsMHg0MywweDU2fSB9LAoreyAgIDMsMHgwMDAzLDAsezB4MDIsMHg0YiwweGNkfSB9LAoreyAgIDMsMHgwMDBiLDAsezB4MDIsMHg0YiwweGQyfSB9LAoreyAgIDMsMHgwMDEzLDAsezB4MDIsMHg0YiwweDkyfSB9LAoreyAgIDMsMHgwMDFiLDAsezB4MDIsMHg0YiwweGQ1fSB9LAoreyAgIDMsMHgwMDIzLDAsezB4MDIsMHgxYiwweDM5fSB9LAoreyAgIDMsMHgwMDJiLDAsezB4MDIsMHg0MywweGUyfSB9LAoreyAgIDMsMHgwMDMzLDAsezB4MDIsMHgzZiwweGYzfSB9LAoreyAgIDMsMHgwMDNiLDAsezB4MDIsMHg0YiwweGMwfSB9LAoreyAgIDMsMHgwMDQzLDAsezB4MDIsMHg0NywweDAwfSB9LAoreyAgIDMsMHgwMDRiLDAsezB4MDIsMHgzZiwweGZjfSB9LAoreyAgIDMsMHgwMDUzLDAsezB4MDIsMHgzNywweGZhfSB9LAoreyAgIDMsMHgwMDViLDAsezB4MDIsMHg0YiwweGM3fSB9LAoreyAgIDMsMHgwMDYzLDAsezB4MDIsMHg0NiwweGZjfSB9LAoreyAgMTYsMHgwNTAwLDAsezB4MTIsMHgwMSwweDEwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHg0MCwweDZhLDB4MDgsMHgwMSwweDAxLDB4MDAsMHgwMSwweDAxLDB4MDJ9IH0sCit7ICAxNiwweDA1MTAsMCx7MHgwMCwweDAxLDB4MDksMHgwMiwweGI4LDB4MDEsMHgwMywweDAxLDB4MDAsMHg4MCwweGEwLDB4MDksMHgwNCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MDUyMCwwLHsweDAxLDB4MDEsMHgwMCwweDAwLDB4MGEsMHgyNCwweDAxLDB4MDAsMHgwMSwweDU2LDB4MDAsMHgwMiwweDAxLDB4MDIsMHgwYywweDI0fSB9LAoreyAgMTYsMHgwNTMwLDAsezB4MDIsMHgwMSwweDAxLDB4MDEsMHgwMCwweDA2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNSwweDI0LDB4MDYsMHgwNSwweDAxLDB4MDJ9IH0sCit7ICAxNiwweDA1NDAsMCx7MHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOX0gfSwKK3sgIDE2LDB4MDU1MCwwLHsweDI0LDB4MDMsMHgwMiwweDA0LDB4MDMsMHgwMCwweDA1LDB4MDAsMHgwYywweDI0LDB4MDIsMHgwMywweDAxLDB4MDIsMHgwMCwweDAyfSB9LAoreyAgMTYsMHgwNTYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDI0LDB4MDYsMHgwNiwweDAzLDB4MDIsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDA1NzAsMCx7MHgwMCwweDA5LDB4MjQsMHgwMywweDA0LDB4MDEsMHgwMSwweDAwLDB4MDYsMHgwMCwweDA5LDB4MDQsMHgwMSwweDAwLDB4MDAsMHgwMX0gfSwKK3sgIDE2LDB4MDU4MCwwLHsweDAyLDB4MDAsMHgwMCwweDA5LDB4MDQsMHgwMSwweDAxLDB4MDIsMHgwMSwweDAyLDB4MDAsMHgwMCwweDA3LDB4MjQsMHgwMSwweDAxfSB9LAoreyAgMTYsMHgwNTkwLDAsezB4MDAsMHgwMSwweDAwLDB4MTEsMHgyNCwweDAyLDB4MDEsMHgwMiwweDAyLDB4MTAsMHgwMywweDQ0LDB4YWMsMHgwMCwweDgwLDB4YmJ9IH0sCit7ICAxNiwweDA1YTAsMCx7MHgwMCwweDAwLDB4NzcsMHgwMSwweDA5LDB4MDUsMHgwYSwweDA1LDB4ODQsMHgwMSwweDAxLDB4MDAsMHg4ZiwweDA3LDB4MjUsMHgwMX0gfSwKK3sgIDE2LDB4MDViMCwwLHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDksMHgwNSwweDhmLDB4MDEsMHgwMywweDAwLDB4MDEsMHgwNiwweDAwLDB4MDksMHgwNCwweDAxfSB9LAoreyAgMTYsMHgwNWMwLDAsezB4MDIsMHgwMiwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDcsMHgyNCwweDAxLDB4MDEsMHgwMCwweDAxLDB4MDAsMHgwZSwweDI0LDB4MDJ9IH0sCit7ICAxNiwweDA1ZDAsMCx7MHgwMSwweDA2LDB4MDIsMHgxMCwweDAyLDB4NDQsMHhhYywweDAwLDB4ODAsMHhiYiwweDAwLDB4MDksMHgwNSwweDBhLDB4MDUsMHg0Y30gfSwKK3sgIDE2LDB4MDVlMCwwLHsweDAyLDB4MDEsMHgwMCwweDhmLDB4MDcsMHgyNSwweDAxLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwOSwweDA1LDB4OGYsMHgwMSwweDAzfSB9LAoreyAgMTYsMHgwNWYwLDAsezB4MDAsMHgwMSwweDA2LDB4MDAsMHgwOSwweDA0LDB4MDEsMHgwMywweDAyLDB4MDEsMHgwMiwweDAwLDB4MDAsMHgwNywweDI0LDB4MDF9IH0sCit7ICAxNiwweDA2MDAsMCx7MHgwMSwweDAwLDB4MDEsMHgwMCwweDBlLDB4MjQsMHgwMiwweDAxLDB4MDYsMHgwMywweDE4LDB4MDIsMHg0NCwweGFjLDB4MDAsMHg4MH0gfSwKK3sgIDE2LDB4MDYxMCwwLHsweGJiLDB4MDAsMHgwOSwweDA1LDB4MGEsMHgwNSwweDcyLDB4MDMsMHgwMSwweDAwLDB4OGYsMHgwNywweDI1LDB4MDEsMHgwMSwweDAwfSB9LAoreyAgMTYsMHgwNjIwLDAsezB4MDAsMHgwMCwweDA5LDB4MDUsMHg4ZiwweDAxLDB4MDMsMHgwMCwweDAxLDB4MDYsMHgwMCwweDA5LDB4MDQsMHgwMSwweDA0LDB4MDJ9IH0sCit7ICAxNiwweDA2MzAsMCx7MHgwMSwweDAyLDB4MDAsMHgwMCwweDA3LDB4MjQsMHgwMSwweDAxLDB4MDAsMHgwMSwweDAwLDB4MGIsMHgyNCwweDAyLDB4MDEsMHgwMn0gfSwKK3sgIDE2LDB4MDY0MCwwLHsweDAzLDB4MTgsMHgwMSwweDAwLDB4NzcsMHgwMSwweDA5LDB4MDUsMHgwYSwweDA1LDB4NDYsMHgwMiwweDAxLDB4MDAsMHg4ZiwweDA3fSB9LAoreyAgMTYsMHgwNjUwLDAsezB4MjUsMHgwMSwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDksMHgwNSwweDhmLDB4MDEsMHgwMywweDAwLDB4MDEsMHgwNiwweDAwLDB4MDl9IH0sCit7ICAxNiwweDA2NjAsMCx7MHgwNCwweDAyLDB4MDAsMHgwMCwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDksMHgwNCwweDAyLDB4MDEsMHgwMSwweDAxLDB4MDIsMHgwMH0gfSwKK3sgIDE2LDB4MDY3MCwwLHsweDAwLDB4MDcsMHgyNCwweDAxLDB4MDQsMHgwMCwweDAxLDB4MDAsMHgxMSwweDI0LDB4MDIsMHgwMSwweDAyLDB4MDIsMHgxMCwweDAzfSB9LAoreyAgMTYsMHgwNjgwLDAsezB4NDQsMHhhYywweDAwLDB4ODAsMHhiYiwweDAwLDB4MDAsMHg3NywweDAxLDB4MDksMHgwNSwweDhjLDB4MDUsMHg4NCwweDAxLDB4MDF9IH0sCit7ICAxNiwweDA2OTAsMCx7MHgwMCwweDAwLDB4MDcsMHgyNSwweDAxLDB4MDEsMHgwMiwweDAwLDB4MDAsMHgwOSwweDA0LDB4MDIsMHgwMiwweDAxLDB4MDEsMHgwMn0gfSwKK3sgIDE2LDB4MDZhMCwwLHsweDAwLDB4MDAsMHgwNywweDI0LDB4MDEsMHgwNCwweDAwLDB4MDEsMHgwMCwweDExLDB4MjQsMHgwMiwweDAxLDB4MDIsMHgwMywweDE4fSB9LAoreyAgMTYsMHgwNmIwLDAsezB4MDMsMHg0NCwweGFjLDB4MDAsMHg4MCwweGJiLDB4MDAsMHgwMCwweDc3LDB4MDEsMHgwOSwweDA1LDB4OGMsMHgwNSwweDQ2LDB4MDJ9IH0sCit7ICAxNiwweDA2YzAsMCx7MHgwMSwweDAwLDB4MDAsMHgwNywweDI1LDB4MDEsMHgwMSwweDAyLDB4MDAsMHgwMCwweDA1LDB4MGMsMHgwOSwweDAxLDB4YTEsMHgwMX0gfSwKK3sgIDE2LDB4MDZkMCwwLHsweDA1LDB4MGMsMHgwOSwweGU5LDB4MDUsMHgwYywweDA5LDB4ZWEsMHgxNSwweDAwLDB4MjUsMHgwMSwweDk1LDB4MDIsMHg3NSwweDAxfSB9LAoreyAgMTYsMHgwNmUwLDAsezB4ODEsMHg0MiwweDk1LDB4MDEsMHg3NSwweDA2LDB4ODEsMHgwMSwweDA1LDB4MGMsMHgwOSwweDAwLDB4MDUsMHgwYywweDA5LDB4MDB9IH0sCit7ICAxNiwweDA2ZjAsMCx7MHgxNSwweDAwLDB4MjUsMHgwMSwweDk1LDB4MDIsMHg3NSwweDAxLDB4OTEsMHgwNiwweDk1LDB4MDEsMHg3NSwweDA2LDB4OTEsMHgwM30gfSwKK3sgIDE2LDB4MDcwMCwwLHsweGMwLDB4MDQsMHgwMywweDA5LDB4MDQsMHgxOCwweDAzLDB4NDUsMHgwMCwweDRkLDB4MDAsMHg0MSwweDAwLDB4NDcsMHgwMCwweDQ5fSB9LAoreyAgMTYsMHgwNzEwLDAsezB4MDAsMHg0MywweDAwLDB4MjAsMHgwMCwweDQ3LDB4MDAsMHg2ZCwweDAwLDB4NjIsMHgwMCwweDQ4LDB4MDAsMHgxZSwweDAzLDB4NDV9IH0sCit7ICAxNiwweDA3MjAsMCx7MHgwMCwweDZkLDB4MDAsMHg2MSwweDAwLDB4NjcsMHgwMCwweDY5LDB4MDAsMHg2MywweDAwLDB4MjAsMHgwMCwweDQ1LDB4MDAsMHg0ZH0gfSwKK3sgIDE2LDB4MDczMCwwLHsweDAwLDB4NDksMHgwMCwweDIwLDB4MDAsMHgzMiwweDAwLDB4N2MsMHgwMCwweDM2LDB4MDAsMHgyYSwweDAzLDB4NDMsMHgwMCwweDZmfSB9LAoreyAgMTYsMHgwNzQwLDAsezB4MDAsMHg2ZSwweDAwLDB4NjYsMHgwMCwweDY5LDB4MDAsMHg2NywweDAwLDB4NzUsMHgwMCwweDcyLDB4MDAsMHg2MSwweDAwLDB4NzR9IH0sCit7ICAxNiwweDA3NTAsMCx7MHgwMCwweDY5LDB4MDAsMHg2ZiwweDAwLDB4NmUsMHgwMCwweDIwLDB4MDAsMHg1MywweDAwLDB4NzQsMHgwMCwweDcyLDB4MDAsMHg2OX0gfSwKK3sgIDE2LDB4MDc2MCwwLHsweDAwLDB4NmUsMHgwMCwweDY3LDB4MDAsMHgyMiwweDAzLDB4NDksMHgwMCwweDZlLDB4MDAsMHg3NCwweDAwLDB4NjUsMHgwMCwweDcyfSB9LAoreyAgMTYsMHgwNzcwLDAsezB4MDAsMHg2NiwweDAwLDB4NjEsMHgwMCwweDYzLDB4MDAsMHg2NSwweDAwLDB4MjAsMHgwMCwweDUzLDB4MDAsMHg3NCwweDAwLDB4NzJ9IH0sCit7ICAgOSwweDA3ODAsMCx7MHgwMCwweDY5LDB4MDAsMHg2ZSwweDAwLDB4NjcsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDA3ODksMCx7MHg3NCwweDAwLDB4ZjUsMHg4NiwweDkwLDB4ZmQsMHhhNSwweDdjLDB4MDUsMHhhMywweGU1LDB4ODIsMHg0NSwweDgzLDB4NzAsMHhmOX0gfSwKK3sgICAxLDB4MDc5OSwwLHsweDIyfSB9LAoreyAgMTYsMHgwNzlhLDAsezB4OTAsMHg3ZiwweGQ2LDB4ZTAsMHg0NCwweDgwLDB4ZjAsMHg0MywweDg3LDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjJ9IH0sCit7ICAxNiwweDA3YWEsMCx7MHhjMCwweGQwLDB4YzAsMHhlMCwweDhmLDB4ZTAsMHhjMCwweGUwLDB4OGUsMHhlMCwweGMwLDB4ZTAsMHg4ZCwweGUwLDB4YzAsMHhlMH0gfSwKK3sgIDE2LDB4MDdiYSwwLHsweDhjLDB4ZTAsMHhjMCwweGUwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHgwNSwweDg2LDB4YzAsMHg4NCwweGMwLDB4ODUsMHhlNSwweDE4fSB9LAoreyAgMTYsMHgwN2NhLDAsezB4YjQsMHgwMiwweDAzLDB4MDIsMHgwNywweGQ5LDB4YjQsMHgwMSwweDAzLDB4MDIsMHgwNywweGRlLDB4MDIsMHgwNywweGZhLDB4N2R9IH0sCit7ICAxNiwweDA3ZGEsMCx7MHgwMSwweDAyLDB4MDgsMHgxNiwweGU1LDB4MTksMHgxNCwweGY1LDB4MTksMHhjMywweGI1LDB4MTMsMHgwMywweDAyLDB4MDcsMHhmNX0gfSwKK3sgIDE2LDB4MDdlYSwwLHsweDUwLDB4MDksMHhiNCwweDAwLDB4ZWEsMHg3NSwweDE5LDB4MGEsMHgwMiwweDA3LDB4ZDksMHg3ZCwweDAwLDB4MDIsMHgwOCwweDE2fSB9LAoreyAgMTYsMHgwN2ZhLDAsezB4ZTUsMHgxOSwweDE0LDB4ZjUsMHgxOSwweGMzLDB4YjUsMHgxNCwweDAzLDB4MDIsMHgwOCwweDExLDB4NTAsMHgwOSwweGI0LDB4MDB9IH0sCit7ICAxNiwweDA4MGEsMCx7MHhjZSwweDc1LDB4MTksMHgwYSwweDAyLDB4MDcsMHhkOSwweDdkLDB4MDIsMHgwMiwweDA4LDB4MTYsMHg3YywweDA1LDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4MDgxYSwwLHsweDk5LDB4ZTAsMHg1NCwweDQwLDB4ZGMsMHgwMywweDAyLDB4MDgsMHg0MywweGI0LDB4MDAsMHgxZCwweDkwLDB4N2YsMHhlMywweDc0fSB9LAoreyAgMTYsMHgwODJhLDAsezB4N2IsMHhmMCwweGEzLDB4NzQsMHg4MCwweGYwLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg0MCwweGYwLDB4OTAsMHg3ZiwweGU1LDB4ZjB9IH0sCit7ICAxNiwweDA4M2EsMCx7MHg5MCwweDdmLDB4ZTIsMHg3NCwweDAwLDB4ZjAsMHgwMiwweDA4LDB4MTgsMHgwNSwweDg2LDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg4MH0gfSwKK3sgIDE2LDB4MDg0YSwwLHsweGYwLDB4OTAsMHg3OSwweDY1LDB4ZTAsMHhiNCwweDAxLDB4MDMsMHgwMiwweDA4LDB4OWUsMHhiNCwweDAyLDB4MDMsMHgwMiwweDA4fSB9LAoreyAgMTYsMHgwODVhLDAsezB4OTYsMHhiNCwweDAzLDB4MDMsMHgwMiwweDA4LDB4OGUsMHhiNCwweDA0LDB4MDMsMHgwMiwweDA4LDB4ODYsMHhiNCwweDA1LDB4MDN9IH0sCit7ICAxNiwweDA4NmEsMCx7MHgwMiwweDA4LDB4N2UsMHhiNCwweDA2LDB4MDMsMHgwMiwweDA4LDB4NzYsMHgwMiwweDA4LDB4ZjQsMHgwNSwweDg2LDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4MDg3YSwwLHsweDZjLDB4MDIsMHgwOCwweGU5LDB4MDUsMHg4NiwweDkwLDB4N2YsMHg2YywweDAyLDB4MDgsMHhkZCwweDA1LDB4ODYsMHg5MCwweDdmfSB9LAoreyAgMTYsMHgwODhhLDAsezB4NmMsMHgwMiwweDA4LDB4Y2YsMHgwNSwweDg2LDB4OTAsMHg3ZiwweDZjLDB4MDIsMHgwOCwweGMwLDB4MDUsMHg4NiwweDkwLDB4N2Z9IH0sCit7ICAxNiwweDA4OWEsMCx7MHg2YywweDAyLDB4MDgsMHhiMiwweDA1LDB4ODYsMHg5MCwweDdmLDB4NmMsMHhmMCwweDAwLDB4ZjAsMHgwMCwweGYwLDB4MDAsMHhmMH0gfSwKK3sgIDE2LDB4MDhhYSwwLHsweDBkLDB4ZWQsMHhiNCwweDJkLDB4ZjQsMHgwMiwweDA4LDB4ZjQsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHgwZCwweGVkfSB9LAoreyAgMTYsMHgwOGJhLDAsezB4YjQsMHgyZCwweGY1LDB4MDIsMHgwOCwweGY0LDB4ZjAsMHgwMCwweGYwLDB4MDAsMHhmMCwweDAwLDB4ZjAsMHgwZCwweGVkLDB4YjR9IH0sCit7ICAxNiwweDA4Y2EsMCx7MHgzMSwweGY0LDB4MDIsMHgwOCwweGY0LDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4MGQsMHhlZCwweGI0LDB4MzEsMHhmNX0gfSwKK3sgIDE2LDB4MDhkYSwwLHsweDAyLDB4MDgsMHhmNCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4MGQsMHhlZCwweGI0LDB4NjEsMHhmNywweDAyLDB4MDgsMHhmNCwweGYwfSB9LAoreyAgMTYsMHgwOGVhLDAsezB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweDBkLDB4ZWQsMHhiNCwweDYxLDB4ZjUsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDAwLDB4ZjB9IH0sCit7ICAxNiwweDA4ZmEsMCx7MHhkMCwweDg1LDB4ZDAsMHg4NCwweDA1LDB4ODYsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZTAsMHhmYywweGQwLDB4ZTAsMHhmZH0gfSwKK3sgICA1LDB4MDkwYSwwLHsweGQwLDB4ZTAsMHhmZSwweGQwLDB4ZTB9IH0sCit7ICAgNiwweDA5MGYsMCx7MHhmZiwweGQwLDB4ZTAsMHhkMCwweGQwLDB4MjJ9IH0sCit7ICAxNiwweDA5MTUsMCx7MHhjMCwweGQwLDB4YzAsMHhlMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4OTAsMHg3ZiwweDZmLDB4ZTUsMHgwYywweGYwLDB4ZTUsMHgwZH0gfSwKK3sgIDEzLDB4MDkyNSwwLHsweGYwLDB4ZTUsMHgwZSwweGYwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGUwLDB4ZDAsMHhkMCwweDIyfSB9LAoreyAgMTYsMHgwOTMyLDAsezB4YzAsMHhkMCwweGMwLDB4ZTAsMHg4ZiwweGUwLDB4YzAsMHhlMCwweDhlLDB4ZTAsMHhjMCwweGUwLDB4YzAsMHg4MiwweGMwLDB4ODN9IH0sCit7ICAxNiwweDA5NDIsMCx7MHgwNSwweDg2LDB4YzAsMHg4NCwweGMwLDB4ODUsMHg5MCwweDc5LDB4NzAsMHhlMCwweGZmLDB4YmYsMHgwMCwweDAzLDB4MDIsMHgwYX0gfSwKK3sgIDE2LDB4MDk1MiwwLHsweGI4LDB4OTAsMHg3ZiwweDk2LDB4ZTAsMHg0NCwweDgwLDB4ZjAsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDgwLDB4ZjAsMHg5MCwweDdmfSB9LAoreyAgMTYsMHgwOTYyLDAsezB4NjIsMHhlMCwweDA1LDB4ODYsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDAwLDB4ZjAsMHg5MCwweDdmLDB4OTYsMHhlMCwweDU0LDB4N2Z9IH0sCit7ICAxNiwweDA5NzIsMCx7MHhmMCwweDkwLDB4N2YsMHhlMiwweDc0LDB4ODAsMHhmMCwweDkwLDB4NzksMHg4OCwweGUwLDB4YjQsMHgwMSwweDAzLDB4MDIsMHgwOX0gfSwKK3sgIDE2LDB4MDk4MiwwLHsweGJlLDB4YjQsMHgwMiwweDAzLDB4MDIsMHgwOSwweGMzLDB4YjQsMHgwMywweDAzLDB4MDIsMHgwOSwweGFjLDB4YjQsMHgwNCwweDAzfSB9LAoreyAgMTYsMHgwOTkyLDAsezB4MDIsMHgwOSwweDlhLDB4MDUsMHg4NiwweDAyLDB4MGEsMHhiMiwweGVmLDB4NTQsMHgwMywweGZlLDB4ZWYsMHgwMywweDAzLDB4NTR9IH0sCit7ICAxNiwweDA5YTIsMCx7MHgzZiwweGZmLDB4OTAsMHg3ZiwweDYzLDB4MDUsMHg4NiwweDAyLDB4MDksMHhjOSwweGVmLDB4NTQsMHgwMywweGZlLDB4ZWYsMHgwM30gfSwKK3sgIDE2LDB4MDliMiwwLHsweDAzLDB4NTQsMHgzZiwweGZmLDB4OTAsMHg3ZiwweDYzLDB4MDUsMHg4NiwweDAyLDB4MGEsMHgzNiwweDA1LDB4ODYsMHgwMiwweDBhfSB9LAoreyAgMTYsMHgwOWMyLDAsezB4YTUsMHgwNSwweDg2LDB4MDIsMHgwYSwweDhlLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4MDUsMHg4NiwweGUwLDB4ZTB9IH0sCit7ICAxNiwweDA5ZDIsMCx7MHhlMCwweDA1LDB4ODYsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHgwNSwweDg2LDB4ZTAsMHhlMCwweGUwLDB4MDUsMHg4Nn0gfSwKK3sgIDE2LDB4MDllMiwwLHsweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweDA1LDB4ODYsMHhlMCwweGUwLDB4ZTAsMHgwNSwweDg2LDB4ZTAsMHhlMCwweGUwfSB9LAoreyAgMTYsMHgwOWYyLDAsezB4ZTAsMHhlMCwweGUwLDB4MDUsMHg4NiwweGUwLDB4ZTAsMHhlMCwweDA1LDB4ODYsMHhkZiwweGNhLDB4ZWUsMHhiNCwweDAwLDB4MDN9IH0sCit7ICAxNiwweDBhMDIsMCx7MHgwMiwweDBhLDB4YjIsMHhiNCwweDAxLDB4MDMsMHgwMiwweDBhLDB4MjUsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHgwNX0gfSwKK3sgIDE2LDB4MGExMiwwLHsweDg2LDB4ZTAsMHhlMCwweGUwLDB4MDUsMHg4NiwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweDA1LDB4ODYsMHhlMCwweGUwfSB9LAoreyAgMTYsMHgwYTIyLDAsezB4ZTAsMHgwNSwweDg2LDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4MDUsMHg4NiwweGUwLDB4ZTAsMHhlMCwweDA1LDB4ODZ9IH0sCit7ICAxNiwweDBhMzIsMCx7MHgwMiwweDBhLDB4YjIsMHhlMCwweGUwLDB4ZTAsMHhlMCwweDA1LDB4ODYsMHhlMCwweGUwLDB4MDUsMHg4NiwweGUwLDB4ZTAsMHhlMH0gfSwKK3sgIDEzLDB4MGE0MiwwLHsweGUwLDB4MDUsMHg4NiwweGUwLDB4ZTAsMHgwNSwweDg2LDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHgwNSwweDg2fSB9LAoreyAgMTYsMHgwYTRmLDAsezB4ZTAsMHhlMCwweDA1LDB4ODYsMHhlMCwweGUwLDB4ZTAsMHhlMCwweDA1LDB4ODYsMHhlMCwweGUwLDB4MDUsMHg4NiwweGRmLDB4ZDZ9IH0sCit7ICAxNiwweDBhNWYsMCx7MHhlZSwweGI0LDB4MDAsMHgwMywweDAyLDB4MGEsMHhiMiwweGI0LDB4MDEsMHgwMywweDAyLDB4MGEsMHg4MCwweGUwLDB4ZTAsMHhlMH0gfSwKK3sgIDE2LDB4MGE2ZiwwLHsweGUwLDB4MDUsMHg4NiwweGUwLDB4ZTAsMHgwNSwweDg2LDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHgwNSwweDg2LDB4ZTAsMHhlMCwweDA1fSB9LAoreyAgMTYsMHgwYTdmLDAsezB4ODYsMHhlMCwweGUwLDB4ZTAsMHhlMCwweDA1LDB4ODYsMHhlMCwweGUwLDB4MDUsMHg4NiwweDAyLDB4MGEsMHhiMiwweGUwLDB4ZTB9IH0sCit7ICAxNiwweDBhOGYsMCx7MHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMH0gfSwKK3sgIDE2LDB4MGE5ZiwwLHsweGRmLDB4ZWMsMHgwMiwweDBhLDB4YjIsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwfSB9LAoreyAgMTYsMHgwYWFmLDAsezB4ZTAsMHhkZiwweGYyLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHgwMCwweGYwLDB4ZDAsMHg4NSwweGQwLDB4ODQsMHgwNSwweDg2LDB4ZDB9IH0sCit7ICAxNCwweDBhYmYsMCx7MHg4MywweGQwLDB4ODIsMHhkMCwweGUwLDB4ZmUsMHhkMCwweGUwLDB4ZmYsMHhkMCwweGUwLDB4ZDAsMHhkMCwweDIyfSB9LAoreyAgMTYsMHgwYWNkLDAsezB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwweGUwLDB4ZTgsMHhjMCwweGUwLDB4NzgsMHhkMSwweGU4LDB4MTQsMHhmOCwweDcwLDB4ZmJ9IH0sCit7ICAxMCwweDBhZGQsMCx7MHhkMCwweGUwLDB4ZjgsMHhkMCwweGUwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHgyMn0gfSwKK3sgIDE2LDB4MGFlNywwLHsweGMwLDB4ZDAsMHhjMCwweGUwLDB4OGYsMHhlMCwweGMwLDB4ZTAsMHg4ZSwweGUwLDB4YzAsMHhlMCwweDhkLDB4ZTAsMHhjMCwweGUwfSB9LAoreyAgMTYsMHgwYWY3LDAsezB4OGMsMHhlMCwweGMwLDB4ZTAsMHg3NSwweDg2LDB4MDAsMHhjMCwweDgyLDB4YzAsMHg4MywweDA1LDB4ODYsMHhjMCwweDg0LDB4YzB9IH0sCit7ICAxNiwweDBiMDcsMCx7MHg4NSwweDdlLDB4MDAsMHg5MCwweDc5LDB4OGUsMHhlMCwweGI0LDB4MDAsMHgxNiwweDc0LDB4MDEsMHhmMCwweDkwLDB4MDYsMHhjYX0gfSwKK3sgIDE2LDB4MGIxNywwLHsweGEzLDB4YTMsMHhhMywweGEzLDB4YTMsMHhhMywweGEzLDB4ZTAsMHhmZiwweDkwLDB4NzksMHg4ZCwweGYwLDB4MDIsMHgwYiwweDM5fSB9LAoreyAgMTYsMHgwYjI3LDAsezB4OTAsMHg3OSwweDhkLDB4ZTAsMHhmZiwweDkwLDB4NzksMHg4ZiwweGUwLDB4ZmQsMHg5MCwweDc5LDB4OTAsMHhlMCwweGZjLDB4MDJ9IH0sCit7ICAxNiwweDBiMzcsMCx7MHgwYiwweDQ2LDB4OTAsMHgwNiwweGNhLDB4MDUsMHg4NiwweDkwLDB4N2YsMHgwMCwweDA1LDB4ODYsMHgwMiwweDBiLDB4NTEsMHg4ZH0gfSwKK3sgIDE2LDB4MGI0NywwLHsweDg0LDB4OGMsMHg4NSwweDA1LDB4ODYsMHg5MCwweDdmLDB4MDAsMHgwNSwweDg2LDB4ZTAsMHhhMywweDA1LDB4ODYsMHhmMCwweGEzfSB9LAoreyAgMTYsMHgwYjU3LDAsezB4MGUsMHhlZSwweGI0LDB4NDAsMHgwMywweDAyLDB4MGIsMHg2YywweDA1LDB4ODYsMHhkZiwweGVlLDB4OTAsMHg3OSwweDhlLDB4NzR9IH0sCit7ICAxNiwweDBiNjcsMCx7MHgwMCwweGYwLDB4MDIsMHgwYiwweDgyLDB4MDUsMHg4NiwweGFkLDB4ODQsMHhhYywweDg1LDB4OTAsMHg3OSwweDhmLDB4ZWQsMHhmMH0gfSwKK3sgIDE2LDB4MGI3NywwLHsweDkwLDB4NzksMHg5MCwweGVjLDB4ZjAsMHg5MCwweDc5LDB4OGQsMHgxZiwweGVmLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHhlZSwweGYwfSB9LAoreyAgMTYsMHgwYjg3LDAsezB4ZDAsMHg4NSwweGQwLDB4ODQsMHgwNSwweDg2LDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGUwLDB4ZmMsMHhkMCwweGUwLDB4ZmR9IH0sCit7ICAxMSwweDBiOTcsMCx7MHhkMCwweGUwLDB4ZmUsMHhkMCwweGUwLDB4ZmYsMHhkMCwweGUwLDB4ZDAsMHhkMCwweDIyfSB9LAoreyAgMTYsMHgwYmEyLDAsezB4YzAsMHhkMCwweGMwLDB4ZTAsMHhjMCwweDgyLDB4YzAsMHg4MywweDkwLDB4N2YsMHhhZSwweGUwLDB4NTQsMHhlMCwweGYwLDB4OTB9IH0sCit7ICAxNiwweDBiYjIsMCx7MHg3ZiwweDk2LDB4ZTAsMHg0NCwweDA4LDB4NTQsMHhmYiwweGYwLDB4OTAsMHg3ZiwweDk3LDB4ZTAsMHg1NCwweGJmLDB4ZjAsMHg5MH0gfSwKK3sgIDE2LDB4MGJjMiwwLHsweDdmLDB4ZTMsMHg3NCwweDdiLDB4ZjAsMHg5MCwweDdmLDB4ZTQsMHg3NCwweDQwLDB4ZjAsMHg5MCwweDc5LDB4NzgsMHhlMCwweDkwfSB9LAoreyAgMTYsMHgwYmQyLDAsezB4N2IsMHg0MCwweGYwLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg0OCwweGYwLDB4OTAsMHg3ZiwweGU1LDB4ZTAsMHg5MCwweDdmLDB4ZTJ9IH0sCit7ICAxNiwweDBiZTIsMCx7MHg3NCwweDAwLDB4ZjAsMHg5MCwweDdmLDB4OTYsMHhlMCwweDU0LDB4ZjcsMHg0NCwweDA0LDB4ZjAsMHg5MCwweDdmLDB4ZTMsMHg3NH0gfSwKK3sgIDE2LDB4MGJmMiwwLHsweDdiLDB4ZjAsMHg5MCwweDdmLDB4ZTQsMHg3NCwweDQwLDB4ZjAsMHg5MCwweDc5LDB4NzksMHhlMCwweDkwLDB4N2IsMHg0MCwweGYwfSB9LAoreyAgMTYsMHgwYzAyLDAsezB4OTAsMHg3ZiwweGUyLDB4NzQsMHg0OCwweGYwLDB4OTAsMHg3ZiwweGU1LDB4ZTAsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDAwLDB4ZjB9IH0sCit7ICAxNiwweDBjMTIsMCx7MHg5MCwweDdmLDB4OTYsMHhlMCwweDU0LDB4ZjMsMHhmMCwweDkwLDB4N2YsMHhhZSwweGUwLDB4NDQsMHgxZiwweGYwLDB4ZDAsMHg4M30gfSwKK3sgICA3LDB4MGMyMiwwLHsweGQwLDB4ODIsMHhkMCwweGUwLDB4ZDAsMHhkMCwweDIyfSB9LAoreyAgMTYsMHgwYzI5LDAsezB4YzAsMHhkMCwweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDkwLDB4NzksMHgyZiwweGUwLDB4NjQsMHhmZiwweGMzLDB4MjR9IH0sCit7ICAxMSwweDBjMzksMCx7MHgwMSwweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4ZDAsMHhkMCwweDIyfSB9LAoreyAgMTYsMHgwYzQ0LDAsezB4YmIsMHgwMSwweDA2LDB4ODksMHg4MiwweDhhLDB4ODMsMHhlMCwweDIyLDB4NTAsMHgwMiwweGU3LDB4MjIsMHhiYiwweGZlLDB4MDJ9IH0sCit7ICAgOSwweDBjNTQsMCx7MHhlMywweDIyLDB4ODksMHg4MiwweDhhLDB4ODMsMHhlNCwweDkzLDB4MjJ9IH0sCit7ICAxNiwweDBjNWQsMCx7MHhiYiwweDAxLDB4MGMsMHhlNSwweDgyLDB4MjksMHhmNSwweDgyLDB4ZTUsMHg4MywweDNhLDB4ZjUsMHg4MywweGUwLDB4MjIsMHg1MH0gfSwKK3sgIDE2LDB4MGM2ZCwwLHsweDA2LDB4ZTksMHgyNSwweDgyLDB4ZjgsMHhlNiwweDIyLDB4YmIsMHhmZSwweDA2LDB4ZTksMHgyNSwweDgyLDB4ZjgsMHhlMiwweDIyfSB9LAoreyAgMTMsMHgwYzdkLDAsezB4ZTUsMHg4MiwweDI5LDB4ZjUsMHg4MiwweGU1LDB4ODMsMHgzYSwweGY1LDB4ODMsMHhlNCwweDkzLDB4MjJ9IH0sCit7ICAxNiwweDBjOGEsMCx7MHhiYiwweDAxLDB4MDYsMHg4OSwweDgyLDB4OGEsMHg4MywweGYwLDB4MjIsMHg1MCwweDAyLDB4ZjcsMHgyMiwweGJiLDB4ZmUsMHgwMX0gfSwKK3sgICAyLDB4MGM5YSwwLHsweGYzLDB4MjJ9IH0sCit7ICAxNiwweDBjOWMsMCx7MHhmOCwweGJiLDB4MDEsMHgwZCwweGU1LDB4ODIsMHgyOSwweGY1LDB4ODIsMHhlNSwweDgzLDB4M2EsMHhmNSwweDgzLDB4ZTgsMHhmMH0gfSwKK3sgIDE2LDB4MGNhYywwLHsweDIyLDB4NTAsMHgwNiwweGU5LDB4MjUsMHg4MiwweGM4LDB4ZjYsMHgyMiwweGJiLDB4ZmUsMHgwNSwweGU5LDB4MjUsMHg4MiwweGM4fSB9LAoreyAgIDIsMHgwY2JjLDAsezB4ZjIsMHgyMn0gfSwKK3sgIDE2LDB4MGNiZSwwLHsweGMyLDB4ZDUsMHhlYywweDMwLDB4ZTcsMHgwOSwweGIyLDB4ZDUsMHhlNCwweGMzLDB4OWQsMHhmZCwweGU0LDB4OWMsMHhmYywweGVlfSB9LAoreyAgMTYsMHgwY2NlLDAsezB4MzAsMHhlNywweDE1LDB4YjIsMHhkNSwweGU0LDB4YzMsMHg5ZiwweGZmLDB4ZTQsMHg5ZSwweGZlLDB4MTIsMHgwZSwweDQwLDB4YzN9IH0sCit7ICAxNiwweDBjZGUsMCx7MHhlNCwweDlkLDB4ZmQsMHhlNCwweDljLDB4ZmMsMHg4MCwweDAzLDB4MTIsMHgwZSwweDQwLDB4MzAsMHhkNSwweDA3LDB4YzMsMHhlNH0gfSwKK3sgICA2LDB4MGNlZSwwLHsweDlmLDB4ZmYsMHhlNCwweDllLDB4ZmUsMHgyMn0gfSwKK3sgIDE2LDB4MGNmNCwwLHsweGM1LDB4ZjAsMHhmOCwweGEzLDB4ZTAsMHgyOCwweGYwLDB4YzUsMHhmMCwweGY4LDB4ZTUsMHg4MiwweDE1LDB4ODIsMHg3MCwweDAyfSB9LAoreyAgIDYsMHgwZDA0LDAsezB4MTUsMHg4MywweGUwLDB4MzgsMHhmMCwweDIyfSB9LAoreyAgMTYsMHgwZDBhLDAsezB4YmIsMHgwMSwweDEwLDB4ZTUsMHg4MiwweDI5LDB4ZjUsMHg4MiwweGU1LDB4ODMsMHgzYSwweGY1LDB4ODMsMHhlMCwweGY1LDB4ZjB9IH0sCit7ICAxNiwweDBkMWEsMCx7MHhhMywweGUwLDB4MjIsMHg1MCwweDA5LDB4ZTksMHgyNSwweDgyLDB4ZjgsMHg4NiwweGYwLDB4MDgsMHhlNiwweDIyLDB4YmIsMHhmZX0gfSwKK3sgIDE2LDB4MGQyYSwwLHsweDBhLDB4ZTksMHgyNSwweDgyLDB4ZjgsMHhlMiwweGY1LDB4ZjAsMHgwOCwweGUyLDB4MjIsMHhlNSwweDgzLDB4MmEsMHhmNSwweDgzfSB9LAoreyAgIDgsMHgwZDNhLDAsezB4ZTksMHg5MywweGY1LDB4ZjAsMHhhMywweGU5LDB4OTMsMHgyMn0gfSwKK3sgIDE2LDB4MGQ0MiwwLHsweGU4LDB4OGYsMHhmMCwweGE0LDB4Y2MsMHg4YiwweGYwLDB4YTQsMHgyYywweGZjLDB4ZTksMHg4ZSwweGYwLDB4YTQsMHgyYywweGZjfSB9LAoreyAgMTYsMHgwZDUyLDAsezB4OGEsMHhmMCwweGVkLDB4YTQsMHgyYywweGZjLDB4ZWEsMHg4ZSwweGYwLDB4YTQsMHhjZCwweGE4LDB4ZjAsMHg4YiwweGYwLDB4YTR9IH0sCit7ICAxNiwweDBkNjIsMCx7MHgyZCwweGNjLDB4MzgsMHgyNSwweGYwLDB4ZmQsMHhlOSwweDhmLDB4ZjAsMHhhNCwweDJjLDB4Y2QsMHgzNSwweGYwLDB4ZmMsMHhlYn0gfSwKK3sgIDE2LDB4MGQ3MiwwLHsweDhlLDB4ZjAsMHhhNCwweGZlLDB4YTksMHhmMCwweGViLDB4OGYsMHhmMCwweGE0LDB4Y2YsMHhjNSwweGYwLDB4MmUsMHhjZCwweDM5fSB9LAoreyAgMTUsMHgwZDgyLDAsezB4ZmUsMHhlNCwweDNjLDB4ZmMsMHhlYSwweGE0LDB4MmQsMHhjZSwweDM1LDB4ZjAsMHhmZCwweGU0LDB4M2MsMHhmYywweDIyfSB9LAoreyAgMTYsMHgwZDkxLDAsezB4ZWIsMHg5ZiwweGY1LDB4ZjAsMHhlYSwweDllLDB4NDIsMHhmMCwweGU5LDB4OWQsMHg0MiwweGYwLDB4ZTgsMHg5YywweDQ1LDB4ZjB9IH0sCit7ICAgMSwweDBkYTEsMCx7MHgyMn0gfSwKK3sgIDE2LDB4MGRhMiwwLHsweGJiLDB4MDEsMHgwZCwweGU1LDB4ODIsMHgyOSwweGY1LDB4ODIsMHhlNSwweDgzLDB4M2EsMHhmNSwweDgzLDB4MDIsMHgwZSwweGExfSB9LAoreyAgMTYsMHgwZGIyLDAsezB4NTAsMHgwNywweGU5LDB4MjUsMHg4MiwweGY4LDB4MDIsMHgwZSwweDk1LDB4YmIsMHhmZSwweDA3LDB4ZTksMHgyNSwweDgyLDB4Zjh9IH0sCit7ICAxNiwweDBkYzIsMCx7MHgwMiwweDBlLDB4YWQsMHhlNSwweDgyLDB4MjksMHhmNSwweDgyLDB4ZTUsMHg4MywweDNhLDB4ZjUsMHg4MywweDAyLDB4MGUsMHhiOX0gfSwKK3sgIDE2LDB4MGRkMiwwLHsweGJiLDB4MDEsMHgwZCwweGU1LDB4ODIsMHgyOSwweGY1LDB4ODIsMHhlNSwweDgzLDB4M2EsMHhmNSwweDgzLDB4MDIsMHgwZSwweGQ1fSB9LAoreyAgMTYsMHgwZGUyLDAsezB4NTAsMHgwNywweGU5LDB4MjUsMHg4MiwweGY4LDB4MDIsMHgwZSwweGM5LDB4YmIsMHhmZSwweDA3LDB4ZTksMHgyNSwweDgyLDB4Zjh9IH0sCit7ICAgNCwweDBkZjIsMCx7MHgwMiwweDBlLDB4ZTEsMHgyMn0gfSwKK3sgIDE2LDB4MGRmNiwwLHsweGJiLDB4MDEsMHgwZCwweGU1LDB4ODIsMHgyOSwweGY1LDB4ODIsMHhlNSwweDgzLDB4M2EsMHhmNSwweDgzLDB4MDIsMHgwZiwweDA2fSB9LAoreyAgMTYsMHgwZTA2LDAsezB4NTAsMHgwNywweGU5LDB4MjUsMHg4MiwweGY4LDB4MDIsMHgwZSwweGVkLDB4YmIsMHhmZSwweDA3LDB4ZTksMHgyNSwweDgyLDB4Zjh9IH0sCit7ICAgNCwweDBlMTYsMCx7MHgwMiwweDBmLDB4MzcsMHgyMn0gfSwKK3sgIDE2LDB4MGUxYSwwLHsweGQwLDB4ODMsMHhkMCwweDgyLDB4ZjgsMHhlNCwweDkzLDB4NzAsMHgxMiwweDc0LDB4MDEsMHg5MywweDcwLDB4MGQsMHhhMywweGEzfSB9LAoreyAgMTYsMHgwZTJhLDAsezB4OTMsMHhmOCwweDc0LDB4MDEsMHg5MywweGY1LDB4ODIsMHg4OCwweDgzLDB4ZTQsMHg3MywweDc0LDB4MDIsMHg5MywweDY4LDB4NjB9IH0sCit7ICAgNiwweDBlM2EsMCx7MHhlZiwweGEzLDB4YTMsMHhhMywweDgwLDB4ZGZ9IH0sCit7ICAxNiwweDBlNDAsMCx7MHhiYywweDAwLDB4MGIsMHhiZSwweDAwLDB4MjksMHhlZiwweDhkLDB4ZjAsMHg4NCwweGZmLDB4YWQsMHhmMCwweDIyLDB4ZTQsMHhjY30gfSwKK3sgIDE2LDB4MGU1MCwwLHsweGY4LDB4NzUsMHhmMCwweDA4LDB4ZWYsMHgyZiwweGZmLDB4ZWUsMHgzMywweGZlLDB4ZWMsMHgzMywweGZjLDB4ZWUsMHg5ZCwweGVjfSB9LAoreyAgMTYsMHgwZTYwLDAsezB4OTgsMHg0MCwweDA1LDB4ZmMsMHhlZSwweDlkLDB4ZmUsMHgwZiwweGQ1LDB4ZjAsMHhlOSwweGU0LDB4Y2UsMHhmZCwweDIyLDB4ZWR9IH0sCit7ICAxNiwweDBlNzAsMCx7MHhmOCwweGY1LDB4ZjAsMHhlZSwweDg0LDB4MjAsMHhkMiwweDFjLDB4ZmUsMHhhZCwweGYwLDB4NzUsMHhmMCwweDA4LDB4ZWYsMHgyZn0gfSwKK3sgIDE2LDB4MGU4MCwwLHsweGZmLDB4ZWQsMHgzMywweGZkLDB4NDAsMHgwNywweDk4LDB4NTAsMHgwNiwweGQ1LDB4ZjAsMHhmMiwweDIyLDB4YzMsMHg5OCwweGZkfSB9LAoreyAgIDUsMHgwZTkwLDAsezB4MGYsMHhkNSwweGYwLDB4ZWEsMHgyMn0gfSwKK3sgIDEyLDB4MGU5NSwwLHsweGU2LDB4ZmMsMHgwOCwweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmUsMHgwOCwweGU2LDB4ZmYsMHgyMn0gfSwKK3sgIDEyLDB4MGVhMSwwLHsweGUwLDB4ZmMsMHhhMywweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmYsMHgyMn0gfSwKK3sgIDEyLDB4MGVhZCwwLHsweGUyLDB4ZmMsMHgwOCwweGUyLDB4ZmQsMHgwOCwweGUyLDB4ZmUsMHgwOCwweGUyLDB4ZmYsMHgyMn0gfSwKK3sgIDE2LDB4MGViOSwwLHsweGU0LDB4OTMsMHhmYywweGEzLDB4ZTQsMHg5MywweGZkLDB4YTMsMHhlNCwweDkzLDB4ZmUsMHhhMywweGU0LDB4OTMsMHhmZiwweDIyfSB9LAoreyAgMTIsMHgwZWM5LDAsezB4ZWMsMHhmNiwweDA4LDB4ZWQsMHhmNiwweDA4LDB4ZWUsMHhmNiwweDA4LDB4ZWYsMHhmNiwweDIyfSB9LAoreyAgMTIsMHgwZWQ1LDAsezB4ZWMsMHhmMCwweGEzLDB4ZWQsMHhmMCwweGEzLDB4ZWUsMHhmMCwweGEzLDB4ZWYsMHhmMCwweDIyfSB9LAoreyAgMTIsMHgwZWUxLDAsezB4ZWMsMHhmMiwweDA4LDB4ZWQsMHhmMiwweDA4LDB4ZWUsMHhmMiwweDA4LDB4ZWYsMHhmMiwweDIyfSB9LAoreyAgMTYsMHgwZWVkLDAsezB4ZDAsMHg4MywweGQwLDB4ODIsMHhlNCwweDkzLDB4ZjYsMHgwOCwweDc0LDB4MDEsMHg5MywweGY2LDB4MDgsMHg3NCwweDAyLDB4OTN9IH0sCit7ICAgOSwweDBlZmQsMCx7MHhmNiwweDA4LDB4NzQsMHgwMywweDkzLDB4ZjYsMHg3NCwweDA0LDB4NzN9IH0sCit7ICAxNiwweDBmMDYsMCx7MHhhOCwweDgyLDB4ODUsMHg4MywweGYwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHgxMiwweDBmLDB4MWQsMHgxMiwweDBmLDB4MWQsMHgxMn0gfSwKK3sgIDE2LDB4MGYxNiwwLHsweDBmLDB4MWQsMHgxMiwweDBmLDB4MWQsMHhlNCwweDczLDB4ZTQsMHg5MywweGEzLDB4YzUsMHg4MywweGM1LDB4ZjAsMHhjNSwweDgzfSB9LAoreyAgMTYsMHgwZjI2LDAsezB4YzgsMHhjNSwweDgyLDB4YzgsMHhmMCwweGEzLDB4YzUsMHg4MywweGM1LDB4ZjAsMHhjNSwweDgzLDB4YzgsMHhjNSwweDgyLDB4Yzh9IH0sCit7ICAgMSwweDBmMzYsMCx7MHgyMn0gfSwKK3sgIDE2LDB4MGYzNywwLHsweGQwLDB4ODMsMHhkMCwweDgyLDB4ZTQsMHg5MywweGYyLDB4MDgsMHg3NCwweDAxLDB4OTMsMHhmMiwweDA4LDB4NzQsMHgwMiwweDkzfSB9LAoreyAgIDksMHgwZjQ3LDAsezB4ZjIsMHgwOCwweDc0LDB4MDMsMHg5MywweGYyLDB4NzQsMHgwNCwweDczfSB9LAoreyAgMTYsMHgwZjUwLDAsezB4YzIsMHhhZiwweGQyLDB4MmMsMHg5MCwweDdmLDB4OTMsMHg3NCwweDMwLDB4ZjAsMHg5MCwweDdmLDB4OWMsMHg3NCwweGJmLDB4ZjB9IH0sCit7ICAxNiwweDBmNjAsMCx7MHg5MCwweDdmLDB4OTYsMHhlMCwweDU0LDB4MzAsMHhmMCwweDkwLDB4N2YsMHg5NCwweDc0LDB4MzAsMHhmMCwweDkwLDB4N2YsMHg5ZH0gfSwKK3sgIDE2LDB4MGY3MCwwLHsweDc0LDB4Y2YsMHhmMCwweDkwLDB4N2YsMHg5NywweDc0LDB4YTAsMHhmMCwweDkwLDB4N2YsMHg5NSwweDc0LDB4Y2MsMHhmMCwweGU0fSB9LAoreyAgMTYsMHgwZjgwLDAsezB4OTAsMHg3ZiwweDllLDB4ZjAsMHhjMiwweDJkLDB4YzIsMHgyYSwweGMyLDB4MmIsMHhjMiwweDJlLDB4OTAsMHg3OSwweDc0LDB4MDR9IH0sCit7ICAxNiwweDBmOTAsMCx7MHhmMCwweDEyLDB4MmUsMHg5NCwweDEyLDB4NDksMHhlMiwweDEyLDB4NGIsMHhlNiwweDEyLDB4MzIsMHgwZCwweDEyLDB4M2IsMHgwZH0gfSwKK3sgIDE2LDB4MGZhMCwwLHsweDEyLDB4NDEsMHhmZCwweDEyLDB4M2UsMHg5OSwweGU1LDB4MWYsMHg3MCwweDE4LDB4NzUsMHgxZiwweDAxLDB4MTIsMHgxNywweGZmfSB9LAoreyAgMTYsMHgwZmIwLDAsezB4MTIsMHgyZiwweGZmLDB4MTIsMHg0OSwweGM4LDB4MTIsMHg0YiwweGQ4LDB4MTIsMHg0YiwweGRhLDB4MTIsMHg0OSwweDZmLDB4MTJ9IH0sCit7ICAxNiwweDBmYzAsMCx7MHgxYiwweDQwLDB4MTIsMHgzOSwweDhkLDB4OTAsMHg3ZiwweGFmLDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4YWUsMHhlMH0gfSwKK3sgIDE2LDB4MGZkMCwwLHsweDQ0LDB4MWYsMHhmMCwweDkwLDB4N2YsMHhhYywweDc0LDB4ZmYsMHhmMCwweDkwLDB4N2YsMHhhZCwweGYwLDB4OTAsMHg3ZiwweGRlfSB9LAoreyAgMTYsMHgwZmUwLDAsezB4ZjAsMHg5MCwweDdmLDB4ZGYsMHhmMCwweDkwLDB4N2YsMHhhYiwweGYwLDB4OTAsMHg3ZiwweGE5LDB4ZjAsMHg5MCwweDdmLDB4YWF9IH0sCit7ICAxNiwweDBmZjAsMCx7MHhmMCwweDUzLDB4OTEsMHhlZiwweDQzLDB4ZDgsMHgyMCwweGQyLDB4ZTgsMHg0MywweGQ4LDB4MjAsMHg0MywweGE4LDB4ODAsMHgyMn0gfSwKK3sgIDE2LDB4MTAwMCwwLHsweDkwLDB4NzksMHg2MywweGUwLDB4MTQsMHg2MCwweDQ0LDB4MTQsMHg3MCwweDAyLDB4MjEsMHhkMCwweDE0LDB4NzAsMHgwMiwweDQxfSB9LAoreyAgMTYsMHgxMDEwLDAsezB4ZDksMHgxNCwweDcwLDB4MDIsMHg2MSwweGQ3LDB4MjQsMHgwNCwweDYwLDB4MDIsMHg4MSwweDU2LDB4ZTQsMHg5MCwweDc5LDB4Nzh9IH0sCit7ICAxNiwweDEwMjAsMCx7MHhmMCwweDkwLDB4NzksMHg3YiwweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHg0NCwweDAxLDB4ZjAsMHg1NCwweGZkLDB4ZjAsMHg5MH0gfSwKK3sgIDE2LDB4MTAzMCwwLHsweDc5LDB4N2IsMHhmMCwweGU0LDB4OTAsMHg3OSwweDg4LDB4ZjAsMHhhMiwweGFmLDB4MzMsMHhmNSwweDEyLDB4YzIsMHhhZiwweDEyfSB9LAoreyAgMTYsMHgxMDQwLDAsezB4MGIsMHhhMiwweGU1LDB4MTIsMHg3MCwweDAyLDB4ODEsMHg1NiwweGQyLDB4YWYsMHgyMiwweDkwLDB4NzksMHgyZCwweGUwLDB4NjR9IH0sCit7ICAxNiwweDEwNTAsMCx7MHgwMSwweDcwLDB4NzksMHg5MCwweDdmLDB4ZjIsMHhmMCwweDkwLDB4N2YsMHhmMywweDc0LDB4MzAsMHhmMCwweDkwLDB4N2YsMHhmZn0gfSwKK3sgIDE2LDB4MTA2MCwwLHsweDc0LDB4ZmMsMHhmMCwweGU0LDB4OTAsMHg3OSwweDc4LDB4ZjAsMHg5MCwweDc5LDB4N2IsMHhlMCwweDkwLDB4NzksMHg3OSwweGYwfSB9LAoreyAgMTYsMHgxMDcwLDAsezB4NDQsMHgwMSwweGYwLDB4NDQsMHgwMiwweGYwLDB4OTAsMHg3OSwweDdiLDB4ZjAsMHhhMiwweGFmLDB4ZTQsMHgzMywweGY1LDB4MTJ9IH0sCit7ICAxNiwweDEwODAsMCx7MHhjMiwweGFmLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OSwweDc4LDB4NzQsMHgwMiwweGYwLDB4OTAsMHg3OSwweDg0LDB4ZTAsMHg5MH0gfSwKK3sgIDE2LDB4MTA5MCwwLHsweDc5LDB4NzksMHhmMCwweDkwLDB4NzksMHg3ZiwweGUwLDB4YjQsMHgwMSwweDA5LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg1NCwweGZlfSB9LAoreyAgMTYsMHgxMGEwLDAsezB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4NzksMHhlMCwweDU0LDB4ZmR9IH0sCit7ICAxNiwweDEwYjAsMCx7MHhmMCwweDU0LDB4ZmIsMHhmMCwweDkwLDB4NzksMHg4NCwweGYwLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OSwweDgyLDB4NzQsMHgwNH0gfSwKK3sgIDE2LDB4MTBjMCwwLHsweGYwLDB4OTAsMHg3OSwweDg4LDB4MTQsMHhmMCwweGU1LDB4MTIsMHg2MCwweDAyLDB4ZDIsMHhhZiwweDkwLDB4NzksMHgyZCwweGUwfSB9LAoreyAgMTYsMHgxMGQwLDAsezB4NjQsMHgwMiwweDcwLDB4NzksMHg5MCwweDdmLDB4ZjIsMHhmMCwweDkwLDB4N2YsMHhmMywweDc0LDB4MzQsMHhmMCwweDkwLDB4N2Z9IH0sCit7ICAxNiwweDEwZTAsMCx7MHhmZiwweDc0LDB4ZmMsMHhmMCwweGU0LDB4OTAsMHg3OSwweDc4LDB4ZjAsMHg5MCwweDc5LDB4N2IsMHhlMCwweDkwLDB4NzksMHg3OX0gfSwKK3sgIDE2LDB4MTBmMCwwLHsweGYwLDB4NDQsMHgwMSwweGYwLDB4NDQsMHgwMiwweGYwLDB4OTAsMHg3OSwweDdiLDB4ZjAsMHhhMiwweGFmLDB4ZTQsMHgzMywweGY1fSB9LAoreyAgMTYsMHgxMTAwLDAsezB4MTIsMHhjMiwweGFmLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OSwweDc4LDB4NzQsMHgwMiwweGYwLDB4OTAsMHg3OSwweDg0LDB4ZTB9IH0sCit7ICAxNiwweDExMTAsMCx7MHg5MCwweDc5LDB4NzksMHhmMCwweDkwLDB4NzksMHg3ZiwweGUwLDB4YjQsMHgwMSwweDA5LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg1NH0gfSwKK3sgIDE2LDB4MTEyMCwwLHsweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4NzksMHhlMCwweDQ0fSB9LAoreyAgMTYsMHgxMTMwLDAsezB4MDIsMHhmMCwweDU0LDB4ZmIsMHhmMCwweDkwLDB4NzksMHg4NCwweGYwLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OSwweDgyLDB4NzR9IH0sCit7ICAxNiwweDExNDAsMCx7MHgwNCwweGYwLDB4OTAsMHg3OSwweDg4LDB4MTQsMHhmMCwweGU1LDB4MTIsMHg2MCwweDAyLDB4ZDIsMHhhZiwweDkwLDB4NzksMHgyZH0gfSwKK3sgIDE2LDB4MTE1MCwwLHsweGUwLDB4NjQsMHgwMywweDYwLDB4MDIsMHg4MSwweDU2LDB4OTAsMHg3ZiwweGYyLDB4ZjAsMHg5MCwweDdmLDB4ZjMsMHg3NCwweDY0fSB9LAoreyAgMTYsMHgxMTYwLDAsezB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHhlNCwweDkwLDB4NzksMHg3OCwweGYwLDB4OTAsMHg3OSwweDdiLDB4ZTB9IH0sCit7ICAxNiwweDExNzAsMCx7MHg5MCwweDc5LDB4NzksMHhmMCwweDQ0LDB4MDEsMHhmMCwweDQ0LDB4MDIsMHhmMCwweDkwLDB4NzksMHg3YiwweGYwLDB4YTIsMHhhZn0gfSwKK3sgIDE2LDB4MTE4MCwwLHsweGU0LDB4MzMsMHhmNSwweDEyLDB4YzIsMHhhZiwweDEyLDB4MGIsMHhhMiwweDkwLDB4NzksMHg3OCwweDc0LDB4MDIsMHhmMCwweDkwfSB9LAoreyAgMTYsMHgxMTkwLDAsezB4NzksMHg4NCwweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHg5MCwweDc5LDB4N2YsMHhlMCwweGI0LDB4MDEsMHgwOSwweDkwLDB4Nzl9IH0sCit7ICAxNiwweDExYTAsMCx7MHg3OSwweGUwLDB4NTQsMHhmZSwweGYwLDB4ODAsMHgwNywweDkwLDB4NzksMHg3OSwweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3OX0gfSwKK3sgIDE2LDB4MTFiMCwwLHsweDc5LDB4ZTAsMHg0NCwweDA0LDB4ZjAsMHg5MCwweDc5LDB4ODQsMHhmMCwweDEyLDB4MGIsMHhhMiwweDkwLDB4NzksMHg4MiwweDc0fSB9LAoreyAgMTYsMHgxMWMwLDAsezB4MDQsMHhmMCwweDkwLDB4NzksMHg4OCwweDE0LDB4ZjAsMHhlNSwweDEyLDB4NzAsMHgwMiwweDgxLDB4NTYsMHhkMiwweGFmLDB4MjJ9IH0sCit7ICAxNiwweDExZDAsMCx7MHg5MCwweDc5LDB4MmQsMHhlMCwweDY0LDB4MDEsMHg3MCwweDdhLDB4OTAsMHg3ZiwweGYyLDB4ZjAsMHg5MCwweDdmLDB4ZjMsMHg3NH0gfSwKK3sgIDE2LDB4MTFlMCwwLHsweDg4LDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHhlNCwweDkwLDB4NzksMHg3OCwweGYwLDB4OTAsMHg3OSwweDdifSB9LAoreyAgMTYsMHgxMWYwLDAsezB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweDQ0LDB4MDEsMHhmMCwweDU0LDB4ZmQsMHhmMCwweDkwLDB4NzksMHg3YiwweGYwLDB4YTJ9IH0sCit7ICAxNiwweDEyMDAsMCx7MHhhZiwweGU0LDB4MzMsMHhmNSwweDEyLDB4YzIsMHhhZiwweDEyLDB4MGIsMHhhMiwweDkwLDB4NzksMHg3OCwweDc0LDB4MDIsMHhmMH0gfSwKK3sgIDE2LDB4MTIxMCwwLHsweDkwLDB4NzksMHg4NCwweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHg5MCwweDc5LDB4N2YsMHhlMCwweGI0LDB4MDEsMHgwOSwweDkwfSB9LAoreyAgMTYsMHgxMjIwLDAsezB4NzksMHg3OSwweGUwLDB4NTQsMHhmZSwweGYwLDB4ODAsMHgwNywweDkwLDB4NzksMHg3OSwweGUwLDB4NDQsMHgwMSwweGYwLDB4OTB9IH0sCit7ICAxNiwweDEyMzAsMCx7MHg3OSwweDc5LDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHg1NCwweGZiLDB4ZjAsMHg5MCwweDc5LDB4ODQsMHhmMCwweDEyLDB4MGIsMHhhMn0gfSwKK3sgIDE2LDB4MTI0MCwwLHsweDkwLDB4NzksMHg4MiwweDc0LDB4MGMsMHhmMCwweDkwLDB4NzksMHg4OCwweDc0LDB4MDEsMHhmMCwweGU1LDB4MTIsMHg2MCwweDAyfSB9LAoreyAgMTYsMHgxMjUwLDAsezB4ZDIsMHhhZiwweDkwLDB4NzksMHgyZCwweGUwLDB4NjQsMHgwMiwweDYwLDB4MDIsMHg4MSwweDU2LDB4OTAsMHg3ZiwweGYyLDB4ZjB9IH0sCit7ICAxNiwweDEyNjAsMCx7MHg5MCwweDdmLDB4ZjMsMHg3NCwweDk0LDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHhlNCwweDkwLDB4NzksMHg3OH0gfSwKK3sgIDE2LDB4MTI3MCwwLHsweGYwLDB4OTAsMHg3OSwweDdiLDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweDQ0LDB4MDEsMHhmMCwweDU0LDB4ZmQsMHhmMCwweDkwfSB9LAoreyAgMTYsMHgxMjgwLDAsezB4NzksMHg3YiwweGYwLDB4YTIsMHhhZiwweGU0LDB4MzMsMHhmNSwweDEyLDB4YzIsMHhhZiwweDEyLDB4MGIsMHhhMiwweDkwLDB4Nzl9IH0sCit7ICAxNiwweDEyOTAsMCx7MHg3OCwweDc0LDB4MDIsMHhmMCwweDkwLDB4NzksMHg4NCwweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHg5MCwweDc5LDB4N2YsMHhlMH0gfSwKK3sgIDE2LDB4MTJhMCwwLHsweGI0LDB4MDEsMHgwOSwweDkwLDB4NzksMHg3OSwweGUwLDB4NTQsMHhmZSwweGYwLDB4ODAsMHgwNywweDkwLDB4NzksMHg3OSwweGUwfSB9LAoreyAgMTYsMHgxMmIwLDAsezB4NDQsMHgwMSwweGYwLDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg0NCwweDAyLDB4ZjAsMHg1NCwweGZiLDB4ZjAsMHg5MCwweDc5LDB4ODR9IH0sCit7ICAxNiwweDEyYzAsMCx7MHhmMCwweDEyLDB4MGIsMHhhMiwweDkwLDB4NzksMHg4MiwweDc0LDB4MGMsMHhmMCwweDkwLDB4NzksMHg4OCwweDc0LDB4MDEsMHhmMH0gfSwKK3sgIDE2LDB4MTJkMCwwLHsweGU1LDB4MTIsMHg3MCwweDAyLDB4ODEsMHg1NiwweGQyLDB4YWYsMHgyMiwweDkwLDB4NzksMHgyZCwweGUwLDB4NjQsMHgwMSwweDcwfSB9LAoreyAgMTYsMHgxMmUwLDAsezB4NzcsMHg5MCwweDdmLDB4ZjIsMHhmMCwweDkwLDB4N2YsMHhmMywweDc0LDB4Y2MsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmN9IH0sCit7ICAxNiwweDEyZjAsMCx7MHhmMCwweGU0LDB4OTAsMHg3OSwweDc4LDB4ZjAsMHg5MCwweDc5LDB4N2IsMHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4NTQsMHhmY30gfSwKK3sgIDE2LDB4MTMwMCwwLHsweGYwLDB4OTAsMHg3OSwweDdiLDB4ZjAsMHhhMiwweGFmLDB4ZTQsMHgzMywweGY1LDB4MTIsMHhjMiwweGFmLDB4MTIsMHgwYiwweGEyfSB9LAoreyAgMTYsMHgxMzEwLDAsezB4OTAsMHg3OSwweDc4LDB4NzQsMHgwMiwweGYwLDB4OTAsMHg3OSwweDg0LDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweDkwLDB4Nzl9IH0sCit7ICAxNiwweDEzMjAsMCx7MHg3ZiwweGUwLDB4YjQsMHgwMSwweDA5LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3OX0gfSwKK3sgIDE2LDB4MTMzMCwwLHsweDc5LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4NzksMHhlMCwweDU0LDB4ZmQsMHhmMCwweDU0LDB4ZmIsMHhmMCwweDkwfSB9LAoreyAgMTYsMHgxMzQwLDAsezB4NzksMHg4NCwweGYwLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OSwweDgyLDB4NzQsMHgxMiwweGYwLDB4OTAsMHg3OSwweDg4LDB4NzR9IH0sCit7ICAxNiwweDEzNTAsMCx7MHgwMiwweGYwLDB4ZTUsMHgxMiwweDYwLDB4MDIsMHhkMiwweGFmLDB4OTAsMHg3OSwweDJkLDB4ZTAsMHg2NCwweDAyLDB4NzAsMHg3N30gfSwKK3sgIDE2LDB4MTM2MCwwLHsweDkwLDB4N2YsMHhmMiwweGYwLDB4OTAsMHg3ZiwweGYzLDB4NzQsMHhlMCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwfSB9LAoreyAgMTYsMHgxMzcwLDAsezB4ZTQsMHg5MCwweDc5LDB4NzgsMHhmMCwweDkwLDB4NzksMHg3YiwweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHg1NCwweGZjLDB4ZjB9IH0sCit7ICAxNiwweDEzODAsMCx7MHg5MCwweDc5LDB4N2IsMHhmMCwweGEyLDB4YWYsMHhlNCwweDMzLDB4ZjUsMHgxMiwweGMyLDB4YWYsMHgxMiwweDBiLDB4YTIsMHg5MH0gfSwKK3sgIDE2LDB4MTM5MCwwLHsweDc5LDB4NzgsMHg3NCwweDAyLDB4ZjAsMHg5MCwweDc5LDB4ODQsMHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4OTAsMHg3OSwweDdmfSB9LAoreyAgMTYsMHgxM2EwLDAsezB4ZTAsMHhiNCwweDAxLDB4MDksMHg5MCwweDc5LDB4NzksMHhlMCwweDU0LDB4ZmUsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc5LDB4Nzl9IH0sCit7ICAxNiwweDEzYjAsMCx7MHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg3OSwweGUwLDB4NDQsMHgwMiwweGYwLDB4NTQsMHhmYiwweGYwLDB4OTAsMHg3OX0gfSwKK3sgIDE2LDB4MTNjMCwwLHsweDg0LDB4ZjAsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4ODIsMHg3NCwweDEyLDB4ZjAsMHg5MCwweDc5LDB4ODgsMHg3NCwweDAyfSB9LAoreyAgMTYsMHgxM2QwLDAsezB4ZjAsMHhlNSwweDEyLDB4NjAsMHgwMiwweGQyLDB4YWYsMHg5MCwweDc5LDB4MmQsMHhlMCwweDY0LDB4MDMsMHg3MCwweDc3LDB4OTB9IH0sCit7ICAxNiwweDEzZTAsMCx7MHg3ZiwweGYyLDB4ZjAsMHg5MCwweDdmLDB4ZjMsMHg3NCwweDk0LDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHhlNH0gfSwKK3sgIDE2LDB4MTNmMCwwLHsweDkwLDB4NzksMHg3OCwweGYwLDB4OTAsMHg3OSwweDdiLDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweDU0LDB4ZmUsMHhmMCwweDQ0fSB9LAoreyAgMTYsMHgxNDAwLDAsezB4MDIsMHhmMCwweDkwLDB4NzksMHg3YiwweGYwLDB4YTIsMHhhZiwweGU0LDB4MzMsMHhmNSwweDEyLDB4YzIsMHhhZiwweDEyLDB4MGJ9IH0sCit7ICAxNiwweDE0MTAsMCx7MHhhMiwweDkwLDB4NzksMHg3OCwweDc0LDB4MDIsMHhmMCwweDkwLDB4NzksMHg4NCwweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHg5MH0gfSwKK3sgIDE2LDB4MTQyMCwwLHsweDc5LDB4N2YsMHhlMCwweGI0LDB4MDEsMHgwOSwweDkwLDB4NzksMHg3OSwweGUwLDB4NTQsMHhmZSwweGYwLDB4ODAsMHgwNywweDkwfSB9LAoreyAgMTYsMHgxNDMwLDAsezB4NzksMHg3OSwweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg0NCwweDA0LDB4ZjAsMHg5MCwweDc5LDB4ODR9IH0sCit7ICAxNiwweDE0NDAsMCx7MHhmMCwweDEyLDB4MGIsMHhhMiwweDkwLDB4NzksMHg4MiwweDc0LDB4MDYsMHhmMCwweDkwLDB4NzksMHg4OCwweDc0LDB4MDQsMHhmMH0gfSwKK3sgICA3LDB4MTQ1MCwwLHsweGU1LDB4MTIsMHg2MCwweDAyLDB4ZDIsMHhhZiwweDIyfSB9LAoreyAgMTYsMHgxNDU3LDAsezB4YzIsMHgyOCwweGMyLDB4MjksMHg5MCwweDdmLDB4ZTgsMHhlMCwweDEyLDB4MGUsMHgxYSwweDE0LDB4ODQsMHgwMCwweDE0LDB4ZTB9IH0sCit7ICAxNiwweDE0NjcsMCx7MHgwMSwweDE0LDB4ZjYsMHgwMiwweDE2LDB4N2MsMHgyMSwweDE2LDB4YmUsMHgyMiwweDE1LDB4OTEsMHg4MCwweDE1LDB4ZDEsMHg4MX0gfSwKK3sgIDE2LDB4MTQ3NywwLHsweDE2LDB4MmUsMHg4MiwweDE2LDB4Y2YsMHhhMSwweDE3LDB4MDUsMHhhMiwweDAwLDB4MDAsMHgxNywweDBhLDB4OTAsMHg3ZiwweGU5fSB9LAoreyAgMTYsMHgxNDg3LDAsezB4ZTAsMHgxNCwweDYwLDB4MTEsMHgyNCwweGZlLDB4NjAsMHgyOCwweDI0LDB4ZmUsMHg2MCwweDNiLDB4MjQsMHhmYywweDcwLDB4NDB9IH0sCit7ICAxNiwweDE0OTcsMCx7MHgxMiwweDRhLDB4MmEsMHhlMSwweDE2LDB4MTIsMHg0YiwweGUwLDB4NDAsMHgwMiwweGUxLDB4MTYsMHg5MCwweDdmLDB4ZWEsMHhlMH0gfSwKK3sgIDE2LDB4MTRhNywwLHsweGI0LDB4MDEsMHgwNCwweGMyLDB4MmEsMHhlMSwweDE2LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhlMSwweDE2fSB9LAoreyAgMTYsMHgxNGI3LDAsezB4MTIsMHg0YiwweGUyLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhiNCwweDAxLDB4MDQsMHhkMiwweDJhLDB4ZTEsMHgxNiwweDkwLDB4N2Z9IH0sCit7ICAxNiwweDE0YzcsMCx7MHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4ZTEsMHgxNiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4ZTEsMHgxNn0gfSwKK3sgIDE2LDB4MTRkNywwLHsweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4ZTEsMHgxNiwweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHhmNSwweDcwfSB9LAoreyAgMTYsMHgxNGU3LDAsezB4MDUsMHgxMiwweDQ3LDB4OWMsMHhlMSwweDE2LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhlMSwweDE2LDB4OTB9IH0sCit7ICAxNiwweDE0ZjcsMCx7MHg3ZiwweGU5LDB4ZTAsMHgyNCwweGZkLDB4NjAsMHg1NCwweDI0LDB4MDIsMHg2MCwweDAyLDB4YTEsMHg4OCwweDEyLDB4NGIsMHhlMH0gfSwKK3sgIDE2LDB4MTUwNywwLHsweDQwLDB4MDIsMHhlMSwweDE2LDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHg3MCwweDM4LDB4OTAsMHg3ZiwweGVjLDB4ZTAsMHhmNCwweDU0fSB9LAoreyAgMTYsMHgxNTE3LDAsezB4ODAsMHhmZiwweGM0LDB4NTQsMHgwZiwweGZmLDB4ZTAsMHg1NCwweDA3LDB4MmYsMHgyNSwweGUwLDB4MjQsMHhiNCwweGY1LDB4ODJ9IH0sCit7ICAxNiwweDE1MjcsMCx7MHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDkwLDB4N2YsMHhlYywweGUwLDB4NTQsMHg4MCwweGZmLDB4MTMsMHgxM30gfSwKK3sgIDE2LDB4MTUzNywwLHsweDEzLDB4NTQsMHgxZiwweGZmLDB4ZTAsMHg1NCwweDA3LDB4MmYsMHg5MCwweDdmLDB4ZDcsMHhmMCwweGUwLDB4NDQsMHgyMCwweGYwfSB9LAoreyAgMTYsMHgxNTQ3LDAsezB4ZTEsMHgxNiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4ZTEsMHgxNiwweDEyLDB4NGIsMHhlMiwweDQwLDB4MDJ9IH0sCit7ICAxNiwweDE1NTcsMCx7MHhlMSwweDE2LDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHg3MCwweDIwLDB4OTAsMHg3ZiwweGVjLDB4ZTAsMHhmNCwweDU0LDB4ODAsMHhmZn0gfSwKK3sgIDE2LDB4MTU2NywwLHsweGM0LDB4NTQsMHgwZiwweGZmLDB4ZTAsMHg1NCwweDA3LDB4MmYsMHgyNSwweGUwLDB4MjQsMHhiNCwweGY1LDB4ODIsMHhlNCwweDM0fSB9LAoreyAgMTYsMHgxNTc3LDAsezB4N2YsMHhmNSwweDgzLDB4NzQsMHgwMSwweGYwLDB4ZTEsMHgxNiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4ZTF9IH0sCit7ICAxNiwweDE1ODcsMCx7MHgxNiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4ZTEsMHgxNiwweDkwLDB4N2YsMHhlOSwweGUwLDB4NjAsMHgxMn0gfSwKK3sgIDE2LDB4MTU5NywwLHsweDI0LDB4ZjgsMHg2MCwweDA5LDB4MjQsMHgwMiwweDcwLDB4MjksMHgxMiwweDE3LDB4MWUsMHhlMSwweDE2LDB4MTIsMHg0YiwweGEwfSB9LAoreyAgMTYsMHgxNWE3LDAsezB4ZTEsMHgxNiwweDEyLDB4NGIsMHhkZSwweGEyLDB4MmEsMHhlNCwweDMzLDB4ZmYsMHgyNSwweGUwLDB4ZmYsMHhhMiwweDJiLDB4ZTR9IH0sCit7ICAxNiwweDE1YjcsMCx7MHgzMywweDRmLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAyLDB4ZjAsMHhlMX0gfSwKK3sgIDE2LDB4MTVjNywwLHsweDE2LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhlMSwweDE2LDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHg2MCwweDM3fSB9LAoreyAgMTYsMHgxNWQ3LDAsezB4MjQsMHhmNiwweDYwLDB4MmUsMHgyNCwweDA0LDB4NzAsMHg0MSwweDkwLDB4N2YsMHhlYiwweGUwLDB4MjQsMHhkZSwweDYwLDB4MGV9IH0sCit7ICAxNiwweDE1ZTcsMCx7MHgwNCwweDcwLDB4MTYsMHhkMiwweDI5LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhlMSwweDE2LDB4ZDIsMHgyOX0gfSwKK3sgIDE2LDB4MTVmNywwLHsweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4ZTEsMHgxNiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfSB9LAoreyAgMTYsMHgxNjA3LDAsezB4ZTEsMHgxNiwweDEyLDB4NDQsMHg2MywweGUxLDB4MTYsMHgxMiwweDRiLDB4ZGUsMHhlNCwweDkwLDB4N2YsMHgwMCwweGYwLDB4YTN9IH0sCit7ICAxNiwweDE2MTcsMCx7MHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDIsMHhmMCwweGUxLDB4MTYsMHgyMCwweDI5LDB4MDcsMHg5MCwweDdmLDB4YjQsMHhlMH0gfSwKK3sgIDE2LDB4MTYyNywwLHsweDQ0LDB4MDEsMHhmMCwweGMyLDB4MjksMHhlMSwweDE2LDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweGY0LDB4NjAsMHgzNCwweDI0fSB9LAoreyAgMTYsMHgxNjM3LDAsezB4MGMsMHg3MCwweDM5LDB4MTIsMHg0YiwweGRlLDB4OTAsMHg3ZiwweGVjLDB4ZTAsMHhmNCwweDU0LDB4ODAsMHhmZiwweGM0LDB4NTR9IH0sCit7ICAxNiwweDE2NDcsMCx7MHgwZiwweGZmLDB4ZTAsMHg1NCwweDA3LDB4MmYsMHgyNSwweGUwLDB4MjQsMHhiNCwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNX0gfSwKK3sgIDE2LDB4MTY1NywwLHsweDgzLDB4ZTAsMHg1NCwweGZkLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAyfSB9LAoreyAgMTYsMHgxNjY3LDAsezB4ZjAsMHhlMSwweDE2LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhlMSwweDE2LDB4OTAsMHg3ZiwweGI0LDB4ZTB9IH0sCit7ICAxNiwweDE2NzcsMCx7MHg0NCwweDAxLDB4ZjAsMHhlMSwweDE2LDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweGY2LDB4NjAsMHgxMiwweDE0LDB4NjAsMHgxYX0gfSwKK3sgIDE2LDB4MTY4NywwLHsweDI0LDB4MDIsMHg3MCwweDFkLDB4ZDIsMHgyOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4ODAsMHgxMiwweGQyfSB9LAoreyAgMTYsMHgxNjk3LDAsezB4MjgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDgwLDB4MDcsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDF9IH0sCit7ICAxNiwweDE2YTcsMCx7MHhmMCwweDIwLDB4MjgsMHgwZiwweDkwLDB4NzksMHg4NSwweDc0LDB4MDEsMHhmMCwweDEyLDB4NDksMHg2ZiwweDkwLDB4N2YsMHhjNX0gfSwKK3sgIDE2LDB4MTZiNywwLHsweDc0LDB4MDIsMHhmMCwweGMyLDB4MjgsMHg4MCwweDU4LDB4OTAsMHg3OSwweDg2LDB4NzQsMHgwMSwweGYwLDB4MTIsMHg0OSwweDZmfSB9LAoreyAgMTYsMHgxNmM3LDAsezB4OTAsMHg3ZiwweGM1LDB4NzQsMHgwMiwweGYwLDB4ODAsMHg0NywweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHhmZSwweDYwLDB4MTJ9IH0sCit7ICAxNiwweDE2ZDcsMCx7MHgxNCwweDYwLDB4MWEsMHgyNCwweDAyLDB4NzAsMHgxZCwweGQyLDB4MjgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMH0gfSwKK3sgIDE2LDB4MTZlNywwLHsweDgwLDB4MTIsMHhkMiwweDI4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3ZiwweGI0fSB9LAoreyAgMTYsMHgxNmY3LDAsezB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMCwweDI4LDB4MDMsMHgxMiwweDFhLDB4N2IsMHhjMiwweDI4LDB4ODAsMHgxMSwweDEyLDB4MmN9IH0sCit7ICAxNiwweDE3MDcsMCx7MHgyYiwweDgwLDB4MGMsMHgxMiwweDRiLDB4ZTQsMHg1MCwweDA3LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MH0gfSwKK3sgICA3LDB4MTcxNywwLHsweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDIsMHhmMCwweDIyfSB9LAoreyAgMTYsMHgxNzFlLDAsezB4MTIsMHg0YiwweGRjLDB4NDAsMHgwMiwweGUxLDB4ZTMsMHg5MCwweDdmLDB4ZWIsMHhlMCwweDI0LDB4ZmUsMHg2MCwweDFlLDB4MTR9IH0sCit7ICAxNiwweDE3MmUsMCx7MHg2MCwweDQ2LDB4MTQsMHg2MCwweDZlLDB4MTQsMHg3MCwweDAyLDB4ZTEsMHhkNCwweDI0LDB4MDQsMHg2MCwweDAyLDB4ZTEsMHhkY30gfSwKK3sgIDE2LDB4MTczZSwwLHsweDc0LDB4MDUsMHg5MCwweDdmLDB4ZDQsMHhmMCwweDc0LDB4MDAsMHg5MCwweDdmLDB4ZDUsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGVhfSB9LAoreyAgMTYsMHgxNzRlLDAsezB4ZTAsMHhmZiwweDEyLDB4M2YsMHhhMiwweDhiLDB4MzMsMHg4YSwweDM0LDB4ODksMHgzNSwweGVhLDB4NDksMHg2MCwweDExLDB4Y2V9IH0sCit7ICAxNiwweDE3NWUsMCx7MHhlYSwweGNlLDB4ZWUsMHg5MCwweDdmLDB4ZDQsMHhmMCwweGNmLDB4ZTksMHhjZiwweGVmLDB4OTAsMHg3ZiwweGQ1LDB4ZjAsMHgyMn0gfSwKK3sgIDE2LDB4MTc2ZSwwLHsweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGZmLDB4MTIsMHg0OCwweDAwfSB9LAoreyAgMTYsMHgxNzdlLDAsezB4OGIsMHgzMywweDhhLDB4MzQsMHg4OSwweDM1LDB4ZWEsMHg0OSwweDYwLDB4MTEsMHhjZSwweGVhLDB4Y2UsMHhlZSwweDkwLDB4N2Z9IH0sCit7ICAxNiwweDE3OGUsMCx7MHhkNCwweGYwLDB4Y2YsMHhlOSwweGNmLDB4ZWYsMHg5MCwweDdmLDB4ZDUsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NH0gfSwKK3sgIDE2LDB4MTc5ZSwwLHsweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmYsMHg5MCwweDdlLDB4YzAsMHhlMCwweGZkLDB4YTMsMHhlMCwweGZifSB9LAoreyAgMTYsMHgxN2FlLDAsezB4MTIsMHg0NCwweGQyLDB4OGIsMHgzMywweDhhLDB4MzQsMHg4OSwweDM1LDB4ZWEsMHg0OSwweDYwLDB4MTEsMHhjZSwweGVhLDB4Y2V9IH0sCit7ICAxNiwweDE3YmUsMCx7MHhlZSwweDkwLDB4N2YsMHhkNCwweGYwLDB4Y2YsMHhlOSwweGNmLDB4ZWYsMHg5MCwweDdmLDB4ZDUsMHhmMCwweDIyLDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4MTdjZSwwLHsweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmfSB9LAoreyAgIDUsMHgxN2RlLDAsezB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMH0gfSwKK3sgICAxLDB4MTdlMywwLHsweDIyfSB9LAoreyAgMTYsMHgxN2U0LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4OTAsMHg3ZiwweGM0LDB4ZTQsMHhmMCwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2Z9IH0sCit7ICAxMSwweDE3ZjQsMCx7MHhhYiwweDc0LDB4MDQsMHhmMCwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgIDEsMHgxN2ZmLDAsezB4MjJ9IH0sCit7ICAxNiwweDE4MDAsMCx7MHhlNCwweDkwLDB4NzgsMHgxNSwweGYwLDB4N2IsMHgwMSwweDkwLDB4NzgsMHgxMiwweDA0LDB4ZjAsMHhhMywweDc0LDB4NzgsMHhmMH0gfSwKK3sgIDE2LDB4MTgxMCwwLHsweGEzLDB4NzQsMHg1OCwweGYwLDB4OTAsMHg3OCwweDEyLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwfSB9LAoreyAgMTYsMHgxODIwLDAsezB4MDAsMHgwMSwweDEyLDB4MGMsMHg1ZCwweGZmLDB4OTAsMHg3OSwweDlhLDB4ZTAsMHg2ZiwweDYwLDB4MTgsMHg5MCwweDc4LDB4MTV9IH0sCit7ICAxNiwweDE4MzAsMCx7MHhlMCwweGMzLDB4OTQsMHgwNiwweDUwLDB4MGYsMHhlMCwweDA0LDB4ZjAsMHg5MCwweDc4LDB4MTMsMHhlNCwweDc1LDB4ZjAsMHgwZn0gfSwKK3sgIDE2LDB4MTg0MCwwLHsweDEyLDB4MGMsMHhmNCwweDgwLDB4Y2YsMHg5MCwweDc4LDB4MTUsMHhlMCwweGI0LDB4MDYsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwfSB9LAoreyAgMTYsMHgxODUwLDAsezB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDc4LDB4MTIsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4MTJ9IH0sCit7ICAxNiwweDE4NjAsMCx7MHgwYywweDQ0LDB4ZmYsMHgyNCwweGJmLDB4NzAsMHgwMiwweDQxLDB4N2EsMHgyNCwweGUwLDB4NzAsMHgwMiwweDQxLDB4NGMsMHgyNH0gfSwKK3sgIDE2LDB4MTg3MCwwLHsweDIxLDB4NjAsMHgwMiwweDQxLDB4NzMsMHg5MCwweDc5LDB4OTcsMHhlMCwweDI0LDB4ZmUsMHg3MCwweDAyLDB4MjEsMHg5YSwweDE0fSB9LAoreyAgMTYsMHgxODgwLDAsezB4NzAsMHgwMiwweDIxLDB4ZWYsMHgyNCwweDAyLDB4NjAsMHgwMiwweDQxLDB4NDQsMHg5MCwweDc5LDB4MmQsMHhlMCwweGEzLDB4ZjB9IH0sCit7ICAxNiwweDE4OTAsMCx7MHg5MCwweDc5LDB4MjMsMHhlMCwweGZmLDB4ZTQsMHhmYywweGZkLDB4ZmUsMHhmYiwweGZhLDB4NzksMHgwMSwweGY4LDB4MTIsMHgwZH0gfSwKK3sgIDE2LDB4MThhMCwwLHsweDQyLDB4YzgsMHhlYywweGM4LDB4YzksMHhlZCwweGM5LDB4Y2EsMHhlZSwweGNhLDB4Y2IsMHhlZiwweGNiLDB4OTAsMHg3OSwweDIyfSB9LAoreyAgMTYsMHgxOGIwLDAsezB4ZTAsMHhmZSwweGU0LDB4ZmMsMHhmZCwweDJiLDB4ZmIsMHhlYSwweDNlLDB4ZmEsMHhlZCwweDM5LDB4ZjksMHhlYywweDM4LDB4Zjh9IH0sCit7ICAxNiwweDE4YzAsMCx7MHg5MCwweDc5LDB4MjEsMHhlMCwweGZmLDB4ZTQsMHhmZSwweGViLDB4MmYsMHhmZiwweGVlLDB4M2EsMHhmZSwweGVkLDB4MzksMHhmZH0gfSwKK3sgIDE2LDB4MThkMCwwLHsweGVjLDB4MzgsMHhmYywweDkwLDB4NzgsMHgxMiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwfSB9LAoreyAgMTYsMHgxOGUwLDAsezB4MDIsMHgxMiwweDBkLDB4ZDIsMHg5MCwweDAwLDB4MDIsMHgxMiwweDBkLDB4YTIsMHg3YiwweDQ0LDB4N2EsMHhhYywweDc5LDB4MDB9IH0sCit7ICAxNiwweDE4ZjAsMCx7MHg3OCwweDAwLDB4YzMsMHgxMiwweDBkLDB4OTEsMHg3MCwweDA1LDB4OTAsMHg3OSwweDJkLDB4MDQsMHhmMCwweDkwLDB4NzgsMHgxMn0gfSwKK3sgIDE2LDB4MTkwMCwwLHsweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDIsMHgxMiwweDBkLDB4YTIsMHg3YiwweDgwfSB9LAoreyAgMTYsMHgxOTEwLDAsezB4N2EsMHhiYiwweDc5LDB4MDAsMHg3OCwweDAwLDB4YzMsMHgxMiwweDBkLDB4OTEsMHg3MCwweDA2LDB4OTAsMHg3OSwweDJkLDB4NzR9IH0sCit7ICAxNiwweDE5MjAsMCx7MHgwMiwweGYwLDB4OTAsMHg3OCwweDEyLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMn0gfSwKK3sgIDE2LDB4MTkzMCwwLHsweDEyLDB4MGQsMHhhMiwweDdiLDB4MDAsMHg3YSwweDc3LDB4NzksMHgwMSwweDc4LDB4MDAsMHhjMywweDEyLDB4MGQsMHg5MSwweDcwfSB9LAoreyAgMTYsMHgxOTQwLDAsezB4MDYsMHg5MCwweDc5LDB4MmQsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDc5LDB4MmQsMHhlMCwweGZmLDB4YjQsMHgwMSwweDA5LDB4NzV9IH0sCit7ICAxNiwweDE5NTAsMCx7MHgwYywweDY3LDB4NzUsMHgwZCwweDA2LDB4NzUsMHgwZSwweDBiLDB4ZWYsMHhiNCwweDAyLDB4MDgsMHhlNCwweGY1LDB4MGMsMHhmNX0gfSwKK3sgIDE2LDB4MTk2MCwwLHsweDBkLDB4NzUsMHgwZSwweDBjLDB4ZWYsMHhiNCwweDAzLDB4MDgsMHhlNCwweGY1LDB4MGMsMHhmNSwweDBkLDB4NzUsMHgwZSwweDE4fSB9LAoreyAgMTYsMHgxOTcwLDAsezB4ZWYsMHhiNCwweDAzLDB4MGQsMHg5MCwweDc5LDB4MmUsMHhlMCwweDY0LDB4MDMsMHg2MCwweDA1LDB4ZDIsMHgyZiwweDEyLDB4M2R9IH0sCit7ICAxNiwweDE5ODAsMCx7MHg3OSwweDkwLDB4NzksMHgyZCwweGUwLDB4NjQsMHgwMywweDYwLDB4MGEsMHhhMywweGUwLDB4YjQsMHgwMywweDA1LDB4YzIsMHgyZn0gfSwKK3sgIDE2LDB4MTk5MCwwLHsweDEyLDB4M2QsMHg3OSwweDEyLDB4MTAsMHgwMCwweDEyLDB4MjgsMHgwMSwweDIyLDB4OTAsMHg3OSwweDIzLDB4ZTAsMHhmZiwweGU0fSB9LAoreyAgMTYsMHgxOWEwLDAsezB4ZmMsMHhmZCwweGZlLDB4ZmIsMHhmYSwweDc5LDB4MDEsMHhmOCwweDEyLDB4MGQsMHg0MiwweGM4LDB4ZWMsMHhjOCwweGM5LDB4ZWR9IH0sCit7ICAxNiwweDE5YjAsMCx7MHhjOSwweGNhLDB4ZWUsMHhjYSwweGNiLDB4ZWYsMHhjYiwweDkwLDB4NzksMHgyMiwweGUwLDB4ZmUsMHhlNCwweGZjLDB4ZmQsMHgyYn0gfSwKK3sgIDE2LDB4MTljMCwwLHsweGZiLDB4ZWEsMHgzZSwweGZhLDB4ZWQsMHgzOSwweGY5LDB4ZWMsMHgzOCwweGY4LDB4OTAsMHg3OSwweDIxLDB4ZTAsMHhmZiwweGU0fSB9LAoreyAgMTYsMHgxOWQwLDAsezB4ZmUsMHhlYiwweDJmLDB4ZmYsMHhlZSwweDNhLDB4ZmUsMHhlZCwweDM5LDB4ZmQsMHhlYywweDM4LDB4ZmMsMHg5MCwweDc4LDB4MTJ9IH0sCit7ICAxNiwweDE5ZTAsMCx7MHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDA2LDB4MTIsMHgwZCwweGQyLDB4MjIsMHg5MH0gfSwKK3sgIDE2LDB4MTlmMCwwLHsweDc5LDB4MjMsMHhlMCwweGZmLDB4ZTQsMHhmYywweGZkLDB4ZmUsMHhmYiwweGZhLDB4NzksMHgwMSwweGY4LDB4MTIsMHgwZCwweDQyfSB9LAoreyAgMTYsMHgxYTAwLDAsezB4YzgsMHhlYywweGM4LDB4YzksMHhlZCwweGM5LDB4Y2EsMHhlZSwweGNhLDB4Y2IsMHhlZiwweGNiLDB4OTAsMHg3OSwweDIyLDB4ZTB9IH0sCit7ICAxNiwweDFhMTAsMCx7MHhmZSwweGU0LDB4ZmMsMHhmZCwweDJiLDB4ZmIsMHhlYSwweDNlLDB4ZmEsMHhlZCwweDM5LDB4ZjksMHhlYywweDM4LDB4ZjgsMHg5MH0gfSwKK3sgIDE2LDB4MWEyMCwwLHsweDc5LDB4MjEsMHhlMCwweGZmLDB4ZTQsMHhmZSwweGViLDB4MmYsMHhmZiwweGVlLDB4M2EsMHhmZSwweGVkLDB4MzksMHhmZCwweGVjfSB9LAoreyAgMTYsMHgxYTMwLDAsezB4MzgsMHhmYywweDkwLDB4NzgsMHgxMiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MGF9IH0sCit7ICAxNiwweDFhNDAsMCx7MHgxMiwweDBkLDB4ZDIsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDc5LDB4OTcsMHhlMH0gfSwKK3sgIDE2LDB4MWE1MCwwLHsweDE0LDB4NzAsMHgxOCwweDkwLDB4NzksMHgyMSwweGUwLDB4ZmYsMHg5MCwweDc4LDB4MTIsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhfSB9LAoreyAgMTYsMHgxYTYwLDAsezB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDBlLDB4ZWYsMHgxMiwweDBjLDB4OWMsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDR9IH0sCit7ICAxMCwweDFhNzAsMCx7MHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMH0gfSwKK3sgICAxLDB4MWE3YSwwLHsweDIyfSB9LAoreyAgMTYsMHgxYTdiLDAsezB4ZTQsMHhmZiwweGZlLDB4N2IsMHgwMSwweDkwLDB4NzgsMHgwZiwweDA0LDB4ZjAsMHhhMywweDc0LDB4NzgsMHhmMCwweGEzLDB4NzR9IH0sCit7ICAxNiwweDFhOGIsMCx7MHgyYiwweGYwLDB4OTAsMHg3OCwweDBmLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMn0gfSwKK3sgIDE2LDB4MWE5YiwwLHsweDEyLDB4MGMsMHg1ZCwweGZkLDB4OTAsMHg3ZiwweGVjLDB4ZTAsMHg2ZCwweDYwLDB4MTMsMHhlZiwweGMzLDB4OTQsMHgwNSwweDUwfSB9LAoreyAgMTYsMHgxYWFiLDAsezB4MGQsMHgwZiwweDkwLDB4NzgsMHgxMCwweGU0LDB4NzUsMHhmMCwweDAzLDB4MTIsMHgwYywweGY0LDB4ODAsMHhkNCwweDhkLDB4MzN9IH0sCit7ICAxNiwweDFhYmIsMCx7MHg5MCwweDc4LDB4MGYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAxLDB4MTIsMHgwY30gfSwKK3sgIDE2LDB4MWFjYiwwLHsweDVkLDB4ZmQsMHg5MCwweDdmLDB4ZWQsMHhlMCwweDZkLDB4NjAsMHgxMywweGVlLDB4YzMsMHg5NCwweDBiLDB4NTAsMHgwZCwweDBlfSB9LAoreyAgMTYsMHgxYWRiLDAsezB4OTAsMHg3OCwweDEwLDB4ZTQsMHg3NSwweGYwLDB4MDMsMHgxMiwweDBjLDB4ZjQsMHg4MCwweGQ0LDB4OTAsMHg3ZiwweGVkLDB4ZTB9IH0sCit7ICAxNiwweDFhZWIsMCx7MHhmNSwweDM0LDB4ZWYsMHg2NCwweDA1LDB4NjAsMHgwMywweGJlLDB4MGIsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMX0gfSwKK3sgIDE2LDB4MWFmYiwwLHsweGYwLDB4MjIsMHg5MCwweDc4LDB4MGYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4MTIsMHgwYywweDQ0fSB9LAoreyAgMTYsMHgxYjBiLDAsezB4ZmYsMHgyNCwweGYwLDB4NjAsMHgwOCwweDI0LDB4MGYsMHg3MCwweDBlLDB4MTIsMHg0OSwweDJhLDB4MjIsMHgxMiwweDRiLDB4ODN9IH0sCit7ICAxNCwweDFiMWIsMCx7MHg5MCwweDc5LDB4MjAsMHhlNSwweDM0LDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfSB9LAoreyAgIDEsMHgxYjI5LDAsezB4MjJ9IH0sCit7ICAxNSwweDFiMmEsMCx7MHg5MCwweDdmLDB4ZWEsMHhlMCwweGI0LDB4ZmYsMHgwNCwweDEyLDB4MzQsMHgxNiwweDIyLDB4MTIsMHgzOCwweDAwLDB4MjJ9IH0sCit7ICAgNywweDFiMzksMCx7MHg1MywweDk4LDB4ZmUsMHg1MywweDk4LDB4ZmQsMHgzMn0gfSwKK3sgIDE2LDB4MWI0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxYjUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFiNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWI3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxYjgwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFiOTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWJhMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxYmIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFiYzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWJkMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxYmUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFiZjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWMwMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxYzEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFjMjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWMzMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxYzQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFjNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWM2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxYzcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFjODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWM5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxY2EwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFjYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWNjMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxY2QwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFjZTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWNmMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZDAwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFkMTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWQyMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZDMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFkNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWQ1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZDYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFkNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWQ4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZDkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFkYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWRiMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZGMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFkZDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWRlMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZGYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFlMDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWUxMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZTIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFlMzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWU0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZTUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFlNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWU3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZTgwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFlOTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWVhMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTQsMHgxZWIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWViZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZWNlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFlZGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWVlZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZWZlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFmMGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWYxZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZjJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAgMiwweDFmM2UsMCx7MHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZjQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFmNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWY2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZjcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFmODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWY5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZmEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFmYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWZjMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZmQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFmZTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWZmMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMDAwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIwMTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjAyMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMDMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIwNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjA1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMDYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIwNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjA4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMDkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIwYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjBiMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMGMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIwZDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjBlMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMGYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIxMDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjExMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMTIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIxMzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjE0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMTUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIxNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjE3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMTgwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIxOTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjFhMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMWIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIxYzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjFkMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMWUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIxZjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjIwMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMjEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIyMjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjIzMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMjQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIyNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjI2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMjcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIyODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjI5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMmEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIyYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjJjMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMmQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIyZTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjJmMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMzAwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIzMTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjMyMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMzMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIzNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjM1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMzYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNCwweDIzNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMzdlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIzOGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjM5ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyM2FlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIzYmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjNjZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyM2RlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIzZWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjNmZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNDBlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI0MWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjQyZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNDNlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI0NGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjQ1ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNDZlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI0N2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjQ4ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNDllLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI0YWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjRiZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNGNlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI0ZGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjRlZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNGZlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI1MGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjUxZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNTJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI1M2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjU0ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNTVlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI1NmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjU3ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNThlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI1OWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjVhZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNWJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI1Y2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjVkZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNWVlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI1ZmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjYwZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNjFlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI2MmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjYzZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNjRlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI2NWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjY2ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNjdlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI2OGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjY5ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNmFlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI2YmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjZjZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNmRlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNCwweDI2ZWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNmZjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI3MGMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjcxYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNzJjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI3M2MsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4Mjc0YywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNzVjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI3NmMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4Mjc3YywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNzhjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI3OWMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjdhYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyN2JjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI3Y2MsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjdkYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyN2VjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAgNSwweDI3ZmMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDIyfSB9LAoreyAgMTYsMHgyODAxLDAsezB4OTAsMHg3OSwweDY0LDB4ZTAsMHgxNCwweDYwLDB4NDYsMHgxNCwweDcwLDB4MDIsMHg0MSwweDNjLDB4MjQsMHgwMiwweDYwLDB4MDJ9IH0sCit7ICAxNiwweDI4MTEsMCx7MHg4MSwweDJhLDB4OTAsMHg3ZiwweGZjLDB4NzQsMHhjYywweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3OX0gfSwKK3sgIDE2LDB4MjgyMSwwLHsweDc4LDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3OSwweDdjLDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweDU0LDB4ZmQsMHhmMCwweDQ0fSB9LAoreyAgMTYsMHgyODMxLDAsezB4MDEsMHhmMCwweDkwLDB4NzksMHg3YywweGYwLDB4YTIsMHhhZiwweGU0LDB4MzMsMHhmNSwweDEyLDB4YzIsMHhhZiwweDEyLDB4MGJ9IH0sCit7ICAxNiwweDI4NDEsMCx7MHhhMiwweGU1LDB4MTIsMHg2MCwweDAyLDB4ZDIsMHhhZiwweGU0LDB4OTAsMHg3OSwweDdhLDB4ZjAsMHgyMiwweDkwLDB4NzksMHgyZH0gfSwKK3sgIDE2LDB4Mjg1MSwwLHsweGUwLDB4NjQsMHgwMSwweDYwLDB4MDIsMHgwMSwweGYxLDB4OTAsMHg3ZiwweGZjLDB4NzQsMHhjYywweGYwLDB4OTAsMHg3ZiwweGZmfSB9LAoreyAgMTYsMHgyODYxLDAsezB4NzQsMHhmYywweGYwLDB4OTAsMHg3OSwweDc4LDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3OSwweDdjLDB4ZTAsMHg5MCwweDc5LDB4Nzl9IH0sCit7ICAxNiwweDI4NzEsMCx7MHhmMCwweDQ0LDB4MDEsMHhmMCwweDQ0LDB4MDIsMHhmMCwweDkwLDB4NzksMHg3ZSwweGUwLDB4YjQsMHgwMSwweDA5LDB4OTAsMHg3OX0gfSwKK3sgIDE2LDB4Mjg4MSwwLHsweDc5LDB4ZTAsMHg0NCwweDA0LDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg1NCwweGZiLDB4ZjAsMHg5MCwweDc5fSB9LAoreyAgMTYsMHgyODkxLDAsezB4NzksMHhlMCwweDkwLDB4NzksMHg3YywweGYwLDB4YTIsMHhhZiwweGU0LDB4MzMsMHhmNSwweDEyLDB4YzIsMHhhZiwweDEyLDB4MGJ9IH0sCit7ICAxNiwweDI4YTEsMCx7MHhhMiwweDkwLDB4NzksMHg3OCwweDc0LDB4MDIsMHhmMCwweDkwLDB4NzksMHg4NCwweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHg5MH0gfSwKK3sgIDE2LDB4MjhiMSwwLHsweDc5LDB4N2YsMHhlMCwweGI0LDB4MDEsMHgwOSwweDkwLDB4NzksMHg3OSwweGUwLDB4NTQsMHhmZSwweGYwLDB4ODAsMHgwNywweDkwfSB9LAoreyAgMTYsMHgyOGMxLDAsezB4NzksMHg3OSwweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHg1NCwweGZiLDB4ZjB9IH0sCit7ICAxNiwweDI4ZDEsMCx7MHg5MCwweDc5LDB4ODQsMHhmMCwweDEyLDB4MGIsMHhhMiwweDkwLDB4NzksMHg3YSwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg2NX0gfSwKK3sgIDE2LDB4MjhlMSwwLHsweGYwLDB4ZTUsMHgxMiwweDYwLDB4MDIsMHhkMiwweGFmLDB4ZTQsMHg5MCwweDc5LDB4OGMsMHhmMCwweDkwLDB4NzksMHg4YiwweGYwfSB9LAoreyAgMTYsMHgyOGYxLDAsezB4OTAsMHg3OSwweDJkLDB4ZTAsMHg2NCwweDAyLDB4NjAsMHgwMiwweDIxLDB4OTYsMHg5MCwweDdmLDB4ZmMsMHg3NCwweGM4LDB4ZjB9IH0sCit7ICAxNiwweDI5MDEsMCx7MHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc5LDB4NzgsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4N2MsMHhlMH0gfSwKK3sgIDE2LDB4MjkxMSwwLHsweDkwLDB4NzksMHg3OSwweGYwLDB4NDQsMHgwMSwweGYwLDB4NDQsMHgwMiwweGYwLDB4OTAsMHg3OSwweDdlLDB4ZTAsMHhiNCwweDAxfSB9LAoreyAgMTYsMHgyOTIxLDAsezB4MDksMHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDQsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc5LDB4NzksMHhlMCwweDU0LDB4ZmJ9IH0sCit7ICAxNiwweDI5MzEsMCx7MHhmMCwweDkwLDB4NzksMHg3OSwweGUwLDB4OTAsMHg3OSwweDdjLDB4ZjAsMHhhMiwweGFmLDB4ZTQsMHgzMywweGY1LDB4MTIsMHhjMn0gfSwKK3sgIDE2LDB4Mjk0MSwwLHsweGFmLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OSwweDc4LDB4NzQsMHgwMiwweGYwLDB4OTAsMHg3OSwweDg0LDB4ZTAsMHg5MCwweDc5fSB9LAoreyAgMTYsMHgyOTUxLDAsezB4NzksMHhmMCwweDkwLDB4NzksMHg3ZiwweGUwLDB4YjQsMHgwMSwweDA5LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg1NCwweGZlLDB4ZjB9IH0sCit7ICAxNiwweDI5NjEsMCx7MHg4MCwweDA3LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDIsMHhmMH0gfSwKK3sgIDE2LDB4Mjk3MSwwLHsweDU0LDB4ZmIsMHhmMCwweDkwLDB4NzksMHg4NCwweGYwLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OSwweDdhLDB4NzQsMHgwMSwweGYwfSB9LAoreyAgMTYsMHgyOTgxLDAsezB4OTAsMHg3OSwweDY1LDB4NzQsMHgwMywweGYwLDB4ZTUsMHgxMiwweDYwLDB4MDIsMHhkMiwweGFmLDB4ZTQsMHg5MCwweDc5LDB4OGN9IH0sCit7ICAxNiwweDI5OTEsMCx7MHhmMCwweDkwLDB4NzksMHg4YiwweGYwLDB4OTAsMHg3OSwweDJkLDB4ZTAsMHg2NCwweDAzLDB4NjAsMHgwMiwweDgxLDB4MmEsMHg5MH0gfSwKK3sgIDE2LDB4MjlhMSwwLHsweDdmLDB4ZmMsMHg3NCwweDk4LDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc5LDB4NzgsMHg3NCwweDAxfSB9LAoreyAgMTYsMHgyOWIxLDAsezB4ZjAsMHg5MCwweDc5LDB4N2MsMHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4NDQsMHgwMSwweGYwLDB4NDQsMHgwMiwweGYwLDB4OTB9IH0sCit7ICAxNiwweDI5YzEsMCx7MHg3OSwweDdlLDB4ZTAsMHhiNCwweDAxLDB4MDksMHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDQsMHhmMCwweDgwLDB4MDcsMHg5MH0gfSwKK3sgIDE2LDB4MjlkMSwwLHsweDc5LDB4NzksMHhlMCwweDU0LDB4ZmIsMHhmMCwweDkwLDB4NzksMHg3OSwweGUwLDB4OTAsMHg3OSwweDdjLDB4ZjAsMHhhMiwweGFmfSB9LAoreyAgMTYsMHgyOWUxLDAsezB4ZTQsMHgzMywweGY1LDB4MTIsMHhjMiwweGFmLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OSwweDc4LDB4NzQsMHgwMiwweGYwLDB4OTB9IH0sCit7ICAxNiwweDI5ZjEsMCx7MHg3OSwweDg0LDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweDkwLDB4NzksMHg3ZiwweGUwLDB4YjQsMHgwMSwweDA5LDB4OTAsMHg3OX0gfSwKK3sgIDE2LDB4MmEwMSwwLHsweDc5LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc5fSB9LAoreyAgMTYsMHgyYTExLDAsezB4NzksMHhlMCwweDU0LDB4ZmQsMHhmMCwweDQ0LDB4MDQsMHhmMCwweDkwLDB4NzksMHg4NCwweGYwLDB4MTIsMHgwYiwweGEyLDB4OTB9IH0sCit7ICAxNiwweDJhMjEsMCx7MHg3OSwweDdhLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3OSwweDY1LDB4NzQsMHgwNSwweGYwLDB4ZTUsMHgxMiwweDYwLDB4MDIsMHhkMn0gfSwKK3sgIDE2LDB4MmEzMSwwLHsweGFmLDB4ZTQsMHg5MCwweDc5LDB4OGMsMHhmMCwweDkwLDB4NzksMHg4YiwweGYwLDB4MjIsMHg5MCwweDc5LDB4MmQsMHhlMCwweDY0fSB9LAoreyAgMTYsMHgyYTQxLDAsezB4MDEsMHg2MCwweDAyLDB4NDEsMHhlMCwweDkwLDB4N2YsMHhmYywweDc0LDB4YjQsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmN9IH0sCit7ICAxNiwweDJhNTEsMCx7MHhmMCwweDkwLDB4NzksMHg3OCwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg3YywweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHg1NH0gfSwKK3sgIDE2LDB4MmE2MSwwLHsweGZlLDB4ZjAsMHg0NCwweDAyLDB4ZjAsMHg5MCwweDc5LDB4N2UsMHhlMCwweGI0LDB4MDEsMHgwOSwweDkwLDB4NzksMHg3OSwweGUwfSB9LAoreyAgMTYsMHgyYTcxLDAsezB4NDQsMHgwNCwweGYwLDB4ODAsMHgwNywweDkwLDB4NzksMHg3OSwweGUwLDB4NTQsMHhmYiwweGYwLDB4OTAsMHg3OSwweDc5LDB4ZTB9IH0sCit7ICAxNiwweDJhODEsMCx7MHg5MCwweDc5LDB4N2MsMHhmMCwweGEyLDB4YWYsMHhlNCwweDMzLDB4ZjUsMHgxMiwweGMyLDB4YWYsMHgxMiwweDBiLDB4YTIsMHg5MH0gfSwKK3sgIDE2LDB4MmE5MSwwLHsweDc5LDB4NzgsMHg3NCwweDAyLDB4ZjAsMHg5MCwweDc5LDB4ODQsMHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4OTAsMHg3OSwweDdmfSB9LAoreyAgMTYsMHgyYWExLDAsezB4ZTAsMHhiNCwweDAxLDB4MDksMHg5MCwweDc5LDB4NzksMHhlMCwweDU0LDB4ZmUsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc5LDB4Nzl9IH0sCit7ICAxNiwweDJhYjEsMCx7MHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg3OSwweGUwLDB4NTQsMHhmZCwweGYwLDB4NTQsMHhmYiwweGYwLDB4OTAsMHg3OX0gfSwKK3sgIDE2LDB4MmFjMSwwLHsweDg0LDB4ZjAsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4N2EsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4NjUsMHgwNCwweGYwfSB9LAoreyAgMTYsMHgyYWQxLDAsezB4ZTUsMHgxMiwweDYwLDB4MDIsMHhkMiwweGFmLDB4ZTQsMHg5MCwweDc5LDB4OGMsMHhmMCwweDkwLDB4NzksMHg4YiwweGYwLDB4OTB9IH0sCit7ICAxNiwweDJhZTEsMCx7MHg3OSwweDJkLDB4ZTAsMHg2NCwweDAyLDB4NjAsMHgwMiwweDYxLDB4ODUsMHg5MCwweDdmLDB4ZmMsMHg3NCwweGIwLDB4ZjAsMHg5MH0gfSwKK3sgIDE2LDB4MmFmMSwwLHsweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc5LDB4NzgsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4N2MsMHhlMCwweDkwfSB9LAoreyAgMTYsMHgyYjAxLDAsezB4NzksMHg3OSwweGYwLDB4NTQsMHhmZSwweGYwLDB4NDQsMHgwMiwweGYwLDB4OTAsMHg3OSwweDdlLDB4ZTAsMHhiNCwweDAxLDB4MDl9IH0sCit7ICAxNiwweDJiMTEsMCx7MHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDQsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc5LDB4NzksMHhlMCwweDU0LDB4ZmIsMHhmMH0gfSwKK3sgIDE2LDB4MmIyMSwwLHsweDkwLDB4NzksMHg3OSwweGUwLDB4OTAsMHg3OSwweDdjLDB4ZjAsMHhhMiwweGFmLDB4ZTQsMHgzMywweGY1LDB4MTIsMHhjMiwweGFmfSB9LAoreyAgMTYsMHgyYjMxLDAsezB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OSwweDc4LDB4NzQsMHgwMiwweGYwLDB4OTAsMHg3OSwweDg0LDB4ZTAsMHg5MCwweDc5LDB4Nzl9IH0sCit7ICAxNiwweDJiNDEsMCx7MHhmMCwweDkwLDB4NzksMHg3ZiwweGUwLDB4YjQsMHgwMSwweDA5LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MH0gfSwKK3sgIDE2LDB4MmI1MSwwLHsweDA3LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDIsMHhmMCwweDU0fSB9LAoreyAgMTYsMHgyYjYxLDAsezB4ZmIsMHhmMCwweDkwLDB4NzksMHg4NCwweGYwLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OSwweDdhLDB4NzQsMHgwMSwweGYwLDB4OTB9IH0sCit7ICAxNiwweDJiNzEsMCx7MHg3OSwweDY1LDB4NzQsMHgwNCwweGYwLDB4ZTUsMHgxMiwweDYwLDB4MDIsMHhkMiwweGFmLDB4ZTQsMHg5MCwweDc5LDB4OGMsMHhmMH0gfSwKK3sgIDE2LDB4MmI4MSwwLHsweDkwLDB4NzksMHg4YiwweGYwLDB4OTAsMHg3OSwweDJkLDB4ZTAsMHg2NCwweDAzLDB4NjAsMHgwMiwweDgxLDB4MmEsMHg5MCwweDdmfSB9LAoreyAgMTYsMHgyYjkxLDAsezB4ZmMsMHg3NCwweDY4LDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc5LDB4NzgsMHg3NCwweDAxLDB4ZjB9IH0sCit7ICAxNiwweDJiYTEsMCx7MHg5MCwweDc5LDB4N2MsMHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4NTQsMHhmZSwweGYwLDB4NDQsMHgwMiwweGYwLDB4OTAsMHg3OX0gfSwKK3sgIDE2LDB4MmJiMSwwLHsweDdlLDB4ZTAsMHhiNCwweDAxLDB4MDksMHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDQsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc5fSB9LAoreyAgMTYsMHgyYmMxLDAsezB4NzksMHhlMCwweDU0LDB4ZmIsMHhmMCwweDkwLDB4NzksMHg3OSwweGUwLDB4OTAsMHg3OSwweDdjLDB4ZjAsMHhhMiwweGFmLDB4ZTR9IH0sCit7ICAxNiwweDJiZDEsMCx7MHgzMywweGY1LDB4MTIsMHhjMiwweGFmLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OSwweDc4LDB4NzQsMHgwMiwweGYwLDB4OTAsMHg3OX0gfSwKK3sgIDE2LDB4MmJlMSwwLHsweDg0LDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweDkwLDB4NzksMHg3ZiwweGUwLDB4YjQsMHgwMSwweDA5LDB4OTAsMHg3OSwweDc5fSB9LAoreyAgMTYsMHgyYmYxLDAsezB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4Nzl9IH0sCit7ICAxNiwweDJjMDEsMCx7MHhlMCwweDU0LDB4ZmQsMHhmMCwweDQ0LDB4MDQsMHhmMCwweDkwLDB4NzksMHg4NCwweGYwLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OX0gfSwKK3sgIDE2LDB4MmMxMSwwLHsweDdhLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3OSwweDY1LDB4NzQsMHgwNiwweGYwLDB4ZTUsMHgxMiwweDYwLDB4MDIsMHhkMiwweGFmfSB9LAoreyAgMTAsMHgyYzIxLDAsezB4ZTQsMHg5MCwweDc5LDB4OGMsMHhmMCwweDkwLDB4NzksMHg4YiwweGYwLDB4MjJ9IH0sCit7ICAxNiwweDJjMmIsMCx7MHhlNCwweGZmLDB4N2IsMHgwMSwweDkwLDB4NzgsMHgxNiwweDA0LDB4ZjAsMHhhMywweDc0LDB4NzgsMHhmMCwweGEzLDB4NzQsMHg1OH0gfSwKK3sgIDE2LDB4MmMzYiwwLHsweGYwLDB4OTAsMHg3OCwweDE2LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMSwweDEyfSB9LAoreyAgMTYsMHgyYzRiLDAsezB4MGMsMHg1ZCwweGZlLDB4OTAsMHg3ZiwweGVjLDB4ZTAsMHg2ZSwweDYwLDB4MTMsMHhlZiwweGMzLDB4OTQsMHgwNiwweDUwLDB4MGR9IH0sCit7ICAxNiwweDJjNWIsMCx7MHgwZiwweDkwLDB4NzgsMHgxNywweGU0LDB4NzUsMHhmMCwweDBmLDB4MTIsMHgwYywweGY0LDB4ODAsMHhkNCwweGJmLDB4MDYsMHgwOH0gfSwKK3sgIDE2LDB4MmM2YiwwLHsweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDc4LDB4MTYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhfSB9LAoreyAgMTYsMHgyYzdiLDAsezB4YTMsMHhlMCwweGY5LDB4MTIsMHgwYywweDQ0LDB4ZmYsMHgyNCwweDlmLDB4NzAsMHgwMiwweGMxLDB4NjYsMHgyNCwweDIxLDB4NjB9IH0sCit7ICAxNiwweDJjOGIsMCx7MHgwMiwweGMxLDB4OGMsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4N2UsMHg3MCwweDAyLDB4YTEsMHgzMCwweDE0LDB4NzAsMHgwMn0gfSwKK3sgIDE2LDB4MmM5YiwwLHsweGExLDB4YzgsMHgyNCwweDAyLDB4NjAsMHgwMiwweGMxLDB4NWUsMHg5MCwweDAwLDB4MDIsMHgxMiwweDBkLDB4YTIsMHg3YiwweDQ0fSB9LAoreyAgMTYsMHgyY2FiLDAsezB4N2EsMHhhYywweDc5LDB4MDAsMHg3OCwweDAwLDB4YzMsMHgxMiwweDBkLDB4OTEsMHg3MCwweDEzLDB4OTAsMHg3ZiwweDAwLDB4NzR9IH0sCit7ICAxNiwweDJjYmIsMCx7MHg0NCwweGYwLDB4YTMsMHg3NCwweGFjLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAzLDB4ZjAsMHg5MH0gfSwKK3sgIDE2LDB4MmNjYiwwLHsweDc4LDB4MTYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAyLDB4MTIsMHgwZCwweGEyfSB9LAoreyAgMTYsMHgyY2RiLDAsezB4N2IsMHg4MCwweDdhLDB4YmIsMHg3OSwweDAwLDB4NzgsMHgwMCwweGMzLDB4MTIsMHgwZCwweDkxLDB4NzAsMHgxMywweDkwLDB4N2Z9IH0sCit7ICAxNiwweDJjZWIsMCx7MHgwMCwweDc0LDB4ODAsMHhmMCwweGEzLDB4NzQsMHhiYiwweGYwLDB4ZTQsMHhhMywweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwM30gfSwKK3sgIDE2LDB4MmNmYiwwLHsweGYwLDB4OTAsMHg3OCwweDE2LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMiwweDEyfSB9LAoreyAgMTYsMHgyZDBiLDAsezB4MGQsMHhhMiwweDdiLDB4MDAsMHg3YSwweDc3LDB4NzksMHgwMSwweDc4LDB4MDAsMHhjMywweDEyLDB4MGQsMHg5MSwweDYwLDB4MDJ9IH0sCit7ICAxNiwweDJkMWIsMCx7MHhjMSwweDkzLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHhhMywweDc0LDB4NzcsMHhmMCwweGEzLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4MmQyYiwwLHsweGI1LDB4NzQsMHgwMywweGYwLDB4MjIsMHg5MCwweDc4LDB4MTYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5fSB9LAoreyAgMTYsMHgyZDNiLDAsezB4OTAsMHgwMCwweDA2LDB4MTIsMHgwZCwweGEyLDB4N2IsMHg0NCwweDdhLDB4YWMsMHg3OSwweDAwLDB4NzgsMHgwMCwweGMzLDB4MTJ9IH0sCit7ICAxNiwweDJkNGIsMCx7MHgwZCwweDkxLDB4NzAsMHgxMywweDkwLDB4N2YsMHgwMCwweDc0LDB4NDQsMHhmMCwweGEzLDB4NzQsMHhhYywweGYwLDB4ZTQsMHhhM30gfSwKK3sgIDE2LDB4MmQ1YiwwLHsweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMywweGYwLDB4OTAsMHg3OCwweDE2LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzfSB9LAoreyAgMTYsMHgyZDZiLDAsezB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwNiwweDEyLDB4MGQsMHhhMiwweDdiLDB4ODAsMHg3YSwweGJiLDB4NzksMHgwMCwweDc4LDB4MDB9IH0sCit7ICAxNiwweDJkN2IsMCx7MHhjMywweDEyLDB4MGQsMHg5MSwweDcwLDB4MTMsMHg5MCwweDdmLDB4MDAsMHg3NCwweDgwLDB4ZjAsMHhhMywweDc0LDB4YmIsMHhmMH0gfSwKK3sgIDE2LDB4MmQ4YiwwLHsweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDMsMHhmMCwweDkwLDB4NzgsMHgxNiwweGUwLDB4ZmIsMHhhMywweGUwfSB9LAoreyAgMTYsMHgyZDliLDAsezB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDYsMHgxMiwweDBkLDB4YTIsMHg3YiwweDAwLDB4N2EsMHg3NywweDc5LDB4MDF9IH0sCit7ICAxNiwweDJkYWIsMCx7MHg3OCwweDAwLDB4YzMsMHgxMiwweDBkLDB4OTEsMHg2MCwweDAyLDB4YzEsMHg5MywweDkwLDB4N2YsMHgwMCwweGYwLDB4YTMsMHg3NH0gfSwKK3sgIDE2LDB4MmRiYiwwLHsweDc3LDB4ZjAsMHhhMywweDc0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDMsMHhmMCwweDIyLDB4OTAsMHg3OCwweDE2fSB9LAoreyAgMTYsMHgyZGNiLDAsezB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwYSwweDEyLDB4MGQsMHhhMiwweDdiLDB4NDR9IH0sCit7ICAxNiwweDJkZGIsMCx7MHg3YSwweGFjLDB4NzksMHgwMCwweDc4LDB4MDAsMHhjMywweDEyLDB4MGQsMHg5MSwweDcwLDB4MTMsMHg5MCwweDdmLDB4MDAsMHg3NH0gfSwKK3sgIDE2LDB4MmRlYiwwLHsweDQ0LDB4ZjAsMHhhMywweDc0LDB4YWMsMHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDMsMHhmMCwweDkwfSB9LAoreyAgMTYsMHgyZGZiLDAsezB4NzgsMHgxNiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MGEsMHgxMiwweDBkLDB4YTJ9IH0sCit7ICAxNiwweDJlMGIsMCx7MHg3YiwweDgwLDB4N2EsMHhiYiwweDc5LDB4MDAsMHg3OCwweDAwLDB4YzMsMHgxMiwweDBkLDB4OTEsMHg3MCwweDEzLDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4MmUxYiwwLHsweDAwLDB4NzQsMHg4MCwweGYwLDB4YTMsMHg3NCwweGJiLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAzfSB9LAoreyAgMTYsMHgyZTJiLDAsezB4ZjAsMHg5MCwweDc4LDB4MTYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDBhLDB4MTJ9IH0sCit7ICAxNiwweDJlM2IsMCx7MHgwZCwweGEyLDB4N2IsMHgwMCwweDdhLDB4NzcsMHg3OSwweDAxLDB4NzgsMHgwMCwweGMzLDB4MTIsMHgwZCwweDkxLDB4NzAsMHg0OH0gfSwKK3sgIDE2LDB4MmU0YiwwLHsweDkwLDB4N2YsMHgwMCwweGYwLDB4YTMsMHg3NCwweDc3LDB4ZjAsMHhhMywweDc0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0fSB9LAoreyAgMTYsMHgyZTViLDAsezB4MDMsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlOSwweGUwLDB4MjR9IH0sCit7ICAxNiwweDJlNmIsMCx7MHg3ZiwweDcwLDB4MTYsMHg5MCwweDc4LDB4MTYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMH0gfSwKK3sgIDE2LDB4MmU3YiwwLHsweDBlLDB4MTIsMHgwYywweDVkLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfSB9LAoreyAgIDgsMHgyZThiLDAsezB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMH0gfSwKK3sgICAxLDB4MmU5MywwLHsweDIyfSB9LAoreyAgMTYsMHgyZTk0LDAsezB4NzUsMHgzNiwweDI1LDB4NzUsMHgzNywweDI0LDB4OTAsMHg3OSwweDc0LDB4ZTAsMHg2NCwweDAxLDB4NzAsMHg1NCwweGYwLDB4ZjV9IH0sCit7ICAxNiwweDJlYTQsMCx7MHgzNSwweDc1LDB4MjIsMHgwMSwweGU1LDB4MjIsMHg2NCwweDAxLDB4NzAsMHg0OCwweDkwLDB4N2YsMHhhNSwweGUwLDB4NDQsMHg4MH0gfSwKK3sgIDE2LDB4MmViNCwwLHsweGYwLDB4OTAsMHg3ZiwweGE2LDB4ZTUsMHgzNiwweGYwLDB4MTIsMHg0NiwweGMwLDB4NzQsMHg0ZiwweDI1LDB4MzUsMHhmNSwweDgyfSB9LAoreyAgMTYsMHgyZWM0LDAsezB4ZTQsMHgzNCwweDc5LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3ZiwweGE2LDB4ZjAsMHgxMiwweDQ2LDB4YzAsMHg3NCwweDM1LDB4MjV9IH0sCit7ICAxNiwweDJlZDQsMCx7MHgzNSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzksMHhmNSwweDgzLDB4ZTAsMHg5MCwweDdmLDB4YTYsMHhmMCwweDEyLDB4NDYsMHhjMH0gfSwKK3sgIDE2LDB4MmVlNCwwLHsweDkwLDB4N2YsMHhhNSwweDc0LDB4NDAsMHhmMCwweDEyLDB4MGEsMHhjZCwweDA1LDB4MzUsMHhlNSwweDM1LDB4YzMsMHg5NCwweDBkfSB9LAoreyAgMTYsMHgyZWY0LDAsezB4NDAsMHhiMiwweDkwLDB4NzksMHg3NSwweGUwLDB4NjQsMHgwMSwweDYwLDB4MDIsMHhlMSwweGRlLDB4ZjAsMHg5MCwweDc5LDB4MjB9IH0sCit7ICAxNiwweDJmMDQsMCx7MHhlMCwweDY0LDB4MDUsMHg2MCwweDAyLDB4ZTEsMHg4ZCwweDdiLDB4MDEsMHg5MCwweDc5LDB4NWMsMHgwNCwweGYwLDB4YTMsMHg3NH0gfSwKK3sgIDE2LDB4MmYxNCwwLHsweDc4LDB4ZjAsMHhhMywweDc0LDB4YjIsMHhmMCwweDc1LDB4MzMsMHgwNywweDkwLDB4NzksMHg1YywweGUwLDB4ZmIsMHhhMywweGUwfSB9LAoreyAgMTYsMHgyZjI0LDAsezB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDEsMHgxMiwweDBjLDB4NWQsMHg3MCwweDBmLDB4OTAsMHgwMCwweDA0LDB4MTJ9IH0sCit7ICAxNiwweDJmMzQsMCx7MHgwYywweDVkLDB4OTAsMHg3OSwweDJmLDB4ZjAsMHgxMiwweDBjLDB4MjksMHg4MCwweDA2LDB4OTAsMHg3OSwweDJmLDB4NzQsMHhmZn0gfSwKK3sgIDE2LDB4MmY0NCwwLHsweGYwLDB4ZTQsMHhmNSwweDM1LDB4NzUsMHgyMiwweDAxLDB4NzUsMHgzNCwweDAyLDB4ZTUsMHgyMiwweDY0LDB4MDEsMHg3MCwweDM5fSB9LAoreyAgMTYsMHgyZjU0LDAsezB4OTAsMHg3ZiwweGE1LDB4ZTAsMHg0NCwweDgwLDB4ZjAsMHg5MCwweDdmLDB4YTYsMHhlNSwweDM2LDB4ZjAsMHgxMiwweDQ2LDB4YzB9IH0sCit7ICAxNiwweDJmNjQsMCx7MHhhZiwweDM0LDB4MDUsMHgzNCwweDkwLDB4N2YsMHhhNiwweGVmLDB4ZjAsMHgxMiwweDQ2LDB4YzAsMHg5MCwweDc5LDB4MmYsMHhlMH0gfSwKK3sgIDE2LDB4MmY3NCwwLHsweDkwLDB4N2YsMHhhNiwweGYwLDB4MTIsMHg0NiwweGMwLDB4OTAsMHg3ZiwweGE1LDB4NzQsMHg0MCwweGYwLDB4MTIsMHgwYSwweGNkfSB9LAoreyAgMTYsMHgyZjg0LDAsezB4MDUsMHgzNSwweGU1LDB4MzUsMHhjMywweDk0LDB4MDYsMHg0MCwweGMxLDB4OTAsMHg3OSwweDIwLDB4ZTAsMHg2NCwweDA2LDB4NzB9IH0sCit7ICAxNiwweDJmOTQsMCx7MHg0OSwweDdiLDB4MDEsMHg5MCwweDc5LDB4NWYsMHgwNCwweGYwLDB4YTMsMHg3NCwweDc4LDB4ZjAsMHhhMywweDc0LDB4ZmYsMHhmMH0gfSwKK3sgIDE2LDB4MmZhNCwwLHsweDc1LDB4MzMsMHgwMywweDkwLDB4NzksMHg1ZiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwfSB9LAoreyAgMTYsMHgyZmI0LDAsezB4MDEsMHgxMiwweDBjLDB4NWQsMHg3MCwweDFjLDB4OTAsMHgwMCwweDA0LDB4MTIsMHgwYywweDVkLDB4OTAsMHg3OSwweDMzLDB4ZjB9IH0sCit7ICAxNiwweDJmYzQsMCx7MHg3MCwweDAzLDB4NzQsMHhmZiwweGYwLDB4OTAsMHg3OSwweDMzLDB4ZTAsMHg1NCwweDdmLDB4ZmYsMHhmMCwweDI1LDB4ZTAsMHhmMH0gfSwKK3sgIDEwLDB4MmZkNCwwLHsweDgwLDB4MDUsMHhlNCwweDkwLDB4NzksMHgzMywweGYwLDB4MTIsMHg0NywweGRmfSB9LAoreyAgIDEsMHgyZmRlLDAsezB4MjJ9IH0sCit7ICAxNiwweDJmZGYsMCx7MHg5MCwweDc5LDB4NzgsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDc5LDB4ODMsMHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4YTIsMHhhZn0gfSwKK3sgIDE2LDB4MmZlZiwwLHsweGU0LDB4MzMsMHhmNSwweDEyLDB4YzIsMHhhZiwweDEyLDB4MGIsMHhhMiwweGU1LDB4MTIsMHg2MCwweDAyLDB4ZDIsMHhhZiwweDIyfSB9LAoreyAgIDEsMHgyZmZmLDAsezB4MjJ9IH0sCit7ICAxNiwweDMwMDAsMCx7MHhlNCwweGZlLDB4OTAsMHg3OSwweDIwLDB4ZTAsMHhmZCwweGI0LDB4MDUsMHgxMSwweDkwLDB4NzgsMHgyNSwweDc0LDB4MDEsMHhmMH0gfSwKK3sgIDE2LDB4MzAxMCwwLHsweGEzLDB4NzQsMHg3OCwweGYwLDB4YTMsMHg3NCwweGIyLDB4ZjAsMHg3NSwweDM1LDB4MDcsMHhlZCwweGI0LDB4MDYsMHgxMSwweDkwfSB9LAoreyAgMTYsMHgzMDIwLDAsezB4NzgsMHgyNSwweDc0LDB4MDEsMHhmMCwweGEzLDB4NzQsMHg3OCwweGYwLDB4YTMsMHg3NCwweGZmLDB4ZjAsMHg3NSwweDM1LDB4MDN9IH0sCit7ICAxNiwweDMwMzAsMCx7MHg5MCwweDdmLDB4ZWIsMHhlMCwweDE0LDB4NjAsMHgxMSwweDE0LDB4NjAsMHg1YiwweDI0LDB4MDIsMHg2MCwweDAyLDB4NDEsMHgwNX0gfSwKK3sgIDE2LDB4MzA0MCwwLHsweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4N2YsMHg3MCwweDNkfSB9LAoreyAgMTYsMHgzMDUwLDAsezB4ZTQsMHhmZiwweGVmLDB4YzMsMHg5NSwweDM1LDB4NTAsMHgyZiwweDkwLDB4NzgsMHgyNSwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmF9IH0sCit7ICAxNiwweDMwNjAsMCx7MHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDEsMHgxMiwweDBjLDB4NWQsMHhmZCwweGNjLDB4ZWUsMHhjYywweDBlLDB4NzQsMHgwMH0gfSwKK3sgIDE2LDB4MzA3MCwwLHsweDJjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZCwweGYwLDB4OTAsMHg3OCwweDI2LDB4ZTQsMHg3NSwweGYwfSB9LAoreyAgMTYsMHgzMDgwLDAsezB4MGIsMHgxMiwweDBjLDB4ZjQsMHgwZiwweDgwLDB4Y2IsMHg5MCwweDdmLDB4YjUsMHhlZSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjR9IH0sCit7ICAxNiwweDMwOTAsMCx7MHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweDdlLDB4NjAsMHg2NCwweDE0LDB4NzAsMHgwMn0gfSwKK3sgIDE2LDB4MzBhMCwwLHsweDIxLDB4NTUsMHgxNCwweDcwLDB4MDIsMHgyMSwweGE5LDB4MjQsMHgwMywweDYwLDB4MDIsMHgyMSwweGZkLDB4ZTQsMHhmZiwweGVmfSB9LAoreyAgMTYsMHgzMGIwLDAsezB4YzMsMHg5NSwweDM1LDB4NTAsMHg0NiwweDkwLDB4NzgsMHgyNSwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4Zjl9IH0sCit7ICAxNiwweDMwYzAsMCx7MHg5MCwweDAwLDB4MDMsMHgxMiwweDBjLDB4NWQsMHhmZCwweGNjLDB4ZWUsMHhjYywweDBlLDB4NzQsMHgwMCwweDJjLDB4ZjUsMHg4Mn0gfSwKK3sgIDE2LDB4MzBkMCwwLHsweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZCwweGYwLDB4OTAsMHgwMCwweDA0LDB4MTIsMHgwYywweDVkLDB4ZmQsMHhjYywweGVlfSB9LAoreyAgMTYsMHgzMGUwLDAsezB4Y2MsMHgwZSwweDc0LDB4MDAsMHgyYywweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4ZWQsMHhmMCwweDkwLDB4Nzh9IH0sCit7ICAxNiwweDMwZjAsMCx7MHgyNiwweGU0LDB4NzUsMHhmMCwweDBiLDB4MTIsMHgwYywweGY0LDB4MGYsMHg4MCwweGI0LDB4OTAsMHg3ZiwweGI1LDB4ZWUsMHhmMH0gfSwKK3sgIDE2LDB4MzEwMCwwLHsweDIyLDB4ZTQsMHhmZiwweGVmLDB4YzMsMHg5NSwweDM1LDB4NTAsMHg0NiwweDkwLDB4NzgsMHgyNSwweGUwLDB4ZmIsMHhhMywweGUwfSB9LAoreyAgMTYsMHgzMTEwLDAsezB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDUsMHgxMiwweDBjLDB4NWQsMHhmZCwweGNjLDB4ZWUsMHhjYywweDBlLDB4NzR9IH0sCit7ICAxNiwweDMxMjAsMCx7MHgwMCwweDJjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZCwweGYwLDB4OTAsMHgwMCwweDA2LDB4MTIsMHgwY30gfSwKK3sgIDE2LDB4MzEzMCwwLHsweDVkLDB4ZmQsMHhjYywweGVlLDB4Y2MsMHgwZSwweDc0LDB4MDAsMHgyYywweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNSwweDgzfSB9LAoreyAgMTYsMHgzMTQwLDAsezB4ZWQsMHhmMCwweDkwLDB4NzgsMHgyNiwweGU0LDB4NzUsMHhmMCwweDBiLDB4MTIsMHgwYywweGY0LDB4MGYsMHg4MCwweGI0LDB4OTB9IH0sCit7ICAxNiwweDMxNTAsMCx7MHg3ZiwweGI1LDB4ZWUsMHhmMCwweDIyLDB4ZTQsMHhmZiwweGVmLDB4YzMsMHg5NSwweDM1LDB4NTAsMHg0NiwweDkwLDB4NzgsMHgyNX0gfSwKK3sgIDE2LDB4MzE2MCwwLHsweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDcsMHgxMiwweDBjLDB4NWQsMHhmZCwweGNjfSB9LAoreyAgMTYsMHgzMTcwLDAsezB4ZWUsMHhjYywweDBlLDB4NzQsMHgwMCwweDJjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZCwweGYwLDB4OTB9IH0sCit7ICAxNiwweDMxODAsMCx7MHgwMCwweDA4LDB4MTIsMHgwYywweDVkLDB4ZmQsMHhjYywweGVlLDB4Y2MsMHgwZSwweDc0LDB4MDAsMHgyYywweGY1LDB4ODIsMHhlNH0gfSwKK3sgIDE2LDB4MzE5MCwwLHsweDM0LDB4N2YsMHhmNSwweDgzLDB4ZWQsMHhmMCwweDkwLDB4NzgsMHgyNiwweGU0LDB4NzUsMHhmMCwweDBiLDB4MTIsMHgwYywweGY0fSB9LAoreyAgMTYsMHgzMWEwLDAsezB4MGYsMHg4MCwweGI0LDB4OTAsMHg3ZiwweGI1LDB4ZWUsMHhmMCwweDIyLDB4ZTQsMHhmZiwweGVmLDB4YzMsMHg5NSwweDM1LDB4NTB9IH0sCit7ICAxNiwweDMxYjAsMCx7MHg0NiwweDkwLDB4NzgsMHgyNSwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDksMHgxMn0gfSwKK3sgIDE2LDB4MzFjMCwwLHsweDBjLDB4NWQsMHhmZCwweGNjLDB4ZWUsMHhjYywweDBlLDB4NzQsMHgwMCwweDJjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1fSB9LAoreyAgMTYsMHgzMWQwLDAsezB4ODMsMHhlZCwweGYwLDB4OTAsMHgwMCwweDBhLDB4MTIsMHgwYywweDVkLDB4ZmQsMHhjYywweGVlLDB4Y2MsMHgwZSwweDc0LDB4MDB9IH0sCit7ICAxNiwweDMxZTAsMCx7MHgyYywweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4ZWQsMHhmMCwweDkwLDB4NzgsMHgyNiwweGU0LDB4NzUsMHhmMH0gfSwKK3sgIDE2LDB4MzFmMCwwLHsweDBiLDB4MTIsMHgwYywweGY0LDB4MGYsMHg4MCwweGI0LDB4OTAsMHg3ZiwweGI1LDB4ZWUsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0fSB9LAoreyAgMTIsMHgzMjAwLDAsezB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfSB9LAoreyAgIDEsMHgzMjBjLDAsezB4MjJ9IH0sCit7ICAxNiwweDMyMGQsMCx7MHg3YiwweDAxLDB4N2EsMHg3OCwweDc5LDB4MmIsMHg5MCwweDc4LDB4MDAsMHhlYiwweGYwLDB4YTMsMHhlYSwweGYwLDB4YTMsMHhlOX0gfSwKK3sgIDE2LDB4MzIxZCwwLHsweGYwLDB4NzQsMHgwMSwweDEyLDB4MGMsMHg4YSwweDkwLDB4NzgsMHgwMCwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwfSB9LAoreyAgMTYsMHgzMjJkLDAsezB4ZjksMHg5MCwweDAwLDB4MDEsMHg3NCwweDAxLDB4MTIsMHgwYywweDljLDB4OTAsMHgwMCwweDAyLDB4ZTQsMHgxMiwweDBjLDB4OWN9IH0sCit7ICAxNiwweDMyM2QsMCx7MHg5MCwweDc4LDB4MDEsMHhlNCwweDc1LDB4ZjAsMHgwMywweDEyLDB4MGMsMHhmNCwweDkwLDB4NzgsMHgwMCwweGUwLDB4ZmIsMHhhM30gfSwKK3sgIDE2LDB4MzI0ZCwwLHsweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg3NCwweDEwLDB4MTIsMHgwYywweDhhLDB4OTAsMHg3OCwweDAwLDB4ZTAsMHhmYiwweGEzfSB9LAoreyAgMTYsMHgzMjVkLDAsezB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMSwweDc0LDB4MDUsMHgxMiwweDBjLDB4OWMsMHg5MCwweDAwLDB4MDJ9IH0sCit7ICAxNiwweDMyNmQsMCx7MHhlNCwweDEyLDB4MGMsMHg5YywweDkwLDB4NzgsMHgwMSwweGU0LDB4NzUsMHhmMCwweDAzLDB4MTIsMHgwYywweGY0LDB4OTAsMHg3OH0gfSwKK3sgIDE2LDB4MzI3ZCwwLHsweDAwLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDc0LDB4MDIsMHgxMiwweDBjLDB4OGEsMHg5MCwweDc4fSB9LAoreyAgMTYsMHgzMjhkLDAsezB4MDAsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAxLDB4NzQsMHgwMiwweDEyLDB4MGN9IH0sCit7ICAxNiwweDMyOWQsMCx7MHg5YywweDkwLDB4MDAsMHgwMiwweGU0LDB4MTIsMHgwYywweDljLDB4OTAsMHg3OCwweDAxLDB4ZTQsMHg3NSwweGYwLDB4MDMsMHgxMn0gfSwKK3sgIDE2LDB4MzJhZCwwLHsweDBjLDB4ZjQsMHg5MCwweDc4LDB4MDAsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4NzQsMHgwMSwweDEyfSB9LAoreyAgMTYsMHgzMmJkLDAsezB4MGMsMHg4YSwweDkwLDB4NzgsMHgwMCwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDF9IH0sCit7ICAxNiwweDMyY2QsMCx7MHg3NCwweDAzLDB4MTIsMHgwYywweDljLDB4OTAsMHgwMCwweDAyLDB4ZTQsMHgxMiwweDBjLDB4OWMsMHg5MCwweDc4LDB4MDEsMHhlNH0gfSwKK3sgIDE2LDB4MzJkZCwwLHsweDc1LDB4ZjAsMHgwMywweDEyLDB4MGMsMHhmNCwweDkwLDB4NzgsMHgwMCwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwfSB9LAoreyAgMTYsMHgzMmVkLDAsezB4ZjksMHg3NCwweDEwLDB4MTIsMHgwYywweDhhLDB4OTAsMHg3OCwweDAwLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTB9IH0sCit7ICAxNiwweDMyZmQsMCx7MHhmOSwweDkwLDB4MDAsMHgwMSwweDc0LDB4MDYsMHgxMiwweDBjLDB4OWMsMHg5MCwweDAwLDB4MDIsMHhlNCwweDEyLDB4MGMsMHg5Y30gfSwKK3sgIDE2LDB4MzMwZCwwLHsweDkwLDB4NzgsMHgwMSwweGU0LDB4NzUsMHhmMCwweDAzLDB4MTIsMHgwYywweGY0LDB4OTAsMHg3OCwweDAwLDB4ZTAsMHhmYiwweGEzfSB9LAoreyAgMTYsMHgzMzFkLDAsezB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDc0LDB4MDIsMHgxMiwweDBjLDB4OGEsMHg5MCwweDc4LDB4MDAsMHhlMCwweGZiLDB4YTN9IH0sCit7ICAxNiwweDMzMmQsMCx7MHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAxLDB4NzQsMHgwNCwweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwMn0gfSwKK3sgIDE2LDB4MzMzZCwwLHsweGU0LDB4MTIsMHgwYywweDljLDB4OTAsMHg3OCwweDAxLDB4ZTQsMHg3NSwweGYwLDB4MDMsMHgxMiwweDBjLDB4ZjQsMHg5MCwweDc4fSB9LAoreyAgMTYsMHgzMzRkLDAsezB4MDAsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4NzQsMHgwMiwweDEyLDB4MGMsMHg4YSwweDkwLDB4Nzh9IH0sCit7ICAxNiwweDMzNWQsMCx7MHgwMCwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDEsMHg3NCwweDA0LDB4MTIsMHgwY30gfSwKK3sgIDE2LDB4MzM2ZCwwLHsweDljLDB4OTAsMHgwMCwweDAyLDB4NzQsMHgwNCwweDEyLDB4MGMsMHg5YywweDkwLDB4NzgsMHgwMSwweGU0LDB4NzUsMHhmMCwweDAzfSB9LAoreyAgMTYsMHgzMzdkLDAsezB4MTIsMHgwYywweGY0LDB4OTAsMHg3OCwweDAwLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDc0LDB4MDJ9IH0sCit7ICAxNiwweDMzOGQsMCx7MHgxMiwweDBjLDB4OGEsMHg5MCwweDc4LDB4MDAsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMH0gfSwKK3sgIDE2LDB4MzM5ZCwwLHsweDAxLDB4NzQsMHgwMywweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwMiwweDc0LDB4MDQsMHgxMiwweDBjLDB4OWMsMHg5MCwweDc4fSB9LAoreyAgMTYsMHgzM2FkLDAsezB4MDEsMHhlNCwweDc1LDB4ZjAsMHgwMywweDEyLDB4MGMsMHhmNCwweDkwLDB4NzgsMHgwMCwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmF9IH0sCit7ICAxNiwweDMzYmQsMCx7MHhhMywweGUwLDB4ZjksMHg3NCwweDAyLDB4MTIsMHgwYywweDhhLDB4OTAsMHg3OCwweDAwLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYX0gfSwKK3sgIDE2LDB4MzNjZCwwLHsweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMSwweDc0LDB4MDIsMHgxMiwweDBjLDB4OWMsMHg5MCwweDAwLDB4MDIsMHg3NCwweDA0fSB9LAoreyAgMTYsMHgzM2RkLDAsezB4MTIsMHgwYywweDljLDB4OTAsMHg3OCwweDAxLDB4ZTQsMHg3NSwweGYwLDB4MDMsMHgxMiwweDBjLDB4ZjQsMHg5MCwweDc4LDB4MDB9IH0sCit7ICAxNiwweDMzZWQsMCx7MHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4NzQsMHgwMiwweDEyLDB4MGMsMHg4YSwweDkwLDB4NzgsMHgwMH0gfSwKK3sgIDE2LDB4MzNmZCwwLHsweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDEsMHg3NCwweDAxLDB4MTIsMHgwYywweDljfSB9LAoreyAgIDgsMHgzNDBkLDAsezB4OTAsMHgwMCwweDAyLDB4NzQsMHgwNCwweDEyLDB4MGMsMHg5Y30gfSwKK3sgICAxLDB4MzQxNSwwLHsweDIyfSB9LAoreyAgMTYsMHgzNDE2LDAsezB4ZTQsMHhmZSwweDkwLDB4NzksMHgyMCwweGUwLDB4ZmQsMHhiNCwweDA1LDB4MTEsMHg5MCwweDc4LDB4MWYsMHg3NCwweDAxLDB4ZjB9IH0sCit7ICAxNiwweDM0MjYsMCx7MHhhMywweDc0LDB4NzgsMHhmMCwweGEzLDB4NzQsMHhiMiwweGYwLDB4NzUsMHgzNSwweDA3LDB4ZWQsMHhiNCwweDA2LDB4MTEsMHg5MH0gfSwKK3sgIDE2LDB4MzQzNiwwLHsweDc4LDB4MWYsMHg3NCwweDAxLDB4ZjAsMHhhMywweDc0LDB4NzgsMHhmMCwweGEzLDB4NzQsMHhmZiwweGYwLDB4NzUsMHgzNSwweDAzfSB9LAoreyAgMTYsMHgzNDQ2LDAsezB4OTAsMHg3OSwweDk5LDB4ZTAsMHgxNCwweDYwLDB4MTEsMHgxNCwweDYwLDB4NWIsMHgyNCwweDAyLDB4NjAsMHgwMiwweGMxLDB4MDZ9IH0sCit7ICAxNiwweDM0NTYsMCx7MHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3OSwweDk3LDB4ZTAsMHgxNCwweDcwLDB4M2UsMHhlNH0gfSwKK3sgIDE2LDB4MzQ2NiwwLHsweGZmLDB4ZWYsMHhjMywweDk1LDB4MzUsMHg1MCwweDJmLDB4Y2QsMHhlZSwweGNkLDB4MGUsMHg3NCwweDIxLDB4MmQsMHhmNSwweDgyfSB9LAoreyAgMTYsMHgzNDc2LDAsezB4ZTQsMHgzNCwweDc5LDB4ZjUsMHg4MywweGUwLDB4ZmQsMHg5MCwweDc4LDB4MWYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTN9IH0sCit7ICAxNiwweDM0ODYsMCx7MHhlMCwweGY5LDB4OTAsMHgwMCwweDAxLDB4ZWQsMHgxMiwweDBjLDB4OWMsMHg5MCwweDc4LDB4MjAsMHhlNCwweDc1LDB4ZjAsMHgwYn0gfSwKK3sgIDE2LDB4MzQ5NiwwLHsweDEyLDB4MGMsMHhmNCwweDBmLDB4ODAsMHhjYiwweDkwLDB4NzksMHg3NSwweDc0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0fSB9LAoreyAgMTYsMHgzNGE2LDAsezB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4NzksMHg5NywweGUwLDB4MjQsMHhmZSwweDYwLDB4NjMsMHgxNCwweDcwLDB4MDJ9IH0sCit7ICAxNiwweDM0YjYsMCx7MHhhMSwweDY0LDB4MTQsMHg3MCwweDAyLDB4YTEsMHhiMiwweDI0LDB4MDMsMHg2MCwweDAyLDB4YTEsMHhmZSwweGU0LDB4ZmYsMHhlZn0gfSwKK3sgIDE2LDB4MzRjNiwwLHsweGMzLDB4OTUsMHgzNSwweDUwLDB4NDQsMHhjZCwweGVlLDB4Y2QsMHgwZSwweDc0LDB4MjEsMHgyZCwweGY1LDB4ODIsMHhlNCwweDM0fSB9LAoreyAgMTYsMHgzNGQ2LDAsezB4NzksMHhmNSwweDgzLDB4ZTAsMHhmZCwweDkwLDB4NzgsMHgxZiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4Zjl9IH0sCit7ICAxNiwweDM0ZTYsMCx7MHg5MCwweDAwLDB4MDMsMHhlZCwweDEyLDB4MGMsMHg5YywweGNkLDB4ZWUsMHhjZCwweDBlLDB4NzQsMHgyMSwweDJkLDB4ZjUsMHg4Mn0gfSwKK3sgIDE2LDB4MzRmNiwwLHsweGU0LDB4MzQsMHg3OSwweGY1LDB4ODMsMHhlMCwweDkwLDB4MDAsMHgwNCwweDEyLDB4MGMsMHg5YywweDkwLDB4NzgsMHgyMCwweGU0fSB9LAoreyAgMTYsMHgzNTA2LDAsezB4NzUsMHhmMCwweDBiLDB4MTIsMHgwYywweGY0LDB4MGYsMHg4MCwweGI2LDB4OTAsMHg3OSwweDc1LDB4NzQsMHgwMSwweGYwLDB4MjJ9IH0sCit7ICAxNiwweDM1MTYsMCx7MHhlNCwweGZmLDB4ZWYsMHhjMywweDk1LDB4MzUsMHg0MCwweDAyLDB4YzEsMHgwZCwweGNkLDB4ZWUsMHhjZCwweDBlLDB4NzQsMHgyMX0gfSwKK3sgIDE2LDB4MzUyNiwwLHsweDJkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3OSwweGY1LDB4ODMsMHhlMCwweGZkLDB4OTAsMHg3OCwweDFmLDB4ZTAsMHhmYiwweGEzfSB9LAoreyAgMTYsMHgzNTM2LDAsezB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwNSwweGVkLDB4MTIsMHgwYywweDljLDB4Y2QsMHhlZSwweGNkLDB4MGV9IH0sCit7ICAxNiwweDM1NDYsMCx7MHg3NCwweDIxLDB4MmQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc5LDB4ZjUsMHg4MywweGUwLDB4OTAsMHgwMCwweDA2LDB4MTIsMHgwY30gfSwKK3sgIDE2LDB4MzU1NiwwLHsweDljLDB4OTAsMHg3OCwweDIwLDB4ZTQsMHg3NSwweGYwLDB4MGIsMHgxMiwweDBjLDB4ZjQsMHgwZiwweDgwLDB4YjQsMHhlNCwweGZmfSB9LAoreyAgMTYsMHgzNTY2LDAsezB4ZWYsMHhjMywweDk1LDB4MzUsMHg0MCwweDAyLDB4YzEsMHgwZCwweGNkLDB4ZWUsMHhjZCwweDBlLDB4NzQsMHgyMSwweDJkLDB4ZjV9IH0sCit7ICAxNiwweDM1NzYsMCx7MHg4MiwweGU0LDB4MzQsMHg3OSwweGY1LDB4ODMsMHhlMCwweGZkLDB4OTAsMHg3OCwweDFmLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYX0gfSwKK3sgIDE2LDB4MzU4NiwwLHsweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwNywweGVkLDB4MTIsMHgwYywweDljLDB4Y2QsMHhlZSwweGNkLDB4MGUsMHg3NCwweDIxfSB9LAoreyAgMTYsMHgzNTk2LDAsezB4MmQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc5LDB4ZjUsMHg4MywweGUwLDB4OTAsMHgwMCwweDA4LDB4MTIsMHgwYywweDljLDB4OTB9IH0sCit7ICAxNiwweDM1YTYsMCx7MHg3OCwweDIwLDB4ZTQsMHg3NSwweGYwLDB4MGIsMHgxMiwweDBjLDB4ZjQsMHgwZiwweDgwLDB4YjQsMHhlNCwweGZmLDB4ZWYsMHhjM30gfSwKK3sgIDE2LDB4MzViNiwwLHsweDk1LDB4MzUsMHg1MCwweDUzLDB4Y2QsMHhlZSwweGNkLDB4MGUsMHg3NCwweDIxLDB4MmQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc5fSB9LAoreyAgMTYsMHgzNWM2LDAsezB4ZjUsMHg4MywweGUwLDB4ZmQsMHg5MCwweDc4LDB4MWYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTB9IH0sCit7ICAxNiwweDM1ZDYsMCx7MHgwMCwweDA5LDB4ZWQsMHgxMiwweDBjLDB4OWMsMHhjZCwweGVlLDB4Y2QsMHgwZSwweDc0LDB4MjEsMHgyZCwweGY1LDB4ODIsMHhlNH0gfSwKK3sgIDE2LDB4MzVlNiwwLHsweDM0LDB4NzksMHhmNSwweDgzLDB4ZTAsMHg5MCwweDAwLDB4MGEsMHgxMiwweDBjLDB4OWMsMHg5MCwweDc4LDB4MjAsMHhlNCwweDc1fSB9LAoreyAgMTYsMHgzNWY2LDAsezB4ZjAsMHgwYiwweDEyLDB4MGMsMHhmNCwweDBmLDB4ODAsMHhiNiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjJ9IH0sCit7ICAgNywweDM2MDYsMCx7MHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMH0gfSwKK3sgICAxLDB4MzYwZCwwLHsweDIyfSB9LAoreyAgMTYsMHgzNjBlLDAsezB4ZTQsMHhmZSwweDkwLDB4NzksMHgyMCwweGUwLDB4ZmQsMHhiNCwweDA1LDB4MTAsMHg5MCwweDc4LDB4MjgsMHg3NCwweDAxLDB4ZjB9IH0sCit7ICAxNiwweDM2MWUsMCx7MHhhMywweDc0LDB4NzgsMHhmMCwweGEzLDB4NzQsMHhiMiwweGYwLDB4N2YsMHgwNywweGVkLDB4YjQsMHgwNiwweDEwLDB4OTAsMHg3OH0gfSwKK3sgIDE2LDB4MzYyZSwwLHsweDI4LDB4NzQsMHgwMSwweGYwLDB4YTMsMHg3NCwweDc4LDB4ZjAsMHhhMywweDc0LDB4ZmYsMHhmMCwweDdmLDB4MDMsMHg5MCwweDc4fSB9LAoreyAgMTYsMHgzNjNlLDAsezB4MjgsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4MTIsMHgwYywweDQ0LDB4ZmQsMHg5MCwweDdmLDB4ZWF9IH0sCit7ICAxNiwweDM2NGUsMCx7MHhlMCwweDZkLDB4NjAsMHgxMiwweGVlLDB4YzMsMHg5ZiwweDUwLDB4MGQsMHg5MCwweDc4LDB4MjksMHhlNCwweDc1LDB4ZjAsMHgwYn0gfSwKK3sgIDE2LDB4MzY1ZSwwLHsweDEyLDB4MGMsMHhmNCwweDBlLDB4ODAsMHhkOCwweDkwLDB4N2YsMHhlYiwweGUwLDB4MTQsMHg2MCwweDExLDB4MTQsMHg2MCwweDQ2fSB9LAoreyAgMTYsMHgzNjZlLDAsezB4MjQsMHgwMiwweDYwLDB4MDIsMHhlMSwweDlhLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2Z9IH0sCit7ICAxNiwweDM2N2UsMCx7MHhlOSwweGUwLDB4MjQsMHg3ZiwweDcwLDB4MjgsMHhlZSwweDZmLDB4NzAsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMX0gfSwKK3sgIDE2LDB4MzY4ZSwwLHsweGYwLDB4MjIsMHg5MCwweDc4LDB4MjgsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAxfSB9LAoreyAgMTYsMHgzNjllLDAsezB4MTIsMHgwYywweDVkLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2Z9IH0sCit7ICAxNiwweDM2YWUsMCx7MHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4N2UsMHg2MCwweDQwLDB4MTQsMHg2MH0gfSwKK3sgIDE2LDB4MzZiZSwwLHsweDZmLDB4MTQsMHg3MCwweDAyLDB4ZTEsMHg2MCwweDI0LDB4MDMsMHg2MCwweDAyLDB4ZTEsMHg5MiwweGVlLDB4NmYsMHg3MCwweDA4fSB9LAoreyAgMTYsMHgzNmNlLDAsezB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4NzgsMHgyOCwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmF9IH0sCit7ICAxNiwweDM2ZGUsMCx7MHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDMsMHgxMiwweDBjLDB4NWQsMHg5MCwweDdmLDB4MDAsMHhmMCwweDkwLDB4MDAsMHgwNH0gfSwKK3sgIDE2LDB4MzZlZSwwLHsweDEyLDB4MGMsMHg1ZCwweDkwLDB4N2YsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMiwweGYwLDB4MjIsMHhlZSwweDZmfSB9LAoreyAgMTYsMHgzNmZlLDAsezB4NzAsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDc4LDB4MjgsMHhlMCwweGZiLDB4YTN9IH0sCit7ICAxNiwweDM3MGUsMCx7MHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDA1LDB4MTIsMHgwYywweDVkLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHg5MH0gfSwKK3sgIDE2LDB4MzcxZSwwLHsweDAwLDB4MDYsMHgxMiwweDBjLDB4NWQsMHg5MCwweDdmLDB4MDEsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDIsMHhmMCwweDIyfSB9LAoreyAgMTYsMHgzNzJlLDAsezB4ZWUsMHg2ZiwweDcwLDB4MDgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3OCwweDI4LDB4ZTB9IH0sCit7ICAxNiwweDM3M2UsMCx7MHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwNywweDEyLDB4MGMsMHg1ZCwweDkwLDB4N2YsMHgwMH0gfSwKK3sgIDE2LDB4Mzc0ZSwwLHsweGYwLDB4OTAsMHgwMCwweDA4LDB4MTIsMHgwYywweDVkLDB4OTAsMHg3ZiwweDAxLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAyfSB9LAoreyAgMTYsMHgzNzVlLDAsezB4ZjAsMHgyMiwweGVlLDB4NmYsMHg3MCwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4Nzh9IH0sCit7ICAxNiwweDM3NmUsMCx7MHgyOCwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDksMHgxMiwweDBjLDB4NWQsMHg5MH0gfSwKK3sgIDE2LDB4Mzc3ZSwwLHsweDdmLDB4MDAsMHhmMCwweDkwLDB4MDAsMHgwYSwweDEyLDB4MGMsMHg1ZCwweDkwLDB4N2YsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGI1fSB9LAoreyAgMTYsMHgzNzhlLDAsezB4NzQsMHgwMiwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTB9IH0sCit7ICAgMywweDM3OWUsMCx7MHg0NCwweDAxLDB4ZjB9IH0sCit7ICAgMSwweDM3YTEsMCx7MHgyMn0gfSwKK3sgIDE2LDB4MzdhMiwwLHsweGMwLDB4ZTAsMHhjMCwweGYwLDB4YzAsMHg4MywweGMwLDB4ODIsMHhjMCwweGQwLDB4ZTgsMHhjMCwweGUwLDB4ZTksMHhjMCwweGUwfSB9LAoreyAgMTYsMHgzN2IyLDAsezB4ZWEsMHhjMCwweGUwLDB4ZWIsMHhjMCwweGUwLDB4ZWMsMHhjMCwweGUwLDB4ZWQsMHhjMCwweGUwLDB4ZWUsMHhjMCwweGUwLDB4ZWZ9IH0sCit7ICAxNiwweDM3YzIsMCx7MHhjMCwweGUwLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgxMCwweGYwLDB4OTAsMHg3OSwweDgzLDB4ZTAsMHg1NH0gfSwKK3sgIDE2LDB4MzdkMiwwLHsweGZkLDB4ZjAsMHgxMiwweDJmLDB4ZGYsMHhkMCwweGUwLDB4ZmYsMHhkMCwweGUwLDB4ZmUsMHhkMCwweGUwLDB4ZmQsMHhkMCwweGUwfSB9LAoreyAgMTYsMHgzN2UyLDAsezB4ZmMsMHhkMCwweGUwLDB4ZmIsMHhkMCwweGUwLDB4ZmEsMHhkMCwweGUwLDB4ZjksMHhkMCwweGUwLDB4ZjgsMHhkMCwweGQwLDB4ZDB9IH0sCit7ICAgOCwweDM3ZjIsMCx7MHg4MiwweGQwLDB4ODMsMHhkMCwweGYwLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgIDYsMHgzN2ZhLDAsezB4NTMsMHg5MSwweGJmLDB4ZDIsMHgyNiwweDMyfSB9LAoreyAgMTYsMHgzODAwLDAsezB4ZTQsMHhmZSwweDkwLDB4NzksMHgyMCwweGUwLDB4ZmQsMHhiNCwweDA1LDB4MTAsMHg5MCwweDc4LDB4MjIsMHg3NCwweDAxLDB4ZjB9IH0sCit7ICAxNiwweDM4MTAsMCx7MHhhMywweDc0LDB4NzgsMHhmMCwweGEzLDB4NzQsMHhiMiwweGYwLDB4N2YsMHgwNywweGVkLDB4YjQsMHgwNiwweDEwLDB4OTAsMHg3OH0gfSwKK3sgIDE2LDB4MzgyMCwwLHsweDIyLDB4NzQsMHgwMSwweGYwLDB4YTMsMHg3NCwweDc4LDB4ZjAsMHhhMywweDc0LDB4ZmYsMHhmMCwweDdmLDB4MDMsMHg5MCwweDc4fSB9LAoreyAgMTYsMHgzODMwLDAsezB4MjIsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4MTIsMHgwYywweDQ0LDB4ZmQsMHg5MCwweDc5LDB4OTh9IH0sCit7ICAxNiwweDM4NDAsMCx7MHhlMCwweDZkLDB4NjAsMHgxMiwweGVlLDB4YzMsMHg5ZiwweDUwLDB4MGQsMHg5MCwweDc4LDB4MjMsMHhlNCwweDc1LDB4ZjAsMHgwYn0gfSwKK3sgIDE2LDB4Mzg1MCwwLHsweDEyLDB4MGMsMHhmNCwweDBlLDB4ODAsMHhkOCwweDkwLDB4NzksMHg5OSwweGUwLDB4MTQsMHg2MCwweDExLDB4MTQsMHg2MCwweDQ4fSB9LAoreyAgMTYsMHgzODYwLDAsezB4MjQsMHgwMiwweDYwLDB4MDIsMHgyMSwweDg1LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4Nzl9IH0sCit7ICAxNiwweDM4NzAsMCx7MHg5NywweGUwLDB4MTQsMHg3MCwweDJiLDB4ZWUsMHg2ZiwweDcwLDB4MDksMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMH0gfSwKK3sgIDE2LDB4Mzg4MCwwLHsweDgwLDB4MTcsMHg5MCwweDc5LDB4MjEsMHhlMCwweGZkLDB4OTAsMHg3OCwweDIyLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzfSB9LAoreyAgMTYsMHgzODkwLDAsezB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMSwweGVkLDB4MTIsMHgwYywweDljLDB4OTAsMHg3OSwweDc1LDB4NzQsMHgwMSwweGYwLDB4MjJ9IH0sCit7ICAxNiwweDM4YTAsMCx7MHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3OSwweDk3LDB4ZTAsMHgyNCwweGZlLDB4NjAsMHg0M30gfSwKK3sgIDE2LDB4MzhiMCwwLHsweDE0LDB4NjAsMHg2ZSwweDE0LDB4NzAsMHgwMiwweDIxLDB4NGYsMHgyNCwweDAzLDB4NjAsMHgwMiwweDIxLDB4N2QsMHhlZSwweDZmfSB9LAoreyAgMTYsMHgzOGMwLDAsezB4NzAsMHgwOSwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4ODAsMHgyMSwweDkwLDB4NzksMHgyMSwweGUwLDB4ZmR9IH0sCit7ICAxNiwweDM4ZDAsMCx7MHg5MCwweDc4LDB4MjIsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAzLDB4ZWQsMHgxMn0gfSwKK3sgIDE2LDB4MzhlMCwwLHsweDBjLDB4OWMsMHg5MCwweDc5LDB4MjIsMHhlMCwweDkwLDB4MDAsMHgwNCwweDEyLDB4MGMsMHg5YywweDkwLDB4NzksMHg3NSwweDc0fSB9LAoreyAgMTYsMHgzOGYwLDAsezB4MDEsMHhmMCwweDIyLDB4ZWUsMHg2ZiwweDcwLDB4MDgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTB9IH0sCit7ICAxNiwweDM5MDAsMCx7MHg3OSwweDIxLDB4ZTAsMHhmZCwweDkwLDB4NzgsMHgyMiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MH0gfSwKK3sgIDE2LDB4MzkxMCwwLHsweDAwLDB4MDUsMHhlZCwweDEyLDB4MGMsMHg5YywweDkwLDB4NzksMHgyMiwweGUwLDB4OTAsMHgwMCwweDA2LDB4MTIsMHgwYywweDljfSB9LAoreyAgMTYsMHgzOTIwLDAsezB4MjIsMHhlZSwweDZmLDB4NzAsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDc5LDB4MjF9IH0sCit7ICAxNiwweDM5MzAsMCx7MHhlMCwweGZkLDB4OTAsMHg3OCwweDIyLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwN30gfSwKK3sgIDE2LDB4Mzk0MCwwLHsweGVkLDB4MTIsMHgwYywweDljLDB4OTAsMHg3OSwweDIyLDB4ZTAsMHg5MCwweDAwLDB4MDgsMHgxMiwweDBjLDB4OWMsMHgyMiwweGVlfSB9LAoreyAgMTYsMHgzOTUwLDAsezB4NmYsMHg3MCwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4NzksMHgyMSwweGUwLDB4ZmV9IH0sCit7ICAxNiwweDM5NjAsMCx7MHg5MCwweDc4LDB4MjIsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDA5LDB4ZWUsMHgxMn0gfSwKK3sgIDE2LDB4Mzk3MCwwLHsweDBjLDB4OWMsMHg5MCwweDc5LDB4MjIsMHhlMCwweDkwLDB4MDAsMHgwYSwweDEyLDB4MGMsMHg5YywweDIyLDB4OTAsMHg3ZiwweGI0fSB9LAoreyAgMTIsMHgzOTgwLDAsezB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfSB9LAoreyAgIDEsMHgzOThjLDAsezB4MjJ9IH0sCit7ICAxNiwweDM5OGQsMCx7MHhhMiwweGFmLDB4ZTQsMHgzMywweGY1LDB4MTIsMHhlNCwweDkwLDB4NzksMHg4MywweGYwLDB4MTIsMHgyZiwweGRmLDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4Mzk5ZCwwLHsweGUwLDB4NzQsMHg5MCwweGYwLDB4OTAsMHg3ZiwweGUxLDB4NzQsMHgwNCwweGYwLDB4ZTQsMHg5MCwweDdmLDB4ZGQsMHhmMCwweDkwfSB9LAoreyAgMTYsMHgzOWFkLDAsezB4N2YsMHhhMSwweGYwLDB4NTMsMHg4ZSwweGY4LDB4NzUsMHg4OCwweDA1LDB4NzUsMHhiOCwweDIwLDB4NzUsMHhmOCwweDAxLDB4NDN9IH0sCit7ICAxNiwweDM5YmQsMCx7MHg4ZSwweDMwLDB4ZjUsMHhjOCwweDc1LDB4Y2EsMHg3ZiwweDc1LDB4Y2IsMHhmOCwweDQzLDB4YTgsMHgyMCwweDkwLDB4NzksMHg3NH0gfSwKK3sgIDE2LDB4MzljZCwwLHsweDA0LDB4ZjAsMHhjMiwweDIyLDB4ZTQsMHhmNSwweDBmLDB4OTAsMHg3OSwweDc4LDB4ZjAsMHhhMywweGYwLDB4OTAsMHg3OSwweDYyfSB9LAoreyAgMTYsMHgzOWRkLDAsezB4ZjAsMHhhMywweGYwLDB4YTMsMHhmMCwweDkwLDB4NzksMHg2NiwweGYwLDB4YTMsMHhmMCwweDkwLDB4NzksMHg3YiwweGYwLDB4YTN9IH0sCit7ICAxNiwweDM5ZWQsMCx7MHhmMCwweDkwLDB4NzksMHg4NCwweGYwLDB4OTAsMHg3OSwweDdkLDB4ZjAsMHg5MCwweDc5LDB4NzUsMHhmMCwweGEzLDB4ZjAsMHhhM30gfSwKK3sgIDE2LDB4MzlmZCwwLHsweGYwLDB4YzIsMHgyMywweGMyLDB4MjQsMHhjMiwweDI1LDB4YzIsMHgyNiwweGMyLDB4MjAsMHg5MCwweDdmLDB4OWIsMHhlMCwweGY1fSB9LAoreyAgMTYsMHgzYTBkLDAsezB4MGEsMHg1NCwweDIwLDB4ZjUsMHgwYSwweDcwLDB4MDYsMHg5MCwweDc5LDB4N2UsMHhmMCwweDgwLDB4MDYsMHg5MCwweDc5LDB4N2V9IH0sCit7ICAxNiwweDNhMWQsMCx7MHg3NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4OWIsMHhlMCwweGY1LDB4MGEsMHg1NCwweDAyLDB4ZjUsMHgwYSwweDcwLDB4MDYsMHg5MH0gfSwKK3sgIDE2LDB4M2EyZCwwLHsweDc5LDB4N2YsMHhmMCwweDgwLDB4MDYsMHg5MCwweDc5LDB4N2YsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4NzgsMHg3NCwweDAyfSB9LAoreyAgMTYsMHgzYTNkLDAsezB4ZjAsMHg5MCwweDc5LDB4ODQsMHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4OTAsMHg3OSwweDdmLDB4ZTAsMHhiNCwweDAxLDB4MDl9IH0sCit7ICAxNiwweDNhNGQsMCx7MHg5MCwweDc5LDB4NzksMHhlMCwweDU0LDB4ZmUsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDEsMHhmMH0gfSwKK3sgIDE2LDB4M2E1ZCwwLHsweDkwLDB4NzksMHg3OSwweGUwLDB4OTAsMHg3OSwweDg0LDB4ZjAsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4NzgsMHg3NCwweDAxfSB9LAoreyAgMTYsMHgzYTZkLDAsezB4ZjAsMHg5MCwweDc5LDB4N2MsMHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4OTAsMHg3OSwweDdlLDB4ZTAsMHhiNCwweDAxLDB4MDl9IH0sCit7ICAxNiwweDNhN2QsMCx7MHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDQsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc5LDB4NzksMHhlMCwweDU0LDB4ZmIsMHhmMH0gfSwKK3sgIDE2LDB4M2E4ZCwwLHsweDkwLDB4NzksMHg3OSwweGUwLDB4OTAsMHg3OSwweDdjLDB4ZjAsMHgxMiwweDBiLDB4YTIsMHhlNCwweDkwLDB4NzksMHg3OCwweGYwfSB9LAoreyAgMTYsMHgzYTlkLDAsezB4YTMsMHgwNCwweGYwLDB4ZTQsMHg5MCwweDc5LDB4ODgsMHhmMCwweDEyLDB4MGIsMHhhMiwweDkwLDB4N2YsMHhmYywweDc0LDB4ZGR9IH0sCit7ICAxNiwweDNhYWQsMCx7MHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmYsMHhmMCwweDkwLDB4NzksMHg3OCwweDc0LDB4MDEsMHhmMCwweGEzLDB4ZjAsMHgxMn0gfSwKK3sgIDE2LDB4M2FiZCwwLHsweDBiLDB4YTIsMHhlNCwweDkwLDB4NzksMHg3YSwweGYwLDB4OTAsMHg3OSwweDgzLDB4MDQsMHhmMCwweDEyLDB4MmYsMHhkZiwweGU0fSB9LAoreyAgMTYsMHgzYWNkLDAsezB4OTAsMHg3OSwweDMwLDB4ZjAsMHg5MCwweDc5LDB4ODUsMHhmMCwweGEzLDB4ZjAsMHhhMywweGYwLDB4MTIsMHgyZSwweDk0LDB4OTB9IH0sCit7ICAxNiwweDNhZGQsMCx7MHg3OSwweDJkLDB4NzQsMHgwMiwweGYwLDB4OTAsMHg3OSwweDg4LDB4MTQsMHhmMCwweGMyLDB4MmYsMHhlNCwweDkwLDB4NzksMHg2OH0gfSwKK3sgIDE2LDB4M2FlZCwwLHsweGYwLDB4OTAsMHg3OSwweDhhLDB4ZjAsMHg5MCwweDc5LDB4NmEsMHhmMCwweGEzLDB4ZjAsMHg3NSwweDEzLDB4MDgsMHg3NSwweDE0fSB9LAoreyAgMTYsMHgzYWZkLDAsezB4MDgsMHhmNSwweDE2LDB4ZjUsMHgxNSwweGY1LDB4MTcsMHg5MCwweDc5LDB4OGMsMHhmMCwweDkwLDB4NzksMHg4YiwweGYwLDB4MjJ9IH0sCit7ICAxNiwweDNiMGQsMCx7MHg3YiwweDAxLDB4N2EsMHg3OCwweDc5LDB4NTgsMHg5MCwweDc4LDB4MDMsMHhlYiwweGYwLDB4YTMsMHhlYSwweGYwLDB4YTMsMHhlOX0gfSwKK3sgIDE2LDB4M2IxZCwwLHsweGYwLDB4NzQsMHg0MCwweDEyLDB4MGMsMHg4YSwweDkwLDB4NzgsMHgwMywweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwfSB9LAoreyAgMTYsMHgzYjJkLDAsezB4ZjksMHg5MCwweDAwLDB4MDEsMHg3NCwweDBhLDB4MTIsMHgwYywweDljLDB4OTAsMHgwMCwweDAyLDB4MTIsMHgwZCwweGY2LDB4MDB9IH0sCit7ICAxNiwweDNiM2QsMCx7MHgwMCwweGJiLDB4ODAsMHg5MCwweDAwLDB4MDYsMHgxMiwweDBkLDB4ZjYsMHgwMCwweDAwLDB4YWMsMHg0NCwweDkwLDB4MDAsMHgwYX0gfSwKK3sgIDE2LDB4M2I0ZCwwLHsweDEyLDB4MGQsMHhmNiwweDAwLDB4MDEsMHg3NywweDAwLDB4OTAsMHg3OCwweDA0LDB4ZTQsMHg3NSwweGYwLDB4MGYsMHgxMiwweDBjfSB9LAoreyAgMTYsMHgzYjVkLDAsezB4ZjQsMHg5MCwweDc4LDB4MDMsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4NzQsMHg0MCwweDEyLDB4MGN9IH0sCit7ICAxNiwweDNiNmQsMCx7MHg4YSwweDkwLDB4NzgsMHgwMywweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDEsMHg3NH0gfSwKK3sgIDE2LDB4M2I3ZCwwLHsweDhjLDB4MTIsMHgwYywweDljLDB4OTAsMHgwMCwweDAyLDB4MTIsMHgwZCwweGY2LDB4MDAsMHgwMCwweGJiLDB4ODAsMHg5MCwweDAwfSB9LAoreyAgMTYsMHgzYjhkLDAsezB4MDYsMHgxMiwweDBkLDB4ZjYsMHgwMCwweDAwLDB4YWMsMHg0NCwweDkwLDB4MDAsMHgwYSwweDEyLDB4MGQsMHhmNiwweDAwLDB4MDF9IH0sCit7ICAxNiwweDNiOWQsMCx7MHg3NywweDAwLDB4OTAsMHg3OCwweDA0LDB4ZTQsMHg3NSwweGYwLDB4MGYsMHgxMiwweDBjLDB4ZjQsMHg5MCwweDc4LDB4MDMsMHhlMH0gfSwKK3sgIDE2LDB4M2JhZCwwLHsweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4NzQsMHg0MCwweDEyLDB4MGMsMHg4YSwweDkwLDB4NzgsMHgwMywweGUwfSB9LAoreyAgMTYsMHgzYmJkLDAsezB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDEsMHg3NCwweDhmLDB4MTIsMHgwYywweDljLDB4OTB9IH0sCit7ICAxNiwweDNiY2QsMCx7MHg3OCwweDA0LDB4ZTQsMHg3NSwweGYwLDB4MGYsMHgxMiwweDBjLDB4ZjQsMHg5MCwweDc4LDB4MDMsMHhlMCwweGZiLDB4YTMsMHhlMH0gfSwKK3sgIDE2LDB4M2JkZCwwLHsweGZhLDB4YTMsMHhlMCwweGY5LDB4NzQsMHg0MSwweDEyLDB4MGMsMHg4YSwweDkwLDB4NzgsMHgwMywweGUwLDB4ZmIsMHhhMywweGUwfSB9LAoreyAgMTYsMHgzYmVkLDAsezB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDEsMHg3NCwweDg0LDB4MTIsMHgwYywweDljLDB4OTAsMHg3OCwweDA0LDB4ZTR9IH0sCit7ICAxNiwweDNiZmQsMCx7MHg3NSwweGYwLDB4MGYsMHgxMiwweDBjLDB4ZjQsMHg5MCwweDc4LDB4MDMsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMH0gfSwKK3sgIDE2LDB4M2MwZCwwLHsweGY5LDB4NzQsMHg2MSwweDEyLDB4MGMsMHg4YSwweDkwLDB4NzgsMHgwMywweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwfSB9LAoreyAgMTYsMHgzYzFkLDAsezB4ZjksMHg5MCwweDAwLDB4MDEsMHg3NCwweDgxLDB4MTIsMHgwYywweDljLDB4OTAsMHg3OCwweDA0LDB4ZTQsMHg3NSwweGYwLDB4MGZ9IH0sCit7ICAxNiwweDNjMmQsMCx7MHgxMiwweDBjLDB4ZjQsMHg5MCwweDc4LDB4MDMsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4NzQsMHg2MX0gfSwKK3sgIDE2LDB4M2MzZCwwLHsweDEyLDB4MGMsMHg4YSwweDkwLDB4NzgsMHgwMywweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwfSB9LAoreyAgIDYsMHgzYzRkLDAsezB4MDEsMHg3NCwweDAxLDB4MTIsMHgwYywweDljfSB9LAoreyAgIDEsMHgzYzUzLDAsezB4MjJ9IH0sCit7ICAxNiwweDNjNTQsMCx7MHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4YzAsMHhkMCwweGU4LDB4YzAsMHhlMCwweGU5LDB4YzAsMHhlMH0gfSwKK3sgIDE2LDB4M2M2NCwwLHsweGVhLDB4YzAsMHhlMCwweGViLDB4YzAsMHhlMCwweGVjLDB4YzAsMHhlMCwweGVkLDB4YzAsMHhlMCwweGVlLDB4YzAsMHhlMCwweGVmfSB9LAoreyAgIDIsMHgzYzc0LDAsezB4YzAsMHhlMH0gfSwKK3sgIDE2LDB4M2M3NiwwLHsweDkwLDB4N2YsMHhhMiwweGUwLDB4ZjUsMHgwYiwweDkwLDB4N2YsMHg3NCwweGUwLDB4OTAsMHg3OSwweDcwLDB4ZjAsMHg5MCwweDdmfSB9LAoreyAgMTYsMHgzYzg2LDAsezB4NzUsMHhlMCwweDkwLDB4NzksMHg3MSwweGYwLDB4OTAsMHg3OSwweDgzLDB4ZTAsMHhmZiwweGZlLDB4NTQsMHgwMiwweGZlLDB4NzB9IH0sCit7ICAxNiwweDNjOTYsMCx7MHgwZCwweGVmLDB4NDQsMHgwMiwweGYwLDB4MTIsMHgyZiwweGRmLDB4OTAsMHg3OSwweDc0LDB4NzQsMHgwMSwweGYwLDB4ZTUsMHgwYn0gfSwKK3sgIDE2LDB4M2NhNiwwLHsweDIwLDB4ZTIsMHgyOCwweDkwLDB4NzksMHg3MCwweGUwLDB4ZmUsMHhhMywweGUwLDB4N2MsMHgwMCwweDI0LDB4MDAsMHhmNSwweDExfSB9LAoreyAgMTYsMHgzY2I2LDAsezB4ZWMsMHgzZSwweGY1LDB4MTAsMHg5MCwweDc5LDB4ODIsMHhlMCwweGZkLDB4YWUsMHgxMCwweGFmLDB4MTEsMHgxMiwweDBjLDB4YmV9IH0sCit7ICAxNiwweDNjYzYsMCx7MHg5MCwweDc5LDB4NzAsMHhlZiwweGYwLDB4OTAsMHg3OSwweDg5LDB4NzQsMHgwMSwweGYwLDB4MTIsMHg0OCwweDQzLDB4MTIsMHg0OH0gfSwKK3sgIDE2LDB4M2NkNiwwLHsweDc2LDB4OTAsMHg3OSwweDg5LDB4ZTAsMHg2NCwweDAxLDB4NzAsMHgzMiwweDEyLDB4NDEsMHgwOCwweDkwLDB4NzksMHg4OSwweGU0fSB9LAoreyAgMTYsMHgzY2U2LDAsezB4ZjAsMHg5MCwweDdmLDB4OTgsMHhlMCwweDQ0LDB4NDAsMHhmMCwweDkwLDB4N2YsMHg5ZSwweGUwLDB4NDQsMHg0MCwweGYwLDB4OTB9IH0sCit7ICAxNiwweDNjZjYsMCx7MHg3ZiwweDk1LDB4NzQsMHg4MCwweGYwLDB4NzUsMHhlOCwweDAxLDB4MTIsMHgwOSwweDMyLDB4NzUsMHhlOCwweDBkLDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4M2QwNiwwLHsweDk1LDB4NzQsMHhjMCwweGYwLDB4NzUsMHhlOCwweDBkLDB4ZDIsMHgyMCwweDgwLDB4MDUsMHg3NSwweGU4LDB4MDEsMHhjMiwweDIwfSB9LAoreyAgMTYsMHgzZDE2LDAsezB4MjAsMHgyMCwweDJiLDB4OTAsMHg3OSwweDJkLDB4ZTAsMHhmZiwweGI0LDB4MDEsMHgwOSwweDc1LDB4MGMsMHg2NywweDc1LDB4MGR9IH0sCit7ICAxNiwweDNkMjYsMCx7MHgwNiwweDc1LDB4MGUsMHgwYiwweGVmLDB4YjQsMHgwMiwweDA5LDB4NzUsMHgwYywweDAwLDB4NzUsMHgwZCwweDAwLDB4NzUsMHgwZX0gfSwKK3sgIDE2LDB4M2QzNiwwLHsweDBjLDB4ZWYsMHhiNCwweDAzLDB4MDksMHg3NSwweDBjLDB4MDAsMHg3NSwweDBkLDB4MDAsMHg3NSwweDBlLDB4MTgsMHg3NSwweGNhfSB9LAoreyAgMTYsMHgzZDQ2LDAsezB4NmYsMHg3NSwweGNiLDB4ZmUsMHhkMiwweGNhLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwMiwweGYwLDB4ZjB9IH0sCit7ICAxNiwweDNkNTYsMCx7MHhkMCwweGUwLDB4ZmYsMHhkMCwweGUwLDB4ZmUsMHhkMCwweGUwLDB4ZmQsMHhkMCwweGUwLDB4ZmMsMHhkMCwweGUwLDB4ZmIsMHhkMH0gfSwKK3sgIDE2LDB4M2Q2NiwwLHsweGUwLDB4ZmEsMHhkMCwweGUwLDB4ZjksMHhkMCwweGUwLDB4ZjgsMHhkMCwweGQwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGYwfSB9LAoreyAgIDMsMHgzZDc2LDAsezB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTYsMHgzZDc5LDAsezB4NzUsMHgzMywweDI1LDB4NzUsMHgzNCwweDI0LDB4OTAsMHg3OSwweDVjLDB4NzQsMHgwMSwweGYwLDB4YTMsMHg3NCwweDc4LDB4ZjB9IH0sCit7ICAxNiwweDNkODksMCx7MHhhMywweDc0LDB4YjIsMHhmMCwweDIwLDB4MmYsMHgwMiwweGMxLDB4MTcsMHhlNCwweGY1LDB4MzUsMHg3NSwweDIyLDB4MDEsMHg5MH0gfSwKK3sgIDE2LDB4M2Q5OSwwLHsweDc5LDB4NWMsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDA0LDB4MTIsMHgwYywweDVkfSB9LAoreyAgMTYsMHgzZGE5LDAsezB4ZjUsMHgzNiwweDc1LDB4MzUsMHgwNiwweDc0LDB4NDIsMHgyNSwweDM1LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3OSwweGY1LDB4ODN9IH0sCit7ICAxNiwweDNkYjksMCx7MHhlNSwweDM2LDB4ZjAsMHgwNSwweDM1LDB4ZTUsMHgzNSwweGI0LDB4MGMsMHhlYiwweGU1LDB4MzUsMHhjMywweDk0LDB4MGQsMHg0MH0gfSwKK3sgIDE2LDB4M2RjOSwwLHsweDAyLDB4YzEsMHg5OCwweGU1LDB4MjIsMHg2NCwweDAxLDB4NjAsMHgwMiwweGMxLDB4OTgsMHg5MCwweDdmLDB4YTUsMHhlMCwweDQ0fSB9LAoreyAgMTYsMHgzZGQ5LDAsezB4ODAsMHhmMCwweDkwLDB4N2YsMHhhNiwweGU1LDB4MzMsMHhmMCwweDEyLDB4NDYsMHhjMCwweDc0LDB4NGYsMHgyNSwweDM1LDB4ZjV9IH0sCit7ICAxNiwweDNkZTksMCx7MHg4MiwweGU0LDB4MzQsMHg3OSwweGY1LDB4ODMsMHhlMCwweDkwLDB4N2YsMHhhNiwweGYwLDB4MTIsMHg0NiwweGMwLDB4NzQsMHg0Mn0gfSwKK3sgIDE2LDB4M2RmOSwwLHsweDI1LDB4MzUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc5LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3ZiwweGE2LDB4ZjAsMHgxMiwweDQ2fSB9LAoreyAgMTYsMHgzZTA5LDAsezB4YzAsMHg5MCwweDdmLDB4YTUsMHg3NCwweDQwLDB4ZjAsMHgxMiwweDBhLDB4Y2QsMHgwNSwweDM1LDB4ODAsMHhhYywweGU0LDB4ZjV9IH0sCit7ICAxNiwweDNlMTksMCx7MHgzNSwweDc1LDB4MjIsMHgwMSwweDkwLDB4NzksMHg1YywweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MH0gfSwKK3sgIDE2LDB4M2UyOSwwLHsweDAwLDB4MDQsMHgxMiwweDBjLDB4NWQsMHhmNSwweDM2LDB4NzUsMHgzNSwweDA2LDB4NzQsMHgzNSwweDI1LDB4MzUsMHhmNSwweDgyfSB9LAoreyAgMTYsMHgzZTM5LDAsezB4ZTQsMHgzNCwweDc5LDB4ZjUsMHg4MywweGU1LDB4MzYsMHhmMCwweDA1LDB4MzUsMHhlNSwweDM1LDB4YjQsMHgwYywweGViLDB4ZTV9IH0sCit7ICAxNiwweDNlNDksMCx7MHgzNSwweGMzLDB4OTQsMHgwZCwweDUwLDB4NDksMHhlNSwweDIyLDB4NjQsMHgwMSwweDcwLDB4NDMsMHg5MCwweDdmLDB4YTUsMHhlMH0gfSwKK3sgIDE2LDB4M2U1OSwwLHsweDQ0LDB4ODAsMHhmMCwweDkwLDB4N2YsMHhhNiwweGU1LDB4MzMsMHhmMCwweDEyLDB4NDYsMHhjMCwweDc0LDB4NGYsMHgyNSwweDM1fSB9LAoreyAgMTYsMHgzZTY5LDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3OSwweGY1LDB4ODMsMHhlMCwweDkwLDB4N2YsMHhhNiwweGYwLDB4MTIsMHg0NiwweGMwLDB4NzR9IH0sCit7ICAxNiwweDNlNzksMCx7MHgzNSwweDI1LDB4MzUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc5LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3ZiwweGE2LDB4ZjAsMHgxMn0gfSwKK3sgIDE1LDB4M2U4OSwwLHsweDQ2LDB4YzAsMHg5MCwweDdmLDB4YTUsMHg3NCwweDQwLDB4ZjAsMHgxMiwweDBhLDB4Y2QsMHgwNSwweDM1LDB4ODAsMHhiMH0gfSwKK3sgICAxLDB4M2U5OCwwLHsweDIyfSB9LAoreyAgMTYsMHgzZTk5LDAsezB4OTAsMHg3OCwweDA5LDB4NzQsMHgwMSwweGYwLDB4YTMsMHg3NCwweDc4LDB4ZjAsMHhhMywweDc0LDB4YjIsMHhmMCwweGU0LDB4ZmZ9IH0sCit7ICAxNiwweDNlYTksMCx7MHhmZSwweDkwLDB4NzgsMHgwOSwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHhlZiwweDEyLDB4MGMsMHg4YX0gfSwKK3sgIDE2LDB4M2ViOSwwLHsweDkwLDB4NzgsMHgwOSwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDEsMHhlNCwweDEyfSB9LAoreyAgMTYsMHgzZWM5LDAsezB4MGMsMHg5YywweDkwLDB4MDAsMHgwMiwweDc0LDB4MTUsMHgxMiwweDBjLDB4OWMsMHg5MCwweDAwLDB4MDMsMHhlNCwweDEyLDB4MGN9IH0sCit7ICAxNiwweDNlZDksMCx7MHg5YywweDkwLDB4MDAsMHgwNCwweDc0LDB4ZmYsMHgxMiwweDBjLDB4OWMsMHg5MCwweDAwLDB4MDUsMHhlNCwweDEyLDB4MGMsMHg5Y30gfSwKK3sgIDE2LDB4M2VlOSwwLHsweDkwLDB4MDAsMHgwNiwweDc0LDB4YzMsMHgxMiwweDBjLDB4OWMsMHg5MCwweDAwLDB4MDcsMHhlNCwweDEyLDB4MGMsMHg5YywweDkwfSB9LAoreyAgMTYsMHgzZWY5LDAsezB4MDAsMHgwOCwweGU0LDB4MTIsMHgwYywweDljLDB4OTAsMHgwMCwweDA5LDB4ZTQsMHgxMiwweDBjLDB4OWMsMHg5MCwweDAwLDB4MGF9IH0sCit7ICAxNiwweDNmMDksMCx7MHg3NCwweDAxLDB4MTIsMHgwYywweDljLDB4OTAsMHg3OCwweDBhLDB4ZTQsMHg3NSwweGYwLDB4MGIsMHgxMiwweDBjLDB4ZjQsMHgwZn0gfSwKK3sgIDE2LDB4M2YxOSwwLHsweDBlLDB4YmUsMHgwNywweDhkLDB4OTAsMHg3OCwweDA5LDB4NzQsMHgwMSwweGYwLDB4YTMsMHg3NCwweDc4LDB4ZjAsMHhhMywweDc0fSB9LAoreyAgMTYsMHgzZjI5LDAsezB4ZmYsMHhmMCwweGU0LDB4ZmYsMHhmZSwweDkwLDB4NzgsMHgwOSwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4Zjl9IH0sCit7ICAxNiwweDNmMzksMCx7MHhlZiwweDEyLDB4MGMsMHg4YSwweDkwLDB4NzgsMHgwOSwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MH0gfSwKK3sgIDE2LDB4M2Y0OSwwLHsweDAwLDB4MDEsMHhlNCwweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwMiwweDc0LDB4MTUsMHgxMiwweDBjLDB4OWMsMHg5MCwweDAwfSB9LAoreyAgMTYsMHgzZjU5LDAsezB4MDMsMHhlNCwweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwNCwweDc0LDB4ODAsMHgxMiwweDBjLDB4OWMsMHg5MCwweDAwLDB4MDV9IH0sCit7ICAxNiwweDNmNjksMCx7MHhlNCwweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwNiwweDc0LDB4YzMsMHgxMiwweDBjLDB4OWMsMHg5MCwweDAwLDB4MDcsMHhlNH0gfSwKK3sgIDE2LDB4M2Y3OSwwLHsweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwOCwweGU0LDB4MTIsMHgwYywweDljLDB4OTAsMHgwMCwweDA5LDB4ZTQsMHgxMiwweDBjfSB9LAoreyAgMTYsMHgzZjg5LDAsezB4OWMsMHg5MCwweDAwLDB4MGEsMHg3NCwweDAxLDB4MTIsMHgwYywweDljLDB4OTAsMHg3OCwweDBhLDB4ZTQsMHg3NSwweGYwLDB4MGJ9IH0sCit7ICAgOCwweDNmOTksMCx7MHgxMiwweDBjLDB4ZjQsMHgwZiwweDBlLDB4YmUsMHgwMywweDhkfSB9LAoreyAgIDEsMHgzZmExLDAsezB4MjJ9IH0sCit7ICAxNiwweDNmYTIsMCx7MHhlNCwweGZlLDB4NzUsMHgzZCwweGZmLDB4NzUsMHgzZSwweDA1LDB4NzUsMHgzZiwweDEyLDB4YWIsMHgzZCwweGFhLDB4M2UsMHhhOX0gfSwKK3sgIDE2LDB4M2ZiMiwwLHsweDNmLDB4OTAsMHgwMCwweDAxLDB4MTIsMHgwYywweDVkLDB4NjQsMHgwMiwweDcwLDB4MmYsMHhjZCwweGVlLDB4Y2QsMHgwZSwweGVkfSB9LAoreyAgMTYsMHgzZmMyLDAsezB4NmYsMHg3MCwweDAxLDB4MjIsMHg5MCwweDAwLDB4MDIsMHgxMiwweDBkLDB4MGEsMHg4NSwweGYwLDB4M2IsMHhmNSwweDNjLDB4NjJ9IH0sCit7ICAxNiwweDNmZDIsMCx7MHgzYiwweGU1LDB4M2IsMHg2MiwweDNjLDB4ZTUsMHgzYywweDYyLDB4M2IsMHgyOSwweGZkLDB4ZTUsMHgzYiwweDNhLDB4YzksMHhlZH0gfSwKK3sgIDE2LDB4M2ZlMiwwLHsweGM5LDB4NzUsMHgzZCwweGZmLDB4ZjUsMHgzZSwweDg5LDB4M2YsMHg4MCwweGMxLDB4N2IsMHgwMCwweDdhLDB4MDAsMHg3OSwweDAwfSB9LAoreyAgIDEsMHgzZmYyLDAsezB4MjJ9IH0sCit7ICAgOSwweDNmZjMsMCx7MHg1MywweGQ4LDB4ZWYsMHg0MywweGQ4LDB4MjAsMHhjMiwweDJkLDB4MzJ9IH0sCit7ICAgNCwweDNmZmMsMCx7MHg1MywweDkxLDB4ZGYsMHgzMn0gfSwKK3sgIDE2LDB4NDAwMCwwLHsweDkwLDB4NzksMHg4NywweGUwLDB4YjQsMHgwMSwweDFkLDB4OTAsMHg3OSwweDg1LDB4ZTAsMHhiNCwweDAxLDB4MDMsMHgxMiwweDQyfSB9LAoreyAgMTYsMHg0MDEwLDAsezB4YWEsMHg5MCwweDc5LDB4ODYsMHhlMCwweGI0LDB4MDEsMHgwMywweDEyLDB4MTgsMHgwMCwweGU0LDB4OTAsMHg3OSwweDg1LDB4ZjB9IH0sCit7ICAxNiwweDQwMjAsMCx7MHhhMywweGYwLDB4YTMsMHhmMCwweDEyLDB4MmUsMHg5NCwweDkwLDB4N2YsMHg5YiwweGUwLDB4ZjUsMHgwYSwweDU0LDB4MDIsMHhmNX0gfSwKK3sgIDE2LDB4NDAzMCwwLHsweDBhLDB4NzAsMHgwNCwweDkwLDB4NzksMHg3ZiwweGYwLDB4OTAsMHg3ZiwweDliLDB4ZTAsMHhmNSwweDBhLDB4NTQsMHgwMiwweGZmfSB9LAoreyAgMTYsMHg0MDQwLDAsezB4ZjUsMHgwYSwweGJmLDB4MDIsMHgwNiwweDkwLDB4NzksMHg3ZiwweDc0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHg5YiwweGUwLDB4ZjV9IH0sCit7ICAxNiwweDQwNTAsMCx7MHgwYSwweDU0LDB4MjAsMHhmNSwweDBhLDB4NzAsMHgwNCwweDkwLDB4NzksMHg3ZSwweGYwLDB4OTAsMHg3ZiwweDliLDB4ZTAsMHhmNX0gfSwKK3sgIDE2LDB4NDA2MCwwLHsweDBhLDB4NTQsMHgyMCwweGZmLDB4ZjUsMHgwYSwweGJmLDB4MjAsMHgwNiwweDkwLDB4NzksMHg3ZSwweDc0LDB4MDEsMHhmMCwweDkwfSB9LAoreyAgMTYsMHg0MDcwLDAsezB4NzksMHg3ZiwweGUwLDB4ZmYsMHg5MCwweDc5LDB4ODEsMHhlMCwweDZmLDB4NjAsMHgzOCwweDkwLDB4NzksMHg3OCwweDc0LDB4MDJ9IH0sCit7ICAxNiwweDQwODAsMCx7MHhmMCwweDkwLDB4NzksMHg4NCwweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHhlZiwweGI0LDB4MDEsMHgwNiwweGUwLDB4NTQsMHhmZX0gfSwKK3sgIDE2LDB4NDA5MCwwLHsweGYwLDB4ODAsMHgwNywweDkwLDB4NzksMHg3OSwweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg5MCwweDc5fSB9LAoreyAgMTYsMHg0MGEwLDAsezB4ODQsMHhmMCwweGEyLDB4YWYsMHhlNCwweDMzLDB4ZjUsMHgxMiwweGMyLDB4YWYsMHgxMiwweDBiLDB4YTIsMHhlNSwweDEyLDB4NjB9IH0sCit7ICAxNiwweDQwYjAsMCx7MHgwMiwweGQyLDB4YWYsMHg5MCwweDc5LDB4N2UsMHhlMCwweGZmLDB4OTAsMHg3OSwweDgwLDB4ZTAsMHg2ZiwweDYwLDB4MzgsMHg5MH0gfSwKK3sgIDE2LDB4NDBjMCwwLHsweDc5LDB4NzgsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4N2MsMHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4ZWYsMHhiNCwweDAxfSB9LAoreyAgMTYsMHg0MGQwLDAsezB4MDYsMHhlMCwweDQ0LDB4MDQsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc5LDB4NzksMHhlMCwweDU0LDB4ZmIsMHhmMCwweDkwLDB4Nzl9IH0sCit7ICAxNiwweDQwZTAsMCx7MHg3OSwweGUwLDB4OTAsMHg3OSwweDdjLDB4ZjAsMHhhMiwweGFmLDB4ZTQsMHgzMywweGY1LDB4MTIsMHhjMiwweGFmLDB4MTIsMHgwYn0gfSwKK3sgIDE2LDB4NDBmMCwwLHsweGEyLDB4ZTUsMHgxMiwweDYwLDB4MDIsMHhkMiwweGFmLDB4OTAsMHg3OSwweDdmLDB4ZTAsMHg5MCwweDc5LDB4ODEsMHhmMCwweDkwfSB9LAoreyAgIDgsMHg0MTAwLDAsezB4NzksMHg3ZSwweGUwLDB4OTAsMHg3OSwweDgwLDB4ZjAsMHgyMn0gfSwKK3sgIDE2LDB4NDEwOCwwLHsweDkwLDB4NzksMHgyZCwweGUwLDB4NjQsMHgwMSwweDcwLDB4MzUsMHg5MCwweDc5LDB4NzAsMHhlMCwweGZmLDB4ZDMsMHg5NCwweDJkfSB9LAoreyAgMTYsMHg0MTE4LDAsezB4NDAsMHgyYiwweDkwLDB4NzksMHg2OSwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg2OCwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZDN9IH0sCit7ICAxNiwweDQxMjgsMCx7MHg5NCwweDBmLDB4NDAsMHgxOSwweGU0LDB4ZjAsMHhlZiwweGQzLDB4OTQsMHgzMSwweDQwLDB4MDgsMHg5MCwweDc5LDB4MmQsMHg3NH0gfSwKK3sgIDE2LDB4NDEzOCwwLHsweDAzLDB4ZjAsMHg4MCwweDA2LDB4OTAsMHg3OSwweDJkLDB4NzQsMHgwMiwweGYwLDB4MTIsMHgxMCwweDAwLDB4OTAsMHg3OSwweDJkfSB9LAoreyAgMTYsMHg0MTQ4LDAsezB4ZTAsMHhiNCwweDAyLDB4MmMsMHg5MCwweDc5LDB4NzAsMHhlMCwweGZmLDB4YzMsMHg5NCwweDJmLDB4NTAsMHgyMiwweGVmLDB4ZDN9IH0sCit7ICAxNiwweDQxNTgsMCx7MHg5NCwweDJhLDB4NDAsMHgxYywweDkwLDB4NzksMHg2OSwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg2OCwweGUwLDB4MDQsMHhmMH0gfSwKK3sgIDE2LDB4NDE2OCwwLHsweGUwLDB4ZDMsMHg5NCwweDBmLDB4NDAsMHgwYSwweGU0LDB4ZjAsMHg5MCwweDc5LDB4MmQsMHgwNCwweGYwLDB4MTIsMHgxMCwweDAwfSB9LAoreyAgMTYsMHg0MTc4LDAsezB4OTAsMHg3OSwweDJkLDB4ZTAsMHhiNCwweDAyLDB4MjYsMHg5MCwweDc5LDB4NzAsMHhlMCwweGQzLDB4OTQsMHgzMSwweDQwLDB4MWR9IH0sCit7ICAxNiwweDQxODgsMCx7MHg5MCwweDc5LDB4NjksMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4NjgsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGQzLDB4OTQsMHgwZn0gfSwKK3sgIDE2LDB4NDE5OCwwLHsweDQwLDB4MGIsMHhlNCwweGYwLDB4OTAsMHg3OSwweDJkLDB4NzQsMHgwMywweGYwLDB4MTIsMHgxMCwweDAwLDB4OTAsMHg3OSwweDJkfSB9LAoreyAgMTYsMHg0MWE4LDAsezB4ZTAsMHg2NCwweDAzLDB4NzAsMHgzZiwweDkwLDB4NzksMHg3MCwweGUwLDB4ZmYsMHhjMywweDk0LDB4NWYsMHg1MCwweDM1LDB4OTB9IH0sCit7ICAxNiwweDQxYjgsMCx7MHg3OSwweDY5LDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3OSwweDY4LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhkMywweDk0LDB4MGYsMHg0MH0gfSwKK3sgIDE2LDB4NDFjOCwwLHsweDIzLDB4ZTQsMHhmMCwweGVmLDB4YzMsMHg5NCwweDJmLDB4NTAsMHgwYywweGVmLDB4ZDMsMHg5NCwweDJhLDB4NDAsMHgwNiwweDkwfSB9LAoreyAgMTYsMHg0MWQ4LDAsezB4NzksMHgyZCwweDc0LDB4MDEsMHhmMCwweGVmLDB4ZDMsMHg5NCwweDJmLDB4NDAsMHgwNiwweDkwLDB4NzksMHgyZCwweDc0LDB4MDJ9IH0sCit7ICAxNiwweDQxZTgsMCx7MHhmMCwweDEyLDB4MTAsMHgwMCwweDkwLDB4NzksMHg2OSwweGUwLDB4NzAsMHgwNSwweDkwLDB4NzksMHg2OCwweGYwLDB4MjIsMHhlNH0gfSwKK3sgICA1LDB4NDFmOCwwLHsweDkwLDB4NzksMHg2OSwweGYwLDB4MjJ9IH0sCit7ICAxNiwweDQxZmQsMCx7MHg3YiwweDAxLDB4N2EsMHg3OCwweDc5LDB4NGMsMHg5MCwweDc4LDB4MDYsMHhlYiwweGYwLDB4YTMsMHhlYSwweGYwLDB4YTMsMHhlOX0gfSwKK3sgIDE2LDB4NDIwZCwwLHsweGYwLDB4ZTQsMHgxMiwweDBjLDB4OGEsMHg5MCwweDc4LDB4MDYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5fSB9LAoreyAgMTYsMHg0MjFkLDAsezB4OTAsMHgwMCwweDAxLDB4NzQsMHgwMSwweDEyLDB4MGMsMHg5YywweDkwLDB4NzgsMHgwNywweGU0LDB4NzUsMHhmMCwweDAzLDB4MTJ9IH0sCit7ICAxNiwweDQyMmQsMCx7MHgwYywweGY0LDB4OTAsMHg3OCwweDA2LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweGU0LDB4MTIsMHgwY30gfSwKK3sgIDE2LDB4NDIzZCwwLHsweDhhLDB4OTAsMHg3OCwweDA2LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMSwweDc0fSB9LAoreyAgMTYsMHg0MjRkLDAsezB4MDIsMHgxMiwweDBjLDB4OWMsMHg5MCwweDc4LDB4MDcsMHhlNCwweDc1LDB4ZjAsMHgwMywweDEyLDB4MGMsMHhmNCwweDkwLDB4Nzh9IH0sCit7ICAxNiwweDQyNWQsMCx7MHgwNiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHhlNCwweDEyLDB4MGMsMHg4YSwweDkwLDB4NzgsMHgwNn0gfSwKK3sgIDE2LDB4NDI2ZCwwLHsweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDEsMHg3NCwweDAzLDB4MTIsMHgwYywweDljfSB9LAoreyAgMTYsMHg0MjdkLDAsezB4OTAsMHg3OCwweDA3LDB4ZTQsMHg3NSwweGYwLDB4MDMsMHgxMiwweDBjLDB4ZjQsMHg5MCwweDc4LDB4MDYsMHhlMCwweGZiLDB4YTN9IH0sCit7ICAxNiwweDQyOGQsMCx7MHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4ZTQsMHgxMiwweDBjLDB4OGEsMHg5MCwweDc4LDB4MDYsMHhlMCwweGZiLDB4YTMsMHhlMH0gfSwKK3sgIDEyLDB4NDI5ZCwwLHsweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAxLDB4NzQsMHgwNCwweDEyLDB4MGMsMHg5Y30gfSwKK3sgICAxLDB4NDJhOSwwLHsweDIyfSB9LAoreyAgMTYsMHg0MmFhLDAsezB4ZTQsMHhmZiwweGZlLDB4N2IsMHgwMSwweDkwLDB4NzgsMHgwYywweDA0LDB4ZjAsMHhhMywweDc0LDB4NzgsMHhmMCwweGEzLDB4NzR9IH0sCit7ICAxNiwweDQyYmEsMCx7MHgyYiwweGYwLDB4OTAsMHg3OCwweDBjLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMn0gfSwKK3sgIDE2LDB4NDJjYSwwLHsweDEyLDB4MGMsMHg1ZCwweGZkLDB4OTAsMHg3OSwweDlhLDB4ZTAsMHg2ZCwweDYwLDB4MTMsMHhlZiwweGMzLDB4OTQsMHgwNSwweDUwfSB9LAoreyAgMTYsMHg0MmRhLDAsezB4MGQsMHgwZiwweDkwLDB4NzgsMHgwZCwweGU0LDB4NzUsMHhmMCwweDAzLDB4MTIsMHgwYywweGY0LDB4ODAsMHhkNCwweDhkLDB4MzN9IH0sCit7ICAxNiwweDQyZWEsMCx7MHg5MCwweDc4LDB4MGMsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAxLDB4MTIsMHgwY30gfSwKK3sgIDE2LDB4NDJmYSwwLHsweDVkLDB4ZmQsMHg5MCwweDc5LDB4OWIsMHhlMCwweGZjLDB4NmQsMHg2MCwweDEzLDB4ZWUsMHhjMywweDk0LDB4MGIsMHg1MCwweDBkfSB9LAoreyAgMTYsMHg0MzBhLDAsezB4MGUsMHg5MCwweDc4LDB4MGQsMHhlNCwweDc1LDB4ZjAsMHgwMywweDEyLDB4MGMsMHhmNCwweDgwLDB4ZDMsMHg4YywweDM0LDB4ZWZ9IH0sCit7ICAxNiwweDQzMWEsMCx7MHg2NCwweDA1LDB4NjAsMHgwMywweGJlLDB4MGIsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MH0gfSwKK3sgIDE2LDB4NDMyYSwwLHsweDc4LDB4MGMsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4MTIsMHgwYywweDQ0LDB4ZmYsMHgyNCwweGYwfSB9LAoreyAgMTYsMHg0MzNhLDAsezB4NjAsMHgwOCwweDI0LDB4MGUsMHg3MCwweDBlLDB4MTIsMHg0OSwweDRkLDB4MjIsMHg5MCwweDc5LDB4MjAsMHhlNSwweDM0LDB4ZjB9IH0sCit7ICAxMSwweDQzNGEsMCx7MHgxMiwweDFiLDB4MmEsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfSB9LAoreyAgIDEsMHg0MzU1LDAsezB4MjJ9IH0sCit7ICAxMiwweDQzNTYsMCx7MHg3OCwweDdmLDB4ZTQsMHhmNiwweGQ4LDB4ZmQsMHg3NSwweDgxLDB4M2YsMHgwMiwweDQzLDB4OWR9IH0sCit7ICAxNiwweDQzNjIsMCx7MHgwMiwweDQ4LDB4YTksMHhlNCwweDkzLDB4YTMsMHhmOCwweGU0LDB4OTMsMHhhMywweDQwLDB4MDMsMHhmNiwweDgwLDB4MDEsMHhmMn0gfSwKK3sgIDE2LDB4NDM3MiwwLHsweDA4LDB4ZGYsMHhmNCwweDgwLDB4MjksMHhlNCwweDkzLDB4YTMsMHhmOCwweDU0LDB4MDcsMHgyNCwweDBjLDB4YzgsMHhjMywweDMzfSB9LAoreyAgMTYsMHg0MzgyLDAsezB4YzQsMHg1NCwweDBmLDB4NDQsMHgyMCwweGM4LDB4ODMsMHg0MCwweDA0LDB4ZjQsMHg1NiwweDgwLDB4MDEsMHg0NiwweGY2LDB4ZGZ9IH0sCit7ICAxNiwweDQzOTIsMCx7MHhlNCwweDgwLDB4MGIsMHgwMSwweDAyLDB4MDQsMHgwOCwweDEwLDB4MjAsMHg0MCwweDgwLDB4OTAsMHg0NiwweDYxLDB4ZTQsMHg3ZX0gfSwKK3sgIDE2LDB4NDNhMiwwLHsweDAxLDB4OTMsMHg2MCwweGJjLDB4YTMsMHhmZiwweDU0LDB4M2YsMHgzMCwweGU1LDB4MDksMHg1NCwweDFmLDB4ZmUsMHhlNCwweDkzfSB9LAoreyAgMTYsMHg0M2IyLDAsezB4YTMsMHg2MCwweDAxLDB4MGUsMHhjZiwweDU0LDB4YzAsMHgyNSwweGUwLDB4NjAsMHhhOCwweDQwLDB4YjgsMHhlNCwweDkzLDB4YTN9IH0sCit7ICAxNiwweDQzYzIsMCx7MHhmYSwweGU0LDB4OTMsMHhhMywweGY4LDB4ZTQsMHg5MywweGEzLDB4YzgsMHhjNSwweDgyLDB4YzgsMHhjYSwweGM1LDB4ODMsMHhjYX0gfSwKK3sgIDE2LDB4NDNkMiwwLHsweGYwLDB4YTMsMHhjOCwweGM1LDB4ODIsMHhjOCwweGNhLDB4YzUsMHg4MywweGNhLDB4ZGYsMHhlOSwweGRlLDB4ZTcsMHg4MCwweGJlfSB9LAoreyAgMTYsMHg0M2UyLDAsezB4YzAsMHhlMCwweGMwLDB4ZjAsMHhjMCwweDgzLDB4YzAsMHg4MiwweGMwLDB4ZDAsMHhlOCwweGMwLDB4ZTAsMHhlOSwweGMwLDB4ZTB9IH0sCit7ICAxNiwweDQzZjIsMCx7MHhlYSwweGMwLDB4ZTAsMHhlYiwweGMwLDB4ZTAsMHhlYywweGMwLDB4ZTAsMHhlZCwweGMwLDB4ZTAsMHhlZSwweGMwLDB4ZTAsMHhlZn0gfSwKK3sgIDE2LDB4NDQwMiwwLHsweGMwLDB4ZTAsMHhjMiwweGNhLDB4YzIsMHhjZiwweDkwLDB4NzksMHg3YSwweGUwLDB4YjQsMHgwMSwweDFmLDB4MTIsMHg0YiwweGFlfSB9LAoreyAgMTYsMHg0NDEyLDAsezB4MTIsMHg0NywweDU4LDB4NTMsMHhhOCwweGEwLDB4OTAsMHg3ZiwweGFlLDB4ZTQsMHhmMCwweDEyLDB4MDcsMHhhYSwweDEyLDB4NGJ9IH0sCit7ICAxNiwweDQ0MjIsMCx7MHhiNywweDkwLDB4N2YsMHhhZSwweDc0LDB4MWYsMHhmMCwweDQzLDB4YTgsMHgwNSwweDgwLDB4MDMsMHg1MywweGE4LDB4YTAsMHg1M30gfSwKK3sgIDE2LDB4NDQzMiwwLHsweGE4LDB4ZmEsMHg3NSwweGU4LDB4MDEsMHgxMiwweDA5LDB4MTUsMHg3NSwweGU4LDB4MGQsMHg0MywweGE4LDB4MDUsMHhkMCwweGUwfSB9LAoreyAgMTYsMHg0NDQyLDAsezB4ZmYsMHhkMCwweGUwLDB4ZmUsMHhkMCwweGUwLDB4ZmQsMHhkMCwweGUwLDB4ZmMsMHhkMCwweGUwLDB4ZmIsMHhkMCwweGUwLDB4ZmF9IH0sCit7ICAxNiwweDQ0NTIsMCx7MHhkMCwweGUwLDB4ZjksMHhkMCwweGUwLDB4ZjgsMHhkMCwweGQwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGYwLDB4ZDAsMHhlMH0gfSwKK3sgICAxLDB4NDQ2MiwwLHsweDMyfSB9LAoreyAgMTYsMHg0NDYzLDAsezB4OTAsMHg3ZiwweGVjLDB4ZTAsMHhmNSwweDA5LDB4MTQsMHg2MCwweDFkLDB4MTQsMHg2MCwweDJhLDB4MTQsMHg2MCwweDM3LDB4MTR9IH0sCit7ICAxNiwweDQ0NzMsMCx7MHg2MCwweDQ0LDB4MjQsMHgwNCwweDcwLDB4NTAsMHg5MCwweDc5LDB4NjIsMHhlMCwweDkwLDB4N2YsMHgwMCwweGYwLDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4NDQ4MywwLHsweGI1LDB4NzQsMHgwMSwweGYwLDB4ODAsMHg0NywweDkwLDB4NzksMHg2MywweGUwLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHg5MCwweDdmfSB9LAoreyAgMTYsMHg0NDkzLDAsezB4YjUsMHg3NCwweDAxLDB4ZjAsMHg4MCwweDM3LDB4OTAsMHg3OSwweDY0LDB4ZTAsMHg5MCwweDdmLDB4MDAsMHhmMCwweDkwLDB4N2Z9IH0sCit7ICAxNiwweDQ0YTMsMCx7MHhiNSwweDc0LDB4MDEsMHhmMCwweDgwLDB4MjcsMHg5MCwweDc5LDB4NjYsMHhlMCwweDkwLDB4N2YsMHgwMCwweGYwLDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4NDRiMywwLHsweGI1LDB4NzQsMHgwMSwweGYwLDB4ODAsMHgxNywweDkwLDB4NzksMHg2NywweGUwLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHg5MCwweDdmfSB9LAoreyAgMTUsMHg0NGMzLDAsezB4YjUsMHg3NCwweDAxLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhkMywweDIyfSB9LAoreyAgIDQsMHg0NGQyLDAsezB4OGQsMHgzNiwweDhiLDB4Mzd9IH0sCit7ICAxNiwweDQ0ZDYsMCx7MHgxMiwweDNmLDB4YTIsMHhlYSwweDQ5LDB4NjAsMHg1NywweDEyLDB4MGMsMHg0NCwweDdlLDB4MDAsMHgyOSwweGZmLDB4ZWUsMHgzYX0gfSwKK3sgIDE2LDB4NDRlNiwwLHsweGM5LDB4ZWYsMHhjOSwweDc1LDB4MzgsMHhmZiwweGY1LDB4MzksMHg4OSwweDNhLDB4YWIsMHgzOCwweGFhLDB4MzksMHhhOSwweDNhfSB9LAoreyAgMTYsMHg0NGY2LDAsezB4OTAsMHgwMCwweDAxLDB4MTIsMHgwYywweDVkLDB4ZmYsMHg2NCwweDA0LDB4NjAsMHgwNSwweGVmLDB4NjQsMHgwNSwweDcwLDB4MmV9IH0sCit7ICAxNiwweDQ1MDYsMCx7MHhlZiwweGI0LDB4MDQsMHgxNSwweDkwLDB4MDAsMHgwMiwweDEyLDB4MGMsMHg1ZCwweDY1LDB4MzYsMHg3MCwweDBiLDB4OTAsMHgwMH0gfSwKK3sgIDE2LDB4NDUxNiwwLHsweDAzLDB4MTIsMHgwYywweDVkLDB4NjUsMHgzNywweDcwLDB4MDEsMHgyMiwweDEyLDB4MGMsMHg0NCwweDdlLDB4MDAsMHgyOSwweGZmfSB9LAoreyAgMTYsMHg0NTI2LDAsezB4ZWUsMHgzYSwweGM5LDB4ZWYsMHhjOSwweDc1LDB4MzgsMHhmZiwweGY1LDB4MzksMHg4OSwweDNhLDB4ODAsMHhiYywweDdiLDB4MDB9IH0sCit7ICAgNCwweDQ1MzYsMCx7MHg3YSwweDAwLDB4NzksMHgwMH0gfSwKK3sgICAxLDB4NDUzYSwwLHsweDIyfSB9LAoreyAgMTYsMHg0NTNiLDAsezB4ZTQsMHhmZiwweDdiLDB4MDEsMHg5MCwweDc4LDB4MWMsMHgwNCwweGYwLDB4YTMsMHg3NCwweDc4LDB4ZjAsMHhhMywweDc0LDB4NGN9IH0sCit7ICAxNiwweDQ1NGIsMCx7MHhmMCwweDkwLDB4NzgsMHgxYywweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDIsMHgxMn0gfSwKK3sgIDE2LDB4NDU1YiwwLHsweDBjLDB4NWQsMHhmZSwweDkwLDB4N2YsMHhlYywweGUwLDB4NmUsMHg2MCwweDEzLDB4ZWYsMHhjMywweDk0LDB4MDQsMHg1MCwweDBkfSB9LAoreyAgMTYsMHg0NTZiLDAsezB4OTAsMHg3OCwweDFkLDB4ZTQsMHg3NSwweGYwLDB4MDMsMHgxMiwweDBjLDB4ZjQsMHgwZiwweDgwLDB4ZDQsMHhiZiwweDA0LDB4MDl9IH0sCit7ICAxNiwweDQ1N2IsMCx7MHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDgwLDB4MTQsMHg5MCwweDc5LDB4MjEsMHhlMCwweGZmLDB4OTAsMHg3OH0gfSwKK3sgIDE2LDB4NDU4YiwwLHsweDFjLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweGVmLDB4MTIsMHgwYywweDhhLDB4OTAsMHg3ZiwweGM1fSB9LAoreyAgIDMsMHg0NTliLDAsezB4NzQsMHgwMSwweGYwfSB9LAoreyAgIDEsMHg0NTllLDAsezB4MjJ9IH0sCit7ICAxNCwweDQ1OWYsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHhjMCwweGQwLDB4ZWUsMHhjMCwweGUwLDB4ZWYsMHhjMCwweGUwfSB9LAoreyAgMTYsMHg0NWFkLDAsezB4OTAsMHg3OSwweDg1LDB4ZTAsMHg2NCwweDAxLDB4NjAsMHgwNSwweGEzLDB4ZTAsMHhiNCwweDAxLDB4MmQsMHg5MCwweDc5LDB4ODd9IH0sCit7ICAxNiwweDQ1YmQsMCx7MHg3NCwweDAxLDB4ZjAsMHhlNCwweGZmLDB4OTAsMHg3ZiwweGM1LDB4ZTAsMHhmZSwweGVmLDB4YzMsMHg5ZSwweDUwLDB4MWIsMHg3NH0gfSwKK3sgIDE2LDB4NDVjZCwwLHsweGMwLDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdlLDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg3NCwweDIxLDB4MmYsMHhmNSwweDgyfSB9LAoreyAgMTYsMHg0NWRkLDAsezB4ZTQsMHgzNCwweDc5LDB4ZjUsMHg4MywweGVlLDB4ZjAsMHgwZiwweDgwLDB4ZGIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWF9IH0sCit7ICAgNCwweDQ1ZWQsMCx7MHhlMCwweDQ0LDB4MDEsMHhmMH0gfSwKK3sgIDE1LDB4NDVmMSwwLHsweGQwLDB4ZTAsMHhmZiwweGQwLDB4ZTAsMHhmZSwweGQwLDB4ZDAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0gfSwKK3sgIDE2LDB4NDYwMCwwLHsweGU0LDB4ZmYsMHg3YiwweDAxLDB4OTAsMHg3OCwweDE5LDB4MDQsMHhmMCwweGEzLDB4NzQsMHg3OCwweGYwLDB4YTMsMHg3NCwweDRjfSB9LAoreyAgMTYsMHg0NjEwLDAsezB4ZjAsMHg5MCwweDc4LDB4MTksMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAyLDB4MTJ9IH0sCit7ICAxNiwweDQ2MjAsMCx7MHgwYywweDVkLDB4ZmUsMHg5MCwweDdmLDB4ZWMsMHhlMCwweDZlLDB4NjAsMHgxMywweGVmLDB4YzMsMHg5NCwweDA0LDB4NTAsMHgwZH0gfSwKK3sgIDE2LDB4NDYzMCwwLHsweDkwLDB4NzgsMHgxYSwweGU0LDB4NzUsMHhmMCwweDAzLDB4MTIsMHgwYywweGY0LDB4MGYsMHg4MCwweGQ0LDB4YmYsMHgwNCwweDA4fSB9LAoreyAgMTYsMHg0NjQwLDAsezB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4NzgsMHgxOSwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmF9IH0sCit7ICAxNiwweDQ2NTAsMCx7MHhhMywweGUwLDB4ZjksMHgxMiwweDBjLDB4NDQsMHg5MCwweDdmLDB4MDAsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDEsMHhmMH0gfSwKK3sgICAxLDB4NDY2MCwwLHsweDIyfSB9LAoreyAgMTYsMHg0NjYxLDAsezB4MDEsMHgxOCwweDAyLDB4MDEsMHgxOSwweDBhLDB4MDEsMHgxYywweDAwLDB4YzEsMHgyOCwweGMxLDB4MjksMHgwMSwweDFmLDB4MDF9IH0sCit7ICAxNSwweDQ2NzEsMCx7MHg0NCwweDc5LDB4OWYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQxLDB4NzksMHhhMywweDAwLDB4NDEsMHg3OSwweGE0LDB4MDB9IH0sCit7ICAgNCwweDQ2ODAsMCx7MHg0MSwweDc5LDB4ODksMHgwMH0gfSwKK3sgIDE2LDB4NDY4NCwwLHsweDAxLDB4MjIsMHgwMSwweDQxLDB4NzksMHgzMSwweGZmLDB4NDEsMHg3OSwweDM0LDB4MDAsMHg0ZCwweDc5LDB4MzUsMHgzZiwweDNmfSB9LAoreyAgMTYsMHg0Njk0LDAsezB4MDAsMHgwOCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNSwweDRkLDB4NzksMHg0MiwweDNmLDB4M2Z9IH0sCit7ICAxNiwweDQ2YTQsMCx7MHgwNiwweDA4LDB4MDQsMHgwNywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE1LDB4NGQsMHg3OSwweDRmLDB4MGEsMHgwYX0gfSwKK3sgIDExLDB4NDZiNCwwLHsweDA5LDB4MDAsMHgwMSwweDA5LDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3LDB4MDh9IH0sCit7ICAgMSwweDQ2YmYsMCx7MHgwMH0gfSwKK3sgIDE2LDB4NDZjMCwwLHsweDEyLDB4MGEsMHhjZCwweDkwLDB4N2YsMHhhNSwweGUwLDB4ZjUsMHgyMSwweGU1LDB4MjEsMHg1NCwweDAxLDB4ZjUsMHgyMSwweDY0fSB9LAoreyAgMTYsMHg0NmQwLDAsezB4MDEsMHg2MCwweDI4LDB4ZTUsMHgyMiwweDY0LDB4MDEsMHg3MCwweDIyLDB4OTAsMHg3ZiwweGE1LDB4ZTAsMHhmNSwweDIxLDB4NTR9IH0sCit7ICAxNiwweDQ2ZTAsMCx7MHgwMiwweGY1LDB4MjEsMHg3MCwweDAzLDB4NzUsMHgyMiwweDAxLDB4OTAsMHg3ZiwweGE1LDB4ZTAsMHhmNSwweDIxLDB4NTQsMHgwNH0gfSwKK3sgIDEyLDB4NDZmMCwwLHsweGZmLDB4ZjUsMHgyMSwweGJmLDB4MDQsMHhkMywweDc1LDB4MjIsMHgwMSwweDgwLDB4Y2UsMHgyMn0gfSwKK3sgICA0LDB4NDZmYywwLHsweDUzLDB4ZDgsMHhmNywweDMyfSB9LAoreyAgMTYsMHg0NzAwLDAsezB4MDIsMHg0OSwweGZhLDB4MDAsMHgwMiwweDNjLDB4NTQsMHgwMCwweDAyLDB4MTcsMHhlNCwweDAwLDB4MDIsMHg0YSwweDEyLDB4MDB9IH0sCit7ICAxNiwweDQ3MTAsMCx7MHgwMiwweDM3LDB4YTIsMHgwMCwweDAyLDB4NDcsMHhmZiwweDAwLDB4MDIsMHg0YSwweDQxLDB4MDAsMHgwMiwweDQ1LDB4OWYsMHgwMH0gfSwKK3sgIDE2LDB4NDcyMCwwLHsweDAyLDB4NDksMHg4ZSwweDAwLDB4MDIsMHg0OSwweGFiLDB4MDAsMHgwMiwweDRhLDB4NTgsMHgwMCwweDAyLDB4NGEsMHg2ZiwweDAwfSB9LAoreyAgMTYsMHg0NzMwLDAsezB4MDIsMHg0YSwweDg2LDB4MDAsMHgwMiwweDRhLDB4OWQsMHgwMCwweDAyLDB4NGEsMHhiNCwweDAwLDB4MDIsMHg0YSwweGNiLDB4MDB9IH0sCit7ICAxNiwweDQ3NDAsMCx7MHgwMiwweDRhLDB4ZTIsMHgwMCwweDAyLDB4NGEsMHhmOSwweDAwLDB4MDIsMHg0YiwweDEwLDB4MDAsMHgwMiwweDRiLDB4MjcsMHgwMH0gfSwKK3sgICA4LDB4NDc1MCwwLHsweDAyLDB4NGIsMHgzZSwweDAwLDB4MDIsMHg0YiwweDU1LDB4MDB9IH0sCit7ICAxNiwweDQ3NTgsMCx7MHhlNSwweDE4LDB4NzAsMHgxNCwweDkwLDB4NzksMHg4YywweGUwLDB4MDQsMHhmMCwweDkwLDB4NzksMHg4YiwweGUwLDB4YzMsMHg5NH0gfSwKK3sgIDE2LDB4NDc2OCwwLHsweDAwLDB4NDAsMHgxNSwweGUwLDB4MTQsMHhmMCwweDgwLDB4MTAsMHg5MCwweDc5LDB4OGIsMHhlMCwweDA0LDB4ZjAsMHhhMywweGUwfSB9LAoreyAgMTYsMHg0Nzc4LDAsezB4YzMsMHg5NCwweDAwLDB4NDAsMHgwMywweGUwLDB4MTQsMHhmMCwweDkwLDB4NzksMHg4YiwweGUwLDB4ZDMsMHg5NCwweDE0LDB4NDB9IH0sCit7ICAxNiwweDQ3ODgsMCx7MHgwNCwweGU0LDB4ZjUsMHgxOCwweGYwLDB4OTAsMHg3OSwweDhjLDB4ZTAsMHhkMywweDk0LDB4MTQsMHg0MCwweDA1LDB4NzUsMHgxOH0gfSwKK3sgICA0LDB4NDc5OCwwLHsweDAxLDB4ZTQsMHhmMCwweDIyfSB9LAoreyAgMTYsMHg0NzljLDAsezB4OTAsMHg3ZiwweGQ3LDB4ZTAsMHhmNSwweDMzLDB4OTAsMHg3ZiwweGVjLDB4ZTAsMHhmNSwweDA5LDB4MTQsMHg2MCwweDExLDB4MTR9IH0sCit7ICAxNiwweDQ3YWMsMCx7MHg2MCwweDFiLDB4MjQsMHgwMiwweDcwLDB4MjQsMHg5MCwweDdmLDB4ZWEsMHhlMCwweDkwLDB4NzksMHg2MiwweGYwLDB4ODAsMHgyMX0gfSwKK3sgIDE2LDB4NDdiYywwLHsweDkwLDB4N2YsMHhlYSwweGUwLDB4OTAsMHg3OSwweDYzLDB4ZjAsMHgxMiwweDEwLDB4MDAsMHg4MCwweDE0LDB4OTAsMHg3ZiwweGVhfSB9LAoreyAgMTYsMHg0N2NjLDAsezB4ZTAsMHg5MCwweDc5LDB4NjQsMHhmMCwweDEyLDB4MjgsMHgwMSwweDgwLDB4MDcsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDF9IH0sCit7ICAgMiwweDQ3ZGMsMCx7MHhmMCwweGQzfSB9LAoreyAgIDEsMHg0N2RlLDAsezB4MjJ9IH0sCit7ICAxNiwweDQ3ZGYsMCx7MHg5MCwweDc5LDB4NzgsMHg3NCwweDA0LDB4ZjAsMHg5MCwweDc5LDB4MzMsMHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4YTIsMHhhZn0gfSwKK3sgIDE2LDB4NDdlZiwwLHsweGU0LDB4MzMsMHhmNSwweDEyLDB4YzIsMHhhZiwweDEyLDB4MGIsMHhhMiwweGU1LDB4MTIsMHg2MCwweDAyLDB4ZDIsMHhhZiwweDIyfSB9LAoreyAgIDEsMHg0N2ZmLDAsezB4MzJ9IH0sCit7ICAgMiwweDQ4MDAsMCx7MHg4ZiwweDM2fSB9LAoreyAgMTYsMHg0ODAyLDAsezB4ZTQsMHhmNSwweDM3LDB4NzUsMHgzOCwweGZmLDB4NzUsMHgzOSwweDA3LDB4NzUsMHgzYSwweDAxLDB4YWIsMHgzOCwweGFhLDB4Mzl9IH0sCit7ICAxNiwweDQ4MTIsMCx7MHhhOSwweDNhLDB4OTAsMHgwMCwweDAxLDB4MTIsMHgwYywweDVkLDB4YjQsMHgwMywweDFmLDB4YWYsMHgzNywweDA1LDB4MzcsMHhlZn0gfSwKK3sgIDE2LDB4NDgyMiwwLHsweDY1LDB4MzYsMHg3MCwweDAxLDB4MjIsMHgxMiwweDBjLDB4NDQsMHg3ZSwweDAwLDB4MjksMHhmZiwweGVlLDB4M2EsMHhjOSwweGVmfSB9LAoreyAgMTYsMHg0ODMyLDAsezB4YzksMHg3NSwweDM4LDB4ZmYsMHhmNSwweDM5LDB4ODksMHgzYSwweDgwLDB4ZDIsMHg3YiwweDAwLDB4N2EsMHgwMCwweDc5LDB4MDB9IH0sCit7ICAgMSwweDQ4NDIsMCx7MHgyMn0gfSwKK3sgIDE2LDB4NDg0MywwLHsweDMwLDB4MjYsMHgyZiwweGMyLDB4MjYsMHg5MCwweDc5LDB4MmQsMHhlMCwweGZmLDB4YjQsMHgwMSwweDA5LDB4ZTQsMHhmNSwweDBjfSB9LAoreyAgMTYsMHg0ODUzLDAsezB4NzUsMHgwZCwweGY4LDB4NzUsMHgwZSwweDBhLDB4ZWYsMHhiNCwweDAyLDB4MDksMHhlNCwweGY1LDB4MGMsMHg3NSwweDBkLDB4ZjB9IH0sCit7ICAxNiwweDQ4NjMsMCx7MHg3NSwweDBlLDB4MGIsMHhlZiwweGI0LDB4MDMsMHgwOSwweGU0LDB4ZjUsMHgwYywweDc1LDB4MGQsMHhmOCwweDc1LDB4MGUsMHgxN30gfSwKK3sgICAzLDB4NDg3MywwLHsweGQyLDB4MjIsMHgyMn0gfSwKK3sgIDE2LDB4NDg3NiwwLHsweDMwLDB4MjUsMHgyZiwweGMyLDB4MjUsMHg5MCwweDc5LDB4MmQsMHhlMCwweGZmLDB4YjQsMHgwMSwweDA5LDB4NzUsMHgwYywweGMwfSB9LAoreyAgMTYsMHg0ODg2LDAsezB4NzUsMHgwZCwweDE0LDB4NzUsMHgwZSwweDBiLDB4ZWYsMHhiNCwweDAyLDB4MDksMHhlNCwweGY1LDB4MGMsMHg3NSwweDBkLDB4MTB9IH0sCit7ICAxNiwweDQ4OTYsMCx7MHg3NSwweDBlLDB4MGMsMHhlZiwweGI0LDB4MDMsMHgwOSwweGU0LDB4ZjUsMHgwYywweDc1LDB4MGQsMHgxOCwweDc1LDB4MGUsMHgxOH0gfSwKK3sgICAzLDB4NDhhNiwwLHsweGQyLDB4MjIsMHgyMn0gfSwKK3sgIDE2LDB4NDhhOSwwLHsweGU0LDB4ZjUsMHgzMiwweDEyLDB4MGYsMHg1MCwweDIwLDB4MmUsMHgxMCwweGU1LDB4MzIsMHhjMywweDk0LDB4MDIsMHg1MCwweDA5fSB9LAoreyAgMTYsMHg0OGI5LDAsezB4MDUsMHgzMiwweGQyLDB4MzAsMHgxMiwweDQ5LDB4MDUsMHg4MCwweGVkLDB4MzAsMHgyZSwweDA1LDB4MTIsMHgxNCwweDU3LDB4YzJ9IH0sCit7ICAxNSwweDQ4YzksMCx7MHgyZSwweDMwLDB4MmQsMHgwNiwweDEyLDB4MDcsMHg5YSwweDEyLDB4NDgsMHhkOSwweDEyLDB4NDAsMHgwMCwweDgwLDB4ZWF9IH0sCit7ICAgMSwweDQ4ZDgsMCx7MHgyMn0gfSwKK3sgIDE2LDB4NDhkOSwwLHsweDkwLDB4N2YsMHhkNiwweGUwLDB4ZjUsMHgxZCwweDU0LDB4ODAsMHhmNSwweDFkLDB4NjQsMHg4MCwweDcwLDB4MWQsMHhjMiwweGFmfSB9LAoreyAgMTYsMHg0OGU5LDAsezB4ZTAsMHg0NCwweDgwLDB4ZjAsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDdmLDB4MGMsMHg3ZSwweDAwLDB4MTIsMHg0YiwweDZjLDB4OTB9IH0sCit7ICAxMiwweDQ4ZjksMCx7MHg3ZiwweGQ2LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg1MywweDg3LDB4ZmUsMHhkMiwweGFmLDB4MjJ9IH0sCit7ICAxNiwweDQ5MDUsMCx7MHg5MCwweDdmLDB4ZDYsMHhlMCwweDU0LDB4ZmIsMHhmMCwweGUwLDB4NDQsMHgwOCwweGYwLDB4MzAsMHgzMCwweDA0LDB4ZTAsMHg0NH0gfSwKK3sgIDE2LDB4NDkxNSwwLHsweDAyLDB4ZjAsMHg3ZiwweGRjLDB4N2UsMHgwNSwweDEyLDB4NGIsMHg2YywweDkwLDB4N2YsMHhkNiwweGUwLDB4NTQsMHhmNywweGYwfSB9LAoreyAgIDUsMHg0OTI1LDAsezB4ZTAsMHg0NCwweDA0LDB4ZjAsMHgyMn0gfSwKK3sgIDE2LDB4NDkyYSwwLHsweDkwLDB4N2YsMHhlYiwweGUwLDB4MTQsMHg3MCwweDE0LDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweDdmLDB4NzAsMHgwNCwweDEyfSB9LAoreyAgMTYsMHg0OTNhLDAsezB4NDYsMHgwMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDR9IH0sCit7ICAgMywweDQ5NGEsMCx7MHgwMSwweGYwLDB4MjJ9IH0sCit7ICAxNiwweDQ5NGQsMCx7MHg5MCwweDdmLDB4ZWIsMHhlMCwweDE0LDB4NzAsMHgxMywweDkwLDB4N2YsMHhlOSwweGUwLDB4MTQsMHg3MCwweDA0LDB4MTIsMHg0NX0gfSwKK3sgIDE2LDB4NDk1ZCwwLHsweDNiLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxfSB9LAoreyAgIDIsMHg0OTZkLDAsezB4ZjAsMHgyMn0gfSwKK3sgIDE2LDB4NDk2ZiwwLHsweGU0LDB4ZmYsMHg3NCwweGU4LDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg3NCwweDk2fSB9LAoreyAgMTQsMHg0OTdmLDAsezB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc5LDB4ZjUsMHg4MywweGVlLDB4ZjAsMHgwZiwweGJmLDB4MDgsMHhlNH0gfSwKK3sgICAxLDB4NDk4ZCwwLHsweDIyfSB9LAoreyAgMTYsMHg0OThlLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDAyLDB4ZjB9IH0sCit7ICAxMywweDQ5OWUsMCx7MHg5MCwweDdmLDB4YjcsMHg3NCwweDAzLDB4ZjAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0gfSwKK3sgIDE2LDB4NDlhYiwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYSwweGUwLDB4NDQsMHgwMiwweGYwfSB9LAoreyAgMTMsMHg0OWJiLDAsezB4OTAsMHg3ZiwweGM3LDB4NzQsMHgwMywweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDQ5YzgsMCx7MHg5MCwweDdmLDB4ZDYsMHhlMCwweDMwLDB4ZTcsMHgxMiwweGUwLDB4NDQsMHgwMSwweGYwLDB4N2YsMHgxNCwweDdlLDB4MDAsMHgxMn0gfSwKK3sgIDEwLDB4NDlkOCwwLHsweDRiLDB4NmMsMHg5MCwweDdmLDB4ZDYsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDIyfSB9LAoreyAgMTYsMHg0OWUyLDAsezB4ZTQsMHhmNSwweDFhLDB4NzUsMHgxYiwweDAxLDB4OTAsMHg3OSwweDkxLDB4MDQsMHhmMCwweGEzLDB4ZjAsMHhlNCwweGEzLDB4ZjB9IH0sCit7ICAgOCwweDQ5ZjIsMCx7MHhhMywweDc0LDB4MGEsMHhmMCwweGU0LDB4YTMsMHhmMCwweDIyfSB9LAoreyAgMTYsMHg0OWZhLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4ZDIsMHgyZSwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYiwweDc0LDB4MDF9IH0sCit7ICAgOCwweDRhMGEsMCx7MHhmMCwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTYsMHg0YTEyLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4ZDIsMHgyZCwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYiwweDc0LDB4MDh9IH0sCit7ICAgOCwweDRhMjIsMCx7MHhmMCwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTYsMHg0YTJhLDAsezB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmNSwweDA4LDB4ZTQsMHg5MCwweDc5LDB4NjIsMHhmMCwweGEzLDB4ZjAsMHhhMywweGYwLDB4OTB9IH0sCit7ICAgNywweDRhM2EsMCx7MHg3OSwweDY2LDB4ZjAsMHhhMywweGYwLDB4ZDMsMHgyMn0gfSwKK3sgIDE2LDB4NGE0MSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhOSwweGUwLDB4NDQsMHgwMSwweGYwfSB9LAoreyAgIDcsMHg0YTUxLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDRhNTgsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4MDQsMHhmMH0gfSwKK3sgICA3LDB4NGE2OCwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTYsMHg0YTZmLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDA0LDB4ZjB9IH0sCit7ICAgNywweDRhN2YsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0gfSwKK3sgIDE2LDB4NGE4NiwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhOSwweGUwLDB4NDQsMHgwOCwweGYwfSB9LAoreyAgIDcsMHg0YTk2LDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDRhOWQsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWEsMHhlMCwweDQ0LDB4MDgsMHhmMH0gfSwKK3sgICA3LDB4NGFhZCwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTYsMHg0YWI0LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDEwLDB4ZjB9IH0sCit7ICAgNywweDRhYzQsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0gfSwKK3sgIDE2LDB4NGFjYiwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYSwweGUwLDB4NDQsMHgxMCwweGYwfSB9LAoreyAgIDcsMHg0YWRiLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDRhZTIsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4MjAsMHhmMH0gfSwKK3sgICA3LDB4NGFmMiwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTYsMHg0YWY5LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDIwLDB4ZjB9IH0sCit7ICAgNywweDRiMDksMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0gfSwKK3sgIDE2LDB4NGIxMCwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhOSwweGUwLDB4NDQsMHg0MCwweGYwfSB9LAoreyAgIDcsMHg0YjIwLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDRiMjcsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWEsMHhlMCwweDQ0LDB4NDAsMHhmMH0gfSwKK3sgICA3LDB4NGIzNywwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTYsMHg0YjNlLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDgwLDB4ZjB9IH0sCit7ICAgNywweDRiNGUsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0gfSwKK3sgIDE2LDB4NGI1NSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYSwweGUwLDB4NDQsMHg4MCwweGYwfSB9LAoreyAgIDcsMHg0YjY1LDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDRiNmMsMCx7MHg4ZSwweDMzLDB4OGYsMHgzNCwweGU1LDB4MzQsMHgxNSwweDM0LDB4YWUsMHgzMywweDcwLDB4MDIsMHgxNSwweDMzLDB4NGUsMHg2MH0gfSwKK3sgICA3LDB4NGI3YywwLHsweDA1LDB4MTIsMHgwNywweDg5LDB4ODAsMHhlZSwweDIyfSB9LAoreyAgMTUsMHg0YjgzLDAsezB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhiNCwweGZmLDB4MDQsMHgxMiwweDMwLDB4MDAsMHgyMiwweDEyLDB4MzYsMHgwZSwweDIyfSB9LAoreyAgMTQsMHg0YjkyLDAsezB4YzAsMHhlMCwweGMyLDB4OGIsMHhkMiwweDI0LDB4MzAsMHgyMywweDAyLDB4YzIsMHgyMywweGQwLDB4ZTAsMHgzMn0gfSwKK3sgIDE0LDB4NGJhMCwwLHsweDkwLDB4N2YsMHgwMCwweGU1LDB4MDgsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDEsMHhmMCwweGQzLDB4MjJ9IH0sCit7ICAgOSwweDRiYWUsMCx7MHgzMCwweDI0LDB4MDUsMHhjMiwweDI0LDB4NzUsMHgxOCwweDAxLDB4MjJ9IH0sCit7ICAgOSwweDRiYjcsMCx7MHgzMCwweDIzLDB4MDUsMHhjMiwweDIzLDB4ZTQsMHhmNSwweDE4LDB4MjJ9IH0sCit7ICAgNywweDRiYzAsMCx7MHg1MywweGMwLDB4ZmUsMHg1MywweGMwLDB4ZmQsMHgzMn0gfSwKK3sgICA2LDB4NGJjNywwLHsweDUzLDB4OTEsMHg3ZiwweGQyLDB4MjUsMHgzMn0gfSwKK3sgICA1LDB4NGJjZCwwLHsweGMyLDB4ODksMHhkMiwweDIzLDB4MzJ9IH0sCit7ICAgMywweDRiZDIsMCx7MHhjMiwweDhkLDB4MzJ9IH0sCit7ICAgMywweDRiZDUsMCx7MHhjMiwweDhmLDB4MzJ9IH0sCit7ICAgMiwweDRiZDgsMCx7MHhkMywweDIyfSB9LAoreyAgIDIsMHg0YmRhLDAsezB4ZDMsMHgyMn0gfSwKK3sgICAyLDB4NGJkYywwLHsweGQzLDB4MjJ9IH0sCit7ICAgMiwweDRiZGUsMCx7MHhkMywweDIyfSB9LAoreyAgIDIsMHg0YmUwLDAsezB4ZDMsMHgyMn0gfSwKK3sgICAyLDB4NGJlMiwwLHsweGQzLDB4MjJ9IH0sCit7ICAgMiwweDRiZTQsMCx7MHhjMywweDIyfSB9LAoreyAgIDEsMHg0YmU2LDAsezB4MjJ9IH0sCit7ICAgMCwweDAwMDAsMSx7MCB9fQorfTsKKy8qCitWRVJTSU9OPTEuMC4yLjkxNgorREFURT0xMi4wMi4yMDAyCisqLworLyoKKyAqIFRoaXMgZmlybXdhcmUgaXMgZm9yIHRoZSBFbWFnaWMgRU1JIDJ8NiBBdWRpbyBJbnRlcmZhY2UKKyAqCisgKiBUaGUgZmlybXdhcmUgY29udGFpbmVkIGhlcmVpbiBpcyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMiBFbWFnaWMKKyAqIGFzIGFuIHVucHVibGlzaGVkIHdvcmsuIFRoaXMgbm90aWNlIGRvZXMgbm90IGltcGx5IHVucmVzdHJpY3RlZAorICogb3IgcHVibGljIGFjY2VzcyB0byB0aGlzIGZpcm13YXJlIHdoaWNoIGlzIGEgdHJhZGUgc2VjcmV0IG9mIEVtYWdpYywKKyAqIGFuZCB3aGljaCBtYXkgbm90IGJlIHJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8KKyAqIGFueSB0aGlyZCBwYXJ0eSB3aXRob3V0IEVtYWdpYydzIHdyaXR0ZW4gY29uc2VudC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIGZpcm13YXJlIG1heSBub3QgYmUgbW9kaWZpZWQgYW5kIG1heSBvbmx5IGJlIHVzZWQgd2l0aCB0aGUKKyAqIEVtYWdpYyBFTUkgMnw2IEF1ZGlvIEludGVyZmFjZS4gRGlzdHJpYnV0aW9uIGFuZC9vciBNb2RpZmljYXRpb24gb2YKKyAqIGFueSBkcml2ZXIgd2hpY2ggaW5jbHVkZXMgdGhpcyBmaXJtd2FyZSwgaW4gd2hvbGUgb3IgaW4gcGFydCwKKyAqIHJlcXVpcmVzIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBzdGF0ZW1lbnQuCisgKi8KK3N0YXRpYyBJTlRFTF9IRVhfUkVDT1JEIGdfTG9hZGVyW10gPSB7Cit7ICAgMywweDAwMDAsMCx7MHgwMiwweDAzLDB4MWN9IH0sCit7ICAgMywweDAwNDMsMCx7MHgwMiwweDA0LDB4MDB9IH0sCit7ICAxNiwweDAxMDAsMCx7MHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4NWIsMHg2MCwweDYwLDB4MjQsMHgwMiwweDYwLDB4MDMsMHgwMiwweDAxLDB4YmUsMHg5MH0gfSwKK3sgIDE2LDB4MDExMCwwLHsweDdmLDB4ZWEsMHhlMCwweDc1LDB4MGEsMHgwMCwweGY1LDB4MGIsMHhhMywweGUwLDB4ZmUsMHhlNCwweGVlLDB4NDIsMHgwYSwweDkwfSB9LAoreyAgMTYsMHgwMTIwLDAsezB4N2YsMHhlZSwweGUwLDB4NzUsMHgxNSwweDAwLDB4ZjUsMHgxNiwweGEzLDB4ZTAsMHhmZSwweGU0LDB4ZWUsMHg0MiwweDE1LDB4ZTV9IH0sCit7ICAxNiwweDAxMzAsMCx7MHgxNiwweDQ1LDB4MTUsMHg3MCwweDAzLDB4MDIsMHgwMSwweGJlLDB4ZTQsMHg5MCwweDdmLDB4YzUsMHhmMCwweDkwLDB4N2YsMHhiNH0gfSwKK3sgIDE2LDB4MDE0MCwwLHsweGUwLDB4MjAsMHhlMywweGY5LDB4OTAsMHg3ZiwweGM1LDB4ZTAsMHhmNSwweDBjLDB4MTIsMHgwMiwweDc3LDB4YWYsMHgwYywweDdlfSB9LAoreyAgMTYsMHgwMTUwLDAsezB4MDAsMHhlZiwweDI1LDB4MGIsMHhmNSwweDBiLDB4ZWUsMHgzNSwweDBhLDB4ZjUsMHgwYSwweGMzLDB4ZTUsMHgxNiwweDlmLDB4ZjV9IH0sCit7ICAxNiwweDAxNjAsMCx7MHgxNiwweGU1LDB4MTUsMHg5ZSwweGY1LDB4MTUsMHg4MCwweGM3LDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHg3NSwweDBhLDB4MDAsMHhmNX0gfSwKK3sgIDE2LDB4MDE3MCwwLHsweDBiLDB4YTMsMHhlMCwweGZlLDB4ZTQsMHhlZSwweDQyLDB4MGEsMHg5MCwweDdmLDB4ZWUsMHhlMCwweDc1LDB4MTUsMHgwMCwweGY1fSB9LAoreyAgMTYsMHgwMTgwLDAsezB4MTYsMHhhMywweGUwLDB4ZmUsMHhlNCwweGVlLDB4NDIsMHgxNSwweGU1LDB4MTYsMHg0NSwweDE1LDB4NjAsMHgzMCwweGU0LDB4OTB9IH0sCit7ICAxNiwweDAxOTAsMCx7MHg3ZiwweGM1LDB4ZjAsMHg5MCwweDdmLDB4YjQsMHhlMCwweDIwLDB4ZTMsMHhmOSwweDkwLDB4N2YsMHhjNSwweGUwLDB4ZjUsMHgwY30gfSwKK3sgIDE2LDB4MDFhMCwwLHsweDEyLDB4MDIsMHg4ZiwweGFmLDB4MGMsMHg3ZSwweDAwLDB4ZWYsMHgyNSwweDBiLDB4ZjUsMHgwYiwweGVlLDB4MzUsMHgwYSwweGY1fSB9LAoreyAgMTUsMHgwMWIwLDAsezB4MGEsMHhjMywweGU1LDB4MTYsMHg5ZiwweGY1LDB4MTYsMHhlNSwweDE1LDB4OWUsMHhmNSwweDE1LDB4ODAsMHhjYSwweGMzfSB9LAoreyAgIDEsMHgwMWJmLDAsezB4MjJ9IH0sCit7ICAxNiwweDAxYzAsMCx7MHhjMiwweDIwLDB4ZDIsMHhlOCwweDQzLDB4ZDgsMHgyMCwweDkwLDB4N2YsMHhhYiwweDc0LDB4ZmYsMHhmMCwweDkwLDB4N2YsMHhhOX0gfSwKK3sgIDE2LDB4MDFkMCwwLHsweGYwLDB4OTAsMHg3ZiwweGFhLDB4ZjAsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4OTUsMHhlMCwweDQ0LDB4YzAsMHhmMCwweDkwfSB9LAoreyAgMTYsMHgwMWUwLDAsezB4N2YsMHg5OCwweGUwLDB4NDQsMHhjMCwweGYwLDB4OTAsMHg3ZiwweDllLDB4ZTAsMHg0NCwweGMwLDB4ZjAsMHhlNCwweDkwLDB4N2Z9IH0sCit7ICAxNiwweDAxZjAsMCx7MHg5NCwweGYwLDB4OTAsMHg3ZiwweDlkLDB4ZTAsMHg0NCwweDBmLDB4ZjAsMHg5MCwweDdmLDB4OTcsMHhlMCwweDU0LDB4ZjAsMHhmMH0gfSwKK3sgIDE2LDB4MDIwMCwwLHsweDkwLDB4N2YsMHhhZiwweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGFlLDB4ZTAsMHg0NCwweDBkLDB4ZjAsMHhkMiwweGFmfSB9LAoreyAgMTYsMHgwMjEwLDAsezB4OTAsMHg3ZiwweDk3LDB4ZTAsMHg1NCwweGYwLDB4ZjAsMHgyMCwweDIwLDB4NDIsMHg3NSwweDE0LDB4MDAsMHg3NSwweDEzLDB4MDB9IH0sCit7ICAxNiwweDAyMjAsMCx7MHg3NSwweDEyLDB4MDAsMHg3NSwweDExLDB4MDAsMHg3ZiwweDQ4LDB4N2UsMHg5MiwweDdkLDB4MDAsMHg3YywweDAwLDB4YWIsMHgxNH0gfSwKK3sgIDE2LDB4MDIzMCwwLHsweGFhLDB4MTMsMHhhOSwweDEyLDB4YTgsMHgxMSwweGMzLDB4MTIsMHgwNCwweDlhLDB4NTAsMHhkYiwweDIwLDB4MjAsMHhkOCwweDdhfSB9LAoreyAgMTYsMHgwMjQwLDAsezB4MDAsMHg3OSwweDAwLDB4NzgsMHgwMCwweGU1LDB4MTQsMHgyNCwweDAxLDB4ZjUsMHgxNCwweGVhLDB4MzUsMHgxMywweGY1LDB4MTN9IH0sCit7ICAxNiwweDAyNTAsMCx7MHhlOSwweDM1LDB4MTIsMHhmNSwweDEyLDB4ZTgsMHgzNSwweDExLDB4ZjUsMHgxMSwweDgwLDB4Y2EsMHgzMCwweDIwLDB4ZmQsMHgxMn0gfSwKK3sgIDE2LDB4MDI2MCwwLHsweDAxLDB4MDAsMHg1MCwweDA3LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0fSB9LAoreyAgIDYsMHgwMjcwLDAsezB4MDIsMHhmMCwweGMyLDB4MjAsMHg4MCwweGU2fSB9LAoreyAgIDEsMHgwMjc2LDAsezB4MjJ9IH0sCit7ICAxNiwweDAyNzcsMCx7MHhlNSwweDBjLDB4ZmYsMHhlNSwweDBiLDB4ZjUsMHg4MiwweGU1LDB4MGEsMHhmNSwweDgzLDB4NzUsMHg5MiwweDdlLDB4NzQsMHhjMH0gfSwKK3sgICA4LDB4MDI4NywwLHsweGY4LDB4ZTIsMHgwOCwweGYwLDB4YTMsMHhkZiwweGZhLDB4MjJ9IH0sCit7ICAxNiwweDAyOGYsMCx7MHg5MCwweDdmLDB4OTYsMHg4NSwweDgzLDB4OTIsMHhhOCwweDgyLDB4NzksMHgwMiwweDkwLDB4MDAsMHgwMCwweGUwLDB4YjQsMHgwMH0gfSwKK3sgIDE2LDB4MDI5ZiwwLHsweDM3LDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3ZiwweDkzLDB4ZTAsMHg1NCwweGZjLDB4ZjAsMHg5MCwweDdmLDB4OTYsMHhlMCwweDU0fSB9LAoreyAgMTYsMHgwMmFmLDAsezB4ZmMsMHhmMCwweDkwLDB4N2YsMHg5YywweGUwLDB4NDQsMHgwMywweGYwLDB4OTAsMHg3ZiwweDk0LDB4ZTAsMHg1NCwweDdmLDB4ZjB9IH0sCit7ICAxNiwweDAyYmYsMCx7MHg5MCwweDdmLDB4OTcsMHhlMCwweDQ0LDB4ODAsMHhmMCwweDkwLDB4N2YsMHg5ZCwweGUwLDB4NDQsMHg4MCwweGYwLDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4MDJjZiwwLHsweDk3LDB4ZTAsMHg1NCwweDdmLDB4ZjAsMHg0NCwweDgwLDB4ZjAsMHhlNSwweDBjLDB4ZmYsMHg5MCwweDdlLDB4YzAsMHhlMCwweGY1fSB9LAoreyAgMTYsMHgwMmRmLDAsezB4MjgsMHhlNCwweGEyLDB4NDcsMHgzMywweGYyLDB4NjksMHhmMiwweGU0LDB4YTIsMHg0NiwweDMzLDB4ZjIsMHg2OSwweGYyLDB4ZTR9IH0sCit7ICAxNiwweDAyZWYsMCx7MHhhMiwweDQ1LDB4MzMsMHhmMiwweDY5LDB4ZjIsMHhlNCwweGEyLDB4NDQsMHgzMywweGYyLDB4NjksMHhmMiwweGU0LDB4YTIsMHg0M30gfSwKK3sgIDE2LDB4MDJmZiwwLHsweDMzLDB4ZjIsMHg2OSwweGYyLDB4ZTQsMHhhMiwweDQyLDB4MzMsMHhmMiwweDY5LDB4ZjIsMHhlNCwweGEyLDB4NDEsMHgzMywweGYyfSB9LAoreyAgMTMsMHgwMzBmLDAsezB4NjksMHhmMiwweGU0LDB4YTIsMHg0MCwweDMzLDB4ZjIsMHg2OSwweGYyLDB4YTMsMHhkZiwweGMyLDB4MjJ9IH0sCit7ICAxMiwweDAzMWMsMCx7MHg3OCwweDdmLDB4ZTQsMHhmNiwweGQ4LDB4ZmQsMHg3NSwweDgxLDB4MjksMHgwMiwweDAzLDB4NjN9IH0sCit7ICAxNiwweDAzMjgsMCx7MHgwMiwweDAxLDB4YzAsMHhlNCwweDkzLDB4YTMsMHhmOCwweGU0LDB4OTMsMHhhMywweDQwLDB4MDMsMHhmNiwweDgwLDB4MDEsMHhmMn0gfSwKK3sgIDE2LDB4MDMzOCwwLHsweDA4LDB4ZGYsMHhmNCwweDgwLDB4MjksMHhlNCwweDkzLDB4YTMsMHhmOCwweDU0LDB4MDcsMHgyNCwweDBjLDB4YzgsMHhjMywweDMzfSB9LAoreyAgMTYsMHgwMzQ4LDAsezB4YzQsMHg1NCwweDBmLDB4NDQsMHgyMCwweGM4LDB4ODMsMHg0MCwweDA0LDB4ZjQsMHg1NiwweDgwLDB4MDEsMHg0NiwweGY2LDB4ZGZ9IH0sCit7ICAxNiwweDAzNTgsMCx7MHhlNCwweDgwLDB4MGIsMHgwMSwweDAyLDB4MDQsMHgwOCwweDEwLDB4MjAsMHg0MCwweDgwLDB4OTAsMHgwNCwweDg0LDB4ZTQsMHg3ZX0gfSwKK3sgIDE2LDB4MDM2OCwwLHsweDAxLDB4OTMsMHg2MCwweGJjLDB4YTMsMHhmZiwweDU0LDB4M2YsMHgzMCwweGU1LDB4MDksMHg1NCwweDFmLDB4ZmUsMHhlNCwweDkzfSB9LAoreyAgMTYsMHgwMzc4LDAsezB4YTMsMHg2MCwweDAxLDB4MGUsMHhjZiwweDU0LDB4YzAsMHgyNSwweGUwLDB4NjAsMHhhOCwweDQwLDB4YjgsMHhlNCwweDkzLDB4YTN9IH0sCit7ICAxNiwweDAzODgsMCx7MHhmYSwweGU0LDB4OTMsMHhhMywweGY4LDB4ZTQsMHg5MywweGEzLDB4YzgsMHhjNSwweDgyLDB4YzgsMHhjYSwweGM1LDB4ODMsMHhjYX0gfSwKK3sgIDE2LDB4MDM5OCwwLHsweGYwLDB4YTMsMHhjOCwweGM1LDB4ODIsMHhjOCwweGNhLDB4YzUsMHg4MywweGNhLDB4ZGYsMHhlOSwweGRlLDB4ZTcsMHg4MCwweGJlfSB9LAoreyAgMTYsMHgwM2E4LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4OTAsMHg3ZiwweGM0LDB4ZTQsMHhmMCwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2Z9IH0sCit7ICAxMSwweDAzYjgsMCx7MHhhYiwweDc0LDB4MDQsMHhmMCwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTYsMHgwM2MzLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4ZDIsMHgyMCwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYiwweDc0LDB4MDF9IH0sCit7ICAgOCwweDAzZDMsMCx7MHhmMCwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTYsMHgwM2RiLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwMiwweGYwLDB4ZDB9IH0sCit7ICAgNiwweDAzZWIsMCx7MHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAgMSwweDAzZjEsMCx7MHgzMn0gfSwKK3sgICAxLDB4MDNmMiwwLHsweDMyfSB9LAoreyAgIDEsMHgwM2YzLDAsezB4MzJ9IH0sCit7ICAgMSwweDAzZjQsMCx7MHgzMn0gfSwKK3sgICAxLDB4MDNmNSwwLHsweDMyfSB9LAoreyAgIDEsMHgwM2Y2LDAsezB4MzJ9IH0sCit7ICAgMSwweDAzZjcsMCx7MHgzMn0gfSwKK3sgICAxLDB4MDNmOCwwLHsweDMyfSB9LAoreyAgIDEsMHgwM2Y5LDAsezB4MzJ9IH0sCit7ICAgMSwweDAzZmEsMCx7MHgzMn0gfSwKK3sgICAxLDB4MDNmYiwwLHsweDMyfSB9LAoreyAgIDEsMHgwM2ZjLDAsezB4MzJ9IH0sCit7ICAgMSwweDAzZmQsMCx7MHgzMn0gfSwKK3sgICAxLDB4MDNmZSwwLHsweDMyfSB9LAoreyAgIDEsMHgwM2ZmLDAsezB4MzJ9IH0sCit7ICAxNiwweDA0MDAsMCx7MHgwMiwweDAzLDB4YzMsMHgwMCwweDAyLDB4MDMsMHhkYiwweDAwLDB4MDIsMHgwMywweGE4LDB4MDAsMHgwMiwweDA0LDB4NmUsMHgwMH0gfSwKK3sgIDE2LDB4MDQxMCwwLHsweDAyLDB4MDQsMHg1OCwweDAwLDB4MDIsMHgwMywweGYxLDB4MDAsMHgwMiwweDAzLDB4ZjIsMHgwMCwweDAyLDB4MDMsMHhmMywweDAwfSB9LAoreyAgMTYsMHgwNDIwLDAsezB4MDIsMHgwMywweGY0LDB4MDAsMHgwMiwweDAzLDB4ZjUsMHgwMCwweDAyLDB4MDMsMHhmNiwweDAwLDB4MDIsMHgwMywweGY3LDB4MDB9IH0sCit7ICAxNiwweDA0MzAsMCx7MHgwMiwweDAzLDB4ZjgsMHgwMCwweDAyLDB4MDMsMHhmOSwweDAwLDB4MDIsMHgwMywweGZhLDB4MDAsMHgwMiwweDAzLDB4ZmIsMHgwMH0gfSwKK3sgIDE2LDB4MDQ0MCwwLHsweDAyLDB4MDMsMHhmYywweDAwLDB4MDIsMHgwMywweGZkLDB4MDAsMHgwMiwweDAzLDB4ZmUsMHgwMCwweDAyLDB4MDMsMHhmZiwweDAwfSB9LAoreyAgIDgsMHgwNDUwLDAsezB4MDIsMHgwNCwweGFiLDB4MDAsMHgwMiwweDA0LDB4YWMsMHgwMH0gfSwKK3sgIDE2LDB4MDQ1OCwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYiwweDc0LDB4MTAsMHhmMCwweGQwfSB9LAoreyAgIDYsMHgwNDY4LDAsezB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTYsMHgwNDZlLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwOCwweGYwLDB4ZDB9IH0sCit7ICAgNiwweDA0N2UsMCx7MHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDA0ODQsMCx7MHgwMiwweDBhLDB4MDAsMHgwZiwweDAxLDB4MGMsMHgxMSwweDA0LDB4MGQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQxLDB4MDAsMHgwMH0gfSwKK3sgICAxLDB4MDQ5NCwwLHsweDAwfSB9LAoreyAgIDQsMHgwNDk1LDAsezB4MDIsMHgxNywweDAwLDB4MDB9IH0sCit7ICAgMSwweDA0OTksMCx7MHgwMH0gfSwKK3sgIDE2LDB4MDQ5YSwwLHsweGViLDB4OWYsMHhmNSwweGYwLDB4ZWEsMHg5ZSwweDQyLDB4ZjAsMHhlOSwweDlkLDB4NDIsMHhmMCwweGU4LDB4OWMsMHg0NSwweGYwfSB9LAoreyAgIDEsMHgwNGFhLDAsezB4MjJ9IH0sCit7ICAgMSwweDA0YWIsMCx7MHgzMn0gfSwKK3sgICAxLDB4MDRhYywwLHsweDMyfSB9LAoreyAgMTYsMHgxMTAwLDAsezB4MTIsMHgwMSwweDEwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHg0MCwweDZhLDB4MDgsMHgwMSwweDAxLDB4MDAsMHgwMSwweDAxLDB4MDJ9IH0sCit7ICAxNiwweDExMTAsMCx7MHgwMCwweDAxLDB4MDksMHgwMiwweDIwLDB4MDAsMHgwMSwweDAxLDB4MDMsMHhhMCwweDAwLDB4MDksMHgwNCwweDAwLDB4MDAsMHgwMn0gfSwKK3sgIDE2LDB4MTEyMCwwLHsweGZmLDB4MDAsMHgwMCwweDA0LDB4MDcsMHgwNSwweDgyLDB4MDIsMHg0MCwweDAwLDB4MDAsMHgwNywweDA1LDB4MDIsMHgwMiwweDQwfSB9LAoreyAgMTYsMHgxMTMwLDAsezB4MDAsMHgwMCwweDA0LDB4MDMsMHgwOSwweDA0LDB4MjYsMHgwMywweDQxLDB4MDAsMHg2ZSwweDAwLDB4NjMsMHgwMCwweDY4LDB4MDB9IH0sCit7ICAxNiwweDExNDAsMCx7MHg2ZiwweDAwLDB4NzIsMHgwMCwweDIwLDB4MDAsMHg0MywweDAwLDB4NjgsMHgwMCwweDY5LDB4MDAsMHg3MCwweDAwLDB4NzMsMHgwMH0gfSwKK3sgIDE2LDB4MTE1MCwwLHsweDJjLDB4MDAsMHgyMCwweDAwLDB4NDksMHgwMCwweDZlLDB4MDAsMHg2MywweDAwLDB4MmUsMHgwMCwweDI4LDB4MDMsMHg0NiwweDAwfSB9LAoreyAgMTYsMHgxMTYwLDAsezB4NjksMHgwMCwweDcyLDB4MDAsMHg2ZCwweDAwLDB4NzcsMHgwMCwweDYxLDB4MDAsMHg3MiwweDAwLDB4NjUsMHgwMCwweDIwLDB4MDB9IH0sCit7ICAxNiwweDExNzAsMCx7MHg0NiwweDAwLDB4NzIsMHgwMCwweDYxLDB4MDAsMHg2ZCwweDAwLDB4NjUsMHgwMCwweDU3LDB4MDAsMHg2ZiwweDAwLDB4NzIsMHgwMH0gfSwKK3sgIDE2LDB4MTE4MCwwLHsweDZiLDB4MDAsMHg3MywweDAwLDB4MmEsMHgwMywweDQzLDB4MDAsMHg2ZiwweDAwLDB4NmUsMHgwMCwweDY2LDB4MDAsMHg2OSwweDAwfSB9LAoreyAgMTYsMHgxMTkwLDAsezB4NjcsMHgwMCwweDc1LDB4MDAsMHg3MiwweDAwLDB4NjEsMHgwMCwweDc0LDB4MDAsMHg2OSwweDAwLDB4NmYsMHgwMCwweDZlLDB4MDB9IH0sCit7ICAxNiwweDExYTAsMCx7MHgyMCwweDAwLDB4NTMsMHgwMCwweDc0LDB4MDAsMHg3MiwweDAwLDB4NjksMHgwMCwweDZlLDB4MDAsMHg2NywweDAwLDB4MjIsMHgwM30gfSwKK3sgIDE2LDB4MTFiMCwwLHsweDQ5LDB4MDAsMHg2ZSwweDAwLDB4NzQsMHgwMCwweDY1LDB4MDAsMHg3MiwweDAwLDB4NjYsMHgwMCwweDYxLDB4MDAsMHg2MywweDAwfSB9LAoreyAgMTYsMHgxMWMwLDAsezB4NjUsMHgwMCwweDIwLDB4MDAsMHg1MywweDAwLDB4NzQsMHgwMCwweDcyLDB4MDAsMHg2OSwweDAwLDB4NmUsMHgwMCwweDY3LDB4MDB9IH0sCit7ICAgMiwweDExZDAsMCx7MHgwMCwweDAwfSB9LAoreyAgIDAsMHgwMDAwLDEsezAgfX0KK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg5OTg2YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pNjIuYwpAQCAtMCwwICsxLDI5OCBAQAorLyogCisgKiBFbWFnaWMgRU1JIDJ8NiB1c2IgYXVkaW8gaW50ZXJmYWNlIGZpcm13YXJlIGxvYWRlci4KKyAqIENvcHlyaWdodCAoQykgMjAwMgorICogCVRhcGlvIExheHN0cvZtICh0YXBpby5sYXhzdHJvbUBpcHRpbWUuZmkpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICogCisgKiAkSWQ6IGVtaTYyLmMsdiAxLjE1IDIwMDIvMDQvMjMgMDY6MTM6NTkgdGFwaW8gRXhwICQKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2RlZmluZSBNQVhfSU5URUxfSEVYX1JFQ09SRF9MRU5HVEggMTYKK3R5cGVkZWYgc3RydWN0IF9JTlRFTF9IRVhfUkVDT1JECit7CisJX191MzIJbGVuZ3RoOworCV9fdTMyCWFkZHJlc3M7CisJX191MzIJdHlwZTsKKwlfX3U4CWRhdGFbTUFYX0lOVEVMX0hFWF9SRUNPUkRfTEVOR1RIXTsKK30gSU5URUxfSEVYX1JFQ09SRCwgKlBJTlRFTF9IRVhfUkVDT1JEOworCisvKiBpbmNsdWRlIGZpcm13YXJlICh2YXJpYWJsZXMpKi8KKworLyogRklYTUU6IFRoaXMgaXMgcXVpY2sgYW5kIGRpcnR5IHNvbHV0aW9uISAqLworI2RlZmluZSBTUERJRgkvKiBpZiB5b3Ugd2FudCBTUERJRiBjb21tZW50IG5leHQgbGluZSAqLworLy8jdW5kZWYgU1BESUYJLyogaWYgeW91IHdhbnQgTUlESSB1bmNvbW1lbnQgdGhpcyBsaW5lICovIAorCisjaWZkZWYgU1BESUYKKyMgIGluY2x1ZGUgImVtaTYyX2Z3X3MuaCIgLyogc3BkaWYgZncgKi8KKyNlbHNlCisjICBpbmNsdWRlICJlbWk2Ml9md19tLmgiIC8qIG1pZGkgZncgKi8KKyNlbmRpZgorCisjZGVmaW5lIEVNSTYyX1ZFTkRPUl9JRCAJCTB4MDg2YSAgLyogRW1hZ2ljIFNvZnQtdW5kIEhhcmR3YXJlIEdtQkggKi8KKyNkZWZpbmUgRU1JNjJfUFJPRFVDVF9JRAkJMHgwMTEwCS8qIEVNSSA2fDJtIHdpdGhvdXQgZmlybXdhcmUgKi8KKworI2RlZmluZSBBTkNIT1JfTE9BRF9JTlRFUk5BTAkweEEwCS8qIFZlbmRvciBzcGVjaWZpYyByZXF1ZXN0IGNvZGUgZm9yIEFuY2hvciBVcGxvYWQvRG93bmxvYWQgKFRoaXMgb25lIGlzIGltcGxlbWVudGVkIGluIHRoZSBjb3JlKSAqLworI2RlZmluZSBBTkNIT1JfTE9BRF9FWFRFUk5BTAkweEEzCS8qIFRoaXMgY29tbWFuZCBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvcmUuIFJlcXVpcmVzIGZpcm13YXJlICovCisjZGVmaW5lIEFOQ0hPUl9MT0FEX0ZQR0EJMHhBNQkvKiBUaGlzIGNvbW1hbmQgaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBjb3JlLiBSZXF1aXJlcyBmaXJtd2FyZS4gRW1hZ2ljIGV4dGVuc2lvbiAqLworI2RlZmluZSBNQVhfSU5URVJOQUxfQUREUkVTUwkweDFCM0YJLyogVGhpcyBpcyB0aGUgaGlnaGVzdCBpbnRlcm5hbCBSQU0gYWRkcmVzcyBmb3IgdGhlIEFOMjEzMVEgKi8KKyNkZWZpbmUgQ1BVQ1NfUkVHCQkweDdGOTIgIC8qIEVaLVVTQiBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIuICBCaXQgMCBjb250cm9scyA4MDUxIHJlc2V0ICovIAorI2RlZmluZSBJTlRFUk5BTF9SQU0oYWRkcmVzcykgICAoYWRkcmVzcyA8PSBNQVhfSU5URVJOQUxfQUREUkVTUykKKworc3RhdGljIGludCBlbWk2Ml93cml0ZW1lbW9yeSggc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IGFkZHJlc3MsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgsIF9fdTggYlJlcXVlc3QpOworc3RhdGljIGludCBlbWk2Ml9zZXRfcmVzZXQoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciByZXNldF9iaXQpOworc3RhdGljIGludCBlbWk2Ml9sb2FkX2Zpcm13YXJlIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgZW1pNjJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgdm9pZCBlbWk2Ml9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKK3N0YXRpYyBpbnQgX19pbml0IGVtaTYyX2luaXQgKHZvaWQpOworc3RhdGljIHZvaWQgX19leGl0IGVtaTYyX2V4aXQgKHZvaWQpOworCisKKy8qIHRoYW5rcyB0byBkcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYyBjb2RlICovCitzdGF0aWMgaW50IGVtaTYyX3dyaXRlbWVtb3J5IChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgYWRkcmVzcywgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbmd0aCwgX191OCByZXF1ZXN0KQoreworCWludCByZXN1bHQ7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyID0gIGttYWxsb2MgKGxlbmd0aCwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWJ1ZmZlcikgeworCQllcnIoImVtaTYyOiBrbWFsbG9jKCVkKSBmYWlsZWQuIiwgbGVuZ3RoKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbWNweSAoYnVmZmVyLCBkYXRhLCBsZW5ndGgpOworCS8qIE5vdGU6IHVzYl9jb250cm9sX21zZyByZXR1cm5zIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yIG9yIGxlbmd0aCBvZiB0aGUKKwkgKiAJCSBkYXRhIHRoYXQgd2FzIHdyaXR0ZW4hICovCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnIChkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCByZXF1ZXN0LCAweDQwLCBhZGRyZXNzLCAwLCBidWZmZXIsIGxlbmd0aCwgMzAwKTsKKwlrZnJlZSAoYnVmZmVyKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKiB0aGFua3MgdG8gZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMgY29kZSAqLworc3RhdGljIGludCBlbWk2Ml9zZXRfcmVzZXQgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgcmVzZXRfYml0KQoreworCWludCByZXNwb25zZTsKKwlpbmZvKCIlcyAtICVkIiwgX19GVU5DVElPTl9fLCByZXNldF9iaXQpOworCQorCXJlc3BvbnNlID0gZW1pNjJfd3JpdGVtZW1vcnkgKGRldiwgQ1BVQ1NfUkVHLCAmcmVzZXRfYml0LCAxLCAweGEwKTsKKwlpZiAocmVzcG9uc2UgPCAwKSB7CisJCWVycigiZW1pNjI6IHNldF9yZXNldCAoJWQpIGZhaWxlZCIsIHJlc2V0X2JpdCk7CisJfQorCXJldHVybiByZXNwb25zZTsKK30KKworI2RlZmluZSBGV19MT0FEX1NJWkUJCTEwMjMKKworc3RhdGljIGludCBlbWk2Ml9sb2FkX2Zpcm13YXJlIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQoreworCWludCBlcnI7CisJaW50IGk7CisJaW50IHBvcyA9IDA7CS8qIFBvc2l0aW9uIGluIGhleCByZWNvcmQgKi8KKwlfX3UzMiBhZGRyOwkvKiBBZGRyZXNzIHRvIHdyaXRlICovCisJX191OCAqYnVmOworCisJZGV2X2RiZygmZGV2LT5kZXYsICJsb2FkX2Zpcm13YXJlXG4iKTsKKwlidWYgPSBrbWFsbG9jKEZXX0xPQURfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJZXJyKCAiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCAtRU5PTUVNKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byB3cmFwZXJyOworCX0KKworCS8qIEFzc2VydCByZXNldCAoc3RvcCB0aGUgQ1BVIGluIHRoZSBFTUkpICovCisJZXJyID0gZW1pNjJfc2V0X3Jlc2V0KGRldiwxKTsKKwlpZiAoZXJyIDwgMCkgeworCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJZ290byB3cmFwZXJyOworCX0KKworCS8qIDEuIFdlIG5lZWQgdG8gcHV0IHRoZSBsb2FkZXIgZm9yIHRoZSBGUEdBIGludG8gdGhlIEVaLVVTQiAqLworCWZvciAoaT0wOyBnX2VtaTYyX2xvYWRlcltpXS50eXBlID09IDA7IGkrKykgeworCQllcnIgPSBlbWk2Ml93cml0ZW1lbW9yeShkZXYsIGdfZW1pNjJfbG9hZGVyW2ldLmFkZHJlc3MsIGdfZW1pNjJfbG9hZGVyW2ldLmRhdGEsIGdfZW1pNjJfbG9hZGVyW2ldLmxlbmd0aCwgQU5DSE9SX0xPQURfSU5URVJOQUwpOworCQlpZiAoZXJyIDwgMCkgeworCQkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCQlnb3RvIHdyYXBlcnI7CisJCX0KKwl9CisKKwkvKiBEZS1hc3NlcnQgcmVzZXQgKGxldCB0aGUgQ1BVIHJ1bikgKi8KKwllcnIgPSBlbWk2Ml9zZXRfcmVzZXQoZGV2LDApOworCisJLyogMi4gV2UgdXBsb2FkIHRoZSBGUEdBIGZpcm13YXJlIGludG8gdGhlIEVNSQorCSAqIE5vdGU6IGNvbGxlY3QgdXAgdG8gMTAyMyAoeWVzISkgYnl0ZXMgYW5kIHNlbmQgdGhlbSB3aXRoCisJICogYSBzaW5nbGUgcmVxdWVzdC4gVGhpcyBpcyBfbXVjaF8gZmFzdGVyISAqLworCWRvIHsKKwkJaSA9IDA7CisJCWFkZHIgPSBnX2VtaTYyYnNbcG9zXS5hZGRyZXNzOworCisJCS8qIGludGVsIGhleCByZWNvcmRzIGFyZSB0ZXJtaW5hdGVkIHdpdGggdHlwZSAwIGVsZW1lbnQgKi8KKwkJd2hpbGUgKChnX2VtaTYyYnNbcG9zXS50eXBlID09IDApICYmIChpICsgZ19lbWk2MmJzW3Bvc10ubGVuZ3RoIDwgRldfTE9BRF9TSVpFKSkgeworCQkJbWVtY3B5KGJ1ZiArIGksIGdfZW1pNjJic1twb3NdLmRhdGEsIGdfZW1pNjJic1twb3NdLmxlbmd0aCk7CisJCQlpICs9IGdfZW1pNjJic1twb3NdLmxlbmd0aDsKKwkJCXBvcysrOworCQl9CisJCWVyciA9IGVtaTYyX3dyaXRlbWVtb3J5KGRldiwgYWRkciwgYnVmLCBpLCBBTkNIT1JfTE9BRF9GUEdBKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQkJZ290byB3cmFwZXJyOworCQl9CisJfSB3aGlsZSAoaSA+IDApOworCisJLyogQXNzZXJ0IHJlc2V0IChzdG9wIHRoZSBDUFUgaW4gdGhlIEVNSSkgKi8KKwllcnIgPSBlbWk2Ml9zZXRfcmVzZXQoZGV2LDEpOworCWlmIChlcnIgPCAwKSB7CisJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQlnb3RvIHdyYXBlcnI7CisJfQorCisJLyogMy4gV2UgbmVlZCB0byBwdXQgdGhlIGxvYWRlciBmb3IgdGhlIGZpcm13YXJlIGludG8gdGhlIEVaLVVTQiAoYWdhaW4uLi4pICovCisJZm9yIChpPTA7IGdfZW1pNjJfbG9hZGVyW2ldLnR5cGUgPT0gMDsgaSsrKSB7CisJCWVyciA9IGVtaTYyX3dyaXRlbWVtb3J5KGRldiwgZ19lbWk2Ml9sb2FkZXJbaV0uYWRkcmVzcywgZ19lbWk2Ml9sb2FkZXJbaV0uZGF0YSwgZ19lbWk2Ml9sb2FkZXJbaV0ubGVuZ3RoLCBBTkNIT1JfTE9BRF9JTlRFUk5BTCk7CisJCWlmIChlcnIgPCAwKSB7CisJCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJCWdvdG8gd3JhcGVycjsKKwkJfQorCX0KKworCS8qIERlLWFzc2VydCByZXNldCAobGV0IHRoZSBDUFUgcnVuKSAqLworCWVyciA9IGVtaTYyX3NldF9yZXNldChkZXYsMCk7CisJaWYgKGVyciA8IDApIHsKKwkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCWdvdG8gd3JhcGVycjsKKwl9CisKKwkvKiA0LiBXZSBwdXQgdGhlIHBhcnQgb2YgdGhlIGZpcm13YXJlIHRoYXQgbGllcyBpbiB0aGUgZXh0ZXJuYWwgUkFNIGludG8gdGhlIEVaLVVTQiAqLworCisvKiBGSVhNRTogcXVpY2sgYW5kIGRpcnR5IGlmZGVmcyAqLworI2lmZGVmIFNQRElGCisJZm9yIChpPTA7IGdfSGV4U3BkaWZGdzYyW2ldLnR5cGUgPT0gMDsgaSsrKSB7CisJCWlmICghSU5URVJOQUxfUkFNKGdfSGV4U3BkaWZGdzYyW2ldLmFkZHJlc3MpKSB7CisJCQllcnIgPSBlbWk2Ml93cml0ZW1lbW9yeShkZXYsIGdfSGV4U3BkaWZGdzYyW2ldLmFkZHJlc3MsIGdfSGV4U3BkaWZGdzYyW2ldLmRhdGEsIGdfSGV4U3BkaWZGdzYyW2ldLmxlbmd0aCwgQU5DSE9SX0xPQURfRVhURVJOQUwpOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJCQlnb3RvIHdyYXBlcnI7CisJCQl9CisJCX0KKwl9CisjZWxzZSAvKiBNSURJICovCisJZm9yIChpPTA7IGdfSGV4TWlkaUZ3NjJbaV0udHlwZSA9PSAwOyBpKyspIHsKKwkJaWYgKCFJTlRFUk5BTF9SQU0oZ19IZXhNaWRpRnc2MltpXS5hZGRyZXNzKSkgeworCQkJZXJyID0gZW1pNjJfd3JpdGVtZW1vcnkoZGV2LCBnX0hleE1pZGlGdzYyW2ldLmFkZHJlc3MsIGdfSGV4TWlkaUZ3NjJbaV0uZGF0YSwgZ19IZXhNaWRpRnc2MltpXS5sZW5ndGgsIEFOQ0hPUl9MT0FEX0VYVEVSTkFMKTsKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJCQlnb3RvIHdyYXBlcnI7CisJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJfQorCX0KKyNlbmRpZgkKKwkvKiBBc3NlcnQgcmVzZXQgKHN0b3AgdGhlIENQVSBpbiB0aGUgRU1JKSAqLworCWVyciA9IGVtaTYyX3NldF9yZXNldChkZXYsMSk7CisJaWYgKGVyciA8IDApIHsKKwkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCWdvdG8gd3JhcGVycjsKKwl9CisKKy8qIEZJWE1FOiBxdWljayBhbmQgZGlydHkgaWZkZWZzICovCisjaWZkZWYgU1BESUYKKwlmb3IgKGk9MDsgZ19IZXhTcGRpZkZ3NjJbaV0udHlwZSA9PSAwOyBpKyspIHsKKwkJaWYgKElOVEVSTkFMX1JBTShnX0hleFNwZGlmRnc2MltpXS5hZGRyZXNzKSkgeworCQkJZXJyID0gZW1pNjJfd3JpdGVtZW1vcnkoZGV2LCBnX0hleFNwZGlmRnc2MltpXS5hZGRyZXNzLCBnX0hleFNwZGlmRnc2MltpXS5kYXRhLCBnX0hleFNwZGlmRnc2MltpXS5sZW5ndGgsIEFOQ0hPUl9MT0FEX0lOVEVSTkFMKTsKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCQkJZ290byB3cmFwZXJyOworCQkJfQorCQl9CisJfQorI2Vsc2UgLyogTUlESSAqLworCWZvciAoaT0wOyBnX0hleE1pZGlGdzYyW2ldLnR5cGUgPT0gMDsgaSsrKSB7CisJCWlmIChJTlRFUk5BTF9SQU0oZ19IZXhNaWRpRnc2MltpXS5hZGRyZXNzKSkgeworCQkJZXJyID0gZW1pNjJfd3JpdGVtZW1vcnkoZGV2LCBnX0hleE1pZGlGdzYyW2ldLmFkZHJlc3MsIGdfSGV4TWlkaUZ3NjJbaV0uZGF0YSwgZ19IZXhNaWRpRnc2MltpXS5sZW5ndGgsIEFOQ0hPUl9MT0FEX0lOVEVSTkFMKTsKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJCQlnb3RvIHdyYXBlcnI7CisJCQl9CisJCX0KKwl9CisjZW5kaWYKKwkKKwkvKiBEZS1hc3NlcnQgcmVzZXQgKGxldCB0aGUgQ1BVIHJ1bikgKi8KKwllcnIgPSBlbWk2Ml9zZXRfcmVzZXQoZGV2LDApOworCWlmIChlcnIgPCAwKSB7CisJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQlnb3RvIHdyYXBlcnI7CisJfQorCisJa2ZyZWUoYnVmKTsKKworCS8qIHJldHVybiAxIHRvIGZhaWwgdGhlIGRyaXZlciBpbmlhbGl6YXRpb24KKwkgKiBhbmQgZ2l2ZSByZWFsIGRyaXZlciBjaGFuZ2UgdG8gbG9hZCAqLworCXJldHVybiAxOworCit3cmFwZXJyOgorCWtmcmVlKGJ1Zik7CisJZGV2X2VycigmZGV2LT5kZXYsICJFcnJvclxuIik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKEVNSTYyX1ZFTkRPUl9JRCwgRU1JNjJfUFJPRFVDVF9JRCkgfSwKKwl7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CisKK3N0YXRpYyBpbnQgZW1pNjJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlkZXZfZGJnKCZpbnRmLT5kZXYsICJlbWk2Ml9wcm9iZVxuIik7CisKKwlpbmZvKCIlcyBzdGFydCIsIF9fRlVOQ1RJT05fXyk7IAorCisJZW1pNjJfbG9hZF9maXJtd2FyZShkZXYpOworCisJLyogZG8gbm90IHJldHVybiB0aGUgZHJpdmVyIGNvbnRleHQsIGxldCByZWFsIGF1ZGlvIGRyaXZlciBkbyB0aGF0ICovCisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyB2b2lkIGVtaTYyX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBlbWk2Ml9kcml2ZXIgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQk9ICJlbWk2MiAtIGZpcm13YXJlIGxvYWRlciIsCisJLnByb2JlCQk9IGVtaTYyX3Byb2JlLAorCS5kaXNjb25uZWN0CT0gZW1pNjJfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUJPSBpZF90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGVtaTYyX2luaXQgKHZvaWQpCit7CisJaW50IHJldHZhbDsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIgKCZlbWk2Ml9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCXByaW50ayhLRVJOX0VSUiAiYWRpLWVtaTogcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGVtaTYyX2V4aXQgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIgKCZlbWk2Ml9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChlbWk2Ml9pbml0KTsKK21vZHVsZV9leGl0KGVtaTYyX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJ0YXBpbyBsYXhzdHL2bSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJFbWFnaWMgRU1JIDZ8Mm0gZmlybXdhcmUgbG9hZGVyLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiB2aTphaTpzeW50YXg9Yzpzdz04OnRzPTg6dHc9ODAKKyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9lbWk2Ml9md19tLmggYi9kcml2ZXJzL3VzYi9taXNjL2VtaTYyX2Z3X20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTY3YzkwMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pNjJfZndfbS5oCkBAIC0wLDAgKzEsODg1MyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgZnJvbSB0aHJlZSBkaWZmZXJlbnQgZmlsZXMsIHByb3ZpZGVkIGJ5IEVtYWdpYy4KKyAqLworLyogZ2VuZXJhdGVkIFR1ZSBKdW4gMyAyMTozNjoxMSBFRVNUIDIwMDMgKi8KKworc3RhdGljIElOVEVMX0hFWF9SRUNPUkQgZ19lbWk2MmJzW109eworICAxNiwgMHg4MDEwLCAwLCB7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGFhLDB4OTksMHg1NSwweDY2LDB4MzAsMHgwMCwweDgwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwNyB9LAorICAxNiwgMHg4MDIwLCAwLCB7MHgzMCwweDAxLDB4NjAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDBkLDB4MzAsMHgwMSwweDIwLDB4MDEsMHgwMCwweDgwLDB4M2YsMHgyZCB9LAorICAxNiwgMHg4MDMwLCAwLCB7MHgzMCwweDAwLDB4YzAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDgwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwOSB9LAorICAxNiwgMHg4MDQwLCAwLCB7MHgzMCwweDAwLDB4MjAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDgwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMSB9LAorICAxNiwgMHg4MDUwLCAwLCB7MHgzMCwweDAwLDB4NDAsMHgwMCwweDUwLDB4MDAsMHg1OCwweDFhLDB4ODAsMHgxMiwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MDYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MDcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MDgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDQwLDB4MDQsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MDkwLCAwLCB7MHgwMCwweDEyLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MGEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MGIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHg0OCB9LAorICAxNiwgMHg4MGMwLCAwLCB7MHgwNCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MGQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MGUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MGYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MTAwLCAwLCB7MHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MTEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MTMwLCAwLCB7MHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MTcwLCAwLCB7MHg4MCwweDEyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MWEwLCAwLCB7MHgwMCwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MWMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MWQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MWUwLCAwLCB7MHg3ZiwweDEwLDB4MDAsMHgzNCwweDAwLDB4MGQsMHgwMCwweDAzLDB4NDAsMHgwMCwweGQwLDB4MDAsMHgzNCwweDAwLDB4MDUsMHgwMCB9LAorICAxNiwgMHg4MWYwLCAwLCB7MHgwNywweDQwLDB4MDEsMHhkMCwweDAwLDB4NzQsMHgwMCwweDFkLDB4MDAsMHgwNywweDQwLDB4MDEsMHhkMCwweDAwLDB4NzQsMHgwMCB9LAorICAxNiwgMHg4MjAwLCAwLCB7MHgxZCwweDgwLDB4MDcsMHhlMCwweDAxLDB4YjgsMHgwMCwweDZlLDB4MDAsMHgxYiwweDgwLDB4MDYsMHhlMCwweDAxLDB4MzgsMHgzNyB9LAorICAxNiwgMHg4MjEwLCAwLCB7MHhjNCwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMSwweGZjLDB4ODAsMHhmYiwweDMwLDB4MzYsMHhjOCB9LAorICAxNiwgMHg4MjIwLCAwLCB7MHg0ZSwweDA5LDB4MDMsMHhmYywweDg0LDB4ZmYsMHgxMCwweDNiLDB4YzAsMHgwZSwweGM4LDB4MDcsMHgyMiwweDgwLDB4ZmYsMHgyMiB9LAorICAxNiwgMHg4MjMwLCAwLCB7MHgzMywweGMwLDB4MGYsMHhjOCwweDMzLDB4NmUsMHgwMCwweGZiLDB4ODAsMHgzZiwweDIwLDB4MGQsMHhjMiwweDUzLDB4ZDQsMHg4MCB9LAorICAxNiwgMHg4MjQwLCAwLCB7MHhjYywweDNhLDB4M2YsMHgwMCwweDBjLDB4ZjEsMHgwMywweGYwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MjUwLCAwLCB7MHg4MCwweDAwLDB4ZWQsMHg2MCwweGJmLDB4NjAsMHgyMywweGYwLDB4MGQsMHg4MiwweDEyLDB4M2MsMHg2MCwweDhmLDB4NzAsMHgyMyB9LAorICAxNiwgMHg4MjYwLCAwLCB7MHhmMCwweDA4LDB4ODgsMHgwMiwweGE1LDB4NDAsMHhiZiwweGQwLDB4NjMsMHhkNiwweDBiLDB4ODgsMHgwMiwweDJlLDB4MGMsMHhiYiB9LAorICAxNiwgMHg4MjcwLCAwLCB7MHg4MCwweDJlLDB4MjAsMHg4OCwweDhkLDB4MDIsMHhlNiwweDQwLDB4ODAsMHg2MCwweDJlLDB4MzAsMHgwYSwweGIxLDB4MTIsMHgyMCB9LAorICAxNiwgMHg4MjgwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4ODAsMHhhMywweDQwLDB4MmMsMHhjNCB9LAorICAxNiwgMHg4MjkwLCAwLCB7MHg0YSwweDAwLDB4MTIsMHg4YywweDg4LDB4YTMsMHgyMiwweDIwLDB4YzQsMHgwYSwweDkwLDB4NDIsMHgwNCwweGE5LDB4YTMsMHgwMCB9LAorICAxNiwgMHg4MmEwLCAwLCB7MHgyNCwweGM4LDB4OGIsMHg4MCwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyZSwweDAxLDB4MDksMHgwOCwweDAyLDB4ODQsMHgwMCB9LAorICAxNiwgMHg4MmIwLCAwLCB7MHg4MCwweDIwLDB4MmMsMHgxMCwweDBhLDB4MzIsMHg0MiwweDIyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MmMwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHgwNCwweGIzLDB4MDAsMHgyYSwweGMwLDB4MDgsMHgwOCwweGEyLDB4OGMsMHgwMCwweDhiLDB4MDAsMHhhMiB9LAorICAxNiwgMHg4MmQwLCAwLCB7MHhjMSwweDEwLDB4OTgsMHg0MiwweGE3LDB4MDAsMHhiYiwweDAxLDB4NjYsMHhjMSwweDBiLDB4ODAsMHgwMiwweGFjLDB4MDQsMHhiYiB9LAorICAxNiwgMHg4MmUwLCAwLCB7MHgwMCwweDJlLDB4MDAsMHgwYiwweGI4LDB4MTIsMHhlNCwweDAyLDB4ODksMHgwOCwweDBlLDB4NDAsMHgwYSwweGIwLDB4MDIsMHgzMCB9LAorICAxNiwgMHg4MmYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweGFjLDB4MDAsMHhlYiwweDAwLDB4M2UsMHhjMCB9LAorICAxNiwgMHg4MzAwLCAwLCB7MHg0YSwweGI4LDB4MjMsMHhlYywweDE4LDB4ZWIsMHgwMCwweDMyLDB4YzAsMHgwZSwweDJjLDB4MTIsMHgyMiwweDEwLDB4ZWIsMHgwMCB9LAorICAxNiwgMHg4MzEwLCAwLCB7MHgyNiwweGMwLDB4NGYsMHgwMCwweDQzLDB4ZWQsMHgwMCwweGZiLDB4MDAsMHgyZSwweDI0LDB4MGQsMHg4MCwweDEzLDB4ZTQsMHgwMCB9LAorICAxNiwgMHg4MzIwLCAwLCB7MHhjOCwweGQwLDB4N2MsMHgxMiwweDBlLDB4YjAsMHgwMywweDQwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MzMwLCAwLCB7MHhlMSwweDAwLDB4YmMsMHgwMCwweGZmLDB4MDAsMHgzNSwweGMwLDB4NGYsMHhlMCwweDAzLDB4N2MsMHgwOCwweGZmLDB4MDEsMHgxNyB9LAorICAxNiwgMHg4MzQwLCAwLCB7MHhjMiwweDRkLDB4YzAsMHgwMywweGY0LDB4MDgsMHhmNywweDAwLDB4M2IsMHhjMCwweDA3LDB4YzAsMHgwMywweDdjLDB4ODAsMHhmZiB9LAorICAxNiwgMHg4MzUwLCAwLCB7MHgyNCwweDNmLDB4NDAsMHgwYywweGYwLDB4MDEsMHhmNCwweDA0LDB4YmMsMHgwOCwweDNmLDB4MjgsMHgwZiwweGYwLDB4MDMsMHg3OCB9LAorICAxNiwgMHg4MzYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDgsMHhmYiwweDA0LDB4M2EsMHhjOCB9LAorICAxNiwgMHg4MzcwLCAwLCB7MHgwZiwweDk0LDB4MDMsMHhlYywweDEwLDB4ZjMsMHgwMCwweDM0LDB4YzAsMHgwZSwweGIwLDB4MDMsMHg2MSwweDA0LDB4ZmIsMHgwMCB9LAorICAxNiwgMHg4MzgwLCAwLCB7MHgzNiwweGMwLDB4MGUsMHhhMywweDAzLDB4MmMsMHg4MCwweGZiLDB4NzIsMHgzZSwweDAyLDB4MGYsMHg4YSwweDAzLDB4ZTQsMHgwMiB9LAorICAxNiwgMHg4MzkwLCAwLCB7MHhjOSwweDgwLDB4MmEsMHg1MCwweDBmLDB4YjAsMHgwMywweGQwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4M2EwLCAwLCB7MHhjYSwweDQ0LDB4M2MsMHgwMCwweGJmLDB4MDAsMHgwMywweGMwLDB4MDgsMHg4MCwweDAzLDB4N2MsMHgwMCwweGJmLDB4MDAsMHgzZiB9LAorICAxNiwgMHg4M2IwLCAwLCB7MHhlMiwweDA4LDB4OTAsMHg0MywweDYwLDB4MDAsMHhiZiwweDAwLDB4MzcsMHhjMCwweDA4LDB4OTAsMHgwMSwweDZkLDB4MDAsMHhiYiB9LAorICAxNiwgMHg4M2MwLCAwLCB7MHg0MCwweDJjLDB4MTAsMHgwYiwweGIwLDB4NDIsMHhkNywweGMwLDB4ODksMHgwMCwweDJhLDB4N2MsMHgwYiwweGYwLDB4MDIsMHhmMiB9LAorICAxNiwgMHg4M2QwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTIsMHgwNSwweDRjLDB4MDAsMHhiMywweDAwLDB4MjAsMHhkNSB9LAorICAxNiwgMHg4M2UwLCAwLCB7MHg0YSwweDAwLDB4MDAsMHgwYywweDA0LDB4OTMsMHgwMCwweDBjLDB4ZjAsMHgwYiwweDA5LDB4MDIsMHgwOCwweDAxLDB4YjMsMHgyMCB9LAorICAxNiwgMHg4M2YwLCAwLCB7MHgyOCwweGMwLDB4MGEsMHgwYywweDBhLDB4MGUsMHgwMCwweGIzLDB4MDAsMHgyNCwweDMwLDB4MDksMHgwMCwweDAyLDB4YzYsMHgxMCB9LAorICAxNiwgMHg4NDAwLCAwLCB7MHg4MCwweDQyLDB4MjAsMHgwMCwweDhiLDB4YjAsMHgwMiwweGY4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NDEwLCAwLCB7MHgyMiwweDAxLDB4MWUsMHgwMCwweGI3LDB4OTQsMHgyMSwweGU0LDB4NDgsMHhkOSwweDEyLDB4NWUsMHg0MCwweGI3LDB4OTAsMHgyOSB9LAorICAxNiwgMHg4NDIwLCAwLCB7MHhlMCwweDhiLDB4NjksMHgxMiwweGQ2LDB4ODAsMHgzNywweDgyLDB4MmMsMHhlOCwweDA4LDB4NGEsMHgwMiwweDVlLDB4MDAsMHhiNyB9LAorICAxNiwgMHg4NDMwLCAwLCB7MHhhNCwweDJkLDB4MjAsMHgwYiwweDc5LDB4MDIsMHhkNiwweDA4LDB4ODYsMHg5MCwweDI5LDB4YTAsMHgwYiwweDc5LDB4MDIsMHhkOCB9LAorICAxNiwgMHg4NDQwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwMCwweDBjLDB4MDAsMHhmYiwweGEwLDB4MjgsMHhlOCB9LAorICAxNiwgMHg4NDUwLCAwLCB7MHgwZSwweDJhLDB4MDIsMHg4YywweDAwLDB4ZDMsMHgwMCwweDY0LDB4YzAsMHgwZiwweDAwLDB4NDMsMHgwZSwweGM0LDB4ZjMsMHgwMCB9LAorICAxNiwgMHg4NDYwLCAwLCB7MHg3OCwweGVjLDB4MGUsMHgwYSwweDQzLDB4MGUsMHgyMCwweDczLDB4ZTAsMHgzYywweDAyLDB4NGYsMHgwMCwweDAzLDB4YzQsMHg0MCB9LAorICAxNiwgMHg4NDcwLCAwLCB7MHhjMywweDAwLDB4MzgsMHhjMCwweDBmLDB4MzAsMHgwMywweGQyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NDgwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwMCwweGZmLDB4MDAsMHhiYywweGNjLDB4MGUsMHhiMCwweDAzLDB4ZWMsMHgyMCwweGZiLDB4MDAsMHgzYyB9LAorICAxNiwgMHg4NDkwLCAwLCB7MHhjMiwweDBjLDB4MjAsMHgwMywweDZjLDB4NTAsMHhmMywweDAwLDB4MzYsMHhjNCwweDBmLDB4NDAsMHgwMywweGZjLDB4MDgsMHhmZiB9LAorICAxNiwgMHg4NGEwLCAwLCB7MHgxYSwweDNmLDB4ODAsMHgwZiwweGYwLDB4MDEsMHhlNCwweDMwLDB4ZmYsMHgwMiwweDNmLDB4YzAsMHgwZiwweGYwLDB4NjMsMHhkMCB9LAorICAxNiwgMHg4NGIwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGVjLDB4NDAsMHhmYiwweDAwLDB4YjIsMHhkOCB9LAorICAxNiwgMHg4NGMwLCAwLCB7MHgwYywweGIwLDB4MDEsMHgyZCwweDIwLDB4ZGIsMHgwMSwweDNhLDB4YzgsMHg4YywweDM4LDB4MDMsMHhhOCwweDAwLDB4ZmIsMHg0OCB9LAorICAxNiwgMHg4NGQwLCAwLCB7MHgzZSwweGM5LDB4MGYsMHg4MCwweDAzLDB4ZWMsMHg0MCwweGZiLDB4MDEsMHgzZSwweDAwLDB4MGYsMHgwOCwweDAzLDB4YTQsMHgwOCB9LAorICAxNiwgMHg4NGUwLCAwLCB7MHhmYSwweDgwLDB4YjIsMHg4MCwweDBmLDB4YjEsMHgwMiwweDZhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NGYwLCAwLCB7MHg0OCwweDE5LDB4MWMsMHg4MCwweGJmLDB4MzAsMHgyMSwweGNhLDB4MDgsMHhmMCwweDBhLDB4MGMsMHg4MCwweDhmLDB4NTAsMHgyMSB9LAorICAxNiwgMHg4NTAwLCAwLCB7MHhjMiwweDA4LDB4NzAsMHg1MCwweDljLDB4MDAsMHhiNywweDAwLDB4MzksMHhjNCwweDBiLDB4NDAsMHgwMiwweDljLDB4MDQsMHhiNyB9LAorICAxNiwgMHg4NTEwLCAwLCB7MHgyMCwweDI1LDB4NDAsMHgwYiwweDcwLDB4MDIsMHgxNCwweDgwLDB4YjYsMHgwMCwweDIxLDB4ODAsMHgwYiwweGY4LDB4MDIsMHgxMiB9LAorICAxNiwgMHg4NTIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4MDAsMHhiNywweGIwLDB4MjEsMHhlYyB9LAorICAxNiwgMHg4NTMwLCAwLCB7MHgwYiwweDc4LDB4MTIsMHhkZSwweDg0LDB4OTcsMHg4MCwweDBkLDB4ZTAsMHgyOCwweGY4LDB4MDIsMHhkZSwweDAwLDB4YjcsMHg5MCB9LAorICAxNiwgMHg4NTQwLCAwLCB7MHgyZCwweGU0LDB4MGIsMHg2OCwweDgyLDB4NWUsMHg4MCwweGI3LDB4YTAsMHgyOSwweDIwLDB4MGIsMHg0OCwweDAyLDB4OTYsMHgwMCB9LAorICAxNiwgMHg4NTUwLCAwLCB7MHhiNywweDgwLDB4MjEsMHhlMSwweDBiLDB4N2EsMHgwMiwweDcwLDB4NDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NTYwLCAwLCB7MHg0OCwweDA0LDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyMCwweGMwLDB4MGIsMHgzOCwweDAyLDB4OGMsMHgwNCwweDgzLDB4MDAsMHgyOCB9LAorICAxNiwgMHg4NTcwLCAwLCB7MHhjMCwweDg4LDB4MzksMHgwMiwweDRjLDB4NDAsMHhiMywweDA0LDB4MjgsMHhjMCwweDFiLDB4MTAsMHgwMiwweDhjLDB4MDEsMHhiMyB9LAorICAxNiwgMHg4NTgwLCAwLCB7MHgwNCwweDI0LDB4ODgsMHg0YiwweDMxLDB4MDIsMHgwNCwweDAwLDB4YjMsMHg4MCwweDIwLDB4ZjIsMHgwYiwweDMwLDB4MDIsMHgwMiB9LAorICAxNiwgMHg4NTkwLCAwLCB7MHgyNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgwNSwweGE4LDB4MDAsMHhmYSwweDAwLDB4MzIsMHg4MCB9LAorICAxNiwgMHg4NWEwLCAwLCB7MHgwZiwweGU4LDB4MDMsMHhlOCwweDAwLDB4ZGEsMHgwMSwweDNhLDB4ODAsMHg4YywweGVkLDB4MDMsMHhmYiwweDA0LDB4ZmEsMHgwMCB9LAorICAxNiwgMHg4NWIwLCAwLCB7MHgzZSwweDgwLDB4MGYsMHg2YywweDAzLDB4ZmIsMHhjOCwweGJlLDB4YzIsMHgxZiwweDgwLDB4MGYsMHhlNSwweDAzLDB4YTgsMHgwMCB9LAorICAxNiwgMHg4NWMwLCAwLCB7MHhmZSwweDQ4LDB4MzMsMHg4MCwweDRmLDB4YTAsMHgwMywweDdhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NWQwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzYywweDAwLDB4MGMsMHg4MSwweDkzLDB4NjAsMHgwMCwweGY4LDB4MDEsMHgzNiB9LAorICAxNiwgMHg4NWUwLCAwLCB7MHgxMCwweDBmLDB4ODAsMHgwMywweGEwLDB4MjAsMHhmOCwweDAwLDB4MmEsMHgwMSwweDhmLDB4ODQsMHgxMywweGUxLDB4MDAsMHhmOCB9LAorICAxNiwgMHg4NWYwLCAwLCB7MHgxOCwweDM2LDB4MDAsMHgwZiwweDgwLDB4MTMsMHhlMCwweDAwLDB4ZjgsMHgyMCwweDNlLDB4MTQsMHgwZiwweDgwLDB4MDMsMHhkMiB9LAorICAxNiwgMHg4NjAwLCAwLCB7MHg4MCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGU0LDB4MDAsMHhmMSwweDAwLDB4YWEsMHg0MCB9LAorICAxNiwgMHg4NjEwLCAwLCB7MHgwYywweDkwLDB4MDMsMHgyNCwweDAwLDB4ZTEsMHgwMCwweDM4LDB4NDAsMHgxYywweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHhhMCB9LAorICAxNiwgMHg4NjIwLCAwLCB7MHgzYSwweDQwLDB4NDcsMHg5YSwweDkzLDB4YTIsMHg4MCwweGY4LDB4MTAsMHgzZSwweDQwLDB4MGIsMHg5NCwweDAzLDB4ZTYsMHg0MCB9LAorICAxNiwgMHg4NjMwLCAwLCB7MHhmOSwweGMwLDB4M2UsMHg2OCwweDBiLDB4MTAsMHgwMywweDAyLDB4ODQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NjQwLCAwLCB7MHg4MCwweDA0LDB4ZTQsMHgwNCwweGI5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwNCwweDg5LDB4MDAsMHgzNiB9LAorICAxNiwgMHg4NjUwLCAwLCB7MHg0MCwweDA4LDB4OTAsMHgwMiwweGU0LDB4MDQsMHhiOSwweDgwLDB4MmUsMHg0MCwweDRmLDB4OTQsMHgwMywweDYxLDB4MTAsMHhlOCB9LAorICAxNiwgMHg4NjYwLCAwLCB7MHg0MCwweDJlLDB4NDAsMHgwYiwweDkwLDB4NDIsMHhlNiwweDA0LDB4YjksMHgwMCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHgyMCB9LAorICAxNiwgMHg4NjcwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNCwweDI0LDB4MDAsMHhiOSwweDAwLDB4MjIsMHg0MCB9LAorICAxNiwgMHg4NjgwLCAwLCB7MHgwYSwweDEwLDB4NTIsMHgwNCwweDA0LDB4YTksMHgwNCwweDJhLDB4NDAsMHgwOCwweGIwLDB4MDIsMHhlNCwweDAxLDB4YjksMHgwMCB9LAorICAxNiwgMHg4NjkwLCAwLCB7MHgyZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4YTgsMHgwZCwweGI4LDB4NDAsMHgyZSwweDQwLDB4MDksMHg5NCwweDAyLDB4ZTUsMHgwMCB9LAorICAxNiwgMHg4NmEwLCAwLCB7MHhiOSwweDA0LDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NmIwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweGIxLDB4MjAsMHgyMCwweGM4LDB4MGEsMHgxMCwweDQyLDB4MDQsMHg5MCwweDgxLDB4MjAsMHgwNCB9LAorICAxNiwgMHg4NmMwLCAwLCB7MHhjOCwweDA4LDB4MzAsMHgyNiwweGM0LDB4MDAsMHhiMSwweDIwLDB4MmMsMHg0OCwweDBiLDB4OTAsMHgwMiwweDQ1LDB4MDEsMHhiMSB9LAorICAxNiwgMHg4NmQwLCAwLCB7MHg0MCwweDJjLDB4NDAsMHgwYiwweDEyLDB4ODIsMHhjNCwweDAwLDB4YjEsMHgyYiwweDJjLDB4NGEsMHgwYiwweDEyLDB4ODIsMHgwMiB9LAorICAxNiwgMHg4NmUwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwOCwweDIxLDB4NDgsMHhmOCwweDUwLDB4MzIsMHgwMCB9LAorICAxNiwgMHg4NmYwLCAwLCB7MHg0ZSwweDg1LDB4MGIsMHgyMSwweDQwLDB4YTgsMHg1MiwweDJhLDB4MDAsMHgwOCwweDgwLDB4MjMsMHhlMSwweDQwLDB4ZjgsMHgwMCB9LAorICAxNiwgMHg4NzAwLCAwLCB7MHgzYSwweDE0LDB4MGYsMHhhMCwweDQzLDB4YTgsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MiwweDAzLDB4ZTAsMHgwMCB9LAorICAxNiwgMHg4NzEwLCAwLCB7MHhmMCwweDIwLDB4M2UsMHg4OCwweDRmLDB4ODIsMHgwYiwweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NzIwLCAwLCB7MHg5OCwweDE5LDB4ZTQsMHg0MCwweGY5LDB4MTEsMHgzNCwweDQ0LDB4MmQsMHhkMCwweDAzLDB4ZTQsMHg1MCwweDc5LDB4MTAsMHgzOCB9LAorICAxNiwgMHg4NzMwLCAwLCB7MHg0NCwweDJmLDB4ZDAsMHgwMywweGY1LDB4MTAsMHhmOSwweDEwLDB4M2UsMHg0NSwweDA2LDB4NTAsMHgwMywweGU1LDB4MDAsMHhlOSB9LAorICAxNiwgMHg4NzQwLCAwLCB7MHg0MCwweDNmLDB4NDAsMHgwZiwweGQwLDB4NDMsMHhmNSwweDAwLDB4ZmQsMHgyOCwweDNmLDB4NDAsMHgwZiwweDkyLDB4ODMsMHhlNiB9LAorICAxNiwgMHg4NzUwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMSwweGU2LDB4MDAsMHhkOSwweDkwLDB4MzcsMHg2OSB9LAorICAxNiwgMHg4NzYwLCAwLCB7MHg0ZCwweDkwLDB4MjMsMHg2NywweDgwLDB4ZDksMHhlMCwweDM3LDB4NjgsMHgwZSwweGQwLDB4MDcsMHhhNCwweDAwLDB4MDUsMHg4NiB9LAorICAxNiwgMHg4NzcwLCAwLCB7MHgzZSwweDY2LDB4MGQsMHg1MCwweDIzLDB4MjYsMHgwMCwweGM5LDB4ODIsMHgzZCwweDQwLDB4MGQsMHhkOCwweDA3LDB4MzYsMHgwMiB9LAorICAxNiwgMHg4NzgwLCAwLCB7MHhjZCwweGMwLDB4MzMsMHg2MCwweDBjLDB4OWMsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NzkwLCAwLCB7MHgzOCwweDEwLDB4ZTIsMHg4MCwweDg4LDB4YTIsMHgyMiwweDEwLDB4MjgsMHg4YSwweDgyLDB4MjMsMHg4NCwweDg4LDB4YTAsMHgyMiB9LAorICAxNiwgMHg4N2EwLCAwLCB7MHgxNCwweDQ4LDB4ODAsMHg0MiwweDgyLDB4MDAsMHg4OCwweDQwLDB4MmUsMHgzMCwweDA4LDB4ODAsMHgwMiwweGEyLDB4MDAsMHhkOCB9LAorICAxNiwgMHg4N2IwLCAwLCB7MHg5MCwweDI2LDB4MDAsMHgwOCwweDg0LDB4MGEsMHgyMSwweDAwLDB4YzgsMHhhMCwweGEyLDB4MTQsMHgyOCwweDhjLDB4MDIsMHgwZSB9LAorICAxNiwgMHg4N2MwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM1LDB4MjAsMHg5MSwweDQwLDB4MmMsMHg0NCB9LAorICAxNiwgMHg4N2QwLCAwLCB7MHgxOCwweDEwLDB4MDIsMHg4NSwweDA0LDB4YjEsMHg0MCwweDBjLDB4NDAsMHgwYSwweDEwLDB4MDYsMHg4NCwweDMwLDB4ODEsMHg0MCB9LAorICAxNiwgMHg4N2UwLCAwLCB7MHgyYywweDQ4LDB4NTksMHgxMCwweDFhLDB4MDQsMHg2MCwweDgxLDB4MDksMHgyZSwweDQwLDB4MWIsMHgxNCwweDAyLDB4MjUsMHgwMCB9LAorICAxNiwgMHg4N2YwLCAwLCB7MHg5MSwweGUwLDB4MjAsMHg2MCwweDA4LDB4MTYsMHgwMiwweDAwLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ODAwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMCwweDgxLDB4MDAsMHgyYSwweDQxLDB4MDgsMHg5MCwweDAyLDB4YTQsMHgwMCwweGExLDB4MDAsMHgyYSB9LAorICAxNiwgMHg4ODEwLCAwLCB7MHg0MSwweDA4LDB4YjAsMHg4MiwweDI0LDB4MTEsMHg4YiwweDAwLDB4MmUsMHg0MCwweDE4LDB4OTEsMHgwMiwweGEwLDB4MDQsMHg5OCB9LAorICAxNiwgMHg4ODIwLCAwLCB7MHgyMCwweDJlLDB4NTQsMHgxYiwweDkwLDB4ODIsMHgyYywweDAwLDB4ODksMHgxMCwweDIyLDB4NDQsMHg4OCwweDkwLDB4MDIsMHgwNiB9LAorICAxNiwgMHg4ODMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU0LDB4MDAsMHhkOSwweDAwLDB4M2UsMHg0MCB9LAorICAxNiwgMHg4ODQwLCAwLCB7MHg0YywweDkwLDB4MDMsMHhhNCwweDEwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHg4ZSwweDEwLDB4MDIsMHhhNCwweGMyLDB4YzksMHgwMCB9LAorICAxNiwgMHg4ODUwLCAwLCB7MHgzZSwweDQwLDB4MGQsMHgxNiwweDEzLDB4MDEsMHg4NCwweGM4LDB4MjAsMHgzYywweDYwLDB4MGYsMHg5MCwweDEyLDB4MDQsMHgwMCB9LAorICAxNiwgMHg4ODYwLCAwLCB7MHhkOSwweDQwLDB4MzIsMHg1MCwweDBjLDB4OTAsMHgwMywweDI4LDB4ODQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ODcwLCAwLCB7MHgyOCwweDAxLDB4ODQsMHgwMCwweGY5LDB4MDAsMHgzNiwweDQwLDB4NGYsMHg5OSwweDRhLDB4NDQsMHgwMCwweDk5LDB4MDAsMHhiNCB9LAorICAxNiwgMHg4ODgwLCAwLCB7MHg0MCwweDBmLDB4OTAsMHgxMywweGU2LDB4MDAsMHhmOSwweDAwLDB4M2MsMHg0MCwweDBmLDB4OTAsMHgwMywweGUzLDB4MDAsMHhmOCB9LAorICAxNiwgMHg4ODkwLCAwLCB7MHgwMSwweDM2LDB4NDAsMHgwYywweDk5LDB4MDMsMHhlNCwweDAyLDB4ZjksMHg4MCwweDNlLDB4NjAsMHg0ZiwweDkwLDB4MGIsMHhjYSB9LAorICAxNiwgMHg4OGEwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDAsMHhkOCwweDAwLDB4M2MsMHgwMCB9LAorICAxNiwgMHg4OGIwLCAwLCB7MHgxZCwweDgwLDB4MDMsMHgyMCwweDAwLDB4ZTgsMHgwMCwweDMyLDB4MDAsMHgwYywweDg0LDB4ODMsMHhlMCwweDEwLDB4ZTgsMHgyMCB9LAorICAxNiwgMHg4OGMwLCAwLCB7MHgzMiwweDAwLDB4OGUsMHg4NCwweDAzLDB4MjEsMHg4MCwweGM4LDB4MDAsMHgzYSwweDE5LDB4MGYsMHgwNCwweDAzLDB4ZTAsMHgyNCB9LAorICAxNiwgMHg4OGQwLCAwLCB7MHhmMCwweDAyLDB4M2MsMHgwMCwweDBmLDB4ODAsMHgxMywweDhhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4OGUwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwMiwweDhhLDB4MDEsMHgwZiwweGEyLDB4NjgsMHhhMCwweDAwLDB4MjgsMHgwMCwweDhhLDB4MDAsMHg3NyB9LAorICAxNiwgMHg4OGYwLCAwLCB7MHg4MCwweDY4LDB4ZTAsMHgxMiwweGU4LDB4MDAsMHhkZSwweDAwLDB4MzYsMHg4MSwweDA4LDB4ZTAsMHgwMywweDdhLDB4MDgsMHhhZSB9LAorICAxNiwgMHg4OTAwLCAwLCB7MHhjNCwweDJmLDB4ODAsMHgwOCwweGVkLDB4MDIsMHhmYSwweDAwLDB4YmUsMHhhMCwweDNiLDB4ODAsMHgwYiwweGEwLDB4NDIsMHgwYSB9LAorICAxNiwgMHg4OTEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHg4NSwweDRjLDB4MDAsMHg5MywweDAwLDB4MmMsMHhjMCB9LAorICAxNiwgMHg4OTIwLCAwLCB7MHg4OCwweGIwLDB4MDIsMHgwYywweDE0LDB4YTMsMHgwNCwweDIwLDB4YzQsMHgxOCwweDM4LDB4MDIsMHhlYywweDEwLDB4OTMsMHg1NCB9LAorICAxNiwgMHg4OTMwLCAwLCB7MHgyOCwweGMwLDB4MGEsMHgwMCwweDAyLDB4NGUsMHgwMCwweDgzLDB4NDksMHg2OCwweGMwLDB4MDIsMHgzOSwweDQyLDB4Y2UsMHg0MCB9LAorICAxNiwgMHg4OTQwLCAwLCB7MHhiMywweDAwLDB4MmMsMHhlNiwweDBiLDB4YjAsMHgwMiwweDhiLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4OTUwLCAwLCB7MHgyMCwweDAxLDB4MWMsMHgwOCwweDg3LDB4MjAsMHgyYywweDgwLDB4MTgsMHhmMiwweDIyLDB4MWMsMHgwMCwweDg3LDB4MTAsMHgyMSB9LAorICAxNiwgMHg4OTYwLCAwLCB7MHhjMCwweDA4LDB4NzAsMHg4MiwweGRjLDB4ODAsMHg5NiwweDgwLDB4MmQsMHhjMCwweDBhLDB4NDAsMHgwMiwweDdkLDB4NDAsMHgyNyB9LAorICAxNiwgMHg4OTcwLCAwLCB7MHg2NCwweDZkLDB4ZDAsMHg0OCwweDYwLDB4NDIsMHhkOCwweDA1LDB4YjYsMHgwNCwweDI5LDB4YzAsMHg0YiwweDcyLDB4MDIsMHgyOCB9LAorICAxNiwgMHg4OTgwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwOCwweDNlLDB4ODgsMHhkNywweGUwLDB4M2QsMHhlMCB9LAorICAxNiwgMHg4OTkwLCAwLCB7MHgwOCwweDdjLDB4NDIsMHgzZSwweDAwLDB4ZTMsMHg4MiwweDIwLDB4ZTAsMHgwYywweDY4LDB4MDMsMHhkZiwweDA0LDB4ZDcsMHg4MCB9LAorICAxNiwgMHg4OWEwLCAwLCB7MHgzYiwweGUwLDB4NGUsMHg0OCwweDBhLDB4NWUsMHg4MCwweGM3LDB4YzIsMHgxOSwweGUwLDB4MGUsMHg3OCwweDAzLDB4ZDYsMHgwOCB9LAorICAxNiwgMHg4OWIwLCAwLCB7MHhmNywweDgwLDB4M2QsMHhlMCwweDBmLDB4ZjgsMHgwMywweGFhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4OWMwLCAwLCB7MHgwOCwweDFkLDB4YWMsMHg0MCwweGZiLDB4NDAsMHg3ZSwweDgwLDB4MGUsMHgzNiwweDgzLDB4ZWQsMHg0MCwweGRiLDB4NjAsMHgzZSB9LAorICAxNiwgMHg4OWQwLCAwLCB7MHg4MCwweDBmLDB4YTAsMHgwMywweGVkLDB4MjgsMHhkYSwweDAwLDB4MzIsMHhjNCwweDBjLDB4YjAsMHgwYiwweGNjLDB4MDAsMHhmYiB9LAorICAxNiwgMHg4OWUwLCAwLCB7MHgwMCwweDNlLDB4YzAsMHgwZSwweDgwLDB4MTMsMHhlMCwweDEwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweGIxLDB4NTMsMHhjMiB9LAorICAxNiwgMHg4OWYwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNSwweGZlLDB4MDAsMHhmZiwweGMwLDB4MzMsMHhlMCB9LAorICAxNiwgMHg4YTAwLCAwLCB7MHgwYywweGY5LDB4MDMsMHg3ZiwweDA0LDB4Y2YsMHhkMCwweDNmLDB4ZTQsMHgwZiwweGI4LDB4MDMsMHhmZSwweDAwLDB4ZmYsMHg5NCB9LAorICAxNiwgMHg4YTEwLCAwLCB7MHgzZiwweGUwLDB4MGYsMHhjOCwweDAzLDB4N2UsMHgxMCwweGYzLDB4ODAsMHgzYiwweGUwLDB4MGYsMHhmOCwweDAzLDB4ZmUsMHg0OCB9LAorICAxNiwgMHg4YTIwLCAwLCB7MHhlZCwweDgwLDB4MzMsMHgyNCwweDA0LDB4ZjgsMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4YTMwLCAwLCB7MHhhOCwweDExLDB4OWMsMHg4MCwweGJmLDB4MDQsMHgyMSwweDI4LDB4MDgsMHhmOCwweDAyLDB4MWUsMHhjMCwweGNmLDB4OTAsMHgyMSB9LAorICAxNiwgMHg4YTQwLCAwLCB7MHg0YywweDBiLDB4NWEsMHg0MiwweGRlLDB4MDAsMHhiNywweDgwLDB4MmMsMHhlOCwweDBiLDB4MDQsMHgwMiwweDFjLDB4MDAsMHhiNyB9LAorICAxNiwgMHg4YTUwLCAwLCB7MHhhMCwweDM1LDB4MTAsMHg4ZiwweDcxLDB4MTMsMHhkZSwweGMwLDB4ODQsMHgxMCwweDIxLDB4ODAsMHgwZCwweDcxLDB4MDIsMHgyYSB9LAorICAxNiwgMHg4YTYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHg0MCwweDljLDB4MDgsMHhiNywweDAwLDB4MjUsMHhjOCB9LAorICAxNiwgMHg4YTcwLCAwLCB7MHgwOCwweDcxLDB4MDIsMHhjYywweDgwLDB4OTcsMHgwMCwweDI5LDB4YzAsMHg4YiwweDcyLDB4MDYsMHhkYywweDA4LDB4YjUsMHgwMCB9LAorICAxNiwgMHg4YTgwLCAwLCB7MHgyZCwweGM4LDB4MGIsMHg0MCwweDAyLDB4MWMsMHg0MCwweGJmLDB4MTAsMHgyMSwweGMwLDB4MGIsMHg3NCwweDAyLDB4ZDQsMHg4MCB9LAorICAxNiwgMHg4YTkwLCAwLCB7MHhhNywweDQwLDB4MjEsMHg0MSwweDA4LDB4NzAsMHgwMiwweDA0LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4YWEwLCAwLCB7MHg2MCwweDE0LDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyNCwweDAwLDB4MDgsMHgzNCwweDgyLDB4YWMsMHgxMSwweDgzLDB4MDAsMHgyMCB9LAorICAxNiwgMHg4YWIwLCAwLCB7MHgwMCwweDRiLDB4MTgsMHgyNiwweGNmLDB4MjAsMHhiMSwweDA2LDB4MmMsMHhjMSwweDBiLDB4MzIsMHgwMiwweDBlLDB4MDgsMHhiMyB9LAorICAxNiwgMHg4YWMwLCAwLCB7MHg4OCwweDI0LDB4MzIsMHgwYSwweDMwLDB4MTIsMHg4NCwweDA4LDB4ODAsMHgwMCwweGEwLDB4MzQsMHgyOCwweDMwLDB4MDIsMHgxOCB9LAorICAxNiwgMHg4YWQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxMSwweGJjLDB4MDAsMHhmZiwweDAwLDB4YjYsMHg0MCB9LAorICAxNiwgMHg4YWUwLCAwLCB7MHgyYywweGY0LDB4NDMsMHhmYywweDAxLDB4ZGYsMHgwMCwweDNhLDB4MDAsMHgwMywweDkyLDB4MDMsMHhmZiwweDg4LDB4ZjksMHgwMCB9LAorICAxNiwgMHg4YWYwLCAwLCB7MHgyZiwweGMwLDB4MWIsMHgwZSwweDRiLDB4MmUsMHg5MCwweGZiLDB4ZTAsMHgzMCwweDMyLDB4MGIsMHg5OCwweDAyLDB4ZWMsMHgwOCB9LAorICAxNiwgMHg4YjAwLCAwLCB7MHg2YiwweGMwLDB4MzIsMHhjMCwweDA4LDB4ZjAsMHgwOSwweDNlLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4YjEwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGYzLDB4MDAsMHgzYSwweGMwLDB4MGYsMHhiMCwweDAxLDB4NmMsMHgwMCwweGZiLDB4MDAsMHgzYSB9LAorICAxNiwgMHg4YjIwLCAwLCB7MHgxMCwweDBmLDB4YjQsMHgwMywweGVjLDB4MDAsMHhmMCwweDAwLDB4M2MsMHhjMCwweDBmLDB4ODAsMHgwYiwweGFkLDB4MjAsMHhmYiB9LAorICAxNiwgMHg4YjMwLCAwLCB7MHg0MCwweDNlLDB4MTAsMHgwNywweGE4LDB4NjMsMHhlMCwweDAwLDB4ZmIsMHg4MCwweDNlLDB4ZDgsMHgwZiwweGIwLDB4MDMsMHhlMCB9LAorICAxNiwgMHg4YjQwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGZjLDB4MDAsMHhmZiwweDAwLDB4NzIsMHgwMCB9LAorICAxNiwgMHg4YjUwLCAwLCB7MHgwZiwweGYwLDB4MjMsMHhmYywweDAwLDB4ZGYsMHgwMCwweDNmLDB4NDAsMHgwZiwweGMwLDB4MDMsMHhkYywweDAwLDB4OGYsMHgwMCB9LAorICAxNiwgMHg4YjYwLCAwLCB7MHgzMywweGMxLDB4MGMsMHhjMCwweDAzLDB4YmUsMHgwMCwweGZmLDB4OTAsMHgzYiwweDI4LDB4MGUsMHg1OSwweDAzLDB4MmUsMHgwMCB9LAorICAxNiwgMHg4YjcwLCAwLCB7MHg3YiwweDAwLDB4MzIsMHhjNCwweDBmLDB4YjAsMHgwMywweGQwLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4YjgwLCAwLCB7MHhjMSwweDA0LDB4NmMsMHgwMCwweGJiLDB4MDAsMHg2MiwweGEwLDB4MGYsMHhiMCwweDAyLDB4ZWMsMHgwOSwweDhiLDB4MDAsMHgyZSB9LAorICAxNiwgMHg4YjkwLCAwLCB7MHgzMCwweDBiLDB4YTgsMHgwMywweGFjLDB4MDAsMHhmYSwweGMxLDB4MjIsMHhjMSwweDA4LDB4OGMsMHgwMiwweDJjLDB4MDAsMHhiMyB9LAorICAxNiwgMHg4YmEwLCAwLCB7MHg4MSwweDJhLDB4MDAsMHgwZCwweDg4LDB4YjIsMHgyMiwweDAwLDB4YjMsMHhjMCwweDIyLDB4YzgsMHgwYiwweGIwLDB4NDIsMHg2MSB9LAorICAxNiwgMHg4YmIwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDZjLDB4MDAsMHhiYiwweDAxLDB4MjIsMHg2MiB9LAorICAxNiwgMHg4YmMwLCAwLCB7MHgwYiwweGIwLDB4MDIsMHhlYywweDA0LDB4OGIsMHgwMCwweDJlLDB4YTIsMHg0OSwweDg4LDB4MjYsMHhlYywweDAwLDB4YTgsMHg4MCB9LAorICAxNiwgMHg4YmQwLCAwLCB7MHgyMiwweGMwLDB4MjgsMHg4MiwweDBhLDB4YWMsMHhhMCwweGJiLDB4MDgsMHgyMiwweGMwLDB4MDgsMHg4MCwweDBhLDB4MjgsMHg4NCB9LAorICAxNiwgMHg4YmUwLCAwLCB7MHhiOSwweGMwLDB4YTIsMHgwMCwweDBiLDB4YjAsMHgwMiwweGUwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4YmYwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMCwweGIzLDB4MTAsMHgyMCwweDQ4LDB4MGEsMHgzMiwweDAyLDB4Y2MsMHg4MCwweDgzLDB4MDEsMHgyNCB9LAorICAxNiwgMHg4YzAwLCAwLCB7MHgwMCwweDBiLDB4MDIsMHgwNiwweDhjLDB4NjAsMHhhMCwweDIwLDB4MjAsMHhjOCwweDA4LDB4MDEsMHgwMiwweDBjLDB4MDAsMHhiMyB9LAorICAxNiwgMHg4YzEwLCAwLCB7MHgwMCwweDI4LDB4MDAsMHgwOSwweDIwLDB4MDIsMHgwOCwweDgwLDB4YjEsMHgwMCwweGEwLDB4ODAsMHgwYiwweDMwLDB4MDIsMHg0MiB9LAorICAxNiwgMHg4YzIwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOSwweDZjLDB4MDAsMHhmZiwweDAwLDB4YTIsMHgwZSB9LAorICAxNiwgMHg4YzMwLCAwLCB7MHgwYiwweGYxLDB4MDMsMHhmYywweDA4LDB4Y2YsMHgyMCwweDNlLDB4YzAsMHgwZiwweDgwLDB4MDMsMHhmYywweDg0LDB4YTgsMHgyMCB9LAorICAxNiwgMHg4YzQwLCAwLCB7MHhiMiwweGM4LDB4OGMsMHg4MCwweDAzLDB4YWMsMHg0NCwweGZiLDB4NzAsMHgzYSwweGMwLDB4MGUsMHg5MCwweDAzLDB4MmMsMHhhNCB9LAorICAxNiwgMHg4YzUwLCAwLCB7MHhmYiwweDAwLDB4YjIsMHg0MCwweDBmLDB4YjAsMHgwMywweGMwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4YzYwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgwMCwweGZmLDB4MjYsMHgzZSwweDAwLDB4MGYsMHhiNiwweDEzLDB4ZWQsMHgwMCwweGZiLDB4MTAsMHgzZiB9LAorICAxNiwgMHg4YzcwLCAwLCB7MHgwMCwweDBmLDB4YzEsMHgxMywweGFjLDB4ODAsMHhmOCwweDEyLDB4M2UsMHhjNiwweDRmLDB4NDIsMHg0MywweGZjLDB4MDQsMHhmZiB9LAorICAxNiwgMHg4YzgwLCAwLCB7MHgzMSwweDNmLDB4MDAsMHgwZiwweGYwLDB4MDMsMHhlYywweDAwLDB4ZmYsMHgwMCwweGJmLDB4YzAsMHg4ZiwweGYwLDB4MDMsMHhlOCB9LAorICAxNiwgMHg4YzkwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMSwweGZjLDB4NDAsMHhmYywweDgwLDB4MzYsMHhjOCB9LAorICAxNiwgMHg4Y2EwLCAwLCB7MHgwZiwweDA5LDB4MDMsMHhjMiwweDAwLDB4ZjgsMHhjMCwweDMzLDB4Y2MsMHgyYywweDRjLDB4MDMsMHg2MywweDkwLDB4ZTAsMHg5MCB9LAorICAxNiwgMHg4Y2IwLCAwLCB7MHgzYSwweGMwLDB4MGQsMHg1MCwweDBiLDB4M2MsMHgwNCwweGRmLDB4NjQsMHgzZiwweGM4LDB4OGQsMHhmMSwweDQzLDB4MmMsMHgwMCB9LAorICAxNiwgMHg4Y2MwLCAwLCB7MHhkNSwweDAwLDB4MzMsMHhjMCwweDQ1LDB4ZjIsMHgyMywweDcwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4Y2QwLCAwLCB7MHg4MCwweDEwLDB4ZWQsMHg4MCwweGJhLDB4MDIsMHgyMSwweGRlLDB4OGIsMHg4MiwweDIyLDB4ZTAsMHgyMCwweGIwLDB4MDAsMHgyYiB9LAorICAxNiwgMHg4Y2UwLCAwLCB7MHhlYywweDA5LDB4ODAsMHgwMiwweGUzLDB4NDAsMHhiYSwweDIwLDB4MmYsMHhkYywweDA4LDB4OTgsMHgxMiwweDJjLDB4MDAsMHg4YiB9LAorICAxNiwgMHg4Y2YwLCAwLCB7MHg1MSwweDJhLDB4ZDAsMHgwOCwweDcyLDB4MjIsMHgyZSwweDAwLDB4OGQsMHg4MCwweDIxLDB4ZDAsMHgwOCwweGI2LDB4ODIsMHgyMCB9LAorICAxNiwgMHg4ZDAwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4NDAsMHhiOSwweDI4LDB4MjQsMHhjMCB9LAorICAxNiwgMHg4ZDEwLCAwLCB7MHg0YSwweDEyLDB4MTIsMHg4OCwweDg1LDB4YTgsMHgyMCwweDIwLDB4YzAsMHgwYiwweDIyLDB4MDIsMHhjMCwweDkxLDB4YTEsMHgwMCB9LAorICAxNiwgMHg4ZDIwLCAwLCB7MHgyOCwweGMyLDB4MGIsMHgwMCwweDEyLDB4OGMsMHg0MCwweGEzLDB4MjAsMHgyMCwweGM0LDB4MGIsMHgzMCwweDBhLDB4MGMsMHgxMSB9LAorICAxNiwgMHg4ZDMwLCAwLCB7MHg5OSwweDAwLDB4MjAsMHhjNSwweDA5LDB4MDEsMHgwMiwweDYyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ZDQwLCAwLCB7MHhjMCwweDExLDB4YWMsMHgwMCwweGI4LDB4ODAsMHgyMiwweGMwLDB4MGIsMHg4OCwweDAyLDB4ZWUsMHgwMSwweGI4LDB4YzEsMHgyYSB9LAorICAxNiwgMHg4ZDUwLCAwLCB7MHhjMCwweDFiLDB4YTgsMHgwNiwweGUyLDB4MDAsMHhiYiwweDgwLDB4MmUsMHhjMCwweDhhLDB4ODAsMHgwMiwweGFjLDB4MDAsMHhhYiB9LAorICAxNiwgMHg4ZDYwLCAwLCB7MHgwMCwweDJlLDB4YzAsMHgwYSwweGIwLDB4MDIsMHgyYywweDAwLDB4OTksMHgwMCwweDI0LDB4YzAsMHgwOCwweDgwLDB4MDIsMHgzMCB9LAorICAxNiwgMHg4ZDcwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGVjLDB4MDAsMHhiMCwweDgwLDB4MzYsMHhjMCB9LAorICAxNiwgMHg4ZDgwLCAwLCB7MHgwZSwweGE4LDB4MTMsMHhlMiwweDg1LDB4ZjMsMHhjMCwweDMyLDB4YzAsMHgwZSwweDljLDB4MjMsMHhlNywweDI0LDB4ZTgsMHg4MiB9LAorICAxNiwgMHg4ZDkwLCAwLCB7MHgzYSwweGMxLDB4MGYsMHg5NCwweDAzLDB4YWMsMHgwMiwweGViLDB4MDAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4MmUsMHgxMCB9LAorICAxNiwgMHg4ZGEwLCAwLCB7MHg1MSwweDAwLDB4YjIsMHhjMCwweDBkLDB4YjAsMHgwMywweDUwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ZGIwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4OGYsMHhkMCwweDAzLDB4ZjAsMHgwNCwweGZkLDB4MDQsMHgzZiB9LAorICAxNiwgMHg4ZGMwLCAwLCB7MHhjMCwweDRjLDB4YzAsMHgwMywweGYwLDB4MTAsMHhmYywweDAwLDB4MWYsMHhjMCwweDBkLDB4ZDEsMHgyMywweDFjLDB4MDAsMHhjNyB9LAorICAxNiwgMHg4ZGQwLCAwLCB7MHgwMCwweDM5LDB4YzAsMHgwZCwweGYwLDB4ODMsMHhmZSwweDQ0LDB4ZWQsMHgwMCwweDNiLDB4YzAsMHgwZiwweDc0LDB4MDMsMHhmOCB9LAorICAxNiwgMHg4ZGUwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDAsMHhmOSwweDAxLDB4YmEsMHhjMSB9LAorICAxNiwgMHg4ZGYwLCAwLCB7MHgwYywweGIwLDB4MDMsMHhhMSwweDA4LDB4ZmEsMHgwMCwweDMwLDB4YzgsMHg4ZiwweDk0LDB4MDMsMHgyNSwweDAwLDB4ZjksMHgwMCB9LAorICAxNiwgMHg4ZTAwLCAwLCB7MHgzYywweGMwLDB4MGYsMHgwNCwweDgzLDB4ZWMsMHgwMCwweGZiLDB4MDAsMHgzZSwweGUwLDB4MGYsMHg3MSwweDBiLDB4MmMsMHg0MCB9LAorICAxNiwgMHg4ZTEwLCAwLCB7MHhmZCwweDA4LDB4MzcsMHhjMCwweDRlLDB4OTEsMHgwMywweDkwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ZTIwLCAwLCB7MHhjOCwweDA1LDB4M2MsMHgwMCwweGI5LDB4MDAsMHgyMywweGMwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMCwweGM4LDB4MDAsMHgzNyB9LAorICAxNiwgMHg4ZTMwLCAwLCB7MHhmMCwweDBiLDB4ODAsMHgwMSwweDY0LDB4MDAsMHg0OSwweDAyLDB4MzMsMHhjMCwweDg0LDB4OWMsMHgwMywweDNjLDB4MDAsMHhiZiB9LAorICAxNiwgMHg4ZTQwLCAwLCB7MHgwMiwweDBmLDB4ZDAsMHgwOCwweGY0LDB4MDIsMHgwZSwweDEwLDB4YmQsMHg4MCwweDMzLDB4ZTAsMHgwOCwweDkwLDB4MGEsMHgzMiB9LAorICAxNiwgMHg4ZTUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MDAsMHhiMCwweDA2LDB4MjAsMHhjMCB9LAorICAxNiwgMHg4ZTYwLCAwLCB7MHgwOCwweDAwLDB4NDIsMHg4NCwweDAwLDB4YTAsMHgwMCwweDIwLDB4ZjAsMHgwYiwweDAwLDB4MjIsMHhjYywweDAwLDB4OTAsMHgwMCB9LAorICAxNiwgMHg4ZTcwLCAwLCB7MHgyOCwweGMwLDB4MDIsMHgzZCwweDAyLDB4OGMsMHgwMCwweGIzLDB4MDAsMHgyYywweGMyLDB4OWEsMHgzOCwweDAyLDB4MDYsMHgwNCB9LAorICAxNiwgMHg4ZTgwLCAwLCB7MHhiMSwweDEyLDB4MjAsMHhlMCwweDA4LDB4MzAsMHgwMiwweDM4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ZTkwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwMCwweGI2LDB4ODAsMHgyMSwweGUwLDB4MjgsMHhlYSwweDAyLDB4MzYsMHg4MCwweDg2LDB4OTAsMHg2NSB9LAorICAxNiwgMHg4ZWEwLCAwLCB7MHhlMCwweDFiLDB4ZGEsMHgwNiwweDVlLDB4MDEsMHg5ZSwweDg0LDB4MjUsMHhlYywweDBhLDB4NzgsMHgwMiwweDVlLDB4MDAsMHhiNyB9LAorICAxNiwgMHg4ZWIwLCAwLCB7MHg4MCwweDJkLDB4ZTAsMHgwOCwweDc5LDB4NGEsMHgxNiwweDQwLDB4YmQsMHg4MCwweDI1LDB4ZTAsMHgwOCwweDM4LDB4MDIsMHgwOCB9LAorICAxNiwgMHg4ZWMwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHhmYiwweDAwLDB4MjgsMHhlMCB9LAorICAxNiwgMHg4ZWQwLCAwLCB7MHgwOCwweDE4LDB4MDIsMHg4YSwweDg4LDB4YTEsMHhhMCwweDIwLDB4YzIsMHgxZiwweDJhLDB4MjMsMHhlNiwweGM4LDB4ZjAsMHhjMCB9LAorICAxNiwgMHg4ZWUwLCAwLCB7MHgzYSwweGVkLDB4NGUsMHgzNCwweDAyLDB4OGMsMHgwOCwweGYzLDB4ODEsMHgxZSwweGMwLDB4MGUsMHgzMCwweDAzLDB4MGUsMHhjMCB9LAorICAxNiwgMHg4ZWYwLCAwLCB7MHhmMSwweDAwLDB4YjAsMHhjYSwweDBlLDB4MjEsMHgwMywweDkyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ZjAwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwOCwweGZlLDB4MTAsMHgzZiwweGQyLDB4MGYsMHhlMCwweDAzLDB4ZWMsMHgwNCwweGZmLDB4MTQsMHg3ZSB9LAorICAxNiwgMHg4ZjEwLCAwLCB7MHhjMCwweDBmLDB4YjEsMHgyMywweGZjLDB4MDEsMHhlZSwweDAwLDB4M2EsMHhjNCwweDBkLDB4YjAsMHgxMywweGJjLDB4MDAsMHhmZiB9LAorICAxNiwgMHg4ZjIwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHgwZSwweGYwLDB4ODMsMHhmYywweDBjLDB4ZmQsMHgxMCwweDNiLDB4YzAsMHgyZiwweGUxLDB4MDMsMHhkMCB9LAorICAxNiwgMHg4ZjMwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVjLDB4NDAsMHhmMCwweDgwLDB4MzIsMHhkMCB9LAorICAxNiwgMHg4ZjQwLCAwLCB7MHgwYywweGEwLDB4MDMsMHg2YywweDAwLDB4ZjMsMHg4MCwweDMyLDB4ZGEsMHgwZiwweGIwLDB4MDMsMHhlYywweDAwLDB4ZmIsMHgwMCB9LAorICAxNiwgMHg4ZjUwLCAwLCB7MHgzZSwweGNjLDB4NGMsMHg5OCwweDEzLDB4MmMsMHgxMCwweGZiLDB4MDQsMHgzZSwweGM0LDB4MGMsMHhmMiwweDgzLDB4YTYsMHgxMCB9LAorICAxNiwgMHg4ZjYwLCAwLCB7MHhkZCwweDIwLDB4M2YsMHhkMSwweDBjLDB4YjAsMHgwMywweGVhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ZjcwLCAwLCB7MHg0OCwweDExLDB4OWMsMHg4MCwweGI3LDB4MDAsMHgyMSwweGM4LDB4MGMsMHg3MCwweDAyLDB4ZGMsMHgwOCwweGI3LDB4MDAsMHgyMSB9LAorICAxNiwgMHg4ZjgwLCAwLCB7MHhjOCwweDBlLDB4NzAsMHgyMiwweGQ4LDB4MDAsMHhiNywweDAwLDB4MmMsMHhjMiwweDBhLDB4NzAsMHgwYSwweDFmLDB4MDgsMHhiNyB9LAorICAxNiwgMHg4ZjkwLCAwLCB7MHgwMCwweDM5LDB4YzgsMHgwYSwweDcwLDB4MDIsMHgxNCwweDAwLDB4YzUsMHg2OSwweDJjLDB4Y2EsMHgyYSwweDcwLDB4MDIsMHhkMiB9LAorICAxNiwgMHg4ZmEwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4MDAsMHhiZiwweDgxLDB4NjQsMHhlMSB9LAorICAxNiwgMHg4ZmIwLCAwLCB7MHgwOCwweDc4LDB4MDIsMHg1YSwweDAxLDB4YmYsMHg4MCwweDIxLDB4ZWMsMHg0YiwweDc4LDB4NDYsMHg5ZiwweDA4LDB4MzcsMHg4MCB9LAorICAxNiwgMHg4ZmMwLCAwLCB7MHgyZCwweGU4LDB4ODgsMHgxOCwweDAyLDB4MWUsMHg4MSwweGI3LDB4YjAsMHgyZCwweGUwLDB4MDksMHg3YSwweDAyLDB4OGUsMHgwMCB9LAorICAxNiwgMHg4ZmQwLCAwLCB7MHg5NSwweGEwLDB4MmQsMHhlNCwweDA4LDB4NzgsMHgwMiwweGYwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ZmUwLCAwLCB7MHg0OCwweDE0LDB4ZWMsMHgwMCwweGIzLDB4NjAsMHgyMCwweGMwLDB4MDgsMHhiNiwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDEsMHgyMCB9LAorICAxNiwgMHg4ZmYwLCAwLCB7MHhjMCwweDhhLDB4YjAsMHg4NiwweGNmLDB4MDAsMHhiYiwweDEwLDB4NmMsMHhjMSwweDBhLDB4MzgsMHgwMiwweDBjLDB4MDEsMHhiMyB9LAorICAxNiwgMHg5MDAwLCAwLCB7MHgwMiwweDI4LDB4YzAsMHgwYiwweGIwLDB4MGEsMHgwYywweDAwLDB4ODEsMHgwMCwweDJlLDB4YzAsMHgwYSwweGI0LDB4ODIsMHhkMiB9LAorICAxNiwgMHg5MDEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MDAsMHhmZSwweDQwLDB4YjYsMHg4MCB9LAorICAxNiwgMHg5MDIwLCAwLCB7MHgwYywweGU0LDB4MDMsMHg3OCwweDgwLDB4ZmUsMHg3NCwweDMyLDB4ODAsMHgwYiwweGU2LDB4MDMsMHhmOSwweDAwLDB4ZmUsMHgwMCB9LAorICAxNiwgMHg5MDMwLCAwLCB7MHgzZSwweDgwLDB4MGMsMHhlMCwweDAzLDB4MjgsMHgwMCwweGZhLDB4MDAsMHgzZSwweDgwLDB4NGQsMHhhMCwweDAzLDB4YTgsMHgwMCB9LAorICAxNiwgMHg5MDQwLCAwLCB7MHhkYSwweDA0LDB4M2UsMHg4MCwweDBjLDB4ZTQsMHgwMywweGZhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MDUwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MmUsMHg4MCwweDIzLDB4ZTAsMHgwMCwweGY4LDB4MDEsMHgzYyB9LAorICAxNiwgMHg5MDYwLCAwLCB7MHgwMCwweDBlLDB4ODAsMHgwMywweGUwLDB4MjAsMHhmOCwweDIwLDB4M2UsMHgwMSwweDhmLDB4ODksMHgwMywweGUwLDB4MDAsMHhmOCB9LAorICAxNiwgMHg5MDcwLCAwLCB7MHgwMCwweDNhLDB4MTAsMHgwZSwweDgwLDB4MDEsMHhlMCwweDAwLDB4ZTgsMHg0MCwweDdlLDB4MDAsMHg0ZiwweDgwLDB4MDMsMHhkMiB9LAorICAxNiwgMHg5MDgwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDIsMHhjOSwweDAxLDB4N2UsMHg0MCB9LAorICAxNiwgMHg5MDkwLCAwLCB7MHgyYywweDkwLDB4MGIsMHgyNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NjgsMHgwNSwweDkwLDB4MTMsMHhhNCwweDA0LDB4ZDksMHgwMCB9LAorICAxNiwgMHg5MGEwLCAwLCB7MHgzMiwweDQxLDB4MGUsMHg5MSwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDYwLDB4MGUsMHg5MCwweDAzLDB4MjQsMHgwMCB9LAorICAxNiwgMHg5MGIwLCAwLCB7MHhmMSwweDAwLDB4MzIsMHg0MCwweDY4LDB4OTAsMHg0MywweDgyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MGMwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4MDAsMHg2ZSwweDQwLDB4MDgsMHg5MCwweDQyLDB4MjQsMHgwMCwweGI5LDB4MDAsMHgyZSB9LAorICAxNiwgMHg5MGQwLCAwLCB7MHg3MCwweDg4LDB4OTAsMHgwMywweDI0LDB4MDAsMHhiOSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTgsMHgxMiwweGU0LDB4MDAsMHhiOSB9LAorICAxNiwgMHg5MGUwLCAwLCB7MHgwMCwweDJlLDB4NDAsMHgwYSwweDkwLDB4MGEsMHgyNiwweDAwLDB4YjksMHg4MCwweGEyLDB4NDAsMHgwOCwweDkwLDB4MTIsMHgyMCB9LAorICAxNiwgMHg5MGYwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDAsMHg4OSwweDA0LDB4MmMsMHg0MCB9LAorICAxNiwgMHg5MTAwLCAwLCB7MHgwOCwweDkwLDB4MDIsMHgyNCwweDAxLDB4YjksMHgwMCwweDJhLDB4NDAsMHgwYiwweGIwLDB4MDIsMHhhNCwweDAxLDB4YjksMHgwMCB9LAorICAxNiwgMHg5MTEwLCAwLCB7MHhlMCwweDQwLDB4MGEsMHg5MCwweDgyLDB4YTQsMHgwMCwweGI5LDB4MDAsMHgyYywweDQ4LDB4MGEsMHg5OCwweDAyLDB4MjQsMHg4MCB9LAorICAxNiwgMHg5MTIwLCAwLCB7MHgzOSwweDIwLDB4MjIsMHg0MCwweDJhLDB4OTAsMHgwMiwweDg2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MTMwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweDgxLDB4MDAsMHgyYywweDQ4LDB4MDgsMHgxMCwweDEyLDB4MDQsMHgxMCwweGIxLDB4MDQsMHgyYyB9LAorICAxNiwgMHg5MTQwLCAwLCB7MHhkOCwweDBhLDB4MTAsMHgwMiwweDA0LDB4MDAsMHhiMSwweDAwLDB4MjAsMHg0OCwweDA4LDB4MTAsMHgwMiwweGM0LDB4ODAsMHhiMSB9LAorICAxNiwgMHg5MTUwLCAwLCB7MHgyMiwweDJjLDB4NTAsMHg4YSwweDMyLDB4ODIsMHgwNSwweGEwLDB4YjEsMHgyYSwweDIwLDB4NGEsMHgwYSwweDEyLDB4ODIsMHgwMiB9LAorICAxNiwgMHg5MTYwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYxLDB4NTAsMHhjOCwweDUyLDB4MmUsMHgxNCB9LAorICAxNiwgMHg5MTcwLCAwLCB7MHgwYywweDg1LDB4MDMsMHgyMSwweDQwLDB4ZjgsMHg1MCwweDNhLDB4MDAsMHgxZiwweDg1LDB4MDMsMHhhMSwweDQwLDB4ZjgsMHg1MCB9LAorICAxNiwgMHg5MTgwLCAwLCB7MHgzMiwweDE0LDB4MGUsMHg4MCwweDAzLDB4YTEsMHg0MCwweGY4LDB4NTAsMHgzYywweDgwLDB4MGUsMHgwMiwweDAzLDB4MjAsMHg4MCB9LAorICAxNiwgMHg5MTkwLCAwLCB7MHhmYSwweDIwLDB4MzIsMHgwOCwweDBlLDB4ODIsMHgxMywweGFlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MWEwLCAwLCB7MHg5OCwweDFkLDB4ZTQsMHg1MCwweGZkLDB4MDAsMHgzZSwweDQ0LDB4MGYsMHhkMCwweDAzLDB4ZjQsMHgwMCwweGZkLDB4MDAsMHgzZSB9LAorICAxNiwgMHg5MWIwLCAwLCB7MHg0NCwweDhkLDB4ZDAsMHgwMSwweGJkLDB4MDAsMHhmZCwweDAyLDB4M2UsMHg0NCwweDBmLDB4ZDQsMHgwMCwweGU0LDB4NDgsMHg3OSB9LAorICAxNiwgMHg5MWMwLCAwLCB7MHgxNCwweDNlLDB4NTAsMHgwZiwweDkyLDB4YTIsMHhmNCwweDA4LDB4ZmQsMHgwMCwweDNlLDB4NGEsMHgwZCwweGQyLDB4ODMsMHhlNiB9LAorICAxNiwgMHg5MWQwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGU3LDB4MDAsMHhmOSwweDEwLDB4M2EsMHg2ZSB9LAorICAxNiwgMHg5MWUwLCAwLCB7MHgwYywweGIxLDB4MDMsMHhlNCwweDQwLDB4ZjksMHg0NCwweDNiLDB4NjEsMHg4ZSwweDk0LDB4MDMsMHhlNCwweDAwLDB4ZTksMHg0MCB9LAorICAxNiwgMHg5MWYwLCAwLCB7MHgzMiwweDY2LDB4MGYsMHhkYSwweDBiLDB4YTcsMHgyOCwweGM5LDB4ZTAsMHgzZiwweDY4LDB4MGMsMHhkYSwweDgzLDB4YjMsMHgyMCB9LAorICAxNiwgMHg5MjAwLCAwLCB7MHhlZCwweGEwLDB4MzMsMHg3OSwweDA4LDB4ZDgsMHgwMywweDQ2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MjEwLCAwLCB7MHgzOCwweDEwLDB4ZTIsMHgwMCwweGI4LDB4YTAsMHgyZSwweDM4LDB4MDgsMHg4YSwweDAyLDB4ZTIsMHg4OCwweGU4LDB4ODEsMHgyZSB9LAorICAxNiwgMHg5MjIwLCAwLCB7MHgxNCwweDA5LDB4MGEsMHgwMywweGUyLDB4ODAsMHhiOCwweDgwLDB4MzIsMHgzMCwweDBiLDB4ODUsMHgwMiwweDIxLDB4MDEsMHhhOCB9LAorICAxNiwgMHg5MjMwLCAwLCB7MHhmNCwweDM4LDB4MmEsMHgwOCwweDBlLDB4Y2EsMHgyMywweDkwLDB4YzgsMHg1NCwweDM0LDB4MzgsMHgwOCwweDhhLDB4OTIsMHgwZSB9LAorICAxNiwgMHg5MjQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM1LDB4MDAsMHhiMSwweDAwLDB4MjgsMHg0MCB9LAorICAxNiwgMHg5MjUwLCAwLCB7MHgxOSwweDEwLDB4MDIsMHhjNCwweDAwLDB4YjEsMHgyMCwweDI4LDB4NDAsMHgwYiwweDEwLDB4MDYsMHhjNCwweDIwLDB4YTEsMHhhMiB9LAorICAxNiwgMHg5MjYwLCAwLCB7MHg2YywweDQ4LDB4MGIsMHgxMCwweDAyLDB4ODQsMHgwOCwweDgxLDB4MjAsMHgyYywweDUwLDB4MDksMHgxMCwweDAyLDB4YzQsMHgwNCB9LAorICAxNiwgMHg5MjcwLCAwLCB7MHhiMSwweDAwLDB4MjQsMHg1OCwweDA4LDB4M2MsMHgwMiwweDQyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MjgwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMSwweGI5LDB4MjAsMHgyYywweDQwLDB4MDksMHg5MCwweDAyLDB4ZTQsMHgxMCwweGE5LDB4NDAsMHgyZSB9LAorICAxNiwgMHg5MjkwLCAwLCB7MHg0MCwweDBiLDB4OTAsMHgwMiwweGE0LDB4MDAsMHhiMSwweDAxLDB4MmEsMHg0MCwweDBiLDB4OTQsMHgwMiwweDI0LDB4MDAsMHhhOSB9LAorICAxNiwgMHg5MmEwLCAwLCB7MHgwMCwweDJhLDB4NDAsMHgwMSwweDEwLDB4NTIsMHg2NCwweDAwLDB4ODksMHgwMCwweDI2LDB4NDAsMHgwMCwweDk4LDB4MDIsMHg0NiB9LAorICAxNiwgMHg5MmIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU0LDB4MDAsMHhmOSwweDYxLDB4M2EsMHg0MCB9LAorICAxNiwgMHg5MmMwLCAwLCB7MHgwZCwweDkwLDB4ODMsMHhlNSwweDIwLDB4ZjksMHgwMSwweDNhLDB4NDAsMHgyZSwweDkwLDB4MDIsMHhlNCwweDQwLDB4ZTksMHgwMSB9LAorICAxNiwgMHg5MmQwLCAwLCB7MHg5ZSwweDQwLDB4MGYsMHg5NCwweDAzLDB4YTQsMHgwMCwweDg5LDB4MDAsMHgzZSwweDQwLDB4MmQsMHg5MCwweDAyLDB4ZTYsMHgwOCB9LAorICAxNiwgMHg5MmUwLCAwLCB7MHhiOSwweDAxLDB4MzYsMHg0MCwweDJjLDB4OTAsMHgwMSwweDY4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MmYwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MmUsMHg5MCwweDAzLDB4ZTQsMHg4MCwweGY5LDB4MDAsMHgzYyB9LAorICAxNiwgMHg5MzAwLCAwLCB7MHg0MCwweDBjLDB4OWMsMHgyMywweGU0LDB4MDAsMHhmOSwweDAwLDB4MzYsMHg0MCwweDBmLDB4MTAsMHg0MywweDg0LDB4MDAsMHhmOSB9LAorICAxNiwgMHg5MzEwLCAwLCB7MHgwMiwweDNlLDB4NDAsMHgwZSwweDkwLDB4MDMsMHg4MCwweDgwLDB4ZjksMHgwMCwweDNjLDB4NDAsMHgyZiwweDkwLDB4MDMsMHg4YSB9LAorICAxNiwgMHg5MzIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDAsMHhjOCwweDQwLDB4MzYsMHgwMSB9LAorICAxNiwgMHg5MzMwLCAwLCB7MHgwZCwweDg0LDB4MDMsMHhlMSwweDAwLDB4ZTgsMHg0MCwweDNlLDB4MDgsMHgwYywweDgwLDB4MDMsMHhlMSwweDAwLDB4ZjgsMHgwMCB9LAorICAxNiwgMHg5MzQwLCAwLCB7MHgzMiwweDAwLDB4OGYsMHg4MCwweDAzLDB4YTAsMHgxMCwweGY4LDB4MDAsMHgzMiwweDA0LDB4MGUsMHg4MCwweDgzLDB4NjAsMHgwMCB9LAorICAxNiwgMHg5MzUwLCAwLCB7MHhmOCwweDAwLDB4M2UsMHgwMCwweDBjLDB4MDAsMHgwMywweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MzYwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwMCwweDhhLDB4MDEsMHgyMiwweDgwLDB4MDgsMHhhMCwweDI0LDB4ZTgsMHgwMCwweDBhLDB4MDAsMHgyZiB9LAorICAxNiwgMHg5MzcwLCAwLCB7MHg4MCwweDFhLDB4YTAsMHgwMiwweDI4LDB4MDAsMHhiYSwweDAwLDB4MTYsMHg4MCwweDBiLDB4ZTAsMHgwMywweDI4LDB4MDgsMHhlYSB9LAorICAxNiwgMHg5MzgwLCAwLCB7MHgwMCwweDMzLDB4OTAsMHgwOCwweGVjLDB4MWIsMHgyMiwweDgwLDB4YzYsMHgxNCwweDJmLDB4OTEsMHgwOCwweGEwLDB4NDMsMHg0YSB9LAorICAxNiwgMHg5MzkwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDAsMHg5MywweDAwLDB4MjQsMHhjMCB9LAorICAxNiwgMHg5M2EwLCAwLCB7MHgwOSwweDMwLDB4MTIsMHhjYywweDA0LDB4YTMsMHgwNCwweDZjLDB4YzAsMHgwOSwweDMwLDB4MDIsMHg4YywweDAwLDB4YjMsMHgwMCB9LAorICAxNiwgMHg5M2IwLCAwLCB7MHgyYywweGMwLDB4MTMsMHgzMCwweDAyLDB4OGMsMHgwMCwweGIzLDB4MDAsMHhlNiwweGI4LDB4MGEsMHgzOCwweDAyLDB4NDQsMHgwOCB9LAorICAxNiwgMHg5M2MwLCAwLCB7MHg4MiwweDUwLDB4MmMsMHhkMiwweDNhLDB4MzAsMHgwMiwweDhhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5M2QwLCAwLCB7MHhhMCwweDAxLDB4MGUsMHg4MCwweDk3LDB4YjQsMHgyMSwweGM0LDB4NDksMHg3MSwweDAyLDB4ZGUsMHg4MSwweDg3LDB4MjEsMHgyZCB9LAorICAxNiwgMHg5M2UwLCAwLCB7MHhkMCwweDBiLDB4N2IsMHgwMiwweDFjLDB4MDEsMHhiZiwweDIwLDB4MjksMHhjNCwweDBiLDB4MzAsMHgwMiwweDVjLDB4MDAsMHhhNyB9LAorICAxNiwgMHg5M2YwLCAwLCB7MHhhMSwweDIxLDB4YzAsMHg0YSwweDcwLDB4OGEsMHgwYywweDgxLDB4ODQsMHgwMCwweDJkLDB4ZDAsMHgwYSwweDUwLDB4MDIsMHhlOCB9LAorICAxNiwgMHg5NDAwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFlLDB4ODIsMHhkZiwweGEwLDB4MzQsMHhlYyB9LAorICAxNiwgMHg5NDEwLCAwLCB7MHgwZCwweDc5LDB4MDIsMHhmZSwweDgwLDB4ZTcsMHhlOCwweDJmLDB4YTAsMHgwOSwweDdhLDB4MDIsMHg5ZSwweDAwLDB4ZjcsMHhhMiB9LAorICAxNiwgMHg5NDIwLCAwLCB7MHgyNSwweGVhLDB4MGIsMHg0OCwweDAzLDB4OWUsMHgwNCwweGZmLDB4YzAsMHg2NSwweGU0LDB4MGUsMHg2OCwweDAzLDB4NWYsMHgwMCB9LAorICAxNiwgMHg5NDMwLCAwLCB7MHhlNCwweDgwLDB4M2QsMHhlMCwweDBlLDB4ZjgsMHgwMywweGFhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NDQwLCAwLCB7MHgwOCwweDFkLDB4YWMsMHg0OCwweGViLDB4MDUsMHgzZSwweGQ5LDB4MGUsMHhiMiwweDAzLDB4ZWMsMHgwMCwweGZiLDB4NjAsMHgzZSB9LAorICAxNiwgMHg5NDUwLCAwLCB7MHhjMCwweDBlLDB4YjIsMHg4MywweGFjLDB4MDAsMHhmMywweDUwLDB4YTYsMHhjMCwweDRmLDB4YjAsMHgwMywweGFjLDB4MDAsMHhmYiB9LAorICAxNiwgMHg5NDYwLCAwLCB7MHg4MCwweDNmLDB4ZDgsMHgwZCwweGEwLDB4MDMsMHhlYywweDBhLDB4ZjksMHgwMCwweDNlLDB4YzAsMHgwZCwweDkwLDB4MDMsMHg0MiB9LAorICAxNiwgMHg5NDcwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGZlLDB4MDAsMHhiYiwweDkwLDB4M2UsMHhlMCB9LAorICAxNiwgMHg5NDgwLCAwLCB7MHgwOCwweDM5LDB4MDMsMHg5ZSwweDIwLDB4Y2YsMHg4MiwweDc3LDB4ZTAsMHgxZiwweGY4LDB4MDMsMHhlZSwweDAwLDB4ZmYsMHhjMCB9LAorICAxNiwgMHg5NDkwLCAwLCB7MHgzZiwweGU1LDB4MGQsMHhmOSwweDAzLDB4ZWUsMHgwMCwweGZiLDB4OTAsMHgzNywweGEwLDB4MDgsMHhmOCwweDBmLDB4MWUsMHgwMCB9LAorICAxNiwgMHg5NGEwLCAwLCB7MHhjYywweDk0LDB4MzMsMHg2MCwweDBkLDB4ZjgsMHgwMywweGMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NGIwLCAwLCB7MHhhOCwweDExLDB4OWMsMHgwMCwweGI3LDB4OTAsMHgyZiwweGU0LDB4MDgsMHg3YSwweDAyLDB4MWUsMHgwMCwweDhmLDB4MTIsMHgyNSB9LAorICAxNiwgMHg5NGMwLCAwLCB7MHhkOCwweDBiLDB4YmIsMHgwMiwweDFlLDB4MDAsMHhiNywweDAwLDB4MmQsMHhlOCwweDA4LDB4N2QsMHg4MiwweGRlLDB4NDAsMHhiYiB9LAorICAxNiwgMHg5NGQwLCAwLCB7MHhhMCwweDI3LDB4OTAsMHgwYSwweDc2LDB4MDIsMHg1YywweDgwLDB4ODUsMHgwMCwweDM3LDB4YzQsMHg0ZCwweDcxLDB4MDMsMHhlYSB9LAorICAxNiwgMHg5NGUwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4MDAsMHhiNywweDIwLDB4MmQsMHhjMCB9LAorICAxNiwgMHg5NGYwLCAwLCB7MHgyOSwweGYyLDB4MjIsMHhiYywweDgwLDB4OTcsMHgwMCwweDI1LDB4NDEsMHgwYiwweDcwLDB4MTIsMHg5YywweDAwLDB4YjcsMHgwOCB9LAorICAxNiwgMHg5NTAwLCAwLCB7MHgyOSwweGMwLDB4MDgsMHg0MiwweDEyLDB4ZGMsMHg0MCwweGI3LDB4MDAsMHgyOSwweGMwLDB4MDksMHg2MCwweDIyLDB4ZGMsMHgxMCB9LAorICAxNiwgMHg5NTEwLCAwLCB7MHg4MCwweDAwLDB4MjEsMHg0MCwweDA5LDB4NzAsMHgwMiwweGMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NTIwLCAwLCB7MHgyMCwweDE0LDB4Y2MsMHgwMCwweGIzLDB4YzAsMHgyZSwweGMwLDB4MDgsMHgzNCwweDgyLDB4MmQsMHgwMCwweDkzLDB4MDAsMHgyNCB9LAorICAxNiwgMHg5NTMwLCAwLCB7MHhjMCwweDBiLDB4MzAsMHgwMiwweDBmLDB4ODAsMHgxMywweDAwLDB4MmMsMHhjMCwweDBhLDB4MzQsMHhhMiwweGVjLDB4MDAsMHhiMyB9LAorICAxNiwgMHg5NTQwLCAwLCB7MHgwMCwweDI4LDB4YzAsMHgwYiwweDAwLDB4MDIsMHhjYywweDAwLDB4ODEsMHgwMCwweDIwLDB4YzAsMHgwOSwweDMwLDB4MDIsMHg4OSB9LAorICAxNiwgMHg5NTUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxMSwweGJjLDB4MDAsMHhmZiwweGUwLDB4M2YsMHhjMCB9LAorICAxNiwgMHg5NTYwLCAwLCB7MHgwYywweGY0LDB4ODMsMHhiZCwweDAwLDB4ZGYsMHgwOCwweDM2LDB4NDAsMHgwYiwweDc1LDB4NDIsMHhmYywweDIwLDB4ZmYsMHg4MCB9LAorICAxNiwgMHg5NTcwLCAwLCB7MHgzYiwweGMwLDB4MmMsMHgzYywweDAzLDB4ZmMsMHgwMCwweGJmLDB4MDAsMHhiZSwweGMwLDB4OGQsMHg5MCwweDBiLDB4YWMsMHgwMiB9LAorICAxNiwgMHg5NTgwLCAwLCB7MHhjYSwweDAwLDB4MjIsMHg4MCwweDBkLDB4YjAsMHgwMiwweGVhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NTkwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGZiLDB4MDgsMHgxZSwweGMwLDB4MGYsMHhiMCwweDEzLDB4ZWMsMHgwMCwweGViLDB4MDAsMHgzYSB9LAorICAxNiwgMHg5NWEwLCAwLCB7MHgxMCwweDBmLDB4YjAsMHgyMywweGFjLDB4MDEsMHhmYiwweDAwLDB4M2UsMHhjMCwweDNjLDB4ODQsMHgwMywweGVjLDB4MDAsMHhmYiB9LAorICAxNiwgMHg5NWIwLCAwLCB7MHgwMCwweDI2LDB4NDAsMHgwZSwweDk0LDB4MGIsMHgyYywweDAwLDB4ZjksMHg0MCwweDNlLDB4OTAsMHgwZSwweDkwLDB4MTMsMHhlMCB9LAorICAxNiwgMHg5NWMwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGRjLDB4MDIsMHhjZiwweDAwLDB4M2YsMHhjMCB9LAorICAxNiwgMHg5NWQwLCAwLCB7MHgwZCwweGYwLDB4MGIsMHgzYywweDIwLDB4Y2YsMHgwMCwweDNkLDB4MDAsMHgwZSwweGYwLDB4MDcsMHg5YywweDAxLDB4Y2YsMHgwMiB9LAorICAxNiwgMHg5NWUwLCAwLCB7MHgzZSwweGMwLDB4MGYsMHhjNCwweDAzLDB4M2MsMHgwMCwweGNmLDB4MDAsMHgwZiwweGMwLDB4MGUsMHg0NCwweDAzLDB4MWYsMHgwMiB9LAorICAxNiwgMHg5NWYwLCAwLCB7MHhjYywweDAwLDB4M2YsMHg4MCwweDJjLDB4NzAsMHgwMywweDAwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NjAwLCAwLCB7MHg4MSwweDA0LDB4NmMsMHgwMCwweDhiLDB4MDIsMHgyZSwweGMwLDB4MGQsMHhiMCwweDAyLDB4MmMsMHgwMCwweGFiLDB4MDAsMHgwNiB9LAorICAxNiwgMHg5NjEwLCAwLCB7MHgyMCwweDA4LDB4YjAsMHgwMywweGZjLDB4MDAsMHhhYiwweDAwLDB4MmUsMHhjMCwweDBmLDB4ODAsMHgwNiwweGJjLDB4MDAsMHhhYiB9LAorICAxNiwgMHg5NjIwLCAwLCB7MHgwNCwweDNhLDB4ZjAsMHgwYywweDg4LDB4MDIsMHgyYywweDAwLDB4YzksMHg4MCwweDNhLDB4OTIsMHgwOCwweDkwLDB4MGEsMHhhMCB9LAorICAxNiwgMHg5NjMwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHhhYiwweDAwLDB4MmUsMHhjMCB9LAorICAxNiwgMHg5NjQwLCAwLCB7MHgwOSwweDMwLDB4MDIsMHgyYywweDAwLDB4OGIsMHgwMCwweDI2LDB4NjAsMHgwYiwweGIwLDB4MDIsMHhhYywweDAwLDB4OGIsMHgwMCB9LAorICAxNiwgMHg5NjUwLCAwLCB7MHg2ZSwweGMwLDB4MGIsMHhiMCwweDQyLDB4MmMsMHgwMCwweDliLDB4MDAsMHg0YywweGUwLDB4MGEsMHg5MCwweDIyLDB4MmMsMHgwMCB9LAorICAxNiwgMHg5NjYwLCAwLCB7MHg4YSwweGMyLDB4MmMsMHg0MCwweDA4LDB4YjAsMHg0MiwweDIwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NjcwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMCwweDgzLDB4MGQsMHgyYywweGM2LDB4MDksMHgzMSwweDAyLDB4MGQsMHg4MSwweGEzLDB4MTEsMHgyNCB9LAorICAxNiwgMHg5NjgwLCAwLCB7MHgwMCwweDhhLDB4YjEsMHhlMiwweDRjLDB4ODAsMHhhMywweDAwLDB4MmMsMHhjYywweDBiLDB4MDIsMHgwMiwweDhjLDB4ODAsMHhhMyB9LAorICAxNiwgMHg5NjkwLCAwLCB7MHg0OCwweDA4LDB4YzAsMHgwOCwweDAwLDB4MGEsMHgwZCwweDAwLDB4ODEsMHgwMCwweDI4LDB4YzAsMHgwOCwweDMwLDB4MDIsMHg4MiB9LAorICAxNiwgMHg5NmEwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDZjLDB4MDAsMHhjYiwweDIwLDB4MmYsMHhjOCB9LAorICAxNiwgMHg5NmIwLCAwLCB7MHg4ZCwweGY2LDB4MTMsMHgyZCwweGIwLDB4OGYsMHgwMCwweDM2LDB4NDAsMHgwZiwweGYwLDB4MDIsMHhhZCwweGE4LDB4OGYsMHgxMCB9LAorICAxNiwgMHg5NmMwLCAwLCB7MHgzZiwweGNhLDB4MGIsMHg4MCwweDkyLDB4MmMsMHgxMCwweGRiLDB4NDAsMHgzZiwweGMwLDB4MGUsMHgwMCwweDAzLDB4MmQsMHgwNCB9LAorICAxNiwgMHg5NmQwLCAwLCB7MHhjOCwweDAyLDB4M2UsMHg0MCwweDBjLDB4YjAsMHgwMywweDAwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NmUwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHgzZiwweGM4LDB4MGUsMHhmMSwweDAzLDB4ZWMsMHg4NCwweGZmLDB4MjAsMHgzNyB9LAorICAxNiwgMHg5NmYwLCAwLCB7MHgwMCwweDBkLDB4YjIsMHgwMywweGJjLDB4YTAsMHhmZiwweDAwLDB4M2UsMHhjOSwweDBlLDB4ODAsMHgwMywweGZkLDB4MTEsMHhmZiB9LAorICAxNiwgMHg5NzAwLCAwLCB7MHgwMCwweDNiLDB4YzAsMHgwZSwweGMwLDB4MDMsMHhmYywweDgwLDB4ZWQsMHgwMCwweDNiLDB4YzAsMHgwZiwweGYwLDB4NDMsMHg2OCB9LAorICAxNiwgMHg5NzEwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMSwweGZjLDB4OTAsMHhjYywweDkyLDB4M2IsMHhjOCB9LAorICAxNiwgMHg5NzIwLCAwLCB7MHgwZCwweGYwLDB4ODMsMHg3MywweDEwLDB4ZmYsMHgyOCwweDM3LDB4Y2EsMHg0ZiwweGIyLDB4MDMsMHhmYywweDAwLDB4ZGYsMHgyMCB9LAorICAxNiwgMHg5NzMwLCAwLCB7MHhiMywweGM0LDB4MGQsMHg2OCwweDQzLDB4ZmUsMHgxNCwweGNiLDB4ODQsMHgzMywweGUwLDB4MGQsMHg3OCwweDAzLDB4YmUsMHgwMCB9LAorICAxNiwgMHg5NzQwLCAwLCB7MHhmZiwweDgwLDB4MzcsMHhhMCwweDBjLDB4ZjMsMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NzUwLCAwLCB7MHg4MCwweDAwLDB4ZmMsMHg0OCwweDgyLDB4MjEsMHgwMywweGY0LDB4MGYsMHhmNiwweDQyLDB4MjAsMHgwNCwweDhhLDB4NjAsMHgyYiB9LAorICAxNiwgMHg5NzYwLCAwLCB7MHhkYSwweDBiLDB4ZjksMHgwMiwweDNmLDB4MDQsMHg4ZiwweDUyLDB4MjMsMHhkNSwweDRkLDB4ODgsMHgwMiwweGFlLDB4MDAsMHhkYiB9LAorICAxNiwgMHg5NzcwLCAwLCB7MHg4MCwweDM2LDB4YzAsMHgwOCwweDgwLDB4MDIsMHgyMCwweDA0LDB4YjgsMHgwMCwweDIyLDB4NjAsMHgwZCwweDc0LDB4MDMsMHhlMCB9LAorICAxNiwgMHg5NzgwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4YTAsMHg4MCwweDAxLDB4MDgsMHhjMCB9LAorICAxNiwgMHg5NzkwLCAwLCB7MHg0YiwweDMwLDB4ODIsMHg0MiwweDkwLDB4YTMsMHgwOCwweDJjLDB4YzgsMHgxYSwweDMwLDB4MjIsMHg4ZCwweDAwLDB4OTMsMHgwMCB9LAorICAxNiwgMHg5N2EwLCAwLCB7MHgyNCwweGM4LDB4MDksMHhhMCwweDEyLDB4MGMsMHgwNCwweGFiLDB4MDAsMHg2MiwweGMwLDB4MDksMHhiMCwweDAyLDB4Y2MsMHgwMCB9LAorICAxNiwgMHg5N2IwLCAwLCB7MHhiMywweDAwLDB4MjgsMHg4MCwweDA4LDB4MzYsMHgwNiwweGEyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5N2MwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHgwMCwweDg4LDB4MDgsMHgyMiwweGMwLDB4MGEsMHgzMCwweDFhLDB4MDAsMHgxMSwweDgyLDB4MDAsMHgwYSB9LAorICAxNiwgMHg5N2QwLCAwLCB7MHhjMCwweDBiLDB4YjAsMHg0MiwweDJjLDB4MDAsMHg4YiwweDAwLDB4MjYsMHhjMCwweDA5LDB4OTEsMHgwMiwweGVjLDB4MjAsMHhiYiB9LAorICAxNiwgMHg5N2UwLCAwLCB7MHgyOCwweDY2LDB4YzAsMHgwOCwweDgwLDB4MDIsMHg2MCwweDAwLDB4YjgsMHgwMCwweDJhLDB4NDAsMHg4MSwweGIwLDB4MDYsMHhmOCB9LAorICAxNiwgMHg5N2YwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNSwweGVjLDB4MDIsMHhjOCwweDA0LDB4M2EsMHhjMCB9LAorICAxNiwgMHg5ODAwLCAwLCB7MHg4OSwweGIwLDB4MDMsMHg2OCwweDAwLDB4ZTksMHhjMSwweDFlLDB4YzEsMHgwZSwweDMwLDB4MDMsMHhlYywweDAwLDB4ZGIsMHgwMCB9LAorICAxNiwgMHg5ODEwLCAwLCB7MHgzNiwweGMxLDB4MGQsMHgwMCwweDIzLDB4MGUsMHgwMCwweGViLDB4ODAsMHgzMiwweGM4LDB4Y2QsMHgzMCwweDMyLDB4ZWMsMHgwOCB9LAorICAxNiwgMHg5ODIwLCAwLCB7MHhmMywweDAwLDB4M2MsMHg4MCwweDBjLDB4YjAsMHgwNiwweDgwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ODMwLCAwLCB7MHhlMCwweDAxLDB4OWMsMHgwMCwweDdjLDB4MDAsMHgzZiwweGMwLDB4MGIsMHhiMCwweDQzLDB4ZmQsMHgwMCwweGJlLDB4YzQsMHgzNyB9LAorICAxNiwgMHg5ODQwLCAwLCB7MHhjMCwweDFmLDB4ZjAsMHgwMywweDVjLDB4MDAsMHhmZiwweDAxLDB4M2IsMHhjMCwweDBlLDB4YzgsMHgwMywweGJmLDB4MjAsMHhkZiB9LAorICAxNiwgMHg5ODUwLCAwLCB7MHgwMCwweDNmLDB4ZDAsMHgwZiwweGMwLDB4MTMsMHhiMCwweDAwLDB4N2MsMHgwMCwweGI3LDB4NDAsMHgwZiwweGYwLDB4MWIsMHhiMCB9LAorICAxNiwgMHg5ODYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MGMsMHhkOCwweDQxLDB4MzIsMHhjMCB9LAorICAxNiwgMHg5ODcwLCAwLCB7MHgwZSwweGIwLDB4MDcsMHhhOCwweDAxLDB4NjksMHg0MCwweGIyLDB4YzAsMHg4ZCwweGIwLDB4YTMsMHhlYywweDA4LDB4ZjMsMHgwMCB9LAorICAxNiwgMHg5ODgwLCAwLCB7MHgzMiwweGMwLDB4MGYsMHg4MCwweDAzLDB4ZWQsMHgwMCwweGZiLDB4NDgsMHgzYSwweGMwLDB4MGQsMHhiMCwweDgzLDB4MmMsMHgwMCB9LAorICAxNiwgMHg5ODkwLCAwLCB7MHhmYiwweDIwLDB4M2UsMHg4MCwweDBmLDB4NzAsMHgyMywweGQwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5OGEwLCAwLCB7MHhjOCwweDA1LDB4M2MsMHgwMCwweDg4LDB4MDAsMHgyMywweGMwLDB4MDgsMHhmMCwweDA2LDB4MmMsMHgxMCwweDg4LDB4NTEsMHgzNyB9LAorICAxNiwgMHg5OGIwLCAwLCB7MHhjMCwweDA4LDB4ZjAsMHgwNywweDdkLDB4NjAsMHg4ZiwweDAyLDB4MzcsMHhjMCwweDBiLDB4OGMsMHgwMCwweDJkLDB4MDAsMHhiMyB9LAorICAxNiwgMHg5OGMwLCAwLCB7MHgwMCwweDM4LDB4YzAsMHgwOCwweDgwLDB4ODIsMHgyMCwweDAwLDB4YjgsMHgwMCwweDJlLDB4NTAsMHgwYiwweGYwLDB4MDAsMHgzMiB9LAorICAxNiwgMHg5OGQwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MDAsMHg5OCwweDAwLDB4MjgsMHhjMCB9LAorICAxNiwgMHg5OGUwLCAwLCB7MHgwYSwweDMwLDB4MDIsMHg4NCwweDA0LDB4YTMsMHgwMCwweDAwLDB4YzAsMHg2OCwweDM5LDB4MDYsMHgwYywweDEwLDB4OTMsMHgyMCB9LAorICAxNiwgMHg5OGYwLCAwLCB7MHgyMiwweGMwLDB4OWIsMHgwMSwweGEwLDB4OGYsMHgxNCwweDMzLDB4MTQsMHgyOCwweGMwLDB4MDksMHgzYywweDAyLDB4MGMsMHgwMSB9LAorICAxNiwgMHg5OTAwLCAwLCB7MHg5MywweDQwLDB4MmMsMHg4OCwweDBiLDB4MzAsMHgwMiwweGI4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5OTEwLCAwLCB7MHg2MCwweDAxLDB4MWUsMHgxMCwweDg3LDB4ODAsMHgyOSwweGUwLDB4MDgsMHg3OCwweDAyLDB4M2UsMHgwMCwweDgzLDB4OTAsMHgyNCB9LAorICAxNiwgMHg5OTIwLCAwLCB7MHhlMCwweDA4LDB4NzgsMHgxMCwweGNlLDB4MDQsMHgwNywweDkxLDB4MjUsMHhlMCwweDgzLDB4YzksMHgwMiwweDFlLDB4MDQsMHhiNyB9LAorICAxNiwgMHg5OTMwLCAwLCB7MHg4NCwweDJiLDB4YTQsMHgwOCwweDQ4LDB4NDIsMHgxMiwweGNjLDB4YjQsMHg4MCwweDJkLDB4NjQsMHgwYiwweDc4LDB4MDIsMHgxOSB9LAorICAxNiwgMHg5OTQwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwMCwweDJjLDB4MDAsMHhkMCwweDEwLDB4MjgsMHhjOCB9LAorICAxNiwgMHg5OTUwLCAwLCB7MHgwZSwweDNiLDB4MDIsMHg4NCwweDAwLDB4ZTMsMHg0MCwweDMwLDB4YzgsMHgwYywweDM4LDB4NjIsMHg4YywweDAwLDB4NTMsMHgwMCB9LAorICAxNiwgMHg5OTYwLCAwLCB7MHgzMCwweGM0LDB4MWYsMHgwMCwweDIzLDB4OGMsMHgzYywweGYzLDB4ODAsMHgxOCwweGMwLDB4MGQsMHgzMCwweDAzLDB4MGUsMHg4MCB9LAorICAxNiwgMHg5OTcwLCAwLCB7MHhkMywweDEwLDB4M2MsMHg4MCwweDBmLDB4MzAsMHgwMywweDkyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5OTgwLCAwLCB7MHg0MCwweDFkLDB4YmQsMHgwMCwweGY5LDB4MTIsMHhiNCwweGMwLDB4MDcsMHhiMCwweDAzLDB4Y2MsMHgwMCwweDRhLDB4MDAsMHg3NyB9LAorICAxNiwgMHg5OTkwLCAwLCB7MHhjMCwweDBlLDB4NzEsMHg0MywweDZjLDB4MDAsMHhmMywweDAwLDB4M2YsMHhkMCwweDFmLDB4ZDAsMHg1MywweGFjLDB4NjgsMHhmYiB9LAorICAxNiwgMHg5OWEwLCAwLCB7MHgxOCwweDNkLDB4YzAsMHgwZiwweGMwLDB4MTMsMHhmMCwweDUwLDB4ZmMsMHgwNCwweDNmLDB4NDAsMHgwZiwweGY0LDB4MDMsMHg5MCB9LAorICAxNiwgMHg5OWIwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVkLDB4NDAsMHhmOCwweDA0LDB4M2UsMHhkMiB9LAorICAxNiwgMHg5OWMwLCAwLCB7MHgwZiwweGIzLDB4MTMsMHhlMCwweDEwLDB4ZjksMHgwMCwweGIyLDB4Y2MsMHgwZSwweGJhLDB4MDMsMHg2ZCwweDgwLDB4ZGIsMHgwMiB9LAorICAxNiwgMHg5OWQwLCAwLCB7MHgzMiwweGRjLDB4NGYsMHgwMCwweDAzLDB4NmMsMHgwNCwweGYzLDB4MDIsMHgzNiwweDQwLDB4MGUsMHhiMCwweDAzLDB4Y2MsMHgwMCB9LAorICAxNiwgMHg5OWUwLCAwLCB7MHg0YiwweDAwLDB4M2MsMHg4MCwweDBjLDB4ZjEsMHgwMywweDYyLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5OWYwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgwMCwweGI0LDB4MDAsMHgyZCwweGM5LDB4MGIsMHg3MCwweDgyLDB4ZGMsMHgwMCwweGJjLDB4MDQsMHgyMSB9LAorICAxNiwgMHg5YTAwLCAwLCB7MHhjNCwweDRiLDB4MzcsMHgwMiwweDBjLDB4YTAsMHg4ZiwweDc0LDB4MjEsMHhjMCwweDBiLDB4NDAsMHgwMiwweDFjLDB4ODEsMHhiNyB9LAorICAxNiwgMHg5YTEwLCAwLCB7MHgyMCwweDJiLDB4YzAsMHgwOCwweDQwLDB4MDIsMHhkMCwweDAyLDB4ODQsMHgwMCwweDJkLDB4NDAsMHgwYSwweGYyLDB4MDIsMHgxMiB9LAorICAxNiwgMHg5YTIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4ODAsMHhiNCwweGMwLDB4MmQsMHhlNCB9LAorICAxNiwgMHg5YTMwLCAwLCB7MHgwYiwweDdhLDB4MDIsMHhkMiwweDAwLDB4YjUsMHg4OCwweDIxLDB4ZTgsMHgwYSwweDc4LDB4MDIsMHhkZSwweDQwLDB4OTcsMHgwMCB9LAorICAxNiwgMHg5YTQwLCAwLCB7MHgyMSwweGU4LDB4MGIsMHhjYywweDQ2LDB4NWUsMHgyOCwweGI3LDB4YzQsMHgyMSwweGYwLDB4MGEsMHg3OCwweDAyLDB4ZmUsMHgwOCB9LAorICAxNiwgMHg5YTUwLCAwLCB7MHg5NywweDg0LDB4MmQsMHhhMCwweDA4LDB4NzgsMHgwMiwweDcwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5YTYwLCAwLCB7MHgwOCwweDE0LDB4Y2MsMHgwMCwweGIwLDB4YzAsMHgyYywweGMwLDB4OWIsMHhiMCwweDAyLDB4Y2MsMHgyMCwweGIzLDB4NjAsMHgyMiB9LAorICAxNiwgMHg5YTcwLCAwLCB7MHhjMCwweDBiLDB4MzAsMHgwMiwweDhjLDB4MDAsMHg4MywweDAxLDB4MjAsMHhjMCwweDFiLDB4MDYsMHgxNiwweDRmLDB4MDAsMHhiMyB9LAorICAxNiwgMHg5YTgwLCAwLCB7MHhhMCwweDJhLDB4ZjAsMHgwOCwweDAwLDB4MDIsMHhlMCwweDAwLDB4OTAsMHgwMCwweDJjLDB4NDAsMHgwYSwweDMwLDB4MDIsMHgwMiB9LAorICAxNiwgMHg5YTkwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MTAsMHhmZSwweGMwLDB4M2UsMHg4MCB9LAorICAxNiwgMHg5YWEwLCAwLCB7MHgwZiwweGEwLDB4MDMsMHhmOSwweDA4LDB4ZmUsMHg0MCwweDIyLDB4ODAsMHgwZSwweGEwLDB4MDMsMHhlOCwweDAwLDB4ZDIsMHgwMCB9LAorICAxNiwgMHg5YWIwLCAwLCB7MHgzMiwweDgwLDB4OGYsMHhlMCwweDAzLDB4NTgsMHgwMCwweGY2LDB4MDAsMHgzMywweGIwLDB4MGUsMHgyMCwweDAyLDB4ZTgsMHgwYyB9LAorICAxNiwgMHg5YWMwLCAwLCB7MHhkMiwweDAyLDB4M2MsMHg4MCwweDBjLDB4YTAsMHgwMywweDdhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5YWQwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4MjAsMHgzZSwweDAxLDB4MGIsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGYwLDB4NDAsMHgzZSB9LAorICAxNiwgMHg5YWUwLCAwLCB7MHgwMCwweDU3LDB4ODAsMHgyMywweDAwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODQsMHgwMywweGEwLDB4MzAsMHgzOCB9LAorICAxNiwgMHg5YWYwLCAwLCB7MHgwMCwweDNhLDB4MDgsMHgwZiwweGM0LDB4MDMsMHhmMCwweDAwLDB4ZWMsMHgwMCwweDNmLDB4MTAsMHgwZiwweDgwLDB4MDMsMHhkMiB9LAorICAxNiwgMHg5YjAwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDAsMHhkOSwweDAxLDB4M2MsMHg0OCB9LAorICAxNiwgMHg5YjEwLCAwLCB7MHg0YywweDkwLDB4MGIsMHgyNCwweDAxLDB4YzksMHhjMCwweDMyLDB4NDAsMHhhYywweDkwLDB4MDMsMHhlNCwweDAwLDB4ZDksMHg0MCB9LAorICAxNiwgMHg5YjIwLCAwLCB7MHgzMCwweDQwLDB4MGQsMHg5YSwweDAzLDB4MjIsMHg4NCwweGM4LDB4MTQsMHgzMiwweDQwLDB4MGUsMHg5MCwweDAzLDB4MjQsMHgwMCB9LAorICAxNiwgMHg5YjMwLCAwLCB7MHhjOSwweDAwLDB4ODIsMHg2OCwweDJjLDB4OTAsMHgwMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5YjQwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4MDAsMHgyZSwweDQwLDB4MDgsMHg5MCwweDIyLDB4MjQsMHgwMCwweDg5LDB4MDIsMHg4MiB9LAorICAxNiwgMHg5YjUwLCAwLCB7MHg0MCwweDA4LDB4OTAsMHgwMiwweGU3LDB4NDAsMHg4OSwweDgwLDB4MzYsMHg0MSwweDhkLDB4MTgsMHgwMiwweGEwLDB4MjQsMHhhOCB9LAorICAxNiwgMHg5YjYwLCAwLCB7MHgwNCwweDYyLDB4NDAsMHgwOCwweDk0LDB4ODMsMHgyNCwweDAwLDB4ODksMHgwMSwweDIyLDB4NzIsMHgwOCwweDkwLDB4MGIsMHgyMCB9LAorICAxNiwgMHg5YjcwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDA0LDB4MDAsMHg5OSwweDAwLDB4MmEsMHg0MCB9LAorICAxNiwgMHg5YjgwLCAwLCB7MHgyOCwweDkwLDB4MTIsMHgwNCwweDAwLDB4ODksMHgwMCwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDIsMHhhNCwweDIwLDB4OTksMHgwMCB9LAorICAxNiwgMHg5YjkwLCAwLCB7MHgyMiwweDQwLDB4MTgsMHg5MCwweDA2LDB4MjAsMHgwMSwweDg4LDB4MDgsMHg2MiwweDQwLDB4MGEsMHg5MCwweDAyLDB4MzQsMHgxMCB9LAorICAxNiwgMHg5YmEwLCAwLCB7MHg4ZCwweDgxLDB4MjMsMHg0MSwweDA4LDB4MTAsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5YmIwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweDgxLDB4MDQsMHgyYywweDQ4LDB4MDgsMHgxMiwweDAyLDB4MDQsMHgwMiwweDgzLDB4MjAsMHgyMCB9LAorICAxNiwgMHg5YmMwLCAwLCB7MHg0OCwweDA4LDB4MTIsMHgwMiwweGM0LDB4ODAsMHg4MywweDYwLDB4MjQsMHg0OCwweDE5LDB4MzQsMHg2MiwweGE1LDB4MDQsMHhhMSB9LAorICAxNiwgMHg5YmQwLCAwLCB7MHgwMiwweDYwLDB4NDAsMHgwOCwweGQwLDB4MDIsMHg1NCwweDAwLDB4OGQsMHgwMCwweDI5LDB4NDAsMHgwOCwweDEyLDB4ODIsMHgwMiB9LAorICAxNiwgMHg5YmUwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYxLDB4NDAsMHhkOCwweDUwLDB4M2EsMHg4MCB9LAorICAxNiwgMHg5YmYwLCAwLCB7MHgwYywweDg1LDB4MDIsMHgyMSwweDQ0LDB4ODgsMHg1MCwweDMyLDB4MTQsMHg0YywweDgwLDB4NDMsMHhlMCwweDAwLDB4ZDgsMHgwMCB9LAorICAxNiwgMHg5YzAwLCAwLCB7MHgyMiwweDE0LDB4MGMsMHg4MCwweDAzLDB4MjAsMHgwMCwweGM4LDB4MDAsMHhhMiwweDAwLDB4MGUsMHg4MCwweDAzLDB4MjAsMHgwMCB9LAorICAxNiwgMHg5YzEwLCAwLCB7MHhjOCwweDAwLDB4MzMsMHgwMCwweDBjLDB4ODIsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5YzIwLCAwLCB7MHg5OCwweDFkLDB4ZTQsMHg0NCwweGZkLDB4MDAsMHgzZSwweDQ0LDB4MGYsMHg5MSwweDAzLDB4ZjQsMHgxMCwweGZmLDB4MTAsMHgzZSB9LAorICAxNiwgMHg5YzMwLCAwLCB7MHg0NCwweDBmLDB4OTEsMHgwMywweGU0LDB4NDAsMHhmOSwweDEwLDB4M2UsMHg0NCwweDBiLDB4ZjAsMHgxMywweGU1LDB4MTAsMHhmOSB9LAorICAxNiwgMHg5YzQwLCAwLCB7MHg0MCwweDNmLDB4NGEsMHgyZiwweDkyLDB4OGEsMHhhNCwweGEyLDB4ZjksMHgyOCwweDM2LDB4NDAsMHgwZiwweDkyLDB4ODMsMHhhNiB9LAorICAxNiwgMHg5YzUwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgxMSwweGU2LDB4YzAsMHhjMSwweDAwLDB4M2YsMHg2OSB9LAorICAxNiwgMHg5YzYwLCAwLCB7MHgwYywweDlhLDB4NDMsMHg2YywweDAwLDB4ZmQsMHhhMCwweDNlLDB4NzgsMHgyYywweGQ4LDB4MDcsMHhkNiwweDAyLDB4ZDUsMHg5NiB9LAorICAxNiwgMHg5YzcwLCAwLCB7MHgzMiwweDc4LDB4MGQsMHg5MCwweDAzLDB4MjcsMHgwMCwweGZkLDB4YTAsMHgzNSwweDUwLDB4MDYsMHhkNCwweDAzLDB4ZTUsMHgwMCB9LAorICAxNiwgMHg5YzgwLCAwLCB7MHhmZCwweDQwLDB4YjMsMHg0MCwweDBmLDB4OTgsMHhhMywweDQ2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5YzkwLCAwLCB7MHgzOCwweDEwLDB4ZTMsMHhjMiwweDg4LDB4ODgsMHgyZSwweDE0LDB4YTgsMHg4YSwweGMyLDB4MjIsMHhhMCwweGI4LDB4YzAsMHgyYyB9LAorICAxNiwgMHg5Y2EwLCAwLCB7MHgyNCwweDQ4LDB4ODQsMHgwMiwweGUxLDB4MDAsMHg5OCwweGM0LDB4MjAsMHgzYywweDA4LDB4OGEsMHg4MiwweDIzLDB4ODAsMHhiOCB9LAorICAxNiwgMHg5Y2IwLCAwLCB7MHgwNCwweDIyLDB4MjAsMHgwOCwweDg4LDB4MDMsMHhhMiwweDAwLDB4YjgsMHhhMCwweDIyLDB4MDAsMHgwYiwweDg4LDB4MDIsMHgwZSB9LAorICAxNiwgMHg5Y2MwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4ODAsMHhhMSwweDIwLDB4NmMsMHg0MCB9LAorICAxNiwgMHg5Y2QwLCAwLCB7MHgwYSwweDE0LDB4MDIsMHg0NCwweDA0LDB4YTEsMHg2OCwweDJjLDB4NDgsMHgwOCwweDE0LDB4MDIsMHhjNSwweDAwLDB4ODEsMHg2MCB9LAorICAxNiwgMHg5Y2UwLCAwLCB7MHgyMCwweDQ4LDB4MTksMHg5MCwweDAyLDB4ODUsMHg4MSwweGIxLDB4NDAsMHgyNCwweDY4LDB4MGEsMHgxMiwweDQyLDB4YzQsMHg4MCB9LAorICAxNiwgMHg5Y2YwLCAwLCB7MHhiOSwweDIwLDB4MjAsMHg0MCwweDhiLDB4MTAsMHg4MiwweDQyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ZDAwLCAwLCB7MHgxOCwweDA1LDB4YTQsMHgxMCwweGE5LDB4MDAsMHg2ZSwweGMwLDB4MGEsMHgxMCwweDAyLDB4MjQsMHgxNCwweGI5LDB4MDAsMHgyZSB9LAorICAxNiwgMHg5ZDEwLCAwLCB7MHg0MCwweDA4LDB4OTAsMHgxMiwweGU0LDB4MDAsMHg5OSwweDAwLDB4MjIsMHg0MCwweDA4LDB4ODAsMHgwNiwweGEwLDB4NjAsMHhiOSB9LAorICAxNiwgMHg5ZDIwLCAwLCB7MHgwOSwweDIyLDB4NjAsMHgwOCwweDkwLDB4MDIsMHhhNCwweDAwLDB4YjksMHgwMCwweDAyLDB4NDAsMHgwYiwweDEwLDB4MDYsMHgwNiB9LAorICAxNiwgMHg5ZDMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgwNSwweGU0LDB4MDAsMHhlOSwweDgwLDB4M2UsMHg0MSB9LAorICAxNiwgMHg5ZDQwLCAwLCB7MHgwZSwweDkwLDB4MDMsMHg2NCwweDAwLDB4ZTksMHhjMCwweDNlLDB4NDAsMHgwYywweDkwLDB4MDIsMHhlNCwweDAwLDB4YzksMHgwMCB9LAorICAxNiwgMHg5ZDUwLCAwLCB7MHgyMiwweDQxLDB4MGQsMHg4MCwweDAyLDB4YTMsMHgwNCwweGYxLDB4NDAsMHgzNiwweDQwLDB4MGUsMHg5MCwweDAyLDB4ZTQsMHgwMCB9LAorICAxNiwgMHg5ZDYwLCAwLCB7MHhmMSwweDAwLDB4MTIsMHg0MCwweDBmLDB4OTAsMHgwMywweDY4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ZDcwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwMCwweGQ5LDB4MjIsMHgzZSwweDQyLDB4MGQsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGI5LDB4YzQsMHgzYyB9LAorICAxNiwgMHg5ZDgwLCAwLCB7MHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhlOSwweDAyLDB4YWUsMHg0MCwweDBmLDB4ODAsMHg0YiwweDYyLDB4MTAsMHhmOSB9LAorICAxNiwgMHg5ZDkwLCAwLCB7MHgyMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMiwweDdlLDB4NDEsMHgwZiwweDkwLDB4MTMsMHhjYSB9LAorICAxNiwgMHg5ZGEwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwMCwweDgwLDB4MDAsMHhjOCwweDAwLDB4MzgsMHgwMCB9LAorICAxNiwgMHg5ZGIwLCAwLCB7MHgwZiwweDgwLDB4MjAsMHhlMCwweDAwLDB4YTgsMHgyMCwweDMyLDB4MDAsMHgwYywweDgwLDB4MDcsMHhlMCwweDgwLDB4YzgsMHgwMCB9LAorICAxNiwgMHg5ZGMwLCAwLCB7MHgzOCwweDAwLDB4MGQsMHg4MCwweDgzLDB4MjEsMHgxMCwweGY4LDB4NjAsMHgzMiwweDAwLDB4OGUsMHg4MCwweGIzLDB4MjAsMHgwOCB9LAorICAxNiwgMHg5ZGQwLCAwLCB7MHhmOCwweDAwLDB4M2UsMHgwMCwweDBjLDB4ODAsMHgwMywweGNhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ZGUwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwNCwweDhhLDB4MDAsMHgzMywweDkwLDB4NDMsMHhhMCwweDIyLDB4MjgsMHgwMCwweDhlLDB4ODAsMHg3NiB9LAorICAxNiwgMHg5ZGYwLCAwLCB7MHg4MCwweDA4LDB4ZTEsMHgwMywweDE5LDB4MDAsMHg4NiwweDgwLDB4MjIsMHg4MCwweDBkLDB4NjAsMHgwMSwweDc4LDB4MDAsMHhiZSB9LAorICAxNiwgMHg5ZTAwLCAwLCB7MHgwMCwweDM2LDB4ODAsMHgwYywweGU0LDB4MDIsMHhhOCwweDEwLDB4YmUsMHhhMCwweDJmLDB4ODAsMHgwZCwweGEwLDB4MDIsMHgwYSB9LAorICAxNiwgMHg5ZTEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMSwweDRjLDB4MDQsMHgwMywweDA0LDB4MmMsMHhkNCB9LAorICAxNiwgMHg5ZTIwLCAwLCB7MHgwYiwweDMwLDB4MDIsMHg0YywweDAxLDB4YTMsMHhjNCwweDIwLDB4YzAsMHgyOCwweDM1LDB4MDIsMHg4NiwweDAwLDB4ODMsMHg4MCB9LAorICAxNiwgMHg5ZTMwLCAwLCB7MHgyOCwweGMwLDB4MDgsMHgzOCwweDA2LDB4MGUsMHg5NCwweDMwLDB4YzAsMHhhMiwweGMwLDB4MGIsMHgzYywweDAyLDB4MGMsMHgwMCB9LAorICAxNiwgMHg5ZTQwLCAwLCB7MHhiMywweDgwLDB4MmMsMHg0OCwweDA4LDB4MzAsMHgwMiwweDhhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ZTUwLCAwLCB7MHhhMCwweDAxLDB4MGMsMHgwNCwweDhmLDB4ODAsMHgyMSwweGMxLDB4MWIsMHg3MiwweDQyLDB4MWUsMHhjMCwweDgzLDB4ODgsMHgyMSB9LAorICAxNiwgMHg5ZTYwLCAwLCB7MHhjMCwweDE4LDB4MjgsMHgwNiwweDEwLDB4MjEsMHg4NiwweDM4LDB4MjEsMHhjMCwweDE5LDB4ZjcsMHgwMiwweDVkLDB4YzAsMHhiNCB9LAorICAxNiwgMHg5ZTcwLCAwLCB7MHg0MSwweDI3LDB4ZDAsMHgwOCwweDc4LDB4YzYsMHg5YywweDAwLDB4YjcsMHgwMCwweDJmLDB4NjAsMHgwOSwweDcyLDB4MDIsMHgyOCB9LAorICAxNiwgMHg5ZTgwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFlLDB4MDIsMHhjNywweDgwLDB4MmQsMHhhMCB9LAorICAxNiwgMHg5ZTkwLCAwLCB7MHgwZiwweDNlLDB4MDMsMHhmZSwweDgwLDB4YTcsMHg4MCwweGExLDB4ZTAsMHgwYywweDc4LDB4MDIsMHg5NCwweDAwLDB4ODUsMHhhMCB9LAorICAxNiwgMHg5ZWEwLCAwLCB7MHgzOSwweGU0LDB4MGMsMHg3OCwweDEzLDB4MWUsMHg5MCwweGI1LDB4ODQsMHgzMSwweGUwLDB4MGYsMHhmOCwweDg3LDB4MWUsMHgwNCB9LAorICAxNiwgMHg5ZWIwLCAwLCB7MHhmNywweDgwLDB4M2QsMHg2MCwweDBjLDB4M2IsMHgwMywweGFhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ZWMwLCAwLCB7MHgwOCwweDFkLDB4YWQsMHhlNCwweGZiLDB4NTQsMHgzZSwweDgwLDB4MGYsMHhiNCwweDIzLDB4ZWMsMHgzMiwweGZiLDB4MDAsMHgzZSB9LAorICAxNiwgMHg5ZWQwLCAwLCB7MHhkOCwweDRmLDB4YTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHhjMCwweDBmLDB4MzAsMHgzMywweGVjLDB4MDQsMHhmMiB9LAorICAxNiwgMHg5ZWUwLCAwLCB7MHgwMSwweDNlLDB4YzAsMHgwZiwweGIyLDB4MDMsMHhmZSwweDEwLDB4ZmIsMHg2OCwweDNjLDB4NDEsMHgwZiwweGYwLDB4NDMsMHg4MiB9LAorICAxNiwgMHg5ZWYwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNSwweGZlLDB4MDAsMHhjZiwweGU0LDB4M2YsMHhlNCB9LAorICAxNiwgMHg5ZjAwLCAwLCB7MHgwYywweGZjLDB4MDMsMHg3ZSwweDgwLDB4Y2YsMHg4MSwweDMzLDB4ZmEsMHgwZiwweGY4LDB4MDMsMHhmNiwweDAwLDB4ZmYsMHg4MCB9LAorICAxNiwgMHg5ZjEwLCAwLCB7MHgzZiwweGUyLDB4MGYsMHg3OSwweDAzLDB4M2UsMHg0MCwweGY0LDB4ODAsMHgzMywweDYwLDB4MGMsMHhlOCwweDAzLDB4M2UsMHgwMCB9LAorICAxNiwgMHg5ZjIwLCAwLCB7MHhmZiwweDgwLDB4MzMsMHg2MCwweDBjLDB4ZjgsMHg4MywweDUwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ZjMwLCAwLCB7MHhhOCwweDExLDB4OWMsMHgwMCwweGQ3LDB4YTAsMHgyZCwweGM0LDB4MDgsMHhiYSwweDAyLDB4M2MsMHhhMCwweDg3LDB4MjAsMHgyMSB9LAorICAxNiwgMHg5ZjQwLCAwLCB7MHhjMCwweDBmLDB4NTIsMHgwMywweGQ0LDB4MDAsMHhiNiwweDEwLDB4MmQsMHhjMCwweDhiLDB4NzMsMHgwMywweDVjLDB4NDAsMHhiNCB9LAorICAxNiwgMHg5ZjUwLCAwLCB7MHhiMCwweDJiLDB4NDgsMHgyOCwweDQxLDB4MDIsMHgwYywweDAwLDB4YmYsMHgxOCwweDM1LDB4NDYsMHgyOCwweDcyLDB4NDIsMHgyYSB9LAorICAxNiwgMHg5ZjYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMCwweDljLDB4MDAsMHg4NywweDQxLDB4MmQsMHg0NCB9LAorICAxNiwgMHg5ZjcwLCAwLCB7MHgwYSwweDczLDB4MDIsMHg5YywweGM0LDB4ODEsMHgwMCwweDZkLDB4YzgsMHg4YiwweDcwLDB4MDIsMHhkNCwweDAwLDB4YjcsMHgwMCB9LAorICAxNiwgMHg5ZjgwLCAwLCB7MHgyZCwweGMwLDB4MGIsMHhmMCwweDQ2LDB4OWMsMHg1NSwweGI0LDB4MjAsMHgyNSwweDQwLDB4MTgsMHg2MCwweDgyLDB4MWMsMHgwMCB9LAorICAxNiwgMHg5ZjkwLCAwLCB7MHhiNywweDAwLDB4MjMsMHg0MCwweDA4LDB4NzAsMHg0NiwweDQ0LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ZmEwLCAwLCB7MHg2MCwweDE0LDB4Y2MsMHgwMCwweDkzLDB4MDAsMHgyYywweDQwLDB4MGIsMHhiMCwweDAyLDB4MGMsMHg4MiwweDgwLDB4YzAsMHgyMCB9LAorICAxNiwgMHg5ZmIwLCAwLCB7MHhjMCwweDBhLDB4MTAsMHgwMiwweDA0LDB4MDAsMHhiMywweDAwLDB4MmMsMHhjMCwweDFiLDB4MzAsMHgwMCwweGNkLDB4MDEsMHhiMCB9LAorICAxNiwgMHg5ZmMwLCAwLCB7MHg0MCwweGFjLDB4NzgsMHg4OCwweDhjLDB4MDYsMHgwZCwweDYwLDB4YjMsMHg0YywweDI0LDB4MTIsMHgwOCwweDMwLDB4MGEsMHgxOCB9LAorICAxNiwgMHg5ZmQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgxNSwweGJjLDB4MDAsMHhjNywweDAwLDB4MmUsMHg0MCB9LAorICAxNiwgMHg5ZmUwLCAwLCB7MHgwZSwweGYwLDB4MmEsMHhiZiwweDAwLDB4YzgsMHhjOCwweGJmLDB4YzAsMHgwYiwweDkwLDB4MDIsMHhlNCwweDA0LDB4YmYsMHgwMCB9LAorICAxNiwgMHg5ZmYwLCAwLCB7MHgzZiwweGMwLDB4MGYsMHhiMiwweDBhLDB4YWMsMHgwMCwweGY4LDB4ODAsMHgzNCwweDQ5LDB4MGMsMHhiOSwweDBiLDB4M2YsMHgwMCB9LAorICAxNiwgMHhhMDAwLCAwLCB7MHhmYiwweGMwLDB4MzAsMHhmMCwweDBjLDB4ZjAsMHgwMywweDZlLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMDEwLCAwLCB7MHg4MCwweDAwLDB4Y2MsMHgwMCwweGZiLDB4ODAsMHgzZSwweDQxLDB4MmMsMHhiMCwweDEzLDB4YWMsMHgwMCwweGY4LDB4MDAsMHgzZSB9LAorICAxNiwgMHhhMDIwLCAwLCB7MHhjMSwweDBmLDB4YTAsMHgwMywweGU4LDB4MDAsMHhmYSwweDQwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwYiwweDZkLDB4NDAsMHhmOCB9LAorICAxNiwgMHhhMDMwLCAwLCB7MHgxMCwweDNhLDB4NDAsMHgwZiwweGIwLDB4MDMsMHhlYywweDEwLDB4ZmUsMHg0MCwweDNlLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhlMSB9LAorICAxNiwgMHhhMDQwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweGVjLDB4MGMsMHhkZiwweDAwLDB4M2IsMHg4MCB9LAorICAxNiwgMHhhMDUwLCAwLCB7MHgwZiwweGYwLDB4MGIsMHgzYywweDA4LDB4ZTcsMHgwOCwweDMzLDB4YzAsMHgwYiwweGQwLDB4MjMsMHg3NCwweDAwLDB4NTQsMHgwMCB9LAorICAxNiwgMHhhMDYwLCAwLCB7MHgzMywweGMwLDB4MGYsMHhmMCwweDgzLDB4YmUsMHgyMCwweGZkLDB4MGMsMHgzYiwweDYwLDB4MmMsMHhlMCwweDAzLDB4M2MsMHgwMCB9LAorICAxNiwgMHhhMDcwLCAwLCB7MHhjZiwweDEyLDB4MzMsMHg1MCwweDBjLDB4MzAsMHgwMywweDgwLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMDgwLCAwLCB7MHg4MSwweDA0LDB4NmMsMHgwNCwweGFiLDB4MDAsMHgyMiwweGEwLDB4MGIsMHhiMCwweDA2LDB4MGMsMHgwMCwweGFiLDB4NDAsMHgzNiB9LAorICAxNiwgMHhhMDkwLCAwLCB7MHhjMCwweDBiLDB4YTgsMHgwMiwweDY2LDB4MDAsMHhiOCwweDAwLDB4MzYsMHhjMSwweDBiLDB4MzQsMHg0MywweGVlLDB4MDAsMHhiMiB9LAorICAxNiwgMHhhMGEwLCAwLCB7MHgwMCwweDIyLDB4NjAsMHgwOCwweGI0LDB4ODIsMHg4YywweDA0LDB4OGEsMHgyMSwweDIyLDB4NDAsMHgwOCwweGIwLDB4MDIsMHgyMCB9LAorICAxNiwgMHhhMGIwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHg5YiwweDAwLDB4MmEsMHgyMCB9LAorICAxNiwgMHhhMGMwLCAwLCB7MHgwYiwweGIwLDB4MDIsMHgyYywweDAwLDB4ODgsMHhjNSwweDIyLDB4YzAsMHgwYiwweDg4LDB4ODIsMHhlNiwweDAxLDB4YmIsMHgwOCB9LAorICAxNiwgMHhhMGQwLCAwLCB7MHgyMiwweGMwLDB4MGEsMHhiMiwweDgyLDB4YWMsMHg2MCwweGI4LDB4MDIsMHg0YSwweGM0LDB4MDgsMHhiMSwweDAyLDB4MmMsMHgwMCB9LAorICAxNiwgMHhhMGUwLCAwLCB7MHg4MywweDAwLDB4MjIsMHhjMCwweDA4LDB4YjAsMHgwMiwweGEwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMGYwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMCwweGFiLDB4MjAsMHgyMCwweDAxLDB4MGIsMHgzMiwweDA2LDB4MmMsMHgwMCwweGEwLDB4MDAsMHgyMCB9LAorICAxNiwgMHhhMTAwLCAwLCB7MHhjMCwweDA5LDB4MDQsMHgyMiwweGM0LDB4MDAsMHhiMiwweDAwLDB4MjQsMHhjMSwweDhiLDB4YjAsMHgwMiwweDRjLDB4MDAsMHhiMCB9LAorICAxNiwgMHhhMTEwLCAwLCB7MHgwMCwweDYyLDB4YzAsMHg0OCwweDMwLDB4MDIsMHhhYywweDEwLDB4ODIsMHgwMCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHgwMiB9LAorICAxNiwgMHhhMTIwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDdjLDB4MDgsMHhkZiwweDJhLDB4M2EsMHgwMCB9LAorICAxNiwgMHhhMTMwLCAwLCB7MHgwZiwweGY1LDB4MTIsMHgzYywweDEwLDB4YzksMHgwMCwweGEzLDB4YzAsMHgwZiwweDgwLDB4NTMsMHhlYywweDAxLDB4ZGEsMHgwMCB9LAorICAxNiwgMHhhMTQwLCAwLCB7MHgzMywweGMwLDB4MGUsMHhiMCwweDAzLDB4YWMsMHgwNCwweGY4LDB4NzAsMHgzYSwweGMwLDB4MGMsMHg2MCwweDQzLDB4MmMsMHg0MiB9LAorICAxNiwgMHhhMTUwLCAwLCB7MHhjZCwweDAwLDB4YjIsMHg0MCwweDJjLDB4ZjAsMHgwMywweDgwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMTYwLCAwLCB7MHhhMCwweDE5LDB4ZmMsMHgwMCwweGZiLDB4MDEsMHgzZCwweDAwLDB4MGYsMHhiNCwweDE3LDB4ZmMsMHgwMCwweDNjLDB4MDAsMHgzZiB9LAorICAxNiwgMHhhMTcwLCAwLCB7MHhjMCwweDRmLDB4YzAsMHgwMywweDc0LDB4MDgsMHhmZSwweDAwLDB4M2YsMHhjMCwweDRmLDB4ZjAsMHgwMywweGZjLDB4MDgsMHhmOCB9LAorICAxNiwgMHhhMTgwLCAwLCB7MHgzMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmYywweDA0LDB4ZmMsMHgwMCwweDNkLDB4MDAsMHgwZiwweGYwLDB4MDMsMHhlOCB9LAorICAxNiwgMHhhMTkwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGY0LDB4OTAsMHhlZiwweDAwLDB4M2YsMHhkOCB9LAorICAxNiwgMHhhMWEwLCAwLCB7MHgwZSwweGYzLDB4MDMsMHgyYywweDAxLDB4ZDQsMHg4MCwweDM3LDB4Y2MsMHgwZCwweDg5LDB4NDMsMHgxMiwweDUwLDB4ZWMsMHgyYyB9LAorICAxNiwgMHhhMWIwLCAwLCB7MHgzMiwweDA1LDB4MGQsMHhiMCwweDUzLDB4M2MsMHhkNCwweGM1LDB4OTQsMHg3ZiwweGEwLDB4OGYsMHhmMCwweDQzLDB4MzAsMHgwMCB9LAorICAxNiwgMHhhMWMwLCAwLCB7MHhkYywweDAwLDB4MzMsMHgwMCwweDBjLDB4NDgsMHgwNywweGYwLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMWQwLCAwLCB7MHg4MCwweDEwLDB4ZTYsMHg0MCwweDhiLDB4NzAsMHgyZiwweGRjLDB4MDgsMHhmNywweDAyLDB4MGMsMHg4MCwweDhhLDB4MjAsMHgwMCB9LAorICAxNiwgMHhhMWUwLCAwLCB7MHhjOCwweDRhLDB4MjIsMHgwMiwweGEwLDB4MDAsMHg4YSwweDQ4LDB4MjIsMHg1OCwweDg4LDB4ZmQsMHgwMiwweGFkLDB4MDIsMHhhOSB9LAorICAxNiwgMHhhMWYwLCAwLCB7MHgyMCwweDFlLDB4YTAsMHgwMywweDgwLDB4MDIsMHgyYywweDA0LDB4OGIsMHgwMCwweDIyLDB4YzAsMHg0YywweDg4LDB4MDcsMHg2MCB9LAorICAxNiwgMHhhMjAwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGMwLDB4MDAsMHgyMywweDJjLDB4MmMsMHhjOSB9LAorICAxNiwgMHhhMjEwLCAwLCB7MHgwMiwweDMwLDB4MDIsMHgwYywweDY4LDB4YTAsMHgyOCwweDJjLDB4ZDAsMHgwOSwweDEyLDB4MDIsMHg4NCwweDAwLDB4YTAsMHgyMSB9LAorICAxNiwgMHhhMjIwLCAwLCB7MHgyMCwweDE4LDB4MTksMHgzMCwweDIyLDB4ODAsMHhkMCwweDgzLDB4MDYsMHgwYywweGEwLDB4MGIsMHhiMCwweDA2LDB4MDAsMHgxMiB9LAorICAxNiwgMHhhMjMwLCAwLCB7MHhhMCwweDAwLDB4MjAsMHgwMCwweDI5LDB4MDAsMHgwZSwweGEyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMjQwLCAwLCB7MHhjMCwweDExLDB4YTgsMHgzMCwweDhiLDB4MDAsMHgyZSwweGMwLDB4NGEsMHgzMCwweDBhLDB4MmMsMHgxNCwweGEwLDB4ODAsMHgwYSB9LAorICAxNiwgMHhhMjUwLCAwLCB7MHhjMSwweDA4LDB4ODgsMHg4NiwweDg3LDB4MDAsMHg4MywweDAwLDB4MjIsMHg0OSwweDA4LDB4YjAsMHgwNiwweGEwLDB4NDAsMHhhYiB9LAorICAxNiwgMHhhMjYwLCAwLCB7MHgyMCwweDIyLDB4MjAsMHgwYiwweDgwLDB4MGEsMHgwYywweDA0LDB4YWIsMHgwMiwweDIyLDB4YzAsMHg4OCwweDgwLDB4MDIsMHhmMCB9LAorICAxNiwgMHhhMjcwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGVmLDB4NDAsMHhlYiwweDA2LDB4M2UsMHhjMCB9LAorICAxNiwgMHhhMjgwLCAwLCB7MHgwZSwweGIwLDB4MDMsMHgyYywweDAyLDB4ZjksMHhhMCwweDNlLDB4YzAsMHgwZCwweDhjLDB4MDMsMHhhYSwweDEwLDB4ZTksMHg0MCB9LAorICAxNiwgMHhhMjkwLCAwLCB7MHhiMiwweDQ4LDB4MGQsMHhiMCwweDQzLDB4YWQsMHgwMCwweGNiLDB4ODYsMHgyZSwweDIwLDB4MGYsMHgzMCwweDAzLDB4MjQsMHgwMCB9LAorICAxNiwgMHhhMmEwLCAwLCB7MHhmOSwweDgwLDB4MzIsMHhjMCwweDBkLDB4MGMsMHhjMiwweDkwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMmIwLCAwLCB7MHhlMCwweDAxLDB4OTQsMHgwMCwweGZmLDB4MDAsMHgzZCwweGMwLDB4MGQsMHhmMCwweDAzLDB4N2MsMHgwMCwweGRmLDB4MDAsMHgzNyB9LAorICAxNiwgMHhhMmMwLCAwLCB7MHhjMCwweDBmLDB4ZTAsMHgwMywweGYwLDB4MDAsMHhmZSwweDIwLDB4M2YsMHg0MCwweDBmLDB4NzAsMHgwMywweGZlLDB4MDAsMHhmZiB9LAorICAxNiwgMHhhMmQwLCAwLCB7MHg4MiwweDdmLDB4MDAsMHgwZiwweGMwLDB4MDMsMHhmOSwweDA0LDB4ZGUsMHgyMCwweGJkLDB4MDAsMHgwZiwweGQ5LDB4MGIsMHg3YyB9LAorICAxNiwgMHhhMmUwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDEsMHhjYiwweDAwLDB4M2UsMHhjMCB9LAorICAxNiwgMHhhMmYwLCAwLCB7MHgyYywweGIwLDB4MGIsMHgyYywweDAwLDB4ZTgsMHg0MCwweDNlLDB4YzAsMHgwZiwweDk0LDB4MDcsMHgyOSwweDAwLDB4YzksMHg0MCB9LAorICAxNiwgMHhhMzAwLCAwLCB7MHhiMiwweGMwLDB4MGYsMHhiMCwweDAzLDB4MDEsMHgwMiwweGNiLDB4MDAsMHgzMiwweDA0LDB4NGYsMHhmMCwweDQzLDB4MzQsMHhjMCB9LAorICAxNiwgMHhhMzEwLCAwLCB7MHhiNSwweDFhLDB4M2YsMHhjMSwweDBmLDB4ODAsMHg5MywweGQwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMzIwLCAwLCB7MHhjOCwweDA1LDB4MjgsMHgwMCwweDhmLDB4MDAsMHgyZiwweGMwLDB4MDgsMHhmMCwweDAyLDB4M2MsMHgwNCwweGQ4LDB4MDAsMHgyYiB9LAorICAxNiwgMHhhMzMwLCAwLCB7MHhjMCwweDBjLDB4ODAsMHg0NSwweDYwLDB4MDAsMHg3YiwweDU4LDB4MjIsMHhjOCwweDBiLDB4ZmEsMHgwMSwweDYxLDB4NDAsMHg4YiB9LAorICAxNiwgMHhhMzQwLCAwLCB7MHgwMCwweDMyLDB4MDQsMHg0YiwweGNlLDB4MDIsMHgyOCwweDAwLDB4M2EsMHg0MCwweDJlLDB4MDcsMHgwYiwweDkwLDB4MDIsMHgyNiB9LAorICAxNiwgMHhhMzUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MDAsMHg4MywweDAxLDB4NGMsMHhjMCB9LAorICAxNiwgMHhhMzYwLCAwLCB7MHgwYiwweDMwLDB4MDIsMHhlYywweDEwLDB4OTAsMHgwMCwweDJhLDB4YzAsMHgwYSwweDgwLDB4MDYsMHhjMCwweDA0LDB4ODMsMHgwNCB9LAorICAxNiwgMHhhMzcwLCAwLCB7MHhhMiwweDg5LDB4MTksMHgzMCwweDA2LDB4Y2MsMHgwMCwweDgzLDB4MDAsMHgyMCwweDkwLDB4MGIsMHgzMCwweGMyLDB4NDgsMHgwMCB9LAorICAxNiwgMHhhMzgwLCAwLCB7MHhiMiwweDQwLDB4MjQsMHgyMCwweDBiLDB4MDksMHgwMCwweGI4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMzkwLCAwLCB7MHgyMCwweDAxLDB4MDYsMHgwNCwweDg3LDB4YTQsMHgyZCwweGUwLDB4MDksMHgzOCwweDAyLDB4ZGUsMHgwMCwweDllLDB4ODEsMHgyOSB9LAorICAxNiwgMHhhM2EwLCAwLCB7MHhlMCwweDA4LDB4NzgsMHg1MiwweGZhLDB4YzAsMHg5NiwweDgwLDB4MDEsMHhhMCwweDhiLDB4M2EsMHgyMiwweGNlLDB4NDAsMHg4ZiB9LAorICAxNiwgMHhhM2IwLCAwLCB7MHhiMCwweDI1LDB4YTAsMHgwYiwweDA4LDB4MDIsMHg1NiwweDA4LDB4YjUsMHg5MCwweDJkLDB4ZTQsMHg0YiwweGQ4LDB4MjIsMHgwYyB9LAorICAxNiwgMHhhM2MwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDA4LDB4MDIsMHg4MywweDgwLDB4MmUsMHhlOCB9LAorICAxNiwgMHhhM2QwLCAwLCB7MHgwYiwweDM4LDB4MTMsMHhjZSwweDQxLDB4ZDMsMHgxMCwweDI4LDB4YzAsMHgwZSwweDNhLDB4MDIsMHhjNiwweDA4LDB4NGIsMHg0MCB9LAorICAxNiwgMHhhM2UwLCAwLCB7MHgzMCwweDYwLDB4MGQsMHgzYiwweDI3LDB4Y2YsMHhjNCwweGMzLDB4YTAsMHgzMCwweDAwLDB4MGYsMHgzMCwweDQzLDB4NDgsMHg0MCB9LAorICAxNiwgMHhhM2YwLCAwLCB7MHhmMiwweDAwLDB4M2MsMHgwNCwweDBmLDB4MDIsMHgwMywweDkyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNDAwLCAwLCB7MHg0MCwweDFkLDB4YjgsMHgwMCwweGZmLDB4MDAsMHgzZiwweGM0LDB4MGUsMHhmMSwweDAzLDB4M2MsMHgwMCwweGZmLDB4MDEsMHgzMyB9LAorICAxNiwgMHhhNDEwLCAwLCB7MHhjMCwweDRkLDB4YjEsMHgwNywweDdjLDB4OTAsMHhmZiwweDAwLDB4M2YsMHg0MCwweDAzLDB4ZjEsMHgwMywweDcwLDB4MDAsMHhmYiB9LAorICAxNiwgMHhhNDIwLCAwLCB7MHgxMCwweDNiLDB4MDAsMHgwZiwweGMwLDB4MGIsMHhiNCwweDAwLDB4ZmQsMHgwMCwweDNmLDB4YzQsMHgwZiwweGQwLDB4MDMsMHg5MCB9LAorICAxNiwgMHhhNDMwLCAwLCB7MHgwMiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVjLDB4MDQsMHhmYiwweDg0LDB4M2EsMHhjMiB9LAorICAxNiwgMHhhNDQwLCAwLCB7MHg0YywweGI0LDB4OTMsMHgyYywweDA0LDB4ZTksMHgwMCwweDNhLDB4YzQsMHg4ZCwweDA4LDB4MDMsMHgyZSwweDAwLDB4Y2IsMHgwMSB9LAorICAxNiwgMHhhNDUwLCAwLCB7MHgzMiwweDgwLDB4OGYsMHhiMiwweDgzLDB4ZWMsMHgwMCwweGNiLDB4ODAsMHgzMiwweDAwLDB4MGYsMHhmOSwweDAzLDB4M2MsMHgxMCB9LAorICAxNiwgMHhhNDYwLCAwLCB7MHhkZiwweDgxLDB4YjMsMHhlMCwweDhjLDB4YTAsMHgwMywweGVhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNDcwLCAwLCB7MHg0OCwweDExLDB4OTQsMHgwOCwweGI3LDB4MDQsMHgyNCwweGM4LDB4MWEsMHgzMCwweDRhLDB4MWQsMHgwMCwweGI3LDB4MDEsMHgyZCB9LAorICAxNiwgMHhhNDgwLCAwLCB7MHhjMCwweDg4LDB4NzAsMHgwNiwweDFjLDB4MDAsMHg4MiwweDAwLDB4MjEsMHg4MCwweDRiLDB4NzYsMHgxMiwweGRjLDB4MDAsMHg4NyB9LAorICAxNiwgMHhhNDkwLCAwLCB7MHgwMCwweDI5LDB4NDAsMHg4YiwweDQwLDB4MDIsMHgxMCwweDAwLDB4YmMsMHgwMCwweDIwLDB4MDEsMHgyOCwweDcwLDB4MDMsMHhiMiB9LAorICAxNiwgMHhhNGEwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDlhLDB4MDAsMHhiMywweDkwLDB4MmQsMHhlNCB9LAorICAxNiwgMHhhNGIwLCAwLCB7MHgwOSwweDc5LDB4MDIsMHgxZSwweDgwLDB4YTcsMHg4MCwweDJjLDB4ZTgsMHgxOSwweGY4LDB4MTIsMHg1ZSwweDAxLDB4ODcsMHg4MCB9LAorICAxNiwgMHhhNGMwLCAwLCB7MHgyNSwweGUwLDB4NGIsMHg3OCwweDA2LDB4ZDIsMHgwMCwweDk3LDB4ODAsMHgyMSwweDYyLDB4MGIsMHgzYSwweDAyLDB4MWUsMHgwMCB9LAorICAxNiwgMHhhNGQwLCAwLCB7MHhiNywweDg2LDB4MjksMHhmMCwweDA4LDB4NjgsMHgwNiwweGUwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNGUwLCAwLCB7MHg0OCwweDE0LDB4Y2YsMHhjMCwweGIzLDB4MDAsMHgyNCwweGMwLDB4OGEsMHgzMCwweDMyLDB4MGMsMHgwMCwweGIzLDB4MDgsMHgyYyB9LAorICAxNiwgMHhhNGYwLCAwLCB7MHhjMCwweDA4LDB4MzAsMHgxMiwweDBlLDB4MjAsMHg4MywweDAwLDB4MjQsMHhmMSwweDBiLDB4MzAsMHgwNiwweGNlLDB4MDAsMHg4MyB9LAorICAxNiwgMHhhNTAwLCAwLCB7MHg5MCwweDI4LDB4NjAsMHgwYiwweDAwLDB4MmEsMHgyMSwweDgwLDB4YjAsMHgwOCwweDI4LDB4MDAsMHgwOCwweDM3LDB4MDIsMHg5MiB9LAorICAxNiwgMHhhNTEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGI5LDB4MDAsMHhmYSwweDAwLDB4M2UsMHg4MCB9LAorICAxNiwgMHhhNTIwLCAwLCB7MHg0ZCwweGEwLDB4MDMsMHgyOCwweDAwLDB4ZWUsMHg0MSwweDNlLDB4ODAsMHgwZCwweGUwLDB4MDMsMHg3OCwweDAwLDB4OGUsMHg0MCB9LAorICAxNiwgMHhhNTMwLCAwLCB7MHgyNywweGE4LDB4MGIsMHhhMCwweDAzLDB4ZmIsMHgwMiwweGNhLDB4ODIsMHgzMywweGEwLDB4MGYsMHhhMCwweDEzLDB4MjksMHgwMCB9LAorICAxNiwgMHhhNTQwLCAwLCB7MHhmYSwweDQwLDB4M2EsMHg4MCwweDBjLDB4NmMsMHgwMywweGZhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNTUwLCAwLCB7MHg0OCwweDAwLDB4YzAsMHgwMCwweGY4LDB4MDAsMHgzYSwweDAwLDB4MGMsMHg4MCwweDAzLDB4ZTAsMHgwOCwweGY4LDB4MDAsMHgzZSB9LAorICAxNiwgMHhhNTYwLCAwLCB7MHgwMCwweDhmLDB4ODAsMHgyMywweGEwLDB4NDIsMHhmOCwweDA5LDB4YmEsMHgxMCwweDRmLDB4ODAsMHgwMywweGUwLDB4NjAsMHhmOCB9LAorICAxNiwgMHhhNTcwLCAwLCB7MHgwMCwweDNlLDB4MjAsMHgwZiwweGMwLDB4MDMsMHhmMCwweDAwLDB4ZmMsMHgwMCwweDI3LDB4MDAsMHg4ZiwweDgwLDB4MDMsMHg5MiB9LAorICAxNiwgMHhhNTgwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU1LDB4MDAsMHg4OSwweDAwLDB4M2UsMHg0MCB9LAorICAxNiwgMHhhNTkwLCAwLCB7MHg2ZSwweDkwLDB4MDMsMHhhNCwweDA4LDB4YzksMHgwMCwweDNjLDB4NDAsMHgwZCwweDkwLDB4MDMsMHgyNCwweDEwLDB4ZjksMHhhMCB9LAorICAxNiwgMHhhNWEwLCAwLCB7MHgzMiwweDQyLDB4MGMsMHg5MCwweDEzLDB4YzQsMHgwMCwweGM5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHg0MCB9LAorICAxNiwgMHhhNWIwLCAwLCB7MHhjOSwweDIwLDB4M2UsMHg1MiwweGNmLDB4OTAsMHgwOSwweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNWMwLCAwLCB7MHg4MCwweDA0LDB4NjYsMHgwMCwweDg5LDB4MDQsMHgyZSwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMCwweGQ5LDB4MDAsMHgzYSB9LAorICAxNiwgMHhhNWQwLCAwLCB7MHg0MSwweDA4LDB4OTAsMHgwNSwweGE0LDB4MDAsMHhiOSwweDQwLDB4YTIsMHg0MCwweDBkLDB4OTAsMHgwMiwweGU1LDB4NDYsMHg4OSB9LAorICAxNiwgMHhhNWUwLCAwLCB7MHgwMCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MTIsMHhlNSwweDAwLDB4YTksMHhjOCwweDJlLDB4NjEsMHg4YiwweDk0LDB4NDIsMHgyMCB9LAorICAxNiwgMHhhNWYwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMSwweDI0LDB4MDAsMHhhOSwweDAwLDB4NmMsMHg0MCB9LAorICAxNiwgMHhhNjAwLCAwLCB7MHg0OCwweDEwLDB4MjIsMHg4NCwweDAzLDB4YTksMHgwMCwweDJlLDB4NDAsMHgwOSwweDkwLDB4MDIsMHhlNCwweDA0LDB4YjEsMHgwOCB9LAorICAxNiwgMHhhNjEwLCAwLCB7MHgyOCwweDQwLDB4MTgsMHg5OCwweDAyLDB4ZTUsMHgwMCwweDg5LDB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4ZjQsMHgyMCB9LAorICAxNiwgMHhhNjIwLCAwLCB7MHg4ZCwweDAwLDB4MmYsMHg0MCwweDBiLDB4OTQsMHg0MiwweDg2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNjMwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweGExLDB4MjQsMHgyYywweDQ4LDB4MTgsMHgxMiwweDAyLDB4MDQsMHg4MCwweGExLDB4MDAsMHgyOCB9LAorICAxNiwgMHhhNjQwLCAwLCB7MHg0OCwweDA4LDB4MTAsMHgwMiwweDg0LDB4MDAsMHg5MSwweDIwLDB4MjAsMHg0OCwweDA5LDB4MTIsMHgwMiwweGM0LDB4OTQsMHg4MSB9LAorICAxNiwgMHhhNjUwLCAwLCB7MHgwMCwweDJjLDB4NjEsMHgwYiwweDVhLDB4ODIsMHhkNCwweGEwLDB4YTUsMHgyOCwweDJkLDB4NGEsMHgwYiwweDkwLDB4MDIsMHg4MiB9LAorICAxNiwgMHhhNjYwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDIsMHhlOCwweDUwLDB4MmUsMHgxNCB9LAorICAxNiwgMHhhNjcwLCAwLCB7MHgwZSwweDg1LDB4MDMsMHhhMSwweDQwLDB4YTgsMHg1MCwweDNlLDB4MTQsMHgwZCwweDg1LDB4MDEsMHg4MSwweDQwLDB4ZjgsMHg1MiB9LAorICAxNiwgMHhhNjgwLCAwLCB7MHgzMiwweDk0LDB4MGMsMHg4MCwweDEzLDB4YzEsMHg0MiwweGMwLDB4NTEsMHgzZSwweDAwLDB4OGYsMHg4MiwweDAzLDB4ZTAsMHg4MCB9LAorICAxNiwgMHhhNjkwLCAwLCB7MHhjOCwweDIwLDB4M2YsMHgwOCwweDBmLDB4ODAsMHgwMywweGFlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNmEwLCAwLCB7MHg5OCwweDE5LDB4ZjQsMHg1MCwweGQ5LDB4MTEsMHgzZSwweDQ0LDB4OGYsMHg5MSwweDQzLDB4ZTQsMHg0MCwweGRkLDB4MDAsMHgzYSB9LAorICAxNiwgMHhhNmIwLCAwLCB7MHg0NCwweDRmLDB4ZDAsMHgyNywweGI0LDB4MDAsMHhmZCwweDEyLDB4M2YsMHg0NCwweDRmLDB4OTEsMHg0MywweGY0LDB4NDAsMHhmZCB9LAorICAxNiwgMHhhNmMwLCAwLCB7MHgwMCwweDNmLDB4NDEsMHgwZiwweDkyLDB4ODMsMHhlNCwweGEwLDB4ZjksMHgyOCwweDNlLDB4NGEsMHgwZiwweGQwLDB4MDMsMHg2NiB9LAorICAxNiwgMHhhNmQwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgxMSwweGY2LDB4ODAsMHhlOSwweGMwLDB4M2UsMHg3OCB9LAorICAxNiwgMHhhNmUwLCAwLCB7MHg4ZiwweDliLDB4MDMsMHhhNywweDgwLDB4YzksMHg0MCwweDM2LDB4NzgsMHgwZiwweDEwLDB4MjMsMHhlNSwweDA0LDB4ZGQsMHhhNCB9LAorICAxNiwgMHhhNmYwLCAwLCB7MHgzMywweDYyLDB4MGYsMHhkYSwweDAzLDB4ZjYsMHg2MCwweGM5LDB4MTAsMHgzMywweDQwLDB4MGUsMHg5OCwweDkzLDB4ZTYsMHgzMCB9LAorICAxNiwgMHhhNzAwLCAwLCB7MHhjOSwweGM5LDB4MzIsMHg3OCwweDhjLDB4ZDAsMHgwYiwweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNzEwLCAwLCB7MHgzOCwweDEwLDB4ZTAsMHgwMCwweDg4LDB4ZTIsMHgyZSwweDMwLDB4MGIsMHg4OCwweDQyLDB4MjMsMHg0MCwweGEwLDB4YTEsMHgyMiB9LAorICAxNiwgMHhhNzIwLCAwLCB7MHgzOCwweDBiLDB4OGEsMHgwMiwweGUyLDB4ODAsMHhhYSwweGUwLDB4MjIsMHgzMCwweDBiLDB4ODAsMHgyMywweGFiLDB4MDIsMHg4OCB9LAorICAxNiwgMHhhNzMwLCAwLCB7MHhhMCwweDJhLDB4MDAsMHgwYiwweDhjLDB4MDIsMHhlMywweDAwLDB4ODgsMHhlMCwweDIzLDB4MzgsMHgwOCwweDgwLDB4MDIsMHgwZSB9LAorICAxNiwgMHhhNzQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM1LDB4MDAsMHhhMSwweDQ0LDB4MjgsMHg1OCB9LAorICAxNiwgMHhhNzUwLCAwLCB7MHg0MywweDE2LDB4MjIsMHg4NCwweDgxLDB4ODEsMHgyMCwweDJjLDB4NTgsMHg0OSwweDEwLDB4ODAsMHhjNCwweDgxLDB4OTEsMHg0OCB9LAorICAxNiwgMHhhNzYwLCAwLCB7MHg2YywweDRhLDB4MGIsMHgxNCwweDAyLDB4NDQsMHg4NCwweDgxLDB4MDEsMHg2MCwweDQwLDB4MGEsMHg1MiwweDg2LDB4ZDQsMHhhMCB9LAorICAxNiwgMHhhNzcwLCAwLCB7MHg4NSwweDAwLDB4YTEsMHg1MCwweDY4LDB4OTAsMHgwNiwweGQyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNzgwLCAwLCB7MHgxOCwweDA1LDB4YTYsMHgwMCwweDg5LDB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4MDQsMHgwMCwweGE5LDB4NjAsMHgyMiB9LAorICAxNiwgMHhhNzkwLCAwLCB7MHg0MCwweDBiLDB4OTUsMHgwMiwweGU0LDB4MTAsMHhiMSwweDAwLDB4NGUsMHg0MCwweDBiLDB4OTAsMHg2NiwweGFjLDB4ODAsMHg4OSB9LAorICAxNiwgMHhhN2EwLCAwLCB7MHgwMCwweDJhLDB4NjAsMHgwYiwweDkwLDB4NTIsMHhmNCwweDAwLDB4ODUsMHgwMCwweDIxLDB4NDAsMHgwOCwweDkwLDB4MDIsMHhjNiB9LAorICAxNiwgMHhhN2IwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgwNSwweGU2LDB4MjAsMHhlOSwweDAwLDB4M2UsMHg0MCB9LAorICAxNiwgMHhhN2MwLCAwLCB7MHgwZiwweDkwLDB4MDMsMHhhNCwweDEwLDB4YzksMHgwMCwweDM2LDB4NDAsMHgwZiwweDk0LDB4MDEsMHhlNSwweDIwLDB4ZDksMHg0MCB9LAorICAxNiwgMHhhN2QwLCAwLCB7MHhiYSwweDY4LDB4OGYsMHg5MCwweDA3LDB4ZTYsMHgwMCwweGM5LDB4MTAsMHgzMiwweDYyLDB4MGUsMHg5MCwweDAyLDB4ZTQsMHgxOCB9LAorICAxNiwgMHhhN2UwLCAwLCB7MHhjOSwweDAwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweGU4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhN2YwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwMCwweGY5LDB4MDQsMHgzZSwweDQwLDB4MGIsMHg5MCwweDAzLDB4NjQsMHgwMCwweGY5LDB4MDAsMHgzZSB9LAorICAxNiwgMHhhODAwLCAwLCB7MHg0MCwweDhmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhlOSwweDAyLDB4NzIsMHg2OCwweDBmLDB4OTAsMHgwMywweGU2LDB4MDAsMHhmOSB9LAorICAxNiwgMHhhODEwLCAwLCB7MHgwMSwweDNlLDB4NDIsMHgwZiwweDkwLDB4MDMsMHhjNCwweDAyLDB4ZjksMHgwNCwweDNlLDB4NDAsMHg0ZiwweDkwLDB4MDMsMHgxYSB9LAorICAxNiwgMHhhODIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwMCwweDgwLDB4MDIsMHhjOCwweDAwLDB4MzIsMHgwMCB9LAorICAxNiwgMHhhODMwLCAwLCB7MHgwYywweDgwLDB4MDMsMHg2MCwweDAwLDB4YzgsMHg0MCwweDM2LDB4MDAsMHgwZiwweDg0LDB4MDMsMHhhMCwweDAwLDB4ZDgsMHg1MCB9LAorICAxNiwgMHhhODQwLCAwLCB7MHhiMiwweDEwLDB4OGMsMHg4MSwweDAzLDB4YzEsMHgyMCwweGM4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHhjMCwweDEzLDB4ZjAsMHgwNCB9LAorICAxNiwgMHhhODUwLCAwLCB7MHg0YywweDAwLDB4M2YsMHgwMCwweDBmLDB4ODAsMHgwMywweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhODYwLCAwLCB7MHgyOCwweDE1LDB4MmEsMHgwMCwweDhhLDB4MDQsMHgyMiwweDgxLDB4MjgsMHhhMCwweDEyLDB4MjgsMHgwMCwweDhhLDB4MDEsMHgzNiB9LAorICAxNiwgMHhhODcwLCAwLCB7MHg4MCwweDBiLDB4YTAsMHgxMCwweDI4LDB4MTAsMHhjZSwweDAxLDB4MjMsMHg4MSwweDBjLDB4YTgsMHgxMiwweGZiLDB4MDAsMHg4YSB9LAorICAxNiwgMHhhODgwLCAwLCB7MHgwMSwweDNiLDB4ODAsMHg4MywweGEwLDB4NDIsMHhlOCwweDEwLDB4OGEsMHgwMCwweDJmLDB4ODAsMHgwYiwweDYwLDB4NDIsMHgwYSB9LAorICAxNiwgMHhhODkwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDAsMHg4MywweDAwLDB4YTAsMHhjMCB9LAorICAxNiwgMHhhOGEwLCAwLCB7MHgxOCwweGIwLDB4MDAsMHhjYywweDAwLDB4OWIsMHgwMCwweDI0LDB4YzAsMHgwYiwweDMwLDB4MDYsMHg2YywweDAwLDB4YTMsMHgwOCB9LAorICAxNiwgMHhhOGIwLCAwLCB7MHgyOCwweGM4LDB4MDksMHgzMCwweDAyLDB4Y2MsMHg0MywweDhiLDB4MDAsMHgyYywweDgwLDB4MGIsMHgzMCwweDAyLDB4Y2MsMHgwMiB9LAorICAxNiwgMHhhOGMwLCAwLCB7MHg4MywweDAxLDB4MmMsMHhjMCwweDRiLDB4MzAsMHgwMCwweDRhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhOGQwLCAwLCB7MHhhMCwweDAxLDB4MGMsMHgyNCwweDg3LDB4OTQsMHgyMSwweGU0LDB4MTgsMHgzMSwweDAyLDB4ZGMsMHg4MCwweDk3LDB4MTAsMHgyNSB9LAorICAxNiwgMHhhOGUwLCAwLCB7MHhjZCwweDBiLDB4ZjIsMHgwMiwweDdjLDB4MDAsMHhhMCwweDAwLDB4MjgsMHhlMCwweDE4LDB4NzAsMHgwMiwweGRjLDB4MDEsMHg4NyB9LAorICAxNiwgMHhhOGYwLCAwLCB7MHgzNCwweDI5LDB4NDAsMHgwOSwweDQwLDB4MDIsMHhkMCwweDA0LDB4ODQsMHgwNCwweDJkLDB4MDAsMHg0YiwweGQwLDB4MjIsMHg2OCB9LAorICAxNiwgMHhhOTAwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDE2LDB4MDAsMHhjZiwweGEwLDB4NzAsMHhlOSB9LAorICAxNiwgMHhhOTEwLCAwLCB7MHgxOCwweDdiLDB4MDMsMHhmZiwweDQwLDB4OTcsMHhhMCwweDM1LDB4ZTgsMHgwZiwweDc0LDB4MDIsMHg1ZSwweDIwLDB4ZTQsMHg4MCB9LAorICAxNiwgMHhhOTIwLCAwLCB7MHgzOSwweGEwLDB4MmQsMHg3OCwweDAzLDB4ZmUsMHgwMCwweGM3LDB4ODAsMHgzZCwweGUwLDB4NWYsMHg2OCwweDQzLDB4YzIsMHgwMCB9LAorICAxNiwgMHhhOTMwLCAwLCB7MHhjNCwweDg0LDB4MWQsMHg2MCwweDBmLDB4NzgsMHgwMywweDZhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhOTQwLCAwLCB7MHgwOCwweDBkLDB4YTQsMHgwMCwweDNiLDB4MDAsMHgyZSwweGQ4LDB4MGYsMHhiNCwweDAzLDB4MmQsMHg4YSwweGViLDB4NjIsMHgzYSB9LAorICAxNiwgMHhhOTUwLCAwLCB7MHhkMCwweDBmLDB4YjIsMHg4NywweDBjLDB4ZDAsMHhkOCwweDAwLDB4MzIsMHhjMCwweDRmLDB4OTAsMHg0MywweGVjLDB4MDAsMHhmYiB9LAorICAxNiwgMHhhOTYwLCAwLCB7MHgwOCwweDNlLDB4NDAsMHg4ZiwweDkwLDB4MDMsMHhmYywweDAwLDB4ZmYsMHgwNCwweDNmLDB4ODAsMHgwZiwweDAwLDB4MmIsMHg4MiB9LAorICAxNiwgMHhhOTcwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGY2LDB4MDAsMHhmZiwweGEwLDB4M2UsMHhmNCB9LAorICAxNiwgMHhhOTgwLCAwLCB7MHgwZSwweGI4LDB4MDMsMHhlZSwweDA4LDB4NGIsMHhmMCwweDdmLDB4ZjQsMHgwYywweGY5LDB4MjMsMHhlZSwweDQ4LDB4NzgsMHg5MCB9LAorICAxNiwgMHhhOTkwLCAwLCB7MHgzMiwweGU0LDB4MGMsMHhmOSwweDAzLDB4ZmUsMHgwMCwweGZmLDB4ODAsMHgzZiwweGU0LDB4MWMsMHg3OSwweDAzLDB4MmUsMHg0MCB9LAorICAxNiwgMHhhOWEwLCAwLCB7MHhmZiwweDgwLDB4MzMsMHhlMCwweDJjLDB4NzgsMHgwNywweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhOWIwLCAwLCB7MHhhOCwweDExLDB4OTQsMHgwMCwweGIzLDB4MDAsMHgwYywweGU1LDB4MGIsMHgzOCwweDAyLDB4ZmUsMHg4MCwweDhmLDB4ODAsMHg2MSB9LAorICAxNiwgMHhhOWMwLCAwLCB7MHhjNCwweDI4LDB4NzgsMHgwMCwweDRlLDB4MDAsMHhmNCwweDg0LDB4MjUsMHhhOCwweDBjLDB4NzAsMHgwMiwweGNjLDB4MDQsMHhiMyB9LAorICAxNiwgMHhhOWQwLCAwLCB7MHg5MCwweDI1LDB4NDAsMHgwYywweDQxLDB4ODMsMHg1MiwweDQwLDB4YjQsMHgxMCwweGEzLDB4MDAsMHgwYywweDUyLDB4MDMsMHg2YSB9LAorICAxNiwgMHhhOWUwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk0LDB4MDAsMHhiNywweDIxLDB4NmQsMHhjOCB9LAorICAxNiwgMHhhOWYwLCAwLCB7MHg0YiwweDcwLDB4MDIsMHhkYywweDQyLDB4YTcsMHgzMSwweDI5LDB4YzQsMHgwOCwweDcyLDB4MDIsMHhkYywweDAwLDB4YjcsMHgyOCB9LAorICAxNiwgMHhhYTAwLCAwLCB7MHgyNCwweDgwLDB4MDgsMHg3MCwweDA2LDB4ZDQsMHgyMCwweGI3LDB4MDEsMHgyZCwweGMxLDB4MDgsMHg2MCwweDAyLDB4NTAsMHg4MCB9LAorICAxNiwgMHhhYTEwLCAwLCB7MHhiNCwweDA4LDB4MjEsMHg2MiwweDA5LDB4NzQsMHgwNiwweDgwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhYTIwLCAwLCB7MHgyMCwweDE0LDB4YzcsMHgwNCwweGIzLDB4MDAsMHgyYywweGMwLDB4MGIsMHhiMCwweDAyLDB4Y2MsMHgwMCwweGEzLDB4MDIsMHg2MCB9LAorICAxNiwgMHhhYTMwLCAwLCB7MHhjMCwweDA4LDB4MzgsMHgwMiwweDRlLDB4NDQsMHhhMCwweGMwLDB4MjQsMHg5MSwweDA4LDB4MzAsMHgwMiwweGMwLDB4MDAsMHhiMyB9LAorICAxNiwgMHhhYTQwLCAwLCB7MHgwMCwweDI0LDB4NjAsMHgwOCwweDFjLDB4MDIsMHg0YywweDg4LDB4YjMsMHhjMCwweDIwLDB4YTAsMHgwOCwweDAwLDB4MGEsMHg4OCB9LAorICAxNiwgMHhhYTUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGFjLDB4MDAsMHhmZiwweDAwLDB4MmYsMHhjMCB9LAorICAxNiwgMHhhYTYwLCAwLCB7MHg0ZiwweGYwLDB4MTMsMHhmYywweDA4LDB4ZTcsMHg4YSwweDNmLDB4YzAsMHgwYywweGY1LDB4YzIsMHhmZSwweDEwLDB4YmIsMHhjMCB9LAorICAxNiwgMHhhYTcwLCAwLCB7MHgzMiwweGQ0LDB4MGMsMHgzMCwweDEzLDB4ZTMsMHgwNCwweGJmLDB4MDAsMHgyZSwweDYyLDB4MDgsMHhiOSwweDAyLDB4NmUsMHgwMCB9LAorICAxNiwgMHhhYTgwLCAwLCB7MHhmYiwweDAxLDB4MzIsMHhhNCwweDRkLDB4OTQsMHgwMiwweGFiLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhYTkwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHg2MCwweGZiLDB4MDAsMHgxZSwweGMwLDB4MGYsMHhiMCwweDEzLDB4ZWMsMHgwMCwweDViLDB4MDAsMHgzYSB9LAorICAxNiwgMHhhYWEwLCAwLCB7MHhjMCwweDBmLDB4YjAsMHg0MSwweGVjLDB4MDAsMHg3YiwweDQ1LDB4YmEsMHg0MCwweDJlLDB4YjAsMHgxNSwweGUwLDB4MDEsMHhmYiB9LAorICAxNiwgMHhhYWIwLCAwLCB7MHgwMCwweDNlLDB4NTAsMHgwZSwweGMwLDB4MDMsMHhmMCwweDQwLDB4ZmMsMHgyMCwweDNmLDB4NTAsMHg4ZiwweDkwLDB4MDEsMHg2MCB9LAorICAxNiwgMHhhYWMwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGY0LDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCB9LAorICAxNiwgMHhhYWQwLCAwLCB7MHg4ZiwweGYwLDB4MDMsMHgxYywweDAyLDB4Y2YsMHgwMCwweDM2LDB4YzAsMHgwZCwweGYwLDB4MDMsMHg3YywweDAwLDB4N2YsMHgyYSB9LAorICAxNiwgMHhhYWUwLCAwLCB7MHgzZiwweDgwLDB4MGYsMHhmOCwweDEzLDB4OTAsMHgyMSwweGNmLDB4MDAsMHgzZiwweDYyLDB4MGMsMHhlMCwweDAzLDB4MzAsMHgwMCB9LAorICAxNiwgMHhhYWYwLCAwLCB7MHhmOCwweDAwLDB4M2YsMHgwMCwweDBmLDB4ZDAsMHgwMywweDgwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhYjAwLCAwLCB7MHg4MSwweDA0LDB4NjQsMHgxMSwweGJiLDB4MDAsMHgyZSwweGMwLDB4MGIsMHhiMCwweDAyLDB4MmMsMHgwMCwweGRiLDB4MDQsMHgzMiB9LAorICAxNiwgMHhhYjEwLCAwLCB7MHhjMCwweDBlLDB4YjAsMHgwMiwweGVjLDB4MDAsMHhiYiwweDg0LDB4MmUsMHg0MCwweDBiLDB4YjksMHg0MiwweDIyLDB4NDIsMHg4YiB9LAorICAxNiwgMHhhYjIwLCAwLCB7MHgwMSwweDJjLDB4NzIsMHgwYSwweDkwLDB4NDIsMHgyYywweDAwLDB4YmIsMHgwMCwweDJlLDB4YzIsMHg4ZiwweDg4LDB4MDYsMHhlMCB9LAorICAxNiwgMHhhYjMwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMSwweDI0LDB4MDAsMHhiYiwweDAwLDB4NmUsMHhjMCB9LAorICAxNiwgMHhhYjQwLCAwLCB7MHg0OCwweGIwLDB4NDIsMHgyYywweDAwLDB4OGIsMHgwMCwweDI2LDB4YzAsMHgwYSwweGIwLDB4MTIsMHhlYywweDAwLDB4YmIsMHg0MCB9LAorICAxNiwgMHhhYjUwLCAwLCB7MHgyZSwweGM4LDB4MGIsMHhiMCwweDEyLDB4MmMsMHgwMCwweDhiLDB4MDAsMHgyZSwweDQ4LDB4MGEsMHgzMCwweDAyLDB4NmMsMHgwMCB9LAorICAxNiwgMHhhYjYwLCAwLCB7MHhiYiwweDAwLDB4MmUsMHg4MCwweDRiLDB4OTgsMHgwMiwweGUwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhYjcwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHgwMCwweGIzLDB4MDAsMHg2YywweGMyLDB4NGIsMHgzMSwweDAyLDB4MGMsMHg1MCwweDliLDB4MjAsMHgyMCB9LAorICAxNiwgMHhhYjgwLCAwLCB7MHhjMCwweDBhLDB4MzIsMHgxMiwweGNjLDB4ODAsMHhiMywweDAwLDB4NmMsMHgwYywweDBiLDB4MzEsMHgwMiwweDBjLDB4NDIsMHg4MyB9LAorICAxNiwgMHhhYjkwLCAwLCB7MHgwOCwweDJlLDB4NDAsMHgwYSwweDAwLDB4MDIsMHgwMCwweDgwLDB4YjAsMHgwMCwweDJjLDB4NDEsMHgwYiwweDEwLDB4MDIsMHg0MiB9LAorICAxNiwgMHhhYmEwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDY0LDB4MDAsMHhiYiwweDQwLDB4M2YsMHhjYyB9LAorICAxNiwgMHhhYmIwLCAwLCB7MHgwZSwweGYwLDB4ODMsMHgzZCwweGEwLDB4Y2YsMHgyMCwweDM3LDB4YzAsMHgwYywweGY3LDB4YzMsMHhmZCwweDQ4LDB4ZjMsMHgwMCB9LAorICAxNiwgMHhhYmMwLCAwLCB7MHgzZSwweDg4LDB4MGYsMHhiNCwweDEzLDB4YTUsMHgwMCwweDhmLDB4MzAsMHgzZSwweDQwLDB4MGMsMHhhMCwweDAzLDB4NjAsMHg4MCB9LAorICAxNiwgMHhhYmQwLCAwLCB7MHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4OTAsMHgyMywweGMwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhYmUwLCAwLCB7MHhhMCwweDE5LDB4ZjQsMHgwMCwweGZmLDB4MjksMHgzZiwweGM5LDB4MGYsMHhmMCwweDEzLDB4ZmMsMHg5NCwweGVmLDB4MTIsMHgzYiB9LAorICAxNiwgMHhhYmYwLCAwLCB7MHhjMCwweDhlLDB4YjIsMHgwNywweGZkLDB4MDQsMHhmZiwweDEwLDB4M2YsMHgwYywweDBmLDB4ZjAsMHgwMywweGYwLDB4MDAsMHhmYiB9LAorICAxNiwgMHhhYzAwLCAwLCB7MHgyMCwweDNkLDB4NDAsMHgwZiwweGQwLDB4NDMsMHhmYywweDQwLDB4ZmYsMHgwNCwweDNmLDB4YzAsMHgwZSwweGMwLDB4NDMsMHhlOCB9LAorICAxNiwgMHhhYzEwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZjLDB4YTIsMHhjNywweDIwLDB4M2YsMHgyNCB9LAorICAxNiwgMHhhYzIwLCAwLCB7MHgwYywweGYwLDB4MDMsMHgzYywweDgwLDB4Y2MsMHgwOSwweDMzLDB4ZDEsMHgwYywweGYxLDB4MjMsMHhmYywweDIwLDB4ZGYsMHgzNiB9LAorICAxNiwgMHhhYzMwLCAwLCB7MHgzZiwweGMwLDB4MGUsMHg0OCwweDAzLDB4ZmUsMHgwMCwweGZmLDB4ODAsMHgzNywweGU0LDB4MGQsMHg3OCwweDAzLDB4MTEsMHhhMCB9LAorICAxNiwgMHhhYzQwLCAwLCB7MHhjZiwweDAwLDB4MzcsMHhjOCwweDBjLDB4ZjAsMHgwMywweDMwLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhYzUwLCAwLCB7MHg4MCwweDEwLDB4ZmYsMHgwMCwweDhmLDB4ZDEsMHgyZSwweDA4LDB4MGQsMHhiNiwweDEyLDB4M2QsMHg0NSwweGY5LDB4NjQsMHgyNyB9LAorICAxNiwgMHhhYzYwLCAwLCB7MHhkMCwweDg4LDB4YmEsMHgxNCwweGNjLDB4MDQsMHg4ZiwweDQwLDB4MjMsMHhmMCwweDBiLDB4ODgsMHgwMiwweDJlLDB4MDQsMHhiYiB9LAorICAxNiwgMHhhYzcwLCAwLCB7MHg4MCwweGFlLDB4YzAsMHgwOCwweGI4LDB4MGEsMHgyMSwweDAwLDB4ODgsMHhkMCwweDIyLDB4MjAsMHgyOCwweGIwLDB4MDIsMHgyMCB9LAorICAxNiwgMHhhYzgwLCAwLCB7MHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4MDAsMHg5MywweDAwLDB4MmUsMHgwMCB9LAorICAxNiwgMHhhYzkwLCAwLCB7MHgwYSwweDM0LDB4ODIsMHg4YywweGEwLDB4YTAsMHgwOCwweDI0LDB4ZDgsMHgwOSwweDMxLDB4MDIsMHhjYywweDIwLDB4YjMsMHgzMiB9LAorICAxNiwgMHhhY2EwLCAwLCB7MHgyOCwweGQwLDB4NGEsMHg4MCwweDAyLDB4Y2MsMHgwYywweGJiLDB4MDAsMHgyMiwweDQwLDB4ODksMHhiMCwweDAyLDB4NjAsMHg4MCB9LAorICAxNiwgMHhhY2IwLCAwLCB7MHg5MywweDAwLDB4MjQsMHhkMCwweDBiLDB4MzAsMHgwMiwweGEyLDB4MDEsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhY2MwLCAwLCB7MHhjMCwweDExLDB4YWMsMHgwMCwweDliLDB4MDAsMHgyZSwweDIwLDB4MDksMHhiMCwweDRhLDB4MmMsMHgwMiwweGEwLDB4MDAsMHgwNiB9LAorICAxNiwgMHhhY2QwLCAwLCB7MHhjMCwweDA5LDB4YjAsMHgwMCwweGVjLDB4MDAsMHhhYiwweDAwLDB4MmEsMHhjMCwweDBiLDB4ODgsMHgwMiwweDZjLDB4MDAsMHhiYiB9LAorICAxNiwgMHhhY2UwLCAwLCB7MHgyMCwweDJhLDB4ZTIsMHg0MSwweGI4LDB4MmEsMHg2MCwweDBhLDB4OTgsMHgwMCwweDI2LDB4MDAsMHgwYiwweGIwLDB4MDIsMHhiOCB9LAorICAxNiwgMHhhY2YwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGVjLDB4MDgsMHhkYiwweDAyLDB4M2UsMHgyMCB9LAorICAxNiwgMHhhZDAwLCAwLCB7MHg0YywweGIwLDB4MDMsMHgyYywweDAyLDB4OGIsMHgyMCwweDEyLDB4YzAsMHgyOSwweGIwLDB4MTIsMHhlYywweDAwLDB4ZmIsMHgwMCB9LAorICAxNiwgMHhhZDEwLCAwLCB7MHgzYSwweGMwLDB4MGUsMHg4OCwweDAzLDB4ZWQsMHgyMCwweGZiLDB4YzgsMHgzNCwweGYwLDB4MGQsMHhiYSwweDAzLDB4NDcsMHg2MCB9LAorICAxNiwgMHhhZDIwLCAwLCB7MHhjOSwweDAwLDB4MzYsMHg0MCwweDBmLDB4YjAsMHgwYiwweDkwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhZDMwLCAwLCB7MHhlMCwweDAxLDB4OWMsMHgwMCwweGVmLDB4MDAsMHgwZiwweDAwLDB4MGYsMHgzMCwweDAwLDB4ZmMsMHgwMCwweGRmLDB4OTAsMHhiYiB9LAorICAxNiwgMHhhZDQwLCAwLCB7MHhjMCwweGNlLDB4ZjAsMHgwMywweGZjLDB4MDQsMHhjYiwweDAwLDB4MTcsMHhjMCwweDBmLDB4YzAsMHgwMywweGJjLDB4ODQsMHhmZiB9LAorICAxNiwgMHhhZDUwLCAwLCB7MHgwMCwweDM3LDB4YzAsMHgwZSwweGQwLDB4NjMsMHhiOCwweDAwLDB4ZWEsMHgwMCwweDNhLDB4ODAsMHgwYywweDMwLDB4MDMsMHg3MCB9LAorICAxNiwgMHhhZDYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDAsMHhmYiwweDAyLDB4MzIsMHgwMCB9LAorICAxNiwgMHhhZDcwLCAwLCB7MHgwZiwweGIwLDB4NTMsMHgyYywweDAwLDB4ZmEsMHgwMCwweDMyLDB4YzAsMHg4ZiwweGIwLDB4MDcsMHgyYywweDAwLDB4ZmIsMHgwMCB9LAorICAxNiwgMHhhZDgwLCAwLCB7MHhiMiwweGMwLDB4MGYsMHg4MCwweDA3LDB4YWMsMHg4MCwweGRiLDB4MjQsMHg3ZSwweGQwLDB4MGUsMHhiMCwweDIzLDB4NzQsMHgwNCB9LAorICAxNiwgMHhhZDkwLCAwLCB7MHhkZCwweDA4LDB4YjUsMHg0MCwweDBjLDB4YjAsMHgwMywweDEwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhZGEwLCAwLCB7MHhjOCwweDA1LDB4M2MsMHgwMCwweGJmLDB4YzAsMHhhMCwweDAwLDB4MWIsMHhmMCwweDAyLDB4M2YsMHg2MCwweGVhLDB4NTAsMHgyMyB9LAorICAxNiwgMHhhZGIwLCAwLCB7MHhjMCwweDA4LDB4ZmEsMHgwNywweGZjLDB4MDAsMHhkZiwweDAwLDB4NjMsMHhjMCwweDQ4LDB4MTgsMHgwMiwweDJkLDB4MDAsMHhiMyB9LAorICAxNiwgMHhhZGMwLCAwLCB7MHgwMCwweDZlLDB4YzAsMHgwZCwweDNhLDB4MDMsMHgyNCwweDAwLDB4ODIsMHg4MCwweDMyLDB4ODAsMHgwZCwweGYwLDB4MDMsMHgzMiB9LAorICAxNiwgMHhhZGQwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MTQsMHhiMywweDU5LDB4MjAsMHg4MCB9LAorICAxNiwgMHhhZGUwLCAwLCB7MHgwOSwweDMwLDB4MDIsMHgyZSwweDA1LDB4YjAsMHg0NCwweDJlLDB4YzAsMHgwOSwweDM0LDB4ODIsMHhlYywweDAwLDB4YWIsMHgwNCB9LAorICAxNiwgMHhhZGYwLCAwLCB7MHgyMCwweGMwLDB4MDksMHgyMSwweGIyLDB4OGUsMHgwNCwweDkzLDB4YzAsMHgyNCwweGMwLDB4MGEsMHgxOCwweDA2LDB4NGMsMHgwMCB9LAorICAxNiwgMHhhZTAwLCAwLCB7MHg5MiwweDUwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweDcwLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhZTEwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwMCwweGI3LDB4ODAsMHg2MSwweGUwLDB4MGIsMHg3OCwweDBhLDB4NWUsMHgwMSwweGIxLDB4YTAsMHgyZCB9LAorICAxNiwgMHhhZTIwLCAwLCB7MHhlMCwweDBhLDB4NzgsMHgwMiwweDVlLDB4MDAsMHgwNywweDkwLDB4MjEsMHhlMCwweDE4LDB4YzgsMHgwMiwweDFlLDB4MDAsMHhiNyB9LAorICAxNiwgMHhhZTMwLCAwLCB7MHg4MCwweDJkLDB4ZTAsMHg4YSwweGQ4LDB4MDIsMHgzZSwweGMwLDB4ODUsMHg4MCwweDIxLDB4MjAsMHgxOSwweDc4LDB4MjIsMHgwMCB9LAorICAxNiwgMHhhZTQwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHhmMywweDk0LDB4MjAsMHgxMCB9LAorICAxNiwgMHhhZTUwLCAwLCB7MHg0YiwweDMwLDB4MDcsMHgwYywweDAwLDB4ZjMsMHgwMCwweDNlLDB4YzgsMHgwZiwweDMwLDB4MDMsMHhjYywweDAwLDB4MjMsMHgxMCB9LAorICAxNiwgMHhhZTYwLCAwLCB7MHgwMCwweGNiLDB4MDUsMHgyMCwweDAyLDB4OGMsMHg2MCwweDkzLDB4MGEsMHgyZSwweGM0LDB4MGEsMHgwMSwweDA3LDB4NGMsMHg4MCB9LAorICAxNiwgMHhhZTcwLCAwLCB7MHhkMiwweDAxLDB4MzAsMHhjMCwweDJjLDB4MzAsMHgwYiwweDVhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhZTgwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwMCwweGZmLDB4MDEsMHgwZiwweDQwLDB4MGYsMHhmMCwweDEzLDB4YmMsMHgwMCwweGVmLDB4MjYsMHg3MyB9LAorICAxNiwgMHhhZTkwLCAwLCB7MHhjMiwweDBjLDB4YjAsMHg4MywweGJjLDB4NDAsMHhmZiwweDE4LDB4M2QsMHhjMCwweDRhLDB4YzEsMHgwMywweGZjLDB4MDAsMHhmYiB9LAorICAxNiwgMHhhZWEwLCAwLCB7MHgxMiwweDNmLDB4YzQsMHg0ZCwweGMxLDB4MGIsMHhmYywweDgxLDB4ZmQsMHgwMCwweDNmLDB4MjAsMHgwZiwweGYwLDB4MDMsMHhkMCB9LAorICAxNiwgMHhhZWIwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVjLDB4MjAsMHhjYiwweDQ4LDB4M2UsMHgwMCB9LAorICAxNiwgMHhhZWMwLCAwLCB7MHgwYywweGIwLDB4MDMsMHgyZCwweDIwLDB4ZTksMHg4MCwweGZhLDB4YzgsMHgwZCwweGIwLDB4MDMsMHhlZSwweDAwLDB4ZGIsMHgyNCB9LAorICAxNiwgMHhhZWQwLCAwLCB7MHg3NiwweGYzLDB4OGUsMHg4MCwweDMzLDB4ZWMsMHg0NCwweGViLDB4MTAsMHgzZSwweGMwLDB4MGYsMHg5MCwweDAzLDB4ZTgsMHgwNCB9LAorICAxNiwgMHhhZWUwLCAwLCB7MHhkYywweDAwLDB4YjMsMHg2MSwweDBjLDB4YjAsMHgwMywweDJhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhZWYwLCAwLCB7MHg0OCwweDExLDB4OGQsMHgwMCwweDg3LDB4MjAsMHgyZiwweDAxLDB4MjgsMHg3MCwweDAyLDB4MGMsMHg4NCwweDhkLDB4MDQsMHgzMSB9LAorICAxNiwgMHhhZjAwLCAwLCB7MHhjYywweGM5LDB4NzIsMHgwMiwweGRkLDB4MDAsMHgzNywweDMzLDB4MjEsMHhkOCwweDA4LDB4NDAsMHgwMiwweGRjLDB4MDAsMHhiNyB9LAorICAxNiwgMHhhZjEwLCAwLCB7MHgyMCwweDNkLDB4YzAsMHgwOSwweDUwLDB4MjIsMHhmMCwweDAwLDB4OTcsMHgwMCwweDIxLDB4ODAsMHgwYSwweGZjLDB4MDIsMHg5MiB9LAorICAxNiwgMHhhZjIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDFlLDB4ODIsMHg4NywweGIwLDB4MmQsMHgyMCB9LAorICAxNiwgMHhhZjMwLCAwLCB7MHgwOCwweDM5LDB4MDIsMHgxZSwweDQxLDB4YTcsMHg4MCwweDI0LDB4ZTAsMHgwOSwweDdhLDB4MzIsMHg4ZSwweDgyLDB4MDcsMHhhMCB9LAorICAxNiwgMHhhZjQwLCAwLCB7MHgyNSwweGUwLDB4OGIsMHg0OCwweDAyLDB4MWUsMHgwMCwweGE3LDB4ZTEsMHgyZCwweGUwLDB4NGIsMHg1OCwweDAwLDB4ZGEsMHgwMCB9LAorICAxNiwgMHhhZjUwLCAwLCB7MHhhMCwweDgwLDB4MjQsMHg2MCwweDA4LDB4N2EsMHgwMiwweDMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhZjYwLCAwLCB7MHg0OCwweDE0LDB4Y2MsMHgwMCwweDgzLDB4MDAsMHgyYywweDAwLDB4MDgsMHgzMCwweDAyLDB4OGMsMHgwMCwweDkzLDB4MDAsMHgyMiB9LAorICAxNiwgMHhhZjcwLCAwLCB7MHhjMSwweDA5LDB4MzAsMHg0MiwweGNjLDB4MDAsMHg4MywweDAwLDB4NjAsMHhjMCwweDA4LDB4MWEsMHgwMiwweGNlLDB4MDQsMHhiMyB9LAorICAxNiwgMHhhZjgwLCAwLCB7MHhlMCwweDI4LDB4YTAsMHgwOSwweDFjLDB4ODIsMHg0YiwweDA4LDB4YTMsMHg4MCwweDI0LDB4YTAsMHgyYSwweDMwLDB4MDIsMHg5YSB9LAorICAxNiwgMHhhZjkwLCAwLCB7MHgwNCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MDAsMHhjYSwweDAwLDB4MmYsMHg4OCB9LAorICAxNiwgMHhhZmEwLCAwLCB7MHgwYywweGEwLDB4MTMsMHgyOCwweDAwLDB4ZWUsMHgwMCwweDJlLDB4ODAsMHgyZCwweGEwLDB4MDMsMHhlOCwweDAwLDB4ZGEsMHgwMCB9LAorICAxNiwgMHhhZmIwLCAwLCB7MHg3NiwweDgwLDB4MGUsMHhlOCwweDAzLDB4YmIsMHg4MCwweGVlLDB4NDAsMHgyZiwweGEyLDB4OGYsMHhlNiwweDAzLDB4ZWIsMHg4NiB9LAorICAxNiwgMHhhZmMwLCAwLCB7MHhmYSwweDgwLDB4MzcsMHg4MiwweDBjLDB4MjAsMHgwNywweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhZmQwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4NDAsMHgxZSwweDAwLDB4MGYsMHg4MCwweDBiLDB4NjEsMHgwMCwweGU4LDB4YzAsMHgzYSB9LAorICAxNiwgMHhhZmUwLCAwLCB7MHgwMCwweDBlLDB4ODAsMHgwMywweGUwLDB4MDEsMHhmOCwweDAwLDB4N2UsMHgxMCwweDFlLDB4ODEsMHgwMywweGUwLDB4MDgsMHhmOCB9LAorICAxNiwgMHhhZmYwLCAwLCB7MHgwMCwweDNlLDB4MDAsMHgwZCwweDgwLDB4MDMsMHhjMCwweDI4LDB4ZGMsMHg1MCwweDNiLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiB9LAorICAxNiwgMHhiMDAwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGM0LDB4MDIsMHhjOSwweDAwLDB4M2UsMHg0MiB9LAorICAxNiwgMHhiMDEwLCAwLCB7MHgwZiwweDEwLDB4MDMsMHhhNiwweDAwLDB4YzksMHgwMSwweDNhLDB4NDAsMHgwZSwweDk0LDB4MDEsMHhlNCwweDEwLDB4ZjEsMHgwNCB9LAorICAxNiwgMHhiMDIwLCAwLCB7MHgzMiwweDQwLDB4MGYsMHg5YSwweDIzLDB4MjAsMHg2MCwweGY4LDB4MDQsMHgwYSwweDQyLDB4MGUsMHg5MCwweDEzLDB4MjQsMHgwMCB9LAorICAxNiwgMHhiMDMwLCAwLCB7MHhjMSwweDAwLDB4MzIsMHg0MCwweDBmLDB4OTAsMHgwMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMDQwLCAwLCB7MHg4MCwweDA0LDB4NjcsMHgwOCwweGE5LDB4MDAsMHg2ZSwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjcsMHg4MiwweDg5LDB4MDAsMHgyNiB9LAorICAxNiwgMHhiMDUwLCAwLCB7MHg0MCwweDA4LDB4OWMsMHgwMywweGE0LDB4MTAsMHhiOSwweDAwLDB4MzYsMHg0MCwweDliLDB4MWMsMHgxYSwweDIzLDB4MDQsMHhiOCB9LAorICAxNiwgMHhiMDYwLCAwLCB7MHgwMCwweDNhLDB4NDAsMHgwZSwweDEwLDB4MDIsMHgyNCwweDAyLDB4YzksMHhhMCwweGEyLDB4NDAsMHgwYiwweDkwLDB4MGEsMHgyMCB9LAorICAxNiwgMHhiMDcwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI1LDB4ODAsMHg4OSwweDA0LDB4MmMsMHg0MCB9LAorICAxNiwgMHhiMDgwLCAwLCB7MHgwOCwweDkwLDB4MDIsMHg4NCwweDgxLDB4OTksMHg0MCwweDJlLDB4NDAsMHgxYSwweDkwLDB4MDYsMHhlNCwweDAxLDB4YjksMHgwMCB9LAorICAxNiwgMHhiMDkwLCAwLCB7MHhhNiwweDQxLDB4MWIsMHg5MCwweDgyLDB4MjEsMHgwMCwweGI4LDB4MTAsMHgyZSwweDQwLDB4MGEsMHg5MiwweDBhLDB4YTQsMHgwMSB9LAorICAxNiwgMHhiMGEwLCAwLCB7MHg4ZiwweDIyLDB4MjMsMHg0MCwweDBiLDB4OTAsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMGIwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweGEzLDB4MjAsMHgyYywweDQxLDB4MDksMHgxMiwweDAyLDB4MDQsMHg4MCwweDgxLDB4MjAsMHgyNCB9LAorICAxNiwgMHhiMGMwLCAwLCB7MHg0OCwweDBhLDB4MzYsMHgwMiwweGM0LDB4ODAsMHhiMSwweDIwLDB4MDQsMHhjOCwweDRiLDB4MTQsMHgwMiwweDA1LDB4MDAsMHhiMSB9LAorICAxNiwgMHhiMGQwLCAwLCB7MHgwNSwweDI4LDB4NTAsMHgwYSwweDkwLDB4MDIsMHgwNSwweDAyLDB4ODUsMHgwMCwweDIxLDB4NDAsMHgwYiwweDEyLDB4MDIsMHgwMiB9LAorICAxNiwgMHhiMGUwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHhjOCwweDAwLDB4NmUsMHgxNCB9LAorICAxNiwgMHhiMGYwLCAwLCB7MHgyYywweDg1LDB4MDIsMHhhMSwweDQwLDB4YzgsMHg1MCwweDNhLDB4MTQsMHgwZSwweDgwLDB4MDIsMHhlMSwweDQwLDB4YjAsMHg1MCB9LAorICAxNiwgMHhiMTAwLCAwLCB7MHgzMiwweDAwLDB4MGIsMHg4MCwweDAzLDB4MjAsMHgwMCwweGZhLDB4MDAsMHgzZSwweDAwLDB4MGUsMHg4MCwweDAzLDB4YTAsMHgwMiB9LAorICAxNiwgMHhiMTEwLCAwLCB7MHhjOCwweDAwLDB4MTMsMHgwMCwweDBmLDB4ODIsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMTIwLCAwLCB7MHg5OCwweDFkLDB4ZTQsMHg0OCwweGY5LDB4MTQsMHgzZiwweDQwLDB4MGMsMHg5MSwweDAzLDB4ZTQsMHg0MiwweGZkLDB4MTAsMHgzNiB9LAorICAxNiwgMHhiMTMwLCAwLCB7MHg0NCwweDBkLDB4OTEsMHgyMywweGE0LDB4NDgsMHhmOSwweDExLDB4MzgsMHg0NCwweDBmLDB4ZDAsMHgwMywweGU1LDB4MTQsMHgzOSB9LAorICAxNiwgMHhiMTQwLCAwLCB7MHg0MiwweDdiLDB4NDAsMHg4ZSwweGQwLDB4MDEsMHhmNSwweDAwLDB4YTksMHg0MCwweDNlLDB4NTAsMHgwNywweDk2LDB4ODMsMHhlNiB9LAorICAxNiwgMHhiMTUwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMSwweGY2LDB4ODAsMHhkZCwweGFlLDB4M2EsMHg1MCB9LAorICAxNiwgMHhiMTYwLCAwLCB7MHgwZCwweDlhLDB4MGIsMHg3NiwweDgwLDB4Y2YsMHg4OCwweDMyLDB4NzAsMHgyZCwweGRhLDB4MDMsMHhhNywweDAxLDB4ZTksMHg5MiB9LAorICAxNiwgMHhiMTcwLCAwLCB7MHgzNywweDY4LDB4MGQsMHg5NCwweDAzLDB4ZTcsMHgwMCwweGVkLDB4YTAsMHgzYSwweDUwLDB4MGYsMHhkMCwweDAzLDB4ZTcsMHgwMiB9LAorICAxNiwgMHhiMTgwLCAwLCB7MHhjZCwweDgwLDB4MzMsMHg2OCwweDBjLDB4ZDgsMHg4MywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMTkwLCAwLCB7MHgzOCwweDEwLDB4ZTEsMHgwMCwweDg4LDB4NDAsMHgyMCwweDIwLDB4MGMsMHg4YywweDAyLDB4MjMsMHgwMCwweDg4LDB4ZTAsMHgyMiB9LAorICAxNiwgMHhiMWEwLCAwLCB7MHgzMCwweDA4LDB4ODQsMHgwMiwweGUzLDB4MDAsMHhiOCwweGUwLDB4MjIsMHgxNCwweDhkLDB4ODgsMHgwMiwweGUzLDB4MDAsMHhiOCB9LAorICAxNiwgMHhiMWIwLCAwLCB7MHg1MCwweDJlLDB4YTgsMHg4YiwweDgwLDB4MjIsMHhlMywweDQ4LDB4ODgsMHg1MCwweDIyLDB4MDAsMHgwOCwweDhjLDB4MDIsMHgwZSB9LAorICAxNiwgMHhiMWMwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4NDAsMHg5MSwweDAwLDB4MmEsMHg0OCB9LAorICAxNiwgMHhiMWQwLCAwLCB7MHgwOSwweDE0LDB4ODIsMHgwNSwweDIwLDB4ODEsMHgwOCwweDIwLDB4NTgsMHgwOSwweDExLDB4MDIsMHg4NSwweDg4LDB4YjEsMHg0MCB9LAorICAxNiwgMHhiMWUwLCAwLCB7MHhhMCwweDQwLDB4MDgsMHgxMiwweDAyLDB4YzUsMHg4MCwweGExLDB4MDAsMHgyOCwweDQwLDB4MGIsMHgxOCwweDAyLDB4YzQsMHg4NCB9LAorICAxNiwgMHhiMWYwLCAwLCB7MHhhMSwweDAwLDB4MjQsMHg1MCwweDA4LDB4MTAsMHg5MiwweDAzLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMjAwLCAwLCB7MHgxOCwweDE1LDB4YWMsMHgxMCwweDliLDB4MDAsMHgyMiwweDQwLDB4MDgsMHg5MCwweDAyLDB4MDQsMHgwNiwweDg5LDB4MDQsMHgyMCB9LAorICAxNiwgMHhiMjEwLCAwLCB7MHg0MCwweDA5LDB4OTAsMHgwMiwweGU0LDB4MDEsMHhiOSwweDAyLDB4MjIsMHg0MSwweDg5LDB4YTAsMHg4MiwweGUwLDB4YTAsMHhiOSB9LAorICAxNiwgMHhiMjIwLCAwLCB7MHgyOCwweDJlLDB4NDQsMHgwYiwweGIwLDB4MDIsMHhlNCwweDAyLDB4YjksMHgwMCwweDI2LDB4NDAsMHgyOCwweDEwLDB4MDIsMHgwNiB9LAorICAxNiwgMHhiMjMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU0LDB4MDAsMHhkOSwweDAwLDB4MzgsMHg0MCB9LAorICAxNiwgMHhiMjQwLCAwLCB7MHgwZCwweDkwLDB4MDMsMHgyNCwweDAwLDB4YzksMHhhMCwweGEyLDB4NDAsMHg4ZCwweDkwLDB4MDMsMHhhNCwweDAwLDB4ZjksMHgwMCB9LAorICAxNiwgMHhiMjUwLCAwLCB7MHgzNiwweDQwLDB4MGMsMHg4NCwweDEzLDB4ZTIsMHgwMCwweGU5LDB4MDAsMHgzYSwweDUwLDB4MGYsMHg5YywweDAyLDB4ZTYsMHg4NCB9LAorICAxNiwgMHhiMjYwLCAwLCB7MHhlOSwweDAwLDB4YjYsMHg0MCwweDBjLDB4OTAsMHgwMywweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMjcwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwMCwweGUxLDB4MDAsMHgzZSwweDY4LDB4MGUsMHgxMCwweDAzLDB4YTQsMHgwMCwweGYxLDB4MjgsMHgzYSB9LAorICAxNiwgMHhiMjgwLCAwLCB7MHg0MCwweDBlLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MiwweDBmLDB4ODAsMHgyMywweGUyLDB4MDAsMHhmOSB9LAorICAxNiwgMHhiMjkwLCAwLCB7MHgwMCwweDNlLDB4NDAsMHgwZiwweDkxLDB4MjMsMHhlNCwweDQwLDB4YzEsMHgwMCwweDNhLDB4NDAsMHgwZiwweDkwLDB4MGIsMHhjYSB9LAorICAxNiwgMHhiMmEwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweDgwLDB4MDAsMHhjOCwweDAwLDB4MzIsMHgwMCB9LAorICAxNiwgMHhiMmIwLCAwLCB7MHgwYywweDgwLDB4MDMsMHhhMCwweDIwLDB4YzgsMHg0MCwweDNlLDB4MDAsMHgwZSwweDgxLDB4NjMsMHg2MCwweDAwLDB4ZjAsMHgwNCB9LAorICAxNiwgMHhiMmMwLCAwLCB7MHgzYywweDAxLDB4MGMsMHg4NCwweDAzLDB4ZTAsMHgwMCwweGM4LDB4MDAsMHgzZSwweDAwLDB4MGUsMHg4MCwweDAzLDB4YzEsMHgwMCB9LAorICAxNiwgMHhiMmQwLCAwLCB7MHhkOCwweDEwLDB4MzIsMHgwMCwweDBjLDB4ODAsMHgyMywweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMmUwLCAwLCB7MHgyOCwweDA1LDB4MzgsMHg2MCwweDhlLDB4MDAsMHgyMiwweDgwLDB4MGEsMHhhMCwweDAyLDB4MzgsMHg4MCwweGJlLDB4MDAsMHgzYSB9LAorICAxNiwgMHhiMmYwLCAwLCB7MHg4MCwweDA4LDB4ZTAsMHgwMiwweDI4LDB4MDAsMHhiYSwweDAwLDB4MjMsMHg5OCwweDE4LDB4ZWMsMHgwMiwweGY4LDB4MjAsMHhhZSB9LAorICAxNiwgMHhiMzAwLCAwLCB7MHgwMCwweDIyLDB4ODAsMHgwYiwweGU0LDB4ODIsMHhlOCwweDAyLDB4Y2UsMHg0NCwweDI4LDB4ODAsMHgwZCwweGEwLDB4MGEsMHgwYSB9LAorICAxNiwgMHhiMzEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDQwLDB4MDAsMHg4MiwweDA0LDB4YTAsMHhjMCB9LAorICAxNiwgMHhiMzIwLCAwLCB7MHgwOSwweDMwLDB4MDIsMHg4ZSwweDA0LDB4ODMsMHg1MCwweDZjLDB4YzAsMHgwYSwweDMwLDB4ODYsMHgwYywweDAwLDB4YjMsMHgwMCB9LAorICAxNiwgMHhiMzMwLCAwLCB7MHgyOCwweDMwLDB4MGEsMHgzNiwweDEyLDB4Y2MsMHg4MCwweDgxLDB4MDAsMHgyNCwweGMwLDB4MGIsMHgzMiwweDA2LDB4Y2MsMHgwMCB9LAorICAxNiwgMHhiMzQwLCAwLCB7MHg4MCwweDg4LDB4NjQsMHg2MCwweDI4LDB4MTAsMHgwMiwweDAyLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMzUwLCAwLCB7MHhhMCwweDAxLDB4MTAsMHgxMiwweDg0LDB4NDAsMHgyMSwweGM4LDB4MGEsMHg3MiwweDAyLDB4MTAsMHgwMCwweGI3LDB4MDAsMHgyZCB9LAorICAxNiwgMHhiMzYwLCAwLCB7MHhjYywweDA4LDB4MzgsMHgxMiwweDFjLDB4MDAsMHhiMywweDMwLDB4MjAsMHgwMCwweDA4LDB4NzEsMHg4MiwweGZlLDB4MDAsMHhhNCB9LAorICAxNiwgMHhiMzcwLCAwLCB7MHg4MCwweDIxLDB4YzgsMHgwYiwweDcwLDB4MDIsMHhkYywweDAxLDB4ODcsMHgwMCwweDJjLDB4NDIsMHgwOSwweDUxLDB4MDIsMHgyMCB9LAorICAxNiwgMHhiMzgwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDEyLDB4MDAsMHhjMiwweDgwLDB4MzEsMHhmOCB9LAorICAxNiwgMHhiMzkwLCAwLCB7MHg0YywweGZjLDB4MTMsMHg5MiwweDA5LDB4YzcsMHg4MCwweDNjLDB4ZWQsMHgxZSwweDc4LDB4MjcsMHgxZSwweDAwLDB4ZjcsMHg4YyB9LAorICAxNiwgMHhiM2EwLCAwLCB7MHg3OSwweDIwLDB4MDgsMHg3YSwweDAzLDB4ZGUsMHg4MSwweDg0LDB4ODAsMHgzZCwweGUwLDB4MGUsMHg3OCwweDAzLDB4ZmUsMHgyMCB9LAorICAxNiwgMHhiM2IwLCAwLCB7MHhjNSwweDgxLDB4MzUsMHg2MCwweDJjLDB4NTgsMHgwMywweDJhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiM2MwLCAwLCB7MHgwOCwweDFkLDB4ODAsMHgwMCwweGY4LDB4MDQsMHgzZSwweGQwLDB4MGYsMHhiMCwweDEzLDB4ZTAsMHgwMCwweGZiLDB4MDIsMHgzYSB9LAorICAxNiwgMHhiM2QwLCAwLCB7MHhkMCwweDBmLDB4YTAsMHgwYiwweGFjLDB4NDAsMHhmYiwweDAwLDB4M2EsMHgwMCwweDJmLDB4YjAsMHgwMywweGNjLDB4MDAsMHhmMCB9LAorICAxNiwgMHhiM2UwLCAwLCB7MHgwMCwweDNhLDB4YzQsMHgwZiwweGIwLDB4MDMsMHhmYywweDQxLDB4ZjMsMHgwMCwweDNhLDB4NDAsMHgwZiwweDUwLDB4OTMsMHhjMiB9LAorICAxNiwgMHhiM2YwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGY2LDB4MDAsMHhjYywweDgxLDB4M2YsMHhmYyB9LAorICAxNiwgMHhiNDAwLCAwLCB7MHgxYywweGY4LDB4MDMsMHg3NiwweDQwLDB4ZWYsMHg5MiwweDNmLDB4ZTQsMHg4YywweGY4LDB4MDMsMHhiZiwweDEwLDB4ZmYsMHg4MCB9LAorICAxNiwgMHhiNDEwLCAwLCB7MHhiMywweDIwLDB4MGUsMHhmOSwweDEzLDB4ZmUsMHgyNCwweGZkLDB4OTQsMHgzNywweGUwLDB4MWMsMHhmOSwweDAzLDB4ZWUsMHgwMCB9LAorICAxNiwgMHhiNDIwLCAwLCB7MHhjZCwweDgwLDB4YjMsMHhlMCwweDBjLDB4NTgsMHgwMiwweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNDMwLCAwLCB7MHhhOCwweDExLDB4OTQsMHg0MCwweDgwLDB4MDAsMHgyZiwweGM0LDB4MDgsMHg3MiwweDAyLDB4ZGQsMHgwOCwweGQ3LDB4MDAsMHgyZCB9LAorICAxNiwgMHhiNDQwLCAwLCB7MHhjYywweDA4LDB4ZGUsMHgwMywweDVjLDB4MDAsMHhiNywweDA0LDB4MjEsMHg4MCwweGM4LDB4NzAsMHg4MywweGRjLDB4MDAsMHhiNCB9LAorICAxNiwgMHhiNDUwLCAwLCB7MHhhMCwweDJmLDB4YzAsMHgwYywweDcwLDB4MDIsMHhkZSwweDgwLDB4ODcsMHgwMCwweDIxLDB4YzIsMHgwYSwweDUxLDB4NDIsMHgyYSB9LAorICAxNiwgMHhiNDYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDkwLDB4MDAsMHg4NCwweDAwLDB4MmQsMHhjOCB9LAorICAxNiwgMHhiNDcwLCAwLCB7MHg0OCwweDcwLDB4MDIsMHg1NCwweDBjLDB4YTcsMHgwMCwweDJjLDB4YzAsMHg4OSwweDcyLDB4MDIsMHg1YywweDAwLDB4YjMsMHgxMCB9LAorICAxNiwgMHhiNDgwLCAwLCB7MHgyMCwweDAwLDB4MGEsMHg3MCwweDA2LDB4ZGMsMHgwMCwweGI0LDB4MjAsMHgyZCwweGMwLDB4MDgsMHg3MCwweDAyLDB4ZGMsMHg4MCB9LAorICAxNiwgMHhiNDkwLCAwLCB7MHg5MywweDAwLDB4MjAsMHhjMCwweDA4LDB4NTAsMHgwMiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNGEwLCAwLCB7MHgyMCwweDE0LDB4YzAsMHgwMCwweDgwLDB4MDAsMHgyZSwweGMwLDB4MDgsMHgzMCwweDAyLDB4YzQsMHgwOCwweGEyLDB4NDIsMHgyYyB9LAorICAxNiwgMHhiNGIwLCAwLCB7MHhjMSwweDA5LDB4MjAsMHgwMiwweDRjLDB4MDAsMHhiMywweDAwLDB4MjAsMHg4MCwweDA4LDB4M2MsMHgyMiwweDhjLDB4MjAsMHhiMCB9LAorICAxNiwgMHhiNGMwLCAwLCB7MHgwOCwweDJlLDB4ZTAsMHgwOCwweDM4LDB4MTAsMHhjZiwweDBhLDB4OTMsMHg0MCwweGEwLDB4ZjAsMHgwYSwweDEwLDB4MDIsMHgwOCB9LAorICAxNiwgMHhiNGQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGE4LDB4MDAsMHhjMSwweDAwLDB4M2YsMHhjMCB9LAorICAxNiwgMHhiNGUwLCAwLCB7MHgyYywweGYwLDB4MDMsMHg2OCwweDAwLDB4YWEsMHgwMCwweDNmLDB4YzAsMHgyZCwweDgwLDB4MDMsMHg3YywweDAwLDB4ZmYsMHgwMCB9LAorICAxNiwgMHhiNGYwLCAwLCB7MHgzMiwweDAwLDB4MGUsMHhiMCwweDEyLDB4ZWQsMHgyNCwweGZhLDB4MDgsMHgyNywweGM4LDB4MTAsMHhiOCwweGEyLDB4ZmYsMHg2MCB9LAorICAxNiwgMHhiNTAwLCAwLCB7MHg5OCwweGEwLDB4YTIsMHhlMCwweDBjLDB4NTAsMHgwMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNTEwLCAwLCB7MHg4MCwweDAwLDB4YzksMHgwNiwweGY4LDB4NDEsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4ZTksMHgxMCwweDVhLDB4MjAsMHgzZSB9LAorICAxNiwgMHhiNTIwLCAwLCB7MHhjMCwweDBlLDB4ODAsMHgwMywweGVjLDB4MDAsMHhmMywweDAwLDB4N2UsMHgwMSwweDBmLDB4YjAsMHg5MywweGVkLDB4MDAsMHhmOCB9LAorICAxNiwgMHhiNTMwLCAwLCB7MHg0MCwweDNlLDB4YzAsMHgwZSwweGIwLDB4MDMsMHhmYywweDAwLDB4ZTMsMHgwOCwweDNjLDB4YzIsMHgwZiwweGQwLDB4MTMsMHhlMCB9LAorICAxNiwgMHhiNTQwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGYzLDB4MDIsMHhjYywweDAwLDB4M2IsMHhjMiB9LAorICAxNiwgMHhiNTUwLCAwLCB7MHgwYywweGYwLDB4MjMsMHhhZSwweDQwLDB4ZGYsMHg4MSwweDM5LDB4YzAsMHgwNiwweGQwLDB4MDMsMHhmYywweDAwLDB4ZmYsMHgwNCB9LAorICAxNiwgMHhiNTYwLCAwLCB7MHgzMSwweDQxLDB4MGMsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGNjLDB4YTAsMHgzNywweGMyLDB4MGMsMHhmMCwweDAzLDB4N2MsMHgwNCB9LAorICAxNiwgMHhiNTcwLCAwLCB7MHhjZCwweDAwLDB4MzMsMHhmMCwweDBjLDB4ZDAsMHgwMywweDA4LDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNTgwLCAwLCB7MHg4MSwweDA0LDB4NjAsMHgwMCwweDg4LDB4ODAsMHgyMiwweGMwLDB4MGEsMHhiMCwweDAyLDB4ZTksMHgwMCwweGFiLDB4NDQsMHgyZSB9LAorICAxNiwgMHhiNTkwLCAwLCB7MHhjMCwweDA4LDB4ODgsMHgwMiwweGVjLDB4MDAsMHhiYiwweDAwLDB4YTIsMHg3MCwweDBhLDB4YjQsMHgwMiwweGNjLDB4MDAsMHhhMCB9LAorICAxNiwgMHhiNWEwLCAwLCB7MHgyMCwweDIyLDB4YzAsMHgwZiwweGJjLDB4MDIsMHhjYywweDBhLDB4OGIsMHg4MCwweGEyLDB4YzAsMHgwZCwweDkwLDB4MDIsMHgyMCB9LAorICAxNiwgMHhiNWIwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDIwLDB4MDAsMHg4OSwweDgwLDB4MmEsMHhjMCB9LAorICAxNiwgMHhiNWMwLCAwLCB7MHgwOCwweGIwLDB4MDIsMHhjYywweDA2LDB4ODgsMHg2MCwweDJlLDB4YzAsMHgwYSwweDk4LDB4MDYsMHhlYywweDAxLDB4YmIsMHgwMCB9LAorICAxNiwgMHhiNWQwLCAwLCB7MHgyMiwweDMxLDB4MDIsMHhiMiwweDAyLDB4ZWMsMHhhMCwweDhhLDB4MDAsMHgyNiwweGMwLDB4NDgsMHhhOCwweDAyLDB4ZWMsMHgwNCB9LAorICAxNiwgMHhiNWUwLCAwLCB7MHhhOSwweDgwLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweDIwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNWYwLCAwLCB7MHgwOCwweDA0LDB4MDAsMHgwMCwweDgwLDB4MDAsMHgyMCwweGMwLDB4MGEsMHgzMCwweDQyLDB4Y2MsMHgwMCwweDgwLDB4MDEsMHgyYyB9LAorICAxNiwgMHhiNjAwLCAwLCB7MHhjMCwweDFhLDB4MTIsMHgwMiwweGNjLDB4MDAsMHhiMywweDAwLDB4MjAsMHgwMCwweDRhLDB4MzAsMHgwMiwweGNjLDB4MDAsMHhhMCB9LAorICAxNiwgMHhiNjEwLCAwLCB7MHgwMCwweDA4LDB4YzAsMHgwYiwweDIwLDB4MDYsMHhlYywweGEwLDB4YTMsMHgwMCwweGEwLDB4NDAsMHgyOSwweDEwLDB4MDAsMHgwMiB9LAorICAxNiwgMHhiNjIwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDYwLDB4MDAsMHhjOCwweDUwLDB4M2IsMHhjMCB9LAorICAxNiwgMHhiNjMwLCAwLCB7MHgwYywweGIwLDB4MDMsMHhhYywweDAwLDB4YzksMHgwMCwweDNiLDB4YzAsMHgwZSwweDkyLDB4ODMsMHhmYywweDAwLDB4YmYsMHgwMCB9LAorICAxNiwgMHhiNjQwLCAwLCB7MHgxMiwweDAwLDB4MGMsMHhiMCwweDAzLDB4ZWMsMHgwMCwweDg4LDB4MjYsMHgxNiwweGMwLDB4MGMsMHg4MCwweDE3LDB4NWMsMHg4MCB9LAorICAxNiwgMHhiNjUwLCAwLCB7MHhlOSwweDAxLDB4MzIsMHg0MCwweDJjLDB4ZDAsMHgwMywweDAwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNjYwLCAwLCB7MHhhMCwweDFkLDB4ZDAsMHgwMCwweGZjLDB4MjAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZjLDB4MDAsMHgzZiB9LAorICAxNiwgMHhiNjcwLCAwLCB7MHhjMCwweDBkLDB4ODAsMHgwMywweGZjLDB4MDgsMHhmZiwweDAwLDB4M2YsMHgwMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MTAsMHhmOCB9LAorICAxNiwgMHhiNjgwLCAwLCB7MHg0MCwweDM3LDB4YzAsMHgwZSwweGUwLDB4MjEsMHhmYywweDA4LDB4ZGYsMHgwMCwweDNmLDB4NDAsMHgwZiwweGQwLDB4MDMsMHhlMCB9LAorICAxNiwgMHhiNjkwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZjLDB4YzAsMHhmZiwweDIxLDB4NzEsMHgyNCB9LAorICAxNiwgMHhiNmEwLCAwLCB7MHgwZiwweGYxLDB4ODMsMHhmMiwweDQwLDB4ZmYsMHgwMCwweDM3LDB4YzQsMHg5ZiwweGYyLDB4NDcsMHgzZCwweDA0LDB4YzcsMHgyMCB9LAorICAxNiwgMHhiNmIwLCAwLCB7MHgzMywweGMwLDB4MGMsMHg3OCwweDIzLDB4ZmUsMHg0MCwweGU4LDB4MTAsMHgyNywweGM0LDB4MGYsMHhmMiwweDEzLDB4M2MsMHg4NCB9LAorICAxNiwgMHhiNmMwLCAwLCB7MHhjNCwweDgxLDB4MzMsMHgyMCwweDRjLDB4ZjAsMHgyMywweDcwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNmQwLCAwLCB7MHg4MCwweDEwLDB4ZWQsMHg0MCwweGJmLDB4NTQsMHg2MiwweGM4LDB4MGIsMHhmNiwweDAyLDB4ZTAsMHgwMCwweGJiLDB4ZDAsMHgyMiB9LAorICAxNiwgMHhiNmUwLCAwLCB7MHhmMCwweDFmLDB4ZjksMHgxMiwweDNkLDB4ODAsMHg5ZiwweDgxLDB4MmIsMHhlMCwweDBhLDB4YjgsMHgxMiwweGU4LDB4MDAsMHg4ZiB9LAorICAxNiwgMHhiNmYwLCAwLCB7MHgwNCwweDIyLDB4ZDAsMHgwOCwweGIzLDB4OGEsMHhiZiwweDQyLDB4OGIsMHg4MiwweDIyLDB4ZTAsMHgyOCwweDhjLDB4MDIsMHgyMCB9LAorICAxNiwgMHhiNzAwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4MDAsMHhiMywweDI4LDB4MjgsMHgwOCB9LAorICAxNiwgMHhiNzEwLCAwLCB7MHgwYiwweDMwLDB4MDYsMHg4MCwweDgwLDB4YjMsMHgwMiwweDI0LDB4ZDEsMHgwYiwweDMwLDB4MDIsMHg4ZCwweDgwLDB4OTMsMHgxMCB9LAorICAxNiwgMHhiNzIwLCAwLCB7MHgyMCwweGNlLDB4OGIsMHgzMCwweDAyLDB4Y2MsMHg4NCwweGExLDB4MjEsMHgyYywweGNjLDB4MGEsMHgzMCwweDBhLDB4NGMsMHgwMCB9LAorICAxNiwgMHhiNzMwLCAwLCB7MHg5MywweDAwLDB4MjgsMHhjMCwweDA4LDB4M2MsMHgwMiwweDIyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNzQwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHgxMCwweGJiLDB4MDIsMHg2YSwweGUwLDB4MGIsMHhiMCwweDAyLDB4ZTEsMHgwOCwweGJiLDB4MDQsMHgyYSB9LAorICAxNiwgMHhiNzUwLCAwLCB7MHhjMCwweDBhLDB4YjAsMHgxMiwweDhjLDB4MDAsMHg5YiwweDAwLDB4MmEsMHhjMCwweDBiLDB4YjEsMHgwNiwweGM4LDB4ODAsMHg4YiB9LAorICAxNiwgMHhiNzYwLCAwLCB7MHg4MiwweDZhLDB4YzEsMHgwYSwweDMwLDB4MDIsMHhhYywweDE4LDB4ODgsMHgxMCwweDJhLDB4NDgsMHgwOCwweDgwLDB4MDIsMHgzMCB9LAorICAxNiwgMHhiNzcwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGVjLDB4MDAsMHhmYiwweDAwLDB4YWEsMHgzMCB9LAorICAxNiwgMHhiNzgwLCAwLCB7MHgwZiwweGIwLDB4MDMsMHhhOCwweDAwLDB4ZjMsMHgwMSwweGI2LDB4YzEsMHgwYiwweGIwLDB4MDIsMHhhYywweDA4LDB4NGIsMHgwMCB9LAorICAxNiwgMHhiNzkwLCAwLCB7MHhiMiwweGMwLDB4MGYsMHhiOCwweDAyLDB4ZWMsMHgxMCwweGE5LDB4ODEsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4MGMsMHgwMCB9LAorICAxNiwgMHhiN2EwLCAwLCB7MHhjYiwweGEwLDB4MTgsMHhkMCwweDBjLDB4YjAsMHgwMywweDEwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiN2IwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwOCwweGY3LDB4MDAsMHgzNywweDAwLDB4MGYsMHhmMCwweDAzLDB4ZmQsMHgwMCwweGZmLDB4MDAsMHgzNyB9LAorICAxNiwgMHhiN2MwLCAwLCB7MHhjMCwweDBmLDB4YjAsMHgwNywweDdjLDB4MDAsMHhlNywweDAwLDB4M2UsMHhjMCwweDBhLDB4ZjAsMHgwMywweGZlLDB4MDAsMHhmNyB9LAorICAxNiwgMHhiN2QwLCAwLCB7MHgwMCwweDM2LDB4YzAsMHgwYywweGYwLDB4MDMsMHhmYywweDAwLDB4ZmYsMHg4MCwweDM3LDB4ZTAsMHgwZiwweGEwLDB4MDMsMHhiOCB9LAorICAxNiwgMHhiN2UwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDAsMHhkYiwweDAwLDB4MzYsMHgwMCB9LAorICAxNiwgMHhiN2YwLCAwLCB7MHgwZSwweGIwLDB4MDMsMHg2OSwweDAwLDB4ZGIsMHgwOSwweDNhLDB4YzAsMHgxZiwweDMwLDB4MjMsMHhlYywweDA4LDB4Y2IsMHgyMCB9LAorICAxNiwgMHhiODAwLCAwLCB7MHgzNCwweGMwLDB4MmYsMHhiMCwweDAzLDB4ZWMsMHg0MCwweGViLDB4NDgsMHgzZSwweGM0LDB4NGQsMHhiMCwweDhiLDB4NmMsMHgwMCB9LAorICAxNiwgMHhiODEwLCAwLCB7MHhjYiwweDAwLDB4MzIsMHg5MCwweDBmLDB4MzAsMHgwMywweDkwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiODIwLCAwLCB7MHhjOCwweDA1LDB4M2MsMHgwMCwweDhmLDB4MDAsMHgyMiwweDAwLDB4NDgsMHhmMCwweDIyLDB4MmMsMHgwMCwweDhmLDB4MDAsMHgyMyB9LAorICAxNiwgMHhiODMwLCAwLCB7MHhlMCwweDhiLDB4ZjUsMHgxMCwweDNjLDB4MDAsMHg4ZiwweDgwLDB4MjMsMHhmMCwweDgwLDB4OTgsMHgwMywweDJkLDB4NDQsMHhkYiB9LAorICAxNiwgMHhiODQwLCAwLCB7MHgwMCwweDIzLDB4ZDQsMHgwOCwweGY4LDB4MDIsMHgzYywweDAwLDB4ODMsMHgwMCwweDIyLDB4YzAsMHgwYiwweGE0LDB4ODIsMHgzMiB9LAorICAxNiwgMHhiODUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MDAsMHg5MywweDAwLDB4MjQsMHgwMCB9LAorICAxNiwgMHhiODYwLCAwLCB7MHgwYiwweDMwLDB4MDIsMHg4NCwweDAwLDB4YjMsMHgwMSwweDI4LDB4ZjYsMHgwOSwweDM0LDB4MzIsMHg4YywweDAxLDB4YjMsMHhkMCB9LAorICAxNiwgMHhiODcwLCAwLCB7MHgyNCwweGU4LDB4MGEsMHgzMSwweDBhLDB4ODYsMHgwMCwweDgzLDB4MDAsMHgyYSwweGUwLDB4MDAsMHgzMCwweDAyLDB4OGMsMHgwMCB9LAorICAxNiwgMHhiODgwLCAwLCB7MHg4MywweDAwLDB4MjgsMHhjMCwweDg5LDB4MzgsMHhhMiwweDc4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiODkwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwMCwweDk3LDB4OTQsMHgyMywweGUwLDB4MDksMHgzOCwweDAyLDB4MzIsMHgwMCwweDk3LDB4YTEsMHgyMSB9LAorICAxNiwgMHhiOGEwLCAwLCB7MHhlNCwweDBiLDB4NzgsMHgwMiwweDFlLDB4NDAsMHhiNywweGEwLDB4MjUsMHhlYywweDA4LDB4ZmMsMHgwMiwweDNhLDB4MDAsMHg5MyB9LAorICAxNiwgMHhiOGIwLCAwLCB7MHhiOCwweDIxLDB4ZTAsMHgwOCwweDc4LDB4ODIsMHg5ZSwweDQwLDB4ODcsMHhjMCwweDI5LDB4YTAsMHgwYiwweDU4LDB4MDIsMHg0OCB9LAorICAxNiwgMHhiOGMwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDJjLDB4MDAsMHhkYiwweDAwLDB4MzQsMHgyMCB9LAorICAxNiwgMHhiOGQwLCAwLCB7MHgwZiwweDNhLDB4MDMsMHg4ZSwweDAwLDB4ZjMsMHhiMCwweDI4LDB4YzQsMHgwYiwweDNhLDB4MDMsMHhhZSwweDQwLDB4ZjMsMHhhMCB9LAorICAxNiwgMHhiOGUwLCAwLCB7MHgzNCwweGVlLDB4MGYsMHgzMCwweDIzLDB4ODQsMHgwMCwweGUzLDB4ZjAsMHgzOCwweGMwLDB4MGMsMHhiMCwweDBiLDB4OGUsMHg0MiB9LAorICAxNiwgMHhiOGYwLCAwLCB7MHhjMywweDAwLDB4MzgsMHhjMCwweDBmLDB4MzAsMHg2MywweGQyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiOTAwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwMCwweGViLDB4NDIsMHgzYSwweGM0LDB4MWUsMHhiMSwweDA3LDB4ODgsMHhkMSwweGUzLDB4MDAsMHgzZiB9LAorICAxNiwgMHhiOTEwLCAwLCB7MHhjNSwweDhmLDB4ZjEsMHg2MywweGFjLDB4MTAsMHhjYiwweDUwLDB4M2IsMHhjMywweDBmLDB4ZDEsMHgwMywweGM4LDB4MDAsMHhiYiB9LAorICAxNiwgMHhiOTIwLCAwLCB7MHgyMCwweDNiLDB4YzAsMHgyZSwweGYxLDB4MDMsMHgxYywweDAwLDB4ZmYsMHgwMCwweDM3LDB4YzAsMHg0ZiwweGQxLDB4MDMsMHg5MCB9LAorICAxNiwgMHhiOTMwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVjLDB4NDAsMHhmYiwweDQ0LDB4YjIsMHhjMCB9LAorICAxNiwgMHhiOTQwLCAwLCB7MHg0ZiwweGIzLDB4NDMsMHgyNCwweDAwLDB4ZGIsMHgxMCwweDM2LDB4YzAsMHg0YywweGJlLDB4MjIsMHg2ZCwweDIwLDB4Y2IsMHg1MCB9LAorICAxNiwgMHhiOTUwLCAwLCB7MHgzZSwweGM5LDB4NGMsMHhiMCwweDEzLDB4MjQsMHgwMCwweGNmLDB4MjAsMHgzMywweGMwLDB4M2QsMHhmMCwweDIzLDB4MmMsMHhjMCB9LAorICAxNiwgMHhiOTYwLCAwLCB7MHhkOCwweDAwLDB4M2UsMHg0MCwweDhmLDB4MzAsMHgwMywweDJhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiOTcwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgwNCwweGI3LDB4NjAsMHgyMSwweGMxLDB4OGIsMHhmMCwweGEyLDB4MTQsMHgxMCwweDg3LDB4MDAsMHgwZiB9LAorICAxNiwgMHhiOTgwLCAwLCB7MHhjOCwweDBkLDB4NzEsMHgwYSwweDFkLDB4MDAsMHg4NywweDAwLDB4MmMsMHhjYywweDQ4LDB4NzAsMHgyYSwweDljLDB4MDAsMHg4NyB9LAorICAxNiwgMHhiOTkwLCAwLCB7MHgwYywweDIxLDB4YzAsMHgwYywweDcyLDB4MDIsMHgwYywweGEyLDB4ODcsMHgwMCwweDJkLDB4YzAsMHgwYiwweDcwLDB4MDIsMHgxMiB9LAorICAxNiwgMHhiOWEwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4MDAsMHhiMywweDgwLDB4MjEsMHhlMCB9LAorICAxNiwgMHhiOWIwLCAwLCB7MHgwYiwweDdhLDB4MDIsMHhkZSwweDAwLDB4YjcsMHg4MSwweDA1LDB4ZTQsMHgwOCwweDc5LDB4MDIsMHg1YywweDgwLDB4ODcsMHhhMCB9LAorICAxNiwgMHhiOWMwLCAwLCB7MHgyZCwweGUwLDB4MDgsMHhmOCwweDA2LDB4YjYsMHgwMCwweDg3LDB4ODAsMHgyMCwweGU0LDB4MGEsMHg3YiwweDEyLDB4MWUsMHg5MCB9LAorICAxNiwgMHhiOWQwLCAwLCB7MHg5NywweDg4LDB4MmQsMHhlMCwweDBiLDB4NzgsMHgwZSwweDMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiOWUwLCAwLCB7MHg0OCwweDE0LDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyMCwweGQwLDB4MGIsMHhiMCwweDAyLDB4NmUsMHgzNCwweGEzLDB4MDAsMHgyYyB9LAorICAxNiwgMHhiOWYwLCAwLCB7MHhjMSwweDA5LDB4MzAsMHgwMiwweDRjLDB4MDAsMHg4MywweDAwLDB4MmMsMHhjMCwweDQ4LDB4MTAsMHgwMiwweDhkLDB4ODAsMHg4MyB9LAorICAxNiwgMHhiYTAwLCAwLCB7MHhjMCwweDAwLDB4YzAsMHg4YSwweDMwLDB4MTIsMHgwYywweDAwLDB4ODAsMHgwMCwweDJjLDB4MTYsMHgwYiwweDM4LDB4MDIsMHgxMiB9LAorICAxNiwgMHhiYTEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MDAsMHhmYSwweDAwLDB4MzMsMHg4OCB9LAorICAxNiwgMHhiYTIwLCAwLCB7MHgwZiwweGEwLDB4MDMsMHg3OSwweDkwLDB4ZmEsMHgwMSwweDM2LDB4ODAsMHgxYywweGEwLDB4MDMsMHg2OCwweDAwLDB4Y2EsMHgwMCB9LAorICAxNiwgMHhiYTMwLCAwLCB7MHgzZSwweDgxLDB4MmMsMHhhMCwweDBiLDB4YjksMHgwYywweGNlLDB4ZTIsMHhiMiwweDgwLDB4OGUsMHhhMCwweDBiLDB4MjgsMHgwMCB9LAorICAxNiwgMHhiYTQwLCAwLCB7MHhkYSwweDgwLDB4M2MsMHhiMCwweDBmLDB4ZTAsMHg4MywweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiYTUwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGYwLDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4YTAsMHgwMCwweGM4LDB4MDAsMHgyZSB9LAorICAxNiwgMHhiYTYwLCAwLCB7MHgwMCwweDBmLDB4ODQsMHgyMywweGEwLDB4MDAsMHhmMCwweDQwLDB4M2UsMHgxMCwweDBmLDB4ODQsMHgwMywweGUxLDB4MDIsMHhmOCB9LAorICAxNiwgMHhiYTcwLCAwLCB7MHg0OCwweDNlLDB4MTAsMHgwYywweDgwLDB4MDMsMHhjMCwweDEwLDB4ZjgsMHg4MCwweDNlLDB4MDAsMHgwZiwweDAwLDB4MDMsMHhkMiB9LAorICAxNiwgMHhiYTgwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDAsMHhkOSwweDAwLDB4MzYsMHg0MiB9LAorICAxNiwgMHhiYTkwLCAwLCB7MHgwZiwweDkwLDB4MDMsMHgyNCwweDE4LDB4ZjksMHgxMCwweDNjLDB4NDgsMHg2OCwweDkyLDB4MTMsMHhlNCwweDAwLDB4YTksMHgxMSB9LAorICAxNiwgMHhiYWEwLCAwLCB7MHhiMiwweDYwLDB4MGUsMHg5MSwweDAzLDB4MjYsMHgwMCwweGM5LDB4MDAsMHgzMiwweDYwLDB4MGMsMHgxMCwweDAzLDB4MjQsMHgwOCB9LAorICAxNiwgMHhiYWIwLCAwLCB7MHhjOSwweDAwLDB4M2UsMHg0MCwweDBjLDB4OTAsMHgyMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiYWMwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4MDAsMHgyMiwweDQwLDB4MGIsMHg5MCwweDAyLDB4YTQsMHgwOCwweDg5LDB4MDAsMHgyZSB9LAorICAxNiwgMHhiYWQwLCAwLCB7MHg0MiwweDQ4LDB4OTQsMHgwMiwweGU0LDB4MDAsMHg4OSwweDgwLDB4MjIsMHg3MCwweDA4LDB4MTQsMHgyMiwweGE0LDB4MDIsMHg4OSB9LAorICAxNiwgMHhiYWUwLCAwLCB7MHg0MiwweDJhLDB4NzAsMHgyOCwweDkwLDB4MGEsMHgyNCwweDAwLDB4YTksMHgwMCwweDJlLDB4NDAsMHgyOCwweDkwLDB4MDIsMHhhMCB9LAorICAxNiwgMHhiYWYwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDA0LDB4MDAsMHg5OSwweDAwLDB4MjYsMHhjMCB9LAorICAxNiwgMHhiYjAwLCAwLCB7MHgwMywweDkwLDB4MDIsMHgyNCwweDAxLDB4YTksMHgwMCwweDBlLDB4NDAsMHgwYSwweDkwLDB4NDYsMHhjNCwweDBhLDB4ODksMHgwMCB9LAorICAxNiwgMHhiYjEwLCAwLCB7MHgyMCwweDQ4LDB4MGEsMHg5MCwweDAyLDB4MDUsMHg4MCwweDgxLDB4NDEsMHhhMCwweDU4LDB4ODgsMHg5MCwweDAyLDB4MjQsMHgwOCB9LAorICAxNiwgMHhiYjIwLCAwLCB7MHg4ZCwweDgwLDB4MmYsMHhjMCwweDA4LDB4OTgsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiYjMwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweDgxLDB4MjAsMHgyMCwweDQwLDB4MGIsMHgxMiwweDAyLDB4ODQsMHgwMCwweDgxLDB4MjQsMHgyYyB9LAorICAxNiwgMHhiYjQwLCAwLCB7MHg1OCwweDBhLDB4MzIsMHgyMiwweGM1LDB4ODQsMHhhMSwweDAwLDB4MjAsMHg1MCwweDA4LDB4YjAsMHgwMiwweDg1LDB4MDgsMHg4MSB9LAorICAxNiwgMHhiYjUwLCAwLCB7MHg0MCwweDIwLDB4NWEsMHgwOCwweDE2LDB4ODIsMHgwNCwweDAwLDB4YTUsMHgwMCwweDJkLDB4NDAsMHgwOCwweDEyLDB4ODIsMHg4MiB9LAorICAxNiwgMHhiYjYwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYxLDB4NDAsMHhkOCwweDUwLDB4MzYsMHgxNCB9LAorICAxNiwgMHhiYjcwLCAwLCB7MHgwZiwweDg1LDB4MjMsMHgwMSwweDQwLDB4ZTgsMHgwMCwweDNlLDB4MDAsMHgwZSwweDgwLDB4NDMsMHhjMCwweDA4LDB4Y2EsMHgwMCB9LAorICAxNiwgMHhiYjgwLCAwLCB7MHgzMiwweDgwLDB4MGUsMHg4MCwweDAzLDB4MjAsMHgwMCwweGMwLDB4MDAsMHgzMiwweDA4LDB4MmMsMHgwMiwweDAzLDB4MjAsMHgwOCB9LAorICAxNiwgMHhiYjkwLCAwLCB7MHhjOCwweDAwLDB4M2YsMHgwMCwweDBjLDB4ODIsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiYmEwLCAwLCB7MHg5OCwweDFkLDB4ZTQsMHg0MCwweGY5LDB4MTAsMHgzZiwweDQwLDB4MGYsMHg5MSwweDQzLDB4ZjQsMHgwNCwweGY5LDB4MTAsMHgzZSB9LAorICAxNiwgMHhiYmIwLCAwLCB7MHg0NCwweDBkLDB4MTEsMHgwMywweGU0LDB4NDQsMHg1OSwweDQwLDB4M2UsMHg1MCwweDRmLDB4NTAsMHg0MywweGQ0LDB4MDIsMHhmZCB9LAorICAxNiwgMHhiYmMwLCAwLCB7MHg0MCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MGIsMHhlNSwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHg0ZiwweGQwLDB4MDMsMHhlNiB9LAorICAxNiwgMHhiYmQwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDY2LDB4NjAsMHhjOSwweGUwLDB4MzIsMHg0NCB9LAorICAxNiwgMHhiYmUwLCAwLCB7MHgwZiwweDljLDB4MDMsMHhlNCwweDAwLDB4ZGQsMHg4NCwweDNmLDB4NjgsMHg4ZiwweGQ4LDB4NDIsMHhlNiwweGEwLDB4ZGQsMHhhNCB9LAorICAxNiwgMHhiYmYwLCAwLCB7MHgzMywweDY4LDB4MGQsMHg3MCwweDAzLDB4MjUsMHgwMCwweGM5LDB4ZTAsMHhiMiwweDY4LDB4MGMsMHg5YSwweGMzLDB4MjYsMHgwMCB9LAorICAxNiwgMHhiYzAwLCAwLCB7MHg5OSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OWEsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiYzEwLCAwLCB7MHgzOCwweDEwLDB4ZTMsMHgwMCwweDg4LDB4ODAsMHhhYSwweDIwLDB4OGIsMHg4OCwweDAyLDB4ZTIsMHg4OCwweGI4LDB4MDEsMHgyZSB9LAorICAxNiwgMHhiYzIwLCAwLCB7MHgwMCwweDBiLDB4ODQsMHgwMiwweGUyLDB4YjAsMHg4OCwweDUwLDB4MjIsMHgxNCwweDA4LDB4ODAsMHgwMiwweDgyLDB4ODAsMHg4OCB9LAorICAxNiwgMHhiYzMwLCAwLCB7MHhlMCwweGI2LDB4M2EsMHgwOCwweGNlLDB4YTIsMHgyMSwweDA4LDB4ODgsMHgwMCwweDJlLDB4MDAsMHgwYiwweGM0LDB4MDIsMHgwZSB9LAorICAxNiwgMHhiYzQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4ODAsMHg4MSwweDYwLDB4NjgsMHg0OCB9LAorICAxNiwgMHhiYzUwLCAwLCB7MHg1YiwweDE2LDB4MDIsMHhjNCwweDIwLDB4YTEsMHg0MCwweDZjLDB4NTAsMHgwYiwweDE0LDB4MDIsMHhjNCwweDAwLDB4YTEsMHgwMCB9LAorICAxNiwgMHhiYzYwLCAwLCB7MHgyNCwweDQwLDB4MGIsMHg5MCwweDIyLDB4MTQsMHg5MCwweDg1LDB4NDIsMHgyMSwweDUwLDB4NWIsMHg1MCwweDFhLDB4MTUsMHgwMCB9LAorICAxNiwgMHhiYzcwLCAwLCB7MHg5NSwweDAwLDB4MmQsMHg0MCwweDBiLDB4NTEsMHgwYSwweDgyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiYzgwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMSwweDg5LDB4MDAsMHgyYSwweDQwLDB4MGIsMHg5MCwweDQ2LDB4ZTQsMHgwMCwweGI5LDB4MDEsMHgyZSB9LAorICAxNiwgMHhiYzkwLCAwLCB7MHg0MCwweDBiLDB4OTAsMHgyMCwweGU0LDB4MDAsMHhiOSwweDAwLDB4MjYsMHg0MCwweDE4LDB4YjgsMHgwMiwweGE0LDB4MDIsMHg4ZCB9LAorICAxNiwgMHhiY2EwLCAwLCB7MHgwOCwweDJmLDB4NDAsMHg4YiwweGQwLDB4MDIsMHgyNCwweDAwLDB4OGQsMHgyMCwweDJmLDB4NDgsMHgwYiwweGQwLDB4MDIsMHg4NiB9LAorICAxNiwgMHhiY2IwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU0LDB4MDAsMHhjOSwweDAwLDB4MzIsMHg0MCB9LAorICAxNiwgMHhiY2MwLCAwLCB7MHgwZiwweDkwLDB4MDIsMHhlNCwweDEwLDB4NDksMHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDIsMHhlNCwweDAwLDB4ZTksMHgwMSB9LAorICAxNiwgMHhiY2QwLCAwLCB7MHgzNiwweDQwLDB4MGYsMHgxOCwweDEzLDB4MjQsMHgxMCwweGM5LDB4ODIsMHgzMiwweDQwLDB4N2YsMHg5MCwweDIzLDB4MjQsMHgwMCB9LAorICAxNiwgMHhiY2UwLCAwLCB7MHhkOSwweDIwLDB4M2UsMHg3MiwweDBmLDB4OTAsMHgwMywweGE4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiY2YwLCAwLCB7MHgyOCwweDAxLDB4ODQsMHgwMiwweGYxLDB4MDEsMHgxNiwweDQwLDB4NGYsMHg5MCwweDAzLDB4ZTUsMHgxMCwweGY5LDB4MDgsMHgyZSB9LAorICAxNiwgMHhiZDAwLCAwLCB7MHg0MCwweDBmLDB4OTAsMHgxMywweGU0LDB4MDAsMHhjOSwweDAxLDB4M2EsMHg0MCwweDFmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSB9LAorICAxNiwgMHhiZDEwLCAwLCB7MHgyMCwweDM0LDB4NDAsMHg4YywweDkwLDB4MDMsMHhjNCwweDA4LDB4ZjksMHgwMCwweDNlLDB4NjAsMHgwZiwweDEwLDB4MDMsMHg0YSB9LAorICAxNiwgMHhiZDIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDgsMHhmOCwweDAwLDB4M2UsMHgwMCB9LAorICAxNiwgMHhiZDMwLCAwLCB7MHgwYywweDgwLDB4MDMsMHg2MCwweDAwLDB4ZTgsMHgwMCwweDNlLDB4MDIsMHg0ZiwweDgwLDB4MTMsMHhlMCwweDAwLDB4ZDAsMHgwMCB9LAorICAxNiwgMHhiZDQwLCAwLCB7MHgzZSwweDAwLDB4MGUsMHg4MSwweDAzLDB4MzAsMHgwMCwweGNjLDB4NDAsMHgzMywweDAwLDB4MGMsMHhjMCwweDBiLDB4MjAsMHgyMCB9LAorICAxNiwgMHhiZDUwLCAwLCB7MHhlOCwweDAwLDB4M2UsMHgxMCwweDBmLDB4YzAsMHgwMywweGNhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiZDYwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwNCwweGJhLDB4MDAsMHgyMiwweDgwLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwMCwweGJlLDB4YzgsMHg2ZiB9LAorICAxNiwgMHhiZDcwLCAwLCB7MHg4MCwweDBiLDB4ZTEsMHgyMiwweGE4LDB4MDAsMHg4ZSwweDIwLDB4MmYsMHg4MCwweDBiLDB4ZTAsMHgyMywweDY4LDB4MDAsMHg4YSB9LAorICAxNiwgMHhiZDgwLCAwLCB7MHgwMCwweDIyLDB4ODAsMHgwOCwweGUwLDB4MDIsMHgyOSwweDAwLDB4OGEsMHgwMCwweDJlLDB4YTgsMHgwYiwweGEwLDB4MDAsMHhjYSB9LAorICAxNiwgMHhiZDkwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDAsMHhiMywweDAwLDB4MjQsMHhjMCB9LAorICAxNiwgMHhiZGEwLCAwLCB7MHgwOSwweDMwLDB4MDIsMHgwYywweDAwLDB4YjMsMHhjMSwweDJjLDB4ZTAsMHgwYiwweDM4LDB4NTYsMHgyYywweDEwLDB4MTMsMHgwMCB9LAorICAxNiwgMHhiZGIwLCAwLCB7MHgyZSwweGMwLDB4MGEsMHgzOCwweDZhLDB4MjAsMHgwMCwweDg4LDB4MDAsMHgyMCwweDAwLDB4MDksMHg4MCwweDIyLDB4NGMsMHg0MiB9LAorICAxNiwgMHhiZGMwLCAwLCB7MHhhMywweDAwLDB4MmMsMHhlMCwweDBiLDB4MjQsMHg4MCwweGNhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiZGQwLCAwLCB7MHhhMCwweDAxLDB4MWMsMHgwOCwweGI3LDB4MjQsMHgyZiwweGUwLDB4MDksMHgzOSwweDAyLDB4MWMsMHgwMSwweGI2LDB4MDAsMHgyZCB9LAorICAxNiwgMHhiZGUwLCAwLCB7MHg5MCwweDBiLDB4NjAsMHg5MiwweDhlLDB4MDAsMHg4NiwweDgyLDB4MmQsMHhjMiwweDBiLDB4ZjAsMHgwMiwweDVjLDB4MDYsMHg4NyB9LAorICAxNiwgMHhiZGYwLCAwLCB7MHgwMCwweDYwLDB4YzAsMHgyOSwweDcwLDB4MDIsMHg1YywweDAwLDB4ODYsMHgwMCwweDJkLDB4YzAsMHgwYiwweDYwLDB4MDIsMHhlOCB9LAorICAxNiwgMHhiZTAwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFmLDB4NDAsMHhmMywweGU0LDB4M2QsMHhlOCB9LAorICAxNiwgMHhiZTEwLCAwLCB7MHgwZCwweDc5LDB4MGIsMHgxZSwweGMwLDB4NjcsMHg4MCwweDJkLDB4ZTAsMHgwZiwweDcwLDB4NDMsMHgxZCwweDgwLDB4ZDUsMHgwMCB9LAorICAxNiwgMHhiZTIwLCAwLCB7MHgzZCwweDYwLDB4MGUsMHg3OCwweDAzLDB4MWUsMHgwMCwweGNkLDB4ODAsMHgzMSwweGUwLDB4MGQsMHhjOCwweDAzLDB4NGUsMHgwMCB9LAorICAxNiwgMHhiZTMwLCAwLCB7MHhlNSwweDgwLDB4M2QsMHhlMCwweDBmLDB4NDgsMHgwMywweGVhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiZTQwLCAwLCB7MHgwOCwweDFkLDB4YWMsMHg4MCwweGZiLDB4MDAsMHg3MCwweGMwLDB4NmUsMHhiNiwweDEzLDB4YWQsMHg0MCwweGZhLDB4MDAsMHgzZSB9LAorICAxNiwgMHhiZTUwLCAwLCB7MHhjMCwweDBmLDB4MjAsMHg0MywweDJkLDB4MTgsMHg1OSwweDAwLDB4M2UsMHgwMCwweDAzLDB4YjAsMHgwYiwweGUwLDB4MDAsMHhmYSB9LAorICAxNiwgMHhiZTYwLCAwLCB7MHgwMCwweGJlLDB4MDAsMHgwZSwweGIwLDB4MTMsMHhhYywweDAwLDB4ZjgsMHgwMCwweDNlLDB4YzAsMHgwZiwweDgwLDB4MDMsMHhjMiB9LAorICAxNiwgMHhiZTcwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGZlLDB4NDAsMHhmZiwweDgwLDB4M2YsMHhlNiB9LAorICAxNiwgMHhiZTgwLCAwLCB7MHgwZiwweGY4LDB4MjMsMHgyZSwweDA0LDB4ZmYsMHg5MCwweDNmLDB4ZTQsMHgwZCwweGJhLDB4MDMsMHhmZiwweDQwLDB4Y2YsMHg4MCB9LAorICAxNiwgMHhiZTkwLCAwLCB7MHgyMiwweGUxLDB4MGMsMHgzOSwweDQzLDB4MzIsMHgxMCwweGVjLDB4OTAsMHgzMywweDIwLDB4OGUsMHhjOCwweDAzLDB4ZjIsMHgwMCB9LAorICAxNiwgMHhiZWEwLCAwLCB7MHhkZiwweDgwLDB4M2YsMHg2MCwweDBmLDB4ZjgsMHgwMywweGMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiZWIwLCAwLCB7MHhhOCwweDExLDB4OWMsMHg0MCwweGI3LDB4OTAsMHgzYywweGUwLDB4MGIsMHgzYSwweDAzLDB4NGUsMHg4MCwweGYzLDB4YjEsMHgyZCB9LAorICAxNiwgMHhiZWMwLCAwLCB7MHgwNCwweDRjLDB4MzgsMHgyMywweGFlLDB4MDAsMHg4MCwweDgwLDB4MzQsMHhlOCwweDRkLDB4NzgsMHgwMiwweDNlLDB4ODAsMHg4NyB9LAorICAxNiwgMHhiZWQwLCAwLCB7MHhhMCwweDI5LDB4YzAsMHgwOCwweDcwLDB4MDIsMHhjMCwweDgwLDB4ODYsMHgwMiwweDJkLDB4NDEsMHgwYiwweDcwLDB4MDIsMHhlYSB9LAorICAxNiwgMHhiZWUwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4NDgsMHgzNywweDAxLDB4MmQsMHhjOSB9LAorICAxNiwgMHhiZWYwLCAwLCB7MHgwYiwweDcyLDB4MjIsMHgxYywweDg0LDB4YjUsMHgxNiwweDBkLDB4YzQsMHgxOSwweDQwLDB4NDIsMHhkYywweDgwLDB4ODcsMHgwMCB9LAorICAxNiwgMHhiZjAwLCAwLCB7MHgyMCwweGM4LDB4ODgsMHg3MywweDBhLDB4OWMsMHg4MCwweGI1LDB4MDAsMHgyOSwweGMwLDB4MGEsMHg0OCwweDAyLDB4YzAsMHgwMiB9LAorICAxNiwgMHhiZjEwLCAwLCB7MHg5NSwweDAwLDB4MmQsMHg0MiwweDBiLDB4NTgsMHgwMiwweGMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiZjIwLCAwLCB7MHgyMCwweDE0LDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyYSwweGUwLDB4MGIsMHgzMCwweDAyLDB4NGMsMHgyMCwweGExLDB4MDEsMHgyNCB9LAorICAxNiwgMHhiZjMwLCAwLCB7MHhjMSwweDA4LDB4MDAsMHgwMiwweDhjLDB4MDAsMHg4MSwweDAwLDB4MjQsMHg4MCwweDA5LDB4MzgsMHgwYSwweDYwLDB4ODAsMHg5MiB9LAorICAxNiwgMHhiZjQwLCAwLCB7MHg0MCwweDJhLDB4MDAsMHgwYSwweDMwLDB4MDIsMHhjMCwweDAwLDB4ODAsMHhjOCwweDJjLDB4NzIsMHgwYiwweDE0LDB4MDIsMHhjOCB9LAorICAxNiwgMHhiZjUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGJjLDB4MDAsMHhmZiwweDAwLDB4MmYsMHhmNCB9LAorICAxNiwgMHhiZjYwLCAwLCB7MHg4ZiwweGYwLDB4MDMsMHgzYywweDAwLDB4YjksMHgwMCwweDNlLDB4NDAsMHgwOSwweDkwLDB4MDMsMHhmYywweDAyLDB4YzMsMHgwMSB9LAorICAxNiwgMHhiZjcwLCAwLCB7MHgzMiwweGMwLDB4NDgsMHhiOCwweDEzLDB4YTEsMHgwMCwweGJhLDB4MDAsMHgyYSwweDAwLDB4MGEsMHhhMCwweDA3LDB4ZWMsMHgwMCB9LAorICAxNiwgMHhiZjgwLCAwLCB7MHhkYiwweGM4LDB4M2UsMHg5MCwweDBmLDB4YTIsMHgwMiwweGVhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiZjkwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGZiLDB4MDIsMHgzZSwweGM0LDB4MGYsMHhiMCwweDYzLDB4ZWMsMHgwMSwweGY4LDB4NDAsMHgzZSB9LAorICAxNiwgMHhiZmEwLCAwLCB7MHg0MCwweDBiLDB4ODAsMHgwMywweGNjLDB4MDAsMHhmYSwweDQyLDB4M2UsMHhjMCwweDBmLDB4YjUsMHgwMCwweGFjLDB4NTgsMHhlOSB9LAorICAxNiwgMHhiZmIwLCAwLCB7MHg4MiwweDNlLDB4YzAsMHgxZCwweDkwLDB4MDMsMHhlYywweDA0LDB4ZmEsMHgwMCwweDNlLDB4ODAsMHgwZiwweGEwLDB4MDMsMHhlMCB9LAorICAxNiwgMHhiZmMwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGZjLDB4MGMsMHhkZiwweDAwLDB4N2YsMHhjMCB9LAorICAxNiwgMHhiZmQwLCAwLCB7MHgyYywweGYwLDB4MDMsMHg3YywweDAxLDB4YzcsMHgwMCwweDMzLDB4NDAsMHg4ZiwweGQwLDB4MDMsMHhmYywweDAwLDB4ZDgsMHgwMCB9LAorICAxNiwgMHhiZmUwLCAwLCB7MHgxNSwweDQ0LDB4MGMsMHhlMCwweDFiLDB4M2MsMHgwMCwweGNiLDB4MGUsMHgzMywweGMwLDB4NWMsMHg2MiwweDAyLDB4MWMsMHgwMiB9LAorICAxNiwgMHhiZmYwLCAwLCB7MHhjNSwweDAwLDB4MmIsMHg4MCwweDBmLDB4YzAsMHg4NywweDgwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMDAwLCAwLCB7MHg4MSwweDQ0LDB4NmMsMHgxMCwweGJiLDB4MDAsMHgyZSwweGMwLDB4MDgsMHhiMCwweDUyLDB4MGMsMHgwMSwweGZhLDB4YzQsMHgyMiB9LAorICAxNiwgMHhjMDEwLCAwLCB7MHg2MSwweDBiLDB4ODgsMHgwMywweDZjLDB4MDAsMHg4OCwweDQ3LDB4MmEsMHgwMCwweDBlLDB4MWMsMHgwMiwweDIwLDB4MDIsMHg4OCB9LAorICAxNiwgMHhjMDIwLCAwLCB7MHgwMCwweGFhLDB4MDAsMHgyOCwweDkwLDB4MGEsMHgyYywweDA0LDB4YTgsMHgwMCwweDIyLDB4OTAsMHgwYiwweDgwLDB4MDIsMHhlMCB9LAorICAxNiwgMHhjMDMwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMSwweDJjLDB4MDAsMHhiYiwweDAwLDB4MmUsMHhjMSB9LAorICAxNiwgMHhjMDQwLCAwLCB7MHgwOCwweDMwLDB4MTIsMHg2YywweDAwLDB4ODgsMHg4OCwweDJhLDB4MzAsMHgwYiwweGI4LDB4MDIsMHhlYywweDAwLDB4OWIsMHgwOCB9LAorICAxNiwgMHhjMDUwLCAwLCB7MHgyYSwweDQwLDB4MDgsMHhiOCwweDAyLDB4MjAsMHgwMCwweDgyLDB4MTAsMHgyMiwweDAwLDB4MDgsMHhhMCwweDIyLDB4YTAsMHgwMCB9LAorICAxNiwgMHhjMDYwLCAwLCB7MHg4YiwweDAwLDB4MmEsMHgwMiwweDBiLDB4YjAsMHgwMiwweGUwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMDcwLCAwLCB7MHgwOCwweDAwLDB4MGMsMHgwMCwweGIzLDB4MjAsMHgyYywweGMyLDB4MDgsMHgzNiwweDAyLDB4MmMsMHhjMCwweGEwLDB4MDgsMHgyMCB9LAorICAxNiwgMHhjMDgwLCAwLCB7MHgwMCwweDBiLDB4MzMsMHg0NiwweGNkLDB4MjgsMHg4MCwweDIwLDB4MjgsMHhjMCwweDBiLDB4MzIsMHgwMiwweDBjLDB4MjAsMHg4MSB9LAorICAxNiwgMHhjMDkwLCAwLCB7MHgzMCwweDI4LDB4YzAsMHgwOCwweDEwLDB4MDIsMHg4MSwweDAwLDB4YWEsMHgwMCwweDI4LDB4MDAsMHgwMywweDMwLDB4MDIsMHhjMiB9LAorICAxNiwgMHhjMGEwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYywweDdjLDB4MDAsMHhmYiwweDI4LDB4MmUsMHhjYyB9LAorICAxNiwgMHhjMGIwLCAwLCB7MHgwYywweDcwLDB4NTMsMHg3ZCwweDA5LDB4ODgsMHgwMCwweGJhLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhmZCwweDgwLDB4ZGEsMHg2MCB9LAorICAxNiwgMHhjMGMwLCAwLCB7MHgzYSwweDUwLDB4OGMsMHhhMiwweDgzLDB4MmMsMHg4MCwweDRiLDB4MjAsMHgzMCwweGMwLDB4MjgsMHhhMCwweDAzLDB4YTEsMHgwMCB9LAorICAxNiwgMHhjMGQwLCAwLCB7MHhjOSwweDAwLDB4M2EsMHgwMCwweDBmLDB4OTAsMHgwMywweGMwLDB4MDMsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMGUwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgwNCwweGZiLDB4MDAsMHg3ZSwweGM5LDB4MGIsMHhiNiwweDAzLDB4ZmMsMHhjMCwweGY4LDB4MGMsMHgzZiB9LAorICAxNiwgMHhjMGYwLCAwLCB7MHgwMCwweDRmLDB4YzMsMHg0MywweDJjLDB4MDAsMHhiOCwweDM4LDB4M2YsMHg4ZSwweDVlLDB4ZjAsMHg0MywweGUwLDB4MTAsMHhmOCB9LAorICAxNiwgMHhjMTAwLCAwLCB7MHgzMCwweDNmLDB4MDEsMHgwZiwweGQwLDB4MDMsMHg3MCwweDAwLDB4ZmMsMHgwMCwweDM3LDB4MDAsMHgwZCwweGQwLDB4MDcsMHhlOSB9LAorICAxNiwgMHhjMTEwLCAwLCB7MHgwMywweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZjLDB4ZTAsMHhjYywweDgwLDB4MzMsMHhjMCB9LAorICAxNiwgMHhjMTIwLCAwLCB7MHgwZCwweGYwLDB4ODMsMHhmYywweDgwLDB4ZGMsMHg5NCwweDMzLDB4YzAsMHgxYywweGYxLDB4MDMsMHg3ZCwweDhjLDB4ZmYsMHgzMCB9LAorICAxNiwgMHhjMTMwLCAwLCB7MHgzZiwweDMwLDB4OGYsMHhjOCwweDAzLDB4N2UsMHgxMCwweGNmLDB4OTAsMHgzOSwweGEwLDB4OGQsMHhmOCwweDAzLDB4YWUsMHgwMCB9LAorICAxNiwgMHhjMTQwLCAwLCB7MHhkNSwweDgwLDB4MTMsMHhlMCwweDBjLDB4NTgsMHgwMywweGYwLDB4MDEsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMTUwLCAwLCB7MHg4MCwweDEwLDB4ZGQsMHgwOCwweDg4LDB4MDAsMHgyMywweGM0LDB4MDgsMHhmYywweDAyLDB4ZWMsMHhhOCwweGNiLDB4MjAsMHgyMSB9LAorICAxNiwgMHhjMTYwLCAwLCB7MHhjMiwweDBkLDB4ZjcsMHgxMiwweDFjLDB4NDAsMHhkZiwweDMwLDB4MjIsMHhhMCwweDBiLDB4ODgsMHgwMiwweDJlLDB4MDQsMHhkYiB9LAorICAxNiwgMHhjMTcwLCAwLCB7MHgyMSwweDIyLDB4YzAsMHgwOCwweGI4LDB4MjIsMHgyZSwweDAwLDB4YjksMHg4MCwweDJhLDB4NjAsMHgwYSwweDg4LDB4MDIsMHhlMCB9LAorICAxNiwgMHhjMTgwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHg0NSwweGNjLDB4MTAsMHg4MCwweDJjLDB4MjgsMHhjYSB9LAorICAxNiwgMHhjMTkwLCAwLCB7MHg2OCwweDMwLDB4MDIsMHg4ZCwweDAwLDB4OWIsMHgyMCwweDI4LDB4YzQsMHgwOCwweDMyLDB4MDIsMHhjYywweDEwLDB4YjMsMHgwMCB9LAorICAxNiwgMHhjMWEwLCAwLCB7MHgyNCwweDA4LDB4MGIsMHg4MCwweDQyLDB4NmMsMHgwMCwweDgzLDB4MDAsMHgyYSwweGNhLDB4M2EsMHhiMCwweDAyLDB4OGMsMHgwNCB9LAorICAxNiwgMHhjMWIwLCAwLCB7MHhiMCwweDA0LDB4MjgsMHhjMCwweDA4LDB4MTAsMHgwMiwweGUzLDB4MDEsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMWMwLCAwLCB7MHhjMCwweDE1LDB4OGMsMHgwMiwweDgwLDB4NDAsMHhhYSwweGMwLDB4MDgsMHhiMCwweDAyLDB4ZWMsMHgwMCwweDliLDB4MjAsMHgyYSB9LAorICAxNiwgMHhjMWQwLCAwLCB7MHhjMCwweDg4LDB4YjAsMHgwMiwweGFjLDB4MDAsMHg5YiwweDAwLDB4MjYsMHhlMCwweDAzLDB4ODAsMHg4MiwweDJjLDB4MjgsMHg5YiB9LAorICAxNiwgMHhjMWUwLCAwLCB7MHgyMCwweDIyLDB4ZTEsMHgwYiwweGIyLDB4MDIsMHhhYywweDgwLDB4YjgsMHg4MCwweDJhLDB4YzEsMHgwYSwweDk4LDB4MDIsMHhmMCB9LAorICAxNiwgMHhjMWYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGVjLDB4MDAsMHhjOCwweDUwLDB4M2EsMHhjMCB9LAorICAxNiwgMHhjMjAwLCAwLCB7MHgwZCwweGIwLDB4MDMsMHhlYywweDAwLDB4ZGIsMHg4OCwweGJhLDB4YzAsMHgwOCwweGIwLDB4MDMsMHg2YywweDA4LDB4ZmIsMHgwMCB9LAorICAxNiwgMHhjMjEwLCAwLCB7MHgzNiwweDYwLDB4MGYsMHg4YywweDYzLDB4NmMsMHgwMCwweGNiLDB4YzAsMHgzYSwweDgwLDB4MGUsMHhiZSwweDAzLDB4YWYsMHg4NCB9LAorICAxNiwgMHhjMjIwLCAwLCB7MHg3OSwweDgwLDB4M2EsMHg4OCwweDA0LDB4OTgsMHgwMSwweGQwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMjMwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwMCwweGZjLDB4ODAsMHgzNSwweGMwLDB4NGYsMHhmMCwweDAzLDB4ZGMsMHgwMCwweGVmLDB4MDAsMHgzNyB9LAorICAxNiwgMHhjMjQwLCAwLCB7MHhjMCwweGFmLDB4ZjAsMHgwMywweDFjLDB4MDEsMHg2ZiwweDAwLDB4MTMsMHgwMCwweDBmLDB4YzEsMHgyMywweGZjLDB4YjgsMHhmZiB9LAorICAxNiwgMHhjMjUwLCAwLCB7MHgwNCwweDM3LDB4YzAsMHgwYywweGY4LDB4NDMsMHg3ZSwweDA0LDB4ZmQsMHgwMCwweDNmLDB4MDQsMHgwZiwweGQwLDB4MDMsMHhmOCB9LAorICAxNiwgMHhjMjYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDAsMHhjOCwweDQwLDB4M2EsMHhjMCB9LAorICAxNiwgMHhjMjcwLCAwLCB7MHgwYywweGIwLDB4MDMsMHhlYywweDAwLDB4ZmIsMHg0MCwweDM4LDB4YzEsMHgwZSwweGIwLDB4NDMsMHgyYywweDA4LDB4YzMsMHgwMCB9LAorICAxNiwgMHhjMjgwLCAwLCB7MHgzZSwweDQwLDB4MGUsMHg4MiwweDAzLDB4NmQsMHgwMCwweGRiLDB4NDAsMHgzMiwweGMxLDB4NWYsMHhiNCwweGEzLDB4ZWQsMHgyMCB9LAorICAxNiwgMHhjMjkwLCAwLCB7MHhjOSwweDQwLDB4MzIsMHhlMCwweDhmLDB4OTgsMHg0MywweDkwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMmEwLCAwLCB7MHhjOCwweDA1LDB4M2MsMHgwMCwweDg4LDB4MDAsMHgyMywweGMwLDB4MjgsMHhmNSwweGMyLDB4ZmMsMHgwMCwweGIzLDB4MDQsMHgyMyB9LAorICAxNiwgMHhjMmIwLCAwLCB7MHhjMSwweDQ4LDB4ZjAsMHgyMiwweGJjLDB4MDYsMHhhZiwweDAwLDB4MGUsMHg0MCwweDA4LDB4MDAsMHgwMiwweGNkLDB4MDAsMHhiYiB9LAorICAxNiwgMHhjMmMwLCAwLCB7MHgwMSwweDIwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhlZSwweDAwLDB4ODEsMHhlMCwweDM0LDB4YTAsMHgwYiwweDkwLDB4MDIsMHgzMiB9LAorICAxNiwgMHhjMmQwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MDIsMHg4MCwweDAwLDB4MjgsMHhjMCB9LAorICAxNiwgMHhjMmUwLCAwLCB7MHgwOSwweDNjLDB4MDIsMHg0YywweDAwLDB4YjMsMHgwMCwweDJjLDB4YzAsMHgwYSwweGIwLDB4MDIsMHgwYywweDAwLDB4ODMsMHgwMSB9LAorICAxNiwgMHhjMmYwLCAwLCB7MHgyYywweDAwLDB4MGEsMHgwNSwweDAyLDB4Y2QsMHg1OCwweGJiLDB4MDAsMHgyMCwweDAwLDB4MGEsMHgzZCwweDAyLDB4Y2YsMHg0MCB9LAorICAxNiwgMHhjMzAwLCAwLCB7MHgyMSwweDIwLDB4NjAsMHhjMCwweDA5LDB4MTAsMHgwMiwweGY4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMzEwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwMCwweDg0LDB4ODAsMHgyOCwweGU0LDB4ODgsMHg3OCwweDQyLDB4ZGUsMHgwMCwweGI3LDB4OTAsMHg2NSB9LAorICAxNiwgMHhjMzIwLCAwLCB7MHhlNCwweDg4LDB4N2EsMHg0MiwweDllLDB4NDAsMHhhNywweDkwLDB4MmQsMHhhMCwweDBhLDB4NDgsMHgyMiwweGRlLDB4MDQsMHhiNyB9LAorICAxNiwgMHhjMzMwLCAwLCB7MHg4MCwweDIzLDB4NjAsMHg0OCwweDc4LDB4NDIsMHhmZSwweDgwLDB4YWYsMHg5MCwweDY1LDB4ZTAsMHgwYiwweGU4LDB4MDIsMHhjOCB9LAorICAxNiwgMHhjMzQwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHhjOCwweDAwLDB4MzgsMHhjMCB9LAorICAxNiwgMHhjMzUwLCAwLCB7MHgwYywweDMwLDB4MDMsMHhjYywweDAwLDB4ZmIsMHgwMCwweDNjLDB4YzAsMHgwZSwweGJhLDB4MDMsMHgwYywweDAwLDB4YzMsMHgwMCB9LAorICAxNiwgMHhjMzYwLCAwLCB7MHgzZSwweDAwLDB4NGUsMHgyMiwweDAyLDB4Y2MsMHhjMCwweGZiLDB4NDAsMHgzMCwweGMwLDB4MGEsMHgzMCwweDAzLDB4Y2UsMHg4MCB9LAorICAxNiwgMHhjMzcwLCAwLCB7MHhlMSwweDQxLDB4MzAsMHhjOSwweDBmLDB4MzAsMHgwMywweGQyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMzgwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgyMCwweGZjLDB4MDAsMHgzNywweGMyLDB4MGUsMHhmMSwweDIzLDB4ZWMsMHg0MCwweGZmLDB4MDQsMHgzYSB9LAorICAxNiwgMHhjMzkwLCAwLCB7MHhjMCwweDBmLDB4YjAsMHgyMywweGZjLDB4MDAsMHhmZiwweDA0LDB4M2UsMHhjMCwweDBkLDB4YTAsMHgwMywweGZjLDB4NTgsMHhmZiB9LAorICAxNiwgMHhjM2EwLCAwLCB7MHgwMCwweGJmLDB4YzAsMHgwNiwweGYwLDB4ODMsMHhkYywweDYyLDB4ZGYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHgxMCB9LAorICAxNiwgMHhjM2IwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVkLDB4ODAsMHhjOSwweDAxLDB4M2UsMHhjMCB9LAorICAxNiwgMHhjM2MwLCAwLCB7MHg4YywweGIyLDB4MDcsMHhhZSwweDA0LDB4Y2IsMHg4MCwweDNhLDB4YzgsMHg0YywweGIyLDB4MDMsMHgyYywweDg0LDB4Y2IsMHgzMCB9LAorICAxNiwgMHhjM2QwLCAwLCB7MHhiMCwweGUwLDB4MGQsMHg4OCwweDBiLDB4MmMsMHgwMCwweGViLDB4MDAsMHgzMCwweDAwLDB4MGMsMHhiYywweDgzLDB4MmQsMHg4MCB9LAorICAxNiwgMHhjM2UwLCAwLCB7MHhmYiwweDAwLDB4MzIsMHhjMCwweDBjLDB4OTAsMHgwMywweGVhLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjM2YwLCAwLCB7MHg0OCwweDExLDB4OWMsMHg0MCwweDg3LDB4MDAsMHgyYywweGNjLDB4MDgsMHg3NiwweDgyLDB4M2MsMHg4MiwweDg3LDB4MDAsMHgyMSB9LAorICAxNiwgMHhjNDAwLCAwLCB7MHhjMiwweDhkLDB4MzIsMHg4MiwweDBkLDB4NGMsMHhhNywweDI4LDB4MjEsMHg4MCwweDA4LDB4NDAsMHgwMiwweDFkLDB4ODAsMHhiZiB9LAorICAxNiwgMHhjNDEwLCAwLCB7MHgyMCwweDM1LDB4NDAsMHgwOSwweDcyLDB4NDMsMHg1YywweGEwLDB4YjcsMHgwMCwweDI5LDB4YzAsMHgwOCwweDcwLDB4MDIsMHhkMiB9LAorICAxNiwgMHhjNDIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDhlLDB4MDAsMHg4NCwweDgwLDB4MmQsMHhlMCB9LAorICAxNiwgMHhjNDMwLCAwLCB7MHgwOCwweDc4LDB4MDIsMHhkZSwweGMwLDB4OGYsMHg4MCwweDI4LDB4ZWMsMHgyOCwweDdiLDB4MGEsMHg5ZSwweDk0LDB4ODMsMHg4NCB9LAorICAxNiwgMHhjNDQwLCAwLCB7MHgyMywweGUwLDB4MDksMHg1OCwweDUwLDB4OWUsMHgxMCwweGE3LDB4YjAsMHgyMywweGUwLDB4MGIsMHg3OCwweDAyLDB4MWUsMHgyMCB9LAorICAxNiwgMHhjNDUwLCAwLCB7MHhiNywweDgwLDB4MjEsMHhlMCwweDA5LDB4NzgsMHgwMiwweGYwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNDYwLCAwLCB7MHg0OCwweDE0LDB4Y2MsMHgwMiwweDgyLDB4MWMsMHgyYywweGMwLDB4MjgsMHgzMCwweDAyLDB4NGMsMHgwMCwweDgzLDB4YzAsMHgyMCB9LAorICAxNiwgMHhjNDcwLCAwLCB7MHhjMCwweDA4LDB4MzAsMHgwMiwweDBjLDB4MDAsMHhhMywweDAwLDB4NjAsMHhkMiwweDA4LDB4MWQsMHgwMiwweDBmLDB4MjAsMHhiYiB9LAorICAxNiwgMHhjNDgwLCAwLCB7MHgyNCwweDI0LDB4YzAsMHgwYiwweDNjLDB4MDIsMHg0ZiwweDAwLDB4YjMsMHg4MCwweDI4LDB4ZDgsMHgwOSwweDMyLDB4MDIsMHhkMiB9LAorICAxNiwgMHhjNDkwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxMSwweGE4LDB4MDAsMHhjZSwweDg0LDB4M2UsMHg4MCB9LAorICAxNiwgMHhjNGEwLCAwLCB7MHgwYywweGEwLDB4MDMsMHhlOCwweDAwLDB4Y2UsMHhjMCwweDNhLDB4ODAsMHgwOCwweGEwLDB4MDMsMHhhOCwweDAwLDB4Y2EsMHgwMCB9LAorICAxNiwgMHhjNGIwLCAwLCB7MHgzMywweDgwLDB4MGQsMHhlYywweDAzLDB4M2IsMHg4MCwweGVlLDB4ODIsMHgzMywweDgwLDB4MGEsMHhjMCwweDg3LDB4MTAsMHg0MCB9LAorICAxNiwgMHhjNGMwLCAwLCB7MHhmNiwweGMwLDB4MzMsMHg5MCwweGFkLDB4NjQsMHgwMywweGZhLDB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNGQwLCAwLCB7MHg0OCwweDAwLDB4YzAsMHgwMiwweGY4LDB4MDAsMHgzYywweDAwLDB4MWYsMHgwNCwweDAzLDB4YTAsMHgwNCwweGY4LDB4MzAsMHgzZSB9LAorICAxNiwgMHhjNGUwLCAwLCB7MHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwNCwweDBmLDB4ODAsMHg5MywweGUwLDB4MDAsMHhmOCB9LAorICAxNiwgMHhjNGYwLCAwLCB7MHgxMCwweDNlLDB4MDAsMHgyYywweDg0LDB4MDMsMHhlMCwweDAwLDB4ZjgsMHgxOCwweDNlLDB4MTAsMHgwZSwweDgwLDB4MDMsMHhkMiB9LAorICAxNiwgMHhjNTAwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDAsMHhkOSwweDAwLDB4M2UsMHg0MCB9LAorICAxNiwgMHhjNTEwLCAwLCB7MHgwZSwweDkwLDB4MDMsMHhhNCwweDEwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgwNCwweDkwLDB4MDMsMHgyNCwweDAwLDB4NDEsMHgwMCB9LAorICAxNiwgMHhjNTIwLCAwLCB7MHgzZSwweDQwLDB4MGYsMHg5MSwweDEzLDB4ZTEsMHgwOCwweGY4LDB4MDAsMHgzMiwweDQwLDB4MDgsMHg4OSwweDgzLDB4YTIsMHgwMCB9LAorICAxNiwgMHhjNTMwLCAwLCB7MHhjOSwweDgwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwYiwweDAyLDB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNTQwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMiwweDg5LDB4MDAsMHgyZSwweDQwLDB4MGQsMHg5MCwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDAsMHgyZSB9LAorICAxNiwgMHhjNTUwLCAwLCB7MHg0MCwweDQ4LDB4OTAsMHgwMiwweGE0LDB4MDAsMHg4OSwweDAwLDB4MjIsMHg0MCwweDhiLDB4OTQsMHg0MiwweGUyLDB4MjAsMHhiOCB9LAorICAxNiwgMHhjNTYwLCAwLCB7MHgwMCwweGEyLDB4NDAsMHgwOCwweDk0LDB4MDIsMHhlNSwweDA0LDB4YTksMHg5MCwweDM0LDB4NjAsMHgwOCwweDkwLDB4MDIsMHgyMCB9LAorICAxNiwgMHhjNTcwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MTAsMHg5OSwweDAwLDB4MmUsMHg0MCB9LAorICAxNiwgMHhjNTgwLCAwLCB7MHgwYSwweDkwLDB4MDIsMHhlNCwweDAwLDB4YjksMHgwMCwweDI0LDB4NDAsMHgwYSwweDEwLDB4MDIsMHgwNCwweDAwLDB4YTksMHgwMCB9LAorICAxNiwgMHhjNTkwLCAwLCB7MHgyYSwweDQwLDB4MGIsMHg5MCwweDgyLDB4ZTAsMHgwMSwweGI4LDB4MDAsMHgyMCwweDQwLDB4M2EsMHg5MCwweDAyLDB4YTQsMHg0NCB9LAorICAxNiwgMHhjNWEwLCAwLCB7MHg4OSwweDA0LDB4MjIsMHg2MiwweDA4LDB4OTgsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNWIwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4YSwweDgxLDB4MDAsMHgyYywweDQ4LDB4MDksMHgzMiwweDA2LDB4NDQsMHg4MCwweGIxLDB4MDAsMHgyYyB9LAorICAxNiwgMHhjNWMwLCAwLCB7MHg0OCwweDBhLDB4MTIsMHgwMiwweDg0LDB4ODAsMHhhMSwweDIwLDB4MjAsMHg1MCwweDBiLDB4MTQsMHgwMiwweGM1LDB4MDAsMHhiMSB9LAorICAxNiwgMHhjNWQwLCAwLCB7MHg0MCwweDIwLDB4NTAsMHgwYSwweDI0LDB4MDIsMHhjOSwweDAwLDB4YTMsMHgwMCwweDI0LDB4NDAsMHgwOCwweDExLDB4MDIsMHgwMiB9LAorICAxNiwgMHhjNWUwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYxLDB4NDAsMHhkOCwweDUwLDB4M2UsMHgxNCB9LAorICAxNiwgMHhjNWYwLCAwLCB7MHgwZSwweDgwLDB4MDMsMHhlMSwweDQwLDB4ZjgsMHg1MSwweDM2LDB4MTQsMHgyZSwweDg1LDB4NDMsMHgyMSwweDQyLDB4ZTgsMHg1MCB9LAorICAxNiwgMHhjNjAwLCAwLCB7MHgzYSwweDAwLDB4MGYsMHg4MCwweDEyLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzMiwweDAwLDB4MWUsMHg4MCwweDQzLDB4YTAsMHgwMCB9LAorICAxNiwgMHhjNjEwLCAwLCB7MHhjOCwweDAxLDB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNjIwLCAwLCB7MHg5OCwweDFkLDB4ZTQsMHg0MCwweGZkLDB4MDAsMHgzZSwweDQ0LDB4NGUsMHgxMSwweDAzLDB4YTQsMHg0MCwweGI1LDB4MDAsMHgzZSB9LAorICAxNiwgMHhjNjMwLCAwLCB7MHg0NCwweDBkLDB4OTEsMHgwMywweGU0LDB4NDAsMHhkOSwweDEwLDB4M2YsMHg0MCwweDBmLDB4NTAsMHgwMywweGU1LDB4MDAsMHhmOSB9LAorICAxNiwgMHhjNjQwLCAwLCB7MHg0MCwweDNmLDB4NDAsMHgwZCwweDQ0LDB4MDMsMHhmMSwweDAwLDB4ZjUsMHgwMiwweDNkLDB4YzAsMHgyZiwweGQyLDB4MDMsMHhlNiB9LAorICAxNiwgMHhjNjUwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGU3LDB4MDAsMHhlOSwweDAwLDB4MzYsMHg2MCB9LAorICAxNiwgMHhjNjYwLCAwLCB7MHgwZCwweGRhLDB4MDMsMHhlNiwweDQwLDB4ZjksMHg0MCwweDNlLDB4NjgsMHgwYywweDlhLDB4MDMsMHg2NiwweDIwLDB4ODksMHhhMCB9LAorICAxNiwgMHhjNjcwLCAwLCB7MHgzMywweDQwLDB4MGUsMHg5MCwweDA3LDB4YTYsMHgwMCwweGY5LDB4ODAsMHgzZSwweDUwLDB4MGMsMHhjYSwweDAzLDB4ZjMsMHg4MCB9LAorICAxNiwgMHhjNjgwLCAwLCB7MHhjNSwweDAyLDB4MzMsMHg0MCwweDBjLDB4YzAsMHgwMywweGM2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNjkwLCAwLCB7MHgzOCwweDEwLDB4ZTMsMHgwNCwweDg4LDB4YTIsMHgyMCwweDM4LDB4MDgsMHg4MCwweDAyLDB4ZTMsMHg0MCwweGIwLDB4ODAsMHgyZSB9LAorICAxNiwgMHhjNmEwLCAwLCB7MHgyOCwweDA4LDB4OGEsMHg4MiwweDIzLDB4ODAsMHg4OCwweDgwLDB4MjIsMHgwMCwweGRiLDB4ODgsMHgwMiwweDYyLDB4MDQsMHhiOCB9LAorICAxNiwgMHhjNmIwLCAwLCB7MHhiMCwweDJlLDB4YTgsMHg4OCwweDhlLDB4YTIsMHhlYSwweDgwLDB4ODgsMHgwMCwweDJhLDB4MDAsMHgyOCwweDg4LDB4MDMsMHg4ZSB9LAorICAxNiwgMHhjNmMwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM1LDB4ODIsMHhhOSwweDA4LDB4MmMsMHg1MiB9LAorICAxNiwgMHhjNmQwLCAwLCB7MHgwYiwweDE0LDB4MDIsMHhjNCwweDgwLDB4YjEsMHgyMSwweDBjLDB4NTIsMHg4OCwweDE0LDB4MDIsMHg0NCwweDIwLDB4OTEsMHg2OSB9LAorICAxNiwgMHhjNmUwLCAwLCB7MHgyMCwweDQwLDB4MGEsMHgxMCwweDgyLDB4YzYsMHhlMCwweGIxLDB4MGMsMHgyYywweDQ4LDB4MDgsMHgwMSwweDAyLDB4ZTEsMHg5MyB9LAorICAxNiwgMHhjNmYwLCAwLCB7MHhhMSwweDAxLDB4MjQsMHg0MSwweDBhLDB4MTAsMHgwMiwweGMyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNzAwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMCwweDg5LDB4MDQsMHgyMiwweDQwLDB4MDgsMHg5MCwweDAwLDB4ZTQsMHgwMCwweDM5LDB4MDIsMHgwZSB9LAorICAxNiwgMHhjNzEwLCAwLCB7MHg0MCwweDA4LDB4MTAsMHg2MiwweDI0LDB4MDAsMHg5MSwweDAwLDB4NjIsMHg0MCwweDhiLDB4ODAsMHgwMiwweGUwLDB4NTQsMHhiOSB9LAorICAxNiwgMHhjNzIwLCAwLCB7MHgwYywweDJlLDB4NDAsMHgwOSwweGI2LDB4NTIsMHhlYywweDAwLDB4YTksMHgwMCwweDJhLDB4NDAsMHgwYSwweDkyLDB4ODAsMHg4NiB9LAorICAxNiwgMHhjNzMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxMSwweGU0LDB4MDAsMHhlMSwweDYwLDB4MzYsMHg0MCB9LAorICAxNiwgMHhjNzQwLCAwLCB7MHgwZCwweDkwLDB4MjMsMHhlNCwweDAwLDB4ZjksMHgzMCwweDNlLDB4NDAsMHgyYywweDkwLDB4NDMsMHg2NCwweDA2LDB4YzksMHgwMCB9LAorICAxNiwgMHhjNzUwLCAwLCB7MHgzMiwweDQ5LDB4MGUsMHg4ZCwweDkzLDB4ZTAsMHgwMCwweGY5LDB4MDAsMHgyZSwweDQwLDB4MmMsMHg5NCwweDAzLDB4YzcsMHg0MCB9LAorICAxNiwgMHhjNzYwLCAwLCB7MHhlOSwweDIwLDB4MzAsMHg1NSwweDBlLDB4OTAsMHgwMywweGU4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNzcwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwMCwweGY5LDB4MDAsMHgxZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4ODAsMHgzYyB9LAorICAxNiwgMHhjNzgwLCAwLCB7MHg0MCwweDRmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhlOSwweDA0LDB4YmUsMHg0MCwweDBmLDB4ODgsMHgzMywweDYyLDB4MDAsMHhmOSB9LAorICAxNiwgMHhjNzkwLCAwLCB7MHhjMiwweDNlLDB4NDgsMHgyZSwweDg4LDB4MzMsMHhlMiwweDAwLDB4ZDksMHgwMCwweDNlLDB4NjAsMHgwZCwweDgwLDB4MDMsMHhjYSB9LAorICAxNiwgMHhjN2EwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDAsMHhjOCwweDAwLDB4M2UsMHgwMCB9LAorICAxNiwgMHhjN2IwLCAwLCB7MHgwZCwweDgwLDB4MDMsMHhhMCwweDA0LDB4ZTgsMHg0MCwweGJhLDB4MDAsMHgwYywweDgwLDB4MDMsMHhlMCwweDA0LDB4YzgsMHgwMCB9LAorICAxNiwgMHhjN2MwLCAwLCB7MHgzYSwweDAwLDB4MGUsMHg4YywweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDIsMHgzMiwweDAwLDB4MGUsMHg4MCwweDAzLDB4NjEsMHgyMCB9LAorICAxNiwgMHhjN2QwLCAwLCB7MHhmOCwweDAwLDB4MzIsMHgxNiwweDBmLDB4ODAsMHgwMywweGNhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjN2UwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwMCwweDhhLDB4MDAsMHgyZSwweDgwLDB4MDgsMHhlMiwweDAzLDB4MjgsMHgwMCwweDhhLDB4MDAsMHgyMiB9LAorICAxNiwgMHhjN2YwLCAwLCB7MHg4MCwweDA4LDB4YTAsMHgwMiwweGU4LDB4MDQsMHg4YSwweDAwLDB4MmUsMHhhMiwweDA5LDB4ZTgsMHgwMiwweGZhLDB4MDQsMHhiZSB9LAorICAxNiwgMHhjODAwLCAwLCB7MHgwMCwweGEyLDB4ODAsMHgwOCwweGNkLDB4ODIsMHgzMywweDIwLDB4YjYsMHhjMCwweDM3LDB4YTAsMHg0YiwweGM4LDB4ODIsMHhjYSB9LAorICAxNiwgMHhjODEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDZjLDB4MDAsMHg4MywweDAwLDB4MjYsMHhjMCB9LAorICAxNiwgMHhjODIwLCAwLCB7MHgwOSwweDM4LDB4MDIsMHg0YywweDAwLDB4YjMsMHgwMCwweDI0LDB4YzAsMHgwOCwweDMwLDB4MDIsMHhlYywweDAwLDB4ODMsMHgwMCB9LAorICAxNiwgMHhjODMwLCAwLCB7MHgyOCwweGUwLDB4MGIsMHgzMCwweDAyLDB4Y2UsMHg4MSwweGIzLDB4MDAsMHg2MiwweGMwLDB4MDgsMHgzYywweDAyLDB4NGYsMHgwMCB9LAorICAxNiwgMHhjODQwLCAwLCB7MHhiMywweGEwLDB4MjAsMHhiMCwweDAzLDB4MzAsMHgwMiwweGNhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjODUwLCAwLCB7MHhhMCwweDAxLDB4MGMsMHg0MSwweDg3LDB4MzQsMHgyZCwweGMwLDB4MDgsMHg2MCwweDAyLDB4OWUsMHg0MCwweGI3LDB4YTAsMHgyZCB9LAorICAxNiwgMHhjODYwLCAwLCB7MHhjMCwweDA4LDB4NzMsMHgwMiwweGRjLDB4MDAsMHg4NywweDIwLDB4MmQsMHhjMCwweDBiLDB4NzAsMHg4MiwweGRkLDB4ODUsMHhiZiB9LAorICAxNiwgMHhjODcwLCAwLCB7MHg4MSwweDYzLDB4YzgsMHg4OCwweDdiLDB4MDIsMHgxYywweDAwLDB4YjcsMHg0MCwweDY1LDB4MDAsMHgxYiwweDcyLDB4MDIsMHhlOCB9LAorICAxNiwgMHhjODgwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFlLDB4MDAsMHhjNywweDgxLDB4M2QsMHhlMCB9LAorICAxNiwgMHhjODkwLCAwLCB7MHhkZCwweDcwLDB4MDMsMHhmZSwweDgwLDB4ZjcsMHg5MCwweDNmLDB4ZTAsMHgyYywweDc5LDB4MDMsMHhmZSwweDgwLDB4YzcsMHhhMCB9LAorICAxNiwgMHhjOGEwLCAwLCB7MHgzOSwweGUwLDB4MGYsMHg3YSwweDAyLDB4ZGUsMHg4NCwweGY3LDB4YzIsMHgzMSwweGYyLDB4MGMsMHg3OSwweDAzLDB4NWUsMHgwNCB9LAorICAxNiwgMHhjOGIwLCAwLCB7MHhmNywweDg0LDB4MzEsMHg2MCwweDBmLDB4N2UsMHgwMywweGVhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjOGMwLCAwLCB7MHgwOCwweDFkLDB4YWQsMHgwYSwweGZiLDB4NjAsMHg3ZSwweGQ0LDB4MGYsMHgzMCwweDAzLDB4NmMsMHgwMCwweGNiLDB4MDAsMHgzMiB9LAorICAxNiwgMHhjOGQwLCAwLCB7MHhkZSwweDJmLDB4YjIsMHgwMywweGVkLDB4NDIsMHgxYiwweDYwLDB4M2UsMHhjMSwweDBkLDB4YjEsMHgwMywweGVjLDB4NTAsMHhmNyB9LAorICAxNiwgMHhjOGUwLCAwLCB7MHg4MCwweDNkLDB4ZDgsMHgyZSwweDMyLDB4MDMsMHhlYywweDMwLDB4ZmIsMHgwMCwweDNlLDB4NDAsMHgwZiwweGIwLDB4MDMsMHhjMiB9LAorICAxNiwgMHhjOGYwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGZmLDB4MDAsMHhjYiwweGQwLDB4M2YsMHhmMCB9LAorICAxNiwgMHhjOTAwLCAwLCB7MHg0YywweGY4LDB4MTMsMHhmZSwweDAwLDB4Y2YsMHg4OCwweDNmLDB4ZTAsMHgwYywweGY4LDB4NDMsMHgzZiwweDAwLDB4Y2YsMHhjOCB9LAorICAxNiwgMHhjOTEwLCAwLCB7MHgzMywweGUwLDB4MGMsMHhmOCwweDAzLDB4ZmUsMHgwMCwweGZmLDB4ODAsMHgzZiwweGUwLDB4MmMsMHhmOCwweDAzLDB4YmUsMHgyMCB9LAorICAxNiwgMHhjOTIwLCAwLCB7MHhjNywweDgwLDB4MzMsMHhlMCwweDBjLDB4ZjgsMHgwMSwweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjOTMwLCAwLCB7MHhhOCwweDAxLDB4YmMsMHg0MCwweDg3LDB4OTAsMHgzZCwweGMwLDB4MDgsMHg0MCwweDAyLDB4ZGMsMHg4MCwweGQ3LDB4MDAsMHgyZCB9LAorICAxNiwgMHhjOTQwLCAwLCB7MHhjMCwweDBjLDB4MzAsMHgwMywweDdjLDB4MDAsMHg4NywweDEwLDB4MjEsMHhjNCwweDFlLDB4NzAsMHgyMCwweGRjLDB4NDQsMHhiNyB9LAorICAxNiwgMHhjOTUwLCAwLCB7MHgwMCwweDM5LDB4YzAsMHgwYywweDcxLDB4MDIsMHgxYywweDQwLDB4ZDcsMHgwMiwweDI5LDB4NDAsMHgwOCwweDcwLDB4MDIsMHgyYSB9LAorICAxNiwgMHhjOTYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4MDAsMHg4NywweDMyLDB4MmQsMHhjMCB9LAorICAxNiwgMHhjOTcwLCAwLCB7MHgwOCwweDcwLDB4MDIsMHhkYywweDAxLDB4ODcsMHgwMCwweDJjLDB4YzAsMHgyYiwweDcwLDB4MGEsMHg1YywweDAwLDB4ODMsMHgwMCB9LAorICAxNiwgMHhjOTgwLCAwLCB7MHgyMywweGMwLDB4MDgsMHg3MCwweDAyLDB4ZGQsMHgwMCwweGI3LDB4MDAsMHgyZCwweGM0LDB4MGIsMHhmMCwweDAyLDB4OWMsMHgyMCB9LAorICAxNiwgMHhjOTkwLCAwLCB7MHg4NywweDE4LDB4MjksMHg0MCwweDA4LDB4NzAsMHg4MiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjOWEwLCAwLCB7MHgyMCwweDE0LDB4Y2MsMHgwMCwweDgzLDB4MDIsMHgyOCwweGMwLDB4MDgsMHgxMCwweDAyLDB4Y2MsMHgwOCwweDgzLDB4NDAsMHgyZSB9LAorICAxNiwgMHhjOWIwLCAwLCB7MHhjMCwweDJhLDB4MzAsMHgwMiwweDBjLDB4MDAsMHg4YiwweDAwLDB4MjAsMHhmMiwweDBhLDB4MzAsMHgwMiwweGNlLDB4MDAsMHhiMyB9LAorICAxNiwgMHhjOWMwLCAwLCB7MHg4OCwweDJhLDB4ZDAsMHgwYSwweDMwLDB4MDYsMHgwYywweDAwLDB4OTIsMHgwMCwweDI4LDB4NzgsMHgwOCwweDNjLDB4NDIsMHgwOCB9LAorICAxNiwgMHhjOWQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGJjLDB4MDIsMHhjNywweDAwLDB4MmYsMHhjMCB9LAorICAxNiwgMHhjOWUwLCAwLCB7MHgyYywweDkwLDB4MDIsMHhmYywweDAyLDB4OGYsMHhkOCwweDNmLDB4YzAsMHg0YiwweGYwLDB4MDIsMHg3YywweDAyLDB4Y2YsMHgwMCB9LAorICAxNiwgMHhjOWYwLCAwLCB7MHgyMCwweGYyLDB4MDgsMHhiMCwweDEzLDB4ZWUsMHg4MCwweGZmLDB4MDAsMHgzZiwweGQ0LDB4MmUsMHhiZCwweDgzLDB4YWMsMHgwMCB9LAorICAxNiwgMHhjYTAwLCAwLCB7MHhjYiwweDgwLDB4M2EsMHhhMCwweGFjLDB4YjgsMHgwMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjYTEwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGZiLDB4MTAsMHgzZSwweGMwLDB4MGYsMHg4NCwweDAzLDB4ZWMsMHgxMCwweGZiLDB4MDAsMHgzZSB9LAorICAxNiwgMHhjYTIwLCAwLCB7MHhjMCwweDAxLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmYiwweDAwLDB4YmUsMHhjMCwweDBlLDB4YjAsMHgyMywweGVjLDB4MDgsMHhmYiB9LAorICAxNiwgMHhjYTMwLCAwLCB7MHgxMCwweDNmLDB4YzAsMHgwZCwweGI0LDB4MDMsMHhlZCwweDA0LDB4ZjksMHgwMCwweDFlLDB4MTQsMHhjZiwweGIwLDB4ODMsMHhlMCB9LAorICAxNiwgMHhjYTQwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGZjLDB4MDAsMHhjZiwweDAwLDB4MzAsMHhjMCB9LAorICAxNiwgMHhjYTUwLCAwLCB7MHgwYywweDQwLDB4MDMsMHhhYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgyYywweGIwLDB4MDMsMHhiYywweDAwLDB4ZmYsMHgwMCB9LAorICAxNiwgMHhjYTYwLCAwLCB7MHhiMywweGUwLDB4MGQsMHhmYSwweDAzLDB4N2UsMHg4MCwweGNmLDB4MDAsMHgzMywweGMwLDB4MGMsMHhmYywweDQzLDB4ZmYsMHgyMCB9LAorICAxNiwgMHhjYTcwLCAwLCB7MHhmZiwweDAwLDB4M2YsMHg0MCwweDA4LDB4ZjgsMHgwMywweGMwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjYTgwLCAwLCB7MHg4MSwweDA0LDB4NmMsMHgxMCwweGFiLDB4MDAsMHgyYSwweGMwLDB4MGEsMHg4ZSwweDQyLDB4MmMsMHgwNCwweGJiLDB4MDAsMHgyZSB9LAorICAxNiwgMHhjYTkwLCAwLCB7MHhjMCwweDA4LDB4YjAsMHgwMiwweDZjLDB4MDAsMHhiYiwweDAwLDB4M2EsMHhjMCwweDBlLDB4MzAsMHgwMiwweDBkLDB4MDgsMHg4MyB9LAorICAxNiwgMHhjYWEwLCAwLCB7MHgwMiwweDIyLDB4YzAsMHgwYSwweGJjLDB4MDIsMHhlZiwweDAwLDB4YmIsMHhjMCwweDJjLDB4NjgsMHgwYSwweGI5LDB4MDIsMHhlMCB9LAorICAxNiwgMHhjYWIwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDBjLDB4MDAsMHg4YiwweDAwLDB4MjIsMHhjMCB9LAorICAxNiwgMHhjYWMwLCAwLCB7MHgwOCwweGI4LDB4MDIsMHhhYywweDAwLDB4YmIsMHgwMiwweDJlLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhlYywweDAwLDB4YmIsMHgwMCB9LAorICAxNiwgMHhjYWQwLCAwLCB7MHgyNiwweDQ4LDB4MTksMHhiMCwweDAyLDB4NmQsMHgwMCwweDhiLDB4MDAsMHgyMiwweGMwLDB4MGEsMHhiMCwweDAyLDB4ZWMsMHgwNCB9LAorICAxNiwgMHhjYWUwLCAwLCB7MHhiYiwweDFjLDB4MmUsMHgyMCwweDBhLDB4YjAsMHgwMiwweGUwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjYWYwLCAwLCB7MHgwOCwweDE0LDB4MGMsMHgwMCwweGFiLDB4MjAsMHgyOCwweGMwLDB4MGEsMHgwMCwweDAyLDB4MGMsMHgwMCwweDkzLDB4MDQsMHgyYyB9LAorICAxNiwgMHhjYjAwLCAwLCB7MHhjMSwweDA4LDB4MzAsMHgwMiwweDRjLDB4MDAsMHhiMywweDAwLDB4MjQsMHg0MSwweDA5LDB4YjgsMHgwMiwweDBjLDB4MDIsMHg4MyB9LAorICAxNiwgMHhjYjEwLCAwLCB7MHgwMSwweGEwLDB4YzAsMHgwYSwweDMwLDB4MDIsMHhjYywweDEwLDB4OTMsMHgwMCwweDJjLDB4MDAsMHgwYSwweDMwLDB4MDIsMHhjMiB9LAorICAxNiwgMHhjYjIwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDdjLDB4MDAsMHhjZiwweDI4LDB4MzMsMHhjMCB9LAorICAxNiwgMHhjYjMwLCAwLCB7MHgwYywweGEwLDB4NDYsMHhhYywweDExLDB4YmYsMHgwMCwweDNmLDB4YzAsMHg1YywweGYwLDB4NDMsMHhmYywweDAwLDB4ZmYsMHgwNCB9LAorICAxNiwgMHhjYjQwLCAwLCB7MHgzMiwweDQwLDB4MGQsMHhiMCwweDAzLDB4NmMsMHgwOCwweGNiLDB4MDQsMHgzMSwweGMwLDB4MGMsMHhiMCwweDMzLDB4ZWQsMHg0MCB9LAorICAxNiwgMHhjYjUwLCAwLCB7MHhmYiwweDA0LDB4M2UsMHg0MCwweDBlLDB4YjAsMHgwMywweGMwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjYjYwLCAwLCB7MHhhMCwweDE1LDB4ZmMsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhjMCwweDIzLDB4ZmMsMHgwMSwweGZmLDB4MDAsMHgzZiB9LAorICAxNiwgMHhjYjcwLCAwLCB7MHhjMCwweDRmLDB4ZjAsMHg4NywweDdjLDB4MDAsMHhmZiwweDAwLDB4MzksMHg0MCwweDBlLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZiB9LAorICAxNiwgMHhjYjgwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHgwZiwweDcwLDB4MDMsMHhkYywweDgwLDB4ZmYsMHgwMCwweDNkLDB4NDAsMHgwZiwweDcwLDB4MDMsMHhlOCB9LAorICAxNiwgMHhjYjkwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZjLDB4NDAsMHhlYiwweDQ4LDB4M2UsMHhjMiB9LAorICAxNiwgMHhjYmEwLCAwLCB7MHgwZSwweDA5LDB4MDMsMHhiYywweDYwLDB4YzAsMHgyMCwweDM1LDB4MjQsMHgwZSwweGQyLDB4MTMsMHgyYywweDYwLDB4ZmIsMHg2YSB9LAorICAxNiwgMHhjYmIwLCAwLCB7MHgzMywweGMwLDB4MGYsMHhjYSwweDAzLDB4MjIsMHgyMCwweGMwLDB4ODAsMHgzNywweGMwLDB4MGQsMHhmMCwweDAzLDB4N2MsMHgwMCB9LAorICAxNiwgMHhjYmMwLCAwLCB7MHhlZiwweDAwLDB4MzMsMHgyNCwweDBmLDB4YzgsMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjYmQwLCAwLCB7MHg4MCwweDEwLDB4ZGQsMHgwMCwweDhmLDB4NjAsMHgyZiwweGQ4LDB4MDgsMHhhMiwweDAyLDB4ZmQsMHg4MCwweGM4LDB4NzAsMHgyMiB9LAorICAxNiwgMHhjYmUwLCAwLCB7MHgwMCwweDJjLDB4ZmQsMHgwNywweGRjLDB4ODQsMHhiZiwweDYwLDB4MjMsMHhkMiwweDBiLDB4YmQsMHgwMiwweDIzLDB4MDAsMHg4OCB9LAorICAxNiwgMHhjYmYwLCAwLCB7MHg4MCwweGEyLDB4MjAsMHg4OCwweGIwLDB4MjIsMHgzNCwweDAwLDB4YmIsMHg1MCwweDIyLDB4YzgsMHgwYiwweGIwLDB4MDIsMHgyMCB9LAorICAxNiwgMHhjYzAwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4NDAsMHhhMywweDAzLDB4MmMsMHhjMiB9LAorICAxNiwgMHhjYzEwLCAwLCB7MHgwYSwweDAwLDB4NDIsMHg4YywweDgyLDB4YTMsMHgwYSwweDI0LDB4ODAsMHgwYiwweDMwLDB4MDIsMHhjYywweDkwLDB4YjMsMHgwMCB9LAorICAxNiwgMHhjYzIwLCAwLCB7MHgyOCwweGQ4LDB4MGIsMHgxMCwweDAyLDB4OGMsMHgwMiwweDkwLDB4MDAsMHgyMCwweGMwLDB4MGIsMHgxMCwweDQyLDB4NGMsMHgwMCB9LAorICAxNiwgMHhjYzMwLCAwLCB7MHhiMywweDA0LDB4MjQsMHhjMCwweDBiLDB4MzAsMHgwZSwweGEyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjYzQwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHgxMCwweDliLDB4MDQsMHgyYywweGMwLDB4ZjgsMHg5OCwweDA2LDB4ZWMsMHgwMCwweGFiLDB4ODAsMHgyNiB9LAorICAxNiwgMHhjYzUwLCAwLCB7MHgyMCwweDA4LDB4OTAsMHgyYSwweGFjLDB4MTAsMHhiYiwweDAwLDB4MGEsMHhjMCwweDFiLDB4YjAsMHgyMiwweGFkLDB4MDAsMHg5OCB9LAorICAxNiwgMHhjYzYwLCAwLCB7MHg0MCwweDJhLDB4NzAsMHg0YiwweGIwLDB4MDIsMHgyYywweDAwLDB4YjMsMHgwMCwweGE2LDB4ODYsMHgxYiwweGIwLDB4ODIsMHhiMCB9LAorICAxNiwgMHhjYzcwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGVjLDB4MDAsMHhlYiwweDAwLDB4M2UsMHhjMCB9LAorICAxNiwgMHhjYzgwLCAwLCB7MHg4ZSwweDk4LDB4MDMsMHhhYywweDA4LDB4ZTgsMHhjMCwweDM2LDB4MzAsMHg0ZiwweGIwLDB4NDIsMHhlYywweDAwLDB4ZjksMHg4MCB9LAorICAxNiwgMHhjYzkwLCAwLCB7MHgzYSwweGMwLDB4OGYsMHg4OCwweDQyLDB4MjAsMHgxMCwweGM4LDB4MTAsMHgzMCwweGYwLDB4MGYsMHgzMCwweDEzLDB4NmMsMHgxMCB9LAorICAxNiwgMHhjY2EwLCAwLCB7MHhlYiwweDAwLDB4MzYsMHhmMCwweDBmLDB4YmQsMHgwMywweDkwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjY2IwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwMCwweGVmLDB4MDQsMHg3ZiwweGMwLDB4MGYsMHhmMCwweDQzLDB4ZGMsMHgwMCwweGM0LDB4MDAsMHgzYiB9LAorICAxNiwgMHhjY2MwLCAwLCB7MHg0MCwweDhiLDB4ZGMsMHgwMywweDdjLDB4MTAsMHhmOSwweDkwLDB4MzYsMHhjMiwweDRmLDB4ZjksMHgyMywweDYyLDB4NDEsMHhhYyB9LAorICAxNiwgMHhjY2QwLCAwLCB7MHgwMSwweDEzLDB4NDAsMHgwNCwweGIwLDB4MDMsMHhlNCwweDAwLDB4ZmYsMHgwMCwweDNiLDB4YzAsMHgwZiwweGMwLDB4MDMsMHg3OCB9LAorICAxNiwgMHhjY2UwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweDhjLDB4MTIsMHhjYiwweDAwLDB4ZjIsMHhjMCB9LAorICAxNiwgMHhjY2YwLCAwLCB7MHgwZiwweDgwLDB4MDMsMHhhYywweDA4LDB4ZDksMHgwMCwweDNhLDB4ODAsMHgwZiwweDEyLDB4MDMsMHhhYywweDAwLDB4ZTEsMHgwMCB9LAorICAxNiwgMHhjZDAwLCAwLCB7MHgzMiwweGMwLDB4MGMsMHg5MCwweDAzLDB4ZWQsMHgwMiwweGM4LDB4NDAsMHgzZSwweGQwLDB4MGYsMHg5MCwweDEzLDB4MmMsMHgwMiB9LAorICAxNiwgMHhjZDEwLCAwLCB7MHhkYiwweDAwLDB4M2UsMHg1MCwweDBjLDB4YjQsMHgwMywweDEwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjZDIwLCAwLCB7MHhjOCwweDA1LDB4M2MsMHgwMCwweDhmLDB4MDAsMHgxNywweGMwLDB4MDgsMHg5MCwweDAyLDB4M2MsMHgwOCwweDhkLDB4MDAsMHgyMiB9LAorICAxNiwgMHhjZDMwLCAwLCB7MHg1NCwweDA4LDB4YjQsMHgwMywweDNjLDB4MDAsMHg4OSwweDAwLDB4MjMsMHhjMCwweDQwLDB4MzUsMHgwMiwweGNjLDB4MjQsMHg4MCB9LAorICAxNiwgMHhjZDQwLCAwLCB7MHgwMCwweDIyLDB4NzQsMHg0YywweGIwLDB4MDIsMHgyYywweDAwLDB4OGYsMHgwMCwweDJlLDB4ZDQsMHgwYSwweGIwLDB4MGEsMHgzMiB9LAorICAxNiwgMHhjZDUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwMSwweDRjLDB4MDIsMHg4MywweDAwLDB4MjQsMHhjMCB9LAorICAxNiwgMHhjZDYwLCAwLCB7MHgwOSwweDAwLDB4MDIsMHg4YywweDAxLDB4OTAsMHgwMCwweDZhLDB4NDEsMHgwYSwweDMwLDB4MjAsMHg0ZSwweDEwLDB4MzEsMHgwMiB9LAorICAxNiwgMHhjZDcwLCAwLCB7MHgyYywweGMwLDB4MDksMHgyMCwweDA2LDB4Y2UsMHgwMCwweDgwLDB4MDAsMHg2MCwweGUwLDB4MGEsMHgzMCwweDgyLDB4MGMsMHgwOCB9LAorICAxNiwgMHhjZDgwLCAwLCB7MHg4MywweDA4LDB4MmMsMHhkMCwweDA5LDB4YjAsMHgwMiwweDc4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjZDkwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwNCwweDg3LDB4YjAsMHgyMCwweGVjLDB4MDksMHhlOSwweDAyLDB4OGUsMHg1OCwweDlkLDB4YjAsMHgyYiB9LAorICAxNiwgMHhjZGEwLCAwLCB7MHhhNSwweDQwLDB4NWIsMHgwNiwweGRlLDB4NDAsMHg5NSwweDk0LDB4MmQsMHhlNCwweDE5LDB4N2IsMHgwNiwweGRlLDB4MDAsMHg4NCB9LAorICAxNiwgMHhjZGIwLCAwLCB7MHg4MCwweDYwLDB4ZTAsMHgwYSwweDc4LDB4MGEsMHgxNiwweDEwLDB4ODcsMHg4MCwweDJkLDB4NjgsMHgwYiwweDc5LDB4MDIsMHg0OCB9LAorICAxNiwgMHhjZGMwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHhjYiwweGEwLDB4MjQsMHhlMCB9LAorICAxNiwgMHhjZGQwLCAwLCB7MHgwZiwweDJhLDB4MDMsMHg4ZSwweDAwLDB4ZDIsMHhkMCwweDM4LDB4ZmEsMHgwZiwweDE4LDB4YzMsMHhjZSwweDI0LDB4MzEsMHhiMCB9LAorICAxNiwgMHhjZGUwLCAwLCB7MHgzYywweGU1LDB4MGMsMHgzYiwweDE3LDB4Y2UsMHgwNCwweGMwLDB4ODIsMHgzOCwweGMyLDB4OWUsMHgxMCwweDAzLDB4MGMsMHgwMCB9LAorICAxNiwgMHhjZGYwLCAwLCB7MHhjMywweDAxLDB4M2UsMHhjMCwweDBkLDB4ODEsMHgwMywweDUyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjZTAwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwMCwweGVmLDB4MTAsMHgzZSwweGMyLDB4MGUsMHhiMSwweDIzLDB4MmMsMHhjMSwweGFiLDB4MDEsMHgzNiB9LAorICAxNiwgMHhjZTEwLCAwLCB7MHg4MCwweDBmLDB4YjAsMHgyMywweDJkLDB4OTAsMHhlOSwweDg0LDB4NzIsMHhjOCwweDYyLDB4ZjEsMHgxNywweGZjLDB4MDAsMHhmYyB9LAorICAxNiwgMHhjZTIwLCAwLCB7MHgwMCwweDNiLDB4YzQsMHgxZCwweGYwLDB4MDMsMHhlYywweDAwLDB4ZWYsMHgwOCwweDNmLDB4YzgsMHgwZSwweGYxLDB4MDMsMHg5MCB9LAorICAxNiwgMHhjZTMwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVjLDB4ODAsMHhmYiwweGE0LDB4M2EsMHhjOCB9LAorICAxNiwgMHhjZTQwLCAwLCB7MHgwZSwweDkwLDB4MDMsMHgyYywweDA0LDB4Y2EsMHgwMCwweDMwLDB4NjAsMHgyZCwweDFhLDB4MjcsMHg2YywweDg0LDB4Y2IsMHg2MCB9LAorICAxNiwgMHhjZTUwLCAwLCB7MHgzMiwweGQyLDB4MGMsMHhhMCwweDEzLDB4MmQsMHg4NCwweGNiLDB4MDIsMHgzZSwweGMwLDB4MGQsMHhiOCwweDAzLDB4YWMsMHg4MCB9LAorICAxNiwgMHhjZTYwLCAwLCB7MHhjYiwweDgxLDB4MzIsMHg4MCwweDBjLDB4YjAsMHgwMywweGFhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjZTcwLCAwLCB7MHg0OCwweDExLDB4OWMsMHhhNCwweGI3LDB4MjgsMHg3MywweGMyLDB4MDgsMHhmMCwweDAyLDB4M2MsMHhjMCwweDhmLDB4MDAsMHgzMSB9LAorICAxNiwgMHhjZTgwLCAwLCB7MHhjMCwweDA5LDB4NzAsMHg4MiwweDljLDB4ODAsMHg4NywweDBjLDB4MjAsMHhkOCwweDA5LDB4NzAsMHgyMiwweDFjLDB4MzAsMHg4NCB9LAorICAxNiwgMHhjZTkwLCAwLCB7MHgwMCwweDNkLDB4YzAsMHgwOCwweDcwLDB4MDIsMHgxNCwweDI0LDB4ODcsMHhhMCwweDIxLDB4YzAsMHgwOCwweDcwLDB4MTIsMHgxMiB9LAorICAxNiwgMHhjZWEwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4NDAsMHhiMywweDk1LDB4MjksMHhlOSB9LAorICAxNiwgMHhjZWIwLCAwLCB7MHgwYSwweDY4LDB4MDIsMHg5ZSwweGQwLDB4ODYsMHhmMCwweGEzLDB4ZTAsMHgwOCwweDc4LDB4MTIsMHg5ZSwweDQ0LDB4YTMsMHg4MiB9LAorICAxNiwgMHhjZWMwLCAwLCB7MHgyMSwweGU4LDB4MGIsMHgzOCwweDAyLDB4MGUsMHgxMCwweDg3LDB4ODAsMHgyZiwweGUwLDB4MGIsMHgxOCwweDAyLDB4OGUsMHgwMiB9LAorICAxNiwgMHhjZWQwLCAwLCB7MHg4NywweDAwLDB4MjEsMHhlMCwweDA4LDB4NzgsMHgwMiwweDMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjZWUwLCAwLCB7MHg0OCwweDE0LDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyNCwweGMwLDB4NDgsMHgzMCwweDAyLDB4MGMsMHgwNCwweDgzLDB4ODAsMHgyMCB9LAorICAxNiwgMHhjZWYwLCAwLCB7MHhkMCwweDA5LDB4MTAsMHgwMiwweDhjLDB4MDYsMHhhMywweDgwLDB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBjLDB4MDIsMHg4MCB9LAorICAxNiwgMHhjZjAwLCAwLCB7MHg0MCwweDI4LDB4ZDIsMHgwYSwweDMwLDB4MDIsMHgwYywweDAxLDB4ODMsMHgwMCwweDIyLDB4M2MsMHgwOCwweDg3LDB4MDIsMHgxMiB9LAorICAxNiwgMHhjZjEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MTgsMHhmYSwweDAwLDB4M2EsMHg4MCB9LAorICAxNiwgMHhjZjIwLCAwLCB7MHg4ZSwweGU0LDB4NDIsMHgyOCwweDAyLDB4Y2UsMHg4MCwweDMzLDB4ODAsMHg0ZCwweGEwLDB4ODMsMHhlOCwweDAwLDB4ZWEsMHhhMCB9LAorICAxNiwgMHhjZjMwLCAwLCB7MHhiMiwweDgwLDB4MGEsMHhhMCwweDBhLDB4MjgsMHgwMCwweGNlLDB4MTgsMHgyZiwweDgwLDB4MGYsMHhhMCwweDEzLDB4YTgsMHgwMCB9LAorICAxNiwgMHhjZjQwLCAwLCB7MHhjYSwweDAwLDB4MzIsMHg5MCwweDJjLDB4YWMsMHgwYiwweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjZjUwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4MDQsMHgzYSwweDAwLDB4MGYsMHg4MCwweDgzLDB4YzAsMHgwOCwweGU4LDB4MDMsMHgzYSB9LAorICAxNiwgMHhjZjYwLCAwLCB7MHgwMCwweDBlLDB4ODAsMHgyMiwweGMwLDB4MDAsMHhkMCwweDAwLDB4N2UsMHgxMCwweGE0LDB4ODAsMHgwMywweGMwLDB4MDAsMHhmOCB9LAorICAxNiwgMHhjZjcwLCAwLCB7MHgwMCwweDNlLDB4MTAsMHgwZCwweDg0LDB4MDMsMHhjMCwweDAwLDB4ZjgsMHgwMCwweGJlLDB4MDAsMHgwZiwweDgwLDB4MDEsMHg1MiB9LAorICAxNiwgMHhjZjgwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGM0LDB4MDIsMHhjOSwweDAwLDB4MzYsMHg0MCB9LAorICAxNiwgMHhjZjkwLCAwLCB7MHgwYywweDkwLDB4MDMsMHg2NCwweDAyLDB4ODksMHgwNCwweDMyLDB4NDIsMHgwZCwweDkyLDB4MDMsMHhlNiwweDQyLDB4YzksMHgwMCB9LAorICAxNiwgMHhjZmEwLCAwLCB7MHgzMiwweDcwLDB4MGUsMHgxMiwweDBiLDB4MjQsMHgwOCwweGM5LDB4MDAsMHgzZSwweDQ1LDB4MGUsMHg5OSwweDAzLDB4ZTQsMHgwMiB9LAorICAxNiwgMHhjZmIwLCAwLCB7MHhjMSwweDAwLDB4MzIsMHg1MCwweDA0LDB4OTQsMHgwMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjZmMwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4MDAsMHg2ZSwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMCwweDg5LDB4MDAsMHgyMiB9LAorICAxNiwgMHhjZmQwLCAwLCB7MHg1NCwweDBiLDB4OTAsMHgwMywweGU2LDB4MDAsMHg4OSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwYSwweDI0LDB4MDAsMHg4OSB9LAorICAxNiwgMHhjZmUwLCAwLCB7MHgwMCwweDM4LDB4NDgsMHgwOCwweDkwLDB4ODIsMHhlNCwweDA0LDB4ZDksMHgwMCwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyMCB9LAorICAxNiwgMHhjZmYwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDAsMHg4OSwweDAxLDB4MmMsMHg0MCB9LAorICAxNiwgMHhkMDAwLCAwLCB7MHgyOCwweDEwLDB4NDIsMHg2NCwweDAwLDB4YTEsMHgwNCwweDIyLDB4NTAsMHgwMSwweDkwLDB4NDIsMHhlNCwweDAwLDB4ODksMHgwNCB9LAorICAxNiwgMHhkMDEwLCAwLCB7MHgyMCwweDQyLDB4MGEsMHg5MCwweDQyLDB4MzQsMHgwMCwweDg5LDB4MDAsMHg2ZSwweDQwLDB4MGEsMHg5MCwweDAwLDB4ZTQsMHgwMCB9LAorICAxNiwgMHhkMDIwLCAwLCB7MHg4OSwweDAwLDB4MjMsMHg0MCwweDBhLDB4ZDAsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMDMwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweDgxLDB4MjQsMHgyYywweDQ4LDB4MDgsMHgxMCwweDAyLDB4MDQsMHg4MCwweGExLDB4MjAsMHgyOCB9LAorICAxNiwgMHhkMDQwLCAwLCB7MHg0MCwweDBiLDB4MTAsMHgwMiwweDg1LDB4ODAsMHg4MSwweDIwLDB4MjAsMHg0OCwweDA4LDB4NTAsMHg2MiwweDE0LDB4MDIsMHg4MSB9LAorICAxNiwgMHhkMDUwLCAwLCB7MHgwMywweDJlLDB4NDAsMHg4OCwweDE2LDB4ODIsMHhjNCwweGEwLDB4OTEsMHgyOCwweDIxLDB4NDAsMHgyYSwweDUwLDB4MDIsMHgwMiB9LAorICAxNiwgMHhkMDYwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYxLDB4NDAsMHhjOCwweDUwLDB4MmUsMHgxNCB9LAorICAxNiwgMHhkMDcwLCAwLCB7MHgwYywweDg1LDB4MDMsMHg2MSwweDQwLDB4ZTgsMHg1MCwweGIyLDB4MTUsMHg0ZCwweDgwLDB4MDIsMHhjMCwweDAwLDB4NDgsMHg1MCB9LAorICAxNiwgMHhkMDgwLCAwLCB7MHhiMiwweDE1LDB4MWEsMHg4MCwweDEzLDB4MzAsMHgwOCwweGM4LDB4MDAsMHgzZSwweDAwLDB4MGUsMHg4MiwweDAzLDB4ZTAsMHg4MCB9LAorICAxNiwgMHhkMDkwLCAwLCB7MHhjMCwweDIwLDB4MzAsMHgwMCwweDBlLDB4NDAsMHgwYiwweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMGEwLCAwLCB7MHg5OCwweDFkLDB4ZTQsMHg0MCwweGY5LDB4MTAsMHgzZSwweDQ0LDB4MGYsMHhkMCwweDAzLDB4ZTQsMHg0OCwweGRkLDB4MTAsMHgzNyB9LAorICAxNiwgMHhkMGIwLCAwLCB7MHg0MCwweDBmLDB4ZDQsMHgwNywweGU0LDB4NDAsMHhmZCwweDEwLDB4M2UsMHg0NSwweDBmLDB4OTQsMHgwMywweGU1LDB4MDgsMHhmZCB9LAorICAxNiwgMHhkMGMwLCAwLCB7MHgwMiwweDM5LDB4ZDAsMHgwZiwweGQwLDB4NDMsMHhmNCwweGEwLDB4ZjksMHgyOCwweDNlLDB4NGIsMHgwZCwweDkyLDB4ODMsMHhlNiB9LAorICAxNiwgMHhkMGQwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGU2LDB4ODAsMHhjOSwweGE2LDB4MzIsMHg2OCB9LAorICAxNiwgMHhkMGUwLCAwLCB7MHgwYywweDkwLDB4MDMsMHhhNiwweDgxLDB4ZTksMHhlOSwweDNiLDB4NDAsMHgwZSwweDU4LDB4MDMsMHgzNiwweDIwLDB4YzksMHhhMCB9LAorICAxNiwgMHhkMGYwLCAwLCB7MHgzNywweDc4LDB4MGQsMHhkYSwweDAzLDB4MzYsMHgyNiwweGM1LDB4MDAsMHgzNywweDY5LDB4MGUsMHhkZSwweDAzLDB4YTYsMHg4MiB9LAorICAxNiwgMHhkMTAwLCAwLCB7MHhjZCwweGMwLDB4MzMsMHg1MCwweDBmLDB4ZDAsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMTEwLCAwLCB7MHgzOCwweDEwLDB4ZTMsMHhhNCwweDg4LDB4YTksMHgyMiwweDNhLDB4MDgsMHgwOCwweDAwLDB4MjIsMHhhMCwweGI4LDB4ZTUsMHgzMCB9LAorICAxNiwgMHhkMTIwLCAwLCB7MHgyMCwweDI4LDB4ODAsMHgyMiwweDQzLDB4YTAsMHgwOCwweGU4LDB4MmEsMHgzZCwweDA4LDB4YTQsMHg2MiwweDIwLDB4MDAsMHg4OCB9LAorICAxNiwgMHhkMTMwLCAwLCB7MHgwMCwweDJlLDB4MTAsMHgwOCwweDhlLDB4MDMsMHgyMywweGEwLDB4ODgsMHhhMCwweDIwLDB4MjgsMHgwYiwweDhhLDB4ODIsMHgwZSB9LAorICAxNiwgMHhkMTQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4NDAsMHg5MSwweDQwLDB4MjAsMHg0NCB9LAorICAxNiwgMHhkMTUwLCAwLCB7MHgwOCwweDkwLDB4YTIsMHg4NSwweDEwLDB4YTEsMHgyMCwweDJjLDB4NDIsMHgwYiwweDE0LDB4MTIsMHg4YywweDAxLDB4OTEsMHgxMCB9LAorICAxNiwgMHhkMTYwLCAwLCB7MHgyYywweDQ4LDB4MDksMHgxMSwweDBhLDB4YzQsMHgwMCwweDgxLDB4MDAsMHgyYywweDUwLDB4MGIsMHgxMSwweDEyLDB4YzUsMHgwMSB9LAorICAxNiwgMHhkMTcwLCAwLCB7MHhiMSwweDQwLDB4MjQsMHg0OCwweDBiLDB4MTgsMHgwZSwweDAyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMTgwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMCwweDkxLDB4MDAsMHgyMiwweDQxLDB4MDgsMHg5NCwweDQyLDB4MjQsMHgwMCwweGIxLDB4NDAsMHgyMCB9LAorICAxNiwgMHhkMTkwLCAwLCB7MHg0MCwweDQ5LDB4YjIsMHg2MiwweDI0LDB4MDAsMHg5OSwweDAwLDB4MGEsMHg0MCwweDA4LDB4OTAsMHgwMiwweGU1LDB4ODAsMHg4OSB9LAorICAxNiwgMHhkMWEwLCAwLCB7MHgwMCwweDJlLDB4NDAsMHgwOSwweGIwLDB4MDIsMHgyNCwweDgwLDB4YjksMHgwMCwweDI2LDB4NTAsMHg0YiwweDkwLDB4MDIsMHgwNiB9LAorICAxNiwgMHhkMWIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU0LDB4MDIsMHhkOSwweDAwLDB4YjIsMHg0MCB9LAorICAxNiwgMHhkMWMwLCAwLCB7MHgyYywweDk1LDB4MTMsMHhhNCwweDEwLDB4ZTksMHgwMCwweGJlLDB4NjAsMHg4ZiwweDkwLDB4MGIsMHhhNCwweDEwLDB4NTksMHgwMCB9LAorICAxNiwgMHhkMWQwLCAwLCB7MHgxZSwweDQwLDB4OWQsMHg5NCwweDIzLDB4ZTQsMHgwMiwweDg5LDB4MDAsMHgzNCwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTYsMHgwOCB9LAorICAxNiwgMHhkMWUwLCAwLCB7MHg3OSwweDAwLDB4YjYsMHg0MCwweDA3LDB4OTgsMHgwMywweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMWYwLCAwLCB7MHgyOCwweDAxLDB4ODQsMHgwMCwweGU5LDB4MDIsMHgzYywweDQwLDB4MmYsMHg5OCwweDAyLDB4ZTQsMHgwMCwweGY5LDB4NDIsMHgzYSB9LAorICAxNiwgMHhkMjAwLCAwLCB7MHg2OCwweDBhLDB4MTAsMHgwMywweGU0LDB4MTAsMHhlOSwweDAwLDB4M2UsMHg0MCwweDBlLDB4OTAsMHgwZiwweDI2LDB4MDAsMHhmOSB9LAorICAxNiwgMHhkMjEwLCAwLCB7MHgwNCwweDNlLDB4NDAsMHgwZSwweDFjLDB4MDMsMHhlNiwweDAwLDB4YzEsMHgwMCwweDNhLDB4NTAsMHgwZiwweDk5LDB4ODMsMHhjYSB9LAorICAxNiwgMHhkMjIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDAsMHhlOCwweDAwLDB4M2EsMHgwMCB9LAorICAxNiwgMHhkMjMwLCAwLCB7MHgwYywweDg0LDB4MDMsMHgyMCwweDAwLDB4ZDgsMHg0MiwweDMyLDB4MDQsMHgwYywweDg4LDB4MTMsMHhlMCwweDAwLDB4YzgsMHgwMCB9LAorICAxNiwgMHhkMjQwLCAwLCB7MHgzMCwweDAwLDB4MGMsMHgwNCwweDBiLDB4MDAsMHgwMCwweGQ4LDB4MDAsMHgzNiwweDAwLDB4MGUsMHg4MCwweDIzLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMjUwLCAwLCB7MHhjOCwweDgwLDB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMSwweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMjYwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgxMCwweDhhLDB4MDAsMHgyZSwweDgwLDB4MjgsMHgyMCwweDIyLDB4MjgsMHgwMCwweDhhLDB4MDAsMHgyMyB9LAorICAxNiwgMHhkMjcwLCAwLCB7MHhiMCwweDg4LDB4ZTAsMHgwMiwweDI4LDB4MTAsMHhkYSwweDAwLDB4YTMsMHhiNCwweDA4LDB4ZTgsMHgxMCwweDI4LDB4MDAsMHg4ZSB9LAorICAxNiwgMHhkMjgwLCAwLCB7MHgyMCwweDIzLDB4YTAsMHg0OCwweGVkLDB4MWEsMHgyOCwweDAwLDB4ZGUsMHgwMCwweDIzLDB4OTAsMHgwYSwweGUwLDB4MDIsMHgwYSB9LAorICAxNiwgMHhkMjkwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDAsMHhhMywweDAwLDB4MjgsMHhjMCB9LAorICAxNiwgMHhkMmEwLCAwLCB7MHgwOCwweDMwLDB4MGEsMHgwYywweDAwLDB4OTMsMHgwMCwweDIwLDB4YzIsMHgyYSwweDMwLDB4MjIsMHhhNCwweDAwLDB4YmIsMHgwMCB9LAorICAxNiwgMHhkMmIwLCAwLCB7MHgwOCwweGUwLDB4MTgsMHgwOSwweDBhLDB4NGMsMHgwMCwweDkzLDB4MDIsMHgyNCwweGU4LDB4MDIsMHgwOCwweDA2LDB4NGMsMHgwMCB9LAorICAxNiwgMHhkMmMwLCAwLCB7MHg5MywweDAwLDB4MjAsMHhkOCwweDBhLDB4OTAsMHgwMiwweDRhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMmQwLCAwLCB7MHhhMCwweDAxLDB4MWMsMHg4MCwweDg3LDB4MDQsMHgyZCwweGMwLDB4MDgsMHg3MCwweDAyLDB4MGUsMHgwMCwweDg3LDB4MTAsMHgyNSB9LAorICAxNiwgMHhkMmUwLCAwLCB7MHgwMCwweDBhLDB4NjAsMHgwMiwweDVlLDB4MDAsMHg5NywweDAwLDB4MjksMHg4MiwweDA4LDB4NTAsMHgxMiwweDU0LDB4MDAsMHg4ZiB9LAorICAxNiwgMHhkMmYwLCAwLCB7MHg4MCwweDYxLDB4ZDAsMHgwOCwweDA0LDB4MDIsMHg1YywweDAxLDB4YjcsMHgwOCwweGE5LDB4YTAsMHgwYSwweDUwLDB4ODIsMHg2OCB9LAorICAxNiwgMHhkMzAwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDNlLDB4ODAsMHhlNywweDgwLDB4MzgsMHhlNCB9LAorICAxNiwgMHhkMzEwLCAwLCB7MHgwOCwweDdlLDB4MDMsMHgxZiwweDAwLDB4ZGYsMHg4MCwweGIxLDB4MjEsMHgxZSwweDc4LDB4MDMsMHhkYywweDA0LDB4ZjMsMHg4MCB9LAorICAxNiwgMHhkMzIwLCAwLCB7MHg1YiwweGUxLDB4MDgsMHgyOCwweDAzLDB4NWUsMHgwMCwweGQ3LDB4ODAsMHgzNSwweDYwLDB4MGUsMHg2OCwweDAzLDB4NGUsMHgwMCB9LAorICAxNiwgMHhkMzMwLCAwLCB7MHhkZiwweDgwLDB4MzEsMHhlMCwweDBlLDB4ZjgsMHgwYiwweDZhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMzQwLCAwLCB7MHgwOCwweDFkLDB4YWQsMHgwMiwweGZiLDB4NzQsMHgzZSwweGQwLDB4NGYsMHhiMiwweDgzLDB4ZWQsMHgwMCwweDdiLDB4NjgsMHgzYSB9LAorICAxNiwgMHhkMzUwLCAwLCB7MHgwMCwweDhkLDB4ODAsMHgwMywweGE0LDB4MjAsMHhkYiwweDAxLDB4MzYsMHg4MCwweDZmLDB4YjAsMHg0MSwweDg0LDB4MDAsMHhlYiB9LAorICAxNiwgMHhkMzYwLCAwLCB7MHgwMCwweDNjLDB4YzAsMHgwZiwweGU2LDB4ODMsMHhiYywweDQwLDB4ZGIsMHgwMCwweGI2LDB4ODAsMHgwZiwweGIwLDB4MDMsMHg4MiB9LAorICAxNiwgMHhkMzcwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGZmLDB4MjAsMHhkZiwweGMwLDB4M2IsMHhlNiB9LAorICAxNiwgMHhkMzgwLCAwLCB7MHgwZSwweGY4LDB4MTMsMHhmZiwweDQ0LDB4YzcsMHg4MiwweDNiLDB4ZTAsMHgwZiwweGY5LDB4MDMsMHhiZSwweDEwLDB4Y2YsMHhjOCB9LAorICAxNiwgMHhkMzkwLCAwLCB7MHgzMywweDYwLDB4OGQsMHhlYiwweDAzLDB4M2UsMHgwMCwweGRiLDB4ODIsMHgzZiwweGUwLDB4MGMsMHhkOCwweDAzLDB4M2UsMHg0MCB9LAorICAxNiwgMHhkM2EwLCAwLCB7MHhjZSwweDgwLDB4MzMsMHhlNCwweDBmLDB4ZjgsMHgwMywweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkM2IwLCAwLCB7MHhhOCwweDExLDB4YmMsMHg0MCwweDg3LDB4MDAsMHgyMSwweGU0LDB4MGIsMHg3OCwweGEyLDB4Y2UsMHg5MCwweGM3LDB4YjAsMHgyMCB9LAorICAxNiwgMHhkM2MwLCAwLCB7MHhlOCwweDBiLDB4MjgsMHg5MiwweGI2LDB4ODgsMHg4NywweGEwLDB4MjAsMHg2NCwweDBiLDB4MzUsMHgwMywweDE0LDB4MDAsMHg4NyB9LAorICAxNiwgMHhkM2QwLCAwLCB7MHhiMiwweDM5LDB4YzAsMHgyYywweGMwLDB4MDMsMHg1ZSwweDAyLDB4Y2YsMHgwMCwweDMxLDB4Y2UsMHgwYiwweDc2LDB4MTIsMHgyYSB9LAorICAxNiwgMHhkM2UwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4MDAsMHhhMywweDEwLDB4MjksMHhjOCB9LAorICAxNiwgMHhkM2YwLCAwLCB7MHgwYiwweDc0LDB4MDIsMHhkYywweDgwLDB4OGYsMHgwMCwweDI5LDB4Y2MsMHgwYSwweDMwLDB4MDYsMHgxNCwweDgwLDB4ODcsMHgxMCB9LAorICAxNiwgMHhkNDAwLCAwLCB7MHgyMSwweGMwLDB4MGIsMHg2NiwweDAyLDB4NWMsMHgwMCwweDg3LDB4MDAsMHgyZCwweGMwLDB4MGIsMHg1MSwweDAyLDB4MWMsMHg4MCB9LAorICAxNiwgMHhkNDEwLCAwLCB7MHg5NiwweDAwLDB4MjEsMHhjMCwweDViLDB4NzQsMHg4MiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNDIwLCAwLCB7MHgyMCwweDE0LDB4Y2MsMHgwOCwweGEzLDB4MDAsMHgyMCwweGMwLDB4MGIsMHhiOCwweDAyLDB4Y2MsMHgwMCwweDhiLDB4NDAsMHhhOCB9LAorICAxNiwgMHhkNDMwLCAwLCB7MHhjMCwweDhiLDB4MDgsMHgyMiwweDhjLDB4MDIsMHg4MywweDAwLDB4NjAsMHhjMCwweDBiLDB4MzAsMHg0MiwweDA0LDB4MDAsMHg4MyB9LAorICAxNiwgMHhkNDQwLCAwLCB7MHg0MCwweDI4LDB4ZmMsMHg4YSwweDAwLDB4MDIsMHg2ZSwweDAwLDB4ODMsMHgwMCwweGEwLDB4ZDAsMHg4YiwweDM4LDB4MDIsMHgwOCB9LAorICAxNiwgMHhkNDUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxMSwweGJjLDB4MDIsMHhlZiwweDAwLDB4M2IsMHhjMCB9LAorICAxNiwgMHhkNDYwLCAwLCB7MHg0ZiwweGY4LDB4MDIsMHhmYywweDAyLDB4Y2YsMHgwMCwweDM4LDB4MTIsMHgwZSwweDk4LDB4MDIsMHgyYywweDAwLDB4Y2YsMHgwMCB9LAorICAxNiwgMHhkNDcwLCAwLCB7MHgzMiwweGMwLDB4MDksMHg5MCwweDAzLDB4NjQsMHgwMiwweDgxLDB4YzAsMHgzZSwweGQwLDB4MGYsMHg5MCwweDA3LDB4M2MsMHgwMyB9LAorICAxNiwgMHhkNDgwLCAwLCB7MHhkOSwweDAwLDB4MzIsMHg2MCwweDBmLDB4ODgsMHgwMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNDkwLCAwLCB7MHg4MCwweDAwLDB4Y2MsMHgwMCwweGRiLDB4MDAsMHgzZSwweGMwLDB4OGYsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDIsMHgzNiB9LAorICAxNiwgMHhkNGEwLCAwLCB7MHhjMCwweDRmLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhmYiwweDAwLDB4YmUsMHg5MCwweDBmLDB4OWMsMHgxMywweGVjLDB4MDAsMHhlOSB9LAorICAxNiwgMHhkNGIwLCAwLCB7MHgxOCwweDNhLDB4ZDAsMHgwNCwweGQ1LDB4MDMsMHhlYywweDQwLDB4ZTksMHgwMCwweDNhLDB4MDAsMHg4ZiwweDgwLDB4MDMsMHhlMCB9LAorICAxNiwgMHhkNGMwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGZjLDB4MDAsMHhjZiwweDAwLDB4M2QsMHhjMSB9LAorICAxNiwgMHhkNGQwLCAwLCB7MHg4YywweGYwLDB4MDMsMHgyYywweDAwLDB4ZWYsMHgwYSwweGIzLDB4MTIsMHgyYywweDcwLDB4MjMsMHgxNCwweDBhLDB4NGYsMHgwMCB9LAorICAxNiwgMHhkNGUwLCAwLCB7MHgzNSwweDYwLDB4MGQsMHhiMCwweDAzLDB4MDQsMHgwMCwweGNkLDB4ODAsMHgwNywweGU4LDB4MGMsMHhjNCwweDAzLDB4MmMsMHgwMCB9LAorICAxNiwgMHhkNGYwLCAwLCB7MHhjZCwweDAwLDB4MzEsMHhlMiwweDJjLDB4ZTAsMHgwMywweDAwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNTAwLCAwLCB7MHg4MSwweDA0LDB4NmMsMHgwMiwweGFiLDB4MDIsMHgyZSwweGMwLDB4MGUsMHhiMCwweDAyLDB4MmMsMHgwMCwweDhiLDB4MDAsMHgzMiB9LAorICAxNiwgMHhkNTEwLCAwLCB7MHgzMCwweDAwLDB4OWMsMHgwMywweDZjLDB4MDAsMHg4YiwweDA0LDB4MjIsMHgzNiwweDA4LDB4MzQsMHg0YSwweDJjLDB4MDgsMHg4OSB9LAorICAxNiwgMHhkNTIwLCAwLCB7MHg5MCwweDIwLDB4YjgsMHgwZiwweDg0LDB4MDAsMHhhYywweDAyLDB4ODksMHgwMCwweDM2LDB4YTAsMHgwOCwweGE0LDB4MDIsMHgyMCB9LAorICAxNiwgMHhkNTMwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHg4YiwweDAwLDB4MmUsMHhjMCB9LAorICAxNiwgMHhkNTQwLCAwLCB7MHgwOCwweGIwLDB4MDIsMHgwYywweDAwLDB4OGIsMHgwMCwweDIyLDB4ZDEsMHgwOCwweDg4LDB4MTIsMHgyNiwweDAwLDB4YTMsMHgwMCB9LAorICAxNiwgMHhkNTUwLCAwLCB7MHgyNiwweDQwLDB4MGIsMHhiMCwweDAyLDB4MjYsMHgwMCwweDhiLDB4MDAsMHgyNiwweGMwLDB4NTgsMHgxMCwweDEyLDB4MmMsMHgwNCB9LAorICAxNiwgMHhkNTYwLCAwLCB7MHg4MiwweDgwLDB4MmEsMHg0OSwweDA4LDB4MzAsMHgwMiwweDIwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNTcwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMCwweGEzLDB4MTQsMHgyYywweGM4LDB4MWEsMHgzNCwweDhhLDB4MGMsMHg4NCwweDgzLDB4NDAsMHgyMiB9LAorICAxNiwgMHhkNTgwLCAwLCB7MHhjOCwweDA4LDB4MDMsMHg2MiwweDRjLDB4YzAsMHhhMywweDYwLDB4MjAsMHg0MCwweDBhLDB4MzAsMHgwMiwweDBjLDB4MDAsMHg4YiB9LAorICAxNiwgMHhkNTkwLCAwLCB7MHg0NSwweDA4LDB4YzAsMHgwYiwweDEwLDB4MDIsMHg4YywweGEwLDB4ODMsMHgwMCwweDI2LDB4NDAsMHgwOCwweDMwLDB4MGEsMHgwMiB9LAorICAxNiwgMHhkNWEwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDdjLDB4MDAsMHhjZiwweDQwLDB4MmYsMHhkMiB9LAorICAxNiwgMHhkNWIwLCAwLCB7MHg4YywweGY2LDB4MDMsMHgzYywweDIyLDB4Y2YsMHg0MCwweDMyLDB4ZDYsMHg0YywweGE2LDB4YzEsMHgzZCwweGEwLDB4ODcsMHg0OCB9LAorICAxNiwgMHhkNWMwLCAwLCB7MHgzNiwweDBkLDB4MGYsMHhiMSwweDAyLDB4MjQsMHg0MiwweGNiLDB4NjAsMHgxNiwweGMwLDB4MGMsMHhkMCwweDAzLDB4MmMsMHg4MCB9LAorICAxNiwgMHhkNWQwLCAwLCB7MHhjYSwweDAwLDB4MzIsMHhjMCwweDBjLDB4MzAsMHgwMywweDAwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNWUwLCAwLCB7MHhhMCwweDE5LDB4ZmMsMHgwMCwweGZmLDB4MjAsMHgzZSwweGNhLDB4MGUsMHhiMCwweDAzLDB4ZWMsMHgyMCwweGRiLDB4MzQsMHgzYSB9LAorICAxNiwgMHhkNWYwLCAwLCB7MHhjOCwweDBmLDB4ODAsMHgwMywweGU0LDB4MTAsMHhkYiwweDIxLDB4M2UsMHgxOCwweDBkLDB4ZjIsMHgwMywweGZjLDB4ODAsMHhmZiB9LAorICAxNiwgMHhkNjAwLCAwLCB7MHgzMCwweDM1LDB4YzAsMHgwZiwweGMwLDB4MTMsMHhlYywweDAwLDB4ZmYsMHgwMCwweDNiLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhlOCB9LAorICAxNiwgMHhkNjEwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgxMSwweGZjLDB4MDAsMHhmYiwweDBiLDB4MmYsMHhjYSB9LAorICAxNiwgMHhkNjIwLCAwLCB7MHg4ZCwweGYyLDB4MDMsMHhmYSwweDAwLDB4OTYsMHg4MCwweDNiLDB4YzQsMHgwZCwweGYxLDB4MDMsMHg3YywweDgwLDB4ZWMsMHg4MCB9LAorICAxNiwgMHhkNjMwLCAwLCB7MHgzYiwweDA4LDB4MGMsMHhjMiwweDAzLDB4NzQsMHgwMiwweGNjLDB4ODAsMHgzZiwweDQ4LDB4MGUsMHhmMCwweDAzLDB4MzAsMHhhMCB9LAorICAxNiwgMHhkNjQwLCAwLCB7MHhkNSwweDgwLDB4M2YsMHg0MCwweDBjLDB4ZjgsMHgwMywweGYwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNjUwLCAwLCB7MHg4MCwweDA4LDB4ZWUsMHg0MCwweGJmLDB4ODAsMHgyZiwweGYwLDB4MGIsMHhmNywweDIyLDB4ZWUsMHgyMCwweDhhLDB4ODAsMHgyMyB9LAorICAxNiwgMHhkNjYwLCAwLCB7MHhmYywweDg4LDB4NzUsMHgxMiwweDNkLDB4MDAsMHg4OCwweDAwLDB4MjIsMHgwMCwweDI4LDB4ODAsMHgwMiwweDI0LDB4MDgsMHg4OCB9LAorICAxNiwgMHhkNjcwLCAwLCB7MHgwMCwweDZmLDB4NTAsMHgwMCwweGY1LDB4MDIsMHgyOSwweDAwLDB4ODksMHgwMCwweDJlLDB4NTQsMHgwZCwweDkwLDB4MTEsMHhhMCB9LAorICAxNiwgMHhkNjgwLCAwLCB7MHgwNCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4MDAsMHhiMywweDAwLDB4MmMsMHhjMSB9LAorICAxNiwgMHhkNjkwLCAwLCB7MHgwOSwweDMwLDB4ODIsMHhjYywweDgyLDB4YmIsMHgwMCwweDI4LDB4YzAsMHg0OSwweDMyLDB4MDIsMHhjZCwweDAwLDB4YjgsMHgwMCB9LAorICAxNiwgMHhkNmEwLCAwLCB7MHgyYywweDUwLDB4MDksMHgwMSwweDAyLDB4MGMsMHg0MCwweDgwLDB4MDAsMHg2YywweDQ0LDB4MDksMHgzMCwweDAyLDB4MjAsMHgwMCB9LAorICAxNiwgMHhkNmIwLCAwLCB7MHhiMCwweDAwLDB4MmMsMHg0MCwweDE4LDB4MzAsMHgwNiwweGUyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNmMwLCAwLCB7MHhjMCwweDAxLDB4YWMsMHgwMCwweGJiLDB4MDEsMHgyZSwweGMwLDB4MGIsMHhiMCwweDAyLDB4ZWUsMHgwMCwweGFhLDB4MDAsMHg0YSB9LAorICAxNiwgMHhkNmQwLCAwLCB7MHhjMCwweDA4LDB4YjAsMHg1MiwweGVjLDB4MDAsMHg5OCwweDAyLDB4MjYsMHg0MCwweDA5LDB4ODAsMHgwMiwweDZjLDB4MDEsMHhhYSB9LAorICAxNiwgMHhkNmUwLCAwLCB7MHgwNCwweDJlLDB4NDAsMHgwOSwweGIwLDB4MDIsMHgyMiwweDAwLDB4YTksMHg4MCwweDJlLDB4NDEsMHgwOSwweDkwLDB4MDIsMHhmMCB9LAorICAxNiwgMHhkNmYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNSwweGVjLDB4MDAsMHhmYiwweDAwLDB4M2UsMHhjMCB9LAorICAxNiwgMHhkNzAwLCAwLCB7MHgwZCwweGIwLDB4MDMsMHhjZSwweDg0LDB4ZmEsMHgwMCwweDFhLDB4YzAsMHg4ZCwweGIwLDB4NDMsMHhlYywweDAwLDB4ZjAsMHgwMiB9LAorICAxNiwgMHhkNzEwLCAwLCB7MHgzZiwweDAwLDB4MGQsMHhkMSwweDAzLDB4MzUsMHgwMCwweGNiLDB4NDgsMHgyZSwweDQwLDB4MmYsMHhiMCwweDA5LDB4MjIsMHg4MCB9LAorICAxNiwgMHhkNzIwLCAwLCB7MHhmOSwweGM4LDB4MWUsMHhlMCwweDA4LDB4YjEsMHhlMiwweGQwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNzMwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwMCwweDdiLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDIzLDB4ZmMsMHgwMCwweGRlLDB4MDAsMHgyNCB9LAorICAxNiwgMHhkNzQwLCAwLCB7MHhjMCwweDRmLDB4ZjAsMHgwMywweDJjLDB4MDAsMHhlYywweDIwLDB4M2IsMHgwMCwweDBlLDB4OTgsMHgwMywweDk0LDB4MDIsMHhkZCB9LAorICAxNiwgMHhkNzUwLCAwLCB7MHgwMCwweDNmLDB4NDAsMHg0ZSwweGYwLDB4MDEsMHhmOCwweDAwLDB4ZGQsMHgwMCwweDNjLDB4ZTQsMHgwZiwweGQ4LDB4MDMsMHhiOCB9LAorICAxNiwgMHhkNzYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwweGFjLDB4YzAsMHhmYiwweDIwLDB4MzIsMHhjOCB9LAorICAxNiwgMHhkNzcwLCAwLCB7MHg4ZCwweGIwLDB4MDMsMHhlYywweDAwLDB4ZjksMHgwMCwweDNhLDB4YzIsMHgyYywweDMwLDB4MDMsMHg2YywweDA0LDB4ZDgsMHgwMiB9LAorICAxNiwgMHhkNzgwLCAwLCB7MHgzYywweDQ0LDB4OGQsMHgxMCwweDAzLDB4YWQsMHgwMywweGVhLDB4MDAsMHgzYywweDQwLDB4MGMsMHg3MCwweDIzLDB4ZTQsMHgwMCB9LAorICAxNiwgMHhkNzkwLCAwLCB7MHhjOCwweDQwLDB4M2EsMHhjMCwweDBkLDB4YmMsMHgwMywweDUwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkN2EwLCAwLCB7MHhjOCwweDAxLDB4M2QsMHgwMCwweGJmLDB4NDIsMHgyMywweGYwLDB4MGQsMHhmMCwweDAyLDB4ZTUsMHgwMCwweGUyLDB4MDEsMHgzNyB9LAorICAxNiwgMHhkN2IwLCAwLCB7MHhmMSwweDA4LDB4ZjAsMHgwZSwweDNkLDB4YzAsMHhhOCwweDAwLDB4MmUsMHg1NCwweDI4LDB4OTAsMHgwMiwweDJjLDB4MDAsMHg4YSB9LAorICAxNiwgMHhkN2MwLCAwLCB7MHgwNSwweDNiLDB4NDEsMHg0OCwweGY1LDB4MDMsMHg4YywweDAwLDB4ODksMHgwMCwweDIyLDB4ZDQsMHgwZSwweDk1LDB4MDIsMHhmMiB9LAorICAxNiwgMHhkN2QwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MDAsMHhiMywweDA0LDB4MjAsMHhjMCB9LAorICAxNiwgMHhkN2UwLCAwLCB7MHg4OSwweDMwLDB4MDIsMHhjYywweDQwLDB4YjIsMHgwMCwweDJjLDB4YzQsMHg0OCwweDMwLDB4MDIsMHgyYywweDAyLDB4YTIsMHgwMCB9LAorICAxNiwgMHhkN2YwLCAwLCB7MHgyYywweDIwLDB4MTksMHgyMCwweDFhLDB4ODAsMHgwOCwweGIwLDB4MDAsMHg2YywweDQwLDB4MDgsMHgzMCwweDAyLDB4YzQsMHgwMCB9LAorICAxNiwgMHhkODAwLCAwLCB7MHg4MSwweDAwLDB4MmMsMHg0MCwweDA4LDB4MzAsMHgwMiwweGY4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkODEwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwMCwweGI3LDB4YTAsMHhlMSwweGUwLDB4MDksMHg3OCwweDAyLDB4ZGYsMHgwNCwweGFlLDB4ODAsMHgyZCB9LAorICAxNiwgMHhkODIwLCAwLCB7MHhlMCwweDA4LDB4NzksMHgwMiwweDFlLDB4MTAsMHg4NywweDkwLDB4MmMsMHgyOCwweDI5LDB4NjgsMHgwMiwweDgyLDB4ODEsMHhiNCB9LAorICAxNiwgMHhkODMwLCAwLCB7MHg4MCwweDJkLDB4NjAsMHgwOCwweDc4LDB4MTAsMHhiYywweDAwLDB4OGYsMHg4MCwweDJkLDB4NjAsMHgwYiwweDY4LDB4MDIsMHhjOCB9LAorICAxNiwgMHhkODQwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwMCwweDBjLDB4MDUsMHhmMywweDkyLDB4MzAsMHhjYSB9LAorICAxNiwgMHhkODUwLCAwLCB7MHgwZCwweDMwLDB4MDMsMHhjYywweDAwLDB4ZjMsMHgwMCwweDNjLDB4YzAsMHgwYywweDMwLDB4MDIsMHgwYywweDgwLDB4NzAsMHgwMCB9LAorICAxNiwgMHhkODYwLCAwLCB7MHgyYywweDQwLDB4MGQsMHgyMCwweDAzLDB4ODksMHgwMCwweGIxLDB4MDAsMHgzZSwweDQwLDB4MmMsMHgzMCwweDAzLDB4ZWMsMHg1MCB9LAorICAxNiwgMHhkODcwLCAwLCB7MHhjMywweDIwLDB4M2MsMHg0MCwweDBjLDB4MzAsMHgwMywweGQyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkODgwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwMCwweGZmLDB4MDAsMHgzYywweGMwLDB4MGUsMHhiMCwweDgzLDB4ZWMsMHg0MCwweGVhLDB4MDAsMHgzNiB9LAorICAxNiwgMHhkODkwLCAwLCB7MHhjMiwweDBmLDB4YjAsMHg4MywweGFjLDB4MDAsMHhmOCwweDAwLDB4M2UsMHg0OCwweDBlLDB4ZTAsMHgwYiwweDdhLDB4ODAsMHhjZiB9LAorICAxNiwgMHhkOGEwLCAwLCB7MHgwMCwweDNiLDB4NDQsMHgwZiwweGYwLDB4MDMsMHhlYywweGMwLDB4ZmYsMHgwMCwweDAzLDB4NDQsMHgwZSwweGUwLDB4MDMsMHhkMCB9LAorICAxNiwgMHhkOGIwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVjLDB4MDAsMHhmYiwweDIzLDB4M2UsMHhjOCB9LAorICAxNiwgMHhkOGMwLCAwLCB7MHgxZCwweGIwLDB4MDMsMHhlZSwweDAwLDB4Y2EsMHgwMCwweDNlLDB4YzgsMHgwYywweGIyLDB4MDMsMHgyZCwweDkwLDB4YzgsMHg4NCB9LAorICAxNiwgMHhkOGQwLCAwLCB7MHgzNiwweDAwLDB4MmQsMHhiMCwweDAzLDB4NjAsMHgxOCwweDliLDB4ODAsMHgzMywweDUwLDB4MGMsMHhmMiwweDAzLDB4ZTIsMHgwMCB9LAorICAxNiwgMHhkOGUwLCAwLCB7MHhjOSwweDgwLDB4MzIsMHg0MCwweDBjLDB4YjgsMHgwMywweDJhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkOGYwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgwMCwweGI3LDB4MjgsMHgwYywweGQyLDB4MjgsMHg3MywweDAyLDB4ZmMsMHgwMCwweDg2LDB4MDQsMHgyYyB9LAorICAxNiwgMHhkOTAwLCAwLCB7MHhjYywweDI4LDB4NzAsMHg4MywweDBjLDB4MjAsMHg5NSwweDAxLDB4MjAsMHgwMCwweDA5LDB4MzAsMHgxMiwweDEwLDB4MDQsMHg4NSB9LAorICAxNiwgMHhkOTEwLCAwLCB7MHgwMCwweDIxLDB4NTIsMHgwOCwweDc1LDB4MDIsMHhkOCwweDAwLDB4ODcsMHgwMCwweDIxLDB4NDAsMHgwOCwweDYwLDB4MDIsMHgxMiB9LAorICAxNiwgMHhkOTIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4ZDQsMHhiNywweGIxLDB4MDksMHhlMSB9LAorICAxNiwgMHhkOTMwLCAwLCB7MHgwOCwweDc4LDB4MjIsMHhkZSwweDAwLDB4OTUsMHg4MCwweDJkLDB4ZTAsMHgwOCwweDc4LDB4MGEsMHg1ZSwweDQyLDB4OTQsMHhjMCB9LAorICAxNiwgMHhkOTQwLCAwLCB7MHgyMSwweDYwLDB4MDgsMHg3OCwweDAyLDB4NWEsMHgwMCwweDg3LDB4ODAsMHgyZCwweDY4LDB4MDgsMHg3YSwweDAyLDB4ZDcsMHgwMCB9LAorICAxNiwgMHhkOTUwLCAwLCB7MHg5NywweDgwLDB4MjAsMHg2MCwweDA5LDB4NzgsMHgwMiwweDMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkOTYwLCAwLCB7MHg0OCwweDEwLDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyYywweGMwLDB4MDgsMHhiMCwweDAyLDB4Y2QsMHg4MCwweDkyLDB4MDAsMHgyYyB9LAorICAxNiwgMHhkOTcwLCAwLCB7MHhjMCwweDA4LDB4YjAsMHgwMiwweGNjLDB4MDAsMHg5MCwweDgwLDB4YTAsMHg0MCwweDA5LDB4MzYsMHgwMiwweDQ4LDB4MDIsMHg4MyB9LAorICAxNiwgMHhkOTgwLCAwLCB7MHhhMCwweGFjLDB4NDAsMHgyYSwweDMwLDB4MDYsMHhjZSwweDAyLDB4OTMsMHgwNCwweGEwLDB4NDAsMHgwOSwweDIwLDB4MGEsMHgxMiB9LAorICAxNiwgMHhkOTkwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MDAsMHhmYSwweDAwLDB4M2EsMHg4MCB9LAorICAxNiwgMHhkOWEwLCAwLCB7MHgwZCwweGEwLDB4MDMsMHhmYiwweDAyLDB4ZGUsMHg4MCwweDNlLDB4ODAsMHgwYywweGEwLDB4MDMsMHgyOCwweDAwLDB4Y2UsMHg4MCB9LAorICAxNiwgMHhkOWIwLCAwLCB7MHgzMiwweDgwLDB4MGMsMHhhNCwweDAzLDB4NzgsMHgwMCwweGNlLDB4YTQsMHgzZiwweDgwLDB4MGMsMHhhMCwweDA3LDB4ZjksMHgwMCB9LAorICAxNiwgMHhkOWMwLCAwLCB7MHhkZSwweDAwLDB4MzIsMHg4MCwweDJkLDB4ZTAsMHgwMiwweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkOWQwLCAwLCB7MHg0OCwweDAwLDB4ZTEsMHgwMCwweGY4LDB4MDAsMHg3YywweDAwLDB4MGYsMHg4MCwweDAzLDB4ZTAsMHg0MCwweGU4LDB4MTAsMHgzYyB9LAorICAxNiwgMHhkOWUwLCAwLCB7MHgwMSwweGNmLDB4ODAsMHgwZiwweDIwLDB4MDAsMHhlOCwweDAwLDB4M2UsMHgwMCwweDBlLDB4MDQsMHgwMywweDkwLDB4MDAsMHhlOCB9LAorICAxNiwgMHhkOWYwLCAwLCB7MHgwMCwweDIwLDB4MDAsMHgwZCwweDgwLDB4MDcsMHhlMCwweDAwLDB4ZTgsMHgwMCwweDNlLDB4MDQsMHgwZSwweDgwLDB4MDMsMHhkMiB9LAorICAxNiwgMHhkYTAwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDAsMHhmOSwweDEwLDB4N2UsMHg0MSB9LAorICAxNiwgMHhkYTEwLCAwLCB7MHgwZSwweDkwLDB4MDMsMHgyNCwweDAwLDB4ZjksMHgwMCwweDM2LDB4NjgsMHgwZSwweDkwLDB4MGYsMHhhNCwweDA4LDB4YzksMHgwMCB9LAorICAxNiwgMHhkYTIwLCAwLCB7MHgzYSwweDQwLDB4MGMsMHg5MCwweDBiLDB4MjQsMHgxMiwweGU5LDB4MDAsMHgzZSwweDQ0LDB4MmMsMHg5MCwweDAzLDB4NjQsMHgyNCB9LAorICAxNiwgMHhkYTMwLCAwLCB7MHhmOSwweDAyLDB4MmUsMHg0MCwweDBjLDB4OTAsMHgwMywweGMyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkYTQwLCAwLCB7MHg4MCwweDA0LDB4NjUsMHgxMCwweGI5LDB4ODAsMHgzZSwweDQwLDB4MDgsMHg5MCwweDBhLDB4MjYsMHgwMCwweGIxLDB4MTAsMHgyYSB9LAorICAxNiwgMHhkYTUwLCAwLCB7MHg3MiwweDA4LDB4OTAsMHgwNywweDY0LDB4MDIsMHg4OSwweDQwLDB4MmUsMHg0MCwweDI4LDB4OTAsMHgxMiwweDI1LDB4MDAsMHg4OSB9LAorICAxNiwgMHhkYTYwLCAwLCB7MHg0NSwweDNlLDB4NTAsMHgwZCwweDkwLDB4MGEsMHgyNSwweDAwLDB4YjksMHg0MCwweDJlLDB4NDAsMHgyOCwweDk0LDB4MDMsMHhlMCB9LAorICAxNiwgMHhkYTcwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDAsMHhiOSwweDAwLDB4MmUsMHg0MCB9LAorICAxNiwgMHhkYTgwLCAwLCB7MHg0OCwweDkwLDB4NDIsMHgyNiwweDAxLDB4YjksMHg0MCwweDI2LDB4NDAsMHgwYSwweDkwLDB4NDIsMHg4NCwweDAxLDB4OGIsMHgwOCB9LAorICAxNiwgMHhkYTkwLCAwLCB7MHgyYywweDQwLDB4MDksMHhkMCwweDgyLDB4MzQsMHgzMiwweGE5LDB4MDgsMHg2ZSwweDQyLDB4MDgsMHgxMCwweDAyLDB4MjQsMHgyMCB9LAorICAxNiwgMHhkYWEwLCAwLCB7MHhiOSwweDA4LDB4MmMsMHg0MCwweDE4LDB4OTAsMHg4MiwweGM2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkYWIwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweGIzLDB4MjAsMHgyOCwweDQ4LDB4MDgsMHgxMiwweDAyLDB4MDQsMHgwMSwweGIxLDB4MDAsMHgyOCB9LAorICAxNiwgMHhkYWMwLCAwLCB7MHg1OCwweDA4LDB4MTIsMHgwMiwweDA1LDB4ODksMHg4MSwweDQwLDB4MmMsMHg1OCwweDA4LDB4NTYsMHgwNiwweDE1LDB4ODAsMHg4MSB9LAorICAxNiwgMHhkYWQwLCAwLCB7MHg0MCwweDI4LDB4NTAsMHgwOSwweDE0LDB4MDIsMHgwNSwweDgwLDB4YjEsMHg0MCwweDJjLDB4NWEsMHgwOCwweDE0LDB4MDIsMHhjMiB9LAorICAxNiwgMHhkYWUwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDY4LDB4MDAsMHhmOCwweDAwLDB4MmUsMHgwMCB9LAorICAxNiwgMHhkYWYwLCAwLCB7MHgyZSwweDg1LDB4MDMsMHgyMSwweDQ4LDB4ZjgsMHgwMCwweDM2LDB4MDAsMHg4ZSwweDA1LDB4MDIsMHhhMCwweDA4LDB4ODAsMHgwMCB9LAorICAxNiwgMHhkYjAwLCAwLCB7MHgzZSwweDAwLDB4MGQsMHg4MCwweDBiLDB4MTAsMHgwNCwweGUwLDB4MDAsMHgyYywweDAwLDB4NGMsMHg4MCwweDAzLDB4NDAsMHgwMCB9LAorICAxNiwgMHhkYjEwLCAwLCB7MHhmMCwweDAwLDB4M2UsMHgwOCwweDBjLDB4MDAsMHgwMywweGVlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkYjIwLCAwLCB7MHg5OCwweDFkLDB4ZTQsMHg0MCwweGY5LDB4MTAsMHgzZSwweDQ0LDB4MGYsMHg5MSwweDAzLDB4ZjQsMHgwMCwweGZkLDB4MDAsMHgzZSB9LAorICAxNiwgMHhkYjMwLCAwLCB7MHg0NCwweDBmLDB4OTEsMHgwMywweGU0LDB4NDAsMHhmZCwweDAzLDB4M2YsMHg0NCwweDFmLDB4OTEsMHgxYiwweGU0LDB4NDAsMHhmZCB9LAorICAxNiwgMHhkYjQwLCAwLCB7MHgwMSwweDNmLDB4NTAsMHgwZSwweDk0LDB4MDMsMHhmNCwweDQwLDB4ZmQsMHgwMCwweDNmLDB4NDAsMHgwZiwweGQwLDB4MDMsMHhhNiB9LAorICAxNiwgMHhkYjUwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgxNSwweGY0LDB4MDAsMHhjZCwweGEwLDB4NzEsMHg2OCB9LAorICAxNiwgMHhkYjYwLCAwLCB7MHg4ZCwweDk4LDB4MDMsMHhkNCwweDAwLDB4Y2QsMHgwMCwweDMzLDB4NjAsMHgwYywweDk4LDB4OGYsMHgyNywweDIwLDB4YzksMHg0MCB9LAorICAxNiwgMHhkYjcwLCAwLCB7MHgzZSwweDc4LDB4MGMsMHg5ZSwweDhiLDB4MjcsMHgyMCwweGQxLDB4MTEsMHgzMCwweDYwLDB4OGMsMHg5YywweDAzLDB4MjUsMHgwMCB9LAorICAxNiwgMHhkYjgwLCAwLCB7MHhmOSwweDQwLDB4M2UsMHg3OCwweDBmLDB4OTAsMHgwMywweDQ2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkYjkwLCAwLCB7MHgzOCwweDEwLDB4ZTAsMHgxMCwweDg4LDB4MDEsMHgyMiwweDAxLDB4MDgsMHg4YywweDIyLDB4ZTgsMHgwMCwweDg4LDB4MDIsMHgyYSB9LAorICAxNiwgMHhkYmEwLCAwLCB7MHgxNCwweDA4LDB4OGMsMHgwYiwweDIzLDB4OTAsMHg4OCwweGEwLDB4MmUsMHhiMCwweDA4LDB4OGMsMHg0MiwweDIzLDB4MDAsMHg4OCB9LAorICAxNiwgMHhkYmIwLCAwLCB7MHhhMCwweDM2LDB4MmEsMHgxOCwweDhhLDB4MDIsMHgyMiwweDAwLDB4YjgsMHhhMCwweDJlLDB4MzQsMHgwYiwweGNhLDB4ODIsMHgwZSB9LAorICAxNiwgMHhkYmMwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4MDAsMHg4MSwweDQwLDB4MjQsMHg1MCB9LAorICAxNiwgMHhkYmQwLCAwLCB7MHgwOSwweDE2LDB4ODIsMHhjNCwweDAwLDB4YTksMHgwMCwweDIwLDB4NDAsMHgwOCwweDEyLDB4OTIsMHg1NCwweDA4LDB4ODUsMHgwMCB9LAorICAxNiwgMHhkYmUwLCAwLCB7MHgyZiwweDRjLDB4MDksMHg1MiwweDEyLDB4MTQsMHg4MCwweDlkLDB4MDAsMHgyMSwweDUwLDB4MDgsMHg1NCwweDIyLDB4MTQsMHg4MCB9LAorICAxNiwgMHhkYmYwLCAwLCB7MHhiNSwweDAwLDB4MmQsMHg0OCwweDBiLDB4ZDAsMHgwMiwweDQyLDB4MDUsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkYzAwLCAwLCB7MHgxOCwweDA1LDB4YTQsMHgwMiwweDg5LDB4MDEsMHhhMiwweDQwLDB4NDgsMHg5MCwweDAyLDB4ZTQsMHgwMiwweGE5LDB4MDAsMHgyYSB9LAorICAxNiwgMHhkYzEwLCAwLCB7MHg0MCwweDY4LDB4OTAsMHgwMiwweDY0LDB4MTAsMHhhZCwweDAwLDB4MmYsMHg0MSwweDI4LDB4NTAsMHgwMiwweDM0LDB4MDAsMHg4ZCB9LAorICAxNiwgMHhkYzIwLCAwLCB7MHg0NCwweDI3LDB4NDAsMHgzOSwweGQwLDB4MDIsMHgzNSwweDAwLDB4YmQsMHgxNCwweDJmLDB4NDAsMHgwYiwweGQwLDB4MDIsMHg0NiB9LAorICAxNiwgMHhkYzMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgwNSwweGM0LDB4MDAsMHhjOSwweDAwLDB4MzYsMHg0MCB9LAorICAxNiwgMHhkYzQwLCAwLCB7MHgyZCwweDkwLDB4MDMsMHhlNywweDAwLDB4ZTEsMHhlMCwweDMyLDB4NDAsMHgwYywweDkwLDB4MGIsMHg2NCwweDAyLDB4YzksMHgwOCB9LAorICAxNiwgMHhkYzUwLCAwLCB7MHgzYywweDUwLDB4MGMsMHg5MCwweDAyLDB4MjYsMHgwMiwweGQ5LDB4YzAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDEzLDB4MjcsMHgwMCB9LAorICAxNiwgMHhkYzYwLCAwLCB7MHhmOSwweDIwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweDY4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkYzcwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwMiwweGY5LDB4MDAsMHgzOCwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTYsMHg4MCwweGQ5LDB4YTAsMHgzYyB9LAorICAxNiwgMHhkYzgwLCAwLCB7MHg0MCwweDBmLDB4MTAsMHgwMywweGE0LDB4MDAsMHhkOSwweDEwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGM0LDB4OTIsMHhmOSB9LAorICAxNiwgMHhkYzkwLCAwLCB7MHgyMSwweDNjLDB4NDAsMHgyZSwweDkwLDB4MGYsMHhlNiwweDgwLDB4ZjksMHg4MCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHg4YSB9LAorICAxNiwgMHhkY2EwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwMCwweGEwLDB4NDAsMHhlOCwweDEwLDB4M2UsMHgwNCB9LAorICAxNiwgMHhkY2IwLCAwLCB7MHg0ZSwweDgwLDB4MDMsMHgyMCwweDgwLDB4ZDgsMHg2MCwweDNhLDB4MDIsMHgwYywweDgwLDB4MTMsMHgyMCwweDAwLDB4ZjgsMHg0MCB9LAorICAxNiwgMHhkY2MwLCAwLCB7MHgzNiwweDEwLDB4MmQsMHg4MCwweDAzLDB4YTAsMHgwOCwweGU4LDB4NDAsMHgzMiwweDAwLDB4MGQsMHgwMCwweDAzLDB4MjEsMHgwMiB9LAorICAxNiwgMHhkY2QwLCAwLCB7MHhjOCwweDQwLDB4YjIsMHgwMCwweDBmLDB4YzAsMHgwMywweGNhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkY2UwLCAwLCB7MHgyOCwweDExLDB4M2IsMHgxMCwweDg2LDB4MDEsMHgyZiwweGEwLDB4MGQsMHhhMCwweDAyLDB4MzgsMHgwMCwweDhlLDB4ZTAsMHgyMyB9LAorICAxNiwgMHhkY2YwLCAwLCB7MHhhMiwweDA4LDB4YTAsMHgwMiwweDI4LDB4MDAsMHhiYSwweDgwLDB4MjIsMHg4MCwweDA4LDB4YTAsMHgwMiwweDI4LDB4MDAsMHg4MiB9LAorICAxNiwgMHhkZDAwLCAwLCB7MHgwMCwweDJhLDB4ODAsMHgyOCwweGEwLDB4MDIsMHgyYSwweDA0LDB4OGEsMHg4MCwweDIyLDB4YTAsMHgwYiwweDYwLDB4MDIsMHhjYSB9LAorICAxNiwgMHhkZDEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDQzLDB4ODAsMHhhMiwweDAwLDB4MmMsMHhhMCB9LAorICAxNiwgMHhkZDIwLCAwLCB7MHgwOCwweDMwLDB4MDIsMHgyZSwweDAwLDB4OTIsMHgwMCwweDI4LDB4YzAsMHgyOCwweDMwLDB4MDIsMHgyYywweDAwLDB4YjMsMHg4MCB9LAorICAxNiwgMHhkZDMwLCAwLCB7MHgyNCwweGMwLDB4MDksMHgzMCwweDBhLDB4OGMsMHgwMCwweGEzLDB4MDAsMHg2MCwweGMwLDB4MDgsMHgzMCwweDBhLDB4NGMsMHgwMCB9LAorICAxNiwgMHhkZDQwLCAwLCB7MHg4MywweDAwLDB4MjAsMHhlMCwweDBiLDB4MjAsMHgwMiwweGNhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZDUwLCAwLCB7MHhhMCwweDAxLDB4MTAsMHgwMCwweDg2LDB4MDAsMHgyZCwweGMwLDB4MDksMHgzYSwweDAyLDB4MzUsMHgwMCwweDg2LDB4MDAsMHgyMSB9LAorICAxNiwgMHhkZDYwLCAwLCB7MHhjMCwweDA4LDB4NzMsMHgwMiwweDEwLDB4MDAsMHhiZiwweDg4LDB4MjEsMHgwMCwweDA4LDB4NzAsMHgwMiwweDFjLDB4MDgsMHg4ZiB9LAorICAxNiwgMHhkZDcwLCAwLCB7MHgwMCwweDJiLDB4YzAsMHgwOCwweDIwLDB4MTIsMHg1ZSwweDIwLDB4ODcsMHg4OCwweDIxLDB4ODMsMHgwYiwweDYwLDB4MDIsMHhlOCB9LAorICAxNiwgMHhkZDgwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDEyLDB4MDAsMHhlNSwweDgxLDB4M2QsMHhhMCB9LAorICAxNiwgMHhkZDkwLCAwLCB7MHgyYywweDdhLDB4MGIsMHgxZSwweDAwLDB4ZDQsMHg4MCwweDM4LDB4ZTAsMHgwYywweGZhLDB4MGIsMHgxZSwweDAwLDB4ZjYsMHg4MCB9LAorICAxNiwgMHhkZGEwLCAwLCB7MHgzNCwweGUwLDB4MGQsMHgyOCwweDAzLDB4OGEsMHgwMCwweGU2LDB4ODAsMHgzMSwweDIwLDB4MGMsMHg3OCwweDAzLDB4N2EsMHgwNCB9LAorICAxNiwgMHhkZGIwLCAwLCB7MHhjZSwweDg0LDB4MzEsMHhlMCwweDRmLDB4NzgsMHg0MywweGVhLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZGMwLCAwLCB7MHgwOCwweDBkLDB4ODAsMHgwMCwweGY4LDB4MDAsMHgzZSwweGMwLDB4MGYsMHhiNSwweDIzLDB4ZTQsMHgwMCwweGYwLDB4MDQsMHgzNiB9LAorICAxNiwgMHhkZGQwLCAwLCB7MHg0MCwweDBmLDB4YjYsMHg4NywweGUwLDB4MDAsMHhmMiwweDAwLDB4M2UsMHgwMCwweDFmLDB4YTAsMHgwYiwweGU4LDB4MDAsMHhmYSB9LAorICAxNiwgMHhkZGUwLCAwLCB7MHgwMCwweDNlLDB4MDAsMHgwZSwweGEwLDB4MDMsMHhhOCwweDAwLDB4ZmEsMHgwMCwweDNlLDB4ODAsMHgwZiwweGIwLDB4MDMsMHhjMiB9LAorICAxNiwgMHhkZGYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGY2LDB4MDAsMHhjYywweDgwLDB4MzMsMHhhMCB9LAorICAxNiwgMHhkZTAwLCAwLCB7MHgwYywweGZjLDB4MDMsMHgzZSwweDAwLDB4ZmMsMHg4MCwweDM3LDB4ZTAsMHgwZiwweGI5LDB4MjEsMHgzZSwweDAwLDB4ZmQsMHg4MiB9LAorICAxNiwgMHhkZTEwLCAwLCB7MHgzMywweGUwLDB4MmMsMHhmOCwweDAzLDB4N2UsMHgxMCwweGRmLDB4ODQsMHgzZCwweGUwLDB4MGMsMHhmOCwweDAzLDB4ZjYsMHgwMCB9LAorICAxNiwgMHhkZTIwLCAwLCB7MHhmZCwweDgwLDB4M2YsMHg2MCwweDBjLDB4ZTgsMHgyMywweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZTMwLCAwLCB7MHhhOCwweDExLDB4OTgsMHg0MCwweDg0LDB4MTAsMHgyMSwweGMwLDB4MDgsMHg3MCwweDAyLDB4MTAsMHg4MCwweGI0LDB4MDAsMHgyMSB9LAorICAxNiwgMHhkZTQwLCAwLCB7MHhjOCwweDBiLDB4N2EsMHgwMiwweDEwLDB4MDAsMHhmZCwweDAwLDB4MjEsMHgwNCwweDA4LDB4NzAsMHgwMiwweDFjLDB4NDIsMHg4NyB9LAorICAxNiwgMHhkZTUwLCAwLCB7MHgwMCwweDJkLDB4YzQsMHg0OCwweDYxLDB4MDIsMHhkNiwweDgwLDB4YjUsMHgwMCwweDJmLDB4MDQsMHgwOCwweDYxLDB4ODIsMHgyYSB9LAorICAxNiwgMHhkZTYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDkwLDB4MDAsMHg4MSwweDAwLDB4MjEsMHg4MCB9LAorICAxNiwgMHhkZTcwLCAwLCB7MHgwOCwweDMwLDB4MDIsMHgxYywweDEwLDB4YmMsMHgwOCwweDI1LDB4ODAsMHg0YiwweDMwLDB4MGUsMHgxYywweDAwLDB4YjQsMHgwMCB9LAorICAxNiwgMHhkZTgwLCAwLCB7MHgyMCwweGMwLDB4MDgsMHgyMCwweDAyLDB4NTgsMHgwMCwweDk2LDB4MDAsMHgyZiwweDAwLDB4MGEsMHg3MCwweDAyLDB4ZDAsMHg4MCB9LAorICAxNiwgMHhkZTkwLCAwLCB7MHhiNCwweDE4LDB4MmQsMHg0MCwweDA5LDB4ZjgsMHgwMiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZWEwLCAwLCB7MHgyMCwweDE0LDB4YzgsMHgwMiwweDgwLDB4MDAsMHhhMCwweGMwLDB4MDgsMHgzMCwweDIyLDB4MGIsMHhjMCwweGIwLDB4YzAsMHgyMiB9LAorICAxNiwgMHhkZWIwLCAwLCB7MHg4MCwweDBiLDB4MzAsMHgwMiwweDAwLDB4MDAsMHhhMCwweDA0LDB4MjIsMHgwMCwweDI4LDB4YTAsMHgwMiwweDJiLDB4MDAsMHg4YSB9LAorICAxNiwgMHhkZWMwLCAwLCB7MHgwMCwweDJjLDB4MDAsMHgwOCwweGEwLDB4MDYsMHhjMCwweDAwLDB4YjAsMHhjMiwweDJjLDB4MDAsMHgwOSwweGJjLDB4MWEsMHgwOCB9LAorICAxNiwgMHhkZWQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGEwLDB4MDAsMHhjOCwweDAwLDB4MzIsMHhjMCB9LAorICAxNiwgMHhkZWUwLCAwLCB7MHgwYywweGYwLDB4MGIsMHgyNiwweDAwLDB4ZjksMHhjMCwweDM2LDB4MDAsMHgwZiwweGYwLDB4MTMsMHgyYywweDEwLDB4YmIsMHg0MCB9LAorICAxNiwgMHhkZWYwLCAwLCB7MHhmMiwweGMwLDB4MDgsMHg5MCwweDAzLDB4NjcsMHgwMCwweGQ5LDB4ODAsMHgzZSwweGMwLDB4MDgsMHg5MCwweDAyLDB4ZWMsMHgwMCB9LAorICAxNiwgMHhkZjAwLCAwLCB7MHhmYiwweGQwLDB4M2UsMHhjMCwweDI5LDB4OGMsMHgwMCwweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZjEwLCAwLCB7MHg4MCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4NDQsMHgzYywweGQwLDB4MmYsMHhiMCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MjAsMHgzZSB9LAorICAxNiwgMHhkZjIwLCAwLCB7MHg0MCwweDBmLDB4MzAsMHgwMywweGUwLDB4MDAsMHhmYiwweDA4LDB4M2UsMHgwMCwweDBmLDB4OTAsMHgxMywweGU0LDB4NDIsMHhmOSB9LAorICAxNiwgMHhkZjMwLCAwLCB7MHgxMCwweDNlLDB4YzAsMHgwZiwweDgwLDB4MDMsMHhlZSwweDAwLDB4ZmIsMHgwMCwweDNlLDB4ODAsMHgwZSwweDgyLDB4MDMsMHhlMCB9LAorICAxNiwgMHhkZjQwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGUwLDB4MDgsMHhmYywweDgwLDB4MzIsMHhlNCB9LAorICAxNiwgMHhkZjUwLCAwLCB7MHgwZSwweGYwLDB4MDMsMHg3NCwweDAwLDB4ZmMsMHgwMCwweDNmLDB4NDAsMHgwYywweGYwLDB4MGIsMHgzYywweDAwLDB4ZmUsMHgwMCB9LAorICAxNiwgMHhkZjYwLCAwLCB7MHgzZiwweGMwLDB4MGQsMHhjMSwweDAzLDB4MjAsMHgyMCwweGNjLDB4MTAsMHgzMywweDAwLDB4MGMsMHhkMSwweDAzLDB4NTgsMHgwMCB9LAorICAxNiwgMHhkZjcwLCAwLCB7MHhjZSwweDAwLDB4MmYsMHhjMCwweDBmLDB4ZDEsMHgwMywweDAwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZjgwLCAwLCB7MHg4MSwweDQ0LDB4NjIsMHgwMCwweGIwLDB4NDAsMHgyYSwweGYxLDB4MDgsMHhiMCwweDEyLDB4MjYsMHgwOCwweGI4LDB4YzgsMHgyZSB9LAorICAxNiwgMHhkZjkwLCAwLCB7MHg3MCwweDBhLDB4YjAsMHgwMiwweDIwLDB4MDAsMHhiYSwweDAwLDB4MmUsMHgwMCwweDI4LDB4ODAsMHgwMywweDIyLDB4NDAsMHg4OCB9LAorICAxNiwgMHhkZmEwLCAwLCB7MHgwMSwweDIwLDB4MDAsMHgwYSwweDgwLDB4MDIsMHgyOCwweDAwLDB4OGEsMHgwMSwweDJlLDB4ODAsMHg4YiwweDkwLDB4MDIsMHgyMCB9LAorICAxNiwgMHhkZmIwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDI2LDB4MDAsMHhiOCwweDI4LDB4MjIsMHg0MiB9LAorICAxNiwgMHhkZmMwLCAwLCB7MHgwOCwweDMwLDB4MDIsMHg2NiwweDAwLDB4YjgsMHg4MCwweDJlLDB4MzAsMHg4OCwweGIwLDB4MDIsMHgyYywweDAwLDB4YjksMHgwMSB9LAorICAxNiwgMHhkZmQwLCAwLCB7MHgyZSwweGMwLDB4ODgsMHg5MCwweDAyLDB4YTQsMHgwMCwweDg5LDB4MDAsMHgyMiwweGMwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwYyB9LAorICAxNiwgMHhkZmUwLCAwLCB7MHg4OSwweDAxLDB4MmUsMHg0MCwweDFiLDB4ODAsMHgwMiwweDYwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZmYwLCAwLCB7MHgwOCwweDA0LDB4MDAsMHgwMCwweGIwLDB4MDAsMHgyOCwweGMwLDB4MjgsMHgzMCwweDAyLDB4MDAsMHgwMCwweGIwLDB4MDAsMHgyYyB9LAorICAxNiwgMHhlMDAwLCAwLCB7MHg0MCwweDBhLDB4MzAsMHgwMiwweDAwLDB4MDAsMHhiMSwweDAwLDB4MmMsMHgwMCwweDA4LDB4MTAsMHgwYSwweDA0LDB4MDAsMHg4MSB9LAorICAxNiwgMHhlMDEwLCAwLCB7MHgwMSwweGEyLDB4YzAsMHgwOCwweDAwLDB4MGEsMHgwNCwweDgwLDB4ODEsMHgwMCwweDJjLDB4MDAsMHgxYiwweDAwLDB4MGEsMHgwMiB9LAorICAxNiwgMHhlMDIwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDYwLDB4MDAsMHhmOCwweDAwLDB4MzIsMHg0MCB9LAorICAxNiwgMHhlMDMwLCAwLCB7MHgwZSwweGYwLDB4MjMsMHg2NCwweDA4LDB4ZjgsMHgwMCwweDJlLDB4MDAsMHgwYywweGYwLDB4MDMsMHgyYywweDAwLDB4ZjgsMHgwMCB9LAorICAxNiwgMHhlMDQwLCAwLCB7MHgzZSwweGMwLDB4MGMsMHg4MCwweDAzLDB4MjAsMHgwMiwweGM4LDB4MDQsMHgzMiwweDAwLDB4MWMsMHg5MCwweDAzLDB4MjAsMHgwMCB9LAorICAxNiwgMHhlMDUwLCAwLCB7MHhjOCwweDAxLDB4M2UsMHg0MSwweDlmLDB4OTAsMHg0MywweDQwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMDYwLCAwLCB7MHhhMCwweDFkLDB4ZjAsMHgwMCwweGZjLDB4MGMsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZjAsMHgxMCwweGY0LDB4MDAsMHgzZiB9LAorICAxNiwgMHhlMDcwLCAwLCB7MHgwMCwweDBmLDB4ZjQsMHgyMywweGYwLDB4MDAsMHhmYywweDAwLDB4M2YsMHgwMCwweDBlLDB4YzAsMHgwMywweGIwLDB4MDAsMHhmYyB9LAorICAxNiwgMHhlMDgwLCAwLCB7MHgwMCwweDNmLDB4MDAsMHgwZiwweGMwLDB4MDMsMHhlMSwweDAwLDB4ZmMsMHgwMCwweDNmLDB4MDEsMHgxZiwweDUwLDB4MDMsMHhlOCB9LAorICAxNiwgMHhlMDkwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwZCwweGYwLDB4ZDAsMHhmZiwweDIwLDB4M2UsMHhkMCB9LAorICAxNiwgMHhlMGEwLCAwLCB7MHg4ZSwweGIwLDB4MDMsMHhlYywweGEwLDB4ZGIsMHgyOCwweDNlLDB4Y2MsMHgwYywweGIzLDB4MDMsMHhhZCwweDA4LDB4ZjgsMHgzYyB9LAorICAxNiwgMHhlMGIwLCAwLCB7MHgzMiwweDIzLDB4MGUsMHg0OCwweDIzLDB4N2EsMHgwMCwweGZkLDB4OTQsMHgzZiwweGUwLDB4MGYsMHg3OCwweDMzLDB4ZWUsMHgwOCB9LAorICAxNiwgMHhlMGMwLCAwLCB7MHhiZiwweDgwLDB4M2YsMHhlNCwweDBmLDB4ZjksMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMGQwLCAwLCB7MHhhMCwweDAwLDB4ZWMsMHhjOCwweGJmLDB4ZDEsMHgwZiwweGM4LDB4MGMsMHgyNiwweDgyLDB4ZmQsMHgyNCwweDhmLDB4MDAsMHgyZSB9LAorICAxNiwgMHhlMGUwLCAwLCB7MHg5OSwweDBhLDB4ZjIsMHg2MiwweDFkLDB4ZDAsMHg5OSwweDYxLDB4MjIsMHg3MSwweDg4LDB4ODgsMHgwMiwweGFjLDB4MDAsMHhiOCB9LAorICAxNiwgMHhlMGYwLCAwLCB7MHgyMiwweDJlLDB4MjAsMHg0YiwweDg4LDB4MDMsMHhhMCwweDAwLDB4ODAsMHgwMCwweDJlLDB4MDgsMHgwYiwweDgwLDB4MjMsMHg2MCB9LAorICAxNiwgMHhlMTAwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4MDQsMHhiMywweDAzLDB4MGMsMHhjYyB9LAorICAxNiwgMHhlMTEwLCAwLCB7MHgwYSwweDEzLDB4MTIsMHhjYywweDE0LDB4YTMsMHgwZSwweDBjLDB4NTgsMHgwYSwweDMzLDB4MDIsMHg4YywweDEwLDB4YTMsMHgyMCB9LAorICAxNiwgMHhlMTIwLCAwLCB7MHhhMCwweDBhLDB4MTgsMHg5MCwweDAyLDB4NDgsMHhhMCwweGIwLDB4MjAsMHgyNCwweDgwLDB4MGEsMHgyMCwweDAyLDB4Y2MsMHgwOSB9LAorICAxNiwgMHhlMTMwLCAwLCB7MHhhMSwweDAwLDB4MmMsMHg4MCwweDBiLDB4MzIsMHg0MiwweGEyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMTQwLCAwLCB7MHhlMCwweDExLDB4YWMsMHgyMCwweGJiLDB4MDAsMHgyZSwweGMwLDB4NGIsMHg4MCwweGEyLDB4ZWMsMHgwMCwweGFiLDB4MDAsMHg0ZSB9LAorICAxNiwgMHhlMTUwLCAwLCB7MHg0NiwweDJhLDB4YjAsMHgwMiwweDJjLDB4MDQsMHg5YiwweDgwLDB4MmEsMHg2MCwweDhhLDB4OWMsMHgwMiwweGFjLDB4MDAsMHhiOSB9LAorICAxNiwgMHhlMTYwLCAwLCB7MHg4MSwweDJlLDB4NDAsMHgwYiwweDk4LDB4MDIsMHhhMywweDAwLDB4OGEsMHgwMCwweDJlLDB4NDAsMHgwYiwweDgwLDB4MDQsMHhmMCB9LAorICAxNiwgMHhlMTcwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGUxLDB4MDAsMHhmYiwweDA0LDB4M2UsMHhjMCB9LAorICAxNiwgMHhlMTgwLCAwLCB7MHgwZSwweGI0LDB4MDMsMHhlYywweDBhLDB4ZGIsMHgwMiwweDJlLDB4ZDEsMHgwZSwweGIwLDB4MDMsMHhhYywweDAwLDB4ZmIsMHg4MiB9LAorICAxNiwgMHhlMTkwLCAwLCB7MHgzMiwweDI4LDB4MWUsMHgwYywweDAzLDB4NjgsMHgwMCwweGI5LDB4MDAsMHgzZSwweDQwLDB4NGYsMHhiMCwweDQzLDB4ZWQsMHgwMCB9LAorICAxNiwgMHhlMWEwLCAwLCB7MHhlYSwweDAwLDB4M2UsMHg0MCwweDBmLDB4ODAsMHgwMywweDkwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMWIwLCAwLCB7MHhjMCwweDAxLDB4YjgsMHgxOCwweGZmLDB4MDIsMHgxZiwweGMwLDB4MGMsMHhlMiwweDAzLDB4ZmMsMHgwMCwweGRmLDB4MDMsMHgyZiB9LAorICAxNiwgMHhlMWMwLCAwLCB7MHhhMSwweDBmLDB4NzAsMHgwMywweGZjLDB4MDQsMHhhYiwweDA0LDB4MzcsMHg0MiwweDJkLDB4ZDAsMHgwMiwweDdjLDB4MDAsMHhmYyB9LAorICAxNiwgMHhlMWQwLCAwLCB7MHgwMCwweDNmLDB4ODAsMHgwZiwweGMwLDB4MDMsMHhiMCwweDAwLDB4ZmQsMHgwMCwweDNmLDB4ODAsMHgwZiwweGYwLDB4MDMsMHg3OCB9LAorICAxNiwgMHhlMWUwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGE5LDB4MDAsMHhkYiwweDAwLDB4M2MsMHhjMCB9LAorICAxNiwgMHhlMWYwLCAwLCB7MHgyZSwweDk0LDB4MDEsMHg2YywweDExLDB4Y2IsMHgwMCwweGI4LDB4YzAsMHgwYywweGIwLDB4MDMsMHg2YywweDAwLDB4ZWIsMHgwMSB9LAorICAxNiwgMHhlMjAwLCAwLCB7MHgzMiwweDEwLDB4MDcsMHg5MiwweDAzLDB4YTgsMHgwMCwweGY4LDB4MDAsMHgzZSwweDBjLDB4MDcsMHhhMiwweDAzLDB4YWQsMHgwMCB9LAorICAxNiwgMHhlMjEwLCAwLCB7MHhkOCwweDAwLDB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMywweGQwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMjIwLCAwLCB7MHhjOCwweDA1LDB4MjgsMHgwOCwweGJmLDB4MDAsMHgyZiwweGMwLDB4ODgsMHg4MCwweDAyLDB4M2MsMHgwOCwweGVmLDB4MDMsMHgyMiB9LAorICAxNiwgMHhlMjMwLCAwLCB7MHgwMCwweDBkLDB4ZjUsMHgwMCwweDNjLDB4MDAsMHg4YiwweDgyLDB4MjIsMHg2MCwweDAzLDB4OWMsMHgwMiwweDJjLDB4MTAsMHhiOSB9LAorICAxNiwgMHhlMjQwLCAwLCB7MHhiMCwweDIyLDB4ZjAsMHgwYiwweDkwLDB4MDIsMHgyMCwweDAwLDB4YmIsMHgwMCwweDIyLDB4ZTIsMHgwZCwweGIwLDB4MDIsMHhmMiB9LAorICAxNiwgMHhlMjUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDQwLDB4MDAsMHhiMywweDAyLDB4MmMsMHhjMCB9LAorICAxNiwgMHhlMjYwLCAwLCB7MHgwOCwweDMwLDB4MDIsMHg2YywweDAwLDB4ODMsMHgwMCwweDIwLDB4YzAsMHgwOSwweDM0LDB4MDQsMHhlYywweDAwLDB4YTgsMHgwMCB9LAorICAxNiwgMHhlMjcwLCAwLCB7MHgyMiwweGYwLDB4MGIsMHgwMCwweDAyLDB4ODgsMHgwMCwweGIzLDB4MDAsMHgyOCwweGUwLDB4MGIsMHgxNCwweDAyLDB4YTAsMHgwMCB9LAorICAxNiwgMHhlMjgwLCAwLCB7MHg5MywweDAwLDB4MjAsMHhjMCwweDA4LDB4YjAsMHgwMiwweGY4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMjkwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwNCwweGI3LDB4ODAsMHgyZCwweGU4LDB4MDgsMHg3OCwweDAyLDB4MGUsMHhjOCwweGE3LDB4OTAsMHgyMSB9LAorICAxNiwgMHhlMmEwLCAwLCB7MHhhOCwweDE5LDB4MzgsMHg1MiwweDllLDB4YzEsMHg4NywweDgwLDB4MjEsMHhlMiwweDBiLDB4ZDksMHg4MiwweDllLDB4MDAsMHhiNiB9LAorICAxNiwgMHhlMmIwLCAwLCB7MHhhMCwweDJkLDB4MjAsMHgwYiwweDY4LDB4MDIsMHgxZSwweDAwLDB4YjQsMHhjMSwweDIxLDB4MjAsMHgwOSwweDQ4LDB4MDIsMHhjOCB9LAorICAxNiwgMHhlMmMwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwMCwweDBjLDB4ODAsMHhiMywweDEwLDB4M2UsMHhlMCB9LAorICAxNiwgMHhlMmQwLCAwLCB7MHgwZSwweDNhLDB4MDcsMHg0ZSwweDAwLDB4Y2IsMHg5MCwweDNhLDB4NjEsMHgwZCwweDM4LDB4MDMsMHhjZSwweGQxLDB4ZTEsMHg5OCB9LAorICAxNiwgMHhlMmUwLCAwLCB7MHgzMCwweGE0LDB4OGYsMHgxMCwweDAzLDB4ODgsMHgwMCwweGJhLDB4YTEsMHgzYywweDg0LDB4MDcsMHgwMCwweDAzLDB4ODIsMHhkNCB9LAorICAxNiwgMHhlMmYwLCAwLCB7MHhkMSwweDAwLDB4NzIsMHg4MCwweDBjLDB4MzAsMHgwMywweGQyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMzAwLCAwLCB7MHg0MCwweDE1LDB4YmMsMHgwNCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhjMiwweDIzLDB4ZWMsMHhiMCwweGZmLDB4MDAsMHgzMiB9LAorICAxNiwgMHhlMzEwLCAwLCB7MHgwNCwweDA2LDB4YjQsMHgyMywweDdjLDB4MTAsMHhiZiwweDAwLDB4M2UsMHg4NCwweDBmLDB4YjAsMHgwMywweDdjLDB4NDAsMHhmZiB9LAorICAxNiwgMHhlMzIwLCAwLCB7MHgwMCwweDMzLDB4NDAsMHgwZiwweGYwLDB4MDMsMHhmYywweDAwLDB4ZmUsMHgwMCwweGJmLDB4NDAsMHgwZiwweGM4LDB4MDMsMHhkMCB9LAorICAxNiwgMHhlMzMwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGU0LDB4MDAsMHhjYiwweDMzLDB4M2UsMHhjOCB9LAorICAxNiwgMHhlMzQwLCAwLCB7MHg0YywweGIwLDB4MDMsMHhhYywweDkwLDB4ZGIsMHhhMCwweDM2LDB4YzAsMHgwZSwweGJhLDB4NDMsMHg2YywweDAwLDB4YzksMHgwMCB9LAorICAxNiwgMHhlMzUwLCAwLCB7MHgzZSwweDQwLDB4MGYsMHgwMCwweDBmLDB4MjgsMHgwMCwweGZiLDB4MDAsMHgzZSwweDQwLDB4MGYsMHgxOCwweDQzLDB4NjAsMHgwMCB9LAorICAxNiwgMHhlMzYwLCAwLCB7MHhmYSwweDAwLDB4M2UsMHg0MCwweDRmLDB4MDgsMHgwYiwweDJhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMzcwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgxMCwweDA3LDB4MDgsMHgyYywweGNhLDB4MDgsMHgyMCwweDAyLDB4MWMsMHgyMCwweDg3LDB4MjgsMHgzZiB9LAorICAxNiwgMHhlMzgwLCAwLCB7MHg4MCwweDhhLDB4ZjAsMHgwMiwweDFkLDB4NDAsMHg4NywweDA0LDB4MmQsMHhjMCwweDBiLDB4NzAsMHgwMiwweDFjLDB4MDAsMHhiNiB9LAorICAxNiwgMHhlMzkwLCAwLCB7MHgwMCwweDJkLDB4ODAsMHgwYiwweDYwLDB4MDMsMHgxYywweDAwLDB4YjUsMHgwMCwweDJkLDB4ODAsMHgwYiwweDcwLDB4MDIsMHgxMiB9LAorICAxNiwgMHhlM2EwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDhlLDB4MDAsMHg4NywweGEwLDB4MmQsMHhlNCB9LAorICAxNiwgMHhlM2IwLCAwLCB7MHgwYSwweDU4LDB4MDIsMHgxZSwweDAxLDB4ODMsMHg5MCwweDIxLDB4NzAsMHgwYiwweDc5LDB4MDIsMHg5ZSwweDAxLDB4ODUsMHhjMCB9LAorICAxNiwgMHhlM2MwLCAwLCB7MHgyZCwweGUwLDB4NGIsMHg1OCwweDEyLDB4MWEsMHgwMCwweGI2LDB4ODAsMHgyZCwweDIwLDB4MGIsMHg0OCwweDAyLDB4NTIsMHgwMCB9LAorICAxNiwgMHhlM2QwLCAwLCB7MHhiNCwweDgwLDB4MmQsMHgyMCwweDBiLDB4NDgsMHgwMiwweDMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlM2UwLCAwLCB7MHg0OCwweDE0LDB4ZWMsMHgwMCwweDgzLDB4MDAsMHgyYywweGMwLDB4ODgsMHgzNiwweDAyLDB4MGMsMHgwMiwweDgzLDB4MDAsMHg2YyB9LAorICAxNiwgMHhlM2YwLCAwLCB7MHhjMCwweDBiLDB4MzAsMHgwYSwweGFjLDB4MDAsMHg5YiwweGUwLDB4NmMsMHhjOCwweDBiLDB4MzIsMHgwMiwweDBjLDB4MDEsMHhiMyB9LAorICAxNiwgMHhlNDAwLCAwLCB7MHgwMCwweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwYywweDEwLDB4YjMsMHg0MCwweDJjLDB4YzAsMHgwYiwweDNjLDB4ODIsMHgxMiB9LAorICAxNiwgMHhlNDEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGI4LDB4MDIsMHhjYSwweDAwLDB4M2UsMHg4MCB9LAorICAxNiwgMHhlNDIwLCAwLCB7MHgwZSwweGU0LDB4OGIsMHgyOCwweDAwLDB4Y2EsMHgwMCwweDMzLDB4OTUsMHgwZiwweGEwLDB4MDcsMHhhOCwweDAyLDB4Y2UsMHg0MCB9LAorICAxNiwgMHhlNDMwLCAwLCB7MHgzZiwweGIwLDB4MGYsMHhlNCwweDgyLDB4MjgsMHgwMCwweGZhLDB4MDAsMHgzZSwweDgwLDB4MGYsMHhhMCwweDIzLDB4NjgsMHgwMCB9LAorICAxNiwgMHhlNDQwLCAwLCB7MHhmYSwweDQwLDB4M2UsMHg4MSwweDRmLDB4YTQsMHhlMywweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNDUwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHg4MCwweGYwLDB4MDAsMHgzYywweDAwLDB4MmYsMHgwMCwweDAyLDB4NjAsMHgwMCwweGU4LDB4MDAsMHgzYyB9LAorICAxNiwgMHhlNDYwLCAwLCB7MHgwMCwweDBlLDB4ODAsMHgwMSwweDIwLDB4MDAsMHhlOCwweDA0LDB4NWUsMHgwNCwweDBmLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmYyB9LAorICAxNiwgMHhlNDcwLCAwLCB7MHgwMSwweDNmLDB4MTAsMHgwZiwweGM0LDB4MDMsMHhiMCwweDAwLDB4ZmMsMHgwOSwweDNmLDB4MDAsMHgwZiwweGMwLDB4MDMsMHhkMiB9LAorICAxNiwgMHhlNDgwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDAsMHhhOSwweDIwLDB4MzYsMHg0MCB9LAorICAxNiwgMHhlNDkwLCAwLCB7MHgwZSwweDkwLDB4MDMsMHg0NCwweDA0LDB4ZDksMHgwMCwweDNlLDB4NDAsMHgwZCwweDkwLDB4MDMsMHhlNCwweDA0LDB4YzksMHgwMCB9LAorICAxNiwgMHhlNGEwLCAwLCB7MHgzMiwweDQwLDB4OGYsMHg5MCwweDBiLDB4ZTQsMHgwOCwweGY5LDB4MDAsMHgzZSwweDQ0LDB4MGUsMHg5OCwweDAzLDB4ZTYsMHgwMCB9LAorICAxNiwgMHhlNGIwLCAwLCB7MHhmOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGMyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNGMwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4MDAsMHgyMiwweDQwLDB4MTgsMHg5MCwweDAyLDB4MjQsMHgwMCwweDg5LDB4MDAsMHgyZSB9LAorICAxNiwgMHhlNGQwLCAwLCB7MHg0MCwweDA4LDB4OTQsMHgwMiwweGU0LDB4MDAsMHhkOSwweDA0LDB4MjIsMHg0MCwweDBiLDB4MWMsMHgwYiwweDY0LDB4MDAsMHhiOSB9LAorICAxNiwgMHhlNGUwLCAwLCB7MHg5NCwweDJjLDB4NTAsMHgwOCwweDljLDB4MDIsMHhlNCwweDE0LDB4YjksMHg5MCwweDBlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhlMCB9LAorICAxNiwgMHhlNGYwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDIsMHg4OSwweDAwLDB4MjYsMHg0MCB9LAorICAxNiwgMHhlNTAwLCAwLCB7MHg0YSwweDkwLDB4MDIsMHg2NCwweDAwLDB4OTksMHgwNCwweDJlLDB4NDAsMHgwOCwweDk4LDB4ODIsMHhlNCwweDAwLDB4ODksMHgwMCB9LAorICAxNiwgMHhlNTEwLCAwLCB7MHg2YSwweDQwLDB4MGEsMHg5MiwweDgyLDB4ZTQsMHgwMCwweGJkLDB4MDEsMHgyZiwweDUwLDB4MTIsMHhkNiwweDAyLDB4ZjQsMHg0MCB9LAorICAxNiwgMHhlNTIwLCAwLCB7MHhiZCwweDAwLDB4MGYsMHg0MCwweDBiLDB4ZDAsMHgwMiwweGM2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNTMwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweDgxLDB4MjAsMHgyMCwweDQ4LDB4MDgsMHgxMiwweDAyLDB4MDQsMHg4MCwweDgxLDB4MjIsMHgyYyB9LAorICAxNiwgMHhlNTQwLCAwLCB7MHg0OCwweGE4LDB4MTIsMHgwNiwweGM0LDB4OTAsMHg5MSwweDIwLDB4MjgsMHg1MCwweDBiLDB4OTAsMHgwMiwweDQ1LDB4MDAsMHhiNSB9LAorICAxNiwgMHhlNTUwLCAwLCB7MHg0MCwweDZkLDB4NDAsMHgwOCwweDUwLDB4MTIsMHhkNCwweDA0LDB4YjUsMHgwMiwweDJkLDB4NDAsMHgwYiwweDUwLDB4MDIsMHhjMiB9LAorICAxNiwgMHhlNTYwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYxLDB4NDAsMHhjOCwweDAwLDB4MzYsMHgxNCB9LAorICAxNiwgMHhlNTcwLCAwLCB7MHgwYSwweDg1LDB4MDMsMHg0MSwweDQwLDB4ZDgsMHg1MCwweDJlLDB4MTQsMHgwYywweDg1LDB4MDMsMHhjMSwweDQwLDB4YzgsMHg1MCB9LAorICAxNiwgMHhlNTgwLCAwLCB7MHhiYSwweDAwLDB4MGUsMHg4MCwweDIzLDB4ZTAsMHgwMCwweDc4LDB4MDAsMHgzZSwweDAwLDB4MGUsMHg4MCwweDAzLDB4ZTAsMHgwNCB9LAorICAxNiwgMHhlNTkwLCAwLCB7MHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4YzAsMHgwMywweGVlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNWEwLCAwLCB7MHg5OCwweDFkLDB4ZjQsMHg0MCwweGQ5LDB4MTAsMHgzZSwweDQ0LDB4MDcsMHhmMSwweDAzLDB4ZTQsMHg0MCwweGY5LDB4MTAsMHgzZiB9LAorICAxNiwgMHhlNWIwLCAwLCB7MHg0NCwweGFmLDB4OTEsMHgwMywweGU0LDB4NDAsMHhmZCwweDEwLDB4MzcsMHg1MCwweDBmLDB4ZDAsMHgwMywweGU0LDB4MDAsMHhmOSB9LAorICAxNiwgMHhlNWMwLCAwLCB7MHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNCwweGEwLDB4ZjksMHgyOCwweDNlLDB4NGEsMHgwZiwweDkyLDB4ODMsMHhlNiB9LAorICAxNiwgMHhlNWQwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGU2LDB4ZDQsMHhmZCwweGEyLDB4M2EsMHg3MCB9LAorICAxNiwgMHhlNWUwLCAwLCB7MHg4YywweDllLDB4MDMsMHgyNiwweDgwLDB4YzksMHhhMCwweDMyLDB4NjgsMHgwYywweGRiLDB4NDMsMHgyNywweDgwLDB4OWQsMHhhMiB9LAorICAxNiwgMHhlNWYwLCAwLCB7MHhiNywweDQwLDB4MGYsMHg1MCwweDAzLDB4NjUsMHgwMCwweGZkLDB4MDAsMHgzZiwweGMxLDB4MDcsMHhkMCwweDAzLDB4ZjUsMHgwNCB9LAorICAxNiwgMHhlNjAwLCAwLCB7MHhmZCwweDQwLDB4MmYsMHhjMCwweDBjLDB4ZDAsMHgwMywweGM2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNjEwLCAwLCB7MHgzOCwweDEwLDB4ZTMsMHg4OCwweGI4LDB4NTAsMHgyMiwweDM4LDB4MDgsMHg4ZSwweDAwLDB4YTIsMHhhMCwweDg4LDB4ZTgsMHgyMiB9LAorICAxNiwgMHhlNjIwLCAwLCB7MHgzOCwweDQ4LDB4ODgsMHgwMywweDYyLDB4MTAsMHhhOCwweGU4LDB4M2MsMHgwMCwweDBiLDB4ODAsMHgwMywweDYyLDB4ODAsMHhiOCB9LAorICAxNiwgMHhlNjMwLCAwLCB7MHgwMSwweDJlLDB4ODAsMHgwYiwweDgwLDB4MjEsMHhhMiwweDAwLDB4YjAsMHg4NCwweDJlLDB4MmEsMHgyOCwweDhhLDB4ODIsMHhjZSB9LAorICAxNiwgMHhlNjQwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4NDAsMHhiMSwweDAwLDB4MjgsMHg1OCB9LAorICAxNiwgMHhlNjUwLCAwLCB7MHg4MCwweDEzLDB4NDAsMHgwNSwweDAwLDB4ODEsMHg0MCwweDIwLDB4NTIsMHgyOCwweDE2LDB4MDIsMHg4NSwweDgwLDB4OWIsMHhjMiB9LAorICAxNiwgMHhlNjYwLCAwLCB7MHg2NCwweDQxLDB4OGIsMHg5OCwweDAyLDB4MDQsMHgwMCwweGIxLDB4MDksMHgyYywweDQwLDB4MWIsMHgxMCwweDIwLDB4YzQsMHgwMCB9LAorICAxNiwgMHhlNjcwLCAwLCB7MHhiMSwweDAwLDB4MmMsMHg0MCwweDQ4LDB4MTAsMHgwMiwweGMyLDB4MDUsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNjgwLCAwLCB7MHgxOCwweDE1LDB4YTUsMHg4NCwweGI5LDB4MDAsMHgyMCwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMCwweDAxLDB4MDAsMHgyMCB9LAorICAxNiwgMHhlNjkwLCAwLCB7MHg1MCwweDA4LDB4OTAsMHg0MiwweDY0LDB4MDAsMHhhOSwweDEwLDB4YWUsMHg1OCwweDAzLDB4OTgsMHgwMiwweDY0LDB4MDAsMHhiOSB9LAorICAxNiwgMHhlNmEwLCAwLCB7MHgwMCwweDJlLDB4NDAsMHgwYiwweDkwLDB4NDYsMHhhNCwweDEwLDB4YjksMHgwMCwweDJlLDB4NDEsMHgwOCwweDkwLDB4MDIsMHhjNiB9LAorICAxNiwgMHhlNmIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxMSwweGU3LDB4MDAsMHhmOSwweDAwLDB4MmEsMHg0MCB9LAorICAxNiwgMHhlNmMwLCAwLCB7MHgyYywweDk0LDB4MGIsMHgyNCwweDAyLDB4YzksMHgwMCwweGIyLDB4NDQsMHgwYywweDkwLDB4MDMsMHgyNCwweDA0LDB4ZDksMHg4MCB9LAorICAxNiwgMHhlNmQwLCAwLCB7MHhiNiwweDQxLDB4OGYsMHgxOCwweDAzLDB4MjQsMHgwMCwweGY5LDB4NjAsMHgzZSwweDQwLDB4MGYsMHg5NiwweDAzLDB4ZTQsMHgwMCB9LAorICAxNiwgMHhlNmUwLCAwLCB7MHhmOSwweDgwLDB4M2UsMHg0MiwweDhjLDB4OTAsMHgwMywweGU4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNmYwLCAwLCB7MHgyOCwweDAxLDB4YTYsMHgwMCwweGYxLDB4MDAsMHgzZSwweDQwLDB4MGYsMHgxYywweDAzLDB4YzQsMHgwMCwweGY5LDB4MDAsMHgzZSB9LAorICAxNiwgMHhlNzAwLCAwLCB7MHg0MCwweDhmLDB4OTAsMHgyMywweGM0LDB4MTAsMHhmOSwweDAwLDB4YmUsMHg0MCwweDBmLDB4OTAsMHgwYiwweGU0LDB4MDAsMHhmOSB9LAorICAxNiwgMHhlNzEwLCAwLCB7MHgwMCwweDNlLDB4NDAsMHgwNywweDkwLDB4MjMsMHhlNCwweDAwLDB4ZjksMHgyMCwweDNlLDB4NDAsMHg4ZiwweDkwLDB4MDMsMHhjYSB9LAorICAxNiwgMHhlNzIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGExLDB4MDAsMHhmOCwweDAwLDB4YmUsMHgwMCB9LAorICAxNiwgMHhlNzMwLCAwLCB7MHgwZSwweDg0LDB4MDMsMHgyMCwweDAwLDB4YzgsMHgwMCwweDMyLDB4MDAsMHgwYywweDAwLDB4ODMsMHgyMCwweDAwLDB4ZjgsMHgwMCB9LAorICAxNiwgMHhlNzQwLCAwLCB7MHgzZSwweDAwLDB4MGMsMHg4MCwweDAzLDB4YTAsMHgwMCwweGY4LDB4MDAsMHgzNiwweDEwLDB4MGYsMHg4MCwweDQzLDB4ZTAsMHgwOCB9LAorICAxNiwgMHhlNzUwLCAwLCB7MHhmOCwweDAwLDB4MzIsMHgwMCwweDBmLDB4ODAsMHgwMywweGNhLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNzYwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwMCwweGJhLDB4MDAsMHgyMiwweDgwLDB4NDgsMHhhMCwweDAzLDB4NjgsMHgwMCwweGFhLDB4MDAsMHgyYSB9LAorICAxNiwgMHhlNzcwLCAwLCB7MHg4MCwweDA4LDB4ZTAsMHgwMywweDY4LDB4MDAsMHg4MiwweDAwLDB4MmYsMHg4MCwweDA4LDB4ZTYsMHgwMiwweDI4LDB4MDQsMHhiZSB9LAorICAxNiwgMHhlNzgwLCAwLCB7MHg0MCwweDIzLDB4ODAsMHgwYiwweGU4LDB4MDIsMHhlYSwweDAwLDB4YmUsMHgwMSwweDIyLDB4ODAsMHgwYiwweGUwLDB4MDIsMHhjYSB9LAorICAxNiwgMHhlNzkwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDEsMHg5MywweDAxLDB4MjAsMHhjMSB9LAorICAxNiwgMHhlN2EwLCAwLCB7MHgwYSwweDMwLDB4MDIsMHgwYywweDAwLDB4YTMsMHgwMCwweDIwLDB4YzAsMHg4OCwweDM4LDB4NDIsMHgwYywweDAwLDB4YTMsMHgwMCB9LAorICAxNiwgMHhlN2IwLCAwLCB7MHgyNCwweGMwLDB4MGEsMHgzZSwweDQyLDB4OGMsMHgwMCwweGIyLDB4NGMsMHgyNCwweGUwLDB4NGIsMHgzOCwweDAyLDB4YzQsMHg0MSB9LAorICAxNiwgMHhlN2MwLCAwLCB7MHhiMywweDAwLDB4MjIsMHhjMCwweDBiLDB4MTAsMHgwMiwweGNhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlN2QwLCAwLCB7MHhhMCwweDAxLDB4MWMsMHgwMCwweGI3LDB4MDAsMHgyMCwweGM5LDB4NDgsMHg3MCwweDAyLDB4ZGMsMHg0MCwweGE3LDB4MTQsMHgyYyB9LAorICAxNiwgMHhlN2UwLCAwLCB7MHhjOCwweDI4LDB4MzAsMHg4MiwweDVjLDB4YzEsMHg4NSwweDAwLDB4MmQsMHhlMCwweDJhLDB4ZjAsMHgxMiwweDFjLDB4ODAsMHhiNyB9LAorICAxNiwgMHhlN2YwLCAwLCB7MHhhMCwweDIxLDB4ODIsMHgwYiwweDcwLDB4ODIsMHhkNCwweDExLDB4YjYsMHg4MCwweDIxLDB4NDAsMHg0YiwweDUwLDB4MDIsMHhlOCB9LAorICAxNiwgMHhlODAwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFlLDB4ODAsMHhkNSwweDgwLDB4MjksMHhlYSB9LAorICAxNiwgMHhlODEwLCAwLCB7MHg0ZSwweDNhLDB4MDcsMHgwZSwweDgwLDB4ZTMsMHhiMCwweDMxLDB4ZmMsMHgwYywweDQ4LDB4MDMsMHgwZSwweDQxLDB4ZTcsMHg4MCB9LAorICAxNiwgMHhlODIwLCAwLCB7MHgzZCwweGUwLDB4MGUsMHg3OCwweDAzLDB4OWUsMHg4MCwweGY0LDB4YzQsMHgzNSwweGUwLDB4MGYsMHg3OCwweDI3LDB4ZGUsMHgwMCB9LAorICAxNiwgMHhlODMwLCAwLCB7MHhmNSwweDgwLDB4YjEsMHhlMCwweDBmLDB4NTgsMHgwMywweGVhLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlODQwLCAwLCB7MHgwOCwweDFkLDB4YWMsMHgwMCwweDMxLDB4MDQsMHgzYSwweGM0LDB4MGYsMHhiNSwweDkzLDB4NmQsMHgwOCwweGZiLDB4NDAsMHgzYSB9LAorICAxNiwgMHhlODUwLCAwLCB7MHhjOCwweDYzLDB4ODAsMHgyMywweGVjLDB4OTgsMHhlOSwweDAwLDB4M2UsMHhjMCwweDBkLDB4YjAsMHg0MywweGVjLDB4MDAsMHhmMyB9LAorICAxNiwgMHhlODYwLCAwLCB7MHg4MCwweDNlLDB4NDAsMHg0ZiwweGEwLDB4MDMsMHhlYywweDAwLDB4ZjgsMHg2OCwweDNlLDB4NDAsMHg4ZiwweDk4LDB4MDMsMHhjMiB9LAorICAxNiwgMHhlODcwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGZlLDB4NjAsMHhlYiwweDkwLDB4M2UsMHhlNCB9LAorICAxNiwgMHhlODgwLCAwLCB7MHgwZiwweGI4LDB4MDAsMHgzZiwweDQwLDB4Y2IsMHg4MCwweDdmLDB4ZTAsMHgwZSwweGZiLDB4MDMsMHgyZSwweDQwLDB4Y2IsMHg4MCB9LAorICAxNiwgMHhlODkwLCAwLCB7MHgzZiwweGUwLDB4MGYsMHg3OSwweDQzLDB4MmUsMHg2MCwweGNhLDB4ODEsMHgzMywweDY0LDB4OGYsMHhkOSwweDAzLDB4ZmUsMHgwMCB9LAorICAxNiwgMHhlOGEwLCAwLCB7MHhmZiwweDgxLDB4MzMsMHhlMCwweDBmLDB4ZDksMHg4YiwweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOGIwLCAwLCB7MHhhOCwweDAxLDB4OWMsMHgwMCwweDg3LDB4ODEsMHgxOSwweGU0LDB4MGIsMHhmYSwweDEzLDB4NWUsMHg4MCwweDg3LDB4YjIsMHgyZCB9LAorICAxNiwgMHhlOGMwLCAwLCB7MHhlYywweDBkLDB4NzksMHgwMSwweDllLDB4MDAsMHhkNSwweDkwLDB4MmQsMHhmOCwweDBiLDB4NzgsMHgwMywweDdlLDB4MDgsMHhhYiB9LAorICAxNiwgMHhlOGQwLCAwLCB7MHg5MSwweDI5LDB4ODUsMHgwYiwweDUxLDB4MDIsMHhkYywweDQ4LDB4YjYsMHg0MCwweDIxLDB4NDAsMHgwYiwweDUwLDB4MDIsMHgyYSB9LAorICAxNiwgMHhlOGUwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDhjLDB4MTQsMHhiNSwweDIwLDB4NmQsMHhjOCB9LAorICAxNiwgMHhlOGYwLCAwLCB7MHgwYiwweDcyLDB4MDIsMHg1YywweDgwLDB4ODcsMHgyMCwweDY5LDB4YzAsMHg4OCwweDUzLDB4MDIsMHhjYywweDgxLDB4OTcsMHg1MCB9LAorICAxNiwgMHhlOTAwLCAwLCB7MHgyZCwweGM4LDB4MGIsMHhmNywweDBhLDB4ZGMsMHhjMCwweDg0LDB4MDEsMHgyMSwweDQ0LDB4MWIsMHg3MCwweDIyLDB4ZGMsMHgwMCB9LAorICAxNiwgMHhlOTEwLCAwLCB7MHhiNSwweDAwLDB4MjEsMHhjNCwweDBiLDB4NTAsMHg4NiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOTIwLCAwLCB7MHgyMCwweDE0LDB4Y2YsMHgzMCwweDkxLDB4MDAsMHgyYywweGMwLDB4MGIsMHgzNCwweDAyLDB4NGMsMHgwMCwweDgzLDB4MDAsMHgyYyB9LAorICAxNiwgMHhlOTMwLCAwLCB7MHhmMiwweDBiLDB4MTAsMHgyMiwweDBjLDB4MDAsMHg5MSwweDAwLDB4MmMsMHhjOCwweDBiLDB4MTgsMHgwYSwweGNkLDB4MDEsMHhhMyB9LAorICAxNiwgMHhlOTQwLCAwLCB7MHgwMCwweDI4LDB4NjAsMHgwYiwweDIxLDB4MDIsMHhjZSwweDIwLDB4YjgsMHg0MCwweGEwLDB4NTQsMHgwYiwweDE4LDB4MDIsMHgwOCB9LAorICAxNiwgMHhlOTUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxMSwweGJkLDB4MDAsMHhmOSwweDAwLDB4MmYsMHhjMCB9LAorICAxNiwgMHhlOTYwLCAwLCB7MHgwZiwweGY0LDB4MDIsMHg3YywweDEyLDB4Y2YsMHgwMywweDNmLDB4YzIsMHgwZSwweGIwLDB4MDMsMHhmYywweDA0LDB4OWIsMHgwMiB9LAorICAxNiwgMHhlOTcwLCAwLCB7MHgyZSwweGYyLDB4MGYsMHhhNCwweDBiLDB4ZGMsMHgwMCwweGNlLDB4MDAsMHhiMCwweGM4LDB4OGYsMHhhNCwweDAzLDB4ZWYsMHgwMCB9LAorICAxNiwgMHhlOTgwLCAwLCB7MHhmOCwweDgwLDB4MzIsMHhmNSwweDFmLDB4ZGQsMHgwMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOTkwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHg0MCwweGU5LDB4MDAsMHgzYSwweGMwLDB4MGYsMHhiMSwweDAzLDB4Y2MsMHgwMCwweGYzLDB4MDAsMHgzZSB9LAorICAxNiwgMHhlOWEwLCAwLCB7MHhjMCwweDBkLDB4YjQsMHgwOSwweGVjLDB4MTgsMHhmOSwweDEwLDB4M2UsMHgxMCwweDRmLDB4YjEsMHgwYSwweDZjLDB4ODAsMHhmOSB9LAorICAxNiwgMHhlOWIwLCAwLCB7MHg4OSwweDM2LDB4ODIsMHgwYiwweGE2LDB4MDMsMHhlYywweDUwLDB4ZjksMHg1MCwweDNlLDB4YzAsMHgxZiwweDkwLDB4MDMsMHg2MCB9LAorICAxNiwgMHhlOWMwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGZjLDB4MDAsMHhmZCwweGEwLDB4M2QsMHhjMCB9LAorICAxNiwgMHhlOWQwLCAwLCB7MHgwYywweDcwLDB4ODMsMHgyYywweDAwLDB4ZWYsMHgwMiwweDM1LDB4YzAsMHgwZCwweGUyLDB4MDMsMHhmYywweDA0LDB4ZmYsMHgwMiB9LAorICAxNiwgMHhlOWUwLCAwLCB7MHgyZCwweGUwLDB4OGUsMHhmMCwweDAzLDB4M2MsMHgxMCwweGRjLDB4MDAsMHgzZiwweDgwLDB4MGMsMHhkOCwweDAzLDB4ZmMsMHgwMCB9LAorICAxNiwgMHhlOWYwLCAwLCB7MHhkZSwweDE4LDB4MzMsMHhmMCwweDRmLDB4ZDAsMHgwMywweGMwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYTAwLCAwLCB7MHg4MSwweDAwLDB4NmMsMHgwMCwweGI5LDB4MDAsMHgyZSwweGMwLDB4NGMsMHhiMCwweDAzLDB4NmMsMHgwMCwweDhiLDB4MDIsMHgzNiB9LAorICAxNiwgMHhlYTEwLCAwLCB7MHhjMCwweDBkLDB4YWMsMHgxMiwweGVjLDB4MDAsMHg3OSwweDAwLDB4MmUsMHgzMCwweDBkLDB4M2QsMHg0MiwweGFjLDB4MDAsMHg4OSB9LAorICAxNiwgMHhlYTIwLCAwLCB7MHg4OCwweDFhLDB4MTAsMHgwZCwweDg2LDB4MDIsMHhlZSwweDA0LDB4YmIsMHg0MCwweDIyLDB4ZTAsMHgwYiwweDkwLDB4MDIsMHhlMCB9LAorICAxNiwgMHhlYTMwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDEsMHhiOSwweDAwLDB4MmUsMHhjMCB9LAorICAxNiwgMHhlYTQwLCAwLCB7MHgwOCwweGIwLDB4NDIsMHhhYywweDAwLDB4MGIsMHgwNSwweDI2LDB4YzAsMHgwOSwweDk0LDB4MjAsMHhlYywweDAwLDB4YjksMHg4MCB9LAorICAxNiwgMHhlYTUwLCAwLCB7MHg2ZSwweGM0LDB4ODgsMHhiMCwweDgyLDB4MmMsMHgwMCwweDliLDB4ODIsMHgyZSwweDQyLDB4MDgsMHg4MSwweDAyLDB4ZTQsMHg4MCB9LAorICAxNiwgMHhlYTYwLCAwLCB7MHhiOCwweDAwLDB4MjIsMHhjMSwweDBiLDB4OTAsMHgwMiwweGUwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYTcwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgxMCwweGIxLDB4MjUsMHgyYywweGNhLDB4MDgsMHgzNCwweDQ2LDB4Y2MsMHgwOCwweDgzLDB4MDAsMHgyNCB9LAorICAxNiwgMHhlYTgwLCAwLCB7MHhjMiwweDBiLDB4MDIsMHg1MiwweGNjLDB4ODEsMHg4MywweDAwLDB4MmMsMHgwMCwweDE5LDB4YjIsMHg0MiwweGFjLDB4ODAsMHg4MSB9LAorICAxNiwgMHhlYTkwLCAwLCB7MHgwOCwweDI4LDB4ODAsMHgwOSwweDAwLDB4MDIsMHhjNCwweDQwLDB4YjEsMHgwMCwweDIwLDB4YzAsMHgwYiwweDEwLDB4MDIsMHhjMiB9LAorICAxNiwgMHhlYWEwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDZjLDB4MDAsMHhiOSwweDAwLDB4M2YsMHhkMCB9LAorICAxNiwgMHhlYWIwLCAwLCB7MHgwOCwweGY2LDB4MDcsMHhiYywweGMyLDB4YWYsMHgzMCwweDc1LDB4ZGMsMHgwZCwweDE2LDB4MDIsMHhmYywweGUwLDB4YjksMHg1MCB9LAorICAxNiwgMHhlYWMwLCAwLCB7MHgzZSwweGNjLDB4MGMsMHhiMCwweDIzLDB4MmMsMHgxMCwweGQ5LDB4MDAsMHgzZSwweDAwLDB4MGMsMHg5MCwweDAzLDB4ZWMsMHgwMCB9LAorICAxNiwgMHhlYWQwLCAwLCB7MHhkZSwweDAxLDB4MzIsMHhjMCwweDBmLDB4OTAsMHgwMywweGMwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYWUwLCAwLCB7MHhhMCwweDE5LDB4ZmMsMHgwMCwweGZkLDB4MTAsMHgzZiwweGNhLDB4MmUsMHhmNiwweDAzLDB4NmQsMHg5NCwweDlmLDB4MzAsMHgzYSB9LAorICAxNiwgMHhlYWYwLCAwLCB7MHhjOSwweDBjLDB4ODMsMHg5MywweGZjLDB4ODAsMHhmZiwweDExLDB4N2UsMHgxOSwweDBiLDB4YjEsMHgwMywweGZjLDB4NDAsMHhmZCB9LAorICAxNiwgMHhlYjAwLCAwLCB7MHgwOCwweDNiLDB4MDAsMHgwZiwweGMwLDB4MDMsMHhmYywweDgwLDB4NzcsMHgwMCwweGJmLDB4YzAsMHgwZiwweDUwLDB4MDMsMHhlOCB9LAorICAxNiwgMHhlYjEwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMSwweGZjLDB4MDAsMHhmNCwweDk0LDB4MzcsMHhjOCB9LAorICAxNiwgMHhlYjIwLCAwLCB7MHgwZCwweDY5LDB4NjMsMHg3YywweDEwLDB4ZmYsMHg2MiwweDM3LDB4YzAsMHgwZCwweGI0LDB4MDMsMHg3YywweDYwLDB4ZDQsMHg4MCB9LAorICAxNiwgMHhlYjMwLCAwLCB7MHgzZiwweDQwLDB4MGYsMHg0OCwweDIzLDB4MzIsMHgwMCwweGNlLDB4MDAsMHhiZiwweDQwLDB4OGYsMHhkMSwweDAzLDB4MzAsMHhlMCB9LAorICAxNiwgMHhlYjQwLCAwLCB7MHhmZiwweDMwLDB4M2IsMHg2MCwweDBmLDB4ZDgsMHgwMywweGIwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYjUwLCAwLCB7MHg4MCwweDEwLDB4ZWQsMHgyMCwweGI4LDB4MjQsMHgyMywweGY0LDB4NDksMHhhMiwweDAyLDB4M2YsMHg0MCwweDhmLDB4NTEsMHgyMyB9LAorICAxNiwgMHhlYjYwLCAwLCB7MHhkYSwweDA4LDB4ZjYsMHgxMiwweDNkLDB4ODAsMHg5YiwweDgwLDB4MmUsMHg0OSwweDRiLDB4ODAsMHgwMywweDQwLDB4MDAsMHhkOSB9LAorICAxNiwgMHhlYjcwLCAwLCB7MHgwMSwweDIyLDB4NzQsMHgwYiwweGQ1LDB4MDIsMHgyMSwweDAwLDB4YmYsMHg0MiwweDJlLDB4NDksMHgwYiwweDljLDB4MDIsMHhlMCB9LAorICAxNiwgMHhlYjgwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNkLDB4ODAsMHhiOCwweDIwLDB4MjgsMHhjMSB9LAorICAxNiwgMHhlYjkwLCAwLCB7MHgxYiwweGEwLDB4MDIsMHg0YywweDAwLDB4OTMsMHgyMCwweDJjLDB4ZDgsMHgwYiwweDM0LDB4MDIsMHhjYywweDAwLDB4OTAsMHgwMSB9LAorICAxNiwgMHhlYmEwLCAwLCB7MHgyYywweGM2LDB4MWEsMHhhMCwweDAyLDB4NjgsMHgwOCwweDgzLDB4MDAsMHhhNCwweDQwLDB4MGIsMHgxMCwweDAyLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYmIwLCAwLCB7MHhiMywweDEwLDB4MjgsMHg0MiwweDBiLDB4MTQsMHgwMiwweGEyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYmMwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHgwMCwweGI4LDB4NjAsMHgyYSwweGMwLDB4MWIsMHhhMCwweDhlLDB4YWMsMHgwMSwweDliLDB4MDUsMHgyNiB9LAorICAxNiwgMHhlYmQwLCAwLCB7MHhjMCwweDAzLDB4YjAsMHg0MiwweDZjLDB4MDAsMHg5YiwweDgwLDB4MmUsMHhjMCwweDAzLDB4YTAsMHgwNiwweDY5LDB4MDAsMHg5OSB9LAorICAxNiwgMHhlYmUwLCAwLCB7MHg4MCwweGFhLDB4YzAsMHgwYiwweDkwLDB4MDIsMHg2MywweDAwLDB4M2IsMHgwMCwweDJlLDB4NTgsMHg0YiwweDkwLDB4MDIsMHhmMCB9LAorICAxNiwgMHhlYmYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMSwweGVjLDB4MDQsMHhmOCwweDgwLDB4YmEsMHhjMCB9LAorICAxNiwgMHhlYzAwLCAwLCB7MHgwZiwweDMwLDB4MDMsMHg2YywweDEwLDB4ZGIsMHgwMywweDM2LDB4YzAsMHg4ZiwweGIwLDB4MDMsMHhlYywweDA4LDB4ZDgsMHg4MCB9LAorICAxNiwgMHhlYzEwLCAwLCB7MHg3ZSwweGUwLDB4MDYsMHg4OCwweDAzLDB4NDEsMHgwOCwweGNiLDB4YTAsMHgzZSwweDY0LDB4MGYsMHg5MCwweDBiLDB4MmEsMHgwMCB9LAorICAxNiwgMHhlYzIwLCAwLCB7MHg3YiwweDAwLDB4M2EsMHgwMSwweDBmLDB4OTAsMHgwMywweDkwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYzMwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwMCwweGZjLDB4ODQsMHgzMiwweGMwLDB4MGMsMHhmOSwweDAzLDB4NWMsMHgxMCwweGVmLDB4MDAsMHgzYiB9LAorICAxNiwgMHhlYzQwLCAwLCB7MHhjMCwweDBjLDB4NzAsMHgwMywweDljLDB4MDAsMHhlYywweDAxLDB4M2YsMHhlNCwweDRmLDB4ZDEsMHgwMywweGYxLDB4MDAsMHhmMyB9LAorICAxNiwgMHhlYzUwLCAwLCB7MHgwNSwweDMzLDB4NjAsMHgwZiwweGQwLDB4MDMsMHhiYywweDA0LDB4ZmYsMHgwMCwweDNmLDB4MjEsMHgwZiwweGQwLDB4MDMsMHhmOCB9LAorICAxNiwgMHhlYzYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDAsMHhjOCwweDQwLDB4M2EsMHhjNiB9LAorICAxNiwgMHhlYzcwLCAwLCB7MHgwZCwweGI0LDB4MDMsMHg2YywweDAwLDB4ZjMsMHgwMCwweDM0LDB4YzAsMHgwZSwweGIwLDB4MDMsMHg2YywweDAwLDB4ZTksMHgxMCB9LAorICAxNiwgMHhlYzgwLCAwLCB7MHgzYSwweGMwLDB4MGYsMHg4NCwweDAzLDB4MmMsMHg2MCwweGNiLDB4MDAsMHgzMiwweDYwLDB4MGMsMHg1MCwweDAzLDB4NjEsMHgwMCB9LAorICAxNiwgMHhlYzkwLCAwLCB7MHhjYiwweDAwLDB4M2UsMHg5MCwweDBlLDB4OTAsMHhhMywweDkwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlY2EwLCAwLCB7MHhjOCwweDA1LDB4M2MsMHgwMiwweDg4LDB4MDEsMHgwMSwweGYwLDB4MjAsMHhiMCwweDAxLDB4M2UsMHgwMCwweDNmLDB4MDAsMHgzMyB9LAorICAxNiwgMHhlY2IwLCAwLCB7MHhjMCwweDBiLDB4ZjAsMHgzMiwweDNjLDB4MDgsMHg4OSwweDgwLDB4MjIsMHhjMCwweDAxLDB4MTUsMHgxMiwweGFjLDB4MDAsMHg4YiB9LAorICAxNiwgMHhlY2MwLCAwLCB7MHgwMCwweDIyLDB4YzAsMHg0OCwweGRiLDB4MDIsMHgyZiwweDQwLDB4OGYsMHgwMCwweDJlLDB4MDEsMHgwOCwweGQ0LDB4ODAsMHgzMiB9LAorICAxNiwgMHhlY2QwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MDAsMHgwOCwweDAwLDB4MDgsMHhmMCB9LAorICAxNiwgMHhlY2UwLCAwLCB7MHgwOCwweDAwLDB4MTIsMHg0YywweDAwLDB4MzMsMHgwMSwweDI0LDB4YzAsMHg0YSwweDMwLDB4MDIsMHg0YywweDAwLDB4YTAsMHgyMCB9LAorICAxNiwgMHhlY2YwLCAwLCB7MHgyOCwweGMwLDB4MGIsMHgxMCwweDAyLDB4NDYsMHgwNCwweDgzLDB4MDQsMHgyMCwweGMwLDB4MjksMHgxOCwweDAyLDB4MDQsMHg0MCB9LAorICAxNiwgMHhlZDAwLCAwLCB7MHhiMywweDAwLDB4MmMsMHg0MCwweDBhLDB4MWMsMHg0MiwweGIxLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZDEwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwMSwweDhkLDB4ODAsMHgyMSwweGUwLDB4MTgsMHhjOCwweDAyLDB4MWUsMHgwMCwweGIzLDB4YTAsMHgyMSB9LAorICAxNiwgMHhlZDIwLCAwLCB7MHhlMCwweDFiLDB4MzgsMHgwMiwweDBlLDB4MDEsMHhhNywweDgwLDB4MjEsMHhlMCwweDA5LDB4ZDgsMHg0MCwweGQ2LDB4NDAsMHg4NyB9LAorICAxNiwgMHhlZDMwLCAwLCB7MHg4MCwweDAxLDB4ZTAsMHgwOSwweDU5LDB4MDIsMHgxNiwweDAwLDB4OTcsMHg4NCwweDJkLDB4NjAsMHgwOCwweDU4LDB4NDAsMHgwMCB9LAorICAxNiwgMHhlZDQwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDJjLDB4NDAsMHhjMCwweDAwLDB4MzgsMHhjNCB9LAorICAxNiwgMHhlZDUwLCAwLCB7MHgwYywweDMwLDB4MjcsMHg0YywweDIwLDB4ZjMsMHgwMSwweDM0LDB4YzEsMHgwZSwweDNhLDB4MDMsMHg0YywweGM0LDB4ZTAsMHgwMCB9LAorICAxNiwgMHhlZDYwLCAwLCB7MHgxOCwweGM4LDB4MGYsMHgzNCwweDAzLDB4NDQsMHg0MCwweGMzLDB4MDAsMHgzMCwweGMwLDB4MGQsMHg5MCwweDAzLDB4MmUsMHgwMCB9LAorICAxNiwgMHhlZDcwLCAwLCB7MHhmMywweDAwLDB4M2UsMHg0MCwweDBlLDB4MTAsMHgwMSwweDlhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZDgwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwMCwweGY5LDB4MDAsMHgwZSwweGQ0LDB4MGUsMHhiMCwweDAzLDB4ZWMsMHgyMCwweGZiLDB4MjAsMHgzZiB9LAorICAxNiwgMHhlZDkwLCAwLCB7MHhjNCwweDBmLDB4ZjEsMHgwMywweGVjLDB4NjAsMHhkYiwweDEwLDB4M2YsMHhjMCwweDRmLDB4ZjAsMHgwMywweGE0LDB4NDYsMHhmYiB9LAorICAxNiwgMHhlZGEwLCAwLCB7MHgwMCwweGJkLDB4YzAsMHgwZSwweGQwLDB4MGIsMHhiNCwweDAwLDB4ZWYsMHg0OCwweDNmLDB4NDAsMHgwZiwweDUwLDB4MDMsMHhkMCB9LAorICAxNiwgMHhlZGIwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVjLDB4MDAsMHhmOCwweDAwLDB4MzIsMHhkNCB9LAorICAxNiwgMHhlZGMwLCAwLCB7MHgwZiwweDgwLDB4MDMsMHhhZCwweDAwLDB4ZWIsMHgwOCwweDIyLDB4ZDIsMHgwYywweGI2LDB4MDMsMHg2YywweDAwLDB4ZjIsMHg4MCB9LAorICAxNiwgMHhlZGQwLCAwLCB7MHgzNiwweGMwLDB4MGUsMHhhMCwweDAzLDB4MjgsMHgxMCwweGNiLDB4MDAsMHhiMiwweGMwLDB4MGYsMHhkNiwweDAzLDB4MjgsMHgxMCB9LAorICAxNiwgMHhlZGUwLCAwLCB7MHhmYiwweDIwLDB4M2UsMHg0MCwweDRmLDB4OTksMHgxMywweDJiLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZGYwLCAwLCB7MHg0OCwweDExLDB4OWQsMHgxMCwweGI0LDB4MDEsMHgyMSwweGMxLDB4OGIsMHhjMCwweDAyLDB4MWMsMHhhMCwweGJmLDB4MDQsMHgyNyB9LAorICAxNiwgMHhlZTAwLCAwLCB7MHhjOCwweDA4LDB4NzUsMHgwMiwweDFjLDB4YzAsMHhiNiwweDAwLDB4MjEsMHhjMCwweDA4LDB4ZjAsMHg0MiwweDE4LDB4MTAsMHg4ZiB9LAorICAxNiwgMHhlZTEwLCAwLCB7MHgwMCwweDIxLDB4YzAsMHgwYiwweDU0LDB4YTIsMHgxYywweDAwLDB4YjcsMHgwNCwweDJkLDB4NDEsMHgwYiwweDUyLDB4MDIsMHgxMiB9LAorICAxNiwgMHhlZTIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4ODAsMHhiNiwweDg4LDB4YTUsMHhlMCB9LAorICAxNiwgMHhlZTMwLCAwLCB7MHgwYiwweDc4LDB4MTIsMHg5ZSwweDgxLDB4YTcsMHg5MCwweDI1LDB4ZTQsMHg4OCwweDc4LDB4MDIsMHgxZSwweDgwLDB4YmYsMHg4MCB9LAorICAxNiwgMHhlZTQwLCAwLCB7MHgyNCwweDYwLDB4MGIsMHg2OCwweDAyLDB4MWUsMHgwMCwweDg3LDB4ODQsMHg2MSwweGUwLDB4MGEsMHgxYSwweDBhLDB4MWEsMHgwMCB9LAorICAxNiwgMHhlZTUwLCAwLCB7MHhiNywweGEwLDB4MmQsMHhlMCwweDBiLDB4ZGEsMHgwMiwweDMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZTYwLCAwLCB7MHg0OCwweDE0LDB4Y2MsMHgwMCwweGJhLDB4YzAsMHhhNCwweGMwLDB4MGIsMHgzNCwweDAyLDB4MGMsMHgwMCwweGIzLDB4MDAsMHgyNCB9LAorICAxNiwgMHhlZTcwLCAwLCB7MHhjMCwweDA4LDB4YjAsMHgwZSwweDJjLDB4MDAsMHhiMywweDk4LDB4MjAsMHg2MCwweDA5LDB4MzMsMHgwMiwweDJjLDB4MDAsMHhhMyB9LAorICAxNiwgMHhlZTgwLCAwLCB7MHhjOCwweDIwLDB4YzAsMHgwYiwweDEwLDB4MDIsMHgwYywweDAwLDB4YjMsMHgwMCwweDJjLDB4ZjAsMHgwYiwweDEwLDB4MDIsMHgxMiB9LAorICAxNiwgMHhlZTkwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MDAsMHhmZSwweDgwLDB4MzYsMHg4MSB9LAorICAxNiwgMHhlZWEwLCAwLCB7MHgwYiwweGUwLDB4MDMsMHhhOCwweDAwLDB4ZWEsMHgwMCwweGIyLDB4ODAsMHgwOCwweGEwLDB4MDMsMHg2OCwweDAwLDB4ZmUsMHgwMCB9LAorICAxNiwgMHhlZWIwLCAwLCB7MHgzNiwweGEwLDB4MWYsMHhlOCwweDEzLDB4M2IsMHg4MiwweGNlLDB4ZTAsMHgyMiwweDgwLDB4OGUsMHhhMCwweDAzLDB4MzgsMHgwMCB9LAorICAxNiwgMHhlZWMwLCAwLCB7MHhiYSwweDAwLDB4M2YsMHhhMiwweDBmLDB4YTAsMHgwMywweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZWQwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4MjAsMHgzYSwweDEwLDB4MDcsMHg4MCwweDAzLDB4YzEsMHgwMCwweGY4LDB4MDAsMHgzOCB9LAorICAxNiwgMHhlZWUwLCAwLCB7MHgwMCwweDJmLDB4ODAsMHgwMywweGEwLDB4MDEsMHhmOCwweDQyLDB4M2UsMHgwNSwweDBlLDB4ODAsMHgwYiwweGUwLDB4ODAsMHhkOCB9LAorICAxNiwgMHhlZWYwLCAwLCB7MHgwMCwweDNlLDB4MDAsMHgwZiwweDg0LDB4MDMsMHhlMSwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDg0LDB4MGIsMHhkMiB9LAorICAxNiwgMHhlZjAwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDAsMHhjOSwweDAwLDB4M2EsMHg1MCB9LAorICAxNiwgMHhlZjEwLCAwLCB7MHg4ZiwweDkwLDB4ODMsMHhhNCwweDAyLDB4ZDEsMHgwMCwweGIyLDB4NDAsMHg0YywweDkwLDB4MjMsMHgyNCwweDA4LDB4YzksMHgwMSB9LAorICAxNiwgMHhlZjIwLCAwLCB7MHgzZSwweDQwLDB4MGMsMHg5MCwweDAzLDB4MjQsMHgwMCwweGMxLDB4MDAsMHgzMiwweDQwLDB4MGYsMHgxNCwweDBhLDB4MjUsMHgyMCB9LAorICAxNiwgMHhlZjMwLCAwLCB7MHhlOSwweDAwLDB4M2UsMHg0MiwweDBmLDB4OTAsMHgwMywweGMyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZjQwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwYSwweDg5LDB4MDAsMHgyMiwweDcwLDB4MGIsMHg5MCwweDEyLDB4MjUsMHg4MCwweGM5LDB4MDAsMHgyMiB9LAorICAxNiwgMHhlZjUwLCAwLCB7MHg0MCwweDBhLDB4OTAsMHgwMywweDY0LDB4MDAsMHg4OSwweDIwLDB4MmMsMHg0MCwweDBhLDB4OTAsMHgwYSwweDI0LDB4MDAsMHg4OSB9LAorICAxNiwgMHhlZjYwLCAwLCB7MHhjMSwweDMyLDB4NDAsMHgwYiwweDk4LDB4MDIsMHgwNiwweDAwLDB4ODksMHg5MCwweDJlLDB4NDAsMHgwYiwweDk0LDB4MTIsMHhlMCB9LAorICAxNiwgMHhlZjcwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMSwweDA0LDB4MDAsMHg4OSwweDAwLDB4NmEsMHg0MiB9LAorICAxNiwgMHhlZjgwLCAwLCB7MHgwYSwweDEwLDB4MDIsMHhhNCwweDAwLDB4ODksMHgwMCwweGEyLDB4NDAsMHgwYSwweDkwLDB4MDIsMHgyNCwweDAwLDB4MDksMHgwMCB9LAorICAxNiwgMHhlZjkwLCAwLCB7MHgyZSwweDQwLDB4NTgsMHgxMCwweDAyLDB4MjQsMHgwMCwweDg5LDB4ODAsMHhhYSwweDYwLDB4MGIsMHg5MCwweDAyLDB4YTQsMHgwNCB9LAorICAxNiwgMHhlZmEwLCAwLCB7MHhhOSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTQsMHgwMiwweGM2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZmIwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweDgxLDB4MDAsMHg2MCwweDQ4LDB4MGIsMHgxMCwweDAyLDB4MDQsMHg4MSwweDgxLDB4MjAsMHg2MCB9LAorICAxNiwgMHhlZmMwLCAwLCB7MHg0OCwweDBhLDB4MTIsMHgwMiwweDQ0LDB4ODgsMHg4MSwweDAwLDB4MGUsMHg1OSwweDBhLDB4MTQsMHgwMiwweDA1LDB4MDAsMHg4MSB9LAorICAxNiwgMHhlZmQwLCAwLCB7MHhjMCwweDI4LDB4NTAsMHg0OSwweDMwLDB4MDIsMHg4YywweDg0LDB4MDEsMHg2MCwweDJjLDB4NTAsMHgwYiwweDEwLDB4MDIsMHhjMiB9LAorICAxNiwgMHhlZmUwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYxLDB4NDAsMHhjMCwweDU0LDB4MmEsMHgwMCB9LAorICAxNiwgMHhlZmYwLCAwLCB7MHgwZSwweDg1LDB4MDMsMHhhMCwweDAwLDB4YzgsMHg1MCwweDMyLDB4MTUsMHgxZSwweDA1LDB4MjIsMHgyMSwweDQyLDB4YzgsMHgwMCB9LAorICAxNiwgMHhmMDAwLCAwLCB7MHgzZSwweDAwLDB4MGMsMHg4MCwweDAzLDB4MDAsMHgwNCwweGM4LDB4MDAsMHgzYSwweDAwLDB4NGYsMHg4NSwweDAzLDB4YTEsMHg0MCB9LAorICAxNiwgMHhmMDEwLCAwLCB7MHg2OCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGVlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMDIwLCAwLCB7MHg5OCwweDFkLDB4ZTQsMHg0MCwweGZkLDB4MDMsMHgzZSwweDQ0LDB4MGYsMHhkMCwweDAzLDB4ZTQsMHg0OCwweGU5LDB4MTAsMHgzZSB9LAorICAxNiwgMHhmMDMwLCAwLCB7MHg0NSwweDBmLDB4OTEsMHgxMywweGU0LDB4NDAsMHhmZCwweDAwLDB4M2YsMHg0NCwweDBmLDB4ZDAsMHgwMywweGY0LDB4MDIsMHhmZCB9LAorICAxNiwgMHhmMDQwLCAwLCB7MHg0MCwweDMzLDB4NTAsMHgwZiwweGQ0LDB4MjMsMHg3NCwweDQwLDB4ZjksMHgxMCwweDNmLDB4NDAsMHgwZiwweDU0LDB4MDMsMHhlNiB9LAorICAxNiwgMHhmMDUwLCAwLCB7MHgwMiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGU0LDB4MDAsMHhmOSwweDAxLDB4MzMsMHg2YSB9LAorICAxNiwgMHhmMDYwLCAwLCB7MHgwOSwweDkwLDB4MDMsMHhiNiwweDM0LDB4ZjksMHhjOCwweDMyLDB4NjQsMHgwYywweDlhLDB4MDMsMHhlNiwweGEwLDB4ZGQsMHgwMCB9LAorICAxNiwgMHhmMDcwLCAwLCB7MHgzYywweDcwLDB4MGYsMHg5MCwweDAzLDB4YTUsMHgwMCwweDg5LDB4ODAsMHgzMywweDMyLDB4MGYsMHhkOCwweDEzLDB4M2MsMHgwMCB9LAorICAxNiwgMHhmMDgwLCAwLCB7MHhmZCwweDAwLDB4NzAsMHg1MCwweDBmLDB4ZDAsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMDkwLCAwLCB7MHgzOCwweDEwLDB4ZTIsMHg4MCwweGI4LDB4YTgsMHgyMiwweDEwLDB4MDgsMHg4OCwweDAyLDB4MjEsMHgwMCwweGI4LDB4YzAsMHgyMCB9LAorICAxNiwgMHhmMGEwLCAwLCB7MHgzMCwweDBkLDB4OGUsMHg4NywweDgzLDB4ODgsMHg4OCwweDAwLDB4MmUsMHgzNCwweDBiLDB4OGEsMHg4MiwweDIyLDB4ODAsMHhkYyB9LAorICAxNiwgMHhmMGIwLCAwLCB7MHhlMCwweDIyLDB4MzgsMHgwYiwweDgwLDB4MDIsMHgyMCwweDAwLDB4ZjgsMHhhOCwweDJhLDB4MjgsMHgwYiwweDgwLDB4MDIsMHgwZSB9LAorICAxNiwgMHhmMGMwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4MjAsMHhiMSwweDAwLDB4MjAsMHg0MCB9LAorICAxNiwgMHhmMGQwLCAwLCB7MHgwYSwweDkyLDB4OTIsMHg4NCwweDExLDB4YjEsMHgyNCwweDY4LDB4NTgsMHgwOSwweDExLDB4MDIsMHhjNCwweDIwLDB4OTEsMHgwMSB9LAorICAxNiwgMHhmMGUwLCAwLCB7MHgyYywweDQ4LDB4MWIsMHg1MCwweDAyLDB4NzQsMHg4NCwweDk1LDB4NDgsMHhhYywweDQ4LDB4MGIsMHg5NCwweDAyLDB4MDQsMHgwNCB9LAorICAxNiwgMHhmMGYwLCAwLCB7MHhiMSwweDAyLDB4MjQsMHg0OCwweDBiLDB4MTAsMHgwMiwweDAyLDB4MDUsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMTAwLCAwLCB7MHgxOCwweDExLDB4YTQsMHgwMCwweGIxLDB4MjAsMHgyMiwweDQwLDB4MGEsMHg5MCwweDA2LDB4MmMsMHgwMSwweGI5LDB4MDAsMHgyYSB9LAorICAxNiwgMHhmMTEwLCAwLCB7MHg0MCwweDA5LDB4OTAsMHgwMiwweGE0LDB4MDAsMHg5YiwweDA4LDB4MmUsMHg0OCwweDBiLDB4MTIsMHgxYSwweDc0LDB4MDAsMHg5NSB9LAorICAxNiwgMHhmMTIwLCAwLCB7MHg0NSwweDJlLDB4NjAsMHgwMywweDkwLDB4MDIsMHgyNCwweDAwLDB4YjksMHgwMCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHgwNiB9LAorICAxNiwgMHhmMTMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU0LDB4MDAsMHhmOSwweDgwLDB4MzAsMHg0MCB9LAorICAxNiwgMHhmMTQwLCAwLCB7MHgwZSwweDE2LDB4MDMsMHhhNCwweDAwLDB4YjksMHgwNCwweDMyLDB4NDAsMHgwZCwweDkwLDB4MDIsMHhlNCwweDAwLDB4ZDksMHg0MCB9LAorICAxNiwgMHhmMTUwLCAwLCB7MHgyZSwweDQwLDB4MWYsMHg5OCwweDAzLDB4ZTUsMHg4MCwweGQ5LDB4MDAsMHhhZSwweDYwLDB4MDcsMHgxMCwweDBiLDB4MjYsMHgwMSB9LAorICAxNiwgMHhmMTYwLCAwLCB7MHhiOSwweDAwLDB4YTYsMHg0MCwweDBmLDB4OTAsMHgwYiwweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMTcwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwMCwweGY5LDB4MDAsMHhiZSwweDQwLDB4YWMsMHg5MiwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHhiNCB9LAorICAxNiwgMHhmMTgwLCAwLCB7MHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhlOSwweDAwLDB4M2UsMHg2MCwweDBmLDB4OTAsMHgwMywweGE0LDB4ODAsMHhmOSB9LAorICAxNiwgMHhmMTkwLCAwLCB7MHgwMCwweDMyLDB4MDAsMHgwZiwweDkwLDB4ODMsMHhlNiwweDg1LDB4ZTEsMHgwMCwweDMyLDB4NDQsMHgwZiwweDEwLDB4MDMsMHhjYSB9LAorICAxNiwgMHhmMWEwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDAsMHhmOCwweDAwLDB4MzIsMHgwMCB9LAorICAxNiwgMHhmMWIwLCAwLCB7MHgwZiwweDgwLDB4MTMsMHhlMCwweDk0LDB4ZTAsMHgwMCwweDMyLDB4MDAsMHgwYywweDgwLDB4MDMsMHg2MCwweDAwLDB4YzgsMHgwMCB9LAorICAxNiwgMHhmMWMwLCAwLCB7MHgzZSwweDAwLDB4MGQsMHg4MCwweDQzLDB4MjAsMHgwOCwweGY4LDB4MDAsMHgzMiwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZTAsMHg0MCB9LAorICAxNiwgMHhmMWQwLCAwLCB7MHhmOCwweDAwLDB4MzIsMHgwMCwweDRjLDB4ODAsMHgyMywweGNhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMWUwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwMCwweGJhLDB4MDAsMHgyMywweDgwLDB4MGIsMHhhMCwweDAyLDB4ZmIsMHgwNCwweDZhLDB4MDAsMHgyMiB9LAorICAxNiwgMHhmMWYwLCAwLCB7MHg4MCwweDBhLDB4YTAsMHgwMywweDY4LDB4MGEsMHg4ZSwweDg4LDB4M2EsMHg4MCwweDA4LDB4YTAsMHgwMiwweDA4LDB4MDAsMHhiYSB9LAorICAxNiwgMHhmMjAwLCAwLCB7MHgwMCwweGI3LDB4MjIsMHgwMywweGU0LDB4MDIsMHhmYSwweDAwLDB4OGEsMHgwMCwweDIyLDB4ODAsMHgwOCwweGU4LDB4MDIsMHhjYSB9LAorICAxNiwgMHhmMjEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDAsMHhiMywweDAwLDB4NjAsMHg0MSB9LAorICAxNiwgMHhmMjIwLCAwLCB7MHgwMywweDMwLDB4MDIsMHhjYywweDQxLDB4YTMsMHgwMCwweDA0LDB4YzAsMHgwYiwweDMwLDB4MDIsMHgyYywweDAwLDB4YTMsMHg4MCB9LAorICAxNiwgMHhmMjMwLCAwLCB7MHgyYywweGMwLDB4MDksMHgzOCwweDAyLDB4MGMsMHgwMCwweGIzLDB4MDAsMHhhMCwweGMwLDB4MGIsMHgzNCwweDAyLDB4Y2MsMHg4MCB9LAorICAxNiwgMHhmMjQwLCAwLCB7MHhhMSwweDAwLDB4MjAsMHhjMCwweDA4LDB4MzgsMHgwMiwweGNhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMjUwLCAwLCB7MHhhMCwweDAxLDB4MWMsMHg0MCwweGI3LDB4MDAsMHg2MSwweDAwLDB4MGIsMHg3MSwweDAyLDB4ZGMsMHgwMCwweGEzLDB4MDAsMHgyNSB9LAorICAxNiwgMHhmMjYwLCAwLCB7MHhjOCwweDE5LDB4MzgsMHgwMiwweDVjLDB4ODAsMHhhNywweDAwLDB4MGYsMHhlOCwweDA5LDB4NjQsMHgyMiwweDEwLDB4MDAsMHhiMyB9LAorICAxNiwgMHhmMjcwLCAwLCB7MHgwMCwweDI1LDB4YzgsMHgwYiwweDYwLDB4MDIsMHhmMiwweDAwLDB4ODUsMHgwMSwweDIzLDB4ZTgsMHgwOCwweDcwLDB4ODIsMHhlOCB9LAorICAxNiwgMHhmMjgwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFlLDB4MjAsMHhmZiwweDgwLDB4YTEsMHhhMCB9LAorICAxNiwgMHhmMjkwLCAwLCB7MHgwZiwweDdhLDB4NDIsMHhkYSwweDAwLDB4ZTcsMHhlOCwweDM1LDB4ZjAsMHgyZiwweDdiLDB4NjIsMHgxZSwweDgyLDB4ZTYsMHg4MCB9LAorICAxNiwgMHhmMmEwLCAwLCB7MHgxZCwweGUwLDB4MGQsMHhmOCwweDBiLDB4MWUsMHgwMCwweGY3LDB4ODAsMHgzMSwweGYwLDB4MGYsMHg3OCwweDAzLDB4ZGUsMHgwYyB9LAorICAxNiwgMHhmMmIwLCAwLCB7MHhlZiwweDgwLDB4MzEsMHhmOCwweDJjLDB4NzgsMHgwMywweGVhLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMmMwLCAwLCB7MHgwOCwweDFkLDB4YWQsMHg4NCwweGZiLDB4NjgsMHgzZSwweDAwLDB4MGYsMHhiMCwweDAzLDB4ZTgsMHgwMCwweGZiLDB4MDAsMHhmYSB9LAorICAxNiwgMHhmMmQwLCAwLCB7MHhkOCwweDBlLDB4YjUsMHgwMywweGVkLDB4MDAsMHhkYiwweDAwLDB4M2EsMHhjMCwweDhlLDB4YTAsMHgwMywweGUwLDB4MDAsMHhmYiB9LAorICAxNiwgMHhmMmUwLCAwLCB7MHg0MCwweDNlLDB4YzAsMHgwYiwweGIwLDB4NDMsMHhjNCwweDA0LDB4ZWYsMHgwMiwweGJmLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhjMiB9LAorICAxNiwgMHhmMmYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGZlLDB4NDIsMHhjNywweDM4LDB4MzMsMHg2NCB9LAorICAxNiwgMHhmMzAwLCAwLCB7MHgwZSwweDdjLDB4MDMsMHg1ZSwweDAwLDB4ZGYsMHhhMCwweDM3LDB4ZjAsMHgwZCwweGY4LDB4MDMsMHhmZiwweDIwLDB4Y2YsMHg4MSB9LAorICAxNiwgMHhmMzEwLCAwLCB7MHgzMywweGUyLDB4MGMsMHhkOCwweDAzLDB4YmUsMHgwMCwweDdmLDB4YzAsMHgzMywweGUwLDB4MGMsMHhmOSwweDAzLDB4N2UsMHgwMCB9LAorICAxNiwgMHhmMzIwLCAwLCB7MHhmZCwweDgwLDB4M2YsMHhlMCwweDBmLDB4ZjgsMHgwMywweGMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMzMwLCAwLCB7MHhhOCwweDExLDB4OWMsMHgwMCwweDg3LDB4YTAsMHgyMSwweDE0LDB4MDgsMHg3MSwweDAyLDB4MTQsMHgxMCwweGQ3LDB4MjAsMHgzNSB9LAorICAxNiwgMHhmMzQwLCAwLCB7MHhjMCwweDBjLDB4NzAsMHgwMywweGJjLDB4MDAsMHg4NSwweDA4LDB4MmIsMHhjMCwweDRkLDB4NDYsMHgwMiwweGQxLDB4MDAsMHhiNyB9LAorICAxNiwgMHhmMzUwLCAwLCB7MHgwMCwweDIxLDB4YzAsMHgwOCwweDYwLDB4MDIsMHgwOCwweDgwLDB4ZjUsMHgyMCwweDNkLDB4Y2EsMHgwZiwweDU0LDB4MDMsMHhlYSB9LAorICAxNiwgMHhmMzYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4MTEsMHg4ZiwweDAxLDB4MjAsMHg4NCB9LAorICAxNiwgMHhmMzcwLCAwLCB7MHgxYSwweGYwLDB4MDIsMHgxOCwweDAwLDB4YTcsMHgzNCwweDY1LDB4YzAsMHgwOSwweDcxLDB4MDIsMHhkYywweDAwLDB4OGUsMHgwMCB9LAorICAxNiwgMHhmMzgwLCAwLCB7MHgyOSwweGMwLDB4MDgsMHg1MCwweDA2LDB4OWMsMHgwMCwweGJmLDB4ODgsMHgyZCwweGM0LDB4MGEsMHg2MCwweDI2LDB4NTgsMHgyNCB9LAorICAxNiwgMHhmMzkwLCAwLCB7MHg5NywweDAwLDB4NmQsMHhjMCwweDliLDB4NzAsMHgwMiwweGMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmM2EwLCAwLCB7MHgyMCwweDE0LDB4Y2MsMHgwMCwweDhiLDB4NDAsMHgyMCwweDAwLDB4MTgsMHgzMCwweDAyLDB4MDAsMHgwMCwweGJiLDB4MDIsMHgyNCB9LAorICAxNiwgMHhmM2IwLCAwLCB7MHhjMCwweDA4LDB4MzAsMHgyMCwweGNjLDB4MDAsMHg4MSwweGMwLDB4MjgsMHhjMCwweDBiLDB4MDQsMHg4MiwweGUwLDB4MTAsMHhiYiB9LAorICAxNiwgMHhmM2MwLCAwLCB7MHhhMCwweDJjLDB4ZTAsMHgwYSwweDIwLDB4MDYsMHgwMCwweDAwLDB4YjMsMHgwMCwweDI4LDB4YzAsMHgwYSwweDEwLDB4MDIsMHg4OCB9LAorICAxNiwgMHhmM2QwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGJjLDB4MDAsMHhjZiwweDEwLDB4MzIsMHgwMCB9LAorICAxNiwgMHhmM2UwLCAwLCB7MHgwZSwweGYwLDB4MGIsMHgyNCwweDAwLDB4ZWYsMHgwMCwweDM3LDB4YzAsMHgwZCwweGYwLDB4MDMsMHhmYywweDA2LDB4YzEsMHg1MCB9LAorICAxNiwgMHhmM2YwLCAwLCB7MHgzYiwweGMwLDB4MGMsMHhiNCwweDAzLDB4YWMsMHgwMCwweGY4LDB4YzAsMHhiZSwweGM4LDB4MmUsMHhiMCwweDAzLDB4NmUsMHgwMSB9LAorICAxNiwgMHhmNDAwLCAwLCB7MHhmYiwweDAwLDB4MmQsMHhjMCwweDRiLDB4OTAsMHgwMiwweGVhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNDEwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwNCwweGZiLDB4MDAsMHgzZSwweDAwLDB4MGYsMHhiMCwweDAzLDB4YWQsMHgwMCwweDliLDB4MDAsMHgzZSB9LAorICAxNiwgMHhmNDIwLCAwLCB7MHhjMCwweDBmLDB4MzAsMHgwMywweGFjLDB4MDAsMHhmOCwweDAwLDB4MmUsMHhjMCwweDA1LDB4YjQsMHgwMywweGVkLDB4MDAsMHhmOCB9LAorICAxNiwgMHhmNDMwLCAwLCB7MHg0MCwweDMyLDB4YzAsMHgwOSwweDAwLDB4MDMsMHhlMCwweDkxLDB4ZTMsMHgwMCwweDNlLDB4YzAsMHgwZiwweDkwLDB4MTEsMHhlMCB9LAorICAxNiwgMHhmNDQwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGVjLDB4MDAsMHhlZiwweDAwLDB4MzMsMHgyMCB9LAorICAxNiwgMHhmNDUwLCAwLCB7MHg0ZiwweGYwLDB4MDMsMHhiNCwweDAwLDB4ZWYsMHgwMywweDNhLDB4YzAsMHgwZiwweGYwLDB4MDMsMHgzYywweDAwLDB4ZGMsMHgwMCB9LAorICAxNiwgMHhmNDYwLCAwLCB7MHgzMSwweGMwLDB4OGQsMHhmOCwweDAzLDB4ZmUsMHgwNCwweGNmLDB4MDAsMHgzMiwweGM4LDB4MGMsMHhmMCwweDBiLDB4MWMsMHgwMCB9LAorICAxNiwgMHhmNDcwLCAwLCB7MHhjZiwweDkzLDB4MzMsMHhjMCwweDhjLDB4NDAsMHgwMiwweDAwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNDgwLCAwLCB7MHg4MSwweDA0LDB4NmMsMHgwMCwweGJiLDB4MDAsMHhhMiwweDA0LDB4MGIsMHgzMCwweDAyLDB4MGUsMHgwMCwweGFiLDB4MDAsMHgyYSB9LAorICAxNiwgMHhmNDkwLCAwLCB7MHhjMCwweDA5LDB4YjAsMHgwMywweDZjLDB4MDgsMHhhOCwweGMwLDB4MzYsMHhjMCwweDA4LDB4YmMsMHgwMiwweGVmLDB4MDIsMHhhYiB9LAorICAxNiwgMHhmNGEwLCAwLCB7MHhkMCwweDIwLDB4ZTAsMHgwOCwweGI4LDB4MjIsMHgyNiwweDEwLDB4OGIsMHgwMCwweDIyLDB4YzAsMHgyMCwweDljLDB4MDIsMHgyMCB9LAorICAxNiwgMHhmNGIwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHhiYiwweDAwLDB4MjYsMHgwMCB9LAorICAxNiwgMHhmNGMwLCAwLCB7MHgwYSwweGIwLDB4MDIsMHhhMiwweDA4LDB4YWIsMHgwMCwweDZhLDB4YzAsMHgwYiwweGIwLDB4MGEsMHgwYywweDAwLDB4OGIsMHg4MCB9LAorICAxNiwgMHhmNGQwLCAwLCB7MHgyMiwweGMwLDB4MDksMHhiMSwweDAyLDB4ZWMsMHg0MCwweDg4LDB4MDgsMHgyMiwweGMwLDB4MDgsMHhiOCwweDAyLDB4MjYsMHgwMCB9LAorICAxNiwgMHhmNGUwLCAwLCB7MHg4YiwweDAwLDB4MjIsMHhjMCwweDA4LDB4OTgsMHgwMiwweGEwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNGYwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMCwweGIzLDB4MDAsMHgyNCwweDAwLDB4MGIsMHhiMCwweDAyLDB4MDAsMHgwMSwweDgzLDB4MDAsMHgyMCB9LAorICAxNiwgMHhmNTAwLCAwLCB7MHhjMCwweDA5LDB4MzAsMHgwMiwweDRjLDB4MDAsMHgwMCwweDA0LDB4MjQsMHhjMCwweDA4LDB4MzAsMHgwNiwweDRjLDB4MDAsMHg4MCB9LAorICAxNiwgMHhmNTEwLCAwLCB7MHgwMCwweDJjLDB4YzAsMHgwOCwweDAwLDB4MDIsMHgwMCwweDQxLDB4ODMsMHgwMCwweGEyLDB4YzAsMHgwOCwweDEwLDB4MGEsMHg4MiB9LAorICAxNiwgMHhmNTIwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDdjLDB4MDAsMHhlZiwweDA4LDB4MjYsMHgwMCB9LAorICAxNiwgMHhmNTMwLCAwLCB7MHgwZSwweGYwLDB4MDIsMHhhMCwweDAwLDB4ZTcsMHgwMCwweDNiLDB4YzAsMHgwZiwweGY1LDB4NDMsMHgzYywweDAyLDB4ZGEsMHgwMCB9LAorICAxNiwgMHhmNTQwLCAwLCB7MHgzMiwweGMwLDB4MGQsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGNiLDB4MDAsMHhiMiwweGMwLDB4MGMsMHhhMCwweDAzLDB4MjgsMHgxMCB9LAorICAxNiwgMHhmNTUwLCAwLCB7MHhjYiwweDAwLDB4MzIsMHhjMCwweDBjLDB4ODAsMHgwMywweDgwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNTYwLCAwLCB7MHhhMCwweDBkLDB4ZmMsMHgwMCwweGZiLDB4MDAsMHgzYiwweDAwLDB4MGYsMHhmMCwweDAzLDB4ZjAsMHgwMCwweGZmLDB4MDIsMHgzZiB9LAorICAxNiwgMHhmNTcwLCAwLCB7MHhjMCwweDBkLDB4ZjIsMHgwMywweGJjLDB4MDAsMHhmNCwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmNyB9LAorICAxNiwgMHhmNTgwLCAwLCB7MHgwMCwweDMzLDB4YzAsMHgwZiwweDYwLDB4MDMsMHhmMCwweDg4LDB4ZmYsMHgwMCwweDNmLDB4YzAsMHg0ZiwweGQwLDB4MDMsMHg2OCB9LAorICAxNiwgMHhmNTkwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZjLDB4NDAsMHhmYywweDMxLDB4M2IsMHgwOCB9LAorICAxNiwgMHhmNWEwLCAwLCB7MHg0ZiwweGY5LDB4NDMsMHhlZiwweDAwLDB4ZGYsMHgzMCwweDMyLDB4MjEsMHgwZiwweDk0LDB4MDcsMHg3ZCwweDgwLDB4ZWYsMHgzOCB9LAorICAxNiwgMHhmNWIwLCAwLCB7MHgzMiwweDA5LDB4MWMsMHgzOCwweDAzLDB4ZjIsMHgyMSwweGZkLDB4MDAsMHgzMywweGM0LDB4MGMsMHhmMCwweDAyLDB4ZmMsMHgwMCB9LAorICAxNiwgMHhmNWMwLCAwLCB7MHhkZiwweDAwLDB4MzMsMHhjMCwweDBmLDB4ZjAsMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNWQwLCAwLCB7MHg4MCwweDEwLDB4ZWMsMHg4OCwweDhiLDB4NjAsMHgyMiwweGU1LDB4MGUsMHhiMiwweDIyLDB4ZWMsMHg4MCwweGFmLDB4MTEsMHgyYSB9LAorICAxNiwgMHhmNWUwLCAwLCB7MHgyMCwweDBiLDB4YjEsMHgxMywweGFjLDB4NDgsMHg4YiwweDQ1LDB4MzQsMHhjYywweDQ4LDB4YjAsMHgwMiwweDZiLDB4MDAsMHhiYSB9LAorICAxNiwgMHhmNWYwLCAwLCB7MHg4MiwweDM2LDB4MDAsMHgwOCwweDg4LDB4MjIsMHhjMCwweDA0LDB4ODgsMHgwMCwweGEyLDB4MDgsMHg4YiwweDg4LDB4NjIsMHgyMCB9LAorICAxNiwgMHhmNjAwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4MDAsMHhhMSwweDMwLDB4MjgsMHgwMCB9LAorICAxNiwgMHhmNjEwLCAwLCB7MHgwYiwweDMyLDB4MDIsMHhjYywweDAwLDB4YTMsMHgyMiwweDJjLDB4MDAsMHg4YiwweDEyLDB4MDYsMHhjOCwweDgwLDB4YTMsMHgwMCB9LAorICAxNiwgMHhmNjIwLCAwLCB7MHgyMCwweDAyLDB4Y2EsMHgzMCwweDA2LDB4YzQsMHgwMSwweGIxLDB4MDAsMHg2OCwweDgwLDB4MDksMHgyMCwweDAyLDB4ODgsMHgwMCB9LAorICAxNiwgMHhmNjMwLCAwLCB7MHg4MywweDAwLDB4MjAsMHhjMiwweDBiLDB4MDAsMHgwYSwweGEyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNjQwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHgwMCwweDhiLDB4NjEsMHg2MiwweGMwLDB4MGIsMHhiMiwweDAyLDB4ZTgsMHgwMCwweGFiLDB4MDIsMHgyYSB9LAorICAxNiwgMHhmNjUwLCAwLCB7MHg2MSwweDFiLDB4OTAsMHgwMiwweGE4LDB4MDAsMHhhYiwweDAwLDB4MjAsMHhjMCwweDBhLDB4YjAsMHgwMiwweDZjLDB4MDQsMHhiYSB9LAorICAxNiwgMHhmNjYwLCAwLCB7MHgwMCwweDJlLDB4NDAsMHg4OSwweDkwLDB4MDIsMHhlNiwweDA4LDB4OTgsMHgwMCwweDIyLDB4MDAsMHgwYiwweGIwLDB4MDIsMHhiMCB9LAorICAxNiwgMHhmNjcwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGVlLDB4MDAsMHhmOCwweDAxLDB4M2EsMHgwNCB9LAorICAxNiwgMHhmNjgwLCAwLCB7MHgwZiwweGFjLDB4MDMsMHhlYywweDkwLDB4ZmIsMHgwMiwweDNlLDB4ZTAsMHgwYiwweDkwLDB4NDIsMHg2NywweDgwLDB4YTgsMHhjNCB9LAorICAxNiwgMHhmNjkwLCAwLCB7MHgyMiwweDQ4LDB4MjIsMHg4NiwweDAzLDB4ZTEsMHg0MCwweGI4LDB4MDIsMHgyYSwweDQwLDB4MjksMHg5MCwweDAzLDB4ZWMsMHgwMiB9LAorICAxNiwgMHhmNmEwLCAwLCB7MHhjOSwweDQ4LDB4MzIsMHg0MCwweDBmLDB4YjAsMHgxMywweDkwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNmIwLCAwLCB7MHhlMCwweDAxLDB4YWMsMHg0MCwweGZiLDB4MDAsMHgxZiwweGEyLDB4MGUsMHhmOCwweDgyLDB4ZmMsMHgwOCwweGZmLDB4MDAsMHgzZiB9LAorICAxNiwgMHhmNmMwLCAwLCB7MHhjMCwweDBmLDB4ZmEsMHg0MywweDk2LDB4NDQsMHhkNCwweDkxLDB4M2YsMHg0MCwweDBkLDB4YzAsMHgwMywweGZhLDB4MDAsMHhmZiB9LAorICAxNiwgMHhmNmQwLCAwLCB7MHgwOCwweDI1LDB4ODAsMHgwZSwweGUwLDB4MDMsMHhkMCwweDAwLDB4ZWEsMHgwMCwweDNmLDB4ODAsMHgwZiwweGMwLDB4MDMsMHg3OCB9LAorICAxNiwgMHhmNmUwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDAsMHhlMSwweDIwLDB4M2EsMHg1MCB9LAorICAxNiwgMHhmNmYwLCAwLCB7MHgwZiwweDkwLDB4MDMsMHgyYywweDAwLDB4ZWIsMHgwOCwweDc2LDB4MDUsMHgwZSwweGIwLDB4MjcsMHhlMCwweDEwLDB4ZWEsMHg0MCB9LAorICAxNiwgMHhmNzAwLCAwLCB7MHhiMiwweGMwLDB4MGMsMHhhNCwweDQzLDB4MjUsMHgwMCwweGY4LDB4MDAsMHgzMiwweDA4LDB4MGYsMHg4MCwweDQzLDB4ZTgsMHgwMCB9LAorICAxNiwgMHhmNzEwLCAwLCB7MHhkMSwweDA4LDB4ZWUsMHg0MCwweDBmLDB4MDAsMHgwMywweGQwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNzIwLCAwLCB7MHhjOCwweDA1LDB4MmMsMHgwMCwweDhiLDB4MDAsMHgyMiwweGQwLDB4MGIsMHg5MCwweDgyLDB4MmMsMHgwMCwweDg3LDB4NDAsMHgyMiB9LAorICAxNiwgMHhmNzMwLCAwLCB7MHg2MCwweDhiLDB4YjAsMHgwMiwweGUwLDB4MDAsMHhkOCwweDUwLDB4MjIsMHhkMCwweDBjLDB4YTAsMHgwMywweDZjLDB4MDAsMHhiMyB9LAorICAxNiwgMHhmNzQwLCAwLCB7MHhjOCwweDNlLDB4ZDAsMHgwYiwweGI4LDB4MDIsMHgyNSwweDA4LDB4OGEsMHgyMCwweDJhLDB4ODAsMHg4YiwweGI4LDB4ODIsMHhmMiB9LAorICAxNiwgMHhmNzUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDY0LDB4MDAsMHhhMCwweGMwLDB4MjQsMHhjMCB9LAorICAxNiwgMHhmNzYwLCAwLCB7MHgwOSwweDM4LDB4MDIsMHgyYywweDAwLDB4ODMsMHgwMywweDIwLDB4MDAsMHgxMCwweDMwLDB4MjIsMHhjYywweDAwLDB4ODMsMHgwMCB9LAorICAxNiwgMHhmNzcwLCAwLCB7MHg2MCwweDA4LDB4MGEsMHgzMCwweDgyLDB4NGMsMHgwMCwweGIxLDB4YzAsMHgwMCwweGQxLDB4MGIsMHgzOCwweDAyLDB4ODQsMHg4MCB9LAorICAxNiwgMHhmNzgwLCAwLCB7MHg4MiwweDAxLDB4MjAsMHg4MCwweDAzLDB4MzgsMHgwMiwweGY4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNzkwLCAwLCB7MHgyMCwweDAxLDB4MTYsMHg0MCwweDg0LDB4OTgsMHgyNSwweGUwLDB4MGIsMHg3YSwweDAyLDB4ZmEsMHg0OCwweGEzLDB4MjAsMHg2MSB9LAorICAxNiwgMHhmN2EwLCAwLCB7MHgyNCwweDBiLDB4NzksMHgwMCwweGNlLDB4YzAsMHg5MywweGE0LDB4MjEsMHhhNiwweDBiLDB4NzgsMHgxMiwweGRlLDB4ODAsMHhiNiB9LAorICAxNiwgMHhmN2IwLCAwLCB7MHg4MCwweDJkLDB4MjQsMHgwYiwweDRiLDB4MDIsMHgxYSwweDQwLDB4ODUsMHg4MSwweDIxLDB4NjAsMHgwYiwweDQ4LDB4MDIsMHhjOCB9LAorICAxNiwgMHhmN2MwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHhlMiwweGEwLDB4YjQsMHhmZSB9LAorICAxNiwgMHhmN2QwLCAwLCB7MHg0YiwweGI4LDB4MGIsMHgwZSwweDAwLDB4YTMsMHhiMCwweDI0LDB4YTgsMHgwZSwweDFiLDB4MDIsMHhjZSwweGMxLDB4YzMsMHhjMCB9LAorICAxNiwgMHhmN2UwLCAwLCB7MHgzMCwweDY4LDB4MmUsMHgzYSwweDQ3LDB4NGUsMHg4MCwweGYxLDB4ODAsMHgzMCwweDgwLDB4MGYsMHgyMiwweDgzLDB4ODAsMHgwMCB9LAorICAxNiwgMHhmN2YwLCAwLCB7MHhjMiwweDEwLDB4MzgsMHg4MCwweDRmLDB4MDAsMHgwNywweGQyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmODAwLCAwLCB7MHg0MCwweDBkLDB4YmMsMHgxMCwweGZlLDB4MDQsMHgzYiwweGMxLDB4MDcsMHhmMCwweDAzLDB4MWMsMHhjOCwweGRmLDB4MmEsMHgwYiB9LAorICAxNiwgMHhmODEwLCAwLCB7MHhjNCwweDhmLDB4ZDEsMHg0MywweGY4LDB4MDIsMHg3ZiwweDAwLDB4M2YsMHhjMCwweDBjLDB4ZjEsMHgwZiwweDNjLDB4MDAsMHhmMiB9LAorICAxNiwgMHhmODIwLCAwLCB7MHgxMSwweDNmLDB4NDEsMHgxZiwweDUyLDB4MDMsMHhiYywweDBlLDB4ZWQsMHgxNCwweDNmLDB4NDAsMHgwZiwweGY4LDB4MDMsMHhkMCB9LAorICAxNiwgMHhmODMwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGU0LDB4MDAsMHhlOSwweDAwLDB4MzIsMHg4MCB9LAorICAxNiwgMHhmODQwLCAwLCB7MHgwZSwweGJlLDB4NGIsMHg2ZiwweDAwLDB4Y2IsMHg4MiwweDdhLDB4YzAsMHgyYywweGIwLDB4MDMsMHgyYywweDAwLDB4YzksMHgwMCB9LAorICAxNiwgMHhmODUwLCAwLCB7MHgzMiwweDAwLDB4MmMsMHgxMCwweDAzLDB4MmMsMHgwOCwweGMwLDB4MDAsMHgyNiwweDQwLDB4NmMsMHg5MCwweDEzLDB4MjQsMHgxMiB9LAorICAxNiwgMHhmODYwLCAwLCB7MHhjOCwweDAxLDB4M2UsMHgwMCwweDBmLDB4YjgsMHgwYiwweDJhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmODcwLCAwLCB7MHg0OCwweDExLDB4OTQsMHgwMCwweDhkLDB4MDAsMHgyMSwweDgwLDB4MGIsMHg3MCwweDgyLDB4M2MsMHgyMCwweDgzLDB4MzIsMHgyOSB9LAorICAxNiwgMHhmODgwLCAwLCB7MHhjMCwweDA4LDB4ZjAsMHgyMCwweDE0LDB4MDAsMHg4MCwweDAwLDB4MjMsMHgwMCwweDA4LDB4NTAsMHgwNiwweDljLDB4MDQsMHhkNyB9LAorICAxNiwgMHhmODkwLCAwLCB7MHgwMiwweDI4LDB4ODAsMHgwOCwweDYwLDB4MDIsMHgwOCwweDEwLDB4ODcsMHgwMCwweDJkLDB4YzAsMHgwYiwweDQwLDB4MDIsMHgxMiB9LAorICAxNiwgMHhmOGEwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4MDAsMHhhNywweDgwLDB4MjEsMHhlMCB9LAorICAxNiwgMHhmOGIwLCAwLCB7MHgwYiwweDVjLDB4MTIsMHgxZSwweDA0LDB4ODcsMHg4MiwweDBkLDB4YTAsMHgwOSwweDc4LDB4MTYsMHgwMiwweDAwLDB4YjQsMHg4MCB9LAorICAxNiwgMHhmOGMwLCAwLCB7MHgyNSwweGUwLDB4MGIsMHg3OCwweDAyLDB4OWUsMHgwMCwweDg0LDB4ODAsMHgyMSwweDIyLDB4MDgsMHgwOCwweDAyLDB4MTIsMHgwMSB9LAorICAxNiwgMHhmOGQwLCAwLCB7MHg4NCwweGMwLDB4MmQsMHgyMCwweDBiLDB4MDgsMHgwMiwweDMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOGUwLCAwLCB7MHg0OCwweDE0LDB4Y2MsMHgwMCwweDgzLDB4NDIsMHhhMCwweGQ4LDB4MGIsMHgzNCwweDgyLDB4MGMsMHgwMCwweGEzLDB4MDIsMHgyMCB9LAorICAxNiwgMHhmOGYwLCAwLCB7MHhlMCwweDA4LDB4YjAsMHgwMiwweDBjLDB4ODgsMHhiMywweDIxLDB4MjQsMHhkOCwweDBiLDB4M2UsMHgwMiwweDhjLDB4MDAsMHg5MyB9LAorICAxNiwgMHhmOTAwLCAwLCB7MHgwOCwweDI4LDB4YzAsMHgwOCwweDM4LDB4MDIsMHgyYywweDA1LDB4OGIsMHgwMSwweDJjLDB4ZTAsMHgwYiwweDMwLDB4MDIsMHgxMiB9LAorICAxNiwgMHhmOTEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MDAsMHhlZSwweDAwLDB4MzMsMHg5MCB9LAorICAxNiwgMHhmOTIwLCAwLCB7MHgwZiwweGEwLDB4MGIsMHg2OCwweDAwLDB4Y2EsMHgwMSwweDdmLDB4YTgsMHgwYywweGFhLDB4MDMsMHgzYSwweDEyLDB4ZmUsMHhlMiB9LAorICAxNiwgMHhmOTMwLCAwLCB7MHgzNywweGIwLDB4MGYsMHhlZSwweDAyLDB4MTgsMHgwMCwweGNhLDB4NDAsMHgzNiwweGEwLDB4MDgsMHhhMCwweDhiLDB4MjgsMHgwMCB9LAorICAxNiwgMHhmOTQwLCAwLCB7MHhjYSwweDgxLDB4MmUsMHhhMCwweDBmLDB4ZTAsMHgwMywweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOTUwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4MDgsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4YTIsMHgwMiwweGQ4LDB4NDAsMHgzZSB9LAorICAxNiwgMHhmOTYwLCAwLCB7MHgwOCwweDBmLDB4ODAsMHgxMywweGUwLDB4NDAsMHg0OCwweDQwLDB4YjgsMHgwNCwweDA4LDB4ODQsMHgwMywweDYxLDB4MDAsMHhmYyB9LAorICAxNiwgMHhmOTcwLCAwLCB7MHgwMCwweDNmLDB4MDAsMHg0ZiwweGMwLDB4MDMsMHhmMSwweDAwLDB4ZmMsMHgwMCwweDNmLDB4MDQsMHgwZiwweGMwLDB4MDMsMHhkMiB9LAorICAxNiwgMHhmOTgwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGM0LDB4MDAsMHhmOSwweDAwLDB4MzAsMHg1MCB9LAorICAxNiwgMHhmOTkwLCAwLCB7MHg0YywweGI5LDB4MDMsMHg2YywweDE4LDB4ZjksMHgwMCwweDM2LDB4NDAsMHgwZSwweDljLDB4MjMsMHhhNCwweDAyLDB4NDEsMHgwMCB9LAorICAxNiwgMHhmOWEwLCAwLCB7MHhiMiwweDQ0LDB4MGUsMHg5YSwweDAzLDB4YTYsMHg4MCwweGM5LDB4MDAsMHgzYSwweDYwLDB4MGEsMHg5MCwweDAzLDB4YTQsMHg4MCB9LAorICAxNiwgMHhmOWIwLCAwLCB7MHhjOSwweDAwLDB4MzQsMHg0MCwweDBjLDB4OTAsMHgwMywweGMyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOWMwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4NDAsMHgyMiwweDc4LDB4MDgsMHg5NCwweDAyLDB4ZTQsMHgxMCwweGI5LDB4MDAsMHgzYyB9LAorICAxNiwgMHhmOWQwLCAwLCB7MHg2MiwweDE4LDB4OTQsMHg4MiwweGE0LDB4MDAsMHg4OSwweGM4LDB4MjIsMHg3MCwweDQ4LDB4MWUsMHgwMSwweDY3LDB4ODAsMHhkMSB9LAorICAxNiwgMHhmOWUwLCAwLCB7MHgwMCwweGJjLDB4NDIsMHgwOCwweDEwLDB4MDIsMHgyNSwweDIwLDB4ODksMHgwMiwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDIsMHhlMCB9LAorICAxNiwgMHhmOWYwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDAsMHhiMSwweDI4LDB4MjIsMHg0MCB9LAorICAxNiwgMHhmYTAwLCAwLCB7MHgwOCwweGIwLDB4ODIsMHg2NCwweDA0LDB4MzksMHg0MSwweDJlLDB4NDgsMHgwYSwweDkwLDB4MDIsMHgwNCwweDE4LDB4YTksMHgyMCB9LAorICAxNiwgMHhmYTEwLCAwLCB7MHgyMiwweDQyLDB4NGEsMHg5MCwweDAyLDB4MmMsMHgwNCwweDg5LDB4MDQsMHgyYiwweDQ4LDB4MDIsMHhkMCwweDAyLDB4YjQsMHgwYSB9LAorICAxNiwgMHhmYTIwLCAwLCB7MHg4ZCwweDgwLDB4MjMsMHhjMCwweDQ4LDB4ZDAsMHgwMiwweGM2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYTMwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweDgxLDB4MjAsMHhhMCwweDQ4LDB4MjgsMHgxMCwweDAyLDB4YzQsMHgwMCwweGIxLDB4MjQsMHgyYSB9LAorICAxNiwgMHhmYTQwLCAwLCB7MHg0MCwweDA4LDB4MTIsMHg0MiwweDg1LDB4ODAsMHhhMSwweDIwLDB4YTAsMHg0OCwweDA4LDB4OTAsMHgwMiwweDQ0LDB4MDAsMHg5NSB9LAorICAxNiwgMHhmYTUwLCAwLCB7MHgyYywweDJkLDB4NWEsMHgwYSwweDcyLDB4ODIsMHgxNCwweGEwLDB4ODUsMHhhOCwweDIxLDB4NGEsMHgwOCwweDUyLDB4ODIsMHhjMiB9LAorICAxNiwgMHhmYTYwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDQxLDB4NDAsMHhmOCwweDUwLDB4MzIsMHgwMCB9LAorICAxNiwgMHhmYTcwLCAwLCB7MHg4YywweDA1LDB4MDMsMHg2MSwweDQwLDB4ZjgsMHg1MSwweDJlLDB4MDAsMHgwYSwweDg1LDB4MDIsMHgyMCwweDAwLDB4ZTgsMHg1MCB9LAorICAxNiwgMHhmYTgwLCAwLCB7MHgzMiwweDE0LDB4MDYsMHg4NSwweDE3LDB4YTAsMHgwMCwweGM4LDB4MjAsMHgzYSwweDA4LDB4MGUsMHg4MiwweDAzLDB4YTAsMHg4MCB9LAorICAxNiwgMHhmYTkwLCAwLCB7MHhjOCwweDIwLDB4MzIsMHgwOCwweDJjLDB4YzIsMHgwMywweGVlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYWEwLCAwLCB7MHg5OCwweDE5LDB4ZjQsMHg0MCwweGZmLDB4MTAsMHgzZiwweDQ0LDB4MGIsMHhiMCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MTAsMHgzZCB9LAorICAxNiwgMHhmYWIwLCAwLCB7MHg0MCwweDBmLDB4ZDEsMHgwMywweGY0LDB4NTgsMHg5ZCwweDEwLDB4M2YsMHg0NCwweDRmLDB4ZDAsMHgwMywweGQ1LDB4MDAsMHhmOSB9LAorICAxNiwgMHhmYWMwLCAwLCB7MHgwMCwweDNlLDB4NDAsMHg4ZCwweDkwLDB4MDMsMHhlNCwweGI4LDB4ZjksMHgyOCwweGJhLDB4NmEsMHgwZiwweDkwLDB4MDMsMHhlNiB9LAorICAxNiwgMHhmYWQwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMSwweGU3LDB4MDAsMHhmZCwweDg4LDB4M2UsMHg2MCB9LAorICAxNiwgMHhmYWUwLCAwLCB7MHg4ZiwweGQwLDB4MDMsMHgyNCwweDAxLDB4ZGQsMHg4MCwweDczLDB4NDAsMHgwZiwweGQ4LDB4MDMsMHhhNiwweDA0LDB4Y2QsMHhhMiB9LAorICAxNiwgMHhmYWYwLCAwLCB7MHgzMywweDc4LDB4MWMsMHhkMCwweDAzLDB4MzQsMHgwMSwweGY1LDB4ODgsMHgzYiwweDY4LDB4MGMsMHhkYSwweDQ3LDB4MzcsMHg4MCB9LAorICAxNiwgMHhmYjAwLCAwLCB7MHhjZCwweDg4LDB4MzIsMHg2MiwweDBjLDB4ZGEsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYjEwLCAwLCB7MHgzOCwweDEwLDB4ZTMsMHg4MCwweGI4LDB4ODAsMHgyZSwweDE0LDB4MGIsMHgwYSwweDgyLDB4MjIsMHg4MCwweGI4LDB4ZjgsMHhhMiB9LAorICAxNiwgMHhmYjIwLCAwLCB7MHgwMCwweDBiLDB4OGYsMHhhMywweDgzLDB4ZTAsMHg4OCwweGViLDB4MjIsMHhhOSwweDA4LDB4ODgsMHgxMiwweGEwLDB4MDUsMHhiOCB9LAorICAxNiwgMHhmYjMwLCAwLCB7MHgwMCwweDJhLDB4YWEsMHg4OCwweDgwLDB4MTMsMHg2MiwweDgyLDB4ODgsMHg4MCwweDIyLDB4MjgsMHg4OCwweGE0LDB4MDIsMHgwZSB9LAorICAxNiwgMHhmYjQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM1LDB4MDAsMHhiMSwweDBhLDB4MmMsMHg0MSB9LAorICAxNiwgMHhmYjUwLCAwLCB7MHgwYiwweDEwLDB4MDYsMHgwNCwweDIwLDB4YTEsMHgwMCwweDAwLDB4NDAsMHg4YiwweDEwLDB4NDYsMHhjNCwweDAxLDB4OTEsMHgxMSB9LAorICAxNiwgMHhmYjYwLCAwLCB7MHgyNCwweDU4LDB4NjgsMHg5MCwweGMyLDB4MDQsMHgwMCwweGIxLDB4MDAsMHhhOCwweDUwLDB4MDksMHgxNCwweDBhLDB4MDUsMHg5NSB9LAorICAxNiwgMHhmYjcwLCAwLCB7MHhhMSwweDA4LDB4YTAsMHg0MiwweDI4LDB4MTEsMHgwYSwweDAyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYjgwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgxOCwweGI5LDB4MjAsMHgyZSwweDUwLDB4MGIsMHg5MCwweDA2LDB4MjQsMHgwOSwweGI5LDB4MDAsMHgyMiB9LAorICAxNiwgMHhmYjkwLCAwLCB7MHg0MCwweDhiLDB4OTEsMHgwMiwweDg0LDB4MDAsMHg5OSwweDY0LDB4MjQsMHg0MCwweDU4LDB4OTAsMHgwMiwweGE0LDB4MjAsMHhiYiB9LAorICAxNiwgMHhmYmEwLCAwLCB7MHgwMCwweDJhLDB4NDAsMHgwOSwweGIwLDB4MDIsMHgwNSwweDAxLDB4YTksMHgwMCwweDIyLDB4NDAsMHg4OCwweDkyLDB4MDIsMHgwNiB9LAorICAxNiwgMHhmYmIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU2LDB4MDAsMHhmOSwweDQwLDB4M2UsMHg0MCB9LAorICAxNiwgMHhmYmMwLCAwLCB7MHg0ZiwweDk4LDB4MGIsMHgyNCwweDgwLDB4ZDksMHgwMCwweDIyLDB4NzIsMHgwYiwweDk4LDB4MDMsMHhlNCwweDg0LDB4ZDksMHgwMCB9LAorICAxNiwgMHhmYmQwLCAwLCB7MHhiNiwweDcwLDB4MDgsMHg5OSwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDAsMHgyYSwweDQwLDB4MGQsMHg5NCwweGMyLDB4MjUsMHgwMCB9LAorICAxNiwgMHhmYmUwLCAwLCB7MHhhOSwweDAwLDB4MjIsMHg0MCwweDBjLDB4OTQsMHgwMywweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYmYwLCAwLCB7MHgyOCwweDAxLDB4YTYsMHg4MCwweGY5LDB4MDgsMHgzZSwweGMwLDB4MGYsMHg5MSwweDQzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSB9LAorICAxNiwgMHhmYzAwLCAwLCB7MHg1MCwweDBmLDB4OTgsMHgwMywweGE1LDB4MDAsMHhlOSwweDAwLDB4M2EsMHg2NCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSB9LAorICAxNiwgMHhmYzEwLCAwLCB7MHgwMCwweDNjLDB4NDAsMHg2ZSwweDkwLDB4MDMsMHhlNCwweDIwLDB4ZDksMHgwMCwweDNjLDB4NDAsMHgwZiwweDkwLDB4ODIsMHhjYSB9LAorICAxNiwgMHhmYzIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDAsMHhlOCwweDAwLDB4M2UsMHgwMCB9LAorICAxNiwgMHhmYzMwLCAwLCB7MHg0ZiwweDg0LDB4MGIsMHgyMCwweDAwLDB4ZjgsMHgwMCwweDM2LDB4MDEsMHgwZSwweDgwLDB4MDMsMHhlMCwweDAwLDB4YzgsMHg0MCB9LAorICAxNiwgMHhmYzQwLCAwLCB7MHgzMiwweDEwLDB4MmQsMHg4MCwweDAzLDB4ZTAsMHg1NCwweGM4LDB4MDAsMHgzNiwweDEwLDB4MGYsMHgwNCwweDgzLDB4ZTAsMHg1MCB9LAorICAxNiwgMHhmYzUwLCAwLCB7MHhkOCwweDA0LDB4MTIsMHgwMCwweDBjLDB4MDAsMHgwYiwweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYzYwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwMCwweDhlLDB4NDIsMHgyZSwweGEyLDB4OGIsMHhlYSwweDAyLDB4MjgsMHgwOCwweGJlLDB4ODksMHgzNyB9LAorICAxNiwgMHhmYzcwLCAwLCB7MHg4NCwweDQ4LDB4ZTAsMHgxMiwweDI4LDB4MDIsMHg4ZSwweGMwLDB4MjMsMHhiMCwweDRkLDB4NjAsMHg2MiwweGY4LDB4MDAsMHg4NiB9LAorICAxNiwgMHhmYzgwLCAwLCB7MHgwMCwweDIzLDB4ODAsMHgwYiwweGUwLDB4MDIsMHhmOCwweDAwLDB4MGUsMHgwMCwweDIyLDB4ODAsMHgwOCwweGU0LDB4MDIsMHgwYSB9LAorICAxNiwgMHhmYzkwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDAsMHhhMywweDAwLDB4MmMsMHg4MCB9LAorICAxNiwgMHhmY2EwLCAwLCB7MHgxYiwweGIwLDB4OWEsMHg0YywweDEwLDB4OWIsMHg4MCwweDI0LDB4YzAsMHgwYSwweDMwLDB4MDAsMHgwYywweDA0LDB4OWIsMHgyMCB9LAorICAxNiwgMHhmY2IwLCAwLCB7MHgyMCwweGQ2LDB4MDgsMHgzMCwweDAyLDB4OGUsMHgwOCwweGEzLDB4MDQsMHgyNCwweGMwLDB4MTksMHgzNCwweDAyLDB4YzcsMHgwNyB9LAorICAxNiwgMHhmY2MwLCAwLCB7MHhhYSwweGE0LDB4YTAsMHhjMCwweDQ4LDB4MzQsMHgwMiwweDBhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmY2QwLCAwLCB7MHhhMCwweDAxLDB4MGUsMHgwMCwweDg3LDB4MDAsMHgyZCwweGMwLDB4MGIsMHg0MCwweDAyLDB4NWMsMHg0MCwweGIzLDB4MTQsMHgyNSB9LAorICAxNiwgMHhmY2UwLCAwLCB7MHhlMCwweDA4LDB4N2EsMHgwMiwweDllLDB4YzAsMHg5MiwweDQwLDB4YTAsMHgwMCwweDQ5LDB4NjAsMHgwMiwweGNlLDB4MDIsMHg4ZSB9LAorICAxNiwgMHhmY2YwLCAwLCB7MHgwMSwweDIxLDB4YzAsMHg4YiwweDU0LDB4MDIsMHhjNCwweDA4LDB4ODYsMHg0MCwweDIxLDB4YzgsMHg4OCwweDEwLDB4MDIsMHgyOCB9LAorICAxNiwgMHhmZDAwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFlLDB4YzAsMHhlNCwweDgwLDB4M2QsMHhlMiB9LAorICAxNiwgMHhmZDEwLCAwLCB7MHgwZiwweDU4LDB4MDMsMHg1ZSwweDkwLDB4YjYsMHhhMiwweDM1LDB4ZTAsMHgwZSwweDdjLDB4MjMsMHgxYywweDAwLDB4ZDYsMHg4MCB9LAorICAxNiwgMHhmZDIwLCAwLCB7MHgzMSwweGUwLDB4ODQsMHg3OCwweDAzLDB4ZGUsMHgwMCwweGM3LDB4ODAsMHgzNSwweGUwLDB4MGYsMHg2OCwweDAzLDB4ZGUsMHgwMCB9LAorICAxNiwgMHhmZDMwLCAwLCB7MHhlMywweDgwLDB4MzMsMHhlOCwweDJjLDB4NzgsMHgwMywweDJhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmZDQwLCAwLCB7MHgwOCwweDFkLDB4YWMsMHg5MCwweGZhLDB4MDAsMHg3ZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4YWMsMHgwMSwweGZiLDB4MDAsMHgzYyB9LAorICAxNiwgMHhmZDUwLCAwLCB7MHg0MSwweDBmLDB4MzAsMHgwYiwweDJkLDB4MDQsMHhlYiwweDAxLDB4M2UsMHhjMCwweDBlLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmYSB9LAorICAxNiwgMHhmZDYwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHgwZiwweDgwLDB4MDMsMHhlYywweDAwLDB4ZTksMHg2MCwweDNlLDB4ZTQsMHgwZiwweDkwLDB4MDMsMHhjMiB9LAorICAxNiwgMHhmZDcwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGZlLDB4MjAsMHhmZiwweDkwLDB4M2UsMHgyMCB9LAorICAxNiwgMHhmZDgwLCAwLCB7MHgwYywweGE5LDB4MDcsMHgyZSwweDQ0LDB4YzksMHg5MSwweDMwLDB4YTAsMHgwYywweGI4LDB4NjMsMHgyZiwweDQ0LDB4Y2IsMHhhMSB9LAorICAxNiwgMHhmZDkwLCAwLCB7MHgzNiwweDIwLDB4OGMsMHhmOCwweDAzLDB4MzYsMHgwMCwweGNmLDB4ODIsMHgzMywweGUwLDB4MGMsMHhmOCwweDIzLDB4MmUsMHgwMCB9LAorICAxNiwgMHhmZGEwLCAwLCB7MHhjZSwweGMwLDB4M2IsMHhlMCwweDBjLDB4NjgsMHgwMywweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmZGIwLCAwLCB7MHhhOCwweDExLDB4OWMsMHg4NCwweGIzLDB4NTQsMHgyYywweGY0LDB4MjgsMHhiYSwweDhhLDB4M2UsMHg0MCwweDgxLDB4YTAsMHgyOSB9LAorICAxNiwgMHhmZGMwLCAwLCB7MHhiMCwweDBmLDB4NzgsMHg0MiwweGFlLDB4MDAsMHg4MywweDkwLDB4MzMsMHhlOCwweDBkLDB4ZTEsMHgwMCwweDg1LDB4NDAsMHg4MiB9LAorICAxNiwgMHhmZGQwLCAwLCB7MHgyNCwweDIzLDB4YzYsMHgwZCwweDcxLDB4MDMsMHg1ZSwweGUwLDB4ODcsMHgwMCwweDJiLDB4YzEsMHgwZCwweDQ0LDB4MDIsMHgyYSB9LAorICAxNiwgMHhmZGUwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4MDgsMHgzNSwweDE0LDB4NmQsMHhjMCB9LAorICAxNiwgMHhmZGYwLCAwLCB7MHg4OCwweDcyLDB4MzIsMHg1YywweDgwLDB4ODQsMHgzMCwweDJiLDB4ODgsMHgwYSwweDcwLDB4NDIsMHg1YywweGE4LDB4OTEsMHgwOCB9LAorICAxNiwgMHhmZTAwLCAwLCB7MHgyNSwweGM4LDB4MDksMHg3MCwweDAyLDB4NGMsMHgyMiwweDgzLDB4MGEsMHg2MSwweGMwLDB4MDksMHgyMCwweDAyLDB4MDQsMHgwMCB9LAorICAxNiwgMHhmZTEwLCAwLCB7MHg4NywweDAwLDB4MjEsMHhjMCwweDA4LDB4NjAsMHgwMiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmZTIwLCAwLCB7MHgyMCwweDE0LDB4Y2MsMHgxMCwweGIzLDB4ODUsMHg2YywweGRjLDB4MDgsMHgzNCwweDAyLDB4NGQsMHgyMSwweDgxLDB4MDAsMHgyOCB9LAorICAxNiwgMHhmZTMwLCAwLCB7MHgwMiwweDRhLDB4MzEsMHgxMiwweGVmLDB4MGMsMHg5MSwweGMyLDB4MjAsMHhmMCwweDA4LDB4MzAsMHg0MiwweDhlLDB4MDAsMHg4MiB9LAorICAxNiwgMHhmZTQwLCAwLCB7MHg0MCwweDIwLDB4YzgsMHgxOSwweDI4LDB4MDIsMHgyMiwweDgxLDB4ODMsMHhjMCwweDI4LDB4ZDQsMHgwOSwweDAwLDB4MGEsMHgwOCB9LAorICAxNiwgMHhmZTUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGJjLDB4MDAsMHhmYiwweGEwLDB4M2UsMHhjMCB9LAorICAxNiwgMHhmZTYwLCAwLCB7MHg4YywweDA0LDB4MTIsMHg3ZCwweDEwLDB4Y2YsMHgwMiwweDNhLDB4NTAsMHgwOCwweGMwLDB4NDIsMHg3ZCwweDUyLDB4NTgsMHgwMSB9LAorICAxNiwgMHhmZTcwLCAwLCB7MHgzNiwweDIyLDB4NjksMHhkMCwweDEzLDB4MmEsMHgwMCwweDg4LDB4ODIsMHgzMiwweGYwLDB4MDksMHhiOCwweDgyLDB4MmYsMHgwMCB9LAorICAxNiwgMHhmZTgwLCAwLCB7MHhjOSwweGM4LDB4MjMsMHhjMCwweDBjLDB4OGEsMHgwMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmZTkwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGI5LDB4NDAsMHgzYywweDUwLDB4NGYsMHg4MCwweDIzLDB4YWMsMHgxMiwweGZiLDB4MDAsMHgyYSB9LAorICAxNiwgMHhmZWEwLCAwLCB7MHhjMCwweDZkLDB4ODAsMHgxMywweGFjLDB4MDAsMHhlOCwweDA0LDB4YmEsMHgxMCwweDBmLDB4ODAsMHgwMywweGU4LDB4MDAsMHhmMyB9LAorICAxNiwgMHhmZWIwLCAwLCB7MHgwOCwweDNjLDB4ODAsMHgwZiwweDkwLDB4ODMsMHhlYywweDA0LDB4ZjksMHg2MCwweDJjLDB4YzIsMHgwZiwweDgwLDB4ODMsMHhlMCB9LAorICAxNiwgMHhmZWMwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGRjLDB4MDAsMHhlYywweDJjLDB4M2YsMHhmMCB9LAorICAxNiwgMHhmZWQwLCAwLCB7MHg4YywweGZhLDB4OGIsMHhiYywweDAwLDB4ZmUsMHgwMCwweDNmLDB4MDAsMHgwZiwweDc5LDB4MDMsMHgzYywweDAwLDB4Y2UsMHgwOCB9LAorICAxNiwgMHhmZWUwLCAwLCB7MHgwYiwweGMyLDB4MGMsMHhmMCwweDAzLDB4YmMsMHgwMCwweGZjLDB4MDAsMHgzMywweDQwLDB4OGMsMHg3YSwweDAzLDB4M2EsMHgwMCB9LAorICAxNiwgMHhmZWYwLCAwLCB7MHhjNSwweDAwLDB4MzMsMHhjMCwweDRjLDB4YzgsMHgwMywweDAwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmZjAwLCAwLCB7MHg4MSwweDA0LDB4NmMsMHgwMCwweDg4LDB4YzAsMHgyZSwweGUwLDB4MDgsMHg5NCwweDAyLDB4MmMsMHgwMCwweGJiLDB4ODAsMHg2NiB9LAorICAxNiwgMHhmZjEwLCAwLCB7MHgzMCwweDE2LDB4YjAsMHgwMiwweDJjLDB4MDAsMHhkYSwweDRjLDB4MjIsMHhmMCwweDA4LDB4ZjAsMHgwMywweGVjLDB4MDAsMHhlYiB9LAorICAxNiwgMHhmZjIwLCAwLCB7MHhjMCwweDIyLDB4NjgsMHgwMCwweDk0LDB4MDIsMHgyYywweDAyLDB4YTksMHg4MCwweDIyLDB4YzAsMHgwOCwweDBjLDB4MDIsMHhhMCB9LAorICAxNiwgMHhmZjMwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHhhYiwweDA0LDB4MmUsMHhjMCB9LAorICAxNiwgMHhmZjQwLCAwLCB7MHgwOCwweGE0LDB4MDYsMHgyYywweDA0LDB4YWIsMHgxMCwweDJlLDB4NjAsMHg0MywweDgwLDB4ODIsMHg2YywweDAxLDB4ODEsMHg4MCB9LAorICAxNiwgMHhmZjUwLCAwLCB7MHgyOCwweDBhLDB4MDgsMHg5MSwweDAwLDB4ZTAsMHgwMCwweGI4LDB4ODAsMHgwMiwweGUwLDB4MDgsMHg4MCwweDAyLDB4MmQsMHg4MCB9LAorICAxNiwgMHhmZjYwLCAwLCB7MHg4OCwweGMwLDB4MjIsMHhjMCwweDA4LDB4ODIsMHgwMiwweDIwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmZjcwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMCwweDgwLDB4NDQsMHgyYywweGM4LDB4MjgsMHhhMCwweDIyLDB4MGMsMHgwNCwweGIzLDB4MjYsMHgyYyB9LAorICAxNiwgMHhmZjgwLCAwLCB7MHhjOCwweDg4LDB4MDEsMHgwNiwweDBjLDB4ZTAsMHg5MSwweDIwLDB4MjAsMHgwYywweDM4LDB4MDQsMHgyMiwweGMwLDB4NDgsMHhhMyB9LAorICAxNiwgMHhmZjkwLCAwLCB7MHg0MiwweGEwLDB4ODEsMHgwOCwweDAwLDB4MDIsMHgwYywweDgwLDB4ODEsMHgwMCwweDIwLDB4YzAsMHgyOCwweDAwLDB4MDIsMHg4MiB9LAorICAxNiwgMHhmZmEwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDdjLDB4MDAsMHhhOSwweDQwLDB4M2UsMHg0NCB9LAorICAxNiwgMHhmZmIwLCAwLCB7MHgwOCwweGIxLDB4MDMsMHgyYywweDQwLDB4ZWEsMHg0OSwweDJlLDB4MGQsMHgwYiwweGI2LDB4MTMsMHg3ZCwweDgwLDB4YzksMHg0MCB9LAorICAxNiwgMHhmZmMwLCAwLCB7MHhiYSwweGQwLDB4MGMsMHhiNCwweDAzLDB4YWMsMHgwMCwweGY4LDB4MDAsMHgzMiwweDQwLDB4MGMsMHg4MCwweDBiLDB4MjAsMHgwMCB9LAorICAxNiwgMHhmZmQwLCAwLCB7MHhjNSwweDAwLDB4YjIsMHhjMCwweDBjLDB4ODAsMHgwMywweDAwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmZmUwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgwNCwweGZjLDB4MDAsMHgzZCwweGM1LDB4MGIsMHhmMSwweDAwLDB4ZmMsMHhkMCwweDc3LDB4MjksMHgzNyB9LAorICAxNiwgMHhmZmYwLCAwLCB7MHgwYywweDhlLDB4NzQsMHgwMywweGZjLDB4MDgsMHhmZCwweDY5LDB4M2YsMHhkOCwweDBmLDB4ZjAsMHgwMywweGJjLDB4MDAsMHhlZiB9LAorICAxNiwgMHg4MDEwLCAwLCB7MHgwMCwweDNmLDB4NDAsMHgwNywweGMwLDB4MDMsMHhmMCwweDQwLDB4ZmQsMHgwMCwweDNmLDB4YzAsMHgwZiwweGMwLDB4MDMsMHhlOCB9LAorICAxNiwgMHg4MDIwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwZCwweGZjLDB4YzAsMHhkYywweDgwLDB4M2YsMHhjOCB9LAorICAxNiwgMHg4MDMwLCAwLCB7MHgwZiwweDQ4LDB4MDMsMHg3YywweDIwLDB4ZmYsMHg2OCwweDM3LDB4ZTAsMHgwZSwweGYxLDB4MDMsMHg5YywweDAwLDB4YmYsMHgyMCB9LAorICAxNiwgMHg4MDQwLCAwLCB7MHgzNywweGUwLDB4MGMsMHhjOCwweDEzLDB4M2MsMHg0MCwweGVkLDB4NjAsMHhiYiwweGU0LDB4MmMsMHg0MywweDRiLDB4NzAsMHhhMCB9LAorICAxNiwgMHg4MDUwLCAwLCB7MHhjYywweDJjLDB4M2YsMHgwOSwweDBmLDB4ZDgsMHg0MywweDcwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MDYwLCAwLCB7MHg4MCwweDAwLDB4ZWQsMHhjMCwweGI4LDB4ODAsMHgyZiwweGY0LDB4MGYsMHg5OCwweDAyLDB4M2YsMHgwMCwweGJmLDB4NDIsMHgyMiB9LAorICAxNiwgMHg4MDcwLCAwLCB7MHhjYSwweDA4LDB4ZjQsMHgwMiwweDNlLDB4MDAsMHhiZiwweGQwLDB4MjIsMHg2MCwweDI4LDB4ODgsMHgwYSwweDNkLDB4ODAsMHg4ZCB9LAorICAxNiwgMHg4MDgwLCAwLCB7MHg0MCwweDIyLDB4YzgsMHgwOCwweDgxLDB4MDIsMHgyMSwweDgwLDB4ZGIsMHhjMCwweDJlLDB4YTUsMHgwYiwweDk4LDB4NDIsMHgyMCB9LAorICAxNiwgMHg4MDkwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4MTAsMHhiMCwweDAwLDB4MmMsMHhjMCB9LAorICAxNiwgMHg4MGEwLCAwLCB7MHgwYiwweDIwLDB4MDIsMHhjYywweDAwLDB4YjMsMHgyMCwweDI2LDB4YzAsMHg4YSwweDM2LDB4MTIsMHg4YywweDQxLDB4YjMsMHgwMCB9LAorICAxNiwgMHg4MGIwLCAwLCB7MHgyZSwweDQwLDB4MDgsMHgwMCwweDAyLDB4MGQsMHg4MSwweGExLDB4MzAsMHgyMiwweGM4LDB4ODksMHhhMiwweDQyLDB4MDgsMHgyMCB9LAorICAxNiwgMHg4MGMwLCAwLCB7MHhiMCwweDAwLDB4MmMsMHg0MCwweDBiLDB4OTAsMHgyNiwweDYyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MGQwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHgwMCwweGI4LDB4NTAsMHgyZSwweGMwLDB4MGEsMHg5MCwweDAyLDB4YWMsMHgwMCwweGJiLDB4MDAsMHgyMiB9LAorICAxNiwgMHg4MGUwLCAwLCB7MHhjMCwweDA4LDB4YjAsMHg2MiwweDJjLDB4MTAsMHhiYiwweDA0LDB4MmEsMHhmMCwweDRhLDB4ODgsMHgwMiwweDBjLDB4MDAsMHg4MSB9LAorICAxNiwgMHg4MGYwLCAwLCB7MHgwMCwweDIyLDB4YzAsMHgwOSwweGI4LDB4ODAsMHgyNiwweDAwLDB4YjgsMHg4MCwweDJlLDB4MjEsMHgwYiwweDkwLDB4MDIsMHgzMCB9LAorICAxNiwgMHg4MTAwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgxNSwweGVjLDB4MDAsMHhkOCwweGMwLDB4M2UsMHhjMCB9LAorICAxNiwgMHg4MTEwLCAwLCB7MHgwYiwweDgwLDB4MDMsMHhlYywweDAwLDB4ZmIsMHgwMCwweDM2LDB4ODAsMHgwZSwweGIwLDB4MDMsMHhhYywweDAwLDB4ZmIsMHgwMCB9LAorICAxNiwgMHg4MTIwLCAwLCB7MHgzYywweGUwLDB4MGMsMHgwYywweDAzLDB4MmMsMHgwMCwweGU5LDB4MDAsMHgxMCwweGMwLDB4MGMsMHg4YywweDAzLDB4MDYsMHgwMCB9LAorICAxNiwgMHg4MTMwLCAwLCB7MHhmOCwweGNkLDB4M2UsMHgyMiwweDBmLDB4MTgsMHgwMywweDQwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MTQwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwMCwweGZmLDB4MDAsMHgzZSwweGMwLDB4MGYsMHhmMCwweDAzLDB4N2MsMHgwMCwweGY3LDB4MDIsMHgzZiB9LAorICAxNiwgMHg4MTUwLCAwLCB7MHhlNCwweDBmLDB4NzAsMHgwMywweDdjLDB4MDQsMHhiNywweDAwLDB4MzcsMHg0MCwweDBkLDB4YzAsMHgwMywweGZjLDB4MDAsMHhmZCB9LAorICAxNiwgMHg4MTYwLCAwLCB7MHgwMCwweDM3LDB4ZDAsMHgwZSwweGMwLDB4NDMsMHhmNCwweDAwLDB4ZGYsMHgwMCwweDNmLDB4ODAsMHg4ZiwweGRhLDB4MDMsMHhmOCB9LAorICAxNiwgMHg4MTcwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDAsMHhmOCwweDEwLDB4M2EsMHhjMCB9LAorICAxNiwgMHg4MTgwLCAwLCB7MHg2ZCwweGE2LDB4MTMsMHhlYywweDAwLDB4Y2IsMHgwMCwweDNhLDB4ZDAsMHgwZiwweGIwLDB4MDMsMHgyYywweDEwLDB4ZGIsMHgxMCB9LAorICAxNiwgMHg4MTkwLCAwLCB7MHgzNiwweGQ4LDB4MGQsMHg4NCwweDAzLDB4ZWMsMHgwNiwweGM5LDB4MDgsMHgzYSwweGMwLDB4MGUsMHg4NiwweDAzLDB4YTgsMHg2MCB9LAorICAxNiwgMHg4MWEwLCAwLCB7MHhmOCwweDIwLDB4M2EsMHg0MCwweDBjLDB4OTAsMHgwMywweDU0LDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MWIwLCAwLCB7MHg5OCwweDA1LDB4M2MsMHgwMCwweGJiLDB4NDAsMHgyMywweGQwLDB4MDgsMHgzMCwweDAyLDB4M2UsMHgxMCwweGFmLDB4MDAsMHgyMCB9LAorICAxNiwgMHg4MWMwLCAwLCB7MHhjMCwweDBiLDB4ZjAsMHgwMiwweDNjLDB4MDAsMHg4ZiwweDUwLDB4MmUsMHhjOCwweDA2LDB4OGEsMHgwMiwweGZjLDB4MDAsMHg4ZCB9LAorICAxNiwgMHg4MWQwLCAwLCB7MHgyNCwweDgyLDB4ZDYsMHgwOCwweDMyLDB4MDIsMHgyZCwweDA4LDB4M2EsMHg0MCwweDIyLDB4ODAsMHgwZCwweDkwLDB4MDMsMHg2MiB9LAorICAxNiwgMHg4MWUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgwNSwweDRjLDB4MDAsMHhiMCwweDIwLDB4MjgsMHhjMiB9LAorICAxNiwgMHg4MWYwLCAwLCB7MHgwOCwweDA0LDB4MDIsMHg4YywweDAwLDB4MTMsMHgwMiwweDI4LDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwYywweDMwLDB4OTMsMHg4MCB9LAorICAxNiwgMHg4MjAwLCAwLCB7MHgyNCwweGQwLDB4MDksMHgyMCwweDAyLDB4Y2MsMHgwMCwweDkxLDB4NDAsMHgwOCwweGMwLDB4MmEsMHgxNCwweDAyLDB4ODEsMHgwMCB9LAorICAxNiwgMHg4MjEwLCAwLCB7MHg5MCwweDAwLDB4NjgsMHgwMCwweDA4LDB4MTgsMHgwMiwweDNhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MjIwLCAwLCB7MHg3MCwweDAxLDB4MWUsMHgwMCwweGI0LDB4YTAsMHgyMSwweGUwLDB4MDgsMHhjOCwweDEyLDB4OWUsMHgwMCwweGIzLDB4ODIsMHgyMSB9LAorICAxNiwgMHg4MjMwLCAwLCB7MHhlMCwweDBiLDB4N2EsMHgwYSwweDFlLDB4MDAsMHg5NywweDgwLDB4MmQsMHhlMSwweDBhLDB4NDgsMHgwMiwweGNlLDB4NDAsMHg5NSB9LAorICAxNiwgMHg4MjQwLCAwLCB7MHg5MCwweDI5LDB4ZTQsMHgwOCwweDU4LDB4MDIsMHg5YSwweDAwLDB4YjcsMHg4OCwweDIxLDB4ZTAsMHgwOSwweDU4LDB4MDIsMHg1YyB9LAorICAxNiwgMHg4MjUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NGEsMHgwMCwweDBjLDB4MDAsMHhmMCwweDgwLDB4MzgsMHhjNCB9LAorICAxNiwgMHg4MjYwLCAwLCB7MHgwYywweDI1LDB4MDMsMHg4YywweDIwLDB4OTMsMHgwMCwweDM4LDB4YzQsMHgwZiwweGIwLDB4MDMsMHgwYywweDgwLDB4ZDMsMHgwMCB9LAorICAxNiwgMHg4MjcwLCAwLCB7MHgzNCwweGMwLDB4MGQsMHgwNCwweDEzLDB4Y2MsMHgwOCwweDk5LDB4MDAsMHgyYSwweGMwLDB4MGUsMHgyMSwweDAzLDB4ODgsMHgwNCB9LAorICAxNiwgMHg4MjgwLCAwLCB7MHhmMywweDAwLDB4MzgsMHhjMCwweDBjLDB4MTEsMHg4MywweDEyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MjkwLCAwLCB7MHg0MiwweDE1LDB4YmMsMHgwMCwweGY0LDB4MDAsMHgzZiwweGMzLDB4MGUsMHhjMCwweDAzLDB4MWMsMHgwMCwweGFmLDB4NGEsMHg3ZiB9LAorICAxNiwgMHg4MmEwLCAwLCB7MHhjNCwweDBmLDB4YjIsMHgwMywweGZkLDB4MDEsMHhlZiwweDEwLDB4M2YsMHg4NCwweDBmLDB4YzAsMHgwMywweGZjLDB4MDAsMHhlOSB9LAorICAxNiwgMHg4MmIwLCAwLCB7MHgwMCwweDM3LDB4YzIsMHgwZSwweGYxLDB4NDcsMHg3YywweDAwLDB4ZjcsMHgwMCwweDNkLDB4YzAsMHgwZiwweDUwLDB4MDMsMHhkMCB9LAorICAxNiwgMHg4MmMwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YWEsMHgxNSwweGVjLDB4MDgsMHhmOCwweDAwLDB4M2UsMHhjYSB9LAorICAxNiwgMHg4MmQwLCAwLCB7MHgwZiwweDkwLDB4MDMsMHhlZiwweDIxLDB4ZmIsMHg4MCwweDdhLDB4NDAsMHg4ZiwweGIyLDB4YTEsMHgyZiwweDAwLDB4Y2IsMHg2MCB9LAorICAxNiwgMHg4MmUwLCAwLCB7MHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4ZWQsMHhhMCwweGU5LDB4MzAsMHgzMiwweGMwLDB4MmQsMHhiMCwweDAzLDB4ZTQsMHgwMCB9LAorICAxNiwgMHg4MmYwLCAwLCB7MHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4YjAsMHgwMywweGVhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MzAwLCAwLCB7MHhjOCwweDkxLDB4OWQsMHgwMCwweGI0LDB4MDEsMHgyZCwweGM4LDB4MGIsMHg3MCwweDAyLDB4Y2MsMHg4MCwweDhmLDB4MjAsMHgyMSB9LAorICAxNiwgMHg4MzEwLCAwLCB7MHhjMCwweDhiLDB4NzYsMHgwMywweDVkLDB4MDAsMHg4NywweDBhLDB4MmQsMHhjMCwweDBiLDB4NDAsMHgyMiwweGZkLDB4MDAsMHg4ZCB9LAorICAxNiwgMHg4MzIwLCAwLCB7MHgxMCwweDIzLDB4YzgsMHgwOCwweDUwLDB4MTIsMHhkNCwweDAwLDB4YjcsMHgwMCwweDJkLDB4YzAsMHgwYiwweDcwLDB4MDIsMHhmMiB9LAorICAxNiwgMHg4MzMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODEsMHgwMCwweDllLDB4MDAsMHhiNCwweDgwLDB4MmQsMHhlMCB9LAorICAxNiwgMHg4MzQwLCAwLCB7MHgwYiwweDdjLDB4MDIsMHhkZSwweDQwLDB4YTcsMHg4MiwweDJkLDB4ZTAsMHgwYiwweDNhLDB4MDIsMHg4ZSwweDAwLDB4ODcsMHg5MCB9LAorICAxNiwgMHg4MzUwLCAwLCB7MHgyZCwweGUwLDB4MGIsMHg1OCwweDAyLDB4NWUsMHgwMCwweGE1LDB4YTIsMHg2NSwweGUwLDB4MDgsMHg2OCwweDgyLDB4ZGEsMHgwMCB9LAorICAxNiwgMHg4MzYwLCAwLCB7MHg5NSwweDgwLDB4MmQsMHg2MCwweDBiLDB4NzgsMHgwMiwweGUwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MzcwLCAwLCB7MHgwOCwweDg0LDB4Y2MsMHgwMCwweGIwLDB4MDksMHgyYywweGMwLDB4MGIsMHgzOCwweDAyLDB4Y2MsMHgwMCwweDgzLDB4MDAsMHgyZSB9LAorICAxNiwgMHg4MzgwLCAwLCB7MHhjMCwweDBiLDB4MzAsMHg0MiwweDRjLDB4MDAsMHg4MywweDAwLDB4MmMsMHhhMCwweDBiLDB4MDQsMHgwMiwweGNjLDB4MDAsMHg4MSB9LAorICAxNiwgMHg4MzkwLCAwLCB7MHgwMCwweGEwLDB4YzAsMHgwOCwweGIwLDB4MDYsMHhjZiwweDgwLDB4YjMsMHgxMCwweDJjLDB4YzQsMHgwYiwweDMxLDB4MDIsMHhjMyB9LAorICAxNiwgMHg4M2EwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgwNSwweGE4LDB4MDAsMHhmZSwweDgwLDB4M2UsMHg4MCB9LAorICAxNiwgMHg4M2IwLCAwLCB7MHgwZiwweGU4LDB4MTMsMHhlOCwweDAwLDB4ZWEsMHgwMCwweDNmLDB4YjAsMHgwZiwweGEwLDB4MDMsMHhhOCwweDAyLDB4YzIsMHgwMCB9LAorICAxNiwgMHg4M2MwLCAwLCB7MHgyZiwweDg4LDB4MGYsMHhlMCwweDAzLDB4ZTgsMHgwMCwweGVhLDB4MDAsMHgzNiwweDAwLDB4MGMsMHhlMCwweDAzLDB4ZjksMHgyMCB9LAorICAxNiwgMHg4M2QwLCAwLCB7MHhkZSwweDgwLDB4M2YsMHhhMCwweDRmLDB4YTgsMHgwMywweGZhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4M2UwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4MTAsMHgzYywweDEwLDB4MGYsMHg4MCwweDgzLDB4ZTEsMHgwMCwweGU4LDB4MDAsMHgyMiB9LAorICAxNiwgMHg4M2YwLCAwLCB7MHgwNiwweDBmLDB4MDAsMHgxMywweGUwLDB4MDEsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHg4MywweGUwLDB4MDAsMHhmOCB9LAorICAxNiwgMHg4NDAwLCAwLCB7MHgwMCwweDNlLDB4MDAsMHgwZiwweDg0LDB4MjMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MTAsMHgwZiwweDgwLDB4MDMsMHhkMiB9LAorICAxNiwgMHg4NDEwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGU0LDB4MDAsMHhmOSwweDEwLDB4M2UsMHg0NCB9LAorICAxNiwgMHg4NDIwLCAwLCB7MHgwZCwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgwYywweDkwLDB4MTIsMHgyNCwweDAwLDB4ZjksMHgxMCB9LAorICAxNiwgMHg4NDMwLCAwLCB7MHgzMiwweDQwLDB4OGYsMHg5MCwweDAzLDB4YzQsMHgwMCwweGM5LDB4MDAsMHgzMiwweDEwLDB4MGMsMHg5YywweDAxLDB4MjQsMHgwMCB9LAorICAxNiwgMHg4NDQwLCAwLCB7MHhmOSwweDEwLDB4M2UsMHg3MCwweDBmLDB4OTAsMHgwMiwweGMyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NDUwLCAwLCB7MHg4MCwweDE0LDB4NjQsMHgwMCwweGI5LDB4YzAsMHgyZSwweDQ4LDB4MDgsMHg5MSwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDAsMHgyZSB9LAorICAxNiwgMHg4NDYwLCAwLCB7MHg0MCwweDBkLDB4OTAsMHgwMywweDY3LDB4MDAsMHhiOSwweDgwLDB4MmEsMHg2MCwweDBiLDB4OTksMHgwMiwweGU0LDB4MDAsMHg4MSB9LAorICAxNiwgMHg4NDcwLCAwLCB7MHgwMCwweDIyLDB4NDAsMHgyYywweDkwLDB4MTIsMHgyNSwweDIwLDB4YjksMHg0OCwweDJlLDB4NTIsMHgwYiwweDk0LDB4MDIsMHhlMCB9LAorICAxNiwgMHg4NDgwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDAsMHhiOSwweDAwLDB4MmUsMHg0MCB9LAorICAxNiwgMHg4NDkwLCAwLCB7MHg2OCwweDkwLDB4NDYsMHhlNCwweDAwLDB4YjksMHgwMCwweDJlLDB4YzAsMHgwOCwweDkwLDB4MDIsMHhhNCwweDYwLDB4YjksMHgwMCB9LAorICAxNiwgMHg4NGEwLCAwLCB7MHgyMiwweDQ4LDB4MGIsMHg5MCwweDA2LDB4ZTQsMHgwMiwweDg5LDB4MDAsMHhhMCwweDQwLDB4MDgsMHg5MCwweDAyLDB4YTYsMHgxMCB9LAorICAxNiwgMHg4NGIwLCAwLCB7MHhiOSwweDAwLDB4MGUsMHg0MCwweDBiLDB4OTAsMHgwMiwweGM2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NGMwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweGIxLDB4MDAsMHgyYywweDQ4LDB4MDgsMHgxMCwweDAyLDB4YzQsMHg4NCwweGIxLDB4MjAsMHgyYyB9LAorICAxNiwgMHg4NGQwLCAwLCB7MHg0MCwweDA5LDB4MTIsMHgwMiwweGM0LDB4ODAsMHhiMSwweDIwLDB4MjgsMHg0MCwweDBiLDB4MTAsMHgwMiwweGM0LDB4ODAsMHg4OSB9LAorICAxNiwgMHg4NGUwLCAwLCB7MHgyMCwweDIwLDB4NDAsMHg0YiwweDEyLDB4MGEsMHg4NCwweDg0LDB4YjEsMHgyMCwweDJjLDB4NDgsMHg4YiwweDEwLDB4MDIsMHhjMiB9LAorICAxNiwgMHg4NGYwLCAwLCB7MHgxMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYxLDB4NDAsMHhiYSwweDAwLDB4MmUsMHgwMCB9LAorICAxNiwgMHg4NTAwLCAwLCB7MHgwYywweDgwLDB4MDMsMHhlOCwweDA4LDB4ZjgsMHg1MCwweDNlLDB4MTQsMHgwYywweDg1LDB4MDMsMHgyMCwweDAwLDB4YjgsMHgwMCB9LAorICAxNiwgMHg4NTEwLCAwLCB7MHgzMiwweDAwLDB4MGYsMHhhMCwweDAzLDB4ZTEsMHg0MCwweGM4LDB4NTAsMHgzMiwweDE0LDB4MGMsMHhhNSwweDAzLDB4YTEsMHg0MCB9LAorICAxNiwgMHg4NTIwLCAwLCB7MHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4YTAsMHgwMywweGVlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NTMwLCAwLCB7MHg4OCwweDBkLDB4ZTQsMHg0MCwweGZkLDB4MDAsMHgzZSwweDQ0LDB4MGYsMHhkMCwweDAzLDB4ZTQsMHg0MCwweGI5LDB4MTEsMHgzZiB9LAorICAxNiwgMHg4NTQwLCAwLCB7MHg0MCwweDBmLDB4OTEsMHgwMywweDY0LDB4NDQsMHhmOSwweDEwLDB4M2YsMHg0MCwweDBmLDB4ZDAsMHgwMywweGU0LDB4NDAsMHhmZCB9LAorICAxNiwgMHg4NTUwLCAwLCB7MHgxMCwweDNmLDB4MTAsMHg4YywweGQxLDB4MDMsMHg3NCwweDQwLDB4ZmYsMHgxMCwweDNmLDB4NDQsMHgwZiwweGQwLDB4MDMsMHhlNiB9LAorICAxNiwgMHg4NTYwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweDY2LDB4MjAsMHhlZCwweDAwLDB4MzMsMHg2OSB9LAorICAxNiwgMHg4NTcwLCAwLCB7MHg0ZCwweDUwLDB4NDMsMHg1NiwweDAwLDB4ZjksMHhhMCwweDM0LDB4NDAsMHgwZiwweDlhLDB4MGIsMHgzNCwweDAwLDB4ZGQsMHg4MCB9LAorICAxNiwgMHg4NTgwLCAwLCB7MHgzYiwweDQwLDB4MGIsMHg1MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzMiwweGUwLDB4MGUsMHhkMCwweDAzLDB4ZjQsMHgwMCB9LAorICAxNiwgMHg4NTkwLCAwLCB7MHhmZCwweDAwLDB4M2YsMHg0MCwweDBjLDB4ZDAsMHgwMywweGM2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NWEwLCAwLCB7MHg3OCwweDEwLDB4ZTIsMHg4MCwweDg4LDB4MDQsMHgyMiwweDEwLDB4MGIsMHg4MCwweDAyLDB4MjAsMHgwOSwweGI4LDB4ZjAsMHgyMiB9LAorICAxNiwgMHg4NWIwLCAwLCB7MHgwMCwweDBiLDB4OGUsMHgxMiwweGEwLDB4MDAsMHhiOCwweDUyLDB4MmUsMHgwMCwweDBiLDB4ODAsMHgwMiwweGUwLDB4MDUsMHhiOCB9LAorICAxNiwgMHg4NWMwLCAwLCB7MHhhYSwweDIzLDB4M2UsMHgwZCwweDgwLDB4MDIsMHhlMCwweDAwLDB4YjgsMHgwMCwweDNhLDB4MDAsMHgwOCwweDgwLDB4MDIsMHhjZSB9LAorICAxNiwgMHg4NWQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwNSwweGM0LDB4MjAsMHhhOSwweDAwLDB4YTQsMHg0NCB9LAorICAxNiwgMHg4NWUwLCAwLCB7MHgwOSwweDkwLDB4MDIsMHhjNSwweDAwLDB4YTEsMHgwOCwweDJjLDB4NDAsMHgwYiwweDExLDB4ODIsMHgwNCwweDAwLDB4YjEsMHgwMCB9LAorICAxNiwgMHg4NWYwLCAwLCB7MHgyOCwweDQwLDB4MGEsMHgxMCwweDQyLDB4YzQsMHgwMCwweGI1LDB4MDAsMHhhMSwweDQwLDB4MDgsMHgxMCwweDAyLDB4YzQsMHgwMCB9LAorICAxNiwgMHg4NjAwLCAwLCB7MHhiMSwweDAxLDB4MmMsMHg0MCwweDA4LDB4MTAsMHgyMCwweGQyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NjEwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMCwweDg5LDB4MDQsMHgyMiwweDQwLDB4MGIsMHg5MCwweDAwLDB4YWMsMHgwMCwweDM5LDB4MDAsMHgyYSB9LAorICAxNiwgMHg4NjIwLCAwLCB7MHg0MCwweDBiLDB4MTAsMHgwMiwweGE0LDB4MDAsMHhiOSwweDAwLDB4MmUsMHg0OCwweDBiLDB4OTAsMHgxMiwweGU0LDB4MDAsMHhiOSB9LAorICAxNiwgMHg4NjMwLCAwLCB7MHgwMCwweDIxLDB4NjAsMHgwOSwweDkyLDB4MjIsMHhlNCwweDI4LDB4YjksMHgwMCwweDBhLDB4NTAsMHgwOCwweDkwLDB4MDYsMHhjNiB9LAorICAxNiwgMHg4NjQwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU0LDB4MDAsMHhlOSwweDAwLDB4MzYsMHg0MCB9LAorICAxNiwgMHg4NjUwLCAwLCB7MHgwZCwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDgsMHgwZiwweDkwLDB4MDMsMHgyNCwweDAwLDB4ZDksMHgwMCB9LAorICAxNiwgMHg4NjYwLCAwLCB7MHgzYSwweDc4LDB4MGUsMHg5OCwweDAzLDB4ZTQsMHgwMCwweGI5LDB4MDAsMHhiMiwweDQwLDB4MGUsMHg5MiwweDIzLDB4ZTYsMHgwMCB9LAorICAxNiwgMHg4NjcwLCAwLCB7MHhiOSwweDUwLDB4M2UsMHg3MCwweDJjLDB4OTAsMHgwMywweGU4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NjgwLCAwLCB7MHg2OCwweDAxLDB4ODQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4NGYsMHg5YywweDIzLDB4NjQsMHgwMCwweGY5LDB4MDQsMHgzNiB9LAorICAxNiwgMHg4NjkwLCAwLCB7MHg0OCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg2MCwweDBmLDB4OTIsMHgwMywweGU0LDB4MDAsMHhmOSB9LAorICAxNiwgMHg4NmEwLCAwLCB7MHgwMCwweDNlLDB4NDAsMHg4ZiwweDkwLDB4ODMsMHhlNCwweDQ0LDB4ZjksMHgwMCwweDc4LDB4NjQsMHgwZiwweDkwLDB4MDMsMHhkYSB9LAorICAxNiwgMHg4NmIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCB9LAorICAxNiwgMHg4NmMwLCAwLCB7MHgwZiwweDgyLDB4MDMsMHhhMCwweDQwLDB4ZTgsMHgwMCwweDNlLDB4MDAsMHgwZCwweDgwLDB4MDMsMHgyMCwweGMwLDB4YzgsMHg4MCB9LAorICAxNiwgMHg4NmQwLCAwLCB7MHgzZSwweDEyLDB4MGYsMHg4MCwweDAzLDB4NjAsMHgwMCwweDdjLDB4MDAsMHgzMywweDAwLDB4MGQsMHg4MCwweDEzLDB4ZTAsMHgxMCB9LAorICAxNiwgMHg4NmUwLCAwLCB7MHhjOCwweDY0LDB4M2UsMHgwOCwweDBjLDB4ODIsMHgwMywweGNhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NmYwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwMCwweGI2LDB4ZTAsMHgwZiwweGEwLDB4MGIsMHg2MCwweDgyLDB4MzgsMHgwMCwweGFhLDB4MDAsMHgyZSB9LAorICAxNiwgMHg4NzAwLCAwLCB7MHg4MCwweDA4LDB4YTAsMHg0MiwweGJhLDB4MDAsMHhhZSwweDIwLDB4MmYsMHg4OCwweDBiLDB4ZTUsMHgwMiwweDI4LDB4MDAsMHhiYSB9LAorICAxNiwgMHg4NzEwLCAwLCB7MHhkOCwweDM3LDB4ODAsMHgwOCwweGVjLDB4MDIsMHhmOCwweDA0LDB4OGUsMHgwMCwweDJmLDB4OTAsMHgwZCwweGUwLDB4MDIsMHhjYSB9LAorICAxNiwgMHg4NzIwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDAsMHhiMCwweDI0LDB4MmMsMHg2MCB9LAorICAxNiwgMHg4NzMwLCAwLCB7MHgwYiwweDM4LDB4MDIsMHg4ZSwweDgwLDB4YWIsMHgwMCwweDJjLDB4YzAsMHgwOSwweDMwLDB4MDIsMHgwZCwweDA4LDB4MDAsMHg4MCB9LAorICAxNiwgMHg4NzQwLCAwLCB7MHg2YywweGQwLDB4MGIsMHgzNCwweDAyLDB4Y2MsMHgwMCwweGI4LDB4YzAsMHgyMCwweDAwLDB4NDgsMHgzNCwweDEyLDB4Y2MsMHg0MCB9LAorICAxNiwgMHg4NzUwLCAwLCB7MHg4MywweDAwLDB4MmMsMHhlMCwweDBhLDB4MzUsMHgwMiwweGNhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NzYwLCAwLCB7MHhhMCwweDAxLDB4MWMsMHg0MCwweGI3LDB4MDAsMHgyZCwweDAyLDB4OGIsMHg2MCwweDAyLDB4OWUsMHgwMCwweDg3LDB4MjAsMHgyZiB9LAorICAxNiwgMHg4NzcwLCAwLCB7MHhlMCwweDA4LDB4NzIsMHgwMiwweDllLDB4MDAsMHhhNCwweDAwLDB4MmQsMHhjMCwweDBiLDB4ZjgsMHgwMiwweDljLDB4YzAsMHhiMyB9LAorICAxNiwgMHg4NzgwLCAwLCB7MHgwMiwweGE1LDB4YzAsMHgwOCwweDUwLDB4ODYsMHhmZSwweDAwLDB4ODcsMHgwMCwweDJmLDB4ZDAsMHgwOSwweDcwLDB4MDIsMHhlOCB9LAorICAxNiwgMHg4NzkwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFlLDB4MDAsMHhmNCwweDgwLDB4M2QsMHgyMCB9LAorICAxNiwgMHg4N2EwLCAwLCB7MHgwZiwweDU4LDB4MDMsMHg5ZSwweDAwLDB4NjcsMHg4MCwweDNkLDB4ZjgsMHgwZCwweDM4LDB4MDIsMHgxYSwweDEwLDB4NDQsMHg4MCB9LAorICAxNiwgMHg4N2IwLCAwLCB7MHgzZCwweGUwLDB4MGYsMHg1OCwweDAzLDB4ZGUsMHgyMCwweGI0LDB4ODAsMHgzMywweGEwLDB4MmMsMHg2OCwweDAzLDB4ZDYsMHgwMCB9LAorICAxNiwgMHg4N2MwLCAwLCB7MHhjNywweDgxLDB4M2QsMHhlMCwweDBjLDB4NzgsMHgwMywweGVhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4N2QwLCAwLCB7MHgwOCwweDFkLDB4YWMsMHgwOCwweGY4LDB4MDAsMHgzZSwweDAwLDB4OGYsMHg4MCwweDAzLDB4NmMsMHgwMCwweDNiLDB4MTIsMHgzZSB9LAorICAxNiwgMHg4N2UwLCAwLCB7MHhjYSwweDBmLDB4YjUsMHgwMywweGM4LDB4MDAsMHhmOCwweDA0LDB4N2UsMHhjMCwweDBmLDB4OTAsMHgwMywweDZjLDB4ODAsMHhmYiB9LAorICAxNiwgMHg4N2YwLCAwLCB7MHgwNCwweDNhLDB4NDAsMHgwZiwweDkwLDB4MjMsMHhjOCwweDAwLDB4ZjksMHgwMSwweDNjLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhjMiB9LAorICAxNiwgMHg4ODAwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZlLDB4MDAsMHhhYywweDkwLDB4MzEsMHg0OCB9LAorICAxNiwgMHg4ODEwLCAwLCB7MHgwOCwweGY4LDB4MDMsMHhmYSwweDAwLDB4Y2YsMHg4MCwweDNmLDB4ZTAsMHgwYywweGZjLDB4MTMsMHgzZSwweDA0LDB4ZmMsMHg4MCB9LAorICAxNiwgMHg4ODIwLCAwLCB7MHgzNSwweGEwLDB4MGMsMHg3OCwweDAzLDB4YmUsMHgwMCwweGRmLDB4ODAsMHgzYiwweDIwLDB4MjQsMHhmOCwweDAzLDB4MmUsMHg0MCB9LAorICAxNiwgMHg4ODMwLCAwLCB7MHhjZiwweDgwLDB4MzMsMHhlMCwweDAzLDB4ZjksMHgwMywweGQwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ODQwLCAwLCB7MHhhOCwweDExLDB4YmMsMHgwMCwweDgwLDB4MDAsMHgwMSwweDAwLDB4MDgsMHg3MiwweDAyLDB4ZDAsMHgwMCwweDg3LDB4MDAsMHgyZCB9LAorICAxNiwgMHg4ODUwLCAwLCB7MHhjOCwweDBhLDB4ZjAsMHgwMiwweDk4LDB4NDAsMHhmNSwweDAwLDB4NjEsMHg0MSwweDAwLDB4NzQsMHgwMiwweDFjLDB4MDAsMHhiNCB9LAorICAxNiwgMHg4ODYwLCAwLCB7MHgwMCwweDIxLDB4YzgsMHgwOCwweDYwLDB4MDIsMHgzZSwweDIwLDB4ODYsMHgwOCwweDIxLDB4ZDgsMHgwZiwweDUwLDB4MDIsMHhlYSB9LAorICAxNiwgMHg4ODcwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMCwweDljLDB4MDAsMHhhNCwweDAwLDB4MjEsMHgwMCB9LAorICAxNiwgMHg4ODgwLCAwLCB7MHgwOCwweDUwLDB4MDIsMHhkOCwweDAwLDB4OTcsMHgwMCwweDJkLDB4YzAsMHg4OCwweDcxLDB4MDIsMHgxNCwweDAwLDB4YjAsMHgwMCB9LAorICAxNiwgMHg4ODkwLCAwLCB7MHgyNSwweDkwLDB4MDgsMHhjMCwweDgyLDB4OWMsMHg0MCwweDkzLDB4MDAsMHgyOSwweGExLDB4ODgsMHg2MCwweDAyLDB4MTQsMHgxMiB9LAorICAxNiwgMHg4OGEwLCAwLCB7MHg4NywweDQwLDB4MjksMHg0MCwweDBiLDB4NjAsMHgwMiwweGM0LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4OGIwLCAwLCB7MHg2MCwweDE0LDB4Y2MsMHgwMCwweDgwLDB4ZDAsMHhhMCwweDAwLDB4MDgsMHgxYywweDAyLDB4YzAsMHgwMCwweDkzLDB4MDAsMHgyYyB9LAorICAxNiwgMHg4OGMwLCAwLCB7MHhkMCwweDBhLDB4YjAsMHgyNiwweDgwLDB4MDAsMHhiMywweDAwLDB4MjQsMHhlNCwweDA4LDB4MDgsMHgwMiwweDhjLDB4MDAsMHhiMCB9LAorICAxNiwgMHg4OGQwLCAwLCB7MHgwMiwweDAyLDB4NDEsMHgwOCwweDA4LDB4MDIsMHgwMywweDAxLDB4ODEsMHgwMCwweDI4LDB4NDIsMHgxYSwweDAwLDB4NDIsMHhkOCB9LAorICAxNiwgMHg4OGUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZjgsMHgxNSwweGJjLDB4MDAsMHhlOCwweGMwLDB4MzIsMHg4MCB9LAorICAxNiwgMHg4OGYwLCAwLCB7MHgwYywweGI1LDB4MDMsMHhlNCwweDAwLDB4OWYsMHgwMCwweDNkLDB4ZTAsMHgwYywweGYwLDB4MGIsMHgyNCwweDAwLDB4ZjgsMHgwMCB9LAorICAxNiwgMHg4OTAwLCAwLCB7MHgzNiwweGUwLDB4MGMsMHgyNSwweDAzLDB4YmMsMHgwNSwweGQ4LDB4MDIsMHgyYSwweDAwLDB4MDgsMHhiYSwweDAyLDB4MmEsMHgwMCB9LAorICAxNiwgMHg4OTEwLCAwLCB7MHhjMSwweDAyLDB4M2EsMHg1MCwweDhiLDB4OTAsMHgwMywweGVlLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4OTIwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGZiLDB4MDgsMHgzZSwweDgwLDB4MGYsMHhhMSwweDAzLDB4ZWMsMHgwNCwweGViLDB4MDIsMHgyZSB9LAorICAxNiwgMHg4OTMwLCAwLCB7MHhjNiwweDBmLDB4YjAsMHgxNywweDQ0LDB4MDAsMHhlOCwweDAwLDB4M2EsMHg0MCwweDBmLDB4ODAsMHgwMiwweDZjLDB4MDAsMHhmYiB9LAorICAxNiwgMHg4OTQwLCAwLCB7MHgwMCwweDNlLDB4ZTAsMHgwZiwweDkwLDB4OTMsMHhlMSwweDAwLDB4ZDksMHgwMCwweDI2LDB4NzAsMHg4ZiwweDkwLDB4MDEsMHhlMSB9LAorICAxNiwgMHg4OTUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweGZjLDB4MDAsMHhmYywweDAzLDB4MzcsMHgyNCB9LAorICAxNiwgMHg4OTYwLCAwLCB7MHgwZCwweGY4LDB4MDMsMHhlMCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzEsMHg4ZCwweGYwLDB4MGIsMHgzOCwweDAwLDB4Y2MsMHgwMCB9LAorICAxNiwgMHg4OTcwLCAwLCB7MHgzZiwweGMwLDB4MGYsMHhmYSwweDAzLDB4M2MsMHgwYywweGZjLDB4MDQsMHgzYiwweDgwLDB4MGMsMHhhMCwweDAzLDB4OTQsMHgyMCB9LAorICAxNiwgMHg4OTgwLCAwLCB7MHg4OSwweDA1LDB4M2IsMHgwMCwweDRmLDB4ZDAsMHgyMywweGMwLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4OTkwLCAwLCB7MHg4MCwweDA0LDB4NmMsMHgwMCwweGIwLDB4MDYsMHgyMCwweDEzLDB4ODgsMHhhOCwweDAyLDB4ZWIsMHgwMCwweGJiLDB4MDAsMHgyZSB9LAorICAxNiwgMHg4OWEwLCAwLCB7MHhjMCwweDA4LDB4YjAsMHgwMiwweDJhLDB4MDAsMHhhOCwweDgwLDB4MmUsMHhlMCwweDBiLDB4OTQsMHgxYSwweDJjLDB4MDAsMHhiYiB9LAorICAxNiwgMHg4OWIwLCAwLCB7MHgwMCwweGEyLDB4NDAsMHgyOSwweDk4LDB4MDIsMHhlMiwweDAwLDB4YTksMHg4NCwweDIyLDB4MjAsMHgwYiwweDk4LDB4MDIsMHhlMCB9LAorICAxNiwgMHg4OWMwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHhiOCwweDAwLDB4MjIsMHgwMCB9LAorICAxNiwgMHg4OWQwLCAwLCB7MHgwOSwweDgyLDB4MDIsMHhlNiwweDAwLDB4YmIsMHgwMCwweDJlLDB4YzAsMHgwYiwweGIwLDB4MDIsMHgyNiwweDAwLDB4ODgsMHg4MCB9LAorICAxNiwgMHg4OWUwLCAwLCB7MHgyZSwweGEwLDB4MGIsMHhhMCwweDAyLDB4MmMsMHgwMCwweGIzLDB4MDAsMHgyYSwweDAwLDB4MDksMHg5OCwweDAyLDB4ZWEsMHgyMCB9LAorICAxNiwgMHg4OWYwLCAwLCB7MHhhOSwweDgwLDB4MmEsMHg2MCwweDliLDB4OTgsMHg4MiwweGUwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4YTAwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMCwweGI4LDB4MDAsMHgyMCwweDAwLDB4MDksMHgwOCwweDAyLDB4YzQsMHgwMCwweGIzLDB4MDAsMHgyNiB9LAorICAxNiwgMHg4YTEwLCAwLCB7MHhjMCwweDAwLDB4MzAsMHgwMiwweDAwLDB4MDAsMHg4MSwweDAwLDB4MmMsMHg0MSwweDBiLDB4MDAsMHgwMiwweDBjLDB4MDAsMHhiMCB9LAorICAxNiwgMHg4YTIwLCAwLCB7MHgwMCwweDIwLDB4YzAsMHgwYiwweDAwLDB4MDIsMHhjOCwweDgwLDB4YTgsMHgwMCwweDIwLDB4NDEsMHgwYiwweDEwLDB4MDIsMHhjMiB9LAorICAxNiwgMHg4YTMwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDZjLDB4MTAsMHhmOCwweDUwLDB4YjIsMHgwMCB9LAorICAxNiwgMHg4YTQwLCAwLCB7MHgwZCwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZmIsMHgwMCwweDNkLDB4YzAsMHgwZCwweGYwLDB4MTMsMHgyNCwweDAyLDB4YzgsMHgwNiB9LAorICAxNiwgMHg4YTUwLCAwLCB7MHgzZSwweDgwLDB4MGYsMHhhMCwweDAzLDB4M2MsMHgwNCwweGZiLDB4MDAsMHg3OCwweDgwLDB4MGMsMHhhMCwweDAzLDB4ZTQsMHgwMCB9LAorICAxNiwgMHg4YTYwLCAwLCB7MHhlOSwweDAwLDB4MWEsMHg0MCwweDBmLDB4OTAsMHgwMywweGMwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4YTcwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgwMCwweGY0LDB4MjAsMHgzZiwweDAwLDB4MGUsMHhjMCwweDAyLDB4ZjAsMHgwMSwweGZmLDB4MDAsMHgzZiB9LAorICAxNiwgMHg4YTgwLCAwLCB7MHhjMCwweDBmLDB4ZjAsMHgyMywweGYwLDB4MDAsMHhmZCwweDAwLDB4M2YsMHhjMCwweDBmLDB4YzAsMHgwMywweGZjLDB4MDAsMHhmYyB9LAorICAxNiwgMHg4YTkwLCAwLCB7MHgwMCwweDNmLDB4NDAsMHg5YywweGMwLDB4MDMsMHhmMCwweDQwLDB4ZmQsMHgwMCwweDNmLDB4NDAsMHgwZiwweGQwLDB4NDMsMHhlOCB9LAorICAxNiwgMHg4YWEwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGYwLDB4MDAsMHhlZCwweDIzLDB4YjcsMHg0OCB9LAorICAxNiwgMHg4YWIwLCAwLCB7MHgwYywweGUxLDB4YzMsMHg3YywweGMwLDB4ZGQsMHg4MCwweDM3LDB4ZTAsMHgwZiwweGNiLDB4MDMsMHhmZSwweDA4LDB4ZmMsMHgyOCB9LAorICAxNiwgMHg4YWMwLCAwLCB7MHgzZiwweGYwLDB4MWMsMHhmYiwweDIzLDB4N2MsMHgwMSwweGZmLDB4MTQsMHg3NywweGUyLDB4NGYsMHhlOCwweDIzLDB4N2MsMHgwMCB9LAorICAxNiwgMHg4YWQwLCAwLCB7MHhjNCwweDgwLDB4MzMsMHg0OCwweDJjLDB4ZjgsMHgyMiwweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4YWUwLCAwLCB7MHg4MCwweDEwLDB4ZTAsMHhlMCwweGM5LDB4YzAsMHgyMiwweDViLDB4ODgsMHg5NiwweDIyLDB4MmQsMHgwMCwweDg5LDB4MjIsMHgyMiB9LAorICAxNiwgMHg4YWYwLCAwLCB7MHhjYSwweDBiLDB4OWUsMHgyMiwweGUyLDB4YTAsMHhiOSwweDYxLDB4MmMsMHhlMCwweDg4LDB4OWYsMHgwMiwweDNkLDB4ODUsMHhiZiB9LAorICAxNiwgMHg4YjAwLCAwLCB7MHg2MCwweDI2LDB4NTAsMHg0OCwweGEwLDB4MDIsMHgzYywweDAwLDB4ODgsMHgwMCwweDIyLDB4NTAsMHgwOCwweGIwLDB4MDIsMHgyMCB9LAorICAxNiwgMHg4YjEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGMwLDB4ODAsMHhiMSwweDEwLDB4MjAsMHg0NCB9LAorICAxNiwgMHg4YjIwLCAwLCB7MHgwYiwweGIyLDB4MDIsMHhjZSwweGQwLDB4ODEsMHgwOCwweDJjLDB4YzAsMHgwYiwweDAxLDB4MDIsMHg4YywweDA4LDB4YjMsMHgwOCB9LAorICAxNiwgMHg4YjMwLCAwLCB7MHgyYywweGM5LDB4MDgsMHgxMCwweDYyLDB4OGMsMHg2MCwweGIzLDB4MzIsMHgyNCwweDgwLDB4MGEsMHhhMCwweDAyLDB4NmMsMHgwMyB9LAorICAxNiwgMHg4YjQwLCAwLCB7MHg5YSwweDAxLDB4MjYsMHg0NCwweDQ4LDB4YjAsMHg0MiwweDYyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4YjUwLCAwLCB7MHhjMCwweDE1LDB4YTQsMHhhMCwweDhiLDB4MDIsMHgyMiwweGUwLDB4MGIsMHhiMCwweDYyLDB4YWMsMHg5OCwweDk5LDB4MDAsMHgyYSB9LAorICAxNiwgMHg4YjYwLCAwLCB7MHhjMiwweDBiLDB4OTgsMHgwNiwweGU0LDB4MDAsMHhiYiwweDAyLDB4MmUsMHhjMCwweDA4LDB4OTEsMHg0MiwweDJjLDB4MTAsMHhiYiB9LAorICAxNiwgMHg4YjcwLCAwLCB7MHgwMCwweDZlLDB4ODAsMHgwYSwweDgwLDB4MDIsMHg2YywweDAwLDB4MWIsMHgwMCwweDA2LDB4NDAsMHg0OCwweGI4LDB4MGEsMHg3MCB9LAorICAxNiwgMHg4YjgwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMSwweGU3LDB4MDAsMHhhMSwweDAwLDB4NzYsMHg3OCB9LAorICAxNiwgMHg4YjkwLCAwLCB7MHgwZiwweGIwLDB4MDMsMHhlOCwweDEwLDB4ZDksMHgwMCwweDNlLDB4ZDAsMHg0YiwweDllLDB4MTMsMHhhYywweDA4LDB4YjgsMHhhMCB9LAorICAxNiwgMHg4YmEwLCAwLCB7MHg3ZSwweGM2LDB4MDgsMHhhOCwweDAyLDB4MmMsMHgwMSwweGJiLDB4MDAsMHgyNiwweDMwLDB4NGUsMHgyMCwweDAzLDB4NGMsMHgxOCB9LAorICAxNiwgMHg4YmIwLCAwLCB7MHg5OSwweDgwLDB4YjQsMHg0MCwweDRjLDB4M2EsMHgwMywweDQwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4YmMwLCAwLCB7MHhlMCwweDAxLDB4YjIsMHgwMCwweGZkLDB4YzUsMHgzYiwweGMwLDB4NGMsMHhkMCwweDAzLDB4NmEsMHgwMiwweGVkLDB4MDYsMHgzMyB9LAorICAxNiwgMHg4YmQwLCAwLCB7MHhjNCwweDBmLDB4ZDAsMHg1MywweGY4LDB4MDAsMHhmYywweDkwLDB4N2YsMHhjMSwweDBmLDB4NzgsMHgwMywweGJjLDB4MDQsMHhmZiB9LAorICAxNiwgMHg4YmUwLCAwLCB7MHgwMCwweDM3LDB4NjQsMHgwYywweGYxLDB4MDMsMHhhNCwweDAwLDB4ZWQsMHhhMSwweDNiLDB4NDAsMHgwYiwweGYwLDB4ODMsMHhiOCB9LAorICAxNiwgMHg4YmYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweDhjLDB4MDAsMHhjYiwweDIwLDB4M2UsMHg3MSB9LAorICAxNiwgMHg4YzAwLCAwLCB7MHgwZiwweGIzLDB4MDMsMHg5OCwweDAyLDB4ZmIsMHgwMiwweDM2LDB4NDgsMHgwZiwweDkwLDB4MDMsMHhlYywweDIwLDB4ZjgsMHgwMCB9LAorICAxNiwgMHg4YzEwLCAwLCB7MHgzZSwweGNjLDB4MDQsMHg4NCwweDAzLDB4MmMsMHgwMCwweGRiLDB4MDQsMHgzYywweDEwLDB4MGYsMHhhMCwweDAzLDB4ZWMsMHgwMCB9LAorICAxNiwgMHg4YzIwLCAwLCB7MHg5YiwweDAwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweGQwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4YzMwLCAwLCB7MHg4OCwweDA1LDB4MmMsMHgwMiwweDhiLDB4NDgsMHgyZSwweGUwLDB4MGIsMHgzNCwweDAzLDB4NmIsMHgwMCwweDhiLDB4ZjUsMHgyMiB9LAorICAxNiwgMHg4YzQwLCAwLCB7MHhmMiwweDBiLDB4OWMsMHgwMywweGFmLDB4MDAsMHhiOCwweDUwLDB4MmUsMHhjMCwweDA4LDB4YjAsMHgwMiwweDdjLDB4MDAsMHg4ZiB9LAorICAxNiwgMHg4YzUwLCAwLCB7MHgwMCwweDBlLDB4NWQsMHgwYiwweDgwLDB4MDIsMHhmNSwweDQwLDB4ODMsMHg1MCwweDIzLDB4NTQsMHgwOCwweDljLDB4MDIsMHhlNiB9LAorICAxNiwgMHg4YzYwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNCwweDRjLDB4MDAsMHg4MSwweDgxLDB4MmUsMHg0MCB9LAorICAxNiwgMHg4YzcwLCAwLCB7MHgwMywweDJjLDB4MDIsMHgwNCwweDMzLDB4OTksMHgwMCwweDIwLDB4ZjAsMHg0YSwweDI4LDB4ODAsMHhjYywweDQwLDB4YjAsMHgwMCB9LAorICAxNiwgMHg4YzgwLCAwLCB7MHgyNiwweDEwLDB4MDgsMHgyMCwweDAyLDB4NGMsMHgwMCwweDgzLDB4MDAsMHgyYywweGMwLDB4MDksMHgyMCwweDAyLDB4Y2MsMHgwMCB9LAorICAxNiwgMHg4YzkwLCAwLCB7MHhhMCwweDAyLDB4MjgsMHg0MCwweDA4LDB4MDgsMHgwMiwweDdhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4Y2EwLCAwLCB7MHgyMCwweDAxLDB4MGEsMHgwMCwweDg1LDB4ODAsMHgyZCwweGY4LDB4MGIsMHhkYSwweDAyLDB4ZDYsMHg0MCwweDg1LDB4YTAsMHgyMSB9LAorICAxNiwgMHg4Y2IwLCAwLCB7MHhlMCwweDBiLDB4NDgsMHgwNiwweDkyLDB4MDQsMHhiNSwweDgwLDB4MmQsMHgyMSwweDA4LDB4MDAsMHgwMiwweDRlLDB4MDAsMHg4NyB9LAorICAxNiwgMHg4Y2MwLCAwLCB7MHhhNCwweDJkLDB4NjAsMHgwYiwweDY4LDB4MDIsMHhkZSwweGMyLDB4YWQsMHg5MCwweDJiLDB4NjAsMHgyOCwweDU4LDB4ODIsMHhkYyB9LAorICAxNiwgMHg4Y2QwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDRjLDB4NDAsMHhjMywweDEwLDB4MmMsMHg2YyB9LAorICAxNiwgMHg4Y2UwLCAwLCB7MHgwZiwweDMwLDB4MDMsMHg4NiwweGEyLDB4ZjksMHhiMCwweGIwLDB4ZTAsMHgwZiwweDI5LDB4ODMsMHhjZSwweDQ0LDB4ZjMsMHg4MCB9LAorICAxNiwgMHg4Y2YwLCAwLCB7MHgzYywweGFjLDB4MGMsMHgzMCwweDAzLDB4MGMsMHgwMCwweGMzLDB4MDAsMHgzYywweGQ1LDB4MGYsMHgyMCwweDAzLDB4Y2UsMHhjMSB9LAorICAxNiwgMHg4ZDAwLCAwLCB7MHhlMCwweDEwLDB4YjgsMHg0MCwweDBjLDB4MDAsMHgwMywweGQyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ZDEwLCAwLCB7MHhjMCwweDFkLDB4YmMsMHgwMCwweGViLDB4MDAsMHgzZSwweGNjLDB4MGYsMHgzMiwweDAzLDB4NjQsMHgwOCwweGY5LDB4MDAsMHgzYiB9LAorICAxNiwgMHg4ZDIwLCAwLCB7MHg5MCwweDBmLDB4ZjAsMHg0MywweGU0LDB4NDAsMHhmYiwweDM0LDB4M2YsMHg4MSwweDA3LDB4ZDEsMHgwMywweGFkLDB4MjAsMHhlYiB9LAorICAxNiwgMHg4ZDMwLCAwLCB7MHgyMCwweDdmLDB4YzQsMHgwZiwweGUxLDB4MDMsMHhmYywweDUwLDB4Y2QsMHgxMCwweDM1LDB4NDAsMHgwZiwweGQwLDB4MDMsMHhkMCB9LAorICAxNiwgMHg4ZDQwLCAwLCB7MHgwMiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGU0LDB4MDQsMHhmZCwweDA0LDB4M2QsMHg0MCB9LAorICAxNiwgMHg4ZDUwLCAwLCB7MHgyZCwweDMwLDB4MDIsMHgzYywweDAwLDB4YzksMHgwMSwweDNlLDB4YzAsMHg0ZiwweGI4LDB4NDMsMHhlYywweDEwLDB4ZmIsMHgwMCB9LAorICAxNiwgMHg4ZDYwLCAwLCB7MHgzMiwweDQwLDB4MGYsMHhhMCwweDIzLDB4ZWMsMHg4MCwweGNiLDB4MzYsMHgzMiwweDgwLDB4NGQsMHhhOCwweDAzLDB4MmMsMHgxMCB9LAorICAxNiwgMHg4ZDcwLCAwLCB7MHhjYiwweDAwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweDZhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ZDgwLCAwLCB7MHhjOCwweDExLDB4OTAsMHgwOCwweGI1LDB4MDAsMHgyZCwweGMwLDB4MDgsMHg1MCwweDAyLDB4YmMsMHgwMiwweDg1LDB4MDQsMHgyZCB9LAorICAxNiwgMHg4ZDkwLCAwLCB7MHhjMCwweDhlLDB4NjAsMHgwNiwweGQ4LDB4MDQsMHhiNywweDA0LDB4MjEsMHg0MCwweDBiLDB4NzAsMHgwMiwweGZjLDB4ODAsMHhhZiB9LAorICAxNiwgMHg4ZGEwLCAwLCB7MHgyOCwweDIxLDB4YzAsMHgwYiwweDcwLDB4MDIsMHgwNiwweDQwLDB4ODcsMHgwMCwweDIxLDB4NTAsMHgwOCwweDUwLDB4MDIsMHgzMiB9LAorICAxNiwgMHg4ZGIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweDllLDB4MjAsMHhiNywweDgwLDB4MmIsMHg3MCB9LAorICAxNiwgMHg4ZGMwLCAwLCB7MHgwOCwweGY4LDB4MDYsMHgxZSwweDAwLDB4ODcsMHg4MCwweDJkLDB4ZTAsMHgwYiwweDcwLDB4MzIsMHhkZSwweDA0LDB4MzcsMHg4NCB9LAorICAxNiwgMHg4ZGQwLCAwLCB7MHgyNSwweGUwLDB4MGIsMHg2OCwweDA2LDB4ZGUsMHg4MCwweDg3LDB4ODAsMHgyMSwweGExLDB4MWIsMHg2OCwweDAyLDB4MWUsMHg0MCB9LAorICAxNiwgMHg4ZGUwLCAwLCB7MHg5ZiwweDgwLDB4MjAsMHg2MCwweDA4LDB4NTgsMHgwMiwweDIwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ZGYwLCAwLCB7MHg0OCwweDE0LDB4Y2MsMHgyMCwweGIzLDB4MDAsMHgyYywweDgwLDB4ODgsMHhiNCwweDIyLDB4OGQsMHgwMCwweDgzLDB4OTAsMHgyYyB9LAorICAxNiwgMHg4ZTAwLCAwLCB7MHhjMCwweDBhLDB4MzgsMHgwMiwweGNlLDB4MDgsMHhiYiwweDIwLDB4MjQsMHhkMCwweDBiLDB4YjMsMHgwMiwweGNjLDB4MDAsMHhhMyB9LAorICAxNiwgMHg4ZTEwLCAwLCB7MHgwMCwweDYwLDB4ZDIsMHgwYiwweDIwLDB4MmEsMHgwNCwweDA4LDB4OTMsMHg1MCwweDIwLDB4NDAsMHgwOCwweDE3LDB4MGEsMHgwMiB9LAorICAxNiwgMHg4ZTIwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGJhLDB4MDAsMHhiYSwweGEwLDB4M2YsMHg4NCB9LAorICAxNiwgMHg4ZTMwLCAwLCB7MHgxYywweGUwLDB4MGIsMHgzOCwweDQwLDB4OGUsMHgwNiwweDJlLDB4ODAsMHgwYiwweGUzLDB4MDMsMHhmOCwweDgwLDB4ZmUsMHhlNCB9LAorICAxNiwgMHg4ZTQwLCAwLCB7MHhiNywweDkwLDB4MGYsMHhlYywweDAyLDB4ZTgsMHgwMCwweDhhLDB4MDAsMHhhMywweGEwLDB4MDksMHhlNCwweDAzLDB4MmEsMHgwMiB9LAorICAxNiwgMHg4ZTUwLCAwLCB7MHhkZSwweGMwLDB4ZjMsMHg4MCwweDBjLDB4NmMsMHgwMywweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ZTYwLCAwLCB7MHg0OCwweDAxLDB4ZTAsMHgwMCwweGY4LDB4NDAsMHgzZSwweDAwLDB4MGYsMHg4NCwweDEzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgyZSB9LAorICAxNiwgMHg4ZTcwLCAwLCB7MHgzMCwweDBhLDB4ODQsMHgwMywweGUwLDB4MDQsMHhmOCwweDAwLDB4M2EsMHgwMiwweDBmLDB4ODAsMHgxMywweGUwLDB4MDAsMHhmOCB9LAorICAxNiwgMHg4ZTgwLCAwLCB7MHgwMCwweDNlLDB4MDQsMHgwZCwweDgwLDB4ODMsMHhlMCwweDQwLDB4ZTgsMHgyMCwweDNlLDB4MDAsMHgyZiwweDgwLDB4MDMsMHhkMiB9LAorICAxNiwgMHg4ZTkwLCAwLCB7MHgxMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGE0LDB4MDAsMHhmOSwweDAwLDB4M2MsMHg2NCB9LAorICAxNiwgMHg4ZWEwLCAwLCB7MHg0ZSwweDkwLDB4ODMsMHgyNCwweDgwLDB4YzksMHgwMCwweDMyLDB4ZTAsMHgwZiwweDEwLDB4MDMsMHgyNSwweDAwLDB4ZjksMHgwMCB9LAorICAxNiwgMHg4ZWIwLCAwLCB7MHgzMiwweDQ0LDB4MGYsMHg5MiwweDIzLDB4NjQsMHgwMCwweGMxLDB4MDAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDEzLDB4ZTQsMHgwMCB9LAorICAxNiwgMHg4ZWMwLCAwLCB7MHhjOSwweDAwLDB4MjIsMHg0MCwweDBjLDB4OTAsMHgwMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ZWQwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweGI5LDB4MjAsMHgyZSwweDQwLDB4NDgsMHg5NiwweDIyLDB4MjUsMHgwMCwweGQ5LDB4YzAsMHhhMiB9LAorICAxNiwgMHg4ZWUwLCAwLCB7MHg3MCwweDBiLDB4OTgsMHgwMiwweDI0LDB4MDAsMHhiOSwweDQwLDB4YTIsMHg3MCwweDRiLDB4OTAsMHgwMiwweDI0LDB4MDAsMHhkOSB9LAorICAxNiwgMHg4ZWYwLCAwLCB7MHgwMCwweGEyLDB4NDAsMHgyYywweDk0LDB4MjIsMHhlNCwweDAyLDB4ODksMHgwMCwweGEyLDB4NDAsMHgyOCwweDk0LDB4MTMsMHgyMCB9LAorICAxNiwgMHg4ZjAwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMSwweDI0LDB4MDAsMHhiOSwweDAwLDB4MmUsMHg0MCB9LAorICAxNiwgMHg4ZjEwLCAwLCB7MHgwYSwweDkwLDB4MDIsMHgwNCwweDAwLDB4ODEsMHg4MCwweGEyLDB4NDQsMHgwYiwweDkxLDB4MDIsMHgyNSwweDAwLDB4MTksMHg0MCB9LAorICAxNiwgMHg4ZjIwLCAwLCB7MHg2MiwweDQwLDB4MGIsMHhiNCwweDAyLDB4NDQsMHgwMCwweDg5LDB4MDAsMHgyMCwweDQwLDB4MDgsMHg5MCwweDgyLDB4YzQsMHgwMSB9LAorICAxNiwgMHg4ZjMwLCAwLCB7MHg4MywweDAyLDB4MjgsMHg0MCwweDQ4LDB4OTAsMHg4MiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ZjQwLCAwLCB7MHgwMCwweDA0LDB4MDUsMHg4MCwweGIxLDB4MDAsMHg2YywweDUxLDB4MDgsMHgxNCwweDFhLDB4MDUsMHgwMCwweDkzLDB4MDAsMHgyMCB9LAorICAxNiwgMHg4ZjUwLCAwLCB7MHg0MCwweDhiLDB4MTQsMHgwMiwweDA1LDB4MDAsMHhiMSwweDIwLDB4MjAsMHg1MCwweDBiLDB4MTQsMHgwNiwweDA0LDB4ODAsMHg5MSB9LAorICAxNiwgMHg4ZjYwLCAwLCB7MHgyMCwweDIwLDB4NDAsMHgwOSwweDEwLDB4MDIsMHhjNCwweGE4LDB4ODEsMHgwMCwweDI4LDB4NGEsMHgwOCwweDkwLDB4NGEsMHg0MiB9LAorICAxNiwgMHg4ZjcwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCB9LAorICAxNiwgMHg4ZjgwLCAwLCB7MHgwZSwweDgwLDB4MDMsMHgyOCwweDAxLDB4YzgsMHg1MCwweDMyLDB4OTQsMHg4YiwweGEwLDB4MDMsMHgyMCwweDAwLDB4YjAsMHg1MCB9LAorICAxNiwgMHg4ZjkwLCAwLCB7MHgzMiwweDgwLDB4MGYsMHg4MCwweDA3LDB4NjEsMHg1MSwweGM4LDB4NTAsMHgyMiwweDAwLDB4MGMsMHgwMCwweDAzLDB4ZTAsMHg4NCB9LAorICAxNiwgMHg4ZmEwLCAwLCB7MHhjOCwweDA0LDB4M2EsMHgwOCwweDBjLDB4MDAsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ZmIwLCAwLCB7MHg5OCwweDlkLDB4ZjQsMHg0MCwweGJkLDB4NDEsMHgzZiwweDUwLDB4MGYsMHhmNCwweDAzLDB4ZjUsMHgxMCwweGZkLDB4MDAsMHgzZSB9LAorICAxNiwgMHg4ZmMwLCAwLCB7MHg0MCwweDBmLDB4ZDQsMHgwMywweGY0LDB4MDAsMHhmZiwweDEwLDB4MmYsMHg0MCwweDRmLDB4ZDQsMHg0MCwweGE0LDB4NDgsMHhmOSB9LAorICAxNiwgMHg4ZmQwLCAwLCB7MHgxMiwweDNmLDB4NWEsMHg4ZSwweGQyLDB4ODMsMHhmNCwweGE4LDB4ZjUsMHgyYywweDM3LDB4NGEsMHgwZiwweGQyLDB4ODMsMHhhNiB9LAorICAxNiwgMHg4ZmUwLCAwLCB7MHgxMiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGU2LDB4ODAsMHhmZCwweDI4LDB4M2YsMHg0YyB9LAorICAxNiwgMHg4ZmYwLCAwLCB7MHgwZiwweDUwLDB4MDMsMHgzYywweDQ0LDB4Y2QsMHg0MCwweDNmLDB4ZDAsMHgwZCwweGQwLDB4MDIsMHgxNCwweDAxLDB4ZmQsMHhhMCB9LAorICAxNiwgMHg5MDAwLCAwLCB7MHgzMSwweDQwLDB4MDMsMHhkMCwweDAzLDB4ZTcsMHg4OSwweGY5LDB4OTAsMHg3ZSwweDUwLDB4MGMsMHg5NCwweDAzLDB4ZTYsMHhjMCB9LAorICAxNiwgMHg5MDEwLCAwLCB7MHhjOSwweDEwLDB4MzIsMHg2ZCwweDBmLDB4OTEsMHgwMiwweGM2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MDIwLCAwLCB7MHgzOCwweDEwLDB4ZTAsMHg4MCwweGI4LDB4MDEsMHgyZSwweDBjLDB4OGIsMHg4NCwweDgyLDB4MjAsMHg0MiwweDg4LDB4YTAsMHg2ZSB9LAorICAxNiwgMHg5MDMwLCAwLCB7MHgyMCwweDA4LDB4ODAsMHgwMywweDYwLDB4MDAsMHg5OCwweGU4LDB4MjIsMHgwMCwweDA5LDB4ODAsMHgwMiwweGUzLDB4YzAsMHhlOCB9LAorICAxNiwgMHg5MDQwLCAwLCB7MHhkMCwweDJlLDB4MjgsMHgwOCwweDhhLDB4MjMsMHhlMiwweDg0LDB4ZDgsMHhhMCwweDIyLDB4M2QsMHgwYiwweGM4LDB4MDIsMHhjZSB9LAorICAxNiwgMHg5MDUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwNSwweGM1LDB4YjAsMHhiMSwweDAwLDB4MmMsMHg0OCB9LAorICAxNiwgMHg5MDYwLCAwLCB7MHgwYiwweDEzLDB4MDIsMHgwNCwweDAyLDB4YjEsMHgyMCwweDJlLDB4NDAsMHg4OCwweDEwLDB4MjIsMHhjNCwweDAwLDB4YjEsMHgxNCB9LAorICAxNiwgMHg5MDcwLCAwLCB7MHgyNCwweDQwLDB4MGIsMHgxMCwweDUyLDB4YzQsMHgwMCwweGIxLDB4MjEsMHgyZCwweDQ4LDB4MGEsMHg1MiwweDAyLDB4ZDUsMHgwMCB9LAorICAxNiwgMHg5MDgwLCAwLCB7MHhiZCwweDAwLDB4YWQsMHg0MCwweDBiLDB4NTIsMHgwMiwweGQyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MDkwLCAwLCB7MHgxOCwweDU1LDB4YTUsMHgwMCwweGI5LDB4ODIsMHgyZSwweDQ5LDB4OGIsMHhiMCwweDEyLDB4MjQsMHgxMCwweDk5LDB4MDIsMHgyZSB9LAorICAxNiwgMHg5MGEwLCAwLCB7MHg0MCwweDA4LDB4YjIsMHgwMCwweDY1LDB4MDAsMHg5OSwweDgwLDB4MjYsMHg0NCwweDA5LDB4OTEsMHgwMiwweGU0LDB4MDksMHhhOSB9LAorICAxNiwgMHg5MGIwLCAwLCB7MHgwNCwweDJlLDB4NDYsMHgwYSwweGQ0LDB4MDIsMHhiNCwweDAwLDB4YmQsMHg0MCwweDJmLDB4NDAsMHgwYiwweGQwLDB4MDIsMHhjNiB9LAorICAxNiwgMHg5MGMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU3LDB4NDAsMHhmOSwweDgwLDB4MmUsMHg2MiB9LAorICAxNiwgMHg5MGQwLCAwLCB7MHgwZiwweDljLDB4NDIsMHgyNCwweDAwLDB4OTksMHgwMSwweDJlLDB4NjgsMHgyYywweDkyLDB4MDIsMHg2NCwweDAwLDB4YjksMHg0MCB9LAorICAxNiwgMHg5MGUwLCAwLCB7MHhiNiwweDYwLDB4MGYsMHg5YSwweDAzLDB4ZTQsMHgwMCwweGI5LDB4MDAsMHgyZSwweDcwLDB4M2UsMHg5OSwweDA2LDB4ZTQsMHgwMiB9LAorICAxNiwgMHg5MGYwLCAwLCB7MHhmOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTgsMHgwMywweGU4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MTAwLCAwLCB7MHg2OCwweDAxLDB4YTYsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MWYsMHgxMiwweGFiLDB4ZTQsMHgwMCwweGU5LDB4OTAsMHgzZSB9LAorICAxNiwgMHg5MTEwLCAwLCB7MHg0OSwweDBlLDB4OTgsMHgwMywweGU0LDB4MDAsMHhmMSwweDAwLDB4M2EsMHg0MCwweDBkLDB4OTgsMHgwMywweGU0LDB4MDAsMHhmOSB9LAorICAxNiwgMHg5MTIwLCAwLCB7MHgwMSwweDNlLDB4NjAsMHgwNSwweDkwLDB4MTMsMHhlNCwweDAwLDB4NTksMHgyMCwweDMyLDB4NDAsMHg4ZiwweDkxLDB4MDMsMHhkYSB9LAorICAxNiwgMHg5MTMwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjgsMHgxMCwweGEwLDB4MDAsMHhjOCwweDA4LDB4M2UsMHgwMSB9LAorICAxNiwgMHg5MTQwLCAwLCB7MHgwZiwweDg0LDB4NjMsMHgwMCwweDIyLDB4ZTgsMHgyMCwweDNlLDB4MTMsMHgwZiwweDg0LDB4MDMsMHhlMSwweGMwLDB4ZDgsMHg0YyB9LAorICAxNiwgMHg5MTUwLCAwLCB7MHgzMiwweDAwLDB4MGMsMHg4NCwweDQzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgyMiwweDEwLDB4MGYsMHg4NCwweDAzLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MTYwLCAwLCB7MHhjOCwweDAwLDB4YjIsMHgwMCwweDBjLDB4YzAsMHgwMywweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MTcwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwMCwweDhlLDB4MDAsMHgyZiwweDg2LDB4NGIsMHhlMCwweDAyLDB4MzksMHgwOCwweDhlLDB4MjAsMHgyZCB9LAorICAxNiwgMHg5MTgwLCAwLCB7MHg5MCwweDBiLDB4ZWQsMHg5MiwweGY4LDB4MDIsMHg4ZSwweGUwLDB4YTMsMHg5OCwweDA4LDB4ZTAsMHgwMiwweGU4LDB4MDgsMHhiYSB9LAorICAxNiwgMHg5MTkwLCAwLCB7MHgwMCwweDYyLDB4ODAsMHgwOCwweGEwLDB4MDIsMHgyOCwweDAwLDB4MDIsMHg4MCwweDAyLDB4ODAsMHg0OCwweGUwLDB4MDMsMHg0YSB9LAorICAxNiwgMHg5MWEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjgsMHgwNSwweDRjLDB4MDAsMHg4MywweDEwLDB4MmMsMHhmMCB9LAorICAxNiwgMHg5MWIwLCAwLCB7MHgwYSwweDE0LDB4MmEsMHgwZCwweDFhLDB4YjMsMHgwMSwweDI0LDB4ZDAsMHgwYiwweGJjLDB4MzIsMHhjYywweDA4LDB4MDMsMHgwMCB9LAorICAxNiwgMHg5MWMwLCAwLCB7MHgyMCwweGM4LDB4MGIsMHgzMCwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDIsMHgyMiwweGMwLDB4MDksMHgzMCwweDAyLDB4MGMsMHgxMSB9LAorICAxNiwgMHg5MWQwLCAwLCB7MHg4MywweDAwLDB4MjAsMHhjMCwweDI4LDB4MjAsMHgwMiwweDBhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MWUwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwMSwweDg1LDB4MDAsMHgyZCwweDAwLDB4MGIsMHg3MCwweDAyLDB4MTgsMHgzMiwweDg2LDB4MDAsMHgyZCB9LAorICAxNiwgMHg5MWYwLCAwLCB7MHhjMCwweDBiLDB4NjAsMHgxNiwweGZlLDB4MDQsMHg4NiwweDAwLDB4MjcsMHhhMCwweDhiLDB4NzAsMHg0MiwweGRjLDB4ODAsMHhiNyB9LAorICAxNiwgMHg5MjAwLCAwLCB7MHg4MCwweDIxLDB4MDEsMHgwOCwweGY4LDB4MGEsMHgxOCwweDAwLDB4ODYsMHgwOCwweDIwLDB4YTAsMHgwOCwweGU4LDB4MGEsMHg2OCB9LAorICAxNiwgMHg5MjEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwOCwweDNlLDB4MDIsMHhjNiwweDgwLDB4M2QsMHhlMCB9LAorICAxNiwgMHg5MjIwLCAwLCB7MHgwZiwweDQ4LDB4MDMsMHgwNiwweDA0LDB4ZjUsMHg4MiwweDM1LDB4ZTAsMHgwZiwweDc4LDB4MDMsMHhkYSwweDAwLDB4ZDMsMHg4MCB9LAorICAxNiwgMHg5MjMwLCAwLCB7MHgzMSwweDYwLDB4MDcsMHg3OCwweDAzLDB4ZGUsMHgyMCwweGYzLDB4YjAsMHg4MSwweGUwLDB4NGYsMHg2OCwweDA3LDB4MGUsMHgwMiB9LAorICAxNiwgMHg5MjQwLCAwLCB7MHhjZiwweDgwLDB4MzEsMHhlMCwweDBjLDB4NzgsMHgxMywweDJhLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MjUwLCAwLCB7MHgwOCwweDFkLDB4YWQsMHhhMCwweGY5LDB4MDAsMHgzZiwweDAwLDB4MGYsMHhiMCwweDUzLDB4ZjgsMHgxMCwweGE5LDB4MDAsMHgzZSB9LAorICAxNiwgMHg5MjYwLCAwLCB7MHgwMCwweDBmLDB4ODAsMHgwMSwweGVjLDB4MDAsMHhmYiwweDAyLDB4M2EsMHhjMCwweDBjLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmYiB9LAorICAxNiwgMHg5MjcwLCAwLCB7MHg3NCwweDNjLDB4MDAsMHgwZiwweDIwLDB4MDMsMHhlOCwweDAwLDB4ZmEsMHgwMCwweDNlLDB4ODAsMHgwZiwweDMwLDB4MDMsMHhjMiB9LAorICAxNiwgMHg5MjgwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNSwweGZlLDB4MDIsMHg4ZiwweDgwLDB4MzUsMHhlMCB9LAorICAxNiwgMHg5MjkwLCAwLCB7MHg4ZCwweGQ5LDB4MDMsMHgyZSwweGM0LDB4ZjYsMHg4MCwweDMyLDB4YTQsMHgwYywweGI4LDB4MDMsMHhkZSwweDAwLDB4Y2YsMHg5MCB9LAorICAxNiwgMHg5MmEwLCAwLCB7MHgzYywweGU0LDB4MGMsMHhiOCwweDAzLDB4ZmUsMHg2NSwweGZmLDB4ODAsMHgwZiwweGVjLDB4OGYsMHhmOCwweDAzLDB4ZmUsMHgwMCB9LAorICAxNiwgMHg5MmIwLCAwLCB7MHhjNSwweDgwLDB4MzMsMHhlMCwweDBmLDB4NjgsMHgwMywweDEwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MmMwLCAwLCB7MHhhYSwweDExLDB4OWMsMHg4MCwweDg0LDB4YjAsMHgyMCwweDIwLDB4MjksMHg3MywweDBhLDB4MGUsMHg4MiwweGEyLDB4YTAsMHhhMiB9LAorICAxNiwgMHg5MmQwLCAwLCB7MHhhMCwweDRmLDB4M2IsMHgwMywweDg3LDB4ODQsMHhiMiwweDgwLDB4MmMsMHhhMCwweDBhLDB4N2QsMHgwMiwweGRlLDB4ODAsMHhmNyB9LAorICAxNiwgMHg5MmUwLCAwLCB7MHgyMCwweDI1LDB4MDYsMHgwOCwweDcwLDB4MDIsMHhjOCwweDQwLDB4ODQsMHgwMCwweDM1LDB4ODAsMHgwYiwweDYwLDB4MDMsMHg2YSB9LAorICAxNiwgMHg5MmYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4MTAsMHg4NiwweDM4LDB4MjcsMHhjMCB9LAorICAxNiwgMHg5MzAwLCAwLCB7MHg0OSwweDU0LDB4MDYsMHg1NCwweDQwLDB4MWQsMHgyMCwweDIxLDB4Y2EsMHgwOSwweDYxLDB4NDAsMHhmOCwweDgwLDB4YjcsMHgyMCB9LAorICAxNiwgMHg5MzEwLCAwLCB7MHgyZiwweDAwLDB4ODksMHg3MCwweDEyLDB4ZGMsMHg4MSwweGI3LDB4MDQsMHgyZCwweGM5LDB4MGEsMHg2MCwweDAyLDB4Y2MsMHgwMCB9LAorICAxNiwgMHg5MzIwLCAwLCB7MHg4ZCwweDAwLDB4MmQsMHhjMCwweDBiLDB4ZjgsMHgwMiwweDA0LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MzMwLCAwLCB7MHg2MCwweDE0LDB4Y2QsMHgyOCwweDgwLDB4MDAsMHgyNCwweDAwLDB4MDksMHhiMCwweDIyLDB4NGMsMHgwMiwweGExLDB4MDEsMHgyMCB9LAorICAxNiwgMHg5MzQwLCAwLCB7MHgzMCwweDFiLDB4MjMsMHgwMiwweGFmLDB4MjAsMHhiMywweDA4LDB4MmMsMHg4MCwweDFiLDB4MzAsMHgwMCwweGNjLDB4MDQsMHhhMyB9LAorICAxNiwgMHg5MzUwLCAwLCB7MHgwMSwweDI2LDB4MzAsMHgwOCwweGFjLDB4MjIsMHhlOCwweDAyLDB4ODAsMHgwOCwweDJlLDB4ODAsMHg0YiwweGI0LDB4MDIsMHg1OCB9LAorICAxNiwgMHg5MzYwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGJjLDB4MTAsMHg4YiwweDgwLDB4MzYsMHhmMCB9LAorICAxNiwgMHg5MzcwLCAwLCB7MHgyZCwweGJjLDB4MGIsMHg2YywweDAxLDB4ZGEsMHgwNCwweDIyLDB4NDAsMHg3ZCwweDk0LDB4MjIsMHhlNCwweDAwLDB4YWIsMHg0NCB9LAorICAxNiwgMHg5MzgwLCAwLCB7MHgyZSwweGMwLDB4MDksMHhiOCwweDAyLDB4ZmMsMHgwMCwweGJmLDB4MDAsMHgzZSwweGYwLDB4Y2EsMHg5MiwweDAyLDB4ZTQsMHgwMiB9LAorICAxNiwgMHg5MzkwLCAwLCB7MHhjYiwweDAwLDB4NmUsMHg0MCwweDBmLDB4ODQsMHgwMSwweDJlLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5M2EwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGZiLDB4MDAsMHgzYSwweGUwLDB4MmUsMHhiYywweDAzLDB4OTgsMHgwOCwweGVhLDB4NDAsMHgzNiB9LAorICAxNiwgMHg5M2IwLCAwLCB7MHg0MywweDhjLDB4OTAsMHgwMywweGE0LDB4NDQsMHgyYSwweDQwLDB4M2UsMHgxMCwweDBlLDB4YjUsMHg4MywweGVjLDB4MTQsMHhmYiB9LAorICAxNiwgMHg5M2MwLCAwLCB7MHgwMCwweDI2LDB4MDAsMHgwZSwweDkyLDB4MDMsMHhlMCwweDQwLDB4ZmEsMHgwMCwweDE2LDB4MDAsMHgwZiwweDgwLDB4MTMsMHhlMCB9LAorICAxNiwgMHg5M2QwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGVjLDB4MDIsMHhmYSwweDgwLDB4M2YsMHhlMiB9LAorICAxNiwgMHg5M2UwLCAwLCB7MHgwZiwweGIwLDB4MGIsMHgyNCwweDAwLDB4ZWYsMHg5MiwweGJiLDB4ZTAsMHgxYywweGQwLDB4MDMsMHg3NCwweDAwLDB4Y2YsMHgwNSB9LAorICAxNiwgMHg5M2YwLCAwLCB7MHgzYiwweDQwLDB4MGYsMHhjOCwweDAzLDB4NWMsMHgwMCwweGNmLDB4MDAsMHgzMiwweGMyLDB4NGQsMHhjMSwweDIzLDB4MzQsMHg0MCB9LAorICAxNiwgMHg5NDAwLCAwLCB7MHhjZiwweDAwLDB4MTcsMHg0NCwweDBjLDB4ZDEsMHg4MywweDAwLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NDEwLCAwLCB7MHg4MSwweDA0LDB4NmMsMHgwMCwweDhiLDB4ODQsMHgyZSwweDU0LDB4MGIsMHhiYywweDBhLDB4MjksMHg4MCwweDhiLDB4ODAsMHgzMiB9LAorICAxNiwgMHg5NDIwLCAwLCB7MHgwMCwweDA4LDB4OWMsMHgwMywweGE3LDB4MDAsMHhhYiwweDg0LDB4MmUsMHg3YywweDBiLDB4ODAsMHgwMiwweDJjLDB4MTAsMHhkYiB9LAorICAxNiwgMHg5NDMwLCAwLCB7MHgwMSwweDM2LDB4MDAsMHgwOCwweDgwLDB4MDIsMHgyMCwweDAwLDB4ODIsMHgwMCwweDIyLDB4MDAsMHgwOCwweDkwLDB4MDIsMHgyNCB9LAorICAxNiwgMHg5NDQwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDBjLDB4MDAsMHg4OSwweDEwLDB4NjYsMHg5MCB9LAorICAxNiwgMHg5NDUwLCAwLCB7MHgwYiwweGI4LDB4MDIsMHg2ZSwweDEyLDB4YTMsMHg0MSwweDIwLDB4MDQsMHgwYSwweDk4LDB4MjIsMHhlMiwweDAwLDB4ODksMHgxOSB9LAorICAxNiwgMHg5NDYwLCAwLCB7MHgyZSwweGMwLDB4NGIsMHgzMSwweDIyLDB4NmMsMHgwOCwweDgzLDB4MDAsMHgyMiwweGMwLDB4MDksMHg5MCwweDAyLDB4MjQsMHgwMCB9LAorICAxNiwgMHg5NDcwLCAwLCB7MHg4OSwweDAwLDB4MmEsMHg0MCwweDA4LDB4ODAsMHgwMiwweDIwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NDgwLCAwLCB7MHgwOCwweDEwLDB4MGMsMHgwMCwweDgwLDB4MjAsMHgyYywweDBlLDB4MWIsMHgzMCwweDAyLDB4MDQsMHg0MSwweDgwLDB4MjAsMHgyMCB9LAorICAxNiwgMHg5NDkwLCAwLCB7MHgxMiwweDE4LDB4MTYsMHg0MiwweDAwLDB4NTAsMHhhMCwweDQwLDB4MmMsMHg4OCwweDFiLDB4MzAsMHgwMiwweDBjLDB4ODEsMHg5MyB9LAorICAxNiwgMHg5NGEwLCAwLCB7MHgwMCwweDI0LDB4MDAsMHgwOCwweDEwLDB4MmEsMHgwMCwweDBhLDB4ODgsMHgwMCwweDI4LDB4MDAsMHgyOCwweDAwLDB4MGEsMHgwMiB9LAorICAxNiwgMHg5NGIwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYywweDdjLDB4MTEsMHhlOCwweDAwLDB4MjYsMHg5OCB9LAorICAxNiwgMHg5NGMwLCAwLCB7MHgwZiwweGIwLDB4MTMsMHgyMSwweDBjLDB4ZWIsMHg2MCwweDNhLDB4ZDgsMHgyOCwweDg0LDB4YTIsMHhlMSwweDgwLDB4YzgsMHgyMCB9LAorICAxNiwgMHg5NGQwLCAwLCB7MHgzZSwweDVlLDB4MWYsMHg4MiwweDAzLDB4N2MsMHgwMCwweGNmLDB4MDAsMHgzMiwweGMwLDB4NGQsMHg4MCwweDA3LDB4MjUsMHgwMCB9LAorICAxNiwgMHg5NGUwLCAwLCB7MHhjOSwweDAwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweDAwLDB4MDEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NGYwLCAwLCB7MHhhMSwweDExLDB4ZmMsMHgwMCwweGY4LDB4MTMsMHgxZSwweDAwLDB4MGIsMHhmMCwweDAxLDB4ZjAsMHhkMCwweGY5LDB4MTksMHgxZiB9LAorICAxNiwgMHg5NTAwLCAwLCB7MHgwOCwweDRmLDB4YzAsMHgxMywweGExLDB4MDAsMHhmOCwweDYyLDB4M2YsMHhjMCwweDBiLDB4YzQsMHgwNywweGVkLDB4MDAsMHhmZiB9LAorICAxNiwgMHg5NTEwLCAwLCB7MHgwMCwweDNmLDB4MDAsMHgwZiwweGMwLDB4MjMsMHhmMCwweGEwLDB4ZmMsMHgwMCwweDMzLDB4MDAsMHgwZiwweGQwLDB4MDMsMHhlOCB9LAorICAxNiwgMHg5NTIwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZjLDB4MDAsMHhmZiwweDBjLDB4M2YsMHgyMCB9LAorICAxNiwgMHg5NTMwLCAwLCB7MHgwYywweGM5LDB4MDMsMHgzMiwweDAwLDB4Y2YsMHgzOCwweDNmLDB4ZDAsMHgwZiwweDQ4LDB4MDMsMHhmYywweGEwLDB4Y2UsMHgyMiB9LAorICAxNiwgMHg5NTQwLCAwLCB7MHgzMywweDAwLDB4MGYsMHhjMSwweDAzLDB4M2MsMHgwMCwweGZmLDB4MDAsMHgzZCwweGM0LDB4NGMsMHhjMCwweDIzLDB4OGMsMHhlNCB9LAorICAxNiwgMHg5NTUwLCAwLCB7MHhmZiwweDEwLDB4MzcsMHgyMCwweDA4LDB4ZjEsMHgwMywweGYwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NTYwLCAwLCB7MHg4MCwweDEwLDB4ZmUsMHgwMCwweGJmLDB4ODAsMHgyZSwweDc0LDB4MDUsMHgyMiwweDAyLDB4YTIsMHgxMCwweGRmLDB4NjEsMHgyZiB9LAorICAxNiwgMHg5NTcwLCAwLCB7MHhkMCwweDhiLDB4OTAsMHgwMiwweDNkLDB4YTQsMHhhYSwweDkwLDB4MjIsMHhmNCwweDBiLDB4MDcsMHgxMiwweDFkLDB4MjAsMHhiYiB9LAorICAxNiwgMHg5NTgwLCAwLCB7MHhjMCwweDJmLDB4ZDgsMHg4OCwweDk3LDB4ODIsMHhmZCwweDgwLDB4ZWYsMHg3MiwweDIyLDB4MDgsMHgyOCwweGY2LDB4MjMsMHhlMCB9LAorICAxNiwgMHg5NTkwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4NDAsMHhiMywweDAwLDB4MmMsMHgwMCB9LAorICAxNiwgMHg5NWEwLCAwLCB7MHgwOCwweDgyLDB4MDIsMHgyMiwweDAwLDB4ODMsMHgwMSwweDA4LDB4Y2MsMHg4YiwweDIwLDB4ODIsMHhjYywweDAwLDB4OTAsMHgwMCB9LAorICAxNiwgMHg5NWIwLCAwLCB7MHgyMCwweDAwLDB4NGIsMHgxMiwweDAyLDB4MGQsMHg4MCwweGIzLDB4NDAsMHgyYywweGQ4LDB4MDgsMHgyMCwweDQyLDB4OGMsMHg4MCB9LAorICAxNiwgMHg5NWMwLCAwLCB7MHhiMywweDIwLDB4MjYsMHgwMiwweDE4LDB4MzMsMHgyNiwweGUyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NWQwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHgwOSwweGJiLDB4MDAsMHgyZSwweDYwLDB4MDgsMHg4MCwweDAyLDB4YTIsMHgwMCwweDliLDB4MDAsMHgyZSB9LAorICAxNiwgMHg5NWUwLCAwLCB7MHhjMCwweDBiLDB4YWMsMHgwMiwweDJjLDB4MDAsMHhiYSwweDA2LDB4MjIsMHhjMiwweDBiLDB4OTQsMHgwMiwweGFjLDB4MTAsMHhiYiB9LAorICAxNiwgMHg5NWYwLCAwLCB7MHgwMCwweDJlLDB4YzEsMHgwOCwweGE4LDB4MDIsMHhlYywweDAwLDB4YWIsMHgwMCwweDIyLDB4MDAsMHgwOCwweGIwLDB4MDYsMHhmMCB9LAorICAxNiwgMHg5NjAwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTAsMHgxNSwweGVjLDB4MDAsMHhmYiwweDA0LDB4M2UsMHg2MCB9LAorICAxNiwgMHg5NjEwLCAwLCB7MHgyOCwweDgyLDB4MTMsMHgwZSwweDA4LDB4Y2IsMHgwMCwweDNhLDB4YzAsMHgwZiwweDhjLDB4MDMsMHhlYywweDExLDB4ZGIsMHgyMCB9LAorICAxNiwgMHg5NjIwLCAwLCB7MHhiMiwweDkwLDB4NGIsMHhhOCwweDBiLDB4MmMsMHgwMCwweGJiLDB4MDAsMHgyYywweGMwLDB4MGMsMHg4OCwweDEzLDB4YWMsMHgwMCB9LAorICAxNiwgMHg5NjMwLCAwLCB7MHhmMywweDAwLDB4MzYsMHgwNiwweDQ4LDB4YjAsMHgxMiwweGM0LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NjQwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwMCwweGZiLDB4MDgsMHgzZCwweDQwLDB4OGYsMHhlYSwweDAxLDB4ZjQsMHgwMCwweGZmLDB4MDEsMHgyZiB9LAorICAxNiwgMHg5NjUwLCAwLCB7MHhjMCwweDBmLDB4ZDAsMHgyMiwweGZjLDB4MDQsMHhhZiwweDAwLDB4M2YsMHhjMCwweDhmLDB4ZTksMHgwMywweDdjLDB4MDAsMHhmZiB9LAorICAxNiwgMHg5NjYwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHgwZiwweDkwLDB4NDMsMHhmYywweDIwLDB4ZWYsMHgwMiwweDNmLDB4MDAsMHg4ZiwweGYwLDB4MDMsMHhiOCB9LAorICAxNiwgMHg5NjcwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NTAsMHgxMCwweGFjLDB4MDgsMHhlYiwweDAwLDB4MTIsMHg0MCB9LAorICAxNiwgMHg5NjgwLCAwLCB7MHgwZiwweDkwLDB4MDMsMHgyOCwweDIwLDB4YWIsMHgwMCwweDNhLDB4YzAsMHg4ZiwweDg1LDB4ODMsMHhhYywweDEwLDB4ZjMsMHg1MCB9LAorICAxNiwgMHg5NjkwLCAwLCB7MHgzMiwweDkwLDB4NGMsMHgzNCwweDEzLDB4NmMsMHgwMCwweGZiLDB4MDAsMHgzZSwweGMwLDB4MGMsMHg5OCwweDAzLDB4MmMsMHg0MCB9LAorICAxNiwgMHg5NmEwLCAwLCB7MHhlYiwweDgwLDB4MzIsMHgxMiwweDBkLDB4YjAsMHgwYiwweDUwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NmIwLCAwLCB7MHg4OCwweDAxLDB4M2MsMHgxMCwweDBmLDB4MDUsMHhhMiwweDUwLDB4MGMsMHgxMCwweDAyLDB4MjIsMHgxMCwweDhmLDB4MDAsMHgyMyB9LAorICAxNiwgMHg5NmMwLCAwLCB7MHhjMCwweDBiLDB4ODgsMHgxMiwweDNjLDB4MDAsMHg5YiwweDgyLDB4MjIsMHhjMCwweDA4LDB4YjAsMHgwMiwweDNjLDB4MDAsMHg4ZiB9LAorICAxNiwgMHg5NmQwLCAwLCB7MHhhMCwweDJmLDB4YzAsMHgwOCwweGIwLDB4MDIsMHgzYywweDA4LDB4OGYsMHgwMiwweDIwLDB4MDAsMHgwOCwweGYwLDB4MDMsMHgyNiB9LAorICAxNiwgMHg5NmUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRkLDB4MjAsMHg5MywweDAwLDB4MjAsMHhiMiB9LAorICAxNiwgMHg5NmYwLCAwLCB7MHgwYiwweDEwLDB4MDIsMHgwMSwweDAwLDB4YTMsMHgwMCwweDY4LDB4YzAsMHgwYiwweDg0LDB4MDIsMHhhYywweDAwLDB4YjMsMHg4MCB9LAorICAxNiwgMHg5NzAwLCAwLCB7MHgyMCwweDQwLDB4MGEsMHgzMCwweDAyLDB4NGMsMHgwMCwweGEzLDB4MDQsMHgyYywweGMwLDB4MDgsMHgwMCwweDAyLDB4MGQsMHgwMCB9LAorICAxNiwgMHg5NzEwLCAwLCB7MHhhMywweDAwLDB4MjAsMHgyNCwweDA4LDB4MzAsMHgwMiwweDM4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NzIwLCAwLCB7MHg3MCwweDAxLDB4MWMsMHgyMCwweDk3LDB4ODAsMHgyMywweDYwLDB4MDgsMHg3OCwweDEyLDB4M2EsMHgwMCwweDgzLDB4OTEsMHgyOSB9LAorICAxNiwgMHg5NzMwLCAwLCB7MHhlNCwweDBiLDB4NTksMHgwMiwweDFlLDB4MDAsMHg5NywweDkwLDB4MjAsMHhmYywweDBhLDB4NzgsMHgwMiwweDFlLDB4MDAsMHg4NyB9LAorICAxNiwgMHg5NzQwLCAwLCB7MHg5MCwweDJkLDB4ZTAsMHgxOSwweDU5LDB4MDIsMHgxZSwweDgwLDB4ODMsMHg4MCwweDYxLDB4YTAsMHgwOCwweDc4LDB4MDIsMHgxOCB9LAorICAxNiwgMHg5NzUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4NDAsMHhkMywweDMyLDB4MzAsMHgwNiB9LAorICAxNiwgMHg5NzYwLCAwLCB7MHgwZiwweDMwLDB4MDMsMHgwNCwweDY0LDB4ZTMsMHgwMSwweDM4LDB4YzQsMHgxZiwweDMwLDB4MDcsMHg4YywweDE4LDB4ZjEsMHgwMCB9LAorICAxNiwgMHg5NzcwLCAwLCB7MHgzMCwweDRjLDB4MGUsMHgzMCwweDAzLDB4NGMsMHgwMCwweGUzLDB4MDAsMHgyYywweGMwLDB4MGMsMHgyMCwweDAzLDB4MGUsMHgwMCB9LAorICAxNiwgMHg5NzgwLCAwLCB7MHhlMywweDAwLDB4MzIsMHgwOCwweDBjLDB4YjEsMHgwMywweDEyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NzkwLCAwLCB7MHg0MCwweDFkLDB4OWMsMHg4MCwweGVmLDB4MTAsMHgzZCwweDQ0LDB4NGYsMHhmMSwweDA3LDB4Y2MsMHgwMCwweGZmLDB4MDgsMHgzNiB9LAorICAxNiwgMHg5N2EwLCAwLCB7MHhjNiwweGNmLDB4YjAsMHgwMywweGZjLDB4MDAsMHg5NywweDAwLDB4YmUsMHhjYywweDBkLDB4YjEsMHgwMywweGZkLDB4MDQsMHhmZiB9LAorICAxNiwgMHg5N2IwLCAwLCB7MHgwYywweDNmLDB4ZDIsMHg5ZSwweGUwLDB4NGIsMHhmZCwweDIwLDB4ZmYsMHgwMiwweDNmLDB4ODAsMHgwZSwweGYwLDB4MTMsMHhkMCB9LAorICAxNiwgMHg5N2MwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGVjLDB4YzAsMHhjYiwweDI4LDB4M2UsMHhjMCB9LAorICAxNiwgMHg5N2QwLCAwLCB7MHgwZiwweDgwLDB4MDMsMHhlYywweDAwLDB4ZmIsMHgwMSwweDMyLDB4ZTksMHgwYywweDI4LDB4MDMsMHgyYywweDAwLDB4ZmIsMHgwMCB9LAorICAxNiwgMHg5N2UwLCAwLCB7MHgzMiwweGMwLDB4MGMsMHhiNCwweDgzLDB4MmMsMHgwMSwweGVmLDB4MDAsMHhiMiwweGM4LDB4MGMsMHgyMCwweDAzLDB4NmQsMHgwMCB9LAorICAxNiwgMHg5N2YwLCAwLCB7MHhjYiwweDEwLDB4M2UsMHgwMCwweDBmLDB4YjIsMHgwMywweGVhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ODAwLCAwLCB7MHhjOCwweDkxLDB4OWMsMHhjNCwweDg3LDB4NjAsMHgyZCwweGMwLDB4MGIsMHg2MCwweDAyLDB4ZGMsMHgwMCwweGI3LDB4MTIsMHgyMCB9LAorICAxNiwgMHg5ODEwLCAwLCB7MHhjYywweDBhLDB4NzAsMHgwMiwweDFjLDB4YzAsMHhiMywweDAwLDB4YTAsMHhjMCwweGM4LDB4NzAsMHgyMiwweDFjLDB4ODAsMHhiNyB9LAorICAxNiwgMHg5ODIwLCAwLCB7MHgyNCwweDIxLDB4YzgsMHg0OCwweDUwLDB4MDIsMHgwYywweDgwLDB4ODcsMHgxMCwweDJkLDB4NDAsMHgwYiwweDcyLDB4ODIsMHhmMiB9LAorICAxNiwgMHg5ODMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODEsMHgwMCwweDhlLDB4MDIsMHg4NywweDgwLDB4MmQsMHhlMCB9LAorICAxNiwgMHg5ODQwLCAwLCB7MHgwYiwweDc4LDB4MTIsMHhkZSwweDAwLDB4YjcsMHhhMCwweDIxLDB4ZTAsMHgwOCwweGY4LDB4OGUsMHgxZSwweDQwLDB4YjcsMHg4OCB9LAorICAxNiwgMHg5ODUwLCAwLCB7MHgyMSwweGUwLDB4MDgsMHgzOCwweDAyLDB4MWUsMHg0MCwweGIzLDB4YTEsMHgyMCwweGU4LDB4NDgsMHhmOCwweDgyLDB4NWUsMHgwMiB9LAorICAxNiwgMHg5ODYwLCAwLCB7MHg4NywweDgwLDB4MmQsMHgyMiwweDBiLDB4NzksMHgwMiwweGUwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ODcwLCAwLCB7MHgwOCwweDA0LDB4Y2MsMHgwNCwweDgzLDB4MDIsMHgyYywweGQ0LDB4MGIsMHgzMCwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDAsMHhhMCB9LAorICAxNiwgMHg5ODgwLCAwLCB7MHhjMCwweDhhLDB4MzgsMHgwNiwweDBjLDB4MDAsMHhiMywweDgwLDB4MjAsMHhlMSwweDQ4LDB4MzksMHgxMiwweDJjLDB4MDAsMHhiMyB9LAorICAxNiwgMHg5ODkwLCAwLCB7MHgwMCwweDIyLDB4YzAsMHgwOCwweGIwLDB4ODIsMHg2YywweDAwLDB4ODMsMHgwMCwweDJjLDB4NDgsMHgwYiwweDMwLDB4MDIsMHhjMiB9LAorICAxNiwgMHg5OGEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgwNSwweGE4LDB4MDAsMHhjYSwweDAwLDB4M2YsMHhhMCB9LAorICAxNiwgMHg5OGIwLCAwLCB7MHgwZiwweGU0LDB4MDMsMHhkOCwweDAwLDB4ZmEsMHgwMCwweDMyLDB4ODAsMHgwYywweGU4LDB4MDMsMHgyOCwweDAwLDB4ZmEsMHg0MCB9LAorICAxNiwgMHg5OGMwLCAwLCB7MHgzMiwweGE4LDB4MmMsMHhhMCwweDA5LDB4MjgsMHgwOCwweGYyLDB4MDAsMHgzMiwweDgwLDB4MGMsMHhlNCwweDAzLDB4NjgsMHgwMCB9LAorICAxNiwgMHg5OGQwLCAwLCB7MHhjYSwweDAwLDB4M2YsMHg4MCwweDBmLDB4YTAsMHgwMywweGZiLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5OGUwLCAwLCB7MHg0OCwweDAwLDB4YzAsMHgwMCwweGY4LDB4MDEsMHgzZSwweDEyLDB4MGIsMHg4MCwweDAzLDB4ZTAsMHg0MCwweGY4LDB4MDAsMHgzZSB9LAorICAxNiwgMHg5OGYwLCAwLCB7MHgwMCwweDRmLDB4ODQsMHgwMywweGUwLDB4MDQsMHhmMCwweDA4LDB4M2UsMHgwMCwweDRmLDB4MDAsMHgwMywweGUwLDB4MDAsMHhmOCB9LAorICAxNiwgMHg5OTAwLCAwLCB7MHg0MSwweDNlLDB4MDAsMHgyZiwweDg0LDB4MDMsMHhhMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiB9LAorICAxNiwgMHg5OTEwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGU2LDB4MDAsMHhjOSwweDEyLDB4M2UsMHg1MCB9LAorICAxNiwgMHg5OTIwLCAwLCB7MHg4ZiwweDkwLDB4ODMsMHhlNCwweDIwLDB4YzEsMHgwMCwweDNhLDB4NDEsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCB9LAorICAxNiwgMHg5OTMwLCAwLCB7MHgzMCwweDY4LDB4MGMsMHg5MCwweDAzLDB4MjQsMHgwMCwweGQ5LDB4MDAsMHgzYSwweDQwLDB4MGUsMHg5OCwweDAzLDB4MjQsMHgwMCB9LAorICAxNiwgMHg5OTQwLCAwLCB7MHhjOSwweDkwLDB4M2UsMHg2OSwweDBjLDB4MTAsMHgwMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5OTUwLCAwLCB7MHg4MCwweDA0LDB4NjcsMHg0YSwweDg5LDB4ODAsMHgyZSwweDUwLDB4MGIsMHg5MCwweDAyLDB4ZTQsMHg4MCwweGE5LDB4MDAsMHgyMiB9LAorICAxNiwgMHg5OTYwLCAwLCB7MHg0MCwweDBiLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiOSwweDAxLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MTAsMHg4OSB9LAorICAxNiwgMHg5OTcwLCAwLCB7MHgwMCwweDIyLDB4NDAsMHgwOCwweDkzLDB4MDIsMHgyNCwweDIyLDB4ODksMHg0MiwweDJjLDB4NjAsMHg0OCwweDkwLDB4MDIsMHgyMCB9LAorICAxNiwgMHg5OTgwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgxNSwweDI0LDB4MDAsMHg5OSwweDAwLDB4MmUsMHg0MCB9LAorICAxNiwgMHg5OTkwLCAwLCB7MHgwYiwweDkwLDB4MDIsMHhlNCwweDAwLDB4ODksMHgwMCwweDJhLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhlNCwweDAwLDB4YjksMHgwMCB9LAorICAxNiwgMHg5OWEwLCAwLCB7MHgyMywweDQwLDB4MDgsMHhkMCwweDAyLDB4MjQsMHgwMCwweDk5LDB4MDAsMHgyYSwweDQwLDB4MGEsMHg5MCwweDA2LDB4MjQsMHg0MCB9LAorICAxNiwgMHg5OWIwLCAwLCB7MHg4OSwweDQxLDB4MmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5OWMwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHg4MCwweDkxLDB4MjAsMHgyYywweDQ4LDB4MGIsMHgxMCwweDAyLDB4YzQsMHgwMCwweGExLDB4MjAsMHgyMCB9LAorICAxNiwgMHg5OWQwLCAwLCB7MHg0OCwweDBiLDB4MTAsMHgwMiwweGM0LDB4ODAsMHhiMSwweDIwLDB4YTEsMHg0OSwweDA4LDB4NTIsMHg0YSwweDA0LDB4ODAsMHg4MSB9LAorICAxNiwgMHg5OWUwLCAwLCB7MHgwMCwweDIwLDB4NDgsMHg0OCwweDEyLDB4MGEsMHgwNCwweDgwLDB4ODEsMHgyMCwweDJjLDB4NDAsMHgyOCwweDEyLDB4MDIsMHgwMiB9LAorICAxNiwgMHg5OWYwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDgsMHhkOCwweDA0LDB4M2UsMHg4MCB9LAorICAxNiwgMHg5YTAwLCAwLCB7MHgwZiwweDg1LDB4MDMsMHhlMCwweDAwLDB4YzAsMHg1MCwweDNhLDB4MTQsMHgwZiwweGE1LDB4MDMsMHhlMSwweDQwLDB4ZjgsMHgwMiB9LAorICAxNiwgMHg5YTEwLCAwLCB7MHgzMiwweDgwLDB4MmMsMHhjNSwweDAzLDB4MjEsMHg0MCwweGRhLDB4MDAsMHgzYSwweDE0LDB4MGUsMHg4NSwweDQzLDB4MjEsMHg0MCB9LAorICAxNiwgMHg5YTIwLCAwLCB7MHhjOCwweDUyLDB4M2UsMHgxNCwweDBjLDB4ODUsMHgwYiwweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5YTMwLCAwLCB7MHg4OCwweDFkLDB4ZTQsMHg0NCwweGU5LDB4MTAsMHgzZiwweDQ0LDB4NGYsMHhkMCwweDAyLDB4ZmMsMHgwMCwweGY5LDB4MTIsMHgzZSB9LAorICAxNiwgMHg5YTQwLCAwLCB7MHg0NCwweDBmLDB4ZDAsMHgwMywweGU0LDB4NDAsMHhmZCwweDEwLDB4M2UsMHg0NCwweDRmLDB4OTEsMHgwMywweGU0LDB4NDAsMHhlOSB9LAorICAxNiwgMHg5YTUwLCAwLCB7MHg0MCwweDNlLDB4NDQsMHgwZiwweGQxLDB4MDMsMHhlNCwweDQwLDB4ZjksMHgxMiwweDNmLDB4NDAsMHgwZiwweDkxLDB4MDMsMHhlNiB9LAorICAxNiwgMHg5YTYwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGY2LDB4YTAsMHhmZCwweDgwLDB4YjMsMHg0MCB9LAorICAxNiwgMHg5YTcwLCAwLCB7MHgwYywweDEwLDB4MDMsMHgxNCwweDAwLDB4ZmQsMHhhMCwweDMyLDB4NDAsMHgwZiwweGQxLDB4MDMsMHhlNCwweDAwLDB4ZjUsMHg4NiB9LAorICAxNiwgMHg5YTgwLCAwLCB7MHgzMywweDYwLDB4MmMsMHg5YSwweDgzLDB4MjQsMHgwNCwweGZkLDB4YTgsMHgyMiwweDQwLDB4MGQsMHg1MCwweDQzLDB4ZjQsMHgwMCB9LAorICAxNiwgMHg5YTkwLCAwLCB7MHhmZCwweDAwLDB4MzMsMHg0MCwweDBmLDB4OTAsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5YWEwLCAwLCB7MHg3OCwweDEwLDB4ZTEsMHgwMCwweGI4LDB4MDAsMHgyMiwweDAwLDB4MjgsMHg4MCwweDAyLDB4MjAsMHgwMCwweGI4LDB4MDAsMHhhMiB9LAorICAxNiwgMHg5YWIwLCAwLCB7MHgwMCwweDBiLDB4OGEsMHgxMiwweGUwLDB4MDAsMHhiOCwweDA0LDB4MjIsMHgxNCwweDA4LDB4ODQsMHgwMiwweDIwLDB4MDAsMHhiOCB9LAorICAxNiwgMHg5YWMwLCAwLCB7MHg0MCwweDIwLDB4MDAsMHg4OCwweDgwLDB4MDIsMHhlMCwweDAwLDB4YjgsMHgwMCwweGEyLDB4MDAsMHgwYiwweDgwLDB4MDIsMHgwZSB9LAorICAxNiwgMHg5YWQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwNSwweGM0LDB4MDAsMHhiMSwweDQyLDB4MjAsMHg0MCB9LAorICAxNiwgMHg5YWUwLCAwLCB7MHgwOCwweDEwLDB4MDIsMHgwNCwweDAwLDB4YjEsMHg0MCwweDIwLDB4NDAsMHgwYiwweDEwLDB4MDYsMHhjNCwweDAwLDB4YjEsMHg0MCB9LAorICAxNiwgMHg5YWYwLCAwLCB7MHgyNCwweDQwLDB4MDgsMHgxMCwweDAyLDB4NDQsMHgwNCwweGIxLDB4MDAsMHg2MCwweDQwLDB4MDksMHgxMCwweDAyLDB4YzQsMHgwMCB9LAorICAxNiwgMHg5YjAwLCAwLCB7MHhiMSwweDAwLDB4MjAsMHg0MCwweDBiLDB4MTAsMHgwMiwweDEyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5YjEwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMCwweGI5LDB4MDIsMHgyMiwweDYwLDB4MDgsMHg5NCwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDEsMHgyMiB9LAorICAxNiwgMHg5YjIwLCAwLCB7MHg0MCwweDBiLDB4OTAsMHgwNiwweGU0LDB4MDAsMHhiOSwweDIwLDB4MjYsMHg0MCwweDA4LDB4OTQsMHgwMiwweDY0LDB4MDgsMHhiOSB9LAorICAxNiwgMHg5YjMwLCAwLCB7MHgwMCwweDIyLDB4NDAsMHgwOCwweDkyLDB4MDIsMHhlYywweDA4LDB4YjksMHgwNCwweDIyLDB4NDEsMHgwYiwweDEwLDB4MDIsMHgwNiB9LAorICAxNiwgMHg5YjQwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU0LDB4MTAsMHhmMSwweDAwLDB4MzIsMHg2MCB9LAorICAxNiwgMHg5YjUwLCAwLCB7MHgwYywweDk0LDB4MGIsMHgyNSwweDAwLDB4ZjksMHgwMCwweDMyLDB4NDAsMHg4ZiwweDk0LDB4ZDMsMHhlNCwweDAwLDB4ZjksMHgwMCB9LAorICAxNiwgMHg5YjYwLCAwLCB7MHgzNiwweDQwLDB4NGMsMHg5MCwweDBiLDB4NjQsMHgwMCwweGYxLDB4MDAsMHgzMiwweDQwLDB4MGQsMHg5MiwweDEyLDB4ZTQsMHgwMCB9LAorICAxNiwgMHg5YjcwLCAwLCB7MHhmOSwweDAwLDB4MzIsMHg0MCwweDBmLDB4OTAsMHgwYiwweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5YjgwLCAwLCB7MHg2OCwweDQxLDB4YTQsMHgwMCwweGY5LDB4MDAsMHgzYywweDQwLDB4OGYsMHg5MiwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSB9LAorICAxNiwgMHg5YjkwLCAwLCB7MHg0MCwweDBmLDB4OWMsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4YmEsMHg0MCwweDJmLDB4OTAsMHgyMywweGE0LDB4MDAsMHhmOSB9LAorICAxNiwgMHg5YmEwLCAwLCB7MHgwOCwweGJlLDB4NDAsMHhjZiwweDkwLDB4MDMsMHhlNCwweDEwLDB4ZjEsMHgwMSwweDNlLDB4NDEsMHgwZiwweDkwLDB4MDMsMHhkYSB9LAorICAxNiwgMHg5YmIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4YzgsMHhmOCwweDAwLDB4M2UsMHgwMyB9LAorICAxNiwgMHg5YmMwLCAwLCB7MHgwYywweDg0LDB4MDMsMHhhMSwweDEwLDB4ZTgsMHgwMCwweDMyLDB4MDAsMHg4YywweDg1LDB4ODMsMHhlMCwweDAwLDB4YzAsMHgwMCB9LAorICAxNiwgMHg5YmQwLCAwLCB7MHgzOCwweDBjLDB4MmMsMHgwMCwweDAzLDB4NjAsMHgwMCwweGM4LDB4MDAsMHgzYywweDAwLDB4MGQsMHg4MCwweDAyLDB4MjAsMHgxMCB9LAorICAxNiwgMHg5YmUwLCAwLCB7MHhjOCwweDIwLDB4YjIsMHgwMiwweDBmLDB4ODAsMHgwMywweGNhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5YmYwLCAwLCB7MHgyOCwweDA1LDB4MzksMHgxMCwweGJlLDB4MDQsMHg2ZiwweGEwLDB4MDgsMHhhMCwweDAyLDB4M2EsMHgwMCwweDgyLDB4MDAsMHhhMiB9LAorICAxNiwgMHg5YzAwLCAwLCB7MHg4MCwweDhkLDB4ZWMsMHgwMywweGE4LDB4MDAsMHg4YSwweDAwLDB4MjMsMHg4MCwweDA4LDB4YTAsMHgyMiwweDI4LDB4MDAsMHg4ZSB9LAorICAxNiwgMHg5YzEwLCAwLCB7MHhjYywweDJmLDB4ODAsMHgwOCwweGU4LDB4YzIsMHhiOCwweDAwLDB4OGUsMHg2MCwweDIzLDB4OTAsMHgwYiwweGEwLDB4MDIsMHhjYSB9LAorICAxNiwgMHg5YzIwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRlLDB4MDgsMHhiMCwweDcyLDB4MmMsMHhkMCB9LAorICAxNiwgMHg5YzMwLCAwLCB7MHgyOCwweGIwLDB4MDYsMHg4YywweDAxLDB4YTEsMHgwMiwweDIwLDB4YzAsMHgwOCwweDM4LDB4MDIsMHhjYywweDAwLDB4ODMsMHgwMCB9LAorICAxNiwgMHg5YzQwLCAwLCB7MHgyMCwweGMwLDB4MjksMHgzMCwweDAyLDB4NGMsMHgwMCwweDgxLDB4MDAsMHgyYywweGMwLDB4MDgsMHgzMiwweDAyLDB4MGMsMHg0MCB9LAorICAxNiwgMHg5YzUwLCAwLCB7MHg4MywweDAwLDB4MjAsMHhmNCwweDBiLDB4MzAsMHgwMiwweGNhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5YzYwLCAwLCB7MHhhMCwweDAxLDB4MWMsMHgwMCwweGI0LDB4MDAsMHgyZCwweGQwLDB4NDgsMHhmMiwweDAyLDB4MWUsMHgyMSwweDg1LDB4MjAsMHgyMCB9LAorICAxNiwgMHg5YzcwLCAwLCB7MHhlOCwweDA5LDB4NzIsMHgwMiwweDhlLDB4ODAsMHg4ZiwweDAxLDB4MjAsMHhjMCwweDA5LDB4NzIsMHgwMiwweDBlLDB4ODAsMHg4NyB9LAorICAxNiwgMHg5YzgwLCAwLCB7MHgwMCwweDJkLDB4Y2MsMHgxOCwweDU4LDB4MDIsMHg4ZSwweDAwLDB4ODUsMHgwMCwweDIxLDB4YzAsMHgwYiwweDcyLDB4MDIsMHhlOCB9LAorICAxNiwgMHg5YzkwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFlLDB4MDAsMHhiNCwweDgwLDB4MmQsMHhlMCB9LAorICAxNiwgMHg5Y2EwLCAwLCB7MHgwYywweDc4LDB4ODMsMHg5YSwweDAwLDB4ZWQsMHhkMCwweDMxLDB4ZjQsMHgwYywweDZhLDB4MDMsMHhkZSwweDgyLDB4YzcsMHg4MCB9LAorICAxNiwgMHg5Y2IwLCAwLCB7MHgzOSwweGUwLDB4MGQsMHhmOCwweDgzLDB4NWUsMHhjMiwweGM1LDB4ODAsMHgzZCwweGU4LDB4MGMsMHg2OCwweDAzLDB4MTIsMHgwMCB9LAorICAxNiwgMHg5Y2MwLCAwLCB7MHhjZiwweDgwLDB4MzEsMHhlMCwweDBmLDB4N2UsMHg4MywweGVhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5Y2QwLCAwLCB7MHgwOCwweDBkLDB4YWMsMHgwOCwweGY4LDB4MDAsMHgzYywweGMwLDB4MGYsMHhiMywweDAzLDB4ZWMsMHgwMCwweGY5LDB4MDIsMHgzZSB9LAorICAxNiwgMHg5Y2UwLCAwLCB7MHhjOCwweDBmLDB4YjAsMHgwMywweGVkLDB4NDAsMHhmYiwweDAwLDB4YmUsMHg4MCwweDBlLDB4YjMsMHgwMywweGVkLDB4YzAsMHhmYiB9LAorICAxNiwgMHg5Y2YwLCAwLCB7MHgwMCwweDNlLDB4ZDIsMHgyZSwweDgwLDB4MDMsMHhlYywweDAyLDB4ZjksMHgwMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhjMiB9LAorICAxNiwgMHg5ZDAwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZlLDB4MDAsMHhmMCwweDkxLDB4MzMsMHhlMCB9LAorICAxNiwgMHg5ZDEwLCAwLCB7MHg4ZiwweGY4LDB4MDMsMHhmZSwweDAwLDB4ZmQsMHg4MCwweDNmLDB4ZTAsMHgwYywweDc4LDB4ODMsMHgzZiwweDAwLDB4Y2YsMHg4MCB9LAorICAxNiwgMHg5ZDIwLCAwLCB7MHgzZiwweGEwLDB4MGMsMHhmOCwweDAzLDB4M2UsMHgwMCwweGNkLDB4ODAsMHgzZiwweGUwLDB4MGYsMHhmOCwweDEzLDB4ZmUsMHgxMCB9LAorICAxNiwgMHg5ZDMwLCAwLCB7MHhmZiwweDgwLDB4M2YsMHgyMCwweDBmLDB4ZjksMHg0MywweGQwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ZDQwLCAwLCB7MHhhOCwweDExLDB4OWMsMHgwMCwweGI0LDB4YzEsMHgzMSwweGMwLDB4MGIsMHg3MCwweDAyLDB4ZDQsMHgxMCwweGU1LDB4MjAsMHgyZiB9LAorICAxNiwgMHg5ZDUwLCAwLCB7MHhjOCwweDBmLDB4NDAsMHgwMywweDVjLDB4MDAsMHg4NywweDAwLDB4MmQsMHg4MCwweDA4LDB4NzAsMHgwMiwweDFjLDB4NDAsMHg4NyB9LAorICAxNiwgMHg5ZDYwLCAwLCB7MHgxMCwweDJkLDB4YzAsMHgwYiwweDc2LDB4MDIsMHhkYywweDgwLDB4YjcsMHgwMCwweDJkLDB4YzAsMHgwYiwweDcwLDB4MDIsMHhlYSB9LAorICAxNiwgMHg5ZDcwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwMCwweDljLDB4MDAsMHhiNiwweDIyLDB4MjEsMHhkMCB9LAorICAxNiwgMHg5ZDgwLCAwLCB7MHgwYiwweDcwLDB4ODIsMHhkOCwweDQwLDB4YjUsMHgwMiwweDJkLDB4YzAsMHg4OCwweDY1LDB4MDIsMHgwYywweDAwLDB4ODcsMHgxOCB9LAorICAxNiwgMHg5ZDkwLCAwLCB7MHgyYywweDA0LDB4MDgsMHgzMCwweDAyLDB4OGMsMHgwMiwweDg1LDB4MDAsMHgyZCwweGMwLDB4MGIsMHg3MCwweDQ2LDB4OTAsMHgxMCB9LAorICAxNiwgMHg5ZGEwLCAwLCB7MHhiNiwweDAwLDB4MmQsMHgwMCwweDBiLDB4NzAsMHgyMiwweGM0LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ZGIwLCAwLCB7MHg2MCwweDE0LDB4Y2MsMHgwOCwweGIyLDB4MDAsMHhhNCwweGMwLDB4MGIsMHgzMCwweDQyLDB4YzYsMHgxMCwweGExLDB4MDAsMHgyYyB9LAorICAxNiwgMHg5ZGMwLCAwLCB7MHhjMCwweDBhLDB4MDAsMHgwMiwweDRjLDB4MDAsMHg4MywweDAwLDB4MmMsMHgwOCwweDA4LDB4MzAsMHgwMiwweDhjLDB4MDAsMHg4MyB9LAorICAxNiwgMHg5ZGQwLCAwLCB7MHgwMCwweDJjLDB4YzAsMHgwYiwweDE4LDB4ODIsMHhjNCwweDAwLDB4YjAsMHgwMCwweDJjLDB4NDAsMHgwYiwweDMwLDB4MTIsMHhkOCB9LAorICAxNiwgMHg5ZGUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZjgsMHgxNSwweGFjLDB4MDAsMHgzOCwweDAwLDB4MzIsMHg1MCB9LAorICAxNiwgMHg5ZGYwLCAwLCB7MHgwZiwweGYwLDB4MDMsMHhlNiwweDIwLDB4ZmQsMHgwMCwweDNmLDB4YzAsMHgwOCwweGQwLDB4MDIsMHgzYywweDAyLDB4Y2IsMHg4MCB9LAorICAxNiwgMHg5ZTAwLCAwLCB7MHgzYywweDUwLDB4MmMsMHhmMCwweDBhLDB4YmMsMHgwMCwweGM5LDB4MDAsMHgzZiwweGMwLDB4MGYsMHhiZSwweDAzLDB4YWMsMHgwMCB9LAorICAxNiwgMHg5ZTEwLCAwLCB7MHhmYSwweDAyLDB4MmUsMHhmNywweDRmLDB4ZjAsMHgwMywweGVlLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ZTIwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGYxLDB4MDAsMHgzYSwweGYwLDB4MGYsMHhiMCwweDAzLDB4ZTksMHgwMCwweGY5LDB4MDEsMHgzZSB9LAorICAxNiwgMHg5ZTMwLCAwLCB7MHhjMCwweDBmLDB4OTAsMHgxMywweGVjLDB4MDAsMHhmOSwweDAwLDB4M2UsMHg1NSwweDBmLDB4YjAsMHgwMSwweDZjLDB4MDAsMHhmYiB9LAorICAxNiwgMHg5ZTQwLCAwLCB7MHgwMiwweDNlLDB4YzAsMHgwZiwweDkwLDB4NzMsMHhlMCwweDAwLDB4ZjgsMHg0MSwweDNlLDB4MDAsMHgwZiwweDMwLDB4MDEsMHhlMCB9LAorICAxNiwgMHg5ZTUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweGZjLDB4MDAsMHhmYywweDAwLDB4MzMsMHhjMCB9LAorICAxNiwgMHg5ZTYwLCAwLCB7MHgxZiwweGYwLDB4MTMsMHhmMCwweDA4LDB4ZmQsMHgwMiwweDNmLDB4YzAsMHg4ZCwweGMwLDB4MDMsMHgzYywweDAwLDB4Y2YsMHhhMCB9LAorICAxNiwgMHg5ZTcwLCAwLCB7MHgzZiwweDgwLDB4MGMsMHg3MCwweDAzLDB4M2MsMHgxMCwweGZjLDB4MDAsMHgzNywweGMwLDB4MGYsMHhlMCwweDAzLDB4YjAsMHgwMCB9LAorICAxNiwgMHg5ZTgwLCAwLCB7MHhmZSwweDAwLDB4M2YsMHhjMCwweDBjLDB4ZjAsMHgwMywweDA0LDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ZTkwLCAwLCB7MHg4NCwweDA0LDB4NmUsMHgwMCwweGI5LDB4YzIsMHhhMiwweGYwLDB4MGIsMHhiMCwweDQyLDB4ZWIsMHgwMCwweGI5LDB4MDAsMHgyZSB9LAorICAxNiwgMHg5ZWEwLCAwLCB7MHhjMCwweDBmLDB4MTgsMHgwMywweDZjLDB4MDAsMHhkOSwweDgxLDB4MmUsMHhiMCwweDBhLDB4YjAsMHg0MiwweDJjLDB4MDAsMHhiYSB9LAorICAxNiwgMHg5ZWIwLCAwLCB7MHhjNiwweDJlLDB4YzAsMHgwYiwweDhjLDB4MDIsMHhlMywweDAwLDB4YjgsMHhjMCwweDNjLDB4YTAsMHgwZCwweGIwLDB4MDIsMHgyMCB9LAorICAxNiwgMHg5ZWMwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJmLDB4MDAsMHhiOCwweDgwLDB4MjIsMHhlMiB9LAorICAxNiwgMHg5ZWQwLCAwLCB7MHgwYiwweGIwLDB4MDIsMHhlNiwweDIwLDB4YjksMHgwMCwweDJjLDB4YzAsMHgwOCwweGI4LDB4MDIsMHgwYywweDAwLDB4OGIsMHgwMCB9LAorICAxNiwgMHg5ZWUwLCAwLCB7MHgyZSwweDMwLDB4NDgsMHhiMCwweDAyLDB4MmMsMHgwMCwweGI5LDB4YzAsMHgyZSwweGMxLDB4MGIsMHg4OCwweDAyLDB4ZWUsMHgxMCB9LAorICAxNiwgMHg5ZWYwLCAwLCB7MHhiOSwweGMwLDB4MmUsMHgyMCwweDE5LDB4YjAsMHgwMiwweDIwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ZjAwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMCwweGIwLDB4MDAsMHgyMCwweGMwLDB4MGIsMHgzMCwweDA2LDB4YzAsMHgwMCwweDkxLDB4MDAsMHgyYyB9LAorICAxNiwgMHg5ZjEwLCAwLCB7MHhjMCwweDQ5LDB4ODAsMHgwMiwweDRjLDB4MDQsMHg5MSwweDAwLDB4MmMsMHgwMCwweDhhLDB4MzAsMHgwYSwweDBjLDB4MDQsMHhiMSB9LAorICAxNiwgMHg5ZjIwLCAwLCB7MHgwMCwweDJjLDB4YzAsMHgxYiwweDAwLDB4MTIsMHg0OSwweDEwLDB4YjEsMHgwMCwweDJlLDB4MjAsMHgwOSwweDMwLDB4MDIsMHgwMiB9LAorICAxNiwgMHg5ZjMwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDZjLDB4MDAsMHhiOCwweDIwLDB4MjIsMHhjMCB9LAorICAxNiwgMHg5ZjQwLCAwLCB7MHg4YiwweGYwLDB4MDMsMHhlMCwweDA4LDB4ZmQsMHgwMCwweDNmLDB4YzAsMHgwYywweGEwLDB4MDMsMHgzYywweDAwLDB4Y2IsMHgwMCB9LAorICAxNiwgMHg5ZjUwLCAwLCB7MHgzZSwweDAwLDB4NGMsMHhmMCwweDBhLDB4M2MsMHgwMCwweGI5LDB4MDAsMHgzNywweGMxLDB4MGYsMHhhMCwweDAzLDB4ZTAsMHgwMCB9LAorICAxNiwgMHg5ZjYwLCAwLCB7MHhmYSwweDAwLDB4M2UsMHgwMCwweDBkLDB4ZjAsMHgwYiwweDAwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ZjcwLCAwLCB7MHhhMCwweDFkLDB4ZjAsMHgwMSwweGZjLDB4NDAsMHgzZiwweDgwLDB4NGYsMHhmMCwweDAyLDB4ZjAsMHgwMCwweGZkLDB4MDAsMHgzZiB9LAorICAxNiwgMHg5ZjgwLCAwLCB7MHhjMSwweDBmLDB4YzAsMHgwMywweGZjLDB4MDAsMHhmZCwweDAwLDB4M2YsMHgwMCwweDRmLDB4ZjAsMHg2MywweGZjLDB4MDAsMHhmZCB9LAorICAxNiwgMHg5ZjkwLCAwLCB7MHgwNCwweDNmLDB4YzAsMHgwZiwweGMwLDB4MDMsMHhmMCwweDgwLDB4ZmMsMHgwMCwweDdiLDB4MDAsMHgwZiwweGYwLDB4NDMsMHhlOCB9LAorICAxNiwgMHg5ZmEwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGY4LDB4MDAsMHhjOCwweDEwLDB4MzMsMHgwNCB9LAorICAxNiwgMHg5ZmIwLCAwLCB7MHgwYywweDQwLDB4MDIsMHgzNCwweDAwLDB4YzgsMHg4NSwweDFmLDB4YzAsMHgyZCwweGQ5LDB4MDMsMHhmYywweGMwLDB4ZGIsMHgyOCB9LAorICAxNiwgMHg5ZmMwLCAwLCB7MHgzNywweDY0LDB4MGYsMHhkYiwweDAzLDB4M2UsMHgwMCwweGZmLDB4MjUsMHgzZiwweGM4LDB4MGUsMHhmMiwweDAzLDB4ZmUsMHgyMCB9LAorICAxNiwgMHg5ZmQwLCAwLCB7MHhmZiwweGE0LDB4MzcsMHhjNCwweDBjLDB4YzgsMHgwMywweDMwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ZmUwLCAwLCB7MHg4MCwweDEwLDB4ZTgsMHgwMCwweDg4LDB4MjAsMHgyMiwweDAwLDB4MDgsMHg4OCwweDEyLDB4MjYsMHgwNCwweDg5LDB4ODIsMHgyZSB9LAorICAxNiwgMHg5ZmYwLCAwLCB7MHhmNCwweDQ4LDB4YjgsMHgwMiwweGZjLDB4YzQsMHg5OCwweGMyLDB4MjIsMHg3YywweDRiLDB4OWQsMHg0MiwweDI2LDB4MDgsMHhiZiB9LAorICAxNiwgMHhhMDAwLCAwLCB7MHgxOCwweDc3LDB4ZTQsMHgwOCwweGYxLDB4ODIsMHhlZiwweDAwLDB4YmIsMHhkMCwweDIyLDB4ZDgsMHgwOCwweDkwLDB4ODMsMHg2MCB9LAorICAxNiwgMHhhMDEwLCAwLCB7MHgwMiwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHg0NSwweGM4LDB4MDQsMHhhMCwweDAwLDB4MjQsMHgwMCB9LAorICAxNiwgMHhhMDIwLCAwLCB7MHgwYSwweDAwLDB4MDIsMHgwYywweDAwLDB4ODIsMHgwNCwweDJjLDB4ZTAsMHgwOCwweDEwLDB4MDIsMHhjYywweDgwLDB4ODMsMHgwMCB9LAorICAxNiwgMHhhMDMwLCAwLCB7MHgyNCwweDAwLDB4MGIsMHgxMCwweDA2LDB4YzgsMHgwMSwweGIzLDB4MjAsMHgyYywweGMwLDB4MjksMHgzMiwweDAyLDB4YzgsMHgwOCB9LAorICAxNiwgMHhhMDQwLCAwLCB7MHhiMSwweDAwLDB4MjQsMHhkMCwweDA4LDB4ODIsMHgwMiwweDYyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMDUwLCAwLCB7MHhjMCwweDE1LDB4YTgsMHgwMCwweGE4LDB4MGMsMHgyNiwweDAwLDB4MGEsMHg4MCwweDAyLDB4MmMsMHgxNCwweDhhLDB4MDIsMHg2ZSB9LAorICAxNiwgMHhhMDYwLCAwLCB7MHhlMCwweDA4LDB4YjAsMHgwMiwweDRjLDB4MDgsMHhhOCwweDAwLDB4MjYsMHgyMCwweDBiLDB4OWMsMHgwMiwweGU0LDB4MDAsMHhiYiB9LAorICAxNiwgMHhhMDcwLCAwLCB7MHgwNCwweDIyLDB4YzAsMHgxOSwweGIwLDB4MDIsMHhlOCwweDAxLDB4YmIsMHgxMSwweDAyLDB4YzAsMHg4OCwweDkwLDB4MDIsMHhmMCB9LAorICAxNiwgMHhhMDgwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNSwweGVjLDB4MDIsMHhlYSwweDQwLDB4YjYsMHg2MCB9LAorICAxNiwgMHhhMDkwLCAwLCB7MHgyZSwweDk4LDB4MGIsMHgyMCwweDAyLDB4YzgsMHgwMiwweDNlLDB4YzAsMHgwZCwweDk4LDB4MDMsMHhlYywweDAyLDB4ZGIsMHg4OCB9LAorICAxNiwgMHhhMGEwLCAwLCB7MHhiNiwweDIxLDB4MGYsMHg4OCwweDAzLDB4YWMsMHgwOCwweGZiLDB4MDAsMHgyYywweGMwLDB4MGUsMHhiMCwweDQzLDB4ZTUsMHg4MCB9LAorICAxNiwgMHhhMGIwLCAwLCB7MHhmMCwweDYwLDB4MzYsMHhjMCwweDBjLDB4MDEsMHg0MywweDQ4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMGMwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwMCwweGQ2LDB4MDEsMHgzYiwweDY0LDB4ODUsMHhkOSwweDAzLDB4ZjAsMHgwYywweGZmLDB4MDAsMHgzZSB9LAorICAxNiwgMHhhMGQwLCAwLCB7MHhjMSwweDBmLDB4ZmMsMHgyMSwweGVjLDB4MDAsMHhkNywweDkwLDB4M2IsMHg0MCwweDBmLDB4NTAsMHgwMywweDNjLDB4MDAsMHhmZiB9LAorICAxNiwgMHhhMGUwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHg4ZSwweGYwLDB4MDMsMHhmNCwweDQwLDB4ZmQsMHg4OCwweDNmLDB4YzAsMHgyZiwweGQwLDB4MDIsMHg3OCB9LAorICAxNiwgMHhhMGYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweDhjLDB4MDAsMHhkYSwweDQwLDB4M2MsMHg0MCB9LAorICAxNiwgMHhhMTAwLCAwLCB7MHgwZiwweDEwLDB4MDMsMHg0OCwweDAwLDB4ZjksMHgyMiwweDNjLDB4YzIsMHgwZSwweDkwLDB4ODMsMHhlYywweDAyLDB4ZGIsMHgwNCB9LAorICAxNiwgMHhhMTEwLCAwLCB7MHgzYSwweDA4LDB4MGYsMHg4NCwweDg3LDB4ZTgsMHgwMCwweGNiLDB4MDAsMHgzZSwweGM0LDB4MGUsMHhiMCwweDAzLDB4ZWQsMHgwMCB9LAorICAxNiwgMHhhMTIwLCAwLCB7MHhlOCwweDQyLDB4M2EsMHhjMCwweDBmLDB4ODAsMHgwYiwweDEwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMTMwLCAwLCB7MHg4OCwweDA1LDB4MmMsMHgwOCwweDhhLDB4MDAsMHgyZSwweDQyLDB4OGIsMHg5MCwweDAyLDB4MjgsMHgxOCwweGJiLDB4NDksMHgyMiB9LAorICAxNiwgMHhhMTQwLCAwLCB7MHhkMCwweDM4LDB4YmMsMHg4MiwweGZjLDB4MDAsMHhlOCwweDAyLDB4MjIsMHg2MiwweGNiLDB4OWMsMHgwMCwweGVmLDB4NjAsMHhkZiB9LAorICAxNiwgMHhhMTUwLCAwLCB7MHgwMCwweDJmLDB4YzAsMHgwYiwweGYwLDB4MDIsMHhlYywweDAwLDB4MDksMHg0MCwweDM3LDB4YzAsMHgwYiwweDkwLDB4MDIsMHgzMiB9LAorICAxNiwgMHhhMTYwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDQ4LDB4MTAsMHgxMSwweDAwLDB4MmMsMHhhMCB9LAorICAxNiwgMHhhMTcwLCAwLCB7MHgwYiwweDIwLDB4MDIsMHg0NCwweDAwLDB4OTAsMHhjMCwweDY0LDB4MzQsMHgyOCwweDM0LDB4MDIsMHhjYywweDAwLDB4OTMsMHg4NCB9LAorICAxNiwgMHhhMTgwLCAwLCB7MHgyOCwweDQwLDB4MGIsMHgwOCwweDAwLDB4Y2UsMHgwMCwweDkzLDB4MDAsMHgyYywweGMyLDB4MGEsMHgzMCwweDAyLDB4YzAsMHgwMCB9LAorICAxNiwgMHhhMTkwLCAwLCB7MHhiMiwweDQwLDB4MjIsMHhjMCwweDBiLDB4MjAsMHgwMiwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMWEwLCAwLCB7MHg3MCwweDAxLDB4MWEsMHg0MCwweDg1LDB4ODAsMHgyZCwweGEwLDB4MGIsMHg2OCwweDA2LDB4MTYsMHg4MCwweGJkLDB4OTAsMHgyNSB9LAorICAxNiwgMHhhMWIwLCAwLCB7MHgyNCwweDE4LDB4N2IsMHg0MiwweGRlLDB4NDAsMHhhMCwweDgwLDB4MjEsMHhlMCwweDBiLDB4NjgsMHgwMiwweGQ2LDB4MDAsMHg5NyB9LAorICAxNiwgMHhhMWMwLCAwLCB7MHg5MCwweDJkLDB4ZTAsMHgwYiwweDc4LDB4MDIsMHhjZSwweDQwLDB4OTIsMHg4MCwweDZkLDB4ZTQsMHgwYiwweDc4LDB4MDIsMHgwOCB9LAorICAxNiwgMHhhMWQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDI4LDB4MDAsMHhkMSwweDgwLDB4M2MsMHg4OCB9LAorICAxNiwgMHhhMWUwLCAwLCB7MHgwYiwweDIyLDB4MDMsMHg0ZSwweDgwLDB4ZjIsMHhhMSwweDNjLDB4MjQsMHgyYSwweDM5LDB4MDMsMHhjYywweDQwLDB4ZDMsMHhhYyB9LAorICAxNiwgMHhhMWYwLCAwLCB7MHgzOCwweGM1LDB4MGYsMHgzMCwweDgyLDB4YzgsMHgwMCwweGQzLDB4MDAsMHgzYywweGMwLDB4MGUsMHgzMCwweDEzLDB4YzAsMHgwMCB9LAorICAxNiwgMHhhMjAwLCAwLCB7MHhmMSwweDAwLDB4MzgsMHhjMCwweDBmLDB4YTAsMHgwMywweDFhLDB4MDYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMjEwLCAwLCB7MHg0MCwweDFkLDB4YjgsMHgxMCwweGZkLDB4MzQsMHgzZSwweDgwLDB4MGYsMHhlMCwweDAzLDB4ZWUsMHgwMCwweDcyLDB4MDAsMHgzYSB9LAorICAxNiwgMHhhMjIwLCAwLCB7MHgwMCwweDBmLDB4YjAsMHg2MywweGVjLDB4NDAsMHhmOCwweDIyLDB4M2UsMHhjMCwweDBmLDB4ZjAsMHgwMywweGQ0LDB4NDAsMHhmZiB9LAorICAxNiwgMHhhMjMwLCAwLCB7MHgwMCwweDNmLDB4ZDIsMHgwZiwweGYwLDB4MDMsMHhlYywweDAwLDB4Y2YsMHgwMCwweDM3LDB4YzAsMHgwZiwweGYwLDB4MDMsMHhkMCB9LAorICAxNiwgMHhhMjQwLCAwLCB7MHgwNiwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVlLDB4MDAsMHhlYiwweDAwLDB4MzYsMHhlMCB9LAorICAxNiwgMHhhMjUwLCAwLCB7MHgwZCwweGIwLDB4MDMsMHgyMCwweDAwLDB4ZjAsMHg4MCwweDMzLDB4YzAsMHgwOCwweGI4LDB4MDMsMHgyYywweDgwLDB4Y2IsMHgwMCB9LAorICAxNiwgMHhhMjYwLCAwLCB7MHgzMiwweDgwLDB4MGYsMHhhMCwweDEzLDB4NmUsMHgwOCwweGNiLDB4MjgsMHgzMiwweGUwLDB4MGQsMHhiNCwweDgzLDB4ZTIsMHgwMCB9LAorICAxNiwgMHhhMjcwLCAwLCB7MHhjYSwweDAwLDB4M2UsMHhlMCwweDBjLDB4YTgsMHgwMywweDAyLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMjgwLCAwLCB7MHhjOCwweDExLDB4OGMsMHgwNCwweDgzLDB4MDAsMHgyMSwweGMwLDB4NDgsMHg3MCwweDAyLDB4MTAsMHgwMCwweGI3LDB4MDIsMHgyMSB9LAorICAxNiwgMHhhMjkwLCAwLCB7MHhjMCwweDRhLDB4NzAsMHgwMiwweDBkLDB4NDgsMHhkNCwweDAwLDB4MzUsMHhjMCwweDBlLDB4NjAsMHgwMiwweGRjLDB4MDAsMHhhNyB9LAorICAxNiwgMHhhMmEwLCAwLCB7MHg0MCwweDI5LDB4YzAsMHgwOSwweDcyLDB4MDIsMHhkNCwweDEwLDB4YTYsMHgwMiwweDJmLDB4YzgsMHgwOCwweDcwLDB4MDIsMHgxMiB9LAorICAxNiwgMHhhMmIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweDllLDB4MDAsMHhhNywweDgwLDB4MjAsMHhlMCB9LAorICAxNiwgMHhhMmMwLCAwLCB7MHgwYSwweDM4LDB4MDIsMHgxYSwweDAwLDB4YjUsMHg4MCwweDIxLDB4ZTAsMHgwOCwweGY4LDB4MjIsMHg1YywweDgxLDB4ODMsMHg4MCB9LAorICAxNiwgMHhhMmQwLCAwLCB7MHgyMSwweGExLDB4MGIsMHg3OCwweDgyLDB4NWEsMHgxMCwweDgzLDB4YTAsMHgyMCwweGU4LDB4MGEsMHg3YiwweDAyLDB4ZGEsMHgwMCB9LAorICAxNiwgMHhhMmUwLCAwLCB7MHg5NywweGMwLDB4MmQsMHhlNCwweDA4LDB4ZTgsMHgwMiwweDA4LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMmYwLCAwLCB7MHgwOCwweDE0LDB4Y2MsMHgwMCwweDgzLDB4MTAsMHgyMCwweGMwLDB4MGEsMHgzMCwweDAyLDB4MDgsMHgwOCwweGIzLDB4NzAsMHgyMCB9LAorICAxNiwgMHhhMzAwLCAwLCB7MHhmOCwweDBhLDB4MzAsMHg0MiwweDRjLDB4MDQsMHg5MywweDE0LDB4MjYsMHhjNCwweDBhLDB4MzgsMHgwMiwweGNjLDB4MDAsMHhhMyB9LAorICAxNiwgMHhhMzEwLCAwLCB7MHgwMCwweDI4LDB4YzAsMHhhYSwweDMwLDB4MDIsMHhjZSwweDQwLDB4YjMsMHg4OCwweDJjLDB4YzAsMHgyOCwweDMwLDB4MGEsMHgxMiB9LAorICAxNiwgMHhhMzIwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE5LDB4MDAsMHhlYSwweDgwLDB4YjYsMHg5MCB9LAorICAxNiwgMHhhMzMwLCAwLCB7MHgyZiwweDI0LDB4MGIsMHgzOSwweDA0LDB4YmUsMHhjMCwweDMzLDB4OTIsMHgwYywweGEwLDB4MGIsMHg2OCwweDE4LDB4Y2UsMHhjMCB9LAorICAxNiwgMHhhMzQwLCAwLCB7MHgzMywweDgwLDB4MGYsMHhlOSwweDQzLDB4NzgsMHgwMCwweGNhLDB4MDAsMHgzMiwweDgwLDB4MGYsMHhhMCwweDEzLDB4ZjgsMHg0OCB9LAorICAxNiwgMHhhMzUwLCAwLCB7MHhkZSwweDAwLDB4M2UsMHg4MCwweDBjLDB4ZTAsMHgwMiwweDNhLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMzYwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgyNCwweGY4LDB4MDAsMHgzZSwweDEyLDB4MGQsMHg4MCwweDkzLDB4YjAsMHgyOCwweGY4LDB4MDAsMHhiYyB9LAorICAxNiwgMHhhMzcwLCAwLCB7MHgwMCwweDBmLDB4ODQsMHgwMywweGEwLDB4MDAsMHhmMCwweDAwLDB4M2UsMHgwMiwweDBlLDB4ODAsMHgwMCwweGUwLDB4MDAsMHhmOCB9LAorICAxNiwgMHhhMzgwLCAwLCB7MHgwMSwweDNlLDB4MDAsMHgwZCwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZTgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiB9LAorICAxNiwgMHhhMzkwLCAwLCB7MHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDAsMHhmOSwweDAwLDB4YjIsMHg3MCB9LAorICAxNiwgMHhhM2EwLCAwLCB7MHgwZiwweDkwLDB4MDEsMHgwNCwweDAwLDB4YzksMHgwMCwweDNlLDB4NDAsMHgwYywweDk4LDB4MDMsMHhlNCwweDA0LDB4ZTksMHgwOCB9LAorICAxNiwgMHhhM2IwLCAwLCB7MHgzYSwweDQ4LDB4MGMsMHg5YSwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzNiwweDQwLDB4MGIsMHgxMCwweDBiLDB4MjYsMHg4MCB9LAorICAxNiwgMHhhM2MwLCAwLCB7MHhmMSwweDgwLDB4MzIsMHg0MCwweDBmLDB4OTAsMHgwMywweGMyLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhM2QwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweGI5LDB4MDAsMHgyMiwweDYxLDB4MGIsMHg5MCwweDAyLDB4MjQsMHgwOCwweDg5LDB4MDAsMHgyZSB9LAorICAxNiwgMHhhM2UwLCAwLCB7MHg0MCwweDBkLDB4OWEsMHgwMiwweGU0LDB4MDgsMHhhOSwweDAwLDB4MjIsMHg3OCwweDBkLDB4OTQsMHgwNiwweGU0LDB4MTAsMHhiOSB9LAorICAxNiwgMHhhM2YwLCAwLCB7MHgwMCwweDIyLDB4NTAsMHgwYiwweDkwLDB4MDIsMHgyNSwweDgwLDB4YjksMHg4MCwweDM2LDB4NDAsMHgwYiwweDkwLDB4MDIsMHhlMCB9LAorICAxNiwgMHhhNDAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDAsMHhiNSwweDAwLDB4MjMsMHg0MiB9LAorICAxNiwgMHhhNDEwLCAwLCB7MHgwYiwweGQwLDB4MGUsMHhiNCwweDAwLDB4ODksMHgwNCwweDJlLDB4NjAsMHgwOCwweDkxLDB4MDIsMHhjNCwweDA0LDB4YjksMHgwNCB9LAorICAxNiwgMHhhNDIwLCAwLCB7MHgyYSwweGMwLDB4MDgsMHg5NCwweDAyLDB4ZTQsMHgxMCwweGIxLDB4MDAsMHgyNiwweDQyLDB4MGEsMHg5MCwweDAyLDB4MjQsMHgwMCB9LAorICAxNiwgMHhhNDMwLCAwLCB7MHhiOSwweDIxLDB4NjIsMHg0MCwweDBiLDB4OTAsMHgwMiwweGM2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNDQwLCAwLCB7MHgwOCwweDA0LDB4MDUsMHgwMCwweGI1LDB4NDAsMHgyMSwweDUwLDB4NGIsMHg1MCwweDA2LDB4OTQsMHgwMiwweDgxLDB4MDAsMHgyYyB9LAorICAxNiwgMHhhNDUwLCAwLCB7MHg2MCwweDI5LDB4MTQsMHgwNiwweGM1LDB4MDAsMHhhMSwweDIyLDB4MjAsMHg1MSwweDg5LDB4MTQsMHgwMiwweGM0LDB4MDAsMHhiMSB9LAorICAxNiwgMHhhNDYwLCAwLCB7MHgyMCwweDIwLDB4NDgsMHgwYiwweDE0LDB4MDIsMHgwNCwweDAxLDB4YjEsMHgwMCwweDA0LDB4NTAsMHgwYiwweDEwLDB4MDIsMHhjMiB9LAorICAxNiwgMHhhNDcwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDgsMHhiOCwweDAwLDB4MzIsMHgwMCB9LAorICAxNiwgMHhhNDgwLCAwLCB7MHg4ZiwweDgwLDB4MDMsMHhiMCwweDAwLDB4ODgsMHgwMCwweDNlLDB4MDAsMHgwYywweDgwLDB4MDMsMHhlMCwweDAwLDB4ZTgsMHgwNCB9LAorICAxNiwgMHhhNDkwLCAwLCB7MHgzYSwweDAwLDB4MGMsMHg4MCwweDAyLDB4ZTAsMHgwMCwweGY4LDB4NTAsMHgzNiwweDAwLDB4MGYsMHg4MCwweDAzLDB4MjAsMHgwNCB9LAorICAxNiwgMHhhNGEwLCAwLCB7MHhmOCwweDAxLDB4MTIsMHgwMCwweDRmLDB4ODAsMHgwNywweGVlLDB4MDcsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNGIwLCAwLCB7MHg5OCwweDFkLDB4ZTUsMHgxMCwweGY5LDB4NDAsMHgzZSwweDUwLDB4MGYsMHg5NCwweDAyLDB4NjUsMHgwMSwweGZkLDB4MDEsMHgzZCB9LAorICAxNiwgMHhhNGMwLCAwLCB7MHg1MCwweDRmLDB4NTAsMHgxMywweGU1LDB4MDAsMHhmZCwweDEwLDB4MWYsMHg1MCwweDA3LDB4ZDQsMHg0MywweGQ0LDB4MDAsMHhmOSB9LAorICAxNiwgMHhhNGQwLCAwLCB7MHgxMCwweDFlLDB4NDQsMHgwZiwweDk0LDB4MDMsMHhkNSwweDAwLDB4ZmQsMHg0MCwweDNlLDB4NTAsMHgwZiwweDUyLDB4ODMsMHhlZSB9LAorICAxNiwgMHhhNGUwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgxNSwweGU0LDB4NDAsMHhmOSwweDYwLDB4M2YsMHg0NCB9LAorICAxNiwgMHhhNGYwLCAwLCB7MHgwZiwweGQwLDB4YzMsMHhlNCwweDMwLDB4ZjksMHgwMSwweDNlLDB4NDIsMHgwYywweGQwLDB4MDMsMHhlNywweDgwLDB4ZGQsMHhhMCB9LAorICAxNiwgMHhhNTAwLCAwLCB7MHgzMywweDQwLDB4MGMsMHhkMCwweDAzLDB4ZmMsMHgwMCwweGM5LDB4OTAsMHgzZiwweDY4LDB4MWUsMHg5MSwweDAzLDB4MzQsMHgwMCB9LAorICAxNiwgMHhhNTEwLCAwLCB7MHhmZCwweDAwLDB4M2UsMHg2OCwweDBjLDB4OTQsMHgwMywweDBlLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNTIwLCAwLCB7MHgzOSwweDEwLDB4ZTAsMHgwMCwweGI4LDB4NDIsMHgyZSwweDA5LDB4MGIsMHg4NCwweDAyLDB4ZTEsMHgwNCwweGJlLDB4MDAsMHgyZSB9LAorICAxNiwgMHhhNTMwLCAwLCB7MHgxMCwweDA4LDB4ODAsMHgyMiwweGMyLDB4ODAsMHg4OCwweDQwLDB4MjIsMHgwMCwweDBhLDB4ODAsMHgwMiwweGUwLDB4MDAsMHhhOCB9LAorICAxNiwgMHhhNTQwLCAwLCB7MHhkMCwweDJlLDB4MTAsMHg0YiwweDhhLDB4MDMsMHg2MCwweDAwLDB4YmEsMHgwMCwweDJlLDB4MzAsMHgwOCwweDhhLDB4MDIsMHg4NiB9LAorICAxNiwgMHhhNTUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNSwweGM1LDB4ODAsMHhiMSwweDYwLDB4NmMsMHhkMCB9LAorICAxNiwgMHhhNTYwLCAwLCB7MHgwYiwweDEwLDB4MDAsMHhkYywweDBjLDB4YjUsMHgwMCwweDJjLDB4NDEsMHgwOCwweDEwLDB4MDIsMHhjNSwweDgwLDB4OTEsMHgxMCB9LAorICAxNiwgMHhhNTcwLCAwLCB7MHg2OCwweGMwLDB4MDgsMHgzMCwweDAyLDB4ZTQsMHgwYywweDgxLDB4MjIsMHgyYywweDUwLDB4MDgsMHgxMCwweDQyLDB4MDQsMHgwMCB9LAorICAxNiwgMHhhNTgwLCAwLCB7MHhhMSwweDAwLDB4MmMsMHg1YSwweDI4LDB4OTAsMHgwMiwweDUyLDB4MTAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNTkwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMCwweGI5LDB4MDAsMHgyZSwweDQxLDB4MGIsMHg5MCwweDEyLDB4ZjQsMHg4MCwweGJmLDB4MDAsMHgyZSB9LAorICAxNiwgMHhhNWEwLCAwLCB7MHg0MCwweDA4LDB4OTAsMHgwMiwweGU0LDB4MDAsMHhhOSwweDYwLDB4NjAsMHg0MiwweDBhLDB4OTQsMHgxMiwweGU1LDB4MDAsMHhhOSB9LAorICAxNiwgMHhhNWIwLCAwLCB7MHgwMCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHg2NCwweDIwLDB4YjksMHgwMCwweDBlLDB4NDAsMHgwOSwweDkwLDB4MDIsMHhjNiB9LAorICAxNiwgMHhhNWMwLCAwLCB7MHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgwNSwweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MSB9LAorICAxNiwgMHhhNWQwLCAwLCB7MHgwZiwweDkwLDB4MjMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgwYywweDkwLDB4MDMsMHhlNCwweDA0LDB4ZDEsMHhjMCB9LAorICAxNiwgMHhhNWUwLCAwLCB7MHhiYSwweDcwLDB4MGMsMHg5OCwweDAzLDB4YzQsMHgwMCwweGM5LDB4MDAsMHgzZSwweDQwLDB4MGUsMHg5MCwweDAzLDB4MjUsMHg0MCB9LAorICAxNiwgMHhhNWYwLCAwLCB7MHhlOSwweDQwLDB4M2UsMHg0MCwweDBjLDB4MTAsMHgwMywweDY4LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNjAwLCAwLCB7MHg2OCwweDAxLDB4YTQsMHgxNCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDIzLDB4ZTQsMHgwOCwweGY5LDB4YTAsMHgzYyB9LAorICAxNiwgMHhhNjEwLCAwLCB7MHhjMiwweDJmLDB4OTAsMHgwMywweGM0LDB4MDAsMHhkOSwweDgwLDB4M2UsMHg3MCwweDBmLDB4OTEsMHg0MywweGU0LDB4MDAsMHhmOSB9LAorICAxNiwgMHhhNjIwLCAwLCB7MHgwMCwweDNlLDB4NDAsMHgxZiwweDkwLDB4MTMsMHhlNiwweDIwLDB4ZjksMHhhMCwweDNjLDB4NDAsMHg0ZSwweDkwLDB4MDMsMHg5YSB9LAorICAxNiwgMHhhNjMwLCAwLCB7MHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwMCwweGEwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMiB9LAorICAxNiwgMHhhNjQwLCAwLCB7MHgwZiwweDgwLDB4MTMsMHgyMCwweDBjLDB4ZmMsMHgwMSwweDNlLDB4MDAsMHgwYywweDgwLDB4MDMsMHhlMCwweDAwLDB4YzgsMHg1MCB9LAorICAxNiwgMHhhNjUwLCAwLCB7MHgzMiwweDAwLDB4MGYsMHg4MCwweDBiLDB4MjAsMHgwOCwweGY4LDB4MDAsMHgzMiwweDAwLDB4MmMsMHg4MCwweDQzLDB4ZTAsMHg0MCB9LAorICAxNiwgMHhhNjYwLCAwLCB7MHhmOCwweDAyLDB4M2EsMHgwMCwweDhmLDB4ODAsMHgwMywweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNjcwLCAwLCB7MHhhOCwweDg1LDB4MjgsMHgwOCwweDNhLDB4MDAsMHgwZiwweDgwLDB4NGIsMHhhMSwweDAyLDB4MjgsMHgwMCwweGJhLDB4ODIsMHgyZSB9LAorICAxNiwgMHhhNjgwLCAwLCB7MHg4OCwweDQ4LDB4ZTQsMHgwMiwweGU4LDB4MDAsMHhhZSwweDkwLDB4YTMsMHg5MCwweDBiLDB4ZTAsMHgwMCwweDM4LDB4MDAsMHhiYSB9LAorICAxNiwgMHhhNjkwLCAwLCB7MHgwMCwweDM3LDB4YTAsMHgwOCwweGEwLDB4MDIsMHhmOCwweDAwLDB4OWUsMHhlMCwweDIyLDB4ODAsMHgwYiwweGEwLDB4MjMsMHg0MiB9LAorICAxNiwgMHhhNmEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MTAsMHgzMywweDAwLDB4MmMsMHhkMCB9LAorICAxNiwgMHhhNmIwLCAwLCB7MHgwYiwweDE0LDB4MDIsMHgwYywweDAwLDB4YjIsMHg5MSwweDJjLDB4ZDAsMHgwOCwweDNlLDB4MDIsMHg0YywweDAwLDB4ODMsMHg0MCB9LAorICAxNiwgMHhhNmMwLCAwLCB7MHgyNCwweGMyLDB4MGIsMHgzNiwweDAwLDB4OGMsMHgwMCwweGIzLDB4MDAsMHgyMCwweGMwLDB4MDksMHhiMCwweDAyLDB4Y2UsMHgwMCB9LAorICAxNiwgMHhhNmQwLCAwLCB7MHhiMywweGNjLDB4NjgsMHhjMCwweDBiLDB4MzAsMHgwMiwweDAyLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNmUwLCAwLCB7MHhlMCwweDAxLDB4MWMsMHg4OCwweGI3LDB4MjUsMHgyZCwweGMwLDB4OGIsMHg1OCwweDFhLDB4MWMsMHgwOCwweGI2LDB4MDAsMHgyZCB9LAorICAxNiwgMHhhNmYwLCAwLCB7MHhjMCwweDA4LDB4NzQsMHgwMiwweGRjLDB4NDAsMHhhNSwweDAwLDB4MjUsMHhjMCwweDFiLDB4NzgsMHgwMiwweDk0LDB4MDgsMHhiNyB9LAorICAxNiwgMHhhNzAwLCAwLCB7MHg4MCwweDI1LDB4ZTMsMHgwYSwweDcxLDB4MDIsMHhkYywweDAwLDB4OTcsMHg4MywweDIxLDB4YzgsMHg4YiwweGYxLDB4MDIsMHg0OCB9LAorICAxNiwgMHhhNzEwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFmLDB4MDAsMHhmNywweGUyLDB4N2QsMHhlMCB9LAorICAxNiwgMHhhNzIwLCAwLCB7MHgwZiwweDU4LDB4NDMsMHgxZSwweDE4LDB4ZjYsMHg4MCwweDdjLDB4ZTAsMHgyYywweDY4LDB4MDIsMHg1ZSwweDkwLDB4YzMsMHg4MCB9LAorICAxNiwgMHhhNzMwLCAwLCB7MHgzNSwweGUwLDB4MGYsMHhmOCwweDAzLDB4OWUsMHgwNCwweGZmLDB4YTEsMHgyMCwweGExLDB4MGQsMHg3OCwweDAzLDB4ZDYsMHgwMCB9LAorICAxNiwgMHhhNzQwLCAwLCB7MHhmNywweDgwLDB4MzksMHhmOCwweDBmLDB4NzgsMHgwMywweDBhLDB4MDYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNzUwLCAwLCB7MHg0OCwweDFkLDB4YWMsMHgwMCwweGZiLDB4NDAsMHg3ZiwweDQxLDB4MGYsMHgxMCwweDAzLDB4ZWMsMHgwNCwweGZhLDB4MDAsMHgzZSB9LAorICAxNiwgMHhhNzYwLCAwLCB7MHhkMCwweDBmLDB4YTAsMHgwMywweGVkLDB4MDAsMHhlOSwweDAwLDB4MmEsMHgwMCwweDBmLDB4YjAsMHgwMywweDY0LDB4MDAsMHhmYiB9LAorICAxNiwgMHhhNzcwLCAwLCB7MHg0MCwweDNlLDB4YzAsMHgwZCwweGIwLDB4MDMsMHhlNCwweDAwLDB4ZDMsMHgwMCwweDM2LDB4YzAsMHgwZiwweDM4LDB4MDMsMHhjMiB9LAorICAxNiwgMHhhNzgwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNSwweGZlLDB4NDgsMHhjZiwweGMwLDB4MzMsMHg2MCB9LAorICAxNiwgMHhhNzkwLCAwLCB7MHg4YywweGM4LDB4NDMsMHhkNiwweDAwLDB4Y2MsMHg5NCwweDNmLDB4YjAsMHgwZCwweGY4LDB4MDMsMHg3ZiwweDAwLDB4ZGYsMHg4MCB9LAorICAxNiwgMHhhN2EwLCAwLCB7MHgzZiwweDYwLDB4MGYsMHhkOCwweDAzLDB4ZGUsMHgwMCwweGNmLDB4Y2EsMHgzZCwweDYwLDB4MGMsMHhmOCwweDEzLDB4M2EsMHg0NCB9LAorICAxNiwgMHhhN2IwLCAwLCB7MHhkZCwweDgwLDB4M2YsMHhlMCwweDBmLDB4ZjgsMHg0MywweDE4LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhN2MwLCAwLCB7MHhhOCwweDExLDB4OWMsMHgwMCwweDhmLDB4MTEsMHgzMywweGMwLDB4NDgsMHg0MSwweDEyLDB4YzQsMHg0OCwweDg0LDB4MTEsMHgyYyB9LAorICAxNiwgMHhhN2QwLCAwLCB7MHhlYywweDJhLDB4YmEsMHgwMywweDNjLDB4NDAsMHhkNywweDQ4LDB4MmQsMHg0MSwweDBiLDB4NjAsMHgwMiwweGQ0LDB4MDAsMHhkNyB9LAorICAxNiwgMHhhN2UwLCAwLCB7MHgwMSwweDNkLDB4YzAsMHgwZCwweGYwLDB4MDMsMHg1YSwweDAwLDB4ODQsMHgxOCwweDJkLDB4YzAsMHgwYiwweDcwLDB4MDMsMHg2YSB9LAorICAxNiwgMHhhN2YwLCAwLCB7MHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDhjLDB4MDgsMHg4NywweDAwLDB4MjEsMHg0MCB9LAorICAxNiwgMHhhODAwLCAwLCB7MHgwOSwweDQwLDB4MDIsMHhkNCwweDAwLDB4YTQsMHg5MiwweDJkLDB4YzgsMHgwOSwweDYyLDB4ODIsMHg1YywweDAwLDB4ODcsMHgwMCB9LAorICAxNiwgMHhhODEwLCAwLCB7MHgyZCwweGMwLDB4MGIsMHg1MCwweDAyLDB4ZmMsMHgwMCwweDg3LDB4MDAsMHgyZCwweDA0LDB4MDgsMHg3MCwweDAyLDB4MWMsMHg4MCB9LAorICAxNiwgMHhhODIwLCAwLCB7MHhiNSwweDAwLDB4MmQsMHhjMCwweDBiLDB4ZjAsMHgwMiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhODMwLCAwLCB7MHg2MCwweDEwLDB4Y2MsMHgwMCwweDgzLDB4MDAsMHgyMCwweDQwLDB4MDksMHgwMCwweDIyLDB4YzcsMHgwMCwweGEwLDB4NDEsMHgyYyB9LAorICAxNiwgMHhhODQwLCAwLCB7MHhjMSwweDRiLDB4MDgsMHgwMiwweDJjLDB4MDAsMHg5MywweDQwLDB4MmMsMHg3YywweDBiLDB4MzgsMHgwMiwweGM3LDB4MjAsMHg5MyB9LAorICAxNiwgMHhhODUwLCAwLCB7MHgwMCwweDJjLDB4YzAsMHgwOSwweDMwLDB4MDIsMHg0ZiwweDg0LDB4YjAsMHg4MCwweDJjLDB4YzAsMHgwYiwweDMyLDB4MTAsMHg1MCB9LAorICAxNiwgMHhhODYwLCAwLCB7MHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YWEsMHgxNSwweGJjLDB4MDIsMHhjZiwweDAwLDB4YjIsMHg0MCB9LAorICAxNiwgMHhhODcwLCAwLCB7MHgwZCwweDEwLDB4MDMsMHhlOCwweDI0LDB4ZWIsMHhjMSwweDNlLDB4YzAsMHgyZCwweDk4LDB4MTMsMHg3YywweDBhLDB4YzIsMHg0MyB9LAorICAxNiwgMHhhODgwLCAwLCB7MHgzZSwweGIwLDB4MGYsMHhhOSwweDAzLDB4ZTksMHgyMCwweGNmLDB4MDAsMHgzZSwweGMwLDB4OGMsMHhmMCwweDAzLDB4MGQsMHgyMCB9LAorICAxNiwgMHhhODkwLCAwLCB7MHhmYSwweGMwLDB4M2YsMHhjMCwweDBmLDB4NzQsMHgwMSwweDJhLDB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhOGEwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGZiLDB4MDIsMHgzYSwweDQwLDB4OGUsMHg5MCwweDAzLDB4ZTgsMHgxNCwweDViLDB4NTAsMHgzYyB9LAorICAxNiwgMHhhOGIwLCAwLCB7MHg1MCwweDRlLDB4ODQsMHgwMywweGVjLDB4MDAsMHhmOCwweDQwLDB4M2UsMHg4MCwweDA3LDB4ODEsMHgwMywweGVjLDB4MDgsMHhmMyB9LAorICAxNiwgMHhhOGMwLCAwLCB7MHgwMCwweDNhLDB4YzAsMHg5ZiwweDMwLDB4MDMsMHhlYywweDAwLDB4Y2IsMHgyMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MjMsMHhlOCB9LAorICAxNiwgMHhhOGQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHg5MCwweGZjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHg0MCB9LAorICAxNiwgMHhhOGUwLCAwLCB7MHgwZiwweGQwLDB4MDMsMHgzOCwweDIwLDB4Y2YsMHgwOCwweDMyLDB4YzEsMHgwZSwweGQwLDB4MDMsMHhmYywweDAwLDB4ZmUsMHgwOCB9LAorICAxNiwgMHhhOGYwLCAwLCB7MHgzMSwweGU1LDB4MGUsMHhlNCwweDAzLDB4M2EsMHgwMCwweGZmLDB4MDAsMHgzMywweDgwLDB4MGYsMHhmMCwweDJiLDB4MjQsMHgwMCB9LAorICAxNiwgMHhhOTAwLCAwLCB7MHhjYywweGEwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweDAwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhOTEwLCAwLCB7MHg4MCwweDA0LDB4NmMsMHgwMCwweGJiLDB4MDAsMHgzYSwweDY5LDB4MGIsMHg5MCwweDZlLDB4MDgsMHgwMCwweDgzLDB4NDEsMHgzNiB9LAorICAxNiwgMHhhOTIwLCAwLCB7MHg0MCwweGM4LDB4ODgsMHhjNiwweGVjLDB4MDAsMHg4OCwweDQwLDB4MzYsMHg4MCwweDBkLDB4YTgsMHgwMywweDZlLDB4NTAsMHhiYiB9LAorICAxNiwgMHhhOTMwLCAwLCB7MHgwMCwweDM2LDB4YzAsMHgwYiwweGIwLDB4MDIsMHgyNCwweDAwLDB4ZDksMHgwOCwweDJlLDB4YzAsMHgwYiwweGIwLDB4MDMsMHhlMCB9LAorICAxNiwgMHhhOTQwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHhiYiwweDAwLDB4MmUsMHg2MCB9LAorICAxNiwgMHhhOTUwLCAwLCB7MHgwMywweDgwLDB4MDIsMHgyMCwweDAwLDB4ODksMHgwMSwweDIyLDB4NTgsMHgwOCwweDk4LDB4MjIsMHhlYywweDAxLDB4YWIsMHgwMCB9LAorICAxNiwgMHhhOTYwLCAwLCB7MHgyMiwweDAwLDB4MGEsMHgxMCwweDAyLDB4MjgsMHgwMCwweGJiLDB4MDAsMHgyMiwweDQwLDB4MGIsMHhiMCwweDAyLDB4MjgsMHgwMCB9LAorICAxNiwgMHhhOTcwLCAwLCB7MHg4YSwweDAwLDB4MmUsMHhjMCwweDBiLDB4YjAsMHg0MiwweDIwLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhOTgwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMCwweGIzLDB4MDAsMHgyOCwweDQwLDB4OGIsMHgwMCwweDAyLDB4MDIsMHg0MCwweDg5LDB4MDEsMHgyNCB9LAorICAxNiwgMHhhOTkwLCAwLCB7MHhkMiwweDI4LDB4MTAsMHgwMiwweGNjLDB4MDAsMHg4MywweDEwLDB4MjQsMHgyMCwweDA4LDB4MDgsMHgwMiwweDRlLDB4MDAsMHhiMyB9LAorICAxNiwgMHhhOWEwLCAwLCB7MHgwNCwweGEwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwOCwweDg4LDB4OTIsMHgwMCwweDJjLDB4YzAsMHgwYiwweGIwLDB4MDIsMHhjMiB9LAorICAxNiwgMHhhOWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDZjLDB4MDAsMHhmZiwweDAwLDB4M2UsMHgwMCB9LAorICAxNiwgMHhhOWMwLCAwLCB7MHgwZiwweDgwLDB4MDIsMHgyMCwweDEwLDB4ODksMHg1MCwweDIyLDB4ZDgsMHgyZSwweDk2LDB4MjIsMHhmYywweDAwLDB4ZWIsMHg0MCB9LAorICAxNiwgMHhhOWQwLCAwLCB7MHgzMiwweGMwLDB4MGEsMHg5MCwweDAzLDB4MjgsMHgwMCwweGZmLDB4MDAsMHgyMiwweDAwLDB4MGYsMHhiMCwweDAzLDB4MmMsMHhhMCB9LAorICAxNiwgMHhhOWUwLCAwLCB7MHhjOCwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweDAwLDB4MDYsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhOWYwLCAwLCB7MHhhMCwweDE5LDB4ZmMsMHgwMCwweGZmLDB4MGMsMHgzYiwweDAwLDB4MGYsMHhjMCwweDAyLDB4NzAsMHg5MCwweGZkLDB4MDAsMHgzZSB9LAorICAxNiwgMHhhYTAwLCAwLCB7MHhjOSwweDBmLDB4OTYsMHhjMywweGZjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDQsMHhmZiB9LAorICAxNiwgMHhhYTEwLCAwLCB7MHgwNCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhlYywweDAwLDB4ZmMsMHgwMCwweDNmLDB4YzAsMHgwZiwweDcwLDB4MDMsMHhlOCB9LAorICAxNiwgMHhhYTIwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGRjLDB4ODAsMHhmYiwweDI4LDB4M2YsMHgwMCB9LAorICAxNiwgMHhhYTMwLCAwLCB7MHgwYywweGMxLDB4MGIsMHhmMSwweDAyLDB4ZWQsMHgwMCwweDM3LDB4MzAsMHgyYywweGYxLDB4MDMsMHhiMiwweDQwLDB4ZmYsMHgwMCB9LAorICAxNiwgMHhhYTQwLCAwLCB7MHhiYiwweGMwLDB4MGYsMHg0OCwweDA2LDB4YjIsMHgwMCwweGZjLDB4ODAsMHgzYiwweGNjLDB4MGMsMHhmMCwweDAzLDB4NzAsMHg4MCB9LAorICAxNiwgMHhhYTUwLCAwLCB7MHhkZiwweDI4LDB4MzMsMHgwNCwweDBmLDB4ZjQsMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhYTYwLCAwLCB7MHg4MCwweDEwLDB4ZmYsMHg0MCwweGJmLDB4NjAsMHgyZSwweDIxLDB4MDgsMHg4MiwweDAyLDB4MjAsMHgwMCwweGE5LDB4MjgsMHgyYSB9LAorICAxNiwgMHhhYTcwLCAwLCB7MHgwMCwweDA5LDB4ZmEsMHgwMiwweDIwLDB4MDAsMHhiZiwweDUxLDB4MjMsMHhkOCwweDA5LDB4OTgsMHgwMiwweGU0LDB4MzAsMHhiMCB9LAorICAxNiwgMHhhYTgwLCAwLCB7MHgwMCwweDIzLDB4ZDAsMHgwOCwweGY1LDB4YTIsMHgyNSwweGE0LDB4OGYsMHg0MiwweDNjLDB4MTAsMHgwYiwweGIwLDB4MGEsMHgyMCB9LAorICAxNiwgMHhhYTkwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4MDAsMHhiMywweDA4LDB4MmMsMHgwMCB9LAorICAxNiwgMHhhYWEwLCAwLCB7MHgyOCwweDAwLDB4MWEsMHhjMCwweDg0LDB4MjAsMHgwMCwweDI0LDB4YzgsMHg0YiwweDMxLDB4NDIsMHhjMCwweDAwLDB4OTMsMHgwMiB9LAorICAxNiwgMHhhYWIwLCAwLCB7MHgyMCwweGM2LDB4MDgsMHgwMCwweDA2LDB4YzAsMHg4MSwweGIzLDB4MDAsMHgyYywweGQ4LDB4MDksMHgzMiwweDAyLDB4YTAsMHg0MCB9LAorICAxNiwgMHhhYWMwLCAwLCB7MHg5MywweDAxLDB4MjQsMHg0YywweDBiLDB4MzIsMHgwMiwweDIyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhYWQwLCAwLCB7MHhjMCwweDExLDB4YWMsMHgwMCwweGJiLDB4MDIsMHgyZSwweDBhLDB4MDgsMHg4MCwweDgyLDB4NjAsMHgwMCwweGE4LDB4MDAsMHgyZSB9LAorICAxNiwgMHhhYWUwLCAwLCB7MHhlMCwweDFiLDB4YjAsMHgwMiwweDYyLDB4MDEsMHgzYiwweDAwLDB4MjIsMHhjMSwweDA5LDB4OTAsMHgwMiwweGUyLDB4MDAsMHhiYiB9LAorICAxNiwgMHhhYWYwLCAwLCB7MHg2MCwweDI2LDB4YzEsMHgwOCwweGIwLDB4MmEsMHgyNiwweDAwLDB4OWIsMHgwNCwweDJlLDB4MjEsMHgwYiwweGIwLDB4MDIsMHgzMCB9LAorICAxNiwgMHhhYjAwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMSwweGVjLDB4MTAsMHhmYiwweDAwLDB4M2UsMHgxMCB9LAorICAxNiwgMHhhYjEwLCAwLCB7MHgwOCwweDg0LDB4MTMsMHhlYywweDAyLDB4YTksMHgwNCwweDM2LDB4MjAsMHgwZiwweGIwLDB4MDMsMHhlZSwweDgwLDB4ZmIsMHgwMCB9LAorICAxNiwgMHhhYjIwLCAwLCB7MHgzYSwweGMwLDB4MGMsMHhhMCwweDAzLDB4YTIsMHg4MCwweDc5LDB4NDAsMHgxZSwweGMwLDB4OGMsMHhiMCwweDYzLDB4NmEsMHgxMCB9LAorICAxNiwgMHhhYjMwLCAwLCB7MHhkMywweDAwLDB4MzYsMHhhMiwweDA3LDB4YjAsMHgwMywweDAwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhYjQwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwMCwweGZmLDB4MDAsMHgzZSwweDIwLDB4NGQsMHg0MSwweDAzLDB4OWMsMHgwMCwweGZkLDB4MjAsMHhhYiB9LAorICAxNiwgMHhhYjUwLCAwLCB7MHgwMCwweDBjLDB4ZjAsMHgwMywweGI4LDB4MDAsMHhmNywweDAwLDB4M2YsMHhjMCwweDRkLDB4YzksMHgwMywweGY0LDB4MDAsMHhmZiB9LAorICAxNiwgMHhhYjYwLCAwLCB7MHgwMCwweDNiLDB4YzAsMHgyZSwweGYwLDB4MDAsMHhmMCwweDAwLDB4ZWYsMHgwMCwweDNmLDB4MDAsMHg0YiwweDcwLDB4MDMsMHhmOCB9LAorICAxNiwgMHhhYjcwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4ODAsMHhlYiwweDAwLDB4N2UsMHgxMCB9LAorICAxNiwgMHhhYjgwLCAwLCB7MHgyZSwweDg0LDB4MDMsMHhlYywweDAwLDB4ZTAsMHgwMCwweDMyLDB4NTAsMHgwZiwweGIwLDB4ODYsMHgyNSwweDAwLDB4ZGIsMHgyMCB9LAorICAxNiwgMHhhYjkwLCAwLCB7MHgzYSwweGMwLDB4MGQsMHhiMCwweDYzLDB4ZTEsMHgxMCwweGZiLDB4NDgsMHgzOCwweGMxLDB4MGYsMHgzMCwweDAzLDB4MmMsMHgwNCB9LAorICAxNiwgMHhhYmEwLCAwLCB7MHhmYiwweDA4LDB4MzIsMHhjMCwweDBjLDB4YjAsMHgwYiwweDkwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhYmIwLCAwLCB7MHhjOCwweDA1LDB4M2MsMHgwMCwweDhmLDB4MDAsMHg2NCwweDI5LDB4MjgsMHg4MCwweDAzLDB4ZWMsMHgwMiwweGU4LDB4MDQsMHhhOCB9LAorICAxNiwgMHhhYmMwLCAwLCB7MHg1NiwweDA4LDB4ZmMsMHgwNywweGUwLDB4MDAsMHgwZiwweGEwLDB4YmYsMHhjMCwweDBiLDB4OTUsMHgwMiwweGEwLDB4MDAsMHhiYiB9LAorICAxNiwgMHhhYmQwLCAwLCB7MHgwNSwweDM3LDB4YzAsMHg4OSwweGYwLDB4MGEsMHgwZCwweGM4LDB4YmYsMHgwOCwweDJhLDB4ODAsMHgwOCwweGYwLDB4MDIsMHgzMiB9LAorICAxNiwgMHhhYmUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MDEsMHhiMywweDAyLDB4MjQsMHhlMCB9LAorICAxNiwgMHhhYmYwLCAwLCB7MHgwYSwweDMwLDB4MTIsMHg4MCwweDAzLDB4YTMsMHgwMCwweGE4LDB4MDAsMHgwMiwweGI4LDB4MjIsMHhjMCwweDAwLDB4YjMsMHgwMCB9LAorICAxNiwgMHhhYzAwLCAwLCB7MHgyOCwweGMxLDB4MGIsMHgwNCwweDAyLDB4MDgsMHgwMCwweGI5LDB4NDAsMHgyOCwweGMwLDB4MGIsMHgzMCwweDAyLDB4MDMsMHgwNCB9LAorICAxNiwgMHhhYzEwLCAwLCB7MHhiMywweDQ0LDB4MjAsMHgwMCwweDRhLDB4MzAsMHgwMiwweDM4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhYzIwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgyMCwweDE3LDB4YTAsMHg2NSwweGVjLDB4MDgsMHgzOCwweDAyLDB4YzIsMHg0MSwweGIzLDB4OTIsMHgyYiB9LAorICAxNiwgMHhhYzMwLCAwLCB7MHg2NCwweDBhLDB4MzgsMHgwMiwweDM2LDB4MDEsMHhiNywweDkwLDB4MmQsMHhlMCwweDAzLDB4ZjgsMHgwMCwweDlhLDB4MDAsMHhiNSB9LAorICAxNiwgMHhhYzQwLCAwLCB7MHg4MCwweDJkLDB4ZTAsMHg4OSwweDc4LDB4MTIsMHgxZSwweDAwLDB4YjcsMHg4MCwweDI5LDB4ZTAsMHgwYSwweDc4LDB4MDIsMHgwOCB9LAorICAxNiwgMHhhYzUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHg3MywweGIwLDB4MjQsMHhjOCB9LAorICAxNiwgMHhhYzYwLCAwLCB7MHg0ZSwweDMwLDB4MGEsMHg4MCwweDAyLDB4ZTIsMHgwMCwweDM4LDB4OTQsMHgwZSwweDMxLDB4YTIsMHhjOCwweDAwLDB4NzMsMHgwMCB9LAorICAxNiwgMHhhYzcwLCAwLCB7MHgxOCwweGM0LDB4MDUsMHgwMCwweDAzLDB4MDAsMHgwMCwweGYzLDB4MDAsMHgzOCwweGMwLDB4MDcsMHhiMSwweDAzLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhYzgwLCAwLCB7MHhmMywweDAxLDB4MzAsMHg0MSwweDBlLDB4YjAsMHgwMywweDkyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhYzkwLCAwLCB7MHg0MCwweDFkLDB4YmQsMHgwMCwweGVmLDB4MTAsMHgyNiwweGM4LDB4MDMsMHhiMSwweDAzLDB4ZTAsMHgwMCwweGVhLDB4ODEsMHg3OCB9LAorICAxNiwgMHhhY2EwLCAwLCB7MHhjNSwweDBjLDB4YjUsMHhlMywweGRjLDB4MDAsMHhjMywweDAwLDB4M2UsMHhjMSwweDBmLDB4ZjAsMHg4MywweGIwLDB4MDAsMHhmZiB9LAorICAxNiwgMHhhY2IwLCAwLCB7MHgwMCwweDM3LDB4YzAsMHgwZCwweGY0LDB4MDMsMHhlNCwweDAwLDB4ZjcsMHgwMCwweDNmLDB4NDAsMHgwZCwweGYwLDB4MDMsMHhkMCB9LAorICAxNiwgMHhhY2MwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVkLDB4MTAsMHhjYiwweDI4LDB4M2UsMHhjMCB9LAorICAxNiwgMHhhY2QwLCAwLCB7MHgwZCwweGIwLDB4MTMsMHhhYywweDEwLDB4ZmIsMHgwMCwweDNhLDB4ODAsMHgwNCwweGI0LDB4MDMsMHhhYywweDAwLDB4ZmIsMHgwNCB9LAorICAxNiwgMHhhY2UwLCAwLCB7MHgzZSwweGMwLDB4MGYsMHhhNCwweGIzLDB4ZTAsMHgwMCwweGZiLDB4ODAsMHgzMiwweGMwLDB4MGYsMHhiMCwweDAzLDB4ZTgsMHgwMCB9LAorICAxNiwgMHhhY2YwLCAwLCB7MHhmYiwweDQ4LDB4YjIsMHg4MCwweDBmLDB4YjAsMHg0MywweGVhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhZDAwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgwMiwweDg3LDB4NDQsMHgzOCwweGMwLDB4OGQsMHgzMCwweDAyLDB4NGMsMHgwMCwweGZmLDB4MDAsMHgyMSB9LAorICAxNiwgMHhhZDEwLCAwLCB7MHhjMCwweDA4LDB4NzAsMHgwMywweDljLDB4MDAsMHhiMywweDUwLDB4MjEsMHhkNCwweDRlLDB4NjIsMHgwMiwweGQwLDB4MDAsMHhiZiB9LAorICAxNiwgMHhhZDIwLCAwLCB7MHgwMCwweDM1LDB4ZDQsMHgwOSwweDcwLDB4MjIsMHhkOCwweDAwLDB4YmYsMHgyMiwweDIxLDB4YzAsMHgwYiwweDcyLDB4MDIsMHhkMiB9LAorICAxNiwgMHhhZDMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4NDAsMHg4NywweDgwLDB4MmQsMHhlMCB9LAorICAxNiwgMHhhZDQwLCAwLCB7MHgwOSwweDc4LDB4MDIsMHhkZSwweDAwLDB4YjYsMHg4MCwweDI5LDB4YTEsMHgyOCwweDdhLDB4MzIsMHhkZSwweDAwLDB4MzcsMHhhMCB9LAorICAxNiwgMHhhZDUwLCAwLCB7MHgyNSwweGUwLDB4MDksMHg3OCwweDA2LDB4ZDIsMHgwMCwweGI3LDB4ODAsMHgyMSwweGU4LDB4MGIsMHg3OSwweDAyLDB4ZGUsMHgwMCB9LAorICAxNiwgMHhhZDYwLCAwLCB7MHhiNywweDkwLDB4MjEsMHhlMCwweDBiLDB4NzksMHgwMiwweGYwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhZDcwLCAwLCB7MHg0OCwweDE0LDB4Y2MsMHgwNCwweDgzLDB4MDEsMHgyOCwweGMwLDB4ODksMHhiMCwweDBhLDB4NGYsMHgwMCwweGIyLDB4MDAsMHgyMCB9LAorICAxNiwgMHhhZDgwLCAwLCB7MHhjNCwweDg4LDB4MzAsMHgxNiwweGNmLDB4MDAsMHhiYiwweDA0LDB4MjAsMHhjMSwweDBhLDB4MzIsMHgwNiwweGMyLDB4MDAsMHhiMyB9LAorICAxNiwgMHhhZDkwLCAwLCB7MHgwMCwweDI0LDB4YzAsMHgwOSwweDMwLDB4NDIsMHhlZiwweDEwLDB4YjMsMHgwMCwweDIwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhkMiB9LAorICAxNiwgMHhhZGEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MDAsMHg0YSwweDAwLDB4M2UsMHg4MCB9LAorICAxNiwgMHhhZGIwLCAwLCB7MHgyZCwweGEwLDB4MGIsMHhhYSwweDgwLDB4ZmUsMHgwMCwweDJiLDB4ODAsMHgwYywweGEwLDB4NDMsMHhmYiwweDMwLDB4ZmEsMHgwMCB9LAorICAxNiwgMHhhZGMwLCAwLCB7MHgzZSwweDgwLDB4MGYsMHhhMCwweDgzLDB4ZmEsMHgwNCwweGZlLDB4MTgsMHgyMiwweDgwLDB4MGYsMHhhMCwweDAzLDB4ZmEsMHg4NCB9LAorICAxNiwgMHhhZGQwLCAwLCB7MHhmMiwweDAwLDB4MzMsMHhhMiwweDBmLDB4YTAsMHgwMywweGYyLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhZGUwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGYwLDB4MDAsMHgzZSwweDAwLDB4MmYsMHg4MCwweDAzLDB4YTAsMHgyMCwweGZjLDB4MDIsMHgzZSB9LAorICAxNiwgMHhhZGYwLCAwLCB7MHgwMCwweDFmLDB4ODQsMHgwMywweGEwLDB4MDAsMHhmOCwweDQwLDB4M2UsMHgwMCwweDRmLDB4ODAsMHgwMSwweGUwLDB4NDAsMHhmOCB9LAorICAxNiwgMHhhZTAwLCAwLCB7MHg0MCwweDNlLDB4MDAsMHgwZCwweDgwLDB4MTMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiB9LAorICAxNiwgMHhhZTEwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGM2LDB4MDAsMHhkOSwweDAwLDB4MzYsMHg0MCB9LAorICAxNiwgMHhhZTIwLCAwLCB7MHgwZiwweDkwLDB4MGIsMHgwNCwweDAwLDB4YzksMHgwMCwweDM2LDB4NjgsMHg2YywweDk0LDB4MDMsMHhlNCwweDIwLDB4YjksMHg5MCB9LAorICAxNiwgMHhhZTMwLCAwLCB7MHgzNiwweDQwLDB4MGMsMHg5NCwweDAzLDB4ZTQsMHgwMCwweDI5LDB4ODAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4MjQsMHgyMCB9LAorICAxNiwgMHhhZTQwLCAwLCB7MHhjOSwweDAwLDB4MzYsMHg0MCwweDBmLDB4OTAsMHgwMywweGMyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhZTUwLCAwLCB7MHg4MCwweDA0LDB4NjYsMHg1MCwweDg5LDB4MDAsMHgyMCwweDUwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwOSwweGQ5LDB4MDAsMHgyMCB9LAorICAxNiwgMHhhZTYwLCAwLCB7MHg0OCwweDQ4LDB4OTAsMHgwNiwweGU0LDB4MDQsMHg5OSwweGEwLDB4MjIsMHg0MCwweDBkLDB4YjgsMHgyMiwweDY0LDB4MDAsMHgwOSB9LAorICAxNiwgMHhhZTcwLCAwLCB7MHg1MCwweDMyLDB4NDAsMHgwYiwweDkwLDB4MDIsMHgyNywweDkwLDB4ODksMHg0MCwweDJhLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhlMCB9LAorICAxNiwgMHhhZTgwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMSwweDI0LDB4MDAsMHg5OSwweDAwLDB4NjYsMHg0MiB9LAorICAxNiwgMHhhZTkwLCAwLCB7MHgwYSwweGQwLDB4MTIsMHgzNCwweDAwLDB4ODUsMHgwMCwweDI2LDB4NDAsMHg0YSwweDkwLDB4MDIsMHhlNCwweDAxLDB4YjksMHgwMSB9LAorICAxNiwgMHhhZWEwLCAwLCB7MHgyNCwweDQwLDB4NTgsMHg5MCwweDEyLDB4YzQsMHgwMCwweDI5LDB4NDAsMHgyZSwweDQwLDB4MGIsMHgxMCwweDBhLDB4MjQsMHg4MCB9LAorICAxNiwgMHhhZWIwLCAwLCB7MHg4OSwweDA1LDB4MjYsMHg0MSwweDBiLDB4OTAsMHgwMiwweGM2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhZWMwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweDgxLDB4MjAsMHg2MSwweDQ4LDB4MDgsMHg1MiwweDAyLDB4MTQsMHg4MSwweDk1LDB4MjAsMHgyMCB9LAorICAxNiwgMHhhZWQwLCAwLCB7MHg0MCwweDBhLDB4MzYsMHgwMiwweGM0LDB4MDAsMHhiMSwweDIwLDB4MDAsMHg0OCwweDQxLDB4MTAsMHg0MiwweDQ0LDB4MDEsMHhhMSB9LAorICAxNiwgMHhhZWUwLCAwLCB7MHgwMCwweDI0LDB4NDgsMHgwYiwweDEyLDB4MTIsMHgwNCwweDgwLDB4ODEsMHgyMCwweDI4LDB4NDgsMHgwYiwweDEyLDB4MDIsMHhjYSB9LAorICAxNiwgMHhhZWYwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHhkOCwweDUwLDB4MzYsMHgwMCB9LAorICAxNiwgMHhhZjAwLCAwLCB7MHgwZSwweDg1LDB4MjMsMHgyMSwweDQyLDB4OGMsMHg1NCwweDM0LDB4MTQsMHgwZSwweDgwLDB4MDIsMHhlMSwweDQwLDB4ZjgsMHg1MCB9LAorICAxNiwgMHhhZjEwLCAwLCB7MHgzNiwweDE0LDB4MDQsMHg4MCwweDAzLDB4ZTEsMHg0NCwweGU4LDB4NTAsMHg3ZSwweDE1LDB4MGYsMHg4NSwweDAzLDB4MjEsMHg0MiB9LAorICAxNiwgMHhhZjIwLCAwLCB7MHg0YSwweDAwLDB4MzYsMHgxNCwweDBmLDB4ODAsMHgwMywweGVlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhZjMwLCAwLCB7MHg5OCwweDFkLDB4YzQsMHg0MCwweGY5LDB4MTAsMHgxZSwweDQ0LDB4NGUsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGY5LDB4MTAsMHgzZiB9LAorICAxNiwgMHhhZjQwLCAwLCB7MHhjMCwweDBkLDB4OTEsMHgwMywweGY0LDB4MDAsMHhkOSwweDE0LDB4M2UsMHg0NCwweDBmLDB4OTAsMHgwMywweDc0LDB4MDAsMHhkZCB9LAorICAxNiwgMHhhZjUwLCAwLCB7MHgwMCwweDdhLDB4NDQsMHgwZiwweDkxLDB4MDMsMHhmNCwweDQwLDB4ZjksMHgzOCwweDNmLDB4NDQsMHgwZiwweDkzLDB4ODMsMHhlNyB9LAorICAxNiwgMHhhZjYwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMSwweGY2LDB4ODAsMHhmOSwweGE0LDB4M2YsMHg2OCB9LAorICAxNiwgMHhhZjcwLCAwLCB7MHgwZSwweDllLDB4NDMsMHg2NywweDgwLDB4ZDksMHhlNCwweDNmLDB4NDEsMHgwZiwweGQ4LDB4NDMsMHgwNCwweDAwLDB4ZWQsMHhjMCB9LAorICAxNiwgMHhhZjgwLCAwLCB7MHgzNiwweDQwLDB4MGMsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGQ1LDB4NDAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDAzLDB4ZjQsMHgwMCB9LAorICAxNiwgMHhhZjkwLCAwLCB7MHhkZCwweDAwLDB4MzIsMHg0MCwweDJjLDB4OWEsMHgwMywweGM2LDB4MDEsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhZmEwLCAwLCB7MHgzOCwweDEwLDB4ZTAsMHgwMCwweGU4LDB4YzAsMHgyZSwweDE0LDB4NGQsMHg4ZiwweDIyLDB4MjMsMHhjMCwweGY4LDB4ZjAsMHhhYSB9LAorICAxNiwgMHhhZmIwLCAwLCB7MHgwMCwweDBjLDB4ODAsMHgwMywweGEyLDB4YTAsMHhkOCwweDgyLDB4MjIsMHgwMCwweDA4LDB4ODAsMHgwMiwweGU4LDB4MDAsMHhkOCB9LAorICAxNiwgMHhhZmMwLCAwLCB7MHg4MCwweDJhLDB4MDAsMHgwOCwweDgwLDB4MDIsMHhlOCwweDA4LDB4ODgsMHhhOCwweDM2LDB4MDAsMHg0OCwweDhhLDB4ODIsMHhjZSB9LAorICAxNiwgMHhhZmQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM1LDB4MDAsMHhiMSwweDQ4LDB4MmUsMHg0MCB9LAorICAxNiwgMHhhZmUwLCAwLCB7MHgwYSwweDEyLDB4MjIsMHg0NCwweDAwLDB4OTEsMHgwNCwweGE0LDB4NDEsMHgwYSwweDk0LDB4MDYsMHgyNCwweDAwLDB4OTEsMHg0MiB9LAorICAxNiwgMHhhZmYwLCAwLCB7MHgyNCwweDQxLDB4MDksMHgxMCwweDAyLDB4ZTQsMHgwMSwweDkxLDB4MjAsMHgyNCwweDQwLDB4MDksMHgxMCwweDAyLDB4YzQsMHgwMSB9LAorICAxNiwgMHhiMDAwLCAwLCB7MHg5MSwweDAwLDB4MmMsMHg0MCwweDA5LDB4MTQsMHgwMiwweGMyLDB4MDEsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMDEwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMCwweGE5LDB4MDAsMHgyZSwweDQwLDB4NDgsMHgxMCwweDAyLDB4MjQsMHgwMCwweGI5LDB4NDAsMHhhYSB9LAorICAxNiwgMHhiMDIwLCAwLCB7MHg0MCwweDE4LDB4YjAsMHgwMiwweGU0LDB4MDgsMHg5OSwweDAwLDB4MjIsMHg0MCwweDE5LDB4OTAsMHg0NiwweGU0LDB4ODAsMHg5OSB9LAorICAxNiwgMHhiMDMwLCAwLCB7MHgwNCwweDJlLDB4NDAsMHgwOSwweDkwLDB4MDIsMHhlNCwweDAxLDB4OTksMHgwNCwweDI2LDB4NTAsMHgwOSwweDkwLDB4MDIsMHhjNiB9LAorICAxNiwgMHhiMDQwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxMSwweGU0LDB4MDAsMHhmOSwweDA2LDB4M2MsMHg0MCB9LAorICAxNiwgMHhiMDUwLCAwLCB7MHgwYSwweDkwLDB4MDMsMHg2NCwweDAyLDB4ZDksMHgwMCwweGI2LDB4NTAsMHgwZSwweDkwLDB4MjMsMHgyNiwweDAxLDB4ZjksMHgwMCB9LAorICAxNiwgMHhiMDYwLCAwLCB7MHgzNiwweDQwLDB4MjksMHg5NCwweDgzLDB4ZTQsMHgwMCwweGQ5LDB4NDgsMHgzNiwweDQwLDB4MGQsMHg5MCwweDAzLDB4YzcsMHgwMCB9LAorICAxNiwgMHhiMDcwLCAwLCB7MHhkMSwweDA3LDB4M2EsMHg1MCwweGNkLDB4OTAsMHgwMywweGU4LDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMDgwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwOCwweGU5LDB4MDAsMHgzZSwweDQwLDB4OGYsMHg5MCwweDAzLDB4YzQsMHgwOCwweGYxLDB4MDAsMHgzYSB9LAorICAxNiwgMHhiMDkwLCAwLCB7MHg2OCwweDhmLDB4OTAsMHgwMywweGE0LDB4NDEsMHhmOSwweDAwLDB4YmUsMHg0MCwweDBlLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSB9LAorICAxNiwgMHhiMGEwLCAwLCB7MHhjMCwweDM4LDB4NDAsMHgyZSwweDkwLDB4MDMsMHhlNiwweDQwLDB4ZTksMHgwMCwweDNlLDB4NjgsMHgwNiwweDkwLDB4MDMsMHhjYSB9LAorICAxNiwgMHhiMGIwLCAwLCB7MHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDAsMHhkOCwweDA1LDB4M2UsMHgwMCB9LAorICAxNiwgMHhiMGMwLCAwLCB7MHgwNywweDgwLDB4MGIsMHgyMCwweDAwLDB4ZTgsMHg0MCwweDNlLDB4MTAsMHgwZCwweDgyLDB4MDMsMHg2MCwweDAwLDB4YzgsMHgwMCB9LAorICAxNiwgMHhiMGQwLCAwLCB7MHhiMiwweDAwLDB4OGQsMHg4MywweDAzLDB4ZTAsMHgwMCwweGQ4LDB4NTAsMHgzYSwweDAwLDB4MWUsMHg4MCwweDAzLDB4ZTEsMHgyNCB9LAorICAxNiwgMHhiMGUwLCAwLCB7MHhmOCwweDAwLDB4YjIsMHgwMCwweDBmLDB4ODAsMHgwMywweDAyLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMGYwLCAwLCB7MHgyOCwweDA1LDB4MzgsMHgwMCwweDhhLDB4MDQsMHgyZiwweDg0LDB4NmEsMHhhMCwweDBiLDB4ZTgsMHgwOCwweDhlLDB4MDAsMHgzZCB9LAorICAxNiwgMHhiMTAwLCAwLCB7MHg4MCwweDg4LDB4ZWMsMHgwMywweDY4LDB4MTAsMHhhNiwweDAxLDB4MzYsMHg4MCwweDA4LDB4YTgsMHgwMCwweGM4LDB4MTAsMHg4ZSB9LAorICAxNiwgMHhiMTEwLCAwLCB7MHgxMCwweDIyLDB4ODAsMHgwOCwweGEwLDB4MDIsMHhmYiwweDIwLDB4YmUsMHg1MSwweDJhLDB4ODAsMHgwYiwweGEwLDB4MDIsMHg4MiB9LAorICAxNiwgMHhiMTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDQxLDB4MjEsMHg5MywweDAwLDB4MmMsMHhmMCB9LAorICAxNiwgMHhiMTMwLCAwLCB7MHgzOSwweDMwLDB4MDYsMHgwYywweDAwLDB4YTMsMHgwMCwweDI4LDB4MDgsMHgyOCwweGJjLDB4MDIsMHgyYywweDAwLDB4ODMsMHg4MCB9LAorICAxNiwgMHhiMTQwLCAwLCB7MHgyYSwweGMwLDB4MDgsMHgzMCwweDAwLDB4Y2MsMHgwMCwweDlhLDB4ODAsMHgyOCwweGMwLDB4MGEsMHgzMCwweDAyLDB4Y2QsMHgwMCB9LAorICAxNiwgMHhiMTUwLCAwLCB7MHhiMywweDA0LDB4NjIsMHhjMSwweDBiLDB4MzAsMHgwMiwweDBhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMTYwLCAwLCB7MHhhMCwweDAxLDB4MWUsMHgwNCwweDA3LDB4MTEsMHgyYywweGQwLDB4MGEsMHgzMiwweDIyLDB4ZGMsMHhjMSwweDg3LDB4MDAsMHg2ZCB9LAorICAxNiwgMHhiMTcwLCAwLCB7MHhkMCwweDA4LDB4MzQsMHgwMiwweDdjLDB4MDAsMHhhNywweDA4LDB4MjQsMHhjOCwweDA4LDB4NzAsMHgwMiwweGRjLDB4ODAsMHgwZiB9LAorICAxNiwgMHhiMTgwLCAwLCB7MHgwMCwweDIxLDB4YzQsMHgwOCwweDczLDB4MDYsMHhkYywweDAwLDB4YjIsMHgwMCwweDYxLDB4YzgsMHgwYiwweDNhLDB4MDIsMHg4OCB9LAorICAxNiwgMHhiMTkwLCAwLCB7MHgwNCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDBhLDB4MDAsMHg1NywweDgxLDB4MmQsMHhhMCB9LAorICAxNiwgMHhiMWEwLCAwLCB7MHgyZCwweDdjLDB4MDIsMHgzZSwweDgyLDB4ZTMsMHhlMCwweDNiLDB4ZTAsMHgwYywweDc4LDB4MDMsMHgxZSwweDIwLDB4YzcsMHg4MCB9LAorICAxNiwgMHhiMWIwLCAwLCB7MHhiOSwweGU4LDB4MmMsMHg3OCwweDAzLDB4ZmYsMHg4MCwweGQ2LDB4ODAsMHgzYiwweGVjLDB4MDIsMHg3YSwweDAzLDB4ZGUsMHgwMCB9LAorICAxNiwgMHhiMWMwLCAwLCB7MHhmNywweDgxLDB4MzEsMHhlYywweDhmLDB4N2MsMHgwMywweDBhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMWQwLCAwLCB7MHgwOCwweDFkLDB4YWMsMHgwMCwweGZiLDB4MDAsMHgxZSwweDgwLDB4MjMsMHhiNiwweDgzLDB4ZWQsMHhhMCwweGRiLDB4NjQsMHgzZSB9LAorICAxNiwgMHhiMWUwLCAwLCB7MHhjMCwweDBlLDB4YjAsMHgwMywweGVkLDB4YzAsMHhmMiwweDAwLDB4M2UsMHhkNCwweDBhLDB4YjAsMHgwMywweGVjLDB4MzAsMHhlZSB9LAorICAxNiwgMHhiMWYwLCAwLCB7MHg2NCwweDNlLDB4YzAsMHgwNywweGIwLDB4YzMsMHhlOCwweDAwLDB4ZmIsMHgwMSwweDNlLDB4YzgsMHgwZiwweGI4LDB4MDMsMHhjMiB9LAorICAxNiwgMHhiMjAwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGY2LDB4MDAsMHhlZiwweDgwLDB4M2IsMHhlMCB9LAorICAxNiwgMHhiMjEwLCAwLCB7MHgwZiwweGY4LDB4NjMsMHg3ZSwweDA0LDB4Y2YsMHhjMCwweGI3LDB4MjAsMHgwZSwweGY4LDB4MDMsMHhmYywweDAwLDB4YzcsMHg4MCB9LAorICAxNiwgMHhiMjIwLCAwLCB7MHgzMywweGYwLDB4MGMsMHhjYywweDAzLDB4ZmUsMHgwOCwweGY3LDB4YzEsMHgzMywweGUwLDB4NGYsMHhmOCwweDAzLDB4YjIsMHg0MCB9LAorICAxNiwgMHhiMjMwLCAwLCB7MHhmZiwweGEwLDB4MzEsMHhlNiwweDBjLDB4ZjgsMHgwMywweDEwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMjQwLCAwLCB7MHhhOCwweDExLDB4OWMsMHgwMCwweGVmLDB4MDIsMHgyMSwweDQwLDB4MmQsMHg3MCwweDAyLDB4MWMsMHgwMCwweGY3LDB4MTAsMHgyOSB9LAorICAxNiwgMHhiMjUwLCAwLCB7MHg0MCwweDA4LDB4NzAsMHgyMiwweGZjLDB4YzAsMHhhNywweDAwLDB4M2QsMHhjMCwweDA4LDB4NDAsMHgwMiwweGRjLDB4MDAsMHhiNyB9LAorICAxNiwgMHhiMjYwLCAwLCB7MHg0MCwweDIxLDB4YzAsMHgwYiwweDcwLDB4MDIsMHhkYSwweDgwLDB4YjcsMHgyNCwweDI5LDB4YzYsMHg0OCwweGYwLDB4MDIsMHgyYSB9LAorICAxNiwgMHhiMjcwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4MDAsMHhhNywweDAwLDB4MjgsMHg4NCB9LAorICAxNiwgMHhiMjgwLCAwLCB7MHgwYiwweDMwLDB4MDIsMHgwYywweDAwLDB4OTMsMHgwMCwweDI1LDB4ODAsMHgwYSwweDYxLDB4MDIsMHhkYywweDAxLDB4YTcsMHgxMCB9LAorICAxNiwgMHhiMjkwLCAwLCB7MHgyNCwweGMwLDB4MDgsMHg0MCwweDgyLDB4ZGMsMHgwMCwweDlmLDB4MDAsMHgyNSwweGM0LDB4MGIsMHg3MCwweDAyLDB4OTQsMHgyNSB9LAorICAxNiwgMHhiMmEwLCAwLCB7MHhiNywweDMyLDB4MjMsMHhjNCwweDFiLDB4NzAsMHgwMiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMmIwLCAwLCB7MHgyMCwweDE0LDB4Y2MsMHgwYywweGEzLDB4MDAsMHgyMCwweDAwLDB4MjksMHgzMCwweDBhLDB4MGMsMHgwMCwweGEzLDB4MDAsMHg2YyB9LAorICAxNiwgMHhiMmMwLCAwLCB7MHgwMCwweDA4LDB4MTAsMHg0MiwweGNkLDB4MTAsMHhhYSwweDAwLDB4YWMsMHhjMCwweDAwLDB4MDQsMHgwMiwweGNkLDB4MDAsMHhiYiB9LAorICAxNiwgMHhiMmQwLCAwLCB7MHgxMCwweDI0LDB4YzAsMHgwMywweDMwLDB4NDIsMHhjMywweDA5LDB4YjMsMHgwMCwweDJjLDB4ZDAsMHgwYSwweDMwLDB4MDIsMHgxOCB9LAorICAxNiwgMHhiMmUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweDgwLDB4MDAsMHhlZiwweDAwLDB4M2EsMHg0MCB9LAorICAxNiwgMHhiMmYwLCAwLCB7MHgwNywweGYwLDB4NDMsMHgzYywweDAwLDB4OWYsMHhjMCwweGI2LDB4MTQsMHgwZSwweDgwLDB4MDYsMHhmYywweDAxLDB4Y2IsMHgwMSB9LAorICAxNiwgMHhiMzAwLCAwLCB7MHgzNywweGMwLDB4YWMsMHhiNCwweDAyLDB4ZmMsMHgwMCwweGQ5LDB4MDEsMHgzNywweGMwLDB4NGIsMHhmMCwweDEzLDB4YWUsMHgwOCB9LAorICAxNiwgMHhiMzEwLCAwLCB7MHhmYiwweDAwLDB4MzMsMHhkMCwweDJlLDB4ZjAsMHgwYiwweDJhLDB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMzIwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGZiLDB4MDUsMHgzZSwweDQwLDB4MGYsMHgzMCwweDAzLDB4YWMsMHgxNCwweGZiLDB4YTAsMHgzYSB9LAorICAxNiwgMHhiMzMwLCAwLCB7MHhjMCwweDBmLDB4ODQsMHg0MywweGVjLDB4MDEsMHhmOSwweDQwLDB4M2UsMHhjMCwweDBmLDB4YTIsMHgwMywweGVjLDB4MjEsMHhmOSB9LAorICAxNiwgMHhiMzQwLCAwLCB7MHgwMCwweDNhLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhlNCwweDIwLDB4ZjAsMHgwMCwweGJhLDB4YzAsMHgwZCwweGIwLDB4MDMsMHhlMCB9LAorICAxNiwgMHhiMzUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGY4LDB4MDAsMHhkNywweDAxLDB4MzUsMHg2OCB9LAorICAxNiwgMHhiMzYwLCAwLCB7MHg2ZCwweGYwLDB4MDMsMHgzYywweDAxLDB4ZTcsMHgwMCwweDMzLDB4YzAsMHgwZCwweGMwLDB4MDMsMHhmYywweDI0LDB4Y2YsMHgwMiB9LAorICAxNiwgMHhiMzcwLCAwLCB7MHgzNywweGMwLDB4MGQsMHhkMiwweDAyLDB4ZmMsMHgwMCwweGRmLDB4MDEsMHgzMywweGMwLDB4NWUsMHg3MCwweDMzLDB4MWMsMHgxOCB9LAorICAxNiwgMHhiMzgwLCAwLCB7MHhjZiwweDQxLDB4MzEsMHhjMiwweDBjLDB4ZjAsMHgwMywweDQwLDB4NDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMzkwLCAwLCB7MHg4MSwweDAwLDB4NmMsMHgwMCwweDhiLDB4MDAsMHgyMiwweDUyLDB4MmEsMHhiMCwweDAzLDB4NmMsMHgwMCwweGFiLDB4MDAsMHgyOCB9LAorICAxNiwgMHhiM2EwLCAwLCB7MHhjMCwweDBhLDB4OGMsMHgwMiwweGVjLDB4MTAsMHg4YiwweGUwLDB4MjIsMHhjMCwweDBmLDB4ODAsMHgwMiwweGNjLDB4MDAsMHg4YiB9LAorICAxNiwgMHhiM2IwLCAwLCB7MHg4MCwweDIyLDB4YzAsMHgwOCwweGIwLDB4MDIsMHgyYSwweDEwLDB4ZDksMHg4MCwweDIyLDB4YzAsMHhjOCwweGIwLDB4MDIsMHhlMCB9LAorICAxNiwgMHhiM2MwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDI0LDB4MDEsMHg5YiwweDAwLDB4MjYsMHg4MCB9LAorICAxNiwgMHhiM2QwLCAwLCB7MHgyOSwweGIwLDB4NjIsMHgwYywweDAwLDB4YWIsMHgwMSwweDZhLDB4MDAsMHgwOCwweDk4LDB4MDIsMHhjYywweDAwLDB4OWIsMHg4MyB9LAorICAxNiwgMHhiM2UwLCAwLCB7MHgyZSwweGMwLDB4Y2IsMHhiNCwweDEyLDB4ZWMsMHgwMywweDhiLDB4ODAsMHgyOCwweGMwLDB4MGEsMHhiMCwweDA2LDB4YTIsMHgwMCB9LAorICAxNiwgMHhiM2YwLCAwLCB7MHg4YiwweDAyLDB4NjIsMHhjMCwweDA4LDB4YjAsMHgwMiwweGUwLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNDAwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMSwweDgzLDB4MTQsMHgyMCwweDAwLDB4MGEsMHgzMCwweDAyLDB4NGMsMHgwMCwweDgzLDB4MDAsMHgyYSB9LAorICAxNiwgMHhiNDEwLCAwLCB7MHg0MCwweDBhLDB4MTAsMHgwMCwweGNjLDB4MDIsMHg5MywweDAwLDB4MjgsMHhjMCwweDBhLDB4MjAsMHgwMiwweGVjLDB4MDAsMHgwMyB9LAorICAxNiwgMHhiNDIwLCAwLCB7MHgwMCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MTYsMHgwMCwweDgwLDB4OTEsMHgwMCwweDYwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhjMiB9LAorICAxNiwgMHhiNDMwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDZjLDB4MDAsMHhkYiwweDAwLDB4MzYsMHg4MCB9LAorICAxNiwgMHhiNDQwLCAwLCB7MHgyZCwweGYwLDB4MDMsMHgzYywweDAwLDB4YWYsMHgwMCwweDNhLDB4ODAsMHgwZCwweDgwLDB4MDMsMHhmYywweDAwLDB4NWIsMHgwMCB9LAorICAxNiwgMHhiNDUwLCAwLCB7MHgzNywweGMwLDB4MDksMHg5MCwweDAzLDB4ZmMsMHgwMCwweGRmLDB4MDAsMHgzMywweGMwLDB4MGEsMHhmMCwweDAzLDB4YTQsMHgyMCB9LAorICAxNiwgMHhiNDYwLCAwLCB7MHhjYiwweDAwLDB4YjMsMHhjMCwweDhjLDB4YjAsMHgwMywweDQwLDB4MDIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNDcwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgwNCwweGZmLDB4MjAsMHgwZiwweDAwLDB4MjcsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHgyZCB9LAorICAxNiwgMHhiNDgwLCAwLCB7MHgwMCwweDBiLDB4ZDAsMHgyNywweGZjLDB4MDAsMHhlZiwweDAwLDB4MzcsMHhjMCwweDBmLDB4YzAsMHg0MywweGZjLDB4MDAsMHhmZiB9LAorICAxNiwgMHhiNDkwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHgwZCwweGYwLDB4MGIsMHhlMCwweDAwLDB4ZjUsMHgwMCwweDNmLDB4YzAsMHgxZiwweGYwLDB4MDMsMHhlOCB9LAorICAxNiwgMHhiNGEwLCAwLCB7MHgwNywweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMSwweGY0LDB4YzAsMHhmYywweDIyLDB4N2YsMHhjMCB9LAorICAxNiwgMHhiNGIwLCAwLCB7MHgwYywweGQwLDB4NDMsMHgzNiwweDAwLDB4YzQsMHg4MSwweDM0LDB4YzAsMHgxYywweDg5LDB4MDcsMHhmMiwweDgwLDB4Y2YsMHg4MCB9LAorICAxNiwgMHhiNGMwLCAwLCB7MHgzMywweDYwLDB4MGYsMHg3OSwweDAzLDB4M2MsMHhlMCwweGNmLDB4MDgsMHgzMywweDQ4LDB4MGQsMHhjNCwweDAzLDB4ZjAsMHg1MCB9LAorICAxNiwgMHhiNGQwLCAwLCB7MHhkYywweDkwLDB4MzcsMHhjYywweDBmLDB4ZjgsMHgwMywweGYwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNGUwLCAwLCB7MHg4MCwweDEwLDB4ZTksMHg5MCwweGI4LDB4ODAsMHg3ZSwweGU0LDB4ODgsMHg5OSwweDBhLDB4MjYsMHgwOCwweGE5LDB4ODAsMHgyMiB9LAorICAxNiwgMHhiNGYwLCAwLCB7MHhmNCwweDJjLDB4OTksMHgwMywweGE3LDB4MDIsMHg4OSwweDgwLDB4MjIsMHgzNCwweDBiLDB4OWEsMHgwMywweDdkLDB4MDAsMHhkZiB9LAorICAxNiwgMHhiNTAwLCAwLCB7MHg0OCwweDJiLDB4NjAsMHgwOCwweDA1LDB4MDIsMHhlNSwweDAwLDB4ODIsMHgyMCwweDIyLDB4YzQsMHg4YiwweGIwLDB4MDIsMHhlMCB9LAorICAxNiwgMHhiNTEwLCAwLCB7MHgwNiwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGM1LDB4MDAsMHhiMCwweDEwLDB4MmMsMHhjMCB9LAorICAxNiwgMHhiNTIwLCAwLCB7MHgyYSwweDAwLDB4MDIsMHhhNCwweDA4LDB4YTgsMHgwNCwweGUwLDB4ODAsMHgwYiwweDAwLDB4MDIsMHhjNCwweDQxLDB4YjIsMHgwNCB9LAorICAxNiwgMHhiNTMwLCAwLCB7MHhhNCwweDBhLDB4MGIsMHhiMCwweDAyLDB4OGMsMHg4MSwweDgzLDB4MjAsMHg2MCwweDUwLDB4OTgsMHgxMiwweDEyLDB4OGIsMHg4MCB9LAorICAxNiwgMHhiNTQwLCAwLCB7MHg4OSwweDAwLDB4MmMsMHhjOCwweDBiLDB4MzAsMHgwMiwweGUyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNTUwLCAwLCB7MHhjMCwweDExLDB4YWMsMHgyMCwweGJiLDB4MDIsMHgyYSwweGMwLDB4MGEsMHg4OCwweDAyLDB4YTQsMHgwOCwweGE5LDB4ODAsMHhhMiB9LAorICAxNiwgMHhiNTYwLCAwLCB7MHhlMSwweDFiLDB4OWMsMHgyMiwweGU2LDB4MDAsMHhiOCwweDQwLDB4MjYsMHgzMCwweDBiLDB4OTAsMHgwMiwweGNjLDB4MDEsMHg5MyB9LAorICAxNiwgMHhiNTcwLCAwLCB7MHgwNCwweDJhLDB4NDAsMHgzOSwweDk4LDB4ODIsMHhlYywweDE0LDB4OGIsMHg2NSwweDJhLDB4YzAsMHgwYiwweGIyLDB4MDIsMHhmOCB9LAorICAxNiwgMHhiNTgwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGU3LDB4MDAsMHhiOCwweDQ4LDB4MmUsMHgwMCB9LAorICAxNiwgMHhiNTkwLCAwLCB7MHgwZSwweDg4LDB4NDMsMHg4NCwweDAwLDB4ZTMsMHhjMSwweDM2LDB4ZTgsMHgwZiwweDljLDB4MTIsMHhlMiwweDgwLDB4ZjMsMHhjMCB9LAorICAxNiwgMHhiNWEwLCAwLCB7MHgzNiwweDcwLDB4NWYsMHhhOCwweDIzLDB4YWMsMHgwMSwweGNiLDB4MDQsMHgyMiwweDQwLDB4NGQsMHg4NCwweDAzLDB4ZTIsMHgwMCB9LAorICAxNiwgMHhiNWIwLCAwLCB7MHhkOCwweDAwLDB4M2UsMHhjMCwweDBmLDB4OTAsMHgwMywweGQwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNWMwLCAwLCB7MHhlMCwweDAxLDB4YjMsMHgwOSwweGZlLDB4MTAsMHgzZSwweDgxLDB4MGQsMHhjMCwweDAzLDB4NzQsMHgwYywweGZmLDB4MDAsMHgzZCB9LAorICAxNiwgMHhiNWQwLCAwLCB7MHhjMSwweDhjLDB4ZDAsMHg4MywweDE0LDB4MDAsMHhjZCwweDIwLDB4M2EsMHg0MCwweDBkLDB4Y2EsMHgwMSwweDdjLDB4MDAsMHhmZiB9LAorICAxNiwgMHhiNWUwLCAwLCB7MHgwMCwweDFmLDB4NDAsMHgwZSwweGMwLDB4MjMsMHhmMiwweDQ2LDB4ZmUsMHg4NCwweDM3LDB4YzAsMHgwZiwweGQ4LDB4MDMsMHhmOCB9LAorICAxNiwgMHhiNWYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDAsMHhkZCwweDAyLDB4M2QsMHg0MCB9LAorICAxNiwgMHhiNjAwLCAwLCB7MHgwZSwweDkwLDB4MDMsMHhhYywweDAwLDB4ZWIsMHg0OCwweDNlLDB4ZDAsMHgwYywweDgwLDB4NjMsMHhhMiwweDA4LDB4Y2EsMHgwMCB9LAorICAxNiwgMHhiNjEwLCAwLCB7MHgzMiwweDA4LDB4MGMsMHhiMCwweDAzLDB4YWMsMHgwOCwweGViLDB4MDAsMHgzZSwweDQwLDB4MGMsMHhkNCwweDgzLDB4NTgsMHgyMCB9LAorICAxNiwgMHhiNjIwLCAwLCB7MHhmOSwweDQyLDB4MzIsMHhjMCwweDBjLDB4YjAsMHgwMywweGQwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNjMwLCAwLCB7MHhjOCwweDA1LDB4MjgsMHgwMiwweGRiLDB4MDAsMHgyZSwweGUwLDB4MjgsMHgzYSwweDAyLDB4MmUsMHgwMCwweGRiLDB4NjAsMHg3NiB9LAorICAxNiwgMHhiNjQwLCAwLCB7MHhlMCwweDBkLDB4OGMsMHgwMiwweGUwLDB4MDAsMHg4OCwweDAyLDB4MzYsMHg1OCwweDY4LDB4MTUsMHg4MywweDdjLDB4MDgsMHhiZiB9LAorICAxNiwgMHhiNjUwLCAwLCB7MHgwMCwweDJkLDB4NjAsMHgwOCwweDkwLDB4MDIsMHhhOSwweDAwLDB4YjMsMHgwNSwweDIzLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhmMiB9LAorICAxNiwgMHhiNjYwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MTAsMHg4MCwweDAwLDB4MGMsMHhjMSB9LAorICAxNiwgMHhiNjcwLCAwLCB7MHgwOCwweDFjLDB4ODIsMHgwNiwweDAwLDB4OTMsMHhjMCwweDIwLDB4ZjYsMHgwYSwweDIwLDB4MDIsMHgwOCwweDAwLDB4OTMsMHgwMCB9LAorICAxNiwgMHhiNjgwLCAwLCB7MHgyNCwweDYwLDB4MDksMHgzYywweDAyLDB4MGMsMHgwMCwweDgzLDB4MDAsMHgyYywweDYwLDB4MDksMHgwMSwweDEyLDB4MDAsMHg0MCB9LAorICAxNiwgMHhiNjkwLCAwLCB7MHhiMCwweDAwLDB4ZTAsMHhjMCwweDA4LDB4MzAsMHgwMiwweDcwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNmEwLCAwLCB7MHgyMCwweDQxLDB4MGEsMHg0MCwweDg2LDB4ODEsMHgyZCwweGUwLDB4NTgsMHgxOCwweDBhLDB4MTYsMHhhMCwweDk3LDB4ODAsMHgyNSB9LAorICAxNiwgMHhiNmIwLCAwLCB7MHhlOSwweDE5LDB4NzgsMHg4MiwweGQ2LDB4MDAsMHg5NywweDgwLDB4MjUsMHhhMCwweDE5LDB4ZjgsMHgwMiwweDVlLDB4MDAsMHhiNyB9LAorICAxNiwgMHhiNmMwLCAwLCB7MHg4MCwweDJkLDB4NjAsMHgyOCwweDQ4LDB4MTIsMHg5NiwweDAwLDB4YjQsMHg4MCwweDIxLDB4ZTAsMHgyOCwweDc4LDB4MDIsMHhjOCB9LAorICAxNiwgMHhiNmQwLCAwLCB7MHgwNCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHg4MSwweDMwLDB4M2MsMHhjMiB9LAorICAxNiwgMHhiNmUwLCAwLCB7MHgwZSwweDAwLDB4MDIsMHg4NCwweDAwLDB4ZTMsMHg0MCwweDI4LDB4ZTgsMHg0YywweDI5LDB4MDMsMHgwYywweDAwLDB4ZDMsMHgwMCB9LAorICAxNiwgMHhiNmYwLCAwLCB7MHgzNCwweGM0LDB4MGQsMHgzMSwweDAzLDB4OGMsMHgwOCwweGUzLDB4MDAsMHgzYywweDQ2LDB4MGMsMHgyMCwweDAzLDB4MDAsMHg4MCB9LAorICAxNiwgMHhiNzAwLCAwLCB7MHhmMiwweDAwLDB4MzIsMHhjMCwweDBjLDB4MzAsMHgwMywweGQyLDB4MDIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNzEwLCAwLCB7MHg0MCwweDE5LDB4YjgsMHgwMCwweGZmLDB4MTAsMHgyZiwweGMwLDB4MGYsMHhjMCwweDIzLDB4YzQsMHg4MCwweDdmLDB4MTAsMHgzZSB9LAorICAxNiwgMHhiNzIwLCAwLCB7MHhjMCwweDBmLDB4YjEsMHgwMywweGRjLDB4MDAsMHhlNywweDAwLDB4M2YsMHg4MCwweDA2LDB4ZjEsMHg0MywweGZjLDB4MDAsMHhmZiB9LAorICAxNiwgMHhiNzMwLCAwLCB7MHgwOCwweDdkLDB4NTAsMHgwZSwweGUxLDB4MjMsMHhiNCwweDA4LDB4ZmUsMHgxMCwweDNmLDB4YzQsMHgwZiwweGYwLDB4MDMsMHhkMCB9LAorICAxNiwgMHhiNzQwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGU0LDB4MDIsMHhjYywweDAwLDB4M2UsMHgwMCB9LAorICAxNiwgMHhiNzUwLCAwLCB7MHgyYywweGMwLDB4MDMsMHgwNCwweDAxLDB4Y2IsMHgwMCwweDMzLDB4NjAsMHgyYywweDkwLDB4MTMsMHhlOCwweDAwLDB4NzMsMHgwMCB9LAorICAxNiwgMHhiNzYwLCAwLCB7MHhiMiwweGMxLDB4MGYsMHhhMCwweDAzLDB4ZWMsMHg4MCwweGZiLDB4MjgsMHgzZSwweDU0LDB4MWYsMHhkMCwweDAzLDB4ZmUsMHgwMiB9LAorICAxNiwgMHhiNzcwLCAwLCB7MHhjOSwweDgwLDB4MzIsMHhjMCwweDBmLDB4YjAsMHgwMywweGNhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNzgwLCAwLCB7MHg0OCwweDExLDB4ODAsMHgwMCwweDg2LDB4MDAsMHgyZCwweDgwLDB4MDgsMHgyMCwweDAyLDB4MTQsMHgwOCwweDg3LDB4MDAsMHgyOSB9LAorICAxNiwgMHhiNzkwLCAwLCB7MHg0MCwweDA4LDB4NzAsMHgwMiwweGRjLDB4MDAsMHhiNywweDAwLDB4MjEsMHhjMCwweDBiLDB4NjAsMHgwMiwweDVjLDB4YTAsMHg5NyB9LAorICAxNiwgMHhiN2EwLCAwLCB7MHgyMCwweDJkLDB4NDgsMHgwYiwweDUwLDB4MDIsMHhkYywweDEwLDB4OGQsMHgwMCwweDIxLDB4YzgsMHgwYiwweDcwLDB4MDIsMHhkMiB9LAorICAxNiwgMHhiN2IwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDlmLDB4MDAsMHg4NSwweDgxLDB4MmMsMHg2MCB9LAorICAxNiwgMHhiN2MwLCAwLCB7MHgxOCwweDU4LDB4MDIsMHhkZSwweDIwLDB4YjcsMHg4MiwweDI4LDB4NjAsMHg1YSwweDc4LDB4NTIsMHhkZSwweDEwLDB4YmYsMHg4MCB9LAorICAxNiwgMHhiN2QwLCAwLCB7MHgyMSwweGUwLDB4NGIsMHg3OCwweDA2LDB4ZGUsMHg0MCwweGI3LDB4YTAsMHgyZCwweDY5LDB4OWIsMHg3OCwweDEyLDB4Y2UsMHgwMCB9LAorICAxNiwgMHhiN2UwLCAwLCB7MHg4NywweDgwLDB4ZTEsMHhlNCwweDBiLDB4NzgsMHgwMiwweGMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiN2YwLCAwLCB7MHg0OCwweDE0LDB4ZWUsMHgwMCwweDgzLDB4MDAsMHgyYywweGMyLDB4MDgsMHgzNiwweDAyLDB4OGMsMHgwOCwweDgzLDB4ZjAsMHg2OCB9LAorICAxNiwgMHhiODAwLCAwLCB7MHg0MCwweDBhLDB4M2UsMHgwMiwweGNkLDB4NDAsMHhiMywweDAwLDB4MjAsMHhlMCwweDBiLDB4MzIsMHgwNiwweDRjLDB4MDAsMHg5YiB9LAorICAxNiwgMHhiODEwLCAwLCB7MHgwMCwweDBjLDB4NDAsMHgwYiwweDMwLDB4MDIsMHhjZCwweDgwLDB4ODMsMHgwOCwweDIwLDB4YzAsMHgwYiwweGIxLDB4MDIsMHhkYSB9LAorICAxNiwgMHhiODIwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGI4LDB4MDAsMHhjZSwweDA4LDB4M2YsMHhiMCB9LAorICAxNiwgMHhiODMwLCAwLCB7MHgwYywweGU0LDB4MjMsMHhkYSwweDAyLDB4ZGUsMHg0MCwweGJiLDB4YjIsMHgwZSwweGUyLDB4NDMsMHhmYSwweDAwLDB4ZmUsMHgwMCB9LAorICAxNiwgMHhiODQwLCAwLCB7MHgzMywweDkwLDB4MGIsMHhlMCwweDAzLDB4ZTgsMHgwMCwweGZhLDB4MDAsMHgzZSwweDgxLDB4MGIsMHhlMCwweDEzLDB4ZjksMHgwOCB9LAorICAxNiwgMHhiODUwLCAwLCB7MHhjZSwweDQwLDB4MzIsMHg4MCwweDBmLDB4YTgsMHgwMywweGZhLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiODYwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgyNCwweDk4LDB4MDgsMHgzYywweDA0LDB4MGYsMHgwMCwweDBiLDB4NjAsMHgwMCwweGY4LDB4NDAsMHgyZSB9LAorICAxNiwgMHhiODcwLCAwLCB7MHgwMywweDBkLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwNiwweDBiLDB4ODAsMHgwMywweGUwLDB4MDAsMHhkOCB9LAorICAxNiwgMHhiODgwLCAwLCB7MHgwMCwweDNjLDB4MDAsMHgwMywweDhjLDB4MjMsMHhlMSwweDAwLDB4ZjgsMHgwMCwweDdlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiB9LAorICAxNiwgMHhiODkwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDIsMHhjOSwweDAwLDB4M2UsMHg0MCB9LAorICAxNiwgMHhiOGEwLCAwLCB7MHg4YywweDkwLDB4MDMsMHgyNSwweDAwLDB4ZTksMHg4MCwweDMyLDB4NDQsMHgwZiwweDk0LDB4MDIsMHhlNCwweDIwLDB4ZjksMHgwMCB9LAorICAxNiwgMHhiOGIwLCAwLCB7MHgzMiwweDcwLDB4MGYsMHg5YSwweDQzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzMiwweDQwLDB4MGMsMHgxMCwweDMzLDB4MjQsMHgxMCB9LAorICAxNiwgMHhiOGMwLCAwLCB7MHhmOSwweDAxLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweDAyLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiOGQwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4ODIsMHgyZSwweDQwLDB4MjgsMHg5MCwweDAyLDB4MjQsMHg4MiwweDgxLDB4YzAsMHhhMiB9LAorICAxNiwgMHhiOGUwLCAwLCB7MHg3MCwweDBiLDB4OWMsMHgwMiwweGU0LDB4MDAsMHgzMSwweDQyLDB4YTIsMHg2MCwweDBiLDB4OTQsMHg4MiwweGU0LDB4MDAsMHhiOSB9LAorICAxNiwgMHhiOGYwLCAwLCB7MHgwMCwweDJhLDB4NDAsMHgwOCwweDk0LDB4YTIsMHgyNSwweDAwLDB4YjksMHgwMCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MGEsMHgyMCB9LAorICAxNiwgMHhiOTAwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDAsMHg4OSwweDY0LDB4MmUsMHg0MCB9LAorICAxNiwgMHhiOTEwLCAwLCB7MHgwOCwweDkwLDB4NDIsMHhhNCwweDAwLDB4ODksMHg2MCwweDIyLDB4NDIsMHgwYiwweDkwLDB4MDIsMHhlNiwweDAwLDB4YjksMHg4MCB9LAorICAxNiwgMHhiOTIwLCAwLCB7MHgyMiwweDQwLDB4MGIsMHg5MCwweDAyLDB4YTQsMHgwNCwweGI5LDB4MDAsMHgyMiwweDQwLDB4MjgsMHg5MCwweDAyLDB4MjQsMHgwNCB9LAorICAxNiwgMHhiOTMwLCAwLCB7MHhiOSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweDBlLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiOTQwLCAwLCB7MHgwOCwweDA0LDB4MDUsMHg4MCwweDgxLDB4MDAsMHgyYywweGMxLDB4NDgsMHgxMCwweDAyLDB4YTQsMHgwMiwweDgxLDB4MDAsMHgyMCB9LAorICAxNiwgMHhiOTUwLCAwLCB7MHg0MCwweDgzLDB4MzQsMHgwMiwweGM0LDB4MDAsMHhiYiwweDAwLDB4MjAsMHhkMCwweDBiLDB4MTQsMHgwMiwweGM0LDB4ODAsMHhiMSB9LAorICAxNiwgMHhiOTYwLCAwLCB7MHgyMCwweGEwLDB4NjgsMHgxOCwweDE0LDB4MWEsMHgwZCwweDAwLDB4YjEsMHg0MCwweDJjLDB4NTAsMHgwYiwweDEwLDB4MDIsMHgwYSB9LAorICAxNiwgMHhiOTcwLCAwLCB7MHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHhjOCwweDAwLDB4M2UsMHgwMCB9LAorICAxNiwgMHhiOTgwLCAwLCB7MHg4YywweDgwLDB4MGIsMHhhMCwweDA0LDB4ZTgsMHgwMCwweDMyLDB4MDAsMHgwNywweDgwLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHgwMCB9LAorICAxNiwgMHhiOTkwLCAwLCB7MHgzMiwweDAwLDB4MWYsMHg4MCwweDAzLDB4YTEsMHg0MCwweGY4LDB4NTAsMHgzMiwweDAwLDB4MGMsMHg4MCwweDAzLDB4MjAsMHgwMCB9LAorICAxNiwgMHhiOWEwLCAwLCB7MHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiOWIwLCAwLCB7MHg5OCwweDFkLDB4ZjQsMHg0NiwweGZkLDB4NDAsMHgzZiwweDUwLDB4MjMsMHhkNCwweDEzLDB4NzQsMHgwNCwweGY1LDB4MDIsMHgzZiB9LAorICAxNiwgMHhiOWMwLCAwLCB7MHg1MCwweDBmLDB4ZDQsMHgwMywweGZkLDB4MDAsMHhiZCwweDAwLDB4MmYsMHg1MCwweDBmLDB4ZDAsMHgwMywweGU0LDB4NDAsMHhmOSB9LAorICAxNiwgMHhiOWQwLCAwLCB7MHgxMCwweDNmLDB4NDQsMHgwZiwweGQ0LDB4MDMsMHhmNSwweDA4LDB4ZmQsMHgwNiwweDNlLDB4NTAsMHgwZiwweGQyLDB4ODMsMHhlNiB9LAorICAxNiwgMHhiOWUwLCAwLCB7MHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGU2LDB4NDAsMHhlZCwweDA0LDB4M2UsMHg0OCB9LAorICAxNiwgMHhiOWYwLCAwLCB7MHgwYywweGIyLDB4ODMsMHhmNCwweDAwLDB4YzEsMHgwMCwweDMyLDB4NDAsMHg4YywweGQwLDB4MDMsMHgzNCwweDAwLDB4ZmQsMHgwMCB9LAorICAxNiwgMHhiYTAwLCAwLCB7MHgzNywweDQwLDB4MGYsMHhkMCwweDAzLDB4ZTYsMHgyMCwweGY5LDB4ODgsMHgzZCwweDYyLDB4MGMsMHhkOCwweDAzLDB4ZmUsMHgyNCB9LAorICAxNiwgMHhiYTEwLCAwLCB7MHhjMSwweDAwLDB4M2UsMHg3OCwweDBmLDB4ZDAsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiYTIwLCAwLCB7MHgzOCwweDEwLDB4ZTEsMHgwMCwweDg4LDB4NDAsMHgyZSwweDEwLDB4MDgsMHhjNCwweDIzLDB4YTAsMHgwOCwweDg4LDB4MDYsMHgyYSB9LAorICAxNiwgMHhiYTMwLCAwLCB7MHgxNCwweDA4LDB4ODAsMHgwMywweDYwLDB4MDQsMHhiOCwweDAwLDB4MjIsMHgwMCwweDBiLDB4ODAsMHgwMiwweGUyLDB4MDAsMHhiOCB9LAorICAxNiwgMHhiYTQwLCAwLCB7MHg4MCwweDJlLDB4MDAsMHgwOCwweDhjLDB4MDIsMHhlMywweDgwLDB4ODgsMHgwMiwweDJlLDB4MzgsMHgwYiwweDg4LDB4MDIsMHgwZSB9LAorICAxNiwgMHhiYTUwLCAwLCB7MHgwNiwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM1LDB4ODAsMHhhMSwweGMwLDB4MmQsMHg3MCB9LAorICAxNiwgMHhiYTYwLCAwLCB7MHgwOCwweDUwLDB4NDIsMHhjNCwweDAwLDB4YTksMHgwMCwweDIwLDB4ZTAsMHgyYSwweDEwLDB4MGEsMHgwNCwweDEwLDB4YjEsMHgwMCB9LAorICAxNiwgMHhiYTcwLCAwLCB7MHgyNCwweDQwLDB4NGIsMHgxMCwweDA2LDB4YzQsMHgyMCwweGIxLDB4MDgsMHg2ZSwweDQwLDB4MGIsMHgxNiwweDgyLDB4YzQsMHgyMCB9LAorICAxNiwgMHhiYTgwLCAwLCB7MHg4MSwweDAwLDB4MmMsMHg1MCwweDBiLDB4OTIsMHg4MiwweDUyLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiYTkwLCAwLCB7MHgxOCwweDExLDB4YTQsMHgwMCwweGE5LDB4MDEsMHgyZSwweDQwLDB4MjgsMHhkMCwweDIwLDB4YTQsMHgwNCwweGE5LDB4MDAsMHgyYSB9LAorICAxNiwgMHhiYWEwLCAwLCB7MHg0MCwweDFhLDB4YjAsMHgxMiwweDI0LDB4MDAsMHhiOSwweDBjLDB4MjIsMHg0MiwweDBiLDB4OTQsMHgwMiwweGU0LDB4MDAsMHhiOSB9LAorICAxNiwgMHhiYWIwLCAwLCB7MHgwMCwweDZlLDB4NDAsMHgwYiwweDk2LDB4MDIsMHhlNCwweDExLDB4ODksMHgyMCwweDZlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHg0NiB9LAorICAxNiwgMHhiYWMwLCAwLCB7MHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU0LDB4YzAsMHhhOSwweGMwLDB4M2UsMHg1MCB9LAorICAxNiwgMHhiYWQwLCAwLCB7MHgwOCwweDljLDB4ODMsMHhlNCwweDAyLDB4ZTksMHgwMCwweGIyLDB4NDAsMHgyYSwweDkyLDB4MTIsMHgyNiwweDQwLDB4ZjksMHg0MCB9LAorICAxNiwgMHhiYWUwLCAwLCB7MHgzNiwweDcwLDB4MGYsMHg5NCwweDAzLDB4ZTQsMHgwNCwweGY5LDB4MDEsMHgzYywweDQwLDB4MGYsMHg5OCwweDAzLDB4ZTYsMHgwMiB9LAorICAxNiwgMHhiYWYwLCAwLCB7MHhjOSwweDIyLDB4M2UsMHg0MCwweDBmLDB4MTAsMHgwMiwweDY4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiYjAwLCAwLCB7MHgyOCwweDAxLDB4ODYsMHgwNCwweGQ5LDB4NDAsMHgxYywweDQwLDB4MGYsMHg5MiwweDIzLDB4YTQsMHhiMCwweGRiLDB4MDQsMHgzYyB9LAorICAxNiwgMHhiYjEwLCAwLCB7MHhjMCwweDBkLDB4OWEsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0NCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSB9LAorICAxNiwgMHhiYjIwLCAwLCB7MHgwMCwweDNlLDB4NDIsMHgyYywweDkwLDB4MjMsMHhlNCwweDgwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHg4ZiwweDkyLDB4MDMsMHg5MiB9LAorICAxNiwgMHhiYjMwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGExLDB4MDAsMHhjOCwweDIwLDB4MzIsMHgwMCB9LAorICAxNiwgMHhiYjQwLCAwLCB7MHg0YywweGMwLDB4OGIsMHgyMCwweDAyLDB4YzgsMHgzMSwweDMyLDB4MjAsMHgyZCwweDg0LDB4MDMsMHhlMSwweDA0LDB4ZjgsMHg0OCB9LAorICAxNiwgMHhiYjUwLCAwLCB7MHhiYSwweDAwLDB4MGYsMHg4OSwweDAzLDB4ZTAsMHgwMCwweGM4LDB4MDAsMHgzMiwweDAwLDB4MGQsMHg4MSwweDEzLDB4MjAsMHgxMCB9LAorICAxNiwgMHhiYjYwLCAwLCB7MHhmOCwweDAwLDB4M2EsMHgwMCwweDBmLDB4ODEsMHgyMywweDAyLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiYjcwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwMCwweDBlLDB4NDAsMHgyMiwweDgwLDB4MjgsMHhhNCwweDAyLDB4MTksMHgwMCwweDUyLDB4ODAsMHhhMiB9LAorICAxNiwgMHhiYjgwLCAwLCB7MHg4MCwweDRkLDB4ZWQsMHg4MiwweGU4LDB4MDAsMHhiNiwweDQyLDB4MjMsMHhiZCwweDBiLDB4ZTgsMHgwMiwweGU4LDB4MDQsMHhkYSB9LAorICAxNiwgMHhiYjkwLCAwLCB7MHgwMCwweDM3LDB4ODAsMHgwOCwweGUwLDB4MDIsMHgzYSwweDIwLDB4YmEsMHgwMCwweDIyLDB4ODAsMHgwYiwweGE4LDB4MGEsMHgwYSB9LAorICAxNiwgMHhiYmEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDAsMHg4MywweDgwLDB4NjAsMHhjMCB9LAorICAxNiwgMHhiYmIwLCAwLCB7MHgwOCwweDI5LDB4MDIsMHgwZCwweDAwLDB4OTIsMHg0MCwweDI0LDB4YzAsMHgwOCwweGI0LDB4MDIsMHhjYywweDAwLDB4YjMsMHgwMCB9LAorICAxNiwgMHhiYmMwLCAwLCB7MHg2OCwweGUwLDB4MWIsMHgzMCwweDAyLDB4Y2MsMHgwMCwweDkzLDB4MDEsMHgyNCwweGMwLDB4NjksMHgzOCwweDAyLDB4NmMsMHgwMCB9LAorICAxNiwgMHhiYmQwLCAwLCB7MHhiMywweDAwLDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiYmUwLCAwLCB7MHhhMCwweDAxLDB4MWMsMHg0MCwweDgzLDB4YzAsMHgyMCwweDQwLDB4MDgsMHgyOCwweDA2LDB4OWMsMHgxOCwweDljLDB4MDIsMHgyNCB9LAorICAxNiwgMHhiYmYwLCAwLCB7MHhjMCwweDA5LDB4NzAsMHgwMiwweGQ0LDB4MDAsMHhiNywweDAwLDB4MjEsMHhjMCwweDBiLDB4NzAsMHgwMiwweGNlLDB4NDAsMHg5NyB9LAorICAxNiwgMHhiYzAwLCAwLCB7MHhiMCwweDI1LDB4NDAsMHgwOCwweDc4LDB4MWEsMHg1OCwweDAwLDB4YmYsMHhhMiwweDY1LDB4YzgsMHgwYiwweDc4LDB4MDIsMHgyMCB9LAorICAxNiwgMHhiYzEwLCAwLCB7MHgwNCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDBlLDB4MDIsMHg4NywweDgwLDB4YjEsMHhhMCB9LAorICAxNiwgMHhiYzIwLCAwLCB7MHgwYywweDY4LDB4MDMsMHgxYSwweDA4LDB4ZDYsMHg5MiwweDM1LDB4ZTQsMHgyOCwweDc4LDB4NDIsMHhkNiwweDEwLDB4ZjUsMHg4MCB9LAorICAxNiwgMHhiYzMwLCAwLCB7MHgzOSwweGEwLDB4MGYsMHg3OCwweDIzLDB4ZGUsMHgzMCwweGQzLDB4YTIsMHgzNSwweGEwLDB4NGQsMHhlOCwweDAzLDB4NWUsMHgwMCB9LAorICAxNiwgMHhiYzQwLCAwLCB7MHhmNywweGQwLDB4M2QsMHhmOCwweDBmLDB4ZjAsMHgwMywweDIyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiYzUwLCAwLCB7MHgwOCwweDFkLDB4YWMsMHgwMCwweGZiLDB4MDQsMHgzZSwweDAwLDB4MGIsMHhhMCwweDAzLDB4NDgsMHgwNCwweGZhLDB4NDEsMHgzYSB9LAorICAxNiwgMHhiYzYwLCAwLCB7MHg1MCwweDBmLDB4YjAsMHgwMywweGU0LDB4MDAsMHhmMSwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGVkLDB4ODgsMHhmYiB9LAorICAxNiwgMHhiYzcwLCAwLCB7MHg0ZCwweDNlLDB4MDAsMHgwZiwweGYwLDB4MDMsMHhiYywweDA4LDB4ZmIsMHgyMCwweDNhLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhjMiB9LAorICAxNiwgMHhiYzgwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGZlLDB4MDAsMHhkYywweDgwLDB4YjMsMHhlMCB9LAorICAxNiwgMHhiYzkwLCAwLCB7MHgwYywweGQ4LDB4MDMsMHhjZSwweDAwLDB4YzgsMHhhMCwweDMxLDB4YTAsMHg4ZCwweGU5LDB4MDMsMHhiZSwweDAwLDB4YjIsMHg4MCB9LAorICAxNiwgMHhiY2EwLCAwLCB7MHgzMywweGUwLDB4MGMsMHhlOCwweDQzLDB4N2UsMHgwNCwweDBmLDB4ODEsMHgzMSwweGU0LDB4MGMsMHhkOCwweDAzLDB4ZjYsMHgwMCB9LAorICAxNiwgMHhiY2IwLCAwLCB7MHhmZiwweDgwLDB4M2YsMHhlMCwweDBmLDB4ZjgsMHgwMywweDAwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiY2MwLCAwLCB7MHhhOCwweDExLDB4OWMsMHgwMCwweGI0LDB4NDAsMHgzNSwweDQwLDB4MDgsMHg1MCwweDgyLDB4ZGUsMHg4MCwweGQ0LDB4OTAsMHgyMSB9LAorICAxNiwgMHhiY2QwLCAwLCB7MHhlMCwweDBkLDB4NTEsMHgwMiwweGQ0LDB4NDAsMHhiNiwweGIwLDB4MmIsMHg5MCwweDBlLDB4ZTUsMHgwMiwweDljLDB4NDAsMHhkNyB9LAorICAxNiwgMHhiY2UwLCAwLCB7MHgyMiwweDE5LDB4NWMsMHgwZCwweDcwLDB4MDIsMHhkOCwweDAwLDB4YjcsMHgyMCwweDJkLDB4YzAsMHgwYiwweGYwLDB4MDMsMHg2YSB9LAorICAxNiwgMHhiY2YwLCAwLCB7MHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4MDAsMHg5MywweDEwLDB4MjEsMHg4MCB9LAorICAxNiwgMHhiZDAwLCAwLCB7MHgwOCwweDU4LDB4MDIsMHhkYywweGMwLDB4OTQsMHgwMCwweDIzLDB4ZDAsMHgwOCwweDcwLDB4YTAsMHhkNCwweDIwLDB4YjUsMHgwMiB9LAorICAxNiwgMHhiZDEwLCAwLCB7MHgyOSwweDgwLDB4MDksMHg2MCwweDgyLDB4MGMsMHgwMCwweDg3LDB4MDIsMHgyNSwweGMwLDB4MTksMHg0MCwweDAyLDB4ZDQsMHgwMCB9LAorICAxNiwgMHhiZDIwLCAwLCB7MHhiNywweDAwLDB4NmQsMHhjMCwweDBiLDB4NzAsMHgwMiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiZDMwLCAwLCB7MHgyMCwweDE0LDB4ZWMsMHgwMCwweGIzLDB4YzAsMHgyMCwweDAxLDB4NDgsMHgxOCwweDAyLDB4Y2MsMHgwMiwweDgxLDB4NDQsMHhhMCB9LAorICAxNiwgMHhiZDQwLCAwLCB7MHhjMCwweDg5LDB4MzgsMHgwMiwweGM3LDB4ODAsMHhiMSwweDAwLDB4MmMsMHgwOSwweDRhLDB4MDAsMHg2MiwweGFjLDB4MDksMHg5MyB9LAorICAxNiwgMHhiZDUwLCAwLCB7MHgwMSwweDI4LDB4NDAsMHgxOSwweDMwLDB4MDIsMHhjZCwweDEwLDB4YjMsMHg5MCwweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhjOCB9LAorICAxNiwgMHhiZDYwLCAwLCB7MHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGJjLDB4MjAsMHhkYiwweDYyLDB4MjIsMHhlMCB9LAorICAxNiwgMHhiZDcwLCAwLCB7MHg2YywweGEwLDB4MDMsMHhlNCwweDAwLDB4OTgsMHgwMCwweDMyLDB4YzAsMHhlYywweDk4LDB4MjMsMHhhZSwweDA4LDB4ZmIsMHgwOCB9LAorICAxNiwgMHhiZDgwLCAwLCB7MHgzYSwweDc4LDB4MDksMHg5MCwweDAzLDB4N2MsMHgxMCwweGNmLDB4MDAsMHgyNiwweDQwLDB4MGMsMHhiMCwweDAzLDB4ZWMsMHgwMCB9LAorICAxNiwgMHhiZDkwLCAwLCB7MHhmZiwweDgwLDB4M2YsMHhjMCwweDBmLDB4OTAsMHgwMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiZGEwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgyMCwweGZiLDB4NDgsMHgzYywweDYxLDB4MGYsMHhhMCwweDQzLDB4ZWQsMHgwMCwweGY4LDB4MjQsMHgzZSB9LAorICAxNiwgMHhiZGIwLCAwLCB7MHg1MCwweDBmLDB4OTAsMHg4MywweGU0LDB4MDAsMHhmYiwweDAwLDB4M2EsMHg1MCwweDBmLDB4ODAsMHg0MywweGVjLDB4MDgsMHhmYiB9LAorICAxNiwgMHhiZGMwLCAwLCB7MHgwMCwweDNlLDB4NDAsMHgwZiwweDQwLDB4MDMsMHhmMCwweDAwLDB4ZmIsMHgwMCwweDNlLDB4YzEsMHgwZiwweDkwLDB4MDMsMHg2MCB9LAorICAxNiwgMHhiZGQwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGZjLDB4MDAsMHhkZCwweGEwLDB4MzIsMHg4MCB9LAorICAxNiwgMHhiZGUwLCAwLCB7MHgwYywweGUwLDB4MDEsMHhmYywweDAwLDB4ZGMsMHg5MSwweDM5LDB4YzAsMHgzYywweDQwLDB4MDMsMHgzNCwweDAwLDB4ZmYsMHg4MCB9LAorICAxNiwgMHhiZGYwLCAwLCB7MHgzZiwweDAwLDB4MGYsMHhkMCwweDA3LDB4ZmMsMHgwMCwweGNiLDB4MDAsMHgzZCwweDQwLDB4MGMsMHhlMCwweDAzLDB4MzgsMHgyMCB9LAorICAxNiwgMHhiZTAwLCAwLCB7MHhjZiwweDAyLDB4M2QsMHhjMCwweDBjLDB4ZDAsMHgwMywweDA4LDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiZTEwLCAwLCB7MHg4MSwweDA0LDB4NmMsMHgwMCwweDAxLDB4NDAsMHgyMiwweDAwLDB4MjgsMHhhMCwweDAyLDB4Y2UsMHg4NiwweDgzLDB4NjQsMHgyMiB9LAorICAxNiwgMHhiZTIwLCAwLCB7MHhmNCwweDA4LDB4OGMsMHgwZiwweDY0LDB4MDAsMHhiYiwweDEwLDB4MmUsMHg2MCwweDBiLDB4OWMsMHgwMywweGFjLDB4MDEsMHhkYiB9LAorICAxNiwgMHhiZTMwLCAwLCB7MHgwMCwweDNlLDB4NjAsMHgwOCwweDhmLDB4MDIsMHgyMywweDQwLDB4OGIsMHgwMCwweDNhLDB4YzAsMHgwZCwweDEwLDB4NDMsMHg2OCB9LAorICAxNiwgMHhiZTQwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHg5OSwweDAwLDB4YTIsMHhjMCB9LAorICAxNiwgMHhiZTUwLCAwLCB7MHgwOCwweDkwLDB4MDIsMHhhNiwweDA3LDB4OTgsMHgwMCwweDAyLDB4YzIsMHg0OCwweDg4LDB4MDIsMHgyYywweDAwLDB4YmEsMHgwMiB9LAorICAxNiwgMHhiZTYwLCAwLCB7MHg2ZSwweDYwLDB4MGEsMHg5OCwweDAyLDB4ZWMsMHgwMCwweDhiLDB4MDEsMHgyZSwweDYwLDB4MDgsMHg5MCwweDAyLDB4MDUsMHgwMCB9LAorICAxNiwgMHhiZTcwLCAwLCB7MHg4YiwweDAwLDB4MmUsMHhjMCwweDA4LDB4YjEsMHgwMiwweDIwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiZTgwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgxMCwweDgxLDB4MDAsMHgyMCwweDQwLDB4MjgsMHgxMCwweDI2LDB4Y2MsMHg4MCwweDgwLDB4MjAsMHhhMCB9LAorICAxNiwgMHhiZTkwLCAwLCB7MHhjYywweDE4LDB4MTQsMHg0MiwweDA0LDB4MDAsMHhiMiwweDIwLDB4NmMsMHg0MCwweDBiLDB4MDAsMHgwMiwweDhjLDB4MDAsMHg4MyB9LAorICAxNiwgMHhiZWEwLCAwLCB7MHgwMCwweDI4LDB4NDAsMHgyOCwweDAwLDB4MDIsMHgwMCwweDAwLDB4ODMsMHgwMCwweDI4LDB4YzAsMHgwOSwweGIwLDB4MDIsMHg0MiB9LAorICAxNiwgMHhiZWIwLCAwLCB7MHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDZjLDB4MDAsMHhkOSwweDAwLDB4MjIsMHg4MCB9LAorICAxNiwgMHhiZWMwLCAwLCB7MHgwYywweDkwLDB4MDMsMHhhYywweDgwLDB4ZGEsMHgyOSwweDJhLDB4ZDIsMHgyOCwweDgwLDB4MDIsMHgyNCwweDAwLDB4ZmIsMHgyMCB9LAorICAxNiwgMHhiZWQwLCAwLCB7MHgzZSwweDAwLDB4MGYsMHg5MCwweDAyLDB4ZmMsMHgwMCwweDhmLDB4MDAsMHgyZSwweDQwLDB4MGMsMHg4MCwweDBiLDB4MjAsMHgwMiB9LAorICAxNiwgMHhiZWUwLCAwLCB7MHhjZiwweDAwLDB4M2UsMHhjMCwweDBjLDB4YjAsMHgwMywweDAwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiZWYwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgwMCwweGZkLDB4MDAsMHgzZiwweDAwLDB4MGYsMHhkMCwweDYzLDB4ZmMsMHg0OSwweGY1LDB4MDAsMHgzZSB9LAorICAxNiwgMHhiZjAwLCAwLCB7MHhjMCwweDBiLDB4YzAsMHgwMSwweGY0LDB4MDAsMHg3ZiwweDQwLDB4M2YsMHg0MCwweDFmLDB4ZDAsMHgwMywweGJjLDB4MDAsMHhmZiB9LAorICAxNiwgMHhiZjEwLCAwLCB7MHgwMCwweDNmLDB4NDAsMHgwZiwweGMwLDB4MDMsMHhmMCwweDAwLDB4ZmYsMHgwMCwweDNiLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhlOCB9LAorICAxNiwgMHhiZjIwLCAwLCB7MHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMSwweGYyLDB4NDAsMHhlYywweGEwLDB4M2YsMHhlMCB9LAorICAxNiwgMHhiZjMwLCAwLCB7MHgwZCwweDQ4LDB4MDMsMHg3ZCwweDgwLDB4ZjQsMHg4MCwweDMzLDB4NmMsMHgwZSwweGM4LDB4MDMsMHgzMiwweDAwLDB4ZGQsMHg5MCB9LAorICAxNiwgMHhiZjQwLCAwLCB7MHgzYiwweGEwLDB4MmQsMHhmMCwweDAzLDB4ZmMsMHhjMCwweGZmLDB4MDAsMHgzYiwweGUwLDB4OGUsMHhmMCwweDAzLDB4M2MsMHgwNCB9LAorICAxNiwgMHhiZjUwLCAwLCB7MHhlYywweDYwLDB4MzEsMHgwMCwweDBjLDB4ZjAsMHgwMywweGIwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiZjYwLCAwLCB7MHg4MCwweDEwLDB4ZWMsMHgwMCwweGQ5LDB4YzEsMHgyZSwweGUxLDB4MGQsMHg4OCwweDAyLDB4M2MsMHg4MCwweGY4LDB4ODAsMHgzNiB9LAorICAxNiwgMHhiZjcwLCAwLCB7MHg3ZCwweDE4LDB4YTAsMHgwMiwweDI4LDB4YjAsMHhlYSwweDIwLDB4MjIsMHgyMCwweDA4LDB4NzcsMHgwMiwweGZkLDB4NTAsMHhiYiB9LAorICAxNiwgMHhiZjgwLCAwLCB7MHg4MCwweDIyLDB4NDAsMHgwYiwweGY0LDB4NDIsMHgzZCwweDgwLDB4ODgsMHgzMSwweDIyLDB4MTIsMHgwOCwweGY2LDB4MDIsMHhlMCB9LAorICAxNiwgMHhiZjkwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4MDAsMHg4MCwweDExLDB4MmUsMHhjMSB9LAorICAxNiwgMHhiZmEwLCAwLCB7MHgwOCwweDAwLDB4MDIsMHg0ZCwweDgwLDB4YjgsMHgwMCwweDIwLDB4MDAsMHgwYSwweDAyLDB4ODIsMHgwMCwweDAwLDB4OTksMHgyMCB9LAorICAxNiwgMHhiZmIwLCAwLCB7MHgyMiwweGMwLDB4MDksMHgzMCwweDgyLDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyOCwweGNhLDB4MGIsMHgzNCwweDgyLDB4MGQsMHgyMCB9LAorICAxNiwgMHhiZmMwLCAwLCB7MHg4MCwweDAwLDB4YTAsMHg4YywweDA4LDB4MzQsMHg4MiwweGEyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiZmQwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHg0MCwweDk5LDB4ODAsMHgyZSwweGMyLDB4MDksMHg5NCwweDAyLDB4MmMsMHgwMCwweGE5LDB4ODAsMHgyNiB9LAorICAxNiwgMHhiZmUwLCAwLCB7MHg2MCwweDA4LDB4MzgsMHg0MiwweDIyLDB4MjAsMHhiYSwweDQxLDB4NjIsMHg0NiwweDNiLDB4YjAsMHgwMiwweGVjLDB4MDEsMHhiYiB9LAorICAxNiwgMHhiZmYwLCAwLCB7MHg4MCwweDIyLDB4NDAsMHgwYiwweGIwLDB4NDYsMHgwYywweDE4LDB4ODgsMHhjMCwweDIyLDB4MjIsMHgwOCwweGIwLDB4MDYsMHhmMCB9LAorICAxNiwgMHhjMDAwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGNjLDB4MDAsMHhjOSwweDgxLDB4M2MsMHhjMSB9LAorICAxNiwgMHhjMDEwLCAwLCB7MHgwYywweGE5LDB4MjMsMHg2YywweDAwLDB4YjIsMHg4MCwweDMyLDB4NzgsMHgwYSwweDhhLDB4MGIsMHgyNiwweDAwLDB4OTksMHgwMSB9LAorICAxNiwgMHhjMDIwLCAwLCB7MHgzMCwweGUwLDB4MGQsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGI5LDB4MDAsMHgzYSwweGMwLDB4MWUsMHhiMCwweDAzLDB4MmMsMHgwMCB9LAorICAxNiwgMHhjMDMwLCAwLCB7MHhjYiwweDgwLDB4MzIsMHg2MSwweDBjLDB4YjAsMHgxMywweDkwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMDQwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgxMCwweGRkLDB4MDAsMHgzZiwweGMyLDB4MGYsMHhlOCwweDAzLDB4YWMsMHgwMCwweGZlLDB4MDAsMHgzZCB9LAorICAxNiwgMHhjMDUwLCAwLCB7MHg0MCwweDBmLDB4YzAsMHg0MywweGY4LDB4MTAsMHhlZiwweDE0LDB4YjcsMHhlMCwweDBjLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmNSB9LAorICAxNiwgMHhjMDYwLCAwLCB7MHgwMiwweDNmLDB4NDQsMHg0ZiwweGIwLDB4NGIsMHhmYywweDAyLDB4ZDQsMHgwNCwweDNkLDB4NDAsMHgyZiwweGYwLDB4MDMsMHhmOCB9LAorICAxNiwgMHhjMDcwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDAsMHhmOSwweDA4LDB4M2UsMHg2MCB9LAorICAxNiwgMHhjMDgwLCAwLCB7MHgwZCwweGEwLDB4MDMsMHhhYywweDAwLDB4ZTgsMHg1MCwweDMyLDB4MDAsMHgwYywweDg0LDB4MDMsMHhhNSwweDAwLDB4ZTksMHgwMCB9LAorICAxNiwgMHhjMDkwLCAwLCB7MHgzYSwweGQ4LDB4MGYsMHhiMCwweDAzLDB4MmMsMHgwMCwweGY5LDB4MDAsMHgzYSwweGMwLDB4MGYsMHgzMCwweDAzLDB4MmMsMHgwMCB9LAorICAxNiwgMHhjMGEwLCAwLCB7MHhjYiwweDQ0LDB4M2UsMHhkNCwweDBlLDB4YjAsMHgwMywweGQwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMGIwLCAwLCB7MHhjOCwweDA1LDB4MmMsMHgwOCwweGI5LDB4ODAsMHgyZSwweGMwLDB4MGEsMHgzMCwweDQyLDB4M2MsMHgwMCwweDg5LDB4MDQsMHg3NiB9LAorICAxNiwgMHhjMGMwLCAwLCB7MHg2MCwweDA4LDB4OTAsMHg2MiwweDIwLDB4MDAsMHg4MiwweDA0LDB4MjIsMHhkMCwweDA4LDB4ZjAsMHg0MywweDdjLDB4MDAsMHhiYiB9LAorICAxNiwgMHhjMGQwLCAwLCB7MHg4MiwweDIyLDB4NDAsMHgwYiwweGYwLDB4NDIsMHgzYywweDAwLDB4OGEsMHhjMCwweDJlLDB4YzEsMHgwOCwweGYwLDB4MDIsMHhmMiB9LAorICAxNiwgMHhjMGUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MTAsMHhiMiwweGQwLDB4MmMsMHhjMCB9LAorICAxNiwgMHhjMGYwLCAwLCB7MHgyOSwweDE4LDB4MDIsMHg4YywweDA0LDB4YTEsMHgwMCwweDI0LDB4OWMsMHgwOCwweDEwLDB4MDIsMHg4MCwweDAwLDB4YTEsMHgwMSB9LAorICAxNiwgMHhjMTAwLCAwLCB7MHgwYywweGMxLDB4MmIsMHgzMCwweDUyLDB4OGMsMHgwNCwweGIzLDB4MDEsMHgyOCwweDQwLDB4NGIsMHgzMCwweDAyLDB4NGMsMHgwMCB9LAorICAxNiwgMHhjMTEwLCAwLCB7MHg5MCwweDIwLDB4MmMsMHgyMCwweDBhLDB4MzAsMHgwMiwweGY4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMTIwLCAwLCB7MHgyMCwweDQxLDB4MWUsMHgwMCwweGI3LDB4YTIsMHgyNSwweGU4LDB4OGEsMHg2OCwweDAyLDB4MWUsMHgwMCwweDg1LDB4ODAsMHgyNSB9LAorICAxNiwgMHhjMTMwLCAwLCB7MHg4MCwweDg4LDB4ZTgsMHgwMiwweDNlLDB4MDAsMHg4NSwweDgwLDB4MmYsMHhlNCwweDI4LDB4NzgsMHgwMiwweGRlLDB4MDAsMHhiNyB9LAorICAxNiwgMHhjMTQwLCAwLCB7MHg4MCwweDYxLDB4ZTAsMHgwMywweDc4LDB4MDIsMHg1ZSwweDgyLDB4YjcsMHg4MiwweDJkLDB4ZTAsMHgwOCwweDc4LDB4MDIsMHhjOCB9LAorICAxNiwgMHhjMTUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBkLDB4MDAsMHhmMCwweDEwLDB4M2MsMHg4MCB9LAorICAxNiwgMHhjMTYwLCAwLCB7MHgwZCwweDEwLDB4ODMsMHg4YywweDAwLDB4ZTIsMHg1MCwweDI2LDB4MDQsMHgwYywweDExLDB4MDMsMHg4OCwweDQwLDB4ZWIsMHgwMCB9LAorICAxNiwgMHhjMTcwLCAwLCB7MHgzYywweGM0LDB4MGYsMHgzMCwweDAzLDB4OGMsMHgwMCwweGYzLDB4MDgsMHgzOCwweDQwLDB4MDcsMHgzMCwweDAzLDB4NmUsMHg0MCB9LAorICAxNiwgMHhjMTgwLCAwLCB7MHhkMCwweDA4LDB4M2MsMHg4OCwweDBlLDB4MzAsMHg0MywweGQyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMTkwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwMCwweGZiLDB4MzQsMHgzYywweGM5LDB4NGUsMHhiMCwweDIzLDB4ZWQsMHgyMCwweGZiLDB4MDQsMHgzZiB9LAorICAxNiwgMHhjMWEwLCAwLCB7MHhjOCwweDhmLDB4NzAsMHg1MywweDRjLDB4MDAsMHhlYiwweDEwLDB4MzEsMHhjNSwweDBlLDB4ZjQsMHgwMywweDZkLDB4MDAsMHhmMyB9LAorICAxNiwgMHhjMWIwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHgwZiwweGY0LDB4MGIsMHhiYywweDAwLDB4Y2QsMHgwMCwweDNmLDB4YzAsMHgwZiwweGY0LDB4ODMsMHhkMCB9LAorICAxNiwgMHhjMWMwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGNlLDB4MDQsMHhjOSwweDA0LDB4YjAsMHhjMSB9LAorICAxNiwgMHhjMWQwLCAwLCB7MHgwZiwweDk4LDB4MTMsMHg2YywweDkwLDB4Y2IsMHgwMiwweDNlLDB4YzAsMHg0ZiwweGIwLDB4NjMsMHhlNCwweDAwLDB4ZjEsMHg4MCB9LAorICAxNiwgMHhjMWUwLCAwLCB7MHgxMiwweGMwLDB4MGMsMHhiNSwweDAzLDB4ZWMsMHhjMCwweGNmLDB4ODMsMHgzMiwweDQwLDB4MGYsMHhiMywweDIzLDB4MmQsMHhhNCB9LAorICAxNiwgMHhjMWYwLCAwLCB7MHhmYiwweDAwLDB4M2UsMHgwMCwweDBmLDB4YjQsMHgwMywweDJhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMjAwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgwMCwweDg3LDB4MDAsMHgyMSwweGMwLDB4MmQsMHg2MCwweDAyLDB4MWMsMHgwMCwweGQ3LDB4MDAsMHgzOSB9LAorICAxNiwgMHhjMjEwLCAwLCB7MHhjMCwweDBiLDB4NjAsMHgwMiwweGRjLDB4MDAsMHhiNSwweDAwLDB4MjEsMHhjMCwweDJhLDB4NzAsMHgxMiwweGNjLDB4ODAsMHg4NyB9LAorICAxNiwgMHhjMjIwLCAwLCB7MHgwMCwweDM1LDB4YzAsMHgwYiwweDcyLDB4NTIsMHgxYywweDAwLDB4YjcsMHgwMCwweDJkLDB4NDEsMHgwYiwweDMyLDB4MDIsMHgxMiB9LAorICAxNiwgMHhjMjMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweGJlLDB4MDAsMHg4MSwweGMwLDB4MjMsMHgyMCB9LAorICAxNiwgMHhjMjQwLCAwLCB7MHgwYiwweGQ4LDB4MDIsMHg1ZSwweDAwLDB4MDYsMHhjMCwweDJkLDB4YTAsMHgwYiwweDdjLDB4MTIsMHhkZSwweDA4LDB4YmYsMHg4MCB9LAorICAxNiwgMHhjMjUwLCAwLCB7MHhhMSwweGUyLDB4MmEsMHg3YSwweDAyLDB4ZGUsMHgwMCwweDkzLDB4ODAsMHgyNSwweDYwLDB4MGIsMHg3OCwweDFlLDB4NWUsMHg1MCB9LAorICAxNiwgMHhjMjYwLCAwLCB7MHhiNywweDgwLDB4MmQsMHhhMCwweDBiLDB4NzgsMHgwMiwweDMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMjcwLCAwLCB7MHg0OCwweDE0LDB4Y2UsMHgwMCwweDgzLDB4NjAsMHgyMCwweGMwLDB4MDksMHgzMSwweDAyLDB4MmMsMHgwMCwweDkzLDB4MDAsMHgyOCB9LAorICAxNiwgMHhjMjgwLCAwLCB7MHhjMCwweDFiLDB4YjAsMHgwNiwweGNjLDB4ODAsMHhiMywweDQ4LDB4MjAsMHhmMCwweDBhLDB4MzAsMHgwMiwweGVjLDB4MDAsMHg5MyB9LAorICAxNiwgMHhjMjkwLCAwLCB7MHg4MCwweDI0LDB4YzAsMHgwYiwweGIwLDB4MDIsMHg0YywweDEwLDB4YjMsMHhjOCwweDJjLDB4ZDIsMHg4YiwweDMwLDB4MDIsMHgxMiB9LAorICAxNiwgMHhjMmEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGJiLDB4MDAsMHhjNiwweGM0LDB4MzEsMHg4MSB9LAorICAxNiwgMHhjMmIwLCAwLCB7MHgwZiwweGUwLDB4MDMsMHg2OCwweDAwLDB4Y2UsMHg4MCwweDNmLDB4YTIsMHgwYiwweGU4LDB4MDMsMHhmOSwweDAwLDB4ZmUsMHg0MCB9LAorICAxNiwgMHhjMmMwLCAwLCB7MHgzMSwweDgwLDB4NmUsMHhhMCwweDA3LDB4ZTgsMHgwMCwweGRhLDB4MDAsMHgyNiwweDgxLDB4MGYsMHhhMCwweDAyLDB4NjgsMHgwMSB9LAorICAxNiwgMHhjMmQwLCAwLCB7MHhmNiwweGUwLDB4M2QsMHg5MiwweDBmLDB4YTAsMHgwMywweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMmUwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHhjMiwweGY4LDB4MDQsMHgzZSwweDE0LDB4MGYsMHg4MCwweDEzLDB4ZTAsMHgxMCwweGY4LDB4MDEsMHgzZSB9LAorICAxNiwgMHhjMmYwLCAwLCB7MHgxMCwweDBmLDB4ODAsMHg0MywweGUwLDB4MDAsMHhiOCwweDAwLDB4M2UsMHgwMCwweDQ3LDB4ODAsMHgwMywweGUwLDB4MDIsMHhlOCB9LAorICAxNiwgMHhjMzAwLCAwLCB7MHgxMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDcsMHhhMCwweDAwLDB4ZjgsMHgwMCwweDJlLDB4MDAsMHgwZiwweDgwLDB4MGIsMHhkMiB9LAorICAxNiwgMHhjMzEwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDAsMHhmOSwweDAxLDB4MzIsMHg0MCB9LAorICAxNiwgMHhjMzIwLCAwLCB7MHg4YywweDkwLDB4MDMsMHhlNCwweDAwLDB4YzksMHgwMCwweDM2LDB4NDIsMHgwZiwweDkwLDB4MDMsMHhhNCwweDAwLDB4YzksMHgwMCB9LAorICAxNiwgMHhjMzMwLCAwLCB7MHgzZSwweDQyLDB4MGQsMHg5MCwweDAzLDB4NjQsMHgwMCwweGQ5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDBiLDB4NjQsMHgwMCB9LAorICAxNiwgMHhjMzQwLCAwLCB7MHhmOSwweDkwLDB4MzIsMHg0MSwweDBjLDB4OTAsMHgwMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMzUwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweGI5LDB4YzgsMHhhMiwweDYwLDB4MGEsMHg5MiwweDAyLDB4ZTQsMHgwMCwweDg5LDB4NDAsMHgyZSB9LAorICAxNiwgMHhjMzYwLCAwLCB7MHg1OCwweDBiLDB4OTAsMHgwMiwweDA0LDB4MDAsMHhkOSwweDAwLDB4MmUsMHg0MiwweDA4LDB4OTAsMHgwMiwweGU0LDB4MDQsMHg4OSB9LAorICAxNiwgMHhjMzcwLCAwLCB7MHgwMCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MDYsMHgyNCwweDA0LDB4YjksMHgwOCwweDJhLDB4NDAsMHg0OCwweDkwLDB4MTIsMHgyMCB9LAorICAxNiwgMHhjMzgwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDAsMHhiOSwweDEwLDB4MjIsMHg0NCB9LAorICAxNiwgMHhjMzkwLCAwLCB7MHgwOCwweDkwLDB4MDIsMHhlNCwweDAwLDB4ODksMHgwMCwweDIyLDB4NDUsMHg4YiwweDkwLDB4MDIsMHhhNCwweDAwLDB4ODksMHgwMCB9LAorICAxNiwgMHhjM2EwLCAwLCB7MHgyYSwweDQwLDB4MDksMHg5MCwweDAyLDB4ZTQsMHgwMCwweDk5LDB4ODAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDI2LDB4MjQsMHgwMCB9LAorICAxNiwgMHhjM2IwLCAwLCB7MHhiOSwweDAxLDB4MjIsMHg3MCwweDA5LDB4MTAsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjM2MwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHgwOCwweGIxLDB4MjAsMHgyMCwweDQwLDB4MGEsMHgxMCwweDAyLDB4YzQsMHg4MCwweDgzLDB4MDAsMHgyYyB9LAorICAxNiwgMHhjM2QwLCAwLCB7MHg1MCwweDRiLDB4MTAsMHgwMiwweDI0LDB4MDAsMHg5MSwweDAwLDB4MmUsMHg0MCwweDA4LDB4MTIsMHgwMiwweGM0LDB4ODEsMHg4MSB9LAorICAxNiwgMHhjM2UwLCAwLCB7MHhhMiwweDZjLDB4NDAsMHgwYiwweDEyLDB4MDIsMHgwNCwweDgwLDB4YjksMHgyMCwweDJhLDB4NDgsMHgyOSwweDEyLDB4MDIsMHgwMiB9LAorICAxNiwgMHhjM2YwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYxLDB4NDAsMHhmOCwweDAwLDB4MzIsMHg4MCB9LAorICAxNiwgMHhjNDAwLCAwLCB7MHgwOCwweDgwLDB4MDMsMHhlMSwweDQyLDB4YzgsMHgwMCwweDMyLDB4MDAsMHgxZiwweDg1LDB4MDMsMHhhMSwweDQwLDB4YzgsMHg1MCB9LAorICAxNiwgMHhjNDEwLCAwLCB7MHgzYSwweDAwLDB4OGQsMHg4NSwweDAzLDB4NjEsMHg0MCwweGQ4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHgwNSwweDAzLDB4MjEsMHg0MCB9LAorICAxNiwgMHhjNDIwLCAwLCB7MHhmOCwweDUwLDB4MzIsMHgxNCwweDBkLDB4ODUsMHgwYiwweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNDMwLCAwLCB7MHg5OCwweDFkLDB4ZjQsMHgwNCwweGZkLDB4MTAsMHgzZiwweDQwLDB4MGYsMHg1MCwweDAzLDB4YzQsMHg0MCwweGZkLDB4MDAsMHgzZiB9LAorICAxNiwgMHhjNDQwLCAwLCB7MHg1MSwweDBmLDB4ZDAsMHgwMywweGY0LDB4MDAsMHhmZiwweDAxLDB4M2QsMHg0MCwweDBmLDB4OTEsMHgwMywweGU0LDB4NDAsMHhmZCB9LAorICAxNiwgMHhjNDUwLCAwLCB7MHgxMCwweDNmLDB4NGEsMHgwZiwweDkxLDB4MDMsMHhlNCwweDQwLDB4ZmQsMHgxMCwweDNmLDB4NDQsMHgwZSwweDkxLDB4MDMsMHhlNiB9LAorICAxNiwgMHhjNDYwLCAwLCB7MHgwMiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGM1LDB4MDAsMHhjZCwweDAwLDB4MzEsMHg0MCB9LAorICAxNiwgMHhjNDcwLCAwLCB7MHgwZCwweGQwLDB4NDMsMHhlNCwweDAwLDB4Y2QsMHgwMCwweDMzLDB4NDAsMHg0ZiwweDExLDB4MDIsMHhlNCwweDA0LDB4YzEsMHgwMCB9LAorICAxNiwgMHhjNDgwLCAwLCB7MHgzZCwweDQwLDB4MGMsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGVkLDB4YTQsMHgzMiwweDUwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCB9LAorICAxNiwgMHhjNDkwLCAwLCB7MHhmZCwweDAwLDB4M2YsMHg0MCwweDBmLDB4OTAsMHgwMywweGM2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNGEwLCAwLCB7MHgzOCwweDEwLDB4ZTIsMHgwOCwweGQ4LDB4MDAsMHgzMiwweDAxLDB4MDAsMHg4MCwweDEyLDB4YzAsMHgwMCwweDQ4LDB4MDAsMHgzNiB9LAorICAxNiwgMHhjNGIwLCAwLCB7MHg4MCwweDBiLDB4OGEsMHgwMiwweGUwLDB4MDAsMHhhOCwweDAwLDB4MmUsMHgwMCwweDBmLDB4ODAsMHgwMiwweGUwLDB4MDAsMHg4OCB9LAorICAxNiwgMHhjNGMwLCAwLCB7MHg1MCwweDM0LDB4MjgsMHgwYiwweDgwLDB4MDIsMHhlMCwweDAwLDB4YjgsMHgwMCwweDJlLDB4MDAsMHgwYiwweDgwLDB4MDIsMHhjZSB9LAorICAxNiwgMHhjNGQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4ODAsMHg4MSwweDAwLDB4MjYsMHg0MCB9LAorICAxNiwgMHhjNGUwLCAwLCB7MHgwOSwweDE4LDB4MDIsMHhjNCwweDA4LDB4MjEsMHgwMCwweDI4LDB4NDAsMHg4YiwweDEwLDB4MDIsMHhjNCwweDAwLDB4YjEsMHgwMSB9LAorICAxNiwgMHhjNGYwLCAwLCB7MHgyZSwweDQwLDB4MTgsMHgxMCwweDAyLDB4YzQsMHgwMCwweGExLDB4MDEsMHgyMCwweDQ4LDB4MWIsMHgxMCwweDAyLDB4YzQsMHgwMCB9LAorICAxNiwgMHhjNTAwLCAwLCB7MHhiMSwweDAwLDB4NmMsMHg0MCwweDBiLDB4MTAsMHgxMiwweGMyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNTEwLCAwLCB7MHgxOCwweDExLDB4YTQsMHgwMCwweDk5LDB4ODAsMHhhMiwweDQyLDB4NDgsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGE5LDB4MmEsMHgyNiB9LAorICAxNiwgMHhjNTIwLCAwLCB7MHg0NCwweDBiLDB4OTAsMHg4MiwweGM0LDB4ODEsMHhiOSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHg0MiwweGM0LDB4MDAsMHg4OSB9LAorICAxNiwgMHhjNTMwLCAwLCB7MHgwMCwweDI2LDB4NDAsMHgwYiwweDkwLDB4MDIsMHhlNCwweDAwLDB4YjksMHgwMSwweDJlLDB4NDEsMHgwYiwweDkwLDB4MDIsMHhjNiB9LAorICAxNiwgMHhjNTQwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGM1LDB4MjAsMHhjOSwweDg0LDB4MzAsMHg3MCB9LAorICAxNiwgMHhjNTUwLCAwLCB7MHgwZCwweDkwLDB4MTMsMHhlNCwweDAyLDB4ZTksMHgwMCwweDMyLDB4NzAsMHgwZiwweDk0LDB4MDMsMHhlNCwweDAwLDB4ZjksMHg0MCB9LAorICAxNiwgMHhjNTYwLCAwLCB7MHgzYywweDQ4LDB4MGMsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGUxLDB4MDAsMHgzMiwweDQwLDB4MGYsMHg5MCwweDAxLDB4ZTQsMHgwMCB9LAorICAxNiwgMHhjNTcwLCAwLCB7MHhmOSwweDkwLDB4M2UsMHg2MCwweDBmLDB4OTAsMHgyNiwweGU4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNTgwLCAwLCB7MHgyOCwweDAxLDB4YTUsMHgwMCwweGYxLDB4MDQsMHgzYSwweDQ0LDB4OGYsMHg5MCwweDAzLDB4ZTQsMHgxMCwweGM5LDB4MDQsMHgzZSB9LAorICAxNiwgMHhjNTkwLCAwLCB7MHg2MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhlOSwweDIwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MTAsMHhmOSB9LAorICAxNiwgMHhjNWEwLCAwLCB7MHg5MCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHg4MCwweDNlLDB4NjQsMHgwZiwweDkwLDB4MDcsMHhjYSB9LAorICAxNiwgMHhjNWIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGExLDB4MDAsMHhjOCwweDA0LDB4M2EsMHgwMCB9LAorICAxNiwgMHhjNWMwLCAwLCB7MHgxZSwweDgwLDB4MDMsMHg4MCwweDAzLDB4YzgsMHg0MCwweDJhLDB4MDQsMHgxZiwweDgwLDB4MDMsMHgyMCwweDAwLDB4ODgsMHgwMCB9LAorICAxNiwgMHhjNWQwLCAwLCB7MHgzMiwweDMwLDB4MGMsMHg4MCwweDAzLDB4MjAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGMsMHg4MCwweDAzLDB4ZTAsMHgwMCB9LAorICAxNiwgMHhjNWUwLCAwLCB7MHhjOCwweDgwLDB4M2UsMHgyMCwweDBmLDB4ODAsMHgwMywweGNhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNWYwLCAwLCB7MHgyOCwweDA1LDB4MzgsMHgwMCwweGFlLDB4ZDAsMHgzNywweDgwLDB4MDgsMHhlYywweDQ2LDB4MzgsMHgwMCwweGQ2LDB4MDQsMHgyMyB9LAorICAxNiwgMHhjNjAwLCAwLCB7MHhhMCwweDBiLDB4YTAsMHg0MSwweDc4LDB4MDQsMHhmYSwweDAwLDB4MzcsMHg4MCwweDBkLDB4YTAsMHgwMiwweGE4LDB4MTAsMHhlZSB9LAorICAxNiwgMHhjNjEwLCAwLCB7MHgyMSwweDJlLDB4ODAsMHgwOCwweGEwLDB4MDIsMHhlOCwweDA4LDB4OGUsMHg4MCwweDJmLDB4YTAsMHg4YiwweGEwLDB4MDIsMHhjYSB9LAorICAxNiwgMHhjNjIwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwMSwweDRjLDB4MDIsMHg4MywweGMwLDB4YTgsMHhlOCB9LAorICAxNiwgMHhjNjMwLCAwLCB7MHg0YSwweDM2LDB4MDIsMHg4YywweDAwLDB4MTMsMHhhMCwweDI4LDB4YzIsMHgwYiwweDMwLDB4MDYsMHgwYywweDAwLDB4YjMsMHgwMCB9LAorICAxNiwgMHhjNjQwLCAwLCB7MHgyNCwweDg0LDB4MDksMHgzMCwweDAyLDB4MGMsMHgwMCwweGIzLDB4MjAsMHgyOCwweGMwLDB4MDksMHgzMCwweDAyLDB4Y2MsMHgwMCB9LAorICAxNiwgMHhjNjUwLCAwLCB7MHg4MywweDgwLDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNhLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNjYwLCAwLCB7MHhhMCwweDAxLDB4M2MsMHg0NCwweGFmLDB4NDAsMHgyNSwweGMyLDB4NDgsMHhmOCwweDgyLDB4MWMsMHhjOCwweDlmLDB4MDgsMHgyMSB9LAorICAxNiwgMHhjNjcwLCAwLCB7MHhjMCwweDhiLDB4ZjgsMHgwMiwweDVjLDB4MDAsMHhiZiwweGIwLDB4MjcsMHg4MCwweDA5LDB4M2EsMHgwMiwweDljLDB4MDAsMHhhNSB9LAorICAxNiwgMHhjNjgwLCAwLCB7MHgwMiwweDJkLDB4ZTgsMHgwOSwweDcwLDB4MDIsMHhjZSwweDgwLDB4ODUsMHgwOCwweDJkLDB4YzIsMHgwYiwweDczLDB4MDIsMHhlOCB9LAorICAxNiwgMHhjNjkwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFlLDB4MDAsMHhjNywweDgyLDB4YTksMHhlMCB9LAorICAxNiwgMHhjNmEwLCAwLCB7MHgwYSwweDc4LDB4MDIsMHg5ZSwweDQwLDB4OTcsMHg4NCwweDM5LDB4YTAsMHgwYiwweDdhLDB4ODMsMHgzZiwweDgwLDB4ZDcsMHg5MSB9LAorICAxNiwgMHhjNmIwLCAwLCB7MHgzNSwweGEwLDB4MGQsMHg3YSwweDA5LDB4MWUsMHg0NCwweGY3LDB4ODAsMHgzZCwweGU4LDB4MmQsMHg3YSwweDAzLDB4ZGUsMHg4MiB9LAorICAxNiwgMHhjNmMwLCAwLCB7MHhjNiwweDgwLDB4M2QsMHgyMCwweDRiLDB4N2IsMHgyMywweGVhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNmQwLCAwLCB7MHgwOCwweDFkLDB4YWMsMHgwMCwweGQzLDB4MDAsMHgzZSwweGMxLDB4MGYsMHgzMCwweDAzLDB4ZWQsMHg4MCwweGUzLDB4MDAsMHgzZSB9LAorICAxNiwgMHhjNmUwLCAwLCB7MHg4MCwweDBmLDB4YjYsMHgyMSwweGVjLDB4MDgsMHhkYiwweDIxLDB4M2UsMHg4MCwweDBmLDB4YjUsMHgwMywweDZjLDB4NDAsMHhmOSB9LAorICAxNiwgMHhjNmYwLCAwLCB7MHgwMCwweDNlLDB4ZGMsMHgwZSwweGIyLDB4MDMsMHhlZCwweDQwLDB4ZjksMHgwMiwweDNlLDB4ODAsMHgwZiwweGIwLDB4MDMsMHhjMiB9LAorICAxNiwgMHhjNzAwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGZlLDB4MDAsMHhjZiwweDgwLDB4M2QsMHhlMCB9LAorICAxNiwgMHhjNzEwLCAwLCB7MHgwZiwweGM4LDB4NDMsMHhmZSwweDAwLDB4ZmUsMHg4NCwweDNmLDB4ZTAsMHgwZCwweGY4LDB4YzMsMHhmZiwweDEwLDB4YWYsMHg5MCB9LAorICAxNiwgMHhjNzIwLCAwLCB7MHgzNSwweGEwLDB4MGMsMHhmYywweDAzLDB4M2UsMHgxNCwweGVjLDB4ODQsMHgzZiwweGYwLDB4MGUsMHhmYywweGMzLDB4ZmYsMHgwOCB9LAorICAxNiwgMHhjNzMwLCAwLCB7MHg0ZiwweDgwLDB4MzMsMHhlNCwweDBjLDB4ZjgsMHgwMywweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNzQwLCAwLCB7MHhhOCwweDExLDB4OWMsMHgwMCwweGQ3LDB4YTIsMHgyZCwweGM0LDB4MGMsMHg0MSwweGMyLDB4ZGMsMHgwMCwweDc0LDB4MDAsMHgyNSB9LAorICAxNiwgMHhjNzUwLCAwLCB7MHg4MCwweDBmLDB4NzIsMHg0MiwweGRjLDB4OTAsMHhkNywweDM4LDB4MmQsMHg5OCwweDBhLDB4NzAsMHgwMiwweDFjLDB4MDQsMHg4NiB9LAorICAxNiwgMHhjNzYwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHgwZCwweDcwLDB4MDIsMHhjYywweDAwLDB4ODYsMHgwOCwweDM3LDB4YzYsMHgyOCwweDcwLDB4MDIsMHgyYSB9LAorICAxNiwgMHhjNzcwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4MDAsMHg4NywweDYwLDB4MmQsMHhjMiB9LAorICAxNiwgMHhjNzgwLCAwLCB7MHgwYSwweDUwLDB4MDIsMHhkYywweDAwLDB4YjYsMHgxMCwweDI1LDB4YzIsMHgwOSwweDcwLDB4ODYsMHhkYywweDMwLDB4OTcsMHgwMCB9LAorICAxNiwgMHhjNzkwLCAwLCB7MHgyNSwweDgwLDB4MDgsMHgzMCwweDAyLDB4NWMsMHgwMCwweDg3LDB4MDgsMHgyZCwweGMwLDB4MDgsMHg3MCwweDAyLDB4Y2MsMHg0MCB9LAorICAxNiwgMHhjN2EwLCAwLCB7MHg4NiwweDAwLDB4MjEsMHgwMCwweDA5LDB4NzAsMHgwYSwweDAwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjN2IwLCAwLCB7MHgyMCwweDE0LDB4ZWQsMHg4MCwweDkzLDB4MDAsMHgwYywweGUxLDB4MjgsMHgxOCwweDAyLDB4Y2MsMHgwOCwweGEwLDB4MDAsMHgyNCB9LAorICAxNiwgMHhjN2MwLCAwLCB7MHgxMiwweDFhLDB4MzQsMHgwMiwweGNmLDB4MDQsMHg5MywweDQwLDB4MmMsMHg4MCwweDBhLDB4YjAsMHgyMiwweDRjLDB4MDIsMHg4MSB9LAorICAxNiwgMHhjN2QwLCAwLCB7MHg4MCwweDI4LDB4ZTAsMHgyOCwweDMwLDB4MDIsMHhjYywweDAwLDB4ODgsMHg4MiwweDI0LDB4MjAsMHgwOCwweGIwLDB4MDIsMHgwOCB9LAorICAxNiwgMHhjN2UwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGJmLDB4MjAsMHhjOSwweGUwLDB4MmMsMHhmMSB9LAorICAxNiwgMHhjN2YwLCAwLCB7MHgwZSwweGJkLDB4MDMsMHhmYywweDAwLDB4YjksMHg0MCwweDM2LDB4NDAsMHgwOSwweGY1LDB4MDIsMHhmZCwweDQwLDB4ZmYsMHg4MCB9LAorICAxNiwgMHhjODAwLCAwLCB7MHgzNiwweGEyLDB4MDgsMHhmMCwweDBiLDB4N2MsMHgwMCwweGViLDB4ODAsMHgyZiwweGUwLDB4MGEsMHhmMCwweDQzLDB4ZmMsMHgwMiB9LAorICAxNiwgMHhjODEwLCAwLCB7MHg4YiwweGQwLDB4MzIsMHhmMCwweDBkLDB4ZjAsMHgwMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjODIwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgxMCwweGZiLDB4MDAsMHgzZSwweGM4LDB4MGYsMHg5NCwweDEzLDB4ZWMsMHgwMCwweGY5LDB4NDAsMHgzNiB9LAorICAxNiwgMHhjODMwLCAwLCB7MHg0MCwweDFmLDB4YjAsMHgwMywweGVjLDB4MTAsMHhmYiwweDAxLDB4M2UsMHhkMCwweDBmLDB4YjAsMHgwMywweGFjLDB4MDAsMHhmOSB9LAorICAxNiwgMHhjODQwLCAwLCB7MHgwMCwweDNlLDB4YzQsMHgwZiwweGIwLDB4MDEsMHhlYywweDAwLDB4ZjksMHgwNCwweDNlLDB4NDgsMHgwZiwweGIwLDB4MDMsMHhlMCB9LAorICAxNiwgMHhjODUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGZjLDB4MDAsMHhkZiwweDAwLDB4M2YsMHhjMCB9LAorICAxNiwgMHhjODYwLCAwLCB7MHgwYywweGUwLDB4MDcsMHhmYywweDAwLDB4ZmMsMHgwYSwweDI3LDB4MDAsMHg0ZiwweGYwLDB4MDMsMHhmYywweDAwLDB4ZmYsMHgwOCB9LAorICAxNiwgMHhjODcwLCAwLCB7MHgzMywweDgwLDB4MGMsMHhmMCwweDAwLDB4MmMsMHgwMCwweDVmLDB4MDAsMHgzMywweGMwLDB4MGMsMHhmMCwweDAxLDB4ZmMsMHgwMCB9LAorICAxNiwgMHhjODgwLCAwLCB7MHhmZSwweDAwLDB4MjMsMHg0MCwweDBmLDB4YjAsMHgwMywweDAwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjODkwLCAwLCB7MHg4MSwweDA0LDB4NmMsMHgwMCwweDhiLDB4ODYsMHgyZSwweGUwLDB4NDgsMHg4ZiwweDAyLDB4ZWMsMHgwOCwweGI4LDB4YTAsMHgzNiB9LAorICAxNiwgMHhjOGEwLCAwLCB7MHgzMCwweDRiLDB4YjAsMHgwMywweGFjLDB4MGMsMHg5YiwweDAyLDB4M2MsMHhhMCwweDBjLDB4YjAsMHg0MywweDZjLDB4MDAsMHhiMSB9LAorICAxNiwgMHhjOGIwLCAwLCB7MHgwMCwweDI4LDB4YzAsMHgwZCwweGIwLDB4MTIsMHhlYywweDEwLDB4YjksMHg4MCwweGEyLDB4NjEsMHgwYiwweGIwLDB4MDIsMHgyMCB9LAorICAxNiwgMHhjOGMwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHg5YiwweDg4LDB4MmUsMHhlMCB9LAorICAxNiwgMHhjOGQwLCAwLCB7MHgwOCwweGEwLDB4MDIsMHhlYywweDAxLDB4YmIsMHg4MCwweDI2LDB4NjIsMHgwYiwweGIwLDB4MDIsMHhlYywweDAwLDB4YjMsMHgwMSB9LAorICAxNiwgMHhjOGUwLCAwLCB7MHgyYSwweDIxLDB4MDgsMHhiMCwweDEyLDB4MmMsMHgwMCwweGI4LDB4MDAsMHgyMiwweGMwLDB4MDgsMHhiMCwweDEyLDB4ZWMsMHgxNCB9LAorICAxNiwgMHhjOGYwLCAwLCB7MHhiOSwweDg0LDB4MjIsMHhhMiwweDBiLDB4YjAsMHgwMiwweGEwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjOTAwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwNCwweDkzLDB4MDAsMHgyYywweGUwLDB4MDgsMHgwMCwweDAyLDB4Y2MsMHgwOSwweDkxLDB4MDAsMHgyMCB9LAorICAxNiwgMHhjOTEwLCAwLCB7MHg0MCwweDBiLDB4MzAsMHgwNiwweDRjLDB4MDQsMHgxMywweDAwLDB4MjYsMHgwMCwweDA4LDB4MzAsMHgwMiwweGNjLDB4MDQsMHhiMiB9LAorICAxNiwgMHhjOTIwLCAwLCB7MHgwMCwweDJhLDB4YzAsMHgwMSwweDMwLDB4MDAsMHhjZCwweDAwLDB4YjAsMHgwMCwweDIwLDB4ODAsMHgwYiwweDMwLDB4MGEsMHgwMiB9LAorICAxNiwgMHhjOTMwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDZjLDB4MDAsMHhkYiwweDI0LDB4NmUsMHhjMCB9LAorICAxNiwgMHhjOTQwLCAwLCB7MHgyYywweGEwLDB4MDIsMHhmYywweDAwLDB4YmEsMHgwNCwweDI2LDB4NDAsMHg0ZiwweGYwLDB4NTcsMHhmYywweDAwLDB4M2YsMHgwMSB9LAorICAxNiwgMHhjOTUwLCAwLCB7MHgzYSwweDAwLDB4MmMsMHhmMCwweDAxLDB4M2MsMHgwMCwweGRiLDB4MDAsMHgzMywweGMwLDB4ODQsMHhmMCwweDAzLDB4ZmQsMHgwOCB9LAorICAxNiwgMHhjOTYwLCAwLCB7MHhmYSwweDAwLDB4MzIsMHgwMCwweDBmLDB4ZjAsMHgwMywweDAwLDB4MDEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjOTcwLCAwLCB7MHhhMCwweDE5LDB4ZGMsMHgwMCwweGVhLDB4NDAsMHgzZiwweDAwLDB4MDcsMHhjMCwweDAzLDB4ZmMsMHgwNCwweGZjLDB4MDAsMHgzZiB9LAorICAxNiwgMHhjOTgwLCAwLCB7MHg0MCwweDBmLDB4ZjAsMHgwMywweDljLDB4MDAsMHhmZiwweDAwLDB4M2YsMHgwMCwweDBlLDB4ZjAsMHgwMywweDdjLDB4MDAsMHhmZCB9LAorICAxNiwgMHhjOTkwLCAwLCB7MHgwMCwweDNmLDB4YzEsMHgwZiwweGYwLDB4MDMsMHhmYywweDg0LDB4ZjQsMHgwMCwweDNmLDB4MDAsMHgwZiwweGYwLDB4MDMsMHhlOCB9LAorICAxNiwgMHhjOWEwLCAwLCB7MHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMSwweGYwLDB4ODAsMHhmZiwweDAwLDB4MDMsMHhjMiB9LAorICAxNiwgMHhjOWIwLCAwLCB7MHgwZiwweGMyLDB4MDMsMHgzZSwweDAwLDB4ZGYsMHhjMCwweDNlLDB4YzAsMHg0ZCwweGRiLDB4MDIsMHhiMCwweGMwLDB4ZGMsMHgzMCB9LAorICAxNiwgMHhjOWMwLCAwLCB7MHgzZiwweGUwLDB4MGYsMHhkYiwweDIzLDB4ZjYsMHgyMCwweGZmLDB4MjYsMHgzMywweGUwLDB4MGYsMHg1MiwweDAzLDB4NWUsMHgwMCB9LAorICAxNiwgMHhjOWQwLCAwLCB7MHhmZiwweDgwLDB4MzMsMHhjMCwweDRjLDB4NDksMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjOWUwLCAwLCB7MHg4MCwweDEwLDB4ZTEsMHhlMCwweGI3LDB4MDgsMHgyMywweGYwLDB4MGIsMHhhZCwweDBhLDB4MmUsMHgwMCwweDlhLDB4MDQsMHgyZSB9LAorICAxNiwgMHhjOWYwLCAwLCB7MHhiMCwweDA5LDB4OGYsMHgwMywweGEwLDB4NDAsMHhiOSwweDMwLDB4MmUsMHhhMCwweDBiLDB4OWYsMHgwMywweGE3LDB4MDAsMHhiYiB9LAorICAxNiwgMHhjYTAwLCAwLCB7MHg4MCwweDI2LDB4ZTAsMHgwYiwweGRkLDB4MDIsMHgyZSwweDAwLDB4YmIsMHg4MCwweDIyLDB4ZjQsMHgwYSwweDkyLDB4MDIsMHhhMCB9LAorICAxNiwgMHhjYTEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGM4LDB4ODAsMHhiMywweDEwLDB4MjQsMHhjMCB9LAorICAxNiwgMHhjYTIwLCAwLCB7MHgwYiwweDgwLDB4MDIsMHhhYywweDAwLDB4YTMsMHgyNCwweDJjLDB4ZDAsMHgwOCwweDEwLDB4MDYsMHhjMCwweDgwLDB4YjIsMHgwMSB9LAorICAxNiwgMHhjYTMwLCAwLCB7MHgyYywweGVhLDB4NGIsMHgwMCwweDEyLDB4YzIsMHgwNCwweGIzLDB4MTAsMHgwOCwweGMwLDB4MGEsMHg5MCwweDAyLDB4MGMsMHgwMCB9LAorICAxNiwgMHhjYTQwLCAwLCB7MHg5MywweDA0LDB4MjQsMHhjMCwweDA5LDB4ODIsMHgwMiwweGEyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjYTUwLCAwLCB7MHhjMCwweDE1LDB4YTUsMHgwMCwweGJiLDB4MDAsMHgyMiwweGMwLDB4MGIsMHg4MCwweDAyLDB4YWMsMHgwOCwweGJiLDB4MTgsMHgyZSB9LAorICAxNiwgMHhjYTYwLCAwLCB7MHhlMCwweDE4LDB4ODgsMHgwMiwweGVjLDB4MDEsMHhiYSwweDAwLDB4MmUsMHg4MCwweDBiLDB4OTgsMHg4NiwweGUyLDB4MDAsMHhiYiB9LAorICAxNiwgMHhjYTcwLCAwLCB7MHgwMCwweDIyLDB4YzQsMHgwYiwweDkwLDB4MDIsMHg2YywweDAwLDB4YmIsMHgwMCwweGE2LDB4YzAsMHgwYiwweDkwLDB4MDAsMHhiMCB9LAorICAxNiwgMHhjYTgwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMSwweGU3LDB4MDAsMHhmYiwweDAwLDB4YjIsMHhjMCB9LAorICAxNiwgMHhjYTkwLCAwLCB7MHgwZiwweGE4LDB4MDMsMHhhYywweDAyLDB4ZWIsMHgwMCwweDNlLDB4NjAsMHgwZCwweDllLDB4MDMsMHhlYywweDAwLDB4ZDgsMHg0MCB9LAorICAxNiwgMHhjYWEwLCAwLCB7MHgzZSwweDQwLDB4MGYsMHg4OCwweDQzLDB4ZTIsMHgwMCwweGZiLDB4MjAsMHgzMiwweGMwLDB4MGYsMHgxMCwweDBiLDB4NmYsMHg5MCB9LAorICAxNiwgMHhjYWIwLCAwLCB7MHg1YiwweDgyLDB4MzYsMHhjMCwweDJkLDB4MDgsMHgwMSwweDkwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjYWMwLCAwLCB7MHhlMCwweDAxLDB4YjcsMHgwOCwweGY3LDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmOSwweDAzLDB4N2MsMHgwOCwweGNmLDB4ODIsMHgzYyB9LAorICAxNiwgMHhjYWQwLCAwLCB7MHgwMCwweGFmLDB4ZDAsMHgyMSwweGJjLDB4MDgsMHhmZCwweDEwLDB4M2YsMHg4MCwweDhmLDB4YzAsMHgwMywweGE0LDB4MDAsMHhmNyB9LAorICAxNiwgMHhjYWUwLCAwLCB7MHgwMSwweGJmLDB4YzAsMHgwNywweGQwLDB4MDMsMHhiZCwweDMwLDB4ZmYsMHhhNCwweDM4LDB4YzAsMHgwZSwweGRhLDB4MDMsMHhmOCB9LAorICAxNiwgMHhjYWYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGE4LDB4MDAsMHhmYiwweDAwLDB4YjIsMHhjMSB9LAorICAxNiwgMHhjYjAwLCAwLCB7MHgwZSwweDgxLDB4MDMsMHhlYywweDQwLDB4ZmIsMHg0NCwweDNhLDB4YzEsMHgwZSwweDk1LDB4MDMsMHhlMCwweDAwLDB4Y2IsMHg0MSB9LAorICAxNiwgMHhjYjEwLCAwLCB7MHgzMiwweDRkLDB4MGYsMHg4MSwweDAzLDB4ZTAsMHgyMCwweGM5LDB4MDAsMHg3MiwweGU4LDB4NDQsMHg5MSwweDAzLDB4NmQsMHgwMCB9LAorICAxNiwgMHhjYjIwLCAwLCB7MHhjYiwweDAyLDB4M2UsMHhjMCwweDBjLDB4ODAsMHgwMywweDkwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjYjMwLCAwLCB7MHhjOCwweDA1LDB4MjQsMHgwMCwweGJmLDB4MDAsMHgzMywweGM0LDB4MDgsMHgxZCwweDAzLDB4OGMsMHgwMCwweGJiLDB4OTgsMHgzNiB9LAorICAxNiwgMHhjYjQwLCAwLCB7MHg0OCwweDRkLDB4OTgsMHgyMiwweGVkLDB4NDAsMHhkYiwweDAwLDB4MzYsMHhiMCwweDBiLDB4OTgsMHgwMiwweGUzLDB4MDAsMHhkYiB9LAorICAxNiwgMHhjYjUwLCAwLCB7MHgwMCwweDMyLDB4ZTAsMHg4OCwweGQ4LDB4MDIsMHgyYywweDAyLDB4YzMsMHg4MCwweDJmLDB4YzAsMHgwOCwweDkwLDB4MDMsMHg3MiB9LAorICAxNiwgMHhjYjYwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwMSwweDQ0LDB4MDAsMHhiMywweDAwLDB4MjAsMHhmMCB9LAorICAxNiwgMHhjYjcwLCAwLCB7MHgxOCwweDA4LDB4MDIsMHg0ZiwweDg0LDB4YjEsMHhjMCwweDI0LDB4YzAsMHg4OSwweDA2LDB4MDIsMHhjNCwweDAwLDB4OTEsMHgwMCB9LAorICAxNiwgMHhjYjgwLCAwLCB7MHgyMCwweGYwLDB4MWIsMHgxOCwweDgyLDB4YzYsMHgwMCwweDkzLDB4MDAsMHgyYywweGQxLDB4MDgsMHgxZSwweDAyLDB4MGUsMHg0NCB9LAorICAxNiwgMHhjYjkwLCAwLCB7MHg5MywweDk0LDB4MmMsMHhjMCwweDA4LDB4MjAsMHgwMiwweGI4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjYmEwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwNCwweGI3LDB4ODAsMHgyMCwweGUyLDB4MDgsMHg2OCwweDA2LDB4OWUsMHg4MCwweGJmLDB4ODQsMHgyNSB9LAorICAxNiwgMHhjYmIwLCAwLCB7MHhhOCwweDA5LDB4NjgsMHgwMiwweGM2LDB4MDAsMHg5MywweGEwLDB4NjUsMHhlNCwweDBiLDB4NzgsMHgxMiwweGRlLDB4MDAsMHg5MyB9LAorICAxNiwgMHhjYmMwLCAwLCB7MHgwMCwweGExLDB4ZTAsMHgwOCwweGQ4LDB4MDIsMHgxZSwweGQwLDB4YTcsMHg4MCwweDJkLDB4ZTAsMHgwOCwweGY4LDB4MDIsMHg0OCB9LAorICAxNiwgMHhjYmQwLCAwLCB7MHgxMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDA4LDB4MDAsMHhiMywweDIwLDB4MzAsMHhjMCB9LAorICAxNiwgMHhjYmUwLCAwLCB7MHgwYSwweDIyLDB4MDIsMHhjZSwweDQwLDB4ZjMsMHhhMCwweDNjLDB4ZTgsMHgwYiwweDMwLDB4MDIsMHhjMSwweDAwLDB4ZDAsMHhjMSB9LAorICAxNiwgMHhjYmYwLCAwLCB7MHgzMCwweGMwLDB4MGIsMHgyMSwweDEzLDB4Y2MsMHgyMSwweGQzLDB4MDAsMHgyYywweGMwLDB4MmMsMHgxMCwweDBiLDB4MGMsMHg4MCB9LAorICAxNiwgMHhjYzAwLCAwLCB7MHhkMywweDYxLDB4M2MsMHhjOCwweDJjLDB4MjAsMHgwMywweDkyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjYzEwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwMCwweGZmLDB4NDAsMHgzYiwweGMwLDB4MGYsMHhlMCwweDAzLDB4ZmMsMHgwMCwweGY3LDB4NTAsMHg3ZiB9LAorICAxNiwgMHhjYzIwLCAwLCB7MHhjNCwweDJlLDB4ZjAsMHgwMywweGZjLDB4NDAsMHhmZSwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHg0NywweGZjLDB4MDAsMHhmZiB9LAorICAxNiwgMHhjYzMwLCAwLCB7MHgwMCwweDdkLDB4YzIsMHgwZiwweGQwLDB4MDEsMHhiYywweDgwLDB4NWYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhkMCB9LAorICAxNiwgMHhjYzQwLCAwLCB7MHgwMiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGU0LDB4MDAsMHhmYiwweGMwLDB4MzIsMHhjOCB9LAorICAxNiwgMHhjYzUwLCAwLCB7MHgwZSwweGUwLDB4MDMsMHhhYywweGEwLDB4ZWIsMHgyMCwweDMyLDB4NDAsMHg4YywweGEwLDB4MTMsMHgyYywweDAwLDB4ZDksMHgwMCB9LAorICAxNiwgMHhjYzYwLCAwLCB7MHgzZSwweDYwLDB4MGMsMHhiMCwweDAzLDB4ZTgsMHgwMCwweGZhLDB4ODAsMHgzMCwweGMwLDB4M2MsMHg5MiwweDAzLDB4ZWYsMHg2MCB9LAorICAxNiwgMHhjYzcwLCAwLCB7MHhjMywweDIwLDB4MzEsMHhjNCwweDBjLDB4YTAsMHgwMywweDJhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjYzgwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgwMCwweDMzLDB4MjAsMHgyMSwweGRhLDB4MGIsMHg3MCwweDQzLDB4OWMsMHgwMSwweGI1LDB4MDAsMHgyMSB9LAorICAxNiwgMHhjYzkwLCAwLCB7MHgwMCwweDBhLDB4ZTAsMHgwMiwweDFjLDB4MDAsMHhiNywweDAwLDB4MmYsMHhjMCwweDBkLDB4NzAsMHgwMywweDljLDB4MDAsMHhiNiB9LAorICAxNiwgMHhjY2EwLCAwLCB7MHgwMCwweDMxLDB4YzgsMHgwOCwweDU3LDB4MDIsMHhkYywweDAwLDB4ODcsMHg1MCwweDIxLDB4YzAsMHgwYSwweDcwLDB4NDIsMHg5MiB9LAorICAxNiwgMHhjY2IwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDlhLDB4MTEsMHhiNywweDkwLDB4MjEsMHhlMCB9LAorICAxNiwgMHhjY2MwLCAwLCB7MHgwYiwweDY4LDB4ODIsMHhkZSwweDA4LDB4YTcsMHg4MCwweDI0LDB4NjAsMHgwOCwweDcwLDB4MTIsMHgxMiwweDA4LDB4OTUsMHg4MCB9LAorICAxNiwgMHhjY2QwLCAwLCB7MHgyZCwweDYwLDB4MDksMHg2YywweDAyLDB4ZGUsMHgwMCwweGIxLDB4ODAsMHgyMywweGUwLDB4MGEsMHg1OCwweDYyLDB4ZmUsMHgwMCB9LAorICAxNiwgMHhjY2UwLCAwLCB7MHg5NywweGEwLDB4MjEsMHhlOCwweDA5LDB4ZTgsMHgwMiwweDMwLDB4MTAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjY2YwLCAwLCB7MHg0OCwweDE0LDB4Y2QsMHgwMCwweGIzLDB4MDAsMHgyMCwweGMwLDB4OGIsMHgzYywweDAyLDB4OGMsMHgwMCwweGJiLDB4MDAsMHgyNCB9LAorICAxNiwgMHhjZDAwLCAwLCB7MHhjNCwweDFhLDB4M2QsMHgwMiwweDJmLDB4ODgsMHhiMywweDQ4LDB4MmMsMHhlMCwweDg5LDB4M2UsMHgwMiwweDhkLDB4ODAsMHg5MyB9LAorICAxNiwgMHhjZDEwLCAwLCB7MHhkOSwweGE0LDB4NDAsMHg4OCwweDEwLDB4MDIsMHhjYywweDA0LDB4OTMsMHhjOCwweDIwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHg5MiB9LAorICAxNiwgMHhjZDIwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGI5LDB4NDAsMHhmYSwweDAwLDB4YjIsMHg4MCB9LAorICAxNiwgMHhjZDMwLCAwLCB7MHgwZiwweGUwLDB4MDMsMHhlOCwweDAwLDB4ZWEsMHg4MCwweDM3LDB4YTAsMHgwYywweGU4LDB4MTMsMHgzYiwweDA4LDB4ZGUsMHgwMSB9LAorICAxNiwgMHhjZDQwLCAwLCB7MHgzZiwweDgyLDB4MGMsMHhlMCwweDQzLDB4ZmEsMHg4MCwweGZlLDB4ODAsMHgzMSwweDI4LDB4MGMsMHhhMCwweDAzLDB4ZjAsMHgwMiB9LAorICAxNiwgMHhjZDUwLCAwLCB7MHhjNCwweGMwLDB4YjIsMHg4MCwweDBkLDB4ZTAsMHgwMywweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjZDYwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDEwLDB4MGIsMHg4MCwweDgzLDB4ZTAsMHgwMCwweGY4LDB4MzAsMHgzYSB9LAorICAxNiwgMHhjZDcwLCAwLCB7MHgwMCwweDZkLDB4ODAsMHg4MywweGUxLDB4NDQsMHhiOCwweDA0LDB4M2UsMHgxMCwweDBmLDB4ODAsMHgxMywweGUwLDB4MDAsMHhmOCB9LAorICAxNiwgMHhjZDgwLCAwLCB7MHgwMCwweDNhLDB4MTAsMHg0ZiwweDA0LDB4MDMsMHhlMywweDAwLDB4ZTgsMHgxMCwweDNlLDB4MDAsMHgwZSwweDgwLDB4MDMsMHhkMiB9LAorICAxNiwgMHhjZDkwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDAsMHhjOSwweDAwLDB4MzgsMHg0MCB9LAorICAxNiwgMHhjZGEwLCAwLCB7MHgwZiwweDFhLDB4MDMsMHgyZSwweDAwLDB4ZmIsMHhhMCwweDM2LDB4NjAsMHgwYywweDk4LDB4MDMsMHhlNiwweDA0LDB4ZDEsMHgwMCB9LAorICAxNiwgMHhjZGIwLCAwLCB7MHgzNiwweDQ4LDB4MGUsMHg5MSwweDAyLDB4ZTYsMHgwMCwweGY5LDB4MDAsMHgzZSwweDAwLDB4MGMsMHg5OSwweDAzLDB4NjIsMHg0MCB9LAorICAxNiwgMHhjZGMwLCAwLCB7MHhmOCwweDAwLDB4YTAsMHg2OCwweDBjLDB4OTAsMHgwMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjZGQwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMiwweDg5LDB4MDQsMHgyZSwweDY0LDB4ODgsMHg5NCwweDAyLDB4YTUsMHgwMCwweGI5LDB4ODAsMHgyMCB9LAorICAxNiwgMHhjZGUwLCAwLCB7MHg2NCwweDBkLDB4OWMsMHgwMiwweGU2LDB4NDIsMHg4OSwweDAwLDB4MjIsMHg2MCwweDBiLDB4OWMsMHgwMiwweGU0LDB4MTAsMHhiOSB9LAorICAxNiwgMHhjZGYwLCAwLCB7MHg0MCwweDNhLDB4NTAsMHgwOCwweDljLDB4MDIsMHgyNywweDIwLDB4YjksMHgwMCwweDIyLDB4NDAsMHgwOCwweDEwLDB4MDMsMHg2MCB9LAorICAxNiwgMHhjZTAwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDA0LDB4MDAsMHg4OSwweDAwLDB4MjIsMHg0MCB9LAorICAxNiwgMHhjZTEwLCAwLCB7MHgwYSwweDkwLDB4ODIsMHgyNSwweDRjLDB4YjksMHgwMCwweDAyLDB4NDAsMHgwOCwweDk2LDB4MDIsMHhlNCwweDEwLDB4ODksMHgwMCB9LAorICAxNiwgMHhjZTIwLCAwLCB7MHgyNiwweDUwLDB4MTMsMHg5NCwweDAyLDB4ZTQsMHg0MCwweGI5LDB4MDgsMHgyZSwweDQwLDB4MDgsMHg5MCwweDhhLDB4MjQsMHgwMCB9LAorICAxNiwgMHhjZTMwLCAwLCB7MHhiOSwweDAxLDB4MmEsMHg0MCwweDA4LDB4OTAsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjZTQwLCAwLCB7MHgwOCwweDA0LDB4MDUsMHg4MCwweDgxLDB4NDAsMHgyYywweGM4LDB4MDgsMHgxMCwweDA2LDB4ODQsMHgwMCwweGIxLDB4MDQsMHgyMCB9LAorICAxNiwgMHhjZTUwLCAwLCB7MHg0OSwweDA5LDB4MTQsMHg0MiwweGNjLDB4ODksMHg4MSwweDIwLDB4MjAsMHg1MCwweDBiLDB4MTQsMHg0NiwweGM0LDB4MDAsMHhiMSB9LAorICAxNiwgMHhjZTYwLCAwLCB7MHgwMCwweDJhLDB4YzAsMHgyOCwweDE0LDB4MDIsMHgwMSwweDAxLDB4YjAsMHgwNCwweDI4LDB4NDAsMHgzOCwweDk0LDB4MDIsMHg0MiB9LAorICAxNiwgMHhjZTcwLCAwLCB7MHgxMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHg4OCwweDAwLDB4M2EsMHgwMCB9LAorICAxNiwgMHhjZTgwLCAwLCB7MHgwZSwweDgwLDB4MjMsMHgyMCwweDAwLDB4ZjgsMHg1MCwweGIyLDB4MDAsMHgwYywweDgwLDB4MTIsMHhlMSwweDQwLDB4ZDgsMHg1MCB9LAorICAxNiwgMHhjZTkwLCAwLCB7MHgzNiwweDAwLDB4MGUsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgyZSwweDAwLDB4MGMsMHg4MCwweDUzLDB4NjAsMHgwNCB9LAorICAxNiwgMHhjZWEwLCAwLCB7MHhmOCwweDAwLDB4M2EsMHgwMCwweDBjLDB4ODAsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjZWIwLCAwLCB7MHg5OCwweDFkLDB4ZjQsMHg0MCwweGY5LDB4NDQsMHgzZSwweDQ0LDB4MGYsMHhkNCwweDAzLDB4ZTQsMHgwMCwweGYxLDB4MDAsMHgzZiB9LAorICAxNiwgMHhjZWMwLCAwLCB7MHg0NCwweDBmLDB4ZDQsMHg1MywweGY0LDB4NDQsMHhmZCwweDEwLDB4MmYsMHg0MCwweDBmLDB4ZjQsMHgwMywweGZkLDB4MDAsMHhmZCB9LAorICAxNiwgMHhjZWQwLCAwLCB7MHg0MCwweDNiLDB4MTAsMHgwZiwweGQ0LDB4MjMsMHhkMSwweDA0LDB4N2MsMHg0MywweDM2LDB4NTAsMHgwZiwweDUwLDB4MDMsMHhlNiB9LAorICAxNiwgMHhjZWUwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGE2LDB4MDAsMHhmOSwweDEwLDB4MmUsMHg2MiB9LAorICAxNiwgMHhjZWYwLCAwLCB7MHgwZiwweGQyLDB4ODMsMHhlNCwweDAwLDB4YmQsMHg0MiwweDNlLDB4NjEsMHgwZiwweGQwLDB4MDMsMHhmNiwweGMwLDB4YzksMHhhMiB9LAorICAxNiwgMHhjZjAwLCAwLCB7MHgyYiwweDQwLDB4MGMsMHhkMCwweDAzLDB4MzQsMHgwMCwweGY5LDB4ODEsMHgzZSwweDY4LDB4MDgsMHhjMSwweDQzLDB4ZmEsMHgwMCB9LAorICAxNiwgMHhjZjEwLCAwLCB7MHhmNSwweDgwLDB4M2YsMHg2MiwweDBjLDB4MTQsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjZjIwLCAwLCB7MHgzOCwweDEwLDB4ZTEsMHgyMCwweDg4LDB4MTEsMHgyZSwweDEwLDB4MGIsMHg4MCwweDAyLDB4ZTAsMHgwMCwweGI4LDB4ODIsMHgyZSB9LAorICAxNiwgMHhjZjMwLCAwLCB7MHgxMCwweDBiLDB4ODAsMHgwMCwweGUzLDB4YzQsMHg4OCwweGYwLDB4MjIsMHgwMCwweDBiLDB4ODAsMHgwYSwweDIwLDB4MDAsMHhlOCB9LAorICAxNiwgMHhjZjQwLCAwLCB7MHg0MCwweDJmLDB4MTQsMHgwOCwweDg4LDB4MDIsMHhlMiwweDAwLDB4YjgsMHgwMCwweDJlLDB4MDAsMHgwOCwweDg4LDB4MDIsMHg4ZSB9LAorICAxNiwgMHhjZjUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNCwweGM1LDB4MDAsMHhhMSwweDAwLDB4MmMsMHg0MCB9LAorICAxNiwgMHhjZjYwLCAwLCB7MHgwYiwweDEwLDB4MDIsMHhjNCwweDE4LDB4YjEsMHgyMiwweDZjLDB4ZDEsMHgwYiwweDEwLDB4MjYsMHhjNCwweDAwLDB4ODEsMHgwOCB9LAorICAxNiwgMHhjZjcwLCAwLCB7MHgyYSwweDQwLDB4ODgsMHgxMCwweDAyLDB4MDQsMHgwNCwweGI1LDB4YzAsMHgwZiwweDQwLDB4MGIsMHgwMiwweDAyLDB4NDEsMHhhMCB9LAorICAxNiwgMHhjZjgwLCAwLCB7MHhiMSwweDQwLDB4MmMsMHg0MCwweDA4LDB4MTIsMHgwMiwweDAyLDB4MTEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjZjkwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMCwweDg5LDB4MDYsMHgyZSwweDQwLDB4MGIsMHg5MCwweDEyLDB4ZTQsMHgwMCwweGI5LDB4NDAsMHgyZSB9LAorICAxNiwgMHhjZmEwLCAwLCB7MHg0MCwweDBiLDB4YjAsMHg4MiwweGM0LDB4MDIsMHg4OSwweDQ0LDB4MjIsMHg0MCwweDBhLDB4OTAsMHgwMiwweDI0LDB4MDAsMHhhOSB9LAorICAxNiwgMHhjZmIwLCAwLCB7MHgwMCwweDI3LDB4NDgsMHgwOSwweGIwLDB4MTIsMHhlYywweDE4LDB4YjksMHgwMSwweDJlLDB4NDAsMHg0MCwweDkwLDB4MDIsMHg4NiB9LAorICAxNiwgMHhjZmMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU3LDB4ODQsMHhlOSwweDAxLDB4M2UsMHg0MCB9LAorICAxNiwgMHhjZmQwLCAwLCB7MHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NzIsMHgwZiwweDkwLDB4MDMsMHhlNywweDYwLDB4ODksMHgxMCB9LAorICAxNiwgMHhjZmUwLCAwLCB7MHgzYSwweDQwLDB4MGMsMHg5MCwweDAzLDB4MjQsMHgwMCwweGY5LDB4NDQsMHgzYywweDQwLDB4MmQsMHg5MCwweDAzLDB4ZTcsMHg2MCB9LAorICAxNiwgMHhjZmYwLCAwLCB7MHhmOSwweDcxLDB4M2UsMHg0MCwweDI4LDB4OTAsMHgwMywweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMDAwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHg0OCwweGE5LDB4MDAsMHgzZSwweGMwLDB4MGYsMHg5YSwweDQzLDB4ZWMsMHgwMCwweGY5LDB4MjAsMHg3ZSB9LAorICAxNiwgMHhkMDEwLCAwLCB7MHhjOCwweDBmLDB4OWEsMHgwNywweDY2LDB4MDAsMHg3OSwweDgwLDB4N2UsMHg0MCwweDBmLDB4MWMsMHgwMywweGU3LDB4MDAsMHhlOSB9LAorICAxNiwgMHhkMDIwLCAwLCB7MHhhMCwweDNlLDB4NDAsMHg0NiwweDgwLDB4MDMsMHhlMCwweDIwLDB4ZjksMHgwMCwweDNjLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjYSB9LAorICAxNiwgMHhkMDMwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweDgwLDB4MDAsMHhmOCwweDAwLDB4M2EsMHgwMCB9LAorICAxNiwgMHhkMDQwLCAwLCB7MHgwZiwweDgwLDB4MDMsMHhhMCwweDA4LDB4ZTgsMHg0MCwweDNhLDB4MTAsMHgwYywweDgzLDB4MDMsMHhhMSwweGMwLDB4ZjAsMHg0MCB9LAorICAxNiwgMHhkMDUwLCAwLCB7MHgzZSwweDA2LDB4MGYsMHg4NCwweDAzLDB4ZTEsMHgwMCwweGY4LDB4MDAsMHgzYiwweDAwLDB4MGYsMHg4MSwweDAzLDB4MjAsMHgwMCB9LAorICAxNiwgMHhkMDYwLCAwLCB7MHhmOCwweDEwLDB4YjIsMHgwMCwweDRjLDB4ODAsMHgwYiwweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMDcwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwMCwweGJhLDB4MDAsMHgyZSwweGIwLDB4MGIsMHhlOCwweDAyLDB4ZTksMHgwMCwweDNlLDB4OTAsMHgwMiB9LAorICAxNiwgMHhkMDgwLCAwLCB7MHg4MSwweDA4LDB4ZTQsMHgxMiwweDc4LDB4MDAsMHhiYSwweDAwLDB4MmQsMHhiMCwweDg5LDB4ZTgsMHgyMiwweGY4LDB4MGMsMHhiYSB9LAorICAxNiwgMHhkMDkwLCAwLCB7MHgwMCwweDZlLDB4ODAsMHgwMywweGM1LDB4MDMsMHgzMCwweDAwLDB4YmEsMHgwMCwweDIyLDB4YTgsMHgwOCwweGEwLDB4MjIsMHg4YSB9LAorICAxNiwgMHhkMGEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDAsMHhiMywweDAwLDB4MjgsMHhlOCB9LAorICAxNiwgMHhkMGIwLCAwLCB7MHgxYiwweDMxLDB4MTIsMHg4YywweGM0LDB4YTMsMHg5MiwweDJjLDB4NDAsMHg4OCwweDM0LDB4MDYsMHg4ZSwweDAwLDB4OTMsMHgwMCB9LAorICAxNiwgMHhkMGMwLCAwLCB7MHgyYywweGYwLDB4MTksMHgzMSwweGEyLDB4Y2MsMHgwNCwweGIzLDB4MDAsMHgyOCwweDgwLDB4MDEsMHgzOCwweDAyLDB4NGMsMHgwMCB9LAorICAxNiwgMHhkMGQwLCAwLCB7MHhiMywweDgwLDB4MjAsMHhlMCwweDBhLDB4YjAsMHgxMiwweDAyLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMGUwLCAwLCB7MHhhMCwweDAxLDB4MWMsMHgwMCwweGI3LDB4MTQsMHgyZCwweDQyLDB4MGIsMHg2MCwweDAyLDB4ZGMsMHgwMCwweGI3LDB4ODEsMHgyNyB9LAorICAxNiwgMHhkMGYwLCAwLCB7MHhlMCwweDE4LDB4NjAsMHgwMiwweDU4LDB4MTgsMHhiNywweDIyLDB4MmQsMHg4MCwweDA5LDB4NzAsMHgyMiwweGRjLDB4MDAsMHhiNyB9LAorICAxNiwgMHhkMTAwLCAwLCB7MHgwMCwweDJkLDB4ODAsMHgwYiwweDNiLDB4MDIsMHgxZCwweGQwLDB4YmYsMHg4MCwweDI4LDB4YzAsMHg4YSwweGYyLDB4MDIsMHhhMCB9LAorICAxNiwgMHhkMTEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFmLDB4ODAsMHhmNywweGEwLDB4MzksMHhlMiB9LAorICAxNiwgMHhkMTIwLCAwLCB7MHgwZiwweDY4LDB4MDMsMHg5ZSwweDAwLDB4ZWQsMHg4NCwweDNkLDB4ZTIsMHg0NCwweDc4LDB4MDMsMHg5ZSwweDAwLDB4ZjcsMHhiNCB9LAorICAxNiwgMHhkMTMwLCAwLCB7MHgyZCwweGUwLDB4MGQsMHg2OCwweDAzLDB4ZDYsMHgwMCwweGY2LDB4ODAsMHgzOSwweGUwLDB4MGYsMHg3OSwweDAzLDB4NWUsMHg5MCB9LAorICAxNiwgMHhkMTQwLCAwLCB7MHhmNywweDgxLDB4MzEsMHg2MCwweDJlLDB4N2MsMHgwMywweDJhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMTUwLCAwLCB7MHgwOCwweDFkLDB4YWQsMHgwMCwweGZiLDB4NDIsMHgzZSwweGM4LDB4MGYsMHhhMCwweDAzLDB4ZWQsMHhhMCwweGJiLDB4MDAsMHgzOCB9LAorICAxNiwgMHhkMTYwLCAwLCB7MHhjOCwweDBmLDB4YjAsMHgwMywweDY4LDB4MDAsMHhmYiwweDExLDB4M2UsMHg0MCwweDA5LDB4YjAsMHg0MSwweGVjLDB4MDAsMHhmYSB9LAorICAxNiwgMHhkMTcwLCAwLCB7MHgwMiwweDNlLDB4YzAsMHgwZiwweGIyLDB4MGIsMHhlZCwweDgwLDB4M2IsMHgwMCwweDM2LDB4NDAsMHgwZCwweGIwLDB4MjMsMHg0MiB9LAorICAxNiwgMHhkMTgwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGZmLDB4MDAsMHhjZiwweGQwLDB4MzMsMHhlNCB9LAorICAxNiwgMHhkMTkwLCAwLCB7MHg0ZiwweGY5LDB4MDMsMHhkZSwweDQwLDB4ZGMsMHg4MCwweDM2LDB4ZTQsMHgwYywweGI5LDB4MTMsMHhmZSwweDAwLDB4Y2YsMHg5MCB9LAorICAxNiwgMHhkMWEwLCAwLCB7MHgzNywweGU1LDB4MGYsMHhmOCwweDQzLDB4ZmUsMHgwMCwweGNmLDB4OTIsMHgzZiwweGE0LDB4MGYsMHg3OCwweDAzLDB4MWYsMHgwMCB9LAorICAxNiwgMHhkMWIwLCAwLCB7MHhjNSwweDgwLDB4MzMsMHg2MCwweDBjLDB4ZjgsMHgyMCwweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMWMwLCAwLCB7MHhhOCwweDExLDB4YmMsMHgwMCwweDBmLDB4MTAsMHgyMSwweDgxLDB4MGIsMHg2MCwweDAzLDB4ODQsMHgwMCwweDhiLDB4MDgsMHgyMSB9LAorICAxNiwgMHhkMWQwLCAwLCB7MHg2MCwweDBhLDB4N2IsMHgwMywweDk4LDB4MDAsMHg4YiwweDEwLDB4MjksMHg4NCwweDBlLDB4NjQsMHgyMiwweGRjLDB4NDAsMHhkNyB9LAorICAxNiwgMHhkMWUwLCAwLCB7MHgwMiwweDJkLDB4ODQsMHgwYiwweDcwLDB4MDIsMHgxYywweDAwLDB4ODUsMHgxOCwweDIxLDB4NDAsMHgwYSwweGYwLDB4MjIsMHhhYSB9LAorICAxNiwgMHhkMWYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4MDAsMHhhNywweDE0LDB4NjksMHhjMCB9LAorICAxNiwgMHhkMjAwLCAwLCB7MHgxYSwweDYwLDB4MTIsMHhmYywweDAxLDB4YTQsMHgxMCwweDJkLDB4YzAsMHgwYSwweDUyLDB4MDIsMHg0NSwweDQwLDB4ODcsMHgwYyB9LAorICAxNiwgMHhkMjEwLCAwLCB7MHgyMSwweDgwLDB4MWIsMHg2MCwweDgyLDB4ZDQsMHgwMCwweDg2LDB4MDMsMHgyNSwweGUwLDB4MWIsMHg3MCwweDAyLDB4NWMsMHg0MCB9LAorICAxNiwgMHhkMjIwLCAwLCB7MHg5ZCwweDAwLDB4MjksMHg0MCwweDA4LDB4NzAsMHgwMiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMjMwLCAwLCB7MHgyMCwweDE0LDB4Y2QsMHgwMCwweGEzLDB4MDAsMHgyOCwweGMwLDB4MWIsMHgyMCwweDIyLDB4OGMsMHgxMSwweGEzLDB4MDAsMHg2OCB9LAorICAxNiwgMHhkMjQwLCAwLCB7MHhmNiwweDBhLDB4M2MsMHgwNiwweDgyLDB4MDAsMHg4MywweDgwLDB4MjgsMHg4NCwweDBhLDB4OGMsMHg4MiwweGNjLDB4NDQsMHg5MiB9LAorICAxNiwgMHhkMjUwLCAwLCB7MHgwMCwweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHg0ZSwweDAwLDB4OTEsMHgwMCwweDI4LDB4NDAsMHgwYSwweDMwLDB4MDIsMHg4OCB9LAorICAxNiwgMHhkMjYwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGJlLDB4MjIsMHhlZiwweDA0LDB4YmEsMHhjMCB9LAorICAxNiwgMHhkMjcwLCAwLCB7MHgwZiwweDE0LDB4OTMsMHhlYywweDAyLDB4ZjEsMHhjMywweDNlLDB4ZjAsMHgwZSwweDkwLDB4ODMsMHg2NiwweDAwLDB4Y2YsMHhkMiB9LAorICAxNiwgMHhkMjgwLCAwLCB7MHgzMiwweDUwLDB4MGYsMHg5YywweDAzLDB4Y2IsMHgwMCwweGM5LDB4ODAsMHgzZSwweDI4LDB4MGYsMHhiMCwweDAzLDB4NGYsMHgwMCB9LAorICAxNiwgMHhkMjkwLCAwLCB7MHhkMSwweGMwLDB4YWEsMHhjMCwweDBjLDB4NzEsMHgwMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMmEwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgyMCwweGRiLDB4MDAsMHgyNiwweDgwLDB4MGYsMHhhMCwweDAzLDB4ZWMsMHgwOCwweDFiLDB4MDAsMHgzNiB9LAorICAxNiwgMHhkMmIwLCAwLCB7MHhjMCwweDBmLDB4ODYsMHgwMSwweGU1LDB4NDAsMHhmYiwweDAyLDB4M2EsMHg0OCwweDBlLDB4OTQsMHgwMywweGVjLDB4ODAsMHhmMSB9LAorICAxNiwgMHhkMmMwLCAwLCB7MHg4NCwweDNlLDB4MDAsMHg0ZiwweGIwLDB4MDMsMHhhZCwweGMwLDB4ZWIsMHgyMCwweDM2LDB4YzAsMHgwZiwweGIwLDB4MjMsMHhlMCB9LAorICAxNiwgMHhkMmQwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGRjLDB4MDAsMHhjZiwweDAwLDB4M2YsMHg2MCB9LAorICAxNiwgMHhkMmUwLCAwLCB7MHgwYywweGUwLDB4ODMsMHgzZSwweDgwLDB4ZWQsMHgwOCwweDMzLDB4ZDAsMHg4ZiwweDUwLDB4MDMsMHg5ZSwweDAwLDB4ZGYsMHgwMCB9LAorICAxNiwgMHhkMmYwLCAwLCB7MHgzMywweDQwLDB4MGMsMHhjMCwweDAzLDB4MzAsMHgwMCwweGNjLDB4MTAsMHgzMywweDY4LDB4MGMsMHhmMCwweDAzLDB4M2MsMHg4NCB9LAorICAxNiwgMHhkMzAwLCAwLCB7MHg4ZCwweDkwLDB4MzAsMHg0MCwweDBjLDB4ZjAsMHgwMywweDA4LDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMzEwLCAwLCB7MHg4MSwweDA0LDB4NmMsMHgwMCwweDhiLDB4MDIsMHgyYywweGY0LDB4MDgsMHhhOCwweDYyLDB4MGMsMHg4MCwweDhiLDB4ODAsMHgyYSB9LAorICAxNiwgMHhkMzIwLCAwLCB7MHg2MCwweDBmLDB4OWMsMHgwMiwweDJlLDB4MDAsMHg4YiwweDAwLDB4MjAsMHg2MCwweDBkLDB4OTgsMHgwMiwweDJjLDB4ODAsMHhkOCB9LAorICAxNiwgMHhkMzMwLCAwLCB7MHgwMCwweDE0LDB4NDAsMHgwOCwweDM0LDB4MTIsMHgyZSwweDAwLDB4OGIsMHg4MiwweDMyLDB4NDAsMHgwZCwweGIwLDB4MDMsMHg2MCB9LAorICAxNiwgMHhkMzQwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHg4YiwweDAwLDB4MmUsMHhkMCB9LAorICAxNiwgMHhkMzUwLCAwLCB7MHgwOCwweGI4LDB4MDIsMHgyYywweDAwLDB4OGEsMHg4NCwweDIyLDB4YzAsMHgwYiwweDg4LDB4MDIsMHhlNCwweGEwLDB4ODMsMHgwMCB9LAorICAxNiwgMHhkMzYwLCAwLCB7MHgyMiwweDYyLDB4MGEsMHg5OCwweDAyLDB4MjgsMHgwMCwweDg5LDB4MDAsMHgyMiwweDAwLDB4MGEsMHhiMSwweDA2LDB4MmMsMHgwMCB9LAorICAxNiwgMHhkMzcwLCAwLCB7MHhhYiwweDAwLDB4MjIsMHg0MCwweDA4LDB4YjAsMHgwMiwweDYwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMzgwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMiwweGEzLDB4MDAsMHgyYywweGMxLDB4MDgsMHgyMCwweDAyLDB4MGMsMHgwMiwweDhiLDB4MDAsMHgyOCB9LAorICAxNiwgMHhkMzkwLCAwLCB7MHhjMiwweDBhLDB4MDAsMHgwMiwweDQ0LDB4MTAsMHg4MywweDEwLDB4MjIsMHg0MCwweDBiLDB4MTAsMHgwNiwweDBjLDB4MDAsMHg5MSB9LAorICAxNiwgMHhkM2EwLCAwLCB7MHgwNCwweGFhLDB4MDAsMHgyOCwweDMwLDB4MDIsMHgyYywweDAwLDB4YTEsMHgwMSwweDIwLDB4NDAsMHgwOSwweGIwLDB4MDIsMHg0MiB9LAorICAxNiwgMHhkM2IwLCAwLCB7MHgxMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDdjLDB4MDAsMHg4ZiwweDAwLDB4M2UsMHhjMCB9LAorICAxNiwgMHhkM2MwLCAwLCB7MHgyYywweGEwLDB4MDMsMHgyOSwweDQwLDB4YTgsMHg0MCwweDMyLDB4Y2MsMHg4YiwweDgwLDB4MDIsMHhlMCwweDAwLDB4Y2YsMHg0MCB9LAorICAxNiwgMHhkM2QwLCAwLCB7MHgzMiwweDAwLDB4MGUsMHg4MCwweDBhLDB4MjAsMHgwMCwweDg4LDB4MDAsMHgyMiwweDQwLDB4MGMsMHhiMCwweDAzLDB4MmMsMHgwNCB9LAorICAxNiwgMHhkM2UwLCAwLCB7MHhlYiwweDAwLDB4YjIsMHg0MCwweDhjLDB4YjAsMHgwMywweDQwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkM2YwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgwMCwweGRmLDB4MDAsMHgzZiwweDQwLDB4MGYsMHhlMCwweDAzLDB4ZmMsMHg4MCwweGZmLDB4MjgsMHgzZCB9LAorICAxNiwgMHhkNDAwLCAwLCB7MHhjMCwweDBiLDB4YzEsMHgwMywweGIwLDB4MTQsMHhmZiwweDAwLDB4M2YsMHgwMCwweDBkLDB4ZDAsMHgwMywweGRjLDB4MDAsMHhmYyB9LAorICAxNiwgMHhkNDEwLCAwLCB7MHgwMCwweDM3LDB4NDAsMHgwZiwweGYwLDB4MjEsMHhmYywweDAwLDB4MWQsMHgwMCwweDdiLDB4NDAsMHg4ZiwweGYwLDB4MDMsMHhlMCB9LAorICAxNiwgMHhkNDIwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGQyLDB4MDAsMHhkZiwweDAwLDB4MzEsMHhhMCB9LAorICAxNiwgMHhkNDMwLCAwLCB7MHg0ZCwweGYwLDB4NDMsMHgzMiwweDAwLDB4Y2UsMHgxNCwweDFiLDB4NjgsMHgwZSwweGRhLDB4MjMsMHhiMiwweGMwLDB4MmYsMHgwMCB9LAorICAxNiwgMHhkNDQwLCAwLCB7MHgzZiwweGMyLDB4MmMsMHhlOCwweDAzLDB4M2MsMHg0MCwweGZkLDB4MDgsMHgzYiwweGM4LDB4NGMsMHhmMCwweDgzLDB4M2MsMHhhMCB9LAorICAxNiwgMHhkNDUwLCAwLCB7MHhjZiwweDAwLDB4MzMsMHhjNCwweDBjLDB4ZjMsMHgwNywweGYwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNDYwLCAwLCB7MHg4MCwweDEwLDB4ZTIsMHgwMCwweDhmLDB4YzAsMHgyMiwweGEwLDB4MDgsMHhmZCwweDQyLDB4MmYsMHgwMCwweDhiLDB4NzAsMHgyMiB9LAorICAxNiwgMHhkNDcwLCAwLCB7MHgxZSwweDQ4LDB4ODksMHgwMiwweDI3LDB4YzAsMHg4ZiwweDVhLDB4MmUsMHg1MCwweDQ4LDB4MzAsMHgwMiwweGJkLDB4YzAsMHhiZCB9LAorICAxNiwgMHhkNDgwLCAwLCB7MHg0MCwweDIzLDB4YzUsMHg0OCwweGY0LDB4ODIsMHgzZCwweDJjLDB4ODcsMHg3MCwweDIyLDB4YzAsMHgwOCwweGYxLDB4MDMsMHhlMCB9LAorICAxNiwgMHhkNDkwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGUwLDB4MDAsMHg5MywweDEwLDB4MjYsMHg4MSB9LAorICAxNiwgMHhkNGEwLCAwLCB7MHg0OSwweDMwLDB4MDIsMHg4MCwweDQwLDB4ODMsMHgyMCwweDI4LDB4NDAsMHgwYSwweDEwLDB4MDIsMHg4MCwweDAwLDB4YTMsMHgyNCB9LAorICAxNiwgMHhkNGIwLCAwLCB7MHgyYywweGNhLDB4MDgsMHgzMiwweDgyLDB4MGMsMHgwMCwweDkxLDB4MjgsMHgyMCwweGNhLDB4MWIsMHgzMiwweDAyLDB4MGMsMHg4OCB9LAorICAxNiwgMHhkNGMwLCAwLCB7MHg4MywweDA5LDB4MjAsMHhjOCwweDA5LDB4MzIsMHgwMiwweGUyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNGQwLCAwLCB7MHhjMCwweDE1LDB4YTMsMHgxNCwweDhiLDB4MDQsMHgyNiwweDg5LDB4MDgsMHhiMCwweDAyLDB4YWMsMHgyMiwweDhiLDB4ODgsMHgyYSB9LAorICAxNiwgMHhkNGUwLCAwLCB7MHgyMCwweDA4LDB4OTgsMHg4MiwweGE2LDB4MTAsMHhhYiwweDAwLDB4MmUsMHhjYSwweDA4LDB4YjAsMHg4MiwweGFjLDB4MDAsMHhiOSB9LAorICAxNiwgMHhkNGYwLCAwLCB7MHgwMCwweDIyLDB4YzAsMHgyOSwweGIwLDB4MGEsMHgyYywweDAxLDB4OGIsMHgwMCwweDIyLDB4YzAsMHgwOSwweGIwLDB4MjIsMHhmMCB9LAorICAxNiwgMHhkNTAwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGUzLDB4MDAsMHhkYiwweDAwLDB4MzQsMHhlMiB9LAorICAxNiwgMHhkNTEwLCAwLCB7MHgwZCwweGIwLDB4MDMsMHhhMywweDAwLDB4Y2EsMHg4MCwweGJhLDB4NzAsMHgwZSwweDg4LDB4MDMsMHhhNiwweDAwLDB4ZWIsMHgwMCB9LAorICAxNiwgMHhkNTIwLCAwLCB7MHgzZSwweDkwLDB4MGMsMHhiNSwweDAzLDB4MmMsMHgwMCwweGZiLDB4MTAsMHhiYSwweGMwLDB4MGUsMHhiMCwweDAzLDB4MmMsMHgwMiB9LAorICAxNiwgMHhkNTMwLCAwLCB7MHhjYiwweDAyLDB4MzIsMHhjMCwweDA5LDB4YjAsMHgwMiwweGQwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNTQwLCAwLCB7MHhlMCwweDAxLDB4YjAsMHgwOCwweGZmLDB4MDAsMHhiYiwweGUwLDB4MGYsMHg3MCwweDAzLDB4NjUsMHgwMCwweGY0LDB4MDAsMHgzNSB9LAorICAxNiwgMHhkNTUwLCAwLCB7MHg0MCwweDBmLDB4NDAsMHgwMywweDU0LDB4MDAsMHhkZiwweDAwLDB4M2UsMHg0MCwweDBmLDB4ZjgsMHgwMywweGVjLDB4MDAsMHhmNyB9LAorICAxNiwgMHhkNTYwLCAwLCB7MHgwMSwweDNkLDB4YzEsMHgwZSwweDMwLDB4MDMsMHhlYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHg4ZSwweGYwLDB4MDMsMHhiOCB9LAorICAxNiwgMHhkNTcwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGEwLDB4NDAsMHhlYiwweDA4LDB4M2UsMHg4MCB9LAorICAxNiwgMHhkNTgwLCAwLCB7MHgwZCwweGIwLDB4MDMsMHhlMCwweDAwLDB4YzgsMHgwMCwweDNhLDB4NTEsMHgwZiwweDgyLDB4MDMsMHg2NCwweDIwLDB4ZGIsMHgwMCB9LAorICAxNiwgMHhkNTkwLCAwLCB7MHgzZCwweDgyLDB4MGMsMHhiYywweDAzLDB4MmMsMHgxMCwweGRiLDB4MDAsMHg3MiwweGMwLDB4MGQsMHhiMSwweDAzLDB4MGMsMHgyMCB9LAorICAxNiwgMHhkNWEwLCAwLCB7MHhkMywweDAwLDB4MzIsMHhjMCwweDBmLDB4YjAsMHgwYiwweDUwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNWIwLCAwLCB7MHhjOCwweDA1LDB4MDEsMHgwMCwweDg3LDB4YzAsMHgyZSwweGE4LDB4MDgsMHhmMSwweDEyLDB4YzUsMHg0MCwweDg4LDB4MDAsMHgyMiB9LAorICAxNiwgMHhkNWMwLCAwLCB7MHg0MCwweDBiLDB4ODQsMHgwMiwweDI3LDB4MDAsMHhhZiwweDAwLDB4MmUsMHhjMCwweDA4LDB4YmMsMHgxMiwweDNjLDB4MDAsMHg4YiB9LAorICAxNiwgMHhkNWQwLCAwLCB7MHgwMSwweDIzLDB4YzAsMHgyOCwweGY1LDB4NGEsMHgzZCwweDI4LDB4ZGYsMHgwMCwweDMzLDB4YzAsMHg0YiwweGYwLDB4MDMsMHgzMiB9LAorICAxNiwgMHhkNWUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDQ4LDB4ODAsMHhhMywweDkwLDB4MmMsMHgwMCB9LAorICAxNiwgMHhkNWYwLCAwLCB7MHgwOCwweDMwLDB4MDIsMHhjMSwweDAwLDB4OTIsMHgwNCwweDI4LDB4MDAsMHgwYiwweDE0LDB4MTIsMHg0MywweDAwLDB4YjMsMHgwNCB9LAorICAxNiwgMHhkNjAwLCAwLCB7MHgyYywweDMwLDB4MGEsMHhiMCwweDBhLDB4OGMsMHgwMCwweDkzLDB4MDAsMHg2MCwweGMwLDB4MDgsMHgzYywweDA2LDB4MGUsMHgwMSB9LAorICAxNiwgMHhkNjEwLCAwLCB7MHhiMywweDAwLDB4MmUsMHhjMCwweDhiLDB4MzAsMHgwNiwweDM4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNjIwLCAwLCB7MHgyMCwweDAxLDB4MTIsMHgwMCwweDg3LDB4ODAsMHgyZCwweDI0LDB4MDgsMHg3OCwweDAyLDB4ZDIsMHgwMCwweDk1LDB4ODAsMHgyMSB9LAorICAxNiwgMHhkNjMwLCAwLCB7MHhhMCwweDBiLDB4NjgsMHgwMiwweDVhLDB4MjAsMHg4NywweDgwLDB4MmQsMHg2NiwweDFhLDB4N2MsMHgwMiwweDllLDB4MDAsMHg4NyB9LAorICAxNiwgMHhkNjQwLCAwLCB7MHg4MCwweDIxLDB4ZTEsMHgxOCwweDc5LDB4MDIsMHg5ZSwweDQwLDB4YjcsMHg4MCwweGExLDB4ZTAsMHgwYiwweDc4LDB4MDIsMHg0OCB9LAorICAxNiwgMHhkNjUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDAwLDB4MDAsMHhlMywweGEwLDB4M2MsMHg0MCB9LAorICAxNiwgMHhkNjYwLCAwLCB7MHgwYywweDMwLDB4MDMsMHhjNCwweDIyLDB4ZDksMHgwMCwweDM4LDB4ZDQsMHgwZiwweDMwLDB4ODMsMHg2OCwweDQwLDB4ZjMsMHgwMCB9LAorICAxNiwgMHhkNjcwLCAwLCB7MHgzYywweDgwLDB4MGEsMHgzMiwweDAyLDB4OGMsMHgwMCwweGRiLDB4MDAsMHhhMiwweGM0LDB4MGMsMHgzMCwweDAzLDB4MGMsMHgwMCB9LAorICAxNiwgMHhkNjgwLCAwLCB7MHhmMywweDAwLDB4M2MsMHhjMCwweDBmLDB4YjEsMHgwMywweDEyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNjkwLCAwLCB7MHg0MCwweDBkLDB4YjAsMHgwMCwweGZmLDB4MTAsMHgzZiwweDQwLDB4MGUsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGVkLDB4MDAsMHgzZiB9LAorICAxNiwgMHhkNmEwLCAwLCB7MHhjMCwweDBmLDB4MzAsMHgxMywweGJjLDB4NDAsMHg3ZiwweDEwLDB4M2YsMHhjMSwweDJkLDB4ZjAsMHgwMywweDdjLDB4MDAsMHhmYiB9LAorICAxNiwgMHhkNmIwLCAwLCB7MHg0MCwweDNmLDB4YzIsMHgwZSwweGY0LDB4ODMsMHg3YywweDAwLDB4ZGYsMHgwMCwweDNmLDB4YzIsMHgwZiwweGYwLDB4MDMsMHg5MCB9LAorICAxNiwgMHhkNmMwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVjLDB4MDAsMHhkYiwweGEwLDB4MzIsMHhjMCB9LAorICAxNiwgMHhkNmQwLCAwLCB7MHgwZCwweGI3LDB4MDMsMHhlMCwweDAwLDB4Y2EsMHgwNCwweDNlLDB4ODAsMHgwZiwweGI4LDB4MDMsMHgyYywweDEwLDB4ZmIsMHgwMCB9LAorICAxNiwgMHhkNmUwLCAwLCB7MHgzMywweDAwLDB4OGQsMHhiMCwweDAzLDB4MmMsMHg4MCwweGU5LDB4NDAsMHgzZSwweGQyLDB4MGYsMHhiNCwweDAzLDB4MmQsMHg4MCB9LAorICAxNiwgMHhkNmYwLCAwLCB7MHhlYiwweDIwLDB4YjIsMHhjMCwweDBmLDB4YjIsMHgwMywweGVhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNzAwLCAwLCB7MHg0OCwweDExLDB4OTAsMHgwMCwweGI3LDB4MTAsMHgxMSwweGMwLDB4MDgsMHg3MCwweDgyLDB4ZDgsMHgwYSwweDg3LDB4MDEsMHgyZCB9LAorICAxNiwgMHhkNzEwLCAwLCB7MHg4MCwweDg5LDB4NzAsMHgwMywweGQ4LDB4MDgsMHhiNywweDBhLDB4MjEsMHg0MCwweDJjLDB4NzAsMHgwMiwweDBkLDB4YzAsMHg4NSB9LAorICAxNiwgMHhkNzIwLCAwLCB7MHgwMSwweDc5LDB4YzgsMHgwYiwweDMyLDB4MDIsMHgwZCwweDIwLDB4OGYsMHgyOCwweDIxLDB4YzAsMHgwYiwweDcyLDB4ODIsMHhkMiB9LAorICAxNiwgMHhkNzMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHg0MCwweDk2LDB4MTAsMHg5NywweDkwLDB4MjMsMHhlMCB9LAorICAxNiwgMHhkNzQwLCAwLCB7MHgwOSwweDdhLDB4MDIsMHhkNiwweDAwLDB4OTcsMHg4MCwweDJkLDB4ZjAsMHgwYiwweDc4LDB4ODIsMHgxZSwweDAwLDB4YjMsMHhiMCB9LAorICAxNiwgMHhkNzUwLCAwLCB7MHgyMSwweGEwLDB4MDgsMHg3OCwweDAyLDB4MWUsMHgwMCwweGE1LDB4ODAsMHgyZCwweGUwLDB4MGIsMHg3YSwweDAyLDB4MWUsMHg4MCB9LAorICAxNiwgMHhkNzYwLCAwLCB7MHhhNywweGIwLDB4MjEsMHhlOCwweDBiLDB4NzksMHgwMiwweGYwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNzcwLCAwLCB7MHg0OCwweDE0LDB4YzAsMHgwMCwweGIzLDB4MDAsMHgyMCwweGUyLDB4MDgsMHgzMCwweDAyLDB4YzYsMHg0MCwweDkzLDB4NzAsMHgyYyB9LAorICAxNiwgMHhkNzgwLCAwLCB7MHhjMCwweDA5LDB4M2MsMHgwMiwweDhlLDB4MDAsMHhiMywweDAwLDB4MjAsMHhkOCwweDA4LDB4MTgsMHgwMiwweDBjLDB4MDAsMHg4MSB9LAorICAxNiwgMHhkNzkwLCAwLCB7MHg5MCwweDJlLDB4YzAsMHgwYiwweDMwLDB4MmEsMHgyYywweDEwLDB4ODMsMHgwMCwweGEwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhkMiB9LAorICAxNiwgMHhkN2EwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxMSwweGI5LDB4MDAsMHhkYSwweDAyLDB4MzMsMHhiOCB9LAorICAxNiwgMHhkN2IwLCAwLCB7MHgwZCwweGEwLDB4MDMsMHhmOCwweDAwLDB4ZGUsMHhjMCwweDNmLDB4YjAsMHg0ZiwweGVjLDB4MDYsMHgzOCwweDQwLDB4ZmEsMHgwMCB9LAorICAxNiwgMHhkN2MwLCAwLCB7MHhiMywweDkwLDB4MGMsMHg2YywweDBiLDB4MjgsMHgwOCwweGVhLDB4MDEsMHg3ZSwweDgwLDB4MGYsMHhhMCwweDAzLDB4MjgsMHgwMCB9LAorICAxNiwgMHhkN2QwLCAwLCB7MHhlYSwweDAwLDB4MzIsMHg4MCwweDBmLDB4YTAsMHgwMywweGZhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkN2UwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4NDAsMHgzYSwweDAwLDB4MGYsMHg4NCwweDAzLDB4ZTEsMHgwMCwweGU4LDB4MDIsMHgzZSB9LAorICAxNiwgMHhkN2YwLCAwLCB7MHgwMCwweDBmLDB4ODQsMHgwMywweGUxLDB4NDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODEsMHgwMywweGUwLDB4MDAsMHhmOCB9LAorICAxNiwgMHhkODAwLCAwLCB7MHgwMCwweDNhLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiB9LAorICAxNiwgMHhkODEwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MjAsMHhmOSwweGMwLDB4M2UsMHg3MCB9LAorICAxNiwgMHhkODIwLCAwLCB7MHgwZSwweDkwLDB4MDIsMHhlNCwweDgwLDB4YzksMHgwMCwweDMyLDB4NDIsMHgwYywweDk4LDB4ODMsMHhhNCwweDg0LDB4ZjksMHgwMCB9LAorICAxNiwgMHhkODMwLCAwLCB7MHhiMiwweDYwLDB4MGMsMHg5MCwweDgzLDB4MjQsMHgwMCwweGM5LDB4MDAsMHgzZSwweDQwLDB4MGMsMHgxYSwweDAyLDB4MjQsMHgwMCB9LAorICAxNiwgMHhkODQwLCAwLCB7MHhjMSwweDAwLDB4YjIsMHg0MCwweDBmLDB4OTAsMHgwMSwweGMyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkODUwLCAwLCB7MHg4MCwweDA0LDB4NjUsMHgwMCwweGI5LDB4ODEsMHgyYywweDYwLDB4MGQsMHg5NCwweGMyLDB4YzcsMHgwOCwweDg5LDB4MDAsMHgyMiB9LAorICAxNiwgMHhkODYwLCAwLCB7MHg0MCwweDA4LDB4OTUsMHhjNywweGE0LDB4MDAsMHhiOSwweDAwLDB4MjgsMHg3MCwweGE4LDB4OTQsMHgwYSwweDI0LDB4MDAsMHg4OSB9LAorICAxNiwgMHhkODcwLCAwLCB7MHgwNCwweDJlLDB4NDAsMHgyOCwweDkwLDB4MmEsMHgyNiwweDAwLDB4ODksMHgwMCwweDIyLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhlMCB9LAorICAxNiwgMHhkODgwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDAsMHhiOSwweDQwLDB4MmUsMHg0MCB9LAorICAxNiwgMHhkODkwLCAwLCB7MHgwYSwweDkwLDB4MDIsMHhlNSwweDAwLDB4ODEsMHgwMCwweGEwLDB4NDAsMHgwOSwweDkwLDB4NDIsMHhlYywweDAwLDB4YjEsMHgwMCB9LAorICAxNiwgMHhkOGEwLCAwLCB7MHgyMiwweDU4LDB4MDgsMHg5MCwweGEyLDB4MDQsMHgwMiwweDg5LDB4MDAsMHgyZSwweDQwLDB4MDgsMHg5MCwweDAyLDB4YTQsMHhhMCB9LAorICAxNiwgMHhkOGIwLCAwLCB7MHg4OSwweDAwLDB4MjIsMHg0MCwweDBiLDB4OTAsMHgwMiwweGM2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkOGMwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHgwMCwweGIxLDB4MjAsMHgyZSwweGMwLDB4ODksMHgxMiwweDAyLDB4YzQsMHg4MCwweDgxLDB4MjAsMHgyMCB9LAorICAxNiwgMHhkOGQwLCAwLCB7MHg0MCwweDYxLDB4MTAsMHg0MiwweGM1LDB4MDAsMHhiMSwweDIwLDB4MjgsMHg0OCwweDE4LDB4OTAsMHg0MiwweDA0LDB4ODAsMHg4MSB9LAorICAxNiwgMHhkOGUwLCAwLCB7MHgyOCwweDJjLDB4NDgsMHgwOCwweDEyLDB4ODIsMHg4NCwweGEwLDB4ODEsMHgyMCwweDIwLDB4NDgsMHgwYiwweDEyLDB4ODIsMHhjMiB9LAorICAxNiwgMHhkOGYwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDY4LDB4MDAsMHhmOCwweDAwLDB4MmUsMHgwMCB9LAorICAxNiwgMHhkOTAwLCAwLCB7MHgwZSwweDgwLDB4MDMsMHhlMCwweDA4LDB4YzgsMHg1MCwweDMyLDB4MTQsMHgwZCwweDgwLDB4MTcsMHhlOCwweDA0LDB4ZjgsMHg1MCB9LAorICAxNiwgMHhkOTEwLCAwLCB7MHgzMiwweDE0LDB4NGMsMHgwNSwweDBiLDB4MjEsMHg0MCwweGM4LDB4MjAsMHgzZSwweDAwLDB4MGMsMHg4NywweDAzLDB4YTEsMHhjMiB9LAorICAxNiwgMHhkOTIwLCAwLCB7MHhjOCwweDAwLDB4MzIsMHgxNCwweDhmLDB4ODIsMHgwMywweGVlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkOTMwLCAwLCB7MHg5OCwweDFkLDB4ZjQsMHgwMCwweGYxLDB4MTAsMHgzZCwweDQwLDB4MGYsMHg5MSwweDAyLDB4ZDQsMHg0MiwweGZkLDB4MTAsMHgzZiB9LAorICAxNiwgMHhkOTQwLCAwLCB7MHg1MSwweDBlLDB4NTQsMHgxMywweGI1LDB4MDAsMHhmOSwweDEwLDB4MzUsMHg0NCwweDJmLDB4ZDAsMHgwMywweGU0LDB4NTAsMHhmZCB9LAorICAxNiwgMHhkOTUwLCAwLCB7MHgyOCwweDNlLDB4NGUsMHgwZiwweDkwLDB4MDMsMHg2NCwweDAwLDB4ZjksMHgzOCwweDNlLDB4NDQsMHgwZiwweDkyLDB4ODMsMHhlNiB9LAorICAxNiwgMHhkOTYwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgxNSwweGY0LDB4MDAsMHhmZCwweDAwLDB4M2QsMHg0MCB9LAorICAxNiwgMHhkOTcwLCAwLCB7MHgyYywweGQwLDB4MDMsMHhiNiwweDAwLDB4ZjksMHg4MiwweDNlLDB4NDAsMHgwYywweGQwLDB4MDMsMHhmNCwweDAwLDB4ZjksMHg4MCB9LAorICAxNiwgMHhkOTgwLCAwLCB7MHgzMywweDcwLDB4MGMsMHg1MCwweDAzLDB4MzQsMHgwMCwweGM5LDB4YzAsMHgzZSwweDQwLDB4MGMsMHhkYSwweDAzLDB4MTYsMHg4MCB9LAorICAxNiwgMHhkOTkwLCAwLCB7MHhjOSwweDQwLDB4M2UsMHg2MiwweDJjLDB4OTgsMHg4MywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkOWEwLCAwLCB7MHgzOCwweDEwLDB4ZTAsMHgwMCwweGI4LDB4MDAsMHgyZSwweDAwLDB4MDgsMHg4MCwweDAyLDB4MjgsMHgwMCwweGI4LDB4NTAsMHgyNiB9LAorICAxNiwgMHhkOWIwLCAwLCB7MHgwMCwweDA4LDB4YTAsMHgwMiwweGU4LDB4MDAsMHhiOCwweDAwLDB4MmEsMHgzNCwweDJhLDB4YWEsMHgwYSwweDIwLDB4MDAsMHg4OCB9LAorICAxNiwgMHhkOWMwLCAwLCB7MHhjMCwweDJlLDB4MmEsMHgwOCwweDgwLDB4MjIsMHgyMSwweDAwLDB4YTgsMHg4MCwweDJlLDB4MDAsMHgwOCwweDgwLDB4MDIsMHgwZSB9LAorICAxNiwgMHhkOWQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4MDAsMHhiMSwweDAwLDB4MmUsMHg0MCB9LAorICAxNiwgMHhkOWUwLCAwLCB7MHg0OCwweDEwLDB4MDYsMHg4ZCwweDAwLDB4YjEsMHgwMCwweDJjLDB4NDAsMHgyOCwweDEwLDB4MDIsMHhjNCwweDAwLDB4YjEsMHg0MCB9LAorICAxNiwgMHhkOWYwLCAwLCB7MHgyYywweDQ4LDB4MDgsMHgxMCwweDgyLDB4NDQsMHgwMCwweDgxLDB4NjAsMHgyYywweDQwLDB4MjgsMHgxNCwweDBhLDB4MDQsMHg0MCB9LAorICAxNiwgMHhkYTAwLCAwLCB7MHg4MSwweDIwLDB4MmMsMHg0MCwweDA4LDB4MTAsMHgwMiwweDAyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkYTEwLCAwLCB7MHgxOCwweDA1LDB4YTQsMHg0MCwweGI5LDB4MDAsMHgyZSwweDQwLDB4MDgsMHhiMCwweDAyLDB4MjQsMHgwMCwweGI5LDB4MjgsMHgyZSB9LAorICAxNiwgMHhkYTIwLCAwLCB7MHg1MCwweDA4LDB4OTAsMHgyMiwweGU0LDB4MDAsMHhiOSwweDAwLDB4MmUsMHg2MCwweDBiLDB4MTIsMHg0MiwweDY0LDB4MDAsMHg4OSB9LAorICAxNiwgMHhkYTMwLCAwLCB7MHgwMCwweDJjLDB4NDAsMHgwOSwweDkwLDB4MDIsMHgyNCwweDAwLDB4YTksMHgwMCwweDJjLDB4NDAsMHgwOCwweDEwLDB4MDIsMHg0NiB9LAorICAxNiwgMHhkYTQwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgwNSwweGU2LDB4MDAsMHhmOSwweDAwLDB4M2MsMHg0MiB9LAorICAxNiwgMHhkYTUwLCAwLCB7MHgwYywweDkwLDB4MDMsMHhhNywweDQwLDB4ZjksMHg0MCwweDNlLDB4NzAsMHgwYywweDk4LDB4MDIsMHhlNSwweDQwLDB4ZjksMHgwMCB9LAorICAxNiwgMHhkYTYwLCAwLCB7MHgzZSwweDQwLDB4MGMsMHg5OCwweDAzLDB4NjQsMHgwNiwweGM5LDB4MDEsMHgyZSwweDQwLDB4MGMsMHg5MCwweDAzLDB4MjQsMHgwNCB9LAorICAxNiwgMHhkYTcwLCAwLCB7MHhjOSwweDAwLDB4M2UsMHg0MCwweDBjLDB4OTAsMHgwYiwweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkYTgwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDgzLDB4ZTYsMHgxMCwweGY5LDB4MDAsMHgzNiB9LAorICAxNiwgMHhkYTkwLCAwLCB7MHg2OCwweDBmLDB4OWMsMHgwMywweGU2LDB4MDAsMHhmOSwweDAwLDB4M2EsMHg0MCwweDBlLDB4OTgsMHg5MywweGE0LDB4MDAsMHhmOSB9LAorICAxNiwgMHhkYWEwLCAwLCB7MHgwMCwweDNlLDB4NDAsMHgwZSwweDkwLDB4ODMsMHhjNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHg4YSB9LAorICAxNiwgMHhkYWIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwMCwweGEwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwNCB9LAorICAxNiwgMHhkYWMwLCAwLCB7MHgwYywweDgwLDB4MDMsMHgyMSwweDAyLDB4YzgsMHg0MCwweDMyLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhlMSwweDAwLDB4ZjAsMHgwMCB9LAorICAxNiwgMHhkYWQwLCAwLCB7MHgzZSwweDAyLDB4MGMsMHg4MCwweDAzLDB4MjAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGMsMHgwMCwweDAzLDB4MjAsMHgwMCB9LAorICAxNiwgMHhkYWUwLCAwLCB7MHhjOCwweDAwLDB4MzIsMHgwMCwweDBmLDB4ODAsMHgwMywweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkYWYwLCAwLCB7MHgyOCwweDE1LDB4M2EsMHgwMCwweGJlLDB4MDIsMHgyZiwweGIwLDB4MDgsMHg2OCwweDEyLDB4MzgsMHgwMCwweDhhLDB4MDQsMHgyYSB9LAorICAxNiwgMHhkYjAwLCAwLCB7MHg4MCwweDBiLDB4ZTAsMHg0MiwweGZiLDB4MjAsMHhiYSwweDAwLDB4MmYsMHg5MSwweDA4LDB4ZTAsMHgwMiwweDI4LDB4MDAsMHhiYSB9LAorICAxNiwgMHhkYjEwLCAwLCB7MHgwMCwweDI2LDB4ODAsMHgwOCwweGVlLDB4MGEsMHgzOCwweDAwLDB4OGEsMHgwMCwweDIyLDB4ODAsMHgwYiwweGEwLDB4MDIsMHg4YSB9LAorICAxNiwgMHhkYjIwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDQyLDB4MDAsMHhiMywweDAwLDB4MmMsMHhjMiB9LAorICAxNiwgMHhkYjMwLCAwLCB7MHgyOCwweDM4LDB4MGEsMHg0OCwweDAwLDB4ODMsMHgwNCwweDIyLDB4YzAsMHgwYiwweDEwLDB4MDIsMHhjZCwweDgwLDB4YjMsMHgwMCB9LAorICAxNiwgMHhkYjQwLCAwLCB7MHgyZSwweGMwLDB4MDgsMHgxYywweDAyLDB4MjQsMHgwMCwweGIzLDB4MDAsMHgyYywweGMwLDB4MDgsMHgzNCwweDEyLDB4MGUsMHg0MCB9LAorICAxNiwgMHhkYjUwLCAwLCB7MHg4MywweDAwLDB4MjAsMHhjMCwweDBiLDB4MzAsMHgxMiwweDBhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkYjYwLCAwLCB7MHhhMCwweDAxLDB4MTEsMHgwMCwweGI3LDB4MDAsMHgyZiwweGMwLDB4MDgsMHg3MCwweGEyLDB4NGUsMHgwMCwweDhmLDB4YjAsMHgyMSB9LAorICAxNiwgMHhkYjcwLCAwLCB7MHhjYywweDBiLDB4NjAsMHgxMiwweGRjLDB4MTAsMHhiNywweDMwLDB4MmQsMHhjMCwweDA4LDB4ZDAsMHg4MiwweDE0LDB4ODAsMHhiNyB9LAorICAxNiwgMHhkYjgwLCAwLCB7MHgxMiwweDI1LDB4YzgsMHgyOCwweDYwLDB4MDIsMHgxNCwweDAwLDB4ODcsMHhiMiwweDIxLDB4Y2MsMHgwYiwweDMxLDB4MDIsMHhhOCB9LAorICAxNiwgMHhkYjkwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDEyLDB4MDAsMHhmNywweDgwLDB4M2QsMHhlMCB9LAorICAxNiwgMHhkYmEwLCAwLCB7MHgwYywweDM4LDB4MDMsMHg1NiwweDAwLDB4YzcsMHg5MCwweGIxLDB4ZTQsMHgwZiwweDc4LDB4MDMsMHhkZSwweDAwLDB4ZjcsMHg5MCB9LAorICAxNiwgMHhkYmIwLCAwLCB7MHgxZiwweDYwLDB4MmMsMHg0OCwweDBiLDB4MTYsMHhhMCwweGY3LDB4ODAsMHgzYywweGY0LDB4MGMsMHgzOCwweDAzLDB4MWUsMHgwMCB9LAorICAxNiwgMHhkYmMwLCAwLCB7MHhjZiwweGEwLDB4YjEsMHhlOCwweDBmLDB4N2IsMHgwMywweDJhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkYmQwLCAwLCB7MHgwOCwweDBkLDB4YTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweGMwLDB4MGIsMHhiMCwweDAzLDB4YWMsMHgwMCwweGYzLDB4MjEsMHgzZSB9LAorICAxNiwgMHhkYmUwLCAwLCB7MHhjOCwweDA3LDB4YjAsMHgwMiwweGU0LDB4MDAsMHhmYiwweDIwLDB4M2YsMHg0MCwweDBmLDB4ODAsMHgwMywweGU0LDB4ODAsMHhmYiB9LAorICAxNiwgMHhkYmYwLCAwLCB7MHgwMCwweDM2LDB4ZDAsMHgwZiwweGEwLDB4MDMsMHhlMCwweDA4LDB4ZmIsMHg0MiwweDNlLDB4ZDgsMHgwZiwweGIwLDB4MDMsMHhjMiB9LAorICAxNiwgMHhkYzAwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGYwLDB4ODAsMHhjZiwweDgwLDB4MzEsMHhlMSB9LAorICAxNiwgMHhkYzEwLCAwLCB7MHgwYywweGY4LDB4MDMsMHhkYSwweDEwLDB4ZWYsMHg4MCwweDNmLDB4ZTQsMHgwZiwweGQ4LDB4MDMsMHhmZSwweDEwLDB4ZmYsMHg4MiB9LAorICAxNiwgMHhkYzIwLCAwLCB7MHgzZiwweGUwLDB4NGMsMHhkOCwweDFiLDB4MTYsMHgyMCwweGNmLDB4ODAsMHgzZiwweGUwLDB4NGMsMHhkOCwweDMwLDB4ZWUsMHg0MCB9LAorICAxNiwgMHhkYzMwLCAwLCB7MHhmZiwweGMwLDB4YjMsMHhmNCwweDBmLDB4ZjgsMHgwMywweGMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkYzQwLCAwLCB7MHhhOCwweDAxLDB4OTgsMHgyMCwweDgzLDB4NDAsMHgyMSwweGMwLDB4MDgsMHg3MSwweDAyLDB4ZGMsMHg4NCwweDg3LDB4MjAsMHgyZCB9LAorICAxNiwgMHhkYzUwLCAwLCB7MHhjMCwweDBiLDB4NjAsMHgwMiwweGQ5LDB4NjAsMHhmNywweDAwLDB4MmQsMHhjMCwweDA4LDB4ZjAsMHg4MiwweDE0LDB4MDQsMHg4NyB9LAorICAxNiwgMHhkYzYwLCAwLCB7MHgwMCwweDJkLDB4YzAsMHgwOCwweGYwLDB4MDMsMHgxZSwweDAwLDB4YjcsMHgyMCwweDIxLDB4YzAsMHg4YiwweDcwLDB4MDIsMHhlYSB9LAorICAxNiwgMHhkYzcwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGIwLDB4MDAsMHg4NywweDAwLDB4MjEsMHg4MCB9LAorICAxNiwgMHhkYzgwLCAwLCB7MHgwOCwweDcwLDB4MDIsMHhmNSwweDA0LDB4MjcsMHgwMCwweDJkLDB4YzAsMHg4YiwweDcwLDB4MDIsMHhkYywweDAwLDB4YjcsMHgwMCB9LAorICAxNiwgMHhkYzkwLCAwLCB7MHgyYywweDUwLDB4MDgsMHg0MCwweDAyLDB4MTQsMHgwMCwweDg3LDB4MDAsMHgyZCwweGMwLDB4MDgsMHg1MCwweDAyLDB4NWMsMHgwNCB9LAorICAxNiwgMHhkY2EwLCAwLCB7MHhiNywweDAwLDB4YTEsMHhjMCwweDhiLDB4NzAsMHgwMiwweGMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkY2IwLCAwLCB7MHgyMCwweDE0LDB4YzgsMHgwMCwweDgwLDB4MDAsMHgwMCwweDgwLDB4MDgsMHgzMCwweDAyLDB4Y2UsMHgwMCwweDgzLDB4YzAsMHgyYyB9LAorICAxNiwgMHhkY2MwLCAwLCB7MHhkMCwweDRiLDB4MzAsMHgwMiwweGNlLDB4MDAsMHhhYiwweDAyLDB4MmMsMHg0MCwweDQ4LDB4YmMsMHgwMiwweDA0LDB4MDAsMHg4MyB9LAorICAxNiwgMHhkY2QwLCAwLCB7MHgwMCwweDJjLDB4YzAsMHgwOCwweDEwLDB4MDIsMHgwMCwweDA4LDB4YjMsMHgwMCwweDIwLDB4YzAsMHgwOSwweDMwLDB4MDIsMHhjOCB9LAorICAxNiwgMHhkY2UwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweDgzLDB4NDAsMHhjOCwweDAwLDB4MzAsMHhjMCB9LAorICAxNiwgMHhkY2YwLCAwLCB7MHgyYywweGIwLDB4MDMsMHhlYywweDAwLDB4ZWYsMHg4OCwweDNmLDB4ZTYsMHgwNywweGIxLDB4ODMsMHhlMSwweDAwLDB4YmYsMHgwMCB9LAorICAxNiwgMHhkZDAwLCAwLCB7MHgzZSwweGUwLDB4MGMsMHhiOCwweDAzLDB4MzQsMHgwMCwweGNmLDB4MDAsMHgzZiwweGMwLDB4MmMsMHhiMCwweDAzLDB4NjgsMHgxMCB9LAorICAxNiwgMHhkZDEwLCAwLCB7MHhmZiwweDAwLDB4MzMsMHhjMCwweDBmLDB4ZjAsMHgwMywweGVhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZDIwLCAwLCB7MHg4MCwweDAwLDB4ZTQsMHgwMCwweGYxLDB4NDAsMHgzZSwweGMwLDB4MGYsMHhiNCwweDAzLDB4ZWQsMHg0MCwweGZiLDB4MDgsMHgzZSB9LAorICAxNiwgMHhkZDMwLCAwLCB7MHhjMCwweDBmLDB4YTAsMHgwMywweGU1LDB4MjAsMHhmYiwweDAwLDB4M2UsMHhlMCwweDBkLDB4YjAsMHg4MywweGU0LDB4MDAsMHhmMyB9LAorICAxNiwgMHhkZDQwLCAwLCB7MHgwMCwweDNlLDB4YzAsMHgwZiwweDgwLDB4MDMsMHhjNCwweDAwLDB4ZmIsMHgwMCwweDNlLDB4YzAsMHgwZiwweDMwLDB4MDMsMHhlMCB9LAorICAxNiwgMHhkZDUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGYwLDB4MDAsMHhjYSwweDAwLDB4MzMsMHhlMCB9LAorICAxNiwgMHhkZDYwLCAwLCB7MHg0ZSwweGYwLDB4MDMsMHgzNCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHg4ZiwweGU4LDB4MDMsMHhmMCwweDAwLDB4ZmYsMHgwMCB9LAorICAxNiwgMHhkZDcwLCAwLCB7MHhiMSwweDQwLDB4MGMsMHhlMCwweDAzLDB4MzQsMHgwMCwweGVmLDB4MDAsMHhiMywweGMwLDB4MGMsMHhmMCwweDAzLDB4MzgsMHgwMCB9LAorICAxNiwgMHhkZDgwLCAwLCB7MHhjZiwweDAwLDB4M2QsMHhjMCwweDBhLDB4ZjAsMHgwMywweDAwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZDkwLCAwLCB7MHg4MSwweDA0LDB4NjIsMHgyMiwweDg4LDB4OTAsMHgyMiwweGUwLDB4MDgsMHgzYywweDAyLDB4MmUsMHgwOCwweGJiLDB4MDEsMHgyZSB9LAorICAxNiwgMHhkZGEwLCAwLCB7MHhjMCwweDBiLDB4YTAsMHgwMiwweDY2LDB4MDAsMHhiYiwweDAwLDB4MjIsMHhhMCwweDA4LDB4YTksMHgwMiwweDI0LDB4MDAsMHhiYiB9LAorICAxNiwgMHhkZGIwLCAwLCB7MHgwMCwweDIyLDB4YzAsMHgyOCwweDJjLDB4MDIsMHhhMiwweDAwLDB4ZGIsMHgwMCwweDJlLDB4YzAsMHgwYSwweGIwLDB4MDIsMHhhMCB9LAorICAxNiwgMHhkZGMwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDIyLDB4MDAsMHg5OCwweDAwLDB4MjIsMHhjOCB9LAorICAxNiwgMHhkZGQwLCAwLCB7MHgwYSwweDk4LDB4MDIsMHgyNywweDA0LDB4YmIsMHgwMCwweDJlLDB4YzAsMHgwYiwweGIxLDB4MDIsMHhlMiwweDAwLDB4YmIsMHgwMCB9LAorICAxNiwgMHhkZGUwLCAwLCB7MHgyMiwweGUyLDB4MDgsMHhiMCwweDAyLDB4YTQsMHgwMCwweGFiLDB4MDAsMHgyMCwweGMwLDB4MGEsMHg4OCwweDgyLDB4MjMsMHgwMCB9LAorICAxNiwgMHhkZGYwLCAwLCB7MHg4YiwweDAwLDB4MmUsMHhjMCwweDA4LDB4YjAsMHgwMiwweGEwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZTAwLCAwLCB7MHgwOCwweDE0LDB4MDQsMHgwMCwweDkxLDB4NDAsMHgyMiwweGMwLDB4MDgsMHgxMCwweDAyLDB4MGMsMHgwMCwweGIzLDB4MDAsMHgyYyB9LAorICAxNiwgMHhkZTEwLCAwLCB7MHhjMCwweDRiLDB4MjgsMHgyMiwweDQwLDB4MDQsMHhiMywweDAwLDB4MjAsMHhjMCwweDI4LDB4MzAsMHgwYSwweDA0LDB4MDQsMHhiMyB9LAorICAxNiwgMHhkZTIwLCAwLCB7MHgwMCwweDYwLDB4YzAsMHgwOCwweDAwLDB4MDIsMHg4NCwweDIwLDB4OTMsMHgwMCwweDJjLDB4YzAsMHgwYSwweDMwLDB4MDIsMHg4MiB9LAorICAxNiwgMHhkZTMwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDYwLDB4MDAsMHhkYSwweDQwLDB4YjIsMHg4MCB9LAorICAxNiwgMHhkZTQwLCAwLCB7MHgwZSwweDkwLDB4MDMsMHgyNCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHg4ZiwweGEwLDB4MDMsMHhlMCwweDA5LDB4ZmYsMHgwMCB9LAorICAxNiwgMHhkZTUwLCAwLCB7MHgzMiwweDQwLDB4MDgsMHhhMCwweDBiLDB4MzQsMHgwMCwweGViLDB4MDAsMHgzMSwweGMwLDB4MGMsMHg4MCwweDAzLDB4MjgsMHg4MCB9LAorICAxNiwgMHhkZTYwLCAwLCB7MHhjNywweDAwLDB4M2YsMHhjMCwweDBjLDB4ZjAsMHgwMywweDAwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZTcwLCAwLCB7MHhhMCwweDE1LDB4ZDAsMHgwMCwweGVjLDB4MjAsMHgzZiwweDAwLDB4MGYsMHhjMCwweDBiLDB4ZmMsMHgxMCwweGZmLDB4MDEsMHgzZiB9LAorICAxNiwgMHhkZTgwLCAwLCB7MHhjMCwweDBmLDB4ZTAsMHgwMywweGY0LDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGY0LDB4MDAsMHhmZiB9LAorICAxNiwgMHhkZTkwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHg0ZiwweGMwLDB4MDEsMHhmMCwweDA4LDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhlOCB9LAorICAxNiwgMHhkZWEwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZjLDB4MDAsMHhjYywweDkwLDB4MzcsMHgyMCB9LAorICAxNiwgMHhkZWIwLCAwLCB7MHgwZSwweGYwLDB4MTMsMHhiZCwweDA0LDB4ZDQsMHhjMSwweDMzLDB4MmMsMHg0YywweGQ5LDB4MjMsMHgzMiwweDYwLDB4ZmYsMHgyMCB9LAorICAxNiwgMHhkZWMwLCAwLCB7MHgzZCwweGUwLDB4NGYsMHhjMSwweDAzLDB4YjYsMHg0MCwweGNkLDB4MDAsMHgzNywweGUwLDB4MGMsMHhlMiwweDhiLDB4MTAsMHhjMCB9LAorICAxNiwgMHhkZWQwLCAwLCB7MHhjZCwweDAwLDB4MzMsMHhjNiwweDBmLDB4ZDgsMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZWUwLCAwLCB7MHg4MCwweDEwLDB4ZWUsMHgwOCwweDhhLDB4MjAsMHgyMiwweDAwLDB4MDgsMHhiNywweDAyLDB4MmQsMHgwMCwweDhhLDB4MDAsMHhiNiB9LAorICAxNiwgMHhkZWYwLCAwLCB7MHgzYywweDA4LDB4OTksMHgwMiwweDI3LDB4ODQsMHhiZiwweDY4LDB4MmUsMHg4MiwweDBiLDB4MDEsMHgwMiwweDI0LDB4NDAsMHhkOSB9LAorICAxNiwgMHhkZjAwLCAwLCB7MHg0MiwweDIwLDB4YzAsMHg4YSwweGFjLDB4MDIsMHgyZCwweGMyLDB4ODIsMHg0OCwweGEyLDB4ZDAsMHgwYiwweDgyLDB4MDIsMHgyMCB9LAorICAxNiwgMHhkZjEwLCAwLCB7MHgwNiwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4MDAsMHg4OCwweDA0LDB4MjYsMHg4MCB9LAorICAxNiwgMHhkZjIwLCAwLCB7MHgyYSwweDMwLDB4YzIsMHhhNSwweDgwLDB4YTksMHgyMSwweDI4LDB4MDAsMHg4YSwweDAwLDB4MDIsMHgwMCwweDAwLDB4YTMsMHgxMCB9LAorICAxNiwgMHhkZjMwLCAwLCB7MHgyYywweGM4LDB4MGIsMHgwMCwweDAyLDB4YzQsMHg5MCwweDgzLDB4NDIsMHgyNCwweGMxLDB4MDgsMHgwMCwweDAyLDB4NDAsMHg4OCB9LAorICAxNiwgMHhkZjQwLCAwLCB7MHhhMywweDYwLDB4YTgsMHhjMCwweDBiLDB4MDAsMHhjMiwweDIyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZjUwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHgwNiwweDhhLDB4MDAsMHgyMiwweGUwLDB4NDgsMHhiMCwweDAyLDB4MmUsMHgwMiwweGFiLDB4ODAsMHgyZSB9LAorICAxNiwgMHhkZjYwLCAwLCB7MHgyMCwweDRhLDB4OGMsMHgwMiwweDI2LDB4MjAsMHhiYiwweDAwLDB4NmUsMHg4MCwweDBiLDB4MzAsMHhjMiwweDQ2LDB4MDQsMHg5YiB9LAorICAxNiwgMHhkZjcwLCAwLCB7MHgwYSwweGEyLDB4YzAsMHgwYSwweDgwLDB4MTIsMHg2YywweDQwLDB4YTgsMHgwMCwweDJhLDB4YzAsMHgwYiwweDhjLDB4MDIsMHgzMCB9LAorICAxNiwgMHhkZjgwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGVjLDB4MDAsMHhjMSwweDA5LDB4MzYsMHg2MSB9LAorICAxNiwgMHhkZjkwLCAwLCB7MHgwZSwweDMyLDB4MDMsMHhhYiwweDIwLDB4ZjgsMHg4NCwweDNhLDB4NzgsMHgyZSwweDk4LDB4MDMsMHgyNiwweDAwLDB4ZWIsMHgwMCB9LAorICAxNiwgMHhkZmEwLCAwLCB7MHgzZSwweDQwLDB4NGYsMHg5MCwweDAzLDB4ZTIsMHgwMCwweGM5LDB4NDAsMHgzNiwweGUwLDB4MGMsMHhiNCwweDAzLDB4NmUsMHgwMCB9LAorICAxNiwgMHhkZmIwLCAwLCB7MHhlYiwweDAwLDB4M2EsMHhjMCwweDBmLDB4ODgsMHgwMywweDEwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZmMwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwMCwweGZkLDB4MDAsMHgzZiwweDQwLDB4MGYsMHhmYSwweDEzLDB4ZjgsMHgxMCwweGRjLDB4MDQsMHgyNyB9LAorICAxNiwgMHhkZmQwLCAwLCB7MHg0MCwweDBkLDB4NTAsMHg0MywweGY0LDB4MDAsMHhmZiwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZDksMHgwMywweGIwLDB4MDAsMHhmOSB9LAorICAxNiwgMHhkZmUwLCAwLCB7MHgwMSwweDNmLDB4ZjAsMHgwZiwweGYwLDB4MjMsMHhiMiwweDAwLDB4ZDQsMHhhMCwweDM3LDB4YzAsMHgwZiwweGMwLDB4MGIsMHhmOCB9LAorICAxNiwgMHhkZmYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MjAsMHhlYiwweDEwLDB4ZjIsMHgwMCB9LAorICAxNiwgMHhlMDAwLCAwLCB7MHgwZSwweGI0LDB4MDMsMHgyMSwweDgwLDB4YzksMHg0MCwweDNhLDB4NDgsMHgwZiwweDkwLDB4MTMsMHhlMSwweDIwLDB4ZmIsMHgwMCB9LAorICAxNiwgMHhlMDEwLCAwLCB7MHgzZSwweGMwLDB4MGMsMHg4NCwweDAzLDB4MjQsMHgwMCwweGZiLDB4MDEsMHgzNiwweGUwLDB4MGMsMHg3NCwweDBiLDB4OWMsMHgwMCB9LAorICAxNiwgMHhlMDIwLCAwLCB7MHhjZiwweDAwLDB4MzIsMHhlMCwweDBmLDB4ODQsMHgwMywweGQwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMDMwLCAwLCB7MHhjOCwweDA1LDB4MWUsMHgwMCwweDhiLDB4ODAsMHgyMCwweDQwLDB4MDgsMHhiOCwweDAyLDB4ODMsMHg4MCwweDgxLDB4YTAsMHgyMiB9LAorICAxNiwgMHhlMDQwLCAwLCB7MHg3OCwweDBiLDB4OTEsMHg4MywweGUzLDB4MDAsMHhiZiwweDAwLDB4MGUsMHhjMSwweDBhLDB4YjQsMHgwMywweDY0LDB4MDQsMHhiOSB9LAorICAxNiwgMHhlMDUwLCAwLCB7MHg1MCwweDMyLDB4YzAsMHgwYSwweGIyLDB4MDIsMHgyMCwweDAwLDB4ODgsMHgwMCwweDIzLDB4ZDQsMHgwYiwweDg4LDB4MDIsMHhmMiB9LAorICAxNiwgMHhlMDYwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4NDIsMHhhMCwweDgwLDB4MjAsMHgwMCB9LAorICAxNiwgMHhlMDcwLCAwLCB7MHg0OCwweDAwLDB4MDIsMHgwZCwweDA2LDB4ODAsMHg4MCwweDJhLDB4ZDAsMHgwMywweDAwLDB4MDIsMHhjOCwweDAwLDB4YjMsMHgwMCB9LAorICAxNiwgMHhlMDgwLCAwLCB7MHgyYywweGMwLDB4MDgsMHgzNiwweDAyLDB4NDAsMHgwMCwweGI5LDB4MDIsMHgyMiwweGMyLDB4OGIsMHgyNiwweDAyLDB4MGMsMHgxMCB9LAorICAxNiwgMHhlMDkwLCAwLCB7MHgwMSwweDAyLDB4MjQsMHhjMCwweDRiLDB4YTEsMHgwMiwweGY4LDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMGEwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwOCwweDhlLDB4ODAsMHgyMSwweDIxLDB4MDgsMHgyOCwweGMyLDB4OWUsMHgwMCwweDhlLDB4ODAsMHgyMSB9LAorICAxNiwgMHhlMGIwLCAwLCB7MHg2MCwweDBiLDB4NzgsMHgwMiwweDllLDB4MjAsMHhiNywweDgyLDB4MmYsMHhhMSwweDBhLDB4NzgsMHgwMiwweDVlLDB4MDAsMHhiNSB9LAorICAxNiwgMHhlMGMwLCAwLCB7MHg5MSwweGExLDB4ZTAsMHgwYiwweDI5LDB4MDIsMHgzMiwweDQ0LDB4ODYsMHg4MCwweGE1LDB4ZTAsMHgwYiwweDRjLDB4MDIsMHhjOCB9LAorICAxNiwgMHhlMGQwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHhlMSwweDAwLDB4MjIsMHg4MCB9LAorICAxNiwgMHhlMGUwLCAwLCB7MHgwZSwweDAwLDB4MGIsMHgyNCwweDAwLDB4YzAsMHg0NCwweDI4LDB4YWQsMHgwZiwweDIwLDB4MDIsMHhjOCwweDAwLDB4ZjMsMHgwMCB9LAorICAxNiwgMHhlMGYwLCAwLCB7MHgxYywweGMwLDB4MGMsMHgwMSwweDAzLDB4NDgsMHg0YywweGYyLDB4MDQsMHgzMCwweGMwLDB4MGYsMHgxNSwweDAzLDB4ODAsMHg0MCB9LAorICAxNiwgMHhlMTAwLCAwLCB7MHhjMSwweDAwLDB4MTQsMHhjOCwweDBmLDB4MDAsMHgwMywweGRhLDB4MDIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMTEwLCAwLCB7MHg0MCwweDFkLDB4OWMsMHg0MCwweGY3LDB4MDAsMHgzZiwweGMwLDB4OGYsMHhjMCwweDAzLDB4ZTQsMHgwMCwweGZhLDB4MDEsMHgzZiB9LAorICAxNiwgMHhlMTIwLCAwLCB7MHhjMCwweDBmLDB4ZjAsMHgyMywweGZjLDB4MDgsMHhmYiwweDAwLDB4M2YsMHg4MCwweDBmLDB4ZjAsMHgwMSwweGZjLDB4MTAsMHhmZiB9LAorICAxNiwgMHhlMTMwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHgwZSwweGQxLDB4MDMsMHhmYywweDQyLDB4ZmUsMHg4MCwweDNiLDB4YzAsMHgwZiwweGMwLDB4MDMsMHhkMCB9LAorICAxNiwgMHhlMTQwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVjLDB4NDAsMHhjOCwweDAwLDB4M2UsMHhjMCB9LAorICAxNiwgMHhlMTUwLCAwLCB7MHgwZiwweDkwLDB4MDMsMHhlZSwweDA4LDB4Y2IsMHgwMCwweDMyLDB4YzAsMHgwZiwweGEwLDB4MjMsMHhlNiwweDAzLDB4Y2IsMHg0YyB9LAorICAxNiwgMHhlMTYwLCAwLCB7MHgzMiwweDQwLDB4MGYsMHhiMCwweDA3LDB4ZTgsMHgwMCwweGY5LDB4MDAsMHgxNiwweDQwLDB4MGMsMHhhMCwweDBiLDB4NmMsMHgwMCB9LAorICAxNiwgMHhlMTcwLCAwLCB7MHhjZiwweDAyLDB4MzIsMHhjNSwweDBjLDB4ODAsMHgwMywweDAyLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMTgwLCAwLCB7MHg0OCwweDExLDB4OWMsMHg4MCwweDg0LDB4MDQsMHgyZCwweGMxLDB4MGIsMHg0MCwweDQwLDB4ZGMsMHgwMCwweDg3LDB4MDQsMHgyMSB9LAorICAxNiwgMHhlMTkwLCAwLCB7MHhjMCwweDRiLDB4NzAsMHgxMiwweGZjLDB4MDEsMHg4ZiwweDYwLDB4MjksMHg0MCwweDBiLDB4NzAsMHgxMywweDljLDB4MDAsMHhiNSB9LAorICAxNiwgMHhlMWEwLCAwLCB7MHgwMCwweGEzLDB4NDAsMHgwYSwweDYwLDB4MDIsMHgwMCwweDAwLDB4ODQsMHgwMCwweDIxLDB4YzAsMHgwOCwweDQwLDB4MDIsMHgxMiB9LAorICAxNiwgMHhlMWIwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDhlLDB4MDAsMHg4NywweDgwLDB4MmQsMHhhMiB9LAorICAxNiwgMHhlMWMwLCAwLCB7MHgwYiwweDRjLDB4MTYsMHhkNiwweDA4LDB4OTcsMHg4OCwweDIxLDB4YTAsMHg0YiwweDY4LDB4MDIsMHhkZSwweDA0LDB4YTcsMHg4MCB9LAorICAxNiwgMHhlMWQwLCAwLCB7MHgyMSwweGUwLDB4MGIsMHg0OCwweDAyLDB4ZGEsMHgwNCwweGI2LDB4ODIsMHgyNSwweDYwLDB4MGEsMHhlOCwweDYyLDB4MWUsMHgwMCB9LAorICAxNiwgMHhlMWUwLCAwLCB7MHg4NywweDgwLDB4MjAsMHhlOCwweDA4LDB4NDgsMHgwMiwweDA4LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMWYwLCAwLCB7MHg0OCwweDE0LDB4Y2MsMHgwMCwweDhiLDB4ODAsMHg2YywweGYwLDB4MGIsMHgzYywweDAyLDB4Y2UsMHg0NiwweDliLDB4YzAsMHgyMCB9LAorICAxNiwgMHhlMjAwLCAwLCB7MHhlNCwweDBiLDB4M2MsMHgwMiwweGNjLDB4MjAsMHhhMywweDAwLDB4MjgsMHhlMCwweDBiLDB4MzAsMHgwMiwweDhkLDB4ODAsMHhiMSB9LAorICAxNiwgMHhlMjEwLCAwLCB7MHg4MCwweDIyLDB4NDQsMHgwYSwweDIxLDB4MGEsMHgwMywweDgyLDB4ODAsMHg4MCwweGEwLDB4YzAsMHgwOCwweDA2LDB4MGEsMHgxMiB9LAorICAxNiwgMHhlMjIwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MDIsMHhjZSwweDgwLDB4M2YsMHhhMCB9LAorICAxNiwgMHhlMjMwLCAwLCB7MHgwZiwweGUwLDB4MDMsMHhmYSwweDQwLDB4ZGUsMHhjMCwweGIzLDB4OTAsMHgwZiwweGVhLDB4MTMsMHhmOSwweDA4LDB4ZWEsMHgwNCB9LAorICAxNiwgMHhlMjQwLCAwLCB7MHgzMywweDgyLDB4OGYsMHhlNCwweDAzLDB4ZmIsMHgwOCwweGZlLDB4YTAsMHgzNiwweGEwLDB4MGMsMHhhYywweDBiLDB4NmIsMHg4MiB9LAorICAxNiwgMHhlMjUwLCAwLCB7MHhjNiwweGEwLDB4MzIsMHg4MCwweDJjLDB4ZTQsMHgwMywweDNhLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMjYwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4OTAsMHgzZSwweDAyLDB4MGYsMHg4MCwweDgzLDB4ZTEsMHgwMCwweGU4LDB4MjAsMHgzZSB9LAorICAxNiwgMHhlMjcwLCAwLCB7MHgwMywweDBmLDB4ODIsMHgwMywweGUxLDB4NDAsMHhkOCwweDAwLDB4M2UsMHgyMCwweDBmLDB4MDAsMHg5MywweGEwLDB4NDAsMHhmOCB9LAorICAxNiwgMHhlMjgwLCAwLCB7MHgwMCwweDNlLDB4MTAsMHg4ZiwweDA4LDB4MGIsMHhmMCwweDAwLDB4ZmMsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiB9LAorICAxNiwgMHhlMjkwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDAsMHhlOSwweDAwLDB4MzYsMHg0MCB9LAorICAxNiwgMHhlMmEwLCAwLCB7MHgwZiwweDk0LDB4MDcsMHhlNiwweDAwLDB4ZjksMHg4MCwweGIwLDB4NDAsMHgwYywweDk0LDB4MDMsMHhlNCwweDQwLDB4ZjksMHgwMCB9LAorICAxNiwgMHhlMmIwLCAwLCB7MHgzMiwweDQwLDB4MGYsMHg5NCwweDBiLDB4YTQsMHgwMCwweDcxLDB4YzAsMHgzMiwweDQwLDB4MmMsMHg5NCwweDIzLDB4MjQsMHgwMiB9LAorICAxNiwgMHhlMmMwLCAwLCB7MHhjOSwweDAwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweDAyLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMmQwLCAwLCB7MHg4MCwweDA0LDB4NDQsMHgwMCwweDg5LDB4MDAsMHgyMiwweDQwLDB4MGIsMHg5OCwweDAyLDB4ZTYsMHg2MCwweGI5LDB4MDAsMHgyMiB9LAorICAxNiwgMHhlMmUwLCAwLCB7MHg2MCwweDBhLDB4OWMsMHgwMiwweGU2LDB4MjQsMHhiOSwweDA0LDB4MzYsMHg0MCwweDBiLDB4OTgsMHgwMCwweDI0LDB4MDAsMHhiOSB9LAorICAxNiwgMHhlMmYwLCAwLCB7MHg4MCwweGEyLDB4NTIsMHgwOCwweDkwLDB4MDIsMHgyNCwweDAwLDB4ODksMHg0MCwweDIyLDB4NDAsMHg2OCwweDk0LDB4MDIsMHgyMCB9LAorICAxNiwgMHhlMzAwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDAsMHhhOSwweDAwLDB4MjYsMHg0MCB9LAorICAxNiwgMHhlMzEwLCAwLCB7MHgwMywweDk0LDB4MDIsMHhlNCwweDAxLDB4YjksMHgxMCwweDIyLDB4NTUsMHgwOCwweDkwLDB4MjIsMHhlNCwweDAwLDB4YjEsMHgwMCB9LAorICAxNiwgMHhlMzIwLCAwLCB7MHgyNiwweDQwLDB4MGIsMHg5MCwweDAwLDB4MmMsMHgwOSwweGI5LDB4MDAsMHgyMiwweDYwLDB4MDgsMHg5MCwweDBhLDB4MWMsMHgwNCB9LAorICAxNiwgMHhlMzMwLCAwLCB7MHg4ZCwweDA4LDB4YTAsMHg0MCwweDA4LDB4MTAsMHg4MiwweDBlLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMzQwLCAwLCB7MHgwOCwweDA0LDB4MDYsMHgwMCwweDgxLDB4MDAsMHgyMCwweDUwLDB4MGIsMHgxMiwweDQyLDB4YzQsMHg4MCwweGIxLDB4MDQsMHgyMCB9LAorICAxNiwgMHhlMzUwLCAwLCB7MHg1MCwweDBhLDB4MTQsMHgwMiwweGM1LDB4MDAsMHhiMSwweDIyLDB4MjQsMHg0MCwweDBiLDB4MTIsMHgyMiwweDA0LDB4MDEsMHhiMSB9LAorICAxNiwgMHhlMzYwLCAwLCB7MHg0MCwweDIwLDB4NTAsMHgwOCwweDEwLDB4MGEsMHgxNSwweDAwLDB4ODUsMHg0MCwweDI4LDB4NTAsMHgwOCwweDE0LDB4MGEsMHgwYSB9LAorICAxNiwgMHhlMzcwLCAwLCB7MHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHhlOCwweDUwLDB4MzYsMHgwMCB9LAorICAxNiwgMHhlMzgwLCAwLCB7MHgwZiwweDg1LDB4MDIsMHhlMSwweDQwLDB4ZjgsMHg1MCwweDMyLDB4MDAsMHgwYywweGEwLDB4MjMsMHhlMCwweDEwLDB4ZjgsMHg1MCB9LAorICAxNiwgMHhlMzkwLCAwLCB7MHhiMiwweDE0LDB4MGYsMHhhNSwweDAzLDB4YTEsMHg0OCwweGZhLDB4MDAsMHhiMiwweDAwLDB4MGMsMHg4MCwweDAzLDB4MjAsMHgwNCB9LAorICAxNiwgMHhlM2EwLCAwLCB7MHhjNCwweDAyLDB4MzIsMHgwMCwweDBjLDB4MDAsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlM2IwLCAwLCB7MHg5OCwweDFkLDB4ZTUsMHgwMCwweGZkLDB4MDAsMHgzZiwweDQwLDB4MGYsMHhkMSwweDAzLDB4ZDQsMHg0NCwweGY1LDB4MDAsMHgzZiB9LAorICAxNiwgMHhlM2MwLCAwLCB7MHg1MSwweDBmLDB4ZDQsMHgwMywweGY1LDB4MDAsMHhmOSwweDEwLDB4M2IsMHg0MCwweDBmLDB4ZDEsMHgwMCwweGY1LDB4MTAsMHhmNSB9LAorICAxNiwgMHhlM2QwLCAwLCB7MHg0MCwweDdmLDB4NDAsMHgwZiwweDU0LDB4MmIsMHhlNSwweDAwLDB4ZjksMHg0MCwweDM2LDB4NTAsMHgwZiwweGQwLDB4MDMsMHhlNiB9LAorICAxNiwgMHhlM2UwLCAwLCB7MHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGY2LDB4MTAsMHhiZCwweDQwLDB4MzMsMHg0MCB9LAorICAxNiwgMHhlM2YwLCAwLCB7MHgwZiwweGRhLDB4MDMsMHgzNywweDgwLDB4Y2QsMHgwMCwweDNmLDB4NDAsMHgwZiwweGQwLDB4MDMsMHhmNCwweDAwLDB4ZTksMHhhMCB9LAorICAxNiwgMHhlNDAwLCAwLCB7MHgzZSwweDQwLDB4MGMsMHhkZSwweDE3LDB4YTQsMHgwOCwweGZkLDB4YzAsMHgzMywweDQxLDB4OGQsMHhkYSwweDEzLDB4MjYsMHhhMCB9LAorICAxNiwgMHhlNDEwLCAwLCB7MHhmOSwweGE4LDB4MzIsMHg3OCwweDBjLDB4YjQsMHgwYiwweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNDIwLCAwLCB7MHgzOCwweDEwLDB4ZTEsMHgwMCwweGI4LDB4YTAsMHgzNiwweDIwLDB4MGIsMHg4YSwweDgyLDB4YTIsMHg4MCwweDJhLDB4YTgsMHgyZSB9LAorICAxNiwgMHhlNDMwLCAwLCB7MHgwMCwweDBiLDB4ODAsMHgxMiwweGUwLDB4MDQsMHhiOCwweGExLDB4MmUsMHgyOCwweDRhLDB4OGUsMHgwMiwweDJhLDB4YTAsMHhiYSB9LAorICAxNiwgMHhlNDQwLCAwLCB7MHhjMCwweDIyLDB4MjgsMHgwOCwweDg1LDB4MDIsMHgyMSwweDA4LDB4YjgsMHhlOCwweGEyLDB4M2MsMHgwOCwweGM4LDB4MDIsMHgwZSB9LAorICAxNiwgMHhlNDUwLCAwLCB7MHgwNiwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM1LDB4MDAsMHhiOSwweDAwLDB4MjAsMHg0YSB9LAorICAxNiwgMHhlNDYwLCAwLCB7MHgwYiwweDE0LDB4MDIsMHgwNSwweDgwLDB4MDEsMHgwMCwweDJjLDB4NDEsMHgwYiwweDEwLDB4MDIsMHhjNCwweDA0LDB4YTEsMHg0YSB9LAorICAxNiwgMHhlNDcwLCAwLCB7MHgyZSwweDQyLDB4MDgsMHgxNCwweDAyLDB4ODQsMHgxMCwweGIxLDB4NjAsMHhhMCwweDRhLDB4MDksMHgxMCwweDAyLDB4NDQsMHgwMCB9LAorICAxNiwgMHhlNDgwLCAwLCB7MHhiNSwweDAxLDB4MjksMHg0MCwweDE4LDB4ZDIsMHgwMiwweDEyLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNDkwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMCwweGI5LDB4MjEsMHgyNiwweDQwLDB4MGIsMHg5NiwweDAyLDB4YTQsMHgxMCwweGE5LDB4MDAsMHgyZSB9LAorICAxNiwgMHhlNGEwLCAwLCB7MHg0MCwweDBiLDB4OTYsMHgxMiwweGU0LDB4MjAsMHhiOSwweDAwLDB4MmUsMHg0MSwweDBhLDB4OTAsMHg0MiwweDI0LDB4MDAsMHhiOSB9LAorICAxNiwgMHhlNGIwLCAwLCB7MHgwMCwweDIyLDB4NDEsMHgwOCwweDk4LDB4MjIsMHg2NCwweDAwLDB4YjksMHgyMCwweDJiLDB4NDEsMHgyOCwweGQ0LDB4MDIsMHgwNiB9LAorICAxNiwgMHhlNGMwLCAwLCB7MHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxMSwweGU0LDB4MDAsMHhmOSwweGUwLDB4MzIsMHg1OCB9LAorICAxNiwgMHhlNGQwLCAwLCB7MHgwZiwweDk4LDB4MDMsMHgyNiwweDQwLDB4YzksMHg0MCwweDNlLDB4NTgsMHgwZiwweDljLDB4MDMsMHhlNCwweDAwLDB4ZTksMHgwMCB9LAorICAxNiwgMHhlNGUwLCAwLCB7MHg2ZSwweDQwLDB4MGMsMHg5YSwweDAyLDB4YTYsMHgwMCwweGY5LDB4NDQsMHgzMiwweDQwLDB4MGQsMHg5YSwweDBiLDB4NjQsMHg4NCB9LAorICAxNiwgMHhlNGYwLCAwLCB7MHhmOSwweDAwLDB4YmEsMHg0MCwweDBjLDB4MTgsMHgwMywweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNTAwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDUwLDB4MGYsMHg5MCwweDAzLDB4ZTYsMHgwMCwweGY5LDB4MDQsMHgzZSB9LAorICAxNiwgMHhlNTEwLCAwLCB7MHg0OCwweDBmLDB4OTAsMHgwMywweGU0LDB4NDAsMHhmOSwweDAwLDB4M2UsMHg2NSwweDBmLDB4OTksMHg4MSwweGU0LDB4NTAsMHhmOSB9LAorICAxNiwgMHhlNTIwLCAwLCB7MHgyMCwweDNlLDB4NDAsMHg4ZiwweDkwLDB4MDMsMHhhNCwweDgwLDB4ZjksMHgwMCwweDM0LDB4NDAsMHgwZiwweDkyLDB4MDMsMHhkMiB9LAorICAxNiwgMHhlNTMwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDAsMHhmOCwweDQwLDB4M2UsMHgxMCB9LAorICAxNiwgMHhlNTQwLCAwLCB7MHgwZSwweDg0LDB4MDMsMHg2MCwweDA4LDB4YzgsMHgwMCwweDNlLDB4MDgsMHgwZiwweDgwLDB4ODMsMHhlMCwweDI4LDB4ZTgsMHgwNCB9LAorICAxNiwgMHhlNTUwLCAwLCB7MHgzZSwweDAwLDB4MGMsMHg4NCwweDAzLDB4MjEsMHgxYywweGYwLDB4NDgsMHgzMiwweDAwLDB4MGIsMHgwMCwweDAzLDB4ZTAsMHgwMiB9LAorICAxNiwgMHhlNTYwLCAwLCB7MHhjMCwweDAwLDB4MzIsMHgwMCwweDBjLDB4YzAsMHgwYiwweDAyLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNTcwLCAwLCB7MHgyOCwweDA1LDB4MzgsMHgwMCwweGIyLDB4ODgsMHgyZSwweDgwLDB4MDgsMHhlMCwweDAzLDB4N2EsMHg4MCwweDhlLDB4MDAsMHgyZiB9LAorICAxNiwgMHhlNTgwLCAwLCB7MHhhMCwweDBiLDB4ZTgsMHgwMiwweGY5LDB4MTAsMHhiYSwweDAwLDB4MmMsMHg4MCwweDI4LDB4ZTQsMHgwMiwweDI4LDB4MDAsMHhiZSB9LAorICAxNiwgMHhlNTkwLCAwLCB7MHg0MCwweDIzLDB4YjgsMHgwOCwweGU4LDB4MDIsMHhlOCwweDA0LDB4Y2EsMHgyMCwweGEyLDB4ODAsMHgwOCwweGU4LDB4MDIsMHgwYSB9LAorICAxNiwgMHhlNWEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDEsMHhiMywweDAwLDB4MmMsMHg0MCB9LAorICAxNiwgMHhlNWIwLCAwLCB7MHgwOCwweGI4LDB4NDIsMHg2YywweDAyLDB4ODMsMHgwMCwweDJjLDB4ZTAsMHgwYiwweDM4LDB4MDAsMHhjZiwweDQwLDB4YjMsMHgwMCB9LAorICAxNiwgMHhlNWMwLCAwLCB7MHgyYywweGMwLDB4MDgsMHhiNCwweDBhLDB4MGMsMHgwMCwweGIzLDB4NDAsMHhhMiwweDgyLDB4MGEsMHgzOSwweDAyLDB4Y2MsMHgwMCB9LAorICAxNiwgMHhlNWQwLCAwLCB7MHg5MywweDgwLDB4YTAsMHhjMCwweDI5LDB4MjAsMHgwMiwweDBhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNWUwLCAwLCB7MHhhMCwweDAxLDB4MWQsMHgwMCwweGI3LDB4MDAsMHgyZCwweDY0LDB4MjgsMHg3NCwweDAyLDB4NDAsMHgwMCwweDg3LDB4MDUsMHgyZCB9LAorICAxNiwgMHhlNWYwLCAwLCB7MHg5MCwweDBiLDB4NzQsMHgwMiwweGRjLDB4MTAsMHhiNywweDMwLDB4MmQsMHhjOCwweDA4LDB4MzQsMHgwNiwweDFjLDB4ODAsMHhiNyB9LAorICAxNiwgMHhlNjAwLCAwLCB7MHgwMCwweGExLDB4YzAsMHgwYSwweDcwLDB4MDIsMHhkZSwweDgwLDB4ODMsMHgwMCwweDAxLDB4MDAsMHgwOSwweDYwLDB4ODIsMHgyMCB9LAorICAxNiwgMHhlNjEwLCAwLCB7MHgwNCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFhLDB4MDAsMHhmNywweDgwLDB4M2QsMHg2MCB9LAorICAxNiwgMHhlNjIwLCAwLCB7MHgwZSwweGQ4LDB4MGIsMHg1ZSwweDAwLDB4YzcsMHg4MCwweDNkLDB4ZTAsMHgwZiwweDY4LDB4MDMsMHhkZSwweDEwLDB4ZjcsMHhhOSB9LAorICAxNiwgMHhlNjMwLCAwLCB7MHg3ZiwweGU4LDB4NDgsMHg3OCwweDAzLDB4MWYsMHgzMCwweGZmLDB4OTQsMHgzMywweGEwLDB4MGUsMHg3OCwweDAzLDB4Y2YsMHgyNCB9LAorICAxNiwgMHhlNjQwLCAwLCB7MHhkNiwweDgwLDB4YjEsMHhlMCwweDBkLDB4ZjgsMHg0MywweDIyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNjUwLCAwLCB7MHgwOCwweDFkLDB4YWMsMHgwMCwweGJiLDB4MDAsMHgwYywweDQwLDB4MGYsMHhiMCwweDAzLDB4ZWMsMHgwOCwweGY5LDB4MDAsMHgzZSB9LAorICAxNiwgMHhlNjYwLCAwLCB7MHgwMCwweDBmLDB4OTAsMHg0MSwweGVjLDB4MDAsMHhmYiwweDYxLDB4N2UsMHhkMCwweDBmLDB4YjAsMHgwMywweGVjLDB4ODAsMHhmYiB9LAorICAxNiwgMHhlNjcwLCAwLCB7MHg0MCwweDNmLDB4OWIsMHgwYywweGIwLDB4MDMsMHhlZCwweDkwLDB4ZmEsMHgwMCwweDNjLDB4MDAsMHgwZSwweGIwLDB4MDMsMHhjMiB9LAorICAxNiwgMHhlNjgwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGRlLDB4MDAsMHhlZiwweDgwLDB4MzMsMHg2MCB9LAorICAxNiwgMHhlNjkwLCAwLCB7MHgwZCwweGQ4LDB4MDMsMHgzNiwweDQwLDB4ZWYsMHg5MCwweDNlLDB4ZTAsMHgwZiwweGY5LDB4MDMsMHhmZSwweDAwLDB4ZmYsMHg4MCB9LAorICAxNiwgMHhlNmEwLCAwLCB7MHgzMywweGZlLDB4MGMsMHhmYSwweDAzLDB4ZmUsMHgwMCwweGNmLDB4ODAsMHhiMywweGUwLDB4MGYsMHhmOCwweDAzLDB4ZmUsMHgwMCB9LAorICAxNiwgMHhlNmIwLCAwLCB7MHhjZCwweDgwLDB4MzMsMHhlMCwweDBmLDB4YzgsMHg0MywweGMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNmMwLCAwLCB7MHhhOCwweDExLDB4OWMsMHgwMCwweDg1LDB4MDgsMHgzNSwweDQwLDB4MDgsMHg3MCwweDAzLDB4NTIsMHgyMCwweDg3LDB4MTEsMHgyYyB9LAorICAxNiwgMHhlNmQwLCAwLCB7MHhlYywweDBiLDB4NzEsMHgwMiwweGQwLDB4MDAsMHhlNywweDAwLDB4MzUsMHhjNCwweDA4LDB4NzQsMHgwMiwweGRjLDB4NDAsMHg4NyB9LAorICAxNiwgMHhlNmUwLCAwLCB7MHgxMCwweDIxLDB4YzAsMHgwYiwweDcwLDB4MDIsMHhmYywweDgwLDB4ODUsMHgwOCwweDIxLDB4MDAsMHgwYiwweDQxLDB4ODIsMHhlYSB9LAorICAxNiwgMHhlNmYwLCAwLCB7MHgwNiwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MDAsMHhhZiwweDAwLDB4MjMsMHg1MCB9LAorICAxNiwgMHhlNzAwLCAwLCB7MHgwOSwweDUwLDB4MDIsMHgxYywweDgwLDB4YTcsMHgwMSwweDI5LDB4YzAsMHgxYiwweDYwLDB4MDYsMHhkYywweDQwLDB4YjcsMHgxMCB9LAorICAxNiwgMHhlNzEwLCAwLCB7MHgyMSwweGM4LDB4NGEsMHg1MiwweDAyLDB4ZGMsMHgwMCwweDgzLDB4MDAsMHgyMSwweGMwLDB4MGIsMHg3MCwweDAyLDB4ZGMsMHgxMyB9LAorICAxNiwgMHhlNzIwLCAwLCB7MHg4NCwweDAwLDB4MjUsMHhjMCwweDBiLDB4NTgsMHgwMiwweGMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNzMwLCAwLCB7MHgyMCwweDE0LDB4Y2MsMHgwMCwweDgxLDB4ODAsMHgyNCwweDQwLDB4MDgsMHgzZSwweDAyLDB4NmUsMHgwMCwweDg5LDB4MDAsMHgyYyB9LAorICAxNiwgMHhlNzQwLCAwLCB7MHhjMCwweDBiLDB4YjQsMHgwMiwweGNhLDB4ODAsMHhhMywweDAwLDB4MjQsMHhjMCwweDBhLDB4MDQsMHgwMiwweGVjLDB4NDAsMHg4MiB9LAorICAxNiwgMHhlNzUwLCAwLCB7MHgwYSwweDIwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhjZCwweDEwLDB4ODAsMHhjMCwweGE0LDB4MDAsMHgwYiwweDFjLDB4MDIsMHhjOCB9LAorICAxNiwgMHhlNzYwLCAwLCB7MHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweDg0LDB4MDAsMHhlYiwweDgwLDB4MzMsMHg0MCB9LAorICAxNiwgMHhlNzcwLCAwLCB7MHgwZCwweDhjLDB4ODMsMHgyNiwweDAwLDB4ZTksMHhhMCwweDNlLDB4NzgsMHg4ZiwweDkwLDB4ODMsMHhlMSwweDAwLDB4ZmYsMHgwMCB9LAorICAxNiwgMHhlNzgwLCAwLCB7MHgzMSwweGQxLDB4MGUsMHg4NCwweDIzLDB4ZmMsMHgwMCwweGNiLDB4ODIsMHgzMiwweGMwLDB4OGYsMHhiMCwweDAyLDB4ZmQsMHg0MCB9LAorICAxNiwgMHhlNzkwLCAwLCB7MHhjYiwweDgwLDB4YjYsMHhjMCwweDBmLDB4YTQsMHgwMywweGVhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlN2EwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGZiLDB4MDAsMHgzZSwweDQwLDB4MGYsMHhhMCwweDAzLDB4ZTAsMHgwMCwweGY5LDB4MDEsMHgzZSB9LAorICAxNiwgMHhlN2IwLCAwLCB7MHg0MiwweDBmLDB4OTAsMHgwMywweGU1LDB4NTQsMHhlMywweDAwLDB4M2UsMHhjOCwweDA1LDB4OTMsMHgwMywweGVjLDB4ODAsMHhmYiB9LAorICAxNiwgMHhlN2MwLCAwLCB7MHhjMSwweDNlLDB4YzAsMHgwZiwweDIwLDB4MDMsMHhjYywweDQ4LDB4ZjMsMHgwOCwweDNhLDB4MDAsMHgwZiwweGEwLDB4NDMsMHhlMCB9LAorICAxNiwgMHhlN2QwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGYwLDB4MDAsMHhjZiwweDAwLDB4M2YsMHg0MCB9LAorICAxNiwgMHhlN2UwLCAwLCB7MHgwZiwweDMwLDB4MDEsMHgyYywweDBhLDB4Y2QsMHgxMCwweDMzLDB4MDAsMHgwZiwweGQwLDB4ODMsMHgxNCwweDAwLDB4Y2IsMHgwMiB9LAorICAxNiwgMHhlN2YwLCAwLCB7MHgzMywweGMwLDB4MGMsMHhlMSwweDAzLDB4ZWMsMHgxMCwweGNkLDB4MDAsMHgzMywweGMwLDB4MGMsMHhmMCwweDMzLDB4M2MsMHgwMCB9LAorICAxNiwgMHhlODAwLCAwLCB7MHhlYSwweDAwLDB4MzMsMHhjMCwweDBjLDB4ZjAsMHg4MywweGM4LDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlODEwLCAwLCB7MHg4MSwweDA0LDB4NmUsMHgwMCwweDhiLDB4MDAsMHgyZSwweDQwLDB4MGIsMHhiYywweDAyLDB4MmUsMHgwMCwweDBiLDB4MDAsMHgyMiB9LAorICAxNiwgMHhlODIwLCAwLCB7MHgzMCwweDBiLDB4OWMsMHgwMiwweDI3LDB4ODAsMHhhYiwweDAwLDB4MmEsMHhjMCwweDA4LDB4YjgsMHgwMiwweGVjLDB4MDAsMHg4OSB9LAorICAxNiwgMHhlODMwLCAwLCB7MHhjMCwweDIwLDB4ZTAsMHgwOCwweGFlLDB4MDIsMHgyYywweDA4LDB4OGEsMHgwMCwweDIyLDB4MDAsMHgwOCwweGIwLDB4NDIsMHhlOCB9LAorICAxNiwgMHhlODQwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJlLDB4MDAsMHg4YiwweDA0LDB4MmUsMHg0MCB9LAorICAxNiwgMHhlODUwLCAwLCB7MHg4YiwweDhjLDB4MDIsMHhhZSwweDEwLDB4ODksMHgwMCwweDIyLDB4NzAsMHgwYiwweDhjLDB4MDIsMHhhMiwweDAwLDB4OGIsMHgwMSB9LAorICAxNiwgMHhlODYwLCAwLCB7MHgyMiwweGMwLDB4MDgsMHg4MCwweDAyLDB4ZWMsMHgxMCwweDgyLDB4ODgsMHhhMiwweDcwLDB4MDksMHhiOCwweDAyLDB4MmMsMHgwOCB9LAorICAxNiwgMHhlODcwLCAwLCB7MHg4OSwweDAwLDB4MjAsMHhjMCwweDI4LDB4ODAsMHgyMiwweGUwLDB4MTAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlODgwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwNCwweDgxLDB4MDAsMHgyYywweDQwLDB4MGIsMHgyMCwweDAyLDB4ODAsMHgwMCwweDgxLDB4MDQsMHhhMCB9LAorICAxNiwgMHhlODkwLCAwLCB7MHg1MCwweDRiLDB4MDAsMHgwYSwweDgwLDB4MDAsMHhhMywweDAxLDB4MmEsMHhjMSwweDIwLDB4MTAsMHgwMiwweGNjLDB4MTQsMHg4MyB9LAorICAxNiwgMHhlOGEwLCAwLCB7MHgwMCwweDIyLDB4YzAsMHgwOCwweDIwLDB4MDIsMHgwYywweDAwLDB4ODEsMHgwMCwweGUwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHhjMiB9LAorICAxNiwgMHhlOGIwLCAwLCB7MHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDY4LDB4MDAsMHhjYiwweDAwLDB4M2UsMHg0MCB9LAorICAxNiwgMHhlOGMwLCAwLCB7MHgwZiwweDkwLDB4MGIsMHhhYywweDgwLDB4YzksMHgwMCwweDMyLDB4MTAsMHgwZiwweDgwLDB4MDMsMHhhNCwweDAwLDB4Y2YsMHgwMiB9LAorICAxNiwgMHhlOGQwLCAwLCB7MHgzMSwweGMwLDB4MGMsMHg4MCwweDEzLDB4ZmMsMHgwMiwweGNkLDB4MDAsMHgzMywweGMwLDB4MmMsMHg5MCwweDAzLDB4M2MsMHgwMiB9LAorICAxNiwgMHhlOGUwLCAwLCB7MHhlOCwweDAwLDB4YjIsMHhjMCwweDBjLDB4OTAsMHgwMywweGMwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOGYwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgwMiwweGY1LDB4MDAsMHgzZCwweDQwLDB4OGYsMHhmMCwweDIzLDB4NmQsMHgwMCwweGZmLDB4MDAsMHgzZiB9LAorICAxNiwgMHhlOTAwLCAwLCB7MHgwNCwweDBmLDB4YzAsMHgwMywweDcwLDB4MWMsMHhmZiwweDAxLDB4M2YsMHhjMCwweDRmLDB4YzAsMHgwMywweGZjLDB4MDAsMHhmZCB9LAorICAxNiwgMHhlOTEwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHgwZiwweGUwLDB4MGYsMHhmYywweDE4LDB4ZmMsMHgwMCwweDNmLDB4MDAsMHgwZiwweGQwLDB4MDMsMHhlOCB9LAorICAxNiwgMHhlOTIwLCAwLCB7MHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZlLDB4MDAsMHhkNywweDAyLDB4MGYsMHgzMCB9LAorICAxNiwgMHhlOTMwLCAwLCB7MHgwYywweGYyLDB4MDEsMHg3ZSwweDA2LDB4NDQsMHgzMCwweDNmLDB4MjAsMHgwZSwweGYwLDB4MDIsMHg3YywweDg0LDB4ZmQsMHgyMCB9LAorICAxNiwgMHhlOTQwLCAwLCB7MHgyNywweDA4LDB4MGMsMHhkMCwweDAxLDB4MzYsMHgwMCwweGZmLDB4NjAsMHgzMywweGNjLDB4MGIsMHhmMSwweDEzLDB4MmMsMHhjNCB9LAorICAxNiwgMHhlOTUwLCAwLCB7MHhmZiwweDMwLDB4MGYsMHhjZCwweDBjLDB4ZjQsMHgwMywweGYwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOTYwLCAwLCB7MHg4MCwweDEwLDB4ZWUsMHgwMCwweDhmLDB4YzAsMHgyZSwweDAwLDB4MDgsMHhmYywweDAyLDB4MmUsMHgwMCwweDhhLDB4MzAsMHgyOCB9LAorICAxNiwgMHhlOTcwLCAwLCB7MHg1MiwweDA4LDB4ZjYsMHg4MiwweDNjLDB4NjgsMHhiZCwweDkwLDB4MzIsMHgzNCwweDQ4LDB4OWMsMHgxMiwweDI2LDB4MDAsMHhjZiB9LAorICAxNiwgMHhlOTgwLCAwLCB7MHg0MCwweDIzLDB4Y2MsMHgwYiwweGY2LDB4MDIsMHgzZCwweDAwLDB4YmYsMHgxMCwweDJmLDB4Y2MsMHg4OCwweGY2LDB4MDIsMHhlMCB9LAorICAxNiwgMHhlOTkwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4MDAsMHg5MywweDEwLDB4MmMsMHgwOCB9LAorICAxNiwgMHhlOWEwLCAwLCB7MHgwOSwweDMxLDB4MDIsMHg0YywweDAwLDB4OWIsMHgyMCwweDY0LDB4NTgsMHgwMywweDMxLDB4NjIsMHg0YywweDgxLDB4YTEsMHgwMCB9LAorICAxNiwgMHhlOWIwLCAwLCB7MHgyMCwweDAwLDB4NDgsMHgxNCwweDAyLDB4NDQsMHgwMCwweDkzLDB4MzAsMHgyNCwweGMwLDB4MGIsMHgzMywweDAyLDB4OGQsMHg4NCB9LAorICAxNiwgMHhlOWMwLCAwLCB7MHhiMywweDIwLDB4NmMsMHhjMCwweDJhLDB4MzYsMHgwMiwweGUyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOWQwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHgxMCwweDliLDB4MDIsMHgyZSwweDQxLDB4MGIsMHhiMCwweDAyLDB4YTQsMHgwMCwweDlhLDB4MDAsMHg0YSB9LAorICAxNiwgMHhlOWUwLCAwLCB7MHg2MCwweDg4LDB4YjAsMHg1MiwweDZjLDB4MDEsMHhiOSwweDAwLDB4MjYsMHgwMCwweDA4LDB4OTEsMHgyMiwweGVjLDB4MDgsMHhiYiB9LAorICAxNiwgMHhlOWYwLCAwLCB7MHgwMCwweDI2LDB4YzAsMHgwYiwweGIwLDB4MDIsMHhhYywweDAwLDB4YmIsMHgwNSwweDZlLDB4YzEsMHgwYSwweGIwLDB4MDIsMHhmMCB9LAorICAxNiwgMHhlYTAwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGVjLDB4MDAsMHhkYiwweDAxLDB4M2UsMHgzMCB9LAorICAxNiwgMHhlYTEwLCAwLCB7MHgyZCwweDMwLDB4MDMsMHg0NywweDYwLDB4ZDgsMHhhMCwweDE2LDB4MzgsMHg4ZiwweGIwLDB4MDMsMHg2YywweDAwLDB4NzksMHgwMiB9LAorICAxNiwgMHhlYTIwLCAwLCB7MHgzMSwweDYwLDB4MGMsMHhjOCwweDBhLDB4NjYsMHgwMCwweGJiLDB4MDAsMHhiNiwweGMwLDB4MGYsMHhiMCwweDBiLDB4YWMsMHgwMCB9LAorICAxNiwgMHhlYTMwLCAwLCB7MHhmYiwweDAxLDB4M2UsMHhjMSwweDBlLDB4YjAsMHgwMywweGQwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYTQwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgxMCwweGVmLDB4MDgsMHgzZiwweDI0LDB4MGMsMHhmMCwweDAzLDB4NzYsMHgyMCwweGVlLDB4OTAsMHgzNSB9LAorICAxNiwgMHhlYTUwLCAwLCB7MHg0MCwweDBlLDB4NzAsMHgwMywweGFjLDB4MDAsMHhmZCwweDAwLDB4YmIsMHg2NCwweDBmLDB4ODgsMHgxMywweDM0LDB4ODAsMHhjYiB9LAorICAxNiwgMHhlYTYwLCAwLCB7MHgwMCwweDNiLDB4YzAsMHgwZiwweGIwLDB4MDMsMHg2YywweDA4LDB4ZmYsMHgwMCwweDNlLDB4YzAsMHgwZCwweGYwLDB4MDMsMHhmOCB9LAorICAxNiwgMHhlYTcwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDEsMHhmYiwweDgwLDB4MzIsMHgxMCB9LAorICAxNiwgMHhlYTgwLCAwLCB7MHgwZSwweGIwLDB4MDMsMHhlZCwweDAwLDB4Y2IsMHg1MCwweDNlLDB4NDAsMHg4YywweGIwLDB4NDMsMHgyYywweDEwLDB4ZjksMHgwMCB9LAorICAxNiwgMHhlYTkwLCAwLCB7MHgzMiwweDYwLDB4MGMsMHg0MCwweDBiLDB4MjYsMHgwMCwweGMzLDB4MDQsMHgzNiwweGMwLDB4MGMsMHgzMCwweDAzLDB4MmMsMHgwMCB9LAorICAxNiwgMHhlYWEwLCAwLCB7MHg5YiwweDAwLDB4YjAsMHhjMCwweDBjLDB4YjAsMHgwMywweGQwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYWIwLCAwLCB7MHhjOCwweDA1LDB4MGUsMHg4MCwweGJmLDB4MDQsMHgyYSwweDQwLDB4MDAsMHhmNSwweDAwLDB4ZTYsMHgwMCwweDgyLDB4ZDIsMHgyMiB9LAorICAxNiwgMHhlYWMwLCAwLCB7MHg0MCwweDBkLDB4ZjAsMHgyMiwweDNjLDB4MDAsMHg5NSwweDAyLDB4MzYsMHg0MCwweDBhLDB4ODAsMHgwMiwweDJlLDB4MDAsMHg4ZiB9LAorICAxNiwgMHhlYWQwLCAwLCB7MHgwMCwweDM3LDB4YzAsMHgwYSwweGYwLDB4NDIsMHgzYywweDAwLDB4OGYsMHgwMCwweDIzLDB4YzAsMHgyOCwweGYwLDB4MDIsMHhmMiB9LAorICAxNiwgMHhlYWUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRlLDB4MDAsMHhiMywweDAwLDB4MjIsMHgyMCB9LAorICAxNiwgMHhlYWYwLCAwLCB7MHg0YSwweDMwLDB4MDAsMHhjYywweDAwLDB4ODEsMHhjMCwweDI4LDB4MDAsMHgwOCwweDMwLDB4MDIsMHgwYywweDEwLDB4YTEsMHgwMCB9LAorICAxNiwgMHhlYjAwLCAwLCB7MHgyOCwweDgwLDB4MTgsMHgzMCwweDIyLDB4MDQsMHgwNCwweDgzLDB4MDAsMHgyNCwweGMwLDB4MDgsMHgzMCwweDAyLDB4Y2MsMHgwOCB9LAorICAxNiwgMHhlYjEwLCAwLCB7MHg5MywweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwNiwweGY4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYjIwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwMCwweGI3LDB4ODAsMHgyOSwweGEwLDB4MDgsMHg3OCwweDAyLDB4ZmUsMHgyMCwweDhkLDB4ODAsMHgyOSB9LAorICAxNiwgMHhlYjMwLCAwLCB7MHhlNSwweDViLDB4MzgsMHg0MiwweDFlLDB4NDAsMHhhMSwweDgxLDB4MjUsMHhhOCwweDA4LDB4NzksMHgwMiwweDM3LDB4MDAsMHg4NyB9LAorICAxNiwgMHhlYjQwLCAwLCB7MHg4MCwweDI1LDB4ZTAsMHgwYSwweDc4LDB4MGEsMHhkZSwweDgxLDB4ODcsMHg4MCwweDI1LDB4ZTUsMHg0OCwweDc4LDB4MDIsMHhjOCB9LAorICAxNiwgMHhlYjUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHhiMywweDEwLDB4MzAsMHgxMiB9LAorICAxNiwgMHhlYjYwLCAwLCB7MHgwZSwweDMwLDB4MTIsMHhjYywweGMwLDB4YzMsMHgwMCwweDM4LDB4ODAsMHgwYywweDMxLDB4MDYsMHgwYywweDQwLDB4ZjEsMHgwMCB9LAorICAxNiwgMHhlYjcwLCAwLCB7MHgzOCwweDgwLDB4MGMsMHgzMCwweDQzLDB4MDQsMHg0MiwweGMzLDB4MDAsMHgzNiwweGMwLDB4MGMsMHgzMiwweDAzLDB4Y2UsMHhjMCB9LAorICAxNiwgMHhlYjgwLCAwLCB7MHhkYiwweDAwLDB4MzAsMHhjMCwweDBjLDB4MzAsMHgwMywweGQyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYjkwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwMCwweGZmLDB4MTAsMHgzZCwweDg0LDB4NGYsMHhmMSwweDAzLDB4ZDAsMHg0MCwweGZjLDB4MTAsMHgzMyB9LAorICAxNiwgMHhlYmEwLCAwLCB7MHg4MCwweDVkLDB4YjEsMHg4MywweGZjLDB4NTAsMHhkZCwweDBhLDB4MjUsMHg4OSwweDBmLDB4YjgsMHgwMywweGQ0LDB4MDAsMHhmZiB9LAorICAxNiwgMHhlYmIwLCAwLCB7MHgxMCwweDNmLDB4YzAsMHgwZiwweGY0LDB4MDMsMHgzYywweDQwLDB4ZmYsMHgwMCwweDNiLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhkMCB9LAorICAxNiwgMHhlYmMwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVjLDB4MDAsMHhmYiwweDIwLDB4M2UsMHgwMCB9LAorICAxNiwgMHhlYmQwLCAwLCB7MHgwZiwweGI1LDB4MDMsMHgyOSwweDIwLDB4ZjksMHgwMCwweDMyLDB4YTAsMHgwYywweGIwLDB4ODMsMHhlYywweDAwLDB4NDksMHhjOCB9LAorICAxNiwgMHhlYmUwLCAwLCB7MHhiMiwweGMwLDB4OGMsMHhhMCwweDAzLDB4NjQsMHgwMCwweGZiLDB4MDgsMHgxMiwweGVhLDB4MGMsMHhiMCwweDBiLDB4MmMsMHg4MCB9LAorICAxNiwgMHhlYmYwLCAwLCB7MHhmYiwweDIwLDB4MmUsMHhkMiwweDZjLDB4YjYsMHg0MywweGVhLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYzAwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgwMCwweGI3LDB4NDksMHgyZCwweDAwLDB4MGIsMHgzMCwweDgyLDB4MTAsMHgwMSwweGI1LDB4MDIsMHg4MyB9LAorICAxNiwgMHhlYzEwLCAwLCB7MHhjMCwweDFhLDB4NzIsMHgyMiwweGRkLDB4NDEsMHg4NSwweDAwLDB4NjEsMHhjMCwweDE4LDB4MjAsMHgyMCwweDE0LDB4MDAsMHhiZiB9LAorICAxNiwgMHhlYzIwLCAwLCB7MHg0MCwweDM1LDB4ZDAsMHgwZCwweDM0LDB4MDIsMHgxZCwweDIwLDB4YjcsMHgyOCwweDI1LDB4YzEsMHgwOCwweDc0LDB4ODIsMHhkMiB9LAorICAxNiwgMHhlYzMwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4MDQsMHgzNywweGEwLDB4MmQsMHgyMCB9LAorICAxNiwgMHhlYzQwLCAwLCB7MHgwYiwweDdhLDB4MTIsMHgxNiwweDAxLDB4YjMsMHg4MCwweDIxLDB4ZTIsMHgwOCwweDc4LDB4NDIsMHg5ZSwweDAwLDB4ODUsMHg4MCB9LAorICAxNiwgMHhlYzUwLCAwLCB7MHgyMCwweGUxLDB4MTgsMHg2OCwweDAyLDB4NTYsMHgwMCwweGI3LDB4YTAsMHgyNSwweGUwLDB4MDgsMHg3YSwweDAyLDB4MWUsMHgwMCB9LAorICAxNiwgMHhlYzYwLCAwLCB7MHhiNywweDkwLDB4MmMsMHhlNSwweDg4LDB4N2EsMHgwMiwweGYwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYzcwLCAwLCB7MHg0OCwweDE0LDB4Y2MsMHgwMCwweGIzLDB4MDAsMHg2YywweDI0LDB4MWIsMHgzMCwweDAyLDB4MDAsMHgwMCwweGIwLDB4MDAsMHgyMCB9LAorICAxNiwgMHhlYzgwLCAwLCB7MHhmOCwweDBhLDB4MzAsMHgwMiwweGNjLDB4MDAsMHg4MSwweDAwLDB4MjAsMHhkOCwweDE4LDB4MjAsMHgwMiwweDA0LDB4MDAsMHhiMyB9LAorICAxNiwgMHhlYzkwLCAwLCB7MHgwMCwweDI0LDB4YzAsMHgwOSwweDMwLDB4MDIsMHgwYywweDAwLDB4YjMsMHgwMCwweDI2LDB4YzAsMHgwOCwweDMwLDB4MDIsMHhkMiB9LAorICAxNiwgMHhlY2EwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MDAsMHhmYSwweDAwLDB4M2QsMHg4MCB9LAorICAxNiwgMHhlY2IwLCAwLCB7MHgwZiwweDIwLDB4MGIsMHgyOCwweDgwLDB4ZmUsMHgwMCwweDMzLDB4YTAsMHgwYywweGEwLDB4MDMsMHhlOCwweDAyLDB4Y2EsMHgwMiB9LAorICAxNiwgMHhlY2MwLCAwLCB7MHgzMiwweDkwLDB4MmMsMHhlNCwweDAzLDB4NzgsMHgwMCwweGZhLDB4MDAsMHgzMiwweDgwLDB4MGMsMHhhMCwweDAzLDB4MjgsMHgwMCB9LAorICAxNiwgMHhlY2QwLCAwLCB7MHhmYSwweDAwLDB4M2UsMHg4MCwweDBjLDB4YTAsMHgwMywweGZhLDB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlY2UwLCAwLCB7MHg0OCwweDAwLDB4ZTEsMHgwMCwweGYwLDB4MDAsMHgzZSwweDAwLDB4NGYsMHg4MCwweDAzLDB4ZTAsMHg4MCwweGY4LDB4MDAsMHgzZSB9LAorICAxNiwgMHhlY2YwLCAwLCB7MHgwMCwweDBmLDB4ODAsMHgyMywweGMwLDB4MDAsMHhmOCwweDAyLDB4M2MsMHgwMCwweDBmLDB4YzAsMHg4MywweDYwLDB4MDAsMHhiOCB9LAorICAxNiwgMHhlZDAwLCAwLCB7MHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MjMsMHhlMCwweDE4LDB4ZjgsMHgwMSwweDM2LDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiB9LAorICAxNiwgMHhlZDEwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU2LDB4MDAsMHhmOSwweDIxLDB4MzIsMHg2MCB9LAorICAxNiwgMHhlZDIwLCAwLCB7MHgwYywweDkwLDB4MDMsMHgyYywweDQ0LDB4ZjksMHgwMCwweGIyLDB4NDAsMHgwZiwweDkwLDB4MWIsMHgyNCwweDAwLDB4ZTksMHgwMCB9LAorICAxNiwgMHhlZDMwLCAwLCB7MHgzZSwweDQwLDB4MGMsMHgxMCwweDAzLDB4YTQsMHgwMCwweGY5LDB4MDAsMHgzMiwweDQwLDB4MGYsMHgxMCwweDMzLDB4MjQsMHgxMCB9LAorICAxNiwgMHhlZDQwLCAwLCB7MHhmMSwweDAwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweDAyLDB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZDUwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweGI5LDB4NDAsMHhhMiwweDQxLDB4MDgsMHg5MCwweDAyLDB4MjQsMHg4MCwweGU5LDB4MDAsMHgyMiB9LAorICAxNiwgMHhlZDYwLCAwLCB7MHg0MCwweDBiLDB4OTAsMHgxMiwweDI0LDB4MDAsMHg4OSwweDAwLDB4NmUsMHg0MSwweDE4LDB4OTAsMHg0MiwweDI0LDB4MDAsMHhiOSB9LAorICAxNiwgMHhlZDcwLCAwLCB7MHgwNCwweDJhLDB4NDEsMHgwYiwweDkwLDB4MDMsMHg2NCwweDAwLDB4ZjksMHgwMCwweDJhLDB4NDAsMHgwYSwweDkwLDB4MGEsMHgyMCB9LAorICAxNiwgMHhlZDgwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMSwweDI0LDB4ODAsMHhiOSwweDQyLDB4NjIsMHg0OCB9LAorICAxNiwgMHhlZDkwLCAwLCB7MHgyOCwweDkwLDB4MGEsMHgyNCwweDAwLDB4YjEsMHgwMCwweDIyLDB4NDAsMHgwYiwweDEwLDB4MDIsMHgyNCwweDEwLDB4YjksMHgwMiB9LAorICAxNiwgMHhlZGEwLCAwLCB7MHgyZSwweDQwLDB4MDgsMHhkMCwweDAyLDB4YTQsMHgwMCwweGIxLDB4MDAsMHgyMiwweDQwLDB4MGIsMHg5MCwweDAyLDB4MjQsMHgwNCB9LAorICAxNiwgMHhlZGIwLCAwLCB7MHhiOSwweDAwLDB4MjIsMHg0MCwweDA4LDB4MTAsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZGMwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMCwweGIxLDB4MjAsMHg2MCwweDQwLDB4MDgsMHgxMiwweDAyLDB4MDQsMHgwMCwweGExLDB4MjAsMHgyMCB9LAorICAxNiwgMHhlZGQwLCAwLCB7MHg0MCwweDBiLDB4MTIsMHgwMiwweDA0LDB4ODAsMHg5MSwweDIwLDB4MmQsMHg2OCwweDA4LDB4NTIsMHgxMiwweDA0LDB4MDAsMHhiMSB9LAorICAxNiwgMHhlZGUwLCAwLCB7MHgyOCwweDI4LDB4NGEsMHgwOSwweDEyLDB4ODIsMHg0NCwweGEwLDB4YjEsMHgyYywweDI4LDB4NGEsMHgwYSwweDEyLDB4ODIsMHgwMiB9LAorICAxNiwgMHhlZGYwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHhmOCwweDAwLDB4MzIsMHgxNCB9LAorICAxNiwgMHhlZTAwLCAwLCB7MHgwYywweDgwLDB4MDMsMHgyMCwweDAwLDB4ZjgsMHg1MCwweDMyLDB4MTQsMHgwZiwweDg1LDB4MDMsMHgwMSwweDQwLDB4ZjgsMHgwMCB9LAorICAxNiwgMHhlZTEwLCAwLCB7MHgyZSwweDAwLDB4MjgsMHhjMCwweDAzLDB4YTAsMHgwMCwweGY4LDB4MjQsMHgzMCwweDA4LDB4MGYsMHg4MiwweDIzLDB4MjAsMHg4MCB9LAorICAxNiwgMHhlZTIwLCAwLCB7MHhmOCwweDIwLDB4MzIsMHgwOCwweDBjLDB4ODIsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZTMwLCAwLCB7MHg5OCwweDFkLDB4ZTQsMHgwOCwweGY5LDB4MTAsMHgzZiwweDQwLDB4OGYsMHg5MSwweDEzLDB4ZTQsMHgwMCwweGVkLDB4MTAsMHgzZiB9LAorICAxNiwgMHhlZTQwLCAwLCB7MHg1MCwweDBmLDB4OTEsMHgwMywweGU0LDB4NDAsMHhhNSwweDEwLDB4M2UsMHg0NCwweDBmLDB4OTEsMHgwMywweGY0LDB4MDQsMHhmOSB9LAorICAxNiwgMHhlZTUwLCAwLCB7MHgyOCwweDNlLDB4NGIsMHgwYiwweDkyLDB4YTMsMHhlNCwweGEwLDB4ZTksMHgyOCwweDNlLDB4NGEsMHgwZiwweDkyLDB4ODMsMHhlNiB9LAorICAxNiwgMHhlZTYwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGY0LDB4MDAsMHhjZCwweDAwLDB4MzMsMHg0MCB9LAorICAxNiwgMHhlZTcwLCAwLCB7MHg4MCwweGQwLDB4MDEsMHhmNCwweDAwLDB4YTUsMHgwMCwweDI2LDB4NDAsMHgwZiwweDkwLDB4MDMsMHgyNiwweDAwLDB4ZjEsMHg4OCB9LAorICAxNiwgMHhlZTgwLCAwLCB7MHgzZSwweDY4LDB4MGQsMHg5OCwweDgzLDB4NDQsMHgwMCwweGM5LDB4YzAsMHgzYSwweDQwLDB4MGMsMHg5OCwweDAzLDB4MjQsMHgwOCB9LAorICAxNiwgMHhlZTkwLCAwLCB7MHhmOSwweGEwLDB4MzIsMHg3OCwweDBmLDB4OWEsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZWEwLCAwLCB7MHgzOCwweDEwLDB4ZTAsMHgwMiwweDg4LDB4MDAsMHhhMiwweDAwLDB4MDgsMHg4MCwweDAyLDB4ZTAsMHgwMCwweDBhLDB4MDAsMHgyMiB9LAorICAxNiwgMHhlZWIwLCAwLCB7MHgwMCwweDBiLDB4ODAsMHgwMiwweDIwLDB4MDAsMHhiOCwweDQwLDB4MmUsMHgxNCwweDA4LDB4ODAsMHg0MywweDMwLDB4MDAsMHg4OCB9LAorICAxNiwgMHhlZWMwLCAwLCB7MHhhMCwweDIyLDB4MmEsMHgwYSwweDhhLDB4NDIsMHhhMCwweDA1LDB4YjgsMHg0MiwweDMyLDB4MzgsMHgwYiwweDgwLDB4MDIsMHgwZSB9LAorICAxNiwgMHhlZWQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4MDMsMHg5MSwweDAwLDB4MjQsMHg0MCB9LAorICAxNiwgMHhlZWUwLCAwLCB7MHgwYiwweDEwLDB4MDIsMHhjNCwweDExLDB4YjEsMHgwNCwweDIwLDB4NDEsMHgxYiwweDEwLDB4MjIsMHg0NSwweDAwLDB4YjUsMHgwMCB9LAorICAxNiwgMHhlZWYwLCAwLCB7MHgyNSwweDQwLDB4MDksMHg1MCwweDAyLDB4NTQsMHgwMSwweDgxLDB4NDAsMHgyYywweDQwLDB4MDksMHgxNCwweDkyLDB4NDQsMHgwMCB9LAorICAxNiwgMHhlZjAwLCAwLCB7MHhiMSwweDQwLDB4MjQsMHg0YywweDBiLDB4MTQsMHgwYSwweDQyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZjEwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMCwweDk5LDB4MDAsMHgyNCwweDQyLDB4MGIsMHg5MCwweDAyLDB4ZTQsMHgwMSwweDk5LDB4MjAsMHgyNiB9LAorICAxNiwgMHhlZjIwLCAwLCB7MHg0MCwweGNiLDB4OTAsMHgwMiwweDY0LDB4MDAsMHhiYiwweDAwLDB4MmYsMHg0MSwweDBhLDB4ZDAsMHgwMiwweDM0LDB4MDAsMHg4OSB9LAorICAxNiwgMHhlZjMwLCAwLCB7MHgwMCwweDI2LDB4NDAsMHgwYiwweDEwLDB4MDIsMHhlNCwweDAwLDB4MzEsMHgwMCwweDYyLDB4NDAsMHgwYiwweDkwLDB4MDIsMHg0NiB9LAorICAxNiwgMHhlZjQwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGM0LDB4MDAsMHhkOSwweDAxLDB4MzYsMHg1MCB9LAorICAxNiwgMHhlZjUwLCAwLCB7MHgyZiwweDkwLDB4MDMsMHhlNiwweDYwLDB4ZjksMHg4MCwweDM2LDB4NTIsMHgwYiwweDkwLDB4MGEsMHg2NCwweDAwLDB4ZjksMHgwMCB9LAorICAxNiwgMHhlZjYwLCAwLCB7MHgzNiwweDQwLDB4MGQsMHg5MCwweDAzLDB4NjQsMHgwMiwweDA5LDB4MDAsMHgzZSwweDQwLDB4MGQsMHg5MCwweDAzLDB4NjQsMHgwMCB9LAorICAxNiwgMHhlZjcwLCAwLCB7MHhiOSwweDAwLDB4YjYsMHg0MCwweDBmLDB4OTAsMHgwMywweDY4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZjgwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwMCwweGUxLDB4MDAsMHgzYSwweDQxLDB4MGMsMHg5MCwweDIzLDB4ZTYsMHgyMCwweGU5LDB4MDAsMHhiYSB9LAorICAxNiwgMHhlZjkwLCAwLCB7MHg3MCwweDBmLDB4OTAsMHgwMywweGE0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBkLDB4MTAsMHgxMywweGE3LDB4MDAsMHhmOSB9LAorICAxNiwgMHhlZmEwLCAwLCB7MHgwMCwweDNhLDB4NDAsMHgwZSwweDkwLDB4NDMsMHhhNCwweDA4LDB4ZjksMHgwMCwweDNhLDB4NDAsMHgwZiwweDkwLDB4MDMsMHg4YSB9LAorICAxNiwgMHhlZmIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MjAsMHhmOCwweDAwLDB4MzIsMHgwMCB9LAorICAxNiwgMHhlZmMwLCAwLCB7MHgwZiwweDgwLDB4ODMsMHgyMSwweDAwLDB4ZjAsMHgwMCwweDNhLDB4MTEsMHgwOSwweDgwLDB4MDMsMHhlMCwweDAwLDB4YzgsMHgwMSB9LAorICAxNiwgMHhlZmQwLCAwLCB7MHgzMCwweDAxLDB4MGMsMHg4MCwweDAzLDB4YjAsMHgwMCwweGQwLDB4MDAsMHgzNCwweDAwLDB4MGQsMHg4MCwweDAzLDB4MjAsMHgwMCB9LAorICAxNiwgMHhlZmUwLCAwLCB7MHhjOCwweDAwLDB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMywweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZmYwLCAwLCB7MHgyOCwweDA1LDB4MzgsMHgwMCwweGJlLDB4MDAsMHgyMiwweDgwLDB4MDMsMHhlOCwweDAyLDB4MWEsMHgwOCwweGJlLDB4NDgsMHgyMiB9LAorICAxNiwgMHhmMDAwLCAwLCB7MHg4MCwweDBhLDB4YTAsMHgwMywweGI4LDB4MDAsMHhjYSwweDA4LDB4MjIsMHg4MCwweDBmLDB4YTQsMHgwMiwweDA4LDB4MDAsMHg4YSB9LAorICAxNiwgMHhmMDEwLCAwLCB7MHgwMCwweDIyLDB4ODAsMHg4ZCwweGEwLDB4MDIsMHgyOCwweDAwLDB4ZGEsMHgwMCwweDJhLDB4ODEsMHgwOCwweGEwLDB4MDIsMHg4YSB9LAorICAxNiwgMHhmMDIwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDQ0LDB4MDAsMHhiMywweDAwLDB4MjAsMHg0MCB9LAorICAxNiwgMHhmMDMwLCAwLCB7MHgwYiwweDMwLDB4MDIsMHgwOCwweDAwLDB4YjAsMHg2NCwweDY4LDB4YzEsMHgwOCwweGIwLDB4MjIsMHhjYywweDBjLDB4OTMsMHg4MCB9LAorICAxNiwgMHhmMDQwLCAwLCB7MHgwMCwweGMwLDB4NDgsMHgzNiwweDAyLDB4ODgsMHgwMCwweGIzLDB4MDAsMHgyNCwweGMwLDB4MDgsMHgzMCwweDA2LDB4MGMsMHgwMSB9LAorICAxNiwgMHhmMDUwLCAwLCB7MHhhMywweDAyLDB4MmMsMHhjMCwweDA4LDB4YjAsMHgwMiwweDBhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMDYwLCAwLCB7MHhhMCwweDAxLDB4MTQsMHgwOCwweGI1LDB4MDAsMHgyMSwweDQwLDB4MGIsMHgzOCwweDgyLDB4MWMsMHgyMSwweGI3LDB4MDAsMHgyMyB9LAorICAxNiwgMHhmMDcwLCAwLCB7MHhlOCwweDRhLDB4NzIsMHgyNiwweDllLDB4NDAsMHg4ZiwweDgxLDB4YWIsMHg0MCwweDQyLDB4NzAsMHg1MiwweDM4LDB4MDAsMHhhMyB9LAorICAxNiwgMHhmMDgwLCAwLCB7MHgyMiwweDIwLDB4YzQsMHg0OSwweDMxLDB4MDIsMHgxZSwweDBhLDB4YjcsMHgyMiwweDJkLDB4ZTgsMHgwOCwweDcyLDB4MDIsMHhhOCB9LAorICAxNiwgMHhmMDkwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDEyLDB4MDAsMHhmNiwweDgwLDB4MjEsMHhlMCB9LAorICAxNiwgMHhmMGEwLCAwLCB7MHgwYiwweDc4LDB4MGIsMHgxZSwweDAwLDB4YjQsMHg4MiwweDNiLDB4ZTgsMHg0YywweDdjLDB4MTMsMHhmZSwweDAyLDB4OTcsMHg4MCB9LAorICAxNiwgMHhmMGIwLCAwLCB7MHgzMywweGEwLDB4MDgsMHgzOCwweDAzLDB4OWEsMHgwMCwweGY3LDB4ODgsMHgzNSwweGUyLDB4MGMsMHg3OCwweGUzLDB4MGUsMHgwMCB9LAorICAxNiwgMHhmMGMwLCAwLCB7MHhlMywweGU4LDB4MzQsMHhmOCwweDBjLDB4M2MsMHgyMywweDJhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMGQwLCAwLCB7MHgwOCwweDFkLDB4YTgsMHgwNCwweGYxLDB4MDAsMHgzZSwweDQyLDB4MGYsMHhiMCwweDEzLDB4ZWMsMHgwMCwweGZiLDB4MDAsMHhiZSB9LAorICAxNiwgMHhmMGUwLCAwLCB7MHhjYywweDFlLDB4YjYsMHgwNywweGVkLDB4ODAsMHhmYiwweDAwLDB4MzYsMHgwMCwweDBmLDB4YjAsMHg0MywweDY4LDB4MDAsMHhjYiB9LAorICAxNiwgMHhmMGYwLCAwLCB7MHgzMCwweDNlLDB4ZDgsMHgwZiwweGI2LDB4MGIsMHhlZCwweDQwLDB4Y2IsMHgwMCwweDNhLDB4YzAsMHgyZiwweGI2LDB4MDMsMHhjMiB9LAorICAxNiwgMHhmMTAwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGYyLDB4NDAsMHhmYiwweDkxLDB4M2QsMHg0YyB9LAorICAxNiwgMHhmMTEwLCAwLCB7MHg4MCwweGY4LDB4MDMsMHhkZSwweDQwLDB4YzYsMHg4MCwweDFiLDB4ZjAsMHg0ZiwweGZkLDB4MDcsMHhmZiwweDAwLDB4Y2QsMHg4MCB9LAorICAxNiwgMHhmMTIwLCAwLCB7MHgzMywweGUwLDB4MGMsMHg2OCwweDAzLDB4YmEsMHgwMCwweGZmLDB4ODAsMHgzMywweGUwLDB4MDcsMHhmOCwweDAzLDB4M2YsMHgxMCB9LAorICAxNiwgMHhmMTMwLCAwLCB7MHhjZiwweDgwLDB4M2YsMHhlMCwweDBjLDB4ZmMsMHgwMywweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMTQwLCAwLCB7MHhhOCwweDExLDB4OTAsMHgwMCwweGI1LDB4YzAsMHgyZCwweDQwLDB4MDgsMHg2MiwweDAyLDB4ZGMsMHgyMCwweGQ2LDB4MDIsMHgyMSB9LAorICAxNiwgMHhmMTUwLCAwLCB7MHhjOCwweDhmLDB4NzAsMHgwMiwweGRjLDB4ODEsMHhiNSwweDAwLDB4ODEsMHg0NCwweDBkLDB4NjEsMHgyMiwweDE4LDB4MDQsMHhiNyB9LAorICAxNiwgMHhmMTYwLCAwLCB7MHgwMCwweDM1LDB4YzAsMHgwYiwweDcwLDB4MDIsMHhiYywweDAwLDB4YTcsMHgwMSwweDJkLDB4YzAsMHgwOCwweDcwLDB4MDMsMHhlYSB9LAorICAxNiwgMHhmMTcwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDkwLDB4MDEsMHhiNiwweDAxLDB4MmYsMHhjMCB9LAorICAxNiwgMHhmMTgwLCAwLCB7MHgxOCwweDcwLDB4MDIsMHhkYywweDBhLDB4OTYsMHgxMCwweDI5LDB4YzEsMHg0YiwweDcwLDB4MDYsMHhkYywweDEwLDB4ODUsMHgwMCB9LAorICAxNiwgMHhmMTkwLCAwLCB7MHgyNSwweDgwLDB4MDgsMHg2MCwweDgyLDB4MWEsMHgyMCwweGEzLDB4MDAsMHgyNSwweGMwLDB4MGIsMHgzMSwweDAyLDB4NWMsMHg0MCB9LAorICAxNiwgMHhmMWEwLCAwLCB7MHg4NywweDAwLDB4MmQsMHhjMCwweDA4LDB4NzAsMHgwMiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMWIwLCAwLCB7MHgyMCwweDE0LDB4YzgsMHgwMCwweGIxLDB4MDAsMHgyYywweDQwLDB4ODgsMHgyMCwweDAyLDB4ZWQsMHgwMCwweDhhLDB4NjAsMHgyMCB9LAorICAxNiwgMHhmMWMwLCAwLCB7MHhjMCwweDBhLDB4MzAsMHgwMiwweGNjLDB4MDQsMHhiMSwweDAwLDB4MjQsMHgwMCwweDI4LDB4MjQsMHgwMiwweDBhLDB4MDAsMHgzMyB9LAorICAxNiwgMHhmMWQwLCAwLCB7MHgwMCwweDI0LDB4YzAsMHgwYiwweGIwLDB4MDIsMHhjYywweDAwLDB4YTMsMHgwMCwweDJjLDB4YzAsMHg4OCwweDMwLDB4MDIsMHg4OCB9LAorICAxNiwgMHhmMWUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGEwLDB4MDAsMHhmYiwweDAwLDB4M2UsMHhjNiB9LAorICAxNiwgMHhmMWYwLCAwLCB7MHgwYywweDgwLDB4MDMsMHhlNSwweDAwLDB4MDksMHhjOCwweGFiLDB4ZTIsMHgwYiwweGYwLDB4MDIsMHhmYywweDAwLDB4NGEsMHgwMCB9LAorICAxNiwgMHhmMjAwLCAwLCB7MHgzNiwweGMwLDB4MDgsMHg5MCwweDAzLDB4YTYsMHgwMCwweGZmLDB4MDAsMHgzMywweGMwLDB4MGYsMHhmMCwweDAzLDB4N2MsMHgwMCB9LAorICAxNiwgMHhmMjEwLCAwLCB7MHg4ZiwweDAwLDB4MmYsMHhjMCwweDI4LDB4ZjAsMHgwMiwweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMjIwLCAwLCB7MHg4MCwweDAwLDB4ZTEsMHgwMCwweGZhLDB4MDEsMHgzZSwweGMwLDB4MGYsMHg4MCwweDAzLDB4ZWMsMHgwMCwweGY5LDB4NDAsMHgzZSB9LAorICAxNiwgMHhmMjMwLCAwLCB7MHhjMCwweDA3LDB4YjAsMHgwMywweGVjLDB4MDAsMHhmYSwweDAwLDB4M2EsMHg0MCwweDBmLDB4OTAsMHgyMywweGU1LDB4MDAsMHhmYiB9LAorICAxNiwgMHhmMjQwLCAwLCB7MHgwMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhhYywweDAwLDB4ZmIsMHgwMCwweDNjLDB4YzAsMHgwZiwweGIwLDB4MjMsMHhlMCB9LAorICAxNiwgMHhmMjUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGYwLDB4MDAsMHhmYywweDIwLDB4M2YsMHhjMCB9LAorICAxNiwgMHhmMjYwLCAwLCB7MHgwYywweGM4LDB4MDMsMHhmYywweDIwLDB4Y2QsMHg4MSwweGIzLDB4YzIsMHg0ZiwweGYwLDB4MDMsMHhmYywweDAwLDB4Y2EsMHgwMCB9LAorICAxNiwgMHhmMjcwLCAwLCB7MHgzYywweDgwLDB4MGMsMHhkMCwweDgyLDB4MzYsMHgwMSwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4M2MsMHgwOCB9LAorICAxNiwgMHhmMjgwLCAwLCB7MHhjZiwweDA0LDB4M2EsMHhjMCwweDVjLDB4YjAsMHgwMywweGMwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMjkwLCAwLCB7MHg4MSwweDA0LDB4NjIsMHgwNCwweGI4LDB4NDAsMHgyYywweDYwLDB4MDgsMHg4OSwweDAyLDB4ZWUsMHg4MCwweGE5LDB4NjAsMHgyYSB9LAorICAxNiwgMHhmMmEwLCAwLCB7MHhjMCwweDBiLDB4YjAsMHgwMywweDhjLDB4MDAsMHhhYSwweDQwLDB4MmUsMHgwMCwweDA4LDB4MTAsMHgwMiwweDI2LDB4ODEsMHhlYiB9LAorICAxNiwgMHhmMmIwLCAwLCB7MHgwMCwweDI2LDB4YzAsMHg4YiwweGIwLDB4MTMsMHg2YywweDAwLDB4ZGIsMHgwMCwweDJlLDB4YzAsMHgzZCwweGIwLDB4MDIsMHhlMCB9LAorICAxNiwgMHhmMmMwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDIzLDB4MDAsMHhiYiwweDAzLDB4MmUsMHhjOCB9LAorICAxNiwgMHhmMmQwLCAwLCB7MHgwOSwweGIwLDB4MDIsMHhlZSwweDAwLDB4OGIsMHgxMCwweDI2LDB4YzAsMHgwYiwweGIwLDB4MDIsMHhlYywweDAwLDB4YTgsMHgwMCB9LAorICAxNiwgMHhmMmUwLCAwLCB7MHgyZSwweGMwLDB4MDgsMHg4OCwweDIyLDB4YTQsMHg4MCwweGJiLDB4MDAsMHgyZSwweGMwLDB4NGIsMHhiMCwweDIyLDB4MGMsMHgwMCB9LAorICAxNiwgMHhmMmYwLCAwLCB7MHg4YiwweDAwLDB4MmUsMHhjMCwweDBiLDB4YjAsMHgwMiwweGUwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMzAwLCAwLCB7MHgwOCwweDA0LDB4MDAsMHgwMCwweGIyLDB4MDAsMHgyZSwweGMwLDB4MjksMHgyOCwweDAyLDB4ZWMsMHgwMSwweGEwLDB4MDIsMHgyMCB9LAorICAxNiwgMHhmMzEwLCAwLCB7MHhjMCwweDA5LDB4MzAsMHgwMiwweGNjLDB4MDAsMHhhMCwweDAwLDB4MmMsMHg0MCwweDA4LDB4MDAsMHg0MiwweDg0LDB4MDAsMHg5MyB9LAorICAxNiwgMHhmMzIwLCAwLCB7MHgwMCwweDZjLDB4YzAsMHgwYiwweDMwLDB4MDYsMHg0ZCwweDAwLDB4OTMsMHgwMCwweDJjLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhjMiB9LAorICAxNiwgMHhmMzMwLCAwLCB7MHgxMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDYwLDB4MDAsMHhmOCwweDIwLDB4MmYsMHhjMCB9LAorICAxNiwgMHhmMzQwLCAwLCB7MHgwZCwweGIwLDB4MDMsMHhlYywweDAwLDB4Y2IsMHgwMCwweDMzLDB4YzAsMHgwYiwweGYwLDB4MDMsMHhmYywweDE4LDB4ZTgsMHgwMCB9LAorICAxNiwgMHhmMzUwLCAwLCB7MHgyZSwweDgwLDB4MDgsMHg4MCwweDAzLDB4YTQsMHgwMCwweGJmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDQzLDB4M2QsMHgxMSB9LAorICAxNiwgMHhmMzYwLCAwLCB7MHhjZiwweDAzLDB4M2UsMHhjMSwweDVkLDB4ZjAsMHgyMywweGMwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMzcwLCAwLCB7MHhhMCwweDFkLDB4ZjAsMHgwMCwweGZjLDB4MTAsMHgzZiwweDQwLDB4MGUsMHhlMCwweDAzLDB4ZmMsMHgwMCwweGZjLDB4MDAsMHgzZiB9LAorICAxNiwgMHhmMzgwLCAwLCB7MHhjMCwweDBmLDB4ZjAsMHgwMywweGJjLDB4MDAsMHhmYywweDAwLDB4M2YsMHgwMCwweDJmLDB4YzAsMHgwMywweDc0LDB4MDAsMHhlZiB9LAorICAxNiwgMHhmMzkwLCAwLCB7MHgwMCwweDI3LDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmYywweDE4LDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhlOCB9LAorICAxNiwgMHhmM2EwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgxNSwweGZjLDB4ODgsMHg5YywweDI5LDB4M2YsMHgwOCB9LAorICAxNiwgMHhmM2IwLCAwLCB7MHgwZiwweGQyLDB4ODMsMHhlYywweDAwLDB4ZmYsMHgwOCwweDNmLDB4MjgsMHgwZiwweGNhLDB4MDMsMHgzYywweDQxLDB4Y2YsMHgyMCB9LAorICAxNiwgMHhmM2MwLCAwLCB7MHg3MywweDJjLDB4MGMsMHhjMCwweDAzLDB4MzAsMHgyMCwweGNmLDB4NjAsMHgzMywweGQ4LDB4MGYsMHg3OCwweDAzLDB4M2YsMHg4MCB9LAorICAxNiwgMHhmM2QwLCAwLCB7MHhkZCwweDkyLDB4MzMsMHhjOCwweDBmLDB4NTAsMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmM2UwLCAwLCB7MHg4MCwweDEwLDB4ZTUsMHg0MCwweDg4LDB4NDAsMHgyZSwweDA0LDB4OGIsMHg5NCwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDAsMHgwZSB9LAorICAxNiwgMHhmM2YwLCAwLCB7MHg3ZiwweDhmLDB4OWUsMHg4MywweDY1LDB4ODIsMHhjZiwweDY4LDB4M2UsMHg1MCwweDhkLDB4MDQsMHg5MiwweDJmLDB4MDQsMHhkMyB9LAorICAxNiwgMHhmNDAwLCAwLCB7MHg0MCwweDc0LDB4ZGMsMHgwZCwweGEyLDB4MDIsMHgyMCwweDQwLDB4ODksMHgwMCwweDIyLDB4ZjAsMHgwYiwweDk4LDB4MDIsMHgyMCB9LAorICAxNiwgMHhmNDEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGM4LDB4MDksMHhhMCwweDg1LDB4MmMsMHgwMSB9LAorICAxNiwgMHhmNDIwLCAwLCB7MHgwYiwweDAwLDB4MTAsMHhjYywweDQwLDB4YTIsMHgwOCwweDJjLDB4MDAsMHhkYiwweDExLDB4MDIsMHg4OSwweDAwLDB4OTMsMHgzMCB9LAorICAxNiwgMHhmNDMwLCAwLCB7MHgyMCwweDA1LDB4MDgsMHgxMywweDAyLDB4ODAsMHgwOCwweGEzLDB4NjAsMHg2MCwweGMwLDB4MGEsMHhiMCwweDgyLDB4MDgsMHg4NCB9LAorICAxNiwgMHhmNDQwLCAwLCB7MHg4MSwweDIwLDB4MjAsMHhkMCwweDBiLDB4MTAsMHgwMiwweGEyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNDUwLCAwLCB7MHhjMCwweDE1LDB4YTQsMHgxMiwweDg4LDB4ODAsMHg2ZSwweDIwLDB4MGIsMHg4OCwweDgyLDB4ZWUsMHgwMCwweGJhLDB4ODEsMHgyZSB9LAorICAxNiwgMHhmNDYwLCAwLCB7MHg2MCwweDVhLDB4OTgsMHgwMiwweGEyLDB4MDAsMHg4YiwweDAwLDB4MmEsMHg2MCwweDA4LDB4MTEsMHgxYSwweDJjLDB4MDAsMHhiYiB9LAorICAxNiwgMHhmNDcwLCAwLCB7MHgwMCwweDIyLDB4YzAsMHgwOCwweGI4LDB4MGEsMHgyOCwweDAwLDB4ODEsMHgyMCwweDAyLDB4YzAsMHgwYiwweDkwLDB4MDIsMHhiMCB9LAorICAxNiwgMHhmNDgwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNSwweGVkLDB4MDAsMHhkOSwweDgwLDB4M2UsMHgyMCB9LAorICAxNiwgMHhmNDkwLCAwLCB7MHg0ZiwweDk4LDB4MDAsMHhlYiwweDIwLDB4ZmIsMHhlMCwweDJlLDB4NjAsMHgwYiwweDhjLDB4NjIsMHhhZSwweDIwLDB4OGIsMHgwMCB9LAorICAxNiwgMHhmNGEwLCAwLCB7MHgyMiwweDYwLDB4MDgsMHhiYywweDAzLDB4YTAsMHgyMCwweGViLDB4MDAsMHgyMiwweGMxLDB4MGEsMHgxOCwweDBiLDB4MjUsMHgwMCB9LAorICAxNiwgMHhmNGIwLCAwLCB7MHhkOSwweDAwLDB4YjIsMHhjMCwweDBmLDB4OTAsMHgwYiwweDkwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNGMwLCAwLCB7MHhlMCwweDAxLDB4OTQsMHg4OCwweGZmLDB4MDAsMHgzZiwweDAxLDB4MGYsMHhkMCwweDAxLDB4ZjAsMHgwOCwweGRkLDB4MDEsMHgzZiB9LAorICAxNiwgMHhmNGQwLCAwLCB7MHg0MiwweDA3LDB4NDAsMHgwMywweDVjLDB4MDAsMHhhZiwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZjgsMHgwMCwweGYwLDB4MDAsMHhkZiB9LAorICAxNiwgMHhmNGUwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHgwZiwweGMwLDB4MjMsMHhmNCwweDUwLDB4ZmQsMHg4MCwweDNmLDB4YzAsMHgwZiwweGQwLDB4MDMsMHg3OCB9LAorICAxNiwgMHhmNGYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwweGFjLDB4MDAsMHhkOSwweDAwLDB4M2UsMHg0MCB9LAorICAxNiwgMHhmNTAwLCAwLCB7MHgwZiwweDk0LDB4MDMsMHhhOCwweDIwLDB4Y2EsMHg0MCwweDNhLDB4NDAsMHgwZiwweDk0LDB4MDMsMHhlYSwweDA4LDB4ZmIsMHgwMCB9LAorICAxNiwgMHhmNTEwLCAwLCB7MHgzYSwweDAwLDB4NGMsMHhmNiwweDIzLDB4MmMsMHgzMCwweGNiLDB4MDAsMHgzNiwweGMwLDB4MGQsMHg5MCwweDAzLDB4YTEsMHgwMiB9LAorICAxNiwgMHhmNTIwLCAwLCB7MHhkOSwweDAwLDB4YmEsMHhjMCwweDBmLDB4OTgsMHgwMywweDEwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNTMwLCAwLCB7MHhjOCwweDA1LDB4MjQsMHgwMCwweDhhLDB4MDAsMHgyZSwweDQwLDB4MGIsMHg5NSwweDAyLDB4ZTAsMHgwOCwweDg4LDB4ODAsMHgyMiB9LAorICAxNiwgMHhmNTQwLCAwLCB7MHg3MCwweDhmLDB4OGMsMHgwMiwweGUwLDB4MDAsMHhiZiwweDAyLDB4MjAsMHgwMCwweDA4LDB4YjgsMHgwMiwweDBlLDB4MDAsMHhkZiB9LAorICAxNiwgMHhmNTUwLCAwLCB7MHgwMCwweDIzLDB4ZGQsMHgwOCwweDk4LDB4ODIsMHgyYSwweDAwLDB4ODksMHg4MCwweDIzLDB4YzAsMHgwYiwweDUwLDB4MWEsMHgzMiB9LAorICAxNiwgMHhmNTYwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDQ0LDB4MDAsMHg4MywweDA1LDB4MjQsMHg0MSB9LAorICAxNiwgMHhmNTcwLCAwLCB7MHgwOSwweDEwLDB4MDIsMHhjZSwweDAwLDB4ODMsMHg5MCwweDJjLDB4ODAsMHgxYiwweDI0LDB4ODIsMHhjYywweDAwLDB4YmIsMHgwMCB9LAorICAxNiwgMHhmNTgwLCAwLCB7MHgyYywweDgwLDB4MDgsMHgwNCwweDA4LDB4MDQsMHgwMSwweDhiLDB4MDAsMHgyMiwweGMwLDB4MjgsMHgxMiwweDAyLDB4NmMsMHg4MCB9LAorICAxNiwgMHhmNTkwLCAwLCB7MHg4MSwweDQ4LDB4MjQsMHhjNCwweDBiLDB4MTAsMHgwMiwweDM4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNWEwLCAwLCB7MHgyMCwweDAxLDB4M2UsMHg0MiwweDg2LDB4ODAsMHgyZCwweDYwLDB4MGIsMHg2OCwweDAyLDB4ZjYsMHg5MCwweDhkLDB4ODAsMHgyMSB9LAorICAxNiwgMHhmNWIwLCAwLCB7MHgyMiwweDBiLDB4NTgsMHgwMiwweGQ3LDB4NDAsMHhiNywweDkwLDB4MjEsMHhlMCwweDA4LDB4NDksMHg5MiwweDFlLDB4NTMsMHg5NyB9LAorICAxNiwgMHhmNWMwLCAwLCB7MHg4MSwweDIxLDB4ZTAsMHg0OCwweGM4LDB4MGEsMHg1MiwweDIyLDB4ODUsMHg4OCwweDI1LDB4ZTAsMHgwYiwweDU4LDB4MDIsMHgwOCB9LAorICAxNiwgMHhmNWQwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHg4MywweDAwLDB4MzQsMHhjMCB9LAorICAxNiwgMHhmNWUwLCAwLCB7MHgwZiwweDAwLDB4MDMsMHhjZSwweDIwLDB4YzMsMHgzMCwweDdjLDB4OTQsMHgwYiwweDM0LDB4ODMsMHhjYywweDE0LDB4ZjMsMHgwMiB9LAorICAxNiwgMHhmNWYwLCAwLCB7MHgzYywweDgwLDB4MGMsMHgwNCwweDAzLDB4MDQsMHg2MCwweGMzLDB4MDAsMHhiMCwweGMwLDB4MGMsMHgxMCwweDAzLDB4ZWMsMHgwMCB9LAorICAxNiwgMHhmNjAwLCAwLCB7MHhjOSwweDAwLDB4M2MsMHhjNCwweDBmLDB4MTEsMHgwMywweDEyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNjEwLCAwLCB7MHg0MCwweDFkLDB4OWMsMHgwMCwweGVlLDB4MDEsMHgzZiwweGMwLDB4NGYsMHhlMSwweDAzLDB4ZDQsMHg0MCwweGY1LDB4MTYsMHg3YSB9LAorICAxNiwgMHhmNjIwLCAwLCB7MHhjMCwweDRlLDB4ZjAsMHgwMywweGY0LDB4MTAsMHgzNywweDA1LDB4M2QsMHhjMCwweDBmLDB4YzAsMHgwYiwweGRjLDB4NDAsMHhmZiB9LAorICAxNiwgMHhmNjMwLCAwLCB7MHgwMCwweDNiLDB4YzIsMHgwZSwweGQwLDB4MDcsMHhiYywweDAyLDB4ZWYsMHgwMCwweDNiLDB4YzYsMHgwZiwweGQwLDB4MDMsMHhkMCB9LAorICAxNiwgMHhmNjQwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGY0LDB4MDAsMHhkZCwweDg0LDB4MzMsMHg4MCB9LAorICAxNiwgMHhmNjUwLCAwLCB7MHgwNCwweGYwLDB4MDMsMHg2YywweDAyLDB4Y2IsMHgwMiwweDdlLDB4YzAsMHgxZiwweGEwLDB4NTMsMHhlYywweDAwLDB4Y2IsMHgyMCB9LAorICAxNiwgMHhmNjYwLCAwLCB7MHgzNCwweDQwLDB4MGMsMHhkMCwweDBiLDB4MjAsMHgxMCwweGViLDB4MDAsMHgxZSwweGUwLDB4MGYsMHgzMCwweDBiLDB4MmMsMHgwMCB9LAorICAxNiwgMHhmNjcwLCAwLCB7MHhjMSwweDAwLDB4MzIsMHhjMCwweDBmLDB4OTEsMHgwMywweGVhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNjgwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgwMCwweDg3LDB4MDAsMHgyMSwweDgwLDB4MDgsMHg2MCwweDAwLDB4MTQsMHgwMCwweDg1LDB4MDAsMHgyZCB9LAorICAxNiwgMHhmNjkwLCAwLCB7MHg4MCwweDBiLDB4NzAsMHg1MiwweGQ0LDB4MDQsMHg4MywweDI4LDB4MjksMHhjMCwweDI4LDB4NTAsMHgwMywweDUwLDB4MDAsMHg4NyB9LAorICAxNiwgMHhmNmEwLCAwLCB7MHg0MCwweDI1LDB4YzgsMHgwZiwweDYwLDB4MDIsMHgwNCwweDAwLDB4YTcsMHgwMCwweDNkLDB4YzgsMHgwYiwweDUyLDB4MDIsMHhkMiB9LAorICAxNiwgMHhmNmIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDhlLDB4MDAsMHg5NSwweDgwLDB4MjEsMHhlMCB9LAorICAxNiwgMHhmNmMwLCAwLCB7MHgwOSwweDM4LDB4MDIsMHgxZSwweDExLDB4YTcsMHg4MCwweDJkLDB4ZjAsMHgwYiwweDc4LDB4NTIsMHhjZSwweDBhLDB4OTcsMHg5NSB9LAorICAxNiwgMHhmNmQwLCAwLCB7MHgyMSwweGUwLDB4MTksMHg1YywweDAyLDB4MGUsMHgwMCwweGE3LDB4ODAsMHgyOSwweGM4LDB4MGIsMHhmOCwweDAyLDB4MWUsMHgyMCB9LAorICAxNiwgMHhmNmUwLCAwLCB7MHg4ZCwweDgwLDB4MjEsMHhlMCwweDBiLDB4NTgsMHgwMiwweGYwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNmYwLCAwLCB7MHg0OCwweDE0LDB4Y2MsMHgwMCwweDgyLDB4ZTAsMHhhMCwweGU4LDB4MjksMHgzMCwweDA2LDB4MGUsMHg1MCwweGFiLDB4ODAsMHgyYyB9LAorICAxNiwgMHhmNzAwLCAwLCB7MHhmMCwweDBiLDB4MzEsMHg0MiwweGNjLDB4MDAsMHg5MywweDAwLDB4MjgsMHhjNCwweDA5LDB4OTgsMHgwMiwweDRjLDB4MjgsMHg4MyB9LAorICAxNiwgMHhmNzEwLCAwLCB7MHgwMCwweDI0LDB4YzAsMHgwYSwweGIwLDB4MDIsMHgwZCwweDAwLDB4YTIsMHg1OCwweDI4LDB4YzAsMHgwYiwweDEwLDB4MDIsMHhkMiB9LAorICAxNiwgMHhmNzIwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGI5LDB4MDAsMHhkZSwweDgwLDB4MzEsMHhhMCB9LAorICAxNiwgMHhmNzMwLCAwLCB7MHgwOSwweGUyLDB4MGIsMHg3OCwweDA0LDB4ZWUsMHhhNCwweDJmLDB4YTQsMHg4YiwweGVjLDB4MDIsMHhkOCwweDAwLDB4ZGEsMHgwMCB9LAorICAxNiwgMHhmNzQwLCAwLCB7MHgyNywweDgxLDB4MGQsMHhlYywweDA2LDB4MWIsMHgwMCwweGVhLDB4MDQsMHgzZSwweDgwLDB4MGIsMHhlMCwweDAzLDB4M2IsMHgwMCB9LAorICAxNiwgMHhmNzUwLCAwLCB7MHhjZSwweGMwLDB4MjIsMHg4MCwweDBmLDB4YTAsMHgwMywweGZhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNzYwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHg4MCwweGY4LDB4MTAsMHgzZSwweDA1LDB4MGUsMHg4OCwweDAzLDB4ZTAsMHgwOCwweDk4LDB4NDAsMHgzZSB9LAorICAxNiwgMHhmNzcwLCAwLCB7MHgwMCwweDBmLDB4ODQsMHg4MywweGUxLDB4NDAsMHhlOCwweDAwLDB4M2EsMHgwMiwweDBlLDB4ODAsMHg0MywweGUxLDB4NDAsMHhmOCB9LAorICAxNiwgMHhmNzgwLCAwLCB7MHgwMCwweDM2LDB4MDAsMHgwZiwweDgwLDB4MDMsMHhlMCwweDIwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiB9LAorICAxNiwgMHhmNzkwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGM0LDB4MDAsMHhlOSwweDAwLDB4M2UsMHg0MCB9LAorICAxNiwgMHhmN2EwLCAwLCB7MHgwYywweDkwLDB4MDMsMHgwNCwweDIwLDB4ZTksMHg5MCwweDMyLDB4NjgsMHgwZSwweDk4LDB4MDMsMHhhNCwweDAwLDB4YzEsMHgwMCB9LAorICAxNiwgMHhmN2IwLCAwLCB7MHgzMCwweDQwLDB4MGMsMHg5NCwweDgzLDB4MjQsMHgwOCwweGM5LDB4MDAsMHgzZSwweDQwLDB4MGMsMHg5MCwweDAzLDB4YTQsMHgwMCB9LAorICAxNiwgMHhmN2MwLCAwLCB7MHhjOSwweDAwLDB4MzAsMHg1MCwweDBjLDB4MWEsMHgwMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmN2QwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4NDAsMHgyZSwweDUwLDB4MjgsMHg5MCwweDBhLDB4MjQsMHgwOCwweDg5LDB4MDYsMHgxNiB9LAorICAxNiwgMHhmN2UwLCAwLCB7MHg2MSwweDBiLDB4OWMsMHgwMiwweGU0LDB4MjAsMHhhOSwweDAwLDB4MzYsMHg0MCwweDBkLDB4OTAsMHgwMiwweDI3LDB4NjAsMHhhOSB9LAorICAxNiwgMHhmN2YwLCAwLCB7MHgwMCwweDJlLDB4NDAsMHgyOCwweDkwLDB4MWEsMHgyNCwweDAwLDB4ODksMHgwMCwweDM2LDB4NDAsMHgyOCwweDk4LDB4MDIsMHgyMCB9LAorICAxNiwgMHhmODAwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDJjLDB4MDAsMHhhOSwweDA4LDB4MmUsMHhjMiB9LAorICAxNiwgMHhmODEwLCAwLCB7MHgwOSwweDEwLDB4MDAsMHgyNCwweDAwLDB4YTksMHgwMCwweDA2LDB4NDAsMHg4OSwweDk2LDB4MDYsMHhlNiwweDAwLDB4ODksMHgwMCB9LAorICAxNiwgMHhmODIwLCAwLCB7MHgyMiwweGMwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMiwweDg5LDB4MDAsMHgyNCwweDQwLDB4MDgsMHg5MCwweDAyLDB4MGMsMHgwNiB9LAorICAxNiwgMHhmODMwLCAwLCB7MHg4MywweDAwLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmODQwLCAwLCB7MHgwOCwweDA0LDB4MDUsMHgwMCwweDgxLDB4NDQsMHgyYywweDUwLDB4MDgsMHgxNCwweDAyLDB4MDUsMHg4MCwweDgxLDB4MjAsMHg2NCB9LAorICAxNiwgMHhmODUwLCAwLCB7MHg3MCwweDFiLDB4MTQsMHgwMiwweGU0LDB4ODAsMHhhMSwweDIwLDB4NjQsMHg0MCwweDE5LDB4MTIsMHgwYSwweDA0LDB4ODAsMHhhMSB9LAorICAxNiwgMHhmODYwLCAwLCB7MHgwMCwweDJjLDB4NTAsMHgxOCwweDE0LDB4MDIsMHg4NSwweDAwLDB4ODEsMHg0MCwweDI0LDB4NDAsMHg0MCwweDEwLDB4MDIsMHgwMiB9LAorICAxNiwgMHhmODcwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHhlMCwweDAwLDB4M2MsMHgwMCB9LAorICAxNiwgMHhmODgwLCAwLCB7MHgwZCwweDgwLDB4MDIsMHgwMCwweDAwLDB4YWEsMHg1MCwweDM2LDB4MDAsMHgwZiwweDgwLDB4MDMsMHhlMSwweDQwLDB4YzgsMHg1MiB9LAorICAxNiwgMHhmODkwLCAwLCB7MHg3MiwweDE0LDB4MGMsMHgwNSwweDE2LDB4MjAsMHgwOCwweGM4LDB4NTAsMHgzZSwweDAxLDB4MGMsMHg4MCwweDAzLDB4YTAsMHgwNCB9LAorICAxNiwgMHhmOGEwLCAwLCB7MHhjOCwweDAwLDB4YjIsMHgwMCwweDBjLDB4ODAsMHgwYiwweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOGIwLCAwLCB7MHg5OCwweDE5LDB4ZjUsMHgwMiwweGZkLDB4NDAsMHgzZiwweGQwLDB4MGYsMHhkNCwweDIzLDB4ZjQsMHg0NCwweGZkLDB4MTQsMHg3ZiB9LAorICAxNiwgMHhmOGMwLCAwLCB7MHg1MCwweDBmLDB4ZDQsMHgwNywweGY0LDB4NDAsMHhmOSwweDEwLDB4M2YsMHg1MCwweDA3LDB4ZDEsMHgyMywweGY0LDB4NDAsMHhmOSB9LAorICAxNiwgMHhmOGQwLCAwLCB7MHg0MCwweDFlLDB4NTAsMHgwNywweGQwLDB4MGIsMHg3NSwweDAwLDB4ZmQsMHgwMiwweDNlLDB4NTAsMHgwZiwweGQ0LDB4MDMsMHhlNiB9LAorICAxNiwgMHhmOGUwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGY2LDB4MDAsMHhjOSwweGE4LDB4M2UsMHg3MiB9LAorICAxNiwgMHhmOGYwLCAwLCB7MHgwZiwweDk4LDB4MDMsMHhlNiwweGMwLDB4ZmQsMHhhMCwweGIzLDB4NDAsMHgwZiwweGQwLDB4MDMsMHg3NywweDgwLDB4Y2QsMHg5MCB9LAorICAxNiwgMHhmOTAwLCAwLCB7MHg3ZiwweDQwLDB4MGYsMHhkYSwweGEzLDB4MTYsMHg5MCwweGE5LDB4YzAsMHgzMiwweDYwLDB4NGMsMHhiMSwweDAzLDB4MjQsMHgwMCB9LAorICAxNiwgMHhmOTEwLCAwLCB7MHhjMSwweDAwLDB4MzMsMHg2YSwweDBiLDB4ZGEsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOTIwLCAwLCB7MHgzOCwweDEwLDB4ZTMsMHg0MCwweDg4LDB4ZTAsMHgyZSwweDMwLDB4MGIsMHg4ZCwweDAyLDB4ZjMsMHg0MCwweGI4LDB4ZTgsMHg3NiB9LAorICAxNiwgMHhmOTMwLCAwLCB7MHgwMCwweDRmLDB4ODAsMHgwYSwweDIyLDB4ODAsMHg4OCwweDkwLDB4NmUsMHgyOCwweDhmLDB4OGEsMHgwMywweDYxLDB4NDQsMHhmOCB9LAorICAxNiwgMHhmOTQwLCAwLCB7MHhlMSwweDNlLDB4MmEsMHgwOCwweDg4LDB4MDMsMHg0MiwweGEwLDB4ZGMsMHhhMCwweDNlLDB4MTAsMHgwYiwweDg1LDB4MGEsMHgwZSB9LAorICAxNiwgMHhmOTUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4YTAsMHg4NSwweDA4LDB4MmQsMHg0OCB9LAorICAxNiwgMHhmOTYwLCAwLCB7MHgxYiwweDUyLDB4ODIsMHhkNCwweDgwLDB4YjEsMHgxNCwweDIwLDB4NDAsMHgwYiwweDE4LDB4MDIsMHgwNSwweDgyLDB4ODEsMHgwMCB9LAorICAxNiwgMHhmOTcwLCAwLCB7MHg2YywweDQyLDB4MGIsMHgxMiwweDgyLDB4MDQsMHgwMCwweGExLDB4NjAsMHgyMSwweDUwLDB4MGIsMHg1MCwweDAyLDB4MTQsMHg5MCB9LAorICAxNiwgMHhmOTgwLCAwLCB7MHg5NSwweDJjLDB4MjgsMHg0MCwweDBiLDB4MTAsMHgwMiwweDAyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOTkwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMSwweDhkLDB4NDQsMHgyZiwweDQwLDB4MGIsMHhkNCwweDAyLDB4ZjQsMHgwNCwweGI5LDB4MDgsMHgyMiB9LAorICAxNiwgMHhmOWEwLCAwLCB7MHg0MCwweDBhLDB4OTIsMHgwMiwweDJjLDB4ODQsMHg4OSwweDAwLDB4MmUsMHg0MCwweDBhLDB4MTQsMHgwMiwweDZjLDB4ODAsMHhhOSB9LAorICAxNiwgMHhmOWIwLCAwLCB7MHgwMSwweDJhLDB4NDAsMHgwOSwweDUwLDB4MGEsMHg1YywweDAyLDB4OGQsMHg2MCwweDJhLDB4NDAsMHgwYiwweDkwLDB4NDIsMHgwNiB9LAorICAxNiwgMHhmOWMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU2LDB4NjIsMHhjOSwweDAyLDB4M2UsMHg1NCB9LAorICAxNiwgMHhmOWQwLCAwLCB7MHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHg0MCwweDIyLDB4NDYsMHgwYiwweDk4LDB4MDMsMHg2NywweDIwLDB4YzksMHgwMSB9LAorICAxNiwgMHhmOWUwLCAwLCB7MHgyZSwweDY5LDB4MGIsMHg5NCwweDBiLDB4MjUsMHgyMCwweGE5LDB4MDAsMHgyMiwweDQwLDB4MmQsMHg5MiwweDBhLDB4MjYsMHgyMiB9LAorICAxNiwgMHhmOWYwLCAwLCB7MHg5OSwweDAwLDB4MmEsMHg0MCwweDhmLDB4OTAsMHgwMywweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYTAwLCAwLCB7MHgyOCwweDAxLDB4ODYsMHgwMiwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTYsMHg4MCwweGYxLDB4YTAsMHgzZSB9LAorICAxNiwgMHhmYTEwLCAwLCB7MHg2MiwweDBmLDB4OTgsMHg4MywweGM2LDB4MjAsMHhmOSwweDAwLDB4M2UsMHg0OSwweDBmLDB4OTAsMHg4MywweGU0LDB4MDAsMHg3MSB9LAorICAxNiwgMHhmYTIwLCAwLCB7MHgwMiwweDNlLDB4NDAsMHgwZSwweDkwLDB4MGIsMHhlNiwweDgwLDB4ZjksMHg4MCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjYSB9LAorICAxNiwgMHhmYTMwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MTAsMHhjOCwweDAwLDB4M2UsMHgwMCB9LAorICAxNiwgMHhmYTQwLCAwLCB7MHg0ZiwweDgwLDB4NDMsMHhiMCwweDAwLDB4YzgsMHg0MSwweDMyLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgyMSwweDAyLDB4YzgsMHgwMiB9LAorICAxNiwgMHhmYTUwLCAwLCB7MHgzZSwweDEwLDB4NGMsMHg4MCwweDAzLDB4MDEsMHgyMCwweGM4LDB4MDAsMHgzYiwweDAwLDB4MGMsMHhjMCwweDAzLDB4YjAsMHgwMCB9LAorICAxNiwgMHhmYTYwLCAwLCB7MHhjYywweDA0LDB4MzIsMHgwMCwweDBmLDB4ODAsMHgwMywweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYTcwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwMCwweDhhLDB4ODAsMHgyZSwweDgwLDB4MGIsMHhhMCwweDAyLDB4ZjgsMHgwNCwweDhlLDB4MDAsMHgyMyB9LAorICAxNiwgMHhmYTgwLCAwLCB7MHhiMiwweDBlLDB4ZTAsMHg4MiwweGY5LDB4MDQsMHg4YSwweDAwLDB4MmUsMHg4MSwweDBjLDB4ZTAsMHgwYSwweDNhLDB4ODAsMHhkYSB9LAorICAxNiwgMHhmYTkwLCAwLCB7MHgwMCwweDIyLDB4YjYsMHgwOCwweGEwLDB4MDIsMHgyOCwweDAwLDB4OGUsMHgwMCwweDJhLDB4ODAsMHgwYiwweDYwLDB4MGIsMHgwYSB9LAorICAxNiwgMHhmYWEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDQ0LDB4MDIsMHg5MywweDgxLDB4MmMsMHhjMCB9LAorICAxNiwgMHhmYWIwLCAwLCB7MHg0YiwweDMwLDB4MDIsMHhjOCwweDAwLDB4ODMsMHhjYSwweDIwLDB4ZTAsMHgxOSwweGIwLDB4MDYsMHg4YywweDAwLDB4ODEsMHgwNCB9LAorICAxNiwgMHhmYWMwLCAwLCB7MHg0NCwweDQwLDB4MDgsMHgzNCwweDAyLDB4MGQsMHgwMCwweDgzLDB4MDAsMHgyYSwweDAwLDB4MDgsMHgwMCwweDBhLDB4ODAsMHg0MCB9LAorICAxNiwgMHhmYWQwLCAwLCB7MHg4OCwweDAwLDB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweDRiLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYWUwLCAwLCB7MHhhMCwweDAxLDB4MDQsMHgwMiwweDk3LDB4MDgsMHgyZCwweGMwLDB4MGIsMHg2MCwweDA2LDB4Y2EsMHgwMCwweDgzLDB4MDksMHgyMSB9LAorICAxNiwgMHhmYWYwLCAwLCB7MHhjMCwweDBhLDB4NzAsMHgwMiwweGRjLDB4MDAsMHg4NSwweDMxLDB4MmQsMHg2OCwweDA5LDB4MzAsMHgwMiwweDFjLDB4MTQsMHg5MyB9LAorICAxNiwgMHhmYjAwLCAwLCB7MHgyMCwweDIwLDB4YzAsMHgwOCwweGYwLDB4NDIsMHg5YywweDAyLDB4OGYsMHgwMCwweDI5LDB4NDAsMHgwMywweDcwLDB4MTIsMHgyOCB9LAorICAxNiwgMHhmYjEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDE2LDB4MDAsMHg5NiwweDg0LDB4M2QsMHhhMCB9LAorICAxNiwgMHhmYjIwLCAwLCB7MHgwZiwweDc4LDB4MDMsMHg5YSwweDAyLDB4ODcsMHg4MCwweGIxLDB4ZTAsMHgwYiwweDc4LDB4MDMsMHhiNiwweDAwLDB4YzUsMHhhMCB9LAorICAxNiwgMHhmYjMwLCAwLCB7MHgzNSwweDYxLDB4MGMsMHg3OCwweDEzLDB4MWUsMHgwMiwweGM3LDB4ODAsMHgyOSwweDAwLDB4MGMsMHg0OCwweDAzLDB4OTAsMHgwMCB9LAorICAxNiwgMHhmYjQwLCAwLCB7MHhjNCwweDgwLDB4MzEsMHg2MCwweDBmLDB4NTgsMHgwMywweDZhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYjUwLCAwLCB7MHgwOCwweDFkLDB4YTQsMHgwMCwweGVhLDB4MDAsMHgzZSwweDgwLDB4MGYsMHhhMCwweDAzLDB4ZTgsMHgwOCwweGZiLDB4MDAsMHgzZSB9LAorICAxNiwgMHhmYjYwLCAwLCB7MHg4MCwweDBmLDB4OTAsMHgxMywweGU0LDB4MDgsMHhmOSwweDAwLDB4M2MsMHg1MCwweDJlLDB4ZjAsMHgwMywweGU4LDB4MDgsMHhmYiB9LAorICAxNiwgMHhmYjcwLCAwLCB7MHg0MCwweDNlLDB4YzAsMHgwYiwweDMwLDB4MTMsMHg2YywweDAwLDB4ZmIsMHgwMCwweDNlLDB4NDAsMHgwZiwweDMwLDB4MDMsMHhjMiB9LAorICAxNiwgMHhmYjgwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGQ2LDB4MDAsMHhjZCwweDgwLDB4MzMsMHhlMCB9LAorICAxNiwgMHhmYjkwLCAwLCB7MHgwYywweGY4LDB4MDMsMHhmYSwweDAwLDB4ZmQsMHg4MCwweDNmLDB4YTAsMHgwZCwweGY4LDB4MDMsMHhmYSwweDQwLDB4Y2QsMHhkMCB9LAorICAxNiwgMHhmYmEwLCAwLCB7MHg3NywweDdlLDB4MGMsMHhlOCwweDQzLDB4MWUsMHgwMCwweGNmLDB4ZDgsMHgzZiwweGUwLDB4MGMsMHhjOCwweDAzLDB4M2EsMHhjNCB9LAorICAxNiwgMHhmYmIwLCAwLCB7MHhjYywweDgwLDB4MzMsMHhlMCwweDBjLDB4ZjgsMHgwMywweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYmMwLCAwLCB7MHhhOCwweDExLDB4OTQsMHgwMiwweDhkLDB4MDAsMHgyMSwweGMwLDB4MDgsMHg2MCwweDAzLDB4ZDgsMHgxMCwweDM1LDB4MjAsMHg4YiB9LAorICAxNiwgMHhmYmQwLCAwLCB7MHhkNCwweDBkLDB4NjQsMHgwMywweGQ4LDB4YzAsMHg4NSwweDAwLDB4MmYsMHg0ZSwweDA3LDB4NjQsMHgwMiwweDljLDB4MDIsMHhkNyB9LAorICAxNiwgMHhmYmUwLCAwLCB7MHgzMCwweDJmLDB4MDQsMHgwZCwweGYxLDB4MGIsMHg1NCwweDQwLDB4YWYsMHgwMCwweDM1LDB4NDAsMHgwOCwweDcwLDB4MDIsMHgyYSB9LAorICAxNiwgMHhmYmYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk0LDB4NDAsMHg4NCwweDE4LDB4MjEsMHg4MCB9LAorICAxNiwgMHhmYzAwLCAwLCB7MHgwOCwweDcwLDB4MDIsMHhkYSwweDIwLDB4YjUsMHgwMCwweDA5LDB4MDAsMHgwOCwweDcwLDB4MDIsMHhkNCwweDA0LDB4ODUsMHgwMCB9LAorICAxNiwgMHhmYzEwLCAwLCB7MHg2ZCwweDRjLDB4ODksMHg2MCwweDAyLDB4NWMsMHg0MCwweDk3LDB4MDAsMHg2ZCwweGMwLDB4MDksMHg0MCwweDAyLDB4NTgsMHg4MCB9LAorICAxNiwgMHhmYzIwLCAwLCB7MHg4NCwweDg4LDB4MjUsMHg0MCwweDA4LDB4ZDAsMHgwMiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYzMwLCAwLCB7MHgyMCwweDE0LDB4YzYsMHg0OCwweDgwLDB4MDAsMHgyMCwweDgwLDB4MDgsMHhhYywweDAyLDB4YTgsMHgwMCwweGIxLDB4MDAsMHhhOCB9LAorICAxNiwgMHhmYzQwLCAwLCB7MHg4OCwweDA5LDB4MjIsMHgwMiwweDg2LDB4NDIsMHg4MSwweDAwLDB4NmMsMHg1MiwweDBiLDB4MjAsMHgwMiwweGM3LDB4NTIsMHg4MyB9LAorICAxNiwgMHhmYzUwLCAwLCB7MHgwMCwweDJjLDB4MDAsMHgwOCwweDM0LDB4ODIsMHg2NywweDAwLDB4YTMsMHg4MCwweDIwLDB4NDAsMHgwOCwweDMwLDB4MDIsMHgwOCB9LAorICAxNiwgMHhmYzYwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGEzLDB4MDAsMHhjYiwweGMwLDB4YjIsMHg0MCB9LAorICAxNiwgMHhmYzcwLCAwLCB7MHgyYywweDkwLDB4ODIsMHhlNiwweDAwLDB4YmIsMHg4MCwweGJlLDB4NzgsMHgwOCwweDhlLDB4MDIsMHhlZSwweDAwLDB4OGQsMHgwMCB9LAorICAxNiwgMHhmYzgwLCAwLCB7MHgyNywweDYwLDB4MGQsMHg5MCwweDBhLDB4NmYsMHgwMCwweDlmLDB4MDIsMHgyZSwweDAwLDB4MDksMHhiNCwweDAzLDB4NjcsMHg4MCB9LAorICAxNiwgMHhmYzkwLCAwLCB7MHhjYSwweDQwLDB4ZTQsMHhjMCwweDBjLDB4MzAsMHgwMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmY2EwLCAwLCB7MHg4MCwweDAwLDB4ZTAsMHg4MCwweGZiLDB4MjIsMHgzZSwweDQwLDB4MGYsMHg4MCwweDEzLDB4ZTQsMHgwMCwweGZiLDB4ODAsMHgzZSB9LAorICAxNiwgMHhmY2IwLCAwLCB7MHg0MCwweDBmLDB4OTAsMHgwMywweGU1LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBlLDB4NzAsMHgyMywweGFjLDB4MjAsMHhmYiB9LAorICAxNiwgMHhmY2MwLCAwLCB7MHgwMCwweDNlLDB4YzAsMHg4ZiwweDgwLDB4MDMsMHhlOSwweDIwLDB4ZjksMHgwOCwweDNlLDB4NDAsMHgwZiwweGIwLDB4MTMsMHhlMCB9LAorICAxNiwgMHhmY2QwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGYwLDB4MDAsMHhjNiwweDAwLDB4MzIsMHgwMCB9LAorICAxNiwgMHhmY2UwLCAwLCB7MHgwZiwweGQxLDB4ODMsMHgzNCwweDQwLDB4Y2YsMHgwMCwweDNkLDB4NDAsMHgwYywweGQwLDB4MDMsMHhkZSwweDUwLDB4MGQsMHgwMCB9LAorICAxNiwgMHhmY2YwLCAwLCB7MHg3MywweDQwLDB4MGMsMHhkMSwweDAzLDB4N2MsMHg0MCwweDg3LDB4MDIsMHhiMywweDAwLDB4MGQsMHhmNCwweDAzLDB4MjQsMHgwMCB9LAorICAxNiwgMHhmZDAwLCAwLCB7MHhjZSwweDIwLDB4MzIsMHg0MCwweDBjLDB4ZDAsMHgwMywweDAwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmZDEwLCAwLCB7MHg4MSwweDA0LDB4NjEsMHgyMiwweDhhLDB4MDAsMHgyMiwweDAwLDB4MGIsMHg4MCwweDQwLDB4MjUsMHgwMCwweDg5LDB4YzMsMHgyZSB9LAorICAxNiwgMHhmZDIwLCAwLCB7MHgyMCwweDBhLDB4OTgsMHgwMywweGExLDB4MDAsMHg4OSwweDAwLDB4MzYsMHg0MCwweDg4LDB4OTQsMHgwMiwweDBmLDB4MDEsMHhhYiB9LAorICAxNiwgMHhmZDMwLCAwLCB7MHgwMCwweDMyLDB4YzAsMHgwOCwweDA0LDB4MGEsMHgyOSwweDAwLDB4YTksMHgwMiwweGEyLDB4NDAsMHgwZCwweGIwLDB4MGEsMHgyMCB9LAorICAxNiwgMHhmZDQwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDAwLDB4MDAsMHg4OSwweDAwLDB4MjIsMHg2MSB9LAorICAxNiwgMHhmZDUwLCAwLCB7MHgwYiwweDkwLDB4MDIsMHgyNSwweDAxLDB4OWIsMHg4OCwweDJlLDB4NjAsMHgwOCwweDg4LDB4MDIsMHhlOCwweDAwLDB4YjEsMHgwMiB9LAorICAxNiwgMHhmZDYwLCAwLCB7MHgyNCwweDQwLDB4MTgsMHg5MCwweDAyLDB4MmMsMHgwMCwweGFiLDB4MDEsMHgyMCwweGMxLDB4MDgsMHhiNCwweDQyLDB4MmMsMHgwMCB9LAorICAxNiwgMHhmZDcwLCAwLCB7MHg4MiwweDAwLDB4MjIsMHhjMCwweDA4LDB4YjAsMHgwMiwweDIwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmZDgwLCAwLCB7MHgwOCwweDA0LDB4MDAsMHgwMCwweDAxLDB4MDAsMHgyMCwweDQwLDB4MGIsMHgwMCwweDBhLDB4MDQsMHg0NiwweDgzLDB4MDEsMHgyYyB9LAorICAxNiwgMHhmZDkwLCAwLCB7MHg0MCwweDFhLDB4MDAsMHgwNiwweDgwLDB4MDAsMHg4MSwweDAwLDB4MjQsMHg0MCwweDA4LDB4MjAsMHgwYSwweDBjLDB4MDEsMHhhMyB9LAorICAxNiwgMHhmZGEwLCAwLCB7MHgwMCwweDI0LDB4MDAsMHgwOCwweDgwLDB4MDIsMHgwMCwweDAwLDB4YTEsMHgwMCwweDIwLDB4NDAsMHgwOSwweDMwLDB4MDIsMHgwMiB9LAorICAxNiwgMHhmZGIwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDYwLDB4MDIsMHhjOCwweDAwLDB4MjIsMHgwMCB9LAorICAxNiwgMHhmZGMwLCAwLCB7MHgwZiwweDkwLDB4MDIsMHgyNSwweDAwLDB4ZGEsMHgwMCwweDNlLDB4NDAsMHgwYywweDkwLDB4MDIsMHhjYywweDAwLDB4ZmQsMHgwMCB9LAorICAxNiwgMHhmZGQwLCAwLCB7MHgzNywweDQwLDB4MGMsMHgxMCwweDEzLDB4MmMsMHgwMiwweGFmLDB4MDAsMHgzMiwweGMwLDB4MGQsMHhiMCwweDAzLDB4MmMsMHgwMCB9LAorICAxNiwgMHhmZGUwLCAwLCB7MHhjYSwweDAwLDB4MzIsMHg0MCwweDRjLDB4OTAsMHgwYiwweDAwLDB4MDEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmZGYwLCAwLCB7MHhhMCwweDFkLDB4ZjAsMHgwMCwweGZjLDB4MDAsMHgzZiwweDAwLDB4MDcsMHhjMCwweDAzLDB4ZjQsMHgxYywweGY0LDB4MDAsMHgzZiB9LAorICAxNiwgMHhmZTAwLCAwLCB7MHgwMCwweDFmLDB4YzAsMHgyMywweGIwLDB4MDIsMHg5ZCwweDAxLDB4M2YsMHg0MCwweDhmLDB4YzAsMHgwNywweGZjLDB4MDIsMHhmZiB9LAorICAxNiwgMHhmZTEwLCAwLCB7MHgwMCwweDdiLDB4MDAsMHgwZiwweGMwLDB4MDMsMHhmMCwweDAwLDB4ZmQsMHgwMCwweDNmLDB4NDAsMHgwZiwweDcwLDB4MDMsMHhlOCB9LAorICAxNiwgMHhmZTIwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZhLDB4MDAsMHhjYiwweDgwLDB4M2YsMHgyNCB9LAorICAxNiwgMHhmZTMwLCAwLCB7MHgwYSwweGMxLDB4MDMsMHhmYywweDI0LDB4Y2QsMHgyMCwweDM3LDB4MGEsMHgwYywweGMyLDB4ODMsMHgzMCwweDgwLDB4ZGMsMHgwMiB9LAorICAxNiwgMHhmZTQwLCAwLCB7MHgzZiwweGNjLDB4MGQsMHhkOSwweDAzLDB4M2MsMHg1OCwweGRmLDB4MzAsMHgzMywweGM4LDB4MGQsMHhmNCwweDIzLDB4M2MsMHg0MCB9LAorICAxNiwgMHhmZTUwLCAwLCB7MHhmZiwweDAwLDB4M2YsMHhjNSwweDRmLDB4ZjAsMHgyMywweGIwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmZTYwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMiwweDBiLDB4ODIsMHgyZSwweDA4LDB4MGQsMHhiNywweDAyLDB4ZmQsMHgwMCwweDgzLDB4MTgsMHgwYSB9LAorICAxNiwgMHhmZTcwLCAwLCB7MHg1OCwweDBhLDB4ODQsMHhhMiwweGE1LDB4YTAsMHg4OSwweDMwLDB4MjIsMHg1NSwweDA4LDB4MTIsMHg2MiwweGJkLDB4OTAsMHg4ZiB9LAorICAxNiwgMHhmZTgwLCAwLCB7MHg2MiwweDIxLDB4ZDYsMHg0OCwweGYzLDB4MDIsMHgzYywweGM1LDB4YmYsMHg0OCwweDJmLDB4ZDgsMHg0YiwweGI3LDB4MDIsMHhlMCB9LAorICAxNiwgMHhmZTkwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGVjLDB4MDAsMHg4MywweDAwLDB4MmUsMHg4OSB9LAorICAxNiwgMHhmZWEwLCAwLCB7MHgyOCwweDAwLDB4MDIsMHhlYywweGEwLDB4ODksMHgyMiwweDI4LDB4ODIsMHgwOCwweDEyLDB4MDIsMHgyOCwweDQwLDB4OWEsMHgwOCB9LAorICAxNiwgMHhmZWIwLCAwLCB7MHgyOCwweGM4LDB4ODgsMHhiMiwweDBhLDB4MGQsMHgxMCwweDkzLDB4MTAsMHhhMCwweGM4LDB4MjgsMHgzMCwweDAyLDB4NGMsMHgwMCB9LAorICAxNiwgMHhmZWMwLCAwLCB7MHhiMywweDYwLDB4MmMsMHhjNCwweDBiLDB4MzAsMHhjMiwweGUyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmZWQwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHg0MCwweDhiLDB4MDAsMHgyZSwweDgwLDB4MDgsMHhiMSwweDAyLDB4ZWMsMHgwMiwweDhiLDB4MDAsMHgyMCB9LAorICAxNiwgMHhmZWUwLCAwLCB7MHhkMCwweDBhLDB4OTAsMHgwMiwweGFjLDB4MDAsMHgwYiwweDAxLDB4MjYsMHg0MCwweDA4LDB4OTQsMHgwMiwweDhjLDB4MDAsMHg4YiB9LAorICAxNiwgMHhmZWYwLCAwLCB7MHgwMCwweDIyLDB4YzAsMHgwOCwweGIwLDB4MDIsMHgyYywweDEwLDB4YmIsMHgwMCwweDJlLDB4YzAsMHgwYiwweGIwLDB4MDIsMHhmMCB9LAorICAxNiwgMHhmZjAwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDhjLDB4MjAsMHhjYiwweDAyLDB4M2UsMHgyZCB9LAorICAxNiwgMHhmZjEwLCAwLCB7MHgwOCwweDgwLDB4MDMsMHhlYywweDA4LDB4YzksMHg4MCwweDFlLDB4MDQsMHgwYywweGIwLDB4MDMsMHgwMSwweDA4LDB4NTAsMHgxOCB9LAorICAxNiwgMHhmZjIwLCAwLCB7MHgzZSwweDQwLDB4MGMsMHgwNCwweDAzLDB4MmMsMHgwMCwweGRiLDB4MDEsMHgzMiwweGMwLDB4MGMsMHhiMCwweDBiLDB4MmMsMHgwOCB9LAorICAxNiwgMHhmZjMwLCAwLCB7MHhiYiwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweDgwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmZjQwLCAwLCB7MHhlMSwweDAwLDB4YmMsMHgwMCwweGZmLDB4MDAsMHgzZiwweDYwLDB4MGYsMHhjMCwweDIzLDB4ZWMsMHgwMCwweGZmLDB4YzAsMHhiZSB9LAorICAxNiwgMHhmZjUwLCAwLCB7MHg2MCwweDhmLDB4YzksMHgyMywweGY2LDB4NTAsMHhlZCwweDgwLDB4YjgsMHg1MCwweGFmLDB4YzAsMHgwMywweGZjLDB4MDAsMHhmZiB9LAorICAxNiwgMHhmZjYwLCAwLCB7MHgwMCwweDNmLDB4YzEsMHgwZSwweGIwLDB4MDMsMHhmYywweDA0LDB4ZmYsMHgwMiwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmOCB9LAorICAxNiwgMHhmZjcwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDAsMHhlYiwweDAwLDB4MzIsMHg4MCB9LAorICAxNiwgMHhmZjgwLCAwLCB7MHgwZCwweDkwLDB4MDMsMHgyYywweDAwLDB4ODksMHgwMCwweDNlLDB4OTgsMHg4YywweDMwLDB4MDMsMHg2MSwweDgwLDB4ZmEsMHg0MCB9LAorICAxNiwgMHhmZjkwLCAwLCB7MHgzZSwweDQwLDB4MmMsMHhhNSwweDAzLDB4MmMsMHgwMCwweGZiLDB4MDEsMHgzYywweGMwLDB4MmMsMHgzMCwweDAzLDB4MmMsMHgwMCB9LAorICAxNiwgMHhmZmEwLCAwLCB7MHhkYiwweDAyLDB4MzIsMHhjMCwweDBmLDB4YjAsMHgwMywweGQwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmZmIwLCAwLCB7MHhjYSwweDAwLDB4MmUsMHg4MCwweDhiLDB4ODIsMHhhMCwweGMwLDB4OGMsMHg5MCwweDAyLDB4M2MsMHgwMCwweDhiLDB4ZjAsMHgyMiB9LAorICAxNiwgMHhmZmMwLCAwLCB7MHhjMiwweDBkLDB4ODAsMHgwMiwweDI3LDB4MDAsMHg4YiwweDEwLDB4MjIsMHg0MCwweDA4LDB4ODAsMHgyMiwweDNjLDB4MDAsMHhiZiB9LAorICAxNiwgMHhmZmQwLCAwLCB7MHgwMCwweDJmLDB4YzAsMHgwOCwweGYwLDB4MDIsMHgzYywweDAwLDB4YmYsMHgwMSwweGEzLDB4YzAsMHgwYiwweGYwLDB4MTIsMHhmMiB9LAorICAxNiwgMHhmZmUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MDAsMHhiMywweDFjLDB4MjAsMHg0MCB9LAorICAxNiwgMHhmZmYwLCAwLCB7MHgwOCwweDAwLDB4MDYsMHgyYywweDAwLDB4OWIsMHgwMCwweDIwLDB4ZDAsMHgwOCwweDIwLDB4MDIsMHg0YywweDAwLDB4YTMsMHgwMCB9LAorICAxNiwgMHg4MDEwLCAwLCB7MHgyYywweGMwLDB4MDgsMHgxMCwweDBhLDB4MGMsMHgwMCwweGJiLDB4MDAsMHgyOCwweGMwLDB4MDksMHgzMCwweDAyLDB4MGMsMHgwMCB9LAorICAxNiwgMHg4MDIwLCAwLCB7MHhiMywweDAwLDB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweGY4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MDMwLCAwLCB7MHgyMiwweDExLDB4MWUsMHgwMCwweDk3LDB4YTAsMHgyMSwweGEwLDB4MDgsMHg3OSwweDAyLDB4MWUsMHgwMCwweDk3LDB4OTAsMHgyMSB9LAorICAxNiwgMHg4MDQwLCAwLCB7MHg2MCwweDA5LDB4ZTgsMHgyMiwweDNlLDB4MDAsMHhhZiwweDg0LDB4MjEsMHhlNCwweDQ4LDB4NWMsMHgwMiwweDFlLDB4MDAsMHhiNyB9LAorICAxNiwgMHg4MDUwLCAwLCB7MHg5MCwweDJkLDB4ZTAsMHgwOSwweDc4LDB4MDAsMHgxZSwweDA5LDB4YjMsMHg5MCwweDIxLDB4ZTQsMHgwYiwweDc4LDB4MDIsMHhkOCB9LAorICAxNiwgMHg4MDYwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgxOCwweDJjLDB4NDAsMHhiMywweGIwLDB4MzIsMHg0MCB9LAorICAxNiwgMHg4MDcwLCAwLCB7MHgyYywweDgxLDB4MTMsMHgwYywweDQyLDB4ZDEsMHgwMCwweGIwLDB4YzAsMHg4YywweDMwLDB4MDMsMHg0OCwweDIwLDB4ZTMsMHgwMSB9LAorICAxNiwgMHg4MDgwLCAwLCB7MHgzYywweGMwLDB4MGMsMHgzMCwweDAzLDB4MGMsMHgwMCwweGYzLDB4MTAsMHgzYywweGMwLDB4Y2QsMHgzMiwweDBiLDB4MGMsMHg0MCB9LAorICAxNiwgMHg4MDkwLCAwLCB7MHhkMywweDAwLDB4MzAsMHhjMCwweDBmLDB4MzAsMHgwMywweGQyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MGEwLCAwLCB7MHg0MCwweDE1LDB4YmMsMHgwMCwweGU3LDB4MDAsMHgzZiwweDgwLDB4MGIsMHhmMSwweDAzLDB4ZmQsMHgwMCwweDZkLDB4MDAsMHgzMiB9LAorICAxNiwgMHg4MGIwLCAwLCB7MHg0MCwweDFmLDB4NzAsMHgwNywweGQ4LDB4NDEsMHhjMywweDEwLDB4M2IsMHhjMCwweDBmLDB4ZDEsMHgwMywweGZkLDB4MDAsMHhmZiB9LAorICAxNiwgMHg4MGMwLCAwLCB7MHgxMCwweDNmLDB4YzAsMHgwZSwweGYwLDB4MDMsMHhlYywweDEwLDB4ZmYsMHgwOCwweDNmLDB4YzMsMHgwZiwweGYwLDB4MDMsMHhkMCB9LAorICAxNiwgMHg4MGQwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGVjLDB4MDQsMHhmYiwweDAyLDB4M2UsMHg0MCB9LAorICAxNiwgMHg4MGUwLCAwLCB7MHgwYiwweGEwLDB4MDMsMHhhYywweDAwLDB4ZGIsMHgwMCwweDM2LDB4ODAsMHgwZCwweGIwLDB4MDMsMHhhYywweDAwLDB4ZTgsMHgwMCB9LAorICAxNiwgMHg4MGYwLCAwLCB7MHgzNiwweGMxLDB4MmUsMHg5MCwweDAzLDB4MmMsMHgwMCwweGNiLDB4YTAsMHgzNiwweGRjLDB4MGYsMHhiMCwweDAzLDB4MmQsMHg2OCB9LAorICAxNiwgMHg4MTAwLCAwLCB7MHhmYiwweGEwLDB4OTIsMHhjMiwweDBjLDB4YjEsMHgwMywweGVhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MTEwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgwOCwweDM3LDB4MDAsMHgyZCwweGMwLDB4MGIsMHhlMCwweDAyLDB4MWQsMHg4MCwweGI3LDB4MDQsMHgyMyB9LAorICAxNiwgMHg4MTIwLCAwLCB7MHgwMCwweDBhLDB4NDAsMHgwMiwweDFjLDB4MTgsMHg4NCwweDAwLDB4MjUsMHhjMCwweDE4LDB4NTAsMHgzMiwweDBkLDB4ODAsMHhhMyB9LAorICAxNiwgMHg4MTMwLCAwLCB7MHgzMCwweDIxLDB4Y2MsMHgwYiwweDM0LDB4ODIsMHgxYywweDEwLDB4YjcsMHgzMCwweDIxLDB4YzgsMHgwOCwweDcwLDB4MDIsMHhkMiB9LAorICAxNiwgMHg4MTQwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4MjAsMHhiNywweDgwLDB4MmQsMHg2MCB9LAorICAxNiwgMHg4MTUwLCAwLCB7MHgwYiwweGZjLDB4MjIsMHg5ZSwweDAwLDB4OGQsMHg4MCwweDI1LDB4YTAsMHgwOCwweGY4LDB4MjIsMHg5MiwweDAwLDB4YjQsMHg4MCB9LAorICAxNiwgMHg4MTYwLCAwLCB7MHgyNSwweGUwLDB4MDgsMHhmOCwweDAyLDB4MWUsMHgwMCwweDg3LDB4YjAsMHgyMSwweGUwLDB4MDksMHg3YSwweDAyLDB4MWUsMHgxOCB9LAorICAxNiwgMHg4MTcwLCAwLCB7MHhiMywweDgwLDB4MjEsMHhlMCwweDA4LDB4NzgsMHgwMiwweGYwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MTgwLCAwLCB7MHg0OCwweDA0LDB4YzUsMHgyMCwweGIzLDB4MDEsMHgyYywweGQ4LDB4MGIsMHgzYywweDAyLDB4MmMsMHgwOCwweGI5LDB4MDAsMHgyMCB9LAorICAxNiwgMHg4MTkwLCAwLCB7MHgwMywweDBhLDB4MDAsMHg4MiwweDIyLDB4MDgsMHg5MCwweDBkLDB4MjYsMHhlNCwweDA4LDB4MTAsMHgwMiwweDBjLDB4MDAsMHhhMyB9LAorICAxNiwgMHg4MWEwLCAwLCB7MHgwMCwweDIyLDB4YzAsMHgwYiwweDMwLDB4MDIsMHg2YywweDAwLDB4YjMsMHgwMCwweDIyLDB4YzAsMHgyOCwweDMwLDB4MDIsMHhjMiB9LAorICAxNiwgMHg4MWIwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgwNSwweDk5LDB4MDAsMHhmYSwweDAyLDB4M2YsMHg5MCB9LAorICAxNiwgMHg4MWMwLCAwLCB7MHgwZiwweGVjLDB4MjMsMHhhOCwweDAwLDB4ZGEsMHgwMCwweDM1LDB4ODAsMHgwZCwweGUwLDB4MDIsMHhiYSwweDAyLDB4ZmUsMHhjMiB9LAorICAxNiwgMHg4MWQwLCAwLCB7MHhiNiwweGEwLDB4MGUsMHhlNCwweDBiLDB4MjgsMHgwMCwweGNhLDB4MDAsMHhiMiwweDgwLDB4MGYsMHhhMCwweDBiLDB4MjgsMHgwMCB9LAorICAxNiwgMHg4MWUwLCAwLCB7MHhmYSwweDAwLDB4MzIsMHg4MCwweDBjLDB4YTAsMHgwMywweGZhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MWYwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MiwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSB9LAorICAxNiwgMHg4MjAwLCAwLCB7MHgwMCwweDBmLDB4ODEsMHgwMywweGUwLDB4NDAsMHhlOCwweDEwLDB4M2EsMHgwMCwweDRmLDB4ODQsMHg4MywweGUwLDB4MDAsMHhmOCB9LAorICAxNiwgMHg4MjEwLCAwLCB7MHgwMCwweDNhLDB4MDAsMHgwZiwweDAwLDB4MDMsMHhhMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiB9LAorICAxNiwgMHg4MjIwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGU1LDB4MDAsMHhjOSwweDAyLDB4M2UsMHg0MCB9LAorICAxNiwgMHg4MjMwLCAwLCB7MHgwZiwweDkwLDB4MjMsMHgyNCwweDAwLDB4YzksMHgwMCwweDMyLDB4NjgsMHgyZiwweDEwLDB4MDMsMHgyNCwweDAwLDB4ZTksMHgxNCB9LAorICAxNiwgMHg4MjQwLCAwLCB7MHgzMiwweDQwLDB4MGQsMHg5MCwweDBiLDB4MDQsMHgwMCwweGQ5LDB4MDAsMHgxZSwweDQwLDB4MGMsMHg5MCwweDAzLDB4MjQsMHgwMCB9LAorICAxNiwgMHg4MjUwLCAwLCB7MHhjOSwweDAwLDB4MzYsMHg0MCwweDBjLDB4OTAsMHgwMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MjYwLCAwLCB7MHg4MCwweDE0LDB4NjQsMHgwMCwweDg5LDB4MDEsMHgyZSwweDQwLDB4NGIsMHg5MCwweDEyLDB4MjQsMHgwMCwweDg5LDB4YzIsMHhhMiB9LAorICAxNiwgMHg4MjcwLCAwLCB7MHg2MCwweDg4LDB4OTAsMHgwMywweDY0LDB4MDAsMHg4OSwweGMxLDB4YTIsMHg0MCwweDQ4LDB4MTYsMHgwMywweDY0LDB4MDIsMHg4OSB9LAorICAxNiwgMHg4MjgwLCAwLCB7MHgwMCwweDJlLDB4NDAsMHgwOCwweDkwLDB4MjIsMHgyNCwweDAwLDB4ODksMHgwMCwweDNlLDB4NDAsMHgyOCwweDkwLDB4MGEsMHgyMCB9LAorICAxNiwgMHg4MjkwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNCwweDI0LDB4MDAsMHg4OSwweDAyLDB4MmUsMHg0MCB9LAorICAxNiwgMHg4MmEwLCAwLCB7MHgwYiwweDEwLDB4MDIsMHgyNCwweDAwLDB4ODksMHgxMCwweDIyLDB4NDAsMHg4OSwweDkwLDB4MDIsMHhhYywweDAwLDB4YTEsMHgwOCB9LAorICAxNiwgMHg4MmIwLCAwLCB7MHgyMiwweDQwLDB4MDksMHg5OCwweDAyLDB4YTQsMHgwMCwweDg5LDB4MDAsMHgyYSwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMCB9LAorICAxNiwgMHg4MmMwLCAwLCB7MHg4OSwweDAwLDB4MjYsMHg0MCwweDA4LDB4MTAsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MmQwLCAwLCB7MHgwOCwweDAwLDB4MjQsMHgwMCwweDgxLDB4MDAsMHgyYywweDQxLDB4MGIsMHgxMiwweDAyLDB4MDQsMHg4MSwweDgxLDB4MjAsMHgyMiB9LAorICAxNiwgMHg4MmUwLCAwLCB7MHg0OCwweDA4LDB4MTIsMHgwMiwweGM0LDB4ODEsMHg4MSwweDI0LDB4MDIsMHg0OCwweDBhLDB4OTAsMHgwMiwweDg0LDB4YTAsMHg4MSB9LAorICAxNiwgMHg4MmYwLCAwLCB7MHgyOCwweDZjLDB4NGEsMHgwOCwweDEyLDB4ZDIsMHgwNCwweGExLDB4ODEsMHgyOCwweDJjLDB4NGEsMHgwOCwweDEyLDB4ODIsMHgwMiB9LAorICAxNiwgMHg4MzAwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwOCwweDYxLDB4NDAsMHhjOCwweDAwLDB4MmUsMHgxNCB9LAorICAxNiwgMHg4MzEwLCAwLCB7MHgwZiwweDg1LDB4MGIsMHgyMSwweDQyLDB4Y2EsMHg1MCwweDIyLDB4MTQsMHgwZCwweDg1LDB4NDMsMHhhMSwweDQwLDB4ZTgsMHg1MCB9LAorICAxNiwgMHg4MzIwLCAwLCB7MHgzMCwweDAwLDB4MGQsMHg4NSwweDAyLDB4YTEsMHhjMCwweGQ4LDB4MjAsMHgzYSwweDA4LDB4MmMsMHg4MiwweDBiLDB4MjAsMHg4MiB9LAorICAxNiwgMHg4MzMwLCAwLCB7MHhjOCwweDIwLDB4MzQsMHgwOSwweDhjLDB4ODIsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4MzQwLCAwLCB7MHg5OCwweDBkLDB4ZmMsMHgwMiwweGY5LDB4MDAsMHgzZiwweDQwLDB4NGYsMHhkMSwweDAzLDB4ZTQsMHg0MCwweGY1LDB4MTQsMHhiZiB9LAorICAxNiwgMHg4MzUwLCAwLCB7MHg0NCwweDBkLDB4NTEsMHgyMywweDVjLDB4NDAsMHhmNSwweDEwLDB4MWYsMHg0ZSwweDRkLDB4NTAsMHgwMywweDY0LDB4MDgsMHhmOSB9LAorICAxNiwgMHg4MzYwLCAwLCB7MHgyOCwweDNlLDB4NGEsMHg4ZiwweDkyLDB4ODMsMHhlNCwweGEwLDB4ZjksMHgyOCwweDNhLDB4NGIsMHgwZiwweDkyLDB4ODMsMHhlNiB9LAorICAxNiwgMHg4MzcwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGY0LDB4NDAsMHhmZCwweDAwLDB4MzAsMHg0MCB9LAorICAxNiwgMHg4MzgwLCAwLCB7MHgwYywweDkwLDB4MDMsMHgyNCwweDAwLDB4ZGQsMHgwMCwweDNiLDB4NDAsMHgwZSwweDkwLDB4MDMsMHg3NCwweDAwLDB4NWQsMHgwMCB9LAorICAxNiwgMHg4MzkwLCAwLCB7MHgzNiwweDY0LDB4MGQsMHhkMCwweDAwLDB4YTYsMHgwMCwweGY5LDB4NDAsMHgzMiwweDc4LDB4MGMsMHg5OSwweDAzLDB4MjQsMHg0MCB9LAorICAxNiwgMHg4M2EwLCAwLCB7MHhjOSwweDkwLDB4MzIsMHg1MCwweDBmLDB4OWIsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4M2IwLCAwLCB7MHgzOCwweDEwLDB4ZTIsMHg4MCwweGI4LDB4MDAsMHgyMiwweDAxLDB4MDgsMHg4MCwweDBhLDB4MjAsMHgwMCwweDg4LDB4MDAsMHgyYSB9LAorICAxNiwgMHg4M2MwLCAwLCB7MHgwMCwweDA4LDB4ODAsMHgwMiwweDIwLDB4MDAsMHg4OCwweDAwLDB4MjIsMHgyMCwweDA4LDB4OGEsMHg4YiwweGUxLDB4MDAsMHhiOCB9LAorICAxNiwgMHg4M2QwLCAwLCB7MHg4MCwweDIyLDB4MzAsMHgyOCwweDBkLDB4MDIsMHgyMiwweDAwLDB4ZDgsMHhlNCwweDIyLDB4MjgsMHgwYiwweDhmLDB4MGEsMHgwZSB9LAorICAxNiwgMHg4M2UwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4ODAsMHhiMSwweDAwLDB4YTAsMHg0MCB9LAorICAxNiwgMHg4M2YwLCAwLCB7MHgwOCwweDEwLDB4MDIsMHgwNCwweDAwLDB4ODksMHgwMCwweDA4LDB4NDAsMHgwYSwweDkwLDB4NDIsMHg0NCwweDAwLDB4OTEsMHgwMCB9LAorICAxNiwgMHg4NDAwLCAwLCB7MHgyMCwweDU4LDB4MjgsMHg5MCwweDAyLDB4ODUsMHgwMCwweDgxLDB4MjAsMHhhMCwweDRjLDB4MDksMHgxMiwweDBhLDB4MDQsMHg4MCB9LAorICAxNiwgMHg4NDEwLCAwLCB7MHg5MSwweDQwLDB4YTAsMHg0MCwweDBiLDB4MTAsMHgwMiwweDAyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NDIwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMCwweGI5LDB4MDIsMHgyMCwweDQwLDB4MDgsMHg5MCwweDAyLDB4MDQsMHgwMCwweDg5LDB4MDEsMHgyMiB9LAorICAxNiwgMHg4NDMwLCAwLCB7MHg0MCwweDI4LDB4OTAsMHgyMiwweDA0LDB4MDAsMHg4OSwweDEwLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiMSB9LAorICAxNiwgMHg4NDQwLCAwLCB7MHgwMCwweDIyLDB4NDAsMHg4MSwweDkwLDB4MDIsMHgwNCwweDAwLDB4OTEsMHgwMCwweDIyLDB4NDAsMHgwYiwweDkwLDB4MDIsMHgwNiB9LAorICAxNiwgMHg4NDUwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU1LDB4MDAsMHhmMSwweDAwLDB4MzIsMHg2MCB9LAorICAxNiwgMHg4NDYwLCAwLCB7MHgyYywweDkyLDB4MTMsMHgyNCwweDAyLDB4ZDEsMHgxMCwweDNhLDB4NDAsMHgwZSwweDEyLDB4MDMsMHg2NiwweDA0LDB4ZDksMHgwMCB9LAorICAxNiwgMHg4NDcwLCAwLCB7MHhiNiwweDQwLDB4MGQsMHgxOSwweDAzLDB4YTQsMHgwMCwweGY5LDB4MDAsMHgzMiwweDQwLDB4MDksMHg5MCwweDAxLDB4MjQsMHgwMCB9LAorICAxNiwgMHg4NDgwLCAwLCB7MHhkOSwweDAyLDB4MjIsMHg0MCwweDBmLDB4OTAsMHgwMywweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NDkwLCAwLCB7MHgyYSwweDAxLDB4YTUsMHgwMCwweGY5LDB4MDAsMHgzZSwweDY0LDB4MGYsMHgxMCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4ODEsMHgzZSB9LAorICAxNiwgMHg4NGEwLCAwLCB7MHg2NiwweDhmLDB4OTAsMHgyMywweGU0LDB4ODAsMHhmOSwweDA0LDB4M2UsMHg0MCwweDhmLDB4OTAsMHgwMywweGU0LDB4MDQsMHhmOSB9LAorICAxNiwgMHg4NGIwLCAwLCB7MHgwMCwweDNjLDB4NDAsMHgwZSwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgwZiwweDEwLDB4MDMsMHhjYSB9LAorICAxNiwgMHg4NGMwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmEsMHgxMCwweGEwLDB4MDAsMHhmOCwweDI0LDB4M2UsMHgwMCB9LAorICAxNiwgMHg4NGQwLCAwLCB7MHgyYywweDg0LDB4MDMsMHgyMCwweDAwLDB4YjgsMHgyMCwweDNlLDB4MDAsMHg4YywweDgwLDB4MDMsMHhhMCwweDAwLDB4NzAsMHg4MiB9LAorICAxNiwgMHg4NGUwLCAwLCB7MHgzMiwweDAwLDB4MGYsMHg4MCwweDAzLDB4MjAsMHgwOCwweGY4LDB4MDAsMHgzMiwweDAwLDB4MmMsMHg4MCwweDBiLDB4MjAsMHgwOCB9LAorICAxNiwgMHg4NGYwLCAwLCB7MHhjOCwweDAwLDB4M2UsMHgwMCwweDBjLDB4ODAsMHgwMywweGNhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NTAwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwNCwweGJlLDB4ODAsMHgzYSwweDgwLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwNCwweDhlLDB4MDAsMHg2ZCB9LAorICAxNiwgMHg4NTEwLCAwLCB7MHg5MCwweDBkLDB4YTAsMHgwMiwweDNhLDB4MDAsMHg4ZSwweDgwLDB4YTIsMHg4MCwweDBlLDB4ZTAsMHgwYiwweDY4LDB4MDAsMHhiYSB9LAorICAxNiwgMHg4NTIwLCAwLCB7MHgwMCwweDIyLDB4ODAsMHgwOCwweGEwLDB4MDIsMHgyOCwweDAwLDB4ZGEsMHgwMCwweDJlLDB4ODAsMHgwOCwweGEwLDB4MDIsMHhjYSB9LAorICAxNiwgMHg4NTMwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHg4MSwweDRjLDB4MDAsMHhiMSwweDAwLDB4MmMsMHhjMCB9LAorICAxNiwgMHg4NTQwLCAwLCB7MHgwOCwweDMwLDB4MDIsMHgwYywweDE4LDB4YTMsMHgwMiwweDJjLDB4MTAsMHg4OCwweDMwLDB4MDYsMHg4MiwweDgxLDB4YTAsMHgwMCB9LAorICAxNiwgMHg4NTUwLCAwLCB7MHgyYSwweGMwLDB4MGIsMHgzMCwweDBhLDB4NGMsMHgwMCwweGIzLDB4MDAsMHgyMCwweGMwLDB4MWEsMHhiMCwweDAyLDB4OGMsMHgwMSB9LAorICAxNiwgMHg4NTYwLCAwLCB7MHg4MywweDAwLDB4MmMsMHhjMCwweDA4LDB4MzAsMHgwMiwweGNhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NTcwLCAwLCB7MHgyMCwweDAxLDB4MWMsMHgxMCwweGI0LDB4MGEsMHgyYiwweGM4LDB4MDgsMHgzMSwweDI2LDB4MWMsMHgwMCwweDg2LDB4MDAsMHgyZCB9LAorICAxNiwgMHg4NTgwLCAwLCB7MHhjMCwweDA5LDB4NzIsMHgwMiwweDFkLDB4MDAsMHhhNSwweDQwLDB4MjksMHhjMCwweDBhLDB4NjAsMHgwMiwweDVjLDB4ODgsMHhiMyB9LAorICAxNiwgMHg4NTkwLCAwLCB7MHgyMCwweDI1LDB4YzgsMHgwYSwweDcyLDB4MDIsMHg5YywweDgwLDB4OTcsMHgyMCwweDJjLDB4ZTgsMHg4MCwweDcyLDB4MDIsMHhlOCB9LAorICAxNiwgMHg4NWEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwOCwweDE2LDB4MDAsMHhiNSwweDgwLDB4M2QsMHhlMiB9LAorICAxNiwgMHg4NWIwLCAwLCB7MHgwYywweDdhLDB4OGIsMHgwZSwweGMwLDB4YTcsMHg4MSwweDJjLDB4MjAsMHgwYywweGZjLDB4MDMsMHg5MiwweDAyLDB4ZWYsMHg4MCB9LAorICAxNiwgMHg4NWMwLCAwLCB7MHgzOSwweGU0LDB4MGIsMHhkOCwweDAxLDB4MWYsMHgwMCwweGY3LDB4ODAsMHhiMywweGY0LDB4OGUsMHg3OSwweDAzLDB4OGUsMHgwMCB9LAorICAxNiwgMHg4NWQwLCAwLCB7MHhjNywweGM0LDB4M2QsMHhlOCwweDJjLDB4N2IsMHgwMywweGVhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NWUwLCAwLCB7MHgwOCwweDFkLDB4YWMsMHgwMCwweGY4LDB4MDAsMHgzZSwweGRkLDB4ODcsMHhiNiwweDAzLDB4ZWQsMHhjYywweGU5LDB4MDAsMHgzZSB9LAorICAxNiwgMHg4NWYwLCAwLCB7MHg0MCwweDBmLDB4YjAsMHgwNywweGNjLDB4MTAsMHgwYiwweDAwLDB4MzYsMHhkOCwweDBmLDB4ODAsMHg0MywweGFkLDB4ODAsMHhmYiB9LAorICAxNiwgMHg4NjAwLCAwLCB7MHgyOCwweDNhLDB4YzAsMHgwZCwweGI0LDB4MDMsMHg2YywweGUyLDB4ZWIsMHg2MCwweDNlLDB4ZDQsMHgwZiwweGIwLDB4MDMsMHhjMiB9LAorICAxNiwgMHg4NjEwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNSwweGZlLDB4MDAsMHhmZSwweDkwLDB4M2YsMHhlNSB9LAorICAxNiwgMHg4NjIwLCAwLCB7MHgwZSwweGY4LDB4MDMsMHgzZSwweDEwLDB4ZmYsMHg5MCwweDE3LDB4NjAsMHgwZiwweGZjLDB4MDMsMHg3YSwweDAwLDB4ZWUsMHg4MCB9LAorICAxNiwgMHg4NjMwLCAwLCB7MHgzNywweGUyLDB4MGUsMHg3OCwweDBmLDB4ZmYsMHg0MCwweGVmLDB4ODgsMHgxZiwweGUwLDB4MGMsMHhmOCwweDgzLDB4ZmUsMHg4MCB9LAorICAxNiwgMHg4NjQwLCAwLCB7MHhjZiwweGQwLDB4YjMsMHhmMCwweDBjLDB4ZjgsMHhjMywweDEwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NjUwLCAwLCB7MHhhOCwweDExLDB4OWMsMHg0MCwweGI0LDB4MTAsMHgwZiwweGNjLDB4MDAsMHg3MiwweDAyLDB4MWMsMHgwMCwweGI2LDB4MDIsMHgwOSB9LAorICAxNiwgMHg4NjYwLCAwLCB7MHhjMCwweDI4LDB4ZjAsMHgwMiwweDk4LDB4MDAsMHhhNiwweDAwLDB4MjEsMHhjMCwweDBiLDB4NjAsMHgwMywweGZjLDB4MDIsMHg4NyB9LAorICAxNiwgMHg4NjcwLCAwLCB7MHgwMCwweDJkLDB4YzAsMHgwOCwweDcwLDB4MDIsMHhkZSwweDAwLDB4OGYsMHgxMCwweDIxLDB4YzAsMHgwOCwweGYwLDB4MDMsMHg2YSB9LAorICAxNiwgMHg4NjgwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweDk0LDB4MDAsMHhiNiwweDAyLDB4MmYsMHhjMiB9LAorICAxNiwgMHg4NjkwLCAwLCB7MHgxYSwweDMwLDB4ODAsMHgxYywweDAwLDB4YjYsMHgwOCwweDAxLDB4NDAsMHgwYSwweGYwLDB4MDIsMHgxOCwweDAwLDB4ODcsMHgwMCB9LAorICAxNiwgMHg4NmEwLCAwLCB7MHgyMSwweGMwLDB4MGIsMHhkMCwweDAyLDB4OWMsMHgxMCwweDg3LDB4MDAsMHgyOSwweGMwLDB4MDgsMHg3MCwweDAyLDB4ZGMsMHg0NCB9LAorICAxNiwgMHg4NmIwLCAwLCB7MHg4NywweDEwLDB4NjQsMHhjMCwweDA4LDB4NzAsMHgwMiwweDA2LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NmMwLCAwLCB7MHg2MCwweDE0LDB4Y2UsMHg2MCwweGIwLDB4MDAsMHgyYywweGMwLDB4MDgsMHgzNCwweDBhLDB4MGMsMHgwOCwweGIwLDB4MDQsMHgwMCB9LAorICAxNiwgMHg4NmQwLCAwLCB7MHg0MCwweDA4LDB4MzAsMHhhMiwweDg5LDB4ODAsMHhhMiwweDYyLDB4MjAsMHhlMCwweDBiLDB4MDAsMHgwYSwweGNjLDB4MDgsMHg4MyB9LAorICAxNiwgMHg4NmUwLCAwLCB7MHgwMCwweDZjLDB4YzAsMHgwOCwweDMwLDB4NTIsMHhjYywweDAwLDB4ODMsMHgwMCwweDI0LDB4YzAsMHgwOCwweDMwLDB4MDIsMHg1OCB9LAorICAxNiwgMHg4NmYwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGFlLDB4MDAsMHhmOCwweDAwLDB4M2YsMHhkMCB9LAorICAxNiwgMHg4NzAwLCAwLCB7MHgwZSwweGZjLDB4MDMsMHgzYywweDAwLDB4ZjksMHgwMCwweDkyLDB4ODQsMHgwZiwweGZjLDB4MDMsMHg2NCwweDAwLDB4ODAsMHgwMCB9LAorICAxNiwgMHg4NzEwLCAwLCB7MHhiNywweGMzLDB4MGYsMHhiOCwweDgzLDB4YmMsMHgwNCwweGVmLDB4MDAsMHgzZiwweGMwLDB4M2MsMHhmMCwweDAzLDB4ZmMsMHgwMiB9LAorICAxNiwgMHg4NzIwLCAwLCB7MHhjZiwweDAwLDB4MzcsMHhjMCwweDI4LDB4ZjAsMHgxMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4NzMwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGY4LDB4NDEsMHgzZSwweGM4LDB4MGYsMHgzMiwweDAzLDB4ZWMsMHgwMCwweGY4LDB4MDAsMHgzYSB9LAorICAxNiwgMHg4NzQwLCAwLCB7MHhjNCwweDBmLDB4YjEsMHgwMywweGM0LDB4MDAsMHhmOSwweDAwLDB4MzYsMHhjMCwweDBmLDB4ZTQsMHgwYiwweGVjLDB4MDQsMHhmYiB9LAorICAxNiwgMHg4NzUwLCAwLCB7MHgwMCwweDNlLDB4YzEsMHgwZiwweGIwLDB4NDMsMHhlYywweDA0LDB4ZmIsMHgwMCwweDNhLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhlNCB9LAorICAxNiwgMHg4NzYwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGY0LDB4MDAsMHhmYywweDgwLDB4M2YsMHhjMCB9LAorICAxNiwgMHg4NzcwLCAwLCB7MHgxZiwweGYwLDB4MDMsMHgzYywweDA4LDB4ZmIsMHgwMCwweDMzLDB4ODAsMHgyZSwweGYwLDB4MTMsMHhhNCwweDA0LDB4Y2IsMHgwMCB9LAorICAxNiwgMHg4NzgwLCAwLCB7MHhiOSwweGMwLDB4MmMsMHhkOCwweDBiLDB4M2MsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MDksMHg3MCwweDAwLDB4MmMsMHgwNCB9LAorICAxNiwgMHg4NzkwLCAwLCB7MHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGMwLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4N2EwLCAwLCB7MHhjMSwweDAwLDB4NmMsMHgwMCwweGI4LDB4ODAsMHgyZSwweGMwLDB4MGIsMHhiMCwweDAzLDB4NmMsMHgwMCwweGI5LDB4MTYsMHgyOCB9LAorICAxNiwgMHg4N2IwLCAwLCB7MHg3MiwweDA4LDB4YjAsMHgyMiwweDI3LDB4NDAsMHhkYiwweDAwLDB4MjIsMHhjMCwweDA4LDB4YmQsMHg4MiwweDJjLDB4MDgsMHhiYiB9LAorICAxNiwgMHg4N2MwLCAwLCB7MHgwMCwweDJlLDB4YzAsMHg0OCwweGIwLDB4MDIsMHgyYywweDAwLDB4YmIsMHgwMCwweDJlLDB4YzEsMHgwYiwweGIwLDB4MDIsMHhlMCB9LAorICAxNiwgMHg4N2QwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHhiOCwweDYwLDB4MmUsMHhjMCB9LAorICAxNiwgMHg4N2UwLCAwLCB7MHgwYiwweGIwLDB4MDIsMHgyYywweDAwLDB4YjEsMHgwMCwweDJhLDB4ODQsMHg0YSwweDMwLDB4MjIsMHhhYywweDIwLDB4OTgsMHg4MCB9LAorICAxNiwgMHg4N2YwLCAwLCB7MHgyYSwweGMwLDB4MDgsMHgzMCwweDAyLDB4YWMsMHgwMCwweDNiLDB4MDAsMHgyYywweGMwLDB4MGEsMHhiMCwweDAyLDB4YWMsMHgwOCB9LAorICAxNiwgMHg4ODAwLCAwLCB7MHhiYiwweDAwLDB4MmUsMHhjMCwweDBiLDB4YjAsMHg0MiwweGUwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ODEwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMSwweGIwLDB4MDAsMHgyYywweGMwLDB4MGIsMHgzMCwweDAyLDB4NGMsMHgwNCwweGIwLDB4MDAsMHgyYSB9LAorICAxNiwgMHg4ODIwLCAwLCB7MHg4MCwweDA4LDB4MzAsMHgwMiwweDAwLDB4MDAsMHgxMCwweDA0LDB4MjgsMHhjMCwweDA4LDB4MjAsMHg0MiwweDhjLDB4MDAsMHhiMyB9LAorICAxNiwgMHg4ODMwLCAwLCB7MHgwMCwweDJjLDB4YzAsMHg0MiwweDMwLDB4MGEsMHg4YywweDAwLDB4YjMsMHgwMCwweDJjLDB4YzAsMHg4YiwweDMwLDB4MDIsMHhjMiB9LAorICAxNiwgMHg4ODQwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDY0LDB4MDAsMHhmOCwweDUwLDB4M2YsMHhjMCB9LAorICAxNiwgMHg4ODUwLCAwLCB7MHgwYiwweGYwLDB4MDMsMHgzYywweDAwLDB4ZmEsMHgwNCwweDMyLDB4ODAsMHgwZSwweGYwLDB4MjMsMHhhYywweDAwLDB4ZDksMHgwMCB9LAorICAxNiwgMHg4ODYwLCAwLCB7MHgzYiwweGMwLDB4MGMsMHg5MCwweDAzLDB4YmMsMHgwNCwweGZmLDB4MDAsMHgzZCwweGMwLDB4MmUsMHhmMCwweDBiLDB4M2MsMHgwMCB9LAorICAxNiwgMHg4ODcwLCAwLCB7MHhmZiwweDA0LDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGMwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ODgwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgwMCwweGZjLDB4MDAsMHgzZiwweGMwLDB4MDcsMHhmMCwweDAzLDB4ZmMsMHgwNCwweDdjLDB4MDIsMHhiNSB9LAorICAxNiwgMHg4ODkwLCAwLCB7MHgwMCwweDBmLDB4ZjAsMHgwMywweGYwLDB4MDAsMHhmYywweDAwLDB4MzcsMHhjMCwweDBmLDB4ZjAsMHgxMywweDdjLDB4MDAsMHhmZiB9LAorICAxNiwgMHg4OGEwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHgwZCwweGYwLDB4MDMsMHg2ZCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgxZiwweGYwLDB4MDMsMHhlOCB9LAorICAxNiwgMHg4OGIwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGQyLDB4MDAsMHhkNSwweDgwLDB4MzMsMHgwYSB9LAorICAxNiwgMHg4OGMwLCAwLCB7MHg0YywweGY4LDB4MDMsMHhmMiwweDAwLDB4ZmMsMHgwMCwweDM3LDB4MjYsMHgxZiwweGNhLDB4MDMsMHhiYywweGM0LDB4Y2YsMHgyMCB9LAorICAxNiwgMHg4OGQwLCAwLCB7MHgzMywweGU0LDB4MGYsMHg3OCwweDAzLDB4M2UsMHg0NCwweGNmLDB4MDAsMHgzYiwweGNlLDB4OWYsMHg2OCwweDEzLDB4ZDAsMHgwMCB9LAorICAxNiwgMHg4OGUwLCAwLCB7MHhjZCwweDgwLDB4YjMsMHg2MCwweDBmLDB4ZmEsMHg4MywweGYwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4OGYwLCAwLCB7MHg4MCwweDEwLDB4ZTAsMHg4MCwweGM5LDB4MjgsMHgyMiwweDMwLDB4MDgsMHhiMiwweDIyLDB4ZWEsMHgwMSwweGI4LDB4ODIsMHgyMCB9LAorICAxNiwgMHg4OTAwLCAwLCB7MHg1MCwweDRmLDB4OWMsMHgwMCwweGE4LDB4ZDEsMHhkYiwweDEwLDB4YTYsMHhlMCwweDE3LDB4YjgsMHgwMywweGVjLDB4ODAsMHhkYiB9LAorICAxNiwgMHg4OTEwLCAwLCB7MHgwOCwweDFmLDB4ZDAsMHgwYiwweGI4LDB4MDIsMHhmNiwweDAwLDB4ZmIsMHg4MCwweDIyLDB4NDAsMHgwYiwweGIwLDB4MDIsMHg2MCB9LAorICAxNiwgMHg4OTIwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGM0LDB4MjAsMHg4MSwweDgwLDB4MjAsMHgwMCB9LAorICAxNiwgMHg4OTMwLCAwLCB7MHg4YiwweDMwLDB4ODIsMHhjMCwweDAwLDB4YjAsMHgxMCwweDI4LDB4MDgsMHg4YiwweDExLDB4MzAsMHhjNCwweDg0LDB4OTAsMHgyOCB9LAorICAxNiwgMHg4OTQwLCAwLCB7MHgyNCwweGM4LDB4MGIsMHgzMCwweDAyLDB4NGMsMHgwMCwweDgzLDB4MTAsMHgwNCwweGM4LDB4MGIsMHgzMCwweDAyLDB4Y2MsMHgwMCB9LAorICAxNiwgMHg4OTUwLCAwLCB7MHhiMywweDAwLDB4MjQsMHg0MCwweDBiLDB4MzAsMHgwMiwweGUyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4OTYwLCAwLCB7MHhjMCwweDE1LDB4YTYsMHgwMCwweDgxLDB4MDAsMHgyMiwweDEwLDB4MGIsMHhiMCwweDEyLDB4ZWEsMHgyMCwweGJiLDB4MDAsMHgyYSB9LAorICAxNiwgMHg4OTcwLCAwLCB7MHg3MCwweDBhLDB4OWMsMHgwMiwweDYyLDB4MDAsMHg5OCwweDg4LDB4MjYsMHhjOCwweDAyLDB4YjIsMHgwMiwweDhlLDB4MDgsMHg4YiB9LAorICAxNiwgMHg4OTgwLCAwLCB7MHgxOCwweDIyLDB4YzAsMHgwYiwweGEwLDB4MDIsMHhlZSwweDIwLDB4M2IsMHgwMCwweDI2LDB4NDAsMHgwYiwweGIwLDB4MDIsMHg3MCB9LAorICAxNiwgMHg4OTkwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGUwLDB4MDAsMHhjYiwweDAwLDB4MzIsMHg4MCB9LAorICAxNiwgMHg4OWEwLCAwLCB7MHgwZiwweGIwLDB4MDMsMHhlNywweDAwLDB4YjgsMHg1MiwweDNlLDB4MjAsMHg0YiwweDBjLDB4NDMsMHhlZiwweDgyLDB4OWIsMHhjMCB9LAorICAxNiwgMHg4OWIwLCAwLCB7MHgzMiwweGMwLDB4MGIsMHhiMCwweDAyLDB4NmMsMHgwMSwweDhiLDB4ODAsMHgyZSwweGMwLDB4MGIsMHhhMCwweDgzLDB4ZTYsMHgwMCB9LAorICAxNiwgMHg4OWMwLCAwLCB7MHhmYiwweDAwLDB4MzYsMHg0MCwweDBmLDB4ZjAsMHgwMywweGQwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4OWQwLCAwLCB7MHhlMCwweDAxLDB4YjAsMHgwMiwweGZmLDB4MDQsMHgzZiwweDkwLDB4MGMsMHhmMSwweDAxLDB4ZjQsMHgwOCwweDdkLDB4ODAsMHgzNyB9LAorICAxNiwgMHg4OWUwLCAwLCB7MHgwMCwweDBmLDB4YzAsMHgyMywweDk4LDB4MDAsMHhmNywweDAwLDB4MmIsMHhlMCwweDBmLDB4ZjgsMHgyMywweGZjLDB4MDYsMHhmYiB9LAorICAxNiwgMHg4OWYwLCAwLCB7MHg4MywweGJmLDB4YzAsMHg4NywweGQwLDB4MDMsMHhkYywweDAwLDB4ZWYsMHgwMCwweDNiLDB4YzAsMHgwZiwweGIwLDB4MDEsMHhmOCB9LAorICAxNiwgMHg4YTAwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGE2LDB4MDAsMHhjYiwweDAwLDB4MzMsMHg4MCB9LAorICAxNiwgMHg4YTEwLCAwLCB7MHgwZiwweGIwLDB4MDMsMHhlMSwweDEwLDB4ZjIsMHg0MCwweGIyLDB4MDAsMHgzZCwweDk0LDB4MTcsMHgyZCwweDQ0LDB4ZmEsMHg0MSB9LAorICAxNiwgMHg4YTIwLCAwLCB7MHgzMiwweGMwLDB4OWYsMHhiMCwweDIzLDB4MmMsMHgwMiwweGNiLDB4NDAsMHgzMiwweGMwLDB4NGYsMHg5MCwweDAzLDB4M2QsMHgwMCB9LAorICAxNiwgMHg4YTMwLCAwLCB7MHhjYiwweDAwLDB4M2UsMHg0MCwweDBmLDB4YjAsMHgwMywweDEwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4YTQwLCAwLCB7MHg4OCwweDA1LDB4MjYsMHgwMCwweDhiLDB4NzEsMHgyMCwweGQ1LDB4MDMsMHg5OSwweDAyLDB4ZTAsMHgwMCwweGJiLDB4ODAsMHgyMiB9LAorICAxNiwgMHg4YTUwLCAwLCB7MHg2MCwweDFjLDB4ODAsMHgwMywweDYwLDB4MDAsMHhiOCwweDAyLDB4MjIsMHhjMiwweDBiLDB4MzIsMHgwMiwweDJjLDB4MDEsMHg4ZiB9LAorICAxNiwgMHg4YTYwLCAwLCB7MHgwMiwweGQ3LDB4YzAsMHgwYiwweGEwLDB4MDMsMHg2ZCwweDQwLDB4NTMsMHg4MCwweDJlLDB4YzAsMHgwZSwweGYwLDB4NDMsMHg3MiB9LAorICAxNiwgMHg4YTcwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDY4LDB4MDIsMHg4MCwweDAwLDB4MjQsMHgwMCB9LAorICAxNiwgMHg4YTgwLCAwLCB7MHgwYiwweDM1LDB4MjYsMHhjMiwweDAwLDB4YjAsMHg5MCwweDIwLDB4YzAsMHg4OCwweDAwLDB4MDIsMHg0ZiwweDIwLDB4YjMsMHgwMiB9LAorICAxNiwgMHg4YTkwLCAwLCB7MHg2MCwweGUyLDB4MWIsMHgzOCwweDAyLDB4MGMsMHgwMCwweDg4LDB4MDAsMHg2MCwweGMwLDB4MGIsMHgzNCwweDgyLDB4NGMsMHgwMiB9LAorICAxNiwgMHg4YWEwLCAwLCB7MHhhMSwweDkwLDB4MmMsMHg0MCwweDBiLDB4MzAsMHgwMiwweDMwLDB4MDEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4YWIwLCAwLCB7MHgyMCwweDAxLDB4M2EsMHgwOCwweDhjLDB4YTAsMHgyZCwweDIwLDB4NGIsMHg3OCwweDAyLDB4ZGEsMHgwMCwweGIyLDB4OTAsMHgyMSB9LAorICAxNiwgMHg4YWMwLCAwLCB7MHg2NiwweDQ4LDB4NzksMHgwMiwweGRlLDB4NDAsMHhiNywweDkxLDB4YTEsMHhlMCwweGRiLDB4ZjgsMHgwMiwweDFlLDB4NDAsMHg4NCB9LAorICAxNiwgMHg4YWQwLCAwLCB7MHg5MCwweDAxLDB4ZTAsMHg4YiwweGY5LDB4MDIsMHg1ZSwweDAxLDB4OTcsMHg4MCwweDJkLDB4NjAsMHgwYSwweDc4LDB4MDAsMHg0OCB9LAorICAxNiwgMHg4YWUwLCAwLCB7MHgwNCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHg4MCwweDAwLDB4MjQsMHgwNCB9LAorICAxNiwgMHg4YWYwLCAwLCB7MHgwZiwweDMyLDB4MDMsMHhjNCwweGEwLDB4ZjEsMHg0MiwweDMwLDB4YzQsMHgyYywweDMxLDB4MDIsMHg0NCwweDAwLDB4ZjEsMHgxMSB9LAorICAxNiwgMHg4YjAwLCAwLCB7MHhhMCwweGMwLDB4MGIsMHgzMCwweDBiLDB4MGMsMHg0MiwweDgzLDB4MDAsMHgwMCwweGMwLDB4MGYsMHgzMCwweDAzLDB4NGMsMHgwMiB9LAorICAxNiwgMHg4YjEwLCAwLCB7MHhlMywweDAwLDB4M2MsMHg0MCwweDBiLDB4MzAsMHgwMSwweDEyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4YjIwLCAwLCB7MHhjMCwweDFkLDB4YmMsMHgwMCwweGZjLDB4YTUsMHgzMywweGMwLDB4MGYsMHhkMCwweDAzLDB4ZmMsMHgwMSwweGJmLDB4MDAsMHgzZiB9LAorICAxNiwgMHg4YjMwLCAwLCB7MHhjNCwweDBlLDB4NzEsMHgwMywweDc0LDB4MDAsMHg3NSwweDEwLDB4M2YsMHhjMCwweDA1LDB4ZjAsMHgwMywweGRjLDB4NDAsMHhmZiB9LAorICAxNiwgMHg4YjQwLCAwLCB7MHgwNCwweDNmLDB4YzAsMHgwZiwweGYwLDB4NDMsMHhmYywweDAwLDB4N2YsMHgwMCwweDNmLDB4NDAsMHgwZSwweGYwLDB4MDMsMHhkMCB9LAorICAxNiwgMHg4YjUwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNCwweGU4LDB4MDAsMHhmMiwweDA0LDB4YjMsMHg4MCB9LAorICAxNiwgMHg4YjYwLCAwLCB7MHgwZiwweGI4LDB4MGIsMHgyYywweDAwLDB4ZWIsMHg4MCwweDMyLDB4YzAsMHgwYywweDIwLDB4MTMsMHgyZSwweDA4LDB4Y2IsMHgwMSB9LAorICAxNiwgMHg4YjcwLCAwLCB7MHgzMiwweGM1LDB4MGYsMHhiMSwweDAzLDB4ZWMsMHg0OCwweGM4LDB4MTAsMHgzMiwweGZhLDB4OGMsMHgzOCwweDAzLDB4M2MsMHg5MCB9LAorICAxNiwgMHg4YjgwLCAwLCB7MHhjYiwweDAwLDB4M2UsMHg0MCwweDBmLDB4YjAsMHgxMywweGMyLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4YjkwLCAwLCB7MHhjOCwweDEwLDB4OTgsMHgwMCwweGY2LDB4MDAsMHg2MSwweDgxLDB4MGIsMHhmMCwweDAyLDB4MWMsMHgwMCwweGQ3LDB4MDAsMHhiNyB9LAorICAxNiwgMHg4YmEwLCAwLCB7MHg4MCwweDBjLDB4NzAsMHgwMiwweGJjLDB4MTAsMHg4ZiwweDAwLDB4MjEsMHhjOCwweDhiLDB4NzIsMHg0MywweGZjLDB4ODgsMHhkYyB9LAorICAxNiwgMHg4YmIwLCAwLCB7MHgwMCwweDM3LDB4YzgsMHgwZCwweDUwLDB4MDIsMHgxYywweDIyLDB4ODcsMHgwMCwweDJkLDB4YzAsMHgwYiwweDcwLDB4MDIsMHhkMyB9LAorICAxNiwgMHg4YmMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweDllLDB4MDAsMHhiNiwweDgwLDB4YTksMHhhMCB9LAorICAxNiwgMHg4YmQwLCAwLCB7MHg0YiwweDdjLDB4MDIsMHg1ZSwweDMwLDB4YTMsMHg4OCwweDIxLDB4ZjAsMHgwOCwweDc4LDB4MDIsMHgxNiwweDAwLDB4ODUsMHg4MCB9LAorICAxNiwgMHg4YmUwLCAwLCB7MHgyMSwweGUwLDB4MGIsMHg3OCwweDAyLDB4ZGUsMHgwMCwweDg3LDB4ODAsMHhhMSwweGU0LDB4MDgsMHhkOCwweDAyLDB4NGUsMHgwMCB9LAorICAxNiwgMHg4YmYwLCAwLCB7MHg5NywweDgwLDB4MmQsMHg3MCwweDBiLDB4NzgsMHgwMiwweGM4LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4YzAwLCAwLCB7MHg0OCwweDE0LDB4ZWMsMHgwMCwweGIyLDB4MDAsMHgyOCwweGMwLDB4MGIsMHgxMCwweDAyLDB4NGUsMHg5MCwweDkzLDB4MDIsMHgyMiB9LAorICAxNiwgMHg4YzEwLCAwLCB7MHhmMCwweDA4LDB4MzgsMHg0MiwweDhjLDB4NDIsMHg4MywweDA0LDB4MjIsMHhlNCwweDRiLDB4MzgsMHgwMiwweDhlLDB4NDAsMHg4MyB9LAorICAxNiwgMHg4YzIwLCAwLCB7MHgwMCwweDIwLDB4YzAsMHgwOSwweDM4LDB4MjIsMHg0ZSwweDIxLDB4OTMsMHgwMCwweDJlLDB4ZTAsMHgwYiwweDMwLDB4MDIsMHhkYiB9LAorICAxNiwgMHg4YzMwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MDEsMHhmYSwweDAwLDB4M2IsMHg4OSB9LAorICAxNiwgMHg4YzQwLCAwLCB7MHgwZiwweGEwLDB4MDIsMHg3OCwweDA4LDB4YWUsMHg0MCwweDIzLDB4ODAsMHgyYywweDZjLDB4MGIsMHgzYSwweDAwLDB4OGUsMHg4YyB9LAorICAxNiwgMHg4YzUwLCAwLCB7MHhiMiwweDAwLDB4MGIsMHg4MCwweDgyLDB4ZTAsMHgwMiwweDhlLDB4MDAsMHgyMiwweDgwLDB4MGMsMHhlOCwweDAyLDB4N2IsMHg4MCB9LAorICAxNiwgMHg4YzYwLCAwLCB7MHg5YSwweDgwLDB4M2UsMHg4MCwweDBmLDB4YTAsMHgwMywweGZhLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4YzcwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwOSwweGVjLDB4MDAsMHgzNiwweDIxLDB4MGIsMHg4MCwweDEzLDB4YTEsMHgwMCwweGY4LDB4NjAsMHgzZSB9LAorICAxNiwgMHg4YzgwLCAwLCB7MHgwMCwweDBmLDB4ODEsMHgwMywweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHg0MywweGUwLDB4MTAsMHhmOCB9LAorICAxNiwgMHg4YzkwLCAwLCB7MHgwMCwweGJlLDB4MDAsMHgwZiwweDg1LDB4MGIsMHg4MCwweDAwLDB4ZTgsMHgxMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiB9LAorICAxNiwgMHg4Y2EwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDIsMHhjOSwweDAyLDB4MzAsMHg0OCB9LAorICAxNiwgMHg4Y2IwLCAwLCB7MHgwYywweDk5LDB4MTMsMHhhNCwweDAyLDB4YzksMHgwMCwweDNlLDB4NDIsMHgwYywweDkwLDB4OGYsMHgyNCwweDAwLDB4ZjksMHgwMCB9LAorICAxNiwgMHg4Y2MwLCAwLCB7MHgzMiwweDI4LDB4MGMsMHg4OCwweDAzLDB4ZTAsMHgwMCwweGM5LDB4MDAsMHhiMiwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTcsMHgwMCB9LAorICAxNiwgMHg4Y2QwLCAwLCB7MHhjOSwweDEwLDB4M2UsMHg0MCwweDBjLDB4MTAsMHgwMywweDAyLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4Y2UwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMSwweDg5LDB4ODAsMHhhMiwweDQ4LDB4MjgsMHg5MiwweDQyLDB4YzUsMHgwMCwweDg5LDB4NDAsMHgyZSB9LAorICAxNiwgMHg4Y2YwLCAwLCB7MHg0MCwweDJjLDB4OTAsMHgwNiwweDI1LDB4MDAsMHhiOSwweDAwLDB4MjIsMHg1MCwweDA4LDB4OTgsMHgwMiwweGM0LDB4MDAsMHg4OSB9LAorICAxNiwgMHg4ZDAwLCAwLCB7MHgwMSwweDc2LDB4NDAsMHg0YiwweDkyLDB4MDIsMHhlNSwweDAyLDB4ODksMHgwMCwweDJlLDB4NDAsMHgwZCwweDkwLDB4MDMsMHg2MCB9LAorICAxNiwgMHg4ZDEwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MGMsMHg4NSwweDIwLDB4YTIsMHg0MCB9LAorICAxNiwgMHg4ZDIwLCAwLCB7MHgwOCwweDkwLDB4MDYsMHhlNSwweDAwLDB4ODksMHg0MCwweDJlLDB4NDAsMHgwOSwweDkwLDB4NDIsMHhhNCwweGEwLDB4MzEsMHgwMCB9LAorICAxNiwgMHg4ZDMwLCAwLCB7MHgyMiwweDUwLDB4MTgsMHg5MSwweDAyLDB4ZTQsMHgwMCwweDgxLDB4MDAsMHgyMiwweDQwLDB4MGIsMHg5MCwweDA2LDB4ZTQsMHgwMCB9LAorICAxNiwgMHg4ZDQwLCAwLCB7MHg4OSwweDAwLDB4MmUsMHg0MCwweDA5LDB4OTAsMHgwMiwweDBlLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ZDUwLCAwLCB7MHgwMCwweDA0LDB4MTUsMHgwMCwweDg1LDB4NDAsMHgyMCwweDQwLDB4MDgsMHgxNCwweDI2LDB4ZTQsMHgwMCwweDgxLDB4MDAsMHgyYyB9LAorICAxNiwgMHg4ZDYwLCAwLCB7MHg0MCwweDE4LDB4MTAsMHgwMiwweDg0LDB4ODAsMHhiMSwweDIwLDB4YTAsMHg1MCwweDA4LDB4MTQsMHgwMiwweGU1LDB4MDIsMHg4MSB9LAorICAxNiwgMHg4ZDcwLCAwLCB7MHg0MCwweDIwLDB4NDgsMHgwYiwweDEwLDB4MDYsMHhjYywweDAwLDB4ODEsMHgwMSwweDJjLDB4NTAsMHgwOSwweDE0LDB4MDIsMHg0YSB9LAorICAxNiwgMHg4ZDgwLCAwLCB7MHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHg4YywweDAwLDB4MzIsMHgwMCB9LAorICAxNiwgMHg4ZDkwLCAwLCB7MHgwYywweDgwLDB4MjMsMHhlMCwweDAwLDB4YzgsMHgwMCwweDNlLDB4MTQsMHgwZCwweDgwLDB4MTIsMHhhMSwweDQ0LDB4ZjgsMHg1MSB9LAorICAxNiwgMHg4ZGEwLCAwLCB7MHgzMiwweDAwLDB4MmMsMHg4MCwweDAzLDB4ZTAsMHgwMCwweDg4LDB4MDQsMHgyMiwweDE0LDB4MGYsMHg4MCwweDA3LDB4ZTAsMHgwMCB9LAorICAxNiwgMHg4ZGIwLCAwLCB7MHhjOCwweDAwLDB4M2UsMHgwMCwweDBkLDB4ODAsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ZGMwLCAwLCB7MHg5OCwweDlkLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZiwweDUwLDB4MGYsMHhkMCwweDAzLDB4ZGMsMHgwMSwweGJkLDB4NDIsMHgzZiB9LAorICAxNiwgMHg4ZGQwLCAwLCB7MHg1MCwweDRmLDB4ZDQsMHg0MywweDc0LDB4NDEsMHhmZCwweDEwLDB4M2YsMHgxMCwweDFmLDB4YzQsMHgxMywweGYxLDB4MDAsMHhmZCB9LAorICAxNiwgMHg4ZGUwLCAwLCB7MHg0MCwweDdlLDB4NDQsMHgwZiwweGQwLDB4NDMsMHhmNSwweDAxLDB4ZmQsMHgwMCwweDNmLDB4NDAsMHgwZiwweDk0LDB4MDMsMHhlNiB9LAorICAxNiwgMHg4ZGYwLCAwLCB7MHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGY0LDB4MDAsMHhkZiwweDA1LDB4MzMsMHg2MSB9LAorICAxNiwgMHg4ZTAwLCAwLCB7MHgwZiwweDUwLDB4NTMsMHgzNCwweDEwLDB4ZmQsMHgwNCwweDMzLDB4NDQsMHg0ZiwweDUwLDB4MDMsMHg3NiwweGMxLDB4Y2QsMHhlMCB9LAorICAxNiwgMHg4ZTEwLCAwLCB7MHgzMywweDYwLDB4MGMsMHhjZSwweDAzLDB4ZjYsMHhjMCwweGUxLDB4YzAsMHhiNiwweDY0LDB4OGYsMHg1MCwweDBiLDB4MzYsMHg4MiB9LAorICAxNiwgMHg4ZTIwLCAwLCB7MHhjZCwweDAwLDB4M2UsMHg0NCwweDRjLDB4OWUsMHhjMywweGM2LDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ZTMwLCAwLCB7MHgzOCwweDEwLDB4ZWEsMHgyOCwweDgwLDB4YTAsMHhiMiwweDA0LDB4MGIsMHg4YSwweDgzLDB4NjAsMHgwMCwweGZhLDB4MDAsMHgzNiB9LAorICAxNiwgMHg4ZTQwLCAwLCB7MHgyOCwweDhiLDB4ODAsMHgwMywweGUzLDB4YzgsMHhjOCwweDg0LDB4MjIsMHgxNCwweDA4LDB4OGEsMHgwMiwweGUyLDB4ODAsMHhkOCB9LAorICAxNiwgMHg4ZTUwLCAwLCB7MHg4MiwweDM0LDB4MzQsMHgxYiwweDgwLDB4MDMsMHg2MCwweDA0LDB4ODgsMHgwMCwweDJlLDB4MjAsMHgwYSwweDhlLDB4NDIsMHhjZSB9LAorICAxNiwgMHg4ZTYwLCAwLCB7MHgwNiwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwNSwweGM0LDB4ODAsMHg4MSwweDA4LDB4MDQsMHg0MSB9LAorICAxNiwgMHg4ZTcwLCAwLCB7MHgwYiwweDkyLDB4MDIsMHgwNCwweDAwLDB4YjEsMHgwMCwweDJjLDB4NDAsMHgwYiwweDE4LDB4MDIsMHgyNCwweDAwLDB4YjEsMHg2MCB9LAorICAxNiwgMHg4ZTgwLCAwLCB7MHgyNiwweDQwLDB4MGEsMHgxNiwweDAyLDB4YzUsMHgwMCwweGExLDB4YzAsMHgyMCwweDQ4LDB4MGIsMHg5MCwweDAyLDB4NDcsMHgwMCB9LAorICAxNiwgMHg4ZTkwLCAwLCB7MHg5MSwweDAxLDB4MmMsMHg0OCwweDE4LDB4MTIsMHgwMiwweGQyLDB4MDEsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ZWEwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwYywweDhiLDB4MDQsMHhhMiwweDUwLDB4MGIsMHg5MSwweDAyLDB4MjQsMHgwNCwweGE5LDB4MDEsMHgyZSB9LAorICAxNiwgMHg4ZWIwLCAwLCB7MHg0MiwweDBiLDB4OTAsMHgwMiwweGE0LDB4MDAsMHhhOSwweDAwLDB4MjYsMHg2MCwweDBhLDB4OTAsMHgwMiwweGU2LDB4MDAsMHg4MSB9LAorICAxNiwgMHg4ZWMwLCAwLCB7MHgwMCwweDIyLDB4NDAsMHg4YiwweGIwLDB4MDIsMHgyNCwweDA4LDB4OTksMHgxMCwweDJlLDB4NDAsMHgxYSwweDkwLDB4MDIsMHhjNiB9LAorICAxNiwgMHg4ZWQwLCAwLCB7MHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU1LDB4MDAsMHhjOSwweDAwLDB4MzYsMHg0MCB9LAorICAxNiwgMHg4ZWUwLCAwLCB7MHgwZiwweDEwLDB4MDIsMHgyNSwweDAwLDB4YjEsMHgwMCwweDJlLDB4NjAsMHgwZiwweDEwLDB4MTIsMHgyNCwweDAyLDB4YjksMHhhMCB9LAorICAxNiwgMHg4ZWYwLCAwLCB7MHhhNCwweDQwLDB4MmUsMHg5MSwweDAzLDB4ZTYsMHgwMCwweGE5LDB4MDAsMHgyMiwweDQwLDB4MGIsMHgxOSwweDgwLDB4NjQsMHgwNCB9LAorICAxNiwgMHg4ZjAwLCAwLCB7MHhkOSwweDgxLDB4MmUsMHg0MCwweDRjLDB4OTAsMHgwMywweGU4LDB4MTQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ZjEwLCAwLCB7MHg2OCwweDAxLDB4YTQsMHgwYSwweGU5LDB4MDAsMHhiZSwweDQ4LDB4MGYsMHg5OCwweDBiLDB4ZTQsMHgwMCwweGY5LDB4YzQsMHgzNiB9LAorICAxNiwgMHg4ZjIwLCAwLCB7MHg3MCwweDFmLDB4OTIsMHgwMywweGU2LDB4OTAsMHhjMSwweDkwLDB4M2EsMHg0MCwweDhkLDB4ODgsMHgwMywweGU0LDB4MDAsMHhmOSB9LAorICAxNiwgMHg4ZjMwLCAwLCB7MHg5MCwweDNlLDB4NDAsMHgwYiwweDk4LDB4MDMsMHhlNiwweDQwLDB4ZTksMHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhkMiB9LAorICAxNiwgMHg4ZjQwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjgsMHgxMCwweGExLDB4MDIsMHhkOCwweDIwLDB4YjIsMHgxMCB9LAorICAxNiwgMHg4ZjUwLCAwLCB7MHgwYywweDgwLDB4ODMsMHgyMSwweDQwLDB4YzgsMHg1OCwweGIyLDB4MTAsMHg0YywweDgwLDB4MGIsMHgyMCwweDAwLDB4ZjgsMHg0MiB9LAorICAxNiwgMHg4ZjYwLCAwLCB7MHgzMiwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZTAsMHgwMiwweGQ4LDB4MDAsMHg3MiwweDAwLDB4MWMsMHg4MCwweDAwLDB4MjAsMHgwMCB9LAorICAxNiwgMHg4ZjcwLCAwLCB7MHhmOCwweDA0LDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweDAyLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ZjgwLCAwLCB7MHgyOCwweDA1LDB4MzgsMHgwNCwweGNlLDB4NDEsMHgyMywweDgwLDB4MDgsMHhlMCwweDAyLDB4MzksMHgxMCwweGFlLDB4NDAsMHgyMiB9LAorICAxNiwgMHg4ZjkwLCAwLCB7MHg4MCwweDA4LDB4ZTAsMHgwMiwweDFhLDB4MDAsMHhiYSwweDAwLDB4MmIsMHhhZCwweDAzLDB4ODAsMHgwMiwweGU4LDB4MDAsMHhjYSB9LAorICAxNiwgMHg4ZmEwLCAwLCB7MHgwMCwweDJhLDB4ODAsMHgwYSwweGUwLDB4MDIsMHgxOCwweDAwLDB4YmEsMHgwMCwweDFhLDB4ODAsMHgwYiwweGEwLDB4MDMsMHg0YSB9LAorICAxNiwgMHg4ZmIwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjgsMHgwNSwweDZjLDB4MTIsMHg4OSwweDAwLDB4YTAsMHhlMCB9LAorICAxNiwgMHg4ZmMwLCAwLCB7MHgwOCwweDM4LDB4MDIsMHgwZCwweDg4LDB4ODMsMHgwMCwweDA0LDB4ZTAsMHgwOCwweDM4LDB4MzIsMHgwZSwweDI1LDB4MzEsMHgwMSB9LAorICAxNiwgMHg4ZmQwLCAwLCB7MHgyNCwweGUwLDB4OGIsMHgzOCwweDAyLDB4ZTQsMHgwMSwweDgzLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4OGMsMHgwMCB9LAorICAxNiwgMHg4ZmUwLCAwLCB7MHhiMywweDAwLDB4MmUsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg4ZmYwLCAwLCB7MHhhMCwweDAxLDB4MTQsMHgyMCwweDg2LDB4MjAsMHgyOSwweGIwLDB4MDgsMHhmMCwweDgyLDB4M2UsMHgwNCwweGE3LDB4MDAsMHgyMSB9LAorICAxNiwgMHg5MDAwLCAwLCB7MHg3MCwweDg4LDB4NzAsMHg5MiwweDFjLDB4MjAsMHhiZCwweDAwLDB4NjksMHhjMCwweDBiLDB4NzYsMHgwMiwweGQ0LDB4ODAsMHg4ZiB9LAorICAxNiwgMHg5MDEwLCAwLCB7MHgyMSwweDI5LDB4ZTAsMHgwYSwweDYwLDB4ODYsMHg5OCwweDAxLDB4YjcsMHgwMCwweDJkLDB4YzgsMHgwYiwweDNiLDB4MDIsMHg2MCB9LAorICAxNiwgMHg5MDIwLCAwLCB7MHgwNCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDNlLDB4MDAsMHhjNywweGEwLDB4YjAsMHhlMCB9LAorICAxNiwgMHg5MDMwLCAwLCB7MHgyYywweDc4LDB4MGIsMHgxYSwweDAwLDB4YzMsMHg4MCwweDM3LDB4ZTAsMHgyOCwweDc4LDB4MDMsMHgxYSwweDA4LDB4ZjUsMHg5MCB9LAorICAxNiwgMHg5MDQwLCAwLCB7MHgzNSwweGUwLDB4MGYsMHg3YywweDEyLDB4ZDYsMHg4MiwweGM3LDB4OTAsMHgyMSwweGU0LDB4MDgsMHg3OCwweDAzLDB4OWUsMHgwMCB9LAorICAxNiwgMHg5MDUwLCAwLCB7MHhmNSwweDgwLDB4M2QsMHhmMSwweDBmLDB4NzgsMHgwMywweDIyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MDYwLCAwLCB7MHgwOCwweDE5LDB4YTQsMHgwMCwweGVlLDB4ODAsMHgzNiwweGMxLDB4NGYsMHhkMCwweDAzLDB4YzgsMHgwMCwweGZiLDB4MDAsMHgzZSB9LAorICAxNiwgMHg5MDcwLCAwLCB7MHg1MSwweDBmLDB4YjAsMHgwMywweGU0LDB4MDgsMHhmMSwweDYwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGM1LDB4MDAsMHhlYiB9LAorICAxNiwgMHg5MDgwLCAwLCB7MHgxMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDksMHg2YywweDAwLDB4ZmIsMHgwMCwweDNhLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhjMiB9LAorICAxNiwgMHg5MDkwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweGZlLDB4MDAsMHhmZCwweDg4LDB4MzMsMHg2MCB9LAorICAxNiwgMHg5MGEwLCAwLCB7MHgwZiwweGY5LDB4MDMsMHhjZSwweDQwLDB4ZDcsMHg4NCwweDM3LDB4NzAsMHgwYywweGQ4LDB4MjMsMHgzNiwweDAwLDB4YzUsMHg4OCB9LAorICAxNiwgMHg5MGIwLCAwLCB7MHgzMywweGUwLDB4NGYsMHhmOCwweDEzLDB4ZjcsMHgyOCwweGRmLDB4ODAsMHgzNywweGUyLDB4MGMsMHg1OCwweDAzLDB4M2UsMHgwMCB9LAorICAxNiwgMHg5MGMwLCAwLCB7MHhmZiwweDkwLDB4M2YsMHhlMCwweDBjLDB4ZjgsMHgwMywweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MGQwLCAwLCB7MHhhOSwweDExLDB4OWMsMHgwOCwweGY2LDB4MDAsMHhhMSwweDAwLDB4MGIsMHg2MywweDAyLDB4ZDYsMHgzMCwweDg1LDB4NDEsMHgzMSB9LAorICAxNiwgMHg5MGUwLCAwLCB7MHhjOCwweDA4LDB4NTAsMHgyMywweDFjLDB4MDAsMHhkNSwweDIwLDB4YjEsMHg4MCwweDBmLDB4NzAsMHgwMywweGI0LDB4MDAsMHhjNyB9LAorICAxNiwgMHg5MGYwLCAwLCB7MHgwMCwweDIxLDB4YzAsMHgwZiwweDQwLDB4YTMsMHg1OCwweDQwLDB4YjcsMHgwMCwweDNmLDB4YzQsMHgwYSwweGYwLDB4MDIsMHgyYSB9LAorICAxNiwgMHg5MTAwLCAwLCB7MHgwNiwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4NDAsMHhiNywweDEwLDB4MjEsMHhkMiB9LAorICAxNiwgMHg5MTEwLCAwLCB7MHgwYiwweDcwLDB4MDIsMHhkYywweDQyLDB4ODYsMHgwMCwweDI1LDB4NjEsMHgwOCwweDUxLDB4MDIsMHg1MCwweDAwLDB4OTUsMHgwMCB9LAorICAxNiwgMHg5MTIwLCAwLCB7MHgyNSwweGMwLDB4MDksMHg3MCwweDgyLDB4ZDQsMHgwMCwweDg3LDB4MDAsMHgyNCwweGMwLDB4MDgsMHg1MCwweDAyLDB4NWMsMHgwMCB9LAorICAxNiwgMHg5MTMwLCAwLCB7MHg5NSwweDA0LDB4MmQsMHhjMCwweDA4LDB4NzAsMHgwMiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MTQwLCAwLCB7MHgyMCwweDE0LDB4Y2MsMHgwOCwweGIyLDB4ZDAsMHgyMCwweGUwLDB4NGIsMHgwOCwweDAyLDB4YzQsMHgwMCwweDgwLDB4ODAsMHgyMCB9LAorICAxNiwgMHg5MTUwLCAwLCB7MHhmMCwweDA4LDB4MWEsMHgwMiwweDg1LDB4NDgsMHg4MSwweDEwLDB4MjAsMHg0MCwweDBhLDB4MzAsMHgwMiwweGM2LDB4MTAsMHg5MyB9LAorICAxNiwgMHg5MTYwLCAwLCB7MHgwMCwweDIwLDB4YzAsMHgwYSwweDFjLDB4MDIsMHgwZCwweDQwLDB4YjMsMHgwMCwweDY4LDB4YzQsMHgwYSwweGIwLDB4MDIsMHgwOSB9LAorICAxNiwgMHg5MTcwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGFjLDB4MDEsMHhmZSwweDAwLDB4MzIsMHhmMCB9LAorICAxNiwgMHg5MTgwLCAwLCB7MHgwZiwweDg4LDB4MDMsMHhlNiwweDAwLDB4YzgsMHhjOCwweDM2LDB4ZjYsMHgyOCwweGE2LDB4MGEsMHg2ZCwweDAwLDB4OWQsMHgwMCB9LAorICAxNiwgMHg5MTkwLCAwLCB7MHgzMiwweDAwLDB4MGIsMHhiMCwweDAzLDB4ZjYsMHgwMywweGM3LDB4MDAsMHgzNywweGMwLDB4MDgsMHg5YywweDBhLDB4NmUsMHgwMCB9LAorICAxNiwgMHg5MWEwLCAwLCB7MHhiYiwweDAwLDB4MmYsMHhjMCwweDBjLDB4ZjAsMHgwMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MWIwLCAwLCB7MHg4MCwweDAwLDB4ZTQsMHgwMSwweGViLDB4NDAsMHgzZSwweDgwLDB4NGYsMHhjMSwweDAzLDB4ZTQsMHgwMCwweGI4LDB4MDgsMHgzYSB9LAorICAxNiwgMHg5MWMwLCAwLCB7MHg0MCwweDhmLDB4YTQsMHgxMywweDZjLDB4MjAsMHhmOSwweDAwLDB4M2UsMHg3MCwweDBmLDB4YjAsMHgwMywweGE0LDB4NDAsMHhlYiB9LAorICAxNiwgMHg5MWQwLCAwLCB7MHgwMCwweDNlLDB4YzAsMHgwZiwweDkyLDB4MjMsMHhlOCwweDAwLDB4ZjksMHg4MCwweDNlLDB4YzAsMHgwZiwweGIwLDB4NjMsMHhlMCB9LAorICAxNiwgMHg5MWUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGZjLDB4MDgsMHhjZSwweDA4LDB4MzMsMHhjMCB9LAorICAxNiwgMHg5MWYwLCAwLCB7MHgwZiwweGRhLDB4MDMsMHgzMCwweDAwLDB4ZTQsMHgwNCwweDM1LDB4YzAsMHgwZCwweGEwLDB4MDMsMHgyOCwweDAwLDB4YzUsMHgwMCB9LAorICAxNiwgMHg5MjAwLCAwLCB7MHgzMywweDAwLDB4MGIsMHhmYSwweDAzLDB4ZjQsMHgwMywweGNiLDB4MDAsMHgzMSwweGMwLDB4MGMsMHhkNCwweDAzLDB4MTQsMHgyMCB9LAorICAxNiwgMHg5MjEwLCAwLCB7MHhjZCwweDgwLDB4MjMsMHhjMSwweDBjLDB4ZjAsMHgwMiwweDA4LDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MjIwLCAwLCB7MHg4MSwweDA0LDB4NDQsMHgxMCwweGNiLDB4ZDAsMHgyMiwweGMwLDB4MGIsMHg5NCwweDAyLDB4MjIsMHg4NCwweGI4LDB4YzYsMHgwMiB9LAorICAxNiwgMHg5MjMwLCAwLCB7MHg0MCwweDA4LDB4MjgsMHgwMiwweGE1LDB4ODAsMHg4OSwweDAwLDB4MjIsMHg2MCwweDBiLDB4YjgsMHgwMiwweDY0LDB4MDAsMHg4YiB9LAorICAxNiwgMHg5MjQwLCAwLCB7MHgwMCwweDJhLDB4YzAsMHhjOCwweDAwLDB4MDMsMHg2NiwweDAwLDB4ODEsMHgwMCwweDAwLDB4YzAsMHgwZCwweGIwLDB4MGEsMHhhOCB9LAorICAxNiwgMHg5MjUwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHgxMywweDAwLDB4MjIsMHg0MCB9LAorICAxNiwgMHg5MjYwLCAwLCB7MHg4YiwweDI0LDB4MDIsMHgyYSwweDAwLDB4YmIsMHg4MiwweDIyLDB4NDAsMHgwMCwweGFjLDB4MDIsMHg4NCwweDAwLDB4ODksMHgwMCB9LAorICAxNiwgMHg5MjcwLCAwLCB7MHgyMiwweDIyLDB4MGIsMHhiMCwweDAyLDB4YzQsMHgwMCwweDliLDB4MDAsMHgyYSwweGMwLDB4MDgsMHhiMCwweDAyLDB4MmUsMHgwMCB9LAorICAxNiwgMHg5MjgwLCAwLCB7MHg4YiwweDEwLDB4MmEsMHhjMCwweDA4LDB4YjAsMHgwMiwweGEwLDB4MTAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MjkwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgxMCwweDgzLDB4MDAsMHgyMCwweDAxLDB4MGIsMHgyMCwweDAyLDB4MDAsMHg4MCwweGIxLDB4MDAsMHgyMCB9LAorICAxNiwgMHg5MmEwLCAwLCB7MHhjMSwweDA4LDB4MjAsMHgwMiwweDg4LDB4MDEsMHg4MSwweDAwLDB4YTAsMHgwMCwweDBiLDB4MzAsMHgwMiwweDQ0LDB4MDEsMHg5YiB9LAorICAxNiwgMHg5MmIwLCAwLCB7MHgwMCwweDI4LDB4YzAsMHgwOCwweGIwLDB4MDIsMHg0OCwweDA2LDB4ODksMHgwMCwweDJhLDB4YzAsMHgwOSwweDMwLDB4MDIsMHg4MiB9LAorICAxNiwgMHg5MmMwLCAwLCB7MHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4ZCwweDZjLDB4MDAsMHhjMywweDAwLDB4YjIsMHhjMCB9LAorICAxNiwgMHg5MmQwLCAwLCB7MHgwZiwweGIwLDB4MDMsMHgyOCwweDIwLDB4ZmEsMHgwMCwweGIxLDB4NDAsMHgwZCwweGEwLDB4MDcsMHhhMCwweDAwLDB4Y2QsMHgwMCB9LAorICAxNiwgMHg5MmUwLCAwLCB7MHgyMiwweDAwLDB4MGYsMHhiMCwweDAzLDB4ZjQsMHgwMCwweDlmLDB4MDAsMHgzYiwweGMwLDB4MmMsMHhiMCwweDBiLDB4MjQsMHgwMCB9LAorICAxNiwgMHg5MmYwLCAwLCB7MHhjOSwweDAwLDB4YmEsMHhjMCwweDBjLDB4YjAsMHgwMywweDgwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MzAwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgwNiwweGZmLDB4MDIsMHhhZiwweGMwLDB4MGYsMHhjMCwweDAzLDB4ZjAsMHgxMCwweGZjLDB4MDAsMHgzZiB9LAorICAxNiwgMHg5MzEwLCAwLCB7MHhjMCwweDlmLDB4ZTAsMHgxMywweGYwLDB4MDAsMHhmZCwweDA0LDB4M2YsMHg0MCwweDRmLDB4ZjAsMHgwMywweDc0LDB4MDAsMHhlZiB9LAorICAxNiwgMHg5MzIwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHg4ZiwweGUwLDB4MDIsMHhiNCwweDAxLDB4ZmQsMHgwNCwweDM3LDB4YzAsMHgwZiwweGYwLDB4NDMsMHg2OCB9LAorICAxNiwgMHg5MzMwLCAwLCB7MHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZjLDB4MDAsMHhjNywweDIwLDB4YjMsMHhjOCB9LAorICAxNiwgMHg5MzQwLCAwLCB7MHgxYywweGYxLDB4MDMsMHg3YywweDIwLDB4Y2YsMHgwYSwweDNmLDB4ZDAsMHgwZCwweGYwLDB4MDMsMHg3YywweDgwLDB4OGYsMHgzMiB9LAorICAxNiwgMHg5MzUwLCAwLCB7MHgzMywweGM0LDB4MGYsMHhmMSwweDgzLDB4M2MsMHhlMCwweGNmLDB4MTAsMHgzMywweGM0LDB4MGQsMHhmMiwweDgzLDB4M2MsMHhlMiB9LAorICAxNiwgMHg5MzYwLCAwLCB7MHhjNywweDgwLDB4MTcsMHhjYywweDRjLDB4ZjMsMHg4MywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5MzcwLCAwLCB7MHg4MCwweDEwLDB4ZTMsMHg0MCwweDg4LDB4NjgsMHgyMiwweDMwLDB4MDgsMHgwNiwweDAyLDB4MDEsMHhhMSwweDg4LDB4YzQsMHgwZSB9LAorICAxNiwgMHg5MzgwLCAwLCB7MHgxNCwweDA4LDB4ODcsMHg4MCwweDAxLDB4YzAsMHgyOCwweDUwLDB4MDIsMHgwNCwweDhiLDB4ODYsMHgwMiwweGExLDB4OTgsMHg4OCB9LAorICAxNiwgMHg5MzkwLCAwLCB7MHg0MSwweDJhLDB4MDQsMHgwYSwweDg0LDB4ODIsMHhiZCwweDgwLDB4OGIsMHgwOCwweDJiLDB4YzQsMHg4OCwweGY0LDB4MDMsMHg2MCB9LAorICAxNiwgMHg5M2EwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4MDgsMHg4MiwweDQwLDB4MjAsMHgxMCB9LAorICAxNiwgMHg5M2IwLCAwLCB7MHgwOCwweDIxLDB4MTIsMHg0NCwweDA0LDB4ODIsMHgwNCwweDJjLDB4MDgsMHg4OSwweDkwLDB4MDIsMHg0NCwweDIxLDB4OGIsMHgwMCB9LAorICAxNiwgMHg5M2MwLCAwLCB7MHgyNCwweDg4LDB4OGIsMHhhMCwweDAwLDB4NDAsMHg4NCwweDg5LDB4MzAsMHgyMiwweDQ4LDB4ODgsMHhiMCwweDAyLDB4Y2MsMHgwOCB9LAorICAxNiwgMHg5M2QwLCAwLCB7MHg4OCwweDIwLDB4YTQsMHhjOCwweDAwLDB4MzIsMHgwYSwweDIyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5M2UwLCAwLCB7MHhjMCwweDE1LDB4YTAsMHgwMCwweDg5LDB4MDAsMHgyMiwweGMxLDB4ODgsMHg5MCwweDYyLDB4MjgsMHgwOCwweDg5LDB4MDgsMHgyZSB9LAorICAxNiwgMHg5M2YwLCAwLCB7MHhjMCwweDA4LDB4YTAsMHgwMiwweDI4LDB4MDgsMHhhOCwweDAwLDB4MjYsMHg0MiwweDBiLDB4OTAsMHgwMiwweGNjLDB4NTAsMHg4YSB9LAorICAxNiwgMHg5NDAwLCAwLCB7MHgyMiwweDJhLDB4ODYsMHgwYSwweDgwLDB4MDIsMHhlYywweDAwLDB4ODgsMHg4NCwweDJhLDB4YzEsMHgwOCwweGIwLDB4MjYsMHgzMCB9LAorICAxNiwgMHg5NDEwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGYwLDB4MDIsMHhjZiwweDAwLDB4MzMsMHhjMCB9LAorICAxNiwgMHg5NDIwLCAwLCB7MHg0OCwweGY4LDB4NDMsMHg3OSwweDAwLDB4OGQsMHhjMCwweDNmLDB4MzAsMHg4ZCwweDYwLDB4ODMsMHg3OCwweDYwLDB4YzQsMHg1OCB9LAorICAxNiwgMHg5NDMwLCAwLCB7MHgzNywweDIwLDB4MGYsMHg1OCwweDEzLDB4N2IsMHgwMiwweGNjLDB4YzQsMHgzMSwweDIwLDB4MGMsMHg0NCwweDAzLDB4ZWMsMHgwMiB9LAorICAxNiwgMHg5NDQwLCAwLCB7MHg4YiwweDgwLDB4MzYsMHhjMCwweDI0LDB4YjAsMHgxMiwweDEwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NDUwLCAwLCB7MHhlMCwweDAxLDB4OWMsMHgwMCwweGY0LDB4MTAsMHgzZCwweDAwLDB4NmYsMHhjOSwweDEzLDB4ZDQsMHgxMiwweGZlLDB4OTAsMHgzZiB9LAorICAxNiwgMHg5NDYwLCAwLCB7MHhmMCwweDBmLDB4ZGEsMHgyMywweGY0LDB4MTQsMHhmZiwweDAyLDB4M2IsMHhmMCwweDBmLDB4ZWEsMHgyMywweGI2LDB4MDAsMHhmZiB9LAorICAxNiwgMHg5NDcwLCAwLCB7MHg4MiwweDNmLDB4ZTEsMHg4ZiwweGY0LDB4MDMsMHhiYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHhhZiwweDcwLDB4MDMsMHhmOCB9LAorICAxNiwgMHg5NDgwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGEwLDB4MDAsMHhjYSwweDAwLDB4MzIsMHgwOCB9LAorICAxNiwgMHg5NDkwLCAwLCB7MHgxYywweGEwLDB4MDMsMHhhNSwweDIwLDB4Y2IsMHg0MCwweGJhLDB4MTAsMHgxZiwweGIwLDB4MDMsMHhhYywweDAwLDB4ZWIsMHgwMCB9LAorICAxNiwgMHg5NGEwLCAwLCB7MHg3MiwweDkwLDB4MGMsMHhiNCwweDAzLDB4MjksMHgwNCwweGM5LDB4NTIsMHgzMiwweDUwLDB4MGMsMHhiNCwweDAzLDB4MGMsMHgwMCB9LAorICAxNiwgMHg5NGIwLCAwLCB7MHhmOCwweDQwLDB4MzIsMHhjMSwweDBlLDB4YjAsMHgwYiwweDUwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NGMwLCAwLCB7MHhjOCwweDA1LDB4MmQsMHg4MCwweDg5LDB4ODAsMHgyMiwweGQ5LDB4MDgsMHg5MCwweDIyLDB4MmEsMHgwMCwweDg4LDB4NTQsMHgyMiB9LAorICAxNiwgMHg5NGQwLCAwLCB7MHhjMCwweDhiLDB4ODAsMHgyMiwweDIwLDB4MTksMHhjOCwweDAwLDB4MjIsMHg0MCwweDhkLDB4ODAsMHgxYSwweDI0LDB4MTAsMHhkMiB9LAorICAxNiwgMHg5NGUwLCAwLCB7MHg0NCwweDIyLDB4ODEsMHgwZCwweDgwLDB4MDMsMHg3YywweDAwLDB4YjAsMHgwMCwweDM3LDB4YzAsMHg4OCwweGYwLDB4MDIsMHgzMiB9LAorICAxNiwgMHg5NGYwLCAwLCB7MHgxMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRlLDB4MDAsMHg4MSwweDAwLDB4YTAsMHhmMCB9LAorICAxNiwgMHg5NTAwLCAwLCB7MHgwOCwweDkwLDB4MDIsMHg4OSwweDAyLDB4ODAsMHgwMCwweDIyLDB4YzAsMHgwYiwweDAwLDB4MjIsMHhhMCwweDAwLDB4YjAsMHgwMCB9LAorICAxNiwgMHg5NTEwLCAwLCB7MHgyMCwweDQwLDB4MDgsMHgwMCwweDAyLDB4MDQsMHgwMCwweDgyLDB4NjAsMHgyMCwweDgwLDB4MDgsMHgwMCwweDAyLDB4MGMsMHgwOCB9LAorICAxNiwgMHg5NTIwLCAwLCB7MHhiMiwweDAwLDB4MjIsMHhjMCwweDA4LDB4MzAsMHgwMiwweDM4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NTMwLCAwLCB7MHgyMCwweDAxLDB4MDMsMHgxMCwweDhlLDB4OTAsMHgyMywweDI0LDB4MDgsMHg2YiwweDAyLDB4MTYsMHg2MCwweDhmLDB4ODAsMHgyMSB9LAorICAxNiwgMHg5NTQwLCAwLCB7MHgyOCwweDBiLDB4ZjksMHgwNiwweDFlLDB4NDAsMHg4ZiwweDgwLDB4MjMsMHhhNCwweDQ5LDB4NzksMHgwMiwweDNhLDB4NDAsMHg5ZCB9LAorICAxNiwgMHg5NTUwLCAwLCB7MHg5MCwweDIzLDB4NjQsMHgwOSwweGY4LDB4MDIsMHg1ZSwweDQwLDB4YmUsMHg5MCwweDI0LDB4ZTQsMHgyOCwweDc5LDB4MDIsMHgwOCB9LAorICAxNiwgMHg5NTYwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4NDIsMHhjMCwweDA5LDB4MzAsMHgwMCB9LAorICAxNiwgMHg5NTcwLCAwLCB7MHgyOCwweDAyLDB4MDMsMHg4NCwweDAwLDB4OGEsMHgyMCwweDMwLDB4YzQsMHg4YiwweDExLDB4MDMsMHg4NCwweDUwLDB4YjMsMHgwMCB9LAorICAxNiwgMHg5NTgwLCAwLCB7MHgyMCwweGMwLDB4MGMsMHhhNCwweDIyLDB4MDQsMHgwMCwweGNiLDB4NDAsMHgzMCwweGM1LDB4MGMsMHgzMCwweDAzLDB4MGUsMHg0MCB9LAorICAxNiwgMHg5NTkwLCAwLCB7MHhmMywweDEwLDB4MzAsMHhjNCwweDBjLDB4YjAsMHgwMywweDEyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NWEwLCAwLCB7MHg0MCwweDFkLDB4YjAsMHgwNCwweGZiLDB4MDQsMHgzZCwweGMwLDB4MGYsMHhmMiwweDQzLDB4ZjgsMHgwNCwweGZkLDB4MDEsMHgzZiB9LAorICAxNiwgMHg5NWIwLCAwLCB7MHgwYywweDBmLDB4NjEsMHgwMywweGY4LDB4NDgsMHhmNCwweDAwLDB4M2QsMHgwMSwweDBmLDB4ZDAsMHgwMywweGM4LDB4MDAsMHhmYyB9LAorICAxNiwgMHg5NWMwLCAwLCB7MHgwNCwweGJkLDB4MDQsMHgwYiwweDQ4LDB4MDMsMHhmYywweDE4LDB4ZmYsMHgxNCwweDNmLDB4ZDUsMHgwZCwweGYwLDB4MDMsMHg5MCB9LAorICAxNiwgMHg5NWQwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGUwLDB4MDAsMHhmOSwweDAxLDB4MzIsMHhjMCB9LAorICAxNiwgMHg5NWUwLCAwLCB7MHg4ZSwweDkwLDB4MDMsMHgyOCwweDAyLDB4ZDEsMHgwMCwweDMyLDB4YzAsMHgwZCwweGE4LDB4MGIsMHgwOCwweDAwLDB4ZTgsMHgwMCB9LAorICAxNiwgMHg5NWYwLCAwLCB7MHgyZSwweDQwLDB4MGMsMHg5OCwweDBiLDB4MmUsMHgwMiwweGNhLDB4MDAsMHhiMiwweGEwLDB4NmMsMHg4MCwweDIzLDB4MmQsMHg4MCB9LAorICAxNiwgMHg5NjAwLCAwLCB7MHhjYSwweDgwLDB4MzIsMHhkMCwweDBjLDB4YmEsMHgwMywweDJhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NjEwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgwMCwweGI2LDB4MDAsMHhhMywweDAwLDB4MDgsMHg2MCwweDAyLDB4MDQsMHgwMCwweDg2LDB4MDQsMHgyOSB9LAorICAxNiwgMHg5NjIwLCAwLCB7MHgwMCwweDA4LDB4NTAsMHg0MiwweDE0LDB4MDQsMHhhNywweDAwLDB4MGQsMHg4MCwweDRhLDB4NjAsMHgwMiwweDAwLDB4MDAsMHg4MSB9LAorICAxNiwgMHg5NjMwLCAwLCB7MHgwMCwweDIxLDB4NDAsMHgwOCwweDcwLDB4MDIsMHg5ZCwweDQyLDB4ODYsMHgwMSwweDIwLDB4YzAsMHgwOCwweDMyLDB4ODIsMHgxMiB9LAorICAxNiwgMHg5NjQwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDkyLDB4MDAsMHhiYywweDgwLDB4NjMsMHgyMCB9LAorICAxNiwgMHg5NjUwLCAwLCB7MHg4MiwweDA4LDB4MDIsMHg1MiwweDAwLDB4ODQsMHhjMiwweDIzLDB4MjAsMHg4OCwweDBjLDB4MDIsMHgzMywweDAwLDB4ODQsMHg4MCB9LAorICAxNiwgMHg5NjYwLCAwLCB7MHgyZiwweDIxLDB4ODksMHg0YywweDAyLDB4MTIsMHgxNCwweDk0LDB4YzUsMHg2NCwweDIxLDB4MDgsMHg0YywweDAyLDB4MGUsMHg4MCB9LAorICAxNiwgMHg5NjcwLCAwLCB7MHg5NywweDgyLDB4YTEsMHhlYywweDA4LDB4NzksMHgwMiwweDMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NjgwLCAwLCB7MHg0OCwweDE0LDB4Y2QsMHg0NCwweGIzLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4NGQsMHg4MCwweDAzLDB4ODgsMHgyOCB9LAorICAxNiwgMHg5NjkwLCAwLCB7MHhjMCwweDA4LDB4M2MsMHgwNiwweDBmLDB4MDAsMHhhMywweDQzLDB4MmMsMHhjMiwweDFiLDB4MzgsMHgwMiwweDBmLDB4MDAsMHg5YiB9LAorICAxNiwgMHg5NmEwLCAwLCB7MHg4OCwweDY0LDB4ZDAsMHgwOCwweGI4LDB4MDIsMHg4YywweDEwLDB4OTMsMHgwMCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MGEsMHgxMiB9LAorICAxNiwgMHg5NmIwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGFhLDB4MDAsMHhmYSwweDA1LDB4MzIsMHg4MCB9LAorICAxNiwgMHg5NmMwLCAwLCB7MHg4ZSwweGEwLDB4MGIsMHg2OSwweDAwLDB4Y2EsMHg0MCwweDMyLDB4YTAsMHgzYywweGE4LDB4MDMsMHgyYSwweDAwLDB4ZWEsMHgyNiB9LAorICAxNiwgMHg5NmQwLCAwLCB7MHgzZSwweGIwLDB4MGQsMHhhMSwweDYzLDB4MjgsMHgyMCwweGNhLDB4NDAsMHgzNiwweGEwLDB4MGMsMHhlMCwweDEzLDB4MjgsMHgwOSB9LAorICAxNiwgMHg5NmUwLCAwLCB7MHhkZSwweDAwLDB4MzIsMHg4MCwweDJjLDB4YTAsMHgwMywweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NmYwLCAwLCB7MHg0OCwweDAwLDB4ZjAsMHgyMCwweGY0LDB4MDAsMHgzZiwweDAwLDB4MGYsMHg0MCwweDIzLDB4YjAsMHgwMCwweGVjLDB4MDAsMHgzZiB9LAorICAxNiwgMHg5NzAwLCAwLCB7MHgwNiwweDFlLDB4YzIsMHgxMywweGYwLDB4ODgsMHhmYywweDIwLDB4M2YsMHgwNCwweDhlLDB4YzAsMHgwMywweGYwLDB4ODAsMHhlYyB9LAorICAxNiwgMHg5NzEwLCAwLCB7MHg0MCwweDNiLDB4MGMsMHgwZiwweGMwLDB4YTMsMHhlMCwweDAwLDB4ZTgsMHgwMCwweDNlLDB4MDAsMHg0ZiwweDgwLDB4MDMsMHhkMiB9LAorICAxNiwgMHg5NzIwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDAsMHhmOSwweDAwLDB4MzIsMHg0MCB9LAorICAxNiwgMHg5NzMwLCAwLCB7MHgwYywweDkwLDB4MDMsMHgyNCwweDAwLDB4YzksMHg4MCwweDMyLDB4NDAsMHgwZiwweDkwLDB4NTMsMHhlNCwweDEwLDB4YzksMHgwMCB9LAorICAxNiwgMHg5NzQwLCAwLCB7MHgzMiwweDQwLDB4MGQsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzNiwweDQwLDB4OGYsMHg5MCwweDAzLDB4MjQsMHgxMCB9LAorICAxNiwgMHg5NzUwLCAwLCB7MHhjOSwweDAxLDB4M2MsMHg0MCwweDBjLDB4OTAsMHgwMywweGMyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5NzYwLCAwLCB7MHg4MCwweDA0LDB4NDcsMHg0NCwweDg5LDB4MDAsMHgyMCwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjUsMHgwYSwweDgxLDB4MTAsMHgyMiB9LAorICAxNiwgMHg5NzcwLCAwLCB7MHg0MCwweDQ4LDB4OTAsMHgwMywweGM0LDB4MDAsMHg4OSwweDAwLDB4NzYsMHg0MCwweDI4LDB4OTAsMHgwMiwweGU0LDB4MTAsMHhiOSB9LAorICAxNiwgMHg5NzgwLCAwLCB7MHg0MCwweGIyLDB4NDAsMHgwYiwweDkwLDB4MDMsMHg2NCwweDAwLDB4ODksMHgwMCwweDJlLDB4NDEsMHgwOCwweDkwLDB4NDIsMHhlMCB9LAorICAxNiwgMHg5NzkwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDIsMHhiZCwweDAwLDB4MjMsMHg0OCB9LAorICAxNiwgMHg5N2EwLCAwLCB7MHgwOCwweGQwLDB4MDYsMHgxZCwweDA0LDB4OGQsMHgwMCwweDI5LDB4YzAsMHg0YSwweGQwLDB4MjIsMHhmNCwweDAwLDB4ODUsMHgwMCB9LAorICAxNiwgMHg5N2IwLCAwLCB7MHg2MSwweDQwLDB4MTgsMHhkMCwweDEyLDB4ZmMsMHgwMCwweGJkLDB4NDAsMHhhMywweDQwLDB4NGIsMHhmMCwweDAyLDB4MDQsMHgwMSB9LAorICAxNiwgMHg5N2MwLCAwLCB7MHg4YiwweDAwLDB4MmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweGM2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5N2QwLCAwLCB7MHgwOCwweDA0LDB4MzYsMHg4MCwweDg1LDB4MjAsMHhhMywweDQ4LDB4MDgsMHg1MiwweDBhLDB4MTQsMHg4MSwweDg1LDB4MjAsMHgyOSB9LAorICAxNiwgMHg5N2UwLCAwLCB7MHg0OCwweDA4LDB4NTIsMHgwMiwweGI0LDB4ODAsMHg4NSwweDIwLDB4MjUsMHg0OCwweDg4LDB4NTIsMHgwMiwweGQ0LDB4ODAsMHhiNSB9LAorICAxNiwgMHg5N2YwLCAwLCB7MHgyMCwweDIxLDB4NDgsMHgwYiwweDUyLDB4MDIsMHg0NCwweGEyLDB4ODEsMHgwMCwweDJjLDB4NGEsMHgwOCwweDEyLDB4ODIsMHhjMiB9LAorICAxNiwgMHg5ODAwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHhmOCwweDUxLDB4MjIsMHgwMCB9LAorICAxNiwgMHg5ODEwLCAwLCB7MHgyYywweDg1LDB4MDIsMHgyMSwweDQ4LDB4YzgsMHgwMCwweGJhLDB4MTQsMHgwZiwweDg1LDB4MTIsMHhlMSwweDQyLDB4YzgsMHg1MCB9LAorICAxNiwgMHg5ODIwLCAwLCB7MHgyMiwweDAwLDB4MGMsMHgwMCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4NTAsMHgzMiwweDAwLDB4MDcsMHg0NSwweDAzLDB4MjAsMHg4MCB9LAorICAxNiwgMHg5ODMwLCAwLCB7MHhjMCwweDAxLDB4M2UsMHgwOCwweDJjLDB4ODIsMHgwMywweGVlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ODQwLCAwLCB7MHg5OCwweDBkLDB4ZTQsMHg0MCwweGYxLDB4MTAsMHgzZSwweDQ0LDB4MDcsMHg5MSwweDQzLDB4ZTQsMHg1OCwweGY5LDB4MTEsMHgzNCB9LAorICAxNiwgMHg5ODUwLCAwLCB7MHg0NCwweDRmLDB4OTEsMHgwMiwweGU0LDB4NTAsMHhmOSwweDEwLDB4M2MsMHg0ZiwweDBmLDB4OTMsMHg4MywweGU0LDB4ZjAsMHhmOSB9LAorICAxNiwgMHg5ODYwLCAwLCB7MHgxMSwweDNhLDB4NGYsMHgwZiwweDkxLDB4MDMsMHhlNCwweGEwLDB4ZmQsMHgyOCwweDNlLDB4NGEsMHgwZiwweDkyLDB4ODMsMHhlNiB9LAorICAxNiwgMHg5ODcwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGY2LDB4YTAsMHhjZCwweGEwLDB4YjMsMHg2OCB9LAorICAxNiwgMHg5ODgwLCAwLCB7MHg4YywweDlhLDB4MDMsMHgzNiwweDgwLDB4YzUsMHhhMCwweDIyLDB4NjAsMHgwYywweDlhLDB4MjMsMHgyNiwweDA0LDB4ZjksMHhhMCB9LAorICAxNiwgMHg5ODkwLCAwLCB7MHgzMiwweDY2LDB4MGMsMHg5YSwweDgzLDB4MDYsMHgyMCwweGM1LDB4YTAsMHgyMiwweDYwLDB4MGMsMHg5YiwweDAzLDB4MjYsMHg0OCB9LAorICAxNiwgMHg5OGEwLCAwLCB7MHhjOSwweDAwLDB4M2UsMHg3OCwweDBjLDB4OWEsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5OGIwLCAwLCB7MHgzOCwweDAwLDB4ZTEsMHgwMCwweDg4LDB4NDQsMHgyMiwweDk1LDB4MDgsMHg4NSwweDEyLDB4YTEsMHg0MiwweDg4LDB4NDAsMHgwMiB9LAorICAxNiwgMHg5OGMwLCAwLCB7MHg5MCwweDA4LDB4ODQsMHgwMiwweDIzLDB4YTAsMHhiYSwweDQwLDB4MjIsMHhhMCwweDA4LDB4OGUsMHg5MiwweGEzLDB4YTAsMHhhOCB9LAorICAxNiwgMHg5OGQwLCAwLCB7MHg0MCwweDJhLDB4MTAsMHgwOCwweGFlLDB4MDIsMHgyMywweDQwLDB4ODgsMHgwMCwweDJlLDB4MzgsMHgwOCwweDg0LDB4MTIsMHgwZSB9LAorICAxNiwgMHg5OGUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxNSwweGM0LDB4MDAsMHg4YiwweDEyLDB4MjIsMHg0MCB9LAorICAxNiwgMHg5OGYwLCAwLCB7MHgwOCwweDkwLDB4MDIsMHg0NCwweDAwLDB4ODEsMHg0MCwweGEwLDB4NTAsMHgwOCwweDExLDB4MGEsMHgwNSwweDAwLDB4YjEsMHgxMCB9LAorICAxNiwgMHg5OTAwLCAwLCB7MHhhMCwweDQ4LDB4MDgsMHg5MCwweDAyLDB4MDQsMHgwMCwweDgxLDB4NDAsMHgyMCwweDUwLDB4MjgsMHgxMSwweDAyLDB4NDQsMHg4MiB9LAorICAxNiwgMHg5OTEwLCAwLCB7MHg4MSwweDAwLDB4MmMsMHg1MCwweDA4LDB4MTEsMHgwMiwweDAyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5OTIwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMiwweDg5LDB4NDAsMHgyMiwweDQwLDB4MDgsMHg5NCwweDEyLDB4YTUsMHgwMCwweDg5LDB4MjgsMHgyMiB9LAorICAxNiwgMHg5OTMwLCAwLCB7MHg0OSwweDA4LDB4OTQsMHgwMiwweDI0LDB4NDgsMHhiOSwweDE0LDB4MjIsMHg0MCwweDA4LDB4OTQsMHgwMiwweGE0LDB4NDAsMHhhMSB9LAorICAxNiwgMHg5OTQwLCAwLCB7MHg1MCwweDJhLDB4NTAsMHgwOCwweDkxLDB4NDIsMHg2NCwweDAwLDB4ODksMHg0MCwweDJlLDB4NDAsMHgwOCwweDEwLDB4MDIsMHgwNiB9LAorICAxNiwgMHg5OTUwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU0LDB4MDAsMHhjOSwweDAwLDB4MzAsMHg3MCB9LAorICAxNiwgMHg5OTYwLCAwLCB7MHgyYywweDEwLDB4MGIsMHg2NiwweDAwLDB4YzksMHg0MCwweDMyLDB4NTAsMHgwYywweDkwLDB4MDMsMHgyNiwweDIwLDB4ZjksMHhjMCB9LAorICAxNiwgMHg5OTcwLCAwLCB7MHgzMiwweDcwLDB4MGMsMHg5MCwweDAzLDB4MjYsMHgyMCwweGM5LDB4MDAsMHgzMiwweDQwLDB4MGMsMHg5YywweDAzLDB4NjQsMHgwMCB9LAorICAxNiwgMHg5OTgwLCAwLCB7MHhjOSwweDQxLDB4M2UsMHg0MCwweDJjLDB4OTAsMHgwYiwweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5OTkwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwMCwweGY5LDB4MDQsMHgzZSwweDQ4LDB4MGYsMHg5MCwweDAzLDB4ZTQsMHg4OCwweGY5LDB4MDAsMHgzNCB9LAorICAxNiwgMHg5OWEwLCAwLCB7MHg0MSwweDJmLDB4OWMsMHgwMywweGU0LDB4MTAsMHhmOSwweDAwLDB4M2UsMHg0NCwweDJmLDB4OTksMHgwMywweGU0LDB4MTAsMHhmOSB9LAorICAxNiwgMHg5OWIwLCAwLCB7MHgwMCwweDNlLDB4NTAsMHgwZiwweDEwLDB4NGIsMHhhNCwweDEwLDB4ZjksMHgyMCwweDNjLDB4NDAsMHgwZiwweDkwLDB4MDMsMHg0YSB9LAorICAxNiwgMHg5OWMwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDAsMHhjOCwweDAwLDB4M2UsMHgxMCB9LAorICAxNiwgMHg5OWQwLCAwLCB7MHgyYywweDgwLDB4MDMsMHgyMCwweDAyLDB4YzAsMHg0MCwweDMyLDB4MDAsMHgxYywweDA0LDB4MGYsMHgyMSwweDAwLDB4YzAsMHgwNCB9LAorICAxNiwgMHg5OWUwLCAwLCB7MHgzOCwweDAwLDB4MGYsMHg4MCwweDAzLDB4MjEsMHgwOCwweGM4LDB4NjAsMHgzMCwweDEwLDB4MGYsMHg4MCwweDAyLDB4MjAsMHgwMCB9LAorICAxNiwgMHg5OWYwLCAwLCB7MHhmOCwweDAwLDB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMywweGNhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5YTAwLCAwLCB7MHgyOCwweDA1LDB4MWEsMHgyMCwweDgyLDB4MDQsMHgyZiwweDgwLDB4MDgsMHhhMCwweDAyLDB4MzgsMHgwMCwweDhlLDB4ODAsMHgyMiB9LAorICAxNiwgMHg5YTEwLCAwLCB7MHg4MCwweDA4LDB4ZTAsMHgwMiwweDI4LDB4MDAsMHg4YSwweDAwLDB4MjIsMHg4MSwweDBiLDB4MjAsMHgwMiwweDI4LDB4MDAsMHhkZSB9LAorICAxNiwgMHg5YTIwLCAwLCB7MHhlNCwweDM2LDB4ODAsMHgwYiwweGEwLDB4NDIsMHgyOCwweDAwLDB4YmEsMHgwNCwweDIyLDB4ODAsMHgwOCwweGEwLDB4MDIsMHhjYSB9LAorICAxNiwgMHg5YTMwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDAsMHg4MywweDAxLDB4MmMsMHg4MCB9LAorICAxNiwgMHg5YTQwLCAwLCB7MHgwOCwweDMwLDB4MDIsMHgyZSwweDYwLDB4ODIsMHg5MCwweGEwLDB4YzAsMHg0OCwweDMwLDB4MDIsMHgwYywweDAyLDB4ODMsMHgwMCB9LAorICAxNiwgMHg5YTUwLCAwLCB7MHgyOCwweGMwLDB4MGIsMHgzMCwweDBhLDB4MmMsMHgwMCwweDgzLDB4YzIsMHgyMCwweGMwLDB4MGIsMHgzMCwweDJhLDB4MmMsMHgwMCB9LAorICAxNiwgMHg5YTYwLCAwLCB7MHhiMywweDAwLDB4YTAsMHhjMCwweDA4LDB4MzAsMHgwMiwweGNhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5YTcwLCAwLCB7MHhhMCwweDAxLDB4M2MsMHgwMCwweDg3LDB4MDEsMHgyZCwweGMyLDB4MDgsMHhmMywweDEyLDB4M2MsMHgwMCwweDhmLDB4MDEsMHgyMSB9LAorICAxNiwgMHg5YTgwLCAwLCB7MHhjOCwweDY4LDB4NzIsMHgyMiwweDFlLDB4MDQsMHg4NywweDIwLDB4MjEsMHhjNCwweDBiLDB4NzAsMHgwMiwweDNjLDB4ODQsMHg5ZiB9LAorICAxNiwgMHg5YTkwLCAwLCB7MHgwMCwweDI1LDB4YzQsMHg0YiwweDcwLDB4MDIsMHgxYywweDA0LDB4YjcsMHg4MSwweDIxLDB4YzgsMHgwOCwweDcyLDB4MDIsMHhlOCB9LAorICAxNiwgMHg5YWEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwMCwweDFlLDB4MDAsMHhjNywweDgxLDB4M2MsMHhhMCB9LAorICAxNiwgMHg5YWIwLCAwLCB7MHg0YywweDdhLDB4MGIsMHgxYSwweDAwLDB4YzYsMHg4MCwweDMwLDB4ZTAsMHgwOCwweGY4LDB4ODIsMHgwZSwweDQwLDB4Y2YsMHhmMCB9LAorICAxNiwgMHg5YWMwLCAwLCB7MHgzOSwweGU4LDB4MGYsMHgzYSwweDAzLDB4MWUsMHgyMCwweGM3LDB4ODAsMHgzMSwweGUzLDB4MGYsMHgzOCwweDIzLDB4MWYsMHgwOCB9LAorICAxNiwgMHg5YWQwLCAwLCB7MHhmZiwweGMwLDB4MzMsMHhmMiwweDBjLDB4N2UsMHgwMywweGVhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5YWUwLCAwLCB7MHgwOCwweDE1LDB4ODgsMHgwYSwweDdiLDB4MDAsMHgzZSwweGMxLDB4MGIsMHgzNCwweDIzLDB4YzgsMHgxMCwweGZiLDB4MDIsMHgzZSB9LAorICAxNiwgMHg5YWYwLCAwLCB7MHhjYSwweDBmLDB4YjcsMHg0MywweGVjLDB4ODAsMHhmYiwweDAwLDB4MmUsMHhjMiwweDBiLDB4YjQsMHg4MywweGVkLDB4ZDAsMHhmYSB9LAorICAxNiwgMHg5YjAwLCAwLCB7MHgwMCwweDNlLDB4ZDksMHgwZiwweGIzLDB4ODMsMHhlYywweDgwLDB4YmIsMHgyMCwweDNlLDB4ZDgsMHgyZiwweGI0LDB4MDMsMHhjMiB9LAorICAxNiwgMHg5YjEwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGZlLDB4MDAsMHhmNSwweDkxLDB4MzEsMHhhMCB9LAorICAxNiwgMHg5YjIwLCAwLCB7MHgwYywweGZjLDB4MDMsMHhmZSwweDAwLDB4YzQsMHg4MSwweDMxLDB4ZWUsMHg4ZCwweGY4LDB4MGEsMHgzZSwweDMwLDB4Y2YsMHg4NCB9LAorICAxNiwgMHg5YjMwLCAwLCB7MHgzMywweGUwLDB4MmMsMHhmOCwweDgzLDB4ZmUsMHgxMCwweGZlLDB4ODAsMHgzMywweGUwLDB4MGMsMHhmOSwweDE5LDB4M2YsMHg0OCB9LAorICAxNiwgMHg5YjQwLCAwLCB7MHhjZiwweGMwLDB4MzMsMHhlMCwweDA0LDB4ZmMsMHgwMywweGMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5YjUwLCAwLCB7MHhhOCwweDExLDB4OWMsMHgwOCwweGI3LDB4YTEsMHgyMSwweGM4LDB4MDgsMHg3MSwweDAyLDB4ZjAsMHhhMCwweDg1LDB4MjAsMHgyMSB9LAorICAxNiwgMHg5YjYwLCAwLCB7MHhjZSwweDA4LDB4NzAsMHgwMiwweDNjLDB4ODAsMHg4ZiwweDAwLDB4MmIsMHhjNSwweDA4LDB4NzEsMHgwMiwweGRjLDB4MTAsMHhiNCB9LAorICAxNiwgMHg5YjcwLCAwLCB7MHgwMCwweDIxLDB4YzEsMHgwYSwweGYzLDB4ODIsMHgwYywweDAwLDB4ODcsMHgwMSwweDI5LDB4YzAsMHgwOCwweDcxLDB4MDIsMHg2YSB9LAorICAxNiwgMHg5YjgwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDlkLDB4MDAsMHhiZCwweDIxLDB4MjcsMHg4MiB9LAorICAxNiwgMHg5YjkwLCAwLCB7MHgwMCwweDcwLDB4MDIsMHhmYywweDA0LDB4OGMsMHgwMCwweGE3LDB4Y2MsMHhhOCwweDcwLDB4MDIsMHgzYywweDA4LDB4YWYsMHgwMCB9LAorICAxNiwgMHg5YmEwLCAwLCB7MHgyMSwweGMwLDB4MDgsMHg3MCwweDAyLDB4ZGMsMHgwMCwweGI3LDB4MDAsMHgyMSwweGM0LDB4MDgsMHg3MCwweDE2LDB4MWMsMHgwYSB9LAorICAxNiwgMHg5YmIwLCAwLCB7MHg4ZiwweDAwLDB4MjEsMHhjMCwweDA4LDB4NzAsMHgwMiwweGMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5YmMwLCAwLCB7MHgyMCwweDEwLDB4YzgsMHgwMCwweGJiLDB4NDQsMHgyNCwweGUyLDB4MDgsMHhiMSwweDAyLDB4YzIsMHg4MCwweDAxLDB4ODAsMHgyNCB9LAorICAxNiwgMHg5YmQwLCAwLCB7MHhkMCwweDg4LDB4MzAsMHgwMiwweDBmLDB4NTIsMHg4MywweDkxLDB4MjgsMHhlNCwweDg4LDB4M2QsMHgwMiwweGNlLDB4ZDAsMHhiMCB9LAorICAxNiwgMHg5YmUwLCAwLCB7MHhiMiwweGEyLDB4YzAsMHgwYSwweDM0LDB4MTIsMHgwYywweDAyLDB4ODMsMHgwMCwweDI4LDB4YzAsMHgwOCwweDMwLDB4MDIsMHg0OCB9LAorICAxNiwgMHg5YmYwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGFjLDB4MDAsMHhmYiwweDAxLDB4ZTQsMHg0MCB9LAorICAxNiwgMHg5YzAwLCAwLCB7MHgyYywweGYwLDB4NDMsMHhlNSwweDAwLDB4OGEsMHg4OCwweDM3LDB4ZTAsMHgwMCwweGZhLDB4MDIsMHgzZCwweDAwLDB4ZWYsMHgwMCB9LAorICAxNiwgMHg5YzEwLCAwLCB7MHgzMywweGQxLDB4MGMsMHhmNCwweDAzLDB4ZmQsMHgwMCwweGY5LDB4NDAsMHgzMywweGU4LDB4MGMsMHhmYywweDAxLDB4M2MsMHgwNCB9LAorICAxNiwgMHg5YzIwLCAwLCB7MHhjZiwweDAyLDB4MzMsMHhjMCwweDJjLDB4ZjAsMHgwMywweGVhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5YzMwLCAwLCB7MHg4MCwweDAwLDB4ZWUsMHgwOCwweGY5LDB4MTAsMHgzYSwweGQwLDB4MGYsMHhiMCwweDkzLDB4ZWMsMHgwMCwweGZiLDB4MGIsMHgzYSB9LAorICAxNiwgMHg5YzQwLCAwLCB7MHhjMCwweDhlLDB4YjAsMHg4MywweGVjLDB4ODAsMHhmYiwweDA5LDB4N2UsMHhjOCwweDBmLDB4YjIsMHgxMywweGVjLDB4MDAsMHhmOSB9LAorICAxNiwgMHg5YzUwLCAwLCB7MHgwMCwweDNlLDB4YzIsMHg4ZiwweGIyLDB4NGIsMHhjYywweDA0LDB4ZmIsMHgwMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHg2MCB9LAorICAxNiwgMHg5YzYwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGZjLDB4MDAsMHhmZiwweDA4LDB4MzMsMHhjMCB9LAorICAxNiwgMHg5YzcwLCAwLCB7MHgxYywweGYwLDB4MDMsMHg3MCwweDQwLDB4YzQsMHhjMCwweDMzLDB4YzIsMHgwZiwweGYwLDB4MDMsMHgxYywweDEwLDB4YzcsMHgwMCB9LAorICAxNiwgMHg5YzgwLCAwLCB7MHgzMSwweGMwLDB4MGMsMHg3MCwweDAzLDB4MWMsMHgwMCwweGM1LDB4NDEsMHgzMywweGMwLDB4MGMsMHhmMCwweDIzLDB4MmMsMHgwMCB9LAorICAxNiwgMHg5YzkwLCAwLCB7MHhjZiwweDAwLDB4YjMsMHhjMCwweDZjLDB4ZjAsMHgwMywweDgwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5Y2EwLCAwLCB7MHg4MSwweDA0LDB4NmEsMHgwMCwweGI5LDB4OTAsMHgzMiwweGYxLDB4MDgsMHhiMCwweDAyLDB4MGEsMHgxMCwweGQ5LDB4MDAsMHgyMiB9LAorICAxNiwgMHg5Y2IwLCAwLCB7MHhjMSwweDBiLDB4YjAsMHgwMiwweDJjLDB4MDAsMHhjYiwweDA2LDB4MjIsMHhjMCwweDg4LDB4YjAsMHgxMiwweDJjLDB4MDAsMHg4OCB9LAorICAxNiwgMHg5Y2MwLCAwLCB7MHg4MCwweDIyLDB4YzEsMHgwZCwweGIwLDB4MDIsMHgyYywweDAwLDB4ODMsMHgwMCwweDIyLDB4YzEsMHgwOCwweGIwLDB4NDYsMHhlMCB9LAorICAxNiwgMHg5Y2QwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMSwweDJlLDB4MDAsMHhiOSwweDAwLDB4MjIsMHhmMCB9LAorICAxNiwgMHg5Y2UwLCAwLCB7MHgwOCwweGIwLDB4MTIsMHg2NCwweDAwLDB4OGEsMHgwMCwweDIyLDB4YzAsMHgwYiwweDMwLDB4NDIsMHgyYywweDAwLDB4OGIsMHgwMCB9LAorICAxNiwgMHg5Y2YwLCAwLCB7MHgyMiwweGMwLDB4MDgsMHhiMCwweDAyLDB4MmMsMHgwMCwweDhhLDB4MDAsMHgyMiwweGMwLDB4ODgsMHgzMCwweDBhLDB4MmMsMHgwMCB9LAorICAxNiwgMHg5ZDAwLCAwLCB7MHg4YiwweDAwLDB4MjAsMHhjMCwweDA4LDB4YjAsMHgwMiwweGUwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ZDEwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwNCwweGIxLDB4MDIsMHhlNCwweGMxLDB4MDgsMHhiMCwweDIyLDB4MjAsMHgwMiwweDkzLDB4MDAsMHgyMCB9LAorICAxNiwgMHg5ZDIwLCAwLCB7MHhjMCwweDBiLDB4MzAsMHgxMiwweDBjLDB4MDIsMHg4MywweDAyLDB4YTAsMHhjMCwweDI4LDB4MzAsMHgwZSwweDBjLDB4MDIsMHg4MCB9LAorICAxNiwgMHg5ZDMwLCAwLCB7MHgwMCwweGEwLDB4YzAsMHg0OSwweDMwLDB4MGEsMHgwYywweDAyLDB4OGIsMHgwMCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhjMiB9LAorICAxNiwgMHg5ZDQwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDZjLDB4MDAsMHhmOSwweDI0LDB4MzIsMHhjMCB9LAorICAxNiwgMHg5ZDUwLCAwLCB7MHgwOCwweGYwLDB4MDMsMHg2NCwweDAwLDB4YzgsMHgwMCwweGIzLDB4YzAsMHgxZiwweGYwLDB4MGIsMHgzYywweDAwLDB4OGYsMHgwMCB9LAorICAxNiwgMHg5ZDYwLCAwLCB7MHgzMywweGMwLDB4NGMsMHhmMCwweDQzLDB4M2MsMHgwOCwweGMzLDB4MDAsMHgzMSwweGMwLDB4MGMsMHhmMCwweDAzLDB4M2QsMHg0OCB9LAorICAxNiwgMHg5ZDcwLCAwLCB7MHhjZiwweDAwLDB4MzEsMHhjMCwweDBjLDB4ZjAsMHgwMywweDgwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ZDgwLCAwLCB7MHhhMCwweDFkLDB4ZjAsMHgwNCwweGY5LDB4NDEsMHgzYiwweGMwLDB4NGYsMHhmMCwweDAzLDB4ZjAsMHgxMSwweGZkLDB4MDAsMHgzZiB9LAorICAxNiwgMHg5ZDkwLCAwLCB7MHhjMCwweDg3LDB4NzAsMHgyNywweGZjLDB4MDAsMHhlZiwweDA2LDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMiwweGZjLDB4MDgsMHhmYyB9LAorICAxNiwgMHg5ZGEwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHg0NywweGYwLDB4NDMsMHhmYywweDAwLDB4NzcsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhlOCB9LAorICAxNiwgMHg5ZGIwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGQyLDB4MDAsMHhjNywweDAxLDB4MzcsMHgwYyB9LAorICAxNiwgMHg5ZGMwLCAwLCB7MHgwZiwweGU4LDB4MjMsMHgxMCwweDRhLDB4YzQsMHhjMCwweDMxLDB4MzAsMHgwYywweGM5LDB4MDMsMHgzNCwweDQ2LDB4Y2YsMHgxMCB9LAorICAxNiwgMHg5ZGQwLCAwLCB7MHgzMywweGQwLDB4MGMsMHhmNCwweDAzLDB4M2MsMHg1OCwweGNmLDB4MDAsMHgzMywweGMwLDB4MmQsMHhmMSwweDAzLDB4M2UsMHgwMiB9LAorICAxNiwgMHg5ZGUwLCAwLCB7MHhjZiwweDIxLDB4M2YsMHhlNCwweDBmLDB4ZjIsMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ZGYwLCAwLCB7MHg4MCwweDEwLDB4ZTQsMHg4NCwweDBiLDB4NDAsMHgyMiwweDRjLDB4MGIsMHhhOCwweDAyLDB4MmMsMHhjMCwweDhiLDB4MjAsMHgyMiB9LAorICAxNiwgMHg5ZTAwLCAwLCB7MHhjOCwweDRhLDB4MzIsMHgwMiwweDI0LDB4ODAsMHg4MywweDIwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweDIwLDB4MDAsMHg4YiB9LAorICAxNiwgMHg5ZTEwLCAwLCB7MHgyMSwweDMyLDB4Y2EsMHg0OCwweDMyLDB4MDIsMHgyYywweDMwLDB4OGYsMHg5MCwweDJlLDB4ODgsMHgwYiwweGJkLDB4MTIsMHgyMCB9LAorICAxNiwgMHg5ZTIwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNlLDB4MjAsMHhhMywweDQwLDB4ZTAsMHg0OCB9LAorICAxNiwgMHg5ZTMwLCAwLCB7MHg0YiwweDIwLDB4MjIsMHgwYywweDAyLDB4ODIsMHgwMCwweDJhLDB4MDAsMHgwOCwweDIwLDB4MDIsMHgwNCwweDgwLDB4ODAsMHgyMCB9LAorICAxNiwgMHg5ZTQwLCAwLCB7MHgyMCwweGM4LDB4MDgsMHgwMiwweDAyLDB4MGMsMHgwMCwweDgwLDB4MGMsMHg2MCwweDAwLDB4MDgsMHgyMCwweDEyLDB4MmMsMHg4OCB9LAorICAxNiwgMHg5ZTUwLCAwLCB7MHg4MywweDAwLDB4MmMsMHhlOCwweDBiLDB4MzAsMHgwMiwweDYyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ZTYwLCAwLCB7MHhjMCwweDE1LDB4YWUsMHgwMCwweGFiLDB4MDEsMHhhMiwweDYwLDB4MGIsMHhhMCwweDAyLDB4MjAsMHgwMSwweDgxLDB4MDAsMHgyMiB9LAorICAxNiwgMHg5ZTcwLCAwLCB7MHhjMCwweDBhLDB4OTAsMHgxMiwweDA0LDB4MjAsMHg4YSwweDA4LDB4MjIsMHhjMSwweDA4LDB4YTAsMHgwMiwweDI4LDB4MDAsMHg4OCB9LAorICAxNiwgMHg5ZTgwLCAwLCB7MHgwMCwweDI0LDB4NDQsMHgwOCwweGEyLDB4MDIsMHhhYywweDAwLDB4OGIsMHgwNCwweDJlLDB4ODgsMHgwMywweGIwLDB4MDIsMHg3MCB9LAorICAxNiwgMHg5ZTkwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGVjLDB4MDAsMHhlYSwweDkwLDB4MzIsMHgyOCB9LAorICAxNiwgMHg5ZWEwLCAwLCB7MHgwZiwweGI2LDB4MDMsMHgyMCwweDA4LDB4YzksMHgwNCwweDNhLDB4YzAsMHg0YywweDkwLDB4MjIsMHgyNCwweDAwLDB4Y2IsMHg0MCB9LAorICAxNiwgMHg5ZWIwLCAwLCB7MHgzMiwweGE4LDB4MGMsMHhiMiwweDAzLDB4MmMsMHgwMCwweGNiLDB4ODAsMHhiMiwweGUwLDB4MGMsMHhiMCwweDBiLDB4MDQsMHgwMCB9LAorICAxNiwgMHg5ZWMwLCAwLCB7MHhjYiwweDAwLDB4M2UsMHhjMCwweDRmLDB4YjAsMHgwYiwweDUwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ZWQwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwMCwweGRmLDB4ODAsMHgzYiwweDgxLDB4MGYsMHhmMCwweGMzLDB4ZmMsMHgwMCwweGJlLDB4MDEsMHgxZiB9LAorICAxNiwgMHg5ZWUwLCAwLCB7MHgwMCwweDBmLDB4ZTAsMHgyMywweGY0LDB4MDAsMHhmZiwweDAwLDB4M2YsMHhiMCwweDRmLDB4ZjAsMHg0MywweGQ0LDB4MDIsMHhmZiB9LAorICAxNiwgMHg5ZWYwLCAwLCB7MHg5MSwweDNhLDB4ZTAsMHg0ZSwweGYwLDB4MDMsMHg3YywweDBjLDB4ZmYsMHgwMCwweDJmLDB4ODAsMHgwZiwweDMwLDB4MDMsMHhiOCB9LAorICAxNiwgMHg5ZjAwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDEsMHhjYSwweDAwLDB4NzIsMHg1MCB9LAorICAxNiwgMHg5ZjEwLCAwLCB7MHgwNCwweGI0LDB4MDMsMHgyYywweDgyLDB4Y2IsMHgwMCwweDMyLDB4ZTAsMHgwYywweGI4LDB4MDMsMHgyNywweDA0LDB4YzgsMHhjOCB9LAorICAxNiwgMHg5ZjIwLCAwLCB7MHhiMiwweGEyLDB4MGMsMHg4OCwweDAzLDB4MmMsMHgwMCwweGMxLDB4MDAsMHgzZSwweDAwLDB4MmMsMHgzMCwweDFiLDB4MmMsMHgwNCB9LAorICAxNiwgMHg5ZjMwLCAwLCB7MHhmYiwweDEwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweDEwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ZjQwLCAwLCB7MHhjOCwweDA1LDB4MmMsMHgwNCwweDAzLDB4NTAsMHhhMiwweGUwLDB4MDgsMHgzNCwweDQyLDB4MzMsMHgwMCwweDg4LDB4MDAsMHgyMCB9LAorICAxNiwgMHg5ZjUwLCAwLCB7MHgxMCwweDBkLDB4ODQsMHgwMywweDI1LDB4MDAsMHg4YSwweDQwLDB4MjIsMHg5MCwweDA4LDB4YTUsMHgwMiwweDJjLDB4MDAsMHg4OSB9LAorICAxNiwgMHg5ZjYwLCAwLCB7MHhhNCwweDNhLDB4NDAsMHgwOCwweGIwLDB4MDIsMHgyYywweDAwLDB4YmYsMHg4NCwweDJlLDB4ODAsMHgwYiwweGYwLDB4NTIsMHgzMiB9LAorICAxNiwgMHg5ZjcwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDZjLDB4ODAsMHg4MSwweDgwLDB4MjQsMHg4OCB9LAorICAxNiwgMHg5ZjgwLCAwLCB7MHg4OSwweDNjLDB4MjYsMHgyMSwweDAwLDB4OTAsMHgwMCwweDIwLDB4MDIsMHgwOCwweDgwLDB4ODIsMHgwMCwweDIwLDB4OWIsMHgwMCB9LAorICAxNiwgMHg5ZjkwLCAwLCB7MHgyMiwweDQwLDB4ODgsMHhiMCwweDEyLDB4MGMsMHgwOCwweDgzLDB4ODAsMHgyYywweGMwLDB4MDgsMHgxMCwweDAyLDB4MGMsMHgwMCB9LAorICAxNiwgMHg5ZmEwLCAwLCB7MHhiMywweDgwLDB4MmMsMHg0MCwweDBiLDB4MzAsMHgwMiwweDM4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHg5ZmIwLCAwLCB7MHgyMCwweDAxLDB4M2UsMHgwYSwweDg1LDB4YTAsMHhhNSwweDYwLDB4MDgsMHhmYiwweDgyLDB4M2UsMHg4NCwweDlmLDB4ODEsMHg2MyB9LAorICAxNiwgMHg5ZmMwLCAwLCB7MHhlMCwweDg5LDB4NzksMHgxMiwweDUyLDB4ODAsMHg5NywweDgyLDB4MjEsMHg2YywweDE4LDB4NzgsMHgwMiwweDEyLDB4MDAsMHg4NyB9LAorICAxNiwgMHg5ZmQwLCAwLCB7MHhhMSwweDI5LDB4ZTAsMHgwOCwweDViLDB4MDIsMHgxZSwweDAwLDB4YjcsMHhjMCwweDJkLDB4NjAsMHgwYiwweDc4LDB4MDIsMHgwOCB9LAorICAxNiwgMHg5ZmUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHg4MSwweDA4LDB4MjYsMHhjMiB9LAorICAxNiwgMHg5ZmYwLCAwLCB7MHgyYywweDMyLDB4MTMsMHgwZSwweGE0LDB4ZDIsMHgwMCwweGIwLDB4MDAsMHgxYywweDIxLDB4MTIsMHgyNCwweDAyLDB4ZDEsMHgyMCB9LAorICAxNiwgMHhhMDAwLCAwLCB7MHgzMCwweGM4LDB4MGMsMHgxMCwweDAzLDB4MGMsMHgwMCwweGMyLDB4MTAsMHgzYywweDgwLDB4MGMsMHgyMywweDAzLDB4MGMsMHg0MCB9LAorICAxNiwgMHhhMDEwLCAwLCB7MHhmMywweDAwLDB4M2MsMHg0OCwweDBmLDB4MzAsMHgwYiwweDEyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMDIwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwMCwweGZkLDB4MjAsMHhiYiwweDQwLDB4MDcsMHg3MiwweDAyLDB4ZjAsMHgxMCwweGVkLDB4MTAsMHgzZiB9LAorICAxNiwgMHhhMDMwLCAwLCB7MHhjNCwweDBmLDB4ZDEsMHg2MywweGI0LDB4ODAsMHhlZiwweDAwLDB4M2YsMHhjOCwweDBmLDB4ZjAsMHgwMywweGQ4LDB4MDAsMHhmZSB9LAorICAxNiwgMHhhMDQwLCAwLCB7MHgzNCwweDNmLDB4YzQsMHgwZiwweGViLDB4NDMsMHhmYywweDAwLDB4ZmYsMHgwOCwweDdmLDB4NDAsMHgwZiwweGYxLDB4ODMsMHhkMCB9LAorICAxNiwgMHhhMDUwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVjLDB4MDAsMHhjOCwweDAwLDB4MzMsMHg4MCB9LAorICAxNiwgMHhhMDYwLCAwLCB7MHg4ZiwweDI4LDB4MDMsMHgyMCwweDAwLDB4NDksMHgwMiwweDMyLDB4YzAsMHgwZiwweDkwLDB4MDMsMHgyMCwweDAwLDB4Y2IsMHgwMCB9LAorICAxNiwgMHhhMDcwLCAwLCB7MHgzMiwweDQwLDB4NGMsMHhiMCwweDBiLDB4MmMsMHgwMCwweGNiLDB4ODAsMHgzMiwweGMwLDB4MGUsMHg5ZSwweDAzLDB4MjQsMHgwMCB9LAorICAxNiwgMHhhMDgwLCAwLCB7MHhmYiwweDIwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweDJhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMDkwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgwMCwweDhkLDB4MDEsMHgyMSwweGMwLDB4MGIsMHg2MCwweDAyLDB4MWQsMHgwMCwweGQ2LDB4MDAsMHgyMSB9LAorICAxNiwgMHhhMGEwLCAwLCB7MHgwMCwweDBiLDB4ZTAsMHgwMiwweDAwLDB4MDAsMHg4MywweDA0LDB4MjAsMHg0MCwweDA4LDB4NzAsMHg0MiwweDM0LDB4MDIsMHg4NyB9LAorICAxNiwgMHhhMGIwLCAwLCB7MHgwMSwweDIzLDB4YzAsMHgyOCwweDUxLDB4MGEsMHgxYywweDA0LDB4YjcsMHgzMCwweDJkLDB4YzAsMHgwYiwweDcyLDB4MDMsMHg5MiB9LAorICAxNiwgMHhhMGMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4MDAsMHhhNiwweDQwLDB4MjEsMHhhMCB9LAorICAxNiwgMHhhMGQwLCAwLCB7MHgwYiwweDY4LDB4MDIsMHgwZSwweDAwLDB4OGYsMHg4MCwweDIxLDB4ZTAsMHgwYiwweDc4LDB4MDIsMHgxNiwweDEwLDB4YTUsMHg4MCB9LAorICAxNiwgMHhhMGUwLCAwLCB7MHgyMSwweGUwLDB4MDgsMHgxOCwweDAyLDB4MWUsMHgwMCwweDgzLDB4ODAsMHgyMSwweGEwLDB4MDgsMHg3OCwweDAyLDB4MWYsMHgwMCB9LAorICAxNiwgMHhhMGYwLCAwLCB7MHhiNywweDgwLDB4MmQsMHhlMCwweDBiLDB4MzgsMHgwMiwweDMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMTAwLCAwLCB7MHg0OCwweDE0LDB4ZWMsMHgxMiwweGExLDB4NjQsMHgyMCwweGU2LDB4MGIsMHgyMCwweDAyLDB4MDAsMHgxMCwweDkwLDB4NGEsMHgyMCB9LAorICAxNiwgMHhhMTEwLCAwLCB7MHgyMCwweDRiLDB4MDAsMHg0MiwweDA0LDB4MDAsMHg4MywweDAwLDB4MjAsMHhjMiwweDA4LDB4MzAsMHgwMiwweDhjLDB4MDAsMHg4MyB9LAorICAxNiwgMHhhMTIwLCAwLCB7MHgwNCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHgwZSwweDAwLDB4YjMsMHgwMCwweDJjLDB4ZTAsMHg0YiwweDMwLDB4MDIsMHg5MiB9LAorICAxNiwgMHhhMTMwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGI4LDB4MDAsMHhlZSwweGMwLDB4MzMsMHg5MCB9LAorICAxNiwgMHhhMTQwLCAwLCB7MHgwZiwweGEwLDB4MWIsMHgwOCwweDAwLDB4Y2EsMHg0MCwweGIyLDB4ODIsMHgwZiwweGEwLDB4MGIsMHgyOCwweDAyLDB4Y2EsMHgwMCB9LAorICAxNiwgMHhhMTUwLCAwLCB7MHhiMiwweDkwLDB4YWMsMHhhMCwweDAzLDB4MjksMHgwMCwweGNhLDB4NDAsMHhiMiwweDgwLDB4OGUsMHhhNCwweDAzLDB4MmEsMHgwMCB9LAorICAxNiwgMHhhMTYwLCAwLCB7MHhmYSwweDAwLDB4M2YsMHhhOCwweDBmLDB4YTAsMHgwYiwweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMTcwLCAwLCB7MHg0OCwweDAwLDB4ZTIsMHgwMiwweDkwLDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4OCwweDAzLDB4ZjEsMHgwMCwweGZjLDB4MDIsMHgzZiB9LAorICAxNiwgMHhhMTgwLCAwLCB7MHgyMCwweDBmLDB4YzgsMHgwMywweGMxLDB4MDAsMHhmMCwweDAwLDB4M2UsMHgwMCwweDhmLDB4MDAsMHgwMSwweDYwLDB4MDIsMHhmOCB9LAorICAxNiwgMHhhMTkwLCAwLCB7MHgwOCwweDNlLDB4MDAsMHgwZiwweDgwLDB4ODMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDJlLDB4MDAsMHg4ZiwweDgwLDB4MTMsMHg5MiB9LAorICAxNiwgMHhhMWEwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDIsMHhjOSwweDAwLDB4YjIsMHg2NCB9LAorICAxNiwgMHhhMWIwLCAwLCB7MHgwZiwweDkxLDB4MDMsMHhlNCwweDA0LDB4YzksMHgwMCwweDMyLDB4NDAsMHg2YywweDkwLDB4MDMsMHgyNSwweDAyLDB4YzksMHg5MCB9LAorICAxNiwgMHhhMWMwLCAwLCB7MHhiMCwweDQwLDB4MGMsMHg5MCwweDAzLDB4MjQsMHgyMCwweGM5LDB4YTAsMHgzZSwweDQwLDB4NGMsMHg5MCwweDIzLDB4ZTQsMHgwMCB9LAorICAxNiwgMHhhMWQwLCAwLCB7MHhmMSwweDAwLDB4OTIsMHg0MCwweDBjLDB4MTAsMHgwMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMWUwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4ODAsMHhhMiwweDQwLDB4MGIsMHg5NiwweDQyLDB4ZTUsMHgwNCwweDg5LDB4MDAsMHgyMiB9LAorICAxNiwgMHhhMWYwLCAwLCB7MHg0MCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDgsMHgwOSwweDQxLDB4MjIsMHg0MCwweDQ4LDB4OTAsMHg0MiwweDI0LDB4MDQsMHg4OSB9LAorICAxNiwgMHhhMjAwLCAwLCB7MHg4MCwweDI2LDB4NDAsMHgwOCwweDkwLDB4MDIsMHhlNCwweDAwLDB4YjksMHgwMCwweDIyLDB4NDAsMHgwOCwweDk0LDB4MDIsMHgyMCB9LAorICAxNiwgMHhhMjEwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI1LDB4MDAsMHg4OSwweDIwLDB4MjIsMHg0MCB9LAorICAxNiwgMHhhMjIwLCAwLCB7MHgwYiwweDkwLDB4MDIsMHhmNCwweDg0LDB4ODUsMHgwMCwweDIxLDB4NDAsMHg0OCwweDUwLDB4MDIsMHgyNCwweDIwLDB4OGQsMHgwOCB9LAorICAxNiwgMHhhMjMwLCAwLCB7MHgyMywweDQwLDB4MDgsMHhkMCwweDAyLDB4OTQsMHgwMCwweDhkLDB4MDAsMHgyOSwweDQwLDB4MGEsMHhkMCwweDAyLDB4YTQsMHgwOCB9LAorICAxNiwgMHhhMjQwLCAwLCB7MHhiOSwweDAwLDB4MjgsMHg0MCwweDE4LDB4OTAsMHhjMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMjUwLCAwLCB7MHgwOCwweDA0LDB4MDUsMHgwMCwweDgxLDB4MDAsMHgyMCwweDUxLDB4MGIsMHgxMCwweDAyLDB4ZjUsMHg4MCwweDg1LDB4YzEsMHhhMSB9LAorICAxNiwgMHhhMjYwLCAwLCB7MHg1MCwweDA4LDB4NTQsMHgwYSwweDA1LDB4MDYsMHg4NSwweDQwLDB4MjEsMHg1MCwweDg4LDB4NTQsMHgwMiwweDk1LDB4MDAsMHg4NSB9LAorICAxNiwgMHhhMjcwLCAwLCB7MHg0NCwweDJkLDB4NTAsMHgyYSwweDU0LDB4MTIsMHhjNSwweDAxLDB4YjEsMHgwMCwweDA4LDB4NTAsMHgwOCwweDEwLDB4MDIsMHgwMiB9LAorICAxNiwgMHhhMjgwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHhjYSwweDUwLDB4MzIsMHg4MCB9LAorICAxNiwgMHhhMjkwLCAwLCB7MHgwZiwweDgwLDB4MDMsMHhlOCwweDAyLDB4YzgsMHgwMSwweDMyLDB4MDAsMHgyYywweGMwLDB4MDMsMHgyMCwweDAwLDB4YzgsMHgwMiB9LAorICAxNiwgMHhhMmEwLCAwLCB7MHgzMiwweDAwLDB4MmMsMHg4MCwweDBiLDB4YTAsMHgwMCwweGM4LDB4MDAsMHgzYSwweDAwLDB4NGUsMHg0MCwweDIzLDB4YTAsMHgwOCB9LAorICAxNiwgMHhhMmIwLCAwLCB7MHhmOCwweDAwLDB4M2EsMHgwMCwweDJjLDB4ODAsMHgwYiwweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMmMwLCAwLCB7MHg5OCwweDFkLDB4ZGMsMHgwNCwweGZkLDB4NDAsMHgzZiwweDUwLDB4NGYsMHg5MCwweDYzLDB4ZTQsMHg0MCwweGYxLDB4MDIsMHgzZSB9LAorICAxNiwgMHhhMmQwLCAwLCB7MHg0MSwweDBmLDB4OTAsMHgxMywweGY1LDB4MDQsMHhmOSwweDQxLDB4M2UsMHg1MCwweDBmLDB4OTQsMHg0MywweDY1LDB4MDIsMHhmOSB9LAorICAxNiwgMHhhMmUwLCAwLCB7MHg0MSwweDM2LDB4NTAsMHg0ZCwweDk0LDB4MDMsMHhmNCwweDAwLDB4ZjksMHg0MSwweDM3LDB4NDAsMHg0ZiwweDk0LDB4MDMsMHhlNiB9LAorICAxNiwgMHhhMmYwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMSwweGZjLDB4MDAsMHhjZCwweGE4LDB4MzMsMHg3MCB9LAorICAxNiwgMHhhMzAwLCAwLCB7MHgwZiwweGQwLDB4MTMsMHhmNiwweDg4LDB4Y2QsMHgwMCwweDMyLDB4NTAsMHg0ZiwweDE0LDB4MjMsMHgwNywweGEwLDB4YzksMHhjMCB9LAorICAxNiwgMHhhMzEwLCAwLCB7MHgzMiwweDc4LDB4MGMsMHg5ZSwweDAzLDB4MzcsMHgwMiwweGNkLDB4YzAsMHgzMiwweDY0LDB4MGYsMHg5OCwweDAzLDB4MjQsMHgwMCB9LAorICAxNiwgMHhhMzIwLCAwLCB7MHhjZCwweDAwLDB4MzIsMHg0MCwweDJjLDB4ZGEsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhMzMwLCAwLCB7MHgzOCwweDEwLDB4ZTIsMHgwOCwweDg4LDB4ZWIsMHgyMiwweDMwLDB4MGIsMHg4MCwweDEyLDB4ZTgsMHgwNCwweGEwLDB4YTAsMHgyYSB9LAorICAxNiwgMHhhMzQwLCAwLCB7MHgyMCwweDBiLDB4OGEsMHgwYSwweDIzLDB4MDAsMHg4OCwweDgwLDB4MjIsMHgyOCwweDAwLDB4YzgsMHg0MiwweDIzLDB4ODAsMHg4MCB9LAorICAxNiwgMHhhMzUwLCAwLCB7MHhkNCwweDIwLDB4MjgsMHgwOSwweDgwLDB4MDIsMHgyMiwweDk0LDB4YTgsMHgwMCwweDJhLDB4MDAsMHg4OCwweDg1LDB4MDIsMHgwZSB9LAorICAxNiwgMHhhMzYwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4YTAsMHg4MywweDAwLDB4MjQsMHhkOCB9LAorICAxNiwgMHhhMzcwLCAwLCB7MHg4YiwweDEwLDB4MDIsMHhlNSwweDE0LDB4ODksMHgwYSwweDIxLDB4NDgsMHgwYiwweDUyLDB4MDIsMHg1NCwweDgwLDB4ODUsMHg0MCB9LAorICAxNiwgMHhhMzgwLCAwLCB7MHgyNSwweDU4LDB4MDksMHg1NiwweDAyLDB4NDUsMHgwMiwweDgxLDB4MjAsMHgyMCwweDUwLDB4MGIsMHgxNCwweDAyLDB4MDQsMHgzMCB9LAorICAxNiwgMHhhMzkwLCAwLCB7MHg4MSwweDAwLDB4MjAsMHg0MCwweDA4LDB4MTAsMHgwMiwweDQyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhM2EwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgxMiwweDg5LDB4MDAsMHhhNiwweDQwLDB4MGIsMHg5MCwweDQyLDB4ZTQsMHg5OCwweGE5LDB4ODAsMHgyYiB9LAorICAxNiwgMHhhM2IwLCAwLCB7MHg0MCwweDBiLDB4NTEsMHgwMiwweDU1LDB4MDAsMHg5ZCwweDA4LDB4MjcsMHg0OCwweDA5LDB4ZjYsMHgwMiwweDQ0LDB4MDAsMHg4MSB9LAorICAxNiwgMHhhM2MwLCAwLCB7MHgwNCwweDIyLDB4NDAsMHgxOSwweDkxLDB4OGEsMHgyNCwweDgwLDB4YTksMHgwMCwweDJhLDB4NDAsMHgwOCwweDkwLDB4MDIsMHg0NiB9LAorICAxNiwgMHhhM2QwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU3LDB4MDIsMHhjOSwweDA0LDB4MzYsMHg1OCB9LAorICAxNiwgMHhhM2UwLCAwLCB7MHgwZiwweDkwLDB4MDMsMHhjNSwweDAwLDB4YzksMHgwMCwweDMyLDB4NDAsMHgwZiwweDkwLDB4MTMsMHg2NCwweDAyLDB4YzksMHgwMCB9LAorICAxNiwgMHhhM2YwLCAwLCB7MHgzNiwweDQwLDB4MmQsMHg5MCwweDBiLDB4NjYsMHgwNCwweGM5LDB4ZTAsMHhiMiwweDQ4LDB4OGYsMHg5OCwweDQ3LDB4MjQsMHgwMCB9LAorICAxNiwgMHhhNDAwLCAwLCB7MHhjOSwweDAwLDB4NzIsMHg0MCwweDBjLDB4MTAsMHgwMywweDY4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNDEwLCAwLCB7MHgyOCwweDAxLDB4YTUsMHgwOCwweGY5LDB4MjEsMHgzYSwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTYsMHgwNCwweGY5LDB4MDAsMHgzZSB9LAorICAxNiwgMHhhNDIwLCAwLCB7MHg0MCwweDRmLDB4OTgsMHg4MywweGE0LDB4MDAsMHhlOSwweDQwLDB4YmEsMHg2MCwweDBlLDB4OTAsMHgwMywweGE0LDB4ODAsMHhmOSB9LAorICAxNiwgMHhhNDMwLCAwLCB7MHhhMywweDNlLDB4NDgsMHgwZiwweDk4LDB4MGIsMHhlNCwweDAwLDB4ZjksMHgwMCwweDFlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHg4YSB9LAorICAxNiwgMHhhNDQwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEyLDB4NDgsMHhjOCwweDIwLDB4MzIsMHgwOCB9LAorICAxNiwgMHhhNDUwLCAwLCB7MHgxZiwweDgwLDB4ODMsMHhlMSwweDIyLDB4YzgsMHgwMSwweDMzLDB4MDAsMHgyYywweGMwLDB4MDMsMHgzMCwweDA0LDB4Y2MsMHg0MCB9LAorICAxNiwgMHhhNDYwLCAwLCB7MHhiMSwweDAwLDB4MGMsMHg0NCwweDAzLDB4MjAsMHgxMiwweGM4LDB4NDEsMHgzMiwweDAwLDB4MmQsMHg4NCwweDBiLDB4NjAsMHgwMCB9LAorICAxNiwgMHhhNDcwLCAwLCB7MHhmOCwweDAwLDB4YjIsMHgwMCwweDRjLDB4ODAsMHgwYiwweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNDgwLCAwLCB7MHgyOCwweDA1LDB4M2EsMHgwMCwweGE2LDB4MDAsMHgyMywweDkwLDB4MDMsMHhlNCwweDkyLDB4ZjgsMHgwMCwweDgyLDB4MDAsMHgzNiB9LAorICAxNiwgMHhhNDkwLCAwLCB7MHg4MCwweDA4LDB4YTAsMHgwMywweDY4LDB4MDAsMHhjYSwweDAwLDB4MjIsMHg4MywweDA4LDB4YTAsMHgwMiwweDI4LDB4MDMsMHg4YSB9LAorICAxNiwgMHhhNGEwLCAwLCB7MHgwMCwweDIyLDB4ODAsMHgwOCwweGEwLDB4MDIsMHgyOCwweDAwLDB4YjYsMHg4MCwweDIyLDB4ODAsMHgwZCwweGU4LDB4MDIsMHgwYSB9LAorICAxNiwgMHhhNGIwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDZlLDB4MDAsMHg4MiwweDQyLDB4MjAsMHhjMCB9LAorICAxNiwgMHhhNGMwLCAwLCB7MHgwYiwweDM0LDB4MDIsMHhjZCwweDA5LDB4ODAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgwMCwweDAyLDB4OTgsMHgwMCB9LAorICAxNiwgMHhhNGQwLCAwLCB7MHgyMCwweDIwLDB4MjgsMHgwMCwweDBhLDB4MDQsMHgxMCwweDgxLDB4ODAsMHgyMCwweGMwLDB4MDgsMHhiMCwweDAyLDB4MmMsMHgwMCB9LAorICAxNiwgMHhhNGUwLCAwLCB7MHhiMywweDAwLDB4MjIsMHhjMCwweDE4LDB4MzEsMHgwMiwweDBhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNGYwLCAwLCB7MHhhMCwweDAxLDB4MzgsMHgwMiwweGEzLDB4MDAsMHgyMSwweDQwLDB4MWIsMHg3MCwweDAyLDB4ZGMsMHgyMCwweDg0LDB4MDUsMHg2NSB9LAorICAxNiwgMHhhNTAwLCAwLCB7MHhlMCwweDA4LDB4ZjAsMHgwMiwweDdjLDB4MTAsMHg5NywweDAwLDB4MjQsMHhjMCwweDA4LDB4MzAsMHgwMiwweDU0LDB4ODgsMHg4NyB9LAorICAxNiwgMHhhNTEwLCAwLCB7MHgwOSwweDIxLDB4ZTgsMHgwOSwweDMzLDB4MDIsMHgxYywweDgwLDB4YjYsMHgwOCwweDYzLDB4YzgsMHgwOSwweDM4LDB4MTIsMHgyOCB9LAorICAxNiwgMHhhNTIwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFlLDB4MDAsMHhjNywweGEwLDB4YTEsMHhlMCB9LAorICAxNiwgMHhhNTMwLCAwLCB7MHgwYiwweDc4LDB4MDMsMHhmZSwweDAwLDB4YzUsMHg4MiwweDMzLDB4MjAsMHgwYywweDQ4LDB4MDMsMHgxZSwweDAxLDB4ZGYsMHg4MCB9LAorICAxNiwgMHhhNTQwLCAwLCB7MHgzMSwweDIwLDB4MGMsMHg0OCwweDAzLDB4MDYsMHg0MCwweDg3LDB4ODIsMHgzMSwweGY4LDB4MGQsMHg3YiwweDAzLDB4NWYsMHgwMCB9LAorICAxNiwgMHhhNTUwLCAwLCB7MHhmMywweDgwLDB4MzEsMHhmMiwweDBjLDB4NjAsMHgwMywweDJhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNTYwLCAwLCB7MHgwOCwweDFkLDB4OWMsMHgwMCwweGZiLDB4MDEsMHgyZiwweDQwLDB4MDcsMHhiMCwweDAzLDB4ZTgsMHgwNCwweGY5LDB4MDAsMHgzZSB9LAorICAxNiwgMHhhNTcwLCAwLCB7MHhjMSwweDBmLDB4YjAsMHgwMywweGUwLDB4MDYsMHhlOCwweDAyLDB4M2EsMHhjMCwweDBmLDB4YjAsMHgwMSwweGE0LDB4MTAsMHhmOSB9LAorICAxNiwgMHhhNTgwLCAwLCB7MHg0MCwweGJlLDB4ZDAsMHgwNiwweGIwLDB4MDMsMHhlZSwweDAwLDB4ZmEsMHgwMCwweDNjLDB4ZDgsMHgwZiwweGEwLDB4MDMsMHhjMiB9LAorICAxNiwgMHhhNTkwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGY2LDB4MDAsMHhjZiwweDg4LDB4MzMsMHg2NCB9LAorICAxNiwgMHhhNWEwLCAwLCB7MHgyYywweGY4LDB4MDMsMHhmZSwweDAyLDB4YzQsMHhiMCwweDMzLDB4MjAsMHg4YywweGQ4LDB4MDMsMHgzMiwweDAwLDB4Y2MsMHhiNCB9LAorICAxNiwgMHhhNWIwLCAwLCB7MHgzMywweGEwLDB4MGMsMHhjOCwweDAzLDB4MTYsMHgyMCwweGNmLDB4YzAsMHgzMywweGYwLDB4MGMsMHhmOCwweDAzLDB4ZmUsMHgwMCB9LAorICAxNiwgMHhhNWMwLCAwLCB7MHhjZCwweDgwLDB4M2YsMHhlMCwweDBmLDB4ZDgsMHgwMywweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNWQwLCAwLCB7MHhhOCwweDExLDB4YjUsMHgwNCwweDg3LDB4MTIsMHhhMSwweDUwLDB4MGEsMHg3NCwweDEyLDB4YzQsMHg0MCwweDg0LDB4MTEsMHgyMyB9LAorICAxNiwgMHhhNWUwLCAwLCB7MHhjMCwweDI4LDB4ZTAsMHgwMiwweDFjLDB4MDIsMHhhNywweDExLDB4MjEsMHg1OCwweDQ4LDB4NzAsMHgwYSwweDE0LDB4MDAsMHg4ZCB9LAorICAxNiwgMHhhNWYwLCAwLCB7MHgwMCwweDIzLDB4YzAsMHgwYiwweDcwLDB4MDIsMHhmYywweDQwLDB4ODYsMHgwMCwweDJkLDB4YzAsMHgwYiwweDUwLDB4MDIsMHgyYSB9LAorICAxNiwgMHhhNjAwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk1LDB4MDAsMHg4NywweDQwLDB4MjEsMHgwMCB9LAorICAxNiwgMHhhNjEwLCAwLCB7MHgxOCwweDcxLDB4MDIsMHhkYywweDAwLDB4OTUsMHgyOCwweGUxLDB4MDIsMHgwOCwweDUwLDB4MDIsMHgzYywweDQyLDB4YTcsMHgyMiB9LAorICAxNiwgMHhhNjIwLCAwLCB7MHgyMSwweDgwLDB4ODgsMHg0MSwweDAyLDB4MTQsMHgwMCwweDg1LDB4MDAsMHhhMSwweGMwLDB4MDksMHg3MSwweDAyLDB4ZGMsMHgwMCB9LAorICAxNiwgMHhhNjMwLCAwLCB7MHhiNSwweDEwLDB4MmQsMHhjMCwweDBiLDB4NDAsMHgwMiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNjQwLCAwLCB7MHgyMCwweDE0LDB4YzQsMHgxMCwweDgzLDB4ODQsMHgyMCwweDExLDB4MDgsMHgzMCwweDAyLDB4YzMsMHgxMCwweDkxLDB4MjAsMHgyMCB9LAorICAxNiwgMHhhNjUwLCAwLCB7MHhjMCwweDA4LDB4MjgsMHgxMiwweDAwLDB4MDAsMHhhMCwweDg0LDB4MjAsMHg0MCwweDA4LDB4MzAsMHgwMiwweDA0LDB4MjYsMHg4MyB9LAorICAxNiwgMHhhNjYwLCAwLCB7MHgwMCwweDIwLDB4ZDAsMHgwYiwweDMwLDB4MDIsMHhjYywweDAwLDB4YjIsMHgwMCwweDJjLDB4YzAsMHgwYiwweDAwLDB4MDIsMHgwOCB9LAorICAxNiwgMHhhNjcwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGFkLDB4MDAsMHhjZiwweDg4LDB4YjIsMHhlOCB9LAorICAxNiwgMHhhNjgwLCAwLCB7MHgwYywweDMwLDB4MTMsMHhjZSwweGMyLDB4ZDAsMHg4MiwweDMyLDB4MDAsMHgwYywweDBlLDB4MGIsMHgyMCwweDAwLDB4YzgsMHg4OCB9LAorICAxNiwgMHhhNjkwLCAwLCB7MHhiMiwweDQwLDB4MmMsMHhiYSwweDQzLDB4MzcsMHgwMiwweGNiLDB4MDAsMHhiMywweGMwLDB4MmMsMHhmMCwweDAzLDB4ZmMsMHgxMiB9LAorICAxNiwgMHhhNmEwLCAwLCB7MHhmYiwweDAwLDB4N2YsMHhkMSwweDBmLDB4MzAsMHgwYiwweDJiLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNmIwLCAwLCB7MHg4MCwweDAwLDB4ZWQsMHgwMiwweGYxLDB4NDAsMHgzZSwweDQxLDB4MGYsMHhiMCwweDIzLDB4ZWQsMHgwMCwweGU4LDB4MDEsMHgzZSB9LAorICAxNiwgMHhhNmMwLCAwLCB7MHhjOCwweDBmLDB4YjAsMHgxMywweGVjLDB4MDQsMHhkYiwweDAwLDB4M2MsMHg4MCwweDBmLDB4MDQsMHgwMywweGU0LDB4NDAsMHhmOSB9LAorICAxNiwgMHhhNmQwLCAwLCB7MHgwMCwweDNjLDB4YzIsMHgwZSwweGIwLDB4MDMsMHhlZSwweDAwLDB4NGIsMHg0MSwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhlMCB9LAorICAxNiwgMHhhNmUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGZjLDB4MDAsMHg0YiwweDAwLDB4MzIsMHg0MiB9LAorICAxNiwgMHhhNmYwLCAwLCB7MHgwYywweGYwLDB4MDMsMHgzNiwweDgwLDB4Y2QsMHgwMCwweDMzLDB4MDAsMHg0YywweGMwLDB4ODMsMHgzYywweDA0LDB4ZjcsMHgwMCB9LAorICAxNiwgMHhhNzAwLCAwLCB7MHgzMiwweDQwLDB4MGMsMHhiMSwweDQzLDB4MTQsMHgwMCwweGNkLDB4ODAsMHgzMywweGMwLDB4MGMsMHhmMCwweDAzLDB4ZmMsMHgwMCB9LAorICAxNiwgMHhhNzEwLCAwLCB7MHhmZiwweDAwLDB4YjMsMHhjMiwweDBjLDB4YTAsMHgwMywweDAwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNzIwLCAwLCB7MHg4MSwweDA0LDB4NGYsMHgwMiwweDhiLDB4ODAsMHgyMCwweDMwLDB4MDgsMHhiYywweDAyLDB4MjAsMHgxMCwweDg5LDB4MDAsMHgyMiB9LAorICAxNiwgMHhhNzMwLCAwLCB7MHhjMCwweDAwLDB4YjAsMHgwMywweDYwLDB4MDQsMHhiOCwweDAwLDB4YTIsMHg5MCwweDI4LDB4OGMsMHgxYSwweDI0LDB4MDIsMHg4YiB9LAorICAxNiwgMHhhNzQwLCAwLCB7MHg4MywweDIyLDB4YzEsMHgwOCwweGIwLDB4MDIsMHhmYywweDAwLDB4YjMsMHg2MCwweDIwLDB4YzAsMHgwZCwweGEwLDB4MDMsMHhlMCB9LAorICAxNiwgMHhhNzUwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJlLDB4MDAsMHhhYiwweGMwLDB4MjIsMHg2MCB9LAorICAxNiwgMHhhNzYwLCAwLCB7MHgwOCwweGI4LDB4MDIsMHgyOSwweDAwLDB4ODgsMHgwMSwweDIwLDB4MDAsMHgwOCwweDkwLDB4MDIsMHgyMCwweDAwLDB4YjgsMHgwMCB9LAorICAxNiwgMHhhNzcwLCAwLCB7MHgyMiwweGMwLDB4MDgsMHhiMCwweDAyLDB4ZTQsMHgwMCwweDgxLDB4MjQsMHhhMiwweGMwLDB4MDksMHhiMCwweDQ2LDB4ZWMsMHgwMCB9LAorICAxNiwgMHhhNzgwLCAwLCB7MHhiOSwweDAwLDB4MjIsMHhjMCwweDA4LDB4OTAsMHgwMiwweDIwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhNzkwLCAwLCB7MHgwOCwweDA0LDB4MmMsMHgwMCwweGExLDB4MDAsMHhhMCwweDQxLDB4MDgsMHhiMCwweDBhLDB4MjAsMHg1MywweDg4LDB4MDAsMHgyMCB9LAorICAxNiwgMHhhN2EwLCAwLCB7MHhjMCwweDI4LDB4YTAsMHgwMiwweDRjLDB4MDAsMHhiMywweDAwLDB4MjAsMHgwMCwweDg4LDB4MDAsMHgwMiwweDg0LDB4MDAsMHg4MyB9LAorICAxNiwgMHhhN2IwLCAwLCB7MHgwNCwweDIwLDB4YzAsMHgyOCwweDMwLDB4MDIsMHhjYywweDAwLDB4YjMsMHgwMiwweDYyLDB4YzAsMHgwOSwweDEwLDB4MDIsMHhjMiB9LAorICAxNiwgMHhhN2MwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDZjLDB4MDAsMHhlOSwweDAwLDB4MjIsMHgwMCB9LAorICAxNiwgMHhhN2QwLCAwLCB7MHgwYywweGIwLDB4MDMsMHgwMCwweDA0LDB4YzksMHgwMCwweGIyLDB4MDAsMHgwYywweDkwLDB4MDMsMHgyYywweDAwLDB4ZjMsMHgwMCB9LAorICAxNiwgMHhhN2UwLCAwLCB7MHhiMiwweGMwLDB4OGMsMHhiMCwweDAzLDB4YjQsMHgwMiwweDhmLDB4MDAsMHgyMywweGMwLDB4MDQsMHhmMCwweDAzLDB4ZWMsMHgwOCB9LAorICAxNiwgMHhhN2YwLCAwLCB7MHhmOSwweDAwLDB4MzMsMHhjMCwweDBjLDB4ODAsMHgwMywweDAwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhODAwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgxMCwweGRkLDB4MDQsMHgzZiwweDAwLDB4MGYsMHhjMCwweDIzLDB4ZjAsMHg5MCwweGZkLDB4MDAsMHgyZiB9LAorICAxNiwgMHhhODEwLCAwLCB7MHhjMCwweDBmLDB4ZTAsMHg0MywweGQwLDB4MDAsMHhmYywweDAwLDB4M2YsMHgwMCwweDhmLDB4YzAsMHgyMiwweDc0LDB4MDAsMHhmZCB9LAorICAxNiwgMHhhODIwLCAwLCB7MHgwNCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmYywweDAwLDB4ZmYsMHgwNiwweDNmLDB4YzAsMHgwZiwweGMwLDB4NDMsMHhlOCB9LAorICAxNiwgMHhhODMwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZjLDB4ODAsMHhlZiwweDIwLDB4MTEsMHhjMCB9LAorICAxNiwgMHhhODQwLCAwLCB7MHgwZSwweDcyLDB4MDMsMHhiZCwweGIwLDB4Y2YsMHgzMSwweGJmLDB4Y2MsMHgwMiwweGYwLDB4MDMsMHhmYywweGM2LDB4Y2YsMHgwMSB9LAorICAxNiwgMHhhODUwLCAwLCB7MHgwYiwweGM1LDB4MGYsMHhmMSwweDAzLDB4M2MsMHgwNCwweGVmLDB4NjEsMHgzMywweGQ4LDB4MDcsMHhmMCwweDAzLDB4MzQsMHg4MCB9LAorICAxNiwgMHhhODYwLCAwLCB7MHhjZCwweDMwLDB4NzMsMHhjYywweDBmLDB4ZTgsMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhODcwLCAwLCB7MHg4MCwweDE4LDB4ZTksMHgwMCwweDg4LDB4NjksMHgyMiwweDEwLDB4MDgsMHg4YywweDAwLDB4MjEsMHg4NCwweDg4LDB4NDEsMHgyMiB9LAorICAxNiwgMHhhODgwLCAwLCB7MHgxMCwweDg4LDB4ODYsMHg5MiwweDAxLDB4MDAsMHg4OCwweDYyLDB4MjIsMHgxMCwweDRiLDB4ODcsMHgwMiwweDIxLDB4YTAsMHg4OCB9LAorICAxNiwgMHhhODkwLCAwLCB7MHg2MCwweDIwLDB4MTAsMHgwYiwweDg2LDB4YTIsMHgzNSwweGEwLDB4YWIsMHg2MCwweGExLDB4YzQsMHgwYiwweGI4LDB4MDIsMHgyMCB9LAorICAxNiwgMHhhOGEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNkLDB4YTgsMHgzMywweDQxLDB4MjAsMHhjNiB9LAorICAxNiwgMHhhOGIwLCAwLCB7MHg0YSwweDMxLDB4MDAsMHg4YywweDEwLDB4OTMsMHgzMywweDI4LDB4Y2MsMHgyOSwweDM0LDB4MTIsMHg4YywweDUwLDB4OTMsMHgxYyB9LAorICAxNiwgMHhhOGMwLCAwLCB7MHgyOCwweDg0LDB4MDEsMHgyMCwweDRhLDB4NGMsMHg0MSwweDgzLDB4MTAsMHgyNCwweGNjLDB4NGIsMHgzMSwweDQyLDB4NGMsMHg0MCB9LAorICAxNiwgMHhhOGQwLCAwLCB7MHg5MSwweDEwLDB4MjQsMHhjMCwweDBiLDB4ODAsMHgwMiwweDIyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhOGUwLCAwLCB7MHhjMCwweDA1LDB4YTgsMHgyMCwweDkwLDB4MDIsMHgyMiwweDAwLDB4MDgsMHg4MCwweDAwLDB4MjAsMHgzMCwweGI4LDB4MDgsMHgyNiB9LAorICAxNiwgMHhhOGYwLCAwLCB7MHgwMCwweDAxLDB4ODAsMHg4MiwweDIwLDB4MjAsMHgxOCwweDA4LDB4NDIsMHg0MCwweDAzLDB4OTEsMHgwMiwweDYwLDB4MDAsMHgwOCB9LAorICAxNiwgMHhhOTAwLCAwLCB7MHgwMSwweGE2LDB4MDAsMHgwYiwweDgwLDB4MDAsMHg2YywweDEwLDB4YmIsMHgwMSwweDI2LDB4YzAsMHg0YiwweDkwLDB4MGEsMHgzMCB9LAorICAxNiwgMHhhOTEwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMSwweGZkLDB4MDAsMHhmZCwweDQxLDB4MzMsMHhhMSB9LAorICAxNiwgMHhhOTIwLCAwLCB7MHgwZSwweGQyLDB4MDMsMHhiNSwweDAyLDB4ZGYsMHg0MiwweDNiLDB4MDEsMHgwZiwweGQ0LDB4NDMsMHhiNSwweDAwLDB4Y2QsMHg0MCB9LAorICAxNiwgMHhhOTMwLCAwLCB7MHgxYiwweGM0LDB4MGQsMHg3OCwweDAzLDB4NzAsMHgwMiwweGVjLDB4MDAsMHgxNywweGExLDB4MGYsMHhlOCwweDBiLDB4MmMsMHgwMiB9LAorICAxNiwgMHhhOTQwLCAwLCB7MHhkOSwweDkwLDB4MjYsMHhjMCwweDBmLDB4YWMsMHgwMywweDAwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhOTUwLCAwLCB7MHhlMCwweDAxLDB4YjgsMHgwMCwweGVlLDB4MDAsMHgxZiwweDY0LDB4NGYsMHhlMCwweDAzLDB4ZDgsMHgxMCwweGM0LDB4MTgsMHgzMyB9LAorICAxNiwgMHhhOTYwLCAwLCB7MHhjMCwweDBjLDB4YTAsMHhhMSwweGI4LDB4MDksMHhlNiwweDA5LDB4MzYsMHgyMiwweDBmLDB4ODgsMHgyMywweGJjLDB4MDAsMHhmYiB9LAorICAxNiwgMHhhOTcwLCAwLCB7MHgwMCwweDNiLDB4NjQsMHgwZiwweGQ5LDB4MDMsMHg5YywweDAwLDB4ZTMsMHgwNCwweDNiLDB4YzAsMHgwZiwweGY0LDB4MDMsMHhmOCB9LAorICAxNiwgMHhhOTgwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweDhkLDB4MDAsMHhjOSwweDQwLDB4YjYsMHg4MCB9LAorICAxNiwgMHhhOTkwLCAwLCB7MHgwZiwweDEwLDB4MDMsMHhhNywweDIwLDB4ZmIsMHg1MCwweGI2LDB4MDgsMHg0YywweDE0LDB4MDMsMHg2NSwweDIyLDB4ZDksMHg0MCB9LAorICAxNiwgMHhhOWEwLCAwLCB7MHhiNiwweDgwLDB4MGUsMHhhMCwweDBiLDB4MDAsMHgwMCwweGQ4LDB4MDAsMHg3NiwweDgyLDB4MjgsMHhhMCwweDIzLDB4NjQsMHgwMCB9LAorICAxNiwgMHhhOWIwLCAwLCB7MHhjOSwweDA0LDB4MTIsMHhjMCwweDhlLDB4ODAsMHgwMywweDkwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhOWMwLCAwLCB7MHhjOCwweDA1LDB4MmIsMHg2MCwweDhhLDB4MDksMHgyMCwweDUwLDB4MDgsMHhhMCwweDIzLDB4ZTksMHgwMCwweGI4LDB4YzAsMHgyMiB9LAorICAxNiwgMHhhOWQwLCAwLCB7MHhmMCwweDA4LDB4YWMsMHgwMiwweDI4LDB4MDQsMHg4YSwweGMyLDB4MjIsMHg1MCwweDA4LDB4OTAsMHgwNiwweDJjLDB4MDAsMHg4YiB9LAorICAxNiwgMHhhOWUwLCAwLCB7MHgwNCwweDIyLDB4NTEsMHgwOCwweDk0LDB4MDIsMHhlNCwweDA0LDB4OGIsMHgwNCwweDM3LDB4YzAsMHgwOCwweDE4LDB4NDIsMHgyNiB9LAorICAxNiwgMHhhOWYwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNCwweDRiLDB4MDAsMHg4MiwweGM4LDB4MjQsMHg0MyB9LAorICAxNiwgMHhhYTAwLCAwLCB7MHgwYiwweDI2LDB4MGEsMHg4OCwweDAwLDB4YjAsMHg4MCwweDIyLDB4ZTQsMHgwYiwweDIwLDB4NDIsMHg2OSwweDAwLDB4YTIsMHg5MCB9LAorICAxNiwgMHhhYTEwLCAwLCB7MHgyOCwweDQwLDB4ZTgsMHgxMCwweDAyLDB4MGMsMHgwMCwweGJiLDB4MDAsMHgyOCwweDUwLDB4ODgsMHg5MCwweDgyLDB4YzQsMHgwMSB9LAorICAxNiwgMHhhYTIwLCAwLCB7MHg4MywweDAwLDB4MjAsMHhjMCwweDBhLDB4MTAsMHgwMiwweGJhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhYTMwLCAwLCB7MHgyMCwweDEwLDB4NGUsMHg4MCwweDgxLDB4MDAsMHgyMSwweGE4LDB4MDgsMHg1OCwweDAyLDB4ZDYsMHgwMSwweGI3LDB4OTAsMHg2OCB9LAorICAxNiwgMHhhYTQwLCAwLCB7MHgyMCwweDAzLDB4NTksMHg4MiwweDU2LDB4MDAsMHhhNSwweDg0LDB4MmQsMHhhMiwweDE4LDB4NjksMHgyMiwweDAyLDB4MDAsMHgzNCB9LAorICAxNiwgMHhhYTUwLCAwLCB7MHg4MCwweDI5LDB4YTgsMHgwOCwweDY4LDB4MDYsMHhjNiwweDE0LDB4ODUsMHg4MiwweDI1LDB4ZTAsMHgwOCwweDU4LDB4ODIsMHgxYyB9LAorICAxNiwgMHhhYTYwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDQ4LDB4MDAsMHhjMiwweGYwLDB4MzQsMHg0MCB9LAorICAxNiwgMHhhYTcwLCAwLCB7MHgwZiwweDIwLDB4MDMsMHg4OCwweDgwLDB4ZjgsMHgxMCwweDMwLDB4YzAsMHgyNywweDIxLDB4MGIsMHg0OCwweDgwLDB4ZWEsMHgyMCB9LAorICAxNiwgMHhhYTgwLCAwLCB7MHgzOCwweDAwLDB4MGMsMHgwMCwweDEyLDB4MGMsMHgwOCwweDczLDB4MDAsMHhiOCwweDQwLDB4MGMsMHgxMiwweDIzLDB4NGMsMHgwMiB9LAorICAxNiwgMHhhYTkwLCAwLCB7MHg0MywweDM0LDB4MzAsMHhjMCwweDBlLDB4MTEsMHgwMywweDkyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhYWEwLCAwLCB7MHg0MCwweDE1LDB4YWMsMHg5MCwweGY5LDB4MDEsMHgyZSwweDg4LDB4NGIsMHg5MCwweDExLDB4NjQsMHgwMCwweGZiLDB4MTAsMHgzMiB9LAorICAxNiwgMHhhYWIwLCAwLCB7MHgwMCwweDAwLDB4OTEsMHgwMywweGE0LDB4MDAsMHhjOSwweDAwLDB4MzIsMHhjNCwweDRkLDB4YjAsMHg0MywweGUwLDB4MDQsMHhjOCB9LAorICAxNiwgMHhhYWMwLCAwLCB7MHgwMCwweDM2LDB4ODksMHgwZiwweGE4LDB4MDMsMHhlZCwweDAwLDB4ZjksMHgxNCwweDNlLDB4YzAsMHgwZiwweDEwLDB4NDMsMHhkMCB9LAorICAxNiwgMHhhYWQwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGU4LDB4MDAsMHhjOCwweDAwLDB4M2EsMHgwMCB9LAorICAxNiwgMHhhYWUwLCAwLCB7MHgwYywweDAwLDB4NTMsMHhhMCwweDAwLDB4ZTgsMHgwMSwweDMyLDB4MDEsMHgwZSwweDgwLDB4NTMsMHgyMCwweDEwLDB4YzgsMHgwMCB9LAorICAxNiwgMHhhYWYwLCAwLCB7MHgzYSwweDQwLDB4MGMsMHg5MCwweDAzLDB4MjAsMHgxMCwweGU4LDB4MDQsMHhiNiwweDAwLDB4ODQsMHg4MCwweDAzLDB4MmQsMHgxMiB9LAorICAxNiwgMHhhYjAwLCAwLCB7MHhjYiwweDAwLDB4MmUsMHhjYSwweDA0LDB4OTAsMHgwMywweGVhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhYjEwLCAwLCB7MHg0YywweDE5LDB4OGMsMHgwMCwweDg3LDB4MDIsMHgyMSwweGMwLDB4MDgsMHg3MCwweDAyLDB4MGMsMHgwMCwweDgzLDB4MDAsMHgyMSB9LAorICAxNiwgMHhhYjIwLCAwLCB7MHhjMCwweDA4LDB4MzAsMHg2MiwweDRjLDB4MDQsMHg4MywweDAwLDB4MjEsMHg4MCwweDQ4LDB4ZTAsMHgxMiwweDNjLDB4MDAsMHg4NyB9LAorICAxNiwgMHhhYjMwLCAwLCB7MHgwMCwweDIxLDB4YzAsMHgwOCwweDcwLDB4MDIsMHgxYywweDAwLDB4ODUsMHgwMSwweDI0LDB4ZDAsMHgwYSwweDUwLDB4MDIsMHhmMiB9LAorICAxNiwgMHhhYjQwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHgwMCwweDlhLDB4MDAsMHg4MCwweDgwLDB4MjgsMHgyMCB9LAorICAxNiwgMHhhYjUwLCAwLCB7MHgwOCwweDRjLDB4MjIsMHhkMiwweDAwLDB4YTQsMHg4MCwweDI0LDB4MzAsMHgwYiwweDQ4LDB4MDIsMHg1MiwweDAwLDB4ODQsMHhjMCB9LAorICAxNiwgMHhhYjYwLCAwLCB7MHgyMSwweDIwLDB4MDksMHg0OCwweDY4LDB4MTMsMHgwMCwweGE0LDB4ODAsMHg2MCwweDIwLDB4MDksMHgwOCwweDAyLDB4NTYsMHgwMCB9LAorICAxNiwgMHhhYjcwLCAwLCB7MHg5NywweDgwLDB4MmQsMHhlMCwweDg4LDB4NTgsMHgwMiwweGUwLDB4MTAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhYjgwLCAwLCB7MHg2YywweDA0LDB4Y2MsMHgwMCwweDgzLDB4ODAsMHgyMCwweGQ4LDB4MDgsMHgzMCwweDAyLDB4NGMsMHg0MCwweDgzLDB4MDAsMHgyNCB9LAorICAxNiwgMHhhYjkwLCAwLCB7MHhkMSwweDA5LDB4YjksMHg0MiwweDRlLDB4MDAsMHg4MywweDAwLDB4MjAsMHhjMSwweDg5LDB4MzAsMHg0MiwweDBjLDB4MDAsMHg4MyB9LAorICAxNiwgMHhhYmEwLCAwLCB7MHhmMCwweGEwLDB4ZDksMHgxOSwweDM2LDB4MjIsMHg2NiwweDA2LDB4OTEsMHgwMCwweDBjLDB4YzEsMHgwYSwweDEwLDB4MDIsMHhjMiB9LAorICAxNiwgMHhhYmIwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGU4LDB4MDIsMHhjYSwweGE1LDB4MmEsMHg5MSB9LAorICAxNiwgMHhhYmMwLCAwLCB7MHgyOCwweGE4LDB4MDMsMHhlYSwweDAyLDB4YWEsMHgwMCwweGI2LDB4YTAsMHgwZiwweGEwLDB4MGEsMHgyYSwweDkyLDB4Y2EsMHg4MyB9LAorICAxNiwgMHhhYmQwLCAwLCB7MHhiYSwweDgwLDB4MjksMHhhMCwweDAzLDB4MmIsMHgwMCwweGVhLDB4NDAsMHg2NiwweDkwLDB4MmQsMHhlNCwweDBiLDB4NmEsMHg4MCB9LAorICAxNiwgMHhhYmUwLCAwLCB7MHhkYSwweDAwLDB4M2UsMHg4MCwweDBjLDB4ZTAsMHgwMywweGZhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhYmYwLCAwLCB7MHg0OCwweDAxLDB4ODAsMHgwMCwweGZjLDB4MDAsMHgzZCwweDAwLDB4MGYsMHhjMCwweDAzLDB4YjAsMHgxNCwweGZjLDB4MDAsMHgzYiB9LAorICAxNiwgMHhhYzAwLCAwLCB7MHgxMiwweDBlLDB4YzAsMHg0MywweGIxLDB4MTQsMHhmYywweDAwLDB4M2QsMHgwMCwweDBlLDB4YzAsMHgwMywweGYwLDB4MjAsMHhmNCB9LAorICAxNiwgMHhhYzEwLCAwLCB7MHgwMCwweDMxLDB4MDAsMHgwZSwweDQ0LDB4MTMsMHhhMCwweDAwLDB4ZTgsMHgwNiwweDM2LDB4MDAsMHg0ZiwweDgwLDB4MTMsMHhkMiB9LAorICAxNiwgMHhhYzIwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGE0LDB4MDAsMHhkMSwweDAwLDB4MzYsMHg2MCB9LAorICAxNiwgMHhhYzMwLCAwLCB7MHgxYywweDE4LDB4MGIsMHg0NiwweDAwLDB4ZDksMHg4MCwweDMwLDB4NDAsMHgyYywweDk4LDB4MDUsMHg4NiwweDAwLDB4YzEsMHg4MCB9LAorICAxNiwgMHhhYzQwLCAwLCB7MHg5MiwweDQwLDB4MGQsMHgxMCwweDAzLDB4NDQsMHgwMiwweDg5LDB4MDAsMHgzMiwweDcwLDB4MGMsMHg5OCwweDAxLDB4MjQsMHgwMCB9LAorICAxNiwgMHhhYzUwLCAwLCB7MHhjOSwweDA0LDB4MzAsMHg0MCwweDBjLDB4OTAsMHgwMywweGMyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhYzYwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHg5NCwweDAyLDB4MjQsMHg4MCwweDg5LDB4MDEsMHgyMiB9LAorICAxNiwgMHhhYzcwLCAwLCB7MHg0MCwweDQ4LDB4OTEsMHgwMiwweDI0LDB4MDAsMHhkOSwweDkwLDB4MjIsMHg0MSwweDA4LDB4OTAsMHgxMiwweDI0LDB4MTAsMHg4OSB9LAorICAxNiwgMHhhYzgwLCAwLCB7MHgwMCwweDMyLDB4NDAsMHgwOCwweDk1LDB4MTIsMHgyNCwweDAyLDB4ODEsMHgwMCwweGEyLDB4NDEsMHgwZCwweDkwLDB4NDIsMHhlMCB9LAorICAxNiwgMHhhYzkwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzgsMHgwNSwweDI0LDB4MDIsMHg5ZCwweDAwLDB4MjMsMHg0NCB9LAorICAxNiwgMHhhY2EwLCAwLCB7MHgwOCwweGQyLDB4MDYsMHg3NCwweDgwLDB4YjUsMHgyMCwweDIzLDB4NDAsMHgxYSwweGQwLDB4MDYsMHgzNSwweDkwLDB4OGQsMHgwMiB9LAorICAxNiwgMHhhY2IwLCAwLCB7MHgyZiwweDQ0LDB4MTksMHhkMCwweDAyLDB4NzQsMHgwMCwweDhkLDB4MDAsMHg2MywweDQwLDB4MTgsMHhkNCwweDAyLDB4YTQsMHgxMSB9LAorICAxNiwgMHhhY2MwLCAwLCB7MHg4OSwweDAwLDB4MjIsMHg0MCwweDA4LDB4YjAsMHgwMiwweGM2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhY2QwLCAwLCB7MHgyOCwweDE0LDB4MDQsMHg4MCwweDg1LDB4MjAsMHgyMSwweDY4LDB4MDgsMHg1MiwweDAyLDB4MTQsMHg4MCwweGE1LDB4MjAsMHhhMSB9LAorICAxNiwgMHhhY2UwLCAwLCB7MHg0OCwweDBhLDB4NzIsMHgzOCwweDE0LDB4ODAsMHg5NSwweDI0LDB4MmQsMHg0OCwweDI4LDB4NTIsMHgwMiwweDE0LDB4ODAsMHg4NSB9LAorICAxNiwgMHhhY2YwLCAwLCB7MHgyMCwweDIxLDB4NDgsMHgwOCwweDUyLDB4MDYsMHg4NCwweDgwLDB4ODEsMHgyMCwweDIwLDB4NGEsMHgwOSwweDEwLDB4MDIsMHhjMiB9LAorICAxNiwgMHhhZDAwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzgsMHgwZCwweDYxLDB4NDAsMHhkOCwweDUwLDB4YjIsMHgxNCB9LAorICAxNiwgMHhhZDEwLCAwLCB7MHgyOCwweGEwLDB4MDMsMHg2MSwweDQwLDB4ZjgsMHg1MCwweDMyLDB4OTQsMHg0ZSwweDg1LDB4MDQsMHgyMSwweDQyLDB4YzgsMHg1MCB9LAorICAxNiwgMHhhZDIwLCAwLCB7MHgzYywweDE0LDB4MGQsMHg4MCwweDAzLDB4NjEsMHg0MCwweDg4LDB4NTAsMHhiMiwweDE0LDB4MmMsMHhjNSwweDA5LDB4YTEsMHg0MCB9LAorICAxNiwgMHhhZDMwLCAwLCB7MHhjOCwweDUwLDB4MzIsMHgxYywweDBjLDB4ODAsMHgwMywweGVlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhZDQwLCAwLCB7MHg5OCwweDE1LDB4ZTQsMHg0MCwweGY5LDB4MTAsMHgzYSwweDQ0LDB4MGYsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGQ5LDB4MTQsMHgzZSB9LAorICAxNiwgMHhhZDUwLCAwLCB7MHg0NCwweDBkLDB4OTEsMHg0MywweDY0LDB4NDAsMHhlOSwweDEwLDB4MzIsMHg0NCwweDA3LDB4OTMsMHhjMywweGU0LDB4NTAsMHhkMSB9LAorICAxNiwgMHhhZDYwLCAwLCB7MHgxMCwweDdlLDB4NDQsMHgwMywweDkxLDB4MDEsMHg1NCwweDQ0LDB4ZmQsMHgxNCwweDNlLDB4NDAsMHgwZiwweGQwLDB4MDMsMHhlNiB9LAorICAxNiwgMHhhZDcwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGY2LDB4ODAsMHhkZCwweGEwLDB4MzMsMHg2OCB9LAorICAxNiwgMHhhZDgwLCAwLCB7MHgxZSwweGRhLDB4MDMsMHgzNiwweDkwLDB4Y2QsMHhhMCwweDNiLDB4NjgsMHgwYSwweGQ4LDB4MjMsMHg3NiwweDBjLDB4ZWQsMHg4MCB9LAorICAxNiwgMHhhZDkwLCAwLCB7MHgyYiwweDYyLDB4MGIsMHg5OSwweDAyLDB4YTcsMHg4MCwweGY5LDB4ZTEsMHgzNywweDY4LDB4MGMsMHhkYSwweDAzLDB4MjcsMHg4MCB9LAorICAxNiwgMHhhZGEwLCAwLCB7MHhjOSwweGEyLDB4MjIsMHg2OCwweDRjLDB4NTAsMHgwMywweGM2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhZGIwLCAwLCB7MHgzOCwweDE4LDB4ZTEsMHg0MCwweDg4LDB4NTAsMHgyMiwweDE0LDB4MDgsMHg4MCwweDIyLDB4NjAsMHgwMCwweDg4LDB4MDQsMHgyMiB9LAorICAxNiwgMHhhZGMwLCAwLCB7MHgwMCwweDA4LDB4MDQsMHgyNiwweDAxLDB4MDAsMHg4OCwweDUwLDB4MjIsMHgxMCwweDA4LDB4YWYsMHgwMiwweDIzLDB4MDAsMHg4OCB9LAorICAxNiwgMHhhZGQwLCAwLCB7MHhjMCwweGEwLDB4MTAsMHg4OCwweDg0LDB4MDIsMHgyMywweDgwLDB4YTAsMHg0MCwweDJhLDB4MTAsMHgwOCwweDgwLDB4MTIsMHg0ZSB9LAorICAxNiwgMHhhZGUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwMCwweDg0LDB4MDAsMHg4MSwweDAxLDB4MjAsMHg0MCB9LAorICAxNiwgMHhhZGYwLCAwLCB7MHgwYSwweDE0LDB4MDIsMHg0NSwweDAwLDB4ODEsMHg0MSwweDJjLDB4NTAsMHgwYiwweDE0LDB4MDIsMHgwNSwweDA0LDB4YTEsMHgwMCB9LAorICAxNiwgMHhhZTAwLCAwLCB7MHgyOCwweDQwLDB4ODIsMHgxMCwweDAyLDB4ODQsMHg0MCwweGExLDB4MzIsMHg4MCwweDUwLDB4MDksMHgxNCwweDAyLDB4MDQsMHhjNCB9LAorICAxNiwgMHhhZTEwLCAwLCB7MHg5MSwweDEwLDB4NjQsMHg0NCwweDI4LDB4MTAsMHgwMiwweGQyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhZTIwLCAwLCB7MHgxOCwweDA0LDB4YWMsMHgwMiwweDgxLDB4MDAsMHgyMiwweGMxLDB4MDgsMHg5MCwweDAyLDB4NDQsMHgwMiwweDg5LDB4MDIsMHgyNiB9LAorICAxNiwgMHhhZTMwLCAwLCB7MHg0MSwweDA5LDB4OTAsMHgwYSwweDI0LDB4MGMsMHg4OSwweDA0LDB4MjIsMHg1MCwweDA4LDB4OTAsMHgyNiwweDI0LDB4MDAsMHg4OSB9LAorICAxNiwgMHhhZTQwLCAwLCB7MHgwMCwweDIyLDB4NDEsMHgwOSwweDEwLDB4MjIsMHgyNCwweDQwLDB4YjksMHgwMSwweDJlLDB4NDAsMHgwOCwweDkwLDB4MDIsMHg0NiB9LAorICAxNiwgMHhhZTUwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU0LDB4MTAsMHg4OSwweDAwLDB4MzIsMHg0MCB9LAorICAxNiwgMHhhZTYwLCAwLCB7MHgwYSwweDkwLDB4MGIsMHgyNCwweDEwLDB4ODksMHgwMCwweDFlLDB4NDAsMHg5YiwweDkwLDB4MDIsMHgyNCwweDEwLDB4MjksMHgwMCB9LAorICAxNiwgMHhhZTcwLCAwLCB7MHgxYSwweDQwLDB4MGUsMHg5NCwweDQxLDB4YTQsMHgwMCwweDI5LDB4MDAsMHgxMiwweDQwLDB4MDUsMHg5MCwweDQxLDB4MjYsMHgwMCB9LAorICAxNiwgMHhhZTgwLCAwLCB7MHhkOSwweDAwLDB4MjQsMHg0MCwweDBjLDB4OTAsMHgwMywweGU4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhZTkwLCAwLCB7MHg0OCwweDAxLDB4YTQsMHgwMiwweGE5LDB4MDAsMHhiYywweDQwLDB4MGYsMHg5MCwweDAzLDB4YTQsMHgwNCwweGY5LDB4MDAsMHgzYSB9LAorICAxNiwgMHhhZWEwLCAwLCB7MHg0MSwweDBlLDB4OTAsMHg4MywweDg0LDB4MDAsMHhmOSwweDAwLDB4M2MsMHg0MCwweDBlLDB4OTAsMHgwMiwweGM0LDB4MDgsMHhlOSB9LAorICAxNiwgMHhhZWIwLCAwLCB7MHgwMCwweDNhLDB4NDAsMHgyZSwweDkwLDB4MGIsMHhlNiwweDAwLDB4ZTEsMHgwNCwweDNhLDB4NDAsMHgwZiwweDkyLDB4MDMsMHg1YSB9LAorICAxNiwgMHhhZWMwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGEwLDB4MjAsMHhkOCwweDAwLDB4MzYsMHgwMiB9LAorICAxNiwgMHhhZWQwLCAwLCB7MHgwZSwweDAwLDB4YTMsMHhlMCwweDE4LDB4YzAsMHgwMCwweDMwLDB4MDMsMHgwZiwweDgwLDB4MzMsMHgyMCwweDAwLDB4NDAsMHgwMCB9LAorICAxNiwgMHhhZWUwLCAwLCB7MHgzMiwweDBkLDB4MGYsMHgwNCwweDBiLDB4YTAsMHgwMiwweGM4LDB4MDIsMHgzMiwweDAyLDB4OGMsMHg4MiwweDAzLDB4MjAsMHgwMiB9LAorICAxNiwgMHhhZWYwLCAwLCB7MHhjOCwweDA0LDB4MTYsMHgwMCwweDRlLDB4ODAsMHgwMSwweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhZjAwLCAwLCB7MHgyOCwweDA1LDB4M2IsMHgwMCwweDhlLDB4ZDgsMHgyMywweDgwLDB4MDgsMHhlMCwweDAyLDB4ZjgsMHg4MCwweDhlLDB4MTAsMHgyMyB9LAorICAxNiwgMHhhZjEwLCAwLCB7MHhhMiwweDBiLDB4ZTAsMHg4MiwweDdhLDB4MjAsMHg4ZSwweDMwLDB4MjMsMHhhMSwweDBiLDB4ZTAsMHgwMiwweDI4LDB4MDAsMHg4ZSB9LAorICAxNiwgMHhhZjIwLCAwLCB7MHgwMCwweDJiLDB4ODgsMHgwOCwweGU0LDB4NDIsMHgzOCwweDAwLDB4OGUsMHgwNCwweDIzLDB4ODAsMHgwOCwweGEwLDB4MDIsMHgwYSB9LAorICAxNiwgMHhhZjMwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDZmLDB4NDAsMHg5MywweGM2LDB4MjQsMHg0MCB9LAorICAxNiwgMHhhZjQwLCAwLCB7MHgwYSwweDM4LDB4MDIsMHhjYywweDAwLDB4ODMsMHgwMSwweGFjLDB4ZjAsMHgwYiwweGI0LDB4MDIsMHg0YywweDA0LDB4YTMsMHg4MCB9LAorICAxNiwgMHhhZjUwLCAwLCB7MHgyOCwweGQwLDB4NGIsMHgzMCwweDAyLDB4NGMsMHgwMCwweGFiLDB4MDQsMHgyYSwweGMwLDB4MmEsMHgzMCwweDBhLDB4YWMsMHgxMCB9LAorICAxNiwgMHhhZjYwLCAwLCB7MHg5MywweDAwLDB4MjAsMHhjMSwweDBhLDB4MzEsMHgwMiwweDBhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhZjcwLCAwLCB7MHg4MCwweDExLDB4MWMsMHgwMCwweDgyLDB4MDAsMHgyMSwweDQyLDB4ODgsMHg3NCwweDA2LDB4ZGMsMHgwYiwweDg2LDB4MDIsMHgyZCB9LAorICAxNiwgMHhhZjgwLCAwLCB7MHg4MCwweDBiLDB4NzAsMHgyYSwweDU4LDB4MDAsMHhhNiwweDAwLDB4YTksMHhjMCwweDBiLDB4NzAsMHgwMiwweDVjLDB4ODgsMHhhNyB9LAorICAxNiwgMHhhZjkwLCAwLCB7MHgyMCwweDI5LDB4YzAsMHgwYSwweDcwLDB4MDIsMHg5YywweDEwLDB4OTcsMHgyMCwweGExLDB4YzgsMHgwOCwweGQ4LDB4MDIsMHgyOCB9LAorICAxNiwgMHhhZmEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwOCwweDBlLDB4MDAsMHhkNywweDgwLDB4MzcsMHg2MCB9LAorICAxNiwgMHhhZmIwLCAwLCB7MHgwZSwweDY4LDB4MTMsMHhmZSwweDAwLDB4Y2YsMHg4MCwweDNkLDB4ZTAsMHgwZiwweDc4LDB4MjMsMHgxZSwweDAwLDB4ZWYsMHg4MiB9LAorICAxNiwgMHhhZmMwLCAwLCB7MHgzMSwweGUwLDB4MGYsMHgzYywweGMzLDB4N2UsMHgwNCwweGVmLDB4ODAsMHhiMSwweGUwLDB4MGUsMHhlOCwweDAzLDB4YmUsMHg4MCB9LAorICAxNiwgMHhhZmQwLCAwLCB7MHhkNywweGUwLDB4MzMsMHhlYSwweDBlLDB4NzgsMHgwMywweDJhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhhZmUwLCAwLCB7MHgwOCwweDE1LDB4YWMsMHgwMCwweGZhLDB4MDEsMHgzZSwweDAwLDB4MGYsMHhiMCwweDAzLDB4ZTAsMHgwNCwweGY4LDB4MDAsMHgzMiB9LAorICAxNiwgMHhhZmYwLCAwLCB7MHg4MCwweDBmLDB4ODAsMHg0MywweGFjLDB4MGEsMHhkOCwweDAwLDB4MzYsMHg0MCwweDBmLDB4YjAsMHgwMywweDJjLDB4MGMsMHhkYiB9LAorICAxNiwgMHhiMDAwLCAwLCB7MHgwMCwweDI2LDB4YzEsMHgwOSwweGEwLDB4MTMsMHg2YywweDQwLDB4ZWIsMHg0MCwweDNhLDB4ZGMsMHgwZiwweDkwLDB4MGIsMHhjMiB9LAorICAxNiwgMHhiMDEwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNCwweGJlLDB4MDAsMHhjZiwweDgxLDB4MzMsMHhlOSB9LAorICAxNiwgMHhiMDIwLCAwLCB7MHgxZiwweGY5LDB4MTMsMHhiNiwweDUwLDB4ZWYsMHg4MCwweDFmLDB4ZTQsMHgwNCwweGM4LDB4MDMsMHg3ZSwweDAwLDB4NmQsMHg4MSB9LAorICAxNiwgMHhiMDMwLCAwLCB7MHgzMywweDY0LDB4MGMsMHhmOCwweDFiLDB4M2UsMHgyMCwweDJmLDB4ODgsMHg5MywweGU4LDB4MGYsMHhmYiwweDAzLDB4MmUsMHg4MCB9LAorICAxNiwgMHhiMDQwLCAwLCB7MHhjZiwweGMwLDB4NzMsMHhlMCwweDJjLDB4ZDksMHgwMywweGQwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMDUwLCAwLCB7MHhhOCwweDE4LDB4OTAsMHg0MiwweDg5LDB4MTgsMHgyMSwweGMwLDB4MWYsMHg3MSwweDAyLDB4MTQsMHhjMCwweGY3LDB4MjAsMHgyNyB9LAorICAxNiwgMHhiMDYwLCAwLCB7MHg0MCwweDQwLDB4NzEsMHgxMiwweDE4LDB4MDAsMHg4NywweDIwLDB4MjEsMHg4MCwweDQ4LDB4NzEsMHgwMiwweDNjLDB4MDgsMHg4NyB9LAorICAxNiwgMHhiMDcwLCAwLCB7MHgyMCwweDIxLDB4ODIsMHgwYiwweDYxLDB4YTIsMHgxZSwweDQ0LDB4ZGYsMHgwMSwweDMxLDB4YzgsMHgwOCwweDczLDB4MDIsMHhlYSB9LAorICAxNiwgMHhiMDgwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwMCwweDhjLDB4MDAsMHg4NywweDAwLDB4MjEsMHhjOCB9LAorICAxNiwgMHhiMDkwLCAwLCB7MHgwYiwweDcwLDB4MDIsMHg5YywweDA5LDB4ODcsMHgwMiwweDJkLDB4ODIsMHg5OSwweDQwLDB4MDIsMHgwNCwweDAwLDB4YTUsMHgwOSB9LAorICAxNiwgMHhiMGEwLCAwLCB7MHgyMSwweDQwLDB4MTksMHg3MCwweDAyLDB4MWMsMHgwMCwweDg3LDB4MDUsMHgyNSwweDQ4LDB4NGIsMHg3MiwweDAyLDB4MGMsMHg0MCB9LAorICAxNiwgMHhiMGIwLCAwLCB7MHg4NywweDAwLDB4YTEsMHhjMCwweDQ4LDB4NTAsMHgwMiwweGM0LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMGMwLCAwLCB7MHg2OCwweDA0LDB4YzEsMHgyMCwweDg5LDB4NGMsMHhhMCwweGI0LDB4MGEsMHgzOCwweDAyLDB4MjIsMHgwMCwweGExLDB4ZDAsMHgyNCB9LAorICAxNiwgMHhiMGQwLCAwLCB7MHgzMCwweDA5LDB4ODAsMHgwMiwweDI3LDB4NDQsMHg4MSwweGM2LDB4MjIsMHgxNCwweDA5LDB4M2QsMHgyYSwweDBmLDB4MDIsMHg4YiB9LAorICAxNiwgMHhiMGUwLCAwLCB7MHhjMCwweGE2LDB4MjAsMHgwYiwweDI0LDB4MDAsMHgwYywweDEwLDB4OTMsMHg4MSwweDIwLDB4YzAsMHg0OCwweDMwLDB4MDYsMHhkOCB9LAorICAxNiwgMHhiMGYwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgxNSwweGExLDB4MDAsMHg4OSwweGMxLDB4MzIsMHhkMSB9LAorICAxNiwgMHhiMTAwLCAwLCB7MHgwMywweGJjLDB4MDMsMHhhOSwweDIwLDB4ODksMHg0MSwweDNlLDB4NjAsMHg4NSwweGJjLDB4OGIsMHgyNSwweDQwLDB4ZWIsMHg0MSB9LAorICAxNiwgMHhiMTEwLCAwLCB7MHhhMiwweGEwLDB4MGQsMHhmMCwweDEzLDB4M2UsMHgyMCwweGNmLDB4OTAsMHgzNiwweDMwLDB4NGYsMHhiYywweDBiLDB4M2MsMHgwMCB9LAorICAxNiwgMHhiMTIwLCAwLCB7MHhjZiwweDgwLDB4MzMsMHhjMSwweDBjLDB4YjEsMHgwMywweGVhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMTMwLCAwLCB7MHg4MCwweDAwLDB4ZWQsMHgwMCwweGY4LDB4MDEsMHgzYywweGQwLDB4MGYsMHhiMywweDAzLDB4ZTgsMHg4MiwweGQ4LDB4MjAsMHgzNiB9LAorICAxNiwgMHhiMTQwLCAwLCB7MHg4MCwweDJlLDB4YjIsMHgxMywweGUxLDB4MDAsMHhmYSwweDAwLDB4N2UsMHhjOCwweDJlLDB4YjAsMHgwMywweGVjLDB4ODAsMHhkYiB9LAorICAxNiwgMHhiMTUwLCAwLCB7MHgxMCwweDNhLDB4MDgsMHg0ZiwweGIyLDB4MjMsMHhjYywweDAyLDB4ZmIsMHgxMCwweDNhLDB4YzAsMHgwZiwweDkwLDB4MDMsMHhlNCB9LAorICAxNiwgMHhiMTYwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxMCwweGYwLDB4MDAsMHhjZCwweDEwLDB4MzMsMHg0MiB9LAorICAxNiwgMHhiMTcwLCAwLCB7MHgwYywweGNhLDB4MjMsMHg3YywweDAwLDB4Y2YsMHgwMCwweDMzLDB4NjIsMHgwNiwweGYwLDB4MDEsMHgzYSwweDAwLDB4Y2YsMHgwOCB9LAorICAxNiwgMHhiMTgwLCAwLCB7MHgzMywweDgwLDB4MWMsMHhmMCwweDgxLDB4M2MsMHgwMCwweGZmLDB4MDAsMHgzMywweGEwLDB4MGMsMHhjYSwweDAxLDB4ZmMsMHgwNCB9LAorICAxNiwgMHhiMTkwLCAwLCB7MHhjZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGMwLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMWEwLCAwLCB7MHhhMSwweDA0LDB4NmQsMHg0MCwweDg4LDB4NDgsMHhhMiwweDMxLDB4MDgsMHgxMCwweDAyLDB4MjAsMHgxMCwweDg4LDB4YjQsMHgyMiB9LAorICAxNiwgMHhiMWIwLCAwLCB7MHhhMCwweDA4LDB4ODAsMHgwMCwweDZhLDB4ODQsMHg4OCwweDIwLDB4MjIsMHg1MiwweDA4LDB4YjAsMHgwYSwweDJjLDB4MTAsMHhiYiB9LAorICAxNiwgMHhiMWMwLCAwLCB7MHgwMCwweDMyLDB4YjMsMHg4OCwweDgwLDB4MDIsMHhlYywweDAwLDB4ZGIsMHgwMCwweDJlLDB4YzAsMHgwYiwweDkwLDB4MTIsMHhlMSB9LAorICAxNiwgMHhiMWQwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDAwLDB4MTAsMHg4YSwweDAxLDB4MjIsMHhhMCB9LAorICAxNiwgMHhiMWUwLCAwLCB7MHgwOCwweGIwLDB4NDIsMHg2MCwweDIwLDB4ODAsMHgwMCwweDIwLDB4NDQsMHgxYSwweDgwLDB4MWEsMHhlNCwweDQyLDB4YTAsMHgwNiB9LAorICAxNiwgMHhiMWYwLCAwLCB7MHgyMiwweDAwLDB4NzgsMHgzMCwweDAyLDB4YWMsMHgwMCwweGJiLDB4MDAsMHhhMiwweDQ0LDB4MDgsMHhiMCwweDEyLDB4ZWMsMHgwMCB9LAorICAxNiwgMHhiMjAwLCAwLCB7MHg4YiwweDAwLDB4MGUsMHhjMCwweDBiLDB4OTAsMHgwMiwweGUwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMjEwLCAwLCB7MHgwOCwweDE0LDB4MDAsMHgwOCwweDgwLDB4MDAsMHgyMCwweDgxLDB4MDgsMHgzMCwweDAyLDB4NDAsMHgxMiwweDgwLDB4MDAsMHhhMCB9LAorICAxNiwgMHhiMjIwLCAwLCB7MHg0MCwweDA4LDB4YjAsMHgwMiwweGMwLDB4MDAsMHg4MiwweDAwLDB4MDAsMHg4MCwweDA4LDB4MzAsMHgwMiwweDhjLDB4MDAsMHhiYiB9LAorICAxNiwgMHhiMjMwLCAwLCB7MHgwMCwweDIwLDB4MDAsMHgwOCwweDIwLDB4MDIsMHhjYywweDgwLDB4OTMsMHgwMCwweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhjMiB9LAorICAxNiwgMHhiMjQwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDYwLDB4MDAsMHhjYSwweDE0LDB4MzIsMHgwMCB9LAorICAxNiwgMHhiMjUwLCAwLCB7MHgwYywweGIwLDB4MDMsMHg0YywweDAwLDB4Y2EsMHgwMCwweDMyLDB4MDAsMHgwZSwweDAwLDB4MTIsMHhhMCwweDAwLDB4YzAsMHgwMCB9LAorICAxNiwgMHhiMjYwLCAwLCB7MHg3MCwweDAwLDB4MjgsMHhmMCwweDEzLDB4YWMsMHgwMCwweGZiLDB4MDAsMHgzMiwweDQwLDB4MmMsMHgxMCwweDQzLDB4ZWMsMHgwMCB9LAorICAxNiwgMHhiMjcwLCAwLCB7MHhjZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4OTAsMHgwMywweGMwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMjgwLCAwLCB7MHgyMCwweDE1LDB4ZjAsMHgwMiwweGZjLDB4MDAsMHgxZiwweDAwLDB4NjcsMHg3MCwweDAzLDB4YjAsMHgwMCwweGZjLDB4MDAsMHgzZiB9LAorICAxNiwgMHhiMjkwLCAwLCB7MHgwMCwweDJkLDB4YzAsMHgwMywweDMwLDB4MTAsMHhmYywweDAxLDB4YmYsMHgwMCwweDBmLDB4NzAsMHgwMywweDdjLDB4MDAsMHhmNyB9LAorICAxNiwgMHhiMmEwLCAwLCB7MHgwNCwweDNiLDB4MDAsMHgwZiwweGMwLDB4MTMsMHhmZCwweDEwLDB4ZmYsMHgwMCwweDNkLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhlOCB9LAorICAxNiwgMHhiMmIwLCAwLCB7MHgxMiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGY0LDB4YzAsMHhjZiwweDgwLDB4MzMsMHg2MCB9LAorICAxNiwgMHhiMmMwLCAwLCB7MHgwZSwweGM5LDB4MTMsMHgzNiwweDUwLDB4Y2UsMHg4NiwweDNmLDB4MDgsMHgwYywweGMwLDB4MDMsMHgzZSwweDAyLDB4ZDcsMHg4MCB9LAorICAxNiwgMHhiMmQwLCAwLCB7MHgzOSwweGUwLDB4MGYsMHhmOCwweDEzLDB4M2UsMHg0MCwweGM3LDB4MzAsMHgzYiwweGNlLDB4MGQsMHhmNiwweDAzLDB4M2QsMHg4OCB9LAorICAxNiwgMHhiMmUwLCAwLCB7MHhjZiwweDMxLDB4MzMsMHhlNCwweDBmLDB4NzgsMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMmYwLCAwLCB7MHg4MCwweDEwLDB4ZTUsMHhkMCwweGRiLDB4ODAsMHg3MiwweDYwLDB4ODgsMHg5MiwweDAyLDB4ZTQsMHgxMCwweDhhLDB4ODAsMHgyZSB9LAorICAxNiwgMHhiMzAwLCAwLCB7MHgzNCwweDRhLDB4OGMsMHgwMywweDJlLDB4MDAsMHhhYiwweDgwLDB4MDIsMHhlMCwweDBiLDB4YjgsMHgwMiwweDJjLDB4ODAsMHg4ZiB9LAorICAxNiwgMHhiMzEwLCAwLCB7MHg2MCwweDEzLDB4ZDgsMHg0YSwweDc2LDB4MDIsMHg5ZCwweDg0LDB4YWYsMHgzMCwweDIyLDB4NDgsMHgwYiwweDg4LDB4MTIsMHhhMCB9LAorICAxNiwgMHhiMzIwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGM0LDB4MDAsMHg4YiwweDAwLDB4MjQsMHgwMCB9LAorICAxNiwgMHhiMzMwLCAwLCB7MHg0YSwweDAwLDB4MDIsMHhhYywweDgwLDB4ODMsMHgwMCwweDJjLDB4MDEsMHgyOCwweDA0LDB4MDIsMHhhYywweDAwLDB4OGIsMHgwMSB9LAorICAxNiwgMHhiMzQwLCAwLCB7MHgyMCwweGMwLDB4MDMsMHhiMCwweDAyLDB4MGMsMHg4MCwweDgzLDB4NDAsMHgyMCwweGMxLDB4YTgsMHgzNCwweDIyLDB4OGQsMHgxMyB9LAorICAxNiwgMHhiMzUwLCAwLCB7MHg4MywweDIwLDB4YWMsMHhjOCwweDBiLDB4YjAsMHgwMiwweDYyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiMzYwLCAwLCB7MHhjMCwweDE1LDB4ODYsMHgwMCwweDliLDB4MDQsMHhhZSwweDAwLDB4MGEsMHg5MCwweDAyLDB4ZWMsMHgwMCwweDBiLDB4MTQsMHgyZSB9LAorICAxNiwgMHhiMzcwLCAwLCB7MHhjNiwweDAyLDB4YjEsMHgxMiwweDZjLDB4MDAsMHhhYiwweDIwLDB4MmEsMHhjMSwweDBiLDB4YjAsMHg0MiwweDJjLDB4MDAsMHg4YiB9LAorICAxNiwgMHhiMzgwLCAwLCB7MHgwMiwweDI2LDB4YzEsMHgwYSwweGIwLDB4MDIsMHhhYywweDAwLDB4YWIsMHgwNCwweDJhLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhmMCB9LAorICAxNiwgMHhiMzkwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMSwweGU3LDB4MDAsMHhjMywweDAxLDB4MzYsMHg0MCB9LAorICAxNiwgMHhiM2EwLCAwLCB7MHgwZSwweDg4LDB4MTMsMHgyNCwweDAyLDB4Y2EsMHgwMCwweDFlLDB4MjAsMHgyYywweDhlLDB4MGIsMHgyYywweDAwLDB4Y2IsMHgwMCB9LAorICAxNiwgMHhiM2IwLCAwLCB7MHgyYSwweGMwLDB4MGYsMHhiOCwweDAzLDB4MmUsMHgwNiwweGNiLDB4MDAsMHgzYSwweGMwLDB4NGMsMHhiMCwweDEzLDB4YWMsMHgwYyB9LAorICAxNiwgMHhiM2MwLCAwLCB7MHhjYiwweDAwLDB4M2UsMHhjOCwweDBmLDB4YjAsMHg0MywweDUwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiM2QwLCAwLCB7MHhlMCwweDAxLDB4YjQsMHgwOCwweGZmLDB4OTEsMHgzMywweDQwLDB4MDksMHhkYywweDAxLDB4ZjQsMHgyMCwweDdlLDB4MDIsMHgyZSB9LAorICAxNiwgMHhiM2UwLCAwLCB7MHg0MCwweDBkLDB4OTgsMHgwMSwweGJjLDB4ODAsMHhlZiwweDgwLDB4YjcsMHhlNCwweDhmLDB4ZjQsMHgwYiwweGZlLDB4NDAsMHg3ZiB9LAorICAxNiwgMHhiM2YwLCAwLCB7MHgwMCwweGI5LDB4YzAsMHg0ZSwweGYwLDB4MDMsMHhmYywweDA4LDB4ZjcsMHgwMCwweDM3LDB4YzAsMHgwZiwweGUwLDB4MDIsMHhiOCB9LAorICAxNiwgMHhiNDAwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGExLDB4NDQsMHhjYiwweDAyLDB4MzIsMHgwMCB9LAorICAxNiwgMHhiNDEwLCAwLCB7MHgwZCwweDgwLDB4MGEsMHg2ZCwweDAwLDB4ZWIsMHgwNCwweDEwLDB4OTAsMHgyOCwweDIyLDB4MGIsMHgyYywweGMyLDB4Y2IsMHgyMCB9LAorICAxNiwgMHhiNDIwLCAwLCB7MHg3NiwweGMwLDB4MGUsMHhiMSwweDAzLDB4ZWMsMHgwMSwweGNiLDB4MDYsMHgzMiwweGMxLDB4MGMsMHgzMCwweDAzLDB4MmMsMHgwMiB9LAorICAxNiwgMHhiNDMwLCAwLCB7MHhjYiwweDAwLDB4M2UsMHhkMCwweDBjLDB4YjAsMHgwMywweDEwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNDQwLCAwLCB7MHhjOCwweDA1LDB4MjEsMHg0OCwweGFiLDB4MDAsMHgyMCwweDAwLDB4MDAsMHg5NSwweDIzLDB4NGMsMHgwOCwweGJiLDB4MDEsMHgyMiB9LAorICAxNiwgMHhiNDUwLCAwLCB7MHhjMCwweDA4LDB4YjIsMHgwMiwweDBjLDB4MDgsMHg4MywweDg4LDB4OTIsMHhkNSwweDI4LDB4MzQsMHgwMiwweGVjLDB4MDIsMHg4ZiB9LAorICAxNiwgMHhiNDYwLCAwLCB7MHgyMCwweDIzLDB4YzAsMHg0ZCwweGYwLDB4MDEsMHg3YywweDAwLDB4ZGYsMHgwMCwweDJlLDB4YzAsMHgwZCwweDMwLDB4MDMsMHg3MiB9LAorICAxNiwgMHhiNDcwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDQ0LDB4MDAsMHg4MywweDEwLDB4MjAsMHg2MCB9LAorICAxNiwgMHhiNDgwLCAwLCB7MHgwOSwweDI1LDB4MDIsMHgwMCwweDA4LDB4YTAsMHgwMCwweDRjLDB4MDAsMHgwYiwweDBjLDB4MjIsMHg0ZiwweDEyLDB4OTMsMHg0MCB9LAorICAxNiwgMHhiNDkwLCAwLCB7MHgwMCwweGMwLDB4MDksMHgzZSwweDAyLDB4ZWMsMHgwMCwweGFiLDB4ODAsMHhhNCwweGMwLDB4MDksMHgzMCwweDIyLDB4MmMsMHgwOCB9LAorICAxNiwgMHhiNGEwLCAwLCB7MHhiMywweDAxLDB4MGMsMHg4MSwweDA4LDB4MzAsMHgwMiwweDM4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNGIwLCAwLCB7MHg2MCwweDAxLDB4MTYsMHgwOSwweGI3LDB4ODAsMHgyMSwweDY0LDB4MDgsMHg3OCwweDA2LDB4MTIsMHgwMCwweGI0LDB4ODIsMHgyZCB9LAorICAxNiwgMHhiNGMwLCAwLCB7MHhhNCwweDFiLDB4NjksMHgwNiwweDdlLDB4MDQsMHgxNywweDkyLDB4MjUsMHhlNiwweDA5LDB4NzgsMHgwNiwweGRlLDB4ODAsMHhhNyB9LAorICAxNiwgMHhiNGQwLCAwLCB7MHg5MCwweDI1LDB4ZTAsMHgwOSwweDc5LDB4NTAsMHg1ZSwweDA0LDB4YjcsMHg5MiwweDJmLDB4NjEsMHgwOSwweGM4LDB4MDIsMHg0OCB9LAorICAxNiwgMHhiNGUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDI1LDB4MDAsMHhjMywweDAwLDB4YjAsMHgwMyB9LAorICAxNiwgMHhiNGYwLCAwLCB7MHgwZCwweGEzLDB4NDIsMHgwOSwweDQwLDB4ZTEsMHgwMCwweGJjLDB4NDAsMHgwZiwweDExLDB4MDMsMHg0YywweDAwLDB4MTMsMHgwMCB9LAorICAxNiwgMHhiNTAwLCAwLCB7MHgyMCwweGMwLDB4MDksMHgzMiwweDAzLDB4Y2MsMHgxMCwweGEzLDB4MDAsMHgyNiwweGM0LDB4OGQsMHgzMCwweDJiLDB4MGMsMHg4MCB9LAorICAxNiwgMHhiNTEwLCAwLCB7MHhmMywweDAwLDB4N2MsMHg4MCwweDBjLDB4MzAsMHgwMSwweDEyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNTIwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwMCwweGU3LDB4MTAsMHgzZCwweDAxLDB4MmYsMHhmMSwweDQyLDB4ZTgsMHgwMCwweGY1LDB4OTAsMHgwMyB9LAorICAxNiwgMHhiNTMwLCAwLCB7MHhjMSwweDBjLDB4ZjEsMHg0MywweDljLDB4MDQsMHhlZiwweDA4LDB4M2IsMHhjMiwweDBjLDB4ZjAsMHg4MSwweGRjLDB4YTAsMHhkZiB9LAorICAxNiwgMHhiNTQwLCAwLCB7MHgwMCwweDNiLDB4YzMsMHgzZiwweGYwLDB4ODMsMHhmYywweDA1LDB4ZGYsMHgwYywweDNkLDB4NDAsMHgwZiwweGQxLDB4MDMsMHhkMCB9LAorICAxNiwgMHhiNTUwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGY0LDB4MDAsMHhjYiwweDgwLDB4MzAsMHg0MCB9LAorICAxNiwgMHhiNTYwLCAwLCB7MHgyYywweGEwLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHg4MCwweDMyLDB4YzAsMHgyZSwweGI4LDB4MGIsMHgyYywweDQ2LDB4ZDMsMHgwMCB9LAorICAxNiwgMHhiNTcwLCAwLCB7MHgzMCwweGMwLDB4MGMsMHgzMCwweDAzLDB4MGMsMHgwMCwweGRiLDB4NDgsMHgzMiwweGMwLDB4MWYsMHhiNCwweDAzLDB4MmMsMHg4OCB9LAorICAxNiwgMHhiNTgwLCAwLCB7MHhjYiwweDQ4LDB4MzIsMHg4MCwweDBjLDB4MzAsMHgxMywweDJhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNTkwLCAwLCB7MHg0OCwweDExLDB4YjQsMHgwMCwweDg3LDB4MDEsMHgyMSwweDQwLDB4MDgsMHg3MCwweDQyLDB4ZDAsMHgwOCwweGI0LDB4MDAsMHgyOSB9LAorICAxNiwgMHhiNWEwLCAwLCB7MHhjMCwweDA4LDB4NzAsMHgwMiwweDFjLDB4MDAsMHg4NywweDAwLDB4MjEsMHhjOCwweDBjLDB4NzIsMHgwYSwweDFjLDB4ODQsMHg4ZiB9LAorICAxNiwgMHhiNWIwLCAwLCB7MHg0MCwweDA5LDB4YzQsMHg4ZiwweDczLDB4MTIsMHg5YywweDQwLDB4ODMsMHgyMCwweDIxLDB4YzAsMHgwOCwweDYwLDB4MDIsMHg5MiB9LAorICAxNiwgMHhiNWMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDk2LDB4MDEsMHhhZiwweDgwLDB4MjEsMHgyMCB9LAorICAxNiwgMHhiNWQwLCAwLCB7MHgwOCwweDY4LDB4MDIsMHhkYSwweDAwLDB4YmQsMHg4MCwweDIxLDB4ZTAsMHgwOSwweDc4LDB4MDIsMHgxZSwweDAwLDB4OGYsMHg4OCB9LAorICAxNiwgMHhiNWUwLCAwLCB7MHg4MywweGUyLDB4MjksMHhmOCwweDgyLDB4NWYsMHg4MCwweDg3LDB4YTAsMHgyNSwweGUwLDB4MGIsMHgzYSwweDEyLDB4MGUsMHg1MCB9LAorICAxNiwgMHhiNWYwLCAwLCB7MHg5NywweGE0LDB4MjEsMHhhMCwweDI5LDB4NzgsMHgwMiwweDMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNjAwLCAwLCB7MHgwOCwweDE0LDB4Y2MsMHgwMiwweGExLDB4ODEsMHgwMCwweDAwLDB4NDgsMHg3MCwweDAyLDB4YzgsMHgwMCwweGIxLDB4MDAsMHgyYyB9LAorICAxNiwgMHhiNjEwLCAwLCB7MHhmOCwweDA5LDB4MzEsMHg0MiwweDBjLDB4MTAsMHg4MywweDAwLDB4MjAsMHhlMCwweDA4LDB4MzgsMHgxMiwweDRlLDB4MDAsMHg4MyB9LAorICAxNiwgMHhiNjIwLCAwLCB7MHgwMCwweDZhLDB4YzAsMHgwYiwweDMwLDB4MDIsMHg4YywweDA0LDB4OTMsMHgwMCwweDIwLDB4ZTAsMHgwOSwweDM4LDB4MDIsMHg5MiB9LAorICAxNiwgMHhiNjMwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGI5LDB4NDAsMHhlZSwweDIwLDB4MzAsMHg4MCB9LAorICAxNiwgMHhiNjQwLCAwLCB7MHgwYywweGEwLDB4MDMsMHhlOCwweDAwLDB4ZmEsMHgwMCwweDMzLDB4YjAsMHgwZCwweGU0LDB4MDMsMHgzMiwweDg4LDB4Y2MsMHg4MCB9LAorICAxNiwgMHhiNjUwLCAwLCB7MHgyMywweDAwLDB4MGQsMHhjMCwweDAzLDB4NjIsMHgwMiwweGNhLDB4MDAsMHgzNiwweDgwLDB4MGYsMHhhMCwweDQzLDB4MjgsMHgwNiB9LAorICAxNiwgMHhiNjYwLCAwLCB7MHhkYSwweDAwLDB4MzMsMHhhMCwweDBkLDB4NmEsMHgwMywweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNjcwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweDk4LDB4MDEsMHhiZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZjAsMHgwMCwweGJjLDB4MDAsMHgzOCB9LAorICAxNiwgMHhiNjgwLCAwLCB7MHgwNCwweDA4LDB4ODAsMHhhMywweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgxMywweGEwLDB4MDAsMHhlMCB9LAorICAxNiwgMHhiNjkwLCAwLCB7MHgwMCwweDNlLDB4MDAsMHgwZSwweDAwLDB4MDMsMHhjMCwweDAwLDB4ZTgsMHgwMCwweGJlLDB4MDQsMHg0ZSwweDgwLDB4MDcsMHhkMiB9LAorICAxNiwgMHhiNmEwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4ODAsMHhjOSwweDAwLDB4M2UsMHg2OCB9LAorICAxNiwgMHhiNmIwLCAwLCB7MHgwYywweDkwLDB4MDMsMHg2NCwweDAwLDB4YzksMHgwMCwweDNlLDB4NDAsMHgwYywweDkwLDB4NDMsMHhlMCwweDAwLDB4YzgsMHgwMCB9LAorICAxNiwgMHhiNmMwLCAwLCB7MHgzMiwweDAwLDB4MGMsMHg4MCwweDEzLDB4MjAsMHgwMCwweGM5LDB4MDAsMHgzNiwweDQwLDB4MGMsMHg5MCwweDAzLDB4NjQsMHgwMCB9LAorICAxNiwgMHhiNmQwLCAwLCB7MHg4MSwweDAwLDB4MzIsMHg0MCwweDA0LDB4OTAsMHgxMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNmUwLCAwLCB7MHg4MCwweDA0LDB4NjUsMHgwNiwweDg5LDB4NDAsMHgyZSwweDYwLDB4MWEsMHgxNCwweDJhLDB4MDUsMHgyMCwweDg5LDB4MDAsMHgyZSB9LAorICAxNiwgMHhiNmYwLCAwLCB7MHg0MCwweDA4LDB4OTAsMHgwMiwweGM0LDB4MDgsMHhjMSwweDAyLDB4MjAsMHg0MCwweDA4LDB4MTAsMHgxYSwweDI0LDB4MDAsMHg4OSB9LAorICAxNiwgMHhiNzAwLCAwLCB7MHgxMCwweDMyLDB4NDEsMHgwOCwweDkwLDB4MTIsMHgyNCwweDAwLDB4ODksMHgwNCwweDM2LDB4NDAsMHg4OCwweDk0LDB4MGEsMHgyMCB9LAorICAxNiwgMHhiNzEwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDA0LDB4MjAsMHg4OSwweDU1LDB4MmUsMHg0MCB9LAorICAxNiwgMHhiNzIwLCAwLCB7MHgwOCwweGQ1LDB4MDIsMHgzNCwweDAwLDB4OGQsMHgwMCwweDJlLDB4NDAsMHgxOCwweDkwLDB4MDIsMHhlNCwweDAwLDB4OTksMHgwMCB9LAorICAxNiwgMHhiNzMwLCAwLCB7MHgyNiwweDQwLDB4MDgsMHg5MCwweDAyLDB4MDQsMHgwYSwweDg5LDB4MDAsMHgyNiwweDQwLDB4MzgsMHg5MCwweDBhLDB4MjQsMHgwMCB9LAorICAxNiwgMHhiNzQwLCAwLCB7MHhhOSwweDAwLDB4MjAsMHg0MCwweDBhLDB4OTAsMHg4MiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiNzUwLCAwLCB7MHgwOCwweDA0LDB4MDUsMHgwMCwweDgxLDB4MDAsMHgyZiwweDQwLDB4MGEsMHhkNCwweDAyLDB4MzQsMHgwMCwweDg1LDB4MDEsMHgyYyB9LAorICAxNiwgMHhiNzYwLCAwLCB7MHg0MCwweDA4LDB4MTAsMHg0MiwweGU0LDB4MDYsMHg5OSwweDAwLDB4MjIsMHg0MCwweDA4LDB4MTAsMHgwMiwweDA1LDB4MDAsMHg4MSB9LAorICAxNiwgMHhiNzcwLCAwLCB7MHg0MCwweDI4LDB4NTAsMHgwOCwweDE0LDB4MTIsMHgwNSwweDAwLDB4YTEsMHg0MCwweDI0LDB4NTAsMHg1YSwweDEwLDB4MDIsMHgwMiB9LAorICAxNiwgMHhiNzgwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHhjOCwweDA0LDB4M2UsMHgwMCB9LAorICAxNiwgMHhiNzkwLCAwLCB7MHgwOCwweDgwLDB4MDMsMHgyMSwweDQyLDB4Y2MsMHgwMCwweDNlLDB4MDAsMHgyYywweDgwLDB4MDIsMHhlMCwweDAwLDB4ZDgsMHgwMCB9LAorICAxNiwgMHhiN2EwLCAwLCB7MHhiNiwweDAwLDB4MmMsMHg4MCwweDAyLDB4MjAsMHgwMiwweGM4LDB4MDAsMHgzNiwweDAwLDB4MGMsMHg4MCwweDAzLDB4NjAsMHgwMiB9LAorICAxNiwgMHhiN2IwLCAwLCB7MHhlOCwweDAwLDB4MzIsMHgwMCwweDhlLDB4ODAsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiN2MwLCAwLCB7MHg5OCwweDFkLDB4ZjUsMHgwMCwweGY1LDB4MDAsMHgzZSwweDQwLDB4ODcsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGYxLDB4MDAsMHgzZCB9LAorICAxNiwgMHhiN2QwLCAwLCB7MHg1MCwweDBmLDB4NTQsMHgwMywweGQxLDB4MDAsMHhlYywweDQwLDB4M2YsMHgxMCwweDBiLDB4YzQsMHg0MywweGYxLDB4MDAsMHhmOSB9LAorICAxNiwgMHhiN2UwLCAwLCB7MHg0MCwweDM2LDB4NTAsMHgwZiwweDk0LDB4MTMsMHhlNSwweDEwLDB4ZDksMHg0NCwweDNkLDB4NDAsMHgyZCwweGQwLDB4MDMsMHhlNiB9LAorICAxNiwgMHhiN2YwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGY2LDB4NjAsMHhjZCwweDAyLDB4M2IsMHg0MCB9LAorICAxNiwgMHhiODAwLCAwLCB7MHgwYywweGQwLDB4MDMsMHhiNCwweDQwLDB4ZmQsMHgwNiwweDNlLDB4NDAsMHgwYywweDkwLDB4MDMsMHg2NiwweDA0LDB4YzksMHg4MiB9LAorICAxNiwgMHhiODEwLCAwLCB7MHhiNiwweDYyLDB4MGYsMHgxOCwweDBiLDB4MzYsMHgwMCwweGNkLDB4NDAsMHgzMiwweDYxLDB4MGMsMHg5MCwweDIzLDB4MjQsMHgwYSB9LAorICAxNiwgMHhiODIwLCAwLCB7MHhjOSwweDAwLDB4MzIsMHg0MCwweDRjLDB4ZDAsMHg0MywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiODMwLCAwLCB7MHgzOSwweDEwLDB4ZTMsMHg4MCwweGQ4LDB4MDAsMHgyMiwweDAwLDB4MGQsMHg4MCwweDAyLDB4MjIsMHg5NCwweGI4LDB4MDAsMHgyZSB9LAorICAxNiwgMHhiODQwLCAwLCB7MHgwMCwweDBkLDB4ODAsMHgwMywweDIxLDB4MDAsMHg4OCwweDQwLDB4MjIsMHgwMCwweDBiLDB4YzQsMHgyMiwweDIxLDB4NTAsMHg4OCB9LAorICAxNiwgMHhiODUwLCAwLCB7MHg4MCwweDIyLDB4MjIsMHgwOCwweDgwLDB4MDIsMHgyMCwweDEwLDB4ODAsMHgwMSwweDJhLDB4MDAsMHgwYSwweDgwLDB4MDMsMHg0ZSB9LAorICAxNiwgMHhiODYwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGM2LDB4MDAsMHg4OSwweDAwLDB4MmEsMHg0MCB9LAorICAxNiwgMHhiODcwLCAwLCB7MHg4OCwweDEwLDB4MGEsMHg4NCwweDA4LDB4YjEsMHgwMCwweDI5LDB4NDAsMHgwYSwweDcwLDB4MGEsMHhiNSwweDAwLDB4OGYsMHg0MCB9LAorICAxNiwgMHhiODgwLCAwLCB7MHgyOSwweGMwLDB4MGIsMHhmNCwweDAyLDB4MjQsMHgwMCwweDgxLDB4MjAsMHgyOCwweDQ0LDB4ODksMHgxMCwweDAyLDB4MDQsMHgwNCB9LAorICAxNiwgMHhiODkwLCAwLCB7MHg4MSwweDAyLDB4MmEsMHg0MCwweDA4LDB4MTAsMHgwMiwweDAyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiOGEwLCAwLCB7MHgxOCwweDE1LDB4YTYsMHgwMCwweDk5LDB4MjAsMHgyMiwweDQwLDB4MDksMHg5MCwweDEyLDB4MjQsMHg4MCwweGI5LDB4MDAsMHgyZiB9LAorICAxNiwgMHhiOGIwLCAwLCB7MHg0NCwweDAzLDB4ZDAsMHgwMiwweGY0LDB4MDAsMHg4ZCwweDAwLDB4MmIsMHg0MSwweDBiLDB4ZDAsMHgwMiwweDI2LDB4MTAsMHg4OSB9LAorICAxNiwgMHhiOGMwLCAwLCB7MHgwNCwweDJhLDB4NDAsMHgwOSwweDkwLDB4NmUsMHgyNCwweDAwLDB4ODksMHgwMCwweDJhLDB4NDAsMHgwYSwweDk0LDB4MDIsMHg0NiB9LAorICAxNiwgMHhiOGQwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTIsMHgxNSwweGU2LDB4MDAsMHhjOSwweDAwLDB4MzgsMHg0MiB9LAorICAxNiwgMHhiOGUwLCAwLCB7MHgwYywweDEwLDB4MTMsMHhhNiwweDA0LDB4NzksMHgwOCwweDNhLDB4NzgsMHgwNiwweDkyLDB4MDMsMHhhNCwweDA4LDB4YzksMHgwMCB9LAorICAxNiwgMHhiOGYwLCAwLCB7MHgzYSwweDYwLDB4OGYsMHg5OCwweDIzLDB4MDYsMHgwMiwweGM5LDB4MDIsMHgzYSwweDQwLDB4MGQsMHg5MCwweDAzLDB4MDQsMHgwMCB9LAorICAxNiwgMHhiOTAwLCAwLCB7MHhjOSwweDAwLDB4MzgsMHg0MCwweDBjLDB4OTAsMHgwMywweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiOTEwLCAwLCB7MHgyOCwweDAxLDB4ODQsMHgxMCwweGY5LDB4ODAsMHhiZSwweDQwLDB4NGYsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzYyB9LAorICAxNiwgMHhiOTIwLCAwLCB7MHg2MCwweDhkLDB4OTIsMHgwMywweDI0LDB4NDIsMHhlOSwweDEwLDB4MzIsMHg1MCwweDBmLDB4OTQsMHgwMywweGU0LDB4MDAsMHhmOSB9LAorICAxNiwgMHhiOTMwLCAwLCB7MHgwMCwweGI2LDB4NDEsMHgyZSwweDEwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDJlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjYSB9LAorICAxNiwgMHhiOTQwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDgsMHhjOCwweDAwLDB4M2UsMHgxMCB9LAorICAxNiwgMHhiOTUwLCAwLCB7MHgwZiwweDg4LDB4MDMsMHgyMCwweDA4LDB4ZjgsMHhjMCwweDFlLDB4MTAsMHgyYywweDQwLDB4MDMsMHhmMiwweDAwLDB4Y2MsMHgwMCB9LAorICAxNiwgMHhiOTYwLCAwLCB7MHgzZiwweDAwLDB4MGMsMHhjMCwweDEzLDB4MjAsMHgwMiwweGMwLDB4MDAsMHgzMCwweDAwLDB4MGMsMHg4MCwweDJiLDB4MjAsMHgxMCB9LAorICAxNiwgMHhiOTcwLCAwLCB7MHhjMCwweDA0LDB4MzIsMHgwMCwweDBmLDB4ODAsMHgwMywweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiOTgwLCAwLCB7MHhhOCwweDA1LDB4M2EsMHg4MCwweDg2LDB4ZTAsMHgyZiwweGEwLDB4MWIsMHhlMCwweDAyLDB4M2EsMHg4MCwweGJhLDB4MDQsMHgyZSB9LAorICAxNiwgMHhiOTkwLCAwLCB7MHg4MCwweDA4LDB4YTAsMHgwMywweDg4LDB4MDgsMHhjMiwweDAwLDB4MmUsMHg4MSwweDA4LDB4NjAsMHgwMiwweDI4LDB4MTAsMHg4ZSB9LAorICAxNiwgMHhiOWEwLCAwLCB7MHg4MSwweDAzLDB4ODAsMHgwOCwweGUwLDB4MDEsMHg3OCwweDAwLDB4OGUsMHgwNCwweDAzLDB4ODAsMHgwOSwweDY4LDB4MDMsMHhjYSB9LAorICAxNiwgMHhiOWIwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDAsMHg4MywweDYwLDB4MmMsMHg0NCB9LAorICAxNiwgMHhiOWMwLCAwLCB7MHgwYiwweDM4LDB4MDIsMHgwZiwweDgwLDB4YjEsMHgwMCwweDJjLDB4ZTUsMHgwMywweDMwLDB4MTAsMHhjYywweDEwLDB4ODMsMHgwMCB9LAorICAxNiwgMHhiOWQwLCAwLCB7MHgwYywweGMwLDB4MjksMHgzMCwweDIyLDB4MDQsMHgwOSwweDkxLDB4MTAsMHgyNCwweGMwLDB4YzgsMHgzMCwweDAwLDB4NGMsMHgwNCB9LAorICAxNiwgMHhiOWUwLCAwLCB7MHg5MywweDAyLDB4MjQsMHhjMCwweDBiLDB4MzEsMHgwMiwweDBhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiOWYwLCAwLCB7MHhlMCwweDAxLDB4MTgsMHg4MCwweDg3LDB4MDAsMHgyZCwweDQwLDB4MGIsMHg3NCwweDQyLDB4MWMsMHgwMSwweGI1LDB4MDEsMHgyYyB9LAorICAxNiwgMHhiYTAwLCAwLCB7MHhjMCwweDBiLDB4NjAsMHgwMiwweGIwLDB4MDAsMHg5NCwweDA0LDB4MmYsMHgyMCwweDA5LDB4YzAsMHgwMiwweDE0LDB4OTAsMHg5NyB9LAorICAxNiwgMHhiYTEwLCAwLCB7MHgwMCwweDI1LDB4YzgsMHgwOCwweDcwLDB4MDIsMHg0YywweDgwLDB4OTcsMHgyMCwweDI1LDB4YzAsMHgwOSwweDcwLDB4MDIsMHhlOCB9LAorICAxNiwgMHhiYTIwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDNhLDB4ODIsMHhjNiwweDgwLDB4MmQsMHg2MCB9LAorICAxNiwgMHhiYTMwLCAwLCB7MHgwYiwweGY4LDB4MGIsMHgxYSwweDAwLDB4ZjUsMHg4MCwweDNkLDB4ZTAsMHg4ZiwweDc4LDB4MDMsMHhkZSwweDAyLDB4YzcsMHg4MCB9LAorICAxNiwgMHhiYTQwLCAwLCB7MHgyZCwweGUwLDB4MGQsMHg3OCwweDBiLDB4MTcsMHgwMiwweGRmLDB4ODAsMHgyNCwweGY4LDB4MmMsMHhmZCwweDAzLDB4NWUsMHgwYyB9LAorICAxNiwgMHhiYTUwLCAwLCB7MHhkNywweGUwLDB4MzUsMHhlMCwweDBmLDB4NjgsMHgwMywweDJhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiYTYwLCAwLCB7MHg0OCwweDFkLDB4YWUsMHg0MCwweGZhLDB4MDQsMHgzZSwweDQwLDB4MGYsMHg4MCwweDEzLDB4ZWMsMHgwNCwweGY5LDB4MDAsMHgzZSB9LAorICAxNiwgMHhiYTcwLCAwLCB7MHhjMSwweDBjLDB4YTAsMHgxMywweGMwLDB4MTAsMHhlOCwweDAwLDB4M2MsMHgwMCwweDRlLDB4ODAsMHg0MywweGM0LDB4MjAsMHg4OSB9LAorICAxNiwgMHhiYTgwLCAwLCB7MHgwMCwweGJhLDB4YzAsMHgwNywweGI2LDB4MjEsMHhlZCwweDA2LDB4ZWIsMHg2OCwweGJhLDB4Y2MsMHgwZiwweDIwLDB4MTMsMHhjMiB9LAorICAxNiwgMHhiYTkwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNSwweGJlLDB4MDAsMHhjNiwweDgwLDB4MzEsMHg2MCB9LAorICAxNiwgMHhiYWEwLCAwLCB7MHgyZCwweDc4LDB4MGIsMHgzZSwweDQ4LDB4ZWMsMHg5MiwweDNkLDB4NjAsMHgwYywweDU4LDB4MDMsMHg1YSwweDQwLDB4ZDUsMHg4MCB9LAorICAxNiwgMHhiYWIwLCAwLCB7MHgzMSwweDYxLDB4MGMsMHg1OCwweDIzLDB4MzYsMHgwMCwweGNmLDB4ODIsMHgzZiwweGUwLDB4MGMsMHhmOCwweDAzLDB4ZmYsMHg2MCB9LAorICAxNiwgMHhiYWMwLCAwLCB7MHhjZiwweDkwLDB4MzMsMHhmMCwweDBjLDB4NTIsMHgwMywweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiYWQwLCAwLCB7MHhhOCwweDExLDB4YjgsMHg4NCwweDg2LDB4MTQsMHhiNSwweGMwLDB4MDgsMHg3MCwweDAyLDB4MWUsMHhjMCwweGM0LDB4MDAsMHgyZCB9LAorICAxNiwgMHhiYWUwLCAwLCB7MHg0MCwweDA4LDB4NDAsMHgwMiwweDE0LDB4ZDAsMHg4NiwweDEwLDB4MjEsMHg4MCwweDRjLDB4NjIsMHg0MiwweDM0LDB4NDAsMHhhNSB9LAorICAxNiwgMHhiYWYwLCAwLCB7MHgwMCwweDM1LDB4YzAsMHgyOCwweDcwLDB4NDIsMHhkYywweGMyLDB4OGYsMHgzMCwweDIzLDB4YzAsMHgwOCwweDUwLDB4MDIsMHgyYSB9LAorICAxNiwgMHhiYjAwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMCwweDk4LDB4MjgsMHg4ZSwweDAwLDB4YTUsMHg0MCB9LAorICAxNiwgMHhiYjEwLCAwLCB7MHgwOCwweGYxLDB4MDIsMHgxOCwweDY0LDB4YjQsMHgwMCwweDZkLDB4NDIsMHgwOCwweDUwLDB4MDIsMHgxOCwweDAxLDB4ODUsMHgwOCB9LAorICAxNiwgMHhiYjIwLCAwLCB7MHgyMSwweDQwLDB4MDksMHg1OCwweDIyLDB4NTQsMHgwMCwweDg1LDB4MTAsMHgyZCwweGM0LDB4MDksMHg3MCwweDAyLDB4ZGMsMHgwNCB9LAorICAxNiwgMHhiYjMwLCAwLCB7MHg5NywweDAwLDB4MjUsMHhjMCwweDA4LDB4NDQsMHgwMiwweDAwLDB4MTAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiYjQwLCAwLCB7MHg2MCwweDE0LDB4OGMsMHgwMCwweDgyLDB4ODAsMHgyNCwweGMwLDB4MDgsMHg4MCwweDAyLDB4MmQsMHgwMCwweDgwLDB4NGEsMHgyYyB9LAorICAxNiwgMHhiYjUwLCAwLCB7MHg0MiwweDA4LDB4MGEsMHg0MiwweDA2LDB4MDAsMHg5MiwweDg0LDB4MjAsMHhhMCwweDg4LDB4MjgsMHg0MiwweDQ0LDB4MDAsMHhhMyB9LAorICAxNiwgMHhiYjYwLCAwLCB7MHgwNiwweDI0LDB4YzAsMHgwYiwweDMwLDB4MDIsMHhjYywweDEwLDB4OTMsMHgwNCwweDI0LDB4YzEsMHgwOSwweDAwLDB4MDIsMHgwOCB9LAorICAxNiwgMHhiYjcwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGJjLDB4MDAsMHhjYiwweDAwLDB4MzYsMHg0MCB9LAorICAxNiwgMHhiYjgwLCAwLCB7MHgwYywweGI0LDB4MTMsMHgyYywweDAwLDB4ZjksMHgwMCwweDNlLDB4YTAsMHgwYywweGEyLDB4MDMsMHgwNCwweDA4LDB4YzIsMHg4MCB9LAorICAxNiwgMHhiYjkwLCAwLCB7MHgzMCwweGE4LDB4MGQsMHgyYSwweDAzLDB4NTQsMHgwMCwweGNiLDB4MDAsMHgzZiwweGMwLDB4MGQsMHhmMCwweDAzLDB4ZmMsMHgwOCB9LAorICAxNiwgMHhiYmEwLCAwLCB7MHhkZiwweDAwLDB4MzcsMHhkMCwweDBjLDB4YjAsMHgwMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiYmIwLCAwLCB7MHg4MCwweDAwLDB4ZTAsMHgwMCwweGZiLDB4MTAsMHgzYSwweDQwLDB4MGUsMHhiMCwweDAzLDB4ZWQsMHg5MCwweGY5LDB4MTEsMHg3ZSB9LAorICAxNiwgMHhiYmMwLCAwLCB7MHg4MCwweDRmLDB4YjAsMHg1MywweGU4LDB4NDAsMHhlOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGE2LDB4MDgsMHhmOSB9LAorICAxNiwgMHhiYmQwLCAwLCB7MHgwMSwweDNhLDB4YzAsMHgwYywweGIwLDB4MTMsMHhjYywweDAwLDB4ZWIsMHgwMiwweDNhLDB4YzYsMHg4ZSwweGI4LDB4MDMsMHhlMCB9LAorICAxNiwgMHhiYmUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGYwLDB4MGMsMHhjZSwweDAwLDB4M2YsMHhlMCB9LAorICAxNiwgMHhiYmYwLCAwLCB7MHgyYywweGYwLDB4ODMsMHgzYSwweDQ4LDB4Y2QsMHgwMSwweDM1LDB4ODAsMHgwYywweDYwLDB4MTIsMHgzNCwweDBhLDB4Y2UsMHgwMCB9LAorICAxNiwgMHhiYzAwLCAwLCB7MHhiMywweDgwLDB4MmMsMHhlMCwweDBiLDB4NzQsMHgwMCwweGM5LDB4MTAsMHhiMywweGMxLDB4MGYsMHhmMCwweDFiLDB4M2MsMHgwMCB9LAorICAxNiwgMHhiYzEwLCAwLCB7MHhjZiwweDAwLDB4YjcsMHhjMCwweDJjLDB4ZTAsMHgwMywweDAwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiYzIwLCAwLCB7MHg4MSwweDA0LDB4NmUsMHgxMCwweDg4LDB4ODAsMHgyYywweGMwLDB4MTgsMHg5OCwweDAyLDB4MmQsMHg4MCwweDgxLDB4MDAsMHgzNiB9LAorICAxNiwgMHhiYzMwLCAwLCB7MHg5MSwweDA4LDB4YjAsMHgwMywweDY4LDB4MDAsMHhjOSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDAsMHg4MyB9LAorICAxNiwgMHhiYzQwLCAwLCB7MHg4MCwweDM2LDB4YzAsMHgwYiwweDMwLDB4MDIsMHgyYywweDAyLDB4ODMsMHgwMCwweDIwLDB4YzAsMHgwOCwweDIwLDB4MDMsMHg2MCB9LAorICAxNiwgMHhiYzUwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDA2LDB4MDAsMHg4YSwweDgwLDB4MmUsMHg0NSB9LAorICAxNiwgMHhiYzYwLCAwLCB7MHgyOCwweDg4LDB4MDIsMHgyNCwweDAyLDB4ODgsMHgwMiwweDAyLDB4MDIsMHgwOCwweDgwLDB4MDIsMHhhMiwweDAwLDB4OTgsMHgwMCB9LAorICAxNiwgMHhiYzcwLCAwLCB7MHgyMiwweDAwLDB4MDgsMHg4MCwweDEyLDB4MjQsMHgwMCwweDg5LDB4MDEsMHgyMiwweGMxLDB4MGEsMHhiMCwweDAyLDB4NmMsMHgwMCB9LAorICAxNiwgMHhiYzgwLCAwLCB7MHhhYiwweDAwLDB4MjIsMHhjMSwweDA4LDB4OTAsMHgxMiwweDYwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiYzkwLCAwLCB7MHgwOCwweDA0LDB4MDAsMHgwMCwweDgwLDB4MDAsMHgyYywweGMwLDB4NDgsMHgwOCwweDEyLDB4MDAsMHg4MCwweDgwLDB4MDIsMHgyNCB9LAorICAxNiwgMHhiY2EwLCAwLCB7MHgwMCwweDA4LDB4MTgsMHg0MiwweGFjLDB4MDIsMHg4YiwweDgwLDB4MjIsMHhlMCwweDA4LDB4YjgsMHgxMiwweDA0LDB4MDIsMHg4MyB9LAorICAxNiwgMHhiY2IwLCAwLCB7MHgwMCwweDIwLDB4YzAsMHgwYiwweDMwLDB4NDIsMHgwYywweDAwLDB4YTMsMHgwMSwweDYwLDB4YzAsMHg0OCwweDEwLDB4MDIsMHg0MiB9LAorICAxNiwgMHhiY2MwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDY4LDB4MDgsMHhjYSwweDAwLDB4MmUsMHg0MCB9LAorICAxNiwgMHhiY2QwLCAwLCB7MHgwOCwweDgwLDB4MDMsMHgwMCwweDAwLDB4YzgsMHgwNiwweDMyLDB4MDAsMHgwYywweDgwLDB4MDIsMHhhMCwweDAwLDB4ZDgsMHgwMCB9LAorICAxNiwgMHhiY2UwLCAwLCB7MHgzMiwweDAwLDB4MGMsMHg4MCwweDAzLDB4NzQsMHgwMCwweGNiLDB4MDAsMHgyMiwweGMwLDB4MGYsMHhmMCwweDAzLDB4M2MsMHgwMCB9LAorICAxNiwgMHhiY2YwLCAwLCB7MHhlZiwweDAwLDB4MzcsMHhjMCwweDBjLDB4ODAsMHgwMSwweDQwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiZDAwLCAwLCB7MHhhMCwweDE5LDB4ZmMsMHgwMCwweGZjLDB4MDQsMHgzZiwweGMwLDB4MGYsMHhjMCwweDAzLDB4ZTEsMHgwMCwweGZjLDB4MDAsMHgzYiB9LAorICAxNiwgMHhiZDEwLCAwLCB7MHgwMCwweDBmLDB4ZDAsMHgwMywweDdjLDB4MDAsMHhlZiwweDAwLDB4MmYsMHhjMCwweDBmLDB4ZjAsMHgxMSwweGY0LDB4MTAsMHhmZCB9LAorICAxNiwgMHhiZDIwLCAwLCB7MHgwMiwweDNkLDB4YzAsMHg0ZiwweGYwLDB4MDMsMHhkYywweDAwLDB4ZGYsMHgwNCwweDNmLDB4YzAsMHgwZiwweGMwLDB4NDMsMHhlOSB9LAorICAxNiwgMHhiZDMwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjNSwweDQxLDB4MDIsMHg3MCwweDIwLDB4ZGMsMHgxMCB9LAorICAxNiwgMHhiZDQwLCAwLCB7MHg2NywweDA0LDB4MGQsMHhjMSwweDAyLDB4NzAsMHgyMCwweDljLDB4MTAsMHgzNywweDA0LDB4MGQsMHhjMSwweDA2LDB4NzAsMHg0MCB9LAorICAxNiwgMHhiZDUwLCAwLCB7MHg0YywweDEwLDB4MzcsMHgxNCwweDE1LDB4YzEsMHgwMywweDcwLDB4NDAsMHhkYywweDEwLDB4MTMsMHgwNCwweDBkLDB4YzEsMHgwNyB9LAorICAxNiwgMHhiZDYwLCAwLCB7MHg3MCwweDQwLDB4ZGMsMHgxMCwweDM3LDB4MDQsMHgwZCwweGMwLDB4MzEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiZDcwLCAwLCB7MHgwMCwweGM1LDB4NDQsMHgwNSwweDcxLDB4MjEsMHg1YywweDQwLDB4NTcsMHgxMCwweDE1LDB4YzQsMHgwNSwweDcxLDB4MDUsMHg1YyB9LAorICAxNiwgMHhiZDgwLCAwLCB7MHg0MCwweDU3LDB4MTAsMHgxNSwweGM0LDB4MDYsMHg3MSwweDAxLDB4NGMsMHg0MCwweDU3LDB4MTAsMHgwZCwweGM0LDB4MDUsMHg3MSB9LAorICAxNiwgMHhiZDkwLCAwLCB7MHgwNSwweDVjLDB4NDAsMHg1MywweDEwLDB4MTUsMHhjNCwweDA3LDB4NzEsMHgwMSwweDVjLDB4NDAsMHg1NywweDEwLDB4MTUsMHhjMCB9LAorICAxNiwgMHhiZGEwLCAwLCB7MHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgyMCB9LAorICAxNiwgMHhiZGIwLCAwLCB7MHgxMiwweDA4LDB4MDQsMHg4MiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MiwweDAxLDB4MjAsMHg4MCB9LAorICAxNiwgMHhiZGMwLCAwLCB7MHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSB9LAorICAxNiwgMHhiZGQwLCAwLCB7MHgyMCwweDgwLDB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiZGUwLCAwLCB7MHgwMCwweDg0LDB4MDAsMHgwMSwweDYwLDB4MDAsMHg1OCwweDAwLDB4NTYsMHgwMCwweDA1LDB4ODAsMHgwMSwweDYwLDB4MDQsMHg1OCB9LAorICAxNiwgMHhiZGYwLCAwLCB7MHgwMCwweDE2LDB4MDAsMHgwNSwweDgwLDB4MDEsMHgyMCwweDAxLDB4NTgsMHgwMCwweDE2LDB4MDAsMHgwNSwweDgwLDB4MDEsMHg2MCB9LAorICAxNiwgMHhiZTAwLCAwLCB7MHgwMCwweDU4LDB4MDAsMHg1NiwweDAwLDB4MDUsMHg4MCwweDAxLDB4NjAsMHgwMCwweDU4LDB4MDAsMHgxNiwweDAwLDB4MDEsMHg4MCB9LAorICAxNiwgMHhiZTEwLCAwLCB7MHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjNSwweDQ4LDB4MDUsMHg3MiwweDExLDB4NWMsMHg4MCB9LAorICAxNiwgMHhiZTIwLCAwLCB7MHgxNywweDIwLDB4MTUsMHhkOCwweDA1LDB4MzIsMHgxMSwweDFjLDB4ODAsMHg0NywweDIwLDB4MTQsMHg4OCwweDAwLDB4NzIsMHgwMSB9LAorICAxNiwgMHhiZTMwLCAwLCB7MHgxYywweDgwLDB4NTcsMHgyMCwweDA1LDB4YzgsMHgwNCwweDcyLDB4MDEsMHg1YywweDgwLDB4NTcsMHgyMCwweDE1LDB4YzgsMHgwMSB9LAorICAxNiwgMHhiZTQwLCAwLCB7MHg3MiwweDAxLDB4NWMsMHg4MCwweDU3LDB4MjQsMHgxNSwweGMwLDB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiZTUwLCAwLCB7MHgwMCwweGMxLDB4NDAsMHgwMCwweDYwLDB4MDAsMHgxOCwweDAwLDB4MDYsMHgwMCwweDAxLDB4ODAsMHg0MCwweDIwLDB4MDAsMHgxOCB9LAorICAxNiwgMHhiZTYwLCAwLCB7MHgwMCwweDA2LDB4MDAsMHgwMSwweDkwLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgwMCwweDA2LDB4MDAsMHg0MSwweDgwLDB4MDAsMHg2MCB9LAorICAxNiwgMHhiZTcwLCAwLCB7MHgwMCwweDE4LDB4MDAsMHgwNiwweDAwLDB4MDEsMHg4MCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MTAsMHgwNiwweDAwLDB4MDEsMHg4MCB9LAorICAxNiwgMHhiZTgwLCAwLCB7MHgzMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjNSwweDQ4LDB4MDQsMHgyMiwweDAxLDB4MDgsMHg4MCB9LAorICAxNiwgMHhiZTkwLCAwLCB7MHgwMiwweDIwLDB4MTAsMHg4OCwweDA0LDB4NjIsMHgwMSwweDA4LDB4ODAsMHg0MiwweDIwLDB4MTAsMHg4OCwweDAwLDB4MjAsMHgwMSB9LAorICAxNiwgMHhiZWEwLCAwLCB7MHgwOCwweDgwLDB4NDIsMHgyMCwweDAwLDB4ODgsMHgwNCwweDIyLDB4MDEsMHgwOCwweDAwLDB4NDIsMHgyMCwweDEwLDB4ODgsMHgwMCB9LAorICAxNiwgMHhiZWIwLCAwLCB7MHgyMiwweDAxLDB4MDgsMHg4MCwweDQyLDB4MzAsMHgxMCwweDgwLDB4MzEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiZWMwLCAwLCB7MHgwMCwweGM1LDB4NGEsMHgwNSwweDQyLDB4ODEsMHg1MCwweGEwLDB4MDQsMHgyOCwweDE1LDB4MGEsMHgwNSwweDUyLDB4ODEsMHgxMCB9LAorICAxNiwgMHhiZWQwLCAwLCB7MHhhMCwweDQ0LDB4MjgsMHgxMSwweDFhLDB4MDAsMHg0MCwweDgwLDB4MTAsMHhhMCwweDU0LDB4MjgsMHgwNSwweDBhLDB4MDUsMHg0MiB9LAorICAxNiwgMHhiZWUwLCAwLCB7MHg4MSwweDUxLDB4MjAsMHgxNCwweDI4LDB4MTUsMHgwYSwweDAxLDB4NDIsMHg4MSwweDUwLDB4YTAsMHg1NCwweDI4LDB4MTUsMHgwMCB9LAorICAxNiwgMHhiZWYwLCAwLCB7MHgzMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDBjLDB4MDEsMHg1MywweDQwLDB4NTQsMHhjMCB9LAorICAxNiwgMHhiZjAwLCAwLCB7MHgxNSwweDMwLDB4MDUsMHg1YywweDAxLDB4NTcsMHg0MCwweDU0LDB4YzAsMHgxNSwweDMwLDB4MDUsMHg1YywweDAxLDB4NTMsMHgwMCB9LAorICAxNiwgMHhiZjEwLCAwLCB7MHg1NSwweGMwLDB4MTUsMHg3NCwweDA1LDB4NGMsMHgwMSwweDUzLDB4MDAsMHg1NSwweGMwLDB4MTUsMHg3NCwweDA1LDB4NGMsMHgwMSB9LAorICAxNiwgMHhiZjIwLCAwLCB7MHg1MywweDAwLDB4NTQsMHhjMCwweDExLDB4MzAsMHgwMSwweDQwLDB4MjEsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiZjMwLCAwLCB7MHgwMCwweDgwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgxMCwweDAwLDB4MDQsMHgwMCwweDAxLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgxMCB9LAorICAxNiwgMHhiZjQwLCAwLCB7MHgwMCwweDA0LDB4MDAsMHgwMSwweDAwLDB4MDAsMHg0MiwweDAwLDB4MTAsMHgwMCwweDA0LDB4MDAsMHgxMSwweDAwLDB4MDAsMHg0MCB9LAorICAxNiwgMHhiZjUwLCAwLCB7MHgwMCwweDEwLDB4YzEsMHgwNCwweDAwLDB4MDEsMHgwMCwweDAwLDB4NDAsMHgwMCwweDEwLDB4MDAsMHgwMSwweDEwLDB4MDEsMHgwMSB9LAorICAxNiwgMHhiZjYwLCAwLCB7MHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjNSwweDYwLDB4MDIsMHgwOCwweDAwLDB4ODIsMHgwMCB9LAorICAxNiwgMHhiZjcwLCAwLCB7MHgyMCwweDgwLDB4MDgsMHgyMCwweDAyLDB4MDgsMHgwMCwweDgyLDB4MDAsMHgyMCwweDgwLDB4MDgsMHgyMCwweDAyLDB4MDgsMHgwMCB9LAorICAxNiwgMHhiZjgwLCAwLCB7MHg4MiwweDAwLDB4MjAsMHg4NCwweDAwLDB4MjAsMHgwMiwweDA4LDB4MDAsMHg4MiwweDAwLDB4MjAsMHg4NCwweDA4LDB4MjAsMHgwMiB9LAorICAxNiwgMHhiZjkwLCAwLCB7MHgwOCwweDAwLDB4ODIsMHgwMCwweDIxLDB4ODAsMHgwOCwweDAxLDB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhiZmEwLCAwLCB7MHgwMCwweGM1LDB4NDAsMHgwNSwweDYwLDB4MDEsMHg1OCwweDAwLDB4OTYsMHgwMCwweDE1LDB4OTAsMHgwNSwweDY0LDB4MDIsMHg1OCB9LAorICAxNiwgMHhiZmIwLCAwLCB7MHgwMCwweDU2LDB4MDAsMHg1NSwweDkwLDB4MDUsMHg2MCwweDAxLDB4ZDksMHgwMCwweDE2LDB4NDAsMHgxNSwweDgwLDB4MDUsMHg2MCB9LAorICAxNiwgMHhiZmMwLCAwLCB7MHgwMSwweDU5LDB4MDAsMHg3NiwweDQwLDB4MTUsMHg4MCwweDA1LDB4NjAsMHgwMSwweDU4LDB4MDAsMHg1NiwweDAwLDB4MTUsMHg4MCB9LAorICAxNiwgMHhiZmQwLCAwLCB7MHgzMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjNCwweDQwLDB4MDMsMHg2MCwweDAwLDB4ZDgsMHgwMCB9LAorICAxNiwgMHhiZmUwLCAwLCB7MHgzNiwweDAwLDB4NGQsMHg4MCwweDAzLDB4NjAsMHgwMCwweGQ4LDB4MDAsMHgzNiwweDAwLDB4MGQsMHg4MCwweDA3LDB4NjIsMHgwMCB9LAorICAxNiwgMHhiZmYwLCAwLCB7MHg1OCwweDAwLDB4MzYsMHgwMCwweDBkLDB4ODAsMHgwNywweDYwLDB4MDAsMHhkOCwweDgwLDB4MTYsMHgwMCwweDBkLDB4ODAsMHgwMyB9LAorICAxNiwgMHhjMDAwLCAwLCB7MHg2MCwweDAwLDB4ZDgsMHgwMCwweDM2LDB4MDAsMHgxZCwweDgwLDB4MzEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMDEwLCAwLCB7MHgwMCwweGM1LDB4NDIsMHgwNCwweDMwLDB4ODEsMHgwYywweDIwLDB4NDMsMHgwOCwweDEwLDB4YzIsMHgwNCwweDMwLDB4ODEsMHgwYyB9LAorICAxNiwgMHhjMDIwLCAwLCB7MHgyMCwweDQzLDB4MDgsMHgxMCwweGMyLDB4MDQsMHgzMCwweGMxLDB4MGMsMHgyMCwweDQzLDB4MDgsMHgxMCwweGMyLDB4MDYsMHgzMCB9LAorICAxNiwgMHhjMDMwLCAwLCB7MHg4MSwweDBjLDB4MjAsMHg0MywweDA4LDB4MTAsMHhjMiwweDA0LDB4MzAsMHg4MSwweDBjLDB4MjAsMHg0MywweDA4LDB4MTgsMHhjMCB9LAorICAxNiwgMHhjMDQwLCAwLCB7MHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4MGMsMHgwMCB9LAorICAxNiwgMHhjMDUwLCAwLCB7MHgwMywweDAwLDB4MDAsMHhjMCwweDAwLDB4MzAsMHgwMCwweDBjLDB4MDAsMHgwMywweDAwLDB4MDAsMHhjMCwweDQwLDB4MzAsMHgwMCB9LAorICAxNiwgMHhjMDYwLCAwLCB7MHgwYywweDAwLDB4MDMsMHgwMCwweDAwLDB4YzAsMHgwMCwweDMwLDB4MDAsMHgwYywweDAwLDB4MDMsMHgwMCwweDAwLDB4YzAsMHgwMCB9LAorICAxNiwgMHhjMDcwLCAwLCB7MHgzMCwweDAwLDB4MGMsMHgwMCwweDAzLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMDgwLCAwLCB7MHgwMCwweDgwLDB4MDIsMHgwMSwweDMwLDB4ODAsMHg0YywweDIwLDB4MTMsMHgwOCwweDA0LDB4YzIsMHgwMSwweDMwLDB4ODAsMHg0YyB9LAorICAxNiwgMHhjMDkwLCAwLCB7MHgyMCwweDEzLDB4MDgsMHgwNCwweGMyLDB4MjUsMHgzMCwweDgxLDB4NGMsMHgyMCwweDEzLDB4MDgsMHgwNCwweGMyLDB4MDEsMHgzMCB9LAorICAxNiwgMHhjMGEwLCAwLCB7MHg4MCwweDRjLDB4MzIsMHg1MywweDA4LDB4MDQsMHhjMiwweDAxLDB4MzAsMHg4MCwweDRjLDB4MjAsMHgxMywweDA4LDB4MDQsMHhjMCB9LAorICAxNiwgMHhjMGIwLCAwLCB7MHgyMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjNSwweDQyLDB4MDUsMHg2MiwweDgxLDB4NTgsMHgyMCB9LAorICAxNiwgMHhjMGMwLCAwLCB7MHg1NiwweDA4LDB4MTUsMHg4MiwweDA0LDB4NjAsMHg4MSwweDU4LDB4MjAsMHg0NiwweDA4LDB4MTUsMHg4MiwweDAxLDB4NjAsMHhjMSB9LAorICAxNiwgMHhjMGQwLCAwLCB7MHg1OCwweDIwLDB4NDYsMHgwOCwweDE1LDB4ODIsMHgwMSwweDYwLDB4ODEsMHg1OCwweDMwLDB4NTYsMHgwOCwweDE1LDB4ODIsMHgwNSB9LAorICAxNiwgMHhjMGUwLCAwLCB7MHg2MCwweDgxLDB4NTgsMHgyMCwweDU2LDB4MDgsMHgwNSwweDgwLDB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMGYwLCAwLCB7MHgwMCwweGM1LDB4NDIsMHgwMCwweDIwLDB4ODAsMHgwOCwweDIwLDB4MDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgwOCB9LAorICAxNiwgMHhjMTAwLCAwLCB7MHgyMCwweDAyLDB4MDgsMHgwMCwweDgyLDB4MDAsMHgyMCwweDgwLDB4MGMsMHgyMCwweDAyLDB4MDgsMHgwMCwweDgyLDB4MDAsMHgyMCB9LAorICAxNiwgMHhjMTEwLCAwLCB7MHg4MCwweDA4LDB4MjAsMHgwMywweDA4LDB4MDAsMHg4MiwweDAwLDB4MjAsMHg4MCwweDA4LDB4MjAsMHgwMiwweDA4LDB4MDAsMHg4MCB9LAorICAxNiwgMHhjMTIwLCAwLCB7MHgyMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjNSwweDQyLDB4MDQsMHg2NiwweDgxLDB4MTgsMHgyMCB9LAorICAxNiwgMHhjMTMwLCAwLCB7MHg0NiwweDA4LDB4MTEsMHg4MiwweDA0LDB4NjQsMHg4MSwweDE4LDB4MjAsMHg0NiwweDA4LDB4MTEsMHg4MiwweDAwLDB4NjAsMHg4MSB9LAorICAxNiwgMHhjMTQwLCAwLCB7MHgwYywweDIwLDB4NDYsMHgwOCwweDExLDB4ODIsMHgwMCwweDYwLDB4ODEsMHgxOSwweDIwLDB4NDMsMHgwOCwweDExLDB4ODIsMHgwNCB9LAorICAxNiwgMHhjMTUwLCAwLCB7MHg2MCwweDgxLDB4MTksMHgyMCwweDQ2LDB4NDgsMHgwMSwweDgwLDB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMTYwLCAwLCB7MHgwMCwweGM1LDB4NjAsMHgwNSwweDU4LDB4MDEsMHg1NiwweDAwLDB4NTUsMHg4MCwweDE1LDB4NjAsMHgwNCwweDU4LDB4MDEsMHg1NiB9LAorICAxNiwgMHhjMTcwLCAwLCB7MHgwMCwweDQ1LDB4ODAsMHgxMSwweDYwLDB4MDAsMHg1OCwweDAwLDB4MDYsMHgwMCwweDQ1LDB4ODAsMHgxNSwweDYwLDB4MDEsMHg1OCB9LAorICAxNiwgMHhjMTgwLCAwLCB7MHgwMSwweDE2LDB4MDAsMHgwMSwweDgwLDB4MTUsMHg2MCwweDA1LDB4NTgsMHgwMSwweDU2LDB4MDAsMHg1NSwweDgwLDB4MDUsMHg0MCB9LAorICAxNiwgMHhjMTkwLCAwLCB7MHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA2LDB4MDEsMHg0OSwweDgwLDB4MTAsMHg2MCB9LAorICAxNiwgMHhjMWEwLCAwLCB7MHgxNCwweDE4LDB4MDUsMHgwNiwweDAxLDB4NzksMHg4MCwweDUwLDB4NjAsMHgxNCwweDE4LDB4MDEsMHgwNiwweDAxLDB4NDEsMHg4MCB9LAorICAxNiwgMHhjMWIwLCAwLCB7MHg1MCwweDYwLDB4MDQsMHgxOCwweDA1LDB4MDYsMHgwMSwweDQxLDB4ODAsMHgxMCwweDYwLDB4MTQsMHgxOCwweDA1LDB4MDYsMHgwMSB9LAorICAxNiwgMHhjMWMwLCAwLCB7MHg0MSwweDgwLDB4NTAsMHg2MCwweDE0LDB4MTgsMHgwNSwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMWQwLCAwLCB7MHgwMCwweDgwLDB4MDIsMHgwMSwweDA0LDB4ODAsMHg0MCwweDIwLDB4MTAsMHgwOCwweDA0LDB4MDIsMHgwMCwweDA0LDB4MDQsMHg0MCB9LAorICAxNiwgMHhjMWUwLCAwLCB7MHgyMCwweDEwLDB4MDgsMHgwNCwweDAyLDB4MDEsMHgwMCwweDg0LDB4NDAsMHgyMCwweDEwLDB4MDgsMHgwNCwweDAyLDB4MDEsMHgwMCB9LAorICAxNiwgMHhjMWYwLCAwLCB7MHg4MCwweDQxLDB4MjAsMHgxMCwweDA4LDB4MDQsMHgwMiwweDExLDB4MDAsMHg4MCwweDQxLDB4MjAsMHgxMCwweDQ4LDB4MDQsMHgwMCB9LAorICAxNiwgMHhjMjAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjNSwweDQ2LDB4MDMsMHg1MSwweDgwLDB4ZDQsMHg2MCB9LAorICAxNiwgMHhjMjEwLCAwLCB7MHgzNSwweDE4LDB4MGQsMHg0NiwweDAyLDB4MTEsMHg4MCwweGQ0LDB4NjAsMHgzNSwweDE4LDB4MGQsMHg0NiwweDAzLDB4MTEsMHg4MCB9LAorICAxNiwgMHhjMjIwLCAwLCB7MHhkNCwweDYwLDB4MzUsMHgxOCwweDBkLDB4NDYsMHgwMywweDUxLDB4ODAsMHhkNCwweDYwLDB4MzUsMHgxOCwweDBkLDB4NDYsMHgwMyB9LAorICAxNiwgMHhjMjMwLCAwLCB7MHg1MSwweDgwLDB4ZDQsMHg2MCwweDM1LDB4MTgsMHgwZCwweDQwLDB4MzEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMjQwLCAwLCB7MHgwMCwweGM1LDB4NDYsMHgwNSwweDcwLDB4ODEsMHg1YywweDYwLDB4MDcsMHgxOCwweDE1LDB4YzYsMHgwNCwweDcxLDB4ODEsMHgxYyB9LAorICAxNiwgMHhjMjUwLCAwLCB7MHg2MCwweDE3LDB4MTgsMHgxNSwweGM2LDB4MDUsMHgzMSwweDgxLDB4ZGMsMHg2MCwweDU3LDB4MTgsMHgxNSwweGM2LDB4MDUsMHg3MSB9LAorICAxNiwgMHhjMjYwLCAwLCB7MHg4MCwweDFjLDB4NjAsMHg3NywweDE4LDB4MTUsMHhjZSwweDA1LDB4NzEsMHg4MSwweDVjLDB4NjAsMHg1NywweDE4LDB4MTUsMHhjMCB9LAorICAxNiwgMHhjMjcwLCAwLCB7MHgxMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDQ2LDB4MDIsMHg3MSwweDgwLDB4OWMsMHg2MSB9LAorICAxNiwgMHhjMjgwLCAwLCB7MHg3NywweDE4LDB4MGQsMHhjNiwweDAyLDB4NzEsMHg4MCwweDljLDB4NjAsMHgzNywweDE4LDB4MGQsMHhjMiwweDAzLDB4MzEsMHg4MCB9LAorICAxNiwgMHhjMjkwLCAwLCB7MHg1YywweDYwLDB4MjcsMHgxOCwweDBkLDB4YzYsMHgwMywweDcxLDB4ODAsMHg5YywweDYwLDB4MTcsMHgxOCwweDBkLDB4Y2UsMHgwMyB9LAorICAxNiwgMHhjMmEwLCAwLCB7MHg3MSwweDgwLDB4ZGMsMHg2MCwweDM3LDB4MTgsMHgwZCwweGMwLDB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMmIwLCAwLCB7MHgwMCwweDQ1LDB4NDYsMHgwNSwweDc1LDB4ODEsMHg1YywweDYwLDB4NzcsMHgxOCwweDE1LDB4YzYsMHgwNSwweDc1LDB4ODEsMHg1YyB9LAorICAxNiwgMHhjMmMwLCAwLCB7MHg2MCwweDU3LDB4MTgsMHgxNSwweGM2LDB4MDUsMHgzMSwweDgxLDB4MGMsMHg2MCwweDU3LDB4MTgsMHgxNSwweGM2LDB4MDUsMHg3MSB9LAorICAxNiwgMHhjMmQwLCAwLCB7MHg4MSwweDVjLDB4NjAsMHg0MywweDE4LDB4MTUsMHhjNiwweDA1LDB4NzEsMHg4MSwweDVjLDB4NjAsMHg1NywweDE4LDB4MTUsMHhjMCB9LAorICAxNiwgMHhjMmUwLCAwLCB7MHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgyMCB9LAorICAxNiwgMHhjMmYwLCAwLCB7MHgxMiwweDA4LDB4MDQsMHg4MiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MiwweDAxLDB4MjAsMHg4MCB9LAorICAxNiwgMHhjMzAwLCAwLCB7MHg1YywweDIwLDB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDAwLDB4MTcsMHgwOCwweDA0LDB4ODIsMHgwMSB9LAorICAxNiwgMHhjMzEwLCAwLCB7MHgyMCwweDgwLDB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMzIwLCAwLCB7MHgwMCwweDAwLDB4MDYsMHgwMSwweDYzLDB4ODAsMHg1OCwweDYwLDB4MTYsMHgxOCwweDA1LDB4ODYsMHgwMSwweDYxLDB4ODAsMHg1OCB9LAorICAxNiwgMHhjMzMwLCAwLCB7MHg2MCwweDE2LDB4MTgsMHgwNSwweDg2LDB4MDEsMHg2MSwweDgxLDB4NTgsMHg2MCwweDE2LDB4MTgsMHgwNSwweDg2LDB4MDEsMHg2MSB9LAorICAxNiwgMHhjMzQwLCAwLCB7MHg4MCwweDU4LDB4NjAsMHg1NiwweDE4LDB4MDUsMHg4NiwweDAxLDB4NjEsMHg4MCwweDU4LDB4NjAsMHgxNiwweDE4LDB4MDUsMHg4MCB9LAorICAxNiwgMHhjMzUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0NSwweDQwLDB4MDUsMHg3MCwweDAxLDB4NWMsMHgwMCB9LAorICAxNiwgMHhjMzYwLCAwLCB7MHgxNywweDAwLDB4MTUsMHhjMCwweDg1LDB4NzQsMHgwMSwweDFjLDB4MDAsMHg0NywweDAwLDB4MTEsMHhjMCwweDA1LDB4NzAsMHgwMSB9LAorICAxNiwgMHhjMzcwLCAwLCB7MHg1YywweDAwLDB4NTMsMHgwMCwweDEwLDB4YzAsMHgwNSwweDcwLDB4MDEsMHg1YywweDAwLDB4NTcsMHgwMCwweDE0LDB4YzksMHgwNCB9LAorICAxNiwgMHhjMzgwLCAwLCB7MHg3MCwweDAxLDB4MWMsMHgwMCwweDU3LDB4MDAsMHgxNSwweGMwLDB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjMzkwLCAwLCB7MHgwMCwweDQ1LDB4NDIsMHgwMCwweDYwLDB4YzAsMHgxOCwweDIwLDB4MDYsMHgwOCwweDAxLDB4ODIsMHgwMCwweDYwLDB4ODAsMHgxOCB9LAorICAxNiwgMHhjM2EwLCAwLCB7MHgyMCwweDA2LDB4MDgsMHgwMSwweDgyLDB4MDAsMHgyMCwweDgwLDB4MTgsMHgzMCwweDAyLDB4MDgsMHgwMCwweDgyLDB4MTAsMHg2MCB9LAorICAxNiwgMHhjM2IwLCAwLCB7MHg4MCwweDE4LDB4MjAsMHgwNiwweDA4LDB4MDAsMHg4MiwweDAwLDB4NjAsMHg4MCwweDE4LDB4MjAsMHgwNiwweDA4LDB4MDEsMHg4MCB9LAorICAxNiwgMHhjM2MwLCAwLCB7MHgxMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0NCwweDQyLDB4MDQsMHgyMCwweDgxLDB4MDgsMHgyMCB9LAorICAxNiwgMHhjM2QwLCAwLCB7MHgwMiwweDA4LDB4MTAsMHg4MiwweDA0LDB4MjAsMHg4MSwweDA4LDB4MjAsMHg0MiwweDA4LDB4MTAsMHg4MiwweDA0LDB4MjAsMHg4MSB9LAorICAxNiwgMHhjM2UwLCAwLCB7MHgwOCwweDIwLDB4NDYsMHgwOCwweDExLDB4ODIsMHgwNCwweDIwLDB4ODEsMHgwOCwweDIwLDB4NDIsMHgwOCwweDExLDB4ODIsMHgwNCB9LAorICAxNiwgMHhjM2YwLCAwLCB7MHgyMCwweDgxLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMCwweDgwLDB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNDAwLCAwLCB7MHgwMCwweDQ1LDB4NDIsMHgwNSwweDQwLDB4YzUsMHg1MCwweDIwLDB4MTQsMHgwOCwweDE1LDB4MDAsMHgwNCwweDQwLDB4ODEsMHg1MCB9LAorICAxNiwgMHhjNDEwLCAwLCB7MHgyMCwweDU0LDB4MDgsMHgxMSwweDAyLDB4MDUsMHgwMCwweDgwLDB4MTAsMHgyMCwweDQ1LDB4MGMsMHgxMSwweDQyLDB4MDQsMHg0MCB9LAorICAxNiwgMHhjNDIwLCAwLCB7MHg4MSwweDUwLDB4MjAsMHgxNCwweDBjLDB4MTUsMHg0MiwweDA0LDB4NDAsMHg4MSwweDEwLDB4MjAsMHg1NCwweDA4LDB4MTUsMHgwMCB9LAorICAxNiwgMHhjNDMwLCAwLCB7MHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAzLDB4MDEsMHg1MCwweGMwLDB4NDQsMHgzMCB9LAorICAxNiwgMHhjNDQwLCAwLCB7MHgxNSwweDBjLDB4MDUsMHg0MywweDAxLDB4NTAsMHhjMCwweDRjLDB4MzAsMHgxNSwweDBjLDB4MDUsMHg0MywweDIxLDB4NTAsMHhjMCB9LAorICAxNiwgMHhjNDUwLCAwLCB7MHg1NCwweDMwLDB4MTUsMHgwYywweDA1LDB4NDMsMHgwMSwweDUwLDB4YzAsMHg1NCwweDMwLDB4MTUsMHgwYywweDA1LDB4NDMsMHgwMSB9LAorICAxNiwgMHhjNDYwLCAwLCB7MHg1MCwweGMwLDB4NTQsMHgyMCwweDE1LDB4MGMsMHgwNSwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNDcwLCAwLCB7MHgwMCwweDAwLDB4MDgsMHgwMCwweDQyLDB4MDAsMHgwNCwweDgwLDB4MDQsMHgyMCwweDAxLDB4MDgsMHgwMCwweDQyLDB4MDAsMHgwNCB9LAorICAxNiwgMHhjNDgwLCAwLCB7MHg4MCwweDA0LDB4MjAsMHgwMSwweDA4LDB4MDAsMHgwMiwweDAwLDB4MTAsMHgwMCwweDA0LDB4MDAsMHgwMSwweDA4LDB4MDAsMHg0MiB9LAorICAxNiwgMHhjNDkwLCAwLCB7MHgwMCwweDEwLDB4ODAsMHgwNCwweDAwLDB4MDEsMHgwOCwweDAwLDB4NDIsMHgwMCwweDEwLDB4ODAsMHgwNCwweDIwLDB4MDEsMHgwMCB9LAorICAxNiwgMHhjNGEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0NSwweDQyLDB4MDIsMHgwMCwweDgwLDB4ODQsMHgyMCB9LAorICAxNiwgMHhjNGIwLCAwLCB7MHgyMCwweDA4LDB4MDgsMHgwMiwweDAyLDB4MDAsMHg4MCwweDg0LDB4MjAsMHgyMCwweDA4LDB4MDgsMHgwMiwweDAyLDB4MDAsMHg4MCB9LAorICAxNiwgMHhjNGMwLCAwLCB7MHg4MCwweGEwLDB4MjAsMHgyOCwweDA4LDB4MDIsMHgwMiwweDAwLDB4ODAsMHg4MCwweDIwLDB4MjAsMHgyOCwweDA4LDB4MDIsMHgwMiB9LAorICAxNiwgMHhjNGQwLCAwLCB7MHgwMCwweDgwLDB4ODAsMHgyMCwweDIwLDB4MDgsMHgwOCwweDAwLDB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNGUwLCAwLCB7MHgwMCwweDQ1LDB4NDAsMHgwNSwweDYwLDB4NDEsMHg1OCwweDAwLDB4NTYsMHgwMCwweDE1LDB4ODAsMHgwNSwweDYwLDB4MDEsMHg1OCB9LAorICAxNiwgMHhjNGYwLCAwLCB7MHgwMCwweDU2LDB4MDAsMHgxNSwweDgwLDB4MDUsMHgyMCwweDAxLDB4ZDgsMHgwMCwweDU2LDB4MDAsMHgxNSwweDgwLDB4MDUsMHg2MCB9LAorICAxNiwgMHhjNTAwLCAwLCB7MHgwMSwweDU4LDB4MDAsMHg3NiwweDAwLDB4MTUsMHg4MCwweDA1LDB4NjAsMHgwMSwweDU4LDB4MDAsMHg1NiwweDAwLDB4MTUsMHg4MCB9LAorICAxNiwgMHhjNTEwLCAwLCB7MHgxMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjNSwweDQwLDB4MDMsMHg2MCwweDAwLDB4ZDgsMHgwMCB9LAorICAxNiwgMHhjNTIwLCAwLCB7MHgyNiwweDAwLDB4MGQsMHg4MCwweDAyLDB4NjAsMHgwMCwweGQ4LDB4MDAsMHgzNiwweDAwLDB4MGQsMHg4MCwweDA3LDB4NjAsMHgwMSB9LAorICAxNiwgMHhjNTMwLCAwLCB7MHg1YywweDAwLDB4MzYsMHgwMCwweDBkLDB4ODAsMHgwMywweDYwLDB4MDAsMHhkOCwweDAwLDB4NTcsMHgwMCwweDBkLDB4ODAsMHgwMiB9LAorICAxNiwgMHhjNTQwLCAwLCB7MHg2MCwweDAwLDB4OTgsMHgwMCwweDM2LDB4MDAsMHgwZCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwNCwweDMwLDB4MjEsMHgwYywweDAwLDB4NDMsMHgwMCwweDEwLDB4YzAsMHgwNCwweDMwLDB4MDEsMHgwYyB9LAorICAxNiwgMHhjNTYwLCAwLCB7MHgwMCwweDQzLDB4MDAsMHgxMCwweGMwLDB4MDQsMHgzMCwweDAxLDB4MTgsMHgwMCwweDQzLDB4MDAsMHgxMCwweGMwLDB4MDQsMHgzMCB9LAorICAxNiwgMHhjNTcwLCAwLCB7MHgwMSwweDBjLDB4MDAsMHg0NiwweDAwLDB4MTAsMHhjMCwweDA0LDB4MzAsMHgwMSwweDBjLDB4MDAsMHg0MywweDAwLDB4MTAsMHhjMCB9LAorICAxNiwgMHhjNTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4MGMsMHgwMCB9LAorICAxNiwgMHhjNTkwLCAwLCB7MHgwMywweDAwLDB4MDAsMHhjMCwweDAwLDB4MzUsMHgwOCwweDBjLDB4MDAsMHgwMywweDAwLDB4MDAsMHhjNiwweDAwLDB4MTQsMHgwMCB9LAorICAxNiwgMHhjNWEwLCAwLCB7MHgwOCwweDAwLDB4MDMsMHg0MCwweDAwLDB4YzAsMHgwMCwweDMwLDB4MDAsMHgwZCwweDQwLDB4MDIsMHgwMCwweDAwLDB4YzAsMHgwMCB9LAorICAxNiwgMHhjNWIwLCAwLCB7MHgzMCwweDAwLDB4MGMsMHgwMCwweDAzLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNWMwLCAwLCB7MHgwMCwweDAwLDB4MDUsMHgwMSwweDMxLDB4NDAsMHg0YywweDUwLDB4MTMsMHgxNCwweDA0LDB4YzUsMHgwMSwweDMxLDB4YzAsMHg0YyB9LAorICAxNiwgMHhjNWQwLCAwLCB7MHg1MCwweDEzLDB4MTQsMHgwNCwweGM1LDB4MDUsMHgzMSwweDQxLDB4NGMsMHg1MCwweDEzLDB4MTQsMHgwNCwweGM1LDB4MDEsMHgzMSB9LAorICAxNiwgMHhjNWUwLCAwLCB7MHg0MCwweDRjLDB4NzAsMHg1MywweDE0LDB4MDQsMHhjNSwweDAxLDB4MzEsMHg0MCwweDRjLDB4NDAsMHgxMywweDE0LDB4MDQsMHhjMCB9LAorICAxNiwgMHhjNWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIzLDB4MDUsMHg2OCwweGMxLDB4NWEsMHgzMCB9LAorICAxNiwgMHhjNjAwLCAwLCB7MHg1NiwweDhjLDB4MTUsMHhhMywweDA1LDB4NjksMHhjMSwweDVhLDB4MzAsMHg0NiwweDhjLDB4MTEsMHhhNywweDAxLDB4NjgsMHhjMCB9LAorICAxNiwgMHhjNjEwLCAwLCB7MHgxYSwweDMwLDB4NTYsMHg4YywweDExLDB4YTMsMHgwNCwweDY4LDB4YzEsMHgxYSwweDMwLDB4MTYsMHg4YywweDE1LDB4YTMsMHgwNCB9LAorICAxNiwgMHhjNjIwLCAwLCB7MHg2OCwweGMxLDB4NWEsMHgzMCwweDU2LDB4OGMsMHgxMSwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNjMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgwMCwweDAwLDB4ODAsMHgwMCwweDI0LDB4MDAsMHgwOCB9LAorICAxNiwgMHhjNjQwLCAwLCB7MHgwMSwweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgyNCwweDAwLDB4MDgsMHg4MCwweDAyLDB4NjAsMHgwMCwweDgwLDB4MDAsMHgyMCB9LAorICAxNiwgMHhjNjUwLCAwLCB7MHgwMCwweDA5LDB4NDAsMHgwMiwweDIwLDB4MDAsMHg4MCwweDAwLDB4MjAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDAwLDB4MDAsMHg4MCB9LAorICAxNiwgMHhjNjYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4NDQsMHg2MiwweDExLDB4MTgsMHg4NCB9LAorICAxNiwgMHhjNjcwLCAwLCB7MHg0NiwweDIxLDB4MTEsMHg4OCwweDQ0LDB4NjIsMHgwOSwweDE4LDB4ODQsMHg0NiwweDIxLDB4MTEsMHg4OCwweDYwLDB4NjIsMHgxMCB9LAorICAxNiwgMHhjNjgwLCAwLCB7MHgxOCwweDA0LDB4NDYsMHgwMSwweDExLDB4ODgsMHg0NCwweDYyLDB4MTEsMHgxOCwweDgwLDB4MDYsMHgwMSwweDExLDB4ODgsMHg0NCB9LAorICAxNiwgMHhjNjkwLCAwLCB7MHg2MiwweDExLDB4MTgsMHg4NCwweDQ2LDB4MjEsMHgxMSwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNmEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHg0NSwweDUwLDB4MTEsMHg1NCwweDA0LDB4NTUsMHgwMSwweDE1LDB4NDAsMHg0NCwweDUwLDB4MTEsMHg1NCB9LAorICAxNiwgMHhjNmIwLCAwLCB7MHgwNCwweDQ1LDB4MDEsMHgxMSwweDQwLDB4NDAsMHg1MCwweDEwLDB4NTQsMHgwNCwweDQ1LDB4MDEsMHgxNSwweDQwLDB4NDQsMHg1MCB9LAorICAxNiwgMHhjNmMwLCAwLCB7MHgxMSwweDE0LDB4MDAsMHgxNSwweDAxLDB4MTUsMHg0MCwweDQ0LDB4NTAsMHgxMSwweDU0LDB4MDQsMHg1NSwweDAwLDB4MTEsMHg0MCB9LAorICAxNiwgMHhjNmQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MjEsMHg0MiwweDA4LDB4NTAsMHg4MiB9LAorICAxNiwgMHhjNmUwLCAwLCB7MHgxNCwweDIwLDB4ODUsMHgwOCwweDIxLDB4NDIsMHgwMCwweDUwLDB4ODIsMHgxNCwweDIwLDB4ODUsMHgwOCwweDIwLDB4NDIsMHgwOCB9LAorICAxNiwgMHhjNmYwLCAwLCB7MHg1MCwweDgyLDB4MTUsMHgyMCwweDA1LDB4NDgsMHgyMSwweDQyLDB4MDgsMHg1MCwweDgyLDB4MTQsMHgyMCwweDgxLDB4NDAsMHgyMSB9LAorICAxNiwgMHhjNzAwLCAwLCB7MHg0MiwweDA4LDB4NTAsMHg4MiwweDE0LDB4MjAsMHg4NSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNzEwLCAwLCB7MHgwMCwweDAwLDB4MGEsMHgwMSwweDAyLDB4ODAsMHg0MCwweGEwLDB4MTAsMHgyOCwweDA0LDB4MGEsMHgwMSwweDAyLDB4ODQsMHg0MCB9LAorICAxNiwgMHhjNzIwLCAwLCB7MHhhMSwweDEwLDB4MjgsMHgwNCwweDBhLDB4MDEsMHgwMiwweDgwLDB4NDAsMHhhMCwweDAwLDB4MjgsMHgwMCwweDBhLDB4MDEsMHgwMiB9LAorICAxNiwgMHhjNzMwLCAwLCB7MHg4MCwweDQwLDB4YjAsMHgxMCwweDI4LDB4MDAsMHgwYSwweDAxLDB4MDIsMHg4MCwweDQwLDB4YTAsMHgxMCwweDI4LDB4MDQsMHgwMCB9LAorICAxNiwgMHhjNzQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBjLDB4MDMsMHg1MywweDAwLDB4ZDQsMHhjMCB9LAorICAxNiwgMHhjNzUwLCAwLCB7MHgzNSwweDMwLDB4MGQsMHg0YywweDAzLDB4NTMsMHgwMCwweGQ0LDB4YzAsMHgzNSwweDMwLDB4MGQsMHg0YywweDAzLDB4NTMsMHgwMCB9LAorICAxNiwgMHhjNzYwLCAwLCB7MHhkNCwweGMwLDB4MjEsMHgzMCwweDA4LDB4NGMsMHgwMywweDUzLDB4MDAsMHhkNCwweGMwLDB4MzUsMHgzMCwweDA4LDB4NGMsMHgwMyB9LAorICAxNiwgMHhjNzcwLCAwLCB7MHg1MywweDAwLDB4ZDQsMHhjMCwweDM1LDB4MzAsMHgwZCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjNzgwLCAwLCB7MHgwMCwweDAwLDB4MDgsMHgwNCwweDcwLDB4MDEsMHg1YywweDgwLDB4MDcsMHgyMCwweDI1LDB4YzksMHgwNCwweDcyLDB4MDEsMHg1YyB9LAorICAxNiwgMHhjNzkwLCAwLCB7MHg4MCwweDQ3LDB4MjAsMHgxNSwweGM4LDB4MDAsMHg3MiwweDA1LDB4ZGMsMHg4MCwweDU3LDB4MjAsMHgxNSwweGM4LDB4MDUsMHg3MiB9LAorICAxNiwgMHhjN2EwLCAwLCB7MHgwMSwweDFjLDB4OTAsMHg2NywweDIwLDB4MTUsMHhjOCwweDA1LDB4NzIsMHgwMSwweDFjLDB4ODAsMHg1NywweDIwLDB4MTUsMHhjMCB9LAorICAxNiwgMHhjN2IwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIzLDB4MTgsMHg0OCwweGMyLDB4MTIsMHgzMSB9LAorICAxNiwgMHhjN2MwLCAwLCB7MHg4NCwweDhjLDB4NjEsMHgwMywweDE4LDB4NDAsMHhjOCwweDEyLDB4MzEsMHg4NCwweDhjLDB4NjEsMHgwMywweDE4LDB4NDgsMHhjNCB9LAorICAxNiwgMHhjN2QwLCAwLCB7MHgxMCwweDMxLDB4ODQsMHgwYywweDQxLDB4MjMsMHgxOCwweDQ4LDB4YzYsMHgxMCwweDMwLDB4MDQsMHgwYywweDYxLDB4MjMsMHgxOCB9LAorICAxNiwgMHhjN2UwLCAwLCB7MHg0OCwweGM2LDB4MTIsMHgzMCwweDg0LDB4OGMsMHgyMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjN2YwLCAwLCB7MHgwMCwweDAwLDB4M2YsMHhmZiwweDRmLDB4ZmYsMHhkMywweGZmLDB4ZjQsMHhmZiwweGZkLDB4M2YsMHhmZiwweDRmLDB4ZmYsMHhkMyB9LAorICAxNiwgMHhjODAwLCAwLCB7MHhmZiwweGY0LDB4ZmYsMHhmZCwweDNmLDB4ZmYsMHg0ZiwweGZmLDB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhmZCwweDNmLDB4ZmYsMHg0ZiB9LAorICAxNiwgMHhjODEwLCAwLCB7MHhmZiwweGQzLDB4ZmYsMHhmNCwweGZmLDB4ZmQsMHgzZiwweGZmLDB4NGYsMHhmZiwweGQzLDB4ZmYsMHhmNCwweGZmLDB4YmQsMHgwMCB9LAorICAxNiwgMHhjODIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjODMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjODQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjODUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjODYwLCAwLCB7MHgwMCwweDAwLDB4MmMsMHhkYiwweDBiLDB4MzYsMHhjMiwweGNkLDB4YjAsMHhiMywweDZjLDB4MmMsMHhkYiwweDA5LDB4MzYsMHhjMiB9LAorICAxNiwgMHhjODcwLCAwLCB7MHhjZCwweGIwLDB4YjMsMHg2YywweDJjLDB4ZGIsMHgwYiwweDM2LDB4YzIsMHhjZCwweGIwLDB4YjMsMHg2YywweDJjLDB4ZGIsMHgwYiB9LAorICAxNiwgMHhjODgwLCAwLCB7MHgzNiwweGMyLDB4Y2QsMHhiMCwweGIzLDB4NmMsMHgyYywweGRiLDB4MGIsMHgzNiwweGMyLDB4Y2QsMHhiMCwweGIzLDB4MmMsMHgwMCB9LAorICAxNiwgMHhjODkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMzLDB4M2MsMHg0YywweGNmLDB4MTMsMHgzMyB9LAorICAxNiwgMHhjOGEwLCAwLCB7MHhjNCwweGNjLDB4ZjEsMHgzMywweDNjLDB4NGQsMHg0ZSwweDkzLDB4MzMsMHhjNCwweGNjLDB4ZjEsMHgyYiwweDNjLDB4NGMsMHhjZiB9LAorICAxNiwgMHhjOGIwLCAwLCB7MHgxMywweDMzLDB4YzQsMHhjYywweGU5LDB4MzMsMHgzYywweDRjLDB4Y2YsMHgxMiwweGI1LDB4YzQsMHhjYywweGYxLDB4MzMsMHgzYyB9LAorICAxNiwgMHhjOGMwLCAwLCB7MHg0YywweGNmLDB4MTMsMHgzMywweGM0LDB4Y2QsMHgzMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjOGQwLCAwLCB7MHgwMCwweDAwLDB4M2IsMHg3ZSwweDRlLDB4YzcsMHg5MywweGI3LDB4ZTQsMHhlZCwweGY5LDB4MjMsMHg3ZSwweDRlLDB4NDcsMHg5MyB9LAorICAxNiwgMHhjOGUwLCAwLCB7MHhiNywweGU0LDB4ZWQsMHhmOSwweDNmLDB4N2UsMHg0ZSwweGRlLDB4MTIsMHgzNywweGU0LDB4OGQsMHhmOSwweDNiLDB4N2UsMHg0ZSB9LAorICAxNiwgMHhjOGYwLCAwLCB7MHhkZiwweDkzLDB4ZjcsMHg4NCwweDhkLDB4ZjksMHgzYiwweDdlLDB4NGUsMHhkZiwweDkzLDB4YjEsMHhlNCwweGVkLDB4YjksMHgwMCB9LAorICAxNiwgMHhjOTAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDIsMHg3MCwweDQwLDB4OWMsMHgxMSB9LAorICAxNiwgMHhjOTEwLCAwLCB7MHg2NywweDA0LDB4MTksMHhjMywweDAyLDB4NzAsMHg0MCwweDljLDB4MTAsMHgyNywweDA0LDB4MDksMHhjMSwweDAyLDB4NzAsMHg0MCB9LAorICAxNiwgMHhjOTIwLCAwLCB7MHgxYywweDEwLDB4MjcsMHgxNCwweDAxLDB4YzEsMHgwMiwweDcwLDB4NDAsMHg5YywweDUwLDB4MDcsMHgwNCwweDA5LDB4YzEsMHgwMiB9LAorICAxNiwgMHhjOTMwLCAwLCB7MHg3MCwweDQwLDB4OWMsMHgxMCwweDY3LDB4MTQsMHgxMSwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjOTQwLCAwLCB7MHgwMCwweDAwLDB4MDQsMHgwNSwweDcxLDB4MDEsMHg1YywweDQwLDB4NTcsMHgxMCwweDE1LDB4YzQsMHgwNSwweDcxLDB4MDEsMHg1YyB9LAorICAxNiwgMHhjOTUwLCAwLCB7MHg0MCwweDU3LDB4MTAsMHgxNSwweGM2LDB4MDUsMHg3MSwweDAxLDB4NWMsMHg0MCwweDU3LDB4MTAsMHgxMCwweGM0LDB4MDUsMHg3MSB9LAorICAxNiwgMHhjOTYwLCAwLCB7MHgwMSwweDVjLDB4NjQsMHgwMywweDEwLDB4NTUsMHhjNCwweDA1LDB4NzEsMHgwMSwweDVjLDB4NDAsMHg1NywweDEwLDB4MTUsMHhjMCB9LAorICAxNiwgMHhjOTcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgyMCB9LAorICAxNiwgMHhjOTgwLCAwLCB7MHgxMiwweDA4LDB4MDQsMHg4MiwweDAxLDB4MjEsMHg4MCwweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MCwweDAxLDB4MjAsMHg4MCB9LAorICAxNiwgMHhjOTkwLCAwLCB7MHg0OCwweDIwLDB4MTIsMHgwOCwweDA1LDB4YzIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDI0LDB4MTcsMHgwOCwweDA0LDB4ODIsMHgwMSB9LAorICAxNiwgMHhjOWEwLCAwLCB7MHgyMCwweDgwLDB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjOWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MDAsMHgxOCwweDAwLDB4NDYsMHgwMCwweDExLDB4ODQsMHgwMCwweDYwLDB4MDAsMHgxOCB9LAorICAxNiwgMHhjOWMwLCAwLCB7MHgwMCwweDA2LDB4MDAsMHgwMSwweDgwLDB4MDAsMHg2MCwweDAxLDB4MTgsMHgwMCwweDA2LDB4MTAsMHg5MSwweDgwLDB4MDAsMHg2MCB9LAorICAxNiwgMHhjOWQwLCAwLCB7MHgwMCwweDE4LDB4NDYsMHg0NiwweDE4LDB4MDEsMHg4MCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MDAsMHgwNiwweDEwLDB4MDEsMHg4MCB9LAorICAxNiwgMHhjOWUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHg3MywweDAxLDB4MWMsMHg4MCB9LAorICAxNiwgMHhjOWYwLCAwLCB7MHgwNywweDIwLDB4MDEsMHhjOCwweDA0LDB4NzIsMHgwMSwweDFjLDB4ODAsMHg0NywweDIwLDB4MTEsMHhjOCwweDA0LDB4NzIsMHgwMSB9LAorICAxNiwgMHhjYTAwLCAwLCB7MHgxYywweDgwLDB4NDcsMHgyMiwweDExLDB4YzgsMHgwNCwweDcyLDB4MDEsMHgxYywweDgwLDB4MDcsMHgyMCwweDExLDB4YzgsMHgwNCB9LAorICAxNiwgMHhjYTEwLCAwLCB7MHg3MiwweDAxLDB4MWMsMHg4MCwweDA3LDB4MjgsMHgxMSwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjYTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MDAsMHgxOCwweDAwLDB4MDYsMHgwMCwweDAxLDB4ODAsMHgwMCwweDYwLDB4MDAsMHgxOCB9LAorICAxNiwgMHhjYTMwLCAwLCB7MHgwMCwweDA2LDB4MDAsMHgwMSwweDgwLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgwMCwweDA2LDB4MDAsMHgwMSwweDgwLDB4MDAsMHg2MCB9LAorICAxNiwgMHhjYTQwLCAwLCB7MHgwMCwweDE4LDB4MDAsMHg0NiwweDA0LDB4MDEsMHg4MCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MDAsMHgwNiwweDAwLDB4MDEsMHg4MCB9LAorICAxNiwgMHhjYTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4MDQsMHgyMiwweDAxLDB4MDgsMHg4MCB9LAorICAxNiwgMHhjYTYwLCAwLCB7MHgwMiwweDIwLDB4MDAsMHg5MCwweDA0LDB4MjcsMHg4MSwweDA4LDB4ODAsMHg0MiwweDIwLDB4MTAsMHg5OCwweDA0LDB4MjQsMHgwMSB9LAorICAxNiwgMHhjYTcwLCAwLCB7MHgwOCwweDgwLDB4NDIsMHg0OCwweDEwLDB4ODgsMHgwNCwweDIyLDB4MDEsMHgwOSwweDQwLDB4NDIsMHg2MCwweDEwLDB4ODgsMHgwNCB9LAorICAxNiwgMHhjYTgwLCAwLCB7MHgyMiwweDAxLDB4MDgsMHhjMCwweDAyLDB4NDAsMHgxMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjYTkwLCAwLCB7MHgwMCwweDAwLDB4MmEsMHgwNCwweDRiLDB4ODEsMHgxMiwweGEwLDB4MDQsMHhhOCwweDAxLDB4MmEsMHgwNCwweDRhLDB4ODEsMHgxMiB9LAorICAxNiwgMHhjYWEwLCAwLCB7MHhhMCwweDQ0LDB4YTgsMHgxMSwweDJhLDB4MDQsMHg0OCwweDgwLDB4MTIsMHhhMCwweDQ0LDB4ODgsMHgwMSwweDJhLDB4MDQsMHg0YSB9LAorICAxNiwgMHhjYWIwLCAwLCB7MHg4MSwweDEyLDB4MjAsMHgwNCwweGFjLDB4MTEsMHgyYSwweDA0LDB4NGEsMHg4MSwweDEyLDB4YjAsMHg0NCwweDljLDB4MTEsMHgwMCB9LAorICAxNiwgMHhjYWMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHhjMCwweDBjLDB4MDAsMHg1MywweDAwLDB4MTQsMHhjMCB9LAorICAxNiwgMHhjYWQwLCAwLCB7MHgwNSwweDMwLDB4MDEsMHg0NCwweDAwLDB4NTMsMHgwMCwweDE0LDB4YzAsMHgwNSwweDMwLDB4MDQsMHgwYywweDAwLDB4NTMsMHgwMCB9LAorICAxNiwgMHhjYWUwLCAwLCB7MHgxNCwweGMwLDB4MDUsMHhiMCwweDAxLDB4NGMsMHgwMCwweDUzLDB4MDAsMHgxNiwweGMwLDB4MDEsMHgzMCwweDAxLDB4NGMsMHgwMCB9LAorICAxNiwgMHhjYWYwLCAwLCB7MHg1MywweDAwLDB4MTQsMHhjMCwweDAxLDB4MzgsMHgwMCwweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjYjAwLCAwLCB7MHgwOCwweGMwLDB4MDAsMHgxMCwweDQwLDB4MDAsMHgxMCwweDAwLDB4MDQsMHgwMCwweDAxLDB4MTAsMHgwMCwweDQ0LDB4ODAsMHgxMCB9LAorICAxNiwgMHhjYjEwLCAwLCB7MHgwMCwweDA0LDB4MDAsMHgwMSwweDEwLDB4MDAsMHg0NiwweDAwLDB4MDAsMHgwMCwweDA0LDB4NjAsMHgwMSwweDAwLDB4MDAsMHg0MCB9LAorICAxNiwgMHhjYjIwLCAwLCB7MHgwMCwweDExLDB4NjAsMHgwMiwweDQwLDB4MDEsMHgwMCwweDEwLDB4NDAsMHgwMCwweDEwLDB4NjAsMHgwMSwweDUwLDB4MTAsMHg0MCB9LAorICAxNiwgMHhjYjMwLCAwLCB7MHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHhjMCwweDQwLDB4MDIsMHgwMCwweDAwLDB4ODAsMHgwMCB9LAorICAxNiwgMHhjYjQwLCAwLCB7MHgyMCwweDAwLDB4MDgsMHgwOCwweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgyMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjYjUwLCAwLCB7MHg4MCwweDAwLDB4MjAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDAwLDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMiB9LAorICAxNiwgMHhjYjYwLCAwLCB7MHgwMCwweDAwLDB4ODAsMHgwMCwweDIxLDB4MDAsMHgwOCwweDQwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjYjcwLCAwLCB7MHgwOCwweGMwLDB4NDAsMHgwNCwweDYwLDB4MDEsMHgxOCwweDAwLDB4NDYsMHgwMCwweDExLDB4ODAsMHgwNCwweDYwLDB4MDEsMHgxOCB9LAorICAxNiwgMHhjYjgwLCAwLCB7MHgwMCwweDQ2LDB4MDAsMHgxMSwweDgwLDB4MDQsMHg2MCwweDAxLDB4YzgsMHgwMCwweDQ2LDB4MDAsMHgxOSwweDgwLDB4MDAsMHg2MCB9LAorICAxNiwgMHhjYjkwLCAwLCB7MHgwMCwweDE4LDB4MDAsMHg2NiwweDAwLDB4MTEsMHg4MCwweDA0LDB4NjAsMHgwMSwweDE4LDB4MDAsMHgwNiwweDAwLDB4MTEsMHg4MCB9LAorICAxNiwgMHhjYmEwLCAwLCB7MHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwMSwweDAwLDB4MDIsMHg2MCwweDAwLDB4OTgsMHgwMCB9LAorICAxNiwgMHhjYmIwLCAwLCB7MHgyNiwweDAwLDB4MDksMHg4MSwweDAyLDB4NjAsMHgwMSwweDk4LDB4MDAsMHgyNiwweDAwLDB4MDksMHg4MCwweDA2LDB4NjIsMHgwMCB9LAorICAxNiwgMHhjYmMwLCAwLCB7MHg0OCwweDAwLDB4MjYsMHgyMCwweDAxLDB4YzAsMHgwMiwweDYwLDB4MDEsMHg5OCwweDAwLDB4MDcsMHgwMCwweDA5LDB4ODAsMHgwMiB9LAorICAxNiwgMHhjYmQwLCAwLCB7MHg2MCwweDAwLDB4OTgsMHgwMCwweDI2LDB4MDAsMHgxMSwweDgyLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjYmUwLCAwLCB7MHg0MCwweDQ1LDB4NDIsMHgwNCwweDMwLDB4ODEsMHgwYywweDIwLDB4NDMsMHgwOCwweDEwLDB4YzIsMHgwNCwweDMwLDB4ODUsMHg4YyB9LAorICAxNiwgMHhjYmYwLCAwLCB7MHgyMCwweDQzLDB4MDgsMHgxMCwweGMyLDB4MDQsMHgzMCwweDgxLDB4MGMsMHgyMCwweDQzLDB4NDgsMHgxMSwweDgyLDB4MDQsMHgzMCB9LAorICAxNiwgMHhjYzAwLCAwLCB7MHg4MSwweDhkLDB4MjAsMHg0NiwweDA4LDB4MTAsMHhjMiwweDA0LDB4MzAsMHg4MSwweDBjLDB4MjAsMHg0MywweDBjLDB4MTAsMHhjMCB9LAorICAxNiwgMHhjYzEwLCAwLCB7MHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNCwweDAwLDB4MDAsMHgzMCwweDAwLDB4MGMsMHgwMCB9LAorICAxNiwgMHhjYzIwLCAwLCB7MHgwMywweDAwLDB4MDAsMHhjMCwweDAwLDB4MTAsMHgwMCwweDBjLDB4MDAsMHgwMywweDAwLDB4MDAsMHhjMCwweDAwLDB4MzAsMHgwMCB9LAorICAxNiwgMHhjYzMwLCAwLCB7MHgwOCwweDAwLDB4MDMsMHgwMCwweDAwLDB4ODAsMHgwMCwweDMwLDB4MDAsMHgwYywweDgwLDB4MDIsMHgwMCwweDAwLDB4YzAsMHgwMCB9LAorICAxNiwgMHhjYzQwLCAwLCB7MHgzMCwweDAwLDB4MGMsMHgwMCwweDAzLDB4MjAsMHgwMCwweGMwLDB4MTAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjYzUwLCAwLCB7MHg0MCwweDAwLDB4MDIsMHgwMCwweDMwLDB4ODAsMHgwYywweDIxLDB4MDMsMHgwOCwweDAwLDB4YzIsMHgwMCwweDMwLDB4ODAsMHgwYyB9LAorICAxNiwgMHhjYzYwLCAwLCB7MHgyMCwweDAzLDB4MDgsMHgwMCwweGMyLDB4MDQsMHgzMCwweGMxLDB4MGMsMHgyMCwweDAzLDB4MGMsMHgxMCwweGMyLDB4MDAsMHgzMCB9LAorICAxNiwgMHhjYzcwLCAwLCB7MHg4MCwweDBjLDB4YjAsMHg0MywweDA4LDB4MDAsMHhjMiwweDAwLDB4MzAsMHg4MCwweDBjLDB4MjAsMHgwMywweDI4LDB4MTAsMHhjMCB9LAorICAxNiwgMHhjYzgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHg0NSwweDQyLDB4MDQsMHg2MCwweDgxLDB4MTgsMHgyMCB9LAorICAxNiwgMHhjYzkwLCAwLCB7MHg0NiwweDA4LDB4MTEsMHg4MiwweDA0LDB4NjAsMHg4MCwweDE4LDB4MjAsMHg0NiwweDA4LDB4MTEsMHg4MiwweDAwLDB4NjAsMHg4MSB9LAorICAxNiwgMHhjY2EwLCAwLCB7MHgxOCwweDIwLDB4NDYsMHgwOCwweDExLDB4ODIsMHgwNCwweDYwLDB4ODAsMHgxOCwweDIwLDB4MDYsMHgwOCwweDExLDB4ODIsMHgwNCB9LAorICAxNiwgMHhjY2IwLCAwLCB7MHg2MCwweDgxLDB4MTgsMHgyMCwweDQ2LDB4MGMsMHgxMSwweGMwLDB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjY2MwLCAwLCB7MHg0MCwweDAxLDB4NDIsMHgwMCwweDIwLDB4ODAsMHgwOCwweDIwLDB4MDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgwOCB9LAorICAxNiwgMHhjY2QwLCAwLCB7MHgyMCwweDAyLDB4MDgsMHgwMCwweDgyLDB4MDAsMHgyMCwweDgwLDB4MGMsMHgyMCwweDAyLDB4MDgsMHgwMCwweGMyLDB4MDAsMHgyMCB9LAorICAxNiwgMHhjY2UwLCAwLCB7MHg4MCwweDA4LDB4MjAsMHg0MiwweDA4LDB4MDAsMHg4MiwweDAwLDB4MjAsMHg4MCwweDA4LDB4MjAsMHgwMiwweDA4LDB4MDEsMHg4MCB9LAorICAxNiwgMHhjY2YwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NTAsMHgwMSwweDQyLDB4MDQsMHg2MCwweDgxLDB4MTgsMHgyMCB9LAorICAxNiwgMHhjZDAwLCAwLCB7MHg0NiwweDA4LDB4MTEsMHg4MiwweDA0LDB4NjAsMHg4MCwweDE4LDB4MjAsMHg0NiwweDA4LDB4MTEsMHg4MiwweDAwLDB4NjAsMHhjMSB9LAorICAxNiwgMHhjZDEwLCAwLCB7MHgwYywweDIwLDB4NDYsMHgwYywweDEwLDB4YzIsMHgwNCwweDYwLDB4ODAsMHgxOCwweDMwLDB4NDIsMHgwOCwweDExLDB4ODIsMHgwNCB9LAorICAxNiwgMHhjZDIwLCAwLCB7MHg2MCwweDgxLDB4MTgsMHgyMCwweDQ2LDB4MDgsMHgxMCwweDgwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjZDMwLCAwLCB7MHg0MCwweDQ1LDB4NDAsMHgwNCwweDUwLDB4MDEsMHgxNCwweDAwLDB4NDUsMHgwMCwweDExLDB4NDAsMHgwNCwweDUwLDB4MDAsMHgxNCB9LAorICAxNiwgMHhjZDQwLCAwLCB7MHgwMCwweDQ1LDB4MDAsMHgxMSwweDQwLDB4MDAsMHg1MCwweDAwLDB4MDQsMHgwMCwweDQ1LDB4MDAsMHgwMCwweDQwLDB4MDQsMHg1MCB9LAorICAxNiwgMHhjZDUwLCAwLCB7MHgwMCwweDE0LDB4MDAsMHgwMSwweDAwLDB4MTEsMHg0MCwweDA0LDB4NTAsMHgwMSwweDE0LDB4MDAsMHg0NSwweDAwLDB4MDAsMHg0MiB9LAorICAxNiwgMHhjZDYwLCAwLCB7MHgwMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwMCwweDA2LDB4MDAsMHg0MSwweDgwLDB4MTAsMHg2MCB9LAorICAxNiwgMHhjZDcwLCAwLCB7MHgwNCwweDE4LDB4MDEsMHgwNiwweDAwLDB4NDEsMHg4MCwweDEwLDB4NjAsMHgwNCwweDE4LDB4MDEsMHgwNiwweDAwLDB4NDEsMHg4MCB9LAorICAxNiwgMHhjZDgwLCAwLCB7MHgxMCwweDYwLDB4MDQsMHgxOCwweDAxLDB4MDYsMHgwMCwweDQxLDB4ODAsMHgxMCwweDYwLDB4MDQsMHgxOCwweDAxLDB4MDYsMHgwMCB9LAorICAxNiwgMHhjZDkwLCAwLCB7MHg0MSwweDgwLDB4MTAsMHg2MCwweDA0LDB4MTgsMHgwMSwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjZGEwLCAwLCB7MHg0OCwweDAwLDB4MDIsMHgwMSwweDAwLDB4ODAsMHg0MCwweDIxLDB4MTAsMHgwOCwweDA0LDB4MDIsMHgwMSwweDAwLDB4ODAsMHg0MCB9LAorICAxNiwgMHhjZGIwLCAwLCB7MHgyMCwweDEwLDB4MDgsMHgwNCwweDAyLDB4MDEsMHgwMCwweDgwLDB4NDAsMHgyMSwweDEwLDB4MDgsMHgwNCwweDAyLDB4MDEsMHgwMCB9LAorICAxNiwgMHhjZGMwLCAwLCB7MHg4MCwweDQwLDB4MzAsMHgxMCwweDA4LDB4MDQsMHgwMiwweDExLDB4MDAsMHg4NCwweDQwLDB4MjAsMHgxMCwweDA4LDB4MTQsMHgwMCB9LAorICAxNiwgMHhjZGQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHg0NSwweDQ2LDB4MDMsMHg1MSwweDgwLDB4ZDQsMHg2MCB9LAorICAxNiwgMHhjZGUwLCAwLCB7MHgzNSwweDE4LDB4MGQsMHg0NiwweDAzLDB4NTEsMHg4MCwweGQ0LDB4NjAsMHgzNSwweDE4LDB4MGQsMHg0NiwweDAzLDB4NTEsMHg4MCB9LAorICAxNiwgMHhjZGYwLCAwLCB7MHhkNCwweDYwLDB4MzUsMHgxMCwweDBkLDB4NDYsMHgwMywweDUxLDB4ODAsMHhkNCwweDQwLDB4MzUsMHgxOCwweDBkLDB4NDYsMHgwMyB9LAorICAxNiwgMHhjZTAwLCAwLCB7MHg1MSwweDgwLDB4ZDQsMHg2MCwweDM1LDB4MTgsMHgwZCwweDQwLDB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjZTEwLCAwLCB7MHgwMCwweDAxLDB4NDYsMHgwNCwweDcxLDB4ODEsMHgxYywweDYwLDB4MDcsMHgxOCwweDExLDB4Y2UsMHgwNCwweDcxLDB4ODEsMHgxYyB9LAorICAxNiwgMHhjZTIwLCAwLCB7MHg2MCwweDQ3LDB4MTgsMHgwMSwweGM2LDB4MDQsMHg3MSwweDgxLDB4OWMsMHg2MCwweDQ3LDB4MTgsMHgxOSwweGM2LDB4MDQsMHg3MSB9LAorICAxNiwgMHhjZTMwLCAwLCB7MHg4MCwweDFjLDB4NjAsMHg2NywweDE4LDB4MTEsMHhjNiwweDA0LDB4NzEsMHg4MSwweDFjLDB4NjAsMHg0NywweDE4LDB4MTEsMHhjMCB9LAorICAxNiwgMHhjZTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwweDQ2LDB4MDIsMHg3MSwweDgwLDB4OWMsMHg2MCB9LAorICAxNiwgMHhjZTUwLCAwLCB7MHgyNywweDE4LDB4MDksMHhjNiwweDA2LDB4NzEsMHg4MCwweDFjLDB4NjAsMHgyNywweDE4LDB4MDksMHhjNiwweDAxLDB4MzEsMHg4MCB9LAorICAxNiwgMHhjZTYwLCAwLCB7MHgxYywweDYwLDB4MDcsMHgxOCwweDA5LDB4YzYsMHgwMiwweDcxLDB4ODAsMHg5YywweDYwLDB4MDcsMHgxOCwweDA5LDB4YzYsMHgxMiB9LAorICAxNiwgMHhjZTcwLCAwLCB7MHg3MSwweDgwLDB4OWMsMHg2MCwweDMzLDB4MTgsMHgwMSwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjZTgwLCAwLCB7MHg1MCwweDQ1LDB4NDYsMHgwNSwweDcxLDB4ODEsMHg1YywweDYwLDB4NTcsMHgxOCwweDE1LDB4YzYsMHgwNSwweDcxLDB4ODAsMHg1YyB9LAorICAxNiwgMHhjZTkwLCAwLCB7MHg2MCwweDU3LDB4MTgsMHgxNSwweGM2LDB4MDEsMHgzMSwweDgxLDB4MGMsMHg2MCwweDE3LDB4MTgsMHgxMCwweGM2LDB4MDUsMHg3MSB9LAorICAxNiwgMHhjZWEwLCAwLCB7MHg4MSwweDVjLDB4NjAsMHgwMywweDE4LDB4MTUsMHhjNiwweDA1LDB4NzEsMHg4MSwweDVjLDB4NjAsMHg1MywweDE4LDB4MTgsMHg4MiB9LAorICAxNiwgMHhjZWIwLCAwLCB7MHgxMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHg0MCwweDEyLDB4MDEsMHgyNCwweDgwLDB4NDgsMHgyMCB9LAorICAxNiwgMHhjZWMwLCAwLCB7MHgxMiwweDA4LDB4MDQsMHg4MiwweDAxLDB4MjQsMHg4MCwweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MiwweDAxLDB4MjAsMHg4MCB9LAorICAxNiwgMHhjZWQwLCAwLCB7MHg1OCwweDIwLDB4NTIsMHgwYywweDA1LDB4ODIsMHgwMSwweDIwLDB4ODAsMHg0OSwweDIwLDB4MDIsMHgwOCwweDA0LDB4ODIsMHgwMSB9LAorICAxNiwgMHhjZWUwLCAwLCB7MHgyMCwweDgwLDB4NDksMHgyMCwweDEyLDB4NDgsMHgwNCwweDgwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjZWYwLCAwLCB7MHg0MCwweDA0LDB4MDYsMHgwMCwweDYxLDB4ODAsMHgxOCwweDYwLDB4MDYsMHgxOCwweDAxLDB4ODYsMHgwNCwweDYxLDB4ODAsMHgxOCB9LAorICAxNiwgMHhjZjAwLCAwLCB7MHg2MCwweDA2LDB4MTgsMHgwMSwweDg2LDB4MDAsMHg2MSwweDgxLDB4NDgsMHg2MCwweDA2LDB4MTgsMHgxNCwweDg2LDB4MDAsMHg2MSB9LAorICAxNiwgMHhjZjEwLCAwLCB7MHg4MCwweDE4LDB4NjAsMHg0MiwweDE4LDB4MDEsMHg4NiwweDAwLDB4NjEsMHg4MCwweDE4LDB4NjAsMHgwNiwweDE4LDB4MDAsMHg4MCB9LAorICAxNiwgMHhjZjIwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0NSwweDYwLDB4MDQsMHg3OCwweDAxLDB4MWUsMHgwMCB9LAorICAxNiwgMHhjZjMwLCAwLCB7MHg0NywweDgwLDB4MTEsMHhlOCwweDAwLDB4NzgsMHgwMSwweDFlLDB4MDAsMHg0NywweDgwLDB4MTEsMHhlMCwweDA0LDB4NzgsMHgwMSB9LAorICAxNiwgMHhjZjQwLCAwLCB7MHgxZSwweDAwLDB4NDMsMHg4MCwweDExLDB4ZTAsMHgwNCwweDc4LDB4MDEsMHgxZSwweDAwLDB4MDMsMHg4MCwweDE1LDB4ZTAsMHgwNCB9LAorICAxNiwgMHhjZjUwLCAwLCB7MHg3OCwweDAxLDB4MWUsMHgwMCwweDQ3LDB4ODAsMHgxMSwweGMwLDB4MTAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjZjYwLCAwLCB7MHg0MCwweDAxLDB4MTIsMHgwMCwweDY0LDB4ODAsMHgxOCwweDIwLDB4MDYsMHgwOCwweDAxLDB4ODIsMHgwMCwweDY0LDB4ODAsMHgxOCB9LAorICAxNiwgMHhjZjcwLCAwLCB7MHgyMCwweDA2LDB4MDgsMHgwMSwweDgyLDB4MDAsMHg2MCwweDgwLDB4MTgsMHgzMCwweDAyLDB4MDgsMHgwMSwweDgyLDB4MDAsMHg2MCB9LAorICAxNiwgMHhjZjgwLCAwLCB7MHg4MCwweDE5LDB4MzAsMHg0MiwweDA4LDB4MDAsMHg4MiwweDAwLDB4NjAsMHg4MCwweDE5LDB4MjAsMHgwNiwweDQ4LDB4MDEsMHg4MCB9LAorICAxNiwgMHhjZjkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMSwweDQyLDB4MDQsMHgyMCwweDgxLDB4MDgsMHgyMCB9LAorICAxNiwgMHhjZmEwLCAwLCB7MHg0MiwweDA4LDB4MTAsMHg4MiwweDAwLDB4MjAsMHg4MSwweDA4LDB4MjAsMHg0MiwweDA4LDB4MTAsMHg4MiwweDA0LDB4MjAsMHg4MSB9LAorICAxNiwgMHhjZmIwLCAwLCB7MHgwOCwweDIwLDB4NDYsMHgwOCwweDEwLDB4ODIsMHgwNCwweDIwLDB4ODEsMHgwOCwweDIwLDB4NDIsMHgwOCwweDExLDB4ODIsMHgwNCB9LAorICAxNiwgMHhjZmMwLCAwLCB7MHgyMCwweDgxLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhjZmQwLCAwLCB7MHg0MCwweDQ1LDB4NDIsMHgwNCwweDQwLDB4ODEsMHgxMCwweDIwLDB4NDQsMHgwOCwweDExLDB4MDIsMHgwMCwweDQwLDB4ODEsMHgxMCB9LAorICAxNiwgMHhjZmUwLCAwLCB7MHgyMCwweDQ0LDB4MDgsMHgxMSwweDAyLDB4MDQsMHg0MCwweDgwLDB4MTAsMHgyMCwweDQ1LDB4MDgsMHgwMSwweDAyLDB4MDQsMHg0MCB9LAorICAxNiwgMHhjZmYwLCAwLCB7MHg4MSwweDEwLDB4MjEsMHgwMCwweDBjLDB4MTEsMHgwMiwweDA0LDB4NDAsMHg4MSwweDEwLDB4MjAsMHg0NCwweDA4LDB4MDEsMHgwMCB9LAorICAxNiwgMHhkMDAwLCAwLCB7MHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwweDAzLDB4MDAsMHg1MCwweGMwLDB4MTQsMHgzMCB9LAorICAxNiwgMHhkMDEwLCAwLCB7MHgwNSwweDBjLDB4MDEsMHg0MywweDAwLDB4NTAsMHhjMCwweDE0LDB4MzAsMHgwNSwweDBjLDB4MDEsMHg0MywweDAwLDB4NTAsMHhjMCB9LAorICAxNiwgMHhkMDIwLCAwLCB7MHgxNCwweDMwLDB4MDUsMHgwYywweDAxLDB4NDMsMHgwMCwweDUwLDB4YzAsMHgxNCwweDMwLDB4MDUsMHgwYywweDAxLDB4NDMsMHgwMCB9LAorICAxNiwgMHhkMDMwLCAwLCB7MHg1MCwweGMwLDB4MTQsMHgzMCwweDA1LDB4MGMsMHgwMSwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMDQwLCAwLCB7MHg0MCwweDAwLDB4MDgsMHgwMCwweDQyLDB4MDQsMHgxMCwweDgwLDB4MDQsMHgyMCwweDAxLDB4MDksMHgwMCwweDQyLDB4MDEsMHgxMCB9LAorICAxNiwgMHhkMDUwLCAwLCB7MHg4MCwweDA0LDB4MjAsMHgwMSwweDA4LDB4MDAsMHg0MiwweDAwLDB4MTAsMHgwMCwweDA0LDB4MjAsMHgwMSwweDA4LDB4MDAsMHg0MiB9LAorICAxNiwgMHhkMDYwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwNCwweDAwLDB4MDEsMHgwOCwweDAwLDB4NDIsMHgwMCwweDEwLDB4ODAsMHgwNCwweDIwLDB4MTEsMHgwMCB9LAorICAxNiwgMHhkMDcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHg0NSwweDQyLDB4MDIsMHgwMCwweDgwLDB4ODAsMHgyMCB9LAorICAxNiwgMHhkMDgwLCAwLCB7MHgyMCwweDA4LDB4MDgsMHgwMiwweDAyLDB4MDAsMHg4MCwweDAwLDB4MjAsMHgyMCwweDA4LDB4MDgsMHgwMiwweDAwLDB4MDAsMHg4MCB9LAorICAxNiwgMHhkMDkwLCAwLCB7MHg4MCwweGEwLDB4MDAsMHgwYSwweDA4LDB4MDIsMHgwMiwweDAwLDB4ODAsMHg4MCwweDM0LDB4NjIsMHgyOCwweDA4LDB4MDIsMHgwMiB9LAorICAxNiwgMHhkMGEwLCAwLCB7MHgwMCwweDgwLDB4ODAsMHgzMCwweDIwLDB4MGMsMHgwOCwweDAwLDB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMGIwLCAwLCB7MHg0MCwweDAxLDB4NDAsMHgwNCwweDYwLDB4MDEsMHgxOCwweDAwLDB4NDYsMHgwMCwweDExLDB4ODAsMHgwNCwweDYwLDB4MDMsMHgxOCB9LAorICAxNiwgMHhkMGMwLCAwLCB7MHgwMCwweDQ2LDB4MDAsMHgxMSwweDgwLDB4MDYsMHg2MCwweDAxLDB4OTgsMHgwMCwweDQ2LDB4MDAsMHgxMSwweDgwLDB4MDQsMHg2MCB9LAorICAxNiwgMHhkMGQwLCAwLCB7MHgwMSwweDE4LDB4MDAsMHg2NiwweDAwLDB4MTEsMHg4MCwweDA0LDB4NjAsMHgwMSwweDE4LDB4MDAsMHg0NiwweDAwLDB4MTEsMHg4MCB9LAorICAxNiwgMHhkMGUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMSwweDAwLDB4MDIsMHg2MCwweDAwLDB4OTgsMHgwMCB9LAorICAxNiwgMHhkMGYwLCAwLCB7MHgyNiwweDAwLDB4MDksMHg4MCwweDAyLDB4NjQsMHgwMCwweDk4LDB4MDAsMHgyNiwweDAwLDB4MTksMHg5MCwweDAyLDB4NjAsMHgwMCB9LAorICAxNiwgMHhkMTAwLCAwLCB7MHgxZCwweDAwLDB4MjYsMHgwMCwweDAxLDB4YzAsMHgwMiwweDYwLDB4MDAsMHg5OSwweDAwLDB4MDYsMHg0MCwweDE5LDB4ODAsMHgwMiB9LAorICAxNiwgMHhkMTEwLCAwLCB7MHg2MCwweDAwLDB4OTgsMHgwMCwweDY2LDB4MDAsMHgwMSwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMTIwLCAwLCB7MHg0MCwweDQ1LDB4NjAsMHgwNCwweDM4LDB4MDEsMHgwZSwweDAwLDB4NDMsMHg4MCwweDEwLDB4ZTAsMHgwNCwweDM4LDB4MDEsMHgwZSB9LAorICAxNiwgMHhkMTMwLCAwLCB7MHgwMCwweDQzLDB4ODAsMHgxMCwweGUwLDB4MDQsMHgzOCwweDAxLDB4MWEsMHgwMCwweDQzLDB4ODAsMHgxMSwweGEwLDB4MDQsMHgzOCB9LAorICAxNiwgMHhkMTQwLCAwLCB7MHgwMSwweDBlLDB4MDAsMHgwMiwweDgwLDB4NDAsMHhlMCwweDA0LDB4MzgsMHgwMSwweDBlLDB4MDAsMHg0MywweDgwLDB4MTgsMHg4MCB9LAorICAxNiwgMHhkMTUwLCAwLCB7MHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NTAsMHgwNCwweDAxLDB4MDAsMHgzMCwweDQwLDB4MGMsMHgxMCB9LAorICAxNiwgMHhkMTYwLCAwLCB7MHgwMywweDA0LDB4MDAsMHhjOSwweDAwLDB4MzAsMHg0MCwweDBjLDB4MTAsMHgwMywweDA0LDB4MDAsMHhjMSwweDAwLDB4MzAsMHg0MCB9LAorICAxNiwgMHhkMTcwLCAwLCB7MHgwOCwweDEwLDB4MDMsMHgwNCwweDAwLDB4ODEsMHgwMCwweDMwLDB4NDAsMHgwYywweDc4LDB4MDIsMHgxNCwweDAwLDB4YzEsMHgwMCB9LAorICAxNiwgMHhkMTgwLCAwLCB7MHgzMCwweDQwLDB4MGMsMHgxMCwweDAzLDB4MDQsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMTkwLCAwLCB7MHg0MCwweDAwLDB4MDUsMHgwMCwweDMxLDB4NDAsMHgwYywweDUwLDB4MDMsMHgxNCwweDAwLDB4YzUsMHgwMCwweDM1LDB4NDAsMHgwYyB9LAorICAxNiwgMHhkMWEwLCAwLCB7MHg1MCwweDAzLDB4MTQsMHgxMCwweGQ1LDB4MDAsMHgzMSwweDQxLDB4MGQsMHg1MCwweDAzLDB4MTQsMHgxMCwweGM1LDB4MDAsMHgzMSB9LAorICAxNiwgMHhkMWIwLCAwLCB7MHg0MCwweDBkLDB4NDgsMHg0MywweDU0LDB4MTAsMHhjNSwweDAwLDB4MzEsMHg0MCwweDBjLDB4NDAsMHg0MywweDEwLDB4MDAsMHhjMiB9LAorICAxNiwgMHhkMWMwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHg0NSwweDQzLDB4MDQsMHg2MCwweGMxLDB4MTgsMHgzMCB9LAorICAxNiwgMHhkMWQwLCAwLCB7MHg0NiwweDBjLDB4MTEsMHg4MywweDA0LDB4NjEsMHhjMSwweDE4LDB4MzAsMHg0NiwweDBjLDB4MDEsMHg4NywweDA0LDB4NjAsMHhjMSB9LAorICAxNiwgMHhkMWUwLCAwLCB7MHgxOCwweDMwLDB4NDYsMHgwOCwweDExLDB4ODMsMHgwNCwweDYwLDB4YzEsMHgxOCwweDIwLDB4MDYsMHgwYywweDAxLDB4ODMsMHgwNCB9LAorICAxNiwgMHhkMWYwLCAwLCB7MHg2MCwweGMxLDB4MTgsMHgzMCwweDQ2LDB4MGMsMHgxMSwweDgwLDB4MTAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMjAwLCAwLCB7MHg0MCwweDAxLDB4NDAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgwMCwweDAwLDB4ODAsMHgwMCwweDIwLDB4MDAsMHgwOCB9LAorICAxNiwgMHhkMjEwLCAwLCB7MHgwMCwweDAyLDB4MDAsMHgwMCwweDgxLDB4MDAsMHgyMCwweDAwLDB4MDgsMHg4MCwweDAyLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgyMCB9LAorICAxNiwgMHhkMjIwLCAwLCB7MHgwMCwweDA4LDB4NDAsMHg0MywweDMwLDB4MDAsMHg4MCwweDAwLDB4MjAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDAwLDB4MDAsMHg4MCB9LAorICAxNiwgMHhkMjMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMSwweDQ4LDB4NDQsMHg2MiwweDExLDB4MTgsMHg4NCB9LAorICAxNiwgMHhkMjQwLCAwLCB7MHg0NiwweDIxLDB4MTEsMHg4OCwweDQ0LDB4NjMsMHgwMSwweDE4LDB4ODQsMHg0NiwweDIxLDB4MDEsMHg4OCwweDA0LDB4NjIsMHgxMSB9LAorICAxNiwgMHhkMjUwLCAwLCB7MHgxOCwweDA0LDB4NDYsMHgyMSwweDEwLDB4YzgsMHg0NCwweDYyLDB4MTEsMHgxOCwweDA1LDB4NDMsMHgwMSwweDgxLDB4ODgsMHg0NCB9LAorICAxNiwgMHhkMjYwLCAwLCB7MHg2MiwweDExLDB4MTgsMHg4NCwweDQ2LDB4MjEsMHgxMSwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMjcwLCAwLCB7MHg0MCwweDQ1LDB4NDAsMHgwNCwweDUwLDB4MDEsMHgxNCwweDA0LDB4NDUsMHgwMSwweDExLDB4NDAsMHg0NCwweDUwLDB4MDEsMHgxNCB9LAorICAxNiwgMHhkMjgwLCAwLCB7MHgwNCwweDQ1LDB4MDEsMHgwMSwweDQwLDB4NDUsMHgwMCwweDEwLDB4MTQsMHgwNCwweDQ1LDB4MDMsMHgwMCwweDQwLDB4NDQsMHg1MCB9LAorICAxNiwgMHhkMjkwLCAwLCB7MHgxMSwweDE0LDB4MDQsMHgwMSwweDA1LDB4NDEsMHg0MCwweDQ0LDB4NTAsMHgxMSwweDE0LDB4MDQsMHgwNSwweDAxLDB4MDEsMHg0MCB9LAorICAxNiwgMHhkMmEwLCAwLCB7MHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwweDA4LDB4MjAsMHg0MiwweDA4LDB4MTAsMHg4MiB9LAorICAxNiwgMHhkMmIwLCAwLCB7MHgwNCwweDIwLDB4ODEsMHgwOCwweDAwLDB4NDIsMHgwMCwweDEwLDB4ODIsMHgwNCwweDIwLDB4ODEsMHgwOCwweDAwLDB4NDIsMHgwOCB9LAorICAxNiwgMHhkMmMwLCAwLCB7MHgxMCwweDgyLDB4MDUsMHgyMCwweDgxLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMCwweDhhLDB4MDUsMHgyMCwweDA1LDB4MDgsMHgyMCB9LAorICAxNiwgMHhkMmQwLCAwLCB7MHg0MiwweDA4LDB4MTAsMHg4MiwweDA0LDB4MjIsMHg4MSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMmUwLCAwLCB7MHgwMCwweDAwLDB4MGEsMHgwMSwweDAyLDB4ODAsMHg0MCwweGEwLDB4MTAsMHgyOCwweDA0LDB4MDIsMHgwMSwweDAyLDB4ODAsMHg0MCB9LAorICAxNiwgMHhkMmYwLCAwLCB7MHhhMCwweDEwLDB4MjgsMHgwNCwweDBhLDB4MDEsMHgwMiwweDgwLDB4NDAsMHhhMCwweDAwLDB4MjksMHgwNCwweDBhLDB4MDEsMHgwMiB9LAorICAxNiwgMHhkMzAwLCAwLCB7MHg4MCwweDQwLDB4YTQsMHgwMCwweDI4LDB4MDQsMHgwYSwweDAxLDB4MDIsMHg4MCwweDQwLDB4YTgsMHgxMCwweDJiLDB4MTQsMHgwMCB9LAorICAxNiwgMHhkMzEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHg0NSwweDRkLDB4MDMsMHg1MywweDQwLDB4ZDQsMHhkMCB9LAorICAxNiwgMHhkMzIwLCAwLCB7MHgzNSwweDM0LDB4MGQsMHg0ZCwweDAzLDB4NTMsMHg0MCwweGQ0LDB4ZDAsMHgzNSwweDM0LDB4MGQsMHg0ZCwweDAzLDB4NTMsMHg0MCB9LAorICAxNiwgMHhkMzMwLCAwLCB7MHhkNCwweGQwLDB4MjEsMHgzNCwweDRkLDB4NGQsMHgwMywweDUzLDB4NDAsMHhkNCwweGQ5LDB4NjEsMHgzNCwweDA0LDB4MGQsMHgwMyB9LAorICAxNiwgMHhkMzQwLCAwLCB7MHg1MywweDQwLDB4YzAsMHhkOCwweDM1LDB4MzcsMHgwZCwweDQwLDB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkMzUwLCAwLCB7MHg0MCwweDAxLDB4NDgsMHgwNCwweDcyLDB4MDAsMHgxYywweDgwLDB4NDcsMHgyMCwweDExLDB4YzgsMHgwNCwweDcyLDB4MDEsMHgxYyB9LAorICAxNiwgMHhkMzYwLCAwLCB7MHg4MCwweDQ3LDB4MjAsMHgxMSwweGM4LDB4MDQsMHg3MiwweDAwLDB4OWMsMHg4MCwweDQ3LDB4MjAsMHgxOSwweGM4LDB4MDAsMHg3MiB9LAorICAxNiwgMHhkMzcwLCAwLCB7MHgwMSwweDFjLDB4ODgsMHg2NywweDIwLDB4MTEsMHhjOCwweDA0LDB4NzIsMHgwMSwweDVjLDB4ODIsMHg0NywweDIyLDB4MTEsMHhjMCB9LAorICAxNiwgMHhkMzgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIzLDB4MDgsMHg0OCwweGMyLDB4MTIsMHgzMSB9LAorICAxNiwgMHhkMzkwLCAwLCB7MHg4NCwweDhjLDB4NjEsMHgyMywweDEwLDB4NDAsMHhjMCwweDEyLDB4MzEsMHg4NCwweDhjLDB4NjEsMHgwMywweDEwLDB4NDgsMHhjNCB9LAorICAxNiwgMHhkM2EwLCAwLCB7MHgxMCwweDMxLDB4ODQsMHg4YywweDQxLDB4MjMsMHgxOCwweDQ4LDB4YzYsMHgxMCwweDMwLDB4MDQsMHgwYywweDQxLDB4MjMsMHgxOCB9LAorICAxNiwgMHhkM2IwLCAwLCB7MHg0OCwweGM2LDB4MTIsMHgzMCwweDg0LDB4OGMsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkM2MwLCAwLCB7MHgwMCwweDAwLDB4M2YsMHhmZiwweDRmLDB4ZmYsMHhkMywweGZmLDB4ZjQsMHhmZiwweGZkLDB4M2YsMHhmZiwweDRmLDB4ZmYsMHhkMyB9LAorICAxNiwgMHhkM2QwLCAwLCB7MHhmZiwweGY0LDB4ZmYsMHhmZCwweDNmLDB4ZmYsMHg0ZiwweGZmLDB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhmZCwweDNmLDB4ZmYsMHg0ZiB9LAorICAxNiwgMHhkM2UwLCAwLCB7MHhmZiwweGQzLDB4ZmYsMHhmNCwweGZmLDB4ZGQsMHgzZiwweGZmLDB4NGYsMHhmZiwweGQzLDB4ZmYsMHhmNCwweGZmLDB4ZmQsMHgwMCB9LAorICAxNiwgMHhkM2YwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNDAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNDEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNDIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNDMwLCAwLCB7MHgwMCwweDAwLDB4MmMsMHhkYiwweDBiLDB4MzYsMHhjMiwweGNkLDB4YjAsMHhiMywweDZjLDB4MmMsMHhkYiwweDBiLDB4MzYsMHhjMiB9LAorICAxNiwgMHhkNDQwLCAwLCB7MHhjZCwweGIwLDB4YjMsMHg2YywweDJjLDB4ZGIsMHgwYiwweDM2LDB4YzIsMHhjZCwweGIwLDB4YjMsMHg2YywweDJjLDB4ZGIsMHgwYiB9LAorICAxNiwgMHhkNDUwLCAwLCB7MHgzNiwweGMyLDB4Y2QsMHhiMCwweGIzLDB4NGMsMHgyYywweGRiLDB4MGIsMHgzNiwweGMyLDB4Y2QsMHhiMCwweGIzLDB4NmMsMHgwMCB9LAorICAxNiwgMHhkNDYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMzLDB4NWMsMHg0YywweGQ3LDB4MTMsMHgzMyB9LAorICAxNiwgMHhkNDcwLCAwLCB7MHhjNCwweGNjLDB4ZjEsMHgzMywweDNhLDB4NGEsMHhkNiwweDkzLDB4MzMsMHhjNCwweGNjLDB4ZjEsMHgyYiwweDNhLDB4NGMsMHhjZiB9LAorICAxNiwgMHhkNDgwLCAwLCB7MHgxMywweDMzLDB4YzQsMHhjYywweGU5LDB4MzMsMHgzYywweDRjLDB4Y2YsMHgxMiwweGI1LDB4YTQsMHhhYywweGM5LDB4MzMsMHgzYyB9LAorICAxNiwgMHhkNDkwLCAwLCB7MHg0YywweGNmLDB4MTMsMHgzNSwweGM0LDB4Y2QsMHg2OSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNGEwLCAwLCB7MHgwMCwweDAwLDB4M2IsMHg3ZSwweDRlLDB4ZGYsMHg5MywweGI3LDB4ZTQsMHhlZCwweGY5LDB4M2IsMHg3ZSwweDRlLDB4ZGYsMHg5MyB9LAorICAxNiwgMHhkNGIwLCAwLCB7MHhiNywweGU0LDB4ZWQsMHhmOSwweDNiLDB4N2UsMHg0ZSwweGRlLDB4MTIsMHgzNywweGU0LDB4ZWQsMHhlMSwweDNiLDB4N2UsMHg0ZSB9LAorICAxNiwgMHhkNGMwLCAwLCB7MHhkZiwweDkyLDB4MzEsMHg4NCwweDhkLDB4ZDksMHgzYiwweDdlLDB4NGUsMHhkZiwweDkzLDB4YjEsMHhlNCwweGVjLDB4NjEsMHgwMCB9LAorICAxNiwgMHhkNGQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODQsMHgwNCwweGExLDB4ODMsMHgyYyB9LAorICAxNiwgMHhkNGUwLCAwLCB7MHgwMywweDBhLDB4MTAsMHg4MiwweGMxLDB4MzQsMHgxMCwweDhmLDB4MDAsMHg0MCwweDA5LDB4MTQsMHgwMiwweDAzLDB4MTQsMHg5MSB9LAorICAxNiwgMHhkNGYwLCAwLCB7MHgwMCwweDA4LDB4NDIsMHgwYiwweDE4LDB4ODIsMHhjNCwweDAwLDB4MzEsMHhjYSwweDBjLDB4NTIsMHgwMiwweDEwLDB4ODAsMHg4NSB9LAorICAxNiwgMHhkNTAwLCAwLCB7MHgwMCwweDIxLDB4ODIsMHgyOCwweDQwLDB4MGEsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNTEwLCAwLCB7MHgwMCwweDAwLDB4MGEsMHgwNCwweDAyLDB4MDEsMHg0MCwweDgwLDB4NzMsMHgyOCwweDEwLDB4NDgsMHgwNywweDA2LDB4MDEsMHgwNCB9LAorICAxNiwgMHhkNTIwLCAwLCB7MHhhNCwweDQxLDB4MjEsMHgxNCwweDA4LDB4NDQsMHgwNiwweDExLDB4NDAsMHg4MCwweDcwLDB4MjAsMHgxNCwweDBhLDB4MDQsMHgwMiB9LAorICAxNiwgMHhkNTMwLCAwLCB7MHgwMCwweGM4LDB4ODQsMHg0MSwweDIxLDB4MWMsMHgwOCwweDA2LDB4MTIsMHgwMSwweGMwLDB4ODAsMHg2MCwweDIwLDB4MTQsMHgwMCB9LAorICAxNiwgMHhkNTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4ODQsMHgwNCwweDIxLDB4ODIsMHgwOCB9LAorICAxNiwgMHhkNTUwLCAwLCB7MHg1MywweDAyLDB4MTAsMHg4MCwweGM1LDB4MDAsMHg4MSwweDRhLDB4MDQsMHg0MiwweDAyLDB4MTQsMHgwMCwweDA0LDB4MjAsMHgyMSB9LAorICAxNiwgMHhkNTYwLCAwLCB7MHg4MCwweGE4LDB4NzIsMHgyMiwweDFjLDB4ODgsMHhjNCwweDA2LDB4YTEsMHg0MiwweDhjLDB4NTIsMHgyMiwweDFjLDB4ODgsMHg4NSB9LAorICAxNiwgMHhkNTcwLCAwLCB7MHgyNiwweDIxLDB4YzAsMHg4OCwweDUwLDB4MjIsMHgxOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNTgwLCAwLCB7MHgwMCwweDAwLDB4MDIsMHg0NCwweDAwLDB4MDEsMHgwMSwweDAwLDB4NjIsMHgwMCwweDEwLDB4MDAsMHgwNCwweDAwLDB4MDEsMHgwMSB9LAorICAxNiwgMHhkNTkwLCAwLCB7MHgyMCwweDQwLDB4MDAsMHgxYywweDAwLDB4NDQsMHgwNCwweDAxLDB4MDIsMHgyMCwweDYyLDB4MDAsMHgxYywweDgwLDB4MDQsMHgwNCB9LAorICAxNiwgMHhkNWEwLCAwLCB7MHg4MCwweDg5LDB4MjAsMHg1MCwweDA4LDB4MTQsMHg4MCwweDA0LDB4MjQsMHgwMSwweGMxLDB4MDAsMHg1MCwweDAwLDB4MTgsMHgwMCB9LAorICAxNiwgMHhkNWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4ODAsMHgzOCwweDIwLDB4MDQsMHgwYyB9LAorICAxNiwgMHhkNWMwLCAwLCB7MHgzMSwweDBhLDB4MDAsMHgwMCwweDAyLDB4MTgsMHgyMCwweDhjLDB4YTgsMHgxMCwweDI4LDB4MDgsMHg4OCwweGMxLDB4MTQsMHgxMCB9LAorICAxNiwgMHhkNWQwLCAwLCB7MHhjNiwweDAwLDB4MjIsMHgwMywweDA4LDB4MDIsMHgwMSwweDA4LDB4YjAsMHgwMCwweDBjLDB4MjEsMHgwMiwweDAwLDB4ODIsMHg4MCB9LAorICAxNiwgMHhkNWUwLCAwLCB7MHgwOCwweDAwLDB4NDksMHgwOCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4ODAsMHgwOCwweDIwLDB4MDMsMHgwMCwweDA0LDB4MDIsMHg0MywweDIwLDB4MDAsMHg0MCB9LAorICAxNiwgMHhkNjAwLCAwLCB7MHgwMCwweDIwLDB4MDAsMHgwNCwweDQyLDB4MDEsMHgxMCwweDgwLDB4ODQsMHgyMCwweDExLDB4MDgsMHgwNCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNjEwLCAwLCB7MHgwMCwweDQ0LDB4MjQsMHgyMCwweDA5LDB4MDgsMHg0MCwweDAzLDB4MDAsMHg5MCwweGM0LDB4MjAsMHgyMCwweDA4LDB4MGMsMHgwMiB9LAorICAxNiwgMHhkNjIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDA4LDB4ODEsMHgwOCwweDIwLDB4MDQsMHg4OCB9LAorICAxNiwgMHhkNjMwLCAwLCB7MHgwMiwweDIyLDB4MDgsMHgwOCwweGMzLDB4MmEsMHg5MCwweDQwLDB4ODQsMHgxMCwweDIwLDB4MDQsMHg4MCwweGMyLDB4MjYsMHgyMCB9LAorICAxNiwgMHhkNjQwLCAwLCB7MHg0OSwweDg4LDB4MjIsMHgyMiwweDBjLDB4MDgsMHhjMSwweDI2LDB4YTAsMHhjOSwweDhjLDB4MTIsMHgyYSwweDA0LDB4ODgsMHg0MyB9LAorICAxNiwgMHhkNjUwLCAwLCB7MHgwZSwweGEwLDB4Y2IsMHg4OCwweDEwLDB4MjIsMHgwYywweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNjYwLCAwLCB7MHgwOCwweDAwLDB4MGEsMHg0MCwweDMyLDB4MDAsMHgwMSwweDgwLDB4MzEsMHgyOCwweDAwLDB4MDAsMHgwMSwweDEyLDB4ODAsMHg4ZCB9LAorICAxNiwgMHhkNjcwLCAwLCB7MHg4NCwweDAwLDB4MjgsMHgwYywweDA4LDB4MDEsMHgzMiwweDAwLDB4OGMsMHg4MCwweDAyLDB4MjAsMHgwYywweDA4LDB4MDEsMHgyZSB9LAorICAxNiwgMHhkNjgwLCAwLCB7MHgwMCwweGMzLDB4ODAsMHgwMiwweDIwLDB4MDQsMHgwOCwweDQzLDB4MDIsMHgwMCwweDQwLDB4ODAsMHgxMCwweDIwLDB4MDQsMHgwMiB9LAorICAxNiwgMHhkNjkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDA4LDB4ODcsMHgwYSwweDIxLDB4MDQsMHg4OCB9LAorICAxNiwgMHhkNmEwLCAwLCB7MHgxMSwweDJhLDB4MWMsMHgwYSwweDA2LDB4MjIsMHgyMSwweDQwLDB4YTAsMHg0MiwweDJhLDB4MTAsMHg4OCwweDg1LDB4MGEsMHhhMSB9LAorICAxNiwgMHhkNmIwLCAwLCB7MHgwNiwweGE0LDB4NjIsMHgyMiwweDFjLDB4MGEsMHhjNCwweDAyLDB4MjEsMHg4MCwweDhjLDB4NTIsMHgyMiwweDE0LDB4NDgsMHg4NiB9LAorICAxNiwgMHhkNmMwLCAwLCB7MHgyMiwweDIwLDB4MDgsMHhhOCwweDYwLDB4MmEsMHgxNCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNmQwLCAwLCB7MHgwMCwweDAwLDB4MDgsMHg0NSwweDA2LDB4MDEsMHg4OSwweDgwLDB4NjMsMHgyMCwweDFjLDB4ODgsMHg0MCwweDM0LDB4MTEsMHgwMSB9LAorICAxNiwgMHhkNmUwLCAwLCB7MHhhNCwweDUwLDB4MjgsMHgxOCwweDQ4LDB4MDQsMHgwZSwweDAxLDB4NGIsMHg4MCwweDczLDB4MjgsMHgxYywweDhhLDB4MDQsMHgwNiB9LAorICAxNiwgMHhkNmYwLCAwLCB7MHg5MSwweDQ5LDB4MDQsMHg2MywweDIwLDB4MWMsMHg4YSwweDA2LDB4MjYsMHgwMSwweDg1LDB4ODAsMHg3MCwweDIwLDB4MTgsMHgwMiB9LAorICAxNiwgMHhkNzAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDAwLDB4ODUsMHgwMCwweGIxLDB4NDUsMHgyYyB9LAorICAxNiwgMHhkNzEwLCAwLCB7MHg3MCwweDAyLDB4MTQsMHhjMCwweDA3LDB4MDgsMHgyMSwweDQ5LDB4MDAsMHg0MiwweDAxLDB4MTQsMHg4MiwweDA1LDB4MDAsMHgxMSB9LAorICAxNiwgMHhkNzIwLCAwLCB7MHg4NCwweDAwLDB4NTIsMHgwMiwweDFjLDB4MDAsMHhjNCwweDAwLDB4MjEsMHhjNCwweDJjLDB4NTMsMHgwMiwweDFjLDB4MDIsMHg4MSB9LAorICAxNiwgMHhkNzMwLCAwLCB7MHgwNCwweGExLDB4Y2QsMHgwOCwweDUwLDB4MDIsMHgxNCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkNzQwLCAwLCB7MHgwOCwweDEwLDB4MTIsMHgwNCwweDM0LDB4MDEsMHhjYywweDAwLDB4NzMsMHg0MCwweDFjLDB4OTAsMHg0NSwweDA0LDB4MDEsMHg0OCB9LAorICAxNiwgMHhkNzUwLCAwLCB7MHgwNCwweDYwLDB4NDEsMHgxOCwweGMwLDB4NDQsMHgwNCwweDAxLDB4MDUsMHgwNCwweDczLDB4NDgsMHgxNCwweDUwLDB4NDcsMHgzNCB9LAorICAxNiwgMHhkNzYwLCAwLCB7MHgwMSwweDQ1LDB4MjAsMHg2MiwweDA4LDB4MWMsMHhjMiwweDA0LDB4MGMsMHg4MSwweGM3LDB4MDAsMHg3MywweDgwLDB4MTgsMHhjMiB9LAorICAxNiwgMHhkNzcwLCAwLCB7MHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDEwLDB4ODQsMHgxMCwweDIxLDB4Y2MsMHgyOCB9LAorICAxNiwgMHhkNzgwLCAwLCB7MHg0MiwweDAyLDB4MTQsMHgxMiwweGM1LDB4MTAsMHgyMSwweDg0LDB4MDQsMHg0MCwweDAwLDB4MWMsMHg4MCwweDg0LDB4MDAsMHg5MSB9LAorICAxNiwgMHhkNzkwLCAwLCB7MHgwMCwweDA4LDB4NzMsMHg4MiwweDFjLDB4OTAsMHgwNSwweDBjLDB4MDEsMHhjZiwweDBjLDB4NDAsMHgwMiwweDE0LDB4MzAsMHg0NSB9LAorICAxNiwgMHhkN2EwLCAwLCB7MHgyMCwweGExLDB4YzAsMHgwOCwweDUwLDB4MDIsMHgxMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkN2IwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHg0NSwweDBjLDB4ODEsMHgwMCwweDAwLDB4MDEsMHgwOCwweDA4LDB4MDAsMHgwNSwweDE4LDB4OTEsMHgwNSB9LAorICAxNiwgMHhkN2MwLCAwLCB7MHgwNCwweDAwLDB4MDEsMHgwNCwweDQwLDB4MDYsMHgxOCwweDAwLDB4MDIsMHgyNCwweDcwLDB4NDAsMHgwNCwweDAwLDB4NDAsMHgwMCB9LAorICAxNiwgMHhkN2QwLCAwLCB7MHgwMSwweGM0LDB4MjQsMHgwMCwweDg4LDB4MDQsMHgwMCwweDQzLDB4MTAsMHgwMCwweDQwLDB4MjAsMHgwMCwweDg4LDB4MDAsMHgwMCB9LAorICAxNiwgMHhkN2UwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEyLDB4ODUsMHgyNCwweDMxLDB4MDIsMHgwYyB9LAorICAxNiwgMHhkN2YwLCAwLCB7MHgwMiwweGMyLDB4MDQsMHgxMCwweGM0LDB4MjgsMHgyMSwweDQ5LDB4MGMsMHgwMiwweGMwLDB4MDQsMHhiMiwweDA2LDB4MWMsMHgyMCB9LAorICAxNiwgMHhkODAwLCAwLCB7MHgwMywweDA4LDB4NTAsMHg0MiwweDBjLDB4ODAsMHgwMSwweDA0LDB4YTEsMHg0OSwweDBjLDB4MDAsMHhjMiwweDBjLDB4MTAsMHg0MyB9LAorICAxNiwgMHhkODEwLCAwLCB7MHgyNCwweGEwLDB4YzEsMHgwOCwweDEwLDB4NDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkODIwLCAwLCB7MHgwMCwweDEwLDB4YTIsMHgwMCwweDIwLDB4MDAsMHhjZCwweDAwLDB4MDAsMHg0MCwweDA0LDB4MjAsMHgwMSwweDEwLDB4MDAsMHgwOSB9LAorICAxNiwgMHhkODMwLCAwLCB7MHgwNCwweDAyLDB4NDksMHgwYywweDkyLDB4MDcsMHgzMCwweDAwLDB4MDAsMHgwMCwweDMzLDB4MDgsMHgwYywweDkyLDB4NDEsMHgwMCB9LAorICAxNiwgMHhkODQwLCAwLCB7MHg4MCwweGNjLDB4MDAsMHgwMCwweDAwLDB4MGMsMHgwMCwweDQzLDB4MjgsMHg4MCwweGMyLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkODUwLCAwLCB7MHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MTAsMHg1MCwweDgwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkODYwLCAwLCB7MHgxMCwweDAwLDB4MDAsMHhmMCwweDAwLDB4MTAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhkMCwweDgwLDB4ODAsMHgwMCB9LAorICAxNiwgMHhkODcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4OTAsMHg4MCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4OTAsMHg4MCB9LAorICAxNiwgMHhkODgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgxMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkODkwLCAwLCB7MHgzYywweDNjLDB4MTAsMHg4MCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4OTAsMHhhMCwweDgwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkOGEwLCAwLCB7MHgwMCwweDAwLDB4NDAsMHgxMCwweDkwLDB4ODAsMHhhMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgxMCwweDkwLDB4ODAsMHhhMCB9LAorICAxNiwgMHhkOGIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgyMCwweDgwLDB4MTAsMHg5MCwweGEwLDB4YTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHg4ZiB9LAorICAxNiwgMHhkOGMwLCAwLCB7MHgwZiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJjLDB4YzIsMHhlNCwweDgxLDB4ODAsMHgzZiB9LAorICAxNiwgMHhkOGQwLCAwLCB7MHhkOSwweGJmLDB4ZDksMHg5OCwweDcxLDB4OWQsMHg0MiwweDgwLDB4MDAsMHgyNiwweDdmLDB4ZTYsMHg3MiwweGFiLDB4N2MsMHgzYSB9LAorICAxNiwgMHhkOGUwLCAwLCB7MHg0MCwweDAwLDB4MTksMHg4MCwweDI2LDB4NDgsMHhkZCwweDNjLDB4OTEsMHhjMCwweDI2LDB4NDAsMHgyNiwweDQwLDB4MzgsMHgzMSB9LAorICAxNiwgMHhkOGYwLCAwLCB7MHhkYiwweDYxLDB4YzAsMHgxOSwweDk5LDB4YmYsMHhjOSwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkOTAwLCAwLCB7MHgwMCwweDAwLDB4MTAsMHg4MCwweDEwLDB4MTQsMHg4MCwweDA2LDB4ODQsMHg5NywweDk2LDB4ODYsMHg5NiwweDA2LDB4OTAsMHgwMCB9LAorICAxNiwgMHhkOTEwLCAwLCB7MHgzZiwweGExLDB4MjgsMHgwMSwweDAyLDB4OTAsMHgxMiwweDAwLDB4ODAsMHgxNywweDg4LDB4MTYsMHg5ZSwweDkwLDB4OTAsMHgwNCB9LAorICAxNiwgMHhkOTIwLCAwLCB7MHgxMCwweDAwLDB4MzYsMHhiZSwweGJlLDB4OWUsMHg4NiwweDE2LDB4MTIsMHg4NCwweDgwLDB4MTMsMHhiZSwweDk3LDB4YWUsMHg4MCB9LAorICAxNiwgMHhkOTMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHg4MiB9LAorICAxNiwgMHhkOTQwLCAwLCB7MHg4MSwweDg0LDB4MjEsMHg0MCwweDAwLDB4MDAsMHgwMCwweDA4LDB4YTEsMHgzOCwweDAxLDB4NzgsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkOTUwLCAwLCB7MHgwOCwweGI4LDB4MjEsMHg3MiwweDY4LDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDk4LDB4NDQsMHg4OCwweDY4LDB4ODAsMHgwMCB9LAorICAxNiwgMHhkOTYwLCAwLCB7MHgwMCwweDAwLDB4MDgsMHhiOCwweDAxLDB4NzgsMHgwMSwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkOTcwLCAwLCB7MHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmNywweGFmLDB4ZmYsMHhjMCB9LAorICAxNiwgMHhkOTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiB9LAorICAxNiwgMHhkOTkwLCAwLCB7MHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4YmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkOWEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCB9LAorICAxNiwgMHhkOWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHg3ZiwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiB9LAorICAxNiwgMHhkOWMwLCAwLCB7MHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiB9LAorICAxNiwgMHhkOWQwLCAwLCB7MHgyZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkOWUwLCAwLCB7MHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4N2YsMHhjMCB9LAorICAxNiwgMHhkOWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiB9LAorICAxNiwgMHhkYTAwLCAwLCB7MHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHg3ZiwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkYTEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCB9LAorICAxNiwgMHhkYTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4YmYsMHhiZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGRmLDB4YmYsMHhkZiB9LAorICAxNiwgMHhkYTMwLCAwLCB7MHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhlZiwweGZmLDB4ZmYsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhkZiB9LAorICAxNiwgMHhkYTQwLCAwLCB7MHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkYTUwLCAwLCB7MHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHgzZSwweGFmLDB4ZmYsMHhjMCB9LAorICAxNiwgMHhkYTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDFmLDB4ZmYsMHhkZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZTcsMHhmZSB9LAorICAxNiwgMHhkYTcwLCAwLCB7MHhlZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhkZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkYTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCB9LAorICAxNiwgMHhkYTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyZiwweGY3LDB4ZmYsMHhmZiB9LAorICAxNiwgMHhkYWEwLCAwLCB7MHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmYsMHhmZiwweGZmLDB4ZGYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmNyB9LAorICAxNiwgMHhkYWIwLCAwLCB7MHhkZiwweGY3LDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkYWMwLCAwLCB7MHgwMCwweDAwLDB4MDIsMHhjNCwweDAwLDB4YjEsMHhjMywweDJjLDB4NTAsMHgwOSwweDE0LDB4ODIsMHhjNCwweDMwLDB4OTEsMHhjNyB9LAorICAxNiwgMHhkYWQwLCAwLCB7MHgyNCwweDYwLDB4MDgsMHgxYywweDgyLDB4MDcsMHgzNCwweDkxLDB4NGMsMHgwNCwweDQzLDB4MGEsMHgxMCwweGMyLDB4ODQsMHgwNCB9LAorICAxNiwgMHhkYWUwLCAwLCB7MHg5MSwweDg0LDB4MjQsMHg1MiwweDBiLDB4MTgsMHgwMiwweGM0LDB4MjQsMHhiMSwweGMzLDB4MmMsMHg0MCwweDBhLDB4MTAsMHg4MCB9LAorICAxNiwgMHhkYWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHgwMiwweDAxLDB4YzQsMHg4MCB9LAorICAxNiwgMHhkYjAwLCAwLCB7MHg2MCwweDIwLDB4MWMsMHgwOCwweDQ0LDB4MjIsMHgwMSwweGMwLDB4ODQsMHg1MCwweDAxLDB4OWMsMHgwOCwweDA3LDB4MGEsMHgwMSB9LAorICAxNiwgMHhkYjEwLCAwLCB7MHhjMCwweDg0LDB4NzIsMHgyMCwweDFjLDB4YzgsMHgwNCwweDEyLDB4MTEsMHg0NCwweDgwLDB4NDEsMHgwMSwweDFjLDB4ODAsMHgwNyB9LAorICAxNiwgMHhkYjIwLCAwLCB7MHgwOCwweDExLDB4YzQsMHgwMCwweDcwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkYjMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHg4NiwweDJjLDB4MjEsMHg0YSwweDBjLDB4NTIsMHgwMiwweDFjLDB4ODAsMHgwNCwweDIwLDB4MjEsMHhjYSB9LAorICAxNiwgMHhkYjQwLCAwLCB7MHgxMCwweDYyLDB4MDIsMHgxYywweDgxLDB4NDcsMHgwNCwweDIxLDB4YzMsMHgyMCwweDUxLDB4MDEsMHgxYywweDgwLDB4MDQsMHgyYyB9LAorICAxNiwgMHhkYjUwLCAwLCB7MHgwMSwweGNiLDB4MDQsMHg1MiwweDAzLDB4MTQsMHg0MCwweGM3LDB4MjAsMHgzMSwweGM4LDB4MGMsMHg1MCwweDIyLDB4MTAsMHg4MCB9LAorICAxNiwgMHhkYjYwLCAwLCB7MHgwMSwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDYsMHgyMCwweDAxLDB4ODksMHgwMCB9LAorICAxNiwgMHhkYjcwLCAwLCB7MHg1MiwweDAwLDB4MTQsMHg4MCwweDA0LDB4MjgsMHgwMSwweDQ1LDB4MDQsMHg2MiwweDAwLDB4MTAsMHg4MCwweDQ2LDB4MzAsMHgxMSB9LAorICAxNiwgMHhkYjgwLCAwLCB7MHgwZCwweDAwLDB4NDIsMHgwMSwweDE0LDB4YzAsMHg0NCwweDAwLDB4MTEsMHgwNSwweDAwLDB4NTAsMHgwMCwweDFjLDB4MDAsMHg0NCB9LAorICAxNiwgMHhkYjkwLCAwLCB7MHgyOCwweDAxLDB4NDksMHgwMCwweDcwLDB4MDAsMHgxMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkYmEwLCAwLCB7MHgwMCwweDAwLDB4MDgsMHhjMCwweDAyLDB4MzAsMHgwYywweDhjLDB4MzAsMHgyMiwweDA4LDB4ODgsMHhjMiwweDI2LDB4MDAsMHgwOCB9LAorICAxNiwgMHhkYmIwLCAwLCB7MHg4MCwweDIwLDB4MjIsMHgwYywweDg4LDB4ODEsMHgwMiwweDEwLDB4YzQsMHg4MCwweDEwLDB4MjIsMHgwYywweDA4LDB4NDAsMHgwMiB9LAorICAxNiwgMHhkYmMwLCAwLCB7MHgxMCwweDQ4LDB4ODgsMHgwMSwweDIzLDB4MDQsMHhjOCwweDQyLDB4MDIsMHgxMCwweDQ2LDB4OGMsMHgxMiwweDIyLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkYmQwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDgwLDB4YzgsMHgyMCB9LAorICAxNiwgMHhkYmUwLCAwLCB7MHgxMSwweDA5LDB4MDAsMHg4MCwweDQxLDB4MTAsMHg5MCwweDA4LDB4MjQsMHgzMCwweDA4LDB4MDQsMHg0MiwweDQxLDB4MDAsMHg5MCB9LAorICAxNiwgMHhkYmYwLCAwLCB7MHhjNCwweDIwLDB4MDAsMHgwOCwweDA0LDB4NDIsMHgwMCwweDEwLDB4ODAsMHg0YywweDIwLDB4MjMsMHgwOSwweDA0LDB4YzIsMHg0MyB9LAorICAxNiwgMHhkYzAwLCAwLCB7MHgzMCwweDgwLDB4NDAsMHgyMCwweDExLDB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkYzEwLCAwLCB7MHgwOCwweDAwLDB4MDgsMHg4MSwweDAyLDB4MjAsMHhjOSwweDhjLDB4MTIsMHgyMCwweDA0LDB4NDgsMHg0MSwweDIyLDB4MDAsMHgwOSB9LAorICAxNiwgMHhkYzIwLCAwLCB7MHg4OCwweDMwLDB4MjAsMHgwYywweDg4LDB4MDMsMHgwZSwweDAwLDB4NDksMHg4YywweDEwLDB4MjIsMHgwYywweDg4LDB4NDAsMHgyZSB9LAorICAxNiwgMHhkYzMwLCAwLCB7MHgwMCwweGM5LDB4ODQsMHgxMywweDIxLDB4MDQsMHhjOCwweGMzLDB4MjIsMHgwMCwweGNiLDB4OGMsMHgzMiwweDIyLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkYzQwLCAwLCB7MHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDA4LDB4MDEsMHgwMiwweDAwLDB4NGIsMHg4MCB9LAorICAxNiwgMHhkYzUwLCAwLCB7MHgzMiwweDIxLDB4MDgsMHg4OCwweDQxLDB4MDIsMHgxMCwweDBmLDB4ODAsMHgxMCwweDIxLDB4OGMsMHgwOCwweDQxLDB4MDIsMHgwMCB9LAorICAxNiwgMHhkYzYwLCAwLCB7MHg4NywweDg0LDB4MTAsMHgyMCwweDA0LDB4ODgsMHgwMCwweDAyLDB4MDAsMHg0NywweDgwLDB4MTAsMHgyMSwweDBjLDB4ODgsMHg0MSB9LAorICAxNiwgMHhkYzcwLCAwLCB7MHgxNiwweDEwLDB4NDYsMHg4MCwweDMwLDB4MjAsMHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkYzgwLCAwLCB7MHgwMCwweDAwLDB4MGEsMHhjNCwweDIyLDB4YTEsMHgwOCwweGE0LDB4NzIsMHgyYSwweDE0LDB4MGEsMHg4NSwweDAyLDB4ODEsMHg4NCB9LAorICAxNiwgMHhkYzkwLCAwLCB7MHhhMCwweDQyLDB4MjgsMHgxYywweDBhLDB4YzUsMHgwMiwweDkxLDB4NDAsMHhiOCwweDczLDB4MjksMHgxMCwweGNhLDB4YzQsMHgwMiB9LAorICAxNiwgMHhkY2EwLCAwLCB7MHhhMSwweDgwLDB4YTQsMHg0MiwweDJhLDB4MTQsMHhjYSwweDg1LDB4MjIsMHg5MSwweDgwLDB4YTgsMHg3MCwweDJhLDB4MTgsMHgwMiB9LAorICAxNiwgMHhkY2IwLCAwLCB7MHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDA4LDB4MDQsMHgxZSwweDAxLDB4YzgsMHg4MCB9LAorICAxNiwgMHhkY2MwLCAwLCB7MHg0MywweDIwLDB4MTgsMHgwOCwweDQ1LDB4M2UsMHgwMSwweDBjLDB4ODAsMHg2MSwweDIwLDB4OWMsMHg0OCwweDA2LDB4MTIsMHg4MSB9LAorICAxNiwgMHhkY2QwLCAwLCB7MHhjMCwweDgwLDB4NzMsMHgwMCwweDEwLDB4ODgsMHgwNiwweDAyLDB4MDEsMHhjOCwweDAwLDB4NDIsMHgyMCwweDEwLDB4YzgsMHgwNyB9LAorICAxNiwgMHhkY2UwLCAwLCB7MHgwMiwweDExLDB4Y2QsMHg4MCwweDUxLDB4MjAsMHgxNCwweDgyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkY2YwLCAwLCB7MHgwOCwweDAwLDB4MDAsMHhjNCwweDI0LDB4MjEsMHhjOCwweDBjLDB4NDIsMHgwMSwweDE0LDB4MDAsMHgwMCwweDI4LDB4MTAsMHg0YyB9LAorICAxNiwgMHhkZDAwLCAwLCB7MHgwOCwweDUyLDB4MDIsMHgxNCwweDgwLDB4NDUsMHgyNCwweDI5LDB4NDAsMHgwNCwweDcyLDB4MDAsMHgxMCwweGMwLDB4MDUsMHgyNCB9LAorICAxNiwgMHhkZDEwLCAwLCB7MHgxMSwweDQ0LDB4MDgsMHg0MywweDAxLDB4MTQsMHhjMCwweDQ3LDB4MjQsMHgyMCwweDQ4LDB4MDgsMHg3MiwweDAyLDB4MTAsMHgwMCB9LAorICAxNiwgMHhkZDIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweDAwLDB4MDcsMHgxMCwweDExLDB4MDYsMHgwMCB9LAorICAxNiwgMHhkZDMwLCAwLCB7MHg3MiwweDAwLDB4MTgsMHhkMCwweDQ2LDB4MjAsMHgwMSwweDRkLDB4MDAsMHg3MSwweDQwLDB4MTAsMHg1MCwweDA3LDB4MzAsMHgxMSB9LAorICAxNiwgMHhkZDQwLCAwLCB7MHhjMywweDAwLDB4NzEsMHg0MSwweDEwLDB4YjAsMHgwNSwweDJjLDB4MDEsMHg0OSwweDAwLDB4NDMsMHgwMCwweDFjLDB4NTAsMHg0NSB9LAorICAxNiwgMHhkZDUwLCAwLCB7MHgzMCwweDAxLDB4OGMsMHgwMCwweDYxLDB4NDAsMHgxOCwweDQyLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZDYwLCAwLCB7MHgwMCwweDAwLDB4MzAsMHhjNSwweDAwLDB4MjEsMHhjMCwweDBjLDB4NDAsMHgwMSwweDE0LDB4MTIsMHg0NCwweDA0LDB4MzEsMHg4NCB9LAorICAxNiwgMHhkZDcwLCAwLCB7MHgyNCwweDQwLDB4ODAsMHgxNCwweGExLDB4YzcsMHgwMCwweDAxLDB4NDAsMHgwOCwweDQwLDB4MDEsMHgxNCwweDIwLDB4MDUsMHgyMCB9LAorICAxNiwgMHhkZDgwLCAwLCB7MHgxMSwweGMwLDB4MDIsMHg2MCwweDgyLDB4MTgsMHgwMCwweDg3LDB4MjQsMHgxMSwweDQwLDB4MDgsMHg0MCwweDQyLDB4MTAsMHgwMiB9LAorICAxNiwgMHhkZDkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MDAsMHgwYywweDgwLDB4YzQsMHgyNCB9LAorICAxNiwgMHhkZGEwLCAwLCB7MHgzMSwweDQ4LDB4MGMsMHgwMCwweDAxLDB4MDgsMHhjMSwweDQxLDB4MDAsMHgwMCwweDQ5LDB4MDAsMHg0MiwweDAzLDB4MDgsMHgxMCB9LAorICAxNiwgMHhkZGIwLCAwLCB7MHg4MCwweDIwLDB4MjEsMHgwOSwweDBjLDB4MDIsMHgwMiwweDE4LDB4ODAsMHhjMSwweDI0LDB4MzAsMHgwOCwweDBjLDB4NDIsMHgwMSB9LAorICAxNiwgMHhkZGMwLCAwLCB7MHgxMCwweDgwLDB4ODMsMHgyMCwweDExLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZGQwLCAwLCB7MHgwMCwweDAwLDB4MTAsMHhjMSwweDA0LDB4MjAsMHg0OCwweDBjLDB4MTIsMHg0MiwweDA0LDB4MDAsMHg4MywweDAwLDB4MzEsMHg0OCB9LAorICAxNiwgMHhkZGUwLCAwLCB7MHgwMCwweDAyLDB4NDEsMHgwNCwweGEwLDB4MDcsMHgwYywweDIwLDB4NDAsMHgwMCwweDEyLDB4YzIsMHgwYywweDgwLDB4YzEsMHgyMCB9LAorICAxNiwgMHhkZGYwLCAwLCB7MHgyMCwweGM4LDB4MDAsMHgxMiwweGMxLDB4MGMsMHhiMCwweDQxLDB4MjAsMHgwMCwweDQ5LDB4MDgsMHgwMiwweDQyLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZTAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDgwLDB4MDEsMHgwMCwweDEwLDB4ODEsMHgwMCB9LAorICAxNiwgMHhkZTEwLCAwLCB7MHgzMCwweDQwLDB4MDgsMHgyMCwweDAzLDB4MDAsMHgxMCwweGMxLDB4MjAsMHgwMiwweDAwLDB4MDQsMHg4MCwweDQwLDB4MzAsMHg5MCB9LAorICAxNiwgMHhkZTIwLCAwLCB7MHgwMSwweDE0LDB4MDIsMHg0MCwweDA0LDB4ODAsMHg0MCwweDIwLDB4MDAsMHgwOSwweDA0LDB4MzIsMHgwMSwweDA4LDB4YTAsMHgwMyB9LAorICAxNiwgMHhkZTMwLCAwLCB7MHgwNCwweDEwLDB4MDgsMHgwMCwweDIyLDB4NDAsMHgwMCwweDAwLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZTQwLCAwLCB7MHgwMCwweDAwLDB4MzAsMHgwMCwweDEwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4ZjAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZTUwLCAwLCB7MHgwMCwweDEwLDB4ODAsMHgwMCwweGYwLDB4MDAsMHg4MCwweDgwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweGYwLDB4MTAsMHhhMCB9LAorICAxNiwgMHhkZTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHhmMCwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDgwLDB4MDAsMHhjYyB9LAorICAxNiwgMHhkZTcwLCAwLCB7MHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2MsMHgzYywweDEwLDB4YTAsMHg4MCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZTgwLCAwLCB7MHgwMCwweDAwLDB4MTAsMHg5MCwweDgwLDB4YzAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg5MCwweDgwLDB4ODAsMHgwMCB9LAorICAxNiwgMHhkZTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4OTAsMHg4MCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4OTAsMHg4MCB9LAorICAxNiwgMHhkZWEwLCAwLCB7MHhlMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDhjLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZWIwLCAwLCB7MHgwMCwweDAwLDB4MDksMHg0ZCwweGIxLDB4ZTksMHgwMCwweDI2LDB4NDAsMHgyYSwweDdmLDB4ZTMsMHhmMiwweDU0LDB4OTgsMHhjMCB9LAorICAxNiwgMHhkZWMwLCAwLCB7MHgzZiwweGU2LDB4NDAsMHgwMCwweDAxLDB4NDIsMHg5MSwweGQwLDB4YzAsMHgxMywweGU1LDB4ODcsMHg2MywweDgzLDB4YjgsMHhjZCB9LAorICAxNiwgMHhkZWQwLCAwLCB7MHhmOSwweDAwLDB4MjYsMHg3ZiwweDAwLDB4MDAsMHgzNSwweDJlLDB4ZDUsMHgwMywweDQwLDB4M2YsMHhkOSwweGJmLDB4YjEsMHg4MCB9LAorICAxNiwgMHhkZWUwLCAwLCB7MHgwMSwweGYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDIsMHgxNiwweDE0LDB4MDAsMHgxYyB9LAorICAxNiwgMHhkZWYwLCAwLCB7MHhhOCwweDNmLDB4ODgsMHgxNiwweDAwLDB4ODAsMHg4NCwweDgwLDB4MzcsMHg5ZSwweGJhLDB4YTAsMHg1MCwweDEwLDB4MDIsMHgxMiB9LAorICAxNiwgMHhkZjAwLCAwLCB7MHgwMCwweDE3LDB4OTYsMHg5NywweDI2LDB4NTAsMHgxMCwweDEwLDB4ODIsMHg4MCwweDFlLDB4ODAsMHhkZSwweGJlLDB4OTQsMHgxNCB9LAorICAxNiwgMHhkZjEwLCAwLCB7MHgwMiwweDEwLDB4ODAsMHgxNywweGJlLDB4ODEsMHg5NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZjIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweGE4LDB4NDQsMHg5NCwweDI4LDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwOCB9LAorICAxNiwgMHhkZjMwLCAwLCB7MHg5NCwweDIxLDB4NDQsMHg1MSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHg4NCwweDQyLDB4NDEsMHgwMSwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZjQwLCAwLCB7MHgwMCwweDA4LDB4YTEsMHg3MiwweDIzLDB4NDEsMHg0MCwweDAwLDB4MDAsMHgwMCwweDA4LDB4YjgsMHgwMSwweDc4LDB4MzIsMHg0MCB9LAorICAxNiwgMHhkZjUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCB9LAorICAxNiwgMHhkZjYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgzZiwweGY3LDB4ZmUsMHhkNywweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZDcsMHhkZiB9LAorICAxNiwgMHhkZjcwLCAwLCB7MHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweDdmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzcsMHg3ZiB9LAorICAxNiwgMHhkZjgwLCAwLCB7MHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZjkwLCAwLCB7MHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MWUsMHhmZiwweGRlLDB4NzcsMHhjMCB9LAorICAxNiwgMHhkZmEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDFmLDB4ZWYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiB9LAorICAxNiwgMHhkZmIwLCAwLCB7MHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHg3ZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhkZmMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCB9LAorICAxNiwgMHhkZmQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgxZiwweGNmLDB4ZGYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhiZiB9LAorICAxNiwgMHhkZmUwLCAwLCB7MHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4YmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiB9LAorICAxNiwgMHhkZmYwLCAwLCB7MHhmZiwweGJmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMDAwLCAwLCB7MHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCB9LAorICAxNiwgMHhlMDEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDFmLDB4ZmYsMHgxZiB9LAorICAxNiwgMHhlMDIwLCAwLCB7MHg3ZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyZiwweGRmLDB4ZmYsMHhjZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMDMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCB9LAorICAxNiwgMHhlMDQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgzZiwweGJmLDB4YWYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiB9LAorICAxNiwgMHhlMDUwLCAwLCB7MHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2UsMHhkZSwweDdmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiB9LAorICAxNiwgMHhlMDYwLCAwLCB7MHhmZiwweGY3LDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMDcwLCAwLCB7MHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHg3ZiwweGZmLDB4ZmYsMHhjMCB9LAorICAxNiwgMHhlMDgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmUsMHhiZSB9LAorICAxNiwgMHhlMDkwLCAwLCB7MHg3ZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZSwweGZmLDB4ZDcsMHg3ZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMGEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMGIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMGMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMGQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMGUwLCAwLCB7MHgzMCwweDAwLDB4MjAsMHgwMSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDQzLDB4OGUsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMGYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMTAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMTEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMTMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMTcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMWEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMWMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMWQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMWUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMjAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMjEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMjIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMjMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMjQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMjUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMjYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMjcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMjgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMjkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMmEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMmIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMmMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMmQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMmUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMmYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMzAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMzEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMzIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMzMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMzQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMzUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMzYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMzcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMzgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlMzkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlM2EwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlM2IwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlM2MwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlM2QwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlM2UwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlM2YwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNDAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNDEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNDIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNDMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNDQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNDUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNDYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNDcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNDgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNDkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNGEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNGIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNGMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNGQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNGUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNGYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNTAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNTEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNTMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNTcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNWEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNWMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNWQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNWUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNjAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNjEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNjIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNjMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNjQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNjUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNjYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNjcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNjgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNjkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNmEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNmIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNmMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNmQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNmUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNmYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNzAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNzEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNzIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNzMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNzQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNzUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNzYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNzcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNzgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlNzkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlN2EwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlN2IwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlN2MwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlN2QwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlN2UwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlN2YwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlODAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlODEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlODIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlODMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlODQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlODUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlODYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlODcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlODgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlODkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOGEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOGIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOGMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOGQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOGUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOGYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOTAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOTEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOTMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOTcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOWEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOWMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOWQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOWUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlOWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYTAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYTEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYTMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYTcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYWEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYWMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYWQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYWUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYjAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYjEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYjIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYjMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYjQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYjUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYjYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYjcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYjgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYjkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYmEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYmIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYmMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYmQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYmUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYmYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYzAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYzEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYzIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYzMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYzQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYzUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYzYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYzcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYzgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlYzkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlY2EwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlY2IwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlY2MwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlY2QwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlY2UwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlY2YwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZDAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZDEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZDIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZDMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZDQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZDUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZDYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZDcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZDgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZDkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZGEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZGIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZGMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZGQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZGUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZGYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZTAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZTEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZTMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZTcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZWEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZWMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZWQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZWUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZjAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZjEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZjIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHgyMCwweDAxLDB4MDIsMHgwMiwweDAwLDB4MDAsMHgzMCwweDAwLDB4NDMsMHg4MCB9LAorICAxNiwgMHhlZjMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZjQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZjUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZjYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZjcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZjgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZjkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZmEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZmIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZmMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZmQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZmUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhlZmYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMDAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMDEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMDIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMDMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMDQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMDUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMDYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMDcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMDgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMDkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMGEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMGIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMGMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMGQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMGUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMGYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMTAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMTEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMTMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMTcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMWEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMWMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMWQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMWUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMjAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMjEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMjIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMjMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMjQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMjUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMjYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMjcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMjgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMjkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMmEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMmIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMmMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMmQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMmUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMmYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMzAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMzEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMzIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMzMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMzQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMzUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMzYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMzcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMzgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmMzkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmM2EwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmM2IwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmM2MwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmM2QwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmM2UwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmM2YwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNDAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNDEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNDIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNDMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNDQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNDUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNDYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNDcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNDgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNDkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNGEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNGIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNGMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNGQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNGUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNGYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNTAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNTEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNTMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNTcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNWEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNWMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNWQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNWUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNjAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNjEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNjIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNjMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNjQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNjUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNjYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNjcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNjgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNjkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNmEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNmIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNmMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNmQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNmUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNmYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNzAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNzEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNzIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNzMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNzQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNzUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNzYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNzcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNzgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmNzkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmN2EwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmN2IwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmN2MwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmN2QwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmN2UwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmN2YwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmODAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmODEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmODIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmODMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmODQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmODUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmODYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmODcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmODgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmODkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOGEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOGIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOGMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOGQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOGUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOGYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOTAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOTEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOTMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOTcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOWEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOWMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOWQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOWUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmOWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYTAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYTEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYTMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYTcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYWEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYWMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYWQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYWUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYjAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYjEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYjIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYjMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYjQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYjUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYjYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYjcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYjgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYjkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYmEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYmIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYmMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYmQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYmUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYmYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYzAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYzEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYzIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYzMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYzQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYzUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYzYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYzcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYzgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmYzkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmY2EwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmY2IwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmY2MwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmY2QwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmY2UwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmY2YwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmZDAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmZDEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmZDIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmZDMwLCAwLCB7MHgzMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHg1ZiwweGE3LDB4MzAsMHgwMCwweDgwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMyB9LAorICAxNiwgMHhmZDQwLCAwLCB7MHgzMCwweDAwLDB4NDAsMHgwZSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmZDUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmZDYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAxNiwgMHhmZDcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4ODAsMHgwMSB9LAorICAxNiwgMHhmZDgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwNSwweDMwLDB4MDAsMHhhMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMSB9LAorICAxNiwgMHhmZDkwLCAwLCB7MHgwMCwweDAwLDB4NmIsMHg5NywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICA0LCAweGZkYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDAgLCAweDAwMDAsIDEsIHswfQorfTsKKy8vIFZFUlNJT049IDEuMC4wLjE5MQorLy8gREFURT0gMjAwMm9jdDI4CitzdGF0aWMgSU5URUxfSEVYX1JFQ09SRCBnX0hleE1pZGlGdzYyW10gPSB7CisgICAzLDB4MDAwMCwwLHsweDAyLDB4NDYsMHhiOX0sCisgICAzLDB4MDAwMywwLHsweDAyLDB4MGYsMHhmZH0sCisgICAzLDB4MDAwYiwwLHsweDAyLDB4NGUsMHgwZn0sCisgICAzLDB4MDAxMywwLHsweDAyLDB4MTcsMHhmZH0sCisgICAzLDB4MDAxYiwwLHsweDAyLDB4NGUsMHgxMn0sCisgICAzLDB4MDAyMywwLHsweDAyLDB4NGQsMHhlZn0sCisgICAzLDB4MDAyYiwwLHsweDAyLDB4NDgsMHgwMH0sCisgICAzLDB4MDAzMywwLHsweDAyLDB4NGQsMHhlNn0sCisgICAzLDB4MDAzYiwwLHsweDAyLDB4NGQsMHhmNn0sCisgICAzLDB4MDA0MywwLHsweDAyLDB4NDksMHgwMH0sCisgICAzLDB4MDA0YiwwLHsweDAyLDB4NGUsMHgwM30sCisgICAzLDB4MDA1MywwLHsweDAyLDB4NDgsMHhmYX0sCisgICAzLDB4MDA1YiwwLHsweDAyLDB4NGQsMHhmZH0sCisgICAzLDB4MDA2MywwLHsweDAyLDB4NGUsMHgwN30sCisgIDE2LDB4MDUwMCwwLHsweDEyLDB4MDEsMHgxMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4NDAsMHg2YSwweDA4LDB4MTEsMHgwMSwweDAwLDB4MDEsMHgwMSwweDAyfSwKKyAgMTYsMHgwNTEwLDAsezB4MDAsMHgwMSwweDA5LDB4MDIsMHgwOCwweDAyLDB4MDUsMHgwMSwweDAwLDB4ODAsMHgzMiwweDA5LDB4MDQsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDA1MjAsMCx7MHgwMSwweDAxLDB4MDAsMHgwMCwweDBhLDB4MjQsMHgwMSwweDAwLDB4MDEsMHg1NiwweDAwLDB4MDIsMHgwMSwweDAyLDB4MGMsMHgyNH0sCisgIDE2LDB4MDUzMCwwLHsweDAyLDB4MDEsMHgwMSwweDAxLDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHgyNCwweDA2LDB4MDUsMHgwMSwweDAyfSwKKyAgMTYsMHgwNTQwLDAsezB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOSwweDI0LDB4MDMsMHgwMiwweDA0LDB4MDMsMHgwMCwweDA1LDB4MDB9LAorICAxNiwweDA1NTAsMCx7MHgwYywweDI0LDB4MDIsMHgwMywweDA1LDB4MDIsMHgwMCwweDA2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNSwweDI0LDB4MDYsMHgwNn0sCisgIDE2LDB4MDU2MCwwLHsweDAzLDB4MDIsMHgwMCwweDAwLDB4MDMsMHgwMCwweDAzLDB4MDAsMHgwMywweDAwLDB4MDMsMHgwMCwweDAzLDB4MDAsMHgwMywweDAwfSwKKyAgMTYsMHgwNTcwLDAsezB4MDAsMHgwOSwweDI0LDB4MDMsMHgwNCwweDAxLDB4MDEsMHgwMCwweDA2LDB4MDAsMHgwOSwweDA0LDB4MDEsMHgwMCwweDAwLDB4MDF9LAorICAxNiwweDA1ODAsMCx7MHgwMiwweDAwLDB4MDAsMHgwOSwweDA0LDB4MDEsMHgwMSwweDAyLDB4MDEsMHgwMiwweDAwLDB4MDAsMHgwNywweDI0LDB4MDEsMHgwMX0sCisgIDE2LDB4MDU5MCwwLHsweDAwLDB4MDEsMHgwMCwweDExLDB4MjQsMHgwMiwweDAxLDB4MDIsMHgwMiwweDEwLDB4MDMsMHg0NCwweGFjLDB4MDAsMHg4MCwweGJifSwKKyAgMTYsMHgwNWEwLDAsezB4MDAsMHgwMCwweDc3LDB4MDEsMHgwOSwweDA1LDB4MGEsMHgwNSwweDg0LDB4MDEsMHgwMSwweDAwLDB4OGYsMHgwNywweDI1LDB4MDF9LAorICAxNiwweDA1YjAsMCx7MHgwMSwweDAwLDB4MDAsMHgwMCwweDA5LDB4MDUsMHg4ZiwweDAxLDB4MDMsMHgwMCwweDAxLDB4MDUsMHgwMCwweDA5LDB4MDQsMHgwMX0sCisgIDE2LDB4MDVjMCwwLHsweDAyLDB4MDIsMHgwMSwweDAyLDB4MDAsMHgwMCwweDA3LDB4MjQsMHgwMSwweDAxLDB4MDAsMHgwMSwweDAwLDB4MTEsMHgyNCwweDAyfSwKKyAgMTYsMHgwNWQwLDAsezB4MDEsMHgwMiwweDAzLDB4MTgsMHgwMywweDQ0LDB4YWMsMHgwMCwweDgwLDB4YmIsMHgwMCwweDAwLDB4NzcsMHgwMSwweDA5LDB4MDV9LAorICAxNiwweDA1ZTAsMCx7MHgwYSwweDA1LDB4NDYsMHgwMiwweDAxLDB4MDAsMHg4ZiwweDA3LDB4MjUsMHgwMSwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDksMHgwNX0sCisgIDE2LDB4MDVmMCwwLHsweDhmLDB4MDEsMHgwMywweDAwLDB4MDEsMHgwNSwweDAwLDB4MDksMHgwNCwweDAyLDB4MDAsMHgwMCwweDAxLDB4MDIsMHgwMCwweDAwfSwKKyAgMTYsMHgwNjAwLDAsezB4MDksMHgwNCwweDAyLDB4MDEsMHgwMSwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDcsMHgyNCwweDAxLDB4MDQsMHgwMCwweDAxLDB4MDB9LAorICAxNiwweDA2MTAsMCx7MHgwZSwweDI0LDB4MDIsMHgwMSwweDA2LDB4MDIsMHgxMCwweDAyLDB4NDQsMHhhYywweDAwLDB4ODAsMHhiYiwweDAwLDB4MDksMHgwNX0sCisgIDE2LDB4MDYyMCwwLHsweDhjLDB4MDUsMHg0YywweDAyLDB4MDEsMHgwMCwweDAwLDB4MDcsMHgyNSwweDAxLDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwOSwweDA0fSwKKyAgMTYsMHgwNjMwLDAsezB4MDIsMHgwMiwweDAxLDB4MDEsMHgwMiwweDAwLDB4MDAsMHgwNywweDI0LDB4MDEsMHgwNCwweDAwLDB4MDEsMHgwMCwweDBlLDB4MjR9LAorICAxNiwweDA2NDAsMCx7MHgwMiwweDAxLDB4MDYsMHgwMywweDE4LDB4MDIsMHg0NCwweGFjLDB4MDAsMHg4MCwweGJiLDB4MDAsMHgwOSwweDA1LDB4OGMsMHgwNX0sCisgIDE2LDB4MDY1MCwwLHsweDcyLDB4MDMsMHgwMSwweDAwLDB4MDAsMHgwNywweDI1LDB4MDEsMHgwMCwweDAyLDB4MDAsMHgwMCwweDA5LDB4MDQsMHgwMiwweDAzfSwKKyAgMTYsMHgwNjYwLDAsezB4MDEsMHgwMSwweDAyLDB4MDAsMHgwMCwweDA3LDB4MjQsMHgwMSwweDA0LDB4MDAsMHgwMSwweDAwLDB4MTEsMHgyNCwweDAyLDB4MDF9LAorICAxNiwweDA2NzAsMCx7MHgwMiwweDAyLDB4MTAsMHgwMywweDQ0LDB4YWMsMHgwMCwweDgwLDB4YmIsMHgwMCwweDAwLDB4NzcsMHgwMSwweDA5LDB4MDUsMHg4Y30sCisgIDE2LDB4MDY4MCwwLHsweDA1LDB4ODQsMHgwMSwweDAxLDB4MDAsMHgwMCwweDA3LDB4MjUsMHgwMSwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDksMHgwNCwweDAyfSwKKyAgMTYsMHgwNjkwLDAsezB4MDQsMHgwMSwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDcsMHgyNCwweDAxLDB4MDQsMHgwMCwweDAxLDB4MDAsMHgxMSwweDI0LDB4MDJ9LAorICAxNiwweDA2YTAsMCx7MHgwMSwweDAyLDB4MDMsMHgxOCwweDAzLDB4NDQsMHhhYywweDAwLDB4ODAsMHhiYiwweDAwLDB4MDAsMHg3NywweDAxLDB4MDksMHgwNX0sCisgIDE2LDB4MDZiMCwwLHsweDhjLDB4MDUsMHg0NiwweDAyLDB4MDEsMHgwMCwweDAwLDB4MDcsMHgyNSwweDAxLDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwOSwweDA0fSwKKyAgMTYsMHgwNmMwLDAsezB4MDMsMHgwMCwweDAwLDB4MDEsMHgwMSwweDAwLDB4MDAsMHgwOSwweDI0LDB4MDEsMHgwMCwweDAxLDB4MDksMHgwMCwweDAxLDB4MDR9LAorICAxNiwweDA2ZDAsMCx7MHgwOSwweDA0LDB4MDQsMHgwMCwweDAyLDB4MDEsMHgwMywweDAwLDB4MDAsMHgwNywweDI0LDB4MDEsMHgwMCwweDAxLDB4MjQsMHgwMH0sCisgIDE2LDB4MDZlMCwwLHsweDA2LDB4MjQsMHgwMiwweDAxLDB4MDcsMHgwMCwweDA5LDB4MjQsMHgwMywweDAyLDB4MDgsMHgwMSwweDA3LDB4MDEsMHgwMCwweDA2fSwKKyAgMTYsMHgwNmYwLDAsezB4MjQsMHgwMiwweDAyLDB4MDksMHgwMCwweDA5LDB4MjQsMHgwMywweDAxLDB4MGEsMHgwMSwweDA5LDB4MDEsMHgwMCwweDA5LDB4MDV9LAorICAxNiwweDA3MDAsMCx7MHgwMSwweDAyLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4MjUsMHgwMSwweDAxLDB4MDcsMHgwOSwweDA1LDB4ODEsMHgwMn0sCisgIDE2LDB4MDcxMCwwLHsweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDI1LDB4MDEsMHgwMSwweDBhLDB4MDQsMHgwMywweDA5LDB4MDQsMHgxOCwweDAzfSwKKyAgMTYsMHgwNzIwLDAsezB4NDUsMHgwMCwweDZkLDB4MDAsMHg2MSwweDAwLDB4NjcsMHgwMCwweDY5LDB4MDAsMHg2MywweDAwLDB4MjAsMHgwMCwweDQ3LDB4MDB9LAorICAxNiwweDA3MzAsMCx7MHg2ZCwweDAwLDB4NjIsMHgwMCwweDQ4LDB4MDAsMHgyMiwweDAzLDB4NDUsMHgwMCwweDZkLDB4MDAsMHg2MSwweDAwLDB4NjcsMHgwMH0sCisgIDE2LDB4MDc0MCwwLHsweDY5LDB4MDAsMHg2MywweDAwLDB4MjAsMHgwMCwweDQ1LDB4MDAsMHg0ZCwweDAwLDB4NDksMHgwMCwweDIwLDB4MDAsMHgzNiwweDAwfSwKKyAgMTYsMHgwNzUwLDAsezB4N2MsMHgwMCwweDMyLDB4MDAsMHgyMCwweDAwLDB4NmQsMHgwMCwweDJhLDB4MDMsMHg0MywweDAwLDB4NmYsMHgwMCwweDZlLDB4MDB9LAorICAxNiwweDA3NjAsMCx7MHg2NiwweDAwLDB4NjksMHgwMCwweDY3LDB4MDAsMHg3NSwweDAwLDB4NzIsMHgwMCwweDYxLDB4MDAsMHg3NCwweDAwLDB4NjksMHgwMH0sCisgIDE2LDB4MDc3MCwwLHsweDZmLDB4MDAsMHg2ZSwweDAwLDB4MjAsMHgwMCwweDUzLDB4MDAsMHg3NCwweDAwLDB4NzIsMHgwMCwweDY5LDB4MDAsMHg2ZSwweDAwfSwKKyAgMTYsMHgwNzgwLDAsezB4NjcsMHgwMCwweDIyLDB4MDMsMHg0OSwweDAwLDB4NmUsMHgwMCwweDc0LDB4MDAsMHg2NSwweDAwLDB4NzIsMHgwMCwweDY2LDB4MDB9LAorICAxNiwweDA3OTAsMCx7MHg2MSwweDAwLDB4NjMsMHgwMCwweDY1LDB4MDAsMHgyMCwweDAwLDB4NTMsMHgwMCwweDc0LDB4MDAsMHg3MiwweDAwLDB4NjksMHgwMH0sCisgICA2LDB4MDdhMCwwLHsweDZlLDB4MDAsMHg2NywweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MDdhNiwwLHsweGU0LDB4OTAsMHg3NiwweDY2LDB4ZjAsMHgxMiwweDQ0LDB4YWQsMHgyMCwweDI2LDB4MTMsMHg5MCwweDc2LDB4NjYsMHhlMCwweGMzfSwKKyAgMTYsMHgwN2I2LDAsezB4OTQsMHgwMiwweDUwLDB4MGEsMHhlMCwweDA0LDB4ZjAsMHhkMiwweDQyLDB4MTIsMHg0YiwweDdmLDB4ODAsMHhlYSwweDMwLDB4MjZ9LAorICAxNiwweDA3YzYsMCx7MHgwNSwweDEyLDB4MjgsMHgwMSwweGMyLDB4MjYsMHgzMCwweDI1LDB4MmIsMHg5MCwweDc2LDB4OTYsMHhlMCwweDU0LDB4ZmMsMHhmMH0sCisgIDE2LDB4MDdkNiwwLHsweDkwLDB4ODAsMHgwMywweGYwLDB4MTIsMHgxNCwweDk2LDB4OTAsMHg3NiwweDk2LDB4ZTAsMHg0NCwweDAzLDB4ZjAsMHg5MCwweDgwfSwKKyAgMTYsMHgwN2U2LDAsezB4MDMsMHhmMCwweGU0LDB4OTAsMHg3NiwweDY3LDB4ZjAsMHg5MCwweDc2LDB4NjcsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGI0LDB4NGJ9LAorICAxMCwweDA3ZjYsMCx7MHhmNiwweDEyLDB4NDcsMHhmYSwweDEyLDB4NDEsMHgxYiwweDgwLDB4YzUsMHgyMn0sCisgIDE2LDB4MDgwMCwwLHsweGU0LDB4OTAsMHg3NiwweDMxLDB4ZjAsMHg5MCwweDc2LDB4MzEsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBmfSwKKyAgMTYsMHgwODEwLDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3ZiwweGVkLDB4ZTAsMHhmZCwweGVlLDB4NmR9LAorICAxNiwweDA4MjAsMCx7MHg2MCwweDBlLDB4ZWYsMHhjMywweDk0LDB4MGIsMHg1MCwweDA4LDB4OTAsMHg3NiwweDMxLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhkNX0sCisgIDE2LDB4MDgzMCwwLHsweGVmLDB4YjQsMHgwYiwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweGVmLDB4NzUsMHhmMCwweDAzfSwKKyAgMTYsMHgwODQwLDAsezB4YTQsMHgyNCwweDBlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwLDB4NzYsMHgzMywweGYwLDB4MjR9LAorICAxNiwweDA4NTAsMCx7MHhmMCwweDYwLDB4MGEsMHgyNCwweDBlLDB4NjAsMHgwMiwweDgxLDB4ODcsMHgxMiwweDRiLDB4YzcsMHgyMiwweDkwLDB4N2YsMHhlZH0sCisgIDE2LDB4MDg2MCwwLHsweGUwLDB4NjQsMHgwNSwweDcwLDB4NTEsMHg5MCwweDc2LDB4MTgsMHg3NCwweDA1LDB4ZjAsMHg5MCwweDc2LDB4MzcsMHg3NCwweDAxfSwKKyAgMTYsMHgwODcwLDAsezB4ZjAsMHg5MCwweDc2LDB4MzksMHg3NCwweDAzLDB4ZjAsMHg5MCwweDc2LDB4MjEsMHhmMCwweGU0LDB4OTAsMHg3NiwweDIwLDB4ZjB9LAorICAxNiwweDA4ODAsMCx7MHg5MCwweDdmLDB4ZWEsMHhlMCwweGY0LDB4NjAsMHgyZiwweDkwLDB4NzYsMHgyMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNH0sCisgIDE2LDB4MDg5MCwwLHsweDI0LDB4YWEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGZkfSwKKyAgMTYsMHgwOGEwLDAsezB4ZWUsMHg2ZCwweDYwLDB4MTIsMHg5MCwweDc2LDB4MjEsMHhlMCwweGZlLDB4ZWYsMHhjMywweDllLDB4NTAsMHgwOCwweDkwLDB4NzZ9LAorICAxNiwweDA4YjAsMCx7MHgyMCwweGUwLDB4MDQsMHhmMCwweDgwLDB4ZDEsMHg5MCwweDdmLDB4ZWQsMHhlMCwweDY0LDB4MDYsMHg3MCwweDUyLDB4OTAsMHg3Nn0sCisgIDE2LDB4MDhjMCwwLHsweDE4LDB4NzQsMHgwNiwweGYwLDB4OTAsMHg3NiwweDM3LDB4NzQsMHgwNCwweGYwLDB4OTAsMHg3NiwweDM5LDB4NzQsMHgwYSwweGYwfSwKKyAgMTYsMHgwOGQwLDAsezB4OTAsMHg3NiwweDIxLDB4ZjAsMHg5MCwweDc2LDB4MjAsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGY0LDB4NjB9LAorICAxNiwweDA4ZTAsMCx7MHgyZiwweDkwLDB4NzYsMHgyMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWEsMHhmNSwweDgyLDB4ZTQsMHgzNH0sCisgIDE2LDB4MDhmMCwwLHsweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGZkLDB4ZWUsMHg2ZCwweDYwLDB4MTIsMHg5MCwweDc2fSwKKyAgMTYsMHgwOTAwLDAsezB4MjEsMHhlMCwweGZlLDB4ZWYsMHhjMywweDllLDB4NTAsMHgwOCwweDkwLDB4NzYsMHgyMCwweGUwLDB4MDQsMHhmMCwweDgwLDB4ZDF9LAorICAxNiwweDA5MTAsMCx7MHg5MCwweDc2LDB4MjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFhLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NX0sCisgIDE2LDB4MDkyMCwwLHsweGY1LDB4ODMsMHhlMCwweDkwLDB4NzIsMHgyOSwweGYwLDB4ZTQsMHg5MCwweDc2LDB4M2IsMHhmMCwweDkwLDB4NzYsMHgyMSwweGUwfSwKKyAgMTYsMHgwOTMwLDAsezB4ZmUsMHhlZiwweDZlLDB4NzAsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZWJ9LAorICAxNiwweDA5NDAsMCx7MHhlMCwweDE0LDB4NjAsMHgxMywweDE0LDB4NzAsMHgwMiwweDIxLDB4ZTIsMHgyNCwweDAyLDB4NjAsMHgwMiwweDgxLDB4N2YsMHg5MH0sCisgIDE2LDB4MDk1MCwwLHsweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgxNCwweDcwLDB4N2MsMHg5MCwweDdmfSwKKyAgMTYsMHgwOTYwLDAsezB4ZWEsMHhlMCwweGY0LDB4NzAsMHg0OCwweDkwLDB4NzYsMHgzNywweGUwLDB4OTAsMHg3NiwweDIwLDB4ZjAsMHg5MCwweDc2LDB4Mzl9LAorICAxNiwweDA5NzAsMCx7MHhlMCwweGZlLDB4OTAsMHg3NiwweDIwLDB4ZTAsMHhmZCwweGMzLDB4OWUsMHg1MCwweDJiLDB4OTAsMHg3NiwweDNiLDB4ZTAsMHhmZX0sCisgIDE2LDB4MDk4MCwwLHsweDA0LDB4ZjAsMHg3NCwweGMwLDB4MmUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdlLDB4ZjUsMHg4MywweGUwLDB4ZmUsMHhlZCwweDc1fSwKKyAgMTYsMHgwOTkwLDAsezB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWUsMHhmMCwweDkwLDB4NzZ9LAorICAxNiwweDA5YTAsMCx7MHgyMCwweGUwLDB4MDQsMHhmMCwweDgwLDB4YzcsMHg5MCwweDc2LDB4M2YsMHg3NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2UsMHhjMH0sCisgIDE2LDB4MDliMCwwLHsweGUwLDB4ZmUsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzfSwKKyAgMTYsMHgwOWMwLDAsezB4ZWUsMHhmMCwweGUwLDB4YjQsMHgwMSwweDA4LDB4OTAsMHg3NiwweDNlLDB4NzQsMHgwMSwweGYwLDB4ODAsMHgwNSwweGU0LDB4OTB9LAorICAxNiwweDA5ZDAsMCx7MHg3NiwweDNlLDB4ZjAsMHg5MCwweDc2LDB4M2YsMHg3NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMX0sCisgIDE2LDB4MDllMCwwLHsweGYwLDB4MjIsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4ZmUsMHg3MCwweDAyLDB4NDEsMHhhMywweDE0LDB4NzAsMHgwMiwweDYxfSwKKyAgMTYsMHgwOWYwLDAsezB4M2YsMHgxNCwweDcwLDB4MDIsMHg2MSwweGRiLDB4MjQsMHgwMywweDYwLDB4MDIsMHg4MSwweDc3LDB4OTAsMHg3ZiwweGVhLDB4ZTB9LAorICAxNiwweDBhMDAsMCx7MHhmNCwweDcwLDB4NmIsMHg5MCwweDc2LDB4MzcsMHhlMCwweDkwLDB4NzYsMHgyMCwweGYwLDB4OTAsMHg3NiwweDM5LDB4ZTAsMHhmZn0sCisgIDE2LDB4MGExMCwwLHsweDkwLDB4NzYsMHgyMCwweGUwLDB4ZmUsMHhjMywweDlmLDB4NTAsMHg0ZSwweDkwLDB4NzYsMHgzYiwweGUwLDB4ZmYsMHgwNCwweGYwfSwKKyAgMTYsMHgwYTIwLDAsezB4NzQsMHhjMCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZSwweGY1LDB4ODMsMHhlMCwweGZmLDB4ZWUsMHg3NSwweGYwLDB4MGF9LAorICAxNiwweDBhMzAsMCx7MHhhNCwweDI0LDB4YWMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDc2LDB4M2IsMHhlMH0sCisgIDE2LDB4MGE0MCwwLHsweGZmLDB4MDQsMHhmMCwweDc0LDB4YzAsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2UsMHhmNSwweDgzLDB4ZTAsMHhmZiwweGVlfSwKKyAgMTYsMHgwYTUwLDAsezB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTB9LAorICAxNiwweDBhNjAsMCx7MHg3NiwweDIwLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhhNCwweDkwLDB4NzYsMHg0MCwweDc0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZX0sCisgIDE2LDB4MGE3MCwwLHsweGMwLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgyMCwweGUwLDB4ZmUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWMsMHhmNSwweDgyfSwKKyAgMTYsMHgwYTgwLDAsezB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDdlLDB4YzEsMHhlMCwweGZmLDB4ZWUsMHg3NSwweGYwLDB4MGF9LAorICAxNiwweDBhOTAsMCx7MHhhNCwweDI0LDB4YWQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDc2LDB4NDEsMHg3NH0sCisgIDE2LDB4MGFhMCwwLHsweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZjQsMHg3MCwweDY2LDB4OTAsMHg3NiwweDM3LDB4ZTAsMHg5MCwweDc2fSwKKyAgMTYsMHgwYWIwLDAsezB4MjAsMHhmMCwweDkwLDB4NzYsMHgzOSwweGUwLDB4ZmYsMHg5MCwweDc2LDB4MjAsMHhlMCwweGZlLDB4YzMsMHg5ZiwweDQwLDB4MDJ9LAorICAxNiwweDBhYzAsMCx7MHg4MSwweDhlLDB4OTAsMHg3NiwweDNiLDB4ZTAsMHhmZiwweDA0LDB4ZjAsMHg3NCwweGMwLDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNH0sCisgIDE2LDB4MGFkMCwwLHsweDdlLDB4ZjUsMHg4MywweGUwLDB4ZmYsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZSwweGY1LDB4ODIsMHhlNCwweDM0fSwKKyAgMTYsMHgwYWUwLDAsezB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzYsMHgzYiwweGUwLDB4ZmYsMHgwNCwweGYwLDB4NzQsMHhjMCwweDJmLDB4ZjV9LAorICAxNiwweDBhZjAsMCx7MHg4MiwweGU0LDB4MzQsMHg3ZSwweGY1LDB4ODMsMHhlMCwweGZmLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWYsMHhmNX0sCisgIDE2LDB4MGIwMCwwLHsweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDc2LDB4MjAsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGEyfSwKKyAgMTYsMHgwYjEwLDAsezB4OTAsMHg3ZSwweGMwLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgyMCwweGUwLDB4ZmUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWV9LAorICAxNiwweDBiMjAsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDdlLDB4YzEsMHhlMCwweGZmLDB4ZWUsMHg3NX0sCisgIDE2LDB4MGIzMCwwLHsweGYwLDB4MGEsMHhhNCwweDI0LDB4YWYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHgyMiwweDkwfSwKKyAgMTYsMHgwYjQwLDAsezB4N2YsMHhlYSwweGUwLDB4ZjQsMHg3MCwweDY2LDB4OTAsMHg3NiwweDM3LDB4ZTAsMHg5MCwweDc2LDB4MjAsMHhmMCwweDkwLDB4NzZ9LAorICAxNiwweDBiNTAsMCx7MHgzOSwweGUwLDB4ZmYsMHg5MCwweDc2LDB4MjAsMHhlMCwweGZlLDB4YzMsMHg5ZiwweDQwLDB4MDIsMHg4MSwweDhlLDB4OTAsMHg3Nn0sCisgIDE2LDB4MGI2MCwwLHsweDNiLDB4ZTAsMHhmZiwweDA0LDB4ZjAsMHg3NCwweGMwLDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdlLDB4ZjUsMHg4MywweGUwfSwKKyAgMTYsMHgwYjcwLDAsezB4ZmYsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWZ9LAorICAxNiwweDBiODAsMCx7MHhmMCwweDkwLDB4NzYsMHgzYiwweGUwLDB4ZmYsMHgwNCwweGYwLDB4NzQsMHhjMCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZX0sCisgIDE2LDB4MGI5MCwwLHsweGY1LDB4ODMsMHhlMCwweGZmLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1fSwKKyAgMTYsMHgwYmEwLDAsezB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDc2LDB4MjAsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGEyLDB4OTAsMHg3ZSwweGMwLDB4ZTB9LAorICAxNiwweDBiYjAsMCx7MHhmZiwweDkwLDB4NzYsMHgyMCwweGUwLDB4ZmUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjAsMHhmNSwweDgyLDB4ZTQsMHgzNH0sCisgIDE2LDB4MGJjMCwwLHsweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDdlLDB4YzEsMHhlMCwweGZmLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0fSwKKyAgMTYsMHgwYmQwLDAsezB4YjEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZjR9LAorICAxNiwweDBiZTAsMCx7MHg3MCwweDY2LDB4OTAsMHg3NiwweDM3LDB4ZTAsMHg5MCwweDc2LDB4MjAsMHhmMCwweDkwLDB4NzYsMHgzOSwweGUwLDB4ZmYsMHg5MH0sCisgIDE2LDB4MGJmMCwwLHsweDc2LDB4MjAsMHhlMCwweGZlLDB4YzMsMHg5ZiwweDQwLDB4MDIsMHg4MSwweDhlLDB4OTAsMHg3NiwweDNiLDB4ZTAsMHhmZiwweDA0fSwKKyAgMTYsMHgwYzAwLDAsezB4ZjAsMHg3NCwweGMwLDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdlLDB4ZjUsMHg4MywweGUwLDB4ZmYsMHhlZSwweDc1LDB4ZjB9LAorICAxNiwweDBjMTAsMCx7MHgwYSwweGE0LDB4MjQsMHhiMiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzYsMHgzYn0sCisgIDE2LDB4MGMyMCwwLHsweGUwLDB4ZmYsMHgwNCwweGYwLDB4NzQsMHhjMCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZSwweGY1LDB4ODMsMHhlMCwweGZmfSwKKyAgMTYsMHgwYzMwLDAsezB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjB9LAorICAxNiwweDBjNDAsMCx7MHg5MCwweDc2LDB4MjAsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGEyLDB4OTAsMHg3ZSwweGMwLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgyMH0sCisgIDE2LDB4MGM1MCwwLHsweGUwLDB4ZmUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmfSwKKyAgMTYsMHgwYzYwLDAsezB4ZjAsMHg5MCwweDdlLDB4YzEsMHhlMCwweGZmLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjMsMHhmNSwweDgyLDB4ZTR9LAorICAxNiwweDBjNzAsMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MH0sCisgIDE1LDB4MGM4MCwwLHsweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMn0sCisgIDE2LDB4MGM4ZiwwLHsweDQxLDB4NzYsMHg2OCwweDAxLDB4NDEsMHg3NiwweDZhLDB4MDIsMHg0MSwweDc2LDB4NmIsMHgwYSwweGMxLDB4MjAsMHhjMSwweDIxfSwKKyAgIDIsMHgwYzlmLDAsezB4YzEsMHgyZn0sCisgICA0LDB4MGNhMSwwLHsweDQxLDB4NzYsMHgyMywweDAwfSwKKyAgMTYsMHgwY2E1LDAsezB4NDEsMHg3MiwweDAxLDB4MDEsMHg0NSwweDcyLDB4MDUsMHgwMCwweDAyLDB4YzksMHgwMCwweDAwLDB4NDUsMHg3MiwweDBhLDB4MDB9LAorICAxNiwweDBjYjUsMCx7MHgwMSwweDAyLDB4MDMsMHgwNCwweDRkLDB4NzIsMHgwZiwweGQxLDB4MDAsMHhkMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MGNjNSwwLHsweDI4LDB4MjgsMHgwOSwweDAwLDB4NGQsMHg3MiwweDFjLDB4MDEsMHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3fSwKKyAgMTYsMHgwY2Q1LDAsezB4MDgsMHgwOSwweDBhLDB4MGIsMHg0MSwweDcyLDB4MmUsMHgyMiwweDQxLDB4NzIsMHgyZiwweDIzLDB4NDEsMHg3MiwweDMwLDB4MjB9LAorICAxNiwweDBjZTUsMCx7MHg0MSwweDcyLDB4MzEsMHgyMSwweDYyLDB4ZDIsMHg3MiwweDNhLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MGNmNSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgwZDA1LDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDBkMTUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MGQyNSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgwZDM1LDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDBkNDUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MGQ1NSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgwZDY1LDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDBkNzUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMX0sCisgIDE2LDB4MGQ4NSwwLHsweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxfSwKKyAgMTYsMHgwZDk1LDAsezB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDF9LAorICAxNiwweDBkYTUsMCx7MHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMX0sCisgIDE2LDB4MGRiNSwwLHsweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyfSwKKyAgMTYsMHgwZGM1LDAsezB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDJ9LAorICAxNiwweDBkZDUsMCx7MHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMn0sCisgIDE2LDB4MGRlNSwwLHsweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyfSwKKyAgMTYsMHgwZGY1LDAsezB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDN9LAorICAxNiwweDBlMDUsMCx7MHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwM30sCisgIDE2LDB4MGUxNSwwLHsweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzfSwKKyAgMTYsMHgwZTI1LDAsezB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDN9LAorICAxNiwweDBlMzUsMCx7MHgwMywweDAzLDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNH0sCisgIDE2LDB4MGU0NSwwLHsweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0fSwKKyAgMTYsMHgwZTU1LDAsezB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDR9LAorICAxNiwweDBlNjUsMCx7MHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNH0sCisgIDE2LDB4MGU3NSwwLHsweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1fSwKKyAgMTYsMHgwZTg1LDAsezB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDV9LAorICAxNiwweDBlOTUsMCx7MHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNX0sCisgIDE2LDB4MGVhNSwwLHsweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNiwweDA2fSwKKyAgMTYsMHgwZWI1LDAsezB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDZ9LAorICAxNiwweDBlYzUsMCx7MHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNn0sCisgIDE2LDB4MGVkNSwwLHsweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2fSwKKyAgMTYsMHgwZWU1LDAsezB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA3LDB4MDcsMHgwNywweDA4LDB4MDh9LAorICAxNiwweDBlZjUsMCx7MHgwOCwweDA5LDB4MDksMHgwOSwweDBhLDB4MGEsMHgwYSwweDBiLDB4MGIsMHgwYiwweDBjLDB4MGMsMHgwYywweDBkLDB4MGQsMHgwZH0sCisgIDE2LDB4MGYwNSwwLHsweDBlLDB4MGUsMHgwZSwweDBmLDB4MGYsMHgwZiwweDEwLDB4MTAsMHgxMCwweDExLDB4MTEsMHgxMSwweDEyLDB4MTIsMHgxMiwweDEzfSwKKyAgMTYsMHgwZjE1LDAsezB4MTMsMHgxMywweDE0LDB4MTQsMHgxNCwweDE1LDB4MTUsMHgxNSwweDE2LDB4MTYsMHgxNiwweDE3LDB4MTcsMHgxNywweDE4LDB4MTh9LAorICAxNiwweDBmMjUsMCx7MHgxOCwweDE5LDB4MTksMHgxOSwweDE5LDB4MWEsMHgxYSwweDFhLDB4MWEsMHgxYiwweDFiLDB4MWIsMHgxYiwweDFjLDB4MWMsMHgxY30sCisgIDE2LDB4MGYzNSwwLHsweDFjLDB4MWQsMHgxZCwweDFkLDB4MWQsMHgxZSwweDFlLDB4MWUsMHgxZSwweDFmLDB4MWYsMHgxZiwweDFmLDB4MjAsMHgyMCwweDIwfSwKKyAgMTYsMHgwZjQ1LDAsezB4MjEsMHgyMSwweDIxLDB4MjIsMHgyMiwweDIyLDB4MjMsMHgyMywweDI0LDB4MjQsMHgyNSwweDI1LDB4MjYsMHgyNiwweDI3LDB4Mjd9LAorICAxNiwweDBmNTUsMCx7MHgyOCwweDI4LDB4MjksMHgyOSwweDJhLDB4MmEsMHgyYiwweDJiLDB4MmMsMHgyYywweDJkLDB4MmQsMHgyZSwweDJlLDB4MmYsMHgyZn0sCisgIDE2LDB4MGY2NSwwLHsweDMwLDB4MzAsMHgzMSwweDMxLDB4MzIsMHgzMiwweDMzLDB4MzMsMHgzNCwweDM0LDB4MzUsMHgzNSwweDM2LDB4MzYsMHgzNywweDM3fSwKKyAgMTYsMHgwZjc1LDAsezB4MzgsMHgzOCwweDM5LDB4MzksMHgzYSwweDNhLDB4M2IsMHgzYywweDNkLDB4M2UsMHgzZiwweDQwLDB4NDEsMHg0MiwweDQzLDB4NDR9LAorICAxNiwweDBmODUsMCx7MHg0NSwweDQ2LDB4NDcsMHg0OCwweDQ5LDB4NDksMHg0YSwweDRiLDB4NGIsMHg0YywweDRkLDB4NGUsMHg0ZiwweDUwLDB4NTEsMHg1Mn0sCisgIDE2LDB4MGY5NSwwLHsweDUzLDB4NTQsMHg1NSwweDU1LDB4NTYsMHg1NiwweDU3LDB4NTcsMHg1OCwweDVhLDB4NWIsMHg1ZCwweDVlLDB4NWYsMHg2MSwweDYyfSwKKyAgMTYsMHgwZmE1LDAsezB4NjMsMHg2NCwweDY1LDB4NjYsMHg2NywweDY4LDB4NjksMHg2YSwweDZiLDB4NmMsMHg2ZCwweDZmLDB4NzEsMHg3MiwweDczLDB4NzR9LAorICAxNiwweDBmYjUsMCx7MHg3NSwweDc2LDB4NzcsMHg3OCwweDc5LDB4N2EsMHg3YiwweDdjLDB4N2UsMHg4MCwweDAxLDB4MzcsMHgwMSwweDAxLDB4MzgsMHgwMH0sCisgICAxLDB4MGZjNSwwLHsweDAwfSwKKyAgMTYsMHgwZmM2LDAsezB4ZTQsMHhmZiwweDc0LDB4NDYsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzYsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDc0LDB4MjB9LAorICAxNiwweDBmZDYsMCx7MHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZWUsMHhmMCwweDc0LDB4NGUsMHgyZiwweGY1LDB4ODIsMHhlNH0sCisgIDE2LDB4MGZlNiwwLHsweDM0LDB4NzYsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDc0LDB4MzAsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzfSwKKyAgIDYsMHgwZmY2LDAsezB4ZWUsMHhmMCwweDBmLDB4YmYsMHgwOCwweGNjfSwKKyAgIDEsMHgwZmZjLDAsezB4MjJ9LAorICAgMywweDBmZmQsMCx7MHhjMiwweDg5LDB4MzJ9LAorICAxNiwweDEwMDAsMCx7MHhlNCwweDkwLDB4NzYsMHgyYywweGYwLDB4OTAsMHg3NiwweDJjLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZn0sCisgIDE2LDB4MTAxMCwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4N2YsMHhlZCwweGUwLDB4ZmQsMHhlZSwweDZkfSwKKyAgMTYsMHgxMDIwLDAsezB4NjAsMHgwZSwweGVmLDB4YzMsMHg5NCwweDBiLDB4NTAsMHgwOCwweDkwLDB4NzYsMHgyYywweGUwLDB4MDQsMHhmMCwweDgwLDB4ZDV9LAorICAxNiwweDEwMzAsMCx7MHhlZiwweGI0LDB4MGIsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHhlZiwweDc1LDB4ZjAsMHgwM30sCisgIDE2LDB4MTA0MCwwLHsweGE0LDB4MjQsMHgwZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDc2LDB4MmUsMHhmMCwweDI0fSwKKyAgMTYsMHgxMDUwLDAsezB4ZjAsMHg2MCwweDBhLDB4MjQsMHgwZiwweDYwLDB4MDIsMHg4MSwweDdkLDB4MTIsMHg0YiwweGE0LDB4MjIsMHg5MCwweDdmLDB4ZWR9LAorICAxNiwweDEwNjAsMCx7MHhlMCwweDY0LDB4MDUsMHg3MCwweDUxLDB4OTAsMHg3NiwweDE4LDB4NzQsMHgwNSwweGYwLDB4OTAsMHg3NiwweDM4LDB4NzQsMHgwMX0sCisgIDE2LDB4MTA3MCwwLHsweGYwLDB4OTAsMHg3NiwweDNhLDB4NzQsMHgwMywweGYwLDB4OTAsMHg3NiwweDFjLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHgxYiwweGYwfSwKKyAgMTYsMHgxMDgwLDAsezB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmNCwweDYwLDB4MmYsMHg5MCwweDc2LDB4MWIsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTR9LAorICAxNiwweDEwOTAsMCx7MHgyNCwweGFhLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmZH0sCisgIDE2LDB4MTBhMCwwLHsweGVlLDB4NmQsMHg2MCwweDEyLDB4OTAsMHg3NiwweDFjLDB4ZTAsMHhmZSwweGVmLDB4YzMsMHg5ZSwweDUwLDB4MDgsMHg5MCwweDc2fSwKKyAgMTYsMHgxMGIwLDAsezB4MWIsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGQxLDB4OTAsMHg3ZiwweGVkLDB4ZTAsMHg2NCwweDA2LDB4NzAsMHg1MiwweDkwLDB4NzZ9LAorICAxNiwweDEwYzAsMCx7MHgxOCwweDc0LDB4MDYsMHhmMCwweDkwLDB4NzYsMHgzOCwweDc0LDB4MDQsMHhmMCwweDkwLDB4NzYsMHgzYSwweDc0LDB4MGEsMHhmMH0sCisgIDE2LDB4MTBkMCwwLHsweDkwLDB4NzYsMHgxYywweGYwLDB4OTAsMHg3NiwweDFiLDB4NzQsMHgwMywweGYwLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmNCwweDYwfSwKKyAgMTYsMHgxMGUwLDAsezB4MmYsMHg5MCwweDc2LDB4MWIsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFhLDB4ZjUsMHg4MiwweGU0LDB4MzR9LAorICAxNiwweDEwZjAsMCx7MHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmZCwweGVlLDB4NmQsMHg2MCwweDEyLDB4OTAsMHg3Nn0sCisgIDE2LDB4MTEwMCwwLHsweDFjLDB4ZTAsMHhmZSwweGVmLDB4YzMsMHg5ZSwweDUwLDB4MDgsMHg5MCwweDc2LDB4MWIsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGQxfSwKKyAgMTYsMHgxMTEwLDAsezB4ZTQsMHg5MCwweDc2LDB4MWUsMHhmMCwweDkwLDB4NzYsMHgxYywweGUwLDB4ZmYsMHg5MCwweDc2LDB4MWIsMHhlMCwweGZlLDB4NmZ9LAorICAxNiwweDExMjAsMCx7MHg3MCwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlYiwweGUwLDB4MTQsMHg2MH0sCisgIDE2LDB4MTEzMCwwLHsweDEzLDB4MTQsMHg3MCwweDAyLDB4MjEsMHhiZiwweDI0LDB4MDIsMHg2MCwweDAyLDB4ODEsMHg3NSwweDkwLDB4N2YsMHhiNCwweGUwfSwKKyAgMTYsMHgxMTQwLDAsezB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4N2YsMHg3MCwweDZiLDB4OTAsMHg3ZiwweGVhLDB4ZTB9LAorICAxNiwweDExNTAsMCx7MHhmNCwweDcwLDB4NGEsMHg5MCwweDc2LDB4MzgsMHhlMCwweDkwLDB4NzYsMHgxYiwweGYwLDB4OTAsMHg3NiwweDNhLDB4ZTAsMHhmZn0sCisgIDE2LDB4MTE2MCwwLHsweDkwLDB4NzYsMHgxYiwweGUwLDB4ZmQsMHhjMywweDlmLDB4NTAsMHgyYiwweGVkLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFifSwKKyAgMTYsMHgxMTcwLDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZmLDB4OTAsMHg3NiwweDFlLDB4ZTAsMHhmZCwweDA0LDB4ZjB9LAorICAxNiwweDExODAsMCx7MHg3NCwweDAwLDB4MmQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDc2LDB4MWIsMHhlMH0sCisgIDE2LDB4MTE5MCwwLHsweDA0LDB4ZjAsMHg4MCwweGM3LDB4OTAsMHg3NiwweDFlLDB4ZTAsMHg5MCwweDdmLDB4YjUsMHhmMCwweDIyLDB4ZWUsMHg3NSwweGYwfSwKKyAgMTYsMHgxMWEwLDAsezB4MGEsMHhhNCwweDI0LDB4YWIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3ZiwweDAwLDB4ZjB9LAorICAxNiwweDExYjAsMCx7MHg5MCwweDdmLDB4YjUsMHg3NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MH0sCisgIDE2LDB4MTFjMCwwLHsweDdmLDB4ZTksMHhlMCwweDI0LDB4N2UsMHg3MCwweDAyLDB4NDEsMHg3ZSwweDE0LDB4NzAsMHgwMiwweDYxLDB4MjMsMHgxNCwweDcwfSwKKyAgMTYsMHgxMWQwLDAsezB4MDIsMHg2MSwweGM4LDB4MjQsMHgwMywweDYwLDB4MDIsMHg4MSwweDZkLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmNCwweDcwLDB4NmR9LAorICAxNiwweDExZTAsMCx7MHg5MCwweDc2LDB4MzgsMHhlMCwweDkwLDB4NzYsMHgxYiwweGYwLDB4OTAsMHg3NiwweDNhLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgxYn0sCisgIDE2LDB4MTFmMCwwLHsweGUwLDB4YzMsMHg5ZiwweDUwLDB4NGYsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFjLDB4ZjUsMHg4MiwweGU0fSwKKyAgMTYsMHgxMjAwLDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3NiwweDFlLDB4ZTAsMHhmZCwweDA0LDB4ZjAsMHg3NCwweDAwLDB4MmR9LAorICAxNiwweDEyMTAsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGVlLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZH0sCisgIDE2LDB4MTIyMCwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgxZSwweGUwLDB4ZmUsMHgwNCwweGYwfSwKKyAgMTYsMHgxMjMwLDAsezB4NzQsMHgwMCwweDJlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3NiwweDFiLDB4ZTB9LAorICAxNiwweDEyNDAsMCx7MHgwNCwweGYwLDB4ODAsMHhhNCwweDkwLDB4NzYsMHgxZSwweGUwLDB4OTAsMHg3ZiwweGI1LDB4ZjAsMHgyMiwweDkwLDB4NzYsMHgxYn0sCisgIDE2LDB4MTI1MCwwLHsweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwfSwKKyAgMTYsMHgxMjYwLDAsezB4OTAsMHg3ZiwweDAwLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzV9LAorICAxNiwweDEyNzAsMCx7MHhmNSwweDgzLDB4ZTAsMHg5MCwweDdmLDB4MDEsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDIsMHhmMCwweDIyLDB4OTAsMHg3Zn0sCisgIDE2LDB4MTI4MCwwLHsweGVhLDB4ZTAsMHhmNCwweDcwLDB4NmQsMHg5MCwweDc2LDB4MzgsMHhlMCwweDkwLDB4NzYsMHgxYiwweGYwLDB4OTAsMHg3NiwweDNhfSwKKyAgMTYsMHgxMjkwLDAsezB4ZTAsMHhmZiwweDkwLDB4NzYsMHgxYiwweGUwLDB4YzMsMHg5ZiwweDUwLDB4NGYsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTR9LAorICAxNiwweDEyYTAsMCx7MHgyNCwweGFlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3NiwweDFlLDB4ZTAsMHhmZH0sCisgIDE2LDB4MTJiMCwwLHsweDA0LDB4ZjAsMHg3NCwweDAwLDB4MmQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGVlLDB4ZjAsMHhlZiwweDc1fSwKKyAgMTYsMHgxMmMwLDAsezB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZiwweDkwLDB4NzZ9LAorICAxNiwweDEyZDAsMCx7MHgxZSwweGUwLDB4ZmUsMHgwNCwweGYwLDB4NzQsMHgwMCwweDJlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZn0sCisgIDE2LDB4MTJlMCwwLHsweGYwLDB4OTAsMHg3NiwweDFiLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhhNCwweDkwLDB4NzYsMHgxZSwweGUwLDB4OTAsMHg3ZiwweGI1fSwKKyAgMTYsMHgxMmYwLDAsezB4ZjAsMHgyMiwweDkwLDB4NzYsMHgxYiwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWUsMHhmNSwweDgyLDB4ZTR9LAorICAxNiwweDEzMDAsMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZn0sCisgIDE2LDB4MTMxMCwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDdmLDB4MDEsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0fSwKKyAgMTYsMHgxMzIwLDAsezB4MDIsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmNCwweDcwLDB4NmQsMHg5MCwweDc2LDB4MzgsMHhlMCwweDkwLDB4NzZ9LAorICAxNiwweDEzMzAsMCx7MHgxYiwweGYwLDB4OTAsMHg3NiwweDNhLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgxYiwweGUwLDB4YzMsMHg5ZiwweDUwLDB4NGYsMHhlMH0sCisgIDE2LDB4MTM0MCwwLHsweGZmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlfSwKKyAgMTYsMHgxMzUwLDAsezB4OTAsMHg3NiwweDFlLDB4ZTAsMHhmZCwweDA0LDB4ZjAsMHg3NCwweDAwLDB4MmQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjV9LAorICAxNiwweDEzNjAsMCx7MHg4MywweGVlLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNX0sCisgIDE2LDB4MTM3MCwwLHsweDgzLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgxZSwweGUwLDB4ZmUsMHgwNCwweGYwLDB4NzQsMHgwMCwweDJlLDB4ZjUsMHg4MiwweGU0fSwKKyAgMTYsMHgxMzgwLDAsezB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3NiwweDFiLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhhNCwweDkwLDB4NzZ9LAorICAxNiwweDEzOTAsMCx7MHgxZSwweGUwLDB4OTAsMHg3ZiwweGI1LDB4ZjAsMHgyMiwweDkwLDB4NzYsMHgxYiwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNH0sCisgIDE2LDB4MTNhMCwwLHsweDI0LDB4YjAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHhlZiwweDc1fSwKKyAgMTYsMHgxM2IwLDAsezB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDdmLDB4MDF9LAorICAxNiwweDEzYzAsMCx7MHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDIsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmNCwweDcwLDB4NmQsMHg5MH0sCisgIDE2LDB4MTNkMCwwLHsweDc2LDB4MzgsMHhlMCwweDkwLDB4NzYsMHgxYiwweGYwLDB4OTAsMHg3NiwweDNhLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgxYiwweGUwfSwKKyAgMTYsMHgxM2UwLDAsezB4YzMsMHg5ZiwweDUwLDB4NGYsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIyLDB4ZjUsMHg4MiwweGU0LDB4MzR9LAorICAxNiwweDEzZjAsMCx7MHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3NiwweDFlLDB4ZTAsMHhmZCwweDA0LDB4ZjAsMHg3NCwweDAwLDB4MmQsMHhmNX0sCisgIDE2LDB4MTQwMCwwLHsweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGVlLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMywweGY1fSwKKyAgMTYsMHgxNDEwLDAsezB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgxZSwweGUwLDB4ZmUsMHgwNCwweGYwLDB4NzR9LAorICAxNiwweDE0MjAsMCx7MHgwMCwweDJlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3NiwweDFiLDB4ZTAsMHgwNH0sCisgIDE2LDB4MTQzMCwwLHsweGYwLDB4ODAsMHhhNCwweDkwLDB4NzYsMHgxZSwweGUwLDB4OTAsMHg3ZiwweGI1LDB4ZjAsMHgyMiwweDkwLDB4NzYsMHgxYiwweGUwfSwKKyAgMTYsMHgxNDQwLDAsezB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTB9LAorICAxNiwweDE0NTAsMCx7MHg3ZiwweDAwLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNX0sCisgIDE2LDB4MTQ2MCwwLHsweDgzLDB4ZTAsMHg5MCwweDdmLDB4MDEsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDIsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0fSwKKyAgMTYsMHgxNDcwLDAsezB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjR9LAorICAgNSwweDE0ODAsMCx7MHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyfSwKKyAgMTYsMHgxNDg1LDAsezB4NzQsMHgwMCwweGY1LDB4ODYsMHg5MCwweGZkLDB4YTUsMHg3YywweDA1LDB4YTMsMHhlNSwweDgyLDB4NDUsMHg4MywweDcwLDB4Zjl9LAorICAgMSwweDE0OTUsMCx7MHgyMn0sCisgIDE2LDB4MTQ5NiwwLHsweDkwLDB4N2YsMHhkNiwweGUwLDB4NDQsMHg4MCwweGYwLDB4NDMsMHg4NywweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIyfSwKKyAgMTYsMHgxNGE2LDAsezB4YzAsMHhkMCwweGMwLDB4ZTAsMHg4ZiwweGUwLDB4YzAsMHhlMCwweDhlLDB4ZTAsMHhjMCwweGUwLDB4OGQsMHhlMCwweGMwLDB4ZTB9LAorICAxNiwweDE0YjYsMCx7MHg4YywweGUwLDB4YzAsMHhlMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4MDUsMHg4NiwweGMwLDB4ODQsMHhjMCwweDg1LDB4N2QsMHgwMH0sCisgIDE2LDB4MTRjNiwwLHsweDkwLDB4N2YsMHhlMywweDc0LDB4N2IsMHhmMCwweGEzLDB4NzQsMHg4MCwweGYwLDB4N2MsMHgxMSwweDkwLDB4N2YsMHg5OSwweGUwfSwKKyAgMTYsMHgxNGQ2LDAsezB4NTQsMHg0MCwweGRjLDB4MDMsMHgwMiwweDE0LDB4ZjMsMHhiNCwweDAwLDB4MTMsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDQwLDB4ZjB9LAorICAxNiwweDE0ZTYsMCx7MHg5MCwweDdmLDB4ZTUsMHhmMCwweDkwLDB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMCwweDAyLDB4MTQsMHhkMiwweDkwLDB4NzYsMHg5MH0sCisgIDE2LDB4MTRmNiwwLHsweGUwLDB4YjQsMHgwMSwweDEyLDB4OTAsMHg3NiwweDhmLDB4ZTAsMHgyZCwweGZkLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg4MCwweGYwfSwKKyAgMTYsMHgxNTA2LDAsezB4OTAsMHg3ZiwweDZjLDB4MDIsMHgxNSwweDU3LDB4YjQsMHgwMiwweDEyLDB4OTAsMHg3NiwweDhmLDB4ZTAsMHgyZCwweGZkLDB4OTB9LAorICAxNiwweDE1MTYsMCx7MHg3ZiwweGUyLDB4NzQsMHg4MCwweGYwLDB4OTAsMHg3ZiwweDZjLDB4MDIsMHgxNSwweDk2LDB4YjQsMHgwMywweDEyLDB4OTAsMHg3Nn0sCisgIDE2LDB4MTUyNiwwLHsweDhmLDB4ZTAsMHgyZCwweGZkLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg4MCwweGYwLDB4OTAsMHg3ZiwweDZjLDB4MDIsMHgxNSwweGUxfSwKKyAgMTYsMHgxNTM2LDAsezB4YjQsMHgwNCwweDEyLDB4OTAsMHg3NiwweDhmLDB4ZTAsMHgyZCwweGZkLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg4MCwweGYwLDB4OTB9LAorICAxNiwweDE1NDYsMCx7MHg3ZiwweDZjLDB4MDIsMHgxNiwweDEwLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg4MCwweGYwLDB4OTAsMHg3ZiwweDZjLDB4MDIsMHgxNn0sCisgIDE2LDB4MTU1NiwwLHsweDQwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZGQsMHhmMiwweDdkfSwKKyAgMTYsMHgxNTY2LDAsezB4MDIsMHgwNSwweDg2LDB4OTAsMHg3ZiwweGUyLDB4NzQsMHgwMCwweGYwLDB4OTAsMHg3ZiwweDliLDB4ZTAsMHg1NCwweDA0LDB4YjR9LAorICAxNiwweDE1NzYsMCx7MHgwMCwweDA1LDB4MDUsMHg4NiwweDAyLDB4MTYsMHg0MCwweDkwLDB4N2YsMHhlMiwweDc0LDB4ODAsMHhmMCwweDA1LDB4ODYsMHhmMH0sCisgIDE2LDB4MTU4NiwwLHsweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhkZCwweGQ0LDB4MDIsMHgxNiwweDQwfSwKKyAgMTYsMHgxNTk2LDAsezB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjB9LAorICAxNiwweDE1YTYsMCx7MHhmMCwweGYwLDB4ZGQsMHhlYywweDdkLDB4MDIsMHgwNSwweDg2LDB4OTAsMHg3ZiwweGUyLDB4NzQsMHgwMCwweGYwLDB4OTAsMHg3Zn0sCisgIDE2LDB4MTViNiwwLHsweDliLDB4ZTAsMHg1NCwweDA0LDB4YjQsMHgwMCwweDA1LDB4MDUsMHg4NiwweDAyLDB4MTYsMHg0MCwweDkwLDB4N2YsMHhlMiwweDc0fSwKKyAgMTYsMHgxNWM2LDAsezB4ODAsMHhmMCwweDA1LDB4ODYsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjB9LAorICAgNiwweDE1ZDYsMCx7MHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjB9LAorICAxNiwweDE1ZGMsMCx7MHhkZCwweGNlLDB4MDIsMHgxNiwweDQwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhkZCwweGZhLDB4N2QsMHgwMiwweDA1LDB4ODYsMHg5MH0sCisgIDE2LDB4MTVlYywwLHsweDdmLDB4ZTIsMHg3NCwweDAwLDB4ZjAsMHg5MCwweDdmLDB4OWIsMHhlMCwweDU0LDB4MDQsMHhiNCwweDAwLDB4MDUsMHgwNSwweDg2fSwKKyAgMTYsMHgxNWZjLDAsezB4MDIsMHgxNiwweDQwLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg4MCwweGYwLDB4MDUsMHg4NiwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZGR9LAorICAxNiwweDE2MGMsMCx7MHhkYywweDAyLDB4MTYsMHg0MCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGRkLDB4ZjgsMHg3ZCwweDAyLDB4MDUsMHg4Nn0sCisgIDE2LDB4MTYxYywwLHsweDkwLDB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMCwweDkwLDB4N2YsMHg5YiwweGUwLDB4NTQsMHgwNCwweGI0LDB4MDAsMHgwNSwweDA1fSwKKyAgMTYsMHgxNjJjLDAsezB4ODYsMHgwMiwweDE2LDB4NDAsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDgwLDB4ZjAsMHgwNSwweDg2LDB4ZjAsMHhmMCwweGYwLDB4ZjB9LAorICAxNiwweDE2M2MsMCx7MHhmMCwweGYwLDB4ZGQsMHhkYSwweDkwLDB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMCwweGQwLDB4ODUsMHhkMCwweDg0LDB4MDUsMHg4Nn0sCisgIDE2LDB4MTY0YywwLHsweGQwLDB4ODMsMHhkMCwweDgyLDB4ZDAsMHhlMCwweGZjLDB4ZDAsMHhlMCwweGZkLDB4ZDAsMHhlMCwweGZlLDB4ZDAsMHhlMCwweGZmfSwKKyAgIDUsMHgxNjVjLDAsezB4ZDAsMHhlMCwweGQwLDB4ZDAsMHgyMn0sCisgIDE2LDB4MTY2MSwwLHsweGMwLDB4ZDAsMHhjMCwweGUwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHg5MCwweDc2LDB4N2MsMHhlMCwweDkwLDB4N2YsMHg2ZiwweGYwfSwKKyAgMTYsMHgxNjcxLDAsezB4OTAsMHg3NiwweDdkLDB4ZTAsMHg5MCwweDdmLDB4NmYsMHhmMCwweDkwLDB4NzYsMHg3ZSwweGUwLDB4OTAsMHg3ZiwweDZmLDB4ZjB9LAorICAgOSwweDE2ODEsMCx7MHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZTAsMHhkMCwweGQwLDB4MjJ9LAorICAxNiwweDE2OGEsMCx7MHhjMCwweGQwLDB4YzAsMHhlMCwweDhmLDB4ZTAsMHhjMCwweGUwLDB4OGUsMHhlMCwweGMwLDB4ZTAsMHhjMCwweDgyLDB4YzAsMHg4M30sCisgIDE2LDB4MTY5YSwwLHsweDA1LDB4ODYsMHhjMCwweDg0LDB4YzAsMHg4NSwweDkwLDB4NzYsMHg4NywweGUwLDB4ZmYsMHhiZiwweDAwLDB4MDMsMHgwMiwweDE3fSwKKyAgMTYsMHgxNmFhLDAsezB4MDEsMHg5MCwweDdmLDB4OTYsMHhlMCwweDQ0LDB4ODAsMHhmMCwweDkwLDB4N2YsMHhlMiwweDc0LDB4ODAsMHhmMCwweDkwLDB4N2Z9LAorICAxNiwweDE2YmEsMCx7MHg2MiwweGUwLDB4MDUsMHg4NiwweDkwLDB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMCwweDkwLDB4N2YsMHg5NiwweGUwLDB4NTQsMHg3Zn0sCisgIDE2LDB4MTZjYSwwLHsweGYwLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg4MCwweGYwLDB4OTAsMHg3NiwweDhlLDB4ZTAsMHhiNCwweDAxLDB4MDUsMHgwNSwweDg2fSwKKyAgMTYsMHgxNmRhLDAsezB4MDIsMHgxNiwweGY2LDB4YjQsMHgwMiwweDA1LDB4MDUsMHg4NiwweDAyLDB4MTYsMHhlYiwweDA1LDB4ODYsMHgwMiwweDE2LDB4ZmJ9LAorICAxNiwweDE2ZWEsMCx7MHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhkZiwweGY4LDB4MDIsMHgxNiwweGZiLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhkZn0sCisgIDE2LDB4MTZmYSwwLHsweGZhLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHgwMCwweGYwLDB4ZDAsMHg4NSwweGQwLDB4ODQsMHgwNSwweDg2LDB4ZDAsMHg4MywweGQwfSwKKyAgMTIsMHgxNzBhLDAsezB4ODIsMHhkMCwweGUwLDB4ZmUsMHhkMCwweGUwLDB4ZmYsMHhkMCwweGUwLDB4ZDAsMHhkMCwweDIyfSwKKyAgMTYsMHgxNzE2LDAsezB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwweGUwLDB4ZTgsMHhjMCwweGUwLDB4NzgsMHhkMSwweGU4LDB4MTQsMHhmOCwweDcwLDB4ZmJ9LAorICAxMCwweDE3MjYsMCx7MHhkMCwweGUwLDB4ZjgsMHhkMCwweGUwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHgyMn0sCisgIDE2LDB4MTczMCwwLHsweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHhlMCwweGU4LDB4YzAsMHhlMCwweDc4LDB4NzgsMHhlOCwweDE0LDB4ZjgsMHg3MCwweGZifSwKKyAgMTAsMHgxNzQwLDAsezB4ZDAsMHhlMCwweGY4LDB4ZDAsMHhlMCwweGQwLDB4ODMsMHhkMCwweDgyLDB4MjJ9LAorICAgNywweDE3NGEsMCx7MHg5MCwweDdmLDB4YzUsMHg3NCwweDAyLDB4ZjAsMHgyMn0sCisgIDE2LDB4MTc1MSwwLHsweDkwLDB4N2UsMHhjMCwweGUwLDB4OTAsMHg3NiwweDQ1LDB4ZjAsMHg5MCwweDdlLDB4YzEsMHhlMCwweDkwLDB4NzYsMHg0NCwweGYwfSwKKyAgMTYsMHgxNzYxLDAsezB4OTAsMHg3ZSwweGMyLDB4ZTAsMHg5MCwweDc2LDB4NDMsMHhmMCwweGI0LDB4MDAsMHgwMywweDAyLDB4MTcsMHg3OCwweDkwLDB4NzZ9LAorICAxNiwweDE3NzEsMCx7MHgxOSwweDc0LDB4MDMsMHhmMCwweDAyLDB4MTcsMHg4ZSwweDkwLDB4NzYsMHg0NCwweGUwLDB4YjQsMHhiYiwweDA5LDB4OTAsMHg3Nn0sCisgIDE2LDB4MTc4MSwwLHsweDE5LDB4NzQsMHgwMiwweGYwLDB4MDIsMHgxNywweDhlLDB4OTAsMHg3NiwweDE5LDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDQyfSwKKyAgIDMsMHgxNzkxLDAsezB4ZTQsMHhmMCwweDIyfSwKKyAgIDQsMHgxNzk0LDAsezB4OGQsMHgyOSwweDhiLDB4MmF9LAorICAxNiwweDE3OTgsMCx7MHgxMiwweDRhLDB4NTUsMHhlYSwweDQ5LDB4NjAsMHg1NywweDEyLDB4MzYsMHg5MiwweDdlLDB4MDAsMHgyOSwweGZmLDB4ZWUsMHgzYX0sCisgIDE2LDB4MTdhOCwwLHsweGM5LDB4ZWYsMHhjOSwweDc1LDB4MmIsMHhmZiwweGY1LDB4MmMsMHg4OSwweDJkLDB4YWIsMHgyYiwweGFhLDB4MmMsMHhhOSwweDJkfSwKKyAgMTYsMHgxN2I4LDAsezB4OTAsMHgwMCwweDAxLDB4MTIsMHgzNiwweGFiLDB4ZmYsMHg2NCwweDA0LDB4NjAsMHgwNSwweGVmLDB4NjQsMHgwNSwweDcwLDB4MmV9LAorICAxNiwweDE3YzgsMCx7MHhlZiwweGI0LDB4MDQsMHgxNSwweDkwLDB4MDAsMHgwMiwweDEyLDB4MzYsMHhhYiwweDY1LDB4MjksMHg3MCwweDBiLDB4OTAsMHgwMH0sCisgIDE2LDB4MTdkOCwwLHsweDAzLDB4MTIsMHgzNiwweGFiLDB4NjUsMHgyYSwweDcwLDB4MDEsMHgyMiwweDEyLDB4MzYsMHg5MiwweDdlLDB4MDAsMHgyOSwweGZmfSwKKyAgMTYsMHgxN2U4LDAsezB4ZWUsMHgzYSwweGM5LDB4ZWYsMHhjOSwweDc1LDB4MmIsMHhmZiwweGY1LDB4MmMsMHg4OSwweDJkLDB4ODAsMHhiYywweDdiLDB4MDB9LAorICAgNCwweDE3ZjgsMCx7MHg3YSwweDAwLDB4NzksMHgwMH0sCisgICAxLDB4MTdmYywwLHsweDIyfSwKKyAgIDMsMHgxN2ZkLDAsezB4YzIsMHg4YiwweDMyfSwKKyAgMTYsMHgxODAwLDAsezB4OTAsMHg3NiwweDkwLDB4ZTAsMHgxNCwweDYwLDB4MzcsMHgxNCwweDcwLDB4MDIsMHgwMSwweGQ4LDB4MTQsMHg3MCwweDAyLDB4MjF9LAorICAxNiwweDE4MTAsMCx7MHg3MiwweDE0LDB4NzAsMHgwMiwweDQxLDB4M2IsMHgyNCwweDA0LDB4NjAsMHgwMiwweDYxLDB4MDMsMHg5MCwweDdmLDB4ZmMsMHg3NH0sCisgIDE2LDB4MTgyMCwwLHsweGNjLDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OTUsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDU0fSwKKyAgMTYsMHgxODMwLDAsezB4MDUsMHhmMCwweDkwLDB4ODAsMHgwMSwweGYwLDB4ZTQsMHg5MCwweDc2LDB4MWEsMHhmMCwweGMyLDB4MmUsMHgyMiwweDkwLDB4NzZ9LAorICAxNiwweDE4NDAsMCx7MHg5NSwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDQsMHgwMiwweGYwLDB4MzAsMHgzZSwweDA2LDB4ZTAsMHg0NCwweDA0LDB4ZjAsMHg4MH0sCisgIDE2LDB4MTg1MCwwLHsweDA3LDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg1NCwweGZiLDB4ZjAsMHg5MCwweDc2LDB4MWEsMHhlMCwweGI0LDB4MDEsMHgwOCwweDkwfSwKKyAgMTYsMHgxODYwLDAsezB4NzYsMHg5NSwweGUwLDB4OTAsMHg4MCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4MTksMHhlMCwweGZmLDB4YjQsMHgwMSwweDIyLDB4OTB9LAorICAxNiwweDE4NzAsMCx7MHg3ZiwweGZjLDB4NzQsMHg3NCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDhmLDB4NzQsMHgyYn0sCisgIDE2LDB4MTg4MCwwLHsweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg4MSwweGYwLDB4OTAsMHg3NiwweDgwfSwKKyAgMTYsMHgxODkwLDAsezB4ZjAsMHhlZiwweGI0LDB4MDIsMHgyMiwweDkwLDB4N2YsMHhmYywweDc0LDB4NjgsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmN9LAorICAxNiwweDE4YTAsMCx7MHhmMCwweDkwLDB4NzYsMHg4ZiwweDc0LDB4MmYsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NDQsMHgwMiwweGYwLDB4ZTQsMHg5MH0sCisgIDE2LDB4MThiMCwwLHsweDc2LDB4ODEsMHhmMCwweDkwLDB4NzYsMHg4MCwweGYwLDB4MzAsMHgzZiwweDA5LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZlfSwKKyAgMTYsMHgxOGMwLDAsezB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmJ9LAorICAxNiwweDE4ZDAsMCx7MHhmMCwweDkwLDB4ODAsMHgwMiwweGYwLDB4ZDIsMHgyZSwweDIyLDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg0NH0sCisgIDE2LDB4MThlMCwwLHsweDAyLDB4ZjAsMHgzMCwweDNlLDB4MDYsMHhlMCwweDQ0LDB4MDQsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc2LDB4OTUsMHhlMCwweDU0fSwKKyAgMTYsMHgxOGYwLDAsezB4ZmIsMHhmMCwweDkwLDB4NzYsMHgxYSwweGUwLDB4YjQsMHgwMSwweDA4LDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg5MCwweDgwLDB4MDF9LAorICAxNiwweDE5MDAsMCx7MHhmMCwweDkwLDB4NzYsMHgxOSwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MjIsMHg5MCwweDdmLDB4ZmMsMHg3NCwweDMwLDB4ZjAsMHg5MH0sCisgIDE2LDB4MTkxMCwwLHsweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OGYsMHg3NCwweDJiLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0fSwKKyAgMTYsMHgxOTIwLDAsezB4ZmQsMHhmMCwweGU0LDB4OTAsMHg3NiwweDgxLDB4ZjAsMHg5MCwweDc2LDB4ODAsMHhmMCwweGVmLDB4YjQsMHgwMiwweDIyLDB4OTB9LAorICAxNiwweDE5MzAsMCx7MHg3ZiwweGZjLDB4NzQsMHgxYywweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDhmLDB4NzQsMHgyZn0sCisgIDE2LDB4MTk0MCwwLHsweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg0NCwweDAyLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg4MSwweGYwLDB4OTAsMHg3NiwweDgwfSwKKyAgMTYsMHgxOTUwLDAsezB4ZjAsMHgzMCwweDNmLDB4MDksMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc2LDB4OTd9LAorICAxNiwweDE5NjAsMCx7MHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmYiwweGYwLDB4OTAsMHg4MCwweDAyLDB4ZjAsMHhkMn0sCisgIDE2LDB4MTk3MCwwLHsweDJlLDB4MjIsMHg5MCwweDc2LDB4OTUsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQ0LDB4MDIsMHhmMCwweDQ0LDB4MDgsMHhmMCwweDMwfSwKKyAgMTYsMHgxOTgwLDAsezB4M2UsMHgwNiwweGUwLDB4NDQsMHgwNCwweGYwLDB4ODAsMHgwNywweDkwLDB4NzYsMHg5NSwweGUwLDB4NTQsMHhmYiwweGYwLDB4OTB9LAorICAxNiwweDE5OTAsMCx7MHg3NiwweDFhLDB4ZTAsMHhiNCwweDAxLDB4MDgsMHg5MCwweDc2LDB4OTUsMHhlMCwweDkwLDB4ODAsMHgwMSwweGYwLDB4OTAsMHg3Nn0sCisgIDE2LDB4MTlhMCwwLHsweDE5LDB4ZTAsMHhmZiwweGI0LDB4MDEsMHgyNSwweDkwLDB4N2YsMHhmYywweDc0LDB4Y2MsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0fSwKKyAgMTYsMHgxOWIwLDAsezB4ZmMsMHhmMCwweDkwLDB4NzYsMHg4ZiwweDc0LDB4MmIsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZCwweGYwLDB4NTR9LAorICAxNiwweDE5YzAsMCx7MHhmYiwweGYwLDB4ZTQsMHg5MCwweDc2LDB4ODEsMHhmMCwweDkwLDB4NzYsMHg4MCwweGYwLDB4ZWYsMHhiNCwweDAyLDB4MjUsMHg5MH0sCisgIDE2LDB4MTlkMCwwLHsweDdmLDB4ZmMsMHg3NCwweGM4LDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OGYsMHg3NCwweDJmfSwKKyAgMTYsMHgxOWUwLDAsezB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDQ0LDB4MDIsMHhmMCwweDU0LDB4ZmIsMHhmMCwweGU0LDB4OTAsMHg3NiwweDgxLDB4ZjB9LAorICAxNiwweDE5ZjAsMCx7MHg5MCwweDc2LDB4ODAsMHhmMCwweGVmLDB4YjQsMHgwMywweDI1LDB4OTAsMHg3ZiwweGZjLDB4NzQsMHg5OCwweGYwLDB4OTAsMHg3Zn0sCisgIDE2LDB4MWEwMCwwLHsweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDhmLDB4NzQsMHg1ZiwweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZkfSwKKyAgMTYsMHgxYTEwLDAsezB4ZjAsMHg0NCwweDA0LDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg4MSwweGYwLDB4OTAsMHg3NiwweDgwLDB4ZjAsMHgzMCwweDNmLDB4MDl9LAorICAxNiwweDFhMjAsMCx7MHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc2LDB4OTcsMHhlMCwweDQ0LDB4MDEsMHhmMH0sCisgIDE2LDB4MWEzMCwwLHsweDkwLDB4NzYsMHg5NywweGUwLDB4OTAsMHg4MCwweDAyLDB4ZjAsMHhkMiwweDJlLDB4MjIsMHg5MCwweDc2LDB4OTUsMHhlMCwweDU0fSwKKyAgMTYsMHgxYTQwLDAsezB4ZmUsMHhmMCwweDQ0LDB4MDIsMHhmMCwweDQ0LDB4MDgsMHhmMCwweDMwLDB4M2UsMHgwNiwweGUwLDB4NDQsMHgwNCwweGYwLDB4ODB9LAorICAxNiwweDFhNTAsMCx7MHgwNywweDkwLDB4NzYsMHg5NSwweGUwLDB4NTQsMHhmYiwweGYwLDB4OTAsMHg3NiwweDFhLDB4ZTAsMHhiNCwweDAxLDB4MDgsMHg5MH0sCisgIDE2LDB4MWE2MCwwLHsweDc2LDB4OTUsMHhlMCwweDkwLDB4ODAsMHgwMSwweGYwLDB4OTAsMHg3NiwweDE5LDB4ZTAsMHhmZiwweGI0LDB4MDEsMHgyNSwweDkwfSwKKyAgMTYsMHgxYTcwLDAsezB4N2YsMHhmYywweDc0LDB4YjQsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg4ZiwweDc0LDB4MmJ9LAorICAxNiwweDFhODAsMCx7MHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZCwweGYwLDB4NTQsMHhmYiwweGYwLDB4ZTQsMHg5MCwweDc2LDB4ODEsMHhmMH0sCisgIDE2LDB4MWE5MCwwLHsweDkwLDB4NzYsMHg4MCwweGYwLDB4ZWYsMHhiNCwweDAyLDB4MjUsMHg5MCwweDdmLDB4ZmMsMHg3NCwweGIwLDB4ZjAsMHg5MCwweDdmfSwKKyAgMTYsMHgxYWEwLDAsezB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OGYsMHg3NCwweDJmLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDQ0LDB4MDJ9LAorICAxNiwweDFhYjAsMCx7MHhmMCwweDU0LDB4ZmIsMHhmMCwweGU0LDB4OTAsMHg3NiwweDgxLDB4ZjAsMHg5MCwweDc2LDB4ODAsMHhmMCwweGVmLDB4YjQsMHgwM30sCisgIDE2LDB4MWFjMCwwLHsweDI1LDB4OTAsMHg3ZiwweGZjLDB4NzQsMHg2OCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDhmfSwKKyAgMTYsMHgxYWQwLDAsezB4NzQsMHg1ZiwweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHg0NCwweDA0LDB4ZjAsMHhlNCwweDkwLDB4NzZ9LAorICAxNiwweDFhZTAsMCx7MHg4MSwweGYwLDB4OTAsMHg3NiwweDgwLDB4ZjAsMHgzMCwweDNmLDB4MDksMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmUsMHhmMH0sCisgIDE2LDB4MWFmMCwwLHsweDgwLDB4MDcsMHg5MCwweDc2LDB4OTcsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4OTAsMHg4MCwweDAyfSwKKyAgIDQsMHgxYjAwLDAsezB4ZjAsMHhkMiwweDJlLDB4MjJ9LAorICAxNiwweDFiMDQsMCx7MHgzMCwweDJjLDB4MzgsMHhjMiwweDJjLDB4OTAsMHg3NiwweDE5LDB4ZTAsMHhmZiwweGI0LDB4MDEsMHgwZSwweDkwLDB4NzYsMHg3Y30sCisgIDE2LDB4MWIxNCwwLHsweDc0LDB4YzAsMHhmMCwweGEzLDB4NzQsMHgxNCwweGYwLDB4YTMsMHg3NCwweDBiLDB4ZjAsMHhlZiwweGI0LDB4MDIsMHgwZCwweGU0fSwKKyAgMTYsMHgxYjI0LDAsezB4OTAsMHg3NiwweDdjLDB4ZjAsMHhhMywweDc0LDB4MTAsMHhmMCwweGEzLDB4NzQsMHgwYywweGYwLDB4ZWYsMHhiNCwweDAzLDB4MGJ9LAorICAxMiwweDFiMzQsMCx7MHhlNCwweDkwLDB4NzYsMHg3YywweGYwLDB4YTMsMHg3NCwweDE4LDB4ZjAsMHhhMywweGYwLDB4MjJ9LAorICAxNiwweDFiNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWI1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxYjYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFiNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWI4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxYjkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFiYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWJiMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxYmMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFiZDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWJlMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxYmYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFjMDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWMxMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxYzIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFjMzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWM0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxYzUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFjNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWM3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxYzgwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFjOTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWNhMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxY2IwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFjYzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWNkMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxY2UwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFjZjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWQwMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZDEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFkMjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWQzMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZDQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFkNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWQ2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZDcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFkODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWQ5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZGEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFkYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWRjMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZGQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFkZTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWRmMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZTAwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFlMTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWUyMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZTMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFlNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWU1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZTYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFlNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWU4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZTkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFlYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE0LDB4MWViMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFlYmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWVjZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZWRlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFlZWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWVmZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZjBlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFmMWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWYyZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgIDIsMHgxZjNlLDAsezB4MDAsMHgwMH0sCisgIDE2LDB4MWY0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZjUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFmNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWY3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZjgwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFmOTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWZhMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZmIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFmYzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWZkMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZmUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFmZjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjAwMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMDEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIwMjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjAzMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMDQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIwNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjA2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMDcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIwODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjA5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMGEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIwYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjBjMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMGQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIwZTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjBmMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMTAwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIxMTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjEyMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMTMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIxNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjE1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMTYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIxNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjE4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMTkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIxYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjFiMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMWMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIxZDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjFlMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMWYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIyMDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjIxMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMjIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIyMzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjI0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMjUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIyNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjI3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMjgwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIyOTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjJhMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMmIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIyYzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjJkMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMmUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIyZjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjMwMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMzEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIzMjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjMzMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMzQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIzNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjM2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTQsMHgyMzcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjM3ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMzhlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIzOWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjNhZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyM2JlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIzY2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjNkZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyM2VlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIzZmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjQwZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNDFlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI0MmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjQzZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNDRlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI0NWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjQ2ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNDdlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI0OGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjQ5ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNGFlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI0YmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjRjZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNGRlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI0ZWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjRmZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNTBlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI1MWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjUyZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNTNlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI1NGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjU1ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNTZlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI1N2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjU4ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNTllLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI1YWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjViZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNWNlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI1ZGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjVlZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNWZlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI2MGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjYxZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNjJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI2M2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjY0ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNjVlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI2NmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjY3ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNjhlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI2OWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjZhZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNmJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI2Y2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjZkZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTQsMHgyNmVlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjZmYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNzBjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI3MWMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjcyYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNzNjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI3NGMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4Mjc1YywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNzZjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI3N2MsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4Mjc4YywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNzljLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI3YWMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjdiYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyN2NjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI3ZGMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjdlYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgIDUsMHgyN2ZjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMn0sCisgIDE2LDB4MjgwMSwwLHsweGMyLDB4MjAsMHhjMiwweDIxLDB4YzIsMHgyYSwweDkwLDB4N2YsMHhlOCwweGUwLDB4MTIsMHgzNywweGY5LDB4MjgsMHgzMCwweDAwfSwKKyAgMTYsMHgyODExLDAsezB4MjgsMHg4YywweDAxLDB4MjgsMHhhMiwweDAyLDB4MmEsMHgxZiwweDIxLDB4MmEsMHg2YSwweDIyLDB4MjksMHgzZCwweDgwLDB4Mjl9LAorICAxNiwweDI4MjEsMCx7MHg3ZCwweDgxLDB4MjksMHhkMSwweDgyLDB4MmEsMHg4NCwweGExLDB4MmEsMHhiYSwweGEyLDB4MDAsMHgwMCwweDJhLDB4YmYsMHg5MH0sCisgIDE2LDB4MjgzMSwwLHsweDdmLDB4ZTksMHhlMCwweDE0LDB4NjAsMHgxMSwweDI0LDB4ZmUsMHg2MCwweDI4LDB4MjQsMHhmZSwweDYwLDB4M2IsMHgyNCwweGZjfSwKKyAgMTYsMHgyODQxLDAsezB4NzAsMHg0MCwweDEyLDB4M2YsMHhlNSwweDQxLDB4Y2IsMHgxMiwweDRlLDB4MWQsMHg0MCwweDAyLDB4NDEsMHhjYiwweDkwLDB4N2Z9LAorICAxNiwweDI4NTEsMCx7MHhlYSwweGUwLDB4YjQsMHgwMSwweDA0LDB4YzIsMHgyMiwweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMH0sCisgIDE2LDB4Mjg2MSwwLHsweDQxLDB4Y2IsMHgxMiwweDRlLDB4MWYsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGI0LDB4MDEsMHgwNCwweGQyLDB4MjIsMHg0MSwweGNifSwKKyAgMTYsMHgyODcxLDAsezB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjB9LAorICAxNiwweDI4ODEsMCx7MHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNH0sCisgIDE2LDB4Mjg5MSwwLHsweGY1LDB4NzAsMHgwNSwweDEyLDB4NDgsMHg2MywweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQxfSwKKyAgMTYsMHgyOGExLDAsezB4Y2IsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4ZmQsMHg2MCwweDU0LDB4MjQsMHgwMiwweDYwLDB4MDIsMHgyMSwweDM0LDB4MTJ9LAorICAxNiwweDI4YjEsMCx7MHg0ZSwweDFkLDB4NDAsMHgwMiwweDQxLDB4Y2IsMHg5MCwweDdmLDB4ZWEsMHhlMCwweDcwLDB4MzgsMHg5MCwweDdmLDB4ZWMsMHhlMH0sCisgIDE2LDB4MjhjMSwwLHsweGY0LDB4NTQsMHg4MCwweGZmLDB4YzQsMHg1NCwweDBmLDB4ZmYsMHhlMCwweDU0LDB4MDcsMHgyZiwweDI1LDB4ZTAsMHgyNCwweGI0fSwKKyAgMTYsMHgyOGQxLDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4OTAsMHg3ZiwweGVjLDB4ZTAsMHg1NCwweDgwLDB4ZmZ9LAorICAxNiwweDI4ZTEsMCx7MHgxMywweDEzLDB4MTMsMHg1NCwweDFmLDB4ZmYsMHhlMCwweDU0LDB4MDcsMHgyZiwweDkwLDB4N2YsMHhkNywweGYwLDB4ZTAsMHg0NH0sCisgIDE2LDB4MjhmMSwwLHsweDIwLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0MSwweGNiLDB4MTIsMHg0ZSwweDFmfSwKKyAgMTYsMHgyOTAxLDAsezB4NDAsMHgwMiwweDQxLDB4Y2IsMHg5MCwweDdmLDB4ZWEsMHhlMCwweDcwLDB4MjAsMHg5MCwweDdmLDB4ZWMsMHhlMCwweGY0LDB4NTR9LAorICAxNiwweDI5MTEsMCx7MHg4MCwweGZmLDB4YzQsMHg1NCwweDBmLDB4ZmYsMHhlMCwweDU0LDB4MDcsMHgyZiwweDI1LDB4ZTAsMHgyNCwweGI0LDB4ZjUsMHg4Mn0sCisgIDE2LDB4MjkyMSwwLHsweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHg3NCwweDAxLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxfSwKKyAgMTYsMHgyOTMxLDAsezB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGU5LDB4ZTB9LAorICAxNiwweDI5NDEsMCx7MHg2MCwweDEyLDB4MjQsMHhmOCwweDYwLDB4MDksMHgyNCwweDAyLDB4NzAsMHgyOSwweDEyLDB4NDMsMHhlNywweDQxLDB4Y2IsMHgxMn0sCisgIDE2LDB4Mjk1MSwwLHsweDRkLDB4Y2EsMHg0MSwweGNiLDB4MTIsMHg0ZSwweDFiLDB4YTIsMHgyMiwweGU0LDB4MzMsMHhmZiwweDI1LDB4ZTAsMHhmZiwweGEyfSwKKyAgMTYsMHgyOTYxLDAsezB4MjMsMHhlNCwweDMzLDB4NGYsMHg5MCwweDdmLDB4MDAsMHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDJ9LAorICAxNiwweDI5NzEsMCx7MHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4ZTksMHhlMH0sCisgIDE2LDB4Mjk4MSwwLHsweDYwLDB4MzMsMHgyNCwweGY2LDB4NjAsMHgyYSwweDI0LDB4MDQsMHg3MCwweDNkLDB4OTAsMHg3ZiwweGViLDB4ZTAsMHgyNCwweGRlfSwKKyAgMTYsMHgyOTkxLDAsezB4NjAsMHgwYywweDA0LDB4NzAsMHgxMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2Z9LAorICAxNiwweDI5YTEsMCx7MHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDEsMHhjYn0sCisgIDE2LDB4MjliMSwwLHsweDEyLDB4NDcsMHg0NSwweDQxLDB4Y2IsMHgxMiwweDRlLDB4MWIsMHhlNCwweDkwLDB4N2YsMHgwMCwweGYwLDB4YTMsMHhmMCwweDkwfSwKKyAgMTYsMHgyOWMxLDAsezB4N2YsMHhiNSwweDc0LDB4MDIsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQxLDB4Y2J9LAorICAxNiwweDI5ZDEsMCx7MHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4ZjQsMHg2MCwweDM0LDB4MjQsMHgwYywweDcwLDB4MzksMHgxMiwweDRlLDB4MWIsMHg5MH0sCisgIDE2LDB4MjllMSwwLHsweDdmLDB4ZWMsMHhlMCwweGY0LDB4NTQsMHg4MCwweGZmLDB4YzQsMHg1NCwweDBmLDB4ZmYsMHhlMCwweDU0LDB4MDcsMHgyZiwweDI1fSwKKyAgMTYsMHgyOWYxLDAsezB4ZTAsMHgyNCwweGI0LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlMCwweDU0LDB4ZmQsMHg5MCwweDdmLDB4MDB9LAorICAxNiwweDJhMDEsMCx7MHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDIsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMH0sCisgIDE2LDB4MmExMSwwLHsweDQ0LDB4MDEsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmfSwKKyAgMTYsMHgyYTIxLDAsezB4ZTksMHhlMCwweDI0LDB4ZjYsMHg2MCwweDEyLDB4MTQsMHg2MCwweDFhLDB4MjQsMHgwMiwweDcwLDB4MWQsMHhkMiwweDIwLDB4OTB9LAorICAxNiwweDJhMzEsMCx7MHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg4MCwweDEyLDB4ZDIsMHgyMCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMX0sCisgIDE2LDB4MmE0MSwwLHsweGYwLDB4ODAsMHgwNywweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjAsMHgyMCwweDE4LDB4OTAsMHg3ZiwweGVlfSwKKyAgMTYsMHgyYTUxLDAsezB4ZTAsMHg3MCwweDA0LDB4YTMsMHhlMCwweDYwLDB4MGIsMHhkMiwweDI5LDB4ZDIsMHgyNywweDEyLDB4MTcsMHg0YSwweGQyLDB4MmF9LAorICAxNiwweDJhNjEsMCx7MHg4MCwweDAzLDB4MTIsMHgwOCwweDAwLDB4YzIsMHgyMCwweDgwLDB4NjEsMHg5MCwweDdmLDB4ZWUsMHhlMCwweDcwLDB4MDQsMHhhM30sCisgIDE2LDB4MmE3MSwwLHsweGUwLDB4NjAsMHgwYiwweGQyLDB4MjksMHhkMiwweDI4LDB4MTIsMHgxNywweDRhLDB4ZDIsMHgyYSwweDgwLDB4NGMsMHgxMiwweDM4fSwKKyAgMTYsMHgyYTgxLDAsezB4NzQsMHg4MCwweDQ3LDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweGZlLDB4NjAsMHgxMiwweDE0LDB4NjAsMHgxYSwweDI0LDB4MDJ9LAorICAxNiwweDJhOTEsMCx7MHg3MCwweDFkLDB4ZDIsMHgyMSwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4ODAsMHgxMiwweGQyLDB4MjEsMHg5MH0sCisgIDE2LDB4MmFhMSwwLHsweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDgwLDB4MDcsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIwfSwKKyAgMTYsMHgyYWIxLDAsezB4MjEsMHgwMywweDEyLDB4MTAsMHgwMCwweGMyLDB4MjEsMHg4MCwweDExLDB4MTIsMHgyYSwweGQ2LDB4ODAsMHgwYywweDEyLDB4NGV9LAorICAxNiwweDJhYzEsMCx7MHgyMSwweDUwLDB4MDcsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIwLDB4MmEsMHgwNywweDkwLDB4N2YsMHhiNH0sCisgICA1LDB4MmFkMSwwLHsweGUwLDB4NDQsMHgwMiwweGYwLDB4MjJ9LAorICAxNiwweDJhZDYsMCx7MHhlNCwweDkwLDB4NzYsMHgyNywweGYwLDB4OTAsMHg3NiwweDI3LDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0Mn0sCisgIDE2LDB4MmFlNiwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4N2YsMHhlYywweGUwLDB4ZmQsMHhlZSwweDZkfSwKKyAgMTYsMHgyYWY2LDAsezB4NjAsMHgwZSwweGVmLDB4YzMsMHg5NCwweDA2LDB4NTAsMHgwOCwweDkwLDB4NzYsMHgyNywweGUwLDB4MDQsMHhmMCwweDgwLDB4ZDV9LAorICAxNiwweDJiMDYsMCx7MHhlZiwweGI0LDB4MDYsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHhlZiwweDc1LDB4ZjAsMHgwZn0sCisgIDE2LDB4MmIxNiwwLHsweGE0LDB4MjQsMHg0MSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDc2LDB4MjgsMHhmMCwweDI0fSwKKyAgMTYsMHgyYjI2LDAsezB4OWYsMHg3MCwweDAyLDB4YTEsMHg3NCwweDI0LDB4MjEsMHg2MCwweDAyLDB4YTEsMHhhMSwweDkwLDB4N2YsMHhlOSwweGUwLDB4MjR9LAorICAxNiwweDJiMzYsMCx7MHg3ZSwweDcwLDB4MDIsMHg2MSwweGZjLDB4MTQsMHg3MCwweDAyLDB4ODEsMHhiNSwweDI0LDB4MDIsMHg2MCwweDAyLDB4YTEsMHg2Y30sCisgIDE2LDB4MmI0NiwwLHsweGVmLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQzLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZjfSwKKyAgMTYsMHgyYjU2LDAsezB4YTMsMHhlMCwweGZkLDB4YTMsMHhlMCwweGZlLDB4YTMsMHhlMCwweGZmLDB4N2IsMHg0NCwweDdhLDB4YWMsMHg3OSwweDAwLDB4Nzh9LAorICAxNiwweDJiNjYsMCx7MHgwMCwweGMzLDB4MTIsMHgzNywweGFiLDB4NzAsMHgxMywweDkwLDB4N2YsMHgwMCwweDc0LDB4NDQsMHhmMCwweGEzLDB4NzQsMHhhY30sCisgIDE2LDB4MmI3NiwwLHsweGYwLDB4ZTQsMHhhMywweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMywweGYwLDB4OTAsMHg3NiwweDI3LDB4ZTAsMHg3NSwweGYwfSwKKyAgMTYsMHgyYjg2LDAsezB4MGYsMHhhNCwweDI0LDB4NDMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmMsMHhhMywweGUwLDB4ZmR9LAorICAxNiwweDJiOTYsMCx7MHhhMywweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmYsMHg3YiwweDgwLDB4N2EsMHhiYiwweDc5LDB4MDAsMHg3OCwweDAwLDB4YzMsMHgxMn0sCisgIDE2LDB4MmJhNiwwLHsweDM3LDB4YWIsMHg3MCwweDEzLDB4OTAsMHg3ZiwweDAwLDB4NzQsMHg4MCwweGYwLDB4YTMsMHg3NCwweGJiLDB4ZjAsMHhlNCwweGEzfSwKKyAgMTYsMHgyYmI2LDAsezB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDc2LDB4MjcsMHhlMCwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjR9LAorICAxNiwweDJiYzYsMCx7MHg0MywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmYywweGEzLDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmZX0sCisgIDE2LDB4MmJkNiwwLHsweGEzLDB4ZTAsMHhmZiwweDdiLDB4MDAsMHg3YSwweDc3LDB4NzksMHgwMSwweDc4LDB4MDAsMHhjMywweDEyLDB4MzcsMHhhYiwweDYwfSwKKyAgMTYsMHgyYmU2LDAsezB4MDIsMHhhMSwweGE4LDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHhhMywweDc0LDB4NzcsMHhmMCwweGEzLDB4NzQsMHgwMSwweGYwLDB4OTB9LAorICAxNiwweDJiZjYsMCx7MHg3ZiwweGI1LDB4NzQsMHgwMywweGYwLDB4MjIsMHg5MCwweDc2LDB4MjcsMHhlMCwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0N30sCisgIDE2LDB4MmMwNiwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmYywweGEzLDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmZSwweGEzfSwKKyAgMTYsMHgyYzE2LDAsezB4ZTAsMHhmZiwweDdiLDB4NDQsMHg3YSwweGFjLDB4NzksMHgwMCwweDc4LDB4MDAsMHhjMywweDEyLDB4MzcsMHhhYiwweDcwLDB4MTN9LAorICAxNiwweDJjMjYsMCx7MHg5MCwweDdmLDB4MDAsMHg3NCwweDQ0LDB4ZjAsMHhhMywweDc0LDB4YWMsMHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNX0sCisgIDE2LDB4MmMzNiwwLHsweDc0LDB4MDMsMHhmMCwweDkwLDB4NzYsMHgyNywweGUwLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQ3LDB4ZjUsMHg4MiwweGU0fSwKKyAgMTYsMHgyYzQ2LDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZjLDB4YTMsMHhlMCwweGZkLDB4YTMsMHhlMCwweGZlLDB4YTMsMHhlMCwweGZmLDB4N2J9LAorICAxNiwweDJjNTYsMCx7MHg4MCwweDdhLDB4YmIsMHg3OSwweDAwLDB4NzgsMHgwMCwweGMzLDB4MTIsMHgzNywweGFiLDB4NzAsMHgxMywweDkwLDB4N2YsMHgwMH0sCisgIDE2LDB4MmM2NiwwLHsweDc0LDB4ODAsMHhmMCwweGEzLDB4NzQsMHhiYiwweGYwLDB4ZTQsMHhhMywweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMywweGYwfSwKKyAgMTYsMHgyYzc2LDAsezB4OTAsMHg3NiwweDI3LDB4ZTAsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDcsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjV9LAorICAxNiwweDJjODYsMCx7MHg4MywweGUwLDB4ZmMsMHhhMywweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmYsMHg3YiwweDAwLDB4N2EsMHg3N30sCisgIDE2LDB4MmM5NiwwLHsweDc5LDB4MDEsMHg3OCwweDAwLDB4YzMsMHgxMiwweDM3LDB4YWIsMHg2MCwweDAyLDB4YTEsMHhhOCwweDkwLDB4N2YsMHgwMCwweGYwfSwKKyAgMTYsMHgyY2E2LDAsezB4YTMsMHg3NCwweDc3LDB4ZjAsMHhhMywweDc0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDMsMHhmMCwweDIyLDB4OTB9LAorICAxNiwweDJjYjYsMCx7MHg3NiwweDI3LDB4ZTAsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NGIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4M30sCisgIDE2LDB4MmNjNiwwLHsweGUwLDB4ZmMsMHhhMywweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmYsMHg3YiwweDQ0LDB4N2EsMHhhYywweDc5fSwKKyAgMTYsMHgyY2Q2LDAsezB4MDAsMHg3OCwweDAwLDB4YzMsMHgxMiwweDM3LDB4YWIsMHg3MCwweDEzLDB4OTAsMHg3ZiwweDAwLDB4NzQsMHg0NCwweGYwLDB4YTN9LAorICAxNiwweDJjZTYsMCx7MHg3NCwweGFjLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDc2LDB4MjcsMHhlMH0sCisgIDE2LDB4MmNmNiwwLHsweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0YiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmYywweGEzfSwKKyAgMTYsMHgyZDA2LDAsezB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweDdiLDB4ODAsMHg3YSwweGJiLDB4NzksMHgwMCwweDc4LDB4MDB9LAorICAxNiwweDJkMTYsMCx7MHhjMywweDEyLDB4MzcsMHhhYiwweDcwLDB4MTMsMHg5MCwweDdmLDB4MDAsMHg3NCwweDgwLDB4ZjAsMHhhMywweDc0LDB4YmIsMHhmMH0sCisgIDE2LDB4MmQyNiwwLHsweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDMsMHhmMCwweDkwLDB4NzYsMHgyNywweGUwLDB4NzUsMHhmMCwweDBmfSwKKyAgMTYsMHgyZDM2LDAsezB4YTQsMHgyNCwweDRiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZjLDB4YTMsMHhlMCwweGZkLDB4YTN9LAorICAxNiwweDJkNDYsMCx7MHhlMCwweGZlLDB4YTMsMHhlMCwweGZmLDB4N2IsMHgwMCwweDdhLDB4NzcsMHg3OSwweDAxLDB4NzgsMHgwMCwweGMzLDB4MTIsMHgzN30sCisgIDE2LDB4MmQ1NiwwLHsweGFiLDB4NzAsMHg0ZiwweDkwLDB4N2YsMHgwMCwweGYwLDB4YTMsMHg3NCwweDc3LDB4ZjAsMHhhMywweDc0LDB4MDEsMHhmMCwweDkwfSwKKyAgMTYsMHgyZDY2LDAsezB4N2YsMHhiNSwweDc0LDB4MDMsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2Z9LAorICAxNiwweDJkNzYsMCx7MHhlOSwweGUwLDB4MjQsMHg3ZiwweDcwLDB4MWUsMHg5MCwweDc2LDB4MjcsMHhlMCwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0Zn0sCisgIDE2LDB4MmQ4NiwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDdmLDB4MDAsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0fSwKKyAgMTYsMHgyZDk2LDAsezB4MDEsMHhmMCwweDgwLDB4MDcsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDR9LAorICAgMywweDJkYTYsMCx7MHgwMSwweGYwLDB4MjJ9LAorICAxNiwweDJkYTksMCx7MHhlNCwweDkwLDB4NzYsMHgzNiwweGYwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZSwweGY1LDB4ODIsMHhlNH0sCisgIDE2LDB4MmRiOSwwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwMSwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGYsMHhmNSwweDgyfSwKKyAgMTYsMHgyZGM5LDAsezB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDEsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDEwLDB4ZjV9LAorICAxNiwweDJkZDksMCx7MHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNCwweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZn0sCisgIDE2LDB4MmRlOSwwLHsweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgxMCwweGYwfSwKKyAgMTYsMHgyZGY5LDAsezB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDV9LAorICAxNiwweDJlMDksMCx7MHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDEwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNH0sCisgIDE2LDB4MmUxOSwwLHsweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZSwweGY1fSwKKyAgMTYsMHgyZTI5LDAsezB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwMiwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGZ9LAorICAxNiwweDJlMzksMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDIsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNH0sCisgIDE2LDB4MmU0OSwwLHsweDEwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNCwweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwfSwKKyAgMTYsMHgyZTU5LDAsezB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzR9LAorICAxNiwweDJlNjksMCx7MHgwMSwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4M30sCisgIDE2LDB4MmU3OSwwLHsweDc0LDB4MDMsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDEwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1fSwKKyAgMTYsMHgyZTg5LDAsezB4ODMsMHhlNCwweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjR9LAorICAxNiwweDJlOTksMCx7MHgwZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgxMCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNH0sCisgIDE2LDB4MmVhOSwwLHsweDI0LDB4MGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDYsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzfSwKKyAgMTYsMHgyZWI5LDAsezB4YTQsMHgyNCwweDEwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNCwweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTB9LAorICAxNiwweDJlYzksMCx7MHgwNCwweGYwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNX0sCisgIDE2LDB4MmVkOSwwLHsweDgzLDB4NzQsMHgwMiwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1fSwKKyAgMTYsMHgyZWU5LDAsezB4ZjUsMHg4MywweDc0LDB4MDQsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDEwLDB4ZjUsMHg4MiwweGU0LDB4MzR9LAorICAxNiwweDJlZjksMCx7MHg3NSwweGY1LDB4ODMsMHhlNCwweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwM30sCisgIDE2LDB4MmYwOSwwLHsweGE0LDB4MjQsMHgwZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwMiwweGYwLDB4ZWYsMHg3NSwweGYwfSwKKyAgMTYsMHgyZjE5LDAsezB4MDMsMHhhNCwweDI0LDB4MGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDgsMHhmMCwweGVmLDB4NzV9LAorICAxNiwweDJmMjksMCx7MHhmMCwweDAzLDB4YTQsMHgyNCwweDEwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDA0LDB4ZjAsMHg5MH0sCisgIDE2LDB4MmYzOSwwLHsweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBlLDB4ZjUsMHg4MiwweGU0fSwKKyAgMTYsMHgyZjQ5LDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDAyLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZiwweGY1LDB4ODJ9LAorICAxNiwweDJmNTksMCx7MHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwYSwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MTAsMHhmNX0sCisgIDE2LDB4MmY2OSwwLHsweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDQsMHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwfSwKKyAgMTYsMHgyZjc5LDAsezB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDJ9LAorICAxNiwweDJmODksMCx7MHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NH0sCisgIDE2LDB4MmY5OSwwLHsweDA5LDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgxMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzfSwKKyAgMTYsMHgyZmE5LDAsezB4NzQsMHgwNCwweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjR9LAorICAxNiwweDJmYjksMCx7MHgwZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwMiwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNH0sCisgIDE2LDB4MmZjOSwwLHsweDI0LDB4MGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDcsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzfSwKKyAgMTQsMHgyZmQ5LDAsezB4YTQsMHgyNCwweDEwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDA0LDB4ZjAsMHgyMn0sCisgIDE2LDB4MmZlNywwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweGQyLDB4MjYsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDAxfSwKKyAgIDgsMHgyZmY3LDAsezB4ZjAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgICAxLDB4MmZmZiwwLHsweDMyfSwKKyAgMTYsMHgzMDAwLDAsezB4OTAsMHg3ZiwweGI2LDB4ZTAsMHgyMCwweGUxLDB4MDIsMHhjMiwweDNkLDB4ZDIsMHgzNiwweDIwLDB4MzYsMHgwMiwweDQxLDB4NmV9LAorICAxNiwweDMwMTAsMCx7MHgzMCwweDNkLDB4MDIsMHg0MSwweDZlLDB4OTAsMHg4MCwweDA3LDB4ZTAsMHg2MCwweDA0LDB4ZDIsMHgzNiwweDgwLDB4MDIsMHhjMn0sCisgIDE2LDB4MzAyMCwwLHsweDM2LDB4MjAsMHgzNiwweDAyLDB4NDEsMHgyZSwweGQyLDB4MzUsMHhlNCwweGY1LDB4MWEsMHg5MCwweDgwLDB4MDQsMHhlMCwweGY1fSwKKyAgMTYsMHgzMDMwLDAsezB4MTksMHg3NCwweDA4LDB4MjUsMHgwZSwweGY4LDB4YTYsMHgxOSwweDg1LDB4MTksMHgxOCwweGU1LDB4MTgsMHgyMCwweGU3LDB4MDR9LAorICAxNiwweDMwNDAsMCx7MHhkMiwweDM4LDB4ODAsMHgwMiwweGMyLDB4MzgsMHgzMCwweDM4LDB4MDIsMHgyMSwweGQ0LDB4ZTQsMHhmNSwweDE2LDB4ZTUsMHgxOX0sCisgIDE2LDB4MzA1MCwwLHsweGI0LDB4ZjAsMHgwYywweGQyLDB4MzksMHg3NSwweDA4LDB4MDQsMHg3NSwweDA5LDB4ZjAsMHgwNSwweDBlLDB4ODAsMHgwMiwweDA1fSwKKyAgMTYsMHgzMDYwLDAsezB4MTYsMHhlNSwweDE5LDB4NjQsMHhmNywweDcwLDB4M2QsMHhjMiwweDM5LDB4ZTUsMHgwZSwweDI0LDB4ZmUsMHg2MCwweDE3LDB4MTR9LAorICAxNiwweDMwNzAsMCx7MHg2MCwweDIyLDB4MjQsMHgwMywweDcwLDB4MjksMHg3NSwweDA4LDB4MDUsMHg3NSwweDA5LDB4ZjcsMHhlNCwweGY1LDB4MGEsMHhmNX0sCisgIDE2LDB4MzA4MCwwLHsweDBiLDB4NzUsMHgwZSwweDA0LDB4ODAsMHgyMCwweDc1LDB4MDgsMHgwNiwweDc1LDB4MGEsMHhmNywweGU0LDB4ZjUsMHgwYiwweDc1fSwKKyAgMTYsMHgzMDkwLDAsezB4MGUsMHgwNCwweDgwLDB4MTIsMHg3NSwweDA4LDB4MDcsMHg3NSwweDBiLDB4ZjcsMHg3NSwweDBlLDB4MDQsMHg4MCwweDA3LDB4MTJ9LAorICAxNiwweDMwYTAsMCx7MHg0ZCwweGRhLDB4ODAsMHgwMiwweDA1LDB4MTYsMHhlNSwweDE5LDB4NTQsMHhmOCwweDY0LDB4ZjgsMHg3MCwweDNiLDB4YzIsMHgzNX0sCisgIDE2LDB4MzBiMCwwLHsweGU1LDB4MTksMHgyNCwweDA3LDB4NjAsMHgwYywweDI0LDB4ZmMsMHg2MCwweDA4LDB4MjQsMHgwNSwweDI0LDB4ZjgsMHg1MCwweDA2fSwKKyAgMTYsMHgzMGMwLDAsezB4ODAsMHgwOCwweGQyLDB4M2EsMHg4MCwweDA2LDB4YzIsMHgzYSwweDgwLDB4MDIsMHhkMiwweDNhLDB4NzUsMHgxYSwweDAxLDB4MjB9LAorICAxNiwweDMwZDAsMCx7MHgzYSwweDE5LDB4OTAsMHg3ZSwweDgwLDB4NzQsMHgwZiwweGYwLDB4YTMsMHhlNSwweDE5LDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHhhM30sCisgIDE2LDB4MzBlMCwwLHsweGYwLDB4OTAsMHg3ZiwweGI3LDB4NzQsMHgwNCwweGYwLDB4ODAsMHgwMiwweDA1LDB4MTYsMHgyMCwweDM5LDB4NmQsMHhlNSwweDE5fSwKKyAgMTYsMHgzMGYwLDAsezB4NjQsMHhmNywweDYwLDB4NjcsMHhlNSwweDFhLDB4NzAsMHg2MywweGU1LDB4MTgsMHg1NCwweGYwLDB4NjQsMHhmMCwweDcwLDB4NTl9LAorICAxNiwweDMxMDAsMCx7MHg4NSwweDE4LDB4MTksMHhmNSwweDBlLDB4ZTUsMHgxOSwweDI0LDB4MGYsMHg2MCwweDFiLDB4MjQsMHhmZSwweDYwLDB4MTcsMHgyNH0sCisgIDE2LDB4MzExMCwwLHsweGZkLDB4NjAsMHgyMiwweDE0LDB4NjAsMHgxZiwweDI0LDB4MDUsMHg3MCwweDJmLDB4NzUsMHgwOCwweDAzLDB4MDUsMHgwZSwweDg1fSwKKyAgMTYsMHgzMTIwLDAsezB4MTgsMHgwOSwweGQyLDB4MzcsMHg4MCwweDI4LDB4NzUsMHgwOCwweDAyLDB4MDUsMHgwZSwweDg1LDB4MTgsMHgwOSwweDc1LDB4MTR9LAorICAxNiwweDMxMzAsMCx7MHgwMSwweGQyLDB4MzcsMHg4MCwweDE5LDB4NzUsMHgwOCwweDA1LDB4MDUsMHgwZSwweDg1LDB4MTgsMHgwOSwweGU0LDB4ZjUsMHgwYX0sCisgIDE2LDB4MzE0MCwwLHsweGY1LDB4MGIsMHg3NSwweDBlLDB4MDMsMHhkMiwweDM3LDB4ODAsMHgwNSwweDEyLDB4NGQsMHhkYSwweGMyLDB4MzUsMHgzMCwweDM1fSwKKyAgMTYsMHgzMTUwLDAsezB4MGEsMHg4NSwweDA4LDB4MTMsMHg4NSwweDE4LDB4MTIsMHg4MCwweDAyLDB4MDUsMHgxNiwweDg1LDB4MTgsMHgxOSwweGU1LDB4MTZ9LAorICAxNiwweDMxNjAsMCx7MHg2NCwweDA0LDB4NzAsMHg2MiwweGY1LDB4MGUsMHhlNSwweDE5LDB4NTQsMHhmMCwweGY1LDB4MTksMHhmNSwweDE1LDB4ODUsMHgxOH0sCisgIDE2LDB4MzE3MCwwLHsweDE5LDB4ZTUsMHgxNSwweDI0LDB4NzAsMHg2MCwweDE4LDB4MjQsMHhmMCwweDYwLDB4MTQsMHgyNCwweGYwLDB4NjAsMHgxMCwweDI0fSwKKyAgMTYsMHgzMTgwLDAsezB4ZjAsMHg2MCwweDFlLDB4MjQsMHhmMCwweDYwLDB4MWEsMHgyNCwweGYwLDB4NjAsMHgwNCwweDI0LDB4NjAsMHg3MCwweDI3LDB4ZTV9LAorICAxNiwweDMxOTAsMCx7MHgxNSwweGM0LDB4NTQsMHgwZiwweGY1LDB4MTksMHhmNSwweDA4LDB4MDUsMHgwZSwweDg1LDB4MTgsMHgwOSwweGQyLDB4MzcsMHg4MH0sCisgIDE2LDB4MzFhMCwwLHsweDFhLDB4ZTUsMHgxNSwweGM0LDB4NTQsMHgwZiwweGY1LDB4MTksMHhmNSwweDA4LDB4MDUsMHgwZSwweDg1LDB4MTgsMHgwOSwweDc1fSwKKyAgMTYsMHgzMWIwLDAsezB4MTQsMHgwMSwweGQyLDB4MzcsMHg4MCwweDA1LDB4MTIsMHg0ZCwweGRhLDB4YzIsMHgzNSwweDMwLDB4MzUsMHgwYSwweDg1LDB4MTl9LAorICAxNiwweDMxYzAsMCx7MHgxMywweDg1LDB4MTgsMHgxMiwweDgwLDB4MDIsMHgwNSwweDE2LDB4ZTUsMHgxNiwweGQzLDB4OTQsMHgwNSwweDQwLDB4NTcsMHgxMn0sCisgIDE2LDB4MzFkMCwwLHsweDRkLDB4ZGEsMHg4MCwweDUyLDB4MzAsMHgzOSwweDE3LDB4ZTUsMHgwZSwweDcwLDB4MGEsMHg4NSwweDA4LDB4MDksMHg3NSwweDA4fSwKKyAgMTYsMHgzMWUwLDAsezB4MDQsMHgwNSwweDBlLDB4ODAsMHg0MSwweDc0LDB4MDgsMHgyNSwweDBlLDB4ZjgsMHhhNiwweDE5LDB4ODAsMHgzOCwweDIwLDB4Mzd9LAorICAxNiwweDMxZjAsMCx7MHgyYSwweGU1LDB4MGUsMHhiNCwweDAxLDB4MGYsMHg4NSwweDA4LDB4MGEsMHg4NSwweDA5LDB4MGIsMHg4NSwweDEzLDB4MDgsMHg4NX0sCisgIDE2LDB4MzIwMCwwLHsweDEyLDB4MDksMHg3NSwweDBlLDB4MDQsMHhlNSwweDE0LDB4YjQsMHgwMSwweDFjLDB4ODUsMHgwOCwweDBhLDB4ZTQsMHhmNSwweDBifSwKKyAgMTYsMHgzMjEwLDAsezB4ODUsMHgxMywweDA4LDB4ODUsMHgxMiwweDA5LDB4NzUsMHgwZSwweDA0LDB4ODAsMHgwYiwweGU1LDB4MTQsMHhiNCwweDAxLDB4MDZ9LAorICAxNiwweDMyMjAsMCx7MHhlNCwweGY1LDB4MGIsMHg3NSwweDBlLDB4MDQsMHhlNCwweGY1LDB4MWEsMHgzMCwweDM1LDB4MDIsMHgwNSwweDBlLDB4ZTUsMHgwZX0sCisgIDE2LDB4MzIzMCwwLHsweGQzLDB4OTQsMHgwMywweDUwLDB4MDIsMHgwMSwweDBiLDB4YzIsMHgzNywweGU0LDB4ZjUsMHgwZSwweGY1LDB4MTAsMHhjMiwweDM2fSwKKyAgMTYsMHgzMjQwLDAsezB4ZDIsMHgzZCwweGY1LDB4MTQsMHg3NCwweDA4LDB4MjUsMHgxMCwweGY4LDB4ZTYsMHhmZiwweDc0LDB4ODAsMHgyNSwweDEwLDB4ZjV9LAorICAxNiwweDMyNTAsMCx7MHg4MiwweGU0LDB4MzQsMHg3ZSwweGY1LDB4ODMsMHhlZiwweGYwLDB4NzQsMHgwOCwweDI1LDB4MTAsMHhmOCwweGU0LDB4ZjYsMHgwNX0sCisgIDE1LDB4MzI2MCwwLHsweDEwLDB4ZTUsMHgxMCwweGI0LDB4MDQsMHhkZSwweDkwLDB4N2YsMHhiNywweDc0LDB4MDQsMHhmMCwweDAxLDB4MGIsMHgyMn0sCisgIDE2LDB4MzI2ZiwwLHsweDkwLDB4NzYsMHgxOCwweGUwLDB4ZmYsMHg2NCwweDA1LDB4NzAsMHg0MiwweDkwLDB4NzUsMHhhYiwweGUwLDB4YjQsMHgwMSwweDE5fSwKKyAgMTYsMHgzMjdmLDAsezB4OTAsMHg3MiwweDM3LDB4NzQsMHgwMSwweGYwLDB4ZTQsMHg5MCwweDgwLDB4MjAsMHhmMCwweDkwLDB4ODAsMHgzMSwweGYwLDB4OTB9LAorICAxNiwweDMyOGYsMCx7MHg4MCwweDI4LDB4ZjAsMHg5MCwweDgwLDB4MzksMHhmMCwweDgwLDB4MjIsMHhlNCwweDkwLDB4NzIsMHgzNywweGYwLDB4OTAsMHg3NX0sCisgIDE2LDB4MzI5ZiwwLHsweGFkLDB4ZTAsMHg5MCwweDcyLDB4MmIsMHhmMCwweGUwLDB4MjQsMHg4MCwweGYwLDB4ZTAsMHg5MCwweDgwLDB4MjAsMHhmMCwweDkwfSwKKyAgMTYsMHgzMmFmLDAsezB4ODAsMHgzMSwweGYwLDB4OTAsMHg4MCwweDI4LDB4ZjAsMHg5MCwweDgwLDB4MzksMHhmMCwweGVmLDB4NjQsMHgwNiwweDYwLDB4MDJ9LAorICAxNiwweDMyYmYsMCx7MHg4MSwweDk5LDB4OTAsMHg3MiwweDM5LDB4NzQsMHgwNCwweGYwLDB4OTAsMHg3MiwweDM5LDB4ZTAsMHhmZiwweDI0LDB4ZmUsMHg5MH0sCisgIDE2LDB4MzJjZiwwLHsweDcyLDB4MDQsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1fSwKKyAgMTYsMHgzMmRmLDAsezB4ODMsMHhlMCwweDY0LDB4MDEsMHg3MCwweDU0LDB4OTAsMHg3MiwweDM2LDB4MDQsMHhmMCwweDkwLDB4NzIsMHgwNCwweGUwLDB4ZmZ9LAorICAxNiwweDMyZWYsMCx7MHgyNCwweGZkLDB4NjAsMHgyOCwweDI0LDB4ZmUsMHg2MCwweDI0LDB4MjQsMHgwMywweDI0LDB4ZmIsMHg1MCwweDA0LDB4NjAsMHgxY30sCisgIDE2LDB4MzJmZiwwLHsweDgxLDB4OGMsMHg3NCwweDIwLDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg3NCwweDI4fSwKKyAgMTYsMHgzMzBmLDAsezB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg4MSwweDhjLDB4OTAsMHg3MiwweDA0LDB4ZTB9LAorICAxNiwweDMzMWYsMCx7MHhmZiwweDI0LDB4MzAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg3NCwweDM4LDB4MmYsMHhmNX0sCisgIDE2LDB4MzMyZiwwLHsweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg4MSwweDhjLDB4ZTQsMHg5MCwweDcyLDB4MzYsMHhmMCwweDkwfSwKKyAgMTYsMHgzMzNmLDAsezB4NzIsMHgzOSwweGUwLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODN9LAorICAxNiwweDMzNGYsMCx7MHhlMCwweGZmLDB4N2UsMHgwMCwweDkwLDB4NzUsMHgwYywweGVlLDB4ZjAsMHhhMywweGVmLDB4ZjAsMHg3MCwweDA2LDB4OTAsMHg3Mn0sCisgIDE2LDB4MzM1ZiwwLHsweDAyLDB4NzQsMHgzYiwweGYwLDB4OTAsMHg3NSwweDBjLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweDY0LDB4ODAsMHg0ZSwweDcwfSwKKyAgMTYsMHgzMzZmLDAsezB4MDQsMHg5MCwweDcyLDB4MDIsMHhmMCwweGVmLDB4NGUsMHg3MCwweDAyLDB4ODEsMHgzNSwweGVmLDB4NjQsMHg4MCwweDRlLDB4NzB9LAorICAxNiwweDMzN2YsMCx7MHgwMiwweDgxLDB4MzUsMHhlZiwweGY4LDB4ZTQsMHg5MCwweDc1LDB4MGQsMHhmMCwweGU4LDB4OTAsMHg3NSwweDBjLDB4ZjAsMHg5MH0sCisgIDE2LDB4MzM4ZiwwLHsweDcyLDB4MzQsMHhlMCwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzfSwKKyAgMTYsMHgzMzlmLDAsezB4ZTAsMHhmZiwweDkwLDB4NzIsMHgwMiwweGYwLDB4OTAsMHg3NSwweDBkLDB4ZTAsMHgyZiwweGYwLDB4OTAsMHg3NSwweDBjLDB4ZTB9LAorICAxNiwweDMzYWYsMCx7MHgzNCwweDAwLDB4ZjAsMHhlMCwweGZlLDB4YTMsMHhlMCwweGZmLDB4ZTQsMHhmYywweGZkLDB4N2IsMHhkNiwweDdhLDB4YTUsMHhmOX0sCisgIDE2LDB4MzNiZiwwLHsweGY4LDB4ZDMsMHgxMiwweDM3LDB4OTUsMHg0MCwweDBhLDB4OTAsMHg3NSwweDBjLDB4NzQsMHhhNSwweGYwLDB4YTMsMHg3NCwweGQ2fSwKKyAgMTYsMHgzM2NmLDAsezB4ZjAsMHg5MCwweDc1LDB4MGQsMHhlMCwweDI0LDB4MmEsMHhmMCwweDkwLDB4NzUsMHgwYywweGUwLDB4MzQsMHg1YSwweGYwLDB4ZTB9LAorICAxNiwweDMzZGYsMCx7MHhmZSwweGEzLDB4ZTAsMHg3OCwweDA1LDB4Y2UsMHhhMiwweGU3LDB4MTMsMHhjZSwweDEzLDB4ZDgsMHhmOCwweGZmLDB4OTAsMHg3NX0sCisgIDE2LDB4MzNlZiwwLHsweDBjLDB4ZWUsMHhmMCwweGEzLDB4ZWYsMHhmMCwweDkwLDB4NzIsMHgyYywweGVlLDB4ZjAsMHhhMywweGVmLDB4ZjAsMHhkMywweDk0fSwKKyAgMTYsMHgzM2ZmLDAsezB4ZDIsMHhlZSwweDY0LDB4ODAsMHg5NCwweDgyLDB4NDAsMHgwYSwweDkwLDB4NzIsMHgyYywweDc0LDB4MDIsMHhmMCwweGEzLDB4NzR9LAorICAxNiwweDM0MGYsMCx7MHhkMiwweGYwLDB4YzMsMHg5MCwweDcyLDB4MmMsMHhlMCwweDY0LDB4ODAsMHg5NCwweDgwLDB4NTAsMHgwNCwweGU0LDB4ZjAsMHhhM30sCisgIDE2LDB4MzQxZiwwLHsweGYwLDB4OTAsMHg3MiwweDJjLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHgyNCwweDNhLDB4ZjUsMHg4MiwweGVlLDB4MzQsMHg3MiwweGY1fSwKKyAgMTYsMHgzNDJmLDAsezB4ODMsMHhlMCwweDkwLDB4NzIsMHgwMiwweGYwLDB4OTAsMHg3MiwweDA0LDB4ZTAsMHhmZiwweDI0LDB4ZmQsMHg2MCwweDJkLDB4MjR9LAorICAxNiwweDM0M2YsMCx7MHhmZSwweDYwLDB4MjksMHgyNCwweDAzLDB4MjQsMHhmYiwweDUwLDB4MDQsMHg2MCwweDIxLDB4ODAsMHg0MCwweDkwLDB4NzIsMHgwMn0sCisgIDE2LDB4MzQ0ZiwwLHsweGUwLDB4ZmUsMHg3NCwweDIwLDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGVlLDB4ZjAsMHg3NCwweDI4fSwKKyAgMTYsMHgzNDVmLDAsezB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGVlLDB4ZjAsMHg4MCwweDIxLDB4OTAsMHg3MiwweDAyLDB4ZTB9LAorICAxNiwweDM0NmYsMCx7MHhmZiwweDkwLDB4NzIsMHgwNCwweGUwLDB4ZmUsMHgyNCwweDMwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlZn0sCisgIDE2LDB4MzQ3ZiwwLHsweGYwLDB4NzQsMHgzOCwweDJlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3MiwweDM5fSwKKyAgMTEsMHgzNDhmLDAsezB4ZTAsMHgwNCwweGYwLDB4ZTAsMHg2NCwweDBhLDB4NjAsMHgwMiwweDQxLDB4YzcsMHgyMn0sCisgIDE2LDB4MzQ5YSwwLHsweDkwLDB4NzYsMHgxOCwweGUwLDB4ZmYsMHhiNCwweDA1LDB4MjMsMHg5MCwweDcyLDB4MzcsMHhlMCwweDcwLDB4MWQsMHg5MCwweDc1fSwKKyAgMTYsMHgzNGFhLDAsezB4YWQsMHhlMCwweDkwLDB4NzIsMHgyYiwweGYwLDB4ZTAsMHgyNCwweDgwLDB4ZjAsMHhlMCwweDkwLDB4ODAsMHgyMCwweGYwLDB4OTB9LAorICAxNiwweDM0YmEsMCx7MHg4MCwweDMxLDB4ZjAsMHg5MCwweDgwLDB4MjgsMHhmMCwweDkwLDB4ODAsMHgzOSwweGYwLDB4ZWYsMHg2NCwweDA2LDB4NjAsMHgwMn0sCisgIDE2LDB4MzRjYSwwLHsweGMxLDB4OTEsMHg5MCwweDcyLDB4MzYsMHhlMCwweDYwLDB4MDIsMHhjMSwweDkxLDB4OTAsMHg3NiwweDQwLDB4ZTAsMHg3MCwweDMxfSwKKyAgMTYsMHgzNGRhLDAsezB4OTAsMHg3MiwweDAzLDB4NzQsMHgwMywweGYwLDB4OTAsMHg3MiwweDAzLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjR9LAorICAxNiwweDM0ZWEsMCx7MHhhYSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4NzIsMHgyOSwweGUwLDB4ZmQsMHhlZX0sCisgIDE2LDB4MzRmYSwwLHsweDZkLDB4NjAsMHgwZSwweGVmLDB4YzMsMHg5NCwweDBhLDB4NTAsMHgwOCwweDkwLDB4NzIsMHgwMywweGUwLDB4MDQsMHhmMCwweDgwfSwKKyAgMTYsMHgzNTBhLDAsezB4ZDUsMHg5MCwweDcyLDB4MzksMHg3NCwweDA0LDB4ZjAsMHg5MCwweDc2LDB4NDAsMHhlMCwweDcwLDB4MDgsMHg5MCwweDcyLDB4MDN9LAorICAxNiwweDM1MWEsMCx7MHhlMCwweDkwLDB4NzIsMHgzOSwweGYwLDB4OTAsMHg3MiwweDM5LDB4ZTAsMHhmZCwweDI0LDB4ZmUsMHg5MCwweDcyLDB4MmEsMHhmMH0sCisgIDE2LDB4MzUyYSwwLHsweGVkLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZmfSwKKyAgMTYsMHgzNTNhLDAsezB4N2UsMHgwMCwweDkwLDB4NzUsMHgwYywweGVlLDB4ZjAsMHhhMywweGVmLDB4ZjAsMHg3MCwweDA2LDB4OTAsMHg3MiwweDAyLDB4NzR9LAorICAxNiwweDM1NGEsMCx7MHg4MCwweGYwLDB4OTAsMHg3NSwweDBjLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweDY0LDB4ODAsMHg0ZSwweDcwLDB4MDQsMHg5MH0sCisgIDE2LDB4MzU1YSwwLHsweDcyLDB4MDIsMHhmMCwweGVmLDB4NGUsMHg3MCwweDAyLDB4YzEsMHgxYiwweGVmLDB4NjQsMHg4MCwweDRlLDB4NzAsMHgwMiwweGMxfSwKKyAgMTYsMHgzNTZhLDAsezB4MWIsMHhlZiwweGY4LDB4ZTQsMHg5MCwweDc1LDB4MGQsMHhmMCwweGU4LDB4OTAsMHg3NSwweDBjLDB4ZjAsMHhlZCwweDc1LDB4ZjB9LAorICAxNiwweDM1N2EsMCx7MHgwYSwweGE0LDB4MjQsMHhhYywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZiwweDkwLDB4NzIsMHgwMn0sCisgIDE2LDB4MzU4YSwwLHsweGYwLDB4OTAsMHg3NSwweDBkLDB4ZTAsMHgyZiwweGYwLDB4OTAsMHg3NSwweDBjLDB4ZTAsMHgzNCwweDAwLDB4ZjAsMHhlMCwweGZlfSwKKyAgMTYsMHgzNTlhLDAsezB4YTMsMHhlMCwweGZmLDB4ZTQsMHhmYywweGZkLDB4N2IsMHhkNiwweDdhLDB4YTUsMHhmOSwweGY4LDB4ZDMsMHgxMiwweDM3LDB4OTV9LAorICAxNiwweDM1YWEsMCx7MHg0MCwweDBhLDB4OTAsMHg3NSwweDBjLDB4NzQsMHhhNSwweGYwLDB4YTMsMHg3NCwweGQ2LDB4ZjAsMHg5MCwweDc1LDB4MGQsMHhlMH0sCisgIDE2LDB4MzViYSwwLHsweDI0LDB4MmEsMHhmMCwweDkwLDB4NzUsMHgwYywweGUwLDB4MzQsMHg1YSwweGYwLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHg3OCwweDA1fSwKKyAgMTYsMHgzNWNhLDAsezB4Y2UsMHhhMiwweGU3LDB4MTMsMHhjZSwweDEzLDB4ZDgsMHhmOCwweGZmLDB4OTAsMHg3NSwweDBjLDB4ZWUsMHhmMCwweGEzLDB4ZWZ9LAorICAxNiwweDM1ZGEsMCx7MHhmMCwweDkwLDB4NzIsMHgyYywweGVlLDB4ZjAsMHhhMywweGVmLDB4ZjAsMHhkMywweDk0LDB4ZDIsMHhlZSwweDY0LDB4ODAsMHg5NH0sCisgIDE2LDB4MzVlYSwwLHsweDgyLDB4NDAsMHgwYSwweDkwLDB4NzIsMHgyYywweDc0LDB4MDIsMHhmMCwweGEzLDB4NzQsMHhkMiwweGYwLDB4YzMsMHg5MCwweDcyfSwKKyAgMTYsMHgzNWZhLDAsezB4MmMsMHhlMCwweDY0LDB4ODAsMHg5NCwweDgwLDB4NTAsMHgwNCwweGU0LDB4ZjAsMHhhMywweGYwLDB4OTAsMHg3MiwweDJjLDB4ZTB9LAorICAxNiwweDM2MGEsMCx7MHhmZSwweGEzLDB4ZTAsMHgyNCwweDNhLDB4ZjUsMHg4MiwweGVlLDB4MzQsMHg3MiwweGY1LDB4ODMsMHhlMCwweDkwLDB4NzIsMHgwMn0sCisgIDE2LDB4MzYxYSwwLHsweGYwLDB4OTAsMHg3MiwweDJhLDB4ZTAsMHhmZiwweDI0LDB4ZmQsMHg2MCwweDJkLDB4MjQsMHhmZSwweDYwLDB4MjksMHgyNCwweDAzfSwKKyAgMTYsMHgzNjJhLDAsezB4MjQsMHhmYiwweDUwLDB4MDQsMHg2MCwweDIxLDB4ODAsMHg0MCwweDkwLDB4NzIsMHgwMiwweGUwLDB4ZmUsMHg3NCwweDIwLDB4MmZ9LAorICAxNiwweDM2M2EsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGVlLDB4ZjAsMHg3NCwweDI4LDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNH0sCisgIDE2LDB4MzY0YSwwLHsweDgwLDB4ZjUsMHg4MywweGVlLDB4ZjAsMHg4MCwweDIxLDB4OTAsMHg3MiwweDAyLDB4ZTAsMHhmZiwweDkwLDB4NzIsMHgyYSwweGUwfSwKKyAgMTYsMHgzNjVhLDAsezB4ZmUsMHgyNCwweDMwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlZiwweGYwLDB4NzQsMHgzOCwweDJlLDB4ZjV9LAorICAxNiwweDM2NmEsMCx7MHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3NiwweDQwLDB4ZTAsMHg3MCwweDA2LDB4OTAsMHg3Mn0sCisgIDE2LDB4MzY3YSwwLHsweDM5LDB4NzQsMHgwYSwweGYwLDB4OTAsMHg3MiwweDM5LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhjMywweDk0LDB4MGEsMHg1MCwweDAyfSwKKyAgIDgsMHgzNjhhLDAsezB4YTEsMHgxMSwweGU0LDB4OTAsMHg3NiwweDQwLDB4ZjAsMHgyMn0sCisgIDE2LDB4MzY5MiwwLHsweGJiLDB4MDEsMHgwNiwweDg5LDB4ODIsMHg4YSwweDgzLDB4ZTAsMHgyMiwweDUwLDB4MDIsMHhlNywweDIyLDB4YmIsMHhmZSwweDAyfSwKKyAgIDksMHgzNmEyLDAsezB4ZTMsMHgyMiwweDg5LDB4ODIsMHg4YSwweDgzLDB4ZTQsMHg5MywweDIyfSwKKyAgMTYsMHgzNmFiLDAsezB4YmIsMHgwMSwweDBjLDB4ZTUsMHg4MiwweDI5LDB4ZjUsMHg4MiwweGU1LDB4ODMsMHgzYSwweGY1LDB4ODMsMHhlMCwweDIyLDB4NTB9LAorICAxNiwweDM2YmIsMCx7MHgwNiwweGU5LDB4MjUsMHg4MiwweGY4LDB4ZTYsMHgyMiwweGJiLDB4ZmUsMHgwNiwweGU5LDB4MjUsMHg4MiwweGY4LDB4ZTIsMHgyMn0sCisgIDEzLDB4MzZjYiwwLHsweGU1LDB4ODIsMHgyOSwweGY1LDB4ODIsMHhlNSwweDgzLDB4M2EsMHhmNSwweDgzLDB4ZTQsMHg5MywweDIyfSwKKyAgMTYsMHgzNmQ4LDAsezB4YzIsMHhkNSwweGVjLDB4MzAsMHhlNywweDA5LDB4YjIsMHhkNSwweGU0LDB4YzMsMHg5ZCwweGZkLDB4ZTQsMHg5YywweGZjLDB4ZWV9LAorICAxNiwweDM2ZTgsMCx7MHgzMCwweGU3LDB4MTUsMHhiMiwweGQ1LDB4ZTQsMHhjMywweDlmLDB4ZmYsMHhlNCwweDllLDB4ZmUsMHgxMiwweDM4LDB4MWYsMHhjM30sCisgIDE2LDB4MzZmOCwwLHsweGU0LDB4OWQsMHhmZCwweGU0LDB4OWMsMHhmYywweDgwLDB4MDMsMHgxMiwweDM4LDB4MWYsMHgzMCwweGQ1LDB4MDcsMHhjMywweGU0fSwKKyAgIDYsMHgzNzA4LDAsezB4OWYsMHhmZiwweGU0LDB4OWUsMHhmZSwweDIyfSwKKyAgMTYsMHgzNzBlLDAsezB4YmIsMHgwMSwweDEwLDB4ZTUsMHg4MiwweDI5LDB4ZjUsMHg4MiwweGU1LDB4ODMsMHgzYSwweGY1LDB4ODMsMHhlMCwweGY1LDB4ZjB9LAorICAxNiwweDM3MWUsMCx7MHhhMywweGUwLDB4MjIsMHg1MCwweDA5LDB4ZTksMHgyNSwweDgyLDB4ZjgsMHg4NiwweGYwLDB4MDgsMHhlNiwweDIyLDB4YmIsMHhmZX0sCisgIDE2LDB4MzcyZSwwLHsweDBhLDB4ZTksMHgyNSwweDgyLDB4ZjgsMHhlMiwweGY1LDB4ZjAsMHgwOCwweGUyLDB4MjIsMHhlNSwweDgzLDB4MmEsMHhmNSwweDgzfSwKKyAgIDgsMHgzNzNlLDAsezB4ZTksMHg5MywweGY1LDB4ZjAsMHhhMywweGU5LDB4OTMsMHgyMn0sCisgIDE2LDB4Mzc0NiwwLHsweGU4LDB4OGYsMHhmMCwweGE0LDB4Y2MsMHg4YiwweGYwLDB4YTQsMHgyYywweGZjLDB4ZTksMHg4ZSwweGYwLDB4YTQsMHgyYywweGZjfSwKKyAgMTYsMHgzNzU2LDAsezB4OGEsMHhmMCwweGVkLDB4YTQsMHgyYywweGZjLDB4ZWEsMHg4ZSwweGYwLDB4YTQsMHhjZCwweGE4LDB4ZjAsMHg4YiwweGYwLDB4YTR9LAorICAxNiwweDM3NjYsMCx7MHgyZCwweGNjLDB4MzgsMHgyNSwweGYwLDB4ZmQsMHhlOSwweDhmLDB4ZjAsMHhhNCwweDJjLDB4Y2QsMHgzNSwweGYwLDB4ZmMsMHhlYn0sCisgIDE2LDB4Mzc3NiwwLHsweDhlLDB4ZjAsMHhhNCwweGZlLDB4YTksMHhmMCwweGViLDB4OGYsMHhmMCwweGE0LDB4Y2YsMHhjNSwweGYwLDB4MmUsMHhjZCwweDM5fSwKKyAgMTUsMHgzNzg2LDAsezB4ZmUsMHhlNCwweDNjLDB4ZmMsMHhlYSwweGE0LDB4MmQsMHhjZSwweDM1LDB4ZjAsMHhmZCwweGU0LDB4M2MsMHhmYywweDIyfSwKKyAgMTYsMHgzNzk1LDAsezB4ZWIsMHg5ZiwweGY1LDB4ZjAsMHhlYSwweDllLDB4NDIsMHhmMCwweGU5LDB4OWQsMHg0MiwweGYwLDB4ZWMsMHg2NCwweDgwLDB4Yzh9LAorICAgNiwweDM3YTUsMCx7MHg2NCwweDgwLDB4OTgsMHg0NSwweGYwLDB4MjJ9LAorICAxNiwweDM3YWIsMCx7MHhlYiwweDlmLDB4ZjUsMHhmMCwweGVhLDB4OWUsMHg0MiwweGYwLDB4ZTksMHg5ZCwweDQyLDB4ZjAsMHhlOCwweDljLDB4NDUsMHhmMH0sCisgICAxLDB4MzdiYiwwLHsweDIyfSwKKyAgMTIsMHgzN2JjLDAsezB4ZWMsMHhmMCwweGEzLDB4ZWQsMHhmMCwweGEzLDB4ZWUsMHhmMCwweGEzLDB4ZWYsMHhmMCwweDIyfSwKKyAgMTYsMHgzN2M4LDAsezB4YTgsMHg4MiwweDg1LDB4ODMsMHhmMCwweGQwLDB4ODMsMHhkMCwweDgyLDB4MTIsMHgzNywweGRmLDB4MTIsMHgzNywweGRmLDB4MTJ9LAorICAxNiwweDM3ZDgsMCx7MHgzNywweGRmLDB4MTIsMHgzNywweGRmLDB4ZTQsMHg3MywweGU0LDB4OTMsMHhhMywweGM1LDB4ODMsMHhjNSwweGYwLDB4YzUsMHg4M30sCisgIDE2LDB4MzdlOCwwLHsweGM4LDB4YzUsMHg4MiwweGM4LDB4ZjAsMHhhMywweGM1LDB4ODMsMHhjNSwweGYwLDB4YzUsMHg4MywweGM4LDB4YzUsMHg4MiwweGM4fSwKKyAgIDEsMHgzN2Y4LDAsezB4MjJ9LAorICAxNiwweDM3ZjksMCx7MHhkMCwweDgzLDB4ZDAsMHg4MiwweGY4LDB4ZTQsMHg5MywweDcwLDB4MTIsMHg3NCwweDAxLDB4OTMsMHg3MCwweDBkLDB4YTMsMHhhM30sCisgIDE2LDB4MzgwOSwwLHsweDkzLDB4ZjgsMHg3NCwweDAxLDB4OTMsMHhmNSwweDgyLDB4ODgsMHg4MywweGU0LDB4NzMsMHg3NCwweDAyLDB4OTMsMHg2OCwweDYwfSwKKyAgIDYsMHgzODE5LDAsezB4ZWYsMHhhMywweGEzLDB4YTMsMHg4MCwweGRmfSwKKyAgMTYsMHgzODFmLDAsezB4YmMsMHgwMCwweDBiLDB4YmUsMHgwMCwweDI5LDB4ZWYsMHg4ZCwweGYwLDB4ODQsMHhmZiwweGFkLDB4ZjAsMHgyMiwweGU0LDB4Y2N9LAorICAxNiwweDM4MmYsMCx7MHhmOCwweDc1LDB4ZjAsMHgwOCwweGVmLDB4MmYsMHhmZiwweGVlLDB4MzMsMHhmZSwweGVjLDB4MzMsMHhmYywweGVlLDB4OWQsMHhlY30sCisgIDE2LDB4MzgzZiwwLHsweDk4LDB4NDAsMHgwNSwweGZjLDB4ZWUsMHg5ZCwweGZlLDB4MGYsMHhkNSwweGYwLDB4ZTksMHhlNCwweGNlLDB4ZmQsMHgyMiwweGVkfSwKKyAgMTYsMHgzODRmLDAsezB4ZjgsMHhmNSwweGYwLDB4ZWUsMHg4NCwweDIwLDB4ZDIsMHgxYywweGZlLDB4YWQsMHhmMCwweDc1LDB4ZjAsMHgwOCwweGVmLDB4MmZ9LAorICAxNiwweDM4NWYsMCx7MHhmZiwweGVkLDB4MzMsMHhmZCwweDQwLDB4MDcsMHg5OCwweDUwLDB4MDYsMHhkNSwweGYwLDB4ZjIsMHgyMiwweGMzLDB4OTgsMHhmZH0sCisgICA1LDB4Mzg2ZiwwLHsweDBmLDB4ZDUsMHhmMCwweGVhLDB4MjJ9LAorICAxNiwweDM4NzQsMCx7MHhlNCwweDkwLDB4NzYsMHgyOSwweGYwLDB4OTAsMHg3NiwweDI5LDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0Mn0sCisgIDE2LDB4Mzg4NCwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4N2YsMHhlYywweGUwLDB4ZmQsMHhlZSwweDZkfSwKKyAgMTYsMHgzODk0LDAsezB4NjAsMHgwZSwweGVmLDB4YzMsMHg5NCwweDA2LDB4NTAsMHgwOCwweDkwLDB4NzYsMHgyOSwweGUwLDB4MDQsMHhmMCwweDgwLDB4ZDV9LAorICAxNiwweDM4YTQsMCx7MHhlZiwweGI0LDB4MDYsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHhlZiwweDc1LDB4ZjAsMHgwZn0sCisgIDE2LDB4MzhiNCwwLHsweGE0LDB4MjQsMHg0MSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDc2LDB4MmEsMHhmMCwweDI0fSwKKyAgMTYsMHgzOGM0LDAsezB4YmYsMHg3MCwweDAyLDB4NDEsMHg0MSwweDI0LDB4ZTAsMHg3MCwweDAyLDB4NDEsMHgxMiwweDI0LDB4MjEsMHg2MCwweDAyLDB4NDF9LAorICAxNiwweDM4ZDQsMCx7MHgzYSwweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHhmZSwweDYwLDB4N2QsMHgxNCwweDcwLDB4MDIsMHgyMSwweGIyLDB4MjQsMHgwMn0sCisgIDE2LDB4MzhlNCwwLHsweDYwLDB4MDIsMHg0MSwweDBhLDB4MTIsMHgxNywweDUxLDB4OTAsMHg3NiwweDQyLDB4ZTAsMHhmYywweGEzLDB4ZTAsMHhmZCwweGEzfSwKKyAgMTYsMHgzOGY0LDAsezB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgyOSwweGUwLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQzLDB4ZjV9LAorICAxNiwweDM5MDQsMCx7MHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHgxMiwweDM3LDB4YmMsMHg5MCwweDc2LDB4MTksMHhlMCwweGZmLDB4YjQsMHgwMX0sCisgIDE2LDB4MzkxNCwwLHsweDEyLDB4OTAsMHg3NiwweDdjLDB4NzQsMHg2NywweGYwLDB4OTAsMHg3NiwweDdkLDB4NzQsMHgwNiwweGYwLDB4OTAsMHg3NiwweDdlfSwKKyAgMTYsMHgzOTI0LDAsezB4NzQsMHgwYiwweGYwLDB4ZWYsMHhiNCwweDAyLDB4MGYsMHhlNCwweDkwLDB4NzYsMHg3YywweGYwLDB4OTAsMHg3NiwweDdkLDB4ZjB9LAorICAxNiwweDM5MzQsMCx7MHg5MCwweDc2LDB4N2UsMHg3NCwweDBjLDB4ZjAsMHhlZiwweGI0LDB4MDMsMHgwZiwweGU0LDB4OTAsMHg3NiwweDdjLDB4ZjAsMHg5MH0sCisgIDE2LDB4Mzk0NCwwLHsweDc2LDB4N2QsMHhmMCwweDkwLDB4NzYsMHg3ZSwweDc0LDB4MTgsMHhmMCwweDkwLDB4NzYsMHgxYSwweDc0LDB4MDEsMHhmMCwweDEyfSwKKyAgMTYsMHgzOTU0LDAsezB4M2UsMHg5ZiwweDEyLDB4MTgsMHgwMCwweDIyLDB4OTAsMHg3ZSwweGMyLDB4ZTAsMHhmZiwweGU0LDB4ZmMsMHhmZCwweGZlLDB4ZmJ9LAorICAxNiwweDM5NjQsMCx7MHhmYSwweDc5LDB4MDEsMHhmOCwweDEyLDB4MzcsMHg0NiwweGM4LDB4ZWMsMHhjOCwweGM5LDB4ZWQsMHhjOSwweGNhLDB4ZWUsMHhjYX0sCisgIDE2LDB4Mzk3NCwwLHsweGNiLDB4ZWYsMHhjYiwweDkwLDB4N2UsMHhjMSwweGUwLDB4ZmUsMHhlNCwweGZjLDB4ZmQsMHgyYiwweGZiLDB4ZWEsMHgzZSwweGZhfSwKKyAgMTYsMHgzOTg0LDAsezB4ZWQsMHgzOSwweGY5LDB4ZWMsMHgzOCwweGY4LDB4OTAsMHg3ZSwweGMwLDB4ZTAsMHhmZiwweGU0LDB4ZmUsMHhlYiwweDJmLDB4ZmZ9LAorICAxNiwweDM5OTQsMCx7MHhlZSwweDNhLDB4ZmUsMHhlZCwweDM5LDB4ZmQsMHhlYywweDM4LDB4ZmMsMHg5MCwweDc2LDB4MjksMHhlMCwweDc1LDB4ZjAsMHgwZn0sCisgIDE2LDB4MzlhNCwwLHsweGE0LDB4MjQsMHg0NywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4MTIsMHgzNywweGJjLDB4MjIsMHg5MCwweDdlfSwKKyAgMTYsMHgzOWI0LDAsezB4YzIsMHhlMCwweGZmLDB4ZTQsMHhmYywweGZkLDB4ZmUsMHhmYiwweGZhLDB4NzksMHgwMSwweGY4LDB4MTIsMHgzNywweDQ2LDB4Yzh9LAorICAxNiwweDM5YzQsMCx7MHhlYywweGM4LDB4YzksMHhlZCwweGM5LDB4Y2EsMHhlZSwweGNhLDB4Y2IsMHhlZiwweGNiLDB4OTAsMHg3ZSwweGMxLDB4ZTAsMHhmZX0sCisgIDE2LDB4MzlkNCwwLHsweGU0LDB4ZmMsMHhmZCwweDJiLDB4ZmIsMHhlYSwweDNlLDB4ZmEsMHhlZCwweDM5LDB4ZjksMHhlYywweDM4LDB4ZjgsMHg5MCwweDdlfSwKKyAgMTYsMHgzOWU0LDAsezB4YzAsMHhlMCwweGZmLDB4ZTQsMHhmZSwweGViLDB4MmYsMHhmZiwweGVlLDB4M2EsMHhmZSwweGVkLDB4MzksMHhmZCwweGVjLDB4Mzh9LAorICAxNiwweDM5ZjQsMCx7MHhmYywweDkwLDB4NzYsMHgyOSwweGUwLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDRiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NX0sCisgIDE2LDB4M2EwNCwwLHsweGY1LDB4ODMsMHgxMiwweDM3LDB4YmMsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmfSwKKyAgMTYsMHgzYTE0LDAsezB4ZTksMHhlMCwweDE0LDB4NzAsMHgxOSwweDkwLDB4N2UsMHhjMCwweGUwLDB4ZmYsMHg5MCwweDc2LDB4MjksMHhlMCwweDc1LDB4ZjB9LAorICAxNiwweDNhMjQsMCx7MHgwZiwweGE0LDB4MjQsMHg0ZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDIyLDB4OTAsMHg3Zn0sCisgIDE0LDB4M2EzNCwwLHsweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjJ9LAorICAxNiwweDNhNDIsMCx7MHhlNCwweDkwLDB4NzYsMHgzNSwweGYwLDB4OTAsMHg3NiwweDM1LDB4ZTAsMHhmZiwweGMzLDB4OTQsMHgwMywweDQwLDB4MDIsMHg0MX0sCisgIDE2LDB4M2E1MiwwLHsweGZmLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmfSwKKyAgMTYsMHgzYTYyLDAsezB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTR9LAorICAxNiwweDNhNzIsMCx7MHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NH0sCisgIDE2LDB4M2E4MiwwLHsweGYwLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzfSwKKyAgMTYsMHgzYTkyLDAsezB4NzQsMHhmZiwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjV9LAorICAxNiwweDNhYTIsMCx7MHg4MywweGU0LDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNX0sCisgIDE2LDB4M2FiMiwwLHsweDgzLDB4NzQsMHg4MCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1fSwKKyAgMTYsMHgzYWMyLDAsezB4ZjUsMHg4MywweGU0LDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzV9LAorICAxNiwweDNhZDIsMCx7MHhmNSwweDgzLDB4ZTQsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NX0sCisgIDE2LDB4M2FlMiwwLHsweGY1LDB4ODMsMHhlNCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1fSwKKyAgMTYsMHgzYWYyLDAsezB4ZjUsMHg4MywweDc0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHgzNSwweGUwLDB4MDQsMHhmMCwweDQxLDB4NDcsMHg5MCwweDc2LDB4M2N9LAorICAxNiwweDNiMDIsMCx7MHg3NCwweDBhLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHg5MCwweDc2LDB4MzUsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDc2LDB4M2MsMHhlMH0sCisgIDE2LDB4M2IxMiwwLHsweGZmLDB4OTAsMHg3NiwweDM1LDB4ZTAsMHhmZSwweGMzLDB4OWYsMHg0MCwweDAyLDB4NjEsMHhkMiwweDkwLDB4NzYsMHgzZCwweGUwfSwKKyAgMTYsMHgzYjIyLDAsezB4ZmYsMHgwNCwweGYwLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjV9LAorICAxNiwweDNiMzIsMCx7MHg4MywweGVmLDB4ZjAsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNX0sCisgIDE2LDB4M2I0MiwwLHsweDgzLDB4ZTQsMHhmMCwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1fSwKKyAgMTYsMHgzYjUyLDAsezB4ODMsMHg3NCwweDVlLDB4ZjAsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzV9LAorICAxNiwweDNiNjIsMCx7MHhmNSwweDgzLDB4NzQsMHhiYSwweGYwLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWUsMHhmNSwweDgyLDB4ZTQsMHgzNH0sCisgIDE2LDB4M2I3MiwwLHsweDc1LDB4ZjUsMHg4MywweDc0LDB4MDUsMHhmMCwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFmLDB4ZjUsMHg4MiwweGU0fSwKKyAgMTYsMHgzYjgyLDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDgwLDB4ZjAsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMCwweGY1LDB4ODJ9LAorICAxNiwweDNiOTIsMCx7MHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTQsMHhmMCwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIxLDB4ZjUsMHg4Mn0sCisgIDE2LDB4M2JhMiwwLHsweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNCwweGYwLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjIsMHhmNSwweDgyfSwKKyAgMTYsMHgzYmIyLDAsezB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MTUsMHhmMCwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIzLDB4ZjV9LAorICAxNiwweDNiYzIsMCx7MHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNCwweGYwLDB4OTAsMHg3NiwweDM1LDB4ZTAsMHgwNCwweGYwLDB4NjEsMHgwZX0sCisgICAxLDB4M2JkMiwwLHsweDIyfSwKKyAgMTYsMHgzYmQzLDAsezB4ZTQsMHg5MCwweDc2LDB4MzYsMHhmMCwweGUwLDB4ZmIsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDEsMHhmNSwweDgyLDB4ZTR9LAorICAxNiwweDNiZTMsMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4NDAsMHhmMCwweGViLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQyLDB4ZjUsMHg4Mn0sCisgIDE2LDB4M2JmMywwLHsweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDBhLDB4ZjAsMHhlYiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MywweGY1fSwKKyAgMTYsMHgzYzAzLDAsezB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4MTIsMHgzNywweGM4LDB4MDAsMHgwMCwweGFjLDB4NDQsMHhlYiwweDc1LDB4ZjB9LAorICAxNiwweDNjMTMsMCx7MHgwZiwweGE0LDB4MjQsMHg0NywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4MTIsMHgzNywweGM4LDB4MDAsMHgwMH0sCisgIDE2LDB4M2MyMywwLHsweGFjLDB4NDQsMHhlYiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0YiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzfSwKKyAgMTYsMHgzYzMzLDAsezB4MTIsMHgzNywweGM4LDB4MDAsMHgwMSwweDc3LDB4MDAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZiLDB4NzV9LAorICAxNiwweDNjNDMsMCx7MHhmMCwweDBmLDB4YTQsMHgyNCwweDQxLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDQwLDB4ZjAsMHhlYn0sCisgIDE2LDB4M2M1MywwLHsweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHg4YywweGYwfSwKKyAgMTYsMHgzYzYzLDAsezB4ZWIsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDEyLDB4Mzd9LAorICAxNiwweDNjNzMsMCx7MHhjOCwweDAwLDB4MDAsMHhhYywweDQ0LDB4ZWIsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDcsMHhmNSwweDgyLDB4ZTQsMHgzNH0sCisgIDE2LDB4M2M4MywwLHsweDc1LDB4ZjUsMHg4MywweDEyLDB4MzcsMHhjOCwweDAwLDB4MDAsMHhhYywweDQ0LDB4ZWIsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0fSwKKyAgMTYsMHgzYzkzLDAsezB4NGIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDEyLDB4MzcsMHhjOCwweDAwLDB4MDEsMHg3NywweDAwLDB4OTB9LAorICAxNiwweDNjYTMsMCx7MHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MSwweGY1LDB4ODIsMHhlNH0sCisgIDE2LDB4M2NiMywwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHg0MCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDIsMHhmNSwweDgyfSwKKyAgMTYsMHgzY2MzLDAsezB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4OGYsMHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmZ9LAorICAxNiwweDNjZDMsMCx7MHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4NDEsMHhmMH0sCisgIDE2LDB4M2NlMywwLHsweGVmLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDg0fSwKKyAgMTYsMHgzY2YzLDAsezB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQxLDB4ZjV9LAorICAxNiwweDNkMDMsMCx7MHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDYxLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0Mn0sCisgIDE2LDB4M2QxMywwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHg4MSwweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwfSwKKyAgMTYsMHgzZDIzLDAsezB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzR9LAorICAxNiwweDNkMzMsMCx7MHg2MSwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4M30sCisgICA0LDB4M2Q0MywwLHsweDc0LDB4MDEsMHhmMCwweDIyfSwKKyAgMTYsMHgzZDQ3LDAsezB4YzAsMHhlMCwweGMwLDB4ZjAsMHhjMCwweDgzLDB4YzAsMHg4MiwweGMwLDB4ZDAsMHhlOCwweGMwLDB4ZTAsMHhlOSwweGMwLDB4ZTB9LAorICAxNiwweDNkNTcsMCx7MHhlYSwweGMwLDB4ZTAsMHhlYiwweGMwLDB4ZTAsMHhlYywweGMwLDB4ZTAsMHhlZCwweGMwLDB4ZTAsMHhlZSwweGMwLDB4ZTAsMHhlZn0sCisgIDE2LDB4M2Q2NywwLHsweGMwLDB4ZTAsMHg5MCwweDdmLDB4YTIsMHhlMCwweDkwLDB4NzYsMHg3ZiwweGYwLDB4OTAsMHg3ZiwweDc0LDB4ZTAsMHg5MCwweDc2fSwKKyAgMTYsMHgzZDc3LDAsezB4ODcsMHhmMCwweDkwLDB4N2YsMHg3NSwweGUwLDB4OTAsMHg3NiwweDg4LDB4ZjAsMHg5MCwweDdmLDB4OTgsMHhlMCwweDQ0LDB4MDJ9LAorICAxNiwweDNkODcsMCx7MHhmMCwweDkwLDB4NzYsMHg5NiwweGUwLDB4ZmYsMHgyMCwweGUxLDB4MGMsMHg0NCwweDAyLDB4ZjAsMHg5MCwweDgwLDB4MDMsMHhmMH0sCisgIDE2LDB4M2Q5NywwLHsweGQyLDB4MzIsMHgxMiwweDRiLDB4MjgsMHg5MCwweDc2LDB4N2YsMHhlMCwweDIwLDB4ZTIsMHg1MCwweDkwLDB4NzYsMHg4NywweGUwfSwKKyAgMTYsMHgzZGE3LDAsezB4ZmUsMHhhMywweGUwLDB4N2MsMHgwMCwweDI0LDB4MDAsMHhmNSwweDM0LDB4ZWMsMHgzZSwweGY1LDB4MzMsMHg5MCwweDc2LDB4OTh9LAorICAxNiwweDNkYjcsMCx7MHhlMCwweGZkLDB4YWUsMHgzMywweGFmLDB4MzQsMHgxMiwweDM2LDB4ZDgsMHg5MCwweDc2LDB4ODcsMHhlZiwweGYwLDB4ZDIsMHgyZn0sCisgIDE2LDB4M2RjNywwLHsweDMwLDB4MzEsMHgyOSwweDIwLDB4M2YsMHgyNiwweGMyLDB4MzEsMHg5MCwweDdmLDB4OTQsMHhlMCwweDU0LDB4Y2YsMHhmMCwweDkwfSwKKyAgMTYsMHgzZGQ3LDAsezB4N2YsMHg5YSwweGUwLDB4MzAsMHhlNCwweDA0LDB4ZDIsMHgyZCwweGMyLDB4MmMsMHg5MCwweDdmLDB4OWEsMHhlMCwweDIwLDB4ZTV9LAorICAxNiwweDNkZTcsMCx7MHgwNCwweGMyLDB4MmQsMHhkMiwweDJjLDB4OTAsMHg3ZiwweDk0LDB4ZTAsMHg0NCwweDMwLDB4ZjAsMHgxMiwweDQ4LDB4YmQsMHgxMn0sCisgIDE2LDB4M2RmNywwLHsweDFiLDB4MDQsMHgzMCwweDJmLDB4MTIsMHgxMiwweDQyLDB4MWYsMHhjMiwweDJmLDB4NzUsMHhlOCwweDAxLDB4MTIsMHgxNiwweDhhfSwKKyAgMTYsMHgzZTA3LDAsezB4NzUsMHhlOCwweDBkLDB4ZDIsMHgyYiwweDgwLDB4MDUsMHg3NSwweGU4LDB4MDEsMHhjMiwweDJiLDB4MjAsMHgyYiwweDM0LDB4OTB9LAorICAxNiwweDNlMTcsMCx7MHg3NiwweDE5LDB4ZTAsMHhmZiwweGI0LDB4MDEsMHgwZSwweDkwLDB4NzYsMHg3YywweDc0LDB4NjcsMHhmMCwweGEzLDB4NzQsMHgwNn0sCisgIDE2LDB4M2UyNywwLHsweGYwLDB4YTMsMHg3NCwweDBiLDB4ZjAsMHhlZiwweGI0LDB4MDIsMHgwYiwweDkwLDB4NzYsMHg3YywweGU0LDB4ZjAsMHhhMywweGYwfSwKKyAgMTYsMHgzZTM3LDAsezB4YTMsMHg3NCwweDBjLDB4ZjAsMHhlZiwweGI0LDB4MDMsMHgwYiwweDkwLDB4NzYsMHg3YywweGU0LDB4ZjAsMHhhMywweGYwLDB4YTN9LAorICAxNiwweDNlNDcsMCx7MHg3NCwweDE4LDB4ZjAsMHg3NSwweGNhLDB4ZDMsMHg3NSwweGNiLDB4ZmUsMHhkMiwweGNhLDB4MzAsMHgzNCwweDA0LDB4YzIsMHgzNH0sCisgIDE2LDB4M2U1NywwLHsweDgwLDB4MDIsMHhkMiwweDM0LDB4MzAsMHgzNCwweDBkLDB4OTAsMHg3NiwweDg5LDB4ZTAsMHhjMywweDk0LDB4MDMsMHg0MCwweDA0fSwKKyAgMTYsMHgzZTY3LDAsezB4ZTAsMHgyNCwweGZkLDB4ZjAsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDAyLDB4ZjAsMHhmMCwweDkwLDB4N2Z9LAorICAxNiwweDNlNzcsMCx7MHg5OCwweGUwLDB4NTQsMHhmZCwweGYwLDB4ZDAsMHhlMCwweGZmLDB4ZDAsMHhlMCwweGZlLDB4ZDAsMHhlMCwweGZkLDB4ZDAsMHhlMH0sCisgIDE2LDB4M2U4NywwLHsweGZjLDB4ZDAsMHhlMCwweGZiLDB4ZDAsMHhlMCwweGZhLDB4ZDAsMHhlMCwweGY5LDB4ZDAsMHhlMCwweGY4LDB4ZDAsMHhkMCwweGQwfSwKKyAgIDgsMHgzZTk3LDAsezB4ODIsMHhkMCwweDgzLDB4ZDAsMHhmMCwweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4M2U5ZiwwLHsweDkwLDB4NzYsMHg5MiwweGUwLDB4MTQsMHg2MCwweDFkLDB4MTQsMHg3MCwweDAyLDB4ZTEsMHg1NCwweDI0LDB4MDIsMHg2MCwweDAyfSwKKyAgMTYsMHgzZWFmLDAsezB4ZTEsMHhlNCwweDkwLDB4NzYsMHg5NCwweDc0LDB4MDEsMHhmMCwweDkwLDB4ODAsMHgwMCwweGYwLDB4ZTQsMHg5MCwweDc2LDB4OGV9LAorICAxNiwweDNlYmYsMCx7MHhmMCwweGQyLDB4MzEsMHgyMiwweDkwLDB4NzYsMHgxOSwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MWIsMHhlNCwweDkwLDB4N2YsMHhmMn0sCisgIDE2LDB4M2VjZiwwLHsweGYwLDB4OTAsMHg3ZiwweGYzLDB4NzQsMHgzMCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDk3fSwKKyAgMTYsMHgzZWRmLDAsezB4ZTAsMHg1NCwweGZkLDB4ZjAsMHg1NCwweGZiLDB4ZjAsMHhlZiwweGI0LDB4MDIsMHgxYiwweGU0LDB4OTAsMHg3ZiwweGYyLDB4ZjB9LAorICAxNiwweDNlZWYsMCx7MHg5MCwweDdmLDB4ZjMsMHg3NCwweDM0LDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMH0sCisgIDE2LDB4M2VmZiwwLHsweDQ0LDB4MDIsMHhmMCwweDU0LDB4ZmIsMHhmMCwweGVmLDB4YjQsMHgwMywweDE4LDB4ZTQsMHg5MCwweDdmLDB4ZjIsMHhmMCwweDkwfSwKKyAgMTYsMHgzZjBmLDAsezB4N2YsMHhmMywweDc0LDB4NjQsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NDR9LAorICAxNiwweDNmMWYsMCx7MHgwNCwweGYwLDB4OTAsMHg3NiwweDk0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDgwLDB4MDAsMHhmMCwweDMwLDB4M2YsMHgwOX0sCisgIDE2LDB4M2YyZiwwLHsweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZSwweGYwLDB4ODAsMHgwNywweDkwLDB4NzYsMHg5NywweGUwLDB4NDQsMHgwMSwweGYwfSwKKyAgMTYsMHgzZjNmLDAsezB4OTAsMHg3NiwweDk3LDB4ZTAsMHg5MCwweDgwLDB4MDIsMHhmMCwweDkwLDB4NzYsMHg5OCwweDc0LDB4MDQsMHhmMCwweDkwLDB4NzZ9LAorICAxNiwweDNmNGYsMCx7MHg4ZSwweDc0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3NiwweDE5LDB4ZTAsMHhmZiwweGI0LDB4MDEsMHgxYiwweGU0LDB4OTAsMHg3Zn0sCisgIDE2LDB4M2Y1ZiwwLHsweGYyLDB4ZjAsMHg5MCwweDdmLDB4ZjMsMHg3NCwweDQ0LDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2fSwKKyAgMTYsMHgzZjZmLDAsezB4OTcsMHhlMCwweDU0LDB4ZmQsMHhmMCwweDU0LDB4ZmIsMHhmMCwweGVmLDB4YjQsMHgwMiwweDFiLDB4ZTQsMHg5MCwweDdmLDB4ZjJ9LAorICAxNiwweDNmN2YsMCx7MHhmMCwweDkwLDB4N2YsMHhmMywweDc0LDB4NGMsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg5N30sCisgIDE2LDB4M2Y4ZiwwLHsweGUwLDB4NDQsMHgwMiwweGYwLDB4NTQsMHhmYiwweGYwLDB4ZWYsMHhiNCwweDAzLDB4MTgsMHhlNCwweDkwLDB4N2YsMHhmMiwweGYwfSwKKyAgMTYsMHgzZjlmLDAsezB4OTAsMHg3ZiwweGYzLDB4NzQsMHg5NCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTB9LAorICAxNiwweDNmYWYsMCx7MHg0NCwweDA0LDB4ZjAsMHg5MCwweDc2LDB4OTQsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDkwLDB4ODAsMHgwMCwweGYwLDB4MzAsMHgzZn0sCisgIDE2LDB4M2ZiZiwwLHsweDA5LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg0NCwweDAxfSwKKyAgMTYsMHgzZmNmLDAsezB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDkwLDB4ODAsMHgwMiwweGYwLDB4OTAsMHg3NiwweDk4LDB4NzQsMHgwNiwweGYwLDB4OTB9LAorICAgNiwweDNmZGYsMCx7MHg3NiwweDhlLDB4NzQsMHgwMiwweGYwLDB4MjJ9LAorICAxNiwweDNmZTUsMCx7MHg5MCwweDdmLDB4ZWEsMHhlMCwweDkwLDB4NzYsMHg4MiwweGYwLDB4ZTQsMHg5MCwweDc2LDB4OTEsMHhmMCwweDkwLDB4NzYsMHg5Mn0sCisgIDExLDB4M2ZmNSwwLHsweGYwLDB4OTAsMHg3NiwweDkwLDB4ZjAsMHg5MCwweDc2LDB4OTMsMHhmMCwweGQzLDB4MjJ9LAorICAxNiwweDQwMDAsMCx7MHhlNSwweDExLDB4ZDMsMHg5NCwweDAwLDB4NTAsMHgwMiwweDIxLDB4MDYsMHg5MCwweDc2LDB4ODksMHhlMCwweGMzLDB4OTQsMHgwOH0sCisgIDE2LDB4NDAxMCwwLHsweDQwLDB4MDIsMHgyMSwweDA2LDB4NzQsMHg0MCwweDI1LDB4MGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdlLDB4ZjUsMHg4MywweGUwfSwKKyAgMTYsMHg0MDIwLDAsezB4ZjUsMHgxNywweGU1LDB4MGQsMHg2MCwweDBlLDB4OTAsMHg4MCwweDA1LDB4ZTUsMHgxNywweGYwLDB4OTAsMHg3NiwweDg5LDB4ZTB9LAorICAxNiwweDQwMzAsMCx7MHgwNCwweGYwLDB4MDEsMHhkYSwweGU1LDB4MTcsMHgxMiwweDM3LDB4ZjksMHg0MCwweGMxLDB4MDIsMHg0MCwweDY3LDB4MDUsMHg0MH0sCisgIDE2LDB4NDA0MCwwLHsweDdhLDB4MDYsMHg0MCwweDk4LDB4MDcsMHg0MCwweGMxLDB4MGMsMHg0MCwweGMxLDB4MGQsMHg0MCwweGM3LDB4MGYsMHg0MCwweGNifSwKKyAgMTYsMHg0MDUwLDAsezB4ZjYsMHg0MCwweGNiLDB4ZjgsMHg0MCwweGNiLDB4ZmEsMHg0MCwweGNiLDB4ZmIsMHg0MCwweGNiLDB4ZmMsMHg0MCwweGNiLDB4ZmV9LAorICAxNiwweDQwNjAsMCx7MHg0MCwweGNiLDB4ZmYsMHgwMCwweDAwLDB4NDAsMHhkYSwweDkwLDB4N2UsMHg0MSwweGUwLDB4OTAsMHg4MCwweDA1LDB4ZjAsMHg5MH0sCisgIDE2LDB4NDA3MCwwLHsweDc2LDB4ODksMHhlMCwweDA0LDB4ZjAsMHg3NSwweDExLDB4MDEsMHg4MCwweDYwLDB4OTAsMHg3ZSwweDQxLDB4ZTAsMHg5MCwweDgwfSwKKyAgMTYsMHg0MDgwLDAsezB4MDUsMHhmMCwweDkwLDB4N2UsMHg0MiwweGUwLDB4OTAsMHg4MCwweDA1LDB4ZjAsMHg5MCwweDc2LDB4ODksMHhlMCwweDA0LDB4ZjB9LAorICAxNiwweDQwOTAsMCx7MHhlMCwweDA0LDB4ZjAsMHg3NSwweDExLDB4MDEsMHg4MCwweDQyLDB4OTAsMHg3ZSwweDQxLDB4ZTAsMHg5MCwweDgwLDB4MDUsMHhmMH0sCisgIDE2LDB4NDBhMCwwLHsweDkwLDB4N2UsMHg0MiwweGUwLDB4OTAsMHg4MCwweDA1LDB4ZjAsMHg5MCwweDdlLDB4NDMsMHhlMCwweDkwLDB4ODAsMHgwNSwweGYwfSwKKyAgMTYsMHg0MGIwLDAsezB4OTAsMHg3NiwweDg5LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHgwNCwweGYwLDB4NzUsMHgxMSwweDAxLDB4ODB9LAorICAxNiwweDQwYzAsMCx7MHgxOSwweGQyLDB4M2IsMHhkMiwweDNjLDB4ODAsMHgxMywweGQyLDB4M2IsMHg4MCwweDBmLDB4OTAsMHg4MCwweDA1LDB4ZTUsMHgxN30sCisgIDE2LDB4NDBkMCwwLHsweGYwLDB4OTAsMHg3NiwweDg5LDB4ZTAsMHgwNCwweGYwLDB4NzUsMHgxMSwweDAxLDB4MjAsMHgzYiwweDA0LDB4MDUsMHgwZCwweDgwfSwKKyAgMTYsMHg0MGUwLDAsezB4MWYsMHgzMCwweDNjLDB4MWMsMHg5MCwweDdlLDB4NDEsMHhlMCwweDkwLDB4ODAsMHgwNSwweGYwLDB4OTAsMHg3ZSwweDQyLDB4ZTB9LAorICAxNiwweDQwZjAsMCx7MHg5MCwweDgwLDB4MDUsMHhmMCwweDkwLDB4NzYsMHg4OSwweGUwLDB4MDQsMHhmMCwweGUwLDB4MDQsMHhmMCwweDc1LDB4MTEsMHgwMX0sCisgIDE2LDB4NDEwMCwwLHsweDA1LDB4MGYsMHgxNSwweDExLDB4MDEsMHgwMCwweGU1LDB4MTEsMHg3MCwweDEwLDB4YzIsMHgzMywweGY1LDB4MGQsMHhmNSwweDBmfSwKKyAgMTEsMHg0MTEwLDAsezB4OTAsMHg3ZiwweGM3LDB4NzQsMHgwNCwweGYwLDB4YzIsMHgzYiwweGMyLDB4M2MsMHgyMn0sCisgIDE2LDB4NDExYiwwLHsweDkwLDB4NzYsMHg4ZCwweGUwLDB4NjQsMHgwMSwweDcwLDB4MjcsMHgzMCwweDI3LDB4MDgsMHhjMiwweDI3LDB4MTIsMHgwOCwweDAwfSwKKyAgMTYsMHg0MTJiLDAsezB4MTIsMHgxNywweDRhLDB4MzAsMHgyOCwweDA4LDB4YzIsMHgyOCwweDEyLDB4MzgsMHg3NCwweDEyLDB4MTcsMHg0YSwweDMwLDB4MmF9LAorICAxNiwweDQxM2IsMCx7MHgwZSwweGU0LDB4OTAsMHg3NiwweDhkLDB4ZjAsMHhjMiwweDJhLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAyLDB4ZjAsMHg5MH0sCisgIDE2LDB4NDE0YiwwLHsweDc2LDB4M2YsMHhlMCwweGI0LDB4MDEsMHgwNSwweGU0LDB4ZjAsMHgxMiwweDMyLDB4NmYsMHg5MCwweDc2LDB4NDEsMHhlMCwweGI0fSwKKyAgMTYsMHg0MTViLDAsezB4MDEsMHgwNSwweGU0LDB4ZjAsMHgxMiwweDM0LDB4OWEsMHg5MCwweDc2LDB4NDAsMHhlMCwweGI0LDB4MDEsMHgwMywweDEyLDB4MzR9LAorICAxNiwweDQxNmIsMCx7MHg5YSwweDEyLDB4MzAsMHgwMCwweDMwLDB4MzMsMHgwMywweDEyLDB4NDAsMHgwMCwweDkwLDB4N2YsMHg5YiwweGUwLDB4MjAsMHhlNH0sCisgIDE2LDB4NDE3YiwwLHsweDAyLDB4YzIsMHgzZiwweDkwLDB4N2YsMHg5YiwweGUwLDB4MzAsMHhlNCwweDAyLDB4ZDIsMHgzZiwweDkwLDB4N2YsMHg5YiwweGUwfSwKKyAgMTYsMHg0MThiLDAsezB4MjAsMHhlNSwweDAyLDB4YzIsMHgzZSwweDkwLDB4N2YsMHg5YiwweGUwLDB4MzAsMHhlNSwweDAyLDB4ZDIsMHgzZSwweGEyLDB4NDF9LAorICAxNiwweDQxOWIsMCx7MHgzMCwweDNmLDB4MDEsMHhiMywweDUwLDB4MWYsMHhhMiwweDNmLDB4OTIsMHg0MSwweDMwLDB4M2YsMHgwOSwweDkwLDB4NzYsMHg5N30sCisgIDE2LDB4NDFhYiwwLHsweGUwLDB4NTQsMHhmZSwweGYwLDB4ODAsMHgwNywweDkwLDB4NzYsMHg5NywweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDk3fSwKKyAgMTYsMHg0MWJiLDAsezB4ZTAsMHg5MCwweDgwLDB4MDIsMHhmMCwweDMwLDB4M2YsMHgzNCwweDkwLDB4NzYsMHgxOSwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MGV9LAorICAxNiwweDQxY2IsMCx7MHg5MCwweDc2LDB4N2MsMHg3NCwweDY3LDB4ZjAsMHhhMywweDc0LDB4MDYsMHhmMCwweGEzLDB4NzQsMHgwYiwweGYwLDB4ZWYsMHhiNH0sCisgIDE2LDB4NDFkYiwwLHsweDAyLDB4MGIsMHhlNCwweDkwLDB4NzYsMHg3YywweGYwLDB4YTMsMHhmMCwweGEzLDB4NzQsMHgwYywweGYwLDB4ZWYsMHhiNCwweDAzfSwKKyAgMTYsMHg0MWViLDAsezB4MGIsMHhlNCwweDkwLDB4NzYsMHg3YywweGYwLDB4YTMsMHhmMCwweGEzLDB4NzQsMHgxOCwweGYwLDB4YTIsMHg0MCwweDMwLDB4M2V9LAorICAxNiwweDQxZmIsMCx7MHgwMSwweGIzLDB4NTAsMHgxZiwweGEyLDB4M2UsMHg5MiwweDQwLDB4MzAsMHgzZSwweDA5LDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg0NH0sCisgIDE2LDB4NDIwYiwwLHsweDA0LDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg1NCwweGZiLDB4ZjAsMHg5MCwweDc2LDB4OTUsMHhlMCwweDkwfSwKKyAgIDQsMHg0MjFiLDAsezB4ODAsMHgwMSwweGYwLDB4MjJ9LAorICAxNiwweDQyMWYsMCx7MHg5MCwweDc2LDB4MTksMHhlMCwweDY0LDB4MDEsMHg3MCwweDM1LDB4OTAsMHg3NiwweDg3LDB4ZTAsMHhmZiwweGQzLDB4OTQsMHgyZH0sCisgIDE2LDB4NDIyZiwwLHsweDQwLDB4MmIsMHg5MCwweDc2LDB4ODYsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4ODUsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGQzfSwKKyAgMTYsMHg0MjNmLDAsezB4OTQsMHgwZiwweDQwLDB4MTksMHhlNCwweGYwLDB4ZWYsMHhkMywweDk0LDB4MzEsMHg0MCwweDA4LDB4OTAsMHg3NiwweDE5LDB4NzR9LAorICAxNiwweDQyNGYsMCx7MHgwMywweGYwLDB4ODAsMHgwNiwweDkwLDB4NzYsMHgxOSwweDc0LDB4MDIsMHhmMCwweDEyLDB4M2UsMHg5ZiwweDkwLDB4NzYsMHgxOX0sCisgIDE2LDB4NDI1ZiwwLHsweGUwLDB4YjQsMHgwMiwweDJjLDB4OTAsMHg3NiwweDg3LDB4ZTAsMHhmZiwweGMzLDB4OTQsMHgyZiwweDUwLDB4MjIsMHhlZiwweGQzfSwKKyAgMTYsMHg0MjZmLDAsezB4OTQsMHgyYSwweDQwLDB4MWMsMHg5MCwweDc2LDB4ODYsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4ODUsMHhlMCwweDA0LDB4ZjB9LAorICAxNiwweDQyN2YsMCx7MHhlMCwweGQzLDB4OTQsMHgwZiwweDQwLDB4MGEsMHhlNCwweGYwLDB4OTAsMHg3NiwweDE5LDB4MDQsMHhmMCwweDEyLDB4M2UsMHg5Zn0sCisgIDE2LDB4NDI4ZiwwLHsweDkwLDB4NzYsMHgxOSwweGUwLDB4YjQsMHgwMiwweDI2LDB4OTAsMHg3NiwweDg3LDB4ZTAsMHhkMywweDk0LDB4MzEsMHg0MCwweDFkfSwKKyAgMTYsMHg0MjlmLDAsezB4OTAsMHg3NiwweDg2LDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDg1LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhkMywweDk0LDB4MGZ9LAorICAxNiwweDQyYWYsMCx7MHg0MCwweDBiLDB4ZTQsMHhmMCwweDkwLDB4NzYsMHgxOSwweDc0LDB4MDMsMHhmMCwweDEyLDB4M2UsMHg5ZiwweDkwLDB4NzYsMHgxOX0sCisgIDE2LDB4NDJiZiwwLHsweGUwLDB4NjQsMHgwMywweDcwLDB4M2YsMHg5MCwweDc2LDB4ODcsMHhlMCwweGZmLDB4YzMsMHg5NCwweDVmLDB4NTAsMHgzNSwweDkwfSwKKyAgMTYsMHg0MmNmLDAsezB4NzYsMHg4NiwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHg4NSwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZDMsMHg5NCwweDBmLDB4NDB9LAorICAxNiwweDQyZGYsMCx7MHgyMywweGU0LDB4ZjAsMHhlZiwweGMzLDB4OTQsMHgyZiwweDUwLDB4MGMsMHhlZiwweGQzLDB4OTQsMHgyYSwweDQwLDB4MDYsMHg5MH0sCisgIDE2LDB4NDJlZiwwLHsweDc2LDB4MTksMHg3NCwweDAxLDB4ZjAsMHhlZiwweGQzLDB4OTQsMHgyZiwweDQwLDB4MDYsMHg5MCwweDc2LDB4MTksMHg3NCwweDAyfSwKKyAgMTYsMHg0MmZmLDAsezB4ZjAsMHgxMiwweDNlLDB4OWYsMHg5MCwweDc2LDB4ODYsMHhlMCwweDcwLDB4MDUsMHg5MCwweDc2LDB4ODUsMHhmMCwweDIyLDB4ZTR9LAorICAgNSwweDQzMGYsMCx7MHg5MCwweDc2LDB4ODYsMHhmMCwweDIyfSwKKyAgMTYsMHg0MzE0LDAsezB4ZTQsMHg5MCwweDc2LDB4OTYsMHhmMCwweDkwLDB4ODAsMHgwMywweGYwLDB4OTAsMHg3ZiwweGUwLDB4NzQsMHg5MCwweGYwLDB4OTB9LAorICAxNiwweDQzMjQsMCx7MHg3ZiwweGUxLDB4NzQsMHgwNCwweGYwLDB4ZTQsMHg5MCwweDdmLDB4ZGQsMHhmMCwweDkwLDB4N2YsMHhhMSwweGYwLDB4NTMsMHg4ZX0sCisgIDE2LDB4NDMzNCwwLHsweGY4LDB4NzUsMHg4OCwweDA1LDB4NzUsMHhiOCwweDIwLDB4NzUsMHhmOCwweDAxLDB4NDMsMHg4ZSwweDMwLDB4ZjUsMHhjOCwweDc1fSwKKyAgMTYsMHg0MzQ0LDAsezB4Y2EsMHg3ZiwweDc1LDB4Y2IsMHhmOCwweDQzLDB4YTgsMHgyMCwweDEyLDB4NDUsMHg2NSwweGMyLDB4MmMsMHhjMiwweDJkLDB4YzJ9LAorICAxNiwweDQzNTQsMCx7MHgyYiwweGMyLDB4MmYsMHg5MCwweDdmLDB4ZmMsMHg3NCwweGRkLDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZmLDB4ZjAsMHg5MH0sCisgIDE2LDB4NDM2NCwwLHsweDdmLDB4OTcsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHgxOSwweDc0LDB4MDEsMHhmMCwweGU0LDB4OTAsMHg3NiwweDg1fSwKKyAgMTYsMHg0Mzc0LDAsezB4ZjAsMHhhMywweGYwLDB4OTAsMHg3NiwweDgxLDB4ZjAsMHg5MCwweDc2LDB4ODAsMHhmMCwweDEyLDB4NDksMHhhZSwweDEyLDB4MGZ9LAorICAxNiwweDQzODQsMCx7MHhjNiwweDEyLDB4NGEsMHhmMSwweDkwLDB4N2YsMHg5NywweGUwLDB4NDQsMHgwOCwweGYwLDB4ZTAsMHg1NCwweGI5LDB4ZjAsMHhkMn0sCisgIDE2LDB4NDM5NCwwLHsweDMwLDB4MjAsMHgzMCwweDE4LDB4MTIsMHg0YSwweGE2LDB4MTIsMHgzMCwweDAwLDB4MTIsMHg0MCwweDAwLDB4MTIsMHg0MiwweDFmfSwKKyAgMTYsMHg0M2E0LDAsezB4MTIsMHg0OCwweGJkLDB4MTIsMHgxYiwweDA0LDB4MTIsMHgxNiwweDYxLDB4MTIsMHg0MiwweDFmLDB4MTIsMHg0YSwweGE2LDB4YzJ9LAorICAxNiwweDQzYjQsMCx7MHgyZiwweGMyLDB4MzEsMHhjMiwweDMyLDB4YzIsMHgzNCwweGMyLDB4MzMsMHhjMiwweDI5LDB4YzIsMHgyNywweGMyLDB4MjgsMHhlNH0sCisgIDE2LDB4NDNjNCwwLHsweGY1LDB4MTEsMHg5MCwweDc2LDB4ODksMHhmMCwweDkwLDB4NzYsMHgzZiwweGYwLDB4OTAsMHg3NiwweDQxLDB4ZjAsMHg5MCwweDc2fSwKKyAgMTYsMHg0M2Q0LDAsezB4NDAsMHhmMCwweDkwLDB4NzYsMHg4YSwweGYwLDB4YTMsMHhmMCwweGEzLDB4MDQsMHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4NzZ9LAorICAgMywweDQzZTQsMCx7MHg5OSwweGYwLDB4MjJ9LAorICAxNiwweDQzZTcsMCx7MHgxMiwweDRlLDB4MTksMHg0MCwweDAyLDB4ODEsMHhhYywweDkwLDB4N2YsMHhlYiwweGUwLDB4MjQsMHhmZSwweDYwLDB4MWUsMHgxNH0sCisgIDE2LDB4NDNmNywwLHsweDYwLDB4NDYsMHgxNCwweDYwLDB4NmUsMHgxNCwweDcwLDB4MDIsMHg4MSwweDlkLDB4MjQsMHgwNCwweDYwLDB4MDIsMHg4MSwweGE1fSwKKyAgMTYsMHg0NDA3LDAsezB4NzQsMHgwNSwweDkwLDB4N2YsMHhkNCwweGYwLDB4NzQsMHgwMCwweDkwLDB4N2YsMHhkNSwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZWF9LAorICAxNiwweDQ0MTcsMCx7MHhlMCwweGZmLDB4MTIsMHg0YSwweDU1LDB4OGIsMHgyMCwweDhhLDB4MjEsMHg4OSwweDIyLDB4ZWEsMHg0OSwweDYwLDB4MTEsMHhjZX0sCisgIDE2LDB4NDQyNywwLHsweGVhLDB4Y2UsMHhlZSwweDkwLDB4N2YsMHhkNCwweGYwLDB4Y2YsMHhlOSwweGNmLDB4ZWYsMHg5MCwweDdmLDB4ZDUsMHhmMCwweDIyfSwKKyAgMTYsMHg0NDM3LDAsezB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmYsMHgxMiwweDQ3LDB4Yjd9LAorICAxNiwweDQ0NDcsMCx7MHg4YiwweDIwLDB4OGEsMHgyMSwweDg5LDB4MjIsMHhlYSwweDQ5LDB4NjAsMHgxMSwweGNlLDB4ZWEsMHhjZSwweGVlLDB4OTAsMHg3Zn0sCisgIDE2LDB4NDQ1NywwLHsweGQ0LDB4ZjAsMHhjZiwweGU5LDB4Y2YsMHhlZiwweDkwLDB4N2YsMHhkNSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0fSwKKyAgMTYsMHg0NDY3LDAsezB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmZiwweDkwLDB4N2UsMHhjMCwweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmJ9LAorICAxNiwweDQ0NzcsMCx7MHgxMiwweDE3LDB4OTQsMHg4YiwweDIwLDB4OGEsMHgyMSwweDg5LDB4MjIsMHhlYSwweDQ5LDB4NjAsMHgxMSwweGNlLDB4ZWEsMHhjZX0sCisgIDE2LDB4NDQ4NywwLHsweGVlLDB4OTAsMHg3ZiwweGQ0LDB4ZjAsMHhjZiwweGU5LDB4Y2YsMHhlZiwweDkwLDB4N2YsMHhkNSwweGYwLDB4MjIsMHg5MCwweDdmfSwKKyAgMTYsMHg0NDk3LDAsezB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2Z9LAorICAgNSwweDQ0YTcsMCx7MHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfSwKKyAgIDEsMHg0NGFjLDAsezB4MjJ9LAorICAxNiwweDQ0YWQsMCx7MHhjMiwweGFmLDB4ZDIsMHgyNCwweDkwLDB4N2YsMHg5MywweDc0LDB4MzAsMHhmMCwweDkwLDB4N2YsMHg5YywweDc0LDB4YmIsMHhmMH0sCisgIDE2LDB4NDRiZCwwLHsweDkwLDB4N2YsMHg5NiwweGUwLDB4NDQsMHgzMCwweGYwLDB4ZTAsMHg1NCwweDMwLDB4ZjAsMHg5MCwweDdmLDB4OTQsMHg3NCwweDMwfSwKKyAgMTYsMHg0NGNkLDAsezB4ZjAsMHg5MCwweDdmLDB4OWQsMHg3NCwweGNmLDB4ZjAsMHg5MCwweDdmLDB4OTcsMHg3NCwweGEwLDB4ZjAsMHg5MCwweDdmLDB4OTV9LAorICAxNiwweDQ0ZGQsMCx7MHg3NCwweGMwLDB4ZjAsMHg5MCwweDdmLDB4OWUsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDdmLDB4OTksMHhlMCwweDMwLDB4ZTIsMHgwOX0sCisgIDE2LDB4NDRlZCwwLHsweDkwLDB4MDUsMHgxOSwweDc0LDB4YTAsMHhmMCwweGU0LDB4YTMsMHhmMCwweGMyLDB4MjUsMHhjMiwweDIyLDB4YzIsMHgyMywweGMyfSwKKyAgMTYsMHg0NGZkLDAsezB4MjYsMHgxMiwweDRiLDB4MjgsMHgxMiwweDJkLDB4YTksMHgxMiwweDNiLDB4ZDMsMHgxMiwweDQ2LDB4MTksMHgxMiwweDNhLDB4NDJ9LAorICAxNiwweDQ1MGQsMCx7MHg5MCwweDc2LDB4NjgsMHg3NCwweDAxLDB4ZjAsMHg3MCwweDBmLDB4MTIsMHg0YywweDI5LDB4MTIsMHg0ZSwweDE1LDB4MTIsMHg0ZX0sCisgIDE2LDB4NDUxZCwwLHsweDE3LDB4MTIsMHgxYiwweDQwLDB4MTIsMHgxNCwweDk2LDB4MTIsMHg0MywweDE0LDB4OTAsMHg3ZiwweGFmLDB4ZTAsMHg0NCwweDAxfSwKKyAgMTYsMHg0NTJkLDAsezB4ZjAsMHg5MCwweDdmLDB4YWUsMHhlMCwweDQ0LDB4MWYsMHhmMCwweDkwLDB4N2YsMHhhYywweDc0LDB4ZmYsMHhmMCwweDkwLDB4N2Z9LAorICAxNiwweDQ1M2QsMCx7MHhhZCwweGYwLDB4OTAsMHg3ZiwweGRlLDB4ZjAsMHg5MCwweDdmLDB4ZGYsMHhmMCwweDkwLDB4N2YsMHhhYiwweGYwLDB4OTAsMHg3Zn0sCisgIDE2LDB4NDU0ZCwwLHsweGE5LDB4ZjAsMHg5MCwweDdmLDB4YWEsMHhmMCwweDUzLDB4OTEsMHhlZiwweDQzLDB4ZDgsMHgyMCwweGQyLDB4ZTgsMHg0MywweGQ4fSwKKyAgIDgsMHg0NTVkLDAsezB4MjAsMHg1MywweGE4LDB4YTAsMHg0MywweGE4LDB4ODAsMHgyMn0sCisgIDE2LDB4NDU2NSwwLHsweDkwLDB4NzYsMHg5YSwweDc0LDB4MDIsMHhmMCwweGU0LDB4OTAsMHg3NiwweDkxLDB4ZjAsMHhhMywweGYwLDB4OTAsMHg3NiwweDkwfSwKKyAgMTYsMHg0NTc1LDAsezB4ZjAsMHg5MCwweDc2LDB4OTMsMHhmMCwweDkwLDB4NzYsMHg5NiwweDc0LDB4MDMsMHhmMCwweDkwLDB4ODAsMHgwMywweGYwLDB4ZTR9LAorICAxNiwweDQ1ODUsMCx7MHg5MCwweDc2LDB4OTcsMHhmMCwweDkwLDB4ODAsMHgwMiwweGYwLDB4OTAsMHg3NiwweDk0LDB4MDQsMHhmMCwweDkwLDB4ODAsMHgwMH0sCisgIDE2LDB4NDU5NSwwLHsweGYwLDB4ZTQsMHg5MCwweDc2LDB4OGUsMHhmMCwweDkwLDB4NzYsMHgxYSwweGYwLDB4OTAsMHg3NiwweDk1LDB4MDQsMHhmMCwweGMyfSwKKyAgMTYsMHg0NWE1LDAsezB4MmUsMHg5MCwweDdmLDB4OWIsMHhlMCwweGZmLDB4NTQsMHgxMCwweGZmLDB4NzAsMHgwMiwweGMyLDB4M2YsMHg5MCwweDdmLDB4OWJ9LAorICAxNiwweDQ1YjUsMCx7MHhlMCwweGZmLDB4NTQsMHgxMCwweGZlLDB4ZmYsMHhiZSwweDEwLDB4MDIsMHhkMiwweDNmLDB4OTAsMHg3ZiwweDliLDB4ZTAsMHhmZn0sCisgIDE2LDB4NDVjNSwwLHsweDU0LDB4MjAsMHhmZiwweDcwLDB4MDIsMHhjMiwweDNlLDB4OTAsMHg3ZiwweDliLDB4ZTAsMHhmZiwweDU0LDB4MjAsMHhmZSwweGZmfSwKKyAgMTYsMHg0NWQ1LDAsezB4YmUsMHgyMCwweDAyLDB4ZDIsMHgzZSwweDMwLDB4M2YsMHgwOSwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZSwweGYwLDB4ODB9LAorICAxNiwweDQ1ZTUsMCx7MHgwNywweDkwLDB4NzYsMHg5NywweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg5MCwweDgwLDB4MDIsMHhmMH0sCisgIDE2LDB4NDVmNSwwLHsweDMwLDB4M2UsMHgwOSwweDkwLDB4NzYsMHg5NSwweGUwLDB4NDQsMHgwNCwweGYwLDB4ODAsMHgwNywweDkwLDB4NzYsMHg5NSwweGUwfSwKKyAgMTYsMHg0NjA1LDAsezB4NTQsMHhmYiwweGYwLDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg5MCwweDgwLDB4MDEsMHhmMCwweGEyLDB4M2UsMHg5MiwweDQwLDB4YTJ9LAorICAgMywweDQ2MTUsMCx7MHgzZiwweDkyLDB4NDF9LAorICAgMSwweDQ2MTgsMCx7MHgyMn0sCisgIDE2LDB4NDYxOSwwLHsweGU0LDB4OTAsMHg3NiwweDM2LDB4ZjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDMyLDB4ZjUsMHg4MiwweGU0fSwKKyAgMTYsMHg0NjI5LDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MzMsMHhmNSwweDgyLDB4ZTR9LAorICAxNiwweDQ2MzksMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmYsMHg3NX0sCisgIDE2LDB4NDY0OSwwLHsweGYwLDB4MDMsMHhhNCwweDI0LDB4MzIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGU0LDB4ZjAsMHhlZiwweDc1fSwKKyAgMTYsMHg0NjU5LDAsezB4ZjAsMHgwMywweGE0LDB4MjQsMHgzMywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwMiwweGYwLDB4OTB9LAorICAxNiwweDQ2NjksMCx7MHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgzMiwweGY1LDB4ODIsMHhlNH0sCisgIDE2LDB4NDY3OSwwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTQsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDMzLDB4ZjUsMHg4MiwweGU0fSwKKyAgMTYsMHg0Njg5LDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmLDB4NzV9LAorICAxNiwweDQ2OTksMCx7MHhmMCwweDAzLDB4YTQsMHgyNCwweDMyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNCwweGYwLDB4ZWYsMHg3NX0sCisgIDE2LDB4NDZhOSwwLHsweGYwLDB4MDMsMHhhNCwweDI0LDB4MzMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDQsMHhmMCwweDIyfSwKKyAgMTIsMHg0NmI5LDAsezB4NzgsMHg3ZiwweGU0LDB4ZjYsMHhkOCwweGZkLDB4NzUsMHg4MSwweDM4LDB4MDIsMHg0NywweDAwfSwKKyAgMTYsMHg0NmM1LDAsezB4MDIsMHgwNywweGE2LDB4ZTQsMHg5MywweGEzLDB4ZjgsMHhlNCwweDkzLDB4YTMsMHg0MCwweDAzLDB4ZjYsMHg4MCwweDAxLDB4ZjJ9LAorICAxNiwweDQ2ZDUsMCx7MHgwOCwweGRmLDB4ZjQsMHg4MCwweDI5LDB4ZTQsMHg5MywweGEzLDB4ZjgsMHg1NCwweDA3LDB4MjQsMHgwYywweGM4LDB4YzMsMHgzM30sCisgIDE2LDB4NDZlNSwwLHsweGM0LDB4NTQsMHgwZiwweDQ0LDB4MjAsMHhjOCwweDgzLDB4NDAsMHgwNCwweGY0LDB4NTYsMHg4MCwweDAxLDB4NDYsMHhmNiwweGRmfSwKKyAgMTYsMHg0NmY1LDAsezB4ZTQsMHg4MCwweDBiLDB4MDEsMHgwMiwweDA0LDB4MDgsMHgxMCwweDIwLDB4NDAsMHg4MCwweDkwLDB4MGMsMHg4ZiwweGU0LDB4N2V9LAorICAxNiwweDQ3MDUsMCx7MHgwMSwweDkzLDB4NjAsMHhiYywweGEzLDB4ZmYsMHg1NCwweDNmLDB4MzAsMHhlNSwweDA5LDB4NTQsMHgxZiwweGZlLDB4ZTQsMHg5M30sCisgIDE2LDB4NDcxNSwwLHsweGEzLDB4NjAsMHgwMSwweDBlLDB4Y2YsMHg1NCwweGMwLDB4MjUsMHhlMCwweDYwLDB4YTgsMHg0MCwweGI4LDB4ZTQsMHg5MywweGEzfSwKKyAgMTYsMHg0NzI1LDAsezB4ZmEsMHhlNCwweDkzLDB4YTMsMHhmOCwweGU0LDB4OTMsMHhhMywweGM4LDB4YzUsMHg4MiwweGM4LDB4Y2EsMHhjNSwweDgzLDB4Y2F9LAorICAxNiwweDQ3MzUsMCx7MHhmMCwweGEzLDB4YzgsMHhjNSwweDgyLDB4YzgsMHhjYSwweGM1LDB4ODMsMHhjYSwweGRmLDB4ZTksMHhkZSwweGU3LDB4ODAsMHhiZX0sCisgIDE2LDB4NDc0NSwwLHsweDkwLDB4N2YsMHhlYywweGUwLDB4OTAsMHg3NiwweDgzLDB4ZjAsMHhlMCwweDE0LDB4NjAsMHgxZCwweDE0LDB4NjAsMHgyYSwweDE0fSwKKyAgMTYsMHg0NzU1LDAsezB4NjAsMHgzNywweDE0LDB4NjAsMHg0NCwweDI0LDB4MDQsMHg3MCwweDUwLDB4OTAsMHg3NiwweDkxLDB4ZTAsMHg5MCwweDdmLDB4MDB9LAorICAxNiwweDQ3NjUsMCx7MHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDEsMHhmMCwweDgwLDB4NDcsMHg5MCwweDc2LDB4OTIsMHhlMCwweDkwLDB4N2YsMHgwMH0sCisgIDE2LDB4NDc3NSwwLHsweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMSwweGYwLDB4ODAsMHgzNywweDkwLDB4NzYsMHg5MCwweGUwLDB4OTAsMHg3ZiwweDAwfSwKKyAgMTYsMHg0Nzg1LDAsezB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAxLDB4ZjAsMHg4MCwweDI3LDB4OTAsMHg3NiwweDg0LDB4ZTAsMHg5MCwweDdmLDB4MDB9LAorICAxNiwweDQ3OTUsMCx7MHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDEsMHhmMCwweDgwLDB4MTcsMHg5MCwweDc2LDB4OTMsMHhlMCwweDkwLDB4N2YsMHgwMH0sCisgIDE2LDB4NDdhNSwwLHsweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMSwweGYwLDB4ODAsMHgwNywweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfSwKKyAgIDIsMHg0N2I1LDAsezB4ZDMsMHgyMn0sCisgICAyLDB4NDdiNywwLHsweDhmLDB4MmV9LAorICAxNiwweDQ3YjksMCx7MHhlNCwweGY1LDB4MmYsMHg3NSwweDMwLDB4ZmYsMHg3NSwweDMxLDB4MDcsMHg3NSwweDMyLDB4MWEsMHhhYiwweDMwLDB4YWEsMHgzMX0sCisgIDE2LDB4NDdjOSwwLHsweGE5LDB4MzIsMHg5MCwweDAwLDB4MDEsMHgxMiwweDM2LDB4YWIsMHhiNCwweDAzLDB4MWYsMHhhZiwweDJmLDB4MDUsMHgyZiwweGVmfSwKKyAgMTYsMHg0N2Q5LDAsezB4NjUsMHgyZSwweDcwLDB4MDEsMHgyMiwweDEyLDB4MzYsMHg5MiwweDdlLDB4MDAsMHgyOSwweGZmLDB4ZWUsMHgzYSwweGM5LDB4ZWZ9LAorICAxNiwweDQ3ZTksMCx7MHhjOSwweDc1LDB4MzAsMHhmZiwweGY1LDB4MzEsMHg4OSwweDMyLDB4ODAsMHhkMiwweDdiLDB4MDAsMHg3YSwweDAwLDB4NzksMHgwMH0sCisgICAxLDB4NDdmOSwwLHsweDIyfSwKKyAgIDYsMHg0N2ZhLDAsezB4MTIsMHg0YiwweDI4LDB4YzIsMHgzMSwweDIyfSwKKyAgMTYsMHg0ODAwLDAsezB4YzAsMHhlMCwweGMwLDB4ZjAsMHhjMCwweDgzLDB4YzAsMHg4MiwweGMwLDB4ZDAsMHhlOCwweGMwLDB4ZTAsMHhlOSwweGMwLDB4ZTB9LAorICAxNiwweDQ4MTAsMCx7MHhlYSwweGMwLDB4ZTAsMHhlYiwweGMwLDB4ZTAsMHhlYywweGMwLDB4ZTAsMHhlZCwweGMwLDB4ZTAsMHhlZSwweGMwLDB4ZTAsMHhlZn0sCisgIDE2LDB4NDgyMCwwLHsweGMwLDB4ZTAsMHhjMiwweGNhLDB4YzIsMHhjZiwweDkwLDB4N2YsMHg5OCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MzAsMHgyZSwweDAzfSwKKyAgMTYsMHg0ODMwLDAsezB4MTIsMHgxNCwweGE2LDB4OTAsMHg3ZiwweDk4LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg1MywweGE4LDB4ZmEsMHgxMiwweDE2LDB4NjF9LAorICAxNiwweDQ4NDAsMCx7MHhkMCwweGUwLDB4ZmYsMHhkMCwweGUwLDB4ZmUsMHhkMCwweGUwLDB4ZmQsMHhkMCwweGUwLDB4ZmMsMHhkMCwweGUwLDB4ZmIsMHhkMH0sCisgIDE2LDB4NDg1MCwwLHsweGUwLDB4ZmEsMHhkMCwweGUwLDB4ZjksMHhkMCwweGUwLDB4ZjgsMHhkMCwweGQwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGYwfSwKKyAgIDMsMHg0ODYwLDAsezB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHg0ODYzLDAsezB4OTAsMHg3ZiwweGVjLDB4ZTAsMHg5MCwweDc2LDB4ODMsMHhmMCwweGUwLDB4MTQsMHg2MCwweDE3LDB4MTQsMHg2MCwweDIxLDB4MTR9LAorICAxNiwweDQ4NzMsMCx7MHg2MCwweDJiLDB4MTQsMHg2MCwweDMyLDB4MjQsMHgwNCwweDcwLDB4MzgsMHg5MCwweDdmLDB4ZWEsMHhlMCwweDkwLDB4NzYsMHg5MX0sCisgIDE2LDB4NDg4MywwLHsweGYwLDB4ODAsMHgzNSwweDkwLDB4N2YsMHhlYSwweGUwLDB4OTAsMHg3NiwweDkyLDB4ZjAsMHgxMiwweDNlLDB4OWYsMHg4MCwweDI4fSwKKyAgMTYsMHg0ODkzLDAsezB4OTAsMHg3ZiwweGVhLDB4ZTAsMHg5MCwweDc2LDB4OTAsMHhmMCwweDEyLDB4MTgsMHgwMCwweDgwLDB4MWIsMHg5MCwweDdmLDB4ZWF9LAorICAxNiwweDQ4YTMsMCx7MHhlMCwweDkwLDB4NzYsMHg4NCwweGYwLDB4ODAsMHgxMSwweDkwLDB4N2YsMHhlYSwweGUwLDB4OTAsMHg3NiwweDkzLDB4ZjAsMHg4MH0sCisgIDEwLDB4NDhiMywwLHsweDA3LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhkMywweDIyfSwKKyAgMTYsMHg0OGJkLDAsezB4MzAsMHgyZCwweDM5LDB4YzIsMHgyZCwweDkwLDB4NzYsMHgxOSwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MGQsMHhlNCwweDkwLDB4NzZ9LAorICAxNiwweDQ4Y2QsMCx7MHg3YywweGYwLDB4YTMsMHg3NCwweGY4LDB4ZjAsMHhhMywweDc0LDB4MGEsMHhmMCwweGVmLDB4YjQsMHgwMiwweDBkLDB4ZTQsMHg5MH0sCisgIDE2LDB4NDhkZCwwLHsweDc2LDB4N2MsMHhmMCwweGEzLDB4NzQsMHhmMCwweGYwLDB4YTMsMHg3NCwweDBiLDB4ZjAsMHhlZiwweGI0LDB4MDMsMHgwZCwweGU0fSwKKyAgMTMsMHg0OGVkLDAsezB4OTAsMHg3NiwweDdjLDB4ZjAsMHhhMywweDc0LDB4ZjgsMHhmMCwweGEzLDB4NzQsMHgxNywweGYwLDB4MjJ9LAorICAgNiwweDQ4ZmEsMCx7MHg1MywweDkxLDB4YmYsMHhkMiwweDJkLDB4MzJ9LAorICAxNiwweDQ5MDAsMCx7MHgwMiwweDJmLDB4ZTcsMHgwMCwweDAyLDB4M2QsMHg0NywweDAwLDB4MDIsMHg0ZCwweGI0LDB4MDAsMHgwMiwweDRjLDB4NDMsMHgwMH0sCisgIDE2LDB4NDkxMCwwLHsweDAyLDB4NGIsMHhlOSwweDAwLDB4MDIsMHgyZiwweGZmLDB4MDAsMHgwMiwweDRjLDB4NWIsMHgwMCwweDAyLDB4NGMsMHgwYSwweDAwfSwKKyAgMTYsMHg0OTIwLDAsezB4MDIsMHg0YywweDcyLDB4MDAsMHgwMiwweDRiLDB4NWEsMHgwMCwweDAyLDB4NGMsMHg4OSwweDAwLDB4MDIsMHg0YywweGEwLDB4MDB9LAorICAxNiwweDQ5MzAsMCx7MHgwMiwweDRjLDB4YjcsMHgwMCwweDAyLDB4NGMsMHhjZSwweDAwLDB4MDIsMHg0YywweGU1LDB4MDAsMHgwMiwweDRjLDB4ZmMsMHgwMH0sCisgIDE2LDB4NDk0MCwwLHsweDAyLDB4NGQsMHgxMywweDAwLDB4MDIsMHg0ZCwweDJhLDB4MDAsMHgwMiwweDRkLDB4NDEsMHgwMCwweDAyLDB4NGQsMHg1OCwweDAwfSwKKyAgIDgsMHg0OTUwLDAsezB4MDIsMHg0ZCwweDZmLDB4MDAsMHgwMiwweDRkLDB4ODYsMHgwMH0sCisgIDE2LDB4NDk1OCwwLHsweGU0LDB4OTAsMHg3NiwweDI2LDB4ZjAsMHg5MCwweDc2LDB4MjYsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDM0fSwKKyAgMTYsMHg0OTY4LDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3ZiwweGVjLDB4ZTAsMHhmZCwweGVlLDB4NmR9LAorICAxNiwweDQ5NzgsMCx7MHg2MCwweDBlLDB4ZWYsMHhjMywweDk0LDB4MDQsMHg1MCwweDA4LDB4OTAsMHg3NiwweDI2LDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhkNX0sCisgIDE2LDB4NDk4OCwwLHsweGVmLDB4YjQsMHgwNCwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweGVmLDB4NzUsMHhmMCwweDAzfSwKKyAgMTYsMHg0OTk4LDAsezB4YTQsMHgyNCwweDMyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwLDB4N2YsMHgwMCwweGYwLDB4OTB9LAorICAgNiwweDQ5YTgsMCx7MHg3ZiwweGI1LDB4NzQsMHgwMSwweGYwLDB4MjJ9LAorICAxNiwweDQ5YWUsMCx7MHg5MCwweDc2LDB4NDYsMHg3NCwweDgwLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHhhMywweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhM30sCisgIDE2LDB4NDliZSwwLHsweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhMywweGYwLDB4YTMsMHg3NCwweDgwLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHhhMywweGYwfSwKKyAgMTYsMHg0OWNlLDAsezB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhMywweGYwLDB4YTMsMHhmMCwweGEzLDB4NzQsMHg0MCwweGYwLDB4ZTQsMHhhMywweGYwLDB4YTN9LAorICAxNiwweDQ5ZGUsMCx7MHg3NCwweDQwLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHhhMywweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhMywweGYwLDB4YTMsMHhmMH0sCisgIDE2LDB4NDllZSwwLHsweGEzLDB4NzQsMHg0MCwweGYwLDB4ZTQsMHhhMywweGYwLDB4YTMsMHg3NCwweDQwLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHhhMywweGYwfSwKKyAgIDUsMHg0OWZlLDAsezB4YTMsMHhmMCwweGEzLDB4ZjAsMHgyMn0sCisgIDE2LDB4NGEwMywwLHsweGU0LDB4OTAsMHg3NiwweDI1LDB4ZjAsMHg5MCwweDc2LDB4MjUsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDM0fSwKKyAgMTYsMHg0YTEzLDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3ZiwweGVjLDB4ZTAsMHhmZCwweGVlLDB4NmR9LAorICAxNiwweDRhMjMsMCx7MHg2MCwweDBlLDB4ZWYsMHhjMywweDk0LDB4MDQsMHg1MCwweDA4LDB4OTAsMHg3NiwweDI1LDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhkNX0sCisgIDE2LDB4NGEzMywwLHsweGVmLDB4YjQsMHgwNCwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2UsMHhjMCwweGUwfSwKKyAgMTYsMHg0YTQzLDAsezB4ZmUsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgzMiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWV9LAorICAgMiwweDRhNTMsMCx7MHhmMCwweDIyfSwKKyAgMTYsMHg0YTU1LDAsezB4ZTQsMHhmZSwweDc1LDB4MWQsMHhmZiwweDc1LDB4MWUsMHgwNSwweDc1LDB4MWYsMHgxMiwweGFiLDB4MWQsMHhhYSwweDFlLDB4YTl9LAorICAxNiwweDRhNjUsMCx7MHgxZiwweDkwLDB4MDAsMHgwMSwweDEyLDB4MzYsMHhhYiwweDY0LDB4MDIsMHg3MCwweDJmLDB4Y2QsMHhlZSwweGNkLDB4MGUsMHhlZH0sCisgIDE2LDB4NGE3NSwwLHsweDZmLDB4NzAsMHgwMSwweDIyLDB4OTAsMHgwMCwweDAyLDB4MTIsMHgzNywweDBlLDB4ODUsMHhmMCwweDFiLDB4ZjUsMHgxYywweDYyfSwKKyAgMTYsMHg0YTg1LDAsezB4MWIsMHhlNSwweDFiLDB4NjIsMHgxYywweGU1LDB4MWMsMHg2MiwweDFiLDB4MjksMHhmZCwweGU1LDB4MWIsMHgzYSwweGM5LDB4ZWR9LAorICAxNiwweDRhOTUsMCx7MHhjOSwweDc1LDB4MWQsMHhmZiwweGY1LDB4MWUsMHg4OSwweDFmLDB4ODAsMHhjMSwweDdiLDB4MDAsMHg3YSwweDAwLDB4NzksMHgwMH0sCisgICAxLDB4NGFhNSwwLHsweDIyfSwKKyAgMTYsMHg0YWE2LDAsezB4ZTQsMHg5MCwweDc2LDB4OWIsMHhmMCwweDkwLDB4NzYsMHg5YiwweGUwLDB4ZmYsMHgwNCwweGYwLDB4ZWYsMHg2MCwweDA4LDB4ZTB9LAorICAxNiwweDRhYjYsMCx7MHgyNCwweDA4LDB4ZjgsMHhlNCwweGY2LDB4ODAsMHhlZSwweDkwLDB4NzYsMHg5NiwweGUwLDB4NDQsMHgwNCwweGYwLDB4NDQsMHgwOH0sCisgIDE2LDB4NGFjNiwwLHsweGYwLDB4OTAsMHg4MCwweDAzLDB4ZjAsMHhlNCwweGY1LDB4MTgsMHhkMiwweDM1LDB4ZjUsMHgwZSwweGY1LDB4MTAsMHhkMiwweDM2fSwKKyAgMTYsMHg0YWQ2LDAsezB4NzUsMHgxMiwweDExLDB4NzUsMHgxMywweDIyLDB4YzIsMHgzNywweGMyLDB4MzksMHhjMiwweDM4LDB4ZjUsMHgxNiwweGY1LDB4MTR9LAorICAxMSwweDRhZTYsMCx7MHhmNSwweDFhLDB4ZjUsMHgwZCwweGMyLDB4M2IsMHhjMiwweDNjLDB4YzIsMHgzZCwweDIyfSwKKyAgMTYsMHg0YWYxLDAsezB4ZTQsMHhmZiwweDc0LDB4NTYsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzYsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDc0LDB4Mjh9LAorICAxNiwweDRiMDEsMCx7MHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZWUsMHhmMCwweDc0LDB4NWUsMHgyZiwweGY1LDB4ODIsMHhlNH0sCisgIDE2LDB4NGIxMSwwLHsweDM0LDB4NzYsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDc0LDB4MzgsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzfSwKKyAgIDYsMHg0YjIxLDAsezB4ZWUsMHhmMCwweDBmLDB4YmYsMHgwOCwweGNjfSwKKyAgIDEsMHg0YjI3LDAsezB4MjJ9LAorICAxNiwweDRiMjgsMCx7MHhlNCwweDkwLDB4NzIsMHgzNiwweGYwLDB4YTMsMHhmMCwweDkwLDB4N2YsMHg5NywweGUwLDB4NTQsMHhmYiwweGYwLDB4ZTQsMHg5MH0sCisgIDE2LDB4NGIzOCwwLHsweDcyLDB4MzMsMHhmMCwweDkwLDB4NzIsMHgzMiwweGYwLDB4OTAsMHg3MiwweDAxLDB4MDQsMHhmMCwweGU0LDB4OTAsMHg3MiwweDMzfSwKKyAgMTYsMHg0YjQ4LDAsezB4ZjAsMHg5MCwweDcyLDB4MzIsMHhmMCwweDkwLDB4NzIsMHgwMSwweDA0LDB4ZjAsMHg5MCwweDdmLDB4OTcsMHhlMCwweDQ0LDB4MDR9LAorICAgMiwweDRiNTgsMCx7MHhmMCwweDIyfSwKKyAgMTYsMHg0YjVhLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDAyLDB4ZjB9LAorICAxNiwweDRiNmEsMCx7MHg5MCwweDdmLDB4YzcsMHhlMCwweGY1LDB4MTEsMHg3NSwweDBmLDB4MDAsMHg3NSwweDBkLDB4MDAsMHhkMiwweDMzLDB4ZDAsMHg4Mn0sCisgICA1LDB4NGI3YSwwLHsweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDRiN2YsMCx7MHg5MCwweDdmLDB4ZDYsMHhlMCwweDU0LDB4ZmIsMHhmMCwweGUwLDB4NDQsMHgwOCwweGYwLDB4MzAsMHg0MiwweDA0LDB4ZTAsMHg0NH0sCisgIDE2LDB4NGI4ZiwwLHsweDAyLDB4ZjAsMHg3ZiwweGRjLDB4N2UsMHgwNSwweDEyLDB4NGQsMHg5ZCwweDkwLDB4N2YsMHhkNiwweGUwLDB4NTQsMHhmNywweGYwfSwKKyAgIDUsMHg0YjlmLDAsezB4ZTAsMHg0NCwweDA0LDB4ZjAsMHgyMn0sCisgIDE2LDB4NGJhNCwwLHsweDkwLDB4N2YsMHhlYiwweGUwLDB4MTQsMHg3MCwweDE0LDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweDdmLDB4NzAsMHgwNCwweDEyfSwKKyAgMTYsMHg0YmI0LDAsezB4NDksMHg1OCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDR9LAorICAgMywweDRiYzQsMCx7MHgwMSwweGYwLDB4MjJ9LAorICAxNiwweDRiYzcsMCx7MHg5MCwweDdmLDB4ZWIsMHhlMCwweDE0LDB4NzAsMHgxMywweDkwLDB4N2YsMHhlOSwweGUwLDB4MTQsMHg3MCwweDA0LDB4MTIsMHg0YX0sCisgIDE2LDB4NGJkNywwLHsweDAzLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxfSwKKyAgIDIsMHg0YmU3LDAsezB4ZjAsMHgyMn0sCisgIDE2LDB4NGJlOSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYiwweDc0LDB4MTAsMHhmMCwweDkwfSwKKyAgMTYsMHg0YmY5LDAsezB4NzYsMHg5NiwweGUwLDB4NTQsMHhmZCwweGYwLDB4OTAsMHg4MCwweDAzLDB4ZjAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTB9LAorICAgMSwweDRjMDksMCx7MHgzMn0sCisgIDE2LDB4NGMwYSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYSwweGUwLDB4NDQsMHgwMSwweGYwfSwKKyAgMTUsMHg0YzFhLDAsezB4YzIsMHgyOSwweDkwLDB4NzYsMHg4ZCwweDc0LDB4MDEsMHhmMCwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHg0YzI5LDAsezB4OTAsMHg3ZiwweGQ2LDB4ZTAsMHgzMCwweGU3LDB4MTIsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDdmLDB4MTQsMHg3ZSwweDAwLDB4MTJ9LAorICAxMCwweDRjMzksMCx7MHg0ZCwweDlkLDB4OTAsMHg3ZiwweGQ2LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHgyMn0sCisgIDE2LDB4NGM0MywwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweGQyLDB4MjUsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDA4fSwKKyAgIDgsMHg0YzUzLDAsezB4ZjAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4NGM1YiwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhOSwweGUwLDB4NDQsMHgwMSwweGYwfSwKKyAgIDcsMHg0YzZiLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDRjNzIsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4MDIsMHhmMH0sCisgICA3LDB4NGM4MiwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHg0Yzg5LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDA0LDB4ZjB9LAorICAgNywweDRjOTksMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4NGNhMCwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYSwweGUwLDB4NDQsMHgwNCwweGYwfSwKKyAgIDcsMHg0Y2IwLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDRjYjcsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4MDgsMHhmMH0sCisgICA3LDB4NGNjNywwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHg0Y2NlLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDA4LDB4ZjB9LAorICAgNywweDRjZGUsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4NGNlNSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhOSwweGUwLDB4NDQsMHgxMCwweGYwfSwKKyAgIDcsMHg0Y2Y1LDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDRjZmMsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWEsMHhlMCwweDQ0LDB4MTAsMHhmMH0sCisgICA3LDB4NGQwYywwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHg0ZDEzLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDIwLDB4ZjB9LAorICAgNywweDRkMjMsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4NGQyYSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYSwweGUwLDB4NDQsMHgyMCwweGYwfSwKKyAgIDcsMHg0ZDNhLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDRkNDEsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4NDAsMHhmMH0sCisgICA3LDB4NGQ1MSwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHg0ZDU4LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDQwLDB4ZjB9LAorICAgNywweDRkNjgsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4NGQ2ZiwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhOSwweGUwLDB4NDQsMHg4MCwweGYwfSwKKyAgIDcsMHg0ZDdmLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDRkODYsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWEsMHhlMCwweDQ0LDB4ODAsMHhmMH0sCisgICA3LDB4NGQ5NiwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHg0ZDlkLDAsezB4OGUsMHgzNSwweDhmLDB4MzYsMHhlNSwweDM2LDB4MTUsMHgzNiwweGFlLDB4MzUsMHg3MCwweDAyLDB4MTUsMHgzNSwweDRlLDB4NjB9LAorICAgNywweDRkYWQsMCx7MHgwNSwweDEyLDB4MTQsMHg4NSwweDgwLDB4ZWUsMHgyMn0sCisgIDE2LDB4NGRiNCwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYiwweDc0LDB4MDQsMHhmMCwweGQwfSwKKyAgIDYsMHg0ZGM0LDAsezB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHg0ZGNhLDAsezB4OTAsMHg3NiwweDgyLDB4ZTAsMHg5MCwweDdmLDB4MDAsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDEsMHhmMCwweGQzLDB4MjJ9LAorICAxMiwweDRkZGEsMCx7MHhjMiwweDM3LDB4ZTQsMHhmNSwweDBlLDB4ZjUsMHgxMCwweGMyLDB4MzYsMHhmNSwweDE0LDB4MjJ9LAorICAgOSwweDRkZTYsMCx7MHhjMiwweDI1LDB4NTMsMHhkOCwweGVmLDB4NDMsMHhkOCwweDIwLDB4MzJ9LAorICAgNywweDRkZWYsMCx7MHg1MywweDk4LDB4ZmUsMHg1MywweDk4LDB4ZmQsMHgzMn0sCisgICA3LDB4NGRmNiwwLHsweDUzLDB4YzAsMHhmZSwweDUzLDB4YzAsMHhmZCwweDMyfSwKKyAgIDYsMHg0ZGZkLDAsezB4NTMsMHg5MSwweDdmLDB4ZDIsMHgyYywweDMyfSwKKyAgIDQsMHg0ZTAzLDAsezB4NTMsMHg5MSwweGRmLDB4MzJ9LAorICAgNCwweDRlMDcsMCx7MHg1MywweGQ4LDB4ZjcsMHgzMn0sCisgICA0LDB4NGUwYiwwLHsweDEyLDB4MTcsMHgzMCwweDIyfSwKKyAgIDMsMHg0ZTBmLDAsezB4YzIsMHg4ZCwweDMyfSwKKyAgIDMsMHg0ZTEyLDAsezB4YzIsMHg4ZiwweDMyfSwKKyAgIDIsMHg0ZTE1LDAsezB4ZDMsMHgyMn0sCisgICAyLDB4NGUxNywwLHsweGQzLDB4MjJ9LAorICAgMiwweDRlMTksMCx7MHhkMywweDIyfSwKKyAgIDIsMHg0ZTFiLDAsezB4ZDMsMHgyMn0sCisgICAyLDB4NGUxZCwwLHsweGQzLDB4MjJ9LAorICAgMiwweDRlMWYsMCx7MHhkMywweDIyfSwKKyAgIDIsMHg0ZTIxLDAsezB4YzMsMHgyMn0sCisgICAwLDB4MDAwMCwxLHswfQorfTsKKy8qIFNvdXJjZTogRU1JNjJNRlcuSEVYIAorOjEwMEM4RjAwNDE3NjY4MDE0MTc2NkEwMjQxNzY2QjBBQzEyMEMxMjEyMworOjEwNDRBRDAwQzJBRkQyMjQ5MDdGOTM3NDMwRjA5MDdGOUM3NEJCRjA5OAorOjEwNDRCRDAwOTA3Rjk2RTA0NDMwRjBFMDU0MzBGMDkwN0Y5NDc0MzA2QgorOjEwNDRDRDAwRjA5MDdGOUQ3NENGRjA5MDdGOTc3NEEwRjA5MDdGOTVDMgorOjEwNDRERDAwNzRDMEYwOTA3RjlFNzQwM0YwOTA3Rjk5RTAzMEUyMDlGNAorOjEwNDRFRDAwOTAwNTE5NzRBMEYwRTRBM0YwQzIyNUMyMjJDMjIzQzIyNAorOjEwNDRGRDAwMjYxMjRCMjgxMjJEQTkxMjNCRDMxMjQ2MTkxMjNBNDJGRAorOjEwNDUwRDAwOTA3NjY4NzQwMUYwNzAwRjEyNEMyOTEyNEUxNTEyNEVGMAorOjEwNDUxRDAwMTcxMjFCNDAxMjE0OTYxMjQzMTQ5MDdGQUZFMDQ0MDEwMgorOjEwNDUyRDAwRjA5MDdGQUVFMDQ0MUZGMDkwN0ZBQzc0RkZGMDkwN0Y3MQorOjEwNDUzRDAwQURGMDkwN0ZERUYwOTA3RkRGRjA5MDdGQUJGMDkwN0Y1RAorOjEwNDU0RDAwQTlGMDkwN0ZBQUYwNTM5MUVGNDNEODIwRDJFODQzRDgzOQorOjA4NDU1RDAwMjA1M0E4QTA0M0E4ODAyMjBFCis6MTAwN0E2MDBFNDkwNzY2NkYwMTI0NEFEMjAyNjEzOTA3NjY2RTBDMzk4Cis6MTAwN0I2MDA5NDAyNTAwQUUwMDRGMEQyNDIxMjRCN0Y4MEVBMzAyNkJGCis6MTAwN0M2MDAwNTEyMjgwMUMyMjYzMDI1MkI5MDc2OTZFMDU0RkNGMEJGCis6MTAwN0Q2MDA5MDgwMDNGMDEyMTQ5NjkwNzY5NkUwNDQwM0YwOTA4MDkxCis6MTAwN0U2MDAwM0YwRTQ5MDc2NjdGMDkwNzY2N0UwMDRGMEUwQjQ0QkFGCis6MEEwN0Y2MDBGNjEyNDdGQTEyNDExQjgwQzUyMkRCCis6MTAyODAxMDBDMjIwQzIyMUMyMkE5MDdGRThFMDEyMzdGOTI4MzAwMEE1Cis6MTAyODExMDAyODhDMDEyOEEyMDIyQTFGMjEyQTZBMjIyOTNEODAyOTA3Cis6MTAyODIxMDA3RDgxMjlEMTgyMkE4NEExMkFCQUEyMDAwMDJBQkY5MERGCis6MTAyODMxMDA3RkU5RTAxNDYwMTEyNEZFNjAyODI0RkU2MDNCMjRGQzQzCis6MTAyODQxMDA3MDQwMTIzRkU1NDFDQjEyNEUxRDQwMDI0MUNCOTA3RkJCCis6MTAyODUxMDBFQUUwQjQwMTA0QzIyMjQxQ0I5MDdGQjRFMDQ0MDFGMDJDCis6MTAyODYxMDA0MUNCMTI0RTFGOTA3RkVBRTBCNDAxMDREMjIyNDFDQjRBCis6MTAyODcxMDA5MDdGQjRFMDQ0MDFGMDQxQ0I5MDdGQjRFMDQ0MDFGMDlCCis6MTAyODgxMDA0MUNCOTA3RkI0RTA0NDAxRjA0MUNCOTA3RkU5RTAyNDVCCis6MTAyODkxMDBGNTcwMDUxMjQ4NjM0MUNCOTA3RkI0RTA0NDAxRjA0MUVCCis6MTAyOEExMDBDQjkwN0ZFOUUwMjRGRDYwNTQyNDAyNjAwMjIxMzQxMkMwCis6MTAyOEIxMDA0RTFENDAwMjQxQ0I5MDdGRUFFMDcwMzg5MDdGRUNFMDAyCis6MTAyOEMxMDBGNDU0ODBGRkM0NTQwRkZGRTA1NDA3MkYyNUUwMjRCNEQzCis6MTAyOEQxMDBGNTgyRTQzNDdGRjU4M0U0RjA5MDdGRUNFMDU0ODBGRkVGCis6MTAyOEUxMDAxMzEzMTM1NDFGRkZFMDU0MDcyRjkwN0ZEN0YwRTA0NEQ4Cis6MTAyOEYxMDAyMEYwNDFDQjkwN0ZCNEUwNDQwMUYwNDFDQjEyNEUxRjU4Cis6MTAyOTAxMDA0MDAyNDFDQjkwN0ZFQUUwNzAyMDkwN0ZFQ0UwRjQ1NEVDCis6MTAyOTExMDA4MEZGQzQ1NDBGRkZFMDU0MDcyRjI1RTAyNEI0RjU4MjUzCis6MTAyOTIxMDBFNDM0N0ZGNTgzNzQwMUYwNDFDQjkwN0ZCNEUwNDQwMTNFCis6MTAyOTMxMDBGMDQxQ0I5MDdGQjRFMDQ0MDFGMDQxQ0I5MDdGRTlFMERFCis6MTAyOTQxMDA2MDEyMjRGODYwMDkyNDAyNzAyOTEyNDNFNzQxQ0IxMjc2Cis6MTAyOTUxMDA0RENBNDFDQjEyNEUxQkEyMjJFNDMzRkYyNUUwRkZBMjU4Cis6MTAyOTYxMDAyM0U0MzM0RjkwN0YwMEYwRTRBM0YwOTA3RkI1NzQwMjJECis6MTAyOTcxMDBGMDQxQ0I5MDdGQjRFMDQ0MDFGMDQxQ0I5MDdGRTlFMDlFCis6MTAyOTgxMDA2MDMzMjRGNjYwMkEyNDA0NzAzRDkwN0ZFQkUwMjRERTVFCis6MTAyOTkxMDA2MDBDMDQ3MDEyOTA3RkI0RTA0NDAxRjA0MUNCOTA3RjUxCis6MTAyOUExMDBCNEUwNDQwMUYwNDFDQjkwN0ZCNEUwNDQwMUYwNDFDQjZECis6MTAyOUIxMDAxMjQ3NDU0MUNCMTI0RTFCRTQ5MDdGMDBGMEEzRjA5MEVCCis6MTAyOUMxMDA3RkI1NzQwMkYwNDFDQjkwN0ZCNEUwNDQwMUYwNDFDQjdDCis6MTAyOUQxMDA5MDdGRTlFMDI0RjQ2MDM0MjQwQzcwMzkxMjRFMUI5MDhFCis6MTAyOUUxMDA3RkVDRTBGNDU0ODBGRkM0NTQwRkZGRTA1NDA3MkYyNTFGCis6MTAyOUYxMDBFMDI0QjRGNTgyRTQzNDdGRjU4M0UwNTRGRDkwN0YwMDU4Cis6MTAyQTAxMDBGMEU0QTNGMDkwN0ZCNTc0MDJGMDQxQ0I5MDdGQjRFMDg1Cis6MTAyQTExMDA0NDAxRjA0MUNCOTA3RkI0RTA0NDAxRjA0MUNCOTA3RjgxCis6MTAyQTIxMDBFOUUwMjRGNjYwMTIxNDYwMUEyNDAyNzAxREQyMjA5MDhECis6MTAyQTMxMDA3RkI0RTA0NDAxRjA4MDEyRDIyMDkwN0ZCNEUwNDQwMUUxCis6MTAyQTQxMDBGMDgwMDc5MDdGQjRFMDQ0MDFGMDIwMjAxODkwN0ZFRUUxCis6MTAyQTUxMDBFMDcwMDRBM0UwNjAwQkQyMjlEMjI3MTIxNzRBRDIyQUQwCis6MTAyQTYxMDA4MDAzMTIwODAwQzIyMDgwNjE5MDdGRUVFMDcwMDRBMzExCis6MTAyQTcxMDBFMDYwMEJEMjI5RDIyODEyMTc0QUQyMkE4MDRDMTIzODkwCis6MTAyQTgxMDA3NDgwNDc5MDdGRTlFMDI0RkU2MDEyMTQ2MDFBMjQwMkVBCis6MTAyQTkxMDA3MDFERDIyMTkwN0ZCNEUwNDQwMUYwODAxMkQyMjE5MEM4Cis6MTAyQUExMDA3RkI0RTA0NDAxRjA4MDA3OTA3RkI0RTA0NDAxRjAyMDVFCis6MTAyQUIxMDAyMTAzMTIxMDAwQzIyMTgwMTExMjJBRDY4MDBDMTI0RTVECis6MTAyQUMxMDAyMTUwMDc5MDdGQjRFMDQ0MDFGMDIwMkEwNzkwN0ZCNEExCis6MDUyQUQxMDBFMDQ0MDJGMDIyQzgKKzoxMDQzRTcwMDEyNEUxOTQwMDI4MUFDOTA3RkVCRTAyNEZFNjAxRTE0NTAKKzoxMDQzRjcwMDYwNDYxNDYwNkUxNDcwMDI4MTlEMjQwNDYwMDI4MUE1REEKKzoxMDQ0MDcwMDc0MDU5MDdGRDRGMDc0MDA5MDdGRDVGMDIyOTA3RkVBRjYKKzoxMDQ0MTcwMEUwRkYxMjRBNTU4QjIwOEEyMTg5MjJFQTQ5NjAxMUNFOTIKKzoxMDQ0MjcwMEVBQ0VFRTkwN0ZENEYwQ0ZFOUNGRUY5MDdGRDVGMDIyQTAKKzoxMDQ0MzcwMDkwN0ZCNEUwNDQwMUYwMjI5MDdGRUFFMEZGMTI0N0I3OTMKKzoxMDQ0NDcwMDhCMjA4QTIxODkyMkVBNDk2MDExQ0VFQUNFRUU5MDdGM0QKKzoxMDQ0NTcwMEQ0RjBDRkU5Q0ZFRjkwN0ZENUYwMjI5MDdGQjRFMDQ0M0UKKzoxMDQ0NjcwMDAxRjAyMjkwN0ZFQUUwRkY5MDdFQzBFMEZEQTNFMEZCMzEKKzoxMDQ0NzcwMDEyMTc5NDhCMjA4QTIxODkyMkVBNDk2MDExQ0VFQUNFNEQKKzoxMDQ0ODcwMEVFOTA3RkQ0RjBDRkU5Q0ZFRjkwN0ZENUYwMjI5MDdGRTkKKzoxMDQ0OTcwMEI0RTA0NDAxRjAyMjkwN0ZCNEUwNDQwMUYwMjI5MDdGMjEKKzowNTQ0QTcwMEI0RTA0NDAxRjA0NworOjAxNDRBQzAwMjJFRAorOjAzMDAzMzAwMDI0REU2OTUKKzowOTRERTYwMEMyMjU1M0Q4RUY0M0Q4MjAzMjU2Cis6MDIwQzlGMDBDMTJGNjMKKzowNjQ3RkEwMDEyNEIyOEMyMzEyMjFGCis6MTA0MzE0MDBFNDkwNzY5NkYwOTA4MDAzRjA5MDdGRTA3NDkwRjA5MEIzCis6MTA0MzI0MDA3RkUxNzQwNEYwRTQ5MDdGRERGMDkwN0ZBMUYwNTM4RTgwCis6MTA0MzM0MDBGODc1ODgwNTc1QjgyMDc1RjgwMTQzOEUzMEY1Qzg3NTkxCis6MTA0MzQ0MDBDQTdGNzVDQkY4NDNBODIwMTI0NTY1QzIyQ0MyMkRDMjgyCis6MTA0MzU0MDAyQkMyMkY5MDdGRkM3NERERjA5MDdGRkY3NEZGRjA5MEYwCis6MTA0MzY0MDA3Rjk3RTA0NDAxRjA5MDc2MTk3NDAxRjBFNDkwNzY4NTJCCis6MTA0Mzc0MDBGMEEzRjA5MDc2ODFGMDkwNzY4MEYwMTI0OUFFMTIwRjlGCis6MTA0Mzg0MDBDNjEyNEFGMTkwN0Y5N0UwNDQwOEYwRTA1NEI5RjBEMkE1Cis6MTA0Mzk0MDAzMDIwMzAxODEyNEFBNjEyMzAwMDEyNDAwMDEyNDIxRjc4Cis6MTA0M0E0MDAxMjQ4QkQxMjFCMDQxMjE2NjExMjQyMUYxMjRBQTZDMjAxCis6MTA0M0I0MDAyRkMyMzFDMjMyQzIzNEMyMzNDMjI5QzIyN0MyMjhFNDU2Cis6MTA0M0M0MDBGNTExOTA3Njg5RjA5MDc2M0ZGMDkwNzY0MUYwOTA3NkYyCis6MTA0M0Q0MDA0MEYwOTA3NjhBRjBBM0YwQTMwNEYwRTRBM0YwOTA3NjgyCis6MDM0M0U0MDA5OUYwMjIyQgorOjEwNDhCRDAwMzAyRDM5QzIyRDkwNzYxOUUwRkZCNDAxMERFNDkwNzZCQworOjEwNDhDRDAwN0NGMEEzNzRGOEYwQTM3NDBBRjBFRkI0MDIwREU0OTAzOQorOjEwNDhERDAwNzY3Q0YwQTM3NEYwRjBBMzc0MEJGMEVGQjQwMzBERTQ0OQorOjBENDhFRDAwOTA3NjdDRjBBMzc0RjhGMEEzNzQxN0YwMjIwRAorOjEwMUIwNDAwMzAyQzM4QzIyQzkwNzYxOUUwRkZCNDAxMEU5MDc2N0MwQworOjEwMUIxNDAwNzRDMEYwQTM3NDE0RjBBMzc0MEJGMEVGQjQwMjBERTREQQorOjEwMUIyNDAwOTA3NjdDRjBBMzc0MTBGMEEzNzQwQ0YwRUZCNDAzMEI2NAorOjBDMUIzNDAwRTQ5MDc2N0NGMEEzNzQxOEYwQTNGMDIyN0IKKzoxMDQxMUIwMDkwNzY4REUwNjQwMTcwMjczMDI3MDhDMjI3MTIwODAwQzMKKzoxMDQxMkIwMDEyMTc0QTMwMjgwOEMyMjgxMjM4NzQxMjE3NEEzMDJBM0MKKzoxMDQxM0IwMDBFRTQ5MDc2OERGMEMyMkE5MDdGQjRFMDQ0MDJGMDkwQUEKKzoxMDQxNEIwMDc2M0ZFMEI0MDEwNUU0RjAxMjMyNkY5MDc2NDFFMEI0QjMKKzoxMDQxNUIwMDAxMDVFNEYwMTIzNDlBOTA3NjQwRTBCNDAxMDMxMjM0NzYKKzoxMDQxNkIwMDlBMTIzMDAwMzAzMzAzMTI0MDAwOTA3RjlCRTAyMEU0MjIKKzoxMDQxN0IwMDAyQzIzRjkwN0Y5QkUwMzBFNDAyRDIzRjkwN0Y5QkUwRjYKKzoxMDQxOEIwMDIwRTUwMkMyM0U5MDdGOUJFMDMwRTUwMkQyM0VBMjQxODkKKzoxMDQxOUIwMDMwM0YwMUIzNTAxRkEyM0Y5MjQxMzAzRjA5OTA3Njk3QjkKKzoxMDQxQUIwMEUwNTRGRUYwODAwNzkwNzY5N0UwNDQwMUYwOTA3Njk3MEMKKzoxMDQxQkIwMEUwOTA4MDAyRjAzMDNGMzQ5MDc2MTlFMEZGQjQwMTBFQUUKKzoxMDQxQ0IwMDkwNzY3Qzc0NjdGMEEzNzQwNkYwQTM3NDBCRjBFRkI0RDUKKzoxMDQxREIwMDAyMEJFNDkwNzY3Q0YwQTNGMEEzNzQwQ0YwRUZCNDAzMjUKKzoxMDQxRUIwMDBCRTQ5MDc2N0NGMEEzRjBBMzc0MThGMEEyNDAzMDNFNjEKKzoxMDQxRkIwMDAxQjM1MDFGQTIzRTkyNDAzMDNFMDk5MDc2OTVFMDQ0QTkKKzoxMDQyMEIwMDA0RjA4MDA3OTA3Njk1RTA1NEZCRjA5MDc2OTVFMDkwNjMKKzowNDQyMUIwMDgwMDFGMDIyMEMKKzowMjRFMTUwMEQzMjJBNgorOjAyNEUxNzAwRDMyMkE0Cis6MDI0RTE5MDBEMzIyQTIKKzoxMDNGRTUwMDkwN0ZFQUUwOTA3NjgyRjBFNDkwNzY5MUYwOTA3NjkyNzgKKzowQjNGRjUwMEYwOTA3NjkwRjA5MDc2OTNGMEQzMjJDRAorOjEwNERDQTAwOTA3NjgyRTA5MDdGMDBGMDkwN0ZCNTc0MDFGMEQzMjI1NAorOjEwNDg2MzAwOTA3RkVDRTA5MDc2ODNGMEUwMTQ2MDE3MTQ2MDIxMTRERAorOjEwNDg3MzAwNjAyQjE0NjAzMjI0MDQ3MDM4OTA3RkVBRTA5MDc2OTFDNAorOjEwNDg4MzAwRjA4MDM1OTA3RkVBRTA5MDc2OTJGMDEyM0U5RjgwMjg4OAorOjEwNDg5MzAwOTA3RkVBRTA5MDc2OTBGMDEyMTgwMDgwMUI5MDdGRUFGOAorOjEwNDhBMzAwRTA5MDc2ODRGMDgwMTE5MDdGRUFFMDkwNzY5M0YwODAzOAorOjBBNDhCMzAwMDc5MDdGQjRFMDQ0MDFGMEQzMjIyNworOjEwNDc0NTAwOTA3RkVDRTA5MDc2ODNGMEUwMTQ2MDFEMTQ2MDJBMTRFRAorOjEwNDc1NTAwNjAzNzE0NjA0NDI0MDQ3MDUwOTA3NjkxRTA5MDdGMDA5NworOjEwNDc2NTAwRjA5MDdGQjU3NDAxRjA4MDQ3OTA3NjkyRTA5MDdGMDBERAorOjEwNDc3NTAwRjA5MDdGQjU3NDAxRjA4MDM3OTA3NjkwRTA5MDdGMDBERgorOjEwNDc4NTAwRjA5MDdGQjU3NDAxRjA4MDI3OTA3Njg0RTA5MDdGMDBFQgorOjEwNDc5NTAwRjA5MDdGQjU3NDAxRjA4MDE3OTA3NjkzRTA5MDdGMDBEQworOjEwNDdBNTAwRjA5MDdGQjU3NDAxRjA4MDA3OTA3RkI0RTA0NDAxRjA4QworOjAyNDdCNTAwRDMyMjBECis6MDI0RTFCMDBEMzIyQTAKKzowMjRFMUQwMEQzMjI5RQorOjAyNEUxRjAwRDMyMjlDCis6MDI0RTIxMDBDMzIyQUEKKzoxMDJGRTcwMEMwRTBDMDgzQzA4MkQyMjY1MzkxRUY5MDdGQUI3NDAxQkIKKzowODJGRjcwMEYwRDA4MkQwODNEMEUwMzI1QgorOjEwNERCNDAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFCNzQwNEYwRDAwNQorOjA2NERDNDAwODJEMDgzRDBFMDMyMzIKKzoxMDNENDcwMEMwRTBDMEYwQzA4M0MwODJDMEQwRThDMEUwRTlDMEUwRjYKKzoxMDNENTcwMEVBQzBFMEVCQzBFMEVDQzBFMEVEQzBFMEVFQzBFMEVGQjEKKzoxMDNENjcwMEMwRTA5MDdGQTJFMDkwNzY3RkYwOTA3Rjc0RTA5MDc2M0QKKzoxMDNENzcwMDg3RjA5MDdGNzVFMDkwNzY4OEYwOTA3Rjk4RTA0NDAyMTYKKzoxMDNEODcwMEYwOTA3Njk2RTBGRjIwRTEwQzQ0MDJGMDkwODAwM0YwN0IKKzoxMDNEOTcwMEQyMzIxMjRCMjg5MDc2N0ZFMDIwRTI1MDkwNzY4N0UwNkYKKzoxMDNEQTcwMEZFQTNFMDdDMDAyNDAwRjUzNEVDM0VGNTMzOTA3Njk4RDIKKzoxMDNEQjcwMEUwRkRBRTMzQUYzNDEyMzZEODkwNzY4N0VGRjBEMjJGQ0UKKzoxMDNEQzcwMDMwMzEyOTIwM0YyNkMyMzE5MDdGOTRFMDU0Q0ZGMDkwQzQKKzoxMDNERDcwMDdGOUFFMDMwRTQwNEQyMkRDMjJDOTA3RjlBRTAyMEU1NTAKKzoxMDNERTcwMDA0QzIyREQyMkM5MDdGOTRFMDQ0MzBGMDEyNDhCRDEyQ0IKKzoxMDNERjcwMDFCMDQzMDJGMTIxMjQyMUZDMjJGNzVFODAxMTIxNjhBQjgKKzoxMDNFMDcwMDc1RTgwREQyMkI4MDA1NzVFODAxQzIyQjIwMkIzNDkwNjUKKzoxMDNFMTcwMDc2MTlFMEZGQjQwMTBFOTA3NjdDNzQ2N0YwQTM3NDA2MDAKKzoxMDNFMjcwMEYwQTM3NDBCRjBFRkI0MDIwQjkwNzY3Q0U0RjBBM0YwRjAKKzoxMDNFMzcwMEEzNzQwQ0YwRUZCNDAzMEI5MDc2N0NFNEYwQTNGMEEzMkIKKzoxMDNFNDcwMDc0MThGMDc1Q0FEMzc1Q0JGRUQyQ0EzMDM0MDRDMjM0QTUKKzoxMDNFNTcwMDgwMDJEMjM0MzAzNDBEOTA3Njg5RTBDMzk0MDM0MDA0NTUKKzoxMDNFNjcwMEUwMjRGREYwNTM5MUVGOTA3RkFCNzQwMkYwRjA5MDdGNjgKKzoxMDNFNzcwMDk4RTA1NEZERjBEMEUwRkZEMEUwRkVEMEUwRkREMEUwQzgKKzoxMDNFODcwMEZDRDBFMEZCRDBFMEZBRDBFMEY5RDBFMEY4RDBEMEQwMTkKKzowODNFOTcwMDgyRDA4M0QwRjBEMEUwMzJBQworOjEwNEJFOTAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFCNzQxMEYwOTAwNgorOjEwNEJGOTAwNzY5NkUwNTRGREYwOTA4MDAzRjBEMDgyRDA4M0QwRTAyNworOjAxNEMwOTAwMzI3OAorOjAxMkZGRjAwMzI5RgorOjEwNEM0MzAwQzBFMEMwODNDMDgyRDIyNTUzOTFFRjkwN0ZBQjc0MDgzQworOjA4NEM1MzAwRjBEMDgyRDA4M0QwRTAzMkUyCis6MTA0QzVCMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQTlFMDQ0MDFGMDg0Cis6MDc0QzZCMDBEMDgyRDA4M0QwRTAzMkJCCis6MTA0QzBBMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUFFMDQ0MDFGMEQ0Cis6MEY0QzFBMDBDMjI5OTA3NjhENzQwMUYwRDA4MkQwODNEMEUwMzIyMQorOjEwNEM3MjAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkE5RTA0NDAyRjA2QworOjA3NEM4MjAwRDA4MkQwODNEMEUwMzJBNAorOjEwNEI1QTAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFBRTA0NDAyRjA4NAorOjEwNEI2QTAwOTA3RkM3RTBGNTExNzUwRjAwNzUwRDAwRDIzM0QwODIyMgorOjA1NEI3QTAwRDA4M0QwRTAzMjAxCis6MTA0Qzg5MDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQTlFMDQ0MDRGMDUzCis6MDc0Qzk5MDBEMDgyRDA4M0QwRTAzMjhECis6MTA0Q0EwMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUFFMDQ0MDRGMDNCCis6MDc0Q0IwMDBEMDgyRDA4M0QwRTAzMjc2Cis6MTA0Q0I3MDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQTlFMDQ0MDhGMDIxCis6MDc0Q0M3MDBEMDgyRDA4M0QwRTAzMjVGCis6MTA0Q0NFMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUFFMDQ0MDhGMDA5Cis6MDc0Q0RFMDBEMDgyRDA4M0QwRTAzMjQ4Cis6MTA0Q0U1MDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQTlFMDQ0MTBGMEVCCis6MDc0Q0Y1MDBEMDgyRDA4M0QwRTAzMjMxCis6MTA0Q0ZDMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUFFMDQ0MTBGMEQzCis6MDc0RDBDMDBEMDgyRDA4M0QwRTAzMjE5Cis6MTA0RDEzMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQTlFMDQ0MjBGMEFDCis6MDc0RDIzMDBEMDgyRDA4M0QwRTAzMjAyCis6MTA0RDJBMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUFFMDQ0MjBGMDk0Cis6MDc0RDNBMDBEMDgyRDA4M0QwRTAzMkVCCis6MTA0RDQxMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQTlFMDQ0NDBGMDVFCis6MDc0RDUxMDBEMDgyRDA4M0QwRTAzMkQ0Cis6MTA0RDU4MDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUFFMDQ0NDBGMDQ2Cis6MDc0RDY4MDBEMDgyRDA4M0QwRTAzMkJECis6MTA0RDZGMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQTlFMDQ0ODBGMEYwCis6MDc0RDdGMDBEMDgyRDA4M0QwRTAzMkE2Cis6MTA0RDg2MDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUFFMDQ0ODBGMEQ4Cis6MDc0RDk2MDBEMDgyRDA4M0QwRTAzMjhGCis6MTA0MjFGMDA5MDc2MTlFMDY0MDE3MDM1OTA3Njg3RTBGRkQzOTQyRDg2Cis6MTA0MjJGMDA0MDJCOTA3Njg2NzQwMUYwOTA3Njg1RTAwNEYwRTBEMzExCis6MTA0MjNGMDA5NDBGNDAxOUU0RjBFRkQzOTQzMTQwMDg5MDc2MTk3NDNECis6MTA0MjRGMDAwM0YwODAwNjkwNzYxOTc0MDJGMDEyM0U5RjkwNzYxOTUzCis6MTA0MjVGMDBFMEI0MDIyQzkwNzY4N0UwRkZDMzk0MkY1MDIyRUZEMzY3Cis6MTA0MjZGMDA5NDJBNDAxQzkwNzY4Njc0MDFGMDkwNzY4NUUwMDRGMEQ1Cis6MTA0MjdGMDBFMEQzOTQwRjQwMEFFNEYwOTA3NjE5MDRGMDEyM0U5RkI5Cis6MTA0MjhGMDA5MDc2MTlFMEI0MDIyNjkwNzY4N0UwRDM5NDMxNDAxREUyCis6MTA0MjlGMDA5MDc2ODY3NDAxRjA5MDc2ODVFMDA0RjBFMEQzOTQwRjY5Cis6MTA0MkFGMDA0MDBCRTRGMDkwNzYxOTc0MDNGMDEyM0U5RjkwNzYxOTRDCis6MTA0MkJGMDBFMDY0MDM3MDNGOTA3Njg3RTBGRkMzOTQ1RjUwMzU5MEMyCis6MTA0MkNGMDA3Njg2NzQwMUYwOTA3Njg1RTAwNEYwRTBEMzk0MEY0MDg5Cis6MTA0MkRGMDAyM0U0RjBFRkMzOTQyRjUwMENFRkQzOTQyQTQwMDY5MEIxCis6MTA0MkVGMDA3NjE5NzQwMUYwRUZEMzk0MkY0MDA2OTA3NjE5NzQwMjZCCis6MTA0MkZGMDBGMDEyM0U5RjkwNzY4NkUwNzAwNTkwNzY4NUYwMjJFNDZFCis6MDU0MzBGMDA5MDc2ODZGMDIyMEIKKzoxMDQ1NjUwMDkwNzY5QTc0MDJGMEU0OTA3NjkxRjBBM0YwOTA3NjkwQUMKKzoxMDQ1NzUwMEYwOTA3NjkzRjA5MDc2OTY3NDAzRjA5MDgwMDNGMEU0RDMKKzoxMDQ1ODUwMDkwNzY5N0YwOTA4MDAyRjA5MDc2OTQwNEYwOTA4MDAwRjkKKzoxMDQ1OTUwMEYwRTQ5MDc2OEVGMDkwNzYxQUYwOTA3Njk1MDRGMEMyNUQKKzoxMDQ1QTUwMDJFOTA3RjlCRTBGRjU0MTBGRjcwMDJDMjNGOTA3RjlCQ0YKKzoxMDQ1QjUwMEUwRkY1NDEwRkVGRkJFMTAwMkQyM0Y5MDdGOUJFMEZGNEMKKzoxMDQ1QzUwMDU0MjBGRjcwMDJDMjNFOTA3RjlCRTBGRjU0MjBGRUZGMDcKKzoxMDQ1RDUwMEJFMjAwMkQyM0UzMDNGMDk5MDc2OTdFMDU0RkVGMDgwMkYKKzoxMDQ1RTUwMDA3OTA3Njk3RTA0NDAxRjA5MDc2OTdFMDkwODAwMkYwOEUKKzoxMDQ1RjUwMDMwM0UwOTkwNzY5NUUwNDQwNEYwODAwNzkwNzY5NUUwOEEKKzoxMDQ2MDUwMDU0RkJGMDkwNzY5NUUwOTA4MDAxRjBBMjNFOTI0MEEyOTYKKzowMzQ2MTUwMDNGOTI0MTkwCis6MDE0NjE4MDAyMjdGCis6MTAzRTlGMDA5MDc2OTJFMDE0NjAxRDE0NzAwMkUxNTQyNDAyNjAwMkM3Cis6MTAzRUFGMDBFMUU0OTA3Njk0NzQwMUYwOTA4MDAwRjBFNDkwNzY4RUM3Cis6MTAzRUJGMDBGMEQyMzEyMjkwNzYxOUUwRkZCNDAxMUJFNDkwN0ZGMjJCCis6MTAzRUNGMDBGMDkwN0ZGMzc0MzBGMDkwN0ZGRjc0RkNGMDkwNzY5NzUyCis6MTAzRURGMDBFMDU0RkRGMDU0RkJGMEVGQjQwMjFCRTQ5MDdGRjJGMERFCis6MTAzRUVGMDA5MDdGRjM3NDM0RjA5MDdGRkY3NEZDRjA5MDc2OTdFMDNFCis6MTAzRUZGMDA0NDAyRjA1NEZCRjBFRkI0MDMxOEU0OTA3RkYyRjA5MDFCCis6MTAzRjBGMDA3RkYzNzQ2NEYwOTA3RkZGNzRGQ0YwOTA3Njk3RTA0NDM5Cis6MTAzRjFGMDAwNEYwOTA3Njk0RTA0NDAxRjA5MDgwMDBGMDMwM0YwOTc3Cis6MTAzRjJGMDA5MDc2OTdFMDU0RkVGMDgwMDc5MDc2OTdFMDQ0MDFGMDhBCis6MTAzRjNGMDA5MDc2OTdFMDkwODAwMkYwOTA3Njk4NzQwNEYwOTA3NkU3Cis6MTAzRjRGMDA4RTc0MDFGMDIyOTA3NjE5RTBGRkI0MDExQkU0OTA3RjhDCis6MTAzRjVGMDBGMkYwOTA3RkYzNzQ0NEYwOTA3RkZGNzRGQ0YwOTA3NjUyCis6MTAzRjZGMDA5N0UwNTRGREYwNTRGQkYwRUZCNDAyMUJFNDkwN0ZGMkE2Cis6MTAzRjdGMDBGMDkwN0ZGMzc0NENGMDkwN0ZGRjc0RkNGMDkwNzY5Nzg1Cis6MTAzRjhGMDBFMDQ0MDJGMDU0RkJGMEVGQjQwMzE4RTQ5MDdGRjJGMDNBCis6MTAzRjlGMDA5MDdGRjM3NDk0RjA5MDdGRkY3NEZDRjA5MDc2OTdFMDJECis6MTAzRkFGMDA0NDA0RjA5MDc2OTRFMDU0RkVGMDkwODAwMEYwMzAzRjlGCis6MTAzRkJGMDAwOTkwNzY5N0UwNTRGRUYwODAwNzkwNzY5N0UwNDQwMUUxCis6MTAzRkNGMDBGMDkwNzY5N0UwOTA4MDAyRjA5MDc2OTg3NDA2RjA5MERCCis6MDYzRkRGMDA3NjhFNzQwMkYwMjI1MAorOjEwMTgwMDAwOTA3NjkwRTAxNDYwMzcxNDcwMDIwMUQ4MTQ3MDAyMjFCMQorOjEwMTgxMDAwNzIxNDcwMDI0MTNCMjQwNDYwMDI2MTAzOTA3RkZDNzRFNworOjEwMTgyMDAwQ0NGMDkwN0ZGRjc0RkNGMDkwNzY5NUUwNDQwMUYwNTQ4QQorOjEwMTgzMDAwMDVGMDkwODAwMUYwRTQ5MDc2MUFGMEMyMkUyMjkwNzZBNgorOjEwMTg0MDAwOTVFMDQ0MDFGMDQ0MDJGMDMwM0UwNkUwNDQwNEYwODBBQworOjEwMTg1MDAwMDc5MDc2OTVFMDU0RkJGMDkwNzYxQUUwQjQwMTA4OTA3QQorOjEwMTg2MDAwNzY5NUUwOTA4MDAxRjA5MDc2MTlFMEZGQjQwMTIyOTAyNworOjEwMTg3MDAwN0ZGQzc0NzRGMDkwN0ZGRjc0RkNGMDkwNzY4Rjc0MkI3MworOjEwMTg4MDAwRjA5MDc2OTdFMDU0RkRGMEU0OTA3NjgxRjA5MDc2ODBDOQorOjEwMTg5MDAwRjBFRkI0MDIyMjkwN0ZGQzc0NjhGMDkwN0ZGRjc0RkMzQworOjEwMThBMDAwRjA5MDc2OEY3NDJGRjA5MDc2OTdFMDQ0MDJGMEU0OTBGOQorOjEwMThCMDAwNzY4MUYwOTA3NjgwRjAzMDNGMDk5MDc2OTdFMDU0RkU4NAorOjEwMThDMDAwRjA4MDA3OTA3Njk3RTA0NDAxRjA5MDc2OTdFMDU0RkIyMworOjEwMThEMDAwRjA5MDgwMDJGMEQyMkUyMjkwNzY5NUUwNTRGRUYwNDRGMworOjEwMThFMDAwMDJGMDMwM0UwNkUwNDQwNEYwODAwNzkwNzY5NUUwNTQyNAorOjEwMThGMDAwRkJGMDkwNzYxQUUwQjQwMTA4OTA3Njk1RTA5MDgwMDFCNAorOjEwMTkwMDAwRjA5MDc2MTlFMEZGQjQwMTIyOTA3RkZDNzQzMEYwOTBFMworOjEwMTkxMDAwN0ZGRjc0RkNGMDkwNzY4Rjc0MkJGMDkwNzY5N0UwNTRGNAorOjEwMTkyMDAwRkRGMEU0OTA3NjgxRjA5MDc2ODBGMEVGQjQwMjIyOTBBMgorOjEwMTkzMDAwN0ZGQzc0MUNGMDkwN0ZGRjc0RkNGMDkwNzY4Rjc0MkYwNgorOjEwMTk0MDAwRjA5MDc2OTdFMDQ0MDJGMEU0OTA3NjgxRjA5MDc2ODAxMworOjEwMTk1MDAwRjAzMDNGMDk5MDc2OTdFMDU0RkVGMDgwMDc5MDc2OTczQworOjEwMTk2MDAwRTA0NDAxRjA5MDc2OTdFMDU0RkJGMDkwODAwMkYwRDJEMgorOjEwMTk3MDAwMkUyMjkwNzY5NUUwNDQwMUYwNDQwMkYwNDQwOEYwMzBDNQorOjEwMTk4MDAwM0UwNkUwNDQwNEYwODAwNzkwNzY5NUUwNTRGQkYwOTAyQQorOjEwMTk5MDAwNzYxQUUwQjQwMTA4OTA3Njk1RTA5MDgwMDFGMDkwNzY5OAorOjEwMTlBMDAwMTlFMEZGQjQwMTI1OTA3RkZDNzRDQ0YwOTA3RkZGNzRBOAorOjEwMTlCMDAwRkNGMDkwNzY4Rjc0MkJGMDkwNzY5N0UwNTRGREYwNTQwNQorOjEwMTlDMDAwRkJGMEU0OTA3NjgxRjA5MDc2ODBGMEVGQjQwMjI1OTAwMQorOjEwMTlEMDAwN0ZGQzc0QzhGMDkwN0ZGRjc0RkNGMDkwNzY4Rjc0MkZCQQorOjEwMTlFMDAwRjA5MDc2OTdFMDQ0MDJGMDU0RkJGMEU0OTA3NjgxRjBCQQorOjEwMTlGMDAwOTA3NjgwRjBFRkI0MDMyNTkwN0ZGQzc0OThGMDkwN0Y5MAorOjEwMUEwMDAwRkY3NEZDRjA5MDc2OEY3NDVGRjA5MDc2OTdFMDU0RkQ1MQorOjEwMUExMDAwRjA0NDA0RjBFNDkwNzY4MUYwOTA3NjgwRjAzMDNGMDk1NQorOjEwMUEyMDAwOTA3Njk3RTA1NEZFRjA4MDA3OTA3Njk3RTA0NDAxRjBCRQorOjEwMUEzMDAwOTA3Njk3RTA5MDgwMDJGMEQyMkUyMjkwNzY5NUUwNTQzNgorOjEwMUE0MDAwRkVGMDQ0MDJGMDQ0MDhGMDMwM0UwNkUwNDQwNEYwODAyQQorOjEwMUE1MDAwMDc5MDc2OTVFMDU0RkJGMDkwNzYxQUUwQjQwMTA4OTA3OAorOjEwMUE2MDAwNzY5NUUwOTA4MDAxRjA5MDc2MTlFMEZGQjQwMTI1OTAyMgorOjEwMUE3MDAwN0ZGQzc0QjRGMDkwN0ZGRjc0RkNGMDkwNzY4Rjc0MkIzMQorOjEwMUE4MDAwRjA5MDc2OTdFMDU0RkRGMDU0RkJGMEU0OTA3NjgxRjAwRQorOjEwMUE5MDAwOTA3NjgwRjBFRkI0MDIyNTkwN0ZGQzc0QjBGMDkwN0ZEOAorOjEwMUFBMDAwRkY3NEZDRjA5MDc2OEY3NDJGRjA5MDc2OTdFMDQ0MDJFQworOjEwMUFCMDAwRjA1NEZCRjBFNDkwNzY4MUYwOTA3NjgwRjBFRkI0MDM4MAorOjEwMUFDMDAwMjU5MDdGRkM3NDY4RjA5MDdGRkY3NEZDRjA5MDc2OEYxNworOjEwMUFEMDAwNzQ1RkYwOTA3Njk3RTA1NEZERjA0NDA0RjBFNDkwNzY2MworOjEwMUFFMDAwODFGMDkwNzY4MEYwMzAzRjA5OTA3Njk3RTA1NEZFRjBEOAorOjEwMUFGMDAwODAwNzkwNzY5N0UwNDQwMUYwOTA3Njk3RTA5MDgwMDIxRQorOjA0MUIwMDAwRjBEMjJFMjJDRgorOjA0MENBMTAwNDE3NjIzMDA3NQorOjEwMkRBOTAwRTQ5MDc2MzZGMEUwRkY3NUYwMDNBNDI0MEVGNTgyRTQ5MgorOjEwMkRCOTAwMzQ3NUY1ODM3NDAxRjBFRjc1RjAwM0E0MjQwRkY1ODJERgorOjEwMkRDOTAwRTQzNDc1RjU4Mzc0MDFGMEVGNzVGMDAzQTQyNDEwRjU2QworOjEwMkREOTAwODJFNDM0NzVGNTgzRTRGMDkwNzYzNkUwMDRGMEUwRkZBMAorOjEwMkRFOTAwNzVGMDAzQTQyNDBFRjU4MkU0MzQ3NUY1ODM3NDEwRjBBQworOjEwMkRGOTAwRUY3NUYwMDNBNDI0MEZGNTgyRTQzNDc1RjU4Mzc0MDVBNworOjEwMkUwOTAwRjBFRjc1RjAwM0E0MjQxMEY1ODJFNDM0NzVGNTgzRTQzQQorOjEwMkUxOTAwRjA5MDc2MzZFMDA0RjBFMEZGNzVGMDAzQTQyNDBFRjU5NworOjEwMkUyOTAwODJFNDM0NzVGNTgzNzQwMkYwRUY3NUYwMDNBNDI0MEY3RQorOjEwMkUzOTAwRjU4MkU0MzQ3NUY1ODM3NDAyRjBFRjc1RjAwM0E0MjQ4OAorOjEwMkU0OTAwMTBGNTgyRTQzNDc1RjU4M0U0RjA5MDc2MzZFMDA0RjAwOQorOjEwMkU1OTAwRTBGRjc1RjAwM0E0MjQwRUY1ODJFNDM0NzVGNTgzNzQ1QworOjEwMkU2OTAwMDFGMEVGNzVGMDAzQTQyNDBGRjU4MkU0MzQ3NUY1ODNCRQorOjEwMkU3OTAwNzQwM0YwRUY3NUYwMDNBNDI0MTBGNTgyRTQzNDc1RjVCQQorOjEwMkU4OTAwODNFNEYwOTA3NjM2RTAwNEYwRTBGRjc1RjAwM0E0MjRDMworOjEwMkU5OTAwMEVGNTgyRTQzNDc1RjU4Mzc0MTBGMEVGNzVGMDAzQTQzMAorOjEwMkVBOTAwMjQwRkY1ODJFNDM0NzVGNTgzNzQwNkYwRUY3NUYwMDNBOQorOjEwMkVCOTAwQTQyNDEwRjU4MkU0MzQ3NUY1ODNFNEYwOTA3NjM2RTBDNQorOjEwMkVDOTAwMDRGMEUwRkY3NUYwMDNBNDI0MEVGNTgyRTQzNDc1RjVFRgorOjEwMkVEOTAwODM3NDAyRjBFRjc1RjAwM0E0MjQwRkY1ODJFNDM0NzVDRQorOjEwMkVFOTAwRjU4Mzc0MDRGMEVGNzVGMDAzQTQyNDEwRjU4MkU0MzQzQgorOjEwMkVGOTAwNzVGNTgzRTRGMDkwNzYzNkUwMDRGMEUwRkY3NUYwMDNCMQorOjEwMkYwOTAwQTQyNDBFRjU4MkU0MzQ3NUY1ODM3NDAyRjBFRjc1RjBBQworOjEwMkYxOTAwMDNBNDI0MEZGNTgyRTQzNDc1RjU4Mzc0MDhGMEVGNzU4MgorOjEwMkYyOTAwRjAwM0E0MjQxMEY1ODJFNDM0NzVGNTgzNzQwNEYwOTA1OQorOjEwMkYzOTAwNzYzNkUwMDRGMEUwRkY3NUYwMDNBNDI0MEVGNTgyRTQ5MAorOjEwMkY0OTAwMzQ3NUY1ODM3NDAyRjBFRjc1RjAwM0E0MjQwRkY1ODI0QworOjEwMkY1OTAwRTQzNDc1RjU4Mzc0MEFGMEVGNzVGMDAzQTQyNDEwRjVEMQorOjEwMkY2OTAwODJFNDM0NzVGNTgzNzQwNEYwOTA3NjM2RTAwNEYwRTA3OQorOjEwMkY3OTAwRkY3NUYwMDNBNDI0MEVGNTgyRTQzNDc1RjU4Mzc0MDIxOQorOjEwMkY4OTAwRjBFRjc1RjAwM0E0MjQwRkY1ODJFNDM0NzVGNTgzNzQyQQorOjEwMkY5OTAwMDlGMEVGNzVGMDAzQTQyNDEwRjU4MkU0MzQ3NUY1ODM4NAorOjEwMkZBOTAwNzQwNEYwOTA3NjM2RTAwNEYwRTBGRjc1RjAwM0E0MjQ5MQorOjEwMkZCOTAwMEVGNTgyRTQzNDc1RjU4Mzc0MDJGMEVGNzVGMDAzQTQxRAorOjEwMkZDOTAwMjQwRkY1ODJFNDM0NzVGNTgzNzQwN0YwRUY3NUYwMDM4NworOjBFMkZEOTAwQTQyNDEwRjU4MkU0MzQ3NUY1ODM3NDA0RjAyMjBDCis6MTAzQkQzMDBFNDkwNzYzNkYwRTBGQjc1RjAwRkE0MjQ0MUY1ODJFNDFGCis6MTAzQkUzMDAzNDc1RjU4Mzc0NDBGMEVCNzVGMDBGQTQyNDQyRjU4MjJECis6MTAzQkYzMDBFNDM0NzVGNTgzNzQwQUYwRUI3NUYwMEZBNDI0NDNGNUYwCis6MTAzQzAzMDA4MkU0MzQ3NUY1ODMxMjM3QzgwMDAwQUM0NEVCNzVGMEQ5Cis6MTAzQzEzMDAwRkE0MjQ0N0Y1ODJFNDM0NzVGNTgzMTIzN0M4MDAwMEY2Cis6MTAzQzIzMDBBQzQ0RUI3NUYwMEZBNDI0NEJGNTgyRTQzNDc1RjU4M0IzCis6MTAzQzMzMDAxMjM3QzgwMDAxNzcwMDkwNzYzNkUwMDRGMEUwRkI3NTk4Cis6MTAzQzQzMDBGMDBGQTQyNDQxRjU4MkU0MzQ3NUY1ODM3NDQwRjBFQjVFCis6MTAzQzUzMDA3NUYwMEZBNDI0NDJGNTgyRTQzNDc1RjU4Mzc0OENGMDc3Cis6MTAzQzYzMDBFQjc1RjAwRkE0MjQ0M0Y1ODJFNDM0NzVGNTgzMTIzNzIyCis6MTAzQzczMDBDODAwMDBBQzQ0RUI3NUYwMEZBNDI0NDdGNTgyRTQzNDhDCis6MTAzQzgzMDA3NUY1ODMxMjM3QzgwMDAwQUM0NEVCNzVGMDBGQTQyNDFDCis6MTAzQzkzMDA0QkY1ODJFNDM0NzVGNTgzMTIzN0M4MDAwMTc3MDA5MDQxCis6MTAzQ0EzMDA3NjM2RTAwNEYwRTBGRjc1RjAwRkE0MjQ0MUY1ODJFNERBCis6MTAzQ0IzMDAzNDc1RjU4Mzc0NDBGMEVGNzVGMDBGQTQyNDQyRjU4MjU4Cis6MTAzQ0MzMDBFNDM0NzVGNTgzNzQ4RkYwOTA3NjM2RTAwNEYwRTBGRjBBCis6MTAzQ0QzMDA3NUYwMEZBNDI0NDFGNTgyRTQzNDc1RjU4Mzc0NDFGMDQzCis6MTAzQ0UzMDBFRjc1RjAwRkE0MjQ0MkY1ODJFNDM0NzVGNTgzNzQ4NEYwCis6MTAzQ0YzMDBGMDkwNzYzNkUwMDRGMEUwRkY3NUYwMEZBNDI0NDFGNTcwCis6MTAzRDAzMDA4MkU0MzQ3NUY1ODM3NDYxRjBFRjc1RjAwRkE0MjQ0MkY3Cis6MTAzRDEzMDBGNTgyRTQzNDc1RjU4Mzc0ODFGMDkwNzYzNkUwMDRGMDJGCis6MTAzRDIzMDBFMEZGNzVGMDBGQTQyNDQxRjU4MkU0MzQ3NUY1ODM3NDQ0Cis6MTAzRDMzMDA2MUYwRUY3NUYwMEZBNDI0NDJGNTgyRTQzNDc1RjU4MzQ2Cis6MDQzRDQzMDA3NDAxRjAyMkY1Cis6MTA0NjE5MDBFNDkwNzYzNkYwRTBGRjc1RjAwM0E0MjQzMkY1ODJFNEU1Cis6MTA0NjI5MDAzNDc1RjU4M0U0RjBFRjc1RjAwM0E0MjQzM0Y1ODJFNERGCis6MTA0NjM5MDAzNDc1RjU4Mzc0MDFGMDkwNzYzNkUwMDRGMEUwRkY3NTg3Cis6MTA0NjQ5MDBGMDAzQTQyNDMyRjU4MkU0MzQ3NUY1ODNFNEYwRUY3NUMwCis6MTA0NjU5MDBGMDAzQTQyNDMzRjU4MkU0MzQ3NUY1ODM3NDAyRjA5MEYxCis6MTA0NjY5MDA3NjM2RTAwNEYwRTBGRjc1RjAwM0E0MjQzMkY1ODJFNDI1Cis6MTA0Njc5MDAzNDc1RjU4M0U0RjBFRjc1RjAwM0E0MjQzM0Y1ODJFNDhGCis6MTA0Njg5MDAzNDc1RjU4Mzc0MDNGMDkwNzYzNkUwMDRGMEUwRkY3NTM1Cis6MTA0Njk5MDBGMDAzQTQyNDMyRjU4MkU0MzQ3NUY1ODNFNEYwRUY3NTcwCis6MTA0NkE5MDBGMDAzQTQyNDMzRjU4MkU0MzQ3NUY1ODM3NDA0RjAyMjBECis6MTAzQTQyMDBFNDkwNzYzNUYwOTA3NjM1RTBGRkMzOTQwMzQwMDI0MTZFCis6MTAzQTUyMDBGRkVGNzVGMDBBQTQyNEFBRjU4MkU0MzQ3NUY1ODNFRjJBCis6MTAzQTYyMDBGMEVGNzVGMDBBQTQyNEFCRjU4MkU0MzQ3NUY1ODNFNDMzCis6MTAzQTcyMDBGMEVGNzVGMDBBQTQyNEFDRjU4MkU0MzQ3NUY1ODM3NDkyCis6MTAzQTgyMDBGMEYwRUY3NUYwMEFBNDI0QURGNTgyRTQzNDc1RjU4MzA1Cis6MTAzQTkyMDA3NEZGRjBFRjc1RjAwQUE0MjRBRUY1ODJFNDM0NzVGNUY0Cis6MTAzQUEyMDA4M0U0RjBFRjc1RjAwQUE0MjRBRkY1ODJFNDM0NzVGNUVGCis6MTAzQUIyMDA4Mzc0ODBGMEVGNzVGMDBBQTQyNEIwRjU4MkU0MzQ3NUMzCis6MTAzQUMyMDBGNTgzRTRGMEVGNzVGMDBBQTQyNEIxRjU4MkU0MzQ3NUNECis6MTAzQUQyMDBGNTgzRTRGMEVGNzVGMDBBQTQyNEIyRjU4MkU0MzQ3NUJDCis6MTAzQUUyMDBGNTgzRTRGMEVGNzVGMDBBQTQyNEIzRjU4MkU0MzQ3NUFCCis6MTAzQUYyMDBGNTgzNzQwMUYwOTA3NjM1RTAwNEYwNDE0NzkwNzYzQzBFCis6MTAzQjAyMDA3NDBBRjBFNEEzRjA5MDc2MzU3NDAzRjA5MDc2M0NFMDBBCis6MTAzQjEyMDBGRjkwNzYzNUUwRkVDMzlGNDAwMjYxRDI5MDc2M0RFMDkxCis6MTAzQjIyMDBGRjA0RjBFRTc1RjAwQUE0MjRBQUY1ODJFNDM0NzVGNUQ4Cis6MTAzQjMyMDA4M0VGRjBFRTc1RjAwQUE0MjRBQkY1ODJFNDM0NzVGNTU4Cis6MTAzQjQyMDA4M0U0RjBFRTc1RjAwQUE0MjRBQ0Y1ODJFNDM0NzVGNTUyCis6MTAzQjUyMDA4Mzc0NUVGMEVFNzVGMDBBQTQyNEFERjU4MkU0MzQ3NTQ4Cis6MTAzQjYyMDBGNTgzNzRCQUYwRUU3NUYwMEFBNDI0QUVGNTgyRTQzNDVCCis6MTAzQjcyMDA3NUY1ODM3NDA1RjBFRTc1RjAwQUE0MjRBRkY1ODJFNEJFCis6MTAzQjgyMDAzNDc1RjU4Mzc0ODBGMEVFNzVGMDBBQTQyNEIwRjU4MkUyCis6MTAzQjkyMDBFNDM0NzVGNTgzRTRGMEVFNzVGMDBBQTQyNEIxRjU4MkZECis6MTAzQkEyMDBFNDM0NzVGNTgzRTRGMEVFNzVGMDBBQTQyNEIyRjU4MkVDCis6MTAzQkIyMDBFNDM0NzVGNTgzNzQxNUYwRUU3NUYwMEFBNDI0QjNGNUI4Cis6MTAzQkMyMDA4MkU0MzQ3NUY1ODNFNEYwOTA3NjM1RTAwNEYwNjEwRTFBCis6MDEzQkQyMDAyMkQwCis6MTAwODAwMDBFNDkwNzYzMUYwOTA3NjMxRTBGRjc1RjAwM0E0MjQwRjg4Cis6MTAwODEwMDBGNTgyRTQzNDc1RjU4M0UwRkU5MDdGRURFMEZERUU2RDRBCis6MTAwODIwMDA2MDBFRUZDMzk0MEI1MDA4OTA3NjMxRTAwNEYwODBENTUxCis6MTAwODMwMDBFRkI0MEIwODkwN0ZCNEUwNDQwMUYwMjJFRjc1RjAwM0IxCis6MTAwODQwMDBBNDI0MEVGNTgyRTQzNDc1RjU4M0UwOTA3NjMzRjAyNDI5Cis6MTAwODUwMDBGMDYwMEEyNDBFNjAwMjgxODcxMjRCQzcyMjkwN0ZFRDYwCis6MTAwODYwMDBFMDY0MDU3MDUxOTA3NjE4NzQwNUYwOTA3NjM3NzQwMTQ1Cis6MTAwODcwMDBGMDkwNzYzOTc0MDNGMDkwNzYyMUYwRTQ5MDc2MjBGMEQxCis6MTAwODgwMDA5MDdGRUFFMEY0NjAyRjkwNzYyMEUwRkY3NUYwMEFBNEY0Cis6MTAwODkwMDAyNEFBRjU4MkU0MzQ3NUY1ODNFMEZFOTA3RkVBRTBGRDVBCis6MTAwOEEwMDBFRTZENjAxMjkwNzYyMUUwRkVFRkMzOUU1MDA4OTA3NkM4Cis6MTAwOEIwMDAyMEUwMDRGMDgwRDE5MDdGRURFMDY0MDY3MDUyOTA3NkU1Cis6MTAwOEMwMDAxODc0MDZGMDkwNzYzNzc0MDRGMDkwNzYzOTc0MEFGMDU0Cis6MTAwOEQwMDA5MDc2MjFGMDkwNzYyMDc0MDNGMDkwN0ZFQUUwRjQ2MDQ3Cis6MTAwOEUwMDAyRjkwNzYyMEUwRkY3NUYwMEFBNDI0QUFGNTgyRTQzNDY0Cis6MTAwOEYwMDA3NUY1ODNFMEZFOTA3RkVBRTBGREVFNkQ2MDEyOTA3Njg0Cis6MTAwOTAwMDAyMUUwRkVFRkMzOUU1MDA4OTA3NjIwRTAwNEYwODBEMUY1Cis6MTAwOTEwMDA5MDc2MjBFMEZGNzVGMDBBQTQyNEFBRjU4MkU0MzQ3NUVECis6MTAwOTIwMDBGNTgzRTA5MDcyMjlGMEU0OTA3NjNCRjA5MDc2MjFFMDM4Cis6MTAwOTMwMDBGRUVGNkU3MDA4OTA3RkI0RTA0NDAxRjAyMjkwN0ZFQkYwCis6MTAwOTQwMDBFMDE0NjAxMzE0NzAwMjIxRTIyNDAyNjAwMjgxN0Y5MDlGCis6MTAwOTUwMDA3RkI0RTA0NDAxRjAyMjkwN0ZFOUUwMTQ3MDdDOTA3RjQ2Cis6MTAwOTYwMDBFQUUwRjQ3MDQ4OTA3NjM3RTA5MDc2MjBGMDkwNzYzOTlGCis6MTAwOTcwMDBFMEZFOTA3NjIwRTBGREMzOUU1MDJCOTA3NjNCRTBGRTlCCis6MTAwOTgwMDAwNEYwNzRDMDJFRjU4MkU0MzQ3RUY1ODNFMEZFRUQ3NTRDCis6MTAwOTkwMDBGMDBBQTQyNEFCRjU4MkU0MzQ3NUY1ODNFRUYwOTA3NjhBCis6MTAwOUEwMDAyMEUwMDRGMDgwQzc5MDc2M0Y3NDAxRjAyMjkwN0VDMDcyCis6MTAwOUIwMDBFMEZFRUY3NUYwMEFBNDI0QUJGNTgyRTQzNDc1RjU4MzBDCis6MTAwOUMwMDBFRUYwRTBCNDAxMDg5MDc2M0U3NDAxRjA4MDA1RTQ5MDBBCis6MTAwOUQwMDA3NjNFRjA5MDc2M0Y3NDAxRjAyMjkwN0ZCNEUwNDQwMUJGCis6MTAwOUUwMDBGMDIyOTA3RkU5RTAyNEZFNzAwMjQxQTMxNDcwMDI2MUJFCis6MTAwOUYwMDAzRjE0NzAwMjYxREIyNDAzNjAwMjgxNzc5MDdGRUFFMDlDCis6MTAwQTAwMDBGNDcwNkI5MDc2MzdFMDkwNzYyMEYwOTA3NjM5RTBGRkM2Cis6MTAwQTEwMDA5MDc2MjBFMEZFQzM5RjUwNEU5MDc2M0JFMEZGMDRGMEJFCis6MTAwQTIwMDA3NEMwMkZGNTgyRTQzNDdFRjU4M0UwRkZFRTc1RjAwQUEyCis6MTAwQTMwMDBBNDI0QUNGNTgyRTQzNDc1RjU4M0VGRjA5MDc2M0JFMEM2Cis6MTAwQTQwMDBGRjA0RjA3NEMwMkZGNTgyRTQzNDdFRjU4M0UwRkZFRUZFCis6MTAwQTUwMDA3NUYwMEFBNDI0QURGNTgyRTQzNDc1RjU4M0VGRjA5MEM3Cis6MTAwQTYwMDA3NjIwRTAwNEYwODBBNDkwNzY0MDc0MDFGMDIyOTA3RTFECis6MTAwQTcwMDBDMEUwRkY5MDc2MjBFMEZFNzVGMDBBQTQyNEFDRjU4Mjc5Cis6MTAwQTgwMDBFNDM0NzVGNTgzRUZGMDkwN0VDMUUwRkZFRTc1RjAwQTc3Cis6MTAwQTkwMDBBNDI0QURGNTgyRTQzNDc1RjU4M0VGRjA5MDc2NDE3NENCCis6MTAwQUEwMDAwMUYwMjI5MDdGRUFFMEY0NzA2NjkwNzYzN0UwOTA3NjZECis6MTAwQUIwMDAyMEYwOTA3NjM5RTBGRjkwNzYyMEUwRkVDMzlGNDAwMjYwCis6MTAwQUMwMDA4MThFOTA3NjNCRTBGRjA0RjA3NEMwMkZGNTgyRTQzNDExCis6MTAwQUQwMDA3RUY1ODNFMEZGRUU3NUYwMEFBNDI0QUVGNTgyRTQzNERGCis6MTAwQUUwMDA3NUY1ODNFRkYwOTA3NjNCRTBGRjA0RjA3NEMwMkZGNUNFCis6MTAwQUYwMDA4MkU0MzQ3RUY1ODNFMEZGRUU3NUYwMEFBNDI0QUZGNUJFCis6MTAwQjAwMDA4MkU0MzQ3NUY1ODNFRkYwOTA3NjIwRTAwNEYwODBBMjYzCis6MTAwQjEwMDA5MDdFQzBFMEZGOTA3NjIwRTBGRTc1RjAwQUE0MjRBRTNGCis6MTAwQjIwMDBGNTgyRTQzNDc1RjU4M0VGRjA5MDdFQzFFMEZGRUU3NTU5Cis6MTAwQjMwMDBGMDBBQTQyNEFGRjU4MkU0MzQ3NUY1ODNFRkYwMjI5MDM3Cis6MTAwQjQwMDA3RkVBRTBGNDcwNjY5MDc2MzdFMDkwNzYyMEYwOTA3NjU5Cis6MTAwQjUwMDAzOUUwRkY5MDc2MjBFMEZFQzM5RjQwMDI4MThFOTA3NkMwCis6MTAwQjYwMDAzQkUwRkYwNEYwNzRDMDJGRjU4MkU0MzQ3RUY1ODNFMEFGCis6MTAwQjcwMDBGRkVFNzVGMDBBQTQyNEIwRjU4MkU0MzQ3NUY1ODNFRjM2Cis6MTAwQjgwMDBGMDkwNzYzQkUwRkYwNEYwNzRDMDJGRjU4MkU0MzQ3RUYxCis6MTAwQjkwMDBGNTgzRTBGRkVFNzVGMDBBQTQyNEIxRjU4MkU0MzQ3NTI0Cis6MTAwQkEwMDBGNTgzRUZGMDkwNzYyMEUwMDRGMDgwQTI5MDdFQzBFMDI0Cis6MTAwQkIwMDBGRjkwNzYyMEUwRkU3NUYwMEFBNDI0QjBGNTgyRTQzNEJDCis6MTAwQkMwMDA3NUY1ODNFRkYwOTA3RUMxRTBGRkVFNzVGMDBBQTQyNDg2Cis6MTAwQkQwMDBCMUY1ODJFNDM0NzVGNTgzRUZGMDIyOTA3RkVBRTBGNDFBCis6MTAwQkUwMDA3MDY2OTA3NjM3RTA5MDc2MjBGMDkwNzYzOUUwRkY5MDRFCis6MTAwQkYwMDA3NjIwRTBGRUMzOUY0MDAyODE4RTkwNzYzQkUwRkYwNEFBCis6MTAwQzAwMDBGMDc0QzAyRkY1ODJFNDM0N0VGNTgzRTBGRkVFNzVGMERBCis6MTAwQzEwMDAwQUE0MjRCMkY1ODJFNDM0NzVGNTgzRUZGMDkwNzYzQkI0Cis6MTAwQzIwMDBFMEZGMDRGMDc0QzAyRkY1ODJFNDM0N0VGNTgzRTBGRjJBCis6MTAwQzMwMDBFRTc1RjAwQUE0MjRCM0Y1ODJFNDM0NzVGNTgzRUZGMDgxCis6MTAwQzQwMDA5MDc2MjBFMDA0RjA4MEEyOTA3RUMwRTBGRjkwNzYyMEI1Cis6MTAwQzUwMDBFMEZFNzVGMDBBQTQyNEIyRjU4MkU0MzQ3NUY1ODNFRjYyCis6MTAwQzYwMDBGMDkwN0VDMUUwRkZFRTc1RjAwQUE0MjRCM0Y1ODJFNEIzCis6MTAwQzcwMDAzNDc1RjU4M0VGRjAyMjkwN0ZCNEUwNDQwMUYwMjI5MEM4Cis6MEYwQzgwMDA3RkI0RTA0NDAxRjAyMjkwN0ZCNEUwNDQwMUYwMjIwMQorOjEwMTAwMDAwRTQ5MDc2MkNGMDkwNzYyQ0UwRkY3NUYwMDNBNDI0MEY4QQorOjEwMTAxMDAwRjU4MkU0MzQ3NUY1ODNFMEZFOTA3RkVERTBGREVFNkQ0MgorOjEwMTAyMDAwNjAwRUVGQzM5NDBCNTAwODkwNzYyQ0UwMDRGMDgwRDU0RQorOjEwMTAzMDAwRUZCNDBCMDg5MDdGQjRFMDQ0MDFGMDIyRUY3NUYwMDNBOQorOjEwMTA0MDAwQTQyNDBFRjU4MkU0MzQ3NUY1ODNFMDkwNzYyRUYwMjQyNgorOjEwMTA1MDAwRjA2MDBBMjQwRjYwMDI4MTdEMTI0QkE0MjI5MDdGRUQ4NAorOjEwMTA2MDAwRTA2NDA1NzA1MTkwNzYxODc0MDVGMDkwNzYzODc0MDEzQworOjEwMTA3MDAwRjA5MDc2M0E3NDAzRjA5MDc2MUNGMEU0OTA3NjFCRjBEMgorOjEwMTA4MDAwOTA3RkVBRTBGNDYwMkY5MDc2MUJFMEZGNzVGMDBBQTRGMQorOjEwMTA5MDAwMjRBQUY1ODJFNDM0NzVGNTgzRTBGRTkwN0ZFQUUwRkQ1MgorOjEwMTBBMDAwRUU2RDYwMTI5MDc2MUNFMEZFRUZDMzlFNTAwODkwNzZDNQorOjEwMTBCMDAwMUJFMDA0RjA4MEQxOTA3RkVERTA2NDA2NzA1MjkwNzZFMgorOjEwMTBDMDAwMTg3NDA2RjA5MDc2Mzg3NDA0RjA5MDc2M0E3NDBBRjA0QQorOjEwMTBEMDAwOTA3NjFDRjA5MDc2MUI3NDAzRjA5MDdGRUFFMEY0NjA0OQorOjEwMTBFMDAwMkY5MDc2MUJFMEZGNzVGMDBBQTQyNEFBRjU4MkU0MzQ2MQorOjEwMTBGMDAwNzVGNTgzRTBGRTkwN0ZFQUUwRkRFRTZENjAxMjkwNzY3QworOjEwMTEwMDAwMUNFMEZFRUZDMzlFNTAwODkwNzYxQkUwMDRGMDgwRDFGNworOjEwMTExMDAwRTQ5MDc2MUVGMDkwNzYxQ0UwRkY5MDc2MUJFMEZFNkY2OAorOjEwMTEyMDAwNzAwODkwN0ZCNEUwNDQwMUYwMjI5MDdGRUJFMDE0NjBGRgorOjEwMTEzMDAwMTMxNDcwMDIyMUJGMjQwMjYwMDI4MTc1OTA3RkI0RTAxNQorOjEwMTE0MDAwNDQwMUYwMjI5MDdGRTlFMDI0N0Y3MDZCOTA3RkVBRTAxOQorOjEwMTE1MDAwRjQ3MDRBOTA3NjM4RTA5MDc2MUJGMDkwNzYzQUUwRkY5MworOjEwMTE2MDAwOTA3NjFCRTBGREMzOUY1MDJCRUQ3NUYwMEFBNDI0QUJENQorOjEwMTE3MDAwRjU4MkU0MzQ3NUY1ODNFMEZGOTA3NjFFRTBGRDA0RjAxRgorOjEwMTE4MDAwNzQwMDJERjU4MkU0MzQ3RkY1ODNFRkYwOTA3NjFCRTA1OAorOjEwMTE5MDAwMDRGMDgwQzc5MDc2MUVFMDkwN0ZCNUYwMjJFRTc1RjBFNworOjEwMTFBMDAwMEFBNDI0QUJGNTgyRTQzNDc1RjU4M0UwOTA3RjAwRjA2NworOjEwMTFCMDAwOTA3RkI1NzQwMUYwMjI5MDdGQjRFMDQ0MDFGMDIyOTA1QQorOjEwMTFDMDAwN0ZFOUUwMjQ3RTcwMDI0MTdFMTQ3MDAyNjEyMzE0NzA3NgorOjEwMTFEMDAwMDI2MUM4MjQwMzYwMDI4MTZEOTA3RkVBRTBGNDcwNkRDMworOjEwMTFFMDAwOTA3NjM4RTA5MDc2MUJGMDkwNzYzQUUwRkY5MDc2MUI5MAorOjEwMTFGMDAwRTBDMzlGNTA0RkUwRkY3NUYwMEFBNDI0QUNGNTgyRTRGMQorOjEwMTIwMDAwMzQ3NUY1ODNFMEZFOTA3NjFFRTBGRDA0RjA3NDAwMkQ0OQorOjEwMTIxMDAwRjU4MkU0MzQ3RkY1ODNFRUYwRUY3NUYwMEFBNDI0QUQ5NworOjEwMTIyMDAwRjU4MkU0MzQ3NUY1ODNFMEZGOTA3NjFFRTBGRTA0RjA2RAorOjEwMTIzMDAwNzQwMDJFRjU4MkU0MzQ3RkY1ODNFRkYwOTA3NjFCRTBBNgorOjEwMTI0MDAwMDRGMDgwQTQ5MDc2MUVFMDkwN0ZCNUYwMjI5MDc2MUI4QgorOjEwMTI1MDAwRTBGRjc1RjAwQUE0MjRBQ0Y1ODJFNDM0NzVGNTgzRTA3MAorOjEwMTI2MDAwOTA3RjAwRjBFRjc1RjAwQUE0MjRBREY1ODJFNDM0NzVBOAorOjEwMTI3MDAwRjU4M0UwOTA3RjAxRjA5MDdGQjU3NDAyRjAyMjkwN0ZCQgorOjEwMTI4MDAwRUFFMEY0NzA2RDkwNzYzOEUwOTA3NjFCRjA5MDc2M0E1NAorOjEwMTI5MDAwRTBGRjkwNzYxQkUwQzM5RjUwNEZFMEZGNzVGMDBBQTQ3QgorOjEwMTJBMDAwMjRBRUY1ODJFNDM0NzVGNTgzRTBGRTkwNzYxRUUwRkQxMQorOjEwMTJCMDAwMDRGMDc0MDAyREY1ODJFNDM0N0ZGNTgzRUVGMEVGNzVEMQorOjEwMTJDMDAwRjAwQUE0MjRBRkY1ODJFNDM0NzVGNTgzRTBGRjkwNzY0QworOjEwMTJEMDAwMUVFMEZFMDRGMDc0MDAyRUY1ODJFNDM0N0ZGNTgzRUYwNworOjEwMTJFMDAwRjA5MDc2MUJFMDA0RjA4MEE0OTA3NjFFRTA5MDdGQjUyRAorOjEwMTJGMDAwRjAyMjkwNzYxQkUwRkY3NUYwMEFBNDI0QUVGNTgyRTQ5QworOjEwMTMwMDAwMzQ3NUY1ODNFMDkwN0YwMEYwRUY3NUYwMEFBNDI0QUYwOAorOjEwMTMxMDAwRjU4MkU0MzQ3NUY1ODNFMDkwN0YwMUYwOTA3RkI1NzQzOQorOjEwMTMyMDAwMDJGMDIyOTA3RkVBRTBGNDcwNkQ5MDc2MzhFMDkwNzZEQgorOjEwMTMzMDAwMUJGMDkwNzYzQUUwRkY5MDc2MUJFMEMzOUY1MDRGRTBBMQorOjEwMTM0MDAwRkY3NUYwMEFBNDI0QjBGNTgyRTQzNDc1RjU4M0UwRkU1RAorOjEwMTM1MDAwOTA3NjFFRTBGRDA0RjA3NDAwMkRGNTgyRTQzNDdGRjVGNAorOjEwMTM2MDAwODNFRUYwRUY3NUYwMEFBNDI0QjFGNTgyRTQzNDc1RjU0QworOjEwMTM3MDAwODNFMEZGOTA3NjFFRTBGRTA0RjA3NDAwMkVGNTgyRTQxOAorOjEwMTM4MDAwMzQ3RkY1ODNFRkYwOTA3NjFCRTAwNEYwODBBNDkwNzYzNAorOjEwMTM5MDAwMUVFMDkwN0ZCNUYwMjI5MDc2MUJFMEZGNzVGMDBBQTQ2NgorOjEwMTNBMDAwMjRCMEY1ODJFNDM0NzVGNTgzRTA5MDdGMDBGMEVGNzVBQQorOjEwMTNCMDAwRjAwQUE0MjRCMUY1ODJFNDM0NzVGNTgzRTA5MDdGMDE0RQorOjEwMTNDMDAwRjA5MDdGQjU3NDAyRjAyMjkwN0ZFQUUwRjQ3MDZEOTBBNworOjEwMTNEMDAwNzYzOEUwOTA3NjFCRjA5MDc2M0FFMEZGOTA3NjFCRTA0RQorOjEwMTNFMDAwQzM5RjUwNEZFMEZGNzVGMDBBQTQyNEIyRjU4MkU0MzRBNQorOjEwMTNGMDAwNzVGNTgzRTBGRTkwNzYxRUUwRkQwNEYwNzQwMDJERjU5NworOjEwMTQwMDAwODJFNDM0N0ZGNTgzRUVGMEVGNzVGMDBBQTQyNEIzRjU5RgorOjEwMTQxMDAwODJFNDM0NzVGNTgzRTBGRjkwNzYxRUUwRkUwNEYwNzRGQworOjEwMTQyMDAwMDAyRUY1ODJFNDM0N0ZGNTgzRUZGMDkwNzYxQkUwMDQyNAorOjEwMTQzMDAwRjA4MEE0OTA3NjFFRTA5MDdGQjVGMDIyOTA3NjFCRTBCRAorOjEwMTQ0MDAwRkY3NUYwMEFBNDI0QjJGNTgyRTQzNDc1RjU4M0UwOTBDOAorOjEwMTQ1MDAwN0YwMEYwRUY3NUYwMEFBNDI0QjNGNTgyRTQzNDc1RjU0QgorOjEwMTQ2MDAwODNFMDkwN0YwMUYwOTA3RkI1NzQwMkYwMjI5MDdGQjQwQQorOjEwMTQ3MDAwRTA0NDAxRjAyMjkwN0ZCNEUwNDQwMUYwMjI5MDdGQjQ3OAorOjA1MTQ4MDAwRTA0NDAxRjAyMjMwCis6MTAzODc0MDBFNDkwNzYyOUYwOTA3NjI5RTBGRjc1RjAwRkE0MjQ0MkI1Cis6MTAzODg0MDBGNTgyRTQzNDc1RjU4M0UwRkU5MDdGRUNFMEZERUU2REE3Cis6MTAzODk0MDA2MDBFRUZDMzk0MDY1MDA4OTA3NjI5RTAwNEYwODBENUJBCis6MTAzOEE0MDBFRkI0MDYwODkwN0ZCNEUwNDQwMUYwMjJFRjc1RjAwRjA2Cis6MTAzOEI0MDBBNDI0NDFGNTgyRTQzNDc1RjU4M0UwOTA3NjJBRjAyNDVCCis6MTAzOEM0MDBCRjcwMDI0MTQxMjRFMDcwMDI0MTEyMjQyMTYwMDI0MTkwCis6MTAzOEQ0MDAzQTkwN0ZFOUUwMjRGRTYwN0QxNDcwMDIyMUIyMjQwMjU0Cis6MTAzOEU0MDA2MDAyNDEwQTEyMTc1MTkwNzY0MkUwRkNBM0UwRkRBMzY2Cis6MTAzOEY0MDBFMEZFQTNFMEZGOTA3NjI5RTA3NUYwMEZBNDI0NDNGNUUxCis6MTAzOTA0MDA4MkU0MzQ3NUY1ODMxMjM3QkM5MDc2MTlFMEZGQjQwMTc0Cis6MTAzOTE0MDAxMjkwNzY3Qzc0NjdGMDkwNzY3RDc0MDZGMDkwNzY3RUQzCis6MTAzOTI0MDA3NDBCRjBFRkI0MDIwRkU0OTA3NjdDRjA5MDc2N0RGMEE3Cis6MTAzOTM0MDA5MDc2N0U3NDBDRjBFRkI0MDMwRkU0OTA3NjdDRjA5MEY0Cis6MTAzOTQ0MDA3NjdERjA5MDc2N0U3NDE4RjA5MDc2MUE3NDAxRjAxMkY5Cis6MTAzOTU0MDAzRTlGMTIxODAwMjI5MDdFQzJFMEZGRTRGQ0ZERkVGQkI1Cis6MTAzOTY0MDBGQTc5MDFGODEyMzc0NkM4RUNDOEM5RURDOUNBRUVDQURCCis6MTAzOTc0MDBDQkVGQ0I5MDdFQzFFMEZFRTRGQ0ZEMkJGQkVBM0VGQUVDCis6MTAzOTg0MDBFRDM5RjlFQzM4Rjg5MDdFQzBFMEZGRTRGRUVCMkZGRjUwCis6MTAzOTk0MDBFRTNBRkVFRDM5RkRFQzM4RkM5MDc2MjlFMDc1RjAwRjM3Cis6MTAzOUE0MDBBNDI0NDdGNTgyRTQzNDc1RjU4MzEyMzdCQzIyOTA3RTUzCis6MTAzOUI0MDBDMkUwRkZFNEZDRkRGRUZCRkE3OTAxRjgxMjM3NDZDOEM5Cis6MTAzOUM0MDBFQ0M4QzlFREM5Q0FFRUNBQ0JFRkNCOTA3RUMxRTBGRTBDCis6MTAzOUQ0MDBFNEZDRkQyQkZCRUEzRUZBRUQzOUY5RUMzOEY4OTA3RTc1Cis6MTAzOUU0MDBDMEUwRkZFNEZFRUIyRkZGRUUzQUZFRUQzOUZERUMzOENDCis6MTAzOUY0MDBGQzkwNzYyOUUwNzVGMDBGQTQyNDRCRjU4MkU0MzQ3NTJECis6MTAzQTA0MDBGNTgzMTIzN0JDMjI5MDdGQjRFMDQ0MDFGMDIyOTA3RjBBCis6MTAzQTE0MDBFOUUwMTQ3MDE5OTA3RUMwRTBGRjkwNzYyOUUwNzVGMDFCCis6MTAzQTI0MDAwRkE0MjQ0RkY1ODJFNDM0NzVGNTgzRUZGMDIyOTA3RkUwCis6MEUzQTM0MDBCNEUwNDQwMUYwMjI5MDdGQjRFMDQ0MDFGMDIyOUYKKzoxMDJBRDYwMEU0OTA3NjI3RjA5MDc2MjdFMEZGNzVGMDBGQTQyNDQyNjUKKzoxMDJBRTYwMEY1ODJFNDM0NzVGNTgzRTBGRTkwN0ZFQ0UwRkRFRTZENTMKKzoxMDJBRjYwMDYwMEVFRkMzOTQwNjUwMDg5MDc2MjdFMDA0RjA4MEQ1NjgKKzoxMDJCMDYwMEVGQjQwNjA4OTA3RkI0RTA0NDAxRjAyMkVGNzVGMDBGQjEKKzoxMDJCMTYwMEE0MjQ0MUY1ODJFNDM0NzVGNTgzRTA5MDc2MjhGMDI0MDgKKzoxMDJCMjYwMDlGNzAwMkExNzQyNDIxNjAwMkExQTE5MDdGRTlFMDI0OTQKKzoxMDJCMzYwMDdFNzAwMjYxRkMxNDcwMDI4MUI1MjQwMjYwMDJBMTZDRjEKKzoxMDJCNDYwMEVGNzVGMDBGQTQyNDQzRjU4MkU0MzQ3NUY1ODNFMEZDQjkKKzoxMDJCNTYwMEEzRTBGREEzRTBGRUEzRTBGRjdCNDQ3QUFDNzkwMDc4MTYKKzoxMDJCNjYwMDAwQzMxMjM3QUI3MDEzOTA3RjAwNzQ0NEYwQTM3NEFDQUIKKzoxMDJCNzYwMEYwRTRBM0YwOTA3RkI1NzQwM0YwOTA3NjI3RTA3NUYwNEIKKzoxMDJCODYwMDBGQTQyNDQzRjU4MkU0MzQ3NUY1ODNFMEZDQTNFMEZENEQKKzoxMDJCOTYwMEEzRTBGRUEzRTBGRjdCODA3QUJCNzkwMDc4MDBDMzEyMzYKKzoxMDJCQTYwMDM3QUI3MDEzOTA3RjAwNzQ4MEYwQTM3NEJCRjBFNEEzN0UKKzoxMDJCQjYwMEYwOTA3RkI1NzQwM0YwOTA3NjI3RTA3NUYwMEZBNDI0QUIKKzoxMDJCQzYwMDQzRjU4MkU0MzQ3NUY1ODNFMEZDQTNFMEZEQTNFMEZFNjMKKzoxMDJCRDYwMEEzRTBGRjdCMDA3QTc3NzkwMTc4MDBDMzEyMzdBQjYwRjgKKzoxMDJCRTYwMDAyQTFBODkwN0YwMEYwQTM3NDc3RjBBMzc0MDFGMDkwN0YKKzoxMDJCRjYwMDdGQjU3NDAzRjAyMjkwNzYyN0UwNzVGMDBGQTQyNDQ3ODIKKzoxMDJDMDYwMEY1ODJFNDM0NzVGNTgzRTBGQ0EzRTBGREEzRTBGRUEzQzIKKzoxMDJDMTYwMEUwRkY3QjQ0N0FBQzc5MDA3ODAwQzMxMjM3QUI3MDEzQkYKKzoxMDJDMjYwMDkwN0YwMDc0NDRGMEEzNzRBQ0YwRTRBM0YwOTA3RkI1RjkKKzoxMDJDMzYwMDc0MDNGMDkwNzYyN0UwNzVGMDBGQTQyNDQ3RjU4MkU0M0MKKzoxMDJDNDYwMDM0NzVGNTgzRTBGQ0EzRTBGREEzRTBGRUEzRTBGRjdCODMKKzoxMDJDNTYwMDgwN0FCQjc5MDA3ODAwQzMxMjM3QUI3MDEzOTA3RjAwN0YKKzoxMDJDNjYwMDc0ODBGMEEzNzRCQkYwRTRBM0YwOTA3RkI1NzQwM0YwMTYKKzoxMDJDNzYwMDkwNzYyN0UwNzVGMDBGQTQyNDQ3RjU4MkU0MzQ3NUY1QzUKKzoxMDJDODYwMDgzRTBGQ0EzRTBGREEzRTBGRUEzRTBGRjdCMDA3QTc3RjAKKzoxMDJDOTYwMDc5MDE3ODAwQzMxMjM3QUI2MDAyQTFBODkwN0YwMEYwREIKKzoxMDJDQTYwMEEzNzQ3N0YwQTM3NDAxRjA5MDdGQjU3NDAzRjAyMjkwQkIKKzoxMDJDQjYwMDc2MjdFMDc1RjAwRkE0MjQ0QkY1ODJFNDM0NzVGNTgzOEUKKzoxMDJDQzYwMEUwRkNBM0UwRkRBM0UwRkVBM0UwRkY3QjQ0N0FBQzc5NDEKKzoxMDJDRDYwMDAwNzgwMEMzMTIzN0FCNzAxMzkwN0YwMDc0NDRGMEEzRTIKKzoxMDJDRTYwMDc0QUNGMEU0QTNGMDkwN0ZCNTc0MDNGMDkwNzYyN0UwMUYKKzoxMDJDRjYwMDc1RjAwRkE0MjQ0QkY1ODJFNDM0NzVGNTgzRTBGQ0EzNEMKKzoxMDJEMDYwMEUwRkRBM0UwRkVBM0UwRkY3QjgwN0FCQjc5MDA3ODAwQkMKKzoxMDJEMTYwMEMzMTIzN0FCNzAxMzkwN0YwMDc0ODBGMEEzNzRCQkYwQkUKKzoxMDJEMjYwMEU0QTNGMDkwN0ZCNTc0MDNGMDkwNzYyN0UwNzVGMDBGN0EKKzoxMDJEMzYwMEE0MjQ0QkY1ODJFNDM0NzVGNTgzRTBGQ0EzRTBGREEzRkYKKzoxMDJENDYwMEUwRkVBM0UwRkY3QjAwN0E3Nzc5MDE3ODAwQzMxMjM3QjMKKzoxMDJENTYwMEFCNzA0RjkwN0YwMEYwQTM3NDc3RjBBMzc0MDFGMDkwRUUKKzoxMDJENjYwMDdGQjU3NDAzRjAyMjkwN0ZCNEUwNDQwMUYwMjI5MDdGOTcKKzoxMDJENzYwMEU5RTAyNDdGNzAxRTkwNzYyN0UwNzVGMDBGQTQyNDRGQkIKKzoxMDJEODYwMEY1ODJFNDM0NzVGNTgzRTA5MDdGMDBGMDkwN0ZCNTc0QUEKKzoxMDJEOTYwMDAxRjA4MDA3OTA3RkI0RTA0NDAxRjA5MDdGQjRFMDQ0RjYKKzowMzJEQTYwMDAxRjAyMjE3Cis6MTA0QkE0MDA5MDdGRUJFMDE0NzAxNDkwN0ZFOUUwMjQ3RjcwMDQxMjhFCis6MTA0QkI0MDA0OTU4MjI5MDdGQjRFMDQ0MDFGMDIyOTA3RkI0RTA0NDRECis6MDM0QkM0MDAwMUYwMjJEQgorOjEwNEJDNzAwOTA3RkVCRTAxNDcwMTM5MDdGRTlFMDE0NzAwNDEyNEFCMQorOjEwNEJENzAwMDMyMjkwN0ZCNEUwNDQwMUYwMjI5MDdGQjRFMDQ0MDFDNworOjAyNEJFNzAwRjAyMkJBCis6MTA0OTU4MDBFNDkwNzYyNkYwOTA3NjI2RTBGRjc1RjAwM0E0MjQzNEUwCis6MTA0OTY4MDBGNTgyRTQzNDc1RjU4M0UwRkU5MDdGRUNFMEZERUU2REIyCis6MTA0OTc4MDA2MDBFRUZDMzk0MDQ1MDA4OTA3NjI2RTAwNEYwODBENUNBCis6MTA0OTg4MDBFRkI0MDQwODkwN0ZCNEUwNDQwMUYwMjJFRjc1RjAwMzFGCis6MTA0OTk4MDBBNDI0MzJGNTgyRTQzNDc1RjU4M0UwOTA3RjAwRjA5MDJBCis6MDY0OUE4MDA3RkI1NzQwMUYwMjI0RQorOjEwNEEwMzAwRTQ5MDc2MjVGMDkwNzYyNUUwRkY3NUYwMDNBNDI0MzQzNgorOjEwNEExMzAwRjU4MkU0MzQ3NUY1ODNFMEZFOTA3RkVDRTBGREVFNkQwNgorOjEwNEEyMzAwNjAwRUVGQzM5NDA0NTAwODkwNzYyNUUwMDRGMDgwRDUxRgorOjEwNEEzMzAwRUZCNDA0MDg5MDdGQjRFMDQ0MDFGMDIyOTA3RUMwRTAxQworOjEwNEE0MzAwRkVFRjc1RjAwM0E0MjQzMkY1ODJFNDM0NzVGNTgzRUVBQQorOjAyNEE1MzAwRjAyMjRGCis6MDMwMDAzMDAwMjBGRkRFQworOjAzMEZGRDAwQzI4OTMyNzQKKzowMzAwMTMwMDAyMTdGREQ0Cis6MDMxN0ZEMDBDMjhCMzI2QQorOjAzMDA0QjAwMDI0RTAzNUYKKzowNDRFMDMwMDUzOTFERjMyQjYKKzowMzAwNTMwMDAyNDhGQTY2Cis6MDY0OEZBMDA1MzkxQkZEMjJEMzJFNAorOjAzMDA1QjAwMDI0REZENTYKKzowNjRERkQwMDUzOTE3RkQyMkMzMjFECis6MDMwMDYzMDAwMjRFMDc0MworOjA0NEUwNzAwNTNEOEY3MzI1MworOjAzMDAwQjAwMDI0RTBGOTMKKzowMzRFMEYwMEMyOEQzMjFGCis6MDMwMDFCMDAwMjRFMTI4MAorOjAzNEUxMjAwQzI4RjMyMUEKKzowMzAwMjMwMDAyNERFRjlDCis6MDc0REVGMDA1Mzk4RkU1Mzk4RkQzMkJBCis6MDMwMDNCMDAwMjRERjY3RAorOjA3NERGNjAwNTNDMEZFNTNDMEZEMzI2MworOjAzMDAyQjAwMDI0ODAwODgKKzoxMDQ4MDAwMEMwRTBDMEYwQzA4M0MwODJDMEQwRThDMEUwRTlDMEUwMzIKKzoxMDQ4MTAwMEVBQzBFMEVCQzBFMEVDQzBFMEVEQzBFMEVFQzBFMEVGRUQKKzoxMDQ4MjAwMEMwRTBDMkNBQzJDRjkwN0Y5OEUwNDQwMUYwMzAyRTAzQUUKKzoxMDQ4MzAwMDEyMTRBNjkwN0Y5OEUwNTRGRUYwNTNBOEZBMTIxNjYxNjUKKzoxMDQ4NDAwMEQwRTBGRkQwRTBGRUQwRTBGREQwRTBGQ0QwRTBGQkQwMzcKKzoxMDQ4NTAwMEUwRkFEMEUwRjlEMEUwRjhEMEQwRDA4MkQwODNEMEYwMjgKKzowMzQ4NjAwMEQwRTAzMjczCis6MTA0QUE2MDBFNDkwNzY5QkYwOTA3NjlCRTBGRjA0RjBFRjYwMDhFMEUwCis6MTA0QUI2MDAyNDA4RjhFNEY2ODBFRTkwNzY5NkUwNDQwNEYwNDQwODg0Cis6MTA0QUM2MDBGMDkwODAwM0YwRTRGNTE4RDIzNUY1MEVGNTEwRDIzNkU1Cis6MTA0QUQ2MDA3NTEyMTE3NTEzMjJDMjM3QzIzOUMyMzhGNTE2RjUxNDhDCis6MEI0QUU2MDBGNTFBRjUwREMyM0JDMjNDQzIzRDIyOTgKKzoxMDMwMDAwMDkwN0ZCNkUwMjBFMTAyQzIzREQyMzYyMDM2MDI0MTZFMEEKKzoxMDMwMTAwMDMwM0QwMjQxNkU5MDgwMDdFMDYwMDREMjM2ODAwMkMyRUIKKzoxMDMwMjAwMDM2MjAzNjAyNDEyRUQyMzVFNEY1MUE5MDgwMDRFMEY1QzAKKzoxMDMwMzAwMDE5NzQwODI1MEVGOEE2MTk4NTE5MThFNTE4MjBFNzA0NTMKKzoxMDMwNDAwMEQyMzg4MDAyQzIzODMwMzgwMjIxRDRFNEY1MTZFNTE5QUUKKzoxMDMwNTAwMEI0RjAwQ0QyMzk3NTA4MDQ3NTA5RjAwNTBFODAwMjA1MkMKKzoxMDMwNjAwMDE2RTUxOTY0Rjc3MDNEQzIzOUU1MEUyNEZFNjAxNzE0QTkKKzoxMDMwNzAwMDYwMjIyNDAzNzAyOTc1MDgwNTc1MDlGN0U0RjUwQUY1M0YKKzoxMDMwODAwMDBCNzUwRTA0ODAyMDc1MDgwNjc1MEFGN0U0RjUwQjc1QkMKKzoxMDMwOTAwMDBFMDQ4MDEyNzUwODA3NzUwQkY3NzUwRTA0ODAwNzEyNzEKKzoxMDMwQTAwMDREREE4MDAyMDUxNkU1MTk1NEY4NjRGODcwM0JDMjM1MTQKKzoxMDMwQjAwMEU1MTkyNDA3NjAwQzI0RkM2MDA4MjQwNTI0Rjg1MDA2NTgKKzoxMDMwQzAwMDgwMDhEMjNBODAwNkMyM0E4MDAyRDIzQTc1MUEwMTIwQUMKKzoxMDMwRDAwMDNBMTk5MDdFODA3NDBGRjBBM0U1MTlGMEU0QTNGMEEzRjEKKzoxMDMwRTAwMEYwOTA3RkI3NzQwNEYwODAwMjA1MTYyMDM5NkRFNTE5NjEKKzoxMDMwRjAwMDY0Rjc2MDY3RTUxQTcwNjNFNTE4NTRGMDY0RjA3MDU5N0UKKzoxMDMxMDAwMDg1MTgxOUY1MEVFNTE5MjQwRjYwMUIyNEZFNjAxNzI0OUQKKzoxMDMxMTAwMEZENjAyMjE0NjAxRjI0MDU3MDJGNzUwODAzMDUwRTg1QkQKKzoxMDMxMjAwMDE4MDlEMjM3ODAyODc1MDgwMjA1MEU4NTE4MDk3NTE0MEMKKzoxMDMxMzAwMDAxRDIzNzgwMTk3NTA4MDUwNTBFODUxODA5RTRGNTBBQ0UKKzoxMDMxNDAwMEY1MEI3NTBFMDNEMjM3ODAwNTEyNEREQUMyMzUzMDM1RDYKKzoxMDMxNTAwMDBBODUwODEzODUxODEyODAwMjA1MTY4NTE4MTlFNTE2QzgKKzoxMDMxNjAwMDY0MDQ3MDYyRjUwRUU1MTk1NEYwRjUxOUY1MTU4NTE4MkIKKzoxMDMxNzAwMDE5RTUxNTI0NzA2MDE4MjRGMDYwMTQyNEYwNjAxMDI0MDAKKzoxMDMxODAwMEYwNjAxRTI0RjA2MDFBMjRGMDYwMDQyNDYwNzAyN0U1Q0IKKzoxMDMxOTAwMDE1QzQ1NDBGRjUxOUY1MDgwNTBFODUxODA5RDIzNzgwQTYKKzoxMDMxQTAwMDFBRTUxNUM0NTQwRkY1MTlGNTA4MDUwRTg1MTgwOTc1QUIKKzoxMDMxQjAwMDE0MDFEMjM3ODAwNTEyNEREQUMyMzUzMDM1MEE4NTE5MkYKKzoxMDMxQzAwMDEzODUxODEyODAwMjA1MTZFNTE2RDM5NDA1NDA1NzEyOTAKKzoxMDMxRDAwMDREREE4MDUyMzAzOTE3RTUwRTcwMEE4NTA4MDk3NTA4RjYKKzoxMDMxRTAwMDA0MDUwRTgwNDE3NDA4MjUwRUY4QTYxOTgwMzgyMDM3OTIKKzoxMDMxRjAwMDJBRTUwRUI0MDEwRjg1MDgwQTg1MDkwQjg1MTMwODg1OTkKKzoxMDMyMDAwMDEyMDk3NTBFMDRFNTE0QjQwMTFDODUwODBBRTRGNTBCRDcKKzoxMDMyMTAwMDg1MTMwODg1MTIwOTc1MEUwNDgwMEJFNTE0QjQwMTA2QTgKKzoxMDMyMjAwMEU0RjUwQjc1MEUwNEU0RjUxQTMwMzUwMjA1MEVFNTBFRDMKKzoxMDMyMzAwMEQzOTQwMzUwMDIwMTBCQzIzN0U0RjUwRUY1MTBDMjM2RTkKKzoxMDMyNDAwMEQyM0RGNTE0NzQwODI1MTBGOEU2RkY3NDgwMjUxMEY1QkEKKzoxMDMyNTAwMDgyRTQzNDdFRjU4M0VGRjA3NDA4MjUxMEY4RTRGNjA1NzcKKzowRjMyNjAwMDEwRTUxMEI0MDRERTkwN0ZCNzc0MDRGMDAxMEIyMjY4Cis6MEM0RERBMDBDMjM3RTRGNTBFRjUxMEMyMzZGNTE0MjJDNQorOjEwNDAwMDAwRTUxMUQzOTQwMDUwMDIyMTA2OTA3Njg5RTBDMzk0MDgwQworOjEwNDAxMDAwNDAwMjIxMDY3NDQwMjUwRkY1ODJFNDM0N0VGNTgzRTBFQQorOjEwNDAyMDAwRjUxN0U1MEQ2MDBFOTA4MDA1RTUxN0YwOTA3Njg5RTBCNAorOjEwNDAzMDAwMDRGMDAxREFFNTE3MTIzN0Y5NDBDMTAyNDA2NzA1NDA4NAorOjEwNDA0MDAwN0EwNjQwOTgwNzQwQzEwQzQwQzEwRDQwQzcwRjQwQ0JENQorOjEwNDA1MDAwRjY0MENCRjg0MENCRkE0MENCRkI0MENCRkM0MENCRkU0QworOjEwNDA2MDAwNDBDQkZGMDAwMDQwREE5MDdFNDFFMDkwODAwNUYwOTA2OAorOjEwNDA3MDAwNzY4OUUwMDRGMDc1MTEwMTgwNjA5MDdFNDFFMDkwODBDNworOjEwNDA4MDAwMDVGMDkwN0U0MkUwOTA4MDA1RjA5MDc2ODlFMDA0RjBBMworOjEwNDA5MDAwRTAwNEYwNzUxMTAxODA0MjkwN0U0MUUwOTA4MDA1RjBDRgorOjEwNDBBMDAwOTA3RTQyRTA5MDgwMDVGMDkwN0U0M0UwOTA4MDA1RjBBNQorOjEwNDBCMDAwOTA3Njg5RTAwNEYwRTAwNEYwRTAwNEYwNzUxMTAxODBFRQorOjEwNDBDMDAwMTlEMjNCRDIzQzgwMTNEMjNCODAwRjkwODAwNUU1MTc3QworOjEwNDBEMDAwRjA5MDc2ODlFMDA0RjA3NTExMDEyMDNCMDQwNTBEODAxNQorOjEwNDBFMDAwMUYzMDNDMUM5MDdFNDFFMDkwODAwNUYwOTA3RTQyRTBDNQorOjEwNDBGMDAwOTA4MDA1RjA5MDc2ODlFMDA0RjBFMDA0RjA3NTExMDFGRAorOjEwNDEwMDAwMDUwRjE1MTEwMTAwRTUxMTcwMTBDMjMzRjUwREY1MEYwMworOjBCNDExMDAwOTA3RkM3NzQwNEYwQzIzQkMyM0MyMjQ5Cis6MTA0QzI5MDA5MDdGRDZFMDMwRTcxMkUwNDQwMUYwN0YxNDdFMDAxMjU1Cis6MEE0QzM5MDA0RDlEOTA3RkQ2RTA1NEZFRjAyMjVFCis6MTA0QjdGMDA5MDdGRDZFMDU0RkJGMEUwNDQwOEYwMzA0MjA0RTA0NDZDCis6MTA0QjhGMDAwMkYwN0ZEQzdFMDUxMjREOUQ5MDdGRDZFMDU0RjdGMDRBCis6MDU0QjlGMDBFMDQ0MDRGMDIyRDcKKzoxMDREOUQwMDhFMzU4RjM2RTUzNjE1MzZBRTM1NzAwMjE1MzU0RTYwQ0IKKzowNzREQUQwMDA1MTIxNDg1ODBFRTIyQkYKKzoxMDRBNTUwMEU0RkU3NTFERkY3NTFFMDU3NTFGMTJBQjFEQUExRUE5NjcKKzoxMDRBNjUwMDFGOTAwMDAxMTIzNkFCNjQwMjcwMkZDREVFQ0QwRUVEMTYKKzoxMDRBNzUwMDZGNzAwMTIyOTAwMDAyMTIzNzBFODVGMDFCRjUxQzYyNDMKKzoxMDRBODUwMDFCRTUxQjYyMUNFNTFDNjIxQjI5RkRFNTFCM0FDOUVERjQKKzoxMDRBOTUwMEM5NzUxREZGRjUxRTg5MUY4MEMxN0IwMDdBMDA3OTAwNEQKKzowMTRBQTUwMDIyRUUKKzowNDE3OTQwMDhEMjk4QjJBRTYKKzoxMDE3OTgwMDEyNEE1NUVBNDk2MDU3MTIzNjkyN0UwMDI5RkZFRTNBRkUKKzoxMDE3QTgwMEM5RUZDOTc1MkJGRkY1MkM4OTJEQUIyQkFBMkNBOTJEQjgKKzoxMDE3QjgwMDkwMDAwMTEyMzZBQkZGNjQwNDYwMDVFRjY0MDU3MDJFREIKKzoxMDE3QzgwMEVGQjQwNDE1OTAwMDAyMTIzNkFCNjUyOTcwMEI5MDAwMzcKKzoxMDE3RDgwMDAzMTIzNkFCNjUyQTcwMDEyMjEyMzY5MjdFMDAyOUZGNjkKKzoxMDE3RTgwMEVFM0FDOUVGQzk3NTJCRkZGNTJDODkyRDgwQkM3QjAwMUIKKzowNDE3RjgwMDdBMDA3OTAwRkEKKzowMTE3RkMwMDIyQ0EKKzowMjQ3QjcwMDhGMkU0MworOjEwNDdCOTAwRTRGNTJGNzUzMEZGNzUzMTA3NzUzMjFBQUIzMEFBMzEyMAorOjEwNDdDOTAwQTkzMjkwMDAwMTEyMzZBQkI0MDMxRkFGMkYwNTJGRUZBQQorOjEwNDdEOTAwNjUyRTcwMDEyMjEyMzY5MjdFMDAyOUZGRUUzQUM5RUY0QQorOjEwNDdFOTAwQzk3NTMwRkZGNTMxODkzMjgwRDI3QjAwN0EwMDc5MDBCMgorOjAxNDdGOTAwMjI5RAorOjEwMDUwMDAwMTIwMTEwMDEwMDAwMDA0MDZBMDgxMTAxMDAwMTAxMDJGRgorOjEwMDUxMDAwMDAwMTA5MDIwODAyMDUwMTAwODAzMjA5MDQwMDAwMDAwMAorOjEwMDUyMDAwMDEwMTAwMDAwQTI0MDEwMDAxNTYwMDAyMDEwMjBDMjQwRQorOjEwMDUzMDAwMDIwMTAxMDEwMDAyMDAwMDAwMDAwRDI0MDYwNTAxMDI3NQorOjEwMDU0MDAwMDMwMDAwMDAwMDAwMDAwOTI0MDMwMjA0MDMwMDA1MDA2QQorOjEwMDU1MDAwMEMyNDAyMDMwNTAyMDAwNjAwMDAwMDAwMTUyNDA2MDYxNAorOjEwMDU2MDAwMDMwMjAwMDAwMzAwMDMwMDAzMDAwMzAwMDMwMDAzMDA3NAorOjEwMDU3MDAwMDAwOTI0MDMwNDAxMDEwMDA2MDAwOTA0MDEwMDAwMDEzMAorOjEwMDU4MDAwMDIwMDAwMDkwNDAxMDEwMjAxMDIwMDAwMDcyNDAxMDEyOAorOjEwMDU5MDAwMDAwMTAwMTEyNDAyMDEwMjAyMTAwMzQ0QUMwMDgwQkJFMAorOjEwMDVBMDAwMDAwMDc3MDEwOTA1MEEwNTg0MDEwMTAwOEYwNzI1MDE3NAorOjEwMDVCMDAwMDEwMDAwMDAwOTA1OEYwMTAzMDAwMTA1MDAwOTA0MDE4NQorOjEwMDVDMDAwMDIwMjAxMDIwMDAwMDcyNDAxMDEwMDAxMDAxMTI0MDJCRgorOjEwMDVEMDAwMDEwMjAzMTgwMzQ0QUMwMDgwQkIwMDAwNzcwMTA5MDU0OQorOjEwMDVFMDAwMEEwNTQ2MDIwMTAwOEYwNzI1MDEwMTAwMDAwMDA5MDVFOAorOjEwMDVGMDAwOEYwMTAzMDAwMTA1MDAwOTA0MDIwMDAwMDEwMjAwMDA1MAorOjEwMDYwMDAwMDkwNDAyMDEwMTAxMDIwMDAwMDcyNDAxMDQwMDAxMDBBNQorOjEwMDYxMDAwMEUyNDAyMDEwNjAyMTAwMjQ0QUMwMDgwQkIwMDA5MDU1MgorOjEwMDYyMDAwOEMwNTRDMDIwMTAwMDAwNzI1MDEwMDAyMDAwMDA5MDRBRQorOjEwMDYzMDAwMDIwMjAxMDEwMjAwMDAwNzI0MDEwNDAwMDEwMDBFMjQ0RgorOjEwMDY0MDAwMDIwMTA2MDMxODAyNDRBQzAwODBCQjAwMDkwNThDMDVCQQorOjEwMDY1MDAwNzIwMzAxMDAwMDA3MjUwMTAwMDIwMDAwMDkwNDAyMDNFMworOjEwMDY2MDAwMDEwMTAyMDAwMDA3MjQwMTA0MDAwMTAwMTEyNDAyMDExRAorOjEwMDY3MDAwMDIwMjEwMDM0NEFDMDA4MEJCMDAwMDc3MDEwOTA1OEMyNgorOjEwMDY4MDAwMDU4NDAxMDEwMDAwMDcyNTAxMDAwMjAwMDAwOTA0MDJBMQorOjEwMDY5MDAwMDQwMTAxMDIwMDAwMDcyNDAxMDQwMDAxMDAxMTI0MDJFQQorOjEwMDZBMDAwMDEwMjAzMTgwMzQ0QUMwMDgwQkIwMDAwNzcwMTA5MDU3OAorOjEwMDZCMDAwOEMwNTQ2MDIwMTAwMDAwNzI1MDEwMDAyMDAwMDA5MDQyNAorOjEwMDZDMDAwMDMwMDAwMDEwMTAwMDAwOTI0MDEwMDAxMDkwMDAxMDRFOAorOjEwMDZEMDAwMDkwNDA0MDAwMjAxMDMwMDAwMDcyNDAxMDAwMTI0MDBCMgorOjEwMDZFMDAwMDYyNDAyMDEwNzAwMDkyNDAzMDIwODAxMDcwMTAwMDY4RAorOjEwMDZGMDAwMjQwMjAyMDkwMDA5MjQwMzAxMEEwMTA5MDEwMDA5MDU3NQorOjEwMDcwMDAwMDEwMjA0MDAwMDAwMDAwNTI1MDEwMTA3MDkwNTgxMDIxRQorOjEwMDcxMDAwMDQwMDAwMDAwMDA1MjUwMTAxMEEwNDAzMDkwNDE4MDM3MAorOjEwMDcyMDAwNDUwMDZEMDA2MTAwNjcwMDY5MDA2MzAwMjAwMDQ3MDAxQworOjEwMDczMDAwNkQwMDYyMDA0ODAwMjIwMzQ1MDA2RDAwNjEwMDY3MDAwMworOjEwMDc0MDAwNjkwMDYzMDAyMDAwNDUwMDREMDA0OTAwMjAwMDM2MDA4QworOjEwMDc1MDAwN0MwMDMyMDAyMDAwNkQwMDJBMDM0MzAwNkYwMDZFMDAxMQorOjEwMDc2MDAwNjYwMDY5MDA2NzAwNzUwMDcyMDA2MTAwNzQwMDY5MDAyRQorOjEwMDc3MDAwNkYwMDZFMDAyMDAwNTMwMDc0MDA3MjAwNjkwMDZFMDA2QworOjEwMDc4MDAwNjcwMDIyMDM0OTAwNkUwMDc0MDA2NTAwNzIwMDY2MDA3NQorOjEwMDc5MDAwNjEwMDYzMDA2NTAwMjAwMDUzMDA3NDAwNzIwMDY5MDA2RQorOjA2MDdBMDAwNkUwMDY3MDAwMDAwN0UKKzoxMDE0ODUwMDc0MDBGNTg2OTBGREE1N0MwNUEzRTU4MjQ1ODM3MEY5N0EKKzowMTE0OTUwMDIyMzQKKzoxMDE0OTYwMDkwN0ZENkUwNDQ4MEYwNDM4NzAxMDAwMDAwMDAwMDIyRTAKKzoxMDE0QTYwMEMwRDBDMEUwOEZFMEMwRTA4RUUwQzBFMDhERTBDMEUwREMKKzoxMDE0QjYwMDhDRTBDMEUwQzA4MkMwODMwNTg2QzA4NEMwODU3RDAwMDQKKzoxMDE0QzYwMDkwN0ZFMzc0N0JGMEEzNzQ4MEYwN0MxMTkwN0Y5OUUwQTkKKzoxMDE0RDYwMDU0NDBEQzAzMDIxNEYzQjQwMDEzOTA3RkUyNzQ0MEYwMkUKKzoxMDE0RTYwMDkwN0ZFNUYwOTA3RkUyNzQwMEYwMDIxNEQyOTA3NjkwM0YKKzoxMDE0RjYwMEUwQjQwMTEyOTA3NjhGRTAyREZEOTA3RkUyNzQ4MEYwQ0IKKzoxMDE1MDYwMDkwN0Y2QzAyMTU1N0I0MDIxMjkwNzY4RkUwMkRGRDkwRjUKKzoxMDE1MTYwMDdGRTI3NDgwRjA5MDdGNkMwMjE1OTZCNDAzMTI5MDc2ODkKKzoxMDE1MjYwMDhGRTAyREZEOTA3RkUyNzQ4MEYwOTA3RjZDMDIxNUUxRDQKKzoxMDE1MzYwMEI0MDQxMjkwNzY4RkUwMkRGRDkwN0ZFMjc0ODBGMDkwRDcKKzoxMDE1NDYwMDdGNkMwMjE2MTA5MDdGRTI3NDgwRjA5MDdGNkMwMjE2MUEKKzoxMDE1NTYwMDQwRjBGMEYwRjBGMEYwRjBGMEYwRjBGMEYwRERGMjdEQjkKKzoxMDE1NjYwMDAyMDU4NjkwN0ZFMjc0MDBGMDkwN0Y5QkUwNTQwNEI0RkQKKzoxMDE1NzYwMDAwMDUwNTg2MDIxNjQwOTA3RkUyNzQ4MEYwMDU4NkYwMkQKKzoxMDE1ODYwMEYwRjBGMEYwRjBGMEYwRjBGMEYwRjBEREQ0MDIxNjQwRkMKKzoxMDE1OTYwMEYwRjBGMEYwRjBGMEYwRjBGMEYwRjBGMEYwRjBGMEYwNDUKKzoxMDE1QTYwMEYwRjBEREVDN0QwMjA1ODY5MDdGRTI3NDAwRjA5MDdGMUUKKzoxMDE1QjYwMDlCRTA1NDA0QjQwMDA1MDU4NjAyMTY0MDkwN0ZFMjc0NTEKKzoxMDE1QzYwMDgwRjAwNTg2RjBGMEYwRjBGMEYwRjBGMEYwRjBGMEYwREEKKzowNjE1RDYwMEYwRjBGMEYwRjBGMDZGCis6MTAxNURDMDBERENFMDIxNjQwRjBGMEYwRjBEREZBN0QwMjA1ODY5MENCCis6MTAxNUVDMDA3RkUyNzQwMEYwOTA3RjlCRTA1NDA0QjQwMDA1MDU4NjA0Cis6MTAxNUZDMDAwMjE2NDA5MDdGRTI3NDgwRjAwNTg2RjBGMEYwRjBERDhBCis6MTAxNjBDMDBEQzAyMTY0MEYwRjBGMEYwRjBGMERERjg3RDAyMDU4NjFCCis6MTAxNjFDMDA5MDdGRTI3NDAwRjA5MDdGOUJFMDU0MDRCNDAwMDUwNUM5Cis6MTAxNjJDMDA4NjAyMTY0MDkwN0ZFMjc0ODBGMDA1ODZGMEYwRjBGMEIwCis6MTAxNjNDMDBGMEYwREREQTkwN0ZFMjc0MDBGMEQwODVEMDg0MDU4NjdFCis6MTAxNjRDMDBEMDgzRDA4MkQwRTBGQ0QwRTBGREQwRTBGRUQwRTBGRjMzCis6MDUxNjVDMDBEMEUwRDBEMDIyMTcKKzoxMDE2NjEwMEMwRDBDMEUwQzA4MkMwODM5MDc2N0NFMDkwN0Y2RkYwRjQKKzoxMDE2NzEwMDkwNzY3REUwOTA3RjZGRjA5MDc2N0VFMDkwN0Y2RkYwQzYKKzowOTE2ODEwMEQwODNEMDgyRDBFMEQwRDAyMjQ5Cis6MTAxNjhBMDBDMEQwQzBFMDhGRTBDMEUwOEVFMEMwRTBDMDgyQzA4MzdFCis6MTAxNjlBMDAwNTg2QzA4NEMwODU5MDc2ODdFMEZGQkYwMDAzMDIxN0U1Cis6MTAxNkFBMDAwMTkwN0Y5NkUwNDQ4MEYwOTA3RkUyNzQ4MEYwOTA3RjEyCis6MTAxNkJBMDA2MkUwMDU4NjkwN0ZFMjc0MDBGMDkwN0Y5NkUwNTQ3RkE2Cis6MTAxNkNBMDBGMDkwN0ZFMjc0ODBGMDkwNzY4RUUwQjQwMTA1MDU4NjkyCis6MTAxNkRBMDAwMjE2RjZCNDAyMDUwNTg2MDIxNkVCMDU4NjAyMTZGQjBCCis6MTAxNkVBMDBFMEUwRTBFMEUwRTBERkY4MDIxNkZCRTBFMEUwRTBERjY3Cis6MTAxNkZBMDBGQTkwN0ZFMjc0MDBGMEQwODVEMDg0MDU4NkQwODNEMDNBCis6MEMxNzBBMDA4MkQwRTBGRUQwRTBGRkQwRTBEMEQwMjI4MgorOjEwMTcxNjAwQzA4MkMwODNDMEUwRThDMEUwNzhEMUU4MTRGODcwRkI2RQorOjBBMTcyNjAwRDBFMEY4RDBFMEQwODNEMDgyMjI5QQorOjEwMENBNTAwNDE3MjAxMDE0NTcyMDUwMDAyQzkwMDAwNDU3MjBBMDA0MgorOjEwMENCNTAwMDEwMjAzMDQ0RDcyMEZEMTAwRDEwMDAwMDAwMDAwMDBCNQorOjEwMENDNTAwMjgyODA5MDA0RDcyMUMwMTAwMDEwMjAzMDQwNTA2MDdDRQorOjEwMENENTAwMDgwOTBBMEI0MTcyMkUyMjQxNzIyRjIzNDE3MjMwMjBERQorOjEwMENFNTAwNDE3MjMxMjE2MkQyNzIzQTAwMDAwMDAwMDAwMDAwMDAxQQorOjEwMENGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwMEQwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwMEQxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwMEQyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQorOjEwMEQzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwMEQ0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwMEQ1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwMEQ2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwMEQ3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAxMDEwMTAxMDE2OAorOjEwMEQ4NTAwMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDE0RQorOjEwMEQ5NTAwMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEzRQorOjEwMERBNTAwMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEyRQorOjEwMERCNTAwMDEwMTAxMDEwMTAxMDEwMTAyMDIwMjAyMDIwMjAyMDIxNgorOjEwMERDNTAwMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDJGRQorOjEwMERENTAwMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDJFRQorOjEwMERFNTAwMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDJERQorOjEwMERGNTAwMDIwMjAyMDIwMjAzMDMwMzAzMDMwMzAzMDMwMzAzMDNDMworOjEwMEUwNTAwMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDNBRAorOjEwMEUxNTAwMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDM5RAorOjEwMEUyNTAwMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDM4RAorOjEwMEUzNTAwMDMwMzA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQ2RgorOjEwMEU0NTAwMDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQ1RAorOjEwMEU1NTAwMDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQ0RAorOjEwMEU2NTAwMDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQzRAorOjEwMEU3NTAwMDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUxRAorOjEwMEU4NTAwMDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwRAorOjEwMEU5NTAwMDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDVGRAorOjEwMEVBNTAwMDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA2MDZFQgorOjEwMEVCNTAwMDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDZDRAorOjEwMEVDNTAwMDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDZCRAorOjEwMEVENTAwMDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDZBRAorOjEwMEVFNTAwMDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA3MDcwNzA4MDg5NgorOjEwMEVGNTAwMDgwOTA5MDkwQTBBMEEwQjBCMEIwQzBDMEMwRDBEMEQ0MAorOjEwMEYwNTAwMEUwRTBFMEYwRjBGMTAxMDEwMTExMTExMTIxMjEyMTNEOQorOjEwMEYxNTAwMTMxMzE0MTQxNDE1MTUxNTE2MTYxNjE3MTcxNzE4MTg3NAorOjEwMEYyNTAwMTgxOTE5MTkxOTFBMUExQTFBMUIxQjFCMUIxQzFDMUMxOAorOjEwMEYzNTAwMUMxRDFEMUQxRDFFMUUxRTFFMUYxRjFGMUYyMDIwMjBDOAorOjEwMEY0NTAwMjEyMTIxMjIyMjIyMjMyMzI0MjQyNTI1MjYyNjI3Mjc2MQorOjEwMEY1NTAwMjgyODI5MjkyQTJBMkIyQjJDMkMyRDJEMkUyRTJGMkZENAorOjEwMEY2NTAwMzAzMDMxMzEzMjMyMzMzMzM0MzQzNTM1MzYzNjM3Mzc0NAorOjEwMEY3NTAwMzgzODM5MzkzQTNBM0IzQzNEM0UzRjQwNDE0MjQzNDQ5QgorOjEwMEY4NTAwNDU0NjQ3NDg0OTQ5NEE0QjRCNEM0RDRFNEY1MDUxNTJBNworOjEwMEY5NTAwNTM1NDU1NTU1NjU2NTc1NzU4NUE1QjVENUU1RjYxNjJCNworOjEwMEZBNTAwNjM2NDY1NjY2NzY4Njk2QTZCNkM2RDZGNzE3MjczNzQ4QgorOjEwMEZCNTAwNzU3Njc3Nzg3OTdBN0I3QzdFODAwMTM3MDEwMTM4MDBGOAorOjEwNEIyODAwRTQ5MDcyMzZGMEEzRjA5MDdGOTdFMDU0RkJGMEU0OTBBNQorOjEwNEIzODAwNzIzM0YwOTA3MjMyRjA5MDcyMDEwNEYwRTQ5MDcyMzNBNAorOjEwNEI0ODAwRjA5MDcyMzJGMDkwNzIwMTA0RjA5MDdGOTdFMDQ0MDQ4NAorOjAyNEI1ODAwRjAyMjQ5Cis6MTAzMjZGMDA5MDc2MThFMEZGNjQwNTcwNDI5MDc1QUJFMEI0MDExOUQ5Cis6MTAzMjdGMDA5MDcyMzc3NDAxRjBFNDkwODAyMEYwOTA4MDMxRjA5MERDCis6MTAzMjhGMDA4MDI4RjA5MDgwMzlGMDgwMjJFNDkwNzIzN0YwOTA3NUFBCis6MTAzMjlGMDBBREUwOTA3MjJCRjBFMDI0ODBGMEUwOTA4MDIwRjA5MDcxCis6MTAzMkFGMDA4MDMxRjA5MDgwMjhGMDkwODAzOUYwRUY2NDA2NjAwMjUyCis6MTAzMkJGMDA4MTk5OTA3MjM5NzQwNEYwOTA3MjM5RTBGRjI0RkU5MDc2Cis6MTAzMkNGMDA3MjA0RjBFRjc1RjAwQUE0MjRBQkY1ODJFNDM0NzVGNUJGCis6MTAzMkRGMDA4M0UwNjQwMTcwNTQ5MDcyMzYwNEYwOTA3MjA0RTBGRjQyCis6MTAzMkVGMDAyNEZENjAyODI0RkU2MDI0MjQwMzI0RkI1MDA0NjAxQzZBCis6MTAzMkZGMDA4MThDNzQyMDJGRjU4MkU0MzQ4MEY1ODNFNEYwNzQyOEY4Cis6MTAzMzBGMDAyRkY1ODJFNDM0ODBGNTgzRTRGMDgxOEM5MDcyMDRFMDMxCis6MTAzMzFGMDBGRjI0MzBGNTgyRTQzNDgwRjU4M0U0RjA3NDM4MkZGNTIwCis6MTAzMzJGMDA4MkU0MzQ4MEY1ODNFNEYwODE4Q0U0OTA3MjM2RjA5MDdGCis6MTAzMzNGMDA3MjM5RTA3NUYwMEFBNDI0QURGNTgyRTQzNDc1RjU4MzkzCis6MTAzMzRGMDBFMEZGN0UwMDkwNzUwQ0VFRjBBM0VGRjA3MDA2OTA3MjI4Cis6MTAzMzVGMDAwMjc0M0JGMDkwNzUwQ0UwRkVBM0UwRkY2NDgwNEU3MEFBCis6MTAzMzZGMDAwNDkwNzIwMkYwRUY0RTcwMDI4MTM1RUY2NDgwNEU3MDYwCis6MTAzMzdGMDAwMjgxMzVFRkY4RTQ5MDc1MERGMEU4OTA3NTBDRjA5MDQwCis6MTAzMzhGMDA3MjM0RTA3NUYwMEFBNDI0QUNGNTgyRTQzNDc1RjU4MzQ5Cis6MTAzMzlGMDBFMEZGOTA3MjAyRjA5MDc1MERFMDJGRjA5MDc1MENFMDQ5Cis6MTAzM0FGMDAzNDAwRjBFMEZFQTNFMEZGRTRGQ0ZEN0JENjdBQTVGOTQ0Cis6MTAzM0JGMDBGOEQzMTIzNzk1NDAwQTkwNzUwQzc0QTVGMEEzNzRENjA0Cis6MTAzM0NGMDBGMDkwNzUwREUwMjQyQUYwOTA3NTBDRTAzNDVBRjBFMDdGCis6MTAzM0RGMDBGRUEzRTA3ODA1Q0VBMkU3MTNDRTEzRDhGOEZGOTA3NUMxCis6MTAzM0VGMDAwQ0VFRjBBM0VGRjA5MDcyMkNFRUYwQTNFRkYwRDM5NDZECis6MTAzM0ZGMDBEMkVFNjQ4MDk0ODI0MDBBOTA3MjJDNzQwMkYwQTM3NDBGCis6MTAzNDBGMDBEMkYwQzM5MDcyMkNFMDY0ODA5NDgwNTAwNEU0RjBBMzU3Cis6MTAzNDFGMDBGMDkwNzIyQ0UwRkVBM0UwMjQzQUY1ODJFRTM0NzJGNUMwCis6MTAzNDJGMDA4M0UwOTA3MjAyRjA5MDcyMDRFMEZGMjRGRDYwMkQyNDdGCis6MTAzNDNGMDBGRTYwMjkyNDAzMjRGQjUwMDQ2MDIxODA0MDkwNzIwMjE3Cis6MTAzNDRGMDBFMEZFNzQyMDJGRjU4MkU0MzQ4MEY1ODNFRUYwNzQyOENCCis6MTAzNDVGMDAyRkY1ODJFNDM0ODBGNTgzRUVGMDgwMjE5MDcyMDJFMDQ0Cis6MTAzNDZGMDBGRjkwNzIwNEUwRkUyNDMwRjU4MkU0MzQ4MEY1ODNFRkEwCis6MTAzNDdGMDBGMDc0MzgyRUY1ODJFNDM0ODBGNTgzRUZGMDkwNzIzOUQyCis6MEIzNDhGMDBFMDA0RjBFMDY0MEE2MDAyNDFDNzIyODQKKzoxMDM0OUEwMDkwNzYxOEUwRkZCNDA1MjM5MDcyMzdFMDcwMUQ5MDc1OUUKKzoxMDM0QUEwMEFERTA5MDcyMkJGMEUwMjQ4MEYwRTA5MDgwMjBGMDkwNjQKKzoxMDM0QkEwMDgwMzFGMDkwODAyOEYwOTA4MDM5RjBFRjY0MDY2MDAyNDUKKzoxMDM0Q0EwMEMxOTE5MDcyMzZFMDYwMDJDMTkxOTA3NjQwRTA3MDMxMEQKKzoxMDM0REEwMDkwNzIwMzc0MDNGMDkwNzIwM0UwRkY3NUYwMEFBNDI0NUIKKzoxMDM0RUEwMEFBRjU4MkU0MzQ3NUY1ODNFMEZFOTA3MjI5RTBGREVFRDgKKzoxMDM0RkEwMDZENjAwRUVGQzM5NDBBNTAwODkwNzIwM0UwMDRGMDgwRTYKKzoxMDM1MEEwMEQ1OTA3MjM5NzQwNEYwOTA3NjQwRTA3MDA4OTA3MjAzOTYKKzoxMDM1MUEwMEUwOTA3MjM5RjA5MDcyMzlFMEZEMjRGRTkwNzIyQUYwNDAKKzoxMDM1MkEwMEVENzVGMDBBQTQyNEFERjU4MkU0MzQ3NUY1ODNFMEZGNjUKKzoxMDM1M0EwMDdFMDA5MDc1MENFRUYwQTNFRkYwNzAwNjkwNzIwMjc0QTQKKzoxMDM1NEEwMDgwRjA5MDc1MENFMEZFQTNFMEZGNjQ4MDRFNzAwNDkwNUEKKzoxMDM1NUEwMDcyMDJGMEVGNEU3MDAyQzExQkVGNjQ4MDRFNzAwMkMxMUUKKzoxMDM1NkEwMDFCRUZGOEU0OTA3NTBERjBFODkwNzUwQ0YwRUQ3NUYwMkUKKzoxMDM1N0EwMDBBQTQyNEFDRjU4MkU0MzQ3NUY1ODNFMEZGOTA3MjAyNjQKKzoxMDM1OEEwMEYwOTA3NTBERTAyRkYwOTA3NTBDRTAzNDAwRjBFMEZFM0QKKzoxMDM1OUEwMEEzRTBGRkU0RkNGRDdCRDY3QUE1RjlGOEQzMTIzNzk1QjAKKzoxMDM1QUEwMDQwMEE5MDc1MEM3NEE1RjBBMzc0RDZGMDkwNzUwREUwREUKKzoxMDM1QkEwMDI0MkFGMDkwNzUwQ0UwMzQ1QUYwRTBGRUEzRTA3ODA1NzYKKzoxMDM1Q0EwMENFQTJFNzEzQ0UxM0Q4RjhGRjkwNzUwQ0VFRjBBM0VGNTYKKzoxMDM1REEwMEYwOTA3MjJDRUVGMEEzRUZGMEQzOTREMkVFNjQ4MDk0QzQKKzoxMDM1RUEwMDgyNDAwQTkwNzIyQzc0MDJGMEEzNzREMkYwQzM5MDcyRDMKKzoxMDM1RkEwMDJDRTA2NDgwOTQ4MDUwMDRFNEYwQTNGMDkwNzIyQ0UwRjQKKzoxMDM2MEEwMEZFQTNFMDI0M0FGNTgyRUUzNDcyRjU4M0UwOTA3MjAyNkEKKzoxMDM2MUEwMEYwOTA3MjJBRTBGRjI0RkQ2MDJEMjRGRTYwMjkyNDAzMjUKKzoxMDM2MkEwMDI0RkI1MDA0NjAyMTgwNDA5MDcyMDJFMEZFNzQyMDJGMzcKKzoxMDM2M0EwMEY1ODJFNDM0ODBGNTgzRUVGMDc0MjgyRkY1ODJFNDM0QzEKKzoxMDM2NEEwMDgwRjU4M0VFRjA4MDIxOTA3MjAyRTBGRjkwNzIyQUUwMEEKKzoxMDM2NUEwMEZFMjQzMEY1ODJFNDM0ODBGNTgzRUZGMDc0MzgyRUY1RDkKKzoxMDM2NkEwMDgyRTQzNDgwRjU4M0VGRjA5MDc2NDBFMDcwMDY5MDcyNDEKKzoxMDM2N0EwMDM5NzQwQUYwOTA3MjM5RTAwNEYwRTBDMzk0MEE1MDAyRjcKKzowODM2OEEwMEExMTFFNDkwNzY0MEYwMjI0QQorOjA0NEUwQjAwMTIxNzMwMjIyOAorOjEwNDlBRTAwOTA3NjQ2NzQ4MEYwRTRBM0YwQTNGMEEzRjBBM0YwQTNGNgorOjEwNDlCRTAwRjBBM0YwQTNGMEEzRjBBMzc0ODBGMEU0QTNGMEEzRjBBRgorOjEwNDlDRTAwQTNGMEEzRjBBM0YwQTNGMEEzNzQ0MEYwRTRBM0YwQTMyQworOjEwNDlERTAwNzQ0MEYwRTRBM0YwQTNGMEEzRjBBM0YwQTNGMEEzRjBDRgorOjEwNDlFRTAwQTM3NDQwRjBFNEEzRjBBMzc0NDBGMEU0QTNGMEEzRjBBQQorOjA1NDlGRTAwQTNGMEEzRjAyMjZDCis6MTAwRkM2MDBFNEZGNzQ0NjJGRjU4MkU0MzQ3NkY1ODNFMEZFNzQyMDYwCis6MTAwRkQ2MDAyRkY1ODJFNDM0ODBGNTgzRUVGMDc0NEUyRkY1ODJFNDJCCis6MTAwRkU2MDAzNDc2RjU4M0UwRkU3NDMwMkZGNTgyRTQzNDgwRjU4M0ExCis6MDYwRkY2MDBFRUYwMEZCRjA4Q0M3NQorOjAxMEZGQzAwMjJEMgorOjEwNEFGMTAwRTRGRjc0NTYyRkY1ODJFNDM0NzZGNTgzRTBGRTc0MjhFMgorOjEwNEIwMTAwMkZGNTgyRTQzNDgwRjU4M0VFRjA3NDVFMkZGNTgyRTRCNAorOjEwNEIxMTAwMzQ3NkY1ODNFMEZFNzQzODJGRjU4MkU0MzQ4MEY1ODMzMgorOjA2NEIyMTAwRUVGMDBGQkYwOENDMEUKKzowMTRCMjcwMDIyNkIKKzoxMDE3MzAwMEMwODJDMDgzQzBFMEU4QzBFMDc4NzhFODE0Rjg3MEZCQUQKKzowQTE3NDAwMEQwRTBGOEQwRTBEMDgzRDA4MjIyODAKKzowMzAwNDMwMDAyNDkwMDZGCis6MTA0OTAwMDAwMjJGRTcwMDAyM0Q0NzAwMDI0REI0MDAwMjRDNDMwMDc1Cis6MTA0OTEwMDAwMjRCRTkwMDAyMkZGRjAwMDI0QzVCMDAwMjRDMEEwMDMwCis6MTA0OTIwMDAwMjRDNzIwMDAyNEI1QTAwMDI0Qzg5MDAwMjRDQTAwMDVCCis6MTA0OTMwMDAwMjRDQjcwMDAyNENDRTAwMDI0Q0U1MDAwMjRDRkMwMEQ5Cis6MTA0OTQwMDAwMjREMTMwMDAyNEQyQTAwMDI0RDQxMDAwMjRENTgwMDU1Cis6MDg0OTUwMDAwMjRENkYwMDAyNEQ4NjAwQ0MKKzoxMDFCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKKzoxMDFCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKKzoxMDFCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKKzoxMDFCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKKzoxMDFCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKKzoxMDFCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKKzoxMDFCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKKzoxMDFCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKKzoxMDFCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDFCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDFCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKKzoxMDFCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKKzoxMDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKKzoxMDFDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKKzoxMDFDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKKzoxMDFDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKKzoxMDFDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTQKKzoxMDFDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKKzoxMDFDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKKzoxMDFDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKKzoxMDFDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKKzoxMDFDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKKzoxMDFDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKKzoxMDFDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKKzoxMDFDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKKzoxMDFDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDFDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDFDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKKzoxMDFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKKzoxMDFEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKKzoxMDFEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKKzoxMDFEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKKzoxMDFENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKKzoxMDFENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKKzoxMDFENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKKzoxMDFENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKKzoxMDFEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMDFEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKKzoxMDFEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMDFEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKKzoxMDFEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKKzoxMDFERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKKzoxMDFERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDFERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDFFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKKzoxMDFFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKKzoxMDFFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKKzoxMDFFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKKzoxMDFFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKKzoxMDFFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKKzoxMDFFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKKzoxMDFFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKKzoxMDFFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKKzoxMDFFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKKzowRTFFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwMUVCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAorOjEwMUVDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMUVERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwMUVFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAorOjEwMUVGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwMUYwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMworOjEwMUYxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMworOjEwMUYyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMworOjAyMUYzRTAwMDAwMEExCis6MTAxRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCis6MTAxRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCis6MTAxRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCis6MTAxRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCis6MTAxRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCis6MTAxRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCis6MTAxRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCis6MTAxRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCis6MTAxRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTAxRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTAxRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTAxRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTAyMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAyMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTAyMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTAyMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTAyMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTAyMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCis6MTAyMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTAyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTAyMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTAyMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTAyMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTAyMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTAyMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTAyMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTAyMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTAyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTAyMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTAyMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAyMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTAyMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTAyMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTAyMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTAyMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTAyMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTAyMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTAyMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTAyMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTAyMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTAyMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTAyMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTAyMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTAyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTAyMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTAyMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTAyMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAyMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTAyMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTAyMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTAyMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTAyMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTAyMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTAyMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTAyMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTAyMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTAyMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTAyMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCis6MTAyMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTAyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECis6MTAyMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTAyMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTAyMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTAyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTAyMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTAyMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MEUyMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMDIzN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKKzoxMDIzOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKKzoxMDIzOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKKzoxMDIzQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKKzoxMDIzQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKKzoxMDIzQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMDIzREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDIzRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKKzoxMDIzRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKKzoxMDI0MEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKKzoxMDI0MUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKKzoxMDI0MkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDI0M0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDI0NEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKKzoxMDI0NUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDI0NkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDI0N0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDI0OEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDI0OUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKKzoxMDI0QUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKKzoxMDI0QkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDI0Q0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMDI0REUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKKzoxMDI0RUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDI0RkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKKzoxMDI1MEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDI1MUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKKzoxMDI1MkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKKzoxMDI1M0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDI1NEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDI1NUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKKzoxMDI1NkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKKzoxMDI1N0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDI1OEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKKzoxMDI1OUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKKzoxMDI1QUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKKzoxMDI1QkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKKzoxMDI1Q0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKKzoxMDI1REUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKKzoxMDI1RUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKKzoxMDI1RkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDI2MEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKKzoxMDI2MUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKKzoxMDI2MkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUMKKzoxMDI2M0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEMKKzoxMDI2NEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDI2NUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkMKKzoxMDI2NkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUMKKzoxMDI2N0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEMKKzoxMDI2OEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MKKzoxMDI2OUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKKzoxMDI2QUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUMKKzoxMDI2QkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKKzoxMDI2Q0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKKzoxMDI2REUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKKzowRTI2RUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwMjZGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwMjcwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwMjcxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwMjcyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwMjczQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMjc0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwMjc1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAorOjEwMjc2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwMjc3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwMjc4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwMjc5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAorOjEwMjdBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAorOjEwMjdCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAorOjEwMjdDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAorOjEwMjdEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwMjdFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjA1MjdGQzAwMDAwMDAwMDAyMkI2Cis6MDcxNzRBMDA5MDdGQzU3NDAyRjAyMjNDCis6MTAxNzUxMDA5MDdFQzBFMDkwNzY0NUYwOTA3RUMxRTA5MDc2NDRGMEI2Cis6MTAxNzYxMDA5MDdFQzJFMDkwNzY0M0YwQjQwMDAzMDIxNzc4OTA3NjQxCis6MTAxNzcxMDAxOTc0MDNGMDAyMTc4RTkwNzY0NEUwQjRCQjA5OTA3Njk5Cis6MTAxNzgxMDAxOTc0MDJGMDAyMTc4RTkwNzYxOTc0MDFGMDkwNzY0MjY2Cis6MDMxNzkxMDBFNEYwMjI1RgorOjAzMDAwMDAwMDI0NkI5RkMKKzowQzQ2QjkwMDc4N0ZFNEY2RDhGRDc1ODEzODAyNDcwMEQ4Cis6MTAzNjkyMDBCQjAxMDY4OTgyOEE4M0UwMjI1MDAyRTcyMkJCRkUwMjM2Cis6MDkzNkEyMDBFMzIyODk4MjhBODNFNDkzMjI2OQorOjEwMzZBQjAwQkIwMTBDRTU4MjI5RjU4MkU1ODMzQUY1ODNFMDIyNTBENAorOjEwMzZCQjAwMDZFOTI1ODJGOEU2MjJCQkZFMDZFOTI1ODJGOEUyMjIxRQorOjBEMzZDQjAwRTU4MjI5RjU4MkU1ODMzQUY1ODNFNDkzMjIzOAorOjEwMzZEODAwQzJENUVDMzBFNzA5QjJENUU0QzM5REZERTQ5Q0ZDRUUwRAorOjEwMzZFODAwMzBFNzE1QjJENUU0QzM5RkZGRTQ5RUZFMTIzODFGQzMyRQorOjEwMzZGODAwRTQ5REZERTQ5Q0ZDODAwMzEyMzgxRjMwRDUwN0MzRTQyOQorOjA2MzcwODAwOUZGRkU0OUVGRTIyN0IKKzoxMDM3MEUwMEJCMDExMEU1ODIyOUY1ODJFNTgzM0FGNTgzRTBGNUYwRjkKKzoxMDM3MUUwMEEzRTAyMjUwMDlFOTI1ODJGODg2RjAwOEU2MjJCQkZFRDYKKzoxMDM3MkUwMDBBRTkyNTgyRjhFMkY1RjAwOEUyMjJFNTgzMkFGNTgzMUMKKzowODM3M0UwMEU5OTNGNUYwQTNFOTkzMjJFMQorOjEwMzc0NjAwRTg4RkYwQTRDQzhCRjBBNDJDRkNFOThFRjBBNDJDRkMyMgorOjEwMzc1NjAwOEFGMEVEQTQyQ0ZDRUE4RUYwQTRDREE4RjA4QkYwQTRBMAorOjEwMzc2NjAwMkRDQzM4MjVGMEZERTk4RkYwQTQyQ0NEMzVGMEZDRUJGRgorOjEwMzc3NjAwOEVGMEE0RkVBOUYwRUI4RkYwQTRDRkM1RjAyRUNEMzlDNAorOjBGMzc4NjAwRkVFNDNDRkNFQUE0MkRDRTM1RjBGREU0M0NGQzIyMzEKKzoxMDM3OTUwMEVCOUZGNUYwRUE5RTQyRjBFOTlENDJGMEVDNjQ4MEM4QUIKKzowNjM3QTUwMDY0ODA5ODQ1RjAyMjRCCis6MTAzN0FCMDBFQjlGRjVGMEVBOUU0MkYwRTk5RDQyRjBFODlDNDVGMDc0Cis6MDEzN0JCMDAyMkVCCis6MEMzN0JDMDBFQ0YwQTNFREYwQTNFRUYwQTNFRkYwMjI4MAorOjEwMzdDODAwQTg4Mjg1ODNGMEQwODNEMDgyMTIzN0RGMTIzN0RGMTJDOAorOjEwMzdEODAwMzdERjEyMzdERkU0NzNFNDkzQTNDNTgzQzVGMEM1ODNFRAorOjEwMzdFODAwQzhDNTgyQzhGMEEzQzU4M0M1RjBDNTgzQzhDNTgyQzg0QgorOjAxMzdGODAwMjJBRQorOjEwMzdGOTAwRDA4M0QwODJGOEU0OTM3MDEyNzQwMTkzNzAwREEzQTM1RgorOjEwMzgwOTAwOTNGODc0MDE5M0Y1ODI4ODgzRTQ3Mzc0MDI5MzY4NjA3MgorOjA2MzgxOTAwRUZBM0EzQTM4MERGNzIKKzoxMDQ2QzUwMDAyMDdBNkU0OTNBM0Y4RTQ5M0EzNDAwM0Y2ODAwMUYyNUUKKzoxMDQ2RDUwMDA4REZGNDgwMjlFNDkzQTNGODU0MDcyNDBDQzhDMzMzRjYKKzoxMDQ2RTUwMEM0NTQwRjQ0MjBDODgzNDAwNEY0NTY4MDAxNDZGNkRGQzUKKzoxMDQ2RjUwMEU0ODAwQjAxMDIwNDA4MTAyMDQwODA5MDBDOEZFNDdFQkEKKzoxMDQ3MDUwMDAxOTM2MEJDQTNGRjU0M0YzMEU1MDk1NDFGRkVFNDkzQjkKKzoxMDQ3MTUwMEEzNjAwMTBFQ0Y1NEMwMjVFMDYwQTg0MEI4RTQ5M0EzODAKKzoxMDQ3MjUwMEZBRTQ5M0EzRjhFNDkzQTNDOEM1ODJDOENBQzU4M0NBQUIKKzoxMDQ3MzUwMEYwQTNDOEM1ODJDOENBQzU4M0NBREZFOURFRTc4MEJFNjMKKzowMTBGQzUwMDAwMkIKKzoxMDM4MUYwMEJDMDAwQkJFMDAyOUVGOERGMDg0RkZBREYwMjJFNENDOEQKKzoxMDM4MkYwMEY4NzVGMDA4RUYyRkZGRUUzM0ZFRUMzM0ZDRUU5REVDNTYKKzoxMDM4M0YwMDk4NDAwNUZDRUU5REZFMEZENUYwRTlFNENFRkQyMkVEOUMKKzoxMDM4NEYwMEY4RjVGMEVFODQyMEQyMUNGRUFERjA3NUYwMDhFRjJGRTYKKzoxMDM4NUYwMEZGRUQzM0ZENDAwNzk4NTAwNkQ1RjBGMjIyQzM5OEZERDcKKzowNTM4NkYwMDBGRDVGMEVBMjI3NAorOjAwMDAwMDAxRkYKKy8qCitWRVJTSU9OPTEuMDQuMDYyCitEQVRFPTE2LjEwLjIwMDIgIAorKi8KK3N0YXRpYyBJTlRFTF9IRVhfUkVDT1JEIGdfZW1pNjJfbG9hZGVyW10gPSB7CisgICAzLDB4MDAwMCwwLHsweDAyLDB4MDIsMHg4N30sCisgICAzLDB4MDA0MywwLHsweDAyLDB4MDQsMHgwMH0sCisgIDE2LDB4MDEwMCwwLHsweGU0LDB4ZmYsMHhmZSwweGMyLDB4MjAsMHhkMiwweGU4LDB4NDMsMHhkOCwweDIwLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHhmZiwweGYwfSwKKyAgMTYsMHgwMTEwLDAsezB4OTAsMHg3ZiwweGE5LDB4ZjAsMHg5MCwweDdmLDB4YWEsMHhmMCwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHg5NSwweDc0LDB4YzB9LAorICAxNiwweDAxMjAsMCx7MHhmMCwweDkwLDB4N2YsMHg5ZSwweGYwLDB4OTAsMHg3ZiwweDk4LDB4ZjAsMHhlNCwweDkwLDB4N2YsMHg5NCwweGYwLDB4OTAsMHg3Zn0sCisgIDE2LDB4MDEzMCwwLHsweDlkLDB4NzQsMHhmZiwweGYwLDB4OTAsMHg3ZiwweDk3LDB4NzQsMHhhMCwweGYwLDB4OTAsMHg3ZiwweDkzLDB4ZTAsMHg1NCwweGZjfSwKKyAgMTYsMHgwMTQwLDAsezB4ZjAsMHg5MCwweDdmLDB4OWMsMHg3NCwweDAzLDB4ZjAsMHhlNCwweDkwLDB4N2YsMHg5NiwweGYwLDB4OTAsMHg3ZiwweGFmLDB4ZTB9LAorICAxNiwweDAxNTAsMCx7MHg0NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4YWUsMHhlMCwweDQ0LDB4MGQsMHhmMCwweGQyLDB4YWYsMHgwZiwweGJmLDB4MDAsMHgwMX0sCisgIDE2LDB4MDE2MCwwLHsweDBlLDB4YmUsMHgwNywweGY4LDB4YmYsMHgwOCwweGY1LDB4MjAsMHgyMCwweDQyLDB4NzUsMHgxNCwweDAwLDB4NzUsMHgxMywweDAwfSwKKyAgMTYsMHgwMTcwLDAsezB4NzUsMHgxMiwweDAwLDB4NzUsMHgxMSwweDAwLDB4N2YsMHg0OCwweDdlLDB4OTIsMHg3ZCwweDAwLDB4N2MsMHgwMCwweGFiLDB4MTR9LAorICAxNiwweDAxODAsMCx7MHhhYSwweDEzLDB4YTksMHgxMiwweGE4LDB4MTEsMHhjMywweDEyLDB4MDMsMHhlZCwweDUwLDB4ZGIsMHgyMCwweDIwLDB4ZDgsMHg3YX0sCisgIDE2LDB4MDE5MCwwLHsweDAwLDB4NzksMHgwMCwweDc4LDB4MDAsMHhlNSwweDE0LDB4MjQsMHgwMSwweGY1LDB4MTQsMHhlYSwweDM1LDB4MTMsMHhmNSwweDEzfSwKKyAgMTYsMHgwMWEwLDAsezB4ZTksMHgzNSwweDEyLDB4ZjUsMHgxMiwweGU4LDB4MzUsMHgxMSwweGY1LDB4MTEsMHg4MCwweGNhLDB4MzAsMHgyMCwweGZkLDB4MTJ9LAorICAxNiwweDAxYjAsMCx7MHgwMSwweGM3LDB4NTAsMHgwNywweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NH0sCisgICA2LDB4MDFjMCwwLHsweDAyLDB4ZjAsMHhjMiwweDIwLDB4ODAsMHhlNn0sCisgICAxLDB4MDFjNiwwLHsweDIyfSwKKyAgMTYsMHgwMWM3LDAsezB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweDViLDB4NjAsMHg2MCwweDI0LDB4MDIsMHg2MCwweDAzLDB4MDIsMHgwMiwweDg1LDB4OTB9LAorICAxNiwweDAxZDcsMCx7MHg3ZiwweGVhLDB4ZTAsMHg3NSwweDBhLDB4MDAsMHhmNSwweDBiLDB4YTMsMHhlMCwweGZlLDB4ZTQsMHhlZSwweDQyLDB4MGEsMHg5MH0sCisgIDE2LDB4MDFlNywwLHsweDdmLDB4ZWUsMHhlMCwweDc1LDB4MTUsMHgwMCwweGY1LDB4MTYsMHhhMywweGUwLDB4ZmUsMHhlNCwweGVlLDB4NDIsMHgxNSwweGU1fSwKKyAgMTYsMHgwMWY3LDAsezB4MTYsMHg0NSwweDE1LDB4NzAsMHgwMywweDAyLDB4MDIsMHg4NSwweGU0LDB4OTAsMHg3ZiwweGM1LDB4ZjAsMHg5MCwweDdmLDB4YjR9LAorICAxNiwweDAyMDcsMCx7MHhlMCwweDIwLDB4ZTMsMHhmOSwweDkwLDB4N2YsMHhjNSwweGUwLDB4ZjUsMHgwYywweDEyLDB4MDMsMHgxMywweGFmLDB4MGMsMHg3ZX0sCisgIDE2LDB4MDIxNywwLHsweDAwLDB4ZWYsMHgyNSwweDBiLDB4ZjUsMHgwYiwweGVlLDB4MzUsMHgwYSwweGY1LDB4MGEsMHhjMywweGU1LDB4MTYsMHg5ZiwweGY1fSwKKyAgMTYsMHgwMjI3LDAsezB4MTYsMHhlNSwweDE1LDB4OWUsMHhmNSwweDE1LDB4ODAsMHhjNywweDkwLDB4N2YsMHhlYSwweGUwLDB4NzUsMHgwYSwweDAwLDB4ZjV9LAorICAxNiwweDAyMzcsMCx7MHgwYiwweGEzLDB4ZTAsMHhmZSwweGU0LDB4ZWUsMHg0MiwweDBhLDB4OTAsMHg3ZiwweGVlLDB4ZTAsMHg3NSwweDE1LDB4MDAsMHhmNX0sCisgIDE2LDB4MDI0NywwLHsweDE2LDB4YTMsMHhlMCwweGZlLDB4ZTQsMHhlZSwweDQyLDB4MTUsMHhlNSwweDE2LDB4NDUsMHgxNSwweDYwLDB4MzAsMHhlNCwweDkwfSwKKyAgMTYsMHgwMjU3LDAsezB4N2YsMHhjNSwweGYwLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHgyMCwweGUzLDB4ZjksMHg5MCwweDdmLDB4YzUsMHhlMCwweGY1LDB4MGN9LAorICAxNiwweDAyNjcsMCx7MHgxMiwweDAzLDB4MmIsMHhhZiwweDBjLDB4N2UsMHgwMCwweGVmLDB4MjUsMHgwYiwweGY1LDB4MGIsMHhlZSwweDM1LDB4MGEsMHhmNX0sCisgIDE1LDB4MDI3NywwLHsweDBhLDB4YzMsMHhlNSwweDE2LDB4OWYsMHhmNSwweDE2LDB4ZTUsMHgxNSwweDllLDB4ZjUsMHgxNSwweDgwLDB4Y2EsMHhjM30sCisgICAxLDB4MDI4NiwwLHsweDIyfSwKKyAgMTIsMHgwMjg3LDAsezB4NzgsMHg3ZiwweGU0LDB4ZjYsMHhkOCwweGZkLDB4NzUsMHg4MSwweDI5LDB4MDIsMHgwMiwweGNlfSwKKyAgMTYsMHgwMjkzLDAsezB4MDIsMHgwMSwweDAwLDB4ZTQsMHg5MywweGEzLDB4ZjgsMHhlNCwweDkzLDB4YTMsMHg0MCwweDAzLDB4ZjYsMHg4MCwweDAxLDB4ZjJ9LAorICAxNiwweDAyYTMsMCx7MHgwOCwweGRmLDB4ZjQsMHg4MCwweDI5LDB4ZTQsMHg5MywweGEzLDB4ZjgsMHg1NCwweDA3LDB4MjQsMHgwYywweGM4LDB4YzMsMHgzM30sCisgIDE2LDB4MDJiMywwLHsweGM0LDB4NTQsMHgwZiwweDQ0LDB4MjAsMHhjOCwweDgzLDB4NDAsMHgwNCwweGY0LDB4NTYsMHg4MCwweDAxLDB4NDYsMHhmNiwweGRmfSwKKyAgMTYsMHgwMmMzLDAsezB4ZTQsMHg4MCwweDBiLDB4MDEsMHgwMiwweDA0LDB4MDgsMHgxMCwweDIwLDB4NDAsMHg4MCwweDkwLDB4MDQsMHg2ZSwweGU0LDB4N2V9LAorICAxNiwweDAyZDMsMCx7MHgwMSwweDkzLDB4NjAsMHhiYywweGEzLDB4ZmYsMHg1NCwweDNmLDB4MzAsMHhlNSwweDA5LDB4NTQsMHgxZiwweGZlLDB4ZTQsMHg5M30sCisgIDE2LDB4MDJlMywwLHsweGEzLDB4NjAsMHgwMSwweDBlLDB4Y2YsMHg1NCwweGMwLDB4MjUsMHhlMCwweDYwLDB4YTgsMHg0MCwweGI4LDB4ZTQsMHg5MywweGEzfSwKKyAgMTYsMHgwMmYzLDAsezB4ZmEsMHhlNCwweDkzLDB4YTMsMHhmOCwweGU0LDB4OTMsMHhhMywweGM4LDB4YzUsMHg4MiwweGM4LDB4Y2EsMHhjNSwweDgzLDB4Y2F9LAorICAxNiwweDAzMDMsMCx7MHhmMCwweGEzLDB4YzgsMHhjNSwweDgyLDB4YzgsMHhjYSwweGM1LDB4ODMsMHhjYSwweGRmLDB4ZTksMHhkZSwweGU3LDB4ODAsMHhiZX0sCisgIDE2LDB4MDMxMywwLHsweGU1LDB4MGMsMHhmZiwweGU1LDB4MGIsMHhmNSwweDgyLDB4ZTUsMHgwYSwweGY1LDB4ODMsMHg3NSwweDkyLDB4N2UsMHg3NCwweGMwfSwKKyAgIDgsMHgwMzIzLDAsezB4ZjgsMHhlMiwweDA4LDB4ZjAsMHhhMywweGRmLDB4ZmEsMHgyMn0sCisgIDE2LDB4MDMyYiwwLHsweDkwLDB4N2YsMHg5NiwweDg1LDB4ODMsMHg5MiwweGE4LDB4ODIsMHg3OSwweDAyLDB4OTAsMHgwMCwweDAwLDB4ZTAsMHhiNCwweDAwfSwKKyAgMTYsMHgwMzNiLDAsezB4MGQsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4OTcsMHhlMCwweDU0LDB4N2YsMHhmMCwweDQ0LDB4ODAsMHhmMCwweGU1LDB4MGN9LAorICAxNiwweDAzNGIsMCx7MHhmZiwweDkwLDB4N2UsMHhjMCwweGUwLDB4ZjUsMHgyOCwweGU0LDB4YTIsMHg0NywweDMzLDB4ZjIsMHg2OSwweGYyLDB4ZTQsMHhhMn0sCisgIDE2LDB4MDM1YiwwLHsweDQ2LDB4MzMsMHhmMiwweDY5LDB4ZjIsMHhlNCwweGEyLDB4NDUsMHgzMywweGYyLDB4NjksMHhmMiwweGU0LDB4YTIsMHg0NCwweDMzfSwKKyAgMTYsMHgwMzZiLDAsezB4ZjIsMHg2OSwweGYyLDB4ZTQsMHhhMiwweDQzLDB4MzMsMHhmMiwweDY5LDB4ZjIsMHhlNCwweGEyLDB4NDIsMHgzMywweGYyLDB4Njl9LAorICAxNiwweDAzN2IsMCx7MHhmMiwweGU0LDB4YTIsMHg0MSwweDMzLDB4ZjIsMHg2OSwweGYyLDB4ZTQsMHhhMiwweDQwLDB4MzMsMHhmMiwweDY5LDB4ZjIsMHhhM30sCisgICAzLDB4MDM4YiwwLHsweGRmLDB4YzIsMHgyMn0sCisgIDE2LDB4MDM4ZSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDkwLDB4N2YsMHhjNCwweGU0LDB4ZjAsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmfSwKKyAgMTEsMHgwMzllLDAsezB4YWIsMHg3NCwweDA0LDB4ZjAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4MDNhOSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweGQyLDB4MjAsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDAxfSwKKyAgIDgsMHgwM2I5LDAsezB4ZjAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4MDNjMSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYiwweDc0LDB4MDIsMHhmMCwweGQwfSwKKyAgIDYsMHgwM2QxLDAsezB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHgwM2Q3LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgxMCwweGYwLDB4ZDB9LAorICAgNiwweDAzZTcsMCx7MHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDAzZWQsMCx7MHhlYiwweDlmLDB4ZjUsMHhmMCwweGVhLDB4OWUsMHg0MiwweGYwLDB4ZTksMHg5ZCwweDQyLDB4ZjAsMHhlOCwweDljLDB4NDUsMHhmMH0sCisgICAxLDB4MDNmZCwwLHsweDIyfSwKKyAgIDEsMHgwM2ZlLDAsezB4MzJ9LAorICAgMSwweDAzZmYsMCx7MHgzMn0sCisgIDE2LDB4MDQwMCwwLHsweDAyLDB4MDMsMHhhOSwweDAwLDB4MDIsMHgwMywweGMxLDB4MDAsMHgwMiwweDAzLDB4OGUsMHgwMCwweDAyLDB4MDQsMHg1OCwweDAwfSwKKyAgMTYsMHgwNDEwLDAsezB4MDIsMHgwMywweGQ3LDB4MDAsMHgwMiwweDAzLDB4ZmUsMHgwMCwweDAyLDB4MDMsMHhmZiwweDAwLDB4MDIsMHgwNCwweDg0LDB4MDB9LAorICAxNiwweDA0MjAsMCx7MHgwMiwweDA0LDB4ODUsMHgwMCwweDAyLDB4MDQsMHg4NiwweDAwLDB4MDIsMHgwNCwweDg3LDB4MDAsMHgwMiwweDA0LDB4ODgsMHgwMH0sCisgIDE2LDB4MDQzMCwwLHsweDAyLDB4MDQsMHg4OSwweDAwLDB4MDIsMHgwNCwweDhhLDB4MDAsMHgwMiwweDA0LDB4OGIsMHgwMCwweDAyLDB4MDQsMHg4YywweDAwfSwKKyAgMTYsMHgwNDQwLDAsezB4MDIsMHgwNCwweDhkLDB4MDAsMHgwMiwweDA0LDB4OGUsMHgwMCwweDAyLDB4MDQsMHg4ZiwweDAwLDB4MDIsMHgwNCwweDkwLDB4MDB9LAorICAgOCwweDA0NTAsMCx7MHgwMiwweDA0LDB4OTEsMHgwMCwweDAyLDB4MDQsMHg5MiwweDAwfSwKKyAgMTYsMHgwNDU4LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwOCwweGYwLDB4ZDB9LAorICAgNiwweDA0NjgsMCx7MHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDA0NmUsMCx7MHgwMiwweDBhLDB4MDAsMHgwZiwweDAxLDB4MGMsMHgxMSwweDA0LDB4MGQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQxLDB4MDAsMHgwMH0sCisgICAxLDB4MDQ3ZSwwLHsweDAwfSwKKyAgIDQsMHgwNDdmLDAsezB4MDIsMHgxNywweDAwLDB4MDB9LAorICAgMSwweDA0ODMsMCx7MHgwMH0sCisgICAxLDB4MDQ4NCwwLHsweDMyfSwKKyAgIDEsMHgwNDg1LDAsezB4MzJ9LAorICAgMSwweDA0ODYsMCx7MHgzMn0sCisgICAxLDB4MDQ4NywwLHsweDMyfSwKKyAgIDEsMHgwNDg4LDAsezB4MzJ9LAorICAgMSwweDA0ODksMCx7MHgzMn0sCisgICAxLDB4MDQ4YSwwLHsweDMyfSwKKyAgIDEsMHgwNDhiLDAsezB4MzJ9LAorICAgMSwweDA0OGMsMCx7MHgzMn0sCisgICAxLDB4MDQ4ZCwwLHsweDMyfSwKKyAgIDEsMHgwNDhlLDAsezB4MzJ9LAorICAgMSwweDA0OGYsMCx7MHgzMn0sCisgICAxLDB4MDQ5MCwwLHsweDMyfSwKKyAgIDEsMHgwNDkxLDAsezB4MzJ9LAorICAgMSwweDA0OTIsMCx7MHgzMn0sCisgIDE2LDB4MTEwMCwwLHsweDEyLDB4MDEsMHgxMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4NDAsMHg2YSwweDA4LDB4MDEsMHgwMSwweDAwLDB4MDEsMHgwMSwweDAyfSwKKyAgMTYsMHgxMTEwLDAsezB4MDAsMHgwMSwweDA5LDB4MDIsMHgyMCwweDAwLDB4MDEsMHgwMSwweDAzLDB4YTAsMHgwMCwweDA5LDB4MDQsMHgwMCwweDAwLDB4MDJ9LAorICAxNiwweDExMjAsMCx7MHhmZiwweDAwLDB4MDAsMHgwNCwweDA3LDB4MDUsMHg4MiwweDAyLDB4NDAsMHgwMCwweDAwLDB4MDcsMHgwNSwweDAyLDB4MDIsMHg0MH0sCisgIDE2LDB4MTEzMCwwLHsweDAwLDB4MDAsMHgwNCwweDAzLDB4MDksMHgwNCwweDI2LDB4MDMsMHg0MSwweDAwLDB4NmUsMHgwMCwweDYzLDB4MDAsMHg2OCwweDAwfSwKKyAgMTYsMHgxMTQwLDAsezB4NmYsMHgwMCwweDcyLDB4MDAsMHgyMCwweDAwLDB4NDMsMHgwMCwweDY4LDB4MDAsMHg2OSwweDAwLDB4NzAsMHgwMCwweDczLDB4MDB9LAorICAxNiwweDExNTAsMCx7MHgyYywweDAwLDB4MjAsMHgwMCwweDQ5LDB4MDAsMHg2ZSwweDAwLDB4NjMsMHgwMCwweDJlLDB4MDAsMHgyOCwweDAzLDB4NDYsMHgwMH0sCisgIDE2LDB4MTE2MCwwLHsweDY5LDB4MDAsMHg3MiwweDAwLDB4NmQsMHgwMCwweDc3LDB4MDAsMHg2MSwweDAwLDB4NzIsMHgwMCwweDY1LDB4MDAsMHgyMCwweDAwfSwKKyAgMTYsMHgxMTcwLDAsezB4NDYsMHgwMCwweDcyLDB4MDAsMHg2MSwweDAwLDB4NmQsMHgwMCwweDY1LDB4MDAsMHg1NywweDAwLDB4NmYsMHgwMCwweDcyLDB4MDB9LAorICAxNiwweDExODAsMCx7MHg2YiwweDAwLDB4NzMsMHgwMCwweDJhLDB4MDMsMHg0MywweDAwLDB4NmYsMHgwMCwweDZlLDB4MDAsMHg2NiwweDAwLDB4NjksMHgwMH0sCisgIDE2LDB4MTE5MCwwLHsweDY3LDB4MDAsMHg3NSwweDAwLDB4NzIsMHgwMCwweDYxLDB4MDAsMHg3NCwweDAwLDB4NjksMHgwMCwweDZmLDB4MDAsMHg2ZSwweDAwfSwKKyAgMTYsMHgxMWEwLDAsezB4MjAsMHgwMCwweDUzLDB4MDAsMHg3NCwweDAwLDB4NzIsMHgwMCwweDY5LDB4MDAsMHg2ZSwweDAwLDB4NjcsMHgwMCwweDIyLDB4MDN9LAorICAxNiwweDExYjAsMCx7MHg0OSwweDAwLDB4NmUsMHgwMCwweDc0LDB4MDAsMHg2NSwweDAwLDB4NzIsMHgwMCwweDY2LDB4MDAsMHg2MSwweDAwLDB4NjMsMHgwMH0sCisgIDE2LDB4MTFjMCwwLHsweDY1LDB4MDAsMHgyMCwweDAwLDB4NTMsMHgwMCwweDc0LDB4MDAsMHg3MiwweDAwLDB4NjksMHgwMCwweDZlLDB4MDAsMHg2NywweDAwfSwKKyAgIDIsMHgxMWQwLDAsezB4MDAsMHgwMH0sCisgICAwLDB4MDAwMCwxLHswfQorfTsKKy8qIFNvdXJjZTogRU1JTE9BRC5IRVggCis6MTAwNDZFMDAwMjBBMDAwRjAxMEMxMTA0MEQwMDAwMDAwMDQxMDAwMEYzCis6MDEwNDdFMDAwMDdECis6MTAwMUM3MDA5MDdGRTlFMDI0NUI2MDYwMjQwMjYwMDMwMjAyODU5MDZGCis6MTAwMUQ3MDA3RkVBRTA3NTBBMDBGNTBCQTNFMEZFRTRFRTQyMEE5MDIxCis6MTAwMUU3MDA3RkVFRTA3NTE1MDBGNTE2QTNFMEZFRTRFRTQyMTVFNTk3Cis6MTAwMUY3MDAxNjQ1MTU3MDAzMDIwMjg1RTQ5MDdGQzVGMDkwN0ZCNDIxCis6MTAwMjA3MDBFMDIwRTNGOTkwN0ZDNUUwRjUwQzEyMDMxM0FGMEM3RUY1Cis6MTAwMjE3MDAwMEVGMjUwQkY1MEJFRTM1MEFGNTBBQzNFNTE2OUZGNTNBCis6MTAwMjI3MDAxNkU1MTU5RUY1MTU4MEM3OTA3RkVBRTA3NTBBMDBGNTdCCis6MTAwMjM3MDAwQkEzRTBGRUU0RUU0MjBBOTA3RkVFRTA3NTE1MDBGNUIxCis6MTAwMjQ3MDAxNkEzRTBGRUU0RUU0MjE1RTUxNjQ1MTU2MDMwRTQ5MDhFCis6MTAwMjU3MDA3RkM1RjA5MDdGQjRFMDIwRTNGOTkwN0ZDNUUwRjUwQzBGCis6MTAwMjY3MDAxMjAzMkJBRjBDN0UwMEVGMjUwQkY1MEJFRTM1MEFGNUNECis6MEYwMjc3MDAwQUMzRTUxNjlGRjUxNkU1MTU5RUY1MTU4MENBQzM1NworOjAxMDI4NjAwMjI1NQorOjEwMDNBOTAwQzBFMEMwODNDMDgyRDIyMDUzOTFFRjkwN0ZBQjc0MDEyQgorOjA4MDNCOTAwRjBEMDgyRDA4M0QwRTAzMkM1Cis6MTAwMzhFMDBDMEUwQzA4M0MwODI5MDdGQzRFNEYwNTM5MUVGOTA3RkIxCis6MEIwMzlFMDBBQjc0MDRGMEQwODJEMDgzRDBFMDMyQkEKKzoxMDAzQzEwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQjc0MDJGMEQwNDQKKzowNjAzRDEwMDgyRDA4M0QwRTAzMjZGCis6MTAwM0Q3MDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUI3NDEwRjBEMDIwCis6MDYwM0U3MDA4MkQwODNEMEUwMzI1OQorOjAxMDNGRTAwMzJDQworOjEwMDQ1ODAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFCNzQwOEYwRDBBNgorOjA2MDQ2ODAwODJEMDgzRDBFMDMyRDcKKzowMTAzRkYwMDMyQ0IKKzowMTA0ODQwMDMyNDUKKzowMTA0ODUwMDMyNDQKKzowMTA0ODYwMDMyNDMKKzowMTA0ODcwMDMyNDIKKzowMTA0ODgwMDMyNDEKKzowMTA0ODkwMDMyNDAKKzowMTA0OEEwMDMyM0YKKzowMTA0OEIwMDMyM0UKKzowMTA0OEMwMDMyM0QKKzowMTA0OEQwMDMyM0MKKzowMTA0OEUwMDMyM0IKKzowMTA0OEYwMDMyM0EKKzowMTA0OTAwMDMyMzkKKzowMTA0OTEwMDMyMzgKKzowMTA0OTIwMDMyMzcKKzowNDA0N0YwMDAyMTcwMDAwNjAKKzoxMDAxMDAwMEU0RkZGRUMyMjBEMkU4NDNEODIwOTA3RkFCNzRGRkYwMUEKKzoxMDAxMTAwMDkwN0ZBOUYwOTA3RkFBRjA1MzkxRUY5MDdGOTU3NEMwRTMKKzoxMDAxMjAwMEYwOTA3RjlFRjA5MDdGOThGMEU0OTA3Rjk0RjA5MDdGMjUKKzoxMDAxMzAwMDlENzRGRkYwOTA3Rjk3NzRBMEYwOTA3RjkzRTA1NEZDNDMKKzoxMDAxNDAwMEYwOTA3RjlDNzQwM0YwRTQ5MDdGOTZGMDkwN0ZBRkUwOTYKKzoxMDAxNTAwMDQ0MDFGMDkwN0ZBRUUwNDQwREYwRDJBRjBGQkYwMDAxM0MKKzoxMDAxNjAwMDBFQkUwN0Y4QkYwOEY1MjAyMDQyNzUxNDAwNzUxMzAwNzUKKzoxMDAxNzAwMDc1MTIwMDc1MTEwMDdGNDg3RTkyN0QwMDdDMDBBQjE0RTMKKzoxMDAxODAwMEFBMTNBOTEyQTgxMUMzMTIwM0VENTBEQjIwMjBEODdBQkMKKzoxMDAxOTAwMDAwNzkwMDc4MDBFNTE0MjQwMUY1MTRFQTM1MTNGNTEzMEQKKzoxMDAxQTAwMEU5MzUxMkY1MTJFODM1MTFGNTExODBDQTMwMjBGRDEyM0IKKzoxMDAxQjAwMDAxQzc1MDA3OTA3RkI0RTA0NDAxRjA5MDdGQjRFMDQ0NjEKKzowNjAxQzAwMDAyRjBDMjIwODBFNkZGCis6MDEwMUM2MDAyMjE2Cis6MTAxMTAwMDAxMjAxMTAwMTAwMDAwMDQwNkEwODAxMDEwMDAxMDEwMjAzCis6MTAxMTEwMDAwMDAxMDkwMjIwMDAwMTAxMDNBMDAwMDkwNDAwMDAwMkVGCis6MTAxMTIwMDBGRjAwMDAwNDA3MDU4MjAyNDAwMDAwMDcwNTAyMDI0MDlDCis6MTAxMTMwMDAwMDAwMDQwMzA5MDQyNjAzNDEwMDZFMDA2MzAwNjgwMEY4Cis6MTAxMTQwMDA2RjAwNzIwMDIwMDA0MzAwNjgwMDY5MDA3MDAwNzMwMEE3Cis6MTAxMTUwMDAyQzAwMjAwMDQ5MDA2RTAwNjMwMDJFMDAyODAzNDYwMDhBCis6MTAxMTYwMDA2OTAwNzIwMDZEMDA3NzAwNjEwMDcyMDA2NTAwMjAwMDY4Cis6MTAxMTcwMDA0NjAwNzIwMDYxMDA2RDAwNjUwMDU3MDA2RjAwNzIwMDRDCis6MTAxMTgwMDA2QjAwNzMwMDJBMDM0MzAwNkYwMDZFMDA2NjAwNjkwMDY1Cis6MTAxMTkwMDA2NzAwNzUwMDcyMDA2MTAwNzQwMDY5MDA2RjAwNkUwMEU2Cis6MTAxMUEwMDAyMDAwNTMwMDc0MDA3MjAwNjkwMDZFMDA2NzAwMjIwMzgzCis6MTAxMUIwMDA0OTAwNkUwMDc0MDA2NTAwNzIwMDY2MDA2MTAwNjMwMDAzCis6MTAxMUMwMDA2NTAwMjAwMDUzMDA3NDAwNzIwMDY5MDA2RTAwNjcwMDIzCis6MDIxMUQwMDAwMDAwMUQKKzoxMDAzMTMwMEU1MENGRkU1MEJGNTgyRTUwQUY1ODM3NTkyN0U3NEMwNjMKKzowODAzMjMwMEY4RTIwOEYwQTNERkZBMjI2MgorOjEwMDMyQjAwOTA3Rjk2ODU4MzkyQTg4Mjc5MDI5MDAwMDBFMEI0MDBCQQorOjEwMDMzQjAwMEQ3NDAxRjA5MDdGOTdFMDU0N0ZGMDQ0ODBGMEU1MEM1MgorOjEwMDM0QjAwRkY5MDdFQzBFMEY1MjhFNEEyNDczM0YyNjlGMkU0QTIwNQorOjEwMDM1QjAwNDYzM0YyNjlGMkU0QTI0NTMzRjI2OUYyRTRBMjQ0MzM4NAorOjEwMDM2QjAwRjI2OUYyRTRBMjQzMzNGMjY5RjJFNEEyNDIzM0YyNjk5NgorOjEwMDM3QjAwRjJFNEEyNDEzM0YyNjlGMkU0QTI0MDMzRjI2OUYyQTM1MAorOjAzMDM4QjAwREZDMjIyQUMKKzowMzAwNDMwMDAyMDQwMEI0Cis6MTAwNDAwMDAwMjAzQTkwMDAyMDNDMTAwMDIwMzhFMDAwMjA0NTgwMDg3Cis6MTAwNDEwMDAwMjAzRDcwMDAyMDNGRTAwMDIwM0ZGMDAwMjA0ODQwMDZGCis6MTAwNDIwMDAwMjA0ODUwMDAyMDQ4NjAwMDIwNDg3MDAwMjA0ODgwMDlBCis6MTAwNDMwMDAwMjA0ODkwMDAyMDQ4QTAwMDIwNDhCMDAwMjA0OEMwMDdBCis6MTAwNDQwMDAwMjA0OEQwMDAyMDQ4RTAwMDIwNDhGMDAwMjA0OTAwMDVBCis6MDgwNDUwMDAwMjA0OTEwMDAyMDQ5MjAwNzUKKzowMzAwMDAwMDAyMDI4NzcyCis6MEMwMjg3MDA3ODdGRTRGNkQ4RkQ3NTgxMjkwMjAyQ0VENAorOjEwMDNFRDAwRUI5RkY1RjBFQTlFNDJGMEU5OUQ0MkYwRTg5QzQ1RjA2NgorOjAxMDNGRDAwMjJERAorOjEwMDI5MzAwMDIwMTAwRTQ5M0EzRjhFNDkzQTM0MDAzRjY4MDAxRjI4MAorOjEwMDJBMzAwMDhERkY0ODAyOUU0OTNBM0Y4NTQwNzI0MENDOEMzMzM2QworOjEwMDJCMzAwQzQ1NDBGNDQyMEM4ODM0MDA0RjQ1NjgwMDE0NkY2REYzQgorOjEwMDJDMzAwRTQ4MDBCMDEwMjA0MDgxMDIwNDA4MDkwMDQ2RUU0N0U1OQorOjEwMDJEMzAwMDE5MzYwQkNBM0ZGNTQzRjMwRTUwOTU0MUZGRUU0OTMzMAorOjEwMDJFMzAwQTM2MDAxMEVDRjU0QzAyNUUwNjBBODQwQjhFNDkzQTNGNworOjEwMDJGMzAwRkFFNDkzQTNGOEU0OTNBM0M4QzU4MkM4Q0FDNTgzQ0EyMgorOjEwMDMwMzAwRjBBM0M4QzU4MkM4Q0FDNTgzQ0FERkU5REVFNzgwQkVEOQorOjAxMDQ4MzAwMDA3OAorOjAwMDAwMDAxRkYKKy8qCitWRVJTSU9OPTEuMC4yLjAwMgorREFURT0xMC4wMS4yMDAyCitFTUkyNl82MgorKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvZW1pNjJfZndfcy5oIGIvZHJpdmVycy91c2IvbWlzYy9lbWk2Ml9md19zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VmMDVlOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pNjJfZndfcy5oCkBAIC0wLDAgKzEsODgzNyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgZnJvbSB0aHJlZSBkaWZmZXJlbnQgZmlsZXMsIHByb3ZpZGVkIGJ5IEVtYWdpYy4KKyAqLworLyogZ2VuZXJhdGVkIFR1ZSBBcHIgMTUgMjE6NTk6NDIgRUVTVCAyMDAzICovCisKK3N0YXRpYyBJTlRFTF9IRVhfUkVDT1JEIGdfZW1pNjJic1tdPXsKKyB7MTYsIDB4ODAxMCwgMCwgezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhhYSwweDk5LDB4NTUsMHg2NiwweDMwLDB4MDAsMHg4MCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDcgfX0sCisgezE2LCAweDgwMjAsIDAsIHsweDMwLDB4MDEsMHg2MCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MGQsMHgzMCwweDAxLDB4MjAsMHgwMSwweDAwLDB4ODAsMHgzZiwweDJkIH19LAorIHsxNiwgMHg4MDMwLCAwLCB7MHgzMCwweDAwLDB4YzAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDgwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwOSB9fSwKKyB7MTYsIDB4ODA0MCwgMCwgezB4MzAsMHgwMCwweDIwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHg4MCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDEgfX0sCisgezE2LCAweDgwNTAsIDAsIHsweDMwLDB4MDAsMHg0MCwweDAwLDB4NTAsMHgwMCwweDU4LDB4MWEsMHg4MCwweDEyLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MDYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODA3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgwODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4NDAsMHgwNCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MDkwLCAwLCB7MHgwMCwweDEyLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODBhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgwYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDQ4IH19LAorIHsxNiwgMHg4MGMwLCAwLCB7MHgwNCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODBkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgwZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MGYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODEwMCwgMCwgezB4MDAsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgxMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODEzMCwgMCwgezB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgxNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgxNzAsIDAsIHsweDgwLDB4MTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODE5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgxYTAsIDAsIHsweDAwLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODFjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgxZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNCwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MWUwLCAwLCB7MHg3ZiwweDEwLDB4MDAsMHgzNCwweDAwLDB4MGQsMHgwMCwweDAzLDB4NDAsMHgwMCwweGQwLDB4MDAsMHgzNCwweDAwLDB4MDUsMHgwMCB9fSwKKyB7MTYsIDB4ODFmMCwgMCwgezB4MDcsMHg0MCwweDAxLDB4ZDAsMHgwMCwweDc0LDB4MDAsMHgxZCwweDAwLDB4MDcsMHg0MCwweDAxLDB4ZDAsMHgwMCwweDc0LDB4MDAgfX0sCisgezE2LCAweDgyMDAsIDAsIHsweDFkLDB4ODAsMHgwNywweGUwLDB4MDEsMHhiOCwweDAwLDB4NmUsMHgwMCwweDFiLDB4ODAsMHgwNiwweGUwLDB4MDEsMHgzOCwweDM3IH19LAorIHsxNiwgMHg4MjEwLCAwLCB7MHhjNCwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMSwweGZjLDB4ODAsMHhmYiwweDMwLDB4MzYsMHhjOCB9fSwKKyB7MTYsIDB4ODIyMCwgMCwgezB4NGUsMHgwOSwweDAzLDB4ZmMsMHg4NCwweGZmLDB4MTAsMHgzYiwweGMwLDB4MGUsMHhjOCwweDA3LDB4MjIsMHg4MCwweGZmLDB4MjIgfX0sCisgezE2LCAweDgyMzAsIDAsIHsweDMzLDB4YzAsMHgwZiwweGM4LDB4MzMsMHg2ZSwweDAwLDB4ZmIsMHg4MCwweDNmLDB4MjAsMHgwZCwweGMyLDB4NTMsMHhkNCwweDgwIH19LAorIHsxNiwgMHg4MjQwLCAwLCB7MHhjYywweDNhLDB4M2YsMHgwMCwweDBjLDB4ZjEsMHgwMywweGYwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODI1MCwgMCwgezB4ODAsMHgwMCwweGVkLDB4NjAsMHhiZiwweDYwLDB4MjMsMHhmMCwweDBkLDB4ODIsMHgxMiwweDNjLDB4NjAsMHg4ZiwweDcwLDB4MjMgfX0sCisgezE2LCAweDgyNjAsIDAsIHsweGYwLDB4MDgsMHg4OCwweDAyLDB4YTUsMHg0MCwweGJmLDB4ZDAsMHg2MywweGQ2LDB4MGIsMHg4OCwweDAyLDB4MmUsMHgwYywweGJiIH19LAorIHsxNiwgMHg4MjcwLCAwLCB7MHg4MCwweDJlLDB4MjAsMHg4OCwweDhkLDB4MDIsMHhlNiwweDQwLDB4ODAsMHg2MCwweDJlLDB4MzAsMHgwYSwweGIxLDB4MTIsMHgyMCB9fSwKKyB7MTYsIDB4ODI4MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDgwLDB4YTMsMHg0MCwweDJjLDB4YzQgfX0sCisgezE2LCAweDgyOTAsIDAsIHsweDRhLDB4MDAsMHgxMiwweDhjLDB4ODgsMHhhMywweDIyLDB4MjAsMHhjNCwweDBhLDB4OTAsMHg0MiwweDA0LDB4YTksMHhhMywweDAwIH19LAorIHsxNiwgMHg4MmEwLCAwLCB7MHgyNCwweGM4LDB4OGIsMHg4MCwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyZSwweDAxLDB4MDksMHgwOCwweDAyLDB4ODQsMHgwMCB9fSwKKyB7MTYsIDB4ODJiMCwgMCwgezB4ODAsMHgyMCwweDJjLDB4MTAsMHgwYSwweDMyLDB4NDIsMHgyMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgyYzAsIDAsIHsweGMwLDB4MTUsMHhhYywweDA0LDB4YjMsMHgwMCwweDJhLDB4YzAsMHgwOCwweDA4LDB4YTIsMHg4YywweDAwLDB4OGIsMHgwMCwweGEyIH19LAorIHsxNiwgMHg4MmQwLCAwLCB7MHhjMSwweDEwLDB4OTgsMHg0MiwweGE3LDB4MDAsMHhiYiwweDAxLDB4NjYsMHhjMSwweDBiLDB4ODAsMHgwMiwweGFjLDB4MDQsMHhiYiB9fSwKKyB7MTYsIDB4ODJlMCwgMCwgezB4MDAsMHgyZSwweDAwLDB4MGIsMHhiOCwweDEyLDB4ZTQsMHgwMiwweDg5LDB4MDgsMHgwZSwweDQwLDB4MGEsMHhiMCwweDAyLDB4MzAgfX0sCisgezE2LCAweDgyZjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4YWMsMHgwMCwweGViLDB4MDAsMHgzZSwweGMwIH19LAorIHsxNiwgMHg4MzAwLCAwLCB7MHg0YSwweGI4LDB4MjMsMHhlYywweDE4LDB4ZWIsMHgwMCwweDMyLDB4YzAsMHgwZSwweDJjLDB4MTIsMHgyMiwweDEwLDB4ZWIsMHgwMCB9fSwKKyB7MTYsIDB4ODMxMCwgMCwgezB4MjYsMHhjMCwweDRmLDB4MDAsMHg0MywweGVkLDB4MDAsMHhmYiwweDAwLDB4MmUsMHgyNCwweDBkLDB4ODAsMHgxMywweGU0LDB4MDAgfX0sCisgezE2LCAweDgzMjAsIDAsIHsweGM4LDB4ZDAsMHg3YywweDEyLDB4MGUsMHhiMCwweDAzLDB4NDAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MzMwLCAwLCB7MHhlMSwweDAwLDB4YmMsMHgwMCwweGZmLDB4MDAsMHgzNSwweGMwLDB4NGYsMHhlMCwweDAzLDB4N2MsMHgwOCwweGZmLDB4MDEsMHgxNyB9fSwKKyB7MTYsIDB4ODM0MCwgMCwgezB4YzIsMHg0ZCwweGMwLDB4MDMsMHhmNCwweDA4LDB4ZjcsMHgwMCwweDNiLDB4YzAsMHgwNywweGMwLDB4MDMsMHg3YywweDgwLDB4ZmYgfX0sCisgezE2LCAweDgzNTAsIDAsIHsweDI0LDB4M2YsMHg0MCwweDBjLDB4ZjAsMHgwMSwweGY0LDB4MDQsMHhiYywweDA4LDB4M2YsMHgyOCwweDBmLDB4ZjAsMHgwMywweDc4IH19LAorIHsxNiwgMHg4MzYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDgsMHhmYiwweDA0LDB4M2EsMHhjOCB9fSwKKyB7MTYsIDB4ODM3MCwgMCwgezB4MGYsMHg5NCwweDAzLDB4ZWMsMHgxMCwweGYzLDB4MDAsMHgzNCwweGMwLDB4MGUsMHhiMCwweDAzLDB4NjEsMHgwNCwweGZiLDB4MDAgfX0sCisgezE2LCAweDgzODAsIDAsIHsweDM2LDB4YzAsMHgwZSwweGEzLDB4MDMsMHgyYywweDgwLDB4ZmIsMHg3MiwweDNlLDB4MDIsMHgwZiwweDhhLDB4MDMsMHhlNCwweDAyIH19LAorIHsxNiwgMHg4MzkwLCAwLCB7MHhjOSwweDgwLDB4MmEsMHg1MCwweDBmLDB4YjAsMHgwMywweGQwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODNhMCwgMCwgezB4Y2EsMHg0NCwweDNjLDB4MDAsMHhiZiwweDAwLDB4MDMsMHhjMCwweDA4LDB4ODAsMHgwMywweDdjLDB4MDAsMHhiZiwweDAwLDB4M2YgfX0sCisgezE2LCAweDgzYjAsIDAsIHsweGUyLDB4MDgsMHg5MCwweDQzLDB4NjAsMHgwMCwweGJmLDB4MDAsMHgzNywweGMwLDB4MDgsMHg5MCwweDAxLDB4NmQsMHgwMCwweGJiIH19LAorIHsxNiwgMHg4M2MwLCAwLCB7MHg0MCwweDJjLDB4MTAsMHgwYiwweGIwLDB4NDIsMHhkNywweGMwLDB4ODksMHgwMCwweDJhLDB4N2MsMHgwYiwweGYwLDB4MDIsMHhmMiB9fSwKKyB7MTYsIDB4ODNkMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUyLDB4MDUsMHg0YywweDAwLDB4YjMsMHgwMCwweDIwLDB4ZDUgfX0sCisgezE2LCAweDgzZTAsIDAsIHsweDRhLDB4MDAsMHgwMCwweDBjLDB4MDQsMHg5MywweDAwLDB4MGMsMHhmMCwweDBiLDB4MDksMHgwMiwweDA4LDB4MDEsMHhiMywweDIwIH19LAorIHsxNiwgMHg4M2YwLCAwLCB7MHgyOCwweGMwLDB4MGEsMHgwYywweDBhLDB4MGUsMHgwMCwweGIzLDB4MDAsMHgyNCwweDMwLDB4MDksMHgwMCwweDAyLDB4YzYsMHgxMCB9fSwKKyB7MTYsIDB4ODQwMCwgMCwgezB4ODAsMHg0MiwweDIwLDB4MDAsMHg4YiwweGIwLDB4MDIsMHhmOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg0MTAsIDAsIHsweDIyLDB4MDEsMHgxZSwweDAwLDB4YjcsMHg5NCwweDIxLDB4ZTQsMHg0OCwweGQ5LDB4MTIsMHg1ZSwweDQwLDB4YjcsMHg5MCwweDI5IH19LAorIHsxNiwgMHg4NDIwLCAwLCB7MHhlMCwweDhiLDB4NjksMHgxMiwweGQ2LDB4ODAsMHgzNywweDgyLDB4MmMsMHhlOCwweDA4LDB4NGEsMHgwMiwweDVlLDB4MDAsMHhiNyB9fSwKKyB7MTYsIDB4ODQzMCwgMCwgezB4YTQsMHgyZCwweDIwLDB4MGIsMHg3OSwweDAyLDB4ZDYsMHgwOCwweDg2LDB4OTAsMHgyOSwweGEwLDB4MGIsMHg3OSwweDAyLDB4ZDggfX0sCisgezE2LCAweDg0NDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4MGMsMHgwMCwweGZiLDB4YTAsMHgyOCwweGU4IH19LAorIHsxNiwgMHg4NDUwLCAwLCB7MHgwZSwweDJhLDB4MDIsMHg4YywweDAwLDB4ZDMsMHgwMCwweDY0LDB4YzAsMHgwZiwweDAwLDB4NDMsMHgwZSwweGM0LDB4ZjMsMHgwMCB9fSwKKyB7MTYsIDB4ODQ2MCwgMCwgezB4NzgsMHhlYywweDBlLDB4MGEsMHg0MywweDBlLDB4MjAsMHg3MywweGUwLDB4M2MsMHgwMiwweDRmLDB4MDAsMHgwMywweGM0LDB4NDAgfX0sCisgezE2LCAweDg0NzAsIDAsIHsweGMzLDB4MDAsMHgzOCwweGMwLDB4MGYsMHgzMCwweDAzLDB4ZDIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NDgwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwMCwweGZmLDB4MDAsMHhiYywweGNjLDB4MGUsMHhiMCwweDAzLDB4ZWMsMHgyMCwweGZiLDB4MDAsMHgzYyB9fSwKKyB7MTYsIDB4ODQ5MCwgMCwgezB4YzIsMHgwYywweDIwLDB4MDMsMHg2YywweDUwLDB4ZjMsMHgwMCwweDM2LDB4YzQsMHgwZiwweDQwLDB4MDMsMHhmYywweDA4LDB4ZmYgfX0sCisgezE2LCAweDg0YTAsIDAsIHsweDFhLDB4M2YsMHg4MCwweDBmLDB4ZjAsMHgwMSwweGU0LDB4MzAsMHhmZiwweDAyLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHg2MywweGQwIH19LAorIHsxNiwgMHg4NGIwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGVjLDB4NDAsMHhmYiwweDAwLDB4YjIsMHhkOCB9fSwKKyB7MTYsIDB4ODRjMCwgMCwgezB4MGMsMHhiMCwweDAxLDB4MmQsMHgyMCwweGRiLDB4MDEsMHgzYSwweGM4LDB4OGMsMHgzOCwweDAzLDB4YTgsMHgwMCwweGZiLDB4NDggfX0sCisgezE2LCAweDg0ZDAsIDAsIHsweDNlLDB4YzksMHgwZiwweDgwLDB4MDMsMHhlYywweDQwLDB4ZmIsMHgwMSwweDNlLDB4MDAsMHgwZiwweDA4LDB4MDMsMHhhNCwweDA4IH19LAorIHsxNiwgMHg4NGUwLCAwLCB7MHhmYSwweDgwLDB4YjIsMHg4MCwweDBmLDB4YjEsMHgwMiwweDZhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODRmMCwgMCwgezB4NDgsMHgxOSwweDFjLDB4ODAsMHhiZiwweDMwLDB4MjEsMHhjYSwweDA4LDB4ZjAsMHgwYSwweDBjLDB4ODAsMHg4ZiwweDUwLDB4MjEgfX0sCisgezE2LCAweDg1MDAsIDAsIHsweGMyLDB4MDgsMHg3MCwweDUwLDB4OWMsMHgwMCwweGI3LDB4MDAsMHgzOSwweGM0LDB4MGIsMHg0MCwweDAyLDB4OWMsMHgwNCwweGI3IH19LAorIHsxNiwgMHg4NTEwLCAwLCB7MHgyMCwweDI1LDB4NDAsMHgwYiwweDcwLDB4MDIsMHgxNCwweDgwLDB4YjYsMHgwMCwweDIxLDB4ODAsMHgwYiwweGY4LDB4MDIsMHgxMiB9fSwKKyB7MTYsIDB4ODUyMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4YjcsMHhiMCwweDIxLDB4ZWMgfX0sCisgezE2LCAweDg1MzAsIDAsIHsweDBiLDB4NzgsMHgxMiwweGRlLDB4ODQsMHg5NywweDgwLDB4MGQsMHhlMCwweDI4LDB4ZjgsMHgwMiwweGRlLDB4MDAsMHhiNywweDkwIH19LAorIHsxNiwgMHg4NTQwLCAwLCB7MHgyZCwweGU0LDB4MGIsMHg2OCwweDgyLDB4NWUsMHg4MCwweGI3LDB4YTAsMHgyOSwweDIwLDB4MGIsMHg0OCwweDAyLDB4OTYsMHgwMCB9fSwKKyB7MTYsIDB4ODU1MCwgMCwgezB4YjcsMHg4MCwweDIxLDB4ZTEsMHgwYiwweDdhLDB4MDIsMHg3MCwweDQwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg1NjAsIDAsIHsweDQ4LDB4MDQsMHhjYywweDAwLDB4YjMsMHgwMCwweDIwLDB4YzAsMHgwYiwweDM4LDB4MDIsMHg4YywweDA0LDB4ODMsMHgwMCwweDI4IH19LAorIHsxNiwgMHg4NTcwLCAwLCB7MHhjMCwweDg4LDB4MzksMHgwMiwweDRjLDB4NDAsMHhiMywweDA0LDB4MjgsMHhjMCwweDFiLDB4MTAsMHgwMiwweDhjLDB4MDEsMHhiMyB9fSwKKyB7MTYsIDB4ODU4MCwgMCwgezB4MDQsMHgyNCwweDg4LDB4NGIsMHgzMSwweDAyLDB4MDQsMHgwMCwweGIzLDB4ODAsMHgyMCwweGYyLDB4MGIsMHgzMCwweDAyLDB4MDIgfX0sCisgezE2LCAweDg1OTAsIDAsIHsweDI0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDA1LDB4YTgsMHgwMCwweGZhLDB4MDAsMHgzMiwweDgwIH19LAorIHsxNiwgMHg4NWEwLCAwLCB7MHgwZiwweGU4LDB4MDMsMHhlOCwweDAwLDB4ZGEsMHgwMSwweDNhLDB4ODAsMHg4YywweGVkLDB4MDMsMHhmYiwweDA0LDB4ZmEsMHgwMCB9fSwKKyB7MTYsIDB4ODViMCwgMCwgezB4M2UsMHg4MCwweDBmLDB4NmMsMHgwMywweGZiLDB4YzgsMHhiZSwweGMyLDB4MWYsMHg4MCwweDBmLDB4ZTUsMHgwMywweGE4LDB4MDAgfX0sCisgezE2LCAweDg1YzAsIDAsIHsweGZlLDB4NDgsMHgzMywweDgwLDB4NGYsMHhhMCwweDAzLDB4N2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NWQwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzYywweDAwLDB4MGMsMHg4MSwweDkzLDB4NjAsMHgwMCwweGY4LDB4MDEsMHgzNiB9fSwKKyB7MTYsIDB4ODVlMCwgMCwgezB4MTAsMHgwZiwweDgwLDB4MDMsMHhhMCwweDIwLDB4ZjgsMHgwMCwweDJhLDB4MDEsMHg4ZiwweDg0LDB4MTMsMHhlMSwweDAwLDB4ZjggfX0sCisgezE2LCAweDg1ZjAsIDAsIHsweDE4LDB4MzYsMHgwMCwweDBmLDB4ODAsMHgxMywweGUwLDB4MDAsMHhmOCwweDIwLDB4M2UsMHgxNCwweDBmLDB4ODAsMHgwMywweGQyIH19LAorIHsxNiwgMHg4NjAwLCAwLCB7MHg4MCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGU0LDB4MDAsMHhmMSwweDAwLDB4YWEsMHg0MCB9fSwKKyB7MTYsIDB4ODYxMCwgMCwgezB4MGMsMHg5MCwweDAzLDB4MjQsMHgwMCwweGUxLDB4MDAsMHgzOCwweDQwLDB4MWMsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4YTAgfX0sCisgezE2LCAweDg2MjAsIDAsIHsweDNhLDB4NDAsMHg0NywweDlhLDB4OTMsMHhhMiwweDgwLDB4ZjgsMHgxMCwweDNlLDB4NDAsMHgwYiwweDk0LDB4MDMsMHhlNiwweDQwIH19LAorIHsxNiwgMHg4NjMwLCAwLCB7MHhmOSwweGMwLDB4M2UsMHg2OCwweDBiLDB4MTAsMHgwMywweDAyLDB4ODQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODY0MCwgMCwgezB4ODAsMHgwNCwweGU0LDB4MDQsMHhiOSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDQsMHg4OSwweDAwLDB4MzYgfX0sCisgezE2LCAweDg2NTAsIDAsIHsweDQwLDB4MDgsMHg5MCwweDAyLDB4ZTQsMHgwNCwweGI5LDB4ODAsMHgyZSwweDQwLDB4NGYsMHg5NCwweDAzLDB4NjEsMHgxMCwweGU4IH19LAorIHsxNiwgMHg4NjYwLCAwLCB7MHg0MCwweDJlLDB4NDAsMHgwYiwweDkwLDB4NDIsMHhlNiwweDA0LDB4YjksMHgwMCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4ODY3MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDQsMHgyNCwweDAwLDB4YjksMHgwMCwweDIyLDB4NDAgfX0sCisgezE2LCAweDg2ODAsIDAsIHsweDBhLDB4MTAsMHg1MiwweDA0LDB4MDQsMHhhOSwweDA0LDB4MmEsMHg0MCwweDA4LDB4YjAsMHgwMiwweGU0LDB4MDEsMHhiOSwweDAwIH19LAorIHsxNiwgMHg4NjkwLCAwLCB7MHgyZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4YTgsMHgwZCwweGI4LDB4NDAsMHgyZSwweDQwLDB4MDksMHg5NCwweDAyLDB4ZTUsMHgwMCB9fSwKKyB7MTYsIDB4ODZhMCwgMCwgezB4YjksMHgwNCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg2YjAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4YjEsMHgyMCwweDIwLDB4YzgsMHgwYSwweDEwLDB4NDIsMHgwNCwweDkwLDB4ODEsMHgyMCwweDA0IH19LAorIHsxNiwgMHg4NmMwLCAwLCB7MHhjOCwweDA4LDB4MzAsMHgyNiwweGM0LDB4MDAsMHhiMSwweDIwLDB4MmMsMHg0OCwweDBiLDB4OTAsMHgwMiwweDQ1LDB4MDEsMHhiMSB9fSwKKyB7MTYsIDB4ODZkMCwgMCwgezB4NDAsMHgyYywweDQwLDB4MGIsMHgxMiwweDgyLDB4YzQsMHgwMCwweGIxLDB4MmIsMHgyYywweDRhLDB4MGIsMHgxMiwweDgyLDB4MDIgfX0sCisgezE2LCAweDg2ZTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDA4LDB4MjEsMHg0OCwweGY4LDB4NTAsMHgzMiwweDAwIH19LAorIHsxNiwgMHg4NmYwLCAwLCB7MHg0ZSwweDg1LDB4MGIsMHgyMSwweDQwLDB4YTgsMHg1MiwweDJhLDB4MDAsMHgwOCwweDgwLDB4MjMsMHhlMSwweDQwLDB4ZjgsMHgwMCB9fSwKKyB7MTYsIDB4ODcwMCwgMCwgezB4M2EsMHgxNCwweDBmLDB4YTAsMHg0MywweGE4LDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODIsMHgwMywweGUwLDB4MDAgfX0sCisgezE2LCAweDg3MTAsIDAsIHsweGYwLDB4MjAsMHgzZSwweDg4LDB4NGYsMHg4MiwweDBiLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NzIwLCAwLCB7MHg5OCwweDE5LDB4ZTQsMHg0MCwweGY5LDB4MTEsMHgzNCwweDQ0LDB4MmQsMHhkMCwweDAzLDB4ZTQsMHg1MCwweDc5LDB4MTAsMHgzOCB9fSwKKyB7MTYsIDB4ODczMCwgMCwgezB4NDQsMHgyZiwweGQwLDB4MDMsMHhmNSwweDEwLDB4ZjksMHgxMCwweDNlLDB4NDUsMHgwNiwweDUwLDB4MDMsMHhlNSwweDAwLDB4ZTkgfX0sCisgezE2LCAweDg3NDAsIDAsIHsweDQwLDB4M2YsMHg0MCwweDBmLDB4ZDAsMHg0MywweGY1LDB4MDAsMHhmZCwweDI4LDB4M2YsMHg0MCwweDBmLDB4OTIsMHg4MywweGU2IH19LAorIHsxNiwgMHg4NzUwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMSwweGU2LDB4MDAsMHhkOSwweDkwLDB4MzcsMHg2OSB9fSwKKyB7MTYsIDB4ODc2MCwgMCwgezB4NGQsMHg5MCwweDIzLDB4NjcsMHg4MCwweGQ5LDB4ZTAsMHgzNywweDY4LDB4MGUsMHhkMCwweDA3LDB4YTQsMHgwMCwweDA1LDB4ODYgfX0sCisgezE2LCAweDg3NzAsIDAsIHsweDNlLDB4NjYsMHgwZCwweDUwLDB4MjMsMHgyNiwweDAwLDB4YzksMHg4MiwweDNkLDB4NDAsMHgwZCwweGQ4LDB4MDcsMHgzNiwweDAyIH19LAorIHsxNiwgMHg4NzgwLCAwLCB7MHhjZCwweGMwLDB4MzMsMHg2MCwweDBjLDB4OWMsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODc5MCwgMCwgezB4MzgsMHgxMCwweGUyLDB4ODAsMHg4OCwweGEyLDB4MjIsMHgxMCwweDI4LDB4OGEsMHg4MiwweDIzLDB4ODQsMHg4OCwweGEwLDB4MjIgfX0sCisgezE2LCAweDg3YTAsIDAsIHsweDE0LDB4NDgsMHg4MCwweDQyLDB4ODIsMHgwMCwweDg4LDB4NDAsMHgyZSwweDMwLDB4MDgsMHg4MCwweDAyLDB4YTIsMHgwMCwweGQ4IH19LAorIHsxNiwgMHg4N2IwLCAwLCB7MHg5MCwweDI2LDB4MDAsMHgwOCwweDg0LDB4MGEsMHgyMSwweDAwLDB4YzgsMHhhMCwweGEyLDB4MTQsMHgyOCwweDhjLDB4MDIsMHgwZSB9fSwKKyB7MTYsIDB4ODdjMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNSwweDIwLDB4OTEsMHg0MCwweDJjLDB4NDQgfX0sCisgezE2LCAweDg3ZDAsIDAsIHsweDE4LDB4MTAsMHgwMiwweDg1LDB4MDQsMHhiMSwweDQwLDB4MGMsMHg0MCwweDBhLDB4MTAsMHgwNiwweDg0LDB4MzAsMHg4MSwweDQwIH19LAorIHsxNiwgMHg4N2UwLCAwLCB7MHgyYywweDQ4LDB4NTksMHgxMCwweDFhLDB4MDQsMHg2MCwweDgxLDB4MDksMHgyZSwweDQwLDB4MWIsMHgxNCwweDAyLDB4MjUsMHgwMCB9fSwKKyB7MTYsIDB4ODdmMCwgMCwgezB4OTEsMHhlMCwweDIwLDB4NjAsMHgwOCwweDE2LDB4MDIsMHgwMCwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg4MDAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAwLDB4ODEsMHgwMCwweDJhLDB4NDEsMHgwOCwweDkwLDB4MDIsMHhhNCwweDAwLDB4YTEsMHgwMCwweDJhIH19LAorIHsxNiwgMHg4ODEwLCAwLCB7MHg0MSwweDA4LDB4YjAsMHg4MiwweDI0LDB4MTEsMHg4YiwweDAwLDB4MmUsMHg0MCwweDE4LDB4OTEsMHgwMiwweGEwLDB4MDQsMHg5OCB9fSwKKyB7MTYsIDB4ODgyMCwgMCwgezB4MjAsMHgyZSwweDU0LDB4MWIsMHg5MCwweDgyLDB4MmMsMHgwMCwweDg5LDB4MTAsMHgyMiwweDQ0LDB4ODgsMHg5MCwweDAyLDB4MDYgfX0sCisgezE2LCAweDg4MzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGQ5LDB4MDAsMHgzZSwweDQwIH19LAorIHsxNiwgMHg4ODQwLCAwLCB7MHg0YywweDkwLDB4MDMsMHhhNCwweDEwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHg4ZSwweDEwLDB4MDIsMHhhNCwweGMyLDB4YzksMHgwMCB9fSwKKyB7MTYsIDB4ODg1MCwgMCwgezB4M2UsMHg0MCwweDBkLDB4MTYsMHgxMywweDAxLDB4ODQsMHhjOCwweDIwLDB4M2MsMHg2MCwweDBmLDB4OTAsMHgxMiwweDA0LDB4MDAgfX0sCisgezE2LCAweDg4NjAsIDAsIHsweGQ5LDB4NDAsMHgzMiwweDUwLDB4MGMsMHg5MCwweDAzLDB4MjgsMHg4NCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ODcwLCAwLCB7MHgyOCwweDAxLDB4ODQsMHgwMCwweGY5LDB4MDAsMHgzNiwweDQwLDB4NGYsMHg5OSwweDRhLDB4NDQsMHgwMCwweDk5LDB4MDAsMHhiNCB9fSwKKyB7MTYsIDB4ODg4MCwgMCwgezB4NDAsMHgwZiwweDkwLDB4MTMsMHhlNiwweDAwLDB4ZjksMHgwMCwweDNjLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlMywweDAwLDB4ZjggfX0sCisgezE2LCAweDg4OTAsIDAsIHsweDAxLDB4MzYsMHg0MCwweDBjLDB4OTksMHgwMywweGU0LDB4MDIsMHhmOSwweDgwLDB4M2UsMHg2MCwweDRmLDB4OTAsMHgwYiwweGNhIH19LAorIHsxNiwgMHg4OGEwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDAsMHhkOCwweDAwLDB4M2MsMHgwMCB9fSwKKyB7MTYsIDB4ODhiMCwgMCwgezB4MWQsMHg4MCwweDAzLDB4MjAsMHgwMCwweGU4LDB4MDAsMHgzMiwweDAwLDB4MGMsMHg4NCwweDgzLDB4ZTAsMHgxMCwweGU4LDB4MjAgfX0sCisgezE2LCAweDg4YzAsIDAsIHsweDMyLDB4MDAsMHg4ZSwweDg0LDB4MDMsMHgyMSwweDgwLDB4YzgsMHgwMCwweDNhLDB4MTksMHgwZiwweDA0LDB4MDMsMHhlMCwweDI0IH19LAorIHsxNiwgMHg4OGQwLCAwLCB7MHhmMCwweDAyLDB4M2MsMHgwMCwweDBmLDB4ODAsMHgxMywweDhhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODhlMCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDIsMHg4YSwweDAxLDB4MGYsMHhhMiwweDY4LDB4YTAsMHgwMCwweDI4LDB4MDAsMHg4YSwweDAwLDB4NzcgfX0sCisgezE2LCAweDg4ZjAsIDAsIHsweDgwLDB4NjgsMHhlMCwweDEyLDB4ZTgsMHgwMCwweGRlLDB4MDAsMHgzNiwweDgxLDB4MDgsMHhlMCwweDAzLDB4N2EsMHgwOCwweGFlIH19LAorIHsxNiwgMHg4OTAwLCAwLCB7MHhjNCwweDJmLDB4ODAsMHgwOCwweGVkLDB4MDIsMHhmYSwweDAwLDB4YmUsMHhhMCwweDNiLDB4ODAsMHgwYiwweGEwLDB4NDIsMHgwYSB9fSwKKyB7MTYsIDB4ODkxMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4ODUsMHg0YywweDAwLDB4OTMsMHgwMCwweDJjLDB4YzAgfX0sCisgezE2LCAweDg5MjAsIDAsIHsweDg4LDB4YjAsMHgwMiwweDBjLDB4MTQsMHhhMywweDA0LDB4MjAsMHhjNCwweDE4LDB4MzgsMHgwMiwweGVjLDB4MTAsMHg5MywweDU0IH19LAorIHsxNiwgMHg4OTMwLCAwLCB7MHgyOCwweGMwLDB4MGEsMHgwMCwweDAyLDB4NGUsMHgwMCwweDgzLDB4NDksMHg2OCwweGMwLDB4MDIsMHgzOSwweDQyLDB4Y2UsMHg0MCB9fSwKKyB7MTYsIDB4ODk0MCwgMCwgezB4YjMsMHgwMCwweDJjLDB4ZTYsMHgwYiwweGIwLDB4MDIsMHg4YiwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg5NTAsIDAsIHsweDIwLDB4MDEsMHgxYywweDA4LDB4ODcsMHgyMCwweDJjLDB4ODAsMHgxOCwweGYyLDB4MjIsMHgxYywweDAwLDB4ODcsMHgxMCwweDIxIH19LAorIHsxNiwgMHg4OTYwLCAwLCB7MHhjMCwweDA4LDB4NzAsMHg4MiwweGRjLDB4ODAsMHg5NiwweDgwLDB4MmQsMHhjMCwweDBhLDB4NDAsMHgwMiwweDdkLDB4NDAsMHgyNyB9fSwKKyB7MTYsIDB4ODk3MCwgMCwgezB4NjQsMHg2ZCwweGQwLDB4NDgsMHg2MCwweDQyLDB4ZDgsMHgwNSwweGI2LDB4MDQsMHgyOSwweGMwLDB4NGIsMHg3MiwweDAyLDB4MjggfX0sCisgezE2LCAweDg5ODAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA4LDB4M2UsMHg4OCwweGQ3LDB4ZTAsMHgzZCwweGUwIH19LAorIHsxNiwgMHg4OTkwLCAwLCB7MHgwOCwweDdjLDB4NDIsMHgzZSwweDAwLDB4ZTMsMHg4MiwweDIwLDB4ZTAsMHgwYywweDY4LDB4MDMsMHhkZiwweDA0LDB4ZDcsMHg4MCB9fSwKKyB7MTYsIDB4ODlhMCwgMCwgezB4M2IsMHhlMCwweDRlLDB4NDgsMHgwYSwweDVlLDB4ODAsMHhjNywweGMyLDB4MTksMHhlMCwweDBlLDB4NzgsMHgwMywweGQ2LDB4MDggfX0sCisgezE2LCAweDg5YjAsIDAsIHsweGY3LDB4ODAsMHgzZCwweGUwLDB4MGYsMHhmOCwweDAzLDB4YWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4OWMwLCAwLCB7MHgwOCwweDFkLDB4YWMsMHg0MCwweGZiLDB4NDAsMHg3ZSwweDgwLDB4MGUsMHgzNiwweDgzLDB4ZWQsMHg0MCwweGRiLDB4NjAsMHgzZSB9fSwKKyB7MTYsIDB4ODlkMCwgMCwgezB4ODAsMHgwZiwweGEwLDB4MDMsMHhlZCwweDI4LDB4ZGEsMHgwMCwweDMyLDB4YzQsMHgwYywweGIwLDB4MGIsMHhjYywweDAwLDB4ZmIgfX0sCisgezE2LCAweDg5ZTAsIDAsIHsweDAwLDB4M2UsMHhjMCwweDBlLDB4ODAsMHgxMywweGUwLDB4MTAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4YjEsMHg1MywweGMyIH19LAorIHsxNiwgMHg4OWYwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNSwweGZlLDB4MDAsMHhmZiwweGMwLDB4MzMsMHhlMCB9fSwKKyB7MTYsIDB4OGEwMCwgMCwgezB4MGMsMHhmOSwweDAzLDB4N2YsMHgwNCwweGNmLDB4ZDAsMHgzZiwweGU0LDB4MGYsMHhiOCwweDAzLDB4ZmUsMHgwMCwweGZmLDB4OTQgfX0sCisgezE2LCAweDhhMTAsIDAsIHsweDNmLDB4ZTAsMHgwZiwweGM4LDB4MDMsMHg3ZSwweDEwLDB4ZjMsMHg4MCwweDNiLDB4ZTAsMHgwZiwweGY4LDB4MDMsMHhmZSwweDQ4IH19LAorIHsxNiwgMHg4YTIwLCAwLCB7MHhlZCwweDgwLDB4MzMsMHgyNCwweDA0LDB4ZjgsMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGEzMCwgMCwgezB4YTgsMHgxMSwweDljLDB4ODAsMHhiZiwweDA0LDB4MjEsMHgyOCwweDA4LDB4ZjgsMHgwMiwweDFlLDB4YzAsMHhjZiwweDkwLDB4MjEgfX0sCisgezE2LCAweDhhNDAsIDAsIHsweDRjLDB4MGIsMHg1YSwweDQyLDB4ZGUsMHgwMCwweGI3LDB4ODAsMHgyYywweGU4LDB4MGIsMHgwNCwweDAyLDB4MWMsMHgwMCwweGI3IH19LAorIHsxNiwgMHg4YTUwLCAwLCB7MHhhMCwweDM1LDB4MTAsMHg4ZiwweDcxLDB4MTMsMHhkZSwweGMwLDB4ODQsMHgxMCwweDIxLDB4ODAsMHgwZCwweDcxLDB4MDIsMHgyYSB9fSwKKyB7MTYsIDB4OGE2MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4NDAsMHg5YywweDA4LDB4YjcsMHgwMCwweDI1LDB4YzggfX0sCisgezE2LCAweDhhNzAsIDAsIHsweDA4LDB4NzEsMHgwMiwweGNjLDB4ODAsMHg5NywweDAwLDB4MjksMHhjMCwweDhiLDB4NzIsMHgwNiwweGRjLDB4MDgsMHhiNSwweDAwIH19LAorIHsxNiwgMHg4YTgwLCAwLCB7MHgyZCwweGM4LDB4MGIsMHg0MCwweDAyLDB4MWMsMHg0MCwweGJmLDB4MTAsMHgyMSwweGMwLDB4MGIsMHg3NCwweDAyLDB4ZDQsMHg4MCB9fSwKKyB7MTYsIDB4OGE5MCwgMCwgezB4YTcsMHg0MCwweDIxLDB4NDEsMHgwOCwweDcwLDB4MDIsMHgwNCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhhYTAsIDAsIHsweDYwLDB4MTQsMHhjYywweDAwLDB4YjMsMHgwMCwweDI0LDB4MDAsMHgwOCwweDM0LDB4ODIsMHhhYywweDExLDB4ODMsMHgwMCwweDIwIH19LAorIHsxNiwgMHg4YWIwLCAwLCB7MHgwMCwweDRiLDB4MTgsMHgyNiwweGNmLDB4MjAsMHhiMSwweDA2LDB4MmMsMHhjMSwweDBiLDB4MzIsMHgwMiwweDBlLDB4MDgsMHhiMyB9fSwKKyB7MTYsIDB4OGFjMCwgMCwgezB4ODgsMHgyNCwweDMyLDB4MGEsMHgzMCwweDEyLDB4ODQsMHgwOCwweDgwLDB4MDAsMHhhMCwweDM0LDB4MjgsMHgzMCwweDAyLDB4MTggfX0sCisgezE2LCAweDhhZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4YmMsMHgwMCwweGZmLDB4MDAsMHhiNiwweDQwIH19LAorIHsxNiwgMHg4YWUwLCAwLCB7MHgyYywweGY0LDB4NDMsMHhmYywweDAxLDB4ZGYsMHgwMCwweDNhLDB4MDAsMHgwMywweDkyLDB4MDMsMHhmZiwweDg4LDB4ZjksMHgwMCB9fSwKKyB7MTYsIDB4OGFmMCwgMCwgezB4MmYsMHhjMCwweDFiLDB4MGUsMHg0YiwweDJlLDB4OTAsMHhmYiwweGUwLDB4MzAsMHgzMiwweDBiLDB4OTgsMHgwMiwweGVjLDB4MDggfX0sCisgezE2LCAweDhiMDAsIDAsIHsweDZiLDB4YzAsMHgzMiwweGMwLDB4MDgsMHhmMCwweDA5LDB4M2UsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4YjEwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGYzLDB4MDAsMHgzYSwweGMwLDB4MGYsMHhiMCwweDAxLDB4NmMsMHgwMCwweGZiLDB4MDAsMHgzYSB9fSwKKyB7MTYsIDB4OGIyMCwgMCwgezB4MTAsMHgwZiwweGI0LDB4MDMsMHhlYywweDAwLDB4ZjAsMHgwMCwweDNjLDB4YzAsMHgwZiwweDgwLDB4MGIsMHhhZCwweDIwLDB4ZmIgfX0sCisgezE2LCAweDhiMzAsIDAsIHsweDQwLDB4M2UsMHgxMCwweDA3LDB4YTgsMHg2MywweGUwLDB4MDAsMHhmYiwweDgwLDB4M2UsMHhkOCwweDBmLDB4YjAsMHgwMywweGUwIH19LAorIHsxNiwgMHg4YjQwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGZjLDB4MDAsMHhmZiwweDAwLDB4NzIsMHgwMCB9fSwKKyB7MTYsIDB4OGI1MCwgMCwgezB4MGYsMHhmMCwweDIzLDB4ZmMsMHgwMCwweGRmLDB4MDAsMHgzZiwweDQwLDB4MGYsMHhjMCwweDAzLDB4ZGMsMHgwMCwweDhmLDB4MDAgfX0sCisgezE2LCAweDhiNjAsIDAsIHsweDMzLDB4YzEsMHgwYywweGMwLDB4MDMsMHhiZSwweDAwLDB4ZmYsMHg5MCwweDNiLDB4MjgsMHgwZSwweDU5LDB4MDMsMHgyZSwweDAwIH19LAorIHsxNiwgMHg4YjcwLCAwLCB7MHg3YiwweDAwLDB4MzIsMHhjNCwweDBmLDB4YjAsMHgwMywweGQwLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGI4MCwgMCwgezB4YzEsMHgwNCwweDZjLDB4MDAsMHhiYiwweDAwLDB4NjIsMHhhMCwweDBmLDB4YjAsMHgwMiwweGVjLDB4MDksMHg4YiwweDAwLDB4MmUgfX0sCisgezE2LCAweDhiOTAsIDAsIHsweDMwLDB4MGIsMHhhOCwweDAzLDB4YWMsMHgwMCwweGZhLDB4YzEsMHgyMiwweGMxLDB4MDgsMHg4YywweDAyLDB4MmMsMHgwMCwweGIzIH19LAorIHsxNiwgMHg4YmEwLCAwLCB7MHg4MSwweDJhLDB4MDAsMHgwZCwweDg4LDB4YjIsMHgyMiwweDAwLDB4YjMsMHhjMCwweDIyLDB4YzgsMHgwYiwweGIwLDB4NDIsMHg2MSB9fSwKKyB7MTYsIDB4OGJiMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHg2YywweDAwLDB4YmIsMHgwMSwweDIyLDB4NjIgfX0sCisgezE2LCAweDhiYzAsIDAsIHsweDBiLDB4YjAsMHgwMiwweGVjLDB4MDQsMHg4YiwweDAwLDB4MmUsMHhhMiwweDQ5LDB4ODgsMHgyNiwweGVjLDB4MDAsMHhhOCwweDgwIH19LAorIHsxNiwgMHg4YmQwLCAwLCB7MHgyMiwweGMwLDB4MjgsMHg4MiwweDBhLDB4YWMsMHhhMCwweGJiLDB4MDgsMHgyMiwweGMwLDB4MDgsMHg4MCwweDBhLDB4MjgsMHg4NCB9fSwKKyB7MTYsIDB4OGJlMCwgMCwgezB4YjksMHhjMCwweGEyLDB4MDAsMHgwYiwweGIwLDB4MDIsMHhlMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhiZjAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAwLDB4YjMsMHgxMCwweDIwLDB4NDgsMHgwYSwweDMyLDB4MDIsMHhjYywweDgwLDB4ODMsMHgwMSwweDI0IH19LAorIHsxNiwgMHg4YzAwLCAwLCB7MHgwMCwweDBiLDB4MDIsMHgwNiwweDhjLDB4NjAsMHhhMCwweDIwLDB4MjAsMHhjOCwweDA4LDB4MDEsMHgwMiwweDBjLDB4MDAsMHhiMyB9fSwKKyB7MTYsIDB4OGMxMCwgMCwgezB4MDAsMHgyOCwweDAwLDB4MDksMHgyMCwweDAyLDB4MDgsMHg4MCwweGIxLDB4MDAsMHhhMCwweDgwLDB4MGIsMHgzMCwweDAyLDB4NDIgfX0sCisgezE2LCAweDhjMjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA5LDB4NmMsMHgwMCwweGZmLDB4MDAsMHhhMiwweDBlIH19LAorIHsxNiwgMHg4YzMwLCAwLCB7MHgwYiwweGYxLDB4MDMsMHhmYywweDA4LDB4Y2YsMHgyMCwweDNlLDB4YzAsMHgwZiwweDgwLDB4MDMsMHhmYywweDg0LDB4YTgsMHgyMCB9fSwKKyB7MTYsIDB4OGM0MCwgMCwgezB4YjIsMHhjOCwweDhjLDB4ODAsMHgwMywweGFjLDB4NDQsMHhmYiwweDcwLDB4M2EsMHhjMCwweDBlLDB4OTAsMHgwMywweDJjLDB4YTQgfX0sCisgezE2LCAweDhjNTAsIDAsIHsweGZiLDB4MDAsMHhiMiwweDQwLDB4MGYsMHhiMCwweDAzLDB4YzAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4YzYwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgwMCwweGZmLDB4MjYsMHgzZSwweDAwLDB4MGYsMHhiNiwweDEzLDB4ZWQsMHgwMCwweGZiLDB4MTAsMHgzZiB9fSwKKyB7MTYsIDB4OGM3MCwgMCwgezB4MDAsMHgwZiwweGMxLDB4MTMsMHhhYywweDgwLDB4ZjgsMHgxMiwweDNlLDB4YzYsMHg0ZiwweDQyLDB4NDMsMHhmYywweDA0LDB4ZmYgfX0sCisgezE2LCAweDhjODAsIDAsIHsweDMxLDB4M2YsMHgwMCwweDBmLDB4ZjAsMHgwMywweGVjLDB4MDAsMHhmZiwweDAwLDB4YmYsMHhjMCwweDhmLDB4ZjAsMHgwMywweGU4IH19LAorIHsxNiwgMHg4YzkwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMSwweGZjLDB4NDAsMHhmYywweDgwLDB4MzYsMHhjOCB9fSwKKyB7MTYsIDB4OGNhMCwgMCwgezB4MGYsMHgwOSwweDAzLDB4YzIsMHgwMCwweGY4LDB4YzAsMHgzMywweGNjLDB4MmMsMHg0YywweDAzLDB4NjMsMHg5MCwweGUwLDB4OTAgfX0sCisgezE2LCAweDhjYjAsIDAsIHsweDNhLDB4YzAsMHgwZCwweDUwLDB4MGIsMHgzYywweDA0LDB4ZGYsMHg2NCwweDNmLDB4YzgsMHg4ZCwweGYxLDB4NDMsMHgyYywweDAwIH19LAorIHsxNiwgMHg4Y2MwLCAwLCB7MHhkNSwweDAwLDB4MzMsMHhjMCwweDQ1LDB4ZjIsMHgyMywweDcwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGNkMCwgMCwgezB4ODAsMHgxMCwweGVkLDB4ODAsMHhiYSwweDAyLDB4MjEsMHhkZSwweDhiLDB4ODIsMHgyMiwweGUwLDB4MjAsMHhiMCwweDAwLDB4MmIgfX0sCisgezE2LCAweDhjZTAsIDAsIHsweGVjLDB4MDksMHg4MCwweDAyLDB4ZTMsMHg0MCwweGJhLDB4MjAsMHgyZiwweGRjLDB4MDgsMHg5OCwweDEyLDB4MmMsMHgwMCwweDhiIH19LAorIHsxNiwgMHg4Y2YwLCAwLCB7MHg1MSwweDJhLDB4ZDAsMHgwOCwweDcyLDB4MjIsMHgyZSwweDAwLDB4OGQsMHg4MCwweDIxLDB4ZDAsMHgwOCwweGI2LDB4ODIsMHgyMCB9fSwKKyB7MTYsIDB4OGQwMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDQwLDB4YjksMHgyOCwweDI0LDB4YzAgfX0sCisgezE2LCAweDhkMTAsIDAsIHsweDRhLDB4MTIsMHgxMiwweDg4LDB4ODUsMHhhOCwweDIwLDB4MjAsMHhjMCwweDBiLDB4MjIsMHgwMiwweGMwLDB4OTEsMHhhMSwweDAwIH19LAorIHsxNiwgMHg4ZDIwLCAwLCB7MHgyOCwweGMyLDB4MGIsMHgwMCwweDEyLDB4OGMsMHg0MCwweGEzLDB4MjAsMHgyMCwweGM0LDB4MGIsMHgzMCwweDBhLDB4MGMsMHgxMSB9fSwKKyB7MTYsIDB4OGQzMCwgMCwgezB4OTksMHgwMCwweDIwLDB4YzUsMHgwOSwweDAxLDB4MDIsMHg2MiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhkNDAsIDAsIHsweGMwLDB4MTEsMHhhYywweDAwLDB4YjgsMHg4MCwweDIyLDB4YzAsMHgwYiwweDg4LDB4MDIsMHhlZSwweDAxLDB4YjgsMHhjMSwweDJhIH19LAorIHsxNiwgMHg4ZDUwLCAwLCB7MHhjMCwweDFiLDB4YTgsMHgwNiwweGUyLDB4MDAsMHhiYiwweDgwLDB4MmUsMHhjMCwweDhhLDB4ODAsMHgwMiwweGFjLDB4MDAsMHhhYiB9fSwKKyB7MTYsIDB4OGQ2MCwgMCwgezB4MDAsMHgyZSwweGMwLDB4MGEsMHhiMCwweDAyLDB4MmMsMHgwMCwweDk5LDB4MDAsMHgyNCwweGMwLDB4MDgsMHg4MCwweDAyLDB4MzAgfX0sCisgezE2LCAweDhkNzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWMsMHgwMCwweGIwLDB4ODAsMHgzNiwweGMwIH19LAorIHsxNiwgMHg4ZDgwLCAwLCB7MHgwZSwweGE4LDB4MTMsMHhlMiwweDg1LDB4ZjMsMHhjMCwweDMyLDB4YzAsMHgwZSwweDljLDB4MjMsMHhlNywweDI0LDB4ZTgsMHg4MiB9fSwKKyB7MTYsIDB4OGQ5MCwgMCwgezB4M2EsMHhjMSwweDBmLDB4OTQsMHgwMywweGFjLDB4MDIsMHhlYiwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweDJlLDB4MTAgfX0sCisgezE2LCAweDhkYTAsIDAsIHsweDUxLDB4MDAsMHhiMiwweGMwLDB4MGQsMHhiMCwweDAzLDB4NTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ZGIwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4OGYsMHhkMCwweDAzLDB4ZjAsMHgwNCwweGZkLDB4MDQsMHgzZiB9fSwKKyB7MTYsIDB4OGRjMCwgMCwgezB4YzAsMHg0YywweGMwLDB4MDMsMHhmMCwweDEwLDB4ZmMsMHgwMCwweDFmLDB4YzAsMHgwZCwweGQxLDB4MjMsMHgxYywweDAwLDB4YzcgfX0sCisgezE2LCAweDhkZDAsIDAsIHsweDAwLDB4MzksMHhjMCwweDBkLDB4ZjAsMHg4MywweGZlLDB4NDQsMHhlZCwweDAwLDB4M2IsMHhjMCwweDBmLDB4NzQsMHgwMywweGY4IH19LAorIHsxNiwgMHg4ZGUwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDAsMHhmOSwweDAxLDB4YmEsMHhjMSB9fSwKKyB7MTYsIDB4OGRmMCwgMCwgezB4MGMsMHhiMCwweDAzLDB4YTEsMHgwOCwweGZhLDB4MDAsMHgzMCwweGM4LDB4OGYsMHg5NCwweDAzLDB4MjUsMHgwMCwweGY5LDB4MDAgfX0sCisgezE2LCAweDhlMDAsIDAsIHsweDNjLDB4YzAsMHgwZiwweDA0LDB4ODMsMHhlYywweDAwLDB4ZmIsMHgwMCwweDNlLDB4ZTAsMHgwZiwweDcxLDB4MGIsMHgyYywweDQwIH19LAorIHsxNiwgMHg4ZTEwLCAwLCB7MHhmZCwweDA4LDB4MzcsMHhjMCwweDRlLDB4OTEsMHgwMywweDkwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGUyMCwgMCwgezB4YzgsMHgwNSwweDNjLDB4MDAsMHhiOSwweDAwLDB4MjMsMHhjMCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDAsMHhjOCwweDAwLDB4MzcgfX0sCisgezE2LCAweDhlMzAsIDAsIHsweGYwLDB4MGIsMHg4MCwweDAxLDB4NjQsMHgwMCwweDQ5LDB4MDIsMHgzMywweGMwLDB4ODQsMHg5YywweDAzLDB4M2MsMHgwMCwweGJmIH19LAorIHsxNiwgMHg4ZTQwLCAwLCB7MHgwMiwweDBmLDB4ZDAsMHgwOCwweGY0LDB4MDIsMHgwZSwweDEwLDB4YmQsMHg4MCwweDMzLDB4ZTAsMHgwOCwweDkwLDB4MGEsMHgzMiB9fSwKKyB7MTYsIDB4OGU1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4YjAsMHgwNiwweDIwLDB4YzAgfX0sCisgezE2LCAweDhlNjAsIDAsIHsweDA4LDB4MDAsMHg0MiwweDg0LDB4MDAsMHhhMCwweDAwLDB4MjAsMHhmMCwweDBiLDB4MDAsMHgyMiwweGNjLDB4MDAsMHg5MCwweDAwIH19LAorIHsxNiwgMHg4ZTcwLCAwLCB7MHgyOCwweGMwLDB4MDIsMHgzZCwweDAyLDB4OGMsMHgwMCwweGIzLDB4MDAsMHgyYywweGMyLDB4OWEsMHgzOCwweDAyLDB4MDYsMHgwNCB9fSwKKyB7MTYsIDB4OGU4MCwgMCwgezB4YjEsMHgxMiwweDIwLDB4ZTAsMHgwOCwweDMwLDB4MDIsMHgzOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhlOTAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDAwLDB4YjYsMHg4MCwweDIxLDB4ZTAsMHgyOCwweGVhLDB4MDIsMHgzNiwweDgwLDB4ODYsMHg5MCwweDY1IH19LAorIHsxNiwgMHg4ZWEwLCAwLCB7MHhlMCwweDFiLDB4ZGEsMHgwNiwweDVlLDB4MDEsMHg5ZSwweDg0LDB4MjUsMHhlYywweDBhLDB4NzgsMHgwMiwweDVlLDB4MDAsMHhiNyB9fSwKKyB7MTYsIDB4OGViMCwgMCwgezB4ODAsMHgyZCwweGUwLDB4MDgsMHg3OSwweDRhLDB4MTYsMHg0MCwweGJkLDB4ODAsMHgyNSwweGUwLDB4MDgsMHgzOCwweDAyLDB4MDggfX0sCisgezE2LCAweDhlYzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweGZiLDB4MDAsMHgyOCwweGUwIH19LAorIHsxNiwgMHg4ZWQwLCAwLCB7MHgwOCwweDE4LDB4MDIsMHg4YSwweDg4LDB4YTEsMHhhMCwweDIwLDB4YzIsMHgxZiwweDJhLDB4MjMsMHhlNiwweGM4LDB4ZjAsMHhjMCB9fSwKKyB7MTYsIDB4OGVlMCwgMCwgezB4M2EsMHhlZCwweDRlLDB4MzQsMHgwMiwweDhjLDB4MDgsMHhmMywweDgxLDB4MWUsMHhjMCwweDBlLDB4MzAsMHgwMywweDBlLDB4YzAgfX0sCisgezE2LCAweDhlZjAsIDAsIHsweGYxLDB4MDAsMHhiMCwweGNhLDB4MGUsMHgyMSwweDAzLDB4OTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ZjAwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwOCwweGZlLDB4MTAsMHgzZiwweGQyLDB4MGYsMHhlMCwweDAzLDB4ZWMsMHgwNCwweGZmLDB4MTQsMHg3ZSB9fSwKKyB7MTYsIDB4OGYxMCwgMCwgezB4YzAsMHgwZiwweGIxLDB4MjMsMHhmYywweDAxLDB4ZWUsMHgwMCwweDNhLDB4YzQsMHgwZCwweGIwLDB4MTMsMHhiYywweDAwLDB4ZmYgfX0sCisgezE2LCAweDhmMjAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDBlLDB4ZjAsMHg4MywweGZjLDB4MGMsMHhmZCwweDEwLDB4M2IsMHhjMCwweDJmLDB4ZTEsMHgwMywweGQwIH19LAorIHsxNiwgMHg4ZjMwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVjLDB4NDAsMHhmMCwweDgwLDB4MzIsMHhkMCB9fSwKKyB7MTYsIDB4OGY0MCwgMCwgezB4MGMsMHhhMCwweDAzLDB4NmMsMHgwMCwweGYzLDB4ODAsMHgzMiwweGRhLDB4MGYsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDAgfX0sCisgezE2LCAweDhmNTAsIDAsIHsweDNlLDB4Y2MsMHg0YywweDk4LDB4MTMsMHgyYywweDEwLDB4ZmIsMHgwNCwweDNlLDB4YzQsMHgwYywweGYyLDB4ODMsMHhhNiwweDEwIH19LAorIHsxNiwgMHg4ZjYwLCAwLCB7MHhkZCwweDIwLDB4M2YsMHhkMSwweDBjLDB4YjAsMHgwMywweGVhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGY3MCwgMCwgezB4NDgsMHgxMSwweDljLDB4ODAsMHhiNywweDAwLDB4MjEsMHhjOCwweDBjLDB4NzAsMHgwMiwweGRjLDB4MDgsMHhiNywweDAwLDB4MjEgfX0sCisgezE2LCAweDhmODAsIDAsIHsweGM4LDB4MGUsMHg3MCwweDIyLDB4ZDgsMHgwMCwweGI3LDB4MDAsMHgyYywweGMyLDB4MGEsMHg3MCwweDBhLDB4MWYsMHgwOCwweGI3IH19LAorIHsxNiwgMHg4ZjkwLCAwLCB7MHgwMCwweDM5LDB4YzgsMHgwYSwweDcwLDB4MDIsMHgxNCwweDAwLDB4YzUsMHg2OSwweDJjLDB4Y2EsMHgyYSwweDcwLDB4MDIsMHhkMiB9fSwKKyB7MTYsIDB4OGZhMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4YmYsMHg4MSwweDY0LDB4ZTEgfX0sCisgezE2LCAweDhmYjAsIDAsIHsweDA4LDB4NzgsMHgwMiwweDVhLDB4MDEsMHhiZiwweDgwLDB4MjEsMHhlYywweDRiLDB4NzgsMHg0NiwweDlmLDB4MDgsMHgzNywweDgwIH19LAorIHsxNiwgMHg4ZmMwLCAwLCB7MHgyZCwweGU4LDB4ODgsMHgxOCwweDAyLDB4MWUsMHg4MSwweGI3LDB4YjAsMHgyZCwweGUwLDB4MDksMHg3YSwweDAyLDB4OGUsMHgwMCB9fSwKKyB7MTYsIDB4OGZkMCwgMCwgezB4OTUsMHhhMCwweDJkLDB4ZTQsMHgwOCwweDc4LDB4MDIsMHhmMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhmZTAsIDAsIHsweDQ4LDB4MTQsMHhlYywweDAwLDB4YjMsMHg2MCwweDIwLDB4YzAsMHgwOCwweGI2LDB4MDIsMHhjYywweDAwLDB4YjMsMHgwMSwweDIwIH19LAorIHsxNiwgMHg4ZmYwLCAwLCB7MHhjMCwweDhhLDB4YjAsMHg4NiwweGNmLDB4MDAsMHhiYiwweDEwLDB4NmMsMHhjMSwweDBhLDB4MzgsMHgwMiwweDBjLDB4MDEsMHhiMyB9fSwKKyB7MTYsIDB4OTAwMCwgMCwgezB4MDIsMHgyOCwweGMwLDB4MGIsMHhiMCwweDBhLDB4MGMsMHgwMCwweDgxLDB4MDAsMHgyZSwweGMwLDB4MGEsMHhiNCwweDgyLDB4ZDIgfX0sCisgezE2LCAweDkwMTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweGZlLDB4NDAsMHhiNiwweDgwIH19LAorIHsxNiwgMHg5MDIwLCAwLCB7MHgwYywweGU0LDB4MDMsMHg3OCwweDgwLDB4ZmUsMHg3NCwweDMyLDB4ODAsMHgwYiwweGU2LDB4MDMsMHhmOSwweDAwLDB4ZmUsMHgwMCB9fSwKKyB7MTYsIDB4OTAzMCwgMCwgezB4M2UsMHg4MCwweDBjLDB4ZTAsMHgwMywweDI4LDB4MDAsMHhmYSwweDAwLDB4M2UsMHg4MCwweDRkLDB4YTAsMHgwMywweGE4LDB4MDAgfX0sCisgezE2LCAweDkwNDAsIDAsIHsweGRhLDB4MDQsMHgzZSwweDgwLDB4MGMsMHhlNCwweDAzLDB4ZmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MDUwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MmUsMHg4MCwweDIzLDB4ZTAsMHgwMCwweGY4LDB4MDEsMHgzYyB9fSwKKyB7MTYsIDB4OTA2MCwgMCwgezB4MDAsMHgwZSwweDgwLDB4MDMsMHhlMCwweDIwLDB4ZjgsMHgyMCwweDNlLDB4MDEsMHg4ZiwweDg5LDB4MDMsMHhlMCwweDAwLDB4ZjggfX0sCisgezE2LCAweDkwNzAsIDAsIHsweDAwLDB4M2EsMHgxMCwweDBlLDB4ODAsMHgwMSwweGUwLDB4MDAsMHhlOCwweDQwLDB4N2UsMHgwMCwweDRmLDB4ODAsMHgwMywweGQyIH19LAorIHsxNiwgMHg5MDgwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDIsMHhjOSwweDAxLDB4N2UsMHg0MCB9fSwKKyB7MTYsIDB4OTA5MCwgMCwgezB4MmMsMHg5MCwweDBiLDB4MjQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDY4LDB4MDUsMHg5MCwweDEzLDB4YTQsMHgwNCwweGQ5LDB4MDAgfX0sCisgezE2LCAweDkwYTAsIDAsIHsweDMyLDB4NDEsMHgwZSwweDkxLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NjAsMHgwZSwweDkwLDB4MDMsMHgyNCwweDAwIH19LAorIHsxNiwgMHg5MGIwLCAwLCB7MHhmMSwweDAwLDB4MzIsMHg0MCwweDY4LDB4OTAsMHg0MywweDgyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTBjMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHg4OSwweDAwLDB4NmUsMHg0MCwweDA4LDB4OTAsMHg0MiwweDI0LDB4MDAsMHhiOSwweDAwLDB4MmUgfX0sCisgezE2LCAweDkwZDAsIDAsIHsweDcwLDB4ODgsMHg5MCwweDAzLDB4MjQsMHgwMCwweGI5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHg5OCwweDEyLDB4ZTQsMHgwMCwweGI5IH19LAorIHsxNiwgMHg5MGUwLCAwLCB7MHgwMCwweDJlLDB4NDAsMHgwYSwweDkwLDB4MGEsMHgyNiwweDAwLDB4YjksMHg4MCwweGEyLDB4NDAsMHgwOCwweDkwLDB4MTIsMHgyMCB9fSwKKyB7MTYsIDB4OTBmMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4ODksMHgwNCwweDJjLDB4NDAgfX0sCisgezE2LCAweDkxMDAsIDAsIHsweDA4LDB4OTAsMHgwMiwweDI0LDB4MDEsMHhiOSwweDAwLDB4MmEsMHg0MCwweDBiLDB4YjAsMHgwMiwweGE0LDB4MDEsMHhiOSwweDAwIH19LAorIHsxNiwgMHg5MTEwLCAwLCB7MHhlMCwweDQwLDB4MGEsMHg5MCwweDgyLDB4YTQsMHgwMCwweGI5LDB4MDAsMHgyYywweDQ4LDB4MGEsMHg5OCwweDAyLDB4MjQsMHg4MCB9fSwKKyB7MTYsIDB4OTEyMCwgMCwgezB4MzksMHgyMCwweDIyLDB4NDAsMHgyYSwweDkwLDB4MDIsMHg4NiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkxMzAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4ODEsMHgwMCwweDJjLDB4NDgsMHgwOCwweDEwLDB4MTIsMHgwNCwweDEwLDB4YjEsMHgwNCwweDJjIH19LAorIHsxNiwgMHg5MTQwLCAwLCB7MHhkOCwweDBhLDB4MTAsMHgwMiwweDA0LDB4MDAsMHhiMSwweDAwLDB4MjAsMHg0OCwweDA4LDB4MTAsMHgwMiwweGM0LDB4ODAsMHhiMSB9fSwKKyB7MTYsIDB4OTE1MCwgMCwgezB4MjIsMHgyYywweDUwLDB4OGEsMHgzMiwweDgyLDB4MDUsMHhhMCwweGIxLDB4MmEsMHgyMCwweDRhLDB4MGEsMHgxMiwweDgyLDB4MDIgfX0sCisgezE2LCAweDkxNjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg1MCwweGM4LDB4NTIsMHgyZSwweDE0IH19LAorIHsxNiwgMHg5MTcwLCAwLCB7MHgwYywweDg1LDB4MDMsMHgyMSwweDQwLDB4ZjgsMHg1MCwweDNhLDB4MDAsMHgxZiwweDg1LDB4MDMsMHhhMSwweDQwLDB4ZjgsMHg1MCB9fSwKKyB7MTYsIDB4OTE4MCwgMCwgezB4MzIsMHgxNCwweDBlLDB4ODAsMHgwMywweGExLDB4NDAsMHhmOCwweDUwLDB4M2MsMHg4MCwweDBlLDB4MDIsMHgwMywweDIwLDB4ODAgfX0sCisgezE2LCAweDkxOTAsIDAsIHsweGZhLDB4MjAsMHgzMiwweDA4LDB4MGUsMHg4MiwweDEzLDB4YWUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MWEwLCAwLCB7MHg5OCwweDFkLDB4ZTQsMHg1MCwweGZkLDB4MDAsMHgzZSwweDQ0LDB4MGYsMHhkMCwweDAzLDB4ZjQsMHgwMCwweGZkLDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4OTFiMCwgMCwgezB4NDQsMHg4ZCwweGQwLDB4MDEsMHhiZCwweDAwLDB4ZmQsMHgwMiwweDNlLDB4NDQsMHgwZiwweGQ0LDB4MDAsMHhlNCwweDQ4LDB4NzkgfX0sCisgezE2LCAweDkxYzAsIDAsIHsweDE0LDB4M2UsMHg1MCwweDBmLDB4OTIsMHhhMiwweGY0LDB4MDgsMHhmZCwweDAwLDB4M2UsMHg0YSwweDBkLDB4ZDIsMHg4MywweGU2IH19LAorIHsxNiwgMHg5MWQwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGU3LDB4MDAsMHhmOSwweDEwLDB4M2EsMHg2ZSB9fSwKKyB7MTYsIDB4OTFlMCwgMCwgezB4MGMsMHhiMSwweDAzLDB4ZTQsMHg0MCwweGY5LDB4NDQsMHgzYiwweDYxLDB4OGUsMHg5NCwweDAzLDB4ZTQsMHgwMCwweGU5LDB4NDAgfX0sCisgezE2LCAweDkxZjAsIDAsIHsweDMyLDB4NjYsMHgwZiwweGRhLDB4MGIsMHhhNywweDI4LDB4YzksMHhlMCwweDNmLDB4NjgsMHgwYywweGRhLDB4ODMsMHhiMywweDIwIH19LAorIHsxNiwgMHg5MjAwLCAwLCB7MHhlZCwweGEwLDB4MzMsMHg3OSwweDA4LDB4ZDgsMHgwMywweDQ2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTIxMCwgMCwgezB4MzgsMHgxMCwweGUyLDB4MDAsMHhiOCwweGEwLDB4MmUsMHgzOCwweDA4LDB4OGEsMHgwMiwweGUyLDB4ODgsMHhlOCwweDgxLDB4MmUgfX0sCisgezE2LCAweDkyMjAsIDAsIHsweDE0LDB4MDksMHgwYSwweDAzLDB4ZTIsMHg4MCwweGI4LDB4ODAsMHgzMiwweDMwLDB4MGIsMHg4NSwweDAyLDB4MjEsMHgwMSwweGE4IH19LAorIHsxNiwgMHg5MjMwLCAwLCB7MHhmNCwweDM4LDB4MmEsMHgwOCwweDBlLDB4Y2EsMHgyMywweDkwLDB4YzgsMHg1NCwweDM0LDB4MzgsMHgwOCwweDhhLDB4OTIsMHgwZSB9fSwKKyB7MTYsIDB4OTI0MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNSwweDAwLDB4YjEsMHgwMCwweDI4LDB4NDAgfX0sCisgezE2LCAweDkyNTAsIDAsIHsweDE5LDB4MTAsMHgwMiwweGM0LDB4MDAsMHhiMSwweDIwLDB4MjgsMHg0MCwweDBiLDB4MTAsMHgwNiwweGM0LDB4MjAsMHhhMSwweGEyIH19LAorIHsxNiwgMHg5MjYwLCAwLCB7MHg2YywweDQ4LDB4MGIsMHgxMCwweDAyLDB4ODQsMHgwOCwweDgxLDB4MjAsMHgyYywweDUwLDB4MDksMHgxMCwweDAyLDB4YzQsMHgwNCB9fSwKKyB7MTYsIDB4OTI3MCwgMCwgezB4YjEsMHgwMCwweDI0LDB4NTgsMHgwOCwweDNjLDB4MDIsMHg0MiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkyODAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAxLDB4YjksMHgyMCwweDJjLDB4NDAsMHgwOSwweDkwLDB4MDIsMHhlNCwweDEwLDB4YTksMHg0MCwweDJlIH19LAorIHsxNiwgMHg5MjkwLCAwLCB7MHg0MCwweDBiLDB4OTAsMHgwMiwweGE0LDB4MDAsMHhiMSwweDAxLDB4MmEsMHg0MCwweDBiLDB4OTQsMHgwMiwweDI0LDB4MDAsMHhhOSB9fSwKKyB7MTYsIDB4OTJhMCwgMCwgezB4MDAsMHgyYSwweDQwLDB4MDEsMHgxMCwweDUyLDB4NjQsMHgwMCwweDg5LDB4MDAsMHgyNiwweDQwLDB4MDAsMHg5OCwweDAyLDB4NDYgfX0sCisgezE2LCAweDkyYjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGY5LDB4NjEsMHgzYSwweDQwIH19LAorIHsxNiwgMHg5MmMwLCAwLCB7MHgwZCwweDkwLDB4ODMsMHhlNSwweDIwLDB4ZjksMHgwMSwweDNhLDB4NDAsMHgyZSwweDkwLDB4MDIsMHhlNCwweDQwLDB4ZTksMHgwMSB9fSwKKyB7MTYsIDB4OTJkMCwgMCwgezB4OWUsMHg0MCwweDBmLDB4OTQsMHgwMywweGE0LDB4MDAsMHg4OSwweDAwLDB4M2UsMHg0MCwweDJkLDB4OTAsMHgwMiwweGU2LDB4MDggfX0sCisgezE2LCAweDkyZTAsIDAsIHsweGI5LDB4MDEsMHgzNiwweDQwLDB4MmMsMHg5MCwweDAxLDB4NjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MmYwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MmUsMHg5MCwweDAzLDB4ZTQsMHg4MCwweGY5LDB4MDAsMHgzYyB9fSwKKyB7MTYsIDB4OTMwMCwgMCwgezB4NDAsMHgwYywweDljLDB4MjMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDM2LDB4NDAsMHgwZiwweDEwLDB4NDMsMHg4NCwweDAwLDB4ZjkgfX0sCisgezE2LCAweDkzMTAsIDAsIHsweDAyLDB4M2UsMHg0MCwweDBlLDB4OTAsMHgwMywweDgwLDB4ODAsMHhmOSwweDAwLDB4M2MsMHg0MCwweDJmLDB4OTAsMHgwMywweDhhIH19LAorIHsxNiwgMHg5MzIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDAsMHhjOCwweDQwLDB4MzYsMHgwMSB9fSwKKyB7MTYsIDB4OTMzMCwgMCwgezB4MGQsMHg4NCwweDAzLDB4ZTEsMHgwMCwweGU4LDB4NDAsMHgzZSwweDA4LDB4MGMsMHg4MCwweDAzLDB4ZTEsMHgwMCwweGY4LDB4MDAgfX0sCisgezE2LCAweDkzNDAsIDAsIHsweDMyLDB4MDAsMHg4ZiwweDgwLDB4MDMsMHhhMCwweDEwLDB4ZjgsMHgwMCwweDMyLDB4MDQsMHgwZSwweDgwLDB4ODMsMHg2MCwweDAwIH19LAorIHsxNiwgMHg5MzUwLCAwLCB7MHhmOCwweDAwLDB4M2UsMHgwMCwweDBjLDB4MDAsMHgwMywweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTM2MCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDAsMHg4YSwweDAxLDB4MjIsMHg4MCwweDA4LDB4YTAsMHgyNCwweGU4LDB4MDAsMHgwYSwweDAwLDB4MmYgfX0sCisgezE2LCAweDkzNzAsIDAsIHsweDgwLDB4MWEsMHhhMCwweDAyLDB4MjgsMHgwMCwweGJhLDB4MDAsMHgxNiwweDgwLDB4MGIsMHhlMCwweDAzLDB4MjgsMHgwOCwweGVhIH19LAorIHsxNiwgMHg5MzgwLCAwLCB7MHgwMCwweDMzLDB4OTAsMHgwOCwweGVjLDB4MWIsMHgyMiwweDgwLDB4YzYsMHgxNCwweDJmLDB4OTEsMHgwOCwweGEwLDB4NDMsMHg0YSB9fSwKKyB7MTYsIDB4OTM5MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4OTMsMHgwMCwweDI0LDB4YzAgfX0sCisgezE2LCAweDkzYTAsIDAsIHsweDA5LDB4MzAsMHgxMiwweGNjLDB4MDQsMHhhMywweDA0LDB4NmMsMHhjMCwweDA5LDB4MzAsMHgwMiwweDhjLDB4MDAsMHhiMywweDAwIH19LAorIHsxNiwgMHg5M2IwLCAwLCB7MHgyYywweGMwLDB4MTMsMHgzMCwweDAyLDB4OGMsMHgwMCwweGIzLDB4MDAsMHhlNiwweGI4LDB4MGEsMHgzOCwweDAyLDB4NDQsMHgwOCB9fSwKKyB7MTYsIDB4OTNjMCwgMCwgezB4ODIsMHg1MCwweDJjLDB4ZDIsMHgzYSwweDMwLDB4MDIsMHg4YSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkzZDAsIDAsIHsweGEwLDB4MDEsMHgwZSwweDgwLDB4OTcsMHhiNCwweDIxLDB4YzQsMHg0OSwweDcxLDB4MDIsMHhkZSwweDgxLDB4ODcsMHgyMSwweDJkIH19LAorIHsxNiwgMHg5M2UwLCAwLCB7MHhkMCwweDBiLDB4N2IsMHgwMiwweDFjLDB4MDEsMHhiZiwweDIwLDB4MjksMHhjNCwweDBiLDB4MzAsMHgwMiwweDVjLDB4MDAsMHhhNyB9fSwKKyB7MTYsIDB4OTNmMCwgMCwgezB4YTEsMHgyMSwweGMwLDB4NGEsMHg3MCwweDhhLDB4MGMsMHg4MSwweDg0LDB4MDAsMHgyZCwweGQwLDB4MGEsMHg1MCwweDAyLDB4ZTggfX0sCisgezE2LCAweDk0MDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHg4MiwweGRmLDB4YTAsMHgzNCwweGVjIH19LAorIHsxNiwgMHg5NDEwLCAwLCB7MHgwZCwweDc5LDB4MDIsMHhmZSwweDgwLDB4ZTcsMHhlOCwweDJmLDB4YTAsMHgwOSwweDdhLDB4MDIsMHg5ZSwweDAwLDB4ZjcsMHhhMiB9fSwKKyB7MTYsIDB4OTQyMCwgMCwgezB4MjUsMHhlYSwweDBiLDB4NDgsMHgwMywweDllLDB4MDQsMHhmZiwweGMwLDB4NjUsMHhlNCwweDBlLDB4NjgsMHgwMywweDVmLDB4MDAgfX0sCisgezE2LCAweDk0MzAsIDAsIHsweGU0LDB4ODAsMHgzZCwweGUwLDB4MGUsMHhmOCwweDAzLDB4YWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NDQwLCAwLCB7MHgwOCwweDFkLDB4YWMsMHg0OCwweGViLDB4MDUsMHgzZSwweGQ5LDB4MGUsMHhiMiwweDAzLDB4ZWMsMHgwMCwweGZiLDB4NjAsMHgzZSB9fSwKKyB7MTYsIDB4OTQ1MCwgMCwgezB4YzAsMHgwZSwweGIyLDB4ODMsMHhhYywweDAwLDB4ZjMsMHg1MCwweGE2LDB4YzAsMHg0ZiwweGIwLDB4MDMsMHhhYywweDAwLDB4ZmIgfX0sCisgezE2LCAweDk0NjAsIDAsIHsweDgwLDB4M2YsMHhkOCwweDBkLDB4YTAsMHgwMywweGVjLDB4MGEsMHhmOSwweDAwLDB4M2UsMHhjMCwweDBkLDB4OTAsMHgwMywweDQyIH19LAorIHsxNiwgMHg5NDcwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGZlLDB4MDAsMHhiYiwweDkwLDB4M2UsMHhlMCB9fSwKKyB7MTYsIDB4OTQ4MCwgMCwgezB4MDgsMHgzOSwweDAzLDB4OWUsMHgyMCwweGNmLDB4ODIsMHg3NywweGUwLDB4MWYsMHhmOCwweDAzLDB4ZWUsMHgwMCwweGZmLDB4YzAgfX0sCisgezE2LCAweDk0OTAsIDAsIHsweDNmLDB4ZTUsMHgwZCwweGY5LDB4MDMsMHhlZSwweDAwLDB4ZmIsMHg5MCwweDM3LDB4YTAsMHgwOCwweGY4LDB4MGYsMHgxZSwweDAwIH19LAorIHsxNiwgMHg5NGEwLCAwLCB7MHhjYywweDk0LDB4MzMsMHg2MCwweDBkLDB4ZjgsMHgwMywweGMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTRiMCwgMCwgezB4YTgsMHgxMSwweDljLDB4MDAsMHhiNywweDkwLDB4MmYsMHhlNCwweDA4LDB4N2EsMHgwMiwweDFlLDB4MDAsMHg4ZiwweDEyLDB4MjUgfX0sCisgezE2LCAweDk0YzAsIDAsIHsweGQ4LDB4MGIsMHhiYiwweDAyLDB4MWUsMHgwMCwweGI3LDB4MDAsMHgyZCwweGU4LDB4MDgsMHg3ZCwweDgyLDB4ZGUsMHg0MCwweGJiIH19LAorIHsxNiwgMHg5NGQwLCAwLCB7MHhhMCwweDI3LDB4OTAsMHgwYSwweDc2LDB4MDIsMHg1YywweDgwLDB4ODUsMHgwMCwweDM3LDB4YzQsMHg0ZCwweDcxLDB4MDMsMHhlYSB9fSwKKyB7MTYsIDB4OTRlMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4YjcsMHgyMCwweDJkLDB4YzAgfX0sCisgezE2LCAweDk0ZjAsIDAsIHsweDI5LDB4ZjIsMHgyMiwweGJjLDB4ODAsMHg5NywweDAwLDB4MjUsMHg0MSwweDBiLDB4NzAsMHgxMiwweDljLDB4MDAsMHhiNywweDA4IH19LAorIHsxNiwgMHg5NTAwLCAwLCB7MHgyOSwweGMwLDB4MDgsMHg0MiwweDEyLDB4ZGMsMHg0MCwweGI3LDB4MDAsMHgyOSwweGMwLDB4MDksMHg2MCwweDIyLDB4ZGMsMHgxMCB9fSwKKyB7MTYsIDB4OTUxMCwgMCwgezB4ODAsMHgwMCwweDIxLDB4NDAsMHgwOSwweDcwLDB4MDIsMHhjMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk1MjAsIDAsIHsweDIwLDB4MTQsMHhjYywweDAwLDB4YjMsMHhjMCwweDJlLDB4YzAsMHgwOCwweDM0LDB4ODIsMHgyZCwweDAwLDB4OTMsMHgwMCwweDI0IH19LAorIHsxNiwgMHg5NTMwLCAwLCB7MHhjMCwweDBiLDB4MzAsMHgwMiwweDBmLDB4ODAsMHgxMywweDAwLDB4MmMsMHhjMCwweDBhLDB4MzQsMHhhMiwweGVjLDB4MDAsMHhiMyB9fSwKKyB7MTYsIDB4OTU0MCwgMCwgezB4MDAsMHgyOCwweGMwLDB4MGIsMHgwMCwweDAyLDB4Y2MsMHgwMCwweDgxLDB4MDAsMHgyMCwweGMwLDB4MDksMHgzMCwweDAyLDB4ODkgfX0sCisgezE2LCAweDk1NTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4YmMsMHgwMCwweGZmLDB4ZTAsMHgzZiwweGMwIH19LAorIHsxNiwgMHg5NTYwLCAwLCB7MHgwYywweGY0LDB4ODMsMHhiZCwweDAwLDB4ZGYsMHgwOCwweDM2LDB4NDAsMHgwYiwweDc1LDB4NDIsMHhmYywweDIwLDB4ZmYsMHg4MCB9fSwKKyB7MTYsIDB4OTU3MCwgMCwgezB4M2IsMHhjMCwweDJjLDB4M2MsMHgwMywweGZjLDB4MDAsMHhiZiwweDAwLDB4YmUsMHhjMCwweDhkLDB4OTAsMHgwYiwweGFjLDB4MDIgfX0sCisgezE2LCAweDk1ODAsIDAsIHsweGNhLDB4MDAsMHgyMiwweDgwLDB4MGQsMHhiMCwweDAyLDB4ZWEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NTkwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGZiLDB4MDgsMHgxZSwweGMwLDB4MGYsMHhiMCwweDEzLDB4ZWMsMHgwMCwweGViLDB4MDAsMHgzYSB9fSwKKyB7MTYsIDB4OTVhMCwgMCwgezB4MTAsMHgwZiwweGIwLDB4MjMsMHhhYywweDAxLDB4ZmIsMHgwMCwweDNlLDB4YzAsMHgzYywweDg0LDB4MDMsMHhlYywweDAwLDB4ZmIgfX0sCisgezE2LCAweDk1YjAsIDAsIHsweDAwLDB4MjYsMHg0MCwweDBlLDB4OTQsMHgwYiwweDJjLDB4MDAsMHhmOSwweDQwLDB4M2UsMHg5MCwweDBlLDB4OTAsMHgxMywweGUwIH19LAorIHsxNiwgMHg5NWMwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGRjLDB4MDIsMHhjZiwweDAwLDB4M2YsMHhjMCB9fSwKKyB7MTYsIDB4OTVkMCwgMCwgezB4MGQsMHhmMCwweDBiLDB4M2MsMHgyMCwweGNmLDB4MDAsMHgzZCwweDAwLDB4MGUsMHhmMCwweDA3LDB4OWMsMHgwMSwweGNmLDB4MDIgfX0sCisgezE2LCAweDk1ZTAsIDAsIHsweDNlLDB4YzAsMHgwZiwweGM0LDB4MDMsMHgzYywweDAwLDB4Y2YsMHgwMCwweDBmLDB4YzAsMHgwZSwweDQ0LDB4MDMsMHgxZiwweDAyIH19LAorIHsxNiwgMHg5NWYwLCAwLCB7MHhjYywweDAwLDB4M2YsMHg4MCwweDJjLDB4NzAsMHgwMywweDAwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTYwMCwgMCwgezB4ODEsMHgwNCwweDZjLDB4MDAsMHg4YiwweDAyLDB4MmUsMHhjMCwweDBkLDB4YjAsMHgwMiwweDJjLDB4MDAsMHhhYiwweDAwLDB4MDYgfX0sCisgezE2LCAweDk2MTAsIDAsIHsweDIwLDB4MDgsMHhiMCwweDAzLDB4ZmMsMHgwMCwweGFiLDB4MDAsMHgyZSwweGMwLDB4MGYsMHg4MCwweDA2LDB4YmMsMHgwMCwweGFiIH19LAorIHsxNiwgMHg5NjIwLCAwLCB7MHgwNCwweDNhLDB4ZjAsMHgwYywweDg4LDB4MDIsMHgyYywweDAwLDB4YzksMHg4MCwweDNhLDB4OTIsMHgwOCwweDkwLDB4MGEsMHhhMCB9fSwKKyB7MTYsIDB4OTYzMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4YWIsMHgwMCwweDJlLDB4YzAgfX0sCisgezE2LCAweDk2NDAsIDAsIHsweDA5LDB4MzAsMHgwMiwweDJjLDB4MDAsMHg4YiwweDAwLDB4MjYsMHg2MCwweDBiLDB4YjAsMHgwMiwweGFjLDB4MDAsMHg4YiwweDAwIH19LAorIHsxNiwgMHg5NjUwLCAwLCB7MHg2ZSwweGMwLDB4MGIsMHhiMCwweDQyLDB4MmMsMHgwMCwweDliLDB4MDAsMHg0YywweGUwLDB4MGEsMHg5MCwweDIyLDB4MmMsMHgwMCB9fSwKKyB7MTYsIDB4OTY2MCwgMCwgezB4OGEsMHhjMiwweDJjLDB4NDAsMHgwOCwweGIwLDB4NDIsMHgyMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk2NzAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAwLDB4ODMsMHgwZCwweDJjLDB4YzYsMHgwOSwweDMxLDB4MDIsMHgwZCwweDgxLDB4YTMsMHgxMSwweDI0IH19LAorIHsxNiwgMHg5NjgwLCAwLCB7MHgwMCwweDhhLDB4YjEsMHhlMiwweDRjLDB4ODAsMHhhMywweDAwLDB4MmMsMHhjYywweDBiLDB4MDIsMHgwMiwweDhjLDB4ODAsMHhhMyB9fSwKKyB7MTYsIDB4OTY5MCwgMCwgezB4NDgsMHgwOCwweGMwLDB4MDgsMHgwMCwweDBhLDB4MGQsMHgwMCwweDgxLDB4MDAsMHgyOCwweGMwLDB4MDgsMHgzMCwweDAyLDB4ODIgfX0sCisgezE2LCAweDk2YTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGNiLDB4MjAsMHgyZiwweGM4IH19LAorIHsxNiwgMHg5NmIwLCAwLCB7MHg4ZCwweGY2LDB4MTMsMHgyZCwweGIwLDB4OGYsMHgwMCwweDM2LDB4NDAsMHgwZiwweGYwLDB4MDIsMHhhZCwweGE4LDB4OGYsMHgxMCB9fSwKKyB7MTYsIDB4OTZjMCwgMCwgezB4M2YsMHhjYSwweDBiLDB4ODAsMHg5MiwweDJjLDB4MTAsMHhkYiwweDQwLDB4M2YsMHhjMCwweDBlLDB4MDAsMHgwMywweDJkLDB4MDQgfX0sCisgezE2LCAweDk2ZDAsIDAsIHsweGM4LDB4MDIsMHgzZSwweDQwLDB4MGMsMHhiMCwweDAzLDB4MDAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NmUwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHgzZiwweGM4LDB4MGUsMHhmMSwweDAzLDB4ZWMsMHg4NCwweGZmLDB4MjAsMHgzNyB9fSwKKyB7MTYsIDB4OTZmMCwgMCwgezB4MDAsMHgwZCwweGIyLDB4MDMsMHhiYywweGEwLDB4ZmYsMHgwMCwweDNlLDB4YzksMHgwZSwweDgwLDB4MDMsMHhmZCwweDExLDB4ZmYgfX0sCisgezE2LCAweDk3MDAsIDAsIHsweDAwLDB4M2IsMHhjMCwweDBlLDB4YzAsMHgwMywweGZjLDB4ODAsMHhlZCwweDAwLDB4M2IsMHhjMCwweDBmLDB4ZjAsMHg0MywweDY4IH19LAorIHsxNiwgMHg5NzEwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMSwweGZjLDB4OTAsMHhjYywweDkyLDB4M2IsMHhjOCB9fSwKKyB7MTYsIDB4OTcyMCwgMCwgezB4MGQsMHhmMCwweDgzLDB4NzMsMHgxMCwweGZmLDB4MjgsMHgzNywweGNhLDB4NGYsMHhiMiwweDAzLDB4ZmMsMHgwMCwweGRmLDB4MjAgfX0sCisgezE2LCAweDk3MzAsIDAsIHsweGIzLDB4YzQsMHgwZCwweDY4LDB4NDMsMHhmZSwweDE0LDB4Y2IsMHg4NCwweDMzLDB4ZTAsMHgwZCwweDc4LDB4MDMsMHhiZSwweDAwIH19LAorIHsxNiwgMHg5NzQwLCAwLCB7MHhmZiwweDgwLDB4MzcsMHhhMCwweDBjLDB4ZjMsMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTc1MCwgMCwgezB4ODAsMHgwMCwweGZjLDB4NDgsMHg4MiwweDIxLDB4MDMsMHhmNCwweDBmLDB4ZjYsMHg0MiwweDIwLDB4MDQsMHg4YSwweDYwLDB4MmIgfX0sCisgezE2LCAweDk3NjAsIDAsIHsweGRhLDB4MGIsMHhmOSwweDAyLDB4M2YsMHgwNCwweDhmLDB4NTIsMHgyMywweGQ1LDB4NGQsMHg4OCwweDAyLDB4YWUsMHgwMCwweGRiIH19LAorIHsxNiwgMHg5NzcwLCAwLCB7MHg4MCwweDM2LDB4YzAsMHgwOCwweDgwLDB4MDIsMHgyMCwweDA0LDB4YjgsMHgwMCwweDIyLDB4NjAsMHgwZCwweDc0LDB4MDMsMHhlMCB9fSwKKyB7MTYsIDB4OTc4MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweGEwLDB4ODAsMHgwMSwweDA4LDB4YzAgfX0sCisgezE2LCAweDk3OTAsIDAsIHsweDRiLDB4MzAsMHg4MiwweDQyLDB4OTAsMHhhMywweDA4LDB4MmMsMHhjOCwweDFhLDB4MzAsMHgyMiwweDhkLDB4MDAsMHg5MywweDAwIH19LAorIHsxNiwgMHg5N2EwLCAwLCB7MHgyNCwweGM4LDB4MDksMHhhMCwweDEyLDB4MGMsMHgwNCwweGFiLDB4MDAsMHg2MiwweGMwLDB4MDksMHhiMCwweDAyLDB4Y2MsMHgwMCB9fSwKKyB7MTYsIDB4OTdiMCwgMCwgezB4YjMsMHgwMCwweDI4LDB4ODAsMHgwOCwweDM2LDB4MDYsMHhhMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk3YzAsIDAsIHsweGMwLDB4MTUsMHhhYywweDAwLDB4ODgsMHgwOCwweDIyLDB4YzAsMHgwYSwweDMwLDB4MWEsMHgwMCwweDExLDB4ODIsMHgwMCwweDBhIH19LAorIHsxNiwgMHg5N2QwLCAwLCB7MHhjMCwweDBiLDB4YjAsMHg0MiwweDJjLDB4MDAsMHg4YiwweDAwLDB4MjYsMHhjMCwweDA5LDB4OTEsMHgwMiwweGVjLDB4MjAsMHhiYiB9fSwKKyB7MTYsIDB4OTdlMCwgMCwgezB4MjgsMHg2NiwweGMwLDB4MDgsMHg4MCwweDAyLDB4NjAsMHgwMCwweGI4LDB4MDAsMHgyYSwweDQwLDB4ODEsMHhiMCwweDA2LDB4ZjggfX0sCisgezE2LCAweDk3ZjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE1LDB4ZWMsMHgwMiwweGM4LDB4MDQsMHgzYSwweGMwIH19LAorIHsxNiwgMHg5ODAwLCAwLCB7MHg4OSwweGIwLDB4MDMsMHg2OCwweDAwLDB4ZTksMHhjMSwweDFlLDB4YzEsMHgwZSwweDMwLDB4MDMsMHhlYywweDAwLDB4ZGIsMHgwMCB9fSwKKyB7MTYsIDB4OTgxMCwgMCwgezB4MzYsMHhjMSwweDBkLDB4MDAsMHgyMywweDBlLDB4MDAsMHhlYiwweDgwLDB4MzIsMHhjOCwweGNkLDB4MzAsMHgzMiwweGVjLDB4MDggfX0sCisgezE2LCAweDk4MjAsIDAsIHsweGYzLDB4MDAsMHgzYywweDgwLDB4MGMsMHhiMCwweDA2LDB4ODAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ODMwLCAwLCB7MHhlMCwweDAxLDB4OWMsMHgwMCwweDdjLDB4MDAsMHgzZiwweGMwLDB4MGIsMHhiMCwweDQzLDB4ZmQsMHgwMCwweGJlLDB4YzQsMHgzNyB9fSwKKyB7MTYsIDB4OTg0MCwgMCwgezB4YzAsMHgxZiwweGYwLDB4MDMsMHg1YywweDAwLDB4ZmYsMHgwMSwweDNiLDB4YzAsMHgwZSwweGM4LDB4MDMsMHhiZiwweDIwLDB4ZGYgfX0sCisgezE2LCAweDk4NTAsIDAsIHsweDAwLDB4M2YsMHhkMCwweDBmLDB4YzAsMHgxMywweGIwLDB4MDAsMHg3YywweDAwLDB4YjcsMHg0MCwweDBmLDB4ZjAsMHgxYiwweGIwIH19LAorIHsxNiwgMHg5ODYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MGMsMHhkOCwweDQxLDB4MzIsMHhjMCB9fSwKKyB7MTYsIDB4OTg3MCwgMCwgezB4MGUsMHhiMCwweDA3LDB4YTgsMHgwMSwweDY5LDB4NDAsMHhiMiwweGMwLDB4OGQsMHhiMCwweGEzLDB4ZWMsMHgwOCwweGYzLDB4MDAgfX0sCisgezE2LCAweDk4ODAsIDAsIHsweDMyLDB4YzAsMHgwZiwweDgwLDB4MDMsMHhlZCwweDAwLDB4ZmIsMHg0OCwweDNhLDB4YzAsMHgwZCwweGIwLDB4ODMsMHgyYywweDAwIH19LAorIHsxNiwgMHg5ODkwLCAwLCB7MHhmYiwweDIwLDB4M2UsMHg4MCwweDBmLDB4NzAsMHgyMywweGQwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OThhMCwgMCwgezB4YzgsMHgwNSwweDNjLDB4MDAsMHg4OCwweDAwLDB4MjMsMHhjMCwweDA4LDB4ZjAsMHgwNiwweDJjLDB4MTAsMHg4OCwweDUxLDB4MzcgfX0sCisgezE2LCAweDk4YjAsIDAsIHsweGMwLDB4MDgsMHhmMCwweDA3LDB4N2QsMHg2MCwweDhmLDB4MDIsMHgzNywweGMwLDB4MGIsMHg4YywweDAwLDB4MmQsMHgwMCwweGIzIH19LAorIHsxNiwgMHg5OGMwLCAwLCB7MHgwMCwweDM4LDB4YzAsMHgwOCwweDgwLDB4ODIsMHgyMCwweDAwLDB4YjgsMHgwMCwweDJlLDB4NTAsMHgwYiwweGYwLDB4MDAsMHgzMiB9fSwKKyB7MTYsIDB4OThkMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4OTgsMHgwMCwweDI4LDB4YzAgfX0sCisgezE2LCAweDk4ZTAsIDAsIHsweDBhLDB4MzAsMHgwMiwweDg0LDB4MDQsMHhhMywweDAwLDB4MDAsMHhjMCwweDY4LDB4MzksMHgwNiwweDBjLDB4MTAsMHg5MywweDIwIH19LAorIHsxNiwgMHg5OGYwLCAwLCB7MHgyMiwweGMwLDB4OWIsMHgwMSwweGEwLDB4OGYsMHgxNCwweDMzLDB4MTQsMHgyOCwweGMwLDB4MDksMHgzYywweDAyLDB4MGMsMHgwMSB9fSwKKyB7MTYsIDB4OTkwMCwgMCwgezB4OTMsMHg0MCwweDJjLDB4ODgsMHgwYiwweDMwLDB4MDIsMHhiOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk5MTAsIDAsIHsweDYwLDB4MDEsMHgxZSwweDEwLDB4ODcsMHg4MCwweDI5LDB4ZTAsMHgwOCwweDc4LDB4MDIsMHgzZSwweDAwLDB4ODMsMHg5MCwweDI0IH19LAorIHsxNiwgMHg5OTIwLCAwLCB7MHhlMCwweDA4LDB4NzgsMHgxMCwweGNlLDB4MDQsMHgwNywweDkxLDB4MjUsMHhlMCwweDgzLDB4YzksMHgwMiwweDFlLDB4MDQsMHhiNyB9fSwKKyB7MTYsIDB4OTkzMCwgMCwgezB4ODQsMHgyYiwweGE0LDB4MDgsMHg0OCwweDQyLDB4MTIsMHhjYywweGI0LDB4ODAsMHgyZCwweDY0LDB4MGIsMHg3OCwweDAyLDB4MTkgfX0sCisgezE2LCAweDk5NDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4MmMsMHgwMCwweGQwLDB4MTAsMHgyOCwweGM4IH19LAorIHsxNiwgMHg5OTUwLCAwLCB7MHgwZSwweDNiLDB4MDIsMHg4NCwweDAwLDB4ZTMsMHg0MCwweDMwLDB4YzgsMHgwYywweDM4LDB4NjIsMHg4YywweDAwLDB4NTMsMHgwMCB9fSwKKyB7MTYsIDB4OTk2MCwgMCwgezB4MzAsMHhjNCwweDFmLDB4MDAsMHgyMywweDhjLDB4M2MsMHhmMywweDgwLDB4MTgsMHhjMCwweDBkLDB4MzAsMHgwMywweDBlLDB4ODAgfX0sCisgezE2LCAweDk5NzAsIDAsIHsweGQzLDB4MTAsMHgzYywweDgwLDB4MGYsMHgzMCwweDAzLDB4OTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5OTgwLCAwLCB7MHg0MCwweDFkLDB4YmQsMHgwMCwweGY5LDB4MTIsMHhiNCwweGMwLDB4MDcsMHhiMCwweDAzLDB4Y2MsMHgwMCwweDRhLDB4MDAsMHg3NyB9fSwKKyB7MTYsIDB4OTk5MCwgMCwgezB4YzAsMHgwZSwweDcxLDB4NDMsMHg2YywweDAwLDB4ZjMsMHgwMCwweDNmLDB4ZDAsMHgxZiwweGQwLDB4NTMsMHhhYywweDY4LDB4ZmIgfX0sCisgezE2LCAweDk5YTAsIDAsIHsweDE4LDB4M2QsMHhjMCwweDBmLDB4YzAsMHgxMywweGYwLDB4NTAsMHhmYywweDA0LDB4M2YsMHg0MCwweDBmLDB4ZjQsMHgwMywweDkwIH19LAorIHsxNiwgMHg5OWIwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVkLDB4NDAsMHhmOCwweDA0LDB4M2UsMHhkMiB9fSwKKyB7MTYsIDB4OTljMCwgMCwgezB4MGYsMHhiMywweDEzLDB4ZTAsMHgxMCwweGY5LDB4MDAsMHhiMiwweGNjLDB4MGUsMHhiYSwweDAzLDB4NmQsMHg4MCwweGRiLDB4MDIgfX0sCisgezE2LCAweDk5ZDAsIDAsIHsweDMyLDB4ZGMsMHg0ZiwweDAwLDB4MDMsMHg2YywweDA0LDB4ZjMsMHgwMiwweDM2LDB4NDAsMHgwZSwweGIwLDB4MDMsMHhjYywweDAwIH19LAorIHsxNiwgMHg5OWUwLCAwLCB7MHg0YiwweDAwLDB4M2MsMHg4MCwweDBjLDB4ZjEsMHgwMywweDYyLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTlmMCwgMCwgezB4NDgsMHgxMSwweDljLDB4MDAsMHhiNCwweDAwLDB4MmQsMHhjOSwweDBiLDB4NzAsMHg4MiwweGRjLDB4MDAsMHhiYywweDA0LDB4MjEgfX0sCisgezE2LCAweDlhMDAsIDAsIHsweGM0LDB4NGIsMHgzNywweDAyLDB4MGMsMHhhMCwweDhmLDB4NzQsMHgyMSwweGMwLDB4MGIsMHg0MCwweDAyLDB4MWMsMHg4MSwweGI3IH19LAorIHsxNiwgMHg5YTEwLCAwLCB7MHgyMCwweDJiLDB4YzAsMHgwOCwweDQwLDB4MDIsMHhkMCwweDAyLDB4ODQsMHgwMCwweDJkLDB4NDAsMHgwYSwweGYyLDB4MDIsMHgxMiB9fSwKKyB7MTYsIDB4OWEyMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDgwLDB4YjQsMHhjMCwweDJkLDB4ZTQgfX0sCisgezE2LCAweDlhMzAsIDAsIHsweDBiLDB4N2EsMHgwMiwweGQyLDB4MDAsMHhiNSwweDg4LDB4MjEsMHhlOCwweDBhLDB4NzgsMHgwMiwweGRlLDB4NDAsMHg5NywweDAwIH19LAorIHsxNiwgMHg5YTQwLCAwLCB7MHgyMSwweGU4LDB4MGIsMHhjYywweDQ2LDB4NWUsMHgyOCwweGI3LDB4YzQsMHgyMSwweGYwLDB4MGEsMHg3OCwweDAyLDB4ZmUsMHgwOCB9fSwKKyB7MTYsIDB4OWE1MCwgMCwgezB4OTcsMHg4NCwweDJkLDB4YTAsMHgwOCwweDc4LDB4MDIsMHg3MCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDlhNjAsIDAsIHsweDA4LDB4MTQsMHhjYywweDAwLDB4YjAsMHhjMCwweDJjLDB4YzAsMHg5YiwweGIwLDB4MDIsMHhjYywweDIwLDB4YjMsMHg2MCwweDIyIH19LAorIHsxNiwgMHg5YTcwLCAwLCB7MHhjMCwweDBiLDB4MzAsMHgwMiwweDhjLDB4MDAsMHg4MywweDAxLDB4MjAsMHhjMCwweDFiLDB4MDYsMHgxNiwweDRmLDB4MDAsMHhiMyB9fSwKKyB7MTYsIDB4OWE4MCwgMCwgezB4YTAsMHgyYSwweGYwLDB4MDgsMHgwMCwweDAyLDB4ZTAsMHgwMCwweDkwLDB4MDAsMHgyYywweDQwLDB4MGEsMHgzMCwweDAyLDB4MDIgfX0sCisgezE2LCAweDlhOTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgxMCwweGZlLDB4YzAsMHgzZSwweDgwIH19LAorIHsxNiwgMHg5YWEwLCAwLCB7MHgwZiwweGEwLDB4MDMsMHhmOSwweDA4LDB4ZmUsMHg0MCwweDIyLDB4ODAsMHgwZSwweGEwLDB4MDMsMHhlOCwweDAwLDB4ZDIsMHgwMCB9fSwKKyB7MTYsIDB4OWFiMCwgMCwgezB4MzIsMHg4MCwweDhmLDB4ZTAsMHgwMywweDU4LDB4MDAsMHhmNiwweDAwLDB4MzMsMHhiMCwweDBlLDB4MjAsMHgwMiwweGU4LDB4MGMgfX0sCisgezE2LCAweDlhYzAsIDAsIHsweGQyLDB4MDIsMHgzYywweDgwLDB4MGMsMHhhMCwweDAzLDB4N2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5YWQwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4MjAsMHgzZSwweDAxLDB4MGIsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGYwLDB4NDAsMHgzZSB9fSwKKyB7MTYsIDB4OWFlMCwgMCwgezB4MDAsMHg1NywweDgwLDB4MjMsMHgwMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDg0LDB4MDMsMHhhMCwweDMwLDB4MzggfX0sCisgezE2LCAweDlhZjAsIDAsIHsweDAwLDB4M2EsMHgwOCwweDBmLDB4YzQsMHgwMywweGYwLDB4MDAsMHhlYywweDAwLDB4M2YsMHgxMCwweDBmLDB4ODAsMHgwMywweGQyIH19LAorIHsxNiwgMHg5YjAwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDAsMHhkOSwweDAxLDB4M2MsMHg0OCB9fSwKKyB7MTYsIDB4OWIxMCwgMCwgezB4NGMsMHg5MCwweDBiLDB4MjQsMHgwMSwweGM5LDB4YzAsMHgzMiwweDQwLDB4YWMsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGQ5LDB4NDAgfX0sCisgezE2LCAweDliMjAsIDAsIHsweDMwLDB4NDAsMHgwZCwweDlhLDB4MDMsMHgyMiwweDg0LDB4YzgsMHgxNCwweDMyLDB4NDAsMHgwZSwweDkwLDB4MDMsMHgyNCwweDAwIH19LAorIHsxNiwgMHg5YjMwLCAwLCB7MHhjOSwweDAwLDB4ODIsMHg2OCwweDJjLDB4OTAsMHgwMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWI0MCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHg4OSwweDAwLDB4MmUsMHg0MCwweDA4LDB4OTAsMHgyMiwweDI0LDB4MDAsMHg4OSwweDAyLDB4ODIgfX0sCisgezE2LCAweDliNTAsIDAsIHsweDQwLDB4MDgsMHg5MCwweDAyLDB4ZTcsMHg0MCwweDg5LDB4ODAsMHgzNiwweDQxLDB4OGQsMHgxOCwweDAyLDB4YTAsMHgyNCwweGE4IH19LAorIHsxNiwgMHg5YjYwLCAwLCB7MHgwNCwweDYyLDB4NDAsMHgwOCwweDk0LDB4ODMsMHgyNCwweDAwLDB4ODksMHgwMSwweDIyLDB4NzIsMHgwOCwweDkwLDB4MGIsMHgyMCB9fSwKKyB7MTYsIDB4OWI3MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgwNCwweDAwLDB4OTksMHgwMCwweDJhLDB4NDAgfX0sCisgezE2LCAweDliODAsIDAsIHsweDI4LDB4OTAsMHgxMiwweDA0LDB4MDAsMHg4OSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweGE0LDB4MjAsMHg5OSwweDAwIH19LAorIHsxNiwgMHg5YjkwLCAwLCB7MHgyMiwweDQwLDB4MTgsMHg5MCwweDA2LDB4MjAsMHgwMSwweDg4LDB4MDgsMHg2MiwweDQwLDB4MGEsMHg5MCwweDAyLDB4MzQsMHgxMCB9fSwKKyB7MTYsIDB4OWJhMCwgMCwgezB4OGQsMHg4MSwweDIzLDB4NDEsMHgwOCwweDEwLDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDliYjAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4ODEsMHgwNCwweDJjLDB4NDgsMHgwOCwweDEyLDB4MDIsMHgwNCwweDAyLDB4ODMsMHgyMCwweDIwIH19LAorIHsxNiwgMHg5YmMwLCAwLCB7MHg0OCwweDA4LDB4MTIsMHgwMiwweGM0LDB4ODAsMHg4MywweDYwLDB4MjQsMHg0OCwweDE5LDB4MzQsMHg2MiwweGE1LDB4MDQsMHhhMSB9fSwKKyB7MTYsIDB4OWJkMCwgMCwgezB4MDIsMHg2MCwweDQwLDB4MDgsMHhkMCwweDAyLDB4NTQsMHgwMCwweDhkLDB4MDAsMHgyOSwweDQwLDB4MDgsMHgxMiwweDgyLDB4MDIgfX0sCisgezE2LCAweDliZTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGQ4LDB4NTAsMHgzYSwweDgwIH19LAorIHsxNiwgMHg5YmYwLCAwLCB7MHgwYywweDg1LDB4MDIsMHgyMSwweDQ0LDB4ODgsMHg1MCwweDMyLDB4MTQsMHg0YywweDgwLDB4NDMsMHhlMCwweDAwLDB4ZDgsMHgwMCB9fSwKKyB7MTYsIDB4OWMwMCwgMCwgezB4MjIsMHgxNCwweDBjLDB4ODAsMHgwMywweDIwLDB4MDAsMHhjOCwweDAwLDB4YTIsMHgwMCwweDBlLDB4ODAsMHgwMywweDIwLDB4MDAgfX0sCisgezE2LCAweDljMTAsIDAsIHsweGM4LDB4MDAsMHgzMywweDAwLDB4MGMsMHg4MiwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5YzIwLCAwLCB7MHg5OCwweDFkLDB4ZTQsMHg0NCwweGZkLDB4MDAsMHgzZSwweDQ0LDB4MGYsMHg5MSwweDAzLDB4ZjQsMHgxMCwweGZmLDB4MTAsMHgzZSB9fSwKKyB7MTYsIDB4OWMzMCwgMCwgezB4NDQsMHgwZiwweDkxLDB4MDMsMHhlNCwweDQwLDB4ZjksMHgxMCwweDNlLDB4NDQsMHgwYiwweGYwLDB4MTMsMHhlNSwweDEwLDB4ZjkgfX0sCisgezE2LCAweDljNDAsIDAsIHsweDQwLDB4M2YsMHg0YSwweDJmLDB4OTIsMHg4YSwweGE0LDB4YTIsMHhmOSwweDI4LDB4MzYsMHg0MCwweDBmLDB4OTIsMHg4MywweGE2IH19LAorIHsxNiwgMHg5YzUwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgxMSwweGU2LDB4YzAsMHhjMSwweDAwLDB4M2YsMHg2OSB9fSwKKyB7MTYsIDB4OWM2MCwgMCwgezB4MGMsMHg5YSwweDQzLDB4NmMsMHgwMCwweGZkLDB4YTAsMHgzZSwweDc4LDB4MmMsMHhkOCwweDA3LDB4ZDYsMHgwMiwweGQ1LDB4OTYgfX0sCisgezE2LCAweDljNzAsIDAsIHsweDMyLDB4NzgsMHgwZCwweDkwLDB4MDMsMHgyNywweDAwLDB4ZmQsMHhhMCwweDM1LDB4NTAsMHgwNiwweGQ0LDB4MDMsMHhlNSwweDAwIH19LAorIHsxNiwgMHg5YzgwLCAwLCB7MHhmZCwweDQwLDB4YjMsMHg0MCwweDBmLDB4OTgsMHhhMywweDQ2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWM5MCwgMCwgezB4MzgsMHgxMCwweGUzLDB4YzIsMHg4OCwweDg4LDB4MmUsMHgxNCwweGE4LDB4OGEsMHhjMiwweDIyLDB4YTAsMHhiOCwweGMwLDB4MmMgfX0sCisgezE2LCAweDljYTAsIDAsIHsweDI0LDB4NDgsMHg4NCwweDAyLDB4ZTEsMHgwMCwweDk4LDB4YzQsMHgyMCwweDNjLDB4MDgsMHg4YSwweDgyLDB4MjMsMHg4MCwweGI4IH19LAorIHsxNiwgMHg5Y2IwLCAwLCB7MHgwNCwweDIyLDB4MjAsMHgwOCwweDg4LDB4MDMsMHhhMiwweDAwLDB4YjgsMHhhMCwweDIyLDB4MDAsMHgwYiwweDg4LDB4MDIsMHgwZSB9fSwKKyB7MTYsIDB4OWNjMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDgwLDB4YTEsMHgyMCwweDZjLDB4NDAgfX0sCisgezE2LCAweDljZDAsIDAsIHsweDBhLDB4MTQsMHgwMiwweDQ0LDB4MDQsMHhhMSwweDY4LDB4MmMsMHg0OCwweDA4LDB4MTQsMHgwMiwweGM1LDB4MDAsMHg4MSwweDYwIH19LAorIHsxNiwgMHg5Y2UwLCAwLCB7MHgyMCwweDQ4LDB4MTksMHg5MCwweDAyLDB4ODUsMHg4MSwweGIxLDB4NDAsMHgyNCwweDY4LDB4MGEsMHgxMiwweDQyLDB4YzQsMHg4MCB9fSwKKyB7MTYsIDB4OWNmMCwgMCwgezB4YjksMHgyMCwweDIwLDB4NDAsMHg4YiwweDEwLDB4ODIsMHg0MiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDlkMDAsIDAsIHsweDE4LDB4MDUsMHhhNCwweDEwLDB4YTksMHgwMCwweDZlLDB4YzAsMHgwYSwweDEwLDB4MDIsMHgyNCwweDE0LDB4YjksMHgwMCwweDJlIH19LAorIHsxNiwgMHg5ZDEwLCAwLCB7MHg0MCwweDA4LDB4OTAsMHgxMiwweGU0LDB4MDAsMHg5OSwweDAwLDB4MjIsMHg0MCwweDA4LDB4ODAsMHgwNiwweGEwLDB4NjAsMHhiOSB9fSwKKyB7MTYsIDB4OWQyMCwgMCwgezB4MDksMHgyMiwweDYwLDB4MDgsMHg5MCwweDAyLDB4YTQsMHgwMCwweGI5LDB4MDAsMHgwMiwweDQwLDB4MGIsMHgxMCwweDA2LDB4MDYgfX0sCisgezE2LCAweDlkMzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDA1LDB4ZTQsMHgwMCwweGU5LDB4ODAsMHgzZSwweDQxIH19LAorIHsxNiwgMHg5ZDQwLCAwLCB7MHgwZSwweDkwLDB4MDMsMHg2NCwweDAwLDB4ZTksMHhjMCwweDNlLDB4NDAsMHgwYywweDkwLDB4MDIsMHhlNCwweDAwLDB4YzksMHgwMCB9fSwKKyB7MTYsIDB4OWQ1MCwgMCwgezB4MjIsMHg0MSwweDBkLDB4ODAsMHgwMiwweGEzLDB4MDQsMHhmMSwweDQwLDB4MzYsMHg0MCwweDBlLDB4OTAsMHgwMiwweGU0LDB4MDAgfX0sCisgezE2LCAweDlkNjAsIDAsIHsweGYxLDB4MDAsMHgxMiwweDQwLDB4MGYsMHg5MCwweDAzLDB4NjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ZDcwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwMCwweGQ5LDB4MjIsMHgzZSwweDQyLDB4MGQsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGI5LDB4YzQsMHgzYyB9fSwKKyB7MTYsIDB4OWQ4MCwgMCwgezB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZTksMHgwMiwweGFlLDB4NDAsMHgwZiwweDgwLDB4NGIsMHg2MiwweDEwLDB4ZjkgfX0sCisgezE2LCAweDlkOTAsIDAsIHsweDIwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAyLDB4N2UsMHg0MSwweDBmLDB4OTAsMHgxMywweGNhIH19LAorIHsxNiwgMHg5ZGEwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwMCwweDgwLDB4MDAsMHhjOCwweDAwLDB4MzgsMHgwMCB9fSwKKyB7MTYsIDB4OWRiMCwgMCwgezB4MGYsMHg4MCwweDIwLDB4ZTAsMHgwMCwweGE4LDB4MjAsMHgzMiwweDAwLDB4MGMsMHg4MCwweDA3LDB4ZTAsMHg4MCwweGM4LDB4MDAgfX0sCisgezE2LCAweDlkYzAsIDAsIHsweDM4LDB4MDAsMHgwZCwweDgwLDB4ODMsMHgyMSwweDEwLDB4ZjgsMHg2MCwweDMyLDB4MDAsMHg4ZSwweDgwLDB4YjMsMHgyMCwweDA4IH19LAorIHsxNiwgMHg5ZGQwLCAwLCB7MHhmOCwweDAwLDB4M2UsMHgwMCwweDBjLDB4ODAsMHgwMywweGNhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWRlMCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDQsMHg4YSwweDAwLDB4MzMsMHg5MCwweDQzLDB4YTAsMHgyMiwweDI4LDB4MDAsMHg4ZSwweDgwLDB4NzYgfX0sCisgezE2LCAweDlkZjAsIDAsIHsweDgwLDB4MDgsMHhlMSwweDAzLDB4MTksMHgwMCwweDg2LDB4ODAsMHgyMiwweDgwLDB4MGQsMHg2MCwweDAxLDB4NzgsMHgwMCwweGJlIH19LAorIHsxNiwgMHg5ZTAwLCAwLCB7MHgwMCwweDM2LDB4ODAsMHgwYywweGU0LDB4MDIsMHhhOCwweDEwLDB4YmUsMHhhMCwweDJmLDB4ODAsMHgwZCwweGEwLDB4MDIsMHgwYSB9fSwKKyB7MTYsIDB4OWUxMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTEsMHg0YywweDA0LDB4MDMsMHgwNCwweDJjLDB4ZDQgfX0sCisgezE2LCAweDllMjAsIDAsIHsweDBiLDB4MzAsMHgwMiwweDRjLDB4MDEsMHhhMywweGM0LDB4MjAsMHhjMCwweDI4LDB4MzUsMHgwMiwweDg2LDB4MDAsMHg4MywweDgwIH19LAorIHsxNiwgMHg5ZTMwLCAwLCB7MHgyOCwweGMwLDB4MDgsMHgzOCwweDA2LDB4MGUsMHg5NCwweDMwLDB4YzAsMHhhMiwweGMwLDB4MGIsMHgzYywweDAyLDB4MGMsMHgwMCB9fSwKKyB7MTYsIDB4OWU0MCwgMCwgezB4YjMsMHg4MCwweDJjLDB4NDgsMHgwOCwweDMwLDB4MDIsMHg4YSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDllNTAsIDAsIHsweGEwLDB4MDEsMHgwYywweDA0LDB4OGYsMHg4MCwweDIxLDB4YzEsMHgxYiwweDcyLDB4NDIsMHgxZSwweGMwLDB4ODMsMHg4OCwweDIxIH19LAorIHsxNiwgMHg5ZTYwLCAwLCB7MHhjMCwweDE4LDB4MjgsMHgwNiwweDEwLDB4MjEsMHg4NiwweDM4LDB4MjEsMHhjMCwweDE5LDB4ZjcsMHgwMiwweDVkLDB4YzAsMHhiNCB9fSwKKyB7MTYsIDB4OWU3MCwgMCwgezB4NDEsMHgyNywweGQwLDB4MDgsMHg3OCwweGM2LDB4OWMsMHgwMCwweGI3LDB4MDAsMHgyZiwweDYwLDB4MDksMHg3MiwweDAyLDB4MjggfX0sCisgezE2LCAweDllODAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgwMiwweGM3LDB4ODAsMHgyZCwweGEwIH19LAorIHsxNiwgMHg5ZTkwLCAwLCB7MHgwZiwweDNlLDB4MDMsMHhmZSwweDgwLDB4YTcsMHg4MCwweGExLDB4ZTAsMHgwYywweDc4LDB4MDIsMHg5NCwweDAwLDB4ODUsMHhhMCB9fSwKKyB7MTYsIDB4OWVhMCwgMCwgezB4MzksMHhlNCwweDBjLDB4NzgsMHgxMywweDFlLDB4OTAsMHhiNSwweDg0LDB4MzEsMHhlMCwweDBmLDB4ZjgsMHg4NywweDFlLDB4MDQgfX0sCisgezE2LCAweDllYjAsIDAsIHsweGY3LDB4ODAsMHgzZCwweDYwLDB4MGMsMHgzYiwweDAzLDB4YWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ZWMwLCAwLCB7MHgwOCwweDFkLDB4YWQsMHhlNCwweGZiLDB4NTQsMHgzZSwweDgwLDB4MGYsMHhiNCwweDIzLDB4ZWMsMHgzMiwweGZiLDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4OWVkMCwgMCwgezB4ZDgsMHg0ZiwweGEwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4YzAsMHgwZiwweDMwLDB4MzMsMHhlYywweDA0LDB4ZjIgfX0sCisgezE2LCAweDllZTAsIDAsIHsweDAxLDB4M2UsMHhjMCwweDBmLDB4YjIsMHgwMywweGZlLDB4MTAsMHhmYiwweDY4LDB4M2MsMHg0MSwweDBmLDB4ZjAsMHg0MywweDgyIH19LAorIHsxNiwgMHg5ZWYwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNSwweGZlLDB4MDAsMHhjZiwweGU0LDB4M2YsMHhlNCB9fSwKKyB7MTYsIDB4OWYwMCwgMCwgezB4MGMsMHhmYywweDAzLDB4N2UsMHg4MCwweGNmLDB4ODEsMHgzMywweGZhLDB4MGYsMHhmOCwweDAzLDB4ZjYsMHgwMCwweGZmLDB4ODAgfX0sCisgezE2LCAweDlmMTAsIDAsIHsweDNmLDB4ZTIsMHgwZiwweDc5LDB4MDMsMHgzZSwweDQwLDB4ZjQsMHg4MCwweDMzLDB4NjAsMHgwYywweGU4LDB4MDMsMHgzZSwweDAwIH19LAorIHsxNiwgMHg5ZjIwLCAwLCB7MHhmZiwweDgwLDB4MzMsMHg2MCwweDBjLDB4ZjgsMHg4MywweDUwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWYzMCwgMCwgezB4YTgsMHgxMSwweDljLDB4MDAsMHhkNywweGEwLDB4MmQsMHhjNCwweDA4LDB4YmEsMHgwMiwweDNjLDB4YTAsMHg4NywweDIwLDB4MjEgfX0sCisgezE2LCAweDlmNDAsIDAsIHsweGMwLDB4MGYsMHg1MiwweDAzLDB4ZDQsMHgwMCwweGI2LDB4MTAsMHgyZCwweGMwLDB4OGIsMHg3MywweDAzLDB4NWMsMHg0MCwweGI0IH19LAorIHsxNiwgMHg5ZjUwLCAwLCB7MHhiMCwweDJiLDB4NDgsMHgyOCwweDQxLDB4MDIsMHgwYywweDAwLDB4YmYsMHgxOCwweDM1LDB4NDYsMHgyOCwweDcyLDB4NDIsMHgyYSB9fSwKKyB7MTYsIDB4OWY2MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDAsMHg5YywweDAwLDB4ODcsMHg0MSwweDJkLDB4NDQgfX0sCisgezE2LCAweDlmNzAsIDAsIHsweDBhLDB4NzMsMHgwMiwweDljLDB4YzQsMHg4MSwweDAwLDB4NmQsMHhjOCwweDhiLDB4NzAsMHgwMiwweGQ0LDB4MDAsMHhiNywweDAwIH19LAorIHsxNiwgMHg5ZjgwLCAwLCB7MHgyZCwweGMwLDB4MGIsMHhmMCwweDQ2LDB4OWMsMHg1NSwweGI0LDB4MjAsMHgyNSwweDQwLDB4MTgsMHg2MCwweDgyLDB4MWMsMHgwMCB9fSwKKyB7MTYsIDB4OWY5MCwgMCwgezB4YjcsMHgwMCwweDIzLDB4NDAsMHgwOCwweDcwLDB4NDYsMHg0NCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDlmYTAsIDAsIHsweDYwLDB4MTQsMHhjYywweDAwLDB4OTMsMHgwMCwweDJjLDB4NDAsMHgwYiwweGIwLDB4MDIsMHgwYywweDgyLDB4ODAsMHhjMCwweDIwIH19LAorIHsxNiwgMHg5ZmIwLCAwLCB7MHhjMCwweDBhLDB4MTAsMHgwMiwweDA0LDB4MDAsMHhiMywweDAwLDB4MmMsMHhjMCwweDFiLDB4MzAsMHgwMCwweGNkLDB4MDEsMHhiMCB9fSwKKyB7MTYsIDB4OWZjMCwgMCwgezB4NDAsMHhhYywweDc4LDB4ODgsMHg4YywweDA2LDB4MGQsMHg2MCwweGIzLDB4NGMsMHgyNCwweDEyLDB4MDgsMHgzMCwweDBhLDB4MTggfX0sCisgezE2LCAweDlmZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDE1LDB4YmMsMHgwMCwweGM3LDB4MDAsMHgyZSwweDQwIH19LAorIHsxNiwgMHg5ZmUwLCAwLCB7MHgwZSwweGYwLDB4MmEsMHhiZiwweDAwLDB4YzgsMHhjOCwweGJmLDB4YzAsMHgwYiwweDkwLDB4MDIsMHhlNCwweDA0LDB4YmYsMHgwMCB9fSwKKyB7MTYsIDB4OWZmMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4YjIsMHgwYSwweGFjLDB4MDAsMHhmOCwweDgwLDB4MzQsMHg0OSwweDBjLDB4YjksMHgwYiwweDNmLDB4MDAgfX0sCisgezE2LCAweGEwMDAsIDAsIHsweGZiLDB4YzAsMHgzMCwweGYwLDB4MGMsMHhmMCwweDAzLDB4NmUsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMDEwLCAwLCB7MHg4MCwweDAwLDB4Y2MsMHgwMCwweGZiLDB4ODAsMHgzZSwweDQxLDB4MmMsMHhiMCwweDEzLDB4YWMsMHgwMCwweGY4LDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4YTAyMCwgMCwgezB4YzEsMHgwZiwweGEwLDB4MDMsMHhlOCwweDAwLDB4ZmEsMHg0MCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MGIsMHg2ZCwweDQwLDB4ZjggfX0sCisgezE2LCAweGEwMzAsIDAsIHsweDEwLDB4M2EsMHg0MCwweDBmLDB4YjAsMHgwMywweGVjLDB4MTAsMHhmZSwweDQwLDB4M2UsMHhjMCwweDBmLDB4ZjAsMHgwMywweGUxIH19LAorIHsxNiwgMHhhMDQwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweGVjLDB4MGMsMHhkZiwweDAwLDB4M2IsMHg4MCB9fSwKKyB7MTYsIDB4YTA1MCwgMCwgezB4MGYsMHhmMCwweDBiLDB4M2MsMHgwOCwweGU3LDB4MDgsMHgzMywweGMwLDB4MGIsMHhkMCwweDIzLDB4NzQsMHgwMCwweDU0LDB4MDAgfX0sCisgezE2LCAweGEwNjAsIDAsIHsweDMzLDB4YzAsMHgwZiwweGYwLDB4ODMsMHhiZSwweDIwLDB4ZmQsMHgwYywweDNiLDB4NjAsMHgyYywweGUwLDB4MDMsMHgzYywweDAwIH19LAorIHsxNiwgMHhhMDcwLCAwLCB7MHhjZiwweDEyLDB4MzMsMHg1MCwweDBjLDB4MzAsMHgwMywweDgwLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTA4MCwgMCwgezB4ODEsMHgwNCwweDZjLDB4MDQsMHhhYiwweDAwLDB4MjIsMHhhMCwweDBiLDB4YjAsMHgwNiwweDBjLDB4MDAsMHhhYiwweDQwLDB4MzYgfX0sCisgezE2LCAweGEwOTAsIDAsIHsweGMwLDB4MGIsMHhhOCwweDAyLDB4NjYsMHgwMCwweGI4LDB4MDAsMHgzNiwweGMxLDB4MGIsMHgzNCwweDQzLDB4ZWUsMHgwMCwweGIyIH19LAorIHsxNiwgMHhhMGEwLCAwLCB7MHgwMCwweDIyLDB4NjAsMHgwOCwweGI0LDB4ODIsMHg4YywweDA0LDB4OGEsMHgyMSwweDIyLDB4NDAsMHgwOCwweGIwLDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4YTBiMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OWIsMHgwMCwweDJhLDB4MjAgfX0sCisgezE2LCAweGEwYzAsIDAsIHsweDBiLDB4YjAsMHgwMiwweDJjLDB4MDAsMHg4OCwweGM1LDB4MjIsMHhjMCwweDBiLDB4ODgsMHg4MiwweGU2LDB4MDEsMHhiYiwweDA4IH19LAorIHsxNiwgMHhhMGQwLCAwLCB7MHgyMiwweGMwLDB4MGEsMHhiMiwweDgyLDB4YWMsMHg2MCwweGI4LDB4MDIsMHg0YSwweGM0LDB4MDgsMHhiMSwweDAyLDB4MmMsMHgwMCB9fSwKKyB7MTYsIDB4YTBlMCwgMCwgezB4ODMsMHgwMCwweDIyLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhhMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGEwZjAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAwLDB4YWIsMHgyMCwweDIwLDB4MDEsMHgwYiwweDMyLDB4MDYsMHgyYywweDAwLDB4YTAsMHgwMCwweDIwIH19LAorIHsxNiwgMHhhMTAwLCAwLCB7MHhjMCwweDA5LDB4MDQsMHgyMiwweGM0LDB4MDAsMHhiMiwweDAwLDB4MjQsMHhjMSwweDhiLDB4YjAsMHgwMiwweDRjLDB4MDAsMHhiMCB9fSwKKyB7MTYsIDB4YTExMCwgMCwgezB4MDAsMHg2MiwweGMwLDB4NDgsMHgzMCwweDAyLDB4YWMsMHgxMCwweDgyLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4MDIgfX0sCisgezE2LCAweGExMjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4N2MsMHgwOCwweGRmLDB4MmEsMHgzYSwweDAwIH19LAorIHsxNiwgMHhhMTMwLCAwLCB7MHgwZiwweGY1LDB4MTIsMHgzYywweDEwLDB4YzksMHgwMCwweGEzLDB4YzAsMHgwZiwweDgwLDB4NTMsMHhlYywweDAxLDB4ZGEsMHgwMCB9fSwKKyB7MTYsIDB4YTE0MCwgMCwgezB4MzMsMHhjMCwweDBlLDB4YjAsMHgwMywweGFjLDB4MDQsMHhmOCwweDcwLDB4M2EsMHhjMCwweDBjLDB4NjAsMHg0MywweDJjLDB4NDIgfX0sCisgezE2LCAweGExNTAsIDAsIHsweGNkLDB4MDAsMHhiMiwweDQwLDB4MmMsMHhmMCwweDAzLDB4ODAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMTYwLCAwLCB7MHhhMCwweDE5LDB4ZmMsMHgwMCwweGZiLDB4MDEsMHgzZCwweDAwLDB4MGYsMHhiNCwweDE3LDB4ZmMsMHgwMCwweDNjLDB4MDAsMHgzZiB9fSwKKyB7MTYsIDB4YTE3MCwgMCwgezB4YzAsMHg0ZiwweGMwLDB4MDMsMHg3NCwweDA4LDB4ZmUsMHgwMCwweDNmLDB4YzAsMHg0ZiwweGYwLDB4MDMsMHhmYywweDA4LDB4ZjggfX0sCisgezE2LCAweGExODAsIDAsIHsweDMwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDQsMHhmYywweDAwLDB4M2QsMHgwMCwweDBmLDB4ZjAsMHgwMywweGU4IH19LAorIHsxNiwgMHhhMTkwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGY0LDB4OTAsMHhlZiwweDAwLDB4M2YsMHhkOCB9fSwKKyB7MTYsIDB4YTFhMCwgMCwgezB4MGUsMHhmMywweDAzLDB4MmMsMHgwMSwweGQ0LDB4ODAsMHgzNywweGNjLDB4MGQsMHg4OSwweDQzLDB4MTIsMHg1MCwweGVjLDB4MmMgfX0sCisgezE2LCAweGExYjAsIDAsIHsweDMyLDB4MDUsMHgwZCwweGIwLDB4NTMsMHgzYywweGQ0LDB4YzUsMHg5NCwweDdmLDB4YTAsMHg4ZiwweGYwLDB4NDMsMHgzMCwweDAwIH19LAorIHsxNiwgMHhhMWMwLCAwLCB7MHhkYywweDAwLDB4MzMsMHgwMCwweDBjLDB4NDgsMHgwNywweGYwLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTFkMCwgMCwgezB4ODAsMHgxMCwweGU2LDB4NDAsMHg4YiwweDcwLDB4MmYsMHhkYywweDA4LDB4ZjcsMHgwMiwweDBjLDB4ODAsMHg4YSwweDIwLDB4MDAgfX0sCisgezE2LCAweGExZTAsIDAsIHsweGM4LDB4NGEsMHgyMiwweDAyLDB4YTAsMHgwMCwweDhhLDB4NDgsMHgyMiwweDU4LDB4ODgsMHhmZCwweDAyLDB4YWQsMHgwMiwweGE5IH19LAorIHsxNiwgMHhhMWYwLCAwLCB7MHgyMCwweDFlLDB4YTAsMHgwMywweDgwLDB4MDIsMHgyYywweDA0LDB4OGIsMHgwMCwweDIyLDB4YzAsMHg0YywweDg4LDB4MDcsMHg2MCB9fSwKKyB7MTYsIDB4YTIwMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjMCwweDAwLDB4MjMsMHgyYywweDJjLDB4YzkgfX0sCisgezE2LCAweGEyMTAsIDAsIHsweDAyLDB4MzAsMHgwMiwweDBjLDB4NjgsMHhhMCwweDI4LDB4MmMsMHhkMCwweDA5LDB4MTIsMHgwMiwweDg0LDB4MDAsMHhhMCwweDIxIH19LAorIHsxNiwgMHhhMjIwLCAwLCB7MHgyMCwweDE4LDB4MTksMHgzMCwweDIyLDB4ODAsMHhkMCwweDgzLDB4MDYsMHgwYywweGEwLDB4MGIsMHhiMCwweDA2LDB4MDAsMHgxMiB9fSwKKyB7MTYsIDB4YTIzMCwgMCwgezB4YTAsMHgwMCwweDIwLDB4MDAsMHgyOSwweDAwLDB4MGUsMHhhMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGEyNDAsIDAsIHsweGMwLDB4MTEsMHhhOCwweDMwLDB4OGIsMHgwMCwweDJlLDB4YzAsMHg0YSwweDMwLDB4MGEsMHgyYywweDE0LDB4YTAsMHg4MCwweDBhIH19LAorIHsxNiwgMHhhMjUwLCAwLCB7MHhjMSwweDA4LDB4ODgsMHg4NiwweDg3LDB4MDAsMHg4MywweDAwLDB4MjIsMHg0OSwweDA4LDB4YjAsMHgwNiwweGEwLDB4NDAsMHhhYiB9fSwKKyB7MTYsIDB4YTI2MCwgMCwgezB4MjAsMHgyMiwweDIwLDB4MGIsMHg4MCwweDBhLDB4MGMsMHgwNCwweGFiLDB4MDIsMHgyMiwweGMwLDB4ODgsMHg4MCwweDAyLDB4ZjAgfX0sCisgezE2LCAweGEyNzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWYsMHg0MCwweGViLDB4MDYsMHgzZSwweGMwIH19LAorIHsxNiwgMHhhMjgwLCAwLCB7MHgwZSwweGIwLDB4MDMsMHgyYywweDAyLDB4ZjksMHhhMCwweDNlLDB4YzAsMHgwZCwweDhjLDB4MDMsMHhhYSwweDEwLDB4ZTksMHg0MCB9fSwKKyB7MTYsIDB4YTI5MCwgMCwgezB4YjIsMHg0OCwweDBkLDB4YjAsMHg0MywweGFkLDB4MDAsMHhjYiwweDg2LDB4MmUsMHgyMCwweDBmLDB4MzAsMHgwMywweDI0LDB4MDAgfX0sCisgezE2LCAweGEyYTAsIDAsIHsweGY5LDB4ODAsMHgzMiwweGMwLDB4MGQsMHgwYywweGMyLDB4OTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMmIwLCAwLCB7MHhlMCwweDAxLDB4OTQsMHgwMCwweGZmLDB4MDAsMHgzZCwweGMwLDB4MGQsMHhmMCwweDAzLDB4N2MsMHgwMCwweGRmLDB4MDAsMHgzNyB9fSwKKyB7MTYsIDB4YTJjMCwgMCwgezB4YzAsMHgwZiwweGUwLDB4MDMsMHhmMCwweDAwLDB4ZmUsMHgyMCwweDNmLDB4NDAsMHgwZiwweDcwLDB4MDMsMHhmZSwweDAwLDB4ZmYgfX0sCisgezE2LCAweGEyZDAsIDAsIHsweDgyLDB4N2YsMHgwMCwweDBmLDB4YzAsMHgwMywweGY5LDB4MDQsMHhkZSwweDIwLDB4YmQsMHgwMCwweDBmLDB4ZDksMHgwYiwweDdjIH19LAorIHsxNiwgMHhhMmUwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDEsMHhjYiwweDAwLDB4M2UsMHhjMCB9fSwKKyB7MTYsIDB4YTJmMCwgMCwgezB4MmMsMHhiMCwweDBiLDB4MmMsMHgwMCwweGU4LDB4NDAsMHgzZSwweGMwLDB4MGYsMHg5NCwweDA3LDB4MjksMHgwMCwweGM5LDB4NDAgfX0sCisgezE2LCAweGEzMDAsIDAsIHsweGIyLDB4YzAsMHgwZiwweGIwLDB4MDMsMHgwMSwweDAyLDB4Y2IsMHgwMCwweDMyLDB4MDQsMHg0ZiwweGYwLDB4NDMsMHgzNCwweGMwIH19LAorIHsxNiwgMHhhMzEwLCAwLCB7MHhiNSwweDFhLDB4M2YsMHhjMSwweDBmLDB4ODAsMHg5MywweGQwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTMyMCwgMCwgezB4YzgsMHgwNSwweDI4LDB4MDAsMHg4ZiwweDAwLDB4MmYsMHhjMCwweDA4LDB4ZjAsMHgwMiwweDNjLDB4MDQsMHhkOCwweDAwLDB4MmIgfX0sCisgezE2LCAweGEzMzAsIDAsIHsweGMwLDB4MGMsMHg4MCwweDQ1LDB4NjAsMHgwMCwweDdiLDB4NTgsMHgyMiwweGM4LDB4MGIsMHhmYSwweDAxLDB4NjEsMHg0MCwweDhiIH19LAorIHsxNiwgMHhhMzQwLCAwLCB7MHgwMCwweDMyLDB4MDQsMHg0YiwweGNlLDB4MDIsMHgyOCwweDAwLDB4M2EsMHg0MCwweDJlLDB4MDcsMHgwYiwweDkwLDB4MDIsMHgyNiB9fSwKKyB7MTYsIDB4YTM1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4ODMsMHgwMSwweDRjLDB4YzAgfX0sCisgezE2LCAweGEzNjAsIDAsIHsweDBiLDB4MzAsMHgwMiwweGVjLDB4MTAsMHg5MCwweDAwLDB4MmEsMHhjMCwweDBhLDB4ODAsMHgwNiwweGMwLDB4MDQsMHg4MywweDA0IH19LAorIHsxNiwgMHhhMzcwLCAwLCB7MHhhMiwweDg5LDB4MTksMHgzMCwweDA2LDB4Y2MsMHgwMCwweDgzLDB4MDAsMHgyMCwweDkwLDB4MGIsMHgzMCwweGMyLDB4NDgsMHgwMCB9fSwKKyB7MTYsIDB4YTM4MCwgMCwgezB4YjIsMHg0MCwweDI0LDB4MjAsMHgwYiwweDA5LDB4MDAsMHhiOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGEzOTAsIDAsIHsweDIwLDB4MDEsMHgwNiwweDA0LDB4ODcsMHhhNCwweDJkLDB4ZTAsMHgwOSwweDM4LDB4MDIsMHhkZSwweDAwLDB4OWUsMHg4MSwweDI5IH19LAorIHsxNiwgMHhhM2EwLCAwLCB7MHhlMCwweDA4LDB4NzgsMHg1MiwweGZhLDB4YzAsMHg5NiwweDgwLDB4MDEsMHhhMCwweDhiLDB4M2EsMHgyMiwweGNlLDB4NDAsMHg4ZiB9fSwKKyB7MTYsIDB4YTNiMCwgMCwgezB4YjAsMHgyNSwweGEwLDB4MGIsMHgwOCwweDAyLDB4NTYsMHgwOCwweGI1LDB4OTAsMHgyZCwweGU0LDB4NGIsMHhkOCwweDIyLDB4MGMgfX0sCisgezE2LCAweGEzYzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MDgsMHgwMiwweDgzLDB4ODAsMHgyZSwweGU4IH19LAorIHsxNiwgMHhhM2QwLCAwLCB7MHgwYiwweDM4LDB4MTMsMHhjZSwweDQxLDB4ZDMsMHgxMCwweDI4LDB4YzAsMHgwZSwweDNhLDB4MDIsMHhjNiwweDA4LDB4NGIsMHg0MCB9fSwKKyB7MTYsIDB4YTNlMCwgMCwgezB4MzAsMHg2MCwweDBkLDB4M2IsMHgyNywweGNmLDB4YzQsMHhjMywweGEwLDB4MzAsMHgwMCwweDBmLDB4MzAsMHg0MywweDQ4LDB4NDAgfX0sCisgezE2LCAweGEzZjAsIDAsIHsweGYyLDB4MDAsMHgzYywweDA0LDB4MGYsMHgwMiwweDAzLDB4OTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNDAwLCAwLCB7MHg0MCwweDFkLDB4YjgsMHgwMCwweGZmLDB4MDAsMHgzZiwweGM0LDB4MGUsMHhmMSwweDAzLDB4M2MsMHgwMCwweGZmLDB4MDEsMHgzMyB9fSwKKyB7MTYsIDB4YTQxMCwgMCwgezB4YzAsMHg0ZCwweGIxLDB4MDcsMHg3YywweDkwLDB4ZmYsMHgwMCwweDNmLDB4NDAsMHgwMywweGYxLDB4MDMsMHg3MCwweDAwLDB4ZmIgfX0sCisgezE2LCAweGE0MjAsIDAsIHsweDEwLDB4M2IsMHgwMCwweDBmLDB4YzAsMHgwYiwweGI0LDB4MDAsMHhmZCwweDAwLDB4M2YsMHhjNCwweDBmLDB4ZDAsMHgwMywweDkwIH19LAorIHsxNiwgMHhhNDMwLCAwLCB7MHgwMiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVjLDB4MDQsMHhmYiwweDg0LDB4M2EsMHhjMiB9fSwKKyB7MTYsIDB4YTQ0MCwgMCwgezB4NGMsMHhiNCwweDkzLDB4MmMsMHgwNCwweGU5LDB4MDAsMHgzYSwweGM0LDB4OGQsMHgwOCwweDAzLDB4MmUsMHgwMCwweGNiLDB4MDEgfX0sCisgezE2LCAweGE0NTAsIDAsIHsweDMyLDB4ODAsMHg4ZiwweGIyLDB4ODMsMHhlYywweDAwLDB4Y2IsMHg4MCwweDMyLDB4MDAsMHgwZiwweGY5LDB4MDMsMHgzYywweDEwIH19LAorIHsxNiwgMHhhNDYwLCAwLCB7MHhkZiwweDgxLDB4YjMsMHhlMCwweDhjLDB4YTAsMHgwMywweGVhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTQ3MCwgMCwgezB4NDgsMHgxMSwweDk0LDB4MDgsMHhiNywweDA0LDB4MjQsMHhjOCwweDFhLDB4MzAsMHg0YSwweDFkLDB4MDAsMHhiNywweDAxLDB4MmQgfX0sCisgezE2LCAweGE0ODAsIDAsIHsweGMwLDB4ODgsMHg3MCwweDA2LDB4MWMsMHgwMCwweDgyLDB4MDAsMHgyMSwweDgwLDB4NGIsMHg3NiwweDEyLDB4ZGMsMHgwMCwweDg3IH19LAorIHsxNiwgMHhhNDkwLCAwLCB7MHgwMCwweDI5LDB4NDAsMHg4YiwweDQwLDB4MDIsMHgxMCwweDAwLDB4YmMsMHgwMCwweDIwLDB4MDEsMHgyOCwweDcwLDB4MDMsMHhiMiB9fSwKKyB7MTYsIDB4YTRhMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5YSwweDAwLDB4YjMsMHg5MCwweDJkLDB4ZTQgfX0sCisgezE2LCAweGE0YjAsIDAsIHsweDA5LDB4NzksMHgwMiwweDFlLDB4ODAsMHhhNywweDgwLDB4MmMsMHhlOCwweDE5LDB4ZjgsMHgxMiwweDVlLDB4MDEsMHg4NywweDgwIH19LAorIHsxNiwgMHhhNGMwLCAwLCB7MHgyNSwweGUwLDB4NGIsMHg3OCwweDA2LDB4ZDIsMHgwMCwweDk3LDB4ODAsMHgyMSwweDYyLDB4MGIsMHgzYSwweDAyLDB4MWUsMHgwMCB9fSwKKyB7MTYsIDB4YTRkMCwgMCwgezB4YjcsMHg4NiwweDI5LDB4ZjAsMHgwOCwweDY4LDB4MDYsMHhlMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE0ZTAsIDAsIHsweDQ4LDB4MTQsMHhjZiwweGMwLDB4YjMsMHgwMCwweDI0LDB4YzAsMHg4YSwweDMwLDB4MzIsMHgwYywweDAwLDB4YjMsMHgwOCwweDJjIH19LAorIHsxNiwgMHhhNGYwLCAwLCB7MHhjMCwweDA4LDB4MzAsMHgxMiwweDBlLDB4MjAsMHg4MywweDAwLDB4MjQsMHhmMSwweDBiLDB4MzAsMHgwNiwweGNlLDB4MDAsMHg4MyB9fSwKKyB7MTYsIDB4YTUwMCwgMCwgezB4OTAsMHgyOCwweDYwLDB4MGIsMHgwMCwweDJhLDB4MjEsMHg4MCwweGIwLDB4MDgsMHgyOCwweDAwLDB4MDgsMHgzNywweDAyLDB4OTIgfX0sCisgezE2LCAweGE1MTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YjksMHgwMCwweGZhLDB4MDAsMHgzZSwweDgwIH19LAorIHsxNiwgMHhhNTIwLCAwLCB7MHg0ZCwweGEwLDB4MDMsMHgyOCwweDAwLDB4ZWUsMHg0MSwweDNlLDB4ODAsMHgwZCwweGUwLDB4MDMsMHg3OCwweDAwLDB4OGUsMHg0MCB9fSwKKyB7MTYsIDB4YTUzMCwgMCwgezB4MjcsMHhhOCwweDBiLDB4YTAsMHgwMywweGZiLDB4MDIsMHhjYSwweDgyLDB4MzMsMHhhMCwweDBmLDB4YTAsMHgxMywweDI5LDB4MDAgfX0sCisgezE2LCAweGE1NDAsIDAsIHsweGZhLDB4NDAsMHgzYSwweDgwLDB4MGMsMHg2YywweDAzLDB4ZmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNTUwLCAwLCB7MHg0OCwweDAwLDB4YzAsMHgwMCwweGY4LDB4MDAsMHgzYSwweDAwLDB4MGMsMHg4MCwweDAzLDB4ZTAsMHgwOCwweGY4LDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4YTU2MCwgMCwgezB4MDAsMHg4ZiwweDgwLDB4MjMsMHhhMCwweDQyLDB4ZjgsMHgwOSwweGJhLDB4MTAsMHg0ZiwweDgwLDB4MDMsMHhlMCwweDYwLDB4ZjggfX0sCisgezE2LCAweGE1NzAsIDAsIHsweDAwLDB4M2UsMHgyMCwweDBmLDB4YzAsMHgwMywweGYwLDB4MDAsMHhmYywweDAwLDB4MjcsMHgwMCwweDhmLDB4ODAsMHgwMywweDkyIH19LAorIHsxNiwgMHhhNTgwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU1LDB4MDAsMHg4OSwweDAwLDB4M2UsMHg0MCB9fSwKKyB7MTYsIDB4YTU5MCwgMCwgezB4NmUsMHg5MCwweDAzLDB4YTQsMHgwOCwweGM5LDB4MDAsMHgzYywweDQwLDB4MGQsMHg5MCwweDAzLDB4MjQsMHgxMCwweGY5LDB4YTAgfX0sCisgezE2LCAweGE1YTAsIDAsIHsweDMyLDB4NDIsMHgwYywweDkwLDB4MTMsMHhjNCwweDAwLDB4YzksMHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNCwweDQwIH19LAorIHsxNiwgMHhhNWIwLCAwLCB7MHhjOSwweDIwLDB4M2UsMHg1MiwweGNmLDB4OTAsMHgwOSwweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTVjMCwgMCwgezB4ODAsMHgwNCwweDY2LDB4MDAsMHg4OSwweDA0LDB4MmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDAsMHhkOSwweDAwLDB4M2EgfX0sCisgezE2LCAweGE1ZDAsIDAsIHsweDQxLDB4MDgsMHg5MCwweDA1LDB4YTQsMHgwMCwweGI5LDB4NDAsMHhhMiwweDQwLDB4MGQsMHg5MCwweDAyLDB4ZTUsMHg0NiwweDg5IH19LAorIHsxNiwgMHhhNWUwLCAwLCB7MHgwMCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MTIsMHhlNSwweDAwLDB4YTksMHhjOCwweDJlLDB4NjEsMHg4YiwweDk0LDB4NDIsMHgyMCB9fSwKKyB7MTYsIDB4YTVmMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHgyNCwweDAwLDB4YTksMHgwMCwweDZjLDB4NDAgfX0sCisgezE2LCAweGE2MDAsIDAsIHsweDQ4LDB4MTAsMHgyMiwweDg0LDB4MDMsMHhhOSwweDAwLDB4MmUsMHg0MCwweDA5LDB4OTAsMHgwMiwweGU0LDB4MDQsMHhiMSwweDA4IH19LAorIHsxNiwgMHhhNjEwLCAwLCB7MHgyOCwweDQwLDB4MTgsMHg5OCwweDAyLDB4ZTUsMHgwMCwweDg5LDB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4ZjQsMHgyMCB9fSwKKyB7MTYsIDB4YTYyMCwgMCwgezB4OGQsMHgwMCwweDJmLDB4NDAsMHgwYiwweDk0LDB4NDIsMHg4NiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE2MzAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4YTEsMHgyNCwweDJjLDB4NDgsMHgxOCwweDEyLDB4MDIsMHgwNCwweDgwLDB4YTEsMHgwMCwweDI4IH19LAorIHsxNiwgMHhhNjQwLCAwLCB7MHg0OCwweDA4LDB4MTAsMHgwMiwweDg0LDB4MDAsMHg5MSwweDIwLDB4MjAsMHg0OCwweDA5LDB4MTIsMHgwMiwweGM0LDB4OTQsMHg4MSB9fSwKKyB7MTYsIDB4YTY1MCwgMCwgezB4MDAsMHgyYywweDYxLDB4MGIsMHg1YSwweDgyLDB4ZDQsMHhhMCwweGE1LDB4MjgsMHgyZCwweDRhLDB4MGIsMHg5MCwweDAyLDB4ODIgfX0sCisgezE2LCAweGE2NjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMiwweGU4LDB4NTAsMHgyZSwweDE0IH19LAorIHsxNiwgMHhhNjcwLCAwLCB7MHgwZSwweDg1LDB4MDMsMHhhMSwweDQwLDB4YTgsMHg1MCwweDNlLDB4MTQsMHgwZCwweDg1LDB4MDEsMHg4MSwweDQwLDB4ZjgsMHg1MiB9fSwKKyB7MTYsIDB4YTY4MCwgMCwgezB4MzIsMHg5NCwweDBjLDB4ODAsMHgxMywweGMxLDB4NDIsMHhjMCwweDUxLDB4M2UsMHgwMCwweDhmLDB4ODIsMHgwMywweGUwLDB4ODAgfX0sCisgezE2LCAweGE2OTAsIDAsIHsweGM4LDB4MjAsMHgzZiwweDA4LDB4MGYsMHg4MCwweDAzLDB4YWUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNmEwLCAwLCB7MHg5OCwweDE5LDB4ZjQsMHg1MCwweGQ5LDB4MTEsMHgzZSwweDQ0LDB4OGYsMHg5MSwweDQzLDB4ZTQsMHg0MCwweGRkLDB4MDAsMHgzYSB9fSwKKyB7MTYsIDB4YTZiMCwgMCwgezB4NDQsMHg0ZiwweGQwLDB4MjcsMHhiNCwweDAwLDB4ZmQsMHgxMiwweDNmLDB4NDQsMHg0ZiwweDkxLDB4NDMsMHhmNCwweDQwLDB4ZmQgfX0sCisgezE2LCAweGE2YzAsIDAsIHsweDAwLDB4M2YsMHg0MSwweDBmLDB4OTIsMHg4MywweGU0LDB4YTAsMHhmOSwweDI4LDB4M2UsMHg0YSwweDBmLDB4ZDAsMHgwMywweDY2IH19LAorIHsxNiwgMHhhNmQwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgxMSwweGY2LDB4ODAsMHhlOSwweGMwLDB4M2UsMHg3OCB9fSwKKyB7MTYsIDB4YTZlMCwgMCwgezB4OGYsMHg5YiwweDAzLDB4YTcsMHg4MCwweGM5LDB4NDAsMHgzNiwweDc4LDB4MGYsMHgxMCwweDIzLDB4ZTUsMHgwNCwweGRkLDB4YTQgfX0sCisgezE2LCAweGE2ZjAsIDAsIHsweDMzLDB4NjIsMHgwZiwweGRhLDB4MDMsMHhmNiwweDYwLDB4YzksMHgxMCwweDMzLDB4NDAsMHgwZSwweDk4LDB4OTMsMHhlNiwweDMwIH19LAorIHsxNiwgMHhhNzAwLCAwLCB7MHhjOSwweGM5LDB4MzIsMHg3OCwweDhjLDB4ZDAsMHgwYiwweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTcxMCwgMCwgezB4MzgsMHgxMCwweGUwLDB4MDAsMHg4OCwweGUyLDB4MmUsMHgzMCwweDBiLDB4ODgsMHg0MiwweDIzLDB4NDAsMHhhMCwweGExLDB4MjIgfX0sCisgezE2LCAweGE3MjAsIDAsIHsweDM4LDB4MGIsMHg4YSwweDAyLDB4ZTIsMHg4MCwweGFhLDB4ZTAsMHgyMiwweDMwLDB4MGIsMHg4MCwweDIzLDB4YWIsMHgwMiwweDg4IH19LAorIHsxNiwgMHhhNzMwLCAwLCB7MHhhMCwweDJhLDB4MDAsMHgwYiwweDhjLDB4MDIsMHhlMywweDAwLDB4ODgsMHhlMCwweDIzLDB4MzgsMHgwOCwweDgwLDB4MDIsMHgwZSB9fSwKKyB7MTYsIDB4YTc0MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNSwweDAwLDB4YTEsMHg0NCwweDI4LDB4NTggfX0sCisgezE2LCAweGE3NTAsIDAsIHsweDQzLDB4MTYsMHgyMiwweDg0LDB4ODEsMHg4MSwweDIwLDB4MmMsMHg1OCwweDQ5LDB4MTAsMHg4MCwweGM0LDB4ODEsMHg5MSwweDQ4IH19LAorIHsxNiwgMHhhNzYwLCAwLCB7MHg2YywweDRhLDB4MGIsMHgxNCwweDAyLDB4NDQsMHg4NCwweDgxLDB4MDEsMHg2MCwweDQwLDB4MGEsMHg1MiwweDg2LDB4ZDQsMHhhMCB9fSwKKyB7MTYsIDB4YTc3MCwgMCwgezB4ODUsMHgwMCwweGExLDB4NTAsMHg2OCwweDkwLDB4MDYsMHhkMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE3ODAsIDAsIHsweDE4LDB4MDUsMHhhNiwweDAwLDB4ODksMHgwMCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHgwNCwweDAwLDB4YTksMHg2MCwweDIyIH19LAorIHsxNiwgMHhhNzkwLCAwLCB7MHg0MCwweDBiLDB4OTUsMHgwMiwweGU0LDB4MTAsMHhiMSwweDAwLDB4NGUsMHg0MCwweDBiLDB4OTAsMHg2NiwweGFjLDB4ODAsMHg4OSB9fSwKKyB7MTYsIDB4YTdhMCwgMCwgezB4MDAsMHgyYSwweDYwLDB4MGIsMHg5MCwweDUyLDB4ZjQsMHgwMCwweDg1LDB4MDAsMHgyMSwweDQwLDB4MDgsMHg5MCwweDAyLDB4YzYgfX0sCisgezE2LCAweGE3YjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDA1LDB4ZTYsMHgyMCwweGU5LDB4MDAsMHgzZSwweDQwIH19LAorIHsxNiwgMHhhN2MwLCAwLCB7MHgwZiwweDkwLDB4MDMsMHhhNCwweDEwLDB4YzksMHgwMCwweDM2LDB4NDAsMHgwZiwweDk0LDB4MDEsMHhlNSwweDIwLDB4ZDksMHg0MCB9fSwKKyB7MTYsIDB4YTdkMCwgMCwgezB4YmEsMHg2OCwweDhmLDB4OTAsMHgwNywweGU2LDB4MDAsMHhjOSwweDEwLDB4MzIsMHg2MiwweDBlLDB4OTAsMHgwMiwweGU0LDB4MTggfX0sCisgezE2LCAweGE3ZTAsIDAsIHsweGM5LDB4MDAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDAzLDB4ZTgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhN2YwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwMCwweGY5LDB4MDQsMHgzZSwweDQwLDB4MGIsMHg5MCwweDAzLDB4NjQsMHgwMCwweGY5LDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4YTgwMCwgMCwgezB4NDAsMHg4ZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZTksMHgwMiwweDcyLDB4NjgsMHgwZiwweDkwLDB4MDMsMHhlNiwweDAwLDB4ZjkgfX0sCisgezE2LCAweGE4MTAsIDAsIHsweDAxLDB4M2UsMHg0MiwweDBmLDB4OTAsMHgwMywweGM0LDB4MDIsMHhmOSwweDA0LDB4M2UsMHg0MCwweDRmLDB4OTAsMHgwMywweDFhIH19LAorIHsxNiwgMHhhODIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwMCwweDgwLDB4MDIsMHhjOCwweDAwLDB4MzIsMHgwMCB9fSwKKyB7MTYsIDB4YTgzMCwgMCwgezB4MGMsMHg4MCwweDAzLDB4NjAsMHgwMCwweGM4LDB4NDAsMHgzNiwweDAwLDB4MGYsMHg4NCwweDAzLDB4YTAsMHgwMCwweGQ4LDB4NTAgfX0sCisgezE2LCAweGE4NDAsIDAsIHsweGIyLDB4MTAsMHg4YywweDgxLDB4MDMsMHhjMSwweDIwLDB4YzgsMHgwMCwweDNlLDB4MDAsMHgwZiwweGMwLDB4MTMsMHhmMCwweDA0IH19LAorIHsxNiwgMHhhODUwLCAwLCB7MHg0YywweDAwLDB4M2YsMHgwMCwweDBmLDB4ODAsMHgwMywweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTg2MCwgMCwgezB4MjgsMHgxNSwweDJhLDB4MDAsMHg4YSwweDA0LDB4MjIsMHg4MSwweDI4LDB4YTAsMHgxMiwweDI4LDB4MDAsMHg4YSwweDAxLDB4MzYgfX0sCisgezE2LCAweGE4NzAsIDAsIHsweDgwLDB4MGIsMHhhMCwweDEwLDB4MjgsMHgxMCwweGNlLDB4MDEsMHgyMywweDgxLDB4MGMsMHhhOCwweDEyLDB4ZmIsMHgwMCwweDhhIH19LAorIHsxNiwgMHhhODgwLCAwLCB7MHgwMSwweDNiLDB4ODAsMHg4MywweGEwLDB4NDIsMHhlOCwweDEwLDB4OGEsMHgwMCwweDJmLDB4ODAsMHgwYiwweDYwLDB4NDIsMHgwYSB9fSwKKyB7MTYsIDB4YTg5MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4ODMsMHgwMCwweGEwLDB4YzAgfX0sCisgezE2LCAweGE4YTAsIDAsIHsweDE4LDB4YjAsMHgwMCwweGNjLDB4MDAsMHg5YiwweDAwLDB4MjQsMHhjMCwweDBiLDB4MzAsMHgwNiwweDZjLDB4MDAsMHhhMywweDA4IH19LAorIHsxNiwgMHhhOGIwLCAwLCB7MHgyOCwweGM4LDB4MDksMHgzMCwweDAyLDB4Y2MsMHg0MywweDhiLDB4MDAsMHgyYywweDgwLDB4MGIsMHgzMCwweDAyLDB4Y2MsMHgwMiB9fSwKKyB7MTYsIDB4YThjMCwgMCwgezB4ODMsMHgwMSwweDJjLDB4YzAsMHg0YiwweDMwLDB4MDAsMHg0YSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE4ZDAsIDAsIHsweGEwLDB4MDEsMHgwYywweDI0LDB4ODcsMHg5NCwweDIxLDB4ZTQsMHgxOCwweDMxLDB4MDIsMHhkYywweDgwLDB4OTcsMHgxMCwweDI1IH19LAorIHsxNiwgMHhhOGUwLCAwLCB7MHhjZCwweDBiLDB4ZjIsMHgwMiwweDdjLDB4MDAsMHhhMCwweDAwLDB4MjgsMHhlMCwweDE4LDB4NzAsMHgwMiwweGRjLDB4MDEsMHg4NyB9fSwKKyB7MTYsIDB4YThmMCwgMCwgezB4MzQsMHgyOSwweDQwLDB4MDksMHg0MCwweDAyLDB4ZDAsMHgwNCwweDg0LDB4MDQsMHgyZCwweDAwLDB4NGIsMHhkMCwweDIyLDB4NjggfX0sCisgezE2LCAweGE5MDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MTYsMHgwMCwweGNmLDB4YTAsMHg3MCwweGU5IH19LAorIHsxNiwgMHhhOTEwLCAwLCB7MHgxOCwweDdiLDB4MDMsMHhmZiwweDQwLDB4OTcsMHhhMCwweDM1LDB4ZTgsMHgwZiwweDc0LDB4MDIsMHg1ZSwweDIwLDB4ZTQsMHg4MCB9fSwKKyB7MTYsIDB4YTkyMCwgMCwgezB4MzksMHhhMCwweDJkLDB4NzgsMHgwMywweGZlLDB4MDAsMHhjNywweDgwLDB4M2QsMHhlMCwweDVmLDB4NjgsMHg0MywweGMyLDB4MDAgfX0sCisgezE2LCAweGE5MzAsIDAsIHsweGM0LDB4ODQsMHgxZCwweDYwLDB4MGYsMHg3OCwweDAzLDB4NmEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhOTQwLCAwLCB7MHgwOCwweDBkLDB4YTQsMHgwMCwweDNiLDB4MDAsMHgyZSwweGQ4LDB4MGYsMHhiNCwweDAzLDB4MmQsMHg4YSwweGViLDB4NjIsMHgzYSB9fSwKKyB7MTYsIDB4YTk1MCwgMCwgezB4ZDAsMHgwZiwweGIyLDB4ODcsMHgwYywweGQwLDB4ZDgsMHgwMCwweDMyLDB4YzAsMHg0ZiwweDkwLDB4NDMsMHhlYywweDAwLDB4ZmIgfX0sCisgezE2LCAweGE5NjAsIDAsIHsweDA4LDB4M2UsMHg0MCwweDhmLDB4OTAsMHgwMywweGZjLDB4MDAsMHhmZiwweDA0LDB4M2YsMHg4MCwweDBmLDB4MDAsMHgyYiwweDgyIH19LAorIHsxNiwgMHhhOTcwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGY2LDB4MDAsMHhmZiwweGEwLDB4M2UsMHhmNCB9fSwKKyB7MTYsIDB4YTk4MCwgMCwgezB4MGUsMHhiOCwweDAzLDB4ZWUsMHgwOCwweDRiLDB4ZjAsMHg3ZiwweGY0LDB4MGMsMHhmOSwweDIzLDB4ZWUsMHg0OCwweDc4LDB4OTAgfX0sCisgezE2LCAweGE5OTAsIDAsIHsweDMyLDB4ZTQsMHgwYywweGY5LDB4MDMsMHhmZSwweDAwLDB4ZmYsMHg4MCwweDNmLDB4ZTQsMHgxYywweDc5LDB4MDMsMHgyZSwweDQwIH19LAorIHsxNiwgMHhhOWEwLCAwLCB7MHhmZiwweDgwLDB4MzMsMHhlMCwweDJjLDB4NzgsMHgwNywweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTliMCwgMCwgezB4YTgsMHgxMSwweDk0LDB4MDAsMHhiMywweDAwLDB4MGMsMHhlNSwweDBiLDB4MzgsMHgwMiwweGZlLDB4ODAsMHg4ZiwweDgwLDB4NjEgfX0sCisgezE2LCAweGE5YzAsIDAsIHsweGM0LDB4MjgsMHg3OCwweDAwLDB4NGUsMHgwMCwweGY0LDB4ODQsMHgyNSwweGE4LDB4MGMsMHg3MCwweDAyLDB4Y2MsMHgwNCwweGIzIH19LAorIHsxNiwgMHhhOWQwLCAwLCB7MHg5MCwweDI1LDB4NDAsMHgwYywweDQxLDB4ODMsMHg1MiwweDQwLDB4YjQsMHgxMCwweGEzLDB4MDAsMHgwYywweDUyLDB4MDMsMHg2YSB9fSwKKyB7MTYsIDB4YTllMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5NCwweDAwLDB4YjcsMHgyMSwweDZkLDB4YzggfX0sCisgezE2LCAweGE5ZjAsIDAsIHsweDRiLDB4NzAsMHgwMiwweGRjLDB4NDIsMHhhNywweDMxLDB4MjksMHhjNCwweDA4LDB4NzIsMHgwMiwweGRjLDB4MDAsMHhiNywweDI4IH19LAorIHsxNiwgMHhhYTAwLCAwLCB7MHgyNCwweDgwLDB4MDgsMHg3MCwweDA2LDB4ZDQsMHgyMCwweGI3LDB4MDEsMHgyZCwweGMxLDB4MDgsMHg2MCwweDAyLDB4NTAsMHg4MCB9fSwKKyB7MTYsIDB4YWExMCwgMCwgezB4YjQsMHgwOCwweDIxLDB4NjIsMHgwOSwweDc0LDB4MDYsMHg4MCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFhMjAsIDAsIHsweDIwLDB4MTQsMHhjNywweDA0LDB4YjMsMHgwMCwweDJjLDB4YzAsMHgwYiwweGIwLDB4MDIsMHhjYywweDAwLDB4YTMsMHgwMiwweDYwIH19LAorIHsxNiwgMHhhYTMwLCAwLCB7MHhjMCwweDA4LDB4MzgsMHgwMiwweDRlLDB4NDQsMHhhMCwweGMwLDB4MjQsMHg5MSwweDA4LDB4MzAsMHgwMiwweGMwLDB4MDAsMHhiMyB9fSwKKyB7MTYsIDB4YWE0MCwgMCwgezB4MDAsMHgyNCwweDYwLDB4MDgsMHgxYywweDAyLDB4NGMsMHg4OCwweGIzLDB4YzAsMHgyMCwweGEwLDB4MDgsMHgwMCwweDBhLDB4ODggfX0sCisgezE2LCAweGFhNTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YWMsMHgwMCwweGZmLDB4MDAsMHgyZiwweGMwIH19LAorIHsxNiwgMHhhYTYwLCAwLCB7MHg0ZiwweGYwLDB4MTMsMHhmYywweDA4LDB4ZTcsMHg4YSwweDNmLDB4YzAsMHgwYywweGY1LDB4YzIsMHhmZSwweDEwLDB4YmIsMHhjMCB9fSwKKyB7MTYsIDB4YWE3MCwgMCwgezB4MzIsMHhkNCwweDBjLDB4MzAsMHgxMywweGUzLDB4MDQsMHhiZiwweDAwLDB4MmUsMHg2MiwweDA4LDB4YjksMHgwMiwweDZlLDB4MDAgfX0sCisgezE2LCAweGFhODAsIDAsIHsweGZiLDB4MDEsMHgzMiwweGE0LDB4NGQsMHg5NCwweDAyLDB4YWIsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhYTkwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHg2MCwweGZiLDB4MDAsMHgxZSwweGMwLDB4MGYsMHhiMCwweDEzLDB4ZWMsMHgwMCwweDViLDB4MDAsMHgzYSB9fSwKKyB7MTYsIDB4YWFhMCwgMCwgezB4YzAsMHgwZiwweGIwLDB4NDEsMHhlYywweDAwLDB4N2IsMHg0NSwweGJhLDB4NDAsMHgyZSwweGIwLDB4MTUsMHhlMCwweDAxLDB4ZmIgfX0sCisgezE2LCAweGFhYjAsIDAsIHsweDAwLDB4M2UsMHg1MCwweDBlLDB4YzAsMHgwMywweGYwLDB4NDAsMHhmYywweDIwLDB4M2YsMHg1MCwweDhmLDB4OTAsMHgwMSwweDYwIH19LAorIHsxNiwgMHhhYWMwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGY0LDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCB9fSwKKyB7MTYsIDB4YWFkMCwgMCwgezB4OGYsMHhmMCwweDAzLDB4MWMsMHgwMiwweGNmLDB4MDAsMHgzNiwweGMwLDB4MGQsMHhmMCwweDAzLDB4N2MsMHgwMCwweDdmLDB4MmEgfX0sCisgezE2LCAweGFhZTAsIDAsIHsweDNmLDB4ODAsMHgwZiwweGY4LDB4MTMsMHg5MCwweDIxLDB4Y2YsMHgwMCwweDNmLDB4NjIsMHgwYywweGUwLDB4MDMsMHgzMCwweDAwIH19LAorIHsxNiwgMHhhYWYwLCAwLCB7MHhmOCwweDAwLDB4M2YsMHgwMCwweDBmLDB4ZDAsMHgwMywweDgwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWIwMCwgMCwgezB4ODEsMHgwNCwweDY0LDB4MTEsMHhiYiwweDAwLDB4MmUsMHhjMCwweDBiLDB4YjAsMHgwMiwweDJjLDB4MDAsMHhkYiwweDA0LDB4MzIgfX0sCisgezE2LCAweGFiMTAsIDAsIHsweGMwLDB4MGUsMHhiMCwweDAyLDB4ZWMsMHgwMCwweGJiLDB4ODQsMHgyZSwweDQwLDB4MGIsMHhiOSwweDQyLDB4MjIsMHg0MiwweDhiIH19LAorIHsxNiwgMHhhYjIwLCAwLCB7MHgwMSwweDJjLDB4NzIsMHgwYSwweDkwLDB4NDIsMHgyYywweDAwLDB4YmIsMHgwMCwweDJlLDB4YzIsMHg4ZiwweDg4LDB4MDYsMHhlMCB9fSwKKyB7MTYsIDB4YWIzMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDEsMHgyNCwweDAwLDB4YmIsMHgwMCwweDZlLDB4YzAgfX0sCisgezE2LCAweGFiNDAsIDAsIHsweDQ4LDB4YjAsMHg0MiwweDJjLDB4MDAsMHg4YiwweDAwLDB4MjYsMHhjMCwweDBhLDB4YjAsMHgxMiwweGVjLDB4MDAsMHhiYiwweDQwIH19LAorIHsxNiwgMHhhYjUwLCAwLCB7MHgyZSwweGM4LDB4MGIsMHhiMCwweDEyLDB4MmMsMHgwMCwweDhiLDB4MDAsMHgyZSwweDQ4LDB4MGEsMHgzMCwweDAyLDB4NmMsMHgwMCB9fSwKKyB7MTYsIDB4YWI2MCwgMCwgezB4YmIsMHgwMCwweDJlLDB4ODAsMHg0YiwweDk4LDB4MDIsMHhlMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFiNzAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDAwLDB4YjMsMHgwMCwweDZjLDB4YzIsMHg0YiwweDMxLDB4MDIsMHgwYywweDUwLDB4OWIsMHgyMCwweDIwIH19LAorIHsxNiwgMHhhYjgwLCAwLCB7MHhjMCwweDBhLDB4MzIsMHgxMiwweGNjLDB4ODAsMHhiMywweDAwLDB4NmMsMHgwYywweDBiLDB4MzEsMHgwMiwweDBjLDB4NDIsMHg4MyB9fSwKKyB7MTYsIDB4YWI5MCwgMCwgezB4MDgsMHgyZSwweDQwLDB4MGEsMHgwMCwweDAyLDB4MDAsMHg4MCwweGIwLDB4MDAsMHgyYywweDQxLDB4MGIsMHgxMCwweDAyLDB4NDIgfX0sCisgezE2LCAweGFiYTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NjQsMHgwMCwweGJiLDB4NDAsMHgzZiwweGNjIH19LAorIHsxNiwgMHhhYmIwLCAwLCB7MHgwZSwweGYwLDB4ODMsMHgzZCwweGEwLDB4Y2YsMHgyMCwweDM3LDB4YzAsMHgwYywweGY3LDB4YzMsMHhmZCwweDQ4LDB4ZjMsMHgwMCB9fSwKKyB7MTYsIDB4YWJjMCwgMCwgezB4M2UsMHg4OCwweDBmLDB4YjQsMHgxMywweGE1LDB4MDAsMHg4ZiwweDMwLDB4M2UsMHg0MCwweDBjLDB4YTAsMHgwMywweDYwLDB4ODAgfX0sCisgezE2LCAweGFiZDAsIDAsIHsweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg5MCwweDIzLDB4YzAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhYmUwLCAwLCB7MHhhMCwweDE5LDB4ZjQsMHgwMCwweGZmLDB4MjksMHgzZiwweGM5LDB4MGYsMHhmMCwweDEzLDB4ZmMsMHg5NCwweGVmLDB4MTIsMHgzYiB9fSwKKyB7MTYsIDB4YWJmMCwgMCwgezB4YzAsMHg4ZSwweGIyLDB4MDcsMHhmZCwweDA0LDB4ZmYsMHgxMCwweDNmLDB4MGMsMHgwZiwweGYwLDB4MDMsMHhmMCwweDAwLDB4ZmIgfX0sCisgezE2LCAweGFjMDAsIDAsIHsweDIwLDB4M2QsMHg0MCwweDBmLDB4ZDAsMHg0MywweGZjLDB4NDAsMHhmZiwweDA0LDB4M2YsMHhjMCwweDBlLDB4YzAsMHg0MywweGU4IH19LAorIHsxNiwgMHhhYzEwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZjLDB4YTIsMHhjNywweDIwLDB4M2YsMHgyNCB9fSwKKyB7MTYsIDB4YWMyMCwgMCwgezB4MGMsMHhmMCwweDAzLDB4M2MsMHg4MCwweGNjLDB4MDksMHgzMywweGQxLDB4MGMsMHhmMSwweDIzLDB4ZmMsMHgyMCwweGRmLDB4MzYgfX0sCisgezE2LCAweGFjMzAsIDAsIHsweDNmLDB4YzAsMHgwZSwweDQ4LDB4MDMsMHhmZSwweDAwLDB4ZmYsMHg4MCwweDM3LDB4ZTQsMHgwZCwweDc4LDB4MDMsMHgxMSwweGEwIH19LAorIHsxNiwgMHhhYzQwLCAwLCB7MHhjZiwweDAwLDB4MzcsMHhjOCwweDBjLDB4ZjAsMHgwMywweDMwLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWM1MCwgMCwgezB4ODAsMHgxMCwweGZmLDB4MDAsMHg4ZiwweGQxLDB4MmUsMHgwOCwweDBkLDB4YjYsMHgxMiwweDNkLDB4NDUsMHhmOSwweDY0LDB4MjcgfX0sCisgezE2LCAweGFjNjAsIDAsIHsweGQwLDB4ODgsMHhiYSwweDE0LDB4Y2MsMHgwNCwweDhmLDB4NDAsMHgyMywweGYwLDB4MGIsMHg4OCwweDAyLDB4MmUsMHgwNCwweGJiIH19LAorIHsxNiwgMHhhYzcwLCAwLCB7MHg4MCwweGFlLDB4YzAsMHgwOCwweGI4LDB4MGEsMHgyMSwweDAwLDB4ODgsMHhkMCwweDIyLDB4MjAsMHgyOCwweGIwLDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4YWM4MCwgMCwgezB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDAwLDB4OTMsMHgwMCwweDJlLDB4MDAgfX0sCisgezE2LCAweGFjOTAsIDAsIHsweDBhLDB4MzQsMHg4MiwweDhjLDB4YTAsMHhhMCwweDA4LDB4MjQsMHhkOCwweDA5LDB4MzEsMHgwMiwweGNjLDB4MjAsMHhiMywweDMyIH19LAorIHsxNiwgMHhhY2EwLCAwLCB7MHgyOCwweGQwLDB4NGEsMHg4MCwweDAyLDB4Y2MsMHgwYywweGJiLDB4MDAsMHgyMiwweDQwLDB4ODksMHhiMCwweDAyLDB4NjAsMHg4MCB9fSwKKyB7MTYsIDB4YWNiMCwgMCwgezB4OTMsMHgwMCwweDI0LDB4ZDAsMHgwYiwweDMwLDB4MDIsMHhhMiwweDAxLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFjYzAsIDAsIHsweGMwLDB4MTEsMHhhYywweDAwLDB4OWIsMHgwMCwweDJlLDB4MjAsMHgwOSwweGIwLDB4NGEsMHgyYywweDAyLDB4YTAsMHgwMCwweDA2IH19LAorIHsxNiwgMHhhY2QwLCAwLCB7MHhjMCwweDA5LDB4YjAsMHgwMCwweGVjLDB4MDAsMHhhYiwweDAwLDB4MmEsMHhjMCwweDBiLDB4ODgsMHgwMiwweDZjLDB4MDAsMHhiYiB9fSwKKyB7MTYsIDB4YWNlMCwgMCwgezB4MjAsMHgyYSwweGUyLDB4NDEsMHhiOCwweDJhLDB4NjAsMHgwYSwweDk4LDB4MDAsMHgyNiwweDAwLDB4MGIsMHhiMCwweDAyLDB4YjggfX0sCisgezE2LCAweGFjZjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWMsMHgwOCwweGRiLDB4MDIsMHgzZSwweDIwIH19LAorIHsxNiwgMHhhZDAwLCAwLCB7MHg0YywweGIwLDB4MDMsMHgyYywweDAyLDB4OGIsMHgyMCwweDEyLDB4YzAsMHgyOSwweGIwLDB4MTIsMHhlYywweDAwLDB4ZmIsMHgwMCB9fSwKKyB7MTYsIDB4YWQxMCwgMCwgezB4M2EsMHhjMCwweDBlLDB4ODgsMHgwMywweGVkLDB4MjAsMHhmYiwweGM4LDB4MzQsMHhmMCwweDBkLDB4YmEsMHgwMywweDQ3LDB4NjAgfX0sCisgezE2LCAweGFkMjAsIDAsIHsweGM5LDB4MDAsMHgzNiwweDQwLDB4MGYsMHhiMCwweDBiLDB4OTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhZDMwLCAwLCB7MHhlMCwweDAxLDB4OWMsMHgwMCwweGVmLDB4MDAsMHgwZiwweDAwLDB4MGYsMHgzMCwweDAwLDB4ZmMsMHgwMCwweGRmLDB4OTAsMHhiYiB9fSwKKyB7MTYsIDB4YWQ0MCwgMCwgezB4YzAsMHhjZSwweGYwLDB4MDMsMHhmYywweDA0LDB4Y2IsMHgwMCwweDE3LDB4YzAsMHgwZiwweGMwLDB4MDMsMHhiYywweDg0LDB4ZmYgfX0sCisgezE2LCAweGFkNTAsIDAsIHsweDAwLDB4MzcsMHhjMCwweDBlLDB4ZDAsMHg2MywweGI4LDB4MDAsMHhlYSwweDAwLDB4M2EsMHg4MCwweDBjLDB4MzAsMHgwMywweDcwIH19LAorIHsxNiwgMHhhZDYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDAsMHhmYiwweDAyLDB4MzIsMHgwMCB9fSwKKyB7MTYsIDB4YWQ3MCwgMCwgezB4MGYsMHhiMCwweDUzLDB4MmMsMHgwMCwweGZhLDB4MDAsMHgzMiwweGMwLDB4OGYsMHhiMCwweDA3LDB4MmMsMHgwMCwweGZiLDB4MDAgfX0sCisgezE2LCAweGFkODAsIDAsIHsweGIyLDB4YzAsMHgwZiwweDgwLDB4MDcsMHhhYywweDgwLDB4ZGIsMHgyNCwweDdlLDB4ZDAsMHgwZSwweGIwLDB4MjMsMHg3NCwweDA0IH19LAorIHsxNiwgMHhhZDkwLCAwLCB7MHhkZCwweDA4LDB4YjUsMHg0MCwweDBjLDB4YjAsMHgwMywweDEwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWRhMCwgMCwgezB4YzgsMHgwNSwweDNjLDB4MDAsMHhiZiwweGMwLDB4YTAsMHgwMCwweDFiLDB4ZjAsMHgwMiwweDNmLDB4NjAsMHhlYSwweDUwLDB4MjMgfX0sCisgezE2LCAweGFkYjAsIDAsIHsweGMwLDB4MDgsMHhmYSwweDA3LDB4ZmMsMHgwMCwweGRmLDB4MDAsMHg2MywweGMwLDB4NDgsMHgxOCwweDAyLDB4MmQsMHgwMCwweGIzIH19LAorIHsxNiwgMHhhZGMwLCAwLCB7MHgwMCwweDZlLDB4YzAsMHgwZCwweDNhLDB4MDMsMHgyNCwweDAwLDB4ODIsMHg4MCwweDMyLDB4ODAsMHgwZCwweGYwLDB4MDMsMHgzMiB9fSwKKyB7MTYsIDB4YWRkMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDE0LDB4YjMsMHg1OSwweDIwLDB4ODAgfX0sCisgezE2LCAweGFkZTAsIDAsIHsweDA5LDB4MzAsMHgwMiwweDJlLDB4MDUsMHhiMCwweDQ0LDB4MmUsMHhjMCwweDA5LDB4MzQsMHg4MiwweGVjLDB4MDAsMHhhYiwweDA0IH19LAorIHsxNiwgMHhhZGYwLCAwLCB7MHgyMCwweGMwLDB4MDksMHgyMSwweGIyLDB4OGUsMHgwNCwweDkzLDB4YzAsMHgyNCwweGMwLDB4MGEsMHgxOCwweDA2LDB4NGMsMHgwMCB9fSwKKyB7MTYsIDB4YWUwMCwgMCwgezB4OTIsMHg1MCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHg3MCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFlMTAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDAwLDB4YjcsMHg4MCwweDYxLDB4ZTAsMHgwYiwweDc4LDB4MGEsMHg1ZSwweDAxLDB4YjEsMHhhMCwweDJkIH19LAorIHsxNiwgMHhhZTIwLCAwLCB7MHhlMCwweDBhLDB4NzgsMHgwMiwweDVlLDB4MDAsMHgwNywweDkwLDB4MjEsMHhlMCwweDE4LDB4YzgsMHgwMiwweDFlLDB4MDAsMHhiNyB9fSwKKyB7MTYsIDB4YWUzMCwgMCwgezB4ODAsMHgyZCwweGUwLDB4OGEsMHhkOCwweDAyLDB4M2UsMHhjMCwweDg1LDB4ODAsMHgyMSwweDIwLDB4MTksMHg3OCwweDIyLDB4MDAgfX0sCisgezE2LCAweGFlNDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweGYzLDB4OTQsMHgyMCwweDEwIH19LAorIHsxNiwgMHhhZTUwLCAwLCB7MHg0YiwweDMwLDB4MDcsMHgwYywweDAwLDB4ZjMsMHgwMCwweDNlLDB4YzgsMHgwZiwweDMwLDB4MDMsMHhjYywweDAwLDB4MjMsMHgxMCB9fSwKKyB7MTYsIDB4YWU2MCwgMCwgezB4MDAsMHhjYiwweDA1LDB4MjAsMHgwMiwweDhjLDB4NjAsMHg5MywweDBhLDB4MmUsMHhjNCwweDBhLDB4MDEsMHgwNywweDRjLDB4ODAgfX0sCisgezE2LCAweGFlNzAsIDAsIHsweGQyLDB4MDEsMHgzMCwweGMwLDB4MmMsMHgzMCwweDBiLDB4NWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhZTgwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwMCwweGZmLDB4MDEsMHgwZiwweDQwLDB4MGYsMHhmMCwweDEzLDB4YmMsMHgwMCwweGVmLDB4MjYsMHg3MyB9fSwKKyB7MTYsIDB4YWU5MCwgMCwgezB4YzIsMHgwYywweGIwLDB4ODMsMHhiYywweDQwLDB4ZmYsMHgxOCwweDNkLDB4YzAsMHg0YSwweGMxLDB4MDMsMHhmYywweDAwLDB4ZmIgfX0sCisgezE2LCAweGFlYTAsIDAsIHsweDEyLDB4M2YsMHhjNCwweDRkLDB4YzEsMHgwYiwweGZjLDB4ODEsMHhmZCwweDAwLDB4M2YsMHgyMCwweDBmLDB4ZjAsMHgwMywweGQwIH19LAorIHsxNiwgMHhhZWIwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVjLDB4MjAsMHhjYiwweDQ4LDB4M2UsMHgwMCB9fSwKKyB7MTYsIDB4YWVjMCwgMCwgezB4MGMsMHhiMCwweDAzLDB4MmQsMHgyMCwweGU5LDB4ODAsMHhmYSwweGM4LDB4MGQsMHhiMCwweDAzLDB4ZWUsMHgwMCwweGRiLDB4MjQgfX0sCisgezE2LCAweGFlZDAsIDAsIHsweDc2LDB4ZjMsMHg4ZSwweDgwLDB4MzMsMHhlYywweDQ0LDB4ZWIsMHgxMCwweDNlLDB4YzAsMHgwZiwweDkwLDB4MDMsMHhlOCwweDA0IH19LAorIHsxNiwgMHhhZWUwLCAwLCB7MHhkYywweDAwLDB4YjMsMHg2MSwweDBjLDB4YjAsMHgwMywweDJhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWVmMCwgMCwgezB4NDgsMHgxMSwweDhkLDB4MDAsMHg4NywweDIwLDB4MmYsMHgwMSwweDI4LDB4NzAsMHgwMiwweDBjLDB4ODQsMHg4ZCwweDA0LDB4MzEgfX0sCisgezE2LCAweGFmMDAsIDAsIHsweGNjLDB4YzksMHg3MiwweDAyLDB4ZGQsMHgwMCwweDM3LDB4MzMsMHgyMSwweGQ4LDB4MDgsMHg0MCwweDAyLDB4ZGMsMHgwMCwweGI3IH19LAorIHsxNiwgMHhhZjEwLCAwLCB7MHgyMCwweDNkLDB4YzAsMHgwOSwweDUwLDB4MjIsMHhmMCwweDAwLDB4OTcsMHgwMCwweDIxLDB4ODAsMHgwYSwweGZjLDB4MDIsMHg5MiB9fSwKKyB7MTYsIDB4YWYyMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgxZSwweDgyLDB4ODcsMHhiMCwweDJkLDB4MjAgfX0sCisgezE2LCAweGFmMzAsIDAsIHsweDA4LDB4MzksMHgwMiwweDFlLDB4NDEsMHhhNywweDgwLDB4MjQsMHhlMCwweDA5LDB4N2EsMHgzMiwweDhlLDB4ODIsMHgwNywweGEwIH19LAorIHsxNiwgMHhhZjQwLCAwLCB7MHgyNSwweGUwLDB4OGIsMHg0OCwweDAyLDB4MWUsMHgwMCwweGE3LDB4ZTEsMHgyZCwweGUwLDB4NGIsMHg1OCwweDAwLDB4ZGEsMHgwMCB9fSwKKyB7MTYsIDB4YWY1MCwgMCwgezB4YTAsMHg4MCwweDI0LDB4NjAsMHgwOCwweDdhLDB4MDIsMHgzMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFmNjAsIDAsIHsweDQ4LDB4MTQsMHhjYywweDAwLDB4ODMsMHgwMCwweDJjLDB4MDAsMHgwOCwweDMwLDB4MDIsMHg4YywweDAwLDB4OTMsMHgwMCwweDIyIH19LAorIHsxNiwgMHhhZjcwLCAwLCB7MHhjMSwweDA5LDB4MzAsMHg0MiwweGNjLDB4MDAsMHg4MywweDAwLDB4NjAsMHhjMCwweDA4LDB4MWEsMHgwMiwweGNlLDB4MDQsMHhiMyB9fSwKKyB7MTYsIDB4YWY4MCwgMCwgezB4ZTAsMHgyOCwweGEwLDB4MDksMHgxYywweDgyLDB4NGIsMHgwOCwweGEzLDB4ODAsMHgyNCwweGEwLDB4MmEsMHgzMCwweDAyLDB4OWEgfX0sCisgezE2LCAweGFmOTAsIDAsIHsweDA0LDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweGNhLDB4MDAsMHgyZiwweDg4IH19LAorIHsxNiwgMHhhZmEwLCAwLCB7MHgwYywweGEwLDB4MTMsMHgyOCwweDAwLDB4ZWUsMHgwMCwweDJlLDB4ODAsMHgyZCwweGEwLDB4MDMsMHhlOCwweDAwLDB4ZGEsMHgwMCB9fSwKKyB7MTYsIDB4YWZiMCwgMCwgezB4NzYsMHg4MCwweDBlLDB4ZTgsMHgwMywweGJiLDB4ODAsMHhlZSwweDQwLDB4MmYsMHhhMiwweDhmLDB4ZTYsMHgwMywweGViLDB4ODYgfX0sCisgezE2LCAweGFmYzAsIDAsIHsweGZhLDB4ODAsMHgzNywweDgyLDB4MGMsMHgyMCwweDA3LDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhZmQwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4NDAsMHgxZSwweDAwLDB4MGYsMHg4MCwweDBiLDB4NjEsMHgwMCwweGU4LDB4YzAsMHgzYSB9fSwKKyB7MTYsIDB4YWZlMCwgMCwgezB4MDAsMHgwZSwweDgwLDB4MDMsMHhlMCwweDAxLDB4ZjgsMHgwMCwweDdlLDB4MTAsMHgxZSwweDgxLDB4MDMsMHhlMCwweDA4LDB4ZjggfX0sCisgezE2LCAweGFmZjAsIDAsIHsweDAwLDB4M2UsMHgwMCwweDBkLDB4ODAsMHgwMywweGMwLDB4MjgsMHhkYywweDUwLDB4M2IsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyIH19LAorIHsxNiwgMHhiMDAwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGM0LDB4MDIsMHhjOSwweDAwLDB4M2UsMHg0MiB9fSwKKyB7MTYsIDB4YjAxMCwgMCwgezB4MGYsMHgxMCwweDAzLDB4YTYsMHgwMCwweGM5LDB4MDEsMHgzYSwweDQwLDB4MGUsMHg5NCwweDAxLDB4ZTQsMHgxMCwweGYxLDB4MDQgfX0sCisgezE2LCAweGIwMjAsIDAsIHsweDMyLDB4NDAsMHgwZiwweDlhLDB4MjMsMHgyMCwweDYwLDB4ZjgsMHgwNCwweDBhLDB4NDIsMHgwZSwweDkwLDB4MTMsMHgyNCwweDAwIH19LAorIHsxNiwgMHhiMDMwLCAwLCB7MHhjMSwweDAwLDB4MzIsMHg0MCwweDBmLDB4OTAsMHgwMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjA0MCwgMCwgezB4ODAsMHgwNCwweDY3LDB4MDgsMHhhOSwweDAwLDB4NmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweDI3LDB4ODIsMHg4OSwweDAwLDB4MjYgfX0sCisgezE2LCAweGIwNTAsIDAsIHsweDQwLDB4MDgsMHg5YywweDAzLDB4YTQsMHgxMCwweGI5LDB4MDAsMHgzNiwweDQwLDB4OWIsMHgxYywweDFhLDB4MjMsMHgwNCwweGI4IH19LAorIHsxNiwgMHhiMDYwLCAwLCB7MHgwMCwweDNhLDB4NDAsMHgwZSwweDEwLDB4MDIsMHgyNCwweDAyLDB4YzksMHhhMCwweGEyLDB4NDAsMHgwYiwweDkwLDB4MGEsMHgyMCB9fSwKKyB7MTYsIDB4YjA3MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNSwweDgwLDB4ODksMHgwNCwweDJjLDB4NDAgfX0sCisgezE2LCAweGIwODAsIDAsIHsweDA4LDB4OTAsMHgwMiwweDg0LDB4ODEsMHg5OSwweDQwLDB4MmUsMHg0MCwweDFhLDB4OTAsMHgwNiwweGU0LDB4MDEsMHhiOSwweDAwIH19LAorIHsxNiwgMHhiMDkwLCAwLCB7MHhhNiwweDQxLDB4MWIsMHg5MCwweDgyLDB4MjEsMHgwMCwweGI4LDB4MTAsMHgyZSwweDQwLDB4MGEsMHg5MiwweDBhLDB4YTQsMHgwMSB9fSwKKyB7MTYsIDB4YjBhMCwgMCwgezB4OGYsMHgyMiwweDIzLDB4NDAsMHgwYiwweDkwLDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIwYjAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4YTMsMHgyMCwweDJjLDB4NDEsMHgwOSwweDEyLDB4MDIsMHgwNCwweDgwLDB4ODEsMHgyMCwweDI0IH19LAorIHsxNiwgMHhiMGMwLCAwLCB7MHg0OCwweDBhLDB4MzYsMHgwMiwweGM0LDB4ODAsMHhiMSwweDIwLDB4MDQsMHhjOCwweDRiLDB4MTQsMHgwMiwweDA1LDB4MDAsMHhiMSB9fSwKKyB7MTYsIDB4YjBkMCwgMCwgezB4MDUsMHgyOCwweDUwLDB4MGEsMHg5MCwweDAyLDB4MDUsMHgwMiwweDg1LDB4MDAsMHgyMSwweDQwLDB4MGIsMHgxMiwweDAyLDB4MDIgfX0sCisgezE2LCAweGIwZTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGM4LDB4MDAsMHg2ZSwweDE0IH19LAorIHsxNiwgMHhiMGYwLCAwLCB7MHgyYywweDg1LDB4MDIsMHhhMSwweDQwLDB4YzgsMHg1MCwweDNhLDB4MTQsMHgwZSwweDgwLDB4MDIsMHhlMSwweDQwLDB4YjAsMHg1MCB9fSwKKyB7MTYsIDB4YjEwMCwgMCwgezB4MzIsMHgwMCwweDBiLDB4ODAsMHgwMywweDIwLDB4MDAsMHhmYSwweDAwLDB4M2UsMHgwMCwweDBlLDB4ODAsMHgwMywweGEwLDB4MDIgfX0sCisgezE2LCAweGIxMTAsIDAsIHsweGM4LDB4MDAsMHgxMywweDAwLDB4MGYsMHg4MiwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMTIwLCAwLCB7MHg5OCwweDFkLDB4ZTQsMHg0OCwweGY5LDB4MTQsMHgzZiwweDQwLDB4MGMsMHg5MSwweDAzLDB4ZTQsMHg0MiwweGZkLDB4MTAsMHgzNiB9fSwKKyB7MTYsIDB4YjEzMCwgMCwgezB4NDQsMHgwZCwweDkxLDB4MjMsMHhhNCwweDQ4LDB4ZjksMHgxMSwweDM4LDB4NDQsMHgwZiwweGQwLDB4MDMsMHhlNSwweDE0LDB4MzkgfX0sCisgezE2LCAweGIxNDAsIDAsIHsweDQyLDB4N2IsMHg0MCwweDhlLDB4ZDAsMHgwMSwweGY1LDB4MDAsMHhhOSwweDQwLDB4M2UsMHg1MCwweDA3LDB4OTYsMHg4MywweGU2IH19LAorIHsxNiwgMHhiMTUwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMSwweGY2LDB4ODAsMHhkZCwweGFlLDB4M2EsMHg1MCB9fSwKKyB7MTYsIDB4YjE2MCwgMCwgezB4MGQsMHg5YSwweDBiLDB4NzYsMHg4MCwweGNmLDB4ODgsMHgzMiwweDcwLDB4MmQsMHhkYSwweDAzLDB4YTcsMHgwMSwweGU5LDB4OTIgfX0sCisgezE2LCAweGIxNzAsIDAsIHsweDM3LDB4NjgsMHgwZCwweDk0LDB4MDMsMHhlNywweDAwLDB4ZWQsMHhhMCwweDNhLDB4NTAsMHgwZiwweGQwLDB4MDMsMHhlNywweDAyIH19LAorIHsxNiwgMHhiMTgwLCAwLCB7MHhjZCwweDgwLDB4MzMsMHg2OCwweDBjLDB4ZDgsMHg4MywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjE5MCwgMCwgezB4MzgsMHgxMCwweGUxLDB4MDAsMHg4OCwweDQwLDB4MjAsMHgyMCwweDBjLDB4OGMsMHgwMiwweDIzLDB4MDAsMHg4OCwweGUwLDB4MjIgfX0sCisgezE2LCAweGIxYTAsIDAsIHsweDMwLDB4MDgsMHg4NCwweDAyLDB4ZTMsMHgwMCwweGI4LDB4ZTAsMHgyMiwweDE0LDB4OGQsMHg4OCwweDAyLDB4ZTMsMHgwMCwweGI4IH19LAorIHsxNiwgMHhiMWIwLCAwLCB7MHg1MCwweDJlLDB4YTgsMHg4YiwweDgwLDB4MjIsMHhlMywweDQ4LDB4ODgsMHg1MCwweDIyLDB4MDAsMHgwOCwweDhjLDB4MDIsMHgwZSB9fSwKKyB7MTYsIDB4YjFjMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDQwLDB4OTEsMHgwMCwweDJhLDB4NDggfX0sCisgezE2LCAweGIxZDAsIDAsIHsweDA5LDB4MTQsMHg4MiwweDA1LDB4MjAsMHg4MSwweDA4LDB4MjAsMHg1OCwweDA5LDB4MTEsMHgwMiwweDg1LDB4ODgsMHhiMSwweDQwIH19LAorIHsxNiwgMHhiMWUwLCAwLCB7MHhhMCwweDQwLDB4MDgsMHgxMiwweDAyLDB4YzUsMHg4MCwweGExLDB4MDAsMHgyOCwweDQwLDB4MGIsMHgxOCwweDAyLDB4YzQsMHg4NCB9fSwKKyB7MTYsIDB4YjFmMCwgMCwgezB4YTEsMHgwMCwweDI0LDB4NTAsMHgwOCwweDEwLDB4OTIsMHgwMywweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIyMDAsIDAsIHsweDE4LDB4MTUsMHhhYywweDEwLDB4OWIsMHgwMCwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgwNCwweDA2LDB4ODksMHgwNCwweDIwIH19LAorIHsxNiwgMHhiMjEwLCAwLCB7MHg0MCwweDA5LDB4OTAsMHgwMiwweGU0LDB4MDEsMHhiOSwweDAyLDB4MjIsMHg0MSwweDg5LDB4YTAsMHg4MiwweGUwLDB4YTAsMHhiOSB9fSwKKyB7MTYsIDB4YjIyMCwgMCwgezB4MjgsMHgyZSwweDQ0LDB4MGIsMHhiMCwweDAyLDB4ZTQsMHgwMiwweGI5LDB4MDAsMHgyNiwweDQwLDB4MjgsMHgxMCwweDAyLDB4MDYgfX0sCisgezE2LCAweGIyMzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGQ5LDB4MDAsMHgzOCwweDQwIH19LAorIHsxNiwgMHhiMjQwLCAwLCB7MHgwZCwweDkwLDB4MDMsMHgyNCwweDAwLDB4YzksMHhhMCwweGEyLDB4NDAsMHg4ZCwweDkwLDB4MDMsMHhhNCwweDAwLDB4ZjksMHgwMCB9fSwKKyB7MTYsIDB4YjI1MCwgMCwgezB4MzYsMHg0MCwweDBjLDB4ODQsMHgxMywweGUyLDB4MDAsMHhlOSwweDAwLDB4M2EsMHg1MCwweDBmLDB4OWMsMHgwMiwweGU2LDB4ODQgfX0sCisgezE2LCAweGIyNjAsIDAsIHsweGU5LDB4MDAsMHhiNiwweDQwLDB4MGMsMHg5MCwweDAzLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMjcwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwMCwweGUxLDB4MDAsMHgzZSwweDY4LDB4MGUsMHgxMCwweDAzLDB4YTQsMHgwMCwweGYxLDB4MjgsMHgzYSB9fSwKKyB7MTYsIDB4YjI4MCwgMCwgezB4NDAsMHgwZSwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDIsMHgwZiwweDgwLDB4MjMsMHhlMiwweDAwLDB4ZjkgfX0sCisgezE2LCAweGIyOTAsIDAsIHsweDAwLDB4M2UsMHg0MCwweDBmLDB4OTEsMHgyMywweGU0LDB4NDAsMHhjMSwweDAwLDB4M2EsMHg0MCwweDBmLDB4OTAsMHgwYiwweGNhIH19LAorIHsxNiwgMHhiMmEwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweDgwLDB4MDAsMHhjOCwweDAwLDB4MzIsMHgwMCB9fSwKKyB7MTYsIDB4YjJiMCwgMCwgezB4MGMsMHg4MCwweDAzLDB4YTAsMHgyMCwweGM4LDB4NDAsMHgzZSwweDAwLDB4MGUsMHg4MSwweDYzLDB4NjAsMHgwMCwweGYwLDB4MDQgfX0sCisgezE2LCAweGIyYzAsIDAsIHsweDNjLDB4MDEsMHgwYywweDg0LDB4MDMsMHhlMCwweDAwLDB4YzgsMHgwMCwweDNlLDB4MDAsMHgwZSwweDgwLDB4MDMsMHhjMSwweDAwIH19LAorIHsxNiwgMHhiMmQwLCAwLCB7MHhkOCwweDEwLDB4MzIsMHgwMCwweDBjLDB4ODAsMHgyMywweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjJlMCwgMCwgezB4MjgsMHgwNSwweDM4LDB4NjAsMHg4ZSwweDAwLDB4MjIsMHg4MCwweDBhLDB4YTAsMHgwMiwweDM4LDB4ODAsMHhiZSwweDAwLDB4M2EgfX0sCisgezE2LCAweGIyZjAsIDAsIHsweDgwLDB4MDgsMHhlMCwweDAyLDB4MjgsMHgwMCwweGJhLDB4MDAsMHgyMywweDk4LDB4MTgsMHhlYywweDAyLDB4ZjgsMHgyMCwweGFlIH19LAorIHsxNiwgMHhiMzAwLCAwLCB7MHgwMCwweDIyLDB4ODAsMHgwYiwweGU0LDB4ODIsMHhlOCwweDAyLDB4Y2UsMHg0NCwweDI4LDB4ODAsMHgwZCwweGEwLDB4MGEsMHgwYSB9fSwKKyB7MTYsIDB4YjMxMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0MCwweDAwLDB4ODIsMHgwNCwweGEwLDB4YzAgfX0sCisgezE2LCAweGIzMjAsIDAsIHsweDA5LDB4MzAsMHgwMiwweDhlLDB4MDQsMHg4MywweDUwLDB4NmMsMHhjMCwweDBhLDB4MzAsMHg4NiwweDBjLDB4MDAsMHhiMywweDAwIH19LAorIHsxNiwgMHhiMzMwLCAwLCB7MHgyOCwweDMwLDB4MGEsMHgzNiwweDEyLDB4Y2MsMHg4MCwweDgxLDB4MDAsMHgyNCwweGMwLDB4MGIsMHgzMiwweDA2LDB4Y2MsMHgwMCB9fSwKKyB7MTYsIDB4YjM0MCwgMCwgezB4ODAsMHg4OCwweDY0LDB4NjAsMHgyOCwweDEwLDB4MDIsMHgwMiwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIzNTAsIDAsIHsweGEwLDB4MDEsMHgxMCwweDEyLDB4ODQsMHg0MCwweDIxLDB4YzgsMHgwYSwweDcyLDB4MDIsMHgxMCwweDAwLDB4YjcsMHgwMCwweDJkIH19LAorIHsxNiwgMHhiMzYwLCAwLCB7MHhjYywweDA4LDB4MzgsMHgxMiwweDFjLDB4MDAsMHhiMywweDMwLDB4MjAsMHgwMCwweDA4LDB4NzEsMHg4MiwweGZlLDB4MDAsMHhhNCB9fSwKKyB7MTYsIDB4YjM3MCwgMCwgezB4ODAsMHgyMSwweGM4LDB4MGIsMHg3MCwweDAyLDB4ZGMsMHgwMSwweDg3LDB4MDAsMHgyYywweDQyLDB4MDksMHg1MSwweDAyLDB4MjAgfX0sCisgezE2LCAweGIzODAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MTIsMHgwMCwweGMyLDB4ODAsMHgzMSwweGY4IH19LAorIHsxNiwgMHhiMzkwLCAwLCB7MHg0YywweGZjLDB4MTMsMHg5MiwweDA5LDB4YzcsMHg4MCwweDNjLDB4ZWQsMHgxZSwweDc4LDB4MjcsMHgxZSwweDAwLDB4ZjcsMHg4YyB9fSwKKyB7MTYsIDB4YjNhMCwgMCwgezB4NzksMHgyMCwweDA4LDB4N2EsMHgwMywweGRlLDB4ODEsMHg4NCwweDgwLDB4M2QsMHhlMCwweDBlLDB4NzgsMHgwMywweGZlLDB4MjAgfX0sCisgezE2LCAweGIzYjAsIDAsIHsweGM1LDB4ODEsMHgzNSwweDYwLDB4MmMsMHg1OCwweDAzLDB4MmEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiM2MwLCAwLCB7MHgwOCwweDFkLDB4ODAsMHgwMCwweGY4LDB4MDQsMHgzZSwweGQwLDB4MGYsMHhiMCwweDEzLDB4ZTAsMHgwMCwweGZiLDB4MDIsMHgzYSB9fSwKKyB7MTYsIDB4YjNkMCwgMCwgezB4ZDAsMHgwZiwweGEwLDB4MGIsMHhhYywweDQwLDB4ZmIsMHgwMCwweDNhLDB4MDAsMHgyZiwweGIwLDB4MDMsMHhjYywweDAwLDB4ZjAgfX0sCisgezE2LCAweGIzZTAsIDAsIHsweDAwLDB4M2EsMHhjNCwweDBmLDB4YjAsMHgwMywweGZjLDB4NDEsMHhmMywweDAwLDB4M2EsMHg0MCwweDBmLDB4NTAsMHg5MywweGMyIH19LAorIHsxNiwgMHhiM2YwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGY2LDB4MDAsMHhjYywweDgxLDB4M2YsMHhmYyB9fSwKKyB7MTYsIDB4YjQwMCwgMCwgezB4MWMsMHhmOCwweDAzLDB4NzYsMHg0MCwweGVmLDB4OTIsMHgzZiwweGU0LDB4OGMsMHhmOCwweDAzLDB4YmYsMHgxMCwweGZmLDB4ODAgfX0sCisgezE2LCAweGI0MTAsIDAsIHsweGIzLDB4MjAsMHgwZSwweGY5LDB4MTMsMHhmZSwweDI0LDB4ZmQsMHg5NCwweDM3LDB4ZTAsMHgxYywweGY5LDB4MDMsMHhlZSwweDAwIH19LAorIHsxNiwgMHhiNDIwLCAwLCB7MHhjZCwweDgwLDB4YjMsMHhlMCwweDBjLDB4NTgsMHgwMiwweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjQzMCwgMCwgezB4YTgsMHgxMSwweDk0LDB4NDAsMHg4MCwweDAwLDB4MmYsMHhjNCwweDA4LDB4NzIsMHgwMiwweGRkLDB4MDgsMHhkNywweDAwLDB4MmQgfX0sCisgezE2LCAweGI0NDAsIDAsIHsweGNjLDB4MDgsMHhkZSwweDAzLDB4NWMsMHgwMCwweGI3LDB4MDQsMHgyMSwweDgwLDB4YzgsMHg3MCwweDgzLDB4ZGMsMHgwMCwweGI0IH19LAorIHsxNiwgMHhiNDUwLCAwLCB7MHhhMCwweDJmLDB4YzAsMHgwYywweDcwLDB4MDIsMHhkZSwweDgwLDB4ODcsMHgwMCwweDIxLDB4YzIsMHgwYSwweDUxLDB4NDIsMHgyYSB9fSwKKyB7MTYsIDB4YjQ2MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MCwweDAwLDB4ODQsMHgwMCwweDJkLDB4YzggfX0sCisgezE2LCAweGI0NzAsIDAsIHsweDQ4LDB4NzAsMHgwMiwweDU0LDB4MGMsMHhhNywweDAwLDB4MmMsMHhjMCwweDg5LDB4NzIsMHgwMiwweDVjLDB4MDAsMHhiMywweDEwIH19LAorIHsxNiwgMHhiNDgwLCAwLCB7MHgyMCwweDAwLDB4MGEsMHg3MCwweDA2LDB4ZGMsMHgwMCwweGI0LDB4MjAsMHgyZCwweGMwLDB4MDgsMHg3MCwweDAyLDB4ZGMsMHg4MCB9fSwKKyB7MTYsIDB4YjQ5MCwgMCwgezB4OTMsMHgwMCwweDIwLDB4YzAsMHgwOCwweDUwLDB4MDIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI0YTAsIDAsIHsweDIwLDB4MTQsMHhjMCwweDAwLDB4ODAsMHgwMCwweDJlLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhjNCwweDA4LDB4YTIsMHg0MiwweDJjIH19LAorIHsxNiwgMHhiNGIwLCAwLCB7MHhjMSwweDA5LDB4MjAsMHgwMiwweDRjLDB4MDAsMHhiMywweDAwLDB4MjAsMHg4MCwweDA4LDB4M2MsMHgyMiwweDhjLDB4MjAsMHhiMCB9fSwKKyB7MTYsIDB4YjRjMCwgMCwgezB4MDgsMHgyZSwweGUwLDB4MDgsMHgzOCwweDEwLDB4Y2YsMHgwYSwweDkzLDB4NDAsMHhhMCwweGYwLDB4MGEsMHgxMCwweDAyLDB4MDggfX0sCisgezE2LCAweGI0ZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YTgsMHgwMCwweGMxLDB4MDAsMHgzZiwweGMwIH19LAorIHsxNiwgMHhiNGUwLCAwLCB7MHgyYywweGYwLDB4MDMsMHg2OCwweDAwLDB4YWEsMHgwMCwweDNmLDB4YzAsMHgyZCwweDgwLDB4MDMsMHg3YywweDAwLDB4ZmYsMHgwMCB9fSwKKyB7MTYsIDB4YjRmMCwgMCwgezB4MzIsMHgwMCwweDBlLDB4YjAsMHgxMiwweGVkLDB4MjQsMHhmYSwweDA4LDB4MjcsMHhjOCwweDEwLDB4YjgsMHhhMiwweGZmLDB4NjAgfX0sCisgezE2LCAweGI1MDAsIDAsIHsweDk4LDB4YTAsMHhhMiwweGUwLDB4MGMsMHg1MCwweDAzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNTEwLCAwLCB7MHg4MCwweDAwLDB4YzksMHgwNiwweGY4LDB4NDEsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4ZTksMHgxMCwweDVhLDB4MjAsMHgzZSB9fSwKKyB7MTYsIDB4YjUyMCwgMCwgezB4YzAsMHgwZSwweDgwLDB4MDMsMHhlYywweDAwLDB4ZjMsMHgwMCwweDdlLDB4MDEsMHgwZiwweGIwLDB4OTMsMHhlZCwweDAwLDB4ZjggfX0sCisgezE2LCAweGI1MzAsIDAsIHsweDQwLDB4M2UsMHhjMCwweDBlLDB4YjAsMHgwMywweGZjLDB4MDAsMHhlMywweDA4LDB4M2MsMHhjMiwweDBmLDB4ZDAsMHgxMywweGUwIH19LAorIHsxNiwgMHhiNTQwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGYzLDB4MDIsMHhjYywweDAwLDB4M2IsMHhjMiB9fSwKKyB7MTYsIDB4YjU1MCwgMCwgezB4MGMsMHhmMCwweDIzLDB4YWUsMHg0MCwweGRmLDB4ODEsMHgzOSwweGMwLDB4MDYsMHhkMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDQgfX0sCisgezE2LCAweGI1NjAsIDAsIHsweDMxLDB4NDEsMHgwYywweGYwLDB4MDMsMHhmYywweDAwLDB4Y2MsMHhhMCwweDM3LDB4YzIsMHgwYywweGYwLDB4MDMsMHg3YywweDA0IH19LAorIHsxNiwgMHhiNTcwLCAwLCB7MHhjZCwweDAwLDB4MzMsMHhmMCwweDBjLDB4ZDAsMHgwMywweDA4LDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjU4MCwgMCwgezB4ODEsMHgwNCwweDYwLDB4MDAsMHg4OCwweDgwLDB4MjIsMHhjMCwweDBhLDB4YjAsMHgwMiwweGU5LDB4MDAsMHhhYiwweDQ0LDB4MmUgfX0sCisgezE2LCAweGI1OTAsIDAsIHsweGMwLDB4MDgsMHg4OCwweDAyLDB4ZWMsMHgwMCwweGJiLDB4MDAsMHhhMiwweDcwLDB4MGEsMHhiNCwweDAyLDB4Y2MsMHgwMCwweGEwIH19LAorIHsxNiwgMHhiNWEwLCAwLCB7MHgyMCwweDIyLDB4YzAsMHgwZiwweGJjLDB4MDIsMHhjYywweDBhLDB4OGIsMHg4MCwweGEyLDB4YzAsMHgwZCwweDkwLDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4YjViMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyMCwweDAwLDB4ODksMHg4MCwweDJhLDB4YzAgfX0sCisgezE2LCAweGI1YzAsIDAsIHsweDA4LDB4YjAsMHgwMiwweGNjLDB4MDYsMHg4OCwweDYwLDB4MmUsMHhjMCwweDBhLDB4OTgsMHgwNiwweGVjLDB4MDEsMHhiYiwweDAwIH19LAorIHsxNiwgMHhiNWQwLCAwLCB7MHgyMiwweDMxLDB4MDIsMHhiMiwweDAyLDB4ZWMsMHhhMCwweDhhLDB4MDAsMHgyNiwweGMwLDB4NDgsMHhhOCwweDAyLDB4ZWMsMHgwNCB9fSwKKyB7MTYsIDB4YjVlMCwgMCwgezB4YTksMHg4MCwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI1ZjAsIDAsIHsweDA4LDB4MDQsMHgwMCwweDAwLDB4ODAsMHgwMCwweDIwLDB4YzAsMHgwYSwweDMwLDB4NDIsMHhjYywweDAwLDB4ODAsMHgwMSwweDJjIH19LAorIHsxNiwgMHhiNjAwLCAwLCB7MHhjMCwweDFhLDB4MTIsMHgwMiwweGNjLDB4MDAsMHhiMywweDAwLDB4MjAsMHgwMCwweDRhLDB4MzAsMHgwMiwweGNjLDB4MDAsMHhhMCB9fSwKKyB7MTYsIDB4YjYxMCwgMCwgezB4MDAsMHgwOCwweGMwLDB4MGIsMHgyMCwweDA2LDB4ZWMsMHhhMCwweGEzLDB4MDAsMHhhMCwweDQwLDB4MjksMHgxMCwweDAwLDB4MDIgfX0sCisgezE2LCAweGI2MjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NjAsMHgwMCwweGM4LDB4NTAsMHgzYiwweGMwIH19LAorIHsxNiwgMHhiNjMwLCAwLCB7MHgwYywweGIwLDB4MDMsMHhhYywweDAwLDB4YzksMHgwMCwweDNiLDB4YzAsMHgwZSwweDkyLDB4ODMsMHhmYywweDAwLDB4YmYsMHgwMCB9fSwKKyB7MTYsIDB4YjY0MCwgMCwgezB4MTIsMHgwMCwweDBjLDB4YjAsMHgwMywweGVjLDB4MDAsMHg4OCwweDI2LDB4MTYsMHhjMCwweDBjLDB4ODAsMHgxNywweDVjLDB4ODAgfX0sCisgezE2LCAweGI2NTAsIDAsIHsweGU5LDB4MDEsMHgzMiwweDQwLDB4MmMsMHhkMCwweDAzLDB4MDAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNjYwLCAwLCB7MHhhMCwweDFkLDB4ZDAsMHgwMCwweGZjLDB4MjAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZjLDB4MDAsMHgzZiB9fSwKKyB7MTYsIDB4YjY3MCwgMCwgezB4YzAsMHgwZCwweDgwLDB4MDMsMHhmYywweDA4LDB4ZmYsMHgwMCwweDNmLDB4MDAsMHgwZiwweGYwLDB4MDMsMHhmYywweDEwLDB4ZjggfX0sCisgezE2LCAweGI2ODAsIDAsIHsweDQwLDB4MzcsMHhjMCwweDBlLDB4ZTAsMHgyMSwweGZjLDB4MDgsMHhkZiwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZDAsMHgwMywweGUwIH19LAorIHsxNiwgMHhiNjkwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZjLDB4YzAsMHhmZiwweDIxLDB4NzEsMHgyNCB9fSwKKyB7MTYsIDB4YjZhMCwgMCwgezB4MGYsMHhmMSwweDgzLDB4ZjIsMHg0MCwweGZmLDB4MDAsMHgzNywweGM0LDB4OWYsMHhmMiwweDQ3LDB4M2QsMHgwNCwweGM3LDB4MjAgfX0sCisgezE2LCAweGI2YjAsIDAsIHsweDMzLDB4YzAsMHgwYywweDc4LDB4MjMsMHhmZSwweDQwLDB4ZTgsMHgxMCwweDI3LDB4YzQsMHgwZiwweGYyLDB4MTMsMHgzYywweDg0IH19LAorIHsxNiwgMHhiNmMwLCAwLCB7MHhjNCwweDgxLDB4MzMsMHgyMCwweDRjLDB4ZjAsMHgyMywweDcwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjZkMCwgMCwgezB4ODAsMHgxMCwweGVkLDB4NDAsMHhiZiwweDU0LDB4NjIsMHhjOCwweDBiLDB4ZjYsMHgwMiwweGUwLDB4MDAsMHhiYiwweGQwLDB4MjIgfX0sCisgezE2LCAweGI2ZTAsIDAsIHsweGYwLDB4MWYsMHhmOSwweDEyLDB4M2QsMHg4MCwweDlmLDB4ODEsMHgyYiwweGUwLDB4MGEsMHhiOCwweDEyLDB4ZTgsMHgwMCwweDhmIH19LAorIHsxNiwgMHhiNmYwLCAwLCB7MHgwNCwweDIyLDB4ZDAsMHgwOCwweGIzLDB4OGEsMHhiZiwweDQyLDB4OGIsMHg4MiwweDIyLDB4ZTAsMHgyOCwweDhjLDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4YjcwMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDAwLDB4YjMsMHgyOCwweDI4LDB4MDggfX0sCisgezE2LCAweGI3MTAsIDAsIHsweDBiLDB4MzAsMHgwNiwweDgwLDB4ODAsMHhiMywweDAyLDB4MjQsMHhkMSwweDBiLDB4MzAsMHgwMiwweDhkLDB4ODAsMHg5MywweDEwIH19LAorIHsxNiwgMHhiNzIwLCAwLCB7MHgyMCwweGNlLDB4OGIsMHgzMCwweDAyLDB4Y2MsMHg4NCwweGExLDB4MjEsMHgyYywweGNjLDB4MGEsMHgzMCwweDBhLDB4NGMsMHgwMCB9fSwKKyB7MTYsIDB4YjczMCwgMCwgezB4OTMsMHgwMCwweDI4LDB4YzAsMHgwOCwweDNjLDB4MDIsMHgyMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI3NDAsIDAsIHsweGMwLDB4MTUsMHhhYywweDEwLDB4YmIsMHgwMiwweDZhLDB4ZTAsMHgwYiwweGIwLDB4MDIsMHhlMSwweDA4LDB4YmIsMHgwNCwweDJhIH19LAorIHsxNiwgMHhiNzUwLCAwLCB7MHhjMCwweDBhLDB4YjAsMHgxMiwweDhjLDB4MDAsMHg5YiwweDAwLDB4MmEsMHhjMCwweDBiLDB4YjEsMHgwNiwweGM4LDB4ODAsMHg4YiB9fSwKKyB7MTYsIDB4Yjc2MCwgMCwgezB4ODIsMHg2YSwweGMxLDB4MGEsMHgzMCwweDAyLDB4YWMsMHgxOCwweDg4LDB4MTAsMHgyYSwweDQ4LDB4MDgsMHg4MCwweDAyLDB4MzAgfX0sCisgezE2LCAweGI3NzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWMsMHgwMCwweGZiLDB4MDAsMHhhYSwweDMwIH19LAorIHsxNiwgMHhiNzgwLCAwLCB7MHgwZiwweGIwLDB4MDMsMHhhOCwweDAwLDB4ZjMsMHgwMSwweGI2LDB4YzEsMHgwYiwweGIwLDB4MDIsMHhhYywweDA4LDB4NGIsMHgwMCB9fSwKKyB7MTYsIDB4Yjc5MCwgMCwgezB4YjIsMHhjMCwweDBmLDB4YjgsMHgwMiwweGVjLDB4MTAsMHhhOSwweDgxLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweDBjLDB4MDAgfX0sCisgezE2LCAweGI3YTAsIDAsIHsweGNiLDB4YTAsMHgxOCwweGQwLDB4MGMsMHhiMCwweDAzLDB4MTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiN2IwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwOCwweGY3LDB4MDAsMHgzNywweDAwLDB4MGYsMHhmMCwweDAzLDB4ZmQsMHgwMCwweGZmLDB4MDAsMHgzNyB9fSwKKyB7MTYsIDB4YjdjMCwgMCwgezB4YzAsMHgwZiwweGIwLDB4MDcsMHg3YywweDAwLDB4ZTcsMHgwMCwweDNlLDB4YzAsMHgwYSwweGYwLDB4MDMsMHhmZSwweDAwLDB4ZjcgfX0sCisgezE2LCAweGI3ZDAsIDAsIHsweDAwLDB4MzYsMHhjMCwweDBjLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZiwweDgwLDB4MzcsMHhlMCwweDBmLDB4YTAsMHgwMywweGI4IH19LAorIHsxNiwgMHhiN2UwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDAsMHhkYiwweDAwLDB4MzYsMHgwMCB9fSwKKyB7MTYsIDB4YjdmMCwgMCwgezB4MGUsMHhiMCwweDAzLDB4NjksMHgwMCwweGRiLDB4MDksMHgzYSwweGMwLDB4MWYsMHgzMCwweDIzLDB4ZWMsMHgwOCwweGNiLDB4MjAgfX0sCisgezE2LCAweGI4MDAsIDAsIHsweDM0LDB4YzAsMHgyZiwweGIwLDB4MDMsMHhlYywweDQwLDB4ZWIsMHg0OCwweDNlLDB4YzQsMHg0ZCwweGIwLDB4OGIsMHg2YywweDAwIH19LAorIHsxNiwgMHhiODEwLCAwLCB7MHhjYiwweDAwLDB4MzIsMHg5MCwweDBmLDB4MzAsMHgwMywweDkwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjgyMCwgMCwgezB4YzgsMHgwNSwweDNjLDB4MDAsMHg4ZiwweDAwLDB4MjIsMHgwMCwweDQ4LDB4ZjAsMHgyMiwweDJjLDB4MDAsMHg4ZiwweDAwLDB4MjMgfX0sCisgezE2LCAweGI4MzAsIDAsIHsweGUwLDB4OGIsMHhmNSwweDEwLDB4M2MsMHgwMCwweDhmLDB4ODAsMHgyMywweGYwLDB4ODAsMHg5OCwweDAzLDB4MmQsMHg0NCwweGRiIH19LAorIHsxNiwgMHhiODQwLCAwLCB7MHgwMCwweDIzLDB4ZDQsMHgwOCwweGY4LDB4MDIsMHgzYywweDAwLDB4ODMsMHgwMCwweDIyLDB4YzAsMHgwYiwweGE0LDB4ODIsMHgzMiB9fSwKKyB7MTYsIDB4Yjg1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4OTMsMHgwMCwweDI0LDB4MDAgfX0sCisgezE2LCAweGI4NjAsIDAsIHsweDBiLDB4MzAsMHgwMiwweDg0LDB4MDAsMHhiMywweDAxLDB4MjgsMHhmNiwweDA5LDB4MzQsMHgzMiwweDhjLDB4MDEsMHhiMywweGQwIH19LAorIHsxNiwgMHhiODcwLCAwLCB7MHgyNCwweGU4LDB4MGEsMHgzMSwweDBhLDB4ODYsMHgwMCwweDgzLDB4MDAsMHgyYSwweGUwLDB4MDAsMHgzMCwweDAyLDB4OGMsMHgwMCB9fSwKKyB7MTYsIDB4Yjg4MCwgMCwgezB4ODMsMHgwMCwweDI4LDB4YzAsMHg4OSwweDM4LDB4YTIsMHg3OCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI4OTAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDAwLDB4OTcsMHg5NCwweDIzLDB4ZTAsMHgwOSwweDM4LDB4MDIsMHgzMiwweDAwLDB4OTcsMHhhMSwweDIxIH19LAorIHsxNiwgMHhiOGEwLCAwLCB7MHhlNCwweDBiLDB4NzgsMHgwMiwweDFlLDB4NDAsMHhiNywweGEwLDB4MjUsMHhlYywweDA4LDB4ZmMsMHgwMiwweDNhLDB4MDAsMHg5MyB9fSwKKyB7MTYsIDB4YjhiMCwgMCwgezB4YjgsMHgyMSwweGUwLDB4MDgsMHg3OCwweDgyLDB4OWUsMHg0MCwweDg3LDB4YzAsMHgyOSwweGEwLDB4MGIsMHg1OCwweDAyLDB4NDggfX0sCisgezE2LCAweGI4YzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MmMsMHgwMCwweGRiLDB4MDAsMHgzNCwweDIwIH19LAorIHsxNiwgMHhiOGQwLCAwLCB7MHgwZiwweDNhLDB4MDMsMHg4ZSwweDAwLDB4ZjMsMHhiMCwweDI4LDB4YzQsMHgwYiwweDNhLDB4MDMsMHhhZSwweDQwLDB4ZjMsMHhhMCB9fSwKKyB7MTYsIDB4YjhlMCwgMCwgezB4MzQsMHhlZSwweDBmLDB4MzAsMHgyMywweDg0LDB4MDAsMHhlMywweGYwLDB4MzgsMHhjMCwweDBjLDB4YjAsMHgwYiwweDhlLDB4NDIgfX0sCisgezE2LCAweGI4ZjAsIDAsIHsweGMzLDB4MDAsMHgzOCwweGMwLDB4MGYsMHgzMCwweDYzLDB4ZDIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiOTAwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwMCwweGViLDB4NDIsMHgzYSwweGM0LDB4MWUsMHhiMSwweDA3LDB4ODgsMHhkMSwweGUzLDB4MDAsMHgzZiB9fSwKKyB7MTYsIDB4YjkxMCwgMCwgezB4YzUsMHg4ZiwweGYxLDB4NjMsMHhhYywweDEwLDB4Y2IsMHg1MCwweDNiLDB4YzMsMHgwZiwweGQxLDB4MDMsMHhjOCwweDAwLDB4YmIgfX0sCisgezE2LCAweGI5MjAsIDAsIHsweDIwLDB4M2IsMHhjMCwweDJlLDB4ZjEsMHgwMywweDFjLDB4MDAsMHhmZiwweDAwLDB4MzcsMHhjMCwweDRmLDB4ZDEsMHgwMywweDkwIH19LAorIHsxNiwgMHhiOTMwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVjLDB4NDAsMHhmYiwweDQ0LDB4YjIsMHhjMCB9fSwKKyB7MTYsIDB4Yjk0MCwgMCwgezB4NGYsMHhiMywweDQzLDB4MjQsMHgwMCwweGRiLDB4MTAsMHgzNiwweGMwLDB4NGMsMHhiZSwweDIyLDB4NmQsMHgyMCwweGNiLDB4NTAgfX0sCisgezE2LCAweGI5NTAsIDAsIHsweDNlLDB4YzksMHg0YywweGIwLDB4MTMsMHgyNCwweDAwLDB4Y2YsMHgyMCwweDMzLDB4YzAsMHgzZCwweGYwLDB4MjMsMHgyYywweGMwIH19LAorIHsxNiwgMHhiOTYwLCAwLCB7MHhkOCwweDAwLDB4M2UsMHg0MCwweDhmLDB4MzAsMHgwMywweDJhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Yjk3MCwgMCwgezB4NDgsMHgxMSwweDljLDB4MDQsMHhiNywweDYwLDB4MjEsMHhjMSwweDhiLDB4ZjAsMHhhMiwweDE0LDB4MTAsMHg4NywweDAwLDB4MGYgfX0sCisgezE2LCAweGI5ODAsIDAsIHsweGM4LDB4MGQsMHg3MSwweDBhLDB4MWQsMHgwMCwweDg3LDB4MDAsMHgyYywweGNjLDB4NDgsMHg3MCwweDJhLDB4OWMsMHgwMCwweDg3IH19LAorIHsxNiwgMHhiOTkwLCAwLCB7MHgwYywweDIxLDB4YzAsMHgwYywweDcyLDB4MDIsMHgwYywweGEyLDB4ODcsMHgwMCwweDJkLDB4YzAsMHgwYiwweDcwLDB4MDIsMHgxMiB9fSwKKyB7MTYsIDB4YjlhMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4YjMsMHg4MCwweDIxLDB4ZTAgfX0sCisgezE2LCAweGI5YjAsIDAsIHsweDBiLDB4N2EsMHgwMiwweGRlLDB4MDAsMHhiNywweDgxLDB4MDUsMHhlNCwweDA4LDB4NzksMHgwMiwweDVjLDB4ODAsMHg4NywweGEwIH19LAorIHsxNiwgMHhiOWMwLCAwLCB7MHgyZCwweGUwLDB4MDgsMHhmOCwweDA2LDB4YjYsMHgwMCwweDg3LDB4ODAsMHgyMCwweGU0LDB4MGEsMHg3YiwweDEyLDB4MWUsMHg5MCB9fSwKKyB7MTYsIDB4YjlkMCwgMCwgezB4OTcsMHg4OCwweDJkLDB4ZTAsMHgwYiwweDc4LDB4MGUsMHgzMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI5ZTAsIDAsIHsweDQ4LDB4MTQsMHhjYywweDAwLDB4YjMsMHgwMCwweDIwLDB4ZDAsMHgwYiwweGIwLDB4MDIsMHg2ZSwweDM0LDB4YTMsMHgwMCwweDJjIH19LAorIHsxNiwgMHhiOWYwLCAwLCB7MHhjMSwweDA5LDB4MzAsMHgwMiwweDRjLDB4MDAsMHg4MywweDAwLDB4MmMsMHhjMCwweDQ4LDB4MTAsMHgwMiwweDhkLDB4ODAsMHg4MyB9fSwKKyB7MTYsIDB4YmEwMCwgMCwgezB4YzAsMHgwMCwweGMwLDB4OGEsMHgzMCwweDEyLDB4MGMsMHgwMCwweDgwLDB4MDAsMHgyYywweDE2LDB4MGIsMHgzOCwweDAyLDB4MTIgfX0sCisgezE2LCAweGJhMTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweGZhLDB4MDAsMHgzMywweDg4IH19LAorIHsxNiwgMHhiYTIwLCAwLCB7MHgwZiwweGEwLDB4MDMsMHg3OSwweDkwLDB4ZmEsMHgwMSwweDM2LDB4ODAsMHgxYywweGEwLDB4MDMsMHg2OCwweDAwLDB4Y2EsMHgwMCB9fSwKKyB7MTYsIDB4YmEzMCwgMCwgezB4M2UsMHg4MSwweDJjLDB4YTAsMHgwYiwweGI5LDB4MGMsMHhjZSwweGUyLDB4YjIsMHg4MCwweDhlLDB4YTAsMHgwYiwweDI4LDB4MDAgfX0sCisgezE2LCAweGJhNDAsIDAsIHsweGRhLDB4ODAsMHgzYywweGIwLDB4MGYsMHhlMCwweDgzLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiYTUwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGYwLDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4YTAsMHgwMCwweGM4LDB4MDAsMHgyZSB9fSwKKyB7MTYsIDB4YmE2MCwgMCwgezB4MDAsMHgwZiwweDg0LDB4MjMsMHhhMCwweDAwLDB4ZjAsMHg0MCwweDNlLDB4MTAsMHgwZiwweDg0LDB4MDMsMHhlMSwweDAyLDB4ZjggfX0sCisgezE2LCAweGJhNzAsIDAsIHsweDQ4LDB4M2UsMHgxMCwweDBjLDB4ODAsMHgwMywweGMwLDB4MTAsMHhmOCwweDgwLDB4M2UsMHgwMCwweDBmLDB4MDAsMHgwMywweGQyIH19LAorIHsxNiwgMHhiYTgwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDAsMHhkOSwweDAwLDB4MzYsMHg0MiB9fSwKKyB7MTYsIDB4YmE5MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4MjQsMHgxOCwweGY5LDB4MTAsMHgzYywweDQ4LDB4NjgsMHg5MiwweDEzLDB4ZTQsMHgwMCwweGE5LDB4MTEgfX0sCisgezE2LCAweGJhYTAsIDAsIHsweGIyLDB4NjAsMHgwZSwweDkxLDB4MDMsMHgyNiwweDAwLDB4YzksMHgwMCwweDMyLDB4NjAsMHgwYywweDEwLDB4MDMsMHgyNCwweDA4IH19LAorIHsxNiwgMHhiYWIwLCAwLCB7MHhjOSwweDAwLDB4M2UsMHg0MCwweDBjLDB4OTAsMHgyMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmFjMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHg4OSwweDAwLDB4MjIsMHg0MCwweDBiLDB4OTAsMHgwMiwweGE0LDB4MDgsMHg4OSwweDAwLDB4MmUgfX0sCisgezE2LCAweGJhZDAsIDAsIHsweDQyLDB4NDgsMHg5NCwweDAyLDB4ZTQsMHgwMCwweDg5LDB4ODAsMHgyMiwweDcwLDB4MDgsMHgxNCwweDIyLDB4YTQsMHgwMiwweDg5IH19LAorIHsxNiwgMHhiYWUwLCAwLCB7MHg0MiwweDJhLDB4NzAsMHgyOCwweDkwLDB4MGEsMHgyNCwweDAwLDB4YTksMHgwMCwweDJlLDB4NDAsMHgyOCwweDkwLDB4MDIsMHhhMCB9fSwKKyB7MTYsIDB4YmFmMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgwNCwweDAwLDB4OTksMHgwMCwweDI2LDB4YzAgfX0sCisgezE2LCAweGJiMDAsIDAsIHsweDAzLDB4OTAsMHgwMiwweDI0LDB4MDEsMHhhOSwweDAwLDB4MGUsMHg0MCwweDBhLDB4OTAsMHg0NiwweGM0LDB4MGEsMHg4OSwweDAwIH19LAorIHsxNiwgMHhiYjEwLCAwLCB7MHgyMCwweDQ4LDB4MGEsMHg5MCwweDAyLDB4MDUsMHg4MCwweDgxLDB4NDEsMHhhMCwweDU4LDB4ODgsMHg5MCwweDAyLDB4MjQsMHgwOCB9fSwKKyB7MTYsIDB4YmIyMCwgMCwgezB4OGQsMHg4MCwweDJmLDB4YzAsMHgwOCwweDk4LDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJiMzAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4ODEsMHgyMCwweDIwLDB4NDAsMHgwYiwweDEyLDB4MDIsMHg4NCwweDAwLDB4ODEsMHgyNCwweDJjIH19LAorIHsxNiwgMHhiYjQwLCAwLCB7MHg1OCwweDBhLDB4MzIsMHgyMiwweGM1LDB4ODQsMHhhMSwweDAwLDB4MjAsMHg1MCwweDA4LDB4YjAsMHgwMiwweDg1LDB4MDgsMHg4MSB9fSwKKyB7MTYsIDB4YmI1MCwgMCwgezB4NDAsMHgyMCwweDVhLDB4MDgsMHgxNiwweDgyLDB4MDQsMHgwMCwweGE1LDB4MDAsMHgyZCwweDQwLDB4MDgsMHgxMiwweDgyLDB4ODIgfX0sCisgezE2LCAweGJiNjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGQ4LDB4NTAsMHgzNiwweDE0IH19LAorIHsxNiwgMHhiYjcwLCAwLCB7MHgwZiwweDg1LDB4MjMsMHgwMSwweDQwLDB4ZTgsMHgwMCwweDNlLDB4MDAsMHgwZSwweDgwLDB4NDMsMHhjMCwweDA4LDB4Y2EsMHgwMCB9fSwKKyB7MTYsIDB4YmI4MCwgMCwgezB4MzIsMHg4MCwweDBlLDB4ODAsMHgwMywweDIwLDB4MDAsMHhjMCwweDAwLDB4MzIsMHgwOCwweDJjLDB4MDIsMHgwMywweDIwLDB4MDggfX0sCisgezE2LCAweGJiOTAsIDAsIHsweGM4LDB4MDAsMHgzZiwweDAwLDB4MGMsMHg4MiwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiYmEwLCAwLCB7MHg5OCwweDFkLDB4ZTQsMHg0MCwweGY5LDB4MTAsMHgzZiwweDQwLDB4MGYsMHg5MSwweDQzLDB4ZjQsMHgwNCwweGY5LDB4MTAsMHgzZSB9fSwKKyB7MTYsIDB4YmJiMCwgMCwgezB4NDQsMHgwZCwweDExLDB4MDMsMHhlNCwweDQ0LDB4NTksMHg0MCwweDNlLDB4NTAsMHg0ZiwweDUwLDB4NDMsMHhkNCwweDAyLDB4ZmQgfX0sCisgezE2LCAweGJiYzAsIDAsIHsweDQwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwYiwweGU1LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDRmLDB4ZDAsMHgwMywweGU2IH19LAorIHsxNiwgMHhiYmQwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDY2LDB4NjAsMHhjOSwweGUwLDB4MzIsMHg0NCB9fSwKKyB7MTYsIDB4YmJlMCwgMCwgezB4MGYsMHg5YywweDAzLDB4ZTQsMHgwMCwweGRkLDB4ODQsMHgzZiwweDY4LDB4OGYsMHhkOCwweDQyLDB4ZTYsMHhhMCwweGRkLDB4YTQgfX0sCisgezE2LCAweGJiZjAsIDAsIHsweDMzLDB4NjgsMHgwZCwweDcwLDB4MDMsMHgyNSwweDAwLDB4YzksMHhlMCwweGIyLDB4NjgsMHgwYywweDlhLDB4YzMsMHgyNiwweDAwIH19LAorIHsxNiwgMHhiYzAwLCAwLCB7MHg5OSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OWEsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmMxMCwgMCwgezB4MzgsMHgxMCwweGUzLDB4MDAsMHg4OCwweDgwLDB4YWEsMHgyMCwweDhiLDB4ODgsMHgwMiwweGUyLDB4ODgsMHhiOCwweDAxLDB4MmUgfX0sCisgezE2LCAweGJjMjAsIDAsIHsweDAwLDB4MGIsMHg4NCwweDAyLDB4ZTIsMHhiMCwweDg4LDB4NTAsMHgyMiwweDE0LDB4MDgsMHg4MCwweDAyLDB4ODIsMHg4MCwweDg4IH19LAorIHsxNiwgMHhiYzMwLCAwLCB7MHhlMCwweGI2LDB4M2EsMHgwOCwweGNlLDB4YTIsMHgyMSwweDA4LDB4ODgsMHgwMCwweDJlLDB4MDAsMHgwYiwweGM0LDB4MDIsMHgwZSB9fSwKKyB7MTYsIDB4YmM0MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDgwLDB4ODEsMHg2MCwweDY4LDB4NDggfX0sCisgezE2LCAweGJjNTAsIDAsIHsweDViLDB4MTYsMHgwMiwweGM0LDB4MjAsMHhhMSwweDQwLDB4NmMsMHg1MCwweDBiLDB4MTQsMHgwMiwweGM0LDB4MDAsMHhhMSwweDAwIH19LAorIHsxNiwgMHhiYzYwLCAwLCB7MHgyNCwweDQwLDB4MGIsMHg5MCwweDIyLDB4MTQsMHg5MCwweDg1LDB4NDIsMHgyMSwweDUwLDB4NWIsMHg1MCwweDFhLDB4MTUsMHgwMCB9fSwKKyB7MTYsIDB4YmM3MCwgMCwgezB4OTUsMHgwMCwweDJkLDB4NDAsMHgwYiwweDUxLDB4MGEsMHg4MiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJjODAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAxLDB4ODksMHgwMCwweDJhLDB4NDAsMHgwYiwweDkwLDB4NDYsMHhlNCwweDAwLDB4YjksMHgwMSwweDJlIH19LAorIHsxNiwgMHhiYzkwLCAwLCB7MHg0MCwweDBiLDB4OTAsMHgyMCwweGU0LDB4MDAsMHhiOSwweDAwLDB4MjYsMHg0MCwweDE4LDB4YjgsMHgwMiwweGE0LDB4MDIsMHg4ZCB9fSwKKyB7MTYsIDB4YmNhMCwgMCwgezB4MDgsMHgyZiwweDQwLDB4OGIsMHhkMCwweDAyLDB4MjQsMHgwMCwweDhkLDB4MjAsMHgyZiwweDQ4LDB4MGIsMHhkMCwweDAyLDB4ODYgfX0sCisgezE2LCAweGJjYjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGM5LDB4MDAsMHgzMiwweDQwIH19LAorIHsxNiwgMHhiY2MwLCAwLCB7MHgwZiwweDkwLDB4MDIsMHhlNCwweDEwLDB4NDksMHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDIsMHhlNCwweDAwLDB4ZTksMHgwMSB9fSwKKyB7MTYsIDB4YmNkMCwgMCwgezB4MzYsMHg0MCwweDBmLDB4MTgsMHgxMywweDI0LDB4MTAsMHhjOSwweDgyLDB4MzIsMHg0MCwweDdmLDB4OTAsMHgyMywweDI0LDB4MDAgfX0sCisgezE2LCAweGJjZTAsIDAsIHsweGQ5LDB4MjAsMHgzZSwweDcyLDB4MGYsMHg5MCwweDAzLDB4YTgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiY2YwLCAwLCB7MHgyOCwweDAxLDB4ODQsMHgwMiwweGYxLDB4MDEsMHgxNiwweDQwLDB4NGYsMHg5MCwweDAzLDB4ZTUsMHgxMCwweGY5LDB4MDgsMHgyZSB9fSwKKyB7MTYsIDB4YmQwMCwgMCwgezB4NDAsMHgwZiwweDkwLDB4MTMsMHhlNCwweDAwLDB4YzksMHgwMSwweDNhLDB4NDAsMHgxZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjkgfX0sCisgezE2LCAweGJkMTAsIDAsIHsweDIwLDB4MzQsMHg0MCwweDhjLDB4OTAsMHgwMywweGM0LDB4MDgsMHhmOSwweDAwLDB4M2UsMHg2MCwweDBmLDB4MTAsMHgwMywweDRhIH19LAorIHsxNiwgMHhiZDIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDgsMHhmOCwweDAwLDB4M2UsMHgwMCB9fSwKKyB7MTYsIDB4YmQzMCwgMCwgezB4MGMsMHg4MCwweDAzLDB4NjAsMHgwMCwweGU4LDB4MDAsMHgzZSwweDAyLDB4NGYsMHg4MCwweDEzLDB4ZTAsMHgwMCwweGQwLDB4MDAgfX0sCisgezE2LCAweGJkNDAsIDAsIHsweDNlLDB4MDAsMHgwZSwweDgxLDB4MDMsMHgzMCwweDAwLDB4Y2MsMHg0MCwweDMzLDB4MDAsMHgwYywweGMwLDB4MGIsMHgyMCwweDIwIH19LAorIHsxNiwgMHhiZDUwLCAwLCB7MHhlOCwweDAwLDB4M2UsMHgxMCwweDBmLDB4YzAsMHgwMywweGNhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmQ2MCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDQsMHhiYSwweDAwLDB4MjIsMHg4MCwweDA4LDB4YTAsMHgwMiwweDI4LDB4MDAsMHhiZSwweGM4LDB4NmYgfX0sCisgezE2LCAweGJkNzAsIDAsIHsweDgwLDB4MGIsMHhlMSwweDIyLDB4YTgsMHgwMCwweDhlLDB4MjAsMHgyZiwweDgwLDB4MGIsMHhlMCwweDIzLDB4NjgsMHgwMCwweDhhIH19LAorIHsxNiwgMHhiZDgwLCAwLCB7MHgwMCwweDIyLDB4ODAsMHgwOCwweGUwLDB4MDIsMHgyOSwweDAwLDB4OGEsMHgwMCwweDJlLDB4YTgsMHgwYiwweGEwLDB4MDAsMHhjYSB9fSwKKyB7MTYsIDB4YmQ5MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4YjMsMHgwMCwweDI0LDB4YzAgfX0sCisgezE2LCAweGJkYTAsIDAsIHsweDA5LDB4MzAsMHgwMiwweDBjLDB4MDAsMHhiMywweGMxLDB4MmMsMHhlMCwweDBiLDB4MzgsMHg1NiwweDJjLDB4MTAsMHgxMywweDAwIH19LAorIHsxNiwgMHhiZGIwLCAwLCB7MHgyZSwweGMwLDB4MGEsMHgzOCwweDZhLDB4MjAsMHgwMCwweDg4LDB4MDAsMHgyMCwweDAwLDB4MDksMHg4MCwweDIyLDB4NGMsMHg0MiB9fSwKKyB7MTYsIDB4YmRjMCwgMCwgezB4YTMsMHgwMCwweDJjLDB4ZTAsMHgwYiwweDI0LDB4ODAsMHhjYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJkZDAsIDAsIHsweGEwLDB4MDEsMHgxYywweDA4LDB4YjcsMHgyNCwweDJmLDB4ZTAsMHgwOSwweDM5LDB4MDIsMHgxYywweDAxLDB4YjYsMHgwMCwweDJkIH19LAorIHsxNiwgMHhiZGUwLCAwLCB7MHg5MCwweDBiLDB4NjAsMHg5MiwweDhlLDB4MDAsMHg4NiwweDgyLDB4MmQsMHhjMiwweDBiLDB4ZjAsMHgwMiwweDVjLDB4MDYsMHg4NyB9fSwKKyB7MTYsIDB4YmRmMCwgMCwgezB4MDAsMHg2MCwweGMwLDB4MjksMHg3MCwweDAyLDB4NWMsMHgwMCwweDg2LDB4MDAsMHgyZCwweGMwLDB4MGIsMHg2MCwweDAyLDB4ZTggfX0sCisgezE2LCAweGJlMDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWYsMHg0MCwweGYzLDB4ZTQsMHgzZCwweGU4IH19LAorIHsxNiwgMHhiZTEwLCAwLCB7MHgwZCwweDc5LDB4MGIsMHgxZSwweGMwLDB4NjcsMHg4MCwweDJkLDB4ZTAsMHgwZiwweDcwLDB4NDMsMHgxZCwweDgwLDB4ZDUsMHgwMCB9fSwKKyB7MTYsIDB4YmUyMCwgMCwgezB4M2QsMHg2MCwweDBlLDB4NzgsMHgwMywweDFlLDB4MDAsMHhjZCwweDgwLDB4MzEsMHhlMCwweDBkLDB4YzgsMHgwMywweDRlLDB4MDAgfX0sCisgezE2LCAweGJlMzAsIDAsIHsweGU1LDB4ODAsMHgzZCwweGUwLDB4MGYsMHg0OCwweDAzLDB4ZWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiZTQwLCAwLCB7MHgwOCwweDFkLDB4YWMsMHg4MCwweGZiLDB4MDAsMHg3MCwweGMwLDB4NmUsMHhiNiwweDEzLDB4YWQsMHg0MCwweGZhLDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4YmU1MCwgMCwgezB4YzAsMHgwZiwweDIwLDB4NDMsMHgyZCwweDE4LDB4NTksMHgwMCwweDNlLDB4MDAsMHgwMywweGIwLDB4MGIsMHhlMCwweDAwLDB4ZmEgfX0sCisgezE2LCAweGJlNjAsIDAsIHsweDAwLDB4YmUsMHgwMCwweDBlLDB4YjAsMHgxMywweGFjLDB4MDAsMHhmOCwweDAwLDB4M2UsMHhjMCwweDBmLDB4ODAsMHgwMywweGMyIH19LAorIHsxNiwgMHhiZTcwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGZlLDB4NDAsMHhmZiwweDgwLDB4M2YsMHhlNiB9fSwKKyB7MTYsIDB4YmU4MCwgMCwgezB4MGYsMHhmOCwweDIzLDB4MmUsMHgwNCwweGZmLDB4OTAsMHgzZiwweGU0LDB4MGQsMHhiYSwweDAzLDB4ZmYsMHg0MCwweGNmLDB4ODAgfX0sCisgezE2LCAweGJlOTAsIDAsIHsweDIyLDB4ZTEsMHgwYywweDM5LDB4NDMsMHgzMiwweDEwLDB4ZWMsMHg5MCwweDMzLDB4MjAsMHg4ZSwweGM4LDB4MDMsMHhmMiwweDAwIH19LAorIHsxNiwgMHhiZWEwLCAwLCB7MHhkZiwweDgwLDB4M2YsMHg2MCwweDBmLDB4ZjgsMHgwMywweGMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmViMCwgMCwgezB4YTgsMHgxMSwweDljLDB4NDAsMHhiNywweDkwLDB4M2MsMHhlMCwweDBiLDB4M2EsMHgwMywweDRlLDB4ODAsMHhmMywweGIxLDB4MmQgfX0sCisgezE2LCAweGJlYzAsIDAsIHsweDA0LDB4NGMsMHgzOCwweDIzLDB4YWUsMHgwMCwweDgwLDB4ODAsMHgzNCwweGU4LDB4NGQsMHg3OCwweDAyLDB4M2UsMHg4MCwweDg3IH19LAorIHsxNiwgMHhiZWQwLCAwLCB7MHhhMCwweDI5LDB4YzAsMHgwOCwweDcwLDB4MDIsMHhjMCwweDgwLDB4ODYsMHgwMiwweDJkLDB4NDEsMHgwYiwweDcwLDB4MDIsMHhlYSB9fSwKKyB7MTYsIDB4YmVlMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDQ4LDB4MzcsMHgwMSwweDJkLDB4YzkgfX0sCisgezE2LCAweGJlZjAsIDAsIHsweDBiLDB4NzIsMHgyMiwweDFjLDB4ODQsMHhiNSwweDE2LDB4MGQsMHhjNCwweDE5LDB4NDAsMHg0MiwweGRjLDB4ODAsMHg4NywweDAwIH19LAorIHsxNiwgMHhiZjAwLCAwLCB7MHgyMCwweGM4LDB4ODgsMHg3MywweDBhLDB4OWMsMHg4MCwweGI1LDB4MDAsMHgyOSwweGMwLDB4MGEsMHg0OCwweDAyLDB4YzAsMHgwMiB9fSwKKyB7MTYsIDB4YmYxMCwgMCwgezB4OTUsMHgwMCwweDJkLDB4NDIsMHgwYiwweDU4LDB4MDIsMHhjMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJmMjAsIDAsIHsweDIwLDB4MTQsMHhjYywweDAwLDB4YjMsMHgwMCwweDJhLDB4ZTAsMHgwYiwweDMwLDB4MDIsMHg0YywweDIwLDB4YTEsMHgwMSwweDI0IH19LAorIHsxNiwgMHhiZjMwLCAwLCB7MHhjMSwweDA4LDB4MDAsMHgwMiwweDhjLDB4MDAsMHg4MSwweDAwLDB4MjQsMHg4MCwweDA5LDB4MzgsMHgwYSwweDYwLDB4ODAsMHg5MiB9fSwKKyB7MTYsIDB4YmY0MCwgMCwgezB4NDAsMHgyYSwweDAwLDB4MGEsMHgzMCwweDAyLDB4YzAsMHgwMCwweDgwLDB4YzgsMHgyYywweDcyLDB4MGIsMHgxNCwweDAyLDB4YzggfX0sCisgezE2LCAweGJmNTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmMsMHgwMCwweGZmLDB4MDAsMHgyZiwweGY0IH19LAorIHsxNiwgMHhiZjYwLCAwLCB7MHg4ZiwweGYwLDB4MDMsMHgzYywweDAwLDB4YjksMHgwMCwweDNlLDB4NDAsMHgwOSwweDkwLDB4MDMsMHhmYywweDAyLDB4YzMsMHgwMSB9fSwKKyB7MTYsIDB4YmY3MCwgMCwgezB4MzIsMHhjMCwweDQ4LDB4YjgsMHgxMywweGExLDB4MDAsMHhiYSwweDAwLDB4MmEsMHgwMCwweDBhLDB4YTAsMHgwNywweGVjLDB4MDAgfX0sCisgezE2LCAweGJmODAsIDAsIHsweGRiLDB4YzgsMHgzZSwweDkwLDB4MGYsMHhhMiwweDAyLDB4ZWEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiZjkwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGZiLDB4MDIsMHgzZSwweGM0LDB4MGYsMHhiMCwweDYzLDB4ZWMsMHgwMSwweGY4LDB4NDAsMHgzZSB9fSwKKyB7MTYsIDB4YmZhMCwgMCwgezB4NDAsMHgwYiwweDgwLDB4MDMsMHhjYywweDAwLDB4ZmEsMHg0MiwweDNlLDB4YzAsMHgwZiwweGI1LDB4MDAsMHhhYywweDU4LDB4ZTkgfX0sCisgezE2LCAweGJmYjAsIDAsIHsweDgyLDB4M2UsMHhjMCwweDFkLDB4OTAsMHgwMywweGVjLDB4MDQsMHhmYSwweDAwLDB4M2UsMHg4MCwweDBmLDB4YTAsMHgwMywweGUwIH19LAorIHsxNiwgMHhiZmMwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGZjLDB4MGMsMHhkZiwweDAwLDB4N2YsMHhjMCB9fSwKKyB7MTYsIDB4YmZkMCwgMCwgezB4MmMsMHhmMCwweDAzLDB4N2MsMHgwMSwweGM3LDB4MDAsMHgzMywweDQwLDB4OGYsMHhkMCwweDAzLDB4ZmMsMHgwMCwweGQ4LDB4MDAgfX0sCisgezE2LCAweGJmZTAsIDAsIHsweDE1LDB4NDQsMHgwYywweGUwLDB4MWIsMHgzYywweDAwLDB4Y2IsMHgwZSwweDMzLDB4YzAsMHg1YywweDYyLDB4MDIsMHgxYywweDAyIH19LAorIHsxNiwgMHhiZmYwLCAwLCB7MHhjNSwweDAwLDB4MmIsMHg4MCwweDBmLDB4YzAsMHg4NywweDgwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzAwMCwgMCwgezB4ODEsMHg0NCwweDZjLDB4MTAsMHhiYiwweDAwLDB4MmUsMHhjMCwweDA4LDB4YjAsMHg1MiwweDBjLDB4MDEsMHhmYSwweGM0LDB4MjIgfX0sCisgezE2LCAweGMwMTAsIDAsIHsweDYxLDB4MGIsMHg4OCwweDAzLDB4NmMsMHgwMCwweDg4LDB4NDcsMHgyYSwweDAwLDB4MGUsMHgxYywweDAyLDB4MjAsMHgwMiwweDg4IH19LAorIHsxNiwgMHhjMDIwLCAwLCB7MHgwMCwweGFhLDB4MDAsMHgyOCwweDkwLDB4MGEsMHgyYywweDA0LDB4YTgsMHgwMCwweDIyLDB4OTAsMHgwYiwweDgwLDB4MDIsMHhlMCB9fSwKKyB7MTYsIDB4YzAzMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDEsMHgyYywweDAwLDB4YmIsMHgwMCwweDJlLDB4YzEgfX0sCisgezE2LCAweGMwNDAsIDAsIHsweDA4LDB4MzAsMHgxMiwweDZjLDB4MDAsMHg4OCwweDg4LDB4MmEsMHgzMCwweDBiLDB4YjgsMHgwMiwweGVjLDB4MDAsMHg5YiwweDA4IH19LAorIHsxNiwgMHhjMDUwLCAwLCB7MHgyYSwweDQwLDB4MDgsMHhiOCwweDAyLDB4MjAsMHgwMCwweDgyLDB4MTAsMHgyMiwweDAwLDB4MDgsMHhhMCwweDIyLDB4YTAsMHgwMCB9fSwKKyB7MTYsIDB4YzA2MCwgMCwgezB4OGIsMHgwMCwweDJhLDB4MDIsMHgwYiwweGIwLDB4MDIsMHhlMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMwNzAsIDAsIHsweDA4LDB4MDAsMHgwYywweDAwLDB4YjMsMHgyMCwweDJjLDB4YzIsMHgwOCwweDM2LDB4MDIsMHgyYywweGMwLDB4YTAsMHgwOCwweDIwIH19LAorIHsxNiwgMHhjMDgwLCAwLCB7MHgwMCwweDBiLDB4MzMsMHg0NiwweGNkLDB4MjgsMHg4MCwweDIwLDB4MjgsMHhjMCwweDBiLDB4MzIsMHgwMiwweDBjLDB4MjAsMHg4MSB9fSwKKyB7MTYsIDB4YzA5MCwgMCwgezB4MzAsMHgyOCwweGMwLDB4MDgsMHgxMCwweDAyLDB4ODEsMHgwMCwweGFhLDB4MDAsMHgyOCwweDAwLDB4MDMsMHgzMCwweDAyLDB4YzIgfX0sCisgezE2LCAweGMwYTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBjLDB4N2MsMHgwMCwweGZiLDB4MjgsMHgyZSwweGNjIH19LAorIHsxNiwgMHhjMGIwLCAwLCB7MHgwYywweDcwLDB4NTMsMHg3ZCwweDA5LDB4ODgsMHgwMCwweGJhLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhmZCwweDgwLDB4ZGEsMHg2MCB9fSwKKyB7MTYsIDB4YzBjMCwgMCwgezB4M2EsMHg1MCwweDhjLDB4YTIsMHg4MywweDJjLDB4ODAsMHg0YiwweDIwLDB4MzAsMHhjMCwweDI4LDB4YTAsMHgwMywweGExLDB4MDAgfX0sCisgezE2LCAweGMwZDAsIDAsIHsweGM5LDB4MDAsMHgzYSwweDAwLDB4MGYsMHg5MCwweDAzLDB4YzAsMHgwMywweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMGUwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgwNCwweGZiLDB4MDAsMHg3ZSwweGM5LDB4MGIsMHhiNiwweDAzLDB4ZmMsMHhjMCwweGY4LDB4MGMsMHgzZiB9fSwKKyB7MTYsIDB4YzBmMCwgMCwgezB4MDAsMHg0ZiwweGMzLDB4NDMsMHgyYywweDAwLDB4YjgsMHgzOCwweDNmLDB4OGUsMHg1ZSwweGYwLDB4NDMsMHhlMCwweDEwLDB4ZjggfX0sCisgezE2LCAweGMxMDAsIDAsIHsweDMwLDB4M2YsMHgwMSwweDBmLDB4ZDAsMHgwMywweDcwLDB4MDAsMHhmYywweDAwLDB4MzcsMHgwMCwweDBkLDB4ZDAsMHgwNywweGU5IH19LAorIHsxNiwgMHhjMTEwLCAwLCB7MHgwMywweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZjLDB4ZTAsMHhjYywweDgwLDB4MzMsMHhjMCB9fSwKKyB7MTYsIDB4YzEyMCwgMCwgezB4MGQsMHhmMCwweDgzLDB4ZmMsMHg4MCwweGRjLDB4OTQsMHgzMywweGMwLDB4MWMsMHhmMSwweDAzLDB4N2QsMHg4YywweGZmLDB4MzAgfX0sCisgezE2LCAweGMxMzAsIDAsIHsweDNmLDB4MzAsMHg4ZiwweGM4LDB4MDMsMHg3ZSwweDEwLDB4Y2YsMHg5MCwweDM5LDB4YTAsMHg4ZCwweGY4LDB4MDMsMHhhZSwweDAwIH19LAorIHsxNiwgMHhjMTQwLCAwLCB7MHhkNSwweDgwLDB4MTMsMHhlMCwweDBjLDB4NTgsMHgwMywweGYwLDB4MDEsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzE1MCwgMCwgezB4ODAsMHgxMCwweGRkLDB4MDgsMHg4OCwweDAwLDB4MjMsMHhjNCwweDA4LDB4ZmMsMHgwMiwweGVjLDB4YTgsMHhjYiwweDIwLDB4MjEgfX0sCisgezE2LCAweGMxNjAsIDAsIHsweGMyLDB4MGQsMHhmNywweDEyLDB4MWMsMHg0MCwweGRmLDB4MzAsMHgyMiwweGEwLDB4MGIsMHg4OCwweDAyLDB4MmUsMHgwNCwweGRiIH19LAorIHsxNiwgMHhjMTcwLCAwLCB7MHgyMSwweDIyLDB4YzAsMHgwOCwweGI4LDB4MjIsMHgyZSwweDAwLDB4YjksMHg4MCwweDJhLDB4NjAsMHgwYSwweDg4LDB4MDIsMHhlMCB9fSwKKyB7MTYsIDB4YzE4MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4NDUsMHhjYywweDEwLDB4ODAsMHgyYywweDI4LDB4Y2EgfX0sCisgezE2LCAweGMxOTAsIDAsIHsweDY4LDB4MzAsMHgwMiwweDhkLDB4MDAsMHg5YiwweDIwLDB4MjgsMHhjNCwweDA4LDB4MzIsMHgwMiwweGNjLDB4MTAsMHhiMywweDAwIH19LAorIHsxNiwgMHhjMWEwLCAwLCB7MHgyNCwweDA4LDB4MGIsMHg4MCwweDQyLDB4NmMsMHgwMCwweDgzLDB4MDAsMHgyYSwweGNhLDB4M2EsMHhiMCwweDAyLDB4OGMsMHgwNCB9fSwKKyB7MTYsIDB4YzFiMCwgMCwgezB4YjAsMHgwNCwweDI4LDB4YzAsMHgwOCwweDEwLDB4MDIsMHhlMywweDAxLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMxYzAsIDAsIHsweGMwLDB4MTUsMHg4YywweDAyLDB4ODAsMHg0MCwweGFhLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhlYywweDAwLDB4OWIsMHgyMCwweDJhIH19LAorIHsxNiwgMHhjMWQwLCAwLCB7MHhjMCwweDg4LDB4YjAsMHgwMiwweGFjLDB4MDAsMHg5YiwweDAwLDB4MjYsMHhlMCwweDAzLDB4ODAsMHg4MiwweDJjLDB4MjgsMHg5YiB9fSwKKyB7MTYsIDB4YzFlMCwgMCwgezB4MjAsMHgyMiwweGUxLDB4MGIsMHhiMiwweDAyLDB4YWMsMHg4MCwweGI4LDB4ODAsMHgyYSwweGMxLDB4MGEsMHg5OCwweDAyLDB4ZjAgfX0sCisgezE2LCAweGMxZjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWMsMHgwMCwweGM4LDB4NTAsMHgzYSwweGMwIH19LAorIHsxNiwgMHhjMjAwLCAwLCB7MHgwZCwweGIwLDB4MDMsMHhlYywweDAwLDB4ZGIsMHg4OCwweGJhLDB4YzAsMHgwOCwweGIwLDB4MDMsMHg2YywweDA4LDB4ZmIsMHgwMCB9fSwKKyB7MTYsIDB4YzIxMCwgMCwgezB4MzYsMHg2MCwweDBmLDB4OGMsMHg2MywweDZjLDB4MDAsMHhjYiwweGMwLDB4M2EsMHg4MCwweDBlLDB4YmUsMHgwMywweGFmLDB4ODQgfX0sCisgezE2LCAweGMyMjAsIDAsIHsweDc5LDB4ODAsMHgzYSwweDg4LDB4MDQsMHg5OCwweDAxLDB4ZDAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMjMwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwMCwweGZjLDB4ODAsMHgzNSwweGMwLDB4NGYsMHhmMCwweDAzLDB4ZGMsMHgwMCwweGVmLDB4MDAsMHgzNyB9fSwKKyB7MTYsIDB4YzI0MCwgMCwgezB4YzAsMHhhZiwweGYwLDB4MDMsMHgxYywweDAxLDB4NmYsMHgwMCwweDEzLDB4MDAsMHgwZiwweGMxLDB4MjMsMHhmYywweGI4LDB4ZmYgfX0sCisgezE2LCAweGMyNTAsIDAsIHsweDA0LDB4MzcsMHhjMCwweDBjLDB4ZjgsMHg0MywweDdlLDB4MDQsMHhmZCwweDAwLDB4M2YsMHgwNCwweDBmLDB4ZDAsMHgwMywweGY4IH19LAorIHsxNiwgMHhjMjYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDAsMHhjOCwweDQwLDB4M2EsMHhjMCB9fSwKKyB7MTYsIDB4YzI3MCwgMCwgezB4MGMsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4NDAsMHgzOCwweGMxLDB4MGUsMHhiMCwweDQzLDB4MmMsMHgwOCwweGMzLDB4MDAgfX0sCisgezE2LCAweGMyODAsIDAsIHsweDNlLDB4NDAsMHgwZSwweDgyLDB4MDMsMHg2ZCwweDAwLDB4ZGIsMHg0MCwweDMyLDB4YzEsMHg1ZiwweGI0LDB4YTMsMHhlZCwweDIwIH19LAorIHsxNiwgMHhjMjkwLCAwLCB7MHhjOSwweDQwLDB4MzIsMHhlMCwweDhmLDB4OTgsMHg0MywweDkwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzJhMCwgMCwgezB4YzgsMHgwNSwweDNjLDB4MDAsMHg4OCwweDAwLDB4MjMsMHhjMCwweDI4LDB4ZjUsMHhjMiwweGZjLDB4MDAsMHhiMywweDA0LDB4MjMgfX0sCisgezE2LCAweGMyYjAsIDAsIHsweGMxLDB4NDgsMHhmMCwweDIyLDB4YmMsMHgwNiwweGFmLDB4MDAsMHgwZSwweDQwLDB4MDgsMHgwMCwweDAyLDB4Y2QsMHgwMCwweGJiIH19LAorIHsxNiwgMHhjMmMwLCAwLCB7MHgwMSwweDIwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhlZSwweDAwLDB4ODEsMHhlMCwweDM0LDB4YTAsMHgwYiwweDkwLDB4MDIsMHgzMiB9fSwKKyB7MTYsIDB4YzJkMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAyLDB4ODAsMHgwMCwweDI4LDB4YzAgfX0sCisgezE2LCAweGMyZTAsIDAsIHsweDA5LDB4M2MsMHgwMiwweDRjLDB4MDAsMHhiMywweDAwLDB4MmMsMHhjMCwweDBhLDB4YjAsMHgwMiwweDBjLDB4MDAsMHg4MywweDAxIH19LAorIHsxNiwgMHhjMmYwLCAwLCB7MHgyYywweDAwLDB4MGEsMHgwNSwweDAyLDB4Y2QsMHg1OCwweGJiLDB4MDAsMHgyMCwweDAwLDB4MGEsMHgzZCwweDAyLDB4Y2YsMHg0MCB9fSwKKyB7MTYsIDB4YzMwMCwgMCwgezB4MjEsMHgyMCwweDYwLDB4YzAsMHgwOSwweDEwLDB4MDIsMHhmOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMzMTAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDAwLDB4ODQsMHg4MCwweDI4LDB4ZTQsMHg4OCwweDc4LDB4NDIsMHhkZSwweDAwLDB4YjcsMHg5MCwweDY1IH19LAorIHsxNiwgMHhjMzIwLCAwLCB7MHhlNCwweDg4LDB4N2EsMHg0MiwweDllLDB4NDAsMHhhNywweDkwLDB4MmQsMHhhMCwweDBhLDB4NDgsMHgyMiwweGRlLDB4MDQsMHhiNyB9fSwKKyB7MTYsIDB4YzMzMCwgMCwgezB4ODAsMHgyMywweDYwLDB4NDgsMHg3OCwweDQyLDB4ZmUsMHg4MCwweGFmLDB4OTAsMHg2NSwweGUwLDB4MGIsMHhlOCwweDAyLDB4YzggfX0sCisgezE2LCAweGMzNDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweGM4LDB4MDAsMHgzOCwweGMwIH19LAorIHsxNiwgMHhjMzUwLCAwLCB7MHgwYywweDMwLDB4MDMsMHhjYywweDAwLDB4ZmIsMHgwMCwweDNjLDB4YzAsMHgwZSwweGJhLDB4MDMsMHgwYywweDAwLDB4YzMsMHgwMCB9fSwKKyB7MTYsIDB4YzM2MCwgMCwgezB4M2UsMHgwMCwweDRlLDB4MjIsMHgwMiwweGNjLDB4YzAsMHhmYiwweDQwLDB4MzAsMHhjMCwweDBhLDB4MzAsMHgwMywweGNlLDB4ODAgfX0sCisgezE2LCAweGMzNzAsIDAsIHsweGUxLDB4NDEsMHgzMCwweGM5LDB4MGYsMHgzMCwweDAzLDB4ZDIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMzgwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgyMCwweGZjLDB4MDAsMHgzNywweGMyLDB4MGUsMHhmMSwweDIzLDB4ZWMsMHg0MCwweGZmLDB4MDQsMHgzYSB9fSwKKyB7MTYsIDB4YzM5MCwgMCwgezB4YzAsMHgwZiwweGIwLDB4MjMsMHhmYywweDAwLDB4ZmYsMHgwNCwweDNlLDB4YzAsMHgwZCwweGEwLDB4MDMsMHhmYywweDU4LDB4ZmYgfX0sCisgezE2LCAweGMzYTAsIDAsIHsweDAwLDB4YmYsMHhjMCwweDA2LDB4ZjAsMHg4MywweGRjLDB4NjIsMHhkZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweDEwIH19LAorIHsxNiwgMHhjM2IwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVkLDB4ODAsMHhjOSwweDAxLDB4M2UsMHhjMCB9fSwKKyB7MTYsIDB4YzNjMCwgMCwgezB4OGMsMHhiMiwweDA3LDB4YWUsMHgwNCwweGNiLDB4ODAsMHgzYSwweGM4LDB4NGMsMHhiMiwweDAzLDB4MmMsMHg4NCwweGNiLDB4MzAgfX0sCisgezE2LCAweGMzZDAsIDAsIHsweGIwLDB4ZTAsMHgwZCwweDg4LDB4MGIsMHgyYywweDAwLDB4ZWIsMHgwMCwweDMwLDB4MDAsMHgwYywweGJjLDB4ODMsMHgyZCwweDgwIH19LAorIHsxNiwgMHhjM2UwLCAwLCB7MHhmYiwweDAwLDB4MzIsMHhjMCwweDBjLDB4OTAsMHgwMywweGVhLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzNmMCwgMCwgezB4NDgsMHgxMSwweDljLDB4NDAsMHg4NywweDAwLDB4MmMsMHhjYywweDA4LDB4NzYsMHg4MiwweDNjLDB4ODIsMHg4NywweDAwLDB4MjEgfX0sCisgezE2LCAweGM0MDAsIDAsIHsweGMyLDB4OGQsMHgzMiwweDgyLDB4MGQsMHg0YywweGE3LDB4MjgsMHgyMSwweDgwLDB4MDgsMHg0MCwweDAyLDB4MWQsMHg4MCwweGJmIH19LAorIHsxNiwgMHhjNDEwLCAwLCB7MHgyMCwweDM1LDB4NDAsMHgwOSwweDcyLDB4NDMsMHg1YywweGEwLDB4YjcsMHgwMCwweDI5LDB4YzAsMHgwOCwweDcwLDB4MDIsMHhkMiB9fSwKKyB7MTYsIDB4YzQyMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg4ZSwweDAwLDB4ODQsMHg4MCwweDJkLDB4ZTAgfX0sCisgezE2LCAweGM0MzAsIDAsIHsweDA4LDB4NzgsMHgwMiwweGRlLDB4YzAsMHg4ZiwweDgwLDB4MjgsMHhlYywweDI4LDB4N2IsMHgwYSwweDllLDB4OTQsMHg4MywweDg0IH19LAorIHsxNiwgMHhjNDQwLCAwLCB7MHgyMywweGUwLDB4MDksMHg1OCwweDUwLDB4OWUsMHgxMCwweGE3LDB4YjAsMHgyMywweGUwLDB4MGIsMHg3OCwweDAyLDB4MWUsMHgyMCB9fSwKKyB7MTYsIDB4YzQ1MCwgMCwgezB4YjcsMHg4MCwweDIxLDB4ZTAsMHgwOSwweDc4LDB4MDIsMHhmMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM0NjAsIDAsIHsweDQ4LDB4MTQsMHhjYywweDAyLDB4ODIsMHgxYywweDJjLDB4YzAsMHgyOCwweDMwLDB4MDIsMHg0YywweDAwLDB4ODMsMHhjMCwweDIwIH19LAorIHsxNiwgMHhjNDcwLCAwLCB7MHhjMCwweDA4LDB4MzAsMHgwMiwweDBjLDB4MDAsMHhhMywweDAwLDB4NjAsMHhkMiwweDA4LDB4MWQsMHgwMiwweDBmLDB4MjAsMHhiYiB9fSwKKyB7MTYsIDB4YzQ4MCwgMCwgezB4MjQsMHgyNCwweGMwLDB4MGIsMHgzYywweDAyLDB4NGYsMHgwMCwweGIzLDB4ODAsMHgyOCwweGQ4LDB4MDksMHgzMiwweDAyLDB4ZDIgfX0sCisgezE2LCAweGM0OTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDExLDB4YTgsMHgwMCwweGNlLDB4ODQsMHgzZSwweDgwIH19LAorIHsxNiwgMHhjNGEwLCAwLCB7MHgwYywweGEwLDB4MDMsMHhlOCwweDAwLDB4Y2UsMHhjMCwweDNhLDB4ODAsMHgwOCwweGEwLDB4MDMsMHhhOCwweDAwLDB4Y2EsMHgwMCB9fSwKKyB7MTYsIDB4YzRiMCwgMCwgezB4MzMsMHg4MCwweDBkLDB4ZWMsMHgwMywweDNiLDB4ODAsMHhlZSwweDgyLDB4MzMsMHg4MCwweDBhLDB4YzAsMHg4NywweDEwLDB4NDAgfX0sCisgezE2LCAweGM0YzAsIDAsIHsweGY2LDB4YzAsMHgzMywweDkwLDB4YWQsMHg2NCwweDAzLDB4ZmEsMHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNGQwLCAwLCB7MHg0OCwweDAwLDB4YzAsMHgwMiwweGY4LDB4MDAsMHgzYywweDAwLDB4MWYsMHgwNCwweDAzLDB4YTAsMHgwNCwweGY4LDB4MzAsMHgzZSB9fSwKKyB7MTYsIDB4YzRlMCwgMCwgezB4MDAsMHgwZiwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDQsMHgwZiwweDgwLDB4OTMsMHhlMCwweDAwLDB4ZjggfX0sCisgezE2LCAweGM0ZjAsIDAsIHsweDEwLDB4M2UsMHgwMCwweDJjLDB4ODQsMHgwMywweGUwLDB4MDAsMHhmOCwweDE4LDB4M2UsMHgxMCwweDBlLDB4ODAsMHgwMywweGQyIH19LAorIHsxNiwgMHhjNTAwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDAsMHhkOSwweDAwLDB4M2UsMHg0MCB9fSwKKyB7MTYsIDB4YzUxMCwgMCwgezB4MGUsMHg5MCwweDAzLDB4YTQsMHgxMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MDQsMHg5MCwweDAzLDB4MjQsMHgwMCwweDQxLDB4MDAgfX0sCisgezE2LCAweGM1MjAsIDAsIHsweDNlLDB4NDAsMHgwZiwweDkxLDB4MTMsMHhlMSwweDA4LDB4ZjgsMHgwMCwweDMyLDB4NDAsMHgwOCwweDg5LDB4ODMsMHhhMiwweDAwIH19LAorIHsxNiwgMHhjNTMwLCAwLCB7MHhjOSwweDgwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwYiwweDAyLDB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzU0MCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDIsMHg4OSwweDAwLDB4MmUsMHg0MCwweDBkLDB4OTAsMHgwMiwweDI0LDB4MDAsMHhiOSwweDAwLDB4MmUgfX0sCisgezE2LCAweGM1NTAsIDAsIHsweDQwLDB4NDgsMHg5MCwweDAyLDB4YTQsMHgwMCwweDg5LDB4MDAsMHgyMiwweDQwLDB4OGIsMHg5NCwweDQyLDB4ZTIsMHgyMCwweGI4IH19LAorIHsxNiwgMHhjNTYwLCAwLCB7MHgwMCwweGEyLDB4NDAsMHgwOCwweDk0LDB4MDIsMHhlNSwweDA0LDB4YTksMHg5MCwweDM0LDB4NjAsMHgwOCwweDkwLDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4YzU3MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDEwLDB4OTksMHgwMCwweDJlLDB4NDAgfX0sCisgezE2LCAweGM1ODAsIDAsIHsweDBhLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiOSwweDAwLDB4MjQsMHg0MCwweDBhLDB4MTAsMHgwMiwweDA0LDB4MDAsMHhhOSwweDAwIH19LAorIHsxNiwgMHhjNTkwLCAwLCB7MHgyYSwweDQwLDB4MGIsMHg5MCwweDgyLDB4ZTAsMHgwMSwweGI4LDB4MDAsMHgyMCwweDQwLDB4M2EsMHg5MCwweDAyLDB4YTQsMHg0NCB9fSwKKyB7MTYsIDB4YzVhMCwgMCwgezB4ODksMHgwNCwweDIyLDB4NjIsMHgwOCwweDk4LDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM1YjAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDhhLDB4ODEsMHgwMCwweDJjLDB4NDgsMHgwOSwweDMyLDB4MDYsMHg0NCwweDgwLDB4YjEsMHgwMCwweDJjIH19LAorIHsxNiwgMHhjNWMwLCAwLCB7MHg0OCwweDBhLDB4MTIsMHgwMiwweDg0LDB4ODAsMHhhMSwweDIwLDB4MjAsMHg1MCwweDBiLDB4MTQsMHgwMiwweGM1LDB4MDAsMHhiMSB9fSwKKyB7MTYsIDB4YzVkMCwgMCwgezB4NDAsMHgyMCwweDUwLDB4MGEsMHgyNCwweDAyLDB4YzksMHgwMCwweGEzLDB4MDAsMHgyNCwweDQwLDB4MDgsMHgxMSwweDAyLDB4MDIgfX0sCisgezE2LCAweGM1ZTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGQ4LDB4NTAsMHgzZSwweDE0IH19LAorIHsxNiwgMHhjNWYwLCAwLCB7MHgwZSwweDgwLDB4MDMsMHhlMSwweDQwLDB4ZjgsMHg1MSwweDM2LDB4MTQsMHgyZSwweDg1LDB4NDMsMHgyMSwweDQyLDB4ZTgsMHg1MCB9fSwKKyB7MTYsIDB4YzYwMCwgMCwgezB4M2EsMHgwMCwweDBmLDB4ODAsMHgxMiwweGUwLDB4MDAsMHhmOCwweDAwLDB4MzIsMHgwMCwweDFlLDB4ODAsMHg0MywweGEwLDB4MDAgfX0sCisgezE2LCAweGM2MTAsIDAsIHsweGM4LDB4MDEsMHgzMiwweDAwLDB4MGMsMHg4MCwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNjIwLCAwLCB7MHg5OCwweDFkLDB4ZTQsMHg0MCwweGZkLDB4MDAsMHgzZSwweDQ0LDB4NGUsMHgxMSwweDAzLDB4YTQsMHg0MCwweGI1LDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4YzYzMCwgMCwgezB4NDQsMHgwZCwweDkxLDB4MDMsMHhlNCwweDQwLDB4ZDksMHgxMCwweDNmLDB4NDAsMHgwZiwweDUwLDB4MDMsMHhlNSwweDAwLDB4ZjkgfX0sCisgezE2LCAweGM2NDAsIDAsIHsweDQwLDB4M2YsMHg0MCwweDBkLDB4NDQsMHgwMywweGYxLDB4MDAsMHhmNSwweDAyLDB4M2QsMHhjMCwweDJmLDB4ZDIsMHgwMywweGU2IH19LAorIHsxNiwgMHhjNjUwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGU3LDB4MDAsMHhlOSwweDAwLDB4MzYsMHg2MCB9fSwKKyB7MTYsIDB4YzY2MCwgMCwgezB4MGQsMHhkYSwweDAzLDB4ZTYsMHg0MCwweGY5LDB4NDAsMHgzZSwweDY4LDB4MGMsMHg5YSwweDAzLDB4NjYsMHgyMCwweDg5LDB4YTAgfX0sCisgezE2LCAweGM2NzAsIDAsIHsweDMzLDB4NDAsMHgwZSwweDkwLDB4MDcsMHhhNiwweDAwLDB4ZjksMHg4MCwweDNlLDB4NTAsMHgwYywweGNhLDB4MDMsMHhmMywweDgwIH19LAorIHsxNiwgMHhjNjgwLCAwLCB7MHhjNSwweDAyLDB4MzMsMHg0MCwweDBjLDB4YzAsMHgwMywweGM2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzY5MCwgMCwgezB4MzgsMHgxMCwweGUzLDB4MDQsMHg4OCwweGEyLDB4MjAsMHgzOCwweDA4LDB4ODAsMHgwMiwweGUzLDB4NDAsMHhiMCwweDgwLDB4MmUgfX0sCisgezE2LCAweGM2YTAsIDAsIHsweDI4LDB4MDgsMHg4YSwweDgyLDB4MjMsMHg4MCwweDg4LDB4ODAsMHgyMiwweDAwLDB4ZGIsMHg4OCwweDAyLDB4NjIsMHgwNCwweGI4IH19LAorIHsxNiwgMHhjNmIwLCAwLCB7MHhiMCwweDJlLDB4YTgsMHg4OCwweDhlLDB4YTIsMHhlYSwweDgwLDB4ODgsMHgwMCwweDJhLDB4MDAsMHgyOCwweDg4LDB4MDMsMHg4ZSB9fSwKKyB7MTYsIDB4YzZjMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNSwweDgyLDB4YTksMHgwOCwweDJjLDB4NTIgfX0sCisgezE2LCAweGM2ZDAsIDAsIHsweDBiLDB4MTQsMHgwMiwweGM0LDB4ODAsMHhiMSwweDIxLDB4MGMsMHg1MiwweDg4LDB4MTQsMHgwMiwweDQ0LDB4MjAsMHg5MSwweDY5IH19LAorIHsxNiwgMHhjNmUwLCAwLCB7MHgyMCwweDQwLDB4MGEsMHgxMCwweDgyLDB4YzYsMHhlMCwweGIxLDB4MGMsMHgyYywweDQ4LDB4MDgsMHgwMSwweDAyLDB4ZTEsMHg5MyB9fSwKKyB7MTYsIDB4YzZmMCwgMCwgezB4YTEsMHgwMSwweDI0LDB4NDEsMHgwYSwweDEwLDB4MDIsMHhjMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM3MDAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAwLDB4ODksMHgwNCwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDAsMHhlNCwweDAwLDB4MzksMHgwMiwweDBlIH19LAorIHsxNiwgMHhjNzEwLCAwLCB7MHg0MCwweDA4LDB4MTAsMHg2MiwweDI0LDB4MDAsMHg5MSwweDAwLDB4NjIsMHg0MCwweDhiLDB4ODAsMHgwMiwweGUwLDB4NTQsMHhiOSB9fSwKKyB7MTYsIDB4YzcyMCwgMCwgezB4MGMsMHgyZSwweDQwLDB4MDksMHhiNiwweDUyLDB4ZWMsMHgwMCwweGE5LDB4MDAsMHgyYSwweDQwLDB4MGEsMHg5MiwweDgwLDB4ODYgfX0sCisgezE2LCAweGM3MzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDExLDB4ZTQsMHgwMCwweGUxLDB4NjAsMHgzNiwweDQwIH19LAorIHsxNiwgMHhjNzQwLCAwLCB7MHgwZCwweDkwLDB4MjMsMHhlNCwweDAwLDB4ZjksMHgzMCwweDNlLDB4NDAsMHgyYywweDkwLDB4NDMsMHg2NCwweDA2LDB4YzksMHgwMCB9fSwKKyB7MTYsIDB4Yzc1MCwgMCwgezB4MzIsMHg0OSwweDBlLDB4OGQsMHg5MywweGUwLDB4MDAsMHhmOSwweDAwLDB4MmUsMHg0MCwweDJjLDB4OTQsMHgwMywweGM3LDB4NDAgfX0sCisgezE2LCAweGM3NjAsIDAsIHsweGU5LDB4MjAsMHgzMCwweDU1LDB4MGUsMHg5MCwweDAzLDB4ZTgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNzcwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwMCwweGY5LDB4MDAsMHgxZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4ODAsMHgzYyB9fSwKKyB7MTYsIDB4Yzc4MCwgMCwgezB4NDAsMHg0ZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZTksMHgwNCwweGJlLDB4NDAsMHgwZiwweDg4LDB4MzMsMHg2MiwweDAwLDB4ZjkgfX0sCisgezE2LCAweGM3OTAsIDAsIHsweGMyLDB4M2UsMHg0OCwweDJlLDB4ODgsMHgzMywweGUyLDB4MDAsMHhkOSwweDAwLDB4M2UsMHg2MCwweDBkLDB4ODAsMHgwMywweGNhIH19LAorIHsxNiwgMHhjN2EwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDAsMHhjOCwweDAwLDB4M2UsMHgwMCB9fSwKKyB7MTYsIDB4YzdiMCwgMCwgezB4MGQsMHg4MCwweDAzLDB4YTAsMHgwNCwweGU4LDB4NDAsMHhiYSwweDAwLDB4MGMsMHg4MCwweDAzLDB4ZTAsMHgwNCwweGM4LDB4MDAgfX0sCisgezE2LCAweGM3YzAsIDAsIHsweDNhLDB4MDAsMHgwZSwweDhjLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHgwMiwweDMyLDB4MDAsMHgwZSwweDgwLDB4MDMsMHg2MSwweDIwIH19LAorIHsxNiwgMHhjN2QwLCAwLCB7MHhmOCwweDAwLDB4MzIsMHgxNiwweDBmLDB4ODAsMHgwMywweGNhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzdlMCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDAsMHg4YSwweDAwLDB4MmUsMHg4MCwweDA4LDB4ZTIsMHgwMywweDI4LDB4MDAsMHg4YSwweDAwLDB4MjIgfX0sCisgezE2LCAweGM3ZjAsIDAsIHsweDgwLDB4MDgsMHhhMCwweDAyLDB4ZTgsMHgwNCwweDhhLDB4MDAsMHgyZSwweGEyLDB4MDksMHhlOCwweDAyLDB4ZmEsMHgwNCwweGJlIH19LAorIHsxNiwgMHhjODAwLCAwLCB7MHgwMCwweGEyLDB4ODAsMHgwOCwweGNkLDB4ODIsMHgzMywweDIwLDB4YjYsMHhjMCwweDM3LDB4YTAsMHg0YiwweGM4LDB4ODIsMHhjYSB9fSwKKyB7MTYsIDB4YzgxMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg2YywweDAwLDB4ODMsMHgwMCwweDI2LDB4YzAgfX0sCisgezE2LCAweGM4MjAsIDAsIHsweDA5LDB4MzgsMHgwMiwweDRjLDB4MDAsMHhiMywweDAwLDB4MjQsMHhjMCwweDA4LDB4MzAsMHgwMiwweGVjLDB4MDAsMHg4MywweDAwIH19LAorIHsxNiwgMHhjODMwLCAwLCB7MHgyOCwweGUwLDB4MGIsMHgzMCwweDAyLDB4Y2UsMHg4MSwweGIzLDB4MDAsMHg2MiwweGMwLDB4MDgsMHgzYywweDAyLDB4NGYsMHgwMCB9fSwKKyB7MTYsIDB4Yzg0MCwgMCwgezB4YjMsMHhhMCwweDIwLDB4YjAsMHgwMywweDMwLDB4MDIsMHhjYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM4NTAsIDAsIHsweGEwLDB4MDEsMHgwYywweDQxLDB4ODcsMHgzNCwweDJkLDB4YzAsMHgwOCwweDYwLDB4MDIsMHg5ZSwweDQwLDB4YjcsMHhhMCwweDJkIH19LAorIHsxNiwgMHhjODYwLCAwLCB7MHhjMCwweDA4LDB4NzMsMHgwMiwweGRjLDB4MDAsMHg4NywweDIwLDB4MmQsMHhjMCwweDBiLDB4NzAsMHg4MiwweGRkLDB4ODUsMHhiZiB9fSwKKyB7MTYsIDB4Yzg3MCwgMCwgezB4ODEsMHg2MywweGM4LDB4ODgsMHg3YiwweDAyLDB4MWMsMHgwMCwweGI3LDB4NDAsMHg2NSwweDAwLDB4MWIsMHg3MiwweDAyLDB4ZTggfX0sCisgezE2LCAweGM4ODAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgwMCwweGM3LDB4ODEsMHgzZCwweGUwIH19LAorIHsxNiwgMHhjODkwLCAwLCB7MHhkZCwweDcwLDB4MDMsMHhmZSwweDgwLDB4ZjcsMHg5MCwweDNmLDB4ZTAsMHgyYywweDc5LDB4MDMsMHhmZSwweDgwLDB4YzcsMHhhMCB9fSwKKyB7MTYsIDB4YzhhMCwgMCwgezB4MzksMHhlMCwweDBmLDB4N2EsMHgwMiwweGRlLDB4ODQsMHhmNywweGMyLDB4MzEsMHhmMiwweDBjLDB4NzksMHgwMywweDVlLDB4MDQgfX0sCisgezE2LCAweGM4YjAsIDAsIHsweGY3LDB4ODQsMHgzMSwweDYwLDB4MGYsMHg3ZSwweDAzLDB4ZWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjOGMwLCAwLCB7MHgwOCwweDFkLDB4YWQsMHgwYSwweGZiLDB4NjAsMHg3ZSwweGQ0LDB4MGYsMHgzMCwweDAzLDB4NmMsMHgwMCwweGNiLDB4MDAsMHgzMiB9fSwKKyB7MTYsIDB4YzhkMCwgMCwgezB4ZGUsMHgyZiwweGIyLDB4MDMsMHhlZCwweDQyLDB4MWIsMHg2MCwweDNlLDB4YzEsMHgwZCwweGIxLDB4MDMsMHhlYywweDUwLDB4ZjcgfX0sCisgezE2LCAweGM4ZTAsIDAsIHsweDgwLDB4M2QsMHhkOCwweDJlLDB4MzIsMHgwMywweGVjLDB4MzAsMHhmYiwweDAwLDB4M2UsMHg0MCwweDBmLDB4YjAsMHgwMywweGMyIH19LAorIHsxNiwgMHhjOGYwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGZmLDB4MDAsMHhjYiwweGQwLDB4M2YsMHhmMCB9fSwKKyB7MTYsIDB4YzkwMCwgMCwgezB4NGMsMHhmOCwweDEzLDB4ZmUsMHgwMCwweGNmLDB4ODgsMHgzZiwweGUwLDB4MGMsMHhmOCwweDQzLDB4M2YsMHgwMCwweGNmLDB4YzggfX0sCisgezE2LCAweGM5MTAsIDAsIHsweDMzLDB4ZTAsMHgwYywweGY4LDB4MDMsMHhmZSwweDAwLDB4ZmYsMHg4MCwweDNmLDB4ZTAsMHgyYywweGY4LDB4MDMsMHhiZSwweDIwIH19LAorIHsxNiwgMHhjOTIwLCAwLCB7MHhjNywweDgwLDB4MzMsMHhlMCwweDBjLDB4ZjgsMHgwMSwweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzkzMCwgMCwgezB4YTgsMHgwMSwweGJjLDB4NDAsMHg4NywweDkwLDB4M2QsMHhjMCwweDA4LDB4NDAsMHgwMiwweGRjLDB4ODAsMHhkNywweDAwLDB4MmQgfX0sCisgezE2LCAweGM5NDAsIDAsIHsweGMwLDB4MGMsMHgzMCwweDAzLDB4N2MsMHgwMCwweDg3LDB4MTAsMHgyMSwweGM0LDB4MWUsMHg3MCwweDIwLDB4ZGMsMHg0NCwweGI3IH19LAorIHsxNiwgMHhjOTUwLCAwLCB7MHgwMCwweDM5LDB4YzAsMHgwYywweDcxLDB4MDIsMHgxYywweDQwLDB4ZDcsMHgwMiwweDI5LDB4NDAsMHgwOCwweDcwLDB4MDIsMHgyYSB9fSwKKyB7MTYsIDB4Yzk2MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4ODcsMHgzMiwweDJkLDB4YzAgfX0sCisgezE2LCAweGM5NzAsIDAsIHsweDA4LDB4NzAsMHgwMiwweGRjLDB4MDEsMHg4NywweDAwLDB4MmMsMHhjMCwweDJiLDB4NzAsMHgwYSwweDVjLDB4MDAsMHg4MywweDAwIH19LAorIHsxNiwgMHhjOTgwLCAwLCB7MHgyMywweGMwLDB4MDgsMHg3MCwweDAyLDB4ZGQsMHgwMCwweGI3LDB4MDAsMHgyZCwweGM0LDB4MGIsMHhmMCwweDAyLDB4OWMsMHgyMCB9fSwKKyB7MTYsIDB4Yzk5MCwgMCwgezB4ODcsMHgxOCwweDI5LDB4NDAsMHgwOCwweDcwLDB4ODIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM5YTAsIDAsIHsweDIwLDB4MTQsMHhjYywweDAwLDB4ODMsMHgwMiwweDI4LDB4YzAsMHgwOCwweDEwLDB4MDIsMHhjYywweDA4LDB4ODMsMHg0MCwweDJlIH19LAorIHsxNiwgMHhjOWIwLCAwLCB7MHhjMCwweDJhLDB4MzAsMHgwMiwweDBjLDB4MDAsMHg4YiwweDAwLDB4MjAsMHhmMiwweDBhLDB4MzAsMHgwMiwweGNlLDB4MDAsMHhiMyB9fSwKKyB7MTYsIDB4YzljMCwgMCwgezB4ODgsMHgyYSwweGQwLDB4MGEsMHgzMCwweDA2LDB4MGMsMHgwMCwweDkyLDB4MDAsMHgyOCwweDc4LDB4MDgsMHgzYywweDQyLDB4MDggfX0sCisgezE2LCAweGM5ZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmMsMHgwMiwweGM3LDB4MDAsMHgyZiwweGMwIH19LAorIHsxNiwgMHhjOWUwLCAwLCB7MHgyYywweDkwLDB4MDIsMHhmYywweDAyLDB4OGYsMHhkOCwweDNmLDB4YzAsMHg0YiwweGYwLDB4MDIsMHg3YywweDAyLDB4Y2YsMHgwMCB9fSwKKyB7MTYsIDB4YzlmMCwgMCwgezB4MjAsMHhmMiwweDA4LDB4YjAsMHgxMywweGVlLDB4ODAsMHhmZiwweDAwLDB4M2YsMHhkNCwweDJlLDB4YmQsMHg4MywweGFjLDB4MDAgfX0sCisgezE2LCAweGNhMDAsIDAsIHsweGNiLDB4ODAsMHgzYSwweGEwLDB4YWMsMHhiOCwweDAzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjYTEwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGZiLDB4MTAsMHgzZSwweGMwLDB4MGYsMHg4NCwweDAzLDB4ZWMsMHgxMCwweGZiLDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4Y2EyMCwgMCwgezB4YzAsMHgwMSwweGIwLDB4MDMsMHhlYywweDAwLDB4ZmIsMHgwMCwweGJlLDB4YzAsMHgwZSwweGIwLDB4MjMsMHhlYywweDA4LDB4ZmIgfX0sCisgezE2LCAweGNhMzAsIDAsIHsweDEwLDB4M2YsMHhjMCwweDBkLDB4YjQsMHgwMywweGVkLDB4MDQsMHhmOSwweDAwLDB4MWUsMHgxNCwweGNmLDB4YjAsMHg4MywweGUwIH19LAorIHsxNiwgMHhjYTQwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGZjLDB4MDAsMHhjZiwweDAwLDB4MzAsMHhjMCB9fSwKKyB7MTYsIDB4Y2E1MCwgMCwgezB4MGMsMHg0MCwweDAzLDB4YWMsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MmMsMHhiMCwweDAzLDB4YmMsMHgwMCwweGZmLDB4MDAgfX0sCisgezE2LCAweGNhNjAsIDAsIHsweGIzLDB4ZTAsMHgwZCwweGZhLDB4MDMsMHg3ZSwweDgwLDB4Y2YsMHgwMCwweDMzLDB4YzAsMHgwYywweGZjLDB4NDMsMHhmZiwweDIwIH19LAorIHsxNiwgMHhjYTcwLCAwLCB7MHhmZiwweDAwLDB4M2YsMHg0MCwweDA4LDB4ZjgsMHgwMywweGMwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2E4MCwgMCwgezB4ODEsMHgwNCwweDZjLDB4MTAsMHhhYiwweDAwLDB4MmEsMHhjMCwweDBhLDB4OGUsMHg0MiwweDJjLDB4MDQsMHhiYiwweDAwLDB4MmUgfX0sCisgezE2LCAweGNhOTAsIDAsIHsweGMwLDB4MDgsMHhiMCwweDAyLDB4NmMsMHgwMCwweGJiLDB4MDAsMHgzYSwweGMwLDB4MGUsMHgzMCwweDAyLDB4MGQsMHgwOCwweDgzIH19LAorIHsxNiwgMHhjYWEwLCAwLCB7MHgwMiwweDIyLDB4YzAsMHgwYSwweGJjLDB4MDIsMHhlZiwweDAwLDB4YmIsMHhjMCwweDJjLDB4NjgsMHgwYSwweGI5LDB4MDIsMHhlMCB9fSwKKyB7MTYsIDB4Y2FiMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgwYywweDAwLDB4OGIsMHgwMCwweDIyLDB4YzAgfX0sCisgezE2LCAweGNhYzAsIDAsIHsweDA4LDB4YjgsMHgwMiwweGFjLDB4MDAsMHhiYiwweDAyLDB4MmUsMHhjMCwweDA4LDB4YjAsMHgwMiwweGVjLDB4MDAsMHhiYiwweDAwIH19LAorIHsxNiwgMHhjYWQwLCAwLCB7MHgyNiwweDQ4LDB4MTksMHhiMCwweDAyLDB4NmQsMHgwMCwweDhiLDB4MDAsMHgyMiwweGMwLDB4MGEsMHhiMCwweDAyLDB4ZWMsMHgwNCB9fSwKKyB7MTYsIDB4Y2FlMCwgMCwgezB4YmIsMHgxYywweDJlLDB4MjAsMHgwYSwweGIwLDB4MDIsMHhlMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNhZjAsIDAsIHsweDA4LDB4MTQsMHgwYywweDAwLDB4YWIsMHgyMCwweDI4LDB4YzAsMHgwYSwweDAwLDB4MDIsMHgwYywweDAwLDB4OTMsMHgwNCwweDJjIH19LAorIHsxNiwgMHhjYjAwLCAwLCB7MHhjMSwweDA4LDB4MzAsMHgwMiwweDRjLDB4MDAsMHhiMywweDAwLDB4MjQsMHg0MSwweDA5LDB4YjgsMHgwMiwweDBjLDB4MDIsMHg4MyB9fSwKKyB7MTYsIDB4Y2IxMCwgMCwgezB4MDEsMHhhMCwweGMwLDB4MGEsMHgzMCwweDAyLDB4Y2MsMHgxMCwweDkzLDB4MDAsMHgyYywweDAwLDB4MGEsMHgzMCwweDAyLDB4YzIgfX0sCisgezE2LCAweGNiMjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4N2MsMHgwMCwweGNmLDB4MjgsMHgzMywweGMwIH19LAorIHsxNiwgMHhjYjMwLCAwLCB7MHgwYywweGEwLDB4NDYsMHhhYywweDExLDB4YmYsMHgwMCwweDNmLDB4YzAsMHg1YywweGYwLDB4NDMsMHhmYywweDAwLDB4ZmYsMHgwNCB9fSwKKyB7MTYsIDB4Y2I0MCwgMCwgezB4MzIsMHg0MCwweDBkLDB4YjAsMHgwMywweDZjLDB4MDgsMHhjYiwweDA0LDB4MzEsMHhjMCwweDBjLDB4YjAsMHgzMywweGVkLDB4NDAgfX0sCisgezE2LCAweGNiNTAsIDAsIHsweGZiLDB4MDQsMHgzZSwweDQwLDB4MGUsMHhiMCwweDAzLDB4YzAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjYjYwLCAwLCB7MHhhMCwweDE1LDB4ZmMsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhjMCwweDIzLDB4ZmMsMHgwMSwweGZmLDB4MDAsMHgzZiB9fSwKKyB7MTYsIDB4Y2I3MCwgMCwgezB4YzAsMHg0ZiwweGYwLDB4ODcsMHg3YywweDAwLDB4ZmYsMHgwMCwweDM5LDB4NDAsMHgwZSwweGYwLDB4MDMsMHhmYywweDAwLDB4ZmYgfX0sCisgezE2LCAweGNiODAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDBmLDB4NzAsMHgwMywweGRjLDB4ODAsMHhmZiwweDAwLDB4M2QsMHg0MCwweDBmLDB4NzAsMHgwMywweGU4IH19LAorIHsxNiwgMHhjYjkwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZjLDB4NDAsMHhlYiwweDQ4LDB4M2UsMHhjMiB9fSwKKyB7MTYsIDB4Y2JhMCwgMCwgezB4MGUsMHgwOSwweDAzLDB4YmMsMHg2MCwweGMwLDB4MjAsMHgzNSwweDI0LDB4MGUsMHhkMiwweDEzLDB4MmMsMHg2MCwweGZiLDB4NmEgfX0sCisgezE2LCAweGNiYjAsIDAsIHsweDMzLDB4YzAsMHgwZiwweGNhLDB4MDMsMHgyMiwweDIwLDB4YzAsMHg4MCwweDM3LDB4YzAsMHgwZCwweGYwLDB4MDMsMHg3YywweDAwIH19LAorIHsxNiwgMHhjYmMwLCAwLCB7MHhlZiwweDAwLDB4MzMsMHgyNCwweDBmLDB4YzgsMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2JkMCwgMCwgezB4ODAsMHgxMCwweGRkLDB4MDAsMHg4ZiwweDYwLDB4MmYsMHhkOCwweDA4LDB4YTIsMHgwMiwweGZkLDB4ODAsMHhjOCwweDcwLDB4MjIgfX0sCisgezE2LCAweGNiZTAsIDAsIHsweDAwLDB4MmMsMHhmZCwweDA3LDB4ZGMsMHg4NCwweGJmLDB4NjAsMHgyMywweGQyLDB4MGIsMHhiZCwweDAyLDB4MjMsMHgwMCwweDg4IH19LAorIHsxNiwgMHhjYmYwLCAwLCB7MHg4MCwweGEyLDB4MjAsMHg4OCwweGIwLDB4MjIsMHgzNCwweDAwLDB4YmIsMHg1MCwweDIyLDB4YzgsMHgwYiwweGIwLDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4Y2MwMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDQwLDB4YTMsMHgwMywweDJjLDB4YzIgfX0sCisgezE2LCAweGNjMTAsIDAsIHsweDBhLDB4MDAsMHg0MiwweDhjLDB4ODIsMHhhMywweDBhLDB4MjQsMHg4MCwweDBiLDB4MzAsMHgwMiwweGNjLDB4OTAsMHhiMywweDAwIH19LAorIHsxNiwgMHhjYzIwLCAwLCB7MHgyOCwweGQ4LDB4MGIsMHgxMCwweDAyLDB4OGMsMHgwMiwweDkwLDB4MDAsMHgyMCwweGMwLDB4MGIsMHgxMCwweDQyLDB4NGMsMHgwMCB9fSwKKyB7MTYsIDB4Y2MzMCwgMCwgezB4YjMsMHgwNCwweDI0LDB4YzAsMHgwYiwweDMwLDB4MGUsMHhhMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNjNDAsIDAsIHsweGMwLDB4MTUsMHhhYywweDEwLDB4OWIsMHgwNCwweDJjLDB4YzAsMHhmOCwweDk4LDB4MDYsMHhlYywweDAwLDB4YWIsMHg4MCwweDI2IH19LAorIHsxNiwgMHhjYzUwLCAwLCB7MHgyMCwweDA4LDB4OTAsMHgyYSwweGFjLDB4MTAsMHhiYiwweDAwLDB4MGEsMHhjMCwweDFiLDB4YjAsMHgyMiwweGFkLDB4MDAsMHg5OCB9fSwKKyB7MTYsIDB4Y2M2MCwgMCwgezB4NDAsMHgyYSwweDcwLDB4NGIsMHhiMCwweDAyLDB4MmMsMHgwMCwweGIzLDB4MDAsMHhhNiwweDg2LDB4MWIsMHhiMCwweDgyLDB4YjAgfX0sCisgezE2LCAweGNjNzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWMsMHgwMCwweGViLDB4MDAsMHgzZSwweGMwIH19LAorIHsxNiwgMHhjYzgwLCAwLCB7MHg4ZSwweDk4LDB4MDMsMHhhYywweDA4LDB4ZTgsMHhjMCwweDM2LDB4MzAsMHg0ZiwweGIwLDB4NDIsMHhlYywweDAwLDB4ZjksMHg4MCB9fSwKKyB7MTYsIDB4Y2M5MCwgMCwgezB4M2EsMHhjMCwweDhmLDB4ODgsMHg0MiwweDIwLDB4MTAsMHhjOCwweDEwLDB4MzAsMHhmMCwweDBmLDB4MzAsMHgxMywweDZjLDB4MTAgfX0sCisgezE2LCAweGNjYTAsIDAsIHsweGViLDB4MDAsMHgzNiwweGYwLDB4MGYsMHhiZCwweDAzLDB4OTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjY2IwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwMCwweGVmLDB4MDQsMHg3ZiwweGMwLDB4MGYsMHhmMCwweDQzLDB4ZGMsMHgwMCwweGM0LDB4MDAsMHgzYiB9fSwKKyB7MTYsIDB4Y2NjMCwgMCwgezB4NDAsMHg4YiwweGRjLDB4MDMsMHg3YywweDEwLDB4ZjksMHg5MCwweDM2LDB4YzIsMHg0ZiwweGY5LDB4MjMsMHg2MiwweDQxLDB4YWMgfX0sCisgezE2LCAweGNjZDAsIDAsIHsweDAxLDB4MTMsMHg0MCwweDA0LDB4YjAsMHgwMywweGU0LDB4MDAsMHhmZiwweDAwLDB4M2IsMHhjMCwweDBmLDB4YzAsMHgwMywweDc4IH19LAorIHsxNiwgMHhjY2UwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweDhjLDB4MTIsMHhjYiwweDAwLDB4ZjIsMHhjMCB9fSwKKyB7MTYsIDB4Y2NmMCwgMCwgezB4MGYsMHg4MCwweDAzLDB4YWMsMHgwOCwweGQ5LDB4MDAsMHgzYSwweDgwLDB4MGYsMHgxMiwweDAzLDB4YWMsMHgwMCwweGUxLDB4MDAgfX0sCisgezE2LCAweGNkMDAsIDAsIHsweDMyLDB4YzAsMHgwYywweDkwLDB4MDMsMHhlZCwweDAyLDB4YzgsMHg0MCwweDNlLDB4ZDAsMHgwZiwweDkwLDB4MTMsMHgyYywweDAyIH19LAorIHsxNiwgMHhjZDEwLCAwLCB7MHhkYiwweDAwLDB4M2UsMHg1MCwweDBjLDB4YjQsMHgwMywweDEwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2QyMCwgMCwgezB4YzgsMHgwNSwweDNjLDB4MDAsMHg4ZiwweDAwLDB4MTcsMHhjMCwweDA4LDB4OTAsMHgwMiwweDNjLDB4MDgsMHg4ZCwweDAwLDB4MjIgfX0sCisgezE2LCAweGNkMzAsIDAsIHsweDU0LDB4MDgsMHhiNCwweDAzLDB4M2MsMHgwMCwweDg5LDB4MDAsMHgyMywweGMwLDB4NDAsMHgzNSwweDAyLDB4Y2MsMHgyNCwweDgwIH19LAorIHsxNiwgMHhjZDQwLCAwLCB7MHgwMCwweDIyLDB4NzQsMHg0YywweGIwLDB4MDIsMHgyYywweDAwLDB4OGYsMHgwMCwweDJlLDB4ZDQsMHgwYSwweGIwLDB4MGEsMHgzMiB9fSwKKyB7MTYsIDB4Y2Q1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHg0YywweDAyLDB4ODMsMHgwMCwweDI0LDB4YzAgfX0sCisgezE2LCAweGNkNjAsIDAsIHsweDA5LDB4MDAsMHgwMiwweDhjLDB4MDEsMHg5MCwweDAwLDB4NmEsMHg0MSwweDBhLDB4MzAsMHgyMCwweDRlLDB4MTAsMHgzMSwweDAyIH19LAorIHsxNiwgMHhjZDcwLCAwLCB7MHgyYywweGMwLDB4MDksMHgyMCwweDA2LDB4Y2UsMHgwMCwweDgwLDB4MDAsMHg2MCwweGUwLDB4MGEsMHgzMCwweDgyLDB4MGMsMHgwOCB9fSwKKyB7MTYsIDB4Y2Q4MCwgMCwgezB4ODMsMHgwOCwweDJjLDB4ZDAsMHgwOSwweGIwLDB4MDIsMHg3OCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNkOTAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDA0LDB4ODcsMHhiMCwweDIwLDB4ZWMsMHgwOSwweGU5LDB4MDIsMHg4ZSwweDU4LDB4OWQsMHhiMCwweDJiIH19LAorIHsxNiwgMHhjZGEwLCAwLCB7MHhhNSwweDQwLDB4NWIsMHgwNiwweGRlLDB4NDAsMHg5NSwweDk0LDB4MmQsMHhlNCwweDE5LDB4N2IsMHgwNiwweGRlLDB4MDAsMHg4NCB9fSwKKyB7MTYsIDB4Y2RiMCwgMCwgezB4ODAsMHg2MCwweGUwLDB4MGEsMHg3OCwweDBhLDB4MTYsMHgxMCwweDg3LDB4ODAsMHgyZCwweDY4LDB4MGIsMHg3OSwweDAyLDB4NDggfX0sCisgezE2LCAweGNkYzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweGNiLDB4YTAsMHgyNCwweGUwIH19LAorIHsxNiwgMHhjZGQwLCAwLCB7MHgwZiwweDJhLDB4MDMsMHg4ZSwweDAwLDB4ZDIsMHhkMCwweDM4LDB4ZmEsMHgwZiwweDE4LDB4YzMsMHhjZSwweDI0LDB4MzEsMHhiMCB9fSwKKyB7MTYsIDB4Y2RlMCwgMCwgezB4M2MsMHhlNSwweDBjLDB4M2IsMHgxNywweGNlLDB4MDQsMHhjMCwweDgyLDB4MzgsMHhjMiwweDllLDB4MTAsMHgwMywweDBjLDB4MDAgfX0sCisgezE2LCAweGNkZjAsIDAsIHsweGMzLDB4MDEsMHgzZSwweGMwLDB4MGQsMHg4MSwweDAzLDB4NTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjZTAwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwMCwweGVmLDB4MTAsMHgzZSwweGMyLDB4MGUsMHhiMSwweDIzLDB4MmMsMHhjMSwweGFiLDB4MDEsMHgzNiB9fSwKKyB7MTYsIDB4Y2UxMCwgMCwgezB4ODAsMHgwZiwweGIwLDB4MjMsMHgyZCwweDkwLDB4ZTksMHg4NCwweDcyLDB4YzgsMHg2MiwweGYxLDB4MTcsMHhmYywweDAwLDB4ZmMgfX0sCisgezE2LCAweGNlMjAsIDAsIHsweDAwLDB4M2IsMHhjNCwweDFkLDB4ZjAsMHgwMywweGVjLDB4MDAsMHhlZiwweDA4LDB4M2YsMHhjOCwweDBlLDB4ZjEsMHgwMywweDkwIH19LAorIHsxNiwgMHhjZTMwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVjLDB4ODAsMHhmYiwweGE0LDB4M2EsMHhjOCB9fSwKKyB7MTYsIDB4Y2U0MCwgMCwgezB4MGUsMHg5MCwweDAzLDB4MmMsMHgwNCwweGNhLDB4MDAsMHgzMCwweDYwLDB4MmQsMHgxYSwweDI3LDB4NmMsMHg4NCwweGNiLDB4NjAgfX0sCisgezE2LCAweGNlNTAsIDAsIHsweDMyLDB4ZDIsMHgwYywweGEwLDB4MTMsMHgyZCwweDg0LDB4Y2IsMHgwMiwweDNlLDB4YzAsMHgwZCwweGI4LDB4MDMsMHhhYywweDgwIH19LAorIHsxNiwgMHhjZTYwLCAwLCB7MHhjYiwweDgxLDB4MzIsMHg4MCwweDBjLDB4YjAsMHgwMywweGFhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2U3MCwgMCwgezB4NDgsMHgxMSwweDljLDB4YTQsMHhiNywweDI4LDB4NzMsMHhjMiwweDA4LDB4ZjAsMHgwMiwweDNjLDB4YzAsMHg4ZiwweDAwLDB4MzEgfX0sCisgezE2LCAweGNlODAsIDAsIHsweGMwLDB4MDksMHg3MCwweDgyLDB4OWMsMHg4MCwweDg3LDB4MGMsMHgyMCwweGQ4LDB4MDksMHg3MCwweDIyLDB4MWMsMHgzMCwweDg0IH19LAorIHsxNiwgMHhjZTkwLCAwLCB7MHgwMCwweDNkLDB4YzAsMHgwOCwweDcwLDB4MDIsMHgxNCwweDI0LDB4ODcsMHhhMCwweDIxLDB4YzAsMHgwOCwweDcwLDB4MTIsMHgxMiB9fSwKKyB7MTYsIDB4Y2VhMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDQwLDB4YjMsMHg5NSwweDI5LDB4ZTkgfX0sCisgezE2LCAweGNlYjAsIDAsIHsweDBhLDB4NjgsMHgwMiwweDllLDB4ZDAsMHg4NiwweGYwLDB4YTMsMHhlMCwweDA4LDB4NzgsMHgxMiwweDllLDB4NDQsMHhhMywweDgyIH19LAorIHsxNiwgMHhjZWMwLCAwLCB7MHgyMSwweGU4LDB4MGIsMHgzOCwweDAyLDB4MGUsMHgxMCwweDg3LDB4ODAsMHgyZiwweGUwLDB4MGIsMHgxOCwweDAyLDB4OGUsMHgwMiB9fSwKKyB7MTYsIDB4Y2VkMCwgMCwgezB4ODcsMHgwMCwweDIxLDB4ZTAsMHgwOCwweDc4LDB4MDIsMHgzMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNlZTAsIDAsIHsweDQ4LDB4MTQsMHhjYywweDAwLDB4YjMsMHgwMCwweDI0LDB4YzAsMHg0OCwweDMwLDB4MDIsMHgwYywweDA0LDB4ODMsMHg4MCwweDIwIH19LAorIHsxNiwgMHhjZWYwLCAwLCB7MHhkMCwweDA5LDB4MTAsMHgwMiwweDhjLDB4MDYsMHhhMywweDgwLDB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBjLDB4MDIsMHg4MCB9fSwKKyB7MTYsIDB4Y2YwMCwgMCwgezB4NDAsMHgyOCwweGQyLDB4MGEsMHgzMCwweDAyLDB4MGMsMHgwMSwweDgzLDB4MDAsMHgyMiwweDNjLDB4MDgsMHg4NywweDAyLDB4MTIgfX0sCisgezE2LCAweGNmMTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgxOCwweGZhLDB4MDAsMHgzYSwweDgwIH19LAorIHsxNiwgMHhjZjIwLCAwLCB7MHg4ZSwweGU0LDB4NDIsMHgyOCwweDAyLDB4Y2UsMHg4MCwweDMzLDB4ODAsMHg0ZCwweGEwLDB4ODMsMHhlOCwweDAwLDB4ZWEsMHhhMCB9fSwKKyB7MTYsIDB4Y2YzMCwgMCwgezB4YjIsMHg4MCwweDBhLDB4YTAsMHgwYSwweDI4LDB4MDAsMHhjZSwweDE4LDB4MmYsMHg4MCwweDBmLDB4YTAsMHgxMywweGE4LDB4MDAgfX0sCisgezE2LCAweGNmNDAsIDAsIHsweGNhLDB4MDAsMHgzMiwweDkwLDB4MmMsMHhhYywweDBiLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjZjUwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4MDQsMHgzYSwweDAwLDB4MGYsMHg4MCwweDgzLDB4YzAsMHgwOCwweGU4LDB4MDMsMHgzYSB9fSwKKyB7MTYsIDB4Y2Y2MCwgMCwgezB4MDAsMHgwZSwweDgwLDB4MjIsMHhjMCwweDAwLDB4ZDAsMHgwMCwweDdlLDB4MTAsMHhhNCwweDgwLDB4MDMsMHhjMCwweDAwLDB4ZjggfX0sCisgezE2LCAweGNmNzAsIDAsIHsweDAwLDB4M2UsMHgxMCwweDBkLDB4ODQsMHgwMywweGMwLDB4MDAsMHhmOCwweDAwLDB4YmUsMHgwMCwweDBmLDB4ODAsMHgwMSwweDUyIH19LAorIHsxNiwgMHhjZjgwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGM0LDB4MDIsMHhjOSwweDAwLDB4MzYsMHg0MCB9fSwKKyB7MTYsIDB4Y2Y5MCwgMCwgezB4MGMsMHg5MCwweDAzLDB4NjQsMHgwMiwweDg5LDB4MDQsMHgzMiwweDQyLDB4MGQsMHg5MiwweDAzLDB4ZTYsMHg0MiwweGM5LDB4MDAgfX0sCisgezE2LCAweGNmYTAsIDAsIHsweDMyLDB4NzAsMHgwZSwweDEyLDB4MGIsMHgyNCwweDA4LDB4YzksMHgwMCwweDNlLDB4NDUsMHgwZSwweDk5LDB4MDMsMHhlNCwweDAyIH19LAorIHsxNiwgMHhjZmIwLCAwLCB7MHhjMSwweDAwLDB4MzIsMHg1MCwweDA0LDB4OTQsMHgwMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2ZjMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHg4OSwweDAwLDB4NmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDAsMHg4OSwweDAwLDB4MjIgfX0sCisgezE2LCAweGNmZDAsIDAsIHsweDU0LDB4MGIsMHg5MCwweDAzLDB4ZTYsMHgwMCwweDg5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHg5MCwweDBhLDB4MjQsMHgwMCwweDg5IH19LAorIHsxNiwgMHhjZmUwLCAwLCB7MHgwMCwweDM4LDB4NDgsMHgwOCwweDkwLDB4ODIsMHhlNCwweDA0LDB4ZDksMHgwMCwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4Y2ZmMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4ODksMHgwMSwweDJjLDB4NDAgfX0sCisgezE2LCAweGQwMDAsIDAsIHsweDI4LDB4MTAsMHg0MiwweDY0LDB4MDAsMHhhMSwweDA0LDB4MjIsMHg1MCwweDAxLDB4OTAsMHg0MiwweGU0LDB4MDAsMHg4OSwweDA0IH19LAorIHsxNiwgMHhkMDEwLCAwLCB7MHgyMCwweDQyLDB4MGEsMHg5MCwweDQyLDB4MzQsMHgwMCwweDg5LDB4MDAsMHg2ZSwweDQwLDB4MGEsMHg5MCwweDAwLDB4ZTQsMHgwMCB9fSwKKyB7MTYsIDB4ZDAyMCwgMCwgezB4ODksMHgwMCwweDIzLDB4NDAsMHgwYSwweGQwLDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQwMzAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4ODEsMHgyNCwweDJjLDB4NDgsMHgwOCwweDEwLDB4MDIsMHgwNCwweDgwLDB4YTEsMHgyMCwweDI4IH19LAorIHsxNiwgMHhkMDQwLCAwLCB7MHg0MCwweDBiLDB4MTAsMHgwMiwweDg1LDB4ODAsMHg4MSwweDIwLDB4MjAsMHg0OCwweDA4LDB4NTAsMHg2MiwweDE0LDB4MDIsMHg4MSB9fSwKKyB7MTYsIDB4ZDA1MCwgMCwgezB4MDMsMHgyZSwweDQwLDB4ODgsMHgxNiwweDgyLDB4YzQsMHhhMCwweDkxLDB4MjgsMHgyMSwweDQwLDB4MmEsMHg1MCwweDAyLDB4MDIgfX0sCisgezE2LCAweGQwNjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGM4LDB4NTAsMHgyZSwweDE0IH19LAorIHsxNiwgMHhkMDcwLCAwLCB7MHgwYywweDg1LDB4MDMsMHg2MSwweDQwLDB4ZTgsMHg1MCwweGIyLDB4MTUsMHg0ZCwweDgwLDB4MDIsMHhjMCwweDAwLDB4NDgsMHg1MCB9fSwKKyB7MTYsIDB4ZDA4MCwgMCwgezB4YjIsMHgxNSwweDFhLDB4ODAsMHgxMywweDMwLDB4MDgsMHhjOCwweDAwLDB4M2UsMHgwMCwweDBlLDB4ODIsMHgwMywweGUwLDB4ODAgfX0sCisgezE2LCAweGQwOTAsIDAsIHsweGMwLDB4MjAsMHgzMCwweDAwLDB4MGUsMHg0MCwweDBiLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMGEwLCAwLCB7MHg5OCwweDFkLDB4ZTQsMHg0MCwweGY5LDB4MTAsMHgzZSwweDQ0LDB4MGYsMHhkMCwweDAzLDB4ZTQsMHg0OCwweGRkLDB4MTAsMHgzNyB9fSwKKyB7MTYsIDB4ZDBiMCwgMCwgezB4NDAsMHgwZiwweGQ0LDB4MDcsMHhlNCwweDQwLDB4ZmQsMHgxMCwweDNlLDB4NDUsMHgwZiwweDk0LDB4MDMsMHhlNSwweDA4LDB4ZmQgfX0sCisgezE2LCAweGQwYzAsIDAsIHsweDAyLDB4MzksMHhkMCwweDBmLDB4ZDAsMHg0MywweGY0LDB4YTAsMHhmOSwweDI4LDB4M2UsMHg0YiwweDBkLDB4OTIsMHg4MywweGU2IH19LAorIHsxNiwgMHhkMGQwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGU2LDB4ODAsMHhjOSwweGE2LDB4MzIsMHg2OCB9fSwKKyB7MTYsIDB4ZDBlMCwgMCwgezB4MGMsMHg5MCwweDAzLDB4YTYsMHg4MSwweGU5LDB4ZTksMHgzYiwweDQwLDB4MGUsMHg1OCwweDAzLDB4MzYsMHgyMCwweGM5LDB4YTAgfX0sCisgezE2LCAweGQwZjAsIDAsIHsweDM3LDB4NzgsMHgwZCwweGRhLDB4MDMsMHgzNiwweDI2LDB4YzUsMHgwMCwweDM3LDB4NjksMHgwZSwweGRlLDB4MDMsMHhhNiwweDgyIH19LAorIHsxNiwgMHhkMTAwLCAwLCB7MHhjZCwweGMwLDB4MzMsMHg1MCwweDBmLDB4ZDAsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDExMCwgMCwgezB4MzgsMHgxMCwweGUzLDB4YTQsMHg4OCwweGE5LDB4MjIsMHgzYSwweDA4LDB4MDgsMHgwMCwweDIyLDB4YTAsMHhiOCwweGU1LDB4MzAgfX0sCisgezE2LCAweGQxMjAsIDAsIHsweDIwLDB4MjgsMHg4MCwweDIyLDB4NDMsMHhhMCwweDA4LDB4ZTgsMHgyYSwweDNkLDB4MDgsMHhhNCwweDYyLDB4MjAsMHgwMCwweDg4IH19LAorIHsxNiwgMHhkMTMwLCAwLCB7MHgwMCwweDJlLDB4MTAsMHgwOCwweDhlLDB4MDMsMHgyMywweGEwLDB4ODgsMHhhMCwweDIwLDB4MjgsMHgwYiwweDhhLDB4ODIsMHgwZSB9fSwKKyB7MTYsIDB4ZDE0MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDQwLDB4OTEsMHg0MCwweDIwLDB4NDQgfX0sCisgezE2LCAweGQxNTAsIDAsIHsweDA4LDB4OTAsMHhhMiwweDg1LDB4MTAsMHhhMSwweDIwLDB4MmMsMHg0MiwweDBiLDB4MTQsMHgxMiwweDhjLDB4MDEsMHg5MSwweDEwIH19LAorIHsxNiwgMHhkMTYwLCAwLCB7MHgyYywweDQ4LDB4MDksMHgxMSwweDBhLDB4YzQsMHgwMCwweDgxLDB4MDAsMHgyYywweDUwLDB4MGIsMHgxMSwweDEyLDB4YzUsMHgwMSB9fSwKKyB7MTYsIDB4ZDE3MCwgMCwgezB4YjEsMHg0MCwweDI0LDB4NDgsMHgwYiwweDE4LDB4MGUsMHgwMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQxODAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAwLDB4OTEsMHgwMCwweDIyLDB4NDEsMHgwOCwweDk0LDB4NDIsMHgyNCwweDAwLDB4YjEsMHg0MCwweDIwIH19LAorIHsxNiwgMHhkMTkwLCAwLCB7MHg0MCwweDQ5LDB4YjIsMHg2MiwweDI0LDB4MDAsMHg5OSwweDAwLDB4MGEsMHg0MCwweDA4LDB4OTAsMHgwMiwweGU1LDB4ODAsMHg4OSB9fSwKKyB7MTYsIDB4ZDFhMCwgMCwgezB4MDAsMHgyZSwweDQwLDB4MDksMHhiMCwweDAyLDB4MjQsMHg4MCwweGI5LDB4MDAsMHgyNiwweDUwLDB4NGIsMHg5MCwweDAyLDB4MDYgfX0sCisgezE2LCAweGQxYjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMiwweGQ5LDB4MDAsMHhiMiwweDQwIH19LAorIHsxNiwgMHhkMWMwLCAwLCB7MHgyYywweDk1LDB4MTMsMHhhNCwweDEwLDB4ZTksMHgwMCwweGJlLDB4NjAsMHg4ZiwweDkwLDB4MGIsMHhhNCwweDEwLDB4NTksMHgwMCB9fSwKKyB7MTYsIDB4ZDFkMCwgMCwgezB4MWUsMHg0MCwweDlkLDB4OTQsMHgyMywweGU0LDB4MDIsMHg4OSwweDAwLDB4MzQsMHg0MCwweDBmLDB4OTAsMHgwMywweGU2LDB4MDggfX0sCisgezE2LCAweGQxZTAsIDAsIHsweDc5LDB4MDAsMHhiNiwweDQwLDB4MDcsMHg5OCwweDAzLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMWYwLCAwLCB7MHgyOCwweDAxLDB4ODQsMHgwMCwweGU5LDB4MDIsMHgzYywweDQwLDB4MmYsMHg5OCwweDAyLDB4ZTQsMHgwMCwweGY5LDB4NDIsMHgzYSB9fSwKKyB7MTYsIDB4ZDIwMCwgMCwgezB4NjgsMHgwYSwweDEwLDB4MDMsMHhlNCwweDEwLDB4ZTksMHgwMCwweDNlLDB4NDAsMHgwZSwweDkwLDB4MGYsMHgyNiwweDAwLDB4ZjkgfX0sCisgezE2LCAweGQyMTAsIDAsIHsweDA0LDB4M2UsMHg0MCwweDBlLDB4MWMsMHgwMywweGU2LDB4MDAsMHhjMSwweDAwLDB4M2EsMHg1MCwweDBmLDB4OTksMHg4MywweGNhIH19LAorIHsxNiwgMHhkMjIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDAsMHhlOCwweDAwLDB4M2EsMHgwMCB9fSwKKyB7MTYsIDB4ZDIzMCwgMCwgezB4MGMsMHg4NCwweDAzLDB4MjAsMHgwMCwweGQ4LDB4NDIsMHgzMiwweDA0LDB4MGMsMHg4OCwweDEzLDB4ZTAsMHgwMCwweGM4LDB4MDAgfX0sCisgezE2LCAweGQyNDAsIDAsIHsweDMwLDB4MDAsMHgwYywweDA0LDB4MGIsMHgwMCwweDAwLDB4ZDgsMHgwMCwweDM2LDB4MDAsMHgwZSwweDgwLDB4MjMsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMjUwLCAwLCB7MHhjOCwweDgwLDB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMSwweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDI2MCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MTAsMHg4YSwweDAwLDB4MmUsMHg4MCwweDI4LDB4MjAsMHgyMiwweDI4LDB4MDAsMHg4YSwweDAwLDB4MjMgfX0sCisgezE2LCAweGQyNzAsIDAsIHsweGIwLDB4ODgsMHhlMCwweDAyLDB4MjgsMHgxMCwweGRhLDB4MDAsMHhhMywweGI0LDB4MDgsMHhlOCwweDEwLDB4MjgsMHgwMCwweDhlIH19LAorIHsxNiwgMHhkMjgwLCAwLCB7MHgyMCwweDIzLDB4YTAsMHg0OCwweGVkLDB4MWEsMHgyOCwweDAwLDB4ZGUsMHgwMCwweDIzLDB4OTAsMHgwYSwweGUwLDB4MDIsMHgwYSB9fSwKKyB7MTYsIDB4ZDI5MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4YTMsMHgwMCwweDI4LDB4YzAgfX0sCisgezE2LCAweGQyYTAsIDAsIHsweDA4LDB4MzAsMHgwYSwweDBjLDB4MDAsMHg5MywweDAwLDB4MjAsMHhjMiwweDJhLDB4MzAsMHgyMiwweGE0LDB4MDAsMHhiYiwweDAwIH19LAorIHsxNiwgMHhkMmIwLCAwLCB7MHgwOCwweGUwLDB4MTgsMHgwOSwweDBhLDB4NGMsMHgwMCwweDkzLDB4MDIsMHgyNCwweGU4LDB4MDIsMHgwOCwweDA2LDB4NGMsMHgwMCB9fSwKKyB7MTYsIDB4ZDJjMCwgMCwgezB4OTMsMHgwMCwweDIwLDB4ZDgsMHgwYSwweDkwLDB4MDIsMHg0YSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQyZDAsIDAsIHsweGEwLDB4MDEsMHgxYywweDgwLDB4ODcsMHgwNCwweDJkLDB4YzAsMHgwOCwweDcwLDB4MDIsMHgwZSwweDAwLDB4ODcsMHgxMCwweDI1IH19LAorIHsxNiwgMHhkMmUwLCAwLCB7MHgwMCwweDBhLDB4NjAsMHgwMiwweDVlLDB4MDAsMHg5NywweDAwLDB4MjksMHg4MiwweDA4LDB4NTAsMHgxMiwweDU0LDB4MDAsMHg4ZiB9fSwKKyB7MTYsIDB4ZDJmMCwgMCwgezB4ODAsMHg2MSwweGQwLDB4MDgsMHgwNCwweDAyLDB4NWMsMHgwMSwweGI3LDB4MDgsMHhhOSwweGEwLDB4MGEsMHg1MCwweDgyLDB4NjggfX0sCisgezE2LCAweGQzMDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4M2UsMHg4MCwweGU3LDB4ODAsMHgzOCwweGU0IH19LAorIHsxNiwgMHhkMzEwLCAwLCB7MHgwOCwweDdlLDB4MDMsMHgxZiwweDAwLDB4ZGYsMHg4MCwweGIxLDB4MjEsMHgxZSwweDc4LDB4MDMsMHhkYywweDA0LDB4ZjMsMHg4MCB9fSwKKyB7MTYsIDB4ZDMyMCwgMCwgezB4NWIsMHhlMSwweDA4LDB4MjgsMHgwMywweDVlLDB4MDAsMHhkNywweDgwLDB4MzUsMHg2MCwweDBlLDB4NjgsMHgwMywweDRlLDB4MDAgfX0sCisgezE2LCAweGQzMzAsIDAsIHsweGRmLDB4ODAsMHgzMSwweGUwLDB4MGUsMHhmOCwweDBiLDB4NmEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMzQwLCAwLCB7MHgwOCwweDFkLDB4YWQsMHgwMiwweGZiLDB4NzQsMHgzZSwweGQwLDB4NGYsMHhiMiwweDgzLDB4ZWQsMHgwMCwweDdiLDB4NjgsMHgzYSB9fSwKKyB7MTYsIDB4ZDM1MCwgMCwgezB4MDAsMHg4ZCwweDgwLDB4MDMsMHhhNCwweDIwLDB4ZGIsMHgwMSwweDM2LDB4ODAsMHg2ZiwweGIwLDB4NDEsMHg4NCwweDAwLDB4ZWIgfX0sCisgezE2LCAweGQzNjAsIDAsIHsweDAwLDB4M2MsMHhjMCwweDBmLDB4ZTYsMHg4MywweGJjLDB4NDAsMHhkYiwweDAwLDB4YjYsMHg4MCwweDBmLDB4YjAsMHgwMywweDgyIH19LAorIHsxNiwgMHhkMzcwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGZmLDB4MjAsMHhkZiwweGMwLDB4M2IsMHhlNiB9fSwKKyB7MTYsIDB4ZDM4MCwgMCwgezB4MGUsMHhmOCwweDEzLDB4ZmYsMHg0NCwweGM3LDB4ODIsMHgzYiwweGUwLDB4MGYsMHhmOSwweDAzLDB4YmUsMHgxMCwweGNmLDB4YzggfX0sCisgezE2LCAweGQzOTAsIDAsIHsweDMzLDB4NjAsMHg4ZCwweGViLDB4MDMsMHgzZSwweDAwLDB4ZGIsMHg4MiwweDNmLDB4ZTAsMHgwYywweGQ4LDB4MDMsMHgzZSwweDQwIH19LAorIHsxNiwgMHhkM2EwLCAwLCB7MHhjZSwweDgwLDB4MzMsMHhlNCwweDBmLDB4ZjgsMHgwMywweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDNiMCwgMCwgezB4YTgsMHgxMSwweGJjLDB4NDAsMHg4NywweDAwLDB4MjEsMHhlNCwweDBiLDB4NzgsMHhhMiwweGNlLDB4OTAsMHhjNywweGIwLDB4MjAgfX0sCisgezE2LCAweGQzYzAsIDAsIHsweGU4LDB4MGIsMHgyOCwweDkyLDB4YjYsMHg4OCwweDg3LDB4YTAsMHgyMCwweDY0LDB4MGIsMHgzNSwweDAzLDB4MTQsMHgwMCwweDg3IH19LAorIHsxNiwgMHhkM2QwLCAwLCB7MHhiMiwweDM5LDB4YzAsMHgyYywweGMwLDB4MDMsMHg1ZSwweDAyLDB4Y2YsMHgwMCwweDMxLDB4Y2UsMHgwYiwweDc2LDB4MTIsMHgyYSB9fSwKKyB7MTYsIDB4ZDNlMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4YTMsMHgxMCwweDI5LDB4YzggfX0sCisgezE2LCAweGQzZjAsIDAsIHsweDBiLDB4NzQsMHgwMiwweGRjLDB4ODAsMHg4ZiwweDAwLDB4MjksMHhjYywweDBhLDB4MzAsMHgwNiwweDE0LDB4ODAsMHg4NywweDEwIH19LAorIHsxNiwgMHhkNDAwLCAwLCB7MHgyMSwweGMwLDB4MGIsMHg2NiwweDAyLDB4NWMsMHgwMCwweDg3LDB4MDAsMHgyZCwweGMwLDB4MGIsMHg1MSwweDAyLDB4MWMsMHg4MCB9fSwKKyB7MTYsIDB4ZDQxMCwgMCwgezB4OTYsMHgwMCwweDIxLDB4YzAsMHg1YiwweDc0LDB4ODIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ0MjAsIDAsIHsweDIwLDB4MTQsMHhjYywweDA4LDB4YTMsMHgwMCwweDIwLDB4YzAsMHgwYiwweGI4LDB4MDIsMHhjYywweDAwLDB4OGIsMHg0MCwweGE4IH19LAorIHsxNiwgMHhkNDMwLCAwLCB7MHhjMCwweDhiLDB4MDgsMHgyMiwweDhjLDB4MDIsMHg4MywweDAwLDB4NjAsMHhjMCwweDBiLDB4MzAsMHg0MiwweDA0LDB4MDAsMHg4MyB9fSwKKyB7MTYsIDB4ZDQ0MCwgMCwgezB4NDAsMHgyOCwweGZjLDB4OGEsMHgwMCwweDAyLDB4NmUsMHgwMCwweDgzLDB4MDAsMHhhMCwweGQwLDB4OGIsMHgzOCwweDAyLDB4MDggfX0sCisgezE2LCAweGQ0NTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4YmMsMHgwMiwweGVmLDB4MDAsMHgzYiwweGMwIH19LAorIHsxNiwgMHhkNDYwLCAwLCB7MHg0ZiwweGY4LDB4MDIsMHhmYywweDAyLDB4Y2YsMHgwMCwweDM4LDB4MTIsMHgwZSwweDk4LDB4MDIsMHgyYywweDAwLDB4Y2YsMHgwMCB9fSwKKyB7MTYsIDB4ZDQ3MCwgMCwgezB4MzIsMHhjMCwweDA5LDB4OTAsMHgwMywweDY0LDB4MDIsMHg4MSwweGMwLDB4M2UsMHhkMCwweDBmLDB4OTAsMHgwNywweDNjLDB4MDMgfX0sCisgezE2LCAweGQ0ODAsIDAsIHsweGQ5LDB4MDAsMHgzMiwweDYwLDB4MGYsMHg4OCwweDAzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNDkwLCAwLCB7MHg4MCwweDAwLDB4Y2MsMHgwMCwweGRiLDB4MDAsMHgzZSwweGMwLDB4OGYsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDIsMHgzNiB9fSwKKyB7MTYsIDB4ZDRhMCwgMCwgezB4YzAsMHg0ZiwweDkwLDB4MDIsMHhlNCwweDAwLDB4ZmIsMHgwMCwweGJlLDB4OTAsMHgwZiwweDljLDB4MTMsMHhlYywweDAwLDB4ZTkgfX0sCisgezE2LCAweGQ0YjAsIDAsIHsweDE4LDB4M2EsMHhkMCwweDA0LDB4ZDUsMHgwMywweGVjLDB4NDAsMHhlOSwweDAwLDB4M2EsMHgwMCwweDhmLDB4ODAsMHgwMywweGUwIH19LAorIHsxNiwgMHhkNGMwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGZjLDB4MDAsMHhjZiwweDAwLDB4M2QsMHhjMSB9fSwKKyB7MTYsIDB4ZDRkMCwgMCwgezB4OGMsMHhmMCwweDAzLDB4MmMsMHgwMCwweGVmLDB4MGEsMHhiMywweDEyLDB4MmMsMHg3MCwweDIzLDB4MTQsMHgwYSwweDRmLDB4MDAgfX0sCisgezE2LCAweGQ0ZTAsIDAsIHsweDM1LDB4NjAsMHgwZCwweGIwLDB4MDMsMHgwNCwweDAwLDB4Y2QsMHg4MCwweDA3LDB4ZTgsMHgwYywweGM0LDB4MDMsMHgyYywweDAwIH19LAorIHsxNiwgMHhkNGYwLCAwLCB7MHhjZCwweDAwLDB4MzEsMHhlMiwweDJjLDB4ZTAsMHgwMywweDAwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDUwMCwgMCwgezB4ODEsMHgwNCwweDZjLDB4MDIsMHhhYiwweDAyLDB4MmUsMHhjMCwweDBlLDB4YjAsMHgwMiwweDJjLDB4MDAsMHg4YiwweDAwLDB4MzIgfX0sCisgezE2LCAweGQ1MTAsIDAsIHsweDMwLDB4MDAsMHg5YywweDAzLDB4NmMsMHgwMCwweDhiLDB4MDQsMHgyMiwweDM2LDB4MDgsMHgzNCwweDRhLDB4MmMsMHgwOCwweDg5IH19LAorIHsxNiwgMHhkNTIwLCAwLCB7MHg5MCwweDIwLDB4YjgsMHgwZiwweDg0LDB4MDAsMHhhYywweDAyLDB4ODksMHgwMCwweDM2LDB4YTAsMHgwOCwweGE0LDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4ZDUzMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OGIsMHgwMCwweDJlLDB4YzAgfX0sCisgezE2LCAweGQ1NDAsIDAsIHsweDA4LDB4YjAsMHgwMiwweDBjLDB4MDAsMHg4YiwweDAwLDB4MjIsMHhkMSwweDA4LDB4ODgsMHgxMiwweDI2LDB4MDAsMHhhMywweDAwIH19LAorIHsxNiwgMHhkNTUwLCAwLCB7MHgyNiwweDQwLDB4MGIsMHhiMCwweDAyLDB4MjYsMHgwMCwweDhiLDB4MDAsMHgyNiwweGMwLDB4NTgsMHgxMCwweDEyLDB4MmMsMHgwNCB9fSwKKyB7MTYsIDB4ZDU2MCwgMCwgezB4ODIsMHg4MCwweDJhLDB4NDksMHgwOCwweDMwLDB4MDIsMHgyMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ1NzAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAwLDB4YTMsMHgxNCwweDJjLDB4YzgsMHgxYSwweDM0LDB4OGEsMHgwYywweDg0LDB4ODMsMHg0MCwweDIyIH19LAorIHsxNiwgMHhkNTgwLCAwLCB7MHhjOCwweDA4LDB4MDMsMHg2MiwweDRjLDB4YzAsMHhhMywweDYwLDB4MjAsMHg0MCwweDBhLDB4MzAsMHgwMiwweDBjLDB4MDAsMHg4YiB9fSwKKyB7MTYsIDB4ZDU5MCwgMCwgezB4NDUsMHgwOCwweGMwLDB4MGIsMHgxMCwweDAyLDB4OGMsMHhhMCwweDgzLDB4MDAsMHgyNiwweDQwLDB4MDgsMHgzMCwweDBhLDB4MDIgfX0sCisgezE2LCAweGQ1YTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4N2MsMHgwMCwweGNmLDB4NDAsMHgyZiwweGQyIH19LAorIHsxNiwgMHhkNWIwLCAwLCB7MHg4YywweGY2LDB4MDMsMHgzYywweDIyLDB4Y2YsMHg0MCwweDMyLDB4ZDYsMHg0YywweGE2LDB4YzEsMHgzZCwweGEwLDB4ODcsMHg0OCB9fSwKKyB7MTYsIDB4ZDVjMCwgMCwgezB4MzYsMHgwZCwweDBmLDB4YjEsMHgwMiwweDI0LDB4NDIsMHhjYiwweDYwLDB4MTYsMHhjMCwweDBjLDB4ZDAsMHgwMywweDJjLDB4ODAgfX0sCisgezE2LCAweGQ1ZDAsIDAsIHsweGNhLDB4MDAsMHgzMiwweGMwLDB4MGMsMHgzMCwweDAzLDB4MDAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNWUwLCAwLCB7MHhhMCwweDE5LDB4ZmMsMHgwMCwweGZmLDB4MjAsMHgzZSwweGNhLDB4MGUsMHhiMCwweDAzLDB4ZWMsMHgyMCwweGRiLDB4MzQsMHgzYSB9fSwKKyB7MTYsIDB4ZDVmMCwgMCwgezB4YzgsMHgwZiwweDgwLDB4MDMsMHhlNCwweDEwLDB4ZGIsMHgyMSwweDNlLDB4MTgsMHgwZCwweGYyLDB4MDMsMHhmYywweDgwLDB4ZmYgfX0sCisgezE2LCAweGQ2MDAsIDAsIHsweDMwLDB4MzUsMHhjMCwweDBmLDB4YzAsMHgxMywweGVjLDB4MDAsMHhmZiwweDAwLDB4M2IsMHhjMCwweDBmLDB4ZjAsMHgwMywweGU4IH19LAorIHsxNiwgMHhkNjEwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgxMSwweGZjLDB4MDAsMHhmYiwweDBiLDB4MmYsMHhjYSB9fSwKKyB7MTYsIDB4ZDYyMCwgMCwgezB4OGQsMHhmMiwweDAzLDB4ZmEsMHgwMCwweDk2LDB4ODAsMHgzYiwweGM0LDB4MGQsMHhmMSwweDAzLDB4N2MsMHg4MCwweGVjLDB4ODAgfX0sCisgezE2LCAweGQ2MzAsIDAsIHsweDNiLDB4MDgsMHgwYywweGMyLDB4MDMsMHg3NCwweDAyLDB4Y2MsMHg4MCwweDNmLDB4NDgsMHgwZSwweGYwLDB4MDMsMHgzMCwweGEwIH19LAorIHsxNiwgMHhkNjQwLCAwLCB7MHhkNSwweDgwLDB4M2YsMHg0MCwweDBjLDB4ZjgsMHgwMywweGYwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDY1MCwgMCwgezB4ODAsMHgwOCwweGVlLDB4NDAsMHhiZiwweDgwLDB4MmYsMHhmMCwweDBiLDB4ZjcsMHgyMiwweGVlLDB4MjAsMHg4YSwweDgwLDB4MjMgfX0sCisgezE2LCAweGQ2NjAsIDAsIHsweGZjLDB4ODgsMHg3NSwweDEyLDB4M2QsMHgwMCwweDg4LDB4MDAsMHgyMiwweDAwLDB4MjgsMHg4MCwweDAyLDB4MjQsMHgwOCwweDg4IH19LAorIHsxNiwgMHhkNjcwLCAwLCB7MHgwMCwweDZmLDB4NTAsMHgwMCwweGY1LDB4MDIsMHgyOSwweDAwLDB4ODksMHgwMCwweDJlLDB4NTQsMHgwZCwweDkwLDB4MTEsMHhhMCB9fSwKKyB7MTYsIDB4ZDY4MCwgMCwgezB4MDQsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDAwLDB4YjMsMHgwMCwweDJjLDB4YzEgfX0sCisgezE2LCAweGQ2OTAsIDAsIHsweDA5LDB4MzAsMHg4MiwweGNjLDB4ODIsMHhiYiwweDAwLDB4MjgsMHhjMCwweDQ5LDB4MzIsMHgwMiwweGNkLDB4MDAsMHhiOCwweDAwIH19LAorIHsxNiwgMHhkNmEwLCAwLCB7MHgyYywweDUwLDB4MDksMHgwMSwweDAyLDB4MGMsMHg0MCwweDgwLDB4MDAsMHg2YywweDQ0LDB4MDksMHgzMCwweDAyLDB4MjAsMHgwMCB9fSwKKyB7MTYsIDB4ZDZiMCwgMCwgezB4YjAsMHgwMCwweDJjLDB4NDAsMHgxOCwweDMwLDB4MDYsMHhlMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ2YzAsIDAsIHsweGMwLDB4MDEsMHhhYywweDAwLDB4YmIsMHgwMSwweDJlLDB4YzAsMHgwYiwweGIwLDB4MDIsMHhlZSwweDAwLDB4YWEsMHgwMCwweDRhIH19LAorIHsxNiwgMHhkNmQwLCAwLCB7MHhjMCwweDA4LDB4YjAsMHg1MiwweGVjLDB4MDAsMHg5OCwweDAyLDB4MjYsMHg0MCwweDA5LDB4ODAsMHgwMiwweDZjLDB4MDEsMHhhYSB9fSwKKyB7MTYsIDB4ZDZlMCwgMCwgezB4MDQsMHgyZSwweDQwLDB4MDksMHhiMCwweDAyLDB4MjIsMHgwMCwweGE5LDB4ODAsMHgyZSwweDQxLDB4MDksMHg5MCwweDAyLDB4ZjAgfX0sCisgezE2LCAweGQ2ZjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4ZWMsMHgwMCwweGZiLDB4MDAsMHgzZSwweGMwIH19LAorIHsxNiwgMHhkNzAwLCAwLCB7MHgwZCwweGIwLDB4MDMsMHhjZSwweDg0LDB4ZmEsMHgwMCwweDFhLDB4YzAsMHg4ZCwweGIwLDB4NDMsMHhlYywweDAwLDB4ZjAsMHgwMiB9fSwKKyB7MTYsIDB4ZDcxMCwgMCwgezB4M2YsMHgwMCwweDBkLDB4ZDEsMHgwMywweDM1LDB4MDAsMHhjYiwweDQ4LDB4MmUsMHg0MCwweDJmLDB4YjAsMHgwOSwweDIyLDB4ODAgfX0sCisgezE2LCAweGQ3MjAsIDAsIHsweGY5LDB4YzgsMHgxZSwweGUwLDB4MDgsMHhiMSwweGUyLDB4ZDAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNzMwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwMCwweDdiLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDIzLDB4ZmMsMHgwMCwweGRlLDB4MDAsMHgyNCB9fSwKKyB7MTYsIDB4ZDc0MCwgMCwgezB4YzAsMHg0ZiwweGYwLDB4MDMsMHgyYywweDAwLDB4ZWMsMHgyMCwweDNiLDB4MDAsMHgwZSwweDk4LDB4MDMsMHg5NCwweDAyLDB4ZGQgfX0sCisgezE2LCAweGQ3NTAsIDAsIHsweDAwLDB4M2YsMHg0MCwweDRlLDB4ZjAsMHgwMSwweGY4LDB4MDAsMHhkZCwweDAwLDB4M2MsMHhlNCwweDBmLDB4ZDgsMHgwMywweGI4IH19LAorIHsxNiwgMHhkNzYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwweGFjLDB4YzAsMHhmYiwweDIwLDB4MzIsMHhjOCB9fSwKKyB7MTYsIDB4ZDc3MCwgMCwgezB4OGQsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGY5LDB4MDAsMHgzYSwweGMyLDB4MmMsMHgzMCwweDAzLDB4NmMsMHgwNCwweGQ4LDB4MDIgfX0sCisgezE2LCAweGQ3ODAsIDAsIHsweDNjLDB4NDQsMHg4ZCwweDEwLDB4MDMsMHhhZCwweDAzLDB4ZWEsMHgwMCwweDNjLDB4NDAsMHgwYywweDcwLDB4MjMsMHhlNCwweDAwIH19LAorIHsxNiwgMHhkNzkwLCAwLCB7MHhjOCwweDQwLDB4M2EsMHhjMCwweDBkLDB4YmMsMHgwMywweDUwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDdhMCwgMCwgezB4YzgsMHgwMSwweDNkLDB4MDAsMHhiZiwweDQyLDB4MjMsMHhmMCwweDBkLDB4ZjAsMHgwMiwweGU1LDB4MDAsMHhlMiwweDAxLDB4MzcgfX0sCisgezE2LCAweGQ3YjAsIDAsIHsweGYxLDB4MDgsMHhmMCwweDBlLDB4M2QsMHhjMCwweGE4LDB4MDAsMHgyZSwweDU0LDB4MjgsMHg5MCwweDAyLDB4MmMsMHgwMCwweDhhIH19LAorIHsxNiwgMHhkN2MwLCAwLCB7MHgwNSwweDNiLDB4NDEsMHg0OCwweGY1LDB4MDMsMHg4YywweDAwLDB4ODksMHgwMCwweDIyLDB4ZDQsMHgwZSwweDk1LDB4MDIsMHhmMiB9fSwKKyB7MTYsIDB4ZDdkMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4YjMsMHgwNCwweDIwLDB4YzAgfX0sCisgezE2LCAweGQ3ZTAsIDAsIHsweDg5LDB4MzAsMHgwMiwweGNjLDB4NDAsMHhiMiwweDAwLDB4MmMsMHhjNCwweDQ4LDB4MzAsMHgwMiwweDJjLDB4MDIsMHhhMiwweDAwIH19LAorIHsxNiwgMHhkN2YwLCAwLCB7MHgyYywweDIwLDB4MTksMHgyMCwweDFhLDB4ODAsMHgwOCwweGIwLDB4MDAsMHg2YywweDQwLDB4MDgsMHgzMCwweDAyLDB4YzQsMHgwMCB9fSwKKyB7MTYsIDB4ZDgwMCwgMCwgezB4ODEsMHgwMCwweDJjLDB4NDAsMHgwOCwweDMwLDB4MDIsMHhmOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ4MTAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDAwLDB4YjcsMHhhMCwweGUxLDB4ZTAsMHgwOSwweDc4LDB4MDIsMHhkZiwweDA0LDB4YWUsMHg4MCwweDJkIH19LAorIHsxNiwgMHhkODIwLCAwLCB7MHhlMCwweDA4LDB4NzksMHgwMiwweDFlLDB4MTAsMHg4NywweDkwLDB4MmMsMHgyOCwweDI5LDB4NjgsMHgwMiwweDgyLDB4ODEsMHhiNCB9fSwKKyB7MTYsIDB4ZDgzMCwgMCwgezB4ODAsMHgyZCwweDYwLDB4MDgsMHg3OCwweDEwLDB4YmMsMHgwMCwweDhmLDB4ODAsMHgyZCwweDYwLDB4MGIsMHg2OCwweDAyLDB4YzggfX0sCisgezE2LCAweGQ4NDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4MGMsMHgwNSwweGYzLDB4OTIsMHgzMCwweGNhIH19LAorIHsxNiwgMHhkODUwLCAwLCB7MHgwZCwweDMwLDB4MDMsMHhjYywweDAwLDB4ZjMsMHgwMCwweDNjLDB4YzAsMHgwYywweDMwLDB4MDIsMHgwYywweDgwLDB4NzAsMHgwMCB9fSwKKyB7MTYsIDB4ZDg2MCwgMCwgezB4MmMsMHg0MCwweDBkLDB4MjAsMHgwMywweDg5LDB4MDAsMHhiMSwweDAwLDB4M2UsMHg0MCwweDJjLDB4MzAsMHgwMywweGVjLDB4NTAgfX0sCisgezE2LCAweGQ4NzAsIDAsIHsweGMzLDB4MjAsMHgzYywweDQwLDB4MGMsMHgzMCwweDAzLDB4ZDIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkODgwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwMCwweGZmLDB4MDAsMHgzYywweGMwLDB4MGUsMHhiMCwweDgzLDB4ZWMsMHg0MCwweGVhLDB4MDAsMHgzNiB9fSwKKyB7MTYsIDB4ZDg5MCwgMCwgezB4YzIsMHgwZiwweGIwLDB4ODMsMHhhYywweDAwLDB4ZjgsMHgwMCwweDNlLDB4NDgsMHgwZSwweGUwLDB4MGIsMHg3YSwweDgwLDB4Y2YgfX0sCisgezE2LCAweGQ4YTAsIDAsIHsweDAwLDB4M2IsMHg0NCwweDBmLDB4ZjAsMHgwMywweGVjLDB4YzAsMHhmZiwweDAwLDB4MDMsMHg0NCwweDBlLDB4ZTAsMHgwMywweGQwIH19LAorIHsxNiwgMHhkOGIwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVjLDB4MDAsMHhmYiwweDIzLDB4M2UsMHhjOCB9fSwKKyB7MTYsIDB4ZDhjMCwgMCwgezB4MWQsMHhiMCwweDAzLDB4ZWUsMHgwMCwweGNhLDB4MDAsMHgzZSwweGM4LDB4MGMsMHhiMiwweDAzLDB4MmQsMHg5MCwweGM4LDB4ODQgfX0sCisgezE2LCAweGQ4ZDAsIDAsIHsweDM2LDB4MDAsMHgyZCwweGIwLDB4MDMsMHg2MCwweDE4LDB4OWIsMHg4MCwweDMzLDB4NTAsMHgwYywweGYyLDB4MDMsMHhlMiwweDAwIH19LAorIHsxNiwgMHhkOGUwLCAwLCB7MHhjOSwweDgwLDB4MzIsMHg0MCwweDBjLDB4YjgsMHgwMywweDJhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDhmMCwgMCwgezB4NDgsMHgxMSwweDljLDB4MDAsMHhiNywweDI4LDB4MGMsMHhkMiwweDI4LDB4NzMsMHgwMiwweGZjLDB4MDAsMHg4NiwweDA0LDB4MmMgfX0sCisgezE2LCAweGQ5MDAsIDAsIHsweGNjLDB4MjgsMHg3MCwweDgzLDB4MGMsMHgyMCwweDk1LDB4MDEsMHgyMCwweDAwLDB4MDksMHgzMCwweDEyLDB4MTAsMHgwNCwweDg1IH19LAorIHsxNiwgMHhkOTEwLCAwLCB7MHgwMCwweDIxLDB4NTIsMHgwOCwweDc1LDB4MDIsMHhkOCwweDAwLDB4ODcsMHgwMCwweDIxLDB4NDAsMHgwOCwweDYwLDB4MDIsMHgxMiB9fSwKKyB7MTYsIDB4ZDkyMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweGQ0LDB4YjcsMHhiMSwweDA5LDB4ZTEgfX0sCisgezE2LCAweGQ5MzAsIDAsIHsweDA4LDB4NzgsMHgyMiwweGRlLDB4MDAsMHg5NSwweDgwLDB4MmQsMHhlMCwweDA4LDB4NzgsMHgwYSwweDVlLDB4NDIsMHg5NCwweGMwIH19LAorIHsxNiwgMHhkOTQwLCAwLCB7MHgyMSwweDYwLDB4MDgsMHg3OCwweDAyLDB4NWEsMHgwMCwweDg3LDB4ODAsMHgyZCwweDY4LDB4MDgsMHg3YSwweDAyLDB4ZDcsMHgwMCB9fSwKKyB7MTYsIDB4ZDk1MCwgMCwgezB4OTcsMHg4MCwweDIwLDB4NjAsMHgwOSwweDc4LDB4MDIsMHgzMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ5NjAsIDAsIHsweDQ4LDB4MTAsMHhjYywweDAwLDB4YjMsMHgwMCwweDJjLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhjZCwweDgwLDB4OTIsMHgwMCwweDJjIH19LAorIHsxNiwgMHhkOTcwLCAwLCB7MHhjMCwweDA4LDB4YjAsMHgwMiwweGNjLDB4MDAsMHg5MCwweDgwLDB4YTAsMHg0MCwweDA5LDB4MzYsMHgwMiwweDQ4LDB4MDIsMHg4MyB9fSwKKyB7MTYsIDB4ZDk4MCwgMCwgezB4YTAsMHhhYywweDQwLDB4MmEsMHgzMCwweDA2LDB4Y2UsMHgwMiwweDkzLDB4MDQsMHhhMCwweDQwLDB4MDksMHgyMCwweDBhLDB4MTIgfX0sCisgezE2LCAweGQ5OTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweGZhLDB4MDAsMHgzYSwweDgwIH19LAorIHsxNiwgMHhkOWEwLCAwLCB7MHgwZCwweGEwLDB4MDMsMHhmYiwweDAyLDB4ZGUsMHg4MCwweDNlLDB4ODAsMHgwYywweGEwLDB4MDMsMHgyOCwweDAwLDB4Y2UsMHg4MCB9fSwKKyB7MTYsIDB4ZDliMCwgMCwgezB4MzIsMHg4MCwweDBjLDB4YTQsMHgwMywweDc4LDB4MDAsMHhjZSwweGE0LDB4M2YsMHg4MCwweDBjLDB4YTAsMHgwNywweGY5LDB4MDAgfX0sCisgezE2LCAweGQ5YzAsIDAsIHsweGRlLDB4MDAsMHgzMiwweDgwLDB4MmQsMHhlMCwweDAyLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkOWQwLCAwLCB7MHg0OCwweDAwLDB4ZTEsMHgwMCwweGY4LDB4MDAsMHg3YywweDAwLDB4MGYsMHg4MCwweDAzLDB4ZTAsMHg0MCwweGU4LDB4MTAsMHgzYyB9fSwKKyB7MTYsIDB4ZDllMCwgMCwgezB4MDEsMHhjZiwweDgwLDB4MGYsMHgyMCwweDAwLDB4ZTgsMHgwMCwweDNlLDB4MDAsMHgwZSwweDA0LDB4MDMsMHg5MCwweDAwLDB4ZTggfX0sCisgezE2LCAweGQ5ZjAsIDAsIHsweDAwLDB4MjAsMHgwMCwweDBkLDB4ODAsMHgwNywweGUwLDB4MDAsMHhlOCwweDAwLDB4M2UsMHgwNCwweDBlLDB4ODAsMHgwMywweGQyIH19LAorIHsxNiwgMHhkYTAwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDAsMHhmOSwweDEwLDB4N2UsMHg0MSB9fSwKKyB7MTYsIDB4ZGExMCwgMCwgezB4MGUsMHg5MCwweDAzLDB4MjQsMHgwMCwweGY5LDB4MDAsMHgzNiwweDY4LDB4MGUsMHg5MCwweDBmLDB4YTQsMHgwOCwweGM5LDB4MDAgfX0sCisgezE2LCAweGRhMjAsIDAsIHsweDNhLDB4NDAsMHgwYywweDkwLDB4MGIsMHgyNCwweDEyLDB4ZTksMHgwMCwweDNlLDB4NDQsMHgyYywweDkwLDB4MDMsMHg2NCwweDI0IH19LAorIHsxNiwgMHhkYTMwLCAwLCB7MHhmOSwweDAyLDB4MmUsMHg0MCwweDBjLDB4OTAsMHgwMywweGMyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGE0MCwgMCwgezB4ODAsMHgwNCwweDY1LDB4MTAsMHhiOSwweDgwLDB4M2UsMHg0MCwweDA4LDB4OTAsMHgwYSwweDI2LDB4MDAsMHhiMSwweDEwLDB4MmEgfX0sCisgezE2LCAweGRhNTAsIDAsIHsweDcyLDB4MDgsMHg5MCwweDA3LDB4NjQsMHgwMiwweDg5LDB4NDAsMHgyZSwweDQwLDB4MjgsMHg5MCwweDEyLDB4MjUsMHgwMCwweDg5IH19LAorIHsxNiwgMHhkYTYwLCAwLCB7MHg0NSwweDNlLDB4NTAsMHgwZCwweDkwLDB4MGEsMHgyNSwweDAwLDB4YjksMHg0MCwweDJlLDB4NDAsMHgyOCwweDk0LDB4MDMsMHhlMCB9fSwKKyB7MTYsIDB4ZGE3MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjksMHgwMCwweDJlLDB4NDAgfX0sCisgezE2LCAweGRhODAsIDAsIHsweDQ4LDB4OTAsMHg0MiwweDI2LDB4MDEsMHhiOSwweDQwLDB4MjYsMHg0MCwweDBhLDB4OTAsMHg0MiwweDg0LDB4MDEsMHg4YiwweDA4IH19LAorIHsxNiwgMHhkYTkwLCAwLCB7MHgyYywweDQwLDB4MDksMHhkMCwweDgyLDB4MzQsMHgzMiwweGE5LDB4MDgsMHg2ZSwweDQyLDB4MDgsMHgxMCwweDAyLDB4MjQsMHgyMCB9fSwKKyB7MTYsIDB4ZGFhMCwgMCwgezB4YjksMHgwOCwweDJjLDB4NDAsMHgxOCwweDkwLDB4ODIsMHhjNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRhYjAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4YjMsMHgyMCwweDI4LDB4NDgsMHgwOCwweDEyLDB4MDIsMHgwNCwweDAxLDB4YjEsMHgwMCwweDI4IH19LAorIHsxNiwgMHhkYWMwLCAwLCB7MHg1OCwweDA4LDB4MTIsMHgwMiwweDA1LDB4ODksMHg4MSwweDQwLDB4MmMsMHg1OCwweDA4LDB4NTYsMHgwNiwweDE1LDB4ODAsMHg4MSB9fSwKKyB7MTYsIDB4ZGFkMCwgMCwgezB4NDAsMHgyOCwweDUwLDB4MDksMHgxNCwweDAyLDB4MDUsMHg4MCwweGIxLDB4NDAsMHgyYywweDVhLDB4MDgsMHgxNCwweDAyLDB4YzIgfX0sCisgezE2LCAweGRhZTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjgsMHgwMCwweGY4LDB4MDAsMHgyZSwweDAwIH19LAorIHsxNiwgMHhkYWYwLCAwLCB7MHgyZSwweDg1LDB4MDMsMHgyMSwweDQ4LDB4ZjgsMHgwMCwweDM2LDB4MDAsMHg4ZSwweDA1LDB4MDIsMHhhMCwweDA4LDB4ODAsMHgwMCB9fSwKKyB7MTYsIDB4ZGIwMCwgMCwgezB4M2UsMHgwMCwweDBkLDB4ODAsMHgwYiwweDEwLDB4MDQsMHhlMCwweDAwLDB4MmMsMHgwMCwweDRjLDB4ODAsMHgwMywweDQwLDB4MDAgfX0sCisgezE2LCAweGRiMTAsIDAsIHsweGYwLDB4MDAsMHgzZSwweDA4LDB4MGMsMHgwMCwweDAzLDB4ZWUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkYjIwLCAwLCB7MHg5OCwweDFkLDB4ZTQsMHg0MCwweGY5LDB4MTAsMHgzZSwweDQ0LDB4MGYsMHg5MSwweDAzLDB4ZjQsMHgwMCwweGZkLDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4ZGIzMCwgMCwgezB4NDQsMHgwZiwweDkxLDB4MDMsMHhlNCwweDQwLDB4ZmQsMHgwMywweDNmLDB4NDQsMHgxZiwweDkxLDB4MWIsMHhlNCwweDQwLDB4ZmQgfX0sCisgezE2LCAweGRiNDAsIDAsIHsweDAxLDB4M2YsMHg1MCwweDBlLDB4OTQsMHgwMywweGY0LDB4NDAsMHhmZCwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZDAsMHgwMywweGE2IH19LAorIHsxNiwgMHhkYjUwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgxNSwweGY0LDB4MDAsMHhjZCwweGEwLDB4NzEsMHg2OCB9fSwKKyB7MTYsIDB4ZGI2MCwgMCwgezB4OGQsMHg5OCwweDAzLDB4ZDQsMHgwMCwweGNkLDB4MDAsMHgzMywweDYwLDB4MGMsMHg5OCwweDhmLDB4MjcsMHgyMCwweGM5LDB4NDAgfX0sCisgezE2LCAweGRiNzAsIDAsIHsweDNlLDB4NzgsMHgwYywweDllLDB4OGIsMHgyNywweDIwLDB4ZDEsMHgxMSwweDMwLDB4NjAsMHg4YywweDljLDB4MDMsMHgyNSwweDAwIH19LAorIHsxNiwgMHhkYjgwLCAwLCB7MHhmOSwweDQwLDB4M2UsMHg3OCwweDBmLDB4OTAsMHgwMywweDQ2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGI5MCwgMCwgezB4MzgsMHgxMCwweGUwLDB4MTAsMHg4OCwweDAxLDB4MjIsMHgwMSwweDA4LDB4OGMsMHgyMiwweGU4LDB4MDAsMHg4OCwweDAyLDB4MmEgfX0sCisgezE2LCAweGRiYTAsIDAsIHsweDE0LDB4MDgsMHg4YywweDBiLDB4MjMsMHg5MCwweDg4LDB4YTAsMHgyZSwweGIwLDB4MDgsMHg4YywweDQyLDB4MjMsMHgwMCwweDg4IH19LAorIHsxNiwgMHhkYmIwLCAwLCB7MHhhMCwweDM2LDB4MmEsMHgxOCwweDhhLDB4MDIsMHgyMiwweDAwLDB4YjgsMHhhMCwweDJlLDB4MzQsMHgwYiwweGNhLDB4ODIsMHgwZSB9fSwKKyB7MTYsIDB4ZGJjMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAwLDB4ODEsMHg0MCwweDI0LDB4NTAgfX0sCisgezE2LCAweGRiZDAsIDAsIHsweDA5LDB4MTYsMHg4MiwweGM0LDB4MDAsMHhhOSwweDAwLDB4MjAsMHg0MCwweDA4LDB4MTIsMHg5MiwweDU0LDB4MDgsMHg4NSwweDAwIH19LAorIHsxNiwgMHhkYmUwLCAwLCB7MHgyZiwweDRjLDB4MDksMHg1MiwweDEyLDB4MTQsMHg4MCwweDlkLDB4MDAsMHgyMSwweDUwLDB4MDgsMHg1NCwweDIyLDB4MTQsMHg4MCB9fSwKKyB7MTYsIDB4ZGJmMCwgMCwgezB4YjUsMHgwMCwweDJkLDB4NDgsMHgwYiwweGQwLDB4MDIsMHg0MiwweDA1LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRjMDAsIDAsIHsweDE4LDB4MDUsMHhhNCwweDAyLDB4ODksMHgwMSwweGEyLDB4NDAsMHg0OCwweDkwLDB4MDIsMHhlNCwweDAyLDB4YTksMHgwMCwweDJhIH19LAorIHsxNiwgMHhkYzEwLCAwLCB7MHg0MCwweDY4LDB4OTAsMHgwMiwweDY0LDB4MTAsMHhhZCwweDAwLDB4MmYsMHg0MSwweDI4LDB4NTAsMHgwMiwweDM0LDB4MDAsMHg4ZCB9fSwKKyB7MTYsIDB4ZGMyMCwgMCwgezB4NDQsMHgyNywweDQwLDB4MzksMHhkMCwweDAyLDB4MzUsMHgwMCwweGJkLDB4MTQsMHgyZiwweDQwLDB4MGIsMHhkMCwweDAyLDB4NDYgfX0sCisgezE2LCAweGRjMzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDA1LDB4YzQsMHgwMCwweGM5LDB4MDAsMHgzNiwweDQwIH19LAorIHsxNiwgMHhkYzQwLCAwLCB7MHgyZCwweDkwLDB4MDMsMHhlNywweDAwLDB4ZTEsMHhlMCwweDMyLDB4NDAsMHgwYywweDkwLDB4MGIsMHg2NCwweDAyLDB4YzksMHgwOCB9fSwKKyB7MTYsIDB4ZGM1MCwgMCwgezB4M2MsMHg1MCwweDBjLDB4OTAsMHgwMiwweDI2LDB4MDIsMHhkOSwweGMwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgxMywweDI3LDB4MDAgfX0sCisgezE2LCAweGRjNjAsIDAsIHsweGY5LDB4MjAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4NjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkYzcwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwMiwweGY5LDB4MDAsMHgzOCwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTYsMHg4MCwweGQ5LDB4YTAsMHgzYyB9fSwKKyB7MTYsIDB4ZGM4MCwgMCwgezB4NDAsMHgwZiwweDEwLDB4MDMsMHhhNCwweDAwLDB4ZDksMHgxMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjNCwweDkyLDB4ZjkgfX0sCisgezE2LCAweGRjOTAsIDAsIHsweDIxLDB4M2MsMHg0MCwweDJlLDB4OTAsMHgwZiwweGU2LDB4ODAsMHhmOSwweDgwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweDhhIH19LAorIHsxNiwgMHhkY2EwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwMCwweGEwLDB4NDAsMHhlOCwweDEwLDB4M2UsMHgwNCB9fSwKKyB7MTYsIDB4ZGNiMCwgMCwgezB4NGUsMHg4MCwweDAzLDB4MjAsMHg4MCwweGQ4LDB4NjAsMHgzYSwweDAyLDB4MGMsMHg4MCwweDEzLDB4MjAsMHgwMCwweGY4LDB4NDAgfX0sCisgezE2LCAweGRjYzAsIDAsIHsweDM2LDB4MTAsMHgyZCwweDgwLDB4MDMsMHhhMCwweDA4LDB4ZTgsMHg0MCwweDMyLDB4MDAsMHgwZCwweDAwLDB4MDMsMHgyMSwweDAyIH19LAorIHsxNiwgMHhkY2QwLCAwLCB7MHhjOCwweDQwLDB4YjIsMHgwMCwweDBmLDB4YzAsMHgwMywweGNhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGNlMCwgMCwgezB4MjgsMHgxMSwweDNiLDB4MTAsMHg4NiwweDAxLDB4MmYsMHhhMCwweDBkLDB4YTAsMHgwMiwweDM4LDB4MDAsMHg4ZSwweGUwLDB4MjMgfX0sCisgezE2LCAweGRjZjAsIDAsIHsweGEyLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwMCwweGJhLDB4ODAsMHgyMiwweDgwLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwMCwweDgyIH19LAorIHsxNiwgMHhkZDAwLCAwLCB7MHgwMCwweDJhLDB4ODAsMHgyOCwweGEwLDB4MDIsMHgyYSwweDA0LDB4OGEsMHg4MCwweDIyLDB4YTAsMHgwYiwweDYwLDB4MDIsMHhjYSB9fSwKKyB7MTYsIDB4ZGQxMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0MywweDgwLDB4YTIsMHgwMCwweDJjLDB4YTAgfX0sCisgezE2LCAweGRkMjAsIDAsIHsweDA4LDB4MzAsMHgwMiwweDJlLDB4MDAsMHg5MiwweDAwLDB4MjgsMHhjMCwweDI4LDB4MzAsMHgwMiwweDJjLDB4MDAsMHhiMywweDgwIH19LAorIHsxNiwgMHhkZDMwLCAwLCB7MHgyNCwweGMwLDB4MDksMHgzMCwweDBhLDB4OGMsMHgwMCwweGEzLDB4MDAsMHg2MCwweGMwLDB4MDgsMHgzMCwweDBhLDB4NGMsMHgwMCB9fSwKKyB7MTYsIDB4ZGQ0MCwgMCwgezB4ODMsMHgwMCwweDIwLDB4ZTAsMHgwYiwweDIwLDB4MDIsMHhjYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRkNTAsIDAsIHsweGEwLDB4MDEsMHgxMCwweDAwLDB4ODYsMHgwMCwweDJkLDB4YzAsMHgwOSwweDNhLDB4MDIsMHgzNSwweDAwLDB4ODYsMHgwMCwweDIxIH19LAorIHsxNiwgMHhkZDYwLCAwLCB7MHhjMCwweDA4LDB4NzMsMHgwMiwweDEwLDB4MDAsMHhiZiwweDg4LDB4MjEsMHgwMCwweDA4LDB4NzAsMHgwMiwweDFjLDB4MDgsMHg4ZiB9fSwKKyB7MTYsIDB4ZGQ3MCwgMCwgezB4MDAsMHgyYiwweGMwLDB4MDgsMHgyMCwweDEyLDB4NWUsMHgyMCwweDg3LDB4ODgsMHgyMSwweDgzLDB4MGIsMHg2MCwweDAyLDB4ZTggfX0sCisgezE2LCAweGRkODAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MTIsMHgwMCwweGU1LDB4ODEsMHgzZCwweGEwIH19LAorIHsxNiwgMHhkZDkwLCAwLCB7MHgyYywweDdhLDB4MGIsMHgxZSwweDAwLDB4ZDQsMHg4MCwweDM4LDB4ZTAsMHgwYywweGZhLDB4MGIsMHgxZSwweDAwLDB4ZjYsMHg4MCB9fSwKKyB7MTYsIDB4ZGRhMCwgMCwgezB4MzQsMHhlMCwweDBkLDB4MjgsMHgwMywweDhhLDB4MDAsMHhlNiwweDgwLDB4MzEsMHgyMCwweDBjLDB4NzgsMHgwMywweDdhLDB4MDQgfX0sCisgezE2LCAweGRkYjAsIDAsIHsweGNlLDB4ODQsMHgzMSwweGUwLDB4NGYsMHg3OCwweDQzLDB4ZWEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZGMwLCAwLCB7MHgwOCwweDBkLDB4ODAsMHgwMCwweGY4LDB4MDAsMHgzZSwweGMwLDB4MGYsMHhiNSwweDIzLDB4ZTQsMHgwMCwweGYwLDB4MDQsMHgzNiB9fSwKKyB7MTYsIDB4ZGRkMCwgMCwgezB4NDAsMHgwZiwweGI2LDB4ODcsMHhlMCwweDAwLDB4ZjIsMHgwMCwweDNlLDB4MDAsMHgxZiwweGEwLDB4MGIsMHhlOCwweDAwLDB4ZmEgfX0sCisgezE2LCAweGRkZTAsIDAsIHsweDAwLDB4M2UsMHgwMCwweDBlLDB4YTAsMHgwMywweGE4LDB4MDAsMHhmYSwweDAwLDB4M2UsMHg4MCwweDBmLDB4YjAsMHgwMywweGMyIH19LAorIHsxNiwgMHhkZGYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGY2LDB4MDAsMHhjYywweDgwLDB4MzMsMHhhMCB9fSwKKyB7MTYsIDB4ZGUwMCwgMCwgezB4MGMsMHhmYywweDAzLDB4M2UsMHgwMCwweGZjLDB4ODAsMHgzNywweGUwLDB4MGYsMHhiOSwweDIxLDB4M2UsMHgwMCwweGZkLDB4ODIgfX0sCisgezE2LCAweGRlMTAsIDAsIHsweDMzLDB4ZTAsMHgyYywweGY4LDB4MDMsMHg3ZSwweDEwLDB4ZGYsMHg4NCwweDNkLDB4ZTAsMHgwYywweGY4LDB4MDMsMHhmNiwweDAwIH19LAorIHsxNiwgMHhkZTIwLCAwLCB7MHhmZCwweDgwLDB4M2YsMHg2MCwweDBjLDB4ZTgsMHgyMywweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGUzMCwgMCwgezB4YTgsMHgxMSwweDk4LDB4NDAsMHg4NCwweDEwLDB4MjEsMHhjMCwweDA4LDB4NzAsMHgwMiwweDEwLDB4ODAsMHhiNCwweDAwLDB4MjEgfX0sCisgezE2LCAweGRlNDAsIDAsIHsweGM4LDB4MGIsMHg3YSwweDAyLDB4MTAsMHgwMCwweGZkLDB4MDAsMHgyMSwweDA0LDB4MDgsMHg3MCwweDAyLDB4MWMsMHg0MiwweDg3IH19LAorIHsxNiwgMHhkZTUwLCAwLCB7MHgwMCwweDJkLDB4YzQsMHg0OCwweDYxLDB4MDIsMHhkNiwweDgwLDB4YjUsMHgwMCwweDJmLDB4MDQsMHgwOCwweDYxLDB4ODIsMHgyYSB9fSwKKyB7MTYsIDB4ZGU2MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MCwweDAwLDB4ODEsMHgwMCwweDIxLDB4ODAgfX0sCisgezE2LCAweGRlNzAsIDAsIHsweDA4LDB4MzAsMHgwMiwweDFjLDB4MTAsMHhiYywweDA4LDB4MjUsMHg4MCwweDRiLDB4MzAsMHgwZSwweDFjLDB4MDAsMHhiNCwweDAwIH19LAorIHsxNiwgMHhkZTgwLCAwLCB7MHgyMCwweGMwLDB4MDgsMHgyMCwweDAyLDB4NTgsMHgwMCwweDk2LDB4MDAsMHgyZiwweDAwLDB4MGEsMHg3MCwweDAyLDB4ZDAsMHg4MCB9fSwKKyB7MTYsIDB4ZGU5MCwgMCwgezB4YjQsMHgxOCwweDJkLDB4NDAsMHgwOSwweGY4LDB4MDIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRlYTAsIDAsIHsweDIwLDB4MTQsMHhjOCwweDAyLDB4ODAsMHgwMCwweGEwLDB4YzAsMHgwOCwweDMwLDB4MjIsMHgwYiwweGMwLDB4YjAsMHhjMCwweDIyIH19LAorIHsxNiwgMHhkZWIwLCAwLCB7MHg4MCwweDBiLDB4MzAsMHgwMiwweDAwLDB4MDAsMHhhMCwweDA0LDB4MjIsMHgwMCwweDI4LDB4YTAsMHgwMiwweDJiLDB4MDAsMHg4YSB9fSwKKyB7MTYsIDB4ZGVjMCwgMCwgezB4MDAsMHgyYywweDAwLDB4MDgsMHhhMCwweDA2LDB4YzAsMHgwMCwweGIwLDB4YzIsMHgyYywweDAwLDB4MDksMHhiYywweDFhLDB4MDggfX0sCisgezE2LCAweGRlZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YTAsMHgwMCwweGM4LDB4MDAsMHgzMiwweGMwIH19LAorIHsxNiwgMHhkZWUwLCAwLCB7MHgwYywweGYwLDB4MGIsMHgyNiwweDAwLDB4ZjksMHhjMCwweDM2LDB4MDAsMHgwZiwweGYwLDB4MTMsMHgyYywweDEwLDB4YmIsMHg0MCB9fSwKKyB7MTYsIDB4ZGVmMCwgMCwgezB4ZjIsMHhjMCwweDA4LDB4OTAsMHgwMywweDY3LDB4MDAsMHhkOSwweDgwLDB4M2UsMHhjMCwweDA4LDB4OTAsMHgwMiwweGVjLDB4MDAgfX0sCisgezE2LCAweGRmMDAsIDAsIHsweGZiLDB4ZDAsMHgzZSwweGMwLDB4MjksMHg4YywweDAwLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZjEwLCAwLCB7MHg4MCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4NDQsMHgzYywweGQwLDB4MmYsMHhiMCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MjAsMHgzZSB9fSwKKyB7MTYsIDB4ZGYyMCwgMCwgezB4NDAsMHgwZiwweDMwLDB4MDMsMHhlMCwweDAwLDB4ZmIsMHgwOCwweDNlLDB4MDAsMHgwZiwweDkwLDB4MTMsMHhlNCwweDQyLDB4ZjkgfX0sCisgezE2LCAweGRmMzAsIDAsIHsweDEwLDB4M2UsMHhjMCwweDBmLDB4ODAsMHgwMywweGVlLDB4MDAsMHhmYiwweDAwLDB4M2UsMHg4MCwweDBlLDB4ODIsMHgwMywweGUwIH19LAorIHsxNiwgMHhkZjQwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGUwLDB4MDgsMHhmYywweDgwLDB4MzIsMHhlNCB9fSwKKyB7MTYsIDB4ZGY1MCwgMCwgezB4MGUsMHhmMCwweDAzLDB4NzQsMHgwMCwweGZjLDB4MDAsMHgzZiwweDQwLDB4MGMsMHhmMCwweDBiLDB4M2MsMHgwMCwweGZlLDB4MDAgfX0sCisgezE2LCAweGRmNjAsIDAsIHsweDNmLDB4YzAsMHgwZCwweGMxLDB4MDMsMHgyMCwweDIwLDB4Y2MsMHgxMCwweDMzLDB4MDAsMHgwYywweGQxLDB4MDMsMHg1OCwweDAwIH19LAorIHsxNiwgMHhkZjcwLCAwLCB7MHhjZSwweDAwLDB4MmYsMHhjMCwweDBmLDB4ZDEsMHgwMywweDAwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGY4MCwgMCwgezB4ODEsMHg0NCwweDYyLDB4MDAsMHhiMCwweDQwLDB4MmEsMHhmMSwweDA4LDB4YjAsMHgxMiwweDI2LDB4MDgsMHhiOCwweGM4LDB4MmUgfX0sCisgezE2LCAweGRmOTAsIDAsIHsweDcwLDB4MGEsMHhiMCwweDAyLDB4MjAsMHgwMCwweGJhLDB4MDAsMHgyZSwweDAwLDB4MjgsMHg4MCwweDAzLDB4MjIsMHg0MCwweDg4IH19LAorIHsxNiwgMHhkZmEwLCAwLCB7MHgwMSwweDIwLDB4MDAsMHgwYSwweDgwLDB4MDIsMHgyOCwweDAwLDB4OGEsMHgwMSwweDJlLDB4ODAsMHg4YiwweDkwLDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4ZGZiMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyNiwweDAwLDB4YjgsMHgyOCwweDIyLDB4NDIgfX0sCisgezE2LCAweGRmYzAsIDAsIHsweDA4LDB4MzAsMHgwMiwweDY2LDB4MDAsMHhiOCwweDgwLDB4MmUsMHgzMCwweDg4LDB4YjAsMHgwMiwweDJjLDB4MDAsMHhiOSwweDAxIH19LAorIHsxNiwgMHhkZmQwLCAwLCB7MHgyZSwweGMwLDB4ODgsMHg5MCwweDAyLDB4YTQsMHgwMCwweDg5LDB4MDAsMHgyMiwweGMwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwYyB9fSwKKyB7MTYsIDB4ZGZlMCwgMCwgezB4ODksMHgwMSwweDJlLDB4NDAsMHgxYiwweDgwLDB4MDIsMHg2MCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRmZjAsIDAsIHsweDA4LDB4MDQsMHgwMCwweDAwLDB4YjAsMHgwMCwweDI4LDB4YzAsMHgyOCwweDMwLDB4MDIsMHgwMCwweDAwLDB4YjAsMHgwMCwweDJjIH19LAorIHsxNiwgMHhlMDAwLCAwLCB7MHg0MCwweDBhLDB4MzAsMHgwMiwweDAwLDB4MDAsMHhiMSwweDAwLDB4MmMsMHgwMCwweDA4LDB4MTAsMHgwYSwweDA0LDB4MDAsMHg4MSB9fSwKKyB7MTYsIDB4ZTAxMCwgMCwgezB4MDEsMHhhMiwweGMwLDB4MDgsMHgwMCwweDBhLDB4MDQsMHg4MCwweDgxLDB4MDAsMHgyYywweDAwLDB4MWIsMHgwMCwweDBhLDB4MDIgfX0sCisgezE2LCAweGUwMjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NjAsMHgwMCwweGY4LDB4MDAsMHgzMiwweDQwIH19LAorIHsxNiwgMHhlMDMwLCAwLCB7MHgwZSwweGYwLDB4MjMsMHg2NCwweDA4LDB4ZjgsMHgwMCwweDJlLDB4MDAsMHgwYywweGYwLDB4MDMsMHgyYywweDAwLDB4ZjgsMHgwMCB9fSwKKyB7MTYsIDB4ZTA0MCwgMCwgezB4M2UsMHhjMCwweDBjLDB4ODAsMHgwMywweDIwLDB4MDIsMHhjOCwweDA0LDB4MzIsMHgwMCwweDFjLDB4OTAsMHgwMywweDIwLDB4MDAgfX0sCisgezE2LCAweGUwNTAsIDAsIHsweGM4LDB4MDEsMHgzZSwweDQxLDB4OWYsMHg5MCwweDQzLDB4NDAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMDYwLCAwLCB7MHhhMCwweDFkLDB4ZjAsMHgwMCwweGZjLDB4MGMsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZjAsMHgxMCwweGY0LDB4MDAsMHgzZiB9fSwKKyB7MTYsIDB4ZTA3MCwgMCwgezB4MDAsMHgwZiwweGY0LDB4MjMsMHhmMCwweDAwLDB4ZmMsMHgwMCwweDNmLDB4MDAsMHgwZSwweGMwLDB4MDMsMHhiMCwweDAwLDB4ZmMgfX0sCisgezE2LCAweGUwODAsIDAsIHsweDAwLDB4M2YsMHgwMCwweDBmLDB4YzAsMHgwMywweGUxLDB4MDAsMHhmYywweDAwLDB4M2YsMHgwMSwweDFmLDB4NTAsMHgwMywweGU4IH19LAorIHsxNiwgMHhlMDkwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwZCwweGYwLDB4ZDAsMHhmZiwweDIwLDB4M2UsMHhkMCB9fSwKKyB7MTYsIDB4ZTBhMCwgMCwgezB4OGUsMHhiMCwweDAzLDB4ZWMsMHhhMCwweGRiLDB4MjgsMHgzZSwweGNjLDB4MGMsMHhiMywweDAzLDB4YWQsMHgwOCwweGY4LDB4M2MgfX0sCisgezE2LCAweGUwYjAsIDAsIHsweDMyLDB4MjMsMHgwZSwweDQ4LDB4MjMsMHg3YSwweDAwLDB4ZmQsMHg5NCwweDNmLDB4ZTAsMHgwZiwweDc4LDB4MzMsMHhlZSwweDA4IH19LAorIHsxNiwgMHhlMGMwLCAwLCB7MHhiZiwweDgwLDB4M2YsMHhlNCwweDBmLDB4ZjksMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTBkMCwgMCwgezB4YTAsMHgwMCwweGVjLDB4YzgsMHhiZiwweGQxLDB4MGYsMHhjOCwweDBjLDB4MjYsMHg4MiwweGZkLDB4MjQsMHg4ZiwweDAwLDB4MmUgfX0sCisgezE2LCAweGUwZTAsIDAsIHsweDk5LDB4MGEsMHhmMiwweDYyLDB4MWQsMHhkMCwweDk5LDB4NjEsMHgyMiwweDcxLDB4ODgsMHg4OCwweDAyLDB4YWMsMHgwMCwweGI4IH19LAorIHsxNiwgMHhlMGYwLCAwLCB7MHgyMiwweDJlLDB4MjAsMHg0YiwweDg4LDB4MDMsMHhhMCwweDAwLDB4ODAsMHgwMCwweDJlLDB4MDgsMHgwYiwweDgwLDB4MjMsMHg2MCB9fSwKKyB7MTYsIDB4ZTEwMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDA0LDB4YjMsMHgwMywweDBjLDB4Y2MgfX0sCisgezE2LCAweGUxMTAsIDAsIHsweDBhLDB4MTMsMHgxMiwweGNjLDB4MTQsMHhhMywweDBlLDB4MGMsMHg1OCwweDBhLDB4MzMsMHgwMiwweDhjLDB4MTAsMHhhMywweDIwIH19LAorIHsxNiwgMHhlMTIwLCAwLCB7MHhhMCwweDBhLDB4MTgsMHg5MCwweDAyLDB4NDgsMHhhMCwweGIwLDB4MjAsMHgyNCwweDgwLDB4MGEsMHgyMCwweDAyLDB4Y2MsMHgwOSB9fSwKKyB7MTYsIDB4ZTEzMCwgMCwgezB4YTEsMHgwMCwweDJjLDB4ODAsMHgwYiwweDMyLDB4NDIsMHhhMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUxNDAsIDAsIHsweGUwLDB4MTEsMHhhYywweDIwLDB4YmIsMHgwMCwweDJlLDB4YzAsMHg0YiwweDgwLDB4YTIsMHhlYywweDAwLDB4YWIsMHgwMCwweDRlIH19LAorIHsxNiwgMHhlMTUwLCAwLCB7MHg0NiwweDJhLDB4YjAsMHgwMiwweDJjLDB4MDQsMHg5YiwweDgwLDB4MmEsMHg2MCwweDhhLDB4OWMsMHgwMiwweGFjLDB4MDAsMHhiOSB9fSwKKyB7MTYsIDB4ZTE2MCwgMCwgezB4ODEsMHgyZSwweDQwLDB4MGIsMHg5OCwweDAyLDB4YTMsMHgwMCwweDhhLDB4MDAsMHgyZSwweDQwLDB4MGIsMHg4MCwweDA0LDB4ZjAgfX0sCisgezE2LCAweGUxNzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZTEsMHgwMCwweGZiLDB4MDQsMHgzZSwweGMwIH19LAorIHsxNiwgMHhlMTgwLCAwLCB7MHgwZSwweGI0LDB4MDMsMHhlYywweDBhLDB4ZGIsMHgwMiwweDJlLDB4ZDEsMHgwZSwweGIwLDB4MDMsMHhhYywweDAwLDB4ZmIsMHg4MiB9fSwKKyB7MTYsIDB4ZTE5MCwgMCwgezB4MzIsMHgyOCwweDFlLDB4MGMsMHgwMywweDY4LDB4MDAsMHhiOSwweDAwLDB4M2UsMHg0MCwweDRmLDB4YjAsMHg0MywweGVkLDB4MDAgfX0sCisgezE2LCAweGUxYTAsIDAsIHsweGVhLDB4MDAsMHgzZSwweDQwLDB4MGYsMHg4MCwweDAzLDB4OTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMWIwLCAwLCB7MHhjMCwweDAxLDB4YjgsMHgxOCwweGZmLDB4MDIsMHgxZiwweGMwLDB4MGMsMHhlMiwweDAzLDB4ZmMsMHgwMCwweGRmLDB4MDMsMHgyZiB9fSwKKyB7MTYsIDB4ZTFjMCwgMCwgezB4YTEsMHgwZiwweDcwLDB4MDMsMHhmYywweDA0LDB4YWIsMHgwNCwweDM3LDB4NDIsMHgyZCwweGQwLDB4MDIsMHg3YywweDAwLDB4ZmMgfX0sCisgezE2LCAweGUxZDAsIDAsIHsweDAwLDB4M2YsMHg4MCwweDBmLDB4YzAsMHgwMywweGIwLDB4MDAsMHhmZCwweDAwLDB4M2YsMHg4MCwweDBmLDB4ZjAsMHgwMywweDc4IH19LAorIHsxNiwgMHhlMWUwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGE5LDB4MDAsMHhkYiwweDAwLDB4M2MsMHhjMCB9fSwKKyB7MTYsIDB4ZTFmMCwgMCwgezB4MmUsMHg5NCwweDAxLDB4NmMsMHgxMSwweGNiLDB4MDAsMHhiOCwweGMwLDB4MGMsMHhiMCwweDAzLDB4NmMsMHgwMCwweGViLDB4MDEgfX0sCisgezE2LCAweGUyMDAsIDAsIHsweDMyLDB4MTAsMHgwNywweDkyLDB4MDMsMHhhOCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MGMsMHgwNywweGEyLDB4MDMsMHhhZCwweDAwIH19LAorIHsxNiwgMHhlMjEwLCAwLCB7MHhkOCwweDAwLDB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMywweGQwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTIyMCwgMCwgezB4YzgsMHgwNSwweDI4LDB4MDgsMHhiZiwweDAwLDB4MmYsMHhjMCwweDg4LDB4ODAsMHgwMiwweDNjLDB4MDgsMHhlZiwweDAzLDB4MjIgfX0sCisgezE2LCAweGUyMzAsIDAsIHsweDAwLDB4MGQsMHhmNSwweDAwLDB4M2MsMHgwMCwweDhiLDB4ODIsMHgyMiwweDYwLDB4MDMsMHg5YywweDAyLDB4MmMsMHgxMCwweGI5IH19LAorIHsxNiwgMHhlMjQwLCAwLCB7MHhiMCwweDIyLDB4ZjAsMHgwYiwweDkwLDB4MDIsMHgyMCwweDAwLDB4YmIsMHgwMCwweDIyLDB4ZTIsMHgwZCwweGIwLDB4MDIsMHhmMiB9fSwKKyB7MTYsIDB4ZTI1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0MCwweDAwLDB4YjMsMHgwMiwweDJjLDB4YzAgfX0sCisgezE2LCAweGUyNjAsIDAsIHsweDA4LDB4MzAsMHgwMiwweDZjLDB4MDAsMHg4MywweDAwLDB4MjAsMHhjMCwweDA5LDB4MzQsMHgwNCwweGVjLDB4MDAsMHhhOCwweDAwIH19LAorIHsxNiwgMHhlMjcwLCAwLCB7MHgyMiwweGYwLDB4MGIsMHgwMCwweDAyLDB4ODgsMHgwMCwweGIzLDB4MDAsMHgyOCwweGUwLDB4MGIsMHgxNCwweDAyLDB4YTAsMHgwMCB9fSwKKyB7MTYsIDB4ZTI4MCwgMCwgezB4OTMsMHgwMCwweDIwLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhmOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUyOTAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDA0LDB4YjcsMHg4MCwweDJkLDB4ZTgsMHgwOCwweDc4LDB4MDIsMHgwZSwweGM4LDB4YTcsMHg5MCwweDIxIH19LAorIHsxNiwgMHhlMmEwLCAwLCB7MHhhOCwweDE5LDB4MzgsMHg1MiwweDllLDB4YzEsMHg4NywweDgwLDB4MjEsMHhlMiwweDBiLDB4ZDksMHg4MiwweDllLDB4MDAsMHhiNiB9fSwKKyB7MTYsIDB4ZTJiMCwgMCwgezB4YTAsMHgyZCwweDIwLDB4MGIsMHg2OCwweDAyLDB4MWUsMHgwMCwweGI0LDB4YzEsMHgyMSwweDIwLDB4MDksMHg0OCwweDAyLDB4YzggfX0sCisgezE2LCAweGUyYzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4MGMsMHg4MCwweGIzLDB4MTAsMHgzZSwweGUwIH19LAorIHsxNiwgMHhlMmQwLCAwLCB7MHgwZSwweDNhLDB4MDcsMHg0ZSwweDAwLDB4Y2IsMHg5MCwweDNhLDB4NjEsMHgwZCwweDM4LDB4MDMsMHhjZSwweGQxLDB4ZTEsMHg5OCB9fSwKKyB7MTYsIDB4ZTJlMCwgMCwgezB4MzAsMHhhNCwweDhmLDB4MTAsMHgwMywweDg4LDB4MDAsMHhiYSwweGExLDB4M2MsMHg4NCwweDA3LDB4MDAsMHgwMywweDgyLDB4ZDQgfX0sCisgezE2LCAweGUyZjAsIDAsIHsweGQxLDB4MDAsMHg3MiwweDgwLDB4MGMsMHgzMCwweDAzLDB4ZDIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMzAwLCAwLCB7MHg0MCwweDE1LDB4YmMsMHgwNCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhjMiwweDIzLDB4ZWMsMHhiMCwweGZmLDB4MDAsMHgzMiB9fSwKKyB7MTYsIDB4ZTMxMCwgMCwgezB4MDQsMHgwNiwweGI0LDB4MjMsMHg3YywweDEwLDB4YmYsMHgwMCwweDNlLDB4ODQsMHgwZiwweGIwLDB4MDMsMHg3YywweDQwLDB4ZmYgfX0sCisgezE2LCAweGUzMjAsIDAsIHsweDAwLDB4MzMsMHg0MCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZSwweDAwLDB4YmYsMHg0MCwweDBmLDB4YzgsMHgwMywweGQwIH19LAorIHsxNiwgMHhlMzMwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGU0LDB4MDAsMHhjYiwweDMzLDB4M2UsMHhjOCB9fSwKKyB7MTYsIDB4ZTM0MCwgMCwgezB4NGMsMHhiMCwweDAzLDB4YWMsMHg5MCwweGRiLDB4YTAsMHgzNiwweGMwLDB4MGUsMHhiYSwweDQzLDB4NmMsMHgwMCwweGM5LDB4MDAgfX0sCisgezE2LCAweGUzNTAsIDAsIHsweDNlLDB4NDAsMHgwZiwweDAwLDB4MGYsMHgyOCwweDAwLDB4ZmIsMHgwMCwweDNlLDB4NDAsMHgwZiwweDE4LDB4NDMsMHg2MCwweDAwIH19LAorIHsxNiwgMHhlMzYwLCAwLCB7MHhmYSwweDAwLDB4M2UsMHg0MCwweDRmLDB4MDgsMHgwYiwweDJhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTM3MCwgMCwgezB4NDgsMHgxMSwweDljLDB4MTAsMHgwNywweDA4LDB4MmMsMHhjYSwweDA4LDB4MjAsMHgwMiwweDFjLDB4MjAsMHg4NywweDI4LDB4M2YgfX0sCisgezE2LCAweGUzODAsIDAsIHsweDgwLDB4OGEsMHhmMCwweDAyLDB4MWQsMHg0MCwweDg3LDB4MDQsMHgyZCwweGMwLDB4MGIsMHg3MCwweDAyLDB4MWMsMHgwMCwweGI2IH19LAorIHsxNiwgMHhlMzkwLCAwLCB7MHgwMCwweDJkLDB4ODAsMHgwYiwweDYwLDB4MDMsMHgxYywweDAwLDB4YjUsMHgwMCwweDJkLDB4ODAsMHgwYiwweDcwLDB4MDIsMHgxMiB9fSwKKyB7MTYsIDB4ZTNhMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg4ZSwweDAwLDB4ODcsMHhhMCwweDJkLDB4ZTQgfX0sCisgezE2LCAweGUzYjAsIDAsIHsweDBhLDB4NTgsMHgwMiwweDFlLDB4MDEsMHg4MywweDkwLDB4MjEsMHg3MCwweDBiLDB4NzksMHgwMiwweDllLDB4MDEsMHg4NSwweGMwIH19LAorIHsxNiwgMHhlM2MwLCAwLCB7MHgyZCwweGUwLDB4NGIsMHg1OCwweDEyLDB4MWEsMHgwMCwweGI2LDB4ODAsMHgyZCwweDIwLDB4MGIsMHg0OCwweDAyLDB4NTIsMHgwMCB9fSwKKyB7MTYsIDB4ZTNkMCwgMCwgezB4YjQsMHg4MCwweDJkLDB4MjAsMHgwYiwweDQ4LDB4MDIsMHgzMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUzZTAsIDAsIHsweDQ4LDB4MTQsMHhlYywweDAwLDB4ODMsMHgwMCwweDJjLDB4YzAsMHg4OCwweDM2LDB4MDIsMHgwYywweDAyLDB4ODMsMHgwMCwweDZjIH19LAorIHsxNiwgMHhlM2YwLCAwLCB7MHhjMCwweDBiLDB4MzAsMHgwYSwweGFjLDB4MDAsMHg5YiwweGUwLDB4NmMsMHhjOCwweDBiLDB4MzIsMHgwMiwweDBjLDB4MDEsMHhiMyB9fSwKKyB7MTYsIDB4ZTQwMCwgMCwgezB4MDAsMHgyYywweGMwLDB4MGIsMHgzMCwweDAyLDB4MGMsMHgxMCwweGIzLDB4NDAsMHgyYywweGMwLDB4MGIsMHgzYywweDgyLDB4MTIgfX0sCisgezE2LCAweGU0MTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YjgsMHgwMiwweGNhLDB4MDAsMHgzZSwweDgwIH19LAorIHsxNiwgMHhlNDIwLCAwLCB7MHgwZSwweGU0LDB4OGIsMHgyOCwweDAwLDB4Y2EsMHgwMCwweDMzLDB4OTUsMHgwZiwweGEwLDB4MDcsMHhhOCwweDAyLDB4Y2UsMHg0MCB9fSwKKyB7MTYsIDB4ZTQzMCwgMCwgezB4M2YsMHhiMCwweDBmLDB4ZTQsMHg4MiwweDI4LDB4MDAsMHhmYSwweDAwLDB4M2UsMHg4MCwweDBmLDB4YTAsMHgyMywweDY4LDB4MDAgfX0sCisgezE2LCAweGU0NDAsIDAsIHsweGZhLDB4NDAsMHgzZSwweDgxLDB4NGYsMHhhNCwweGUzLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNDUwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHg4MCwweGYwLDB4MDAsMHgzYywweDAwLDB4MmYsMHgwMCwweDAyLDB4NjAsMHgwMCwweGU4LDB4MDAsMHgzYyB9fSwKKyB7MTYsIDB4ZTQ2MCwgMCwgezB4MDAsMHgwZSwweDgwLDB4MDEsMHgyMCwweDAwLDB4ZTgsMHgwNCwweDVlLDB4MDQsMHgwZiwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZmMgfX0sCisgezE2LCAweGU0NzAsIDAsIHsweDAxLDB4M2YsMHgxMCwweDBmLDB4YzQsMHgwMywweGIwLDB4MDAsMHhmYywweDA5LDB4M2YsMHgwMCwweDBmLDB4YzAsMHgwMywweGQyIH19LAorIHsxNiwgMHhlNDgwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDAsMHhhOSwweDIwLDB4MzYsMHg0MCB9fSwKKyB7MTYsIDB4ZTQ5MCwgMCwgezB4MGUsMHg5MCwweDAzLDB4NDQsMHgwNCwweGQ5LDB4MDAsMHgzZSwweDQwLDB4MGQsMHg5MCwweDAzLDB4ZTQsMHgwNCwweGM5LDB4MDAgfX0sCisgezE2LCAweGU0YTAsIDAsIHsweDMyLDB4NDAsMHg4ZiwweDkwLDB4MGIsMHhlNCwweDA4LDB4ZjksMHgwMCwweDNlLDB4NDQsMHgwZSwweDk4LDB4MDMsMHhlNiwweDAwIH19LAorIHsxNiwgMHhlNGIwLCAwLCB7MHhmOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGMyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTRjMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHg4OSwweDAwLDB4MjIsMHg0MCwweDE4LDB4OTAsMHgwMiwweDI0LDB4MDAsMHg4OSwweDAwLDB4MmUgfX0sCisgezE2LCAweGU0ZDAsIDAsIHsweDQwLDB4MDgsMHg5NCwweDAyLDB4ZTQsMHgwMCwweGQ5LDB4MDQsMHgyMiwweDQwLDB4MGIsMHgxYywweDBiLDB4NjQsMHgwMCwweGI5IH19LAorIHsxNiwgMHhlNGUwLCAwLCB7MHg5NCwweDJjLDB4NTAsMHgwOCwweDljLDB4MDIsMHhlNCwweDE0LDB4YjksMHg5MCwweDBlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhlMCB9fSwKKyB7MTYsIDB4ZTRmMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAyLDB4ODksMHgwMCwweDI2LDB4NDAgfX0sCisgezE2LCAweGU1MDAsIDAsIHsweDRhLDB4OTAsMHgwMiwweDY0LDB4MDAsMHg5OSwweDA0LDB4MmUsMHg0MCwweDA4LDB4OTgsMHg4MiwweGU0LDB4MDAsMHg4OSwweDAwIH19LAorIHsxNiwgMHhlNTEwLCAwLCB7MHg2YSwweDQwLDB4MGEsMHg5MiwweDgyLDB4ZTQsMHgwMCwweGJkLDB4MDEsMHgyZiwweDUwLDB4MTIsMHhkNiwweDAyLDB4ZjQsMHg0MCB9fSwKKyB7MTYsIDB4ZTUyMCwgMCwgezB4YmQsMHgwMCwweDBmLDB4NDAsMHgwYiwweGQwLDB4MDIsMHhjNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU1MzAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4ODEsMHgyMCwweDIwLDB4NDgsMHgwOCwweDEyLDB4MDIsMHgwNCwweDgwLDB4ODEsMHgyMiwweDJjIH19LAorIHsxNiwgMHhlNTQwLCAwLCB7MHg0OCwweGE4LDB4MTIsMHgwNiwweGM0LDB4OTAsMHg5MSwweDIwLDB4MjgsMHg1MCwweDBiLDB4OTAsMHgwMiwweDQ1LDB4MDAsMHhiNSB9fSwKKyB7MTYsIDB4ZTU1MCwgMCwgezB4NDAsMHg2ZCwweDQwLDB4MDgsMHg1MCwweDEyLDB4ZDQsMHgwNCwweGI1LDB4MDIsMHgyZCwweDQwLDB4MGIsMHg1MCwweDAyLDB4YzIgfX0sCisgezE2LCAweGU1NjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGM4LDB4MDAsMHgzNiwweDE0IH19LAorIHsxNiwgMHhlNTcwLCAwLCB7MHgwYSwweDg1LDB4MDMsMHg0MSwweDQwLDB4ZDgsMHg1MCwweDJlLDB4MTQsMHgwYywweDg1LDB4MDMsMHhjMSwweDQwLDB4YzgsMHg1MCB9fSwKKyB7MTYsIDB4ZTU4MCwgMCwgezB4YmEsMHgwMCwweDBlLDB4ODAsMHgyMywweGUwLDB4MDAsMHg3OCwweDAwLDB4M2UsMHgwMCwweDBlLDB4ODAsMHgwMywweGUwLDB4MDQgfX0sCisgezE2LCAweGU1OTAsIDAsIHsweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHhjMCwweDAzLDB4ZWUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNWEwLCAwLCB7MHg5OCwweDFkLDB4ZjQsMHg0MCwweGQ5LDB4MTAsMHgzZSwweDQ0LDB4MDcsMHhmMSwweDAzLDB4ZTQsMHg0MCwweGY5LDB4MTAsMHgzZiB9fSwKKyB7MTYsIDB4ZTViMCwgMCwgezB4NDQsMHhhZiwweDkxLDB4MDMsMHhlNCwweDQwLDB4ZmQsMHgxMCwweDM3LDB4NTAsMHgwZiwweGQwLDB4MDMsMHhlNCwweDAwLDB4ZjkgfX0sCisgezE2LCAweGU1YzAsIDAsIHsweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4YTAsMHhmOSwweDI4LDB4M2UsMHg0YSwweDBmLDB4OTIsMHg4MywweGU2IH19LAorIHsxNiwgMHhlNWQwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGU2LDB4ZDQsMHhmZCwweGEyLDB4M2EsMHg3MCB9fSwKKyB7MTYsIDB4ZTVlMCwgMCwgezB4OGMsMHg5ZSwweDAzLDB4MjYsMHg4MCwweGM5LDB4YTAsMHgzMiwweDY4LDB4MGMsMHhkYiwweDQzLDB4MjcsMHg4MCwweDlkLDB4YTIgfX0sCisgezE2LCAweGU1ZjAsIDAsIHsweGI3LDB4NDAsMHgwZiwweDUwLDB4MDMsMHg2NSwweDAwLDB4ZmQsMHgwMCwweDNmLDB4YzEsMHgwNywweGQwLDB4MDMsMHhmNSwweDA0IH19LAorIHsxNiwgMHhlNjAwLCAwLCB7MHhmZCwweDQwLDB4MmYsMHhjMCwweDBjLDB4ZDAsMHgwMywweGM2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTYxMCwgMCwgezB4MzgsMHgxMCwweGUzLDB4ODgsMHhiOCwweDUwLDB4MjIsMHgzOCwweDA4LDB4OGUsMHgwMCwweGEyLDB4YTAsMHg4OCwweGU4LDB4MjIgfX0sCisgezE2LCAweGU2MjAsIDAsIHsweDM4LDB4NDgsMHg4OCwweDAzLDB4NjIsMHgxMCwweGE4LDB4ZTgsMHgzYywweDAwLDB4MGIsMHg4MCwweDAzLDB4NjIsMHg4MCwweGI4IH19LAorIHsxNiwgMHhlNjMwLCAwLCB7MHgwMSwweDJlLDB4ODAsMHgwYiwweDgwLDB4MjEsMHhhMiwweDAwLDB4YjAsMHg4NCwweDJlLDB4MmEsMHgyOCwweDhhLDB4ODIsMHhjZSB9fSwKKyB7MTYsIDB4ZTY0MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDQwLDB4YjEsMHgwMCwweDI4LDB4NTggfX0sCisgezE2LCAweGU2NTAsIDAsIHsweDgwLDB4MTMsMHg0MCwweDA1LDB4MDAsMHg4MSwweDQwLDB4MjAsMHg1MiwweDI4LDB4MTYsMHgwMiwweDg1LDB4ODAsMHg5YiwweGMyIH19LAorIHsxNiwgMHhlNjYwLCAwLCB7MHg2NCwweDQxLDB4OGIsMHg5OCwweDAyLDB4MDQsMHgwMCwweGIxLDB4MDksMHgyYywweDQwLDB4MWIsMHgxMCwweDIwLDB4YzQsMHgwMCB9fSwKKyB7MTYsIDB4ZTY3MCwgMCwgezB4YjEsMHgwMCwweDJjLDB4NDAsMHg0OCwweDEwLDB4MDIsMHhjMiwweDA1LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU2ODAsIDAsIHsweDE4LDB4MTUsMHhhNSwweDg0LDB4YjksMHgwMCwweDIwLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDAwLDB4MDEsMHgwMCwweDIwIH19LAorIHsxNiwgMHhlNjkwLCAwLCB7MHg1MCwweDA4LDB4OTAsMHg0MiwweDY0LDB4MDAsMHhhOSwweDEwLDB4YWUsMHg1OCwweDAzLDB4OTgsMHgwMiwweDY0LDB4MDAsMHhiOSB9fSwKKyB7MTYsIDB4ZTZhMCwgMCwgezB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDQ2LDB4YTQsMHgxMCwweGI5LDB4MDAsMHgyZSwweDQxLDB4MDgsMHg5MCwweDAyLDB4YzYgfX0sCisgezE2LCAweGU2YjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDExLDB4ZTcsMHgwMCwweGY5LDB4MDAsMHgyYSwweDQwIH19LAorIHsxNiwgMHhlNmMwLCAwLCB7MHgyYywweDk0LDB4MGIsMHgyNCwweDAyLDB4YzksMHgwMCwweGIyLDB4NDQsMHgwYywweDkwLDB4MDMsMHgyNCwweDA0LDB4ZDksMHg4MCB9fSwKKyB7MTYsIDB4ZTZkMCwgMCwgezB4YjYsMHg0MSwweDhmLDB4MTgsMHgwMywweDI0LDB4MDAsMHhmOSwweDYwLDB4M2UsMHg0MCwweDBmLDB4OTYsMHgwMywweGU0LDB4MDAgfX0sCisgezE2LCAweGU2ZTAsIDAsIHsweGY5LDB4ODAsMHgzZSwweDQyLDB4OGMsMHg5MCwweDAzLDB4ZTgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNmYwLCAwLCB7MHgyOCwweDAxLDB4YTYsMHgwMCwweGYxLDB4MDAsMHgzZSwweDQwLDB4MGYsMHgxYywweDAzLDB4YzQsMHgwMCwweGY5LDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4ZTcwMCwgMCwgezB4NDAsMHg4ZiwweDkwLDB4MjMsMHhjNCwweDEwLDB4ZjksMHgwMCwweGJlLDB4NDAsMHgwZiwweDkwLDB4MGIsMHhlNCwweDAwLDB4ZjkgfX0sCisgezE2LCAweGU3MTAsIDAsIHsweDAwLDB4M2UsMHg0MCwweDA3LDB4OTAsMHgyMywweGU0LDB4MDAsMHhmOSwweDIwLDB4M2UsMHg0MCwweDhmLDB4OTAsMHgwMywweGNhIH19LAorIHsxNiwgMHhlNzIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGExLDB4MDAsMHhmOCwweDAwLDB4YmUsMHgwMCB9fSwKKyB7MTYsIDB4ZTczMCwgMCwgezB4MGUsMHg4NCwweDAzLDB4MjAsMHgwMCwweGM4LDB4MDAsMHgzMiwweDAwLDB4MGMsMHgwMCwweDgzLDB4MjAsMHgwMCwweGY4LDB4MDAgfX0sCisgezE2LCAweGU3NDAsIDAsIHsweDNlLDB4MDAsMHgwYywweDgwLDB4MDMsMHhhMCwweDAwLDB4ZjgsMHgwMCwweDM2LDB4MTAsMHgwZiwweDgwLDB4NDMsMHhlMCwweDA4IH19LAorIHsxNiwgMHhlNzUwLCAwLCB7MHhmOCwweDAwLDB4MzIsMHgwMCwweDBmLDB4ODAsMHgwMywweGNhLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTc2MCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDAsMHhiYSwweDAwLDB4MjIsMHg4MCwweDQ4LDB4YTAsMHgwMywweDY4LDB4MDAsMHhhYSwweDAwLDB4MmEgfX0sCisgezE2LCAweGU3NzAsIDAsIHsweDgwLDB4MDgsMHhlMCwweDAzLDB4NjgsMHgwMCwweDgyLDB4MDAsMHgyZiwweDgwLDB4MDgsMHhlNiwweDAyLDB4MjgsMHgwNCwweGJlIH19LAorIHsxNiwgMHhlNzgwLCAwLCB7MHg0MCwweDIzLDB4ODAsMHgwYiwweGU4LDB4MDIsMHhlYSwweDAwLDB4YmUsMHgwMSwweDIyLDB4ODAsMHgwYiwweGUwLDB4MDIsMHhjYSB9fSwKKyB7MTYsIDB4ZTc5MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAxLDB4OTMsMHgwMSwweDIwLDB4YzEgfX0sCisgezE2LCAweGU3YTAsIDAsIHsweDBhLDB4MzAsMHgwMiwweDBjLDB4MDAsMHhhMywweDAwLDB4MjAsMHhjMCwweDg4LDB4MzgsMHg0MiwweDBjLDB4MDAsMHhhMywweDAwIH19LAorIHsxNiwgMHhlN2IwLCAwLCB7MHgyNCwweGMwLDB4MGEsMHgzZSwweDQyLDB4OGMsMHgwMCwweGIyLDB4NGMsMHgyNCwweGUwLDB4NGIsMHgzOCwweDAyLDB4YzQsMHg0MSB9fSwKKyB7MTYsIDB4ZTdjMCwgMCwgezB4YjMsMHgwMCwweDIyLDB4YzAsMHgwYiwweDEwLDB4MDIsMHhjYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU3ZDAsIDAsIHsweGEwLDB4MDEsMHgxYywweDAwLDB4YjcsMHgwMCwweDIwLDB4YzksMHg0OCwweDcwLDB4MDIsMHhkYywweDQwLDB4YTcsMHgxNCwweDJjIH19LAorIHsxNiwgMHhlN2UwLCAwLCB7MHhjOCwweDI4LDB4MzAsMHg4MiwweDVjLDB4YzEsMHg4NSwweDAwLDB4MmQsMHhlMCwweDJhLDB4ZjAsMHgxMiwweDFjLDB4ODAsMHhiNyB9fSwKKyB7MTYsIDB4ZTdmMCwgMCwgezB4YTAsMHgyMSwweDgyLDB4MGIsMHg3MCwweDgyLDB4ZDQsMHgxMSwweGI2LDB4ODAsMHgyMSwweDQwLDB4NGIsMHg1MCwweDAyLDB4ZTggfX0sCisgezE2LCAweGU4MDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHg4MCwweGQ1LDB4ODAsMHgyOSwweGVhIH19LAorIHsxNiwgMHhlODEwLCAwLCB7MHg0ZSwweDNhLDB4MDcsMHgwZSwweDgwLDB4ZTMsMHhiMCwweDMxLDB4ZmMsMHgwYywweDQ4LDB4MDMsMHgwZSwweDQxLDB4ZTcsMHg4MCB9fSwKKyB7MTYsIDB4ZTgyMCwgMCwgezB4M2QsMHhlMCwweDBlLDB4NzgsMHgwMywweDllLDB4ODAsMHhmNCwweGM0LDB4MzUsMHhlMCwweDBmLDB4NzgsMHgyNywweGRlLDB4MDAgfX0sCisgezE2LCAweGU4MzAsIDAsIHsweGY1LDB4ODAsMHhiMSwweGUwLDB4MGYsMHg1OCwweDAzLDB4ZWEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlODQwLCAwLCB7MHgwOCwweDFkLDB4YWMsMHgwMCwweDMxLDB4MDQsMHgzYSwweGM0LDB4MGYsMHhiNSwweDkzLDB4NmQsMHgwOCwweGZiLDB4NDAsMHgzYSB9fSwKKyB7MTYsIDB4ZTg1MCwgMCwgezB4YzgsMHg2MywweDgwLDB4MjMsMHhlYywweDk4LDB4ZTksMHgwMCwweDNlLDB4YzAsMHgwZCwweGIwLDB4NDMsMHhlYywweDAwLDB4ZjMgfX0sCisgezE2LCAweGU4NjAsIDAsIHsweDgwLDB4M2UsMHg0MCwweDRmLDB4YTAsMHgwMywweGVjLDB4MDAsMHhmOCwweDY4LDB4M2UsMHg0MCwweDhmLDB4OTgsMHgwMywweGMyIH19LAorIHsxNiwgMHhlODcwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGZlLDB4NjAsMHhlYiwweDkwLDB4M2UsMHhlNCB9fSwKKyB7MTYsIDB4ZTg4MCwgMCwgezB4MGYsMHhiOCwweDAwLDB4M2YsMHg0MCwweGNiLDB4ODAsMHg3ZiwweGUwLDB4MGUsMHhmYiwweDAzLDB4MmUsMHg0MCwweGNiLDB4ODAgfX0sCisgezE2LCAweGU4OTAsIDAsIHsweDNmLDB4ZTAsMHgwZiwweDc5LDB4NDMsMHgyZSwweDYwLDB4Y2EsMHg4MSwweDMzLDB4NjQsMHg4ZiwweGQ5LDB4MDMsMHhmZSwweDAwIH19LAorIHsxNiwgMHhlOGEwLCAwLCB7MHhmZiwweDgxLDB4MzMsMHhlMCwweDBmLDB4ZDksMHg4YiwweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZThiMCwgMCwgezB4YTgsMHgwMSwweDljLDB4MDAsMHg4NywweDgxLDB4MTksMHhlNCwweDBiLDB4ZmEsMHgxMywweDVlLDB4ODAsMHg4NywweGIyLDB4MmQgfX0sCisgezE2LCAweGU4YzAsIDAsIHsweGVjLDB4MGQsMHg3OSwweDAxLDB4OWUsMHgwMCwweGQ1LDB4OTAsMHgyZCwweGY4LDB4MGIsMHg3OCwweDAzLDB4N2UsMHgwOCwweGFiIH19LAorIHsxNiwgMHhlOGQwLCAwLCB7MHg5MSwweDI5LDB4ODUsMHgwYiwweDUxLDB4MDIsMHhkYywweDQ4LDB4YjYsMHg0MCwweDIxLDB4NDAsMHgwYiwweDUwLDB4MDIsMHgyYSB9fSwKKyB7MTYsIDB4ZThlMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4YywweDE0LDB4YjUsMHgyMCwweDZkLDB4YzggfX0sCisgezE2LCAweGU4ZjAsIDAsIHsweDBiLDB4NzIsMHgwMiwweDVjLDB4ODAsMHg4NywweDIwLDB4NjksMHhjMCwweDg4LDB4NTMsMHgwMiwweGNjLDB4ODEsMHg5NywweDUwIH19LAorIHsxNiwgMHhlOTAwLCAwLCB7MHgyZCwweGM4LDB4MGIsMHhmNywweDBhLDB4ZGMsMHhjMCwweDg0LDB4MDEsMHgyMSwweDQ0LDB4MWIsMHg3MCwweDIyLDB4ZGMsMHgwMCB9fSwKKyB7MTYsIDB4ZTkxMCwgMCwgezB4YjUsMHgwMCwweDIxLDB4YzQsMHgwYiwweDUwLDB4ODYsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU5MjAsIDAsIHsweDIwLDB4MTQsMHhjZiwweDMwLDB4OTEsMHgwMCwweDJjLDB4YzAsMHgwYiwweDM0LDB4MDIsMHg0YywweDAwLDB4ODMsMHgwMCwweDJjIH19LAorIHsxNiwgMHhlOTMwLCAwLCB7MHhmMiwweDBiLDB4MTAsMHgyMiwweDBjLDB4MDAsMHg5MSwweDAwLDB4MmMsMHhjOCwweDBiLDB4MTgsMHgwYSwweGNkLDB4MDEsMHhhMyB9fSwKKyB7MTYsIDB4ZTk0MCwgMCwgezB4MDAsMHgyOCwweDYwLDB4MGIsMHgyMSwweDAyLDB4Y2UsMHgyMCwweGI4LDB4NDAsMHhhMCwweDU0LDB4MGIsMHgxOCwweDAyLDB4MDggfX0sCisgezE2LCAweGU5NTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4YmQsMHgwMCwweGY5LDB4MDAsMHgyZiwweGMwIH19LAorIHsxNiwgMHhlOTYwLCAwLCB7MHgwZiwweGY0LDB4MDIsMHg3YywweDEyLDB4Y2YsMHgwMywweDNmLDB4YzIsMHgwZSwweGIwLDB4MDMsMHhmYywweDA0LDB4OWIsMHgwMiB9fSwKKyB7MTYsIDB4ZTk3MCwgMCwgezB4MmUsMHhmMiwweDBmLDB4YTQsMHgwYiwweGRjLDB4MDAsMHhjZSwweDAwLDB4YjAsMHhjOCwweDhmLDB4YTQsMHgwMywweGVmLDB4MDAgfX0sCisgezE2LCAweGU5ODAsIDAsIHsweGY4LDB4ODAsMHgzMiwweGY1LDB4MWYsMHhkZCwweDAzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOTkwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHg0MCwweGU5LDB4MDAsMHgzYSwweGMwLDB4MGYsMHhiMSwweDAzLDB4Y2MsMHgwMCwweGYzLDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4ZTlhMCwgMCwgezB4YzAsMHgwZCwweGI0LDB4MDksMHhlYywweDE4LDB4ZjksMHgxMCwweDNlLDB4MTAsMHg0ZiwweGIxLDB4MGEsMHg2YywweDgwLDB4ZjkgfX0sCisgezE2LCAweGU5YjAsIDAsIHsweDg5LDB4MzYsMHg4MiwweDBiLDB4YTYsMHgwMywweGVjLDB4NTAsMHhmOSwweDUwLDB4M2UsMHhjMCwweDFmLDB4OTAsMHgwMywweDYwIH19LAorIHsxNiwgMHhlOWMwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGZjLDB4MDAsMHhmZCwweGEwLDB4M2QsMHhjMCB9fSwKKyB7MTYsIDB4ZTlkMCwgMCwgezB4MGMsMHg3MCwweDgzLDB4MmMsMHgwMCwweGVmLDB4MDIsMHgzNSwweGMwLDB4MGQsMHhlMiwweDAzLDB4ZmMsMHgwNCwweGZmLDB4MDIgfX0sCisgezE2LCAweGU5ZTAsIDAsIHsweDJkLDB4ZTAsMHg4ZSwweGYwLDB4MDMsMHgzYywweDEwLDB4ZGMsMHgwMCwweDNmLDB4ODAsMHgwYywweGQ4LDB4MDMsMHhmYywweDAwIH19LAorIHsxNiwgMHhlOWYwLCAwLCB7MHhkZSwweDE4LDB4MzMsMHhmMCwweDRmLDB4ZDAsMHgwMywweGMwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWEwMCwgMCwgezB4ODEsMHgwMCwweDZjLDB4MDAsMHhiOSwweDAwLDB4MmUsMHhjMCwweDRjLDB4YjAsMHgwMywweDZjLDB4MDAsMHg4YiwweDAyLDB4MzYgfX0sCisgezE2LCAweGVhMTAsIDAsIHsweGMwLDB4MGQsMHhhYywweDEyLDB4ZWMsMHgwMCwweDc5LDB4MDAsMHgyZSwweDMwLDB4MGQsMHgzZCwweDQyLDB4YWMsMHgwMCwweDg5IH19LAorIHsxNiwgMHhlYTIwLCAwLCB7MHg4OCwweDFhLDB4MTAsMHgwZCwweDg2LDB4MDIsMHhlZSwweDA0LDB4YmIsMHg0MCwweDIyLDB4ZTAsMHgwYiwweDkwLDB4MDIsMHhlMCB9fSwKKyB7MTYsIDB4ZWEzMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAxLDB4YjksMHgwMCwweDJlLDB4YzAgfX0sCisgezE2LCAweGVhNDAsIDAsIHsweDA4LDB4YjAsMHg0MiwweGFjLDB4MDAsMHgwYiwweDA1LDB4MjYsMHhjMCwweDA5LDB4OTQsMHgyMCwweGVjLDB4MDAsMHhiOSwweDgwIH19LAorIHsxNiwgMHhlYTUwLCAwLCB7MHg2ZSwweGM0LDB4ODgsMHhiMCwweDgyLDB4MmMsMHgwMCwweDliLDB4ODIsMHgyZSwweDQyLDB4MDgsMHg4MSwweDAyLDB4ZTQsMHg4MCB9fSwKKyB7MTYsIDB4ZWE2MCwgMCwgezB4YjgsMHgwMCwweDIyLDB4YzEsMHgwYiwweDkwLDB4MDIsMHhlMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVhNzAsIDAsIHsweDA4LDB4MDQsMHgwYywweDEwLDB4YjEsMHgyNSwweDJjLDB4Y2EsMHgwOCwweDM0LDB4NDYsMHhjYywweDA4LDB4ODMsMHgwMCwweDI0IH19LAorIHsxNiwgMHhlYTgwLCAwLCB7MHhjMiwweDBiLDB4MDIsMHg1MiwweGNjLDB4ODEsMHg4MywweDAwLDB4MmMsMHgwMCwweDE5LDB4YjIsMHg0MiwweGFjLDB4ODAsMHg4MSB9fSwKKyB7MTYsIDB4ZWE5MCwgMCwgezB4MDgsMHgyOCwweDgwLDB4MDksMHgwMCwweDAyLDB4YzQsMHg0MCwweGIxLDB4MDAsMHgyMCwweGMwLDB4MGIsMHgxMCwweDAyLDB4YzIgfX0sCisgezE2LCAweGVhYTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4NmMsMHgwMCwweGI5LDB4MDAsMHgzZiwweGQwIH19LAorIHsxNiwgMHhlYWIwLCAwLCB7MHgwOCwweGY2LDB4MDcsMHhiYywweGMyLDB4YWYsMHgzMCwweDc1LDB4ZGMsMHgwZCwweDE2LDB4MDIsMHhmYywweGUwLDB4YjksMHg1MCB9fSwKKyB7MTYsIDB4ZWFjMCwgMCwgezB4M2UsMHhjYywweDBjLDB4YjAsMHgyMywweDJjLDB4MTAsMHhkOSwweDAwLDB4M2UsMHgwMCwweDBjLDB4OTAsMHgwMywweGVjLDB4MDAgfX0sCisgezE2LCAweGVhZDAsIDAsIHsweGRlLDB4MDEsMHgzMiwweGMwLDB4MGYsMHg5MCwweDAzLDB4YzAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYWUwLCAwLCB7MHhhMCwweDE5LDB4ZmMsMHgwMCwweGZkLDB4MTAsMHgzZiwweGNhLDB4MmUsMHhmNiwweDAzLDB4NmQsMHg5NCwweDlmLDB4MzAsMHgzYSB9fSwKKyB7MTYsIDB4ZWFmMCwgMCwgezB4YzksMHgwYywweDgzLDB4OTMsMHhmYywweDgwLDB4ZmYsMHgxMSwweDdlLDB4MTksMHgwYiwweGIxLDB4MDMsMHhmYywweDQwLDB4ZmQgfX0sCisgezE2LCAweGViMDAsIDAsIHsweDA4LDB4M2IsMHgwMCwweDBmLDB4YzAsMHgwMywweGZjLDB4ODAsMHg3NywweDAwLDB4YmYsMHhjMCwweDBmLDB4NTAsMHgwMywweGU4IH19LAorIHsxNiwgMHhlYjEwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMSwweGZjLDB4MDAsMHhmNCwweDk0LDB4MzcsMHhjOCB9fSwKKyB7MTYsIDB4ZWIyMCwgMCwgezB4MGQsMHg2OSwweDYzLDB4N2MsMHgxMCwweGZmLDB4NjIsMHgzNywweGMwLDB4MGQsMHhiNCwweDAzLDB4N2MsMHg2MCwweGQ0LDB4ODAgfX0sCisgezE2LCAweGViMzAsIDAsIHsweDNmLDB4NDAsMHgwZiwweDQ4LDB4MjMsMHgzMiwweDAwLDB4Y2UsMHgwMCwweGJmLDB4NDAsMHg4ZiwweGQxLDB4MDMsMHgzMCwweGUwIH19LAorIHsxNiwgMHhlYjQwLCAwLCB7MHhmZiwweDMwLDB4M2IsMHg2MCwweDBmLDB4ZDgsMHgwMywweGIwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWI1MCwgMCwgezB4ODAsMHgxMCwweGVkLDB4MjAsMHhiOCwweDI0LDB4MjMsMHhmNCwweDQ5LDB4YTIsMHgwMiwweDNmLDB4NDAsMHg4ZiwweDUxLDB4MjMgfX0sCisgezE2LCAweGViNjAsIDAsIHsweGRhLDB4MDgsMHhmNiwweDEyLDB4M2QsMHg4MCwweDliLDB4ODAsMHgyZSwweDQ5LDB4NGIsMHg4MCwweDAzLDB4NDAsMHgwMCwweGQ5IH19LAorIHsxNiwgMHhlYjcwLCAwLCB7MHgwMSwweDIyLDB4NzQsMHgwYiwweGQ1LDB4MDIsMHgyMSwweDAwLDB4YmYsMHg0MiwweDJlLDB4NDksMHgwYiwweDljLDB4MDIsMHhlMCB9fSwKKyB7MTYsIDB4ZWI4MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjZCwweDgwLDB4YjgsMHgyMCwweDI4LDB4YzEgfX0sCisgezE2LCAweGViOTAsIDAsIHsweDFiLDB4YTAsMHgwMiwweDRjLDB4MDAsMHg5MywweDIwLDB4MmMsMHhkOCwweDBiLDB4MzQsMHgwMiwweGNjLDB4MDAsMHg5MCwweDAxIH19LAorIHsxNiwgMHhlYmEwLCAwLCB7MHgyYywweGM2LDB4MWEsMHhhMCwweDAyLDB4NjgsMHgwOCwweDgzLDB4MDAsMHhhNCwweDQwLDB4MGIsMHgxMCwweDAyLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWJiMCwgMCwgezB4YjMsMHgxMCwweDI4LDB4NDIsMHgwYiwweDE0LDB4MDIsMHhhMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGViYzAsIDAsIHsweGMwLDB4MTUsMHhhYywweDAwLDB4YjgsMHg2MCwweDJhLDB4YzAsMHgxYiwweGEwLDB4OGUsMHhhYywweDAxLDB4OWIsMHgwNSwweDI2IH19LAorIHsxNiwgMHhlYmQwLCAwLCB7MHhjMCwweDAzLDB4YjAsMHg0MiwweDZjLDB4MDAsMHg5YiwweDgwLDB4MmUsMHhjMCwweDAzLDB4YTAsMHgwNiwweDY5LDB4MDAsMHg5OSB9fSwKKyB7MTYsIDB4ZWJlMCwgMCwgezB4ODAsMHhhYSwweGMwLDB4MGIsMHg5MCwweDAyLDB4NjMsMHgwMCwweDNiLDB4MDAsMHgyZSwweDU4LDB4NGIsMHg5MCwweDAyLDB4ZjAgfX0sCisgezE2LCAweGViZjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDExLDB4ZWMsMHgwNCwweGY4LDB4ODAsMHhiYSwweGMwIH19LAorIHsxNiwgMHhlYzAwLCAwLCB7MHgwZiwweDMwLDB4MDMsMHg2YywweDEwLDB4ZGIsMHgwMywweDM2LDB4YzAsMHg4ZiwweGIwLDB4MDMsMHhlYywweDA4LDB4ZDgsMHg4MCB9fSwKKyB7MTYsIDB4ZWMxMCwgMCwgezB4N2UsMHhlMCwweDA2LDB4ODgsMHgwMywweDQxLDB4MDgsMHhjYiwweGEwLDB4M2UsMHg2NCwweDBmLDB4OTAsMHgwYiwweDJhLDB4MDAgfX0sCisgezE2LCAweGVjMjAsIDAsIHsweDdiLDB4MDAsMHgzYSwweDAxLDB4MGYsMHg5MCwweDAzLDB4OTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYzMwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwMCwweGZjLDB4ODQsMHgzMiwweGMwLDB4MGMsMHhmOSwweDAzLDB4NWMsMHgxMCwweGVmLDB4MDAsMHgzYiB9fSwKKyB7MTYsIDB4ZWM0MCwgMCwgezB4YzAsMHgwYywweDcwLDB4MDMsMHg5YywweDAwLDB4ZWMsMHgwMSwweDNmLDB4ZTQsMHg0ZiwweGQxLDB4MDMsMHhmMSwweDAwLDB4ZjMgfX0sCisgezE2LCAweGVjNTAsIDAsIHsweDA1LDB4MzMsMHg2MCwweDBmLDB4ZDAsMHgwMywweGJjLDB4MDQsMHhmZiwweDAwLDB4M2YsMHgyMSwweDBmLDB4ZDAsMHgwMywweGY4IH19LAorIHsxNiwgMHhlYzYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDAsMHhjOCwweDQwLDB4M2EsMHhjNiB9fSwKKyB7MTYsIDB4ZWM3MCwgMCwgezB4MGQsMHhiNCwweDAzLDB4NmMsMHgwMCwweGYzLDB4MDAsMHgzNCwweGMwLDB4MGUsMHhiMCwweDAzLDB4NmMsMHgwMCwweGU5LDB4MTAgfX0sCisgezE2LCAweGVjODAsIDAsIHsweDNhLDB4YzAsMHgwZiwweDg0LDB4MDMsMHgyYywweDYwLDB4Y2IsMHgwMCwweDMyLDB4NjAsMHgwYywweDUwLDB4MDMsMHg2MSwweDAwIH19LAorIHsxNiwgMHhlYzkwLCAwLCB7MHhjYiwweDAwLDB4M2UsMHg5MCwweDBlLDB4OTAsMHhhMywweDkwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWNhMCwgMCwgezB4YzgsMHgwNSwweDNjLDB4MDIsMHg4OCwweDAxLDB4MDEsMHhmMCwweDIwLDB4YjAsMHgwMSwweDNlLDB4MDAsMHgzZiwweDAwLDB4MzMgfX0sCisgezE2LCAweGVjYjAsIDAsIHsweGMwLDB4MGIsMHhmMCwweDMyLDB4M2MsMHgwOCwweDg5LDB4ODAsMHgyMiwweGMwLDB4MDEsMHgxNSwweDEyLDB4YWMsMHgwMCwweDhiIH19LAorIHsxNiwgMHhlY2MwLCAwLCB7MHgwMCwweDIyLDB4YzAsMHg0OCwweGRiLDB4MDIsMHgyZiwweDQwLDB4OGYsMHgwMCwweDJlLDB4MDEsMHgwOCwweGQ0LDB4ODAsMHgzMiB9fSwKKyB7MTYsIDB4ZWNkMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4MDgsMHgwMCwweDA4LDB4ZjAgfX0sCisgezE2LCAweGVjZTAsIDAsIHsweDA4LDB4MDAsMHgxMiwweDRjLDB4MDAsMHgzMywweDAxLDB4MjQsMHhjMCwweDRhLDB4MzAsMHgwMiwweDRjLDB4MDAsMHhhMCwweDIwIH19LAorIHsxNiwgMHhlY2YwLCAwLCB7MHgyOCwweGMwLDB4MGIsMHgxMCwweDAyLDB4NDYsMHgwNCwweDgzLDB4MDQsMHgyMCwweGMwLDB4MjksMHgxOCwweDAyLDB4MDQsMHg0MCB9fSwKKyB7MTYsIDB4ZWQwMCwgMCwgezB4YjMsMHgwMCwweDJjLDB4NDAsMHgwYSwweDFjLDB4NDIsMHhiMSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVkMTAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDAxLDB4OGQsMHg4MCwweDIxLDB4ZTAsMHgxOCwweGM4LDB4MDIsMHgxZSwweDAwLDB4YjMsMHhhMCwweDIxIH19LAorIHsxNiwgMHhlZDIwLCAwLCB7MHhlMCwweDFiLDB4MzgsMHgwMiwweDBlLDB4MDEsMHhhNywweDgwLDB4MjEsMHhlMCwweDA5LDB4ZDgsMHg0MCwweGQ2LDB4NDAsMHg4NyB9fSwKKyB7MTYsIDB4ZWQzMCwgMCwgezB4ODAsMHgwMSwweGUwLDB4MDksMHg1OSwweDAyLDB4MTYsMHgwMCwweDk3LDB4ODQsMHgyZCwweDYwLDB4MDgsMHg1OCwweDQwLDB4MDAgfX0sCisgezE2LCAweGVkNDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MmMsMHg0MCwweGMwLDB4MDAsMHgzOCwweGM0IH19LAorIHsxNiwgMHhlZDUwLCAwLCB7MHgwYywweDMwLDB4MjcsMHg0YywweDIwLDB4ZjMsMHgwMSwweDM0LDB4YzEsMHgwZSwweDNhLDB4MDMsMHg0YywweGM0LDB4ZTAsMHgwMCB9fSwKKyB7MTYsIDB4ZWQ2MCwgMCwgezB4MTgsMHhjOCwweDBmLDB4MzQsMHgwMywweDQ0LDB4NDAsMHhjMywweDAwLDB4MzAsMHhjMCwweDBkLDB4OTAsMHgwMywweDJlLDB4MDAgfX0sCisgezE2LCAweGVkNzAsIDAsIHsweGYzLDB4MDAsMHgzZSwweDQwLDB4MGUsMHgxMCwweDAxLDB4OWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZDgwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwMCwweGY5LDB4MDAsMHgwZSwweGQ0LDB4MGUsMHhiMCwweDAzLDB4ZWMsMHgyMCwweGZiLDB4MjAsMHgzZiB9fSwKKyB7MTYsIDB4ZWQ5MCwgMCwgezB4YzQsMHgwZiwweGYxLDB4MDMsMHhlYywweDYwLDB4ZGIsMHgxMCwweDNmLDB4YzAsMHg0ZiwweGYwLDB4MDMsMHhhNCwweDQ2LDB4ZmIgfX0sCisgezE2LCAweGVkYTAsIDAsIHsweDAwLDB4YmQsMHhjMCwweDBlLDB4ZDAsMHgwYiwweGI0LDB4MDAsMHhlZiwweDQ4LDB4M2YsMHg0MCwweDBmLDB4NTAsMHgwMywweGQwIH19LAorIHsxNiwgMHhlZGIwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVjLDB4MDAsMHhmOCwweDAwLDB4MzIsMHhkNCB9fSwKKyB7MTYsIDB4ZWRjMCwgMCwgezB4MGYsMHg4MCwweDAzLDB4YWQsMHgwMCwweGViLDB4MDgsMHgyMiwweGQyLDB4MGMsMHhiNiwweDAzLDB4NmMsMHgwMCwweGYyLDB4ODAgfX0sCisgezE2LCAweGVkZDAsIDAsIHsweDM2LDB4YzAsMHgwZSwweGEwLDB4MDMsMHgyOCwweDEwLDB4Y2IsMHgwMCwweGIyLDB4YzAsMHgwZiwweGQ2LDB4MDMsMHgyOCwweDEwIH19LAorIHsxNiwgMHhlZGUwLCAwLCB7MHhmYiwweDIwLDB4M2UsMHg0MCwweDRmLDB4OTksMHgxMywweDJiLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWRmMCwgMCwgezB4NDgsMHgxMSwweDlkLDB4MTAsMHhiNCwweDAxLDB4MjEsMHhjMSwweDhiLDB4YzAsMHgwMiwweDFjLDB4YTAsMHhiZiwweDA0LDB4MjcgfX0sCisgezE2LCAweGVlMDAsIDAsIHsweGM4LDB4MDgsMHg3NSwweDAyLDB4MWMsMHhjMCwweGI2LDB4MDAsMHgyMSwweGMwLDB4MDgsMHhmMCwweDQyLDB4MTgsMHgxMCwweDhmIH19LAorIHsxNiwgMHhlZTEwLCAwLCB7MHgwMCwweDIxLDB4YzAsMHgwYiwweDU0LDB4YTIsMHgxYywweDAwLDB4YjcsMHgwNCwweDJkLDB4NDEsMHgwYiwweDUyLDB4MDIsMHgxMiB9fSwKKyB7MTYsIDB4ZWUyMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDgwLDB4YjYsMHg4OCwweGE1LDB4ZTAgfX0sCisgezE2LCAweGVlMzAsIDAsIHsweDBiLDB4NzgsMHgxMiwweDllLDB4ODEsMHhhNywweDkwLDB4MjUsMHhlNCwweDg4LDB4NzgsMHgwMiwweDFlLDB4ODAsMHhiZiwweDgwIH19LAorIHsxNiwgMHhlZTQwLCAwLCB7MHgyNCwweDYwLDB4MGIsMHg2OCwweDAyLDB4MWUsMHgwMCwweDg3LDB4ODQsMHg2MSwweGUwLDB4MGEsMHgxYSwweDBhLDB4MWEsMHgwMCB9fSwKKyB7MTYsIDB4ZWU1MCwgMCwgezB4YjcsMHhhMCwweDJkLDB4ZTAsMHgwYiwweGRhLDB4MDIsMHgzMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVlNjAsIDAsIHsweDQ4LDB4MTQsMHhjYywweDAwLDB4YmEsMHhjMCwweGE0LDB4YzAsMHgwYiwweDM0LDB4MDIsMHgwYywweDAwLDB4YjMsMHgwMCwweDI0IH19LAorIHsxNiwgMHhlZTcwLCAwLCB7MHhjMCwweDA4LDB4YjAsMHgwZSwweDJjLDB4MDAsMHhiMywweDk4LDB4MjAsMHg2MCwweDA5LDB4MzMsMHgwMiwweDJjLDB4MDAsMHhhMyB9fSwKKyB7MTYsIDB4ZWU4MCwgMCwgezB4YzgsMHgyMCwweGMwLDB4MGIsMHgxMCwweDAyLDB4MGMsMHgwMCwweGIzLDB4MDAsMHgyYywweGYwLDB4MGIsMHgxMCwweDAyLDB4MTIgfX0sCisgezE2LCAweGVlOTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweGZlLDB4ODAsMHgzNiwweDgxIH19LAorIHsxNiwgMHhlZWEwLCAwLCB7MHgwYiwweGUwLDB4MDMsMHhhOCwweDAwLDB4ZWEsMHgwMCwweGIyLDB4ODAsMHgwOCwweGEwLDB4MDMsMHg2OCwweDAwLDB4ZmUsMHgwMCB9fSwKKyB7MTYsIDB4ZWViMCwgMCwgezB4MzYsMHhhMCwweDFmLDB4ZTgsMHgxMywweDNiLDB4ODIsMHhjZSwweGUwLDB4MjIsMHg4MCwweDhlLDB4YTAsMHgwMywweDM4LDB4MDAgfX0sCisgezE2LCAweGVlYzAsIDAsIHsweGJhLDB4MDAsMHgzZiwweGEyLDB4MGYsMHhhMCwweDAzLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZWQwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4MjAsMHgzYSwweDEwLDB4MDcsMHg4MCwweDAzLDB4YzEsMHgwMCwweGY4LDB4MDAsMHgzOCB9fSwKKyB7MTYsIDB4ZWVlMCwgMCwgezB4MDAsMHgyZiwweDgwLDB4MDMsMHhhMCwweDAxLDB4ZjgsMHg0MiwweDNlLDB4MDUsMHgwZSwweDgwLDB4MGIsMHhlMCwweDgwLDB4ZDggfX0sCisgezE2LCAweGVlZjAsIDAsIHsweDAwLDB4M2UsMHgwMCwweDBmLDB4ODQsMHgwMywweGUxLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODQsMHgwYiwweGQyIH19LAorIHsxNiwgMHhlZjAwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDAsMHhjOSwweDAwLDB4M2EsMHg1MCB9fSwKKyB7MTYsIDB4ZWYxMCwgMCwgezB4OGYsMHg5MCwweDgzLDB4YTQsMHgwMiwweGQxLDB4MDAsMHhiMiwweDQwLDB4NGMsMHg5MCwweDIzLDB4MjQsMHgwOCwweGM5LDB4MDEgfX0sCisgezE2LCAweGVmMjAsIDAsIHsweDNlLDB4NDAsMHgwYywweDkwLDB4MDMsMHgyNCwweDAwLDB4YzEsMHgwMCwweDMyLDB4NDAsMHgwZiwweDE0LDB4MGEsMHgyNSwweDIwIH19LAorIHsxNiwgMHhlZjMwLCAwLCB7MHhlOSwweDAwLDB4M2UsMHg0MiwweDBmLDB4OTAsMHgwMywweGMyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWY0MCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MGEsMHg4OSwweDAwLDB4MjIsMHg3MCwweDBiLDB4OTAsMHgxMiwweDI1LDB4ODAsMHhjOSwweDAwLDB4MjIgfX0sCisgezE2LCAweGVmNTAsIDAsIHsweDQwLDB4MGEsMHg5MCwweDAzLDB4NjQsMHgwMCwweDg5LDB4MjAsMHgyYywweDQwLDB4MGEsMHg5MCwweDBhLDB4MjQsMHgwMCwweDg5IH19LAorIHsxNiwgMHhlZjYwLCAwLCB7MHhjMSwweDMyLDB4NDAsMHgwYiwweDk4LDB4MDIsMHgwNiwweDAwLDB4ODksMHg5MCwweDJlLDB4NDAsMHgwYiwweDk0LDB4MTIsMHhlMCB9fSwKKyB7MTYsIDB4ZWY3MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHgwNCwweDAwLDB4ODksMHgwMCwweDZhLDB4NDIgfX0sCisgezE2LCAweGVmODAsIDAsIHsweDBhLDB4MTAsMHgwMiwweGE0LDB4MDAsMHg4OSwweDAwLDB4YTIsMHg0MCwweDBhLDB4OTAsMHgwMiwweDI0LDB4MDAsMHgwOSwweDAwIH19LAorIHsxNiwgMHhlZjkwLCAwLCB7MHgyZSwweDQwLDB4NTgsMHgxMCwweDAyLDB4MjQsMHgwMCwweDg5LDB4ODAsMHhhYSwweDYwLDB4MGIsMHg5MCwweDAyLDB4YTQsMHgwNCB9fSwKKyB7MTYsIDB4ZWZhMCwgMCwgezB4YTksMHgwMCwweDJlLDB4NDAsMHgwYiwweDk0LDB4MDIsMHhjNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVmYjAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4ODEsMHgwMCwweDYwLDB4NDgsMHgwYiwweDEwLDB4MDIsMHgwNCwweDgxLDB4ODEsMHgyMCwweDYwIH19LAorIHsxNiwgMHhlZmMwLCAwLCB7MHg0OCwweDBhLDB4MTIsMHgwMiwweDQ0LDB4ODgsMHg4MSwweDAwLDB4MGUsMHg1OSwweDBhLDB4MTQsMHgwMiwweDA1LDB4MDAsMHg4MSB9fSwKKyB7MTYsIDB4ZWZkMCwgMCwgezB4YzAsMHgyOCwweDUwLDB4NDksMHgzMCwweDAyLDB4OGMsMHg4NCwweDAxLDB4NjAsMHgyYywweDUwLDB4MGIsMHgxMCwweDAyLDB4YzIgfX0sCisgezE2LCAweGVmZTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGMwLDB4NTQsMHgyYSwweDAwIH19LAorIHsxNiwgMHhlZmYwLCAwLCB7MHgwZSwweDg1LDB4MDMsMHhhMCwweDAwLDB4YzgsMHg1MCwweDMyLDB4MTUsMHgxZSwweDA1LDB4MjIsMHgyMSwweDQyLDB4YzgsMHgwMCB9fSwKKyB7MTYsIDB4ZjAwMCwgMCwgezB4M2UsMHgwMCwweDBjLDB4ODAsMHgwMywweDAwLDB4MDQsMHhjOCwweDAwLDB4M2EsMHgwMCwweDRmLDB4ODUsMHgwMywweGExLDB4NDAgfX0sCisgezE2LCAweGYwMTAsIDAsIHsweDY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZWUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMDIwLCAwLCB7MHg5OCwweDFkLDB4ZTQsMHg0MCwweGZkLDB4MDMsMHgzZSwweDQ0LDB4MGYsMHhkMCwweDAzLDB4ZTQsMHg0OCwweGU5LDB4MTAsMHgzZSB9fSwKKyB7MTYsIDB4ZjAzMCwgMCwgezB4NDUsMHgwZiwweDkxLDB4MTMsMHhlNCwweDQwLDB4ZmQsMHgwMCwweDNmLDB4NDQsMHgwZiwweGQwLDB4MDMsMHhmNCwweDAyLDB4ZmQgfX0sCisgezE2LCAweGYwNDAsIDAsIHsweDQwLDB4MzMsMHg1MCwweDBmLDB4ZDQsMHgyMywweDc0LDB4NDAsMHhmOSwweDEwLDB4M2YsMHg0MCwweDBmLDB4NTQsMHgwMywweGU2IH19LAorIHsxNiwgMHhmMDUwLCAwLCB7MHgwMiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGU0LDB4MDAsMHhmOSwweDAxLDB4MzMsMHg2YSB9fSwKKyB7MTYsIDB4ZjA2MCwgMCwgezB4MDksMHg5MCwweDAzLDB4YjYsMHgzNCwweGY5LDB4YzgsMHgzMiwweDY0LDB4MGMsMHg5YSwweDAzLDB4ZTYsMHhhMCwweGRkLDB4MDAgfX0sCisgezE2LCAweGYwNzAsIDAsIHsweDNjLDB4NzAsMHgwZiwweDkwLDB4MDMsMHhhNSwweDAwLDB4ODksMHg4MCwweDMzLDB4MzIsMHgwZiwweGQ4LDB4MTMsMHgzYywweDAwIH19LAorIHsxNiwgMHhmMDgwLCAwLCB7MHhmZCwweDAwLDB4NzAsMHg1MCwweDBmLDB4ZDAsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjA5MCwgMCwgezB4MzgsMHgxMCwweGUyLDB4ODAsMHhiOCwweGE4LDB4MjIsMHgxMCwweDA4LDB4ODgsMHgwMiwweDIxLDB4MDAsMHhiOCwweGMwLDB4MjAgfX0sCisgezE2LCAweGYwYTAsIDAsIHsweDMwLDB4MGQsMHg4ZSwweDg3LDB4ODMsMHg4OCwweDg4LDB4MDAsMHgyZSwweDM0LDB4MGIsMHg4YSwweDgyLDB4MjIsMHg4MCwweGRjIH19LAorIHsxNiwgMHhmMGIwLCAwLCB7MHhlMCwweDIyLDB4MzgsMHgwYiwweDgwLDB4MDIsMHgyMCwweDAwLDB4ZjgsMHhhOCwweDJhLDB4MjgsMHgwYiwweDgwLDB4MDIsMHgwZSB9fSwKKyB7MTYsIDB4ZjBjMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDIwLDB4YjEsMHgwMCwweDIwLDB4NDAgfX0sCisgezE2LCAweGYwZDAsIDAsIHsweDBhLDB4OTIsMHg5MiwweDg0LDB4MTEsMHhiMSwweDI0LDB4NjgsMHg1OCwweDA5LDB4MTEsMHgwMiwweGM0LDB4MjAsMHg5MSwweDAxIH19LAorIHsxNiwgMHhmMGUwLCAwLCB7MHgyYywweDQ4LDB4MWIsMHg1MCwweDAyLDB4NzQsMHg4NCwweDk1LDB4NDgsMHhhYywweDQ4LDB4MGIsMHg5NCwweDAyLDB4MDQsMHgwNCB9fSwKKyB7MTYsIDB4ZjBmMCwgMCwgezB4YjEsMHgwMiwweDI0LDB4NDgsMHgwYiwweDEwLDB4MDIsMHgwMiwweDA1LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYxMDAsIDAsIHsweDE4LDB4MTEsMHhhNCwweDAwLDB4YjEsMHgyMCwweDIyLDB4NDAsMHgwYSwweDkwLDB4MDYsMHgyYywweDAxLDB4YjksMHgwMCwweDJhIH19LAorIHsxNiwgMHhmMTEwLCAwLCB7MHg0MCwweDA5LDB4OTAsMHgwMiwweGE0LDB4MDAsMHg5YiwweDA4LDB4MmUsMHg0OCwweDBiLDB4MTIsMHgxYSwweDc0LDB4MDAsMHg5NSB9fSwKKyB7MTYsIDB4ZjEyMCwgMCwgezB4NDUsMHgyZSwweDYwLDB4MDMsMHg5MCwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4MDYgfX0sCisgezE2LCAweGYxMzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGY5LDB4ODAsMHgzMCwweDQwIH19LAorIHsxNiwgMHhmMTQwLCAwLCB7MHgwZSwweDE2LDB4MDMsMHhhNCwweDAwLDB4YjksMHgwNCwweDMyLDB4NDAsMHgwZCwweDkwLDB4MDIsMHhlNCwweDAwLDB4ZDksMHg0MCB9fSwKKyB7MTYsIDB4ZjE1MCwgMCwgezB4MmUsMHg0MCwweDFmLDB4OTgsMHgwMywweGU1LDB4ODAsMHhkOSwweDAwLDB4YWUsMHg2MCwweDA3LDB4MTAsMHgwYiwweDI2LDB4MDEgfX0sCisgezE2LCAweGYxNjAsIDAsIHsweGI5LDB4MDAsMHhhNiwweDQwLDB4MGYsMHg5MCwweDBiLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMTcwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwMCwweGY5LDB4MDAsMHhiZSwweDQwLDB4YWMsMHg5MiwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHhiNCB9fSwKKyB7MTYsIDB4ZjE4MCwgMCwgezB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZTksMHgwMCwweDNlLDB4NjAsMHgwZiwweDkwLDB4MDMsMHhhNCwweDgwLDB4ZjkgfX0sCisgezE2LCAweGYxOTAsIDAsIHsweDAwLDB4MzIsMHgwMCwweDBmLDB4OTAsMHg4MywweGU2LDB4ODUsMHhlMSwweDAwLDB4MzIsMHg0NCwweDBmLDB4MTAsMHgwMywweGNhIH19LAorIHsxNiwgMHhmMWEwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDAsMHhmOCwweDAwLDB4MzIsMHgwMCB9fSwKKyB7MTYsIDB4ZjFiMCwgMCwgezB4MGYsMHg4MCwweDEzLDB4ZTAsMHg5NCwweGUwLDB4MDAsMHgzMiwweDAwLDB4MGMsMHg4MCwweDAzLDB4NjAsMHgwMCwweGM4LDB4MDAgfX0sCisgezE2LCAweGYxYzAsIDAsIHsweDNlLDB4MDAsMHgwZCwweDgwLDB4NDMsMHgyMCwweDA4LDB4ZjgsMHgwMCwweDMyLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhlMCwweDQwIH19LAorIHsxNiwgMHhmMWQwLCAwLCB7MHhmOCwweDAwLDB4MzIsMHgwMCwweDRjLDB4ODAsMHgyMywweGNhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjFlMCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDAsMHhiYSwweDAwLDB4MjMsMHg4MCwweDBiLDB4YTAsMHgwMiwweGZiLDB4MDQsMHg2YSwweDAwLDB4MjIgfX0sCisgezE2LCAweGYxZjAsIDAsIHsweDgwLDB4MGEsMHhhMCwweDAzLDB4NjgsMHgwYSwweDhlLDB4ODgsMHgzYSwweDgwLDB4MDgsMHhhMCwweDAyLDB4MDgsMHgwMCwweGJhIH19LAorIHsxNiwgMHhmMjAwLCAwLCB7MHgwMCwweGI3LDB4MjIsMHgwMywweGU0LDB4MDIsMHhmYSwweDAwLDB4OGEsMHgwMCwweDIyLDB4ODAsMHgwOCwweGU4LDB4MDIsMHhjYSB9fSwKKyB7MTYsIDB4ZjIxMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4YjMsMHgwMCwweDYwLDB4NDEgfX0sCisgezE2LCAweGYyMjAsIDAsIHsweDAzLDB4MzAsMHgwMiwweGNjLDB4NDEsMHhhMywweDAwLDB4MDQsMHhjMCwweDBiLDB4MzAsMHgwMiwweDJjLDB4MDAsMHhhMywweDgwIH19LAorIHsxNiwgMHhmMjMwLCAwLCB7MHgyYywweGMwLDB4MDksMHgzOCwweDAyLDB4MGMsMHgwMCwweGIzLDB4MDAsMHhhMCwweGMwLDB4MGIsMHgzNCwweDAyLDB4Y2MsMHg4MCB9fSwKKyB7MTYsIDB4ZjI0MCwgMCwgezB4YTEsMHgwMCwweDIwLDB4YzAsMHgwOCwweDM4LDB4MDIsMHhjYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYyNTAsIDAsIHsweGEwLDB4MDEsMHgxYywweDQwLDB4YjcsMHgwMCwweDYxLDB4MDAsMHgwYiwweDcxLDB4MDIsMHhkYywweDAwLDB4YTMsMHgwMCwweDI1IH19LAorIHsxNiwgMHhmMjYwLCAwLCB7MHhjOCwweDE5LDB4MzgsMHgwMiwweDVjLDB4ODAsMHhhNywweDAwLDB4MGYsMHhlOCwweDA5LDB4NjQsMHgyMiwweDEwLDB4MDAsMHhiMyB9fSwKKyB7MTYsIDB4ZjI3MCwgMCwgezB4MDAsMHgyNSwweGM4LDB4MGIsMHg2MCwweDAyLDB4ZjIsMHgwMCwweDg1LDB4MDEsMHgyMywweGU4LDB4MDgsMHg3MCwweDgyLDB4ZTggfX0sCisgezE2LCAweGYyODAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgyMCwweGZmLDB4ODAsMHhhMSwweGEwIH19LAorIHsxNiwgMHhmMjkwLCAwLCB7MHgwZiwweDdhLDB4NDIsMHhkYSwweDAwLDB4ZTcsMHhlOCwweDM1LDB4ZjAsMHgyZiwweDdiLDB4NjIsMHgxZSwweDgyLDB4ZTYsMHg4MCB9fSwKKyB7MTYsIDB4ZjJhMCwgMCwgezB4MWQsMHhlMCwweDBkLDB4ZjgsMHgwYiwweDFlLDB4MDAsMHhmNywweDgwLDB4MzEsMHhmMCwweDBmLDB4NzgsMHgwMywweGRlLDB4MGMgfX0sCisgezE2LCAweGYyYjAsIDAsIHsweGVmLDB4ODAsMHgzMSwweGY4LDB4MmMsMHg3OCwweDAzLDB4ZWEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMmMwLCAwLCB7MHgwOCwweDFkLDB4YWQsMHg4NCwweGZiLDB4NjgsMHgzZSwweDAwLDB4MGYsMHhiMCwweDAzLDB4ZTgsMHgwMCwweGZiLDB4MDAsMHhmYSB9fSwKKyB7MTYsIDB4ZjJkMCwgMCwgezB4ZDgsMHgwZSwweGI1LDB4MDMsMHhlZCwweDAwLDB4ZGIsMHgwMCwweDNhLDB4YzAsMHg4ZSwweGEwLDB4MDMsMHhlMCwweDAwLDB4ZmIgfX0sCisgezE2LCAweGYyZTAsIDAsIHsweDQwLDB4M2UsMHhjMCwweDBiLDB4YjAsMHg0MywweGM0LDB4MDQsMHhlZiwweDAyLDB4YmYsMHhjMCwweDBmLDB4YjAsMHgwMywweGMyIH19LAorIHsxNiwgMHhmMmYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGZlLDB4NDIsMHhjNywweDM4LDB4MzMsMHg2NCB9fSwKKyB7MTYsIDB4ZjMwMCwgMCwgezB4MGUsMHg3YywweDAzLDB4NWUsMHgwMCwweGRmLDB4YTAsMHgzNywweGYwLDB4MGQsMHhmOCwweDAzLDB4ZmYsMHgyMCwweGNmLDB4ODEgfX0sCisgezE2LCAweGYzMTAsIDAsIHsweDMzLDB4ZTIsMHgwYywweGQ4LDB4MDMsMHhiZSwweDAwLDB4N2YsMHhjMCwweDMzLDB4ZTAsMHgwYywweGY5LDB4MDMsMHg3ZSwweDAwIH19LAorIHsxNiwgMHhmMzIwLCAwLCB7MHhmZCwweDgwLDB4M2YsMHhlMCwweDBmLDB4ZjgsMHgwMywweGMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjMzMCwgMCwgezB4YTgsMHgxMSwweDljLDB4MDAsMHg4NywweGEwLDB4MjEsMHgxNCwweDA4LDB4NzEsMHgwMiwweDE0LDB4MTAsMHhkNywweDIwLDB4MzUgfX0sCisgezE2LCAweGYzNDAsIDAsIHsweGMwLDB4MGMsMHg3MCwweDAzLDB4YmMsMHgwMCwweDg1LDB4MDgsMHgyYiwweGMwLDB4NGQsMHg0NiwweDAyLDB4ZDEsMHgwMCwweGI3IH19LAorIHsxNiwgMHhmMzUwLCAwLCB7MHgwMCwweDIxLDB4YzAsMHgwOCwweDYwLDB4MDIsMHgwOCwweDgwLDB4ZjUsMHgyMCwweDNkLDB4Y2EsMHgwZiwweDU0LDB4MDMsMHhlYSB9fSwKKyB7MTYsIDB4ZjM2MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDExLDB4OGYsMHgwMSwweDIwLDB4ODQgfX0sCisgezE2LCAweGYzNzAsIDAsIHsweDFhLDB4ZjAsMHgwMiwweDE4LDB4MDAsMHhhNywweDM0LDB4NjUsMHhjMCwweDA5LDB4NzEsMHgwMiwweGRjLDB4MDAsMHg4ZSwweDAwIH19LAorIHsxNiwgMHhmMzgwLCAwLCB7MHgyOSwweGMwLDB4MDgsMHg1MCwweDA2LDB4OWMsMHgwMCwweGJmLDB4ODgsMHgyZCwweGM0LDB4MGEsMHg2MCwweDI2LDB4NTgsMHgyNCB9fSwKKyB7MTYsIDB4ZjM5MCwgMCwgezB4OTcsMHgwMCwweDZkLDB4YzAsMHg5YiwweDcwLDB4MDIsMHhjMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYzYTAsIDAsIHsweDIwLDB4MTQsMHhjYywweDAwLDB4OGIsMHg0MCwweDIwLDB4MDAsMHgxOCwweDMwLDB4MDIsMHgwMCwweDAwLDB4YmIsMHgwMiwweDI0IH19LAorIHsxNiwgMHhmM2IwLCAwLCB7MHhjMCwweDA4LDB4MzAsMHgyMCwweGNjLDB4MDAsMHg4MSwweGMwLDB4MjgsMHhjMCwweDBiLDB4MDQsMHg4MiwweGUwLDB4MTAsMHhiYiB9fSwKKyB7MTYsIDB4ZjNjMCwgMCwgezB4YTAsMHgyYywweGUwLDB4MGEsMHgyMCwweDA2LDB4MDAsMHgwMCwweGIzLDB4MDAsMHgyOCwweGMwLDB4MGEsMHgxMCwweDAyLDB4ODggfX0sCisgezE2LCAweGYzZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmMsMHgwMCwweGNmLDB4MTAsMHgzMiwweDAwIH19LAorIHsxNiwgMHhmM2UwLCAwLCB7MHgwZSwweGYwLDB4MGIsMHgyNCwweDAwLDB4ZWYsMHgwMCwweDM3LDB4YzAsMHgwZCwweGYwLDB4MDMsMHhmYywweDA2LDB4YzEsMHg1MCB9fSwKKyB7MTYsIDB4ZjNmMCwgMCwgezB4M2IsMHhjMCwweDBjLDB4YjQsMHgwMywweGFjLDB4MDAsMHhmOCwweGMwLDB4YmUsMHhjOCwweDJlLDB4YjAsMHgwMywweDZlLDB4MDEgfX0sCisgezE2LCAweGY0MDAsIDAsIHsweGZiLDB4MDAsMHgyZCwweGMwLDB4NGIsMHg5MCwweDAyLDB4ZWEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNDEwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwNCwweGZiLDB4MDAsMHgzZSwweDAwLDB4MGYsMHhiMCwweDAzLDB4YWQsMHgwMCwweDliLDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4ZjQyMCwgMCwgezB4YzAsMHgwZiwweDMwLDB4MDMsMHhhYywweDAwLDB4ZjgsMHgwMCwweDJlLDB4YzAsMHgwNSwweGI0LDB4MDMsMHhlZCwweDAwLDB4ZjggfX0sCisgezE2LCAweGY0MzAsIDAsIHsweDQwLDB4MzIsMHhjMCwweDA5LDB4MDAsMHgwMywweGUwLDB4OTEsMHhlMywweDAwLDB4M2UsMHhjMCwweDBmLDB4OTAsMHgxMSwweGUwIH19LAorIHsxNiwgMHhmNDQwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGVjLDB4MDAsMHhlZiwweDAwLDB4MzMsMHgyMCB9fSwKKyB7MTYsIDB4ZjQ1MCwgMCwgezB4NGYsMHhmMCwweDAzLDB4YjQsMHgwMCwweGVmLDB4MDMsMHgzYSwweGMwLDB4MGYsMHhmMCwweDAzLDB4M2MsMHgwMCwweGRjLDB4MDAgfX0sCisgezE2LCAweGY0NjAsIDAsIHsweDMxLDB4YzAsMHg4ZCwweGY4LDB4MDMsMHhmZSwweDA0LDB4Y2YsMHgwMCwweDMyLDB4YzgsMHgwYywweGYwLDB4MGIsMHgxYywweDAwIH19LAorIHsxNiwgMHhmNDcwLCAwLCB7MHhjZiwweDkzLDB4MzMsMHhjMCwweDhjLDB4NDAsMHgwMiwweDAwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjQ4MCwgMCwgezB4ODEsMHgwNCwweDZjLDB4MDAsMHhiYiwweDAwLDB4YTIsMHgwNCwweDBiLDB4MzAsMHgwMiwweDBlLDB4MDAsMHhhYiwweDAwLDB4MmEgfX0sCisgezE2LCAweGY0OTAsIDAsIHsweGMwLDB4MDksMHhiMCwweDAzLDB4NmMsMHgwOCwweGE4LDB4YzAsMHgzNiwweGMwLDB4MDgsMHhiYywweDAyLDB4ZWYsMHgwMiwweGFiIH19LAorIHsxNiwgMHhmNGEwLCAwLCB7MHhkMCwweDIwLDB4ZTAsMHgwOCwweGI4LDB4MjIsMHgyNiwweDEwLDB4OGIsMHgwMCwweDIyLDB4YzAsMHgyMCwweDljLDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4ZjRiMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4YmIsMHgwMCwweDI2LDB4MDAgfX0sCisgezE2LCAweGY0YzAsIDAsIHsweDBhLDB4YjAsMHgwMiwweGEyLDB4MDgsMHhhYiwweDAwLDB4NmEsMHhjMCwweDBiLDB4YjAsMHgwYSwweDBjLDB4MDAsMHg4YiwweDgwIH19LAorIHsxNiwgMHhmNGQwLCAwLCB7MHgyMiwweGMwLDB4MDksMHhiMSwweDAyLDB4ZWMsMHg0MCwweDg4LDB4MDgsMHgyMiwweGMwLDB4MDgsMHhiOCwweDAyLDB4MjYsMHgwMCB9fSwKKyB7MTYsIDB4ZjRlMCwgMCwgezB4OGIsMHgwMCwweDIyLDB4YzAsMHgwOCwweDk4LDB4MDIsMHhhMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY0ZjAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAwLDB4YjMsMHgwMCwweDI0LDB4MDAsMHgwYiwweGIwLDB4MDIsMHgwMCwweDAxLDB4ODMsMHgwMCwweDIwIH19LAorIHsxNiwgMHhmNTAwLCAwLCB7MHhjMCwweDA5LDB4MzAsMHgwMiwweDRjLDB4MDAsMHgwMCwweDA0LDB4MjQsMHhjMCwweDA4LDB4MzAsMHgwNiwweDRjLDB4MDAsMHg4MCB9fSwKKyB7MTYsIDB4ZjUxMCwgMCwgezB4MDAsMHgyYywweGMwLDB4MDgsMHgwMCwweDAyLDB4MDAsMHg0MSwweDgzLDB4MDAsMHhhMiwweGMwLDB4MDgsMHgxMCwweDBhLDB4ODIgfX0sCisgezE2LCAweGY1MjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4N2MsMHgwMCwweGVmLDB4MDgsMHgyNiwweDAwIH19LAorIHsxNiwgMHhmNTMwLCAwLCB7MHgwZSwweGYwLDB4MDIsMHhhMCwweDAwLDB4ZTcsMHgwMCwweDNiLDB4YzAsMHgwZiwweGY1LDB4NDMsMHgzYywweDAyLDB4ZGEsMHgwMCB9fSwKKyB7MTYsIDB4ZjU0MCwgMCwgezB4MzIsMHhjMCwweDBkLDB4YjAsMHgwMywweGVjLDB4MDAsMHhjYiwweDAwLDB4YjIsMHhjMCwweDBjLDB4YTAsMHgwMywweDI4LDB4MTAgfX0sCisgezE2LCAweGY1NTAsIDAsIHsweGNiLDB4MDAsMHgzMiwweGMwLDB4MGMsMHg4MCwweDAzLDB4ODAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNTYwLCAwLCB7MHhhMCwweDBkLDB4ZmMsMHgwMCwweGZiLDB4MDAsMHgzYiwweDAwLDB4MGYsMHhmMCwweDAzLDB4ZjAsMHgwMCwweGZmLDB4MDIsMHgzZiB9fSwKKyB7MTYsIDB4ZjU3MCwgMCwgezB4YzAsMHgwZCwweGYyLDB4MDMsMHhiYywweDAwLDB4ZjQsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmYywweDAwLDB4ZjcgfX0sCisgezE2LCAweGY1ODAsIDAsIHsweDAwLDB4MzMsMHhjMCwweDBmLDB4NjAsMHgwMywweGYwLDB4ODgsMHhmZiwweDAwLDB4M2YsMHhjMCwweDRmLDB4ZDAsMHgwMywweDY4IH19LAorIHsxNiwgMHhmNTkwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZjLDB4NDAsMHhmYywweDMxLDB4M2IsMHgwOCB9fSwKKyB7MTYsIDB4ZjVhMCwgMCwgezB4NGYsMHhmOSwweDQzLDB4ZWYsMHgwMCwweGRmLDB4MzAsMHgzMiwweDIxLDB4MGYsMHg5NCwweDA3LDB4N2QsMHg4MCwweGVmLDB4MzggfX0sCisgezE2LCAweGY1YjAsIDAsIHsweDMyLDB4MDksMHgxYywweDM4LDB4MDMsMHhmMiwweDIxLDB4ZmQsMHgwMCwweDMzLDB4YzQsMHgwYywweGYwLDB4MDIsMHhmYywweDAwIH19LAorIHsxNiwgMHhmNWMwLCAwLCB7MHhkZiwweDAwLDB4MzMsMHhjMCwweDBmLDB4ZjAsMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjVkMCwgMCwgezB4ODAsMHgxMCwweGVjLDB4ODgsMHg4YiwweDYwLDB4MjIsMHhlNSwweDBlLDB4YjIsMHgyMiwweGVjLDB4ODAsMHhhZiwweDExLDB4MmEgfX0sCisgezE2LCAweGY1ZTAsIDAsIHsweDIwLDB4MGIsMHhiMSwweDEzLDB4YWMsMHg0OCwweDhiLDB4NDUsMHgzNCwweGNjLDB4NDgsMHhiMCwweDAyLDB4NmIsMHgwMCwweGJhIH19LAorIHsxNiwgMHhmNWYwLCAwLCB7MHg4MiwweDM2LDB4MDAsMHgwOCwweDg4LDB4MjIsMHhjMCwweDA0LDB4ODgsMHgwMCwweGEyLDB4MDgsMHg4YiwweDg4LDB4NjIsMHgyMCB9fSwKKyB7MTYsIDB4ZjYwMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDAwLDB4YTEsMHgzMCwweDI4LDB4MDAgfX0sCisgezE2LCAweGY2MTAsIDAsIHsweDBiLDB4MzIsMHgwMiwweGNjLDB4MDAsMHhhMywweDIyLDB4MmMsMHgwMCwweDhiLDB4MTIsMHgwNiwweGM4LDB4ODAsMHhhMywweDAwIH19LAorIHsxNiwgMHhmNjIwLCAwLCB7MHgyMCwweDAyLDB4Y2EsMHgzMCwweDA2LDB4YzQsMHgwMSwweGIxLDB4MDAsMHg2OCwweDgwLDB4MDksMHgyMCwweDAyLDB4ODgsMHgwMCB9fSwKKyB7MTYsIDB4ZjYzMCwgMCwgezB4ODMsMHgwMCwweDIwLDB4YzIsMHgwYiwweDAwLDB4MGEsMHhhMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY2NDAsIDAsIHsweGMwLDB4MTUsMHhhYywweDAwLDB4OGIsMHg2MSwweDYyLDB4YzAsMHgwYiwweGIyLDB4MDIsMHhlOCwweDAwLDB4YWIsMHgwMiwweDJhIH19LAorIHsxNiwgMHhmNjUwLCAwLCB7MHg2MSwweDFiLDB4OTAsMHgwMiwweGE4LDB4MDAsMHhhYiwweDAwLDB4MjAsMHhjMCwweDBhLDB4YjAsMHgwMiwweDZjLDB4MDQsMHhiYSB9fSwKKyB7MTYsIDB4ZjY2MCwgMCwgezB4MDAsMHgyZSwweDQwLDB4ODksMHg5MCwweDAyLDB4ZTYsMHgwOCwweDk4LDB4MDAsMHgyMiwweDAwLDB4MGIsMHhiMCwweDAyLDB4YjAgfX0sCisgezE2LCAweGY2NzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWUsMHgwMCwweGY4LDB4MDEsMHgzYSwweDA0IH19LAorIHsxNiwgMHhmNjgwLCAwLCB7MHgwZiwweGFjLDB4MDMsMHhlYywweDkwLDB4ZmIsMHgwMiwweDNlLDB4ZTAsMHgwYiwweDkwLDB4NDIsMHg2NywweDgwLDB4YTgsMHhjNCB9fSwKKyB7MTYsIDB4ZjY5MCwgMCwgezB4MjIsMHg0OCwweDIyLDB4ODYsMHgwMywweGUxLDB4NDAsMHhiOCwweDAyLDB4MmEsMHg0MCwweDI5LDB4OTAsMHgwMywweGVjLDB4MDIgfX0sCisgezE2LCAweGY2YTAsIDAsIHsweGM5LDB4NDgsMHgzMiwweDQwLDB4MGYsMHhiMCwweDEzLDB4OTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNmIwLCAwLCB7MHhlMCwweDAxLDB4YWMsMHg0MCwweGZiLDB4MDAsMHgxZiwweGEyLDB4MGUsMHhmOCwweDgyLDB4ZmMsMHgwOCwweGZmLDB4MDAsMHgzZiB9fSwKKyB7MTYsIDB4ZjZjMCwgMCwgezB4YzAsMHgwZiwweGZhLDB4NDMsMHg5NiwweDQ0LDB4ZDQsMHg5MSwweDNmLDB4NDAsMHgwZCwweGMwLDB4MDMsMHhmYSwweDAwLDB4ZmYgfX0sCisgezE2LCAweGY2ZDAsIDAsIHsweDA4LDB4MjUsMHg4MCwweDBlLDB4ZTAsMHgwMywweGQwLDB4MDAsMHhlYSwweDAwLDB4M2YsMHg4MCwweDBmLDB4YzAsMHgwMywweDc4IH19LAorIHsxNiwgMHhmNmUwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDAsMHhlMSwweDIwLDB4M2EsMHg1MCB9fSwKKyB7MTYsIDB4ZjZmMCwgMCwgezB4MGYsMHg5MCwweDAzLDB4MmMsMHgwMCwweGViLDB4MDgsMHg3NiwweDA1LDB4MGUsMHhiMCwweDI3LDB4ZTAsMHgxMCwweGVhLDB4NDAgfX0sCisgezE2LCAweGY3MDAsIDAsIHsweGIyLDB4YzAsMHgwYywweGE0LDB4NDMsMHgyNSwweDAwLDB4ZjgsMHgwMCwweDMyLDB4MDgsMHgwZiwweDgwLDB4NDMsMHhlOCwweDAwIH19LAorIHsxNiwgMHhmNzEwLCAwLCB7MHhkMSwweDA4LDB4ZWUsMHg0MCwweDBmLDB4MDAsMHgwMywweGQwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjcyMCwgMCwgezB4YzgsMHgwNSwweDJjLDB4MDAsMHg4YiwweDAwLDB4MjIsMHhkMCwweDBiLDB4OTAsMHg4MiwweDJjLDB4MDAsMHg4NywweDQwLDB4MjIgfX0sCisgezE2LCAweGY3MzAsIDAsIHsweDYwLDB4OGIsMHhiMCwweDAyLDB4ZTAsMHgwMCwweGQ4LDB4NTAsMHgyMiwweGQwLDB4MGMsMHhhMCwweDAzLDB4NmMsMHgwMCwweGIzIH19LAorIHsxNiwgMHhmNzQwLCAwLCB7MHhjOCwweDNlLDB4ZDAsMHgwYiwweGI4LDB4MDIsMHgyNSwweDA4LDB4OGEsMHgyMCwweDJhLDB4ODAsMHg4YiwweGI4LDB4ODIsMHhmMiB9fSwKKyB7MTYsIDB4Zjc1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg2NCwweDAwLDB4YTAsMHhjMCwweDI0LDB4YzAgfX0sCisgezE2LCAweGY3NjAsIDAsIHsweDA5LDB4MzgsMHgwMiwweDJjLDB4MDAsMHg4MywweDAzLDB4MjAsMHgwMCwweDEwLDB4MzAsMHgyMiwweGNjLDB4MDAsMHg4MywweDAwIH19LAorIHsxNiwgMHhmNzcwLCAwLCB7MHg2MCwweDA4LDB4MGEsMHgzMCwweDgyLDB4NGMsMHgwMCwweGIxLDB4YzAsMHgwMCwweGQxLDB4MGIsMHgzOCwweDAyLDB4ODQsMHg4MCB9fSwKKyB7MTYsIDB4Zjc4MCwgMCwgezB4ODIsMHgwMSwweDIwLDB4ODAsMHgwMywweDM4LDB4MDIsMHhmOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY3OTAsIDAsIHsweDIwLDB4MDEsMHgxNiwweDQwLDB4ODQsMHg5OCwweDI1LDB4ZTAsMHgwYiwweDdhLDB4MDIsMHhmYSwweDQ4LDB4YTMsMHgyMCwweDYxIH19LAorIHsxNiwgMHhmN2EwLCAwLCB7MHgyNCwweDBiLDB4NzksMHgwMCwweGNlLDB4YzAsMHg5MywweGE0LDB4MjEsMHhhNiwweDBiLDB4NzgsMHgxMiwweGRlLDB4ODAsMHhiNiB9fSwKKyB7MTYsIDB4ZjdiMCwgMCwgezB4ODAsMHgyZCwweDI0LDB4MGIsMHg0YiwweDAyLDB4MWEsMHg0MCwweDg1LDB4ODEsMHgyMSwweDYwLDB4MGIsMHg0OCwweDAyLDB4YzggfX0sCisgezE2LCAweGY3YzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweGUyLDB4YTAsMHhiNCwweGZlIH19LAorIHsxNiwgMHhmN2QwLCAwLCB7MHg0YiwweGI4LDB4MGIsMHgwZSwweDAwLDB4YTMsMHhiMCwweDI0LDB4YTgsMHgwZSwweDFiLDB4MDIsMHhjZSwweGMxLDB4YzMsMHhjMCB9fSwKKyB7MTYsIDB4ZjdlMCwgMCwgezB4MzAsMHg2OCwweDJlLDB4M2EsMHg0NywweDRlLDB4ODAsMHhmMSwweDgwLDB4MzAsMHg4MCwweDBmLDB4MjIsMHg4MywweDgwLDB4MDAgfX0sCisgezE2LCAweGY3ZjAsIDAsIHsweGMyLDB4MTAsMHgzOCwweDgwLDB4NGYsMHgwMCwweDA3LDB4ZDIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmODAwLCAwLCB7MHg0MCwweDBkLDB4YmMsMHgxMCwweGZlLDB4MDQsMHgzYiwweGMxLDB4MDcsMHhmMCwweDAzLDB4MWMsMHhjOCwweGRmLDB4MmEsMHgwYiB9fSwKKyB7MTYsIDB4ZjgxMCwgMCwgezB4YzQsMHg4ZiwweGQxLDB4NDMsMHhmOCwweDAyLDB4N2YsMHgwMCwweDNmLDB4YzAsMHgwYywweGYxLDB4MGYsMHgzYywweDAwLDB4ZjIgfX0sCisgezE2LCAweGY4MjAsIDAsIHsweDExLDB4M2YsMHg0MSwweDFmLDB4NTIsMHgwMywweGJjLDB4MGUsMHhlZCwweDE0LDB4M2YsMHg0MCwweDBmLDB4ZjgsMHgwMywweGQwIH19LAorIHsxNiwgMHhmODMwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGU0LDB4MDAsMHhlOSwweDAwLDB4MzIsMHg4MCB9fSwKKyB7MTYsIDB4Zjg0MCwgMCwgezB4MGUsMHhiZSwweDRiLDB4NmYsMHgwMCwweGNiLDB4ODIsMHg3YSwweGMwLDB4MmMsMHhiMCwweDAzLDB4MmMsMHgwMCwweGM5LDB4MDAgfX0sCisgezE2LCAweGY4NTAsIDAsIHsweDMyLDB4MDAsMHgyYywweDEwLDB4MDMsMHgyYywweDA4LDB4YzAsMHgwMCwweDI2LDB4NDAsMHg2YywweDkwLDB4MTMsMHgyNCwweDEyIH19LAorIHsxNiwgMHhmODYwLCAwLCB7MHhjOCwweDAxLDB4M2UsMHgwMCwweDBmLDB4YjgsMHgwYiwweDJhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjg3MCwgMCwgezB4NDgsMHgxMSwweDk0LDB4MDAsMHg4ZCwweDAwLDB4MjEsMHg4MCwweDBiLDB4NzAsMHg4MiwweDNjLDB4MjAsMHg4MywweDMyLDB4MjkgfX0sCisgezE2LCAweGY4ODAsIDAsIHsweGMwLDB4MDgsMHhmMCwweDIwLDB4MTQsMHgwMCwweDgwLDB4MDAsMHgyMywweDAwLDB4MDgsMHg1MCwweDA2LDB4OWMsMHgwNCwweGQ3IH19LAorIHsxNiwgMHhmODkwLCAwLCB7MHgwMiwweDI4LDB4ODAsMHgwOCwweDYwLDB4MDIsMHgwOCwweDEwLDB4ODcsMHgwMCwweDJkLDB4YzAsMHgwYiwweDQwLDB4MDIsMHgxMiB9fSwKKyB7MTYsIDB4ZjhhMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4YTcsMHg4MCwweDIxLDB4ZTAgfX0sCisgezE2LCAweGY4YjAsIDAsIHsweDBiLDB4NWMsMHgxMiwweDFlLDB4MDQsMHg4NywweDgyLDB4MGQsMHhhMCwweDA5LDB4NzgsMHgxNiwweDAyLDB4MDAsMHhiNCwweDgwIH19LAorIHsxNiwgMHhmOGMwLCAwLCB7MHgyNSwweGUwLDB4MGIsMHg3OCwweDAyLDB4OWUsMHgwMCwweDg0LDB4ODAsMHgyMSwweDIyLDB4MDgsMHgwOCwweDAyLDB4MTIsMHgwMSB9fSwKKyB7MTYsIDB4ZjhkMCwgMCwgezB4ODQsMHhjMCwweDJkLDB4MjAsMHgwYiwweDA4LDB4MDIsMHgzMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY4ZTAsIDAsIHsweDQ4LDB4MTQsMHhjYywweDAwLDB4ODMsMHg0MiwweGEwLDB4ZDgsMHgwYiwweDM0LDB4ODIsMHgwYywweDAwLDB4YTMsMHgwMiwweDIwIH19LAorIHsxNiwgMHhmOGYwLCAwLCB7MHhlMCwweDA4LDB4YjAsMHgwMiwweDBjLDB4ODgsMHhiMywweDIxLDB4MjQsMHhkOCwweDBiLDB4M2UsMHgwMiwweDhjLDB4MDAsMHg5MyB9fSwKKyB7MTYsIDB4ZjkwMCwgMCwgezB4MDgsMHgyOCwweGMwLDB4MDgsMHgzOCwweDAyLDB4MmMsMHgwNSwweDhiLDB4MDEsMHgyYywweGUwLDB4MGIsMHgzMCwweDAyLDB4MTIgfX0sCisgezE2LCAweGY5MTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweGVlLDB4MDAsMHgzMywweDkwIH19LAorIHsxNiwgMHhmOTIwLCAwLCB7MHgwZiwweGEwLDB4MGIsMHg2OCwweDAwLDB4Y2EsMHgwMSwweDdmLDB4YTgsMHgwYywweGFhLDB4MDMsMHgzYSwweDEyLDB4ZmUsMHhlMiB9fSwKKyB7MTYsIDB4ZjkzMCwgMCwgezB4MzcsMHhiMCwweDBmLDB4ZWUsMHgwMiwweDE4LDB4MDAsMHhjYSwweDQwLDB4MzYsMHhhMCwweDA4LDB4YTAsMHg4YiwweDI4LDB4MDAgfX0sCisgezE2LCAweGY5NDAsIDAsIHsweGNhLDB4ODEsMHgyZSwweGEwLDB4MGYsMHhlMCwweDAzLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOTUwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4MDgsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4YTIsMHgwMiwweGQ4LDB4NDAsMHgzZSB9fSwKKyB7MTYsIDB4Zjk2MCwgMCwgezB4MDgsMHgwZiwweDgwLDB4MTMsMHhlMCwweDQwLDB4NDgsMHg0MCwweGI4LDB4MDQsMHgwOCwweDg0LDB4MDMsMHg2MSwweDAwLDB4ZmMgfX0sCisgezE2LCAweGY5NzAsIDAsIHsweDAwLDB4M2YsMHgwMCwweDRmLDB4YzAsMHgwMywweGYxLDB4MDAsMHhmYywweDAwLDB4M2YsMHgwNCwweDBmLDB4YzAsMHgwMywweGQyIH19LAorIHsxNiwgMHhmOTgwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGM0LDB4MDAsMHhmOSwweDAwLDB4MzAsMHg1MCB9fSwKKyB7MTYsIDB4Zjk5MCwgMCwgezB4NGMsMHhiOSwweDAzLDB4NmMsMHgxOCwweGY5LDB4MDAsMHgzNiwweDQwLDB4MGUsMHg5YywweDIzLDB4YTQsMHgwMiwweDQxLDB4MDAgfX0sCisgezE2LCAweGY5YTAsIDAsIHsweGIyLDB4NDQsMHgwZSwweDlhLDB4MDMsMHhhNiwweDgwLDB4YzksMHgwMCwweDNhLDB4NjAsMHgwYSwweDkwLDB4MDMsMHhhNCwweDgwIH19LAorIHsxNiwgMHhmOWIwLCAwLCB7MHhjOSwweDAwLDB4MzQsMHg0MCwweDBjLDB4OTAsMHgwMywweGMyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjljMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHg4OSwweDQwLDB4MjIsMHg3OCwweDA4LDB4OTQsMHgwMiwweGU0LDB4MTAsMHhiOSwweDAwLDB4M2MgfX0sCisgezE2LCAweGY5ZDAsIDAsIHsweDYyLDB4MTgsMHg5NCwweDgyLDB4YTQsMHgwMCwweDg5LDB4YzgsMHgyMiwweDcwLDB4NDgsMHgxZSwweDAxLDB4NjcsMHg4MCwweGQxIH19LAorIHsxNiwgMHhmOWUwLCAwLCB7MHgwMCwweGJjLDB4NDIsMHgwOCwweDEwLDB4MDIsMHgyNSwweDIwLDB4ODksMHgwMiwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDIsMHhlMCB9fSwKKyB7MTYsIDB4ZjlmMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjEsMHgyOCwweDIyLDB4NDAgfX0sCisgezE2LCAweGZhMDAsIDAsIHsweDA4LDB4YjAsMHg4MiwweDY0LDB4MDQsMHgzOSwweDQxLDB4MmUsMHg0OCwweDBhLDB4OTAsMHgwMiwweDA0LDB4MTgsMHhhOSwweDIwIH19LAorIHsxNiwgMHhmYTEwLCAwLCB7MHgyMiwweDQyLDB4NGEsMHg5MCwweDAyLDB4MmMsMHgwNCwweDg5LDB4MDQsMHgyYiwweDQ4LDB4MDIsMHhkMCwweDAyLDB4YjQsMHgwYSB9fSwKKyB7MTYsIDB4ZmEyMCwgMCwgezB4OGQsMHg4MCwweDIzLDB4YzAsMHg0OCwweGQwLDB4MDIsMHhjNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZhMzAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4ODEsMHgyMCwweGEwLDB4NDgsMHgyOCwweDEwLDB4MDIsMHhjNCwweDAwLDB4YjEsMHgyNCwweDJhIH19LAorIHsxNiwgMHhmYTQwLCAwLCB7MHg0MCwweDA4LDB4MTIsMHg0MiwweDg1LDB4ODAsMHhhMSwweDIwLDB4YTAsMHg0OCwweDA4LDB4OTAsMHgwMiwweDQ0LDB4MDAsMHg5NSB9fSwKKyB7MTYsIDB4ZmE1MCwgMCwgezB4MmMsMHgyZCwweDVhLDB4MGEsMHg3MiwweDgyLDB4MTQsMHhhMCwweDg1LDB4YTgsMHgyMSwweDRhLDB4MDgsMHg1MiwweDgyLDB4YzIgfX0sCisgezE2LCAweGZhNjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NDEsMHg0MCwweGY4LDB4NTAsMHgzMiwweDAwIH19LAorIHsxNiwgMHhmYTcwLCAwLCB7MHg4YywweDA1LDB4MDMsMHg2MSwweDQwLDB4ZjgsMHg1MSwweDJlLDB4MDAsMHgwYSwweDg1LDB4MDIsMHgyMCwweDAwLDB4ZTgsMHg1MCB9fSwKKyB7MTYsIDB4ZmE4MCwgMCwgezB4MzIsMHgxNCwweDA2LDB4ODUsMHgxNywweGEwLDB4MDAsMHhjOCwweDIwLDB4M2EsMHgwOCwweDBlLDB4ODIsMHgwMywweGEwLDB4ODAgfX0sCisgezE2LCAweGZhOTAsIDAsIHsweGM4LDB4MjAsMHgzMiwweDA4LDB4MmMsMHhjMiwweDAzLDB4ZWUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYWEwLCAwLCB7MHg5OCwweDE5LDB4ZjQsMHg0MCwweGZmLDB4MTAsMHgzZiwweDQ0LDB4MGIsMHhiMCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MTAsMHgzZCB9fSwKKyB7MTYsIDB4ZmFiMCwgMCwgezB4NDAsMHgwZiwweGQxLDB4MDMsMHhmNCwweDU4LDB4OWQsMHgxMCwweDNmLDB4NDQsMHg0ZiwweGQwLDB4MDMsMHhkNSwweDAwLDB4ZjkgfX0sCisgezE2LCAweGZhYzAsIDAsIHsweDAwLDB4M2UsMHg0MCwweDhkLDB4OTAsMHgwMywweGU0LDB4YjgsMHhmOSwweDI4LDB4YmEsMHg2YSwweDBmLDB4OTAsMHgwMywweGU2IH19LAorIHsxNiwgMHhmYWQwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMSwweGU3LDB4MDAsMHhmZCwweDg4LDB4M2UsMHg2MCB9fSwKKyB7MTYsIDB4ZmFlMCwgMCwgezB4OGYsMHhkMCwweDAzLDB4MjQsMHgwMSwweGRkLDB4ODAsMHg3MywweDQwLDB4MGYsMHhkOCwweDAzLDB4YTYsMHgwNCwweGNkLDB4YTIgfX0sCisgezE2LCAweGZhZjAsIDAsIHsweDMzLDB4NzgsMHgxYywweGQwLDB4MDMsMHgzNCwweDAxLDB4ZjUsMHg4OCwweDNiLDB4NjgsMHgwYywweGRhLDB4NDcsMHgzNywweDgwIH19LAorIHsxNiwgMHhmYjAwLCAwLCB7MHhjZCwweDg4LDB4MzIsMHg2MiwweDBjLDB4ZGEsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmIxMCwgMCwgezB4MzgsMHgxMCwweGUzLDB4ODAsMHhiOCwweDgwLDB4MmUsMHgxNCwweDBiLDB4MGEsMHg4MiwweDIyLDB4ODAsMHhiOCwweGY4LDB4YTIgfX0sCisgezE2LCAweGZiMjAsIDAsIHsweDAwLDB4MGIsMHg4ZiwweGEzLDB4ODMsMHhlMCwweDg4LDB4ZWIsMHgyMiwweGE5LDB4MDgsMHg4OCwweDEyLDB4YTAsMHgwNSwweGI4IH19LAorIHsxNiwgMHhmYjMwLCAwLCB7MHgwMCwweDJhLDB4YWEsMHg4OCwweDgwLDB4MTMsMHg2MiwweDgyLDB4ODgsMHg4MCwweDIyLDB4MjgsMHg4OCwweGE0LDB4MDIsMHgwZSB9fSwKKyB7MTYsIDB4ZmI0MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNSwweDAwLDB4YjEsMHgwYSwweDJjLDB4NDEgfX0sCisgezE2LCAweGZiNTAsIDAsIHsweDBiLDB4MTAsMHgwNiwweDA0LDB4MjAsMHhhMSwweDAwLDB4MDAsMHg0MCwweDhiLDB4MTAsMHg0NiwweGM0LDB4MDEsMHg5MSwweDExIH19LAorIHsxNiwgMHhmYjYwLCAwLCB7MHgyNCwweDU4LDB4NjgsMHg5MCwweGMyLDB4MDQsMHgwMCwweGIxLDB4MDAsMHhhOCwweDUwLDB4MDksMHgxNCwweDBhLDB4MDUsMHg5NSB9fSwKKyB7MTYsIDB4ZmI3MCwgMCwgezB4YTEsMHgwOCwweGEwLDB4NDIsMHgyOCwweDExLDB4MGEsMHgwMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZiODAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDE4LDB4YjksMHgyMCwweDJlLDB4NTAsMHgwYiwweDkwLDB4MDYsMHgyNCwweDA5LDB4YjksMHgwMCwweDIyIH19LAorIHsxNiwgMHhmYjkwLCAwLCB7MHg0MCwweDhiLDB4OTEsMHgwMiwweDg0LDB4MDAsMHg5OSwweDY0LDB4MjQsMHg0MCwweDU4LDB4OTAsMHgwMiwweGE0LDB4MjAsMHhiYiB9fSwKKyB7MTYsIDB4ZmJhMCwgMCwgezB4MDAsMHgyYSwweDQwLDB4MDksMHhiMCwweDAyLDB4MDUsMHgwMSwweGE5LDB4MDAsMHgyMiwweDQwLDB4ODgsMHg5MiwweDAyLDB4MDYgfX0sCisgezE2LCAweGZiYjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTYsMHgwMCwweGY5LDB4NDAsMHgzZSwweDQwIH19LAorIHsxNiwgMHhmYmMwLCAwLCB7MHg0ZiwweDk4LDB4MGIsMHgyNCwweDgwLDB4ZDksMHgwMCwweDIyLDB4NzIsMHgwYiwweDk4LDB4MDMsMHhlNCwweDg0LDB4ZDksMHgwMCB9fSwKKyB7MTYsIDB4ZmJkMCwgMCwgezB4YjYsMHg3MCwweDA4LDB4OTksMHgwMiwweDI0LDB4MDAsMHhiOSwweDAwLDB4MmEsMHg0MCwweDBkLDB4OTQsMHhjMiwweDI1LDB4MDAgfX0sCisgezE2LCAweGZiZTAsIDAsIHsweGE5LDB4MDAsMHgyMiwweDQwLDB4MGMsMHg5NCwweDAzLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYmYwLCAwLCB7MHgyOCwweDAxLDB4YTYsMHg4MCwweGY5LDB4MDgsMHgzZSwweGMwLDB4MGYsMHg5MSwweDQzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4ZmMwMCwgMCwgezB4NTAsMHgwZiwweDk4LDB4MDMsMHhhNSwweDAwLDB4ZTksMHgwMCwweDNhLDB4NjQsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjkgfX0sCisgezE2LCAweGZjMTAsIDAsIHsweDAwLDB4M2MsMHg0MCwweDZlLDB4OTAsMHgwMywweGU0LDB4MjAsMHhkOSwweDAwLDB4M2MsMHg0MCwweDBmLDB4OTAsMHg4MiwweGNhIH19LAorIHsxNiwgMHhmYzIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDAsMHhlOCwweDAwLDB4M2UsMHgwMCB9fSwKKyB7MTYsIDB4ZmMzMCwgMCwgezB4NGYsMHg4NCwweDBiLDB4MjAsMHgwMCwweGY4LDB4MDAsMHgzNiwweDAxLDB4MGUsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGM4LDB4NDAgfX0sCisgezE2LCAweGZjNDAsIDAsIHsweDMyLDB4MTAsMHgyZCwweDgwLDB4MDMsMHhlMCwweDU0LDB4YzgsMHgwMCwweDM2LDB4MTAsMHgwZiwweDA0LDB4ODMsMHhlMCwweDUwIH19LAorIHsxNiwgMHhmYzUwLCAwLCB7MHhkOCwweDA0LDB4MTIsMHgwMCwweDBjLDB4MDAsMHgwYiwweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmM2MCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDAsMHg4ZSwweDQyLDB4MmUsMHhhMiwweDhiLDB4ZWEsMHgwMiwweDI4LDB4MDgsMHhiZSwweDg5LDB4MzcgfX0sCisgezE2LCAweGZjNzAsIDAsIHsweDg0LDB4NDgsMHhlMCwweDEyLDB4MjgsMHgwMiwweDhlLDB4YzAsMHgyMywweGIwLDB4NGQsMHg2MCwweDYyLDB4ZjgsMHgwMCwweDg2IH19LAorIHsxNiwgMHhmYzgwLCAwLCB7MHgwMCwweDIzLDB4ODAsMHgwYiwweGUwLDB4MDIsMHhmOCwweDAwLDB4MGUsMHgwMCwweDIyLDB4ODAsMHgwOCwweGU0LDB4MDIsMHgwYSB9fSwKKyB7MTYsIDB4ZmM5MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4YTMsMHgwMCwweDJjLDB4ODAgfX0sCisgezE2LCAweGZjYTAsIDAsIHsweDFiLDB4YjAsMHg5YSwweDRjLDB4MTAsMHg5YiwweDgwLDB4MjQsMHhjMCwweDBhLDB4MzAsMHgwMCwweDBjLDB4MDQsMHg5YiwweDIwIH19LAorIHsxNiwgMHhmY2IwLCAwLCB7MHgyMCwweGQ2LDB4MDgsMHgzMCwweDAyLDB4OGUsMHgwOCwweGEzLDB4MDQsMHgyNCwweGMwLDB4MTksMHgzNCwweDAyLDB4YzcsMHgwNyB9fSwKKyB7MTYsIDB4ZmNjMCwgMCwgezB4YWEsMHhhNCwweGEwLDB4YzAsMHg0OCwweDM0LDB4MDIsMHgwYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZjZDAsIDAsIHsweGEwLDB4MDEsMHgwZSwweDAwLDB4ODcsMHgwMCwweDJkLDB4YzAsMHgwYiwweDQwLDB4MDIsMHg1YywweDQwLDB4YjMsMHgxNCwweDI1IH19LAorIHsxNiwgMHhmY2UwLCAwLCB7MHhlMCwweDA4LDB4N2EsMHgwMiwweDllLDB4YzAsMHg5MiwweDQwLDB4YTAsMHgwMCwweDQ5LDB4NjAsMHgwMiwweGNlLDB4MDIsMHg4ZSB9fSwKKyB7MTYsIDB4ZmNmMCwgMCwgezB4MDEsMHgyMSwweGMwLDB4OGIsMHg1NCwweDAyLDB4YzQsMHgwOCwweDg2LDB4NDAsMHgyMSwweGM4LDB4ODgsMHgxMCwweDAyLDB4MjggfX0sCisgezE2LCAweGZkMDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHhjMCwweGU0LDB4ODAsMHgzZCwweGUyIH19LAorIHsxNiwgMHhmZDEwLCAwLCB7MHgwZiwweDU4LDB4MDMsMHg1ZSwweDkwLDB4YjYsMHhhMiwweDM1LDB4ZTAsMHgwZSwweDdjLDB4MjMsMHgxYywweDAwLDB4ZDYsMHg4MCB9fSwKKyB7MTYsIDB4ZmQyMCwgMCwgezB4MzEsMHhlMCwweDg0LDB4NzgsMHgwMywweGRlLDB4MDAsMHhjNywweDgwLDB4MzUsMHhlMCwweDBmLDB4NjgsMHgwMywweGRlLDB4MDAgfX0sCisgezE2LCAweGZkMzAsIDAsIHsweGUzLDB4ODAsMHgzMywweGU4LDB4MmMsMHg3OCwweDAzLDB4MmEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmZDQwLCAwLCB7MHgwOCwweDFkLDB4YWMsMHg5MCwweGZhLDB4MDAsMHg3ZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4YWMsMHgwMSwweGZiLDB4MDAsMHgzYyB9fSwKKyB7MTYsIDB4ZmQ1MCwgMCwgezB4NDEsMHgwZiwweDMwLDB4MGIsMHgyZCwweDA0LDB4ZWIsMHgwMSwweDNlLDB4YzAsMHgwZSwweGIwLDB4MDMsMHhlYywweDAwLDB4ZmEgfX0sCisgezE2LCAweGZkNjAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDBmLDB4ODAsMHgwMywweGVjLDB4MDAsMHhlOSwweDYwLDB4M2UsMHhlNCwweDBmLDB4OTAsMHgwMywweGMyIH19LAorIHsxNiwgMHhmZDcwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGZlLDB4MjAsMHhmZiwweDkwLDB4M2UsMHgyMCB9fSwKKyB7MTYsIDB4ZmQ4MCwgMCwgezB4MGMsMHhhOSwweDA3LDB4MmUsMHg0NCwweGM5LDB4OTEsMHgzMCwweGEwLDB4MGMsMHhiOCwweDYzLDB4MmYsMHg0NCwweGNiLDB4YTEgfX0sCisgezE2LCAweGZkOTAsIDAsIHsweDM2LDB4MjAsMHg4YywweGY4LDB4MDMsMHgzNiwweDAwLDB4Y2YsMHg4MiwweDMzLDB4ZTAsMHgwYywweGY4LDB4MjMsMHgyZSwweDAwIH19LAorIHsxNiwgMHhmZGEwLCAwLCB7MHhjZSwweGMwLDB4M2IsMHhlMCwweDBjLDB4NjgsMHgwMywweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmRiMCwgMCwgezB4YTgsMHgxMSwweDljLDB4ODQsMHhiMywweDU0LDB4MmMsMHhmNCwweDI4LDB4YmEsMHg4YSwweDNlLDB4NDAsMHg4MSwweGEwLDB4MjkgfX0sCisgezE2LCAweGZkYzAsIDAsIHsweGIwLDB4MGYsMHg3OCwweDQyLDB4YWUsMHgwMCwweDgzLDB4OTAsMHgzMywweGU4LDB4MGQsMHhlMSwweDAwLDB4ODUsMHg0MCwweDgyIH19LAorIHsxNiwgMHhmZGQwLCAwLCB7MHgyNCwweDIzLDB4YzYsMHgwZCwweDcxLDB4MDMsMHg1ZSwweGUwLDB4ODcsMHgwMCwweDJiLDB4YzEsMHgwZCwweDQ0LDB4MDIsMHgyYSB9fSwKKyB7MTYsIDB4ZmRlMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDA4LDB4MzUsMHgxNCwweDZkLDB4YzAgfX0sCisgezE2LCAweGZkZjAsIDAsIHsweDg4LDB4NzIsMHgzMiwweDVjLDB4ODAsMHg4NCwweDMwLDB4MmIsMHg4OCwweDBhLDB4NzAsMHg0MiwweDVjLDB4YTgsMHg5MSwweDA4IH19LAorIHsxNiwgMHhmZTAwLCAwLCB7MHgyNSwweGM4LDB4MDksMHg3MCwweDAyLDB4NGMsMHgyMiwweDgzLDB4MGEsMHg2MSwweGMwLDB4MDksMHgyMCwweDAyLDB4MDQsMHgwMCB9fSwKKyB7MTYsIDB4ZmUxMCwgMCwgezB4ODcsMHgwMCwweDIxLDB4YzAsMHgwOCwweDYwLDB4MDIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZlMjAsIDAsIHsweDIwLDB4MTQsMHhjYywweDEwLDB4YjMsMHg4NSwweDZjLDB4ZGMsMHgwOCwweDM0LDB4MDIsMHg0ZCwweDIxLDB4ODEsMHgwMCwweDI4IH19LAorIHsxNiwgMHhmZTMwLCAwLCB7MHgwMiwweDRhLDB4MzEsMHgxMiwweGVmLDB4MGMsMHg5MSwweGMyLDB4MjAsMHhmMCwweDA4LDB4MzAsMHg0MiwweDhlLDB4MDAsMHg4MiB9fSwKKyB7MTYsIDB4ZmU0MCwgMCwgezB4NDAsMHgyMCwweGM4LDB4MTksMHgyOCwweDAyLDB4MjIsMHg4MSwweDgzLDB4YzAsMHgyOCwweGQ0LDB4MDksMHgwMCwweDBhLDB4MDggfX0sCisgezE2LCAweGZlNTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmMsMHgwMCwweGZiLDB4YTAsMHgzZSwweGMwIH19LAorIHsxNiwgMHhmZTYwLCAwLCB7MHg4YywweDA0LDB4MTIsMHg3ZCwweDEwLDB4Y2YsMHgwMiwweDNhLDB4NTAsMHgwOCwweGMwLDB4NDIsMHg3ZCwweDUyLDB4NTgsMHgwMSB9fSwKKyB7MTYsIDB4ZmU3MCwgMCwgezB4MzYsMHgyMiwweDY5LDB4ZDAsMHgxMywweDJhLDB4MDAsMHg4OCwweDgyLDB4MzIsMHhmMCwweDA5LDB4YjgsMHg4MiwweDJmLDB4MDAgfX0sCisgezE2LCAweGZlODAsIDAsIHsweGM5LDB4YzgsMHgyMywweGMwLDB4MGMsMHg4YSwweDAzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmZTkwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGI5LDB4NDAsMHgzYywweDUwLDB4NGYsMHg4MCwweDIzLDB4YWMsMHgxMiwweGZiLDB4MDAsMHgyYSB9fSwKKyB7MTYsIDB4ZmVhMCwgMCwgezB4YzAsMHg2ZCwweDgwLDB4MTMsMHhhYywweDAwLDB4ZTgsMHgwNCwweGJhLDB4MTAsMHgwZiwweDgwLDB4MDMsMHhlOCwweDAwLDB4ZjMgfX0sCisgezE2LCAweGZlYjAsIDAsIHsweDA4LDB4M2MsMHg4MCwweDBmLDB4OTAsMHg4MywweGVjLDB4MDQsMHhmOSwweDYwLDB4MmMsMHhjMiwweDBmLDB4ODAsMHg4MywweGUwIH19LAorIHsxNiwgMHhmZWMwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGRjLDB4MDAsMHhlYywweDJjLDB4M2YsMHhmMCB9fSwKKyB7MTYsIDB4ZmVkMCwgMCwgezB4OGMsMHhmYSwweDhiLDB4YmMsMHgwMCwweGZlLDB4MDAsMHgzZiwweDAwLDB4MGYsMHg3OSwweDAzLDB4M2MsMHgwMCwweGNlLDB4MDggfX0sCisgezE2LCAweGZlZTAsIDAsIHsweDBiLDB4YzIsMHgwYywweGYwLDB4MDMsMHhiYywweDAwLDB4ZmMsMHgwMCwweDMzLDB4NDAsMHg4YywweDdhLDB4MDMsMHgzYSwweDAwIH19LAorIHsxNiwgMHhmZWYwLCAwLCB7MHhjNSwweDAwLDB4MzMsMHhjMCwweDRjLDB4YzgsMHgwMywweDAwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmYwMCwgMCwgezB4ODEsMHgwNCwweDZjLDB4MDAsMHg4OCwweGMwLDB4MmUsMHhlMCwweDA4LDB4OTQsMHgwMiwweDJjLDB4MDAsMHhiYiwweDgwLDB4NjYgfX0sCisgezE2LCAweGZmMTAsIDAsIHsweDMwLDB4MTYsMHhiMCwweDAyLDB4MmMsMHgwMCwweGRhLDB4NGMsMHgyMiwweGYwLDB4MDgsMHhmMCwweDAzLDB4ZWMsMHgwMCwweGViIH19LAorIHsxNiwgMHhmZjIwLCAwLCB7MHhjMCwweDIyLDB4NjgsMHgwMCwweDk0LDB4MDIsMHgyYywweDAyLDB4YTksMHg4MCwweDIyLDB4YzAsMHgwOCwweDBjLDB4MDIsMHhhMCB9fSwKKyB7MTYsIDB4ZmYzMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4YWIsMHgwNCwweDJlLDB4YzAgfX0sCisgezE2LCAweGZmNDAsIDAsIHsweDA4LDB4YTQsMHgwNiwweDJjLDB4MDQsMHhhYiwweDEwLDB4MmUsMHg2MCwweDQzLDB4ODAsMHg4MiwweDZjLDB4MDEsMHg4MSwweDgwIH19LAorIHsxNiwgMHhmZjUwLCAwLCB7MHgyOCwweDBhLDB4MDgsMHg5MSwweDAwLDB4ZTAsMHgwMCwweGI4LDB4ODAsMHgwMiwweGUwLDB4MDgsMHg4MCwweDAyLDB4MmQsMHg4MCB9fSwKKyB7MTYsIDB4ZmY2MCwgMCwgezB4ODgsMHhjMCwweDIyLDB4YzAsMHgwOCwweDgyLDB4MDIsMHgyMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZmNzAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAwLDB4ODAsMHg0NCwweDJjLDB4YzgsMHgyOCwweGEwLDB4MjIsMHgwYywweDA0LDB4YjMsMHgyNiwweDJjIH19LAorIHsxNiwgMHhmZjgwLCAwLCB7MHhjOCwweDg4LDB4MDEsMHgwNiwweDBjLDB4ZTAsMHg5MSwweDIwLDB4MjAsMHgwYywweDM4LDB4MDQsMHgyMiwweGMwLDB4NDgsMHhhMyB9fSwKKyB7MTYsIDB4ZmY5MCwgMCwgezB4NDIsMHhhMCwweDgxLDB4MDgsMHgwMCwweDAyLDB4MGMsMHg4MCwweDgxLDB4MDAsMHgyMCwweGMwLDB4MjgsMHgwMCwweDAyLDB4ODIgfX0sCisgezE2LCAweGZmYTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4N2MsMHgwMCwweGE5LDB4NDAsMHgzZSwweDQ0IH19LAorIHsxNiwgMHhmZmIwLCAwLCB7MHgwOCwweGIxLDB4MDMsMHgyYywweDQwLDB4ZWEsMHg0OSwweDJlLDB4MGQsMHgwYiwweGI2LDB4MTMsMHg3ZCwweDgwLDB4YzksMHg0MCB9fSwKKyB7MTYsIDB4ZmZjMCwgMCwgezB4YmEsMHhkMCwweDBjLDB4YjQsMHgwMywweGFjLDB4MDAsMHhmOCwweDAwLDB4MzIsMHg0MCwweDBjLDB4ODAsMHgwYiwweDIwLDB4MDAgfX0sCisgezE2LCAweGZmZDAsIDAsIHsweGM1LDB4MDAsMHhiMiwweGMwLDB4MGMsMHg4MCwweDAzLDB4MDAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmZmUwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgwNCwweGZjLDB4MDAsMHgzZCwweGM1LDB4MGIsMHhmMSwweDAwLDB4ZmMsMHhkMCwweDc3LDB4MjksMHgzNyB9fSwKKyB7MTYsIDB4ZmZmMCwgMCwgezB4MGMsMHg4ZSwweDc0LDB4MDMsMHhmYywweDA4LDB4ZmQsMHg2OSwweDNmLDB4ZDgsMHgwZiwweGYwLDB4MDMsMHhiYywweDAwLDB4ZWYgfX0sCisgezE2LCAweDgwMTAsIDAsIHsweDAwLDB4M2YsMHg0MCwweDA3LDB4YzAsMHgwMywweGYwLDB4NDAsMHhmZCwweDAwLDB4M2YsMHhjMCwweDBmLDB4YzAsMHgwMywweGU4IH19LAorIHsxNiwgMHg4MDIwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwZCwweGZjLDB4YzAsMHhkYywweDgwLDB4M2YsMHhjOCB9fSwKKyB7MTYsIDB4ODAzMCwgMCwgezB4MGYsMHg0OCwweDAzLDB4N2MsMHgyMCwweGZmLDB4NjgsMHgzNywweGUwLDB4MGUsMHhmMSwweDAzLDB4OWMsMHgwMCwweGJmLDB4MjAgfX0sCisgezE2LCAweDgwNDAsIDAsIHsweDM3LDB4ZTAsMHgwYywweGM4LDB4MTMsMHgzYywweDQwLDB4ZWQsMHg2MCwweGJiLDB4ZTQsMHgyYywweDQzLDB4NGIsMHg3MCwweGEwIH19LAorIHsxNiwgMHg4MDUwLCAwLCB7MHhjYywweDJjLDB4M2YsMHgwOSwweDBmLDB4ZDgsMHg0MywweDcwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODA2MCwgMCwgezB4ODAsMHgwMCwweGVkLDB4YzAsMHhiOCwweDgwLDB4MmYsMHhmNCwweDBmLDB4OTgsMHgwMiwweDNmLDB4MDAsMHhiZiwweDQyLDB4MjIgfX0sCisgezE2LCAweDgwNzAsIDAsIHsweGNhLDB4MDgsMHhmNCwweDAyLDB4M2UsMHgwMCwweGJmLDB4ZDAsMHgyMiwweDYwLDB4MjgsMHg4OCwweDBhLDB4M2QsMHg4MCwweDhkIH19LAorIHsxNiwgMHg4MDgwLCAwLCB7MHg0MCwweDIyLDB4YzgsMHgwOCwweDgxLDB4MDIsMHgyMSwweDgwLDB4ZGIsMHhjMCwweDJlLDB4YTUsMHgwYiwweDk4LDB4NDIsMHgyMCB9fSwKKyB7MTYsIDB4ODA5MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDEwLDB4YjAsMHgwMCwweDJjLDB4YzAgfX0sCisgezE2LCAweDgwYTAsIDAsIHsweDBiLDB4MjAsMHgwMiwweGNjLDB4MDAsMHhiMywweDIwLDB4MjYsMHhjMCwweDhhLDB4MzYsMHgxMiwweDhjLDB4NDEsMHhiMywweDAwIH19LAorIHsxNiwgMHg4MGIwLCAwLCB7MHgyZSwweDQwLDB4MDgsMHgwMCwweDAyLDB4MGQsMHg4MSwweGExLDB4MzAsMHgyMiwweGM4LDB4ODksMHhhMiwweDQyLDB4MDgsMHgyMCB9fSwKKyB7MTYsIDB4ODBjMCwgMCwgezB4YjAsMHgwMCwweDJjLDB4NDAsMHgwYiwweDkwLDB4MjYsMHg2MiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgwZDAsIDAsIHsweGMwLDB4MTUsMHhhYywweDAwLDB4YjgsMHg1MCwweDJlLDB4YzAsMHgwYSwweDkwLDB4MDIsMHhhYywweDAwLDB4YmIsMHgwMCwweDIyIH19LAorIHsxNiwgMHg4MGUwLCAwLCB7MHhjMCwweDA4LDB4YjAsMHg2MiwweDJjLDB4MTAsMHhiYiwweDA0LDB4MmEsMHhmMCwweDRhLDB4ODgsMHgwMiwweDBjLDB4MDAsMHg4MSB9fSwKKyB7MTYsIDB4ODBmMCwgMCwgezB4MDAsMHgyMiwweGMwLDB4MDksMHhiOCwweDgwLDB4MjYsMHgwMCwweGI4LDB4ODAsMHgyZSwweDIxLDB4MGIsMHg5MCwweDAyLDB4MzAgfX0sCisgezE2LCAweDgxMDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDE1LDB4ZWMsMHgwMCwweGQ4LDB4YzAsMHgzZSwweGMwIH19LAorIHsxNiwgMHg4MTEwLCAwLCB7MHgwYiwweDgwLDB4MDMsMHhlYywweDAwLDB4ZmIsMHgwMCwweDM2LDB4ODAsMHgwZSwweGIwLDB4MDMsMHhhYywweDAwLDB4ZmIsMHgwMCB9fSwKKyB7MTYsIDB4ODEyMCwgMCwgezB4M2MsMHhlMCwweDBjLDB4MGMsMHgwMywweDJjLDB4MDAsMHhlOSwweDAwLDB4MTAsMHhjMCwweDBjLDB4OGMsMHgwMywweDA2LDB4MDAgfX0sCisgezE2LCAweDgxMzAsIDAsIHsweGY4LDB4Y2QsMHgzZSwweDIyLDB4MGYsMHgxOCwweDAzLDB4NDAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MTQwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwMCwweGZmLDB4MDAsMHgzZSwweGMwLDB4MGYsMHhmMCwweDAzLDB4N2MsMHgwMCwweGY3LDB4MDIsMHgzZiB9fSwKKyB7MTYsIDB4ODE1MCwgMCwgezB4ZTQsMHgwZiwweDcwLDB4MDMsMHg3YywweDA0LDB4YjcsMHgwMCwweDM3LDB4NDAsMHgwZCwweGMwLDB4MDMsMHhmYywweDAwLDB4ZmQgfX0sCisgezE2LCAweDgxNjAsIDAsIHsweDAwLDB4MzcsMHhkMCwweDBlLDB4YzAsMHg0MywweGY0LDB4MDAsMHhkZiwweDAwLDB4M2YsMHg4MCwweDhmLDB4ZGEsMHgwMywweGY4IH19LAorIHsxNiwgMHg4MTcwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDAsMHhmOCwweDEwLDB4M2EsMHhjMCB9fSwKKyB7MTYsIDB4ODE4MCwgMCwgezB4NmQsMHhhNiwweDEzLDB4ZWMsMHgwMCwweGNiLDB4MDAsMHgzYSwweGQwLDB4MGYsMHhiMCwweDAzLDB4MmMsMHgxMCwweGRiLDB4MTAgfX0sCisgezE2LCAweDgxOTAsIDAsIHsweDM2LDB4ZDgsMHgwZCwweDg0LDB4MDMsMHhlYywweDA2LDB4YzksMHgwOCwweDNhLDB4YzAsMHgwZSwweDg2LDB4MDMsMHhhOCwweDYwIH19LAorIHsxNiwgMHg4MWEwLCAwLCB7MHhmOCwweDIwLDB4M2EsMHg0MCwweDBjLDB4OTAsMHgwMywweDU0LDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODFiMCwgMCwgezB4OTgsMHgwNSwweDNjLDB4MDAsMHhiYiwweDQwLDB4MjMsMHhkMCwweDA4LDB4MzAsMHgwMiwweDNlLDB4MTAsMHhhZiwweDAwLDB4MjAgfX0sCisgezE2LCAweDgxYzAsIDAsIHsweGMwLDB4MGIsMHhmMCwweDAyLDB4M2MsMHgwMCwweDhmLDB4NTAsMHgyZSwweGM4LDB4MDYsMHg4YSwweDAyLDB4ZmMsMHgwMCwweDhkIH19LAorIHsxNiwgMHg4MWQwLCAwLCB7MHgyNCwweDgyLDB4ZDYsMHgwOCwweDMyLDB4MDIsMHgyZCwweDA4LDB4M2EsMHg0MCwweDIyLDB4ODAsMHgwZCwweDkwLDB4MDMsMHg2MiB9fSwKKyB7MTYsIDB4ODFlMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MDUsMHg0YywweDAwLDB4YjAsMHgyMCwweDI4LDB4YzIgfX0sCisgezE2LCAweDgxZjAsIDAsIHsweDA4LDB4MDQsMHgwMiwweDhjLDB4MDAsMHgxMywweDAyLDB4MjgsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBjLDB4MzAsMHg5MywweDgwIH19LAorIHsxNiwgMHg4MjAwLCAwLCB7MHgyNCwweGQwLDB4MDksMHgyMCwweDAyLDB4Y2MsMHgwMCwweDkxLDB4NDAsMHgwOCwweGMwLDB4MmEsMHgxNCwweDAyLDB4ODEsMHgwMCB9fSwKKyB7MTYsIDB4ODIxMCwgMCwgezB4OTAsMHgwMCwweDY4LDB4MDAsMHgwOCwweDE4LDB4MDIsMHgzYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgyMjAsIDAsIHsweDcwLDB4MDEsMHgxZSwweDAwLDB4YjQsMHhhMCwweDIxLDB4ZTAsMHgwOCwweGM4LDB4MTIsMHg5ZSwweDAwLDB4YjMsMHg4MiwweDIxIH19LAorIHsxNiwgMHg4MjMwLCAwLCB7MHhlMCwweDBiLDB4N2EsMHgwYSwweDFlLDB4MDAsMHg5NywweDgwLDB4MmQsMHhlMSwweDBhLDB4NDgsMHgwMiwweGNlLDB4NDAsMHg5NSB9fSwKKyB7MTYsIDB4ODI0MCwgMCwgezB4OTAsMHgyOSwweGU0LDB4MDgsMHg1OCwweDAyLDB4OWEsMHgwMCwweGI3LDB4ODgsMHgyMSwweGUwLDB4MDksMHg1OCwweDAyLDB4NWMgfX0sCisgezE2LCAweDgyNTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0YSwweDAwLDB4MGMsMHgwMCwweGYwLDB4ODAsMHgzOCwweGM0IH19LAorIHsxNiwgMHg4MjYwLCAwLCB7MHgwYywweDI1LDB4MDMsMHg4YywweDIwLDB4OTMsMHgwMCwweDM4LDB4YzQsMHgwZiwweGIwLDB4MDMsMHgwYywweDgwLDB4ZDMsMHgwMCB9fSwKKyB7MTYsIDB4ODI3MCwgMCwgezB4MzQsMHhjMCwweDBkLDB4MDQsMHgxMywweGNjLDB4MDgsMHg5OSwweDAwLDB4MmEsMHhjMCwweDBlLDB4MjEsMHgwMywweDg4LDB4MDQgfX0sCisgezE2LCAweDgyODAsIDAsIHsweGYzLDB4MDAsMHgzOCwweGMwLDB4MGMsMHgxMSwweDgzLDB4MTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MjkwLCAwLCB7MHg0MiwweDE1LDB4YmMsMHgwMCwweGY0LDB4MDAsMHgzZiwweGMzLDB4MGUsMHhjMCwweDAzLDB4MWMsMHgwMCwweGFmLDB4NGEsMHg3ZiB9fSwKKyB7MTYsIDB4ODJhMCwgMCwgezB4YzQsMHgwZiwweGIyLDB4MDMsMHhmZCwweDAxLDB4ZWYsMHgxMCwweDNmLDB4ODQsMHgwZiwweGMwLDB4MDMsMHhmYywweDAwLDB4ZTkgfX0sCisgezE2LCAweDgyYjAsIDAsIHsweDAwLDB4MzcsMHhjMiwweDBlLDB4ZjEsMHg0NywweDdjLDB4MDAsMHhmNywweDAwLDB4M2QsMHhjMCwweDBmLDB4NTAsMHgwMywweGQwIH19LAorIHsxNiwgMHg4MmMwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YWEsMHgxNSwweGVjLDB4MDgsMHhmOCwweDAwLDB4M2UsMHhjYSB9fSwKKyB7MTYsIDB4ODJkMCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZWYsMHgyMSwweGZiLDB4ODAsMHg3YSwweDQwLDB4OGYsMHhiMiwweGExLDB4MmYsMHgwMCwweGNiLDB4NjAgfX0sCisgezE2LCAweDgyZTAsIDAsIHsweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhlZCwweGEwLDB4ZTksMHgzMCwweDMyLDB4YzAsMHgyZCwweGIwLDB4MDMsMHhlNCwweDAwIH19LAorIHsxNiwgMHg4MmYwLCAwLCB7MHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4YjAsMHgwMywweGVhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODMwMCwgMCwgezB4YzgsMHg5MSwweDlkLDB4MDAsMHhiNCwweDAxLDB4MmQsMHhjOCwweDBiLDB4NzAsMHgwMiwweGNjLDB4ODAsMHg4ZiwweDIwLDB4MjEgfX0sCisgezE2LCAweDgzMTAsIDAsIHsweGMwLDB4OGIsMHg3NiwweDAzLDB4NWQsMHgwMCwweDg3LDB4MGEsMHgyZCwweGMwLDB4MGIsMHg0MCwweDIyLDB4ZmQsMHgwMCwweDhkIH19LAorIHsxNiwgMHg4MzIwLCAwLCB7MHgxMCwweDIzLDB4YzgsMHgwOCwweDUwLDB4MTIsMHhkNCwweDAwLDB4YjcsMHgwMCwweDJkLDB4YzAsMHgwYiwweDcwLDB4MDIsMHhmMiB9fSwKKyB7MTYsIDB4ODMzMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDAsMHg5ZSwweDAwLDB4YjQsMHg4MCwweDJkLDB4ZTAgfX0sCisgezE2LCAweDgzNDAsIDAsIHsweDBiLDB4N2MsMHgwMiwweGRlLDB4NDAsMHhhNywweDgyLDB4MmQsMHhlMCwweDBiLDB4M2EsMHgwMiwweDhlLDB4MDAsMHg4NywweDkwIH19LAorIHsxNiwgMHg4MzUwLCAwLCB7MHgyZCwweGUwLDB4MGIsMHg1OCwweDAyLDB4NWUsMHgwMCwweGE1LDB4YTIsMHg2NSwweGUwLDB4MDgsMHg2OCwweDgyLDB4ZGEsMHgwMCB9fSwKKyB7MTYsIDB4ODM2MCwgMCwgezB4OTUsMHg4MCwweDJkLDB4NjAsMHgwYiwweDc4LDB4MDIsMHhlMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgzNzAsIDAsIHsweDA4LDB4ODQsMHhjYywweDAwLDB4YjAsMHgwOSwweDJjLDB4YzAsMHgwYiwweDM4LDB4MDIsMHhjYywweDAwLDB4ODMsMHgwMCwweDJlIH19LAorIHsxNiwgMHg4MzgwLCAwLCB7MHhjMCwweDBiLDB4MzAsMHg0MiwweDRjLDB4MDAsMHg4MywweDAwLDB4MmMsMHhhMCwweDBiLDB4MDQsMHgwMiwweGNjLDB4MDAsMHg4MSB9fSwKKyB7MTYsIDB4ODM5MCwgMCwgezB4MDAsMHhhMCwweGMwLDB4MDgsMHhiMCwweDA2LDB4Y2YsMHg4MCwweGIzLDB4MTAsMHgyYywweGM0LDB4MGIsMHgzMSwweDAyLDB4YzMgfX0sCisgezE2LCAweDgzYTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDA1LDB4YTgsMHgwMCwweGZlLDB4ODAsMHgzZSwweDgwIH19LAorIHsxNiwgMHg4M2IwLCAwLCB7MHgwZiwweGU4LDB4MTMsMHhlOCwweDAwLDB4ZWEsMHgwMCwweDNmLDB4YjAsMHgwZiwweGEwLDB4MDMsMHhhOCwweDAyLDB4YzIsMHgwMCB9fSwKKyB7MTYsIDB4ODNjMCwgMCwgezB4MmYsMHg4OCwweDBmLDB4ZTAsMHgwMywweGU4LDB4MDAsMHhlYSwweDAwLDB4MzYsMHgwMCwweDBjLDB4ZTAsMHgwMywweGY5LDB4MjAgfX0sCisgezE2LCAweDgzZDAsIDAsIHsweGRlLDB4ODAsMHgzZiwweGEwLDB4NGYsMHhhOCwweDAzLDB4ZmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4M2UwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4MTAsMHgzYywweDEwLDB4MGYsMHg4MCwweDgzLDB4ZTEsMHgwMCwweGU4LDB4MDAsMHgyMiB9fSwKKyB7MTYsIDB4ODNmMCwgMCwgezB4MDYsMHgwZiwweDAwLDB4MTMsMHhlMCwweDAxLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4ODMsMHhlMCwweDAwLDB4ZjggfX0sCisgezE2LCAweDg0MDAsIDAsIHsweDAwLDB4M2UsMHgwMCwweDBmLDB4ODQsMHgyMywweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgxMCwweDBmLDB4ODAsMHgwMywweGQyIH19LAorIHsxNiwgMHg4NDEwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGU0LDB4MDAsMHhmOSwweDEwLDB4M2UsMHg0NCB9fSwKKyB7MTYsIDB4ODQyMCwgMCwgezB4MGQsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGMsMHg5MCwweDEyLDB4MjQsMHgwMCwweGY5LDB4MTAgfX0sCisgezE2LCAweDg0MzAsIDAsIHsweDMyLDB4NDAsMHg4ZiwweDkwLDB4MDMsMHhjNCwweDAwLDB4YzksMHgwMCwweDMyLDB4MTAsMHgwYywweDljLDB4MDEsMHgyNCwweDAwIH19LAorIHsxNiwgMHg4NDQwLCAwLCB7MHhmOSwweDEwLDB4M2UsMHg3MCwweDBmLDB4OTAsMHgwMiwweGMyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODQ1MCwgMCwgezB4ODAsMHgxNCwweDY0LDB4MDAsMHhiOSwweGMwLDB4MmUsMHg0OCwweDA4LDB4OTEsMHgwMiwweGU0LDB4MDAsMHhiOSwweDAwLDB4MmUgfX0sCisgezE2LCAweDg0NjAsIDAsIHsweDQwLDB4MGQsMHg5MCwweDAzLDB4NjcsMHgwMCwweGI5LDB4ODAsMHgyYSwweDYwLDB4MGIsMHg5OSwweDAyLDB4ZTQsMHgwMCwweDgxIH19LAorIHsxNiwgMHg4NDcwLCAwLCB7MHgwMCwweDIyLDB4NDAsMHgyYywweDkwLDB4MTIsMHgyNSwweDIwLDB4YjksMHg0OCwweDJlLDB4NTIsMHgwYiwweDk0LDB4MDIsMHhlMCB9fSwKKyB7MTYsIDB4ODQ4MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjksMHgwMCwweDJlLDB4NDAgfX0sCisgezE2LCAweDg0OTAsIDAsIHsweDY4LDB4OTAsMHg0NiwweGU0LDB4MDAsMHhiOSwweDAwLDB4MmUsMHhjMCwweDA4LDB4OTAsMHgwMiwweGE0LDB4NjAsMHhiOSwweDAwIH19LAorIHsxNiwgMHg4NGEwLCAwLCB7MHgyMiwweDQ4LDB4MGIsMHg5MCwweDA2LDB4ZTQsMHgwMiwweDg5LDB4MDAsMHhhMCwweDQwLDB4MDgsMHg5MCwweDAyLDB4YTYsMHgxMCB9fSwKKyB7MTYsIDB4ODRiMCwgMCwgezB4YjksMHgwMCwweDBlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhjNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg0YzAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4YjEsMHgwMCwweDJjLDB4NDgsMHgwOCwweDEwLDB4MDIsMHhjNCwweDg0LDB4YjEsMHgyMCwweDJjIH19LAorIHsxNiwgMHg4NGQwLCAwLCB7MHg0MCwweDA5LDB4MTIsMHgwMiwweGM0LDB4ODAsMHhiMSwweDIwLDB4MjgsMHg0MCwweDBiLDB4MTAsMHgwMiwweGM0LDB4ODAsMHg4OSB9fSwKKyB7MTYsIDB4ODRlMCwgMCwgezB4MjAsMHgyMCwweDQwLDB4NGIsMHgxMiwweDBhLDB4ODQsMHg4NCwweGIxLDB4MjAsMHgyYywweDQ4LDB4OGIsMHgxMCwweDAyLDB4YzIgfX0sCisgezE2LCAweDg0ZjAsIDAsIHsweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGJhLDB4MDAsMHgyZSwweDAwIH19LAorIHsxNiwgMHg4NTAwLCAwLCB7MHgwYywweDgwLDB4MDMsMHhlOCwweDA4LDB4ZjgsMHg1MCwweDNlLDB4MTQsMHgwYywweDg1LDB4MDMsMHgyMCwweDAwLDB4YjgsMHgwMCB9fSwKKyB7MTYsIDB4ODUxMCwgMCwgezB4MzIsMHgwMCwweDBmLDB4YTAsMHgwMywweGUxLDB4NDAsMHhjOCwweDUwLDB4MzIsMHgxNCwweDBjLDB4YTUsMHgwMywweGExLDB4NDAgfX0sCisgezE2LCAweDg1MjAsIDAsIHsweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHhhMCwweDAzLDB4ZWUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NTMwLCAwLCB7MHg4OCwweDBkLDB4ZTQsMHg0MCwweGZkLDB4MDAsMHgzZSwweDQ0LDB4MGYsMHhkMCwweDAzLDB4ZTQsMHg0MCwweGI5LDB4MTEsMHgzZiB9fSwKKyB7MTYsIDB4ODU0MCwgMCwgezB4NDAsMHgwZiwweDkxLDB4MDMsMHg2NCwweDQ0LDB4ZjksMHgxMCwweDNmLDB4NDAsMHgwZiwweGQwLDB4MDMsMHhlNCwweDQwLDB4ZmQgfX0sCisgezE2LCAweDg1NTAsIDAsIHsweDEwLDB4M2YsMHgxMCwweDhjLDB4ZDEsMHgwMywweDc0LDB4NDAsMHhmZiwweDEwLDB4M2YsMHg0NCwweDBmLDB4ZDAsMHgwMywweGU2IH19LAorIHsxNiwgMHg4NTYwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweDY2LDB4MjAsMHhlZCwweDAwLDB4MzMsMHg2OSB9fSwKKyB7MTYsIDB4ODU3MCwgMCwgezB4NGQsMHg1MCwweDQzLDB4NTYsMHgwMCwweGY5LDB4YTAsMHgzNCwweDQwLDB4MGYsMHg5YSwweDBiLDB4MzQsMHgwMCwweGRkLDB4ODAgfX0sCisgezE2LCAweDg1ODAsIDAsIHsweDNiLDB4NDAsMHgwYiwweDUwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDMyLDB4ZTAsMHgwZSwweGQwLDB4MDMsMHhmNCwweDAwIH19LAorIHsxNiwgMHg4NTkwLCAwLCB7MHhmZCwweDAwLDB4M2YsMHg0MCwweDBjLDB4ZDAsMHgwMywweGM2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODVhMCwgMCwgezB4NzgsMHgxMCwweGUyLDB4ODAsMHg4OCwweDA0LDB4MjIsMHgxMCwweDBiLDB4ODAsMHgwMiwweDIwLDB4MDksMHhiOCwweGYwLDB4MjIgfX0sCisgezE2LCAweDg1YjAsIDAsIHsweDAwLDB4MGIsMHg4ZSwweDEyLDB4YTAsMHgwMCwweGI4LDB4NTIsMHgyZSwweDAwLDB4MGIsMHg4MCwweDAyLDB4ZTAsMHgwNSwweGI4IH19LAorIHsxNiwgMHg4NWMwLCAwLCB7MHhhYSwweDIzLDB4M2UsMHgwZCwweDgwLDB4MDIsMHhlMCwweDAwLDB4YjgsMHgwMCwweDNhLDB4MDAsMHgwOCwweDgwLDB4MDIsMHhjZSB9fSwKKyB7MTYsIDB4ODVkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDUsMHhjNCwweDIwLDB4YTksMHgwMCwweGE0LDB4NDQgfX0sCisgezE2LCAweDg1ZTAsIDAsIHsweDA5LDB4OTAsMHgwMiwweGM1LDB4MDAsMHhhMSwweDA4LDB4MmMsMHg0MCwweDBiLDB4MTEsMHg4MiwweDA0LDB4MDAsMHhiMSwweDAwIH19LAorIHsxNiwgMHg4NWYwLCAwLCB7MHgyOCwweDQwLDB4MGEsMHgxMCwweDQyLDB4YzQsMHgwMCwweGI1LDB4MDAsMHhhMSwweDQwLDB4MDgsMHgxMCwweDAyLDB4YzQsMHgwMCB9fSwKKyB7MTYsIDB4ODYwMCwgMCwgezB4YjEsMHgwMSwweDJjLDB4NDAsMHgwOCwweDEwLDB4MjAsMHhkMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg2MTAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAwLDB4ODksMHgwNCwweDIyLDB4NDAsMHgwYiwweDkwLDB4MDAsMHhhYywweDAwLDB4MzksMHgwMCwweDJhIH19LAorIHsxNiwgMHg4NjIwLCAwLCB7MHg0MCwweDBiLDB4MTAsMHgwMiwweGE0LDB4MDAsMHhiOSwweDAwLDB4MmUsMHg0OCwweDBiLDB4OTAsMHgxMiwweGU0LDB4MDAsMHhiOSB9fSwKKyB7MTYsIDB4ODYzMCwgMCwgezB4MDAsMHgyMSwweDYwLDB4MDksMHg5MiwweDIyLDB4ZTQsMHgyOCwweGI5LDB4MDAsMHgwYSwweDUwLDB4MDgsMHg5MCwweDA2LDB4YzYgfX0sCisgezE2LCAweDg2NDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGU5LDB4MDAsMHgzNiwweDQwIH19LAorIHsxNiwgMHg4NjUwLCAwLCB7MHgwZCwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDgsMHgwZiwweDkwLDB4MDMsMHgyNCwweDAwLDB4ZDksMHgwMCB9fSwKKyB7MTYsIDB4ODY2MCwgMCwgezB4M2EsMHg3OCwweDBlLDB4OTgsMHgwMywweGU0LDB4MDAsMHhiOSwweDAwLDB4YjIsMHg0MCwweDBlLDB4OTIsMHgyMywweGU2LDB4MDAgfX0sCisgezE2LCAweDg2NzAsIDAsIHsweGI5LDB4NTAsMHgzZSwweDcwLDB4MmMsMHg5MCwweDAzLDB4ZTgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NjgwLCAwLCB7MHg2OCwweDAxLDB4ODQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4NGYsMHg5YywweDIzLDB4NjQsMHgwMCwweGY5LDB4MDQsMHgzNiB9fSwKKyB7MTYsIDB4ODY5MCwgMCwgezB4NDgsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NjAsMHgwZiwweDkyLDB4MDMsMHhlNCwweDAwLDB4ZjkgfX0sCisgezE2LCAweDg2YTAsIDAsIHsweDAwLDB4M2UsMHg0MCwweDhmLDB4OTAsMHg4MywweGU0LDB4NDQsMHhmOSwweDAwLDB4NzgsMHg2NCwweDBmLDB4OTAsMHgwMywweGRhIH19LAorIHsxNiwgMHg4NmIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCB9fSwKKyB7MTYsIDB4ODZjMCwgMCwgezB4MGYsMHg4MiwweDAzLDB4YTAsMHg0MCwweGU4LDB4MDAsMHgzZSwweDAwLDB4MGQsMHg4MCwweDAzLDB4MjAsMHhjMCwweGM4LDB4ODAgfX0sCisgezE2LCAweDg2ZDAsIDAsIHsweDNlLDB4MTIsMHgwZiwweDgwLDB4MDMsMHg2MCwweDAwLDB4N2MsMHgwMCwweDMzLDB4MDAsMHgwZCwweDgwLDB4MTMsMHhlMCwweDEwIH19LAorIHsxNiwgMHg4NmUwLCAwLCB7MHhjOCwweDY0LDB4M2UsMHgwOCwweDBjLDB4ODIsMHgwMywweGNhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODZmMCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDAsMHhiNiwweGUwLDB4MGYsMHhhMCwweDBiLDB4NjAsMHg4MiwweDM4LDB4MDAsMHhhYSwweDAwLDB4MmUgfX0sCisgezE2LCAweDg3MDAsIDAsIHsweDgwLDB4MDgsMHhhMCwweDQyLDB4YmEsMHgwMCwweGFlLDB4MjAsMHgyZiwweDg4LDB4MGIsMHhlNSwweDAyLDB4MjgsMHgwMCwweGJhIH19LAorIHsxNiwgMHg4NzEwLCAwLCB7MHhkOCwweDM3LDB4ODAsMHgwOCwweGVjLDB4MDIsMHhmOCwweDA0LDB4OGUsMHgwMCwweDJmLDB4OTAsMHgwZCwweGUwLDB4MDIsMHhjYSB9fSwKKyB7MTYsIDB4ODcyMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4YjAsMHgyNCwweDJjLDB4NjAgfX0sCisgezE2LCAweDg3MzAsIDAsIHsweDBiLDB4MzgsMHgwMiwweDhlLDB4ODAsMHhhYiwweDAwLDB4MmMsMHhjMCwweDA5LDB4MzAsMHgwMiwweDBkLDB4MDgsMHgwMCwweDgwIH19LAorIHsxNiwgMHg4NzQwLCAwLCB7MHg2YywweGQwLDB4MGIsMHgzNCwweDAyLDB4Y2MsMHgwMCwweGI4LDB4YzAsMHgyMCwweDAwLDB4NDgsMHgzNCwweDEyLDB4Y2MsMHg0MCB9fSwKKyB7MTYsIDB4ODc1MCwgMCwgezB4ODMsMHgwMCwweDJjLDB4ZTAsMHgwYSwweDM1LDB4MDIsMHhjYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg3NjAsIDAsIHsweGEwLDB4MDEsMHgxYywweDQwLDB4YjcsMHgwMCwweDJkLDB4MDIsMHg4YiwweDYwLDB4MDIsMHg5ZSwweDAwLDB4ODcsMHgyMCwweDJmIH19LAorIHsxNiwgMHg4NzcwLCAwLCB7MHhlMCwweDA4LDB4NzIsMHgwMiwweDllLDB4MDAsMHhhNCwweDAwLDB4MmQsMHhjMCwweDBiLDB4ZjgsMHgwMiwweDljLDB4YzAsMHhiMyB9fSwKKyB7MTYsIDB4ODc4MCwgMCwgezB4MDIsMHhhNSwweGMwLDB4MDgsMHg1MCwweDg2LDB4ZmUsMHgwMCwweDg3LDB4MDAsMHgyZiwweGQwLDB4MDksMHg3MCwweDAyLDB4ZTggfX0sCisgezE2LCAweDg3OTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgwMCwweGY0LDB4ODAsMHgzZCwweDIwIH19LAorIHsxNiwgMHg4N2EwLCAwLCB7MHgwZiwweDU4LDB4MDMsMHg5ZSwweDAwLDB4NjcsMHg4MCwweDNkLDB4ZjgsMHgwZCwweDM4LDB4MDIsMHgxYSwweDEwLDB4NDQsMHg4MCB9fSwKKyB7MTYsIDB4ODdiMCwgMCwgezB4M2QsMHhlMCwweDBmLDB4NTgsMHgwMywweGRlLDB4MjAsMHhiNCwweDgwLDB4MzMsMHhhMCwweDJjLDB4NjgsMHgwMywweGQ2LDB4MDAgfX0sCisgezE2LCAweDg3YzAsIDAsIHsweGM3LDB4ODEsMHgzZCwweGUwLDB4MGMsMHg3OCwweDAzLDB4ZWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4N2QwLCAwLCB7MHgwOCwweDFkLDB4YWMsMHgwOCwweGY4LDB4MDAsMHgzZSwweDAwLDB4OGYsMHg4MCwweDAzLDB4NmMsMHgwMCwweDNiLDB4MTIsMHgzZSB9fSwKKyB7MTYsIDB4ODdlMCwgMCwgezB4Y2EsMHgwZiwweGI1LDB4MDMsMHhjOCwweDAwLDB4ZjgsMHgwNCwweDdlLDB4YzAsMHgwZiwweDkwLDB4MDMsMHg2YywweDgwLDB4ZmIgfX0sCisgezE2LCAweDg3ZjAsIDAsIHsweDA0LDB4M2EsMHg0MCwweDBmLDB4OTAsMHgyMywweGM4LDB4MDAsMHhmOSwweDAxLDB4M2MsMHhjMCwweDBmLDB4YjAsMHgwMywweGMyIH19LAorIHsxNiwgMHg4ODAwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZlLDB4MDAsMHhhYywweDkwLDB4MzEsMHg0OCB9fSwKKyB7MTYsIDB4ODgxMCwgMCwgezB4MDgsMHhmOCwweDAzLDB4ZmEsMHgwMCwweGNmLDB4ODAsMHgzZiwweGUwLDB4MGMsMHhmYywweDEzLDB4M2UsMHgwNCwweGZjLDB4ODAgfX0sCisgezE2LCAweDg4MjAsIDAsIHsweDM1LDB4YTAsMHgwYywweDc4LDB4MDMsMHhiZSwweDAwLDB4ZGYsMHg4MCwweDNiLDB4MjAsMHgyNCwweGY4LDB4MDMsMHgyZSwweDQwIH19LAorIHsxNiwgMHg4ODMwLCAwLCB7MHhjZiwweDgwLDB4MzMsMHhlMCwweDAzLDB4ZjksMHgwMywweGQwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODg0MCwgMCwgezB4YTgsMHgxMSwweGJjLDB4MDAsMHg4MCwweDAwLDB4MDEsMHgwMCwweDA4LDB4NzIsMHgwMiwweGQwLDB4MDAsMHg4NywweDAwLDB4MmQgfX0sCisgezE2LCAweDg4NTAsIDAsIHsweGM4LDB4MGEsMHhmMCwweDAyLDB4OTgsMHg0MCwweGY1LDB4MDAsMHg2MSwweDQxLDB4MDAsMHg3NCwweDAyLDB4MWMsMHgwMCwweGI0IH19LAorIHsxNiwgMHg4ODYwLCAwLCB7MHgwMCwweDIxLDB4YzgsMHgwOCwweDYwLDB4MDIsMHgzZSwweDIwLDB4ODYsMHgwOCwweDIxLDB4ZDgsMHgwZiwweDUwLDB4MDIsMHhlYSB9fSwKKyB7MTYsIDB4ODg3MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDAsMHg5YywweDAwLDB4YTQsMHgwMCwweDIxLDB4MDAgfX0sCisgezE2LCAweDg4ODAsIDAsIHsweDA4LDB4NTAsMHgwMiwweGQ4LDB4MDAsMHg5NywweDAwLDB4MmQsMHhjMCwweDg4LDB4NzEsMHgwMiwweDE0LDB4MDAsMHhiMCwweDAwIH19LAorIHsxNiwgMHg4ODkwLCAwLCB7MHgyNSwweDkwLDB4MDgsMHhjMCwweDgyLDB4OWMsMHg0MCwweDkzLDB4MDAsMHgyOSwweGExLDB4ODgsMHg2MCwweDAyLDB4MTQsMHgxMiB9fSwKKyB7MTYsIDB4ODhhMCwgMCwgezB4ODcsMHg0MCwweDI5LDB4NDAsMHgwYiwweDYwLDB4MDIsMHhjNCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg4YjAsIDAsIHsweDYwLDB4MTQsMHhjYywweDAwLDB4ODAsMHhkMCwweGEwLDB4MDAsMHgwOCwweDFjLDB4MDIsMHhjMCwweDAwLDB4OTMsMHgwMCwweDJjIH19LAorIHsxNiwgMHg4OGMwLCAwLCB7MHhkMCwweDBhLDB4YjAsMHgyNiwweDgwLDB4MDAsMHhiMywweDAwLDB4MjQsMHhlNCwweDA4LDB4MDgsMHgwMiwweDhjLDB4MDAsMHhiMCB9fSwKKyB7MTYsIDB4ODhkMCwgMCwgezB4MDIsMHgwMiwweDQxLDB4MDgsMHgwOCwweDAyLDB4MDMsMHgwMSwweDgxLDB4MDAsMHgyOCwweDQyLDB4MWEsMHgwMCwweDQyLDB4ZDggfX0sCisgezE2LCAweDg4ZTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmOCwweDE1LDB4YmMsMHgwMCwweGU4LDB4YzAsMHgzMiwweDgwIH19LAorIHsxNiwgMHg4OGYwLCAwLCB7MHgwYywweGI1LDB4MDMsMHhlNCwweDAwLDB4OWYsMHgwMCwweDNkLDB4ZTAsMHgwYywweGYwLDB4MGIsMHgyNCwweDAwLDB4ZjgsMHgwMCB9fSwKKyB7MTYsIDB4ODkwMCwgMCwgezB4MzYsMHhlMCwweDBjLDB4MjUsMHgwMywweGJjLDB4MDUsMHhkOCwweDAyLDB4MmEsMHgwMCwweDA4LDB4YmEsMHgwMiwweDJhLDB4MDAgfX0sCisgezE2LCAweDg5MTAsIDAsIHsweGMxLDB4MDIsMHgzYSwweDUwLDB4OGIsMHg5MCwweDAzLDB4ZWUsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4OTIwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGZiLDB4MDgsMHgzZSwweDgwLDB4MGYsMHhhMSwweDAzLDB4ZWMsMHgwNCwweGViLDB4MDIsMHgyZSB9fSwKKyB7MTYsIDB4ODkzMCwgMCwgezB4YzYsMHgwZiwweGIwLDB4MTcsMHg0NCwweDAwLDB4ZTgsMHgwMCwweDNhLDB4NDAsMHgwZiwweDgwLDB4MDIsMHg2YywweDAwLDB4ZmIgfX0sCisgezE2LCAweDg5NDAsIDAsIHsweDAwLDB4M2UsMHhlMCwweDBmLDB4OTAsMHg5MywweGUxLDB4MDAsMHhkOSwweDAwLDB4MjYsMHg3MCwweDhmLDB4OTAsMHgwMSwweGUxIH19LAorIHsxNiwgMHg4OTUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweGZjLDB4MDAsMHhmYywweDAzLDB4MzcsMHgyNCB9fSwKKyB7MTYsIDB4ODk2MCwgMCwgezB4MGQsMHhmOCwweDAzLDB4ZTAsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMxLDB4OGQsMHhmMCwweDBiLDB4MzgsMHgwMCwweGNjLDB4MDAgfX0sCisgezE2LCAweDg5NzAsIDAsIHsweDNmLDB4YzAsMHgwZiwweGZhLDB4MDMsMHgzYywweDBjLDB4ZmMsMHgwNCwweDNiLDB4ODAsMHgwYywweGEwLDB4MDMsMHg5NCwweDIwIH19LAorIHsxNiwgMHg4OTgwLCAwLCB7MHg4OSwweDA1LDB4M2IsMHgwMCwweDRmLDB4ZDAsMHgyMywweGMwLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODk5MCwgMCwgezB4ODAsMHgwNCwweDZjLDB4MDAsMHhiMCwweDA2LDB4MjAsMHgxMywweDg4LDB4YTgsMHgwMiwweGViLDB4MDAsMHhiYiwweDAwLDB4MmUgfX0sCisgezE2LCAweDg5YTAsIDAsIHsweGMwLDB4MDgsMHhiMCwweDAyLDB4MmEsMHgwMCwweGE4LDB4ODAsMHgyZSwweGUwLDB4MGIsMHg5NCwweDFhLDB4MmMsMHgwMCwweGJiIH19LAorIHsxNiwgMHg4OWIwLCAwLCB7MHgwMCwweGEyLDB4NDAsMHgyOSwweDk4LDB4MDIsMHhlMiwweDAwLDB4YTksMHg4NCwweDIyLDB4MjAsMHgwYiwweDk4LDB4MDIsMHhlMCB9fSwKKyB7MTYsIDB4ODljMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4YjgsMHgwMCwweDIyLDB4MDAgfX0sCisgezE2LCAweDg5ZDAsIDAsIHsweDA5LDB4ODIsMHgwMiwweGU2LDB4MDAsMHhiYiwweDAwLDB4MmUsMHhjMCwweDBiLDB4YjAsMHgwMiwweDI2LDB4MDAsMHg4OCwweDgwIH19LAorIHsxNiwgMHg4OWUwLCAwLCB7MHgyZSwweGEwLDB4MGIsMHhhMCwweDAyLDB4MmMsMHgwMCwweGIzLDB4MDAsMHgyYSwweDAwLDB4MDksMHg5OCwweDAyLDB4ZWEsMHgyMCB9fSwKKyB7MTYsIDB4ODlmMCwgMCwgezB4YTksMHg4MCwweDJhLDB4NjAsMHg5YiwweDk4LDB4ODIsMHhlMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhhMDAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAwLDB4YjgsMHgwMCwweDIwLDB4MDAsMHgwOSwweDA4LDB4MDIsMHhjNCwweDAwLDB4YjMsMHgwMCwweDI2IH19LAorIHsxNiwgMHg4YTEwLCAwLCB7MHhjMCwweDAwLDB4MzAsMHgwMiwweDAwLDB4MDAsMHg4MSwweDAwLDB4MmMsMHg0MSwweDBiLDB4MDAsMHgwMiwweDBjLDB4MDAsMHhiMCB9fSwKKyB7MTYsIDB4OGEyMCwgMCwgezB4MDAsMHgyMCwweGMwLDB4MGIsMHgwMCwweDAyLDB4YzgsMHg4MCwweGE4LDB4MDAsMHgyMCwweDQxLDB4MGIsMHgxMCwweDAyLDB4YzIgfX0sCisgezE2LCAweDhhMzAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgxMCwweGY4LDB4NTAsMHhiMiwweDAwIH19LAorIHsxNiwgMHg4YTQwLCAwLCB7MHgwZCwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZmIsMHgwMCwweDNkLDB4YzAsMHgwZCwweGYwLDB4MTMsMHgyNCwweDAyLDB4YzgsMHgwNiB9fSwKKyB7MTYsIDB4OGE1MCwgMCwgezB4M2UsMHg4MCwweDBmLDB4YTAsMHgwMywweDNjLDB4MDQsMHhmYiwweDAwLDB4NzgsMHg4MCwweDBjLDB4YTAsMHgwMywweGU0LDB4MDAgfX0sCisgezE2LCAweDhhNjAsIDAsIHsweGU5LDB4MDAsMHgxYSwweDQwLDB4MGYsMHg5MCwweDAzLDB4YzAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4YTcwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgwMCwweGY0LDB4MjAsMHgzZiwweDAwLDB4MGUsMHhjMCwweDAyLDB4ZjAsMHgwMSwweGZmLDB4MDAsMHgzZiB9fSwKKyB7MTYsIDB4OGE4MCwgMCwgezB4YzAsMHgwZiwweGYwLDB4MjMsMHhmMCwweDAwLDB4ZmQsMHgwMCwweDNmLDB4YzAsMHgwZiwweGMwLDB4MDMsMHhmYywweDAwLDB4ZmMgfX0sCisgezE2LCAweDhhOTAsIDAsIHsweDAwLDB4M2YsMHg0MCwweDljLDB4YzAsMHgwMywweGYwLDB4NDAsMHhmZCwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZDAsMHg0MywweGU4IH19LAorIHsxNiwgMHg4YWEwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGYwLDB4MDAsMHhlZCwweDIzLDB4YjcsMHg0OCB9fSwKKyB7MTYsIDB4OGFiMCwgMCwgezB4MGMsMHhlMSwweGMzLDB4N2MsMHhjMCwweGRkLDB4ODAsMHgzNywweGUwLDB4MGYsMHhjYiwweDAzLDB4ZmUsMHgwOCwweGZjLDB4MjggfX0sCisgezE2LCAweDhhYzAsIDAsIHsweDNmLDB4ZjAsMHgxYywweGZiLDB4MjMsMHg3YywweDAxLDB4ZmYsMHgxNCwweDc3LDB4ZTIsMHg0ZiwweGU4LDB4MjMsMHg3YywweDAwIH19LAorIHsxNiwgMHg4YWQwLCAwLCB7MHhjNCwweDgwLDB4MzMsMHg0OCwweDJjLDB4ZjgsMHgyMiwweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGFlMCwgMCwgezB4ODAsMHgxMCwweGUwLDB4ZTAsMHhjOSwweGMwLDB4MjIsMHg1YiwweDg4LDB4OTYsMHgyMiwweDJkLDB4MDAsMHg4OSwweDIyLDB4MjIgfX0sCisgezE2LCAweDhhZjAsIDAsIHsweGNhLDB4MGIsMHg5ZSwweDIyLDB4ZTIsMHhhMCwweGI5LDB4NjEsMHgyYywweGUwLDB4ODgsMHg5ZiwweDAyLDB4M2QsMHg4NSwweGJmIH19LAorIHsxNiwgMHg4YjAwLCAwLCB7MHg2MCwweDI2LDB4NTAsMHg0OCwweGEwLDB4MDIsMHgzYywweDAwLDB4ODgsMHgwMCwweDIyLDB4NTAsMHgwOCwweGIwLDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4OGIxMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjMCwweDgwLDB4YjEsMHgxMCwweDIwLDB4NDQgfX0sCisgezE2LCAweDhiMjAsIDAsIHsweDBiLDB4YjIsMHgwMiwweGNlLDB4ZDAsMHg4MSwweDA4LDB4MmMsMHhjMCwweDBiLDB4MDEsMHgwMiwweDhjLDB4MDgsMHhiMywweDA4IH19LAorIHsxNiwgMHg4YjMwLCAwLCB7MHgyYywweGM5LDB4MDgsMHgxMCwweDYyLDB4OGMsMHg2MCwweGIzLDB4MzIsMHgyNCwweDgwLDB4MGEsMHhhMCwweDAyLDB4NmMsMHgwMyB9fSwKKyB7MTYsIDB4OGI0MCwgMCwgezB4OWEsMHgwMSwweDI2LDB4NDQsMHg0OCwweGIwLDB4NDIsMHg2MiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhiNTAsIDAsIHsweGMwLDB4MTUsMHhhNCwweGEwLDB4OGIsMHgwMiwweDIyLDB4ZTAsMHgwYiwweGIwLDB4NjIsMHhhYywweDk4LDB4OTksMHgwMCwweDJhIH19LAorIHsxNiwgMHg4YjYwLCAwLCB7MHhjMiwweDBiLDB4OTgsMHgwNiwweGU0LDB4MDAsMHhiYiwweDAyLDB4MmUsMHhjMCwweDA4LDB4OTEsMHg0MiwweDJjLDB4MTAsMHhiYiB9fSwKKyB7MTYsIDB4OGI3MCwgMCwgezB4MDAsMHg2ZSwweDgwLDB4MGEsMHg4MCwweDAyLDB4NmMsMHgwMCwweDFiLDB4MDAsMHgwNiwweDQwLDB4NDgsMHhiOCwweDBhLDB4NzAgfX0sCisgezE2LCAweDhiODAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDExLDB4ZTcsMHgwMCwweGExLDB4MDAsMHg3NiwweDc4IH19LAorIHsxNiwgMHg4YjkwLCAwLCB7MHgwZiwweGIwLDB4MDMsMHhlOCwweDEwLDB4ZDksMHgwMCwweDNlLDB4ZDAsMHg0YiwweDllLDB4MTMsMHhhYywweDA4LDB4YjgsMHhhMCB9fSwKKyB7MTYsIDB4OGJhMCwgMCwgezB4N2UsMHhjNiwweDA4LDB4YTgsMHgwMiwweDJjLDB4MDEsMHhiYiwweDAwLDB4MjYsMHgzMCwweDRlLDB4MjAsMHgwMywweDRjLDB4MTggfX0sCisgezE2LCAweDhiYjAsIDAsIHsweDk5LDB4ODAsMHhiNCwweDQwLDB4NGMsMHgzYSwweDAzLDB4NDAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4YmMwLCAwLCB7MHhlMCwweDAxLDB4YjIsMHgwMCwweGZkLDB4YzUsMHgzYiwweGMwLDB4NGMsMHhkMCwweDAzLDB4NmEsMHgwMiwweGVkLDB4MDYsMHgzMyB9fSwKKyB7MTYsIDB4OGJkMCwgMCwgezB4YzQsMHgwZiwweGQwLDB4NTMsMHhmOCwweDAwLDB4ZmMsMHg5MCwweDdmLDB4YzEsMHgwZiwweDc4LDB4MDMsMHhiYywweDA0LDB4ZmYgfX0sCisgezE2LCAweDhiZTAsIDAsIHsweDAwLDB4MzcsMHg2NCwweDBjLDB4ZjEsMHgwMywweGE0LDB4MDAsMHhlZCwweGExLDB4M2IsMHg0MCwweDBiLDB4ZjAsMHg4MywweGI4IH19LAorIHsxNiwgMHg4YmYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweDhjLDB4MDAsMHhjYiwweDIwLDB4M2UsMHg3MSB9fSwKKyB7MTYsIDB4OGMwMCwgMCwgezB4MGYsMHhiMywweDAzLDB4OTgsMHgwMiwweGZiLDB4MDIsMHgzNiwweDQ4LDB4MGYsMHg5MCwweDAzLDB4ZWMsMHgyMCwweGY4LDB4MDAgfX0sCisgezE2LCAweDhjMTAsIDAsIHsweDNlLDB4Y2MsMHgwNCwweDg0LDB4MDMsMHgyYywweDAwLDB4ZGIsMHgwNCwweDNjLDB4MTAsMHgwZiwweGEwLDB4MDMsMHhlYywweDAwIH19LAorIHsxNiwgMHg4YzIwLCAwLCB7MHg5YiwweDAwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweGQwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGMzMCwgMCwgezB4ODgsMHgwNSwweDJjLDB4MDIsMHg4YiwweDQ4LDB4MmUsMHhlMCwweDBiLDB4MzQsMHgwMywweDZiLDB4MDAsMHg4YiwweGY1LDB4MjIgfX0sCisgezE2LCAweDhjNDAsIDAsIHsweGYyLDB4MGIsMHg5YywweDAzLDB4YWYsMHgwMCwweGI4LDB4NTAsMHgyZSwweGMwLDB4MDgsMHhiMCwweDAyLDB4N2MsMHgwMCwweDhmIH19LAorIHsxNiwgMHg4YzUwLCAwLCB7MHgwMCwweDBlLDB4NWQsMHgwYiwweDgwLDB4MDIsMHhmNSwweDQwLDB4ODMsMHg1MCwweDIzLDB4NTQsMHgwOCwweDljLDB4MDIsMHhlNiB9fSwKKyB7MTYsIDB4OGM2MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDQsMHg0YywweDAwLDB4ODEsMHg4MSwweDJlLDB4NDAgfX0sCisgezE2LCAweDhjNzAsIDAsIHsweDAzLDB4MmMsMHgwMiwweDA0LDB4MzMsMHg5OSwweDAwLDB4MjAsMHhmMCwweDRhLDB4MjgsMHg4MCwweGNjLDB4NDAsMHhiMCwweDAwIH19LAorIHsxNiwgMHg4YzgwLCAwLCB7MHgyNiwweDEwLDB4MDgsMHgyMCwweDAyLDB4NGMsMHgwMCwweDgzLDB4MDAsMHgyYywweGMwLDB4MDksMHgyMCwweDAyLDB4Y2MsMHgwMCB9fSwKKyB7MTYsIDB4OGM5MCwgMCwgezB4YTAsMHgwMiwweDI4LDB4NDAsMHgwOCwweDA4LDB4MDIsMHg3YSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhjYTAsIDAsIHsweDIwLDB4MDEsMHgwYSwweDAwLDB4ODUsMHg4MCwweDJkLDB4ZjgsMHgwYiwweGRhLDB4MDIsMHhkNiwweDQwLDB4ODUsMHhhMCwweDIxIH19LAorIHsxNiwgMHg4Y2IwLCAwLCB7MHhlMCwweDBiLDB4NDgsMHgwNiwweDkyLDB4MDQsMHhiNSwweDgwLDB4MmQsMHgyMSwweDA4LDB4MDAsMHgwMiwweDRlLDB4MDAsMHg4NyB9fSwKKyB7MTYsIDB4OGNjMCwgMCwgezB4YTQsMHgyZCwweDYwLDB4MGIsMHg2OCwweDAyLDB4ZGUsMHhjMiwweGFkLDB4OTAsMHgyYiwweDYwLDB4MjgsMHg1OCwweDgyLDB4ZGMgfX0sCisgezE2LCAweDhjZDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4NGMsMHg0MCwweGMzLDB4MTAsMHgyYywweDZjIH19LAorIHsxNiwgMHg4Y2UwLCAwLCB7MHgwZiwweDMwLDB4MDMsMHg4NiwweGEyLDB4ZjksMHhiMCwweGIwLDB4ZTAsMHgwZiwweDI5LDB4ODMsMHhjZSwweDQ0LDB4ZjMsMHg4MCB9fSwKKyB7MTYsIDB4OGNmMCwgMCwgezB4M2MsMHhhYywweDBjLDB4MzAsMHgwMywweDBjLDB4MDAsMHhjMywweDAwLDB4M2MsMHhkNSwweDBmLDB4MjAsMHgwMywweGNlLDB4YzEgfX0sCisgezE2LCAweDhkMDAsIDAsIHsweGUwLDB4MTAsMHhiOCwweDQwLDB4MGMsMHgwMCwweDAzLDB4ZDIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ZDEwLCAwLCB7MHhjMCwweDFkLDB4YmMsMHgwMCwweGViLDB4MDAsMHgzZSwweGNjLDB4MGYsMHgzMiwweDAzLDB4NjQsMHgwOCwweGY5LDB4MDAsMHgzYiB9fSwKKyB7MTYsIDB4OGQyMCwgMCwgezB4OTAsMHgwZiwweGYwLDB4NDMsMHhlNCwweDQwLDB4ZmIsMHgzNCwweDNmLDB4ODEsMHgwNywweGQxLDB4MDMsMHhhZCwweDIwLDB4ZWIgfX0sCisgezE2LCAweDhkMzAsIDAsIHsweDIwLDB4N2YsMHhjNCwweDBmLDB4ZTEsMHgwMywweGZjLDB4NTAsMHhjZCwweDEwLDB4MzUsMHg0MCwweDBmLDB4ZDAsMHgwMywweGQwIH19LAorIHsxNiwgMHg4ZDQwLCAwLCB7MHgwMiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGU0LDB4MDQsMHhmZCwweDA0LDB4M2QsMHg0MCB9fSwKKyB7MTYsIDB4OGQ1MCwgMCwgezB4MmQsMHgzMCwweDAyLDB4M2MsMHgwMCwweGM5LDB4MDEsMHgzZSwweGMwLDB4NGYsMHhiOCwweDQzLDB4ZWMsMHgxMCwweGZiLDB4MDAgfX0sCisgezE2LCAweDhkNjAsIDAsIHsweDMyLDB4NDAsMHgwZiwweGEwLDB4MjMsMHhlYywweDgwLDB4Y2IsMHgzNiwweDMyLDB4ODAsMHg0ZCwweGE4LDB4MDMsMHgyYywweDEwIH19LAorIHsxNiwgMHg4ZDcwLCAwLCB7MHhjYiwweDAwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweDZhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGQ4MCwgMCwgezB4YzgsMHgxMSwweDkwLDB4MDgsMHhiNSwweDAwLDB4MmQsMHhjMCwweDA4LDB4NTAsMHgwMiwweGJjLDB4MDIsMHg4NSwweDA0LDB4MmQgfX0sCisgezE2LCAweDhkOTAsIDAsIHsweGMwLDB4OGUsMHg2MCwweDA2LDB4ZDgsMHgwNCwweGI3LDB4MDQsMHgyMSwweDQwLDB4MGIsMHg3MCwweDAyLDB4ZmMsMHg4MCwweGFmIH19LAorIHsxNiwgMHg4ZGEwLCAwLCB7MHgyOCwweDIxLDB4YzAsMHgwYiwweDcwLDB4MDIsMHgwNiwweDQwLDB4ODcsMHgwMCwweDIxLDB4NTAsMHgwOCwweDUwLDB4MDIsMHgzMiB9fSwKKyB7MTYsIDB4OGRiMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHg5ZSwweDIwLDB4YjcsMHg4MCwweDJiLDB4NzAgfX0sCisgezE2LCAweDhkYzAsIDAsIHsweDA4LDB4ZjgsMHgwNiwweDFlLDB4MDAsMHg4NywweDgwLDB4MmQsMHhlMCwweDBiLDB4NzAsMHgzMiwweGRlLDB4MDQsMHgzNywweDg0IH19LAorIHsxNiwgMHg4ZGQwLCAwLCB7MHgyNSwweGUwLDB4MGIsMHg2OCwweDA2LDB4ZGUsMHg4MCwweDg3LDB4ODAsMHgyMSwweGExLDB4MWIsMHg2OCwweDAyLDB4MWUsMHg0MCB9fSwKKyB7MTYsIDB4OGRlMCwgMCwgezB4OWYsMHg4MCwweDIwLDB4NjAsMHgwOCwweDU4LDB4MDIsMHgyMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhkZjAsIDAsIHsweDQ4LDB4MTQsMHhjYywweDIwLDB4YjMsMHgwMCwweDJjLDB4ODAsMHg4OCwweGI0LDB4MjIsMHg4ZCwweDAwLDB4ODMsMHg5MCwweDJjIH19LAorIHsxNiwgMHg4ZTAwLCAwLCB7MHhjMCwweDBhLDB4MzgsMHgwMiwweGNlLDB4MDgsMHhiYiwweDIwLDB4MjQsMHhkMCwweDBiLDB4YjMsMHgwMiwweGNjLDB4MDAsMHhhMyB9fSwKKyB7MTYsIDB4OGUxMCwgMCwgezB4MDAsMHg2MCwweGQyLDB4MGIsMHgyMCwweDJhLDB4MDQsMHgwOCwweDkzLDB4NTAsMHgyMCwweDQwLDB4MDgsMHgxNywweDBhLDB4MDIgfX0sCisgezE2LCAweDhlMjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YmEsMHgwMCwweGJhLDB4YTAsMHgzZiwweDg0IH19LAorIHsxNiwgMHg4ZTMwLCAwLCB7MHgxYywweGUwLDB4MGIsMHgzOCwweDQwLDB4OGUsMHgwNiwweDJlLDB4ODAsMHgwYiwweGUzLDB4MDMsMHhmOCwweDgwLDB4ZmUsMHhlNCB9fSwKKyB7MTYsIDB4OGU0MCwgMCwgezB4YjcsMHg5MCwweDBmLDB4ZWMsMHgwMiwweGU4LDB4MDAsMHg4YSwweDAwLDB4YTMsMHhhMCwweDA5LDB4ZTQsMHgwMywweDJhLDB4MDIgfX0sCisgezE2LCAweDhlNTAsIDAsIHsweGRlLDB4YzAsMHhmMywweDgwLDB4MGMsMHg2YywweDAzLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ZTYwLCAwLCB7MHg0OCwweDAxLDB4ZTAsMHgwMCwweGY4LDB4NDAsMHgzZSwweDAwLDB4MGYsMHg4NCwweDEzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgyZSB9fSwKKyB7MTYsIDB4OGU3MCwgMCwgezB4MzAsMHgwYSwweDg0LDB4MDMsMHhlMCwweDA0LDB4ZjgsMHgwMCwweDNhLDB4MDIsMHgwZiwweDgwLDB4MTMsMHhlMCwweDAwLDB4ZjggfX0sCisgezE2LCAweDhlODAsIDAsIHsweDAwLDB4M2UsMHgwNCwweDBkLDB4ODAsMHg4MywweGUwLDB4NDAsMHhlOCwweDIwLDB4M2UsMHgwMCwweDJmLDB4ODAsMHgwMywweGQyIH19LAorIHsxNiwgMHg4ZTkwLCAwLCB7MHgxMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGE0LDB4MDAsMHhmOSwweDAwLDB4M2MsMHg2NCB9fSwKKyB7MTYsIDB4OGVhMCwgMCwgezB4NGUsMHg5MCwweDgzLDB4MjQsMHg4MCwweGM5LDB4MDAsMHgzMiwweGUwLDB4MGYsMHgxMCwweDAzLDB4MjUsMHgwMCwweGY5LDB4MDAgfX0sCisgezE2LCAweDhlYjAsIDAsIHsweDMyLDB4NDQsMHgwZiwweDkyLDB4MjMsMHg2NCwweDAwLDB4YzEsMHgwMCwweDMyLDB4NDAsMHgwYywweDkwLDB4MTMsMHhlNCwweDAwIH19LAorIHsxNiwgMHg4ZWMwLCAwLCB7MHhjOSwweDAwLDB4MjIsMHg0MCwweDBjLDB4OTAsMHgwMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGVkMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHhiOSwweDIwLDB4MmUsMHg0MCwweDQ4LDB4OTYsMHgyMiwweDI1LDB4MDAsMHhkOSwweGMwLDB4YTIgfX0sCisgezE2LCAweDhlZTAsIDAsIHsweDcwLDB4MGIsMHg5OCwweDAyLDB4MjQsMHgwMCwweGI5LDB4NDAsMHhhMiwweDcwLDB4NGIsMHg5MCwweDAyLDB4MjQsMHgwMCwweGQ5IH19LAorIHsxNiwgMHg4ZWYwLCAwLCB7MHgwMCwweGEyLDB4NDAsMHgyYywweDk0LDB4MjIsMHhlNCwweDAyLDB4ODksMHgwMCwweGEyLDB4NDAsMHgyOCwweDk0LDB4MTMsMHgyMCB9fSwKKyB7MTYsIDB4OGYwMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHgyNCwweDAwLDB4YjksMHgwMCwweDJlLDB4NDAgfX0sCisgezE2LCAweDhmMTAsIDAsIHsweDBhLDB4OTAsMHgwMiwweDA0LDB4MDAsMHg4MSwweDgwLDB4YTIsMHg0NCwweDBiLDB4OTEsMHgwMiwweDI1LDB4MDAsMHgxOSwweDQwIH19LAorIHsxNiwgMHg4ZjIwLCAwLCB7MHg2MiwweDQwLDB4MGIsMHhiNCwweDAyLDB4NDQsMHgwMCwweDg5LDB4MDAsMHgyMCwweDQwLDB4MDgsMHg5MCwweDgyLDB4YzQsMHgwMSB9fSwKKyB7MTYsIDB4OGYzMCwgMCwgezB4ODMsMHgwMiwweDI4LDB4NDAsMHg0OCwweDkwLDB4ODIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhmNDAsIDAsIHsweDAwLDB4MDQsMHgwNSwweDgwLDB4YjEsMHgwMCwweDZjLDB4NTEsMHgwOCwweDE0LDB4MWEsMHgwNSwweDAwLDB4OTMsMHgwMCwweDIwIH19LAorIHsxNiwgMHg4ZjUwLCAwLCB7MHg0MCwweDhiLDB4MTQsMHgwMiwweDA1LDB4MDAsMHhiMSwweDIwLDB4MjAsMHg1MCwweDBiLDB4MTQsMHgwNiwweDA0LDB4ODAsMHg5MSB9fSwKKyB7MTYsIDB4OGY2MCwgMCwgezB4MjAsMHgyMCwweDQwLDB4MDksMHgxMCwweDAyLDB4YzQsMHhhOCwweDgxLDB4MDAsMHgyOCwweDRhLDB4MDgsMHg5MCwweDRhLDB4NDIgfX0sCisgezE2LCAweDhmNzAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwIH19LAorIHsxNiwgMHg4ZjgwLCAwLCB7MHgwZSwweDgwLDB4MDMsMHgyOCwweDAxLDB4YzgsMHg1MCwweDMyLDB4OTQsMHg4YiwweGEwLDB4MDMsMHgyMCwweDAwLDB4YjAsMHg1MCB9fSwKKyB7MTYsIDB4OGY5MCwgMCwgezB4MzIsMHg4MCwweDBmLDB4ODAsMHgwNywweDYxLDB4NTEsMHhjOCwweDUwLDB4MjIsMHgwMCwweDBjLDB4MDAsMHgwMywweGUwLDB4ODQgfX0sCisgezE2LCAweDhmYTAsIDAsIHsweGM4LDB4MDQsMHgzYSwweDA4LDB4MGMsMHgwMCwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ZmIwLCAwLCB7MHg5OCwweDlkLDB4ZjQsMHg0MCwweGJkLDB4NDEsMHgzZiwweDUwLDB4MGYsMHhmNCwweDAzLDB4ZjUsMHgxMCwweGZkLDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4OGZjMCwgMCwgezB4NDAsMHgwZiwweGQ0LDB4MDMsMHhmNCwweDAwLDB4ZmYsMHgxMCwweDJmLDB4NDAsMHg0ZiwweGQ0LDB4NDAsMHhhNCwweDQ4LDB4ZjkgfX0sCisgezE2LCAweDhmZDAsIDAsIHsweDEyLDB4M2YsMHg1YSwweDhlLDB4ZDIsMHg4MywweGY0LDB4YTgsMHhmNSwweDJjLDB4MzcsMHg0YSwweDBmLDB4ZDIsMHg4MywweGE2IH19LAorIHsxNiwgMHg4ZmUwLCAwLCB7MHgxMiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGU2LDB4ODAsMHhmZCwweDI4LDB4M2YsMHg0YyB9fSwKKyB7MTYsIDB4OGZmMCwgMCwgezB4MGYsMHg1MCwweDAzLDB4M2MsMHg0NCwweGNkLDB4NDAsMHgzZiwweGQwLDB4MGQsMHhkMCwweDAyLDB4MTQsMHgwMSwweGZkLDB4YTAgfX0sCisgezE2LCAweDkwMDAsIDAsIHsweDMxLDB4NDAsMHgwMywweGQwLDB4MDMsMHhlNywweDg5LDB4ZjksMHg5MCwweDdlLDB4NTAsMHgwYywweDk0LDB4MDMsMHhlNiwweGMwIH19LAorIHsxNiwgMHg5MDEwLCAwLCB7MHhjOSwweDEwLDB4MzIsMHg2ZCwweDBmLDB4OTEsMHgwMiwweGM2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTAyMCwgMCwgezB4MzgsMHgxMCwweGUwLDB4ODAsMHhiOCwweDAxLDB4MmUsMHgwYywweDhiLDB4ODQsMHg4MiwweDIwLDB4NDIsMHg4OCwweGEwLDB4NmUgfX0sCisgezE2LCAweDkwMzAsIDAsIHsweDIwLDB4MDgsMHg4MCwweDAzLDB4NjAsMHgwMCwweDk4LDB4ZTgsMHgyMiwweDAwLDB4MDksMHg4MCwweDAyLDB4ZTMsMHhjMCwweGU4IH19LAorIHsxNiwgMHg5MDQwLCAwLCB7MHhkMCwweDJlLDB4MjgsMHgwOCwweDhhLDB4MjMsMHhlMiwweDg0LDB4ZDgsMHhhMCwweDIyLDB4M2QsMHgwYiwweGM4LDB4MDIsMHhjZSB9fSwKKyB7MTYsIDB4OTA1MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDUsMHhjNSwweGIwLDB4YjEsMHgwMCwweDJjLDB4NDggfX0sCisgezE2LCAweDkwNjAsIDAsIHsweDBiLDB4MTMsMHgwMiwweDA0LDB4MDIsMHhiMSwweDIwLDB4MmUsMHg0MCwweDg4LDB4MTAsMHgyMiwweGM0LDB4MDAsMHhiMSwweDE0IH19LAorIHsxNiwgMHg5MDcwLCAwLCB7MHgyNCwweDQwLDB4MGIsMHgxMCwweDUyLDB4YzQsMHgwMCwweGIxLDB4MjEsMHgyZCwweDQ4LDB4MGEsMHg1MiwweDAyLDB4ZDUsMHgwMCB9fSwKKyB7MTYsIDB4OTA4MCwgMCwgezB4YmQsMHgwMCwweGFkLDB4NDAsMHgwYiwweDUyLDB4MDIsMHhkMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkwOTAsIDAsIHsweDE4LDB4NTUsMHhhNSwweDAwLDB4YjksMHg4MiwweDJlLDB4NDksMHg4YiwweGIwLDB4MTIsMHgyNCwweDEwLDB4OTksMHgwMiwweDJlIH19LAorIHsxNiwgMHg5MGEwLCAwLCB7MHg0MCwweDA4LDB4YjIsMHgwMCwweDY1LDB4MDAsMHg5OSwweDgwLDB4MjYsMHg0NCwweDA5LDB4OTEsMHgwMiwweGU0LDB4MDksMHhhOSB9fSwKKyB7MTYsIDB4OTBiMCwgMCwgezB4MDQsMHgyZSwweDQ2LDB4MGEsMHhkNCwweDAyLDB4YjQsMHgwMCwweGJkLDB4NDAsMHgyZiwweDQwLDB4MGIsMHhkMCwweDAyLDB4YzYgfX0sCisgezE2LCAweDkwYzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTcsMHg0MCwweGY5LDB4ODAsMHgyZSwweDYyIH19LAorIHsxNiwgMHg5MGQwLCAwLCB7MHgwZiwweDljLDB4NDIsMHgyNCwweDAwLDB4OTksMHgwMSwweDJlLDB4NjgsMHgyYywweDkyLDB4MDIsMHg2NCwweDAwLDB4YjksMHg0MCB9fSwKKyB7MTYsIDB4OTBlMCwgMCwgezB4YjYsMHg2MCwweDBmLDB4OWEsMHgwMywweGU0LDB4MDAsMHhiOSwweDAwLDB4MmUsMHg3MCwweDNlLDB4OTksMHgwNiwweGU0LDB4MDIgfX0sCisgezE2LCAweDkwZjAsIDAsIHsweGY5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5OCwweDAzLDB4ZTgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MTAwLCAwLCB7MHg2OCwweDAxLDB4YTYsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MWYsMHgxMiwweGFiLDB4ZTQsMHgwMCwweGU5LDB4OTAsMHgzZSB9fSwKKyB7MTYsIDB4OTExMCwgMCwgezB4NDksMHgwZSwweDk4LDB4MDMsMHhlNCwweDAwLDB4ZjEsMHgwMCwweDNhLDB4NDAsMHgwZCwweDk4LDB4MDMsMHhlNCwweDAwLDB4ZjkgfX0sCisgezE2LCAweDkxMjAsIDAsIHsweDAxLDB4M2UsMHg2MCwweDA1LDB4OTAsMHgxMywweGU0LDB4MDAsMHg1OSwweDIwLDB4MzIsMHg0MCwweDhmLDB4OTEsMHgwMywweGRhIH19LAorIHsxNiwgMHg5MTMwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjgsMHgxMCwweGEwLDB4MDAsMHhjOCwweDA4LDB4M2UsMHgwMSB9fSwKKyB7MTYsIDB4OTE0MCwgMCwgezB4MGYsMHg4NCwweDYzLDB4MDAsMHgyMiwweGU4LDB4MjAsMHgzZSwweDEzLDB4MGYsMHg4NCwweDAzLDB4ZTEsMHhjMCwweGQ4LDB4NGMgfX0sCisgezE2LCAweDkxNTAsIDAsIHsweDMyLDB4MDAsMHgwYywweDg0LDB4NDMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDIyLDB4MTAsMHgwZiwweDg0LDB4MDMsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MTYwLCAwLCB7MHhjOCwweDAwLDB4YjIsMHgwMCwweDBjLDB4YzAsMHgwMywweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTE3MCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDAsMHg4ZSwweDAwLDB4MmYsMHg4NiwweDRiLDB4ZTAsMHgwMiwweDM5LDB4MDgsMHg4ZSwweDIwLDB4MmQgfX0sCisgezE2LCAweDkxODAsIDAsIHsweDkwLDB4MGIsMHhlZCwweDkyLDB4ZjgsMHgwMiwweDhlLDB4ZTAsMHhhMywweDk4LDB4MDgsMHhlMCwweDAyLDB4ZTgsMHgwOCwweGJhIH19LAorIHsxNiwgMHg5MTkwLCAwLCB7MHgwMCwweDYyLDB4ODAsMHgwOCwweGEwLDB4MDIsMHgyOCwweDAwLDB4MDIsMHg4MCwweDAyLDB4ODAsMHg0OCwweGUwLDB4MDMsMHg0YSB9fSwKKyB7MTYsIDB4OTFhMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MDUsMHg0YywweDAwLDB4ODMsMHgxMCwweDJjLDB4ZjAgfX0sCisgezE2LCAweDkxYjAsIDAsIHsweDBhLDB4MTQsMHgyYSwweDBkLDB4MWEsMHhiMywweDAxLDB4MjQsMHhkMCwweDBiLDB4YmMsMHgzMiwweGNjLDB4MDgsMHgwMywweDAwIH19LAorIHsxNiwgMHg5MWMwLCAwLCB7MHgyMCwweGM4LDB4MGIsMHgzMCwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDIsMHgyMiwweGMwLDB4MDksMHgzMCwweDAyLDB4MGMsMHgxMSB9fSwKKyB7MTYsIDB4OTFkMCwgMCwgezB4ODMsMHgwMCwweDIwLDB4YzAsMHgyOCwweDIwLDB4MDIsMHgwYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkxZTAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDAxLDB4ODUsMHgwMCwweDJkLDB4MDAsMHgwYiwweDcwLDB4MDIsMHgxOCwweDMyLDB4ODYsMHgwMCwweDJkIH19LAorIHsxNiwgMHg5MWYwLCAwLCB7MHhjMCwweDBiLDB4NjAsMHgxNiwweGZlLDB4MDQsMHg4NiwweDAwLDB4MjcsMHhhMCwweDhiLDB4NzAsMHg0MiwweGRjLDB4ODAsMHhiNyB9fSwKKyB7MTYsIDB4OTIwMCwgMCwgezB4ODAsMHgyMSwweDAxLDB4MDgsMHhmOCwweDBhLDB4MTgsMHgwMCwweDg2LDB4MDgsMHgyMCwweGEwLDB4MDgsMHhlOCwweDBhLDB4NjggfX0sCisgezE2LCAweDkyMTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA4LDB4M2UsMHgwMiwweGM2LDB4ODAsMHgzZCwweGUwIH19LAorIHsxNiwgMHg5MjIwLCAwLCB7MHgwZiwweDQ4LDB4MDMsMHgwNiwweDA0LDB4ZjUsMHg4MiwweDM1LDB4ZTAsMHgwZiwweDc4LDB4MDMsMHhkYSwweDAwLDB4ZDMsMHg4MCB9fSwKKyB7MTYsIDB4OTIzMCwgMCwgezB4MzEsMHg2MCwweDA3LDB4NzgsMHgwMywweGRlLDB4MjAsMHhmMywweGIwLDB4ODEsMHhlMCwweDRmLDB4NjgsMHgwNywweDBlLDB4MDIgfX0sCisgezE2LCAweDkyNDAsIDAsIHsweGNmLDB4ODAsMHgzMSwweGUwLDB4MGMsMHg3OCwweDEzLDB4MmEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MjUwLCAwLCB7MHgwOCwweDFkLDB4YWQsMHhhMCwweGY5LDB4MDAsMHgzZiwweDAwLDB4MGYsMHhiMCwweDUzLDB4ZjgsMHgxMCwweGE5LDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4OTI2MCwgMCwgezB4MDAsMHgwZiwweDgwLDB4MDEsMHhlYywweDAwLDB4ZmIsMHgwMiwweDNhLDB4YzAsMHgwYywweGIwLDB4MDMsMHhlYywweDAwLDB4ZmIgfX0sCisgezE2LCAweDkyNzAsIDAsIHsweDc0LDB4M2MsMHgwMCwweDBmLDB4MjAsMHgwMywweGU4LDB4MDAsMHhmYSwweDAwLDB4M2UsMHg4MCwweDBmLDB4MzAsMHgwMywweGMyIH19LAorIHsxNiwgMHg5MjgwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNSwweGZlLDB4MDIsMHg4ZiwweDgwLDB4MzUsMHhlMCB9fSwKKyB7MTYsIDB4OTI5MCwgMCwgezB4OGQsMHhkOSwweDAzLDB4MmUsMHhjNCwweGY2LDB4ODAsMHgzMiwweGE0LDB4MGMsMHhiOCwweDAzLDB4ZGUsMHgwMCwweGNmLDB4OTAgfX0sCisgezE2LCAweDkyYTAsIDAsIHsweDNjLDB4ZTQsMHgwYywweGI4LDB4MDMsMHhmZSwweDY1LDB4ZmYsMHg4MCwweDBmLDB4ZWMsMHg4ZiwweGY4LDB4MDMsMHhmZSwweDAwIH19LAorIHsxNiwgMHg5MmIwLCAwLCB7MHhjNSwweDgwLDB4MzMsMHhlMCwweDBmLDB4NjgsMHgwMywweDEwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTJjMCwgMCwgezB4YWEsMHgxMSwweDljLDB4ODAsMHg4NCwweGIwLDB4MjAsMHgyMCwweDI5LDB4NzMsMHgwYSwweDBlLDB4ODIsMHhhMiwweGEwLDB4YTIgfX0sCisgezE2LCAweDkyZDAsIDAsIHsweGEwLDB4NGYsMHgzYiwweDAzLDB4ODcsMHg4NCwweGIyLDB4ODAsMHgyYywweGEwLDB4MGEsMHg3ZCwweDAyLDB4ZGUsMHg4MCwweGY3IH19LAorIHsxNiwgMHg5MmUwLCAwLCB7MHgyMCwweDI1LDB4MDYsMHgwOCwweDcwLDB4MDIsMHhjOCwweDQwLDB4ODQsMHgwMCwweDM1LDB4ODAsMHgwYiwweDYwLDB4MDMsMHg2YSB9fSwKKyB7MTYsIDB4OTJmMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDEwLDB4ODYsMHgzOCwweDI3LDB4YzAgfX0sCisgezE2LCAweDkzMDAsIDAsIHsweDQ5LDB4NTQsMHgwNiwweDU0LDB4NDAsMHgxZCwweDIwLDB4MjEsMHhjYSwweDA5LDB4NjEsMHg0MCwweGY4LDB4ODAsMHhiNywweDIwIH19LAorIHsxNiwgMHg5MzEwLCAwLCB7MHgyZiwweDAwLDB4ODksMHg3MCwweDEyLDB4ZGMsMHg4MSwweGI3LDB4MDQsMHgyZCwweGM5LDB4MGEsMHg2MCwweDAyLDB4Y2MsMHgwMCB9fSwKKyB7MTYsIDB4OTMyMCwgMCwgezB4OGQsMHgwMCwweDJkLDB4YzAsMHgwYiwweGY4LDB4MDIsMHgwNCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkzMzAsIDAsIHsweDYwLDB4MTQsMHhjZCwweDI4LDB4ODAsMHgwMCwweDI0LDB4MDAsMHgwOSwweGIwLDB4MjIsMHg0YywweDAyLDB4YTEsMHgwMSwweDIwIH19LAorIHsxNiwgMHg5MzQwLCAwLCB7MHgzMCwweDFiLDB4MjMsMHgwMiwweGFmLDB4MjAsMHhiMywweDA4LDB4MmMsMHg4MCwweDFiLDB4MzAsMHgwMCwweGNjLDB4MDQsMHhhMyB9fSwKKyB7MTYsIDB4OTM1MCwgMCwgezB4MDEsMHgyNiwweDMwLDB4MDgsMHhhYywweDIyLDB4ZTgsMHgwMiwweDgwLDB4MDgsMHgyZSwweDgwLDB4NGIsMHhiNCwweDAyLDB4NTggfX0sCisgezE2LCAweDkzNjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmMsMHgxMCwweDhiLDB4ODAsMHgzNiwweGYwIH19LAorIHsxNiwgMHg5MzcwLCAwLCB7MHgyZCwweGJjLDB4MGIsMHg2YywweDAxLDB4ZGEsMHgwNCwweDIyLDB4NDAsMHg3ZCwweDk0LDB4MjIsMHhlNCwweDAwLDB4YWIsMHg0NCB9fSwKKyB7MTYsIDB4OTM4MCwgMCwgezB4MmUsMHhjMCwweDA5LDB4YjgsMHgwMiwweGZjLDB4MDAsMHhiZiwweDAwLDB4M2UsMHhmMCwweGNhLDB4OTIsMHgwMiwweGU0LDB4MDIgfX0sCisgezE2LCAweDkzOTAsIDAsIHsweGNiLDB4MDAsMHg2ZSwweDQwLDB4MGYsMHg4NCwweDAxLDB4MmUsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5M2EwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGZiLDB4MDAsMHgzYSwweGUwLDB4MmUsMHhiYywweDAzLDB4OTgsMHgwOCwweGVhLDB4NDAsMHgzNiB9fSwKKyB7MTYsIDB4OTNiMCwgMCwgezB4NDMsMHg4YywweDkwLDB4MDMsMHhhNCwweDQ0LDB4MmEsMHg0MCwweDNlLDB4MTAsMHgwZSwweGI1LDB4ODMsMHhlYywweDE0LDB4ZmIgfX0sCisgezE2LCAweDkzYzAsIDAsIHsweDAwLDB4MjYsMHgwMCwweDBlLDB4OTIsMHgwMywweGUwLDB4NDAsMHhmYSwweDAwLDB4MTYsMHgwMCwweDBmLDB4ODAsMHgxMywweGUwIH19LAorIHsxNiwgMHg5M2QwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGVjLDB4MDIsMHhmYSwweDgwLDB4M2YsMHhlMiB9fSwKKyB7MTYsIDB4OTNlMCwgMCwgezB4MGYsMHhiMCwweDBiLDB4MjQsMHgwMCwweGVmLDB4OTIsMHhiYiwweGUwLDB4MWMsMHhkMCwweDAzLDB4NzQsMHgwMCwweGNmLDB4MDUgfX0sCisgezE2LCAweDkzZjAsIDAsIHsweDNiLDB4NDAsMHgwZiwweGM4LDB4MDMsMHg1YywweDAwLDB4Y2YsMHgwMCwweDMyLDB4YzIsMHg0ZCwweGMxLDB4MjMsMHgzNCwweDQwIH19LAorIHsxNiwgMHg5NDAwLCAwLCB7MHhjZiwweDAwLDB4MTcsMHg0NCwweDBjLDB4ZDEsMHg4MywweDAwLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTQxMCwgMCwgezB4ODEsMHgwNCwweDZjLDB4MDAsMHg4YiwweDg0LDB4MmUsMHg1NCwweDBiLDB4YmMsMHgwYSwweDI5LDB4ODAsMHg4YiwweDgwLDB4MzIgfX0sCisgezE2LCAweDk0MjAsIDAsIHsweDAwLDB4MDgsMHg5YywweDAzLDB4YTcsMHgwMCwweGFiLDB4ODQsMHgyZSwweDdjLDB4MGIsMHg4MCwweDAyLDB4MmMsMHgxMCwweGRiIH19LAorIHsxNiwgMHg5NDMwLCAwLCB7MHgwMSwweDM2LDB4MDAsMHgwOCwweDgwLDB4MDIsMHgyMCwweDAwLDB4ODIsMHgwMCwweDIyLDB4MDAsMHgwOCwweDkwLDB4MDIsMHgyNCB9fSwKKyB7MTYsIDB4OTQ0MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgwYywweDAwLDB4ODksMHgxMCwweDY2LDB4OTAgfX0sCisgezE2LCAweDk0NTAsIDAsIHsweDBiLDB4YjgsMHgwMiwweDZlLDB4MTIsMHhhMywweDQxLDB4MjAsMHgwNCwweDBhLDB4OTgsMHgyMiwweGUyLDB4MDAsMHg4OSwweDE5IH19LAorIHsxNiwgMHg5NDYwLCAwLCB7MHgyZSwweGMwLDB4NGIsMHgzMSwweDIyLDB4NmMsMHgwOCwweDgzLDB4MDAsMHgyMiwweGMwLDB4MDksMHg5MCwweDAyLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4OTQ3MCwgMCwgezB4ODksMHgwMCwweDJhLDB4NDAsMHgwOCwweDgwLDB4MDIsMHgyMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk0ODAsIDAsIHsweDA4LDB4MTAsMHgwYywweDAwLDB4ODAsMHgyMCwweDJjLDB4MGUsMHgxYiwweDMwLDB4MDIsMHgwNCwweDQxLDB4ODAsMHgyMCwweDIwIH19LAorIHsxNiwgMHg5NDkwLCAwLCB7MHgxMiwweDE4LDB4MTYsMHg0MiwweDAwLDB4NTAsMHhhMCwweDQwLDB4MmMsMHg4OCwweDFiLDB4MzAsMHgwMiwweDBjLDB4ODEsMHg5MyB9fSwKKyB7MTYsIDB4OTRhMCwgMCwgezB4MDAsMHgyNCwweDAwLDB4MDgsMHgxMCwweDJhLDB4MDAsMHgwYSwweDg4LDB4MDAsMHgyOCwweDAwLDB4MjgsMHgwMCwweDBhLDB4MDIgfX0sCisgezE2LCAweDk0YjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBjLDB4N2MsMHgxMSwweGU4LDB4MDAsMHgyNiwweDk4IH19LAorIHsxNiwgMHg5NGMwLCAwLCB7MHgwZiwweGIwLDB4MTMsMHgyMSwweDBjLDB4ZWIsMHg2MCwweDNhLDB4ZDgsMHgyOCwweDg0LDB4YTIsMHhlMSwweDgwLDB4YzgsMHgyMCB9fSwKKyB7MTYsIDB4OTRkMCwgMCwgezB4M2UsMHg1ZSwweDFmLDB4ODIsMHgwMywweDdjLDB4MDAsMHhjZiwweDAwLDB4MzIsMHhjMCwweDRkLDB4ODAsMHgwNywweDI1LDB4MDAgfX0sCisgezE2LCAweDk0ZTAsIDAsIHsweGM5LDB4MDAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDAzLDB4MDAsMHgwMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NGYwLCAwLCB7MHhhMSwweDExLDB4ZmMsMHgwMCwweGY4LDB4MTMsMHgxZSwweDAwLDB4MGIsMHhmMCwweDAxLDB4ZjAsMHhkMCwweGY5LDB4MTksMHgxZiB9fSwKKyB7MTYsIDB4OTUwMCwgMCwgezB4MDgsMHg0ZiwweGMwLDB4MTMsMHhhMSwweDAwLDB4ZjgsMHg2MiwweDNmLDB4YzAsMHgwYiwweGM0LDB4MDcsMHhlZCwweDAwLDB4ZmYgfX0sCisgezE2LCAweDk1MTAsIDAsIHsweDAwLDB4M2YsMHgwMCwweDBmLDB4YzAsMHgyMywweGYwLDB4YTAsMHhmYywweDAwLDB4MzMsMHgwMCwweDBmLDB4ZDAsMHgwMywweGU4IH19LAorIHsxNiwgMHg5NTIwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZjLDB4MDAsMHhmZiwweDBjLDB4M2YsMHgyMCB9fSwKKyB7MTYsIDB4OTUzMCwgMCwgezB4MGMsMHhjOSwweDAzLDB4MzIsMHgwMCwweGNmLDB4MzgsMHgzZiwweGQwLDB4MGYsMHg0OCwweDAzLDB4ZmMsMHhhMCwweGNlLDB4MjIgfX0sCisgezE2LCAweDk1NDAsIDAsIHsweDMzLDB4MDAsMHgwZiwweGMxLDB4MDMsMHgzYywweDAwLDB4ZmYsMHgwMCwweDNkLDB4YzQsMHg0YywweGMwLDB4MjMsMHg4YywweGU0IH19LAorIHsxNiwgMHg5NTUwLCAwLCB7MHhmZiwweDEwLDB4MzcsMHgyMCwweDA4LDB4ZjEsMHgwMywweGYwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTU2MCwgMCwgezB4ODAsMHgxMCwweGZlLDB4MDAsMHhiZiwweDgwLDB4MmUsMHg3NCwweDA1LDB4MjIsMHgwMiwweGEyLDB4MTAsMHhkZiwweDYxLDB4MmYgfX0sCisgezE2LCAweDk1NzAsIDAsIHsweGQwLDB4OGIsMHg5MCwweDAyLDB4M2QsMHhhNCwweGFhLDB4OTAsMHgyMiwweGY0LDB4MGIsMHgwNywweDEyLDB4MWQsMHgyMCwweGJiIH19LAorIHsxNiwgMHg5NTgwLCAwLCB7MHhjMCwweDJmLDB4ZDgsMHg4OCwweDk3LDB4ODIsMHhmZCwweDgwLDB4ZWYsMHg3MiwweDIyLDB4MDgsMHgyOCwweGY2LDB4MjMsMHhlMCB9fSwKKyB7MTYsIDB4OTU5MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDQwLDB4YjMsMHgwMCwweDJjLDB4MDAgfX0sCisgezE2LCAweDk1YTAsIDAsIHsweDA4LDB4ODIsMHgwMiwweDIyLDB4MDAsMHg4MywweDAxLDB4MDgsMHhjYywweDhiLDB4MjAsMHg4MiwweGNjLDB4MDAsMHg5MCwweDAwIH19LAorIHsxNiwgMHg5NWIwLCAwLCB7MHgyMCwweDAwLDB4NGIsMHgxMiwweDAyLDB4MGQsMHg4MCwweGIzLDB4NDAsMHgyYywweGQ4LDB4MDgsMHgyMCwweDQyLDB4OGMsMHg4MCB9fSwKKyB7MTYsIDB4OTVjMCwgMCwgezB4YjMsMHgyMCwweDI2LDB4MDIsMHgxOCwweDMzLDB4MjYsMHhlMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk1ZDAsIDAsIHsweGMwLDB4MTUsMHhhYywweDA5LDB4YmIsMHgwMCwweDJlLDB4NjAsMHgwOCwweDgwLDB4MDIsMHhhMiwweDAwLDB4OWIsMHgwMCwweDJlIH19LAorIHsxNiwgMHg5NWUwLCAwLCB7MHhjMCwweDBiLDB4YWMsMHgwMiwweDJjLDB4MDAsMHhiYSwweDA2LDB4MjIsMHhjMiwweDBiLDB4OTQsMHgwMiwweGFjLDB4MTAsMHhiYiB9fSwKKyB7MTYsIDB4OTVmMCwgMCwgezB4MDAsMHgyZSwweGMxLDB4MDgsMHhhOCwweDAyLDB4ZWMsMHgwMCwweGFiLDB4MDAsMHgyMiwweDAwLDB4MDgsMHhiMCwweDA2LDB4ZjAgfX0sCisgezE2LCAweDk2MDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MCwweDE1LDB4ZWMsMHgwMCwweGZiLDB4MDQsMHgzZSwweDYwIH19LAorIHsxNiwgMHg5NjEwLCAwLCB7MHgyOCwweDgyLDB4MTMsMHgwZSwweDA4LDB4Y2IsMHgwMCwweDNhLDB4YzAsMHgwZiwweDhjLDB4MDMsMHhlYywweDExLDB4ZGIsMHgyMCB9fSwKKyB7MTYsIDB4OTYyMCwgMCwgezB4YjIsMHg5MCwweDRiLDB4YTgsMHgwYiwweDJjLDB4MDAsMHhiYiwweDAwLDB4MmMsMHhjMCwweDBjLDB4ODgsMHgxMywweGFjLDB4MDAgfX0sCisgezE2LCAweDk2MzAsIDAsIHsweGYzLDB4MDAsMHgzNiwweDA2LDB4NDgsMHhiMCwweDEyLDB4YzQsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NjQwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwMCwweGZiLDB4MDgsMHgzZCwweDQwLDB4OGYsMHhlYSwweDAxLDB4ZjQsMHgwMCwweGZmLDB4MDEsMHgyZiB9fSwKKyB7MTYsIDB4OTY1MCwgMCwgezB4YzAsMHgwZiwweGQwLDB4MjIsMHhmYywweDA0LDB4YWYsMHgwMCwweDNmLDB4YzAsMHg4ZiwweGU5LDB4MDMsMHg3YywweDAwLDB4ZmYgfX0sCisgezE2LCAweDk2NjAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDBmLDB4OTAsMHg0MywweGZjLDB4MjAsMHhlZiwweDAyLDB4M2YsMHgwMCwweDhmLDB4ZjAsMHgwMywweGI4IH19LAorIHsxNiwgMHg5NjcwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NTAsMHgxMCwweGFjLDB4MDgsMHhlYiwweDAwLDB4MTIsMHg0MCB9fSwKKyB7MTYsIDB4OTY4MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4MjgsMHgyMCwweGFiLDB4MDAsMHgzYSwweGMwLDB4OGYsMHg4NSwweDgzLDB4YWMsMHgxMCwweGYzLDB4NTAgfX0sCisgezE2LCAweDk2OTAsIDAsIHsweDMyLDB4OTAsMHg0YywweDM0LDB4MTMsMHg2YywweDAwLDB4ZmIsMHgwMCwweDNlLDB4YzAsMHgwYywweDk4LDB4MDMsMHgyYywweDQwIH19LAorIHsxNiwgMHg5NmEwLCAwLCB7MHhlYiwweDgwLDB4MzIsMHgxMiwweDBkLDB4YjAsMHgwYiwweDUwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTZiMCwgMCwgezB4ODgsMHgwMSwweDNjLDB4MTAsMHgwZiwweDA1LDB4YTIsMHg1MCwweDBjLDB4MTAsMHgwMiwweDIyLDB4MTAsMHg4ZiwweDAwLDB4MjMgfX0sCisgezE2LCAweDk2YzAsIDAsIHsweGMwLDB4MGIsMHg4OCwweDEyLDB4M2MsMHgwMCwweDliLDB4ODIsMHgyMiwweGMwLDB4MDgsMHhiMCwweDAyLDB4M2MsMHgwMCwweDhmIH19LAorIHsxNiwgMHg5NmQwLCAwLCB7MHhhMCwweDJmLDB4YzAsMHgwOCwweGIwLDB4MDIsMHgzYywweDA4LDB4OGYsMHgwMiwweDIwLDB4MDAsMHgwOCwweGYwLDB4MDMsMHgyNiB9fSwKKyB7MTYsIDB4OTZlMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0ZCwweDIwLDB4OTMsMHgwMCwweDIwLDB4YjIgfX0sCisgezE2LCAweDk2ZjAsIDAsIHsweDBiLDB4MTAsMHgwMiwweDAxLDB4MDAsMHhhMywweDAwLDB4NjgsMHhjMCwweDBiLDB4ODQsMHgwMiwweGFjLDB4MDAsMHhiMywweDgwIH19LAorIHsxNiwgMHg5NzAwLCAwLCB7MHgyMCwweDQwLDB4MGEsMHgzMCwweDAyLDB4NGMsMHgwMCwweGEzLDB4MDQsMHgyYywweGMwLDB4MDgsMHgwMCwweDAyLDB4MGQsMHgwMCB9fSwKKyB7MTYsIDB4OTcxMCwgMCwgezB4YTMsMHgwMCwweDIwLDB4MjQsMHgwOCwweDMwLDB4MDIsMHgzOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk3MjAsIDAsIHsweDcwLDB4MDEsMHgxYywweDIwLDB4OTcsMHg4MCwweDIzLDB4NjAsMHgwOCwweDc4LDB4MTIsMHgzYSwweDAwLDB4ODMsMHg5MSwweDI5IH19LAorIHsxNiwgMHg5NzMwLCAwLCB7MHhlNCwweDBiLDB4NTksMHgwMiwweDFlLDB4MDAsMHg5NywweDkwLDB4MjAsMHhmYywweDBhLDB4NzgsMHgwMiwweDFlLDB4MDAsMHg4NyB9fSwKKyB7MTYsIDB4OTc0MCwgMCwgezB4OTAsMHgyZCwweGUwLDB4MTksMHg1OSwweDAyLDB4MWUsMHg4MCwweDgzLDB4ODAsMHg2MSwweGEwLDB4MDgsMHg3OCwweDAyLDB4MTggfX0sCisgezE2LCAweDk3NTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHg0MCwweGQzLDB4MzIsMHgzMCwweDA2IH19LAorIHsxNiwgMHg5NzYwLCAwLCB7MHgwZiwweDMwLDB4MDMsMHgwNCwweDY0LDB4ZTMsMHgwMSwweDM4LDB4YzQsMHgxZiwweDMwLDB4MDcsMHg4YywweDE4LDB4ZjEsMHgwMCB9fSwKKyB7MTYsIDB4OTc3MCwgMCwgezB4MzAsMHg0YywweDBlLDB4MzAsMHgwMywweDRjLDB4MDAsMHhlMywweDAwLDB4MmMsMHhjMCwweDBjLDB4MjAsMHgwMywweDBlLDB4MDAgfX0sCisgezE2LCAweDk3ODAsIDAsIHsweGUzLDB4MDAsMHgzMiwweDA4LDB4MGMsMHhiMSwweDAzLDB4MTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NzkwLCAwLCB7MHg0MCwweDFkLDB4OWMsMHg4MCwweGVmLDB4MTAsMHgzZCwweDQ0LDB4NGYsMHhmMSwweDA3LDB4Y2MsMHgwMCwweGZmLDB4MDgsMHgzNiB9fSwKKyB7MTYsIDB4OTdhMCwgMCwgezB4YzYsMHhjZiwweGIwLDB4MDMsMHhmYywweDAwLDB4OTcsMHgwMCwweGJlLDB4Y2MsMHgwZCwweGIxLDB4MDMsMHhmZCwweDA0LDB4ZmYgfX0sCisgezE2LCAweDk3YjAsIDAsIHsweDBjLDB4M2YsMHhkMiwweDllLDB4ZTAsMHg0YiwweGZkLDB4MjAsMHhmZiwweDAyLDB4M2YsMHg4MCwweDBlLDB4ZjAsMHgxMywweGQwIH19LAorIHsxNiwgMHg5N2MwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGVjLDB4YzAsMHhjYiwweDI4LDB4M2UsMHhjMCB9fSwKKyB7MTYsIDB4OTdkMCwgMCwgezB4MGYsMHg4MCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDEsMHgzMiwweGU5LDB4MGMsMHgyOCwweDAzLDB4MmMsMHgwMCwweGZiLDB4MDAgfX0sCisgezE2LCAweDk3ZTAsIDAsIHsweDMyLDB4YzAsMHgwYywweGI0LDB4ODMsMHgyYywweDAxLDB4ZWYsMHgwMCwweGIyLDB4YzgsMHgwYywweDIwLDB4MDMsMHg2ZCwweDAwIH19LAorIHsxNiwgMHg5N2YwLCAwLCB7MHhjYiwweDEwLDB4M2UsMHgwMCwweDBmLDB4YjIsMHgwMywweGVhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTgwMCwgMCwgezB4YzgsMHg5MSwweDljLDB4YzQsMHg4NywweDYwLDB4MmQsMHhjMCwweDBiLDB4NjAsMHgwMiwweGRjLDB4MDAsMHhiNywweDEyLDB4MjAgfX0sCisgezE2LCAweDk4MTAsIDAsIHsweGNjLDB4MGEsMHg3MCwweDAyLDB4MWMsMHhjMCwweGIzLDB4MDAsMHhhMCwweGMwLDB4YzgsMHg3MCwweDIyLDB4MWMsMHg4MCwweGI3IH19LAorIHsxNiwgMHg5ODIwLCAwLCB7MHgyNCwweDIxLDB4YzgsMHg0OCwweDUwLDB4MDIsMHgwYywweDgwLDB4ODcsMHgxMCwweDJkLDB4NDAsMHgwYiwweDcyLDB4ODIsMHhmMiB9fSwKKyB7MTYsIDB4OTgzMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDAsMHg4ZSwweDAyLDB4ODcsMHg4MCwweDJkLDB4ZTAgfX0sCisgezE2LCAweDk4NDAsIDAsIHsweDBiLDB4NzgsMHgxMiwweGRlLDB4MDAsMHhiNywweGEwLDB4MjEsMHhlMCwweDA4LDB4ZjgsMHg4ZSwweDFlLDB4NDAsMHhiNywweDg4IH19LAorIHsxNiwgMHg5ODUwLCAwLCB7MHgyMSwweGUwLDB4MDgsMHgzOCwweDAyLDB4MWUsMHg0MCwweGIzLDB4YTEsMHgyMCwweGU4LDB4NDgsMHhmOCwweDgyLDB4NWUsMHgwMiB9fSwKKyB7MTYsIDB4OTg2MCwgMCwgezB4ODcsMHg4MCwweDJkLDB4MjIsMHgwYiwweDc5LDB4MDIsMHhlMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk4NzAsIDAsIHsweDA4LDB4MDQsMHhjYywweDA0LDB4ODMsMHgwMiwweDJjLDB4ZDQsMHgwYiwweDMwLDB4MDIsMHhjYywweDAwLDB4YjMsMHgwMCwweGEwIH19LAorIHsxNiwgMHg5ODgwLCAwLCB7MHhjMCwweDhhLDB4MzgsMHgwNiwweDBjLDB4MDAsMHhiMywweDgwLDB4MjAsMHhlMSwweDQ4LDB4MzksMHgxMiwweDJjLDB4MDAsMHhiMyB9fSwKKyB7MTYsIDB4OTg5MCwgMCwgezB4MDAsMHgyMiwweGMwLDB4MDgsMHhiMCwweDgyLDB4NmMsMHgwMCwweDgzLDB4MDAsMHgyYywweDQ4LDB4MGIsMHgzMCwweDAyLDB4YzIgfX0sCisgezE2LCAweDk4YTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDA1LDB4YTgsMHgwMCwweGNhLDB4MDAsMHgzZiwweGEwIH19LAorIHsxNiwgMHg5OGIwLCAwLCB7MHgwZiwweGU0LDB4MDMsMHhkOCwweDAwLDB4ZmEsMHgwMCwweDMyLDB4ODAsMHgwYywweGU4LDB4MDMsMHgyOCwweDAwLDB4ZmEsMHg0MCB9fSwKKyB7MTYsIDB4OThjMCwgMCwgezB4MzIsMHhhOCwweDJjLDB4YTAsMHgwOSwweDI4LDB4MDgsMHhmMiwweDAwLDB4MzIsMHg4MCwweDBjLDB4ZTQsMHgwMywweDY4LDB4MDAgfX0sCisgezE2LCAweDk4ZDAsIDAsIHsweGNhLDB4MDAsMHgzZiwweDgwLDB4MGYsMHhhMCwweDAzLDB4ZmIsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5OGUwLCAwLCB7MHg0OCwweDAwLDB4YzAsMHgwMCwweGY4LDB4MDEsMHgzZSwweDEyLDB4MGIsMHg4MCwweDAzLDB4ZTAsMHg0MCwweGY4LDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4OThmMCwgMCwgezB4MDAsMHg0ZiwweDg0LDB4MDMsMHhlMCwweDA0LDB4ZjAsMHgwOCwweDNlLDB4MDAsMHg0ZiwweDAwLDB4MDMsMHhlMCwweDAwLDB4ZjggfX0sCisgezE2LCAweDk5MDAsIDAsIHsweDQxLDB4M2UsMHgwMCwweDJmLDB4ODQsMHgwMywweGEwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyIH19LAorIHsxNiwgMHg5OTEwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGU2LDB4MDAsMHhjOSwweDEyLDB4M2UsMHg1MCB9fSwKKyB7MTYsIDB4OTkyMCwgMCwgezB4OGYsMHg5MCwweDgzLDB4ZTQsMHgyMCwweGMxLDB4MDAsMHgzYSwweDQxLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAgfX0sCisgezE2LCAweDk5MzAsIDAsIHsweDMwLDB4NjgsMHgwYywweDkwLDB4MDMsMHgyNCwweDAwLDB4ZDksMHgwMCwweDNhLDB4NDAsMHgwZSwweDk4LDB4MDMsMHgyNCwweDAwIH19LAorIHsxNiwgMHg5OTQwLCAwLCB7MHhjOSwweDkwLDB4M2UsMHg2OSwweDBjLDB4MTAsMHgwMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTk1MCwgMCwgezB4ODAsMHgwNCwweDY3LDB4NGEsMHg4OSwweDgwLDB4MmUsMHg1MCwweDBiLDB4OTAsMHgwMiwweGU0LDB4ODAsMHhhOSwweDAwLDB4MjIgfX0sCisgezE2LCAweDk5NjAsIDAsIHsweDQwLDB4MGIsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDEsMHgyMiwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgxMCwweDg5IH19LAorIHsxNiwgMHg5OTcwLCAwLCB7MHgwMCwweDIyLDB4NDAsMHgwOCwweDkzLDB4MDIsMHgyNCwweDIyLDB4ODksMHg0MiwweDJjLDB4NjAsMHg0OCwweDkwLDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4OTk4MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHgyNCwweDAwLDB4OTksMHgwMCwweDJlLDB4NDAgfX0sCisgezE2LCAweDk5OTAsIDAsIHsweDBiLDB4OTAsMHgwMiwweGU0LDB4MDAsMHg4OSwweDAwLDB4MmEsMHg0MCwweDBiLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiOSwweDAwIH19LAorIHsxNiwgMHg5OWEwLCAwLCB7MHgyMywweDQwLDB4MDgsMHhkMCwweDAyLDB4MjQsMHgwMCwweDk5LDB4MDAsMHgyYSwweDQwLDB4MGEsMHg5MCwweDA2LDB4MjQsMHg0MCB9fSwKKyB7MTYsIDB4OTliMCwgMCwgezB4ODksMHg0MSwweDJlLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk5YzAsIDAsIHsweDA4LDB4MDQsMHgwYywweDgwLDB4OTEsMHgyMCwweDJjLDB4NDgsMHgwYiwweDEwLDB4MDIsMHhjNCwweDAwLDB4YTEsMHgyMCwweDIwIH19LAorIHsxNiwgMHg5OWQwLCAwLCB7MHg0OCwweDBiLDB4MTAsMHgwMiwweGM0LDB4ODAsMHhiMSwweDIwLDB4YTEsMHg0OSwweDA4LDB4NTIsMHg0YSwweDA0LDB4ODAsMHg4MSB9fSwKKyB7MTYsIDB4OTllMCwgMCwgezB4MDAsMHgyMCwweDQ4LDB4NDgsMHgxMiwweDBhLDB4MDQsMHg4MCwweDgxLDB4MjAsMHgyYywweDQwLDB4MjgsMHgxMiwweDAyLDB4MDIgfX0sCisgezE2LCAweDk5ZjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwOCwweGQ4LDB4MDQsMHgzZSwweDgwIH19LAorIHsxNiwgMHg5YTAwLCAwLCB7MHgwZiwweDg1LDB4MDMsMHhlMCwweDAwLDB4YzAsMHg1MCwweDNhLDB4MTQsMHgwZiwweGE1LDB4MDMsMHhlMSwweDQwLDB4ZjgsMHgwMiB9fSwKKyB7MTYsIDB4OWExMCwgMCwgezB4MzIsMHg4MCwweDJjLDB4YzUsMHgwMywweDIxLDB4NDAsMHhkYSwweDAwLDB4M2EsMHgxNCwweDBlLDB4ODUsMHg0MywweDIxLDB4NDAgfX0sCisgezE2LCAweDlhMjAsIDAsIHsweGM4LDB4NTIsMHgzZSwweDE0LDB4MGMsMHg4NSwweDBiLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5YTMwLCAwLCB7MHg4OCwweDFkLDB4ZTQsMHg0NCwweGU5LDB4MTAsMHgzZiwweDQ0LDB4NGYsMHhkMCwweDAyLDB4ZmMsMHgwMCwweGY5LDB4MTIsMHgzZSB9fSwKKyB7MTYsIDB4OWE0MCwgMCwgezB4NDQsMHgwZiwweGQwLDB4MDMsMHhlNCwweDQwLDB4ZmQsMHgxMCwweDNlLDB4NDQsMHg0ZiwweDkxLDB4MDMsMHhlNCwweDQwLDB4ZTkgfX0sCisgezE2LCAweDlhNTAsIDAsIHsweDQwLDB4M2UsMHg0NCwweDBmLDB4ZDEsMHgwMywweGU0LDB4NDAsMHhmOSwweDEyLDB4M2YsMHg0MCwweDBmLDB4OTEsMHgwMywweGU2IH19LAorIHsxNiwgMHg5YTYwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGY2LDB4YTAsMHhmZCwweDgwLDB4YjMsMHg0MCB9fSwKKyB7MTYsIDB4OWE3MCwgMCwgezB4MGMsMHgxMCwweDAzLDB4MTQsMHgwMCwweGZkLDB4YTAsMHgzMiwweDQwLDB4MGYsMHhkMSwweDAzLDB4ZTQsMHgwMCwweGY1LDB4ODYgfX0sCisgezE2LCAweDlhODAsIDAsIHsweDMzLDB4NjAsMHgyYywweDlhLDB4ODMsMHgyNCwweDA0LDB4ZmQsMHhhOCwweDIyLDB4NDAsMHgwZCwweDUwLDB4NDMsMHhmNCwweDAwIH19LAorIHsxNiwgMHg5YTkwLCAwLCB7MHhmZCwweDAwLDB4MzMsMHg0MCwweDBmLDB4OTAsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWFhMCwgMCwgezB4NzgsMHgxMCwweGUxLDB4MDAsMHhiOCwweDAwLDB4MjIsMHgwMCwweDI4LDB4ODAsMHgwMiwweDIwLDB4MDAsMHhiOCwweDAwLDB4YTIgfX0sCisgezE2LCAweDlhYjAsIDAsIHsweDAwLDB4MGIsMHg4YSwweDEyLDB4ZTAsMHgwMCwweGI4LDB4MDQsMHgyMiwweDE0LDB4MDgsMHg4NCwweDAyLDB4MjAsMHgwMCwweGI4IH19LAorIHsxNiwgMHg5YWMwLCAwLCB7MHg0MCwweDIwLDB4MDAsMHg4OCwweDgwLDB4MDIsMHhlMCwweDAwLDB4YjgsMHgwMCwweGEyLDB4MDAsMHgwYiwweDgwLDB4MDIsMHgwZSB9fSwKKyB7MTYsIDB4OWFkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDUsMHhjNCwweDAwLDB4YjEsMHg0MiwweDIwLDB4NDAgfX0sCisgezE2LCAweDlhZTAsIDAsIHsweDA4LDB4MTAsMHgwMiwweDA0LDB4MDAsMHhiMSwweDQwLDB4MjAsMHg0MCwweDBiLDB4MTAsMHgwNiwweGM0LDB4MDAsMHhiMSwweDQwIH19LAorIHsxNiwgMHg5YWYwLCAwLCB7MHgyNCwweDQwLDB4MDgsMHgxMCwweDAyLDB4NDQsMHgwNCwweGIxLDB4MDAsMHg2MCwweDQwLDB4MDksMHgxMCwweDAyLDB4YzQsMHgwMCB9fSwKKyB7MTYsIDB4OWIwMCwgMCwgezB4YjEsMHgwMCwweDIwLDB4NDAsMHgwYiwweDEwLDB4MDIsMHgxMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDliMTAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAwLDB4YjksMHgwMiwweDIyLDB4NjAsMHgwOCwweDk0LDB4MDIsMHgyNCwweDAwLDB4YjksMHgwMSwweDIyIH19LAorIHsxNiwgMHg5YjIwLCAwLCB7MHg0MCwweDBiLDB4OTAsMHgwNiwweGU0LDB4MDAsMHhiOSwweDIwLDB4MjYsMHg0MCwweDA4LDB4OTQsMHgwMiwweDY0LDB4MDgsMHhiOSB9fSwKKyB7MTYsIDB4OWIzMCwgMCwgezB4MDAsMHgyMiwweDQwLDB4MDgsMHg5MiwweDAyLDB4ZWMsMHgwOCwweGI5LDB4MDQsMHgyMiwweDQxLDB4MGIsMHgxMCwweDAyLDB4MDYgfX0sCisgezE2LCAweDliNDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgxMCwweGYxLDB4MDAsMHgzMiwweDYwIH19LAorIHsxNiwgMHg5YjUwLCAwLCB7MHgwYywweDk0LDB4MGIsMHgyNSwweDAwLDB4ZjksMHgwMCwweDMyLDB4NDAsMHg4ZiwweDk0LDB4ZDMsMHhlNCwweDAwLDB4ZjksMHgwMCB9fSwKKyB7MTYsIDB4OWI2MCwgMCwgezB4MzYsMHg0MCwweDRjLDB4OTAsMHgwYiwweDY0LDB4MDAsMHhmMSwweDAwLDB4MzIsMHg0MCwweDBkLDB4OTIsMHgxMiwweGU0LDB4MDAgfX0sCisgezE2LCAweDliNzAsIDAsIHsweGY5LDB4MDAsMHgzMiwweDQwLDB4MGYsMHg5MCwweDBiLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5YjgwLCAwLCB7MHg2OCwweDQxLDB4YTQsMHgwMCwweGY5LDB4MDAsMHgzYywweDQwLDB4OGYsMHg5MiwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4OWI5MCwgMCwgezB4NDAsMHgwZiwweDljLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweGJhLDB4NDAsMHgyZiwweDkwLDB4MjMsMHhhNCwweDAwLDB4ZjkgfX0sCisgezE2LCAweDliYTAsIDAsIHsweDA4LDB4YmUsMHg0MCwweGNmLDB4OTAsMHgwMywweGU0LDB4MTAsMHhmMSwweDAxLDB4M2UsMHg0MSwweDBmLDB4OTAsMHgwMywweGRhIH19LAorIHsxNiwgMHg5YmIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4YzgsMHhmOCwweDAwLDB4M2UsMHgwMyB9fSwKKyB7MTYsIDB4OWJjMCwgMCwgezB4MGMsMHg4NCwweDAzLDB4YTEsMHgxMCwweGU4LDB4MDAsMHgzMiwweDAwLDB4OGMsMHg4NSwweDgzLDB4ZTAsMHgwMCwweGMwLDB4MDAgfX0sCisgezE2LCAweDliZDAsIDAsIHsweDM4LDB4MGMsMHgyYywweDAwLDB4MDMsMHg2MCwweDAwLDB4YzgsMHgwMCwweDNjLDB4MDAsMHgwZCwweDgwLDB4MDIsMHgyMCwweDEwIH19LAorIHsxNiwgMHg5YmUwLCAwLCB7MHhjOCwweDIwLDB4YjIsMHgwMiwweDBmLDB4ODAsMHgwMywweGNhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWJmMCwgMCwgezB4MjgsMHgwNSwweDM5LDB4MTAsMHhiZSwweDA0LDB4NmYsMHhhMCwweDA4LDB4YTAsMHgwMiwweDNhLDB4MDAsMHg4MiwweDAwLDB4YTIgfX0sCisgezE2LCAweDljMDAsIDAsIHsweDgwLDB4OGQsMHhlYywweDAzLDB4YTgsMHgwMCwweDhhLDB4MDAsMHgyMywweDgwLDB4MDgsMHhhMCwweDIyLDB4MjgsMHgwMCwweDhlIH19LAorIHsxNiwgMHg5YzEwLCAwLCB7MHhjYywweDJmLDB4ODAsMHgwOCwweGU4LDB4YzIsMHhiOCwweDAwLDB4OGUsMHg2MCwweDIzLDB4OTAsMHgwYiwweGEwLDB4MDIsMHhjYSB9fSwKKyB7MTYsIDB4OWMyMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0ZSwweDA4LDB4YjAsMHg3MiwweDJjLDB4ZDAgfX0sCisgezE2LCAweDljMzAsIDAsIHsweDI4LDB4YjAsMHgwNiwweDhjLDB4MDEsMHhhMSwweDAyLDB4MjAsMHhjMCwweDA4LDB4MzgsMHgwMiwweGNjLDB4MDAsMHg4MywweDAwIH19LAorIHsxNiwgMHg5YzQwLCAwLCB7MHgyMCwweGMwLDB4MjksMHgzMCwweDAyLDB4NGMsMHgwMCwweDgxLDB4MDAsMHgyYywweGMwLDB4MDgsMHgzMiwweDAyLDB4MGMsMHg0MCB9fSwKKyB7MTYsIDB4OWM1MCwgMCwgezB4ODMsMHgwMCwweDIwLDB4ZjQsMHgwYiwweDMwLDB4MDIsMHhjYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDljNjAsIDAsIHsweGEwLDB4MDEsMHgxYywweDAwLDB4YjQsMHgwMCwweDJkLDB4ZDAsMHg0OCwweGYyLDB4MDIsMHgxZSwweDIxLDB4ODUsMHgyMCwweDIwIH19LAorIHsxNiwgMHg5YzcwLCAwLCB7MHhlOCwweDA5LDB4NzIsMHgwMiwweDhlLDB4ODAsMHg4ZiwweDAxLDB4MjAsMHhjMCwweDA5LDB4NzIsMHgwMiwweDBlLDB4ODAsMHg4NyB9fSwKKyB7MTYsIDB4OWM4MCwgMCwgezB4MDAsMHgyZCwweGNjLDB4MTgsMHg1OCwweDAyLDB4OGUsMHgwMCwweDg1LDB4MDAsMHgyMSwweGMwLDB4MGIsMHg3MiwweDAyLDB4ZTggfX0sCisgezE2LCAweDljOTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgwMCwweGI0LDB4ODAsMHgyZCwweGUwIH19LAorIHsxNiwgMHg5Y2EwLCAwLCB7MHgwYywweDc4LDB4ODMsMHg5YSwweDAwLDB4ZWQsMHhkMCwweDMxLDB4ZjQsMHgwYywweDZhLDB4MDMsMHhkZSwweDgyLDB4YzcsMHg4MCB9fSwKKyB7MTYsIDB4OWNiMCwgMCwgezB4MzksMHhlMCwweDBkLDB4ZjgsMHg4MywweDVlLDB4YzIsMHhjNSwweDgwLDB4M2QsMHhlOCwweDBjLDB4NjgsMHgwMywweDEyLDB4MDAgfX0sCisgezE2LCAweDljYzAsIDAsIHsweGNmLDB4ODAsMHgzMSwweGUwLDB4MGYsMHg3ZSwweDgzLDB4ZWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5Y2QwLCAwLCB7MHgwOCwweDBkLDB4YWMsMHgwOCwweGY4LDB4MDAsMHgzYywweGMwLDB4MGYsMHhiMywweDAzLDB4ZWMsMHgwMCwweGY5LDB4MDIsMHgzZSB9fSwKKyB7MTYsIDB4OWNlMCwgMCwgezB4YzgsMHgwZiwweGIwLDB4MDMsMHhlZCwweDQwLDB4ZmIsMHgwMCwweGJlLDB4ODAsMHgwZSwweGIzLDB4MDMsMHhlZCwweGMwLDB4ZmIgfX0sCisgezE2LCAweDljZjAsIDAsIHsweDAwLDB4M2UsMHhkMiwweDJlLDB4ODAsMHgwMywweGVjLDB4MDIsMHhmOSwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGMyIH19LAorIHsxNiwgMHg5ZDAwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZlLDB4MDAsMHhmMCwweDkxLDB4MzMsMHhlMCB9fSwKKyB7MTYsIDB4OWQxMCwgMCwgezB4OGYsMHhmOCwweDAzLDB4ZmUsMHgwMCwweGZkLDB4ODAsMHgzZiwweGUwLDB4MGMsMHg3OCwweDgzLDB4M2YsMHgwMCwweGNmLDB4ODAgfX0sCisgezE2LCAweDlkMjAsIDAsIHsweDNmLDB4YTAsMHgwYywweGY4LDB4MDMsMHgzZSwweDAwLDB4Y2QsMHg4MCwweDNmLDB4ZTAsMHgwZiwweGY4LDB4MTMsMHhmZSwweDEwIH19LAorIHsxNiwgMHg5ZDMwLCAwLCB7MHhmZiwweDgwLDB4M2YsMHgyMCwweDBmLDB4ZjksMHg0MywweGQwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWQ0MCwgMCwgezB4YTgsMHgxMSwweDljLDB4MDAsMHhiNCwweGMxLDB4MzEsMHhjMCwweDBiLDB4NzAsMHgwMiwweGQ0LDB4MTAsMHhlNSwweDIwLDB4MmYgfX0sCisgezE2LCAweDlkNTAsIDAsIHsweGM4LDB4MGYsMHg0MCwweDAzLDB4NWMsMHgwMCwweDg3LDB4MDAsMHgyZCwweDgwLDB4MDgsMHg3MCwweDAyLDB4MWMsMHg0MCwweDg3IH19LAorIHsxNiwgMHg5ZDYwLCAwLCB7MHgxMCwweDJkLDB4YzAsMHgwYiwweDc2LDB4MDIsMHhkYywweDgwLDB4YjcsMHgwMCwweDJkLDB4YzAsMHgwYiwweDcwLDB4MDIsMHhlYSB9fSwKKyB7MTYsIDB4OWQ3MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDAsMHg5YywweDAwLDB4YjYsMHgyMiwweDIxLDB4ZDAgfX0sCisgezE2LCAweDlkODAsIDAsIHsweDBiLDB4NzAsMHg4MiwweGQ4LDB4NDAsMHhiNSwweDAyLDB4MmQsMHhjMCwweDg4LDB4NjUsMHgwMiwweDBjLDB4MDAsMHg4NywweDE4IH19LAorIHsxNiwgMHg5ZDkwLCAwLCB7MHgyYywweDA0LDB4MDgsMHgzMCwweDAyLDB4OGMsMHgwMiwweDg1LDB4MDAsMHgyZCwweGMwLDB4MGIsMHg3MCwweDQ2LDB4OTAsMHgxMCB9fSwKKyB7MTYsIDB4OWRhMCwgMCwgezB4YjYsMHgwMCwweDJkLDB4MDAsMHgwYiwweDcwLDB4MjIsMHhjNCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDlkYjAsIDAsIHsweDYwLDB4MTQsMHhjYywweDA4LDB4YjIsMHgwMCwweGE0LDB4YzAsMHgwYiwweDMwLDB4NDIsMHhjNiwweDEwLDB4YTEsMHgwMCwweDJjIH19LAorIHsxNiwgMHg5ZGMwLCAwLCB7MHhjMCwweDBhLDB4MDAsMHgwMiwweDRjLDB4MDAsMHg4MywweDAwLDB4MmMsMHgwOCwweDA4LDB4MzAsMHgwMiwweDhjLDB4MDAsMHg4MyB9fSwKKyB7MTYsIDB4OWRkMCwgMCwgezB4MDAsMHgyYywweGMwLDB4MGIsMHgxOCwweDgyLDB4YzQsMHgwMCwweGIwLDB4MDAsMHgyYywweDQwLDB4MGIsMHgzMCwweDEyLDB4ZDggfX0sCisgezE2LCAweDlkZTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmOCwweDE1LDB4YWMsMHgwMCwweDM4LDB4MDAsMHgzMiwweDUwIH19LAorIHsxNiwgMHg5ZGYwLCAwLCB7MHgwZiwweGYwLDB4MDMsMHhlNiwweDIwLDB4ZmQsMHgwMCwweDNmLDB4YzAsMHgwOCwweGQwLDB4MDIsMHgzYywweDAyLDB4Y2IsMHg4MCB9fSwKKyB7MTYsIDB4OWUwMCwgMCwgezB4M2MsMHg1MCwweDJjLDB4ZjAsMHgwYSwweGJjLDB4MDAsMHhjOSwweDAwLDB4M2YsMHhjMCwweDBmLDB4YmUsMHgwMywweGFjLDB4MDAgfX0sCisgezE2LCAweDllMTAsIDAsIHsweGZhLDB4MDIsMHgyZSwweGY3LDB4NGYsMHhmMCwweDAzLDB4ZWUsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ZTIwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGYxLDB4MDAsMHgzYSwweGYwLDB4MGYsMHhiMCwweDAzLDB4ZTksMHgwMCwweGY5LDB4MDEsMHgzZSB9fSwKKyB7MTYsIDB4OWUzMCwgMCwgezB4YzAsMHgwZiwweDkwLDB4MTMsMHhlYywweDAwLDB4ZjksMHgwMCwweDNlLDB4NTUsMHgwZiwweGIwLDB4MDEsMHg2YywweDAwLDB4ZmIgfX0sCisgezE2LCAweDllNDAsIDAsIHsweDAyLDB4M2UsMHhjMCwweDBmLDB4OTAsMHg3MywweGUwLDB4MDAsMHhmOCwweDQxLDB4M2UsMHgwMCwweDBmLDB4MzAsMHgwMSwweGUwIH19LAorIHsxNiwgMHg5ZTUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweGZjLDB4MDAsMHhmYywweDAwLDB4MzMsMHhjMCB9fSwKKyB7MTYsIDB4OWU2MCwgMCwgezB4MWYsMHhmMCwweDEzLDB4ZjAsMHgwOCwweGZkLDB4MDIsMHgzZiwweGMwLDB4OGQsMHhjMCwweDAzLDB4M2MsMHgwMCwweGNmLDB4YTAgfX0sCisgezE2LCAweDllNzAsIDAsIHsweDNmLDB4ODAsMHgwYywweDcwLDB4MDMsMHgzYywweDEwLDB4ZmMsMHgwMCwweDM3LDB4YzAsMHgwZiwweGUwLDB4MDMsMHhiMCwweDAwIH19LAorIHsxNiwgMHg5ZTgwLCAwLCB7MHhmZSwweDAwLDB4M2YsMHhjMCwweDBjLDB4ZjAsMHgwMywweDA0LDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWU5MCwgMCwgezB4ODQsMHgwNCwweDZlLDB4MDAsMHhiOSwweGMyLDB4YTIsMHhmMCwweDBiLDB4YjAsMHg0MiwweGViLDB4MDAsMHhiOSwweDAwLDB4MmUgfX0sCisgezE2LCAweDllYTAsIDAsIHsweGMwLDB4MGYsMHgxOCwweDAzLDB4NmMsMHgwMCwweGQ5LDB4ODEsMHgyZSwweGIwLDB4MGEsMHhiMCwweDQyLDB4MmMsMHgwMCwweGJhIH19LAorIHsxNiwgMHg5ZWIwLCAwLCB7MHhjNiwweDJlLDB4YzAsMHgwYiwweDhjLDB4MDIsMHhlMywweDAwLDB4YjgsMHhjMCwweDNjLDB4YTAsMHgwZCwweGIwLDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4OWVjMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyZiwweDAwLDB4YjgsMHg4MCwweDIyLDB4ZTIgfX0sCisgezE2LCAweDllZDAsIDAsIHsweDBiLDB4YjAsMHgwMiwweGU2LDB4MjAsMHhiOSwweDAwLDB4MmMsMHhjMCwweDA4LDB4YjgsMHgwMiwweDBjLDB4MDAsMHg4YiwweDAwIH19LAorIHsxNiwgMHg5ZWUwLCAwLCB7MHgyZSwweDMwLDB4NDgsMHhiMCwweDAyLDB4MmMsMHgwMCwweGI5LDB4YzAsMHgyZSwweGMxLDB4MGIsMHg4OCwweDAyLDB4ZWUsMHgxMCB9fSwKKyB7MTYsIDB4OWVmMCwgMCwgezB4YjksMHhjMCwweDJlLDB4MjAsMHgxOSwweGIwLDB4MDIsMHgyMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDlmMDAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAwLDB4YjAsMHgwMCwweDIwLDB4YzAsMHgwYiwweDMwLDB4MDYsMHhjMCwweDAwLDB4OTEsMHgwMCwweDJjIH19LAorIHsxNiwgMHg5ZjEwLCAwLCB7MHhjMCwweDQ5LDB4ODAsMHgwMiwweDRjLDB4MDQsMHg5MSwweDAwLDB4MmMsMHgwMCwweDhhLDB4MzAsMHgwYSwweDBjLDB4MDQsMHhiMSB9fSwKKyB7MTYsIDB4OWYyMCwgMCwgezB4MDAsMHgyYywweGMwLDB4MWIsMHgwMCwweDEyLDB4NDksMHgxMCwweGIxLDB4MDAsMHgyZSwweDIwLDB4MDksMHgzMCwweDAyLDB4MDIgfX0sCisgezE2LCAweDlmMzAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGI4LDB4MjAsMHgyMiwweGMwIH19LAorIHsxNiwgMHg5ZjQwLCAwLCB7MHg4YiwweGYwLDB4MDMsMHhlMCwweDA4LDB4ZmQsMHgwMCwweDNmLDB4YzAsMHgwYywweGEwLDB4MDMsMHgzYywweDAwLDB4Y2IsMHgwMCB9fSwKKyB7MTYsIDB4OWY1MCwgMCwgezB4M2UsMHgwMCwweDRjLDB4ZjAsMHgwYSwweDNjLDB4MDAsMHhiOSwweDAwLDB4MzcsMHhjMSwweDBmLDB4YTAsMHgwMywweGUwLDB4MDAgfX0sCisgezE2LCAweDlmNjAsIDAsIHsweGZhLDB4MDAsMHgzZSwweDAwLDB4MGQsMHhmMCwweDBiLDB4MDAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ZjcwLCAwLCB7MHhhMCwweDFkLDB4ZjAsMHgwMSwweGZjLDB4NDAsMHgzZiwweDgwLDB4NGYsMHhmMCwweDAyLDB4ZjAsMHgwMCwweGZkLDB4MDAsMHgzZiB9fSwKKyB7MTYsIDB4OWY4MCwgMCwgezB4YzEsMHgwZiwweGMwLDB4MDMsMHhmYywweDAwLDB4ZmQsMHgwMCwweDNmLDB4MDAsMHg0ZiwweGYwLDB4NjMsMHhmYywweDAwLDB4ZmQgfX0sCisgezE2LCAweDlmOTAsIDAsIHsweDA0LDB4M2YsMHhjMCwweDBmLDB4YzAsMHgwMywweGYwLDB4ODAsMHhmYywweDAwLDB4N2IsMHgwMCwweDBmLDB4ZjAsMHg0MywweGU4IH19LAorIHsxNiwgMHg5ZmEwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGY4LDB4MDAsMHhjOCwweDEwLDB4MzMsMHgwNCB9fSwKKyB7MTYsIDB4OWZiMCwgMCwgezB4MGMsMHg0MCwweDAyLDB4MzQsMHgwMCwweGM4LDB4ODUsMHgxZiwweGMwLDB4MmQsMHhkOSwweDAzLDB4ZmMsMHhjMCwweGRiLDB4MjggfX0sCisgezE2LCAweDlmYzAsIDAsIHsweDM3LDB4NjQsMHgwZiwweGRiLDB4MDMsMHgzZSwweDAwLDB4ZmYsMHgyNSwweDNmLDB4YzgsMHgwZSwweGYyLDB4MDMsMHhmZSwweDIwIH19LAorIHsxNiwgMHg5ZmQwLCAwLCB7MHhmZiwweGE0LDB4MzcsMHhjNCwweDBjLDB4YzgsMHgwMywweDMwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWZlMCwgMCwgezB4ODAsMHgxMCwweGU4LDB4MDAsMHg4OCwweDIwLDB4MjIsMHgwMCwweDA4LDB4ODgsMHgxMiwweDI2LDB4MDQsMHg4OSwweDgyLDB4MmUgfX0sCisgezE2LCAweDlmZjAsIDAsIHsweGY0LDB4NDgsMHhiOCwweDAyLDB4ZmMsMHhjNCwweDk4LDB4YzIsMHgyMiwweDdjLDB4NGIsMHg5ZCwweDQyLDB4MjYsMHgwOCwweGJmIH19LAorIHsxNiwgMHhhMDAwLCAwLCB7MHgxOCwweDc3LDB4ZTQsMHgwOCwweGYxLDB4ODIsMHhlZiwweDAwLDB4YmIsMHhkMCwweDIyLDB4ZDgsMHgwOCwweDkwLDB4ODMsMHg2MCB9fSwKKyB7MTYsIDB4YTAxMCwgMCwgezB4MDIsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4NDUsMHhjOCwweDA0LDB4YTAsMHgwMCwweDI0LDB4MDAgfX0sCisgezE2LCAweGEwMjAsIDAsIHsweDBhLDB4MDAsMHgwMiwweDBjLDB4MDAsMHg4MiwweDA0LDB4MmMsMHhlMCwweDA4LDB4MTAsMHgwMiwweGNjLDB4ODAsMHg4MywweDAwIH19LAorIHsxNiwgMHhhMDMwLCAwLCB7MHgyNCwweDAwLDB4MGIsMHgxMCwweDA2LDB4YzgsMHgwMSwweGIzLDB4MjAsMHgyYywweGMwLDB4MjksMHgzMiwweDAyLDB4YzgsMHgwOCB9fSwKKyB7MTYsIDB4YTA0MCwgMCwgezB4YjEsMHgwMCwweDI0LDB4ZDAsMHgwOCwweDgyLDB4MDIsMHg2MiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGEwNTAsIDAsIHsweGMwLDB4MTUsMHhhOCwweDAwLDB4YTgsMHgwYywweDI2LDB4MDAsMHgwYSwweDgwLDB4MDIsMHgyYywweDE0LDB4OGEsMHgwMiwweDZlIH19LAorIHsxNiwgMHhhMDYwLCAwLCB7MHhlMCwweDA4LDB4YjAsMHgwMiwweDRjLDB4MDgsMHhhOCwweDAwLDB4MjYsMHgyMCwweDBiLDB4OWMsMHgwMiwweGU0LDB4MDAsMHhiYiB9fSwKKyB7MTYsIDB4YTA3MCwgMCwgezB4MDQsMHgyMiwweGMwLDB4MTksMHhiMCwweDAyLDB4ZTgsMHgwMSwweGJiLDB4MTEsMHgwMiwweGMwLDB4ODgsMHg5MCwweDAyLDB4ZjAgfX0sCisgezE2LCAweGEwODAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE1LDB4ZWMsMHgwMiwweGVhLDB4NDAsMHhiNiwweDYwIH19LAorIHsxNiwgMHhhMDkwLCAwLCB7MHgyZSwweDk4LDB4MGIsMHgyMCwweDAyLDB4YzgsMHgwMiwweDNlLDB4YzAsMHgwZCwweDk4LDB4MDMsMHhlYywweDAyLDB4ZGIsMHg4OCB9fSwKKyB7MTYsIDB4YTBhMCwgMCwgezB4YjYsMHgyMSwweDBmLDB4ODgsMHgwMywweGFjLDB4MDgsMHhmYiwweDAwLDB4MmMsMHhjMCwweDBlLDB4YjAsMHg0MywweGU1LDB4ODAgfX0sCisgezE2LCAweGEwYjAsIDAsIHsweGYwLDB4NjAsMHgzNiwweGMwLDB4MGMsMHgwMSwweDQzLDB4NDgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMGMwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwMCwweGQ2LDB4MDEsMHgzYiwweDY0LDB4ODUsMHhkOSwweDAzLDB4ZjAsMHgwYywweGZmLDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4YTBkMCwgMCwgezB4YzEsMHgwZiwweGZjLDB4MjEsMHhlYywweDAwLDB4ZDcsMHg5MCwweDNiLDB4NDAsMHgwZiwweDUwLDB4MDMsMHgzYywweDAwLDB4ZmYgfX0sCisgezE2LCAweGEwZTAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDhlLDB4ZjAsMHgwMywweGY0LDB4NDAsMHhmZCwweDg4LDB4M2YsMHhjMCwweDJmLDB4ZDAsMHgwMiwweDc4IH19LAorIHsxNiwgMHhhMGYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweDhjLDB4MDAsMHhkYSwweDQwLDB4M2MsMHg0MCB9fSwKKyB7MTYsIDB4YTEwMCwgMCwgezB4MGYsMHgxMCwweDAzLDB4NDgsMHgwMCwweGY5LDB4MjIsMHgzYywweGMyLDB4MGUsMHg5MCwweDgzLDB4ZWMsMHgwMiwweGRiLDB4MDQgfX0sCisgezE2LCAweGExMTAsIDAsIHsweDNhLDB4MDgsMHgwZiwweDg0LDB4ODcsMHhlOCwweDAwLDB4Y2IsMHgwMCwweDNlLDB4YzQsMHgwZSwweGIwLDB4MDMsMHhlZCwweDAwIH19LAorIHsxNiwgMHhhMTIwLCAwLCB7MHhlOCwweDQyLDB4M2EsMHhjMCwweDBmLDB4ODAsMHgwYiwweDEwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTEzMCwgMCwgezB4ODgsMHgwNSwweDJjLDB4MDgsMHg4YSwweDAwLDB4MmUsMHg0MiwweDhiLDB4OTAsMHgwMiwweDI4LDB4MTgsMHhiYiwweDQ5LDB4MjIgfX0sCisgezE2LCAweGExNDAsIDAsIHsweGQwLDB4MzgsMHhiYywweDgyLDB4ZmMsMHgwMCwweGU4LDB4MDIsMHgyMiwweDYyLDB4Y2IsMHg5YywweDAwLDB4ZWYsMHg2MCwweGRmIH19LAorIHsxNiwgMHhhMTUwLCAwLCB7MHgwMCwweDJmLDB4YzAsMHgwYiwweGYwLDB4MDIsMHhlYywweDAwLDB4MDksMHg0MCwweDM3LDB4YzAsMHgwYiwweDkwLDB4MDIsMHgzMiB9fSwKKyB7MTYsIDB4YTE2MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0OCwweDEwLDB4MTEsMHgwMCwweDJjLDB4YTAgfX0sCisgezE2LCAweGExNzAsIDAsIHsweDBiLDB4MjAsMHgwMiwweDQ0LDB4MDAsMHg5MCwweGMwLDB4NjQsMHgzNCwweDI4LDB4MzQsMHgwMiwweGNjLDB4MDAsMHg5MywweDg0IH19LAorIHsxNiwgMHhhMTgwLCAwLCB7MHgyOCwweDQwLDB4MGIsMHgwOCwweDAwLDB4Y2UsMHgwMCwweDkzLDB4MDAsMHgyYywweGMyLDB4MGEsMHgzMCwweDAyLDB4YzAsMHgwMCB9fSwKKyB7MTYsIDB4YTE5MCwgMCwgezB4YjIsMHg0MCwweDIyLDB4YzAsMHgwYiwweDIwLDB4MDIsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGExYTAsIDAsIHsweDcwLDB4MDEsMHgxYSwweDQwLDB4ODUsMHg4MCwweDJkLDB4YTAsMHgwYiwweDY4LDB4MDYsMHgxNiwweDgwLDB4YmQsMHg5MCwweDI1IH19LAorIHsxNiwgMHhhMWIwLCAwLCB7MHgyNCwweDE4LDB4N2IsMHg0MiwweGRlLDB4NDAsMHhhMCwweDgwLDB4MjEsMHhlMCwweDBiLDB4NjgsMHgwMiwweGQ2LDB4MDAsMHg5NyB9fSwKKyB7MTYsIDB4YTFjMCwgMCwgezB4OTAsMHgyZCwweGUwLDB4MGIsMHg3OCwweDAyLDB4Y2UsMHg0MCwweDkyLDB4ODAsMHg2ZCwweGU0LDB4MGIsMHg3OCwweDAyLDB4MDggfX0sCisgezE2LCAweGExZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MjgsMHgwMCwweGQxLDB4ODAsMHgzYywweDg4IH19LAorIHsxNiwgMHhhMWUwLCAwLCB7MHgwYiwweDIyLDB4MDMsMHg0ZSwweDgwLDB4ZjIsMHhhMSwweDNjLDB4MjQsMHgyYSwweDM5LDB4MDMsMHhjYywweDQwLDB4ZDMsMHhhYyB9fSwKKyB7MTYsIDB4YTFmMCwgMCwgezB4MzgsMHhjNSwweDBmLDB4MzAsMHg4MiwweGM4LDB4MDAsMHhkMywweDAwLDB4M2MsMHhjMCwweDBlLDB4MzAsMHgxMywweGMwLDB4MDAgfX0sCisgezE2LCAweGEyMDAsIDAsIHsweGYxLDB4MDAsMHgzOCwweGMwLDB4MGYsMHhhMCwweDAzLDB4MWEsMHgwNiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMjEwLCAwLCB7MHg0MCwweDFkLDB4YjgsMHgxMCwweGZkLDB4MzQsMHgzZSwweDgwLDB4MGYsMHhlMCwweDAzLDB4ZWUsMHgwMCwweDcyLDB4MDAsMHgzYSB9fSwKKyB7MTYsIDB4YTIyMCwgMCwgezB4MDAsMHgwZiwweGIwLDB4NjMsMHhlYywweDQwLDB4ZjgsMHgyMiwweDNlLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhkNCwweDQwLDB4ZmYgfX0sCisgezE2LCAweGEyMzAsIDAsIHsweDAwLDB4M2YsMHhkMiwweDBmLDB4ZjAsMHgwMywweGVjLDB4MDAsMHhjZiwweDAwLDB4MzcsMHhjMCwweDBmLDB4ZjAsMHgwMywweGQwIH19LAorIHsxNiwgMHhhMjQwLCAwLCB7MHgwNiwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVlLDB4MDAsMHhlYiwweDAwLDB4MzYsMHhlMCB9fSwKKyB7MTYsIDB4YTI1MCwgMCwgezB4MGQsMHhiMCwweDAzLDB4MjAsMHgwMCwweGYwLDB4ODAsMHgzMywweGMwLDB4MDgsMHhiOCwweDAzLDB4MmMsMHg4MCwweGNiLDB4MDAgfX0sCisgezE2LCAweGEyNjAsIDAsIHsweDMyLDB4ODAsMHgwZiwweGEwLDB4MTMsMHg2ZSwweDA4LDB4Y2IsMHgyOCwweDMyLDB4ZTAsMHgwZCwweGI0LDB4ODMsMHhlMiwweDAwIH19LAorIHsxNiwgMHhhMjcwLCAwLCB7MHhjYSwweDAwLDB4M2UsMHhlMCwweDBjLDB4YTgsMHgwMywweDAyLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTI4MCwgMCwgezB4YzgsMHgxMSwweDhjLDB4MDQsMHg4MywweDAwLDB4MjEsMHhjMCwweDQ4LDB4NzAsMHgwMiwweDEwLDB4MDAsMHhiNywweDAyLDB4MjEgfX0sCisgezE2LCAweGEyOTAsIDAsIHsweGMwLDB4NGEsMHg3MCwweDAyLDB4MGQsMHg0OCwweGQ0LDB4MDAsMHgzNSwweGMwLDB4MGUsMHg2MCwweDAyLDB4ZGMsMHgwMCwweGE3IH19LAorIHsxNiwgMHhhMmEwLCAwLCB7MHg0MCwweDI5LDB4YzAsMHgwOSwweDcyLDB4MDIsMHhkNCwweDEwLDB4YTYsMHgwMiwweDJmLDB4YzgsMHgwOCwweDcwLDB4MDIsMHgxMiB9fSwKKyB7MTYsIDB4YTJiMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHg5ZSwweDAwLDB4YTcsMHg4MCwweDIwLDB4ZTAgfX0sCisgezE2LCAweGEyYzAsIDAsIHsweDBhLDB4MzgsMHgwMiwweDFhLDB4MDAsMHhiNSwweDgwLDB4MjEsMHhlMCwweDA4LDB4ZjgsMHgyMiwweDVjLDB4ODEsMHg4MywweDgwIH19LAorIHsxNiwgMHhhMmQwLCAwLCB7MHgyMSwweGExLDB4MGIsMHg3OCwweDgyLDB4NWEsMHgxMCwweDgzLDB4YTAsMHgyMCwweGU4LDB4MGEsMHg3YiwweDAyLDB4ZGEsMHgwMCB9fSwKKyB7MTYsIDB4YTJlMCwgMCwgezB4OTcsMHhjMCwweDJkLDB4ZTQsMHgwOCwweGU4LDB4MDIsMHgwOCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGEyZjAsIDAsIHsweDA4LDB4MTQsMHhjYywweDAwLDB4ODMsMHgxMCwweDIwLDB4YzAsMHgwYSwweDMwLDB4MDIsMHgwOCwweDA4LDB4YjMsMHg3MCwweDIwIH19LAorIHsxNiwgMHhhMzAwLCAwLCB7MHhmOCwweDBhLDB4MzAsMHg0MiwweDRjLDB4MDQsMHg5MywweDE0LDB4MjYsMHhjNCwweDBhLDB4MzgsMHgwMiwweGNjLDB4MDAsMHhhMyB9fSwKKyB7MTYsIDB4YTMxMCwgMCwgezB4MDAsMHgyOCwweGMwLDB4YWEsMHgzMCwweDAyLDB4Y2UsMHg0MCwweGIzLDB4ODgsMHgyYywweGMwLDB4MjgsMHgzMCwweDBhLDB4MTIgfX0sCisgezE2LCAweGEzMjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTksMHgwMCwweGVhLDB4ODAsMHhiNiwweDkwIH19LAorIHsxNiwgMHhhMzMwLCAwLCB7MHgyZiwweDI0LDB4MGIsMHgzOSwweDA0LDB4YmUsMHhjMCwweDMzLDB4OTIsMHgwYywweGEwLDB4MGIsMHg2OCwweDE4LDB4Y2UsMHhjMCB9fSwKKyB7MTYsIDB4YTM0MCwgMCwgezB4MzMsMHg4MCwweDBmLDB4ZTksMHg0MywweDc4LDB4MDAsMHhjYSwweDAwLDB4MzIsMHg4MCwweDBmLDB4YTAsMHgxMywweGY4LDB4NDggfX0sCisgezE2LCAweGEzNTAsIDAsIHsweGRlLDB4MDAsMHgzZSwweDgwLDB4MGMsMHhlMCwweDAyLDB4M2EsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMzYwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgyNCwweGY4LDB4MDAsMHgzZSwweDEyLDB4MGQsMHg4MCwweDkzLDB4YjAsMHgyOCwweGY4LDB4MDAsMHhiYyB9fSwKKyB7MTYsIDB4YTM3MCwgMCwgezB4MDAsMHgwZiwweDg0LDB4MDMsMHhhMCwweDAwLDB4ZjAsMHgwMCwweDNlLDB4MDIsMHgwZSwweDgwLDB4MDAsMHhlMCwweDAwLDB4ZjggfX0sCisgezE2LCAweGEzODAsIDAsIHsweDAxLDB4M2UsMHgwMCwweDBkLDB4ODAsMHgwMywweGUwLDB4MDAsMHhlOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyIH19LAorIHsxNiwgMHhhMzkwLCAwLCB7MHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDAsMHhmOSwweDAwLDB4YjIsMHg3MCB9fSwKKyB7MTYsIDB4YTNhMCwgMCwgezB4MGYsMHg5MCwweDAxLDB4MDQsMHgwMCwweGM5LDB4MDAsMHgzZSwweDQwLDB4MGMsMHg5OCwweDAzLDB4ZTQsMHgwNCwweGU5LDB4MDggfX0sCisgezE2LCAweGEzYjAsIDAsIHsweDNhLDB4NDgsMHgwYywweDlhLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDM2LDB4NDAsMHgwYiwweDEwLDB4MGIsMHgyNiwweDgwIH19LAorIHsxNiwgMHhhM2MwLCAwLCB7MHhmMSwweDgwLDB4MzIsMHg0MCwweDBmLDB4OTAsMHgwMywweGMyLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTNkMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHhiOSwweDAwLDB4MjIsMHg2MSwweDBiLDB4OTAsMHgwMiwweDI0LDB4MDgsMHg4OSwweDAwLDB4MmUgfX0sCisgezE2LCAweGEzZTAsIDAsIHsweDQwLDB4MGQsMHg5YSwweDAyLDB4ZTQsMHgwOCwweGE5LDB4MDAsMHgyMiwweDc4LDB4MGQsMHg5NCwweDA2LDB4ZTQsMHgxMCwweGI5IH19LAorIHsxNiwgMHhhM2YwLCAwLCB7MHgwMCwweDIyLDB4NTAsMHgwYiwweDkwLDB4MDIsMHgyNSwweDgwLDB4YjksMHg4MCwweDM2LDB4NDAsMHgwYiwweDkwLDB4MDIsMHhlMCB9fSwKKyB7MTYsIDB4YTQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjUsMHgwMCwweDIzLDB4NDIgfX0sCisgezE2LCAweGE0MTAsIDAsIHsweDBiLDB4ZDAsMHgwZSwweGI0LDB4MDAsMHg4OSwweDA0LDB4MmUsMHg2MCwweDA4LDB4OTEsMHgwMiwweGM0LDB4MDQsMHhiOSwweDA0IH19LAorIHsxNiwgMHhhNDIwLCAwLCB7MHgyYSwweGMwLDB4MDgsMHg5NCwweDAyLDB4ZTQsMHgxMCwweGIxLDB4MDAsMHgyNiwweDQyLDB4MGEsMHg5MCwweDAyLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4YTQzMCwgMCwgezB4YjksMHgyMSwweDYyLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhjNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE0NDAsIDAsIHsweDA4LDB4MDQsMHgwNSwweDAwLDB4YjUsMHg0MCwweDIxLDB4NTAsMHg0YiwweDUwLDB4MDYsMHg5NCwweDAyLDB4ODEsMHgwMCwweDJjIH19LAorIHsxNiwgMHhhNDUwLCAwLCB7MHg2MCwweDI5LDB4MTQsMHgwNiwweGM1LDB4MDAsMHhhMSwweDIyLDB4MjAsMHg1MSwweDg5LDB4MTQsMHgwMiwweGM0LDB4MDAsMHhiMSB9fSwKKyB7MTYsIDB4YTQ2MCwgMCwgezB4MjAsMHgyMCwweDQ4LDB4MGIsMHgxNCwweDAyLDB4MDQsMHgwMSwweGIxLDB4MDAsMHgwNCwweDUwLDB4MGIsMHgxMCwweDAyLDB4YzIgfX0sCisgezE2LCAweGE0NzAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwOCwweGI4LDB4MDAsMHgzMiwweDAwIH19LAorIHsxNiwgMHhhNDgwLCAwLCB7MHg4ZiwweDgwLDB4MDMsMHhiMCwweDAwLDB4ODgsMHgwMCwweDNlLDB4MDAsMHgwYywweDgwLDB4MDMsMHhlMCwweDAwLDB4ZTgsMHgwNCB9fSwKKyB7MTYsIDB4YTQ5MCwgMCwgezB4M2EsMHgwMCwweDBjLDB4ODAsMHgwMiwweGUwLDB4MDAsMHhmOCwweDUwLDB4MzYsMHgwMCwweDBmLDB4ODAsMHgwMywweDIwLDB4MDQgfX0sCisgezE2LCAweGE0YTAsIDAsIHsweGY4LDB4MDEsMHgxMiwweDAwLDB4NGYsMHg4MCwweDA3LDB4ZWUsMHgwNywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNGIwLCAwLCB7MHg5OCwweDFkLDB4ZTUsMHgxMCwweGY5LDB4NDAsMHgzZSwweDUwLDB4MGYsMHg5NCwweDAyLDB4NjUsMHgwMSwweGZkLDB4MDEsMHgzZCB9fSwKKyB7MTYsIDB4YTRjMCwgMCwgezB4NTAsMHg0ZiwweDUwLDB4MTMsMHhlNSwweDAwLDB4ZmQsMHgxMCwweDFmLDB4NTAsMHgwNywweGQ0LDB4NDMsMHhkNCwweDAwLDB4ZjkgfX0sCisgezE2LCAweGE0ZDAsIDAsIHsweDEwLDB4MWUsMHg0NCwweDBmLDB4OTQsMHgwMywweGQ1LDB4MDAsMHhmZCwweDQwLDB4M2UsMHg1MCwweDBmLDB4NTIsMHg4MywweGVlIH19LAorIHsxNiwgMHhhNGUwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgxNSwweGU0LDB4NDAsMHhmOSwweDYwLDB4M2YsMHg0NCB9fSwKKyB7MTYsIDB4YTRmMCwgMCwgezB4MGYsMHhkMCwweGMzLDB4ZTQsMHgzMCwweGY5LDB4MDEsMHgzZSwweDQyLDB4MGMsMHhkMCwweDAzLDB4ZTcsMHg4MCwweGRkLDB4YTAgfX0sCisgezE2LCAweGE1MDAsIDAsIHsweDMzLDB4NDAsMHgwYywweGQwLDB4MDMsMHhmYywweDAwLDB4YzksMHg5MCwweDNmLDB4NjgsMHgxZSwweDkxLDB4MDMsMHgzNCwweDAwIH19LAorIHsxNiwgMHhhNTEwLCAwLCB7MHhmZCwweDAwLDB4M2UsMHg2OCwweDBjLDB4OTQsMHgwMywweDBlLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTUyMCwgMCwgezB4MzksMHgxMCwweGUwLDB4MDAsMHhiOCwweDQyLDB4MmUsMHgwOSwweDBiLDB4ODQsMHgwMiwweGUxLDB4MDQsMHhiZSwweDAwLDB4MmUgfX0sCisgezE2LCAweGE1MzAsIDAsIHsweDEwLDB4MDgsMHg4MCwweDIyLDB4YzIsMHg4MCwweDg4LDB4NDAsMHgyMiwweDAwLDB4MGEsMHg4MCwweDAyLDB4ZTAsMHgwMCwweGE4IH19LAorIHsxNiwgMHhhNTQwLCAwLCB7MHhkMCwweDJlLDB4MTAsMHg0YiwweDhhLDB4MDMsMHg2MCwweDAwLDB4YmEsMHgwMCwweDJlLDB4MzAsMHgwOCwweDhhLDB4MDIsMHg4NiB9fSwKKyB7MTYsIDB4YTU1MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhjNSwweDgwLDB4YjEsMHg2MCwweDZjLDB4ZDAgfX0sCisgezE2LCAweGE1NjAsIDAsIHsweDBiLDB4MTAsMHgwMCwweGRjLDB4MGMsMHhiNSwweDAwLDB4MmMsMHg0MSwweDA4LDB4MTAsMHgwMiwweGM1LDB4ODAsMHg5MSwweDEwIH19LAorIHsxNiwgMHhhNTcwLCAwLCB7MHg2OCwweGMwLDB4MDgsMHgzMCwweDAyLDB4ZTQsMHgwYywweDgxLDB4MjIsMHgyYywweDUwLDB4MDgsMHgxMCwweDQyLDB4MDQsMHgwMCB9fSwKKyB7MTYsIDB4YTU4MCwgMCwgezB4YTEsMHgwMCwweDJjLDB4NWEsMHgyOCwweDkwLDB4MDIsMHg1MiwweDEwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE1OTAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAwLDB4YjksMHgwMCwweDJlLDB4NDEsMHgwYiwweDkwLDB4MTIsMHhmNCwweDgwLDB4YmYsMHgwMCwweDJlIH19LAorIHsxNiwgMHhhNWEwLCAwLCB7MHg0MCwweDA4LDB4OTAsMHgwMiwweGU0LDB4MDAsMHhhOSwweDYwLDB4NjAsMHg0MiwweDBhLDB4OTQsMHgxMiwweGU1LDB4MDAsMHhhOSB9fSwKKyB7MTYsIDB4YTViMCwgMCwgezB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4NjQsMHgyMCwweGI5LDB4MDAsMHgwZSwweDQwLDB4MDksMHg5MCwweDAyLDB4YzYgfX0sCisgezE2LCAweGE1YzAsIDAsIHsweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDA1LDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQxIH19LAorIHsxNiwgMHhhNWQwLCAwLCB7MHgwZiwweDkwLDB4MjMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgwYywweDkwLDB4MDMsMHhlNCwweDA0LDB4ZDEsMHhjMCB9fSwKKyB7MTYsIDB4YTVlMCwgMCwgezB4YmEsMHg3MCwweDBjLDB4OTgsMHgwMywweGM0LDB4MDAsMHhjOSwweDAwLDB4M2UsMHg0MCwweDBlLDB4OTAsMHgwMywweDI1LDB4NDAgfX0sCisgezE2LCAweGE1ZjAsIDAsIHsweGU5LDB4NDAsMHgzZSwweDQwLDB4MGMsMHgxMCwweDAzLDB4NjgsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNjAwLCAwLCB7MHg2OCwweDAxLDB4YTQsMHgxNCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDIzLDB4ZTQsMHgwOCwweGY5LDB4YTAsMHgzYyB9fSwKKyB7MTYsIDB4YTYxMCwgMCwgezB4YzIsMHgyZiwweDkwLDB4MDMsMHhjNCwweDAwLDB4ZDksMHg4MCwweDNlLDB4NzAsMHgwZiwweDkxLDB4NDMsMHhlNCwweDAwLDB4ZjkgfX0sCisgezE2LCAweGE2MjAsIDAsIHsweDAwLDB4M2UsMHg0MCwweDFmLDB4OTAsMHgxMywweGU2LDB4MjAsMHhmOSwweGEwLDB4M2MsMHg0MCwweDRlLDB4OTAsMHgwMywweDlhIH19LAorIHsxNiwgMHhhNjMwLCAwLCB7MHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwMCwweGEwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMiB9fSwKKyB7MTYsIDB4YTY0MCwgMCwgezB4MGYsMHg4MCwweDEzLDB4MjAsMHgwYywweGZjLDB4MDEsMHgzZSwweDAwLDB4MGMsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGM4LDB4NTAgfX0sCisgezE2LCAweGE2NTAsIDAsIHsweDMyLDB4MDAsMHgwZiwweDgwLDB4MGIsMHgyMCwweDA4LDB4ZjgsMHgwMCwweDMyLDB4MDAsMHgyYywweDgwLDB4NDMsMHhlMCwweDQwIH19LAorIHsxNiwgMHhhNjYwLCAwLCB7MHhmOCwweDAyLDB4M2EsMHgwMCwweDhmLDB4ODAsMHgwMywweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTY3MCwgMCwgezB4YTgsMHg4NSwweDI4LDB4MDgsMHgzYSwweDAwLDB4MGYsMHg4MCwweDRiLDB4YTEsMHgwMiwweDI4LDB4MDAsMHhiYSwweDgyLDB4MmUgfX0sCisgezE2LCAweGE2ODAsIDAsIHsweDg4LDB4NDgsMHhlNCwweDAyLDB4ZTgsMHgwMCwweGFlLDB4OTAsMHhhMywweDkwLDB4MGIsMHhlMCwweDAwLDB4MzgsMHgwMCwweGJhIH19LAorIHsxNiwgMHhhNjkwLCAwLCB7MHgwMCwweDM3LDB4YTAsMHgwOCwweGEwLDB4MDIsMHhmOCwweDAwLDB4OWUsMHhlMCwweDIyLDB4ODAsMHgwYiwweGEwLDB4MjMsMHg0MiB9fSwKKyB7MTYsIDB4YTZhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDEwLDB4MzMsMHgwMCwweDJjLDB4ZDAgfX0sCisgezE2LCAweGE2YjAsIDAsIHsweDBiLDB4MTQsMHgwMiwweDBjLDB4MDAsMHhiMiwweDkxLDB4MmMsMHhkMCwweDA4LDB4M2UsMHgwMiwweDRjLDB4MDAsMHg4MywweDQwIH19LAorIHsxNiwgMHhhNmMwLCAwLCB7MHgyNCwweGMyLDB4MGIsMHgzNiwweDAwLDB4OGMsMHgwMCwweGIzLDB4MDAsMHgyMCwweGMwLDB4MDksMHhiMCwweDAyLDB4Y2UsMHgwMCB9fSwKKyB7MTYsIDB4YTZkMCwgMCwgezB4YjMsMHhjYywweDY4LDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwMiwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE2ZTAsIDAsIHsweGUwLDB4MDEsMHgxYywweDg4LDB4YjcsMHgyNSwweDJkLDB4YzAsMHg4YiwweDU4LDB4MWEsMHgxYywweDA4LDB4YjYsMHgwMCwweDJkIH19LAorIHsxNiwgMHhhNmYwLCAwLCB7MHhjMCwweDA4LDB4NzQsMHgwMiwweGRjLDB4NDAsMHhhNSwweDAwLDB4MjUsMHhjMCwweDFiLDB4NzgsMHgwMiwweDk0LDB4MDgsMHhiNyB9fSwKKyB7MTYsIDB4YTcwMCwgMCwgezB4ODAsMHgyNSwweGUzLDB4MGEsMHg3MSwweDAyLDB4ZGMsMHgwMCwweDk3LDB4ODMsMHgyMSwweGM4LDB4OGIsMHhmMSwweDAyLDB4NDggfX0sCisgezE2LCAweGE3MTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWYsMHgwMCwweGY3LDB4ZTIsMHg3ZCwweGUwIH19LAorIHsxNiwgMHhhNzIwLCAwLCB7MHgwZiwweDU4LDB4NDMsMHgxZSwweDE4LDB4ZjYsMHg4MCwweDdjLDB4ZTAsMHgyYywweDY4LDB4MDIsMHg1ZSwweDkwLDB4YzMsMHg4MCB9fSwKKyB7MTYsIDB4YTczMCwgMCwgezB4MzUsMHhlMCwweDBmLDB4ZjgsMHgwMywweDllLDB4MDQsMHhmZiwweGExLDB4MjAsMHhhMSwweDBkLDB4NzgsMHgwMywweGQ2LDB4MDAgfX0sCisgezE2LCAweGE3NDAsIDAsIHsweGY3LDB4ODAsMHgzOSwweGY4LDB4MGYsMHg3OCwweDAzLDB4MGEsMHgwNiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNzUwLCAwLCB7MHg0OCwweDFkLDB4YWMsMHgwMCwweGZiLDB4NDAsMHg3ZiwweDQxLDB4MGYsMHgxMCwweDAzLDB4ZWMsMHgwNCwweGZhLDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4YTc2MCwgMCwgezB4ZDAsMHgwZiwweGEwLDB4MDMsMHhlZCwweDAwLDB4ZTksMHgwMCwweDJhLDB4MDAsMHgwZiwweGIwLDB4MDMsMHg2NCwweDAwLDB4ZmIgfX0sCisgezE2LCAweGE3NzAsIDAsIHsweDQwLDB4M2UsMHhjMCwweDBkLDB4YjAsMHgwMywweGU0LDB4MDAsMHhkMywweDAwLDB4MzYsMHhjMCwweDBmLDB4MzgsMHgwMywweGMyIH19LAorIHsxNiwgMHhhNzgwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNSwweGZlLDB4NDgsMHhjZiwweGMwLDB4MzMsMHg2MCB9fSwKKyB7MTYsIDB4YTc5MCwgMCwgezB4OGMsMHhjOCwweDQzLDB4ZDYsMHgwMCwweGNjLDB4OTQsMHgzZiwweGIwLDB4MGQsMHhmOCwweDAzLDB4N2YsMHgwMCwweGRmLDB4ODAgfX0sCisgezE2LCAweGE3YTAsIDAsIHsweDNmLDB4NjAsMHgwZiwweGQ4LDB4MDMsMHhkZSwweDAwLDB4Y2YsMHhjYSwweDNkLDB4NjAsMHgwYywweGY4LDB4MTMsMHgzYSwweDQ0IH19LAorIHsxNiwgMHhhN2IwLCAwLCB7MHhkZCwweDgwLDB4M2YsMHhlMCwweDBmLDB4ZjgsMHg0MywweDE4LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTdjMCwgMCwgezB4YTgsMHgxMSwweDljLDB4MDAsMHg4ZiwweDExLDB4MzMsMHhjMCwweDQ4LDB4NDEsMHgxMiwweGM0LDB4NDgsMHg4NCwweDExLDB4MmMgfX0sCisgezE2LCAweGE3ZDAsIDAsIHsweGVjLDB4MmEsMHhiYSwweDAzLDB4M2MsMHg0MCwweGQ3LDB4NDgsMHgyZCwweDQxLDB4MGIsMHg2MCwweDAyLDB4ZDQsMHgwMCwweGQ3IH19LAorIHsxNiwgMHhhN2UwLCAwLCB7MHgwMSwweDNkLDB4YzAsMHgwZCwweGYwLDB4MDMsMHg1YSwweDAwLDB4ODQsMHgxOCwweDJkLDB4YzAsMHgwYiwweDcwLDB4MDMsMHg2YSB9fSwKKyB7MTYsIDB4YTdmMCwgMCwgezB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHg4YywweDA4LDB4ODcsMHgwMCwweDIxLDB4NDAgfX0sCisgezE2LCAweGE4MDAsIDAsIHsweDA5LDB4NDAsMHgwMiwweGQ0LDB4MDAsMHhhNCwweDkyLDB4MmQsMHhjOCwweDA5LDB4NjIsMHg4MiwweDVjLDB4MDAsMHg4NywweDAwIH19LAorIHsxNiwgMHhhODEwLCAwLCB7MHgyZCwweGMwLDB4MGIsMHg1MCwweDAyLDB4ZmMsMHgwMCwweDg3LDB4MDAsMHgyZCwweDA0LDB4MDgsMHg3MCwweDAyLDB4MWMsMHg4MCB9fSwKKyB7MTYsIDB4YTgyMCwgMCwgezB4YjUsMHgwMCwweDJkLDB4YzAsMHgwYiwweGYwLDB4MDIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE4MzAsIDAsIHsweDYwLDB4MTAsMHhjYywweDAwLDB4ODMsMHgwMCwweDIwLDB4NDAsMHgwOSwweDAwLDB4MjIsMHhjNywweDAwLDB4YTAsMHg0MSwweDJjIH19LAorIHsxNiwgMHhhODQwLCAwLCB7MHhjMSwweDRiLDB4MDgsMHgwMiwweDJjLDB4MDAsMHg5MywweDQwLDB4MmMsMHg3YywweDBiLDB4MzgsMHgwMiwweGM3LDB4MjAsMHg5MyB9fSwKKyB7MTYsIDB4YTg1MCwgMCwgezB4MDAsMHgyYywweGMwLDB4MDksMHgzMCwweDAyLDB4NGYsMHg4NCwweGIwLDB4ODAsMHgyYywweGMwLDB4MGIsMHgzMiwweDEwLDB4NTAgfX0sCisgezE2LCAweGE4NjAsIDAsIHsweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhYSwweDE1LDB4YmMsMHgwMiwweGNmLDB4MDAsMHhiMiwweDQwIH19LAorIHsxNiwgMHhhODcwLCAwLCB7MHgwZCwweDEwLDB4MDMsMHhlOCwweDI0LDB4ZWIsMHhjMSwweDNlLDB4YzAsMHgyZCwweDk4LDB4MTMsMHg3YywweDBhLDB4YzIsMHg0MyB9fSwKKyB7MTYsIDB4YTg4MCwgMCwgezB4M2UsMHhiMCwweDBmLDB4YTksMHgwMywweGU5LDB4MjAsMHhjZiwweDAwLDB4M2UsMHhjMCwweDhjLDB4ZjAsMHgwMywweDBkLDB4MjAgfX0sCisgezE2LCAweGE4OTAsIDAsIHsweGZhLDB4YzAsMHgzZiwweGMwLDB4MGYsMHg3NCwweDAxLDB4MmEsMHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhOGEwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGZiLDB4MDIsMHgzYSwweDQwLDB4OGUsMHg5MCwweDAzLDB4ZTgsMHgxNCwweDViLDB4NTAsMHgzYyB9fSwKKyB7MTYsIDB4YThiMCwgMCwgezB4NTAsMHg0ZSwweDg0LDB4MDMsMHhlYywweDAwLDB4ZjgsMHg0MCwweDNlLDB4ODAsMHgwNywweDgxLDB4MDMsMHhlYywweDA4LDB4ZjMgfX0sCisgezE2LCAweGE4YzAsIDAsIHsweDAwLDB4M2EsMHhjMCwweDlmLDB4MzAsMHgwMywweGVjLDB4MDAsMHhjYiwweDIwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgyMywweGU4IH19LAorIHsxNiwgMHhhOGQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHg5MCwweGZjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHg0MCB9fSwKKyB7MTYsIDB4YThlMCwgMCwgezB4MGYsMHhkMCwweDAzLDB4MzgsMHgyMCwweGNmLDB4MDgsMHgzMiwweGMxLDB4MGUsMHhkMCwweDAzLDB4ZmMsMHgwMCwweGZlLDB4MDggfX0sCisgezE2LCAweGE4ZjAsIDAsIHsweDMxLDB4ZTUsMHgwZSwweGU0LDB4MDMsMHgzYSwweDAwLDB4ZmYsMHgwMCwweDMzLDB4ODAsMHgwZiwweGYwLDB4MmIsMHgyNCwweDAwIH19LAorIHsxNiwgMHhhOTAwLCAwLCB7MHhjYywweGEwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweDAwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTkxMCwgMCwgezB4ODAsMHgwNCwweDZjLDB4MDAsMHhiYiwweDAwLDB4M2EsMHg2OSwweDBiLDB4OTAsMHg2ZSwweDA4LDB4MDAsMHg4MywweDQxLDB4MzYgfX0sCisgezE2LCAweGE5MjAsIDAsIHsweDQwLDB4YzgsMHg4OCwweGM2LDB4ZWMsMHgwMCwweDg4LDB4NDAsMHgzNiwweDgwLDB4MGQsMHhhOCwweDAzLDB4NmUsMHg1MCwweGJiIH19LAorIHsxNiwgMHhhOTMwLCAwLCB7MHgwMCwweDM2LDB4YzAsMHgwYiwweGIwLDB4MDIsMHgyNCwweDAwLDB4ZDksMHgwOCwweDJlLDB4YzAsMHgwYiwweGIwLDB4MDMsMHhlMCB9fSwKKyB7MTYsIDB4YTk0MCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4YmIsMHgwMCwweDJlLDB4NjAgfX0sCisgezE2LCAweGE5NTAsIDAsIHsweDAzLDB4ODAsMHgwMiwweDIwLDB4MDAsMHg4OSwweDAxLDB4MjIsMHg1OCwweDA4LDB4OTgsMHgyMiwweGVjLDB4MDEsMHhhYiwweDAwIH19LAorIHsxNiwgMHhhOTYwLCAwLCB7MHgyMiwweDAwLDB4MGEsMHgxMCwweDAyLDB4MjgsMHgwMCwweGJiLDB4MDAsMHgyMiwweDQwLDB4MGIsMHhiMCwweDAyLDB4MjgsMHgwMCB9fSwKKyB7MTYsIDB4YTk3MCwgMCwgezB4OGEsMHgwMCwweDJlLDB4YzAsMHgwYiwweGIwLDB4NDIsMHgyMCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE5ODAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAwLDB4YjMsMHgwMCwweDI4LDB4NDAsMHg4YiwweDAwLDB4MDIsMHgwMiwweDQwLDB4ODksMHgwMSwweDI0IH19LAorIHsxNiwgMHhhOTkwLCAwLCB7MHhkMiwweDI4LDB4MTAsMHgwMiwweGNjLDB4MDAsMHg4MywweDEwLDB4MjQsMHgyMCwweDA4LDB4MDgsMHgwMiwweDRlLDB4MDAsMHhiMyB9fSwKKyB7MTYsIDB4YTlhMCwgMCwgezB4MDQsMHhhMCwweGMwLDB4MGIsMHgzMCwweDAyLDB4MDgsMHg4OCwweDkyLDB4MDAsMHgyYywweGMwLDB4MGIsMHhiMCwweDAyLDB4YzIgfX0sCisgezE2LCAweGE5YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGZmLDB4MDAsMHgzZSwweDAwIH19LAorIHsxNiwgMHhhOWMwLCAwLCB7MHgwZiwweDgwLDB4MDIsMHgyMCwweDEwLDB4ODksMHg1MCwweDIyLDB4ZDgsMHgyZSwweDk2LDB4MjIsMHhmYywweDAwLDB4ZWIsMHg0MCB9fSwKKyB7MTYsIDB4YTlkMCwgMCwgezB4MzIsMHhjMCwweDBhLDB4OTAsMHgwMywweDI4LDB4MDAsMHhmZiwweDAwLDB4MjIsMHgwMCwweDBmLDB4YjAsMHgwMywweDJjLDB4YTAgfX0sCisgezE2LCAweGE5ZTAsIDAsIHsweGM4LDB4MDAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4MDAsMHgwNiwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhOWYwLCAwLCB7MHhhMCwweDE5LDB4ZmMsMHgwMCwweGZmLDB4MGMsMHgzYiwweDAwLDB4MGYsMHhjMCwweDAyLDB4NzAsMHg5MCwweGZkLDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4YWEwMCwgMCwgezB4YzksMHgwZiwweDk2LDB4YzMsMHhmYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmYywweDA0LDB4ZmYgfX0sCisgezE2LCAweGFhMTAsIDAsIHsweDA0LDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGVjLDB4MDAsMHhmYywweDAwLDB4M2YsMHhjMCwweDBmLDB4NzAsMHgwMywweGU4IH19LAorIHsxNiwgMHhhYTIwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGRjLDB4ODAsMHhmYiwweDI4LDB4M2YsMHgwMCB9fSwKKyB7MTYsIDB4YWEzMCwgMCwgezB4MGMsMHhjMSwweDBiLDB4ZjEsMHgwMiwweGVkLDB4MDAsMHgzNywweDMwLDB4MmMsMHhmMSwweDAzLDB4YjIsMHg0MCwweGZmLDB4MDAgfX0sCisgezE2LCAweGFhNDAsIDAsIHsweGJiLDB4YzAsMHgwZiwweDQ4LDB4MDYsMHhiMiwweDAwLDB4ZmMsMHg4MCwweDNiLDB4Y2MsMHgwYywweGYwLDB4MDMsMHg3MCwweDgwIH19LAorIHsxNiwgMHhhYTUwLCAwLCB7MHhkZiwweDI4LDB4MzMsMHgwNCwweDBmLDB4ZjQsMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWE2MCwgMCwgezB4ODAsMHgxMCwweGZmLDB4NDAsMHhiZiwweDYwLDB4MmUsMHgyMSwweDA4LDB4ODIsMHgwMiwweDIwLDB4MDAsMHhhOSwweDI4LDB4MmEgfX0sCisgezE2LCAweGFhNzAsIDAsIHsweDAwLDB4MDksMHhmYSwweDAyLDB4MjAsMHgwMCwweGJmLDB4NTEsMHgyMywweGQ4LDB4MDksMHg5OCwweDAyLDB4ZTQsMHgzMCwweGIwIH19LAorIHsxNiwgMHhhYTgwLCAwLCB7MHgwMCwweDIzLDB4ZDAsMHgwOCwweGY1LDB4YTIsMHgyNSwweGE0LDB4OGYsMHg0MiwweDNjLDB4MTAsMHgwYiwweGIwLDB4MGEsMHgyMCB9fSwKKyB7MTYsIDB4YWE5MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDAwLDB4YjMsMHgwOCwweDJjLDB4MDAgfX0sCisgezE2LCAweGFhYTAsIDAsIHsweDI4LDB4MDAsMHgxYSwweGMwLDB4ODQsMHgyMCwweDAwLDB4MjQsMHhjOCwweDRiLDB4MzEsMHg0MiwweGMwLDB4MDAsMHg5MywweDAyIH19LAorIHsxNiwgMHhhYWIwLCAwLCB7MHgyMCwweGM2LDB4MDgsMHgwMCwweDA2LDB4YzAsMHg4MSwweGIzLDB4MDAsMHgyYywweGQ4LDB4MDksMHgzMiwweDAyLDB4YTAsMHg0MCB9fSwKKyB7MTYsIDB4YWFjMCwgMCwgezB4OTMsMHgwMSwweDI0LDB4NGMsMHgwYiwweDMyLDB4MDIsMHgyMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFhZDAsIDAsIHsweGMwLDB4MTEsMHhhYywweDAwLDB4YmIsMHgwMiwweDJlLDB4MGEsMHgwOCwweDgwLDB4ODIsMHg2MCwweDAwLDB4YTgsMHgwMCwweDJlIH19LAorIHsxNiwgMHhhYWUwLCAwLCB7MHhlMCwweDFiLDB4YjAsMHgwMiwweDYyLDB4MDEsMHgzYiwweDAwLDB4MjIsMHhjMSwweDA5LDB4OTAsMHgwMiwweGUyLDB4MDAsMHhiYiB9fSwKKyB7MTYsIDB4YWFmMCwgMCwgezB4NjAsMHgyNiwweGMxLDB4MDgsMHhiMCwweDJhLDB4MjYsMHgwMCwweDliLDB4MDQsMHgyZSwweDIxLDB4MGIsMHhiMCwweDAyLDB4MzAgfX0sCisgezE2LCAweGFiMDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDExLDB4ZWMsMHgxMCwweGZiLDB4MDAsMHgzZSwweDEwIH19LAorIHsxNiwgMHhhYjEwLCAwLCB7MHgwOCwweDg0LDB4MTMsMHhlYywweDAyLDB4YTksMHgwNCwweDM2LDB4MjAsMHgwZiwweGIwLDB4MDMsMHhlZSwweDgwLDB4ZmIsMHgwMCB9fSwKKyB7MTYsIDB4YWIyMCwgMCwgezB4M2EsMHhjMCwweDBjLDB4YTAsMHgwMywweGEyLDB4ODAsMHg3OSwweDQwLDB4MWUsMHhjMCwweDhjLDB4YjAsMHg2MywweDZhLDB4MTAgfX0sCisgezE2LCAweGFiMzAsIDAsIHsweGQzLDB4MDAsMHgzNiwweGEyLDB4MDcsMHhiMCwweDAzLDB4MDAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhYjQwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwMCwweGZmLDB4MDAsMHgzZSwweDIwLDB4NGQsMHg0MSwweDAzLDB4OWMsMHgwMCwweGZkLDB4MjAsMHhhYiB9fSwKKyB7MTYsIDB4YWI1MCwgMCwgezB4MDAsMHgwYywweGYwLDB4MDMsMHhiOCwweDAwLDB4ZjcsMHgwMCwweDNmLDB4YzAsMHg0ZCwweGM5LDB4MDMsMHhmNCwweDAwLDB4ZmYgfX0sCisgezE2LCAweGFiNjAsIDAsIHsweDAwLDB4M2IsMHhjMCwweDJlLDB4ZjAsMHgwMCwweGYwLDB4MDAsMHhlZiwweDAwLDB4M2YsMHgwMCwweDRiLDB4NzAsMHgwMywweGY4IH19LAorIHsxNiwgMHhhYjcwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4ODAsMHhlYiwweDAwLDB4N2UsMHgxMCB9fSwKKyB7MTYsIDB4YWI4MCwgMCwgezB4MmUsMHg4NCwweDAzLDB4ZWMsMHgwMCwweGUwLDB4MDAsMHgzMiwweDUwLDB4MGYsMHhiMCwweDg2LDB4MjUsMHgwMCwweGRiLDB4MjAgfX0sCisgezE2LCAweGFiOTAsIDAsIHsweDNhLDB4YzAsMHgwZCwweGIwLDB4NjMsMHhlMSwweDEwLDB4ZmIsMHg0OCwweDM4LDB4YzEsMHgwZiwweDMwLDB4MDMsMHgyYywweDA0IH19LAorIHsxNiwgMHhhYmEwLCAwLCB7MHhmYiwweDA4LDB4MzIsMHhjMCwweDBjLDB4YjAsMHgwYiwweDkwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWJiMCwgMCwgezB4YzgsMHgwNSwweDNjLDB4MDAsMHg4ZiwweDAwLDB4NjQsMHgyOSwweDI4LDB4ODAsMHgwMywweGVjLDB4MDIsMHhlOCwweDA0LDB4YTggfX0sCisgezE2LCAweGFiYzAsIDAsIHsweDU2LDB4MDgsMHhmYywweDA3LDB4ZTAsMHgwMCwweDBmLDB4YTAsMHhiZiwweGMwLDB4MGIsMHg5NSwweDAyLDB4YTAsMHgwMCwweGJiIH19LAorIHsxNiwgMHhhYmQwLCAwLCB7MHgwNSwweDM3LDB4YzAsMHg4OSwweGYwLDB4MGEsMHgwZCwweGM4LDB4YmYsMHgwOCwweDJhLDB4ODAsMHgwOCwweGYwLDB4MDIsMHgzMiB9fSwKKyB7MTYsIDB4YWJlMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAxLDB4YjMsMHgwMiwweDI0LDB4ZTAgfX0sCisgezE2LCAweGFiZjAsIDAsIHsweDBhLDB4MzAsMHgxMiwweDgwLDB4MDMsMHhhMywweDAwLDB4YTgsMHgwMCwweDAyLDB4YjgsMHgyMiwweGMwLDB4MDAsMHhiMywweDAwIH19LAorIHsxNiwgMHhhYzAwLCAwLCB7MHgyOCwweGMxLDB4MGIsMHgwNCwweDAyLDB4MDgsMHgwMCwweGI5LDB4NDAsMHgyOCwweGMwLDB4MGIsMHgzMCwweDAyLDB4MDMsMHgwNCB9fSwKKyB7MTYsIDB4YWMxMCwgMCwgezB4YjMsMHg0NCwweDIwLDB4MDAsMHg0YSwweDMwLDB4MDIsMHgzOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFjMjAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDIwLDB4MTcsMHhhMCwweDY1LDB4ZWMsMHgwOCwweDM4LDB4MDIsMHhjMiwweDQxLDB4YjMsMHg5MiwweDJiIH19LAorIHsxNiwgMHhhYzMwLCAwLCB7MHg2NCwweDBhLDB4MzgsMHgwMiwweDM2LDB4MDEsMHhiNywweDkwLDB4MmQsMHhlMCwweDAzLDB4ZjgsMHgwMCwweDlhLDB4MDAsMHhiNSB9fSwKKyB7MTYsIDB4YWM0MCwgMCwgezB4ODAsMHgyZCwweGUwLDB4ODksMHg3OCwweDEyLDB4MWUsMHgwMCwweGI3LDB4ODAsMHgyOSwweGUwLDB4MGEsMHg3OCwweDAyLDB4MDggfX0sCisgezE2LCAweGFjNTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweDczLDB4YjAsMHgyNCwweGM4IH19LAorIHsxNiwgMHhhYzYwLCAwLCB7MHg0ZSwweDMwLDB4MGEsMHg4MCwweDAyLDB4ZTIsMHgwMCwweDM4LDB4OTQsMHgwZSwweDMxLDB4YTIsMHhjOCwweDAwLDB4NzMsMHgwMCB9fSwKKyB7MTYsIDB4YWM3MCwgMCwgezB4MTgsMHhjNCwweDA1LDB4MDAsMHgwMywweDAwLDB4MDAsMHhmMywweDAwLDB4MzgsMHhjMCwweDA3LDB4YjEsMHgwMywweDAwLDB4MDAgfX0sCisgezE2LCAweGFjODAsIDAsIHsweGYzLDB4MDEsMHgzMCwweDQxLDB4MGUsMHhiMCwweDAzLDB4OTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhYzkwLCAwLCB7MHg0MCwweDFkLDB4YmQsMHgwMCwweGVmLDB4MTAsMHgyNiwweGM4LDB4MDMsMHhiMSwweDAzLDB4ZTAsMHgwMCwweGVhLDB4ODEsMHg3OCB9fSwKKyB7MTYsIDB4YWNhMCwgMCwgezB4YzUsMHgwYywweGI1LDB4ZTMsMHhkYywweDAwLDB4YzMsMHgwMCwweDNlLDB4YzEsMHgwZiwweGYwLDB4ODMsMHhiMCwweDAwLDB4ZmYgfX0sCisgezE2LCAweGFjYjAsIDAsIHsweDAwLDB4MzcsMHhjMCwweDBkLDB4ZjQsMHgwMywweGU0LDB4MDAsMHhmNywweDAwLDB4M2YsMHg0MCwweDBkLDB4ZjAsMHgwMywweGQwIH19LAorIHsxNiwgMHhhY2MwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVkLDB4MTAsMHhjYiwweDI4LDB4M2UsMHhjMCB9fSwKKyB7MTYsIDB4YWNkMCwgMCwgezB4MGQsMHhiMCwweDEzLDB4YWMsMHgxMCwweGZiLDB4MDAsMHgzYSwweDgwLDB4MDQsMHhiNCwweDAzLDB4YWMsMHgwMCwweGZiLDB4MDQgfX0sCisgezE2LCAweGFjZTAsIDAsIHsweDNlLDB4YzAsMHgwZiwweGE0LDB4YjMsMHhlMCwweDAwLDB4ZmIsMHg4MCwweDMyLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhlOCwweDAwIH19LAorIHsxNiwgMHhhY2YwLCAwLCB7MHhmYiwweDQ4LDB4YjIsMHg4MCwweDBmLDB4YjAsMHg0MywweGVhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWQwMCwgMCwgezB4NDgsMHgxMSwweDljLDB4MDIsMHg4NywweDQ0LDB4MzgsMHhjMCwweDhkLDB4MzAsMHgwMiwweDRjLDB4MDAsMHhmZiwweDAwLDB4MjEgfX0sCisgezE2LCAweGFkMTAsIDAsIHsweGMwLDB4MDgsMHg3MCwweDAzLDB4OWMsMHgwMCwweGIzLDB4NTAsMHgyMSwweGQ0LDB4NGUsMHg2MiwweDAyLDB4ZDAsMHgwMCwweGJmIH19LAorIHsxNiwgMHhhZDIwLCAwLCB7MHgwMCwweDM1LDB4ZDQsMHgwOSwweDcwLDB4MjIsMHhkOCwweDAwLDB4YmYsMHgyMiwweDIxLDB4YzAsMHgwYiwweDcyLDB4MDIsMHhkMiB9fSwKKyB7MTYsIDB4YWQzMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDQwLDB4ODcsMHg4MCwweDJkLDB4ZTAgfX0sCisgezE2LCAweGFkNDAsIDAsIHsweDA5LDB4NzgsMHgwMiwweGRlLDB4MDAsMHhiNiwweDgwLDB4MjksMHhhMSwweDI4LDB4N2EsMHgzMiwweGRlLDB4MDAsMHgzNywweGEwIH19LAorIHsxNiwgMHhhZDUwLCAwLCB7MHgyNSwweGUwLDB4MDksMHg3OCwweDA2LDB4ZDIsMHgwMCwweGI3LDB4ODAsMHgyMSwweGU4LDB4MGIsMHg3OSwweDAyLDB4ZGUsMHgwMCB9fSwKKyB7MTYsIDB4YWQ2MCwgMCwgezB4YjcsMHg5MCwweDIxLDB4ZTAsMHgwYiwweDc5LDB4MDIsMHhmMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFkNzAsIDAsIHsweDQ4LDB4MTQsMHhjYywweDA0LDB4ODMsMHgwMSwweDI4LDB4YzAsMHg4OSwweGIwLDB4MGEsMHg0ZiwweDAwLDB4YjIsMHgwMCwweDIwIH19LAorIHsxNiwgMHhhZDgwLCAwLCB7MHhjNCwweDg4LDB4MzAsMHgxNiwweGNmLDB4MDAsMHhiYiwweDA0LDB4MjAsMHhjMSwweDBhLDB4MzIsMHgwNiwweGMyLDB4MDAsMHhiMyB9fSwKKyB7MTYsIDB4YWQ5MCwgMCwgezB4MDAsMHgyNCwweGMwLDB4MDksMHgzMCwweDQyLDB4ZWYsMHgxMCwweGIzLDB4MDAsMHgyMCwweGMwLDB4MGIsMHgzMCwweDAyLDB4ZDIgfX0sCisgezE2LCAweGFkYTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweDRhLDB4MDAsMHgzZSwweDgwIH19LAorIHsxNiwgMHhhZGIwLCAwLCB7MHgyZCwweGEwLDB4MGIsMHhhYSwweDgwLDB4ZmUsMHgwMCwweDJiLDB4ODAsMHgwYywweGEwLDB4NDMsMHhmYiwweDMwLDB4ZmEsMHgwMCB9fSwKKyB7MTYsIDB4YWRjMCwgMCwgezB4M2UsMHg4MCwweDBmLDB4YTAsMHg4MywweGZhLDB4MDQsMHhmZSwweDE4LDB4MjIsMHg4MCwweDBmLDB4YTAsMHgwMywweGZhLDB4ODQgfX0sCisgezE2LCAweGFkZDAsIDAsIHsweGYyLDB4MDAsMHgzMywweGEyLDB4MGYsMHhhMCwweDAzLDB4ZjIsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhZGUwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGYwLDB4MDAsMHgzZSwweDAwLDB4MmYsMHg4MCwweDAzLDB4YTAsMHgyMCwweGZjLDB4MDIsMHgzZSB9fSwKKyB7MTYsIDB4YWRmMCwgMCwgezB4MDAsMHgxZiwweDg0LDB4MDMsMHhhMCwweDAwLDB4ZjgsMHg0MCwweDNlLDB4MDAsMHg0ZiwweDgwLDB4MDEsMHhlMCwweDQwLDB4ZjggfX0sCisgezE2LCAweGFlMDAsIDAsIHsweDQwLDB4M2UsMHgwMCwweDBkLDB4ODAsMHgxMywweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyIH19LAorIHsxNiwgMHhhZTEwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGM2LDB4MDAsMHhkOSwweDAwLDB4MzYsMHg0MCB9fSwKKyB7MTYsIDB4YWUyMCwgMCwgezB4MGYsMHg5MCwweDBiLDB4MDQsMHgwMCwweGM5LDB4MDAsMHgzNiwweDY4LDB4NmMsMHg5NCwweDAzLDB4ZTQsMHgyMCwweGI5LDB4OTAgfX0sCisgezE2LCAweGFlMzAsIDAsIHsweDM2LDB4NDAsMHgwYywweDk0LDB4MDMsMHhlNCwweDAwLDB4MjksMHg4MCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHgyNCwweDIwIH19LAorIHsxNiwgMHhhZTQwLCAwLCB7MHhjOSwweDAwLDB4MzYsMHg0MCwweDBmLDB4OTAsMHgwMywweGMyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWU1MCwgMCwgezB4ODAsMHgwNCwweDY2LDB4NTAsMHg4OSwweDAwLDB4MjAsMHg1MCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDksMHhkOSwweDAwLDB4MjAgfX0sCisgezE2LCAweGFlNjAsIDAsIHsweDQ4LDB4NDgsMHg5MCwweDA2LDB4ZTQsMHgwNCwweDk5LDB4YTAsMHgyMiwweDQwLDB4MGQsMHhiOCwweDIyLDB4NjQsMHgwMCwweDA5IH19LAorIHsxNiwgMHhhZTcwLCAwLCB7MHg1MCwweDMyLDB4NDAsMHgwYiwweDkwLDB4MDIsMHgyNywweDkwLDB4ODksMHg0MCwweDJhLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhlMCB9fSwKKyB7MTYsIDB4YWU4MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHgyNCwweDAwLDB4OTksMHgwMCwweDY2LDB4NDIgfX0sCisgezE2LCAweGFlOTAsIDAsIHsweDBhLDB4ZDAsMHgxMiwweDM0LDB4MDAsMHg4NSwweDAwLDB4MjYsMHg0MCwweDRhLDB4OTAsMHgwMiwweGU0LDB4MDEsMHhiOSwweDAxIH19LAorIHsxNiwgMHhhZWEwLCAwLCB7MHgyNCwweDQwLDB4NTgsMHg5MCwweDEyLDB4YzQsMHgwMCwweDI5LDB4NDAsMHgyZSwweDQwLDB4MGIsMHgxMCwweDBhLDB4MjQsMHg4MCB9fSwKKyB7MTYsIDB4YWViMCwgMCwgezB4ODksMHgwNSwweDI2LDB4NDEsMHgwYiwweDkwLDB4MDIsMHhjNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFlYzAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4ODEsMHgyMCwweDYxLDB4NDgsMHgwOCwweDUyLDB4MDIsMHgxNCwweDgxLDB4OTUsMHgyMCwweDIwIH19LAorIHsxNiwgMHhhZWQwLCAwLCB7MHg0MCwweDBhLDB4MzYsMHgwMiwweGM0LDB4MDAsMHhiMSwweDIwLDB4MDAsMHg0OCwweDQxLDB4MTAsMHg0MiwweDQ0LDB4MDEsMHhhMSB9fSwKKyB7MTYsIDB4YWVlMCwgMCwgezB4MDAsMHgyNCwweDQ4LDB4MGIsMHgxMiwweDEyLDB4MDQsMHg4MCwweDgxLDB4MjAsMHgyOCwweDQ4LDB4MGIsMHgxMiwweDAyLDB4Y2EgfX0sCisgezE2LCAweGFlZjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGQ4LDB4NTAsMHgzNiwweDAwIH19LAorIHsxNiwgMHhhZjAwLCAwLCB7MHgwZSwweDg1LDB4MjMsMHgyMSwweDQyLDB4OGMsMHg1NCwweDM0LDB4MTQsMHgwZSwweDgwLDB4MDIsMHhlMSwweDQwLDB4ZjgsMHg1MCB9fSwKKyB7MTYsIDB4YWYxMCwgMCwgezB4MzYsMHgxNCwweDA0LDB4ODAsMHgwMywweGUxLDB4NDQsMHhlOCwweDUwLDB4N2UsMHgxNSwweDBmLDB4ODUsMHgwMywweDIxLDB4NDIgfX0sCisgezE2LCAweGFmMjAsIDAsIHsweDRhLDB4MDAsMHgzNiwweDE0LDB4MGYsMHg4MCwweDAzLDB4ZWUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhZjMwLCAwLCB7MHg5OCwweDFkLDB4YzQsMHg0MCwweGY5LDB4MTAsMHgxZSwweDQ0LDB4NGUsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGY5LDB4MTAsMHgzZiB9fSwKKyB7MTYsIDB4YWY0MCwgMCwgezB4YzAsMHgwZCwweDkxLDB4MDMsMHhmNCwweDAwLDB4ZDksMHgxNCwweDNlLDB4NDQsMHgwZiwweDkwLDB4MDMsMHg3NCwweDAwLDB4ZGQgfX0sCisgezE2LCAweGFmNTAsIDAsIHsweDAwLDB4N2EsMHg0NCwweDBmLDB4OTEsMHgwMywweGY0LDB4NDAsMHhmOSwweDM4LDB4M2YsMHg0NCwweDBmLDB4OTMsMHg4MywweGU3IH19LAorIHsxNiwgMHhhZjYwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMSwweGY2LDB4ODAsMHhmOSwweGE0LDB4M2YsMHg2OCB9fSwKKyB7MTYsIDB4YWY3MCwgMCwgezB4MGUsMHg5ZSwweDQzLDB4NjcsMHg4MCwweGQ5LDB4ZTQsMHgzZiwweDQxLDB4MGYsMHhkOCwweDQzLDB4MDQsMHgwMCwweGVkLDB4YzAgfX0sCisgezE2LCAweGFmODAsIDAsIHsweDM2LDB4NDAsMHgwYywweDkwLDB4MDMsMHhlNCwweDAwLDB4ZDUsMHg0MCwweDMyLDB4NDAsMHgwYywweDkwLDB4MDMsMHhmNCwweDAwIH19LAorIHsxNiwgMHhhZjkwLCAwLCB7MHhkZCwweDAwLDB4MzIsMHg0MCwweDJjLDB4OWEsMHgwMywweGM2LDB4MDEsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWZhMCwgMCwgezB4MzgsMHgxMCwweGUwLDB4MDAsMHhlOCwweGMwLDB4MmUsMHgxNCwweDRkLDB4OGYsMHgyMiwweDIzLDB4YzAsMHhmOCwweGYwLDB4YWEgfX0sCisgezE2LCAweGFmYjAsIDAsIHsweDAwLDB4MGMsMHg4MCwweDAzLDB4YTIsMHhhMCwweGQ4LDB4ODIsMHgyMiwweDAwLDB4MDgsMHg4MCwweDAyLDB4ZTgsMHgwMCwweGQ4IH19LAorIHsxNiwgMHhhZmMwLCAwLCB7MHg4MCwweDJhLDB4MDAsMHgwOCwweDgwLDB4MDIsMHhlOCwweDA4LDB4ODgsMHhhOCwweDM2LDB4MDAsMHg0OCwweDhhLDB4ODIsMHhjZSB9fSwKKyB7MTYsIDB4YWZkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNSwweDAwLDB4YjEsMHg0OCwweDJlLDB4NDAgfX0sCisgezE2LCAweGFmZTAsIDAsIHsweDBhLDB4MTIsMHgyMiwweDQ0LDB4MDAsMHg5MSwweDA0LDB4YTQsMHg0MSwweDBhLDB4OTQsMHgwNiwweDI0LDB4MDAsMHg5MSwweDQyIH19LAorIHsxNiwgMHhhZmYwLCAwLCB7MHgyNCwweDQxLDB4MDksMHgxMCwweDAyLDB4ZTQsMHgwMSwweDkxLDB4MjAsMHgyNCwweDQwLDB4MDksMHgxMCwweDAyLDB4YzQsMHgwMSB9fSwKKyB7MTYsIDB4YjAwMCwgMCwgezB4OTEsMHgwMCwweDJjLDB4NDAsMHgwOSwweDE0LDB4MDIsMHhjMiwweDAxLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIwMTAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAwLDB4YTksMHgwMCwweDJlLDB4NDAsMHg0OCwweDEwLDB4MDIsMHgyNCwweDAwLDB4YjksMHg0MCwweGFhIH19LAorIHsxNiwgMHhiMDIwLCAwLCB7MHg0MCwweDE4LDB4YjAsMHgwMiwweGU0LDB4MDgsMHg5OSwweDAwLDB4MjIsMHg0MCwweDE5LDB4OTAsMHg0NiwweGU0LDB4ODAsMHg5OSB9fSwKKyB7MTYsIDB4YjAzMCwgMCwgezB4MDQsMHgyZSwweDQwLDB4MDksMHg5MCwweDAyLDB4ZTQsMHgwMSwweDk5LDB4MDQsMHgyNiwweDUwLDB4MDksMHg5MCwweDAyLDB4YzYgfX0sCisgezE2LCAweGIwNDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDExLDB4ZTQsMHgwMCwweGY5LDB4MDYsMHgzYywweDQwIH19LAorIHsxNiwgMHhiMDUwLCAwLCB7MHgwYSwweDkwLDB4MDMsMHg2NCwweDAyLDB4ZDksMHgwMCwweGI2LDB4NTAsMHgwZSwweDkwLDB4MjMsMHgyNiwweDAxLDB4ZjksMHgwMCB9fSwKKyB7MTYsIDB4YjA2MCwgMCwgezB4MzYsMHg0MCwweDI5LDB4OTQsMHg4MywweGU0LDB4MDAsMHhkOSwweDQ4LDB4MzYsMHg0MCwweDBkLDB4OTAsMHgwMywweGM3LDB4MDAgfX0sCisgezE2LCAweGIwNzAsIDAsIHsweGQxLDB4MDcsMHgzYSwweDUwLDB4Y2QsMHg5MCwweDAzLDB4ZTgsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMDgwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwOCwweGU5LDB4MDAsMHgzZSwweDQwLDB4OGYsMHg5MCwweDAzLDB4YzQsMHgwOCwweGYxLDB4MDAsMHgzYSB9fSwKKyB7MTYsIDB4YjA5MCwgMCwgezB4NjgsMHg4ZiwweDkwLDB4MDMsMHhhNCwweDQxLDB4ZjksMHgwMCwweGJlLDB4NDAsMHgwZSwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjkgfX0sCisgezE2LCAweGIwYTAsIDAsIHsweGMwLDB4MzgsMHg0MCwweDJlLDB4OTAsMHgwMywweGU2LDB4NDAsMHhlOSwweDAwLDB4M2UsMHg2OCwweDA2LDB4OTAsMHgwMywweGNhIH19LAorIHsxNiwgMHhiMGIwLCAwLCB7MHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDAsMHhkOCwweDA1LDB4M2UsMHgwMCB9fSwKKyB7MTYsIDB4YjBjMCwgMCwgezB4MDcsMHg4MCwweDBiLDB4MjAsMHgwMCwweGU4LDB4NDAsMHgzZSwweDEwLDB4MGQsMHg4MiwweDAzLDB4NjAsMHgwMCwweGM4LDB4MDAgfX0sCisgezE2LCAweGIwZDAsIDAsIHsweGIyLDB4MDAsMHg4ZCwweDgzLDB4MDMsMHhlMCwweDAwLDB4ZDgsMHg1MCwweDNhLDB4MDAsMHgxZSwweDgwLDB4MDMsMHhlMSwweDI0IH19LAorIHsxNiwgMHhiMGUwLCAwLCB7MHhmOCwweDAwLDB4YjIsMHgwMCwweDBmLDB4ODAsMHgwMywweDAyLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjBmMCwgMCwgezB4MjgsMHgwNSwweDM4LDB4MDAsMHg4YSwweDA0LDB4MmYsMHg4NCwweDZhLDB4YTAsMHgwYiwweGU4LDB4MDgsMHg4ZSwweDAwLDB4M2QgfX0sCisgezE2LCAweGIxMDAsIDAsIHsweDgwLDB4ODgsMHhlYywweDAzLDB4NjgsMHgxMCwweGE2LDB4MDEsMHgzNiwweDgwLDB4MDgsMHhhOCwweDAwLDB4YzgsMHgxMCwweDhlIH19LAorIHsxNiwgMHhiMTEwLCAwLCB7MHgxMCwweDIyLDB4ODAsMHgwOCwweGEwLDB4MDIsMHhmYiwweDIwLDB4YmUsMHg1MSwweDJhLDB4ODAsMHgwYiwweGEwLDB4MDIsMHg4MiB9fSwKKyB7MTYsIDB4YjEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0MSwweDIxLDB4OTMsMHgwMCwweDJjLDB4ZjAgfX0sCisgezE2LCAweGIxMzAsIDAsIHsweDM5LDB4MzAsMHgwNiwweDBjLDB4MDAsMHhhMywweDAwLDB4MjgsMHgwOCwweDI4LDB4YmMsMHgwMiwweDJjLDB4MDAsMHg4MywweDgwIH19LAorIHsxNiwgMHhiMTQwLCAwLCB7MHgyYSwweGMwLDB4MDgsMHgzMCwweDAwLDB4Y2MsMHgwMCwweDlhLDB4ODAsMHgyOCwweGMwLDB4MGEsMHgzMCwweDAyLDB4Y2QsMHgwMCB9fSwKKyB7MTYsIDB4YjE1MCwgMCwgezB4YjMsMHgwNCwweDYyLDB4YzEsMHgwYiwweDMwLDB4MDIsMHgwYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIxNjAsIDAsIHsweGEwLDB4MDEsMHgxZSwweDA0LDB4MDcsMHgxMSwweDJjLDB4ZDAsMHgwYSwweDMyLDB4MjIsMHhkYywweGMxLDB4ODcsMHgwMCwweDZkIH19LAorIHsxNiwgMHhiMTcwLCAwLCB7MHhkMCwweDA4LDB4MzQsMHgwMiwweDdjLDB4MDAsMHhhNywweDA4LDB4MjQsMHhjOCwweDA4LDB4NzAsMHgwMiwweGRjLDB4ODAsMHgwZiB9fSwKKyB7MTYsIDB4YjE4MCwgMCwgezB4MDAsMHgyMSwweGM0LDB4MDgsMHg3MywweDA2LDB4ZGMsMHgwMCwweGIyLDB4MDAsMHg2MSwweGM4LDB4MGIsMHgzYSwweDAyLDB4ODggfX0sCisgezE2LCAweGIxOTAsIDAsIHsweDA0LDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MGEsMHgwMCwweDU3LDB4ODEsMHgyZCwweGEwIH19LAorIHsxNiwgMHhiMWEwLCAwLCB7MHgyZCwweDdjLDB4MDIsMHgzZSwweDgyLDB4ZTMsMHhlMCwweDNiLDB4ZTAsMHgwYywweDc4LDB4MDMsMHgxZSwweDIwLDB4YzcsMHg4MCB9fSwKKyB7MTYsIDB4YjFiMCwgMCwgezB4YjksMHhlOCwweDJjLDB4NzgsMHgwMywweGZmLDB4ODAsMHhkNiwweDgwLDB4M2IsMHhlYywweDAyLDB4N2EsMHgwMywweGRlLDB4MDAgfX0sCisgezE2LCAweGIxYzAsIDAsIHsweGY3LDB4ODEsMHgzMSwweGVjLDB4OGYsMHg3YywweDAzLDB4MGEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMWQwLCAwLCB7MHgwOCwweDFkLDB4YWMsMHgwMCwweGZiLDB4MDAsMHgxZSwweDgwLDB4MjMsMHhiNiwweDgzLDB4ZWQsMHhhMCwweGRiLDB4NjQsMHgzZSB9fSwKKyB7MTYsIDB4YjFlMCwgMCwgezB4YzAsMHgwZSwweGIwLDB4MDMsMHhlZCwweGMwLDB4ZjIsMHgwMCwweDNlLDB4ZDQsMHgwYSwweGIwLDB4MDMsMHhlYywweDMwLDB4ZWUgfX0sCisgezE2LCAweGIxZjAsIDAsIHsweDY0LDB4M2UsMHhjMCwweDA3LDB4YjAsMHhjMywweGU4LDB4MDAsMHhmYiwweDAxLDB4M2UsMHhjOCwweDBmLDB4YjgsMHgwMywweGMyIH19LAorIHsxNiwgMHhiMjAwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGY2LDB4MDAsMHhlZiwweDgwLDB4M2IsMHhlMCB9fSwKKyB7MTYsIDB4YjIxMCwgMCwgezB4MGYsMHhmOCwweDYzLDB4N2UsMHgwNCwweGNmLDB4YzAsMHhiNywweDIwLDB4MGUsMHhmOCwweDAzLDB4ZmMsMHgwMCwweGM3LDB4ODAgfX0sCisgezE2LCAweGIyMjAsIDAsIHsweDMzLDB4ZjAsMHgwYywweGNjLDB4MDMsMHhmZSwweDA4LDB4ZjcsMHhjMSwweDMzLDB4ZTAsMHg0ZiwweGY4LDB4MDMsMHhiMiwweDQwIH19LAorIHsxNiwgMHhiMjMwLCAwLCB7MHhmZiwweGEwLDB4MzEsMHhlNiwweDBjLDB4ZjgsMHgwMywweDEwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjI0MCwgMCwgezB4YTgsMHgxMSwweDljLDB4MDAsMHhlZiwweDAyLDB4MjEsMHg0MCwweDJkLDB4NzAsMHgwMiwweDFjLDB4MDAsMHhmNywweDEwLDB4MjkgfX0sCisgezE2LCAweGIyNTAsIDAsIHsweDQwLDB4MDgsMHg3MCwweDIyLDB4ZmMsMHhjMCwweGE3LDB4MDAsMHgzZCwweGMwLDB4MDgsMHg0MCwweDAyLDB4ZGMsMHgwMCwweGI3IH19LAorIHsxNiwgMHhiMjYwLCAwLCB7MHg0MCwweDIxLDB4YzAsMHgwYiwweDcwLDB4MDIsMHhkYSwweDgwLDB4YjcsMHgyNCwweDI5LDB4YzYsMHg0OCwweGYwLDB4MDIsMHgyYSB9fSwKKyB7MTYsIDB4YjI3MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4YTcsMHgwMCwweDI4LDB4ODQgfX0sCisgezE2LCAweGIyODAsIDAsIHsweDBiLDB4MzAsMHgwMiwweDBjLDB4MDAsMHg5MywweDAwLDB4MjUsMHg4MCwweDBhLDB4NjEsMHgwMiwweGRjLDB4MDEsMHhhNywweDEwIH19LAorIHsxNiwgMHhiMjkwLCAwLCB7MHgyNCwweGMwLDB4MDgsMHg0MCwweDgyLDB4ZGMsMHgwMCwweDlmLDB4MDAsMHgyNSwweGM0LDB4MGIsMHg3MCwweDAyLDB4OTQsMHgyNSB9fSwKKyB7MTYsIDB4YjJhMCwgMCwgezB4YjcsMHgzMiwweDIzLDB4YzQsMHgxYiwweDcwLDB4MDIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIyYjAsIDAsIHsweDIwLDB4MTQsMHhjYywweDBjLDB4YTMsMHgwMCwweDIwLDB4MDAsMHgyOSwweDMwLDB4MGEsMHgwYywweDAwLDB4YTMsMHgwMCwweDZjIH19LAorIHsxNiwgMHhiMmMwLCAwLCB7MHgwMCwweDA4LDB4MTAsMHg0MiwweGNkLDB4MTAsMHhhYSwweDAwLDB4YWMsMHhjMCwweDAwLDB4MDQsMHgwMiwweGNkLDB4MDAsMHhiYiB9fSwKKyB7MTYsIDB4YjJkMCwgMCwgezB4MTAsMHgyNCwweGMwLDB4MDMsMHgzMCwweDQyLDB4YzMsMHgwOSwweGIzLDB4MDAsMHgyYywweGQwLDB4MGEsMHgzMCwweDAyLDB4MTggfX0sCisgezE2LCAweGIyZTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4ODAsMHgwMCwweGVmLDB4MDAsMHgzYSwweDQwIH19LAorIHsxNiwgMHhiMmYwLCAwLCB7MHgwNywweGYwLDB4NDMsMHgzYywweDAwLDB4OWYsMHhjMCwweGI2LDB4MTQsMHgwZSwweDgwLDB4MDYsMHhmYywweDAxLDB4Y2IsMHgwMSB9fSwKKyB7MTYsIDB4YjMwMCwgMCwgezB4MzcsMHhjMCwweGFjLDB4YjQsMHgwMiwweGZjLDB4MDAsMHhkOSwweDAxLDB4MzcsMHhjMCwweDRiLDB4ZjAsMHgxMywweGFlLDB4MDggfX0sCisgezE2LCAweGIzMTAsIDAsIHsweGZiLDB4MDAsMHgzMywweGQwLDB4MmUsMHhmMCwweDBiLDB4MmEsMHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMzIwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGZiLDB4MDUsMHgzZSwweDQwLDB4MGYsMHgzMCwweDAzLDB4YWMsMHgxNCwweGZiLDB4YTAsMHgzYSB9fSwKKyB7MTYsIDB4YjMzMCwgMCwgezB4YzAsMHgwZiwweDg0LDB4NDMsMHhlYywweDAxLDB4ZjksMHg0MCwweDNlLDB4YzAsMHgwZiwweGEyLDB4MDMsMHhlYywweDIxLDB4ZjkgfX0sCisgezE2LCAweGIzNDAsIDAsIHsweDAwLDB4M2EsMHhjMCwweDBmLDB4YjAsMHgwMywweGU0LDB4MjAsMHhmMCwweDAwLDB4YmEsMHhjMCwweDBkLDB4YjAsMHgwMywweGUwIH19LAorIHsxNiwgMHhiMzUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGY4LDB4MDAsMHhkNywweDAxLDB4MzUsMHg2OCB9fSwKKyB7MTYsIDB4YjM2MCwgMCwgezB4NmQsMHhmMCwweDAzLDB4M2MsMHgwMSwweGU3LDB4MDAsMHgzMywweGMwLDB4MGQsMHhjMCwweDAzLDB4ZmMsMHgyNCwweGNmLDB4MDIgfX0sCisgezE2LCAweGIzNzAsIDAsIHsweDM3LDB4YzAsMHgwZCwweGQyLDB4MDIsMHhmYywweDAwLDB4ZGYsMHgwMSwweDMzLDB4YzAsMHg1ZSwweDcwLDB4MzMsMHgxYywweDE4IH19LAorIHsxNiwgMHhiMzgwLCAwLCB7MHhjZiwweDQxLDB4MzEsMHhjMiwweDBjLDB4ZjAsMHgwMywweDQwLDB4NDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjM5MCwgMCwgezB4ODEsMHgwMCwweDZjLDB4MDAsMHg4YiwweDAwLDB4MjIsMHg1MiwweDJhLDB4YjAsMHgwMywweDZjLDB4MDAsMHhhYiwweDAwLDB4MjggfX0sCisgezE2LCAweGIzYTAsIDAsIHsweGMwLDB4MGEsMHg4YywweDAyLDB4ZWMsMHgxMCwweDhiLDB4ZTAsMHgyMiwweGMwLDB4MGYsMHg4MCwweDAyLDB4Y2MsMHgwMCwweDhiIH19LAorIHsxNiwgMHhiM2IwLCAwLCB7MHg4MCwweDIyLDB4YzAsMHgwOCwweGIwLDB4MDIsMHgyYSwweDEwLDB4ZDksMHg4MCwweDIyLDB4YzAsMHhjOCwweGIwLDB4MDIsMHhlMCB9fSwKKyB7MTYsIDB4YjNjMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyNCwweDAxLDB4OWIsMHgwMCwweDI2LDB4ODAgfX0sCisgezE2LCAweGIzZDAsIDAsIHsweDI5LDB4YjAsMHg2MiwweDBjLDB4MDAsMHhhYiwweDAxLDB4NmEsMHgwMCwweDA4LDB4OTgsMHgwMiwweGNjLDB4MDAsMHg5YiwweDgzIH19LAorIHsxNiwgMHhiM2UwLCAwLCB7MHgyZSwweGMwLDB4Y2IsMHhiNCwweDEyLDB4ZWMsMHgwMywweDhiLDB4ODAsMHgyOCwweGMwLDB4MGEsMHhiMCwweDA2LDB4YTIsMHgwMCB9fSwKKyB7MTYsIDB4YjNmMCwgMCwgezB4OGIsMHgwMiwweDYyLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhlMCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI0MDAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAxLDB4ODMsMHgxNCwweDIwLDB4MDAsMHgwYSwweDMwLDB4MDIsMHg0YywweDAwLDB4ODMsMHgwMCwweDJhIH19LAorIHsxNiwgMHhiNDEwLCAwLCB7MHg0MCwweDBhLDB4MTAsMHgwMCwweGNjLDB4MDIsMHg5MywweDAwLDB4MjgsMHhjMCwweDBhLDB4MjAsMHgwMiwweGVjLDB4MDAsMHgwMyB9fSwKKyB7MTYsIDB4YjQyMCwgMCwgezB4MDAsMHgyMCwweGMwLDB4MDgsMHgzMCwweDE2LDB4MDAsMHg4MCwweDkxLDB4MDAsMHg2MCwweGMwLDB4MDgsMHgzMCwweDAyLDB4YzIgfX0sCisgezE2LCAweGI0MzAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGRiLDB4MDAsMHgzNiwweDgwIH19LAorIHsxNiwgMHhiNDQwLCAwLCB7MHgyZCwweGYwLDB4MDMsMHgzYywweDAwLDB4YWYsMHgwMCwweDNhLDB4ODAsMHgwZCwweDgwLDB4MDMsMHhmYywweDAwLDB4NWIsMHgwMCB9fSwKKyB7MTYsIDB4YjQ1MCwgMCwgezB4MzcsMHhjMCwweDA5LDB4OTAsMHgwMywweGZjLDB4MDAsMHhkZiwweDAwLDB4MzMsMHhjMCwweDBhLDB4ZjAsMHgwMywweGE0LDB4MjAgfX0sCisgezE2LCAweGI0NjAsIDAsIHsweGNiLDB4MDAsMHhiMywweGMwLDB4OGMsMHhiMCwweDAzLDB4NDAsMHgwMiwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNDcwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgwNCwweGZmLDB4MjAsMHgwZiwweDAwLDB4MjcsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHgyZCB9fSwKKyB7MTYsIDB4YjQ4MCwgMCwgezB4MDAsMHgwYiwweGQwLDB4MjcsMHhmYywweDAwLDB4ZWYsMHgwMCwweDM3LDB4YzAsMHgwZiwweGMwLDB4NDMsMHhmYywweDAwLDB4ZmYgfX0sCisgezE2LCAweGI0OTAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDBkLDB4ZjAsMHgwYiwweGUwLDB4MDAsMHhmNSwweDAwLDB4M2YsMHhjMCwweDFmLDB4ZjAsMHgwMywweGU4IH19LAorIHsxNiwgMHhiNGEwLCAwLCB7MHgwNywweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMSwweGY0LDB4YzAsMHhmYywweDIyLDB4N2YsMHhjMCB9fSwKKyB7MTYsIDB4YjRiMCwgMCwgezB4MGMsMHhkMCwweDQzLDB4MzYsMHgwMCwweGM0LDB4ODEsMHgzNCwweGMwLDB4MWMsMHg4OSwweDA3LDB4ZjIsMHg4MCwweGNmLDB4ODAgfX0sCisgezE2LCAweGI0YzAsIDAsIHsweDMzLDB4NjAsMHgwZiwweDc5LDB4MDMsMHgzYywweGUwLDB4Y2YsMHgwOCwweDMzLDB4NDgsMHgwZCwweGM0LDB4MDMsMHhmMCwweDUwIH19LAorIHsxNiwgMHhiNGQwLCAwLCB7MHhkYywweDkwLDB4MzcsMHhjYywweDBmLDB4ZjgsMHgwMywweGYwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjRlMCwgMCwgezB4ODAsMHgxMCwweGU5LDB4OTAsMHhiOCwweDgwLDB4N2UsMHhlNCwweDg4LDB4OTksMHgwYSwweDI2LDB4MDgsMHhhOSwweDgwLDB4MjIgfX0sCisgezE2LCAweGI0ZjAsIDAsIHsweGY0LDB4MmMsMHg5OSwweDAzLDB4YTcsMHgwMiwweDg5LDB4ODAsMHgyMiwweDM0LDB4MGIsMHg5YSwweDAzLDB4N2QsMHgwMCwweGRmIH19LAorIHsxNiwgMHhiNTAwLCAwLCB7MHg0OCwweDJiLDB4NjAsMHgwOCwweDA1LDB4MDIsMHhlNSwweDAwLDB4ODIsMHgyMCwweDIyLDB4YzQsMHg4YiwweGIwLDB4MDIsMHhlMCB9fSwKKyB7MTYsIDB4YjUxMCwgMCwgezB4MDYsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjNSwweDAwLDB4YjAsMHgxMCwweDJjLDB4YzAgfX0sCisgezE2LCAweGI1MjAsIDAsIHsweDJhLDB4MDAsMHgwMiwweGE0LDB4MDgsMHhhOCwweDA0LDB4ZTAsMHg4MCwweDBiLDB4MDAsMHgwMiwweGM0LDB4NDEsMHhiMiwweDA0IH19LAorIHsxNiwgMHhiNTMwLCAwLCB7MHhhNCwweDBhLDB4MGIsMHhiMCwweDAyLDB4OGMsMHg4MSwweDgzLDB4MjAsMHg2MCwweDUwLDB4OTgsMHgxMiwweDEyLDB4OGIsMHg4MCB9fSwKKyB7MTYsIDB4YjU0MCwgMCwgezB4ODksMHgwMCwweDJjLDB4YzgsMHgwYiwweDMwLDB4MDIsMHhlMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI1NTAsIDAsIHsweGMwLDB4MTEsMHhhYywweDIwLDB4YmIsMHgwMiwweDJhLDB4YzAsMHgwYSwweDg4LDB4MDIsMHhhNCwweDA4LDB4YTksMHg4MCwweGEyIH19LAorIHsxNiwgMHhiNTYwLCAwLCB7MHhlMSwweDFiLDB4OWMsMHgyMiwweGU2LDB4MDAsMHhiOCwweDQwLDB4MjYsMHgzMCwweDBiLDB4OTAsMHgwMiwweGNjLDB4MDEsMHg5MyB9fSwKKyB7MTYsIDB4YjU3MCwgMCwgezB4MDQsMHgyYSwweDQwLDB4MzksMHg5OCwweDgyLDB4ZWMsMHgxNCwweDhiLDB4NjUsMHgyYSwweGMwLDB4MGIsMHhiMiwweDAyLDB4ZjggfX0sCisgezE2LCAweGI1ODAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZTcsMHgwMCwweGI4LDB4NDgsMHgyZSwweDAwIH19LAorIHsxNiwgMHhiNTkwLCAwLCB7MHgwZSwweDg4LDB4NDMsMHg4NCwweDAwLDB4ZTMsMHhjMSwweDM2LDB4ZTgsMHgwZiwweDljLDB4MTIsMHhlMiwweDgwLDB4ZjMsMHhjMCB9fSwKKyB7MTYsIDB4YjVhMCwgMCwgezB4MzYsMHg3MCwweDVmLDB4YTgsMHgyMywweGFjLDB4MDEsMHhjYiwweDA0LDB4MjIsMHg0MCwweDRkLDB4ODQsMHgwMywweGUyLDB4MDAgfX0sCisgezE2LCAweGI1YjAsIDAsIHsweGQ4LDB4MDAsMHgzZSwweGMwLDB4MGYsMHg5MCwweDAzLDB4ZDAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNWMwLCAwLCB7MHhlMCwweDAxLDB4YjMsMHgwOSwweGZlLDB4MTAsMHgzZSwweDgxLDB4MGQsMHhjMCwweDAzLDB4NzQsMHgwYywweGZmLDB4MDAsMHgzZCB9fSwKKyB7MTYsIDB4YjVkMCwgMCwgezB4YzEsMHg4YywweGQwLDB4ODMsMHgxNCwweDAwLDB4Y2QsMHgyMCwweDNhLDB4NDAsMHgwZCwweGNhLDB4MDEsMHg3YywweDAwLDB4ZmYgfX0sCisgezE2LCAweGI1ZTAsIDAsIHsweDAwLDB4MWYsMHg0MCwweDBlLDB4YzAsMHgyMywweGYyLDB4NDYsMHhmZSwweDg0LDB4MzcsMHhjMCwweDBmLDB4ZDgsMHgwMywweGY4IH19LAorIHsxNiwgMHhiNWYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDAsMHhkZCwweDAyLDB4M2QsMHg0MCB9fSwKKyB7MTYsIDB4YjYwMCwgMCwgezB4MGUsMHg5MCwweDAzLDB4YWMsMHgwMCwweGViLDB4NDgsMHgzZSwweGQwLDB4MGMsMHg4MCwweDYzLDB4YTIsMHgwOCwweGNhLDB4MDAgfX0sCisgezE2LCAweGI2MTAsIDAsIHsweDMyLDB4MDgsMHgwYywweGIwLDB4MDMsMHhhYywweDA4LDB4ZWIsMHgwMCwweDNlLDB4NDAsMHgwYywweGQ0LDB4ODMsMHg1OCwweDIwIH19LAorIHsxNiwgMHhiNjIwLCAwLCB7MHhmOSwweDQyLDB4MzIsMHhjMCwweDBjLDB4YjAsMHgwMywweGQwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjYzMCwgMCwgezB4YzgsMHgwNSwweDI4LDB4MDIsMHhkYiwweDAwLDB4MmUsMHhlMCwweDI4LDB4M2EsMHgwMiwweDJlLDB4MDAsMHhkYiwweDYwLDB4NzYgfX0sCisgezE2LCAweGI2NDAsIDAsIHsweGUwLDB4MGQsMHg4YywweDAyLDB4ZTAsMHgwMCwweDg4LDB4MDIsMHgzNiwweDU4LDB4NjgsMHgxNSwweDgzLDB4N2MsMHgwOCwweGJmIH19LAorIHsxNiwgMHhiNjUwLCAwLCB7MHgwMCwweDJkLDB4NjAsMHgwOCwweDkwLDB4MDIsMHhhOSwweDAwLDB4YjMsMHgwNSwweDIzLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhmMiB9fSwKKyB7MTYsIDB4YjY2MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDEwLDB4ODAsMHgwMCwweDBjLDB4YzEgfX0sCisgezE2LCAweGI2NzAsIDAsIHsweDA4LDB4MWMsMHg4MiwweDA2LDB4MDAsMHg5MywweGMwLDB4MjAsMHhmNiwweDBhLDB4MjAsMHgwMiwweDA4LDB4MDAsMHg5MywweDAwIH19LAorIHsxNiwgMHhiNjgwLCAwLCB7MHgyNCwweDYwLDB4MDksMHgzYywweDAyLDB4MGMsMHgwMCwweDgzLDB4MDAsMHgyYywweDYwLDB4MDksMHgwMSwweDEyLDB4MDAsMHg0MCB9fSwKKyB7MTYsIDB4YjY5MCwgMCwgezB4YjAsMHgwMCwweGUwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHg3MCwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI2YTAsIDAsIHsweDIwLDB4NDEsMHgwYSwweDQwLDB4ODYsMHg4MSwweDJkLDB4ZTAsMHg1OCwweDE4LDB4MGEsMHgxNiwweGEwLDB4OTcsMHg4MCwweDI1IH19LAorIHsxNiwgMHhiNmIwLCAwLCB7MHhlOSwweDE5LDB4NzgsMHg4MiwweGQ2LDB4MDAsMHg5NywweDgwLDB4MjUsMHhhMCwweDE5LDB4ZjgsMHgwMiwweDVlLDB4MDAsMHhiNyB9fSwKKyB7MTYsIDB4YjZjMCwgMCwgezB4ODAsMHgyZCwweDYwLDB4MjgsMHg0OCwweDEyLDB4OTYsMHgwMCwweGI0LDB4ODAsMHgyMSwweGUwLDB4MjgsMHg3OCwweDAyLDB4YzggfX0sCisgezE2LCAweGI2ZDAsIDAsIHsweDA0LDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweDgxLDB4MzAsMHgzYywweGMyIH19LAorIHsxNiwgMHhiNmUwLCAwLCB7MHgwZSwweDAwLDB4MDIsMHg4NCwweDAwLDB4ZTMsMHg0MCwweDI4LDB4ZTgsMHg0YywweDI5LDB4MDMsMHgwYywweDAwLDB4ZDMsMHgwMCB9fSwKKyB7MTYsIDB4YjZmMCwgMCwgezB4MzQsMHhjNCwweDBkLDB4MzEsMHgwMywweDhjLDB4MDgsMHhlMywweDAwLDB4M2MsMHg0NiwweDBjLDB4MjAsMHgwMywweDAwLDB4ODAgfX0sCisgezE2LCAweGI3MDAsIDAsIHsweGYyLDB4MDAsMHgzMiwweGMwLDB4MGMsMHgzMCwweDAzLDB4ZDIsMHgwMiwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNzEwLCAwLCB7MHg0MCwweDE5LDB4YjgsMHgwMCwweGZmLDB4MTAsMHgyZiwweGMwLDB4MGYsMHhjMCwweDIzLDB4YzQsMHg4MCwweDdmLDB4MTAsMHgzZSB9fSwKKyB7MTYsIDB4YjcyMCwgMCwgezB4YzAsMHgwZiwweGIxLDB4MDMsMHhkYywweDAwLDB4ZTcsMHgwMCwweDNmLDB4ODAsMHgwNiwweGYxLDB4NDMsMHhmYywweDAwLDB4ZmYgfX0sCisgezE2LCAweGI3MzAsIDAsIHsweDA4LDB4N2QsMHg1MCwweDBlLDB4ZTEsMHgyMywweGI0LDB4MDgsMHhmZSwweDEwLDB4M2YsMHhjNCwweDBmLDB4ZjAsMHgwMywweGQwIH19LAorIHsxNiwgMHhiNzQwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGU0LDB4MDIsMHhjYywweDAwLDB4M2UsMHgwMCB9fSwKKyB7MTYsIDB4Yjc1MCwgMCwgezB4MmMsMHhjMCwweDAzLDB4MDQsMHgwMSwweGNiLDB4MDAsMHgzMywweDYwLDB4MmMsMHg5MCwweDEzLDB4ZTgsMHgwMCwweDczLDB4MDAgfX0sCisgezE2LCAweGI3NjAsIDAsIHsweGIyLDB4YzEsMHgwZiwweGEwLDB4MDMsMHhlYywweDgwLDB4ZmIsMHgyOCwweDNlLDB4NTQsMHgxZiwweGQwLDB4MDMsMHhmZSwweDAyIH19LAorIHsxNiwgMHhiNzcwLCAwLCB7MHhjOSwweDgwLDB4MzIsMHhjMCwweDBmLDB4YjAsMHgwMywweGNhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Yjc4MCwgMCwgezB4NDgsMHgxMSwweDgwLDB4MDAsMHg4NiwweDAwLDB4MmQsMHg4MCwweDA4LDB4MjAsMHgwMiwweDE0LDB4MDgsMHg4NywweDAwLDB4MjkgfX0sCisgezE2LCAweGI3OTAsIDAsIHsweDQwLDB4MDgsMHg3MCwweDAyLDB4ZGMsMHgwMCwweGI3LDB4MDAsMHgyMSwweGMwLDB4MGIsMHg2MCwweDAyLDB4NWMsMHhhMCwweDk3IH19LAorIHsxNiwgMHhiN2EwLCAwLCB7MHgyMCwweDJkLDB4NDgsMHgwYiwweDUwLDB4MDIsMHhkYywweDEwLDB4OGQsMHgwMCwweDIxLDB4YzgsMHgwYiwweDcwLDB4MDIsMHhkMiB9fSwKKyB7MTYsIDB4YjdiMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZiwweDAwLDB4ODUsMHg4MSwweDJjLDB4NjAgfX0sCisgezE2LCAweGI3YzAsIDAsIHsweDE4LDB4NTgsMHgwMiwweGRlLDB4MjAsMHhiNywweDgyLDB4MjgsMHg2MCwweDVhLDB4NzgsMHg1MiwweGRlLDB4MTAsMHhiZiwweDgwIH19LAorIHsxNiwgMHhiN2QwLCAwLCB7MHgyMSwweGUwLDB4NGIsMHg3OCwweDA2LDB4ZGUsMHg0MCwweGI3LDB4YTAsMHgyZCwweDY5LDB4OWIsMHg3OCwweDEyLDB4Y2UsMHgwMCB9fSwKKyB7MTYsIDB4YjdlMCwgMCwgezB4ODcsMHg4MCwweGUxLDB4ZTQsMHgwYiwweDc4LDB4MDIsMHhjMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI3ZjAsIDAsIHsweDQ4LDB4MTQsMHhlZSwweDAwLDB4ODMsMHgwMCwweDJjLDB4YzIsMHgwOCwweDM2LDB4MDIsMHg4YywweDA4LDB4ODMsMHhmMCwweDY4IH19LAorIHsxNiwgMHhiODAwLCAwLCB7MHg0MCwweDBhLDB4M2UsMHgwMiwweGNkLDB4NDAsMHhiMywweDAwLDB4MjAsMHhlMCwweDBiLDB4MzIsMHgwNiwweDRjLDB4MDAsMHg5YiB9fSwKKyB7MTYsIDB4YjgxMCwgMCwgezB4MDAsMHgwYywweDQwLDB4MGIsMHgzMCwweDAyLDB4Y2QsMHg4MCwweDgzLDB4MDgsMHgyMCwweGMwLDB4MGIsMHhiMSwweDAyLDB4ZGEgfX0sCisgezE2LCAweGI4MjAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YjgsMHgwMCwweGNlLDB4MDgsMHgzZiwweGIwIH19LAorIHsxNiwgMHhiODMwLCAwLCB7MHgwYywweGU0LDB4MjMsMHhkYSwweDAyLDB4ZGUsMHg0MCwweGJiLDB4YjIsMHgwZSwweGUyLDB4NDMsMHhmYSwweDAwLDB4ZmUsMHgwMCB9fSwKKyB7MTYsIDB4Yjg0MCwgMCwgezB4MzMsMHg5MCwweDBiLDB4ZTAsMHgwMywweGU4LDB4MDAsMHhmYSwweDAwLDB4M2UsMHg4MSwweDBiLDB4ZTAsMHgxMywweGY5LDB4MDggfX0sCisgezE2LCAweGI4NTAsIDAsIHsweGNlLDB4NDAsMHgzMiwweDgwLDB4MGYsMHhhOCwweDAzLDB4ZmEsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiODYwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgyNCwweDk4LDB4MDgsMHgzYywweDA0LDB4MGYsMHgwMCwweDBiLDB4NjAsMHgwMCwweGY4LDB4NDAsMHgyZSB9fSwKKyB7MTYsIDB4Yjg3MCwgMCwgezB4MDMsMHgwZCwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDYsMHgwYiwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZDggfX0sCisgezE2LCAweGI4ODAsIDAsIHsweDAwLDB4M2MsMHgwMCwweDAzLDB4OGMsMHgyMywweGUxLDB4MDAsMHhmOCwweDAwLDB4N2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyIH19LAorIHsxNiwgMHhiODkwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDIsMHhjOSwweDAwLDB4M2UsMHg0MCB9fSwKKyB7MTYsIDB4YjhhMCwgMCwgezB4OGMsMHg5MCwweDAzLDB4MjUsMHgwMCwweGU5LDB4ODAsMHgzMiwweDQ0LDB4MGYsMHg5NCwweDAyLDB4ZTQsMHgyMCwweGY5LDB4MDAgfX0sCisgezE2LCAweGI4YjAsIDAsIHsweDMyLDB4NzAsMHgwZiwweDlhLDB4NDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDMyLDB4NDAsMHgwYywweDEwLDB4MzMsMHgyNCwweDEwIH19LAorIHsxNiwgMHhiOGMwLCAwLCB7MHhmOSwweDAxLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweDAyLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjhkMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHg4OSwweDgyLDB4MmUsMHg0MCwweDI4LDB4OTAsMHgwMiwweDI0LDB4ODIsMHg4MSwweGMwLDB4YTIgfX0sCisgezE2LCAweGI4ZTAsIDAsIHsweDcwLDB4MGIsMHg5YywweDAyLDB4ZTQsMHgwMCwweDMxLDB4NDIsMHhhMiwweDYwLDB4MGIsMHg5NCwweDgyLDB4ZTQsMHgwMCwweGI5IH19LAorIHsxNiwgMHhiOGYwLCAwLCB7MHgwMCwweDJhLDB4NDAsMHgwOCwweDk0LDB4YTIsMHgyNSwweDAwLDB4YjksMHgwMCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MGEsMHgyMCB9fSwKKyB7MTYsIDB4YjkwMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4ODksMHg2NCwweDJlLDB4NDAgfX0sCisgezE2LCAweGI5MTAsIDAsIHsweDA4LDB4OTAsMHg0MiwweGE0LDB4MDAsMHg4OSwweDYwLDB4MjIsMHg0MiwweDBiLDB4OTAsMHgwMiwweGU2LDB4MDAsMHhiOSwweDgwIH19LAorIHsxNiwgMHhiOTIwLCAwLCB7MHgyMiwweDQwLDB4MGIsMHg5MCwweDAyLDB4YTQsMHgwNCwweGI5LDB4MDAsMHgyMiwweDQwLDB4MjgsMHg5MCwweDAyLDB4MjQsMHgwNCB9fSwKKyB7MTYsIDB4YjkzMCwgMCwgezB4YjksMHgwMCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHgwZSwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI5NDAsIDAsIHsweDA4LDB4MDQsMHgwNSwweDgwLDB4ODEsMHgwMCwweDJjLDB4YzEsMHg0OCwweDEwLDB4MDIsMHhhNCwweDAyLDB4ODEsMHgwMCwweDIwIH19LAorIHsxNiwgMHhiOTUwLCAwLCB7MHg0MCwweDgzLDB4MzQsMHgwMiwweGM0LDB4MDAsMHhiYiwweDAwLDB4MjAsMHhkMCwweDBiLDB4MTQsMHgwMiwweGM0LDB4ODAsMHhiMSB9fSwKKyB7MTYsIDB4Yjk2MCwgMCwgezB4MjAsMHhhMCwweDY4LDB4MTgsMHgxNCwweDFhLDB4MGQsMHgwMCwweGIxLDB4NDAsMHgyYywweDUwLDB4MGIsMHgxMCwweDAyLDB4MGEgfX0sCisgezE2LCAweGI5NzAsIDAsIHsweDA1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGM4LDB4MDAsMHgzZSwweDAwIH19LAorIHsxNiwgMHhiOTgwLCAwLCB7MHg4YywweDgwLDB4MGIsMHhhMCwweDA0LDB4ZTgsMHgwMCwweDMyLDB4MDAsMHgwNywweDgwLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHgwMCB9fSwKKyB7MTYsIDB4Yjk5MCwgMCwgezB4MzIsMHgwMCwweDFmLDB4ODAsMHgwMywweGExLDB4NDAsMHhmOCwweDUwLDB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMywweDIwLDB4MDAgfX0sCisgezE2LCAweGI5YTAsIDAsIHsweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiOWIwLCAwLCB7MHg5OCwweDFkLDB4ZjQsMHg0NiwweGZkLDB4NDAsMHgzZiwweDUwLDB4MjMsMHhkNCwweDEzLDB4NzQsMHgwNCwweGY1LDB4MDIsMHgzZiB9fSwKKyB7MTYsIDB4YjljMCwgMCwgezB4NTAsMHgwZiwweGQ0LDB4MDMsMHhmZCwweDAwLDB4YmQsMHgwMCwweDJmLDB4NTAsMHgwZiwweGQwLDB4MDMsMHhlNCwweDQwLDB4ZjkgfX0sCisgezE2LCAweGI5ZDAsIDAsIHsweDEwLDB4M2YsMHg0NCwweDBmLDB4ZDQsMHgwMywweGY1LDB4MDgsMHhmZCwweDA2LDB4M2UsMHg1MCwweDBmLDB4ZDIsMHg4MywweGU2IH19LAorIHsxNiwgMHhiOWUwLCAwLCB7MHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGU2LDB4NDAsMHhlZCwweDA0LDB4M2UsMHg0OCB9fSwKKyB7MTYsIDB4YjlmMCwgMCwgezB4MGMsMHhiMiwweDgzLDB4ZjQsMHgwMCwweGMxLDB4MDAsMHgzMiwweDQwLDB4OGMsMHhkMCwweDAzLDB4MzQsMHgwMCwweGZkLDB4MDAgfX0sCisgezE2LCAweGJhMDAsIDAsIHsweDM3LDB4NDAsMHgwZiwweGQwLDB4MDMsMHhlNiwweDIwLDB4ZjksMHg4OCwweDNkLDB4NjIsMHgwYywweGQ4LDB4MDMsMHhmZSwweDI0IH19LAorIHsxNiwgMHhiYTEwLCAwLCB7MHhjMSwweDAwLDB4M2UsMHg3OCwweDBmLDB4ZDAsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmEyMCwgMCwgezB4MzgsMHgxMCwweGUxLDB4MDAsMHg4OCwweDQwLDB4MmUsMHgxMCwweDA4LDB4YzQsMHgyMywweGEwLDB4MDgsMHg4OCwweDA2LDB4MmEgfX0sCisgezE2LCAweGJhMzAsIDAsIHsweDE0LDB4MDgsMHg4MCwweDAzLDB4NjAsMHgwNCwweGI4LDB4MDAsMHgyMiwweDAwLDB4MGIsMHg4MCwweDAyLDB4ZTIsMHgwMCwweGI4IH19LAorIHsxNiwgMHhiYTQwLCAwLCB7MHg4MCwweDJlLDB4MDAsMHgwOCwweDhjLDB4MDIsMHhlMywweDgwLDB4ODgsMHgwMiwweDJlLDB4MzgsMHgwYiwweDg4LDB4MDIsMHgwZSB9fSwKKyB7MTYsIDB4YmE1MCwgMCwgezB4MDYsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNSwweDgwLDB4YTEsMHhjMCwweDJkLDB4NzAgfX0sCisgezE2LCAweGJhNjAsIDAsIHsweDA4LDB4NTAsMHg0MiwweGM0LDB4MDAsMHhhOSwweDAwLDB4MjAsMHhlMCwweDJhLDB4MTAsMHgwYSwweDA0LDB4MTAsMHhiMSwweDAwIH19LAorIHsxNiwgMHhiYTcwLCAwLCB7MHgyNCwweDQwLDB4NGIsMHgxMCwweDA2LDB4YzQsMHgyMCwweGIxLDB4MDgsMHg2ZSwweDQwLDB4MGIsMHgxNiwweDgyLDB4YzQsMHgyMCB9fSwKKyB7MTYsIDB4YmE4MCwgMCwgezB4ODEsMHgwMCwweDJjLDB4NTAsMHgwYiwweDkyLDB4ODIsMHg1MiwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJhOTAsIDAsIHsweDE4LDB4MTEsMHhhNCwweDAwLDB4YTksMHgwMSwweDJlLDB4NDAsMHgyOCwweGQwLDB4MjAsMHhhNCwweDA0LDB4YTksMHgwMCwweDJhIH19LAorIHsxNiwgMHhiYWEwLCAwLCB7MHg0MCwweDFhLDB4YjAsMHgxMiwweDI0LDB4MDAsMHhiOSwweDBjLDB4MjIsMHg0MiwweDBiLDB4OTQsMHgwMiwweGU0LDB4MDAsMHhiOSB9fSwKKyB7MTYsIDB4YmFiMCwgMCwgezB4MDAsMHg2ZSwweDQwLDB4MGIsMHg5NiwweDAyLDB4ZTQsMHgxMSwweDg5LDB4MjAsMHg2ZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4NDYgfX0sCisgezE2LCAweGJhYzAsIDAsIHsweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHhjMCwweGE5LDB4YzAsMHgzZSwweDUwIH19LAorIHsxNiwgMHhiYWQwLCAwLCB7MHgwOCwweDljLDB4ODMsMHhlNCwweDAyLDB4ZTksMHgwMCwweGIyLDB4NDAsMHgyYSwweDkyLDB4MTIsMHgyNiwweDQwLDB4ZjksMHg0MCB9fSwKKyB7MTYsIDB4YmFlMCwgMCwgezB4MzYsMHg3MCwweDBmLDB4OTQsMHgwMywweGU0LDB4MDQsMHhmOSwweDAxLDB4M2MsMHg0MCwweDBmLDB4OTgsMHgwMywweGU2LDB4MDIgfX0sCisgezE2LCAweGJhZjAsIDAsIHsweGM5LDB4MjIsMHgzZSwweDQwLDB4MGYsMHgxMCwweDAyLDB4NjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiYjAwLCAwLCB7MHgyOCwweDAxLDB4ODYsMHgwNCwweGQ5LDB4NDAsMHgxYywweDQwLDB4MGYsMHg5MiwweDIzLDB4YTQsMHhiMCwweGRiLDB4MDQsMHgzYyB9fSwKKyB7MTYsIDB4YmIxMCwgMCwgezB4YzAsMHgwZCwweDlhLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDQsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjkgfX0sCisgezE2LCAweGJiMjAsIDAsIHsweDAwLDB4M2UsMHg0MiwweDJjLDB4OTAsMHgyMywweGU0LDB4ODAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDhmLDB4OTIsMHgwMywweDkyIH19LAorIHsxNiwgMHhiYjMwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGExLDB4MDAsMHhjOCwweDIwLDB4MzIsMHgwMCB9fSwKKyB7MTYsIDB4YmI0MCwgMCwgezB4NGMsMHhjMCwweDhiLDB4MjAsMHgwMiwweGM4LDB4MzEsMHgzMiwweDIwLDB4MmQsMHg4NCwweDAzLDB4ZTEsMHgwNCwweGY4LDB4NDggfX0sCisgezE2LCAweGJiNTAsIDAsIHsweGJhLDB4MDAsMHgwZiwweDg5LDB4MDMsMHhlMCwweDAwLDB4YzgsMHgwMCwweDMyLDB4MDAsMHgwZCwweDgxLDB4MTMsMHgyMCwweDEwIH19LAorIHsxNiwgMHhiYjYwLCAwLCB7MHhmOCwweDAwLDB4M2EsMHgwMCwweDBmLDB4ODEsMHgyMywweDAyLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmI3MCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDAsMHgwZSwweDQwLDB4MjIsMHg4MCwweDI4LDB4YTQsMHgwMiwweDE5LDB4MDAsMHg1MiwweDgwLDB4YTIgfX0sCisgezE2LCAweGJiODAsIDAsIHsweDgwLDB4NGQsMHhlZCwweDgyLDB4ZTgsMHgwMCwweGI2LDB4NDIsMHgyMywweGJkLDB4MGIsMHhlOCwweDAyLDB4ZTgsMHgwNCwweGRhIH19LAorIHsxNiwgMHhiYjkwLCAwLCB7MHgwMCwweDM3LDB4ODAsMHgwOCwweGUwLDB4MDIsMHgzYSwweDIwLDB4YmEsMHgwMCwweDIyLDB4ODAsMHgwYiwweGE4LDB4MGEsMHgwYSB9fSwKKyB7MTYsIDB4YmJhMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4ODMsMHg4MCwweDYwLDB4YzAgfX0sCisgezE2LCAweGJiYjAsIDAsIHsweDA4LDB4MjksMHgwMiwweDBkLDB4MDAsMHg5MiwweDQwLDB4MjQsMHhjMCwweDA4LDB4YjQsMHgwMiwweGNjLDB4MDAsMHhiMywweDAwIH19LAorIHsxNiwgMHhiYmMwLCAwLCB7MHg2OCwweGUwLDB4MWIsMHgzMCwweDAyLDB4Y2MsMHgwMCwweDkzLDB4MDEsMHgyNCwweGMwLDB4NjksMHgzOCwweDAyLDB4NmMsMHgwMCB9fSwKKyB7MTYsIDB4YmJkMCwgMCwgezB4YjMsMHgwMCwweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJiZTAsIDAsIHsweGEwLDB4MDEsMHgxYywweDQwLDB4ODMsMHhjMCwweDIwLDB4NDAsMHgwOCwweDI4LDB4MDYsMHg5YywweDE4LDB4OWMsMHgwMiwweDI0IH19LAorIHsxNiwgMHhiYmYwLCAwLCB7MHhjMCwweDA5LDB4NzAsMHgwMiwweGQ0LDB4MDAsMHhiNywweDAwLDB4MjEsMHhjMCwweDBiLDB4NzAsMHgwMiwweGNlLDB4NDAsMHg5NyB9fSwKKyB7MTYsIDB4YmMwMCwgMCwgezB4YjAsMHgyNSwweDQwLDB4MDgsMHg3OCwweDFhLDB4NTgsMHgwMCwweGJmLDB4YTIsMHg2NSwweGM4LDB4MGIsMHg3OCwweDAyLDB4MjAgfX0sCisgezE2LCAweGJjMTAsIDAsIHsweDA0LDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MGUsMHgwMiwweDg3LDB4ODAsMHhiMSwweGEwIH19LAorIHsxNiwgMHhiYzIwLCAwLCB7MHgwYywweDY4LDB4MDMsMHgxYSwweDA4LDB4ZDYsMHg5MiwweDM1LDB4ZTQsMHgyOCwweDc4LDB4NDIsMHhkNiwweDEwLDB4ZjUsMHg4MCB9fSwKKyB7MTYsIDB4YmMzMCwgMCwgezB4MzksMHhhMCwweDBmLDB4NzgsMHgyMywweGRlLDB4MzAsMHhkMywweGEyLDB4MzUsMHhhMCwweDRkLDB4ZTgsMHgwMywweDVlLDB4MDAgfX0sCisgezE2LCAweGJjNDAsIDAsIHsweGY3LDB4ZDAsMHgzZCwweGY4LDB4MGYsMHhmMCwweDAzLDB4MjIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiYzUwLCAwLCB7MHgwOCwweDFkLDB4YWMsMHgwMCwweGZiLDB4MDQsMHgzZSwweDAwLDB4MGIsMHhhMCwweDAzLDB4NDgsMHgwNCwweGZhLDB4NDEsMHgzYSB9fSwKKyB7MTYsIDB4YmM2MCwgMCwgezB4NTAsMHgwZiwweGIwLDB4MDMsMHhlNCwweDAwLDB4ZjEsMHgwMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhlZCwweDg4LDB4ZmIgfX0sCisgezE2LCAweGJjNzAsIDAsIHsweDRkLDB4M2UsMHgwMCwweDBmLDB4ZjAsMHgwMywweGJjLDB4MDgsMHhmYiwweDIwLDB4M2EsMHhjMCwweDBmLDB4YjAsMHgwMywweGMyIH19LAorIHsxNiwgMHhiYzgwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGZlLDB4MDAsMHhkYywweDgwLDB4YjMsMHhlMCB9fSwKKyB7MTYsIDB4YmM5MCwgMCwgezB4MGMsMHhkOCwweDAzLDB4Y2UsMHgwMCwweGM4LDB4YTAsMHgzMSwweGEwLDB4OGQsMHhlOSwweDAzLDB4YmUsMHgwMCwweGIyLDB4ODAgfX0sCisgezE2LCAweGJjYTAsIDAsIHsweDMzLDB4ZTAsMHgwYywweGU4LDB4NDMsMHg3ZSwweDA0LDB4MGYsMHg4MSwweDMxLDB4ZTQsMHgwYywweGQ4LDB4MDMsMHhmNiwweDAwIH19LAorIHsxNiwgMHhiY2IwLCAwLCB7MHhmZiwweDgwLDB4M2YsMHhlMCwweDBmLDB4ZjgsMHgwMywweDAwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmNjMCwgMCwgezB4YTgsMHgxMSwweDljLDB4MDAsMHhiNCwweDQwLDB4MzUsMHg0MCwweDA4LDB4NTAsMHg4MiwweGRlLDB4ODAsMHhkNCwweDkwLDB4MjEgfX0sCisgezE2LCAweGJjZDAsIDAsIHsweGUwLDB4MGQsMHg1MSwweDAyLDB4ZDQsMHg0MCwweGI2LDB4YjAsMHgyYiwweDkwLDB4MGUsMHhlNSwweDAyLDB4OWMsMHg0MCwweGQ3IH19LAorIHsxNiwgMHhiY2UwLCAwLCB7MHgyMiwweDE5LDB4NWMsMHgwZCwweDcwLDB4MDIsMHhkOCwweDAwLDB4YjcsMHgyMCwweDJkLDB4YzAsMHgwYiwweGYwLDB4MDMsMHg2YSB9fSwKKyB7MTYsIDB4YmNmMCwgMCwgezB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4OTMsMHgxMCwweDIxLDB4ODAgfX0sCisgezE2LCAweGJkMDAsIDAsIHsweDA4LDB4NTgsMHgwMiwweGRjLDB4YzAsMHg5NCwweDAwLDB4MjMsMHhkMCwweDA4LDB4NzAsMHhhMCwweGQ0LDB4MjAsMHhiNSwweDAyIH19LAorIHsxNiwgMHhiZDEwLCAwLCB7MHgyOSwweDgwLDB4MDksMHg2MCwweDgyLDB4MGMsMHgwMCwweDg3LDB4MDIsMHgyNSwweGMwLDB4MTksMHg0MCwweDAyLDB4ZDQsMHgwMCB9fSwKKyB7MTYsIDB4YmQyMCwgMCwgezB4YjcsMHgwMCwweDZkLDB4YzAsMHgwYiwweDcwLDB4MDIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJkMzAsIDAsIHsweDIwLDB4MTQsMHhlYywweDAwLDB4YjMsMHhjMCwweDIwLDB4MDEsMHg0OCwweDE4LDB4MDIsMHhjYywweDAyLDB4ODEsMHg0NCwweGEwIH19LAorIHsxNiwgMHhiZDQwLCAwLCB7MHhjMCwweDg5LDB4MzgsMHgwMiwweGM3LDB4ODAsMHhiMSwweDAwLDB4MmMsMHgwOSwweDRhLDB4MDAsMHg2MiwweGFjLDB4MDksMHg5MyB9fSwKKyB7MTYsIDB4YmQ1MCwgMCwgezB4MDEsMHgyOCwweDQwLDB4MTksMHgzMCwweDAyLDB4Y2QsMHgxMCwweGIzLDB4OTAsMHgyYywweGMwLDB4MGIsMHgzMCwweDAyLDB4YzggfX0sCisgezE2LCAweGJkNjAsIDAsIHsweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmMsMHgyMCwweGRiLDB4NjIsMHgyMiwweGUwIH19LAorIHsxNiwgMHhiZDcwLCAwLCB7MHg2YywweGEwLDB4MDMsMHhlNCwweDAwLDB4OTgsMHgwMCwweDMyLDB4YzAsMHhlYywweDk4LDB4MjMsMHhhZSwweDA4LDB4ZmIsMHgwOCB9fSwKKyB7MTYsIDB4YmQ4MCwgMCwgezB4M2EsMHg3OCwweDA5LDB4OTAsMHgwMywweDdjLDB4MTAsMHhjZiwweDAwLDB4MjYsMHg0MCwweDBjLDB4YjAsMHgwMywweGVjLDB4MDAgfX0sCisgezE2LCAweGJkOTAsIDAsIHsweGZmLDB4ODAsMHgzZiwweGMwLDB4MGYsMHg5MCwweDAzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiZGEwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgyMCwweGZiLDB4NDgsMHgzYywweDYxLDB4MGYsMHhhMCwweDQzLDB4ZWQsMHgwMCwweGY4LDB4MjQsMHgzZSB9fSwKKyB7MTYsIDB4YmRiMCwgMCwgezB4NTAsMHgwZiwweDkwLDB4ODMsMHhlNCwweDAwLDB4ZmIsMHgwMCwweDNhLDB4NTAsMHgwZiwweDgwLDB4NDMsMHhlYywweDA4LDB4ZmIgfX0sCisgezE2LCAweGJkYzAsIDAsIHsweDAwLDB4M2UsMHg0MCwweDBmLDB4NDAsMHgwMywweGYwLDB4MDAsMHhmYiwweDAwLDB4M2UsMHhjMSwweDBmLDB4OTAsMHgwMywweDYwIH19LAorIHsxNiwgMHhiZGQwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGZjLDB4MDAsMHhkZCwweGEwLDB4MzIsMHg4MCB9fSwKKyB7MTYsIDB4YmRlMCwgMCwgezB4MGMsMHhlMCwweDAxLDB4ZmMsMHgwMCwweGRjLDB4OTEsMHgzOSwweGMwLDB4M2MsMHg0MCwweDAzLDB4MzQsMHgwMCwweGZmLDB4ODAgfX0sCisgezE2LCAweGJkZjAsIDAsIHsweDNmLDB4MDAsMHgwZiwweGQwLDB4MDcsMHhmYywweDAwLDB4Y2IsMHgwMCwweDNkLDB4NDAsMHgwYywweGUwLDB4MDMsMHgzOCwweDIwIH19LAorIHsxNiwgMHhiZTAwLCAwLCB7MHhjZiwweDAyLDB4M2QsMHhjMCwweDBjLDB4ZDAsMHgwMywweDA4LDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmUxMCwgMCwgezB4ODEsMHgwNCwweDZjLDB4MDAsMHgwMSwweDQwLDB4MjIsMHgwMCwweDI4LDB4YTAsMHgwMiwweGNlLDB4ODYsMHg4MywweDY0LDB4MjIgfX0sCisgezE2LCAweGJlMjAsIDAsIHsweGY0LDB4MDgsMHg4YywweDBmLDB4NjQsMHgwMCwweGJiLDB4MTAsMHgyZSwweDYwLDB4MGIsMHg5YywweDAzLDB4YWMsMHgwMSwweGRiIH19LAorIHsxNiwgMHhiZTMwLCAwLCB7MHgwMCwweDNlLDB4NjAsMHgwOCwweDhmLDB4MDIsMHgyMywweDQwLDB4OGIsMHgwMCwweDNhLDB4YzAsMHgwZCwweDEwLDB4NDMsMHg2OCB9fSwKKyB7MTYsIDB4YmU0MCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OTksMHgwMCwweGEyLDB4YzAgfX0sCisgezE2LCAweGJlNTAsIDAsIHsweDA4LDB4OTAsMHgwMiwweGE2LDB4MDcsMHg5OCwweDAwLDB4MDIsMHhjMiwweDQ4LDB4ODgsMHgwMiwweDJjLDB4MDAsMHhiYSwweDAyIH19LAorIHsxNiwgMHhiZTYwLCAwLCB7MHg2ZSwweDYwLDB4MGEsMHg5OCwweDAyLDB4ZWMsMHgwMCwweDhiLDB4MDEsMHgyZSwweDYwLDB4MDgsMHg5MCwweDAyLDB4MDUsMHgwMCB9fSwKKyB7MTYsIDB4YmU3MCwgMCwgezB4OGIsMHgwMCwweDJlLDB4YzAsMHgwOCwweGIxLDB4MDIsMHgyMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJlODAsIDAsIHsweDA4LDB4MDQsMHgwYywweDEwLDB4ODEsMHgwMCwweDIwLDB4NDAsMHgyOCwweDEwLDB4MjYsMHhjYywweDgwLDB4ODAsMHgyMCwweGEwIH19LAorIHsxNiwgMHhiZTkwLCAwLCB7MHhjYywweDE4LDB4MTQsMHg0MiwweDA0LDB4MDAsMHhiMiwweDIwLDB4NmMsMHg0MCwweDBiLDB4MDAsMHgwMiwweDhjLDB4MDAsMHg4MyB9fSwKKyB7MTYsIDB4YmVhMCwgMCwgezB4MDAsMHgyOCwweDQwLDB4MjgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDgzLDB4MDAsMHgyOCwweGMwLDB4MDksMHhiMCwweDAyLDB4NDIgfX0sCisgezE2LCAweGJlYjAsIDAsIHsweDA1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGQ5LDB4MDAsMHgyMiwweDgwIH19LAorIHsxNiwgMHhiZWMwLCAwLCB7MHgwYywweDkwLDB4MDMsMHhhYywweDgwLDB4ZGEsMHgyOSwweDJhLDB4ZDIsMHgyOCwweDgwLDB4MDIsMHgyNCwweDAwLDB4ZmIsMHgyMCB9fSwKKyB7MTYsIDB4YmVkMCwgMCwgezB4M2UsMHgwMCwweDBmLDB4OTAsMHgwMiwweGZjLDB4MDAsMHg4ZiwweDAwLDB4MmUsMHg0MCwweDBjLDB4ODAsMHgwYiwweDIwLDB4MDIgfX0sCisgezE2LCAweGJlZTAsIDAsIHsweGNmLDB4MDAsMHgzZSwweGMwLDB4MGMsMHhiMCwweDAzLDB4MDAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiZWYwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgwMCwweGZkLDB4MDAsMHgzZiwweDAwLDB4MGYsMHhkMCwweDYzLDB4ZmMsMHg0OSwweGY1LDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4YmYwMCwgMCwgezB4YzAsMHgwYiwweGMwLDB4MDEsMHhmNCwweDAwLDB4N2YsMHg0MCwweDNmLDB4NDAsMHgxZiwweGQwLDB4MDMsMHhiYywweDAwLDB4ZmYgfX0sCisgezE2LCAweGJmMTAsIDAsIHsweDAwLDB4M2YsMHg0MCwweDBmLDB4YzAsMHgwMywweGYwLDB4MDAsMHhmZiwweDAwLDB4M2IsMHhjMCwweDBmLDB4ZjAsMHgwMywweGU4IH19LAorIHsxNiwgMHhiZjIwLCAwLCB7MHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMSwweGYyLDB4NDAsMHhlYywweGEwLDB4M2YsMHhlMCB9fSwKKyB7MTYsIDB4YmYzMCwgMCwgezB4MGQsMHg0OCwweDAzLDB4N2QsMHg4MCwweGY0LDB4ODAsMHgzMywweDZjLDB4MGUsMHhjOCwweDAzLDB4MzIsMHgwMCwweGRkLDB4OTAgfX0sCisgezE2LCAweGJmNDAsIDAsIHsweDNiLDB4YTAsMHgyZCwweGYwLDB4MDMsMHhmYywweGMwLDB4ZmYsMHgwMCwweDNiLDB4ZTAsMHg4ZSwweGYwLDB4MDMsMHgzYywweDA0IH19LAorIHsxNiwgMHhiZjUwLCAwLCB7MHhlYywweDYwLDB4MzEsMHgwMCwweDBjLDB4ZjAsMHgwMywweGIwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmY2MCwgMCwgezB4ODAsMHgxMCwweGVjLDB4MDAsMHhkOSwweGMxLDB4MmUsMHhlMSwweDBkLDB4ODgsMHgwMiwweDNjLDB4ODAsMHhmOCwweDgwLDB4MzYgfX0sCisgezE2LCAweGJmNzAsIDAsIHsweDdkLDB4MTgsMHhhMCwweDAyLDB4MjgsMHhiMCwweGVhLDB4MjAsMHgyMiwweDIwLDB4MDgsMHg3NywweDAyLDB4ZmQsMHg1MCwweGJiIH19LAorIHsxNiwgMHhiZjgwLCAwLCB7MHg4MCwweDIyLDB4NDAsMHgwYiwweGY0LDB4NDIsMHgzZCwweDgwLDB4ODgsMHgzMSwweDIyLDB4MTIsMHgwOCwweGY2LDB4MDIsMHhlMCB9fSwKKyB7MTYsIDB4YmY5MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDAwLDB4ODAsMHgxMSwweDJlLDB4YzEgfX0sCisgezE2LCAweGJmYTAsIDAsIHsweDA4LDB4MDAsMHgwMiwweDRkLDB4ODAsMHhiOCwweDAwLDB4MjAsMHgwMCwweDBhLDB4MDIsMHg4MiwweDAwLDB4MDAsMHg5OSwweDIwIH19LAorIHsxNiwgMHhiZmIwLCAwLCB7MHgyMiwweGMwLDB4MDksMHgzMCwweDgyLDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyOCwweGNhLDB4MGIsMHgzNCwweDgyLDB4MGQsMHgyMCB9fSwKKyB7MTYsIDB4YmZjMCwgMCwgezB4ODAsMHgwMCwweGEwLDB4OGMsMHgwOCwweDM0LDB4ODIsMHhhMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJmZDAsIDAsIHsweGMwLDB4MTUsMHhhYywweDQwLDB4OTksMHg4MCwweDJlLDB4YzIsMHgwOSwweDk0LDB4MDIsMHgyYywweDAwLDB4YTksMHg4MCwweDI2IH19LAorIHsxNiwgMHhiZmUwLCAwLCB7MHg2MCwweDA4LDB4MzgsMHg0MiwweDIyLDB4MjAsMHhiYSwweDQxLDB4NjIsMHg0NiwweDNiLDB4YjAsMHgwMiwweGVjLDB4MDEsMHhiYiB9fSwKKyB7MTYsIDB4YmZmMCwgMCwgezB4ODAsMHgyMiwweDQwLDB4MGIsMHhiMCwweDQ2LDB4MGMsMHgxOCwweDg4LDB4YzAsMHgyMiwweDIyLDB4MDgsMHhiMCwweDA2LDB4ZjAgfX0sCisgezE2LCAweGMwMDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4Y2MsMHgwMCwweGM5LDB4ODEsMHgzYywweGMxIH19LAorIHsxNiwgMHhjMDEwLCAwLCB7MHgwYywweGE5LDB4MjMsMHg2YywweDAwLDB4YjIsMHg4MCwweDMyLDB4NzgsMHgwYSwweDhhLDB4MGIsMHgyNiwweDAwLDB4OTksMHgwMSB9fSwKKyB7MTYsIDB4YzAyMCwgMCwgezB4MzAsMHhlMCwweDBkLDB4YjAsMHgwMywweGVjLDB4MDAsMHhiOSwweDAwLDB4M2EsMHhjMCwweDFlLDB4YjAsMHgwMywweDJjLDB4MDAgfX0sCisgezE2LCAweGMwMzAsIDAsIHsweGNiLDB4ODAsMHgzMiwweDYxLDB4MGMsMHhiMCwweDEzLDB4OTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMDQwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgxMCwweGRkLDB4MDAsMHgzZiwweGMyLDB4MGYsMHhlOCwweDAzLDB4YWMsMHgwMCwweGZlLDB4MDAsMHgzZCB9fSwKKyB7MTYsIDB4YzA1MCwgMCwgezB4NDAsMHgwZiwweGMwLDB4NDMsMHhmOCwweDEwLDB4ZWYsMHgxNCwweGI3LDB4ZTAsMHgwYywweGYwLDB4MDMsMHhmYywweDAwLDB4ZjUgfX0sCisgezE2LCAweGMwNjAsIDAsIHsweDAyLDB4M2YsMHg0NCwweDRmLDB4YjAsMHg0YiwweGZjLDB4MDIsMHhkNCwweDA0LDB4M2QsMHg0MCwweDJmLDB4ZjAsMHgwMywweGY4IH19LAorIHsxNiwgMHhjMDcwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDAsMHhmOSwweDA4LDB4M2UsMHg2MCB9fSwKKyB7MTYsIDB4YzA4MCwgMCwgezB4MGQsMHhhMCwweDAzLDB4YWMsMHgwMCwweGU4LDB4NTAsMHgzMiwweDAwLDB4MGMsMHg4NCwweDAzLDB4YTUsMHgwMCwweGU5LDB4MDAgfX0sCisgezE2LCAweGMwOTAsIDAsIHsweDNhLDB4ZDgsMHgwZiwweGIwLDB4MDMsMHgyYywweDAwLDB4ZjksMHgwMCwweDNhLDB4YzAsMHgwZiwweDMwLDB4MDMsMHgyYywweDAwIH19LAorIHsxNiwgMHhjMGEwLCAwLCB7MHhjYiwweDQ0LDB4M2UsMHhkNCwweDBlLDB4YjAsMHgwMywweGQwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzBiMCwgMCwgezB4YzgsMHgwNSwweDJjLDB4MDgsMHhiOSwweDgwLDB4MmUsMHhjMCwweDBhLDB4MzAsMHg0MiwweDNjLDB4MDAsMHg4OSwweDA0LDB4NzYgfX0sCisgezE2LCAweGMwYzAsIDAsIHsweDYwLDB4MDgsMHg5MCwweDYyLDB4MjAsMHgwMCwweDgyLDB4MDQsMHgyMiwweGQwLDB4MDgsMHhmMCwweDQzLDB4N2MsMHgwMCwweGJiIH19LAorIHsxNiwgMHhjMGQwLCAwLCB7MHg4MiwweDIyLDB4NDAsMHgwYiwweGYwLDB4NDIsMHgzYywweDAwLDB4OGEsMHhjMCwweDJlLDB4YzEsMHgwOCwweGYwLDB4MDIsMHhmMiB9fSwKKyB7MTYsIDB4YzBlMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDEwLDB4YjIsMHhkMCwweDJjLDB4YzAgfX0sCisgezE2LCAweGMwZjAsIDAsIHsweDI5LDB4MTgsMHgwMiwweDhjLDB4MDQsMHhhMSwweDAwLDB4MjQsMHg5YywweDA4LDB4MTAsMHgwMiwweDgwLDB4MDAsMHhhMSwweDAxIH19LAorIHsxNiwgMHhjMTAwLCAwLCB7MHgwYywweGMxLDB4MmIsMHgzMCwweDUyLDB4OGMsMHgwNCwweGIzLDB4MDEsMHgyOCwweDQwLDB4NGIsMHgzMCwweDAyLDB4NGMsMHgwMCB9fSwKKyB7MTYsIDB4YzExMCwgMCwgezB4OTAsMHgyMCwweDJjLDB4MjAsMHgwYSwweDMwLDB4MDIsMHhmOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMxMjAsIDAsIHsweDIwLDB4NDEsMHgxZSwweDAwLDB4YjcsMHhhMiwweDI1LDB4ZTgsMHg4YSwweDY4LDB4MDIsMHgxZSwweDAwLDB4ODUsMHg4MCwweDI1IH19LAorIHsxNiwgMHhjMTMwLCAwLCB7MHg4MCwweDg4LDB4ZTgsMHgwMiwweDNlLDB4MDAsMHg4NSwweDgwLDB4MmYsMHhlNCwweDI4LDB4NzgsMHgwMiwweGRlLDB4MDAsMHhiNyB9fSwKKyB7MTYsIDB4YzE0MCwgMCwgezB4ODAsMHg2MSwweGUwLDB4MDMsMHg3OCwweDAyLDB4NWUsMHg4MiwweGI3LDB4ODIsMHgyZCwweGUwLDB4MDgsMHg3OCwweDAyLDB4YzggfX0sCisgezE2LCAweGMxNTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGQsMHgwMCwweGYwLDB4MTAsMHgzYywweDgwIH19LAorIHsxNiwgMHhjMTYwLCAwLCB7MHgwZCwweDEwLDB4ODMsMHg4YywweDAwLDB4ZTIsMHg1MCwweDI2LDB4MDQsMHgwYywweDExLDB4MDMsMHg4OCwweDQwLDB4ZWIsMHgwMCB9fSwKKyB7MTYsIDB4YzE3MCwgMCwgezB4M2MsMHhjNCwweDBmLDB4MzAsMHgwMywweDhjLDB4MDAsMHhmMywweDA4LDB4MzgsMHg0MCwweDA3LDB4MzAsMHgwMywweDZlLDB4NDAgfX0sCisgezE2LCAweGMxODAsIDAsIHsweGQwLDB4MDgsMHgzYywweDg4LDB4MGUsMHgzMCwweDQzLDB4ZDIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMTkwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwMCwweGZiLDB4MzQsMHgzYywweGM5LDB4NGUsMHhiMCwweDIzLDB4ZWQsMHgyMCwweGZiLDB4MDQsMHgzZiB9fSwKKyB7MTYsIDB4YzFhMCwgMCwgezB4YzgsMHg4ZiwweDcwLDB4NTMsMHg0YywweDAwLDB4ZWIsMHgxMCwweDMxLDB4YzUsMHgwZSwweGY0LDB4MDMsMHg2ZCwweDAwLDB4ZjMgfX0sCisgezE2LCAweGMxYjAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjQsMHgwYiwweGJjLDB4MDAsMHhjZCwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjQsMHg4MywweGQwIH19LAorIHsxNiwgMHhjMWMwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGNlLDB4MDQsMHhjOSwweDA0LDB4YjAsMHhjMSB9fSwKKyB7MTYsIDB4YzFkMCwgMCwgezB4MGYsMHg5OCwweDEzLDB4NmMsMHg5MCwweGNiLDB4MDIsMHgzZSwweGMwLDB4NGYsMHhiMCwweDYzLDB4ZTQsMHgwMCwweGYxLDB4ODAgfX0sCisgezE2LCAweGMxZTAsIDAsIHsweDEyLDB4YzAsMHgwYywweGI1LDB4MDMsMHhlYywweGMwLDB4Y2YsMHg4MywweDMyLDB4NDAsMHgwZiwweGIzLDB4MjMsMHgyZCwweGE0IH19LAorIHsxNiwgMHhjMWYwLCAwLCB7MHhmYiwweDAwLDB4M2UsMHgwMCwweDBmLDB4YjQsMHgwMywweDJhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzIwMCwgMCwgezB4NDgsMHgxMSwweDljLDB4MDAsMHg4NywweDAwLDB4MjEsMHhjMCwweDJkLDB4NjAsMHgwMiwweDFjLDB4MDAsMHhkNywweDAwLDB4MzkgfX0sCisgezE2LCAweGMyMTAsIDAsIHsweGMwLDB4MGIsMHg2MCwweDAyLDB4ZGMsMHgwMCwweGI1LDB4MDAsMHgyMSwweGMwLDB4MmEsMHg3MCwweDEyLDB4Y2MsMHg4MCwweDg3IH19LAorIHsxNiwgMHhjMjIwLCAwLCB7MHgwMCwweDM1LDB4YzAsMHgwYiwweDcyLDB4NTIsMHgxYywweDAwLDB4YjcsMHgwMCwweDJkLDB4NDEsMHgwYiwweDMyLDB4MDIsMHgxMiB9fSwKKyB7MTYsIDB4YzIzMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHhiZSwweDAwLDB4ODEsMHhjMCwweDIzLDB4MjAgfX0sCisgezE2LCAweGMyNDAsIDAsIHsweDBiLDB4ZDgsMHgwMiwweDVlLDB4MDAsMHgwNiwweGMwLDB4MmQsMHhhMCwweDBiLDB4N2MsMHgxMiwweGRlLDB4MDgsMHhiZiwweDgwIH19LAorIHsxNiwgMHhjMjUwLCAwLCB7MHhhMSwweGUyLDB4MmEsMHg3YSwweDAyLDB4ZGUsMHgwMCwweDkzLDB4ODAsMHgyNSwweDYwLDB4MGIsMHg3OCwweDFlLDB4NWUsMHg1MCB9fSwKKyB7MTYsIDB4YzI2MCwgMCwgezB4YjcsMHg4MCwweDJkLDB4YTAsMHgwYiwweDc4LDB4MDIsMHgzMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMyNzAsIDAsIHsweDQ4LDB4MTQsMHhjZSwweDAwLDB4ODMsMHg2MCwweDIwLDB4YzAsMHgwOSwweDMxLDB4MDIsMHgyYywweDAwLDB4OTMsMHgwMCwweDI4IH19LAorIHsxNiwgMHhjMjgwLCAwLCB7MHhjMCwweDFiLDB4YjAsMHgwNiwweGNjLDB4ODAsMHhiMywweDQ4LDB4MjAsMHhmMCwweDBhLDB4MzAsMHgwMiwweGVjLDB4MDAsMHg5MyB9fSwKKyB7MTYsIDB4YzI5MCwgMCwgezB4ODAsMHgyNCwweGMwLDB4MGIsMHhiMCwweDAyLDB4NGMsMHgxMCwweGIzLDB4YzgsMHgyYywweGQyLDB4OGIsMHgzMCwweDAyLDB4MTIgfX0sCisgezE2LCAweGMyYTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YmIsMHgwMCwweGM2LDB4YzQsMHgzMSwweDgxIH19LAorIHsxNiwgMHhjMmIwLCAwLCB7MHgwZiwweGUwLDB4MDMsMHg2OCwweDAwLDB4Y2UsMHg4MCwweDNmLDB4YTIsMHgwYiwweGU4LDB4MDMsMHhmOSwweDAwLDB4ZmUsMHg0MCB9fSwKKyB7MTYsIDB4YzJjMCwgMCwgezB4MzEsMHg4MCwweDZlLDB4YTAsMHgwNywweGU4LDB4MDAsMHhkYSwweDAwLDB4MjYsMHg4MSwweDBmLDB4YTAsMHgwMiwweDY4LDB4MDEgfX0sCisgezE2LCAweGMyZDAsIDAsIHsweGY2LDB4ZTAsMHgzZCwweDkyLDB4MGYsMHhhMCwweDAzLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMmUwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHhjMiwweGY4LDB4MDQsMHgzZSwweDE0LDB4MGYsMHg4MCwweDEzLDB4ZTAsMHgxMCwweGY4LDB4MDEsMHgzZSB9fSwKKyB7MTYsIDB4YzJmMCwgMCwgezB4MTAsMHgwZiwweDgwLDB4NDMsMHhlMCwweDAwLDB4YjgsMHgwMCwweDNlLDB4MDAsMHg0NywweDgwLDB4MDMsMHhlMCwweDAyLDB4ZTggfX0sCisgezE2LCAweGMzMDAsIDAsIHsweDEwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwNywweGEwLDB4MDAsMHhmOCwweDAwLDB4MmUsMHgwMCwweDBmLDB4ODAsMHgwYiwweGQyIH19LAorIHsxNiwgMHhjMzEwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDAsMHhmOSwweDAxLDB4MzIsMHg0MCB9fSwKKyB7MTYsIDB4YzMyMCwgMCwgezB4OGMsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGM5LDB4MDAsMHgzNiwweDQyLDB4MGYsMHg5MCwweDAzLDB4YTQsMHgwMCwweGM5LDB4MDAgfX0sCisgezE2LCAweGMzMzAsIDAsIHsweDNlLDB4NDIsMHgwZCwweDkwLDB4MDMsMHg2NCwweDAwLDB4ZDksMHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MGIsMHg2NCwweDAwIH19LAorIHsxNiwgMHhjMzQwLCAwLCB7MHhmOSwweDkwLDB4MzIsMHg0MSwweDBjLDB4OTAsMHgwMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzM1MCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHhiOSwweGM4LDB4YTIsMHg2MCwweDBhLDB4OTIsMHgwMiwweGU0LDB4MDAsMHg4OSwweDQwLDB4MmUgfX0sCisgezE2LCAweGMzNjAsIDAsIHsweDU4LDB4MGIsMHg5MCwweDAyLDB4MDQsMHgwMCwweGQ5LDB4MDAsMHgyZSwweDQyLDB4MDgsMHg5MCwweDAyLDB4ZTQsMHgwNCwweDg5IH19LAorIHsxNiwgMHhjMzcwLCAwLCB7MHgwMCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MDYsMHgyNCwweDA0LDB4YjksMHgwOCwweDJhLDB4NDAsMHg0OCwweDkwLDB4MTIsMHgyMCB9fSwKKyB7MTYsIDB4YzM4MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjksMHgxMCwweDIyLDB4NDQgfX0sCisgezE2LCAweGMzOTAsIDAsIHsweDA4LDB4OTAsMHgwMiwweGU0LDB4MDAsMHg4OSwweDAwLDB4MjIsMHg0NSwweDhiLDB4OTAsMHgwMiwweGE0LDB4MDAsMHg4OSwweDAwIH19LAorIHsxNiwgMHhjM2EwLCAwLCB7MHgyYSwweDQwLDB4MDksMHg5MCwweDAyLDB4ZTQsMHgwMCwweDk5LDB4ODAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDI2LDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4YzNiMCwgMCwgezB4YjksMHgwMSwweDIyLDB4NzAsMHgwOSwweDEwLDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMzYzAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDA4LDB4YjEsMHgyMCwweDIwLDB4NDAsMHgwYSwweDEwLDB4MDIsMHhjNCwweDgwLDB4ODMsMHgwMCwweDJjIH19LAorIHsxNiwgMHhjM2QwLCAwLCB7MHg1MCwweDRiLDB4MTAsMHgwMiwweDI0LDB4MDAsMHg5MSwweDAwLDB4MmUsMHg0MCwweDA4LDB4MTIsMHgwMiwweGM0LDB4ODEsMHg4MSB9fSwKKyB7MTYsIDB4YzNlMCwgMCwgezB4YTIsMHg2YywweDQwLDB4MGIsMHgxMiwweDAyLDB4MDQsMHg4MCwweGI5LDB4MjAsMHgyYSwweDQ4LDB4MjksMHgxMiwweDAyLDB4MDIgfX0sCisgezE2LCAweGMzZjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGY4LDB4MDAsMHgzMiwweDgwIH19LAorIHsxNiwgMHhjNDAwLCAwLCB7MHgwOCwweDgwLDB4MDMsMHhlMSwweDQyLDB4YzgsMHgwMCwweDMyLDB4MDAsMHgxZiwweDg1LDB4MDMsMHhhMSwweDQwLDB4YzgsMHg1MCB9fSwKKyB7MTYsIDB4YzQxMCwgMCwgezB4M2EsMHgwMCwweDhkLDB4ODUsMHgwMywweDYxLDB4NDAsMHhkOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4MDUsMHgwMywweDIxLDB4NDAgfX0sCisgezE2LCAweGM0MjAsIDAsIHsweGY4LDB4NTAsMHgzMiwweDE0LDB4MGQsMHg4NSwweDBiLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNDMwLCAwLCB7MHg5OCwweDFkLDB4ZjQsMHgwNCwweGZkLDB4MTAsMHgzZiwweDQwLDB4MGYsMHg1MCwweDAzLDB4YzQsMHg0MCwweGZkLDB4MDAsMHgzZiB9fSwKKyB7MTYsIDB4YzQ0MCwgMCwgezB4NTEsMHgwZiwweGQwLDB4MDMsMHhmNCwweDAwLDB4ZmYsMHgwMSwweDNkLDB4NDAsMHgwZiwweDkxLDB4MDMsMHhlNCwweDQwLDB4ZmQgfX0sCisgezE2LCAweGM0NTAsIDAsIHsweDEwLDB4M2YsMHg0YSwweDBmLDB4OTEsMHgwMywweGU0LDB4NDAsMHhmZCwweDEwLDB4M2YsMHg0NCwweDBlLDB4OTEsMHgwMywweGU2IH19LAorIHsxNiwgMHhjNDYwLCAwLCB7MHgwMiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGM1LDB4MDAsMHhjZCwweDAwLDB4MzEsMHg0MCB9fSwKKyB7MTYsIDB4YzQ3MCwgMCwgezB4MGQsMHhkMCwweDQzLDB4ZTQsMHgwMCwweGNkLDB4MDAsMHgzMywweDQwLDB4NGYsMHgxMSwweDAyLDB4ZTQsMHgwNCwweGMxLDB4MDAgfX0sCisgezE2LCAweGM0ODAsIDAsIHsweDNkLDB4NDAsMHgwYywweDkwLDB4MDMsMHhlNCwweDAwLDB4ZWQsMHhhNCwweDMyLDB4NTAsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwIH19LAorIHsxNiwgMHhjNDkwLCAwLCB7MHhmZCwweDAwLDB4M2YsMHg0MCwweDBmLDB4OTAsMHgwMywweGM2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzRhMCwgMCwgezB4MzgsMHgxMCwweGUyLDB4MDgsMHhkOCwweDAwLDB4MzIsMHgwMSwweDAwLDB4ODAsMHgxMiwweGMwLDB4MDAsMHg0OCwweDAwLDB4MzYgfX0sCisgezE2LCAweGM0YjAsIDAsIHsweDgwLDB4MGIsMHg4YSwweDAyLDB4ZTAsMHgwMCwweGE4LDB4MDAsMHgyZSwweDAwLDB4MGYsMHg4MCwweDAyLDB4ZTAsMHgwMCwweDg4IH19LAorIHsxNiwgMHhjNGMwLCAwLCB7MHg1MCwweDM0LDB4MjgsMHgwYiwweDgwLDB4MDIsMHhlMCwweDAwLDB4YjgsMHgwMCwweDJlLDB4MDAsMHgwYiwweDgwLDB4MDIsMHhjZSB9fSwKKyB7MTYsIDB4YzRkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDgwLDB4ODEsMHgwMCwweDI2LDB4NDAgfX0sCisgezE2LCAweGM0ZTAsIDAsIHsweDA5LDB4MTgsMHgwMiwweGM0LDB4MDgsMHgyMSwweDAwLDB4MjgsMHg0MCwweDhiLDB4MTAsMHgwMiwweGM0LDB4MDAsMHhiMSwweDAxIH19LAorIHsxNiwgMHhjNGYwLCAwLCB7MHgyZSwweDQwLDB4MTgsMHgxMCwweDAyLDB4YzQsMHgwMCwweGExLDB4MDEsMHgyMCwweDQ4LDB4MWIsMHgxMCwweDAyLDB4YzQsMHgwMCB9fSwKKyB7MTYsIDB4YzUwMCwgMCwgezB4YjEsMHgwMCwweDZjLDB4NDAsMHgwYiwweDEwLDB4MTIsMHhjMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM1MTAsIDAsIHsweDE4LDB4MTEsMHhhNCwweDAwLDB4OTksMHg4MCwweGEyLDB4NDIsMHg0OCwweDkwLDB4MDIsMHhlNCwweDAwLDB4YTksMHgyYSwweDI2IH19LAorIHsxNiwgMHhjNTIwLCAwLCB7MHg0NCwweDBiLDB4OTAsMHg4MiwweGM0LDB4ODEsMHhiOSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHg0MiwweGM0LDB4MDAsMHg4OSB9fSwKKyB7MTYsIDB4YzUzMCwgMCwgezB4MDAsMHgyNiwweDQwLDB4MGIsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDEsMHgyZSwweDQxLDB4MGIsMHg5MCwweDAyLDB4YzYgfX0sCisgezE2LCAweGM1NDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4YzUsMHgyMCwweGM5LDB4ODQsMHgzMCwweDcwIH19LAorIHsxNiwgMHhjNTUwLCAwLCB7MHgwZCwweDkwLDB4MTMsMHhlNCwweDAyLDB4ZTksMHgwMCwweDMyLDB4NzAsMHgwZiwweDk0LDB4MDMsMHhlNCwweDAwLDB4ZjksMHg0MCB9fSwKKyB7MTYsIDB4YzU2MCwgMCwgezB4M2MsMHg0OCwweDBjLDB4OTAsMHgwMywweGU0LDB4MDAsMHhlMSwweDAwLDB4MzIsMHg0MCwweDBmLDB4OTAsMHgwMSwweGU0LDB4MDAgfX0sCisgezE2LCAweGM1NzAsIDAsIHsweGY5LDB4OTAsMHgzZSwweDYwLDB4MGYsMHg5MCwweDI2LDB4ZTgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNTgwLCAwLCB7MHgyOCwweDAxLDB4YTUsMHgwMCwweGYxLDB4MDQsMHgzYSwweDQ0LDB4OGYsMHg5MCwweDAzLDB4ZTQsMHgxMCwweGM5LDB4MDQsMHgzZSB9fSwKKyB7MTYsIDB4YzU5MCwgMCwgezB4NjAsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZTksMHgyMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNCwweDEwLDB4ZjkgfX0sCisgezE2LCAweGM1YTAsIDAsIHsweDkwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDgwLDB4M2UsMHg2NCwweDBmLDB4OTAsMHgwNywweGNhIH19LAorIHsxNiwgMHhjNWIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGExLDB4MDAsMHhjOCwweDA0LDB4M2EsMHgwMCB9fSwKKyB7MTYsIDB4YzVjMCwgMCwgezB4MWUsMHg4MCwweDAzLDB4ODAsMHgwMywweGM4LDB4NDAsMHgyYSwweDA0LDB4MWYsMHg4MCwweDAzLDB4MjAsMHgwMCwweDg4LDB4MDAgfX0sCisgezE2LCAweGM1ZDAsIDAsIHsweDMyLDB4MzAsMHgwYywweDgwLDB4MDMsMHgyMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwYywweDgwLDB4MDMsMHhlMCwweDAwIH19LAorIHsxNiwgMHhjNWUwLCAwLCB7MHhjOCwweDgwLDB4M2UsMHgyMCwweDBmLDB4ODAsMHgwMywweGNhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzVmMCwgMCwgezB4MjgsMHgwNSwweDM4LDB4MDAsMHhhZSwweGQwLDB4MzcsMHg4MCwweDA4LDB4ZWMsMHg0NiwweDM4LDB4MDAsMHhkNiwweDA0LDB4MjMgfX0sCisgezE2LCAweGM2MDAsIDAsIHsweGEwLDB4MGIsMHhhMCwweDQxLDB4NzgsMHgwNCwweGZhLDB4MDAsMHgzNywweDgwLDB4MGQsMHhhMCwweDAyLDB4YTgsMHgxMCwweGVlIH19LAorIHsxNiwgMHhjNjEwLCAwLCB7MHgyMSwweDJlLDB4ODAsMHgwOCwweGEwLDB4MDIsMHhlOCwweDA4LDB4OGUsMHg4MCwweDJmLDB4YTAsMHg4YiwweGEwLDB4MDIsMHhjYSB9fSwKKyB7MTYsIDB4YzYyMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHg0YywweDAyLDB4ODMsMHhjMCwweGE4LDB4ZTggfX0sCisgezE2LCAweGM2MzAsIDAsIHsweDRhLDB4MzYsMHgwMiwweDhjLDB4MDAsMHgxMywweGEwLDB4MjgsMHhjMiwweDBiLDB4MzAsMHgwNiwweDBjLDB4MDAsMHhiMywweDAwIH19LAorIHsxNiwgMHhjNjQwLCAwLCB7MHgyNCwweDg0LDB4MDksMHgzMCwweDAyLDB4MGMsMHgwMCwweGIzLDB4MjAsMHgyOCwweGMwLDB4MDksMHgzMCwweDAyLDB4Y2MsMHgwMCB9fSwKKyB7MTYsIDB4YzY1MCwgMCwgezB4ODMsMHg4MCwweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhjYSwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM2NjAsIDAsIHsweGEwLDB4MDEsMHgzYywweDQ0LDB4YWYsMHg0MCwweDI1LDB4YzIsMHg0OCwweGY4LDB4ODIsMHgxYywweGM4LDB4OWYsMHgwOCwweDIxIH19LAorIHsxNiwgMHhjNjcwLCAwLCB7MHhjMCwweDhiLDB4ZjgsMHgwMiwweDVjLDB4MDAsMHhiZiwweGIwLDB4MjcsMHg4MCwweDA5LDB4M2EsMHgwMiwweDljLDB4MDAsMHhhNSB9fSwKKyB7MTYsIDB4YzY4MCwgMCwgezB4MDIsMHgyZCwweGU4LDB4MDksMHg3MCwweDAyLDB4Y2UsMHg4MCwweDg1LDB4MDgsMHgyZCwweGMyLDB4MGIsMHg3MywweDAyLDB4ZTggfX0sCisgezE2LCAweGM2OTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgwMCwweGM3LDB4ODIsMHhhOSwweGUwIH19LAorIHsxNiwgMHhjNmEwLCAwLCB7MHgwYSwweDc4LDB4MDIsMHg5ZSwweDQwLDB4OTcsMHg4NCwweDM5LDB4YTAsMHgwYiwweDdhLDB4ODMsMHgzZiwweDgwLDB4ZDcsMHg5MSB9fSwKKyB7MTYsIDB4YzZiMCwgMCwgezB4MzUsMHhhMCwweDBkLDB4N2EsMHgwOSwweDFlLDB4NDQsMHhmNywweDgwLDB4M2QsMHhlOCwweDJkLDB4N2EsMHgwMywweGRlLDB4ODIgfX0sCisgezE2LCAweGM2YzAsIDAsIHsweGM2LDB4ODAsMHgzZCwweDIwLDB4NGIsMHg3YiwweDIzLDB4ZWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNmQwLCAwLCB7MHgwOCwweDFkLDB4YWMsMHgwMCwweGQzLDB4MDAsMHgzZSwweGMxLDB4MGYsMHgzMCwweDAzLDB4ZWQsMHg4MCwweGUzLDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4YzZlMCwgMCwgezB4ODAsMHgwZiwweGI2LDB4MjEsMHhlYywweDA4LDB4ZGIsMHgyMSwweDNlLDB4ODAsMHgwZiwweGI1LDB4MDMsMHg2YywweDQwLDB4ZjkgfX0sCisgezE2LCAweGM2ZjAsIDAsIHsweDAwLDB4M2UsMHhkYywweDBlLDB4YjIsMHgwMywweGVkLDB4NDAsMHhmOSwweDAyLDB4M2UsMHg4MCwweDBmLDB4YjAsMHgwMywweGMyIH19LAorIHsxNiwgMHhjNzAwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGZlLDB4MDAsMHhjZiwweDgwLDB4M2QsMHhlMCB9fSwKKyB7MTYsIDB4YzcxMCwgMCwgezB4MGYsMHhjOCwweDQzLDB4ZmUsMHgwMCwweGZlLDB4ODQsMHgzZiwweGUwLDB4MGQsMHhmOCwweGMzLDB4ZmYsMHgxMCwweGFmLDB4OTAgfX0sCisgezE2LCAweGM3MjAsIDAsIHsweDM1LDB4YTAsMHgwYywweGZjLDB4MDMsMHgzZSwweDE0LDB4ZWMsMHg4NCwweDNmLDB4ZjAsMHgwZSwweGZjLDB4YzMsMHhmZiwweDA4IH19LAorIHsxNiwgMHhjNzMwLCAwLCB7MHg0ZiwweDgwLDB4MzMsMHhlNCwweDBjLDB4ZjgsMHgwMywweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Yzc0MCwgMCwgezB4YTgsMHgxMSwweDljLDB4MDAsMHhkNywweGEyLDB4MmQsMHhjNCwweDBjLDB4NDEsMHhjMiwweGRjLDB4MDAsMHg3NCwweDAwLDB4MjUgfX0sCisgezE2LCAweGM3NTAsIDAsIHsweDgwLDB4MGYsMHg3MiwweDQyLDB4ZGMsMHg5MCwweGQ3LDB4MzgsMHgyZCwweDk4LDB4MGEsMHg3MCwweDAyLDB4MWMsMHgwNCwweDg2IH19LAorIHsxNiwgMHhjNzYwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHgwZCwweDcwLDB4MDIsMHhjYywweDAwLDB4ODYsMHgwOCwweDM3LDB4YzYsMHgyOCwweDcwLDB4MDIsMHgyYSB9fSwKKyB7MTYsIDB4Yzc3MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4ODcsMHg2MCwweDJkLDB4YzIgfX0sCisgezE2LCAweGM3ODAsIDAsIHsweDBhLDB4NTAsMHgwMiwweGRjLDB4MDAsMHhiNiwweDEwLDB4MjUsMHhjMiwweDA5LDB4NzAsMHg4NiwweGRjLDB4MzAsMHg5NywweDAwIH19LAorIHsxNiwgMHhjNzkwLCAwLCB7MHgyNSwweDgwLDB4MDgsMHgzMCwweDAyLDB4NWMsMHgwMCwweDg3LDB4MDgsMHgyZCwweGMwLDB4MDgsMHg3MCwweDAyLDB4Y2MsMHg0MCB9fSwKKyB7MTYsIDB4YzdhMCwgMCwgezB4ODYsMHgwMCwweDIxLDB4MDAsMHgwOSwweDcwLDB4MGEsMHgwMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM3YjAsIDAsIHsweDIwLDB4MTQsMHhlZCwweDgwLDB4OTMsMHgwMCwweDBjLDB4ZTEsMHgyOCwweDE4LDB4MDIsMHhjYywweDA4LDB4YTAsMHgwMCwweDI0IH19LAorIHsxNiwgMHhjN2MwLCAwLCB7MHgxMiwweDFhLDB4MzQsMHgwMiwweGNmLDB4MDQsMHg5MywweDQwLDB4MmMsMHg4MCwweDBhLDB4YjAsMHgyMiwweDRjLDB4MDIsMHg4MSB9fSwKKyB7MTYsIDB4YzdkMCwgMCwgezB4ODAsMHgyOCwweGUwLDB4MjgsMHgzMCwweDAyLDB4Y2MsMHgwMCwweDg4LDB4ODIsMHgyNCwweDIwLDB4MDgsMHhiMCwweDAyLDB4MDggfX0sCisgezE2LCAweGM3ZTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmYsMHgyMCwweGM5LDB4ZTAsMHgyYywweGYxIH19LAorIHsxNiwgMHhjN2YwLCAwLCB7MHgwZSwweGJkLDB4MDMsMHhmYywweDAwLDB4YjksMHg0MCwweDM2LDB4NDAsMHgwOSwweGY1LDB4MDIsMHhmZCwweDQwLDB4ZmYsMHg4MCB9fSwKKyB7MTYsIDB4YzgwMCwgMCwgezB4MzYsMHhhMiwweDA4LDB4ZjAsMHgwYiwweDdjLDB4MDAsMHhlYiwweDgwLDB4MmYsMHhlMCwweDBhLDB4ZjAsMHg0MywweGZjLDB4MDIgfX0sCisgezE2LCAweGM4MTAsIDAsIHsweDhiLDB4ZDAsMHgzMiwweGYwLDB4MGQsMHhmMCwweDAzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjODIwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgxMCwweGZiLDB4MDAsMHgzZSwweGM4LDB4MGYsMHg5NCwweDEzLDB4ZWMsMHgwMCwweGY5LDB4NDAsMHgzNiB9fSwKKyB7MTYsIDB4YzgzMCwgMCwgezB4NDAsMHgxZiwweGIwLDB4MDMsMHhlYywweDEwLDB4ZmIsMHgwMSwweDNlLDB4ZDAsMHgwZiwweGIwLDB4MDMsMHhhYywweDAwLDB4ZjkgfX0sCisgezE2LCAweGM4NDAsIDAsIHsweDAwLDB4M2UsMHhjNCwweDBmLDB4YjAsMHgwMSwweGVjLDB4MDAsMHhmOSwweDA0LDB4M2UsMHg0OCwweDBmLDB4YjAsMHgwMywweGUwIH19LAorIHsxNiwgMHhjODUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGZjLDB4MDAsMHhkZiwweDAwLDB4M2YsMHhjMCB9fSwKKyB7MTYsIDB4Yzg2MCwgMCwgezB4MGMsMHhlMCwweDA3LDB4ZmMsMHgwMCwweGZjLDB4MGEsMHgyNywweDAwLDB4NGYsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDggfX0sCisgezE2LCAweGM4NzAsIDAsIHsweDMzLDB4ODAsMHgwYywweGYwLDB4MDAsMHgyYywweDAwLDB4NWYsMHgwMCwweDMzLDB4YzAsMHgwYywweGYwLDB4MDEsMHhmYywweDAwIH19LAorIHsxNiwgMHhjODgwLCAwLCB7MHhmZSwweDAwLDB4MjMsMHg0MCwweDBmLDB4YjAsMHgwMywweDAwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Yzg5MCwgMCwgezB4ODEsMHgwNCwweDZjLDB4MDAsMHg4YiwweDg2LDB4MmUsMHhlMCwweDQ4LDB4OGYsMHgwMiwweGVjLDB4MDgsMHhiOCwweGEwLDB4MzYgfX0sCisgezE2LCAweGM4YTAsIDAsIHsweDMwLDB4NGIsMHhiMCwweDAzLDB4YWMsMHgwYywweDliLDB4MDIsMHgzYywweGEwLDB4MGMsMHhiMCwweDQzLDB4NmMsMHgwMCwweGIxIH19LAorIHsxNiwgMHhjOGIwLCAwLCB7MHgwMCwweDI4LDB4YzAsMHgwZCwweGIwLDB4MTIsMHhlYywweDEwLDB4YjksMHg4MCwweGEyLDB4NjEsMHgwYiwweGIwLDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4YzhjMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OWIsMHg4OCwweDJlLDB4ZTAgfX0sCisgezE2LCAweGM4ZDAsIDAsIHsweDA4LDB4YTAsMHgwMiwweGVjLDB4MDEsMHhiYiwweDgwLDB4MjYsMHg2MiwweDBiLDB4YjAsMHgwMiwweGVjLDB4MDAsMHhiMywweDAxIH19LAorIHsxNiwgMHhjOGUwLCAwLCB7MHgyYSwweDIxLDB4MDgsMHhiMCwweDEyLDB4MmMsMHgwMCwweGI4LDB4MDAsMHgyMiwweGMwLDB4MDgsMHhiMCwweDEyLDB4ZWMsMHgxNCB9fSwKKyB7MTYsIDB4YzhmMCwgMCwgezB4YjksMHg4NCwweDIyLDB4YTIsMHgwYiwweGIwLDB4MDIsMHhhMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM5MDAsIDAsIHsweDA4LDB4MDQsMHgwYywweDA0LDB4OTMsMHgwMCwweDJjLDB4ZTAsMHgwOCwweDAwLDB4MDIsMHhjYywweDA5LDB4OTEsMHgwMCwweDIwIH19LAorIHsxNiwgMHhjOTEwLCAwLCB7MHg0MCwweDBiLDB4MzAsMHgwNiwweDRjLDB4MDQsMHgxMywweDAwLDB4MjYsMHgwMCwweDA4LDB4MzAsMHgwMiwweGNjLDB4MDQsMHhiMiB9fSwKKyB7MTYsIDB4YzkyMCwgMCwgezB4MDAsMHgyYSwweGMwLDB4MDEsMHgzMCwweDAwLDB4Y2QsMHgwMCwweGIwLDB4MDAsMHgyMCwweDgwLDB4MGIsMHgzMCwweDBhLDB4MDIgfX0sCisgezE2LCAweGM5MzAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGRiLDB4MjQsMHg2ZSwweGMwIH19LAorIHsxNiwgMHhjOTQwLCAwLCB7MHgyYywweGEwLDB4MDIsMHhmYywweDAwLDB4YmEsMHgwNCwweDI2LDB4NDAsMHg0ZiwweGYwLDB4NTcsMHhmYywweDAwLDB4M2YsMHgwMSB9fSwKKyB7MTYsIDB4Yzk1MCwgMCwgezB4M2EsMHgwMCwweDJjLDB4ZjAsMHgwMSwweDNjLDB4MDAsMHhkYiwweDAwLDB4MzMsMHhjMCwweDg0LDB4ZjAsMHgwMywweGZkLDB4MDggfX0sCisgezE2LCAweGM5NjAsIDAsIHsweGZhLDB4MDAsMHgzMiwweDAwLDB4MGYsMHhmMCwweDAzLDB4MDAsMHgwMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjOTcwLCAwLCB7MHhhMCwweDE5LDB4ZGMsMHgwMCwweGVhLDB4NDAsMHgzZiwweDAwLDB4MDcsMHhjMCwweDAzLDB4ZmMsMHgwNCwweGZjLDB4MDAsMHgzZiB9fSwKKyB7MTYsIDB4Yzk4MCwgMCwgezB4NDAsMHgwZiwweGYwLDB4MDMsMHg5YywweDAwLDB4ZmYsMHgwMCwweDNmLDB4MDAsMHgwZSwweGYwLDB4MDMsMHg3YywweDAwLDB4ZmQgfX0sCisgezE2LCAweGM5OTAsIDAsIHsweDAwLDB4M2YsMHhjMSwweDBmLDB4ZjAsMHgwMywweGZjLDB4ODQsMHhmNCwweDAwLDB4M2YsMHgwMCwweDBmLDB4ZjAsMHgwMywweGU4IH19LAorIHsxNiwgMHhjOWEwLCAwLCB7MHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMSwweGYwLDB4ODAsMHhmZiwweDAwLDB4MDMsMHhjMiB9fSwKKyB7MTYsIDB4YzliMCwgMCwgezB4MGYsMHhjMiwweDAzLDB4M2UsMHgwMCwweGRmLDB4YzAsMHgzZSwweGMwLDB4NGQsMHhkYiwweDAyLDB4YjAsMHhjMCwweGRjLDB4MzAgfX0sCisgezE2LCAweGM5YzAsIDAsIHsweDNmLDB4ZTAsMHgwZiwweGRiLDB4MjMsMHhmNiwweDIwLDB4ZmYsMHgyNiwweDMzLDB4ZTAsMHgwZiwweDUyLDB4MDMsMHg1ZSwweDAwIH19LAorIHsxNiwgMHhjOWQwLCAwLCB7MHhmZiwweDgwLDB4MzMsMHhjMCwweDRjLDB4NDksMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzllMCwgMCwgezB4ODAsMHgxMCwweGUxLDB4ZTAsMHhiNywweDA4LDB4MjMsMHhmMCwweDBiLDB4YWQsMHgwYSwweDJlLDB4MDAsMHg5YSwweDA0LDB4MmUgfX0sCisgezE2LCAweGM5ZjAsIDAsIHsweGIwLDB4MDksMHg4ZiwweDAzLDB4YTAsMHg0MCwweGI5LDB4MzAsMHgyZSwweGEwLDB4MGIsMHg5ZiwweDAzLDB4YTcsMHgwMCwweGJiIH19LAorIHsxNiwgMHhjYTAwLCAwLCB7MHg4MCwweDI2LDB4ZTAsMHgwYiwweGRkLDB4MDIsMHgyZSwweDAwLDB4YmIsMHg4MCwweDIyLDB4ZjQsMHgwYSwweDkyLDB4MDIsMHhhMCB9fSwKKyB7MTYsIDB4Y2ExMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjOCwweDgwLDB4YjMsMHgxMCwweDI0LDB4YzAgfX0sCisgezE2LCAweGNhMjAsIDAsIHsweDBiLDB4ODAsMHgwMiwweGFjLDB4MDAsMHhhMywweDI0LDB4MmMsMHhkMCwweDA4LDB4MTAsMHgwNiwweGMwLDB4ODAsMHhiMiwweDAxIH19LAorIHsxNiwgMHhjYTMwLCAwLCB7MHgyYywweGVhLDB4NGIsMHgwMCwweDEyLDB4YzIsMHgwNCwweGIzLDB4MTAsMHgwOCwweGMwLDB4MGEsMHg5MCwweDAyLDB4MGMsMHgwMCB9fSwKKyB7MTYsIDB4Y2E0MCwgMCwgezB4OTMsMHgwNCwweDI0LDB4YzAsMHgwOSwweDgyLDB4MDIsMHhhMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNhNTAsIDAsIHsweGMwLDB4MTUsMHhhNSwweDAwLDB4YmIsMHgwMCwweDIyLDB4YzAsMHgwYiwweDgwLDB4MDIsMHhhYywweDA4LDB4YmIsMHgxOCwweDJlIH19LAorIHsxNiwgMHhjYTYwLCAwLCB7MHhlMCwweDE4LDB4ODgsMHgwMiwweGVjLDB4MDEsMHhiYSwweDAwLDB4MmUsMHg4MCwweDBiLDB4OTgsMHg4NiwweGUyLDB4MDAsMHhiYiB9fSwKKyB7MTYsIDB4Y2E3MCwgMCwgezB4MDAsMHgyMiwweGM0LDB4MGIsMHg5MCwweDAyLDB4NmMsMHgwMCwweGJiLDB4MDAsMHhhNiwweGMwLDB4MGIsMHg5MCwweDAwLDB4YjAgfX0sCisgezE2LCAweGNhODAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDExLDB4ZTcsMHgwMCwweGZiLDB4MDAsMHhiMiwweGMwIH19LAorIHsxNiwgMHhjYTkwLCAwLCB7MHgwZiwweGE4LDB4MDMsMHhhYywweDAyLDB4ZWIsMHgwMCwweDNlLDB4NjAsMHgwZCwweDllLDB4MDMsMHhlYywweDAwLDB4ZDgsMHg0MCB9fSwKKyB7MTYsIDB4Y2FhMCwgMCwgezB4M2UsMHg0MCwweDBmLDB4ODgsMHg0MywweGUyLDB4MDAsMHhmYiwweDIwLDB4MzIsMHhjMCwweDBmLDB4MTAsMHgwYiwweDZmLDB4OTAgfX0sCisgezE2LCAweGNhYjAsIDAsIHsweDViLDB4ODIsMHgzNiwweGMwLDB4MmQsMHgwOCwweDAxLDB4OTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjYWMwLCAwLCB7MHhlMCwweDAxLDB4YjcsMHgwOCwweGY3LDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmOSwweDAzLDB4N2MsMHgwOCwweGNmLDB4ODIsMHgzYyB9fSwKKyB7MTYsIDB4Y2FkMCwgMCwgezB4MDAsMHhhZiwweGQwLDB4MjEsMHhiYywweDA4LDB4ZmQsMHgxMCwweDNmLDB4ODAsMHg4ZiwweGMwLDB4MDMsMHhhNCwweDAwLDB4ZjcgfX0sCisgezE2LCAweGNhZTAsIDAsIHsweDAxLDB4YmYsMHhjMCwweDA3LDB4ZDAsMHgwMywweGJkLDB4MzAsMHhmZiwweGE0LDB4MzgsMHhjMCwweDBlLDB4ZGEsMHgwMywweGY4IH19LAorIHsxNiwgMHhjYWYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGE4LDB4MDAsMHhmYiwweDAwLDB4YjIsMHhjMSB9fSwKKyB7MTYsIDB4Y2IwMCwgMCwgezB4MGUsMHg4MSwweDAzLDB4ZWMsMHg0MCwweGZiLDB4NDQsMHgzYSwweGMxLDB4MGUsMHg5NSwweDAzLDB4ZTAsMHgwMCwweGNiLDB4NDEgfX0sCisgezE2LCAweGNiMTAsIDAsIHsweDMyLDB4NGQsMHgwZiwweDgxLDB4MDMsMHhlMCwweDIwLDB4YzksMHgwMCwweDcyLDB4ZTgsMHg0NCwweDkxLDB4MDMsMHg2ZCwweDAwIH19LAorIHsxNiwgMHhjYjIwLCAwLCB7MHhjYiwweDAyLDB4M2UsMHhjMCwweDBjLDB4ODAsMHgwMywweDkwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2IzMCwgMCwgezB4YzgsMHgwNSwweDI0LDB4MDAsMHhiZiwweDAwLDB4MzMsMHhjNCwweDA4LDB4MWQsMHgwMywweDhjLDB4MDAsMHhiYiwweDk4LDB4MzYgfX0sCisgezE2LCAweGNiNDAsIDAsIHsweDQ4LDB4NGQsMHg5OCwweDIyLDB4ZWQsMHg0MCwweGRiLDB4MDAsMHgzNiwweGIwLDB4MGIsMHg5OCwweDAyLDB4ZTMsMHgwMCwweGRiIH19LAorIHsxNiwgMHhjYjUwLCAwLCB7MHgwMCwweDMyLDB4ZTAsMHg4OCwweGQ4LDB4MDIsMHgyYywweDAyLDB4YzMsMHg4MCwweDJmLDB4YzAsMHgwOCwweDkwLDB4MDMsMHg3MiB9fSwKKyB7MTYsIDB4Y2I2MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHg0NCwweDAwLDB4YjMsMHgwMCwweDIwLDB4ZjAgfX0sCisgezE2LCAweGNiNzAsIDAsIHsweDE4LDB4MDgsMHgwMiwweDRmLDB4ODQsMHhiMSwweGMwLDB4MjQsMHhjMCwweDg5LDB4MDYsMHgwMiwweGM0LDB4MDAsMHg5MSwweDAwIH19LAorIHsxNiwgMHhjYjgwLCAwLCB7MHgyMCwweGYwLDB4MWIsMHgxOCwweDgyLDB4YzYsMHgwMCwweDkzLDB4MDAsMHgyYywweGQxLDB4MDgsMHgxZSwweDAyLDB4MGUsMHg0NCB9fSwKKyB7MTYsIDB4Y2I5MCwgMCwgezB4OTMsMHg5NCwweDJjLDB4YzAsMHgwOCwweDIwLDB4MDIsMHhiOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNiYTAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDA0LDB4YjcsMHg4MCwweDIwLDB4ZTIsMHgwOCwweDY4LDB4MDYsMHg5ZSwweDgwLDB4YmYsMHg4NCwweDI1IH19LAorIHsxNiwgMHhjYmIwLCAwLCB7MHhhOCwweDA5LDB4NjgsMHgwMiwweGM2LDB4MDAsMHg5MywweGEwLDB4NjUsMHhlNCwweDBiLDB4NzgsMHgxMiwweGRlLDB4MDAsMHg5MyB9fSwKKyB7MTYsIDB4Y2JjMCwgMCwgezB4MDAsMHhhMSwweGUwLDB4MDgsMHhkOCwweDAyLDB4MWUsMHhkMCwweGE3LDB4ODAsMHgyZCwweGUwLDB4MDgsMHhmOCwweDAyLDB4NDggfX0sCisgezE2LCAweGNiZDAsIDAsIHsweDEwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MDgsMHgwMCwweGIzLDB4MjAsMHgzMCwweGMwIH19LAorIHsxNiwgMHhjYmUwLCAwLCB7MHgwYSwweDIyLDB4MDIsMHhjZSwweDQwLDB4ZjMsMHhhMCwweDNjLDB4ZTgsMHgwYiwweDMwLDB4MDIsMHhjMSwweDAwLDB4ZDAsMHhjMSB9fSwKKyB7MTYsIDB4Y2JmMCwgMCwgezB4MzAsMHhjMCwweDBiLDB4MjEsMHgxMywweGNjLDB4MjEsMHhkMywweDAwLDB4MmMsMHhjMCwweDJjLDB4MTAsMHgwYiwweDBjLDB4ODAgfX0sCisgezE2LCAweGNjMDAsIDAsIHsweGQzLDB4NjEsMHgzYywweGM4LDB4MmMsMHgyMCwweDAzLDB4OTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjYzEwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwMCwweGZmLDB4NDAsMHgzYiwweGMwLDB4MGYsMHhlMCwweDAzLDB4ZmMsMHgwMCwweGY3LDB4NTAsMHg3ZiB9fSwKKyB7MTYsIDB4Y2MyMCwgMCwgezB4YzQsMHgyZSwweGYwLDB4MDMsMHhmYywweDQwLDB4ZmUsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4NDcsMHhmYywweDAwLDB4ZmYgfX0sCisgezE2LCAweGNjMzAsIDAsIHsweDAwLDB4N2QsMHhjMiwweDBmLDB4ZDAsMHgwMSwweGJjLDB4ODAsMHg1ZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGQwIH19LAorIHsxNiwgMHhjYzQwLCAwLCB7MHgwMiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGU0LDB4MDAsMHhmYiwweGMwLDB4MzIsMHhjOCB9fSwKKyB7MTYsIDB4Y2M1MCwgMCwgezB4MGUsMHhlMCwweDAzLDB4YWMsMHhhMCwweGViLDB4MjAsMHgzMiwweDQwLDB4OGMsMHhhMCwweDEzLDB4MmMsMHgwMCwweGQ5LDB4MDAgfX0sCisgezE2LCAweGNjNjAsIDAsIHsweDNlLDB4NjAsMHgwYywweGIwLDB4MDMsMHhlOCwweDAwLDB4ZmEsMHg4MCwweDMwLDB4YzAsMHgzYywweDkyLDB4MDMsMHhlZiwweDYwIH19LAorIHsxNiwgMHhjYzcwLCAwLCB7MHhjMywweDIwLDB4MzEsMHhjNCwweDBjLDB4YTAsMHgwMywweDJhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2M4MCwgMCwgezB4NDgsMHgxMSwweDljLDB4MDAsMHgzMywweDIwLDB4MjEsMHhkYSwweDBiLDB4NzAsMHg0MywweDljLDB4MDEsMHhiNSwweDAwLDB4MjEgfX0sCisgezE2LCAweGNjOTAsIDAsIHsweDAwLDB4MGEsMHhlMCwweDAyLDB4MWMsMHgwMCwweGI3LDB4MDAsMHgyZiwweGMwLDB4MGQsMHg3MCwweDAzLDB4OWMsMHgwMCwweGI2IH19LAorIHsxNiwgMHhjY2EwLCAwLCB7MHgwMCwweDMxLDB4YzgsMHgwOCwweDU3LDB4MDIsMHhkYywweDAwLDB4ODcsMHg1MCwweDIxLDB4YzAsMHgwYSwweDcwLDB4NDIsMHg5MiB9fSwKKyB7MTYsIDB4Y2NiMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5YSwweDExLDB4YjcsMHg5MCwweDIxLDB4ZTAgfX0sCisgezE2LCAweGNjYzAsIDAsIHsweDBiLDB4NjgsMHg4MiwweGRlLDB4MDgsMHhhNywweDgwLDB4MjQsMHg2MCwweDA4LDB4NzAsMHgxMiwweDEyLDB4MDgsMHg5NSwweDgwIH19LAorIHsxNiwgMHhjY2QwLCAwLCB7MHgyZCwweDYwLDB4MDksMHg2YywweDAyLDB4ZGUsMHgwMCwweGIxLDB4ODAsMHgyMywweGUwLDB4MGEsMHg1OCwweDYyLDB4ZmUsMHgwMCB9fSwKKyB7MTYsIDB4Y2NlMCwgMCwgezB4OTcsMHhhMCwweDIxLDB4ZTgsMHgwOSwweGU4LDB4MDIsMHgzMCwweDEwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNjZjAsIDAsIHsweDQ4LDB4MTQsMHhjZCwweDAwLDB4YjMsMHgwMCwweDIwLDB4YzAsMHg4YiwweDNjLDB4MDIsMHg4YywweDAwLDB4YmIsMHgwMCwweDI0IH19LAorIHsxNiwgMHhjZDAwLCAwLCB7MHhjNCwweDFhLDB4M2QsMHgwMiwweDJmLDB4ODgsMHhiMywweDQ4LDB4MmMsMHhlMCwweDg5LDB4M2UsMHgwMiwweDhkLDB4ODAsMHg5MyB9fSwKKyB7MTYsIDB4Y2QxMCwgMCwgezB4ZDksMHhhNCwweDQwLDB4ODgsMHgxMCwweDAyLDB4Y2MsMHgwNCwweDkzLDB4YzgsMHgyMCwweGMwLDB4MGIsMHgzMCwweDAyLDB4OTIgfX0sCisgezE2LCAweGNkMjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YjksMHg0MCwweGZhLDB4MDAsMHhiMiwweDgwIH19LAorIHsxNiwgMHhjZDMwLCAwLCB7MHgwZiwweGUwLDB4MDMsMHhlOCwweDAwLDB4ZWEsMHg4MCwweDM3LDB4YTAsMHgwYywweGU4LDB4MTMsMHgzYiwweDA4LDB4ZGUsMHgwMSB9fSwKKyB7MTYsIDB4Y2Q0MCwgMCwgezB4M2YsMHg4MiwweDBjLDB4ZTAsMHg0MywweGZhLDB4ODAsMHhmZSwweDgwLDB4MzEsMHgyOCwweDBjLDB4YTAsMHgwMywweGYwLDB4MDIgfX0sCisgezE2LCAweGNkNTAsIDAsIHsweGM0LDB4YzAsMHhiMiwweDgwLDB4MGQsMHhlMCwweDAzLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjZDYwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDEwLDB4MGIsMHg4MCwweDgzLDB4ZTAsMHgwMCwweGY4LDB4MzAsMHgzYSB9fSwKKyB7MTYsIDB4Y2Q3MCwgMCwgezB4MDAsMHg2ZCwweDgwLDB4ODMsMHhlMSwweDQ0LDB4YjgsMHgwNCwweDNlLDB4MTAsMHgwZiwweDgwLDB4MTMsMHhlMCwweDAwLDB4ZjggfX0sCisgezE2LCAweGNkODAsIDAsIHsweDAwLDB4M2EsMHgxMCwweDRmLDB4MDQsMHgwMywweGUzLDB4MDAsMHhlOCwweDEwLDB4M2UsMHgwMCwweDBlLDB4ODAsMHgwMywweGQyIH19LAorIHsxNiwgMHhjZDkwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDAsMHhjOSwweDAwLDB4MzgsMHg0MCB9fSwKKyB7MTYsIDB4Y2RhMCwgMCwgezB4MGYsMHgxYSwweDAzLDB4MmUsMHgwMCwweGZiLDB4YTAsMHgzNiwweDYwLDB4MGMsMHg5OCwweDAzLDB4ZTYsMHgwNCwweGQxLDB4MDAgfX0sCisgezE2LCAweGNkYjAsIDAsIHsweDM2LDB4NDgsMHgwZSwweDkxLDB4MDIsMHhlNiwweDAwLDB4ZjksMHgwMCwweDNlLDB4MDAsMHgwYywweDk5LDB4MDMsMHg2MiwweDQwIH19LAorIHsxNiwgMHhjZGMwLCAwLCB7MHhmOCwweDAwLDB4YTAsMHg2OCwweDBjLDB4OTAsMHgwMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2RkMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDIsMHg4OSwweDA0LDB4MmUsMHg2NCwweDg4LDB4OTQsMHgwMiwweGE1LDB4MDAsMHhiOSwweDgwLDB4MjAgfX0sCisgezE2LCAweGNkZTAsIDAsIHsweDY0LDB4MGQsMHg5YywweDAyLDB4ZTYsMHg0MiwweDg5LDB4MDAsMHgyMiwweDYwLDB4MGIsMHg5YywweDAyLDB4ZTQsMHgxMCwweGI5IH19LAorIHsxNiwgMHhjZGYwLCAwLCB7MHg0MCwweDNhLDB4NTAsMHgwOCwweDljLDB4MDIsMHgyNywweDIwLDB4YjksMHgwMCwweDIyLDB4NDAsMHgwOCwweDEwLDB4MDMsMHg2MCB9fSwKKyB7MTYsIDB4Y2UwMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgwNCwweDAwLDB4ODksMHgwMCwweDIyLDB4NDAgfX0sCisgezE2LCAweGNlMTAsIDAsIHsweDBhLDB4OTAsMHg4MiwweDI1LDB4NGMsMHhiOSwweDAwLDB4MDIsMHg0MCwweDA4LDB4OTYsMHgwMiwweGU0LDB4MTAsMHg4OSwweDAwIH19LAorIHsxNiwgMHhjZTIwLCAwLCB7MHgyNiwweDUwLDB4MTMsMHg5NCwweDAyLDB4ZTQsMHg0MCwweGI5LDB4MDgsMHgyZSwweDQwLDB4MDgsMHg5MCwweDhhLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4Y2UzMCwgMCwgezB4YjksMHgwMSwweDJhLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNlNDAsIDAsIHsweDA4LDB4MDQsMHgwNSwweDgwLDB4ODEsMHg0MCwweDJjLDB4YzgsMHgwOCwweDEwLDB4MDYsMHg4NCwweDAwLDB4YjEsMHgwNCwweDIwIH19LAorIHsxNiwgMHhjZTUwLCAwLCB7MHg0OSwweDA5LDB4MTQsMHg0MiwweGNjLDB4ODksMHg4MSwweDIwLDB4MjAsMHg1MCwweDBiLDB4MTQsMHg0NiwweGM0LDB4MDAsMHhiMSB9fSwKKyB7MTYsIDB4Y2U2MCwgMCwgezB4MDAsMHgyYSwweGMwLDB4MjgsMHgxNCwweDAyLDB4MDEsMHgwMSwweGIwLDB4MDQsMHgyOCwweDQwLDB4MzgsMHg5NCwweDAyLDB4NDIgfX0sCisgezE2LCAweGNlNzAsIDAsIHsweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweDg4LDB4MDAsMHgzYSwweDAwIH19LAorIHsxNiwgMHhjZTgwLCAwLCB7MHgwZSwweDgwLDB4MjMsMHgyMCwweDAwLDB4ZjgsMHg1MCwweGIyLDB4MDAsMHgwYywweDgwLDB4MTIsMHhlMSwweDQwLDB4ZDgsMHg1MCB9fSwKKyB7MTYsIDB4Y2U5MCwgMCwgezB4MzYsMHgwMCwweDBlLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmOCwweDAwLDB4MmUsMHgwMCwweDBjLDB4ODAsMHg1MywweDYwLDB4MDQgfX0sCisgezE2LCAweGNlYTAsIDAsIHsweGY4LDB4MDAsMHgzYSwweDAwLDB4MGMsMHg4MCwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjZWIwLCAwLCB7MHg5OCwweDFkLDB4ZjQsMHg0MCwweGY5LDB4NDQsMHgzZSwweDQ0LDB4MGYsMHhkNCwweDAzLDB4ZTQsMHgwMCwweGYxLDB4MDAsMHgzZiB9fSwKKyB7MTYsIDB4Y2VjMCwgMCwgezB4NDQsMHgwZiwweGQ0LDB4NTMsMHhmNCwweDQ0LDB4ZmQsMHgxMCwweDJmLDB4NDAsMHgwZiwweGY0LDB4MDMsMHhmZCwweDAwLDB4ZmQgfX0sCisgezE2LCAweGNlZDAsIDAsIHsweDQwLDB4M2IsMHgxMCwweDBmLDB4ZDQsMHgyMywweGQxLDB4MDQsMHg3YywweDQzLDB4MzYsMHg1MCwweDBmLDB4NTAsMHgwMywweGU2IH19LAorIHsxNiwgMHhjZWUwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGE2LDB4MDAsMHhmOSwweDEwLDB4MmUsMHg2MiB9fSwKKyB7MTYsIDB4Y2VmMCwgMCwgezB4MGYsMHhkMiwweDgzLDB4ZTQsMHgwMCwweGJkLDB4NDIsMHgzZSwweDYxLDB4MGYsMHhkMCwweDAzLDB4ZjYsMHhjMCwweGM5LDB4YTIgfX0sCisgezE2LCAweGNmMDAsIDAsIHsweDJiLDB4NDAsMHgwYywweGQwLDB4MDMsMHgzNCwweDAwLDB4ZjksMHg4MSwweDNlLDB4NjgsMHgwOCwweGMxLDB4NDMsMHhmYSwweDAwIH19LAorIHsxNiwgMHhjZjEwLCAwLCB7MHhmNSwweDgwLDB4M2YsMHg2MiwweDBjLDB4MTQsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2YyMCwgMCwgezB4MzgsMHgxMCwweGUxLDB4MjAsMHg4OCwweDExLDB4MmUsMHgxMCwweDBiLDB4ODAsMHgwMiwweGUwLDB4MDAsMHhiOCwweDgyLDB4MmUgfX0sCisgezE2LCAweGNmMzAsIDAsIHsweDEwLDB4MGIsMHg4MCwweDAwLDB4ZTMsMHhjNCwweDg4LDB4ZjAsMHgyMiwweDAwLDB4MGIsMHg4MCwweDBhLDB4MjAsMHgwMCwweGU4IH19LAorIHsxNiwgMHhjZjQwLCAwLCB7MHg0MCwweDJmLDB4MTQsMHgwOCwweDg4LDB4MDIsMHhlMiwweDAwLDB4YjgsMHgwMCwweDJlLDB4MDAsMHgwOCwweDg4LDB4MDIsMHg4ZSB9fSwKKyB7MTYsIDB4Y2Y1MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHhjNSwweDAwLDB4YTEsMHgwMCwweDJjLDB4NDAgfX0sCisgezE2LCAweGNmNjAsIDAsIHsweDBiLDB4MTAsMHgwMiwweGM0LDB4MTgsMHhiMSwweDIyLDB4NmMsMHhkMSwweDBiLDB4MTAsMHgyNiwweGM0LDB4MDAsMHg4MSwweDA4IH19LAorIHsxNiwgMHhjZjcwLCAwLCB7MHgyYSwweDQwLDB4ODgsMHgxMCwweDAyLDB4MDQsMHgwNCwweGI1LDB4YzAsMHgwZiwweDQwLDB4MGIsMHgwMiwweDAyLDB4NDEsMHhhMCB9fSwKKyB7MTYsIDB4Y2Y4MCwgMCwgezB4YjEsMHg0MCwweDJjLDB4NDAsMHgwOCwweDEyLDB4MDIsMHgwMiwweDExLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNmOTAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAwLDB4ODksMHgwNiwweDJlLDB4NDAsMHgwYiwweDkwLDB4MTIsMHhlNCwweDAwLDB4YjksMHg0MCwweDJlIH19LAorIHsxNiwgMHhjZmEwLCAwLCB7MHg0MCwweDBiLDB4YjAsMHg4MiwweGM0LDB4MDIsMHg4OSwweDQ0LDB4MjIsMHg0MCwweDBhLDB4OTAsMHgwMiwweDI0LDB4MDAsMHhhOSB9fSwKKyB7MTYsIDB4Y2ZiMCwgMCwgezB4MDAsMHgyNywweDQ4LDB4MDksMHhiMCwweDEyLDB4ZWMsMHgxOCwweGI5LDB4MDEsMHgyZSwweDQwLDB4NDAsMHg5MCwweDAyLDB4ODYgfX0sCisgezE2LCAweGNmYzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTcsMHg4NCwweGU5LDB4MDEsMHgzZSwweDQwIH19LAorIHsxNiwgMHhjZmQwLCAwLCB7MHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NzIsMHgwZiwweDkwLDB4MDMsMHhlNywweDYwLDB4ODksMHgxMCB9fSwKKyB7MTYsIDB4Y2ZlMCwgMCwgezB4M2EsMHg0MCwweDBjLDB4OTAsMHgwMywweDI0LDB4MDAsMHhmOSwweDQ0LDB4M2MsMHg0MCwweDJkLDB4OTAsMHgwMywweGU3LDB4NjAgfX0sCisgezE2LCAweGNmZjAsIDAsIHsweGY5LDB4NzEsMHgzZSwweDQwLDB4MjgsMHg5MCwweDAzLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMDAwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHg0OCwweGE5LDB4MDAsMHgzZSwweGMwLDB4MGYsMHg5YSwweDQzLDB4ZWMsMHgwMCwweGY5LDB4MjAsMHg3ZSB9fSwKKyB7MTYsIDB4ZDAxMCwgMCwgezB4YzgsMHgwZiwweDlhLDB4MDcsMHg2NiwweDAwLDB4NzksMHg4MCwweDdlLDB4NDAsMHgwZiwweDFjLDB4MDMsMHhlNywweDAwLDB4ZTkgfX0sCisgezE2LCAweGQwMjAsIDAsIHsweGEwLDB4M2UsMHg0MCwweDQ2LDB4ODAsMHgwMywweGUwLDB4MjAsMHhmOSwweDAwLDB4M2MsMHg0MCwweDBmLDB4OTAsMHgwMywweGNhIH19LAorIHsxNiwgMHhkMDMwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweDgwLDB4MDAsMHhmOCwweDAwLDB4M2EsMHgwMCB9fSwKKyB7MTYsIDB4ZDA0MCwgMCwgezB4MGYsMHg4MCwweDAzLDB4YTAsMHgwOCwweGU4LDB4NDAsMHgzYSwweDEwLDB4MGMsMHg4MywweDAzLDB4YTEsMHhjMCwweGYwLDB4NDAgfX0sCisgezE2LCAweGQwNTAsIDAsIHsweDNlLDB4MDYsMHgwZiwweDg0LDB4MDMsMHhlMSwweDAwLDB4ZjgsMHgwMCwweDNiLDB4MDAsMHgwZiwweDgxLDB4MDMsMHgyMCwweDAwIH19LAorIHsxNiwgMHhkMDYwLCAwLCB7MHhmOCwweDEwLDB4YjIsMHgwMCwweDRjLDB4ODAsMHgwYiwweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDA3MCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDAsMHhiYSwweDAwLDB4MmUsMHhiMCwweDBiLDB4ZTgsMHgwMiwweGU5LDB4MDAsMHgzZSwweDkwLDB4MDIgfX0sCisgezE2LCAweGQwODAsIDAsIHsweDgxLDB4MDgsMHhlNCwweDEyLDB4NzgsMHgwMCwweGJhLDB4MDAsMHgyZCwweGIwLDB4ODksMHhlOCwweDIyLDB4ZjgsMHgwYywweGJhIH19LAorIHsxNiwgMHhkMDkwLCAwLCB7MHgwMCwweDZlLDB4ODAsMHgwMywweGM1LDB4MDMsMHgzMCwweDAwLDB4YmEsMHgwMCwweDIyLDB4YTgsMHgwOCwweGEwLDB4MjIsMHg4YSB9fSwKKyB7MTYsIDB4ZDBhMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4YjMsMHgwMCwweDI4LDB4ZTggfX0sCisgezE2LCAweGQwYjAsIDAsIHsweDFiLDB4MzEsMHgxMiwweDhjLDB4YzQsMHhhMywweDkyLDB4MmMsMHg0MCwweDg4LDB4MzQsMHgwNiwweDhlLDB4MDAsMHg5MywweDAwIH19LAorIHsxNiwgMHhkMGMwLCAwLCB7MHgyYywweGYwLDB4MTksMHgzMSwweGEyLDB4Y2MsMHgwNCwweGIzLDB4MDAsMHgyOCwweDgwLDB4MDEsMHgzOCwweDAyLDB4NGMsMHgwMCB9fSwKKyB7MTYsIDB4ZDBkMCwgMCwgezB4YjMsMHg4MCwweDIwLDB4ZTAsMHgwYSwweGIwLDB4MTIsMHgwMiwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQwZTAsIDAsIHsweGEwLDB4MDEsMHgxYywweDAwLDB4YjcsMHgxNCwweDJkLDB4NDIsMHgwYiwweDYwLDB4MDIsMHhkYywweDAwLDB4YjcsMHg4MSwweDI3IH19LAorIHsxNiwgMHhkMGYwLCAwLCB7MHhlMCwweDE4LDB4NjAsMHgwMiwweDU4LDB4MTgsMHhiNywweDIyLDB4MmQsMHg4MCwweDA5LDB4NzAsMHgyMiwweGRjLDB4MDAsMHhiNyB9fSwKKyB7MTYsIDB4ZDEwMCwgMCwgezB4MDAsMHgyZCwweDgwLDB4MGIsMHgzYiwweDAyLDB4MWQsMHhkMCwweGJmLDB4ODAsMHgyOCwweGMwLDB4OGEsMHhmMiwweDAyLDB4YTAgfX0sCisgezE2LCAweGQxMTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWYsMHg4MCwweGY3LDB4YTAsMHgzOSwweGUyIH19LAorIHsxNiwgMHhkMTIwLCAwLCB7MHgwZiwweDY4LDB4MDMsMHg5ZSwweDAwLDB4ZWQsMHg4NCwweDNkLDB4ZTIsMHg0NCwweDc4LDB4MDMsMHg5ZSwweDAwLDB4ZjcsMHhiNCB9fSwKKyB7MTYsIDB4ZDEzMCwgMCwgezB4MmQsMHhlMCwweDBkLDB4NjgsMHgwMywweGQ2LDB4MDAsMHhmNiwweDgwLDB4MzksMHhlMCwweDBmLDB4NzksMHgwMywweDVlLDB4OTAgfX0sCisgezE2LCAweGQxNDAsIDAsIHsweGY3LDB4ODEsMHgzMSwweDYwLDB4MmUsMHg3YywweDAzLDB4MmEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMTUwLCAwLCB7MHgwOCwweDFkLDB4YWQsMHgwMCwweGZiLDB4NDIsMHgzZSwweGM4LDB4MGYsMHhhMCwweDAzLDB4ZWQsMHhhMCwweGJiLDB4MDAsMHgzOCB9fSwKKyB7MTYsIDB4ZDE2MCwgMCwgezB4YzgsMHgwZiwweGIwLDB4MDMsMHg2OCwweDAwLDB4ZmIsMHgxMSwweDNlLDB4NDAsMHgwOSwweGIwLDB4NDEsMHhlYywweDAwLDB4ZmEgfX0sCisgezE2LCAweGQxNzAsIDAsIHsweDAyLDB4M2UsMHhjMCwweDBmLDB4YjIsMHgwYiwweGVkLDB4ODAsMHgzYiwweDAwLDB4MzYsMHg0MCwweDBkLDB4YjAsMHgyMywweDQyIH19LAorIHsxNiwgMHhkMTgwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGZmLDB4MDAsMHhjZiwweGQwLDB4MzMsMHhlNCB9fSwKKyB7MTYsIDB4ZDE5MCwgMCwgezB4NGYsMHhmOSwweDAzLDB4ZGUsMHg0MCwweGRjLDB4ODAsMHgzNiwweGU0LDB4MGMsMHhiOSwweDEzLDB4ZmUsMHgwMCwweGNmLDB4OTAgfX0sCisgezE2LCAweGQxYTAsIDAsIHsweDM3LDB4ZTUsMHgwZiwweGY4LDB4NDMsMHhmZSwweDAwLDB4Y2YsMHg5MiwweDNmLDB4YTQsMHgwZiwweDc4LDB4MDMsMHgxZiwweDAwIH19LAorIHsxNiwgMHhkMWIwLCAwLCB7MHhjNSwweDgwLDB4MzMsMHg2MCwweDBjLDB4ZjgsMHgyMCwweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDFjMCwgMCwgezB4YTgsMHgxMSwweGJjLDB4MDAsMHgwZiwweDEwLDB4MjEsMHg4MSwweDBiLDB4NjAsMHgwMywweDg0LDB4MDAsMHg4YiwweDA4LDB4MjEgfX0sCisgezE2LCAweGQxZDAsIDAsIHsweDYwLDB4MGEsMHg3YiwweDAzLDB4OTgsMHgwMCwweDhiLDB4MTAsMHgyOSwweDg0LDB4MGUsMHg2NCwweDIyLDB4ZGMsMHg0MCwweGQ3IH19LAorIHsxNiwgMHhkMWUwLCAwLCB7MHgwMiwweDJkLDB4ODQsMHgwYiwweDcwLDB4MDIsMHgxYywweDAwLDB4ODUsMHgxOCwweDIxLDB4NDAsMHgwYSwweGYwLDB4MjIsMHhhYSB9fSwKKyB7MTYsIDB4ZDFmMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4YTcsMHgxNCwweDY5LDB4YzAgfX0sCisgezE2LCAweGQyMDAsIDAsIHsweDFhLDB4NjAsMHgxMiwweGZjLDB4MDEsMHhhNCwweDEwLDB4MmQsMHhjMCwweDBhLDB4NTIsMHgwMiwweDQ1LDB4NDAsMHg4NywweDBjIH19LAorIHsxNiwgMHhkMjEwLCAwLCB7MHgyMSwweDgwLDB4MWIsMHg2MCwweDgyLDB4ZDQsMHgwMCwweDg2LDB4MDMsMHgyNSwweGUwLDB4MWIsMHg3MCwweDAyLDB4NWMsMHg0MCB9fSwKKyB7MTYsIDB4ZDIyMCwgMCwgezB4OWQsMHgwMCwweDI5LDB4NDAsMHgwOCwweDcwLDB4MDIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQyMzAsIDAsIHsweDIwLDB4MTQsMHhjZCwweDAwLDB4YTMsMHgwMCwweDI4LDB4YzAsMHgxYiwweDIwLDB4MjIsMHg4YywweDExLDB4YTMsMHgwMCwweDY4IH19LAorIHsxNiwgMHhkMjQwLCAwLCB7MHhmNiwweDBhLDB4M2MsMHgwNiwweDgyLDB4MDAsMHg4MywweDgwLDB4MjgsMHg4NCwweDBhLDB4OGMsMHg4MiwweGNjLDB4NDQsMHg5MiB9fSwKKyB7MTYsIDB4ZDI1MCwgMCwgezB4MDAsMHgyYywweGMwLDB4MGIsMHgzMCwweDAyLDB4NGUsMHgwMCwweDkxLDB4MDAsMHgyOCwweDQwLDB4MGEsMHgzMCwweDAyLDB4ODggfX0sCisgezE2LCAweGQyNjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmUsMHgyMiwweGVmLDB4MDQsMHhiYSwweGMwIH19LAorIHsxNiwgMHhkMjcwLCAwLCB7MHgwZiwweDE0LDB4OTMsMHhlYywweDAyLDB4ZjEsMHhjMywweDNlLDB4ZjAsMHgwZSwweDkwLDB4ODMsMHg2NiwweDAwLDB4Y2YsMHhkMiB9fSwKKyB7MTYsIDB4ZDI4MCwgMCwgezB4MzIsMHg1MCwweDBmLDB4OWMsMHgwMywweGNiLDB4MDAsMHhjOSwweDgwLDB4M2UsMHgyOCwweDBmLDB4YjAsMHgwMywweDRmLDB4MDAgfX0sCisgezE2LCAweGQyOTAsIDAsIHsweGQxLDB4YzAsMHhhYSwweGMwLDB4MGMsMHg3MSwweDAzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMmEwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgyMCwweGRiLDB4MDAsMHgyNiwweDgwLDB4MGYsMHhhMCwweDAzLDB4ZWMsMHgwOCwweDFiLDB4MDAsMHgzNiB9fSwKKyB7MTYsIDB4ZDJiMCwgMCwgezB4YzAsMHgwZiwweDg2LDB4MDEsMHhlNSwweDQwLDB4ZmIsMHgwMiwweDNhLDB4NDgsMHgwZSwweDk0LDB4MDMsMHhlYywweDgwLDB4ZjEgfX0sCisgezE2LCAweGQyYzAsIDAsIHsweDg0LDB4M2UsMHgwMCwweDRmLDB4YjAsMHgwMywweGFkLDB4YzAsMHhlYiwweDIwLDB4MzYsMHhjMCwweDBmLDB4YjAsMHgyMywweGUwIH19LAorIHsxNiwgMHhkMmQwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGRjLDB4MDAsMHhjZiwweDAwLDB4M2YsMHg2MCB9fSwKKyB7MTYsIDB4ZDJlMCwgMCwgezB4MGMsMHhlMCwweDgzLDB4M2UsMHg4MCwweGVkLDB4MDgsMHgzMywweGQwLDB4OGYsMHg1MCwweDAzLDB4OWUsMHgwMCwweGRmLDB4MDAgfX0sCisgezE2LCAweGQyZjAsIDAsIHsweDMzLDB4NDAsMHgwYywweGMwLDB4MDMsMHgzMCwweDAwLDB4Y2MsMHgxMCwweDMzLDB4NjgsMHgwYywweGYwLDB4MDMsMHgzYywweDg0IH19LAorIHsxNiwgMHhkMzAwLCAwLCB7MHg4ZCwweDkwLDB4MzAsMHg0MCwweDBjLDB4ZjAsMHgwMywweDA4LDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDMxMCwgMCwgezB4ODEsMHgwNCwweDZjLDB4MDAsMHg4YiwweDAyLDB4MmMsMHhmNCwweDA4LDB4YTgsMHg2MiwweDBjLDB4ODAsMHg4YiwweDgwLDB4MmEgfX0sCisgezE2LCAweGQzMjAsIDAsIHsweDYwLDB4MGYsMHg5YywweDAyLDB4MmUsMHgwMCwweDhiLDB4MDAsMHgyMCwweDYwLDB4MGQsMHg5OCwweDAyLDB4MmMsMHg4MCwweGQ4IH19LAorIHsxNiwgMHhkMzMwLCAwLCB7MHgwMCwweDE0LDB4NDAsMHgwOCwweDM0LDB4MTIsMHgyZSwweDAwLDB4OGIsMHg4MiwweDMyLDB4NDAsMHgwZCwweGIwLDB4MDMsMHg2MCB9fSwKKyB7MTYsIDB4ZDM0MCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OGIsMHgwMCwweDJlLDB4ZDAgfX0sCisgezE2LCAweGQzNTAsIDAsIHsweDA4LDB4YjgsMHgwMiwweDJjLDB4MDAsMHg4YSwweDg0LDB4MjIsMHhjMCwweDBiLDB4ODgsMHgwMiwweGU0LDB4YTAsMHg4MywweDAwIH19LAorIHsxNiwgMHhkMzYwLCAwLCB7MHgyMiwweDYyLDB4MGEsMHg5OCwweDAyLDB4MjgsMHgwMCwweDg5LDB4MDAsMHgyMiwweDAwLDB4MGEsMHhiMSwweDA2LDB4MmMsMHgwMCB9fSwKKyB7MTYsIDB4ZDM3MCwgMCwgezB4YWIsMHgwMCwweDIyLDB4NDAsMHgwOCwweGIwLDB4MDIsMHg2MCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQzODAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAyLDB4YTMsMHgwMCwweDJjLDB4YzEsMHgwOCwweDIwLDB4MDIsMHgwYywweDAyLDB4OGIsMHgwMCwweDI4IH19LAorIHsxNiwgMHhkMzkwLCAwLCB7MHhjMiwweDBhLDB4MDAsMHgwMiwweDQ0LDB4MTAsMHg4MywweDEwLDB4MjIsMHg0MCwweDBiLDB4MTAsMHgwNiwweDBjLDB4MDAsMHg5MSB9fSwKKyB7MTYsIDB4ZDNhMCwgMCwgezB4MDQsMHhhYSwweDAwLDB4MjgsMHgzMCwweDAyLDB4MmMsMHgwMCwweGExLDB4MDEsMHgyMCwweDQwLDB4MDksMHhiMCwweDAyLDB4NDIgfX0sCisgezE2LCAweGQzYjAsIDAsIHsweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4N2MsMHgwMCwweDhmLDB4MDAsMHgzZSwweGMwIH19LAorIHsxNiwgMHhkM2MwLCAwLCB7MHgyYywweGEwLDB4MDMsMHgyOSwweDQwLDB4YTgsMHg0MCwweDMyLDB4Y2MsMHg4YiwweDgwLDB4MDIsMHhlMCwweDAwLDB4Y2YsMHg0MCB9fSwKKyB7MTYsIDB4ZDNkMCwgMCwgezB4MzIsMHgwMCwweDBlLDB4ODAsMHgwYSwweDIwLDB4MDAsMHg4OCwweDAwLDB4MjIsMHg0MCwweDBjLDB4YjAsMHgwMywweDJjLDB4MDQgfX0sCisgezE2LCAweGQzZTAsIDAsIHsweGViLDB4MDAsMHhiMiwweDQwLDB4OGMsMHhiMCwweDAzLDB4NDAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkM2YwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgwMCwweGRmLDB4MDAsMHgzZiwweDQwLDB4MGYsMHhlMCwweDAzLDB4ZmMsMHg4MCwweGZmLDB4MjgsMHgzZCB9fSwKKyB7MTYsIDB4ZDQwMCwgMCwgezB4YzAsMHgwYiwweGMxLDB4MDMsMHhiMCwweDE0LDB4ZmYsMHgwMCwweDNmLDB4MDAsMHgwZCwweGQwLDB4MDMsMHhkYywweDAwLDB4ZmMgfX0sCisgezE2LCAweGQ0MTAsIDAsIHsweDAwLDB4MzcsMHg0MCwweDBmLDB4ZjAsMHgyMSwweGZjLDB4MDAsMHgxZCwweDAwLDB4N2IsMHg0MCwweDhmLDB4ZjAsMHgwMywweGUwIH19LAorIHsxNiwgMHhkNDIwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGQyLDB4MDAsMHhkZiwweDAwLDB4MzEsMHhhMCB9fSwKKyB7MTYsIDB4ZDQzMCwgMCwgezB4NGQsMHhmMCwweDQzLDB4MzIsMHgwMCwweGNlLDB4MTQsMHgxYiwweDY4LDB4MGUsMHhkYSwweDIzLDB4YjIsMHhjMCwweDJmLDB4MDAgfX0sCisgezE2LCAweGQ0NDAsIDAsIHsweDNmLDB4YzIsMHgyYywweGU4LDB4MDMsMHgzYywweDQwLDB4ZmQsMHgwOCwweDNiLDB4YzgsMHg0YywweGYwLDB4ODMsMHgzYywweGEwIH19LAorIHsxNiwgMHhkNDUwLCAwLCB7MHhjZiwweDAwLDB4MzMsMHhjNCwweDBjLDB4ZjMsMHgwNywweGYwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDQ2MCwgMCwgezB4ODAsMHgxMCwweGUyLDB4MDAsMHg4ZiwweGMwLDB4MjIsMHhhMCwweDA4LDB4ZmQsMHg0MiwweDJmLDB4MDAsMHg4YiwweDcwLDB4MjIgfX0sCisgezE2LCAweGQ0NzAsIDAsIHsweDFlLDB4NDgsMHg4OSwweDAyLDB4MjcsMHhjMCwweDhmLDB4NWEsMHgyZSwweDUwLDB4NDgsMHgzMCwweDAyLDB4YmQsMHhjMCwweGJkIH19LAorIHsxNiwgMHhkNDgwLCAwLCB7MHg0MCwweDIzLDB4YzUsMHg0OCwweGY0LDB4ODIsMHgzZCwweDJjLDB4ODcsMHg3MCwweDIyLDB4YzAsMHgwOCwweGYxLDB4MDMsMHhlMCB9fSwKKyB7MTYsIDB4ZDQ5MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhlMCwweDAwLDB4OTMsMHgxMCwweDI2LDB4ODEgfX0sCisgezE2LCAweGQ0YTAsIDAsIHsweDQ5LDB4MzAsMHgwMiwweDgwLDB4NDAsMHg4MywweDIwLDB4MjgsMHg0MCwweDBhLDB4MTAsMHgwMiwweDgwLDB4MDAsMHhhMywweDI0IH19LAorIHsxNiwgMHhkNGIwLCAwLCB7MHgyYywweGNhLDB4MDgsMHgzMiwweDgyLDB4MGMsMHgwMCwweDkxLDB4MjgsMHgyMCwweGNhLDB4MWIsMHgzMiwweDAyLDB4MGMsMHg4OCB9fSwKKyB7MTYsIDB4ZDRjMCwgMCwgezB4ODMsMHgwOSwweDIwLDB4YzgsMHgwOSwweDMyLDB4MDIsMHhlMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ0ZDAsIDAsIHsweGMwLDB4MTUsMHhhMywweDE0LDB4OGIsMHgwNCwweDI2LDB4ODksMHgwOCwweGIwLDB4MDIsMHhhYywweDIyLDB4OGIsMHg4OCwweDJhIH19LAorIHsxNiwgMHhkNGUwLCAwLCB7MHgyMCwweDA4LDB4OTgsMHg4MiwweGE2LDB4MTAsMHhhYiwweDAwLDB4MmUsMHhjYSwweDA4LDB4YjAsMHg4MiwweGFjLDB4MDAsMHhiOSB9fSwKKyB7MTYsIDB4ZDRmMCwgMCwgezB4MDAsMHgyMiwweGMwLDB4MjksMHhiMCwweDBhLDB4MmMsMHgwMSwweDhiLDB4MDAsMHgyMiwweGMwLDB4MDksMHhiMCwweDIyLDB4ZjAgfX0sCisgezE2LCAweGQ1MDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZTMsMHgwMCwweGRiLDB4MDAsMHgzNCwweGUyIH19LAorIHsxNiwgMHhkNTEwLCAwLCB7MHgwZCwweGIwLDB4MDMsMHhhMywweDAwLDB4Y2EsMHg4MCwweGJhLDB4NzAsMHgwZSwweDg4LDB4MDMsMHhhNiwweDAwLDB4ZWIsMHgwMCB9fSwKKyB7MTYsIDB4ZDUyMCwgMCwgezB4M2UsMHg5MCwweDBjLDB4YjUsMHgwMywweDJjLDB4MDAsMHhmYiwweDEwLDB4YmEsMHhjMCwweDBlLDB4YjAsMHgwMywweDJjLDB4MDIgfX0sCisgezE2LCAweGQ1MzAsIDAsIHsweGNiLDB4MDIsMHgzMiwweGMwLDB4MDksMHhiMCwweDAyLDB4ZDAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNTQwLCAwLCB7MHhlMCwweDAxLDB4YjAsMHgwOCwweGZmLDB4MDAsMHhiYiwweGUwLDB4MGYsMHg3MCwweDAzLDB4NjUsMHgwMCwweGY0LDB4MDAsMHgzNSB9fSwKKyB7MTYsIDB4ZDU1MCwgMCwgezB4NDAsMHgwZiwweDQwLDB4MDMsMHg1NCwweDAwLDB4ZGYsMHgwMCwweDNlLDB4NDAsMHgwZiwweGY4LDB4MDMsMHhlYywweDAwLDB4ZjcgfX0sCisgezE2LCAweGQ1NjAsIDAsIHsweDAxLDB4M2QsMHhjMSwweDBlLDB4MzAsMHgwMywweGVjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDhlLDB4ZjAsMHgwMywweGI4IH19LAorIHsxNiwgMHhkNTcwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGEwLDB4NDAsMHhlYiwweDA4LDB4M2UsMHg4MCB9fSwKKyB7MTYsIDB4ZDU4MCwgMCwgezB4MGQsMHhiMCwweDAzLDB4ZTAsMHgwMCwweGM4LDB4MDAsMHgzYSwweDUxLDB4MGYsMHg4MiwweDAzLDB4NjQsMHgyMCwweGRiLDB4MDAgfX0sCisgezE2LCAweGQ1OTAsIDAsIHsweDNkLDB4ODIsMHgwYywweGJjLDB4MDMsMHgyYywweDEwLDB4ZGIsMHgwMCwweDcyLDB4YzAsMHgwZCwweGIxLDB4MDMsMHgwYywweDIwIH19LAorIHsxNiwgMHhkNWEwLCAwLCB7MHhkMywweDAwLDB4MzIsMHhjMCwweDBmLDB4YjAsMHgwYiwweDUwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDViMCwgMCwgezB4YzgsMHgwNSwweDAxLDB4MDAsMHg4NywweGMwLDB4MmUsMHhhOCwweDA4LDB4ZjEsMHgxMiwweGM1LDB4NDAsMHg4OCwweDAwLDB4MjIgfX0sCisgezE2LCAweGQ1YzAsIDAsIHsweDQwLDB4MGIsMHg4NCwweDAyLDB4MjcsMHgwMCwweGFmLDB4MDAsMHgyZSwweGMwLDB4MDgsMHhiYywweDEyLDB4M2MsMHgwMCwweDhiIH19LAorIHsxNiwgMHhkNWQwLCAwLCB7MHgwMSwweDIzLDB4YzAsMHgyOCwweGY1LDB4NGEsMHgzZCwweDI4LDB4ZGYsMHgwMCwweDMzLDB4YzAsMHg0YiwweGYwLDB4MDMsMHgzMiB9fSwKKyB7MTYsIDB4ZDVlMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0OCwweDgwLDB4YTMsMHg5MCwweDJjLDB4MDAgfX0sCisgezE2LCAweGQ1ZjAsIDAsIHsweDA4LDB4MzAsMHgwMiwweGMxLDB4MDAsMHg5MiwweDA0LDB4MjgsMHgwMCwweDBiLDB4MTQsMHgxMiwweDQzLDB4MDAsMHhiMywweDA0IH19LAorIHsxNiwgMHhkNjAwLCAwLCB7MHgyYywweDMwLDB4MGEsMHhiMCwweDBhLDB4OGMsMHgwMCwweDkzLDB4MDAsMHg2MCwweGMwLDB4MDgsMHgzYywweDA2LDB4MGUsMHgwMSB9fSwKKyB7MTYsIDB4ZDYxMCwgMCwgezB4YjMsMHgwMCwweDJlLDB4YzAsMHg4YiwweDMwLDB4MDYsMHgzOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ2MjAsIDAsIHsweDIwLDB4MDEsMHgxMiwweDAwLDB4ODcsMHg4MCwweDJkLDB4MjQsMHgwOCwweDc4LDB4MDIsMHhkMiwweDAwLDB4OTUsMHg4MCwweDIxIH19LAorIHsxNiwgMHhkNjMwLCAwLCB7MHhhMCwweDBiLDB4NjgsMHgwMiwweDVhLDB4MjAsMHg4NywweDgwLDB4MmQsMHg2NiwweDFhLDB4N2MsMHgwMiwweDllLDB4MDAsMHg4NyB9fSwKKyB7MTYsIDB4ZDY0MCwgMCwgezB4ODAsMHgyMSwweGUxLDB4MTgsMHg3OSwweDAyLDB4OWUsMHg0MCwweGI3LDB4ODAsMHhhMSwweGUwLDB4MGIsMHg3OCwweDAyLDB4NDggfX0sCisgezE2LCAweGQ2NTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MDAsMHgwMCwweGUzLDB4YTAsMHgzYywweDQwIH19LAorIHsxNiwgMHhkNjYwLCAwLCB7MHgwYywweDMwLDB4MDMsMHhjNCwweDIyLDB4ZDksMHgwMCwweDM4LDB4ZDQsMHgwZiwweDMwLDB4ODMsMHg2OCwweDQwLDB4ZjMsMHgwMCB9fSwKKyB7MTYsIDB4ZDY3MCwgMCwgezB4M2MsMHg4MCwweDBhLDB4MzIsMHgwMiwweDhjLDB4MDAsMHhkYiwweDAwLDB4YTIsMHhjNCwweDBjLDB4MzAsMHgwMywweDBjLDB4MDAgfX0sCisgezE2LCAweGQ2ODAsIDAsIHsweGYzLDB4MDAsMHgzYywweGMwLDB4MGYsMHhiMSwweDAzLDB4MTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNjkwLCAwLCB7MHg0MCwweDBkLDB4YjAsMHgwMCwweGZmLDB4MTAsMHgzZiwweDQwLDB4MGUsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGVkLDB4MDAsMHgzZiB9fSwKKyB7MTYsIDB4ZDZhMCwgMCwgezB4YzAsMHgwZiwweDMwLDB4MTMsMHhiYywweDQwLDB4N2YsMHgxMCwweDNmLDB4YzEsMHgyZCwweGYwLDB4MDMsMHg3YywweDAwLDB4ZmIgfX0sCisgezE2LCAweGQ2YjAsIDAsIHsweDQwLDB4M2YsMHhjMiwweDBlLDB4ZjQsMHg4MywweDdjLDB4MDAsMHhkZiwweDAwLDB4M2YsMHhjMiwweDBmLDB4ZjAsMHgwMywweDkwIH19LAorIHsxNiwgMHhkNmMwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVjLDB4MDAsMHhkYiwweGEwLDB4MzIsMHhjMCB9fSwKKyB7MTYsIDB4ZDZkMCwgMCwgezB4MGQsMHhiNywweDAzLDB4ZTAsMHgwMCwweGNhLDB4MDQsMHgzZSwweDgwLDB4MGYsMHhiOCwweDAzLDB4MmMsMHgxMCwweGZiLDB4MDAgfX0sCisgezE2LCAweGQ2ZTAsIDAsIHsweDMzLDB4MDAsMHg4ZCwweGIwLDB4MDMsMHgyYywweDgwLDB4ZTksMHg0MCwweDNlLDB4ZDIsMHgwZiwweGI0LDB4MDMsMHgyZCwweDgwIH19LAorIHsxNiwgMHhkNmYwLCAwLCB7MHhlYiwweDIwLDB4YjIsMHhjMCwweDBmLDB4YjIsMHgwMywweGVhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDcwMCwgMCwgezB4NDgsMHgxMSwweDkwLDB4MDAsMHhiNywweDEwLDB4MTEsMHhjMCwweDA4LDB4NzAsMHg4MiwweGQ4LDB4MGEsMHg4NywweDAxLDB4MmQgfX0sCisgezE2LCAweGQ3MTAsIDAsIHsweDgwLDB4ODksMHg3MCwweDAzLDB4ZDgsMHgwOCwweGI3LDB4MGEsMHgyMSwweDQwLDB4MmMsMHg3MCwweDAyLDB4MGQsMHhjMCwweDg1IH19LAorIHsxNiwgMHhkNzIwLCAwLCB7MHgwMSwweDc5LDB4YzgsMHgwYiwweDMyLDB4MDIsMHgwZCwweDIwLDB4OGYsMHgyOCwweDIxLDB4YzAsMHgwYiwweDcyLDB4ODIsMHhkMiB9fSwKKyB7MTYsIDB4ZDczMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4NDAsMHg5NiwweDEwLDB4OTcsMHg5MCwweDIzLDB4ZTAgfX0sCisgezE2LCAweGQ3NDAsIDAsIHsweDA5LDB4N2EsMHgwMiwweGQ2LDB4MDAsMHg5NywweDgwLDB4MmQsMHhmMCwweDBiLDB4NzgsMHg4MiwweDFlLDB4MDAsMHhiMywweGIwIH19LAorIHsxNiwgMHhkNzUwLCAwLCB7MHgyMSwweGEwLDB4MDgsMHg3OCwweDAyLDB4MWUsMHgwMCwweGE1LDB4ODAsMHgyZCwweGUwLDB4MGIsMHg3YSwweDAyLDB4MWUsMHg4MCB9fSwKKyB7MTYsIDB4ZDc2MCwgMCwgezB4YTcsMHhiMCwweDIxLDB4ZTgsMHgwYiwweDc5LDB4MDIsMHhmMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ3NzAsIDAsIHsweDQ4LDB4MTQsMHhjMCwweDAwLDB4YjMsMHgwMCwweDIwLDB4ZTIsMHgwOCwweDMwLDB4MDIsMHhjNiwweDQwLDB4OTMsMHg3MCwweDJjIH19LAorIHsxNiwgMHhkNzgwLCAwLCB7MHhjMCwweDA5LDB4M2MsMHgwMiwweDhlLDB4MDAsMHhiMywweDAwLDB4MjAsMHhkOCwweDA4LDB4MTgsMHgwMiwweDBjLDB4MDAsMHg4MSB9fSwKKyB7MTYsIDB4ZDc5MCwgMCwgezB4OTAsMHgyZSwweGMwLDB4MGIsMHgzMCwweDJhLDB4MmMsMHgxMCwweDgzLDB4MDAsMHhhMCwweGMwLDB4MGIsMHgzMCwweDAyLDB4ZDIgfX0sCisgezE2LCAweGQ3YTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDExLDB4YjksMHgwMCwweGRhLDB4MDIsMHgzMywweGI4IH19LAorIHsxNiwgMHhkN2IwLCAwLCB7MHgwZCwweGEwLDB4MDMsMHhmOCwweDAwLDB4ZGUsMHhjMCwweDNmLDB4YjAsMHg0ZiwweGVjLDB4MDYsMHgzOCwweDQwLDB4ZmEsMHgwMCB9fSwKKyB7MTYsIDB4ZDdjMCwgMCwgezB4YjMsMHg5MCwweDBjLDB4NmMsMHgwYiwweDI4LDB4MDgsMHhlYSwweDAxLDB4N2UsMHg4MCwweDBmLDB4YTAsMHgwMywweDI4LDB4MDAgfX0sCisgezE2LCAweGQ3ZDAsIDAsIHsweGVhLDB4MDAsMHgzMiwweDgwLDB4MGYsMHhhMCwweDAzLDB4ZmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkN2UwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4NDAsMHgzYSwweDAwLDB4MGYsMHg4NCwweDAzLDB4ZTEsMHgwMCwweGU4LDB4MDIsMHgzZSB9fSwKKyB7MTYsIDB4ZDdmMCwgMCwgezB4MDAsMHgwZiwweDg0LDB4MDMsMHhlMSwweDQwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgxLDB4MDMsMHhlMCwweDAwLDB4ZjggfX0sCisgezE2LCAweGQ4MDAsIDAsIHsweDAwLDB4M2EsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyIH19LAorIHsxNiwgMHhkODEwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MjAsMHhmOSwweGMwLDB4M2UsMHg3MCB9fSwKKyB7MTYsIDB4ZDgyMCwgMCwgezB4MGUsMHg5MCwweDAyLDB4ZTQsMHg4MCwweGM5LDB4MDAsMHgzMiwweDQyLDB4MGMsMHg5OCwweDgzLDB4YTQsMHg4NCwweGY5LDB4MDAgfX0sCisgezE2LCAweGQ4MzAsIDAsIHsweGIyLDB4NjAsMHgwYywweDkwLDB4ODMsMHgyNCwweDAwLDB4YzksMHgwMCwweDNlLDB4NDAsMHgwYywweDFhLDB4MDIsMHgyNCwweDAwIH19LAorIHsxNiwgMHhkODQwLCAwLCB7MHhjMSwweDAwLDB4YjIsMHg0MCwweDBmLDB4OTAsMHgwMSwweGMyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDg1MCwgMCwgezB4ODAsMHgwNCwweDY1LDB4MDAsMHhiOSwweDgxLDB4MmMsMHg2MCwweDBkLDB4OTQsMHhjMiwweGM3LDB4MDgsMHg4OSwweDAwLDB4MjIgfX0sCisgezE2LCAweGQ4NjAsIDAsIHsweDQwLDB4MDgsMHg5NSwweGM3LDB4YTQsMHgwMCwweGI5LDB4MDAsMHgyOCwweDcwLDB4YTgsMHg5NCwweDBhLDB4MjQsMHgwMCwweDg5IH19LAorIHsxNiwgMHhkODcwLCAwLCB7MHgwNCwweDJlLDB4NDAsMHgyOCwweDkwLDB4MmEsMHgyNiwweDAwLDB4ODksMHgwMCwweDIyLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhlMCB9fSwKKyB7MTYsIDB4ZDg4MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjksMHg0MCwweDJlLDB4NDAgfX0sCisgezE2LCAweGQ4OTAsIDAsIHsweDBhLDB4OTAsMHgwMiwweGU1LDB4MDAsMHg4MSwweDAwLDB4YTAsMHg0MCwweDA5LDB4OTAsMHg0MiwweGVjLDB4MDAsMHhiMSwweDAwIH19LAorIHsxNiwgMHhkOGEwLCAwLCB7MHgyMiwweDU4LDB4MDgsMHg5MCwweGEyLDB4MDQsMHgwMiwweDg5LDB4MDAsMHgyZSwweDQwLDB4MDgsMHg5MCwweDAyLDB4YTQsMHhhMCB9fSwKKyB7MTYsIDB4ZDhiMCwgMCwgezB4ODksMHgwMCwweDIyLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhjNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ4YzAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDAwLDB4YjEsMHgyMCwweDJlLDB4YzAsMHg4OSwweDEyLDB4MDIsMHhjNCwweDgwLDB4ODEsMHgyMCwweDIwIH19LAorIHsxNiwgMHhkOGQwLCAwLCB7MHg0MCwweDYxLDB4MTAsMHg0MiwweGM1LDB4MDAsMHhiMSwweDIwLDB4MjgsMHg0OCwweDE4LDB4OTAsMHg0MiwweDA0LDB4ODAsMHg4MSB9fSwKKyB7MTYsIDB4ZDhlMCwgMCwgezB4MjgsMHgyYywweDQ4LDB4MDgsMHgxMiwweDgyLDB4ODQsMHhhMCwweDgxLDB4MjAsMHgyMCwweDQ4LDB4MGIsMHgxMiwweDgyLDB4YzIgfX0sCisgezE2LCAweGQ4ZjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjgsMHgwMCwweGY4LDB4MDAsMHgyZSwweDAwIH19LAorIHsxNiwgMHhkOTAwLCAwLCB7MHgwZSwweDgwLDB4MDMsMHhlMCwweDA4LDB4YzgsMHg1MCwweDMyLDB4MTQsMHgwZCwweDgwLDB4MTcsMHhlOCwweDA0LDB4ZjgsMHg1MCB9fSwKKyB7MTYsIDB4ZDkxMCwgMCwgezB4MzIsMHgxNCwweDRjLDB4MDUsMHgwYiwweDIxLDB4NDAsMHhjOCwweDIwLDB4M2UsMHgwMCwweDBjLDB4ODcsMHgwMywweGExLDB4YzIgfX0sCisgezE2LCAweGQ5MjAsIDAsIHsweGM4LDB4MDAsMHgzMiwweDE0LDB4OGYsMHg4MiwweDAzLDB4ZWUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkOTMwLCAwLCB7MHg5OCwweDFkLDB4ZjQsMHgwMCwweGYxLDB4MTAsMHgzZCwweDQwLDB4MGYsMHg5MSwweDAyLDB4ZDQsMHg0MiwweGZkLDB4MTAsMHgzZiB9fSwKKyB7MTYsIDB4ZDk0MCwgMCwgezB4NTEsMHgwZSwweDU0LDB4MTMsMHhiNSwweDAwLDB4ZjksMHgxMCwweDM1LDB4NDQsMHgyZiwweGQwLDB4MDMsMHhlNCwweDUwLDB4ZmQgfX0sCisgezE2LCAweGQ5NTAsIDAsIHsweDI4LDB4M2UsMHg0ZSwweDBmLDB4OTAsMHgwMywweDY0LDB4MDAsMHhmOSwweDM4LDB4M2UsMHg0NCwweDBmLDB4OTIsMHg4MywweGU2IH19LAorIHsxNiwgMHhkOTYwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgxNSwweGY0LDB4MDAsMHhmZCwweDAwLDB4M2QsMHg0MCB9fSwKKyB7MTYsIDB4ZDk3MCwgMCwgezB4MmMsMHhkMCwweDAzLDB4YjYsMHgwMCwweGY5LDB4ODIsMHgzZSwweDQwLDB4MGMsMHhkMCwweDAzLDB4ZjQsMHgwMCwweGY5LDB4ODAgfX0sCisgezE2LCAweGQ5ODAsIDAsIHsweDMzLDB4NzAsMHgwYywweDUwLDB4MDMsMHgzNCwweDAwLDB4YzksMHhjMCwweDNlLDB4NDAsMHgwYywweGRhLDB4MDMsMHgxNiwweDgwIH19LAorIHsxNiwgMHhkOTkwLCAwLCB7MHhjOSwweDQwLDB4M2UsMHg2MiwweDJjLDB4OTgsMHg4MywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDlhMCwgMCwgezB4MzgsMHgxMCwweGUwLDB4MDAsMHhiOCwweDAwLDB4MmUsMHgwMCwweDA4LDB4ODAsMHgwMiwweDI4LDB4MDAsMHhiOCwweDUwLDB4MjYgfX0sCisgezE2LCAweGQ5YjAsIDAsIHsweDAwLDB4MDgsMHhhMCwweDAyLDB4ZTgsMHgwMCwweGI4LDB4MDAsMHgyYSwweDM0LDB4MmEsMHhhYSwweDBhLDB4MjAsMHgwMCwweDg4IH19LAorIHsxNiwgMHhkOWMwLCAwLCB7MHhjMCwweDJlLDB4MmEsMHgwOCwweDgwLDB4MjIsMHgyMSwweDAwLDB4YTgsMHg4MCwweDJlLDB4MDAsMHgwOCwweDgwLDB4MDIsMHgwZSB9fSwKKyB7MTYsIDB4ZDlkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAwLDB4YjEsMHgwMCwweDJlLDB4NDAgfX0sCisgezE2LCAweGQ5ZTAsIDAsIHsweDQ4LDB4MTAsMHgwNiwweDhkLDB4MDAsMHhiMSwweDAwLDB4MmMsMHg0MCwweDI4LDB4MTAsMHgwMiwweGM0LDB4MDAsMHhiMSwweDQwIH19LAorIHsxNiwgMHhkOWYwLCAwLCB7MHgyYywweDQ4LDB4MDgsMHgxMCwweDgyLDB4NDQsMHgwMCwweDgxLDB4NjAsMHgyYywweDQwLDB4MjgsMHgxNCwweDBhLDB4MDQsMHg0MCB9fSwKKyB7MTYsIDB4ZGEwMCwgMCwgezB4ODEsMHgyMCwweDJjLDB4NDAsMHgwOCwweDEwLDB4MDIsMHgwMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRhMTAsIDAsIHsweDE4LDB4MDUsMHhhNCwweDQwLDB4YjksMHgwMCwweDJlLDB4NDAsMHgwOCwweGIwLDB4MDIsMHgyNCwweDAwLDB4YjksMHgyOCwweDJlIH19LAorIHsxNiwgMHhkYTIwLCAwLCB7MHg1MCwweDA4LDB4OTAsMHgyMiwweGU0LDB4MDAsMHhiOSwweDAwLDB4MmUsMHg2MCwweDBiLDB4MTIsMHg0MiwweDY0LDB4MDAsMHg4OSB9fSwKKyB7MTYsIDB4ZGEzMCwgMCwgezB4MDAsMHgyYywweDQwLDB4MDksMHg5MCwweDAyLDB4MjQsMHgwMCwweGE5LDB4MDAsMHgyYywweDQwLDB4MDgsMHgxMCwweDAyLDB4NDYgfX0sCisgezE2LCAweGRhNDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDA1LDB4ZTYsMHgwMCwweGY5LDB4MDAsMHgzYywweDQyIH19LAorIHsxNiwgMHhkYTUwLCAwLCB7MHgwYywweDkwLDB4MDMsMHhhNywweDQwLDB4ZjksMHg0MCwweDNlLDB4NzAsMHgwYywweDk4LDB4MDIsMHhlNSwweDQwLDB4ZjksMHgwMCB9fSwKKyB7MTYsIDB4ZGE2MCwgMCwgezB4M2UsMHg0MCwweDBjLDB4OTgsMHgwMywweDY0LDB4MDYsMHhjOSwweDAxLDB4MmUsMHg0MCwweDBjLDB4OTAsMHgwMywweDI0LDB4MDQgfX0sCisgezE2LCAweGRhNzAsIDAsIHsweGM5LDB4MDAsMHgzZSwweDQwLDB4MGMsMHg5MCwweDBiLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkYTgwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDgzLDB4ZTYsMHgxMCwweGY5LDB4MDAsMHgzNiB9fSwKKyB7MTYsIDB4ZGE5MCwgMCwgezB4NjgsMHgwZiwweDljLDB4MDMsMHhlNiwweDAwLDB4ZjksMHgwMCwweDNhLDB4NDAsMHgwZSwweDk4LDB4OTMsMHhhNCwweDAwLDB4ZjkgfX0sCisgezE2LCAweGRhYTAsIDAsIHsweDAwLDB4M2UsMHg0MCwweDBlLDB4OTAsMHg4MywweGM0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweDhhIH19LAorIHsxNiwgMHhkYWIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwMCwweGEwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwNCB9fSwKKyB7MTYsIDB4ZGFjMCwgMCwgezB4MGMsMHg4MCwweDAzLDB4MjEsMHgwMiwweGM4LDB4NDAsMHgzMiwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZTEsMHgwMCwweGYwLDB4MDAgfX0sCisgezE2LCAweGRhZDAsIDAsIHsweDNlLDB4MDIsMHgwYywweDgwLDB4MDMsMHgyMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwYywweDAwLDB4MDMsMHgyMCwweDAwIH19LAorIHsxNiwgMHhkYWUwLCAwLCB7MHhjOCwweDAwLDB4MzIsMHgwMCwweDBmLDB4ODAsMHgwMywweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGFmMCwgMCwgezB4MjgsMHgxNSwweDNhLDB4MDAsMHhiZSwweDAyLDB4MmYsMHhiMCwweDA4LDB4NjgsMHgxMiwweDM4LDB4MDAsMHg4YSwweDA0LDB4MmEgfX0sCisgezE2LCAweGRiMDAsIDAsIHsweDgwLDB4MGIsMHhlMCwweDQyLDB4ZmIsMHgyMCwweGJhLDB4MDAsMHgyZiwweDkxLDB4MDgsMHhlMCwweDAyLDB4MjgsMHgwMCwweGJhIH19LAorIHsxNiwgMHhkYjEwLCAwLCB7MHgwMCwweDI2LDB4ODAsMHgwOCwweGVlLDB4MGEsMHgzOCwweDAwLDB4OGEsMHgwMCwweDIyLDB4ODAsMHgwYiwweGEwLDB4MDIsMHg4YSB9fSwKKyB7MTYsIDB4ZGIyMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0MiwweDAwLDB4YjMsMHgwMCwweDJjLDB4YzIgfX0sCisgezE2LCAweGRiMzAsIDAsIHsweDI4LDB4MzgsMHgwYSwweDQ4LDB4MDAsMHg4MywweDA0LDB4MjIsMHhjMCwweDBiLDB4MTAsMHgwMiwweGNkLDB4ODAsMHhiMywweDAwIH19LAorIHsxNiwgMHhkYjQwLCAwLCB7MHgyZSwweGMwLDB4MDgsMHgxYywweDAyLDB4MjQsMHgwMCwweGIzLDB4MDAsMHgyYywweGMwLDB4MDgsMHgzNCwweDEyLDB4MGUsMHg0MCB9fSwKKyB7MTYsIDB4ZGI1MCwgMCwgezB4ODMsMHgwMCwweDIwLDB4YzAsMHgwYiwweDMwLDB4MTIsMHgwYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRiNjAsIDAsIHsweGEwLDB4MDEsMHgxMSwweDAwLDB4YjcsMHgwMCwweDJmLDB4YzAsMHgwOCwweDcwLDB4YTIsMHg0ZSwweDAwLDB4OGYsMHhiMCwweDIxIH19LAorIHsxNiwgMHhkYjcwLCAwLCB7MHhjYywweDBiLDB4NjAsMHgxMiwweGRjLDB4MTAsMHhiNywweDMwLDB4MmQsMHhjMCwweDA4LDB4ZDAsMHg4MiwweDE0LDB4ODAsMHhiNyB9fSwKKyB7MTYsIDB4ZGI4MCwgMCwgezB4MTIsMHgyNSwweGM4LDB4MjgsMHg2MCwweDAyLDB4MTQsMHgwMCwweDg3LDB4YjIsMHgyMSwweGNjLDB4MGIsMHgzMSwweDAyLDB4YTggfX0sCisgezE2LCAweGRiOTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MTIsMHgwMCwweGY3LDB4ODAsMHgzZCwweGUwIH19LAorIHsxNiwgMHhkYmEwLCAwLCB7MHgwYywweDM4LDB4MDMsMHg1NiwweDAwLDB4YzcsMHg5MCwweGIxLDB4ZTQsMHgwZiwweDc4LDB4MDMsMHhkZSwweDAwLDB4ZjcsMHg5MCB9fSwKKyB7MTYsIDB4ZGJiMCwgMCwgezB4MWYsMHg2MCwweDJjLDB4NDgsMHgwYiwweDE2LDB4YTAsMHhmNywweDgwLDB4M2MsMHhmNCwweDBjLDB4MzgsMHgwMywweDFlLDB4MDAgfX0sCisgezE2LCAweGRiYzAsIDAsIHsweGNmLDB4YTAsMHhiMSwweGU4LDB4MGYsMHg3YiwweDAzLDB4MmEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkYmQwLCAwLCB7MHgwOCwweDBkLDB4YTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweGMwLDB4MGIsMHhiMCwweDAzLDB4YWMsMHgwMCwweGYzLDB4MjEsMHgzZSB9fSwKKyB7MTYsIDB4ZGJlMCwgMCwgezB4YzgsMHgwNywweGIwLDB4MDIsMHhlNCwweDAwLDB4ZmIsMHgyMCwweDNmLDB4NDAsMHgwZiwweDgwLDB4MDMsMHhlNCwweDgwLDB4ZmIgfX0sCisgezE2LCAweGRiZjAsIDAsIHsweDAwLDB4MzYsMHhkMCwweDBmLDB4YTAsMHgwMywweGUwLDB4MDgsMHhmYiwweDQyLDB4M2UsMHhkOCwweDBmLDB4YjAsMHgwMywweGMyIH19LAorIHsxNiwgMHhkYzAwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGYwLDB4ODAsMHhjZiwweDgwLDB4MzEsMHhlMSB9fSwKKyB7MTYsIDB4ZGMxMCwgMCwgezB4MGMsMHhmOCwweDAzLDB4ZGEsMHgxMCwweGVmLDB4ODAsMHgzZiwweGU0LDB4MGYsMHhkOCwweDAzLDB4ZmUsMHgxMCwweGZmLDB4ODIgfX0sCisgezE2LCAweGRjMjAsIDAsIHsweDNmLDB4ZTAsMHg0YywweGQ4LDB4MWIsMHgxNiwweDIwLDB4Y2YsMHg4MCwweDNmLDB4ZTAsMHg0YywweGQ4LDB4MzAsMHhlZSwweDQwIH19LAorIHsxNiwgMHhkYzMwLCAwLCB7MHhmZiwweGMwLDB4YjMsMHhmNCwweDBmLDB4ZjgsMHgwMywweGMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGM0MCwgMCwgezB4YTgsMHgwMSwweDk4LDB4MjAsMHg4MywweDQwLDB4MjEsMHhjMCwweDA4LDB4NzEsMHgwMiwweGRjLDB4ODQsMHg4NywweDIwLDB4MmQgfX0sCisgezE2LCAweGRjNTAsIDAsIHsweGMwLDB4MGIsMHg2MCwweDAyLDB4ZDksMHg2MCwweGY3LDB4MDAsMHgyZCwweGMwLDB4MDgsMHhmMCwweDgyLDB4MTQsMHgwNCwweDg3IH19LAorIHsxNiwgMHhkYzYwLCAwLCB7MHgwMCwweDJkLDB4YzAsMHgwOCwweGYwLDB4MDMsMHgxZSwweDAwLDB4YjcsMHgyMCwweDIxLDB4YzAsMHg4YiwweDcwLDB4MDIsMHhlYSB9fSwKKyB7MTYsIDB4ZGM3MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiMCwweDAwLDB4ODcsMHgwMCwweDIxLDB4ODAgfX0sCisgezE2LCAweGRjODAsIDAsIHsweDA4LDB4NzAsMHgwMiwweGY1LDB4MDQsMHgyNywweDAwLDB4MmQsMHhjMCwweDhiLDB4NzAsMHgwMiwweGRjLDB4MDAsMHhiNywweDAwIH19LAorIHsxNiwgMHhkYzkwLCAwLCB7MHgyYywweDUwLDB4MDgsMHg0MCwweDAyLDB4MTQsMHgwMCwweDg3LDB4MDAsMHgyZCwweGMwLDB4MDgsMHg1MCwweDAyLDB4NWMsMHgwNCB9fSwKKyB7MTYsIDB4ZGNhMCwgMCwgezB4YjcsMHgwMCwweGExLDB4YzAsMHg4YiwweDcwLDB4MDIsMHhjMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRjYjAsIDAsIHsweDIwLDB4MTQsMHhjOCwweDAwLDB4ODAsMHgwMCwweDAwLDB4ODAsMHgwOCwweDMwLDB4MDIsMHhjZSwweDAwLDB4ODMsMHhjMCwweDJjIH19LAorIHsxNiwgMHhkY2MwLCAwLCB7MHhkMCwweDRiLDB4MzAsMHgwMiwweGNlLDB4MDAsMHhhYiwweDAyLDB4MmMsMHg0MCwweDQ4LDB4YmMsMHgwMiwweDA0LDB4MDAsMHg4MyB9fSwKKyB7MTYsIDB4ZGNkMCwgMCwgezB4MDAsMHgyYywweGMwLDB4MDgsMHgxMCwweDAyLDB4MDAsMHgwOCwweGIzLDB4MDAsMHgyMCwweGMwLDB4MDksMHgzMCwweDAyLDB4YzggfX0sCisgezE2LCAweGRjZTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4ODMsMHg0MCwweGM4LDB4MDAsMHgzMCwweGMwIH19LAorIHsxNiwgMHhkY2YwLCAwLCB7MHgyYywweGIwLDB4MDMsMHhlYywweDAwLDB4ZWYsMHg4OCwweDNmLDB4ZTYsMHgwNywweGIxLDB4ODMsMHhlMSwweDAwLDB4YmYsMHgwMCB9fSwKKyB7MTYsIDB4ZGQwMCwgMCwgezB4M2UsMHhlMCwweDBjLDB4YjgsMHgwMywweDM0LDB4MDAsMHhjZiwweDAwLDB4M2YsMHhjMCwweDJjLDB4YjAsMHgwMywweDY4LDB4MTAgfX0sCisgezE2LCAweGRkMTAsIDAsIHsweGZmLDB4MDAsMHgzMywweGMwLDB4MGYsMHhmMCwweDAzLDB4ZWEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZDIwLCAwLCB7MHg4MCwweDAwLDB4ZTQsMHgwMCwweGYxLDB4NDAsMHgzZSwweGMwLDB4MGYsMHhiNCwweDAzLDB4ZWQsMHg0MCwweGZiLDB4MDgsMHgzZSB9fSwKKyB7MTYsIDB4ZGQzMCwgMCwgezB4YzAsMHgwZiwweGEwLDB4MDMsMHhlNSwweDIwLDB4ZmIsMHgwMCwweDNlLDB4ZTAsMHgwZCwweGIwLDB4ODMsMHhlNCwweDAwLDB4ZjMgfX0sCisgezE2LCAweGRkNDAsIDAsIHsweDAwLDB4M2UsMHhjMCwweDBmLDB4ODAsMHgwMywweGM0LDB4MDAsMHhmYiwweDAwLDB4M2UsMHhjMCwweDBmLDB4MzAsMHgwMywweGUwIH19LAorIHsxNiwgMHhkZDUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGYwLDB4MDAsMHhjYSwweDAwLDB4MzMsMHhlMCB9fSwKKyB7MTYsIDB4ZGQ2MCwgMCwgezB4NGUsMHhmMCwweDAzLDB4MzQsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4OGYsMHhlOCwweDAzLDB4ZjAsMHgwMCwweGZmLDB4MDAgfX0sCisgezE2LCAweGRkNzAsIDAsIHsweGIxLDB4NDAsMHgwYywweGUwLDB4MDMsMHgzNCwweDAwLDB4ZWYsMHgwMCwweGIzLDB4YzAsMHgwYywweGYwLDB4MDMsMHgzOCwweDAwIH19LAorIHsxNiwgMHhkZDgwLCAwLCB7MHhjZiwweDAwLDB4M2QsMHhjMCwweDBhLDB4ZjAsMHgwMywweDAwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGQ5MCwgMCwgezB4ODEsMHgwNCwweDYyLDB4MjIsMHg4OCwweDkwLDB4MjIsMHhlMCwweDA4LDB4M2MsMHgwMiwweDJlLDB4MDgsMHhiYiwweDAxLDB4MmUgfX0sCisgezE2LCAweGRkYTAsIDAsIHsweGMwLDB4MGIsMHhhMCwweDAyLDB4NjYsMHgwMCwweGJiLDB4MDAsMHgyMiwweGEwLDB4MDgsMHhhOSwweDAyLDB4MjQsMHgwMCwweGJiIH19LAorIHsxNiwgMHhkZGIwLCAwLCB7MHgwMCwweDIyLDB4YzAsMHgyOCwweDJjLDB4MDIsMHhhMiwweDAwLDB4ZGIsMHgwMCwweDJlLDB4YzAsMHgwYSwweGIwLDB4MDIsMHhhMCB9fSwKKyB7MTYsIDB4ZGRjMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyMiwweDAwLDB4OTgsMHgwMCwweDIyLDB4YzggfX0sCisgezE2LCAweGRkZDAsIDAsIHsweDBhLDB4OTgsMHgwMiwweDI3LDB4MDQsMHhiYiwweDAwLDB4MmUsMHhjMCwweDBiLDB4YjEsMHgwMiwweGUyLDB4MDAsMHhiYiwweDAwIH19LAorIHsxNiwgMHhkZGUwLCAwLCB7MHgyMiwweGUyLDB4MDgsMHhiMCwweDAyLDB4YTQsMHgwMCwweGFiLDB4MDAsMHgyMCwweGMwLDB4MGEsMHg4OCwweDgyLDB4MjMsMHgwMCB9fSwKKyB7MTYsIDB4ZGRmMCwgMCwgezB4OGIsMHgwMCwweDJlLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhhMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRlMDAsIDAsIHsweDA4LDB4MTQsMHgwNCwweDAwLDB4OTEsMHg0MCwweDIyLDB4YzAsMHgwOCwweDEwLDB4MDIsMHgwYywweDAwLDB4YjMsMHgwMCwweDJjIH19LAorIHsxNiwgMHhkZTEwLCAwLCB7MHhjMCwweDRiLDB4MjgsMHgyMiwweDQwLDB4MDQsMHhiMywweDAwLDB4MjAsMHhjMCwweDI4LDB4MzAsMHgwYSwweDA0LDB4MDQsMHhiMyB9fSwKKyB7MTYsIDB4ZGUyMCwgMCwgezB4MDAsMHg2MCwweGMwLDB4MDgsMHgwMCwweDAyLDB4ODQsMHgyMCwweDkzLDB4MDAsMHgyYywweGMwLDB4MGEsMHgzMCwweDAyLDB4ODIgfX0sCisgezE2LCAweGRlMzAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4NjAsMHgwMCwweGRhLDB4NDAsMHhiMiwweDgwIH19LAorIHsxNiwgMHhkZTQwLCAwLCB7MHgwZSwweDkwLDB4MDMsMHgyNCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHg4ZiwweGEwLDB4MDMsMHhlMCwweDA5LDB4ZmYsMHgwMCB9fSwKKyB7MTYsIDB4ZGU1MCwgMCwgezB4MzIsMHg0MCwweDA4LDB4YTAsMHgwYiwweDM0LDB4MDAsMHhlYiwweDAwLDB4MzEsMHhjMCwweDBjLDB4ODAsMHgwMywweDI4LDB4ODAgfX0sCisgezE2LCAweGRlNjAsIDAsIHsweGM3LDB4MDAsMHgzZiwweGMwLDB4MGMsMHhmMCwweDAzLDB4MDAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZTcwLCAwLCB7MHhhMCwweDE1LDB4ZDAsMHgwMCwweGVjLDB4MjAsMHgzZiwweDAwLDB4MGYsMHhjMCwweDBiLDB4ZmMsMHgxMCwweGZmLDB4MDEsMHgzZiB9fSwKKyB7MTYsIDB4ZGU4MCwgMCwgezB4YzAsMHgwZiwweGUwLDB4MDMsMHhmNCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmNCwweDAwLDB4ZmYgfX0sCisgezE2LCAweGRlOTAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDRmLDB4YzAsMHgwMSwweGYwLDB4MDgsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGU4IH19LAorIHsxNiwgMHhkZWEwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZjLDB4MDAsMHhjYywweDkwLDB4MzcsMHgyMCB9fSwKKyB7MTYsIDB4ZGViMCwgMCwgezB4MGUsMHhmMCwweDEzLDB4YmQsMHgwNCwweGQ0LDB4YzEsMHgzMywweDJjLDB4NGMsMHhkOSwweDIzLDB4MzIsMHg2MCwweGZmLDB4MjAgfX0sCisgezE2LCAweGRlYzAsIDAsIHsweDNkLDB4ZTAsMHg0ZiwweGMxLDB4MDMsMHhiNiwweDQwLDB4Y2QsMHgwMCwweDM3LDB4ZTAsMHgwYywweGUyLDB4OGIsMHgxMCwweGMwIH19LAorIHsxNiwgMHhkZWQwLCAwLCB7MHhjZCwweDAwLDB4MzMsMHhjNiwweDBmLDB4ZDgsMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGVlMCwgMCwgezB4ODAsMHgxMCwweGVlLDB4MDgsMHg4YSwweDIwLDB4MjIsMHgwMCwweDA4LDB4YjcsMHgwMiwweDJkLDB4MDAsMHg4YSwweDAwLDB4YjYgfX0sCisgezE2LCAweGRlZjAsIDAsIHsweDNjLDB4MDgsMHg5OSwweDAyLDB4MjcsMHg4NCwweGJmLDB4NjgsMHgyZSwweDgyLDB4MGIsMHgwMSwweDAyLDB4MjQsMHg0MCwweGQ5IH19LAorIHsxNiwgMHhkZjAwLCAwLCB7MHg0MiwweDIwLDB4YzAsMHg4YSwweGFjLDB4MDIsMHgyZCwweGMyLDB4ODIsMHg0OCwweGEyLDB4ZDAsMHgwYiwweDgyLDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4ZGYxMCwgMCwgezB4MDYsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDAwLDB4ODgsMHgwNCwweDI2LDB4ODAgfX0sCisgezE2LCAweGRmMjAsIDAsIHsweDJhLDB4MzAsMHhjMiwweGE1LDB4ODAsMHhhOSwweDIxLDB4MjgsMHgwMCwweDhhLDB4MDAsMHgwMiwweDAwLDB4MDAsMHhhMywweDEwIH19LAorIHsxNiwgMHhkZjMwLCAwLCB7MHgyYywweGM4LDB4MGIsMHgwMCwweDAyLDB4YzQsMHg5MCwweDgzLDB4NDIsMHgyNCwweGMxLDB4MDgsMHgwMCwweDAyLDB4NDAsMHg4OCB9fSwKKyB7MTYsIDB4ZGY0MCwgMCwgezB4YTMsMHg2MCwweGE4LDB4YzAsMHgwYiwweDAwLDB4YzIsMHgyMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRmNTAsIDAsIHsweGMwLDB4MTUsMHhhYywweDA2LDB4OGEsMHgwMCwweDIyLDB4ZTAsMHg0OCwweGIwLDB4MDIsMHgyZSwweDAyLDB4YWIsMHg4MCwweDJlIH19LAorIHsxNiwgMHhkZjYwLCAwLCB7MHgyMCwweDRhLDB4OGMsMHgwMiwweDI2LDB4MjAsMHhiYiwweDAwLDB4NmUsMHg4MCwweDBiLDB4MzAsMHhjMiwweDQ2LDB4MDQsMHg5YiB9fSwKKyB7MTYsIDB4ZGY3MCwgMCwgezB4MGEsMHhhMiwweGMwLDB4MGEsMHg4MCwweDEyLDB4NmMsMHg0MCwweGE4LDB4MDAsMHgyYSwweGMwLDB4MGIsMHg4YywweDAyLDB4MzAgfX0sCisgezE2LCAweGRmODAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWMsMHgwMCwweGMxLDB4MDksMHgzNiwweDYxIH19LAorIHsxNiwgMHhkZjkwLCAwLCB7MHgwZSwweDMyLDB4MDMsMHhhYiwweDIwLDB4ZjgsMHg4NCwweDNhLDB4NzgsMHgyZSwweDk4LDB4MDMsMHgyNiwweDAwLDB4ZWIsMHgwMCB9fSwKKyB7MTYsIDB4ZGZhMCwgMCwgezB4M2UsMHg0MCwweDRmLDB4OTAsMHgwMywweGUyLDB4MDAsMHhjOSwweDQwLDB4MzYsMHhlMCwweDBjLDB4YjQsMHgwMywweDZlLDB4MDAgfX0sCisgezE2LCAweGRmYjAsIDAsIHsweGViLDB4MDAsMHgzYSwweGMwLDB4MGYsMHg4OCwweDAzLDB4MTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZmMwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwMCwweGZkLDB4MDAsMHgzZiwweDQwLDB4MGYsMHhmYSwweDEzLDB4ZjgsMHgxMCwweGRjLDB4MDQsMHgyNyB9fSwKKyB7MTYsIDB4ZGZkMCwgMCwgezB4NDAsMHgwZCwweDUwLDB4NDMsMHhmNCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4NDAsMHgwZiwweGQ5LDB4MDMsMHhiMCwweDAwLDB4ZjkgfX0sCisgezE2LCAweGRmZTAsIDAsIHsweDAxLDB4M2YsMHhmMCwweDBmLDB4ZjAsMHgyMywweGIyLDB4MDAsMHhkNCwweGEwLDB4MzcsMHhjMCwweDBmLDB4YzAsMHgwYiwweGY4IH19LAorIHsxNiwgMHhkZmYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MjAsMHhlYiwweDEwLDB4ZjIsMHgwMCB9fSwKKyB7MTYsIDB4ZTAwMCwgMCwgezB4MGUsMHhiNCwweDAzLDB4MjEsMHg4MCwweGM5LDB4NDAsMHgzYSwweDQ4LDB4MGYsMHg5MCwweDEzLDB4ZTEsMHgyMCwweGZiLDB4MDAgfX0sCisgezE2LCAweGUwMTAsIDAsIHsweDNlLDB4YzAsMHgwYywweDg0LDB4MDMsMHgyNCwweDAwLDB4ZmIsMHgwMSwweDM2LDB4ZTAsMHgwYywweDc0LDB4MGIsMHg5YywweDAwIH19LAorIHsxNiwgMHhlMDIwLCAwLCB7MHhjZiwweDAwLDB4MzIsMHhlMCwweDBmLDB4ODQsMHgwMywweGQwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTAzMCwgMCwgezB4YzgsMHgwNSwweDFlLDB4MDAsMHg4YiwweDgwLDB4MjAsMHg0MCwweDA4LDB4YjgsMHgwMiwweDgzLDB4ODAsMHg4MSwweGEwLDB4MjIgfX0sCisgezE2LCAweGUwNDAsIDAsIHsweDc4LDB4MGIsMHg5MSwweDgzLDB4ZTMsMHgwMCwweGJmLDB4MDAsMHgwZSwweGMxLDB4MGEsMHhiNCwweDAzLDB4NjQsMHgwNCwweGI5IH19LAorIHsxNiwgMHhlMDUwLCAwLCB7MHg1MCwweDMyLDB4YzAsMHgwYSwweGIyLDB4MDIsMHgyMCwweDAwLDB4ODgsMHgwMCwweDIzLDB4ZDQsMHgwYiwweDg4LDB4MDIsMHhmMiB9fSwKKyB7MTYsIDB4ZTA2MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDQyLDB4YTAsMHg4MCwweDIwLDB4MDAgfX0sCisgezE2LCAweGUwNzAsIDAsIHsweDQ4LDB4MDAsMHgwMiwweDBkLDB4MDYsMHg4MCwweDgwLDB4MmEsMHhkMCwweDAzLDB4MDAsMHgwMiwweGM4LDB4MDAsMHhiMywweDAwIH19LAorIHsxNiwgMHhlMDgwLCAwLCB7MHgyYywweGMwLDB4MDgsMHgzNiwweDAyLDB4NDAsMHgwMCwweGI5LDB4MDIsMHgyMiwweGMyLDB4OGIsMHgyNiwweDAyLDB4MGMsMHgxMCB9fSwKKyB7MTYsIDB4ZTA5MCwgMCwgezB4MDEsMHgwMiwweDI0LDB4YzAsMHg0YiwweGExLDB4MDIsMHhmOCwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUwYTAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDA4LDB4OGUsMHg4MCwweDIxLDB4MjEsMHgwOCwweDI4LDB4YzIsMHg5ZSwweDAwLDB4OGUsMHg4MCwweDIxIH19LAorIHsxNiwgMHhlMGIwLCAwLCB7MHg2MCwweDBiLDB4NzgsMHgwMiwweDllLDB4MjAsMHhiNywweDgyLDB4MmYsMHhhMSwweDBhLDB4NzgsMHgwMiwweDVlLDB4MDAsMHhiNSB9fSwKKyB7MTYsIDB4ZTBjMCwgMCwgezB4OTEsMHhhMSwweGUwLDB4MGIsMHgyOSwweDAyLDB4MzIsMHg0NCwweDg2LDB4ODAsMHhhNSwweGUwLDB4MGIsMHg0YywweDAyLDB4YzggfX0sCisgezE2LCAweGUwZDAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweGUxLDB4MDAsMHgyMiwweDgwIH19LAorIHsxNiwgMHhlMGUwLCAwLCB7MHgwZSwweDAwLDB4MGIsMHgyNCwweDAwLDB4YzAsMHg0NCwweDI4LDB4YWQsMHgwZiwweDIwLDB4MDIsMHhjOCwweDAwLDB4ZjMsMHgwMCB9fSwKKyB7MTYsIDB4ZTBmMCwgMCwgezB4MWMsMHhjMCwweDBjLDB4MDEsMHgwMywweDQ4LDB4NGMsMHhmMiwweDA0LDB4MzAsMHhjMCwweDBmLDB4MTUsMHgwMywweDgwLDB4NDAgfX0sCisgezE2LCAweGUxMDAsIDAsIHsweGMxLDB4MDAsMHgxNCwweGM4LDB4MGYsMHgwMCwweDAzLDB4ZGEsMHgwMiwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMTEwLCAwLCB7MHg0MCwweDFkLDB4OWMsMHg0MCwweGY3LDB4MDAsMHgzZiwweGMwLDB4OGYsMHhjMCwweDAzLDB4ZTQsMHgwMCwweGZhLDB4MDEsMHgzZiB9fSwKKyB7MTYsIDB4ZTEyMCwgMCwgezB4YzAsMHgwZiwweGYwLDB4MjMsMHhmYywweDA4LDB4ZmIsMHgwMCwweDNmLDB4ODAsMHgwZiwweGYwLDB4MDEsMHhmYywweDEwLDB4ZmYgfX0sCisgezE2LCAweGUxMzAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDBlLDB4ZDEsMHgwMywweGZjLDB4NDIsMHhmZSwweDgwLDB4M2IsMHhjMCwweDBmLDB4YzAsMHgwMywweGQwIH19LAorIHsxNiwgMHhlMTQwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVjLDB4NDAsMHhjOCwweDAwLDB4M2UsMHhjMCB9fSwKKyB7MTYsIDB4ZTE1MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZWUsMHgwOCwweGNiLDB4MDAsMHgzMiwweGMwLDB4MGYsMHhhMCwweDIzLDB4ZTYsMHgwMywweGNiLDB4NGMgfX0sCisgezE2LCAweGUxNjAsIDAsIHsweDMyLDB4NDAsMHgwZiwweGIwLDB4MDcsMHhlOCwweDAwLDB4ZjksMHgwMCwweDE2LDB4NDAsMHgwYywweGEwLDB4MGIsMHg2YywweDAwIH19LAorIHsxNiwgMHhlMTcwLCAwLCB7MHhjZiwweDAyLDB4MzIsMHhjNSwweDBjLDB4ODAsMHgwMywweDAyLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTE4MCwgMCwgezB4NDgsMHgxMSwweDljLDB4ODAsMHg4NCwweDA0LDB4MmQsMHhjMSwweDBiLDB4NDAsMHg0MCwweGRjLDB4MDAsMHg4NywweDA0LDB4MjEgfX0sCisgezE2LCAweGUxOTAsIDAsIHsweGMwLDB4NGIsMHg3MCwweDEyLDB4ZmMsMHgwMSwweDhmLDB4NjAsMHgyOSwweDQwLDB4MGIsMHg3MCwweDEzLDB4OWMsMHgwMCwweGI1IH19LAorIHsxNiwgMHhlMWEwLCAwLCB7MHgwMCwweGEzLDB4NDAsMHgwYSwweDYwLDB4MDIsMHgwMCwweDAwLDB4ODQsMHgwMCwweDIxLDB4YzAsMHgwOCwweDQwLDB4MDIsMHgxMiB9fSwKKyB7MTYsIDB4ZTFiMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg4ZSwweDAwLDB4ODcsMHg4MCwweDJkLDB4YTIgfX0sCisgezE2LCAweGUxYzAsIDAsIHsweDBiLDB4NGMsMHgxNiwweGQ2LDB4MDgsMHg5NywweDg4LDB4MjEsMHhhMCwweDRiLDB4NjgsMHgwMiwweGRlLDB4MDQsMHhhNywweDgwIH19LAorIHsxNiwgMHhlMWQwLCAwLCB7MHgyMSwweGUwLDB4MGIsMHg0OCwweDAyLDB4ZGEsMHgwNCwweGI2LDB4ODIsMHgyNSwweDYwLDB4MGEsMHhlOCwweDYyLDB4MWUsMHgwMCB9fSwKKyB7MTYsIDB4ZTFlMCwgMCwgezB4ODcsMHg4MCwweDIwLDB4ZTgsMHgwOCwweDQ4LDB4MDIsMHgwOCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUxZjAsIDAsIHsweDQ4LDB4MTQsMHhjYywweDAwLDB4OGIsMHg4MCwweDZjLDB4ZjAsMHgwYiwweDNjLDB4MDIsMHhjZSwweDQ2LDB4OWIsMHhjMCwweDIwIH19LAorIHsxNiwgMHhlMjAwLCAwLCB7MHhlNCwweDBiLDB4M2MsMHgwMiwweGNjLDB4MjAsMHhhMywweDAwLDB4MjgsMHhlMCwweDBiLDB4MzAsMHgwMiwweDhkLDB4ODAsMHhiMSB9fSwKKyB7MTYsIDB4ZTIxMCwgMCwgezB4ODAsMHgyMiwweDQ0LDB4MGEsMHgyMSwweDBhLDB4MDMsMHg4MiwweDgwLDB4ODAsMHhhMCwweGMwLDB4MDgsMHgwNiwweDBhLDB4MTIgfX0sCisgezE2LCAweGUyMjAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMiwweGNlLDB4ODAsMHgzZiwweGEwIH19LAorIHsxNiwgMHhlMjMwLCAwLCB7MHgwZiwweGUwLDB4MDMsMHhmYSwweDQwLDB4ZGUsMHhjMCwweGIzLDB4OTAsMHgwZiwweGVhLDB4MTMsMHhmOSwweDA4LDB4ZWEsMHgwNCB9fSwKKyB7MTYsIDB4ZTI0MCwgMCwgezB4MzMsMHg4MiwweDhmLDB4ZTQsMHgwMywweGZiLDB4MDgsMHhmZSwweGEwLDB4MzYsMHhhMCwweDBjLDB4YWMsMHgwYiwweDZiLDB4ODIgfX0sCisgezE2LCAweGUyNTAsIDAsIHsweGM2LDB4YTAsMHgzMiwweDgwLDB4MmMsMHhlNCwweDAzLDB4M2EsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMjYwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4OTAsMHgzZSwweDAyLDB4MGYsMHg4MCwweDgzLDB4ZTEsMHgwMCwweGU4LDB4MjAsMHgzZSB9fSwKKyB7MTYsIDB4ZTI3MCwgMCwgezB4MDMsMHgwZiwweDgyLDB4MDMsMHhlMSwweDQwLDB4ZDgsMHgwMCwweDNlLDB4MjAsMHgwZiwweDAwLDB4OTMsMHhhMCwweDQwLDB4ZjggfX0sCisgezE2LCAweGUyODAsIDAsIHsweDAwLDB4M2UsMHgxMCwweDhmLDB4MDgsMHgwYiwweGYwLDB4MDAsMHhmYywweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyIH19LAorIHsxNiwgMHhlMjkwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDAsMHhlOSwweDAwLDB4MzYsMHg0MCB9fSwKKyB7MTYsIDB4ZTJhMCwgMCwgezB4MGYsMHg5NCwweDA3LDB4ZTYsMHgwMCwweGY5LDB4ODAsMHhiMCwweDQwLDB4MGMsMHg5NCwweDAzLDB4ZTQsMHg0MCwweGY5LDB4MDAgfX0sCisgezE2LCAweGUyYjAsIDAsIHsweDMyLDB4NDAsMHgwZiwweDk0LDB4MGIsMHhhNCwweDAwLDB4NzEsMHhjMCwweDMyLDB4NDAsMHgyYywweDk0LDB4MjMsMHgyNCwweDAyIH19LAorIHsxNiwgMHhlMmMwLCAwLCB7MHhjOSwweDAwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweDAyLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTJkMCwgMCwgezB4ODAsMHgwNCwweDQ0LDB4MDAsMHg4OSwweDAwLDB4MjIsMHg0MCwweDBiLDB4OTgsMHgwMiwweGU2LDB4NjAsMHhiOSwweDAwLDB4MjIgfX0sCisgezE2LCAweGUyZTAsIDAsIHsweDYwLDB4MGEsMHg5YywweDAyLDB4ZTYsMHgyNCwweGI5LDB4MDQsMHgzNiwweDQwLDB4MGIsMHg5OCwweDAwLDB4MjQsMHgwMCwweGI5IH19LAorIHsxNiwgMHhlMmYwLCAwLCB7MHg4MCwweGEyLDB4NTIsMHgwOCwweDkwLDB4MDIsMHgyNCwweDAwLDB4ODksMHg0MCwweDIyLDB4NDAsMHg2OCwweDk0LDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4ZTMwMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YTksMHgwMCwweDI2LDB4NDAgfX0sCisgezE2LCAweGUzMTAsIDAsIHsweDAzLDB4OTQsMHgwMiwweGU0LDB4MDEsMHhiOSwweDEwLDB4MjIsMHg1NSwweDA4LDB4OTAsMHgyMiwweGU0LDB4MDAsMHhiMSwweDAwIH19LAorIHsxNiwgMHhlMzIwLCAwLCB7MHgyNiwweDQwLDB4MGIsMHg5MCwweDAwLDB4MmMsMHgwOSwweGI5LDB4MDAsMHgyMiwweDYwLDB4MDgsMHg5MCwweDBhLDB4MWMsMHgwNCB9fSwKKyB7MTYsIDB4ZTMzMCwgMCwgezB4OGQsMHgwOCwweGEwLDB4NDAsMHgwOCwweDEwLDB4ODIsMHgwZSwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUzNDAsIDAsIHsweDA4LDB4MDQsMHgwNiwweDAwLDB4ODEsMHgwMCwweDIwLDB4NTAsMHgwYiwweDEyLDB4NDIsMHhjNCwweDgwLDB4YjEsMHgwNCwweDIwIH19LAorIHsxNiwgMHhlMzUwLCAwLCB7MHg1MCwweDBhLDB4MTQsMHgwMiwweGM1LDB4MDAsMHhiMSwweDIyLDB4MjQsMHg0MCwweDBiLDB4MTIsMHgyMiwweDA0LDB4MDEsMHhiMSB9fSwKKyB7MTYsIDB4ZTM2MCwgMCwgezB4NDAsMHgyMCwweDUwLDB4MDgsMHgxMCwweDBhLDB4MTUsMHgwMCwweDg1LDB4NDAsMHgyOCwweDUwLDB4MDgsMHgxNCwweDBhLDB4MGEgfX0sCisgezE2LCAweGUzNzAsIDAsIHsweDA1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGU4LDB4NTAsMHgzNiwweDAwIH19LAorIHsxNiwgMHhlMzgwLCAwLCB7MHgwZiwweDg1LDB4MDIsMHhlMSwweDQwLDB4ZjgsMHg1MCwweDMyLDB4MDAsMHgwYywweGEwLDB4MjMsMHhlMCwweDEwLDB4ZjgsMHg1MCB9fSwKKyB7MTYsIDB4ZTM5MCwgMCwgezB4YjIsMHgxNCwweDBmLDB4YTUsMHgwMywweGExLDB4NDgsMHhmYSwweDAwLDB4YjIsMHgwMCwweDBjLDB4ODAsMHgwMywweDIwLDB4MDQgfX0sCisgezE2LCAweGUzYTAsIDAsIHsweGM0LDB4MDIsMHgzMiwweDAwLDB4MGMsMHgwMCwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlM2IwLCAwLCB7MHg5OCwweDFkLDB4ZTUsMHgwMCwweGZkLDB4MDAsMHgzZiwweDQwLDB4MGYsMHhkMSwweDAzLDB4ZDQsMHg0NCwweGY1LDB4MDAsMHgzZiB9fSwKKyB7MTYsIDB4ZTNjMCwgMCwgezB4NTEsMHgwZiwweGQ0LDB4MDMsMHhmNSwweDAwLDB4ZjksMHgxMCwweDNiLDB4NDAsMHgwZiwweGQxLDB4MDAsMHhmNSwweDEwLDB4ZjUgfX0sCisgezE2LCAweGUzZDAsIDAsIHsweDQwLDB4N2YsMHg0MCwweDBmLDB4NTQsMHgyYiwweGU1LDB4MDAsMHhmOSwweDQwLDB4MzYsMHg1MCwweDBmLDB4ZDAsMHgwMywweGU2IH19LAorIHsxNiwgMHhlM2UwLCAwLCB7MHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGY2LDB4MTAsMHhiZCwweDQwLDB4MzMsMHg0MCB9fSwKKyB7MTYsIDB4ZTNmMCwgMCwgezB4MGYsMHhkYSwweDAzLDB4MzcsMHg4MCwweGNkLDB4MDAsMHgzZiwweDQwLDB4MGYsMHhkMCwweDAzLDB4ZjQsMHgwMCwweGU5LDB4YTAgfX0sCisgezE2LCAweGU0MDAsIDAsIHsweDNlLDB4NDAsMHgwYywweGRlLDB4MTcsMHhhNCwweDA4LDB4ZmQsMHhjMCwweDMzLDB4NDEsMHg4ZCwweGRhLDB4MTMsMHgyNiwweGEwIH19LAorIHsxNiwgMHhlNDEwLCAwLCB7MHhmOSwweGE4LDB4MzIsMHg3OCwweDBjLDB4YjQsMHgwYiwweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTQyMCwgMCwgezB4MzgsMHgxMCwweGUxLDB4MDAsMHhiOCwweGEwLDB4MzYsMHgyMCwweDBiLDB4OGEsMHg4MiwweGEyLDB4ODAsMHgyYSwweGE4LDB4MmUgfX0sCisgezE2LCAweGU0MzAsIDAsIHsweDAwLDB4MGIsMHg4MCwweDEyLDB4ZTAsMHgwNCwweGI4LDB4YTEsMHgyZSwweDI4LDB4NGEsMHg4ZSwweDAyLDB4MmEsMHhhMCwweGJhIH19LAorIHsxNiwgMHhlNDQwLCAwLCB7MHhjMCwweDIyLDB4MjgsMHgwOCwweDg1LDB4MDIsMHgyMSwweDA4LDB4YjgsMHhlOCwweGEyLDB4M2MsMHgwOCwweGM4LDB4MDIsMHgwZSB9fSwKKyB7MTYsIDB4ZTQ1MCwgMCwgezB4MDYsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNSwweDAwLDB4YjksMHgwMCwweDIwLDB4NGEgfX0sCisgezE2LCAweGU0NjAsIDAsIHsweDBiLDB4MTQsMHgwMiwweDA1LDB4ODAsMHgwMSwweDAwLDB4MmMsMHg0MSwweDBiLDB4MTAsMHgwMiwweGM0LDB4MDQsMHhhMSwweDRhIH19LAorIHsxNiwgMHhlNDcwLCAwLCB7MHgyZSwweDQyLDB4MDgsMHgxNCwweDAyLDB4ODQsMHgxMCwweGIxLDB4NjAsMHhhMCwweDRhLDB4MDksMHgxMCwweDAyLDB4NDQsMHgwMCB9fSwKKyB7MTYsIDB4ZTQ4MCwgMCwgezB4YjUsMHgwMSwweDI5LDB4NDAsMHgxOCwweGQyLDB4MDIsMHgxMiwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU0OTAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAwLDB4YjksMHgyMSwweDI2LDB4NDAsMHgwYiwweDk2LDB4MDIsMHhhNCwweDEwLDB4YTksMHgwMCwweDJlIH19LAorIHsxNiwgMHhlNGEwLCAwLCB7MHg0MCwweDBiLDB4OTYsMHgxMiwweGU0LDB4MjAsMHhiOSwweDAwLDB4MmUsMHg0MSwweDBhLDB4OTAsMHg0MiwweDI0LDB4MDAsMHhiOSB9fSwKKyB7MTYsIDB4ZTRiMCwgMCwgezB4MDAsMHgyMiwweDQxLDB4MDgsMHg5OCwweDIyLDB4NjQsMHgwMCwweGI5LDB4MjAsMHgyYiwweDQxLDB4MjgsMHhkNCwweDAyLDB4MDYgfX0sCisgezE2LCAweGU0YzAsIDAsIHsweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDExLDB4ZTQsMHgwMCwweGY5LDB4ZTAsMHgzMiwweDU4IH19LAorIHsxNiwgMHhlNGQwLCAwLCB7MHgwZiwweDk4LDB4MDMsMHgyNiwweDQwLDB4YzksMHg0MCwweDNlLDB4NTgsMHgwZiwweDljLDB4MDMsMHhlNCwweDAwLDB4ZTksMHgwMCB9fSwKKyB7MTYsIDB4ZTRlMCwgMCwgezB4NmUsMHg0MCwweDBjLDB4OWEsMHgwMiwweGE2LDB4MDAsMHhmOSwweDQ0LDB4MzIsMHg0MCwweDBkLDB4OWEsMHgwYiwweDY0LDB4ODQgfX0sCisgezE2LCAweGU0ZjAsIDAsIHsweGY5LDB4MDAsMHhiYSwweDQwLDB4MGMsMHgxOCwweDAzLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNTAwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDUwLDB4MGYsMHg5MCwweDAzLDB4ZTYsMHgwMCwweGY5LDB4MDQsMHgzZSB9fSwKKyB7MTYsIDB4ZTUxMCwgMCwgezB4NDgsMHgwZiwweDkwLDB4MDMsMHhlNCwweDQwLDB4ZjksMHgwMCwweDNlLDB4NjUsMHgwZiwweDk5LDB4ODEsMHhlNCwweDUwLDB4ZjkgfX0sCisgezE2LCAweGU1MjAsIDAsIHsweDIwLDB4M2UsMHg0MCwweDhmLDB4OTAsMHgwMywweGE0LDB4ODAsMHhmOSwweDAwLDB4MzQsMHg0MCwweDBmLDB4OTIsMHgwMywweGQyIH19LAorIHsxNiwgMHhlNTMwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDAsMHhmOCwweDQwLDB4M2UsMHgxMCB9fSwKKyB7MTYsIDB4ZTU0MCwgMCwgezB4MGUsMHg4NCwweDAzLDB4NjAsMHgwOCwweGM4LDB4MDAsMHgzZSwweDA4LDB4MGYsMHg4MCwweDgzLDB4ZTAsMHgyOCwweGU4LDB4MDQgfX0sCisgezE2LCAweGU1NTAsIDAsIHsweDNlLDB4MDAsMHgwYywweDg0LDB4MDMsMHgyMSwweDFjLDB4ZjAsMHg0OCwweDMyLDB4MDAsMHgwYiwweDAwLDB4MDMsMHhlMCwweDAyIH19LAorIHsxNiwgMHhlNTYwLCAwLCB7MHhjMCwweDAwLDB4MzIsMHgwMCwweDBjLDB4YzAsMHgwYiwweDAyLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTU3MCwgMCwgezB4MjgsMHgwNSwweDM4LDB4MDAsMHhiMiwweDg4LDB4MmUsMHg4MCwweDA4LDB4ZTAsMHgwMywweDdhLDB4ODAsMHg4ZSwweDAwLDB4MmYgfX0sCisgezE2LCAweGU1ODAsIDAsIHsweGEwLDB4MGIsMHhlOCwweDAyLDB4ZjksMHgxMCwweGJhLDB4MDAsMHgyYywweDgwLDB4MjgsMHhlNCwweDAyLDB4MjgsMHgwMCwweGJlIH19LAorIHsxNiwgMHhlNTkwLCAwLCB7MHg0MCwweDIzLDB4YjgsMHgwOCwweGU4LDB4MDIsMHhlOCwweDA0LDB4Y2EsMHgyMCwweGEyLDB4ODAsMHgwOCwweGU4LDB4MDIsMHgwYSB9fSwKKyB7MTYsIDB4ZTVhMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAxLDB4YjMsMHgwMCwweDJjLDB4NDAgfX0sCisgezE2LCAweGU1YjAsIDAsIHsweDA4LDB4YjgsMHg0MiwweDZjLDB4MDIsMHg4MywweDAwLDB4MmMsMHhlMCwweDBiLDB4MzgsMHgwMCwweGNmLDB4NDAsMHhiMywweDAwIH19LAorIHsxNiwgMHhlNWMwLCAwLCB7MHgyYywweGMwLDB4MDgsMHhiNCwweDBhLDB4MGMsMHgwMCwweGIzLDB4NDAsMHhhMiwweDgyLDB4MGEsMHgzOSwweDAyLDB4Y2MsMHgwMCB9fSwKKyB7MTYsIDB4ZTVkMCwgMCwgezB4OTMsMHg4MCwweGEwLDB4YzAsMHgyOSwweDIwLDB4MDIsMHgwYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU1ZTAsIDAsIHsweGEwLDB4MDEsMHgxZCwweDAwLDB4YjcsMHgwMCwweDJkLDB4NjQsMHgyOCwweDc0LDB4MDIsMHg0MCwweDAwLDB4ODcsMHgwNSwweDJkIH19LAorIHsxNiwgMHhlNWYwLCAwLCB7MHg5MCwweDBiLDB4NzQsMHgwMiwweGRjLDB4MTAsMHhiNywweDMwLDB4MmQsMHhjOCwweDA4LDB4MzQsMHgwNiwweDFjLDB4ODAsMHhiNyB9fSwKKyB7MTYsIDB4ZTYwMCwgMCwgezB4MDAsMHhhMSwweGMwLDB4MGEsMHg3MCwweDAyLDB4ZGUsMHg4MCwweDgzLDB4MDAsMHgwMSwweDAwLDB4MDksMHg2MCwweDgyLDB4MjAgfX0sCisgezE2LCAweGU2MTAsIDAsIHsweDA0LDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWEsMHgwMCwweGY3LDB4ODAsMHgzZCwweDYwIH19LAorIHsxNiwgMHhlNjIwLCAwLCB7MHgwZSwweGQ4LDB4MGIsMHg1ZSwweDAwLDB4YzcsMHg4MCwweDNkLDB4ZTAsMHgwZiwweDY4LDB4MDMsMHhkZSwweDEwLDB4ZjcsMHhhOSB9fSwKKyB7MTYsIDB4ZTYzMCwgMCwgezB4N2YsMHhlOCwweDQ4LDB4NzgsMHgwMywweDFmLDB4MzAsMHhmZiwweDk0LDB4MzMsMHhhMCwweDBlLDB4NzgsMHgwMywweGNmLDB4MjQgfX0sCisgezE2LCAweGU2NDAsIDAsIHsweGQ2LDB4ODAsMHhiMSwweGUwLDB4MGQsMHhmOCwweDQzLDB4MjIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNjUwLCAwLCB7MHgwOCwweDFkLDB4YWMsMHgwMCwweGJiLDB4MDAsMHgwYywweDQwLDB4MGYsMHhiMCwweDAzLDB4ZWMsMHgwOCwweGY5LDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4ZTY2MCwgMCwgezB4MDAsMHgwZiwweDkwLDB4NDEsMHhlYywweDAwLDB4ZmIsMHg2MSwweDdlLDB4ZDAsMHgwZiwweGIwLDB4MDMsMHhlYywweDgwLDB4ZmIgfX0sCisgezE2LCAweGU2NzAsIDAsIHsweDQwLDB4M2YsMHg5YiwweDBjLDB4YjAsMHgwMywweGVkLDB4OTAsMHhmYSwweDAwLDB4M2MsMHgwMCwweDBlLDB4YjAsMHgwMywweGMyIH19LAorIHsxNiwgMHhlNjgwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGRlLDB4MDAsMHhlZiwweDgwLDB4MzMsMHg2MCB9fSwKKyB7MTYsIDB4ZTY5MCwgMCwgezB4MGQsMHhkOCwweDAzLDB4MzYsMHg0MCwweGVmLDB4OTAsMHgzZSwweGUwLDB4MGYsMHhmOSwweDAzLDB4ZmUsMHgwMCwweGZmLDB4ODAgfX0sCisgezE2LCAweGU2YTAsIDAsIHsweDMzLDB4ZmUsMHgwYywweGZhLDB4MDMsMHhmZSwweDAwLDB4Y2YsMHg4MCwweGIzLDB4ZTAsMHgwZiwweGY4LDB4MDMsMHhmZSwweDAwIH19LAorIHsxNiwgMHhlNmIwLCAwLCB7MHhjZCwweDgwLDB4MzMsMHhlMCwweDBmLDB4YzgsMHg0MywweGMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTZjMCwgMCwgezB4YTgsMHgxMSwweDljLDB4MDAsMHg4NSwweDA4LDB4MzUsMHg0MCwweDA4LDB4NzAsMHgwMywweDUyLDB4MjAsMHg4NywweDExLDB4MmMgfX0sCisgezE2LCAweGU2ZDAsIDAsIHsweGVjLDB4MGIsMHg3MSwweDAyLDB4ZDAsMHgwMCwweGU3LDB4MDAsMHgzNSwweGM0LDB4MDgsMHg3NCwweDAyLDB4ZGMsMHg0MCwweDg3IH19LAorIHsxNiwgMHhlNmUwLCAwLCB7MHgxMCwweDIxLDB4YzAsMHgwYiwweDcwLDB4MDIsMHhmYywweDgwLDB4ODUsMHgwOCwweDIxLDB4MDAsMHgwYiwweDQxLDB4ODIsMHhlYSB9fSwKKyB7MTYsIDB4ZTZmMCwgMCwgezB4MDYsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDAwLDB4YWYsMHgwMCwweDIzLDB4NTAgfX0sCisgezE2LCAweGU3MDAsIDAsIHsweDA5LDB4NTAsMHgwMiwweDFjLDB4ODAsMHhhNywweDAxLDB4MjksMHhjMCwweDFiLDB4NjAsMHgwNiwweGRjLDB4NDAsMHhiNywweDEwIH19LAorIHsxNiwgMHhlNzEwLCAwLCB7MHgyMSwweGM4LDB4NGEsMHg1MiwweDAyLDB4ZGMsMHgwMCwweDgzLDB4MDAsMHgyMSwweGMwLDB4MGIsMHg3MCwweDAyLDB4ZGMsMHgxMyB9fSwKKyB7MTYsIDB4ZTcyMCwgMCwgezB4ODQsMHgwMCwweDI1LDB4YzAsMHgwYiwweDU4LDB4MDIsMHhjMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU3MzAsIDAsIHsweDIwLDB4MTQsMHhjYywweDAwLDB4ODEsMHg4MCwweDI0LDB4NDAsMHgwOCwweDNlLDB4MDIsMHg2ZSwweDAwLDB4ODksMHgwMCwweDJjIH19LAorIHsxNiwgMHhlNzQwLCAwLCB7MHhjMCwweDBiLDB4YjQsMHgwMiwweGNhLDB4ODAsMHhhMywweDAwLDB4MjQsMHhjMCwweDBhLDB4MDQsMHgwMiwweGVjLDB4NDAsMHg4MiB9fSwKKyB7MTYsIDB4ZTc1MCwgMCwgezB4MGEsMHgyMCwweGMwLDB4MGIsMHgzMCwweDAyLDB4Y2QsMHgxMCwweDgwLDB4YzAsMHhhNCwweDAwLDB4MGIsMHgxYywweDAyLDB4YzggfX0sCisgezE2LCAweGU3NjAsIDAsIHsweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4ODQsMHgwMCwweGViLDB4ODAsMHgzMywweDQwIH19LAorIHsxNiwgMHhlNzcwLCAwLCB7MHgwZCwweDhjLDB4ODMsMHgyNiwweDAwLDB4ZTksMHhhMCwweDNlLDB4NzgsMHg4ZiwweDkwLDB4ODMsMHhlMSwweDAwLDB4ZmYsMHgwMCB9fSwKKyB7MTYsIDB4ZTc4MCwgMCwgezB4MzEsMHhkMSwweDBlLDB4ODQsMHgyMywweGZjLDB4MDAsMHhjYiwweDgyLDB4MzIsMHhjMCwweDhmLDB4YjAsMHgwMiwweGZkLDB4NDAgfX0sCisgezE2LCAweGU3OTAsIDAsIHsweGNiLDB4ODAsMHhiNiwweGMwLDB4MGYsMHhhNCwweDAzLDB4ZWEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlN2EwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGZiLDB4MDAsMHgzZSwweDQwLDB4MGYsMHhhMCwweDAzLDB4ZTAsMHgwMCwweGY5LDB4MDEsMHgzZSB9fSwKKyB7MTYsIDB4ZTdiMCwgMCwgezB4NDIsMHgwZiwweDkwLDB4MDMsMHhlNSwweDU0LDB4ZTMsMHgwMCwweDNlLDB4YzgsMHgwNSwweDkzLDB4MDMsMHhlYywweDgwLDB4ZmIgfX0sCisgezE2LCAweGU3YzAsIDAsIHsweGMxLDB4M2UsMHhjMCwweDBmLDB4MjAsMHgwMywweGNjLDB4NDgsMHhmMywweDA4LDB4M2EsMHgwMCwweDBmLDB4YTAsMHg0MywweGUwIH19LAorIHsxNiwgMHhlN2QwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGYwLDB4MDAsMHhjZiwweDAwLDB4M2YsMHg0MCB9fSwKKyB7MTYsIDB4ZTdlMCwgMCwgezB4MGYsMHgzMCwweDAxLDB4MmMsMHgwYSwweGNkLDB4MTAsMHgzMywweDAwLDB4MGYsMHhkMCwweDgzLDB4MTQsMHgwMCwweGNiLDB4MDIgfX0sCisgezE2LCAweGU3ZjAsIDAsIHsweDMzLDB4YzAsMHgwYywweGUxLDB4MDMsMHhlYywweDEwLDB4Y2QsMHgwMCwweDMzLDB4YzAsMHgwYywweGYwLDB4MzMsMHgzYywweDAwIH19LAorIHsxNiwgMHhlODAwLCAwLCB7MHhlYSwweDAwLDB4MzMsMHhjMCwweDBjLDB4ZjAsMHg4MywweGM4LDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTgxMCwgMCwgezB4ODEsMHgwNCwweDZlLDB4MDAsMHg4YiwweDAwLDB4MmUsMHg0MCwweDBiLDB4YmMsMHgwMiwweDJlLDB4MDAsMHgwYiwweDAwLDB4MjIgfX0sCisgezE2LCAweGU4MjAsIDAsIHsweDMwLDB4MGIsMHg5YywweDAyLDB4MjcsMHg4MCwweGFiLDB4MDAsMHgyYSwweGMwLDB4MDgsMHhiOCwweDAyLDB4ZWMsMHgwMCwweDg5IH19LAorIHsxNiwgMHhlODMwLCAwLCB7MHhjMCwweDIwLDB4ZTAsMHgwOCwweGFlLDB4MDIsMHgyYywweDA4LDB4OGEsMHgwMCwweDIyLDB4MDAsMHgwOCwweGIwLDB4NDIsMHhlOCB9fSwKKyB7MTYsIDB4ZTg0MCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyZSwweDAwLDB4OGIsMHgwNCwweDJlLDB4NDAgfX0sCisgezE2LCAweGU4NTAsIDAsIHsweDhiLDB4OGMsMHgwMiwweGFlLDB4MTAsMHg4OSwweDAwLDB4MjIsMHg3MCwweDBiLDB4OGMsMHgwMiwweGEyLDB4MDAsMHg4YiwweDAxIH19LAorIHsxNiwgMHhlODYwLCAwLCB7MHgyMiwweGMwLDB4MDgsMHg4MCwweDAyLDB4ZWMsMHgxMCwweDgyLDB4ODgsMHhhMiwweDcwLDB4MDksMHhiOCwweDAyLDB4MmMsMHgwOCB9fSwKKyB7MTYsIDB4ZTg3MCwgMCwgezB4ODksMHgwMCwweDIwLDB4YzAsMHgyOCwweDgwLDB4MjIsMHhlMCwweDEwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU4ODAsIDAsIHsweDA4LDB4MDQsMHgwYywweDA0LDB4ODEsMHgwMCwweDJjLDB4NDAsMHgwYiwweDIwLDB4MDIsMHg4MCwweDAwLDB4ODEsMHgwNCwweGEwIH19LAorIHsxNiwgMHhlODkwLCAwLCB7MHg1MCwweDRiLDB4MDAsMHgwYSwweDgwLDB4MDAsMHhhMywweDAxLDB4MmEsMHhjMSwweDIwLDB4MTAsMHgwMiwweGNjLDB4MTQsMHg4MyB9fSwKKyB7MTYsIDB4ZThhMCwgMCwgezB4MDAsMHgyMiwweGMwLDB4MDgsMHgyMCwweDAyLDB4MGMsMHgwMCwweDgxLDB4MDAsMHhlMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4YzIgfX0sCisgezE2LCAweGU4YjAsIDAsIHsweDA1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NjgsMHgwMCwweGNiLDB4MDAsMHgzZSwweDQwIH19LAorIHsxNiwgMHhlOGMwLCAwLCB7MHgwZiwweDkwLDB4MGIsMHhhYywweDgwLDB4YzksMHgwMCwweDMyLDB4MTAsMHgwZiwweDgwLDB4MDMsMHhhNCwweDAwLDB4Y2YsMHgwMiB9fSwKKyB7MTYsIDB4ZThkMCwgMCwgezB4MzEsMHhjMCwweDBjLDB4ODAsMHgxMywweGZjLDB4MDIsMHhjZCwweDAwLDB4MzMsMHhjMCwweDJjLDB4OTAsMHgwMywweDNjLDB4MDIgfX0sCisgezE2LCAweGU4ZTAsIDAsIHsweGU4LDB4MDAsMHhiMiwweGMwLDB4MGMsMHg5MCwweDAzLDB4YzAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOGYwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgwMiwweGY1LDB4MDAsMHgzZCwweDQwLDB4OGYsMHhmMCwweDIzLDB4NmQsMHgwMCwweGZmLDB4MDAsMHgzZiB9fSwKKyB7MTYsIDB4ZTkwMCwgMCwgezB4MDQsMHgwZiwweGMwLDB4MDMsMHg3MCwweDFjLDB4ZmYsMHgwMSwweDNmLDB4YzAsMHg0ZiwweGMwLDB4MDMsMHhmYywweDAwLDB4ZmQgfX0sCisgezE2LCAweGU5MTAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDBmLDB4ZTAsMHgwZiwweGZjLDB4MTgsMHhmYywweDAwLDB4M2YsMHgwMCwweDBmLDB4ZDAsMHgwMywweGU4IH19LAorIHsxNiwgMHhlOTIwLCAwLCB7MHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZlLDB4MDAsMHhkNywweDAyLDB4MGYsMHgzMCB9fSwKKyB7MTYsIDB4ZTkzMCwgMCwgezB4MGMsMHhmMiwweDAxLDB4N2UsMHgwNiwweDQ0LDB4MzAsMHgzZiwweDIwLDB4MGUsMHhmMCwweDAyLDB4N2MsMHg4NCwweGZkLDB4MjAgfX0sCisgezE2LCAweGU5NDAsIDAsIHsweDI3LDB4MDgsMHgwYywweGQwLDB4MDEsMHgzNiwweDAwLDB4ZmYsMHg2MCwweDMzLDB4Y2MsMHgwYiwweGYxLDB4MTMsMHgyYywweGM0IH19LAorIHsxNiwgMHhlOTUwLCAwLCB7MHhmZiwweDMwLDB4MGYsMHhjZCwweDBjLDB4ZjQsMHgwMywweGYwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTk2MCwgMCwgezB4ODAsMHgxMCwweGVlLDB4MDAsMHg4ZiwweGMwLDB4MmUsMHgwMCwweDA4LDB4ZmMsMHgwMiwweDJlLDB4MDAsMHg4YSwweDMwLDB4MjggfX0sCisgezE2LCAweGU5NzAsIDAsIHsweDUyLDB4MDgsMHhmNiwweDgyLDB4M2MsMHg2OCwweGJkLDB4OTAsMHgzMiwweDM0LDB4NDgsMHg5YywweDEyLDB4MjYsMHgwMCwweGNmIH19LAorIHsxNiwgMHhlOTgwLCAwLCB7MHg0MCwweDIzLDB4Y2MsMHgwYiwweGY2LDB4MDIsMHgzZCwweDAwLDB4YmYsMHgxMCwweDJmLDB4Y2MsMHg4OCwweGY2LDB4MDIsMHhlMCB9fSwKKyB7MTYsIDB4ZTk5MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDAwLDB4OTMsMHgxMCwweDJjLDB4MDggfX0sCisgezE2LCAweGU5YTAsIDAsIHsweDA5LDB4MzEsMHgwMiwweDRjLDB4MDAsMHg5YiwweDIwLDB4NjQsMHg1OCwweDAzLDB4MzEsMHg2MiwweDRjLDB4ODEsMHhhMSwweDAwIH19LAorIHsxNiwgMHhlOWIwLCAwLCB7MHgyMCwweDAwLDB4NDgsMHgxNCwweDAyLDB4NDQsMHgwMCwweDkzLDB4MzAsMHgyNCwweGMwLDB4MGIsMHgzMywweDAyLDB4OGQsMHg4NCB9fSwKKyB7MTYsIDB4ZTljMCwgMCwgezB4YjMsMHgyMCwweDZjLDB4YzAsMHgyYSwweDM2LDB4MDIsMHhlMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU5ZDAsIDAsIHsweGMwLDB4MTUsMHhhYywweDEwLDB4OWIsMHgwMiwweDJlLDB4NDEsMHgwYiwweGIwLDB4MDIsMHhhNCwweDAwLDB4OWEsMHgwMCwweDRhIH19LAorIHsxNiwgMHhlOWUwLCAwLCB7MHg2MCwweDg4LDB4YjAsMHg1MiwweDZjLDB4MDEsMHhiOSwweDAwLDB4MjYsMHgwMCwweDA4LDB4OTEsMHgyMiwweGVjLDB4MDgsMHhiYiB9fSwKKyB7MTYsIDB4ZTlmMCwgMCwgezB4MDAsMHgyNiwweGMwLDB4MGIsMHhiMCwweDAyLDB4YWMsMHgwMCwweGJiLDB4MDUsMHg2ZSwweGMxLDB4MGEsMHhiMCwweDAyLDB4ZjAgfX0sCisgezE2LCAweGVhMDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWMsMHgwMCwweGRiLDB4MDEsMHgzZSwweDMwIH19LAorIHsxNiwgMHhlYTEwLCAwLCB7MHgyZCwweDMwLDB4MDMsMHg0NywweDYwLDB4ZDgsMHhhMCwweDE2LDB4MzgsMHg4ZiwweGIwLDB4MDMsMHg2YywweDAwLDB4NzksMHgwMiB9fSwKKyB7MTYsIDB4ZWEyMCwgMCwgezB4MzEsMHg2MCwweDBjLDB4YzgsMHgwYSwweDY2LDB4MDAsMHhiYiwweDAwLDB4YjYsMHhjMCwweDBmLDB4YjAsMHgwYiwweGFjLDB4MDAgfX0sCisgezE2LCAweGVhMzAsIDAsIHsweGZiLDB4MDEsMHgzZSwweGMxLDB4MGUsMHhiMCwweDAzLDB4ZDAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYTQwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgxMCwweGVmLDB4MDgsMHgzZiwweDI0LDB4MGMsMHhmMCwweDAzLDB4NzYsMHgyMCwweGVlLDB4OTAsMHgzNSB9fSwKKyB7MTYsIDB4ZWE1MCwgMCwgezB4NDAsMHgwZSwweDcwLDB4MDMsMHhhYywweDAwLDB4ZmQsMHgwMCwweGJiLDB4NjQsMHgwZiwweDg4LDB4MTMsMHgzNCwweDgwLDB4Y2IgfX0sCisgezE2LCAweGVhNjAsIDAsIHsweDAwLDB4M2IsMHhjMCwweDBmLDB4YjAsMHgwMywweDZjLDB4MDgsMHhmZiwweDAwLDB4M2UsMHhjMCwweDBkLDB4ZjAsMHgwMywweGY4IH19LAorIHsxNiwgMHhlYTcwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDEsMHhmYiwweDgwLDB4MzIsMHgxMCB9fSwKKyB7MTYsIDB4ZWE4MCwgMCwgezB4MGUsMHhiMCwweDAzLDB4ZWQsMHgwMCwweGNiLDB4NTAsMHgzZSwweDQwLDB4OGMsMHhiMCwweDQzLDB4MmMsMHgxMCwweGY5LDB4MDAgfX0sCisgezE2LCAweGVhOTAsIDAsIHsweDMyLDB4NjAsMHgwYywweDQwLDB4MGIsMHgyNiwweDAwLDB4YzMsMHgwNCwweDM2LDB4YzAsMHgwYywweDMwLDB4MDMsMHgyYywweDAwIH19LAorIHsxNiwgMHhlYWEwLCAwLCB7MHg5YiwweDAwLDB4YjAsMHhjMCwweDBjLDB4YjAsMHgwMywweGQwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWFiMCwgMCwgezB4YzgsMHgwNSwweDBlLDB4ODAsMHhiZiwweDA0LDB4MmEsMHg0MCwweDAwLDB4ZjUsMHgwMCwweGU2LDB4MDAsMHg4MiwweGQyLDB4MjIgfX0sCisgezE2LCAweGVhYzAsIDAsIHsweDQwLDB4MGQsMHhmMCwweDIyLDB4M2MsMHgwMCwweDk1LDB4MDIsMHgzNiwweDQwLDB4MGEsMHg4MCwweDAyLDB4MmUsMHgwMCwweDhmIH19LAorIHsxNiwgMHhlYWQwLCAwLCB7MHgwMCwweDM3LDB4YzAsMHgwYSwweGYwLDB4NDIsMHgzYywweDAwLDB4OGYsMHgwMCwweDIzLDB4YzAsMHgyOCwweGYwLDB4MDIsMHhmMiB9fSwKKyB7MTYsIDB4ZWFlMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0ZSwweDAwLDB4YjMsMHgwMCwweDIyLDB4MjAgfX0sCisgezE2LCAweGVhZjAsIDAsIHsweDRhLDB4MzAsMHgwMCwweGNjLDB4MDAsMHg4MSwweGMwLDB4MjgsMHgwMCwweDA4LDB4MzAsMHgwMiwweDBjLDB4MTAsMHhhMSwweDAwIH19LAorIHsxNiwgMHhlYjAwLCAwLCB7MHgyOCwweDgwLDB4MTgsMHgzMCwweDIyLDB4MDQsMHgwNCwweDgzLDB4MDAsMHgyNCwweGMwLDB4MDgsMHgzMCwweDAyLDB4Y2MsMHgwOCB9fSwKKyB7MTYsIDB4ZWIxMCwgMCwgezB4OTMsMHgwMCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MDYsMHhmOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGViMjAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDAwLDB4YjcsMHg4MCwweDI5LDB4YTAsMHgwOCwweDc4LDB4MDIsMHhmZSwweDIwLDB4OGQsMHg4MCwweDI5IH19LAorIHsxNiwgMHhlYjMwLCAwLCB7MHhlNSwweDViLDB4MzgsMHg0MiwweDFlLDB4NDAsMHhhMSwweDgxLDB4MjUsMHhhOCwweDA4LDB4NzksMHgwMiwweDM3LDB4MDAsMHg4NyB9fSwKKyB7MTYsIDB4ZWI0MCwgMCwgezB4ODAsMHgyNSwweGUwLDB4MGEsMHg3OCwweDBhLDB4ZGUsMHg4MSwweDg3LDB4ODAsMHgyNSwweGU1LDB4NDgsMHg3OCwweDAyLDB4YzggfX0sCisgezE2LCAweGViNTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweGIzLDB4MTAsMHgzMCwweDEyIH19LAorIHsxNiwgMHhlYjYwLCAwLCB7MHgwZSwweDMwLDB4MTIsMHhjYywweGMwLDB4YzMsMHgwMCwweDM4LDB4ODAsMHgwYywweDMxLDB4MDYsMHgwYywweDQwLDB4ZjEsMHgwMCB9fSwKKyB7MTYsIDB4ZWI3MCwgMCwgezB4MzgsMHg4MCwweDBjLDB4MzAsMHg0MywweDA0LDB4NDIsMHhjMywweDAwLDB4MzYsMHhjMCwweDBjLDB4MzIsMHgwMywweGNlLDB4YzAgfX0sCisgezE2LCAweGViODAsIDAsIHsweGRiLDB4MDAsMHgzMCwweGMwLDB4MGMsMHgzMCwweDAzLDB4ZDIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYjkwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwMCwweGZmLDB4MTAsMHgzZCwweDg0LDB4NGYsMHhmMSwweDAzLDB4ZDAsMHg0MCwweGZjLDB4MTAsMHgzMyB9fSwKKyB7MTYsIDB4ZWJhMCwgMCwgezB4ODAsMHg1ZCwweGIxLDB4ODMsMHhmYywweDUwLDB4ZGQsMHgwYSwweDI1LDB4ODksMHgwZiwweGI4LDB4MDMsMHhkNCwweDAwLDB4ZmYgfX0sCisgezE2LCAweGViYjAsIDAsIHsweDEwLDB4M2YsMHhjMCwweDBmLDB4ZjQsMHgwMywweDNjLDB4NDAsMHhmZiwweDAwLDB4M2IsMHhjMCwweDBmLDB4ZjAsMHgwMywweGQwIH19LAorIHsxNiwgMHhlYmMwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVjLDB4MDAsMHhmYiwweDIwLDB4M2UsMHgwMCB9fSwKKyB7MTYsIDB4ZWJkMCwgMCwgezB4MGYsMHhiNSwweDAzLDB4MjksMHgyMCwweGY5LDB4MDAsMHgzMiwweGEwLDB4MGMsMHhiMCwweDgzLDB4ZWMsMHgwMCwweDQ5LDB4YzggfX0sCisgezE2LCAweGViZTAsIDAsIHsweGIyLDB4YzAsMHg4YywweGEwLDB4MDMsMHg2NCwweDAwLDB4ZmIsMHgwOCwweDEyLDB4ZWEsMHgwYywweGIwLDB4MGIsMHgyYywweDgwIH19LAorIHsxNiwgMHhlYmYwLCAwLCB7MHhmYiwweDIwLDB4MmUsMHhkMiwweDZjLDB4YjYsMHg0MywweGVhLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWMwMCwgMCwgezB4NDgsMHgxMSwweDljLDB4MDAsMHhiNywweDQ5LDB4MmQsMHgwMCwweDBiLDB4MzAsMHg4MiwweDEwLDB4MDEsMHhiNSwweDAyLDB4ODMgfX0sCisgezE2LCAweGVjMTAsIDAsIHsweGMwLDB4MWEsMHg3MiwweDIyLDB4ZGQsMHg0MSwweDg1LDB4MDAsMHg2MSwweGMwLDB4MTgsMHgyMCwweDIwLDB4MTQsMHgwMCwweGJmIH19LAorIHsxNiwgMHhlYzIwLCAwLCB7MHg0MCwweDM1LDB4ZDAsMHgwZCwweDM0LDB4MDIsMHgxZCwweDIwLDB4YjcsMHgyOCwweDI1LDB4YzEsMHgwOCwweDc0LDB4ODIsMHhkMiB9fSwKKyB7MTYsIDB4ZWMzMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDA0LDB4MzcsMHhhMCwweDJkLDB4MjAgfX0sCisgezE2LCAweGVjNDAsIDAsIHsweDBiLDB4N2EsMHgxMiwweDE2LDB4MDEsMHhiMywweDgwLDB4MjEsMHhlMiwweDA4LDB4NzgsMHg0MiwweDllLDB4MDAsMHg4NSwweDgwIH19LAorIHsxNiwgMHhlYzUwLCAwLCB7MHgyMCwweGUxLDB4MTgsMHg2OCwweDAyLDB4NTYsMHgwMCwweGI3LDB4YTAsMHgyNSwweGUwLDB4MDgsMHg3YSwweDAyLDB4MWUsMHgwMCB9fSwKKyB7MTYsIDB4ZWM2MCwgMCwgezB4YjcsMHg5MCwweDJjLDB4ZTUsMHg4OCwweDdhLDB4MDIsMHhmMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVjNzAsIDAsIHsweDQ4LDB4MTQsMHhjYywweDAwLDB4YjMsMHgwMCwweDZjLDB4MjQsMHgxYiwweDMwLDB4MDIsMHgwMCwweDAwLDB4YjAsMHgwMCwweDIwIH19LAorIHsxNiwgMHhlYzgwLCAwLCB7MHhmOCwweDBhLDB4MzAsMHgwMiwweGNjLDB4MDAsMHg4MSwweDAwLDB4MjAsMHhkOCwweDE4LDB4MjAsMHgwMiwweDA0LDB4MDAsMHhiMyB9fSwKKyB7MTYsIDB4ZWM5MCwgMCwgezB4MDAsMHgyNCwweGMwLDB4MDksMHgzMCwweDAyLDB4MGMsMHgwMCwweGIzLDB4MDAsMHgyNiwweGMwLDB4MDgsMHgzMCwweDAyLDB4ZDIgfX0sCisgezE2LCAweGVjYTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweGZhLDB4MDAsMHgzZCwweDgwIH19LAorIHsxNiwgMHhlY2IwLCAwLCB7MHgwZiwweDIwLDB4MGIsMHgyOCwweDgwLDB4ZmUsMHgwMCwweDMzLDB4YTAsMHgwYywweGEwLDB4MDMsMHhlOCwweDAyLDB4Y2EsMHgwMiB9fSwKKyB7MTYsIDB4ZWNjMCwgMCwgezB4MzIsMHg5MCwweDJjLDB4ZTQsMHgwMywweDc4LDB4MDAsMHhmYSwweDAwLDB4MzIsMHg4MCwweDBjLDB4YTAsMHgwMywweDI4LDB4MDAgfX0sCisgezE2LCAweGVjZDAsIDAsIHsweGZhLDB4MDAsMHgzZSwweDgwLDB4MGMsMHhhMCwweDAzLDB4ZmEsMHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlY2UwLCAwLCB7MHg0OCwweDAwLDB4ZTEsMHgwMCwweGYwLDB4MDAsMHgzZSwweDAwLDB4NGYsMHg4MCwweDAzLDB4ZTAsMHg4MCwweGY4LDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4ZWNmMCwgMCwgezB4MDAsMHgwZiwweDgwLDB4MjMsMHhjMCwweDAwLDB4ZjgsMHgwMiwweDNjLDB4MDAsMHgwZiwweGMwLDB4ODMsMHg2MCwweDAwLDB4YjggfX0sCisgezE2LCAweGVkMDAsIDAsIHsweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgyMywweGUwLDB4MTgsMHhmOCwweDAxLDB4MzYsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyIH19LAorIHsxNiwgMHhlZDEwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU2LDB4MDAsMHhmOSwweDIxLDB4MzIsMHg2MCB9fSwKKyB7MTYsIDB4ZWQyMCwgMCwgezB4MGMsMHg5MCwweDAzLDB4MmMsMHg0NCwweGY5LDB4MDAsMHhiMiwweDQwLDB4MGYsMHg5MCwweDFiLDB4MjQsMHgwMCwweGU5LDB4MDAgfX0sCisgezE2LCAweGVkMzAsIDAsIHsweDNlLDB4NDAsMHgwYywweDEwLDB4MDMsMHhhNCwweDAwLDB4ZjksMHgwMCwweDMyLDB4NDAsMHgwZiwweDEwLDB4MzMsMHgyNCwweDEwIH19LAorIHsxNiwgMHhlZDQwLCAwLCB7MHhmMSwweDAwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweDAyLDB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWQ1MCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHhiOSwweDQwLDB4YTIsMHg0MSwweDA4LDB4OTAsMHgwMiwweDI0LDB4ODAsMHhlOSwweDAwLDB4MjIgfX0sCisgezE2LCAweGVkNjAsIDAsIHsweDQwLDB4MGIsMHg5MCwweDEyLDB4MjQsMHgwMCwweDg5LDB4MDAsMHg2ZSwweDQxLDB4MTgsMHg5MCwweDQyLDB4MjQsMHgwMCwweGI5IH19LAorIHsxNiwgMHhlZDcwLCAwLCB7MHgwNCwweDJhLDB4NDEsMHgwYiwweDkwLDB4MDMsMHg2NCwweDAwLDB4ZjksMHgwMCwweDJhLDB4NDAsMHgwYSwweDkwLDB4MGEsMHgyMCB9fSwKKyB7MTYsIDB4ZWQ4MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHgyNCwweDgwLDB4YjksMHg0MiwweDYyLDB4NDggfX0sCisgezE2LCAweGVkOTAsIDAsIHsweDI4LDB4OTAsMHgwYSwweDI0LDB4MDAsMHhiMSwweDAwLDB4MjIsMHg0MCwweDBiLDB4MTAsMHgwMiwweDI0LDB4MTAsMHhiOSwweDAyIH19LAorIHsxNiwgMHhlZGEwLCAwLCB7MHgyZSwweDQwLDB4MDgsMHhkMCwweDAyLDB4YTQsMHgwMCwweGIxLDB4MDAsMHgyMiwweDQwLDB4MGIsMHg5MCwweDAyLDB4MjQsMHgwNCB9fSwKKyB7MTYsIDB4ZWRiMCwgMCwgezB4YjksMHgwMCwweDIyLDB4NDAsMHgwOCwweDEwLDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVkYzAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAwLDB4YjEsMHgyMCwweDYwLDB4NDAsMHgwOCwweDEyLDB4MDIsMHgwNCwweDAwLDB4YTEsMHgyMCwweDIwIH19LAorIHsxNiwgMHhlZGQwLCAwLCB7MHg0MCwweDBiLDB4MTIsMHgwMiwweDA0LDB4ODAsMHg5MSwweDIwLDB4MmQsMHg2OCwweDA4LDB4NTIsMHgxMiwweDA0LDB4MDAsMHhiMSB9fSwKKyB7MTYsIDB4ZWRlMCwgMCwgezB4MjgsMHgyOCwweDRhLDB4MDksMHgxMiwweDgyLDB4NDQsMHhhMCwweGIxLDB4MmMsMHgyOCwweDRhLDB4MGEsMHgxMiwweDgyLDB4MDIgfX0sCisgezE2LCAweGVkZjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGY4LDB4MDAsMHgzMiwweDE0IH19LAorIHsxNiwgMHhlZTAwLCAwLCB7MHgwYywweDgwLDB4MDMsMHgyMCwweDAwLDB4ZjgsMHg1MCwweDMyLDB4MTQsMHgwZiwweDg1LDB4MDMsMHgwMSwweDQwLDB4ZjgsMHgwMCB9fSwKKyB7MTYsIDB4ZWUxMCwgMCwgezB4MmUsMHgwMCwweDI4LDB4YzAsMHgwMywweGEwLDB4MDAsMHhmOCwweDI0LDB4MzAsMHgwOCwweDBmLDB4ODIsMHgyMywweDIwLDB4ODAgfX0sCisgezE2LCAweGVlMjAsIDAsIHsweGY4LDB4MjAsMHgzMiwweDA4LDB4MGMsMHg4MiwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZTMwLCAwLCB7MHg5OCwweDFkLDB4ZTQsMHgwOCwweGY5LDB4MTAsMHgzZiwweDQwLDB4OGYsMHg5MSwweDEzLDB4ZTQsMHgwMCwweGVkLDB4MTAsMHgzZiB9fSwKKyB7MTYsIDB4ZWU0MCwgMCwgezB4NTAsMHgwZiwweDkxLDB4MDMsMHhlNCwweDQwLDB4YTUsMHgxMCwweDNlLDB4NDQsMHgwZiwweDkxLDB4MDMsMHhmNCwweDA0LDB4ZjkgfX0sCisgezE2LCAweGVlNTAsIDAsIHsweDI4LDB4M2UsMHg0YiwweDBiLDB4OTIsMHhhMywweGU0LDB4YTAsMHhlOSwweDI4LDB4M2UsMHg0YSwweDBmLDB4OTIsMHg4MywweGU2IH19LAorIHsxNiwgMHhlZTYwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGY0LDB4MDAsMHhjZCwweDAwLDB4MzMsMHg0MCB9fSwKKyB7MTYsIDB4ZWU3MCwgMCwgezB4ODAsMHhkMCwweDAxLDB4ZjQsMHgwMCwweGE1LDB4MDAsMHgyNiwweDQwLDB4MGYsMHg5MCwweDAzLDB4MjYsMHgwMCwweGYxLDB4ODggfX0sCisgezE2LCAweGVlODAsIDAsIHsweDNlLDB4NjgsMHgwZCwweDk4LDB4ODMsMHg0NCwweDAwLDB4YzksMHhjMCwweDNhLDB4NDAsMHgwYywweDk4LDB4MDMsMHgyNCwweDA4IH19LAorIHsxNiwgMHhlZTkwLCAwLCB7MHhmOSwweGEwLDB4MzIsMHg3OCwweDBmLDB4OWEsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWVhMCwgMCwgezB4MzgsMHgxMCwweGUwLDB4MDIsMHg4OCwweDAwLDB4YTIsMHgwMCwweDA4LDB4ODAsMHgwMiwweGUwLDB4MDAsMHgwYSwweDAwLDB4MjIgfX0sCisgezE2LCAweGVlYjAsIDAsIHsweDAwLDB4MGIsMHg4MCwweDAyLDB4MjAsMHgwMCwweGI4LDB4NDAsMHgyZSwweDE0LDB4MDgsMHg4MCwweDQzLDB4MzAsMHgwMCwweDg4IH19LAorIHsxNiwgMHhlZWMwLCAwLCB7MHhhMCwweDIyLDB4MmEsMHgwYSwweDhhLDB4NDIsMHhhMCwweDA1LDB4YjgsMHg0MiwweDMyLDB4MzgsMHgwYiwweDgwLDB4MDIsMHgwZSB9fSwKKyB7MTYsIDB4ZWVkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAzLDB4OTEsMHgwMCwweDI0LDB4NDAgfX0sCisgezE2LCAweGVlZTAsIDAsIHsweDBiLDB4MTAsMHgwMiwweGM0LDB4MTEsMHhiMSwweDA0LDB4MjAsMHg0MSwweDFiLDB4MTAsMHgyMiwweDQ1LDB4MDAsMHhiNSwweDAwIH19LAorIHsxNiwgMHhlZWYwLCAwLCB7MHgyNSwweDQwLDB4MDksMHg1MCwweDAyLDB4NTQsMHgwMSwweDgxLDB4NDAsMHgyYywweDQwLDB4MDksMHgxNCwweDkyLDB4NDQsMHgwMCB9fSwKKyB7MTYsIDB4ZWYwMCwgMCwgezB4YjEsMHg0MCwweDI0LDB4NGMsMHgwYiwweDE0LDB4MGEsMHg0MiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVmMTAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAwLDB4OTksMHgwMCwweDI0LDB4NDIsMHgwYiwweDkwLDB4MDIsMHhlNCwweDAxLDB4OTksMHgyMCwweDI2IH19LAorIHsxNiwgMHhlZjIwLCAwLCB7MHg0MCwweGNiLDB4OTAsMHgwMiwweDY0LDB4MDAsMHhiYiwweDAwLDB4MmYsMHg0MSwweDBhLDB4ZDAsMHgwMiwweDM0LDB4MDAsMHg4OSB9fSwKKyB7MTYsIDB4ZWYzMCwgMCwgezB4MDAsMHgyNiwweDQwLDB4MGIsMHgxMCwweDAyLDB4ZTQsMHgwMCwweDMxLDB4MDAsMHg2MiwweDQwLDB4MGIsMHg5MCwweDAyLDB4NDYgfX0sCisgezE2LCAweGVmNDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4YzQsMHgwMCwweGQ5LDB4MDEsMHgzNiwweDUwIH19LAorIHsxNiwgMHhlZjUwLCAwLCB7MHgyZiwweDkwLDB4MDMsMHhlNiwweDYwLDB4ZjksMHg4MCwweDM2LDB4NTIsMHgwYiwweDkwLDB4MGEsMHg2NCwweDAwLDB4ZjksMHgwMCB9fSwKKyB7MTYsIDB4ZWY2MCwgMCwgezB4MzYsMHg0MCwweDBkLDB4OTAsMHgwMywweDY0LDB4MDIsMHgwOSwweDAwLDB4M2UsMHg0MCwweDBkLDB4OTAsMHgwMywweDY0LDB4MDAgfX0sCisgezE2LCAweGVmNzAsIDAsIHsweGI5LDB4MDAsMHhiNiwweDQwLDB4MGYsMHg5MCwweDAzLDB4NjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZjgwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwMCwweGUxLDB4MDAsMHgzYSwweDQxLDB4MGMsMHg5MCwweDIzLDB4ZTYsMHgyMCwweGU5LDB4MDAsMHhiYSB9fSwKKyB7MTYsIDB4ZWY5MCwgMCwgezB4NzAsMHgwZiwweDkwLDB4MDMsMHhhNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgwZCwweDEwLDB4MTMsMHhhNywweDAwLDB4ZjkgfX0sCisgezE2LCAweGVmYTAsIDAsIHsweDAwLDB4M2EsMHg0MCwweDBlLDB4OTAsMHg0MywweGE0LDB4MDgsMHhmOSwweDAwLDB4M2EsMHg0MCwweDBmLDB4OTAsMHgwMywweDhhIH19LAorIHsxNiwgMHhlZmIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MjAsMHhmOCwweDAwLDB4MzIsMHgwMCB9fSwKKyB7MTYsIDB4ZWZjMCwgMCwgezB4MGYsMHg4MCwweDgzLDB4MjEsMHgwMCwweGYwLDB4MDAsMHgzYSwweDExLDB4MDksMHg4MCwweDAzLDB4ZTAsMHgwMCwweGM4LDB4MDEgfX0sCisgezE2LCAweGVmZDAsIDAsIHsweDMwLDB4MDEsMHgwYywweDgwLDB4MDMsMHhiMCwweDAwLDB4ZDAsMHgwMCwweDM0LDB4MDAsMHgwZCwweDgwLDB4MDMsMHgyMCwweDAwIH19LAorIHsxNiwgMHhlZmUwLCAwLCB7MHhjOCwweDAwLDB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMywweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWZmMCwgMCwgezB4MjgsMHgwNSwweDM4LDB4MDAsMHhiZSwweDAwLDB4MjIsMHg4MCwweDAzLDB4ZTgsMHgwMiwweDFhLDB4MDgsMHhiZSwweDQ4LDB4MjIgfX0sCisgezE2LCAweGYwMDAsIDAsIHsweDgwLDB4MGEsMHhhMCwweDAzLDB4YjgsMHgwMCwweGNhLDB4MDgsMHgyMiwweDgwLDB4MGYsMHhhNCwweDAyLDB4MDgsMHgwMCwweDhhIH19LAorIHsxNiwgMHhmMDEwLCAwLCB7MHgwMCwweDIyLDB4ODAsMHg4ZCwweGEwLDB4MDIsMHgyOCwweDAwLDB4ZGEsMHgwMCwweDJhLDB4ODEsMHgwOCwweGEwLDB4MDIsMHg4YSB9fSwKKyB7MTYsIDB4ZjAyMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0NCwweDAwLDB4YjMsMHgwMCwweDIwLDB4NDAgfX0sCisgezE2LCAweGYwMzAsIDAsIHsweDBiLDB4MzAsMHgwMiwweDA4LDB4MDAsMHhiMCwweDY0LDB4NjgsMHhjMSwweDA4LDB4YjAsMHgyMiwweGNjLDB4MGMsMHg5MywweDgwIH19LAorIHsxNiwgMHhmMDQwLCAwLCB7MHgwMCwweGMwLDB4NDgsMHgzNiwweDAyLDB4ODgsMHgwMCwweGIzLDB4MDAsMHgyNCwweGMwLDB4MDgsMHgzMCwweDA2LDB4MGMsMHgwMSB9fSwKKyB7MTYsIDB4ZjA1MCwgMCwgezB4YTMsMHgwMiwweDJjLDB4YzAsMHgwOCwweGIwLDB4MDIsMHgwYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYwNjAsIDAsIHsweGEwLDB4MDEsMHgxNCwweDA4LDB4YjUsMHgwMCwweDIxLDB4NDAsMHgwYiwweDM4LDB4ODIsMHgxYywweDIxLDB4YjcsMHgwMCwweDIzIH19LAorIHsxNiwgMHhmMDcwLCAwLCB7MHhlOCwweDRhLDB4NzIsMHgyNiwweDllLDB4NDAsMHg4ZiwweDgxLDB4YWIsMHg0MCwweDQyLDB4NzAsMHg1MiwweDM4LDB4MDAsMHhhMyB9fSwKKyB7MTYsIDB4ZjA4MCwgMCwgezB4MjIsMHgyMCwweGM0LDB4NDksMHgzMSwweDAyLDB4MWUsMHgwYSwweGI3LDB4MjIsMHgyZCwweGU4LDB4MDgsMHg3MiwweDAyLDB4YTggfX0sCisgezE2LCAweGYwOTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MTIsMHgwMCwweGY2LDB4ODAsMHgyMSwweGUwIH19LAorIHsxNiwgMHhmMGEwLCAwLCB7MHgwYiwweDc4LDB4MGIsMHgxZSwweDAwLDB4YjQsMHg4MiwweDNiLDB4ZTgsMHg0YywweDdjLDB4MTMsMHhmZSwweDAyLDB4OTcsMHg4MCB9fSwKKyB7MTYsIDB4ZjBiMCwgMCwgezB4MzMsMHhhMCwweDA4LDB4MzgsMHgwMywweDlhLDB4MDAsMHhmNywweDg4LDB4MzUsMHhlMiwweDBjLDB4NzgsMHhlMywweDBlLDB4MDAgfX0sCisgezE2LCAweGYwYzAsIDAsIHsweGUzLDB4ZTgsMHgzNCwweGY4LDB4MGMsMHgzYywweDIzLDB4MmEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMGQwLCAwLCB7MHgwOCwweDFkLDB4YTgsMHgwNCwweGYxLDB4MDAsMHgzZSwweDQyLDB4MGYsMHhiMCwweDEzLDB4ZWMsMHgwMCwweGZiLDB4MDAsMHhiZSB9fSwKKyB7MTYsIDB4ZjBlMCwgMCwgezB4Y2MsMHgxZSwweGI2LDB4MDcsMHhlZCwweDgwLDB4ZmIsMHgwMCwweDM2LDB4MDAsMHgwZiwweGIwLDB4NDMsMHg2OCwweDAwLDB4Y2IgfX0sCisgezE2LCAweGYwZjAsIDAsIHsweDMwLDB4M2UsMHhkOCwweDBmLDB4YjYsMHgwYiwweGVkLDB4NDAsMHhjYiwweDAwLDB4M2EsMHhjMCwweDJmLDB4YjYsMHgwMywweGMyIH19LAorIHsxNiwgMHhmMTAwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGYyLDB4NDAsMHhmYiwweDkxLDB4M2QsMHg0YyB9fSwKKyB7MTYsIDB4ZjExMCwgMCwgezB4ODAsMHhmOCwweDAzLDB4ZGUsMHg0MCwweGM2LDB4ODAsMHgxYiwweGYwLDB4NGYsMHhmZCwweDA3LDB4ZmYsMHgwMCwweGNkLDB4ODAgfX0sCisgezE2LCAweGYxMjAsIDAsIHsweDMzLDB4ZTAsMHgwYywweDY4LDB4MDMsMHhiYSwweDAwLDB4ZmYsMHg4MCwweDMzLDB4ZTAsMHgwNywweGY4LDB4MDMsMHgzZiwweDEwIH19LAorIHsxNiwgMHhmMTMwLCAwLCB7MHhjZiwweDgwLDB4M2YsMHhlMCwweDBjLDB4ZmMsMHgwMywweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjE0MCwgMCwgezB4YTgsMHgxMSwweDkwLDB4MDAsMHhiNSwweGMwLDB4MmQsMHg0MCwweDA4LDB4NjIsMHgwMiwweGRjLDB4MjAsMHhkNiwweDAyLDB4MjEgfX0sCisgezE2LCAweGYxNTAsIDAsIHsweGM4LDB4OGYsMHg3MCwweDAyLDB4ZGMsMHg4MSwweGI1LDB4MDAsMHg4MSwweDQ0LDB4MGQsMHg2MSwweDIyLDB4MTgsMHgwNCwweGI3IH19LAorIHsxNiwgMHhmMTYwLCAwLCB7MHgwMCwweDM1LDB4YzAsMHgwYiwweDcwLDB4MDIsMHhiYywweDAwLDB4YTcsMHgwMSwweDJkLDB4YzAsMHgwOCwweDcwLDB4MDMsMHhlYSB9fSwKKyB7MTYsIDB4ZjE3MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MCwweDAxLDB4YjYsMHgwMSwweDJmLDB4YzAgfX0sCisgezE2LCAweGYxODAsIDAsIHsweDE4LDB4NzAsMHgwMiwweGRjLDB4MGEsMHg5NiwweDEwLDB4MjksMHhjMSwweDRiLDB4NzAsMHgwNiwweGRjLDB4MTAsMHg4NSwweDAwIH19LAorIHsxNiwgMHhmMTkwLCAwLCB7MHgyNSwweDgwLDB4MDgsMHg2MCwweDgyLDB4MWEsMHgyMCwweGEzLDB4MDAsMHgyNSwweGMwLDB4MGIsMHgzMSwweDAyLDB4NWMsMHg0MCB9fSwKKyB7MTYsIDB4ZjFhMCwgMCwgezB4ODcsMHgwMCwweDJkLDB4YzAsMHgwOCwweDcwLDB4MDIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYxYjAsIDAsIHsweDIwLDB4MTQsMHhjOCwweDAwLDB4YjEsMHgwMCwweDJjLDB4NDAsMHg4OCwweDIwLDB4MDIsMHhlZCwweDAwLDB4OGEsMHg2MCwweDIwIH19LAorIHsxNiwgMHhmMWMwLCAwLCB7MHhjMCwweDBhLDB4MzAsMHgwMiwweGNjLDB4MDQsMHhiMSwweDAwLDB4MjQsMHgwMCwweDI4LDB4MjQsMHgwMiwweDBhLDB4MDAsMHgzMyB9fSwKKyB7MTYsIDB4ZjFkMCwgMCwgezB4MDAsMHgyNCwweGMwLDB4MGIsMHhiMCwweDAyLDB4Y2MsMHgwMCwweGEzLDB4MDAsMHgyYywweGMwLDB4ODgsMHgzMCwweDAyLDB4ODggfX0sCisgezE2LCAweGYxZTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YTAsMHgwMCwweGZiLDB4MDAsMHgzZSwweGM2IH19LAorIHsxNiwgMHhmMWYwLCAwLCB7MHgwYywweDgwLDB4MDMsMHhlNSwweDAwLDB4MDksMHhjOCwweGFiLDB4ZTIsMHgwYiwweGYwLDB4MDIsMHhmYywweDAwLDB4NGEsMHgwMCB9fSwKKyB7MTYsIDB4ZjIwMCwgMCwgezB4MzYsMHhjMCwweDA4LDB4OTAsMHgwMywweGE2LDB4MDAsMHhmZiwweDAwLDB4MzMsMHhjMCwweDBmLDB4ZjAsMHgwMywweDdjLDB4MDAgfX0sCisgezE2LCAweGYyMTAsIDAsIHsweDhmLDB4MDAsMHgyZiwweGMwLDB4MjgsMHhmMCwweDAyLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMjIwLCAwLCB7MHg4MCwweDAwLDB4ZTEsMHgwMCwweGZhLDB4MDEsMHgzZSwweGMwLDB4MGYsMHg4MCwweDAzLDB4ZWMsMHgwMCwweGY5LDB4NDAsMHgzZSB9fSwKKyB7MTYsIDB4ZjIzMCwgMCwgezB4YzAsMHgwNywweGIwLDB4MDMsMHhlYywweDAwLDB4ZmEsMHgwMCwweDNhLDB4NDAsMHgwZiwweDkwLDB4MjMsMHhlNSwweDAwLDB4ZmIgfX0sCisgezE2LCAweGYyNDAsIDAsIHsweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGFjLDB4MDAsMHhmYiwweDAwLDB4M2MsMHhjMCwweDBmLDB4YjAsMHgyMywweGUwIH19LAorIHsxNiwgMHhmMjUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGYwLDB4MDAsMHhmYywweDIwLDB4M2YsMHhjMCB9fSwKKyB7MTYsIDB4ZjI2MCwgMCwgezB4MGMsMHhjOCwweDAzLDB4ZmMsMHgyMCwweGNkLDB4ODEsMHhiMywweGMyLDB4NGYsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGNhLDB4MDAgfX0sCisgezE2LCAweGYyNzAsIDAsIHsweDNjLDB4ODAsMHgwYywweGQwLDB4ODIsMHgzNiwweDAxLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHgzYywweDA4IH19LAorIHsxNiwgMHhmMjgwLCAwLCB7MHhjZiwweDA0LDB4M2EsMHhjMCwweDVjLDB4YjAsMHgwMywweGMwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjI5MCwgMCwgezB4ODEsMHgwNCwweDYyLDB4MDQsMHhiOCwweDQwLDB4MmMsMHg2MCwweDA4LDB4ODksMHgwMiwweGVlLDB4ODAsMHhhOSwweDYwLDB4MmEgfX0sCisgezE2LCAweGYyYTAsIDAsIHsweGMwLDB4MGIsMHhiMCwweDAzLDB4OGMsMHgwMCwweGFhLDB4NDAsMHgyZSwweDAwLDB4MDgsMHgxMCwweDAyLDB4MjYsMHg4MSwweGViIH19LAorIHsxNiwgMHhmMmIwLCAwLCB7MHgwMCwweDI2LDB4YzAsMHg4YiwweGIwLDB4MTMsMHg2YywweDAwLDB4ZGIsMHgwMCwweDJlLDB4YzAsMHgzZCwweGIwLDB4MDIsMHhlMCB9fSwKKyB7MTYsIDB4ZjJjMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyMywweDAwLDB4YmIsMHgwMywweDJlLDB4YzggfX0sCisgezE2LCAweGYyZDAsIDAsIHsweDA5LDB4YjAsMHgwMiwweGVlLDB4MDAsMHg4YiwweDEwLDB4MjYsMHhjMCwweDBiLDB4YjAsMHgwMiwweGVjLDB4MDAsMHhhOCwweDAwIH19LAorIHsxNiwgMHhmMmUwLCAwLCB7MHgyZSwweGMwLDB4MDgsMHg4OCwweDIyLDB4YTQsMHg4MCwweGJiLDB4MDAsMHgyZSwweGMwLDB4NGIsMHhiMCwweDIyLDB4MGMsMHgwMCB9fSwKKyB7MTYsIDB4ZjJmMCwgMCwgezB4OGIsMHgwMCwweDJlLDB4YzAsMHgwYiwweGIwLDB4MDIsMHhlMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYzMDAsIDAsIHsweDA4LDB4MDQsMHgwMCwweDAwLDB4YjIsMHgwMCwweDJlLDB4YzAsMHgyOSwweDI4LDB4MDIsMHhlYywweDAxLDB4YTAsMHgwMiwweDIwIH19LAorIHsxNiwgMHhmMzEwLCAwLCB7MHhjMCwweDA5LDB4MzAsMHgwMiwweGNjLDB4MDAsMHhhMCwweDAwLDB4MmMsMHg0MCwweDA4LDB4MDAsMHg0MiwweDg0LDB4MDAsMHg5MyB9fSwKKyB7MTYsIDB4ZjMyMCwgMCwgezB4MDAsMHg2YywweGMwLDB4MGIsMHgzMCwweDA2LDB4NGQsMHgwMCwweDkzLDB4MDAsMHgyYywweGMwLDB4MDgsMHgzMCwweDAyLDB4YzIgfX0sCisgezE2LCAweGYzMzAsIDAsIHsweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NjAsMHgwMCwweGY4LDB4MjAsMHgyZiwweGMwIH19LAorIHsxNiwgMHhmMzQwLCAwLCB7MHgwZCwweGIwLDB4MDMsMHhlYywweDAwLDB4Y2IsMHgwMCwweDMzLDB4YzAsMHgwYiwweGYwLDB4MDMsMHhmYywweDE4LDB4ZTgsMHgwMCB9fSwKKyB7MTYsIDB4ZjM1MCwgMCwgezB4MmUsMHg4MCwweDA4LDB4ODAsMHgwMywweGE0LDB4MDAsMHhiZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHg0MywweDNkLDB4MTEgfX0sCisgezE2LCAweGYzNjAsIDAsIHsweGNmLDB4MDMsMHgzZSwweGMxLDB4NWQsMHhmMCwweDIzLDB4YzAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMzcwLCAwLCB7MHhhMCwweDFkLDB4ZjAsMHgwMCwweGZjLDB4MTAsMHgzZiwweDQwLDB4MGUsMHhlMCwweDAzLDB4ZmMsMHgwMCwweGZjLDB4MDAsMHgzZiB9fSwKKyB7MTYsIDB4ZjM4MCwgMCwgezB4YzAsMHgwZiwweGYwLDB4MDMsMHhiYywweDAwLDB4ZmMsMHgwMCwweDNmLDB4MDAsMHgyZiwweGMwLDB4MDMsMHg3NCwweDAwLDB4ZWYgfX0sCisgezE2LCAweGYzOTAsIDAsIHsweDAwLDB4MjcsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MTgsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGU4IH19LAorIHsxNiwgMHhmM2EwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgxNSwweGZjLDB4ODgsMHg5YywweDI5LDB4M2YsMHgwOCB9fSwKKyB7MTYsIDB4ZjNiMCwgMCwgezB4MGYsMHhkMiwweDgzLDB4ZWMsMHgwMCwweGZmLDB4MDgsMHgzZiwweDI4LDB4MGYsMHhjYSwweDAzLDB4M2MsMHg0MSwweGNmLDB4MjAgfX0sCisgezE2LCAweGYzYzAsIDAsIHsweDczLDB4MmMsMHgwYywweGMwLDB4MDMsMHgzMCwweDIwLDB4Y2YsMHg2MCwweDMzLDB4ZDgsMHgwZiwweDc4LDB4MDMsMHgzZiwweDgwIH19LAorIHsxNiwgMHhmM2QwLCAwLCB7MHhkZCwweDkyLDB4MzMsMHhjOCwweDBmLDB4NTAsMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjNlMCwgMCwgezB4ODAsMHgxMCwweGU1LDB4NDAsMHg4OCwweDQwLDB4MmUsMHgwNCwweDhiLDB4OTQsMHgwMiwweGU0LDB4MDAsMHhiOSwweDAwLDB4MGUgfX0sCisgezE2LCAweGYzZjAsIDAsIHsweDdmLDB4OGYsMHg5ZSwweDgzLDB4NjUsMHg4MiwweGNmLDB4NjgsMHgzZSwweDUwLDB4OGQsMHgwNCwweDkyLDB4MmYsMHgwNCwweGQzIH19LAorIHsxNiwgMHhmNDAwLCAwLCB7MHg0MCwweDc0LDB4ZGMsMHgwZCwweGEyLDB4MDIsMHgyMCwweDQwLDB4ODksMHgwMCwweDIyLDB4ZjAsMHgwYiwweDk4LDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4ZjQxMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjOCwweDA5LDB4YTAsMHg4NSwweDJjLDB4MDEgfX0sCisgezE2LCAweGY0MjAsIDAsIHsweDBiLDB4MDAsMHgxMCwweGNjLDB4NDAsMHhhMiwweDA4LDB4MmMsMHgwMCwweGRiLDB4MTEsMHgwMiwweDg5LDB4MDAsMHg5MywweDMwIH19LAorIHsxNiwgMHhmNDMwLCAwLCB7MHgyMCwweDA1LDB4MDgsMHgxMywweDAyLDB4ODAsMHgwOCwweGEzLDB4NjAsMHg2MCwweGMwLDB4MGEsMHhiMCwweDgyLDB4MDgsMHg4NCB9fSwKKyB7MTYsIDB4ZjQ0MCwgMCwgezB4ODEsMHgyMCwweDIwLDB4ZDAsMHgwYiwweDEwLDB4MDIsMHhhMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY0NTAsIDAsIHsweGMwLDB4MTUsMHhhNCwweDEyLDB4ODgsMHg4MCwweDZlLDB4MjAsMHgwYiwweDg4LDB4ODIsMHhlZSwweDAwLDB4YmEsMHg4MSwweDJlIH19LAorIHsxNiwgMHhmNDYwLCAwLCB7MHg2MCwweDVhLDB4OTgsMHgwMiwweGEyLDB4MDAsMHg4YiwweDAwLDB4MmEsMHg2MCwweDA4LDB4MTEsMHgxYSwweDJjLDB4MDAsMHhiYiB9fSwKKyB7MTYsIDB4ZjQ3MCwgMCwgezB4MDAsMHgyMiwweGMwLDB4MDgsMHhiOCwweDBhLDB4MjgsMHgwMCwweDgxLDB4MjAsMHgwMiwweGMwLDB4MGIsMHg5MCwweDAyLDB4YjAgfX0sCisgezE2LCAweGY0ODAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4ZWQsMHgwMCwweGQ5LDB4ODAsMHgzZSwweDIwIH19LAorIHsxNiwgMHhmNDkwLCAwLCB7MHg0ZiwweDk4LDB4MDAsMHhlYiwweDIwLDB4ZmIsMHhlMCwweDJlLDB4NjAsMHgwYiwweDhjLDB4NjIsMHhhZSwweDIwLDB4OGIsMHgwMCB9fSwKKyB7MTYsIDB4ZjRhMCwgMCwgezB4MjIsMHg2MCwweDA4LDB4YmMsMHgwMywweGEwLDB4MjAsMHhlYiwweDAwLDB4MjIsMHhjMSwweDBhLDB4MTgsMHgwYiwweDI1LDB4MDAgfX0sCisgezE2LCAweGY0YjAsIDAsIHsweGQ5LDB4MDAsMHhiMiwweGMwLDB4MGYsMHg5MCwweDBiLDB4OTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNGMwLCAwLCB7MHhlMCwweDAxLDB4OTQsMHg4OCwweGZmLDB4MDAsMHgzZiwweDAxLDB4MGYsMHhkMCwweDAxLDB4ZjAsMHgwOCwweGRkLDB4MDEsMHgzZiB9fSwKKyB7MTYsIDB4ZjRkMCwgMCwgezB4NDIsMHgwNywweDQwLDB4MDMsMHg1YywweDAwLDB4YWYsMHgwMCwweDNmLDB4NDAsMHgwZiwweGY4LDB4MDAsMHhmMCwweDAwLDB4ZGYgfX0sCisgezE2LCAweGY0ZTAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDBmLDB4YzAsMHgyMywweGY0LDB4NTAsMHhmZCwweDgwLDB4M2YsMHhjMCwweDBmLDB4ZDAsMHgwMywweDc4IH19LAorIHsxNiwgMHhmNGYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwweGFjLDB4MDAsMHhkOSwweDAwLDB4M2UsMHg0MCB9fSwKKyB7MTYsIDB4ZjUwMCwgMCwgezB4MGYsMHg5NCwweDAzLDB4YTgsMHgyMCwweGNhLDB4NDAsMHgzYSwweDQwLDB4MGYsMHg5NCwweDAzLDB4ZWEsMHgwOCwweGZiLDB4MDAgfX0sCisgezE2LCAweGY1MTAsIDAsIHsweDNhLDB4MDAsMHg0YywweGY2LDB4MjMsMHgyYywweDMwLDB4Y2IsMHgwMCwweDM2LDB4YzAsMHgwZCwweDkwLDB4MDMsMHhhMSwweDAyIH19LAorIHsxNiwgMHhmNTIwLCAwLCB7MHhkOSwweDAwLDB4YmEsMHhjMCwweDBmLDB4OTgsMHgwMywweDEwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjUzMCwgMCwgezB4YzgsMHgwNSwweDI0LDB4MDAsMHg4YSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTUsMHgwMiwweGUwLDB4MDgsMHg4OCwweDgwLDB4MjIgfX0sCisgezE2LCAweGY1NDAsIDAsIHsweDcwLDB4OGYsMHg4YywweDAyLDB4ZTAsMHgwMCwweGJmLDB4MDIsMHgyMCwweDAwLDB4MDgsMHhiOCwweDAyLDB4MGUsMHgwMCwweGRmIH19LAorIHsxNiwgMHhmNTUwLCAwLCB7MHgwMCwweDIzLDB4ZGQsMHgwOCwweDk4LDB4ODIsMHgyYSwweDAwLDB4ODksMHg4MCwweDIzLDB4YzAsMHgwYiwweDUwLDB4MWEsMHgzMiB9fSwKKyB7MTYsIDB4ZjU2MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0NCwweDAwLDB4ODMsMHgwNSwweDI0LDB4NDEgfX0sCisgezE2LCAweGY1NzAsIDAsIHsweDA5LDB4MTAsMHgwMiwweGNlLDB4MDAsMHg4MywweDkwLDB4MmMsMHg4MCwweDFiLDB4MjQsMHg4MiwweGNjLDB4MDAsMHhiYiwweDAwIH19LAorIHsxNiwgMHhmNTgwLCAwLCB7MHgyYywweDgwLDB4MDgsMHgwNCwweDA4LDB4MDQsMHgwMSwweDhiLDB4MDAsMHgyMiwweGMwLDB4MjgsMHgxMiwweDAyLDB4NmMsMHg4MCB9fSwKKyB7MTYsIDB4ZjU5MCwgMCwgezB4ODEsMHg0OCwweDI0LDB4YzQsMHgwYiwweDEwLDB4MDIsMHgzOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY1YTAsIDAsIHsweDIwLDB4MDEsMHgzZSwweDQyLDB4ODYsMHg4MCwweDJkLDB4NjAsMHgwYiwweDY4LDB4MDIsMHhmNiwweDkwLDB4OGQsMHg4MCwweDIxIH19LAorIHsxNiwgMHhmNWIwLCAwLCB7MHgyMiwweDBiLDB4NTgsMHgwMiwweGQ3LDB4NDAsMHhiNywweDkwLDB4MjEsMHhlMCwweDA4LDB4NDksMHg5MiwweDFlLDB4NTMsMHg5NyB9fSwKKyB7MTYsIDB4ZjVjMCwgMCwgezB4ODEsMHgyMSwweGUwLDB4NDgsMHhjOCwweDBhLDB4NTIsMHgyMiwweDg1LDB4ODgsMHgyNSwweGUwLDB4MGIsMHg1OCwweDAyLDB4MDggfX0sCisgezE2LCAweGY1ZDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweDgzLDB4MDAsMHgzNCwweGMwIH19LAorIHsxNiwgMHhmNWUwLCAwLCB7MHgwZiwweDAwLDB4MDMsMHhjZSwweDIwLDB4YzMsMHgzMCwweDdjLDB4OTQsMHgwYiwweDM0LDB4ODMsMHhjYywweDE0LDB4ZjMsMHgwMiB9fSwKKyB7MTYsIDB4ZjVmMCwgMCwgezB4M2MsMHg4MCwweDBjLDB4MDQsMHgwMywweDA0LDB4NjAsMHhjMywweDAwLDB4YjAsMHhjMCwweDBjLDB4MTAsMHgwMywweGVjLDB4MDAgfX0sCisgezE2LCAweGY2MDAsIDAsIHsweGM5LDB4MDAsMHgzYywweGM0LDB4MGYsMHgxMSwweDAzLDB4MTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNjEwLCAwLCB7MHg0MCwweDFkLDB4OWMsMHgwMCwweGVlLDB4MDEsMHgzZiwweGMwLDB4NGYsMHhlMSwweDAzLDB4ZDQsMHg0MCwweGY1LDB4MTYsMHg3YSB9fSwKKyB7MTYsIDB4ZjYyMCwgMCwgezB4YzAsMHg0ZSwweGYwLDB4MDMsMHhmNCwweDEwLDB4MzcsMHgwNSwweDNkLDB4YzAsMHgwZiwweGMwLDB4MGIsMHhkYywweDQwLDB4ZmYgfX0sCisgezE2LCAweGY2MzAsIDAsIHsweDAwLDB4M2IsMHhjMiwweDBlLDB4ZDAsMHgwNywweGJjLDB4MDIsMHhlZiwweDAwLDB4M2IsMHhjNiwweDBmLDB4ZDAsMHgwMywweGQwIH19LAorIHsxNiwgMHhmNjQwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGY0LDB4MDAsMHhkZCwweDg0LDB4MzMsMHg4MCB9fSwKKyB7MTYsIDB4ZjY1MCwgMCwgezB4MDQsMHhmMCwweDAzLDB4NmMsMHgwMiwweGNiLDB4MDIsMHg3ZSwweGMwLDB4MWYsMHhhMCwweDUzLDB4ZWMsMHgwMCwweGNiLDB4MjAgfX0sCisgezE2LCAweGY2NjAsIDAsIHsweDM0LDB4NDAsMHgwYywweGQwLDB4MGIsMHgyMCwweDEwLDB4ZWIsMHgwMCwweDFlLDB4ZTAsMHgwZiwweDMwLDB4MGIsMHgyYywweDAwIH19LAorIHsxNiwgMHhmNjcwLCAwLCB7MHhjMSwweDAwLDB4MzIsMHhjMCwweDBmLDB4OTEsMHgwMywweGVhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjY4MCwgMCwgezB4NDgsMHgxMSwweDljLDB4MDAsMHg4NywweDAwLDB4MjEsMHg4MCwweDA4LDB4NjAsMHgwMCwweDE0LDB4MDAsMHg4NSwweDAwLDB4MmQgfX0sCisgezE2LCAweGY2OTAsIDAsIHsweDgwLDB4MGIsMHg3MCwweDUyLDB4ZDQsMHgwNCwweDgzLDB4MjgsMHgyOSwweGMwLDB4MjgsMHg1MCwweDAzLDB4NTAsMHgwMCwweDg3IH19LAorIHsxNiwgMHhmNmEwLCAwLCB7MHg0MCwweDI1LDB4YzgsMHgwZiwweDYwLDB4MDIsMHgwNCwweDAwLDB4YTcsMHgwMCwweDNkLDB4YzgsMHgwYiwweDUyLDB4MDIsMHhkMiB9fSwKKyB7MTYsIDB4ZjZiMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg4ZSwweDAwLDB4OTUsMHg4MCwweDIxLDB4ZTAgfX0sCisgezE2LCAweGY2YzAsIDAsIHsweDA5LDB4MzgsMHgwMiwweDFlLDB4MTEsMHhhNywweDgwLDB4MmQsMHhmMCwweDBiLDB4NzgsMHg1MiwweGNlLDB4MGEsMHg5NywweDk1IH19LAorIHsxNiwgMHhmNmQwLCAwLCB7MHgyMSwweGUwLDB4MTksMHg1YywweDAyLDB4MGUsMHgwMCwweGE3LDB4ODAsMHgyOSwweGM4LDB4MGIsMHhmOCwweDAyLDB4MWUsMHgyMCB9fSwKKyB7MTYsIDB4ZjZlMCwgMCwgezB4OGQsMHg4MCwweDIxLDB4ZTAsMHgwYiwweDU4LDB4MDIsMHhmMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY2ZjAsIDAsIHsweDQ4LDB4MTQsMHhjYywweDAwLDB4ODIsMHhlMCwweGEwLDB4ZTgsMHgyOSwweDMwLDB4MDYsMHgwZSwweDUwLDB4YWIsMHg4MCwweDJjIH19LAorIHsxNiwgMHhmNzAwLCAwLCB7MHhmMCwweDBiLDB4MzEsMHg0MiwweGNjLDB4MDAsMHg5MywweDAwLDB4MjgsMHhjNCwweDA5LDB4OTgsMHgwMiwweDRjLDB4MjgsMHg4MyB9fSwKKyB7MTYsIDB4ZjcxMCwgMCwgezB4MDAsMHgyNCwweGMwLDB4MGEsMHhiMCwweDAyLDB4MGQsMHgwMCwweGEyLDB4NTgsMHgyOCwweGMwLDB4MGIsMHgxMCwweDAyLDB4ZDIgfX0sCisgezE2LCAweGY3MjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YjksMHgwMCwweGRlLDB4ODAsMHgzMSwweGEwIH19LAorIHsxNiwgMHhmNzMwLCAwLCB7MHgwOSwweGUyLDB4MGIsMHg3OCwweDA0LDB4ZWUsMHhhNCwweDJmLDB4YTQsMHg4YiwweGVjLDB4MDIsMHhkOCwweDAwLDB4ZGEsMHgwMCB9fSwKKyB7MTYsIDB4Zjc0MCwgMCwgezB4MjcsMHg4MSwweDBkLDB4ZWMsMHgwNiwweDFiLDB4MDAsMHhlYSwweDA0LDB4M2UsMHg4MCwweDBiLDB4ZTAsMHgwMywweDNiLDB4MDAgfX0sCisgezE2LCAweGY3NTAsIDAsIHsweGNlLDB4YzAsMHgyMiwweDgwLDB4MGYsMHhhMCwweDAzLDB4ZmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNzYwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHg4MCwweGY4LDB4MTAsMHgzZSwweDA1LDB4MGUsMHg4OCwweDAzLDB4ZTAsMHgwOCwweDk4LDB4NDAsMHgzZSB9fSwKKyB7MTYsIDB4Zjc3MCwgMCwgezB4MDAsMHgwZiwweDg0LDB4ODMsMHhlMSwweDQwLDB4ZTgsMHgwMCwweDNhLDB4MDIsMHgwZSwweDgwLDB4NDMsMHhlMSwweDQwLDB4ZjggfX0sCisgezE2LCAweGY3ODAsIDAsIHsweDAwLDB4MzYsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4MjAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyIH19LAorIHsxNiwgMHhmNzkwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGM0LDB4MDAsMHhlOSwweDAwLDB4M2UsMHg0MCB9fSwKKyB7MTYsIDB4ZjdhMCwgMCwgezB4MGMsMHg5MCwweDAzLDB4MDQsMHgyMCwweGU5LDB4OTAsMHgzMiwweDY4LDB4MGUsMHg5OCwweDAzLDB4YTQsMHgwMCwweGMxLDB4MDAgfX0sCisgezE2LCAweGY3YjAsIDAsIHsweDMwLDB4NDAsMHgwYywweDk0LDB4ODMsMHgyNCwweDA4LDB4YzksMHgwMCwweDNlLDB4NDAsMHgwYywweDkwLDB4MDMsMHhhNCwweDAwIH19LAorIHsxNiwgMHhmN2MwLCAwLCB7MHhjOSwweDAwLDB4MzAsMHg1MCwweDBjLDB4MWEsMHgwMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjdkMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHg4OSwweDQwLDB4MmUsMHg1MCwweDI4LDB4OTAsMHgwYSwweDI0LDB4MDgsMHg4OSwweDA2LDB4MTYgfX0sCisgezE2LCAweGY3ZTAsIDAsIHsweDYxLDB4MGIsMHg5YywweDAyLDB4ZTQsMHgyMCwweGE5LDB4MDAsMHgzNiwweDQwLDB4MGQsMHg5MCwweDAyLDB4MjcsMHg2MCwweGE5IH19LAorIHsxNiwgMHhmN2YwLCAwLCB7MHgwMCwweDJlLDB4NDAsMHgyOCwweDkwLDB4MWEsMHgyNCwweDAwLDB4ODksMHgwMCwweDM2LDB4NDAsMHgyOCwweDk4LDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4ZjgwMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyYywweDAwLDB4YTksMHgwOCwweDJlLDB4YzIgfX0sCisgezE2LCAweGY4MTAsIDAsIHsweDA5LDB4MTAsMHgwMCwweDI0LDB4MDAsMHhhOSwweDAwLDB4MDYsMHg0MCwweDg5LDB4OTYsMHgwNiwweGU2LDB4MDAsMHg4OSwweDAwIH19LAorIHsxNiwgMHhmODIwLCAwLCB7MHgyMiwweGMwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMiwweDg5LDB4MDAsMHgyNCwweDQwLDB4MDgsMHg5MCwweDAyLDB4MGMsMHgwNiB9fSwKKyB7MTYsIDB4ZjgzMCwgMCwgezB4ODMsMHgwMCwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY4NDAsIDAsIHsweDA4LDB4MDQsMHgwNSwweDAwLDB4ODEsMHg0NCwweDJjLDB4NTAsMHgwOCwweDE0LDB4MDIsMHgwNSwweDgwLDB4ODEsMHgyMCwweDY0IH19LAorIHsxNiwgMHhmODUwLCAwLCB7MHg3MCwweDFiLDB4MTQsMHgwMiwweGU0LDB4ODAsMHhhMSwweDIwLDB4NjQsMHg0MCwweDE5LDB4MTIsMHgwYSwweDA0LDB4ODAsMHhhMSB9fSwKKyB7MTYsIDB4Zjg2MCwgMCwgezB4MDAsMHgyYywweDUwLDB4MTgsMHgxNCwweDAyLDB4ODUsMHgwMCwweDgxLDB4NDAsMHgyNCwweDQwLDB4NDAsMHgxMCwweDAyLDB4MDIgfX0sCisgezE2LCAweGY4NzAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGUwLDB4MDAsMHgzYywweDAwIH19LAorIHsxNiwgMHhmODgwLCAwLCB7MHgwZCwweDgwLDB4MDIsMHgwMCwweDAwLDB4YWEsMHg1MCwweDM2LDB4MDAsMHgwZiwweDgwLDB4MDMsMHhlMSwweDQwLDB4YzgsMHg1MiB9fSwKKyB7MTYsIDB4Zjg5MCwgMCwgezB4NzIsMHgxNCwweDBjLDB4MDUsMHgxNiwweDIwLDB4MDgsMHhjOCwweDUwLDB4M2UsMHgwMSwweDBjLDB4ODAsMHgwMywweGEwLDB4MDQgfX0sCisgezE2LCAweGY4YTAsIDAsIHsweGM4LDB4MDAsMHhiMiwweDAwLDB4MGMsMHg4MCwweDBiLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOGIwLCAwLCB7MHg5OCwweDE5LDB4ZjUsMHgwMiwweGZkLDB4NDAsMHgzZiwweGQwLDB4MGYsMHhkNCwweDIzLDB4ZjQsMHg0NCwweGZkLDB4MTQsMHg3ZiB9fSwKKyB7MTYsIDB4ZjhjMCwgMCwgezB4NTAsMHgwZiwweGQ0LDB4MDcsMHhmNCwweDQwLDB4ZjksMHgxMCwweDNmLDB4NTAsMHgwNywweGQxLDB4MjMsMHhmNCwweDQwLDB4ZjkgfX0sCisgezE2LCAweGY4ZDAsIDAsIHsweDQwLDB4MWUsMHg1MCwweDA3LDB4ZDAsMHgwYiwweDc1LDB4MDAsMHhmZCwweDAyLDB4M2UsMHg1MCwweDBmLDB4ZDQsMHgwMywweGU2IH19LAorIHsxNiwgMHhmOGUwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGY2LDB4MDAsMHhjOSwweGE4LDB4M2UsMHg3MiB9fSwKKyB7MTYsIDB4ZjhmMCwgMCwgezB4MGYsMHg5OCwweDAzLDB4ZTYsMHhjMCwweGZkLDB4YTAsMHhiMywweDQwLDB4MGYsMHhkMCwweDAzLDB4NzcsMHg4MCwweGNkLDB4OTAgfX0sCisgezE2LCAweGY5MDAsIDAsIHsweDdmLDB4NDAsMHgwZiwweGRhLDB4YTMsMHgxNiwweDkwLDB4YTksMHhjMCwweDMyLDB4NjAsMHg0YywweGIxLDB4MDMsMHgyNCwweDAwIH19LAorIHsxNiwgMHhmOTEwLCAwLCB7MHhjMSwweDAwLDB4MzMsMHg2YSwweDBiLDB4ZGEsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjkyMCwgMCwgezB4MzgsMHgxMCwweGUzLDB4NDAsMHg4OCwweGUwLDB4MmUsMHgzMCwweDBiLDB4OGQsMHgwMiwweGYzLDB4NDAsMHhiOCwweGU4LDB4NzYgfX0sCisgezE2LCAweGY5MzAsIDAsIHsweDAwLDB4NGYsMHg4MCwweDBhLDB4MjIsMHg4MCwweDg4LDB4OTAsMHg2ZSwweDI4LDB4OGYsMHg4YSwweDAzLDB4NjEsMHg0NCwweGY4IH19LAorIHsxNiwgMHhmOTQwLCAwLCB7MHhlMSwweDNlLDB4MmEsMHgwOCwweDg4LDB4MDMsMHg0MiwweGEwLDB4ZGMsMHhhMCwweDNlLDB4MTAsMHgwYiwweDg1LDB4MGEsMHgwZSB9fSwKKyB7MTYsIDB4Zjk1MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweGEwLDB4ODUsMHgwOCwweDJkLDB4NDggfX0sCisgezE2LCAweGY5NjAsIDAsIHsweDFiLDB4NTIsMHg4MiwweGQ0LDB4ODAsMHhiMSwweDE0LDB4MjAsMHg0MCwweDBiLDB4MTgsMHgwMiwweDA1LDB4ODIsMHg4MSwweDAwIH19LAorIHsxNiwgMHhmOTcwLCAwLCB7MHg2YywweDQyLDB4MGIsMHgxMiwweDgyLDB4MDQsMHgwMCwweGExLDB4NjAsMHgyMSwweDUwLDB4MGIsMHg1MCwweDAyLDB4MTQsMHg5MCB9fSwKKyB7MTYsIDB4Zjk4MCwgMCwgezB4OTUsMHgyYywweDI4LDB4NDAsMHgwYiwweDEwLDB4MDIsMHgwMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY5OTAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAxLDB4OGQsMHg0NCwweDJmLDB4NDAsMHgwYiwweGQ0LDB4MDIsMHhmNCwweDA0LDB4YjksMHgwOCwweDIyIH19LAorIHsxNiwgMHhmOWEwLCAwLCB7MHg0MCwweDBhLDB4OTIsMHgwMiwweDJjLDB4ODQsMHg4OSwweDAwLDB4MmUsMHg0MCwweDBhLDB4MTQsMHgwMiwweDZjLDB4ODAsMHhhOSB9fSwKKyB7MTYsIDB4ZjliMCwgMCwgezB4MDEsMHgyYSwweDQwLDB4MDksMHg1MCwweDBhLDB4NWMsMHgwMiwweDhkLDB4NjAsMHgyYSwweDQwLDB4MGIsMHg5MCwweDQyLDB4MDYgfX0sCisgezE2LCAweGY5YzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTYsMHg2MiwweGM5LDB4MDIsMHgzZSwweDU0IH19LAorIHsxNiwgMHhmOWQwLCAwLCB7MHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHg0MCwweDIyLDB4NDYsMHgwYiwweDk4LDB4MDMsMHg2NywweDIwLDB4YzksMHgwMSB9fSwKKyB7MTYsIDB4ZjllMCwgMCwgezB4MmUsMHg2OSwweDBiLDB4OTQsMHgwYiwweDI1LDB4MjAsMHhhOSwweDAwLDB4MjIsMHg0MCwweDJkLDB4OTIsMHgwYSwweDI2LDB4MjIgfX0sCisgezE2LCAweGY5ZjAsIDAsIHsweDk5LDB4MDAsMHgyYSwweDQwLDB4OGYsMHg5MCwweDAzLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYTAwLCAwLCB7MHgyOCwweDAxLDB4ODYsMHgwMiwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTYsMHg4MCwweGYxLDB4YTAsMHgzZSB9fSwKKyB7MTYsIDB4ZmExMCwgMCwgezB4NjIsMHgwZiwweDk4LDB4ODMsMHhjNiwweDIwLDB4ZjksMHgwMCwweDNlLDB4NDksMHgwZiwweDkwLDB4ODMsMHhlNCwweDAwLDB4NzEgfX0sCisgezE2LCAweGZhMjAsIDAsIHsweDAyLDB4M2UsMHg0MCwweDBlLDB4OTAsMHgwYiwweGU2LDB4ODAsMHhmOSwweDgwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGNhIH19LAorIHsxNiwgMHhmYTMwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MTAsMHhjOCwweDAwLDB4M2UsMHgwMCB9fSwKKyB7MTYsIDB4ZmE0MCwgMCwgezB4NGYsMHg4MCwweDQzLDB4YjAsMHgwMCwweGM4LDB4NDEsMHgzMiwweDAwLDB4MGYsMHg4MCwweDAzLDB4MjEsMHgwMiwweGM4LDB4MDIgfX0sCisgezE2LCAweGZhNTAsIDAsIHsweDNlLDB4MTAsMHg0YywweDgwLDB4MDMsMHgwMSwweDIwLDB4YzgsMHgwMCwweDNiLDB4MDAsMHgwYywweGMwLDB4MDMsMHhiMCwweDAwIH19LAorIHsxNiwgMHhmYTYwLCAwLCB7MHhjYywweDA0LDB4MzIsMHgwMCwweDBmLDB4ODAsMHgwMywweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmE3MCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDAsMHg4YSwweDgwLDB4MmUsMHg4MCwweDBiLDB4YTAsMHgwMiwweGY4LDB4MDQsMHg4ZSwweDAwLDB4MjMgfX0sCisgezE2LCAweGZhODAsIDAsIHsweGIyLDB4MGUsMHhlMCwweDgyLDB4ZjksMHgwNCwweDhhLDB4MDAsMHgyZSwweDgxLDB4MGMsMHhlMCwweDBhLDB4M2EsMHg4MCwweGRhIH19LAorIHsxNiwgMHhmYTkwLCAwLCB7MHgwMCwweDIyLDB4YjYsMHgwOCwweGEwLDB4MDIsMHgyOCwweDAwLDB4OGUsMHgwMCwweDJhLDB4ODAsMHgwYiwweDYwLDB4MGIsMHgwYSB9fSwKKyB7MTYsIDB4ZmFhMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0NCwweDAyLDB4OTMsMHg4MSwweDJjLDB4YzAgfX0sCisgezE2LCAweGZhYjAsIDAsIHsweDRiLDB4MzAsMHgwMiwweGM4LDB4MDAsMHg4MywweGNhLDB4MjAsMHhlMCwweDE5LDB4YjAsMHgwNiwweDhjLDB4MDAsMHg4MSwweDA0IH19LAorIHsxNiwgMHhmYWMwLCAwLCB7MHg0NCwweDQwLDB4MDgsMHgzNCwweDAyLDB4MGQsMHgwMCwweDgzLDB4MDAsMHgyYSwweDAwLDB4MDgsMHgwMCwweDBhLDB4ODAsMHg0MCB9fSwKKyB7MTYsIDB4ZmFkMCwgMCwgezB4ODgsMHgwMCwweDIwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHg0YiwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZhZTAsIDAsIHsweGEwLDB4MDEsMHgwNCwweDAyLDB4OTcsMHgwOCwweDJkLDB4YzAsMHgwYiwweDYwLDB4MDYsMHhjYSwweDAwLDB4ODMsMHgwOSwweDIxIH19LAorIHsxNiwgMHhmYWYwLCAwLCB7MHhjMCwweDBhLDB4NzAsMHgwMiwweGRjLDB4MDAsMHg4NSwweDMxLDB4MmQsMHg2OCwweDA5LDB4MzAsMHgwMiwweDFjLDB4MTQsMHg5MyB9fSwKKyB7MTYsIDB4ZmIwMCwgMCwgezB4MjAsMHgyMCwweGMwLDB4MDgsMHhmMCwweDQyLDB4OWMsMHgwMiwweDhmLDB4MDAsMHgyOSwweDQwLDB4MDMsMHg3MCwweDEyLDB4MjggfX0sCisgezE2LCAweGZiMTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MTYsMHgwMCwweDk2LDB4ODQsMHgzZCwweGEwIH19LAorIHsxNiwgMHhmYjIwLCAwLCB7MHgwZiwweDc4LDB4MDMsMHg5YSwweDAyLDB4ODcsMHg4MCwweGIxLDB4ZTAsMHgwYiwweDc4LDB4MDMsMHhiNiwweDAwLDB4YzUsMHhhMCB9fSwKKyB7MTYsIDB4ZmIzMCwgMCwgezB4MzUsMHg2MSwweDBjLDB4NzgsMHgxMywweDFlLDB4MDIsMHhjNywweDgwLDB4MjksMHgwMCwweDBjLDB4NDgsMHgwMywweDkwLDB4MDAgfX0sCisgezE2LCAweGZiNDAsIDAsIHsweGM0LDB4ODAsMHgzMSwweDYwLDB4MGYsMHg1OCwweDAzLDB4NmEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYjUwLCAwLCB7MHgwOCwweDFkLDB4YTQsMHgwMCwweGVhLDB4MDAsMHgzZSwweDgwLDB4MGYsMHhhMCwweDAzLDB4ZTgsMHgwOCwweGZiLDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4ZmI2MCwgMCwgezB4ODAsMHgwZiwweDkwLDB4MTMsMHhlNCwweDA4LDB4ZjksMHgwMCwweDNjLDB4NTAsMHgyZSwweGYwLDB4MDMsMHhlOCwweDA4LDB4ZmIgfX0sCisgezE2LCAweGZiNzAsIDAsIHsweDQwLDB4M2UsMHhjMCwweDBiLDB4MzAsMHgxMywweDZjLDB4MDAsMHhmYiwweDAwLDB4M2UsMHg0MCwweDBmLDB4MzAsMHgwMywweGMyIH19LAorIHsxNiwgMHhmYjgwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGQ2LDB4MDAsMHhjZCwweDgwLDB4MzMsMHhlMCB9fSwKKyB7MTYsIDB4ZmI5MCwgMCwgezB4MGMsMHhmOCwweDAzLDB4ZmEsMHgwMCwweGZkLDB4ODAsMHgzZiwweGEwLDB4MGQsMHhmOCwweDAzLDB4ZmEsMHg0MCwweGNkLDB4ZDAgfX0sCisgezE2LCAweGZiYTAsIDAsIHsweDc3LDB4N2UsMHgwYywweGU4LDB4NDMsMHgxZSwweDAwLDB4Y2YsMHhkOCwweDNmLDB4ZTAsMHgwYywweGM4LDB4MDMsMHgzYSwweGM0IH19LAorIHsxNiwgMHhmYmIwLCAwLCB7MHhjYywweDgwLDB4MzMsMHhlMCwweDBjLDB4ZjgsMHgwMywweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmJjMCwgMCwgezB4YTgsMHgxMSwweDk0LDB4MDIsMHg4ZCwweDAwLDB4MjEsMHhjMCwweDA4LDB4NjAsMHgwMywweGQ4LDB4MTAsMHgzNSwweDIwLDB4OGIgfX0sCisgezE2LCAweGZiZDAsIDAsIHsweGQ0LDB4MGQsMHg2NCwweDAzLDB4ZDgsMHhjMCwweDg1LDB4MDAsMHgyZiwweDRlLDB4MDcsMHg2NCwweDAyLDB4OWMsMHgwMiwweGQ3IH19LAorIHsxNiwgMHhmYmUwLCAwLCB7MHgzMCwweDJmLDB4MDQsMHgwZCwweGYxLDB4MGIsMHg1NCwweDQwLDB4YWYsMHgwMCwweDM1LDB4NDAsMHgwOCwweDcwLDB4MDIsMHgyYSB9fSwKKyB7MTYsIDB4ZmJmMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5NCwweDQwLDB4ODQsMHgxOCwweDIxLDB4ODAgfX0sCisgezE2LCAweGZjMDAsIDAsIHsweDA4LDB4NzAsMHgwMiwweGRhLDB4MjAsMHhiNSwweDAwLDB4MDksMHgwMCwweDA4LDB4NzAsMHgwMiwweGQ0LDB4MDQsMHg4NSwweDAwIH19LAorIHsxNiwgMHhmYzEwLCAwLCB7MHg2ZCwweDRjLDB4ODksMHg2MCwweDAyLDB4NWMsMHg0MCwweDk3LDB4MDAsMHg2ZCwweGMwLDB4MDksMHg0MCwweDAyLDB4NTgsMHg4MCB9fSwKKyB7MTYsIDB4ZmMyMCwgMCwgezB4ODQsMHg4OCwweDI1LDB4NDAsMHgwOCwweGQwLDB4MDIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZjMzAsIDAsIHsweDIwLDB4MTQsMHhjNiwweDQ4LDB4ODAsMHgwMCwweDIwLDB4ODAsMHgwOCwweGFjLDB4MDIsMHhhOCwweDAwLDB4YjEsMHgwMCwweGE4IH19LAorIHsxNiwgMHhmYzQwLCAwLCB7MHg4OCwweDA5LDB4MjIsMHgwMiwweDg2LDB4NDIsMHg4MSwweDAwLDB4NmMsMHg1MiwweDBiLDB4MjAsMHgwMiwweGM3LDB4NTIsMHg4MyB9fSwKKyB7MTYsIDB4ZmM1MCwgMCwgezB4MDAsMHgyYywweDAwLDB4MDgsMHgzNCwweDgyLDB4NjcsMHgwMCwweGEzLDB4ODAsMHgyMCwweDQwLDB4MDgsMHgzMCwweDAyLDB4MDggfX0sCisgezE2LCAweGZjNjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YTMsMHgwMCwweGNiLDB4YzAsMHhiMiwweDQwIH19LAorIHsxNiwgMHhmYzcwLCAwLCB7MHgyYywweDkwLDB4ODIsMHhlNiwweDAwLDB4YmIsMHg4MCwweGJlLDB4NzgsMHgwOCwweDhlLDB4MDIsMHhlZSwweDAwLDB4OGQsMHgwMCB9fSwKKyB7MTYsIDB4ZmM4MCwgMCwgezB4MjcsMHg2MCwweDBkLDB4OTAsMHgwYSwweDZmLDB4MDAsMHg5ZiwweDAyLDB4MmUsMHgwMCwweDA5LDB4YjQsMHgwMywweDY3LDB4ODAgfX0sCisgezE2LCAweGZjOTAsIDAsIHsweGNhLDB4NDAsMHhlNCwweGMwLDB4MGMsMHgzMCwweDAzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmY2EwLCAwLCB7MHg4MCwweDAwLDB4ZTAsMHg4MCwweGZiLDB4MjIsMHgzZSwweDQwLDB4MGYsMHg4MCwweDEzLDB4ZTQsMHgwMCwweGZiLDB4ODAsMHgzZSB9fSwKKyB7MTYsIDB4ZmNiMCwgMCwgezB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNSwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgwZSwweDcwLDB4MjMsMHhhYywweDIwLDB4ZmIgfX0sCisgezE2LCAweGZjYzAsIDAsIHsweDAwLDB4M2UsMHhjMCwweDhmLDB4ODAsMHgwMywweGU5LDB4MjAsMHhmOSwweDA4LDB4M2UsMHg0MCwweDBmLDB4YjAsMHgxMywweGUwIH19LAorIHsxNiwgMHhmY2QwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGYwLDB4MDAsMHhjNiwweDAwLDB4MzIsMHgwMCB9fSwKKyB7MTYsIDB4ZmNlMCwgMCwgezB4MGYsMHhkMSwweDgzLDB4MzQsMHg0MCwweGNmLDB4MDAsMHgzZCwweDQwLDB4MGMsMHhkMCwweDAzLDB4ZGUsMHg1MCwweDBkLDB4MDAgfX0sCisgezE2LCAweGZjZjAsIDAsIHsweDczLDB4NDAsMHgwYywweGQxLDB4MDMsMHg3YywweDQwLDB4ODcsMHgwMiwweGIzLDB4MDAsMHgwZCwweGY0LDB4MDMsMHgyNCwweDAwIH19LAorIHsxNiwgMHhmZDAwLCAwLCB7MHhjZSwweDIwLDB4MzIsMHg0MCwweDBjLDB4ZDAsMHgwMywweDAwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmQxMCwgMCwgezB4ODEsMHgwNCwweDYxLDB4MjIsMHg4YSwweDAwLDB4MjIsMHgwMCwweDBiLDB4ODAsMHg0MCwweDI1LDB4MDAsMHg4OSwweGMzLDB4MmUgfX0sCisgezE2LCAweGZkMjAsIDAsIHsweDIwLDB4MGEsMHg5OCwweDAzLDB4YTEsMHgwMCwweDg5LDB4MDAsMHgzNiwweDQwLDB4ODgsMHg5NCwweDAyLDB4MGYsMHgwMSwweGFiIH19LAorIHsxNiwgMHhmZDMwLCAwLCB7MHgwMCwweDMyLDB4YzAsMHgwOCwweDA0LDB4MGEsMHgyOSwweDAwLDB4YTksMHgwMiwweGEyLDB4NDAsMHgwZCwweGIwLDB4MGEsMHgyMCB9fSwKKyB7MTYsIDB4ZmQ0MCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgwMCwweDAwLDB4ODksMHgwMCwweDIyLDB4NjEgfX0sCisgezE2LCAweGZkNTAsIDAsIHsweDBiLDB4OTAsMHgwMiwweDI1LDB4MDEsMHg5YiwweDg4LDB4MmUsMHg2MCwweDA4LDB4ODgsMHgwMiwweGU4LDB4MDAsMHhiMSwweDAyIH19LAorIHsxNiwgMHhmZDYwLCAwLCB7MHgyNCwweDQwLDB4MTgsMHg5MCwweDAyLDB4MmMsMHgwMCwweGFiLDB4MDEsMHgyMCwweGMxLDB4MDgsMHhiNCwweDQyLDB4MmMsMHgwMCB9fSwKKyB7MTYsIDB4ZmQ3MCwgMCwgezB4ODIsMHgwMCwweDIyLDB4YzAsMHgwOCwweGIwLDB4MDIsMHgyMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZkODAsIDAsIHsweDA4LDB4MDQsMHgwMCwweDAwLDB4MDEsMHgwMCwweDIwLDB4NDAsMHgwYiwweDAwLDB4MGEsMHgwNCwweDQ2LDB4ODMsMHgwMSwweDJjIH19LAorIHsxNiwgMHhmZDkwLCAwLCB7MHg0MCwweDFhLDB4MDAsMHgwNiwweDgwLDB4MDAsMHg4MSwweDAwLDB4MjQsMHg0MCwweDA4LDB4MjAsMHgwYSwweDBjLDB4MDEsMHhhMyB9fSwKKyB7MTYsIDB4ZmRhMCwgMCwgezB4MDAsMHgyNCwweDAwLDB4MDgsMHg4MCwweDAyLDB4MDAsMHgwMCwweGExLDB4MDAsMHgyMCwweDQwLDB4MDksMHgzMCwweDAyLDB4MDIgfX0sCisgezE2LCAweGZkYjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NjAsMHgwMiwweGM4LDB4MDAsMHgyMiwweDAwIH19LAorIHsxNiwgMHhmZGMwLCAwLCB7MHgwZiwweDkwLDB4MDIsMHgyNSwweDAwLDB4ZGEsMHgwMCwweDNlLDB4NDAsMHgwYywweDkwLDB4MDIsMHhjYywweDAwLDB4ZmQsMHgwMCB9fSwKKyB7MTYsIDB4ZmRkMCwgMCwgezB4MzcsMHg0MCwweDBjLDB4MTAsMHgxMywweDJjLDB4MDIsMHhhZiwweDAwLDB4MzIsMHhjMCwweDBkLDB4YjAsMHgwMywweDJjLDB4MDAgfX0sCisgezE2LCAweGZkZTAsIDAsIHsweGNhLDB4MDAsMHgzMiwweDQwLDB4NGMsMHg5MCwweDBiLDB4MDAsMHgwMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmZGYwLCAwLCB7MHhhMCwweDFkLDB4ZjAsMHgwMCwweGZjLDB4MDAsMHgzZiwweDAwLDB4MDcsMHhjMCwweDAzLDB4ZjQsMHgxYywweGY0LDB4MDAsMHgzZiB9fSwKKyB7MTYsIDB4ZmUwMCwgMCwgezB4MDAsMHgxZiwweGMwLDB4MjMsMHhiMCwweDAyLDB4OWQsMHgwMSwweDNmLDB4NDAsMHg4ZiwweGMwLDB4MDcsMHhmYywweDAyLDB4ZmYgfX0sCisgezE2LCAweGZlMTAsIDAsIHsweDAwLDB4N2IsMHgwMCwweDBmLDB4YzAsMHgwMywweGYwLDB4MDAsMHhmZCwweDAwLDB4M2YsMHg0MCwweDBmLDB4NzAsMHgwMywweGU4IH19LAorIHsxNiwgMHhmZTIwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZhLDB4MDAsMHhjYiwweDgwLDB4M2YsMHgyNCB9fSwKKyB7MTYsIDB4ZmUzMCwgMCwgezB4MGEsMHhjMSwweDAzLDB4ZmMsMHgyNCwweGNkLDB4MjAsMHgzNywweDBhLDB4MGMsMHhjMiwweDgzLDB4MzAsMHg4MCwweGRjLDB4MDIgfX0sCisgezE2LCAweGZlNDAsIDAsIHsweDNmLDB4Y2MsMHgwZCwweGQ5LDB4MDMsMHgzYywweDU4LDB4ZGYsMHgzMCwweDMzLDB4YzgsMHgwZCwweGY0LDB4MjMsMHgzYywweDQwIH19LAorIHsxNiwgMHhmZTUwLCAwLCB7MHhmZiwweDAwLDB4M2YsMHhjNSwweDRmLDB4ZjAsMHgyMywweGIwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmU2MCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDIsMHgwYiwweDgyLDB4MmUsMHgwOCwweDBkLDB4YjcsMHgwMiwweGZkLDB4MDAsMHg4MywweDE4LDB4MGEgfX0sCisgezE2LCAweGZlNzAsIDAsIHsweDU4LDB4MGEsMHg4NCwweGEyLDB4YTUsMHhhMCwweDg5LDB4MzAsMHgyMiwweDU1LDB4MDgsMHgxMiwweDYyLDB4YmQsMHg5MCwweDhmIH19LAorIHsxNiwgMHhmZTgwLCAwLCB7MHg2MiwweDIxLDB4ZDYsMHg0OCwweGYzLDB4MDIsMHgzYywweGM1LDB4YmYsMHg0OCwweDJmLDB4ZDgsMHg0YiwweGI3LDB4MDIsMHhlMCB9fSwKKyB7MTYsIDB4ZmU5MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhlYywweDAwLDB4ODMsMHgwMCwweDJlLDB4ODkgfX0sCisgezE2LCAweGZlYTAsIDAsIHsweDI4LDB4MDAsMHgwMiwweGVjLDB4YTAsMHg4OSwweDIyLDB4MjgsMHg4MiwweDA4LDB4MTIsMHgwMiwweDI4LDB4NDAsMHg5YSwweDA4IH19LAorIHsxNiwgMHhmZWIwLCAwLCB7MHgyOCwweGM4LDB4ODgsMHhiMiwweDBhLDB4MGQsMHgxMCwweDkzLDB4MTAsMHhhMCwweGM4LDB4MjgsMHgzMCwweDAyLDB4NGMsMHgwMCB9fSwKKyB7MTYsIDB4ZmVjMCwgMCwgezB4YjMsMHg2MCwweDJjLDB4YzQsMHgwYiwweDMwLDB4YzIsMHhlMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZlZDAsIDAsIHsweGMwLDB4MTUsMHhhYywweDQwLDB4OGIsMHgwMCwweDJlLDB4ODAsMHgwOCwweGIxLDB4MDIsMHhlYywweDAyLDB4OGIsMHgwMCwweDIwIH19LAorIHsxNiwgMHhmZWUwLCAwLCB7MHhkMCwweDBhLDB4OTAsMHgwMiwweGFjLDB4MDAsMHgwYiwweDAxLDB4MjYsMHg0MCwweDA4LDB4OTQsMHgwMiwweDhjLDB4MDAsMHg4YiB9fSwKKyB7MTYsIDB4ZmVmMCwgMCwgezB4MDAsMHgyMiwweGMwLDB4MDgsMHhiMCwweDAyLDB4MmMsMHgxMCwweGJiLDB4MDAsMHgyZSwweGMwLDB4MGIsMHhiMCwweDAyLDB4ZjAgfX0sCisgezE2LCAweGZmMDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE0LDB4OGMsMHgyMCwweGNiLDB4MDIsMHgzZSwweDJkIH19LAorIHsxNiwgMHhmZjEwLCAwLCB7MHgwOCwweDgwLDB4MDMsMHhlYywweDA4LDB4YzksMHg4MCwweDFlLDB4MDQsMHgwYywweGIwLDB4MDMsMHgwMSwweDA4LDB4NTAsMHgxOCB9fSwKKyB7MTYsIDB4ZmYyMCwgMCwgezB4M2UsMHg0MCwweDBjLDB4MDQsMHgwMywweDJjLDB4MDAsMHhkYiwweDAxLDB4MzIsMHhjMCwweDBjLDB4YjAsMHgwYiwweDJjLDB4MDggfX0sCisgezE2LCAweGZmMzAsIDAsIHsweGJiLDB4MDAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4ODAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmZjQwLCAwLCB7MHhlMSwweDAwLDB4YmMsMHgwMCwweGZmLDB4MDAsMHgzZiwweDYwLDB4MGYsMHhjMCwweDIzLDB4ZWMsMHgwMCwweGZmLDB4YzAsMHhiZSB9fSwKKyB7MTYsIDB4ZmY1MCwgMCwgezB4NjAsMHg4ZiwweGM5LDB4MjMsMHhmNiwweDUwLDB4ZWQsMHg4MCwweGI4LDB4NTAsMHhhZiwweGMwLDB4MDMsMHhmYywweDAwLDB4ZmYgfX0sCisgezE2LCAweGZmNjAsIDAsIHsweDAwLDB4M2YsMHhjMSwweDBlLDB4YjAsMHgwMywweGZjLDB4MDQsMHhmZiwweDAyLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGY4IH19LAorIHsxNiwgMHhmZjcwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDAsMHhlYiwweDAwLDB4MzIsMHg4MCB9fSwKKyB7MTYsIDB4ZmY4MCwgMCwgezB4MGQsMHg5MCwweDAzLDB4MmMsMHgwMCwweDg5LDB4MDAsMHgzZSwweDk4LDB4OGMsMHgzMCwweDAzLDB4NjEsMHg4MCwweGZhLDB4NDAgfX0sCisgezE2LCAweGZmOTAsIDAsIHsweDNlLDB4NDAsMHgyYywweGE1LDB4MDMsMHgyYywweDAwLDB4ZmIsMHgwMSwweDNjLDB4YzAsMHgyYywweDMwLDB4MDMsMHgyYywweDAwIH19LAorIHsxNiwgMHhmZmEwLCAwLCB7MHhkYiwweDAyLDB4MzIsMHhjMCwweDBmLDB4YjAsMHgwMywweGQwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmZiMCwgMCwgezB4Y2EsMHgwMCwweDJlLDB4ODAsMHg4YiwweDgyLDB4YTAsMHhjMCwweDhjLDB4OTAsMHgwMiwweDNjLDB4MDAsMHg4YiwweGYwLDB4MjIgfX0sCisgezE2LCAweGZmYzAsIDAsIHsweGMyLDB4MGQsMHg4MCwweDAyLDB4MjcsMHgwMCwweDhiLDB4MTAsMHgyMiwweDQwLDB4MDgsMHg4MCwweDIyLDB4M2MsMHgwMCwweGJmIH19LAorIHsxNiwgMHhmZmQwLCAwLCB7MHgwMCwweDJmLDB4YzAsMHgwOCwweGYwLDB4MDIsMHgzYywweDAwLDB4YmYsMHgwMSwweGEzLDB4YzAsMHgwYiwweGYwLDB4MTIsMHhmMiB9fSwKKyB7MTYsIDB4ZmZlMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4YjMsMHgxYywweDIwLDB4NDAgfX0sCisgezE2LCAweGZmZjAsIDAsIHsweDA4LDB4MDAsMHgwNiwweDJjLDB4MDAsMHg5YiwweDAwLDB4MjAsMHhkMCwweDA4LDB4MjAsMHgwMiwweDRjLDB4MDAsMHhhMywweDAwIH19LAorIHsxNiwgMHg4MDEwLCAwLCB7MHgyYywweGMwLDB4MDgsMHgxMCwweDBhLDB4MGMsMHgwMCwweGJiLDB4MDAsMHgyOCwweGMwLDB4MDksMHgzMCwweDAyLDB4MGMsMHgwMCB9fSwKKyB7MTYsIDB4ODAyMCwgMCwgezB4YjMsMHgwMCwweDIwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhmOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgwMzAsIDAsIHsweDIyLDB4MTEsMHgxZSwweDAwLDB4OTcsMHhhMCwweDIxLDB4YTAsMHgwOCwweDc5LDB4MDIsMHgxZSwweDAwLDB4OTcsMHg5MCwweDIxIH19LAorIHsxNiwgMHg4MDQwLCAwLCB7MHg2MCwweDA5LDB4ZTgsMHgyMiwweDNlLDB4MDAsMHhhZiwweDg0LDB4MjEsMHhlNCwweDQ4LDB4NWMsMHgwMiwweDFlLDB4MDAsMHhiNyB9fSwKKyB7MTYsIDB4ODA1MCwgMCwgezB4OTAsMHgyZCwweGUwLDB4MDksMHg3OCwweDAwLDB4MWUsMHgwOSwweGIzLDB4OTAsMHgyMSwweGU0LDB4MGIsMHg3OCwweDAyLDB4ZDggfX0sCisgezE2LCAweDgwNjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE4LDB4MmMsMHg0MCwweGIzLDB4YjAsMHgzMiwweDQwIH19LAorIHsxNiwgMHg4MDcwLCAwLCB7MHgyYywweDgxLDB4MTMsMHgwYywweDQyLDB4ZDEsMHgwMCwweGIwLDB4YzAsMHg4YywweDMwLDB4MDMsMHg0OCwweDIwLDB4ZTMsMHgwMSB9fSwKKyB7MTYsIDB4ODA4MCwgMCwgezB4M2MsMHhjMCwweDBjLDB4MzAsMHgwMywweDBjLDB4MDAsMHhmMywweDEwLDB4M2MsMHhjMCwweGNkLDB4MzIsMHgwYiwweDBjLDB4NDAgfX0sCisgezE2LCAweDgwOTAsIDAsIHsweGQzLDB4MDAsMHgzMCwweGMwLDB4MGYsMHgzMCwweDAzLDB4ZDIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MGEwLCAwLCB7MHg0MCwweDE1LDB4YmMsMHgwMCwweGU3LDB4MDAsMHgzZiwweDgwLDB4MGIsMHhmMSwweDAzLDB4ZmQsMHgwMCwweDZkLDB4MDAsMHgzMiB9fSwKKyB7MTYsIDB4ODBiMCwgMCwgezB4NDAsMHgxZiwweDcwLDB4MDcsMHhkOCwweDQxLDB4YzMsMHgxMCwweDNiLDB4YzAsMHgwZiwweGQxLDB4MDMsMHhmZCwweDAwLDB4ZmYgfX0sCisgezE2LCAweDgwYzAsIDAsIHsweDEwLDB4M2YsMHhjMCwweDBlLDB4ZjAsMHgwMywweGVjLDB4MTAsMHhmZiwweDA4LDB4M2YsMHhjMywweDBmLDB4ZjAsMHgwMywweGQwIH19LAorIHsxNiwgMHg4MGQwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGVjLDB4MDQsMHhmYiwweDAyLDB4M2UsMHg0MCB9fSwKKyB7MTYsIDB4ODBlMCwgMCwgezB4MGIsMHhhMCwweDAzLDB4YWMsMHgwMCwweGRiLDB4MDAsMHgzNiwweDgwLDB4MGQsMHhiMCwweDAzLDB4YWMsMHgwMCwweGU4LDB4MDAgfX0sCisgezE2LCAweDgwZjAsIDAsIHsweDM2LDB4YzEsMHgyZSwweDkwLDB4MDMsMHgyYywweDAwLDB4Y2IsMHhhMCwweDM2LDB4ZGMsMHgwZiwweGIwLDB4MDMsMHgyZCwweDY4IH19LAorIHsxNiwgMHg4MTAwLCAwLCB7MHhmYiwweGEwLDB4OTIsMHhjMiwweDBjLDB4YjEsMHgwMywweGVhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODExMCwgMCwgezB4NDgsMHgxMSwweDljLDB4MDgsMHgzNywweDAwLDB4MmQsMHhjMCwweDBiLDB4ZTAsMHgwMiwweDFkLDB4ODAsMHhiNywweDA0LDB4MjMgfX0sCisgezE2LCAweDgxMjAsIDAsIHsweDAwLDB4MGEsMHg0MCwweDAyLDB4MWMsMHgxOCwweDg0LDB4MDAsMHgyNSwweGMwLDB4MTgsMHg1MCwweDMyLDB4MGQsMHg4MCwweGEzIH19LAorIHsxNiwgMHg4MTMwLCAwLCB7MHgzMCwweDIxLDB4Y2MsMHgwYiwweDM0LDB4ODIsMHgxYywweDEwLDB4YjcsMHgzMCwweDIxLDB4YzgsMHgwOCwweDcwLDB4MDIsMHhkMiB9fSwKKyB7MTYsIDB4ODE0MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDIwLDB4YjcsMHg4MCwweDJkLDB4NjAgfX0sCisgezE2LCAweDgxNTAsIDAsIHsweDBiLDB4ZmMsMHgyMiwweDllLDB4MDAsMHg4ZCwweDgwLDB4MjUsMHhhMCwweDA4LDB4ZjgsMHgyMiwweDkyLDB4MDAsMHhiNCwweDgwIH19LAorIHsxNiwgMHg4MTYwLCAwLCB7MHgyNSwweGUwLDB4MDgsMHhmOCwweDAyLDB4MWUsMHgwMCwweDg3LDB4YjAsMHgyMSwweGUwLDB4MDksMHg3YSwweDAyLDB4MWUsMHgxOCB9fSwKKyB7MTYsIDB4ODE3MCwgMCwgezB4YjMsMHg4MCwweDIxLDB4ZTAsMHgwOCwweDc4LDB4MDIsMHhmMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgxODAsIDAsIHsweDQ4LDB4MDQsMHhjNSwweDIwLDB4YjMsMHgwMSwweDJjLDB4ZDgsMHgwYiwweDNjLDB4MDIsMHgyYywweDA4LDB4YjksMHgwMCwweDIwIH19LAorIHsxNiwgMHg4MTkwLCAwLCB7MHgwMywweDBhLDB4MDAsMHg4MiwweDIyLDB4MDgsMHg5MCwweDBkLDB4MjYsMHhlNCwweDA4LDB4MTAsMHgwMiwweDBjLDB4MDAsMHhhMyB9fSwKKyB7MTYsIDB4ODFhMCwgMCwgezB4MDAsMHgyMiwweGMwLDB4MGIsMHgzMCwweDAyLDB4NmMsMHgwMCwweGIzLDB4MDAsMHgyMiwweGMwLDB4MjgsMHgzMCwweDAyLDB4YzIgfX0sCisgezE2LCAweDgxYjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDA1LDB4OTksMHgwMCwweGZhLDB4MDIsMHgzZiwweDkwIH19LAorIHsxNiwgMHg4MWMwLCAwLCB7MHgwZiwweGVjLDB4MjMsMHhhOCwweDAwLDB4ZGEsMHgwMCwweDM1LDB4ODAsMHgwZCwweGUwLDB4MDIsMHhiYSwweDAyLDB4ZmUsMHhjMiB9fSwKKyB7MTYsIDB4ODFkMCwgMCwgezB4YjYsMHhhMCwweDBlLDB4ZTQsMHgwYiwweDI4LDB4MDAsMHhjYSwweDAwLDB4YjIsMHg4MCwweDBmLDB4YTAsMHgwYiwweDI4LDB4MDAgfX0sCisgezE2LCAweDgxZTAsIDAsIHsweGZhLDB4MDAsMHgzMiwweDgwLDB4MGMsMHhhMCwweDAzLDB4ZmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MWYwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MiwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4ODIwMCwgMCwgezB4MDAsMHgwZiwweDgxLDB4MDMsMHhlMCwweDQwLDB4ZTgsMHgxMCwweDNhLDB4MDAsMHg0ZiwweDg0LDB4ODMsMHhlMCwweDAwLDB4ZjggfX0sCisgezE2LCAweDgyMTAsIDAsIHsweDAwLDB4M2EsMHgwMCwweDBmLDB4MDAsMHgwMywweGEwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyIH19LAorIHsxNiwgMHg4MjIwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGU1LDB4MDAsMHhjOSwweDAyLDB4M2UsMHg0MCB9fSwKKyB7MTYsIDB4ODIzMCwgMCwgezB4MGYsMHg5MCwweDIzLDB4MjQsMHgwMCwweGM5LDB4MDAsMHgzMiwweDY4LDB4MmYsMHgxMCwweDAzLDB4MjQsMHgwMCwweGU5LDB4MTQgfX0sCisgezE2LCAweDgyNDAsIDAsIHsweDMyLDB4NDAsMHgwZCwweDkwLDB4MGIsMHgwNCwweDAwLDB4ZDksMHgwMCwweDFlLDB4NDAsMHgwYywweDkwLDB4MDMsMHgyNCwweDAwIH19LAorIHsxNiwgMHg4MjUwLCAwLCB7MHhjOSwweDAwLDB4MzYsMHg0MCwweDBjLDB4OTAsMHgwMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODI2MCwgMCwgezB4ODAsMHgxNCwweDY0LDB4MDAsMHg4OSwweDAxLDB4MmUsMHg0MCwweDRiLDB4OTAsMHgxMiwweDI0LDB4MDAsMHg4OSwweGMyLDB4YTIgfX0sCisgezE2LCAweDgyNzAsIDAsIHsweDYwLDB4ODgsMHg5MCwweDAzLDB4NjQsMHgwMCwweDg5LDB4YzEsMHhhMiwweDQwLDB4NDgsMHgxNiwweDAzLDB4NjQsMHgwMiwweDg5IH19LAorIHsxNiwgMHg4MjgwLCAwLCB7MHgwMCwweDJlLDB4NDAsMHgwOCwweDkwLDB4MjIsMHgyNCwweDAwLDB4ODksMHgwMCwweDNlLDB4NDAsMHgyOCwweDkwLDB4MGEsMHgyMCB9fSwKKyB7MTYsIDB4ODI5MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDQsMHgyNCwweDAwLDB4ODksMHgwMiwweDJlLDB4NDAgfX0sCisgezE2LCAweDgyYTAsIDAsIHsweDBiLDB4MTAsMHgwMiwweDI0LDB4MDAsMHg4OSwweDEwLDB4MjIsMHg0MCwweDg5LDB4OTAsMHgwMiwweGFjLDB4MDAsMHhhMSwweDA4IH19LAorIHsxNiwgMHg4MmIwLCAwLCB7MHgyMiwweDQwLDB4MDksMHg5OCwweDAyLDB4YTQsMHgwMCwweDg5LDB4MDAsMHgyYSwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4ODJjMCwgMCwgezB4ODksMHgwMCwweDI2LDB4NDAsMHgwOCwweDEwLDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgyZDAsIDAsIHsweDA4LDB4MDAsMHgyNCwweDAwLDB4ODEsMHgwMCwweDJjLDB4NDEsMHgwYiwweDEyLDB4MDIsMHgwNCwweDgxLDB4ODEsMHgyMCwweDIyIH19LAorIHsxNiwgMHg4MmUwLCAwLCB7MHg0OCwweDA4LDB4MTIsMHgwMiwweGM0LDB4ODEsMHg4MSwweDI0LDB4MDIsMHg0OCwweDBhLDB4OTAsMHgwMiwweDg0LDB4YTAsMHg4MSB9fSwKKyB7MTYsIDB4ODJmMCwgMCwgezB4MjgsMHg2YywweDRhLDB4MDgsMHgxMiwweGQyLDB4MDQsMHhhMSwweDgxLDB4MjgsMHgyYywweDRhLDB4MDgsMHgxMiwweDgyLDB4MDIgfX0sCisgezE2LCAweDgzMDAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDA4LDB4NjEsMHg0MCwweGM4LDB4MDAsMHgyZSwweDE0IH19LAorIHsxNiwgMHg4MzEwLCAwLCB7MHgwZiwweDg1LDB4MGIsMHgyMSwweDQyLDB4Y2EsMHg1MCwweDIyLDB4MTQsMHgwZCwweDg1LDB4NDMsMHhhMSwweDQwLDB4ZTgsMHg1MCB9fSwKKyB7MTYsIDB4ODMyMCwgMCwgezB4MzAsMHgwMCwweDBkLDB4ODUsMHgwMiwweGExLDB4YzAsMHhkOCwweDIwLDB4M2EsMHgwOCwweDJjLDB4ODIsMHgwYiwweDIwLDB4ODIgfX0sCisgezE2LCAweDgzMzAsIDAsIHsweGM4LDB4MjAsMHgzNCwweDA5LDB4OGMsMHg4MiwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MzQwLCAwLCB7MHg5OCwweDBkLDB4ZmMsMHgwMiwweGY5LDB4MDAsMHgzZiwweDQwLDB4NGYsMHhkMSwweDAzLDB4ZTQsMHg0MCwweGY1LDB4MTQsMHhiZiB9fSwKKyB7MTYsIDB4ODM1MCwgMCwgezB4NDQsMHgwZCwweDUxLDB4MjMsMHg1YywweDQwLDB4ZjUsMHgxMCwweDFmLDB4NGUsMHg0ZCwweDUwLDB4MDMsMHg2NCwweDA4LDB4ZjkgfX0sCisgezE2LCAweDgzNjAsIDAsIHsweDI4LDB4M2UsMHg0YSwweDhmLDB4OTIsMHg4MywweGU0LDB4YTAsMHhmOSwweDI4LDB4M2EsMHg0YiwweDBmLDB4OTIsMHg4MywweGU2IH19LAorIHsxNiwgMHg4MzcwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGY0LDB4NDAsMHhmZCwweDAwLDB4MzAsMHg0MCB9fSwKKyB7MTYsIDB4ODM4MCwgMCwgezB4MGMsMHg5MCwweDAzLDB4MjQsMHgwMCwweGRkLDB4MDAsMHgzYiwweDQwLDB4MGUsMHg5MCwweDAzLDB4NzQsMHgwMCwweDVkLDB4MDAgfX0sCisgezE2LCAweDgzOTAsIDAsIHsweDM2LDB4NjQsMHgwZCwweGQwLDB4MDAsMHhhNiwweDAwLDB4ZjksMHg0MCwweDMyLDB4NzgsMHgwYywweDk5LDB4MDMsMHgyNCwweDQwIH19LAorIHsxNiwgMHg4M2EwLCAwLCB7MHhjOSwweDkwLDB4MzIsMHg1MCwweDBmLDB4OWIsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODNiMCwgMCwgezB4MzgsMHgxMCwweGUyLDB4ODAsMHhiOCwweDAwLDB4MjIsMHgwMSwweDA4LDB4ODAsMHgwYSwweDIwLDB4MDAsMHg4OCwweDAwLDB4MmEgfX0sCisgezE2LCAweDgzYzAsIDAsIHsweDAwLDB4MDgsMHg4MCwweDAyLDB4MjAsMHgwMCwweDg4LDB4MDAsMHgyMiwweDIwLDB4MDgsMHg4YSwweDhiLDB4ZTEsMHgwMCwweGI4IH19LAorIHsxNiwgMHg4M2QwLCAwLCB7MHg4MCwweDIyLDB4MzAsMHgyOCwweDBkLDB4MDIsMHgyMiwweDAwLDB4ZDgsMHhlNCwweDIyLDB4MjgsMHgwYiwweDhmLDB4MGEsMHgwZSB9fSwKKyB7MTYsIDB4ODNlMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDgwLDB4YjEsMHgwMCwweGEwLDB4NDAgfX0sCisgezE2LCAweDgzZjAsIDAsIHsweDA4LDB4MTAsMHgwMiwweDA0LDB4MDAsMHg4OSwweDAwLDB4MDgsMHg0MCwweDBhLDB4OTAsMHg0MiwweDQ0LDB4MDAsMHg5MSwweDAwIH19LAorIHsxNiwgMHg4NDAwLCAwLCB7MHgyMCwweDU4LDB4MjgsMHg5MCwweDAyLDB4ODUsMHgwMCwweDgxLDB4MjAsMHhhMCwweDRjLDB4MDksMHgxMiwweDBhLDB4MDQsMHg4MCB9fSwKKyB7MTYsIDB4ODQxMCwgMCwgezB4OTEsMHg0MCwweGEwLDB4NDAsMHgwYiwweDEwLDB4MDIsMHgwMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg0MjAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAwLDB4YjksMHgwMiwweDIwLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgwNCwweDAwLDB4ODksMHgwMSwweDIyIH19LAorIHsxNiwgMHg4NDMwLCAwLCB7MHg0MCwweDI4LDB4OTAsMHgyMiwweDA0LDB4MDAsMHg4OSwweDEwLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiMSB9fSwKKyB7MTYsIDB4ODQ0MCwgMCwgezB4MDAsMHgyMiwweDQwLDB4ODEsMHg5MCwweDAyLDB4MDQsMHgwMCwweDkxLDB4MDAsMHgyMiwweDQwLDB4MGIsMHg5MCwweDAyLDB4MDYgfX0sCisgezE2LCAweDg0NTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTUsMHgwMCwweGYxLDB4MDAsMHgzMiwweDYwIH19LAorIHsxNiwgMHg4NDYwLCAwLCB7MHgyYywweDkyLDB4MTMsMHgyNCwweDAyLDB4ZDEsMHgxMCwweDNhLDB4NDAsMHgwZSwweDEyLDB4MDMsMHg2NiwweDA0LDB4ZDksMHgwMCB9fSwKKyB7MTYsIDB4ODQ3MCwgMCwgezB4YjYsMHg0MCwweDBkLDB4MTksMHgwMywweGE0LDB4MDAsMHhmOSwweDAwLDB4MzIsMHg0MCwweDA5LDB4OTAsMHgwMSwweDI0LDB4MDAgfX0sCisgezE2LCAweDg0ODAsIDAsIHsweGQ5LDB4MDIsMHgyMiwweDQwLDB4MGYsMHg5MCwweDAzLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NDkwLCAwLCB7MHgyYSwweDAxLDB4YTUsMHgwMCwweGY5LDB4MDAsMHgzZSwweDY0LDB4MGYsMHgxMCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4ODEsMHgzZSB9fSwKKyB7MTYsIDB4ODRhMCwgMCwgezB4NjYsMHg4ZiwweDkwLDB4MjMsMHhlNCwweDgwLDB4ZjksMHgwNCwweDNlLDB4NDAsMHg4ZiwweDkwLDB4MDMsMHhlNCwweDA0LDB4ZjkgfX0sCisgezE2LCAweDg0YjAsIDAsIHsweDAwLDB4M2MsMHg0MCwweDBlLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4MTAsMHgwMywweGNhIH19LAorIHsxNiwgMHg4NGMwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmEsMHgxMCwweGEwLDB4MDAsMHhmOCwweDI0LDB4M2UsMHgwMCB9fSwKKyB7MTYsIDB4ODRkMCwgMCwgezB4MmMsMHg4NCwweDAzLDB4MjAsMHgwMCwweGI4LDB4MjAsMHgzZSwweDAwLDB4OGMsMHg4MCwweDAzLDB4YTAsMHgwMCwweDcwLDB4ODIgfX0sCisgezE2LCAweDg0ZTAsIDAsIHsweDMyLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgyMCwweDA4LDB4ZjgsMHgwMCwweDMyLDB4MDAsMHgyYywweDgwLDB4MGIsMHgyMCwweDA4IH19LAorIHsxNiwgMHg4NGYwLCAwLCB7MHhjOCwweDAwLDB4M2UsMHgwMCwweDBjLDB4ODAsMHgwMywweGNhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODUwMCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDQsMHhiZSwweDgwLDB4M2EsMHg4MCwweDA4LDB4YTAsMHgwMiwweDI4LDB4MDQsMHg4ZSwweDAwLDB4NmQgfX0sCisgezE2LCAweDg1MTAsIDAsIHsweDkwLDB4MGQsMHhhMCwweDAyLDB4M2EsMHgwMCwweDhlLDB4ODAsMHhhMiwweDgwLDB4MGUsMHhlMCwweDBiLDB4NjgsMHgwMCwweGJhIH19LAorIHsxNiwgMHg4NTIwLCAwLCB7MHgwMCwweDIyLDB4ODAsMHgwOCwweGEwLDB4MDIsMHgyOCwweDAwLDB4ZGEsMHgwMCwweDJlLDB4ODAsMHgwOCwweGEwLDB4MDIsMHhjYSB9fSwKKyB7MTYsIDB4ODUzMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4ODEsMHg0YywweDAwLDB4YjEsMHgwMCwweDJjLDB4YzAgfX0sCisgezE2LCAweDg1NDAsIDAsIHsweDA4LDB4MzAsMHgwMiwweDBjLDB4MTgsMHhhMywweDAyLDB4MmMsMHgxMCwweDg4LDB4MzAsMHgwNiwweDgyLDB4ODEsMHhhMCwweDAwIH19LAorIHsxNiwgMHg4NTUwLCAwLCB7MHgyYSwweGMwLDB4MGIsMHgzMCwweDBhLDB4NGMsMHgwMCwweGIzLDB4MDAsMHgyMCwweGMwLDB4MWEsMHhiMCwweDAyLDB4OGMsMHgwMSB9fSwKKyB7MTYsIDB4ODU2MCwgMCwgezB4ODMsMHgwMCwweDJjLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhjYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg1NzAsIDAsIHsweDIwLDB4MDEsMHgxYywweDEwLDB4YjQsMHgwYSwweDJiLDB4YzgsMHgwOCwweDMxLDB4MjYsMHgxYywweDAwLDB4ODYsMHgwMCwweDJkIH19LAorIHsxNiwgMHg4NTgwLCAwLCB7MHhjMCwweDA5LDB4NzIsMHgwMiwweDFkLDB4MDAsMHhhNSwweDQwLDB4MjksMHhjMCwweDBhLDB4NjAsMHgwMiwweDVjLDB4ODgsMHhiMyB9fSwKKyB7MTYsIDB4ODU5MCwgMCwgezB4MjAsMHgyNSwweGM4LDB4MGEsMHg3MiwweDAyLDB4OWMsMHg4MCwweDk3LDB4MjAsMHgyYywweGU4LDB4ODAsMHg3MiwweDAyLDB4ZTggfX0sCisgezE2LCAweDg1YTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA4LDB4MTYsMHgwMCwweGI1LDB4ODAsMHgzZCwweGUyIH19LAorIHsxNiwgMHg4NWIwLCAwLCB7MHgwYywweDdhLDB4OGIsMHgwZSwweGMwLDB4YTcsMHg4MSwweDJjLDB4MjAsMHgwYywweGZjLDB4MDMsMHg5MiwweDAyLDB4ZWYsMHg4MCB9fSwKKyB7MTYsIDB4ODVjMCwgMCwgezB4MzksMHhlNCwweDBiLDB4ZDgsMHgwMSwweDFmLDB4MDAsMHhmNywweDgwLDB4YjMsMHhmNCwweDhlLDB4NzksMHgwMywweDhlLDB4MDAgfX0sCisgezE2LCAweDg1ZDAsIDAsIHsweGM3LDB4YzQsMHgzZCwweGU4LDB4MmMsMHg3YiwweDAzLDB4ZWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NWUwLCAwLCB7MHgwOCwweDFkLDB4YWMsMHgwMCwweGY4LDB4MDAsMHgzZSwweGRkLDB4ODcsMHhiNiwweDAzLDB4ZWQsMHhjYywweGU5LDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4ODVmMCwgMCwgezB4NDAsMHgwZiwweGIwLDB4MDcsMHhjYywweDEwLDB4MGIsMHgwMCwweDM2LDB4ZDgsMHgwZiwweDgwLDB4NDMsMHhhZCwweDgwLDB4ZmIgfX0sCisgezE2LCAweDg2MDAsIDAsIHsweDI4LDB4M2EsMHhjMCwweDBkLDB4YjQsMHgwMywweDZjLDB4ZTIsMHhlYiwweDYwLDB4M2UsMHhkNCwweDBmLDB4YjAsMHgwMywweGMyIH19LAorIHsxNiwgMHg4NjEwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNSwweGZlLDB4MDAsMHhmZSwweDkwLDB4M2YsMHhlNSB9fSwKKyB7MTYsIDB4ODYyMCwgMCwgezB4MGUsMHhmOCwweDAzLDB4M2UsMHgxMCwweGZmLDB4OTAsMHgxNywweDYwLDB4MGYsMHhmYywweDAzLDB4N2EsMHgwMCwweGVlLDB4ODAgfX0sCisgezE2LCAweDg2MzAsIDAsIHsweDM3LDB4ZTIsMHgwZSwweDc4LDB4MGYsMHhmZiwweDQwLDB4ZWYsMHg4OCwweDFmLDB4ZTAsMHgwYywweGY4LDB4ODMsMHhmZSwweDgwIH19LAorIHsxNiwgMHg4NjQwLCAwLCB7MHhjZiwweGQwLDB4YjMsMHhmMCwweDBjLDB4ZjgsMHhjMywweDEwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODY1MCwgMCwgezB4YTgsMHgxMSwweDljLDB4NDAsMHhiNCwweDEwLDB4MGYsMHhjYywweDAwLDB4NzIsMHgwMiwweDFjLDB4MDAsMHhiNiwweDAyLDB4MDkgfX0sCisgezE2LCAweDg2NjAsIDAsIHsweGMwLDB4MjgsMHhmMCwweDAyLDB4OTgsMHgwMCwweGE2LDB4MDAsMHgyMSwweGMwLDB4MGIsMHg2MCwweDAzLDB4ZmMsMHgwMiwweDg3IH19LAorIHsxNiwgMHg4NjcwLCAwLCB7MHgwMCwweDJkLDB4YzAsMHgwOCwweDcwLDB4MDIsMHhkZSwweDAwLDB4OGYsMHgxMCwweDIxLDB4YzAsMHgwOCwweGYwLDB4MDMsMHg2YSB9fSwKKyB7MTYsIDB4ODY4MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHg5NCwweDAwLDB4YjYsMHgwMiwweDJmLDB4YzIgfX0sCisgezE2LCAweDg2OTAsIDAsIHsweDFhLDB4MzAsMHg4MCwweDFjLDB4MDAsMHhiNiwweDA4LDB4MDEsMHg0MCwweDBhLDB4ZjAsMHgwMiwweDE4LDB4MDAsMHg4NywweDAwIH19LAorIHsxNiwgMHg4NmEwLCAwLCB7MHgyMSwweGMwLDB4MGIsMHhkMCwweDAyLDB4OWMsMHgxMCwweDg3LDB4MDAsMHgyOSwweGMwLDB4MDgsMHg3MCwweDAyLDB4ZGMsMHg0NCB9fSwKKyB7MTYsIDB4ODZiMCwgMCwgezB4ODcsMHgxMCwweDY0LDB4YzAsMHgwOCwweDcwLDB4MDIsMHgwNiwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg2YzAsIDAsIHsweDYwLDB4MTQsMHhjZSwweDYwLDB4YjAsMHgwMCwweDJjLDB4YzAsMHgwOCwweDM0LDB4MGEsMHgwYywweDA4LDB4YjAsMHgwNCwweDAwIH19LAorIHsxNiwgMHg4NmQwLCAwLCB7MHg0MCwweDA4LDB4MzAsMHhhMiwweDg5LDB4ODAsMHhhMiwweDYyLDB4MjAsMHhlMCwweDBiLDB4MDAsMHgwYSwweGNjLDB4MDgsMHg4MyB9fSwKKyB7MTYsIDB4ODZlMCwgMCwgezB4MDAsMHg2YywweGMwLDB4MDgsMHgzMCwweDUyLDB4Y2MsMHgwMCwweDgzLDB4MDAsMHgyNCwweGMwLDB4MDgsMHgzMCwweDAyLDB4NTggfX0sCisgezE2LCAweDg2ZjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YWUsMHgwMCwweGY4LDB4MDAsMHgzZiwweGQwIH19LAorIHsxNiwgMHg4NzAwLCAwLCB7MHgwZSwweGZjLDB4MDMsMHgzYywweDAwLDB4ZjksMHgwMCwweDkyLDB4ODQsMHgwZiwweGZjLDB4MDMsMHg2NCwweDAwLDB4ODAsMHgwMCB9fSwKKyB7MTYsIDB4ODcxMCwgMCwgezB4YjcsMHhjMywweDBmLDB4YjgsMHg4MywweGJjLDB4MDQsMHhlZiwweDAwLDB4M2YsMHhjMCwweDNjLDB4ZjAsMHgwMywweGZjLDB4MDIgfX0sCisgezE2LCAweDg3MjAsIDAsIHsweGNmLDB4MDAsMHgzNywweGMwLDB4MjgsMHhmMCwweDEzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NzMwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMCwweGY4LDB4NDEsMHgzZSwweGM4LDB4MGYsMHgzMiwweDAzLDB4ZWMsMHgwMCwweGY4LDB4MDAsMHgzYSB9fSwKKyB7MTYsIDB4ODc0MCwgMCwgezB4YzQsMHgwZiwweGIxLDB4MDMsMHhjNCwweDAwLDB4ZjksMHgwMCwweDM2LDB4YzAsMHgwZiwweGU0LDB4MGIsMHhlYywweDA0LDB4ZmIgfX0sCisgezE2LCAweDg3NTAsIDAsIHsweDAwLDB4M2UsMHhjMSwweDBmLDB4YjAsMHg0MywweGVjLDB4MDQsMHhmYiwweDAwLDB4M2EsMHhjMCwweDBmLDB4YjAsMHgwMywweGU0IH19LAorIHsxNiwgMHg4NzYwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGY0LDB4MDAsMHhmYywweDgwLDB4M2YsMHhjMCB9fSwKKyB7MTYsIDB4ODc3MCwgMCwgezB4MWYsMHhmMCwweDAzLDB4M2MsMHgwOCwweGZiLDB4MDAsMHgzMywweDgwLDB4MmUsMHhmMCwweDEzLDB4YTQsMHgwNCwweGNiLDB4MDAgfX0sCisgezE2LCAweDg3ODAsIDAsIHsweGI5LDB4YzAsMHgyYywweGQ4LDB4MGIsMHgzYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwOSwweDcwLDB4MDAsMHgyYywweDA0IH19LAorIHsxNiwgMHg4NzkwLCAwLCB7MHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGMwLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODdhMCwgMCwgezB4YzEsMHgwMCwweDZjLDB4MDAsMHhiOCwweDgwLDB4MmUsMHhjMCwweDBiLDB4YjAsMHgwMywweDZjLDB4MDAsMHhiOSwweDE2LDB4MjggfX0sCisgezE2LCAweDg3YjAsIDAsIHsweDcyLDB4MDgsMHhiMCwweDIyLDB4MjcsMHg0MCwweGRiLDB4MDAsMHgyMiwweGMwLDB4MDgsMHhiZCwweDgyLDB4MmMsMHgwOCwweGJiIH19LAorIHsxNiwgMHg4N2MwLCAwLCB7MHgwMCwweDJlLDB4YzAsMHg0OCwweGIwLDB4MDIsMHgyYywweDAwLDB4YmIsMHgwMCwweDJlLDB4YzEsMHgwYiwweGIwLDB4MDIsMHhlMCB9fSwKKyB7MTYsIDB4ODdkMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4YjgsMHg2MCwweDJlLDB4YzAgfX0sCisgezE2LCAweDg3ZTAsIDAsIHsweDBiLDB4YjAsMHgwMiwweDJjLDB4MDAsMHhiMSwweDAwLDB4MmEsMHg4NCwweDRhLDB4MzAsMHgyMiwweGFjLDB4MjAsMHg5OCwweDgwIH19LAorIHsxNiwgMHg4N2YwLCAwLCB7MHgyYSwweGMwLDB4MDgsMHgzMCwweDAyLDB4YWMsMHgwMCwweDNiLDB4MDAsMHgyYywweGMwLDB4MGEsMHhiMCwweDAyLDB4YWMsMHgwOCB9fSwKKyB7MTYsIDB4ODgwMCwgMCwgezB4YmIsMHgwMCwweDJlLDB4YzAsMHgwYiwweGIwLDB4NDIsMHhlMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg4MTAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAxLDB4YjAsMHgwMCwweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHg0YywweDA0LDB4YjAsMHgwMCwweDJhIH19LAorIHsxNiwgMHg4ODIwLCAwLCB7MHg4MCwweDA4LDB4MzAsMHgwMiwweDAwLDB4MDAsMHgxMCwweDA0LDB4MjgsMHhjMCwweDA4LDB4MjAsMHg0MiwweDhjLDB4MDAsMHhiMyB9fSwKKyB7MTYsIDB4ODgzMCwgMCwgezB4MDAsMHgyYywweGMwLDB4NDIsMHgzMCwweDBhLDB4OGMsMHgwMCwweGIzLDB4MDAsMHgyYywweGMwLDB4OGIsMHgzMCwweDAyLDB4YzIgfX0sCisgezE2LCAweDg4NDAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NjQsMHgwMCwweGY4LDB4NTAsMHgzZiwweGMwIH19LAorIHsxNiwgMHg4ODUwLCAwLCB7MHgwYiwweGYwLDB4MDMsMHgzYywweDAwLDB4ZmEsMHgwNCwweDMyLDB4ODAsMHgwZSwweGYwLDB4MjMsMHhhYywweDAwLDB4ZDksMHgwMCB9fSwKKyB7MTYsIDB4ODg2MCwgMCwgezB4M2IsMHhjMCwweDBjLDB4OTAsMHgwMywweGJjLDB4MDQsMHhmZiwweDAwLDB4M2QsMHhjMCwweDJlLDB4ZjAsMHgwYiwweDNjLDB4MDAgfX0sCisgezE2LCAweDg4NzAsIDAsIHsweGZmLDB4MDQsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4YzAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ODgwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgwMCwweGZjLDB4MDAsMHgzZiwweGMwLDB4MDcsMHhmMCwweDAzLDB4ZmMsMHgwNCwweDdjLDB4MDIsMHhiNSB9fSwKKyB7MTYsIDB4ODg5MCwgMCwgezB4MDAsMHgwZiwweGYwLDB4MDMsMHhmMCwweDAwLDB4ZmMsMHgwMCwweDM3LDB4YzAsMHgwZiwweGYwLDB4MTMsMHg3YywweDAwLDB4ZmYgfX0sCisgezE2LCAweDg4YTAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDBkLDB4ZjAsMHgwMywweDZkLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDFmLDB4ZjAsMHgwMywweGU4IH19LAorIHsxNiwgMHg4OGIwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGQyLDB4MDAsMHhkNSwweDgwLDB4MzMsMHgwYSB9fSwKKyB7MTYsIDB4ODhjMCwgMCwgezB4NGMsMHhmOCwweDAzLDB4ZjIsMHgwMCwweGZjLDB4MDAsMHgzNywweDI2LDB4MWYsMHhjYSwweDAzLDB4YmMsMHhjNCwweGNmLDB4MjAgfX0sCisgezE2LCAweDg4ZDAsIDAsIHsweDMzLDB4ZTQsMHgwZiwweDc4LDB4MDMsMHgzZSwweDQ0LDB4Y2YsMHgwMCwweDNiLDB4Y2UsMHg5ZiwweDY4LDB4MTMsMHhkMCwweDAwIH19LAorIHsxNiwgMHg4OGUwLCAwLCB7MHhjZCwweDgwLDB4YjMsMHg2MCwweDBmLDB4ZmEsMHg4MywweGYwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODhmMCwgMCwgezB4ODAsMHgxMCwweGUwLDB4ODAsMHhjOSwweDI4LDB4MjIsMHgzMCwweDA4LDB4YjIsMHgyMiwweGVhLDB4MDEsMHhiOCwweDgyLDB4MjAgfX0sCisgezE2LCAweDg5MDAsIDAsIHsweDUwLDB4NGYsMHg5YywweDAwLDB4YTgsMHhkMSwweGRiLDB4MTAsMHhhNiwweGUwLDB4MTcsMHhiOCwweDAzLDB4ZWMsMHg4MCwweGRiIH19LAorIHsxNiwgMHg4OTEwLCAwLCB7MHgwOCwweDFmLDB4ZDAsMHgwYiwweGI4LDB4MDIsMHhmNiwweDAwLDB4ZmIsMHg4MCwweDIyLDB4NDAsMHgwYiwweGIwLDB4MDIsMHg2MCB9fSwKKyB7MTYsIDB4ODkyMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjNCwweDIwLDB4ODEsMHg4MCwweDIwLDB4MDAgfX0sCisgezE2LCAweDg5MzAsIDAsIHsweDhiLDB4MzAsMHg4MiwweGMwLDB4MDAsMHhiMCwweDEwLDB4MjgsMHgwOCwweDhiLDB4MTEsMHgzMCwweGM0LDB4ODQsMHg5MCwweDI4IH19LAorIHsxNiwgMHg4OTQwLCAwLCB7MHgyNCwweGM4LDB4MGIsMHgzMCwweDAyLDB4NGMsMHgwMCwweDgzLDB4MTAsMHgwNCwweGM4LDB4MGIsMHgzMCwweDAyLDB4Y2MsMHgwMCB9fSwKKyB7MTYsIDB4ODk1MCwgMCwgezB4YjMsMHgwMCwweDI0LDB4NDAsMHgwYiwweDMwLDB4MDIsMHhlMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg5NjAsIDAsIHsweGMwLDB4MTUsMHhhNiwweDAwLDB4ODEsMHgwMCwweDIyLDB4MTAsMHgwYiwweGIwLDB4MTIsMHhlYSwweDIwLDB4YmIsMHgwMCwweDJhIH19LAorIHsxNiwgMHg4OTcwLCAwLCB7MHg3MCwweDBhLDB4OWMsMHgwMiwweDYyLDB4MDAsMHg5OCwweDg4LDB4MjYsMHhjOCwweDAyLDB4YjIsMHgwMiwweDhlLDB4MDgsMHg4YiB9fSwKKyB7MTYsIDB4ODk4MCwgMCwgezB4MTgsMHgyMiwweGMwLDB4MGIsMHhhMCwweDAyLDB4ZWUsMHgyMCwweDNiLDB4MDAsMHgyNiwweDQwLDB4MGIsMHhiMCwweDAyLDB4NzAgfX0sCisgezE2LCAweDg5OTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZTAsMHgwMCwweGNiLDB4MDAsMHgzMiwweDgwIH19LAorIHsxNiwgMHg4OWEwLCAwLCB7MHgwZiwweGIwLDB4MDMsMHhlNywweDAwLDB4YjgsMHg1MiwweDNlLDB4MjAsMHg0YiwweDBjLDB4NDMsMHhlZiwweDgyLDB4OWIsMHhjMCB9fSwKKyB7MTYsIDB4ODliMCwgMCwgezB4MzIsMHhjMCwweDBiLDB4YjAsMHgwMiwweDZjLDB4MDEsMHg4YiwweDgwLDB4MmUsMHhjMCwweDBiLDB4YTAsMHg4MywweGU2LDB4MDAgfX0sCisgezE2LCAweDg5YzAsIDAsIHsweGZiLDB4MDAsMHgzNiwweDQwLDB4MGYsMHhmMCwweDAzLDB4ZDAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4OWQwLCAwLCB7MHhlMCwweDAxLDB4YjAsMHgwMiwweGZmLDB4MDQsMHgzZiwweDkwLDB4MGMsMHhmMSwweDAxLDB4ZjQsMHgwOCwweDdkLDB4ODAsMHgzNyB9fSwKKyB7MTYsIDB4ODllMCwgMCwgezB4MDAsMHgwZiwweGMwLDB4MjMsMHg5OCwweDAwLDB4ZjcsMHgwMCwweDJiLDB4ZTAsMHgwZiwweGY4LDB4MjMsMHhmYywweDA2LDB4ZmIgfX0sCisgezE2LCAweDg5ZjAsIDAsIHsweDgzLDB4YmYsMHhjMCwweDg3LDB4ZDAsMHgwMywweGRjLDB4MDAsMHhlZiwweDAwLDB4M2IsMHhjMCwweDBmLDB4YjAsMHgwMSwweGY4IH19LAorIHsxNiwgMHg4YTAwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGE2LDB4MDAsMHhjYiwweDAwLDB4MzMsMHg4MCB9fSwKKyB7MTYsIDB4OGExMCwgMCwgezB4MGYsMHhiMCwweDAzLDB4ZTEsMHgxMCwweGYyLDB4NDAsMHhiMiwweDAwLDB4M2QsMHg5NCwweDE3LDB4MmQsMHg0NCwweGZhLDB4NDEgfX0sCisgezE2LCAweDhhMjAsIDAsIHsweDMyLDB4YzAsMHg5ZiwweGIwLDB4MjMsMHgyYywweDAyLDB4Y2IsMHg0MCwweDMyLDB4YzAsMHg0ZiwweDkwLDB4MDMsMHgzZCwweDAwIH19LAorIHsxNiwgMHg4YTMwLCAwLCB7MHhjYiwweDAwLDB4M2UsMHg0MCwweDBmLDB4YjAsMHgwMywweDEwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGE0MCwgMCwgezB4ODgsMHgwNSwweDI2LDB4MDAsMHg4YiwweDcxLDB4MjAsMHhkNSwweDAzLDB4OTksMHgwMiwweGUwLDB4MDAsMHhiYiwweDgwLDB4MjIgfX0sCisgezE2LCAweDhhNTAsIDAsIHsweDYwLDB4MWMsMHg4MCwweDAzLDB4NjAsMHgwMCwweGI4LDB4MDIsMHgyMiwweGMyLDB4MGIsMHgzMiwweDAyLDB4MmMsMHgwMSwweDhmIH19LAorIHsxNiwgMHg4YTYwLCAwLCB7MHgwMiwweGQ3LDB4YzAsMHgwYiwweGEwLDB4MDMsMHg2ZCwweDQwLDB4NTMsMHg4MCwweDJlLDB4YzAsMHgwZSwweGYwLDB4NDMsMHg3MiB9fSwKKyB7MTYsIDB4OGE3MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg2OCwweDAyLDB4ODAsMHgwMCwweDI0LDB4MDAgfX0sCisgezE2LCAweDhhODAsIDAsIHsweDBiLDB4MzUsMHgyNiwweGMyLDB4MDAsMHhiMCwweDkwLDB4MjAsMHhjMCwweDg4LDB4MDAsMHgwMiwweDRmLDB4MjAsMHhiMywweDAyIH19LAorIHsxNiwgMHg4YTkwLCAwLCB7MHg2MCwweGUyLDB4MWIsMHgzOCwweDAyLDB4MGMsMHgwMCwweDg4LDB4MDAsMHg2MCwweGMwLDB4MGIsMHgzNCwweDgyLDB4NGMsMHgwMiB9fSwKKyB7MTYsIDB4OGFhMCwgMCwgezB4YTEsMHg5MCwweDJjLDB4NDAsMHgwYiwweDMwLDB4MDIsMHgzMCwweDAxLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhhYjAsIDAsIHsweDIwLDB4MDEsMHgzYSwweDA4LDB4OGMsMHhhMCwweDJkLDB4MjAsMHg0YiwweDc4LDB4MDIsMHhkYSwweDAwLDB4YjIsMHg5MCwweDIxIH19LAorIHsxNiwgMHg4YWMwLCAwLCB7MHg2NiwweDQ4LDB4NzksMHgwMiwweGRlLDB4NDAsMHhiNywweDkxLDB4YTEsMHhlMCwweGRiLDB4ZjgsMHgwMiwweDFlLDB4NDAsMHg4NCB9fSwKKyB7MTYsIDB4OGFkMCwgMCwgezB4OTAsMHgwMSwweGUwLDB4OGIsMHhmOSwweDAyLDB4NWUsMHgwMSwweDk3LDB4ODAsMHgyZCwweDYwLDB4MGEsMHg3OCwweDAwLDB4NDggfX0sCisgezE2LCAweDhhZTAsIDAsIHsweDA0LDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweDgwLDB4MDAsMHgyNCwweDA0IH19LAorIHsxNiwgMHg4YWYwLCAwLCB7MHgwZiwweDMyLDB4MDMsMHhjNCwweGEwLDB4ZjEsMHg0MiwweDMwLDB4YzQsMHgyYywweDMxLDB4MDIsMHg0NCwweDAwLDB4ZjEsMHgxMSB9fSwKKyB7MTYsIDB4OGIwMCwgMCwgezB4YTAsMHhjMCwweDBiLDB4MzAsMHgwYiwweDBjLDB4NDIsMHg4MywweDAwLDB4MDAsMHhjMCwweDBmLDB4MzAsMHgwMywweDRjLDB4MDIgfX0sCisgezE2LCAweDhiMTAsIDAsIHsweGUzLDB4MDAsMHgzYywweDQwLDB4MGIsMHgzMCwweDAxLDB4MTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4YjIwLCAwLCB7MHhjMCwweDFkLDB4YmMsMHgwMCwweGZjLDB4YTUsMHgzMywweGMwLDB4MGYsMHhkMCwweDAzLDB4ZmMsMHgwMSwweGJmLDB4MDAsMHgzZiB9fSwKKyB7MTYsIDB4OGIzMCwgMCwgezB4YzQsMHgwZSwweDcxLDB4MDMsMHg3NCwweDAwLDB4NzUsMHgxMCwweDNmLDB4YzAsMHgwNSwweGYwLDB4MDMsMHhkYywweDQwLDB4ZmYgfX0sCisgezE2LCAweDhiNDAsIDAsIHsweDA0LDB4M2YsMHhjMCwweDBmLDB4ZjAsMHg0MywweGZjLDB4MDAsMHg3ZiwweDAwLDB4M2YsMHg0MCwweDBlLDB4ZjAsMHgwMywweGQwIH19LAorIHsxNiwgMHg4YjUwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNCwweGU4LDB4MDAsMHhmMiwweDA0LDB4YjMsMHg4MCB9fSwKKyB7MTYsIDB4OGI2MCwgMCwgezB4MGYsMHhiOCwweDBiLDB4MmMsMHgwMCwweGViLDB4ODAsMHgzMiwweGMwLDB4MGMsMHgyMCwweDEzLDB4MmUsMHgwOCwweGNiLDB4MDEgfX0sCisgezE2LCAweDhiNzAsIDAsIHsweDMyLDB4YzUsMHgwZiwweGIxLDB4MDMsMHhlYywweDQ4LDB4YzgsMHgxMCwweDMyLDB4ZmEsMHg4YywweDM4LDB4MDMsMHgzYywweDkwIH19LAorIHsxNiwgMHg4YjgwLCAwLCB7MHhjYiwweDAwLDB4M2UsMHg0MCwweDBmLDB4YjAsMHgxMywweGMyLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGI5MCwgMCwgezB4YzgsMHgxMCwweDk4LDB4MDAsMHhmNiwweDAwLDB4NjEsMHg4MSwweDBiLDB4ZjAsMHgwMiwweDFjLDB4MDAsMHhkNywweDAwLDB4YjcgfX0sCisgezE2LCAweDhiYTAsIDAsIHsweDgwLDB4MGMsMHg3MCwweDAyLDB4YmMsMHgxMCwweDhmLDB4MDAsMHgyMSwweGM4LDB4OGIsMHg3MiwweDQzLDB4ZmMsMHg4OCwweGRjIH19LAorIHsxNiwgMHg4YmIwLCAwLCB7MHgwMCwweDM3LDB4YzgsMHgwZCwweDUwLDB4MDIsMHgxYywweDIyLDB4ODcsMHgwMCwweDJkLDB4YzAsMHgwYiwweDcwLDB4MDIsMHhkMyB9fSwKKyB7MTYsIDB4OGJjMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHg5ZSwweDAwLDB4YjYsMHg4MCwweGE5LDB4YTAgfX0sCisgezE2LCAweDhiZDAsIDAsIHsweDRiLDB4N2MsMHgwMiwweDVlLDB4MzAsMHhhMywweDg4LDB4MjEsMHhmMCwweDA4LDB4NzgsMHgwMiwweDE2LDB4MDAsMHg4NSwweDgwIH19LAorIHsxNiwgMHg4YmUwLCAwLCB7MHgyMSwweGUwLDB4MGIsMHg3OCwweDAyLDB4ZGUsMHgwMCwweDg3LDB4ODAsMHhhMSwweGU0LDB4MDgsMHhkOCwweDAyLDB4NGUsMHgwMCB9fSwKKyB7MTYsIDB4OGJmMCwgMCwgezB4OTcsMHg4MCwweDJkLDB4NzAsMHgwYiwweDc4LDB4MDIsMHhjOCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhjMDAsIDAsIHsweDQ4LDB4MTQsMHhlYywweDAwLDB4YjIsMHgwMCwweDI4LDB4YzAsMHgwYiwweDEwLDB4MDIsMHg0ZSwweDkwLDB4OTMsMHgwMiwweDIyIH19LAorIHsxNiwgMHg4YzEwLCAwLCB7MHhmMCwweDA4LDB4MzgsMHg0MiwweDhjLDB4NDIsMHg4MywweDA0LDB4MjIsMHhlNCwweDRiLDB4MzgsMHgwMiwweDhlLDB4NDAsMHg4MyB9fSwKKyB7MTYsIDB4OGMyMCwgMCwgezB4MDAsMHgyMCwweGMwLDB4MDksMHgzOCwweDIyLDB4NGUsMHgyMSwweDkzLDB4MDAsMHgyZSwweGUwLDB4MGIsMHgzMCwweDAyLDB4ZGIgfX0sCisgezE2LCAweDhjMzAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMSwweGZhLDB4MDAsMHgzYiwweDg5IH19LAorIHsxNiwgMHg4YzQwLCAwLCB7MHgwZiwweGEwLDB4MDIsMHg3OCwweDA4LDB4YWUsMHg0MCwweDIzLDB4ODAsMHgyYywweDZjLDB4MGIsMHgzYSwweDAwLDB4OGUsMHg4YyB9fSwKKyB7MTYsIDB4OGM1MCwgMCwgezB4YjIsMHgwMCwweDBiLDB4ODAsMHg4MiwweGUwLDB4MDIsMHg4ZSwweDAwLDB4MjIsMHg4MCwweDBjLDB4ZTgsMHgwMiwweDdiLDB4ODAgfX0sCisgezE2LCAweDhjNjAsIDAsIHsweDlhLDB4ODAsMHgzZSwweDgwLDB4MGYsMHhhMCwweDAzLDB4ZmEsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4YzcwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwOSwweGVjLDB4MDAsMHgzNiwweDIxLDB4MGIsMHg4MCwweDEzLDB4YTEsMHgwMCwweGY4LDB4NjAsMHgzZSB9fSwKKyB7MTYsIDB4OGM4MCwgMCwgezB4MDAsMHgwZiwweDgxLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4NDMsMHhlMCwweDEwLDB4ZjggfX0sCisgezE2LCAweDhjOTAsIDAsIHsweDAwLDB4YmUsMHgwMCwweDBmLDB4ODUsMHgwYiwweDgwLDB4MDAsMHhlOCwweDEwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyIH19LAorIHsxNiwgMHg4Y2EwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDIsMHhjOSwweDAyLDB4MzAsMHg0OCB9fSwKKyB7MTYsIDB4OGNiMCwgMCwgezB4MGMsMHg5OSwweDEzLDB4YTQsMHgwMiwweGM5LDB4MDAsMHgzZSwweDQyLDB4MGMsMHg5MCwweDhmLDB4MjQsMHgwMCwweGY5LDB4MDAgfX0sCisgezE2LCAweDhjYzAsIDAsIHsweDMyLDB4MjgsMHgwYywweDg4LDB4MDMsMHhlMCwweDAwLDB4YzksMHgwMCwweGIyLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNywweDAwIH19LAorIHsxNiwgMHg4Y2QwLCAwLCB7MHhjOSwweDEwLDB4M2UsMHg0MCwweDBjLDB4MTAsMHgwMywweDAyLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGNlMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDEsMHg4OSwweDgwLDB4YTIsMHg0OCwweDI4LDB4OTIsMHg0MiwweGM1LDB4MDAsMHg4OSwweDQwLDB4MmUgfX0sCisgezE2LCAweDhjZjAsIDAsIHsweDQwLDB4MmMsMHg5MCwweDA2LDB4MjUsMHgwMCwweGI5LDB4MDAsMHgyMiwweDUwLDB4MDgsMHg5OCwweDAyLDB4YzQsMHgwMCwweDg5IH19LAorIHsxNiwgMHg4ZDAwLCAwLCB7MHgwMSwweDc2LDB4NDAsMHg0YiwweDkyLDB4MDIsMHhlNSwweDAyLDB4ODksMHgwMCwweDJlLDB4NDAsMHgwZCwweDkwLDB4MDMsMHg2MCB9fSwKKyB7MTYsIDB4OGQxMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDBjLDB4ODUsMHgyMCwweGEyLDB4NDAgfX0sCisgezE2LCAweDhkMjAsIDAsIHsweDA4LDB4OTAsMHgwNiwweGU1LDB4MDAsMHg4OSwweDQwLDB4MmUsMHg0MCwweDA5LDB4OTAsMHg0MiwweGE0LDB4YTAsMHgzMSwweDAwIH19LAorIHsxNiwgMHg4ZDMwLCAwLCB7MHgyMiwweDUwLDB4MTgsMHg5MSwweDAyLDB4ZTQsMHgwMCwweDgxLDB4MDAsMHgyMiwweDQwLDB4MGIsMHg5MCwweDA2LDB4ZTQsMHgwMCB9fSwKKyB7MTYsIDB4OGQ0MCwgMCwgezB4ODksMHgwMCwweDJlLDB4NDAsMHgwOSwweDkwLDB4MDIsMHgwZSwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhkNTAsIDAsIHsweDAwLDB4MDQsMHgxNSwweDAwLDB4ODUsMHg0MCwweDIwLDB4NDAsMHgwOCwweDE0LDB4MjYsMHhlNCwweDAwLDB4ODEsMHgwMCwweDJjIH19LAorIHsxNiwgMHg4ZDYwLCAwLCB7MHg0MCwweDE4LDB4MTAsMHgwMiwweDg0LDB4ODAsMHhiMSwweDIwLDB4YTAsMHg1MCwweDA4LDB4MTQsMHgwMiwweGU1LDB4MDIsMHg4MSB9fSwKKyB7MTYsIDB4OGQ3MCwgMCwgezB4NDAsMHgyMCwweDQ4LDB4MGIsMHgxMCwweDA2LDB4Y2MsMHgwMCwweDgxLDB4MDEsMHgyYywweDUwLDB4MDksMHgxNCwweDAyLDB4NGEgfX0sCisgezE2LCAweDhkODAsIDAsIHsweDA1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweDhjLDB4MDAsMHgzMiwweDAwIH19LAorIHsxNiwgMHg4ZDkwLCAwLCB7MHgwYywweDgwLDB4MjMsMHhlMCwweDAwLDB4YzgsMHgwMCwweDNlLDB4MTQsMHgwZCwweDgwLDB4MTIsMHhhMSwweDQ0LDB4ZjgsMHg1MSB9fSwKKyB7MTYsIDB4OGRhMCwgMCwgezB4MzIsMHgwMCwweDJjLDB4ODAsMHgwMywweGUwLDB4MDAsMHg4OCwweDA0LDB4MjIsMHgxNCwweDBmLDB4ODAsMHgwNywweGUwLDB4MDAgfX0sCisgezE2LCAweDhkYjAsIDAsIHsweGM4LDB4MDAsMHgzZSwweDAwLDB4MGQsMHg4MCwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ZGMwLCAwLCB7MHg5OCwweDlkLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZiwweDUwLDB4MGYsMHhkMCwweDAzLDB4ZGMsMHgwMSwweGJkLDB4NDIsMHgzZiB9fSwKKyB7MTYsIDB4OGRkMCwgMCwgezB4NTAsMHg0ZiwweGQ0LDB4NDMsMHg3NCwweDQxLDB4ZmQsMHgxMCwweDNmLDB4MTAsMHgxZiwweGM0LDB4MTMsMHhmMSwweDAwLDB4ZmQgfX0sCisgezE2LCAweDhkZTAsIDAsIHsweDQwLDB4N2UsMHg0NCwweDBmLDB4ZDAsMHg0MywweGY1LDB4MDEsMHhmZCwweDAwLDB4M2YsMHg0MCwweDBmLDB4OTQsMHgwMywweGU2IH19LAorIHsxNiwgMHg4ZGYwLCAwLCB7MHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGY0LDB4MDAsMHhkZiwweDA1LDB4MzMsMHg2MSB9fSwKKyB7MTYsIDB4OGUwMCwgMCwgezB4MGYsMHg1MCwweDUzLDB4MzQsMHgxMCwweGZkLDB4MDQsMHgzMywweDQ0LDB4NGYsMHg1MCwweDAzLDB4NzYsMHhjMSwweGNkLDB4ZTAgfX0sCisgezE2LCAweDhlMTAsIDAsIHsweDMzLDB4NjAsMHgwYywweGNlLDB4MDMsMHhmNiwweGMwLDB4ZTEsMHhjMCwweGI2LDB4NjQsMHg4ZiwweDUwLDB4MGIsMHgzNiwweDgyIH19LAorIHsxNiwgMHg4ZTIwLCAwLCB7MHhjZCwweDAwLDB4M2UsMHg0NCwweDRjLDB4OWUsMHhjMywweGM2LDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGUzMCwgMCwgezB4MzgsMHgxMCwweGVhLDB4MjgsMHg4MCwweGEwLDB4YjIsMHgwNCwweDBiLDB4OGEsMHg4MywweDYwLDB4MDAsMHhmYSwweDAwLDB4MzYgfX0sCisgezE2LCAweDhlNDAsIDAsIHsweDI4LDB4OGIsMHg4MCwweDAzLDB4ZTMsMHhjOCwweGM4LDB4ODQsMHgyMiwweDE0LDB4MDgsMHg4YSwweDAyLDB4ZTIsMHg4MCwweGQ4IH19LAorIHsxNiwgMHg4ZTUwLCAwLCB7MHg4MiwweDM0LDB4MzQsMHgxYiwweDgwLDB4MDMsMHg2MCwweDA0LDB4ODgsMHgwMCwweDJlLDB4MjAsMHgwYSwweDhlLDB4NDIsMHhjZSB9fSwKKyB7MTYsIDB4OGU2MCwgMCwgezB4MDYsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDUsMHhjNCwweDgwLDB4ODEsMHgwOCwweDA0LDB4NDEgfX0sCisgezE2LCAweDhlNzAsIDAsIHsweDBiLDB4OTIsMHgwMiwweDA0LDB4MDAsMHhiMSwweDAwLDB4MmMsMHg0MCwweDBiLDB4MTgsMHgwMiwweDI0LDB4MDAsMHhiMSwweDYwIH19LAorIHsxNiwgMHg4ZTgwLCAwLCB7MHgyNiwweDQwLDB4MGEsMHgxNiwweDAyLDB4YzUsMHgwMCwweGExLDB4YzAsMHgyMCwweDQ4LDB4MGIsMHg5MCwweDAyLDB4NDcsMHgwMCB9fSwKKyB7MTYsIDB4OGU5MCwgMCwgezB4OTEsMHgwMSwweDJjLDB4NDgsMHgxOCwweDEyLDB4MDIsMHhkMiwweDAxLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhlYTAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDBjLDB4OGIsMHgwNCwweGEyLDB4NTAsMHgwYiwweDkxLDB4MDIsMHgyNCwweDA0LDB4YTksMHgwMSwweDJlIH19LAorIHsxNiwgMHg4ZWIwLCAwLCB7MHg0MiwweDBiLDB4OTAsMHgwMiwweGE0LDB4MDAsMHhhOSwweDAwLDB4MjYsMHg2MCwweDBhLDB4OTAsMHgwMiwweGU2LDB4MDAsMHg4MSB9fSwKKyB7MTYsIDB4OGVjMCwgMCwgezB4MDAsMHgyMiwweDQwLDB4OGIsMHhiMCwweDAyLDB4MjQsMHgwOCwweDk5LDB4MTAsMHgyZSwweDQwLDB4MWEsMHg5MCwweDAyLDB4YzYgfX0sCisgezE2LCAweDhlZDAsIDAsIHsweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTUsMHgwMCwweGM5LDB4MDAsMHgzNiwweDQwIH19LAorIHsxNiwgMHg4ZWUwLCAwLCB7MHgwZiwweDEwLDB4MDIsMHgyNSwweDAwLDB4YjEsMHgwMCwweDJlLDB4NjAsMHgwZiwweDEwLDB4MTIsMHgyNCwweDAyLDB4YjksMHhhMCB9fSwKKyB7MTYsIDB4OGVmMCwgMCwgezB4YTQsMHg0MCwweDJlLDB4OTEsMHgwMywweGU2LDB4MDAsMHhhOSwweDAwLDB4MjIsMHg0MCwweDBiLDB4MTksMHg4MCwweDY0LDB4MDQgfX0sCisgezE2LCAweDhmMDAsIDAsIHsweGQ5LDB4ODEsMHgyZSwweDQwLDB4NGMsMHg5MCwweDAzLDB4ZTgsMHgxNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ZjEwLCAwLCB7MHg2OCwweDAxLDB4YTQsMHgwYSwweGU5LDB4MDAsMHhiZSwweDQ4LDB4MGYsMHg5OCwweDBiLDB4ZTQsMHgwMCwweGY5LDB4YzQsMHgzNiB9fSwKKyB7MTYsIDB4OGYyMCwgMCwgezB4NzAsMHgxZiwweDkyLDB4MDMsMHhlNiwweDkwLDB4YzEsMHg5MCwweDNhLDB4NDAsMHg4ZCwweDg4LDB4MDMsMHhlNCwweDAwLDB4ZjkgfX0sCisgezE2LCAweDhmMzAsIDAsIHsweDkwLDB4M2UsMHg0MCwweDBiLDB4OTgsMHgwMywweGU2LDB4NDAsMHhlOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGQyIH19LAorIHsxNiwgMHg4ZjQwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjgsMHgxMCwweGExLDB4MDIsMHhkOCwweDIwLDB4YjIsMHgxMCB9fSwKKyB7MTYsIDB4OGY1MCwgMCwgezB4MGMsMHg4MCwweDgzLDB4MjEsMHg0MCwweGM4LDB4NTgsMHhiMiwweDEwLDB4NGMsMHg4MCwweDBiLDB4MjAsMHgwMCwweGY4LDB4NDIgfX0sCisgezE2LCAweDhmNjAsIDAsIHsweDMyLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhlMCwweDAyLDB4ZDgsMHgwMCwweDcyLDB4MDAsMHgxYywweDgwLDB4MDAsMHgyMCwweDAwIH19LAorIHsxNiwgMHg4ZjcwLCAwLCB7MHhmOCwweDA0LDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweDAyLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGY4MCwgMCwgezB4MjgsMHgwNSwweDM4LDB4MDQsMHhjZSwweDQxLDB4MjMsMHg4MCwweDA4LDB4ZTAsMHgwMiwweDM5LDB4MTAsMHhhZSwweDQwLDB4MjIgfX0sCisgezE2LCAweDhmOTAsIDAsIHsweDgwLDB4MDgsMHhlMCwweDAyLDB4MWEsMHgwMCwweGJhLDB4MDAsMHgyYiwweGFkLDB4MDMsMHg4MCwweDAyLDB4ZTgsMHgwMCwweGNhIH19LAorIHsxNiwgMHg4ZmEwLCAwLCB7MHgwMCwweDJhLDB4ODAsMHgwYSwweGUwLDB4MDIsMHgxOCwweDAwLDB4YmEsMHgwMCwweDFhLDB4ODAsMHgwYiwweGEwLDB4MDMsMHg0YSB9fSwKKyB7MTYsIDB4OGZiMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MDUsMHg2YywweDEyLDB4ODksMHgwMCwweGEwLDB4ZTAgfX0sCisgezE2LCAweDhmYzAsIDAsIHsweDA4LDB4MzgsMHgwMiwweDBkLDB4ODgsMHg4MywweDAwLDB4MDQsMHhlMCwweDA4LDB4MzgsMHgzMiwweDBlLDB4MjUsMHgzMSwweDAxIH19LAorIHsxNiwgMHg4ZmQwLCAwLCB7MHgyNCwweGUwLDB4OGIsMHgzOCwweDAyLDB4ZTQsMHgwMSwweDgzLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4OGMsMHgwMCB9fSwKKyB7MTYsIDB4OGZlMCwgMCwgezB4YjMsMHgwMCwweDJlLDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhmZjAsIDAsIHsweGEwLDB4MDEsMHgxNCwweDIwLDB4ODYsMHgyMCwweDI5LDB4YjAsMHgwOCwweGYwLDB4ODIsMHgzZSwweDA0LDB4YTcsMHgwMCwweDIxIH19LAorIHsxNiwgMHg5MDAwLCAwLCB7MHg3MCwweDg4LDB4NzAsMHg5MiwweDFjLDB4MjAsMHhiZCwweDAwLDB4NjksMHhjMCwweDBiLDB4NzYsMHgwMiwweGQ0LDB4ODAsMHg4ZiB9fSwKKyB7MTYsIDB4OTAxMCwgMCwgezB4MjEsMHgyOSwweGUwLDB4MGEsMHg2MCwweDg2LDB4OTgsMHgwMSwweGI3LDB4MDAsMHgyZCwweGM4LDB4MGIsMHgzYiwweDAyLDB4NjAgfX0sCisgezE2LCAweDkwMjAsIDAsIHsweDA0LDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4M2UsMHgwMCwweGM3LDB4YTAsMHhiMCwweGUwIH19LAorIHsxNiwgMHg5MDMwLCAwLCB7MHgyYywweDc4LDB4MGIsMHgxYSwweDAwLDB4YzMsMHg4MCwweDM3LDB4ZTAsMHgyOCwweDc4LDB4MDMsMHgxYSwweDA4LDB4ZjUsMHg5MCB9fSwKKyB7MTYsIDB4OTA0MCwgMCwgezB4MzUsMHhlMCwweDBmLDB4N2MsMHgxMiwweGQ2LDB4ODIsMHhjNywweDkwLDB4MjEsMHhlNCwweDA4LDB4NzgsMHgwMywweDllLDB4MDAgfX0sCisgezE2LCAweDkwNTAsIDAsIHsweGY1LDB4ODAsMHgzZCwweGYxLDB4MGYsMHg3OCwweDAzLDB4MjIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MDYwLCAwLCB7MHgwOCwweDE5LDB4YTQsMHgwMCwweGVlLDB4ODAsMHgzNiwweGMxLDB4NGYsMHhkMCwweDAzLDB4YzgsMHgwMCwweGZiLDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4OTA3MCwgMCwgezB4NTEsMHgwZiwweGIwLDB4MDMsMHhlNCwweDA4LDB4ZjEsMHg2MCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhjNSwweDAwLDB4ZWIgfX0sCisgezE2LCAweDkwODAsIDAsIHsweDEwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwOSwweDZjLDB4MDAsMHhmYiwweDAwLDB4M2EsMHhjMCwweDBmLDB4YjAsMHgwMywweGMyIH19LAorIHsxNiwgMHg5MDkwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweGZlLDB4MDAsMHhmZCwweDg4LDB4MzMsMHg2MCB9fSwKKyB7MTYsIDB4OTBhMCwgMCwgezB4MGYsMHhmOSwweDAzLDB4Y2UsMHg0MCwweGQ3LDB4ODQsMHgzNywweDcwLDB4MGMsMHhkOCwweDIzLDB4MzYsMHgwMCwweGM1LDB4ODggfX0sCisgezE2LCAweDkwYjAsIDAsIHsweDMzLDB4ZTAsMHg0ZiwweGY4LDB4MTMsMHhmNywweDI4LDB4ZGYsMHg4MCwweDM3LDB4ZTIsMHgwYywweDU4LDB4MDMsMHgzZSwweDAwIH19LAorIHsxNiwgMHg5MGMwLCAwLCB7MHhmZiwweDkwLDB4M2YsMHhlMCwweDBjLDB4ZjgsMHgwMywweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTBkMCwgMCwgezB4YTksMHgxMSwweDljLDB4MDgsMHhmNiwweDAwLDB4YTEsMHgwMCwweDBiLDB4NjMsMHgwMiwweGQ2LDB4MzAsMHg4NSwweDQxLDB4MzEgfX0sCisgezE2LCAweDkwZTAsIDAsIHsweGM4LDB4MDgsMHg1MCwweDIzLDB4MWMsMHgwMCwweGQ1LDB4MjAsMHhiMSwweDgwLDB4MGYsMHg3MCwweDAzLDB4YjQsMHgwMCwweGM3IH19LAorIHsxNiwgMHg5MGYwLCAwLCB7MHgwMCwweDIxLDB4YzAsMHgwZiwweDQwLDB4YTMsMHg1OCwweDQwLDB4YjcsMHgwMCwweDNmLDB4YzQsMHgwYSwweGYwLDB4MDIsMHgyYSB9fSwKKyB7MTYsIDB4OTEwMCwgMCwgezB4MDYsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDQwLDB4YjcsMHgxMCwweDIxLDB4ZDIgfX0sCisgezE2LCAweDkxMTAsIDAsIHsweDBiLDB4NzAsMHgwMiwweGRjLDB4NDIsMHg4NiwweDAwLDB4MjUsMHg2MSwweDA4LDB4NTEsMHgwMiwweDUwLDB4MDAsMHg5NSwweDAwIH19LAorIHsxNiwgMHg5MTIwLCAwLCB7MHgyNSwweGMwLDB4MDksMHg3MCwweDgyLDB4ZDQsMHgwMCwweDg3LDB4MDAsMHgyNCwweGMwLDB4MDgsMHg1MCwweDAyLDB4NWMsMHgwMCB9fSwKKyB7MTYsIDB4OTEzMCwgMCwgezB4OTUsMHgwNCwweDJkLDB4YzAsMHgwOCwweDcwLDB4MDIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkxNDAsIDAsIHsweDIwLDB4MTQsMHhjYywweDA4LDB4YjIsMHhkMCwweDIwLDB4ZTAsMHg0YiwweDA4LDB4MDIsMHhjNCwweDAwLDB4ODAsMHg4MCwweDIwIH19LAorIHsxNiwgMHg5MTUwLCAwLCB7MHhmMCwweDA4LDB4MWEsMHgwMiwweDg1LDB4NDgsMHg4MSwweDEwLDB4MjAsMHg0MCwweDBhLDB4MzAsMHgwMiwweGM2LDB4MTAsMHg5MyB9fSwKKyB7MTYsIDB4OTE2MCwgMCwgezB4MDAsMHgyMCwweGMwLDB4MGEsMHgxYywweDAyLDB4MGQsMHg0MCwweGIzLDB4MDAsMHg2OCwweGM0LDB4MGEsMHhiMCwweDAyLDB4MDkgfX0sCisgezE2LCAweDkxNzAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YWMsMHgwMSwweGZlLDB4MDAsMHgzMiwweGYwIH19LAorIHsxNiwgMHg5MTgwLCAwLCB7MHgwZiwweDg4LDB4MDMsMHhlNiwweDAwLDB4YzgsMHhjOCwweDM2LDB4ZjYsMHgyOCwweGE2LDB4MGEsMHg2ZCwweDAwLDB4OWQsMHgwMCB9fSwKKyB7MTYsIDB4OTE5MCwgMCwgezB4MzIsMHgwMCwweDBiLDB4YjAsMHgwMywweGY2LDB4MDMsMHhjNywweDAwLDB4MzcsMHhjMCwweDA4LDB4OWMsMHgwYSwweDZlLDB4MDAgfX0sCisgezE2LCAweDkxYTAsIDAsIHsweGJiLDB4MDAsMHgyZiwweGMwLDB4MGMsMHhmMCwweDAzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MWIwLCAwLCB7MHg4MCwweDAwLDB4ZTQsMHgwMSwweGViLDB4NDAsMHgzZSwweDgwLDB4NGYsMHhjMSwweDAzLDB4ZTQsMHgwMCwweGI4LDB4MDgsMHgzYSB9fSwKKyB7MTYsIDB4OTFjMCwgMCwgezB4NDAsMHg4ZiwweGE0LDB4MTMsMHg2YywweDIwLDB4ZjksMHgwMCwweDNlLDB4NzAsMHgwZiwweGIwLDB4MDMsMHhhNCwweDQwLDB4ZWIgfX0sCisgezE2LCAweDkxZDAsIDAsIHsweDAwLDB4M2UsMHhjMCwweDBmLDB4OTIsMHgyMywweGU4LDB4MDAsMHhmOSwweDgwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHg2MywweGUwIH19LAorIHsxNiwgMHg5MWUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGZjLDB4MDgsMHhjZSwweDA4LDB4MzMsMHhjMCB9fSwKKyB7MTYsIDB4OTFmMCwgMCwgezB4MGYsMHhkYSwweDAzLDB4MzAsMHgwMCwweGU0LDB4MDQsMHgzNSwweGMwLDB4MGQsMHhhMCwweDAzLDB4MjgsMHgwMCwweGM1LDB4MDAgfX0sCisgezE2LCAweDkyMDAsIDAsIHsweDMzLDB4MDAsMHgwYiwweGZhLDB4MDMsMHhmNCwweDAzLDB4Y2IsMHgwMCwweDMxLDB4YzAsMHgwYywweGQ0LDB4MDMsMHgxNCwweDIwIH19LAorIHsxNiwgMHg5MjEwLCAwLCB7MHhjZCwweDgwLDB4MjMsMHhjMSwweDBjLDB4ZjAsMHgwMiwweDA4LDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTIyMCwgMCwgezB4ODEsMHgwNCwweDQ0LDB4MTAsMHhjYiwweGQwLDB4MjIsMHhjMCwweDBiLDB4OTQsMHgwMiwweDIyLDB4ODQsMHhiOCwweGM2LDB4MDIgfX0sCisgezE2LCAweDkyMzAsIDAsIHsweDQwLDB4MDgsMHgyOCwweDAyLDB4YTUsMHg4MCwweDg5LDB4MDAsMHgyMiwweDYwLDB4MGIsMHhiOCwweDAyLDB4NjQsMHgwMCwweDhiIH19LAorIHsxNiwgMHg5MjQwLCAwLCB7MHgwMCwweDJhLDB4YzAsMHhjOCwweDAwLDB4MDMsMHg2NiwweDAwLDB4ODEsMHgwMCwweDAwLDB4YzAsMHgwZCwweGIwLDB4MGEsMHhhOCB9fSwKKyB7MTYsIDB4OTI1MCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4MTMsMHgwMCwweDIyLDB4NDAgfX0sCisgezE2LCAweDkyNjAsIDAsIHsweDhiLDB4MjQsMHgwMiwweDJhLDB4MDAsMHhiYiwweDgyLDB4MjIsMHg0MCwweDAwLDB4YWMsMHgwMiwweDg0LDB4MDAsMHg4OSwweDAwIH19LAorIHsxNiwgMHg5MjcwLCAwLCB7MHgyMiwweDIyLDB4MGIsMHhiMCwweDAyLDB4YzQsMHgwMCwweDliLDB4MDAsMHgyYSwweGMwLDB4MDgsMHhiMCwweDAyLDB4MmUsMHgwMCB9fSwKKyB7MTYsIDB4OTI4MCwgMCwgezB4OGIsMHgxMCwweDJhLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhhMCwweDEwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkyOTAsIDAsIHsweDA4LDB4MDQsMHgwYywweDEwLDB4ODMsMHgwMCwweDIwLDB4MDEsMHgwYiwweDIwLDB4MDIsMHgwMCwweDgwLDB4YjEsMHgwMCwweDIwIH19LAorIHsxNiwgMHg5MmEwLCAwLCB7MHhjMSwweDA4LDB4MjAsMHgwMiwweDg4LDB4MDEsMHg4MSwweDAwLDB4YTAsMHgwMCwweDBiLDB4MzAsMHgwMiwweDQ0LDB4MDEsMHg5YiB9fSwKKyB7MTYsIDB4OTJiMCwgMCwgezB4MDAsMHgyOCwweGMwLDB4MDgsMHhiMCwweDAyLDB4NDgsMHgwNiwweDg5LDB4MDAsMHgyYSwweGMwLDB4MDksMHgzMCwweDAyLDB4ODIgfX0sCisgezE2LCAweDkyYzAsIDAsIHsweDA1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDhkLDB4NmMsMHgwMCwweGMzLDB4MDAsMHhiMiwweGMwIH19LAorIHsxNiwgMHg5MmQwLCAwLCB7MHgwZiwweGIwLDB4MDMsMHgyOCwweDIwLDB4ZmEsMHgwMCwweGIxLDB4NDAsMHgwZCwweGEwLDB4MDcsMHhhMCwweDAwLDB4Y2QsMHgwMCB9fSwKKyB7MTYsIDB4OTJlMCwgMCwgezB4MjIsMHgwMCwweDBmLDB4YjAsMHgwMywweGY0LDB4MDAsMHg5ZiwweDAwLDB4M2IsMHhjMCwweDJjLDB4YjAsMHgwYiwweDI0LDB4MDAgfX0sCisgezE2LCAweDkyZjAsIDAsIHsweGM5LDB4MDAsMHhiYSwweGMwLDB4MGMsMHhiMCwweDAzLDB4ODAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MzAwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgwNiwweGZmLDB4MDIsMHhhZiwweGMwLDB4MGYsMHhjMCwweDAzLDB4ZjAsMHgxMCwweGZjLDB4MDAsMHgzZiB9fSwKKyB7MTYsIDB4OTMxMCwgMCwgezB4YzAsMHg5ZiwweGUwLDB4MTMsMHhmMCwweDAwLDB4ZmQsMHgwNCwweDNmLDB4NDAsMHg0ZiwweGYwLDB4MDMsMHg3NCwweDAwLDB4ZWYgfX0sCisgezE2LCAweDkzMjAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDhmLDB4ZTAsMHgwMiwweGI0LDB4MDEsMHhmZCwweDA0LDB4MzcsMHhjMCwweDBmLDB4ZjAsMHg0MywweDY4IH19LAorIHsxNiwgMHg5MzMwLCAwLCB7MHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZjLDB4MDAsMHhjNywweDIwLDB4YjMsMHhjOCB9fSwKKyB7MTYsIDB4OTM0MCwgMCwgezB4MWMsMHhmMSwweDAzLDB4N2MsMHgyMCwweGNmLDB4MGEsMHgzZiwweGQwLDB4MGQsMHhmMCwweDAzLDB4N2MsMHg4MCwweDhmLDB4MzIgfX0sCisgezE2LCAweDkzNTAsIDAsIHsweDMzLDB4YzQsMHgwZiwweGYxLDB4ODMsMHgzYywweGUwLDB4Y2YsMHgxMCwweDMzLDB4YzQsMHgwZCwweGYyLDB4ODMsMHgzYywweGUyIH19LAorIHsxNiwgMHg5MzYwLCAwLCB7MHhjNywweDgwLDB4MTcsMHhjYywweDRjLDB4ZjMsMHg4MywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTM3MCwgMCwgezB4ODAsMHgxMCwweGUzLDB4NDAsMHg4OCwweDY4LDB4MjIsMHgzMCwweDA4LDB4MDYsMHgwMiwweDAxLDB4YTEsMHg4OCwweGM0LDB4MGUgfX0sCisgezE2LCAweDkzODAsIDAsIHsweDE0LDB4MDgsMHg4NywweDgwLDB4MDEsMHhjMCwweDI4LDB4NTAsMHgwMiwweDA0LDB4OGIsMHg4NiwweDAyLDB4YTEsMHg5OCwweDg4IH19LAorIHsxNiwgMHg5MzkwLCAwLCB7MHg0MSwweDJhLDB4MDQsMHgwYSwweDg0LDB4ODIsMHhiZCwweDgwLDB4OGIsMHgwOCwweDJiLDB4YzQsMHg4OCwweGY0LDB4MDMsMHg2MCB9fSwKKyB7MTYsIDB4OTNhMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDA4LDB4ODIsMHg0MCwweDIwLDB4MTAgfX0sCisgezE2LCAweDkzYjAsIDAsIHsweDA4LDB4MjEsMHgxMiwweDQ0LDB4MDQsMHg4MiwweDA0LDB4MmMsMHgwOCwweDg5LDB4OTAsMHgwMiwweDQ0LDB4MjEsMHg4YiwweDAwIH19LAorIHsxNiwgMHg5M2MwLCAwLCB7MHgyNCwweDg4LDB4OGIsMHhhMCwweDAwLDB4NDAsMHg4NCwweDg5LDB4MzAsMHgyMiwweDQ4LDB4ODgsMHhiMCwweDAyLDB4Y2MsMHgwOCB9fSwKKyB7MTYsIDB4OTNkMCwgMCwgezB4ODgsMHgyMCwweGE0LDB4YzgsMHgwMCwweDMyLDB4MGEsMHgyMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkzZTAsIDAsIHsweGMwLDB4MTUsMHhhMCwweDAwLDB4ODksMHgwMCwweDIyLDB4YzEsMHg4OCwweDkwLDB4NjIsMHgyOCwweDA4LDB4ODksMHgwOCwweDJlIH19LAorIHsxNiwgMHg5M2YwLCAwLCB7MHhjMCwweDA4LDB4YTAsMHgwMiwweDI4LDB4MDgsMHhhOCwweDAwLDB4MjYsMHg0MiwweDBiLDB4OTAsMHgwMiwweGNjLDB4NTAsMHg4YSB9fSwKKyB7MTYsIDB4OTQwMCwgMCwgezB4MjIsMHgyYSwweDg2LDB4MGEsMHg4MCwweDAyLDB4ZWMsMHgwMCwweDg4LDB4ODQsMHgyYSwweGMxLDB4MDgsMHhiMCwweDI2LDB4MzAgfX0sCisgezE2LCAweDk0MTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZjAsMHgwMiwweGNmLDB4MDAsMHgzMywweGMwIH19LAorIHsxNiwgMHg5NDIwLCAwLCB7MHg0OCwweGY4LDB4NDMsMHg3OSwweDAwLDB4OGQsMHhjMCwweDNmLDB4MzAsMHg4ZCwweDYwLDB4ODMsMHg3OCwweDYwLDB4YzQsMHg1OCB9fSwKKyB7MTYsIDB4OTQzMCwgMCwgezB4MzcsMHgyMCwweDBmLDB4NTgsMHgxMywweDdiLDB4MDIsMHhjYywweGM0LDB4MzEsMHgyMCwweDBjLDB4NDQsMHgwMywweGVjLDB4MDIgfX0sCisgezE2LCAweDk0NDAsIDAsIHsweDhiLDB4ODAsMHgzNiwweGMwLDB4MjQsMHhiMCwweDEyLDB4MTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NDUwLCAwLCB7MHhlMCwweDAxLDB4OWMsMHgwMCwweGY0LDB4MTAsMHgzZCwweDAwLDB4NmYsMHhjOSwweDEzLDB4ZDQsMHgxMiwweGZlLDB4OTAsMHgzZiB9fSwKKyB7MTYsIDB4OTQ2MCwgMCwgezB4ZjAsMHgwZiwweGRhLDB4MjMsMHhmNCwweDE0LDB4ZmYsMHgwMiwweDNiLDB4ZjAsMHgwZiwweGVhLDB4MjMsMHhiNiwweDAwLDB4ZmYgfX0sCisgezE2LCAweDk0NzAsIDAsIHsweDgyLDB4M2YsMHhlMSwweDhmLDB4ZjQsMHgwMywweGJjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweGFmLDB4NzAsMHgwMywweGY4IH19LAorIHsxNiwgMHg5NDgwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGEwLDB4MDAsMHhjYSwweDAwLDB4MzIsMHgwOCB9fSwKKyB7MTYsIDB4OTQ5MCwgMCwgezB4MWMsMHhhMCwweDAzLDB4YTUsMHgyMCwweGNiLDB4NDAsMHhiYSwweDEwLDB4MWYsMHhiMCwweDAzLDB4YWMsMHgwMCwweGViLDB4MDAgfX0sCisgezE2LCAweDk0YTAsIDAsIHsweDcyLDB4OTAsMHgwYywweGI0LDB4MDMsMHgyOSwweDA0LDB4YzksMHg1MiwweDMyLDB4NTAsMHgwYywweGI0LDB4MDMsMHgwYywweDAwIH19LAorIHsxNiwgMHg5NGIwLCAwLCB7MHhmOCwweDQwLDB4MzIsMHhjMSwweDBlLDB4YjAsMHgwYiwweDUwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTRjMCwgMCwgezB4YzgsMHgwNSwweDJkLDB4ODAsMHg4OSwweDgwLDB4MjIsMHhkOSwweDA4LDB4OTAsMHgyMiwweDJhLDB4MDAsMHg4OCwweDU0LDB4MjIgfX0sCisgezE2LCAweDk0ZDAsIDAsIHsweGMwLDB4OGIsMHg4MCwweDIyLDB4MjAsMHgxOSwweGM4LDB4MDAsMHgyMiwweDQwLDB4OGQsMHg4MCwweDFhLDB4MjQsMHgxMCwweGQyIH19LAorIHsxNiwgMHg5NGUwLCAwLCB7MHg0NCwweDIyLDB4ODEsMHgwZCwweDgwLDB4MDMsMHg3YywweDAwLDB4YjAsMHgwMCwweDM3LDB4YzAsMHg4OCwweGYwLDB4MDIsMHgzMiB9fSwKKyB7MTYsIDB4OTRmMCwgMCwgezB4MTAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0ZSwweDAwLDB4ODEsMHgwMCwweGEwLDB4ZjAgfX0sCisgezE2LCAweDk1MDAsIDAsIHsweDA4LDB4OTAsMHgwMiwweDg5LDB4MDIsMHg4MCwweDAwLDB4MjIsMHhjMCwweDBiLDB4MDAsMHgyMiwweGEwLDB4MDAsMHhiMCwweDAwIH19LAorIHsxNiwgMHg5NTEwLCAwLCB7MHgyMCwweDQwLDB4MDgsMHgwMCwweDAyLDB4MDQsMHgwMCwweDgyLDB4NjAsMHgyMCwweDgwLDB4MDgsMHgwMCwweDAyLDB4MGMsMHgwOCB9fSwKKyB7MTYsIDB4OTUyMCwgMCwgezB4YjIsMHgwMCwweDIyLDB4YzAsMHgwOCwweDMwLDB4MDIsMHgzOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk1MzAsIDAsIHsweDIwLDB4MDEsMHgwMywweDEwLDB4OGUsMHg5MCwweDIzLDB4MjQsMHgwOCwweDZiLDB4MDIsMHgxNiwweDYwLDB4OGYsMHg4MCwweDIxIH19LAorIHsxNiwgMHg5NTQwLCAwLCB7MHgyOCwweDBiLDB4ZjksMHgwNiwweDFlLDB4NDAsMHg4ZiwweDgwLDB4MjMsMHhhNCwweDQ5LDB4NzksMHgwMiwweDNhLDB4NDAsMHg5ZCB9fSwKKyB7MTYsIDB4OTU1MCwgMCwgezB4OTAsMHgyMywweDY0LDB4MDksMHhmOCwweDAyLDB4NWUsMHg0MCwweGJlLDB4OTAsMHgyNCwweGU0LDB4MjgsMHg3OSwweDAyLDB4MDggfX0sCisgezE2LCAweDk1NjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHg0MiwweGMwLDB4MDksMHgzMCwweDAwIH19LAorIHsxNiwgMHg5NTcwLCAwLCB7MHgyOCwweDAyLDB4MDMsMHg4NCwweDAwLDB4OGEsMHgyMCwweDMwLDB4YzQsMHg4YiwweDExLDB4MDMsMHg4NCwweDUwLDB4YjMsMHgwMCB9fSwKKyB7MTYsIDB4OTU4MCwgMCwgezB4MjAsMHhjMCwweDBjLDB4YTQsMHgyMiwweDA0LDB4MDAsMHhjYiwweDQwLDB4MzAsMHhjNSwweDBjLDB4MzAsMHgwMywweDBlLDB4NDAgfX0sCisgezE2LCAweDk1OTAsIDAsIHsweGYzLDB4MTAsMHgzMCwweGM0LDB4MGMsMHhiMCwweDAzLDB4MTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NWEwLCAwLCB7MHg0MCwweDFkLDB4YjAsMHgwNCwweGZiLDB4MDQsMHgzZCwweGMwLDB4MGYsMHhmMiwweDQzLDB4ZjgsMHgwNCwweGZkLDB4MDEsMHgzZiB9fSwKKyB7MTYsIDB4OTViMCwgMCwgezB4MGMsMHgwZiwweDYxLDB4MDMsMHhmOCwweDQ4LDB4ZjQsMHgwMCwweDNkLDB4MDEsMHgwZiwweGQwLDB4MDMsMHhjOCwweDAwLDB4ZmMgfX0sCisgezE2LCAweDk1YzAsIDAsIHsweDA0LDB4YmQsMHgwNCwweDBiLDB4NDgsMHgwMywweGZjLDB4MTgsMHhmZiwweDE0LDB4M2YsMHhkNSwweDBkLDB4ZjAsMHgwMywweDkwIH19LAorIHsxNiwgMHg5NWQwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGUwLDB4MDAsMHhmOSwweDAxLDB4MzIsMHhjMCB9fSwKKyB7MTYsIDB4OTVlMCwgMCwgezB4OGUsMHg5MCwweDAzLDB4MjgsMHgwMiwweGQxLDB4MDAsMHgzMiwweGMwLDB4MGQsMHhhOCwweDBiLDB4MDgsMHgwMCwweGU4LDB4MDAgfX0sCisgezE2LCAweDk1ZjAsIDAsIHsweDJlLDB4NDAsMHgwYywweDk4LDB4MGIsMHgyZSwweDAyLDB4Y2EsMHgwMCwweGIyLDB4YTAsMHg2YywweDgwLDB4MjMsMHgyZCwweDgwIH19LAorIHsxNiwgMHg5NjAwLCAwLCB7MHhjYSwweDgwLDB4MzIsMHhkMCwweDBjLDB4YmEsMHgwMywweDJhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTYxMCwgMCwgezB4NDgsMHgxMSwweDljLDB4MDAsMHhiNiwweDAwLDB4YTMsMHgwMCwweDA4LDB4NjAsMHgwMiwweDA0LDB4MDAsMHg4NiwweDA0LDB4MjkgfX0sCisgezE2LCAweDk2MjAsIDAsIHsweDAwLDB4MDgsMHg1MCwweDQyLDB4MTQsMHgwNCwweGE3LDB4MDAsMHgwZCwweDgwLDB4NGEsMHg2MCwweDAyLDB4MDAsMHgwMCwweDgxIH19LAorIHsxNiwgMHg5NjMwLCAwLCB7MHgwMCwweDIxLDB4NDAsMHgwOCwweDcwLDB4MDIsMHg5ZCwweDQyLDB4ODYsMHgwMSwweDIwLDB4YzAsMHgwOCwweDMyLDB4ODIsMHgxMiB9fSwKKyB7MTYsIDB4OTY0MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5MiwweDAwLDB4YmMsMHg4MCwweDYzLDB4MjAgfX0sCisgezE2LCAweDk2NTAsIDAsIHsweDgyLDB4MDgsMHgwMiwweDUyLDB4MDAsMHg4NCwweGMyLDB4MjMsMHgyMCwweDg4LDB4MGMsMHgwMiwweDMzLDB4MDAsMHg4NCwweDgwIH19LAorIHsxNiwgMHg5NjYwLCAwLCB7MHgyZiwweDIxLDB4ODksMHg0YywweDAyLDB4MTIsMHgxNCwweDk0LDB4YzUsMHg2NCwweDIxLDB4MDgsMHg0YywweDAyLDB4MGUsMHg4MCB9fSwKKyB7MTYsIDB4OTY3MCwgMCwgezB4OTcsMHg4MiwweGExLDB4ZWMsMHgwOCwweDc5LDB4MDIsMHgzMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk2ODAsIDAsIHsweDQ4LDB4MTQsMHhjZCwweDQ0LDB4YjMsMHgwMCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHg0ZCwweDgwLDB4MDMsMHg4OCwweDI4IH19LAorIHsxNiwgMHg5NjkwLCAwLCB7MHhjMCwweDA4LDB4M2MsMHgwNiwweDBmLDB4MDAsMHhhMywweDQzLDB4MmMsMHhjMiwweDFiLDB4MzgsMHgwMiwweDBmLDB4MDAsMHg5YiB9fSwKKyB7MTYsIDB4OTZhMCwgMCwgezB4ODgsMHg2NCwweGQwLDB4MDgsMHhiOCwweDAyLDB4OGMsMHgxMCwweDkzLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgzMCwweDBhLDB4MTIgfX0sCisgezE2LCAweDk2YjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YWEsMHgwMCwweGZhLDB4MDUsMHgzMiwweDgwIH19LAorIHsxNiwgMHg5NmMwLCAwLCB7MHg4ZSwweGEwLDB4MGIsMHg2OSwweDAwLDB4Y2EsMHg0MCwweDMyLDB4YTAsMHgzYywweGE4LDB4MDMsMHgyYSwweDAwLDB4ZWEsMHgyNiB9fSwKKyB7MTYsIDB4OTZkMCwgMCwgezB4M2UsMHhiMCwweDBkLDB4YTEsMHg2MywweDI4LDB4MjAsMHhjYSwweDQwLDB4MzYsMHhhMCwweDBjLDB4ZTAsMHgxMywweDI4LDB4MDkgfX0sCisgezE2LCAweDk2ZTAsIDAsIHsweGRlLDB4MDAsMHgzMiwweDgwLDB4MmMsMHhhMCwweDAzLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NmYwLCAwLCB7MHg0OCwweDAwLDB4ZjAsMHgyMCwweGY0LDB4MDAsMHgzZiwweDAwLDB4MGYsMHg0MCwweDIzLDB4YjAsMHgwMCwweGVjLDB4MDAsMHgzZiB9fSwKKyB7MTYsIDB4OTcwMCwgMCwgezB4MDYsMHgxZSwweGMyLDB4MTMsMHhmMCwweDg4LDB4ZmMsMHgyMCwweDNmLDB4MDQsMHg4ZSwweGMwLDB4MDMsMHhmMCwweDgwLDB4ZWMgfX0sCisgezE2LCAweDk3MTAsIDAsIHsweDQwLDB4M2IsMHgwYywweDBmLDB4YzAsMHhhMywweGUwLDB4MDAsMHhlOCwweDAwLDB4M2UsMHgwMCwweDRmLDB4ODAsMHgwMywweGQyIH19LAorIHsxNiwgMHg5NzIwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDAsMHhmOSwweDAwLDB4MzIsMHg0MCB9fSwKKyB7MTYsIDB4OTczMCwgMCwgezB4MGMsMHg5MCwweDAzLDB4MjQsMHgwMCwweGM5LDB4ODAsMHgzMiwweDQwLDB4MGYsMHg5MCwweDUzLDB4ZTQsMHgxMCwweGM5LDB4MDAgfX0sCisgezE2LCAweDk3NDAsIDAsIHsweDMyLDB4NDAsMHgwZCwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDM2LDB4NDAsMHg4ZiwweDkwLDB4MDMsMHgyNCwweDEwIH19LAorIHsxNiwgMHg5NzUwLCAwLCB7MHhjOSwweDAxLDB4M2MsMHg0MCwweDBjLDB4OTAsMHgwMywweGMyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTc2MCwgMCwgezB4ODAsMHgwNCwweDQ3LDB4NDQsMHg4OSwweDAwLDB4MjAsMHg0MCwweDA4LDB4OTAsMHgwMiwweDI1LDB4MGEsMHg4MSwweDEwLDB4MjIgfX0sCisgezE2LCAweDk3NzAsIDAsIHsweDQwLDB4NDgsMHg5MCwweDAzLDB4YzQsMHgwMCwweDg5LDB4MDAsMHg3NiwweDQwLDB4MjgsMHg5MCwweDAyLDB4ZTQsMHgxMCwweGI5IH19LAorIHsxNiwgMHg5NzgwLCAwLCB7MHg0MCwweGIyLDB4NDAsMHgwYiwweDkwLDB4MDMsMHg2NCwweDAwLDB4ODksMHgwMCwweDJlLDB4NDEsMHgwOCwweDkwLDB4NDIsMHhlMCB9fSwKKyB7MTYsIDB4OTc5MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAyLDB4YmQsMHgwMCwweDIzLDB4NDggfX0sCisgezE2LCAweDk3YTAsIDAsIHsweDA4LDB4ZDAsMHgwNiwweDFkLDB4MDQsMHg4ZCwweDAwLDB4MjksMHhjMCwweDRhLDB4ZDAsMHgyMiwweGY0LDB4MDAsMHg4NSwweDAwIH19LAorIHsxNiwgMHg5N2IwLCAwLCB7MHg2MSwweDQwLDB4MTgsMHhkMCwweDEyLDB4ZmMsMHgwMCwweGJkLDB4NDAsMHhhMywweDQwLDB4NGIsMHhmMCwweDAyLDB4MDQsMHgwMSB9fSwKKyB7MTYsIDB4OTdjMCwgMCwgezB4OGIsMHgwMCwweDJlLDB4NDAsMHgwOCwweDkwLDB4MDIsMHhjNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk3ZDAsIDAsIHsweDA4LDB4MDQsMHgzNiwweDgwLDB4ODUsMHgyMCwweGEzLDB4NDgsMHgwOCwweDUyLDB4MGEsMHgxNCwweDgxLDB4ODUsMHgyMCwweDI5IH19LAorIHsxNiwgMHg5N2UwLCAwLCB7MHg0OCwweDA4LDB4NTIsMHgwMiwweGI0LDB4ODAsMHg4NSwweDIwLDB4MjUsMHg0OCwweDg4LDB4NTIsMHgwMiwweGQ0LDB4ODAsMHhiNSB9fSwKKyB7MTYsIDB4OTdmMCwgMCwgezB4MjAsMHgyMSwweDQ4LDB4MGIsMHg1MiwweDAyLDB4NDQsMHhhMiwweDgxLDB4MDAsMHgyYywweDRhLDB4MDgsMHgxMiwweDgyLDB4YzIgfX0sCisgezE2LCAweDk4MDAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGY4LDB4NTEsMHgyMiwweDAwIH19LAorIHsxNiwgMHg5ODEwLCAwLCB7MHgyYywweDg1LDB4MDIsMHgyMSwweDQ4LDB4YzgsMHgwMCwweGJhLDB4MTQsMHgwZiwweDg1LDB4MTIsMHhlMSwweDQyLDB4YzgsMHg1MCB9fSwKKyB7MTYsIDB4OTgyMCwgMCwgezB4MjIsMHgwMCwweDBjLDB4MDAsMHgwMywweGUwLDB4MDAsMHhmOCwweDUwLDB4MzIsMHgwMCwweDA3LDB4NDUsMHgwMywweDIwLDB4ODAgfX0sCisgezE2LCAweDk4MzAsIDAsIHsweGMwLDB4MDEsMHgzZSwweDA4LDB4MmMsMHg4MiwweDAzLDB4ZWUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ODQwLCAwLCB7MHg5OCwweDBkLDB4ZTQsMHg0MCwweGYxLDB4MTAsMHgzZSwweDQ0LDB4MDcsMHg5MSwweDQzLDB4ZTQsMHg1OCwweGY5LDB4MTEsMHgzNCB9fSwKKyB7MTYsIDB4OTg1MCwgMCwgezB4NDQsMHg0ZiwweDkxLDB4MDIsMHhlNCwweDUwLDB4ZjksMHgxMCwweDNjLDB4NGYsMHgwZiwweDkzLDB4ODMsMHhlNCwweGYwLDB4ZjkgfX0sCisgezE2LCAweDk4NjAsIDAsIHsweDExLDB4M2EsMHg0ZiwweDBmLDB4OTEsMHgwMywweGU0LDB4YTAsMHhmZCwweDI4LDB4M2UsMHg0YSwweDBmLDB4OTIsMHg4MywweGU2IH19LAorIHsxNiwgMHg5ODcwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGY2LDB4YTAsMHhjZCwweGEwLDB4YjMsMHg2OCB9fSwKKyB7MTYsIDB4OTg4MCwgMCwgezB4OGMsMHg5YSwweDAzLDB4MzYsMHg4MCwweGM1LDB4YTAsMHgyMiwweDYwLDB4MGMsMHg5YSwweDIzLDB4MjYsMHgwNCwweGY5LDB4YTAgfX0sCisgezE2LCAweDk4OTAsIDAsIHsweDMyLDB4NjYsMHgwYywweDlhLDB4ODMsMHgwNiwweDIwLDB4YzUsMHhhMCwweDIyLDB4NjAsMHgwYywweDliLDB4MDMsMHgyNiwweDQ4IH19LAorIHsxNiwgMHg5OGEwLCAwLCB7MHhjOSwweDAwLDB4M2UsMHg3OCwweDBjLDB4OWEsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OThiMCwgMCwgezB4MzgsMHgwMCwweGUxLDB4MDAsMHg4OCwweDQ0LDB4MjIsMHg5NSwweDA4LDB4ODUsMHgxMiwweGExLDB4NDIsMHg4OCwweDQwLDB4MDIgfX0sCisgezE2LCAweDk4YzAsIDAsIHsweDkwLDB4MDgsMHg4NCwweDAyLDB4MjMsMHhhMCwweGJhLDB4NDAsMHgyMiwweGEwLDB4MDgsMHg4ZSwweDkyLDB4YTMsMHhhMCwweGE4IH19LAorIHsxNiwgMHg5OGQwLCAwLCB7MHg0MCwweDJhLDB4MTAsMHgwOCwweGFlLDB4MDIsMHgyMywweDQwLDB4ODgsMHgwMCwweDJlLDB4MzgsMHgwOCwweDg0LDB4MTIsMHgwZSB9fSwKKyB7MTYsIDB4OThlMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTUsMHhjNCwweDAwLDB4OGIsMHgxMiwweDIyLDB4NDAgfX0sCisgezE2LCAweDk4ZjAsIDAsIHsweDA4LDB4OTAsMHgwMiwweDQ0LDB4MDAsMHg4MSwweDQwLDB4YTAsMHg1MCwweDA4LDB4MTEsMHgwYSwweDA1LDB4MDAsMHhiMSwweDEwIH19LAorIHsxNiwgMHg5OTAwLCAwLCB7MHhhMCwweDQ4LDB4MDgsMHg5MCwweDAyLDB4MDQsMHgwMCwweDgxLDB4NDAsMHgyMCwweDUwLDB4MjgsMHgxMSwweDAyLDB4NDQsMHg4MiB9fSwKKyB7MTYsIDB4OTkxMCwgMCwgezB4ODEsMHgwMCwweDJjLDB4NTAsMHgwOCwweDExLDB4MDIsMHgwMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk5MjAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAyLDB4ODksMHg0MCwweDIyLDB4NDAsMHgwOCwweDk0LDB4MTIsMHhhNSwweDAwLDB4ODksMHgyOCwweDIyIH19LAorIHsxNiwgMHg5OTMwLCAwLCB7MHg0OSwweDA4LDB4OTQsMHgwMiwweDI0LDB4NDgsMHhiOSwweDE0LDB4MjIsMHg0MCwweDA4LDB4OTQsMHgwMiwweGE0LDB4NDAsMHhhMSB9fSwKKyB7MTYsIDB4OTk0MCwgMCwgezB4NTAsMHgyYSwweDUwLDB4MDgsMHg5MSwweDQyLDB4NjQsMHgwMCwweDg5LDB4NDAsMHgyZSwweDQwLDB4MDgsMHgxMCwweDAyLDB4MDYgfX0sCisgezE2LCAweDk5NTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGM5LDB4MDAsMHgzMCwweDcwIH19LAorIHsxNiwgMHg5OTYwLCAwLCB7MHgyYywweDEwLDB4MGIsMHg2NiwweDAwLDB4YzksMHg0MCwweDMyLDB4NTAsMHgwYywweDkwLDB4MDMsMHgyNiwweDIwLDB4ZjksMHhjMCB9fSwKKyB7MTYsIDB4OTk3MCwgMCwgezB4MzIsMHg3MCwweDBjLDB4OTAsMHgwMywweDI2LDB4MjAsMHhjOSwweDAwLDB4MzIsMHg0MCwweDBjLDB4OWMsMHgwMywweDY0LDB4MDAgfX0sCisgezE2LCAweDk5ODAsIDAsIHsweGM5LDB4NDEsMHgzZSwweDQwLDB4MmMsMHg5MCwweDBiLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5OTkwLCAwLCB7MHgyOCwweDAxLDB4YTQsMHgwMCwweGY5LDB4MDQsMHgzZSwweDQ4LDB4MGYsMHg5MCwweDAzLDB4ZTQsMHg4OCwweGY5LDB4MDAsMHgzNCB9fSwKKyB7MTYsIDB4OTlhMCwgMCwgezB4NDEsMHgyZiwweDljLDB4MDMsMHhlNCwweDEwLDB4ZjksMHgwMCwweDNlLDB4NDQsMHgyZiwweDk5LDB4MDMsMHhlNCwweDEwLDB4ZjkgfX0sCisgezE2LCAweDk5YjAsIDAsIHsweDAwLDB4M2UsMHg1MCwweDBmLDB4MTAsMHg0YiwweGE0LDB4MTAsMHhmOSwweDIwLDB4M2MsMHg0MCwweDBmLDB4OTAsMHgwMywweDRhIH19LAorIHsxNiwgMHg5OWMwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDAsMHhjOCwweDAwLDB4M2UsMHgxMCB9fSwKKyB7MTYsIDB4OTlkMCwgMCwgezB4MmMsMHg4MCwweDAzLDB4MjAsMHgwMiwweGMwLDB4NDAsMHgzMiwweDAwLDB4MWMsMHgwNCwweDBmLDB4MjEsMHgwMCwweGMwLDB4MDQgfX0sCisgezE2LCAweDk5ZTAsIDAsIHsweDM4LDB4MDAsMHgwZiwweDgwLDB4MDMsMHgyMSwweDA4LDB4YzgsMHg2MCwweDMwLDB4MTAsMHgwZiwweDgwLDB4MDIsMHgyMCwweDAwIH19LAorIHsxNiwgMHg5OWYwLCAwLCB7MHhmOCwweDAwLDB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMywweGNhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWEwMCwgMCwgezB4MjgsMHgwNSwweDFhLDB4MjAsMHg4MiwweDA0LDB4MmYsMHg4MCwweDA4LDB4YTAsMHgwMiwweDM4LDB4MDAsMHg4ZSwweDgwLDB4MjIgfX0sCisgezE2LCAweDlhMTAsIDAsIHsweDgwLDB4MDgsMHhlMCwweDAyLDB4MjgsMHgwMCwweDhhLDB4MDAsMHgyMiwweDgxLDB4MGIsMHgyMCwweDAyLDB4MjgsMHgwMCwweGRlIH19LAorIHsxNiwgMHg5YTIwLCAwLCB7MHhlNCwweDM2LDB4ODAsMHgwYiwweGEwLDB4NDIsMHgyOCwweDAwLDB4YmEsMHgwNCwweDIyLDB4ODAsMHgwOCwweGEwLDB4MDIsMHhjYSB9fSwKKyB7MTYsIDB4OWEzMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4ODMsMHgwMSwweDJjLDB4ODAgfX0sCisgezE2LCAweDlhNDAsIDAsIHsweDA4LDB4MzAsMHgwMiwweDJlLDB4NjAsMHg4MiwweDkwLDB4YTAsMHhjMCwweDQ4LDB4MzAsMHgwMiwweDBjLDB4MDIsMHg4MywweDAwIH19LAorIHsxNiwgMHg5YTUwLCAwLCB7MHgyOCwweGMwLDB4MGIsMHgzMCwweDBhLDB4MmMsMHgwMCwweDgzLDB4YzIsMHgyMCwweGMwLDB4MGIsMHgzMCwweDJhLDB4MmMsMHgwMCB9fSwKKyB7MTYsIDB4OWE2MCwgMCwgezB4YjMsMHgwMCwweGEwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhjYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDlhNzAsIDAsIHsweGEwLDB4MDEsMHgzYywweDAwLDB4ODcsMHgwMSwweDJkLDB4YzIsMHgwOCwweGYzLDB4MTIsMHgzYywweDAwLDB4OGYsMHgwMSwweDIxIH19LAorIHsxNiwgMHg5YTgwLCAwLCB7MHhjOCwweDY4LDB4NzIsMHgyMiwweDFlLDB4MDQsMHg4NywweDIwLDB4MjEsMHhjNCwweDBiLDB4NzAsMHgwMiwweDNjLDB4ODQsMHg5ZiB9fSwKKyB7MTYsIDB4OWE5MCwgMCwgezB4MDAsMHgyNSwweGM0LDB4NGIsMHg3MCwweDAyLDB4MWMsMHgwNCwweGI3LDB4ODEsMHgyMSwweGM4LDB4MDgsMHg3MiwweDAyLDB4ZTggfX0sCisgezE2LCAweDlhYTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDAwLDB4MWUsMHgwMCwweGM3LDB4ODEsMHgzYywweGEwIH19LAorIHsxNiwgMHg5YWIwLCAwLCB7MHg0YywweDdhLDB4MGIsMHgxYSwweDAwLDB4YzYsMHg4MCwweDMwLDB4ZTAsMHgwOCwweGY4LDB4ODIsMHgwZSwweDQwLDB4Y2YsMHhmMCB9fSwKKyB7MTYsIDB4OWFjMCwgMCwgezB4MzksMHhlOCwweDBmLDB4M2EsMHgwMywweDFlLDB4MjAsMHhjNywweDgwLDB4MzEsMHhlMywweDBmLDB4MzgsMHgyMywweDFmLDB4MDggfX0sCisgezE2LCAweDlhZDAsIDAsIHsweGZmLDB4YzAsMHgzMywweGYyLDB4MGMsMHg3ZSwweDAzLDB4ZWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5YWUwLCAwLCB7MHgwOCwweDE1LDB4ODgsMHgwYSwweDdiLDB4MDAsMHgzZSwweGMxLDB4MGIsMHgzNCwweDIzLDB4YzgsMHgxMCwweGZiLDB4MDIsMHgzZSB9fSwKKyB7MTYsIDB4OWFmMCwgMCwgezB4Y2EsMHgwZiwweGI3LDB4NDMsMHhlYywweDgwLDB4ZmIsMHgwMCwweDJlLDB4YzIsMHgwYiwweGI0LDB4ODMsMHhlZCwweGQwLDB4ZmEgfX0sCisgezE2LCAweDliMDAsIDAsIHsweDAwLDB4M2UsMHhkOSwweDBmLDB4YjMsMHg4MywweGVjLDB4ODAsMHhiYiwweDIwLDB4M2UsMHhkOCwweDJmLDB4YjQsMHgwMywweGMyIH19LAorIHsxNiwgMHg5YjEwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGZlLDB4MDAsMHhmNSwweDkxLDB4MzEsMHhhMCB9fSwKKyB7MTYsIDB4OWIyMCwgMCwgezB4MGMsMHhmYywweDAzLDB4ZmUsMHgwMCwweGM0LDB4ODEsMHgzMSwweGVlLDB4OGQsMHhmOCwweDBhLDB4M2UsMHgzMCwweGNmLDB4ODQgfX0sCisgezE2LCAweDliMzAsIDAsIHsweDMzLDB4ZTAsMHgyYywweGY4LDB4ODMsMHhmZSwweDEwLDB4ZmUsMHg4MCwweDMzLDB4ZTAsMHgwYywweGY5LDB4MTksMHgzZiwweDQ4IH19LAorIHsxNiwgMHg5YjQwLCAwLCB7MHhjZiwweGMwLDB4MzMsMHhlMCwweDA0LDB4ZmMsMHgwMywweGMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWI1MCwgMCwgezB4YTgsMHgxMSwweDljLDB4MDgsMHhiNywweGExLDB4MjEsMHhjOCwweDA4LDB4NzEsMHgwMiwweGYwLDB4YTAsMHg4NSwweDIwLDB4MjEgfX0sCisgezE2LCAweDliNjAsIDAsIHsweGNlLDB4MDgsMHg3MCwweDAyLDB4M2MsMHg4MCwweDhmLDB4MDAsMHgyYiwweGM1LDB4MDgsMHg3MSwweDAyLDB4ZGMsMHgxMCwweGI0IH19LAorIHsxNiwgMHg5YjcwLCAwLCB7MHgwMCwweDIxLDB4YzEsMHgwYSwweGYzLDB4ODIsMHgwYywweDAwLDB4ODcsMHgwMSwweDI5LDB4YzAsMHgwOCwweDcxLDB4MDIsMHg2YSB9fSwKKyB7MTYsIDB4OWI4MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5ZCwweDAwLDB4YmQsMHgyMSwweDI3LDB4ODIgfX0sCisgezE2LCAweDliOTAsIDAsIHsweDAwLDB4NzAsMHgwMiwweGZjLDB4MDQsMHg4YywweDAwLDB4YTcsMHhjYywweGE4LDB4NzAsMHgwMiwweDNjLDB4MDgsMHhhZiwweDAwIH19LAorIHsxNiwgMHg5YmEwLCAwLCB7MHgyMSwweGMwLDB4MDgsMHg3MCwweDAyLDB4ZGMsMHgwMCwweGI3LDB4MDAsMHgyMSwweGM0LDB4MDgsMHg3MCwweDE2LDB4MWMsMHgwYSB9fSwKKyB7MTYsIDB4OWJiMCwgMCwgezB4OGYsMHgwMCwweDIxLDB4YzAsMHgwOCwweDcwLDB4MDIsMHhjMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDliYzAsIDAsIHsweDIwLDB4MTAsMHhjOCwweDAwLDB4YmIsMHg0NCwweDI0LDB4ZTIsMHgwOCwweGIxLDB4MDIsMHhjMiwweDgwLDB4MDEsMHg4MCwweDI0IH19LAorIHsxNiwgMHg5YmQwLCAwLCB7MHhkMCwweDg4LDB4MzAsMHgwMiwweDBmLDB4NTIsMHg4MywweDkxLDB4MjgsMHhlNCwweDg4LDB4M2QsMHgwMiwweGNlLDB4ZDAsMHhiMCB9fSwKKyB7MTYsIDB4OWJlMCwgMCwgezB4YjIsMHhhMiwweGMwLDB4MGEsMHgzNCwweDEyLDB4MGMsMHgwMiwweDgzLDB4MDAsMHgyOCwweGMwLDB4MDgsMHgzMCwweDAyLDB4NDggfX0sCisgezE2LCAweDliZjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YWMsMHgwMCwweGZiLDB4MDEsMHhlNCwweDQwIH19LAorIHsxNiwgMHg5YzAwLCAwLCB7MHgyYywweGYwLDB4NDMsMHhlNSwweDAwLDB4OGEsMHg4OCwweDM3LDB4ZTAsMHgwMCwweGZhLDB4MDIsMHgzZCwweDAwLDB4ZWYsMHgwMCB9fSwKKyB7MTYsIDB4OWMxMCwgMCwgezB4MzMsMHhkMSwweDBjLDB4ZjQsMHgwMywweGZkLDB4MDAsMHhmOSwweDQwLDB4MzMsMHhlOCwweDBjLDB4ZmMsMHgwMSwweDNjLDB4MDQgfX0sCisgezE2LCAweDljMjAsIDAsIHsweGNmLDB4MDIsMHgzMywweGMwLDB4MmMsMHhmMCwweDAzLDB4ZWEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5YzMwLCAwLCB7MHg4MCwweDAwLDB4ZWUsMHgwOCwweGY5LDB4MTAsMHgzYSwweGQwLDB4MGYsMHhiMCwweDkzLDB4ZWMsMHgwMCwweGZiLDB4MGIsMHgzYSB9fSwKKyB7MTYsIDB4OWM0MCwgMCwgezB4YzAsMHg4ZSwweGIwLDB4ODMsMHhlYywweDgwLDB4ZmIsMHgwOSwweDdlLDB4YzgsMHgwZiwweGIyLDB4MTMsMHhlYywweDAwLDB4ZjkgfX0sCisgezE2LCAweDljNTAsIDAsIHsweDAwLDB4M2UsMHhjMiwweDhmLDB4YjIsMHg0YiwweGNjLDB4MDQsMHhmYiwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweDYwIH19LAorIHsxNiwgMHg5YzYwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGZjLDB4MDAsMHhmZiwweDA4LDB4MzMsMHhjMCB9fSwKKyB7MTYsIDB4OWM3MCwgMCwgezB4MWMsMHhmMCwweDAzLDB4NzAsMHg0MCwweGM0LDB4YzAsMHgzMywweGMyLDB4MGYsMHhmMCwweDAzLDB4MWMsMHgxMCwweGM3LDB4MDAgfX0sCisgezE2LCAweDljODAsIDAsIHsweDMxLDB4YzAsMHgwYywweDcwLDB4MDMsMHgxYywweDAwLDB4YzUsMHg0MSwweDMzLDB4YzAsMHgwYywweGYwLDB4MjMsMHgyYywweDAwIH19LAorIHsxNiwgMHg5YzkwLCAwLCB7MHhjZiwweDAwLDB4YjMsMHhjMCwweDZjLDB4ZjAsMHgwMywweDgwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWNhMCwgMCwgezB4ODEsMHgwNCwweDZhLDB4MDAsMHhiOSwweDkwLDB4MzIsMHhmMSwweDA4LDB4YjAsMHgwMiwweDBhLDB4MTAsMHhkOSwweDAwLDB4MjIgfX0sCisgezE2LCAweDljYjAsIDAsIHsweGMxLDB4MGIsMHhiMCwweDAyLDB4MmMsMHgwMCwweGNiLDB4MDYsMHgyMiwweGMwLDB4ODgsMHhiMCwweDEyLDB4MmMsMHgwMCwweDg4IH19LAorIHsxNiwgMHg5Y2MwLCAwLCB7MHg4MCwweDIyLDB4YzEsMHgwZCwweGIwLDB4MDIsMHgyYywweDAwLDB4ODMsMHgwMCwweDIyLDB4YzEsMHgwOCwweGIwLDB4NDYsMHhlMCB9fSwKKyB7MTYsIDB4OWNkMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDEsMHgyZSwweDAwLDB4YjksMHgwMCwweDIyLDB4ZjAgfX0sCisgezE2LCAweDljZTAsIDAsIHsweDA4LDB4YjAsMHgxMiwweDY0LDB4MDAsMHg4YSwweDAwLDB4MjIsMHhjMCwweDBiLDB4MzAsMHg0MiwweDJjLDB4MDAsMHg4YiwweDAwIH19LAorIHsxNiwgMHg5Y2YwLCAwLCB7MHgyMiwweGMwLDB4MDgsMHhiMCwweDAyLDB4MmMsMHgwMCwweDhhLDB4MDAsMHgyMiwweGMwLDB4ODgsMHgzMCwweDBhLDB4MmMsMHgwMCB9fSwKKyB7MTYsIDB4OWQwMCwgMCwgezB4OGIsMHgwMCwweDIwLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhlMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDlkMTAsIDAsIHsweDA4LDB4MDQsMHgwYywweDA0LDB4YjEsMHgwMiwweGU0LDB4YzEsMHgwOCwweGIwLDB4MjIsMHgyMCwweDAyLDB4OTMsMHgwMCwweDIwIH19LAorIHsxNiwgMHg5ZDIwLCAwLCB7MHhjMCwweDBiLDB4MzAsMHgxMiwweDBjLDB4MDIsMHg4MywweDAyLDB4YTAsMHhjMCwweDI4LDB4MzAsMHgwZSwweDBjLDB4MDIsMHg4MCB9fSwKKyB7MTYsIDB4OWQzMCwgMCwgezB4MDAsMHhhMCwweGMwLDB4NDksMHgzMCwweDBhLDB4MGMsMHgwMiwweDhiLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4YzIgfX0sCisgezE2LCAweDlkNDAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGY5LDB4MjQsMHgzMiwweGMwIH19LAorIHsxNiwgMHg5ZDUwLCAwLCB7MHgwOCwweGYwLDB4MDMsMHg2NCwweDAwLDB4YzgsMHgwMCwweGIzLDB4YzAsMHgxZiwweGYwLDB4MGIsMHgzYywweDAwLDB4OGYsMHgwMCB9fSwKKyB7MTYsIDB4OWQ2MCwgMCwgezB4MzMsMHhjMCwweDRjLDB4ZjAsMHg0MywweDNjLDB4MDgsMHhjMywweDAwLDB4MzEsMHhjMCwweDBjLDB4ZjAsMHgwMywweDNkLDB4NDggfX0sCisgezE2LCAweDlkNzAsIDAsIHsweGNmLDB4MDAsMHgzMSwweGMwLDB4MGMsMHhmMCwweDAzLDB4ODAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ZDgwLCAwLCB7MHhhMCwweDFkLDB4ZjAsMHgwNCwweGY5LDB4NDEsMHgzYiwweGMwLDB4NGYsMHhmMCwweDAzLDB4ZjAsMHgxMSwweGZkLDB4MDAsMHgzZiB9fSwKKyB7MTYsIDB4OWQ5MCwgMCwgezB4YzAsMHg4NywweDcwLDB4MjcsMHhmYywweDAwLDB4ZWYsMHgwNiwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDIsMHhmYywweDA4LDB4ZmMgfX0sCisgezE2LCAweDlkYTAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDQ3LDB4ZjAsMHg0MywweGZjLDB4MDAsMHg3NywweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGU4IH19LAorIHsxNiwgMHg5ZGIwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGQyLDB4MDAsMHhjNywweDAxLDB4MzcsMHgwYyB9fSwKKyB7MTYsIDB4OWRjMCwgMCwgezB4MGYsMHhlOCwweDIzLDB4MTAsMHg0YSwweGM0LDB4YzAsMHgzMSwweDMwLDB4MGMsMHhjOSwweDAzLDB4MzQsMHg0NiwweGNmLDB4MTAgfX0sCisgezE2LCAweDlkZDAsIDAsIHsweDMzLDB4ZDAsMHgwYywweGY0LDB4MDMsMHgzYywweDU4LDB4Y2YsMHgwMCwweDMzLDB4YzAsMHgyZCwweGYxLDB4MDMsMHgzZSwweDAyIH19LAorIHsxNiwgMHg5ZGUwLCAwLCB7MHhjZiwweDIxLDB4M2YsMHhlNCwweDBmLDB4ZjIsMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWRmMCwgMCwgezB4ODAsMHgxMCwweGU0LDB4ODQsMHgwYiwweDQwLDB4MjIsMHg0YywweDBiLDB4YTgsMHgwMiwweDJjLDB4YzAsMHg4YiwweDIwLDB4MjIgfX0sCisgezE2LCAweDllMDAsIDAsIHsweGM4LDB4NGEsMHgzMiwweDAyLDB4MjQsMHg4MCwweDgzLDB4MjAsMHgyMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4MjAsMHgwMCwweDhiIH19LAorIHsxNiwgMHg5ZTEwLCAwLCB7MHgyMSwweDMyLDB4Y2EsMHg0OCwweDMyLDB4MDIsMHgyYywweDMwLDB4OGYsMHg5MCwweDJlLDB4ODgsMHgwYiwweGJkLDB4MTIsMHgyMCB9fSwKKyB7MTYsIDB4OWUyMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjZSwweDIwLDB4YTMsMHg0MCwweGUwLDB4NDggfX0sCisgezE2LCAweDllMzAsIDAsIHsweDRiLDB4MjAsMHgyMiwweDBjLDB4MDIsMHg4MiwweDAwLDB4MmEsMHgwMCwweDA4LDB4MjAsMHgwMiwweDA0LDB4ODAsMHg4MCwweDIwIH19LAorIHsxNiwgMHg5ZTQwLCAwLCB7MHgyMCwweGM4LDB4MDgsMHgwMiwweDAyLDB4MGMsMHgwMCwweDgwLDB4MGMsMHg2MCwweDAwLDB4MDgsMHgyMCwweDEyLDB4MmMsMHg4OCB9fSwKKyB7MTYsIDB4OWU1MCwgMCwgezB4ODMsMHgwMCwweDJjLDB4ZTgsMHgwYiwweDMwLDB4MDIsMHg2MiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDllNjAsIDAsIHsweGMwLDB4MTUsMHhhZSwweDAwLDB4YWIsMHgwMSwweGEyLDB4NjAsMHgwYiwweGEwLDB4MDIsMHgyMCwweDAxLDB4ODEsMHgwMCwweDIyIH19LAorIHsxNiwgMHg5ZTcwLCAwLCB7MHhjMCwweDBhLDB4OTAsMHgxMiwweDA0LDB4MjAsMHg4YSwweDA4LDB4MjIsMHhjMSwweDA4LDB4YTAsMHgwMiwweDI4LDB4MDAsMHg4OCB9fSwKKyB7MTYsIDB4OWU4MCwgMCwgezB4MDAsMHgyNCwweDQ0LDB4MDgsMHhhMiwweDAyLDB4YWMsMHgwMCwweDhiLDB4MDQsMHgyZSwweDg4LDB4MDMsMHhiMCwweDAyLDB4NzAgfX0sCisgezE2LCAweDllOTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWMsMHgwMCwweGVhLDB4OTAsMHgzMiwweDI4IH19LAorIHsxNiwgMHg5ZWEwLCAwLCB7MHgwZiwweGI2LDB4MDMsMHgyMCwweDA4LDB4YzksMHgwNCwweDNhLDB4YzAsMHg0YywweDkwLDB4MjIsMHgyNCwweDAwLDB4Y2IsMHg0MCB9fSwKKyB7MTYsIDB4OWViMCwgMCwgezB4MzIsMHhhOCwweDBjLDB4YjIsMHgwMywweDJjLDB4MDAsMHhjYiwweDgwLDB4YjIsMHhlMCwweDBjLDB4YjAsMHgwYiwweDA0LDB4MDAgfX0sCisgezE2LCAweDllYzAsIDAsIHsweGNiLDB4MDAsMHgzZSwweGMwLDB4NGYsMHhiMCwweDBiLDB4NTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ZWQwLCAwLCB7MHhlMCwweDAxLDB4YmMsMHgwMCwweGRmLDB4ODAsMHgzYiwweDgxLDB4MGYsMHhmMCwweGMzLDB4ZmMsMHgwMCwweGJlLDB4MDEsMHgxZiB9fSwKKyB7MTYsIDB4OWVlMCwgMCwgezB4MDAsMHgwZiwweGUwLDB4MjMsMHhmNCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4YjAsMHg0ZiwweGYwLDB4NDMsMHhkNCwweDAyLDB4ZmYgfX0sCisgezE2LCAweDllZjAsIDAsIHsweDkxLDB4M2EsMHhlMCwweDRlLDB4ZjAsMHgwMywweDdjLDB4MGMsMHhmZiwweDAwLDB4MmYsMHg4MCwweDBmLDB4MzAsMHgwMywweGI4IH19LAorIHsxNiwgMHg5ZjAwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGFjLDB4MDEsMHhjYSwweDAwLDB4NzIsMHg1MCB9fSwKKyB7MTYsIDB4OWYxMCwgMCwgezB4MDQsMHhiNCwweDAzLDB4MmMsMHg4MiwweGNiLDB4MDAsMHgzMiwweGUwLDB4MGMsMHhiOCwweDAzLDB4MjcsMHgwNCwweGM4LDB4YzggfX0sCisgezE2LCAweDlmMjAsIDAsIHsweGIyLDB4YTIsMHgwYywweDg4LDB4MDMsMHgyYywweDAwLDB4YzEsMHgwMCwweDNlLDB4MDAsMHgyYywweDMwLDB4MWIsMHgyYywweDA0IH19LAorIHsxNiwgMHg5ZjMwLCAwLCB7MHhmYiwweDEwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweDEwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWY0MCwgMCwgezB4YzgsMHgwNSwweDJjLDB4MDQsMHgwMywweDUwLDB4YTIsMHhlMCwweDA4LDB4MzQsMHg0MiwweDMzLDB4MDAsMHg4OCwweDAwLDB4MjAgfX0sCisgezE2LCAweDlmNTAsIDAsIHsweDEwLDB4MGQsMHg4NCwweDAzLDB4MjUsMHgwMCwweDhhLDB4NDAsMHgyMiwweDkwLDB4MDgsMHhhNSwweDAyLDB4MmMsMHgwMCwweDg5IH19LAorIHsxNiwgMHg5ZjYwLCAwLCB7MHhhNCwweDNhLDB4NDAsMHgwOCwweGIwLDB4MDIsMHgyYywweDAwLDB4YmYsMHg4NCwweDJlLDB4ODAsMHgwYiwweGYwLDB4NTIsMHgzMiB9fSwKKyB7MTYsIDB4OWY3MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg2YywweDgwLDB4ODEsMHg4MCwweDI0LDB4ODggfX0sCisgezE2LCAweDlmODAsIDAsIHsweDg5LDB4M2MsMHgyNiwweDIxLDB4MDAsMHg5MCwweDAwLDB4MjAsMHgwMiwweDA4LDB4ODAsMHg4MiwweDAwLDB4MjAsMHg5YiwweDAwIH19LAorIHsxNiwgMHg5ZjkwLCAwLCB7MHgyMiwweDQwLDB4ODgsMHhiMCwweDEyLDB4MGMsMHgwOCwweDgzLDB4ODAsMHgyYywweGMwLDB4MDgsMHgxMCwweDAyLDB4MGMsMHgwMCB9fSwKKyB7MTYsIDB4OWZhMCwgMCwgezB4YjMsMHg4MCwweDJjLDB4NDAsMHgwYiwweDMwLDB4MDIsMHgzOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDlmYjAsIDAsIHsweDIwLDB4MDEsMHgzZSwweDBhLDB4ODUsMHhhMCwweGE1LDB4NjAsMHgwOCwweGZiLDB4ODIsMHgzZSwweDg0LDB4OWYsMHg4MSwweDYzIH19LAorIHsxNiwgMHg5ZmMwLCAwLCB7MHhlMCwweDg5LDB4NzksMHgxMiwweDUyLDB4ODAsMHg5NywweDgyLDB4MjEsMHg2YywweDE4LDB4NzgsMHgwMiwweDEyLDB4MDAsMHg4NyB9fSwKKyB7MTYsIDB4OWZkMCwgMCwgezB4YTEsMHgyOSwweGUwLDB4MDgsMHg1YiwweDAyLDB4MWUsMHgwMCwweGI3LDB4YzAsMHgyZCwweDYwLDB4MGIsMHg3OCwweDAyLDB4MDggfX0sCisgezE2LCAweDlmZTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweDgxLDB4MDgsMHgyNiwweGMyIH19LAorIHsxNiwgMHg5ZmYwLCAwLCB7MHgyYywweDMyLDB4MTMsMHgwZSwweGE0LDB4ZDIsMHgwMCwweGIwLDB4MDAsMHgxYywweDIxLDB4MTIsMHgyNCwweDAyLDB4ZDEsMHgyMCB9fSwKKyB7MTYsIDB4YTAwMCwgMCwgezB4MzAsMHhjOCwweDBjLDB4MTAsMHgwMywweDBjLDB4MDAsMHhjMiwweDEwLDB4M2MsMHg4MCwweDBjLDB4MjMsMHgwMywweDBjLDB4NDAgfX0sCisgezE2LCAweGEwMTAsIDAsIHsweGYzLDB4MDAsMHgzYywweDQ4LDB4MGYsMHgzMCwweDBiLDB4MTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMDIwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwMCwweGZkLDB4MjAsMHhiYiwweDQwLDB4MDcsMHg3MiwweDAyLDB4ZjAsMHgxMCwweGVkLDB4MTAsMHgzZiB9fSwKKyB7MTYsIDB4YTAzMCwgMCwgezB4YzQsMHgwZiwweGQxLDB4NjMsMHhiNCwweDgwLDB4ZWYsMHgwMCwweDNmLDB4YzgsMHgwZiwweGYwLDB4MDMsMHhkOCwweDAwLDB4ZmUgfX0sCisgezE2LCAweGEwNDAsIDAsIHsweDM0LDB4M2YsMHhjNCwweDBmLDB4ZWIsMHg0MywweGZjLDB4MDAsMHhmZiwweDA4LDB4N2YsMHg0MCwweDBmLDB4ZjEsMHg4MywweGQwIH19LAorIHsxNiwgMHhhMDUwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGVjLDB4MDAsMHhjOCwweDAwLDB4MzMsMHg4MCB9fSwKKyB7MTYsIDB4YTA2MCwgMCwgezB4OGYsMHgyOCwweDAzLDB4MjAsMHgwMCwweDQ5LDB4MDIsMHgzMiwweGMwLDB4MGYsMHg5MCwweDAzLDB4MjAsMHgwMCwweGNiLDB4MDAgfX0sCisgezE2LCAweGEwNzAsIDAsIHsweDMyLDB4NDAsMHg0YywweGIwLDB4MGIsMHgyYywweDAwLDB4Y2IsMHg4MCwweDMyLDB4YzAsMHgwZSwweDllLDB4MDMsMHgyNCwweDAwIH19LAorIHsxNiwgMHhhMDgwLCAwLCB7MHhmYiwweDIwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweDJhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTA5MCwgMCwgezB4NDgsMHgxMSwweDljLDB4MDAsMHg4ZCwweDAxLDB4MjEsMHhjMCwweDBiLDB4NjAsMHgwMiwweDFkLDB4MDAsMHhkNiwweDAwLDB4MjEgfX0sCisgezE2LCAweGEwYTAsIDAsIHsweDAwLDB4MGIsMHhlMCwweDAyLDB4MDAsMHgwMCwweDgzLDB4MDQsMHgyMCwweDQwLDB4MDgsMHg3MCwweDQyLDB4MzQsMHgwMiwweDg3IH19LAorIHsxNiwgMHhhMGIwLCAwLCB7MHgwMSwweDIzLDB4YzAsMHgyOCwweDUxLDB4MGEsMHgxYywweDA0LDB4YjcsMHgzMCwweDJkLDB4YzAsMHgwYiwweDcyLDB4MDMsMHg5MiB9fSwKKyB7MTYsIDB4YTBjMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4YTYsMHg0MCwweDIxLDB4YTAgfX0sCisgezE2LCAweGEwZDAsIDAsIHsweDBiLDB4NjgsMHgwMiwweDBlLDB4MDAsMHg4ZiwweDgwLDB4MjEsMHhlMCwweDBiLDB4NzgsMHgwMiwweDE2LDB4MTAsMHhhNSwweDgwIH19LAorIHsxNiwgMHhhMGUwLCAwLCB7MHgyMSwweGUwLDB4MDgsMHgxOCwweDAyLDB4MWUsMHgwMCwweDgzLDB4ODAsMHgyMSwweGEwLDB4MDgsMHg3OCwweDAyLDB4MWYsMHgwMCB9fSwKKyB7MTYsIDB4YTBmMCwgMCwgezB4YjcsMHg4MCwweDJkLDB4ZTAsMHgwYiwweDM4LDB4MDIsMHgzMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGExMDAsIDAsIHsweDQ4LDB4MTQsMHhlYywweDEyLDB4YTEsMHg2NCwweDIwLDB4ZTYsMHgwYiwweDIwLDB4MDIsMHgwMCwweDEwLDB4OTAsMHg0YSwweDIwIH19LAorIHsxNiwgMHhhMTEwLCAwLCB7MHgyMCwweDRiLDB4MDAsMHg0MiwweDA0LDB4MDAsMHg4MywweDAwLDB4MjAsMHhjMiwweDA4LDB4MzAsMHgwMiwweDhjLDB4MDAsMHg4MyB9fSwKKyB7MTYsIDB4YTEyMCwgMCwgezB4MDQsMHgyMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4MGUsMHgwMCwweGIzLDB4MDAsMHgyYywweGUwLDB4NGIsMHgzMCwweDAyLDB4OTIgfX0sCisgezE2LCAweGExMzAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YjgsMHgwMCwweGVlLDB4YzAsMHgzMywweDkwIH19LAorIHsxNiwgMHhhMTQwLCAwLCB7MHgwZiwweGEwLDB4MWIsMHgwOCwweDAwLDB4Y2EsMHg0MCwweGIyLDB4ODIsMHgwZiwweGEwLDB4MGIsMHgyOCwweDAyLDB4Y2EsMHgwMCB9fSwKKyB7MTYsIDB4YTE1MCwgMCwgezB4YjIsMHg5MCwweGFjLDB4YTAsMHgwMywweDI5LDB4MDAsMHhjYSwweDQwLDB4YjIsMHg4MCwweDhlLDB4YTQsMHgwMywweDJhLDB4MDAgfX0sCisgezE2LCAweGExNjAsIDAsIHsweGZhLDB4MDAsMHgzZiwweGE4LDB4MGYsMHhhMCwweDBiLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMTcwLCAwLCB7MHg0OCwweDAwLDB4ZTIsMHgwMiwweDkwLDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4OCwweDAzLDB4ZjEsMHgwMCwweGZjLDB4MDIsMHgzZiB9fSwKKyB7MTYsIDB4YTE4MCwgMCwgezB4MjAsMHgwZiwweGM4LDB4MDMsMHhjMSwweDAwLDB4ZjAsMHgwMCwweDNlLDB4MDAsMHg4ZiwweDAwLDB4MDEsMHg2MCwweDAyLDB4ZjggfX0sCisgezE2LCAweGExOTAsIDAsIHsweDA4LDB4M2UsMHgwMCwweDBmLDB4ODAsMHg4MywweGUwLDB4MDAsMHhmOCwweDAwLDB4MmUsMHgwMCwweDhmLDB4ODAsMHgxMywweDkyIH19LAorIHsxNiwgMHhhMWEwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4MDIsMHhjOSwweDAwLDB4YjIsMHg2NCB9fSwKKyB7MTYsIDB4YTFiMCwgMCwgezB4MGYsMHg5MSwweDAzLDB4ZTQsMHgwNCwweGM5LDB4MDAsMHgzMiwweDQwLDB4NmMsMHg5MCwweDAzLDB4MjUsMHgwMiwweGM5LDB4OTAgfX0sCisgezE2LCAweGExYzAsIDAsIHsweGIwLDB4NDAsMHgwYywweDkwLDB4MDMsMHgyNCwweDIwLDB4YzksMHhhMCwweDNlLDB4NDAsMHg0YywweDkwLDB4MjMsMHhlNCwweDAwIH19LAorIHsxNiwgMHhhMWQwLCAwLCB7MHhmMSwweDAwLDB4OTIsMHg0MCwweDBjLDB4MTAsMHgwMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTFlMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHg4OSwweDgwLDB4YTIsMHg0MCwweDBiLDB4OTYsMHg0MiwweGU1LDB4MDQsMHg4OSwweDAwLDB4MjIgfX0sCisgezE2LCAweGExZjAsIDAsIHsweDQwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwOCwweDA5LDB4NDEsMHgyMiwweDQwLDB4NDgsMHg5MCwweDQyLDB4MjQsMHgwNCwweDg5IH19LAorIHsxNiwgMHhhMjAwLCAwLCB7MHg4MCwweDI2LDB4NDAsMHgwOCwweDkwLDB4MDIsMHhlNCwweDAwLDB4YjksMHgwMCwweDIyLDB4NDAsMHgwOCwweDk0LDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4YTIxMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNSwweDAwLDB4ODksMHgyMCwweDIyLDB4NDAgfX0sCisgezE2LCAweGEyMjAsIDAsIHsweDBiLDB4OTAsMHgwMiwweGY0LDB4ODQsMHg4NSwweDAwLDB4MjEsMHg0MCwweDQ4LDB4NTAsMHgwMiwweDI0LDB4MjAsMHg4ZCwweDA4IH19LAorIHsxNiwgMHhhMjMwLCAwLCB7MHgyMywweDQwLDB4MDgsMHhkMCwweDAyLDB4OTQsMHgwMCwweDhkLDB4MDAsMHgyOSwweDQwLDB4MGEsMHhkMCwweDAyLDB4YTQsMHgwOCB9fSwKKyB7MTYsIDB4YTI0MCwgMCwgezB4YjksMHgwMCwweDI4LDB4NDAsMHgxOCwweDkwLDB4YzIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGEyNTAsIDAsIHsweDA4LDB4MDQsMHgwNSwweDAwLDB4ODEsMHgwMCwweDIwLDB4NTEsMHgwYiwweDEwLDB4MDIsMHhmNSwweDgwLDB4ODUsMHhjMSwweGExIH19LAorIHsxNiwgMHhhMjYwLCAwLCB7MHg1MCwweDA4LDB4NTQsMHgwYSwweDA1LDB4MDYsMHg4NSwweDQwLDB4MjEsMHg1MCwweDg4LDB4NTQsMHgwMiwweDk1LDB4MDAsMHg4NSB9fSwKKyB7MTYsIDB4YTI3MCwgMCwgezB4NDQsMHgyZCwweDUwLDB4MmEsMHg1NCwweDEyLDB4YzUsMHgwMSwweGIxLDB4MDAsMHgwOCwweDUwLDB4MDgsMHgxMCwweDAyLDB4MDIgfX0sCisgezE2LCAweGEyODAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGNhLDB4NTAsMHgzMiwweDgwIH19LAorIHsxNiwgMHhhMjkwLCAwLCB7MHgwZiwweDgwLDB4MDMsMHhlOCwweDAyLDB4YzgsMHgwMSwweDMyLDB4MDAsMHgyYywweGMwLDB4MDMsMHgyMCwweDAwLDB4YzgsMHgwMiB9fSwKKyB7MTYsIDB4YTJhMCwgMCwgezB4MzIsMHgwMCwweDJjLDB4ODAsMHgwYiwweGEwLDB4MDAsMHhjOCwweDAwLDB4M2EsMHgwMCwweDRlLDB4NDAsMHgyMywweGEwLDB4MDggfX0sCisgezE2LCAweGEyYjAsIDAsIHsweGY4LDB4MDAsMHgzYSwweDAwLDB4MmMsMHg4MCwweDBiLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMmMwLCAwLCB7MHg5OCwweDFkLDB4ZGMsMHgwNCwweGZkLDB4NDAsMHgzZiwweDUwLDB4NGYsMHg5MCwweDYzLDB4ZTQsMHg0MCwweGYxLDB4MDIsMHgzZSB9fSwKKyB7MTYsIDB4YTJkMCwgMCwgezB4NDEsMHgwZiwweDkwLDB4MTMsMHhmNSwweDA0LDB4ZjksMHg0MSwweDNlLDB4NTAsMHgwZiwweDk0LDB4NDMsMHg2NSwweDAyLDB4ZjkgfX0sCisgezE2LCAweGEyZTAsIDAsIHsweDQxLDB4MzYsMHg1MCwweDRkLDB4OTQsMHgwMywweGY0LDB4MDAsMHhmOSwweDQxLDB4MzcsMHg0MCwweDRmLDB4OTQsMHgwMywweGU2IH19LAorIHsxNiwgMHhhMmYwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMSwweGZjLDB4MDAsMHhjZCwweGE4LDB4MzMsMHg3MCB9fSwKKyB7MTYsIDB4YTMwMCwgMCwgezB4MGYsMHhkMCwweDEzLDB4ZjYsMHg4OCwweGNkLDB4MDAsMHgzMiwweDUwLDB4NGYsMHgxNCwweDIzLDB4MDcsMHhhMCwweGM5LDB4YzAgfX0sCisgezE2LCAweGEzMTAsIDAsIHsweDMyLDB4NzgsMHgwYywweDllLDB4MDMsMHgzNywweDAyLDB4Y2QsMHhjMCwweDMyLDB4NjQsMHgwZiwweDk4LDB4MDMsMHgyNCwweDAwIH19LAorIHsxNiwgMHhhMzIwLCAwLCB7MHhjZCwweDAwLDB4MzIsMHg0MCwweDJjLDB4ZGEsMHgwMywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTMzMCwgMCwgezB4MzgsMHgxMCwweGUyLDB4MDgsMHg4OCwweGViLDB4MjIsMHgzMCwweDBiLDB4ODAsMHgxMiwweGU4LDB4MDQsMHhhMCwweGEwLDB4MmEgfX0sCisgezE2LCAweGEzNDAsIDAsIHsweDIwLDB4MGIsMHg4YSwweDBhLDB4MjMsMHgwMCwweDg4LDB4ODAsMHgyMiwweDI4LDB4MDAsMHhjOCwweDQyLDB4MjMsMHg4MCwweDgwIH19LAorIHsxNiwgMHhhMzUwLCAwLCB7MHhkNCwweDIwLDB4MjgsMHgwOSwweDgwLDB4MDIsMHgyMiwweDk0LDB4YTgsMHgwMCwweDJhLDB4MDAsMHg4OCwweDg1LDB4MDIsMHgwZSB9fSwKKyB7MTYsIDB4YTM2MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweGEwLDB4ODMsMHgwMCwweDI0LDB4ZDggfX0sCisgezE2LCAweGEzNzAsIDAsIHsweDhiLDB4MTAsMHgwMiwweGU1LDB4MTQsMHg4OSwweDBhLDB4MjEsMHg0OCwweDBiLDB4NTIsMHgwMiwweDU0LDB4ODAsMHg4NSwweDQwIH19LAorIHsxNiwgMHhhMzgwLCAwLCB7MHgyNSwweDU4LDB4MDksMHg1NiwweDAyLDB4NDUsMHgwMiwweDgxLDB4MjAsMHgyMCwweDUwLDB4MGIsMHgxNCwweDAyLDB4MDQsMHgzMCB9fSwKKyB7MTYsIDB4YTM5MCwgMCwgezB4ODEsMHgwMCwweDIwLDB4NDAsMHgwOCwweDEwLDB4MDIsMHg0MiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGEzYTAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDEyLDB4ODksMHgwMCwweGE2LDB4NDAsMHgwYiwweDkwLDB4NDIsMHhlNCwweDk4LDB4YTksMHg4MCwweDJiIH19LAorIHsxNiwgMHhhM2IwLCAwLCB7MHg0MCwweDBiLDB4NTEsMHgwMiwweDU1LDB4MDAsMHg5ZCwweDA4LDB4MjcsMHg0OCwweDA5LDB4ZjYsMHgwMiwweDQ0LDB4MDAsMHg4MSB9fSwKKyB7MTYsIDB4YTNjMCwgMCwgezB4MDQsMHgyMiwweDQwLDB4MTksMHg5MSwweDhhLDB4MjQsMHg4MCwweGE5LDB4MDAsMHgyYSwweDQwLDB4MDgsMHg5MCwweDAyLDB4NDYgfX0sCisgezE2LCAweGEzZDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTcsMHgwMiwweGM5LDB4MDQsMHgzNiwweDU4IH19LAorIHsxNiwgMHhhM2UwLCAwLCB7MHgwZiwweDkwLDB4MDMsMHhjNSwweDAwLDB4YzksMHgwMCwweDMyLDB4NDAsMHgwZiwweDkwLDB4MTMsMHg2NCwweDAyLDB4YzksMHgwMCB9fSwKKyB7MTYsIDB4YTNmMCwgMCwgezB4MzYsMHg0MCwweDJkLDB4OTAsMHgwYiwweDY2LDB4MDQsMHhjOSwweGUwLDB4YjIsMHg0OCwweDhmLDB4OTgsMHg0NywweDI0LDB4MDAgfX0sCisgezE2LCAweGE0MDAsIDAsIHsweGM5LDB4MDAsMHg3MiwweDQwLDB4MGMsMHgxMCwweDAzLDB4NjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNDEwLCAwLCB7MHgyOCwweDAxLDB4YTUsMHgwOCwweGY5LDB4MjEsMHgzYSwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTYsMHgwNCwweGY5LDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4YTQyMCwgMCwgezB4NDAsMHg0ZiwweDk4LDB4ODMsMHhhNCwweDAwLDB4ZTksMHg0MCwweGJhLDB4NjAsMHgwZSwweDkwLDB4MDMsMHhhNCwweDgwLDB4ZjkgfX0sCisgezE2LCAweGE0MzAsIDAsIHsweGEzLDB4M2UsMHg0OCwweDBmLDB4OTgsMHgwYiwweGU0LDB4MDAsMHhmOSwweDAwLDB4MWUsMHg0MCwweDBmLDB4OTAsMHgwMywweDhhIH19LAorIHsxNiwgMHhhNDQwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEyLDB4NDgsMHhjOCwweDIwLDB4MzIsMHgwOCB9fSwKKyB7MTYsIDB4YTQ1MCwgMCwgezB4MWYsMHg4MCwweDgzLDB4ZTEsMHgyMiwweGM4LDB4MDEsMHgzMywweDAwLDB4MmMsMHhjMCwweDAzLDB4MzAsMHgwNCwweGNjLDB4NDAgfX0sCisgezE2LCAweGE0NjAsIDAsIHsweGIxLDB4MDAsMHgwYywweDQ0LDB4MDMsMHgyMCwweDEyLDB4YzgsMHg0MSwweDMyLDB4MDAsMHgyZCwweDg0LDB4MGIsMHg2MCwweDAwIH19LAorIHsxNiwgMHhhNDcwLCAwLCB7MHhmOCwweDAwLDB4YjIsMHgwMCwweDRjLDB4ODAsMHgwYiwweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTQ4MCwgMCwgezB4MjgsMHgwNSwweDNhLDB4MDAsMHhhNiwweDAwLDB4MjMsMHg5MCwweDAzLDB4ZTQsMHg5MiwweGY4LDB4MDAsMHg4MiwweDAwLDB4MzYgfX0sCisgezE2LCAweGE0OTAsIDAsIHsweDgwLDB4MDgsMHhhMCwweDAzLDB4NjgsMHgwMCwweGNhLDB4MDAsMHgyMiwweDgzLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwMywweDhhIH19LAorIHsxNiwgMHhhNGEwLCAwLCB7MHgwMCwweDIyLDB4ODAsMHgwOCwweGEwLDB4MDIsMHgyOCwweDAwLDB4YjYsMHg4MCwweDIyLDB4ODAsMHgwZCwweGU4LDB4MDIsMHgwYSB9fSwKKyB7MTYsIDB4YTRiMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg2ZSwweDAwLDB4ODIsMHg0MiwweDIwLDB4YzAgfX0sCisgezE2LCAweGE0YzAsIDAsIHsweDBiLDB4MzQsMHgwMiwweGNkLDB4MDksMHg4MCwweDAwLDB4MjAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDAwLDB4MDIsMHg5OCwweDAwIH19LAorIHsxNiwgMHhhNGQwLCAwLCB7MHgyMCwweDIwLDB4MjgsMHgwMCwweDBhLDB4MDQsMHgxMCwweDgxLDB4ODAsMHgyMCwweGMwLDB4MDgsMHhiMCwweDAyLDB4MmMsMHgwMCB9fSwKKyB7MTYsIDB4YTRlMCwgMCwgezB4YjMsMHgwMCwweDIyLDB4YzAsMHgxOCwweDMxLDB4MDIsMHgwYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE0ZjAsIDAsIHsweGEwLDB4MDEsMHgzOCwweDAyLDB4YTMsMHgwMCwweDIxLDB4NDAsMHgxYiwweDcwLDB4MDIsMHhkYywweDIwLDB4ODQsMHgwNSwweDY1IH19LAorIHsxNiwgMHhhNTAwLCAwLCB7MHhlMCwweDA4LDB4ZjAsMHgwMiwweDdjLDB4MTAsMHg5NywweDAwLDB4MjQsMHhjMCwweDA4LDB4MzAsMHgwMiwweDU0LDB4ODgsMHg4NyB9fSwKKyB7MTYsIDB4YTUxMCwgMCwgezB4MDksMHgyMSwweGU4LDB4MDksMHgzMywweDAyLDB4MWMsMHg4MCwweGI2LDB4MDgsMHg2MywweGM4LDB4MDksMHgzOCwweDEyLDB4MjggfX0sCisgezE2LCAweGE1MjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgwMCwweGM3LDB4YTAsMHhhMSwweGUwIH19LAorIHsxNiwgMHhhNTMwLCAwLCB7MHgwYiwweDc4LDB4MDMsMHhmZSwweDAwLDB4YzUsMHg4MiwweDMzLDB4MjAsMHgwYywweDQ4LDB4MDMsMHgxZSwweDAxLDB4ZGYsMHg4MCB9fSwKKyB7MTYsIDB4YTU0MCwgMCwgezB4MzEsMHgyMCwweDBjLDB4NDgsMHgwMywweDA2LDB4NDAsMHg4NywweDgyLDB4MzEsMHhmOCwweDBkLDB4N2IsMHgwMywweDVmLDB4MDAgfX0sCisgezE2LCAweGE1NTAsIDAsIHsweGYzLDB4ODAsMHgzMSwweGYyLDB4MGMsMHg2MCwweDAzLDB4MmEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNTYwLCAwLCB7MHgwOCwweDFkLDB4OWMsMHgwMCwweGZiLDB4MDEsMHgyZiwweDQwLDB4MDcsMHhiMCwweDAzLDB4ZTgsMHgwNCwweGY5LDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4YTU3MCwgMCwgezB4YzEsMHgwZiwweGIwLDB4MDMsMHhlMCwweDA2LDB4ZTgsMHgwMiwweDNhLDB4YzAsMHgwZiwweGIwLDB4MDEsMHhhNCwweDEwLDB4ZjkgfX0sCisgezE2LCAweGE1ODAsIDAsIHsweDQwLDB4YmUsMHhkMCwweDA2LDB4YjAsMHgwMywweGVlLDB4MDAsMHhmYSwweDAwLDB4M2MsMHhkOCwweDBmLDB4YTAsMHgwMywweGMyIH19LAorIHsxNiwgMHhhNTkwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGY2LDB4MDAsMHhjZiwweDg4LDB4MzMsMHg2NCB9fSwKKyB7MTYsIDB4YTVhMCwgMCwgezB4MmMsMHhmOCwweDAzLDB4ZmUsMHgwMiwweGM0LDB4YjAsMHgzMywweDIwLDB4OGMsMHhkOCwweDAzLDB4MzIsMHgwMCwweGNjLDB4YjQgfX0sCisgezE2LCAweGE1YjAsIDAsIHsweDMzLDB4YTAsMHgwYywweGM4LDB4MDMsMHgxNiwweDIwLDB4Y2YsMHhjMCwweDMzLDB4ZjAsMHgwYywweGY4LDB4MDMsMHhmZSwweDAwIH19LAorIHsxNiwgMHhhNWMwLCAwLCB7MHhjZCwweDgwLDB4M2YsMHhlMCwweDBmLDB4ZDgsMHgwMywweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTVkMCwgMCwgezB4YTgsMHgxMSwweGI1LDB4MDQsMHg4NywweDEyLDB4YTEsMHg1MCwweDBhLDB4NzQsMHgxMiwweGM0LDB4NDAsMHg4NCwweDExLDB4MjMgfX0sCisgezE2LCAweGE1ZTAsIDAsIHsweGMwLDB4MjgsMHhlMCwweDAyLDB4MWMsMHgwMiwweGE3LDB4MTEsMHgyMSwweDU4LDB4NDgsMHg3MCwweDBhLDB4MTQsMHgwMCwweDhkIH19LAorIHsxNiwgMHhhNWYwLCAwLCB7MHgwMCwweDIzLDB4YzAsMHgwYiwweDcwLDB4MDIsMHhmYywweDQwLDB4ODYsMHgwMCwweDJkLDB4YzAsMHgwYiwweDUwLDB4MDIsMHgyYSB9fSwKKyB7MTYsIDB4YTYwMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5NSwweDAwLDB4ODcsMHg0MCwweDIxLDB4MDAgfX0sCisgezE2LCAweGE2MTAsIDAsIHsweDE4LDB4NzEsMHgwMiwweGRjLDB4MDAsMHg5NSwweDI4LDB4ZTEsMHgwMiwweDA4LDB4NTAsMHgwMiwweDNjLDB4NDIsMHhhNywweDIyIH19LAorIHsxNiwgMHhhNjIwLCAwLCB7MHgyMSwweDgwLDB4ODgsMHg0MSwweDAyLDB4MTQsMHgwMCwweDg1LDB4MDAsMHhhMSwweGMwLDB4MDksMHg3MSwweDAyLDB4ZGMsMHgwMCB9fSwKKyB7MTYsIDB4YTYzMCwgMCwgezB4YjUsMHgxMCwweDJkLDB4YzAsMHgwYiwweDQwLDB4MDIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE2NDAsIDAsIHsweDIwLDB4MTQsMHhjNCwweDEwLDB4ODMsMHg4NCwweDIwLDB4MTEsMHgwOCwweDMwLDB4MDIsMHhjMywweDEwLDB4OTEsMHgyMCwweDIwIH19LAorIHsxNiwgMHhhNjUwLCAwLCB7MHhjMCwweDA4LDB4MjgsMHgxMiwweDAwLDB4MDAsMHhhMCwweDg0LDB4MjAsMHg0MCwweDA4LDB4MzAsMHgwMiwweDA0LDB4MjYsMHg4MyB9fSwKKyB7MTYsIDB4YTY2MCwgMCwgezB4MDAsMHgyMCwweGQwLDB4MGIsMHgzMCwweDAyLDB4Y2MsMHgwMCwweGIyLDB4MDAsMHgyYywweGMwLDB4MGIsMHgwMCwweDAyLDB4MDggfX0sCisgezE2LCAweGE2NzAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YWQsMHgwMCwweGNmLDB4ODgsMHhiMiwweGU4IH19LAorIHsxNiwgMHhhNjgwLCAwLCB7MHgwYywweDMwLDB4MTMsMHhjZSwweGMyLDB4ZDAsMHg4MiwweDMyLDB4MDAsMHgwYywweDBlLDB4MGIsMHgyMCwweDAwLDB4YzgsMHg4OCB9fSwKKyB7MTYsIDB4YTY5MCwgMCwgezB4YjIsMHg0MCwweDJjLDB4YmEsMHg0MywweDM3LDB4MDIsMHhjYiwweDAwLDB4YjMsMHhjMCwweDJjLDB4ZjAsMHgwMywweGZjLDB4MTIgfX0sCisgezE2LCAweGE2YTAsIDAsIHsweGZiLDB4MDAsMHg3ZiwweGQxLDB4MGYsMHgzMCwweDBiLDB4MmIsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNmIwLCAwLCB7MHg4MCwweDAwLDB4ZWQsMHgwMiwweGYxLDB4NDAsMHgzZSwweDQxLDB4MGYsMHhiMCwweDIzLDB4ZWQsMHgwMCwweGU4LDB4MDEsMHgzZSB9fSwKKyB7MTYsIDB4YTZjMCwgMCwgezB4YzgsMHgwZiwweGIwLDB4MTMsMHhlYywweDA0LDB4ZGIsMHgwMCwweDNjLDB4ODAsMHgwZiwweDA0LDB4MDMsMHhlNCwweDQwLDB4ZjkgfX0sCisgezE2LCAweGE2ZDAsIDAsIHsweDAwLDB4M2MsMHhjMiwweDBlLDB4YjAsMHgwMywweGVlLDB4MDAsMHg0YiwweDQxLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGUwIH19LAorIHsxNiwgMHhhNmUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGZjLDB4MDAsMHg0YiwweDAwLDB4MzIsMHg0MiB9fSwKKyB7MTYsIDB4YTZmMCwgMCwgezB4MGMsMHhmMCwweDAzLDB4MzYsMHg4MCwweGNkLDB4MDAsMHgzMywweDAwLDB4NGMsMHhjMCwweDgzLDB4M2MsMHgwNCwweGY3LDB4MDAgfX0sCisgezE2LCAweGE3MDAsIDAsIHsweDMyLDB4NDAsMHgwYywweGIxLDB4NDMsMHgxNCwweDAwLDB4Y2QsMHg4MCwweDMzLDB4YzAsMHgwYywweGYwLDB4MDMsMHhmYywweDAwIH19LAorIHsxNiwgMHhhNzEwLCAwLCB7MHhmZiwweDAwLDB4YjMsMHhjMiwweDBjLDB4YTAsMHgwMywweDAwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTcyMCwgMCwgezB4ODEsMHgwNCwweDRmLDB4MDIsMHg4YiwweDgwLDB4MjAsMHgzMCwweDA4LDB4YmMsMHgwMiwweDIwLDB4MTAsMHg4OSwweDAwLDB4MjIgfX0sCisgezE2LCAweGE3MzAsIDAsIHsweGMwLDB4MDAsMHhiMCwweDAzLDB4NjAsMHgwNCwweGI4LDB4MDAsMHhhMiwweDkwLDB4MjgsMHg4YywweDFhLDB4MjQsMHgwMiwweDhiIH19LAorIHsxNiwgMHhhNzQwLCAwLCB7MHg4MywweDIyLDB4YzEsMHgwOCwweGIwLDB4MDIsMHhmYywweDAwLDB4YjMsMHg2MCwweDIwLDB4YzAsMHgwZCwweGEwLDB4MDMsMHhlMCB9fSwKKyB7MTYsIDB4YTc1MCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyZSwweDAwLDB4YWIsMHhjMCwweDIyLDB4NjAgfX0sCisgezE2LCAweGE3NjAsIDAsIHsweDA4LDB4YjgsMHgwMiwweDI5LDB4MDAsMHg4OCwweDAxLDB4MjAsMHgwMCwweDA4LDB4OTAsMHgwMiwweDIwLDB4MDAsMHhiOCwweDAwIH19LAorIHsxNiwgMHhhNzcwLCAwLCB7MHgyMiwweGMwLDB4MDgsMHhiMCwweDAyLDB4ZTQsMHgwMCwweDgxLDB4MjQsMHhhMiwweGMwLDB4MDksMHhiMCwweDQ2LDB4ZWMsMHgwMCB9fSwKKyB7MTYsIDB4YTc4MCwgMCwgezB4YjksMHgwMCwweDIyLDB4YzAsMHgwOCwweDkwLDB4MDIsMHgyMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE3OTAsIDAsIHsweDA4LDB4MDQsMHgyYywweDAwLDB4YTEsMHgwMCwweGEwLDB4NDEsMHgwOCwweGIwLDB4MGEsMHgyMCwweDUzLDB4ODgsMHgwMCwweDIwIH19LAorIHsxNiwgMHhhN2EwLCAwLCB7MHhjMCwweDI4LDB4YTAsMHgwMiwweDRjLDB4MDAsMHhiMywweDAwLDB4MjAsMHgwMCwweDg4LDB4MDAsMHgwMiwweDg0LDB4MDAsMHg4MyB9fSwKKyB7MTYsIDB4YTdiMCwgMCwgezB4MDQsMHgyMCwweGMwLDB4MjgsMHgzMCwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDIsMHg2MiwweGMwLDB4MDksMHgxMCwweDAyLDB4YzIgfX0sCisgezE2LCAweGE3YzAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGU5LDB4MDAsMHgyMiwweDAwIH19LAorIHsxNiwgMHhhN2QwLCAwLCB7MHgwYywweGIwLDB4MDMsMHgwMCwweDA0LDB4YzksMHgwMCwweGIyLDB4MDAsMHgwYywweDkwLDB4MDMsMHgyYywweDAwLDB4ZjMsMHgwMCB9fSwKKyB7MTYsIDB4YTdlMCwgMCwgezB4YjIsMHhjMCwweDhjLDB4YjAsMHgwMywweGI0LDB4MDIsMHg4ZiwweDAwLDB4MjMsMHhjMCwweDA0LDB4ZjAsMHgwMywweGVjLDB4MDggfX0sCisgezE2LCAweGE3ZjAsIDAsIHsweGY5LDB4MDAsMHgzMywweGMwLDB4MGMsMHg4MCwweDAzLDB4MDAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhODAwLCAwLCB7MHhhMCwweDFkLDB4ZmMsMHgxMCwweGRkLDB4MDQsMHgzZiwweDAwLDB4MGYsMHhjMCwweDIzLDB4ZjAsMHg5MCwweGZkLDB4MDAsMHgyZiB9fSwKKyB7MTYsIDB4YTgxMCwgMCwgezB4YzAsMHgwZiwweGUwLDB4NDMsMHhkMCwweDAwLDB4ZmMsMHgwMCwweDNmLDB4MDAsMHg4ZiwweGMwLDB4MjIsMHg3NCwweDAwLDB4ZmQgfX0sCisgezE2LCAweGE4MjAsIDAsIHsweDA0LDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZiwweDA2LDB4M2YsMHhjMCwweDBmLDB4YzAsMHg0MywweGU4IH19LAorIHsxNiwgMHhhODMwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGZjLDB4ODAsMHhlZiwweDIwLDB4MTEsMHhjMCB9fSwKKyB7MTYsIDB4YTg0MCwgMCwgezB4MGUsMHg3MiwweDAzLDB4YmQsMHhiMCwweGNmLDB4MzEsMHhiZiwweGNjLDB4MDIsMHhmMCwweDAzLDB4ZmMsMHhjNiwweGNmLDB4MDEgfX0sCisgezE2LCAweGE4NTAsIDAsIHsweDBiLDB4YzUsMHgwZiwweGYxLDB4MDMsMHgzYywweDA0LDB4ZWYsMHg2MSwweDMzLDB4ZDgsMHgwNywweGYwLDB4MDMsMHgzNCwweDgwIH19LAorIHsxNiwgMHhhODYwLCAwLCB7MHhjZCwweDMwLDB4NzMsMHhjYywweDBmLDB4ZTgsMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTg3MCwgMCwgezB4ODAsMHgxOCwweGU5LDB4MDAsMHg4OCwweDY5LDB4MjIsMHgxMCwweDA4LDB4OGMsMHgwMCwweDIxLDB4ODQsMHg4OCwweDQxLDB4MjIgfX0sCisgezE2LCAweGE4ODAsIDAsIHsweDEwLDB4ODgsMHg4NiwweDkyLDB4MDEsMHgwMCwweDg4LDB4NjIsMHgyMiwweDEwLDB4NGIsMHg4NywweDAyLDB4MjEsMHhhMCwweDg4IH19LAorIHsxNiwgMHhhODkwLCAwLCB7MHg2MCwweDIwLDB4MTAsMHgwYiwweDg2LDB4YTIsMHgzNSwweGEwLDB4YWIsMHg2MCwweGExLDB4YzQsMHgwYiwweGI4LDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4YThhMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjZCwweGE4LDB4MzMsMHg0MSwweDIwLDB4YzYgfX0sCisgezE2LCAweGE4YjAsIDAsIHsweDRhLDB4MzEsMHgwMCwweDhjLDB4MTAsMHg5MywweDMzLDB4MjgsMHhjYywweDI5LDB4MzQsMHgxMiwweDhjLDB4NTAsMHg5MywweDFjIH19LAorIHsxNiwgMHhhOGMwLCAwLCB7MHgyOCwweDg0LDB4MDEsMHgyMCwweDRhLDB4NGMsMHg0MSwweDgzLDB4MTAsMHgyNCwweGNjLDB4NGIsMHgzMSwweDQyLDB4NGMsMHg0MCB9fSwKKyB7MTYsIDB4YThkMCwgMCwgezB4OTEsMHgxMCwweDI0LDB4YzAsMHgwYiwweDgwLDB4MDIsMHgyMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE4ZTAsIDAsIHsweGMwLDB4MDUsMHhhOCwweDIwLDB4OTAsMHgwMiwweDIyLDB4MDAsMHgwOCwweDgwLDB4MDAsMHgyMCwweDMwLDB4YjgsMHgwOCwweDI2IH19LAorIHsxNiwgMHhhOGYwLCAwLCB7MHgwMCwweDAxLDB4ODAsMHg4MiwweDIwLDB4MjAsMHgxOCwweDA4LDB4NDIsMHg0MCwweDAzLDB4OTEsMHgwMiwweDYwLDB4MDAsMHgwOCB9fSwKKyB7MTYsIDB4YTkwMCwgMCwgezB4MDEsMHhhNiwweDAwLDB4MGIsMHg4MCwweDAwLDB4NmMsMHgxMCwweGJiLDB4MDEsMHgyNiwweGMwLDB4NGIsMHg5MCwweDBhLDB4MzAgfX0sCisgezE2LCAweGE5MTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDExLDB4ZmQsMHgwMCwweGZkLDB4NDEsMHgzMywweGExIH19LAorIHsxNiwgMHhhOTIwLCAwLCB7MHgwZSwweGQyLDB4MDMsMHhiNSwweDAyLDB4ZGYsMHg0MiwweDNiLDB4MDEsMHgwZiwweGQ0LDB4NDMsMHhiNSwweDAwLDB4Y2QsMHg0MCB9fSwKKyB7MTYsIDB4YTkzMCwgMCwgezB4MWIsMHhjNCwweDBkLDB4NzgsMHgwMywweDcwLDB4MDIsMHhlYywweDAwLDB4MTcsMHhhMSwweDBmLDB4ZTgsMHgwYiwweDJjLDB4MDIgfX0sCisgezE2LCAweGE5NDAsIDAsIHsweGQ5LDB4OTAsMHgyNiwweGMwLDB4MGYsMHhhYywweDAzLDB4MDAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhOTUwLCAwLCB7MHhlMCwweDAxLDB4YjgsMHgwMCwweGVlLDB4MDAsMHgxZiwweDY0LDB4NGYsMHhlMCwweDAzLDB4ZDgsMHgxMCwweGM0LDB4MTgsMHgzMyB9fSwKKyB7MTYsIDB4YTk2MCwgMCwgezB4YzAsMHgwYywweGEwLDB4YTEsMHhiOCwweDA5LDB4ZTYsMHgwOSwweDM2LDB4MjIsMHgwZiwweDg4LDB4MjMsMHhiYywweDAwLDB4ZmIgfX0sCisgezE2LCAweGE5NzAsIDAsIHsweDAwLDB4M2IsMHg2NCwweDBmLDB4ZDksMHgwMywweDljLDB4MDAsMHhlMywweDA0LDB4M2IsMHhjMCwweDBmLDB4ZjQsMHgwMywweGY4IH19LAorIHsxNiwgMHhhOTgwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweDhkLDB4MDAsMHhjOSwweDQwLDB4YjYsMHg4MCB9fSwKKyB7MTYsIDB4YTk5MCwgMCwgezB4MGYsMHgxMCwweDAzLDB4YTcsMHgyMCwweGZiLDB4NTAsMHhiNiwweDA4LDB4NGMsMHgxNCwweDAzLDB4NjUsMHgyMiwweGQ5LDB4NDAgfX0sCisgezE2LCAweGE5YTAsIDAsIHsweGI2LDB4ODAsMHgwZSwweGEwLDB4MGIsMHgwMCwweDAwLDB4ZDgsMHgwMCwweDc2LDB4ODIsMHgyOCwweGEwLDB4MjMsMHg2NCwweDAwIH19LAorIHsxNiwgMHhhOWIwLCAwLCB7MHhjOSwweDA0LDB4MTIsMHhjMCwweDhlLDB4ODAsMHgwMywweDkwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTljMCwgMCwgezB4YzgsMHgwNSwweDJiLDB4NjAsMHg4YSwweDA5LDB4MjAsMHg1MCwweDA4LDB4YTAsMHgyMywweGU5LDB4MDAsMHhiOCwweGMwLDB4MjIgfX0sCisgezE2LCAweGE5ZDAsIDAsIHsweGYwLDB4MDgsMHhhYywweDAyLDB4MjgsMHgwNCwweDhhLDB4YzIsMHgyMiwweDUwLDB4MDgsMHg5MCwweDA2LDB4MmMsMHgwMCwweDhiIH19LAorIHsxNiwgMHhhOWUwLCAwLCB7MHgwNCwweDIyLDB4NTEsMHgwOCwweDk0LDB4MDIsMHhlNCwweDA0LDB4OGIsMHgwNCwweDM3LDB4YzAsMHgwOCwweDE4LDB4NDIsMHgyNiB9fSwKKyB7MTYsIDB4YTlmMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDQsMHg0YiwweDAwLDB4ODIsMHhjOCwweDI0LDB4NDMgfX0sCisgezE2LCAweGFhMDAsIDAsIHsweDBiLDB4MjYsMHgwYSwweDg4LDB4MDAsMHhiMCwweDgwLDB4MjIsMHhlNCwweDBiLDB4MjAsMHg0MiwweDY5LDB4MDAsMHhhMiwweDkwIH19LAorIHsxNiwgMHhhYTEwLCAwLCB7MHgyOCwweDQwLDB4ZTgsMHgxMCwweDAyLDB4MGMsMHgwMCwweGJiLDB4MDAsMHgyOCwweDUwLDB4ODgsMHg5MCwweDgyLDB4YzQsMHgwMSB9fSwKKyB7MTYsIDB4YWEyMCwgMCwgezB4ODMsMHgwMCwweDIwLDB4YzAsMHgwYSwweDEwLDB4MDIsMHhiYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFhMzAsIDAsIHsweDIwLDB4MTAsMHg0ZSwweDgwLDB4ODEsMHgwMCwweDIxLDB4YTgsMHgwOCwweDU4LDB4MDIsMHhkNiwweDAxLDB4YjcsMHg5MCwweDY4IH19LAorIHsxNiwgMHhhYTQwLCAwLCB7MHgyMCwweDAzLDB4NTksMHg4MiwweDU2LDB4MDAsMHhhNSwweDg0LDB4MmQsMHhhMiwweDE4LDB4NjksMHgyMiwweDAyLDB4MDAsMHgzNCB9fSwKKyB7MTYsIDB4YWE1MCwgMCwgezB4ODAsMHgyOSwweGE4LDB4MDgsMHg2OCwweDA2LDB4YzYsMHgxNCwweDg1LDB4ODIsMHgyNSwweGUwLDB4MDgsMHg1OCwweDgyLDB4MWMgfX0sCisgezE2LCAweGFhNjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4NDgsMHgwMCwweGMyLDB4ZjAsMHgzNCwweDQwIH19LAorIHsxNiwgMHhhYTcwLCAwLCB7MHgwZiwweDIwLDB4MDMsMHg4OCwweDgwLDB4ZjgsMHgxMCwweDMwLDB4YzAsMHgyNywweDIxLDB4MGIsMHg0OCwweDgwLDB4ZWEsMHgyMCB9fSwKKyB7MTYsIDB4YWE4MCwgMCwgezB4MzgsMHgwMCwweDBjLDB4MDAsMHgxMiwweDBjLDB4MDgsMHg3MywweDAwLDB4YjgsMHg0MCwweDBjLDB4MTIsMHgyMywweDRjLDB4MDIgfX0sCisgezE2LCAweGFhOTAsIDAsIHsweDQzLDB4MzQsMHgzMCwweGMwLDB4MGUsMHgxMSwweDAzLDB4OTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhYWEwLCAwLCB7MHg0MCwweDE1LDB4YWMsMHg5MCwweGY5LDB4MDEsMHgyZSwweDg4LDB4NGIsMHg5MCwweDExLDB4NjQsMHgwMCwweGZiLDB4MTAsMHgzMiB9fSwKKyB7MTYsIDB4YWFiMCwgMCwgezB4MDAsMHgwMCwweDkxLDB4MDMsMHhhNCwweDAwLDB4YzksMHgwMCwweDMyLDB4YzQsMHg0ZCwweGIwLDB4NDMsMHhlMCwweDA0LDB4YzggfX0sCisgezE2LCAweGFhYzAsIDAsIHsweDAwLDB4MzYsMHg4OSwweDBmLDB4YTgsMHgwMywweGVkLDB4MDAsMHhmOSwweDE0LDB4M2UsMHhjMCwweDBmLDB4MTAsMHg0MywweGQwIH19LAorIHsxNiwgMHhhYWQwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGU4LDB4MDAsMHhjOCwweDAwLDB4M2EsMHgwMCB9fSwKKyB7MTYsIDB4YWFlMCwgMCwgezB4MGMsMHgwMCwweDUzLDB4YTAsMHgwMCwweGU4LDB4MDEsMHgzMiwweDAxLDB4MGUsMHg4MCwweDUzLDB4MjAsMHgxMCwweGM4LDB4MDAgfX0sCisgezE2LCAweGFhZjAsIDAsIHsweDNhLDB4NDAsMHgwYywweDkwLDB4MDMsMHgyMCwweDEwLDB4ZTgsMHgwNCwweGI2LDB4MDAsMHg4NCwweDgwLDB4MDMsMHgyZCwweDEyIH19LAorIHsxNiwgMHhhYjAwLCAwLCB7MHhjYiwweDAwLDB4MmUsMHhjYSwweDA0LDB4OTAsMHgwMywweGVhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWIxMCwgMCwgezB4NGMsMHgxOSwweDhjLDB4MDAsMHg4NywweDAyLDB4MjEsMHhjMCwweDA4LDB4NzAsMHgwMiwweDBjLDB4MDAsMHg4MywweDAwLDB4MjEgfX0sCisgezE2LCAweGFiMjAsIDAsIHsweGMwLDB4MDgsMHgzMCwweDYyLDB4NGMsMHgwNCwweDgzLDB4MDAsMHgyMSwweDgwLDB4NDgsMHhlMCwweDEyLDB4M2MsMHgwMCwweDg3IH19LAorIHsxNiwgMHhhYjMwLCAwLCB7MHgwMCwweDIxLDB4YzAsMHgwOCwweDcwLDB4MDIsMHgxYywweDAwLDB4ODUsMHgwMSwweDI0LDB4ZDAsMHgwYSwweDUwLDB4MDIsMHhmMiB9fSwKKyB7MTYsIDB4YWI0MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHg5YSwweDAwLDB4ODAsMHg4MCwweDI4LDB4MjAgfX0sCisgezE2LCAweGFiNTAsIDAsIHsweDA4LDB4NGMsMHgyMiwweGQyLDB4MDAsMHhhNCwweDgwLDB4MjQsMHgzMCwweDBiLDB4NDgsMHgwMiwweDUyLDB4MDAsMHg4NCwweGMwIH19LAorIHsxNiwgMHhhYjYwLCAwLCB7MHgyMSwweDIwLDB4MDksMHg0OCwweDY4LDB4MTMsMHgwMCwweGE0LDB4ODAsMHg2MCwweDIwLDB4MDksMHgwOCwweDAyLDB4NTYsMHgwMCB9fSwKKyB7MTYsIDB4YWI3MCwgMCwgezB4OTcsMHg4MCwweDJkLDB4ZTAsMHg4OCwweDU4LDB4MDIsMHhlMCwweDEwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFiODAsIDAsIHsweDZjLDB4MDQsMHhjYywweDAwLDB4ODMsMHg4MCwweDIwLDB4ZDgsMHgwOCwweDMwLDB4MDIsMHg0YywweDQwLDB4ODMsMHgwMCwweDI0IH19LAorIHsxNiwgMHhhYjkwLCAwLCB7MHhkMSwweDA5LDB4YjksMHg0MiwweDRlLDB4MDAsMHg4MywweDAwLDB4MjAsMHhjMSwweDg5LDB4MzAsMHg0MiwweDBjLDB4MDAsMHg4MyB9fSwKKyB7MTYsIDB4YWJhMCwgMCwgezB4ZjAsMHhhMCwweGQ5LDB4MTksMHgzNiwweDIyLDB4NjYsMHgwNiwweDkxLDB4MDAsMHgwYywweGMxLDB4MGEsMHgxMCwweDAyLDB4YzIgfX0sCisgezE2LCAweGFiYjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4ZTgsMHgwMiwweGNhLDB4YTUsMHgyYSwweDkxIH19LAorIHsxNiwgMHhhYmMwLCAwLCB7MHgyOCwweGE4LDB4MDMsMHhlYSwweDAyLDB4YWEsMHgwMCwweGI2LDB4YTAsMHgwZiwweGEwLDB4MGEsMHgyYSwweDkyLDB4Y2EsMHg4MyB9fSwKKyB7MTYsIDB4YWJkMCwgMCwgezB4YmEsMHg4MCwweDI5LDB4YTAsMHgwMywweDJiLDB4MDAsMHhlYSwweDQwLDB4NjYsMHg5MCwweDJkLDB4ZTQsMHgwYiwweDZhLDB4ODAgfX0sCisgezE2LCAweGFiZTAsIDAsIHsweGRhLDB4MDAsMHgzZSwweDgwLDB4MGMsMHhlMCwweDAzLDB4ZmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhYmYwLCAwLCB7MHg0OCwweDAxLDB4ODAsMHgwMCwweGZjLDB4MDAsMHgzZCwweDAwLDB4MGYsMHhjMCwweDAzLDB4YjAsMHgxNCwweGZjLDB4MDAsMHgzYiB9fSwKKyB7MTYsIDB4YWMwMCwgMCwgezB4MTIsMHgwZSwweGMwLDB4NDMsMHhiMSwweDE0LDB4ZmMsMHgwMCwweDNkLDB4MDAsMHgwZSwweGMwLDB4MDMsMHhmMCwweDIwLDB4ZjQgfX0sCisgezE2LCAweGFjMTAsIDAsIHsweDAwLDB4MzEsMHgwMCwweDBlLDB4NDQsMHgxMywweGEwLDB4MDAsMHhlOCwweDA2LDB4MzYsMHgwMCwweDRmLDB4ODAsMHgxMywweGQyIH19LAorIHsxNiwgMHhhYzIwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGE0LDB4MDAsMHhkMSwweDAwLDB4MzYsMHg2MCB9fSwKKyB7MTYsIDB4YWMzMCwgMCwgezB4MWMsMHgxOCwweDBiLDB4NDYsMHgwMCwweGQ5LDB4ODAsMHgzMCwweDQwLDB4MmMsMHg5OCwweDA1LDB4ODYsMHgwMCwweGMxLDB4ODAgfX0sCisgezE2LCAweGFjNDAsIDAsIHsweDkyLDB4NDAsMHgwZCwweDEwLDB4MDMsMHg0NCwweDAyLDB4ODksMHgwMCwweDMyLDB4NzAsMHgwYywweDk4LDB4MDEsMHgyNCwweDAwIH19LAorIHsxNiwgMHhhYzUwLCAwLCB7MHhjOSwweDA0LDB4MzAsMHg0MCwweDBjLDB4OTAsMHgwMywweGMyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWM2MCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHg4OSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTQsMHgwMiwweDI0LDB4ODAsMHg4OSwweDAxLDB4MjIgfX0sCisgezE2LCAweGFjNzAsIDAsIHsweDQwLDB4NDgsMHg5MSwweDAyLDB4MjQsMHgwMCwweGQ5LDB4OTAsMHgyMiwweDQxLDB4MDgsMHg5MCwweDEyLDB4MjQsMHgxMCwweDg5IH19LAorIHsxNiwgMHhhYzgwLCAwLCB7MHgwMCwweDMyLDB4NDAsMHgwOCwweDk1LDB4MTIsMHgyNCwweDAyLDB4ODEsMHgwMCwweGEyLDB4NDEsMHgwZCwweDkwLDB4NDIsMHhlMCB9fSwKKyB7MTYsIDB4YWM5MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MDUsMHgyNCwweDAyLDB4OWQsMHgwMCwweDIzLDB4NDQgfX0sCisgezE2LCAweGFjYTAsIDAsIHsweDA4LDB4ZDIsMHgwNiwweDc0LDB4ODAsMHhiNSwweDIwLDB4MjMsMHg0MCwweDFhLDB4ZDAsMHgwNiwweDM1LDB4OTAsMHg4ZCwweDAyIH19LAorIHsxNiwgMHhhY2IwLCAwLCB7MHgyZiwweDQ0LDB4MTksMHhkMCwweDAyLDB4NzQsMHgwMCwweDhkLDB4MDAsMHg2MywweDQwLDB4MTgsMHhkNCwweDAyLDB4YTQsMHgxMSB9fSwKKyB7MTYsIDB4YWNjMCwgMCwgezB4ODksMHgwMCwweDIyLDB4NDAsMHgwOCwweGIwLDB4MDIsMHhjNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFjZDAsIDAsIHsweDI4LDB4MTQsMHgwNCwweDgwLDB4ODUsMHgyMCwweDIxLDB4NjgsMHgwOCwweDUyLDB4MDIsMHgxNCwweDgwLDB4YTUsMHgyMCwweGExIH19LAorIHsxNiwgMHhhY2UwLCAwLCB7MHg0OCwweDBhLDB4NzIsMHgzOCwweDE0LDB4ODAsMHg5NSwweDI0LDB4MmQsMHg0OCwweDI4LDB4NTIsMHgwMiwweDE0LDB4ODAsMHg4NSB9fSwKKyB7MTYsIDB4YWNmMCwgMCwgezB4MjAsMHgyMSwweDQ4LDB4MDgsMHg1MiwweDA2LDB4ODQsMHg4MCwweDgxLDB4MjAsMHgyMCwweDRhLDB4MDksMHgxMCwweDAyLDB4YzIgfX0sCisgezE2LCAweGFkMDAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDBkLDB4NjEsMHg0MCwweGQ4LDB4NTAsMHhiMiwweDE0IH19LAorIHsxNiwgMHhhZDEwLCAwLCB7MHgyOCwweGEwLDB4MDMsMHg2MSwweDQwLDB4ZjgsMHg1MCwweDMyLDB4OTQsMHg0ZSwweDg1LDB4MDQsMHgyMSwweDQyLDB4YzgsMHg1MCB9fSwKKyB7MTYsIDB4YWQyMCwgMCwgezB4M2MsMHgxNCwweDBkLDB4ODAsMHgwMywweDYxLDB4NDAsMHg4OCwweDUwLDB4YjIsMHgxNCwweDJjLDB4YzUsMHgwOSwweGExLDB4NDAgfX0sCisgezE2LCAweGFkMzAsIDAsIHsweGM4LDB4NTAsMHgzMiwweDFjLDB4MGMsMHg4MCwweDAzLDB4ZWUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhZDQwLCAwLCB7MHg5OCwweDE1LDB4ZTQsMHg0MCwweGY5LDB4MTAsMHgzYSwweDQ0LDB4MGYsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGQ5LDB4MTQsMHgzZSB9fSwKKyB7MTYsIDB4YWQ1MCwgMCwgezB4NDQsMHgwZCwweDkxLDB4NDMsMHg2NCwweDQwLDB4ZTksMHgxMCwweDMyLDB4NDQsMHgwNywweDkzLDB4YzMsMHhlNCwweDUwLDB4ZDEgfX0sCisgezE2LCAweGFkNjAsIDAsIHsweDEwLDB4N2UsMHg0NCwweDAzLDB4OTEsMHgwMSwweDU0LDB4NDQsMHhmZCwweDE0LDB4M2UsMHg0MCwweDBmLDB4ZDAsMHgwMywweGU2IH19LAorIHsxNiwgMHhhZDcwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGY2LDB4ODAsMHhkZCwweGEwLDB4MzMsMHg2OCB9fSwKKyB7MTYsIDB4YWQ4MCwgMCwgezB4MWUsMHhkYSwweDAzLDB4MzYsMHg5MCwweGNkLDB4YTAsMHgzYiwweDY4LDB4MGEsMHhkOCwweDIzLDB4NzYsMHgwYywweGVkLDB4ODAgfX0sCisgezE2LCAweGFkOTAsIDAsIHsweDJiLDB4NjIsMHgwYiwweDk5LDB4MDIsMHhhNywweDgwLDB4ZjksMHhlMSwweDM3LDB4NjgsMHgwYywweGRhLDB4MDMsMHgyNywweDgwIH19LAorIHsxNiwgMHhhZGEwLCAwLCB7MHhjOSwweGEyLDB4MjIsMHg2OCwweDRjLDB4NTAsMHgwMywweGM2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWRiMCwgMCwgezB4MzgsMHgxOCwweGUxLDB4NDAsMHg4OCwweDUwLDB4MjIsMHgxNCwweDA4LDB4ODAsMHgyMiwweDYwLDB4MDAsMHg4OCwweDA0LDB4MjIgfX0sCisgezE2LCAweGFkYzAsIDAsIHsweDAwLDB4MDgsMHgwNCwweDI2LDB4MDEsMHgwMCwweDg4LDB4NTAsMHgyMiwweDEwLDB4MDgsMHhhZiwweDAyLDB4MjMsMHgwMCwweDg4IH19LAorIHsxNiwgMHhhZGQwLCAwLCB7MHhjMCwweGEwLDB4MTAsMHg4OCwweDg0LDB4MDIsMHgyMywweDgwLDB4YTAsMHg0MCwweDJhLDB4MTAsMHgwOCwweDgwLDB4MTIsMHg0ZSB9fSwKKyB7MTYsIDB4YWRlMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHg4NCwweDAwLDB4ODEsMHgwMSwweDIwLDB4NDAgfX0sCisgezE2LCAweGFkZjAsIDAsIHsweDBhLDB4MTQsMHgwMiwweDQ1LDB4MDAsMHg4MSwweDQxLDB4MmMsMHg1MCwweDBiLDB4MTQsMHgwMiwweDA1LDB4MDQsMHhhMSwweDAwIH19LAorIHsxNiwgMHhhZTAwLCAwLCB7MHgyOCwweDQwLDB4ODIsMHgxMCwweDAyLDB4ODQsMHg0MCwweGExLDB4MzIsMHg4MCwweDUwLDB4MDksMHgxNCwweDAyLDB4MDQsMHhjNCB9fSwKKyB7MTYsIDB4YWUxMCwgMCwgezB4OTEsMHgxMCwweDY0LDB4NDQsMHgyOCwweDEwLDB4MDIsMHhkMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFlMjAsIDAsIHsweDE4LDB4MDQsMHhhYywweDAyLDB4ODEsMHgwMCwweDIyLDB4YzEsMHgwOCwweDkwLDB4MDIsMHg0NCwweDAyLDB4ODksMHgwMiwweDI2IH19LAorIHsxNiwgMHhhZTMwLCAwLCB7MHg0MSwweDA5LDB4OTAsMHgwYSwweDI0LDB4MGMsMHg4OSwweDA0LDB4MjIsMHg1MCwweDA4LDB4OTAsMHgyNiwweDI0LDB4MDAsMHg4OSB9fSwKKyB7MTYsIDB4YWU0MCwgMCwgezB4MDAsMHgyMiwweDQxLDB4MDksMHgxMCwweDIyLDB4MjQsMHg0MCwweGI5LDB4MDEsMHgyZSwweDQwLDB4MDgsMHg5MCwweDAyLDB4NDYgfX0sCisgezE2LCAweGFlNTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgxMCwweDg5LDB4MDAsMHgzMiwweDQwIH19LAorIHsxNiwgMHhhZTYwLCAwLCB7MHgwYSwweDkwLDB4MGIsMHgyNCwweDEwLDB4ODksMHgwMCwweDFlLDB4NDAsMHg5YiwweDkwLDB4MDIsMHgyNCwweDEwLDB4MjksMHgwMCB9fSwKKyB7MTYsIDB4YWU3MCwgMCwgezB4MWEsMHg0MCwweDBlLDB4OTQsMHg0MSwweGE0LDB4MDAsMHgyOSwweDAwLDB4MTIsMHg0MCwweDA1LDB4OTAsMHg0MSwweDI2LDB4MDAgfX0sCisgezE2LCAweGFlODAsIDAsIHsweGQ5LDB4MDAsMHgyNCwweDQwLDB4MGMsMHg5MCwweDAzLDB4ZTgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhZTkwLCAwLCB7MHg0OCwweDAxLDB4YTQsMHgwMiwweGE5LDB4MDAsMHhiYywweDQwLDB4MGYsMHg5MCwweDAzLDB4YTQsMHgwNCwweGY5LDB4MDAsMHgzYSB9fSwKKyB7MTYsIDB4YWVhMCwgMCwgezB4NDEsMHgwZSwweDkwLDB4ODMsMHg4NCwweDAwLDB4ZjksMHgwMCwweDNjLDB4NDAsMHgwZSwweDkwLDB4MDIsMHhjNCwweDA4LDB4ZTkgfX0sCisgezE2LCAweGFlYjAsIDAsIHsweDAwLDB4M2EsMHg0MCwweDJlLDB4OTAsMHgwYiwweGU2LDB4MDAsMHhlMSwweDA0LDB4M2EsMHg0MCwweDBmLDB4OTIsMHgwMywweDVhIH19LAorIHsxNiwgMHhhZWMwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGEwLDB4MjAsMHhkOCwweDAwLDB4MzYsMHgwMiB9fSwKKyB7MTYsIDB4YWVkMCwgMCwgezB4MGUsMHgwMCwweGEzLDB4ZTAsMHgxOCwweGMwLDB4MDAsMHgzMCwweDAzLDB4MGYsMHg4MCwweDMzLDB4MjAsMHgwMCwweDQwLDB4MDAgfX0sCisgezE2LCAweGFlZTAsIDAsIHsweDMyLDB4MGQsMHgwZiwweDA0LDB4MGIsMHhhMCwweDAyLDB4YzgsMHgwMiwweDMyLDB4MDIsMHg4YywweDgyLDB4MDMsMHgyMCwweDAyIH19LAorIHsxNiwgMHhhZWYwLCAwLCB7MHhjOCwweDA0LDB4MTYsMHgwMCwweDRlLDB4ODAsMHgwMSwweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWYwMCwgMCwgezB4MjgsMHgwNSwweDNiLDB4MDAsMHg4ZSwweGQ4LDB4MjMsMHg4MCwweDA4LDB4ZTAsMHgwMiwweGY4LDB4ODAsMHg4ZSwweDEwLDB4MjMgfX0sCisgezE2LCAweGFmMTAsIDAsIHsweGEyLDB4MGIsMHhlMCwweDgyLDB4N2EsMHgyMCwweDhlLDB4MzAsMHgyMywweGExLDB4MGIsMHhlMCwweDAyLDB4MjgsMHgwMCwweDhlIH19LAorIHsxNiwgMHhhZjIwLCAwLCB7MHgwMCwweDJiLDB4ODgsMHgwOCwweGU0LDB4NDIsMHgzOCwweDAwLDB4OGUsMHgwNCwweDIzLDB4ODAsMHgwOCwweGEwLDB4MDIsMHgwYSB9fSwKKyB7MTYsIDB4YWYzMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg2ZiwweDQwLDB4OTMsMHhjNiwweDI0LDB4NDAgfX0sCisgezE2LCAweGFmNDAsIDAsIHsweDBhLDB4MzgsMHgwMiwweGNjLDB4MDAsMHg4MywweDAxLDB4YWMsMHhmMCwweDBiLDB4YjQsMHgwMiwweDRjLDB4MDQsMHhhMywweDgwIH19LAorIHsxNiwgMHhhZjUwLCAwLCB7MHgyOCwweGQwLDB4NGIsMHgzMCwweDAyLDB4NGMsMHgwMCwweGFiLDB4MDQsMHgyYSwweGMwLDB4MmEsMHgzMCwweDBhLDB4YWMsMHgxMCB9fSwKKyB7MTYsIDB4YWY2MCwgMCwgezB4OTMsMHgwMCwweDIwLDB4YzEsMHgwYSwweDMxLDB4MDIsMHgwYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFmNzAsIDAsIHsweDgwLDB4MTEsMHgxYywweDAwLDB4ODIsMHgwMCwweDIxLDB4NDIsMHg4OCwweDc0LDB4MDYsMHhkYywweDBiLDB4ODYsMHgwMiwweDJkIH19LAorIHsxNiwgMHhhZjgwLCAwLCB7MHg4MCwweDBiLDB4NzAsMHgyYSwweDU4LDB4MDAsMHhhNiwweDAwLDB4YTksMHhjMCwweDBiLDB4NzAsMHgwMiwweDVjLDB4ODgsMHhhNyB9fSwKKyB7MTYsIDB4YWY5MCwgMCwgezB4MjAsMHgyOSwweGMwLDB4MGEsMHg3MCwweDAyLDB4OWMsMHgxMCwweDk3LDB4MjAsMHhhMSwweGM4LDB4MDgsMHhkOCwweDAyLDB4MjggfX0sCisgezE2LCAweGFmYTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA4LDB4MGUsMHgwMCwweGQ3LDB4ODAsMHgzNywweDYwIH19LAorIHsxNiwgMHhhZmIwLCAwLCB7MHgwZSwweDY4LDB4MTMsMHhmZSwweDAwLDB4Y2YsMHg4MCwweDNkLDB4ZTAsMHgwZiwweDc4LDB4MjMsMHgxZSwweDAwLDB4ZWYsMHg4MiB9fSwKKyB7MTYsIDB4YWZjMCwgMCwgezB4MzEsMHhlMCwweDBmLDB4M2MsMHhjMywweDdlLDB4MDQsMHhlZiwweDgwLDB4YjEsMHhlMCwweDBlLDB4ZTgsMHgwMywweGJlLDB4ODAgfX0sCisgezE2LCAweGFmZDAsIDAsIHsweGQ3LDB4ZTAsMHgzMywweGVhLDB4MGUsMHg3OCwweDAzLDB4MmEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhZmUwLCAwLCB7MHgwOCwweDE1LDB4YWMsMHgwMCwweGZhLDB4MDEsMHgzZSwweDAwLDB4MGYsMHhiMCwweDAzLDB4ZTAsMHgwNCwweGY4LDB4MDAsMHgzMiB9fSwKKyB7MTYsIDB4YWZmMCwgMCwgezB4ODAsMHgwZiwweDgwLDB4NDMsMHhhYywweDBhLDB4ZDgsMHgwMCwweDM2LDB4NDAsMHgwZiwweGIwLDB4MDMsMHgyYywweDBjLDB4ZGIgfX0sCisgezE2LCAweGIwMDAsIDAsIHsweDAwLDB4MjYsMHhjMSwweDA5LDB4YTAsMHgxMywweDZjLDB4NDAsMHhlYiwweDQwLDB4M2EsMHhkYywweDBmLDB4OTAsMHgwYiwweGMyIH19LAorIHsxNiwgMHhiMDEwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNCwweGJlLDB4MDAsMHhjZiwweDgxLDB4MzMsMHhlOSB9fSwKKyB7MTYsIDB4YjAyMCwgMCwgezB4MWYsMHhmOSwweDEzLDB4YjYsMHg1MCwweGVmLDB4ODAsMHgxZiwweGU0LDB4MDQsMHhjOCwweDAzLDB4N2UsMHgwMCwweDZkLDB4ODEgfX0sCisgezE2LCAweGIwMzAsIDAsIHsweDMzLDB4NjQsMHgwYywweGY4LDB4MWIsMHgzZSwweDIwLDB4MmYsMHg4OCwweDkzLDB4ZTgsMHgwZiwweGZiLDB4MDMsMHgyZSwweDgwIH19LAorIHsxNiwgMHhiMDQwLCAwLCB7MHhjZiwweGMwLDB4NzMsMHhlMCwweDJjLDB4ZDksMHgwMywweGQwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjA1MCwgMCwgezB4YTgsMHgxOCwweDkwLDB4NDIsMHg4OSwweDE4LDB4MjEsMHhjMCwweDFmLDB4NzEsMHgwMiwweDE0LDB4YzAsMHhmNywweDIwLDB4MjcgfX0sCisgezE2LCAweGIwNjAsIDAsIHsweDQwLDB4NDAsMHg3MSwweDEyLDB4MTgsMHgwMCwweDg3LDB4MjAsMHgyMSwweDgwLDB4NDgsMHg3MSwweDAyLDB4M2MsMHgwOCwweDg3IH19LAorIHsxNiwgMHhiMDcwLCAwLCB7MHgyMCwweDIxLDB4ODIsMHgwYiwweDYxLDB4YTIsMHgxZSwweDQ0LDB4ZGYsMHgwMSwweDMxLDB4YzgsMHgwOCwweDczLDB4MDIsMHhlYSB9fSwKKyB7MTYsIDB4YjA4MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDAsMHg4YywweDAwLDB4ODcsMHgwMCwweDIxLDB4YzggfX0sCisgezE2LCAweGIwOTAsIDAsIHsweDBiLDB4NzAsMHgwMiwweDljLDB4MDksMHg4NywweDAyLDB4MmQsMHg4MiwweDk5LDB4NDAsMHgwMiwweDA0LDB4MDAsMHhhNSwweDA5IH19LAorIHsxNiwgMHhiMGEwLCAwLCB7MHgyMSwweDQwLDB4MTksMHg3MCwweDAyLDB4MWMsMHgwMCwweDg3LDB4MDUsMHgyNSwweDQ4LDB4NGIsMHg3MiwweDAyLDB4MGMsMHg0MCB9fSwKKyB7MTYsIDB4YjBiMCwgMCwgezB4ODcsMHgwMCwweGExLDB4YzAsMHg0OCwweDUwLDB4MDIsMHhjNCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIwYzAsIDAsIHsweDY4LDB4MDQsMHhjMSwweDIwLDB4ODksMHg0YywweGEwLDB4YjQsMHgwYSwweDM4LDB4MDIsMHgyMiwweDAwLDB4YTEsMHhkMCwweDI0IH19LAorIHsxNiwgMHhiMGQwLCAwLCB7MHgzMCwweDA5LDB4ODAsMHgwMiwweDI3LDB4NDQsMHg4MSwweGM2LDB4MjIsMHgxNCwweDA5LDB4M2QsMHgyYSwweDBmLDB4MDIsMHg4YiB9fSwKKyB7MTYsIDB4YjBlMCwgMCwgezB4YzAsMHhhNiwweDIwLDB4MGIsMHgyNCwweDAwLDB4MGMsMHgxMCwweDkzLDB4ODEsMHgyMCwweGMwLDB4NDgsMHgzMCwweDA2LDB4ZDggfX0sCisgezE2LCAweGIwZjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDE1LDB4YTEsMHgwMCwweDg5LDB4YzEsMHgzMiwweGQxIH19LAorIHsxNiwgMHhiMTAwLCAwLCB7MHgwMywweGJjLDB4MDMsMHhhOSwweDIwLDB4ODksMHg0MSwweDNlLDB4NjAsMHg4NSwweGJjLDB4OGIsMHgyNSwweDQwLDB4ZWIsMHg0MSB9fSwKKyB7MTYsIDB4YjExMCwgMCwgezB4YTIsMHhhMCwweDBkLDB4ZjAsMHgxMywweDNlLDB4MjAsMHhjZiwweDkwLDB4MzYsMHgzMCwweDRmLDB4YmMsMHgwYiwweDNjLDB4MDAgfX0sCisgezE2LCAweGIxMjAsIDAsIHsweGNmLDB4ODAsMHgzMywweGMxLDB4MGMsMHhiMSwweDAzLDB4ZWEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMTMwLCAwLCB7MHg4MCwweDAwLDB4ZWQsMHgwMCwweGY4LDB4MDEsMHgzYywweGQwLDB4MGYsMHhiMywweDAzLDB4ZTgsMHg4MiwweGQ4LDB4MjAsMHgzNiB9fSwKKyB7MTYsIDB4YjE0MCwgMCwgezB4ODAsMHgyZSwweGIyLDB4MTMsMHhlMSwweDAwLDB4ZmEsMHgwMCwweDdlLDB4YzgsMHgyZSwweGIwLDB4MDMsMHhlYywweDgwLDB4ZGIgfX0sCisgezE2LCAweGIxNTAsIDAsIHsweDEwLDB4M2EsMHgwOCwweDRmLDB4YjIsMHgyMywweGNjLDB4MDIsMHhmYiwweDEwLDB4M2EsMHhjMCwweDBmLDB4OTAsMHgwMywweGU0IH19LAorIHsxNiwgMHhiMTYwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxMCwweGYwLDB4MDAsMHhjZCwweDEwLDB4MzMsMHg0MiB9fSwKKyB7MTYsIDB4YjE3MCwgMCwgezB4MGMsMHhjYSwweDIzLDB4N2MsMHgwMCwweGNmLDB4MDAsMHgzMywweDYyLDB4MDYsMHhmMCwweDAxLDB4M2EsMHgwMCwweGNmLDB4MDggfX0sCisgezE2LCAweGIxODAsIDAsIHsweDMzLDB4ODAsMHgxYywweGYwLDB4ODEsMHgzYywweDAwLDB4ZmYsMHgwMCwweDMzLDB4YTAsMHgwYywweGNhLDB4MDEsMHhmYywweDA0IH19LAorIHsxNiwgMHhiMTkwLCAwLCB7MHhjZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGMwLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjFhMCwgMCwgezB4YTEsMHgwNCwweDZkLDB4NDAsMHg4OCwweDQ4LDB4YTIsMHgzMSwweDA4LDB4MTAsMHgwMiwweDIwLDB4MTAsMHg4OCwweGI0LDB4MjIgfX0sCisgezE2LCAweGIxYjAsIDAsIHsweGEwLDB4MDgsMHg4MCwweDAwLDB4NmEsMHg4NCwweDg4LDB4MjAsMHgyMiwweDUyLDB4MDgsMHhiMCwweDBhLDB4MmMsMHgxMCwweGJiIH19LAorIHsxNiwgMHhiMWMwLCAwLCB7MHgwMCwweDMyLDB4YjMsMHg4OCwweDgwLDB4MDIsMHhlYywweDAwLDB4ZGIsMHgwMCwweDJlLDB4YzAsMHgwYiwweDkwLDB4MTIsMHhlMSB9fSwKKyB7MTYsIDB4YjFkMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHgwMCwweDEwLDB4OGEsMHgwMSwweDIyLDB4YTAgfX0sCisgezE2LCAweGIxZTAsIDAsIHsweDA4LDB4YjAsMHg0MiwweDYwLDB4MjAsMHg4MCwweDAwLDB4MjAsMHg0NCwweDFhLDB4ODAsMHgxYSwweGU0LDB4NDIsMHhhMCwweDA2IH19LAorIHsxNiwgMHhiMWYwLCAwLCB7MHgyMiwweDAwLDB4NzgsMHgzMCwweDAyLDB4YWMsMHgwMCwweGJiLDB4MDAsMHhhMiwweDQ0LDB4MDgsMHhiMCwweDEyLDB4ZWMsMHgwMCB9fSwKKyB7MTYsIDB4YjIwMCwgMCwgezB4OGIsMHgwMCwweDBlLDB4YzAsMHgwYiwweDkwLDB4MDIsMHhlMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIyMTAsIDAsIHsweDA4LDB4MTQsMHgwMCwweDA4LDB4ODAsMHgwMCwweDIwLDB4ODEsMHgwOCwweDMwLDB4MDIsMHg0MCwweDEyLDB4ODAsMHgwMCwweGEwIH19LAorIHsxNiwgMHhiMjIwLCAwLCB7MHg0MCwweDA4LDB4YjAsMHgwMiwweGMwLDB4MDAsMHg4MiwweDAwLDB4MDAsMHg4MCwweDA4LDB4MzAsMHgwMiwweDhjLDB4MDAsMHhiYiB9fSwKKyB7MTYsIDB4YjIzMCwgMCwgezB4MDAsMHgyMCwweDAwLDB4MDgsMHgyMCwweDAyLDB4Y2MsMHg4MCwweDkzLDB4MDAsMHgyYywweGMwLDB4MGIsMHgzMCwweDAyLDB4YzIgfX0sCisgezE2LCAweGIyNDAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NjAsMHgwMCwweGNhLDB4MTQsMHgzMiwweDAwIH19LAorIHsxNiwgMHhiMjUwLCAwLCB7MHgwYywweGIwLDB4MDMsMHg0YywweDAwLDB4Y2EsMHgwMCwweDMyLDB4MDAsMHgwZSwweDAwLDB4MTIsMHhhMCwweDAwLDB4YzAsMHgwMCB9fSwKKyB7MTYsIDB4YjI2MCwgMCwgezB4NzAsMHgwMCwweDI4LDB4ZjAsMHgxMywweGFjLDB4MDAsMHhmYiwweDAwLDB4MzIsMHg0MCwweDJjLDB4MTAsMHg0MywweGVjLDB4MDAgfX0sCisgezE2LCAweGIyNzAsIDAsIHsweGNmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHg5MCwweDAzLDB4YzAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMjgwLCAwLCB7MHgyMCwweDE1LDB4ZjAsMHgwMiwweGZjLDB4MDAsMHgxZiwweDAwLDB4NjcsMHg3MCwweDAzLDB4YjAsMHgwMCwweGZjLDB4MDAsMHgzZiB9fSwKKyB7MTYsIDB4YjI5MCwgMCwgezB4MDAsMHgyZCwweGMwLDB4MDMsMHgzMCwweDEwLDB4ZmMsMHgwMSwweGJmLDB4MDAsMHgwZiwweDcwLDB4MDMsMHg3YywweDAwLDB4ZjcgfX0sCisgezE2LCAweGIyYTAsIDAsIHsweDA0LDB4M2IsMHgwMCwweDBmLDB4YzAsMHgxMywweGZkLDB4MTAsMHhmZiwweDAwLDB4M2QsMHhjMCwweDBmLDB4ZjAsMHgwMywweGU4IH19LAorIHsxNiwgMHhiMmIwLCAwLCB7MHgxMiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNSwweGY0LDB4YzAsMHhjZiwweDgwLDB4MzMsMHg2MCB9fSwKKyB7MTYsIDB4YjJjMCwgMCwgezB4MGUsMHhjOSwweDEzLDB4MzYsMHg1MCwweGNlLDB4ODYsMHgzZiwweDA4LDB4MGMsMHhjMCwweDAzLDB4M2UsMHgwMiwweGQ3LDB4ODAgfX0sCisgezE2LCAweGIyZDAsIDAsIHsweDM5LDB4ZTAsMHgwZiwweGY4LDB4MTMsMHgzZSwweDQwLDB4YzcsMHgzMCwweDNiLDB4Y2UsMHgwZCwweGY2LDB4MDMsMHgzZCwweDg4IH19LAorIHsxNiwgMHhiMmUwLCAwLCB7MHhjZiwweDMxLDB4MzMsMHhlNCwweDBmLDB4NzgsMHgwMywweDMwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjJmMCwgMCwgezB4ODAsMHgxMCwweGU1LDB4ZDAsMHhkYiwweDgwLDB4NzIsMHg2MCwweDg4LDB4OTIsMHgwMiwweGU0LDB4MTAsMHg4YSwweDgwLDB4MmUgfX0sCisgezE2LCAweGIzMDAsIDAsIHsweDM0LDB4NGEsMHg4YywweDAzLDB4MmUsMHgwMCwweGFiLDB4ODAsMHgwMiwweGUwLDB4MGIsMHhiOCwweDAyLDB4MmMsMHg4MCwweDhmIH19LAorIHsxNiwgMHhiMzEwLCAwLCB7MHg2MCwweDEzLDB4ZDgsMHg0YSwweDc2LDB4MDIsMHg5ZCwweDg0LDB4YWYsMHgzMCwweDIyLDB4NDgsMHgwYiwweDg4LDB4MTIsMHhhMCB9fSwKKyB7MTYsIDB4YjMyMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjNCwweDAwLDB4OGIsMHgwMCwweDI0LDB4MDAgfX0sCisgezE2LCAweGIzMzAsIDAsIHsweDRhLDB4MDAsMHgwMiwweGFjLDB4ODAsMHg4MywweDAwLDB4MmMsMHgwMSwweDI4LDB4MDQsMHgwMiwweGFjLDB4MDAsMHg4YiwweDAxIH19LAorIHsxNiwgMHhiMzQwLCAwLCB7MHgyMCwweGMwLDB4MDMsMHhiMCwweDAyLDB4MGMsMHg4MCwweDgzLDB4NDAsMHgyMCwweGMxLDB4YTgsMHgzNCwweDIyLDB4OGQsMHgxMyB9fSwKKyB7MTYsIDB4YjM1MCwgMCwgezB4ODMsMHgyMCwweGFjLDB4YzgsMHgwYiwweGIwLDB4MDIsMHg2MiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIzNjAsIDAsIHsweGMwLDB4MTUsMHg4NiwweDAwLDB4OWIsMHgwNCwweGFlLDB4MDAsMHgwYSwweDkwLDB4MDIsMHhlYywweDAwLDB4MGIsMHgxNCwweDJlIH19LAorIHsxNiwgMHhiMzcwLCAwLCB7MHhjNiwweDAyLDB4YjEsMHgxMiwweDZjLDB4MDAsMHhhYiwweDIwLDB4MmEsMHhjMSwweDBiLDB4YjAsMHg0MiwweDJjLDB4MDAsMHg4YiB9fSwKKyB7MTYsIDB4YjM4MCwgMCwgezB4MDIsMHgyNiwweGMxLDB4MGEsMHhiMCwweDAyLDB4YWMsMHgwMCwweGFiLDB4MDQsMHgyYSwweDQwLDB4MGIsMHg5MCwweDAyLDB4ZjAgfX0sCisgezE2LCAweGIzOTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDExLDB4ZTcsMHgwMCwweGMzLDB4MDEsMHgzNiwweDQwIH19LAorIHsxNiwgMHhiM2EwLCAwLCB7MHgwZSwweDg4LDB4MTMsMHgyNCwweDAyLDB4Y2EsMHgwMCwweDFlLDB4MjAsMHgyYywweDhlLDB4MGIsMHgyYywweDAwLDB4Y2IsMHgwMCB9fSwKKyB7MTYsIDB4YjNiMCwgMCwgezB4MmEsMHhjMCwweDBmLDB4YjgsMHgwMywweDJlLDB4MDYsMHhjYiwweDAwLDB4M2EsMHhjMCwweDRjLDB4YjAsMHgxMywweGFjLDB4MGMgfX0sCisgezE2LCAweGIzYzAsIDAsIHsweGNiLDB4MDAsMHgzZSwweGM4LDB4MGYsMHhiMCwweDQzLDB4NTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiM2QwLCAwLCB7MHhlMCwweDAxLDB4YjQsMHgwOCwweGZmLDB4OTEsMHgzMywweDQwLDB4MDksMHhkYywweDAxLDB4ZjQsMHgyMCwweDdlLDB4MDIsMHgyZSB9fSwKKyB7MTYsIDB4YjNlMCwgMCwgezB4NDAsMHgwZCwweDk4LDB4MDEsMHhiYywweDgwLDB4ZWYsMHg4MCwweGI3LDB4ZTQsMHg4ZiwweGY0LDB4MGIsMHhmZSwweDQwLDB4N2YgfX0sCisgezE2LCAweGIzZjAsIDAsIHsweDAwLDB4YjksMHhjMCwweDRlLDB4ZjAsMHgwMywweGZjLDB4MDgsMHhmNywweDAwLDB4MzcsMHhjMCwweDBmLDB4ZTAsMHgwMiwweGI4IH19LAorIHsxNiwgMHhiNDAwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweGExLDB4NDQsMHhjYiwweDAyLDB4MzIsMHgwMCB9fSwKKyB7MTYsIDB4YjQxMCwgMCwgezB4MGQsMHg4MCwweDBhLDB4NmQsMHgwMCwweGViLDB4MDQsMHgxMCwweDkwLDB4MjgsMHgyMiwweDBiLDB4MmMsMHhjMiwweGNiLDB4MjAgfX0sCisgezE2LCAweGI0MjAsIDAsIHsweDc2LDB4YzAsMHgwZSwweGIxLDB4MDMsMHhlYywweDAxLDB4Y2IsMHgwNiwweDMyLDB4YzEsMHgwYywweDMwLDB4MDMsMHgyYywweDAyIH19LAorIHsxNiwgMHhiNDMwLCAwLCB7MHhjYiwweDAwLDB4M2UsMHhkMCwweDBjLDB4YjAsMHgwMywweDEwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjQ0MCwgMCwgezB4YzgsMHgwNSwweDIxLDB4NDgsMHhhYiwweDAwLDB4MjAsMHgwMCwweDAwLDB4OTUsMHgyMywweDRjLDB4MDgsMHhiYiwweDAxLDB4MjIgfX0sCisgezE2LCAweGI0NTAsIDAsIHsweGMwLDB4MDgsMHhiMiwweDAyLDB4MGMsMHgwOCwweDgzLDB4ODgsMHg5MiwweGQ1LDB4MjgsMHgzNCwweDAyLDB4ZWMsMHgwMiwweDhmIH19LAorIHsxNiwgMHhiNDYwLCAwLCB7MHgyMCwweDIzLDB4YzAsMHg0ZCwweGYwLDB4MDEsMHg3YywweDAwLDB4ZGYsMHgwMCwweDJlLDB4YzAsMHgwZCwweDMwLDB4MDMsMHg3MiB9fSwKKyB7MTYsIDB4YjQ3MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0NCwweDAwLDB4ODMsMHgxMCwweDIwLDB4NjAgfX0sCisgezE2LCAweGI0ODAsIDAsIHsweDA5LDB4MjUsMHgwMiwweDAwLDB4MDgsMHhhMCwweDAwLDB4NGMsMHgwMCwweDBiLDB4MGMsMHgyMiwweDRmLDB4MTIsMHg5MywweDQwIH19LAorIHsxNiwgMHhiNDkwLCAwLCB7MHgwMCwweGMwLDB4MDksMHgzZSwweDAyLDB4ZWMsMHgwMCwweGFiLDB4ODAsMHhhNCwweGMwLDB4MDksMHgzMCwweDIyLDB4MmMsMHgwOCB9fSwKKyB7MTYsIDB4YjRhMCwgMCwgezB4YjMsMHgwMSwweDBjLDB4ODEsMHgwOCwweDMwLDB4MDIsMHgzOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI0YjAsIDAsIHsweDYwLDB4MDEsMHgxNiwweDA5LDB4YjcsMHg4MCwweDIxLDB4NjQsMHgwOCwweDc4LDB4MDYsMHgxMiwweDAwLDB4YjQsMHg4MiwweDJkIH19LAorIHsxNiwgMHhiNGMwLCAwLCB7MHhhNCwweDFiLDB4NjksMHgwNiwweDdlLDB4MDQsMHgxNywweDkyLDB4MjUsMHhlNiwweDA5LDB4NzgsMHgwNiwweGRlLDB4ODAsMHhhNyB9fSwKKyB7MTYsIDB4YjRkMCwgMCwgezB4OTAsMHgyNSwweGUwLDB4MDksMHg3OSwweDUwLDB4NWUsMHgwNCwweGI3LDB4OTIsMHgyZiwweDYxLDB4MDksMHhjOCwweDAyLDB4NDggfX0sCisgezE2LCAweGI0ZTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MjUsMHgwMCwweGMzLDB4MDAsMHhiMCwweDAzIH19LAorIHsxNiwgMHhiNGYwLCAwLCB7MHgwZCwweGEzLDB4NDIsMHgwOSwweDQwLDB4ZTEsMHgwMCwweGJjLDB4NDAsMHgwZiwweDExLDB4MDMsMHg0YywweDAwLDB4MTMsMHgwMCB9fSwKKyB7MTYsIDB4YjUwMCwgMCwgezB4MjAsMHhjMCwweDA5LDB4MzIsMHgwMywweGNjLDB4MTAsMHhhMywweDAwLDB4MjYsMHhjNCwweDhkLDB4MzAsMHgyYiwweDBjLDB4ODAgfX0sCisgezE2LCAweGI1MTAsIDAsIHsweGYzLDB4MDAsMHg3YywweDgwLDB4MGMsMHgzMCwweDAxLDB4MTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNTIwLCAwLCB7MHg0MCwweDFkLDB4YmMsMHgwMCwweGU3LDB4MTAsMHgzZCwweDAxLDB4MmYsMHhmMSwweDQyLDB4ZTgsMHgwMCwweGY1LDB4OTAsMHgwMyB9fSwKKyB7MTYsIDB4YjUzMCwgMCwgezB4YzEsMHgwYywweGYxLDB4NDMsMHg5YywweDA0LDB4ZWYsMHgwOCwweDNiLDB4YzIsMHgwYywweGYwLDB4ODEsMHhkYywweGEwLDB4ZGYgfX0sCisgezE2LCAweGI1NDAsIDAsIHsweDAwLDB4M2IsMHhjMywweDNmLDB4ZjAsMHg4MywweGZjLDB4MDUsMHhkZiwweDBjLDB4M2QsMHg0MCwweDBmLDB4ZDEsMHgwMywweGQwIH19LAorIHsxNiwgMHhiNTUwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwNSwweGY0LDB4MDAsMHhjYiwweDgwLDB4MzAsMHg0MCB9fSwKKyB7MTYsIDB4YjU2MCwgMCwgezB4MmMsMHhhMCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4ODAsMHgzMiwweGMwLDB4MmUsMHhiOCwweDBiLDB4MmMsMHg0NiwweGQzLDB4MDAgfX0sCisgezE2LCAweGI1NzAsIDAsIHsweDMwLDB4YzAsMHgwYywweDMwLDB4MDMsMHgwYywweDAwLDB4ZGIsMHg0OCwweDMyLDB4YzAsMHgxZiwweGI0LDB4MDMsMHgyYywweDg4IH19LAorIHsxNiwgMHhiNTgwLCAwLCB7MHhjYiwweDQ4LDB4MzIsMHg4MCwweDBjLDB4MzAsMHgxMywweDJhLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjU5MCwgMCwgezB4NDgsMHgxMSwweGI0LDB4MDAsMHg4NywweDAxLDB4MjEsMHg0MCwweDA4LDB4NzAsMHg0MiwweGQwLDB4MDgsMHhiNCwweDAwLDB4MjkgfX0sCisgezE2LCAweGI1YTAsIDAsIHsweGMwLDB4MDgsMHg3MCwweDAyLDB4MWMsMHgwMCwweDg3LDB4MDAsMHgyMSwweGM4LDB4MGMsMHg3MiwweDBhLDB4MWMsMHg4NCwweDhmIH19LAorIHsxNiwgMHhiNWIwLCAwLCB7MHg0MCwweDA5LDB4YzQsMHg4ZiwweDczLDB4MTIsMHg5YywweDQwLDB4ODMsMHgyMCwweDIxLDB4YzAsMHgwOCwweDYwLDB4MDIsMHg5MiB9fSwKKyB7MTYsIDB4YjVjMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5NiwweDAxLDB4YWYsMHg4MCwweDIxLDB4MjAgfX0sCisgezE2LCAweGI1ZDAsIDAsIHsweDA4LDB4NjgsMHgwMiwweGRhLDB4MDAsMHhiZCwweDgwLDB4MjEsMHhlMCwweDA5LDB4NzgsMHgwMiwweDFlLDB4MDAsMHg4ZiwweDg4IH19LAorIHsxNiwgMHhiNWUwLCAwLCB7MHg4MywweGUyLDB4MjksMHhmOCwweDgyLDB4NWYsMHg4MCwweDg3LDB4YTAsMHgyNSwweGUwLDB4MGIsMHgzYSwweDEyLDB4MGUsMHg1MCB9fSwKKyB7MTYsIDB4YjVmMCwgMCwgezB4OTcsMHhhNCwweDIxLDB4YTAsMHgyOSwweDc4LDB4MDIsMHgzMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI2MDAsIDAsIHsweDA4LDB4MTQsMHhjYywweDAyLDB4YTEsMHg4MSwweDAwLDB4MDAsMHg0OCwweDcwLDB4MDIsMHhjOCwweDAwLDB4YjEsMHgwMCwweDJjIH19LAorIHsxNiwgMHhiNjEwLCAwLCB7MHhmOCwweDA5LDB4MzEsMHg0MiwweDBjLDB4MTAsMHg4MywweDAwLDB4MjAsMHhlMCwweDA4LDB4MzgsMHgxMiwweDRlLDB4MDAsMHg4MyB9fSwKKyB7MTYsIDB4YjYyMCwgMCwgezB4MDAsMHg2YSwweGMwLDB4MGIsMHgzMCwweDAyLDB4OGMsMHgwNCwweDkzLDB4MDAsMHgyMCwweGUwLDB4MDksMHgzOCwweDAyLDB4OTIgfX0sCisgezE2LCAweGI2MzAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YjksMHg0MCwweGVlLDB4MjAsMHgzMCwweDgwIH19LAorIHsxNiwgMHhiNjQwLCAwLCB7MHgwYywweGEwLDB4MDMsMHhlOCwweDAwLDB4ZmEsMHgwMCwweDMzLDB4YjAsMHgwZCwweGU0LDB4MDMsMHgzMiwweDg4LDB4Y2MsMHg4MCB9fSwKKyB7MTYsIDB4YjY1MCwgMCwgezB4MjMsMHgwMCwweDBkLDB4YzAsMHgwMywweDYyLDB4MDIsMHhjYSwweDAwLDB4MzYsMHg4MCwweDBmLDB4YTAsMHg0MywweDI4LDB4MDYgfX0sCisgezE2LCAweGI2NjAsIDAsIHsweGRhLDB4MDAsMHgzMywweGEwLDB4MGQsMHg2YSwweDAzLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNjcwLCAwLCB7MHg0OCwweDAwLDB4ZTAsMHgwMCwweDk4LDB4MDEsMHhiZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZjAsMHgwMCwweGJjLDB4MDAsMHgzOCB9fSwKKyB7MTYsIDB4YjY4MCwgMCwgezB4MDQsMHgwOCwweDgwLDB4YTMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MTMsMHhhMCwweDAwLDB4ZTAgfX0sCisgezE2LCAweGI2OTAsIDAsIHsweDAwLDB4M2UsMHgwMCwweDBlLDB4MDAsMHgwMywweGMwLDB4MDAsMHhlOCwweDAwLDB4YmUsMHgwNCwweDRlLDB4ODAsMHgwNywweGQyIH19LAorIHsxNiwgMHhiNmEwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweGU0LDB4ODAsMHhjOSwweDAwLDB4M2UsMHg2OCB9fSwKKyB7MTYsIDB4YjZiMCwgMCwgezB4MGMsMHg5MCwweDAzLDB4NjQsMHgwMCwweGM5LDB4MDAsMHgzZSwweDQwLDB4MGMsMHg5MCwweDQzLDB4ZTAsMHgwMCwweGM4LDB4MDAgfX0sCisgezE2LCAweGI2YzAsIDAsIHsweDMyLDB4MDAsMHgwYywweDgwLDB4MTMsMHgyMCwweDAwLDB4YzksMHgwMCwweDM2LDB4NDAsMHgwYywweDkwLDB4MDMsMHg2NCwweDAwIH19LAorIHsxNiwgMHhiNmQwLCAwLCB7MHg4MSwweDAwLDB4MzIsMHg0MCwweDA0LDB4OTAsMHgxMywweDAyLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjZlMCwgMCwgezB4ODAsMHgwNCwweDY1LDB4MDYsMHg4OSwweDQwLDB4MmUsMHg2MCwweDFhLDB4MTQsMHgyYSwweDA1LDB4MjAsMHg4OSwweDAwLDB4MmUgfX0sCisgezE2LCAweGI2ZjAsIDAsIHsweDQwLDB4MDgsMHg5MCwweDAyLDB4YzQsMHgwOCwweGMxLDB4MDIsMHgyMCwweDQwLDB4MDgsMHgxMCwweDFhLDB4MjQsMHgwMCwweDg5IH19LAorIHsxNiwgMHhiNzAwLCAwLCB7MHgxMCwweDMyLDB4NDEsMHgwOCwweDkwLDB4MTIsMHgyNCwweDAwLDB4ODksMHgwNCwweDM2LDB4NDAsMHg4OCwweDk0LDB4MGEsMHgyMCB9fSwKKyB7MTYsIDB4YjcxMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgwNCwweDIwLDB4ODksMHg1NSwweDJlLDB4NDAgfX0sCisgezE2LCAweGI3MjAsIDAsIHsweDA4LDB4ZDUsMHgwMiwweDM0LDB4MDAsMHg4ZCwweDAwLDB4MmUsMHg0MCwweDE4LDB4OTAsMHgwMiwweGU0LDB4MDAsMHg5OSwweDAwIH19LAorIHsxNiwgMHhiNzMwLCAwLCB7MHgyNiwweDQwLDB4MDgsMHg5MCwweDAyLDB4MDQsMHgwYSwweDg5LDB4MDAsMHgyNiwweDQwLDB4MzgsMHg5MCwweDBhLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4Yjc0MCwgMCwgezB4YTksMHgwMCwweDIwLDB4NDAsMHgwYSwweDkwLDB4ODIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI3NTAsIDAsIHsweDA4LDB4MDQsMHgwNSwweDAwLDB4ODEsMHgwMCwweDJmLDB4NDAsMHgwYSwweGQ0LDB4MDIsMHgzNCwweDAwLDB4ODUsMHgwMSwweDJjIH19LAorIHsxNiwgMHhiNzYwLCAwLCB7MHg0MCwweDA4LDB4MTAsMHg0MiwweGU0LDB4MDYsMHg5OSwweDAwLDB4MjIsMHg0MCwweDA4LDB4MTAsMHgwMiwweDA1LDB4MDAsMHg4MSB9fSwKKyB7MTYsIDB4Yjc3MCwgMCwgezB4NDAsMHgyOCwweDUwLDB4MDgsMHgxNCwweDEyLDB4MDUsMHgwMCwweGExLDB4NDAsMHgyNCwweDUwLDB4NWEsMHgxMCwweDAyLDB4MDIgfX0sCisgezE2LCAweGI3ODAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGM4LDB4MDQsMHgzZSwweDAwIH19LAorIHsxNiwgMHhiNzkwLCAwLCB7MHgwOCwweDgwLDB4MDMsMHgyMSwweDQyLDB4Y2MsMHgwMCwweDNlLDB4MDAsMHgyYywweDgwLDB4MDIsMHhlMCwweDAwLDB4ZDgsMHgwMCB9fSwKKyB7MTYsIDB4YjdhMCwgMCwgezB4YjYsMHgwMCwweDJjLDB4ODAsMHgwMiwweDIwLDB4MDIsMHhjOCwweDAwLDB4MzYsMHgwMCwweDBjLDB4ODAsMHgwMywweDYwLDB4MDIgfX0sCisgezE2LCAweGI3YjAsIDAsIHsweGU4LDB4MDAsMHgzMiwweDAwLDB4OGUsMHg4MCwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiN2MwLCAwLCB7MHg5OCwweDFkLDB4ZjUsMHgwMCwweGY1LDB4MDAsMHgzZSwweDQwLDB4ODcsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGYxLDB4MDAsMHgzZCB9fSwKKyB7MTYsIDB4YjdkMCwgMCwgezB4NTAsMHgwZiwweDU0LDB4MDMsMHhkMSwweDAwLDB4ZWMsMHg0MCwweDNmLDB4MTAsMHgwYiwweGM0LDB4NDMsMHhmMSwweDAwLDB4ZjkgfX0sCisgezE2LCAweGI3ZTAsIDAsIHsweDQwLDB4MzYsMHg1MCwweDBmLDB4OTQsMHgxMywweGU1LDB4MTAsMHhkOSwweDQ0LDB4M2QsMHg0MCwweDJkLDB4ZDAsMHgwMywweGU2IH19LAorIHsxNiwgMHhiN2YwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweGY2LDB4NjAsMHhjZCwweDAyLDB4M2IsMHg0MCB9fSwKKyB7MTYsIDB4YjgwMCwgMCwgezB4MGMsMHhkMCwweDAzLDB4YjQsMHg0MCwweGZkLDB4MDYsMHgzZSwweDQwLDB4MGMsMHg5MCwweDAzLDB4NjYsMHgwNCwweGM5LDB4ODIgfX0sCisgezE2LCAweGI4MTAsIDAsIHsweGI2LDB4NjIsMHgwZiwweDE4LDB4MGIsMHgzNiwweDAwLDB4Y2QsMHg0MCwweDMyLDB4NjEsMHgwYywweDkwLDB4MjMsMHgyNCwweDBhIH19LAorIHsxNiwgMHhiODIwLCAwLCB7MHhjOSwweDAwLDB4MzIsMHg0MCwweDRjLDB4ZDAsMHg0MywweDA2LDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjgzMCwgMCwgezB4MzksMHgxMCwweGUzLDB4ODAsMHhkOCwweDAwLDB4MjIsMHgwMCwweDBkLDB4ODAsMHgwMiwweDIyLDB4OTQsMHhiOCwweDAwLDB4MmUgfX0sCisgezE2LCAweGI4NDAsIDAsIHsweDAwLDB4MGQsMHg4MCwweDAzLDB4MjEsMHgwMCwweDg4LDB4NDAsMHgyMiwweDAwLDB4MGIsMHhjNCwweDIyLDB4MjEsMHg1MCwweDg4IH19LAorIHsxNiwgMHhiODUwLCAwLCB7MHg4MCwweDIyLDB4MjIsMHgwOCwweDgwLDB4MDIsMHgyMCwweDEwLDB4ODAsMHgwMSwweDJhLDB4MDAsMHgwYSwweDgwLDB4MDMsMHg0ZSB9fSwKKyB7MTYsIDB4Yjg2MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhjNiwweDAwLDB4ODksMHgwMCwweDJhLDB4NDAgfX0sCisgezE2LCAweGI4NzAsIDAsIHsweDg4LDB4MTAsMHgwYSwweDg0LDB4MDgsMHhiMSwweDAwLDB4MjksMHg0MCwweDBhLDB4NzAsMHgwYSwweGI1LDB4MDAsMHg4ZiwweDQwIH19LAorIHsxNiwgMHhiODgwLCAwLCB7MHgyOSwweGMwLDB4MGIsMHhmNCwweDAyLDB4MjQsMHgwMCwweDgxLDB4MjAsMHgyOCwweDQ0LDB4ODksMHgxMCwweDAyLDB4MDQsMHgwNCB9fSwKKyB7MTYsIDB4Yjg5MCwgMCwgezB4ODEsMHgwMiwweDJhLDB4NDAsMHgwOCwweDEwLDB4MDIsMHgwMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI4YTAsIDAsIHsweDE4LDB4MTUsMHhhNiwweDAwLDB4OTksMHgyMCwweDIyLDB4NDAsMHgwOSwweDkwLDB4MTIsMHgyNCwweDgwLDB4YjksMHgwMCwweDJmIH19LAorIHsxNiwgMHhiOGIwLCAwLCB7MHg0NCwweDAzLDB4ZDAsMHgwMiwweGY0LDB4MDAsMHg4ZCwweDAwLDB4MmIsMHg0MSwweDBiLDB4ZDAsMHgwMiwweDI2LDB4MTAsMHg4OSB9fSwKKyB7MTYsIDB4YjhjMCwgMCwgezB4MDQsMHgyYSwweDQwLDB4MDksMHg5MCwweDZlLDB4MjQsMHgwMCwweDg5LDB4MDAsMHgyYSwweDQwLDB4MGEsMHg5NCwweDAyLDB4NDYgfX0sCisgezE2LCAweGI4ZDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMiwweDE1LDB4ZTYsMHgwMCwweGM5LDB4MDAsMHgzOCwweDQyIH19LAorIHsxNiwgMHhiOGUwLCAwLCB7MHgwYywweDEwLDB4MTMsMHhhNiwweDA0LDB4NzksMHgwOCwweDNhLDB4NzgsMHgwNiwweDkyLDB4MDMsMHhhNCwweDA4LDB4YzksMHgwMCB9fSwKKyB7MTYsIDB4YjhmMCwgMCwgezB4M2EsMHg2MCwweDhmLDB4OTgsMHgyMywweDA2LDB4MDIsMHhjOSwweDAyLDB4M2EsMHg0MCwweDBkLDB4OTAsMHgwMywweDA0LDB4MDAgfX0sCisgezE2LCAweGI5MDAsIDAsIHsweGM5LDB4MDAsMHgzOCwweDQwLDB4MGMsMHg5MCwweDAzLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiOTEwLCAwLCB7MHgyOCwweDAxLDB4ODQsMHgxMCwweGY5LDB4ODAsMHhiZSwweDQwLDB4NGYsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzYyB9fSwKKyB7MTYsIDB4YjkyMCwgMCwgezB4NjAsMHg4ZCwweDkyLDB4MDMsMHgyNCwweDQyLDB4ZTksMHgxMCwweDMyLDB4NTAsMHgwZiwweDk0LDB4MDMsMHhlNCwweDAwLDB4ZjkgfX0sCisgezE2LCAweGI5MzAsIDAsIHsweDAwLDB4YjYsMHg0MSwweDJlLDB4MTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4MmUsMHg0MCwweDBmLDB4OTAsMHgwMywweGNhIH19LAorIHsxNiwgMHhiOTQwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMCwweGEwLDB4MDgsMHhjOCwweDAwLDB4M2UsMHgxMCB9fSwKKyB7MTYsIDB4Yjk1MCwgMCwgezB4MGYsMHg4OCwweDAzLDB4MjAsMHgwOCwweGY4LDB4YzAsMHgxZSwweDEwLDB4MmMsMHg0MCwweDAzLDB4ZjIsMHgwMCwweGNjLDB4MDAgfX0sCisgezE2LCAweGI5NjAsIDAsIHsweDNmLDB4MDAsMHgwYywweGMwLDB4MTMsMHgyMCwweDAyLDB4YzAsMHgwMCwweDMwLDB4MDAsMHgwYywweDgwLDB4MmIsMHgyMCwweDEwIH19LAorIHsxNiwgMHhiOTcwLCAwLCB7MHhjMCwweDA0LDB4MzIsMHgwMCwweDBmLDB4ODAsMHgwMywweDBhLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Yjk4MCwgMCwgezB4YTgsMHgwNSwweDNhLDB4ODAsMHg4NiwweGUwLDB4MmYsMHhhMCwweDFiLDB4ZTAsMHgwMiwweDNhLDB4ODAsMHhiYSwweDA0LDB4MmUgfX0sCisgezE2LCAweGI5OTAsIDAsIHsweDgwLDB4MDgsMHhhMCwweDAzLDB4ODgsMHgwOCwweGMyLDB4MDAsMHgyZSwweDgxLDB4MDgsMHg2MCwweDAyLDB4MjgsMHgxMCwweDhlIH19LAorIHsxNiwgMHhiOWEwLCAwLCB7MHg4MSwweDAzLDB4ODAsMHgwOCwweGUwLDB4MDEsMHg3OCwweDAwLDB4OGUsMHgwNCwweDAzLDB4ODAsMHgwOSwweDY4LDB4MDMsMHhjYSB9fSwKKyB7MTYsIDB4YjliMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4ODMsMHg2MCwweDJjLDB4NDQgfX0sCisgezE2LCAweGI5YzAsIDAsIHsweDBiLDB4MzgsMHgwMiwweDBmLDB4ODAsMHhiMSwweDAwLDB4MmMsMHhlNSwweDAzLDB4MzAsMHgxMCwweGNjLDB4MTAsMHg4MywweDAwIH19LAorIHsxNiwgMHhiOWQwLCAwLCB7MHgwYywweGMwLDB4MjksMHgzMCwweDIyLDB4MDQsMHgwOSwweDkxLDB4MTAsMHgyNCwweGMwLDB4YzgsMHgzMCwweDAwLDB4NGMsMHgwNCB9fSwKKyB7MTYsIDB4YjllMCwgMCwgezB4OTMsMHgwMiwweDI0LDB4YzAsMHgwYiwweDMxLDB4MDIsMHgwYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI5ZjAsIDAsIHsweGUwLDB4MDEsMHgxOCwweDgwLDB4ODcsMHgwMCwweDJkLDB4NDAsMHgwYiwweDc0LDB4NDIsMHgxYywweDAxLDB4YjUsMHgwMSwweDJjIH19LAorIHsxNiwgMHhiYTAwLCAwLCB7MHhjMCwweDBiLDB4NjAsMHgwMiwweGIwLDB4MDAsMHg5NCwweDA0LDB4MmYsMHgyMCwweDA5LDB4YzAsMHgwMiwweDE0LDB4OTAsMHg5NyB9fSwKKyB7MTYsIDB4YmExMCwgMCwgezB4MDAsMHgyNSwweGM4LDB4MDgsMHg3MCwweDAyLDB4NGMsMHg4MCwweDk3LDB4MjAsMHgyNSwweGMwLDB4MDksMHg3MCwweDAyLDB4ZTggfX0sCisgezE2LCAweGJhMjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4M2EsMHg4MiwweGM2LDB4ODAsMHgyZCwweDYwIH19LAorIHsxNiwgMHhiYTMwLCAwLCB7MHgwYiwweGY4LDB4MGIsMHgxYSwweDAwLDB4ZjUsMHg4MCwweDNkLDB4ZTAsMHg4ZiwweDc4LDB4MDMsMHhkZSwweDAyLDB4YzcsMHg4MCB9fSwKKyB7MTYsIDB4YmE0MCwgMCwgezB4MmQsMHhlMCwweDBkLDB4NzgsMHgwYiwweDE3LDB4MDIsMHhkZiwweDgwLDB4MjQsMHhmOCwweDJjLDB4ZmQsMHgwMywweDVlLDB4MGMgfX0sCisgezE2LCAweGJhNTAsIDAsIHsweGQ3LDB4ZTAsMHgzNSwweGUwLDB4MGYsMHg2OCwweDAzLDB4MmEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiYTYwLCAwLCB7MHg0OCwweDFkLDB4YWUsMHg0MCwweGZhLDB4MDQsMHgzZSwweDQwLDB4MGYsMHg4MCwweDEzLDB4ZWMsMHgwNCwweGY5LDB4MDAsMHgzZSB9fSwKKyB7MTYsIDB4YmE3MCwgMCwgezB4YzEsMHgwYywweGEwLDB4MTMsMHhjMCwweDEwLDB4ZTgsMHgwMCwweDNjLDB4MDAsMHg0ZSwweDgwLDB4NDMsMHhjNCwweDIwLDB4ODkgfX0sCisgezE2LCAweGJhODAsIDAsIHsweDAwLDB4YmEsMHhjMCwweDA3LDB4YjYsMHgyMSwweGVkLDB4MDYsMHhlYiwweDY4LDB4YmEsMHhjYywweDBmLDB4MjAsMHgxMywweGMyIH19LAorIHsxNiwgMHhiYTkwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNSwweGJlLDB4MDAsMHhjNiwweDgwLDB4MzEsMHg2MCB9fSwKKyB7MTYsIDB4YmFhMCwgMCwgezB4MmQsMHg3OCwweDBiLDB4M2UsMHg0OCwweGVjLDB4OTIsMHgzZCwweDYwLDB4MGMsMHg1OCwweDAzLDB4NWEsMHg0MCwweGQ1LDB4ODAgfX0sCisgezE2LCAweGJhYjAsIDAsIHsweDMxLDB4NjEsMHgwYywweDU4LDB4MjMsMHgzNiwweDAwLDB4Y2YsMHg4MiwweDNmLDB4ZTAsMHgwYywweGY4LDB4MDMsMHhmZiwweDYwIH19LAorIHsxNiwgMHhiYWMwLCAwLCB7MHhjZiwweDkwLDB4MzMsMHhmMCwweDBjLDB4NTIsMHgwMywweDAwLDB4MDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmFkMCwgMCwgezB4YTgsMHgxMSwweGI4LDB4ODQsMHg4NiwweDE0LDB4YjUsMHhjMCwweDA4LDB4NzAsMHgwMiwweDFlLDB4YzAsMHhjNCwweDAwLDB4MmQgfX0sCisgezE2LCAweGJhZTAsIDAsIHsweDQwLDB4MDgsMHg0MCwweDAyLDB4MTQsMHhkMCwweDg2LDB4MTAsMHgyMSwweDgwLDB4NGMsMHg2MiwweDQyLDB4MzQsMHg0MCwweGE1IH19LAorIHsxNiwgMHhiYWYwLCAwLCB7MHgwMCwweDM1LDB4YzAsMHgyOCwweDcwLDB4NDIsMHhkYywweGMyLDB4OGYsMHgzMCwweDIzLDB4YzAsMHgwOCwweDUwLDB4MDIsMHgyYSB9fSwKKyB7MTYsIDB4YmIwMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MDAsMHg5OCwweDI4LDB4OGUsMHgwMCwweGE1LDB4NDAgfX0sCisgezE2LCAweGJiMTAsIDAsIHsweDA4LDB4ZjEsMHgwMiwweDE4LDB4NjQsMHhiNCwweDAwLDB4NmQsMHg0MiwweDA4LDB4NTAsMHgwMiwweDE4LDB4MDEsMHg4NSwweDA4IH19LAorIHsxNiwgMHhiYjIwLCAwLCB7MHgyMSwweDQwLDB4MDksMHg1OCwweDIyLDB4NTQsMHgwMCwweDg1LDB4MTAsMHgyZCwweGM0LDB4MDksMHg3MCwweDAyLDB4ZGMsMHgwNCB9fSwKKyB7MTYsIDB4YmIzMCwgMCwgezB4OTcsMHgwMCwweDI1LDB4YzAsMHgwOCwweDQ0LDB4MDIsMHgwMCwweDEwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJiNDAsIDAsIHsweDYwLDB4MTQsMHg4YywweDAwLDB4ODIsMHg4MCwweDI0LDB4YzAsMHgwOCwweDgwLDB4MDIsMHgyZCwweDAwLDB4ODAsMHg0YSwweDJjIH19LAorIHsxNiwgMHhiYjUwLCAwLCB7MHg0MiwweDA4LDB4MGEsMHg0MiwweDA2LDB4MDAsMHg5MiwweDg0LDB4MjAsMHhhMCwweDg4LDB4MjgsMHg0MiwweDQ0LDB4MDAsMHhhMyB9fSwKKyB7MTYsIDB4YmI2MCwgMCwgezB4MDYsMHgyNCwweGMwLDB4MGIsMHgzMCwweDAyLDB4Y2MsMHgxMCwweDkzLDB4MDQsMHgyNCwweGMxLDB4MDksMHgwMCwweDAyLDB4MDggfX0sCisgezE2LCAweGJiNzAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmMsMHgwMCwweGNiLDB4MDAsMHgzNiwweDQwIH19LAorIHsxNiwgMHhiYjgwLCAwLCB7MHgwYywweGI0LDB4MTMsMHgyYywweDAwLDB4ZjksMHgwMCwweDNlLDB4YTAsMHgwYywweGEyLDB4MDMsMHgwNCwweDA4LDB4YzIsMHg4MCB9fSwKKyB7MTYsIDB4YmI5MCwgMCwgezB4MzAsMHhhOCwweDBkLDB4MmEsMHgwMywweDU0LDB4MDAsMHhjYiwweDAwLDB4M2YsMHhjMCwweDBkLDB4ZjAsMHgwMywweGZjLDB4MDggfX0sCisgezE2LCAweGJiYTAsIDAsIHsweGRmLDB4MDAsMHgzNywweGQwLDB4MGMsMHhiMCwweDAzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiYmIwLCAwLCB7MHg4MCwweDAwLDB4ZTAsMHgwMCwweGZiLDB4MTAsMHgzYSwweDQwLDB4MGUsMHhiMCwweDAzLDB4ZWQsMHg5MCwweGY5LDB4MTEsMHg3ZSB9fSwKKyB7MTYsIDB4YmJjMCwgMCwgezB4ODAsMHg0ZiwweGIwLDB4NTMsMHhlOCwweDQwLDB4ZTksMHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhhNiwweDA4LDB4ZjkgfX0sCisgezE2LCAweGJiZDAsIDAsIHsweDAxLDB4M2EsMHhjMCwweDBjLDB4YjAsMHgxMywweGNjLDB4MDAsMHhlYiwweDAyLDB4M2EsMHhjNiwweDhlLDB4YjgsMHgwMywweGUwIH19LAorIHsxNiwgMHhiYmUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgxMCwweGYwLDB4MGMsMHhjZSwweDAwLDB4M2YsMHhlMCB9fSwKKyB7MTYsIDB4YmJmMCwgMCwgezB4MmMsMHhmMCwweDgzLDB4M2EsMHg0OCwweGNkLDB4MDEsMHgzNSwweDgwLDB4MGMsMHg2MCwweDEyLDB4MzQsMHgwYSwweGNlLDB4MDAgfX0sCisgezE2LCAweGJjMDAsIDAsIHsweGIzLDB4ODAsMHgyYywweGUwLDB4MGIsMHg3NCwweDAwLDB4YzksMHgxMCwweGIzLDB4YzEsMHgwZiwweGYwLDB4MWIsMHgzYywweDAwIH19LAorIHsxNiwgMHhiYzEwLCAwLCB7MHhjZiwweDAwLDB4YjcsMHhjMCwweDJjLDB4ZTAsMHgwMywweDAwLDB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmMyMCwgMCwgezB4ODEsMHgwNCwweDZlLDB4MTAsMHg4OCwweDgwLDB4MmMsMHhjMCwweDE4LDB4OTgsMHgwMiwweDJkLDB4ODAsMHg4MSwweDAwLDB4MzYgfX0sCisgezE2LCAweGJjMzAsIDAsIHsweDkxLDB4MDgsMHhiMCwweDAzLDB4NjgsMHgwMCwweGM5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMCwweDgzIH19LAorIHsxNiwgMHhiYzQwLCAwLCB7MHg4MCwweDM2LDB4YzAsMHgwYiwweDMwLDB4MDIsMHgyYywweDAyLDB4ODMsMHgwMCwweDIwLDB4YzAsMHgwOCwweDIwLDB4MDMsMHg2MCB9fSwKKyB7MTYsIDB4YmM1MCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgwNiwweDAwLDB4OGEsMHg4MCwweDJlLDB4NDUgfX0sCisgezE2LCAweGJjNjAsIDAsIHsweDI4LDB4ODgsMHgwMiwweDI0LDB4MDIsMHg4OCwweDAyLDB4MDIsMHgwMiwweDA4LDB4ODAsMHgwMiwweGEyLDB4MDAsMHg5OCwweDAwIH19LAorIHsxNiwgMHhiYzcwLCAwLCB7MHgyMiwweDAwLDB4MDgsMHg4MCwweDEyLDB4MjQsMHgwMCwweDg5LDB4MDEsMHgyMiwweGMxLDB4MGEsMHhiMCwweDAyLDB4NmMsMHgwMCB9fSwKKyB7MTYsIDB4YmM4MCwgMCwgezB4YWIsMHgwMCwweDIyLDB4YzEsMHgwOCwweDkwLDB4MTIsMHg2MCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJjOTAsIDAsIHsweDA4LDB4MDQsMHgwMCwweDAwLDB4ODAsMHgwMCwweDJjLDB4YzAsMHg0OCwweDA4LDB4MTIsMHgwMCwweDgwLDB4ODAsMHgwMiwweDI0IH19LAorIHsxNiwgMHhiY2EwLCAwLCB7MHgwMCwweDA4LDB4MTgsMHg0MiwweGFjLDB4MDIsMHg4YiwweDgwLDB4MjIsMHhlMCwweDA4LDB4YjgsMHgxMiwweDA0LDB4MDIsMHg4MyB9fSwKKyB7MTYsIDB4YmNiMCwgMCwgezB4MDAsMHgyMCwweGMwLDB4MGIsMHgzMCwweDQyLDB4MGMsMHgwMCwweGEzLDB4MDEsMHg2MCwweGMwLDB4NDgsMHgxMCwweDAyLDB4NDIgfX0sCisgezE2LCAweGJjYzAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NjgsMHgwOCwweGNhLDB4MDAsMHgyZSwweDQwIH19LAorIHsxNiwgMHhiY2QwLCAwLCB7MHgwOCwweDgwLDB4MDMsMHgwMCwweDAwLDB4YzgsMHgwNiwweDMyLDB4MDAsMHgwYywweDgwLDB4MDIsMHhhMCwweDAwLDB4ZDgsMHgwMCB9fSwKKyB7MTYsIDB4YmNlMCwgMCwgezB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMywweDc0LDB4MDAsMHhjYiwweDAwLDB4MjIsMHhjMCwweDBmLDB4ZjAsMHgwMywweDNjLDB4MDAgfX0sCisgezE2LCAweGJjZjAsIDAsIHsweGVmLDB4MDAsMHgzNywweGMwLDB4MGMsMHg4MCwweDAxLDB4NDAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiZDAwLCAwLCB7MHhhMCwweDE5LDB4ZmMsMHgwMCwweGZjLDB4MDQsMHgzZiwweGMwLDB4MGYsMHhjMCwweDAzLDB4ZTEsMHgwMCwweGZjLDB4MDAsMHgzYiB9fSwKKyB7MTYsIDB4YmQxMCwgMCwgezB4MDAsMHgwZiwweGQwLDB4MDMsMHg3YywweDAwLDB4ZWYsMHgwMCwweDJmLDB4YzAsMHgwZiwweGYwLDB4MTEsMHhmNCwweDEwLDB4ZmQgfX0sCisgezE2LCAweGJkMjAsIDAsIHsweDAyLDB4M2QsMHhjMCwweDRmLDB4ZjAsMHgwMywweGRjLDB4MDAsMHhkZiwweDA0LDB4M2YsMHhjMCwweDBmLDB4YzAsMHg0MywweGU5IH19LAorIHsxNiwgMHhiZDMwLCAwLCB7MHgwNiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjNSwweDQxLDB4MDIsMHg3MCwweDIwLDB4ZGMsMHgxMCB9fSwKKyB7MTYsIDB4YmQ0MCwgMCwgezB4NjcsMHgwNCwweDBkLDB4YzEsMHgwMiwweDcwLDB4MjAsMHg5YywweDEwLDB4MzcsMHgwNCwweDBkLDB4YzEsMHgwNiwweDcwLDB4NDAgfX0sCisgezE2LCAweGJkNTAsIDAsIHsweDRjLDB4MTAsMHgzNywweDE0LDB4MTUsMHhjMSwweDAzLDB4NzAsMHg0MCwweGRjLDB4MTAsMHgxMywweDA0LDB4MGQsMHhjMSwweDA3IH19LAorIHsxNiwgMHhiZDYwLCAwLCB7MHg3MCwweDQwLDB4ZGMsMHgxMCwweDM3LDB4MDQsMHgwZCwweGMwLDB4MzEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmQ3MCwgMCwgezB4MDAsMHhjNSwweDQ0LDB4MDUsMHg3MSwweDIxLDB4NWMsMHg0MCwweDU3LDB4MTAsMHgxNSwweGM0LDB4MDUsMHg3MSwweDA1LDB4NWMgfX0sCisgezE2LCAweGJkODAsIDAsIHsweDQwLDB4NTcsMHgxMCwweDE1LDB4YzQsMHgwNiwweDcxLDB4MDEsMHg0YywweDQwLDB4NTcsMHgxMCwweDBkLDB4YzQsMHgwNSwweDcxIH19LAorIHsxNiwgMHhiZDkwLCAwLCB7MHgwNSwweDVjLDB4NDAsMHg1MywweDEwLDB4MTUsMHhjNCwweDA3LDB4NzEsMHgwMSwweDVjLDB4NDAsMHg1NywweDEwLDB4MTUsMHhjMCB9fSwKKyB7MTYsIDB4YmRhMCwgMCwgezB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjAgfX0sCisgezE2LCAweGJkYjAsIDAsIHsweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwIH19LAorIHsxNiwgMHhiZGMwLCAwLCB7MHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSB9fSwKKyB7MTYsIDB4YmRkMCwgMCwgezB4MjAsMHg4MCwweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJkZTAsIDAsIHsweDAwLDB4ODQsMHgwMCwweDAxLDB4NjAsMHgwMCwweDU4LDB4MDAsMHg1NiwweDAwLDB4MDUsMHg4MCwweDAxLDB4NjAsMHgwNCwweDU4IH19LAorIHsxNiwgMHhiZGYwLCAwLCB7MHgwMCwweDE2LDB4MDAsMHgwNSwweDgwLDB4MDEsMHgyMCwweDAxLDB4NTgsMHgwMCwweDE2LDB4MDAsMHgwNSwweDgwLDB4MDEsMHg2MCB9fSwKKyB7MTYsIDB4YmUwMCwgMCwgezB4MDAsMHg1OCwweDAwLDB4NTYsMHgwMCwweDA1LDB4ODAsMHgwMSwweDYwLDB4MDAsMHg1OCwweDAwLDB4MTYsMHgwMCwweDAxLDB4ODAgfX0sCisgezE2LCAweGJlMTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDgsMHgwNSwweDcyLDB4MTEsMHg1YywweDgwIH19LAorIHsxNiwgMHhiZTIwLCAwLCB7MHgxNywweDIwLDB4MTUsMHhkOCwweDA1LDB4MzIsMHgxMSwweDFjLDB4ODAsMHg0NywweDIwLDB4MTQsMHg4OCwweDAwLDB4NzIsMHgwMSB9fSwKKyB7MTYsIDB4YmUzMCwgMCwgezB4MWMsMHg4MCwweDU3LDB4MjAsMHgwNSwweGM4LDB4MDQsMHg3MiwweDAxLDB4NWMsMHg4MCwweDU3LDB4MjAsMHgxNSwweGM4LDB4MDEgfX0sCisgezE2LCAweGJlNDAsIDAsIHsweDcyLDB4MDEsMHg1YywweDgwLDB4NTcsMHgyNCwweDE1LDB4YzAsMHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiZTUwLCAwLCB7MHgwMCwweGMxLDB4NDAsMHgwMCwweDYwLDB4MDAsMHgxOCwweDAwLDB4MDYsMHgwMCwweDAxLDB4ODAsMHg0MCwweDIwLDB4MDAsMHgxOCB9fSwKKyB7MTYsIDB4YmU2MCwgMCwgezB4MDAsMHgwNiwweDAwLDB4MDEsMHg5MCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MDAsMHgwNiwweDAwLDB4NDEsMHg4MCwweDAwLDB4NjAgfX0sCisgezE2LCAweGJlNzAsIDAsIHsweDAwLDB4MTgsMHgwMCwweDA2LDB4MDAsMHgwMSwweDgwLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgxMCwweDA2LDB4MDAsMHgwMSwweDgwIH19LAorIHsxNiwgMHhiZTgwLCAwLCB7MHgzMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjNSwweDQ4LDB4MDQsMHgyMiwweDAxLDB4MDgsMHg4MCB9fSwKKyB7MTYsIDB4YmU5MCwgMCwgezB4MDIsMHgyMCwweDEwLDB4ODgsMHgwNCwweDYyLDB4MDEsMHgwOCwweDgwLDB4NDIsMHgyMCwweDEwLDB4ODgsMHgwMCwweDIwLDB4MDEgfX0sCisgezE2LCAweGJlYTAsIDAsIHsweDA4LDB4ODAsMHg0MiwweDIwLDB4MDAsMHg4OCwweDA0LDB4MjIsMHgwMSwweDA4LDB4MDAsMHg0MiwweDIwLDB4MTAsMHg4OCwweDAwIH19LAorIHsxNiwgMHhiZWIwLCAwLCB7MHgyMiwweDAxLDB4MDgsMHg4MCwweDQyLDB4MzAsMHgxMCwweDgwLDB4MzEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmVjMCwgMCwgezB4MDAsMHhjNSwweDRhLDB4MDUsMHg0MiwweDgxLDB4NTAsMHhhMCwweDA0LDB4MjgsMHgxNSwweDBhLDB4MDUsMHg1MiwweDgxLDB4MTAgfX0sCisgezE2LCAweGJlZDAsIDAsIHsweGEwLDB4NDQsMHgyOCwweDExLDB4MWEsMHgwMCwweDQwLDB4ODAsMHgxMCwweGEwLDB4NTQsMHgyOCwweDA1LDB4MGEsMHgwNSwweDQyIH19LAorIHsxNiwgMHhiZWUwLCAwLCB7MHg4MSwweDUxLDB4MjAsMHgxNCwweDI4LDB4MTUsMHgwYSwweDAxLDB4NDIsMHg4MSwweDUwLDB4YTAsMHg1NCwweDI4LDB4MTUsMHgwMCB9fSwKKyB7MTYsIDB4YmVmMCwgMCwgezB4MzEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwYywweDAxLDB4NTMsMHg0MCwweDU0LDB4YzAgfX0sCisgezE2LCAweGJmMDAsIDAsIHsweDE1LDB4MzAsMHgwNSwweDVjLDB4MDEsMHg1NywweDQwLDB4NTQsMHhjMCwweDE1LDB4MzAsMHgwNSwweDVjLDB4MDEsMHg1MywweDAwIH19LAorIHsxNiwgMHhiZjEwLCAwLCB7MHg1NSwweGMwLDB4MTUsMHg3NCwweDA1LDB4NGMsMHgwMSwweDUzLDB4MDAsMHg1NSwweGMwLDB4MTUsMHg3NCwweDA1LDB4NGMsMHgwMSB9fSwKKyB7MTYsIDB4YmYyMCwgMCwgezB4NTMsMHgwMCwweDU0LDB4YzAsMHgxMSwweDMwLDB4MDEsMHg0MCwweDIxLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJmMzAsIDAsIHsweDAwLDB4ODAsMHgwMCwweDAwLDB4NDAsMHgwMCwweDEwLDB4MDAsMHgwNCwweDAwLDB4MDEsMHgwMCwweDAwLDB4NDAsMHgwMCwweDEwIH19LAorIHsxNiwgMHhiZjQwLCAwLCB7MHgwMCwweDA0LDB4MDAsMHgwMSwweDAwLDB4MDAsMHg0MiwweDAwLDB4MTAsMHgwMCwweDA0LDB4MDAsMHgxMSwweDAwLDB4MDAsMHg0MCB9fSwKKyB7MTYsIDB4YmY1MCwgMCwgezB4MDAsMHgxMCwweGMxLDB4MDQsMHgwMCwweDAxLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgxMCwweDAwLDB4MDEsMHgxMCwweDAxLDB4MDEgfX0sCisgezE2LCAweGJmNjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NjAsMHgwMiwweDA4LDB4MDAsMHg4MiwweDAwIH19LAorIHsxNiwgMHhiZjcwLCAwLCB7MHgyMCwweDgwLDB4MDgsMHgyMCwweDAyLDB4MDgsMHgwMCwweDgyLDB4MDAsMHgyMCwweDgwLDB4MDgsMHgyMCwweDAyLDB4MDgsMHgwMCB9fSwKKyB7MTYsIDB4YmY4MCwgMCwgezB4ODIsMHgwMCwweDIwLDB4ODQsMHgwMCwweDIwLDB4MDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODQsMHgwOCwweDIwLDB4MDIgfX0sCisgezE2LCAweGJmOTAsIDAsIHsweDA4LDB4MDAsMHg4MiwweDAwLDB4MjEsMHg4MCwweDA4LDB4MDEsMHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiZmEwLCAwLCB7MHgwMCwweGM1LDB4NDAsMHgwNSwweDYwLDB4MDEsMHg1OCwweDAwLDB4OTYsMHgwMCwweDE1LDB4OTAsMHgwNSwweDY0LDB4MDIsMHg1OCB9fSwKKyB7MTYsIDB4YmZiMCwgMCwgezB4MDAsMHg1NiwweDAwLDB4NTUsMHg5MCwweDA1LDB4NjAsMHgwMSwweGQ5LDB4MDAsMHgxNiwweDQwLDB4MTUsMHg4MCwweDA1LDB4NjAgfX0sCisgezE2LCAweGJmYzAsIDAsIHsweDAxLDB4NTksMHgwMCwweDc2LDB4NDAsMHgxNSwweDgwLDB4MDUsMHg2MCwweDAxLDB4NTgsMHgwMCwweDU2LDB4MDAsMHgxNSwweDgwIH19LAorIHsxNiwgMHhiZmQwLCAwLCB7MHgzMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjNCwweDQwLDB4MDMsMHg2MCwweDAwLDB4ZDgsMHgwMCB9fSwKKyB7MTYsIDB4YmZlMCwgMCwgezB4MzYsMHgwMCwweDRkLDB4ODAsMHgwMywweDYwLDB4MDAsMHhkOCwweDAwLDB4MzYsMHgwMCwweDBkLDB4ODAsMHgwNywweDYyLDB4MDAgfX0sCisgezE2LCAweGJmZjAsIDAsIHsweDU4LDB4MDAsMHgzNiwweDAwLDB4MGQsMHg4MCwweDA3LDB4NjAsMHgwMCwweGQ4LDB4ODAsMHgxNiwweDAwLDB4MGQsMHg4MCwweDAzIH19LAorIHsxNiwgMHhjMDAwLCAwLCB7MHg2MCwweDAwLDB4ZDgsMHgwMCwweDM2LDB4MDAsMHgxZCwweDgwLDB4MzEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzAxMCwgMCwgezB4MDAsMHhjNSwweDQyLDB4MDQsMHgzMCwweDgxLDB4MGMsMHgyMCwweDQzLDB4MDgsMHgxMCwweGMyLDB4MDQsMHgzMCwweDgxLDB4MGMgfX0sCisgezE2LCAweGMwMjAsIDAsIHsweDIwLDB4NDMsMHgwOCwweDEwLDB4YzIsMHgwNCwweDMwLDB4YzEsMHgwYywweDIwLDB4NDMsMHgwOCwweDEwLDB4YzIsMHgwNiwweDMwIH19LAorIHsxNiwgMHhjMDMwLCAwLCB7MHg4MSwweDBjLDB4MjAsMHg0MywweDA4LDB4MTAsMHhjMiwweDA0LDB4MzAsMHg4MSwweDBjLDB4MjAsMHg0MywweDA4LDB4MTgsMHhjMCB9fSwKKyB7MTYsIDB4YzA0MCwgMCwgezB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDBjLDB4MDAgfX0sCisgezE2LCAweGMwNTAsIDAsIHsweDAzLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgzMCwweDAwLDB4MGMsMHgwMCwweDAzLDB4MDAsMHgwMCwweGMwLDB4NDAsMHgzMCwweDAwIH19LAorIHsxNiwgMHhjMDYwLCAwLCB7MHgwYywweDAwLDB4MDMsMHgwMCwweDAwLDB4YzAsMHgwMCwweDMwLDB4MDAsMHgwYywweDAwLDB4MDMsMHgwMCwweDAwLDB4YzAsMHgwMCB9fSwKKyB7MTYsIDB4YzA3MCwgMCwgezB4MzAsMHgwMCwweDBjLDB4MDAsMHgwMywweDAwLDB4MDAsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMwODAsIDAsIHsweDAwLDB4ODAsMHgwMiwweDAxLDB4MzAsMHg4MCwweDRjLDB4MjAsMHgxMywweDA4LDB4MDQsMHhjMiwweDAxLDB4MzAsMHg4MCwweDRjIH19LAorIHsxNiwgMHhjMDkwLCAwLCB7MHgyMCwweDEzLDB4MDgsMHgwNCwweGMyLDB4MjUsMHgzMCwweDgxLDB4NGMsMHgyMCwweDEzLDB4MDgsMHgwNCwweGMyLDB4MDEsMHgzMCB9fSwKKyB7MTYsIDB4YzBhMCwgMCwgezB4ODAsMHg0YywweDMyLDB4NTMsMHgwOCwweDA0LDB4YzIsMHgwMSwweDMwLDB4ODAsMHg0YywweDIwLDB4MTMsMHgwOCwweDA0LDB4YzAgfX0sCisgezE2LCAweGMwYjAsIDAsIHsweDIwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDIsMHgwNSwweDYyLDB4ODEsMHg1OCwweDIwIH19LAorIHsxNiwgMHhjMGMwLCAwLCB7MHg1NiwweDA4LDB4MTUsMHg4MiwweDA0LDB4NjAsMHg4MSwweDU4LDB4MjAsMHg0NiwweDA4LDB4MTUsMHg4MiwweDAxLDB4NjAsMHhjMSB9fSwKKyB7MTYsIDB4YzBkMCwgMCwgezB4NTgsMHgyMCwweDQ2LDB4MDgsMHgxNSwweDgyLDB4MDEsMHg2MCwweDgxLDB4NTgsMHgzMCwweDU2LDB4MDgsMHgxNSwweDgyLDB4MDUgfX0sCisgezE2LCAweGMwZTAsIDAsIHsweDYwLDB4ODEsMHg1OCwweDIwLDB4NTYsMHgwOCwweDA1LDB4ODAsMHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMGYwLCAwLCB7MHgwMCwweGM1LDB4NDIsMHgwMCwweDIwLDB4ODAsMHgwOCwweDIwLDB4MDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgwOCB9fSwKKyB7MTYsIDB4YzEwMCwgMCwgezB4MjAsMHgwMiwweDA4LDB4MDAsMHg4MiwweDAwLDB4MjAsMHg4MCwweDBjLDB4MjAsMHgwMiwweDA4LDB4MDAsMHg4MiwweDAwLDB4MjAgfX0sCisgezE2LCAweGMxMTAsIDAsIHsweDgwLDB4MDgsMHgyMCwweDAzLDB4MDgsMHgwMCwweDgyLDB4MDAsMHgyMCwweDgwLDB4MDgsMHgyMCwweDAyLDB4MDgsMHgwMCwweDgwIH19LAorIHsxNiwgMHhjMTIwLCAwLCB7MHgyMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjNSwweDQyLDB4MDQsMHg2NiwweDgxLDB4MTgsMHgyMCB9fSwKKyB7MTYsIDB4YzEzMCwgMCwgezB4NDYsMHgwOCwweDExLDB4ODIsMHgwNCwweDY0LDB4ODEsMHgxOCwweDIwLDB4NDYsMHgwOCwweDExLDB4ODIsMHgwMCwweDYwLDB4ODEgfX0sCisgezE2LCAweGMxNDAsIDAsIHsweDBjLDB4MjAsMHg0NiwweDA4LDB4MTEsMHg4MiwweDAwLDB4NjAsMHg4MSwweDE5LDB4MjAsMHg0MywweDA4LDB4MTEsMHg4MiwweDA0IH19LAorIHsxNiwgMHhjMTUwLCAwLCB7MHg2MCwweDgxLDB4MTksMHgyMCwweDQ2LDB4NDgsMHgwMSwweDgwLDB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzE2MCwgMCwgezB4MDAsMHhjNSwweDYwLDB4MDUsMHg1OCwweDAxLDB4NTYsMHgwMCwweDU1LDB4ODAsMHgxNSwweDYwLDB4MDQsMHg1OCwweDAxLDB4NTYgfX0sCisgezE2LCAweGMxNzAsIDAsIHsweDAwLDB4NDUsMHg4MCwweDExLDB4NjAsMHgwMCwweDU4LDB4MDAsMHgwNiwweDAwLDB4NDUsMHg4MCwweDE1LDB4NjAsMHgwMSwweDU4IH19LAorIHsxNiwgMHhjMTgwLCAwLCB7MHgwMSwweDE2LDB4MDAsMHgwMSwweDgwLDB4MTUsMHg2MCwweDA1LDB4NTgsMHgwMSwweDU2LDB4MDAsMHg1NSwweDgwLDB4MDUsMHg0MCB9fSwKKyB7MTYsIDB4YzE5MCwgMCwgezB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNiwweDAxLDB4NDksMHg4MCwweDEwLDB4NjAgfX0sCisgezE2LCAweGMxYTAsIDAsIHsweDE0LDB4MTgsMHgwNSwweDA2LDB4MDEsMHg3OSwweDgwLDB4NTAsMHg2MCwweDE0LDB4MTgsMHgwMSwweDA2LDB4MDEsMHg0MSwweDgwIH19LAorIHsxNiwgMHhjMWIwLCAwLCB7MHg1MCwweDYwLDB4MDQsMHgxOCwweDA1LDB4MDYsMHgwMSwweDQxLDB4ODAsMHgxMCwweDYwLDB4MTQsMHgxOCwweDA1LDB4MDYsMHgwMSB9fSwKKyB7MTYsIDB4YzFjMCwgMCwgezB4NDEsMHg4MCwweDUwLDB4NjAsMHgxNCwweDE4LDB4MDUsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMxZDAsIDAsIHsweDAwLDB4ODAsMHgwMiwweDAxLDB4MDQsMHg4MCwweDQwLDB4MjAsMHgxMCwweDA4LDB4MDQsMHgwMiwweDAwLDB4MDQsMHgwNCwweDQwIH19LAorIHsxNiwgMHhjMWUwLCAwLCB7MHgyMCwweDEwLDB4MDgsMHgwNCwweDAyLDB4MDEsMHgwMCwweDg0LDB4NDAsMHgyMCwweDEwLDB4MDgsMHgwNCwweDAyLDB4MDEsMHgwMCB9fSwKKyB7MTYsIDB4YzFmMCwgMCwgezB4ODAsMHg0MSwweDIwLDB4MTAsMHgwOCwweDA0LDB4MDIsMHgxMSwweDAwLDB4ODAsMHg0MSwweDIwLDB4MTAsMHg0OCwweDA0LDB4MDAgfX0sCisgezE2LCAweGMyMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDYsMHgwMywweDUxLDB4ODAsMHhkNCwweDYwIH19LAorIHsxNiwgMHhjMjEwLCAwLCB7MHgzNSwweDE4LDB4MGQsMHg0NiwweDAyLDB4MTEsMHg4MCwweGQ0LDB4NjAsMHgzNSwweDE4LDB4MGQsMHg0NiwweDAzLDB4MTEsMHg4MCB9fSwKKyB7MTYsIDB4YzIyMCwgMCwgezB4ZDQsMHg2MCwweDM1LDB4MTgsMHgwZCwweDQ2LDB4MDMsMHg1MSwweDgwLDB4ZDQsMHg2MCwweDM1LDB4MTgsMHgwZCwweDQ2LDB4MDMgfX0sCisgezE2LCAweGMyMzAsIDAsIHsweDUxLDB4ODAsMHhkNCwweDYwLDB4MzUsMHgxOCwweDBkLDB4NDAsMHgzMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMjQwLCAwLCB7MHgwMCwweGM1LDB4NDYsMHgwNSwweDcwLDB4ODEsMHg1YywweDYwLDB4MDcsMHgxOCwweDE1LDB4YzYsMHgwNCwweDcxLDB4ODEsMHgxYyB9fSwKKyB7MTYsIDB4YzI1MCwgMCwgezB4NjAsMHgxNywweDE4LDB4MTUsMHhjNiwweDA1LDB4MzEsMHg4MSwweGRjLDB4NjAsMHg1NywweDE4LDB4MTUsMHhjNiwweDA1LDB4NzEgfX0sCisgezE2LCAweGMyNjAsIDAsIHsweDgwLDB4MWMsMHg2MCwweDc3LDB4MTgsMHgxNSwweGNlLDB4MDUsMHg3MSwweDgxLDB4NWMsMHg2MCwweDU3LDB4MTgsMHgxNSwweGMwIH19LAorIHsxNiwgMHhjMjcwLCAwLCB7MHgxMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDQ2LDB4MDIsMHg3MSwweDgwLDB4OWMsMHg2MSB9fSwKKyB7MTYsIDB4YzI4MCwgMCwgezB4NzcsMHgxOCwweDBkLDB4YzYsMHgwMiwweDcxLDB4ODAsMHg5YywweDYwLDB4MzcsMHgxOCwweDBkLDB4YzIsMHgwMywweDMxLDB4ODAgfX0sCisgezE2LCAweGMyOTAsIDAsIHsweDVjLDB4NjAsMHgyNywweDE4LDB4MGQsMHhjNiwweDAzLDB4NzEsMHg4MCwweDljLDB4NjAsMHgxNywweDE4LDB4MGQsMHhjZSwweDAzIH19LAorIHsxNiwgMHhjMmEwLCAwLCB7MHg3MSwweDgwLDB4ZGMsMHg2MCwweDM3LDB4MTgsMHgwZCwweGMwLDB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzJiMCwgMCwgezB4MDAsMHg0NSwweDQ2LDB4MDUsMHg3NSwweDgxLDB4NWMsMHg2MCwweDc3LDB4MTgsMHgxNSwweGM2LDB4MDUsMHg3NSwweDgxLDB4NWMgfX0sCisgezE2LCAweGMyYzAsIDAsIHsweDYwLDB4NTcsMHgxOCwweDE1LDB4YzYsMHgwNSwweDMxLDB4ODEsMHgwYywweDYwLDB4NTcsMHgxOCwweDE1LDB4YzYsMHgwNSwweDcxIH19LAorIHsxNiwgMHhjMmQwLCAwLCB7MHg4MSwweDVjLDB4NjAsMHg0MywweDE4LDB4MTUsMHhjNiwweDA1LDB4NzEsMHg4MSwweDVjLDB4NjAsMHg1NywweDE4LDB4MTUsMHhjMCB9fSwKKyB7MTYsIDB4YzJlMCwgMCwgezB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjAgfX0sCisgezE2LCAweGMyZjAsIDAsIHsweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwIH19LAorIHsxNiwgMHhjMzAwLCAwLCB7MHg1YywweDIwLDB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDAwLDB4MTcsMHgwOCwweDA0LDB4ODIsMHgwMSB9fSwKKyB7MTYsIDB4YzMxMCwgMCwgezB4MjAsMHg4MCwweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMzMjAsIDAsIHsweDAwLDB4MDAsMHgwNiwweDAxLDB4NjMsMHg4MCwweDU4LDB4NjAsMHgxNiwweDE4LDB4MDUsMHg4NiwweDAxLDB4NjEsMHg4MCwweDU4IH19LAorIHsxNiwgMHhjMzMwLCAwLCB7MHg2MCwweDE2LDB4MTgsMHgwNSwweDg2LDB4MDEsMHg2MSwweDgxLDB4NTgsMHg2MCwweDE2LDB4MTgsMHgwNSwweDg2LDB4MDEsMHg2MSB9fSwKKyB7MTYsIDB4YzM0MCwgMCwgezB4ODAsMHg1OCwweDYwLDB4NTYsMHgxOCwweDA1LDB4ODYsMHgwMSwweDYxLDB4ODAsMHg1OCwweDYwLDB4MTYsMHgxOCwweDA1LDB4ODAgfX0sCisgezE2LCAweGMzNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ1LDB4NDAsMHgwNSwweDcwLDB4MDEsMHg1YywweDAwIH19LAorIHsxNiwgMHhjMzYwLCAwLCB7MHgxNywweDAwLDB4MTUsMHhjMCwweDg1LDB4NzQsMHgwMSwweDFjLDB4MDAsMHg0NywweDAwLDB4MTEsMHhjMCwweDA1LDB4NzAsMHgwMSB9fSwKKyB7MTYsIDB4YzM3MCwgMCwgezB4NWMsMHgwMCwweDUzLDB4MDAsMHgxMCwweGMwLDB4MDUsMHg3MCwweDAxLDB4NWMsMHgwMCwweDU3LDB4MDAsMHgxNCwweGM5LDB4MDQgfX0sCisgezE2LCAweGMzODAsIDAsIHsweDcwLDB4MDEsMHgxYywweDAwLDB4NTcsMHgwMCwweDE1LDB4YzAsMHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMzkwLCAwLCB7MHgwMCwweDQ1LDB4NDIsMHgwMCwweDYwLDB4YzAsMHgxOCwweDIwLDB4MDYsMHgwOCwweDAxLDB4ODIsMHgwMCwweDYwLDB4ODAsMHgxOCB9fSwKKyB7MTYsIDB4YzNhMCwgMCwgezB4MjAsMHgwNiwweDA4LDB4MDEsMHg4MiwweDAwLDB4MjAsMHg4MCwweDE4LDB4MzAsMHgwMiwweDA4LDB4MDAsMHg4MiwweDEwLDB4NjAgfX0sCisgezE2LCAweGMzYjAsIDAsIHsweDgwLDB4MTgsMHgyMCwweDA2LDB4MDgsMHgwMCwweDgyLDB4MDAsMHg2MCwweDgwLDB4MTgsMHgyMCwweDA2LDB4MDgsMHgwMSwweDgwIH19LAorIHsxNiwgMHhjM2MwLCAwLCB7MHgxMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0NCwweDQyLDB4MDQsMHgyMCwweDgxLDB4MDgsMHgyMCB9fSwKKyB7MTYsIDB4YzNkMCwgMCwgezB4MDIsMHgwOCwweDEwLDB4ODIsMHgwNCwweDIwLDB4ODEsMHgwOCwweDIwLDB4NDIsMHgwOCwweDEwLDB4ODIsMHgwNCwweDIwLDB4ODEgfX0sCisgezE2LCAweGMzZTAsIDAsIHsweDA4LDB4MjAsMHg0NiwweDA4LDB4MTEsMHg4MiwweDA0LDB4MjAsMHg4MSwweDA4LDB4MjAsMHg0MiwweDA4LDB4MTEsMHg4MiwweDA0IH19LAorIHsxNiwgMHhjM2YwLCAwLCB7MHgyMCwweDgxLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMCwweDgwLDB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzQwMCwgMCwgezB4MDAsMHg0NSwweDQyLDB4MDUsMHg0MCwweGM1LDB4NTAsMHgyMCwweDE0LDB4MDgsMHgxNSwweDAwLDB4MDQsMHg0MCwweDgxLDB4NTAgfX0sCisgezE2LCAweGM0MTAsIDAsIHsweDIwLDB4NTQsMHgwOCwweDExLDB4MDIsMHgwNSwweDAwLDB4ODAsMHgxMCwweDIwLDB4NDUsMHgwYywweDExLDB4NDIsMHgwNCwweDQwIH19LAorIHsxNiwgMHhjNDIwLCAwLCB7MHg4MSwweDUwLDB4MjAsMHgxNCwweDBjLDB4MTUsMHg0MiwweDA0LDB4NDAsMHg4MSwweDEwLDB4MjAsMHg1NCwweDA4LDB4MTUsMHgwMCB9fSwKKyB7MTYsIDB4YzQzMCwgMCwgezB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMywweDAxLDB4NTAsMHhjMCwweDQ0LDB4MzAgfX0sCisgezE2LCAweGM0NDAsIDAsIHsweDE1LDB4MGMsMHgwNSwweDQzLDB4MDEsMHg1MCwweGMwLDB4NGMsMHgzMCwweDE1LDB4MGMsMHgwNSwweDQzLDB4MjEsMHg1MCwweGMwIH19LAorIHsxNiwgMHhjNDUwLCAwLCB7MHg1NCwweDMwLDB4MTUsMHgwYywweDA1LDB4NDMsMHgwMSwweDUwLDB4YzAsMHg1NCwweDMwLDB4MTUsMHgwYywweDA1LDB4NDMsMHgwMSB9fSwKKyB7MTYsIDB4YzQ2MCwgMCwgezB4NTAsMHhjMCwweDU0LDB4MjAsMHgxNSwweDBjLDB4MDUsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM0NzAsIDAsIHsweDAwLDB4MDAsMHgwOCwweDAwLDB4NDIsMHgwMCwweDA0LDB4ODAsMHgwNCwweDIwLDB4MDEsMHgwOCwweDAwLDB4NDIsMHgwMCwweDA0IH19LAorIHsxNiwgMHhjNDgwLCAwLCB7MHg4MCwweDA0LDB4MjAsMHgwMSwweDA4LDB4MDAsMHgwMiwweDAwLDB4MTAsMHgwMCwweDA0LDB4MDAsMHgwMSwweDA4LDB4MDAsMHg0MiB9fSwKKyB7MTYsIDB4YzQ5MCwgMCwgezB4MDAsMHgxMCwweDgwLDB4MDQsMHgwMCwweDAxLDB4MDgsMHgwMCwweDQyLDB4MDAsMHgxMCwweDgwLDB4MDQsMHgyMCwweDAxLDB4MDAgfX0sCisgezE2LCAweGM0YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ1LDB4NDIsMHgwMiwweDAwLDB4ODAsMHg4NCwweDIwIH19LAorIHsxNiwgMHhjNGIwLCAwLCB7MHgyMCwweDA4LDB4MDgsMHgwMiwweDAyLDB4MDAsMHg4MCwweDg0LDB4MjAsMHgyMCwweDA4LDB4MDgsMHgwMiwweDAyLDB4MDAsMHg4MCB9fSwKKyB7MTYsIDB4YzRjMCwgMCwgezB4ODAsMHhhMCwweDIwLDB4MjgsMHgwOCwweDAyLDB4MDIsMHgwMCwweDgwLDB4ODAsMHgyMCwweDIwLDB4MjgsMHgwOCwweDAyLDB4MDIgfX0sCisgezE2LCAweGM0ZDAsIDAsIHsweDAwLDB4ODAsMHg4MCwweDIwLDB4MjAsMHgwOCwweDA4LDB4MDAsMHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNGUwLCAwLCB7MHgwMCwweDQ1LDB4NDAsMHgwNSwweDYwLDB4NDEsMHg1OCwweDAwLDB4NTYsMHgwMCwweDE1LDB4ODAsMHgwNSwweDYwLDB4MDEsMHg1OCB9fSwKKyB7MTYsIDB4YzRmMCwgMCwgezB4MDAsMHg1NiwweDAwLDB4MTUsMHg4MCwweDA1LDB4MjAsMHgwMSwweGQ4LDB4MDAsMHg1NiwweDAwLDB4MTUsMHg4MCwweDA1LDB4NjAgfX0sCisgezE2LCAweGM1MDAsIDAsIHsweDAxLDB4NTgsMHgwMCwweDc2LDB4MDAsMHgxNSwweDgwLDB4MDUsMHg2MCwweDAxLDB4NTgsMHgwMCwweDU2LDB4MDAsMHgxNSwweDgwIH19LAorIHsxNiwgMHhjNTEwLCAwLCB7MHgxMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjNSwweDQwLDB4MDMsMHg2MCwweDAwLDB4ZDgsMHgwMCB9fSwKKyB7MTYsIDB4YzUyMCwgMCwgezB4MjYsMHgwMCwweDBkLDB4ODAsMHgwMiwweDYwLDB4MDAsMHhkOCwweDAwLDB4MzYsMHgwMCwweDBkLDB4ODAsMHgwNywweDYwLDB4MDEgfX0sCisgezE2LCAweGM1MzAsIDAsIHsweDVjLDB4MDAsMHgzNiwweDAwLDB4MGQsMHg4MCwweDAzLDB4NjAsMHgwMCwweGQ4LDB4MDAsMHg1NywweDAwLDB4MGQsMHg4MCwweDAyIH19LAorIHsxNiwgMHhjNTQwLCAwLCB7MHg2MCwweDAwLDB4OTgsMHgwMCwweDM2LDB4MDAsMHgwZCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzU1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDQsMHgzMCwweDIxLDB4MGMsMHgwMCwweDQzLDB4MDAsMHgxMCwweGMwLDB4MDQsMHgzMCwweDAxLDB4MGMgfX0sCisgezE2LCAweGM1NjAsIDAsIHsweDAwLDB4NDMsMHgwMCwweDEwLDB4YzAsMHgwNCwweDMwLDB4MDEsMHgxOCwweDAwLDB4NDMsMHgwMCwweDEwLDB4YzAsMHgwNCwweDMwIH19LAorIHsxNiwgMHhjNTcwLCAwLCB7MHgwMSwweDBjLDB4MDAsMHg0NiwweDAwLDB4MTAsMHhjMCwweDA0LDB4MzAsMHgwMSwweDBjLDB4MDAsMHg0MywweDAwLDB4MTAsMHhjMCB9fSwKKyB7MTYsIDB4YzU4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDBjLDB4MDAgfX0sCisgezE2LCAweGM1OTAsIDAsIHsweDAzLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgzNSwweDA4LDB4MGMsMHgwMCwweDAzLDB4MDAsMHgwMCwweGM2LDB4MDAsMHgxNCwweDAwIH19LAorIHsxNiwgMHhjNWEwLCAwLCB7MHgwOCwweDAwLDB4MDMsMHg0MCwweDAwLDB4YzAsMHgwMCwweDMwLDB4MDAsMHgwZCwweDQwLDB4MDIsMHgwMCwweDAwLDB4YzAsMHgwMCB9fSwKKyB7MTYsIDB4YzViMCwgMCwgezB4MzAsMHgwMCwweDBjLDB4MDAsMHgwMywweDAwLDB4MDAsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM1YzAsIDAsIHsweDAwLDB4MDAsMHgwNSwweDAxLDB4MzEsMHg0MCwweDRjLDB4NTAsMHgxMywweDE0LDB4MDQsMHhjNSwweDAxLDB4MzEsMHhjMCwweDRjIH19LAorIHsxNiwgMHhjNWQwLCAwLCB7MHg1MCwweDEzLDB4MTQsMHgwNCwweGM1LDB4MDUsMHgzMSwweDQxLDB4NGMsMHg1MCwweDEzLDB4MTQsMHgwNCwweGM1LDB4MDEsMHgzMSB9fSwKKyB7MTYsIDB4YzVlMCwgMCwgezB4NDAsMHg0YywweDcwLDB4NTMsMHgxNCwweDA0LDB4YzUsMHgwMSwweDMxLDB4NDAsMHg0YywweDQwLDB4MTMsMHgxNCwweDA0LDB4YzAgfX0sCisgezE2LCAweGM1ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjMsMHgwNSwweDY4LDB4YzEsMHg1YSwweDMwIH19LAorIHsxNiwgMHhjNjAwLCAwLCB7MHg1NiwweDhjLDB4MTUsMHhhMywweDA1LDB4NjksMHhjMSwweDVhLDB4MzAsMHg0NiwweDhjLDB4MTEsMHhhNywweDAxLDB4NjgsMHhjMCB9fSwKKyB7MTYsIDB4YzYxMCwgMCwgezB4MWEsMHgzMCwweDU2LDB4OGMsMHgxMSwweGEzLDB4MDQsMHg2OCwweGMxLDB4MWEsMHgzMCwweDE2LDB4OGMsMHgxNSwweGEzLDB4MDQgfX0sCisgezE2LCAweGM2MjAsIDAsIHsweDY4LDB4YzEsMHg1YSwweDMwLDB4NTYsMHg4YywweDExLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNjMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgwMCwweDAwLDB4ODAsMHgwMCwweDI0LDB4MDAsMHgwOCB9fSwKKyB7MTYsIDB4YzY0MCwgMCwgezB4MDEsMHgwMiwweDAwLDB4MDAsMHg4MCwweDAwLDB4MjQsMHgwMCwweDA4LDB4ODAsMHgwMiwweDYwLDB4MDAsMHg4MCwweDAwLDB4MjAgfX0sCisgezE2LCAweGM2NTAsIDAsIHsweDAwLDB4MDksMHg0MCwweDAyLDB4MjAsMHgwMCwweDgwLDB4MDAsMHgyMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDgwIH19LAorIHsxNiwgMHhjNjYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4NDQsMHg2MiwweDExLDB4MTgsMHg4NCB9fSwKKyB7MTYsIDB4YzY3MCwgMCwgezB4NDYsMHgyMSwweDExLDB4ODgsMHg0NCwweDYyLDB4MDksMHgxOCwweDg0LDB4NDYsMHgyMSwweDExLDB4ODgsMHg2MCwweDYyLDB4MTAgfX0sCisgezE2LCAweGM2ODAsIDAsIHsweDE4LDB4MDQsMHg0NiwweDAxLDB4MTEsMHg4OCwweDQ0LDB4NjIsMHgxMSwweDE4LDB4ODAsMHgwNiwweDAxLDB4MTEsMHg4OCwweDQ0IH19LAorIHsxNiwgMHhjNjkwLCAwLCB7MHg2MiwweDExLDB4MTgsMHg4NCwweDQ2LDB4MjEsMHgxMSwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzZhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4NDUsMHg1MCwweDExLDB4NTQsMHgwNCwweDU1LDB4MDEsMHgxNSwweDQwLDB4NDQsMHg1MCwweDExLDB4NTQgfX0sCisgezE2LCAweGM2YjAsIDAsIHsweDA0LDB4NDUsMHgwMSwweDExLDB4NDAsMHg0MCwweDUwLDB4MTAsMHg1NCwweDA0LDB4NDUsMHgwMSwweDE1LDB4NDAsMHg0NCwweDUwIH19LAorIHsxNiwgMHhjNmMwLCAwLCB7MHgxMSwweDE0LDB4MDAsMHgxNSwweDAxLDB4MTUsMHg0MCwweDQ0LDB4NTAsMHgxMSwweDU0LDB4MDQsMHg1NSwweDAwLDB4MTEsMHg0MCB9fSwKKyB7MTYsIDB4YzZkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDIxLDB4NDIsMHgwOCwweDUwLDB4ODIgfX0sCisgezE2LCAweGM2ZTAsIDAsIHsweDE0LDB4MjAsMHg4NSwweDA4LDB4MjEsMHg0MiwweDAwLDB4NTAsMHg4MiwweDE0LDB4MjAsMHg4NSwweDA4LDB4MjAsMHg0MiwweDA4IH19LAorIHsxNiwgMHhjNmYwLCAwLCB7MHg1MCwweDgyLDB4MTUsMHgyMCwweDA1LDB4NDgsMHgyMSwweDQyLDB4MDgsMHg1MCwweDgyLDB4MTQsMHgyMCwweDgxLDB4NDAsMHgyMSB9fSwKKyB7MTYsIDB4YzcwMCwgMCwgezB4NDIsMHgwOCwweDUwLDB4ODIsMHgxNCwweDIwLDB4ODUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM3MTAsIDAsIHsweDAwLDB4MDAsMHgwYSwweDAxLDB4MDIsMHg4MCwweDQwLDB4YTAsMHgxMCwweDI4LDB4MDQsMHgwYSwweDAxLDB4MDIsMHg4NCwweDQwIH19LAorIHsxNiwgMHhjNzIwLCAwLCB7MHhhMSwweDEwLDB4MjgsMHgwNCwweDBhLDB4MDEsMHgwMiwweDgwLDB4NDAsMHhhMCwweDAwLDB4MjgsMHgwMCwweDBhLDB4MDEsMHgwMiB9fSwKKyB7MTYsIDB4YzczMCwgMCwgezB4ODAsMHg0MCwweGIwLDB4MTAsMHgyOCwweDAwLDB4MGEsMHgwMSwweDAyLDB4ODAsMHg0MCwweGEwLDB4MTAsMHgyOCwweDA0LDB4MDAgfX0sCisgezE2LCAweGM3NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGMsMHgwMywweDUzLDB4MDAsMHhkNCwweGMwIH19LAorIHsxNiwgMHhjNzUwLCAwLCB7MHgzNSwweDMwLDB4MGQsMHg0YywweDAzLDB4NTMsMHgwMCwweGQ0LDB4YzAsMHgzNSwweDMwLDB4MGQsMHg0YywweDAzLDB4NTMsMHgwMCB9fSwKKyB7MTYsIDB4Yzc2MCwgMCwgezB4ZDQsMHhjMCwweDIxLDB4MzAsMHgwOCwweDRjLDB4MDMsMHg1MywweDAwLDB4ZDQsMHhjMCwweDM1LDB4MzAsMHgwOCwweDRjLDB4MDMgfX0sCisgezE2LCAweGM3NzAsIDAsIHsweDUzLDB4MDAsMHhkNCwweGMwLDB4MzUsMHgzMCwweDBkLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNzgwLCAwLCB7MHgwMCwweDAwLDB4MDgsMHgwNCwweDcwLDB4MDEsMHg1YywweDgwLDB4MDcsMHgyMCwweDI1LDB4YzksMHgwNCwweDcyLDB4MDEsMHg1YyB9fSwKKyB7MTYsIDB4Yzc5MCwgMCwgezB4ODAsMHg0NywweDIwLDB4MTUsMHhjOCwweDAwLDB4NzIsMHgwNSwweGRjLDB4ODAsMHg1NywweDIwLDB4MTUsMHhjOCwweDA1LDB4NzIgfX0sCisgezE2LCAweGM3YTAsIDAsIHsweDAxLDB4MWMsMHg5MCwweDY3LDB4MjAsMHgxNSwweGM4LDB4MDUsMHg3MiwweDAxLDB4MWMsMHg4MCwweDU3LDB4MjAsMHgxNSwweGMwIH19LAorIHsxNiwgMHhjN2IwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIzLDB4MTgsMHg0OCwweGMyLDB4MTIsMHgzMSB9fSwKKyB7MTYsIDB4YzdjMCwgMCwgezB4ODQsMHg4YywweDYxLDB4MDMsMHgxOCwweDQwLDB4YzgsMHgxMiwweDMxLDB4ODQsMHg4YywweDYxLDB4MDMsMHgxOCwweDQ4LDB4YzQgfX0sCisgezE2LCAweGM3ZDAsIDAsIHsweDEwLDB4MzEsMHg4NCwweDBjLDB4NDEsMHgyMywweDE4LDB4NDgsMHhjNiwweDEwLDB4MzAsMHgwNCwweDBjLDB4NjEsMHgyMywweDE4IH19LAorIHsxNiwgMHhjN2UwLCAwLCB7MHg0OCwweGM2LDB4MTIsMHgzMCwweDg0LDB4OGMsMHgyMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzdmMCwgMCwgezB4MDAsMHgwMCwweDNmLDB4ZmYsMHg0ZiwweGZmLDB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhmZCwweDNmLDB4ZmYsMHg0ZiwweGZmLDB4ZDMgfX0sCisgezE2LCAweGM4MDAsIDAsIHsweGZmLDB4ZjQsMHhmZiwweGZkLDB4M2YsMHhmZiwweDRmLDB4ZmYsMHhkMywweGZmLDB4ZjQsMHhmZiwweGZkLDB4M2YsMHhmZiwweDRmIH19LAorIHsxNiwgMHhjODEwLCAwLCB7MHhmZiwweGQzLDB4ZmYsMHhmNCwweGZmLDB4ZmQsMHgzZiwweGZmLDB4NGYsMHhmZiwweGQzLDB4ZmYsMHhmNCwweGZmLDB4YmQsMHgwMCB9fSwKKyB7MTYsIDB4YzgyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM4MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjODQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Yzg1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM4NjAsIDAsIHsweDAwLDB4MDAsMHgyYywweGRiLDB4MGIsMHgzNiwweGMyLDB4Y2QsMHhiMCwweGIzLDB4NmMsMHgyYywweGRiLDB4MDksMHgzNiwweGMyIH19LAorIHsxNiwgMHhjODcwLCAwLCB7MHhjZCwweGIwLDB4YjMsMHg2YywweDJjLDB4ZGIsMHgwYiwweDM2LDB4YzIsMHhjZCwweGIwLDB4YjMsMHg2YywweDJjLDB4ZGIsMHgwYiB9fSwKKyB7MTYsIDB4Yzg4MCwgMCwgezB4MzYsMHhjMiwweGNkLDB4YjAsMHhiMywweDZjLDB4MmMsMHhkYiwweDBiLDB4MzYsMHhjMiwweGNkLDB4YjAsMHhiMywweDJjLDB4MDAgfX0sCisgezE2LCAweGM4OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzMsMHgzYywweDRjLDB4Y2YsMHgxMywweDMzIH19LAorIHsxNiwgMHhjOGEwLCAwLCB7MHhjNCwweGNjLDB4ZjEsMHgzMywweDNjLDB4NGQsMHg0ZSwweDkzLDB4MzMsMHhjNCwweGNjLDB4ZjEsMHgyYiwweDNjLDB4NGMsMHhjZiB9fSwKKyB7MTYsIDB4YzhiMCwgMCwgezB4MTMsMHgzMywweGM0LDB4Y2MsMHhlOSwweDMzLDB4M2MsMHg0YywweGNmLDB4MTIsMHhiNSwweGM0LDB4Y2MsMHhmMSwweDMzLDB4M2MgfX0sCisgezE2LCAweGM4YzAsIDAsIHsweDRjLDB4Y2YsMHgxMywweDMzLDB4YzQsMHhjZCwweDMxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjOGQwLCAwLCB7MHgwMCwweDAwLDB4M2IsMHg3ZSwweDRlLDB4YzcsMHg5MywweGI3LDB4ZTQsMHhlZCwweGY5LDB4MjMsMHg3ZSwweDRlLDB4NDcsMHg5MyB9fSwKKyB7MTYsIDB4YzhlMCwgMCwgezB4YjcsMHhlNCwweGVkLDB4ZjksMHgzZiwweDdlLDB4NGUsMHhkZSwweDEyLDB4MzcsMHhlNCwweDhkLDB4ZjksMHgzYiwweDdlLDB4NGUgfX0sCisgezE2LCAweGM4ZjAsIDAsIHsweGRmLDB4OTMsMHhmNywweDg0LDB4OGQsMHhmOSwweDNiLDB4N2UsMHg0ZSwweGRmLDB4OTMsMHhiMSwweGU0LDB4ZWQsMHhiOSwweDAwIH19LAorIHsxNiwgMHhjOTAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDIsMHg3MCwweDQwLDB4OWMsMHgxMSB9fSwKKyB7MTYsIDB4YzkxMCwgMCwgezB4NjcsMHgwNCwweDE5LDB4YzMsMHgwMiwweDcwLDB4NDAsMHg5YywweDEwLDB4MjcsMHgwNCwweDA5LDB4YzEsMHgwMiwweDcwLDB4NDAgfX0sCisgezE2LCAweGM5MjAsIDAsIHsweDFjLDB4MTAsMHgyNywweDE0LDB4MDEsMHhjMSwweDAyLDB4NzAsMHg0MCwweDljLDB4NTAsMHgwNywweDA0LDB4MDksMHhjMSwweDAyIH19LAorIHsxNiwgMHhjOTMwLCAwLCB7MHg3MCwweDQwLDB4OWMsMHgxMCwweDY3LDB4MTQsMHgxMSwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Yzk0MCwgMCwgezB4MDAsMHgwMCwweDA0LDB4MDUsMHg3MSwweDAxLDB4NWMsMHg0MCwweDU3LDB4MTAsMHgxNSwweGM0LDB4MDUsMHg3MSwweDAxLDB4NWMgfX0sCisgezE2LCAweGM5NTAsIDAsIHsweDQwLDB4NTcsMHgxMCwweDE1LDB4YzYsMHgwNSwweDcxLDB4MDEsMHg1YywweDQwLDB4NTcsMHgxMCwweDEwLDB4YzQsMHgwNSwweDcxIH19LAorIHsxNiwgMHhjOTYwLCAwLCB7MHgwMSwweDVjLDB4NjQsMHgwMywweDEwLDB4NTUsMHhjNCwweDA1LDB4NzEsMHgwMSwweDVjLDB4NDAsMHg1NywweDEwLDB4MTUsMHhjMCB9fSwKKyB7MTYsIDB4Yzk3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjAgfX0sCisgezE2LCAweGM5ODAsIDAsIHsweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMSwweDgwLDB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgwLDB4MDEsMHgyMCwweDgwIH19LAorIHsxNiwgMHhjOTkwLCAwLCB7MHg0OCwweDIwLDB4MTIsMHgwOCwweDA1LDB4YzIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDI0LDB4MTcsMHgwOCwweDA0LDB4ODIsMHgwMSB9fSwKKyB7MTYsIDB4YzlhMCwgMCwgezB4MjAsMHg4MCwweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM5YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MDAsMHg0NiwweDAwLDB4MTEsMHg4NCwweDAwLDB4NjAsMHgwMCwweDE4IH19LAorIHsxNiwgMHhjOWMwLCAwLCB7MHgwMCwweDA2LDB4MDAsMHgwMSwweDgwLDB4MDAsMHg2MCwweDAxLDB4MTgsMHgwMCwweDA2LDB4MTAsMHg5MSwweDgwLDB4MDAsMHg2MCB9fSwKKyB7MTYsIDB4YzlkMCwgMCwgezB4MDAsMHgxOCwweDQ2LDB4NDYsMHgxOCwweDAxLDB4ODAsMHgwMCwweDYwLDB4MDAsMHgxOCwweDAwLDB4MDYsMHgxMCwweDAxLDB4ODAgfX0sCisgezE2LCAweGM5ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNCwweDczLDB4MDEsMHgxYywweDgwIH19LAorIHsxNiwgMHhjOWYwLCAwLCB7MHgwNywweDIwLDB4MDEsMHhjOCwweDA0LDB4NzIsMHgwMSwweDFjLDB4ODAsMHg0NywweDIwLDB4MTEsMHhjOCwweDA0LDB4NzIsMHgwMSB9fSwKKyB7MTYsIDB4Y2EwMCwgMCwgezB4MWMsMHg4MCwweDQ3LDB4MjIsMHgxMSwweGM4LDB4MDQsMHg3MiwweDAxLDB4MWMsMHg4MCwweDA3LDB4MjAsMHgxMSwweGM4LDB4MDQgfX0sCisgezE2LCAweGNhMTAsIDAsIHsweDcyLDB4MDEsMHgxYywweDgwLDB4MDcsMHgyOCwweDExLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjYTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MDAsMHgxOCwweDAwLDB4MDYsMHgwMCwweDAxLDB4ODAsMHgwMCwweDYwLDB4MDAsMHgxOCB9fSwKKyB7MTYsIDB4Y2EzMCwgMCwgezB4MDAsMHgwNiwweDAwLDB4MDEsMHg4MCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MDAsMHgwNiwweDAwLDB4MDEsMHg4MCwweDAwLDB4NjAgfX0sCisgezE2LCAweGNhNDAsIDAsIHsweDAwLDB4MTgsMHgwMCwweDQ2LDB4MDQsMHgwMSwweDgwLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgwMCwweDA2LDB4MDAsMHgwMSwweDgwIH19LAorIHsxNiwgMHhjYTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4MDQsMHgyMiwweDAxLDB4MDgsMHg4MCB9fSwKKyB7MTYsIDB4Y2E2MCwgMCwgezB4MDIsMHgyMCwweDAwLDB4OTAsMHgwNCwweDI3LDB4ODEsMHgwOCwweDgwLDB4NDIsMHgyMCwweDEwLDB4OTgsMHgwNCwweDI0LDB4MDEgfX0sCisgezE2LCAweGNhNzAsIDAsIHsweDA4LDB4ODAsMHg0MiwweDQ4LDB4MTAsMHg4OCwweDA0LDB4MjIsMHgwMSwweDA5LDB4NDAsMHg0MiwweDYwLDB4MTAsMHg4OCwweDA0IH19LAorIHsxNiwgMHhjYTgwLCAwLCB7MHgyMiwweDAxLDB4MDgsMHhjMCwweDAyLDB4NDAsMHgxMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2E5MCwgMCwgezB4MDAsMHgwMCwweDJhLDB4MDQsMHg0YiwweDgxLDB4MTIsMHhhMCwweDA0LDB4YTgsMHgwMSwweDJhLDB4MDQsMHg0YSwweDgxLDB4MTIgfX0sCisgezE2LCAweGNhYTAsIDAsIHsweGEwLDB4NDQsMHhhOCwweDExLDB4MmEsMHgwNCwweDQ4LDB4ODAsMHgxMiwweGEwLDB4NDQsMHg4OCwweDAxLDB4MmEsMHgwNCwweDRhIH19LAorIHsxNiwgMHhjYWIwLCAwLCB7MHg4MSwweDEyLDB4MjAsMHgwNCwweGFjLDB4MTEsMHgyYSwweDA0LDB4NGEsMHg4MSwweDEyLDB4YjAsMHg0NCwweDljLDB4MTEsMHgwMCB9fSwKKyB7MTYsIDB4Y2FjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4YzAsMHgwYywweDAwLDB4NTMsMHgwMCwweDE0LDB4YzAgfX0sCisgezE2LCAweGNhZDAsIDAsIHsweDA1LDB4MzAsMHgwMSwweDQ0LDB4MDAsMHg1MywweDAwLDB4MTQsMHhjMCwweDA1LDB4MzAsMHgwNCwweDBjLDB4MDAsMHg1MywweDAwIH19LAorIHsxNiwgMHhjYWUwLCAwLCB7MHgxNCwweGMwLDB4MDUsMHhiMCwweDAxLDB4NGMsMHgwMCwweDUzLDB4MDAsMHgxNiwweGMwLDB4MDEsMHgzMCwweDAxLDB4NGMsMHgwMCB9fSwKKyB7MTYsIDB4Y2FmMCwgMCwgezB4NTMsMHgwMCwweDE0LDB4YzAsMHgwMSwweDM4LDB4MDAsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNiMDAsIDAsIHsweDA4LDB4YzAsMHgwMCwweDEwLDB4NDAsMHgwMCwweDEwLDB4MDAsMHgwNCwweDAwLDB4MDEsMHgxMCwweDAwLDB4NDQsMHg4MCwweDEwIH19LAorIHsxNiwgMHhjYjEwLCAwLCB7MHgwMCwweDA0LDB4MDAsMHgwMSwweDEwLDB4MDAsMHg0NiwweDAwLDB4MDAsMHgwMCwweDA0LDB4NjAsMHgwMSwweDAwLDB4MDAsMHg0MCB9fSwKKyB7MTYsIDB4Y2IyMCwgMCwgezB4MDAsMHgxMSwweDYwLDB4MDIsMHg0MCwweDAxLDB4MDAsMHgxMCwweDQwLDB4MDAsMHgxMCwweDYwLDB4MDEsMHg1MCwweDEwLDB4NDAgfX0sCisgezE2LCAweGNiMzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweGMwLDB4NDAsMHgwMiwweDAwLDB4MDAsMHg4MCwweDAwIH19LAorIHsxNiwgMHhjYjQwLCAwLCB7MHgyMCwweDAwLDB4MDgsMHgwOCwweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgyMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2I1MCwgMCwgezB4ODAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgwMCwweDAwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDIgfX0sCisgezE2LCAweGNiNjAsIDAsIHsweDAwLDB4MDAsMHg4MCwweDAwLDB4MjEsMHgwMCwweDA4LDB4NDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjYjcwLCAwLCB7MHgwOCwweGMwLDB4NDAsMHgwNCwweDYwLDB4MDEsMHgxOCwweDAwLDB4NDYsMHgwMCwweDExLDB4ODAsMHgwNCwweDYwLDB4MDEsMHgxOCB9fSwKKyB7MTYsIDB4Y2I4MCwgMCwgezB4MDAsMHg0NiwweDAwLDB4MTEsMHg4MCwweDA0LDB4NjAsMHgwMSwweGM4LDB4MDAsMHg0NiwweDAwLDB4MTksMHg4MCwweDAwLDB4NjAgfX0sCisgezE2LCAweGNiOTAsIDAsIHsweDAwLDB4MTgsMHgwMCwweDY2LDB4MDAsMHgxMSwweDgwLDB4MDQsMHg2MCwweDAxLDB4MTgsMHgwMCwweDA2LDB4MDAsMHgxMSwweDgwIH19LAorIHsxNiwgMHhjYmEwLCAwLCB7MHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwMSwweDAwLDB4MDIsMHg2MCwweDAwLDB4OTgsMHgwMCB9fSwKKyB7MTYsIDB4Y2JiMCwgMCwgezB4MjYsMHgwMCwweDA5LDB4ODEsMHgwMiwweDYwLDB4MDEsMHg5OCwweDAwLDB4MjYsMHgwMCwweDA5LDB4ODAsMHgwNiwweDYyLDB4MDAgfX0sCisgezE2LCAweGNiYzAsIDAsIHsweDQ4LDB4MDAsMHgyNiwweDIwLDB4MDEsMHhjMCwweDAyLDB4NjAsMHgwMSwweDk4LDB4MDAsMHgwNywweDAwLDB4MDksMHg4MCwweDAyIH19LAorIHsxNiwgMHhjYmQwLCAwLCB7MHg2MCwweDAwLDB4OTgsMHgwMCwweDI2LDB4MDAsMHgxMSwweDgyLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2JlMCwgMCwgezB4NDAsMHg0NSwweDQyLDB4MDQsMHgzMCwweDgxLDB4MGMsMHgyMCwweDQzLDB4MDgsMHgxMCwweGMyLDB4MDQsMHgzMCwweDg1LDB4OGMgfX0sCisgezE2LCAweGNiZjAsIDAsIHsweDIwLDB4NDMsMHgwOCwweDEwLDB4YzIsMHgwNCwweDMwLDB4ODEsMHgwYywweDIwLDB4NDMsMHg0OCwweDExLDB4ODIsMHgwNCwweDMwIH19LAorIHsxNiwgMHhjYzAwLCAwLCB7MHg4MSwweDhkLDB4MjAsMHg0NiwweDA4LDB4MTAsMHhjMiwweDA0LDB4MzAsMHg4MSwweDBjLDB4MjAsMHg0MywweDBjLDB4MTAsMHhjMCB9fSwKKyB7MTYsIDB4Y2MxMCwgMCwgezB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDQsMHgwMCwweDAwLDB4MzAsMHgwMCwweDBjLDB4MDAgfX0sCisgezE2LCAweGNjMjAsIDAsIHsweDAzLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgxMCwweDAwLDB4MGMsMHgwMCwweDAzLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgzMCwweDAwIH19LAorIHsxNiwgMHhjYzMwLCAwLCB7MHgwOCwweDAwLDB4MDMsMHgwMCwweDAwLDB4ODAsMHgwMCwweDMwLDB4MDAsMHgwYywweDgwLDB4MDIsMHgwMCwweDAwLDB4YzAsMHgwMCB9fSwKKyB7MTYsIDB4Y2M0MCwgMCwgezB4MzAsMHgwMCwweDBjLDB4MDAsMHgwMywweDIwLDB4MDAsMHhjMCwweDEwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNjNTAsIDAsIHsweDQwLDB4MDAsMHgwMiwweDAwLDB4MzAsMHg4MCwweDBjLDB4MjEsMHgwMywweDA4LDB4MDAsMHhjMiwweDAwLDB4MzAsMHg4MCwweDBjIH19LAorIHsxNiwgMHhjYzYwLCAwLCB7MHgyMCwweDAzLDB4MDgsMHgwMCwweGMyLDB4MDQsMHgzMCwweGMxLDB4MGMsMHgyMCwweDAzLDB4MGMsMHgxMCwweGMyLDB4MDAsMHgzMCB9fSwKKyB7MTYsIDB4Y2M3MCwgMCwgezB4ODAsMHgwYywweGIwLDB4NDMsMHgwOCwweDAwLDB4YzIsMHgwMCwweDMwLDB4ODAsMHgwYywweDIwLDB4MDMsMHgyOCwweDEwLDB4YzAgfX0sCisgezE2LCAweGNjODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQ1LDB4NDIsMHgwNCwweDYwLDB4ODEsMHgxOCwweDIwIH19LAorIHsxNiwgMHhjYzkwLCAwLCB7MHg0NiwweDA4LDB4MTEsMHg4MiwweDA0LDB4NjAsMHg4MCwweDE4LDB4MjAsMHg0NiwweDA4LDB4MTEsMHg4MiwweDAwLDB4NjAsMHg4MSB9fSwKKyB7MTYsIDB4Y2NhMCwgMCwgezB4MTgsMHgyMCwweDQ2LDB4MDgsMHgxMSwweDgyLDB4MDQsMHg2MCwweDgwLDB4MTgsMHgyMCwweDA2LDB4MDgsMHgxMSwweDgyLDB4MDQgfX0sCisgezE2LCAweGNjYjAsIDAsIHsweDYwLDB4ODEsMHgxOCwweDIwLDB4NDYsMHgwYywweDExLDB4YzAsMHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjY2MwLCAwLCB7MHg0MCwweDAxLDB4NDIsMHgwMCwweDIwLDB4ODAsMHgwOCwweDIwLDB4MDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgwOCB9fSwKKyB7MTYsIDB4Y2NkMCwgMCwgezB4MjAsMHgwMiwweDA4LDB4MDAsMHg4MiwweDAwLDB4MjAsMHg4MCwweDBjLDB4MjAsMHgwMiwweDA4LDB4MDAsMHhjMiwweDAwLDB4MjAgfX0sCisgezE2LCAweGNjZTAsIDAsIHsweDgwLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgwMCwweDgyLDB4MDAsMHgyMCwweDgwLDB4MDgsMHgyMCwweDAyLDB4MDgsMHgwMSwweDgwIH19LAorIHsxNiwgMHhjY2YwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NTAsMHgwMSwweDQyLDB4MDQsMHg2MCwweDgxLDB4MTgsMHgyMCB9fSwKKyB7MTYsIDB4Y2QwMCwgMCwgezB4NDYsMHgwOCwweDExLDB4ODIsMHgwNCwweDYwLDB4ODAsMHgxOCwweDIwLDB4NDYsMHgwOCwweDExLDB4ODIsMHgwMCwweDYwLDB4YzEgfX0sCisgezE2LCAweGNkMTAsIDAsIHsweDBjLDB4MjAsMHg0NiwweDBjLDB4MTAsMHhjMiwweDA0LDB4NjAsMHg4MCwweDE4LDB4MzAsMHg0MiwweDA4LDB4MTEsMHg4MiwweDA0IH19LAorIHsxNiwgMHhjZDIwLCAwLCB7MHg2MCwweDgxLDB4MTgsMHgyMCwweDQ2LDB4MDgsMHgxMCwweDgwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2QzMCwgMCwgezB4NDAsMHg0NSwweDQwLDB4MDQsMHg1MCwweDAxLDB4MTQsMHgwMCwweDQ1LDB4MDAsMHgxMSwweDQwLDB4MDQsMHg1MCwweDAwLDB4MTQgfX0sCisgezE2LCAweGNkNDAsIDAsIHsweDAwLDB4NDUsMHgwMCwweDExLDB4NDAsMHgwMCwweDUwLDB4MDAsMHgwNCwweDAwLDB4NDUsMHgwMCwweDAwLDB4NDAsMHgwNCwweDUwIH19LAorIHsxNiwgMHhjZDUwLCAwLCB7MHgwMCwweDE0LDB4MDAsMHgwMSwweDAwLDB4MTEsMHg0MCwweDA0LDB4NTAsMHgwMSwweDE0LDB4MDAsMHg0NSwweDAwLDB4MDAsMHg0MiB9fSwKKyB7MTYsIDB4Y2Q2MCwgMCwgezB4MDEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHgwNiwweDAwLDB4NDEsMHg4MCwweDEwLDB4NjAgfX0sCisgezE2LCAweGNkNzAsIDAsIHsweDA0LDB4MTgsMHgwMSwweDA2LDB4MDAsMHg0MSwweDgwLDB4MTAsMHg2MCwweDA0LDB4MTgsMHgwMSwweDA2LDB4MDAsMHg0MSwweDgwIH19LAorIHsxNiwgMHhjZDgwLCAwLCB7MHgxMCwweDYwLDB4MDQsMHgxOCwweDAxLDB4MDYsMHgwMCwweDQxLDB4ODAsMHgxMCwweDYwLDB4MDQsMHgxOCwweDAxLDB4MDYsMHgwMCB9fSwKKyB7MTYsIDB4Y2Q5MCwgMCwgezB4NDEsMHg4MCwweDEwLDB4NjAsMHgwNCwweDE4LDB4MDEsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNkYTAsIDAsIHsweDQ4LDB4MDAsMHgwMiwweDAxLDB4MDAsMHg4MCwweDQwLDB4MjEsMHgxMCwweDA4LDB4MDQsMHgwMiwweDAxLDB4MDAsMHg4MCwweDQwIH19LAorIHsxNiwgMHhjZGIwLCAwLCB7MHgyMCwweDEwLDB4MDgsMHgwNCwweDAyLDB4MDEsMHgwMCwweDgwLDB4NDAsMHgyMSwweDEwLDB4MDgsMHgwNCwweDAyLDB4MDEsMHgwMCB9fSwKKyB7MTYsIDB4Y2RjMCwgMCwgezB4ODAsMHg0MCwweDMwLDB4MTAsMHgwOCwweDA0LDB4MDIsMHgxMSwweDAwLDB4ODQsMHg0MCwweDIwLDB4MTAsMHgwOCwweDE0LDB4MDAgfX0sCisgezE2LCAweGNkZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQ1LDB4NDYsMHgwMywweDUxLDB4ODAsMHhkNCwweDYwIH19LAorIHsxNiwgMHhjZGUwLCAwLCB7MHgzNSwweDE4LDB4MGQsMHg0NiwweDAzLDB4NTEsMHg4MCwweGQ0LDB4NjAsMHgzNSwweDE4LDB4MGQsMHg0NiwweDAzLDB4NTEsMHg4MCB9fSwKKyB7MTYsIDB4Y2RmMCwgMCwgezB4ZDQsMHg2MCwweDM1LDB4MTAsMHgwZCwweDQ2LDB4MDMsMHg1MSwweDgwLDB4ZDQsMHg0MCwweDM1LDB4MTgsMHgwZCwweDQ2LDB4MDMgfX0sCisgezE2LCAweGNlMDAsIDAsIHsweDUxLDB4ODAsMHhkNCwweDYwLDB4MzUsMHgxOCwweDBkLDB4NDAsMHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjZTEwLCAwLCB7MHgwMCwweDAxLDB4NDYsMHgwNCwweDcxLDB4ODEsMHgxYywweDYwLDB4MDcsMHgxOCwweDExLDB4Y2UsMHgwNCwweDcxLDB4ODEsMHgxYyB9fSwKKyB7MTYsIDB4Y2UyMCwgMCwgezB4NjAsMHg0NywweDE4LDB4MDEsMHhjNiwweDA0LDB4NzEsMHg4MSwweDljLDB4NjAsMHg0NywweDE4LDB4MTksMHhjNiwweDA0LDB4NzEgfX0sCisgezE2LCAweGNlMzAsIDAsIHsweDgwLDB4MWMsMHg2MCwweDY3LDB4MTgsMHgxMSwweGM2LDB4MDQsMHg3MSwweDgxLDB4MWMsMHg2MCwweDQ3LDB4MTgsMHgxMSwweGMwIH19LAorIHsxNiwgMHhjZTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwweDQ2LDB4MDIsMHg3MSwweDgwLDB4OWMsMHg2MCB9fSwKKyB7MTYsIDB4Y2U1MCwgMCwgezB4MjcsMHgxOCwweDA5LDB4YzYsMHgwNiwweDcxLDB4ODAsMHgxYywweDYwLDB4MjcsMHgxOCwweDA5LDB4YzYsMHgwMSwweDMxLDB4ODAgfX0sCisgezE2LCAweGNlNjAsIDAsIHsweDFjLDB4NjAsMHgwNywweDE4LDB4MDksMHhjNiwweDAyLDB4NzEsMHg4MCwweDljLDB4NjAsMHgwNywweDE4LDB4MDksMHhjNiwweDEyIH19LAorIHsxNiwgMHhjZTcwLCAwLCB7MHg3MSwweDgwLDB4OWMsMHg2MCwweDMzLDB4MTgsMHgwMSwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2U4MCwgMCwgezB4NTAsMHg0NSwweDQ2LDB4MDUsMHg3MSwweDgxLDB4NWMsMHg2MCwweDU3LDB4MTgsMHgxNSwweGM2LDB4MDUsMHg3MSwweDgwLDB4NWMgfX0sCisgezE2LCAweGNlOTAsIDAsIHsweDYwLDB4NTcsMHgxOCwweDE1LDB4YzYsMHgwMSwweDMxLDB4ODEsMHgwYywweDYwLDB4MTcsMHgxOCwweDEwLDB4YzYsMHgwNSwweDcxIH19LAorIHsxNiwgMHhjZWEwLCAwLCB7MHg4MSwweDVjLDB4NjAsMHgwMywweDE4LDB4MTUsMHhjNiwweDA1LDB4NzEsMHg4MSwweDVjLDB4NjAsMHg1MywweDE4LDB4MTgsMHg4MiB9fSwKKyB7MTYsIDB4Y2ViMCwgMCwgezB4MTAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDAsMHgxMiwweDAxLDB4MjQsMHg4MCwweDQ4LDB4MjAgfX0sCisgezE2LCAweGNlYzAsIDAsIHsweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyNCwweDgwLDB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwIH19LAorIHsxNiwgMHhjZWQwLCAwLCB7MHg1OCwweDIwLDB4NTIsMHgwYywweDA1LDB4ODIsMHgwMSwweDIwLDB4ODAsMHg0OSwweDIwLDB4MDIsMHgwOCwweDA0LDB4ODIsMHgwMSB9fSwKKyB7MTYsIDB4Y2VlMCwgMCwgezB4MjAsMHg4MCwweDQ5LDB4MjAsMHgxMiwweDQ4LDB4MDQsMHg4MCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNlZjAsIDAsIHsweDQwLDB4MDQsMHgwNiwweDAwLDB4NjEsMHg4MCwweDE4LDB4NjAsMHgwNiwweDE4LDB4MDEsMHg4NiwweDA0LDB4NjEsMHg4MCwweDE4IH19LAorIHsxNiwgMHhjZjAwLCAwLCB7MHg2MCwweDA2LDB4MTgsMHgwMSwweDg2LDB4MDAsMHg2MSwweDgxLDB4NDgsMHg2MCwweDA2LDB4MTgsMHgxNCwweDg2LDB4MDAsMHg2MSB9fSwKKyB7MTYsIDB4Y2YxMCwgMCwgezB4ODAsMHgxOCwweDYwLDB4NDIsMHgxOCwweDAxLDB4ODYsMHgwMCwweDYxLDB4ODAsMHgxOCwweDYwLDB4MDYsMHgxOCwweDAwLDB4ODAgfX0sCisgezE2LCAweGNmMjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ1LDB4NjAsMHgwNCwweDc4LDB4MDEsMHgxZSwweDAwIH19LAorIHsxNiwgMHhjZjMwLCAwLCB7MHg0NywweDgwLDB4MTEsMHhlOCwweDAwLDB4NzgsMHgwMSwweDFlLDB4MDAsMHg0NywweDgwLDB4MTEsMHhlMCwweDA0LDB4NzgsMHgwMSB9fSwKKyB7MTYsIDB4Y2Y0MCwgMCwgezB4MWUsMHgwMCwweDQzLDB4ODAsMHgxMSwweGUwLDB4MDQsMHg3OCwweDAxLDB4MWUsMHgwMCwweDAzLDB4ODAsMHgxNSwweGUwLDB4MDQgfX0sCisgezE2LCAweGNmNTAsIDAsIHsweDc4LDB4MDEsMHgxZSwweDAwLDB4NDcsMHg4MCwweDExLDB4YzAsMHgxMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjZjYwLCAwLCB7MHg0MCwweDAxLDB4MTIsMHgwMCwweDY0LDB4ODAsMHgxOCwweDIwLDB4MDYsMHgwOCwweDAxLDB4ODIsMHgwMCwweDY0LDB4ODAsMHgxOCB9fSwKKyB7MTYsIDB4Y2Y3MCwgMCwgezB4MjAsMHgwNiwweDA4LDB4MDEsMHg4MiwweDAwLDB4NjAsMHg4MCwweDE4LDB4MzAsMHgwMiwweDA4LDB4MDEsMHg4MiwweDAwLDB4NjAgfX0sCisgezE2LCAweGNmODAsIDAsIHsweDgwLDB4MTksMHgzMCwweDQyLDB4MDgsMHgwMCwweDgyLDB4MDAsMHg2MCwweDgwLDB4MTksMHgyMCwweDA2LDB4NDgsMHgwMSwweDgwIH19LAorIHsxNiwgMHhjZjkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMSwweDQyLDB4MDQsMHgyMCwweDgxLDB4MDgsMHgyMCB9fSwKKyB7MTYsIDB4Y2ZhMCwgMCwgezB4NDIsMHgwOCwweDEwLDB4ODIsMHgwMCwweDIwLDB4ODEsMHgwOCwweDIwLDB4NDIsMHgwOCwweDEwLDB4ODIsMHgwNCwweDIwLDB4ODEgfX0sCisgezE2LCAweGNmYjAsIDAsIHsweDA4LDB4MjAsMHg0NiwweDA4LDB4MTAsMHg4MiwweDA0LDB4MjAsMHg4MSwweDA4LDB4MjAsMHg0MiwweDA4LDB4MTEsMHg4MiwweDA0IH19LAorIHsxNiwgMHhjZmMwLCAwLCB7MHgyMCwweDgxLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2ZkMCwgMCwgezB4NDAsMHg0NSwweDQyLDB4MDQsMHg0MCwweDgxLDB4MTAsMHgyMCwweDQ0LDB4MDgsMHgxMSwweDAyLDB4MDAsMHg0MCwweDgxLDB4MTAgfX0sCisgezE2LCAweGNmZTAsIDAsIHsweDIwLDB4NDQsMHgwOCwweDExLDB4MDIsMHgwNCwweDQwLDB4ODAsMHgxMCwweDIwLDB4NDUsMHgwOCwweDAxLDB4MDIsMHgwNCwweDQwIH19LAorIHsxNiwgMHhjZmYwLCAwLCB7MHg4MSwweDEwLDB4MjEsMHgwMCwweDBjLDB4MTEsMHgwMiwweDA0LDB4NDAsMHg4MSwweDEwLDB4MjAsMHg0NCwweDA4LDB4MDEsMHgwMCB9fSwKKyB7MTYsIDB4ZDAwMCwgMCwgezB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgwMywweDAwLDB4NTAsMHhjMCwweDE0LDB4MzAgfX0sCisgezE2LCAweGQwMTAsIDAsIHsweDA1LDB4MGMsMHgwMSwweDQzLDB4MDAsMHg1MCwweGMwLDB4MTQsMHgzMCwweDA1LDB4MGMsMHgwMSwweDQzLDB4MDAsMHg1MCwweGMwIH19LAorIHsxNiwgMHhkMDIwLCAwLCB7MHgxNCwweDMwLDB4MDUsMHgwYywweDAxLDB4NDMsMHgwMCwweDUwLDB4YzAsMHgxNCwweDMwLDB4MDUsMHgwYywweDAxLDB4NDMsMHgwMCB9fSwKKyB7MTYsIDB4ZDAzMCwgMCwgezB4NTAsMHhjMCwweDE0LDB4MzAsMHgwNSwweDBjLDB4MDEsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQwNDAsIDAsIHsweDQwLDB4MDAsMHgwOCwweDAwLDB4NDIsMHgwNCwweDEwLDB4ODAsMHgwNCwweDIwLDB4MDEsMHgwOSwweDAwLDB4NDIsMHgwMSwweDEwIH19LAorIHsxNiwgMHhkMDUwLCAwLCB7MHg4MCwweDA0LDB4MjAsMHgwMSwweDA4LDB4MDAsMHg0MiwweDAwLDB4MTAsMHgwMCwweDA0LDB4MjAsMHgwMSwweDA4LDB4MDAsMHg0MiB9fSwKKyB7MTYsIDB4ZDA2MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDQsMHgwMCwweDAxLDB4MDgsMHgwMCwweDQyLDB4MDAsMHgxMCwweDgwLDB4MDQsMHgyMCwweDExLDB4MDAgfX0sCisgezE2LCAweGQwNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQ1LDB4NDIsMHgwMiwweDAwLDB4ODAsMHg4MCwweDIwIH19LAorIHsxNiwgMHhkMDgwLCAwLCB7MHgyMCwweDA4LDB4MDgsMHgwMiwweDAyLDB4MDAsMHg4MCwweDAwLDB4MjAsMHgyMCwweDA4LDB4MDgsMHgwMiwweDAwLDB4MDAsMHg4MCB9fSwKKyB7MTYsIDB4ZDA5MCwgMCwgezB4ODAsMHhhMCwweDAwLDB4MGEsMHgwOCwweDAyLDB4MDIsMHgwMCwweDgwLDB4ODAsMHgzNCwweDYyLDB4MjgsMHgwOCwweDAyLDB4MDIgfX0sCisgezE2LCAweGQwYTAsIDAsIHsweDAwLDB4ODAsMHg4MCwweDMwLDB4MjAsMHgwYywweDA4LDB4MDAsMHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMGIwLCAwLCB7MHg0MCwweDAxLDB4NDAsMHgwNCwweDYwLDB4MDEsMHgxOCwweDAwLDB4NDYsMHgwMCwweDExLDB4ODAsMHgwNCwweDYwLDB4MDMsMHgxOCB9fSwKKyB7MTYsIDB4ZDBjMCwgMCwgezB4MDAsMHg0NiwweDAwLDB4MTEsMHg4MCwweDA2LDB4NjAsMHgwMSwweDk4LDB4MDAsMHg0NiwweDAwLDB4MTEsMHg4MCwweDA0LDB4NjAgfX0sCisgezE2LCAweGQwZDAsIDAsIHsweDAxLDB4MTgsMHgwMCwweDY2LDB4MDAsMHgxMSwweDgwLDB4MDQsMHg2MCwweDAxLDB4MTgsMHgwMCwweDQ2LDB4MDAsMHgxMSwweDgwIH19LAorIHsxNiwgMHhkMGUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMSwweDAwLDB4MDIsMHg2MCwweDAwLDB4OTgsMHgwMCB9fSwKKyB7MTYsIDB4ZDBmMCwgMCwgezB4MjYsMHgwMCwweDA5LDB4ODAsMHgwMiwweDY0LDB4MDAsMHg5OCwweDAwLDB4MjYsMHgwMCwweDE5LDB4OTAsMHgwMiwweDYwLDB4MDAgfX0sCisgezE2LCAweGQxMDAsIDAsIHsweDFkLDB4MDAsMHgyNiwweDAwLDB4MDEsMHhjMCwweDAyLDB4NjAsMHgwMCwweDk5LDB4MDAsMHgwNiwweDQwLDB4MTksMHg4MCwweDAyIH19LAorIHsxNiwgMHhkMTEwLCAwLCB7MHg2MCwweDAwLDB4OTgsMHgwMCwweDY2LDB4MDAsMHgwMSwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDEyMCwgMCwgezB4NDAsMHg0NSwweDYwLDB4MDQsMHgzOCwweDAxLDB4MGUsMHgwMCwweDQzLDB4ODAsMHgxMCwweGUwLDB4MDQsMHgzOCwweDAxLDB4MGUgfX0sCisgezE2LCAweGQxMzAsIDAsIHsweDAwLDB4NDMsMHg4MCwweDEwLDB4ZTAsMHgwNCwweDM4LDB4MDEsMHgxYSwweDAwLDB4NDMsMHg4MCwweDExLDB4YTAsMHgwNCwweDM4IH19LAorIHsxNiwgMHhkMTQwLCAwLCB7MHgwMSwweDBlLDB4MDAsMHgwMiwweDgwLDB4NDAsMHhlMCwweDA0LDB4MzgsMHgwMSwweDBlLDB4MDAsMHg0MywweDgwLDB4MTgsMHg4MCB9fSwKKyB7MTYsIDB4ZDE1MCwgMCwgezB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDUwLDB4MDQsMHgwMSwweDAwLDB4MzAsMHg0MCwweDBjLDB4MTAgfX0sCisgezE2LCAweGQxNjAsIDAsIHsweDAzLDB4MDQsMHgwMCwweGM5LDB4MDAsMHgzMCwweDQwLDB4MGMsMHgxMCwweDAzLDB4MDQsMHgwMCwweGMxLDB4MDAsMHgzMCwweDQwIH19LAorIHsxNiwgMHhkMTcwLCAwLCB7MHgwOCwweDEwLDB4MDMsMHgwNCwweDAwLDB4ODEsMHgwMCwweDMwLDB4NDAsMHgwYywweDc4LDB4MDIsMHgxNCwweDAwLDB4YzEsMHgwMCB9fSwKKyB7MTYsIDB4ZDE4MCwgMCwgezB4MzAsMHg0MCwweDBjLDB4MTAsMHgwMywweDA0LDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQxOTAsIDAsIHsweDQwLDB4MDAsMHgwNSwweDAwLDB4MzEsMHg0MCwweDBjLDB4NTAsMHgwMywweDE0LDB4MDAsMHhjNSwweDAwLDB4MzUsMHg0MCwweDBjIH19LAorIHsxNiwgMHhkMWEwLCAwLCB7MHg1MCwweDAzLDB4MTQsMHgxMCwweGQ1LDB4MDAsMHgzMSwweDQxLDB4MGQsMHg1MCwweDAzLDB4MTQsMHgxMCwweGM1LDB4MDAsMHgzMSB9fSwKKyB7MTYsIDB4ZDFiMCwgMCwgezB4NDAsMHgwZCwweDQ4LDB4NDMsMHg1NCwweDEwLDB4YzUsMHgwMCwweDMxLDB4NDAsMHgwYywweDQwLDB4NDMsMHgxMCwweDAwLDB4YzIgfX0sCisgezE2LCAweGQxYzAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQ1LDB4NDMsMHgwNCwweDYwLDB4YzEsMHgxOCwweDMwIH19LAorIHsxNiwgMHhkMWQwLCAwLCB7MHg0NiwweDBjLDB4MTEsMHg4MywweDA0LDB4NjEsMHhjMSwweDE4LDB4MzAsMHg0NiwweDBjLDB4MDEsMHg4NywweDA0LDB4NjAsMHhjMSB9fSwKKyB7MTYsIDB4ZDFlMCwgMCwgezB4MTgsMHgzMCwweDQ2LDB4MDgsMHgxMSwweDgzLDB4MDQsMHg2MCwweGMxLDB4MTgsMHgyMCwweDA2LDB4MGMsMHgwMSwweDgzLDB4MDQgfX0sCisgezE2LCAweGQxZjAsIDAsIHsweDYwLDB4YzEsMHgxOCwweDMwLDB4NDYsMHgwYywweDExLDB4ODAsMHgxMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMjAwLCAwLCB7MHg0MCwweDAxLDB4NDAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgwMCwweDAwLDB4ODAsMHgwMCwweDIwLDB4MDAsMHgwOCB9fSwKKyB7MTYsIDB4ZDIxMCwgMCwgezB4MDAsMHgwMiwweDAwLDB4MDAsMHg4MSwweDAwLDB4MjAsMHgwMCwweDA4LDB4ODAsMHgwMiwweDAwLDB4MDAsMHhjMCwweDAwLDB4MjAgfX0sCisgezE2LCAweGQyMjAsIDAsIHsweDAwLDB4MDgsMHg0MCwweDQzLDB4MzAsMHgwMCwweDgwLDB4MDAsMHgyMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDgwIH19LAorIHsxNiwgMHhkMjMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMSwweDQ4LDB4NDQsMHg2MiwweDExLDB4MTgsMHg4NCB9fSwKKyB7MTYsIDB4ZDI0MCwgMCwgezB4NDYsMHgyMSwweDExLDB4ODgsMHg0NCwweDYzLDB4MDEsMHgxOCwweDg0LDB4NDYsMHgyMSwweDAxLDB4ODgsMHgwNCwweDYyLDB4MTEgfX0sCisgezE2LCAweGQyNTAsIDAsIHsweDE4LDB4MDQsMHg0NiwweDIxLDB4MTAsMHhjOCwweDQ0LDB4NjIsMHgxMSwweDE4LDB4MDUsMHg0MywweDAxLDB4ODEsMHg4OCwweDQ0IH19LAorIHsxNiwgMHhkMjYwLCAwLCB7MHg2MiwweDExLDB4MTgsMHg4NCwweDQ2LDB4MjEsMHgxMSwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDI3MCwgMCwgezB4NDAsMHg0NSwweDQwLDB4MDQsMHg1MCwweDAxLDB4MTQsMHgwNCwweDQ1LDB4MDEsMHgxMSwweDQwLDB4NDQsMHg1MCwweDAxLDB4MTQgfX0sCisgezE2LCAweGQyODAsIDAsIHsweDA0LDB4NDUsMHgwMSwweDAxLDB4NDAsMHg0NSwweDAwLDB4MTAsMHgxNCwweDA0LDB4NDUsMHgwMywweDAwLDB4NDAsMHg0NCwweDUwIH19LAorIHsxNiwgMHhkMjkwLCAwLCB7MHgxMSwweDE0LDB4MDQsMHgwMSwweDA1LDB4NDEsMHg0MCwweDQ0LDB4NTAsMHgxMSwweDE0LDB4MDQsMHgwNSwweDAxLDB4MDEsMHg0MCB9fSwKKyB7MTYsIDB4ZDJhMCwgMCwgezB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgwOCwweDIwLDB4NDIsMHgwOCwweDEwLDB4ODIgfX0sCisgezE2LCAweGQyYjAsIDAsIHsweDA0LDB4MjAsMHg4MSwweDA4LDB4MDAsMHg0MiwweDAwLDB4MTAsMHg4MiwweDA0LDB4MjAsMHg4MSwweDA4LDB4MDAsMHg0MiwweDA4IH19LAorIHsxNiwgMHhkMmMwLCAwLCB7MHgxMCwweDgyLDB4MDUsMHgyMCwweDgxLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMCwweDhhLDB4MDUsMHgyMCwweDA1LDB4MDgsMHgyMCB9fSwKKyB7MTYsIDB4ZDJkMCwgMCwgezB4NDIsMHgwOCwweDEwLDB4ODIsMHgwNCwweDIyLDB4ODEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQyZTAsIDAsIHsweDAwLDB4MDAsMHgwYSwweDAxLDB4MDIsMHg4MCwweDQwLDB4YTAsMHgxMCwweDI4LDB4MDQsMHgwMiwweDAxLDB4MDIsMHg4MCwweDQwIH19LAorIHsxNiwgMHhkMmYwLCAwLCB7MHhhMCwweDEwLDB4MjgsMHgwNCwweDBhLDB4MDEsMHgwMiwweDgwLDB4NDAsMHhhMCwweDAwLDB4MjksMHgwNCwweDBhLDB4MDEsMHgwMiB9fSwKKyB7MTYsIDB4ZDMwMCwgMCwgezB4ODAsMHg0MCwweGE0LDB4MDAsMHgyOCwweDA0LDB4MGEsMHgwMSwweDAyLDB4ODAsMHg0MCwweGE4LDB4MTAsMHgyYiwweDE0LDB4MDAgfX0sCisgezE2LCAweGQzMTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQ1LDB4NGQsMHgwMywweDUzLDB4NDAsMHhkNCwweGQwIH19LAorIHsxNiwgMHhkMzIwLCAwLCB7MHgzNSwweDM0LDB4MGQsMHg0ZCwweDAzLDB4NTMsMHg0MCwweGQ0LDB4ZDAsMHgzNSwweDM0LDB4MGQsMHg0ZCwweDAzLDB4NTMsMHg0MCB9fSwKKyB7MTYsIDB4ZDMzMCwgMCwgezB4ZDQsMHhkMCwweDIxLDB4MzQsMHg0ZCwweDRkLDB4MDMsMHg1MywweDQwLDB4ZDQsMHhkOSwweDYxLDB4MzQsMHgwNCwweDBkLDB4MDMgfX0sCisgezE2LCAweGQzNDAsIDAsIHsweDUzLDB4NDAsMHhjMCwweGQ4LDB4MzUsMHgzNywweDBkLDB4NDAsMHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMzUwLCAwLCB7MHg0MCwweDAxLDB4NDgsMHgwNCwweDcyLDB4MDAsMHgxYywweDgwLDB4NDcsMHgyMCwweDExLDB4YzgsMHgwNCwweDcyLDB4MDEsMHgxYyB9fSwKKyB7MTYsIDB4ZDM2MCwgMCwgezB4ODAsMHg0NywweDIwLDB4MTEsMHhjOCwweDA0LDB4NzIsMHgwMCwweDljLDB4ODAsMHg0NywweDIwLDB4MTksMHhjOCwweDAwLDB4NzIgfX0sCisgezE2LCAweGQzNzAsIDAsIHsweDAxLDB4MWMsMHg4OCwweDY3LDB4MjAsMHgxMSwweGM4LDB4MDQsMHg3MiwweDAxLDB4NWMsMHg4MiwweDQ3LDB4MjIsMHgxMSwweGMwIH19LAorIHsxNiwgMHhkMzgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIzLDB4MDgsMHg0OCwweGMyLDB4MTIsMHgzMSB9fSwKKyB7MTYsIDB4ZDM5MCwgMCwgezB4ODQsMHg4YywweDYxLDB4MjMsMHgxMCwweDQwLDB4YzAsMHgxMiwweDMxLDB4ODQsMHg4YywweDYxLDB4MDMsMHgxMCwweDQ4LDB4YzQgfX0sCisgezE2LCAweGQzYTAsIDAsIHsweDEwLDB4MzEsMHg4NCwweDhjLDB4NDEsMHgyMywweDE4LDB4NDgsMHhjNiwweDEwLDB4MzAsMHgwNCwweDBjLDB4NDEsMHgyMywweDE4IH19LAorIHsxNiwgMHhkM2IwLCAwLCB7MHg0OCwweGM2LDB4MTIsMHgzMCwweDg0LDB4OGMsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDNjMCwgMCwgezB4MDAsMHgwMCwweDNmLDB4ZmYsMHg0ZiwweGZmLDB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhmZCwweDNmLDB4ZmYsMHg0ZiwweGZmLDB4ZDMgfX0sCisgezE2LCAweGQzZDAsIDAsIHsweGZmLDB4ZjQsMHhmZiwweGZkLDB4M2YsMHhmZiwweDRmLDB4ZmYsMHhkMywweGZmLDB4ZjQsMHhmZiwweGZkLDB4M2YsMHhmZiwweDRmIH19LAorIHsxNiwgMHhkM2UwLCAwLCB7MHhmZiwweGQzLDB4ZmYsMHhmNCwweGZmLDB4ZGQsMHgzZiwweGZmLDB4NGYsMHhmZiwweGQzLDB4ZmYsMHhmNCwweGZmLDB4ZmQsMHgwMCB9fSwKKyB7MTYsIDB4ZDNmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ0MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNDEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDQyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ0MzAsIDAsIHsweDAwLDB4MDAsMHgyYywweGRiLDB4MGIsMHgzNiwweGMyLDB4Y2QsMHhiMCwweGIzLDB4NmMsMHgyYywweGRiLDB4MGIsMHgzNiwweGMyIH19LAorIHsxNiwgMHhkNDQwLCAwLCB7MHhjZCwweGIwLDB4YjMsMHg2YywweDJjLDB4ZGIsMHgwYiwweDM2LDB4YzIsMHhjZCwweGIwLDB4YjMsMHg2YywweDJjLDB4ZGIsMHgwYiB9fSwKKyB7MTYsIDB4ZDQ1MCwgMCwgezB4MzYsMHhjMiwweGNkLDB4YjAsMHhiMywweDRjLDB4MmMsMHhkYiwweDBiLDB4MzYsMHhjMiwweGNkLDB4YjAsMHhiMywweDZjLDB4MDAgfX0sCisgezE2LCAweGQ0NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzMsMHg1YywweDRjLDB4ZDcsMHgxMywweDMzIH19LAorIHsxNiwgMHhkNDcwLCAwLCB7MHhjNCwweGNjLDB4ZjEsMHgzMywweDNhLDB4NGEsMHhkNiwweDkzLDB4MzMsMHhjNCwweGNjLDB4ZjEsMHgyYiwweDNhLDB4NGMsMHhjZiB9fSwKKyB7MTYsIDB4ZDQ4MCwgMCwgezB4MTMsMHgzMywweGM0LDB4Y2MsMHhlOSwweDMzLDB4M2MsMHg0YywweGNmLDB4MTIsMHhiNSwweGE0LDB4YWMsMHhjOSwweDMzLDB4M2MgfX0sCisgezE2LCAweGQ0OTAsIDAsIHsweDRjLDB4Y2YsMHgxMywweDM1LDB4YzQsMHhjZCwweDY5LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNGEwLCAwLCB7MHgwMCwweDAwLDB4M2IsMHg3ZSwweDRlLDB4ZGYsMHg5MywweGI3LDB4ZTQsMHhlZCwweGY5LDB4M2IsMHg3ZSwweDRlLDB4ZGYsMHg5MyB9fSwKKyB7MTYsIDB4ZDRiMCwgMCwgezB4YjcsMHhlNCwweGVkLDB4ZjksMHgzYiwweDdlLDB4NGUsMHhkZSwweDEyLDB4MzcsMHhlNCwweGVkLDB4ZTEsMHgzYiwweDdlLDB4NGUgfX0sCisgezE2LCAweGQ0YzAsIDAsIHsweGRmLDB4OTIsMHgzMSwweDg0LDB4OGQsMHhkOSwweDNiLDB4N2UsMHg0ZSwweGRmLDB4OTMsMHhiMSwweGU0LDB4ZWMsMHg2MSwweDAwIH19LAorIHsxNiwgMHhkNGQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODQsMHgwNCwweGExLDB4ODMsMHgyYyB9fSwKKyB7MTYsIDB4ZDRlMCwgMCwgezB4MDMsMHgwYSwweDEwLDB4ODIsMHhjMSwweDM0LDB4MTAsMHg4ZiwweDAwLDB4NDAsMHgwOSwweDE0LDB4MDIsMHgwMywweDE0LDB4OTEgfX0sCisgezE2LCAweGQ0ZjAsIDAsIHsweDAwLDB4MDgsMHg0MiwweDBiLDB4MTgsMHg4MiwweGM0LDB4MDAsMHgzMSwweGNhLDB4MGMsMHg1MiwweDAyLDB4MTAsMHg4MCwweDg1IH19LAorIHsxNiwgMHhkNTAwLCAwLCB7MHgwMCwweDIxLDB4ODIsMHgyOCwweDQwLDB4MGEsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDUxMCwgMCwgezB4MDAsMHgwMCwweDBhLDB4MDQsMHgwMiwweDAxLDB4NDAsMHg4MCwweDczLDB4MjgsMHgxMCwweDQ4LDB4MDcsMHgwNiwweDAxLDB4MDQgfX0sCisgezE2LCAweGQ1MjAsIDAsIHsweGE0LDB4NDEsMHgyMSwweDE0LDB4MDgsMHg0NCwweDA2LDB4MTEsMHg0MCwweDgwLDB4NzAsMHgyMCwweDE0LDB4MGEsMHgwNCwweDAyIH19LAorIHsxNiwgMHhkNTMwLCAwLCB7MHgwMCwweGM4LDB4ODQsMHg0MSwweDIxLDB4MWMsMHgwOCwweDA2LDB4MTIsMHgwMSwweGMwLDB4ODAsMHg2MCwweDIwLDB4MTQsMHgwMCB9fSwKKyB7MTYsIDB4ZDU0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDg0LDB4MDQsMHgyMSwweDgyLDB4MDggfX0sCisgezE2LCAweGQ1NTAsIDAsIHsweDUzLDB4MDIsMHgxMCwweDgwLDB4YzUsMHgwMCwweDgxLDB4NGEsMHgwNCwweDQyLDB4MDIsMHgxNCwweDAwLDB4MDQsMHgyMCwweDIxIH19LAorIHsxNiwgMHhkNTYwLCAwLCB7MHg4MCwweGE4LDB4NzIsMHgyMiwweDFjLDB4ODgsMHhjNCwweDA2LDB4YTEsMHg0MiwweDhjLDB4NTIsMHgyMiwweDFjLDB4ODgsMHg4NSB9fSwKKyB7MTYsIDB4ZDU3MCwgMCwgezB4MjYsMHgyMSwweGMwLDB4ODgsMHg1MCwweDIyLDB4MTgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ1ODAsIDAsIHsweDAwLDB4MDAsMHgwMiwweDQ0LDB4MDAsMHgwMSwweDAxLDB4MDAsMHg2MiwweDAwLDB4MTAsMHgwMCwweDA0LDB4MDAsMHgwMSwweDAxIH19LAorIHsxNiwgMHhkNTkwLCAwLCB7MHgyMCwweDQwLDB4MDAsMHgxYywweDAwLDB4NDQsMHgwNCwweDAxLDB4MDIsMHgyMCwweDYyLDB4MDAsMHgxYywweDgwLDB4MDQsMHgwNCB9fSwKKyB7MTYsIDB4ZDVhMCwgMCwgezB4ODAsMHg4OSwweDIwLDB4NTAsMHgwOCwweDE0LDB4ODAsMHgwNCwweDI0LDB4MDEsMHhjMSwweDAwLDB4NTAsMHgwMCwweDE4LDB4MDAgfX0sCisgezE2LCAweGQ1YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg4MCwweDM4LDB4MjAsMHgwNCwweDBjIH19LAorIHsxNiwgMHhkNWMwLCAwLCB7MHgzMSwweDBhLDB4MDAsMHgwMCwweDAyLDB4MTgsMHgyMCwweDhjLDB4YTgsMHgxMCwweDI4LDB4MDgsMHg4OCwweGMxLDB4MTQsMHgxMCB9fSwKKyB7MTYsIDB4ZDVkMCwgMCwgezB4YzYsMHgwMCwweDIyLDB4MDMsMHgwOCwweDAyLDB4MDEsMHgwOCwweGIwLDB4MDAsMHgwYywweDIxLDB4MDIsMHgwMCwweDgyLDB4ODAgfX0sCisgezE2LCAweGQ1ZTAsIDAsIHsweDA4LDB4MDAsMHg0OSwweDA4LDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4ODAsMHgwOCwweDIwLDB4MDMsMHgwMCwweDA0LDB4MDIsMHg0MywweDIwLDB4MDAsMHg0MCB9fSwKKyB7MTYsIDB4ZDYwMCwgMCwgezB4MDAsMHgyMCwweDAwLDB4MDQsMHg0MiwweDAxLDB4MTAsMHg4MCwweDg0LDB4MjAsMHgxMSwweDA4LDB4MDQsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ2MTAsIDAsIHsweDAwLDB4NDQsMHgyNCwweDIwLDB4MDksMHgwOCwweDQwLDB4MDMsMHgwMCwweDkwLDB4YzQsMHgyMCwweDIwLDB4MDgsMHgwYywweDAyIH19LAorIHsxNiwgMHhkNjIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDA4LDB4ODEsMHgwOCwweDIwLDB4MDQsMHg4OCB9fSwKKyB7MTYsIDB4ZDYzMCwgMCwgezB4MDIsMHgyMiwweDA4LDB4MDgsMHhjMywweDJhLDB4OTAsMHg0MCwweDg0LDB4MTAsMHgyMCwweDA0LDB4ODAsMHhjMiwweDI2LDB4MjAgfX0sCisgezE2LCAweGQ2NDAsIDAsIHsweDQ5LDB4ODgsMHgyMiwweDIyLDB4MGMsMHgwOCwweGMxLDB4MjYsMHhhMCwweGM5LDB4OGMsMHgxMiwweDJhLDB4MDQsMHg4OCwweDQzIH19LAorIHsxNiwgMHhkNjUwLCAwLCB7MHgwZSwweGEwLDB4Y2IsMHg4OCwweDEwLDB4MjIsMHgwYywweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDY2MCwgMCwgezB4MDgsMHgwMCwweDBhLDB4NDAsMHgzMiwweDAwLDB4MDEsMHg4MCwweDMxLDB4MjgsMHgwMCwweDAwLDB4MDEsMHgxMiwweDgwLDB4OGQgfX0sCisgezE2LCAweGQ2NzAsIDAsIHsweDg0LDB4MDAsMHgyOCwweDBjLDB4MDgsMHgwMSwweDMyLDB4MDAsMHg4YywweDgwLDB4MDIsMHgyMCwweDBjLDB4MDgsMHgwMSwweDJlIH19LAorIHsxNiwgMHhkNjgwLCAwLCB7MHgwMCwweGMzLDB4ODAsMHgwMiwweDIwLDB4MDQsMHgwOCwweDQzLDB4MDIsMHgwMCwweDQwLDB4ODAsMHgxMCwweDIwLDB4MDQsMHgwMiB9fSwKKyB7MTYsIDB4ZDY5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwOCwweDg3LDB4MGEsMHgyMSwweDA0LDB4ODggfX0sCisgezE2LCAweGQ2YTAsIDAsIHsweDExLDB4MmEsMHgxYywweDBhLDB4MDYsMHgyMiwweDIxLDB4NDAsMHhhMCwweDQyLDB4MmEsMHgxMCwweDg4LDB4ODUsMHgwYSwweGExIH19LAorIHsxNiwgMHhkNmIwLCAwLCB7MHgwNiwweGE0LDB4NjIsMHgyMiwweDFjLDB4MGEsMHhjNCwweDAyLDB4MjEsMHg4MCwweDhjLDB4NTIsMHgyMiwweDE0LDB4NDgsMHg4NiB9fSwKKyB7MTYsIDB4ZDZjMCwgMCwgezB4MjIsMHgyMCwweDA4LDB4YTgsMHg2MCwweDJhLDB4MTQsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ2ZDAsIDAsIHsweDAwLDB4MDAsMHgwOCwweDQ1LDB4MDYsMHgwMSwweDg5LDB4ODAsMHg2MywweDIwLDB4MWMsMHg4OCwweDQwLDB4MzQsMHgxMSwweDAxIH19LAorIHsxNiwgMHhkNmUwLCAwLCB7MHhhNCwweDUwLDB4MjgsMHgxOCwweDQ4LDB4MDQsMHgwZSwweDAxLDB4NGIsMHg4MCwweDczLDB4MjgsMHgxYywweDhhLDB4MDQsMHgwNiB9fSwKKyB7MTYsIDB4ZDZmMCwgMCwgezB4OTEsMHg0OSwweDA0LDB4NjMsMHgyMCwweDFjLDB4OGEsMHgwNiwweDI2LDB4MDEsMHg4NSwweDgwLDB4NzAsMHgyMCwweDE4LDB4MDIgfX0sCisgezE2LCAweGQ3MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHg4NSwweDAwLDB4YjEsMHg0NSwweDJjIH19LAorIHsxNiwgMHhkNzEwLCAwLCB7MHg3MCwweDAyLDB4MTQsMHhjMCwweDA3LDB4MDgsMHgyMSwweDQ5LDB4MDAsMHg0MiwweDAxLDB4MTQsMHg4MiwweDA1LDB4MDAsMHgxMSB9fSwKKyB7MTYsIDB4ZDcyMCwgMCwgezB4ODQsMHgwMCwweDUyLDB4MDIsMHgxYywweDAwLDB4YzQsMHgwMCwweDIxLDB4YzQsMHgyYywweDUzLDB4MDIsMHgxYywweDAyLDB4ODEgfX0sCisgezE2LCAweGQ3MzAsIDAsIHsweDA0LDB4YTEsMHhjZCwweDA4LDB4NTAsMHgwMiwweDE0LDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNzQwLCAwLCB7MHgwOCwweDEwLDB4MTIsMHgwNCwweDM0LDB4MDEsMHhjYywweDAwLDB4NzMsMHg0MCwweDFjLDB4OTAsMHg0NSwweDA0LDB4MDEsMHg0OCB9fSwKKyB7MTYsIDB4ZDc1MCwgMCwgezB4MDQsMHg2MCwweDQxLDB4MTgsMHhjMCwweDQ0LDB4MDQsMHgwMSwweDA1LDB4MDQsMHg3MywweDQ4LDB4MTQsMHg1MCwweDQ3LDB4MzQgfX0sCisgezE2LCAweGQ3NjAsIDAsIHsweDAxLDB4NDUsMHgyMCwweDYyLDB4MDgsMHgxYywweGMyLDB4MDQsMHgwYywweDgxLDB4YzcsMHgwMCwweDczLDB4ODAsMHgxOCwweGMyIH19LAorIHsxNiwgMHhkNzcwLCAwLCB7MHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDEwLDB4ODQsMHgxMCwweDIxLDB4Y2MsMHgyOCB9fSwKKyB7MTYsIDB4ZDc4MCwgMCwgezB4NDIsMHgwMiwweDE0LDB4MTIsMHhjNSwweDEwLDB4MjEsMHg4NCwweDA0LDB4NDAsMHgwMCwweDFjLDB4ODAsMHg4NCwweDAwLDB4OTEgfX0sCisgezE2LCAweGQ3OTAsIDAsIHsweDAwLDB4MDgsMHg3MywweDgyLDB4MWMsMHg5MCwweDA1LDB4MGMsMHgwMSwweGNmLDB4MGMsMHg0MCwweDAyLDB4MTQsMHgzMCwweDQ1IH19LAorIHsxNiwgMHhkN2EwLCAwLCB7MHgyMCwweGExLDB4YzAsMHgwOCwweDUwLDB4MDIsMHgxMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDdiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4NDUsMHgwYywweDgxLDB4MDAsMHgwMCwweDAxLDB4MDgsMHgwOCwweDAwLDB4MDUsMHgxOCwweDkxLDB4MDUgfX0sCisgezE2LCAweGQ3YzAsIDAsIHsweDA0LDB4MDAsMHgwMSwweDA0LDB4NDAsMHgwNiwweDE4LDB4MDAsMHgwMiwweDI0LDB4NzAsMHg0MCwweDA0LDB4MDAsMHg0MCwweDAwIH19LAorIHsxNiwgMHhkN2QwLCAwLCB7MHgwMSwweGM0LDB4MjQsMHgwMCwweDg4LDB4MDQsMHgwMCwweDQzLDB4MTAsMHgwMCwweDQwLDB4MjAsMHgwMCwweDg4LDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDdlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMiwweDg1LDB4MjQsMHgzMSwweDAyLDB4MGMgfX0sCisgezE2LCAweGQ3ZjAsIDAsIHsweDAyLDB4YzIsMHgwNCwweDEwLDB4YzQsMHgyOCwweDIxLDB4NDksMHgwYywweDAyLDB4YzAsMHgwNCwweGIyLDB4MDYsMHgxYywweDIwIH19LAorIHsxNiwgMHhkODAwLCAwLCB7MHgwMywweDA4LDB4NTAsMHg0MiwweDBjLDB4ODAsMHgwMSwweDA0LDB4YTEsMHg0OSwweDBjLDB4MDAsMHhjMiwweDBjLDB4MTAsMHg0MyB9fSwKKyB7MTYsIDB4ZDgxMCwgMCwgezB4MjQsMHhhMCwweGMxLDB4MDgsMHgxMCwweDQyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ4MjAsIDAsIHsweDAwLDB4MTAsMHhhMiwweDAwLDB4MjAsMHgwMCwweGNkLDB4MDAsMHgwMCwweDQwLDB4MDQsMHgyMCwweDAxLDB4MTAsMHgwMCwweDA5IH19LAorIHsxNiwgMHhkODMwLCAwLCB7MHgwNCwweDAyLDB4NDksMHgwYywweDkyLDB4MDcsMHgzMCwweDAwLDB4MDAsMHgwMCwweDMzLDB4MDgsMHgwYywweDkyLDB4NDEsMHgwMCB9fSwKKyB7MTYsIDB4ZDg0MCwgMCwgezB4ODAsMHhjYywweDAwLDB4MDAsMHgwMCwweDBjLDB4MDAsMHg0MywweDI4LDB4ODAsMHhjMiwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ4NTAsIDAsIHsweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgxMCwweDUwLDB4ODAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkODYwLCAwLCB7MHgxMCwweDAwLDB4MDAsMHhmMCwweDAwLDB4MTAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhkMCwweDgwLDB4ODAsMHgwMCB9fSwKKyB7MTYsIDB4ZDg3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4ODAsMHgxMCwweDkwLDB4ODAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgxMCwweDkwLDB4ODAgfX0sCisgezE2LCAweGQ4ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDEwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkODkwLCAwLCB7MHgzYywweDNjLDB4MTAsMHg4MCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4OTAsMHhhMCwweDgwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDhhMCwgMCwgezB4MDAsMHgwMCwweDQwLDB4MTAsMHg5MCwweDgwLDB4YTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTAsMHg5MCwweDgwLDB4YTAgfX0sCisgezE2LCAweGQ4YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDIwLDB4ODAsMHgxMCwweDkwLDB4YTAsMHhhMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgxMCwweDhmIH19LAorIHsxNiwgMHhkOGMwLCAwLCB7MHgwZiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJjLDB4YzIsMHhlNCwweDgxLDB4ODAsMHgzZiB9fSwKKyB7MTYsIDB4ZDhkMCwgMCwgezB4ZDksMHhiZiwweGQ5LDB4OTgsMHg3MSwweDlkLDB4NDIsMHg4MCwweDAwLDB4MjYsMHg3ZiwweGU2LDB4NzIsMHhhYiwweDdjLDB4M2EgfX0sCisgezE2LCAweGQ4ZTAsIDAsIHsweDQwLDB4MDAsMHgxOSwweDgwLDB4MjYsMHg0OCwweGRkLDB4M2MsMHg5MSwweGMwLDB4MjYsMHg0MCwweDI2LDB4NDAsMHgzOCwweDMxIH19LAorIHsxNiwgMHhkOGYwLCAwLCB7MHhkYiwweDYxLDB4YzAsMHgxOSwweDk5LDB4YmYsMHhjOSwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDkwMCwgMCwgezB4MDAsMHgwMCwweDEwLDB4ODAsMHgxMCwweDE0LDB4ODAsMHgwNiwweDg0LDB4OTcsMHg5NiwweDg2LDB4OTYsMHgwNiwweDkwLDB4MDAgfX0sCisgezE2LCAweGQ5MTAsIDAsIHsweDNmLDB4YTEsMHgyOCwweDAxLDB4MDIsMHg5MCwweDEyLDB4MDAsMHg4MCwweDE3LDB4ODgsMHgxNiwweDllLDB4OTAsMHg5MCwweDA0IH19LAorIHsxNiwgMHhkOTIwLCAwLCB7MHgxMCwweDAwLDB4MzYsMHhiZSwweGJlLDB4OWUsMHg4NiwweDE2LDB4MTIsMHg4NCwweDgwLDB4MTMsMHhiZSwweDk3LDB4YWUsMHg4MCB9fSwKKyB7MTYsIDB4ZDkzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4ODIgfX0sCisgezE2LCAweGQ5NDAsIDAsIHsweDgxLDB4ODQsMHgyMSwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHhhMSwweDM4LDB4MDEsMHg3OCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkOTUwLCAwLCB7MHgwOCwweGI4LDB4MjEsMHg3MiwweDY4LDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDk4LDB4NDQsMHg4OCwweDY4LDB4ODAsMHgwMCB9fSwKKyB7MTYsIDB4ZDk2MCwgMCwgezB4MDAsMHgwMCwweDA4LDB4YjgsMHgwMSwweDc4LDB4MDEsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ5NzAsIDAsIHsweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGY3LDB4YWYsMHhmZiwweGMwIH19LAorIHsxNiwgMHhkOTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiB9fSwKKyB7MTYsIDB4ZDk5MCwgMCwgezB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGJmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ5YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH19LAorIHsxNiwgMHhkOWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHg3ZiwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiB9fSwKKyB7MTYsIDB4ZDljMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYgfX0sCisgezE2LCAweGQ5ZDAsIDAsIHsweDJmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkOWUwLCAwLCB7MHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4N2YsMHhjMCB9fSwKKyB7MTYsIDB4ZDlmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYgfX0sCisgezE2LCAweGRhMDAsIDAsIHsweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweDdmLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkYTEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCB9fSwKKyB7MTYsIDB4ZGEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGJmLDB4YmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhkZiwweGJmLDB4ZGYgfX0sCisgezE2LCAweGRhMzAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGVmLDB4ZmYsMHhmZiwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGRmIH19LAorIHsxNiwgMHhkYTQwLCAwLCB7MHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGE1MCwgMCwgezB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4M2UsMHhhZiwweGZmLDB4YzAgfX0sCisgezE2LCAweGRhNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MWYsMHhmZiwweGRmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhlNywweGZlIH19LAorIHsxNiwgMHhkYTcwLCAwLCB7MHhlZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhkZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfX0sCisgezE2LCAweGRhOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJmLDB4ZjcsMHhmZiwweGZmIH19LAorIHsxNiwgMHhkYWEwLCAwLCB7MHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmYsMHhmZiwweGZmLDB4ZGYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmNyB9fSwKKyB7MTYsIDB4ZGFiMCwgMCwgezB4ZGYsMHhmNywweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRhYzAsIDAsIHsweDAwLDB4MDAsMHgwMiwweGM0LDB4MDAsMHhiMSwweGMzLDB4MmMsMHg1MCwweDA5LDB4MTQsMHg4MiwweGM0LDB4MzAsMHg5MSwweGM3IH19LAorIHsxNiwgMHhkYWQwLCAwLCB7MHgyNCwweDYwLDB4MDgsMHgxYywweDgyLDB4MDcsMHgzNCwweDkxLDB4NGMsMHgwNCwweDQzLDB4MGEsMHgxMCwweGMyLDB4ODQsMHgwNCB9fSwKKyB7MTYsIDB4ZGFlMCwgMCwgezB4OTEsMHg4NCwweDI0LDB4NTIsMHgwYiwweDE4LDB4MDIsMHhjNCwweDI0LDB4YjEsMHhjMywweDJjLDB4NDAsMHgwYSwweDEwLDB4ODAgfX0sCisgezE2LCAweGRhZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweDAyLDB4MDEsMHhjNCwweDgwIH19LAorIHsxNiwgMHhkYjAwLCAwLCB7MHg2MCwweDIwLDB4MWMsMHgwOCwweDQ0LDB4MjIsMHgwMSwweGMwLDB4ODQsMHg1MCwweDAxLDB4OWMsMHgwOCwweDA3LDB4MGEsMHgwMSB9fSwKKyB7MTYsIDB4ZGIxMCwgMCwgezB4YzAsMHg4NCwweDcyLDB4MjAsMHgxYywweGM4LDB4MDQsMHgxMiwweDExLDB4NDQsMHg4MCwweDQxLDB4MDEsMHgxYywweDgwLDB4MDcgfX0sCisgezE2LCAweGRiMjAsIDAsIHsweDA4LDB4MTEsMHhjNCwweDAwLDB4NzAsMHgwMCwweDEwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkYjMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHg4NiwweDJjLDB4MjEsMHg0YSwweDBjLDB4NTIsMHgwMiwweDFjLDB4ODAsMHgwNCwweDIwLDB4MjEsMHhjYSB9fSwKKyB7MTYsIDB4ZGI0MCwgMCwgezB4MTAsMHg2MiwweDAyLDB4MWMsMHg4MSwweDQ3LDB4MDQsMHgyMSwweGMzLDB4MjAsMHg1MSwweDAxLDB4MWMsMHg4MCwweDA0LDB4MmMgfX0sCisgezE2LCAweGRiNTAsIDAsIHsweDAxLDB4Y2IsMHgwNCwweDUyLDB4MDMsMHgxNCwweDQwLDB4YzcsMHgyMCwweDMxLDB4YzgsMHgwYywweDUwLDB4MjIsMHgxMCwweDgwIH19LAorIHsxNiwgMHhkYjYwLCAwLCB7MHgwMSwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDYsMHgyMCwweDAxLDB4ODksMHgwMCB9fSwKKyB7MTYsIDB4ZGI3MCwgMCwgezB4NTIsMHgwMCwweDE0LDB4ODAsMHgwNCwweDI4LDB4MDEsMHg0NSwweDA0LDB4NjIsMHgwMCwweDEwLDB4ODAsMHg0NiwweDMwLDB4MTEgfX0sCisgezE2LCAweGRiODAsIDAsIHsweDBkLDB4MDAsMHg0MiwweDAxLDB4MTQsMHhjMCwweDQ0LDB4MDAsMHgxMSwweDA1LDB4MDAsMHg1MCwweDAwLDB4MWMsMHgwMCwweDQ0IH19LAorIHsxNiwgMHhkYjkwLCAwLCB7MHgyOCwweDAxLDB4NDksMHgwMCwweDcwLDB4MDAsMHgxMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGJhMCwgMCwgezB4MDAsMHgwMCwweDA4LDB4YzAsMHgwMiwweDMwLDB4MGMsMHg4YywweDMwLDB4MjIsMHgwOCwweDg4LDB4YzIsMHgyNiwweDAwLDB4MDggfX0sCisgezE2LCAweGRiYjAsIDAsIHsweDgwLDB4MjAsMHgyMiwweDBjLDB4ODgsMHg4MSwweDAyLDB4MTAsMHhjNCwweDgwLDB4MTAsMHgyMiwweDBjLDB4MDgsMHg0MCwweDAyIH19LAorIHsxNiwgMHhkYmMwLCAwLCB7MHgxMCwweDQ4LDB4ODgsMHgwMSwweDIzLDB4MDQsMHhjOCwweDQyLDB4MDIsMHgxMCwweDQ2LDB4OGMsMHgxMiwweDIyLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGJkMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDAwLDB4MDAsMHg4MCwweGM4LDB4MjAgfX0sCisgezE2LCAweGRiZTAsIDAsIHsweDExLDB4MDksMHgwMCwweDgwLDB4NDEsMHgxMCwweDkwLDB4MDgsMHgyNCwweDMwLDB4MDgsMHgwNCwweDQyLDB4NDEsMHgwMCwweDkwIH19LAorIHsxNiwgMHhkYmYwLCAwLCB7MHhjNCwweDIwLDB4MDAsMHgwOCwweDA0LDB4NDIsMHgwMCwweDEwLDB4ODAsMHg0YywweDIwLDB4MjMsMHgwOSwweDA0LDB4YzIsMHg0MyB9fSwKKyB7MTYsIDB4ZGMwMCwgMCwgezB4MzAsMHg4MCwweDQwLDB4MjAsMHgxMSwweDA4LDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRjMTAsIDAsIHsweDA4LDB4MDAsMHgwOCwweDgxLDB4MDIsMHgyMCwweGM5LDB4OGMsMHgxMiwweDIwLDB4MDQsMHg0OCwweDQxLDB4MjIsMHgwMCwweDA5IH19LAorIHsxNiwgMHhkYzIwLCAwLCB7MHg4OCwweDMwLDB4MjAsMHgwYywweDg4LDB4MDMsMHgwZSwweDAwLDB4NDksMHg4YywweDEwLDB4MjIsMHgwYywweDg4LDB4NDAsMHgyZSB9fSwKKyB7MTYsIDB4ZGMzMCwgMCwgezB4MDAsMHhjOSwweDg0LDB4MTMsMHgyMSwweDA0LDB4YzgsMHhjMywweDIyLDB4MDAsMHhjYiwweDhjLDB4MzIsMHgyMiwweDAwLDB4MDAgfX0sCisgezE2LCAweGRjNDAsIDAsIHsweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDgsMHgwMSwweDAyLDB4MDAsMHg0YiwweDgwIH19LAorIHsxNiwgMHhkYzUwLCAwLCB7MHgzMiwweDIxLDB4MDgsMHg4OCwweDQxLDB4MDIsMHgxMCwweDBmLDB4ODAsMHgxMCwweDIxLDB4OGMsMHgwOCwweDQxLDB4MDIsMHgwMCB9fSwKKyB7MTYsIDB4ZGM2MCwgMCwgezB4ODcsMHg4NCwweDEwLDB4MjAsMHgwNCwweDg4LDB4MDAsMHgwMiwweDAwLDB4NDcsMHg4MCwweDEwLDB4MjEsMHgwYywweDg4LDB4NDEgfX0sCisgezE2LCAweGRjNzAsIDAsIHsweDE2LDB4MTAsMHg0NiwweDgwLDB4MzAsMHgyMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkYzgwLCAwLCB7MHgwMCwweDAwLDB4MGEsMHhjNCwweDIyLDB4YTEsMHgwOCwweGE0LDB4NzIsMHgyYSwweDE0LDB4MGEsMHg4NSwweDAyLDB4ODEsMHg4NCB9fSwKKyB7MTYsIDB4ZGM5MCwgMCwgezB4YTAsMHg0MiwweDI4LDB4MWMsMHgwYSwweGM1LDB4MDIsMHg5MSwweDQwLDB4YjgsMHg3MywweDI5LDB4MTAsMHhjYSwweGM0LDB4MDIgfX0sCisgezE2LCAweGRjYTAsIDAsIHsweGExLDB4ODAsMHhhNCwweDQyLDB4MmEsMHgxNCwweGNhLDB4ODUsMHgyMiwweDkxLDB4ODAsMHhhOCwweDcwLDB4MmEsMHgxOCwweDAyIH19LAorIHsxNiwgMHhkY2IwLCAwLCB7MHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDA4LDB4MDQsMHgxZSwweDAxLDB4YzgsMHg4MCB9fSwKKyB7MTYsIDB4ZGNjMCwgMCwgezB4NDMsMHgyMCwweDE4LDB4MDgsMHg0NSwweDNlLDB4MDEsMHgwYywweDgwLDB4NjEsMHgyMCwweDljLDB4NDgsMHgwNiwweDEyLDB4ODEgfX0sCisgezE2LCAweGRjZDAsIDAsIHsweGMwLDB4ODAsMHg3MywweDAwLDB4MTAsMHg4OCwweDA2LDB4MDIsMHgwMSwweGM4LDB4MDAsMHg0MiwweDIwLDB4MTAsMHhjOCwweDA3IH19LAorIHsxNiwgMHhkY2UwLCAwLCB7MHgwMiwweDExLDB4Y2QsMHg4MCwweDUxLDB4MjAsMHgxNCwweDgyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGNmMCwgMCwgezB4MDgsMHgwMCwweDAwLDB4YzQsMHgyNCwweDIxLDB4YzgsMHgwYywweDQyLDB4MDEsMHgxNCwweDAwLDB4MDAsMHgyOCwweDEwLDB4NGMgfX0sCisgezE2LCAweGRkMDAsIDAsIHsweDA4LDB4NTIsMHgwMiwweDE0LDB4ODAsMHg0NSwweDI0LDB4MjksMHg0MCwweDA0LDB4NzIsMHgwMCwweDEwLDB4YzAsMHgwNSwweDI0IH19LAorIHsxNiwgMHhkZDEwLCAwLCB7MHgxMSwweDQ0LDB4MDgsMHg0MywweDAxLDB4MTQsMHhjMCwweDQ3LDB4MjQsMHgyMCwweDQ4LDB4MDgsMHg3MiwweDAyLDB4MTAsMHgwMCB9fSwKKyB7MTYsIDB4ZGQyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHgwMCwweDA3LDB4MTAsMHgxMSwweDA2LDB4MDAgfX0sCisgezE2LCAweGRkMzAsIDAsIHsweDcyLDB4MDAsMHgxOCwweGQwLDB4NDYsMHgyMCwweDAxLDB4NGQsMHgwMCwweDcxLDB4NDAsMHgxMCwweDUwLDB4MDcsMHgzMCwweDExIH19LAorIHsxNiwgMHhkZDQwLCAwLCB7MHhjMywweDAwLDB4NzEsMHg0MSwweDEwLDB4YjAsMHgwNSwweDJjLDB4MDEsMHg0OSwweDAwLDB4NDMsMHgwMCwweDFjLDB4NTAsMHg0NSB9fSwKKyB7MTYsIDB4ZGQ1MCwgMCwgezB4MzAsMHgwMSwweDhjLDB4MDAsMHg2MSwweDQwLDB4MTgsMHg0MiwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRkNjAsIDAsIHsweDAwLDB4MDAsMHgzMCwweGM1LDB4MDAsMHgyMSwweGMwLDB4MGMsMHg0MCwweDAxLDB4MTQsMHgxMiwweDQ0LDB4MDQsMHgzMSwweDg0IH19LAorIHsxNiwgMHhkZDcwLCAwLCB7MHgyNCwweDQwLDB4ODAsMHgxNCwweGExLDB4YzcsMHgwMCwweDAxLDB4NDAsMHgwOCwweDQwLDB4MDEsMHgxNCwweDIwLDB4MDUsMHgyMCB9fSwKKyB7MTYsIDB4ZGQ4MCwgMCwgezB4MTEsMHhjMCwweDAyLDB4NjAsMHg4MiwweDE4LDB4MDAsMHg4NywweDI0LDB4MTEsMHg0MCwweDA4LDB4NDAsMHg0MiwweDEwLDB4MDIgfX0sCisgezE2LCAweGRkOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMCwweDBjLDB4ODAsMHhjNCwweDI0IH19LAorIHsxNiwgMHhkZGEwLCAwLCB7MHgzMSwweDQ4LDB4MGMsMHgwMCwweDAxLDB4MDgsMHhjMSwweDQxLDB4MDAsMHgwMCwweDQ5LDB4MDAsMHg0MiwweDAzLDB4MDgsMHgxMCB9fSwKKyB7MTYsIDB4ZGRiMCwgMCwgezB4ODAsMHgyMCwweDIxLDB4MDksMHgwYywweDAyLDB4MDIsMHgxOCwweDgwLDB4YzEsMHgyNCwweDMwLDB4MDgsMHgwYywweDQyLDB4MDEgfX0sCisgezE2LCAweGRkYzAsIDAsIHsweDEwLDB4ODAsMHg4MywweDIwLDB4MTEsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZGQwLCAwLCB7MHgwMCwweDAwLDB4MTAsMHhjMSwweDA0LDB4MjAsMHg0OCwweDBjLDB4MTIsMHg0MiwweDA0LDB4MDAsMHg4MywweDAwLDB4MzEsMHg0OCB9fSwKKyB7MTYsIDB4ZGRlMCwgMCwgezB4MDAsMHgwMiwweDQxLDB4MDQsMHhhMCwweDA3LDB4MGMsMHgyMCwweDQwLDB4MDAsMHgxMiwweGMyLDB4MGMsMHg4MCwweGMxLDB4MjAgfX0sCisgezE2LCAweGRkZjAsIDAsIHsweDIwLDB4YzgsMHgwMCwweDEyLDB4YzEsMHgwYywweGIwLDB4NDEsMHgyMCwweDAwLDB4NDksMHgwOCwweDAyLDB4NDIsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZTAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDgwLDB4MDEsMHgwMCwweDEwLDB4ODEsMHgwMCB9fSwKKyB7MTYsIDB4ZGUxMCwgMCwgezB4MzAsMHg0MCwweDA4LDB4MjAsMHgwMywweDAwLDB4MTAsMHhjMSwweDIwLDB4MDIsMHgwMCwweDA0LDB4ODAsMHg0MCwweDMwLDB4OTAgfX0sCisgezE2LCAweGRlMjAsIDAsIHsweDAxLDB4MTQsMHgwMiwweDQwLDB4MDQsMHg4MCwweDQwLDB4MjAsMHgwMCwweDA5LDB4MDQsMHgzMiwweDAxLDB4MDgsMHhhMCwweDAzIH19LAorIHsxNiwgMHhkZTMwLCAwLCB7MHgwNCwweDEwLDB4MDgsMHgwMCwweDIyLDB4NDAsMHgwMCwweDAwLDB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGU0MCwgMCwgezB4MDAsMHgwMCwweDMwLDB4MDAsMHgxMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwweGYwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRlNTAsIDAsIHsweDAwLDB4MTAsMHg4MCwweDAwLDB4ZjAsMHgwMCwweDgwLDB4ODAsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4ZjAsMHgxMCwweGEwIH19LAorIHsxNiwgMHhkZTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHhmMCwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDgwLDB4MDAsMHhjYyB9fSwKKyB7MTYsIDB4ZGU3MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNjLDB4M2MsMHgxMCwweGEwLDB4ODAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRlODAsIDAsIHsweDAwLDB4MDAsMHgxMCwweDkwLDB4ODAsMHhjMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDkwLDB4ODAsMHg4MCwweDAwIH19LAorIHsxNiwgMHhkZTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4OTAsMHg4MCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4OTAsMHg4MCB9fSwKKyB7MTYsIDB4ZGVhMCwgMCwgezB4ZTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg4YywweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRlYjAsIDAsIHsweDAwLDB4MDAsMHgwOSwweDRkLDB4YjEsMHhlOSwweDAwLDB4MjYsMHg0MCwweDJhLDB4N2YsMHhlMywweGYyLDB4NTQsMHg5OCwweGMwIH19LAorIHsxNiwgMHhkZWMwLCAwLCB7MHgzZiwweGU2LDB4NDAsMHgwMCwweDAxLDB4NDIsMHg5MSwweGQwLDB4YzAsMHgxMywweGU1LDB4ODcsMHg2MywweDgzLDB4YjgsMHhjZCB9fSwKKyB7MTYsIDB4ZGVkMCwgMCwgezB4ZjksMHgwMCwweDI2LDB4N2YsMHgwMCwweDAwLDB4MzUsMHgyZSwweGQ1LDB4MDMsMHg0MCwweDNmLDB4ZDksMHhiZiwweGIxLDB4ODAgfX0sCisgezE2LCAweGRlZTAsIDAsIHsweDAxLDB4ZjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMiwweDE2LDB4MTQsMHgwMCwweDFjIH19LAorIHsxNiwgMHhkZWYwLCAwLCB7MHhhOCwweDNmLDB4ODgsMHgxNiwweDAwLDB4ODAsMHg4NCwweDgwLDB4MzcsMHg5ZSwweGJhLDB4YTAsMHg1MCwweDEwLDB4MDIsMHgxMiB9fSwKKyB7MTYsIDB4ZGYwMCwgMCwgezB4MDAsMHgxNywweDk2LDB4OTcsMHgyNiwweDUwLDB4MTAsMHgxMCwweDgyLDB4ODAsMHgxZSwweDgwLDB4ZGUsMHhiZSwweDk0LDB4MTQgfX0sCisgezE2LCAweGRmMTAsIDAsIHsweDAyLDB4MTAsMHg4MCwweDE3LDB4YmUsMHg4MSwweDk0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZjIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweGE4LDB4NDQsMHg5NCwweDI4LDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwOCB9fSwKKyB7MTYsIDB4ZGYzMCwgMCwgezB4OTQsMHgyMSwweDQ0LDB4NTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4ODQsMHg0MiwweDQxLDB4MDEsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRmNDAsIDAsIHsweDAwLDB4MDgsMHhhMSwweDcyLDB4MjMsMHg0MSwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHhiOCwweDAxLDB4NzgsMHgzMiwweDQwIH19LAorIHsxNiwgMHhkZjUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCB9fSwKKyB7MTYsIDB4ZGY2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4M2YsMHhmNywweGZlLDB4ZDcsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGQ3LDB4ZGYgfX0sCisgezE2LCAweGRmNzAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4N2YsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzNywweDdmIH19LAorIHsxNiwgMHhkZjgwLCAwLCB7MHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGY5MCwgMCwgezB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDFlLDB4ZmYsMHhkZSwweDc3LDB4YzAgfX0sCisgezE2LCAweGRmYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MWYsMHhlZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmIH19LAorIHsxNiwgMHhkZmIwLCAwLCB7MHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHg3ZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGZjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfX0sCisgezE2LCAweGRmZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDFmLDB4Y2YsMHhkZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGJmIH19LAorIHsxNiwgMHhkZmUwLCAwLCB7MHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4YmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiB9fSwKKyB7MTYsIDB4ZGZmMCwgMCwgezB4ZmYsMHhiZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUwMDAsIDAsIHsweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwIH19LAorIHsxNiwgMHhlMDEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDFmLDB4ZmYsMHgxZiB9fSwKKyB7MTYsIDB4ZTAyMCwgMCwgezB4N2YsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmYsMHhkZiwweGZmLDB4Y2YsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUwMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH19LAorIHsxNiwgMHhlMDQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgzZiwweGJmLDB4YWYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiB9fSwKKyB7MTYsIDB4ZTA1MCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNlLDB4ZGUsMHg3ZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYgfX0sCisgezE2LCAweGUwNjAsIDAsIHsweGZmLDB4ZjcsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMDcwLCAwLCB7MHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHg3ZiwweGZmLDB4ZmYsMHhjMCB9fSwKKyB7MTYsIDB4ZTA4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZlLDB4YmUgfX0sCisgezE2LCAweGUwOTAsIDAsIHsweDdmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNlLDB4ZmYsMHhkNywweDdmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMGEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTBiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUwYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMGQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTBlMCwgMCwgezB4MzAsMHgwMCwweDIwLDB4MDEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHg0MywweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUwZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMTAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTExMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUxMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMTMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTE0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUxNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUxODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTFhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUxYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMWMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTFkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUxZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTIwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUyMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMjIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTIzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUyNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMjUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTI2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUyNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMjgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTI5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUyYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMmIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTJjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUyZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMmUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTJmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUzMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMzEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTMyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUzMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMzQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTM1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUzNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMzcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTM4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUzOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlM2EwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTNiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUzYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlM2QwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTNlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUzZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNDAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTQxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU0MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNDMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTQ0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU0NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNDYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTQ3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU0ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNDkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTRhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU0YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNGMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTRkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU0ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNGYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTUwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU1MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTUzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU1NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTU2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU1NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTU5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU1YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTVjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU1ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNWUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU2MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNjEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTYyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU2MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNjQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTY1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU2NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNjcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTY4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU2OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNmEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTZiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU2YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNmQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTZlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU2ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNzAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTcxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU3MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNzMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTc0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU3NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNzYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTc3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU3ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNzkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTdhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU3YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlN2MwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTdkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU3ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlN2YwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTgwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU4MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlODIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTgzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU4NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlODUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTg2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU4NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlODgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTg5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU4YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOGIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZThjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU4ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOGUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZThmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU5MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOTEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTkyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU5MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTk1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU5NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOTcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTk4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU5OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOWEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTliMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU5YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOWQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTllMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU5ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYTAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWExMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVhMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYTMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWE0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVhNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVhODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWFhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVhYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYWMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWFkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVhZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWIwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGViMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYjIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWIzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGViNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYjUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWI2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGViNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYjgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWI5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGViYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYmIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWJjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGViZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYmUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWJmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVjMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYzEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWMyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVjMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYzQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWM1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVjNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYzcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWM4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVjOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlY2EwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWNiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVjYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlY2QwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWNlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVjZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZDAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWQxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVkMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZDMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWQ0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVkNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZDYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWQ3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVkODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZDkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWRhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVkYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZGMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWRkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVkZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZGYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWUwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVlMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWUzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVlNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWU2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVlNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWU5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVlYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWVjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVlZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZWUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVmMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZjEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWYyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4MjAsMHgwMSwweDAyLDB4MDIsMHgwMCwweDAwLDB4MzAsMHgwMCwweDQzLDB4ODAgfX0sCisgezE2LCAweGVmMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZjQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWY1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVmNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZjcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWY4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVmOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZmEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWZiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVmYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZmQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWZlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVmZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMDAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjAxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYwMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMDMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjA0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYwNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMDYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjA3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYwODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMDkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjBhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYwYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMGMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjBkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYwZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMGYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYxMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjEzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYxNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYxNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjE5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYxYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjFjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYxZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMWUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYyMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMjEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjIyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYyMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMjQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjI1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYyNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMjcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjI4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYyOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMmEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjJiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYyYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMmQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjJlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYyZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMzAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjMxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYzMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMzMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjM0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYzNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMzYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYzODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMzkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjNhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYzYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmM2MwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjNkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYzZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmM2YwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY0MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNDIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjQzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY0NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNDUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY0NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNDgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjQ5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY0YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNGIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjRjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY0ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNGUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjRmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY1MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNTEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjUyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY1MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjU1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY1NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNTcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjU4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY1OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNWEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjViMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY1YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNWQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjVlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY1ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNjAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjYxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY2MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNjMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjY0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY2NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNjYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY2ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNjkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjZhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY2YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNmMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjZkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY2ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNmYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjcwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY3MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNzIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjczMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY3NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNzUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjc2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY3NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNzgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjc5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY3YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmN2IwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjdjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY3ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmN2UwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjdmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY4MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmODEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjgyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY4MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmODQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjg1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY4NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmODcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjg4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY4OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOGEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjhiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY4YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOGQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjhlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY4ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOTAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjkxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY5MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOTMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjk0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY5NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjk3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY5ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjlhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY5YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOWMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjlkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY5ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZhMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmEzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZhNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZhNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmE5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZhYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmFjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZhZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYWUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZiMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYjEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmIyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZiMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYjQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmI1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZiNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYjcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmI4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZiOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYmEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmJiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZiYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYmQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmJlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZiZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYzAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmMxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZjMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYzMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmM0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZjNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYzYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZjODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYzkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmNhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZjYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmY2MwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmNkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZjZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmY2YwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZkMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmZDIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmQzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4NWYsMHhhNywweDMwLDB4MDAsMHg4MCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDMgfX0sCisgezE2LCAweGZkNDAsIDAsIHsweDMwLDB4MDAsMHg0MCwweDBlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmZDUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZkNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHg4MCwweDAxIH19LAorIHsxNiwgMHhmZDgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwNSwweDMwLDB4MDAsMHhhMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMSB9fSwKKyB7MTYsIDB4ZmQ5MCwgMCwgezB4MDAsMHgwMCwweDZiLDB4OTcsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezQsIDB4ZmRhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezAgLCAweDAwMDAsIDEsIHswfX0KK307CisvLyBWRVJTSU9OPSAxLjAuMC4xOTEKKy8vIERBVEU9IDIwMDJvY3QyOAorc3RhdGljIElOVEVMX0hFWF9SRUNPUkQgZ19IZXhTcGRpZkZ3NjJbXSA9IHsKKyAgezMsMHgwMDAwLDAsezB4MDIsMHg0NSwweGY5fX0sCisgeyAzLDB4MDAwMywwLHsweDAyLDB4MGYsMHhmZH19LAorIHsgMywweDAwMGIsMCx7MHgwMiwweDRkLDB4OWJ9fSwKKyB7IDMsMHgwMDEzLDAsezB4MDIsMHgxNywweGZkfX0sCisgeyAzLDB4MDAxYiwwLHsweDAyLDB4NGQsMHg5ZX19LAorIHsgMywweDAwMjMsMCx7MHgwMiwweDRkLDB4NzV9fSwKKyB7IDMsMHgwMDJiLDAsezB4MDIsMHg0NiwweGY3fX0sCisgeyAzLDB4MDAzMywwLHsweDAyLDB4NGQsMHg2Y319LAorIHsgMywweDAwM2IsMCx7MHgwMiwweDRkLDB4N2N9fSwKKyB7IDMsMHgwMDQzLDAsezB4MDIsMHg0OSwweDAwfX0sCisgeyAzLDB4MDA0YiwwLHsweDAyLDB4NGQsMHg4Zn19LAorIHsgMywweDAwNTMsMCx7MHgwMiwweDRkLDB4ODN9fSwKKyB7IDMsMHgwMDViLDAsezB4MDIsMHg0ZCwweDg5fX0sCisgeyAzLDB4MDA2MywwLHsweDAyLDB4NGQsMHg5M319LAorIHsxNiwweDA1MDAsMCx7MHgxMiwweDAxLDB4MTAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDQwLDB4NmEsMHgwOCwweDExLDB4MDEsMHgwMCwweDAxLDB4MDEsMHgwMn19LAorIHsxNiwweDA1MTAsMCx7MHgwMCwweDAxLDB4MDksMHgwMiwweGFjLDB4MDEsMHgwMywweDAxLDB4MDAsMHg4MCwweDMyLDB4MDksMHgwNCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDA1MjAsMCx7MHgwMSwweDAxLDB4MDAsMHgwMCwweDBhLDB4MjQsMHgwMSwweDAwLDB4MDEsMHg1NiwweDAwLDB4MDIsMHgwMSwweDAyLDB4MGMsMHgyNH19LAorIHsxNiwweDA1MzAsMCx7MHgwMiwweDAxLDB4MDEsMHgwMSwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4MjQsMHgwNiwweDA1LDB4MDEsMHgwMn19LAorIHsxNiwweDA1NDAsMCx7MHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA5LDB4MjQsMHgwMywweDAyLDB4MDQsMHgwMywweDAwLDB4MDUsMHgwMH19LAorIHsxNiwweDA1NTAsMCx7MHgwYywweDI0LDB4MDIsMHgwMywweDA1LDB4MDIsMHgwMCwweDA2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNSwweDI0LDB4MDYsMHgwNn19LAorIHsxNiwweDA1NjAsMCx7MHgwMywweDAyLDB4MDAsMHgwMCwweDAzLDB4MDAsMHgwMywweDAwLDB4MDMsMHgwMCwweDAzLDB4MDAsMHgwMywweDAwLDB4MDMsMHgwMH19LAorIHsxNiwweDA1NzAsMCx7MHgwMCwweDA5LDB4MjQsMHgwMywweDA0LDB4MDEsMHgwMSwweDAwLDB4MDYsMHgwMCwweDA5LDB4MDQsMHgwMSwweDAwLDB4MDAsMHgwMX19LAorIHsxNiwweDA1ODAsMCx7MHgwMiwweDAwLDB4MDAsMHgwOSwweDA0LDB4MDEsMHgwMSwweDAyLDB4MDEsMHgwMiwweDAwLDB4MDAsMHgwNywweDI0LDB4MDEsMHgwMX19LAorIHsxNiwweDA1OTAsMCx7MHgwMCwweDAxLDB4MDAsMHgxMSwweDI0LDB4MDIsMHgwMSwweDAyLDB4MDIsMHgxMCwweDAzLDB4NDQsMHhhYywweDAwLDB4ODAsMHhiYn19LAorIHsxNiwweDA1YTAsMCx7MHgwMCwweDAwLDB4NzcsMHgwMSwweDA5LDB4MDUsMHgwYSwweDA1LDB4ODQsMHgwMSwweDAxLDB4MDAsMHg4ZiwweDA3LDB4MjUsMHgwMX19LAorIHsxNiwweDA1YjAsMCx7MHgwMSwweDAwLDB4MDAsMHgwMCwweDA5LDB4MDUsMHg4ZiwweDAxLDB4MDMsMHgwMCwweDAxLDB4MDUsMHgwMCwweDA5LDB4MDQsMHgwMX19LAorIHsxNiwweDA1YzAsMCx7MHgwMiwweDAyLDB4MDEsMHgwMiwweDAwLDB4MDAsMHgwNywweDI0LDB4MDEsMHgwMSwweDAwLDB4MDEsMHgwMCwweDExLDB4MjQsMHgwMn19LAorIHsxNiwweDA1ZDAsMCx7MHgwMSwweDAyLDB4MDMsMHgxOCwweDAzLDB4NDQsMHhhYywweDAwLDB4ODAsMHhiYiwweDAwLDB4MDAsMHg3NywweDAxLDB4MDksMHgwNX19LAorIHsxNiwweDA1ZTAsMCx7MHgwYSwweDA1LDB4NDYsMHgwMiwweDAxLDB4MDAsMHg4ZiwweDA3LDB4MjUsMHgwMSwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDksMHgwNX19LAorIHsxNiwweDA1ZjAsMCx7MHg4ZiwweDAxLDB4MDMsMHgwMCwweDAxLDB4MDUsMHgwMCwweDA5LDB4MDQsMHgwMiwweDAwLDB4MDAsMHgwMSwweDAyLDB4MDAsMHgwMH19LAorIHsxNiwweDA2MDAsMCx7MHgwOSwweDA0LDB4MDIsMHgwMSwweDAxLDB4MDEsMHgwMiwweDAwLDB4MDAsMHgwNywweDI0LDB4MDEsMHgwNCwweDAwLDB4MDEsMHgwMH19LAorIHsxNiwweDA2MTAsMCx7MHgwZSwweDI0LDB4MDIsMHgwMSwweDA2LDB4MDIsMHgxMCwweDAyLDB4NDQsMHhhYywweDAwLDB4ODAsMHhiYiwweDAwLDB4MDksMHgwNX19LAorIHsxNiwweDA2MjAsMCx7MHg4YywweDA1LDB4NGMsMHgwMiwweDAxLDB4MDAsMHgwMCwweDA3LDB4MjUsMHgwMSwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDksMHgwNH19LAorIHsxNiwweDA2MzAsMCx7MHgwMiwweDAyLDB4MDEsMHgwMSwweDAyLDB4MDAsMHgwMCwweDA3LDB4MjQsMHgwMSwweDA0LDB4MDAsMHgwMSwweDAwLDB4MGUsMHgyNH19LAorIHsxNiwweDA2NDAsMCx7MHgwMiwweDAxLDB4MDYsMHgwMywweDE4LDB4MDIsMHg0NCwweGFjLDB4MDAsMHg4MCwweGJiLDB4MDAsMHgwOSwweDA1LDB4OGMsMHgwNX19LAorIHsxNiwweDA2NTAsMCx7MHg3MiwweDAzLDB4MDEsMHgwMCwweDAwLDB4MDcsMHgyNSwweDAxLDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwOSwweDA0LDB4MDIsMHgwM319LAorIHsxNiwweDA2NjAsMCx7MHgwMSwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDcsMHgyNCwweDAxLDB4MDQsMHgwMCwweDAxLDB4MDAsMHgxMSwweDI0LDB4MDIsMHgwMX19LAorIHsxNiwweDA2NzAsMCx7MHgwMiwweDAyLDB4MTAsMHgwMywweDQ0LDB4YWMsMHgwMCwweDgwLDB4YmIsMHgwMCwweDAwLDB4NzcsMHgwMSwweDA5LDB4MDUsMHg4Y319LAorIHsxNiwweDA2ODAsMCx7MHgwNSwweDg0LDB4MDEsMHgwMSwweDAwLDB4MDAsMHgwNywweDI1LDB4MDEsMHgwMCwweDAyLDB4MDAsMHgwMCwweDA5LDB4MDQsMHgwMn19LAorIHsxNiwweDA2OTAsMCx7MHgwNCwweDAxLDB4MDEsMHgwMiwweDAwLDB4MDAsMHgwNywweDI0LDB4MDEsMHgwNCwweDAwLDB4MDEsMHgwMCwweDExLDB4MjQsMHgwMn19LAorIHsxNiwweDA2YTAsMCx7MHgwMSwweDAyLDB4MDMsMHgxOCwweDAzLDB4NDQsMHhhYywweDAwLDB4ODAsMHhiYiwweDAwLDB4MDAsMHg3NywweDAxLDB4MDksMHgwNX19LAorIHsxNiwweDA2YjAsMCx7MHg4YywweDA1LDB4NDYsMHgwMiwweDAxLDB4MDAsMHgwMCwweDA3LDB4MjUsMHgwMSwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDQsMHgwM319LAorIHsxNiwweDA2YzAsMCx7MHgwOSwweDA0LDB4MTgsMHgwMywweDQ1LDB4MDAsMHg2ZCwweDAwLDB4NjEsMHgwMCwweDY3LDB4MDAsMHg2OSwweDAwLDB4NjMsMHgwMH19LAorIHsxNiwweDA2ZDAsMCx7MHgyMCwweDAwLDB4NDcsMHgwMCwweDZkLDB4MDAsMHg2MiwweDAwLDB4NDgsMHgwMCwweDIyLDB4MDMsMHg0NSwweDAwLDB4NmQsMHgwMH19LAorIHsxNiwweDA2ZTAsMCx7MHg2MSwweDAwLDB4NjcsMHgwMCwweDY5LDB4MDAsMHg2MywweDAwLDB4MjAsMHgwMCwweDQ1LDB4MDAsMHg0ZCwweDAwLDB4NDksMHgwMH19LAorIHsxNiwweDA2ZjAsMCx7MHgyMCwweDAwLDB4MzYsMHgwMCwweDdjLDB4MDAsMHgzMiwweDAwLDB4MjAsMHgwMCwweDZkLDB4MDAsMHgyYSwweDAzLDB4NDMsMHgwMH19LAorIHsxNiwweDA3MDAsMCx7MHg2ZiwweDAwLDB4NmUsMHgwMCwweDY2LDB4MDAsMHg2OSwweDAwLDB4NjcsMHgwMCwweDc1LDB4MDAsMHg3MiwweDAwLDB4NjEsMHgwMH19LAorIHsxNiwweDA3MTAsMCx7MHg3NCwweDAwLDB4NjksMHgwMCwweDZmLDB4MDAsMHg2ZSwweDAwLDB4MjAsMHgwMCwweDUzLDB4MDAsMHg3NCwweDAwLDB4NzIsMHgwMH19LAorIHsxNiwweDA3MjAsMCx7MHg2OSwweDAwLDB4NmUsMHgwMCwweDY3LDB4MDAsMHgyMiwweDAzLDB4NDksMHgwMCwweDZlLDB4MDAsMHg3NCwweDAwLDB4NjUsMHgwMH19LAorIHsxNiwweDA3MzAsMCx7MHg3MiwweDAwLDB4NjYsMHgwMCwweDYxLDB4MDAsMHg2MywweDAwLDB4NjUsMHgwMCwweDIwLDB4MDAsMHg1MywweDAwLDB4NzQsMHgwMH19LAorIHsxMCwweDA3NDAsMCx7MHg3MiwweDAwLDB4NjksMHgwMCwweDZlLDB4MDAsMHg2NywweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDA3NGEsMCx7MHg5MCwweDc2LDB4OWEsMHg3NCwweDAyLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg5MSwweGYwLDB4YTMsMHhmMCwweDkwLDB4NzYsMHg5MH19LAorIHsxNiwweDA3NWEsMCx7MHhmMCwweDkwLDB4NzYsMHg5MywweGYwLDB4OTAsMHg3NiwweDk2LDB4NzQsMHgwMywweGYwLDB4OTAsMHg4MCwweDAzLDB4ZjAsMHhlNH19LAorIHsxNiwweDA3NmEsMCx7MHg5MCwweDc2LDB4OTcsMHhmMCwweDkwLDB4ODAsMHgwMiwweGYwLDB4OTAsMHg3NiwweDk0LDB4MDQsMHhmMCwweDkwLDB4ODAsMHgwMH19LAorIHsxNiwweDA3N2EsMCx7MHhmMCwweGU0LDB4OTAsMHg3NiwweDhlLDB4ZjAsMHg5MCwweDc2LDB4MWEsMHhmMCwweDkwLDB4NzYsMHg5NSwweDA0LDB4ZjAsMHhjMn19LAorIHsxNiwweDA3OGEsMCx7MHgyZSwweDkwLDB4N2YsMHg5YiwweGUwLDB4ZmYsMHg1NCwweDEwLDB4ZmYsMHg3MCwweDAyLDB4YzIsMHgzZiwweDkwLDB4N2YsMHg5Yn19LAorIHsxNiwweDA3OWEsMCx7MHhlMCwweGZmLDB4NTQsMHgxMCwweGZlLDB4ZmYsMHhiZSwweDEwLDB4MDIsMHhkMiwweDNmLDB4OTAsMHg3ZiwweDliLDB4ZTAsMHhmZn19LAorIHsxNiwweDA3YWEsMCx7MHg1NCwweDIwLDB4ZmYsMHg3MCwweDAyLDB4YzIsMHgzZSwweDkwLDB4N2YsMHg5YiwweGUwLDB4ZmYsMHg1NCwweDIwLDB4ZmUsMHhmZn19LAorIHsxNiwweDA3YmEsMCx7MHhiZSwweDIwLDB4MDIsMHhkMiwweDNlLDB4MzAsMHgzZiwweDA5LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MH19LAorIHsxNiwweDA3Y2EsMCx7MHgwNywweDkwLDB4NzYsMHg5NywweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg5MCwweDgwLDB4MDIsMHhmMH19LAorIHsxNiwweDA3ZGEsMCx7MHgzMCwweDNlLDB4MDksMHg5MCwweDc2LDB4OTUsMHhlMCwweDQ0LDB4MDQsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc2LDB4OTUsMHhlMH19LAorIHsxNiwweDA3ZWEsMCx7MHg1NCwweGZiLDB4ZjAsMHg5MCwweDc2LDB4OTUsMHhlMCwweDkwLDB4ODAsMHgwMSwweGYwLDB4YTIsMHgzZSwweDkyLDB4NDAsMHhhMn19LAorIHsgMywweDA3ZmEsMCx7MHgzZiwweDkyLDB4NDF9fSwKKyB7IDEsMHgwN2ZkLDAsezB4MjJ9fSwKKyB7IDIsMHgwN2ZlLDAsezB4ZDMsMHgyMn19LAorIHsxNiwweDA4MDAsMCx7MHhlNCwweDkwLDB4NzYsMHgzMSwweGYwLDB4OTAsMHg3NiwweDMxLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZn19LAorIHsxNiwweDA4MTAsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDdmLDB4ZWQsMHhlMCwweGZkLDB4ZWUsMHg2ZH19LAorIHsxNiwweDA4MjAsMCx7MHg2MCwweDBlLDB4ZWYsMHhjMywweDk0LDB4MGIsMHg1MCwweDA4LDB4OTAsMHg3NiwweDMxLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhkNX19LAorIHsxNiwweDA4MzAsMCx7MHhlZiwweGI0LDB4MGIsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHhlZiwweDc1LDB4ZjAsMHgwM319LAorIHsxNiwweDA4NDAsMCx7MHhhNCwweDI0LDB4MGUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3NiwweDMzLDB4ZjAsMHgyNH19LAorIHsxNiwweDA4NTAsMCx7MHhmMCwweDYwLDB4MGEsMHgyNCwweDBlLDB4NjAsMHgwMiwweDgxLDB4ODcsMHgxMiwweDRiLDB4M2UsMHgyMiwweDkwLDB4N2YsMHhlZH19LAorIHsxNiwweDA4NjAsMCx7MHhlMCwweDY0LDB4MDUsMHg3MCwweDUxLDB4OTAsMHg3NiwweDE4LDB4NzQsMHgwNSwweGYwLDB4OTAsMHg3NiwweDM3LDB4NzQsMHgwMX19LAorIHsxNiwweDA4NzAsMCx7MHhmMCwweDkwLDB4NzYsMHgzOSwweDc0LDB4MDMsMHhmMCwweDkwLDB4NzYsMHgyMSwweGYwLDB4ZTQsMHg5MCwweDc2LDB4MjAsMHhmMH19LAorIHsxNiwweDA4ODAsMCx7MHg5MCwweDdmLDB4ZWEsMHhlMCwweGY0LDB4NjAsMHgyZiwweDkwLDB4NzYsMHgyMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNH19LAorIHsxNiwweDA4OTAsMCx7MHgyNCwweGFhLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmZH19LAorIHsxNiwweDA4YTAsMCx7MHhlZSwweDZkLDB4NjAsMHgxMiwweDkwLDB4NzYsMHgyMSwweGUwLDB4ZmUsMHhlZiwweGMzLDB4OWUsMHg1MCwweDA4LDB4OTAsMHg3Nn19LAorIHsxNiwweDA4YjAsMCx7MHgyMCwweGUwLDB4MDQsMHhmMCwweDgwLDB4ZDEsMHg5MCwweDdmLDB4ZWQsMHhlMCwweDY0LDB4MDYsMHg3MCwweDUyLDB4OTAsMHg3Nn19LAorIHsxNiwweDA4YzAsMCx7MHgxOCwweDc0LDB4MDYsMHhmMCwweDkwLDB4NzYsMHgzNywweDc0LDB4MDQsMHhmMCwweDkwLDB4NzYsMHgzOSwweDc0LDB4MGEsMHhmMH19LAorIHsxNiwweDA4ZDAsMCx7MHg5MCwweDc2LDB4MjEsMHhmMCwweDkwLDB4NzYsMHgyMCwweDc0LDB4MDMsMHhmMCwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZjQsMHg2MH19LAorIHsxNiwweDA4ZTAsMCx7MHgyZiwweDkwLDB4NzYsMHgyMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWEsMHhmNSwweDgyLDB4ZTQsMHgzNH19LAorIHsxNiwweDA4ZjAsMCx7MHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmZCwweGVlLDB4NmQsMHg2MCwweDEyLDB4OTAsMHg3Nn19LAorIHsxNiwweDA5MDAsMCx7MHgyMSwweGUwLDB4ZmUsMHhlZiwweGMzLDB4OWUsMHg1MCwweDA4LDB4OTAsMHg3NiwweDIwLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhkMX19LAorIHsxNiwweDA5MTAsMCx7MHg5MCwweDc2LDB4MjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFhLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NX19LAorIHsxNiwweDA5MjAsMCx7MHhmNSwweDgzLDB4ZTAsMHg5MCwweDcyLDB4MjksMHhmMCwweGU0LDB4OTAsMHg3NiwweDNiLDB4ZjAsMHg5MCwweDc2LDB4MjEsMHhlMH19LAorIHsxNiwweDA5MzAsMCx7MHhmZSwweGVmLDB4NmUsMHg3MCwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlYn19LAorIHsxNiwweDA5NDAsMCx7MHhlMCwweDE0LDB4NjAsMHgxMywweDE0LDB4NzAsMHgwMiwweDIxLDB4ZTIsMHgyNCwweDAyLDB4NjAsMHgwMiwweDgxLDB4N2YsMHg5MH19LAorIHsxNiwweDA5NTAsMCx7MHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlOSwweGUwLDB4MTQsMHg3MCwweDdjLDB4OTAsMHg3Zn19LAorIHsxNiwweDA5NjAsMCx7MHhlYSwweGUwLDB4ZjQsMHg3MCwweDQ4LDB4OTAsMHg3NiwweDM3LDB4ZTAsMHg5MCwweDc2LDB4MjAsMHhmMCwweDkwLDB4NzYsMHgzOX19LAorIHsxNiwweDA5NzAsMCx7MHhlMCwweGZlLDB4OTAsMHg3NiwweDIwLDB4ZTAsMHhmZCwweGMzLDB4OWUsMHg1MCwweDJiLDB4OTAsMHg3NiwweDNiLDB4ZTAsMHhmZX19LAorIHsxNiwweDA5ODAsMCx7MHgwNCwweGYwLDB4NzQsMHhjMCwweDJlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZSwweGY1LDB4ODMsMHhlMCwweGZlLDB4ZWQsMHg3NX19LAorIHsxNiwweDA5OTAsMCx7MHhmMCwweDBhLDB4YTQsMHgyNCwweGFiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZSwweGYwLDB4OTAsMHg3Nn19LAorIHsxNiwweDA5YTAsMCx7MHgyMCwweGUwLDB4MDQsMHhmMCwweDgwLDB4YzcsMHg5MCwweDc2LDB4M2YsMHg3NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2UsMHhjMH19LAorIHsxNiwweDA5YjAsMCx7MHhlMCwweGZlLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4M319LAorIHsxNiwweDA5YzAsMCx7MHhlZSwweGYwLDB4ZTAsMHhiNCwweDAxLDB4MDgsMHg5MCwweDc2LDB4M2UsMHg3NCwweDAxLDB4ZjAsMHg4MCwweDA1LDB4ZTQsMHg5MH19LAorIHsxNiwweDA5ZDAsMCx7MHg3NiwweDNlLDB4ZjAsMHg5MCwweDc2LDB4M2YsMHg3NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMX19LAorIHsxNiwweDA5ZTAsMCx7MHhmMCwweDIyLDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweGZlLDB4NzAsMHgwMiwweDQxLDB4YTMsMHgxNCwweDcwLDB4MDIsMHg2MX19LAorIHsxNiwweDA5ZjAsMCx7MHgzZiwweDE0LDB4NzAsMHgwMiwweDYxLDB4ZGIsMHgyNCwweDAzLDB4NjAsMHgwMiwweDgxLDB4NzcsMHg5MCwweDdmLDB4ZWEsMHhlMH19LAorIHsxNiwweDBhMDAsMCx7MHhmNCwweDcwLDB4NmIsMHg5MCwweDc2LDB4MzcsMHhlMCwweDkwLDB4NzYsMHgyMCwweGYwLDB4OTAsMHg3NiwweDM5LDB4ZTAsMHhmZn19LAorIHsxNiwweDBhMTAsMCx7MHg5MCwweDc2LDB4MjAsMHhlMCwweGZlLDB4YzMsMHg5ZiwweDUwLDB4NGUsMHg5MCwweDc2LDB4M2IsMHhlMCwweGZmLDB4MDQsMHhmMH19LAorIHsxNiwweDBhMjAsMCx7MHg3NCwweGMwLDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdlLDB4ZjUsMHg4MywweGUwLDB4ZmYsMHhlZSwweDc1LDB4ZjAsMHgwYX19LAorIHsxNiwweDBhMzAsMCx7MHhhNCwweDI0LDB4YWMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDc2LDB4M2IsMHhlMH19LAorIHsxNiwweDBhNDAsMCx7MHhmZiwweDA0LDB4ZjAsMHg3NCwweGMwLDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdlLDB4ZjUsMHg4MywweGUwLDB4ZmYsMHhlZX19LAorIHsxNiwweDBhNTAsMCx7MHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MH19LAorIHsxNiwweDBhNjAsMCx7MHg3NiwweDIwLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhhNCwweDkwLDB4NzYsMHg0MCwweDc0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZX19LAorIHsxNiwweDBhNzAsMCx7MHhjMCwweGUwLDB4ZmYsMHg5MCwweDc2LDB4MjAsMHhlMCwweGZlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFjLDB4ZjUsMHg4Mn19LAorIHsxNiwweDBhODAsMCx7MHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4N2UsMHhjMSwweGUwLDB4ZmYsMHhlZSwweDc1LDB4ZjAsMHgwYX19LAorIHsxNiwweDBhOTAsMCx7MHhhNCwweDI0LDB4YWQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDc2LDB4NDEsMHg3NH19LAorIHsxNiwweDBhYTAsMCx7MHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGY0LDB4NzAsMHg2NiwweDkwLDB4NzYsMHgzNywweGUwLDB4OTAsMHg3Nn19LAorIHsxNiwweDBhYjAsMCx7MHgyMCwweGYwLDB4OTAsMHg3NiwweDM5LDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgyMCwweGUwLDB4ZmUsMHhjMywweDlmLDB4NDAsMHgwMn19LAorIHsxNiwweDBhYzAsMCx7MHg4MSwweDhlLDB4OTAsMHg3NiwweDNiLDB4ZTAsMHhmZiwweDA0LDB4ZjAsMHg3NCwweGMwLDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNH19LAorIHsxNiwweDBhZDAsMCx7MHg3ZSwweGY1LDB4ODMsMHhlMCwweGZmLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWUsMHhmNSwweDgyLDB4ZTQsMHgzNH19LAorIHsxNiwweDBhZTAsMCx7MHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3NiwweDNiLDB4ZTAsMHhmZiwweDA0LDB4ZjAsMHg3NCwweGMwLDB4MmYsMHhmNX19LAorIHsxNiwweDBhZjAsMCx7MHg4MiwweGU0LDB4MzQsMHg3ZSwweGY1LDB4ODMsMHhlMCwweGZmLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWYsMHhmNX19LAorIHsxNiwweDBiMDAsMCx7MHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3NiwweDIwLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhhMn19LAorIHsxNiwweDBiMTAsMCx7MHg5MCwweDdlLDB4YzAsMHhlMCwweGZmLDB4OTAsMHg3NiwweDIwLDB4ZTAsMHhmZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZX19LAorIHsxNiwweDBiMjAsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDdlLDB4YzEsMHhlMCwweGZmLDB4ZWUsMHg3NX19LAorIHsxNiwweDBiMzAsMCx7MHhmMCwweDBhLDB4YTQsMHgyNCwweGFmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4MjIsMHg5MH19LAorIHsxNiwweDBiNDAsMCx7MHg3ZiwweGVhLDB4ZTAsMHhmNCwweDcwLDB4NjYsMHg5MCwweDc2LDB4MzcsMHhlMCwweDkwLDB4NzYsMHgyMCwweGYwLDB4OTAsMHg3Nn19LAorIHsxNiwweDBiNTAsMCx7MHgzOSwweGUwLDB4ZmYsMHg5MCwweDc2LDB4MjAsMHhlMCwweGZlLDB4YzMsMHg5ZiwweDQwLDB4MDIsMHg4MSwweDhlLDB4OTAsMHg3Nn19LAorIHsxNiwweDBiNjAsMCx7MHgzYiwweGUwLDB4ZmYsMHgwNCwweGYwLDB4NzQsMHhjMCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZSwweGY1LDB4ODMsMHhlMH19LAorIHsxNiwweDBiNzAsMCx7MHhmZiwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZn19LAorIHsxNiwweDBiODAsMCx7MHhmMCwweDkwLDB4NzYsMHgzYiwweGUwLDB4ZmYsMHgwNCwweGYwLDB4NzQsMHhjMCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZX19LAorIHsxNiwweDBiOTAsMCx7MHhmNSwweDgzLDB4ZTAsMHhmZiwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIxLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NX19LAorIHsxNiwweDBiYTAsMCx7MHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzYsMHgyMCwweGUwLDB4MDQsMHhmMCwweDgwLDB4YTIsMHg5MCwweDdlLDB4YzAsMHhlMH19LAorIHsxNiwweDBiYjAsMCx7MHhmZiwweDkwLDB4NzYsMHgyMCwweGUwLDB4ZmUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjAsMHhmNSwweDgyLDB4ZTQsMHgzNH19LAorIHsxNiwweDBiYzAsMCx7MHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3ZSwweGMxLDB4ZTAsMHhmZiwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNH19LAorIHsxNiwweDBiZDAsMCx7MHhiMSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmNH19LAorIHsxNiwweDBiZTAsMCx7MHg3MCwweDY2LDB4OTAsMHg3NiwweDM3LDB4ZTAsMHg5MCwweDc2LDB4MjAsMHhmMCwweDkwLDB4NzYsMHgzOSwweGUwLDB4ZmYsMHg5MH19LAorIHsxNiwweDBiZjAsMCx7MHg3NiwweDIwLDB4ZTAsMHhmZSwweGMzLDB4OWYsMHg0MCwweDAyLDB4ODEsMHg4ZSwweDkwLDB4NzYsMHgzYiwweGUwLDB4ZmYsMHgwNH19LAorIHsxNiwweDBjMDAsMCx7MHhmMCwweDc0LDB4YzAsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2UsMHhmNSwweDgzLDB4ZTAsMHhmZiwweGVlLDB4NzUsMHhmMH19LAorIHsxNiwweDBjMTAsMCx7MHgwYSwweGE0LDB4MjQsMHhiMiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzYsMHgzYn19LAorIHsxNiwweDBjMjAsMCx7MHhlMCwweGZmLDB4MDQsMHhmMCwweDc0LDB4YzAsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2UsMHhmNSwweDgzLDB4ZTAsMHhmZn19LAorIHsxNiwweDBjMzAsMCx7MHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMH19LAorIHsxNiwweDBjNDAsMCx7MHg5MCwweDc2LDB4MjAsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGEyLDB4OTAsMHg3ZSwweGMwLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgyMH19LAorIHsxNiwweDBjNTAsMCx7MHhlMCwweGZlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZn19LAorIHsxNiwweDBjNjAsMCx7MHhmMCwweDkwLDB4N2UsMHhjMSwweGUwLDB4ZmYsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMywweGY1LDB4ODIsMHhlNH19LAorIHsxNiwweDBjNzAsMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MH19LAorIHsxNSwweDBjODAsMCx7MHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjJ9fSwKKyB7MTYsMHgwYzhmLDAsezB4NDEsMHg3NiwweDY4LDB4MDEsMHg0MSwweDc2LDB4NmEsMHgwMiwweDQxLDB4NzYsMHg2YiwweDBhLDB4YzEsMHgyMCwweGMxLDB4MjF9fSwKKyB7IDIsMHgwYzlmLDAsezB4YzEsMHgyZn19LAorIHsgNCwweDBjYTEsMCx7MHg0MSwweDc2LDB4MjMsMHgwMH19LAorIHsxNiwweDBjYTUsMCx7MHg0MSwweDcyLDB4MDEsMHgwMSwweDQ1LDB4NzIsMHgwNSwweDAwLDB4MDIsMHhjOSwweDAwLDB4MDAsMHg0NSwweDcyLDB4MGEsMHgwMH19LAorIHsxNiwweDBjYjUsMCx7MHgwMSwweDAyLDB4MDMsMHgwNCwweDRkLDB4NzIsMHgwZiwweGQxLDB4MDAsMHhkMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDBjYzUsMCx7MHgyOCwweDI4LDB4MDksMHgwMCwweDRkLDB4NzIsMHgxYywweDAxLDB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwN319LAorIHsxNiwweDBjZDUsMCx7MHgwOCwweDA5LDB4MGEsMHgwYiwweDQxLDB4NzIsMHgyZSwweDIyLDB4NDEsMHg3MiwweDJmLDB4MjMsMHg0MSwweDcyLDB4MzAsMHgyMH19LAorIHsxNiwweDBjZTUsMCx7MHg0MSwweDcyLDB4MzEsMHgyMSwweDYyLDB4ZDIsMHg3MiwweDNhLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDBjZjUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDBkMDUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDBkMTUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDBkMjUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDBkMzUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDBkNDUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDBkNTUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDBkNjUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDBkNzUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMX19LAorIHsxNiwweDBkODUsMCx7MHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMX19LAorIHsxNiwweDBkOTUsMCx7MHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMX19LAorIHsxNiwweDBkYTUsMCx7MHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMX19LAorIHsxNiwweDBkYjUsMCx7MHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMn19LAorIHsxNiwweDBkYzUsMCx7MHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMn19LAorIHsxNiwweDBkZDUsMCx7MHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMn19LAorIHsxNiwweDBkZTUsMCx7MHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMn19LAorIHsxNiwweDBkZjUsMCx7MHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwM319LAorIHsxNiwweDBlMDUsMCx7MHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwM319LAorIHsxNiwweDBlMTUsMCx7MHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwM319LAorIHsxNiwweDBlMjUsMCx7MHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwM319LAorIHsxNiwweDBlMzUsMCx7MHgwMywweDAzLDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNH19LAorIHsxNiwweDBlNDUsMCx7MHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNH19LAorIHsxNiwweDBlNTUsMCx7MHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNH19LAorIHsxNiwweDBlNjUsMCx7MHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNH19LAorIHsxNiwweDBlNzUsMCx7MHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNX19LAorIHsxNiwweDBlODUsMCx7MHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNX19LAorIHsxNiwweDBlOTUsMCx7MHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNX19LAorIHsxNiwweDBlYTUsMCx7MHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDYsMHgwNn19LAorIHsxNiwweDBlYjUsMCx7MHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNn19LAorIHsxNiwweDBlYzUsMCx7MHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNn19LAorIHsxNiwweDBlZDUsMCx7MHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNn19LAorIHsxNiwweDBlZTUsMCx7MHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDcsMHgwNywweDA3LDB4MDgsMHgwOH19LAorIHsxNiwweDBlZjUsMCx7MHgwOCwweDA5LDB4MDksMHgwOSwweDBhLDB4MGEsMHgwYSwweDBiLDB4MGIsMHgwYiwweDBjLDB4MGMsMHgwYywweDBkLDB4MGQsMHgwZH19LAorIHsxNiwweDBmMDUsMCx7MHgwZSwweDBlLDB4MGUsMHgwZiwweDBmLDB4MGYsMHgxMCwweDEwLDB4MTAsMHgxMSwweDExLDB4MTEsMHgxMiwweDEyLDB4MTIsMHgxM319LAorIHsxNiwweDBmMTUsMCx7MHgxMywweDEzLDB4MTQsMHgxNCwweDE0LDB4MTUsMHgxNSwweDE1LDB4MTYsMHgxNiwweDE2LDB4MTcsMHgxNywweDE3LDB4MTgsMHgxOH19LAorIHsxNiwweDBmMjUsMCx7MHgxOCwweDE5LDB4MTksMHgxOSwweDE5LDB4MWEsMHgxYSwweDFhLDB4MWEsMHgxYiwweDFiLDB4MWIsMHgxYiwweDFjLDB4MWMsMHgxY319LAorIHsxNiwweDBmMzUsMCx7MHgxYywweDFkLDB4MWQsMHgxZCwweDFkLDB4MWUsMHgxZSwweDFlLDB4MWUsMHgxZiwweDFmLDB4MWYsMHgxZiwweDIwLDB4MjAsMHgyMH19LAorIHsxNiwweDBmNDUsMCx7MHgyMSwweDIxLDB4MjEsMHgyMiwweDIyLDB4MjIsMHgyMywweDIzLDB4MjQsMHgyNCwweDI1LDB4MjUsMHgyNiwweDI2LDB4MjcsMHgyN319LAorIHsxNiwweDBmNTUsMCx7MHgyOCwweDI4LDB4MjksMHgyOSwweDJhLDB4MmEsMHgyYiwweDJiLDB4MmMsMHgyYywweDJkLDB4MmQsMHgyZSwweDJlLDB4MmYsMHgyZn19LAorIHsxNiwweDBmNjUsMCx7MHgzMCwweDMwLDB4MzEsMHgzMSwweDMyLDB4MzIsMHgzMywweDMzLDB4MzQsMHgzNCwweDM1LDB4MzUsMHgzNiwweDM2LDB4MzcsMHgzN319LAorIHsxNiwweDBmNzUsMCx7MHgzOCwweDM4LDB4MzksMHgzOSwweDNhLDB4M2EsMHgzYiwweDNjLDB4M2QsMHgzZSwweDNmLDB4NDAsMHg0MSwweDQyLDB4NDMsMHg0NH19LAorIHsxNiwweDBmODUsMCx7MHg0NSwweDQ2LDB4NDcsMHg0OCwweDQ5LDB4NDksMHg0YSwweDRiLDB4NGIsMHg0YywweDRkLDB4NGUsMHg0ZiwweDUwLDB4NTEsMHg1Mn19LAorIHsxNiwweDBmOTUsMCx7MHg1MywweDU0LDB4NTUsMHg1NSwweDU2LDB4NTYsMHg1NywweDU3LDB4NTgsMHg1YSwweDViLDB4NWQsMHg1ZSwweDVmLDB4NjEsMHg2Mn19LAorIHsxNiwweDBmYTUsMCx7MHg2MywweDY0LDB4NjUsMHg2NiwweDY3LDB4NjgsMHg2OSwweDZhLDB4NmIsMHg2YywweDZkLDB4NmYsMHg3MSwweDcyLDB4NzMsMHg3NH19LAorIHsxNiwweDBmYjUsMCx7MHg3NSwweDc2LDB4NzcsMHg3OCwweDc5LDB4N2EsMHg3YiwweDdjLDB4N2UsMHg4MCwweDAxLDB4MzcsMHgwMSwweDAxLDB4MzgsMHgwMH19LAorIHsgMSwweDBmYzUsMCx7MHgwMH19LAorIHsxNiwweDBmYzYsMCx7MHhlNCwweGZmLDB4NzQsMHg0NiwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NiwweGY1LDB4ODMsMHhlMCwweGZlLDB4NzQsMHgyMH19LAorIHsxNiwweDBmZDYsMCx7MHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZWUsMHhmMCwweDc0LDB4NGUsMHgyZiwweGY1LDB4ODIsMHhlNH19LAorIHsxNiwweDBmZTYsMCx7MHgzNCwweDc2LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg3NCwweDMwLDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4M319LAorIHsgNiwweDBmZjYsMCx7MHhlZSwweGYwLDB4MGYsMHhiZiwweDA4LDB4Y2N9fSwKKyB7IDEsMHgwZmZjLDAsezB4MjJ9fSwKKyB7IDMsMHgwZmZkLDAsezB4YzIsMHg4OSwweDMyfX0sCisgezE2LDB4MTAwMCwwLHsweGU0LDB4OTAsMHg3NiwweDJjLDB4ZjAsMHg5MCwweDc2LDB4MmMsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBmfX0sCisgezE2LDB4MTAxMCwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4N2YsMHhlZCwweGUwLDB4ZmQsMHhlZSwweDZkfX0sCisgezE2LDB4MTAyMCwwLHsweDYwLDB4MGUsMHhlZiwweGMzLDB4OTQsMHgwYiwweDUwLDB4MDgsMHg5MCwweDc2LDB4MmMsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGQ1fX0sCisgezE2LDB4MTAzMCwwLHsweGVmLDB4YjQsMHgwYiwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweGVmLDB4NzUsMHhmMCwweDAzfX0sCisgezE2LDB4MTA0MCwwLHsweGE0LDB4MjQsMHgwZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDc2LDB4MmUsMHhmMCwweDI0fX0sCisgezE2LDB4MTA1MCwwLHsweGYwLDB4NjAsMHgwYSwweDI0LDB4MGYsMHg2MCwweDAyLDB4ODEsMHg3ZCwweDEyLDB4NGIsMHgxYiwweDIyLDB4OTAsMHg3ZiwweGVkfX0sCisgezE2LDB4MTA2MCwwLHsweGUwLDB4NjQsMHgwNSwweDcwLDB4NTEsMHg5MCwweDc2LDB4MTgsMHg3NCwweDA1LDB4ZjAsMHg5MCwweDc2LDB4MzgsMHg3NCwweDAxfX0sCisgezE2LDB4MTA3MCwwLHsweGYwLDB4OTAsMHg3NiwweDNhLDB4NzQsMHgwMywweGYwLDB4OTAsMHg3NiwweDFjLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHgxYiwweGYwfX0sCisgezE2LDB4MTA4MCwwLHsweDkwLDB4N2YsMHhlYSwweGUwLDB4ZjQsMHg2MCwweDJmLDB4OTAsMHg3NiwweDFiLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0fX0sCisgezE2LDB4MTA5MCwwLHsweDI0LDB4YWEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGZkfX0sCisgezE2LDB4MTBhMCwwLHsweGVlLDB4NmQsMHg2MCwweDEyLDB4OTAsMHg3NiwweDFjLDB4ZTAsMHhmZSwweGVmLDB4YzMsMHg5ZSwweDUwLDB4MDgsMHg5MCwweDc2fX0sCisgezE2LDB4MTBiMCwwLHsweDFiLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhkMSwweDkwLDB4N2YsMHhlZCwweGUwLDB4NjQsMHgwNiwweDcwLDB4NTIsMHg5MCwweDc2fX0sCisgezE2LDB4MTBjMCwwLHsweDE4LDB4NzQsMHgwNiwweGYwLDB4OTAsMHg3NiwweDM4LDB4NzQsMHgwNCwweGYwLDB4OTAsMHg3NiwweDNhLDB4NzQsMHgwYSwweGYwfX0sCisgezE2LDB4MTBkMCwwLHsweDkwLDB4NzYsMHgxYywweGYwLDB4OTAsMHg3NiwweDFiLDB4NzQsMHgwMywweGYwLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmNCwweDYwfX0sCisgezE2LDB4MTBlMCwwLHsweDJmLDB4OTAsMHg3NiwweDFiLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYSwweGY1LDB4ODIsMHhlNCwweDM0fX0sCisgezE2LDB4MTBmMCwwLHsweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGZkLDB4ZWUsMHg2ZCwweDYwLDB4MTIsMHg5MCwweDc2fX0sCisgezE2LDB4MTEwMCwwLHsweDFjLDB4ZTAsMHhmZSwweGVmLDB4YzMsMHg5ZSwweDUwLDB4MDgsMHg5MCwweDc2LDB4MWIsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGQxfX0sCisgezE2LDB4MTExMCwwLHsweGU0LDB4OTAsMHg3NiwweDFlLDB4ZjAsMHg5MCwweDc2LDB4MWMsMHhlMCwweGZmLDB4OTAsMHg3NiwweDFiLDB4ZTAsMHhmZSwweDZmfX0sCisgezE2LDB4MTEyMCwwLHsweDcwLDB4MDgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGViLDB4ZTAsMHgxNCwweDYwfX0sCisgezE2LDB4MTEzMCwwLHsweDEzLDB4MTQsMHg3MCwweDAyLDB4MjEsMHhiZiwweDI0LDB4MDIsMHg2MCwweDAyLDB4ODEsMHg3NSwweDkwLDB4N2YsMHhiNCwweGUwfX0sCisgezE2LDB4MTE0MCwwLHsweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweDdmLDB4NzAsMHg2YiwweDkwLDB4N2YsMHhlYSwweGUwfX0sCisgezE2LDB4MTE1MCwwLHsweGY0LDB4NzAsMHg0YSwweDkwLDB4NzYsMHgzOCwweGUwLDB4OTAsMHg3NiwweDFiLDB4ZjAsMHg5MCwweDc2LDB4M2EsMHhlMCwweGZmfX0sCisgezE2LDB4MTE2MCwwLHsweDkwLDB4NzYsMHgxYiwweGUwLDB4ZmQsMHhjMywweDlmLDB4NTAsMHgyYiwweGVkLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFifX0sCisgezE2LDB4MTE3MCwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgxZSwweGUwLDB4ZmQsMHgwNCwweGYwfX0sCisgezE2LDB4MTE4MCwwLHsweDc0LDB4MDAsMHgyZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzYsMHgxYiwweGUwfX0sCisgezE2LDB4MTE5MCwwLHsweDA0LDB4ZjAsMHg4MCwweGM3LDB4OTAsMHg3NiwweDFlLDB4ZTAsMHg5MCwweDdmLDB4YjUsMHhmMCwweDIyLDB4ZWUsMHg3NSwweGYwfX0sCisgezE2LDB4MTFhMCwwLHsweDBhLDB4YTQsMHgyNCwweGFiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwLDB4N2YsMHgwMCwweGYwfX0sCisgezE2LDB4MTFiMCwwLHsweDkwLDB4N2YsMHhiNSwweDc0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwfX0sCisgezE2LDB4MTFjMCwwLHsweDdmLDB4ZTksMHhlMCwweDI0LDB4N2UsMHg3MCwweDAyLDB4NDEsMHg3ZSwweDE0LDB4NzAsMHgwMiwweDYxLDB4MjMsMHgxNCwweDcwfX0sCisgezE2LDB4MTFkMCwwLHsweDAyLDB4NjEsMHhjOCwweDI0LDB4MDMsMHg2MCwweDAyLDB4ODEsMHg2ZCwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZjQsMHg3MCwweDZkfX0sCisgezE2LDB4MTFlMCwwLHsweDkwLDB4NzYsMHgzOCwweGUwLDB4OTAsMHg3NiwweDFiLDB4ZjAsMHg5MCwweDc2LDB4M2EsMHhlMCwweGZmLDB4OTAsMHg3NiwweDFifX0sCisgezE2LDB4MTFmMCwwLHsweGUwLDB4YzMsMHg5ZiwweDUwLDB4NGYsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFjLDB4ZjUsMHg4MiwweGU0fX0sCisgezE2LDB4MTIwMCwwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4NzYsMHgxZSwweGUwLDB4ZmQsMHgwNCwweGYwLDB4NzQsMHgwMCwweDJkfX0sCisgezE2LDB4MTIxMCwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4ZWUsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFkfX0sCisgezE2LDB4MTIyMCwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgxZSwweGUwLDB4ZmUsMHgwNCwweGYwfX0sCisgezE2LDB4MTIzMCwwLHsweDc0LDB4MDAsMHgyZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzYsMHgxYiwweGUwfX0sCisgezE2LDB4MTI0MCwwLHsweDA0LDB4ZjAsMHg4MCwweGE0LDB4OTAsMHg3NiwweDFlLDB4ZTAsMHg5MCwweDdmLDB4YjUsMHhmMCwweDIyLDB4OTAsMHg3NiwweDFifX0sCisgezE2LDB4MTI1MCwwLHsweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwfX0sCisgezE2LDB4MTI2MCwwLHsweDkwLDB4N2YsMHgwMCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1fX0sCisgezE2LDB4MTI3MCwwLHsweGY1LDB4ODMsMHhlMCwweDkwLDB4N2YsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMiwweGYwLDB4MjIsMHg5MCwweDdmfX0sCisgezE2LDB4MTI4MCwwLHsweGVhLDB4ZTAsMHhmNCwweDcwLDB4NmQsMHg5MCwweDc2LDB4MzgsMHhlMCwweDkwLDB4NzYsMHgxYiwweGYwLDB4OTAsMHg3NiwweDNhfX0sCisgezE2LDB4MTI5MCwwLHsweGUwLDB4ZmYsMHg5MCwweDc2LDB4MWIsMHhlMCwweGMzLDB4OWYsMHg1MCwweDRmLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0fX0sCisgezE2LDB4MTJhMCwwLHsweDI0LDB4YWUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDc2LDB4MWUsMHhlMCwweGZkfX0sCisgezE2LDB4MTJiMCwwLHsweDA0LDB4ZjAsMHg3NCwweDAwLDB4MmQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGVlLDB4ZjAsMHhlZiwweDc1fX0sCisgezE2LDB4MTJjMCwwLHsweGYwLDB4MGEsMHhhNCwweDI0LDB4YWYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmYsMHg5MCwweDc2fX0sCisgezE2LDB4MTJkMCwwLHsweDFlLDB4ZTAsMHhmZSwweDA0LDB4ZjAsMHg3NCwweDAwLDB4MmUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGVmfX0sCisgezE2LDB4MTJlMCwwLHsweGYwLDB4OTAsMHg3NiwweDFiLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhhNCwweDkwLDB4NzYsMHgxZSwweGUwLDB4OTAsMHg3ZiwweGI1fX0sCisgezE2LDB4MTJmMCwwLHsweGYwLDB4MjIsMHg5MCwweDc2LDB4MWIsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFlLDB4ZjUsMHg4MiwweGU0fX0sCisgezE2LDB4MTMwMCwwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDdmLDB4MDAsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFmfX0sCisgezE2LDB4MTMxMCwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDdmLDB4MDEsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0fX0sCisgezE2LDB4MTMyMCwwLHsweDAyLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZjQsMHg3MCwweDZkLDB4OTAsMHg3NiwweDM4LDB4ZTAsMHg5MCwweDc2fX0sCisgezE2LDB4MTMzMCwwLHsweDFiLDB4ZjAsMHg5MCwweDc2LDB4M2EsMHhlMCwweGZmLDB4OTAsMHg3NiwweDFiLDB4ZTAsMHhjMywweDlmLDB4NTAsMHg0ZiwweGUwfX0sCisgezE2LDB4MTM0MCwwLHsweGZmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlfX0sCisgezE2LDB4MTM1MCwwLHsweDkwLDB4NzYsMHgxZSwweGUwLDB4ZmQsMHgwNCwweGYwLDB4NzQsMHgwMCwweDJkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1fX0sCisgezE2LDB4MTM2MCwwLHsweDgzLDB4ZWUsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIxLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1fX0sCisgezE2LDB4MTM3MCwwLHsweDgzLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgxZSwweGUwLDB4ZmUsMHgwNCwweGYwLDB4NzQsMHgwMCwweDJlLDB4ZjUsMHg4MiwweGU0fX0sCisgezE2LDB4MTM4MCwwLHsweDM0LDB4N2YsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzYsMHgxYiwweGUwLDB4MDQsMHhmMCwweDgwLDB4YTQsMHg5MCwweDc2fX0sCisgezE2LDB4MTM5MCwwLHsweDFlLDB4ZTAsMHg5MCwweDdmLDB4YjUsMHhmMCwweDIyLDB4OTAsMHg3NiwweDFiLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0fX0sCisgezE2LDB4MTNhMCwwLHsweDI0LDB4YjAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHhlZiwweDc1fX0sCisgezE2LDB4MTNiMCwwLHsweGYwLDB4MGEsMHhhNCwweDI0LDB4YjEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3ZiwweDAxfX0sCisgezE2LDB4MTNjMCwwLHsweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMiwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGY0LDB4NzAsMHg2ZCwweDkwfX0sCisgezE2LDB4MTNkMCwwLHsweDc2LDB4MzgsMHhlMCwweDkwLDB4NzYsMHgxYiwweGYwLDB4OTAsMHg3NiwweDNhLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgxYiwweGUwfX0sCisgezE2LDB4MTNlMCwwLHsweGMzLDB4OWYsMHg1MCwweDRmLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMiwweGY1LDB4ODIsMHhlNCwweDM0fX0sCisgezE2LDB4MTNmMCwwLHsweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDc2LDB4MWUsMHhlMCwweGZkLDB4MDQsMHhmMCwweDc0LDB4MDAsMHgyZCwweGY1fX0sCisgezE2LDB4MTQwMCwwLHsweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGVlLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMywweGY1fX0sCisgezE2LDB4MTQxMCwwLHsweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmYsMHg5MCwweDc2LDB4MWUsMHhlMCwweGZlLDB4MDQsMHhmMCwweDc0fX0sCisgezE2LDB4MTQyMCwwLHsweDAwLDB4MmUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDc2LDB4MWIsMHhlMCwweDA0fX0sCisgezE2LDB4MTQzMCwwLHsweGYwLDB4ODAsMHhhNCwweDkwLDB4NzYsMHgxZSwweGUwLDB4OTAsMHg3ZiwweGI1LDB4ZjAsMHgyMiwweDkwLDB4NzYsMHgxYiwweGUwfX0sCisgezE2LDB4MTQ0MCwwLHsweGZmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwfX0sCisgezE2LDB4MTQ1MCwwLHsweDdmLDB4MDAsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIzLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1fX0sCisgezE2LDB4MTQ2MCwwLHsweDgzLDB4ZTAsMHg5MCwweDdmLDB4MDEsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDIsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0fX0sCisgezE2LDB4MTQ3MCwwLHsweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0fX0sCisgeyA1LDB4MTQ4MCwwLHsweGUwLDB4NDQsMHgwMSwweGYwLDB4MjJ9fSwKKyB7MTYsMHgxNDg1LDAsezB4NzQsMHgwMCwweGY1LDB4ODYsMHg5MCwweGZkLDB4YTUsMHg3YywweDA1LDB4YTMsMHhlNSwweDgyLDB4NDUsMHg4MywweDcwLDB4Zjl9fSwKKyB7IDEsMHgxNDk1LDAsezB4MjJ9fSwKKyB7MTYsMHgxNDk2LDAsezB4OTAsMHg3ZiwweGQ2LDB4ZTAsMHg0NCwweDgwLDB4ZjAsMHg0MywweDg3LDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjJ9fSwKKyB7MTYsMHgxNGE2LDAsezB4YzAsMHhkMCwweGMwLDB4ZTAsMHg4ZiwweGUwLDB4YzAsMHhlMCwweDhlLDB4ZTAsMHhjMCwweGUwLDB4OGQsMHhlMCwweGMwLDB4ZTB9fSwKKyB7MTYsMHgxNGI2LDAsezB4OGMsMHhlMCwweGMwLDB4ZTAsMHhjMCwweDgyLDB4YzAsMHg4MywweDA1LDB4ODYsMHhjMCwweDg0LDB4YzAsMHg4NSwweDdkLDB4MDB9fSwKKyB7MTYsMHgxNGM2LDAsezB4OTAsMHg3ZiwweGUzLDB4NzQsMHg3YiwweGYwLDB4YTMsMHg3NCwweDgwLDB4ZjAsMHg3YywweDExLDB4OTAsMHg3ZiwweDk5LDB4ZTB9fSwKKyB7MTYsMHgxNGQ2LDAsezB4NTQsMHg0MCwweGRjLDB4MDMsMHgwMiwweDE0LDB4ZjMsMHhiNCwweDAwLDB4MTMsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDQwLDB4ZjB9fSwKKyB7MTYsMHgxNGU2LDAsezB4OTAsMHg3ZiwweGU1LDB4ZjAsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDAwLDB4ZjAsMHgwMiwweDE0LDB4ZDIsMHg5MCwweDc2LDB4OTB9fSwKKyB7MTYsMHgxNGY2LDAsezB4ZTAsMHhiNCwweDAxLDB4MTIsMHg5MCwweDc2LDB4OGYsMHhlMCwweDJkLDB4ZmQsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDgwLDB4ZjB9fSwKKyB7MTYsMHgxNTA2LDAsezB4OTAsMHg3ZiwweDZjLDB4MDIsMHgxNSwweDU3LDB4YjQsMHgwMiwweDEyLDB4OTAsMHg3NiwweDhmLDB4ZTAsMHgyZCwweGZkLDB4OTB9fSwKKyB7MTYsMHgxNTE2LDAsezB4N2YsMHhlMiwweDc0LDB4ODAsMHhmMCwweDkwLDB4N2YsMHg2YywweDAyLDB4MTUsMHg5NiwweGI0LDB4MDMsMHgxMiwweDkwLDB4NzZ9fSwKKyB7MTYsMHgxNTI2LDAsezB4OGYsMHhlMCwweDJkLDB4ZmQsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDgwLDB4ZjAsMHg5MCwweDdmLDB4NmMsMHgwMiwweDE1LDB4ZTF9fSwKKyB7MTYsMHgxNTM2LDAsezB4YjQsMHgwNCwweDEyLDB4OTAsMHg3NiwweDhmLDB4ZTAsMHgyZCwweGZkLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg4MCwweGYwLDB4OTB9fSwKKyB7MTYsMHgxNTQ2LDAsezB4N2YsMHg2YywweDAyLDB4MTYsMHgxMCwweDkwLDB4N2YsMHhlMiwweDc0LDB4ODAsMHhmMCwweDkwLDB4N2YsMHg2YywweDAyLDB4MTZ9fSwKKyB7MTYsMHgxNTU2LDAsezB4NDAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhkZCwweGYyLDB4N2R9fSwKKyB7MTYsMHgxNTY2LDAsezB4MDIsMHgwNSwweDg2LDB4OTAsMHg3ZiwweGUyLDB4NzQsMHgwMCwweGYwLDB4OTAsMHg3ZiwweDliLDB4ZTAsMHg1NCwweDA0LDB4YjR9fSwKKyB7MTYsMHgxNTc2LDAsezB4MDAsMHgwNSwweDA1LDB4ODYsMHgwMiwweDE2LDB4NDAsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDgwLDB4ZjAsMHgwNSwweDg2LDB4ZjB9fSwKKyB7MTYsMHgxNTg2LDAsezB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGRkLDB4ZDQsMHgwMiwweDE2LDB4NDB9fSwKKyB7MTYsMHgxNTk2LDAsezB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjB9fSwKKyB7MTYsMHgxNWE2LDAsezB4ZjAsMHhmMCwweGRkLDB4ZWMsMHg3ZCwweDAyLDB4MDUsMHg4NiwweDkwLDB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMCwweDkwLDB4N2Z9fSwKKyB7MTYsMHgxNWI2LDAsezB4OWIsMHhlMCwweDU0LDB4MDQsMHhiNCwweDAwLDB4MDUsMHgwNSwweDg2LDB4MDIsMHgxNiwweDQwLDB4OTAsMHg3ZiwweGUyLDB4NzR9fSwKKyB7MTYsMHgxNWM2LDAsezB4ODAsMHhmMCwweDA1LDB4ODYsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjB9fSwKKyB7IDYsMHgxNWQ2LDAsezB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwfX0sCisgezE2LDB4MTVkYywwLHsweGRkLDB4Y2UsMHgwMiwweDE2LDB4NDAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGRkLDB4ZmEsMHg3ZCwweDAyLDB4MDUsMHg4NiwweDkwfX0sCisgezE2LDB4MTVlYywwLHsweDdmLDB4ZTIsMHg3NCwweDAwLDB4ZjAsMHg5MCwweDdmLDB4OWIsMHhlMCwweDU0LDB4MDQsMHhiNCwweDAwLDB4MDUsMHgwNSwweDg2fX0sCisgezE2LDB4MTVmYywwLHsweDAyLDB4MTYsMHg0MCwweDkwLDB4N2YsMHhlMiwweDc0LDB4ODAsMHhmMCwweDA1LDB4ODYsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGRkfX0sCisgezE2LDB4MTYwYywwLHsweGRjLDB4MDIsMHgxNiwweDQwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZGQsMHhmOCwweDdkLDB4MDIsMHgwNSwweDg2fX0sCisgezE2LDB4MTYxYywwLHsweDkwLDB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMCwweDkwLDB4N2YsMHg5YiwweGUwLDB4NTQsMHgwNCwweGI0LDB4MDAsMHgwNSwweDA1fX0sCisgezE2LDB4MTYyYywwLHsweDg2LDB4MDIsMHgxNiwweDQwLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg4MCwweGYwLDB4MDUsMHg4NiwweGYwLDB4ZjAsMHhmMCwweGYwfX0sCisgezE2LDB4MTYzYywwLHsweGYwLDB4ZjAsMHhkZCwweGRhLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHgwMCwweGYwLDB4ZDAsMHg4NSwweGQwLDB4ODQsMHgwNSwweDg2fX0sCisgezE2LDB4MTY0YywwLHsweGQwLDB4ODMsMHhkMCwweDgyLDB4ZDAsMHhlMCwweGZjLDB4ZDAsMHhlMCwweGZkLDB4ZDAsMHhlMCwweGZlLDB4ZDAsMHhlMCwweGZmfX0sCisgeyA1LDB4MTY1YywwLHsweGQwLDB4ZTAsMHhkMCwweGQwLDB4MjJ9fSwKKyB7MTYsMHgxNjYxLDAsezB4YzAsMHhkMCwweGMwLDB4ZTAsMHhjMCwweDgyLDB4YzAsMHg4MywweDkwLDB4NzYsMHg3YywweGUwLDB4OTAsMHg3ZiwweDZmLDB4ZjB9fSwKKyB7MTYsMHgxNjcxLDAsezB4OTAsMHg3NiwweDdkLDB4ZTAsMHg5MCwweDdmLDB4NmYsMHhmMCwweDkwLDB4NzYsMHg3ZSwweGUwLDB4OTAsMHg3ZiwweDZmLDB4ZjB9fSwKKyB7IDksMHgxNjgxLDAsezB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGUwLDB4ZDAsMHhkMCwweDIyfX0sCisgezE2LDB4MTY4YSwwLHsweGMwLDB4ZDAsMHhjMCwweGUwLDB4OGYsMHhlMCwweGMwLDB4ZTAsMHg4ZSwweGUwLDB4YzAsMHhlMCwweGMwLDB4ODIsMHhjMCwweDgzfX0sCisgezE2LDB4MTY5YSwwLHsweDA1LDB4ODYsMHhjMCwweDg0LDB4YzAsMHg4NSwweDkwLDB4NzYsMHg4NywweGUwLDB4ZmYsMHhiZiwweDAwLDB4MDMsMHgwMiwweDE3fX0sCisgezE2LDB4MTZhYSwwLHsweDAxLDB4OTAsMHg3ZiwweDk2LDB4ZTAsMHg0NCwweDgwLDB4ZjAsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDgwLDB4ZjAsMHg5MCwweDdmfX0sCisgezE2LDB4MTZiYSwwLHsweDYyLDB4ZTAsMHgwNSwweDg2LDB4OTAsMHg3ZiwweGUyLDB4NzQsMHgwMCwweGYwLDB4OTAsMHg3ZiwweDk2LDB4ZTAsMHg1NCwweDdmfX0sCisgezE2LDB4MTZjYSwwLHsweGYwLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg4MCwweGYwLDB4OTAsMHg3NiwweDhlLDB4ZTAsMHhiNCwweDAxLDB4MDUsMHgwNSwweDg2fX0sCisgezE2LDB4MTZkYSwwLHsweDAyLDB4MTYsMHhmNiwweGI0LDB4MDIsMHgwNSwweDA1LDB4ODYsMHgwMiwweDE2LDB4ZWIsMHgwNSwweDg2LDB4MDIsMHgxNiwweGZifX0sCisgezE2LDB4MTZlYSwwLHsweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGRmLDB4ZjgsMHgwMiwweDE2LDB4ZmIsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGRmfX0sCisgezE2LDB4MTZmYSwwLHsweGZhLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHgwMCwweGYwLDB4ZDAsMHg4NSwweGQwLDB4ODQsMHgwNSwweDg2LDB4ZDAsMHg4MywweGQwfX0sCisgezEyLDB4MTcwYSwwLHsweDgyLDB4ZDAsMHhlMCwweGZlLDB4ZDAsMHhlMCwweGZmLDB4ZDAsMHhlMCwweGQwLDB4ZDAsMHgyMn19LAorIHsxNiwweDE3MTYsMCx7MHhjMCwweDgyLDB4YzAsMHg4MywweGMwLDB4ZTAsMHhlOCwweGMwLDB4ZTAsMHg3OCwweGQxLDB4ZTgsMHgxNCwweGY4LDB4NzAsMHhmYn19LAorIHsxMCwweDE3MjYsMCx7MHhkMCwweGUwLDB4ZjgsMHhkMCwweGUwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHgyMn19LAorIHsxNiwweDE3MzAsMCx7MHhjMCwweDgyLDB4YzAsMHg4MywweGMwLDB4ZTAsMHhlOCwweGMwLDB4ZTAsMHg3OCwweDc4LDB4ZTgsMHgxNCwweGY4LDB4NzAsMHhmYn19LAorIHsxMCwweDE3NDAsMCx7MHhkMCwweGUwLDB4ZjgsMHhkMCwweGUwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHgyMn19LAorIHsgNywweDE3NGEsMCx7MHg5MCwweDdmLDB4YzUsMHg3NCwweDAyLDB4ZjAsMHgyMn19LAorIHsxNiwweDE3NTEsMCx7MHg5MCwweDdlLDB4YzAsMHhlMCwweDkwLDB4NzYsMHg0NSwweGYwLDB4OTAsMHg3ZSwweGMxLDB4ZTAsMHg5MCwweDc2LDB4NDQsMHhmMH19LAorIHsxNiwweDE3NjEsMCx7MHg5MCwweDdlLDB4YzIsMHhlMCwweDkwLDB4NzYsMHg0MywweGYwLDB4YjQsMHgwMCwweDAzLDB4MDIsMHgxNywweDc4LDB4OTAsMHg3Nn19LAorIHsxNiwweDE3NzEsMCx7MHgxOSwweDc0LDB4MDMsMHhmMCwweDAyLDB4MTcsMHg4ZSwweDkwLDB4NzYsMHg0NCwweGUwLDB4YjQsMHhiYiwweDA5LDB4OTAsMHg3Nn19LAorIHsxNiwweDE3ODEsMCx7MHgxOSwweDc0LDB4MDIsMHhmMCwweDAyLDB4MTcsMHg4ZSwweDkwLDB4NzYsMHgxOSwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHg0Mn19LAorIHsgMywweDE3OTEsMCx7MHhlNCwweGYwLDB4MjJ9fSwKKyB7IDQsMHgxNzk0LDAsezB4OGQsMHgyOSwweDhiLDB4MmF9fSwKKyB7MTYsMHgxNzk4LDAsezB4MTIsMHg0OSwweGZmLDB4ZWEsMHg0OSwweDYwLDB4NTcsMHgxMiwweDM2LDB4OTIsMHg3ZSwweDAwLDB4MjksMHhmZiwweGVlLDB4M2F9fSwKKyB7MTYsMHgxN2E4LDAsezB4YzksMHhlZiwweGM5LDB4NzUsMHgyYiwweGZmLDB4ZjUsMHgyYywweDg5LDB4MmQsMHhhYiwweDJiLDB4YWEsMHgyYywweGE5LDB4MmR9fSwKKyB7MTYsMHgxN2I4LDAsezB4OTAsMHgwMCwweDAxLDB4MTIsMHgzNiwweGFiLDB4ZmYsMHg2NCwweDA0LDB4NjAsMHgwNSwweGVmLDB4NjQsMHgwNSwweDcwLDB4MmV9fSwKKyB7MTYsMHgxN2M4LDAsezB4ZWYsMHhiNCwweDA0LDB4MTUsMHg5MCwweDAwLDB4MDIsMHgxMiwweDM2LDB4YWIsMHg2NSwweDI5LDB4NzAsMHgwYiwweDkwLDB4MDB9fSwKKyB7MTYsMHgxN2Q4LDAsezB4MDMsMHgxMiwweDM2LDB4YWIsMHg2NSwweDJhLDB4NzAsMHgwMSwweDIyLDB4MTIsMHgzNiwweDkyLDB4N2UsMHgwMCwweDI5LDB4ZmZ9fSwKKyB7MTYsMHgxN2U4LDAsezB4ZWUsMHgzYSwweGM5LDB4ZWYsMHhjOSwweDc1LDB4MmIsMHhmZiwweGY1LDB4MmMsMHg4OSwweDJkLDB4ODAsMHhiYywweDdiLDB4MDB9fSwKKyB7IDQsMHgxN2Y4LDAsezB4N2EsMHgwMCwweDc5LDB4MDB9fSwKKyB7IDEsMHgxN2ZjLDAsezB4MjJ9fSwKKyB7IDMsMHgxN2ZkLDAsezB4YzIsMHg4YiwweDMyfX0sCisgezE2LDB4MTgwMCwwLHsweDkwLDB4NzYsMHg5MCwweGUwLDB4MTQsMHg2MCwweDM3LDB4MTQsMHg3MCwweDAyLDB4MDEsMHhkOCwweDE0LDB4NzAsMHgwMiwweDIxfX0sCisgezE2LDB4MTgxMCwwLHsweDcyLDB4MTQsMHg3MCwweDAyLDB4NDEsMHgzYiwweDI0LDB4MDQsMHg2MCwweDAyLDB4NjEsMHgwMywweDkwLDB4N2YsMHhmYywweDc0fX0sCisgezE2LDB4MTgyMCwwLHsweGNjLDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OTUsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDU0fX0sCisgezE2LDB4MTgzMCwwLHsweDA1LDB4ZjAsMHg5MCwweDgwLDB4MDEsMHhmMCwweGU0LDB4OTAsMHg3NiwweDFhLDB4ZjAsMHhjMiwweDJlLDB4MjIsMHg5MCwweDc2fX0sCisgezE2LDB4MTg0MCwwLHsweDk1LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0NCwweDAyLDB4ZjAsMHgzMCwweDNlLDB4MDYsMHhlMCwweDQ0LDB4MDQsMHhmMCwweDgwfX0sCisgezE2LDB4MTg1MCwwLHsweDA3LDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg1NCwweGZiLDB4ZjAsMHg5MCwweDc2LDB4MWEsMHhlMCwweGI0LDB4MDEsMHgwOCwweDkwfX0sCisgezE2LDB4MTg2MCwwLHsweDc2LDB4OTUsMHhlMCwweDkwLDB4ODAsMHgwMSwweGYwLDB4OTAsMHg3NiwweDE5LDB4ZTAsMHhmZiwweGI0LDB4MDEsMHgyMiwweDkwfX0sCisgezE2LDB4MTg3MCwwLHsweDdmLDB4ZmMsMHg3NCwweDc0LDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OGYsMHg3NCwweDJifX0sCisgezE2LDB4MTg4MCwwLHsweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg4MSwweGYwLDB4OTAsMHg3NiwweDgwfX0sCisgezE2LDB4MTg5MCwwLHsweGYwLDB4ZWYsMHhiNCwweDAyLDB4MjIsMHg5MCwweDdmLDB4ZmMsMHg3NCwweDY4LDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjfX0sCisgezE2LDB4MThhMCwwLHsweGYwLDB4OTAsMHg3NiwweDhmLDB4NzQsMHgyZiwweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg0NCwweDAyLDB4ZjAsMHhlNCwweDkwfX0sCisgezE2LDB4MThiMCwwLHsweDc2LDB4ODEsMHhmMCwweDkwLDB4NzYsMHg4MCwweGYwLDB4MzAsMHgzZiwweDA5LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZlfX0sCisgezE2LDB4MThjMCwwLHsweGYwLDB4ODAsMHgwNywweDkwLDB4NzYsMHg5NywweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZifX0sCisgezE2LDB4MThkMCwwLHsweGYwLDB4OTAsMHg4MCwweDAyLDB4ZjAsMHhkMiwweDJlLDB4MjIsMHg5MCwweDc2LDB4OTUsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDQ0fX0sCisgezE2LDB4MThlMCwwLHsweDAyLDB4ZjAsMHgzMCwweDNlLDB4MDYsMHhlMCwweDQ0LDB4MDQsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc2LDB4OTUsMHhlMCwweDU0fX0sCisgezE2LDB4MThmMCwwLHsweGZiLDB4ZjAsMHg5MCwweDc2LDB4MWEsMHhlMCwweGI0LDB4MDEsMHgwOCwweDkwLDB4NzYsMHg5NSwweGUwLDB4OTAsMHg4MCwweDAxfX0sCisgezE2LDB4MTkwMCwwLHsweGYwLDB4OTAsMHg3NiwweDE5LDB4ZTAsMHhmZiwweGI0LDB4MDEsMHgyMiwweDkwLDB4N2YsMHhmYywweDc0LDB4MzAsMHhmMCwweDkwfX0sCisgezE2LDB4MTkxMCwwLHsweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OGYsMHg3NCwweDJiLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0fX0sCisgezE2LDB4MTkyMCwwLHsweGZkLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg4MSwweGYwLDB4OTAsMHg3NiwweDgwLDB4ZjAsMHhlZiwweGI0LDB4MDIsMHgyMiwweDkwfX0sCisgezE2LDB4MTkzMCwwLHsweDdmLDB4ZmMsMHg3NCwweDFjLDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OGYsMHg3NCwweDJmfX0sCisgezE2LDB4MTk0MCwwLHsweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg0NCwweDAyLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg4MSwweGYwLDB4OTAsMHg3NiwweDgwfX0sCisgezE2LDB4MTk1MCwwLHsweGYwLDB4MzAsMHgzZiwweDA5LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3NiwweDk3fX0sCisgezE2LDB4MTk2MCwwLHsweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZiLDB4ZjAsMHg5MCwweDgwLDB4MDIsMHhmMCwweGQyfX0sCisgezE2LDB4MTk3MCwwLHsweDJlLDB4MjIsMHg5MCwweDc2LDB4OTUsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQ0LDB4MDIsMHhmMCwweDQ0LDB4MDgsMHhmMCwweDMwfX0sCisgezE2LDB4MTk4MCwwLHsweDNlLDB4MDYsMHhlMCwweDQ0LDB4MDQsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc2LDB4OTUsMHhlMCwweDU0LDB4ZmIsMHhmMCwweDkwfX0sCisgezE2LDB4MTk5MCwwLHsweDc2LDB4MWEsMHhlMCwweGI0LDB4MDEsMHgwOCwweDkwLDB4NzYsMHg5NSwweGUwLDB4OTAsMHg4MCwweDAxLDB4ZjAsMHg5MCwweDc2fX0sCisgezE2LDB4MTlhMCwwLHsweDE5LDB4ZTAsMHhmZiwweGI0LDB4MDEsMHgyNSwweDkwLDB4N2YsMHhmYywweDc0LDB4Y2MsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0fX0sCisgezE2LDB4MTliMCwwLHsweGZjLDB4ZjAsMHg5MCwweDc2LDB4OGYsMHg3NCwweDJiLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmQsMHhmMCwweDU0fX0sCisgezE2LDB4MTljMCwwLHsweGZiLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg4MSwweGYwLDB4OTAsMHg3NiwweDgwLDB4ZjAsMHhlZiwweGI0LDB4MDIsMHgyNSwweDkwfX0sCisgezE2LDB4MTlkMCwwLHsweDdmLDB4ZmMsMHg3NCwweGM4LDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OGYsMHg3NCwweDJmfX0sCisgezE2LDB4MTllMCwwLHsweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg0NCwweDAyLDB4ZjAsMHg1NCwweGZiLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg4MSwweGYwfX0sCisgezE2LDB4MTlmMCwwLHsweDkwLDB4NzYsMHg4MCwweGYwLDB4ZWYsMHhiNCwweDAzLDB4MjUsMHg5MCwweDdmLDB4ZmMsMHg3NCwweDk4LDB4ZjAsMHg5MCwweDdmfX0sCisgezE2LDB4MWEwMCwwLHsweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDhmLDB4NzQsMHg1ZiwweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZkfX0sCisgezE2LDB4MWExMCwwLHsweGYwLDB4NDQsMHgwNCwweGYwLDB4ZTQsMHg5MCwweDc2LDB4ODEsMHhmMCwweDkwLDB4NzYsMHg4MCwweGYwLDB4MzAsMHgzZiwweDA5fX0sCisgezE2LDB4MWEyMCwwLHsweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZSwweGYwLDB4ODAsMHgwNywweDkwLDB4NzYsMHg5NywweGUwLDB4NDQsMHgwMSwweGYwfX0sCisgezE2LDB4MWEzMCwwLHsweDkwLDB4NzYsMHg5NywweGUwLDB4OTAsMHg4MCwweDAyLDB4ZjAsMHhkMiwweDJlLDB4MjIsMHg5MCwweDc2LDB4OTUsMHhlMCwweDU0fX0sCisgezE2LDB4MWE0MCwwLHsweGZlLDB4ZjAsMHg0NCwweDAyLDB4ZjAsMHg0NCwweDA4LDB4ZjAsMHgzMCwweDNlLDB4MDYsMHhlMCwweDQ0LDB4MDQsMHhmMCwweDgwfX0sCisgezE2LDB4MWE1MCwwLHsweDA3LDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg1NCwweGZiLDB4ZjAsMHg5MCwweDc2LDB4MWEsMHhlMCwweGI0LDB4MDEsMHgwOCwweDkwfX0sCisgezE2LDB4MWE2MCwwLHsweDc2LDB4OTUsMHhlMCwweDkwLDB4ODAsMHgwMSwweGYwLDB4OTAsMHg3NiwweDE5LDB4ZTAsMHhmZiwweGI0LDB4MDEsMHgyNSwweDkwfX0sCisgezE2LDB4MWE3MCwwLHsweDdmLDB4ZmMsMHg3NCwweGI0LDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OGYsMHg3NCwweDJifX0sCisgezE2LDB4MWE4MCwwLHsweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHg1NCwweGZiLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg4MSwweGYwfX0sCisgezE2LDB4MWE5MCwwLHsweDkwLDB4NzYsMHg4MCwweGYwLDB4ZWYsMHhiNCwweDAyLDB4MjUsMHg5MCwweDdmLDB4ZmMsMHg3NCwweGIwLDB4ZjAsMHg5MCwweDdmfX0sCisgezE2LDB4MWFhMCwwLHsweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDhmLDB4NzQsMHgyZiwweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg0NCwweDAyfX0sCisgezE2LDB4MWFiMCwwLHsweGYwLDB4NTQsMHhmYiwweGYwLDB4ZTQsMHg5MCwweDc2LDB4ODEsMHhmMCwweDkwLDB4NzYsMHg4MCwweGYwLDB4ZWYsMHhiNCwweDAzfX0sCisgezE2LDB4MWFjMCwwLHsweDI1LDB4OTAsMHg3ZiwweGZjLDB4NzQsMHg2OCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDhmfX0sCisgezE2LDB4MWFkMCwwLHsweDc0LDB4NWYsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZCwweGYwLDB4NDQsMHgwNCwweGYwLDB4ZTQsMHg5MCwweDc2fX0sCisgezE2LDB4MWFlMCwwLHsweDgxLDB4ZjAsMHg5MCwweDc2LDB4ODAsMHhmMCwweDMwLDB4M2YsMHgwOSwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZSwweGYwfX0sCisgezE2LDB4MWFmMCwwLHsweDgwLDB4MDcsMHg5MCwweDc2LDB4OTcsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4OTAsMHg4MCwweDAyfX0sCisgeyA0LDB4MWIwMCwwLHsweGYwLDB4ZDIsMHgyZSwweDIyfX0sCisgezE2LDB4MWIwNCwwLHsweDMwLDB4MmMsMHgzOCwweGMyLDB4MmMsMHg5MCwweDc2LDB4MTksMHhlMCwweGZmLDB4YjQsMHgwMSwweDBlLDB4OTAsMHg3NiwweDdjfX0sCisgezE2LDB4MWIxNCwwLHsweDc0LDB4YzAsMHhmMCwweGEzLDB4NzQsMHgxNCwweGYwLDB4YTMsMHg3NCwweDBiLDB4ZjAsMHhlZiwweGI0LDB4MDIsMHgwZCwweGU0fX0sCisgezE2LDB4MWIyNCwwLHsweDkwLDB4NzYsMHg3YywweGYwLDB4YTMsMHg3NCwweDEwLDB4ZjAsMHhhMywweDc0LDB4MGMsMHhmMCwweGVmLDB4YjQsMHgwMywweDBifX0sCisgezEyLDB4MWIzNCwwLHsweGU0LDB4OTAsMHg3NiwweDdjLDB4ZjAsMHhhMywweDc0LDB4MTgsMHhmMCwweGEzLDB4ZjAsMHgyMn19LAorIHsxNiwweDFiNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFiNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFiNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFiNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFiODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFiOTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFiYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFiYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFiYzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFiZDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFiZTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFiZjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFjMDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFjMTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFjMjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFjMzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFjNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFjNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFjNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFjNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFjODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFjOTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFjYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFjYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFjYzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFjZDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFjZTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFjZjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFkMDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFkMTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFkMjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFkMzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFkNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFkNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFkNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFkNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFkODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFkOTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFkYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFkYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFkYzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFkZDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFkZTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFkZjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFlMDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFlMTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFlMjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFlMzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFlNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFlNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFlNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFlNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFlODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFlOTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFlYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNCwweDFlYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWViZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWVjZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWVkZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWVlZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWVmZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWYwZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWYxZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWYyZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgeyAyLDB4MWYzZSwwLHsweDAwLDB4MDB9fSwKKyB7MTYsMHgxZjQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZjUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZjYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZjcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZjgwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZjkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZmEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZmIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZmMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZmQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZmUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZmYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMDAwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMDEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMDIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMDMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMDQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMDUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMDYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMDcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMDgwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMDkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMGEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMGIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMGMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMGQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMGUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMGYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMTAwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMTEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMTIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMTMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMTQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMTUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMTYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMTcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMTgwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMTkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMWEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMWIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMWMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMWQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMWUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMWYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMjAwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMjEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMjIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMjMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMjQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMjUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMjYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMjcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMjgwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMjkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMmEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMmIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMmMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMmQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMmUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMmYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMzAwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMzEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMzIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMzMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMzQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMzUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMzYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTQsMHgyMzcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIzN2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIzOGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIzOWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIzYWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIzYmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIzY2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIzZGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIzZWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIzZmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI0MGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI0MWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI0MmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI0M2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI0NGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI0NWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI0NmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI0N2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI0OGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI0OWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI0YWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI0YmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI0Y2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI0ZGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI0ZWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI0ZmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI1MGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI1MWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI1MmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI1M2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI1NGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI1NWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI1NmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI1N2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI1OGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI1OWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI1YWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI1YmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI1Y2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI1ZGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI1ZWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI1ZmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI2MGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI2MWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI2MmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI2M2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI2NGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI2NWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI2NmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI2N2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI2OGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI2OWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI2YWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI2YmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI2Y2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI2ZGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNCwweDI2ZWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjZmYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjcwYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjcxYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjcyYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjczYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4Mjc0YywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4Mjc1YywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4Mjc2YywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4Mjc3YywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4Mjc4YywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4Mjc5YywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjdhYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjdiYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjdjYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjdkYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjdlYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgeyA1LDB4MjdmYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MjJ9fSwKKyB7MTYsMHgyODAxLDAsezB4YzIsMHgyMCwweGMyLDB4MjEsMHhjMiwweDJhLDB4OTAsMHg3ZiwweGU4LDB4ZTAsMHgxMiwweDM3LDB4ZjksMHgyOCwweDMwLDB4MDB9fSwKKyB7MTYsMHgyODExLDAsezB4MjgsMHg4YywweDAxLDB4MjgsMHhhMiwweDAyLDB4MmEsMHgxZiwweDIxLDB4MmEsMHg2YSwweDIyLDB4MjksMHgzZCwweDgwLDB4Mjl9fSwKKyB7MTYsMHgyODIxLDAsezB4N2QsMHg4MSwweDI5LDB4ZDEsMHg4MiwweDJhLDB4ODQsMHhhMSwweDJhLDB4YmEsMHhhMiwweDAwLDB4MDAsMHgyYSwweGJmLDB4OTB9fSwKKyB7MTYsMHgyODMxLDAsezB4N2YsMHhlOSwweGUwLDB4MTQsMHg2MCwweDExLDB4MjQsMHhmZSwweDYwLDB4MjgsMHgyNCwweGZlLDB4NjAsMHgzYiwweDI0LDB4ZmN9fSwKKyB7MTYsMHgyODQxLDAsezB4NzAsMHg0MCwweDEyLDB4NGIsMHhhMCwweDQxLDB4Y2IsMHgxMiwweDRkLDB4YTcsMHg0MCwweDAyLDB4NDEsMHhjYiwweDkwLDB4N2Z9fSwKKyB7MTYsMHgyODUxLDAsezB4ZWEsMHhlMCwweGI0LDB4MDEsMHgwNCwweGMyLDB4MjIsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjB9fSwKKyB7MTYsMHgyODYxLDAsezB4NDEsMHhjYiwweDEyLDB4NGQsMHhhOSwweDkwLDB4N2YsMHhlYSwweGUwLDB4YjQsMHgwMSwweDA0LDB4ZDIsMHgyMiwweDQxLDB4Y2J9fSwKKyB7MTYsMHgyODcxLDAsezB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjB9fSwKKyB7MTYsMHgyODgxLDAsezB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhlOSwweGUwLDB4MjR9fSwKKyB7MTYsMHgyODkxLDAsezB4ZjUsMHg3MCwweDA1LDB4MTIsMHg0OCwweDAwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDF9fSwKKyB7MTYsMHgyOGExLDAsezB4Y2IsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4ZmQsMHg2MCwweDU0LDB4MjQsMHgwMiwweDYwLDB4MDIsMHgyMSwweDM0LDB4MTJ9fSwKKyB7MTYsMHgyOGIxLDAsezB4NGQsMHhhNywweDQwLDB4MDIsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHg3MCwweDM4LDB4OTAsMHg3ZiwweGVjLDB4ZTB9fSwKKyB7MTYsMHgyOGMxLDAsezB4ZjQsMHg1NCwweDgwLDB4ZmYsMHhjNCwweDU0LDB4MGYsMHhmZiwweGUwLDB4NTQsMHgwNywweDJmLDB4MjUsMHhlMCwweDI0LDB4YjR9fSwKKyB7MTYsMHgyOGQxLDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4OTAsMHg3ZiwweGVjLDB4ZTAsMHg1NCwweDgwLDB4ZmZ9fSwKKyB7MTYsMHgyOGUxLDAsezB4MTMsMHgxMywweDEzLDB4NTQsMHgxZiwweGZmLDB4ZTAsMHg1NCwweDA3LDB4MmYsMHg5MCwweDdmLDB4ZDcsMHhmMCwweGUwLDB4NDR9fSwKKyB7MTYsMHgyOGYxLDAsezB4MjAsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQxLDB4Y2IsMHgxMiwweDRkLDB4YTl9fSwKKyB7MTYsMHgyOTAxLDAsezB4NDAsMHgwMiwweDQxLDB4Y2IsMHg5MCwweDdmLDB4ZWEsMHhlMCwweDcwLDB4MjAsMHg5MCwweDdmLDB4ZWMsMHhlMCwweGY0LDB4NTR9fSwKKyB7MTYsMHgyOTExLDAsezB4ODAsMHhmZiwweGM0LDB4NTQsMHgwZiwweGZmLDB4ZTAsMHg1NCwweDA3LDB4MmYsMHgyNSwweGUwLDB4MjQsMHhiNCwweGY1LDB4ODJ9fSwKKyB7MTYsMHgyOTIxLDAsezB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweDc0LDB4MDEsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDF9fSwKKyB7MTYsMHgyOTMxLDAsezB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGU5LDB4ZTB9fSwKKyB7MTYsMHgyOTQxLDAsezB4NjAsMHgxMiwweDI0LDB4ZjgsMHg2MCwweDA5LDB4MjQsMHgwMiwweDcwLDB4MjksMHgxMiwweDQzLDB4ZGIsMHg0MSwweGNiLDB4MTJ9fSwKKyB7MTYsMHgyOTUxLDAsezB4NGQsMHg1YywweDQxLDB4Y2IsMHgxMiwweDRkLDB4YTUsMHhhMiwweDIyLDB4ZTQsMHgzMywweGZmLDB4MjUsMHhlMCwweGZmLDB4YTJ9fSwKKyB7MTYsMHgyOTYxLDAsezB4MjMsMHhlNCwweDMzLDB4NGYsMHg5MCwweDdmLDB4MDAsMHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDJ9fSwKKyB7MTYsMHgyOTcxLDAsezB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGU5LDB4ZTB9fSwKKyB7MTYsMHgyOTgxLDAsezB4NjAsMHgzMywweDI0LDB4ZjYsMHg2MCwweDJhLDB4MjQsMHgwNCwweDcwLDB4M2QsMHg5MCwweDdmLDB4ZWIsMHhlMCwweDI0LDB4ZGV9fSwKKyB7MTYsMHgyOTkxLDAsezB4NjAsMHgwYywweDA0LDB4NzAsMHgxMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2Z9fSwKKyB7MTYsMHgyOWExLDAsezB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQxLDB4Y2J9fSwKKyB7MTYsMHgyOWIxLDAsezB4MTIsMHg0NiwweDg1LDB4NDEsMHhjYiwweDEyLDB4NGQsMHhhNSwweGU0LDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHhhMywweGYwLDB4OTB9fSwKKyB7MTYsMHgyOWMxLDAsezB4N2YsMHhiNSwweDc0LDB4MDIsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQxLDB4Y2J9fSwKKyB7MTYsMHgyOWQxLDAsezB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweGY0LDB4NjAsMHgzNCwweDI0LDB4MGMsMHg3MCwweDM5LDB4MTIsMHg0ZCwweGE1LDB4OTB9fSwKKyB7MTYsMHgyOWUxLDAsezB4N2YsMHhlYywweGUwLDB4ZjQsMHg1NCwweDgwLDB4ZmYsMHhjNCwweDU0LDB4MGYsMHhmZiwweGUwLDB4NTQsMHgwNywweDJmLDB4MjV9fSwKKyB7MTYsMHgyOWYxLDAsezB4ZTAsMHgyNCwweGI0LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlMCwweDU0LDB4ZmQsMHg5MCwweDdmLDB4MDB9fSwKKyB7MTYsMHgyYTAxLDAsezB4ZjAsMHhlNCwweGEzLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAyLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTB9fSwKKyB7MTYsMHgyYTExLDAsezB4NDQsMHgwMSwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2Z9fSwKKyB7MTYsMHgyYTIxLDAsezB4ZTksMHhlMCwweDI0LDB4ZjYsMHg2MCwweDEyLDB4MTQsMHg2MCwweDFhLDB4MjQsMHgwMiwweDcwLDB4MWQsMHhkMiwweDIwLDB4OTB9fSwKKyB7MTYsMHgyYTMxLDAsezB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4ODAsMHgxMiwweGQyLDB4MjAsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDF9fSwKKyB7MTYsMHgyYTQxLDAsezB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMCwweDIwLDB4MTgsMHg5MCwweDdmLDB4ZWV9fSwKKyB7MTYsMHgyYTUxLDAsezB4ZTAsMHg3MCwweDA0LDB4YTMsMHhlMCwweDYwLDB4MGIsMHhkMiwweDI5LDB4ZDIsMHgyNywweDEyLDB4MTcsMHg0YSwweGQyLDB4MmF9fSwKKyB7MTYsMHgyYTYxLDAsezB4ODAsMHgwMywweDEyLDB4MDgsMHgwMCwweGMyLDB4MjAsMHg4MCwweDYxLDB4OTAsMHg3ZiwweGVlLDB4ZTAsMHg3MCwweDA0LDB4YTN9fSwKKyB7MTYsMHgyYTcxLDAsezB4ZTAsMHg2MCwweDBiLDB4ZDIsMHgyOSwweGQyLDB4MjgsMHgxMiwweDE3LDB4NGEsMHhkMiwweDJhLDB4ODAsMHg0YywweDEyLDB4Mzh9fSwKKyB7MTYsMHgyYTgxLDAsezB4NzQsMHg4MCwweDQ3LDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweGZlLDB4NjAsMHgxMiwweDE0LDB4NjAsMHgxYSwweDI0LDB4MDJ9fSwKKyB7MTYsMHgyYTkxLDAsezB4NzAsMHgxZCwweGQyLDB4MjEsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDgwLDB4MTIsMHhkMiwweDIxLDB4OTB9fSwKKyB7MTYsMHgyYWExLDAsezB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4ODAsMHgwNywweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjB9fSwKKyB7MTYsMHgyYWIxLDAsezB4MjEsMHgwMywweDEyLDB4MTAsMHgwMCwweGMyLDB4MjEsMHg4MCwweDExLDB4MTIsMHgyYSwweGQ2LDB4ODAsMHgwYywweDEyLDB4NGR9fSwKKyB7MTYsMHgyYWMxLDAsezB4YWIsMHg1MCwweDA3LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMCwweDJhLDB4MDcsMHg5MCwweDdmLDB4YjR9fSwKKyB7IDUsMHgyYWQxLDAsezB4ZTAsMHg0NCwweDAyLDB4ZjAsMHgyMn19LAorIHsxNiwweDJhZDYsMCx7MHhlNCwweDkwLDB4NzYsMHgyNywweGYwLDB4OTAsMHg3NiwweDI3LDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0Mn19LAorIHsxNiwweDJhZTYsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDdmLDB4ZWMsMHhlMCwweGZkLDB4ZWUsMHg2ZH19LAorIHsxNiwweDJhZjYsMCx7MHg2MCwweDBlLDB4ZWYsMHhjMywweDk0LDB4MDYsMHg1MCwweDA4LDB4OTAsMHg3NiwweDI3LDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhkNX19LAorIHsxNiwweDJiMDYsMCx7MHhlZiwweGI0LDB4MDYsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHhlZiwweDc1LDB4ZjAsMHgwZn19LAorIHsxNiwweDJiMTYsMCx7MHhhNCwweDI0LDB4NDEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3NiwweDI4LDB4ZjAsMHgyNH19LAorIHsxNiwweDJiMjYsMCx7MHg5ZiwweDcwLDB4MDIsMHhhMSwweDc0LDB4MjQsMHgyMSwweDYwLDB4MDIsMHhhMSwweGExLDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNH19LAorIHsxNiwweDJiMzYsMCx7MHg3ZSwweDcwLDB4MDIsMHg2MSwweGZjLDB4MTQsMHg3MCwweDAyLDB4ODEsMHhiNSwweDI0LDB4MDIsMHg2MCwweDAyLDB4YTEsMHg2Y319LAorIHsxNiwweDJiNDYsMCx7MHhlZiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmY319LAorIHsxNiwweDJiNTYsMCx7MHhhMywweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmYsMHg3YiwweDQ0LDB4N2EsMHhhYywweDc5LDB4MDAsMHg3OH19LAorIHsxNiwweDJiNjYsMCx7MHgwMCwweGMzLDB4MTIsMHgzNywweGFiLDB4NzAsMHgxMywweDkwLDB4N2YsMHgwMCwweDc0LDB4NDQsMHhmMCwweGEzLDB4NzQsMHhhY319LAorIHsxNiwweDJiNzYsMCx7MHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDMsMHhmMCwweDkwLDB4NzYsMHgyNywweGUwLDB4NzUsMHhmMH19LAorIHsxNiwweDJiODYsMCx7MHgwZiwweGE0LDB4MjQsMHg0MywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmYywweGEzLDB4ZTAsMHhmZH19LAorIHsxNiwweDJiOTYsMCx7MHhhMywweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmYsMHg3YiwweDgwLDB4N2EsMHhiYiwweDc5LDB4MDAsMHg3OCwweDAwLDB4YzMsMHgxMn19LAorIHsxNiwweDJiYTYsMCx7MHgzNywweGFiLDB4NzAsMHgxMywweDkwLDB4N2YsMHgwMCwweDc0LDB4ODAsMHhmMCwweGEzLDB4NzQsMHhiYiwweGYwLDB4ZTQsMHhhM319LAorIHsxNiwweDJiYjYsMCx7MHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDMsMHhmMCwweDkwLDB4NzYsMHgyNywweGUwLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNH19LAorIHsxNiwweDJiYzYsMCx7MHg0MywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmYywweGEzLDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmZX19LAorIHsxNiwweDJiZDYsMCx7MHhhMywweGUwLDB4ZmYsMHg3YiwweDAwLDB4N2EsMHg3NywweDc5LDB4MDEsMHg3OCwweDAwLDB4YzMsMHgxMiwweDM3LDB4YWIsMHg2MH19LAorIHsxNiwweDJiZTYsMCx7MHgwMiwweGExLDB4YTgsMHg5MCwweDdmLDB4MDAsMHhmMCwweGEzLDB4NzQsMHg3NywweGYwLDB4YTMsMHg3NCwweDAxLDB4ZjAsMHg5MH19LAorIHsxNiwweDJiZjYsMCx7MHg3ZiwweGI1LDB4NzQsMHgwMywweGYwLDB4MjIsMHg5MCwweDc2LDB4MjcsMHhlMCwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0N319LAorIHsxNiwweDJjMDYsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmMsMHhhMywweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmUsMHhhM319LAorIHsxNiwweDJjMTYsMCx7MHhlMCwweGZmLDB4N2IsMHg0NCwweDdhLDB4YWMsMHg3OSwweDAwLDB4NzgsMHgwMCwweGMzLDB4MTIsMHgzNywweGFiLDB4NzAsMHgxM319LAorIHsxNiwweDJjMjYsMCx7MHg5MCwweDdmLDB4MDAsMHg3NCwweDQ0LDB4ZjAsMHhhMywweDc0LDB4YWMsMHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNX19LAorIHsxNiwweDJjMzYsMCx7MHg3NCwweDAzLDB4ZjAsMHg5MCwweDc2LDB4MjcsMHhlMCwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0NywweGY1LDB4ODIsMHhlNH19LAorIHsxNiwweDJjNDYsMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmMsMHhhMywweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmYsMHg3Yn19LAorIHsxNiwweDJjNTYsMCx7MHg4MCwweDdhLDB4YmIsMHg3OSwweDAwLDB4NzgsMHgwMCwweGMzLDB4MTIsMHgzNywweGFiLDB4NzAsMHgxMywweDkwLDB4N2YsMHgwMH19LAorIHsxNiwweDJjNjYsMCx7MHg3NCwweDgwLDB4ZjAsMHhhMywweDc0LDB4YmIsMHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDMsMHhmMH19LAorIHsxNiwweDJjNzYsMCx7MHg5MCwweDc2LDB4MjcsMHhlMCwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0NywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNX19LAorIHsxNiwweDJjODYsMCx7MHg4MywweGUwLDB4ZmMsMHhhMywweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmYsMHg3YiwweDAwLDB4N2EsMHg3N319LAorIHsxNiwweDJjOTYsMCx7MHg3OSwweDAxLDB4NzgsMHgwMCwweGMzLDB4MTIsMHgzNywweGFiLDB4NjAsMHgwMiwweGExLDB4YTgsMHg5MCwweDdmLDB4MDAsMHhmMH19LAorIHsxNiwweDJjYTYsMCx7MHhhMywweDc0LDB4NzcsMHhmMCwweGEzLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMywweGYwLDB4MjIsMHg5MH19LAorIHsxNiwweDJjYjYsMCx7MHg3NiwweDI3LDB4ZTAsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NGIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4M319LAorIHsxNiwweDJjYzYsMCx7MHhlMCwweGZjLDB4YTMsMHhlMCwweGZkLDB4YTMsMHhlMCwweGZlLDB4YTMsMHhlMCwweGZmLDB4N2IsMHg0NCwweDdhLDB4YWMsMHg3OX19LAorIHsxNiwweDJjZDYsMCx7MHgwMCwweDc4LDB4MDAsMHhjMywweDEyLDB4MzcsMHhhYiwweDcwLDB4MTMsMHg5MCwweDdmLDB4MDAsMHg3NCwweDQ0LDB4ZjAsMHhhM319LAorIHsxNiwweDJjZTYsMCx7MHg3NCwweGFjLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDc2LDB4MjcsMHhlMH19LAorIHsxNiwweDJjZjYsMCx7MHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NGIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmMsMHhhM319LAorIHsxNiwweDJkMDYsMCx7MHhlMCwweGZkLDB4YTMsMHhlMCwweGZlLDB4YTMsMHhlMCwweGZmLDB4N2IsMHg4MCwweDdhLDB4YmIsMHg3OSwweDAwLDB4NzgsMHgwMH19LAorIHsxNiwweDJkMTYsMCx7MHhjMywweDEyLDB4MzcsMHhhYiwweDcwLDB4MTMsMHg5MCwweDdmLDB4MDAsMHg3NCwweDgwLDB4ZjAsMHhhMywweDc0LDB4YmIsMHhmMH19LAorIHsxNiwweDJkMjYsMCx7MHhlNCwweGEzLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDc2LDB4MjcsMHhlMCwweDc1LDB4ZjAsMHgwZn19LAorIHsxNiwweDJkMzYsMCx7MHhhNCwweDI0LDB4NGIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmMsMHhhMywweGUwLDB4ZmQsMHhhM319LAorIHsxNiwweDJkNDYsMCx7MHhlMCwweGZlLDB4YTMsMHhlMCwweGZmLDB4N2IsMHgwMCwweDdhLDB4NzcsMHg3OSwweDAxLDB4NzgsMHgwMCwweGMzLDB4MTIsMHgzN319LAorIHsxNiwweDJkNTYsMCx7MHhhYiwweDcwLDB4NGYsMHg5MCwweDdmLDB4MDAsMHhmMCwweGEzLDB4NzQsMHg3NywweGYwLDB4YTMsMHg3NCwweDAxLDB4ZjAsMHg5MH19LAorIHsxNiwweDJkNjYsMCx7MHg3ZiwweGI1LDB4NzQsMHgwMywweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3Zn19LAorIHsxNiwweDJkNzYsMCx7MHhlOSwweGUwLDB4MjQsMHg3ZiwweDcwLDB4MWUsMHg5MCwweDc2LDB4MjcsMHhlMCwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0Zn19LAorIHsxNiwweDJkODYsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NH19LAorIHsxNiwweDJkOTYsMCx7MHgwMSwweGYwLDB4ODAsMHgwNywweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NH19LAorIHsgMywweDJkYTYsMCx7MHgwMSwweGYwLDB4MjJ9fSwKKyB7MTYsMHgyZGE5LDAsezB4ZTQsMHg5MCwweDc2LDB4MzYsMHhmMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGUsMHhmNSwweDgyLDB4ZTR9fSwKKyB7MTYsMHgyZGI5LDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDAxLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZiwweGY1LDB4ODJ9fSwKKyB7MTYsMHgyZGM5LDAsezB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDEsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDEwLDB4ZjV9fSwKKyB7MTYsMHgyZGQ5LDAsezB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmZ9fSwKKyB7MTYsMHgyZGU5LDAsezB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDEwLDB4ZjB9fSwKKyB7MTYsMHgyZGY5LDAsezB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDV9fSwKKyB7MTYsMHgyZTA5LDAsezB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgxMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTR9fSwKKyB7MTYsMHgyZTE5LDAsezB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBlLDB4ZjV9fSwKKyB7MTYsMHgyZTI5LDAsezB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwMiwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGZ9fSwKKyB7MTYsMHgyZTM5LDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDAyLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjR9fSwKKyB7MTYsMHgyZTQ5LDAsezB4MTAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjB9fSwKKyB7MTYsMHgyZTU5LDAsezB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzR9fSwKKyB7MTYsMHgyZTY5LDAsezB4MDEsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODN9fSwKKyB7MTYsMHgyZTc5LDAsezB4NzQsMHgwMywweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MTAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjV9fSwKKyB7MTYsMHgyZTg5LDAsezB4ODMsMHhlNCwweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjR9fSwKKyB7MTYsMHgyZTk5LDAsezB4MGUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MTAsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTR9fSwKKyB7MTYsMHgyZWE5LDAsezB4MjQsMHgwZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwNiwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDN9fSwKKyB7MTYsMHgyZWI5LDAsezB4YTQsMHgyNCwweDEwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNCwweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTB9fSwKKyB7MTYsMHgyZWM5LDAsezB4MDQsMHhmMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjV9fSwKKyB7MTYsMHgyZWQ5LDAsezB4ODMsMHg3NCwweDAyLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzV9fSwKKyB7MTYsMHgyZWU5LDAsezB4ZjUsMHg4MywweDc0LDB4MDQsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDEwLDB4ZjUsMHg4MiwweGU0LDB4MzR9fSwKKyB7MTYsMHgyZWY5LDAsezB4NzUsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDN9fSwKKyB7MTYsMHgyZjA5LDAsezB4YTQsMHgyNCwweDBlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDAyLDB4ZjAsMHhlZiwweDc1LDB4ZjB9fSwKKyB7MTYsMHgyZjE5LDAsezB4MDMsMHhhNCwweDI0LDB4MGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDgsMHhmMCwweGVmLDB4NzV9fSwKKyB7MTYsMHgyZjI5LDAsezB4ZjAsMHgwMywweGE0LDB4MjQsMHgxMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwNCwweGYwLDB4OTB9fSwKKyB7MTYsMHgyZjM5LDAsezB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGUsMHhmNSwweDgyLDB4ZTR9fSwKKyB7MTYsMHgyZjQ5LDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDAyLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZiwweGY1LDB4ODJ9fSwKKyB7MTYsMHgyZjU5LDAsezB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MGEsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDEwLDB4ZjV9fSwKKyB7MTYsMHgyZjY5LDAsezB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwNCwweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTB9fSwKKyB7MTYsMHgyZjc5LDAsezB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDJ9fSwKKyB7MTYsMHgyZjg5LDAsezB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzR9fSwKKyB7MTYsMHgyZjk5LDAsezB4MDksMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDEwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODN9fSwKKyB7MTYsMHgyZmE5LDAsezB4NzQsMHgwNCwweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjR9fSwKKyB7MTYsMHgyZmI5LDAsezB4MGUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDIsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTR9fSwKKyB7MTYsMHgyZmM5LDAsezB4MjQsMHgwZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwNywweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDN9fSwKKyB7MTQsMHgyZmQ5LDAsezB4YTQsMHgyNCwweDEwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDA0LDB4ZjAsMHgyMn19LAorIHsxNiwweDJmZTcsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHhkMiwweDI2LDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwMX19LAorIHsgOCwweDJmZjcsMCx7MHhmMCwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgeyAxLDB4MmZmZiwwLHsweDMyfX0sCisgezE2LDB4MzAwMCwwLHsweDkwLDB4N2YsMHhiNiwweGUwLDB4MjAsMHhlMSwweDAyLDB4YzIsMHgzZCwweGQyLDB4MzYsMHgyMCwweDM2LDB4MDIsMHg0MSwweDZlfX0sCisgezE2LDB4MzAxMCwwLHsweDMwLDB4M2QsMHgwMiwweDQxLDB4NmUsMHg5MCwweDgwLDB4MDcsMHhlMCwweDYwLDB4MDQsMHhkMiwweDM2LDB4ODAsMHgwMiwweGMyfX0sCisgezE2LDB4MzAyMCwwLHsweDM2LDB4MjAsMHgzNiwweDAyLDB4NDEsMHgyZSwweGQyLDB4MzUsMHhlNCwweGY1LDB4MWEsMHg5MCwweDgwLDB4MDQsMHhlMCwweGY1fX0sCisgezE2LDB4MzAzMCwwLHsweDE5LDB4NzQsMHgwOCwweDI1LDB4MGUsMHhmOCwweGE2LDB4MTksMHg4NSwweDE5LDB4MTgsMHhlNSwweDE4LDB4MjAsMHhlNywweDA0fX0sCisgezE2LDB4MzA0MCwwLHsweGQyLDB4MzgsMHg4MCwweDAyLDB4YzIsMHgzOCwweDMwLDB4MzgsMHgwMiwweDIxLDB4ZDQsMHhlNCwweGY1LDB4MTYsMHhlNSwweDE5fX0sCisgezE2LDB4MzA1MCwwLHsweGI0LDB4ZjAsMHgwYywweGQyLDB4MzksMHg3NSwweDA4LDB4MDQsMHg3NSwweDA5LDB4ZjAsMHgwNSwweDBlLDB4ODAsMHgwMiwweDA1fX0sCisgezE2LDB4MzA2MCwwLHsweDE2LDB4ZTUsMHgxOSwweDY0LDB4ZjcsMHg3MCwweDNkLDB4YzIsMHgzOSwweGU1LDB4MGUsMHgyNCwweGZlLDB4NjAsMHgxNywweDE0fX0sCisgezE2LDB4MzA3MCwwLHsweDYwLDB4MjIsMHgyNCwweDAzLDB4NzAsMHgyOSwweDc1LDB4MDgsMHgwNSwweDc1LDB4MDksMHhmNywweGU0LDB4ZjUsMHgwYSwweGY1fX0sCisgezE2LDB4MzA4MCwwLHsweDBiLDB4NzUsMHgwZSwweDA0LDB4ODAsMHgyMCwweDc1LDB4MDgsMHgwNiwweDc1LDB4MGEsMHhmNywweGU0LDB4ZjUsMHgwYiwweDc1fX0sCisgezE2LDB4MzA5MCwwLHsweDBlLDB4MDQsMHg4MCwweDEyLDB4NzUsMHgwOCwweDA3LDB4NzUsMHgwYiwweGY3LDB4NzUsMHgwZSwweDA0LDB4ODAsMHgwNywweDEyfX0sCisgezE2LDB4MzBhMCwwLHsweDQ4LDB4ZjMsMHg4MCwweDAyLDB4MDUsMHgxNiwweGU1LDB4MTksMHg1NCwweGY4LDB4NjQsMHhmOCwweDcwLDB4M2IsMHhjMiwweDM1fX0sCisgezE2LDB4MzBiMCwwLHsweGU1LDB4MTksMHgyNCwweDA3LDB4NjAsMHgwYywweDI0LDB4ZmMsMHg2MCwweDA4LDB4MjQsMHgwNSwweDI0LDB4ZjgsMHg1MCwweDA2fX0sCisgezE2LDB4MzBjMCwwLHsweDgwLDB4MDgsMHhkMiwweDNhLDB4ODAsMHgwNiwweGMyLDB4M2EsMHg4MCwweDAyLDB4ZDIsMHgzYSwweDc1LDB4MWEsMHgwMSwweDIwfX0sCisgezE2LDB4MzBkMCwwLHsweDNhLDB4MTksMHg5MCwweDdlLDB4ODAsMHg3NCwweDBmLDB4ZjAsMHhhMywweGU1LDB4MTksMHhmMCwweGU0LDB4YTMsMHhmMCwweGEzfX0sCisgezE2LDB4MzBlMCwwLHsweGYwLDB4OTAsMHg3ZiwweGI3LDB4NzQsMHgwNCwweGYwLDB4ODAsMHgwMiwweDA1LDB4MTYsMHgyMCwweDM5LDB4NmQsMHhlNSwweDE5fX0sCisgezE2LDB4MzBmMCwwLHsweDY0LDB4ZjcsMHg2MCwweDY3LDB4ZTUsMHgxYSwweDcwLDB4NjMsMHhlNSwweDE4LDB4NTQsMHhmMCwweDY0LDB4ZjAsMHg3MCwweDU5fX0sCisgezE2LDB4MzEwMCwwLHsweDg1LDB4MTgsMHgxOSwweGY1LDB4MGUsMHhlNSwweDE5LDB4MjQsMHgwZiwweDYwLDB4MWIsMHgyNCwweGZlLDB4NjAsMHgxNywweDI0fX0sCisgezE2LDB4MzExMCwwLHsweGZkLDB4NjAsMHgyMiwweDE0LDB4NjAsMHgxZiwweDI0LDB4MDUsMHg3MCwweDJmLDB4NzUsMHgwOCwweDAzLDB4MDUsMHgwZSwweDg1fX0sCisgezE2LDB4MzEyMCwwLHsweDE4LDB4MDksMHhkMiwweDM3LDB4ODAsMHgyOCwweDc1LDB4MDgsMHgwMiwweDA1LDB4MGUsMHg4NSwweDE4LDB4MDksMHg3NSwweDE0fX0sCisgezE2LDB4MzEzMCwwLHsweDAxLDB4ZDIsMHgzNywweDgwLDB4MTksMHg3NSwweDA4LDB4MDUsMHgwNSwweDBlLDB4ODUsMHgxOCwweDA5LDB4ZTQsMHhmNSwweDBhfX0sCisgezE2LDB4MzE0MCwwLHsweGY1LDB4MGIsMHg3NSwweDBlLDB4MDMsMHhkMiwweDM3LDB4ODAsMHgwNSwweDEyLDB4NDgsMHhmMywweGMyLDB4MzUsMHgzMCwweDM1fX0sCisgezE2LDB4MzE1MCwwLHsweDBhLDB4ODUsMHgwOCwweDEzLDB4ODUsMHgxOCwweDEyLDB4ODAsMHgwMiwweDA1LDB4MTYsMHg4NSwweDE4LDB4MTksMHhlNSwweDE2fX0sCisgezE2LDB4MzE2MCwwLHsweDY0LDB4MDQsMHg3MCwweDYyLDB4ZjUsMHgwZSwweGU1LDB4MTksMHg1NCwweGYwLDB4ZjUsMHgxOSwweGY1LDB4MTUsMHg4NSwweDE4fX0sCisgezE2LDB4MzE3MCwwLHsweDE5LDB4ZTUsMHgxNSwweDI0LDB4NzAsMHg2MCwweDE4LDB4MjQsMHhmMCwweDYwLDB4MTQsMHgyNCwweGYwLDB4NjAsMHgxMCwweDI0fX0sCisgezE2LDB4MzE4MCwwLHsweGYwLDB4NjAsMHgxZSwweDI0LDB4ZjAsMHg2MCwweDFhLDB4MjQsMHhmMCwweDYwLDB4MDQsMHgyNCwweDYwLDB4NzAsMHgyNywweGU1fX0sCisgezE2LDB4MzE5MCwwLHsweDE1LDB4YzQsMHg1NCwweDBmLDB4ZjUsMHgxOSwweGY1LDB4MDgsMHgwNSwweDBlLDB4ODUsMHgxOCwweDA5LDB4ZDIsMHgzNywweDgwfX0sCisgezE2LDB4MzFhMCwwLHsweDFhLDB4ZTUsMHgxNSwweGM0LDB4NTQsMHgwZiwweGY1LDB4MTksMHhmNSwweDA4LDB4MDUsMHgwZSwweDg1LDB4MTgsMHgwOSwweDc1fX0sCisgezE2LDB4MzFiMCwwLHsweDE0LDB4MDEsMHhkMiwweDM3LDB4ODAsMHgwNSwweDEyLDB4NDgsMHhmMywweGMyLDB4MzUsMHgzMCwweDM1LDB4MGEsMHg4NSwweDE5fX0sCisgezE2LDB4MzFjMCwwLHsweDEzLDB4ODUsMHgxOCwweDEyLDB4ODAsMHgwMiwweDA1LDB4MTYsMHhlNSwweDE2LDB4ZDMsMHg5NCwweDA1LDB4NDAsMHg1NywweDEyfX0sCisgezE2LDB4MzFkMCwwLHsweDQ4LDB4ZjMsMHg4MCwweDUyLDB4MzAsMHgzOSwweDE3LDB4ZTUsMHgwZSwweDcwLDB4MGEsMHg4NSwweDA4LDB4MDksMHg3NSwweDA4fX0sCisgezE2LDB4MzFlMCwwLHsweDA0LDB4MDUsMHgwZSwweDgwLDB4NDEsMHg3NCwweDA4LDB4MjUsMHgwZSwweGY4LDB4YTYsMHgxOSwweDgwLDB4MzgsMHgyMCwweDM3fX0sCisgezE2LDB4MzFmMCwwLHsweDJhLDB4ZTUsMHgwZSwweGI0LDB4MDEsMHgwZiwweDg1LDB4MDgsMHgwYSwweDg1LDB4MDksMHgwYiwweDg1LDB4MTMsMHgwOCwweDg1fX0sCisgezE2LDB4MzIwMCwwLHsweDEyLDB4MDksMHg3NSwweDBlLDB4MDQsMHhlNSwweDE0LDB4YjQsMHgwMSwweDFjLDB4ODUsMHgwOCwweDBhLDB4ZTQsMHhmNSwweDBifX0sCisgezE2LDB4MzIxMCwwLHsweDg1LDB4MTMsMHgwOCwweDg1LDB4MTIsMHgwOSwweDc1LDB4MGUsMHgwNCwweDgwLDB4MGIsMHhlNSwweDE0LDB4YjQsMHgwMSwweDA2fX0sCisgezE2LDB4MzIyMCwwLHsweGU0LDB4ZjUsMHgwYiwweDc1LDB4MGUsMHgwNCwweGU0LDB4ZjUsMHgxYSwweDMwLDB4MzUsMHgwMiwweDA1LDB4MGUsMHhlNSwweDBlfX0sCisgezE2LDB4MzIzMCwwLHsweGQzLDB4OTQsMHgwMywweDUwLDB4MDIsMHgwMSwweDBiLDB4YzIsMHgzNywweGU0LDB4ZjUsMHgwZSwweGY1LDB4MTAsMHhjMiwweDM2fX0sCisgezE2LDB4MzI0MCwwLHsweGQyLDB4M2QsMHhmNSwweDE0LDB4NzQsMHgwOCwweDI1LDB4MTAsMHhmOCwweGU2LDB4ZmYsMHg3NCwweDgwLDB4MjUsMHgxMCwweGY1fX0sCisgezE2LDB4MzI1MCwwLHsweDgyLDB4ZTQsMHgzNCwweDdlLDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg3NCwweDA4LDB4MjUsMHgxMCwweGY4LDB4ZTQsMHhmNiwweDA1fX0sCisgezE1LDB4MzI2MCwwLHsweDEwLDB4ZTUsMHgxMCwweGI0LDB4MDQsMHhkZSwweDkwLDB4N2YsMHhiNywweDc0LDB4MDQsMHhmMCwweDAxLDB4MGIsMHgyMn19LAorIHsxNiwweDMyNmYsMCx7MHg5MCwweDc2LDB4MTgsMHhlMCwweGZmLDB4NjQsMHgwNSwweDcwLDB4NDIsMHg5MCwweDc1LDB4YWIsMHhlMCwweGI0LDB4MDEsMHgxOX19LAorIHsxNiwweDMyN2YsMCx7MHg5MCwweDcyLDB4MzcsMHg3NCwweDAxLDB4ZjAsMHhlNCwweDkwLDB4ODAsMHgyMCwweGYwLDB4OTAsMHg4MCwweDMxLDB4ZjAsMHg5MH19LAorIHsxNiwweDMyOGYsMCx7MHg4MCwweDI4LDB4ZjAsMHg5MCwweDgwLDB4MzksMHhmMCwweDgwLDB4MjIsMHhlNCwweDkwLDB4NzIsMHgzNywweGYwLDB4OTAsMHg3NX19LAorIHsxNiwweDMyOWYsMCx7MHhhZCwweGUwLDB4OTAsMHg3MiwweDJiLDB4ZjAsMHhlMCwweDI0LDB4ODAsMHhmMCwweGUwLDB4OTAsMHg4MCwweDIwLDB4ZjAsMHg5MH19LAorIHsxNiwweDMyYWYsMCx7MHg4MCwweDMxLDB4ZjAsMHg5MCwweDgwLDB4MjgsMHhmMCwweDkwLDB4ODAsMHgzOSwweGYwLDB4ZWYsMHg2NCwweDA2LDB4NjAsMHgwMn19LAorIHsxNiwweDMyYmYsMCx7MHg4MSwweDk5LDB4OTAsMHg3MiwweDM5LDB4NzQsMHgwNCwweGYwLDB4OTAsMHg3MiwweDM5LDB4ZTAsMHhmZiwweDI0LDB4ZmUsMHg5MH19LAorIHsxNiwweDMyY2YsMCx7MHg3MiwweDA0LDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNX19LAorIHsxNiwweDMyZGYsMCx7MHg4MywweGUwLDB4NjQsMHgwMSwweDcwLDB4NTQsMHg5MCwweDcyLDB4MzYsMHgwNCwweGYwLDB4OTAsMHg3MiwweDA0LDB4ZTAsMHhmZn19LAorIHsxNiwweDMyZWYsMCx7MHgyNCwweGZkLDB4NjAsMHgyOCwweDI0LDB4ZmUsMHg2MCwweDI0LDB4MjQsMHgwMywweDI0LDB4ZmIsMHg1MCwweDA0LDB4NjAsMHgxY319LAorIHsxNiwweDMyZmYsMCx7MHg4MSwweDhjLDB4NzQsMHgyMCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlNCwweGYwLDB4NzQsMHgyOH19LAorIHsxNiwweDMzMGYsMCx7MHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDgxLDB4OGMsMHg5MCwweDcyLDB4MDQsMHhlMH19LAorIHsxNiwweDMzMWYsMCx7MHhmZiwweDI0LDB4MzAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg3NCwweDM4LDB4MmYsMHhmNX19LAorIHsxNiwweDMzMmYsMCx7MHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlNCwweGYwLDB4ODEsMHg4YywweGU0LDB4OTAsMHg3MiwweDM2LDB4ZjAsMHg5MH19LAorIHsxNiwweDMzM2YsMCx7MHg3MiwweDM5LDB4ZTAsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4M319LAorIHsxNiwweDMzNGYsMCx7MHhlMCwweGZmLDB4N2UsMHgwMCwweDkwLDB4NzUsMHgwYywweGVlLDB4ZjAsMHhhMywweGVmLDB4ZjAsMHg3MCwweDA2LDB4OTAsMHg3Mn19LAorIHsxNiwweDMzNWYsMCx7MHgwMiwweDc0LDB4M2IsMHhmMCwweDkwLDB4NzUsMHgwYywweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmYsMHg2NCwweDgwLDB4NGUsMHg3MH19LAorIHsxNiwweDMzNmYsMCx7MHgwNCwweDkwLDB4NzIsMHgwMiwweGYwLDB4ZWYsMHg0ZSwweDcwLDB4MDIsMHg4MSwweDM1LDB4ZWYsMHg2NCwweDgwLDB4NGUsMHg3MH19LAorIHsxNiwweDMzN2YsMCx7MHgwMiwweDgxLDB4MzUsMHhlZiwweGY4LDB4ZTQsMHg5MCwweDc1LDB4MGQsMHhmMCwweGU4LDB4OTAsMHg3NSwweDBjLDB4ZjAsMHg5MH19LAorIHsxNiwweDMzOGYsMCx7MHg3MiwweDM0LDB4ZTAsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4M319LAorIHsxNiwweDMzOWYsMCx7MHhlMCwweGZmLDB4OTAsMHg3MiwweDAyLDB4ZjAsMHg5MCwweDc1LDB4MGQsMHhlMCwweDJmLDB4ZjAsMHg5MCwweDc1LDB4MGMsMHhlMH19LAorIHsxNiwweDMzYWYsMCx7MHgzNCwweDAwLDB4ZjAsMHhlMCwweGZlLDB4YTMsMHhlMCwweGZmLDB4ZTQsMHhmYywweGZkLDB4N2IsMHhkNiwweDdhLDB4YTUsMHhmOX19LAorIHsxNiwweDMzYmYsMCx7MHhmOCwweGQzLDB4MTIsMHgzNywweDk1LDB4NDAsMHgwYSwweDkwLDB4NzUsMHgwYywweDc0LDB4YTUsMHhmMCwweGEzLDB4NzQsMHhkNn19LAorIHsxNiwweDMzY2YsMCx7MHhmMCwweDkwLDB4NzUsMHgwZCwweGUwLDB4MjQsMHgyYSwweGYwLDB4OTAsMHg3NSwweDBjLDB4ZTAsMHgzNCwweDVhLDB4ZjAsMHhlMH19LAorIHsxNiwweDMzZGYsMCx7MHhmZSwweGEzLDB4ZTAsMHg3OCwweDA1LDB4Y2UsMHhhMiwweGU3LDB4MTMsMHhjZSwweDEzLDB4ZDgsMHhmOCwweGZmLDB4OTAsMHg3NX19LAorIHsxNiwweDMzZWYsMCx7MHgwYywweGVlLDB4ZjAsMHhhMywweGVmLDB4ZjAsMHg5MCwweDcyLDB4MmMsMHhlZSwweGYwLDB4YTMsMHhlZiwweGYwLDB4ZDMsMHg5NH19LAorIHsxNiwweDMzZmYsMCx7MHhkMiwweGVlLDB4NjQsMHg4MCwweDk0LDB4ODIsMHg0MCwweDBhLDB4OTAsMHg3MiwweDJjLDB4NzQsMHgwMiwweGYwLDB4YTMsMHg3NH19LAorIHsxNiwweDM0MGYsMCx7MHhkMiwweGYwLDB4YzMsMHg5MCwweDcyLDB4MmMsMHhlMCwweDY0LDB4ODAsMHg5NCwweDgwLDB4NTAsMHgwNCwweGU0LDB4ZjAsMHhhM319LAorIHsxNiwweDM0MWYsMCx7MHhmMCwweDkwLDB4NzIsMHgyYywweGUwLDB4ZmUsMHhhMywweGUwLDB4MjQsMHgzYSwweGY1LDB4ODIsMHhlZSwweDM0LDB4NzIsMHhmNX19LAorIHsxNiwweDM0MmYsMCx7MHg4MywweGUwLDB4OTAsMHg3MiwweDAyLDB4ZjAsMHg5MCwweDcyLDB4MDQsMHhlMCwweGZmLDB4MjQsMHhmZCwweDYwLDB4MmQsMHgyNH19LAorIHsxNiwweDM0M2YsMCx7MHhmZSwweDYwLDB4MjksMHgyNCwweDAzLDB4MjQsMHhmYiwweDUwLDB4MDQsMHg2MCwweDIxLDB4ODAsMHg0MCwweDkwLDB4NzIsMHgwMn19LAorIHsxNiwweDM0NGYsMCx7MHhlMCwweGZlLDB4NzQsMHgyMCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlZSwweGYwLDB4NzQsMHgyOH19LAorIHsxNiwweDM0NWYsMCx7MHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZWUsMHhmMCwweDgwLDB4MjEsMHg5MCwweDcyLDB4MDIsMHhlMH19LAorIHsxNiwweDM0NmYsMCx7MHhmZiwweDkwLDB4NzIsMHgwNCwweGUwLDB4ZmUsMHgyNCwweDMwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlZn19LAorIHsxNiwweDM0N2YsMCx7MHhmMCwweDc0LDB4MzgsMHgyZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzIsMHgzOX19LAorIHsxMSwweDM0OGYsMCx7MHhlMCwweDA0LDB4ZjAsMHhlMCwweDY0LDB4MGEsMHg2MCwweDAyLDB4NDEsMHhjNywweDIyfX0sCisgezE2LDB4MzQ5YSwwLHsweDkwLDB4NzYsMHgxOCwweGUwLDB4ZmYsMHhiNCwweDA1LDB4MjMsMHg5MCwweDcyLDB4MzcsMHhlMCwweDcwLDB4MWQsMHg5MCwweDc1fX0sCisgezE2LDB4MzRhYSwwLHsweGFkLDB4ZTAsMHg5MCwweDcyLDB4MmIsMHhmMCwweGUwLDB4MjQsMHg4MCwweGYwLDB4ZTAsMHg5MCwweDgwLDB4MjAsMHhmMCwweDkwfX0sCisgezE2LDB4MzRiYSwwLHsweDgwLDB4MzEsMHhmMCwweDkwLDB4ODAsMHgyOCwweGYwLDB4OTAsMHg4MCwweDM5LDB4ZjAsMHhlZiwweDY0LDB4MDYsMHg2MCwweDAyfX0sCisgezE2LDB4MzRjYSwwLHsweGMxLDB4OTEsMHg5MCwweDcyLDB4MzYsMHhlMCwweDYwLDB4MDIsMHhjMSwweDkxLDB4OTAsMHg3NiwweDQwLDB4ZTAsMHg3MCwweDMxfX0sCisgezE2LDB4MzRkYSwwLHsweDkwLDB4NzIsMHgwMywweDc0LDB4MDMsMHhmMCwweDkwLDB4NzIsMHgwMywweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0fX0sCisgezE2LDB4MzRlYSwwLHsweGFhLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3MiwweDI5LDB4ZTAsMHhmZCwweGVlfX0sCisgezE2LDB4MzRmYSwwLHsweDZkLDB4NjAsMHgwZSwweGVmLDB4YzMsMHg5NCwweDBhLDB4NTAsMHgwOCwweDkwLDB4NzIsMHgwMywweGUwLDB4MDQsMHhmMCwweDgwfX0sCisgezE2LDB4MzUwYSwwLHsweGQ1LDB4OTAsMHg3MiwweDM5LDB4NzQsMHgwNCwweGYwLDB4OTAsMHg3NiwweDQwLDB4ZTAsMHg3MCwweDA4LDB4OTAsMHg3MiwweDAzfX0sCisgezE2LDB4MzUxYSwwLHsweGUwLDB4OTAsMHg3MiwweDM5LDB4ZjAsMHg5MCwweDcyLDB4MzksMHhlMCwweGZkLDB4MjQsMHhmZSwweDkwLDB4NzIsMHgyYSwweGYwfX0sCisgezE2LDB4MzUyYSwwLHsweGVkLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZmfX0sCisgezE2LDB4MzUzYSwwLHsweDdlLDB4MDAsMHg5MCwweDc1LDB4MGMsMHhlZSwweGYwLDB4YTMsMHhlZiwweGYwLDB4NzAsMHgwNiwweDkwLDB4NzIsMHgwMiwweDc0fX0sCisgezE2LDB4MzU0YSwwLHsweDgwLDB4ZjAsMHg5MCwweDc1LDB4MGMsMHhlMCwweGZlLDB4YTMsMHhlMCwweGZmLDB4NjQsMHg4MCwweDRlLDB4NzAsMHgwNCwweDkwfX0sCisgezE2LDB4MzU1YSwwLHsweDcyLDB4MDIsMHhmMCwweGVmLDB4NGUsMHg3MCwweDAyLDB4YzEsMHgxYiwweGVmLDB4NjQsMHg4MCwweDRlLDB4NzAsMHgwMiwweGMxfX0sCisgezE2LDB4MzU2YSwwLHsweDFiLDB4ZWYsMHhmOCwweGU0LDB4OTAsMHg3NSwweDBkLDB4ZjAsMHhlOCwweDkwLDB4NzUsMHgwYywweGYwLDB4ZWQsMHg3NSwweGYwfX0sCisgezE2LDB4MzU3YSwwLHsweDBhLDB4YTQsMHgyNCwweGFjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZmLDB4OTAsMHg3MiwweDAyfX0sCisgezE2LDB4MzU4YSwwLHsweGYwLDB4OTAsMHg3NSwweDBkLDB4ZTAsMHgyZiwweGYwLDB4OTAsMHg3NSwweDBjLDB4ZTAsMHgzNCwweDAwLDB4ZjAsMHhlMCwweGZlfX0sCisgezE2LDB4MzU5YSwwLHsweGEzLDB4ZTAsMHhmZiwweGU0LDB4ZmMsMHhmZCwweDdiLDB4ZDYsMHg3YSwweGE1LDB4ZjksMHhmOCwweGQzLDB4MTIsMHgzNywweDk1fX0sCisgezE2LDB4MzVhYSwwLHsweDQwLDB4MGEsMHg5MCwweDc1LDB4MGMsMHg3NCwweGE1LDB4ZjAsMHhhMywweDc0LDB4ZDYsMHhmMCwweDkwLDB4NzUsMHgwZCwweGUwfX0sCisgezE2LDB4MzViYSwwLHsweDI0LDB4MmEsMHhmMCwweDkwLDB4NzUsMHgwYywweGUwLDB4MzQsMHg1YSwweGYwLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHg3OCwweDA1fX0sCisgezE2LDB4MzVjYSwwLHsweGNlLDB4YTIsMHhlNywweDEzLDB4Y2UsMHgxMywweGQ4LDB4ZjgsMHhmZiwweDkwLDB4NzUsMHgwYywweGVlLDB4ZjAsMHhhMywweGVmfX0sCisgezE2LDB4MzVkYSwwLHsweGYwLDB4OTAsMHg3MiwweDJjLDB4ZWUsMHhmMCwweGEzLDB4ZWYsMHhmMCwweGQzLDB4OTQsMHhkMiwweGVlLDB4NjQsMHg4MCwweDk0fX0sCisgezE2LDB4MzVlYSwwLHsweDgyLDB4NDAsMHgwYSwweDkwLDB4NzIsMHgyYywweDc0LDB4MDIsMHhmMCwweGEzLDB4NzQsMHhkMiwweGYwLDB4YzMsMHg5MCwweDcyfX0sCisgezE2LDB4MzVmYSwwLHsweDJjLDB4ZTAsMHg2NCwweDgwLDB4OTQsMHg4MCwweDUwLDB4MDQsMHhlNCwweGYwLDB4YTMsMHhmMCwweDkwLDB4NzIsMHgyYywweGUwfX0sCisgezE2LDB4MzYwYSwwLHsweGZlLDB4YTMsMHhlMCwweDI0LDB4M2EsMHhmNSwweDgyLDB4ZWUsMHgzNCwweDcyLDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3MiwweDAyfX0sCisgezE2LDB4MzYxYSwwLHsweGYwLDB4OTAsMHg3MiwweDJhLDB4ZTAsMHhmZiwweDI0LDB4ZmQsMHg2MCwweDJkLDB4MjQsMHhmZSwweDYwLDB4MjksMHgyNCwweDAzfX0sCisgezE2LDB4MzYyYSwwLHsweDI0LDB4ZmIsMHg1MCwweDA0LDB4NjAsMHgyMSwweDgwLDB4NDAsMHg5MCwweDcyLDB4MDIsMHhlMCwweGZlLDB4NzQsMHgyMCwweDJmfX0sCisgezE2LDB4MzYzYSwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZWUsMHhmMCwweDc0LDB4MjgsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0fX0sCisgezE2LDB4MzY0YSwwLHsweDgwLDB4ZjUsMHg4MywweGVlLDB4ZjAsMHg4MCwweDIxLDB4OTAsMHg3MiwweDAyLDB4ZTAsMHhmZiwweDkwLDB4NzIsMHgyYSwweGUwfX0sCisgezE2LDB4MzY1YSwwLHsweGZlLDB4MjQsMHgzMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDc0LDB4MzgsMHgyZSwweGY1fX0sCisgezE2LDB4MzY2YSwwLHsweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDc2LDB4NDAsMHhlMCwweDcwLDB4MDYsMHg5MCwweDcyfX0sCisgezE2LDB4MzY3YSwwLHsweDM5LDB4NzQsMHgwYSwweGYwLDB4OTAsMHg3MiwweDM5LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhjMywweDk0LDB4MGEsMHg1MCwweDAyfX0sCisgeyA4LDB4MzY4YSwwLHsweGExLDB4MTEsMHhlNCwweDkwLDB4NzYsMHg0MCwweGYwLDB4MjJ9fSwKKyB7MTYsMHgzNjkyLDAsezB4YmIsMHgwMSwweDA2LDB4ODksMHg4MiwweDhhLDB4ODMsMHhlMCwweDIyLDB4NTAsMHgwMiwweGU3LDB4MjIsMHhiYiwweGZlLDB4MDJ9fSwKKyB7IDksMHgzNmEyLDAsezB4ZTMsMHgyMiwweDg5LDB4ODIsMHg4YSwweDgzLDB4ZTQsMHg5MywweDIyfX0sCisgezE2LDB4MzZhYiwwLHsweGJiLDB4MDEsMHgwYywweGU1LDB4ODIsMHgyOSwweGY1LDB4ODIsMHhlNSwweDgzLDB4M2EsMHhmNSwweDgzLDB4ZTAsMHgyMiwweDUwfX0sCisgezE2LDB4MzZiYiwwLHsweDA2LDB4ZTksMHgyNSwweDgyLDB4ZjgsMHhlNiwweDIyLDB4YmIsMHhmZSwweDA2LDB4ZTksMHgyNSwweDgyLDB4ZjgsMHhlMiwweDIyfX0sCisgezEzLDB4MzZjYiwwLHsweGU1LDB4ODIsMHgyOSwweGY1LDB4ODIsMHhlNSwweDgzLDB4M2EsMHhmNSwweDgzLDB4ZTQsMHg5MywweDIyfX0sCisgezE2LDB4MzZkOCwwLHsweGMyLDB4ZDUsMHhlYywweDMwLDB4ZTcsMHgwOSwweGIyLDB4ZDUsMHhlNCwweGMzLDB4OWQsMHhmZCwweGU0LDB4OWMsMHhmYywweGVlfX0sCisgezE2LDB4MzZlOCwwLHsweDMwLDB4ZTcsMHgxNSwweGIyLDB4ZDUsMHhlNCwweGMzLDB4OWYsMHhmZiwweGU0LDB4OWUsMHhmZSwweDEyLDB4MzgsMHgxZiwweGMzfX0sCisgezE2LDB4MzZmOCwwLHsweGU0LDB4OWQsMHhmZCwweGU0LDB4OWMsMHhmYywweDgwLDB4MDMsMHgxMiwweDM4LDB4MWYsMHgzMCwweGQ1LDB4MDcsMHhjMywweGU0fX0sCisgeyA2LDB4MzcwOCwwLHsweDlmLDB4ZmYsMHhlNCwweDllLDB4ZmUsMHgyMn19LAorIHsxNiwweDM3MGUsMCx7MHhiYiwweDAxLDB4MTAsMHhlNSwweDgyLDB4MjksMHhmNSwweDgyLDB4ZTUsMHg4MywweDNhLDB4ZjUsMHg4MywweGUwLDB4ZjUsMHhmMH19LAorIHsxNiwweDM3MWUsMCx7MHhhMywweGUwLDB4MjIsMHg1MCwweDA5LDB4ZTksMHgyNSwweDgyLDB4ZjgsMHg4NiwweGYwLDB4MDgsMHhlNiwweDIyLDB4YmIsMHhmZX19LAorIHsxNiwweDM3MmUsMCx7MHgwYSwweGU5LDB4MjUsMHg4MiwweGY4LDB4ZTIsMHhmNSwweGYwLDB4MDgsMHhlMiwweDIyLDB4ZTUsMHg4MywweDJhLDB4ZjUsMHg4M319LAorIHsgOCwweDM3M2UsMCx7MHhlOSwweDkzLDB4ZjUsMHhmMCwweGEzLDB4ZTksMHg5MywweDIyfX0sCisgezE2LDB4Mzc0NiwwLHsweGU4LDB4OGYsMHhmMCwweGE0LDB4Y2MsMHg4YiwweGYwLDB4YTQsMHgyYywweGZjLDB4ZTksMHg4ZSwweGYwLDB4YTQsMHgyYywweGZjfX0sCisgezE2LDB4Mzc1NiwwLHsweDhhLDB4ZjAsMHhlZCwweGE0LDB4MmMsMHhmYywweGVhLDB4OGUsMHhmMCwweGE0LDB4Y2QsMHhhOCwweGYwLDB4OGIsMHhmMCwweGE0fX0sCisgezE2LDB4Mzc2NiwwLHsweDJkLDB4Y2MsMHgzOCwweDI1LDB4ZjAsMHhmZCwweGU5LDB4OGYsMHhmMCwweGE0LDB4MmMsMHhjZCwweDM1LDB4ZjAsMHhmYywweGVifX0sCisgezE2LDB4Mzc3NiwwLHsweDhlLDB4ZjAsMHhhNCwweGZlLDB4YTksMHhmMCwweGViLDB4OGYsMHhmMCwweGE0LDB4Y2YsMHhjNSwweGYwLDB4MmUsMHhjZCwweDM5fX0sCisgezE1LDB4Mzc4NiwwLHsweGZlLDB4ZTQsMHgzYywweGZjLDB4ZWEsMHhhNCwweDJkLDB4Y2UsMHgzNSwweGYwLDB4ZmQsMHhlNCwweDNjLDB4ZmMsMHgyMn19LAorIHsxNiwweDM3OTUsMCx7MHhlYiwweDlmLDB4ZjUsMHhmMCwweGVhLDB4OWUsMHg0MiwweGYwLDB4ZTksMHg5ZCwweDQyLDB4ZjAsMHhlYywweDY0LDB4ODAsMHhjOH19LAorIHsgNiwweDM3YTUsMCx7MHg2NCwweDgwLDB4OTgsMHg0NSwweGYwLDB4MjJ9fSwKKyB7MTYsMHgzN2FiLDAsezB4ZWIsMHg5ZiwweGY1LDB4ZjAsMHhlYSwweDllLDB4NDIsMHhmMCwweGU5LDB4OWQsMHg0MiwweGYwLDB4ZTgsMHg5YywweDQ1LDB4ZjB9fSwKKyB7IDEsMHgzN2JiLDAsezB4MjJ9fSwKKyB7MTIsMHgzN2JjLDAsezB4ZWMsMHhmMCwweGEzLDB4ZWQsMHhmMCwweGEzLDB4ZWUsMHhmMCwweGEzLDB4ZWYsMHhmMCwweDIyfX0sCisgezE2LDB4MzdjOCwwLHsweGE4LDB4ODIsMHg4NSwweDgzLDB4ZjAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweDEyLDB4MzcsMHhkZiwweDEyLDB4MzcsMHhkZiwweDEyfX0sCisgezE2LDB4MzdkOCwwLHsweDM3LDB4ZGYsMHgxMiwweDM3LDB4ZGYsMHhlNCwweDczLDB4ZTQsMHg5MywweGEzLDB4YzUsMHg4MywweGM1LDB4ZjAsMHhjNSwweDgzfX0sCisgezE2LDB4MzdlOCwwLHsweGM4LDB4YzUsMHg4MiwweGM4LDB4ZjAsMHhhMywweGM1LDB4ODMsMHhjNSwweGYwLDB4YzUsMHg4MywweGM4LDB4YzUsMHg4MiwweGM4fX0sCisgeyAxLDB4MzdmOCwwLHsweDIyfX0sCisgezE2LDB4MzdmOSwwLHsweGQwLDB4ODMsMHhkMCwweDgyLDB4ZjgsMHhlNCwweDkzLDB4NzAsMHgxMiwweDc0LDB4MDEsMHg5MywweDcwLDB4MGQsMHhhMywweGEzfX0sCisgezE2LDB4MzgwOSwwLHsweDkzLDB4ZjgsMHg3NCwweDAxLDB4OTMsMHhmNSwweDgyLDB4ODgsMHg4MywweGU0LDB4NzMsMHg3NCwweDAyLDB4OTMsMHg2OCwweDYwfX0sCisgeyA2LDB4MzgxOSwwLHsweGVmLDB4YTMsMHhhMywweGEzLDB4ODAsMHhkZn19LAorIHsxNiwweDM4MWYsMCx7MHhiYywweDAwLDB4MGIsMHhiZSwweDAwLDB4MjksMHhlZiwweDhkLDB4ZjAsMHg4NCwweGZmLDB4YWQsMHhmMCwweDIyLDB4ZTQsMHhjY319LAorIHsxNiwweDM4MmYsMCx7MHhmOCwweDc1LDB4ZjAsMHgwOCwweGVmLDB4MmYsMHhmZiwweGVlLDB4MzMsMHhmZSwweGVjLDB4MzMsMHhmYywweGVlLDB4OWQsMHhlY319LAorIHsxNiwweDM4M2YsMCx7MHg5OCwweDQwLDB4MDUsMHhmYywweGVlLDB4OWQsMHhmZSwweDBmLDB4ZDUsMHhmMCwweGU5LDB4ZTQsMHhjZSwweGZkLDB4MjIsMHhlZH19LAorIHsxNiwweDM4NGYsMCx7MHhmOCwweGY1LDB4ZjAsMHhlZSwweDg0LDB4MjAsMHhkMiwweDFjLDB4ZmUsMHhhZCwweGYwLDB4NzUsMHhmMCwweDA4LDB4ZWYsMHgyZn19LAorIHsxNiwweDM4NWYsMCx7MHhmZiwweGVkLDB4MzMsMHhmZCwweDQwLDB4MDcsMHg5OCwweDUwLDB4MDYsMHhkNSwweGYwLDB4ZjIsMHgyMiwweGMzLDB4OTgsMHhmZH19LAorIHsgNSwweDM4NmYsMCx7MHgwZiwweGQ1LDB4ZjAsMHhlYSwweDIyfX0sCisgezE2LDB4Mzg3NCwwLHsweGU0LDB4OTAsMHg3NiwweDI5LDB4ZjAsMHg5MCwweDc2LDB4MjksMHhlMCwweGZmLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQyfX0sCisgezE2LDB4Mzg4NCwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4N2YsMHhlYywweGUwLDB4ZmQsMHhlZSwweDZkfX0sCisgezE2LDB4Mzg5NCwwLHsweDYwLDB4MGUsMHhlZiwweGMzLDB4OTQsMHgwNiwweDUwLDB4MDgsMHg5MCwweDc2LDB4MjksMHhlMCwweDA0LDB4ZjAsMHg4MCwweGQ1fX0sCisgezE2LDB4MzhhNCwwLHsweGVmLDB4YjQsMHgwNiwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweGVmLDB4NzUsMHhmMCwweDBmfX0sCisgezE2LDB4MzhiNCwwLHsweGE0LDB4MjQsMHg0MSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDc2LDB4MmEsMHhmMCwweDI0fX0sCisgezE2LDB4MzhjNCwwLHsweGJmLDB4NzAsMHgwMiwweDQxLDB4NDEsMHgyNCwweGUwLDB4NzAsMHgwMiwweDQxLDB4MTIsMHgyNCwweDIxLDB4NjAsMHgwMiwweDQxfX0sCisgezE2LDB4MzhkNCwwLHsweDNhLDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweGZlLDB4NjAsMHg3ZCwweDE0LDB4NzAsMHgwMiwweDIxLDB4YjIsMHgyNCwweDAyfX0sCisgezE2LDB4MzhlNCwwLHsweDYwLDB4MDIsMHg0MSwweDBhLDB4MTIsMHgxNywweDUxLDB4OTAsMHg3NiwweDQyLDB4ZTAsMHhmYywweGEzLDB4ZTAsMHhmZCwweGEzfX0sCisgezE2LDB4MzhmNCwwLHsweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmYsMHg5MCwweDc2LDB4MjksMHhlMCwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MywweGY1fX0sCisgezE2LDB4MzkwNCwwLHsweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDEyLDB4MzcsMHhiYywweDkwLDB4NzYsMHgxOSwweGUwLDB4ZmYsMHhiNCwweDAxfX0sCisgezE2LDB4MzkxNCwwLHsweDEyLDB4OTAsMHg3NiwweDdjLDB4NzQsMHg2NywweGYwLDB4OTAsMHg3NiwweDdkLDB4NzQsMHgwNiwweGYwLDB4OTAsMHg3NiwweDdlfX0sCisgezE2LDB4MzkyNCwwLHsweDc0LDB4MGIsMHhmMCwweGVmLDB4YjQsMHgwMiwweDBmLDB4ZTQsMHg5MCwweDc2LDB4N2MsMHhmMCwweDkwLDB4NzYsMHg3ZCwweGYwfX0sCisgezE2LDB4MzkzNCwwLHsweDkwLDB4NzYsMHg3ZSwweDc0LDB4MGMsMHhmMCwweGVmLDB4YjQsMHgwMywweDBmLDB4ZTQsMHg5MCwweDc2LDB4N2MsMHhmMCwweDkwfX0sCisgezE2LDB4Mzk0NCwwLHsweDc2LDB4N2QsMHhmMCwweDkwLDB4NzYsMHg3ZSwweDc0LDB4MTgsMHhmMCwweDkwLDB4NzYsMHgxYSwweDc0LDB4MDEsMHhmMCwweDEyfX0sCisgezE2LDB4Mzk1NCwwLHsweDNlLDB4OGYsMHgxMiwweDE4LDB4MDAsMHgyMiwweDkwLDB4N2UsMHhjMiwweGUwLDB4ZmYsMHhlNCwweGZjLDB4ZmQsMHhmZSwweGZifX0sCisgezE2LDB4Mzk2NCwwLHsweGZhLDB4NzksMHgwMSwweGY4LDB4MTIsMHgzNywweDQ2LDB4YzgsMHhlYywweGM4LDB4YzksMHhlZCwweGM5LDB4Y2EsMHhlZSwweGNhfX0sCisgezE2LDB4Mzk3NCwwLHsweGNiLDB4ZWYsMHhjYiwweDkwLDB4N2UsMHhjMSwweGUwLDB4ZmUsMHhlNCwweGZjLDB4ZmQsMHgyYiwweGZiLDB4ZWEsMHgzZSwweGZhfX0sCisgezE2LDB4Mzk4NCwwLHsweGVkLDB4MzksMHhmOSwweGVjLDB4MzgsMHhmOCwweDkwLDB4N2UsMHhjMCwweGUwLDB4ZmYsMHhlNCwweGZlLDB4ZWIsMHgyZiwweGZmfX0sCisgezE2LDB4Mzk5NCwwLHsweGVlLDB4M2EsMHhmZSwweGVkLDB4MzksMHhmZCwweGVjLDB4MzgsMHhmYywweDkwLDB4NzYsMHgyOSwweGUwLDB4NzUsMHhmMCwweDBmfX0sCisgezE2LDB4MzlhNCwwLHsweGE0LDB4MjQsMHg0NywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4MTIsMHgzNywweGJjLDB4MjIsMHg5MCwweDdlfX0sCisgezE2LDB4MzliNCwwLHsweGMyLDB4ZTAsMHhmZiwweGU0LDB4ZmMsMHhmZCwweGZlLDB4ZmIsMHhmYSwweDc5LDB4MDEsMHhmOCwweDEyLDB4MzcsMHg0NiwweGM4fX0sCisgezE2LDB4MzljNCwwLHsweGVjLDB4YzgsMHhjOSwweGVkLDB4YzksMHhjYSwweGVlLDB4Y2EsMHhjYiwweGVmLDB4Y2IsMHg5MCwweDdlLDB4YzEsMHhlMCwweGZlfX0sCisgezE2LDB4MzlkNCwwLHsweGU0LDB4ZmMsMHhmZCwweDJiLDB4ZmIsMHhlYSwweDNlLDB4ZmEsMHhlZCwweDM5LDB4ZjksMHhlYywweDM4LDB4ZjgsMHg5MCwweDdlfX0sCisgezE2LDB4MzllNCwwLHsweGMwLDB4ZTAsMHhmZiwweGU0LDB4ZmUsMHhlYiwweDJmLDB4ZmYsMHhlZSwweDNhLDB4ZmUsMHhlZCwweDM5LDB4ZmQsMHhlYywweDM4fX0sCisgezE2LDB4MzlmNCwwLHsweGZjLDB4OTAsMHg3NiwweDI5LDB4ZTAsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NGIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1fX0sCisgezE2LDB4M2EwNCwwLHsweGY1LDB4ODMsMHgxMiwweDM3LDB4YmMsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmfX0sCisgezE2LDB4M2ExNCwwLHsweGU5LDB4ZTAsMHgxNCwweDcwLDB4MTksMHg5MCwweDdlLDB4YzAsMHhlMCwweGZmLDB4OTAsMHg3NiwweDI5LDB4ZTAsMHg3NSwweGYwfX0sCisgezE2LDB4M2EyNCwwLHsweDBmLDB4YTQsMHgyNCwweDRmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4MjIsMHg5MCwweDdmfX0sCisgezE0LDB4M2EzNCwwLHsweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjJ9fSwKKyB7MTYsMHgzYTQyLDAsezB4ZTQsMHg5MCwweDc2LDB4MzUsMHhmMCwweDkwLDB4NzYsMHgzNSwweGUwLDB4ZmYsMHhjMywweDk0LDB4MDMsMHg0MCwweDAyLDB4NDF9fSwKKyB7MTYsMHgzYTUyLDAsezB4ZmYsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWZ9fSwKKyB7MTYsMHgzYTYyLDAsezB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTR9fSwKKyB7MTYsMHgzYTcyLDAsezB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzR9fSwKKyB7MTYsMHgzYTgyLDAsezB4ZjAsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODN9fSwKKyB7MTYsMHgzYTkyLDAsezB4NzQsMHhmZiwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjV9fSwKKyB7MTYsMHgzYWEyLDAsezB4ODMsMHhlNCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjV9fSwKKyB7MTYsMHgzYWIyLDAsezB4ODMsMHg3NCwweDgwLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzV9fSwKKyB7MTYsMHgzYWMyLDAsezB4ZjUsMHg4MywweGU0LDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzV9fSwKKyB7MTYsMHgzYWQyLDAsezB4ZjUsMHg4MywweGU0LDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzV9fSwKKyB7MTYsMHgzYWUyLDAsezB4ZjUsMHg4MywweGU0LDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzV9fSwKKyB7MTYsMHgzYWYyLDAsezB4ZjUsMHg4MywweDc0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHgzNSwweGUwLDB4MDQsMHhmMCwweDQxLDB4NDcsMHg5MCwweDc2LDB4M2N9fSwKKyB7MTYsMHgzYjAyLDAsezB4NzQsMHgwYSwweGYwLDB4ZTQsMHhhMywweGYwLDB4OTAsMHg3NiwweDM1LDB4NzQsMHgwMywweGYwLDB4OTAsMHg3NiwweDNjLDB4ZTB9fSwKKyB7MTYsMHgzYjEyLDAsezB4ZmYsMHg5MCwweDc2LDB4MzUsMHhlMCwweGZlLDB4YzMsMHg5ZiwweDQwLDB4MDIsMHg2MSwweGQyLDB4OTAsMHg3NiwweDNkLDB4ZTB9fSwKKyB7MTYsMHgzYjIyLDAsezB4ZmYsMHgwNCwweGYwLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjV9fSwKKyB7MTYsMHgzYjMyLDAsezB4ODMsMHhlZiwweGYwLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjV9fSwKKyB7MTYsMHgzYjQyLDAsezB4ODMsMHhlNCwweGYwLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjV9fSwKKyB7MTYsMHgzYjUyLDAsezB4ODMsMHg3NCwweDVlLDB4ZjAsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzV9fSwKKyB7MTYsMHgzYjYyLDAsezB4ZjUsMHg4MywweDc0LDB4YmEsMHhmMCwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFlLDB4ZjUsMHg4MiwweGU0LDB4MzR9fSwKKyB7MTYsMHgzYjcyLDAsezB4NzUsMHhmNSwweDgzLDB4NzQsMHgwNSwweGYwLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWYsMHhmNSwweDgyLDB4ZTR9fSwKKyB7MTYsMHgzYjgyLDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDgwLDB4ZjAsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMCwweGY1LDB4ODJ9fSwKKyB7MTYsMHgzYjkyLDAsezB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGU0LDB4ZjAsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMSwweGY1LDB4ODJ9fSwKKyB7MTYsMHgzYmEyLDAsezB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGU0LDB4ZjAsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMiwweGY1LDB4ODJ9fSwKKyB7MTYsMHgzYmIyLDAsezB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MTUsMHhmMCwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIzLDB4ZjV9fSwKKyB7MTYsMHgzYmMyLDAsezB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDkwLDB4NzYsMHgzNSwweGUwLDB4MDQsMHhmMCwweDYxLDB4MGV9fSwKKyB7IDEsMHgzYmQyLDAsezB4MjJ9fSwKKyB7MTYsMHgzYmQzLDAsezB4ZTQsMHg5MCwweDc2LDB4MzYsMHhmMCwweGUwLDB4ZmIsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDEsMHhmNSwweDgyLDB4ZTR9fSwKKyB7MTYsMHgzYmUzLDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDQwLDB4ZjAsMHhlYiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MiwweGY1LDB4ODJ9fSwKKyB7MTYsMHgzYmYzLDAsezB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MGEsMHhmMCwweGViLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQzLDB4ZjV9fSwKKyB7MTYsMHgzYzAzLDAsezB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4MTIsMHgzNywweGM4LDB4MDAsMHgwMCwweGFjLDB4NDQsMHhlYiwweDc1LDB4ZjB9fSwKKyB7MTYsMHgzYzEzLDAsezB4MGYsMHhhNCwweDI0LDB4NDcsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDEyLDB4MzcsMHhjOCwweDAwLDB4MDB9fSwKKyB7MTYsMHgzYzIzLDAsezB4YWMsMHg0NCwweGViLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDRiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODN9fSwKKyB7MTYsMHgzYzMzLDAsezB4MTIsMHgzNywweGM4LDB4MDAsMHgwMSwweDc3LDB4MDAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZiLDB4NzV9fSwKKyB7MTYsMHgzYzQzLDAsezB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHg0MCwweGYwLDB4ZWJ9fSwKKyB7MTYsMHgzYzUzLDAsezB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDhjLDB4ZjB9fSwKKyB7MTYsMHgzYzYzLDAsezB4ZWIsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDEyLDB4Mzd9fSwKKyB7MTYsMHgzYzczLDAsezB4YzgsMHgwMCwweDAwLDB4YWMsMHg0NCwweGViLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQ3LDB4ZjUsMHg4MiwweGU0LDB4MzR9fSwKKyB7MTYsMHgzYzgzLDAsezB4NzUsMHhmNSwweDgzLDB4MTIsMHgzNywweGM4LDB4MDAsMHgwMCwweGFjLDB4NDQsMHhlYiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjR9fSwKKyB7MTYsMHgzYzkzLDAsezB4NGIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDEyLDB4MzcsMHhjOCwweDAwLDB4MDEsMHg3NywweDAwLDB4OTB9fSwKKyB7MTYsMHgzY2EzLDAsezB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDEsMHhmNSwweDgyLDB4ZTR9fSwKKyB7MTYsMHgzY2IzLDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDQwLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MiwweGY1LDB4ODJ9fSwKKyB7MTYsMHgzY2MzLDAsezB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4OGYsMHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmZ9fSwKKyB7MTYsMHgzY2QzLDAsezB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQxLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDQxLDB4ZjB9fSwKKyB7MTYsMHgzY2UzLDAsezB4ZWYsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4ODR9fSwKKyB7MTYsMHgzY2YzLDAsezB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQxLDB4ZjV9fSwKKyB7MTYsMHgzZDAzLDAsezB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHg2MSwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDJ9fSwKKyB7MTYsMHgzZDEzLDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDgxLDB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjB9fSwKKyB7MTYsMHgzZDIzLDAsezB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzR9fSwKKyB7MTYsMHgzZDMzLDAsezB4NjEsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODN9fSwKKyB7IDQsMHgzZDQzLDAsezB4NzQsMHgwMSwweGYwLDB4MjJ9fSwKKyB7MTYsMHgzZDQ3LDAsezB4YzAsMHhlMCwweGMwLDB4ZjAsMHhjMCwweDgzLDB4YzAsMHg4MiwweGMwLDB4ZDAsMHhlOCwweGMwLDB4ZTAsMHhlOSwweGMwLDB4ZTB9fSwKKyB7MTYsMHgzZDU3LDAsezB4ZWEsMHhjMCwweGUwLDB4ZWIsMHhjMCwweGUwLDB4ZWMsMHhjMCwweGUwLDB4ZWQsMHhjMCwweGUwLDB4ZWUsMHhjMCwweGUwLDB4ZWZ9fSwKKyB7MTYsMHgzZDY3LDAsezB4YzAsMHhlMCwweDkwLDB4N2YsMHhhMiwweGUwLDB4OTAsMHg3NiwweDdmLDB4ZjAsMHg5MCwweDdmLDB4NzQsMHhlMCwweDkwLDB4NzZ9fSwKKyB7MTYsMHgzZDc3LDAsezB4ODcsMHhmMCwweDkwLDB4N2YsMHg3NSwweGUwLDB4OTAsMHg3NiwweDg4LDB4ZjAsMHg5MCwweDdmLDB4OTgsMHhlMCwweDQ0LDB4MDJ9fSwKKyB7MTYsMHgzZDg3LDAsezB4ZjAsMHg5MCwweDc2LDB4OTYsMHhlMCwweGZmLDB4MjAsMHhlMSwweDBjLDB4NDQsMHgwMiwweGYwLDB4OTAsMHg4MCwweDAzLDB4ZjB9fSwKKyB7MTYsMHgzZDk3LDAsezB4ZDIsMHgzMiwweDEyLDB4NGEsMHhjNCwweDkwLDB4NzYsMHg3ZiwweGUwLDB4MjAsMHhlMiwweDUwLDB4OTAsMHg3NiwweDg3LDB4ZTB9fSwKKyB7MTYsMHgzZGE3LDAsezB4ZmUsMHhhMywweGUwLDB4N2MsMHgwMCwweDI0LDB4MDAsMHhmNSwweDM0LDB4ZWMsMHgzZSwweGY1LDB4MzMsMHg5MCwweDc2LDB4OTh9fSwKKyB7MTYsMHgzZGI3LDAsezB4ZTAsMHhmZCwweGFlLDB4MzMsMHhhZiwweDM0LDB4MTIsMHgzNiwweGQ4LDB4OTAsMHg3NiwweDg3LDB4ZWYsMHhmMCwweGQyLDB4MmZ9fSwKKyB7MTYsMHgzZGM3LDAsezB4MzAsMHgzMSwweDI5LDB4MjAsMHgzZiwweDI2LDB4YzIsMHgzMSwweDkwLDB4N2YsMHg5NCwweGUwLDB4NTQsMHhjZiwweGYwLDB4OTB9fSwKKyB7MTYsMHgzZGQ3LDAsezB4N2YsMHg5YSwweGUwLDB4MzAsMHhlNCwweDA0LDB4ZDIsMHgyZCwweGMyLDB4MmMsMHg5MCwweDdmLDB4OWEsMHhlMCwweDIwLDB4ZTV9fSwKKyB7MTYsMHgzZGU3LDAsezB4MDQsMHhjMiwweDJkLDB4ZDIsMHgyYywweDkwLDB4N2YsMHg5NCwweGUwLDB4NDQsMHgzMCwweGYwLDB4MTIsMHg0YSwweDUwLDB4MTJ9fSwKKyB7MTYsMHgzZGY3LDAsezB4MWIsMHgwNCwweDMwLDB4MmYsMHgxMiwweDEyLDB4NDIsMHgxNiwweGMyLDB4MmYsMHg3NSwweGU4LDB4MDEsMHgxMiwweDE2LDB4OGF9fSwKKyB7MTYsMHgzZTA3LDAsezB4NzUsMHhlOCwweDBkLDB4ZDIsMHgyYiwweDgwLDB4MDUsMHg3NSwweGU4LDB4MDEsMHhjMiwweDJiLDB4MjAsMHgyYiwweDM0LDB4OTB9fSwKKyB7MTYsMHgzZTE3LDAsezB4NzYsMHgxOSwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MGUsMHg5MCwweDc2LDB4N2MsMHg3NCwweDY3LDB4ZjAsMHhhMywweDc0LDB4MDZ9fSwKKyB7MTYsMHgzZTI3LDAsezB4ZjAsMHhhMywweDc0LDB4MGIsMHhmMCwweGVmLDB4YjQsMHgwMiwweDBiLDB4OTAsMHg3NiwweDdjLDB4ZTQsMHhmMCwweGEzLDB4ZjB9fSwKKyB7MTYsMHgzZTM3LDAsezB4YTMsMHg3NCwweDBjLDB4ZjAsMHhlZiwweGI0LDB4MDMsMHgwYiwweDkwLDB4NzYsMHg3YywweGU0LDB4ZjAsMHhhMywweGYwLDB4YTN9fSwKKyB7MTYsMHgzZTQ3LDAsezB4NzQsMHgxOCwweGYwLDB4NzUsMHhjYSwweGQzLDB4NzUsMHhjYiwweGZlLDB4ZDIsMHhjYSwweDMwLDB4MzQsMHgwNCwweGMyLDB4MzR9fSwKKyB7MTYsMHgzZTU3LDAsezB4ODAsMHgwMiwweGQyLDB4MzQsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDAyLDB4ZjAsMHhmMCwweDkwLDB4N2Z9fSwKKyB7MTYsMHgzZTY3LDAsezB4OTgsMHhlMCwweDU0LDB4ZmQsMHhmMCwweGQwLDB4ZTAsMHhmZiwweGQwLDB4ZTAsMHhmZSwweGQwLDB4ZTAsMHhmZCwweGQwLDB4ZTB9fSwKKyB7MTYsMHgzZTc3LDAsezB4ZmMsMHhkMCwweGUwLDB4ZmIsMHhkMCwweGUwLDB4ZmEsMHhkMCwweGUwLDB4ZjksMHhkMCwweGUwLDB4ZjgsMHhkMCwweGQwLDB4ZDB9fSwKKyB7IDgsMHgzZTg3LDAsezB4ODIsMHhkMCwweDgzLDB4ZDAsMHhmMCwweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDNlOGYsMCx7MHg5MCwweDc2LDB4OTIsMHhlMCwweDE0LDB4NjAsMHgxZCwweDE0LDB4NzAsMHgwMiwweGUxLDB4NDQsMHgyNCwweDAyLDB4NjAsMHgwMn19LAorIHsxNiwweDNlOWYsMCx7MHhlMSwweGQ0LDB4OTAsMHg3NiwweDk0LDB4NzQsMHgwMSwweGYwLDB4OTAsMHg4MCwweDAwLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg4ZX19LAorIHsxNiwweDNlYWYsMCx7MHhmMCwweGQyLDB4MzEsMHgyMiwweDkwLDB4NzYsMHgxOSwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MWIsMHhlNCwweDkwLDB4N2YsMHhmMn19LAorIHsxNiwweDNlYmYsMCx7MHhmMCwweDkwLDB4N2YsMHhmMywweDc0LDB4MzAsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg5N319LAorIHsxNiwweDNlY2YsMCx7MHhlMCwweDU0LDB4ZmQsMHhmMCwweDU0LDB4ZmIsMHhmMCwweGVmLDB4YjQsMHgwMiwweDFiLDB4ZTQsMHg5MCwweDdmLDB4ZjIsMHhmMH19LAorIHsxNiwweDNlZGYsMCx7MHg5MCwweDdmLDB4ZjMsMHg3NCwweDM0LDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMH19LAorIHsxNiwweDNlZWYsMCx7MHg0NCwweDAyLDB4ZjAsMHg1NCwweGZiLDB4ZjAsMHhlZiwweGI0LDB4MDMsMHgxOCwweGU0LDB4OTAsMHg3ZiwweGYyLDB4ZjAsMHg5MH19LAorIHsxNiwweDNlZmYsMCx7MHg3ZiwweGYzLDB4NzQsMHg2NCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg0NH19LAorIHsxNiwweDNmMGYsMCx7MHgwNCwweGYwLDB4OTAsMHg3NiwweDk0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDgwLDB4MDAsMHhmMCwweDMwLDB4M2YsMHgwOX19LAorIHsxNiwweDNmMWYsMCx7MHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc2LDB4OTcsMHhlMCwweDQ0LDB4MDEsMHhmMH19LAorIHsxNiwweDNmMmYsMCx7MHg5MCwweDc2LDB4OTcsMHhlMCwweDkwLDB4ODAsMHgwMiwweGYwLDB4OTAsMHg3NiwweDk4LDB4NzQsMHgwNCwweGYwLDB4OTAsMHg3Nn19LAorIHsxNiwweDNmM2YsMCx7MHg4ZSwweDc0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3NiwweDE5LDB4ZTAsMHhmZiwweGI0LDB4MDEsMHgxYiwweGU0LDB4OTAsMHg3Zn19LAorIHsxNiwweDNmNGYsMCx7MHhmMiwweGYwLDB4OTAsMHg3ZiwweGYzLDB4NzQsMHg0NCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3Nn19LAorIHsxNiwweDNmNWYsMCx7MHg5NywweGUwLDB4NTQsMHhmZCwweGYwLDB4NTQsMHhmYiwweGYwLDB4ZWYsMHhiNCwweDAyLDB4MWIsMHhlNCwweDkwLDB4N2YsMHhmMn19LAorIHsxNiwweDNmNmYsMCx7MHhmMCwweDkwLDB4N2YsMHhmMywweDc0LDB4NGMsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg5N319LAorIHsxNiwweDNmN2YsMCx7MHhlMCwweDQ0LDB4MDIsMHhmMCwweDU0LDB4ZmIsMHhmMCwweGVmLDB4YjQsMHgwMywweDE4LDB4ZTQsMHg5MCwweDdmLDB4ZjIsMHhmMH19LAorIHsxNiwweDNmOGYsMCx7MHg5MCwweDdmLDB4ZjMsMHg3NCwweDk0LDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMH19LAorIHsxNiwweDNmOWYsMCx7MHg0NCwweDA0LDB4ZjAsMHg5MCwweDc2LDB4OTQsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDkwLDB4ODAsMHgwMCwweGYwLDB4MzAsMHgzZn19LAorIHsxNiwweDNmYWYsMCx7MHgwOSwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZSwweGYwLDB4ODAsMHgwNywweDkwLDB4NzYsMHg5NywweGUwLDB4NDQsMHgwMX19LAorIHsxNiwweDNmYmYsMCx7MHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4OTAsMHg4MCwweDAyLDB4ZjAsMHg5MCwweDc2LDB4OTgsMHg3NCwweDA2LDB4ZjAsMHg5MH19LAorIHsgNiwweDNmY2YsMCx7MHg3NiwweDhlLDB4NzQsMHgwMiwweGYwLDB4MjJ9fSwKKyB7MTYsMHgzZmQ1LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDAyLDB4ZjB9fSwKKyB7MTYsMHgzZmU1LDAsezB4OTAsMHg3ZiwweGM3LDB4ZTAsMHhmNSwweDExLDB4NzUsMHgwZiwweDAwLDB4NzUsMHgwZCwweDAwLDB4ZDIsMHgzMywweGQwLDB4ODJ9fSwKKyB7IDUsMHgzZmY1LDAsezB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsgNiwweDNmZmEsMCx7MHgxMiwweDRhLDB4YzQsMHhjMiwweDMxLDB4MjJ9fSwKKyB7MTYsMHg0MDAwLDAsezB4ZTUsMHgxMSwweGQzLDB4OTQsMHgwMCwweDUwLDB4MDIsMHgyMSwweDA2LDB4OTAsMHg3NiwweDg5LDB4ZTAsMHhjMywweDk0LDB4MDh9fSwKKyB7MTYsMHg0MDEwLDAsezB4NDAsMHgwMiwweDIxLDB4MDYsMHg3NCwweDQwLDB4MjUsMHgwZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2UsMHhmNSwweDgzLDB4ZTB9fSwKKyB7MTYsMHg0MDIwLDAsezB4ZjUsMHgxNywweGU1LDB4MGQsMHg2MCwweDBlLDB4OTAsMHg4MCwweDA1LDB4ZTUsMHgxNywweGYwLDB4OTAsMHg3NiwweDg5LDB4ZTB9fSwKKyB7MTYsMHg0MDMwLDAsezB4MDQsMHhmMCwweDAxLDB4ZGEsMHhlNSwweDE3LDB4MTIsMHgzNywweGY5LDB4NDAsMHhjMSwweDAyLDB4NDAsMHg2NywweDA1LDB4NDB9fSwKKyB7MTYsMHg0MDQwLDAsezB4N2EsMHgwNiwweDQwLDB4OTgsMHgwNywweDQwLDB4YzEsMHgwYywweDQwLDB4YzEsMHgwZCwweDQwLDB4YzcsMHgwZiwweDQwLDB4Y2J9fSwKKyB7MTYsMHg0MDUwLDAsezB4ZjYsMHg0MCwweGNiLDB4ZjgsMHg0MCwweGNiLDB4ZmEsMHg0MCwweGNiLDB4ZmIsMHg0MCwweGNiLDB4ZmMsMHg0MCwweGNiLDB4ZmV9fSwKKyB7MTYsMHg0MDYwLDAsezB4NDAsMHhjYiwweGZmLDB4MDAsMHgwMCwweDQwLDB4ZGEsMHg5MCwweDdlLDB4NDEsMHhlMCwweDkwLDB4ODAsMHgwNSwweGYwLDB4OTB9fSwKKyB7MTYsMHg0MDcwLDAsezB4NzYsMHg4OSwweGUwLDB4MDQsMHhmMCwweDc1LDB4MTEsMHgwMSwweDgwLDB4NjAsMHg5MCwweDdlLDB4NDEsMHhlMCwweDkwLDB4ODB9fSwKKyB7MTYsMHg0MDgwLDAsezB4MDUsMHhmMCwweDkwLDB4N2UsMHg0MiwweGUwLDB4OTAsMHg4MCwweDA1LDB4ZjAsMHg5MCwweDc2LDB4ODksMHhlMCwweDA0LDB4ZjB9fSwKKyB7MTYsMHg0MDkwLDAsezB4ZTAsMHgwNCwweGYwLDB4NzUsMHgxMSwweDAxLDB4ODAsMHg0MiwweDkwLDB4N2UsMHg0MSwweGUwLDB4OTAsMHg4MCwweDA1LDB4ZjB9fSwKKyB7MTYsMHg0MGEwLDAsezB4OTAsMHg3ZSwweDQyLDB4ZTAsMHg5MCwweDgwLDB4MDUsMHhmMCwweDkwLDB4N2UsMHg0MywweGUwLDB4OTAsMHg4MCwweDA1LDB4ZjB9fSwKKyB7MTYsMHg0MGIwLDAsezB4OTAsMHg3NiwweDg5LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHgwNCwweGYwLDB4NzUsMHgxMSwweDAxLDB4ODB9fSwKKyB7MTYsMHg0MGMwLDAsezB4MTksMHhkMiwweDNiLDB4ZDIsMHgzYywweDgwLDB4MTMsMHhkMiwweDNiLDB4ODAsMHgwZiwweDkwLDB4ODAsMHgwNSwweGU1LDB4MTd9fSwKKyB7MTYsMHg0MGQwLDAsezB4ZjAsMHg5MCwweDc2LDB4ODksMHhlMCwweDA0LDB4ZjAsMHg3NSwweDExLDB4MDEsMHgyMCwweDNiLDB4MDQsMHgwNSwweDBkLDB4ODB9fSwKKyB7MTYsMHg0MGUwLDAsezB4MWYsMHgzMCwweDNjLDB4MWMsMHg5MCwweDdlLDB4NDEsMHhlMCwweDkwLDB4ODAsMHgwNSwweGYwLDB4OTAsMHg3ZSwweDQyLDB4ZTB9fSwKKyB7MTYsMHg0MGYwLDAsezB4OTAsMHg4MCwweDA1LDB4ZjAsMHg5MCwweDc2LDB4ODksMHhlMCwweDA0LDB4ZjAsMHhlMCwweDA0LDB4ZjAsMHg3NSwweDExLDB4MDF9fSwKKyB7MTYsMHg0MTAwLDAsezB4MDUsMHgwZiwweDE1LDB4MTEsMHgwMSwweDAwLDB4ZTUsMHgxMSwweDcwLDB4MTAsMHhjMiwweDMzLDB4ZjUsMHgwZCwweGY1LDB4MGZ9fSwKKyB7MTEsMHg0MTEwLDAsezB4OTAsMHg3ZiwweGM3LDB4NzQsMHgwNCwweGYwLDB4YzIsMHgzYiwweGMyLDB4M2MsMHgyMn19LAorIHsxNiwweDQxMWIsMCx7MHg5MCwweDc2LDB4OGQsMHhlMCwweDY0LDB4MDEsMHg3MCwweDI3LDB4MzAsMHgyNywweDA4LDB4YzIsMHgyNywweDEyLDB4MDgsMHgwMH19LAorIHsxNiwweDQxMmIsMCx7MHgxMiwweDE3LDB4NGEsMHgzMCwweDI4LDB4MDgsMHhjMiwweDI4LDB4MTIsMHgzOCwweDc0LDB4MTIsMHgxNywweDRhLDB4MzAsMHgyYX19LAorIHsxNiwweDQxM2IsMCx7MHgwZSwweGU0LDB4OTAsMHg3NiwweDhkLDB4ZjAsMHhjMiwweDJhLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAyLDB4ZjAsMHg5MH19LAorIHsxNiwweDQxNGIsMCx7MHg3NiwweDNmLDB4ZTAsMHhiNCwweDAxLDB4MDUsMHhlNCwweGYwLDB4MTIsMHgzMiwweDZmLDB4OTAsMHg3NiwweDQxLDB4ZTAsMHhiNH19LAorIHsxNiwweDQxNWIsMCx7MHgwMSwweDA1LDB4ZTQsMHhmMCwweDEyLDB4MzQsMHg5YSwweDkwLDB4NzYsMHg0MCwweGUwLDB4YjQsMHgwMSwweDAzLDB4MTIsMHgzNH19LAorIHsxNiwweDQxNmIsMCx7MHg5YSwweDkwLDB4N2YsMHg5YiwweGUwLDB4MjAsMHhlNCwweDAyLDB4YzIsMHgzZiwweDkwLDB4N2YsMHg5YiwweGUwLDB4MzAsMHhlNH19LAorIHsxNiwweDQxN2IsMCx7MHgwMiwweGQyLDB4M2YsMHg5MCwweDdmLDB4OWIsMHhlMCwweDIwLDB4ZTUsMHgwMiwweGMyLDB4M2UsMHg5MCwweDdmLDB4OWIsMHhlMH19LAorIHsxNiwweDQxOGIsMCx7MHgzMCwweGU1LDB4MDIsMHhkMiwweDNlLDB4YTIsMHg0MSwweDMwLDB4M2YsMHgwMSwweGIzLDB4NTAsMHgxZiwweGEyLDB4M2YsMHg5Mn19LAorIHsxNiwweDQxOWIsMCx7MHg0MSwweDMwLDB4M2YsMHgwOSwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZSwweGYwLDB4ODAsMHgwNywweDkwLDB4NzYsMHg5N319LAorIHsxNiwweDQxYWIsMCx7MHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4OTAsMHg4MCwweDAyLDB4ZjAsMHgzMCwweDNmLDB4MzQsMHg5MH19LAorIHsxNiwweDQxYmIsMCx7MHg3NiwweDE5LDB4ZTAsMHhmZiwweGI0LDB4MDEsMHgwZSwweDkwLDB4NzYsMHg3YywweDc0LDB4NjcsMHhmMCwweGEzLDB4NzQsMHgwNn19LAorIHsxNiwweDQxY2IsMCx7MHhmMCwweGEzLDB4NzQsMHgwYiwweGYwLDB4ZWYsMHhiNCwweDAyLDB4MGIsMHhlNCwweDkwLDB4NzYsMHg3YywweGYwLDB4YTMsMHhmMH19LAorIHsxNiwweDQxZGIsMCx7MHhhMywweDc0LDB4MGMsMHhmMCwweGVmLDB4YjQsMHgwMywweDBiLDB4ZTQsMHg5MCwweDc2LDB4N2MsMHhmMCwweGEzLDB4ZjAsMHhhM319LAorIHsxNiwweDQxZWIsMCx7MHg3NCwweDE4LDB4ZjAsMHhhMiwweDQwLDB4MzAsMHgzZSwweDAxLDB4YjMsMHg1MCwweDFmLDB4YTIsMHgzZSwweDkyLDB4NDAsMHgzMH19LAorIHsxNiwweDQxZmIsMCx7MHgzZSwweDA5LDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg0NCwweDA0LDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg1NH19LAorIHsxMSwweDQyMGIsMCx7MHhmYiwweGYwLDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg5MCwweDgwLDB4MDEsMHhmMCwweDIyfX0sCisgezE2LDB4NDIxNiwwLHsweDkwLDB4NzYsMHgxOSwweGUwLDB4NjQsMHgwMSwweDcwLDB4MzUsMHg5MCwweDc2LDB4ODcsMHhlMCwweGZmLDB4ZDMsMHg5NCwweDJkfX0sCisgezE2LDB4NDIyNiwwLHsweDQwLDB4MmIsMHg5MCwweDc2LDB4ODYsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4ODUsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGQzfX0sCisgezE2LDB4NDIzNiwwLHsweDk0LDB4MGYsMHg0MCwweDE5LDB4ZTQsMHhmMCwweGVmLDB4ZDMsMHg5NCwweDMxLDB4NDAsMHgwOCwweDkwLDB4NzYsMHgxOSwweDc0fX0sCisgezE2LDB4NDI0NiwwLHsweDAzLDB4ZjAsMHg4MCwweDA2LDB4OTAsMHg3NiwweDE5LDB4NzQsMHgwMiwweGYwLDB4MTIsMHgzZSwweDhmLDB4OTAsMHg3NiwweDE5fX0sCisgezE2LDB4NDI1NiwwLHsweGUwLDB4YjQsMHgwMiwweDJjLDB4OTAsMHg3NiwweDg3LDB4ZTAsMHhmZiwweGMzLDB4OTQsMHgyZiwweDUwLDB4MjIsMHhlZiwweGQzfX0sCisgezE2LDB4NDI2NiwwLHsweDk0LDB4MmEsMHg0MCwweDFjLDB4OTAsMHg3NiwweDg2LDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDg1LDB4ZTAsMHgwNCwweGYwfX0sCisgezE2LDB4NDI3NiwwLHsweGUwLDB4ZDMsMHg5NCwweDBmLDB4NDAsMHgwYSwweGU0LDB4ZjAsMHg5MCwweDc2LDB4MTksMHgwNCwweGYwLDB4MTIsMHgzZSwweDhmfX0sCisgezE2LDB4NDI4NiwwLHsweDkwLDB4NzYsMHgxOSwweGUwLDB4YjQsMHgwMiwweDI2LDB4OTAsMHg3NiwweDg3LDB4ZTAsMHhkMywweDk0LDB4MzEsMHg0MCwweDFkfX0sCisgezE2LDB4NDI5NiwwLHsweDkwLDB4NzYsMHg4NiwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHg4NSwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZDMsMHg5NCwweDBmfX0sCisgezE2LDB4NDJhNiwwLHsweDQwLDB4MGIsMHhlNCwweGYwLDB4OTAsMHg3NiwweDE5LDB4NzQsMHgwMywweGYwLDB4MTIsMHgzZSwweDhmLDB4OTAsMHg3NiwweDE5fX0sCisgezE2LDB4NDJiNiwwLHsweGUwLDB4NjQsMHgwMywweDcwLDB4M2YsMHg5MCwweDc2LDB4ODcsMHhlMCwweGZmLDB4YzMsMHg5NCwweDVmLDB4NTAsMHgzNSwweDkwfX0sCisgezE2LDB4NDJjNiwwLHsweDc2LDB4ODYsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4ODUsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGQzLDB4OTQsMHgwZiwweDQwfX0sCisgezE2LDB4NDJkNiwwLHsweDIzLDB4ZTQsMHhmMCwweGVmLDB4YzMsMHg5NCwweDJmLDB4NTAsMHgwYywweGVmLDB4ZDMsMHg5NCwweDJhLDB4NDAsMHgwNiwweDkwfX0sCisgezE2LDB4NDJlNiwwLHsweDc2LDB4MTksMHg3NCwweDAxLDB4ZjAsMHhlZiwweGQzLDB4OTQsMHgyZiwweDQwLDB4MDYsMHg5MCwweDc2LDB4MTksMHg3NCwweDAyfX0sCisgezE2LDB4NDJmNiwwLHsweGYwLDB4MTIsMHgzZSwweDhmLDB4OTAsMHg3NiwweDg2LDB4ZTAsMHg3MCwweDA1LDB4OTAsMHg3NiwweDg1LDB4ZjAsMHgyMiwweGU0fX0sCisgeyA1LDB4NDMwNiwwLHsweDkwLDB4NzYsMHg4NiwweGYwLDB4MjJ9fSwKKyB7MTYsMHg0MzBiLDAsezB4ZTQsMHg5MCwweDc2LDB4OTYsMHhmMCwweDkwLDB4ODAsMHgwMywweGYwLDB4OTAsMHg3ZiwweGUwLDB4NzQsMHg5MCwweGYwLDB4OTB9fSwKKyB7MTYsMHg0MzFiLDAsezB4N2YsMHhlMSwweDc0LDB4MDQsMHhmMCwweGU0LDB4OTAsMHg3ZiwweGRkLDB4ZjAsMHg5MCwweDdmLDB4YTEsMHhmMCwweDUzLDB4OGV9fSwKKyB7MTYsMHg0MzJiLDAsezB4ZjgsMHg3NSwweDg4LDB4MDUsMHg3NSwweGI4LDB4MjAsMHg3NSwweGY4LDB4MDEsMHg0MywweDhlLDB4MzAsMHhmNSwweGM4LDB4NzV9fSwKKyB7MTYsMHg0MzNiLDAsezB4Y2EsMHg3ZiwweDc1LDB4Y2IsMHhmOCwweDQzLDB4YTgsMHgyMCwweDEyLDB4MDcsMHg0YSwweGMyLDB4MmMsMHhjMiwweDJkLDB4YzJ9fSwKKyB7MTYsMHg0MzRiLDAsezB4MmIsMHhjMiwweDJmLDB4OTAsMHg3ZiwweGZjLDB4NzQsMHhkZCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmZiwweGYwLDB4OTB9fSwKKyB7MTYsMHg0MzViLDAsezB4N2YsMHg5NywweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDE5LDB4NzQsMHgwMSwweGYwLDB4ZTQsMHg5MCwweDc2LDB4ODV9fSwKKyB7MTYsMHg0MzZiLDAsezB4ZjAsMHhhMywweGYwLDB4OTAsMHg3NiwweDgxLDB4ZjAsMHg5MCwweDc2LDB4ODAsMHhmMCwweDEyLDB4NDksMHg1OCwweDEyLDB4MGZ9fSwKKyB7MTYsMHg0MzdiLDAsezB4YzYsMHgxMiwweDRhLDB4OGQsMHg5MCwweDdmLDB4OTcsMHhlMCwweDQ0LDB4MDgsMHhmMCwweGUwLDB4NTQsMHhiOSwweGYwLDB4ZDJ9fSwKKyB7MTYsMHg0MzhiLDAsezB4MzAsMHgyMCwweDMwLDB4MTgsMHgxMiwweDQ3LDB4YjQsMHgxMiwweDMwLDB4MDAsMHgxMiwweDQwLDB4MDAsMHgxMiwweDQyLDB4MTZ9fSwKKyB7MTYsMHg0MzliLDAsezB4MTIsMHg0YSwweDUwLDB4MTIsMHgxYiwweDA0LDB4MTIsMHgxNiwweDYxLDB4MTIsMHg0MiwweDE2LDB4YzIsMHgyZiwweGMyLDB4MzF9fSwKKyB7MTYsMHg0M2FiLDAsezB4YzIsMHgzMiwweGMyLDB4MzQsMHhjMiwweDMzLDB4YzIsMHgyOSwweGMyLDB4MjcsMHhjMiwweDI4LDB4ZTQsMHhmNSwweDExLDB4OTB9fSwKKyB7MTYsMHg0M2JiLDAsezB4NzYsMHg4OSwweGYwLDB4OTAsMHg3NiwweDNmLDB4ZjAsMHg5MCwweDc2LDB4NDEsMHhmMCwweDkwLDB4NzYsMHg0MCwweGYwLDB4OTB9fSwKKyB7MTYsMHg0M2NiLDAsezB4NzYsMHg4YSwweGYwLDB4YTMsMHhmMCwweGEzLDB4MDQsMHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4NzYsMHg5OSwweGYwLDB4MjJ9fSwKKyB7MTYsMHg0M2RiLDAsezB4MTIsMHg0ZCwweGEzLDB4NDAsMHgwMiwweDgxLDB4YTAsMHg5MCwweDdmLDB4ZWIsMHhlMCwweDI0LDB4ZmUsMHg2MCwweDFlLDB4MTR9fSwKKyB7MTYsMHg0M2ViLDAsezB4NjAsMHg0NiwweDE0LDB4NjAsMHg2ZSwweDE0LDB4NzAsMHgwMiwweDgxLDB4OTEsMHgyNCwweDA0LDB4NjAsMHgwMiwweDgxLDB4OTl9fSwKKyB7MTYsMHg0M2ZiLDAsezB4NzQsMHgwNSwweDkwLDB4N2YsMHhkNCwweGYwLDB4NzQsMHgwMCwweDkwLDB4N2YsMHhkNSwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZWF9fSwKKyB7MTYsMHg0NDBiLDAsezB4ZTAsMHhmZiwweDEyLDB4NDksMHhmZiwweDhiLDB4MjAsMHg4YSwweDIxLDB4ODksMHgyMiwweGVhLDB4NDksMHg2MCwweDExLDB4Y2V9fSwKKyB7MTYsMHg0NDFiLDAsezB4ZWEsMHhjZSwweGVlLDB4OTAsMHg3ZiwweGQ0LDB4ZjAsMHhjZiwweGU5LDB4Y2YsMHhlZiwweDkwLDB4N2YsMHhkNSwweGYwLDB4MjJ9fSwKKyB7MTYsMHg0NDJiLDAsezB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmYsMHgxMiwweDQ4LDB4YjB9fSwKKyB7MTYsMHg0NDNiLDAsezB4OGIsMHgyMCwweDhhLDB4MjEsMHg4OSwweDIyLDB4ZWEsMHg0OSwweDYwLDB4MTEsMHhjZSwweGVhLDB4Y2UsMHhlZSwweDkwLDB4N2Z9fSwKKyB7MTYsMHg0NDRiLDAsezB4ZDQsMHhmMCwweGNmLDB4ZTksMHhjZiwweGVmLDB4OTAsMHg3ZiwweGQ1LDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDR9fSwKKyB7MTYsMHg0NDViLDAsezB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmZiwweDkwLDB4N2UsMHhjMCwweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmJ9fSwKKyB7MTYsMHg0NDZiLDAsezB4MTIsMHgxNywweDk0LDB4OGIsMHgyMCwweDhhLDB4MjEsMHg4OSwweDIyLDB4ZWEsMHg0OSwweDYwLDB4MTEsMHhjZSwweGVhLDB4Y2V9fSwKKyB7MTYsMHg0NDdiLDAsezB4ZWUsMHg5MCwweDdmLDB4ZDQsMHhmMCwweGNmLDB4ZTksMHhjZiwweGVmLDB4OTAsMHg3ZiwweGQ1LDB4ZjAsMHgyMiwweDkwLDB4N2Z9fSwKKyB7MTYsMHg0NDhiLDAsezB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2Z9fSwKKyB7IDUsMHg0NDliLDAsezB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMH19LAorIHsgMSwweDQ0YTAsMCx7MHgyMn19LAorIHsxNiwweDQ0YTEsMCx7MHhjMiwweGFmLDB4ZDIsMHgyNCwweDkwLDB4N2YsMHg5MywweDc0LDB4MzAsMHhmMCwweDkwLDB4N2YsMHg5YywweDc0LDB4YmIsMHhmMH19LAorIHsxNiwweDQ0YjEsMCx7MHg5MCwweDdmLDB4OTYsMHhlMCwweDQ0LDB4MzAsMHhmMCwweGUwLDB4NTQsMHgzMCwweGYwLDB4OTAsMHg3ZiwweDk0LDB4NzQsMHgzMH19LAorIHsxNiwweDQ0YzEsMCx7MHhmMCwweDkwLDB4N2YsMHg5ZCwweDc0LDB4Y2YsMHhmMCwweDkwLDB4N2YsMHg5NywweDc0LDB4YTAsMHhmMCwweDkwLDB4N2YsMHg5NX19LAorIHsxNiwweDQ0ZDEsMCx7MHg3NCwweGMwLDB4ZjAsMHg5MCwweDdmLDB4OWUsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDdmLDB4OTksMHhlMCwweDMwLDB4ZTIsMHgwOX19LAorIHsxNiwweDQ0ZTEsMCx7MHg5MCwweDA1LDB4MTksMHg3NCwweGEwLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHhjMiwweDI1LDB4YzIsMHgyMiwweGMyLDB4MjMsMHhjMn19LAorIHsxNiwweDQ0ZjEsMCx7MHgyNiwweDEyLDB4NGEsMHhjNCwweDEyLDB4MmQsMHhhOSwweDEyLDB4M2IsMHhkMywweDEyLDB4NDUsMHg1OSwweDEyLDB4M2EsMHg0Mn19LAorIHsxNiwweDQ1MDEsMCx7MHg5MCwweDc2LDB4NjgsMHg3NCwweDAxLDB4ZjAsMHg3MCwweDBmLDB4MTIsMHg0YiwweGJiLDB4MTIsMHgwNywweGZlLDB4MTIsMHg0ZH19LAorIHsxNiwweDQ1MTEsMCx7MHhhMSwweDEyLDB4MWIsMHg0MCwweDEyLDB4MTQsMHg5NiwweDEyLDB4NDMsMHgwYiwweDkwLDB4N2YsMHhhZiwweGUwLDB4NDQsMHgwMX19LAorIHsxNiwweDQ1MjEsMCx7MHhmMCwweDkwLDB4N2YsMHhhZSwweGUwLDB4NDQsMHgxZiwweGYwLDB4OTAsMHg3ZiwweGFjLDB4NzQsMHhmZiwweGYwLDB4OTAsMHg3Zn19LAorIHsxNiwweDQ1MzEsMCx7MHhhZCwweGYwLDB4OTAsMHg3ZiwweGRlLDB4ZjAsMHg5MCwweDdmLDB4ZGYsMHhmMCwweDkwLDB4N2YsMHhhYiwweGYwLDB4OTAsMHg3Zn19LAorIHsxNiwweDQ1NDEsMCx7MHhhOSwweGYwLDB4OTAsMHg3ZiwweGFhLDB4ZjAsMHg1MywweDkxLDB4ZWYsMHg0MywweGQ4LDB4MjAsMHhkMiwweGU4LDB4NDMsMHhkOH19LAorIHsgOCwweDQ1NTEsMCx7MHgyMCwweDUzLDB4YTgsMHhhMCwweDQzLDB4YTgsMHg4MCwweDIyfX0sCisgezE2LDB4NDU1OSwwLHsweGU0LDB4OTAsMHg3NiwweDM2LDB4ZjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDMyLDB4ZjUsMHg4MiwweGU0fX0sCisgezE2LDB4NDU2OSwwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTQsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDMzLDB4ZjUsMHg4MiwweGU0fX0sCisgezE2LDB4NDU3OSwwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZiwweDc1fX0sCisgezE2LDB4NDU4OSwwLHsweGYwLDB4MDMsMHhhNCwweDI0LDB4MzIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGU0LDB4ZjAsMHhlZiwweDc1fX0sCisgezE2LDB4NDU5OSwwLHsweGYwLDB4MDMsMHhhNCwweDI0LDB4MzMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDIsMHhmMCwweDkwfX0sCisgezE2LDB4NDVhOSwwLHsweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDMyLDB4ZjUsMHg4MiwweGU0fX0sCisgezE2LDB4NDViOSwwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTQsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDMzLDB4ZjUsMHg4MiwweGU0fX0sCisgezE2LDB4NDVjOSwwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwMywweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZiwweDc1fX0sCisgezE2LDB4NDVkOSwwLHsweGYwLDB4MDMsMHhhNCwweDI0LDB4MzIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGU0LDB4ZjAsMHhlZiwweDc1fX0sCisgezE2LDB4NDVlOSwwLHsweGYwLDB4MDMsMHhhNCwweDI0LDB4MzMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDQsMHhmMCwweDIyfX0sCisgezEyLDB4NDVmOSwwLHsweDc4LDB4N2YsMHhlNCwweGY2LDB4ZDgsMHhmZCwweDc1LDB4ODEsMHgzOCwweDAyLDB4NDYsMHg0MH19LAorIHsxNiwweDQ2MDUsMCx7MHgwMiwweDQ3LDB4NWEsMHhlNCwweDkzLDB4YTMsMHhmOCwweGU0LDB4OTMsMHhhMywweDQwLDB4MDMsMHhmNiwweDgwLDB4MDEsMHhmMn19LAorIHsxNiwweDQ2MTUsMCx7MHgwOCwweGRmLDB4ZjQsMHg4MCwweDI5LDB4ZTQsMHg5MywweGEzLDB4ZjgsMHg1NCwweDA3LDB4MjQsMHgwYywweGM4LDB4YzMsMHgzM319LAorIHsxNiwweDQ2MjUsMCx7MHhjNCwweDU0LDB4MGYsMHg0NCwweDIwLDB4YzgsMHg4MywweDQwLDB4MDQsMHhmNCwweDU2LDB4ODAsMHgwMSwweDQ2LDB4ZjYsMHhkZn19LAorIHsxNiwweDQ2MzUsMCx7MHhlNCwweDgwLDB4MGIsMHgwMSwweDAyLDB4MDQsMHgwOCwweDEwLDB4MjAsMHg0MCwweDgwLDB4OTAsMHgwYywweDhmLDB4ZTQsMHg3ZX19LAorIHsxNiwweDQ2NDUsMCx7MHgwMSwweDkzLDB4NjAsMHhiYywweGEzLDB4ZmYsMHg1NCwweDNmLDB4MzAsMHhlNSwweDA5LDB4NTQsMHgxZiwweGZlLDB4ZTQsMHg5M319LAorIHsxNiwweDQ2NTUsMCx7MHhhMywweDYwLDB4MDEsMHgwZSwweGNmLDB4NTQsMHhjMCwweDI1LDB4ZTAsMHg2MCwweGE4LDB4NDAsMHhiOCwweGU0LDB4OTMsMHhhM319LAorIHsxNiwweDQ2NjUsMCx7MHhmYSwweGU0LDB4OTMsMHhhMywweGY4LDB4ZTQsMHg5MywweGEzLDB4YzgsMHhjNSwweDgyLDB4YzgsMHhjYSwweGM1LDB4ODMsMHhjYX19LAorIHsxNiwweDQ2NzUsMCx7MHhmMCwweGEzLDB4YzgsMHhjNSwweDgyLDB4YzgsMHhjYSwweGM1LDB4ODMsMHhjYSwweGRmLDB4ZTksMHhkZSwweGU3LDB4ODAsMHhiZX19LAorIHsxNiwweDQ2ODUsMCx7MHg5MCwweDdmLDB4ZWMsMHhlMCwweDkwLDB4NzYsMHg4MywweGYwLDB4ZTAsMHgxNCwweDYwLDB4MWQsMHgxNCwweDYwLDB4MmEsMHgxNH19LAorIHsxNiwweDQ2OTUsMCx7MHg2MCwweDM3LDB4MTQsMHg2MCwweDQ0LDB4MjQsMHgwNCwweDcwLDB4NTAsMHg5MCwweDc2LDB4OTEsMHhlMCwweDkwLDB4N2YsMHgwMH19LAorIHsxNiwweDQ2YTUsMCx7MHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDEsMHhmMCwweDgwLDB4NDcsMHg5MCwweDc2LDB4OTIsMHhlMCwweDkwLDB4N2YsMHgwMH19LAorIHsxNiwweDQ2YjUsMCx7MHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDEsMHhmMCwweDgwLDB4MzcsMHg5MCwweDc2LDB4OTAsMHhlMCwweDkwLDB4N2YsMHgwMH19LAorIHsxNiwweDQ2YzUsMCx7MHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDEsMHhmMCwweDgwLDB4MjcsMHg5MCwweDc2LDB4ODQsMHhlMCwweDkwLDB4N2YsMHgwMH19LAorIHsxNiwweDQ2ZDUsMCx7MHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDEsMHhmMCwweDgwLDB4MTcsMHg5MCwweDc2LDB4OTMsMHhlMCwweDkwLDB4N2YsMHgwMH19LAorIHsxNiwweDQ2ZTUsMCx7MHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDEsMHhmMCwweDgwLDB4MDcsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMH19LAorIHsgMiwweDQ2ZjUsMCx7MHhkMywweDIyfX0sCisgezE2LDB4NDZmNywwLHsweGMwLDB4ZTAsMHhjMCwweGYwLDB4YzAsMHg4MywweGMwLDB4ODIsMHhjMCwweGQwLDB4ZTgsMHhjMCwweGUwLDB4ZTksMHhjMCwweGUwfX0sCisgezE2LDB4NDcwNywwLHsweGVhLDB4YzAsMHhlMCwweGViLDB4YzAsMHhlMCwweGVjLDB4YzAsMHhlMCwweGVkLDB4YzAsMHhlMCwweGVlLDB4YzAsMHhlMCwweGVmfX0sCisgezE2LDB4NDcxNywwLHsweGMwLDB4ZTAsMHhjMiwweGNhLDB4YzIsMHhjZiwweDkwLDB4N2YsMHg5OCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MzAsMHgyZSwweDAzfX0sCisgezE2LDB4NDcyNywwLHsweDEyLDB4MTQsMHhhNiwweDkwLDB4N2YsMHg5OCwweGUwLDB4NTQsMHhmZSwweGYwLDB4NTMsMHhhOCwweGZhLDB4MTIsMHgxNiwweDYxfX0sCisgezE2LDB4NDczNywwLHsweGQwLDB4ZTAsMHhmZiwweGQwLDB4ZTAsMHhmZSwweGQwLDB4ZTAsMHhmZCwweGQwLDB4ZTAsMHhmYywweGQwLDB4ZTAsMHhmYiwweGQwfX0sCisgezE2LDB4NDc0NywwLHsweGUwLDB4ZmEsMHhkMCwweGUwLDB4ZjksMHhkMCwweGUwLDB4ZjgsMHhkMCwweGQwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGYwfX0sCisgeyAzLDB4NDc1NywwLHsweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDQ3NWEsMCx7MHhlNCwweDkwLDB4NzYsMHg2NiwweGYwLDB4MTIsMHg0NCwweGExLDB4MjAsMHgyNiwweDEzLDB4OTAsMHg3NiwweDY2LDB4ZTAsMHhjM319LAorIHsxNiwweDQ3NmEsMCx7MHg5NCwweDAyLDB4NTAsMHgwYSwweGUwLDB4MDQsMHhmMCwweGQyLDB4NDIsMHgxMiwweDRhLDB4ZjYsMHg4MCwweGVhLDB4MzAsMHgyNn19LAorIHsxNiwweDQ3N2EsMCx7MHgwNSwweDEyLDB4MjgsMHgwMSwweGMyLDB4MjYsMHgzMCwweDI1LDB4MmIsMHg5MCwweDc2LDB4OTYsMHhlMCwweDU0LDB4ZmMsMHhmMH19LAorIHsxNiwweDQ3OGEsMCx7MHg5MCwweDgwLDB4MDMsMHhmMCwweDEyLDB4MTQsMHg5NiwweDkwLDB4NzYsMHg5NiwweGUwLDB4NDQsMHgwMywweGYwLDB4OTAsMHg4MH19LAorIHsxNiwweDQ3OWEsMCx7MHgwMywweGYwLDB4ZTQsMHg5MCwweDc2LDB4NjcsMHhmMCwweDkwLDB4NzYsMHg2NywweGUwLDB4MDQsMHhmMCwweGUwLDB4YjQsMHg0Yn19LAorIHsxMCwweDQ3YWEsMCx7MHhmNiwweDEyLDB4M2YsMHhmYSwweDEyLDB4NDEsMHgxYiwweDgwLDB4YzUsMHgyMn19LAorIHsxNiwweDQ3YjQsMCx7MHhlNCwweDkwLDB4NzYsMHg5YiwweGYwLDB4OTAsMHg3NiwweDliLDB4ZTAsMHhmZiwweDA0LDB4ZjAsMHhlZiwweDYwLDB4MDgsMHhlMH19LAorIHsxNiwweDQ3YzQsMCx7MHgyNCwweDA4LDB4ZjgsMHhlNCwweGY2LDB4ODAsMHhlZSwweDkwLDB4NzYsMHg5NiwweGUwLDB4NTQsMHhmYiwweGYwLDB4NTQsMHhmN319LAorIHsxNiwweDQ3ZDQsMCx7MHhmMCwweDkwLDB4ODAsMHgwMywweGYwLDB4ZTQsMHhmNSwweDE4LDB4ZDIsMHgzNSwweGY1LDB4MGUsMHhmNSwweDEwLDB4ZDIsMHgzNn19LAorIHsxNiwweDQ3ZTQsMCx7MHg3NSwweDEyLDB4MTEsMHg3NSwweDEzLDB4MjIsMHhjMiwweDM3LDB4YzIsMHgzOSwweGMyLDB4MzgsMHhmNSwweDE2LDB4ZjUsMHgxNH19LAorIHsxMSwweDQ3ZjQsMCx7MHhmNSwweDFhLDB4ZjUsMHgwZCwweGMyLDB4M2IsMHhjMiwweDNjLDB4YzIsMHgzZCwweDIyfX0sCisgezE2LDB4NDgwMCwwLHsweDkwLDB4N2YsMHhlYywweGUwLDB4OTAsMHg3NiwweDgzLDB4ZjAsMHhlMCwweDE0LDB4NjAsMHgxNywweDE0LDB4NjAsMHgyMSwweDE0fX0sCisgezE2LDB4NDgxMCwwLHsweDYwLDB4MmIsMHgxNCwweDYwLDB4MzIsMHgyNCwweDA0LDB4NzAsMHgzOCwweDkwLDB4N2YsMHhlYSwweGUwLDB4OTAsMHg3NiwweDkxfX0sCisgezE2LDB4NDgyMCwwLHsweGYwLDB4ODAsMHgzNSwweDkwLDB4N2YsMHhlYSwweGUwLDB4OTAsMHg3NiwweDkyLDB4ZjAsMHgxMiwweDNlLDB4OGYsMHg4MCwweDI4fX0sCisgezE2LDB4NDgzMCwwLHsweDkwLDB4N2YsMHhlYSwweGUwLDB4OTAsMHg3NiwweDkwLDB4ZjAsMHgxMiwweDE4LDB4MDAsMHg4MCwweDFiLDB4OTAsMHg3ZiwweGVhfX0sCisgezE2LDB4NDg0MCwwLHsweGUwLDB4OTAsMHg3NiwweDg0LDB4ZjAsMHg4MCwweDExLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHg5MCwweDc2LDB4OTMsMHhmMCwweDgwfX0sCisgezEwLDB4NDg1MCwwLHsweDA3LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhkMywweDIyfX0sCisgezE2LDB4NDg1YSwwLHsweGU0LDB4OTAsMHg3NiwweDI2LDB4ZjAsMHg5MCwweDc2LDB4MjYsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDM0fX0sCisgezE2LDB4NDg2YSwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4N2YsMHhlYywweGUwLDB4ZmQsMHhlZSwweDZkfX0sCisgezE2LDB4NDg3YSwwLHsweDYwLDB4MGUsMHhlZiwweGMzLDB4OTQsMHgwNCwweDUwLDB4MDgsMHg5MCwweDc2LDB4MjYsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGQ1fX0sCisgezE2LDB4NDg4YSwwLHsweGVmLDB4YjQsMHgwNCwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweGVmLDB4NzUsMHhmMCwweDAzfX0sCisgezE2LDB4NDg5YSwwLHsweGE0LDB4MjQsMHgzMiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDdmLDB4MDAsMHhmMCwweDkwfX0sCisgeyA2LDB4NDhhYSwwLHsweDdmLDB4YjUsMHg3NCwweDAxLDB4ZjAsMHgyMn19LAorIHsgMiwweDQ4YjAsMCx7MHg4ZiwweDJlfX0sCisgezE2LDB4NDhiMiwwLHsweGU0LDB4ZjUsMHgyZiwweDc1LDB4MzAsMHhmZiwweDc1LDB4MzEsMHgwNiwweDc1LDB4MzIsMHhiZSwweGFiLDB4MzAsMHhhYSwweDMxfX0sCisgezE2LDB4NDhjMiwwLHsweGE5LDB4MzIsMHg5MCwweDAwLDB4MDEsMHgxMiwweDM2LDB4YWIsMHhiNCwweDAzLDB4MWYsMHhhZiwweDJmLDB4MDUsMHgyZiwweGVmfX0sCisgezE2LDB4NDhkMiwwLHsweDY1LDB4MmUsMHg3MCwweDAxLDB4MjIsMHgxMiwweDM2LDB4OTIsMHg3ZSwweDAwLDB4MjksMHhmZiwweGVlLDB4M2EsMHhjOSwweGVmfX0sCisgezE2LDB4NDhlMiwwLHsweGM5LDB4NzUsMHgzMCwweGZmLDB4ZjUsMHgzMSwweDg5LDB4MzIsMHg4MCwweGQyLDB4N2IsMHgwMCwweDdhLDB4MDAsMHg3OSwweDAwfX0sCisgeyAxLDB4NDhmMiwwLHsweDIyfX0sCisgezEyLDB4NDhmMywwLHsweGMyLDB4MzcsMHhlNCwweGY1LDB4MGUsMHhmNSwweDEwLDB4YzIsMHgzNiwweGY1LDB4MTQsMHgyMn19LAorIHsxNiwweDQ5MDAsMCx7MHgwMiwweDJmLDB4ZTcsMHgwMCwweDAyLDB4M2QsMHg0NywweDAwLDB4MDIsMHg0ZCwweDQ2LDB4MDAsMHgwMiwweDRiLDB4ZDUsMHgwMH19LAorIHsxNiwweDQ5MTAsMCx7MHgwMiwweDRiLDB4NjAsMHgwMCwweDAyLDB4MmYsMHhmZiwweDAwLDB4MDIsMHg0YiwweGVkLDB4MDAsMHgwMiwweDRiLDB4ODEsMHgwMH19LAorIHsxNiwweDQ5MjAsMCx7MHgwMiwweDRjLDB4MDQsMHgwMCwweDAyLDB4M2YsMHhkNSwweDAwLDB4MDIsMHg0YywweDFiLDB4MDAsMHgwMiwweDRjLDB4MzIsMHgwMH19LAorIHsxNiwweDQ5MzAsMCx7MHgwMiwweDRjLDB4NDksMHgwMCwweDAyLDB4NGMsMHg2MCwweDAwLDB4MDIsMHg0YywweDc3LDB4MDAsMHgwMiwweDRjLDB4OGUsMHgwMH19LAorIHsxNiwweDQ5NDAsMCx7MHgwMiwweDRjLDB4YTUsMHgwMCwweDAyLDB4NGMsMHhiYywweDAwLDB4MDIsMHg0YywweGQzLDB4MDAsMHgwMiwweDRjLDB4ZWEsMHgwMH19LAorIHsgOCwweDQ5NTAsMCx7MHgwMiwweDRkLDB4MDEsMHgwMCwweDAyLDB4NGQsMHgxOCwweDAwfX0sCisgezE2LDB4NDk1OCwwLHsweDkwLDB4NzYsMHg0NiwweDc0LDB4ODAsMHhmMCwweGU0LDB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhMywweGYwLDB4YTMsMHhmMCwweGEzfX0sCisgezE2LDB4NDk2OCwwLHsweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhMywweGYwLDB4YTMsMHg3NCwweDgwLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHhhMywweGYwfX0sCisgezE2LDB4NDk3OCwwLHsweGEzLDB4ZjAsMHhhMywweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhMywweDc0LDB4NDAsMHhmMCwweGU0LDB4YTMsMHhmMCwweGEzfX0sCisgezE2LDB4NDk4OCwwLHsweDc0LDB4NDAsMHhmMCwweGU0LDB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhMywweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhMywweGYwfX0sCisgezE2LDB4NDk5OCwwLHsweGEzLDB4NzQsMHg0MCwweGYwLDB4ZTQsMHhhMywweGYwLDB4YTMsMHg3NCwweDQwLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHhhMywweGYwfX0sCisgeyA1LDB4NDlhOCwwLHsweGEzLDB4ZjAsMHhhMywweGYwLDB4MjJ9fSwKKyB7MTYsMHg0OWFkLDAsezB4ZTQsMHg5MCwweDc2LDB4MjUsMHhmMCwweDkwLDB4NzYsMHgyNSwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MzR9fSwKKyB7MTYsMHg0OWJkLDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3ZiwweGVjLDB4ZTAsMHhmZCwweGVlLDB4NmR9fSwKKyB7MTYsMHg0OWNkLDAsezB4NjAsMHgwZSwweGVmLDB4YzMsMHg5NCwweDA0LDB4NTAsMHgwOCwweDkwLDB4NzYsMHgyNSwweGUwLDB4MDQsMHhmMCwweDgwLDB4ZDV9fSwKKyB7MTYsMHg0OWRkLDAsezB4ZWYsMHhiNCwweDA0LDB4MDgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZSwweGMwLDB4ZTB9fSwKKyB7MTYsMHg0OWVkLDAsezB4ZmUsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgzMiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWV9fSwKKyB7IDIsMHg0OWZkLDAsezB4ZjAsMHgyMn19LAorIHsxNiwweDQ5ZmYsMCx7MHhlNCwweGZlLDB4NzUsMHgxZCwweGZmLDB4NzUsMHgxZSwweDA1LDB4NzUsMHgxZiwweDEyLDB4YWIsMHgxZCwweGFhLDB4MWUsMHhhOX19LAorIHsxNiwweDRhMGYsMCx7MHgxZiwweDkwLDB4MDAsMHgwMSwweDEyLDB4MzYsMHhhYiwweDY0LDB4MDIsMHg3MCwweDJmLDB4Y2QsMHhlZSwweGNkLDB4MGUsMHhlZH19LAorIHsxNiwweDRhMWYsMCx7MHg2ZiwweDcwLDB4MDEsMHgyMiwweDkwLDB4MDAsMHgwMiwweDEyLDB4MzcsMHgwZSwweDg1LDB4ZjAsMHgxYiwweGY1LDB4MWMsMHg2Mn19LAorIHsxNiwweDRhMmYsMCx7MHgxYiwweGU1LDB4MWIsMHg2MiwweDFjLDB4ZTUsMHgxYywweDYyLDB4MWIsMHgyOSwweGZkLDB4ZTUsMHgxYiwweDNhLDB4YzksMHhlZH19LAorIHsxNiwweDRhM2YsMCx7MHhjOSwweDc1LDB4MWQsMHhmZiwweGY1LDB4MWUsMHg4OSwweDFmLDB4ODAsMHhjMSwweDdiLDB4MDAsMHg3YSwweDAwLDB4NzksMHgwMH19LAorIHsgMSwweDRhNGYsMCx7MHgyMn19LAorIHsxNiwweDRhNTAsMCx7MHgzMCwweDJkLDB4MzksMHhjMiwweDJkLDB4OTAsMHg3NiwweDE5LDB4ZTAsMHhmZiwweGI0LDB4MDEsMHgwZCwweGU0LDB4OTAsMHg3Nn19LAorIHsxNiwweDRhNjAsMCx7MHg3YywweGYwLDB4YTMsMHg3NCwweGY4LDB4ZjAsMHhhMywweDc0LDB4MGEsMHhmMCwweGVmLDB4YjQsMHgwMiwweDBkLDB4ZTQsMHg5MH19LAorIHsxNiwweDRhNzAsMCx7MHg3NiwweDdjLDB4ZjAsMHhhMywweDc0LDB4ZjAsMHhmMCwweGEzLDB4NzQsMHgwYiwweGYwLDB4ZWYsMHhiNCwweDAzLDB4MGQsMHhlNH19LAorIHsxMywweDRhODAsMCx7MHg5MCwweDc2LDB4N2MsMHhmMCwweGEzLDB4NzQsMHhmOCwweGYwLDB4YTMsMHg3NCwweDE3LDB4ZjAsMHgyMn19LAorIHsxNiwweDRhOGQsMCx7MHhlNCwweGZmLDB4NzQsMHg1NiwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NiwweGY1LDB4ODMsMHhlMCwweGZlLDB4NzQsMHgyOH19LAorIHsxNiwweDRhOWQsMCx7MHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZWUsMHhmMCwweDc0LDB4NWUsMHgyZiwweGY1LDB4ODIsMHhlNH19LAorIHsxNiwweDRhYWQsMCx7MHgzNCwweDc2LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg3NCwweDM4LDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4M319LAorIHsgNiwweDRhYmQsMCx7MHhlZSwweGYwLDB4MGYsMHhiZiwweDA4LDB4Y2N9fSwKKyB7IDEsMHg0YWMzLDAsezB4MjJ9fSwKKyB7MTYsMHg0YWM0LDAsezB4ZTQsMHg5MCwweDcyLDB4MzYsMHhmMCwweGEzLDB4ZjAsMHg5MCwweDdmLDB4OTcsMHhlMCwweDU0LDB4ZmIsMHhmMCwweGU0LDB4OTB9fSwKKyB7MTYsMHg0YWQ0LDAsezB4NzIsMHgzMywweGYwLDB4OTAsMHg3MiwweDMyLDB4ZjAsMHg5MCwweDcyLDB4MDEsMHgwNCwweGYwLDB4ZTQsMHg5MCwweDcyLDB4MzN9fSwKKyB7MTYsMHg0YWU0LDAsezB4ZjAsMHg5MCwweDcyLDB4MzIsMHhmMCwweDkwLDB4NzIsMHgwMSwweDA0LDB4ZjAsMHg5MCwweDdmLDB4OTcsMHhlMCwweDQ0LDB4MDR9fSwKKyB7IDIsMHg0YWY0LDAsezB4ZjAsMHgyMn19LAorIHsxNiwweDRhZjYsMCx7MHg5MCwweDdmLDB4ZDYsMHhlMCwweDU0LDB4ZmIsMHhmMCwweGUwLDB4NDQsMHgwOCwweGYwLDB4MzAsMHg0MiwweDA0LDB4ZTAsMHg0NH19LAorIHsxNiwweDRiMDYsMCx7MHgwMiwweGYwLDB4N2YsMHhkYywweDdlLDB4MDUsMHgxMiwweDRkLDB4MmYsMHg5MCwweDdmLDB4ZDYsMHhlMCwweDU0LDB4ZjcsMHhmMH19LAorIHsgNSwweDRiMTYsMCx7MHhlMCwweDQ0LDB4MDQsMHhmMCwweDIyfX0sCisgezE2LDB4NGIxYiwwLHsweDkwLDB4N2YsMHhlYiwweGUwLDB4MTQsMHg3MCwweDE0LDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweDdmLDB4NzAsMHgwNCwweDEyfX0sCisgezE2LDB4NGIyYiwwLHsweDQ4LDB4NWEsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0fX0sCisgeyAzLDB4NGIzYiwwLHsweDAxLDB4ZjAsMHgyMn19LAorIHsxNiwweDRiM2UsMCx7MHg5MCwweDdmLDB4ZWIsMHhlMCwweDE0LDB4NzAsMHgxMywweDkwLDB4N2YsMHhlOSwweGUwLDB4MTQsMHg3MCwweDA0LDB4MTIsMHg0OX19LAorIHsxNiwweDRiNGUsMCx7MHhhZCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMX19LAorIHsgMiwweDRiNWUsMCx7MHhmMCwweDIyfX0sCisgezE2LDB4NGI2MCwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYiwweDc0LDB4MTAsMHhmMCwweDkwfX0sCisgezE2LDB4NGI3MCwwLHsweDc2LDB4OTYsMHhlMCwweDU0LDB4ZmQsMHhmMCwweDkwLDB4ODAsMHgwMywweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwfX0sCisgeyAxLDB4NGI4MCwwLHsweDMyfX0sCisgezE2LDB4NGI4MSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYSwweGUwLDB4NDQsMHgwMSwweGYwfX0sCisgezE1LDB4NGI5MSwwLHsweGMyLDB4MjksMHg5MCwweDc2LDB4OGQsMHg3NCwweDAxLDB4ZjAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDRiYTAsMCx7MHg5MCwweDdmLDB4ZWEsMHhlMCwweDkwLDB4NzYsMHg4MiwweGYwLDB4ZTQsMHg5MCwweDc2LDB4OTEsMHhmMCwweDkwLDB4NzYsMHg5Mn19LAorIHsxMSwweDRiYjAsMCx7MHhmMCwweDkwLDB4NzYsMHg5MCwweGYwLDB4OTAsMHg3NiwweDkzLDB4ZjAsMHhkMywweDIyfX0sCisgezE2LDB4NGJiYiwwLHsweDkwLDB4N2YsMHhkNiwweGUwLDB4MzAsMHhlNywweDEyLDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg3ZiwweDE0LDB4N2UsMHgwMCwweDEyfX0sCisgezEwLDB4NGJjYiwwLHsweDRkLDB4MmYsMHg5MCwweDdmLDB4ZDYsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDIyfX0sCisgezE2LDB4NGJkNSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweGQyLDB4MjUsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDA4fX0sCisgeyA4LDB4NGJlNSwwLHsweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHg0YmVkLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDAxLDB4ZjB9fSwKKyB7IDcsMHg0YmZkLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHg0YzA0LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDAyLDB4ZjB9fSwKKyB7IDcsMHg0YzE0LDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHg0YzFiLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDA0LDB4ZjB9fSwKKyB7IDcsMHg0YzJiLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHg0YzMyLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDA0LDB4ZjB9fSwKKyB7IDcsMHg0YzQyLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHg0YzQ5LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDA4LDB4ZjB9fSwKKyB7IDcsMHg0YzU5LDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHg0YzYwLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDA4LDB4ZjB9fSwKKyB7IDcsMHg0YzcwLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHg0Yzc3LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDEwLDB4ZjB9fSwKKyB7IDcsMHg0Yzg3LDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHg0YzhlLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDEwLDB4ZjB9fSwKKyB7IDcsMHg0YzllLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHg0Y2E1LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDIwLDB4ZjB9fSwKKyB7IDcsMHg0Y2I1LDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHg0Y2JjLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDIwLDB4ZjB9fSwKKyB7IDcsMHg0Y2NjLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHg0Y2QzLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDQwLDB4ZjB9fSwKKyB7IDcsMHg0Y2UzLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHg0Y2VhLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDQwLDB4ZjB9fSwKKyB7IDcsMHg0Y2ZhLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHg0ZDAxLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDgwLDB4ZjB9fSwKKyB7IDcsMHg0ZDExLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHg0ZDE4LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDgwLDB4ZjB9fSwKKyB7IDcsMHg0ZDI4LDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHg0ZDJmLDAsezB4OGUsMHgzNSwweDhmLDB4MzYsMHhlNSwweDM2LDB4MTUsMHgzNiwweGFlLDB4MzUsMHg3MCwweDAyLDB4MTUsMHgzNSwweDRlLDB4NjB9fSwKKyB7IDcsMHg0ZDNmLDAsezB4MDUsMHgxMiwweDE0LDB4ODUsMHg4MCwweGVlLDB4MjJ9fSwKKyB7MTYsMHg0ZDQ2LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwNCwweGYwLDB4ZDB9fSwKKyB7IDYsMHg0ZDU2LDAsezB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4NGQ1YywwLHsweDkwLDB4NzYsMHg4MiwweGUwLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAxLDB4ZjAsMHhkMywweDIyfX0sCisgeyA5LDB4NGQ2YywwLHsweGMyLDB4MjUsMHg1MywweGQ4LDB4ZWYsMHg0MywweGQ4LDB4MjAsMHgzMn19LAorIHsgNywweDRkNzUsMCx7MHg1MywweDk4LDB4ZmUsMHg1MywweDk4LDB4ZmQsMHgzMn19LAorIHsgNywweDRkN2MsMCx7MHg1MywweGMwLDB4ZmUsMHg1MywweGMwLDB4ZmQsMHgzMn19LAorIHsgNiwweDRkODMsMCx7MHg1MywweDkxLDB4YmYsMHhkMiwweDJkLDB4MzJ9fSwKKyB7IDYsMHg0ZDg5LDAsezB4NTMsMHg5MSwweDdmLDB4ZDIsMHgyYywweDMyfX0sCisgeyA0LDB4NGQ4ZiwwLHsweDUzLDB4OTEsMHhkZiwweDMyfX0sCisgeyA0LDB4NGQ5MywwLHsweDUzLDB4ZDgsMHhmNywweDMyfX0sCisgeyA0LDB4NGQ5NywwLHsweDEyLDB4MTcsMHgzMCwweDIyfX0sCisgeyAzLDB4NGQ5YiwwLHsweGMyLDB4OGQsMHgzMn19LAorIHsgMywweDRkOWUsMCx7MHhjMiwweDhmLDB4MzJ9fSwKKyB7IDIsMHg0ZGExLDAsezB4ZDMsMHgyMn19LAorIHsgMiwweDRkYTMsMCx7MHhkMywweDIyfX0sCisgeyAyLDB4NGRhNSwwLHsweGQzLDB4MjJ9fSwKKyB7IDIsMHg0ZGE3LDAsezB4ZDMsMHgyMn19LAorIHsgMiwweDRkYTksMCx7MHhkMywweDIyfX0sCisgeyAyLDB4NGRhYiwwLHsweGMzLDB4MjJ9fSwKKyB7IDAsMHgwMDAwLDEsezB9fQorfTsKKy8qIFNvdXJjZTogRU1JNjJTRlcuSEVYIAorOjEwMEM4RjAwNDE3NjY4MDE0MTc2NkEwMjQxNzY2QjBBQzEyMEMxMjEyMworOjEwNDRBMTAwQzJBRkQyMjQ5MDdGOTM3NDMwRjA5MDdGOUM3NEJCRjBBNAorOjEwNDRCMTAwOTA3Rjk2RTA0NDMwRjBFMDU0MzBGMDkwN0Y5NDc0MzA3NworOjEwNDRDMTAwRjA5MDdGOUQ3NENGRjA5MDdGOTc3NEEwRjA5MDdGOTVDRQorOjEwNDREMTAwNzRDMEYwOTA3RjlFNzQwM0YwOTA3Rjk5RTAzMEUyMDkwMAorOjEwNDRFMTAwOTAwNTE5NzRBMEYwRTRBM0YwQzIyNUMyMjJDMjIzQzIzMAorOjEwNDRGMTAwMjYxMjRBQzQxMjJEQTkxMjNCRDMxMjQ1NTkxMjNBNDIyRgorOjEwNDUwMTAwOTA3NjY4NzQwMUYwNzAwRjEyNEJCQjEyMDdGRTEyNERDQQorOjEwNDUxMTAwQTExMjFCNDAxMjE0OTYxMjQzMEI5MDdGQUZFMDQ0MDE4RAorOjEwNDUyMTAwRjA5MDdGQUVFMDQ0MUZGMDkwN0ZBQzc0RkZGMDkwN0Y3RAorOjEwNDUzMTAwQURGMDkwN0ZERUYwOTA3RkRGRjA5MDdGQUJGMDkwN0Y2OQorOjEwNDU0MTAwQTlGMDkwN0ZBQUYwNTM5MUVGNDNEODIwRDJFODQzRDg0NQorOjA4NDU1MTAwMjA1M0E4QTA0M0E4ODAyMjFBCis6MTA0NzVBMDBFNDkwNzY2NkYwMTI0NEExMjAyNjEzOTA3NjY2RTBDM0IwCis6MTA0NzZBMDA5NDAyNTAwQUUwMDRGMEQyNDIxMjRBRjY4MEVBMzAyNjU1Cis6MTA0NzdBMDAwNTEyMjgwMUMyMjYzMDI1MkI5MDc2OTZFMDU0RkNGMENCCis6MTA0NzhBMDA5MDgwMDNGMDEyMTQ5NjkwNzY5NkUwNDQwM0YwOTA4MDlECis6MTA0NzlBMDAwM0YwRTQ5MDc2NjdGMDkwNzY2N0UwMDRGMEUwQjQ0QkJCCis6MEE0N0FBMDBGNjEyM0ZGQTEyNDExQjgwQzUyMkVGCis6MTAyODAxMDBDMjIwQzIyMUMyMkE5MDdGRThFMDEyMzdGOTI4MzAwMEE1Cis6MTAyODExMDAyODhDMDEyOEEyMDIyQTFGMjEyQTZBMjIyOTNEODAyOTA3Cis6MTAyODIxMDA3RDgxMjlEMTgyMkE4NEExMkFCQUEyMDAwMDJBQkY5MERGCis6MTAyODMxMDA3RkU5RTAxNDYwMTEyNEZFNjAyODI0RkU2MDNCMjRGQzQzCis6MTAyODQxMDA3MDQwMTI0QkEwNDFDQjEyNERBNzQwMDI0MUNCOTA3RjZCCis6MTAyODUxMDBFQUUwQjQwMTA0QzIyMjQxQ0I5MDdGQjRFMDQ0MDFGMDJDCis6MTAyODYxMDA0MUNCMTI0REE5OTA3RkVBRTBCNDAxMDREMjIyNDFDQkMxCis6MTAyODcxMDA5MDdGQjRFMDQ0MDFGMDQxQ0I5MDdGQjRFMDQ0MDFGMDlCCis6MTAyODgxMDA0MUNCOTA3RkI0RTA0NDAxRjA0MUNCOTA3RkU5RTAyNDVCCis6MTAyODkxMDBGNTcwMDUxMjQ4MDA0MUNCOTA3RkI0RTA0NDAxRjA0MTRFCis6MTAyOEExMDBDQjkwN0ZFOUUwMjRGRDYwNTQyNDAyNjAwMjIxMzQxMkMwCis6MTAyOEIxMDA0REE3NDAwMjQxQ0I5MDdGRUFFMDcwMzg5MDdGRUNFMDc5Cis6MTAyOEMxMDBGNDU0ODBGRkM0NTQwRkZGRTA1NDA3MkYyNUUwMjRCNEQzCis6MTAyOEQxMDBGNTgyRTQzNDdGRjU4M0U0RjA5MDdGRUNFMDU0ODBGRkVGCis6MTAyOEUxMDAxMzEzMTM1NDFGRkZFMDU0MDcyRjkwN0ZEN0YwRTA0NEQ4Cis6MTAyOEYxMDAyMEYwNDFDQjkwN0ZCNEUwNDQwMUYwNDFDQjEyNERBOUNGCis6MTAyOTAxMDA0MDAyNDFDQjkwN0ZFQUUwNzAyMDkwN0ZFQ0UwRjQ1NEVDCis6MTAyOTExMDA4MEZGQzQ1NDBGRkZFMDU0MDcyRjI1RTAyNEI0RjU4MjUzCis6MTAyOTIxMDBFNDM0N0ZGNTgzNzQwMUYwNDFDQjkwN0ZCNEUwNDQwMTNFCis6MTAyOTMxMDBGMDQxQ0I5MDdGQjRFMDQ0MDFGMDQxQ0I5MDdGRTlFMERFCis6MTAyOTQxMDA2MDEyMjRGODYwMDkyNDAyNzAyOTEyNDNEQjQxQ0IxMjgyCis6MTAyOTUxMDA0RDVDNDFDQjEyNERBNUEyMjJFNDMzRkYyNUUwRkZBMjNECis6MTAyOTYxMDAyM0U0MzM0RjkwN0YwMEYwRTRBM0YwOTA3RkI1NzQwMjJECis6MTAyOTcxMDBGMDQxQ0I5MDdGQjRFMDQ0MDFGMDQxQ0I5MDdGRTlFMDlFCis6MTAyOTgxMDA2MDMzMjRGNjYwMkEyNDA0NzAzRDkwN0ZFQkUwMjRERTVFCis6MTAyOTkxMDA2MDBDMDQ3MDEyOTA3RkI0RTA0NDAxRjA0MUNCOTA3RjUxCis6MTAyOUExMDBCNEUwNDQwMUYwNDFDQjkwN0ZCNEUwNDQwMUYwNDFDQjZECis6MTAyOUIxMDAxMjQ2ODU0MUNCMTI0REE1RTQ5MDdGMDBGMEEzRjA5MDIzCis6MTAyOUMxMDA3RkI1NzQwMkYwNDFDQjkwN0ZCNEUwNDQwMUYwNDFDQjdDCis6MTAyOUQxMDA5MDdGRTlFMDI0RjQ2MDM0MjQwQzcwMzkxMjREQTU5MDA1Cis6MTAyOUUxMDA3RkVDRTBGNDU0ODBGRkM0NTQwRkZGRTA1NDA3MkYyNTFGCis6MTAyOUYxMDBFMDI0QjRGNTgyRTQzNDdGRjU4M0UwNTRGRDkwN0YwMDU4Cis6MTAyQTAxMDBGMEU0QTNGMDkwN0ZCNTc0MDJGMDQxQ0I5MDdGQjRFMDg1Cis6MTAyQTExMDA0NDAxRjA0MUNCOTA3RkI0RTA0NDAxRjA0MUNCOTA3RjgxCis6MTAyQTIxMDBFOUUwMjRGNjYwMTIxNDYwMUEyNDAyNzAxREQyMjA5MDhECis6MTAyQTMxMDA3RkI0RTA0NDAxRjA4MDEyRDIyMDkwN0ZCNEUwNDQwMUUxCis6MTAyQTQxMDBGMDgwMDc5MDdGQjRFMDQ0MDFGMDIwMjAxODkwN0ZFRUUxCis6MTAyQTUxMDBFMDcwMDRBM0UwNjAwQkQyMjlEMjI3MTIxNzRBRDIyQUQwCis6MTAyQTYxMDA4MDAzMTIwODAwQzIyMDgwNjE5MDdGRUVFMDcwMDRBMzExCis6MTAyQTcxMDBFMDYwMEJEMjI5RDIyODEyMTc0QUQyMkE4MDRDMTIzODkwCis6MTAyQTgxMDA3NDgwNDc5MDdGRTlFMDI0RkU2MDEyMTQ2MDFBMjQwMkVBCis6MTAyQTkxMDA3MDFERDIyMTkwN0ZCNEUwNDQwMUYwODAxMkQyMjE5MEM4Cis6MTAyQUExMDA3RkI0RTA0NDAxRjA4MDA3OTA3RkI0RTA0NDAxRjAyMDVFCis6MTAyQUIxMDAyMTAzMTIxMDAwQzIyMTgwMTExMjJBRDY4MDBDMTI0RDVFCis6MTAyQUMxMDBBQjUwMDc5MDdGQjRFMDQ0MDFGMDIwMkEwNzkwN0ZCNDE3Cis6MDUyQUQxMDBFMDQ0MDJGMDIyQzgKKzoxMDQzREIwMDEyNERBMzQwMDI4MUEwOTA3RkVCRTAyNEZFNjAxRTE0REYKKzoxMDQzRUIwMDYwNDYxNDYwNkUxNDcwMDI4MTkxMjQwNDYwMDI4MTk5RkUKKzoxMDQzRkIwMDc0MDU5MDdGRDRGMDc0MDA5MDdGRDVGMDIyOTA3RkVBMDMKKzoxMDQ0MEIwMEUwRkYxMjQ5RkY4QjIwOEEyMTg5MjJFQTQ5NjAxMUNFRjUKKzoxMDQ0MUIwMEVBQ0VFRTkwN0ZENEYwQ0ZFOUNGRUY5MDdGRDVGMDIyQUMKKzoxMDQ0MkIwMDkwN0ZCNEUwNDQwMUYwMjI5MDdGRUFFMEZGMTI0OEIwQTUKKzoxMDQ0M0IwMDhCMjA4QTIxODkyMkVBNDk2MDExQ0VFQUNFRUU5MDdGNDkKKzoxMDQ0NEIwMEQ0RjBDRkU5Q0ZFRjkwN0ZENUYwMjI5MDdGQjRFMDQ0NEEKKzoxMDQ0NUIwMDAxRjAyMjkwN0ZFQUUwRkY5MDdFQzBFMEZEQTNFMEZCM0QKKzoxMDQ0NkIwMDEyMTc5NDhCMjA4QTIxODkyMkVBNDk2MDExQ0VFQUNFNTkKKzoxMDQ0N0IwMEVFOTA3RkQ0RjBDRkU5Q0ZFRjkwN0ZENUYwMjI5MDdGRjUKKzoxMDQ0OEIwMEI0RTA0NDAxRjAyMjkwN0ZCNEUwNDQwMUYwMjI5MDdGMkQKKzowNTQ0OUIwMEI0RTA0NDAxRjA1MworOjAxNDRBMDAwMjJGOQorOjAzMDAzMzAwMDI0RDZDMEYKKzowOTRENkMwMEMyMjU1M0Q4RUY0M0Q4MjAzMkQwCis6MDIwQzlGMDBDMTJGNjMKKzowNjNGRkEwMDEyNEFDNEMyMzEyMjhDCis6MTA0MzBCMDBFNDkwNzY5NkYwOTA4MDAzRjA5MDdGRTA3NDkwRjA5MEJDCis6MTA0MzFCMDA3RkUxNzQwNEYwRTQ5MDdGRERGMDkwN0ZBMUYwNTM4RTg5Cis6MTA0MzJCMDBGODc1ODgwNTc1QjgyMDc1RjgwMTQzOEUzMEY1Qzg3NTlBCis6MTA0MzNCMDBDQTdGNzVDQkY4NDNBODIwMTIwNzRBQzIyQ0MyMkRDMkU0Cis6MTA0MzRCMDAyQkMyMkY5MDdGRkM3NERERjA5MDdGRkY3NEZGRjA5MEY5Cis6MTA0MzVCMDA3Rjk3RTA0NDAxRjA5MDc2MTk3NDAxRjBFNDkwNzY4NTM0Cis6MTA0MzZCMDBGMEEzRjA5MDc2ODFGMDkwNzY4MEYwMTI0OTU4MTIwRkZFCis6MTA0MzdCMDBDNjEyNEE4RDkwN0Y5N0UwNDQwOEYwRTA1NEI5RjBEMjEyCis6MTA0MzhCMDAzMDIwMzAxODEyNDdCNDEyMzAwMDEyNDAwMDEyNDIxNjdGCis6MTA0MzlCMDAxMjRBNTAxMjFCMDQxMjE2NjExMjQyMTZDMjJGQzIzMTVFCis6MTA0M0FCMDBDMjMyQzIzNEMyMzNDMjI5QzIyN0MyMjhFNEY1MTE5MEVCCis6MTA0M0JCMDA3Njg5RjA5MDc2M0ZGMDkwNzY0MUYwOTA3NjQwRjA5MEQxCis6MTA0M0NCMDA3NjhBRjBBM0YwQTMwNEYwRTRBM0YwOTA3Njk5RjAyMkEwCis6MTA0QTUwMDAzMDJEMzlDMjJEOTA3NjE5RTBGRkI0MDEwREU0OTA3NjI3Cis6MTA0QTYwMDA3Q0YwQTM3NEY4RjBBMzc0MEFGMEVGQjQwMjBERTQ5MEE0Cis6MTA0QTcwMDA3NjdDRjBBMzc0RjBGMEEzNzQwQkYwRUZCNDAzMERFNEI0Cis6MEQ0QTgwMDA5MDc2N0NGMEEzNzRGOEYwQTM3NDE3RjAyMjc4Cis6MTAxQjA0MDAzMDJDMzhDMjJDOTA3NjE5RTBGRkI0MDEwRTkwNzY3QzBDCis6MTAxQjE0MDA3NEMwRjBBMzc0MTRGMEEzNzQwQkYwRUZCNDAyMERFNERBCis6MTAxQjI0MDA5MDc2N0NGMEEzNzQxMEYwQTM3NDBDRjBFRkI0MDMwQjY0Cis6MEMxQjM0MDBFNDkwNzY3Q0YwQTM3NDE4RjBBM0YwMjI3QgorOjEwNDExQjAwOTA3NjhERTA2NDAxNzAyNzMwMjcwOEMyMjcxMjA4MDBDMworOjEwNDEyQjAwMTIxNzRBMzAyODA4QzIyODEyMzg3NDEyMTc0QTMwMkEzQworOjEwNDEzQjAwMEVFNDkwNzY4REYwQzIyQTkwN0ZCNEUwNDQwMkYwOTBBQQorOjEwNDE0QjAwNzYzRkUwQjQwMTA1RTRGMDEyMzI2RjkwNzY0MUUwQjRCMworOjEwNDE1QjAwMDEwNUU0RjAxMjM0OUE5MDc2NDBFMEI0MDEwMzEyMzQ3NgorOjEwNDE2QjAwOUE5MDdGOUJFMDIwRTQwMkMyM0Y5MDdGOUJFMDMwRTQ3QgorOjEwNDE3QjAwMDJEMjNGOTA3RjlCRTAyMEU1MDJDMjNFOTA3RjlCRTAwNgorOjEwNDE4QjAwMzBFNTAyRDIzRUEyNDEzMDNGMDFCMzUwMUZBMjNGOTIxNQorOjEwNDE5QjAwNDEzMDNGMDk5MDc2OTdFMDU0RkVGMDgwMDc5MDc2OTc3OAorOjEwNDFBQjAwRTA0NDAxRjA5MDc2OTdFMDkwODAwMkYwMzAzRjM0OTAzRAorOjEwNDFCQjAwNzYxOUUwRkZCNDAxMEU5MDc2N0M3NDY3RjBBMzc0MDY1OQorOjEwNDFDQjAwRjBBMzc0MEJGMEVGQjQwMjBCRTQ5MDc2N0NGMEEzRjA0OQorOjEwNDFEQjAwQTM3NDBDRjBFRkI0MDMwQkU0OTA3NjdDRjBBM0YwQTM4NAorOjEwNDFFQjAwNzQxOEYwQTI0MDMwM0UwMUIzNTAxRkEyM0U5MjQwMzBGMworOjEwNDFGQjAwM0UwOTkwNzY5NUUwNDQwNEYwODAwNzkwNzY5NUUwNTQ2NAorOjBCNDIwQjAwRkJGMDkwNzY5NUUwOTA4MDAxRjAyMjFGCis6MDIwN0ZFMDBEMzIyMDQKKzowMjREQTEwMEQzMjIxQgorOjAyNERBMzAwRDMyMjE5Cis6MTA0QkEwMDA5MDdGRUFFMDkwNzY4MkYwRTQ5MDc2OTFGMDkwNzY5MkIxCis6MEI0QkIwMDBGMDkwNzY5MEYwOTA3NjkzRjBEMzIyMDYKKzoxMDRENUMwMDkwNzY4MkUwOTA3RjAwRjA5MDdGQjU3NDAxRjBEMzIyQzIKKzoxMDQ4MDAwMDkwN0ZFQ0UwOTA3NjgzRjBFMDE0NjAxNzE0NjAyMTE0NDAKKzoxMDQ4MTAwMDYwMkIxNDYwMzIyNDA0NzAzODkwN0ZFQUUwOTA3NjkxMjcKKzoxMDQ4MjAwMEYwODAzNTkwN0ZFQUUwOTA3NjkyRjAxMjNFOEY4MDI4RkIKKzoxMDQ4MzAwMDkwN0ZFQUUwOTA3NjkwRjAxMjE4MDA4MDFCOTA3RkVBNUIKKzoxMDQ4NDAwMEUwOTA3Njg0RjA4MDExOTA3RkVBRTA5MDc2OTNGMDgwOUIKKzowQTQ4NTAwMDA3OTA3RkI0RTA0NDAxRjBEMzIyOEEKKzoxMDQ2ODUwMDkwN0ZFQ0UwOTA3NjgzRjBFMDE0NjAxRDE0NjAyQTE0QUUKKzoxMDQ2OTUwMDYwMzcxNDYwNDQyNDA0NzA1MDkwNzY5MUUwOTA3RjAwNTgKKzoxMDQ2QTUwMEYwOTA3RkI1NzQwMUYwODA0NzkwNzY5MkUwOTA3RjAwOUUKKzoxMDQ2QjUwMEYwOTA3RkI1NzQwMUYwODAzNzkwNzY5MEUwOTA3RjAwQTAKKzoxMDQ2QzUwMEYwOTA3RkI1NzQwMUYwODAyNzkwNzY4NEUwOTA3RjAwQUMKKzoxMDQ2RDUwMEYwOTA3RkI1NzQwMUYwODAxNzkwNzY5M0UwOTA3RjAwOUQKKzoxMDQ2RTUwMEYwOTA3RkI1NzQwMUYwODAwNzkwN0ZCNEUwNDQwMUYwNEQKKzowMjQ2RjUwMEQzMjJDRQorOjAyNERBNTAwRDMyMjE3Cis6MDI0REE3MDBEMzIyMTUKKzowMjREQTkwMEQzMjIxMworOjAyNERBQjAwQzMyMjIxCis6MTAyRkU3MDBDMEUwQzA4M0MwODJEMjI2NTM5MUVGOTA3RkFCNzQwMUJCCis6MDgyRkY3MDBGMEQwODJEMDgzRDBFMDMyNUIKKzoxMDRENDYwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQjc0MDRGMEQwNzMKKzowNjRENTYwMDgyRDA4M0QwRTAzMkEwCis6MTAzRDQ3MDBDMEUwQzBGMEMwODNDMDgyQzBEMEU4QzBFMEU5QzBFMEY2Cis6MTAzRDU3MDBFQUMwRTBFQkMwRTBFQ0MwRTBFREMwRTBFRUMwRTBFRkIxCis6MTAzRDY3MDBDMEUwOTA3RkEyRTA5MDc2N0ZGMDkwN0Y3NEUwOTA3NjNECis6MTAzRDc3MDA4N0YwOTA3Rjc1RTA5MDc2ODhGMDkwN0Y5OEUwNDQwMjE2Cis6MTAzRDg3MDBGMDkwNzY5NkUwRkYyMEUxMEM0NDAyRjA5MDgwMDNGMDdCCis6MTAzRDk3MDBEMjMyMTI0QUM0OTA3NjdGRTAyMEUyNTA5MDc2ODdFMEQ0Cis6MTAzREE3MDBGRUEzRTA3QzAwMjQwMEY1MzRFQzNFRjUzMzkwNzY5OEQyCis6MTAzREI3MDBFMEZEQUUzM0FGMzQxMjM2RDg5MDc2ODdFRkYwRDIyRkNFCis6MTAzREM3MDAzMDMxMjkyMDNGMjZDMjMxOTA3Rjk0RTA1NENGRjA5MEM0Cis6MTAzREQ3MDA3RjlBRTAzMEU0MDREMjJEQzIyQzkwN0Y5QUUwMjBFNTUwCis6MTAzREU3MDAwNEMyMkREMjJDOTA3Rjk0RTA0NDMwRjAxMjRBNTAxMjM2Cis6MTAzREY3MDAxQjA0MzAyRjEyMTI0MjE2QzIyRjc1RTgwMTEyMTY4QUMxCis6MTAzRTA3MDA3NUU4MEREMjJCODAwNTc1RTgwMUMyMkIyMDJCMzQ5MDY1Cis6MTAzRTE3MDA3NjE5RTBGRkI0MDEwRTkwNzY3Qzc0NjdGMEEzNzQwNjAwCis6MTAzRTI3MDBGMEEzNzQwQkYwRUZCNDAyMEI5MDc2N0NFNEYwQTNGMEYwCis6MTAzRTM3MDBBMzc0MENGMEVGQjQwMzBCOTA3NjdDRTRGMEEzRjBBMzJCCis6MTAzRTQ3MDA3NDE4RjA3NUNBRDM3NUNCRkVEMkNBMzAzNDA0QzIzNEE1Cis6MTAzRTU3MDA4MDAyRDIzNDUzOTFFRjkwN0ZBQjc0MDJGMEYwOTA3RkUxCis6MTAzRTY3MDA5OEUwNTRGREYwRDBFMEZGRDBFMEZFRDBFMEZERDBFMEQ4Cis6MTAzRTc3MDBGQ0QwRTBGQkQwRTBGQUQwRTBGOUQwRTBGOEQwRDBEMDI5Cis6MDgzRTg3MDA4MkQwODNEMEYwRDBFMDMyQkMKKzoxMDRCNjAwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQjc0MTBGMDkwOEYKKzoxMDRCNzAwMDc2OTZFMDU0RkRGMDkwODAwM0YwRDA4MkQwODNEMEUwQjAKKzowMTRCODAwMDMyMDIKKzowMTJGRkYwMDMyOUYKKzoxMDRCRDUwMEMwRTBDMDgzQzA4MkQyMjU1MzkxRUY5MDdGQUI3NDA4QUIKKzowODRCRTUwMEYwRDA4MkQwODNEMEUwMzI1MQorOjEwNEJFRDAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkE5RTA0NDAxRjBGMworOjA3NEJGRDAwRDA4MkQwODNEMEUwMzIyQQorOjEwNEI4MTAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFBRTA0NDAxRjA1RQorOjBGNEI5MTAwQzIyOTkwNzY4RDc0MDFGMEQwODJEMDgzRDBFMDMyQUIKKzoxMDRDMDQwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBOUUwNDQwMkYwREEKKzowNzRDMTQwMEQwODJEMDgzRDBFMDMyMTIKKzoxMDNGRDUwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQUUwNDQwMkYwMTUKKzoxMDNGRTUwMDkwN0ZDN0UwRjUxMTc1MEYwMDc1MEQwMEQyMzNEMDgyQjMKKzowNTNGRjUwMEQwODNEMEUwMzI5MgorOjEwNEMxQjAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkE5RTA0NDA0RjBDMQorOjA3NEMyQjAwRDA4MkQwODNEMEUwMzJGQgorOjEwNEMzMjAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFBRTA0NDA0RjBBOQorOjA3NEM0MjAwRDA4MkQwODNEMEUwMzJFNAorOjEwNEM0OTAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkE5RTA0NDA4RjA4RgorOjA3NEM1OTAwRDA4MkQwODNEMEUwMzJDRAorOjEwNEM2MDAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFBRTA0NDA4RjA3NworOjA3NEM3MDAwRDA4MkQwODNEMEUwMzJCNgorOjEwNEM3NzAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkE5RTA0NDEwRjA1OQorOjA3NEM4NzAwRDA4MkQwODNEMEUwMzI5RgorOjEwNEM4RTAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFBRTA0NDEwRjA0MQorOjA3NEM5RTAwRDA4MkQwODNEMEUwMzI4OAorOjEwNENBNTAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkE5RTA0NDIwRjAxQgorOjA3NENCNTAwRDA4MkQwODNEMEUwMzI3MQorOjEwNENCQzAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFBRTA0NDIwRjAwMworOjA3NENDQzAwRDA4MkQwODNEMEUwMzI1QQorOjEwNENEMzAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkE5RTA0NDQwRjBDRAorOjA3NENFMzAwRDA4MkQwODNEMEUwMzI0MworOjEwNENFQTAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFBRTA0NDQwRjBCNQorOjA3NENGQTAwRDA4MkQwODNEMEUwMzIyQworOjEwNEQwMTAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkE5RTA0NDgwRjA1RQorOjA3NEQxMTAwRDA4MkQwODNEMEUwMzIxNAorOjEwNEQxODAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFBRTA0NDgwRjA0NgorOjA3NEQyODAwRDA4MkQwODNEMEUwMzJGRAorOjEwNDIxNjAwOTA3NjE5RTA2NDAxNzAzNTkwNzY4N0UwRkZEMzk0MkQ4RgorOjEwNDIyNjAwNDAyQjkwNzY4Njc0MDFGMDkwNzY4NUUwMDRGMEUwRDMxQQorOjEwNDIzNjAwOTQwRjQwMTlFNEYwRUZEMzk0MzE0MDA4OTA3NjE5NzQ0NgorOjEwNDI0NjAwMDNGMDgwMDY5MDc2MTk3NDAyRjAxMjNFOEY5MDc2MTk2QworOjEwNDI1NjAwRTBCNDAyMkM5MDc2ODdFMEZGQzM5NDJGNTAyMkVGRDM3MAorOjEwNDI2NjAwOTQyQTQwMUM5MDc2ODY3NDAxRjA5MDc2ODVFMDA0RjBERQorOjEwNDI3NjAwRTBEMzk0MEY0MDBBRTRGMDkwNzYxOTA0RjAxMjNFOEZEMgorOjEwNDI4NjAwOTA3NjE5RTBCNDAyMjY5MDc2ODdFMEQzOTQzMTQwMURFQgorOjEwNDI5NjAwOTA3Njg2NzQwMUYwOTA3Njg1RTAwNEYwRTBEMzk0MEY3MgorOjEwNDJBNjAwNDAwQkU0RjA5MDc2MTk3NDAzRjAxMjNFOEY5MDc2MTk2NQorOjEwNDJCNjAwRTA2NDAzNzAzRjkwNzY4N0UwRkZDMzk0NUY1MDM1OTBDQgorOjEwNDJDNjAwNzY4Njc0MDFGMDkwNzY4NUUwMDRGMEUwRDM5NDBGNDA5MgorOjEwNDJENjAwMjNFNEYwRUZDMzk0MkY1MDBDRUZEMzk0MkE0MDA2OTBCQQorOjEwNDJFNjAwNzYxOTc0MDFGMEVGRDM5NDJGNDAwNjkwNzYxOTc0MDI3NAorOjEwNDJGNjAwRjAxMjNFOEY5MDc2ODZFMDcwMDU5MDc2ODVGMDIyRTQ4NworOjA1NDMwNjAwOTA3Njg2RjAyMjE0Cis6MTAwNzRBMDA5MDc2OUE3NDAyRjBFNDkwNzY5MUYwQTNGMDkwNzY5MDA1Cis6MTAwNzVBMDBGMDkwNzY5M0YwOTA3Njk2NzQwM0YwOTA4MDAzRjBFNDJDCis6MTAwNzZBMDA5MDc2OTdGMDkwODAwMkYwOTA3Njk0MDRGMDkwODAwMDUyCis6MTAwNzdBMDBGMEU0OTA3NjhFRjA5MDc2MUFGMDkwNzY5NTA0RjBDMkI2Cis6MTAwNzhBMDAyRTkwN0Y5QkUwRkY1NDEwRkY3MDAyQzIzRjkwN0Y5QjI4Cis6MTAwNzlBMDBFMEZGNTQxMEZFRkZCRTEwMDJEMjNGOTA3RjlCRTBGRkE1Cis6MTAwN0FBMDA1NDIwRkY3MDAyQzIzRTkwN0Y5QkUwRkY1NDIwRkVGRjYwCis6MTAwN0JBMDBCRTIwMDJEMjNFMzAzRjA5OTA3Njk3RTA1NEZFRjA4MDg4Cis6MTAwN0NBMDAwNzkwNzY5N0UwNDQwMUYwOTA3Njk3RTA5MDgwMDJGMEU3Cis6MTAwN0RBMDAzMDNFMDk5MDc2OTVFMDQ0MDRGMDgwMDc5MDc2OTVFMEUzCis6MTAwN0VBMDA1NEZCRjA5MDc2OTVFMDkwODAwMUYwQTIzRTkyNDBBMkYwCis6MDMwN0ZBMDAzRjkyNDFFQQorOjAxMDdGRDAwMjJEOQorOjEwM0U4RjAwOTA3NjkyRTAxNDYwMUQxNDcwMDJFMTQ0MjQwMjYwMDJFNworOjEwM0U5RjAwRTFENDkwNzY5NDc0MDFGMDkwODAwMEYwRTQ5MDc2OEVFNworOjEwM0VBRjAwRjBEMjMxMjI5MDc2MTlFMEZGQjQwMTFCRTQ5MDdGRjIzQgorOjEwM0VCRjAwRjA5MDdGRjM3NDMwRjA5MDdGRkY3NEZDRjA5MDc2OTc2MgorOjEwM0VDRjAwRTA1NEZERjA1NEZCRjBFRkI0MDIxQkU0OTA3RkYyRjBFRQorOjEwM0VERjAwOTA3RkYzNzQzNEYwOTA3RkZGNzRGQ0YwOTA3Njk3RTA0RQorOjEwM0VFRjAwNDQwMkYwNTRGQkYwRUZCNDAzMThFNDkwN0ZGMkYwOTAyQgorOjEwM0VGRjAwN0ZGMzc0NjRGMDkwN0ZGRjc0RkNGMDkwNzY5N0UwNDQ0QQorOjEwM0YwRjAwMDRGMDkwNzY5NEUwNDQwMUYwOTA4MDAwRjAzMDNGMDk4NworOjEwM0YxRjAwOTA3Njk3RTA1NEZFRjA4MDA3OTA3Njk3RTA0NDAxRjA5QQorOjEwM0YyRjAwOTA3Njk3RTA5MDgwMDJGMDkwNzY5ODc0MDRGMDkwNzZGNworOjEwM0YzRjAwOEU3NDAxRjAyMjkwNzYxOUUwRkZCNDAxMUJFNDkwN0Y5QworOjEwM0Y0RjAwRjJGMDkwN0ZGMzc0NDRGMDkwN0ZGRjc0RkNGMDkwNzY2MgorOjEwM0Y1RjAwOTdFMDU0RkRGMDU0RkJGMEVGQjQwMjFCRTQ5MDdGRjJCNgorOjEwM0Y2RjAwRjA5MDdGRjM3NDRDRjA5MDdGRkY3NEZDRjA5MDc2OTc5NQorOjEwM0Y3RjAwRTA0NDAyRjA1NEZCRjBFRkI0MDMxOEU0OTA3RkYyRjA0QQorOjEwM0Y4RjAwOTA3RkYzNzQ5NEYwOTA3RkZGNzRGQ0YwOTA3Njk3RTAzRAorOjEwM0Y5RjAwNDQwNEYwOTA3Njk0RTA1NEZFRjA5MDgwMDBGMDMwM0ZBRgorOjEwM0ZBRjAwMDk5MDc2OTdFMDU0RkVGMDgwMDc5MDc2OTdFMDQ0MDFGMQorOjEwM0ZCRjAwRjA5MDc2OTdFMDkwODAwMkYwOTA3Njk4NzQwNkYwOTBFQgorOjA2M0ZDRjAwNzY4RTc0MDJGMDIyNjAKKzoxMDE4MDAwMDkwNzY5MEUwMTQ2MDM3MTQ3MDAyMDFEODE0NzAwMjIxQjEKKzoxMDE4MTAwMDcyMTQ3MDAyNDEzQjI0MDQ2MDAyNjEwMzkwN0ZGQzc0RTcKKzoxMDE4MjAwMENDRjA5MDdGRkY3NEZDRjA5MDc2OTVFMDQ0MDFGMDU0OEEKKzoxMDE4MzAwMDA1RjA5MDgwMDFGMEU0OTA3NjFBRjBDMjJFMjI5MDc2QTYKKzoxMDE4NDAwMDk1RTA0NDAxRjA0NDAyRjAzMDNFMDZFMDQ0MDRGMDgwQUMKKzoxMDE4NTAwMDA3OTA3Njk1RTA1NEZCRjA5MDc2MUFFMEI0MDEwODkwN0EKKzoxMDE4NjAwMDc2OTVFMDkwODAwMUYwOTA3NjE5RTBGRkI0MDEyMjkwMjcKKzoxMDE4NzAwMDdGRkM3NDc0RjA5MDdGRkY3NEZDRjA5MDc2OEY3NDJCNzMKKzoxMDE4ODAwMEYwOTA3Njk3RTA1NEZERjBFNDkwNzY4MUYwOTA3NjgwQzkKKzoxMDE4OTAwMEYwRUZCNDAyMjI5MDdGRkM3NDY4RjA5MDdGRkY3NEZDM0MKKzoxMDE4QTAwMEYwOTA3NjhGNzQyRkYwOTA3Njk3RTA0NDAyRjBFNDkwRjkKKzoxMDE4QjAwMDc2ODFGMDkwNzY4MEYwMzAzRjA5OTA3Njk3RTA1NEZFODQKKzoxMDE4QzAwMEYwODAwNzkwNzY5N0UwNDQwMUYwOTA3Njk3RTA1NEZCMjMKKzoxMDE4RDAwMEYwOTA4MDAyRjBEMjJFMjI5MDc2OTVFMDU0RkVGMDQ0RjMKKzoxMDE4RTAwMDAyRjAzMDNFMDZFMDQ0MDRGMDgwMDc5MDc2OTVFMDU0MjQKKzoxMDE4RjAwMEZCRjA5MDc2MUFFMEI0MDEwODkwNzY5NUUwOTA4MDAxQjQKKzoxMDE5MDAwMEYwOTA3NjE5RTBGRkI0MDEyMjkwN0ZGQzc0MzBGMDkwRTMKKzoxMDE5MTAwMDdGRkY3NEZDRjA5MDc2OEY3NDJCRjA5MDc2OTdFMDU0RjQKKzoxMDE5MjAwMEZERjBFNDkwNzY4MUYwOTA3NjgwRjBFRkI0MDIyMjkwQTIKKzoxMDE5MzAwMDdGRkM3NDFDRjA5MDdGRkY3NEZDRjA5MDc2OEY3NDJGMDYKKzoxMDE5NDAwMEYwOTA3Njk3RTA0NDAyRjBFNDkwNzY4MUYwOTA3NjgwMTMKKzoxMDE5NTAwMEYwMzAzRjA5OTA3Njk3RTA1NEZFRjA4MDA3OTA3Njk3M0MKKzoxMDE5NjAwMEUwNDQwMUYwOTA3Njk3RTA1NEZCRjA5MDgwMDJGMEQyRDIKKzoxMDE5NzAwMDJFMjI5MDc2OTVFMDQ0MDFGMDQ0MDJGMDQ0MDhGMDMwQzUKKzoxMDE5ODAwMDNFMDZFMDQ0MDRGMDgwMDc5MDc2OTVFMDU0RkJGMDkwMkEKKzoxMDE5OTAwMDc2MUFFMEI0MDEwODkwNzY5NUUwOTA4MDAxRjA5MDc2OTgKKzoxMDE5QTAwMDE5RTBGRkI0MDEyNTkwN0ZGQzc0Q0NGMDkwN0ZGRjc0QTgKKzoxMDE5QjAwMEZDRjA5MDc2OEY3NDJCRjA5MDc2OTdFMDU0RkRGMDU0MDUKKzoxMDE5QzAwMEZCRjBFNDkwNzY4MUYwOTA3NjgwRjBFRkI0MDIyNTkwMDEKKzoxMDE5RDAwMDdGRkM3NEM4RjA5MDdGRkY3NEZDRjA5MDc2OEY3NDJGQkEKKzoxMDE5RTAwMEYwOTA3Njk3RTA0NDAyRjA1NEZCRjBFNDkwNzY4MUYwQkEKKzoxMDE5RjAwMDkwNzY4MEYwRUZCNDAzMjU5MDdGRkM3NDk4RjA5MDdGOTAKKzoxMDFBMDAwMEZGNzRGQ0YwOTA3NjhGNzQ1RkYwOTA3Njk3RTA1NEZENTEKKzoxMDFBMTAwMEYwNDQwNEYwRTQ5MDc2ODFGMDkwNzY4MEYwMzAzRjA5NTUKKzoxMDFBMjAwMDkwNzY5N0UwNTRGRUYwODAwNzkwNzY5N0UwNDQwMUYwQkUKKzoxMDFBMzAwMDkwNzY5N0UwOTA4MDAyRjBEMjJFMjI5MDc2OTVFMDU0MzYKKzoxMDFBNDAwMEZFRjA0NDAyRjA0NDA4RjAzMDNFMDZFMDQ0MDRGMDgwMkEKKzoxMDFBNTAwMDA3OTA3Njk1RTA1NEZCRjA5MDc2MUFFMEI0MDEwODkwNzgKKzoxMDFBNjAwMDc2OTVFMDkwODAwMUYwOTA3NjE5RTBGRkI0MDEyNTkwMjIKKzoxMDFBNzAwMDdGRkM3NEI0RjA5MDdGRkY3NEZDRjA5MDc2OEY3NDJCMzEKKzoxMDFBODAwMEYwOTA3Njk3RTA1NEZERjA1NEZCRjBFNDkwNzY4MUYwMEUKKzoxMDFBOTAwMDkwNzY4MEYwRUZCNDAyMjU5MDdGRkM3NEIwRjA5MDdGRDgKKzoxMDFBQTAwMEZGNzRGQ0YwOTA3NjhGNzQyRkYwOTA3Njk3RTA0NDAyRUMKKzoxMDFBQjAwMEYwNTRGQkYwRTQ5MDc2ODFGMDkwNzY4MEYwRUZCNDAzODAKKzoxMDFBQzAwMDI1OTA3RkZDNzQ2OEYwOTA3RkZGNzRGQ0YwOTA3NjhGMTcKKzoxMDFBRDAwMDc0NUZGMDkwNzY5N0UwNTRGREYwNDQwNEYwRTQ5MDc2NjMKKzoxMDFBRTAwMDgxRjA5MDc2ODBGMDMwM0YwOTkwNzY5N0UwNTRGRUYwRDgKKzoxMDFBRjAwMDgwMDc5MDc2OTdFMDQ0MDFGMDkwNzY5N0UwOTA4MDAyMUUKKzowNDFCMDAwMEYwRDIyRTIyQ0YKKzowNDBDQTEwMDQxNzYyMzAwNzUKKzoxMDJEQTkwMEU0OTA3NjM2RjBFMEZGNzVGMDAzQTQyNDBFRjU4MkU0OTIKKzoxMDJEQjkwMDM0NzVGNTgzNzQwMUYwRUY3NUYwMDNBNDI0MEZGNTgyREYKKzoxMDJEQzkwMEU0MzQ3NUY1ODM3NDAxRjBFRjc1RjAwM0E0MjQxMEY1NkMKKzoxMDJERDkwMDgyRTQzNDc1RjU4M0U0RjA5MDc2MzZFMDA0RjBFMEZGQTAKKzoxMDJERTkwMDc1RjAwM0E0MjQwRUY1ODJFNDM0NzVGNTgzNzQxMEYwQUMKKzoxMDJERjkwMEVGNzVGMDAzQTQyNDBGRjU4MkU0MzQ3NUY1ODM3NDA1QTcKKzoxMDJFMDkwMEYwRUY3NUYwMDNBNDI0MTBGNTgyRTQzNDc1RjU4M0U0M0EKKzoxMDJFMTkwMEYwOTA3NjM2RTAwNEYwRTBGRjc1RjAwM0E0MjQwRUY1OTcKKzoxMDJFMjkwMDgyRTQzNDc1RjU4Mzc0MDJGMEVGNzVGMDAzQTQyNDBGN0UKKzoxMDJFMzkwMEY1ODJFNDM0NzVGNTgzNzQwMkYwRUY3NUYwMDNBNDI0ODgKKzoxMDJFNDkwMDEwRjU4MkU0MzQ3NUY1ODNFNEYwOTA3NjM2RTAwNEYwMDkKKzoxMDJFNTkwMEUwRkY3NUYwMDNBNDI0MEVGNTgyRTQzNDc1RjU4Mzc0NUMKKzoxMDJFNjkwMDAxRjBFRjc1RjAwM0E0MjQwRkY1ODJFNDM0NzVGNTgzQkUKKzoxMDJFNzkwMDc0MDNGMEVGNzVGMDAzQTQyNDEwRjU4MkU0MzQ3NUY1QkEKKzoxMDJFODkwMDgzRTRGMDkwNzYzNkUwMDRGMEUwRkY3NUYwMDNBNDI0QzMKKzoxMDJFOTkwMDBFRjU4MkU0MzQ3NUY1ODM3NDEwRjBFRjc1RjAwM0E0MzAKKzoxMDJFQTkwMDI0MEZGNTgyRTQzNDc1RjU4Mzc0MDZGMEVGNzVGMDAzQTkKKzoxMDJFQjkwMEE0MjQxMEY1ODJFNDM0NzVGNTgzRTRGMDkwNzYzNkUwQzUKKzoxMDJFQzkwMDA0RjBFMEZGNzVGMDAzQTQyNDBFRjU4MkU0MzQ3NUY1RUYKKzoxMDJFRDkwMDgzNzQwMkYwRUY3NUYwMDNBNDI0MEZGNTgyRTQzNDc1Q0UKKzoxMDJFRTkwMEY1ODM3NDA0RjBFRjc1RjAwM0E0MjQxMEY1ODJFNDM0M0IKKzoxMDJFRjkwMDc1RjU4M0U0RjA5MDc2MzZFMDA0RjBFMEZGNzVGMDAzQjEKKzoxMDJGMDkwMEE0MjQwRUY1ODJFNDM0NzVGNTgzNzQwMkYwRUY3NUYwQUMKKzoxMDJGMTkwMDAzQTQyNDBGRjU4MkU0MzQ3NUY1ODM3NDA4RjBFRjc1ODIKKzoxMDJGMjkwMEYwMDNBNDI0MTBGNTgyRTQzNDc1RjU4Mzc0MDRGMDkwNTkKKzoxMDJGMzkwMDc2MzZFMDA0RjBFMEZGNzVGMDAzQTQyNDBFRjU4MkU0OTAKKzoxMDJGNDkwMDM0NzVGNTgzNzQwMkYwRUY3NUYwMDNBNDI0MEZGNTgyNEMKKzoxMDJGNTkwMEU0MzQ3NUY1ODM3NDBBRjBFRjc1RjAwM0E0MjQxMEY1RDEKKzoxMDJGNjkwMDgyRTQzNDc1RjU4Mzc0MDRGMDkwNzYzNkUwMDRGMEUwNzkKKzoxMDJGNzkwMEZGNzVGMDAzQTQyNDBFRjU4MkU0MzQ3NUY1ODM3NDAyMTkKKzoxMDJGODkwMEYwRUY3NUYwMDNBNDI0MEZGNTgyRTQzNDc1RjU4Mzc0MkEKKzoxMDJGOTkwMDA5RjBFRjc1RjAwM0E0MjQxMEY1ODJFNDM0NzVGNTgzODQKKzoxMDJGQTkwMDc0MDRGMDkwNzYzNkUwMDRGMEUwRkY3NUYwMDNBNDI0OTEKKzoxMDJGQjkwMDBFRjU4MkU0MzQ3NUY1ODM3NDAyRjBFRjc1RjAwM0E0MUQKKzoxMDJGQzkwMDI0MEZGNTgyRTQzNDc1RjU4Mzc0MDdGMEVGNzVGMDAzODcKKzowRTJGRDkwMEE0MjQxMEY1ODJFNDM0NzVGNTgzNzQwNEYwMjIwQworOjEwM0JEMzAwRTQ5MDc2MzZGMEUwRkI3NUYwMEZBNDI0NDFGNTgyRTQxRgorOjEwM0JFMzAwMzQ3NUY1ODM3NDQwRjBFQjc1RjAwRkE0MjQ0MkY1ODIyRAorOjEwM0JGMzAwRTQzNDc1RjU4Mzc0MEFGMEVCNzVGMDBGQTQyNDQzRjVGMAorOjEwM0MwMzAwODJFNDM0NzVGNTgzMTIzN0M4MDAwMEFDNDRFQjc1RjBEOQorOjEwM0MxMzAwMEZBNDI0NDdGNTgyRTQzNDc1RjU4MzEyMzdDODAwMDBGNgorOjEwM0MyMzAwQUM0NEVCNzVGMDBGQTQyNDRCRjU4MkU0MzQ3NUY1ODNCMworOjEwM0MzMzAwMTIzN0M4MDAwMTc3MDA5MDc2MzZFMDA0RjBFMEZCNzU5OAorOjEwM0M0MzAwRjAwRkE0MjQ0MUY1ODJFNDM0NzVGNTgzNzQ0MEYwRUI1RQorOjEwM0M1MzAwNzVGMDBGQTQyNDQyRjU4MkU0MzQ3NUY1ODM3NDhDRjA3NworOjEwM0M2MzAwRUI3NUYwMEZBNDI0NDNGNTgyRTQzNDc1RjU4MzEyMzcyMgorOjEwM0M3MzAwQzgwMDAwQUM0NEVCNzVGMDBGQTQyNDQ3RjU4MkU0MzQ4QworOjEwM0M4MzAwNzVGNTgzMTIzN0M4MDAwMEFDNDRFQjc1RjAwRkE0MjQxQworOjEwM0M5MzAwNEJGNTgyRTQzNDc1RjU4MzEyMzdDODAwMDE3NzAwOTA0MQorOjEwM0NBMzAwNzYzNkUwMDRGMEUwRkY3NUYwMEZBNDI0NDFGNTgyRTREQQorOjEwM0NCMzAwMzQ3NUY1ODM3NDQwRjBFRjc1RjAwRkE0MjQ0MkY1ODI1OAorOjEwM0NDMzAwRTQzNDc1RjU4Mzc0OEZGMDkwNzYzNkUwMDRGMEUwRkYwQQorOjEwM0NEMzAwNzVGMDBGQTQyNDQxRjU4MkU0MzQ3NUY1ODM3NDQxRjA0MworOjEwM0NFMzAwRUY3NUYwMEZBNDI0NDJGNTgyRTQzNDc1RjU4Mzc0ODRGMAorOjEwM0NGMzAwRjA5MDc2MzZFMDA0RjBFMEZGNzVGMDBGQTQyNDQxRjU3MAorOjEwM0QwMzAwODJFNDM0NzVGNTgzNzQ2MUYwRUY3NUYwMEZBNDI0NDJGNworOjEwM0QxMzAwRjU4MkU0MzQ3NUY1ODM3NDgxRjA5MDc2MzZFMDA0RjAyRgorOjEwM0QyMzAwRTBGRjc1RjAwRkE0MjQ0MUY1ODJFNDM0NzVGNTgzNzQ0NAorOjEwM0QzMzAwNjFGMEVGNzVGMDBGQTQyNDQyRjU4MkU0MzQ3NUY1ODM0NgorOjA0M0Q0MzAwNzQwMUYwMjJGNQorOjEwNDU1OTAwRTQ5MDc2MzZGMEUwRkY3NUYwMDNBNDI0MzJGNTgyRTRBNgorOjEwNDU2OTAwMzQ3NUY1ODNFNEYwRUY3NUYwMDNBNDI0MzNGNTgyRTRBMAorOjEwNDU3OTAwMzQ3NUY1ODM3NDAxRjA5MDc2MzZFMDA0RjBFMEZGNzU0OAorOjEwNDU4OTAwRjAwM0E0MjQzMkY1ODJFNDM0NzVGNTgzRTRGMEVGNzU4MQorOjEwNDU5OTAwRjAwM0E0MjQzM0Y1ODJFNDM0NzVGNTgzNzQwMkYwOTBCMgorOjEwNDVBOTAwNzYzNkUwMDRGMEUwRkY3NUYwMDNBNDI0MzJGNTgyRTRFNgorOjEwNDVCOTAwMzQ3NUY1ODNFNEYwRUY3NUYwMDNBNDI0MzNGNTgyRTQ1MAorOjEwNDVDOTAwMzQ3NUY1ODM3NDAzRjA5MDc2MzZFMDA0RjBFMEZGNzVGNgorOjEwNDVEOTAwRjAwM0E0MjQzMkY1ODJFNDM0NzVGNTgzRTRGMEVGNzUzMQorOjEwNDVFOTAwRjAwM0E0MjQzM0Y1ODJFNDM0NzVGNTgzNzQwNEYwMjJDRQorOjEwM0E0MjAwRTQ5MDc2MzVGMDkwNzYzNUUwRkZDMzk0MDM0MDAyNDE2RQorOjEwM0E1MjAwRkZFRjc1RjAwQUE0MjRBQUY1ODJFNDM0NzVGNTgzRUYyQQorOjEwM0E2MjAwRjBFRjc1RjAwQUE0MjRBQkY1ODJFNDM0NzVGNTgzRTQzMworOjEwM0E3MjAwRjBFRjc1RjAwQUE0MjRBQ0Y1ODJFNDM0NzVGNTgzNzQ5MgorOjEwM0E4MjAwRjBGMEVGNzVGMDBBQTQyNEFERjU4MkU0MzQ3NUY1ODMwNQorOjEwM0E5MjAwNzRGRkYwRUY3NUYwMEFBNDI0QUVGNTgyRTQzNDc1RjVGNAorOjEwM0FBMjAwODNFNEYwRUY3NUYwMEFBNDI0QUZGNTgyRTQzNDc1RjVFRgorOjEwM0FCMjAwODM3NDgwRjBFRjc1RjAwQUE0MjRCMEY1ODJFNDM0NzVDMworOjEwM0FDMjAwRjU4M0U0RjBFRjc1RjAwQUE0MjRCMUY1ODJFNDM0NzVDRAorOjEwM0FEMjAwRjU4M0U0RjBFRjc1RjAwQUE0MjRCMkY1ODJFNDM0NzVCQworOjEwM0FFMjAwRjU4M0U0RjBFRjc1RjAwQUE0MjRCM0Y1ODJFNDM0NzVBQgorOjEwM0FGMjAwRjU4Mzc0MDFGMDkwNzYzNUUwMDRGMDQxNDc5MDc2M0MwRQorOjEwM0IwMjAwNzQwQUYwRTRBM0YwOTA3NjM1NzQwM0YwOTA3NjNDRTAwQQorOjEwM0IxMjAwRkY5MDc2MzVFMEZFQzM5RjQwMDI2MUQyOTA3NjNERTA5MQorOjEwM0IyMjAwRkYwNEYwRUU3NUYwMEFBNDI0QUFGNTgyRTQzNDc1RjVEOAorOjEwM0IzMjAwODNFRkYwRUU3NUYwMEFBNDI0QUJGNTgyRTQzNDc1RjU1OAorOjEwM0I0MjAwODNFNEYwRUU3NUYwMEFBNDI0QUNGNTgyRTQzNDc1RjU1MgorOjEwM0I1MjAwODM3NDVFRjBFRTc1RjAwQUE0MjRBREY1ODJFNDM0NzU0OAorOjEwM0I2MjAwRjU4Mzc0QkFGMEVFNzVGMDBBQTQyNEFFRjU4MkU0MzQ1QgorOjEwM0I3MjAwNzVGNTgzNzQwNUYwRUU3NUYwMEFBNDI0QUZGNTgyRTRCRQorOjEwM0I4MjAwMzQ3NUY1ODM3NDgwRjBFRTc1RjAwQUE0MjRCMEY1ODJFMgorOjEwM0I5MjAwRTQzNDc1RjU4M0U0RjBFRTc1RjAwQUE0MjRCMUY1ODJGRAorOjEwM0JBMjAwRTQzNDc1RjU4M0U0RjBFRTc1RjAwQUE0MjRCMkY1ODJFQworOjEwM0JCMjAwRTQzNDc1RjU4Mzc0MTVGMEVFNzVGMDBBQTQyNEIzRjVCOAorOjEwM0JDMjAwODJFNDM0NzVGNTgzRTRGMDkwNzYzNUUwMDRGMDYxMEUxQQorOjAxM0JEMjAwMjJEMAorOjEwMDgwMDAwRTQ5MDc2MzFGMDkwNzYzMUUwRkY3NUYwMDNBNDI0MEY4OAorOjEwMDgxMDAwRjU4MkU0MzQ3NUY1ODNFMEZFOTA3RkVERTBGREVFNkQ0QQorOjEwMDgyMDAwNjAwRUVGQzM5NDBCNTAwODkwNzYzMUUwMDRGMDgwRDU1MQorOjEwMDgzMDAwRUZCNDBCMDg5MDdGQjRFMDQ0MDFGMDIyRUY3NUYwMDNCMQorOjEwMDg0MDAwQTQyNDBFRjU4MkU0MzQ3NUY1ODNFMDkwNzYzM0YwMjQyOQorOjEwMDg1MDAwRjA2MDBBMjQwRTYwMDI4MTg3MTI0QjNFMjI5MDdGRURFOQorOjEwMDg2MDAwRTA2NDA1NzA1MTkwNzYxODc0MDVGMDkwNzYzNzc0MDE0NQorOjEwMDg3MDAwRjA5MDc2Mzk3NDAzRjA5MDc2MjFGMEU0OTA3NjIwRjBEMQorOjEwMDg4MDAwOTA3RkVBRTBGNDYwMkY5MDc2MjBFMEZGNzVGMDBBQTRGNAorOjEwMDg5MDAwMjRBQUY1ODJFNDM0NzVGNTgzRTBGRTkwN0ZFQUUwRkQ1QQorOjEwMDhBMDAwRUU2RDYwMTI5MDc2MjFFMEZFRUZDMzlFNTAwODkwNzZDOAorOjEwMDhCMDAwMjBFMDA0RjA4MEQxOTA3RkVERTA2NDA2NzA1MjkwNzZFNQorOjEwMDhDMDAwMTg3NDA2RjA5MDc2Mzc3NDA0RjA5MDc2Mzk3NDBBRjA1NAorOjEwMDhEMDAwOTA3NjIxRjA5MDc2MjA3NDAzRjA5MDdGRUFFMEY0NjA0NworOjEwMDhFMDAwMkY5MDc2MjBFMEZGNzVGMDBBQTQyNEFBRjU4MkU0MzQ2NAorOjEwMDhGMDAwNzVGNTgzRTBGRTkwN0ZFQUUwRkRFRTZENjAxMjkwNzY4NAorOjEwMDkwMDAwMjFFMEZFRUZDMzlFNTAwODkwNzYyMEUwMDRGMDgwRDFGNQorOjEwMDkxMDAwOTA3NjIwRTBGRjc1RjAwQUE0MjRBQUY1ODJFNDM0NzVFRAorOjEwMDkyMDAwRjU4M0UwOTA3MjI5RjBFNDkwNzYzQkYwOTA3NjIxRTAzOAorOjEwMDkzMDAwRkVFRjZFNzAwODkwN0ZCNEUwNDQwMUYwMjI5MDdGRUJGMAorOjEwMDk0MDAwRTAxNDYwMTMxNDcwMDIyMUUyMjQwMjYwMDI4MTdGOTA5RgorOjEwMDk1MDAwN0ZCNEUwNDQwMUYwMjI5MDdGRTlFMDE0NzA3QzkwN0Y0NgorOjEwMDk2MDAwRUFFMEY0NzA0ODkwNzYzN0UwOTA3NjIwRjA5MDc2Mzk5RgorOjEwMDk3MDAwRTBGRTkwNzYyMEUwRkRDMzlFNTAyQjkwNzYzQkUwRkU5QgorOjEwMDk4MDAwMDRGMDc0QzAyRUY1ODJFNDM0N0VGNTgzRTBGRUVENzU0QworOjEwMDk5MDAwRjAwQUE0MjRBQkY1ODJFNDM0NzVGNTgzRUVGMDkwNzY4QQorOjEwMDlBMDAwMjBFMDA0RjA4MEM3OTA3NjNGNzQwMUYwMjI5MDdFQzA3MgorOjEwMDlCMDAwRTBGRUVGNzVGMDBBQTQyNEFCRjU4MkU0MzQ3NUY1ODMwQworOjEwMDlDMDAwRUVGMEUwQjQwMTA4OTA3NjNFNzQwMUYwODAwNUU0OTAwQQorOjEwMDlEMDAwNzYzRUYwOTA3NjNGNzQwMUYwMjI5MDdGQjRFMDQ0MDFCRgorOjEwMDlFMDAwRjAyMjkwN0ZFOUUwMjRGRTcwMDI0MUEzMTQ3MDAyNjFCRQorOjEwMDlGMDAwM0YxNDcwMDI2MURCMjQwMzYwMDI4MTc3OTA3RkVBRTA5QworOjEwMEEwMDAwRjQ3MDZCOTA3NjM3RTA5MDc2MjBGMDkwNzYzOUUwRkZDNgorOjEwMEExMDAwOTA3NjIwRTBGRUMzOUY1MDRFOTA3NjNCRTBGRjA0RjBCRQorOjEwMEEyMDAwNzRDMDJGRjU4MkU0MzQ3RUY1ODNFMEZGRUU3NUYwMEFBMgorOjEwMEEzMDAwQTQyNEFDRjU4MkU0MzQ3NUY1ODNFRkYwOTA3NjNCRTBDNgorOjEwMEE0MDAwRkYwNEYwNzRDMDJGRjU4MkU0MzQ3RUY1ODNFMEZGRUVGRQorOjEwMEE1MDAwNzVGMDBBQTQyNEFERjU4MkU0MzQ3NUY1ODNFRkYwOTBDNworOjEwMEE2MDAwNzYyMEUwMDRGMDgwQTQ5MDc2NDA3NDAxRjAyMjkwN0UxRAorOjEwMEE3MDAwQzBFMEZGOTA3NjIwRTBGRTc1RjAwQUE0MjRBQ0Y1ODI3OQorOjEwMEE4MDAwRTQzNDc1RjU4M0VGRjA5MDdFQzFFMEZGRUU3NUYwMEE3NworOjEwMEE5MDAwQTQyNEFERjU4MkU0MzQ3NUY1ODNFRkYwOTA3NjQxNzRDQgorOjEwMEFBMDAwMDFGMDIyOTA3RkVBRTBGNDcwNjY5MDc2MzdFMDkwNzY2RAorOjEwMEFCMDAwMjBGMDkwNzYzOUUwRkY5MDc2MjBFMEZFQzM5RjQwMDI2MAorOjEwMEFDMDAwODE4RTkwNzYzQkUwRkYwNEYwNzRDMDJGRjU4MkU0MzQxMQorOjEwMEFEMDAwN0VGNTgzRTBGRkVFNzVGMDBBQTQyNEFFRjU4MkU0MzRERgorOjEwMEFFMDAwNzVGNTgzRUZGMDkwNzYzQkUwRkYwNEYwNzRDMDJGRjVDRQorOjEwMEFGMDAwODJFNDM0N0VGNTgzRTBGRkVFNzVGMDBBQTQyNEFGRjVCRQorOjEwMEIwMDAwODJFNDM0NzVGNTgzRUZGMDkwNzYyMEUwMDRGMDgwQTI2MworOjEwMEIxMDAwOTA3RUMwRTBGRjkwNzYyMEUwRkU3NUYwMEFBNDI0QUUzRgorOjEwMEIyMDAwRjU4MkU0MzQ3NUY1ODNFRkYwOTA3RUMxRTBGRkVFNzU1OQorOjEwMEIzMDAwRjAwQUE0MjRBRkY1ODJFNDM0NzVGNTgzRUZGMDIyOTAzNworOjEwMEI0MDAwN0ZFQUUwRjQ3MDY2OTA3NjM3RTA5MDc2MjBGMDkwNzY1OQorOjEwMEI1MDAwMzlFMEZGOTA3NjIwRTBGRUMzOUY0MDAyODE4RTkwNzZDMAorOjEwMEI2MDAwM0JFMEZGMDRGMDc0QzAyRkY1ODJFNDM0N0VGNTgzRTBBRgorOjEwMEI3MDAwRkZFRTc1RjAwQUE0MjRCMEY1ODJFNDM0NzVGNTgzRUYzNgorOjEwMEI4MDAwRjA5MDc2M0JFMEZGMDRGMDc0QzAyRkY1ODJFNDM0N0VGMQorOjEwMEI5MDAwRjU4M0UwRkZFRTc1RjAwQUE0MjRCMUY1ODJFNDM0NzUyNAorOjEwMEJBMDAwRjU4M0VGRjA5MDc2MjBFMDA0RjA4MEEyOTA3RUMwRTAyNAorOjEwMEJCMDAwRkY5MDc2MjBFMEZFNzVGMDBBQTQyNEIwRjU4MkU0MzRCQworOjEwMEJDMDAwNzVGNTgzRUZGMDkwN0VDMUUwRkZFRTc1RjAwQUE0MjQ4NgorOjEwMEJEMDAwQjFGNTgyRTQzNDc1RjU4M0VGRjAyMjkwN0ZFQUUwRjQxQQorOjEwMEJFMDAwNzA2NjkwNzYzN0UwOTA3NjIwRjA5MDc2MzlFMEZGOTA0RQorOjEwMEJGMDAwNzYyMEUwRkVDMzlGNDAwMjgxOEU5MDc2M0JFMEZGMDRBQQorOjEwMEMwMDAwRjA3NEMwMkZGNTgyRTQzNDdFRjU4M0UwRkZFRTc1RjBEQQorOjEwMEMxMDAwMEFBNDI0QjJGNTgyRTQzNDc1RjU4M0VGRjA5MDc2M0JCNAorOjEwMEMyMDAwRTBGRjA0RjA3NEMwMkZGNTgyRTQzNDdFRjU4M0UwRkYyQQorOjEwMEMzMDAwRUU3NUYwMEFBNDI0QjNGNTgyRTQzNDc1RjU4M0VGRjA4MQorOjEwMEM0MDAwOTA3NjIwRTAwNEYwODBBMjkwN0VDMEUwRkY5MDc2MjBCNQorOjEwMEM1MDAwRTBGRTc1RjAwQUE0MjRCMkY1ODJFNDM0NzVGNTgzRUY2MgorOjEwMEM2MDAwRjA5MDdFQzFFMEZGRUU3NUYwMEFBNDI0QjNGNTgyRTRCMworOjEwMEM3MDAwMzQ3NUY1ODNFRkYwMjI5MDdGQjRFMDQ0MDFGMDIyOTBDOAorOjBGMEM4MDAwN0ZCNEUwNDQwMUYwMjI5MDdGQjRFMDQ0MDFGMDIyMDEKKzoxMDEwMDAwMEU0OTA3NjJDRjA5MDc2MkNFMEZGNzVGMDAzQTQyNDBGOEEKKzoxMDEwMTAwMEY1ODJFNDM0NzVGNTgzRTBGRTkwN0ZFREUwRkRFRTZENDIKKzoxMDEwMjAwMDYwMEVFRkMzOTQwQjUwMDg5MDc2MkNFMDA0RjA4MEQ1NEUKKzoxMDEwMzAwMEVGQjQwQjA4OTA3RkI0RTA0NDAxRjAyMkVGNzVGMDAzQTkKKzoxMDEwNDAwMEE0MjQwRUY1ODJFNDM0NzVGNTgzRTA5MDc2MkVGMDI0MjYKKzoxMDEwNTAwMEYwNjAwQTI0MEY2MDAyODE3RDEyNEIxQjIyOTA3RkVEMEQKKzoxMDEwNjAwMEUwNjQwNTcwNTE5MDc2MTg3NDA1RjA5MDc2Mzg3NDAxM0MKKzoxMDEwNzAwMEYwOTA3NjNBNzQwM0YwOTA3NjFDRjBFNDkwNzYxQkYwRDIKKzoxMDEwODAwMDkwN0ZFQUUwRjQ2MDJGOTA3NjFCRTBGRjc1RjAwQUE0RjEKKzoxMDEwOTAwMDI0QUFGNTgyRTQzNDc1RjU4M0UwRkU5MDdGRUFFMEZENTIKKzoxMDEwQTAwMEVFNkQ2MDEyOTA3NjFDRTBGRUVGQzM5RTUwMDg5MDc2QzUKKzoxMDEwQjAwMDFCRTAwNEYwODBEMTkwN0ZFREUwNjQwNjcwNTI5MDc2RTIKKzoxMDEwQzAwMDE4NzQwNkYwOTA3NjM4NzQwNEYwOTA3NjNBNzQwQUYwNEEKKzoxMDEwRDAwMDkwNzYxQ0YwOTA3NjFCNzQwM0YwOTA3RkVBRTBGNDYwNDkKKzoxMDEwRTAwMDJGOTA3NjFCRTBGRjc1RjAwQUE0MjRBQUY1ODJFNDM0NjEKKzoxMDEwRjAwMDc1RjU4M0UwRkU5MDdGRUFFMEZERUU2RDYwMTI5MDc2N0MKKzoxMDExMDAwMDFDRTBGRUVGQzM5RTUwMDg5MDc2MUJFMDA0RjA4MEQxRjcKKzoxMDExMTAwMEU0OTA3NjFFRjA5MDc2MUNFMEZGOTA3NjFCRTBGRTZGNjgKKzoxMDExMjAwMDcwMDg5MDdGQjRFMDQ0MDFGMDIyOTA3RkVCRTAxNDYwRkYKKzoxMDExMzAwMDEzMTQ3MDAyMjFCRjI0MDI2MDAyODE3NTkwN0ZCNEUwMTUKKzoxMDExNDAwMDQ0MDFGMDIyOTA3RkU5RTAyNDdGNzA2QjkwN0ZFQUUwMTkKKzoxMDExNTAwMEY0NzA0QTkwNzYzOEUwOTA3NjFCRjA5MDc2M0FFMEZGOTMKKzoxMDExNjAwMDkwNzYxQkUwRkRDMzlGNTAyQkVENzVGMDBBQTQyNEFCRDUKKzoxMDExNzAwMEY1ODJFNDM0NzVGNTgzRTBGRjkwNzYxRUUwRkQwNEYwMUYKKzoxMDExODAwMDc0MDAyREY1ODJFNDM0N0ZGNTgzRUZGMDkwNzYxQkUwNTgKKzoxMDExOTAwMDA0RjA4MEM3OTA3NjFFRTA5MDdGQjVGMDIyRUU3NUYwRTcKKzoxMDExQTAwMDBBQTQyNEFCRjU4MkU0MzQ3NUY1ODNFMDkwN0YwMEYwNjcKKzoxMDExQjAwMDkwN0ZCNTc0MDFGMDIyOTA3RkI0RTA0NDAxRjAyMjkwNUEKKzoxMDExQzAwMDdGRTlFMDI0N0U3MDAyNDE3RTE0NzAwMjYxMjMxNDcwNzYKKzoxMDExRDAwMDAyNjFDODI0MDM2MDAyODE2RDkwN0ZFQUUwRjQ3MDZEQzMKKzoxMDExRTAwMDkwNzYzOEUwOTA3NjFCRjA5MDc2M0FFMEZGOTA3NjFCOTAKKzoxMDExRjAwMEUwQzM5RjUwNEZFMEZGNzVGMDBBQTQyNEFDRjU4MkU0RjEKKzoxMDEyMDAwMDM0NzVGNTgzRTBGRTkwNzYxRUUwRkQwNEYwNzQwMDJENDkKKzoxMDEyMTAwMEY1ODJFNDM0N0ZGNTgzRUVGMEVGNzVGMDBBQTQyNEFEOTcKKzoxMDEyMjAwMEY1ODJFNDM0NzVGNTgzRTBGRjkwNzYxRUUwRkUwNEYwNkQKKzoxMDEyMzAwMDc0MDAyRUY1ODJFNDM0N0ZGNTgzRUZGMDkwNzYxQkUwQTYKKzoxMDEyNDAwMDA0RjA4MEE0OTA3NjFFRTA5MDdGQjVGMDIyOTA3NjFCOEIKKzoxMDEyNTAwMEUwRkY3NUYwMEFBNDI0QUNGNTgyRTQzNDc1RjU4M0UwNzAKKzoxMDEyNjAwMDkwN0YwMEYwRUY3NUYwMEFBNDI0QURGNTgyRTQzNDc1QTgKKzoxMDEyNzAwMEY1ODNFMDkwN0YwMUYwOTA3RkI1NzQwMkYwMjI5MDdGQkIKKzoxMDEyODAwMEVBRTBGNDcwNkQ5MDc2MzhFMDkwNzYxQkYwOTA3NjNBNTQKKzoxMDEyOTAwMEUwRkY5MDc2MUJFMEMzOUY1MDRGRTBGRjc1RjAwQUE0N0IKKzoxMDEyQTAwMDI0QUVGNTgyRTQzNDc1RjU4M0UwRkU5MDc2MUVFMEZEMTEKKzoxMDEyQjAwMDA0RjA3NDAwMkRGNTgyRTQzNDdGRjU4M0VFRjBFRjc1RDEKKzoxMDEyQzAwMEYwMEFBNDI0QUZGNTgyRTQzNDc1RjU4M0UwRkY5MDc2NEMKKzoxMDEyRDAwMDFFRTBGRTA0RjA3NDAwMkVGNTgyRTQzNDdGRjU4M0VGMDcKKzoxMDEyRTAwMEYwOTA3NjFCRTAwNEYwODBBNDkwNzYxRUUwOTA3RkI1MkQKKzoxMDEyRjAwMEYwMjI5MDc2MUJFMEZGNzVGMDBBQTQyNEFFRjU4MkU0OUMKKzoxMDEzMDAwMDM0NzVGNTgzRTA5MDdGMDBGMEVGNzVGMDBBQTQyNEFGMDgKKzoxMDEzMTAwMEY1ODJFNDM0NzVGNTgzRTA5MDdGMDFGMDkwN0ZCNTc0MzkKKzoxMDEzMjAwMDAyRjAyMjkwN0ZFQUUwRjQ3MDZEOTA3NjM4RTA5MDc2REIKKzoxMDEzMzAwMDFCRjA5MDc2M0FFMEZGOTA3NjFCRTBDMzlGNTA0RkUwQTEKKzoxMDEzNDAwMEZGNzVGMDBBQTQyNEIwRjU4MkU0MzQ3NUY1ODNFMEZFNUQKKzoxMDEzNTAwMDkwNzYxRUUwRkQwNEYwNzQwMDJERjU4MkU0MzQ3RkY1RjQKKzoxMDEzNjAwMDgzRUVGMEVGNzVGMDBBQTQyNEIxRjU4MkU0MzQ3NUY1NEMKKzoxMDEzNzAwMDgzRTBGRjkwNzYxRUUwRkUwNEYwNzQwMDJFRjU4MkU0MTgKKzoxMDEzODAwMDM0N0ZGNTgzRUZGMDkwNzYxQkUwMDRGMDgwQTQ5MDc2MzQKKzoxMDEzOTAwMDFFRTA5MDdGQjVGMDIyOTA3NjFCRTBGRjc1RjAwQUE0NjYKKzoxMDEzQTAwMDI0QjBGNTgyRTQzNDc1RjU4M0UwOTA3RjAwRjBFRjc1QUEKKzoxMDEzQjAwMEYwMEFBNDI0QjFGNTgyRTQzNDc1RjU4M0UwOTA3RjAxNEUKKzoxMDEzQzAwMEYwOTA3RkI1NzQwMkYwMjI5MDdGRUFFMEY0NzA2RDkwQTcKKzoxMDEzRDAwMDc2MzhFMDkwNzYxQkYwOTA3NjNBRTBGRjkwNzYxQkUwNEUKKzoxMDEzRTAwMEMzOUY1MDRGRTBGRjc1RjAwQUE0MjRCMkY1ODJFNDM0QTUKKzoxMDEzRjAwMDc1RjU4M0UwRkU5MDc2MUVFMEZEMDRGMDc0MDAyREY1OTcKKzoxMDE0MDAwMDgyRTQzNDdGRjU4M0VFRjBFRjc1RjAwQUE0MjRCM0Y1OUYKKzoxMDE0MTAwMDgyRTQzNDc1RjU4M0UwRkY5MDc2MUVFMEZFMDRGMDc0RkMKKzoxMDE0MjAwMDAwMkVGNTgyRTQzNDdGRjU4M0VGRjA5MDc2MUJFMDA0MjQKKzoxMDE0MzAwMEYwODBBNDkwNzYxRUUwOTA3RkI1RjAyMjkwNzYxQkUwQkQKKzoxMDE0NDAwMEZGNzVGMDBBQTQyNEIyRjU4MkU0MzQ3NUY1ODNFMDkwQzgKKzoxMDE0NTAwMDdGMDBGMEVGNzVGMDBBQTQyNEIzRjU4MkU0MzQ3NUY1NEIKKzoxMDE0NjAwMDgzRTA5MDdGMDFGMDkwN0ZCNTc0MDJGMDIyOTA3RkI0MEEKKzoxMDE0NzAwMEUwNDQwMUYwMjI5MDdGQjRFMDQ0MDFGMDIyOTA3RkI0NzgKKzowNTE0ODAwMEUwNDQwMUYwMjIzMAorOjEwMzg3NDAwRTQ5MDc2MjlGMDkwNzYyOUUwRkY3NUYwMEZBNDI0NDJCNQorOjEwMzg4NDAwRjU4MkU0MzQ3NUY1ODNFMEZFOTA3RkVDRTBGREVFNkRBNworOjEwMzg5NDAwNjAwRUVGQzM5NDA2NTAwODkwNzYyOUUwMDRGMDgwRDVCQQorOjEwMzhBNDAwRUZCNDA2MDg5MDdGQjRFMDQ0MDFGMDIyRUY3NUYwMEYwNgorOjEwMzhCNDAwQTQyNDQxRjU4MkU0MzQ3NUY1ODNFMDkwNzYyQUYwMjQ1QgorOjEwMzhDNDAwQkY3MDAyNDE0MTI0RTA3MDAyNDExMjI0MjE2MDAyNDE5MAorOjEwMzhENDAwM0E5MDdGRTlFMDI0RkU2MDdEMTQ3MDAyMjFCMjI0MDI1NAorOjEwMzhFNDAwNjAwMjQxMEExMjE3NTE5MDc2NDJFMEZDQTNFMEZEQTM2NgorOjEwMzhGNDAwRTBGRUEzRTBGRjkwNzYyOUUwNzVGMDBGQTQyNDQzRjVFMQorOjEwMzkwNDAwODJFNDM0NzVGNTgzMTIzN0JDOTA3NjE5RTBGRkI0MDE3NAorOjEwMzkxNDAwMTI5MDc2N0M3NDY3RjA5MDc2N0Q3NDA2RjA5MDc2N0VEMworOjEwMzkyNDAwNzQwQkYwRUZCNDAyMEZFNDkwNzY3Q0YwOTA3NjdERjBBNworOjEwMzkzNDAwOTA3NjdFNzQwQ0YwRUZCNDAzMEZFNDkwNzY3Q0YwOTBGNAorOjEwMzk0NDAwNzY3REYwOTA3NjdFNzQxOEYwOTA3NjFBNzQwMUYwMTJGOQorOjEwMzk1NDAwM0U4RjEyMTgwMDIyOTA3RUMyRTBGRkU0RkNGREZFRkJDNQorOjEwMzk2NDAwRkE3OTAxRjgxMjM3NDZDOEVDQzhDOUVEQzlDQUVFQ0FEQgorOjEwMzk3NDAwQ0JFRkNCOTA3RUMxRTBGRUU0RkNGRDJCRkJFQTNFRkFFQworOjEwMzk4NDAwRUQzOUY5RUMzOEY4OTA3RUMwRTBGRkU0RkVFQjJGRkY1MAorOjEwMzk5NDAwRUUzQUZFRUQzOUZERUMzOEZDOTA3NjI5RTA3NUYwMEYzNworOjEwMzlBNDAwQTQyNDQ3RjU4MkU0MzQ3NUY1ODMxMjM3QkMyMjkwN0U1MworOjEwMzlCNDAwQzJFMEZGRTRGQ0ZERkVGQkZBNzkwMUY4MTIzNzQ2QzhDOQorOjEwMzlDNDAwRUNDOEM5RURDOUNBRUVDQUNCRUZDQjkwN0VDMUUwRkUwQworOjEwMzlENDAwRTRGQ0ZEMkJGQkVBM0VGQUVEMzlGOUVDMzhGODkwN0U3NQorOjEwMzlFNDAwQzBFMEZGRTRGRUVCMkZGRkVFM0FGRUVEMzlGREVDMzhDQworOjEwMzlGNDAwRkM5MDc2MjlFMDc1RjAwRkE0MjQ0QkY1ODJFNDM0NzUyRAorOjEwM0EwNDAwRjU4MzEyMzdCQzIyOTA3RkI0RTA0NDAxRjAyMjkwN0YwQQorOjEwM0ExNDAwRTlFMDE0NzAxOTkwN0VDMEUwRkY5MDc2MjlFMDc1RjAxQgorOjEwM0EyNDAwMEZBNDI0NEZGNTgyRTQzNDc1RjU4M0VGRjAyMjkwN0ZFMAorOjBFM0EzNDAwQjRFMDQ0MDFGMDIyOTA3RkI0RTA0NDAxRjAyMjlGCis6MTAyQUQ2MDBFNDkwNzYyN0YwOTA3NjI3RTBGRjc1RjAwRkE0MjQ0MjY1Cis6MTAyQUU2MDBGNTgyRTQzNDc1RjU4M0UwRkU5MDdGRUNFMEZERUU2RDUzCis6MTAyQUY2MDA2MDBFRUZDMzk0MDY1MDA4OTA3NjI3RTAwNEYwODBENTY4Cis6MTAyQjA2MDBFRkI0MDYwODkwN0ZCNEUwNDQwMUYwMjJFRjc1RjAwRkIxCis6MTAyQjE2MDBBNDI0NDFGNTgyRTQzNDc1RjU4M0UwOTA3NjI4RjAyNDA4Cis6MTAyQjI2MDA5RjcwMDJBMTc0MjQyMTYwMDJBMUExOTA3RkU5RTAyNDk0Cis6MTAyQjM2MDA3RTcwMDI2MUZDMTQ3MDAyODFCNTI0MDI2MDAyQTE2Q0YxCis6MTAyQjQ2MDBFRjc1RjAwRkE0MjQ0M0Y1ODJFNDM0NzVGNTgzRTBGQ0I5Cis6MTAyQjU2MDBBM0UwRkRBM0UwRkVBM0UwRkY3QjQ0N0FBQzc5MDA3ODE2Cis6MTAyQjY2MDAwMEMzMTIzN0FCNzAxMzkwN0YwMDc0NDRGMEEzNzRBQ0FCCis6MTAyQjc2MDBGMEU0QTNGMDkwN0ZCNTc0MDNGMDkwNzYyN0UwNzVGMDRCCis6MTAyQjg2MDAwRkE0MjQ0M0Y1ODJFNDM0NzVGNTgzRTBGQ0EzRTBGRDRECis6MTAyQjk2MDBBM0UwRkVBM0UwRkY3QjgwN0FCQjc5MDA3ODAwQzMxMjM2Cis6MTAyQkE2MDAzN0FCNzAxMzkwN0YwMDc0ODBGMEEzNzRCQkYwRTRBMzdFCis6MTAyQkI2MDBGMDkwN0ZCNTc0MDNGMDkwNzYyN0UwNzVGMDBGQTQyNEFCCis6MTAyQkM2MDA0M0Y1ODJFNDM0NzVGNTgzRTBGQ0EzRTBGREEzRTBGRTYzCis6MTAyQkQ2MDBBM0UwRkY3QjAwN0E3Nzc5MDE3ODAwQzMxMjM3QUI2MEY4Cis6MTAyQkU2MDAwMkExQTg5MDdGMDBGMEEzNzQ3N0YwQTM3NDAxRjA5MDdGCis6MTAyQkY2MDA3RkI1NzQwM0YwMjI5MDc2MjdFMDc1RjAwRkE0MjQ0NzgyCis6MTAyQzA2MDBGNTgyRTQzNDc1RjU4M0UwRkNBM0UwRkRBM0UwRkVBM0MyCis6MTAyQzE2MDBFMEZGN0I0NDdBQUM3OTAwNzgwMEMzMTIzN0FCNzAxM0JGCis6MTAyQzI2MDA5MDdGMDA3NDQ0RjBBMzc0QUNGMEU0QTNGMDkwN0ZCNUY5Cis6MTAyQzM2MDA3NDAzRjA5MDc2MjdFMDc1RjAwRkE0MjQ0N0Y1ODJFNDNDCis6MTAyQzQ2MDAzNDc1RjU4M0UwRkNBM0UwRkRBM0UwRkVBM0UwRkY3QjgzCis6MTAyQzU2MDA4MDdBQkI3OTAwNzgwMEMzMTIzN0FCNzAxMzkwN0YwMDdGCis6MTAyQzY2MDA3NDgwRjBBMzc0QkJGMEU0QTNGMDkwN0ZCNTc0MDNGMDE2Cis6MTAyQzc2MDA5MDc2MjdFMDc1RjAwRkE0MjQ0N0Y1ODJFNDM0NzVGNUM1Cis6MTAyQzg2MDA4M0UwRkNBM0UwRkRBM0UwRkVBM0UwRkY3QjAwN0E3N0YwCis6MTAyQzk2MDA3OTAxNzgwMEMzMTIzN0FCNjAwMkExQTg5MDdGMDBGMERCCis6MTAyQ0E2MDBBMzc0NzdGMEEzNzQwMUYwOTA3RkI1NzQwM0YwMjI5MEJCCis6MTAyQ0I2MDA3NjI3RTA3NUYwMEZBNDI0NEJGNTgyRTQzNDc1RjU4MzhFCis6MTAyQ0M2MDBFMEZDQTNFMEZEQTNFMEZFQTNFMEZGN0I0NDdBQUM3OTQxCis6MTAyQ0Q2MDAwMDc4MDBDMzEyMzdBQjcwMTM5MDdGMDA3NDQ0RjBBM0UyCis6MTAyQ0U2MDA3NEFDRjBFNEEzRjA5MDdGQjU3NDAzRjA5MDc2MjdFMDFGCis6MTAyQ0Y2MDA3NUYwMEZBNDI0NEJGNTgyRTQzNDc1RjU4M0UwRkNBMzRDCis6MTAyRDA2MDBFMEZEQTNFMEZFQTNFMEZGN0I4MDdBQkI3OTAwNzgwMEJDCis6MTAyRDE2MDBDMzEyMzdBQjcwMTM5MDdGMDA3NDgwRjBBMzc0QkJGMEJFCis6MTAyRDI2MDBFNEEzRjA5MDdGQjU3NDAzRjA5MDc2MjdFMDc1RjAwRjdBCis6MTAyRDM2MDBBNDI0NEJGNTgyRTQzNDc1RjU4M0UwRkNBM0UwRkRBM0ZGCis6MTAyRDQ2MDBFMEZFQTNFMEZGN0IwMDdBNzc3OTAxNzgwMEMzMTIzN0IzCis6MTAyRDU2MDBBQjcwNEY5MDdGMDBGMEEzNzQ3N0YwQTM3NDAxRjA5MEVFCis6MTAyRDY2MDA3RkI1NzQwM0YwMjI5MDdGQjRFMDQ0MDFGMDIyOTA3Rjk3Cis6MTAyRDc2MDBFOUUwMjQ3RjcwMUU5MDc2MjdFMDc1RjAwRkE0MjQ0RkJCCis6MTAyRDg2MDBGNTgyRTQzNDc1RjU4M0UwOTA3RjAwRjA5MDdGQjU3NEFBCis6MTAyRDk2MDAwMUYwODAwNzkwN0ZCNEUwNDQwMUYwOTA3RkI0RTA0NEY2Cis6MDMyREE2MDAwMUYwMjIxNworOjEwNEIxQjAwOTA3RkVCRTAxNDcwMTQ5MDdGRTlFMDI0N0Y3MDA0MTIxNworOjEwNEIyQjAwNDg1QTIyOTA3RkI0RTA0NDAxRjAyMjkwN0ZCNEUwNDRENQorOjAzNEIzQjAwMDFGMDIyNjQKKzoxMDRCM0UwMDkwN0ZFQkUwMTQ3MDEzOTA3RkU5RTAxNDcwMDQxMjQ5M0IKKzoxMDRCNEUwMEFEMjI5MDdGQjRFMDQ0MDFGMDIyOTA3RkI0RTA0NDAxQTYKKzowMjRCNUUwMEYwMjI0MworOjEwNDg1QTAwRTQ5MDc2MjZGMDkwNzYyNkUwRkY3NUYwMDNBNDI0MzRERgorOjEwNDg2QTAwRjU4MkU0MzQ3NUY1ODNFMEZFOTA3RkVDRTBGREVFNkRCMQorOjEwNDg3QTAwNjAwRUVGQzM5NDA0NTAwODkwNzYyNkUwMDRGMDgwRDVDOQorOjEwNDg4QTAwRUZCNDA0MDg5MDdGQjRFMDQ0MDFGMDIyRUY3NUYwMDMxRQorOjEwNDg5QTAwQTQyNDMyRjU4MkU0MzQ3NUY1ODNFMDkwN0YwMEYwOTAyOQorOjA2NDhBQTAwN0ZCNTc0MDFGMDIyNEQKKzoxMDQ5QUQwMEU0OTA3NjI1RjA5MDc2MjVFMEZGNzVGMDAzQTQyNDM0OEQKKzoxMDQ5QkQwMEY1ODJFNDM0NzVGNTgzRTBGRTkwN0ZFQ0UwRkRFRTZENUQKKzoxMDQ5Q0QwMDYwMEVFRkMzOTQwNDUwMDg5MDc2MjVFMDA0RjA4MEQ1NzYKKzoxMDQ5REQwMEVGQjQwNDA4OTA3RkI0RTA0NDAxRjAyMjkwN0VDMEUwNzMKKzoxMDQ5RUQwMEZFRUY3NUYwMDNBNDI0MzJGNTgyRTQzNDc1RjU4M0VFMDEKKzowMjQ5RkQwMEYwMjJBNgorOjAzMDAwMzAwMDIwRkZERUMKKzowMzBGRkQwMEMyODkzMjc0Cis6MDMwMDEzMDAwMjE3RkRENAorOjAzMTdGRDAwQzI4QjMyNkEKKzowMzAwNEIwMDAyNEQ4RkQ0Cis6MDQ0RDhGMDA1MzkxREYzMjJCCis6MDMwMDUzMDAwMjREODNEOAorOjA2NEQ4MzAwNTM5MUJGRDIyRDMyNTYKKzowMzAwNUIwMDAyNEQ4OUNBCis6MDY0RDg5MDA1MzkxN0ZEMjJDMzI5MQorOjAzMDA2MzAwMDI0RDkzQjgKKzowNDREOTMwMDUzRDhGNzMyQzgKKzowMzAwMEIwMDAyNEQ5QjA4Cis6MDM0RDlCMDBDMjhEMzI5NAorOjAzMDAxQjAwMDI0RDlFRjUKKzowMzREOUUwMEMyOEYzMjhGCis6MDMwMDIzMDAwMjRENzUxNgorOjA3NEQ3NTAwNTM5OEZFNTM5OEZEMzIzNAorOjAzMDAzQjAwMDI0RDdDRjcKKzowNzREN0MwMDUzQzBGRTUzQzBGRDMyREQKKzowMzAwMkIwMDAyNDZGNzkzCis6MTA0NkY3MDBDMEUwQzBGMEMwODNDMDgyQzBEMEU4QzBFMEU5QzBFMDNECis6MTA0NzA3MDBFQUMwRTBFQkMwRTBFQ0MwRTBFREMwRTBFRUMwRTBFRkY3Cis6MTA0NzE3MDBDMEUwQzJDQUMyQ0Y5MDdGOThFMDQ0MDFGMDMwMkUwM0I4Cis6MTA0NzI3MDAxMjE0QTY5MDdGOThFMDU0RkVGMDUzQThGQTEyMTY2MTZGCis6MTA0NzM3MDBEMEUwRkZEMEUwRkVEMEUwRkREMEUwRkNEMEUwRkJEMDQxCis6MTA0NzQ3MDBFMEZBRDBFMEY5RDBFMEY4RDBEMEQwODJEMDgzRDBGMDMyCis6MDM0NzU3MDBEMEUwMzI3RAorOjEwNDdCNDAwRTQ5MDc2OUJGMDkwNzY5QkUwRkYwNEYwRUY2MDA4RTBENQorOjEwNDdDNDAwMjQwOEY4RTRGNjgwRUU5MDc2OTZFMDU0RkJGMDU0Rjc3MworOjEwNDdENDAwRjA5MDgwMDNGMEU0RjUxOEQyMzVGNTBFRjUxMEQyMzZEQQorOjEwNDdFNDAwNzUxMjExNzUxMzIyQzIzN0MyMzlDMjM4RjUxNkY1MTQ4MQorOjBCNDdGNDAwRjUxQUY1MERDMjNCQzIzQ0MyM0QyMjhECis6MTAzMDAwMDA5MDdGQjZFMDIwRTEwMkMyM0REMjM2MjAzNjAyNDE2RTBBCis6MTAzMDEwMDAzMDNEMDI0MTZFOTA4MDA3RTA2MDA0RDIzNjgwMDJDMkVCCis6MTAzMDIwMDAzNjIwMzYwMjQxMkVEMjM1RTRGNTFBOTA4MDA0RTBGNUMwCis6MTAzMDMwMDAxOTc0MDgyNTBFRjhBNjE5ODUxOTE4RTUxODIwRTcwNDUzCis6MTAzMDQwMDBEMjM4ODAwMkMyMzgzMDM4MDIyMUQ0RTRGNTE2RTUxOUFFCis6MTAzMDUwMDBCNEYwMENEMjM5NzUwODA0NzUwOUYwMDUwRTgwMDIwNTJDCis6MTAzMDYwMDAxNkU1MTk2NEY3NzAzREMyMzlFNTBFMjRGRTYwMTcxNEE5Cis6MTAzMDcwMDA2MDIyMjQwMzcwMjk3NTA4MDU3NTA5RjdFNEY1MEFGNTNGCis6MTAzMDgwMDAwQjc1MEUwNDgwMjA3NTA4MDY3NTBBRjdFNEY1MEI3NUJDCis6MTAzMDkwMDAwRTA0ODAxMjc1MDgwNzc1MEJGNzc1MEUwNDgwMDcxMjcxCis6MTAzMEEwMDA0OEYzODAwMjA1MTZFNTE5NTRGODY0Rjg3MDNCQzIzNTAwCis6MTAzMEIwMDBFNTE5MjQwNzYwMEMyNEZDNjAwODI0MDUyNEY4NTAwNjU4Cis6MTAzMEMwMDA4MDA4RDIzQTgwMDZDMjNBODAwMkQyM0E3NTFBMDEyMEFDCis6MTAzMEQwMDAzQTE5OTA3RTgwNzQwRkYwQTNFNTE5RjBFNEEzRjBBM0YxCis6MTAzMEUwMDBGMDkwN0ZCNzc0MDRGMDgwMDIwNTE2MjAzOTZERTUxOTYxCis6MTAzMEYwMDA2NEY3NjA2N0U1MUE3MDYzRTUxODU0RjA2NEYwNzA1OTdFCis6MTAzMTAwMDA4NTE4MTlGNTBFRTUxOTI0MEY2MDFCMjRGRTYwMTcyNDlECis6MTAzMTEwMDBGRDYwMjIxNDYwMUYyNDA1NzAyRjc1MDgwMzA1MEU4NUJECis6MTAzMTIwMDAxODA5RDIzNzgwMjg3NTA4MDIwNTBFODUxODA5NzUxNDBDCis6MTAzMTMwMDAwMUQyMzc4MDE5NzUwODA1MDUwRTg1MTgwOUU0RjUwQUNFCis6MTAzMTQwMDBGNTBCNzUwRTAzRDIzNzgwMDUxMjQ4RjNDMjM1MzAzNUMyCis6MTAzMTUwMDAwQTg1MDgxMzg1MTgxMjgwMDIwNTE2ODUxODE5RTUxNkM4Cis6MTAzMTYwMDA2NDA0NzA2MkY1MEVFNTE5NTRGMEY1MTlGNTE1ODUxODJCCis6MTAzMTcwMDAxOUU1MTUyNDcwNjAxODI0RjA2MDE0MjRGMDYwMTAyNDAwCis6MTAzMTgwMDBGMDYwMUUyNEYwNjAxQTI0RjA2MDA0MjQ2MDcwMjdFNUNCCis6MTAzMTkwMDAxNUM0NTQwRkY1MTlGNTA4MDUwRTg1MTgwOUQyMzc4MEE2Cis6MTAzMUEwMDAxQUU1MTVDNDU0MEZGNTE5RjUwODA1MEU4NTE4MDk3NUFCCis6MTAzMUIwMDAxNDAxRDIzNzgwMDUxMjQ4RjNDMjM1MzAzNTBBODUxOTFCCis6MTAzMUMwMDAxMzg1MTgxMjgwMDIwNTE2RTUxNkQzOTQwNTQwNTcxMjkwCis6MTAzMUQwMDA0OEYzODA1MjMwMzkxN0U1MEU3MDBBODUwODA5NzUwOEUyCis6MTAzMUUwMDAwNDA1MEU4MDQxNzQwODI1MEVGOEE2MTk4MDM4MjAzNzkyCis6MTAzMUYwMDAyQUU1MEVCNDAxMEY4NTA4MEE4NTA5MEI4NTEzMDg4NTk5Cis6MTAzMjAwMDAxMjA5NzUwRTA0RTUxNEI0MDExQzg1MDgwQUU0RjUwQkQ3Cis6MTAzMjEwMDA4NTEzMDg4NTEyMDk3NTBFMDQ4MDBCRTUxNEI0MDEwNkE4Cis6MTAzMjIwMDBFNEY1MEI3NTBFMDRFNEY1MUEzMDM1MDIwNTBFRTUwRUQzCis6MTAzMjMwMDBEMzk0MDM1MDAyMDEwQkMyMzdFNEY1MEVGNTEwQzIzNkU5Cis6MTAzMjQwMDBEMjNERjUxNDc0MDgyNTEwRjhFNkZGNzQ4MDI1MTBGNUJBCis6MTAzMjUwMDA4MkU0MzQ3RUY1ODNFRkYwNzQwODI1MTBGOEU0RjYwNTc3Cis6MEYzMjYwMDAxMEU1MTBCNDA0REU5MDdGQjc3NDA0RjAwMTBCMjI2OAorOjBDNDhGMzAwQzIzN0U0RjUwRUY1MTBDMjM2RjUxNDIyQjEKKzoxMDQwMDAwMEU1MTFEMzk0MDA1MDAyMjEwNjkwNzY4OUUwQzM5NDA4MEMKKzoxMDQwMTAwMDQwMDIyMTA2NzQ0MDI1MEZGNTgyRTQzNDdFRjU4M0UwRUEKKzoxMDQwMjAwMEY1MTdFNTBENjAwRTkwODAwNUU1MTdGMDkwNzY4OUUwQjQKKzoxMDQwMzAwMDA0RjAwMURBRTUxNzEyMzdGOTQwQzEwMjQwNjcwNTQwODQKKzoxMDQwNDAwMDdBMDY0MDk4MDc0MEMxMEM0MEMxMEQ0MEM3MEY0MENCRDUKKzoxMDQwNTAwMEY2NDBDQkY4NDBDQkZBNDBDQkZCNDBDQkZDNDBDQkZFNEMKKzoxMDQwNjAwMDQwQ0JGRjAwMDA0MERBOTA3RTQxRTA5MDgwMDVGMDkwNjgKKzoxMDQwNzAwMDc2ODlFMDA0RjA3NTExMDE4MDYwOTA3RTQxRTA5MDgwQzcKKzoxMDQwODAwMDA1RjA5MDdFNDJFMDkwODAwNUYwOTA3Njg5RTAwNEYwQTMKKzoxMDQwOTAwMEUwMDRGMDc1MTEwMTgwNDI5MDdFNDFFMDkwODAwNUYwQ0YKKzoxMDQwQTAwMDkwN0U0MkUwOTA4MDA1RjA5MDdFNDNFMDkwODAwNUYwQTUKKzoxMDQwQjAwMDkwNzY4OUUwMDRGMEUwMDRGMEUwMDRGMDc1MTEwMTgwRUUKKzoxMDQwQzAwMDE5RDIzQkQyM0M4MDEzRDIzQjgwMEY5MDgwMDVFNTE3N0MKKzoxMDQwRDAwMEYwOTA3Njg5RTAwNEYwNzUxMTAxMjAzQjA0MDUwRDgwMTUKKzoxMDQwRTAwMDFGMzAzQzFDOTA3RTQxRTA5MDgwMDVGMDkwN0U0MkUwQzUKKzoxMDQwRjAwMDkwODAwNUYwOTA3Njg5RTAwNEYwRTAwNEYwNzUxMTAxRkQKKzoxMDQxMDAwMDA1MEYxNTExMDEwMEU1MTE3MDEwQzIzM0Y1MERGNTBGMDMKKzowQjQxMTAwMDkwN0ZDNzc0MDRGMEMyM0JDMjNDMjI0OQorOjEwNEJCQjAwOTA3RkQ2RTAzMEU3MTJFMDQ0MDFGMDdGMTQ3RTAwMTJDNAorOjBBNEJDQjAwNEQyRjkwN0ZENkUwNTRGRUYwMjIzQgorOjEwNEFGNjAwOTA3RkQ2RTA1NEZCRjBFMDQ0MDhGMDMwNDIwNEUwNDRGNgorOjEwNEIwNjAwMDJGMDdGREM3RTA1MTI0RDJGOTA3RkQ2RTA1NEY3RjA0MQorOjA1NEIxNjAwRTA0NDA0RjAyMjYwCis6MTA0RDJGMDA4RTM1OEYzNkU1MzYxNTM2QUUzNTcwMDIxNTM1NEU2MDM5Cis6MDc0RDNGMDAwNTEyMTQ4NTgwRUUyMjJECis6MTA0OUZGMDBFNEZFNzUxREZGNzUxRTA1NzUxRjEyQUIxREFBMUVBOUJFCis6MTA0QTBGMDAxRjkwMDAwMTEyMzZBQjY0MDI3MDJGQ0RFRUNEMEVFRDZDCis6MTA0QTFGMDA2RjcwMDEyMjkwMDAwMjEyMzcwRTg1RjAxQkY1MUM2Mjk5Cis6MTA0QTJGMDAxQkU1MUI2MjFDRTUxQzYyMUIyOUZERTUxQjNBQzlFRDRBCis6MTA0QTNGMDBDOTc1MURGRkY1MUU4OTFGODBDMTdCMDA3QTAwNzkwMEEzCis6MDE0QTRGMDAyMjQ0Cis6MDQxNzk0MDA4RDI5OEIyQUU2Cis6MTAxNzk4MDAxMjQ5RkZFQTQ5NjA1NzEyMzY5MjdFMDAyOUZGRUUzQTU1Cis6MTAxN0E4MDBDOUVGQzk3NTJCRkZGNTJDODkyREFCMkJBQTJDQTkyREI4Cis6MTAxN0I4MDA5MDAwMDExMjM2QUJGRjY0MDQ2MDA1RUY2NDA1NzAyRURCCis6MTAxN0M4MDBFRkI0MDQxNTkwMDAwMjEyMzZBQjY1Mjk3MDBCOTAwMDM3Cis6MTAxN0Q4MDAwMzEyMzZBQjY1MkE3MDAxMjIxMjM2OTI3RTAwMjlGRjY5Cis6MTAxN0U4MDBFRTNBQzlFRkM5NzUyQkZGRjUyQzg5MkQ4MEJDN0IwMDFCCis6MDQxN0Y4MDA3QTAwNzkwMEZBCis6MDExN0ZDMDAyMkNBCis6MDI0OEIwMDA4RjJFNDkKKzoxMDQ4QjIwMEU0RjUyRjc1MzBGRjc1MzEwNjc1MzJCRUFCMzBBQTMxODMKKzoxMDQ4QzIwMEE5MzI5MDAwMDExMjM2QUJCNDAzMUZBRjJGMDUyRkVGQjAKKzoxMDQ4RDIwMDY1MkU3MDAxMjIxMjM2OTI3RTAwMjlGRkVFM0FDOUVGNTAKKzoxMDQ4RTIwMEM5NzUzMEZGRjUzMTg5MzI4MEQyN0IwMDdBMDA3OTAwQjgKKzowMTQ4RjIwMDIyQTMKKzoxMDA1MDAwMDEyMDExMDAxMDAwMDAwNDA2QTA4MTEwMTAwMDEwMTAyRkYKKzoxMDA1MTAwMDAwMDEwOTAyQUMwMTAzMDEwMDgwMzIwOTA0MDAwMDAwNUYKKzoxMDA1MjAwMDAxMDEwMDAwMEEyNDAxMDAwMTU2MDAwMjAxMDIwQzI0MEUKKzoxMDA1MzAwMDAyMDEwMTAxMDAwMjAwMDAwMDAwMEQyNDA2MDUwMTAyNzUKKzoxMDA1NDAwMDAzMDAwMDAwMDAwMDAwMDkyNDAzMDIwNDAzMDAwNTAwNkEKKzoxMDA1NTAwMDBDMjQwMjAzMDUwMjAwMDYwMDAwMDAwMDE1MjQwNjA2MTQKKzoxMDA1NjAwMDAzMDIwMDAwMDMwMDAzMDAwMzAwMDMwMDAzMDAwMzAwNzQKKzoxMDA1NzAwMDAwMDkyNDAzMDQwMTAxMDAwNjAwMDkwNDAxMDAwMDAxMzAKKzoxMDA1ODAwMDAyMDAwMDA5MDQwMTAxMDIwMTAyMDAwMDA3MjQwMTAxMjgKKzoxMDA1OTAwMDAwMDEwMDExMjQwMjAxMDIwMjEwMDM0NEFDMDA4MEJCRTAKKzoxMDA1QTAwMDAwMDA3NzAxMDkwNTBBMDU4NDAxMDEwMDhGMDcyNTAxNzQKKzoxMDA1QjAwMDAxMDAwMDAwMDkwNThGMDEwMzAwMDEwNTAwMDkwNDAxODUKKzoxMDA1QzAwMDAyMDIwMTAyMDAwMDA3MjQwMTAxMDAwMTAwMTEyNDAyQkYKKzoxMDA1RDAwMDAxMDIwMzE4MDM0NEFDMDA4MEJCMDAwMDc3MDEwOTA1NDkKKzoxMDA1RTAwMDBBMDU0NjAyMDEwMDhGMDcyNTAxMDEwMDAwMDAwOTA1RTgKKzoxMDA1RjAwMDhGMDEwMzAwMDEwNTAwMDkwNDAyMDAwMDAxMDIwMDAwNTAKKzoxMDA2MDAwMDA5MDQwMjAxMDEwMTAyMDAwMDA3MjQwMTA0MDAwMTAwQTUKKzoxMDA2MTAwMDBFMjQwMjAxMDYwMjEwMDI0NEFDMDA4MEJCMDAwOTA1NTIKKzoxMDA2MjAwMDhDMDU0QzAyMDEwMDAwMDcyNTAxMDAwMjAwMDAwOTA0QUUKKzoxMDA2MzAwMDAyMDIwMTAxMDIwMDAwMDcyNDAxMDQwMDAxMDAwRTI0NEYKKzoxMDA2NDAwMDAyMDEwNjAzMTgwMjQ0QUMwMDgwQkIwMDA5MDU4QzA1QkEKKzoxMDA2NTAwMDcyMDMwMTAwMDAwNzI1MDEwMDAyMDAwMDA5MDQwMjAzRTMKKzoxMDA2NjAwMDAxMDEwMjAwMDAwNzI0MDEwNDAwMDEwMDExMjQwMjAxMUQKKzoxMDA2NzAwMDAyMDIxMDAzNDRBQzAwODBCQjAwMDA3NzAxMDkwNThDMjYKKzoxMDA2ODAwMDA1ODQwMTAxMDAwMDA3MjUwMTAwMDIwMDAwMDkwNDAyQTEKKzoxMDA2OTAwMDA0MDEwMTAyMDAwMDA3MjQwMTA0MDAwMTAwMTEyNDAyRUEKKzoxMDA2QTAwMDAxMDIwMzE4MDM0NEFDMDA4MEJCMDAwMDc3MDEwOTA1NzgKKzoxMDA2QjAwMDhDMDU0NjAyMDEwMDAwMDcyNTAxMDAwMjAwMDAwNDAzMkEKKzoxMDA2QzAwMDA5MDQxODAzNDUwMDZEMDA2MTAwNjcwMDY5MDA2MzAwQkMKKzoxMDA2RDAwMDIwMDA0NzAwNkQwMDYyMDA0ODAwMjIwMzQ1MDA2RDAwQzUKKzoxMDA2RTAwMDYxMDA2NzAwNjkwMDYzMDAyMDAwNDUwMDREMDA0OTAwN0IKKzoxMDA2RjAwMDIwMDAzNjAwN0MwMDMyMDAyMDAwNkQwMDJBMDM0MzAwRjkKKzoxMDA3MDAwMDZGMDA2RTAwNjYwMDY5MDA2NzAwNzUwMDcyMDA2MTAwOEUKKzoxMDA3MTAwMDc0MDA2OTAwNkYwMDZFMDAyMDAwNTMwMDc0MDA3MjAwQzYKKzoxMDA3MjAwMDY5MDA2RTAwNjcwMDIyMDM0OTAwNkUwMDc0MDA2NTAwRDYKKzoxMDA3MzAwMDcyMDA2NjAwNjEwMDYzMDA2NTAwMjAwMDUzMDA3NDAwRDEKKzowQTA3NDAwMDcyMDA2OTAwNkUwMDY3MDAwMDAwRkYKKzoxMDE0ODUwMDc0MDBGNTg2OTBGREE1N0MwNUEzRTU4MjQ1ODM3MEY5N0EKKzowMTE0OTUwMDIyMzQKKzoxMDE0OTYwMDkwN0ZENkUwNDQ4MEYwNDM4NzAxMDAwMDAwMDAwMDIyRTAKKzoxMDE0QTYwMEMwRDBDMEUwOEZFMEMwRTA4RUUwQzBFMDhERTBDMEUwREMKKzoxMDE0QjYwMDhDRTBDMEUwQzA4MkMwODMwNTg2QzA4NEMwODU3RDAwMDQKKzoxMDE0QzYwMDkwN0ZFMzc0N0JGMEEzNzQ4MEYwN0MxMTkwN0Y5OUUwQTkKKzoxMDE0RDYwMDU0NDBEQzAzMDIxNEYzQjQwMDEzOTA3RkUyNzQ0MEYwMkUKKzoxMDE0RTYwMDkwN0ZFNUYwOTA3RkUyNzQwMEYwMDIxNEQyOTA3NjkwM0YKKzoxMDE0RjYwMEUwQjQwMTEyOTA3NjhGRTAyREZEOTA3RkUyNzQ4MEYwQ0IKKzoxMDE1MDYwMDkwN0Y2QzAyMTU1N0I0MDIxMjkwNzY4RkUwMkRGRDkwRjUKKzoxMDE1MTYwMDdGRTI3NDgwRjA5MDdGNkMwMjE1OTZCNDAzMTI5MDc2ODkKKzoxMDE1MjYwMDhGRTAyREZEOTA3RkUyNzQ4MEYwOTA3RjZDMDIxNUUxRDQKKzoxMDE1MzYwMEI0MDQxMjkwNzY4RkUwMkRGRDkwN0ZFMjc0ODBGMDkwRDcKKzoxMDE1NDYwMDdGNkMwMjE2MTA5MDdGRTI3NDgwRjA5MDdGNkMwMjE2MUEKKzoxMDE1NTYwMDQwRjBGMEYwRjBGMEYwRjBGMEYwRjBGMEYwRERGMjdEQjkKKzoxMDE1NjYwMDAyMDU4NjkwN0ZFMjc0MDBGMDkwN0Y5QkUwNTQwNEI0RkQKKzoxMDE1NzYwMDAwMDUwNTg2MDIxNjQwOTA3RkUyNzQ4MEYwMDU4NkYwMkQKKzoxMDE1ODYwMEYwRjBGMEYwRjBGMEYwRjBGMEYwRjBEREQ0MDIxNjQwRkMKKzoxMDE1OTYwMEYwRjBGMEYwRjBGMEYwRjBGMEYwRjBGMEYwRjBGMEYwNDUKKzoxMDE1QTYwMEYwRjBEREVDN0QwMjA1ODY5MDdGRTI3NDAwRjA5MDdGMUUKKzoxMDE1QjYwMDlCRTA1NDA0QjQwMDA1MDU4NjAyMTY0MDkwN0ZFMjc0NTEKKzoxMDE1QzYwMDgwRjAwNTg2RjBGMEYwRjBGMEYwRjBGMEYwRjBGMEYwREEKKzowNjE1RDYwMEYwRjBGMEYwRjBGMDZGCis6MTAxNURDMDBERENFMDIxNjQwRjBGMEYwRjBEREZBN0QwMjA1ODY5MENCCis6MTAxNUVDMDA3RkUyNzQwMEYwOTA3RjlCRTA1NDA0QjQwMDA1MDU4NjA0Cis6MTAxNUZDMDAwMjE2NDA5MDdGRTI3NDgwRjAwNTg2RjBGMEYwRjBERDhBCis6MTAxNjBDMDBEQzAyMTY0MEYwRjBGMEYwRjBGMERERjg3RDAyMDU4NjFCCis6MTAxNjFDMDA5MDdGRTI3NDAwRjA5MDdGOUJFMDU0MDRCNDAwMDUwNUM5Cis6MTAxNjJDMDA4NjAyMTY0MDkwN0ZFMjc0ODBGMDA1ODZGMEYwRjBGMEIwCis6MTAxNjNDMDBGMEYwREREQTkwN0ZFMjc0MDBGMEQwODVEMDg0MDU4NjdFCis6MTAxNjRDMDBEMDgzRDA4MkQwRTBGQ0QwRTBGREQwRTBGRUQwRTBGRjMzCis6MDUxNjVDMDBEMEUwRDBEMDIyMTcKKzoxMDE2NjEwMEMwRDBDMEUwQzA4MkMwODM5MDc2N0NFMDkwN0Y2RkYwRjQKKzoxMDE2NzEwMDkwNzY3REUwOTA3RjZGRjA5MDc2N0VFMDkwN0Y2RkYwQzYKKzowOTE2ODEwMEQwODNEMDgyRDBFMEQwRDAyMjQ5Cis6MTAxNjhBMDBDMEQwQzBFMDhGRTBDMEUwOEVFMEMwRTBDMDgyQzA4MzdFCis6MTAxNjlBMDAwNTg2QzA4NEMwODU5MDc2ODdFMEZGQkYwMDAzMDIxN0U1Cis6MTAxNkFBMDAwMTkwN0Y5NkUwNDQ4MEYwOTA3RkUyNzQ4MEYwOTA3RjEyCis6MTAxNkJBMDA2MkUwMDU4NjkwN0ZFMjc0MDBGMDkwN0Y5NkUwNTQ3RkE2Cis6MTAxNkNBMDBGMDkwN0ZFMjc0ODBGMDkwNzY4RUUwQjQwMTA1MDU4NjkyCis6MTAxNkRBMDAwMjE2RjZCNDAyMDUwNTg2MDIxNkVCMDU4NjAyMTZGQjBCCis6MTAxNkVBMDBFMEUwRTBFMEUwRTBERkY4MDIxNkZCRTBFMEUwRTBERjY3Cis6MTAxNkZBMDBGQTkwN0ZFMjc0MDBGMEQwODVEMDg0MDU4NkQwODNEMDNBCis6MEMxNzBBMDA4MkQwRTBGRUQwRTBGRkQwRTBEMEQwMjI4MgorOjEwMTcxNjAwQzA4MkMwODNDMEUwRThDMEUwNzhEMUU4MTRGODcwRkI2RQorOjBBMTcyNjAwRDBFMEY4RDBFMEQwODNEMDgyMjI5QQorOjEwMENBNTAwNDE3MjAxMDE0NTcyMDUwMDAyQzkwMDAwNDU3MjBBMDA0MgorOjEwMENCNTAwMDEwMjAzMDQ0RDcyMEZEMTAwRDEwMDAwMDAwMDAwMDBCNQorOjEwMENDNTAwMjgyODA5MDA0RDcyMUMwMTAwMDEwMjAzMDQwNTA2MDdDRQorOjEwMENENTAwMDgwOTBBMEI0MTcyMkUyMjQxNzIyRjIzNDE3MjMwMjBERQorOjEwMENFNTAwNDE3MjMxMjE2MkQyNzIzQTAwMDAwMDAwMDAwMDAwMDAxQQorOjEwMENGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwMEQwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwMEQxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwMEQyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQorOjEwMEQzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwMEQ0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwMEQ1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwMEQ2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwMEQ3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAxMDEwMTAxMDE2OAorOjEwMEQ4NTAwMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDE0RQorOjEwMEQ5NTAwMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEzRQorOjEwMERBNTAwMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEyRQorOjEwMERCNTAwMDEwMTAxMDEwMTAxMDEwMTAyMDIwMjAyMDIwMjAyMDIxNgorOjEwMERDNTAwMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDJGRQorOjEwMERENTAwMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDJFRQorOjEwMERFNTAwMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDJERQorOjEwMERGNTAwMDIwMjAyMDIwMjAzMDMwMzAzMDMwMzAzMDMwMzAzMDNDMworOjEwMEUwNTAwMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDNBRAorOjEwMEUxNTAwMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDM5RAorOjEwMEUyNTAwMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDM4RAorOjEwMEUzNTAwMDMwMzA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQ2RgorOjEwMEU0NTAwMDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQ1RAorOjEwMEU1NTAwMDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQ0RAorOjEwMEU2NTAwMDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQzRAorOjEwMEU3NTAwMDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUxRAorOjEwMEU4NTAwMDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwRAorOjEwMEU5NTAwMDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDVGRAorOjEwMEVBNTAwMDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA2MDZFQgorOjEwMEVCNTAwMDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDZDRAorOjEwMEVDNTAwMDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDZCRAorOjEwMEVENTAwMDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDZBRAorOjEwMEVFNTAwMDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA3MDcwNzA4MDg5NgorOjEwMEVGNTAwMDgwOTA5MDkwQTBBMEEwQjBCMEIwQzBDMEMwRDBEMEQ0MAorOjEwMEYwNTAwMEUwRTBFMEYwRjBGMTAxMDEwMTExMTExMTIxMjEyMTNEOQorOjEwMEYxNTAwMTMxMzE0MTQxNDE1MTUxNTE2MTYxNjE3MTcxNzE4MTg3NAorOjEwMEYyNTAwMTgxOTE5MTkxOTFBMUExQTFBMUIxQjFCMUIxQzFDMUMxOAorOjEwMEYzNTAwMUMxRDFEMUQxRDFFMUUxRTFFMUYxRjFGMUYyMDIwMjBDOAorOjEwMEY0NTAwMjEyMTIxMjIyMjIyMjMyMzI0MjQyNTI1MjYyNjI3Mjc2MQorOjEwMEY1NTAwMjgyODI5MjkyQTJBMkIyQjJDMkMyRDJEMkUyRTJGMkZENAorOjEwMEY2NTAwMzAzMDMxMzEzMjMyMzMzMzM0MzQzNTM1MzYzNjM3Mzc0NAorOjEwMEY3NTAwMzgzODM5MzkzQTNBM0IzQzNEM0UzRjQwNDE0MjQzNDQ5QgorOjEwMEY4NTAwNDU0NjQ3NDg0OTQ5NEE0QjRCNEM0RDRFNEY1MDUxNTJBNworOjEwMEY5NTAwNTM1NDU1NTU1NjU2NTc1NzU4NUE1QjVENUU1RjYxNjJCNworOjEwMEZBNTAwNjM2NDY1NjY2NzY4Njk2QTZCNkM2RDZGNzE3MjczNzQ4QgorOjEwMEZCNTAwNzU3Njc3Nzg3OTdBN0I3QzdFODAwMTM3MDEwMTM4MDBGOAorOjEwNEFDNDAwRTQ5MDcyMzZGMEEzRjA5MDdGOTdFMDU0RkJGMEU0OTAwQQorOjEwNEFENDAwNzIzM0YwOTA3MjMyRjA5MDcyMDEwNEYwRTQ5MDcyMzMwOQorOjEwNEFFNDAwRjA5MDcyMzJGMDkwNzIwMTA0RjA5MDdGOTdFMDQ0MDRFOQorOjAyNEFGNDAwRjAyMkFFCis6MTAzMjZGMDA5MDc2MThFMEZGNjQwNTcwNDI5MDc1QUJFMEI0MDExOUQ5Cis6MTAzMjdGMDA5MDcyMzc3NDAxRjBFNDkwODAyMEYwOTA4MDMxRjA5MERDCis6MTAzMjhGMDA4MDI4RjA5MDgwMzlGMDgwMjJFNDkwNzIzN0YwOTA3NUFBCis6MTAzMjlGMDBBREUwOTA3MjJCRjBFMDI0ODBGMEUwOTA4MDIwRjA5MDcxCis6MTAzMkFGMDA4MDMxRjA5MDgwMjhGMDkwODAzOUYwRUY2NDA2NjAwMjUyCis6MTAzMkJGMDA4MTk5OTA3MjM5NzQwNEYwOTA3MjM5RTBGRjI0RkU5MDc2Cis6MTAzMkNGMDA3MjA0RjBFRjc1RjAwQUE0MjRBQkY1ODJFNDM0NzVGNUJGCis6MTAzMkRGMDA4M0UwNjQwMTcwNTQ5MDcyMzYwNEYwOTA3MjA0RTBGRjQyCis6MTAzMkVGMDAyNEZENjAyODI0RkU2MDI0MjQwMzI0RkI1MDA0NjAxQzZBCis6MTAzMkZGMDA4MThDNzQyMDJGRjU4MkU0MzQ4MEY1ODNFNEYwNzQyOEY4Cis6MTAzMzBGMDAyRkY1ODJFNDM0ODBGNTgzRTRGMDgxOEM5MDcyMDRFMDMxCis6MTAzMzFGMDBGRjI0MzBGNTgyRTQzNDgwRjU4M0U0RjA3NDM4MkZGNTIwCis6MTAzMzJGMDA4MkU0MzQ4MEY1ODNFNEYwODE4Q0U0OTA3MjM2RjA5MDdGCis6MTAzMzNGMDA3MjM5RTA3NUYwMEFBNDI0QURGNTgyRTQzNDc1RjU4MzkzCis6MTAzMzRGMDBFMEZGN0UwMDkwNzUwQ0VFRjBBM0VGRjA3MDA2OTA3MjI4Cis6MTAzMzVGMDAwMjc0M0JGMDkwNzUwQ0UwRkVBM0UwRkY2NDgwNEU3MEFBCis6MTAzMzZGMDAwNDkwNzIwMkYwRUY0RTcwMDI4MTM1RUY2NDgwNEU3MDYwCis6MTAzMzdGMDAwMjgxMzVFRkY4RTQ5MDc1MERGMEU4OTA3NTBDRjA5MDQwCis6MTAzMzhGMDA3MjM0RTA3NUYwMEFBNDI0QUNGNTgyRTQzNDc1RjU4MzQ5Cis6MTAzMzlGMDBFMEZGOTA3MjAyRjA5MDc1MERFMDJGRjA5MDc1MENFMDQ5Cis6MTAzM0FGMDAzNDAwRjBFMEZFQTNFMEZGRTRGQ0ZEN0JENjdBQTVGOTQ0Cis6MTAzM0JGMDBGOEQzMTIzNzk1NDAwQTkwNzUwQzc0QTVGMEEzNzRENjA0Cis6MTAzM0NGMDBGMDkwNzUwREUwMjQyQUYwOTA3NTBDRTAzNDVBRjBFMDdGCis6MTAzM0RGMDBGRUEzRTA3ODA1Q0VBMkU3MTNDRTEzRDhGOEZGOTA3NUMxCis6MTAzM0VGMDAwQ0VFRjBBM0VGRjA5MDcyMkNFRUYwQTNFRkYwRDM5NDZECis6MTAzM0ZGMDBEMkVFNjQ4MDk0ODI0MDBBOTA3MjJDNzQwMkYwQTM3NDBGCis6MTAzNDBGMDBEMkYwQzM5MDcyMkNFMDY0ODA5NDgwNTAwNEU0RjBBMzU3Cis6MTAzNDFGMDBGMDkwNzIyQ0UwRkVBM0UwMjQzQUY1ODJFRTM0NzJGNUMwCis6MTAzNDJGMDA4M0UwOTA3MjAyRjA5MDcyMDRFMEZGMjRGRDYwMkQyNDdGCis6MTAzNDNGMDBGRTYwMjkyNDAzMjRGQjUwMDQ2MDIxODA0MDkwNzIwMjE3Cis6MTAzNDRGMDBFMEZFNzQyMDJGRjU4MkU0MzQ4MEY1ODNFRUYwNzQyOENCCis6MTAzNDVGMDAyRkY1ODJFNDM0ODBGNTgzRUVGMDgwMjE5MDcyMDJFMDQ0Cis6MTAzNDZGMDBGRjkwNzIwNEUwRkUyNDMwRjU4MkU0MzQ4MEY1ODNFRkEwCis6MTAzNDdGMDBGMDc0MzgyRUY1ODJFNDM0ODBGNTgzRUZGMDkwNzIzOUQyCis6MEIzNDhGMDBFMDA0RjBFMDY0MEE2MDAyNDFDNzIyODQKKzoxMDM0OUEwMDkwNzYxOEUwRkZCNDA1MjM5MDcyMzdFMDcwMUQ5MDc1OUUKKzoxMDM0QUEwMEFERTA5MDcyMkJGMEUwMjQ4MEYwRTA5MDgwMjBGMDkwNjQKKzoxMDM0QkEwMDgwMzFGMDkwODAyOEYwOTA4MDM5RjBFRjY0MDY2MDAyNDUKKzoxMDM0Q0EwMEMxOTE5MDcyMzZFMDYwMDJDMTkxOTA3NjQwRTA3MDMxMEQKKzoxMDM0REEwMDkwNzIwMzc0MDNGMDkwNzIwM0UwRkY3NUYwMEFBNDI0NUIKKzoxMDM0RUEwMEFBRjU4MkU0MzQ3NUY1ODNFMEZFOTA3MjI5RTBGREVFRDgKKzoxMDM0RkEwMDZENjAwRUVGQzM5NDBBNTAwODkwNzIwM0UwMDRGMDgwRTYKKzoxMDM1MEEwMEQ1OTA3MjM5NzQwNEYwOTA3NjQwRTA3MDA4OTA3MjAzOTYKKzoxMDM1MUEwMEUwOTA3MjM5RjA5MDcyMzlFMEZEMjRGRTkwNzIyQUYwNDAKKzoxMDM1MkEwMEVENzVGMDBBQTQyNEFERjU4MkU0MzQ3NUY1ODNFMEZGNjUKKzoxMDM1M0EwMDdFMDA5MDc1MENFRUYwQTNFRkYwNzAwNjkwNzIwMjc0QTQKKzoxMDM1NEEwMDgwRjA5MDc1MENFMEZFQTNFMEZGNjQ4MDRFNzAwNDkwNUEKKzoxMDM1NUEwMDcyMDJGMEVGNEU3MDAyQzExQkVGNjQ4MDRFNzAwMkMxMUUKKzoxMDM1NkEwMDFCRUZGOEU0OTA3NTBERjBFODkwNzUwQ0YwRUQ3NUYwMkUKKzoxMDM1N0EwMDBBQTQyNEFDRjU4MkU0MzQ3NUY1ODNFMEZGOTA3MjAyNjQKKzoxMDM1OEEwMEYwOTA3NTBERTAyRkYwOTA3NTBDRTAzNDAwRjBFMEZFM0QKKzoxMDM1OUEwMEEzRTBGRkU0RkNGRDdCRDY3QUE1RjlGOEQzMTIzNzk1QjAKKzoxMDM1QUEwMDQwMEE5MDc1MEM3NEE1RjBBMzc0RDZGMDkwNzUwREUwREUKKzoxMDM1QkEwMDI0MkFGMDkwNzUwQ0UwMzQ1QUYwRTBGRUEzRTA3ODA1NzYKKzoxMDM1Q0EwMENFQTJFNzEzQ0UxM0Q4RjhGRjkwNzUwQ0VFRjBBM0VGNTYKKzoxMDM1REEwMEYwOTA3MjJDRUVGMEEzRUZGMEQzOTREMkVFNjQ4MDk0QzQKKzoxMDM1RUEwMDgyNDAwQTkwNzIyQzc0MDJGMEEzNzREMkYwQzM5MDcyRDMKKzoxMDM1RkEwMDJDRTA2NDgwOTQ4MDUwMDRFNEYwQTNGMDkwNzIyQ0UwRjQKKzoxMDM2MEEwMEZFQTNFMDI0M0FGNTgyRUUzNDcyRjU4M0UwOTA3MjAyNkEKKzoxMDM2MUEwMEYwOTA3MjJBRTBGRjI0RkQ2MDJEMjRGRTYwMjkyNDAzMjUKKzoxMDM2MkEwMDI0RkI1MDA0NjAyMTgwNDA5MDcyMDJFMEZFNzQyMDJGMzcKKzoxMDM2M0EwMEY1ODJFNDM0ODBGNTgzRUVGMDc0MjgyRkY1ODJFNDM0QzEKKzoxMDM2NEEwMDgwRjU4M0VFRjA4MDIxOTA3MjAyRTBGRjkwNzIyQUUwMEEKKzoxMDM2NUEwMEZFMjQzMEY1ODJFNDM0ODBGNTgzRUZGMDc0MzgyRUY1RDkKKzoxMDM2NkEwMDgyRTQzNDgwRjU4M0VGRjA5MDc2NDBFMDcwMDY5MDcyNDEKKzoxMDM2N0EwMDM5NzQwQUYwOTA3MjM5RTAwNEYwRTBDMzk0MEE1MDAyRjcKKzowODM2OEEwMEExMTFFNDkwNzY0MEYwMjI0QQorOjA0NEQ5NzAwMTIxNzMwMjI5RAorOjEwNDk1ODAwOTA3NjQ2NzQ4MEYwRTRBM0YwQTNGMEEzRjBBM0YwQTM0QworOjEwNDk2ODAwRjBBM0YwQTNGMEEzRjBBMzc0ODBGMEU0QTNGMEEzRjAwNQorOjEwNDk3ODAwQTNGMEEzRjBBM0YwQTNGMEEzNzQ0MEYwRTRBM0YwQTM4MgorOjEwNDk4ODAwNzQ0MEYwRTRBM0YwQTNGMEEzRjBBM0YwQTNGMEEzRjAyNQorOjEwNDk5ODAwQTM3NDQwRjBFNEEzRjBBMzc0NDBGMEU0QTNGMEEzRjAwMAorOjA1NDlBODAwQTNGMEEzRjAyMkMyCis6MTAwRkM2MDBFNEZGNzQ0NjJGRjU4MkU0MzQ3NkY1ODNFMEZFNzQyMDYwCis6MTAwRkQ2MDAyRkY1ODJFNDM0ODBGNTgzRUVGMDc0NEUyRkY1ODJFNDJCCis6MTAwRkU2MDAzNDc2RjU4M0UwRkU3NDMwMkZGNTgyRTQzNDgwRjU4M0ExCis6MDYwRkY2MDBFRUYwMEZCRjA4Q0M3NQorOjAxMEZGQzAwMjJEMgorOjEwNEE4RDAwRTRGRjc0NTYyRkY1ODJFNDM0NzZGNTgzRTBGRTc0Mjg0NgorOjEwNEE5RDAwMkZGNTgyRTQzNDgwRjU4M0VFRjA3NDVFMkZGNTgyRTQxOQorOjEwNEFBRDAwMzQ3NkY1ODNFMEZFNzQzODJGRjU4MkU0MzQ4MEY1ODM5NworOjA2NEFCRDAwRUVGMDBGQkYwOENDNzMKKzowMTRBQzMwMDIyRDAKKzoxMDE3MzAwMEMwODJDMDgzQzBFMEU4QzBFMDc4NzhFODE0Rjg3MEZCQUQKKzowQTE3NDAwMEQwRTBGOEQwRTBEMDgzRDA4MjIyODAKKzowMzAwNDMwMDAyNDkwMDZGCis6MTA0OTAwMDAwMjJGRTcwMDAyM0Q0NzAwMDI0RDQ2MDAwMjRCRDUwMDUyCis6MTA0OTEwMDAwMjRCNjAwMDAyMkZGRjAwMDI0QkVEMDAwMjRCODEwMEIyCis6MTA0OTIwMDAwMjRDMDQwMDAyM0ZENTAwMDI0QzFCMDAwMjRDMzIwMDM2Cis6MTA0OTMwMDAwMjRDNDkwMDAyNEM2MDAwMDI0Qzc3MDAwMjRDOEUwMDkxCis6MTA0OTQwMDAwMjRDQTUwMDAyNENCQzAwMDI0Q0QzMDAwMjRDRUEwMDExCis6MDg0OTUwMDAwMjREMDEwMDAyNEQxODAwQTgKKzoxMDFCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKKzoxMDFCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKKzoxMDFCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKKzoxMDFCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKKzoxMDFCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKKzoxMDFCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKKzoxMDFCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKKzoxMDFCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKKzoxMDFCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDFCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDFCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKKzoxMDFCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKKzoxMDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKKzoxMDFDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKKzoxMDFDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKKzoxMDFDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKKzoxMDFDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTQKKzoxMDFDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKKzoxMDFDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKKzoxMDFDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKKzoxMDFDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKKzoxMDFDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKKzoxMDFDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKKzoxMDFDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKKzoxMDFDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKKzoxMDFDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDFDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDFDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKKzoxMDFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKKzoxMDFEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKKzoxMDFEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKKzoxMDFEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKKzoxMDFENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKKzoxMDFENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKKzoxMDFENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKKzoxMDFENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKKzoxMDFEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMDFEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKKzoxMDFEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMDFEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKKzoxMDFEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKKzoxMDFERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKKzoxMDFERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDFERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDFFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKKzoxMDFFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKKzoxMDFFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKKzoxMDFFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKKzoxMDFFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKKzoxMDFFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKKzoxMDFFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKKzoxMDFFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKKzoxMDFFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKKzoxMDFFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKKzowRTFFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwMUVCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAorOjEwMUVDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMUVERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwMUVFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAorOjEwMUVGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwMUYwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMworOjEwMUYxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMworOjEwMUYyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMworOjAyMUYzRTAwMDAwMEExCis6MTAxRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCis6MTAxRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCis6MTAxRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCis6MTAxRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCis6MTAxRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCis6MTAxRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCis6MTAxRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCis6MTAxRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCis6MTAxRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTAxRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTAxRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTAxRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTAyMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAyMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTAyMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTAyMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTAyMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTAyMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCis6MTAyMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTAyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTAyMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTAyMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTAyMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTAyMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTAyMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTAyMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTAyMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTAyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTAyMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTAyMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAyMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTAyMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTAyMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTAyMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTAyMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTAyMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTAyMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTAyMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTAyMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTAyMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTAyMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTAyMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTAyMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTAyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTAyMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTAyMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTAyMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAyMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTAyMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTAyMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTAyMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTAyMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTAyMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTAyMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTAyMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTAyMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTAyMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTAyMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCis6MTAyMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTAyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECis6MTAyMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTAyMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTAyMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTAyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTAyMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTAyMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MEUyMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMDIzN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKKzoxMDIzOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKKzoxMDIzOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKKzoxMDIzQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKKzoxMDIzQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKKzoxMDIzQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMDIzREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDIzRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKKzoxMDIzRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKKzoxMDI0MEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKKzoxMDI0MUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKKzoxMDI0MkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDI0M0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDI0NEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKKzoxMDI0NUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDI0NkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDI0N0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDI0OEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDI0OUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKKzoxMDI0QUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKKzoxMDI0QkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDI0Q0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMDI0REUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKKzoxMDI0RUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDI0RkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKKzoxMDI1MEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDI1MUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKKzoxMDI1MkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKKzoxMDI1M0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDI1NEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDI1NUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKKzoxMDI1NkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKKzoxMDI1N0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDI1OEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKKzoxMDI1OUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKKzoxMDI1QUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKKzoxMDI1QkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKKzoxMDI1Q0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKKzoxMDI1REUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKKzoxMDI1RUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKKzoxMDI1RkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDI2MEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKKzoxMDI2MUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKKzoxMDI2MkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUMKKzoxMDI2M0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEMKKzoxMDI2NEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDI2NUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkMKKzoxMDI2NkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUMKKzoxMDI2N0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEMKKzoxMDI2OEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MKKzoxMDI2OUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKKzoxMDI2QUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUMKKzoxMDI2QkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKKzoxMDI2Q0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKKzoxMDI2REUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKKzowRTI2RUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwMjZGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwMjcwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwMjcxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwMjcyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwMjczQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMjc0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwMjc1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAorOjEwMjc2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwMjc3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwMjc4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwMjc5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAorOjEwMjdBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAorOjEwMjdCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAorOjEwMjdDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAorOjEwMjdEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwMjdFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjA1MjdGQzAwMDAwMDAwMDAyMkI2Cis6MDcxNzRBMDA5MDdGQzU3NDAyRjAyMjNDCis6MTAxNzUxMDA5MDdFQzBFMDkwNzY0NUYwOTA3RUMxRTA5MDc2NDRGMEI2Cis6MTAxNzYxMDA5MDdFQzJFMDkwNzY0M0YwQjQwMDAzMDIxNzc4OTA3NjQxCis6MTAxNzcxMDAxOTc0MDNGMDAyMTc4RTkwNzY0NEUwQjRCQjA5OTA3Njk5Cis6MTAxNzgxMDAxOTc0MDJGMDAyMTc4RTkwNzYxOTc0MDFGMDkwNzY0MjY2Cis6MDMxNzkxMDBFNEYwMjI1RgorOjAzMDAwMDAwMDI0NUY5QkQKKzowQzQ1RjkwMDc4N0ZFNEY2RDhGRDc1ODEzODAyNDY0MDVBCis6MTAzNjkyMDBCQjAxMDY4OTgyOEE4M0UwMjI1MDAyRTcyMkJCRkUwMjM2Cis6MDkzNkEyMDBFMzIyODk4MjhBODNFNDkzMjI2OQorOjEwMzZBQjAwQkIwMTBDRTU4MjI5RjU4MkU1ODMzQUY1ODNFMDIyNTBENAorOjEwMzZCQjAwMDZFOTI1ODJGOEU2MjJCQkZFMDZFOTI1ODJGOEUyMjIxRQorOjBEMzZDQjAwRTU4MjI5RjU4MkU1ODMzQUY1ODNFNDkzMjIzOAorOjEwMzZEODAwQzJENUVDMzBFNzA5QjJENUU0QzM5REZERTQ5Q0ZDRUUwRAorOjEwMzZFODAwMzBFNzE1QjJENUU0QzM5RkZGRTQ5RUZFMTIzODFGQzMyRQorOjEwMzZGODAwRTQ5REZERTQ5Q0ZDODAwMzEyMzgxRjMwRDUwN0MzRTQyOQorOjA2MzcwODAwOUZGRkU0OUVGRTIyN0IKKzoxMDM3MEUwMEJCMDExMEU1ODIyOUY1ODJFNTgzM0FGNTgzRTBGNUYwRjkKKzoxMDM3MUUwMEEzRTAyMjUwMDlFOTI1ODJGODg2RjAwOEU2MjJCQkZFRDYKKzoxMDM3MkUwMDBBRTkyNTgyRjhFMkY1RjAwOEUyMjJFNTgzMkFGNTgzMUMKKzowODM3M0UwMEU5OTNGNUYwQTNFOTkzMjJFMQorOjEwMzc0NjAwRTg4RkYwQTRDQzhCRjBBNDJDRkNFOThFRjBBNDJDRkMyMgorOjEwMzc1NjAwOEFGMEVEQTQyQ0ZDRUE4RUYwQTRDREE4RjA4QkYwQTRBMAorOjEwMzc2NjAwMkRDQzM4MjVGMEZERTk4RkYwQTQyQ0NEMzVGMEZDRUJGRgorOjEwMzc3NjAwOEVGMEE0RkVBOUYwRUI4RkYwQTRDRkM1RjAyRUNEMzlDNAorOjBGMzc4NjAwRkVFNDNDRkNFQUE0MkRDRTM1RjBGREU0M0NGQzIyMzEKKzoxMDM3OTUwMEVCOUZGNUYwRUE5RTQyRjBFOTlENDJGMEVDNjQ4MEM4QUIKKzowNjM3QTUwMDY0ODA5ODQ1RjAyMjRCCis6MTAzN0FCMDBFQjlGRjVGMEVBOUU0MkYwRTk5RDQyRjBFODlDNDVGMDc0Cis6MDEzN0JCMDAyMkVCCis6MEMzN0JDMDBFQ0YwQTNFREYwQTNFRUYwQTNFRkYwMjI4MAorOjEwMzdDODAwQTg4Mjg1ODNGMEQwODNEMDgyMTIzN0RGMTIzN0RGMTJDOAorOjEwMzdEODAwMzdERjEyMzdERkU0NzNFNDkzQTNDNTgzQzVGMEM1ODNFRAorOjEwMzdFODAwQzhDNTgyQzhGMEEzQzU4M0M1RjBDNTgzQzhDNTgyQzg0QgorOjAxMzdGODAwMjJBRQorOjEwMzdGOTAwRDA4M0QwODJGOEU0OTM3MDEyNzQwMTkzNzAwREEzQTM1RgorOjEwMzgwOTAwOTNGODc0MDE5M0Y1ODI4ODgzRTQ3Mzc0MDI5MzY4NjA3MgorOjA2MzgxOTAwRUZBM0EzQTM4MERGNzIKKzoxMDQ2MDUwMDAyNDc1QUU0OTNBM0Y4RTQ5M0EzNDAwM0Y2ODAwMUYyMkEKKzoxMDQ2MTUwMDA4REZGNDgwMjlFNDkzQTNGODU0MDcyNDBDQzhDMzMzQjYKKzoxMDQ2MjUwMEM0NTQwRjQ0MjBDODgzNDAwNEY0NTY4MDAxNDZGNkRGODUKKzoxMDQ2MzUwMEU0ODAwQjAxMDIwNDA4MTAyMDQwODA5MDBDOEZFNDdFN0EKKzoxMDQ2NDUwMDAxOTM2MEJDQTNGRjU0M0YzMEU1MDk1NDFGRkVFNDkzN0EKKzoxMDQ2NTUwMEEzNjAwMTBFQ0Y1NEMwMjVFMDYwQTg0MEI4RTQ5M0EzNDEKKzoxMDQ2NjUwMEZBRTQ5M0EzRjhFNDkzQTNDOEM1ODJDOENBQzU4M0NBNkMKKzoxMDQ2NzUwMEYwQTNDOEM1ODJDOENBQzU4M0NBREZFOURFRTc4MEJFMjQKKzowMTBGQzUwMDAwMkIKKzoxMDM4MUYwMEJDMDAwQkJFMDAyOUVGOERGMDg0RkZBREYwMjJFNENDOEQKKzoxMDM4MkYwMEY4NzVGMDA4RUYyRkZGRUUzM0ZFRUMzM0ZDRUU5REVDNTYKKzoxMDM4M0YwMDk4NDAwNUZDRUU5REZFMEZENUYwRTlFNENFRkQyMkVEOUMKKzoxMDM4NEYwMEY4RjVGMEVFODQyMEQyMUNGRUFERjA3NUYwMDhFRjJGRTYKKzoxMDM4NUYwMEZGRUQzM0ZENDAwNzk4NTAwNkQ1RjBGMjIyQzM5OEZERDcKKzowNTM4NkYwMDBGRDVGMEVBMjI3NAorOjAwMDAwMDAxRkYKKyovCisvKgorVkVSU0lPTj0xLjA0LjA2MgorREFURT0xNi4xMC4yMDAyICAKKyovCitzdGF0aWMgSU5URUxfSEVYX1JFQ09SRCBnX2VtaTYyX2xvYWRlcltdID0geworIHsgMywweDAwMDAsMCx7MHgwMiwweDAyLDB4ODd9fSwKKyB7IDMsMHgwMDQzLDAsezB4MDIsMHgwNCwweDAwfX0sCisgezE2LDB4MDEwMCwwLHsweGU0LDB4ZmYsMHhmZSwweGMyLDB4MjAsMHhkMiwweGU4LDB4NDMsMHhkOCwweDIwLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHhmZiwweGYwfX0sCisgezE2LDB4MDExMCwwLHsweDkwLDB4N2YsMHhhOSwweGYwLDB4OTAsMHg3ZiwweGFhLDB4ZjAsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4OTUsMHg3NCwweGMwfX0sCisgezE2LDB4MDEyMCwwLHsweGYwLDB4OTAsMHg3ZiwweDllLDB4ZjAsMHg5MCwweDdmLDB4OTgsMHhmMCwweGU0LDB4OTAsMHg3ZiwweDk0LDB4ZjAsMHg5MCwweDdmfX0sCisgezE2LDB4MDEzMCwwLHsweDlkLDB4NzQsMHhmZiwweGYwLDB4OTAsMHg3ZiwweDk3LDB4NzQsMHhhMCwweGYwLDB4OTAsMHg3ZiwweDkzLDB4ZTAsMHg1NCwweGZjfX0sCisgezE2LDB4MDE0MCwwLHsweGYwLDB4OTAsMHg3ZiwweDljLDB4NzQsMHgwMywweGYwLDB4ZTQsMHg5MCwweDdmLDB4OTYsMHhmMCwweDkwLDB4N2YsMHhhZiwweGUwfX0sCisgezE2LDB4MDE1MCwwLHsweDQ0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHhhZSwweGUwLDB4NDQsMHgwZCwweGYwLDB4ZDIsMHhhZiwweDBmLDB4YmYsMHgwMCwweDAxfX0sCisgezE2LDB4MDE2MCwwLHsweDBlLDB4YmUsMHgwNywweGY4LDB4YmYsMHgwOCwweGY1LDB4MjAsMHgyMCwweDQyLDB4NzUsMHgxNCwweDAwLDB4NzUsMHgxMywweDAwfX0sCisgezE2LDB4MDE3MCwwLHsweDc1LDB4MTIsMHgwMCwweDc1LDB4MTEsMHgwMCwweDdmLDB4NDgsMHg3ZSwweDkyLDB4N2QsMHgwMCwweDdjLDB4MDAsMHhhYiwweDE0fX0sCisgezE2LDB4MDE4MCwwLHsweGFhLDB4MTMsMHhhOSwweDEyLDB4YTgsMHgxMSwweGMzLDB4MTIsMHgwMywweGVkLDB4NTAsMHhkYiwweDIwLDB4MjAsMHhkOCwweDdhfX0sCisgezE2LDB4MDE5MCwwLHsweDAwLDB4NzksMHgwMCwweDc4LDB4MDAsMHhlNSwweDE0LDB4MjQsMHgwMSwweGY1LDB4MTQsMHhlYSwweDM1LDB4MTMsMHhmNSwweDEzfX0sCisgezE2LDB4MDFhMCwwLHsweGU5LDB4MzUsMHgxMiwweGY1LDB4MTIsMHhlOCwweDM1LDB4MTEsMHhmNSwweDExLDB4ODAsMHhjYSwweDMwLDB4MjAsMHhmZCwweDEyfX0sCisgezE2LDB4MDFiMCwwLHsweDAxLDB4YzcsMHg1MCwweDA3LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0fX0sCisgeyA2LDB4MDFjMCwwLHsweDAyLDB4ZjAsMHhjMiwweDIwLDB4ODAsMHhlNn19LAorIHsgMSwweDAxYzYsMCx7MHgyMn19LAorIHsxNiwweDAxYzcsMCx7MHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4NWIsMHg2MCwweDYwLDB4MjQsMHgwMiwweDYwLDB4MDMsMHgwMiwweDAyLDB4ODUsMHg5MH19LAorIHsxNiwweDAxZDcsMCx7MHg3ZiwweGVhLDB4ZTAsMHg3NSwweDBhLDB4MDAsMHhmNSwweDBiLDB4YTMsMHhlMCwweGZlLDB4ZTQsMHhlZSwweDQyLDB4MGEsMHg5MH19LAorIHsxNiwweDAxZTcsMCx7MHg3ZiwweGVlLDB4ZTAsMHg3NSwweDE1LDB4MDAsMHhmNSwweDE2LDB4YTMsMHhlMCwweGZlLDB4ZTQsMHhlZSwweDQyLDB4MTUsMHhlNX19LAorIHsxNiwweDAxZjcsMCx7MHgxNiwweDQ1LDB4MTUsMHg3MCwweDAzLDB4MDIsMHgwMiwweDg1LDB4ZTQsMHg5MCwweDdmLDB4YzUsMHhmMCwweDkwLDB4N2YsMHhiNH19LAorIHsxNiwweDAyMDcsMCx7MHhlMCwweDIwLDB4ZTMsMHhmOSwweDkwLDB4N2YsMHhjNSwweGUwLDB4ZjUsMHgwYywweDEyLDB4MDMsMHgxMywweGFmLDB4MGMsMHg3ZX19LAorIHsxNiwweDAyMTcsMCx7MHgwMCwweGVmLDB4MjUsMHgwYiwweGY1LDB4MGIsMHhlZSwweDM1LDB4MGEsMHhmNSwweDBhLDB4YzMsMHhlNSwweDE2LDB4OWYsMHhmNX19LAorIHsxNiwweDAyMjcsMCx7MHgxNiwweGU1LDB4MTUsMHg5ZSwweGY1LDB4MTUsMHg4MCwweGM3LDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHg3NSwweDBhLDB4MDAsMHhmNX19LAorIHsxNiwweDAyMzcsMCx7MHgwYiwweGEzLDB4ZTAsMHhmZSwweGU0LDB4ZWUsMHg0MiwweDBhLDB4OTAsMHg3ZiwweGVlLDB4ZTAsMHg3NSwweDE1LDB4MDAsMHhmNX19LAorIHsxNiwweDAyNDcsMCx7MHgxNiwweGEzLDB4ZTAsMHhmZSwweGU0LDB4ZWUsMHg0MiwweDE1LDB4ZTUsMHgxNiwweDQ1LDB4MTUsMHg2MCwweDMwLDB4ZTQsMHg5MH19LAorIHsxNiwweDAyNTcsMCx7MHg3ZiwweGM1LDB4ZjAsMHg5MCwweDdmLDB4YjQsMHhlMCwweDIwLDB4ZTMsMHhmOSwweDkwLDB4N2YsMHhjNSwweGUwLDB4ZjUsMHgwY319LAorIHsxNiwweDAyNjcsMCx7MHgxMiwweDAzLDB4MmIsMHhhZiwweDBjLDB4N2UsMHgwMCwweGVmLDB4MjUsMHgwYiwweGY1LDB4MGIsMHhlZSwweDM1LDB4MGEsMHhmNX19LAorIHsxNSwweDAyNzcsMCx7MHgwYSwweGMzLDB4ZTUsMHgxNiwweDlmLDB4ZjUsMHgxNiwweGU1LDB4MTUsMHg5ZSwweGY1LDB4MTUsMHg4MCwweGNhLDB4YzN9fSwKKyB7IDEsMHgwMjg2LDAsezB4MjJ9fSwKKyB7MTIsMHgwMjg3LDAsezB4NzgsMHg3ZiwweGU0LDB4ZjYsMHhkOCwweGZkLDB4NzUsMHg4MSwweDI5LDB4MDIsMHgwMiwweGNlfX0sCisgezE2LDB4MDI5MywwLHsweDAyLDB4MDEsMHgwMCwweGU0LDB4OTMsMHhhMywweGY4LDB4ZTQsMHg5MywweGEzLDB4NDAsMHgwMywweGY2LDB4ODAsMHgwMSwweGYyfX0sCisgezE2LDB4MDJhMywwLHsweDA4LDB4ZGYsMHhmNCwweDgwLDB4MjksMHhlNCwweDkzLDB4YTMsMHhmOCwweDU0LDB4MDcsMHgyNCwweDBjLDB4YzgsMHhjMywweDMzfX0sCisgezE2LDB4MDJiMywwLHsweGM0LDB4NTQsMHgwZiwweDQ0LDB4MjAsMHhjOCwweDgzLDB4NDAsMHgwNCwweGY0LDB4NTYsMHg4MCwweDAxLDB4NDYsMHhmNiwweGRmfX0sCisgezE2LDB4MDJjMywwLHsweGU0LDB4ODAsMHgwYiwweDAxLDB4MDIsMHgwNCwweDA4LDB4MTAsMHgyMCwweDQwLDB4ODAsMHg5MCwweDA0LDB4NmUsMHhlNCwweDdlfX0sCisgezE2LDB4MDJkMywwLHsweDAxLDB4OTMsMHg2MCwweGJjLDB4YTMsMHhmZiwweDU0LDB4M2YsMHgzMCwweGU1LDB4MDksMHg1NCwweDFmLDB4ZmUsMHhlNCwweDkzfX0sCisgezE2LDB4MDJlMywwLHsweGEzLDB4NjAsMHgwMSwweDBlLDB4Y2YsMHg1NCwweGMwLDB4MjUsMHhlMCwweDYwLDB4YTgsMHg0MCwweGI4LDB4ZTQsMHg5MywweGEzfX0sCisgezE2LDB4MDJmMywwLHsweGZhLDB4ZTQsMHg5MywweGEzLDB4ZjgsMHhlNCwweDkzLDB4YTMsMHhjOCwweGM1LDB4ODIsMHhjOCwweGNhLDB4YzUsMHg4MywweGNhfX0sCisgezE2LDB4MDMwMywwLHsweGYwLDB4YTMsMHhjOCwweGM1LDB4ODIsMHhjOCwweGNhLDB4YzUsMHg4MywweGNhLDB4ZGYsMHhlOSwweGRlLDB4ZTcsMHg4MCwweGJlfX0sCisgezE2LDB4MDMxMywwLHsweGU1LDB4MGMsMHhmZiwweGU1LDB4MGIsMHhmNSwweDgyLDB4ZTUsMHgwYSwweGY1LDB4ODMsMHg3NSwweDkyLDB4N2UsMHg3NCwweGMwfX0sCisgeyA4LDB4MDMyMywwLHsweGY4LDB4ZTIsMHgwOCwweGYwLDB4YTMsMHhkZiwweGZhLDB4MjJ9fSwKKyB7MTYsMHgwMzJiLDAsezB4OTAsMHg3ZiwweDk2LDB4ODUsMHg4MywweDkyLDB4YTgsMHg4MiwweDc5LDB4MDIsMHg5MCwweDAwLDB4MDAsMHhlMCwweGI0LDB4MDB9fSwKKyB7MTYsMHgwMzNiLDAsezB4MGQsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4OTcsMHhlMCwweDU0LDB4N2YsMHhmMCwweDQ0LDB4ODAsMHhmMCwweGU1LDB4MGN9fSwKKyB7MTYsMHgwMzRiLDAsezB4ZmYsMHg5MCwweDdlLDB4YzAsMHhlMCwweGY1LDB4MjgsMHhlNCwweGEyLDB4NDcsMHgzMywweGYyLDB4NjksMHhmMiwweGU0LDB4YTJ9fSwKKyB7MTYsMHgwMzViLDAsezB4NDYsMHgzMywweGYyLDB4NjksMHhmMiwweGU0LDB4YTIsMHg0NSwweDMzLDB4ZjIsMHg2OSwweGYyLDB4ZTQsMHhhMiwweDQ0LDB4MzN9fSwKKyB7MTYsMHgwMzZiLDAsezB4ZjIsMHg2OSwweGYyLDB4ZTQsMHhhMiwweDQzLDB4MzMsMHhmMiwweDY5LDB4ZjIsMHhlNCwweGEyLDB4NDIsMHgzMywweGYyLDB4Njl9fSwKKyB7MTYsMHgwMzdiLDAsezB4ZjIsMHhlNCwweGEyLDB4NDEsMHgzMywweGYyLDB4NjksMHhmMiwweGU0LDB4YTIsMHg0MCwweDMzLDB4ZjIsMHg2OSwweGYyLDB4YTN9fSwKKyB7IDMsMHgwMzhiLDAsezB4ZGYsMHhjMiwweDIyfX0sCisgezE2LDB4MDM4ZSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDkwLDB4N2YsMHhjNCwweGU0LDB4ZjAsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmfX0sCisgezExLDB4MDM5ZSwwLHsweGFiLDB4NzQsMHgwNCwweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHgwM2E5LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4ZDIsMHgyMCwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYiwweDc0LDB4MDF9fSwKKyB7IDgsMHgwM2I5LDAsezB4ZjAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDAzYzEsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDAyLDB4ZjAsMHhkMH19LAorIHsgNiwweDAzZDEsMCx7MHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHgwM2Q3LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgxMCwweGYwLDB4ZDB9fSwKKyB7IDYsMHgwM2U3LDAsezB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4MDNlZCwwLHsweGViLDB4OWYsMHhmNSwweGYwLDB4ZWEsMHg5ZSwweDQyLDB4ZjAsMHhlOSwweDlkLDB4NDIsMHhmMCwweGU4LDB4OWMsMHg0NSwweGYwfX0sCisgeyAxLDB4MDNmZCwwLHsweDIyfX0sCisgeyAxLDB4MDNmZSwwLHsweDMyfX0sCisgeyAxLDB4MDNmZiwwLHsweDMyfX0sCisgezE2LDB4MDQwMCwwLHsweDAyLDB4MDMsMHhhOSwweDAwLDB4MDIsMHgwMywweGMxLDB4MDAsMHgwMiwweDAzLDB4OGUsMHgwMCwweDAyLDB4MDQsMHg1OCwweDAwfX0sCisgezE2LDB4MDQxMCwwLHsweDAyLDB4MDMsMHhkNywweDAwLDB4MDIsMHgwMywweGZlLDB4MDAsMHgwMiwweDAzLDB4ZmYsMHgwMCwweDAyLDB4MDQsMHg4NCwweDAwfX0sCisgezE2LDB4MDQyMCwwLHsweDAyLDB4MDQsMHg4NSwweDAwLDB4MDIsMHgwNCwweDg2LDB4MDAsMHgwMiwweDA0LDB4ODcsMHgwMCwweDAyLDB4MDQsMHg4OCwweDAwfX0sCisgezE2LDB4MDQzMCwwLHsweDAyLDB4MDQsMHg4OSwweDAwLDB4MDIsMHgwNCwweDhhLDB4MDAsMHgwMiwweDA0LDB4OGIsMHgwMCwweDAyLDB4MDQsMHg4YywweDAwfX0sCisgezE2LDB4MDQ0MCwwLHsweDAyLDB4MDQsMHg4ZCwweDAwLDB4MDIsMHgwNCwweDhlLDB4MDAsMHgwMiwweDA0LDB4OGYsMHgwMCwweDAyLDB4MDQsMHg5MCwweDAwfX0sCisgeyA4LDB4MDQ1MCwwLHsweDAyLDB4MDQsMHg5MSwweDAwLDB4MDIsMHgwNCwweDkyLDB4MDB9fSwKKyB7MTYsMHgwNDU4LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwOCwweGYwLDB4ZDB9fSwKKyB7IDYsMHgwNDY4LDAsezB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4MDQ2ZSwwLHsweDAyLDB4MGEsMHgwMCwweDBmLDB4MDEsMHgwYywweDExLDB4MDQsMHgwZCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDEsMHgwMCwweDAwfX0sCisgeyAxLDB4MDQ3ZSwwLHsweDAwfX0sCisgeyA0LDB4MDQ3ZiwwLHsweDAyLDB4MTcsMHgwMCwweDAwfX0sCisgeyAxLDB4MDQ4MywwLHsweDAwfX0sCisgeyAxLDB4MDQ4NCwwLHsweDMyfX0sCisgeyAxLDB4MDQ4NSwwLHsweDMyfX0sCisgeyAxLDB4MDQ4NiwwLHsweDMyfX0sCisgeyAxLDB4MDQ4NywwLHsweDMyfX0sCisgeyAxLDB4MDQ4OCwwLHsweDMyfX0sCisgeyAxLDB4MDQ4OSwwLHsweDMyfX0sCisgeyAxLDB4MDQ4YSwwLHsweDMyfX0sCisgeyAxLDB4MDQ4YiwwLHsweDMyfX0sCisgeyAxLDB4MDQ4YywwLHsweDMyfX0sCisgeyAxLDB4MDQ4ZCwwLHsweDMyfX0sCisgeyAxLDB4MDQ4ZSwwLHsweDMyfX0sCisgeyAxLDB4MDQ4ZiwwLHsweDMyfX0sCisgeyAxLDB4MDQ5MCwwLHsweDMyfX0sCisgeyAxLDB4MDQ5MSwwLHsweDMyfX0sCisgeyAxLDB4MDQ5MiwwLHsweDMyfX0sCisgezE2LDB4MTEwMCwwLHsweDEyLDB4MDEsMHgxMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4NDAsMHg2YSwweDA4LDB4MDEsMHgwMSwweDAwLDB4MDEsMHgwMSwweDAyfX0sCisgezE2LDB4MTExMCwwLHsweDAwLDB4MDEsMHgwOSwweDAyLDB4MjAsMHgwMCwweDAxLDB4MDEsMHgwMywweGEwLDB4MDAsMHgwOSwweDA0LDB4MDAsMHgwMCwweDAyfX0sCisgezE2LDB4MTEyMCwwLHsweGZmLDB4MDAsMHgwMCwweDA0LDB4MDcsMHgwNSwweDgyLDB4MDIsMHg0MCwweDAwLDB4MDAsMHgwNywweDA1LDB4MDIsMHgwMiwweDQwfX0sCisgezE2LDB4MTEzMCwwLHsweDAwLDB4MDAsMHgwNCwweDAzLDB4MDksMHgwNCwweDI2LDB4MDMsMHg0MSwweDAwLDB4NmUsMHgwMCwweDYzLDB4MDAsMHg2OCwweDAwfX0sCisgezE2LDB4MTE0MCwwLHsweDZmLDB4MDAsMHg3MiwweDAwLDB4MjAsMHgwMCwweDQzLDB4MDAsMHg2OCwweDAwLDB4NjksMHgwMCwweDcwLDB4MDAsMHg3MywweDAwfX0sCisgezE2LDB4MTE1MCwwLHsweDJjLDB4MDAsMHgyMCwweDAwLDB4NDksMHgwMCwweDZlLDB4MDAsMHg2MywweDAwLDB4MmUsMHgwMCwweDI4LDB4MDMsMHg0NiwweDAwfX0sCisgezE2LDB4MTE2MCwwLHsweDY5LDB4MDAsMHg3MiwweDAwLDB4NmQsMHgwMCwweDc3LDB4MDAsMHg2MSwweDAwLDB4NzIsMHgwMCwweDY1LDB4MDAsMHgyMCwweDAwfX0sCisgezE2LDB4MTE3MCwwLHsweDQ2LDB4MDAsMHg3MiwweDAwLDB4NjEsMHgwMCwweDZkLDB4MDAsMHg2NSwweDAwLDB4NTcsMHgwMCwweDZmLDB4MDAsMHg3MiwweDAwfX0sCisgezE2LDB4MTE4MCwwLHsweDZiLDB4MDAsMHg3MywweDAwLDB4MmEsMHgwMywweDQzLDB4MDAsMHg2ZiwweDAwLDB4NmUsMHgwMCwweDY2LDB4MDAsMHg2OSwweDAwfX0sCisgezE2LDB4MTE5MCwwLHsweDY3LDB4MDAsMHg3NSwweDAwLDB4NzIsMHgwMCwweDYxLDB4MDAsMHg3NCwweDAwLDB4NjksMHgwMCwweDZmLDB4MDAsMHg2ZSwweDAwfX0sCisgezE2LDB4MTFhMCwwLHsweDIwLDB4MDAsMHg1MywweDAwLDB4NzQsMHgwMCwweDcyLDB4MDAsMHg2OSwweDAwLDB4NmUsMHgwMCwweDY3LDB4MDAsMHgyMiwweDAzfX0sCisgezE2LDB4MTFiMCwwLHsweDQ5LDB4MDAsMHg2ZSwweDAwLDB4NzQsMHgwMCwweDY1LDB4MDAsMHg3MiwweDAwLDB4NjYsMHgwMCwweDYxLDB4MDAsMHg2MywweDAwfX0sCisgezE2LDB4MTFjMCwwLHsweDY1LDB4MDAsMHgyMCwweDAwLDB4NTMsMHgwMCwweDc0LDB4MDAsMHg3MiwweDAwLDB4NjksMHgwMCwweDZlLDB4MDAsMHg2NywweDAwfX0sCisgeyAyLDB4MTFkMCwwLHsweDAwLDB4MDB9fSwKKyB7IDAsMHgwMDAwLDEsezB9fQorfTsKKy8qIFNvdXJjZTogRU1JTE9BRC5IRVggCis6MTAwNDZFMDAwMjBBMDAwRjAxMEMxMTA0MEQwMDAwMDAwMDQxMDAwMEYzCis6MDEwNDdFMDAwMDdECis6MTAwMUM3MDA5MDdGRTlFMDI0NUI2MDYwMjQwMjYwMDMwMjAyODU5MDZGCis6MTAwMUQ3MDA3RkVBRTA3NTBBMDBGNTBCQTNFMEZFRTRFRTQyMEE5MDIxCis6MTAwMUU3MDA3RkVFRTA3NTE1MDBGNTE2QTNFMEZFRTRFRTQyMTVFNTk3Cis6MTAwMUY3MDAxNjQ1MTU3MDAzMDIwMjg1RTQ5MDdGQzVGMDkwN0ZCNDIxCis6MTAwMjA3MDBFMDIwRTNGOTkwN0ZDNUUwRjUwQzEyMDMxM0FGMEM3RUY1Cis6MTAwMjE3MDAwMEVGMjUwQkY1MEJFRTM1MEFGNTBBQzNFNTE2OUZGNTNBCis6MTAwMjI3MDAxNkU1MTU5RUY1MTU4MEM3OTA3RkVBRTA3NTBBMDBGNTdCCis6MTAwMjM3MDAwQkEzRTBGRUU0RUU0MjBBOTA3RkVFRTA3NTE1MDBGNUIxCis6MTAwMjQ3MDAxNkEzRTBGRUU0RUU0MjE1RTUxNjQ1MTU2MDMwRTQ5MDhFCis6MTAwMjU3MDA3RkM1RjA5MDdGQjRFMDIwRTNGOTkwN0ZDNUUwRjUwQzBGCis6MTAwMjY3MDAxMjAzMkJBRjBDN0UwMEVGMjUwQkY1MEJFRTM1MEFGNUNECis6MEYwMjc3MDAwQUMzRTUxNjlGRjUxNkU1MTU5RUY1MTU4MENBQzM1NworOjAxMDI4NjAwMjI1NQorOjEwMDNBOTAwQzBFMEMwODNDMDgyRDIyMDUzOTFFRjkwN0ZBQjc0MDEyQgorOjA4MDNCOTAwRjBEMDgyRDA4M0QwRTAzMkM1Cis6MTAwMzhFMDBDMEUwQzA4M0MwODI5MDdGQzRFNEYwNTM5MUVGOTA3RkIxCis6MEIwMzlFMDBBQjc0MDRGMEQwODJEMDgzRDBFMDMyQkEKKzoxMDAzQzEwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQjc0MDJGMEQwNDQKKzowNjAzRDEwMDgyRDA4M0QwRTAzMjZGCis6MTAwM0Q3MDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUI3NDEwRjBEMDIwCis6MDYwM0U3MDA4MkQwODNEMEUwMzI1OQorOjAxMDNGRTAwMzJDQworOjEwMDQ1ODAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFCNzQwOEYwRDBBNgorOjA2MDQ2ODAwODJEMDgzRDBFMDMyRDcKKzowMTAzRkYwMDMyQ0IKKzowMTA0ODQwMDMyNDUKKzowMTA0ODUwMDMyNDQKKzowMTA0ODYwMDMyNDMKKzowMTA0ODcwMDMyNDIKKzowMTA0ODgwMDMyNDEKKzowMTA0ODkwMDMyNDAKKzowMTA0OEEwMDMyM0YKKzowMTA0OEIwMDMyM0UKKzowMTA0OEMwMDMyM0QKKzowMTA0OEQwMDMyM0MKKzowMTA0OEUwMDMyM0IKKzowMTA0OEYwMDMyM0EKKzowMTA0OTAwMDMyMzkKKzowMTA0OTEwMDMyMzgKKzowMTA0OTIwMDMyMzcKKzowNDA0N0YwMDAyMTcwMDAwNjAKKzoxMDAxMDAwMEU0RkZGRUMyMjBEMkU4NDNEODIwOTA3RkFCNzRGRkYwMUEKKzoxMDAxMTAwMDkwN0ZBOUYwOTA3RkFBRjA1MzkxRUY5MDdGOTU3NEMwRTMKKzoxMDAxMjAwMEYwOTA3RjlFRjA5MDdGOThGMEU0OTA3Rjk0RjA5MDdGMjUKKzoxMDAxMzAwMDlENzRGRkYwOTA3Rjk3NzRBMEYwOTA3RjkzRTA1NEZDNDMKKzoxMDAxNDAwMEYwOTA3RjlDNzQwM0YwRTQ5MDdGOTZGMDkwN0ZBRkUwOTYKKzoxMDAxNTAwMDQ0MDFGMDkwN0ZBRUUwNDQwREYwRDJBRjBGQkYwMDAxM0MKKzoxMDAxNjAwMDBFQkUwN0Y4QkYwOEY1MjAyMDQyNzUxNDAwNzUxMzAwNzUKKzoxMDAxNzAwMDc1MTIwMDc1MTEwMDdGNDg3RTkyN0QwMDdDMDBBQjE0RTMKKzoxMDAxODAwMEFBMTNBOTEyQTgxMUMzMTIwM0VENTBEQjIwMjBEODdBQkMKKzoxMDAxOTAwMDAwNzkwMDc4MDBFNTE0MjQwMUY1MTRFQTM1MTNGNTEzMEQKKzoxMDAxQTAwMEU5MzUxMkY1MTJFODM1MTFGNTExODBDQTMwMjBGRDEyM0IKKzoxMDAxQjAwMDAxQzc1MDA3OTA3RkI0RTA0NDAxRjA5MDdGQjRFMDQ0NjEKKzowNjAxQzAwMDAyRjBDMjIwODBFNkZGCis6MDEwMUM2MDAyMjE2Cis6MTAxMTAwMDAxMjAxMTAwMTAwMDAwMDQwNkEwODAxMDEwMDAxMDEwMjAzCis6MTAxMTEwMDAwMDAxMDkwMjIwMDAwMTAxMDNBMDAwMDkwNDAwMDAwMkVGCis6MTAxMTIwMDBGRjAwMDAwNDA3MDU4MjAyNDAwMDAwMDcwNTAyMDI0MDlDCis6MTAxMTMwMDAwMDAwMDQwMzA5MDQyNjAzNDEwMDZFMDA2MzAwNjgwMEY4Cis6MTAxMTQwMDA2RjAwNzIwMDIwMDA0MzAwNjgwMDY5MDA3MDAwNzMwMEE3Cis6MTAxMTUwMDAyQzAwMjAwMDQ5MDA2RTAwNjMwMDJFMDAyODAzNDYwMDhBCis6MTAxMTYwMDA2OTAwNzIwMDZEMDA3NzAwNjEwMDcyMDA2NTAwMjAwMDY4Cis6MTAxMTcwMDA0NjAwNzIwMDYxMDA2RDAwNjUwMDU3MDA2RjAwNzIwMDRDCis6MTAxMTgwMDA2QjAwNzMwMDJBMDM0MzAwNkYwMDZFMDA2NjAwNjkwMDY1Cis6MTAxMTkwMDA2NzAwNzUwMDcyMDA2MTAwNzQwMDY5MDA2RjAwNkUwMEU2Cis6MTAxMUEwMDAyMDAwNTMwMDc0MDA3MjAwNjkwMDZFMDA2NzAwMjIwMzgzCis6MTAxMUIwMDA0OTAwNkUwMDc0MDA2NTAwNzIwMDY2MDA2MTAwNjMwMDAzCis6MTAxMUMwMDA2NTAwMjAwMDUzMDA3NDAwNzIwMDY5MDA2RTAwNjcwMDIzCis6MDIxMUQwMDAwMDAwMUQKKzoxMDAzMTMwMEU1MENGRkU1MEJGNTgyRTUwQUY1ODM3NTkyN0U3NEMwNjMKKzowODAzMjMwMEY4RTIwOEYwQTNERkZBMjI2MgorOjEwMDMyQjAwOTA3Rjk2ODU4MzkyQTg4Mjc5MDI5MDAwMDBFMEI0MDBCQQorOjEwMDMzQjAwMEQ3NDAxRjA5MDdGOTdFMDU0N0ZGMDQ0ODBGMEU1MEM1MgorOjEwMDM0QjAwRkY5MDdFQzBFMEY1MjhFNEEyNDczM0YyNjlGMkU0QTIwNQorOjEwMDM1QjAwNDYzM0YyNjlGMkU0QTI0NTMzRjI2OUYyRTRBMjQ0MzM4NAorOjEwMDM2QjAwRjI2OUYyRTRBMjQzMzNGMjY5RjJFNEEyNDIzM0YyNjk5NgorOjEwMDM3QjAwRjJFNEEyNDEzM0YyNjlGMkU0QTI0MDMzRjI2OUYyQTM1MAorOjAzMDM4QjAwREZDMjIyQUMKKzowMzAwNDMwMDAyMDQwMEI0Cis6MTAwNDAwMDAwMjAzQTkwMDAyMDNDMTAwMDIwMzhFMDAwMjA0NTgwMDg3Cis6MTAwNDEwMDAwMjAzRDcwMDAyMDNGRTAwMDIwM0ZGMDAwMjA0ODQwMDZGCis6MTAwNDIwMDAwMjA0ODUwMDAyMDQ4NjAwMDIwNDg3MDAwMjA0ODgwMDlBCis6MTAwNDMwMDAwMjA0ODkwMDAyMDQ4QTAwMDIwNDhCMDAwMjA0OEMwMDdBCis6MTAwNDQwMDAwMjA0OEQwMDAyMDQ4RTAwMDIwNDhGMDAwMjA0OTAwMDVBCis6MDgwNDUwMDAwMjA0OTEwMDAyMDQ5MjAwNzUKKzowMzAwMDAwMDAyMDI4NzcyCis6MEMwMjg3MDA3ODdGRTRGNkQ4RkQ3NTgxMjkwMjAyQ0VENAorOjEwMDNFRDAwRUI5RkY1RjBFQTlFNDJGMEU5OUQ0MkYwRTg5QzQ1RjA2NgorOjAxMDNGRDAwMjJERAorOjEwMDI5MzAwMDIwMTAwRTQ5M0EzRjhFNDkzQTM0MDAzRjY4MDAxRjI4MAorOjEwMDJBMzAwMDhERkY0ODAyOUU0OTNBM0Y4NTQwNzI0MENDOEMzMzM2QworOjEwMDJCMzAwQzQ1NDBGNDQyMEM4ODM0MDA0RjQ1NjgwMDE0NkY2REYzQgorOjEwMDJDMzAwRTQ4MDBCMDEwMjA0MDgxMDIwNDA4MDkwMDQ2RUU0N0U1OQorOjEwMDJEMzAwMDE5MzYwQkNBM0ZGNTQzRjMwRTUwOTU0MUZGRUU0OTMzMAorOjEwMDJFMzAwQTM2MDAxMEVDRjU0QzAyNUUwNjBBODQwQjhFNDkzQTNGNworOjEwMDJGMzAwRkFFNDkzQTNGOEU0OTNBM0M4QzU4MkM4Q0FDNTgzQ0EyMgorOjEwMDMwMzAwRjBBM0M4QzU4MkM4Q0FDNTgzQ0FERkU5REVFNzgwQkVEOQorOjAxMDQ4MzAwMDA3OAorOjAwMDAwMDAxRkYKKyovCisvKgorVkVSU0lPTj0xLjAuMi4wMDIKK0RBVEU9MTAuMDEuMjAwMgorRU1JMjZfNjIKKyovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2lkbW91c2UuYyBiL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMDMwZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL2lkbW91c2UuYwpAQCAtMCwwICsxLDQ0MyBAQAorLyogU2llbWVucyBJRCBNb3VzZSBkcml2ZXIgdjAuNQorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgQ29weXJpZ2h0IChDKSAyMDA0LTUgYnkgRmxvcmlhbiAnRmxvZScgRWNodGxlciAgPGVjaHRsZXJAZnMudHVtLmRlPgorICAgICAgICAgICAgICAgICAgICAgIGFuZCBBbmRyZWFzICAnYWQnICBEZXJlc2NoIDxhZGVyZXNjaEBmcy50dW0uZGU+CisKKyAgRGVyaXZlZCBmcm9tIHRoZSBVU0IgU2tlbGV0b24gZHJpdmVyIDEuMSwKKyAgQ29weXJpZ2h0IChDKSAyMDAzIEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisKKyovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjZGVmaW5lIFdJRFRIIDIyNQorI2RlZmluZSBIRUlHSFQgMjg4CisjZGVmaW5lIEhFQURFUiAiUDUgMjI1IDI4OCAyNTUgIgorI2RlZmluZSBJTUdTSVpFICgoV0lEVEggKiBIRUlHSFQpICsgc2l6ZW9mKEhFQURFUiktMSkKKworLyogVmVyc2lvbiBJbmZvcm1hdGlvbiAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMC41IgorI2RlZmluZSBEUklWRVJfU0hPUlQgICAiaWRtb3VzZSIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAgIkZsb3JpYW4gJ0Zsb2UnIEVjaHRsZXIgPGVjaHRsZXJAZnMudHVtLmRlPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgICAgIlNpZW1lbnMgSUQgTW91c2UgRmluZ2VyVElQIFNlbnNvciBEcml2ZXIiCisKKy8qIFNpZW1lbnMgSUQgTW91c2UgKi8KKyNkZWZpbmUgVVNCX0lETU9VU0VfVkVORE9SX0lEICAweDA2ODEKKyNkZWZpbmUgVVNCX0lETU9VU0VfUFJPRFVDVF9JRCAweDAwMDUKKworLyogd2Ugc3RpbGwgbmVlZCBhIG1pbm9yIG51bWJlciAqLworI2RlZmluZSBVU0JfSURNT1VTRV9NSU5PUl9CQVNFIDEzMgorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRtb3VzZV90YWJsZVtdID0geworCXtVU0JfREVWSUNFKFVTQl9JRE1PVVNFX1ZFTkRPUl9JRCwgVVNCX0lETU9VU0VfUFJPRFVDVF9JRCl9LAorCXt9IC8qIG51bGwgZW50cnkgYXQgdGhlIGVuZCAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkbW91c2VfdGFibGUpOworCisvKiBzdHJ1Y3R1cmUgdG8gaG9sZCBhbGwgb2Ygb3VyIGRldmljZSBzcGVjaWZpYyBzdHVmZiAqLworc3RydWN0IHVzYl9pZG1vdXNlIHsKKworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OyAvKiBzYXZlIG9mZiB0aGUgdXNiIGRldmljZSBwb2ludGVyICovCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsgLyogdGhlIGludGVyZmFjZSBmb3IgdGhpcyBkZXZpY2UgKi8KKworCXVuc2lnbmVkIGNoYXIgKmJ1bGtfaW5fYnVmZmVyOyAvKiB0aGUgYnVmZmVyIHRvIHJlY2VpdmUgZGF0YSAqLworCXNpemVfdCBidWxrX2luX3NpemU7IC8qIHRoZSBzaXplIG9mIHRoZSByZWNlaXZlIGJ1ZmZlciAqLworCV9fdTggYnVsa19pbl9lbmRwb2ludEFkZHI7IC8qIHRoZSBhZGRyZXNzIG9mIHRoZSBidWxrIGluIGVuZHBvaW50ICovCisKKwlpbnQgb3BlbjsgLyogaWYgdGhlIHBvcnQgaXMgb3BlbiBvciBub3QgKi8KKwlpbnQgcHJlc2VudDsgLyogaWYgdGhlIGRldmljZSBpcyBub3QgZGlzY29ubmVjdGVkICovCisJc3RydWN0IHNlbWFwaG9yZSBzZW07IC8qIGxvY2tzIHRoaXMgc3RydWN0dXJlICovCisKK307CisKKy8qIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBzc2l6ZV90IGlkbW91c2VfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqIHBwb3MpOworCitzdGF0aWMgaW50IGlkbW91c2Vfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IGlkbW91c2VfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CisKK3N0YXRpYyBpbnQgaWRtb3VzZV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CisKK3N0YXRpYyB2b2lkIGlkbW91c2VfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKKworLyogZmlsZSBvcGVyYXRpb24gcG9pbnRlcnMgKi8KK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlkbW91c2VfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkucmVhZCA9IGlkbW91c2VfcmVhZCwKKwkub3BlbiA9IGlkbW91c2Vfb3BlbiwKKwkucmVsZWFzZSA9IGlkbW91c2VfcmVsZWFzZSwKK307CisKKy8qIGNsYXNzIGRyaXZlciBpbmZvcm1hdGlvbiBmb3IgZGV2ZnMgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciBpZG1vdXNlX2NsYXNzID0geworCS5uYW1lID0gInVzYi9pZG1vdXNlJWQiLAorCS5mb3BzID0gJmlkbW91c2VfZm9wcywKKwkubW9kZSA9IFNfSUZDSFIgfCBTX0lSVVNSIHwgU19JUkdSUCB8IFNfSVJPVEgsIC8qIGZpbGVtb2RlIChjaGFyLCA0NDQpICovCisJLm1pbm9yX2Jhc2UgPSBVU0JfSURNT1VTRV9NSU5PUl9CQVNFLAorfTsKKworLyogdXNiIHNwZWNpZmljIG9iamVjdCBuZWVkZWQgdG8gcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgdXNiIHN1YnN5c3RlbSAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGlkbW91c2VfZHJpdmVyID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gRFJJVkVSX1NIT1JULAorCS5wcm9iZSA9IGlkbW91c2VfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBpZG1vdXNlX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0gaWRtb3VzZV90YWJsZSwKK307CisKKy8vIHByZXZlbnQgcmFjZXMgYmV0d2VlbiBvcGVuKCkgYW5kIGRpc2Nvbm5lY3QoKQorc3RhdGljIERFQ0xBUkVfTVVURVgoZGlzY29ubmVjdF9zZW0pOworCitzdGF0aWMgaW50IGlkbW91c2VfY3JlYXRlX2ltYWdlKHN0cnVjdCB1c2JfaWRtb3VzZSAqZGV2KQoreworCWludCBieXRlc19yZWFkID0gMDsKKwlpbnQgYnVsa19yZWFkID0gMDsKKwlpbnQgcmVzdWx0ID0gMDsKKworCWlmIChkZXYtPmJ1bGtfaW5fc2l6ZSA8IHNpemVvZihIRUFERVIpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbWNweShkZXYtPmJ1bGtfaW5fYnVmZmVyLEhFQURFUixzaXplb2YoSEVBREVSKS0xKTsKKwlieXRlc19yZWFkICs9IHNpemVvZihIRUFERVIpLTE7CisKKwkvKiBEdW1wIHRoZSBzZXR1cCBwYWNrZXRzLiBZZXMsIHRoZXkgYXJlIHVuY29tbWVudGVkLCBzaW1wbHkgCisJICAgYmVjYXVzZSB0aGV5IHdlcmUgc25pZmZlZCB1bmRlciBXaW5kb3dzIHVzaW5nIFNub29weVByby4KKwkgICBJIF9ndWVzc18gdGhhdCAweDIyIGlzIGEga2luZCBvZiByZXNldCBjb21tYW5kIGFuZCAweDIxIAorCSAgIG1lYW5zIGluaXQuLgorCSovCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnIChkZXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZSAoZGV2LT51ZGV2LCAwKSwKKwkJCQkweDIxLCAweDQyLCAweDAwMDEsIDB4MDAwMiwgTlVMTCwgMCwgMTAwMCk7CisJaWYgKHJlc3VsdCA8IDApCisJCXJldHVybiByZXN1bHQ7CisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnIChkZXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZSAoZGV2LT51ZGV2LCAwKSwKKwkJCQkweDIwLCAweDQyLCAweDAwMDEsIDB4MDAwMiwgTlVMTCwgMCwgMTAwMCk7CisJaWYgKHJlc3VsdCA8IDApCisJCXJldHVybiByZXN1bHQ7CisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnIChkZXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZSAoZGV2LT51ZGV2LCAwKSwKKwkJCQkweDIyLCAweDQyLCAweDAwMDAsIDB4MDAwMiwgTlVMTCwgMCwgMTAwMCk7CisJaWYgKHJlc3VsdCA8IDApCisJCXJldHVybiByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKGRldi0+dWRldiwgdXNiX3NuZGN0cmxwaXBlIChkZXYtPnVkZXYsIDApLAorCQkJCTB4MjEsIDB4NDIsIDB4MDAwMSwgMHgwMDAyLCBOVUxMLCAwLCAxMDAwKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIHJlc3VsdDsKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKGRldi0+dWRldiwgdXNiX3NuZGN0cmxwaXBlIChkZXYtPnVkZXYsIDApLAorCQkJCTB4MjAsIDB4NDIsIDB4MDAwMSwgMHgwMDAyLCBOVUxMLCAwLCAxMDAwKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIHJlc3VsdDsKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKGRldi0+dWRldiwgdXNiX3NuZGN0cmxwaXBlIChkZXYtPnVkZXYsIDApLAorCQkJCTB4MjAsIDB4NDIsIDB4MDAwMCwgMHgwMDAyLCBOVUxMLCAwLCAxMDAwKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCS8qIGxvb3Agb3ZlciBhIGJsb2NraW5nIGJ1bGsgcmVhZCB0byBnZXQgZGF0YSBmcm9tIHRoZSBkZXZpY2UgKi8KKwl3aGlsZSAoYnl0ZXNfcmVhZCA8IElNR1NJWkUpIHsKKwkJcmVzdWx0ID0gdXNiX2J1bGtfbXNnIChkZXYtPnVkZXYsCisJCQkJdXNiX3JjdmJ1bGtwaXBlIChkZXYtPnVkZXYsIGRldi0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAorCQkJCWRldi0+YnVsa19pbl9idWZmZXIgKyBieXRlc19yZWFkLAorCQkJCWRldi0+YnVsa19pbl9zaXplLCAmYnVsa19yZWFkLCA1MDAwKTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlyZXR1cm4gcmVzdWx0OworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQlyZXR1cm4gLUVJTlRSOworCQlieXRlc19yZWFkICs9IGJ1bGtfcmVhZDsKKwl9CisKKwkvKiByZXNldCB0aGUgZGV2aWNlICovCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnIChkZXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZSAoZGV2LT51ZGV2LCAwKSwKKwkJCQkweDIyLCAweDQyLCAweDAwMDAsIDB4MDAwMiwgTlVMTCwgMCwgMTAwMCk7CisJaWYgKHJlc3VsdCA8IDApCisJCXJldHVybiByZXN1bHQ7CisKKwkvKiBzaG91bGQgYmUgSU1HU0laRSA9PSA2NDgxNSAqLworCWRiZygicmVhZCAlZCBieXRlcyBmaW5nZXJwcmludCBkYXRhIiwgYnl0ZXNfcmVhZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZG1vdXNlX2RlbGV0ZShzdHJ1Y3QgdXNiX2lkbW91c2UgKmRldikKK3sKKwlrZnJlZShkZXYtPmJ1bGtfaW5fYnVmZmVyKTsKKwlrZnJlZShkZXYpOworfQorCitzdGF0aWMgaW50IGlkbW91c2Vfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdXNiX2lkbW91c2UgKmRldiA9IE5VTEw7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlpbnQgcmVzdWx0ID0gMDsKKworCS8qIHByZXZlbnQgZGlzY29ubmVjdHMgKi8KKwlkb3duKCZkaXNjb25uZWN0X3NlbSk7CisKKwkvKiBnZXQgdGhlIGludGVyZmFjZSBmcm9tIG1pbm9yIG51bWJlciBhbmQgZHJpdmVyIGluZm9ybWF0aW9uICovCisJaW50ZXJmYWNlID0gdXNiX2ZpbmRfaW50ZXJmYWNlICgmaWRtb3VzZV9kcml2ZXIsIGltaW5vciAoaW5vZGUpKTsKKwlpZiAoIWludGVyZmFjZSkgeworCQl1cCgmZGlzY29ubmVjdF9zZW0pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJLyogZ2V0IHRoZSBkZXZpY2UgaW5mb3JtYXRpb24gYmxvY2sgZnJvbSB0aGUgaW50ZXJmYWNlICovCisJZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCWlmICghZGV2KSB7CisJCXVwKCZkaXNjb25uZWN0X3NlbSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIGxvY2sgdGhpcyBkZXZpY2UgKi8KKwlkb3duKCZkZXYtPnNlbSk7CisKKwkvKiBjaGVjayBpZiBhbHJlYWR5IG9wZW4gKi8KKwlpZiAoZGV2LT5vcGVuKSB7CisKKwkJLyogYWxyZWFkeSBvcGVuLCBzbyBmYWlsICovCisJCXJlc3VsdCA9IC1FQlVTWTsKKworCX0gZWxzZSB7CisKKwkJLyogY3JlYXRlIGEgbmV3IGltYWdlIGFuZCBjaGVjayBmb3Igc3VjY2VzcyAqLworCQlyZXN1bHQgPSBpZG1vdXNlX2NyZWF0ZV9pbWFnZSAoZGV2KTsKKwkJaWYgKHJlc3VsdCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJLyogaW5jcmVtZW50IG91ciB1c2FnZSBjb3VudCBmb3IgdGhlIGRyaXZlciAqLworCQkrK2Rldi0+b3BlbjsKKworCQkvKiBzYXZlIG91ciBvYmplY3QgaW4gdGhlIGZpbGUncyBwcml2YXRlIHN0cnVjdHVyZSAqLworCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBkZXY7CisKKwl9IAorCitlcnJvcjoKKworCS8qIHVubG9jayB0aGlzIGRldmljZSAqLworCXVwKCZkZXYtPnNlbSk7CisKKwkvKiB1bmxvY2sgdGhlIGRpc2Nvbm5lY3Qgc2VtYXBob3JlICovCisJdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGlkbW91c2VfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdXNiX2lkbW91c2UgKmRldjsKKworCS8qIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiB3aXRoIG9wZW4oKSAqLworCWRvd24oJmRpc2Nvbm5lY3Rfc2VtKTsKKworCWRldiA9IChzdHJ1Y3QgdXNiX2lkbW91c2UgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKGRldiA9PSBOVUxMKSB7CisJCXVwKCZkaXNjb25uZWN0X3NlbSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIGxvY2sgb3VyIGRldmljZSAqLworCWRvd24oJmRldi0+c2VtKTsKKworCS8qIGFyZSB3ZSByZWFsbHkgb3Blbj8gKi8KKwlpZiAoZGV2LT5vcGVuIDw9IDApIHsKKwkJdXAoJmRldi0+c2VtKTsKKwkJdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLS1kZXYtPm9wZW47CisKKwlpZiAoIWRldi0+cHJlc2VudCkgeworCQkvKiB0aGUgZGV2aWNlIHdhcyB1bnBsdWdnZWQgYmVmb3JlIHRoZSBmaWxlIHdhcyByZWxlYXNlZCAqLworCQl1cCgmZGV2LT5zZW0pOworCQlpZG1vdXNlX2RlbGV0ZShkZXYpOworCQl1cCgmZGlzY29ubmVjdF9zZW0pOworCQlyZXR1cm4gMDsKKwl9CisKKwl1cCgmZGV2LT5zZW0pOworCXVwKCZkaXNjb25uZWN0X3NlbSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGlkbW91c2VfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LAorCQkJCWxvZmZfdCAqIHBwb3MpCit7CisJc3RydWN0IHVzYl9pZG1vdXNlICpkZXY7CisJaW50IHJlc3VsdCA9IDA7CisKKwlkZXYgPSAoc3RydWN0IHVzYl9pZG1vdXNlICopIGZpbGUtPnByaXZhdGVfZGF0YTsKKworCS8vIGxvY2sgdGhpcyBvYmplY3QKKwlkb3duICgmZGV2LT5zZW0pOworCisJLy8gdmVyaWZ5IHRoYXQgdGhlIGRldmljZSB3YXNuJ3QgdW5wbHVnZ2VkCisJaWYgKCFkZXYtPnByZXNlbnQpIHsKKwkJdXAgKCZkZXYtPnNlbSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICgqcHBvcyA+PSBJTUdTSVpFKSB7CisJCXVwICgmZGV2LT5zZW0pOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoY291bnQgPiBJTUdTSVpFIC0gKnBwb3MpCisJCWNvdW50ID0gSU1HU0laRSAtICpwcG9zOworCisJaWYgKGNvcHlfdG9fdXNlciAoYnVmZmVyLCBkZXYtPmJ1bGtfaW5fYnVmZmVyICsgKnBwb3MsIGNvdW50KSkgeworCQlyZXN1bHQgPSAtRUZBVUxUOworCX0gZWxzZSB7CisJCXJlc3VsdCA9IGNvdW50OworCQkqcHBvcyArPSBjb3VudDsKKwl9CisKKwkvLyB1bmxvY2sgdGhlIGRldmljZSAKKwl1cCgmZGV2LT5zZW0pOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgaWRtb3VzZV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiX2lkbW91c2UgKmRldiA9IE5VTEw7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYzsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCXNpemVfdCBidWZmZXJfc2l6ZTsKKwlpbnQgcmVzdWx0OworCisJLyogY2hlY2sgaWYgd2UgaGF2ZSBnb3R0ZW4gdGhlIGRhdGEgb3IgdGhlIGhpZCBpbnRlcmZhY2UgKi8KKwlpZmFjZV9kZXNjID0gJmludGVyZmFjZS0+YWx0c2V0dGluZ1swXTsKKwlpZiAoaWZhY2VfZGVzYy0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gMHgwQSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2Ugc3RhdGUgYW5kIGluaXRpYWxpemUgaXQgKi8KKwlkZXYgPSBrbWFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQoZGV2LCAweDAwLCBzaXplb2YoKmRldikpOworCisJaW5pdF9NVVRFWCgmZGV2LT5zZW0pOworCWRldi0+dWRldiA9IHVkZXY7CisJZGV2LT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisKKwkvKiBzZXQgdXAgdGhlIGVuZHBvaW50IGluZm9ybWF0aW9uIC0gdXNlIG9ubHkgdGhlIGZpcnN0IGJ1bGstaW4gZW5kcG9pbnQgKi8KKwllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFswXS5kZXNjOworCWlmICghZGV2LT5idWxrX2luX2VuZHBvaW50QWRkcgorCQkmJiAoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKQorCQkmJiAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KKwkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSykpIHsKKworCQkvKiB3ZSBmb3VuZCBhIGJ1bGsgaW4gZW5kcG9pbnQgKi8KKwkJYnVmZmVyX3NpemUgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOworCQlkZXYtPmJ1bGtfaW5fc2l6ZSA9IGJ1ZmZlcl9zaXplOworCQlkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCWRldi0+YnVsa19pbl9idWZmZXIgPQorCQkJa21hbGxvYyhJTUdTSVpFICsgYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCisJCWlmICghZGV2LT5idWxrX2luX2J1ZmZlcikgeworCQkJZXJyKCJVbmFibGUgdG8gYWxsb2NhdGUgaW5wdXQgYnVmZmVyLiIpOworCQkJaWRtb3VzZV9kZWxldGUoZGV2KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCisJaWYgKCEoZGV2LT5idWxrX2luX2VuZHBvaW50QWRkcikpIHsKKwkJZXJyKCJVbmFibGUgdG8gZmluZCBidWxrLWluIGVuZHBvaW50LiIpOworCQlpZG1vdXNlX2RlbGV0ZShkZXYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJLyogYWxsb3cgZGV2aWNlIHJlYWQsIHdyaXRlIGFuZCBpb2N0bCAqLworCWRldi0+cHJlc2VudCA9IDE7CisKKwkvKiB3ZSBjYW4gcmVnaXN0ZXIgdGhlIGRldmljZSBub3csIGFzIGl0IGlzIHJlYWR5ICovCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGRldik7CisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyX2RldihpbnRlcmZhY2UsICZpZG1vdXNlX2NsYXNzKTsKKwlpZiAocmVzdWx0KSB7CisJCS8qIHNvbWV0aGluZyBwcmV2ZW50ZWQgdXMgZnJvbSByZWdpc3RlcmluZyB0aGlzIGRldmljZSAqLworCQllcnIoIlVuYmxlIHRvIGFsbG9jYXRlIG1pbm9yIG51bWJlci4iKTsKKwkJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCQlpZG1vdXNlX2RlbGV0ZShkZXYpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qIGJlIG5vaXN5ICovCisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCIlcyBub3cgYXR0YWNoZWRcbiIsRFJJVkVSX0RFU0MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlkbW91c2VfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfaWRtb3VzZSAqZGV2OworCisJLyogcHJldmVudCByYWNlcyB3aXRoIG9wZW4oKSAqLworCWRvd24oJmRpc2Nvbm5lY3Rfc2VtKTsKKworCS8qIGdldCBkZXZpY2Ugc3RydWN0dXJlICovCisJZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKworCS8qIGxvY2sgaXQgKi8KKwlkb3duKCZkZXYtPnNlbSk7CisKKwkvKiBnaXZlIGJhY2sgb3VyIG1pbm9yICovCisJdXNiX2RlcmVnaXN0ZXJfZGV2KGludGVyZmFjZSwgJmlkbW91c2VfY2xhc3MpOworCisJLyogcHJldmVudCBkZXZpY2UgcmVhZCwgd3JpdGUgYW5kIGlvY3RsICovCisJZGV2LT5wcmVzZW50ID0gMDsKKworCS8qIHVubG9jayAqLworCXVwKCZkZXYtPnNlbSk7CisKKwkvKiBpZiB0aGUgZGV2aWNlIGlzIG9wZW5lZCwgaWRtb3VzZV9yZWxlYXNlIHdpbGwgY2xlYW4gdGhpcyB1cCAqLworCWlmICghZGV2LT5vcGVuKQorCQlpZG1vdXNlX2RlbGV0ZShkZXYpOworCisJdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKKworCWluZm8oIiVzIGRpc2Nvbm5lY3RlZCIsIERSSVZFUl9ERVNDKTsKK30KKworc3RhdGljIGludCBfX2luaXQgdXNiX2lkbW91c2VfaW5pdCh2b2lkKQoreworCWludCByZXN1bHQ7CisKKwlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisKKwkvKiByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZpZG1vdXNlX2RyaXZlcik7CisJaWYgKHJlc3VsdCkKKwkJZXJyKCJVbmFibGUgdG8gcmVnaXN0ZXIgZGV2aWNlIChlcnJvciAlZCkuIiwgcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2JfaWRtb3VzZV9leGl0KHZvaWQpCit7CisJLyogZGVyZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisJdXNiX2RlcmVnaXN0ZXIoJmlkbW91c2VfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNiX2lkbW91c2VfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2JfaWRtb3VzZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMgYi9kcml2ZXJzL3VzYi9taXNjL2xlZ291c2J0b3dlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNDU4MGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL2xlZ291c2J0b3dlci5jCkBAIC0wLDAgKzEsMTA4OCBAQAorLyoKKyAqIExFR08gVVNCIFRvd2VyIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBHbGFuY2UgPGRhdmlkZ3NmQHNvdXJjZWZvcmdlLm5ldD4KKyAqICAgICAgICAgICAgICAgMjAwMS0yMDA0IEp1ZXJnZW4gU3R1YmVyIDxzdGFyYmx1ZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKgl0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBkZXJpdmVkIGZyb20gVVNCIFNrZWxldG9uIGRyaXZlciAtIDAuNQorICogQ29weXJpZ2h0IChDKSAyMDAxIEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisgKgorICogSGlzdG9yeToKKyAqCisgKiAyMDAxLTEwLTEzIC0gMC4xIGpzCisgKiAgIC0gZmlyc3QgdmVyc2lvbgorICogMjAwMS0xMS0wMyAtIDAuMiBqcworICogICAtIHNpbXBsaWZpZWQgYnVmZmVyaW5nLCBvbmUtc2hvdCBVUkJzIGZvciB3cml0aW5nCisgKiAyMDAxLTExLTEwIC0gMC4zIGpzCisgKiAgIC0gcmVtb3ZlZCBJT0NUTCAoc2V0dGluZyBwb3dlci9tb2RlIGlzIG1vcmUgY29tcGxpY2F0ZWQsIHBvc3Rwb25lZCkKKyAqIDIwMDEtMTEtMjggLSAwLjQganMKKyAqICAgLSBhZGRlZCB2ZW5kb3IgY29tbWFuZHMgZm9yIG1vZGUgb2Ygb3BlcmF0aW9uIGFuZCBwb3dlciBsZXZlbCBpbiBvcGVuCisgKiAyMDAxLTEyLTA0IC0gMC41IGpzCisgKiAgIC0gc2V0IElSIG1vZGUgYnkgZGVmYXVsdCAoYnkgb3ZlcnNpZ2h0IDAuNCBzZXQgVkxMIG1vZGUpCisgKiAyMDAyLTAxLTExIC0gMC41PyBwY2NoYW4KKyAqICAgLSBtYWtlIHJlYWQgYnVmZmVyIHJldXNhYmxlIGFuZCB3b3JrIGFyb3VuZCBieXRlc190b193cml0ZSBpc3N1ZSBiZXR3ZWVuCisgKiAgICAgdWhjaSBhbmQgbGVndXNidG93ZXIKKyAqIDIwMDItMDktMjMgLSAwLjUyIGRhdmlkIChkYXZpZEBjc3NlLnV3YS5lZHUuYXUpCisgKiAgIC0gaW1wb3J0ZWQgaW50byBsZWpvcyBwcm9qZWN0CisgKiAgIC0gY2hhbmdlZCB3YWtlX3VwIHRvIHdha2VfdXBfaW50ZXJydXB0aWJsZQorICogICAtIGNoYW5nZWQgdG8gdXNlIGxlZ28wIHJhdGhlciB0aGFuIHRvd2VyMAorICogICAtIGNoYW5nZWQgZGJnKCkgdG8gdXNlIF9fZnVuY19fIHJhdGhlciB0aGFuIGRlcHJlY2F0ZWQgX19GVU5DVElPTl9fCisgKiAyMDAzLTAxLTEyIC0gMC41MyBkYXZpZCAoZGF2aWRAY3NzZS51d2EuZWR1LmF1KQorICogICAtIGNoYW5nZWQgcmVhZCBhbmQgd3JpdGUgdG8gd3JpdGUgZXZlcnl0aGluZyBvcgorICogICAgIHRpbWVvdXQgKGZyb20gYSBwYXRjaCBieSBDaHJpcyBSaWVzZW4gYW5kIEJyZXR0IFRoYWVsZXIgZHJpdmVyKQorICogICAtIGFkZGVkIGlvY3RsIGZ1bmN0aW9uYWxpdHkgdG8gc2V0IHRpbWVvdXRzCisgKiAyMDAzLTA3LTE4IC0gMC41NCBkYXZpZGdzZiAoZGF2aWRAY3NzZS51d2EuZWR1LmF1KQorICogICAtIGluaXRpYWwgaW1wb3J0IGludG8gTGVnb1VTQiBwcm9qZWN0CisgKiAgIC0gbWVyZ2Ugb2YgZXhpc3RpbmcgTGVnb1VTQi5jIGRyaXZlcgorICogMjAwMy0wNy0xOCAtIDAuNTYgZGF2aWRnc2YgKGRhdmlkQGNzc2UudXdhLmVkdS5hdSkKKyAqICAgLSBwb3J0IHRvIDIuNiBzdHlsZSBkcml2ZXIKKyAqIDIwMDQtMDItMjkgLSAwLjYgSnVlcmdlbiBTdHViZXIgPHN0YXJibHVlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqICAgLSBmaXggbG9ja2luZworICogICAtIHVubGluayByZWFkIFVSQnMgd2hpY2ggYXJlIG5vIGxvbmdlciBuZWVkZWQKKyAqICAgLSBhbGxvdyBpbmNyZWFzZWQgYnVmZmVyIHNpemUsIGVsaW1pbmF0ZXMgbmVlZCBmb3IgdGltZW91dCBvbiB3cml0ZQorICogICAtIGhhdmUgcmVhZCBVUkIgcnVubmluZyBjb250aW51b3VzbHkKKyAqICAgLSBhZGRlZCBwb2xsCisgKiAgIC0gZm9yYmlkIHNlZWtpbmcKKyAqICAgLSBhZGRlZCBub25ibG9ja2luZyBJL08KKyAqICAgLSBjaGFuZ2VkIGJhY2sgX19mdW5jX18gdG8gX19GVU5DVElPTl9fCisgKiAgIC0gcmVhZCBhbmQgbG9nIHRvd2VyIGZpcm13YXJlIHZlcnNpb24KKyAqICAgLSByZXNldCB0b3dlciBvbiBwcm9iZSwgYXZvaWRzIGZhaWx1cmUgb2YgZmlyc3Qgd3JpdGUKKyAqIDIwMDQtMDMtMDkgLSAwLjcgSnVlcmdlbiBTdHViZXIgPHN0YXJibHVlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqICAgLSB0aW1lb3V0IHJlYWQgbm93IG9ubHkgYWZ0ZXIgaW5hY3Rpdml0eSwgc2hvcnRlbiBkZWZhdWx0IGFjY29yZGluZ2x5CisgKiAyMDA0LTAzLTExIC0gMC44IEp1ZXJnZW4gU3R1YmVyIDxzdGFyYmx1ZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKiAgIC0gbG9nIG1ham9yLCBtaW5vciBpbnN0ZWFkIG9mIHBvc3NpYmx5IGNvbmZ1c2luZyBkZXZpY2UgZmlsZW5hbWUKKyAqICAgLSB3aGl0ZXNwYWNlIGNsZWFudXAKKyAqIDIwMDQtMDMtMTIgLSAwLjkgSnVlcmdlbiBTdHViZXIgPHN0YXJibHVlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqICAgLSBub3JtYWxpemUgd2hpdGVzcGFjZSBpbiBkZWJ1ZyBtZXNzYWdlcworICogICAtIHRha2UgY2FyZSBhYm91dCBlbmRpYW5uZXNzIGluIGNvbnRyb2wgbWVzc2FnZSByZXNwb25zZXMKKyAqIDIwMDQtMDMtMTMgLSAwLjkxIEp1ZXJnZW4gU3R1YmVyIDxzdGFyYmx1ZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKiAgIC0gbWFrZSBkZWZhdWx0IGludGVydmFscyBsb25nZXIgdG8gYWNjb21tb2RhdGUgY3VycmVudCBFSENJIGRyaXZlcgorICogMjAwNC0wMy0xOSAtIDAuOTIgSnVlcmdlbiBTdHViZXIgPHN0YXJibHVlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqICAgLSByZXBsYWNlZCBhdG9taWNfdCBieSBtZW1vcnkgYmFycmllcnMKKyAqIDIwMDQtMDQtMjEgLSAwLjkzIEp1ZXJnZW4gU3R1YmVyIDxzdGFyYmx1ZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKiAgIC0gd2FpdCBmb3IgY29tcGxldGlvbiBvZiB3cml0ZSB1cmIgaW4gcmVsZWFzZSAobmVlZGVkIGZvciByZW1vdGVjb250cm9sKQorICogICAtIGNvcnJlY3RlZCBwb2xsIGZvciB3cml0ZSBkaXJlY3Rpb24gKG1pc3NpbmcgbmVnYXRpb24pCisgKiAyMDA0LTA0LTIyIC0gMC45NCBKdWVyZ2VuIFN0dWJlciA8c3RhcmJsdWVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogICAtIG1ha2UgZGV2aWNlIGxvY2tpbmcgaW50ZXJydXB0aWJsZQorICogMjAwNC0wNC0zMCAtIDAuOTUgSnVlcmdlbiBTdHViZXIgPHN0YXJibHVlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqICAgLSBjaGVjayBmb3IgdmFsaWQgdWRldiBvbiByZXN1Ym1pdHRpbmcgYW5kIHVubGlua2luZyB1cmJzCisgKiAyMDA0LTA4LTAzIC0gMC45NiBKdWVyZ2VuIFN0dWJlciA8c3RhcmJsdWVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogICAtIG1vdmUgcmVzZXQgaW50byBvcGVuIHRvIGNsZWFuIG91dCBzcHVyaW91cyBkYXRhCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKworCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworCXN0YXRpYyBpbnQgZGVidWcgPSA0OworI2Vsc2UKKwlzdGF0aWMgaW50IGRlYnVnID0gMDsKKyNlbmRpZgorCisvKiBVc2Ugb3VyIG93biBkYmcgbWFjcm8gKi8KKyN1bmRlZiBkYmcKKyNkZWZpbmUgZGJnKGx2bCwgZm9ybWF0LCBhcmcuLi4pIGRvIHsgaWYgKGRlYnVnID49IGx2bCkgcHJpbnRrKEtFUk5fREVCVUcgIF9fRklMRV9fICI6ICIgZm9ybWF0ICJcbiIsICMjIGFyZyk7IH0gd2hpbGUgKDApCisKKworLyogVmVyc2lvbiBJbmZvcm1hdGlvbiAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuOTYiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkp1ZXJnZW4gU3R1YmVyIDxzdGFyYmx1ZUBzb3VyY2Vmb3JnZS5uZXQ+IgorI2RlZmluZSBEUklWRVJfREVTQyAiTEVHTyBVU0IgVG93ZXIgRHJpdmVyIgorCisvKiBNb2R1bGUgcGFyYW1ldGVycyAqLworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOworCisvKiBUaGUgZGVmYXVsdHMgYXJlIGNob3NlbiB0byB3b3JrIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9ucyBvZiBsZUpPUyBhbmQgTlFDLgorICovCisKKy8qIFNvbWUgbGVnYWN5IHNvZnR3YXJlIGxpa2VzIHRvIHJlY2VpdmUgcGFja2V0cyBpbiBvbmUgcGllY2UuCisgKiBJbiB0aGlzIGNhc2UgcmVhZF9idWZmZXJfc2l6ZSBzaG91bGQgZXhjZWVkIHRoZSBtYXhpbWFsIHBhY2tldCBsZW5ndGgKKyAqICg0MTcgZm9yIGRhdGFsb2cgdXBsb2FkcyksIGFuZCBwYWNrZXRfdGltZW91dCBzaG91bGQgYmUgc2V0LgorICovCitzdGF0aWMgaW50IHJlYWRfYnVmZmVyX3NpemUgPSA0ODA7Cittb2R1bGVfcGFyYW0ocmVhZF9idWZmZXJfc2l6ZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocmVhZF9idWZmZXJfc2l6ZSwgIlJlYWQgYnVmZmVyIHNpemUiKTsKKworLyogU29tZSBsZWdhY3kgc29mdHdhcmUgbGlrZXMgdG8gc2VuZCBwYWNrZXRzIGluIG9uZSBwaWVjZS4KKyAqIEluIHRoaXMgY2FzZSB3cml0ZV9idWZmZXJfc2l6ZSBzaG91bGQgZXhjZWVkIHRoZSBtYXhpbWFsIHBhY2tldCBsZW5ndGgKKyAqICg0MTcgZm9yIGZpcm13YXJlIGFuZCBwcm9ncmFtIGRvd25sb2FkcykuCisgKiBBIHByb2JsZW0gd2l0aCBsb25nIHdyaXRlcyBpcyB0aGF0IHRoZSBmb2xsb3dpbmcgcmVhZCBtYXkgdGltZSBvdXQKKyAqIGlmIHRoZSBzb2Z0d2FyZSBpcyBub3QgcHJlcGFyZWQgdG8gd2FpdCBsb25nIGVub3VnaC4KKyAqLworc3RhdGljIGludCB3cml0ZV9idWZmZXJfc2l6ZSA9IDQ4MDsKK21vZHVsZV9wYXJhbSh3cml0ZV9idWZmZXJfc2l6ZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0Mod3JpdGVfYnVmZmVyX3NpemUsICJXcml0ZSBidWZmZXIgc2l6ZSIpOworCisvKiBTb21lIGxlZ2FjeSBzb2Z0d2FyZSBleHBlY3RzIHJlYWRzIHRvIGNvbnRhaW4gd2hvbGUgTEFTTSBwYWNrZXRzLgorICogVG8gYWNoaWV2ZSB0aGlzLCBjaGFyYWN0ZXJzIHdoaWNoIGFycml2ZSBiZWZvcmUgYSBwYWNrZXQgdGltZW91dAorICogb2NjdXJzIHdpbGwgYmUgcmV0dXJuZWQgaW4gYSBzaW5nbGUgcmVhZCBvcGVyYXRpb24uCisgKiBBIHByb2JsZW0gd2l0aCBsb25nIHJlYWRzIGlzIHRoYXQgdGhlIHNvZnR3YXJlIG1heSB0aW1lIG91dAorICogaWYgaXQgaXMgbm90IHByZXBhcmVkIHRvIHdhaXQgbG9uZyBlbm91Z2guCisgKiBUaGUgcGFja2V0IHRpbWVvdXQgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiB0aGUgdGltZSBiZXR3ZWVuIHRoZQorICogcmVjZXB0aW9uIG9mIHN1YnNlcXVlbnQgY2hhcmFjdGVycywgd2hpY2ggc2hvdWxkIGFycml2ZSBhYm91dAorICogZXZlcnkgNW1zIGZvciB0aGUgc3RhbmRhcmQgMjQwMCBiYXVkLgorICogU2V0IGl0IHRvIDAgdG8gZGlzYWJsZS4KKyAqLworc3RhdGljIGludCBwYWNrZXRfdGltZW91dCA9IDUwOworbW9kdWxlX3BhcmFtKHBhY2tldF90aW1lb3V0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhwYWNrZXRfdGltZW91dCwgIlBhY2tldCB0aW1lb3V0IGluIG1zIik7CisKKy8qIFNvbWUgbGVnYWN5IHNvZnR3YXJlIGV4cGVjdHMgYmxvY2tpbmcgcmVhZHMgdG8gdGltZSBvdXQuCisgKiBUaW1lb3V0IG9jY3VycyBhZnRlciB0aGUgc3BlY2lmaWVkIHRpbWUgb2YgcmVhZCBhbmQgd3JpdGUgaW5hY3Rpdml0eS4KKyAqIFNldCBpdCB0byAwIHRvIGRpc2FibGUuCisgKi8KK3N0YXRpYyBpbnQgcmVhZF90aW1lb3V0ID0gMjAwOworbW9kdWxlX3BhcmFtKHJlYWRfdGltZW91dCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocmVhZF90aW1lb3V0LCAiUmVhZCB0aW1lb3V0IGluIG1zIik7CisKKy8qIEFzIG9mIGtlcm5lbCB2ZXJzaW9uIDIuNi40IGVoY2ktaGNkIHVzZXMgYW4KKyAqICJvbmx5IG9uZSBpbnRlcnJ1cHQgdHJhbnNmZXIgcGVyIGZyYW1lIiBzaG9ydGN1dAorICogdG8gc2ltcGxpZnkgdGhlIHNjaGVkdWxpbmcgb2YgcGVyaW9kaWMgdHJhbnNmZXJzLgorICogVGhpcyBjb25mbGljdHMgd2l0aCBvdXIgc3RhbmRhcmQgMW1zIGludGVydmFscyBmb3IgaW4gYW5kIG91dCBVUkJzLgorICogV2UgdXNlIGRlZmF1bHQgaW50ZXJ2YWxzIG9mIDJtcyBmb3IgaW4gYW5kIDhtcyBmb3Igb3V0IHRyYW5zZmVycywKKyAqIHdoaWNoIGlzIGZhc3QgZW5vdWdoIGZvciAyNDAwIGJhdWQgYW5kIGFsbG93cyBhIHNtYWxsIGFkZGl0aW9uYWwgbG9hZC4KKyAqIEluY3JlYXNlIHRoZSBpbnRlcnZhbCB0byBhbGxvdyBtb3JlIGRldmljZXMgdGhhdCBkbyBpbnRlcnJ1cHQgdHJhbnNmZXJzLAorICogb3Igc2V0IHRvIDAgdG8gdXNlIHRoZSBzdGFuZGFyZCBpbnRlcnZhbCBmcm9tIHRoZSBlbmRwb2ludCBkZXNjcmlwdG9ycy4KKyAqLworc3RhdGljIGludCBpbnRlcnJ1cHRfaW5faW50ZXJ2YWwgPSAyOworbW9kdWxlX3BhcmFtKGludGVycnVwdF9pbl9pbnRlcnZhbCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW50ZXJydXB0X2luX2ludGVydmFsLCAiSW50ZXJydXB0IGluIGludGVydmFsIGluIG1zIik7CisKK3N0YXRpYyBpbnQgaW50ZXJydXB0X291dF9pbnRlcnZhbCA9IDg7Cittb2R1bGVfcGFyYW0oaW50ZXJydXB0X291dF9pbnRlcnZhbCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW50ZXJydXB0X291dF9pbnRlcnZhbCwgIkludGVycnVwdCBvdXQgaW50ZXJ2YWwgaW4gbXMiKTsKKworLyogRGVmaW5lIHRoZXNlIHZhbHVlcyB0byBtYXRjaCB5b3VyIGRldmljZSAqLworI2RlZmluZSBMRUdPX1VTQl9UT1dFUl9WRU5ET1JfSUQJMHgwNjk0CisjZGVmaW5lIExFR09fVVNCX1RPV0VSX1BST0RVQ1RfSUQJMHgwMDAxCisKKy8qIFZlbmRvciByZXF1ZXN0cyAqLworI2RlZmluZSBMRUdPX1VTQl9UT1dFUl9SRVFVRVNUX1JFU0VUCQkweDA0CisjZGVmaW5lIExFR09fVVNCX1RPV0VSX1JFUVVFU1RfR0VUX1ZFUlNJT04JMHhGRAorCitzdHJ1Y3QgdG93ZXJfcmVzZXRfcmVwbHkgeworCV9fbGUxNiBzaXplOwkJLyogbGl0dGxlLWVuZGlhbiAqLworCV9fdTggZXJyX2NvZGU7CisJX191OCBzcGFyZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgdG93ZXJfZ2V0X3ZlcnNpb25fcmVwbHkgeworCV9fbGUxNiBzaXplOwkJLyogbGl0dGxlLWVuZGlhbiAqLworCV9fdTggZXJyX2NvZGU7CisJX191OCBzcGFyZTsKKwlfX3U4IG1ham9yOworCV9fdTggbWlub3I7CisJX19sZTE2IGJ1aWxkX25vOwkJLyogbGl0dGxlLWVuZGlhbiAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHRvd2VyX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShMRUdPX1VTQl9UT1dFUl9WRU5ET1JfSUQsIExFR09fVVNCX1RPV0VSX1BST0RVQ1RfSUQpIH0sCisJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCB0b3dlcl90YWJsZSk7CisKKyNkZWZpbmUgTEVHT19VU0JfVE9XRVJfTUlOT1JfQkFTRQkxNjAKKworCisvKiBTdHJ1Y3R1cmUgdG8gaG9sZCBhbGwgb2Ygb3VyIGRldmljZSBzcGVjaWZpYyBzdHVmZiAqLworc3RydWN0IGxlZ29fdXNiX3Rvd2VyIHsKKwlzdHJ1Y3Qgc2VtYXBob3JlCXNlbTsJCS8qIGxvY2tzIHRoaXMgc3RydWN0dXJlICovCisJc3RydWN0IHVzYl9kZXZpY2UqCXVkZXY7CQkvKiBzYXZlIG9mZiB0aGUgdXNiIGRldmljZSBwb2ludGVyICovCisJdW5zaWduZWQgY2hhcgkJbWlub3I7CQkvKiB0aGUgc3RhcnRpbmcgbWlub3IgbnVtYmVyIGZvciB0aGlzIGRldmljZSAqLworCisJaW50CQkJb3Blbl9jb3VudDsJLyogbnVtYmVyIG9mIHRpbWVzIHRoaXMgcG9ydCBoYXMgYmVlbiBvcGVuZWQgKi8KKworCWNoYXIqCQkJcmVhZF9idWZmZXI7CisJc2l6ZV90CQkJcmVhZF9idWZmZXJfbGVuZ3RoOyAvKiB0aGlzIG11Y2ggY2FtZSBpbiAqLworCXNpemVfdAkJCXJlYWRfcGFja2V0X2xlbmd0aDsgLyogdGhpcyBtdWNoIHdpbGwgYmUgcmV0dXJuZWQgb24gcmVhZCAqLworCXNwaW5sb2NrX3QJCXJlYWRfYnVmZmVyX2xvY2s7CisJaW50CQkJcGFja2V0X3RpbWVvdXRfamlmZmllczsKKwl1bnNpZ25lZCBsb25nCQlyZWFkX2xhc3RfYXJyaXZhbDsKKworCXdhaXRfcXVldWVfaGVhZF90CXJlYWRfd2FpdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3cml0ZV93YWl0OworCisJY2hhcioJCQlpbnRlcnJ1cHRfaW5fYnVmZmVyOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciogaW50ZXJydXB0X2luX2VuZHBvaW50OworCXN0cnVjdCB1cmIqCQlpbnRlcnJ1cHRfaW5fdXJiOworCWludAkJCWludGVycnVwdF9pbl9pbnRlcnZhbDsKKwlpbnQJCQlpbnRlcnJ1cHRfaW5fcnVubmluZzsKKwlpbnQJCQlpbnRlcnJ1cHRfaW5fZG9uZTsKKworCWNoYXIqCQkJaW50ZXJydXB0X291dF9idWZmZXI7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yKiBpbnRlcnJ1cHRfb3V0X2VuZHBvaW50OworCXN0cnVjdCB1cmIqCQlpbnRlcnJ1cHRfb3V0X3VyYjsKKwlpbnQJCQlpbnRlcnJ1cHRfb3V0X2ludGVydmFsOworCWludAkJCWludGVycnVwdF9vdXRfYnVzeTsKKworfTsKKworCisvKiBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzICovCitzdGF0aWMgc3NpemVfdCB0b3dlcl9yZWFkCShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOworc3RhdGljIHNzaXplX3QgdG93ZXJfd3JpdGUJKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7CitzdGF0aWMgaW5saW5lIHZvaWQgdG93ZXJfZGVsZXRlIChzdHJ1Y3QgbGVnb191c2JfdG93ZXIgKmRldik7CitzdGF0aWMgaW50IHRvd2VyX29wZW4JCShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IHRvd2VyX3JlbGVhc2UJKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdG93ZXJfcG9sbAkoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpOworc3RhdGljIGxvZmZfdCB0b3dlcl9sbHNlZWsJKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2ZmLCBpbnQgd2hlbmNlKTsKKworc3RhdGljIHZvaWQgdG93ZXJfYWJvcnRfdHJhbnNmZXJzIChzdHJ1Y3QgbGVnb191c2JfdG93ZXIgKmRldik7CitzdGF0aWMgdm9pZCB0b3dlcl9jaGVja19mb3JfcmVhZF9wYWNrZXQgKHN0cnVjdCBsZWdvX3VzYl90b3dlciAqZGV2KTsKK3N0YXRpYyB2b2lkIHRvd2VyX2ludGVycnVwdF9pbl9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCB0b3dlcl9pbnRlcnJ1cHRfb3V0X2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworc3RhdGljIGludCAgdG93ZXJfcHJvYmUJKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgdm9pZCB0b3dlcl9kaXNjb25uZWN0CShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKKworCisvKiBwcmV2ZW50IHJhY2VzIGJldHdlZW4gb3BlbigpIGFuZCBkaXNjb25uZWN0ICovCitzdGF0aWMgREVDTEFSRV9NVVRFWCAoZGlzY29ubmVjdF9zZW0pOworCisvKiBmaWxlIG9wZXJhdGlvbnMgbmVlZGVkIHdoZW4gd2UgcmVnaXN0ZXIgdGhpcyBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRvd2VyX2ZvcHMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLnJlYWQgID0JdG93ZXJfcmVhZCwKKwkud3JpdGUgPQl0b3dlcl93cml0ZSwKKwkub3BlbiA9CQl0b3dlcl9vcGVuLAorCS5yZWxlYXNlID0JdG93ZXJfcmVsZWFzZSwKKwkucG9sbCA9CQl0b3dlcl9wb2xsLAorCS5sbHNlZWsgPQl0b3dlcl9sbHNlZWssCit9OworCisvKgorICogdXNiIGNsYXNzIGRyaXZlciBpbmZvIGluIG9yZGVyIHRvIGdldCBhIG1pbm9yIG51bWJlciBmcm9tIHRoZSB1c2IgY29yZSwKKyAqIGFuZCB0byBoYXZlIHRoZSBkZXZpY2UgcmVnaXN0ZXJlZCB3aXRoIGRldmZzIGFuZCB0aGUgZHJpdmVyIGNvcmUKKyAqLworc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIHRvd2VyX2NsYXNzID0geworCS5uYW1lID0JCSJ1c2IvbGVnb3VzYnRvd2VyJWQiLAorCS5mb3BzID0JCSZ0b3dlcl9mb3BzLAorCS5tb2RlID0JCVNfSUZDSFIgfCBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lXR1JQIHwgU19JUk9USCwKKwkubWlub3JfYmFzZSA9CUxFR09fVVNCX1RPV0VSX01JTk9SX0JBU0UsCit9OworCisKKy8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB0b3dlcl9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImxlZ291c2J0b3dlciIsCisJLnByb2JlID0JdG93ZXJfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl0b3dlcl9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CXRvd2VyX3RhYmxlLAorfTsKKworCisvKioKKyAqCWxlZ29fdXNiX3Rvd2VyX2RlYnVnX2RhdGEKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGxlZ29fdXNiX3Rvd2VyX2RlYnVnX2RhdGEgKGludCBsZXZlbCwgY29uc3QgY2hhciAqZnVuY3Rpb24sIGludCBzaXplLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworCWludCBpOworCisJaWYgKGRlYnVnIDwgbGV2ZWwpCisJCXJldHVybjsKKworCXByaW50ayAoS0VSTl9ERUJVRyBfX0ZJTEVfXyI6ICVzIC0gbGVuZ3RoID0gJWQsIGRhdGEgPSAiLCBmdW5jdGlvbiwgc2l6ZSk7CisJZm9yIChpID0gMDsgaSA8IHNpemU7ICsraSkgeworCQlwcmludGsgKCIlLjJ4ICIsIGRhdGFbaV0pOworCX0KKwlwcmludGsgKCJcbiIpOworfQorCisKKy8qKgorICoJdG93ZXJfZGVsZXRlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB0b3dlcl9kZWxldGUgKHN0cnVjdCBsZWdvX3VzYl90b3dlciAqZGV2KQoreworCWRiZygyLCAiJXM6IGVudGVyIiwgX19GVU5DVElPTl9fKTsKKworCXRvd2VyX2Fib3J0X3RyYW5zZmVycyAoZGV2KTsKKworCS8qIGZyZWUgZGF0YSBzdHJ1Y3R1cmVzICovCisJaWYgKGRldi0+aW50ZXJydXB0X2luX3VyYiAhPSBOVUxMKSB7CisJCXVzYl9mcmVlX3VyYiAoZGV2LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwl9CisJaWYgKGRldi0+aW50ZXJydXB0X291dF91cmIgIT0gTlVMTCkgeworCQl1c2JfZnJlZV91cmIgKGRldi0+aW50ZXJydXB0X291dF91cmIpOworCX0KKwlrZnJlZSAoZGV2LT5yZWFkX2J1ZmZlcik7CisJa2ZyZWUgKGRldi0+aW50ZXJydXB0X2luX2J1ZmZlcik7CisJa2ZyZWUgKGRldi0+aW50ZXJydXB0X291dF9idWZmZXIpOworCWtmcmVlIChkZXYpOworCisJZGJnKDIsICIlczogbGVhdmUiLCBfX0ZVTkNUSU9OX18pOworfQorCisKKy8qKgorICoJdG93ZXJfb3BlbgorICovCitzdGF0aWMgaW50IHRvd2VyX29wZW4gKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBsZWdvX3VzYl90b3dlciAqZGV2ID0gTlVMTDsKKwlpbnQgc3VibWlub3I7CisJaW50IHJldHZhbCA9IDA7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgdG93ZXJfcmVzZXRfcmVwbHkgcmVzZXRfcmVwbHk7CisJaW50IHJlc3VsdDsKKworCWRiZygyLCAiJXM6IGVudGVyIiwgX19GVU5DVElPTl9fKTsKKworCW5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworCXN1Ym1pbm9yID0gaW1pbm9yKGlub2RlKTsKKworCWRvd24gKCZkaXNjb25uZWN0X3NlbSk7CisKKwlpbnRlcmZhY2UgPSB1c2JfZmluZF9pbnRlcmZhY2UgKCZ0b3dlcl9kcml2ZXIsIHN1Ym1pbm9yKTsKKworCWlmICghaW50ZXJmYWNlKSB7CisJCWVyciAoIiVzIC0gZXJyb3IsIGNhbid0IGZpbmQgZGV2aWNlIGZvciBtaW5vciAlZCIsCisJCSAgICAgX19GVU5DVElPTl9fLCBzdWJtaW5vcik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gdW5sb2NrX2Rpc2Nvbm5lY3RfZXhpdDsKKwl9CisKKwlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisKKwlpZiAoIWRldikgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIHVubG9ja19kaXNjb25uZWN0X2V4aXQ7CisJfQorCisJLyogbG9jayB0aGlzIGRldmljZSAqLworCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZkZXYtPnNlbSkpIHsKKwkgICAgICAgIHJldHZhbCA9IC1FUkVTVEFSVFNZUzsKKwkJZ290byB1bmxvY2tfZGlzY29ubmVjdF9leGl0OworCX0KKworCS8qIGFsbG93IG9wZW5pbmcgb25seSBvbmNlICovCisJaWYgKGRldi0+b3Blbl9jb3VudCkgeworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gdW5sb2NrX2V4aXQ7CisJfQorCWRldi0+b3Blbl9jb3VudCA9IDE7CisKKwkvKiByZXNldCB0aGUgdG93ZXIgKi8KKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKGRldi0+dWRldiwKKwkJCQkgIHVzYl9yY3ZjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJCSAgTEVHT19VU0JfVE9XRVJfUkVRVUVTVF9SRVNFVCwKKwkJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCSAgMCwKKwkJCQkgIDAsCisJCQkJICAmcmVzZXRfcmVwbHksCisJCQkJICBzaXplb2YocmVzZXRfcmVwbHkpLAorCQkJCSAgMTAwMCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZXJyKCJMRUdPIFVTQiBUb3dlciByZXNldCBjb250cm9sIHJlcXVlc3QgZmFpbGVkIik7CisJCXJldHZhbCA9IHJlc3VsdDsKKwkJZ290byB1bmxvY2tfZXhpdDsKKwl9CisKKwkvKiBpbml0aWFsaXplIGluIGRpcmVjdGlvbiAqLworCWRldi0+cmVhZF9idWZmZXJfbGVuZ3RoID0gMDsKKwlkZXYtPnJlYWRfcGFja2V0X2xlbmd0aCA9IDA7CisJdXNiX2ZpbGxfaW50X3VyYiAoZGV2LT5pbnRlcnJ1cHRfaW5fdXJiLAorCQkJICBkZXYtPnVkZXYsCisJCQkgIHVzYl9yY3ZpbnRwaXBlKGRldi0+dWRldiwgZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJICBkZXYtPmludGVycnVwdF9pbl9idWZmZXIsCisJCQkgIGxlMTZfdG9fY3B1KGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50LT53TWF4UGFja2V0U2l6ZSksCisJCQkgIHRvd2VyX2ludGVycnVwdF9pbl9jYWxsYmFjaywKKwkJCSAgZGV2LAorCQkJICBkZXYtPmludGVycnVwdF9pbl9pbnRlcnZhbCk7CisKKwlkZXYtPmludGVycnVwdF9pbl9ydW5uaW5nID0gMTsKKwlkZXYtPmludGVycnVwdF9pbl9kb25lID0gMDsKKwltYigpOworCisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKGRldi0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldHZhbCkgeworCQllcnIoIkNvdWxkbid0IHN1Ym1pdCBpbnRlcnJ1cHRfaW5fdXJiICVkIiwgcmV0dmFsKTsKKwkJZGV2LT5pbnRlcnJ1cHRfaW5fcnVubmluZyA9IDA7CisJCWRldi0+b3Blbl9jb3VudCA9IDA7CisJCWdvdG8gdW5sb2NrX2V4aXQ7CisJfQorCisJLyogc2F2ZSBkZXZpY2UgaW4gdGhlIGZpbGUncyBwcml2YXRlIHN0cnVjdHVyZSAqLworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGRldjsKKwordW5sb2NrX2V4aXQ6CisJdXAgKCZkZXYtPnNlbSk7CisKK3VubG9ja19kaXNjb25uZWN0X2V4aXQ6CisJdXAgKCZkaXNjb25uZWN0X3NlbSk7CisKKwlkYmcoMiwgIiVzOiBsZWF2ZSwgcmV0dXJuIHZhbHVlICVkICIsIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKgorICoJdG93ZXJfcmVsZWFzZQorICovCitzdGF0aWMgaW50IHRvd2VyX3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBsZWdvX3VzYl90b3dlciAqZGV2OworCWludCByZXR2YWwgPSAwOworCisJZGJnKDIsICIlczogZW50ZXIiLCBfX0ZVTkNUSU9OX18pOworCisJZGV2ID0gKHN0cnVjdCBsZWdvX3VzYl90b3dlciAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmIChkZXYgPT0gTlVMTCkgeworCQlkYmcoMSwgIiVzOiBvYmplY3QgaXMgTlVMTCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmZGV2LT5zZW0pKSB7CisJICAgICAgICByZXR2YWwgPSAtRVJFU1RBUlRTWVM7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoZGV2LT5vcGVuX2NvdW50ICE9IDEpIHsKKwkJZGJnKDEsICIlczogZGV2aWNlIG5vdCBvcGVuZWQgZXhhY3RseSBvbmNlIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byB1bmxvY2tfZXhpdDsKKwl9CisJaWYgKGRldi0+dWRldiA9PSBOVUxMKSB7CisJCS8qIHRoZSBkZXZpY2Ugd2FzIHVucGx1Z2dlZCBiZWZvcmUgdGhlIGZpbGUgd2FzIHJlbGVhc2VkICovCisJCXVwICgmZGV2LT5zZW0pOwkvKiB1bmxvY2sgaGVyZSBhcyB0b3dlcl9kZWxldGUgZnJlZXMgZGV2ICovCisJCXRvd2VyX2RlbGV0ZSAoZGV2KTsKKwkJZ290byBleGl0OworCX0KKworCS8qIHdhaXQgdW50aWwgd3JpdGUgdHJhbnNmZXIgaXMgZmluaXNoZWQgKi8KKwlpZiAoZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3kpIHsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQgKGRldi0+d3JpdGVfd2FpdCwgIWRldi0+aW50ZXJydXB0X291dF9idXN5LCAyICogSFopOworCX0KKwl0b3dlcl9hYm9ydF90cmFuc2ZlcnMgKGRldik7CisJZGV2LT5vcGVuX2NvdW50ID0gMDsKKwordW5sb2NrX2V4aXQ6CisJdXAgKCZkZXYtPnNlbSk7CisKK2V4aXQ6CisJZGJnKDIsICIlczogbGVhdmUsIHJldHVybiB2YWx1ZSAlZCIsIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qKgorICoJdG93ZXJfYWJvcnRfdHJhbnNmZXJzCisgKiAgICAgIGFib3J0cyB0cmFuc2ZlcnMgYW5kIGZyZWVzIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzCisgKi8KK3N0YXRpYyB2b2lkIHRvd2VyX2Fib3J0X3RyYW5zZmVycyAoc3RydWN0IGxlZ29fdXNiX3Rvd2VyICpkZXYpCit7CisJZGJnKDIsICIlczogZW50ZXIiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKGRldiA9PSBOVUxMKSB7CisJCWRiZygxLCAiJXM6IGRldiBpcyBudWxsIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIHNodXRkb3duIHRyYW5zZmVyICovCisJaWYgKGRldi0+aW50ZXJydXB0X2luX3J1bm5pbmcpIHsKKwkJZGV2LT5pbnRlcnJ1cHRfaW5fcnVubmluZyA9IDA7CisJCW1iKCk7CisJCWlmIChkZXYtPmludGVycnVwdF9pbl91cmIgIT0gTlVMTCAmJiBkZXYtPnVkZXYpIHsKKwkJCXVzYl9raWxsX3VyYiAoZGV2LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwkJfQorCX0KKwlpZiAoZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3kpIHsKKwkJaWYgKGRldi0+aW50ZXJydXB0X291dF91cmIgIT0gTlVMTCAmJiBkZXYtPnVkZXYpIHsKKwkJCXVzYl9raWxsX3VyYiAoZGV2LT5pbnRlcnJ1cHRfb3V0X3VyYik7CisJCX0KKwl9CisKK2V4aXQ6CisJZGJnKDIsICIlczogbGVhdmUiLCBfX0ZVTkNUSU9OX18pOworfQorCisKKy8qKgorICoJdG93ZXJfY2hlY2tfZm9yX3JlYWRfcGFja2V0CisgKgorICogICAgICBUbyBnZXQgY29ycmVjdCBzZW1hbnRpY3MgZm9yIHNpZ25hbHMgYW5kIG5vbi1ibG9ja2luZyBJL08KKyAqICAgICAgd2l0aCBwYWNrZXRpemluZyB3ZSBwcmV0ZW5kIG5vdCB0byBzZWUgYW55IGRhdGEgaW4gdGhlIHJlYWQgYnVmZmVyCisgKiAgICAgIHVudGlsIGl0IGhhcyBiZWVuIHRoZXJlIHVuY2hhbmdlZCBmb3IgYXQgbGVhc3QKKyAqICAgICAgZGV2LT5wYWNrZXRfdGltZW91dF9qaWZmaWVzLCBvciB1bnRpbCB0aGUgYnVmZmVyIGlzIGZ1bGwuCisgKi8KK3N0YXRpYyB2b2lkIHRvd2VyX2NoZWNrX2Zvcl9yZWFkX3BhY2tldCAoc3RydWN0IGxlZ29fdXNiX3Rvd2VyICpkZXYpCit7CisJc3Bpbl9sb2NrX2lycSAoJmRldi0+cmVhZF9idWZmZXJfbG9jayk7CisJaWYgKCFwYWNrZXRfdGltZW91dAorCSAgICB8fCB0aW1lX2FmdGVyKGppZmZpZXMsIGRldi0+cmVhZF9sYXN0X2Fycml2YWwgKyBkZXYtPnBhY2tldF90aW1lb3V0X2ppZmZpZXMpCisJICAgIHx8IGRldi0+cmVhZF9idWZmZXJfbGVuZ3RoID09IHJlYWRfYnVmZmVyX3NpemUpIHsKKwkJZGV2LT5yZWFkX3BhY2tldF9sZW5ndGggPSBkZXYtPnJlYWRfYnVmZmVyX2xlbmd0aDsKKwl9CisJZGV2LT5pbnRlcnJ1cHRfaW5fZG9uZSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxICgmZGV2LT5yZWFkX2J1ZmZlcl9sb2NrKTsKK30KKworCisvKioKKyAqCXRvd2VyX3BvbGwKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCB0b3dlcl9wb2xsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3QgbGVnb191c2JfdG93ZXIgKmRldjsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CisKKwlkYmcoMiwgIiVzOiBlbnRlciIsIF9fRlVOQ1RJT05fXyk7CisKKwlkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlwb2xsX3dhaXQoZmlsZSwgJmRldi0+cmVhZF93YWl0LCB3YWl0KTsKKwlwb2xsX3dhaXQoZmlsZSwgJmRldi0+d3JpdGVfd2FpdCwgd2FpdCk7CisKKwl0b3dlcl9jaGVja19mb3JfcmVhZF9wYWNrZXQoZGV2KTsKKwlpZiAoZGV2LT5yZWFkX3BhY2tldF9sZW5ndGggPiAwKSB7CisJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKKwl9CisJaWYgKCFkZXYtPmludGVycnVwdF9vdXRfYnVzeSkgeworCQltYXNrIHw9IFBPTExPVVQgfCBQT0xMV1JOT1JNOworCX0KKworCWRiZygyLCAiJXM6IGxlYXZlLCBtYXNrID0gJWQiLCBfX0ZVTkNUSU9OX18sIG1hc2spOworCisJcmV0dXJuIG1hc2s7Cit9CisKKworLyoqCisgKgl0b3dlcl9sbHNlZWsKKyAqLworc3RhdGljIGxvZmZfdCB0b3dlcl9sbHNlZWsgKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2ZmLCBpbnQgd2hlbmNlKQoreworCXJldHVybiAtRVNQSVBFOwkJLyogdW5zZWVrYWJsZSAqLworfQorCisKKy8qKgorICoJdG93ZXJfcmVhZAorICovCitzdGF0aWMgc3NpemVfdCB0b3dlcl9yZWFkIChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGxlZ29fdXNiX3Rvd2VyICpkZXY7CisJc2l6ZV90IGJ5dGVzX3RvX3JlYWQ7CisJaW50IGk7CisJaW50IHJldHZhbCA9IDA7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMDsKKworCWRiZygyLCAiJXM6IGVudGVyLCBjb3VudCA9ICVaZCIsIF9fRlVOQ1RJT05fXywgY291bnQpOworCisJZGV2ID0gKHN0cnVjdCBsZWdvX3VzYl90b3dlciAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKworCS8qIGxvY2sgdGhpcyBvYmplY3QgKi8KKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmZGV2LT5zZW0pKSB7CisJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKKwkJZ290byBleGl0OworCX0KKworCS8qIHZlcmlmeSB0aGF0IHRoZSBkZXZpY2Ugd2Fzbid0IHVucGx1Z2dlZCAqLworCWlmIChkZXYtPnVkZXYgPT0gTlVMTCkgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQllcnIoIk5vIGRldmljZSBvciBkZXZpY2UgdW5wbHVnZ2VkICVkIiwgcmV0dmFsKTsKKwkJZ290byB1bmxvY2tfZXhpdDsKKwl9CisKKwkvKiB2ZXJpZnkgdGhhdCB3ZSBhY3R1YWxseSBoYXZlIHNvbWUgZGF0YSB0byByZWFkICovCisJaWYgKGNvdW50ID09IDApIHsKKwkJZGJnKDEsICIlczogcmVhZCByZXF1ZXN0IG9mIDAgYnl0ZXMiLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIHVubG9ja19leGl0OworCX0KKworCWlmIChyZWFkX3RpbWVvdXQpIHsKKwkJdGltZW91dCA9IGppZmZpZXMgKyByZWFkX3RpbWVvdXQgKiBIWiAvIDEwMDA7CisJfQorCisJLyogd2FpdCBmb3IgZGF0YSAqLworCXRvd2VyX2NoZWNrX2Zvcl9yZWFkX3BhY2tldCAoZGV2KTsKKwl3aGlsZSAoZGV2LT5yZWFkX3BhY2tldF9sZW5ndGggPT0gMCkgeworCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCXJldHZhbCA9IC1FQUdBSU47CisJCQlnb3RvIHVubG9ja19leGl0OworCQl9CisJCXJldHZhbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGRldi0+cmVhZF93YWl0LCBkZXYtPmludGVycnVwdF9pbl9kb25lLCBkZXYtPnBhY2tldF90aW1lb3V0X2ppZmZpZXMpOworCQlpZiAocmV0dmFsIDwgMCkgeworCQkJZ290byB1bmxvY2tfZXhpdDsKKwkJfQorCisJCS8qIHJlc2V0IHJlYWQgdGltZW91dCBkdXJpbmcgcmVhZCBvciB3cml0ZSBhY3Rpdml0eSAqLworCQlpZiAocmVhZF90aW1lb3V0CisJCSAgICAmJiAoZGV2LT5yZWFkX2J1ZmZlcl9sZW5ndGggfHwgZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3kpKSB7CisJCQl0aW1lb3V0ID0gamlmZmllcyArIHJlYWRfdGltZW91dCAqIEhaIC8gMTAwMDsKKwkJfQorCQkvKiBjaGVjayBmb3IgcmVhZCB0aW1lb3V0ICovCisJCWlmIChyZWFkX3RpbWVvdXQgJiYgdGltZV9hZnRlciAoamlmZmllcywgdGltZW91dCkpIHsKKwkJCXJldHZhbCA9IC1FVElNRURPVVQ7CisJCQlnb3RvIHVubG9ja19leGl0OworCQl9CisJCXRvd2VyX2NoZWNrX2Zvcl9yZWFkX3BhY2tldCAoZGV2KTsKKwl9CisKKwkvKiBjb3B5IHRoZSBkYXRhIGZyb20gcmVhZF9idWZmZXIgaW50byB1c2Vyc3BhY2UgKi8KKwlieXRlc190b19yZWFkID0gbWluKGNvdW50LCBkZXYtPnJlYWRfcGFja2V0X2xlbmd0aCk7CisKKwlpZiAoY29weV90b191c2VyIChidWZmZXIsIGRldi0+cmVhZF9idWZmZXIsIGJ5dGVzX3RvX3JlYWQpKSB7CisJCXJldHZhbCA9IC1FRkFVTFQ7CisJCWdvdG8gdW5sb2NrX2V4aXQ7CisJfQorCisJc3Bpbl9sb2NrX2lycSAoJmRldi0+cmVhZF9idWZmZXJfbG9jayk7CisJZGV2LT5yZWFkX2J1ZmZlcl9sZW5ndGggLT0gYnl0ZXNfdG9fcmVhZDsKKwlkZXYtPnJlYWRfcGFja2V0X2xlbmd0aCAtPSBieXRlc190b19yZWFkOworCWZvciAoaT0wOyBpPGRldi0+cmVhZF9idWZmZXJfbGVuZ3RoOyBpKyspIHsKKwkJZGV2LT5yZWFkX2J1ZmZlcltpXSA9IGRldi0+cmVhZF9idWZmZXJbaStieXRlc190b19yZWFkXTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxICgmZGV2LT5yZWFkX2J1ZmZlcl9sb2NrKTsKKworCXJldHZhbCA9IGJ5dGVzX3RvX3JlYWQ7CisKK3VubG9ja19leGl0OgorCS8qIHVubG9jayB0aGUgZGV2aWNlICovCisJdXAgKCZkZXYtPnNlbSk7CisKK2V4aXQ6CisJZGJnKDIsICIlczogbGVhdmUsIHJldHVybiB2YWx1ZSAlZCIsIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qKgorICoJdG93ZXJfd3JpdGUKKyAqLworc3RhdGljIHNzaXplX3QgdG93ZXJfd3JpdGUgKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgbGVnb191c2JfdG93ZXIgKmRldjsKKwlzaXplX3QgYnl0ZXNfdG9fd3JpdGU7CisJaW50IHJldHZhbCA9IDA7CisKKwlkYmcoMiwgIiVzOiBlbnRlciwgY291bnQgPSAlWmQiLCBfX0ZVTkNUSU9OX18sIGNvdW50KTsKKworCWRldiA9IChzdHJ1Y3QgbGVnb191c2JfdG93ZXIgKilmaWxlLT5wcml2YXRlX2RhdGE7CisKKwkvKiBsb2NrIHRoaXMgb2JqZWN0ICovCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSAoJmRldi0+c2VtKSkgeworCQlyZXR2YWwgPSAtRVJFU1RBUlRTWVM7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiB2ZXJpZnkgdGhhdCB0aGUgZGV2aWNlIHdhc24ndCB1bnBsdWdnZWQgKi8KKwlpZiAoZGV2LT51ZGV2ID09IE5VTEwpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZXJyKCJObyBkZXZpY2Ugb3IgZGV2aWNlIHVucGx1Z2dlZCAlZCIsIHJldHZhbCk7CisJCWdvdG8gdW5sb2NrX2V4aXQ7CisJfQorCisJLyogdmVyaWZ5IHRoYXQgd2UgYWN0dWFsbHkgaGF2ZSBzb21lIGRhdGEgdG8gd3JpdGUgKi8KKwlpZiAoY291bnQgPT0gMCkgeworCQlkYmcoMSwgIiVzOiB3cml0ZSByZXF1ZXN0IG9mIDAgYnl0ZXMiLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIHVubG9ja19leGl0OworCX0KKworCS8qIHdhaXQgdW50aWwgcHJldmlvdXMgdHJhbnNmZXIgaXMgZmluaXNoZWQgKi8KKwl3aGlsZSAoZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3kpIHsKKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQlyZXR2YWwgPSAtRUFHQUlOOworCQkJZ290byB1bmxvY2tfZXhpdDsKKwkJfQorCQlyZXR2YWwgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUgKGRldi0+d3JpdGVfd2FpdCwgIWRldi0+aW50ZXJydXB0X291dF9idXN5KTsKKwkJaWYgKHJldHZhbCkgeworCQkJZ290byB1bmxvY2tfZXhpdDsKKwkJfQorCX0KKworCS8qIHdyaXRlIHRoZSBkYXRhIGludG8gaW50ZXJydXB0X291dF9idWZmZXIgZnJvbSB1c2Vyc3BhY2UgKi8KKwlieXRlc190b193cml0ZSA9IG1pbl90KGludCwgY291bnQsIHdyaXRlX2J1ZmZlcl9zaXplKTsKKwlkYmcoNCwgIiVzOiBjb3VudCA9ICVaZCwgYnl0ZXNfdG9fd3JpdGUgPSAlWmQiLCBfX0ZVTkNUSU9OX18sIGNvdW50LCBieXRlc190b193cml0ZSk7CisKKwlpZiAoY29weV9mcm9tX3VzZXIgKGRldi0+aW50ZXJydXB0X291dF9idWZmZXIsIGJ1ZmZlciwgYnl0ZXNfdG9fd3JpdGUpKSB7CisJCXJldHZhbCA9IC1FRkFVTFQ7CisJCWdvdG8gdW5sb2NrX2V4aXQ7CisJfQorCisJLyogc2VuZCBvZmYgdGhlIHVyYiAqLworCXVzYl9maWxsX2ludF91cmIoZGV2LT5pbnRlcnJ1cHRfb3V0X3VyYiwKKwkJCSBkZXYtPnVkZXYsCisJCQkgdXNiX3NuZGludHBpcGUoZGV2LT51ZGV2LCBkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJIGRldi0+aW50ZXJydXB0X291dF9idWZmZXIsCisJCQkgYnl0ZXNfdG9fd3JpdGUsCisJCQkgdG93ZXJfaW50ZXJydXB0X291dF9jYWxsYmFjaywKKwkJCSBkZXYsCisJCQkgZGV2LT5pbnRlcnJ1cHRfb3V0X2ludGVydmFsKTsKKworCWRldi0+aW50ZXJydXB0X291dF9idXN5ID0gMTsKKwl3bWIoKTsKKworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiIChkZXYtPmludGVycnVwdF9vdXRfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldi0+aW50ZXJydXB0X291dF9idXN5ID0gMDsKKwkJZXJyKCJDb3VsZG4ndCBzdWJtaXQgaW50ZXJydXB0X291dF91cmIgJWQiLCByZXR2YWwpOworCQlnb3RvIHVubG9ja19leGl0OworCX0KKwlyZXR2YWwgPSBieXRlc190b193cml0ZTsKKwordW5sb2NrX2V4aXQ6CisJLyogdW5sb2NrIHRoZSBkZXZpY2UgKi8KKwl1cCAoJmRldi0+c2VtKTsKKworZXhpdDoKKwlkYmcoMiwgIiVzOiBsZWF2ZSwgcmV0dXJuIHZhbHVlICVkIiwgX19GVU5DVElPTl9fLCByZXR2YWwpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKioKKyAqCXRvd2VyX2ludGVycnVwdF9pbl9jYWxsYmFjaworICovCitzdGF0aWMgdm9pZCB0b3dlcl9pbnRlcnJ1cHRfaW5fY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGxlZ29fdXNiX3Rvd2VyICpkZXYgPSAoc3RydWN0IGxlZ29fdXNiX3Rvd2VyICopdXJiLT5jb250ZXh0OworCWludCByZXR2YWw7CisKKwlkYmcoNCwgIiVzOiBlbnRlciwgc3RhdHVzICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisKKwlsZWdvX3VzYl90b3dlcl9kZWJ1Z19kYXRhKDUsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJaWYgKHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwKKwkJICAgIHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUIHx8CisJCSAgICB1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKSB7CisJCQlnb3RvIGV4aXQ7CisJCX0gZWxzZSB7CisJCQlkYmcoMSwgIiVzOiBub256ZXJvIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJCWdvdG8gcmVzdWJtaXQ7IC8qIG1heWJlIHdlIGNhbiByZWNvdmVyICovCisJCX0KKwl9CisKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID4gMCkgeworCQlzcGluX2xvY2sgKCZkZXYtPnJlYWRfYnVmZmVyX2xvY2spOworCQlpZiAoZGV2LT5yZWFkX2J1ZmZlcl9sZW5ndGggKyB1cmItPmFjdHVhbF9sZW5ndGggPCByZWFkX2J1ZmZlcl9zaXplKSB7CisJCQltZW1jcHkgKGRldi0+cmVhZF9idWZmZXIgKyBkZXYtPnJlYWRfYnVmZmVyX2xlbmd0aCwKKwkJCQlkZXYtPmludGVycnVwdF9pbl9idWZmZXIsCisJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJCWRldi0+cmVhZF9idWZmZXJfbGVuZ3RoICs9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJCWRldi0+cmVhZF9sYXN0X2Fycml2YWwgPSBqaWZmaWVzOworCQkJZGJnKDMsICIlczogcmVjZWl2ZWQgJWQgYnl0ZXMiLCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcmVhZF9idWZmZXIgb3ZlcmZsb3csICVkIGJ5dGVzIGRyb3BwZWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCX0KKwkJc3Bpbl91bmxvY2sgKCZkZXYtPnJlYWRfYnVmZmVyX2xvY2spOworCX0KKworcmVzdWJtaXQ6CisJLyogcmVzdWJtaXQgaWYgd2UncmUgc3RpbGwgcnVubmluZyAqLworCWlmIChkZXYtPmludGVycnVwdF9pbl9ydW5uaW5nICYmIGRldi0+dWRldikgeworCQlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAoZGV2LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJldHZhbCkgeworCQkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkICglZCkiLCBfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJCX0KKwl9CisKK2V4aXQ6CisJZGV2LT5pbnRlcnJ1cHRfaW5fZG9uZSA9IDE7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlICgmZGV2LT5yZWFkX3dhaXQpOworCisJbGVnb191c2JfdG93ZXJfZGVidWdfZGF0YSg1LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCWRiZyg0LCAiJXM6IGxlYXZlLCBzdGF0dXMgJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKK30KKworCisvKioKKyAqCXRvd2VyX2ludGVycnVwdF9vdXRfY2FsbGJhY2sKKyAqLworc3RhdGljIHZvaWQgdG93ZXJfaW50ZXJydXB0X291dF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgbGVnb191c2JfdG93ZXIgKmRldiA9IChzdHJ1Y3QgbGVnb191c2JfdG93ZXIgKil1cmItPmNvbnRleHQ7CisKKwlkYmcoNCwgIiVzOiBlbnRlciwgc3RhdHVzICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJbGVnb191c2JfdG93ZXJfZGVidWdfZGF0YSg1LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCisJLyogc3luYy9hc3luYyB1bmxpbmsgZmF1bHRzIGFyZW4ndCBlcnJvcnMgKi8KKwlpZiAodXJiLT5zdGF0dXMgJiYgISh1cmItPnN0YXR1cyA9PSAtRU5PRU5UIHx8CisJCQkgICAgIHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUIHx8CisJCQkgICAgIHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pKSB7CisJCWRiZygxLCAiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwl9CisKKwlkZXYtPmludGVycnVwdF9vdXRfYnVzeSA9IDA7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPndyaXRlX3dhaXQpOworCisJbGVnb191c2JfdG93ZXJfZGVidWdfZGF0YSg1LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCWRiZyg0LCAiJXM6IGxlYXZlLCBzdGF0dXMgJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKK30KKworCisvKioKKyAqCXRvd2VyX3Byb2JlCisgKgorICoJQ2FsbGVkIGJ5IHRoZSB1c2IgY29yZSB3aGVuIGEgbmV3IGRldmljZSBpcyBjb25uZWN0ZWQgdGhhdCBpdCB0aGlua3MKKyAqCXRoaXMgZHJpdmVyIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4uCisgKi8KK3N0YXRpYyBpbnQgdG93ZXJfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgbGVnb191c2JfdG93ZXIgKmRldiA9IE5VTEw7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYzsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IqIGVuZHBvaW50OworCXN0cnVjdCB0b3dlcl9nZXRfdmVyc2lvbl9yZXBseSBnZXRfdmVyc2lvbl9yZXBseTsKKwlpbnQgaTsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKwlpbnQgcmVzdWx0OworCisJZGJnKDIsICIlczogZW50ZXIiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKHVkZXYgPT0gTlVMTCkgeworCQlpbmZvICgidWRldiBpcyBOVUxMLiIpOworCX0KKworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW50aWFsaXplIGl0ICovCisKKwlkZXYgPSBrbWFsbG9jIChzaXplb2Yoc3RydWN0IGxlZ29fdXNiX3Rvd2VyKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJZXJyICgiT3V0IG9mIG1lbW9yeSIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaW5pdF9NVVRFWCAoJmRldi0+c2VtKTsKKworCWRldi0+dWRldiA9IHVkZXY7CisJZGV2LT5vcGVuX2NvdW50ID0gMDsKKworCWRldi0+cmVhZF9idWZmZXIgPSBOVUxMOworCWRldi0+cmVhZF9idWZmZXJfbGVuZ3RoID0gMDsKKwlkZXYtPnJlYWRfcGFja2V0X2xlbmd0aCA9IDA7CisJc3Bpbl9sb2NrX2luaXQgKCZkZXYtPnJlYWRfYnVmZmVyX2xvY2spOworCWRldi0+cGFja2V0X3RpbWVvdXRfamlmZmllcyA9IHBhY2tldF90aW1lb3V0ICogSFogLyAxMDAwOworCWRldi0+cmVhZF9sYXN0X2Fycml2YWwgPSBqaWZmaWVzOworCisJaW5pdF93YWl0cXVldWVfaGVhZCAoJmRldi0+cmVhZF93YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkICgmZGV2LT53cml0ZV93YWl0KTsKKworCWRldi0+aW50ZXJydXB0X2luX2J1ZmZlciA9IE5VTEw7CisJZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQgPSBOVUxMOworCWRldi0+aW50ZXJydXB0X2luX3VyYiA9IE5VTEw7CisJZGV2LT5pbnRlcnJ1cHRfaW5fcnVubmluZyA9IDA7CisJZGV2LT5pbnRlcnJ1cHRfaW5fZG9uZSA9IDA7CisKKwlkZXYtPmludGVycnVwdF9vdXRfYnVmZmVyID0gTlVMTDsKKwlkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQgPSBOVUxMOworCWRldi0+aW50ZXJydXB0X291dF91cmIgPSBOVUxMOworCWRldi0+aW50ZXJydXB0X291dF9idXN5ID0gMDsKKworCWlmYWNlX2Rlc2MgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOworCisJLyogc2V0IHVwIHRoZSBlbmRwb2ludCBpbmZvcm1hdGlvbiAqLworCWZvciAoaSA9IDA7IGkgPCBpZmFjZV9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHM7ICsraSkgeworCQllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjOworCisJCWlmICgoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKSA9PSBVU0JfRElSX0lOKSAmJgorCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkpIHsKKwkJCWRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50ID0gZW5kcG9pbnQ7CisJCX0KKworCQlpZiAoKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9PVVQpICYmCisJCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKSkgeworCQkJZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50ID0gZW5kcG9pbnQ7CisJCX0KKwl9CisJaWYoZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQgPT0gTlVMTCkgeworCQllcnIoImludGVycnVwdCBpbiBlbmRwb2ludCBub3QgZm91bmQiKTsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludCA9PSBOVUxMKSB7CisJCWVycigiaW50ZXJydXB0IG91dCBlbmRwb2ludCBub3QgZm91bmQiKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlkZXYtPnJlYWRfYnVmZmVyID0ga21hbGxvYyAocmVhZF9idWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPnJlYWRfYnVmZmVyKSB7CisJCWVycigiQ291bGRuJ3QgYWxsb2NhdGUgcmVhZF9idWZmZXIiKTsKKwkJZ290byBlcnJvcjsKKwl9CisJZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyID0ga21hbGxvYyAobGUxNl90b19jcHUoZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPmludGVycnVwdF9pbl9idWZmZXIpIHsKKwkJZXJyKCJDb3VsZG4ndCBhbGxvY2F0ZSBpbnRlcnJ1cHRfaW5fYnVmZmVyIik7CisJCWdvdG8gZXJyb3I7CisJfQorCWRldi0+aW50ZXJydXB0X2luX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPmludGVycnVwdF9pbl91cmIpIHsKKwkJZXJyKCJDb3VsZG4ndCBhbGxvY2F0ZSBpbnRlcnJ1cHRfaW5fdXJiIik7CisJCWdvdG8gZXJyb3I7CisJfQorCWRldi0+aW50ZXJydXB0X291dF9idWZmZXIgPSBrbWFsbG9jICh3cml0ZV9idWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPmludGVycnVwdF9vdXRfYnVmZmVyKSB7CisJCWVycigiQ291bGRuJ3QgYWxsb2NhdGUgaW50ZXJydXB0X291dF9idWZmZXIiKTsKKwkJZ290byBlcnJvcjsKKwl9CisJZGV2LT5pbnRlcnJ1cHRfb3V0X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPmludGVycnVwdF9vdXRfdXJiKSB7CisJCWVycigiQ291bGRuJ3QgYWxsb2NhdGUgaW50ZXJydXB0X291dF91cmIiKTsKKwkJZ290byBlcnJvcjsKKwl9CisJZGV2LT5pbnRlcnJ1cHRfaW5faW50ZXJ2YWwgPSBpbnRlcnJ1cHRfaW5faW50ZXJ2YWwgPyBpbnRlcnJ1cHRfaW5faW50ZXJ2YWwgOiBkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+YkludGVydmFsOworCWRldi0+aW50ZXJydXB0X291dF9pbnRlcnZhbCA9IGludGVycnVwdF9vdXRfaW50ZXJ2YWwgPyBpbnRlcnJ1cHRfb3V0X2ludGVydmFsIDogZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50LT5iSW50ZXJ2YWw7CisKKwkvKiB3ZSBjYW4gcmVnaXN0ZXIgdGhlIGRldmljZSBub3csIGFzIGl0IGlzIHJlYWR5ICovCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZXJmYWNlLCBkZXYpOworCisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldiAoaW50ZXJmYWNlLCAmdG93ZXJfY2xhc3MpOworCisJaWYgKHJldHZhbCkgeworCQkvKiBzb21ldGhpbmcgcHJldmVudGVkIHVzIGZyb20gcmVnaXN0ZXJpbmcgdGhpcyBkcml2ZXIgKi8KKwkJZXJyICgiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLiIpOworCQl1c2Jfc2V0X2ludGZkYXRhIChpbnRlcmZhY2UsIE5VTEwpOworCQlnb3RvIGVycm9yOworCX0KKwlkZXYtPm1pbm9yID0gaW50ZXJmYWNlLT5taW5vcjsKKworCS8qIGxldCB0aGUgdXNlciBrbm93IHdoYXQgbm9kZSB0aGlzIGRldmljZSBpcyBub3cgYXR0YWNoZWQgdG8gKi8KKwlpbmZvICgiTEVHTyBVU0IgVG93ZXIgIyVkIG5vdyBhdHRhY2hlZCB0byBtYWpvciAlZCBtaW5vciAlZCIsIChkZXYtPm1pbm9yIC0gTEVHT19VU0JfVE9XRVJfTUlOT1JfQkFTRSksIFVTQl9NQUpPUiwgZGV2LT5taW5vcik7CisKKwkvKiBnZXQgdGhlIGZpcm13YXJlIHZlcnNpb24gYW5kIGxvZyBpdCAqLworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAodWRldiwKKwkJCQkgIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCQkgIExFR09fVVNCX1RPV0VSX1JFUVVFU1RfR0VUX1ZFUlNJT04sCisJCQkJICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCQkgIDAsCisJCQkJICAwLAorCQkJCSAgJmdldF92ZXJzaW9uX3JlcGx5LAorCQkJCSAgc2l6ZW9mKGdldF92ZXJzaW9uX3JlcGx5KSwKKwkJCQkgIDEwMDApOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWVycigiTEVHTyBVU0IgVG93ZXIgZ2V0IHZlcnNpb24gY29udHJvbCByZXF1ZXN0IGZhaWxlZCIpOworCQlyZXR2YWwgPSByZXN1bHQ7CisJCWdvdG8gZXJyb3I7CisJfQorCWluZm8oIkxFR08gVVNCIFRvd2VyIGZpcm13YXJlIHZlcnNpb24gaXMgJWQuJWQgYnVpbGQgJWQiLAorCSAgICAgZ2V0X3ZlcnNpb25fcmVwbHkubWFqb3IsCisJICAgICBnZXRfdmVyc2lvbl9yZXBseS5taW5vciwKKwkgICAgIGxlMTZfdG9fY3B1KGdldF92ZXJzaW9uX3JlcGx5LmJ1aWxkX25vKSk7CisKKworZXhpdDoKKwlkYmcoMiwgIiVzOiBsZWF2ZSwgcmV0dXJuIHZhbHVlIDB4JS44bHggKGRldikiLCBfX0ZVTkNUSU9OX18sIChsb25nKSBkZXYpOworCisJcmV0dXJuIHJldHZhbDsKKworZXJyb3I6CisJdG93ZXJfZGVsZXRlKGRldik7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKioKKyAqCXRvd2VyX2Rpc2Nvbm5lY3QKKyAqCisgKglDYWxsZWQgYnkgdGhlIHVzYiBjb3JlIHdoZW4gdGhlIGRldmljZSBpcyByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4KKyAqLworc3RhdGljIHZvaWQgdG93ZXJfZGlzY29ubmVjdCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgbGVnb191c2JfdG93ZXIgKmRldjsKKwlpbnQgbWlub3I7CisKKwlkYmcoMiwgIiVzOiBlbnRlciIsIF9fRlVOQ1RJT05fXyk7CisKKwlkb3duICgmZGlzY29ubmVjdF9zZW0pOworCisJZGV2ID0gdXNiX2dldF9pbnRmZGF0YSAoaW50ZXJmYWNlKTsKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRlcmZhY2UsIE5VTEwpOworCisKKwlkb3duICgmZGV2LT5zZW0pOworCisJbWlub3IgPSBkZXYtPm1pbm9yOworCisJLyogZ2l2ZSBiYWNrIG91ciBtaW5vciAqLworCXVzYl9kZXJlZ2lzdGVyX2RldiAoaW50ZXJmYWNlLCAmdG93ZXJfY2xhc3MpOworCisJLyogaWYgdGhlIGRldmljZSBpcyBub3Qgb3BlbmVkLCB0aGVuIHdlIGNsZWFuIHVwIHJpZ2h0IG5vdyAqLworCWlmICghZGV2LT5vcGVuX2NvdW50KSB7CisJCXVwICgmZGV2LT5zZW0pOworCQl0b3dlcl9kZWxldGUgKGRldik7CisJfSBlbHNlIHsKKwkJZGV2LT51ZGV2ID0gTlVMTDsKKwkJdXAgKCZkZXYtPnNlbSk7CisJfQorCisJdXAgKCZkaXNjb25uZWN0X3NlbSk7CisKKwlpbmZvKCJMRUdPIFVTQiBUb3dlciAjJWQgbm93IGRpc2Nvbm5lY3RlZCIsIChtaW5vciAtIExFR09fVVNCX1RPV0VSX01JTk9SX0JBU0UpKTsKKworCWRiZygyLCAiJXM6IGxlYXZlIiwgX19GVU5DVElPTl9fKTsKK30KKworCisKKy8qKgorICoJbGVnb191c2JfdG93ZXJfaW5pdAorICovCitzdGF0aWMgaW50IF9faW5pdCBsZWdvX3VzYl90b3dlcl9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKwlpbnQgcmV0dmFsID0gMDsKKworCWRiZygyLCAiJXM6IGVudGVyIiwgX19GVU5DVElPTl9fKTsKKworCS8qIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJnRvd2VyX2RyaXZlcik7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkIGZvciB0aGUgIl9fRklMRV9fIiBkcml2ZXIuIEVycm9yIG51bWJlciAlZCIsIHJlc3VsdCk7CisJCXJldHZhbCA9IC0xOworCQlnb3RvIGV4aXQ7CisJfQorCisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCitleGl0OgorCWRiZygyLCAiJXM6IGxlYXZlLCByZXR1cm4gdmFsdWUgJWQiLCBfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qKgorICoJbGVnb191c2JfdG93ZXJfZXhpdAorICovCitzdGF0aWMgdm9pZCBfX2V4aXQgbGVnb191c2JfdG93ZXJfZXhpdCh2b2lkKQoreworCWRiZygyLCAiJXM6IGVudGVyIiwgX19GVU5DVElPTl9fKTsKKworCS8qIGRlcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXVzYl9kZXJlZ2lzdGVyICgmdG93ZXJfZHJpdmVyKTsKKworCWRiZygyLCAiJXM6IGxlYXZlIiwgX19GVU5DVElPTl9fKTsKK30KKworbW9kdWxlX2luaXQgKGxlZ29fdXNiX3Rvd2VyX2luaXQpOworbW9kdWxlX2V4aXQgKGxlZ29fdXNiX3Rvd2VyX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKKyNpZmRlZiBNT0RVTEVfTElDRU5TRQorTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYyBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldGtpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYmY4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYwpAQCAtMCwwICsxLDU4NiBAQAorLyoKKyAqIFVTQiBQaGlkZ2V0SW50ZXJmYWNlS2l0IGRyaXZlciAxLjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgU2VhbiBZb3VuZyA8c2VhbkBtZXNzLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIFVTQiBQaGlkZ2V0SW50ZXJmYWNlS2l0LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiU2VhbiBZb3VuZyA8c2VhbkBtZXNzLm9yZz4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgUGhpZGdldEludGVyZmFjZUtpdCBEcml2ZXIiCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9HTEFCCQkweDA2YzIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQwMDQJMHgwMDQwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUODg4CTB4MDA0NQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDA0NwkweDAwNTEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQwODgJMHgwMDUzCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVAJCTB4MDkyNQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDg4NAkweDgyMDEKKworI2RlZmluZSBNQVhfSU5URVJGQUNFUwkJCTgKKworc3RydWN0IGRyaXZlcl9pbnRlcmZhY2VraXQgeworCWludCBzZW5zb3JzOworCWludCBpbnB1dHM7CisJaW50IG91dHB1dHM7CisJaW50IGhhc19sY2Q7Cit9OworI2RlZmluZSBpZmtpdChfc2Vuc29ycywgX2lucHV0cywgX291dHB1dHMsIF9sY2QpCQkJXAorc3RhdGljIHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0IHBoXyMjX3NlbnNvcnMjI19pbnB1dHMjI19vdXRwdXRzID0gewlcCisJLnNlbnNvcnMJPSBfc2Vuc29ycywJCQkJCVwKKwkuaW5wdXRzCQk9IF9pbnB1dHMsCQkJCQlcCisJLm91dHB1dHMJPSBfb3V0cHV0cywJCQkJCVwKKwkuaGFzX2xjZAk9IF9sY2QsCQkJCQkJXAorfTsKK2lma2l0KDAsIDAsIDQsIDApOworaWZraXQoOCwgOCwgOCwgMCk7CitpZmtpdCgwLCA0LCA3LCAxKTsKK2lma2l0KDgsIDgsIDQsIDApOworaWZraXQoMCwgOCwgOCwgMSk7CisKK3N0cnVjdCBwaGlkZ2V0X2ludGVyZmFjZWtpdCB7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisJc3RydWN0IGRyaXZlcl9pbnRlcmZhY2VraXQgKmlma2l0OworCWludCBvdXRwdXRzW01BWF9JTlRFUkZBQ0VTXTsKKwlpbnQgaW5wdXRzW01BWF9JTlRFUkZBQ0VTXTsKKwlpbnQgc2Vuc29yc1tNQVhfSU5URVJGQUNFU107CisJdTggbGNkX2ZpbGVzX29uOworCisJc3RydWN0IHVyYiAqaXJxOworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CisJZG1hX2FkZHJfdCBkYXRhX2RtYTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0geworCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQwMDQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzAwNH0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDg4OCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGhfODg4fSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUMDQ3KSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwaF8wNDd9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQwODgpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzA4OH0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVAsIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUODg0KSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwaF84ODR9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworc3RhdGljIGludCBjaGFuZ2Vfb3V0cHV0cyhzdHJ1Y3QgcGhpZGdldF9pbnRlcmZhY2VraXQgKmtpdCwgaW50IG91dHB1dF9udW0sIGludCBlbmFibGUpCit7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCWludCByZXR2YWw7CisJaW50IG47CisKKwlidWZmZXIgPSBrbWFsbG9jKDQsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIoJmtpdC0+dWRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLAorCQkJX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJa2l0LT5vdXRwdXRzW291dHB1dF9udW1dID0gZW5hYmxlOworCW1lbXNldChidWZmZXIsIDAsIDQpOworCWZvciAobj0wOyBuPDg7IG4rKykgeworCQlpZiAoa2l0LT5vdXRwdXRzW25dKSB7CisJCQlidWZmZXJbMF0gfD0gMSA8PCBuOworCQl9CisJfQorCisJZGV2X2RiZygma2l0LT51ZGV2LT5kZXYsICJzZW5kaW5nIGRhdGE6ICUwMnhcbiIsIGJ1ZmZlclswXSk7CisKKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coa2l0LT51ZGV2LAorCQkJIHVzYl9zbmRjdHJscGlwZShraXQtPnVkZXYsIDApLAorCQkJIDB4MDksIDB4MjEsIDB4MDIwMCwgMHgwMDAwLCBidWZmZXIsIDQsIDIwMDApOworCisJaWYgKHJldHZhbCAhPSA0KQorCQlkZXZfZXJyKCZraXQtPnVkZXYtPmRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwgCisJCQkJcmV0dmFsKTsKKwlrZnJlZShidWZmZXIpOworCisJcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOworfQorCitzdGF0aWMgaW50IGNoYW5nZV9zdHJpbmcoc3RydWN0IHBoaWRnZXRfaW50ZXJmYWNla2l0ICpraXQsIGNvbnN0IGNoYXIgKmRpc3BsYXksIHVuc2lnbmVkIGNoYXIgcm93KQoreworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqZm9ybV9idWZmZXI7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisJaW50IGksaiwgbGVuLCBidWZfcHRyOworCQorCWJ1ZmZlciA9IGttYWxsb2MoOCwgR0ZQX0tFUk5FTCk7CisJZm9ybV9idWZmZXIgPSBrbWFsbG9jKDMwLCBHRlBfS0VSTkVMKTsKKwlpZiAoKCFidWZmZXIpIHx8ICghZm9ybV9idWZmZXIpKSB7CisJCWRldl9lcnIoJmtpdC0+dWRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJbGVuID0gc3RybGVuKGRpc3BsYXkpOworCWlmIChsZW4gPiAyMCkKKwkJbGVuID0gMjA7CisKKwlkZXZfZGJnKCZraXQtPnVkZXYtPmRldiwgIlNldHRpbmcgTENEIGxpbmUgJWQgdG8gJXNcbiIsIHJvdywgZGlzcGxheSk7CisKKwlmb3JtX2J1ZmZlclswXSA9IHJvdyAqIDB4NDAgKyAweDgwOworCWZvcm1fYnVmZmVyWzFdID0gMHgwMjsKKwlidWZfcHRyID0gMjsKKwlmb3IgKGkgPSAwOyBpPGxlbjsgaSsrKQorCQlmb3JtX2J1ZmZlcltidWZfcHRyKytdID0gZGlzcGxheVtpXTsKKworCWZvciAoaSA9IDA7IGkgPCAoMjAgLSBsZW4pOyBpKyspCisJCWZvcm1fYnVmZmVyW2J1Zl9wdHIrK10gPSAweDIwOworCWZvcm1fYnVmZmVyW2J1Zl9wdHIrK10gPSAweDAxOworCWZvcm1fYnVmZmVyW2J1Zl9wdHIrK10gPSByb3cgKiAweDQwICsgMHg4MCArIHN0cmxlbihkaXNwbGF5KTsKKworCWZvciAoaSA9IDA7IGkgPCBidWZfcHRyOyBpICs9IDcpIHsKKwkJaWYgKChidWZfcHRyIC0gaSkgPiA3KQorCQkJbGVuID0gNzsKKwkJZWxzZQorCQkJbGVuID0gKGJ1Zl9wdHIgLSBpKTsKKwkJZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKQorCQkJYnVmZmVyW2pdID0gZm9ybV9idWZmZXJbaSArIGpdOworCQlidWZmZXJbN10gPSBsZW47CisKKwkJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKGtpdC0+dWRldiwKKwkJCQkgdXNiX3NuZGN0cmxwaXBlKGtpdC0+dWRldiwgMCksCisJCQkJIDB4MDksIDB4MjEsIDB4MDIwMCwgMHgwMDAwLCBidWZmZXIsIDgsIDIwMDApOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXR2YWwgPSAwOworZXhpdDoKKwlrZnJlZShidWZmZXIpOworCWtmcmVlKGZvcm1fYnVmZmVyKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKyNkZWZpbmUgc2V0X2xjZF9saW5lKG51bWJlcikJXAorc3RhdGljIHNzaXplX3QgbGNkX2xpbmVfIyNudW1iZXIoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJXAorewkJCQkJCQkJCQkJXAorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJCQlcCisJc3RydWN0IHBoaWRnZXRfaW50ZXJmYWNla2l0ICpraXQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKKwljaGFuZ2Vfc3RyaW5nKGtpdCwgYnVmLCBudW1iZXIgLSAxKTsJCQkJCQlcCisJcmV0dXJuIGNvdW50OwkJCQkJCQkJCVwKK30JCQkJCQkJCQkJCVwKK3N0YXRpYyBERVZJQ0VfQVRUUihsY2RfbGluZV8jI251bWJlciwgU19JV1VHTywgTlVMTCwgbGNkX2xpbmVfIyNudW1iZXIpOworc2V0X2xjZF9saW5lKDEpOworc2V0X2xjZF9saW5lKDIpOworCitzdGF0aWMgc3NpemVfdCBzZXRfYmFja2xpZ2h0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHBoaWRnZXRfaW50ZXJmYWNla2l0ICpraXQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCWludCBlbmFibGVkOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKwkKKwlidWZmZXIgPSBrbWFsbG9jKDgsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIoJmtpdC0+dWRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHNzY2FuZihidWYsICIlZCIsICZlbmFibGVkKSA8IDEpIHsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKwltZW1zZXQoYnVmZmVyLCAweDAwLCA4KTsKKwlpZiAoZW5hYmxlZCkKKwkJYnVmZmVyWzBdID0gMHgwMTsKKwlidWZmZXJbN10gPSAweDExOworCisJZGV2X2RiZygma2l0LT51ZGV2LT5kZXYsICJTZXR0aW5nIGJhY2tsaWdodCB0byAlc1xuIiwgZW5hYmxlZCA/ICJvbiIgOiAib2ZmIik7CisJCisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKGtpdC0+dWRldiwKKwkJCSB1c2Jfc25kY3RybHBpcGUoa2l0LT51ZGV2LCAwKSwKKwkJCSAweDA5LCAweDIxLCAweDAyMDAsIDB4MDAwMCwgYnVmZmVyLCA4LCAyMDAwKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZ290byBleGl0OworCisJcmV0dmFsID0gY291bnQ7CitleGl0OgorCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJldHZhbDsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihiYWNrbGlnaHQsIFNfSVdVR08sIE5VTEwsIHNldF9iYWNrbGlnaHQpOworCitzdGF0aWMgdm9pZCByZW1vdmVfbGNkX2ZpbGVzKHN0cnVjdCBwaGlkZ2V0X2ludGVyZmFjZWtpdCAqa2l0KQoreworCWlmIChraXQtPmxjZF9maWxlc19vbikgeworCQlkZXZfZGJnKCZraXQtPnVkZXYtPmRldiwgIlJlbW92aW5nIGxjZCBmaWxlc1xuIik7CisJCWRldmljZV9yZW1vdmVfZmlsZSgma2l0LT5pbnRmLT5kZXYsICZkZXZfYXR0cl9sY2RfbGluZV8xKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZraXQtPmludGYtPmRldiwgJmRldl9hdHRyX2xjZF9saW5lXzIpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmtpdC0+aW50Zi0+ZGV2LCAmZGV2X2F0dHJfYmFja2xpZ2h0KTsKKwl9Cit9CisKK3N0YXRpYyBzc2l6ZV90IGVuYWJsZV9sY2RfZmlsZXMoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgcGhpZGdldF9pbnRlcmZhY2VraXQgKmtpdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJaW50IGVuYWJsZTsKKwkKKwlpZiAoa2l0LT5pZmtpdC0+aGFzX2xjZCA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmZW5hYmxlKSA8IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGVuYWJsZSkgeworCQlpZiAoIWtpdC0+bGNkX2ZpbGVzX29uKSB7CisJCQlkZXZfZGJnKCZraXQtPnVkZXYtPmRldiwgIkFkZGluZyBsY2QgZmlsZXNcbiIpOworCQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZraXQtPmludGYtPmRldiwgJmRldl9hdHRyX2xjZF9saW5lXzEpOworCQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZraXQtPmludGYtPmRldiwgJmRldl9hdHRyX2xjZF9saW5lXzIpOworCQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZraXQtPmludGYtPmRldiwgJmRldl9hdHRyX2JhY2tsaWdodCk7CisJCQlraXQtPmxjZF9maWxlc19vbiA9IDE7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoa2l0LT5sY2RfZmlsZXNfb24pIHsKKwkJCXJlbW92ZV9sY2RfZmlsZXMoa2l0KTsKKwkJCWtpdC0+bGNkX2ZpbGVzX29uID0gMDsKKwkJfQorCX0KKwkKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobGNkLCBTX0lXVUdPLCBOVUxMLCBlbmFibGVfbGNkX2ZpbGVzKTsKKworc3RhdGljIHZvaWQgaW50ZXJmYWNla2l0X2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwaGlkZ2V0X2ludGVyZmFjZWtpdCAqa2l0ID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IGtpdC0+ZGF0YTsKKwlpbnQgc3RhdHVzOworCWludCBuOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoJCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CS8qIHVubGluayAqLworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCXJldHVybjsKKwkvKiAtRVBJUEU6ICBzaG91bGQgY2xlYXIgdGhlIGhhbHQgKi8KKwlkZWZhdWx0OgkJLyogZXJyb3IgKi8KKwkJZ290byByZXN1Ym1pdDsKKwl9CisKKwlmb3IgKG49MDsgbjw4OyBuKyspIHsKKwkJa2l0LT5pbnB1dHNbbl0gPSBidWZmZXJbMV0gJiAoMSA8PCBuKSA/IDEgOiAwOworCX0KKworCWlmIChidWZmZXJbMF0gJiAxKSB7CisJCWtpdC0+c2Vuc29yc1s0XSA9IGJ1ZmZlclsyXSArIChidWZmZXJbM10gJiAweDBmKSAqIDI1NjsKKwkJa2l0LT5zZW5zb3JzWzVdID0gYnVmZmVyWzRdICsgKGJ1ZmZlclszXSAmIDB4ZjApICogMTY7CisJCWtpdC0+c2Vuc29yc1s2XSA9IGJ1ZmZlcls1XSArIChidWZmZXJbNl0gJiAweDBmKSAqIDI1NjsKKwkJa2l0LT5zZW5zb3JzWzddID0gYnVmZmVyWzddICsgKGJ1ZmZlcls2XSAmIDB4ZjApICogMTY7CisJfSBlbHNlIHsKKwkJa2l0LT5zZW5zb3JzWzBdID0gYnVmZmVyWzJdICsgKGJ1ZmZlclszXSAmIDB4MGYpICogMjU2OworCQlraXQtPnNlbnNvcnNbMV0gPSBidWZmZXJbNF0gKyAoYnVmZmVyWzNdICYgMHhmMCkgKiAxNjsKKwkJa2l0LT5zZW5zb3JzWzJdID0gYnVmZmVyWzVdICsgKGJ1ZmZlcls2XSAmIDB4MGYpICogMjU2OworCQlraXQtPnNlbnNvcnNbM10gPSBidWZmZXJbN10gKyAoYnVmZmVyWzZdICYgMHhmMCkgKiAxNjsKKwl9CisKK3Jlc3VibWl0OgorCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgU0xBQl9BVE9NSUMpOworCWlmIChzdGF0dXMpCisJCWVycigiY2FuJ3QgcmVzdWJtaXQgaW50ciwgJXMtJXMvaW50ZXJmYWNla2l0MCwgc3RhdHVzICVkIiwKKwkJCWtpdC0+dWRldi0+YnVzLT5idXNfbmFtZSwKKwkJCWtpdC0+dWRldi0+ZGV2cGF0aCwgc3RhdHVzKTsKK30KKworI2RlZmluZSBzaG93X3NldF9vdXRwdXQodmFsdWUpCQlcCitzdGF0aWMgc3NpemVfdCBzZXRfb3V0cHV0IyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwgCVwKKwkJCQkJCQlzaXplX3QgY291bnQpCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCisJc3RydWN0IHBoaWRnZXRfaW50ZXJmYWNla2l0ICpraXQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwlcCisJaW50IGVuYWJsZWQ7CQkJCQkJCVwKKwlpbnQgcmV0dmFsOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJaWYgKHNzY2FuZihidWYsICIlZCIsICZlbmFibGVkKSA8IDEpIHsJCQkJXAorCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCXJldHZhbCA9IGNoYW5nZV9vdXRwdXRzKGtpdCwgdmFsdWUgLSAxLCBlbmFibGVkID8gMSA6IDApOwlcCisJCQkJCQkJCQlcCisJcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IGNvdW50OwkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBzc2l6ZV90IHNob3dfb3V0cHV0IyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKKwlzdHJ1Y3QgcGhpZGdldF9pbnRlcmZhY2VraXQgKmtpdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwga2l0LT5vdXRwdXRzW3ZhbHVlIC0gMV0pOwkJXAorfQkJCQkJCQkJCVwKK3N0YXRpYyBERVZJQ0VfQVRUUihvdXRwdXQjI3ZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTywJCQlcCisJCXNob3dfb3V0cHV0IyN2YWx1ZSwgc2V0X291dHB1dCMjdmFsdWUpOworc2hvd19zZXRfb3V0cHV0KDEpOworc2hvd19zZXRfb3V0cHV0KDIpOworc2hvd19zZXRfb3V0cHV0KDMpOworc2hvd19zZXRfb3V0cHV0KDQpOworc2hvd19zZXRfb3V0cHV0KDUpOworc2hvd19zZXRfb3V0cHV0KDYpOworc2hvd19zZXRfb3V0cHV0KDcpOworc2hvd19zZXRfb3V0cHV0KDgpOwkvKiBzaG91bGQgYmUgTUFYX0lOVEVSRkFDRVMgLSAxICovCisKKyNkZWZpbmUgc2hvd19pbnB1dCh2YWx1ZSkJXAorc3RhdGljIHNzaXplX3Qgc2hvd19pbnB1dCMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCisJc3RydWN0IHBoaWRnZXRfaW50ZXJmYWNla2l0ICpraXQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwlcCisJCQkJCQkJCQlcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGtpdC0+aW5wdXRzW3ZhbHVlIC0gMV0pOwkJXAorfQkJCQkJCQkJCVwKK3N0YXRpYyBERVZJQ0VfQVRUUihpbnB1dCMjdmFsdWUsIFNfSVJVR08sIHNob3dfaW5wdXQjI3ZhbHVlLCBOVUxMKTsKKworc2hvd19pbnB1dCgxKTsKK3Nob3dfaW5wdXQoMik7CitzaG93X2lucHV0KDMpOworc2hvd19pbnB1dCg0KTsKK3Nob3dfaW5wdXQoNSk7CitzaG93X2lucHV0KDYpOworc2hvd19pbnB1dCg3KTsKK3Nob3dfaW5wdXQoOCk7CQkvKiBzaG91bGQgYmUgTUFYX0lOVEVSRkFDRVMgLSAxICovCisKKyNkZWZpbmUgc2hvd19zZW5zb3IodmFsdWUpCVwKK3N0YXRpYyBzc2l6ZV90IHNob3dfc2Vuc29yIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKKwlzdHJ1Y3QgcGhpZGdldF9pbnRlcmZhY2VraXQgKmtpdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwga2l0LT5zZW5zb3JzW3ZhbHVlIC0gMV0pOwkJXAorfQkJCQkJCQkJCVwKK3N0YXRpYyBERVZJQ0VfQVRUUihzZW5zb3IjI3ZhbHVlLCBTX0lSVUdPLCBzaG93X3NlbnNvciMjdmFsdWUsIE5VTEwpOworCitzaG93X3NlbnNvcigxKTsKK3Nob3dfc2Vuc29yKDIpOworc2hvd19zZW5zb3IoMyk7CitzaG93X3NlbnNvcig0KTsKK3Nob3dfc2Vuc29yKDUpOworc2hvd19zZW5zb3IoNik7CitzaG93X3NlbnNvcig3KTsKK3Nob3dfc2Vuc29yKDgpOwkJLyogc2hvdWxkIGJlIE1BWF9JTlRFUkZBQ0VTIC0gMSAqLworCitzdGF0aWMgaW50IGludGVyZmFjZWtpdF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCXN0cnVjdCBwaGlkZ2V0X2ludGVyZmFjZWtpdCAqa2l0OworCXN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0ICppZmtpdDsKKwlpbnQgcGlwZSwgbWF4cDsKKworCWlma2l0ID0gKHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0ICopaWQtPmRyaXZlcl9pbmZvOworCWlmICghaWZraXQpCisJCXJldHVybiAtRU5PREVWOworCisJaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJaWYgKGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDEpCisJCXJldHVybiAtRU5PREVWOworCisJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOworCWlmICghKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkpIAorCQlyZXR1cm4gLUVOT0RFVjsKKwkvKgorCSAqIGJtQXR0cmlidXRlcworCSAqLworCXBpcGUgPSB1c2JfcmN2aW50cGlwZShkZXYsIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKTsKKwltYXhwID0gdXNiX21heHBhY2tldChkZXYsIHBpcGUsIHVzYl9waXBlb3V0KHBpcGUpKTsKKwkKKwlraXQgPSBrbWFsbG9jKHNpemVvZigqa2l0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGtpdCAgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQoa2l0LCAwLCBzaXplb2YoKmtpdCkpOworCWtpdC0+aWZraXQgPSBpZmtpdDsKKworCWtpdC0+ZGF0YSA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCA4LCBTTEFCX0FUT01JQywgJmtpdC0+ZGF0YV9kbWEpOworCWlmICgha2l0LT5kYXRhKSB7CisJCWtmcmVlKGtpdCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWtpdC0+aXJxID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWtpdC0+aXJxKSB7CisJCXVzYl9idWZmZXJfZnJlZShkZXYsIDgsIGtpdC0+ZGF0YSwga2l0LT5kYXRhX2RtYSk7CisJCWtmcmVlKGtpdCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWtpdC0+dWRldiA9IHVzYl9nZXRfZGV2KGRldik7CisJa2l0LT5pbnRmID0gaW50ZjsKKwl1c2JfZmlsbF9pbnRfdXJiKGtpdC0+aXJxLCBraXQtPnVkZXYsIHBpcGUsIGtpdC0+ZGF0YSwKKwkJCShtYXhwID4gOCA/IDggOiBtYXhwKSwKKwkJCWludGVyZmFjZWtpdF9pcnEsIGtpdCwgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisJa2l0LT5pcnEtPnRyYW5zZmVyX2RtYSA9IGtpdC0+ZGF0YV9kbWE7CisJa2l0LT5pcnEtPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBraXQpOworCisJaWYgKHVzYl9zdWJtaXRfdXJiKGtpdC0+aXJxLCBHRlBfS0VSTkVMKSkgeworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoaWZraXQtPm91dHB1dHMgPj0gNCkgeworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX291dHB1dDEpOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX291dHB1dDIpOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX291dHB1dDMpOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX291dHB1dDQpOworCX0KKwlpZiAoaWZraXQtPm91dHB1dHMgPT0gOCkgeworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX291dHB1dDUpOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX291dHB1dDYpOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX291dHB1dDcpOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX291dHB1dDgpOworCX0gCisKKwlpZiAoaWZraXQtPmlucHV0cyA+PSA0KSB7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQxKTsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9pbnB1dDIpOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2lucHV0Myk7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQ0KTsKKwl9CisJaWYgKGlma2l0LT5pbnB1dHMgPT0gOCkgeworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2lucHV0NSk7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQ2KTsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9pbnB1dDcpOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2lucHV0OCk7CisJfQorCisJaWYgKGlma2l0LT5zZW5zb3JzID49IDQpIHsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zZW5zb3IxKTsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zZW5zb3IyKTsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zZW5zb3IzKTsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zZW5zb3I0KTsKKwl9CisJaWYgKGlma2l0LT5zZW5zb3JzID49IDcpIHsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zZW5zb3I1KTsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zZW5zb3I2KTsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zZW5zb3I3KTsKKwl9CisJaWYgKGlma2l0LT5zZW5zb3JzID09IDgpIHsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zZW5zb3I4KTsKKwl9CisKKwlpZiAoaWZraXQtPmhhc19sY2QpCisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfbGNkKTsKKworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJVU0IgUGhpZGdldEludGVyZmFjZUtpdCAlZC8lZC8lZCBhdHRhY2hlZFxuIiwKKwkJCWlma2l0LT5zZW5zb3JzLCBpZmtpdC0+aW5wdXRzLCBpZmtpdC0+b3V0cHV0cyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaW50ZXJmYWNla2l0X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgcGhpZGdldF9pbnRlcmZhY2VraXQgKmtpdDsKKworCWtpdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisJaWYgKCFraXQpCisJCXJldHVybjsKKworCWlmIChraXQtPmlma2l0LT5vdXRwdXRzID49IDQpIHsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX291dHB1dDEpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0Mik7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQzKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX291dHB1dDQpOworCX0KKwlpZiAoa2l0LT5pZmtpdC0+b3V0cHV0cyA9PSA4KSB7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQ1KTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX291dHB1dDYpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0Nyk7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQ4KTsKKwl9CisKKwlpZiAoa2l0LT5pZmtpdC0+aW5wdXRzID49IDQpIHsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2lucHV0MSk7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9pbnB1dDIpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQzKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2lucHV0NCk7CisJfQorCWlmIChraXQtPmlma2l0LT5pbnB1dHMgPT0gOCkgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQ1KTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2lucHV0Nik7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9pbnB1dDcpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQ4KTsKKwl9CisKKwlpZiAoa2l0LT5pZmtpdC0+c2Vuc29ycyA+PSA0KSB7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zZW5zb3IxKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3NlbnNvcjIpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yMyk7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zZW5zb3I0KTsKKwl9CisJaWYgKGtpdC0+aWZraXQtPnNlbnNvcnMgPj0gNykgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yNSk7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zZW5zb3I2KTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3NlbnNvcjcpOworCX0KKwlpZiAoa2l0LT5pZmtpdC0+c2Vuc29ycyA9PSA4KSB7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zZW5zb3I4KTsKKwl9CisJaWYgKGtpdC0+aWZraXQtPmhhc19sY2QpCisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9sY2QpOworCisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCIFBoaWRnZXRJbnRlcmZhY2VLaXQgJWQvJWQvJWQgZGV0YWNoZWRcbiIsCisJCWtpdC0+aWZraXQtPnNlbnNvcnMsIGtpdC0+aWZraXQtPmlucHV0cywga2l0LT5pZmtpdC0+b3V0cHV0cyk7CisKKwl1c2Jfa2lsbF91cmIoa2l0LT5pcnEpOworCXVzYl9mcmVlX3VyYihraXQtPmlycSk7CisJdXNiX2J1ZmZlcl9mcmVlKGtpdC0+dWRldiwgOCwga2l0LT5kYXRhLCBraXQtPmRhdGFfZG1hKTsKKworCXVzYl9wdXRfZGV2KGtpdC0+dWRldik7CisJa2ZyZWUoa2l0KTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGludGVyZmFjZWtpdF9kcml2ZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAicGhpZGdldGtpdCIsCisJLnByb2JlID0gaW50ZXJmYWNla2l0X3Byb2JlLAorCS5kaXNjb25uZWN0ID0gaW50ZXJmYWNla2l0X2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0gaWRfdGFibGUKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGludGVyZmFjZWtpdF9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbCA9IDA7CisKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmludGVyZmFjZWtpdF9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkIiwgcmV0dmFsKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpbnRlcmZhY2VraXRfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZpbnRlcmZhY2VraXRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoaW50ZXJmYWNla2l0X2luaXQpOworbW9kdWxlX2V4aXQoaW50ZXJmYWNla2l0X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldHNlcnZvLmMgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRzZXJ2by5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZDI5MTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRzZXJ2by5jCkBAIC0wLDAgKzEsMzQyIEBACisvKgorICogVVNCIFBoaWRnZXRTZXJ2byBkcml2ZXIgMS4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgVVNCIFBoaWRnZXRTZXJ2byB2ZXJzaW9uIDIuMCBhbmQgMy4wIHNlcnZvIAorICogY29udHJvbGxlcnMgYXZhaWxhYmxlIGF0OiBodHRwOi8vd3d3LnBoaWRnZXRzLmNvbS8gCisgKgorICogTm90ZSB0aGF0IHRoZSBkcml2ZXIgdGFrZXMgaW5wdXQgYXM6IGRlZ3JlZXMubWludXRlcworICoKKyAqIENBVVRJT046IEdlbmVyYWxseSB5b3Ugc2hvdWxkIHVzZSAwIDwgZGVncmVlcyA8IDE4MCBhcyBhbnl0aGluZyBlbHNlCisgKiBpcyBwcm9iYWJseSBiZXlvbmQgdGhlIHJhbmdlIG9mIHlvdXIgc2Vydm8gYW5kIG1heSBkYW1hZ2UgaXQuCisgKgorICogSnVuIDE2LCAyMDA0OiBTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPgorICogIC0gY2xlYW51cHMKKyAqICAtIHdhcyB1c2luZyBtZW1vcnkgYWZ0ZXIga2ZyZWUoKQorICogQXVnIDgsIDIwMDQ6IFNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+CisgKiAgLSBzZXQgdGhlIGhpZ2hlc3QgYW5nbGUgYXMgaGlnaCBhcyB0aGUgaGFyZHdhcmUgYWxsb3dzLCB0aGVyZSBhcmUgCisgKiAgICBzb21lIG9kZCBzZXJ2b3Mgb3V0IHRoZXJlCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCisjZGVmaW5lIERFQlVHCTEKKyNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2RlZmluZSBEUklWRVJfQVVUSE9SICJTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBQaGlkZ2V0U2Vydm8gRHJpdmVyIgorCisjZGVmaW5lIFZFTkRPUl9JRF9HTEFCCQkJCTB4MDZjMgorI2RlZmluZSBERVZJQ0VfSURfR0xBQl9QSElER0VUU0VSVk9fUVVBRAkweDAwMzgKKyNkZWZpbmUgREVWSUNFX0lEX0dMQUJfUEhJREdFVFNFUlZPX1VOSQkJMHgwMDM5CisKKyNkZWZpbmUgVkVORE9SX0lEX1dJU0VHUk9VUAkJCTB4MDkyNQorI2RlZmluZSBWRU5ET1JfSURfV0lTRUdST1VQX1BISURHRVRTRVJWT19RVUFECTB4ODEwMQorI2RlZmluZSBWRU5ET1JfSURfV0lTRUdST1VQX1BISURHRVRTRVJWT19VTkkJMHg4MTA0CisKKyNkZWZpbmUgU0VSVk9fVkVSU0lPTl8zMAkJCTB4MDEKKyNkZWZpbmUgU0VSVk9fQ09VTlRfUVVBRAkJCTB4MDIKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJeworCQlVU0JfREVWSUNFKFZFTkRPUl9JRF9HTEFCLCBERVZJQ0VfSURfR0xBQl9QSElER0VUU0VSVk9fUVVBRCksIAorCQkuZHJpdmVyX2luZm8gPSBTRVJWT19WRVJTSU9OXzMwIHwgU0VSVk9fQ09VTlRfUVVBRCAKKwl9LAorCXsKKwkJVVNCX0RFVklDRShWRU5ET1JfSURfR0xBQiwgREVWSUNFX0lEX0dMQUJfUEhJREdFVFNFUlZPX1VOSSksCisJCS5kcml2ZXJfaW5mbyA9IFNFUlZPX1ZFUlNJT05fMzAgCisJfSwKKwl7CisJCVVTQl9ERVZJQ0UoVkVORE9SX0lEX1dJU0VHUk9VUCwgCisJCQkJVkVORE9SX0lEX1dJU0VHUk9VUF9QSElER0VUU0VSVk9fUVVBRCksCisJCS5kcml2ZXJfaW5mbyA9IFNFUlZPX0NPVU5UX1FVQUQgCisJfSwKKwl7CisJCVVTQl9ERVZJQ0UoVkVORE9SX0lEX1dJU0VHUk9VUCwgCisJCQkJVkVORE9SX0lEX1dJU0VHUk9VUF9QSElER0VUU0VSVk9fVU5JKSwKKwkJLmRyaXZlcl9pbmZvID0gMAorCX0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CisKK3N0cnVjdCBwaGlkZ2V0X3NlcnZvIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwl1bG9uZyB0eXBlOworCWludCBwdWxzZVs0XTsKKwlpbnQgZGVncmVlc1s0XTsKKwlpbnQgbWludXRlc1s0XTsKK307CisKK3N0YXRpYyBpbnQKK2NoYW5nZV9wb3NpdGlvbl92MzAoc3RydWN0IHBoaWRnZXRfc2Vydm8gKnNlcnZvLCBpbnQgc2Vydm9fbm8sIGludCBkZWdyZWVzLCAKKwkJCQkJCQkJaW50IG1pbnV0ZXMpCit7CisJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisKKwlpZiAoZGVncmVlcyA8IC0yMyB8fCBkZWdyZWVzID4gMzYyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJ1ZmZlciA9IGttYWxsb2MoNiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2Vycigmc2Vydm8tPnVkZXYtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwKKwkJCV9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qCisJICogcHVsc2UgPSAwIC0gNDA5NQorCSAqIGFuZ2xlID0gMCAtIDE4MCBkZWdyZWVzCisJICoKKwkgKiBwdWxzZSA9IGFuZ2xlICogMTAuNiArIDI0My44CQorCSAqLworCXNlcnZvLT5wdWxzZVtzZXJ2b19ub10gPSAoKGRlZ3JlZXMqNjAgKyBtaW51dGVzKSoxMDYgKyAyNDM4KjYwKS82MDA7CQorCXNlcnZvLT5kZWdyZWVzW3NlcnZvX25vXT0gZGVncmVlczsKKwlzZXJ2by0+bWludXRlc1tzZXJ2b19ub109IG1pbnV0ZXM7CQorCisJLyogCisJICogVGhlIFBoaWRnZXRTZXJ2byB2My4wIGlzIGNvbnRyb2xsZWQgYnkgc2VuZGluZyA2IGJ5dGVzLAorCSAqIDQgKiAxMiBiaXRzIGZvciBlYWNoIHNlcnZvLgorCSAqCisJICogbG93ID0gbG93ZXIgOCBiaXRzIHB1bHNlCisJICogaGlnaCA9IGhpZ2hlciA0IGJpdHMgcHVsc2UKKwkgKgorCSAqIG9mZnNldCAgICAgYml0cworCSAqICstLS0rLS0tLS0tLS0tLS0tLS0tLS0rCisJICogfCAwIHwgICAgICBsb3cgMCAgICAgIHwKKwkgKiArLS0tKy0tLS0tLS0tKy0tLS0tLS0tKworCSAqIHwgMSB8IGhpZ2ggMSB8IGhpZ2ggMCB8CisJICogKy0tLSstLS0tLS0tLSstLS0tLS0tLSsKKwkgKiB8IDIgfCAgICAgIGxvdyAxICAgICAgfAorCSAqICstLS0rLS0tLS0tLS0tLS0tLS0tLS0rCisJICogfCAzIHwgICAgICBsb3cgMiAgICAgIHwKKwkgKiArLS0tKy0tLS0tLS0tKy0tLS0tLS0tKworCSAqIHwgNCB8IGhpZ2ggMyB8IGhpZ2ggMiB8CisJICogKy0tLSstLS0tLS0tLSstLS0tLS0tLSsKKwkgKiB8IDUgfCAgICAgIGxvdyAzICAgICAgfAorCSAqICstLS0rLS0tLS0tLS0tLS0tLS0tLS0rCisJICovCisKKwlidWZmZXJbMF0gPSBzZXJ2by0+cHVsc2VbMF0gJiAweGZmOworCWJ1ZmZlclsxXSA9IChzZXJ2by0+cHVsc2VbMF0gPj4gOCAmIDB4MGYpCisJICAgIHwgKHNlcnZvLT5wdWxzZVsxXSA+PiA0ICYgMHhmMCk7CisJYnVmZmVyWzJdID0gc2Vydm8tPnB1bHNlWzFdICYgMHhmZjsKKwlidWZmZXJbM10gPSBzZXJ2by0+cHVsc2VbMl0gJiAweGZmOworCWJ1ZmZlcls0XSA9IChzZXJ2by0+cHVsc2VbMl0gPj4gOCAmIDB4MGYpCisJICAgIHwgKHNlcnZvLT5wdWxzZVszXSA+PiA0ICYgMHhmMCk7CisJYnVmZmVyWzVdID0gc2Vydm8tPnB1bHNlWzNdICYgMHhmZjsKKworCWRldl9kYmcoJnNlcnZvLT51ZGV2LT5kZXYsCisJCSJkYXRhOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJYnVmZmVyWzBdLCBidWZmZXJbMV0sIGJ1ZmZlclsyXSwKKwkJYnVmZmVyWzNdLCBidWZmZXJbNF0sIGJ1ZmZlcls1XSk7CisKKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coc2Vydm8tPnVkZXYsCisJCQkJIHVzYl9zbmRjdHJscGlwZShzZXJ2by0+dWRldiwgMCksCisJCQkJIDB4MDksIDB4MjEsIDB4MDIwMCwgMHgwMDAwLCBidWZmZXIsIDYsIDIwMDApOworCisJa2ZyZWUoYnVmZmVyKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5nZV9wb3NpdGlvbl92MjAoc3RydWN0IHBoaWRnZXRfc2Vydm8gKnNlcnZvLCBpbnQgc2Vydm9fbm8sIGludCBkZWdyZWVzLAorCQkJCQkJCQlpbnQgbWludXRlcykKK3sKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKworCWlmIChkZWdyZWVzIDwgLTIzIHx8IGRlZ3JlZXMgPiAyNzgpCisJCXJldHVybiAtRUlOVkFMOworCisJYnVmZmVyID0ga21hbGxvYygyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKCZzZXJ2by0+dWRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLAorCQkJX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyoKKwkgKiBhbmdsZSA9IDAgLSAxODAgZGVncmVlcworCSAqIHB1bHNlID0gYW5nbGUgKyAyMworCSAqLworCXNlcnZvLT5wdWxzZVtzZXJ2b19ub109IGRlZ3JlZXMgKyAyMzsKKwlzZXJ2by0+ZGVncmVlc1tzZXJ2b19ub109IGRlZ3JlZXM7CisJc2Vydm8tPm1pbnV0ZXNbc2Vydm9fbm9dPSAwOworCisJLyoKKwkgKiBUaGUgUGhpZGdldFNlcnZvIHYyLjAgaXMgY29udHJvbGxlZCBieSBzZW5kaW5nIHR3byBieXRlcy4gVGhlCisJICogZmlyc3QgYnl0ZSBpcyB0aGUgc2Vydm8gbnVtYmVyIHhvcidlZCB3aXRoIDI6CisJICoKKwkgKiBzZXJ2byAwID0gMgorCSAqIHNlcnZvIDEgPSAzCisJICogc2Vydm8gMiA9IDAKKwkgKiBzZXJ2byAzID0gMQorCSAqCisJICogVGhlIHNlY29uZCBieXRlIGlzIHRoZSBwb3NpdGlvbi4KKwkgKi8KKworCWJ1ZmZlclswXSA9IHNlcnZvX25vIF4gMjsKKwlidWZmZXJbMV0gPSBzZXJ2by0+cHVsc2Vbc2Vydm9fbm9dOworCisJZGV2X2RiZygmc2Vydm8tPnVkZXYtPmRldiwgImRhdGE6ICUwMnggJTAyeFxuIiwgYnVmZmVyWzBdLCBidWZmZXJbMV0pOworCisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHNlcnZvLT51ZGV2LAorCQkJCSB1c2Jfc25kY3RybHBpcGUoc2Vydm8tPnVkZXYsIDApLAorCQkJCSAweDA5LCAweDIxLCAweDAyMDAsIDB4MDAwMCwgYnVmZmVyLCAyLCAyMDAwKTsKKworCWtmcmVlKGJ1ZmZlcik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisjZGVmaW5lIHNob3dfc2V0KHZhbHVlKQlcCitzdGF0aWMgc3NpemVfdCBzZXRfc2Vydm8jI3ZhbHVlIChzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJXAorCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJXAorewkJCQkJCQkJCVwKKwlpbnQgZGVncmVlcywgbWludXRlcywgcmV0dmFsOwkJCQkJXAorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZSAoZGV2KTsJCVwKKwlzdHJ1Y3QgcGhpZGdldF9zZXJ2byAqc2Vydm8gPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsJCVwKKwkJCQkJCQkJCVwKKwltaW51dGVzID0gMDsJCQkJCQkJXAorCS8qIG11c3QgYXQgbGVhc3QgY29udmVydCBkZWdyZWVzICovCQkJCVwKKwlpZiAoc3NjYW5mIChidWYsICIlZC4lZCIsICZkZWdyZWVzLCAmbWludXRlcykgPCAxKSB7CQlcCisJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJaWYgKG1pbnV0ZXMgPCAwIHx8IG1pbnV0ZXMgPiA1OSkgCQkJCVwKKwkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAorCQkJCQkJCQkJXAorCWlmIChzZXJ2by0+dHlwZSAmIFNFUlZPX1ZFUlNJT05fMzApCQkJCVwKKwkJcmV0dmFsID0gY2hhbmdlX3Bvc2l0aW9uX3YzMCAoc2Vydm8sIHZhbHVlLCBkZWdyZWVzLCAJXAorCQkJCQkJCW1pbnV0ZXMpOwlcCisJZWxzZSAJCQkJCQkJCVwKKwkJcmV0dmFsID0gY2hhbmdlX3Bvc2l0aW9uX3YyMCAoc2Vydm8sIHZhbHVlLCBkZWdyZWVzLCAJXAorCQkJCQkJCW1pbnV0ZXMpOwlcCisJCQkJCQkJCQlcCisJcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiBjb3VudDsJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBzc2l6ZV90IHNob3dfc2Vydm8jI3ZhbHVlIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikgCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlIChkZXYpOwkJXAorCXN0cnVjdCBwaGlkZ2V0X3NlcnZvICpzZXJ2byA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOwkJXAorCQkJCQkJCQkJXAorCXJldHVybiBzcHJpbnRmIChidWYsICIlZC4lMDJkXG4iLCBzZXJ2by0+ZGVncmVlc1t2YWx1ZV0sCVwKKwkJCQlzZXJ2by0+bWludXRlc1t2YWx1ZV0pOwkJCVwKK30JCQkJCQkJCQlcCitzdGF0aWMgREVWSUNFX0FUVFIoc2Vydm8jI3ZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTywJCQlcCisJICBzaG93X3NlcnZvIyN2YWx1ZSwgc2V0X3NlcnZvIyN2YWx1ZSk7CisKK3Nob3dfc2V0KDApOworc2hvd19zZXQoMSk7CitzaG93X3NldCgyKTsKK3Nob3dfc2V0KDMpOworCitzdGF0aWMgaW50CitzZXJ2b19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisJc3RydWN0IHBoaWRnZXRfc2Vydm8gKmRldjsKKworCWRldiA9IGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgcGhpZGdldF9zZXJ2byksIEdGUF9LRVJORUwpOworCWlmIChkZXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldChkZXYsIDB4MDAsIHNpemVvZiAoKmRldikpOworCisJZGV2LT51ZGV2ID0gdXNiX2dldF9kZXYodWRldik7CisJZGV2LT50eXBlID0gaWQtPmRyaXZlcl9pbmZvOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkZXYpOworCisJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3NlcnZvMCk7CisJaWYgKGRldi0+dHlwZSAmIFNFUlZPX0NPVU5UX1FVQUQpIHsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3NlcnZvMSk7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zZXJ2bzIpOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfc2Vydm8zKTsKKwl9CisKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IgJWQtTW90b3IgUGhpZGdldFNlcnZvIHYlZC4wIGF0dGFjaGVkXG4iLAorCQlkZXYtPnR5cGUgJiBTRVJWT19DT1VOVF9RVUFEID8gNCA6IDEsCisJCWRldi0+dHlwZSAmIFNFUlZPX1ZFUlNJT05fMzAgPyAzIDogMik7CisKKwlpZighKGRldi0+dHlwZSAmIFNFUlZPX1ZFUlNJT05fMzApKQorCQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsCisJCQkgIldBUk5JTkc6IHYyLjAgbm90IHRlc3RlZCEgUGxlYXNlIHJlcG9ydCBpZiBpdCB3b3Jrcy5cbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzZXJ2b19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHBoaWRnZXRfc2Vydm8gKmRldjsKKworCWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfc2Vydm8wKTsKKwlpZiAoZGV2LT50eXBlICYgU0VSVk9fQ09VTlRfUVVBRCkgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfc2Vydm8xKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3NlcnZvMik7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zZXJ2bzMpOworCX0KKworCXVzYl9wdXRfZGV2KGRldi0+dWRldik7CisKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IgJWQtTW90b3IgUGhpZGdldFNlcnZvIHYlZC4wIGRldGFjaGVkXG4iLAorCQlkZXYtPnR5cGUgJiBTRVJWT19DT1VOVF9RVUFEID8gNCA6IDEsCisJCWRldi0+dHlwZSAmIFNFUlZPX1ZFUlNJT05fMzAgPyAzIDogMik7CisKKwlrZnJlZShkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2Vydm9fZHJpdmVyID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gInBoaWRnZXRzZXJ2byIsCisJLnByb2JlID0gc2Vydm9fcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBzZXJ2b19kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9IGlkX3RhYmxlCit9OworCitzdGF0aWMgaW50IF9faW5pdAorcGhpZGdldF9zZXJ2b19pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigmc2Vydm9fZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJldHZhbCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQKK3BoaWRnZXRfc2Vydm9fZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZXJ2b19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChwaGlkZ2V0X3NlcnZvX2luaXQpOworbW9kdWxlX2V4aXQocGhpZGdldF9zZXJ2b19leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jIGIvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmY3N2UyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYwpAQCAtMCwwICsxLDU2MyBAQAorLyogLSotIGxpbnV4LWMgLSotICovCisKKy8qIAorICogRHJpdmVyIGZvciBVU0IgUmlvIDUwMAorICoKKyAqIENlc2FyIE1pcXVlbCAobWlxdWVsQGRmLnViYS5hcikKKyAqIAorICogYmFzZWQgb24gaHBfc2Nhbm5lci5jIGJ5IERhdmlkIEUuIE5lbHNvbiAoZG5lbHNvbkBqdW1wLm5ldCkKKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogQmFzZWQgdXBvbiBtb3VzZS5jIChCcmFkIEtlcnlhbikgYW5kIHByaW50ZXIuYyAoTWljaGFlbCBHZWUpLgorICoKKyAqIENoYW5nZWxvZzoKKyAqIDMwLzA1LzIwMDMgIHJlcGxhY2VkIGxvY2svdW5sb2NrIGtlcm5lbCB3aXRoIHVwL2Rvd24KKyAqICAgICAgICAgICAgIERhbmllbGUgQmVsbHVjY2kgIGJlbGx1Y2RhQHRpc2NhbGkuaXQKKyAqICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworI2luY2x1ZGUgInJpbzUwMF91c2IuaCIKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuMSIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiQ2VzYXIgTWlxdWVsIDxtaXF1ZWxAZGYudWJhLmFyPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBSaW8gNTAwIGRyaXZlciIKKworI2RlZmluZSBSSU9fTUlOT1IJNjQKKworLyogc3RhbGwvd2FpdCB0aW1lb3V0IGZvciByaW8gKi8KKyNkZWZpbmUgTkFLX1RJTUVPVVQgKEhaKQorCisjZGVmaW5lIElCVUZfU0laRSAweDEwMDAKKworLyogU2l6ZSBvZiB0aGUgcmlvIGJ1ZmZlciAqLworI2RlZmluZSBPQlVGX1NJWkUgMHgxMDAwMAorCitzdHJ1Y3QgcmlvX3VzYl9kYXRhIHsKKyAgICAgICAgc3RydWN0IHVzYl9kZXZpY2UgKnJpb19kZXY7ICAgICAvKiBpbml0OiBwcm9iZV9yaW8gKi8KKyAgICAgICAgdW5zaWduZWQgaW50IGlmbnVtOyAgICAgICAgICAgICAvKiBJbnRlcmZhY2UgbnVtYmVyIG9mIHRoZSBVU0IgZGV2aWNlICovCisgICAgICAgIGludCBpc29wZW47ICAgICAgICAgICAgICAgICAgICAgLyogbnogaWYgb3BlbiAqLworICAgICAgICBpbnQgcHJlc2VudDsgICAgICAgICAgICAgICAgICAgIC8qIERldmljZSBpcyBwcmVzZW50IG9uIHRoZSBidXMgKi8KKyAgICAgICAgY2hhciAqb2J1ZiwgKmlidWY7ICAgICAgICAgICAgICAvKiB0cmFuc2ZlciBidWZmZXJzICovCisgICAgICAgIGNoYXIgYnVsa19pbl9lcCwgYnVsa19vdXRfZXA7ICAgLyogRW5kcG9pbnQgYXNzaWdubWVudHMgKi8KKyAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xOyAgICAgICAvKiBmb3IgdGltZW91dHMgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7ICAgICAgICAgIC8qIGdlbmVyYWwgcmFjZSBhdm9pZGFuY2UgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmlvX3VzYl9kYXRhIHJpb19pbnN0YW5jZTsKKworc3RhdGljIGludCBvcGVuX3JpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgcmlvX3VzYl9kYXRhICpyaW8gPSAmcmlvX2luc3RhbmNlOworCisJZG93bigmKHJpby0+bG9jaykpOworCisJaWYgKHJpby0+aXNvcGVuIHx8ICFyaW8tPnByZXNlbnQpIHsKKwkJdXAoJihyaW8tPmxvY2spKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJcmlvLT5pc29wZW4gPSAxOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcmlvLT53YWl0X3EpOworCisJdXAoJihyaW8tPmxvY2spKTsKKworCWluZm8oIlJpbyBvcGVuZWQuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbG9zZV9yaW8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHJpb191c2JfZGF0YSAqcmlvID0gJnJpb19pbnN0YW5jZTsKKworCXJpby0+aXNvcGVuID0gMDsKKworCWluZm8oIlJpbyBjbG9zZWQuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2lvY3RsX3JpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBSaW9Db21tYW5kIHJpb19jbWQ7CisJc3RydWN0IHJpb191c2JfZGF0YSAqcmlvID0gJnJpb19pbnN0YW5jZTsKKwl2b2lkIF9fdXNlciAqZGF0YTsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJaW50IHJlc3VsdCwgcmVxdWVzdHR5cGU7CisJaW50IHJldHJpZXM7CisJaW50IHJldHZhbD0wOworCisJZG93bigmKHJpby0+bG9jaykpOworICAgICAgICAvKiBTYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIHJpbyBpcyBjb25uZWN0ZWQsIHBvd2VyZWQsIGV0YyAqLworICAgICAgICBpZiAoIHJpbyA9PSBOVUxMIHx8CisgICAgICAgICAgICAgcmlvLT5wcmVzZW50ID09IDAgfHwKKyAgICAgICAgICAgICByaW8tPnJpb19kZXYgPT0gTlVMTCApCisJeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFJJT19SRUNWX0NPTU1BTkQ6CisJCWRhdGEgPSAodm9pZCBfX3VzZXIgKikgYXJnOworCQlpZiAoZGF0YSA9PSBOVUxMKQorCQkJYnJlYWs7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcmlvX2NtZCwgZGF0YSwgc2l6ZW9mKHN0cnVjdCBSaW9Db21tYW5kKSkpIHsKKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKwkJaWYgKHJpb19jbWQubGVuZ3RoIDwgMCB8fCByaW9fY21kLmxlbmd0aCA+IFBBR0VfU0laRSkgeworCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCQlidWZmZXIgPSAodW5zaWduZWQgY2hhciAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWlmIChidWZmZXIgPT0gTlVMTCkgeworCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCQlpZiAoY29weV9mcm9tX3VzZXIoYnVmZmVyLCByaW9fY21kLmJ1ZmZlciwgcmlvX2NtZC5sZW5ndGgpKSB7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBidWZmZXIpOworCQkJZ290byBlcnJfb3V0OworCQl9CisKKwkJcmVxdWVzdHR5cGUgPSByaW9fY21kLnJlcXVlc3R0eXBlIHwgVVNCX0RJUl9JTiB8CisJCSAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFOworCQlkYmcKKwkJICAgICgic2VuZGluZyBjb21tYW5kOnJlcXR5cGU9JTB4IHJlcT0lMHggdmFsdWU9JTB4IGluZGV4PSUweCBsZW49JTB4IiwKKwkJICAgICByZXF1ZXN0dHlwZSwgcmlvX2NtZC5yZXF1ZXN0LCByaW9fY21kLnZhbHVlLAorCQkgICAgIHJpb19jbWQuaW5kZXgsIHJpb19jbWQubGVuZ3RoKTsKKwkJLyogU2VuZCByaW8gY29udHJvbCBtZXNzYWdlICovCisJCXJldHJpZXMgPSAzOworCQl3aGlsZSAocmV0cmllcykgeworCQkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHJpby0+cmlvX2RldiwKKwkJCQkJCSB1c2JfcmN2Y3RybHBpcGUocmlvLT4gcmlvX2RldiwgMCksCisJCQkJCQkgcmlvX2NtZC5yZXF1ZXN0LAorCQkJCQkJIHJlcXVlc3R0eXBlLAorCQkJCQkJIHJpb19jbWQudmFsdWUsCisJCQkJCQkgcmlvX2NtZC5pbmRleCwgYnVmZmVyLAorCQkJCQkJIHJpb19jbWQubGVuZ3RoLAorCQkJCQkJIGppZmZpZXNfdG9fbXNlY3MocmlvX2NtZC50aW1lb3V0KSk7CisJCQlpZiAocmVzdWx0ID09IC1FVElNRURPVVQpCisJCQkJcmV0cmllcy0tOworCQkJZWxzZSBpZiAocmVzdWx0IDwgMCkgeworCQkJCWVycigiRXJyb3IgZXhlY3V0aW5nIGlvY3RybC4gY29kZSA9ICVkIiwgcmVzdWx0KTsKKwkJCQlyZXRyaWVzID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJZGJnKCJFeGVjdXRlZCBpb2N0bC4gUmVzdWx0ID0gJWQgKGRhdGE9JTAyeCkiLAorCQkJCSAgICAgcmVzdWx0LCBidWZmZXJbMF0pOworCQkJCWlmIChjb3B5X3RvX3VzZXIocmlvX2NtZC5idWZmZXIsIGJ1ZmZlciwKKwkJCQkJCSByaW9fY21kLmxlbmd0aCkpIHsKKwkJCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBidWZmZXIpOworCQkJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJCQlnb3RvIGVycl9vdXQ7CisJCQkJfQorCQkJCXJldHJpZXMgPSAwOworCQkJfQorCisJCQkvKiByaW9fY21kLmJ1ZmZlciBjb250YWlucyBhIHJhdyBzdHJlYW0gb2Ygc2luZ2xlIGJ5dGUKKwkJCSAgIGRhdGEgd2hpY2ggaGFzIGJlZW4gcmV0dXJuZWQgZnJvbSByaW8uICBEYXRhIGlzCisJCQkgICBpbnRlcnByZXRlZCBhdCBhcHBsaWNhdGlvbiBsZXZlbC4gIEZvciBkYXRhIHRoYXQKKwkJCSAgIHdpbGwgYmUgY2FzdCB0byBkYXRhIHR5cGVzIGxvbmdlciB0aGFuIDEgYnl0ZSwgZGF0YQorCQkJICAgd2lsbCBiZSBsaXR0bGVfZW5kaWFuIGFuZCB3aWxsIHBvdGVudGlhbGx5IG5lZWQgdG8KKwkJCSAgIGJlIHN3YXBwZWQgYXQgdGhlIGFwcCBsZXZlbCAqLworCisJCX0KKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBidWZmZXIpOworCQlicmVhazsKKworCWNhc2UgUklPX1NFTkRfQ09NTUFORDoKKwkJZGF0YSA9ICh2b2lkIF9fdXNlciAqKSBhcmc7CisJCWlmIChkYXRhID09IE5VTEwpCisJCQlicmVhazsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZyaW9fY21kLCBkYXRhLCBzaXplb2Yoc3RydWN0IFJpb0NvbW1hbmQpKSkgeworCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCQlpZiAocmlvX2NtZC5sZW5ndGggPCAwIHx8IHJpb19jbWQubGVuZ3RoID4gUEFHRV9TSVpFKSB7CisJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJZ290byBlcnJfb3V0OworCQl9CisJCWJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwkJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJZ290byBlcnJfb3V0OworCQl9CisJCWlmIChjb3B5X2Zyb21fdXNlcihidWZmZXIsIHJpb19jbWQuYnVmZmVyLCByaW9fY21kLmxlbmd0aCkpIHsKKwkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWZmZXIpOworCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCisJCXJlcXVlc3R0eXBlID0gcmlvX2NtZC5yZXF1ZXN0dHlwZSB8IFVTQl9ESVJfT1VUIHwKKwkJICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0U7CisJCWRiZygic2VuZGluZyBjb21tYW5kOiByZXF0eXBlPSUweCByZXE9JTB4IHZhbHVlPSUweCBpbmRleD0lMHggbGVuPSUweCIsCisJCSAgICAgcmVxdWVzdHR5cGUsIHJpb19jbWQucmVxdWVzdCwgcmlvX2NtZC52YWx1ZSwKKwkJICAgICByaW9fY21kLmluZGV4LCByaW9fY21kLmxlbmd0aCk7CisJCS8qIFNlbmQgcmlvIGNvbnRyb2wgbWVzc2FnZSAqLworCQlyZXRyaWVzID0gMzsKKwkJd2hpbGUgKHJldHJpZXMpIHsKKwkJCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhyaW8tPnJpb19kZXYsCisJCQkJCQkgdXNiX3NuZGN0cmxwaXBlKHJpby0+IHJpb19kZXYsIDApLAorCQkJCQkJIHJpb19jbWQucmVxdWVzdCwKKwkJCQkJCSByZXF1ZXN0dHlwZSwKKwkJCQkJCSByaW9fY21kLnZhbHVlLAorCQkJCQkJIHJpb19jbWQuaW5kZXgsIGJ1ZmZlciwKKwkJCQkJCSByaW9fY21kLmxlbmd0aCwKKwkJCQkJCSBqaWZmaWVzX3RvX21zZWNzKHJpb19jbWQudGltZW91dCkpOworCQkJaWYgKHJlc3VsdCA9PSAtRVRJTUVET1VUKQorCQkJCXJldHJpZXMtLTsKKwkJCWVsc2UgaWYgKHJlc3VsdCA8IDApIHsKKwkJCQllcnIoIkVycm9yIGV4ZWN1dGluZyBpb2N0cmwuIGNvZGUgPSAlZCIsIHJlc3VsdCk7CisJCQkJcmV0cmllcyA9IDA7CisJCQl9IGVsc2UgeworCQkJCWRiZygiRXhlY3V0ZWQgaW9jdGwuIFJlc3VsdCA9ICVkIiwgcmVzdWx0KTsKKwkJCQlyZXRyaWVzID0gMDsKKworCQkJfQorCisJCX0KKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBidWZmZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHZhbCA9IC1FTk9UVFk7CisJCWJyZWFrOworCX0KKworCitlcnJfb3V0OgorCXVwKCYocmlvLT5sb2NrKSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHNzaXplX3QKK3dyaXRlX3JpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkgIHNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKK3sKKwlERUZJTkVfV0FJVCh3YWl0KTsKKwlzdHJ1Y3QgcmlvX3VzYl9kYXRhICpyaW8gPSAmcmlvX2luc3RhbmNlOworCisJdW5zaWduZWQgbG9uZyBjb3B5X3NpemU7CisJdW5zaWduZWQgbG9uZyBieXRlc193cml0dGVuID0gMDsKKwl1bnNpZ25lZCBpbnQgcGFydGlhbDsKKworCWludCByZXN1bHQgPSAwOworCWludCBtYXhyZXRyeTsKKwlpbnQgZXJybiA9IDA7CisKKwlkb3duKCYocmlvLT5sb2NrKSk7CisgICAgICAgIC8qIFNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgcmlvIGlzIGNvbm5lY3RlZCwgcG93ZXJlZCwgZXRjICovCisgICAgICAgIGlmICggcmlvID09IE5VTEwgfHwKKyAgICAgICAgICAgICByaW8tPnByZXNlbnQgPT0gMCB8fAorICAgICAgICAgICAgIHJpby0+cmlvX2RldiA9PSBOVUxMICkKKwl7CisJCXVwKCYocmlvLT5sb2NrKSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCisKKwlkbyB7CisJCXVuc2lnbmVkIGxvbmcgdGhpc3RpbWU7CisJCWNoYXIgKm9idWYgPSByaW8tPm9idWY7CisKKwkJdGhpc3RpbWUgPSBjb3B5X3NpemUgPQorCQkgICAgKGNvdW50ID49IE9CVUZfU0laRSkgPyBPQlVGX1NJWkUgOiBjb3VudDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKHJpby0+b2J1ZiwgYnVmZmVyLCBjb3B5X3NpemUpKSB7CisJCQllcnJuID0gLUVGQVVMVDsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJbWF4cmV0cnkgPSA1OworCQl3aGlsZSAodGhpc3RpbWUpIHsKKwkJCWlmICghcmlvLT5yaW9fZGV2KSB7CisJCQkJZXJybiA9IC1FTk9ERVY7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCXVwKCYocmlvLT5sb2NrKSk7CisJCQkJcmV0dXJuIGJ5dGVzX3dyaXR0ZW4gPyBieXRlc193cml0dGVuIDogLUVJTlRSOworCQkJfQorCisJCQlyZXN1bHQgPSB1c2JfYnVsa19tc2cocmlvLT5yaW9fZGV2LAorCQkJCQkgdXNiX3NuZGJ1bGtwaXBlKHJpby0+cmlvX2RldiwgMiksCisJCQkJCSBvYnVmLCB0aGlzdGltZSwgJnBhcnRpYWwsIDUwMDApOworCisJCQlkYmcoIndyaXRlIHN0YXRzOiByZXN1bHQ6JWQgdGhpc3RpbWU6JWx1IHBhcnRpYWw6JXUiLAorCQkJICAgICByZXN1bHQsIHRoaXN0aW1lLCBwYXJ0aWFsKTsKKworCQkJaWYgKHJlc3VsdCA9PSAtRVRJTUVET1VUKSB7CS8qIE5BSyAtIHNvIGhvbGQgZm9yIGEgd2hpbGUgKi8KKwkJCQlpZiAoIW1heHJldHJ5LS0pIHsKKwkJCQkJZXJybiA9IC1FVElNRTsKKwkJCQkJZ290byBlcnJvcjsKKwkJCQl9CisJCQkJcHJlcGFyZV90b193YWl0KCZyaW8tPndhaXRfcSwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQkJc2NoZWR1bGVfdGltZW91dChOQUtfVElNRU9VVCk7CisJCQkJZmluaXNoX3dhaXQoJnJpby0+d2FpdF9xLCAmd2FpdCk7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKCFyZXN1bHQgJiYgcGFydGlhbCkgeworCQkJCW9idWYgKz0gcGFydGlhbDsKKwkJCQl0aGlzdGltZSAtPSBwYXJ0aWFsOworCQkJfSBlbHNlCisJCQkJYnJlYWs7CisJCX07CisJCWlmIChyZXN1bHQpIHsKKwkJCWVycigiV3JpdGUgV2hvb3BzIC0gJXgiLCByZXN1bHQpOworCQkJZXJybiA9IC1FSU87CisJCQlnb3RvIGVycm9yOworCQl9CisJCWJ5dGVzX3dyaXR0ZW4gKz0gY29weV9zaXplOworCQljb3VudCAtPSBjb3B5X3NpemU7CisJCWJ1ZmZlciArPSBjb3B5X3NpemU7CisJfSB3aGlsZSAoY291bnQgPiAwKTsKKworCXVwKCYocmlvLT5sb2NrKSk7CisKKwlyZXR1cm4gYnl0ZXNfd3JpdHRlbiA/IGJ5dGVzX3dyaXR0ZW4gOiAtRUlPOworCitlcnJvcjoKKwl1cCgmKHJpby0+bG9jaykpOworCXJldHVybiBlcnJuOworfQorCitzdGF0aWMgc3NpemVfdAorcmVhZF9yaW8oc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKK3sKKwlERUZJTkVfV0FJVCh3YWl0KTsKKwlzdHJ1Y3QgcmlvX3VzYl9kYXRhICpyaW8gPSAmcmlvX2luc3RhbmNlOworCXNzaXplX3QgcmVhZF9jb3VudDsKKwl1bnNpZ25lZCBpbnQgcGFydGlhbDsKKwlpbnQgdGhpc19yZWFkOworCWludCByZXN1bHQ7CisJaW50IG1heHJldHJ5ID0gMTA7CisJY2hhciAqaWJ1ZjsKKworCWRvd24oJihyaW8tPmxvY2spKTsKKwkvKiBTYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIHJpbyBpcyBjb25uZWN0ZWQsIHBvd2VyZWQsIGV0YyAqLworICAgICAgICBpZiAoIHJpbyA9PSBOVUxMIHx8CisgICAgICAgICAgICAgcmlvLT5wcmVzZW50ID09IDAgfHwKKyAgICAgICAgICAgICByaW8tPnJpb19kZXYgPT0gTlVMTCApCisJeworCQl1cCgmKHJpby0+bG9jaykpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpYnVmID0gcmlvLT5pYnVmOworCisJcmVhZF9jb3VudCA9IDA7CisKKworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQl1cCgmKHJpby0+bG9jaykpOworCQkJcmV0dXJuIHJlYWRfY291bnQgPyByZWFkX2NvdW50IDogLUVJTlRSOworCQl9CisJCWlmICghcmlvLT5yaW9fZGV2KSB7CisJCQl1cCgmKHJpby0+bG9jaykpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJdGhpc19yZWFkID0gKGNvdW50ID49IElCVUZfU0laRSkgPyBJQlVGX1NJWkUgOiBjb3VudDsKKworCQlyZXN1bHQgPSB1c2JfYnVsa19tc2cocmlvLT5yaW9fZGV2LAorCQkJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShyaW8tPnJpb19kZXYsIDEpLAorCQkJCSAgICAgIGlidWYsIHRoaXNfcmVhZCwgJnBhcnRpYWwsCisJCQkJICAgICAgODAwMCk7CisKKwkJZGJnKEtFUk5fREVCVUcgInJlYWQgc3RhdHM6IHJlc3VsdDolZCB0aGlzX3JlYWQ6JXUgcGFydGlhbDoldSIsCisJCSAgICAgICByZXN1bHQsIHRoaXNfcmVhZCwgcGFydGlhbCk7CisKKwkJaWYgKHBhcnRpYWwpIHsKKwkJCWNvdW50ID0gdGhpc19yZWFkID0gcGFydGlhbDsKKwkJfSBlbHNlIGlmIChyZXN1bHQgPT0gLUVUSU1FRE9VVCB8fCByZXN1bHQgPT0gMTUpIHsJLyogRklYTUU6IDE1ID8/PyAqLworCQkJaWYgKCFtYXhyZXRyeS0tKSB7CisJCQkJdXAoJihyaW8tPmxvY2spKTsKKwkJCQllcnIoInJlYWRfcmlvOiBtYXhyZXRyeSB0aW1lb3V0Iik7CisJCQkJcmV0dXJuIC1FVElNRTsKKwkJCX0KKwkJCXByZXBhcmVfdG9fd2FpdCgmcmlvLT53YWl0X3EsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJc2NoZWR1bGVfdGltZW91dChOQUtfVElNRU9VVCk7CisJCQlmaW5pc2hfd2FpdCgmcmlvLT53YWl0X3EsICZ3YWl0KTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKHJlc3VsdCAhPSAtRVJFTU9URUlPKSB7CisJCQl1cCgmKHJpby0+bG9jaykpOworCQkJZXJyKCJSZWFkIFdob29wcyAtIHJlc3VsdDoldSBwYXJ0aWFsOiV1IHRoaXNfcmVhZDoldSIsCisJCQkgICAgIHJlc3VsdCwgcGFydGlhbCwgdGhpc19yZWFkKTsKKwkJCXJldHVybiAtRUlPOworCQl9IGVsc2UgeworCQkJdXAoJihyaW8tPmxvY2spKTsKKwkJCXJldHVybiAoMCk7CisJCX0KKworCQlpZiAodGhpc19yZWFkKSB7CisJCQlpZiAoY29weV90b191c2VyKGJ1ZmZlciwgaWJ1ZiwgdGhpc19yZWFkKSkgeworCQkJCXVwKCYocmlvLT5sb2NrKSk7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisJCQljb3VudCAtPSB0aGlzX3JlYWQ7CisJCQlyZWFkX2NvdW50ICs9IHRoaXNfcmVhZDsKKwkJCWJ1ZmZlciArPSB0aGlzX3JlYWQ7CisJCX0KKwl9CisJdXAoJihyaW8tPmxvY2spKTsKKwlyZXR1cm4gcmVhZF9jb3VudDsKK30KKworc3RhdGljIHN0cnVjdAorZmlsZV9vcGVyYXRpb25zIHVzYl9yaW9fZm9wcyA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkucmVhZCA9CQlyZWFkX3JpbywKKwkud3JpdGUgPQl3cml0ZV9yaW8sCisJLmlvY3RsID0JaW9jdGxfcmlvLAorCS5vcGVuID0JCW9wZW5fcmlvLAorCS5yZWxlYXNlID0JY2xvc2VfcmlvLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIHVzYl9yaW9fY2xhc3MgPSB7CisJLm5hbWUgPQkJInVzYi9yaW81MDAlZCIsCisJLmZvcHMgPQkJJnVzYl9yaW9fZm9wcywKKwkubW9kZSA9CQlTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JV0dSUCwKKwkubWlub3JfYmFzZSA9CVJJT19NSU5PUiwKK307CisKK3N0YXRpYyBpbnQgcHJvYmVfcmlvKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgcmlvX3VzYl9kYXRhICpyaW8gPSAmcmlvX2luc3RhbmNlOworCWludCByZXR2YWw7CisKKwlpbmZvKCJVU0IgUmlvIGZvdW5kIGF0IGFkZHJlc3MgJWQiLCBkZXYtPmRldm51bSk7CisKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZ1c2JfcmlvX2NsYXNzKTsKKwlpZiAocmV0dmFsKSB7CisJCWVycigiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyaW8tPnJpb19kZXYgPSBkZXY7CisKKwlpZiAoIShyaW8tPm9idWYgPSAoY2hhciAqKSBrbWFsbG9jKE9CVUZfU0laRSwgR0ZQX0tFUk5FTCkpKSB7CisJCWVycigicHJvYmVfcmlvOiBOb3QgZW5vdWdoIG1lbW9yeSBmb3IgdGhlIG91dHB1dCBidWZmZXIiKTsKKwkJdXNiX2RlcmVnaXN0ZXJfZGV2KGludGYsICZ1c2JfcmlvX2NsYXNzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWRiZygicHJvYmVfcmlvOiBvYnVmIGFkZHJlc3M6JXAiLCByaW8tPm9idWYpOworCisJaWYgKCEocmlvLT5pYnVmID0gKGNoYXIgKikga21hbGxvYyhJQlVGX1NJWkUsIEdGUF9LRVJORUwpKSkgeworCQllcnIoInByb2JlX3JpbzogTm90IGVub3VnaCBtZW1vcnkgZm9yIHRoZSBpbnB1dCBidWZmZXIiKTsKKwkJdXNiX2RlcmVnaXN0ZXJfZGV2KGludGYsICZ1c2JfcmlvX2NsYXNzKTsKKwkJa2ZyZWUocmlvLT5vYnVmKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWRiZygicHJvYmVfcmlvOiBpYnVmIGFkZHJlc3M6JXAiLCByaW8tPmlidWYpOworCisJaW5pdF9NVVRFWCgmKHJpby0+bG9jaykpOworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgcmlvKTsKKwlyaW8tPnByZXNlbnQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRpc2Nvbm5lY3RfcmlvKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCByaW9fdXNiX2RhdGEgKnJpbyA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisJaWYgKHJpbykgeworCQl1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZiwgJnVzYl9yaW9fY2xhc3MpOworCisJCWRvd24oJihyaW8tPmxvY2spKTsKKwkJaWYgKHJpby0+aXNvcGVuKSB7CisJCQlyaW8tPmlzb3BlbiA9IDA7CisJCQkvKiBiZXR0ZXIgbGV0IGl0IGZpbmlzaCAtIHRoZSByZWxlYXNlIHdpbGwgZG8gd2hhdHMgbmVlZGVkICovCisJCQlyaW8tPnJpb19kZXYgPSBOVUxMOworCQkJdXAoJihyaW8tPmxvY2spKTsKKwkJCXJldHVybjsKKwkJfQorCQlrZnJlZShyaW8tPmlidWYpOworCQlrZnJlZShyaW8tPm9idWYpOworCisJCWluZm8oIlVTQiBSaW8gZGlzY29ubmVjdGVkLiIpOworCisJCXJpby0+cHJlc2VudCA9IDA7CisJCXVwKCYocmlvLT5sb2NrKSk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcmlvX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRSgweDA4NDEsIDEpIH0sIAkJLyogUmlvIDUwMCAqLworCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgcmlvX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHJpb19kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJInJpbzUwMCIsCisJLnByb2JlID0JcHJvYmVfcmlvLAorCS5kaXNjb25uZWN0ID0JZGlzY29ubmVjdF9yaW8sCisJLmlkX3RhYmxlID0JcmlvX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdXNiX3Jpb19pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnJpb19kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gb3V0OworCisJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3Jpb19jbGVhbnVwKHZvaWQpCit7CisJc3RydWN0IHJpb191c2JfZGF0YSAqcmlvID0gJnJpb19pbnN0YW5jZTsKKworCXJpby0+cHJlc2VudCA9IDA7CisJdXNiX2RlcmVnaXN0ZXIoJnJpb19kcml2ZXIpOworCisKK30KKworbW9kdWxlX2luaXQodXNiX3Jpb19pbml0KTsKK21vZHVsZV9leGl0KHVzYl9yaW9fY2xlYW51cCk7CisKK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9yaW81MDBfdXNiLmggYi9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMF91c2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTlhYmM5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy9yaW81MDBfdXNiLmgKQEAgLTAsMCArMSwzNyBAQAorLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIENvcHlyaWdodCAoQykgMjAwMCAgQ2VzYXIgTWlxdWVsICAobWlxdWVsQGRmLnViYS5hcikKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisKKworI2RlZmluZSBSSU9fU0VORF9DT01NQU5ECQkJMHgxCisjZGVmaW5lIFJJT19SRUNWX0NPTU1BTkQJCQkweDIKKworI2RlZmluZSBSSU9fRElSX09VVCAgICAgICAgICAgICAgIAkgICAgICAgIDB4MAorI2RlZmluZSBSSU9fRElSX0lOCQkJCTB4MQorCitzdHJ1Y3QgUmlvQ29tbWFuZCB7CisJc2hvcnQgbGVuZ3RoOworCWludCByZXF1ZXN0OworCWludCByZXF1ZXN0dHlwZTsKKwlpbnQgdmFsdWU7CisJaW50IGluZGV4OworCXZvaWQgX191c2VyICpidWZmZXI7CisJaW50IHRpbWVvdXQ7Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2EvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk1N2UxNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL0tjb25maWcKQEAgLTAsMCArMSwxNCBAQAorCitjb25maWcgVVNCX1NJU1VTQlZHQQorCXRyaXN0YXRlICJVU0IgMi4wIFNWR0EgZG9uZ2xlIHN1cHBvcnQgKE5ldDIyODAvU2lTMzE1KSIKKwlkZXBlbmRzIG9uIFVTQiAmJiBVU0JfRUhDSV9IQ0QKKyAgICAgICAgLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIGF0dGFjaCBhIFVTQjJWR0EgZG9uZ2xlIGJhc2VkIG9uIGEKKwkgIE5ldDIyODAgYW5kIGEgU2lTMzE1IGNoaXAuIAorCSAgCisJICBOb3RlIHRoYXQgdGhpcyBkZXZpY2UgcmVxdWlyZXMgYSBVU0IgMi4wIGhvc3QgY29udHJvbGxlci4gSXQgd2lsbCBub3QgCisJICB3b3JrIHdpdGggVVNCIDEueCBjb250cm9sbGVycy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgc2lzdXNiLiAgSWYgdW5zdXJlLCBzYXkgTi4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2EvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmYxNjQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2EvTWFrZWZpbGUKQEAgLTAsMCArMSw2IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgc2lzdXNiIGRyaXZlciAoaWYgZHJpdmVyIGlzIGluc2lkZSBrZXJuZWwgdHJlZSkuCisjCisKK29iai0kKENPTkZJR19VU0JfU0lTVVNCVkdBKSArPSBzaXN1c2IubworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuYyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMTYzYjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuYwpAQCAtMCwwICsxLDMxNDUgQEAKKy8qCisgKiBzaXN1c2IgLSB1c2Iga2VybmVsIGRyaXZlciBmb3IgU2lTMzE1KEUpIGJhc2VkIFVTQjJWR0EgZG9uZ2xlcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBieSBUaG9tYXMgV2luaXNjaGhvZmVyLCBWaWVubmEsIEF1c3RyaWEKKyAqCisgKiBJZiBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwsIHRoaXMgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBHUEwgdjIuCisgKgorICogT3RoZXJ3aXNlLCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgdGVybXMgYXBwbHk6CisgKgorICogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiAqIGFyZSBtZXQ6CisgKiAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogKiAzKSBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwc2lzdXNiciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAqCisgKiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IKKyAqICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIEF1dGhvcjogCVRob21hcyBXaW5pc2NoaG9mZXIgPHRob21hc0B3aW5pc2NoaG9mZXIubmV0PgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorCisjaW5jbHVkZSAic2lzdXNiLmgiCisKKyNkZWZpbmUgU0lTVVNCX0RPTlRTWU5DCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zIC8gY2xlYW4tdXAgcm91dGluZXMgKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNpc3VzYl9kcml2ZXI7CisKK3N0YXRpYyBERUNMQVJFX01VVEVYKGRpc2Nvbm5lY3Rfc2VtKTsKKworc3RhdGljIHZvaWQKK3Npc3VzYl9mcmVlX2J1ZmZlcnMoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5VTU9CVUZTOyBpKyspIHsKKwkJaWYgKHNpc3VzYi0+b2J1ZltpXSkgeworCQkJdXNiX2J1ZmZlcl9mcmVlKHNpc3VzYi0+c2lzdXNiX2Rldiwgc2lzdXNiLT5vYnVmc2l6ZSwKKwkJCQlzaXN1c2ItPm9idWZbaV0sIHNpc3VzYi0+dHJhbnNmZXJfZG1hX291dFtpXSk7CisJCQlzaXN1c2ItPm9idWZbaV0gPSBOVUxMOworCQl9CisJfQorCWlmIChzaXN1c2ItPmlidWYpIHsKKwkJdXNiX2J1ZmZlcl9mcmVlKHNpc3VzYi0+c2lzdXNiX2Rldiwgc2lzdXNiLT5pYnVmc2l6ZSwKKwkJCXNpc3VzYi0+aWJ1Ziwgc2lzdXNiLT50cmFuc2Zlcl9kbWFfaW4pOworCQlzaXN1c2ItPmlidWYgPSBOVUxMOworCX0KK30KKworc3RhdGljIHZvaWQKK3Npc3VzYl9mcmVlX3VyYnMoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5VTU9CVUZTOyBpKyspIHsKKwkJdXNiX2ZyZWVfdXJiKHNpc3VzYi0+c2lzdXJib3V0W2ldKTsKKwkJc2lzdXNiLT5zaXN1cmJvdXRbaV0gPSBOVUxMOworCX0KKwl1c2JfZnJlZV91cmIoc2lzdXNiLT5zaXN1cmJpbik7CisJc2lzdXNiLT5zaXN1cmJpbiA9IE5VTEw7Cit9CisKKy8qIExldmVsIDA6IFVTQiB0cmFuc3BvcnQgbGF5ZXIgKi8KKworLyogMS4gb3V0LWJ1bGtzICovCisKKy8qIG91dC11cmIgbWFuYWdlbWVudCAqLworCisvKiBSZXR1cm4gMSBpZiBhbGwgZnJlZSwgMCBvdGhlcndpc2UgKi8KK3N0YXRpYyBpbnQKK3Npc3VzYl9hbGxfZnJlZShzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2lzdXNiLT5udW1vYnVmczsgaSsrKSB7CisKKwkJaWYgKHNpc3VzYi0+dXJic3RhdHVzW2ldICYgU1VfVVJCX0JVU1kpCisJCQlyZXR1cm4gMDsKKworCX0KKworCXJldHVybiAxOworfQorCisvKiBLaWxsIGFsbCBidXN5IFVSQnMgKi8KK3N0YXRpYyB2b2lkCitzaXN1c2Jfa2lsbF9hbGxfYnVzeShzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IpCit7CisJaW50IGk7CisKKwlpZiAoc2lzdXNiX2FsbF9mcmVlKHNpc3VzYikpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBzaXN1c2ItPm51bW9idWZzOyBpKyspIHsKKworCQlpZiAoc2lzdXNiLT51cmJzdGF0dXNbaV0gJiBTVV9VUkJfQlVTWSkKKwkJCXVzYl9raWxsX3VyYihzaXN1c2ItPnNpc3VyYm91dFtpXSk7CisKKwl9Cit9CisKKy8qIFJldHVybiAxIGlmIG9rLCAwIGlmIGVycm9yIChub3QgYWxsIGNvbXBsZXRlIHdpdGhpbiB0aW1lb3V0KSAqLworc3RhdGljIGludAorc2lzdXNiX3dhaXRfYWxsX291dF9jb21wbGV0ZShzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IpCit7CisJaW50IHRpbWVvdXQgPSA1ICogSFosIGkgPSAxOworCisJd2FpdF9ldmVudF90aW1lb3V0KHNpc3VzYi0+d2FpdF9xLAorCQkJCShpID0gc2lzdXNiX2FsbF9mcmVlKHNpc3VzYikpLAorCQkJCSB0aW1lb3V0KTsKKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50CitzaXN1c2Jfb3V0dXJiX2F2YWlsYWJsZShzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2lzdXNiLT5udW1vYnVmczsgaSsrKSB7CisKKwkJaWYgKChzaXN1c2ItPnVyYnN0YXR1c1tpXSAmIChTVV9VUkJfQlVTWXxTVV9VUkJfQUxMT0MpKSA9PSAwKQorCQkJcmV0dXJuIGk7CisKKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl9nZXRfZnJlZV9vdXRidWYoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiKQoreworCWludCBpLCB0aW1lb3V0ID0gNSAqIEhaOworCisJd2FpdF9ldmVudF90aW1lb3V0KHNpc3VzYi0+d2FpdF9xLAorCQkJCSgoaSA9IHNpc3VzYl9vdXR1cmJfYXZhaWxhYmxlKHNpc3VzYikpID49IDApLAorCQkJCXRpbWVvdXQpOworCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl9hbGxvY19vdXRidWYoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiKQoreworCWludCBpOworCisJaSA9IHNpc3VzYl9vdXR1cmJfYXZhaWxhYmxlKHNpc3VzYik7CisKKwlpZiAoaSA+PSAwKQorCQlzaXN1c2ItPnVyYnN0YXR1c1tpXSB8PSBTVV9VUkJfQUxMT0M7CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIHZvaWQKK3Npc3VzYl9mcmVlX291dGJ1ZihzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCBpbmRleCkKK3sKKwlpZiAoKGluZGV4ID49IDApICYmIChpbmRleCA8IHNpc3VzYi0+bnVtb2J1ZnMpKQorCQlzaXN1c2ItPnVyYnN0YXR1c1tpbmRleF0gJj0gflNVX1VSQl9BTExPQzsKK30KKworLyogY29tcGxldGlvbiBjYWxsYmFjayAqLworCitzdGF0aWMgdm9pZAorc2lzdXNiX2J1bGtfY29tcGxldGVvdXQoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgc2lzdXNiX3VyYl9jb250ZXh0ICpjb250ZXh0ID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYjsKKworCWlmICghY29udGV4dCkKKwkJcmV0dXJuOworCisJc2lzdXNiID0gY29udGV4dC0+c2lzdXNiOworCisJaWYgKCFzaXN1c2IgfHwgIXNpc3VzYi0+c2lzdXNiX2RldiB8fCAhc2lzdXNiLT5wcmVzZW50KQorCQlyZXR1cm47CisKKyNpZm5kZWYgU0lTVVNCX0RPTlRTWU5DCisJaWYgKGNvbnRleHQtPmFjdHVhbF9sZW5ndGgpCisJCSooY29udGV4dC0+YWN0dWFsX2xlbmd0aCkgKz0gdXJiLT5hY3R1YWxfbGVuZ3RoOworI2VuZGlmCisKKwlzaXN1c2ItPnVyYnN0YXR1c1tjb250ZXh0LT51cmJpbmRleF0gJj0gflNVX1VSQl9CVVNZOworCXdha2VfdXAoJnNpc3VzYi0+d2FpdF9xKTsKK30KKworc3RhdGljIGludAorc2lzdXNiX2J1bGtvdXRfbXNnKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcGlwZSwgdm9pZCAqZGF0YSwKKwkJaW50IGxlbiwgaW50ICphY3R1YWxfbGVuZ3RoLCBpbnQgdGltZW91dCwgdW5zaWduZWQgaW50IHRmbGFncywKKwkJZG1hX2FkZHJfdCB0cmFuc2Zlcl9kbWEpCit7CisJc3RydWN0IHVyYiAqdXJiID0gc2lzdXNiLT5zaXN1cmJvdXRbaW5kZXhdOworCWludCByZXR2YWwsIGJ5dGVzd3JpdHRlbiA9IDA7CisKKwkvKiBTZXQgdXAgVVJCICovCisJdXJiLT50cmFuc2Zlcl9mbGFncyA9IDA7CisKKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHNpc3VzYi0+c2lzdXNiX2RldiwgcGlwZSwgZGF0YSwgbGVuLAorCQlzaXN1c2JfYnVsa19jb21wbGV0ZW91dCwgJnNpc3VzYi0+dXJib3V0X2NvbnRleHRbaW5kZXhdKTsKKworCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gKHRmbGFncyB8IFVSQl9BU1lOQ19VTkxJTkspOworCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisKKwlpZiAoKHVyYi0+dHJhbnNmZXJfZG1hID0gdHJhbnNmZXJfZG1hKSkKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCS8qIFNldCB1cCBjb250ZXh0ICovCisJc2lzdXNiLT51cmJvdXRfY29udGV4dFtpbmRleF0uYWN0dWFsX2xlbmd0aCA9ICh0aW1lb3V0KSA/CisJCQkJCQlOVUxMIDogYWN0dWFsX2xlbmd0aDsKKworCS8qIERlY2xhcmUgdGhpcyB1cmIvYnVmZmVyIGluIHVzZSAqLworCXNpc3VzYi0+dXJic3RhdHVzW2luZGV4XSB8PSBTVV9VUkJfQlVTWTsKKworCS8qIFN1Ym1pdCBVUkIgKi8KKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCisJLyogSWYgT0ssIGFuZCBpZiB0aW1lb3V0ID4gMCwgd2FpdCBmb3IgY29tcGxldGlvbiAqLworCWlmICgocmV0dmFsID09IDApICYmIHRpbWVvdXQpIHsKKwkJd2FpdF9ldmVudF90aW1lb3V0KHNpc3VzYi0+d2FpdF9xLAorCQkJCSAgICghKHNpc3VzYi0+dXJic3RhdHVzW2luZGV4XSAmIFNVX1VSQl9CVVNZKSksCisJCQkJICAgdGltZW91dCk7CisJCWlmIChzaXN1c2ItPnVyYnN0YXR1c1tpbmRleF0gJiBTVV9VUkJfQlVTWSkgeworCQkJLyogVVJCIHRpbWVkIG91dC4uLiBraWxsIGl0IGFuZCByZXBvcnQgZXJyb3IgKi8KKwkJCXVzYl9raWxsX3VyYih1cmIpOworCQkJcmV0dmFsID0gLUVUSU1FRE9VVDsKKwkJfSBlbHNlIHsKKwkJCS8qIE90aGVyd2lzZSwgcmVwb3J0IHVyYiBzdGF0dXMgKi8KKwkJCXJldHZhbCA9IHVyYi0+c3RhdHVzOworCQkJYnl0ZXN3cml0dGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCQl9CisJfQorCisJaWYgKGFjdHVhbF9sZW5ndGgpCisJCSphY3R1YWxfbGVuZ3RoID0gYnl0ZXN3cml0dGVuOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyogMi4gaW4tYnVsa3MgKi8KKworLyogY29tcGxldGlvbiBjYWxsYmFjayAqLworCitzdGF0aWMgdm9pZAorc2lzdXNiX2J1bGtfY29tcGxldGVpbihzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiA9IHVyYi0+Y29udGV4dDsKKworCWlmICghc2lzdXNiIHx8ICFzaXN1c2ItPnNpc3VzYl9kZXYgfHwgIXNpc3VzYi0+cHJlc2VudCkKKwkJcmV0dXJuOworCisJc2lzdXNiLT5jb21wbGV0ZWluID0gMTsKKwl3YWtlX3VwKCZzaXN1c2ItPndhaXRfcSk7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl9idWxraW5fbXNnKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgdW5zaWduZWQgaW50IHBpcGUsIHZvaWQgKmRhdGEsIGludCBsZW4sCisJCWludCAqYWN0dWFsX2xlbmd0aCwgaW50IHRpbWVvdXQsIHVuc2lnbmVkIGludCB0ZmxhZ3MsIGRtYV9hZGRyX3QgdHJhbnNmZXJfZG1hKQoreworCXN0cnVjdCB1cmIgKnVyYiA9IHNpc3VzYi0+c2lzdXJiaW47CisJaW50IHJldHZhbCwgcmVhZGJ5dGVzID0gMDsKKworCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSAwOworCisJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBzaXN1c2ItPnNpc3VzYl9kZXYsIHBpcGUsIGRhdGEsIGxlbiwKKwkJCXNpc3VzYl9idWxrX2NvbXBsZXRlaW4sIHNpc3VzYik7CisKKwl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9ICh0ZmxhZ3MgfCBVUkJfQVNZTkNfVU5MSU5LKTsKKwl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCisJaWYgKCh1cmItPnRyYW5zZmVyX2RtYSA9IHRyYW5zZmVyX2RtYSkpCisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwlzaXN1c2ItPmNvbXBsZXRlaW4gPSAwOworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCA9PSAwKSB7CisJCXdhaXRfZXZlbnRfdGltZW91dChzaXN1c2ItPndhaXRfcSwgc2lzdXNiLT5jb21wbGV0ZWluLCB0aW1lb3V0KTsKKwkJaWYgKCFzaXN1c2ItPmNvbXBsZXRlaW4pIHsKKwkJCS8qIFVSQiB0aW1lZCBvdXQuLi4ga2lsbCBpdCBhbmQgcmVwb3J0IGVycm9yICovCisJCQl1c2Jfa2lsbF91cmIodXJiKTsKKwkJCXJldHZhbCA9IC1FVElNRURPVVQ7CisJCX0gZWxzZSB7CisJCQkvKiBVUkIgY29tcGxldGVkIHdpdGhpbiB0aW1vdXQgKi8KKwkJCXJldHZhbCA9IHVyYi0+c3RhdHVzOworCQkJcmVhZGJ5dGVzID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCQl9CisJfQorCisJaWYgKGFjdHVhbF9sZW5ndGgpCisJCSphY3R1YWxfbGVuZ3RoID0gcmVhZGJ5dGVzOworCisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKiBMZXZlbCAxOiAgKi8KKworLyogU2VuZCBhIGJ1bGsgbWVzc2FnZSBvZiB2YXJpYWJsZSBzaXplCisgKgorICogVG8gY29weSB0aGUgZGF0YSBmcm9tIHVzZXJzcGFjZSwgZ2l2ZSBwb2ludGVyIHRvICJ1c2VyYnVmZmVyIiwKKyAqIHRvIGNvcHkgZnJvbSAobm9uLURNQSkga2VybmVsIG1lbW9yeSwgZ2l2ZSAia2VybmJ1ZmZlciIuIElmCisgKiBib3RoIG9mIHRoZXNlIGFyZSBOVUxMLCBpdCBpcyBhc3N1bWVkLCB0aGF0IHRoZSB0cmFuc2ZlcgorICogYnVmZmVyICJzaXN1c2ItPm9idWZbaW5kZXhdIiBpcyBzZXQgdXAgd2l0aCB0aGUgZGF0YSB0byBzZW5kLgorICogSW5kZXggaXMgaWdub3JlZCBpZiBlaXRoZXIga2VybmJ1ZmZlciBvciB1c2VyYnVmZmVyIGlzIHNldC4KKyAqIElmIGFzeW5jIGlzIG5vbnplcm8sIFVSQnMgd2lsbCBiZSBzZW50IHdpdGhvdXQgd2FpdGluZyBmb3IKKyAqIGNvbXBsZXRpb24gb2YgdGhlIHByZXZpb3VzIFVSQi4KKyAqCisgKiAocmV0dXJuIDAgb24gc3VjY2VzcykKKyAqLworCitzdGF0aWMgaW50IHNpc3VzYl9zZW5kX2J1bGtfbXNnKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IGVwLCBpbnQgbGVuLAorCQljaGFyICprZXJuYnVmZmVyLCBjb25zdCBjaGFyIF9fdXNlciAqdXNlcmJ1ZmZlciwgaW50IGluZGV4LAorCQlzc2l6ZV90ICpieXRlc193cml0dGVuLCB1bnNpZ25lZCBpbnQgdGZsYWdzLCBpbnQgYXN5bmMpCit7CisJaW50IHJlc3VsdCA9IDAsIHJldHJ5LCBjb3VudCA9IGxlbjsKKwlpbnQgcGFzc3NpemUsIHRoaXNwYXNzLCB0cmFuc2ZlcnJlZF9sZW4gPSAwOworCWludCBmcm9tdXNlciA9ICh1c2VyYnVmZmVyICE9IE5VTEwpID8gMSA6IDA7CisJaW50IGZyb21rZXJuID0gKGtlcm5idWZmZXIgIT0gTlVMTCkgPyAxIDogMDsKKwl1bnNpZ25lZCBpbnQgcGlwZTsKKwljaGFyICpidWZmZXI7CisKKwkoKmJ5dGVzX3dyaXR0ZW4pID0gMDsKKworCS8qIFNhbml0eSBjaGVjayAqLworCWlmICghc2lzdXNiIHx8ICFzaXN1c2ItPnByZXNlbnQgfHwgIXNpc3VzYi0+c2lzdXNiX2RldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBJZiB3ZSBjb3B5IGRhdGEgZnJvbSBrZXJuZWwgb3IgdXNlcnNwYWNlLCBmb3JjZSB0aGUKKwkgKiBhbGxvY2F0aW9uIG9mIGEgYnVmZmVyL3VyYi4gSWYgd2UgaGF2ZSB0aGUgZGF0YSBpbgorCSAqIHRoZSB0cmFuc2ZlciBidWZmZXJbaW5kZXhdIGFscmVhZHksIHJldXNlIHRoZSBidWZmZXIvVVJCCisJICogaWYgdGhlIGxlbmd0aCBpcyA+IGJ1ZmZlciBzaXplLiAoU28sIHRyYW5zbWl0dGluZworCSAqIGxhcmdlIGRhdGEgYW1vdW50cyBkaXJlY3RseSBmcm9tIHRoZSB0cmFuc2ZlciBidWZmZXIKKwkgKiB0cmVhdHMgdGhlIGJ1ZmZlciBhcyBhIHJpbmcgYnVmZmVyLiBIb3dldmVyLCB3ZSBuZWVkCisJICogdG8gc3luYyBpbiB0aGlzIGNhc2UuKQorCSAqLworCWlmIChmcm9tdXNlciB8fCBmcm9ta2VybikKKwkJaW5kZXggPSAtMTsKKwllbHNlIGlmIChsZW4gPiBzaXN1c2ItPm9idWZzaXplKQorCQlhc3luYyA9IDA7CisKKwlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKHNpc3VzYi0+c2lzdXNiX2RldiwgZXApOworCisJZG8geworCQlwYXNzc2l6ZSA9IHRoaXNwYXNzID0gKHNpc3VzYi0+b2J1ZnNpemUgPCBjb3VudCkgPworCQkJCQkJc2lzdXNiLT5vYnVmc2l6ZSA6IGNvdW50OworCisJCWlmIChpbmRleCA8IDApCisJCQlpbmRleCA9IHNpc3VzYl9nZXRfZnJlZV9vdXRidWYoc2lzdXNiKTsKKworCQlpZiAoaW5kZXggPCAwKQorCQkJcmV0dXJuIC1FSU87CisKKwkJYnVmZmVyID0gc2lzdXNiLT5vYnVmW2luZGV4XTsKKworCQlpZiAoZnJvbXVzZXIpIHsKKworCQkJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZmZlciwgdXNlcmJ1ZmZlciwgcGFzc3NpemUpKQorCQkJCXJldHVybiAtRUZBVUxUOworCisJCQl1c2VyYnVmZmVyICs9IHBhc3NzaXplOworCisJCX0gZWxzZSBpZiAoZnJvbWtlcm4pIHsKKworCQkJbWVtY3B5KGJ1ZmZlciwga2VybmJ1ZmZlciwgcGFzc3NpemUpOworCQkJa2VybmJ1ZmZlciArPSBwYXNzc2l6ZTsKKworCQl9CisKKwkJcmV0cnkgPSA1OworCQl3aGlsZSAodGhpc3Bhc3MpIHsKKworCQkJaWYgKCFzaXN1c2ItPnNpc3VzYl9kZXYpCisJCQkJcmV0dXJuIC1FTk9ERVY7CisKKwkJCXJlc3VsdCA9IHNpc3VzYl9idWxrb3V0X21zZyhzaXN1c2IsCisJCQkJCQlpbmRleCwKKwkJCQkJCXBpcGUsCisJCQkJCQlidWZmZXIsCisJCQkJCQl0aGlzcGFzcywKKwkJCQkJCSZ0cmFuc2ZlcnJlZF9sZW4sCisJCQkJCQlhc3luYyA/IDAgOiA1ICogSFosCisJCQkJCQl0ZmxhZ3MsCisJCQkJCQlzaXN1c2ItPnRyYW5zZmVyX2RtYV9vdXRbaW5kZXhdKTsKKworCQkJaWYgKHJlc3VsdCA9PSAtRVRJTUVET1VUKSB7CisKKwkJCQkvKiBXaWxsIG5vdCBoYXBwZW4gaWYgYXN5bmMgKi8KKwkJCQlpZiAoIXJldHJ5LS0pCisJCQkJCXJldHVybiAtRVRJTUU7CisKKwkJCQljb250aW51ZTsKKworCQkJfSBlbHNlIGlmICgocmVzdWx0ID09IDApICYmICFhc3luYyAmJiB0cmFuc2ZlcnJlZF9sZW4pIHsKKworCQkJCXRoaXNwYXNzIC09IHRyYW5zZmVycmVkX2xlbjsKKwkJCQlpZiAodGhpc3Bhc3MpIHsKKwkJCQkJaWYgKHNpc3VzYi0+dHJhbnNmZXJfZG1hX291dCkgeworCQkJCQkJLyogSWYgRE1BLCBjb3B5IHJlbWFpbmluZworCQkJCQkJICogdG8gYmVnaW5uaW5nIG9mIGJ1ZmZlcgorCQkJCQkJICovCisJCQkJCQltZW1jcHkoYnVmZmVyLAorCQkJCQkJICAgICAgIGJ1ZmZlciArIHRyYW5zZmVycmVkX2xlbiwKKwkJCQkJCSAgICAgICB0aGlzcGFzcyk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvKiBJZiBub3QgRE1BLCBzaW1wbHkgaW5jcmVhc2UKKwkJCQkJCSAqIHRoZSBwb2ludGVyCisJCQkJCQkgKi8KKwkJCQkJCWJ1ZmZlciArPSB0cmFuc2ZlcnJlZF9sZW47CisJCQkJCX0KKwkJCQl9CisKKwkJCX0gZWxzZQorCQkJCWJyZWFrOworCQl9OworCisJCWlmIChyZXN1bHQpCisJCQlyZXR1cm4gcmVzdWx0OworCisJCSgqYnl0ZXNfd3JpdHRlbikgKz0gcGFzc3NpemU7CisJCWNvdW50ICAgICAgICAgICAgLT0gcGFzc3NpemU7CisKKwkJLyogRm9yY2UgbmV3IGFsbG9jYXRpb24gaW4gbmV4dCBpdGVyYXRpb24gKi8KKwkJaWYgKGZyb211c2VyIHx8IGZyb21rZXJuKQorCQkJaW5kZXggPSAtMTsKKworCX0gd2hpbGUgKGNvdW50ID4gMCk7CisKKwlpZiAoYXN5bmMpIHsKKyNpZmRlZiBTSVNVU0JfRE9OVFNZTkMKKwkJKCpieXRlc193cml0dGVuKSA9IGxlbjsKKwkJLyogU29tZSBVUkJzL2J1ZmZlcnMgbWlnaHQgYmUgYnVzeSAqLworI2Vsc2UKKwkJc2lzdXNiX3dhaXRfYWxsX291dF9jb21wbGV0ZShzaXN1c2IpOworCQkoKmJ5dGVzX3dyaXR0ZW4pID0gdHJhbnNmZXJyZWRfbGVuOworCQkvKiBBbGwgVVJCcyBhbmQgYWxsIGJ1ZmZlcnMgYXJlIGF2YWlsYWJsZSAqLworI2VuZGlmCisJfQorCisJcmV0dXJuICgoKmJ5dGVzX3dyaXR0ZW4pID09IGxlbikgPyAwIDogLUVJTzsKK30KKworLyogUmVjZWl2ZSBhIGJ1bGsgbWVzc2FnZSBvZiB2YXJpYWJsZSBzaXplCisgKgorICogVG8gY29weSB0aGUgZGF0YSB0byB1c2Vyc3BhY2UsIGdpdmUgcG9pbnRlciB0byAidXNlcmJ1ZmZlciIsCisgKiB0byBjb3B5IHRvIGtlcm5lbCBtZW1vcnksIGdpdmUgImtlcm5idWZmZXIiLiBPbmUgb2YgdGhlbQorICogTVVTVCBiZSBzZXQuIChUaGVyZSBpcyBubyB0ZWNobmlxdWUgZm9yIGxldHRpbmcgdGhlIGNhbGxlcgorICogcmVhZCBkaXJlY3RseSBmcm9tIHRoZSBpYnVmLikKKyAqCisgKi8KKworc3RhdGljIGludCBzaXN1c2JfcmVjdl9idWxrX21zZyhzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCBlcCwgaW50IGxlbiwKKwkJdm9pZCAqa2VybmJ1ZmZlciwgY2hhciBfX3VzZXIgKnVzZXJidWZmZXIsIHNzaXplX3QgKmJ5dGVzX3JlYWQsCisJCXVuc2lnbmVkIGludCB0ZmxhZ3MpCit7CisJaW50IHJlc3VsdCA9IDAsIHJldHJ5LCBjb3VudCA9IGxlbjsKKwlpbnQgYnVmc2l6ZSwgdGhpc3Bhc3MsIHRyYW5zZmVycmVkX2xlbjsKKwl1bnNpZ25lZCBpbnQgcGlwZTsKKwljaGFyICpidWZmZXI7CisKKwkoKmJ5dGVzX3JlYWQpID0gMDsKKworCS8qIFNhbml0eSBjaGVjayAqLworCWlmICghc2lzdXNiIHx8ICFzaXN1c2ItPnByZXNlbnQgfHwgIXNpc3VzYi0+c2lzdXNiX2RldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwaXBlID0gdXNiX3JjdmJ1bGtwaXBlKHNpc3VzYi0+c2lzdXNiX2RldiwgZXApOworCWJ1ZmZlciA9IHNpc3VzYi0+aWJ1ZjsKKwlidWZzaXplID0gc2lzdXNiLT5pYnVmc2l6ZTsKKworCXJldHJ5ID0gNTsKKworI2lmZGVmIFNJU1VTQl9ET05UU1lOQworCWlmICghKHNpc3VzYl93YWl0X2FsbF9vdXRfY29tcGxldGUoc2lzdXNiKSkpCisJCXJldHVybiAtRUlPOworI2VuZGlmCisKKwl3aGlsZSAoY291bnQgPiAwKSB7CisKKwkJaWYgKCFzaXN1c2ItPnNpc3VzYl9kZXYpCisJCQlyZXR1cm4gLUVOT0RFVjsKKworCQl0aGlzcGFzcyA9IChidWZzaXplIDwgY291bnQpID8gYnVmc2l6ZSA6IGNvdW50OworCisJCXJlc3VsdCA9IHNpc3VzYl9idWxraW5fbXNnKHNpc3VzYiwKKwkJCQkJICAgcGlwZSwKKwkJCQkJICAgYnVmZmVyLAorCQkJCQkgICB0aGlzcGFzcywKKwkJCQkJICAgJnRyYW5zZmVycmVkX2xlbiwKKwkJCQkJICAgNSAqIEhaLAorCQkJCQkgICB0ZmxhZ3MsCisJCQkJCSAgIHNpc3VzYi0+dHJhbnNmZXJfZG1hX2luKTsKKworCQlpZiAodHJhbnNmZXJyZWRfbGVuKQorCQkJdGhpc3Bhc3MgPSB0cmFuc2ZlcnJlZF9sZW47CisKKwkJZWxzZSBpZiAocmVzdWx0ID09IC1FVElNRURPVVQpIHsKKworCQkJaWYgKCFyZXRyeS0tKQorCQkJCXJldHVybiAtRVRJTUU7CisKKwkJCWNvbnRpbnVlOworCisJCX0gZWxzZQorCQkJcmV0dXJuIC1FSU87CisKKworCQlpZiAodGhpc3Bhc3MpIHsKKworCQkJKCpieXRlc19yZWFkKSArPSB0aGlzcGFzczsKKwkJCWNvdW50ICAgICAgICAgLT0gdGhpc3Bhc3M7CisKKwkJCWlmICh1c2VyYnVmZmVyKSB7CisKKwkJCQlpZiAoY29weV90b191c2VyKHVzZXJidWZmZXIsIGJ1ZmZlciwgdGhpc3Bhc3MpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJCXVzZXJidWZmZXIgKz0gdGhpc3Bhc3M7CisKKwkJCX0gZWxzZSB7CisKKwkJCQltZW1jcHkoa2VybmJ1ZmZlciwgYnVmZmVyLCB0aGlzcGFzcyk7CisJCQkJa2VybmJ1ZmZlciArPSB0aGlzcGFzczsKKworCQkJfQorCisJCX0KKworCX0KKworCXJldHVybiAoKCpieXRlc19yZWFkKSA9PSBsZW4pID8gMCA6IC1FSU87Cit9CisKK3N0YXRpYyBpbnQgc2lzdXNiX3NlbmRfcGFja2V0KHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IGxlbiwKKwkJCQkJCXN0cnVjdCBzaXN1c2JfcGFja2V0ICpwYWNrZXQpCit7CisJaW50IHJldDsKKwlzc2l6ZV90IGJ5dGVzX3RyYW5zZmVycmVkID0gMDsKKwlfX2xlMzIgdG1wOworCisJaWYgKGxlbiA9PSA2KQorCQlwYWNrZXQtPmRhdGEgPSAwOworCisjaWZkZWYgU0lTVVNCX0RPTlRTWU5DCisJaWYgKCEoc2lzdXNiX3dhaXRfYWxsX291dF9jb21wbGV0ZShzaXN1c2IpKSkKKwkJcmV0dXJuIDE7CisjZW5kaWYKKworCS8qIEV2ZW50dWFsbHkgY29ycmVjdCBlbmRpYW5uZXNzICovCisJU0lTVVNCX0NPUlJFQ1RfRU5ESUFOTkVTU19QQUNLRVQocGFja2V0KTsKKworCS8qIDEuIHNlbmQgdGhlIHBhY2tldCAqLworCXJldCA9IHNpc3VzYl9zZW5kX2J1bGtfbXNnKHNpc3VzYiwgU0lTVVNCX0VQX0dGWF9PVVQsIGxlbiwKKwkJCShjaGFyICopcGFja2V0LCBOVUxMLCAwLCAmYnl0ZXNfdHJhbnNmZXJyZWQsIDAsIDApOworCisJaWYgKChyZXQgPT0gMCkgJiYgKGxlbiA9PSA2KSkgeworCisJCS8qIDIuIGlmIHBhY2tldCBsZW4gPT0gNiwgaXQgbWVhbnMgd2UgcmVhZCwgc28gd2FpdCBmb3IgMzJiaXQKKwkJICogICAgcmV0dXJuIHZhbHVlIGFuZCB3cml0ZSBpdCB0byBwYWNrZXQtPmRhdGEKKwkJICovCisJCXJldCA9IHNpc3VzYl9yZWN2X2J1bGtfbXNnKHNpc3VzYiwgU0lTVVNCX0VQX0dGWF9JTiwgNCwKKwkJCQkoY2hhciAqKSZ0bXAsIE5VTEwsICZieXRlc190cmFuc2ZlcnJlZCwgMCk7CisKKwkJcGFja2V0LT5kYXRhID0gbGUzMl90b19jcHUodG1wKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNpc3VzYl9zZW5kX2JyaWRnZV9wYWNrZXQoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgbGVuLAorCQkJCQlzdHJ1Y3Qgc2lzdXNiX3BhY2tldCAqcGFja2V0LAorCQkJCQl1bnNpZ25lZCBpbnQgdGZsYWdzKQoreworCWludCByZXQ7CisJc3NpemVfdCBieXRlc190cmFuc2ZlcnJlZCA9IDA7CisJX19sZTMyIHRtcDsKKworCWlmIChsZW4gPT0gNikKKwkJcGFja2V0LT5kYXRhID0gMDsKKworI2lmZGVmIFNJU1VTQl9ET05UU1lOQworCWlmICghKHNpc3VzYl93YWl0X2FsbF9vdXRfY29tcGxldGUoc2lzdXNiKSkpCisJCXJldHVybiAxOworI2VuZGlmCisKKwkvKiBFdmVudHVhbGx5IGNvcnJlY3QgZW5kaWFubmVzcyAqLworCVNJU1VTQl9DT1JSRUNUX0VORElBTk5FU1NfUEFDS0VUKHBhY2tldCk7CisKKwkvKiAxLiBzZW5kIHRoZSBwYWNrZXQgKi8KKwlyZXQgPSBzaXN1c2Jfc2VuZF9idWxrX21zZyhzaXN1c2IsIFNJU1VTQl9FUF9CUklER0VfT1VULCBsZW4sCisJCQkoY2hhciAqKXBhY2tldCwgTlVMTCwgMCwgJmJ5dGVzX3RyYW5zZmVycmVkLCB0ZmxhZ3MsIDApOworCisJaWYgKChyZXQgPT0gMCkgJiYgKGxlbiA9PSA2KSkgeworCisJCS8qIDIuIGlmIHBhY2tldCBsZW4gPT0gNiwgaXQgbWVhbnMgd2UgcmVhZCwgc28gd2FpdCBmb3IgMzJiaXQKKwkJICogICAgcmV0dXJuIHZhbHVlIGFuZCB3cml0ZSBpdCB0byBwYWNrZXQtPmRhdGEKKwkJICovCisJCXJldCA9IHNpc3VzYl9yZWN2X2J1bGtfbXNnKHNpc3VzYiwgU0lTVVNCX0VQX0JSSURHRV9JTiwgNCwKKwkJCQkoY2hhciAqKSZ0bXAsIE5VTEwsICZieXRlc190cmFuc2ZlcnJlZCwgMCk7CisKKwkJcGFja2V0LT5kYXRhID0gbGUzMl90b19jcHUodG1wKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBhY2Nlc3MgdmlkZW8gbWVtb3J5IGFuZCBtbWlvIChyZXR1cm4gMCBvbiBzdWNjZXNzKSAqLworCisvKiBMb3cgbGV2ZWwgKi8KKworLyogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBhc3N1bWUgYmVpbmcgdXNlZCB0byB0cmFuc2ZlciBieXRlLCB3b3JkLAorICogbG9uZyBldGMuCisgKiBUaGlzIG1lYW5zIHRoYXQgdGhleSBhc3N1bWUgImRhdGEiIGluIG1hY2hpbmUgZW5kaWFubmVzcyBmb3JtYXQuCisgKi8KKworc3RhdGljIGludCBzaXN1c2Jfd3JpdGVfbWVtaW9fYnl0ZShzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCB0eXBlLAorCQkJCQkJCXUzMiBhZGRyLCB1OCBkYXRhKQoreworCXN0cnVjdCBzaXN1c2JfcGFja2V0IHBhY2tldDsKKwlpbnQgcmV0OworCisJcGFja2V0LmhlYWRlciAgPSAoMSA8PCAoYWRkciAmIDMpKSB8ICh0eXBlIDw8IDYpOworCXBhY2tldC5hZGRyZXNzID0gYWRkciAmIH4zOworCXBhY2tldC5kYXRhICAgID0gZGF0YSA8PCAoKGFkZHIgJiAzKSA8PCAzKTsKKwlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzaXN1c2Jfd3JpdGVfbWVtaW9fd29yZChzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCB0eXBlLAorCQkJCQkJCXUzMiBhZGRyLCB1MTYgZGF0YSkKK3sKKwlzdHJ1Y3Qgc2lzdXNiX3BhY2tldCBwYWNrZXQ7CisJaW50IHJldCA9IDA7CisKKwlwYWNrZXQuYWRkcmVzcyA9IGFkZHIgJiB+MzsKKworCXN3aXRjaCAoYWRkciAmIDMpIHsKKwkJY2FzZSAwOgorCQkJcGFja2V0LmhlYWRlciA9ICh0eXBlIDw8IDYpIHwgMHgwMDAzOworCQkJcGFja2V0LmRhdGEgICA9ICh1MzIpZGF0YTsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0KTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlwYWNrZXQuaGVhZGVyID0gKHR5cGUgPDwgNikgfCAweDAwMDY7CisJCQlwYWNrZXQuZGF0YSAgID0gKHUzMilkYXRhIDw8IDg7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJcGFja2V0LmhlYWRlciA9ICh0eXBlIDw8IDYpIHwgMHgwMDBjOworCQkJcGFja2V0LmRhdGEgICA9ICh1MzIpZGF0YSA8PCAxNjsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0KTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlwYWNrZXQuaGVhZGVyID0gKHR5cGUgPDwgNikgfCAweDAwMDg7CisJCQlwYWNrZXQuZGF0YSAgID0gKHUzMilkYXRhIDw8IDI0OworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQpOworCQkJcGFja2V0LmhlYWRlciA9ICh0eXBlIDw8IDYpIHwgMHgwMDAxOworCQkJcGFja2V0LmFkZHJlc3MgPSAoYWRkciAmIH4zKSArIDQ7CisJCQlwYWNrZXQuZGF0YSAgID0gKHUzMilkYXRhID4+IDg7CisJCQlyZXQgfD0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2lzdXNiX3dyaXRlX21lbWlvXzI0Yml0KHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IHR5cGUsCisJCQkJCQkJdTMyIGFkZHIsIHUzMiBkYXRhKQoreworCXN0cnVjdCBzaXN1c2JfcGFja2V0IHBhY2tldDsKKwlpbnQgcmV0ID0gMDsKKworCXBhY2tldC5hZGRyZXNzID0gYWRkciAmIH4zOworCisJc3dpdGNoIChhZGRyICYgMykgeworCQljYXNlIDA6CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDA3OworCQkJcGFja2V0LmRhdGEgICAgPSBkYXRhICYgMHgwMGZmZmZmZjsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0KTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDBlOworCQkJcGFja2V0LmRhdGEgICAgPSBkYXRhIDw8IDg7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwYzsKKwkJCXBhY2tldC5kYXRhICAgID0gZGF0YSA8PCAxNjsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0KTsKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMDE7CisJCQlwYWNrZXQuYWRkcmVzcyA9IChhZGRyICYgfjMpICsgNDsKKwkJCXBhY2tldC5kYXRhICAgID0gKGRhdGEgPj4gMTYpICYgMHgwMGZmOworCQkJcmV0IHw9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0KTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDA4OworCQkJcGFja2V0LmRhdGEgICAgPSBkYXRhIDw8IDI0OworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQpOworCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwMzsKKwkJCXBhY2tldC5hZGRyZXNzID0gKGFkZHIgJiB+MykgKyA0OworCQkJcGFja2V0LmRhdGEgICAgPSAoZGF0YSA+PiA4KSAmIDB4ZmZmZjsKKwkJCXJldCB8PSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzaXN1c2Jfd3JpdGVfbWVtaW9fbG9uZyhzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCB0eXBlLAorCQkJCQkJCXUzMiBhZGRyLCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3Qgc2lzdXNiX3BhY2tldCBwYWNrZXQ7CisJaW50IHJldCA9IDA7CisKKwlwYWNrZXQuYWRkcmVzcyA9IGFkZHIgJiB+MzsKKworCXN3aXRjaCAoYWRkciAmIDMpIHsKKwkJY2FzZSAwOgorCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwZjsKKwkJCXBhY2tldC5kYXRhICAgID0gZGF0YTsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0KTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDBlOworCQkJcGFja2V0LmRhdGEgICAgPSBkYXRhIDw8IDg7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCk7CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDAxOworCQkJcGFja2V0LmFkZHJlc3MgPSAoYWRkciAmIH4zKSArIDQ7CisJCQlwYWNrZXQuZGF0YSAgICA9IGRhdGEgPj4gMjQ7CisJCQlyZXQgfD0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMGM7CisJCQlwYWNrZXQuZGF0YSAgICA9IGRhdGEgPDwgMTY7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCk7CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDAzOworCQkJcGFja2V0LmFkZHJlc3MgPSAoYWRkciAmIH4zKSArIDQ7CisJCQlwYWNrZXQuZGF0YSAgICA9IGRhdGEgPj4gMTY7CisJCQlyZXQgfD0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMDg7CisJCQlwYWNrZXQuZGF0YSAgICA9IGRhdGEgPDwgMjQ7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCk7CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDA3OworCQkJcGFja2V0LmFkZHJlc3MgPSAoYWRkciAmIH4zKSArIDQ7CisJCQlwYWNrZXQuZGF0YSAgICA9IGRhdGEgPj4gODsKKwkJCXJldCB8PSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogVGhlIHh4eF9idWxrIHJvdXRpbmVzIGNvcHkgYSBidWZmZXIgb2YgdmFyaWFibGUgc2l6ZS4gVGhleSB0cmVhdCB0aGUKKyAqIGJ1ZmZlciBhcyBjaGFycywgdGhlcmVmb3JlIGxzYi9tc2IgaGFzIHRvIGJlIGNvcnJlY3RlZCBpZiB1c2luZyB0aGUKKyAqIGJ5dGUvd29yZC9sb25nL2V0YyByb3V0aW5lcyBmb3Igc3BlZWQtdXAKKyAqCisgKiBJZiBkYXRhIGlzIGZyb20gdXNlcmxhbmQsIHNldCAidXNlcmJ1ZmZlciIgKGFuZCBjbGVhciAia2VybmJ1ZmZlciIpLAorICogaWYgZGF0YSBpcyBpbiBrZXJuZWwgc3BhY2UsIHNldCAia2VybmJ1ZmZlciIgKGFuZCBjbGVhciAidXNlcmJ1ZmZlciIpOworICogaWYgbmVpdGhlciAia2VybmJ1ZmZlciIgbm9yICJ1c2VyYnVmZmVyIiBhcmUgZ2l2ZW4sIGl0IGlzIGFzc3VtZWQKKyAqIHRoYXQgdGhlIGRhdGEgYWxyZWFkeSBpcyBpbiB0aGUgdHJhbnNmZXIgYnVmZmVyICJzaXN1c2ItPm9idWZbaW5kZXhdIi4KKyAqLworCitzdGF0aWMgaW50IHNpc3VzYl93cml0ZV9tZW1fYnVsayhzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIHUzMiBhZGRyLAorCQkJCWNoYXIgKmtlcm5idWZmZXIsIGludCBsZW5ndGgsCisJCQkJY29uc3QgY2hhciBfX3VzZXIgKnVzZXJidWZmZXIsIGludCBpbmRleCwKKwkJCQlzc2l6ZV90ICpieXRlc193cml0dGVuKQoreworCXN0cnVjdCBzaXN1c2JfcGFja2V0IHBhY2tldDsKKwlpbnQgIHJldCA9IDA7CisJc3RhdGljIGludCBtc2djb3VudCA9IDA7CisJdTggICBzd2FwOCwgZnJvbWtlcm4gPSBrZXJuYnVmZmVyID8gMSA6IDA7CisJdTE2ICBzd2FwMTY7CisJdTMyICBzd2FwMzIsIGZsYWcgPSAobGVuZ3RoID4+IDI4KSAmIDE7CisJY2hhciBidWZbNF07CisKKwkvKiBpZiBuZWl0aGVyIGtlcm5idWZmZXIgbm90IHVzZXJidWZmZXIgYXJlIGdpdmVuLCBhc3N1bWUKKwkgKiBkYXRhIGluIG9idWYKKwkgKi8KKwlpZiAoIWZyb21rZXJuICYmICF1c2VyYnVmZmVyKQorCQlrZXJuYnVmZmVyID0gc2lzdXNiLT5vYnVmW2luZGV4XTsKKworCSgqYnl0ZXNfd3JpdHRlbiA9IDApOworCisJbGVuZ3RoICY9IDB4MDBmZmZmZmY7CisKKwl3aGlsZSAobGVuZ3RoKSB7CisKKwkgICAgc3dpdGNoIChsZW5ndGgpIHsKKworCQljYXNlIDA6CisJCQlyZXR1cm4gcmV0OworCisJCWNhc2UgMToKKwkJCWlmICh1c2VyYnVmZmVyKSB7CisJCQkJaWYgKGdldF91c2VyKHN3YXA4LCAodTggX191c2VyICopdXNlcmJ1ZmZlcikpCisJCQkJCXJldHVybiAtRUZBVUxUOworCQkJfSBlbHNlCisJCQkJc3dhcDggPSBrZXJuYnVmZmVyWzBdOworCisJCQlyZXQgPSBzaXN1c2Jfd3JpdGVfbWVtaW9fYnl0ZShzaXN1c2IsCisJCQkJCQkJU0lTVVNCX1RZUEVfTUVNLAorCQkJCQkJCWFkZHIsIHN3YXA4KTsKKworCQkJaWYgKCFyZXQpCisJCQkJKCpieXRlc193cml0dGVuKSsrOworCisJCQlyZXR1cm4gcmV0OworCisJCWNhc2UgMjoKKwkJCWlmICh1c2VyYnVmZmVyKSB7CisJCQkJaWYgKGdldF91c2VyKHN3YXAxNiwgKHUxNiBfX3VzZXIgKil1c2VyYnVmZmVyKSkKKwkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9IGVsc2UKKwkJCQlzd2FwMTYgPSAoa2VybmJ1ZmZlclswXSA8PCA4KSB8IGtlcm5idWZmZXJbMV07CisKKwkJCXJldCA9IHNpc3VzYl93cml0ZV9tZW1pb193b3JkKHNpc3VzYiwKKwkJCQkJCQlTSVNVU0JfVFlQRV9NRU0sCisJCQkJCQkJYWRkciwKKwkJCQkJCQlzd2FwMTYpOworCisJCQlpZiAoIXJldCkKKwkJCQkoKmJ5dGVzX3dyaXR0ZW4pICs9IDI7CisKKwkJCXJldHVybiByZXQ7CisKKwkJY2FzZSAzOgorCQkJaWYgKHVzZXJidWZmZXIpIHsKKwkJCQlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZiwgdXNlcmJ1ZmZlciwgMykpCisJCQkJCXJldHVybiAtRUZBVUxUOworCisJCQkJc3dhcDMyID0gKGJ1ZlswXSA8PCAxNikgfAorCQkJCQkgKGJ1ZlsxXSA8PCAgOCkgfAorCQkJCQkgYnVmWzJdOworCQkJfSBlbHNlCisJCQkJc3dhcDMyID0gKGtlcm5idWZmZXJbMF0gPDwgMTYpIHwKKwkJCQkJIChrZXJuYnVmZmVyWzFdIDw8ICA4KSB8CisJCQkJCSBrZXJuYnVmZmVyWzJdOworCisJCQlyZXQgPSBzaXN1c2Jfd3JpdGVfbWVtaW9fMjRiaXQoc2lzdXNiLAorCQkJCQkJCVNJU1VTQl9UWVBFX01FTSwKKwkJCQkJCQlhZGRyLAorCQkJCQkJCXN3YXAzMik7CisKKwkJCWlmICghcmV0KQorCQkJCSgqYnl0ZXNfd3JpdHRlbikgKz0gMzsKKworCQkJcmV0dXJuIHJldDsKKworCQljYXNlIDQ6CisJCQlpZiAodXNlcmJ1ZmZlcikgeworCQkJCWlmIChnZXRfdXNlcihzd2FwMzIsICh1MzIgX191c2VyICopdXNlcmJ1ZmZlcikpCisJCQkJCXJldHVybiAtRUZBVUxUOworCQkJfSBlbHNlCisJCQkJc3dhcDMyID0gKGtlcm5idWZmZXJbMF0gPDwgMjQpIHwKKwkJCQkJIChrZXJuYnVmZmVyWzFdIDw8IDE2KSB8CisJCQkJCSAoa2VybmJ1ZmZlclsyXSA8PCAgOCkgfAorCQkJCQkga2VybmJ1ZmZlclszXTsKKworCQkJcmV0ID0gc2lzdXNiX3dyaXRlX21lbWlvX2xvbmcoc2lzdXNiLAorCQkJCQkJCVNJU1VTQl9UWVBFX01FTSwKKwkJCQkJCQlhZGRyLAorCQkJCQkJCXN3YXAzMik7CisJCQlpZiAoIXJldCkKKwkJCQkoKmJ5dGVzX3dyaXR0ZW4pICs9IDQ7CisKKwkJCXJldHVybiByZXQ7CisKKwkJZGVmYXVsdDoKKwkJCWlmICgobGVuZ3RoICYgfjMpID4gMHgxMDAwMCkgeworCisJCQkgICBwYWNrZXQuaGVhZGVyICA9IDB4MDAxZjsKKwkJCSAgIHBhY2tldC5hZGRyZXNzID0gMHgwMDAwMDFkNDsKKwkJCSAgIHBhY2tldC5kYXRhICAgID0gYWRkcjsKKwkJCSAgIHJldCA9IHNpc3VzYl9zZW5kX2JyaWRnZV9wYWNrZXQoc2lzdXNiLCAxMCwKKwkJCQkJCQkJJnBhY2tldCwgMCk7CisJCQkgICBwYWNrZXQuaGVhZGVyICA9IDB4MDAxZjsKKwkJCSAgIHBhY2tldC5hZGRyZXNzID0gMHgwMDAwMDFkMDsKKwkJCSAgIHBhY2tldC5kYXRhICAgID0gKGxlbmd0aCAmIH4zKTsKKwkJCSAgIHJldCB8PSBzaXN1c2Jfc2VuZF9icmlkZ2VfcGFja2V0KHNpc3VzYiwgMTAsCisJCQkJCQkJCSZwYWNrZXQsIDApOworCQkJICAgcGFja2V0LmhlYWRlciAgPSAweDAwMWY7CisJCQkgICBwYWNrZXQuYWRkcmVzcyA9IDB4MDAwMDAxYzA7CisJCQkgICBwYWNrZXQuZGF0YSAgICA9IGZsYWcgfCAweDE2OworCQkJICAgcmV0IHw9IHNpc3VzYl9zZW5kX2JyaWRnZV9wYWNrZXQoc2lzdXNiLCAxMCwKKwkJCQkJCQkJJnBhY2tldCwgMCk7CisJCQkgICBpZiAodXNlcmJ1ZmZlcikgeworCQkJCXJldCB8PSBzaXN1c2Jfc2VuZF9idWxrX21zZyhzaXN1c2IsCisJCQkJCQkJU0lTVVNCX0VQX0dGWF9MQlVMS19PVVQsCisJCQkJCQkJKGxlbmd0aCAmIH4zKSwKKwkJCQkJCQlOVUxMLCB1c2VyYnVmZmVyLCAwLAorCQkJCQkJCWJ5dGVzX3dyaXR0ZW4sIDAsIDEpOworCQkJCXVzZXJidWZmZXIgKz0gKCpieXRlc193cml0dGVuKTsKKwkJCSAgIH0gZWxzZSBpZiAoZnJvbWtlcm4pIHsKKwkJCQlyZXQgfD0gc2lzdXNiX3NlbmRfYnVsa19tc2coc2lzdXNiLAorCQkJCQkJCVNJU1VTQl9FUF9HRlhfTEJVTEtfT1VULAorCQkJCQkJCShsZW5ndGggJiB+MyksCisJCQkJCQkJa2VybmJ1ZmZlciwgTlVMTCwgMCwKKwkJCQkJCQlieXRlc193cml0dGVuLCAwLCAxKTsKKwkJCQlrZXJuYnVmZmVyICs9ICgqYnl0ZXNfd3JpdHRlbik7CisJCQkgICB9IGVsc2UgeworCQkJcmV0IHw9IHNpc3VzYl9zZW5kX2J1bGtfbXNnKHNpc3VzYiwKKwkJCQkJCQlTSVNVU0JfRVBfR0ZYX0xCVUxLX09VVCwKKwkJCQkJCQkobGVuZ3RoICYgfjMpLAorCQkJCQkJCU5VTEwsIE5VTEwsIGluZGV4LAorCQkJCQkJCWJ5dGVzX3dyaXR0ZW4sIDAsIDEpOworCQkJCWtlcm5idWZmZXIgKz0gKCgqYnl0ZXNfd3JpdHRlbikgJgorCQkJCQkJKHNpc3VzYi0+b2J1ZnNpemUtMSkpOworCQkJICAgfQorCisJCQl9IGVsc2UgeworCisJCQkgICBwYWNrZXQuaGVhZGVyICA9IDB4MDAxZjsKKwkJCSAgIHBhY2tldC5hZGRyZXNzID0gMHgwMDAwMDE5NDsKKwkJCSAgIHBhY2tldC5kYXRhICAgID0gYWRkcjsKKwkJCSAgIHJldCA9IHNpc3VzYl9zZW5kX2JyaWRnZV9wYWNrZXQoc2lzdXNiLCAxMCwKKwkJCSAgIAkJCQkJJnBhY2tldCwgMCk7CisJCQkgICBwYWNrZXQuaGVhZGVyICA9IDB4MDAxZjsKKwkJCSAgIHBhY2tldC5hZGRyZXNzID0gMHgwMDAwMDE5MDsKKwkJCSAgIHBhY2tldC5kYXRhICAgID0gKGxlbmd0aCAmIH4zKTsKKwkJCSAgIHJldCB8PSBzaXN1c2Jfc2VuZF9icmlkZ2VfcGFja2V0KHNpc3VzYiwgMTAsCisJCQkgICAJCQkJCSZwYWNrZXQsIDApOworCQkJICAgaWYgKHNpc3VzYi0+ZmxhZ2IwICE9IDB4MTYpIHsKKwkJCQlwYWNrZXQuaGVhZGVyICA9IDB4MDAxZjsKKwkJCQlwYWNrZXQuYWRkcmVzcyA9IDB4MDAwMDAxODA7CisJCQkJcGFja2V0LmRhdGEgICAgPSBmbGFnIHwgMHgxNjsKKwkJCQlyZXQgfD0gc2lzdXNiX3NlbmRfYnJpZGdlX3BhY2tldChzaXN1c2IsIDEwLAorCQkJCQkJCQkmcGFja2V0LCAwKTsKKwkJCQlzaXN1c2ItPmZsYWdiMCA9IDB4MTY7CisJCQkgICB9CisJCQkgICBpZiAodXNlcmJ1ZmZlcikgeworCQkJCXJldCB8PSBzaXN1c2Jfc2VuZF9idWxrX21zZyhzaXN1c2IsCisJCQkJCQkJU0lTVVNCX0VQX0dGWF9CVUxLX09VVCwKKwkJCQkJCQkobGVuZ3RoICYgfjMpLAorCQkJCQkJCU5VTEwsIHVzZXJidWZmZXIsIDAsCisJCQkJCQkJYnl0ZXNfd3JpdHRlbiwgMCwgMSk7CisJCQkJdXNlcmJ1ZmZlciArPSAoKmJ5dGVzX3dyaXR0ZW4pOworCQkJICAgfSBlbHNlIGlmIChmcm9ta2VybikgeworCQkJCXJldCB8PSBzaXN1c2Jfc2VuZF9idWxrX21zZyhzaXN1c2IsCisJCQkJCQkJU0lTVVNCX0VQX0dGWF9CVUxLX09VVCwKKwkJCQkJCQkobGVuZ3RoICYgfjMpLAorCQkJCQkJCWtlcm5idWZmZXIsIE5VTEwsIDAsCisJCQkJCQkJYnl0ZXNfd3JpdHRlbiwgMCwgMSk7CisJCQkJa2VybmJ1ZmZlciArPSAoKmJ5dGVzX3dyaXR0ZW4pOworCQkJICAgfSBlbHNlIHsKKwkJCQlyZXQgfD0gc2lzdXNiX3NlbmRfYnVsa19tc2coc2lzdXNiLAorCQkJCQkJCVNJU1VTQl9FUF9HRlhfQlVMS19PVVQsCisJCQkJCQkJKGxlbmd0aCAmIH4zKSwKKwkJCQkJCQlOVUxMLCBOVUxMLCBpbmRleCwKKwkJCQkJCQlieXRlc193cml0dGVuLCAwLCAxKTsKKwkJCQlrZXJuYnVmZmVyICs9ICgoKmJ5dGVzX3dyaXR0ZW4pICYKKwkJCQkJCShzaXN1c2ItPm9idWZzaXplLTEpKTsKKwkJCSAgIH0KKwkJCX0KKwkJCWlmIChyZXQpIHsKKwkJCQltc2djb3VudCsrOworCQkJCWlmIChtc2djb3VudCA8IDUwMCkKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCQkic2lzdXNidmdhWyVkXTogV3JvdGUgJVpkIG9mICIKKwkJCQkJCSIlZCBieXRlcywgZXJyb3IgJWRcbiIsCisJCQkJCQlzaXN1c2ItPm1pbm9yLCAqYnl0ZXNfd3JpdHRlbiwKKwkJCQkJCWxlbmd0aCwgcmV0KTsKKwkJCQllbHNlIGlmIChtc2djb3VudCA9PSA1MDApCisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkJInNpc3VzYnZnYVslZF06IFRvbyBtYW55IGVycm9ycyIKKwkJCQkJCSIsIGxvZ2dpbmcgc3RvcHBlZFxuIiwKKwkJCQkJCXNpc3VzYi0+bWlub3IpOworCQkJfQorCQkJYWRkciArPSAoKmJ5dGVzX3dyaXR0ZW4pOworCQkJbGVuZ3RoIC09ICgqYnl0ZXNfd3JpdHRlbik7CisJICAgIH0KKworCSAgICBpZiAocmV0KQorCSAgICAJYnJlYWs7CisKKwl9CisKKwlyZXR1cm4gcmV0ID8gLUVJTyA6IDA7Cit9CisKK3N0YXRpYyBpbnQgc2lzdXNiX3JlYWRfbWVtaW9fYnl0ZShzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCB0eXBlLAorCQkJCQkJCXUzMiBhZGRyLCB1OCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc2lzdXNiX3BhY2tldCBwYWNrZXQ7CisJaW50IHJldDsKKworCUNMRUFSUEFDS0VUKCZwYWNrZXQpOworCXBhY2tldC5oZWFkZXIgID0gKDEgPDwgKGFkZHIgJiAzKSkgfCAodHlwZSA8PCA2KTsKKwlwYWNrZXQuYWRkcmVzcyA9IGFkZHIgJiB+MzsKKwlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCA2LCAmcGFja2V0KTsKKwkqZGF0YSA9ICh1OCkocGFja2V0LmRhdGEgPj4gKChhZGRyICYgMykgPDwgMykpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2lzdXNiX3JlYWRfbWVtaW9fd29yZChzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCB0eXBlLAorCQkJCQkJCXUzMiBhZGRyLCB1MTYgKmRhdGEpCit7CisJc3RydWN0IHNpc3VzYl9wYWNrZXQgcGFja2V0OworCWludCByZXQgPSAwOworCisJQ0xFQVJQQUNLRVQoJnBhY2tldCk7CisKKwlwYWNrZXQuYWRkcmVzcyA9IGFkZHIgJiB+MzsKKworCXN3aXRjaCAoYWRkciAmIDMpIHsKKwkJY2FzZSAwOgorCQkJcGFja2V0LmhlYWRlciA9ICh0eXBlIDw8IDYpIHwgMHgwMDAzOworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgNiwgJnBhY2tldCk7CisJCQkqZGF0YSA9ICh1MTYpKHBhY2tldC5kYXRhKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlwYWNrZXQuaGVhZGVyID0gKHR5cGUgPDwgNikgfCAweDAwMDY7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCA2LCAmcGFja2V0KTsKKwkJCSpkYXRhID0gKHUxNikocGFja2V0LmRhdGEgPj4gOCk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJcGFja2V0LmhlYWRlciA9ICh0eXBlIDw8IDYpIHwgMHgwMDBjOworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgNiwgJnBhY2tldCk7CisJCQkqZGF0YSA9ICh1MTYpKHBhY2tldC5kYXRhID4+IDE2KTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlwYWNrZXQuaGVhZGVyID0gKHR5cGUgPDwgNikgfCAweDAwMDg7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCA2LCAmcGFja2V0KTsKKwkJCSpkYXRhID0gKHUxNikocGFja2V0LmRhdGEgPj4gMjQpOworCQkJcGFja2V0LmhlYWRlciA9ICh0eXBlIDw8IDYpIHwgMHgwMDAxOworCQkJcGFja2V0LmFkZHJlc3MgPSAoYWRkciAmIH4zKSArIDQ7CisJCQlyZXQgfD0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgNiwgJnBhY2tldCk7CisJCQkqZGF0YSB8PSAodTE2KShwYWNrZXQuZGF0YSA8PCA4KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNpc3VzYl9yZWFkX21lbWlvXzI0Yml0KHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IHR5cGUsCisJCQkJCQkJdTMyIGFkZHIsIHUzMiAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc2lzdXNiX3BhY2tldCBwYWNrZXQ7CisJaW50IHJldCA9IDA7CisKKwlwYWNrZXQuYWRkcmVzcyA9IGFkZHIgJiB+MzsKKworCXN3aXRjaCAoYWRkciAmIDMpIHsKKwkJY2FzZSAwOgorCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwNzsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDYsICZwYWNrZXQpOworCQkJKmRhdGEgPSBwYWNrZXQuZGF0YSAmIDB4MDBmZmZmZmY7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwZTsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDYsICZwYWNrZXQpOworCQkJKmRhdGEgPSBwYWNrZXQuZGF0YSA+PiA4OworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMGM7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCA2LCAmcGFja2V0KTsKKwkJCSpkYXRhID0gcGFja2V0LmRhdGEgPj4gMTY7CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDAxOworCQkJcGFja2V0LmFkZHJlc3MgPSAoYWRkciAmIH4zKSArIDQ7CisJCQlyZXQgfD0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgNiwgJnBhY2tldCk7CisJCQkqZGF0YSB8PSAoKHBhY2tldC5kYXRhICYgMHhmZikgPDwgMTYpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMDg7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCA2LCAmcGFja2V0KTsKKwkJCSpkYXRhID0gcGFja2V0LmRhdGEgPj4gMjQ7CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDAzOworCQkJcGFja2V0LmFkZHJlc3MgPSAoYWRkciAmIH4zKSArIDQ7CisJCQlyZXQgfD0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgNiwgJnBhY2tldCk7CisJCQkqZGF0YSB8PSAoKHBhY2tldC5kYXRhICYgMHhmZmZmKSA8PCA4KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNpc3VzYl9yZWFkX21lbWlvX2xvbmcoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgdHlwZSwKKwkJCQkJCQl1MzIgYWRkciwgdTMyICpkYXRhKQoreworCXN0cnVjdCBzaXN1c2JfcGFja2V0IHBhY2tldDsKKwlpbnQgcmV0ID0gMDsKKworCXBhY2tldC5hZGRyZXNzID0gYWRkciAmIH4zOworCisJc3dpdGNoIChhZGRyICYgMykgeworCQljYXNlIDA6CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDBmOworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgNiwgJnBhY2tldCk7CisJCQkqZGF0YSA9IHBhY2tldC5kYXRhOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMGU7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCA2LCAmcGFja2V0KTsKKwkJCSpkYXRhID0gcGFja2V0LmRhdGEgPj4gODsKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMDE7CisJCQlwYWNrZXQuYWRkcmVzcyA9IChhZGRyICYgfjMpICsgNDsKKwkJCXJldCB8PSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCA2LCAmcGFja2V0KTsKKwkJCSpkYXRhIHw9IChwYWNrZXQuZGF0YSA8PCAyNCk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwYzsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDYsICZwYWNrZXQpOworCQkJKmRhdGEgPSBwYWNrZXQuZGF0YSA+PiAxNjsKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMDM7CisJCQlwYWNrZXQuYWRkcmVzcyA9IChhZGRyICYgfjMpICsgNDsKKwkJCXJldCB8PSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCA2LCAmcGFja2V0KTsKKwkJCSpkYXRhIHw9IChwYWNrZXQuZGF0YSA8PCAxNik7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwODsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDYsICZwYWNrZXQpOworCQkJKmRhdGEgPSBwYWNrZXQuZGF0YSA+PiAyNDsKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMDc7CisJCQlwYWNrZXQuYWRkcmVzcyA9IChhZGRyICYgfjMpICsgNDsKKwkJCXJldCB8PSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCA2LCAmcGFja2V0KTsKKwkJCSpkYXRhIHw9IChwYWNrZXQuZGF0YSA8PCA4KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNpc3VzYl9yZWFkX21lbV9idWxrKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgdTMyIGFkZHIsCisJCQkJY2hhciAqa2VybmJ1ZmZlciwgaW50IGxlbmd0aCwKKwkJCQljaGFyIF9fdXNlciAqdXNlcmJ1ZmZlciwgc3NpemVfdCAqYnl0ZXNfcmVhZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwljaGFyIGJ1Zls0XTsKKwl1MTYgc3dhcDE2OworCXUzMiBzd2FwMzI7CisKKwkoKmJ5dGVzX3JlYWQgPSAwKTsKKworCWxlbmd0aCAmPSAweDAwZmZmZmZmOworCisJd2hpbGUgKGxlbmd0aCkgeworCisJICAgIHN3aXRjaCAobGVuZ3RoKSB7CisKKwkJY2FzZSAwOgorCQkJcmV0dXJuIHJldDsKKworCQljYXNlIDE6CisKKwkJCXJldCB8PSBzaXN1c2JfcmVhZF9tZW1pb19ieXRlKHNpc3VzYiwgU0lTVVNCX1RZUEVfTUVNLAorCQkJCQkJCQlhZGRyLCAmYnVmWzBdKTsKKwkJCWlmICghcmV0KSB7CisJCQkJKCpieXRlc19yZWFkKSsrOworCQkJCWlmICh1c2VyYnVmZmVyKSB7CisJCQkJCWlmIChwdXRfdXNlcihidWZbMF0sCisJCQkJCQkodTggX191c2VyICopdXNlcmJ1ZmZlcikpIHsKKwkJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJa2VybmJ1ZmZlclswXSA9IGJ1ZlswXTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gcmV0OworCisJCWNhc2UgMjoKKwkJCXJldCB8PSBzaXN1c2JfcmVhZF9tZW1pb193b3JkKHNpc3VzYiwgU0lTVVNCX1RZUEVfTUVNLAorCQkJCQkJCQlhZGRyLCAmc3dhcDE2KTsKKwkJCWlmICghcmV0KSB7CisJCQkJKCpieXRlc19yZWFkKSArPSAyOworCQkJCWlmICh1c2VyYnVmZmVyKSB7CisJCQkJCWlmIChwdXRfdXNlcihzd2FwMTYsCisJCQkJCQkodTE2IF9fdXNlciAqKXVzZXJidWZmZXIpKQorCQkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJa2VybmJ1ZmZlclswXSA9IHN3YXAxNiA+PiA4OworCQkJCQlrZXJuYnVmZmVyWzFdID0gc3dhcDE2ICYgMHhmZjsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gcmV0OworCisJCWNhc2UgMzoKKwkJCXJldCB8PSBzaXN1c2JfcmVhZF9tZW1pb18yNGJpdChzaXN1c2IsIFNJU1VTQl9UWVBFX01FTSwKKwkJCQkJCQkJYWRkciwgJnN3YXAzMik7CisJCQlpZiAoIXJldCkgeworCQkJCSgqYnl0ZXNfcmVhZCkgKz0gMzsKKwkJCQlidWZbMF0gPSAoc3dhcDMyID4+IDE2KSAmIDB4ZmY7CisJCQkJYnVmWzFdID0gKHN3YXAzMiA+PiA4KSAmIDB4ZmY7CisJCQkJYnVmWzJdID0gc3dhcDMyICYgMHhmZjsKKwkJCQlpZiAodXNlcmJ1ZmZlcikgeworCQkJCQlpZiAoY29weV90b191c2VyKHVzZXJidWZmZXIsICZidWZbMF0sIDMpKQorCQkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJa2VybmJ1ZmZlclswXSA9IGJ1ZlswXTsKKwkJCQkJa2VybmJ1ZmZlclsxXSA9IGJ1ZlsxXTsKKwkJCQkJa2VybmJ1ZmZlclsyXSA9IGJ1ZlsyXTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gcmV0OworCisJCWRlZmF1bHQ6CisJCQlyZXQgfD0gc2lzdXNiX3JlYWRfbWVtaW9fbG9uZyhzaXN1c2IsIFNJU1VTQl9UWVBFX01FTSwKKwkJCQkJCQkJYWRkciwgJnN3YXAzMik7CisJCQlpZiAoIXJldCkgeworCQkJCSgqYnl0ZXNfcmVhZCkgKz0gNDsKKwkJCQlpZiAodXNlcmJ1ZmZlcikgeworCQkJCQlpZiAocHV0X3VzZXIoc3dhcDMyLAorCQkJCQkJKHUzMiBfX3VzZXIgKil1c2VyYnVmZmVyKSkKKwkJCQkJCXJldHVybiAtRUZBVUxUOworCisJCQkJCXVzZXJidWZmZXIgKz0gNDsKKwkJCQl9IGVsc2UgeworCQkJCQlrZXJuYnVmZmVyWzBdID0gKHN3YXAzMiA+PiAyNCkgJiAweGZmOworCQkJCQlrZXJuYnVmZmVyWzFdID0gKHN3YXAzMiA+PiAxNikgJiAweGZmOworCQkJCQlrZXJuYnVmZmVyWzJdID0gKHN3YXAzMiA+PiA4KSAmIDB4ZmY7CisJCQkJCWtlcm5idWZmZXJbM10gPSBzd2FwMzIgJiAweGZmOworCQkJCQlrZXJuYnVmZmVyICs9IDQ7CisJCQkJfQorCQkJCWFkZHIgKz0gNDsKKwkJCQlsZW5ndGggLT0gNDsKKwkJCX0KKyNpZiAwCQkvKiBUaGF0IGRvZXMgbm90IHdvcmssIGFzIEVQIDIgaXMgYW4gT1VUIEVQISAqLworCQlkZWZhdWx0OgorCQkJQ0xFQVJQQUNLRVQoJnBhY2tldCk7CisJCQlwYWNrZXQuaGVhZGVyICA9IDB4MDAxZjsKKwkJCXBhY2tldC5hZGRyZXNzID0gMHgwMDAwMDFhMDsKKwkJCXBhY2tldC5kYXRhICAgID0gMHgwMDAwMDAwNjsKKwkJCXJldCB8PSBzaXN1c2Jfc2VuZF9icmlkZ2VfcGFja2V0KHNpc3VzYiwgMTAsCisJCQkJCQkJCSZwYWNrZXQsIDApOworCQkJcGFja2V0LmhlYWRlciAgPSAweDAwMWY7CisJCQlwYWNrZXQuYWRkcmVzcyA9IDB4MDAwMDAxYjA7CisJCQlwYWNrZXQuZGF0YSAgICA9IChsZW5ndGggJiB+MykgfCAweDQwMDAwMDAwOworCQkJcmV0IHw9IHNpc3VzYl9zZW5kX2JyaWRnZV9wYWNrZXQoc2lzdXNiLCAxMCwKKwkJCQkJCQkJJnBhY2tldCwgMCk7CisJCQlwYWNrZXQuaGVhZGVyICA9IDB4MDAxZjsKKwkJCXBhY2tldC5hZGRyZXNzID0gMHgwMDAwMDFiNDsKKwkJCXBhY2tldC5kYXRhICAgID0gYWRkcjsKKwkJCXJldCB8PSBzaXN1c2Jfc2VuZF9icmlkZ2VfcGFja2V0KHNpc3VzYiwgMTAsCisJCQkJCQkJCSZwYWNrZXQsIDApOworCQkJcGFja2V0LmhlYWRlciAgPSAweDAwMWY7CisJCQlwYWNrZXQuYWRkcmVzcyA9IDB4MDAwMDAxYTQ7CisJCQlwYWNrZXQuZGF0YSAgICA9IDB4MDAwMDAwMDE7CisJCQlyZXQgfD0gc2lzdXNiX3NlbmRfYnJpZGdlX3BhY2tldChzaXN1c2IsIDEwLAorCQkJCQkJCQkmcGFja2V0LCAwKTsKKwkJCWlmICh1c2VyYnVmZmVyKSB7CisJCQkJcmV0IHw9IHNpc3VzYl9yZWN2X2J1bGtfbXNnKHNpc3VzYiwKKwkJCQkJCQlTSVNVU0JfRVBfR0ZYX0JVTEtfSU4sCisJCQkJCQkJKGxlbmd0aCAmIH4zKSwKKwkJCQkJCQlOVUxMLCB1c2VyYnVmZmVyLAorCQkJCQkJCWJ5dGVzX3JlYWQsIDApOworCQkJCWlmICghcmV0KSB1c2VyYnVmZmVyICs9ICgqYnl0ZXNfcmVhZCk7CisJCQl9IGVsc2UgeworCQkJCXJldCB8PSBzaXN1c2JfcmVjdl9idWxrX21zZyhzaXN1c2IsCisJCQkJCQkJU0lTVVNCX0VQX0dGWF9CVUxLX0lOLAorCQkJCQkJCShsZW5ndGggJiB+MyksCisJCQkJCQkJa2VybmJ1ZmZlciwgTlVMTCwKKwkJCQkJCQlieXRlc19yZWFkLCAwKTsKKwkJCQlpZiAoIXJldCkga2VybmJ1ZmZlciArPSAoKmJ5dGVzX3JlYWQpOworCQkJfQorCQkJYWRkciArPSAoKmJ5dGVzX3JlYWQpOworCQkJbGVuZ3RoIC09ICgqYnl0ZXNfcmVhZCk7CisjZW5kaWYKKwkgICAgfQorCisJICAgIGlmIChyZXQpCisJICAgIAlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBIaWdoIGxldmVsOiBHZnggKGluZGV4ZWQpIHJlZ2lzdGVyIGFjY2VzcyAqLworCitzdGF0aWMgaW50CitzaXN1c2Jfc2V0aWR4cmVnKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IHBvcnQsIHU4IGluZGV4LCB1OCBkYXRhKQoreworCWludCByZXQ7CisJcmV0ID0gc2lzdXNiX3dyaXRlX21lbWlvX2J5dGUoc2lzdXNiLCBTSVNVU0JfVFlQRV9JTywgcG9ydCwgaW5kZXgpOworCXJldCB8PSBzaXN1c2Jfd3JpdGVfbWVtaW9fYnl0ZShzaXN1c2IsIFNJU1VTQl9UWVBFX0lPLCBwb3J0ICsgMSwgZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorc2lzdXNiX2dldGlkeHJlZyhzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCBwb3J0LCB1OCBpbmRleCwgdTggKmRhdGEpCit7CisJaW50IHJldDsKKwlyZXQgPSBzaXN1c2Jfd3JpdGVfbWVtaW9fYnl0ZShzaXN1c2IsIFNJU1VTQl9UWVBFX0lPLCBwb3J0LCBpbmRleCk7CisJcmV0IHw9IHNpc3VzYl9yZWFkX21lbWlvX2J5dGUoc2lzdXNiLCBTSVNVU0JfVFlQRV9JTywgcG9ydCArIDEsIGRhdGEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl9zZXRpZHhyZWdhbmRvcihzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCBwb3J0LCB1OCBpZHgsCisJCQkJCQkJdTggbXlhbmQsIHU4IG15b3IpCit7CisJaW50IHJldDsKKwl1OCB0bXA7CisKKwlyZXQgPSBzaXN1c2Jfd3JpdGVfbWVtaW9fYnl0ZShzaXN1c2IsIFNJU1VTQl9UWVBFX0lPLCBwb3J0LCBpZHgpOworCXJldCB8PSBzaXN1c2JfcmVhZF9tZW1pb19ieXRlKHNpc3VzYiwgU0lTVVNCX1RZUEVfSU8sIHBvcnQgKyAxLCAmdG1wKTsKKwl0bXAgJj0gbXlhbmQ7CisJdG1wIHw9IG15b3I7CisJcmV0IHw9IHNpc3VzYl93cml0ZV9tZW1pb19ieXRlKHNpc3VzYiwgU0lTVVNCX1RZUEVfSU8sIHBvcnQgKyAxLCB0bXApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl9zZXRpZHhyZWdtYXNrKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IHBvcnQsIHU4IGlkeCwKKwkJCQkJCQl1OCBkYXRhLCB1OCBtYXNrKQoreworCWludCByZXQ7CisJdTggdG1wOworCXJldCA9IHNpc3VzYl93cml0ZV9tZW1pb19ieXRlKHNpc3VzYiwgU0lTVVNCX1RZUEVfSU8sIHBvcnQsIGlkeCk7CisJcmV0IHw9IHNpc3VzYl9yZWFkX21lbWlvX2J5dGUoc2lzdXNiLCBTSVNVU0JfVFlQRV9JTywgcG9ydCArIDEsICZ0bXApOworCXRtcCAmPSB+KG1hc2spOworCXRtcCB8PSAoZGF0YSAmIG1hc2spOworCXJldCB8PSBzaXN1c2Jfd3JpdGVfbWVtaW9fYnl0ZShzaXN1c2IsIFNJU1VTQl9UWVBFX0lPLCBwb3J0ICsgMSwgdG1wKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitzaXN1c2Jfc2V0aWR4cmVnb3Ioc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgcG9ydCwgdTggaW5kZXgsIHU4IG15b3IpCit7CisJcmV0dXJuKHNpc3VzYl9zZXRpZHhyZWdhbmRvcihzaXN1c2IsIHBvcnQsIGluZGV4LCAweGZmLCBteW9yKSk7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl9zZXRpZHhyZWdhbmQoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgcG9ydCwgdTggaWR4LCB1OCBteWFuZCkKK3sKKwlyZXR1cm4oc2lzdXNiX3NldGlkeHJlZ2FuZG9yKHNpc3VzYiwgcG9ydCwgaWR4LCBteWFuZCwgMHgwMCkpOworfQorCisvKiBhY2Nlc3MgcGNpIGNvbmZpZyByZWdpc3RlcnMgKHJlZyBudW1iZXJzIDAsIDQsIDgsIGV0YykgKi8KKworc3RhdGljIGludAorc2lzdXNiX3dyaXRlX3BjaV9jb25maWcoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgcmVnbnVtLCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3Qgc2lzdXNiX3BhY2tldCBwYWNrZXQ7CisJaW50IHJldDsKKworCXBhY2tldC5oZWFkZXIgPSAweDAwOGY7CisJcGFja2V0LmFkZHJlc3MgPSByZWdudW0gfCAweDEwMDAwOworCXBhY2tldC5kYXRhID0gZGF0YTsKKwlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorc2lzdXNiX3JlYWRfcGNpX2NvbmZpZyhzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCByZWdudW0sIHUzMiAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc2lzdXNiX3BhY2tldCBwYWNrZXQ7CisJaW50IHJldDsKKworCXBhY2tldC5oZWFkZXIgPSAweDAwOGY7CisJcGFja2V0LmFkZHJlc3MgPSAodTMyKXJlZ251bSB8IDB4MTAwMDA7CisJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgNiwgJnBhY2tldCk7CisJKmRhdGEgPSBwYWNrZXQuZGF0YTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBDbGVhciB2aWRlbyBSQU0gKi8KKworc3RhdGljIGludAorc2lzdXNiX2NsZWFyX3ZyYW0oc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCB1MzIgYWRkcmVzcywgaW50IGxlbmd0aCkKK3sKKwlpbnQgcmV0LCBpOworCXNzaXplX3QgajsKKworCWlmIChhZGRyZXNzIDwgc2lzdXNiLT52cmFtYmFzZSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoYWRkcmVzcyA+PSBzaXN1c2ItPnZyYW1iYXNlICsgc2lzdXNiLT52cmFtc2l6ZSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoYWRkcmVzcyArIGxlbmd0aCA+IHNpc3VzYi0+dnJhbWJhc2UgKyBzaXN1c2ItPnZyYW1zaXplKQorCQlsZW5ndGggPSBzaXN1c2ItPnZyYW1iYXNlICsgc2lzdXNiLT52cmFtc2l6ZSAtIGFkZHJlc3M7CisKKwlpZiAobGVuZ3RoIDw9IDApCisJCXJldHVybiAwOworCisJLyogYWxsb2NhdGUgZnJlZSBidWZmZXIvdXJiIGFuZCBjbGVhciB0aGUgYnVmZmVyICovCisJaWYgKChpID0gc2lzdXNiX2FsbG9jX291dGJ1ZihzaXN1c2IpKSA8IDApCisJCXJldHVybiAtRUJVU1k7CisKKwltZW1zZXQoc2lzdXNiLT5vYnVmW2ldLCAwLCBzaXN1c2ItPm9idWZzaXplKTsKKworCS8qIFdlIGNhbiB3cml0ZSBhIGxlbmd0aCA+IGJ1ZmZlciBzaXplIGhlcmUuIFRoZSBidWZmZXIKKwkgKiBkYXRhIHdpbGwgc2ltcGx5IGJlIHJlLXVzZWQgKGxpa2UgYSByaW5nLWJ1ZmZlcikuCisJICovCisJcmV0ID0gc2lzdXNiX3dyaXRlX21lbV9idWxrKHNpc3VzYiwgYWRkcmVzcywgTlVMTCwgbGVuZ3RoLCBOVUxMLCBpLCAmaik7CisKKwkvKiBGcmVlIHRoZSBidWZmZXIvdXJiICovCisJc2lzdXNiX2ZyZWVfb3V0YnVmKHNpc3VzYiwgaSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBJbml0aWFsaXplIHRoZSBncmFwaGljcyBjb3JlIChyZXR1cm4gMCBvbiBzdWNjZXNzKQorICogVGhpcyByZXNldHMgdGhlIGdyYXBoaWNzIGhhcmR3YXJlIGFuZCBwdXRzIGl0IGludG8KKyAqIGEgZGVmaW5lZCBtb2RlICg2NDB4NDgwQDYwSHopCisgKi8KKworI2RlZmluZSBHRVRSRUcocixkKSAgICAgc2lzdXNiX3JlYWRfbWVtaW9fYnl0ZShzaXN1c2IsIFNJU1VTQl9UWVBFX0lPLCByLCBkKQorI2RlZmluZSBTRVRSRUcocixkKQlzaXN1c2Jfd3JpdGVfbWVtaW9fYnl0ZShzaXN1c2IsIFNJU1VTQl9UWVBFX0lPLCByLCBkKQorI2RlZmluZSBTRVRJUkVHKHIsaSxkKQlzaXN1c2Jfc2V0aWR4cmVnKHNpc3VzYiwgciwgaSwgZCkKKyNkZWZpbmUgR0VUSVJFRyhyLGksZCkgIHNpc3VzYl9nZXRpZHhyZWcoc2lzdXNiLCByLCBpLCBkKQorI2RlZmluZSBTRVRJUkVHT1IocixpLG8pCXNpc3VzYl9zZXRpZHhyZWdvcihzaXN1c2IsIHIsIGksIG8pCisjZGVmaW5lIFNFVElSRUdBTkQocixpLGEpCXNpc3VzYl9zZXRpZHhyZWdhbmQoc2lzdXNiLCByLCBpLCBhKQorI2RlZmluZSBTRVRJUkVHQU5ET1IocixpLGEsbykJc2lzdXNiX3NldGlkeHJlZ2FuZG9yKHNpc3VzYiwgciwgaSwgYSwgbykKKyNkZWZpbmUgUkVBREwoYSxkKQlzaXN1c2JfcmVhZF9tZW1pb19sb25nKHNpc3VzYiwgU0lTVVNCX1RZUEVfTUVNLCBhLCBkKQorI2RlZmluZSBXUklURUwoYSxkKSAJc2lzdXNiX3dyaXRlX21lbWlvX2xvbmcoc2lzdXNiLCBTSVNVU0JfVFlQRV9NRU0sIGEsIGQpCisjZGVmaW5lIFJFQURCKGEsZCkJc2lzdXNiX3JlYWRfbWVtaW9fYnl0ZShzaXN1c2IsIFNJU1VTQl9UWVBFX01FTSwgYSwgZCkKKyNkZWZpbmUgV1JJVEVCKGEsZCkgCXNpc3VzYl93cml0ZV9tZW1pb19ieXRlKHNpc3VzYiwgU0lTVVNCX1RZUEVfTUVNLCBhLCBkKQorCitzdGF0aWMgaW50CitzaXN1c2JfdHJpZ2dlcnNyMTYoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCB1OCByYW10eXBlKQoreworCWludCByZXQ7CisJdTggdG1wODsKKworCXJldCA9IEdFVElSRUcoU0lTU1IsIDB4MTYsICZ0bXA4KTsKKwlpZiAocmFtdHlwZSA8PSAxKSB7CisJCXRtcDggJj0gMHgzZjsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MTYsIHRtcDgpOworCQl0bXA4IHw9IDB4ODA7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDE2LCB0bXA4KTsKKwl9IGVsc2UgeworCQl0bXA4IHw9IDB4YzA7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDE2LCB0bXA4KTsKKwkJdG1wOCAmPSAweDBmOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgxNiwgdG1wOCk7CisJCXRtcDggfD0gMHg4MDsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MTYsIHRtcDgpOworCQl0bXA4ICY9IDB4MGY7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDE2LCB0bXA4KTsKKwkJdG1wOCB8PSAweGQwOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgxNiwgdG1wOCk7CisJCXRtcDggJj0gMHgwZjsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MTYsIHRtcDgpOworCQl0bXA4IHw9IDB4YTA7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDE2LCB0bXA4KTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorc2lzdXNiX2dldGJ1c3dpZHRoKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50ICpidywgaW50ICpjaGFiKQoreworCWludCByZXQ7CisJdTggIHJhbXR5cGUsIGRvbmUgPSAwOworCXUzMiB0MCwgdDEsIHQyLCB0MzsKKwl1MzIgcmFtcHRyID0gU0lTVVNCX1BDSV9NRU1CQVNFOworCisJcmV0ID0gR0VUSVJFRyhTSVNTUiwgMHgzYSwgJnJhbXR5cGUpOworCXJhbXR5cGUgJj0gMzsKKworCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDEzLCAweDAwKTsKKworCWlmIChyYW10eXBlIDw9IDEpIHsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MTQsIDB4MTIpOworCQlyZXQgfD0gU0VUSVJFR0FORChTSVNTUiwgMHgxNSwgMHhlZik7CisJfSBlbHNlIHsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MTQsIDB4MDIpOworCX0KKworCXJldCB8PSBzaXN1c2JfdHJpZ2dlcnNyMTYoc2lzdXNiLCByYW10eXBlKTsKKwlyZXQgfD0gV1JJVEVMKHJhbXB0ciArICAwLCAweDAxMjM0NTY3KTsKKwlyZXQgfD0gV1JJVEVMKHJhbXB0ciArICA0LCAweDQ1Njc4OWFiKTsKKwlyZXQgfD0gV1JJVEVMKHJhbXB0ciArICA4LCAweDg5YWJjZGVmKTsKKwlyZXQgfD0gV1JJVEVMKHJhbXB0ciArIDEyLCAweGNkZWYwMTIzKTsKKwlyZXQgfD0gV1JJVEVMKHJhbXB0ciArIDE2LCAweDU1NTU1NTU1KTsKKwlyZXQgfD0gV1JJVEVMKHJhbXB0ciArIDIwLCAweDU1NTU1NTU1KTsKKwlyZXQgfD0gV1JJVEVMKHJhbXB0ciArIDI0LCAweGZmZmZmZmZmKTsKKwlyZXQgfD0gV1JJVEVMKHJhbXB0ciArIDI4LCAweGZmZmZmZmZmKTsKKwlyZXQgfD0gUkVBREwocmFtcHRyICsgIDAsICZ0MCk7CisJcmV0IHw9IFJFQURMKHJhbXB0ciArICA0LCAmdDEpOworCXJldCB8PSBSRUFETChyYW1wdHIgKyAgOCwgJnQyKTsKKwlyZXQgfD0gUkVBREwocmFtcHRyICsgMTIsICZ0Myk7CisKKwlpZiAocmFtdHlwZSA8PSAxKSB7CisKKwkJKmNoYWIgPSAwOyAqYncgPSA2NDsKKworCQlpZiAoKHQzICE9IDB4Y2RlZjAxMjMpIHx8ICh0MiAhPSAweDg5YWJjZGVmKSkgeworCQkJaWYgKCh0MSA9PSAweDQ1Njc4OWFiKSAmJiAodDAgPT0gMHgwMTIzNDU2NykpIHsKKwkJCQkqY2hhYiA9IDA7ICpidyA9IDY0OworCQkJCXJldCB8PSBTRVRJUkVHQU5EKFNJU1NSLCAweDE0LCAweGZkKTsKKwkJCX0KKwkJfQorCQlpZiAoKHQxICE9IDB4NDU2Nzg5YWIpIHx8ICh0MCAhPSAweDAxMjM0NTY3KSkgeworCQkJKmNoYWIgPSAxOyAqYncgPSA2NDsKKwkJCXJldCB8PSBTRVRJUkVHQU5ET1IoU0lTU1IsIDB4MTQsIDB4ZmMsMHgwMSk7CisKKwkJCXJldCB8PSBzaXN1c2JfdHJpZ2dlcnNyMTYoc2lzdXNiLCByYW10eXBlKTsKKwkJCXJldCB8PSBXUklURUwocmFtcHRyICsgIDAsIDB4ODlhYmNkZWYpOworCQkJcmV0IHw9IFdSSVRFTChyYW1wdHIgKyAgNCwgMHhjZGVmMDEyMyk7CisJCQlyZXQgfD0gV1JJVEVMKHJhbXB0ciArICA4LCAweDU1NTU1NTU1KTsKKwkJCXJldCB8PSBXUklURUwocmFtcHRyICsgMTIsIDB4NTU1NTU1NTUpOworCQkJcmV0IHw9IFdSSVRFTChyYW1wdHIgKyAxNiwgMHhhYWFhYWFhYSk7CisJCQlyZXQgfD0gV1JJVEVMKHJhbXB0ciArIDIwLCAweGFhYWFhYWFhKTsKKwkJCXJldCB8PSBSRUFETChyYW1wdHIgKyAgNCwgJnQxKTsKKworCQkJaWYgKHQxICE9IDB4Y2RlZjAxMjMpIHsKKwkJCQkqYncgPSAzMjsKKwkJCQlyZXQgfD0gU0VUSVJFR09SKFNJU1NSLCAweDE1LCAweDEwKTsKKwkJCX0KKwkJfQorCisJfSBlbHNlIHsKKworCQkqY2hhYiA9IDA7ICpidyA9IDY0OwkvKiBkZWZhdWx0OiBjaGEsIGJ3ID0gNjQgKi8KKworCQlkb25lID0gMDsKKworCQlpZiAodDEgPT0gMHg0NTY3ODlhYikgeworCQkJaWYgKHQwID09IDB4MDEyMzQ1NjcpIHsKKwkJCQkqY2hhYiA9IDA7ICpidyA9IDY0OworCQkJCWRvbmUgPSAxOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKHQwID09IDB4MDEyMzQ1NjcpIHsKKwkJCQkqY2hhYiA9IDA7ICpidyA9IDMyOworCQkJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDE0LCAweDAwKTsKKwkJCQlkb25lID0gMTsKKwkJCX0KKwkJfQorCisJCWlmICghZG9uZSkgeworCQkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MTQsIDB4MDMpOworCQkJcmV0IHw9IHNpc3VzYl90cmlnZ2Vyc3IxNihzaXN1c2IsIHJhbXR5cGUpOworCisJCQlyZXQgfD0gV1JJVEVMKHJhbXB0ciArICAwLCAweDAxMjM0NTY3KTsKKwkJCXJldCB8PSBXUklURUwocmFtcHRyICsgIDQsIDB4NDU2Nzg5YWIpOworCQkJcmV0IHw9IFdSSVRFTChyYW1wdHIgKyAgOCwgMHg4OWFiY2RlZik7CisJCQlyZXQgfD0gV1JJVEVMKHJhbXB0ciArIDEyLCAweGNkZWYwMTIzKTsKKwkJCXJldCB8PSBXUklURUwocmFtcHRyICsgMTYsIDB4NTU1NTU1NTUpOworCQkJcmV0IHw9IFdSSVRFTChyYW1wdHIgKyAyMCwgMHg1NTU1NTU1NSk7CisJCQlyZXQgfD0gV1JJVEVMKHJhbXB0ciArIDI0LCAweGZmZmZmZmZmKTsKKwkJCXJldCB8PSBXUklURUwocmFtcHRyICsgMjgsIDB4ZmZmZmZmZmYpOworCQkJcmV0IHw9IFJFQURMKHJhbXB0ciArICAwLCAmdDApOworCQkJcmV0IHw9IFJFQURMKHJhbXB0ciArICA0LCAmdDEpOworCisJCQlpZiAodDEgPT0gMHg0NTY3ODlhYikgeworCQkJCWlmICh0MCA9PSAweDAxMjM0NTY3KSB7CisJCQkJCSpjaGFiID0gMTsgKmJ3ID0gNjQ7CisJCQkJCXJldHVybiByZXQ7CisJCQkJfSAvKiBlbHNlIGVycm9yICovCisJCQl9IGVsc2UgeworCQkJCWlmICh0MCA9PSAweDAxMjM0NTY3KSB7CisJCQkJCSpjaGFiID0gMTsgKmJ3ID0gMzI7CisJCQkJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDE0LCAweDAxKTsKKwkJCQl9IC8qIGVsc2UgZXJyb3IgKi8KKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitzaXN1c2JfdmVyaWZ5X21jbGsoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiKQoreworCWludCByZXQgPSAwOworCXUzMiByYW1wdHIgPSBTSVNVU0JfUENJX01FTUJBU0U7CisJdTggdG1wMSwgdG1wMiwgaSwgajsKKworCXJldCB8PSBXUklURUIocmFtcHRyLCAweGFhKTsKKwlyZXQgfD0gV1JJVEVCKHJhbXB0ciArIDE2LCAweDU1KTsKKwlyZXQgfD0gUkVBREIocmFtcHRyLCAmdG1wMSk7CisJcmV0IHw9IFJFQURCKHJhbXB0ciArIDE2LCAmdG1wMik7CisJaWYgKCh0bXAxICE9IDB4YWEpIHx8ICh0bXAyICE9IDB4NTUpKSB7CisJCWZvciAoaSA9IDAsIGogPSAxNjsgaSA8IDI7IGkrKywgaiArPSAxNikgeworCQkJcmV0IHw9IEdFVElSRUcoU0lTU1IsIDB4MjEsICZ0bXAxKTsKKwkJCXJldCB8PSBTRVRJUkVHQU5EKFNJU1NSLCAweDIxLCAodG1wMSAmIDB4ZmIpKTsKKwkJCXJldCB8PSBTRVRJUkVHT1IoU0lTU1IsIDB4M2MsIDB4MDEpOyAgLyogbm90IG9uIDMzMCAqLworCQkJcmV0IHw9IFNFVElSRUdBTkQoU0lTU1IsIDB4M2MsIDB4ZmUpOyAvKiBub3Qgb24gMzMwICovCisJCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgyMSwgdG1wMSk7CisJCQlyZXQgfD0gV1JJVEVCKHJhbXB0ciArIDE2ICsgaiwgaik7CisJCQlyZXQgfD0gUkVBREIocmFtcHRyICsgMTYgKyBqLCAmdG1wMSk7CisJCQlpZiAodG1wMSA9PSBqKSB7CisJCQkJcmV0IHw9IFdSSVRFQihyYW1wdHIgKyBqLCBqKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitzaXN1c2Jfc2V0X3Jhbmsoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgKmlyZXQsIGludCBpbmRleCwKKwkJCXU4IHJhbmtubywgdTggY2hhYiwgY29uc3QgdTggZHJhbXR5cGVbXVs1XSwKKwkJCWludCBidykKK3sKKwlpbnQgcmV0ID0gMCwgcmFua3NpemU7CisJdTggdG1wOworCisJKmlyZXQgPSAwOworCisJaWYgKChyYW5rbm8gPT0gMikgJiYgKGRyYW10eXBlW2luZGV4XVswXSA9PSAyKSkKKwkJcmV0dXJuIHJldDsKKworCXJhbmtzaXplID0gZHJhbXR5cGVbaW5kZXhdWzNdIC8gMiAqIGJ3IC8gMzI7CisKKwlpZiAoKHJhbmtzaXplICogcmFua25vKSA+IDEyOCkKKwkJcmV0dXJuIHJldDsKKworCXRtcCA9IDA7CisJd2hpbGUgKChyYW5rc2l6ZSA+Pj0gMSkgPiAwKSB0bXAgKz0gMHgxMDsKKwl0bXAgfD0gKChyYW5rbm8gLSAxKSA8PCAyKTsKKwl0bXAgfD0gKChidyAvIDY0KSAmIDB4MDIpOworCXRtcCB8PSAoY2hhYiAmIDB4MDEpOworCisJcmV0ID0gU0VUSVJFRyhTSVNTUiwgMHgxNCwgdG1wKTsKKwlyZXQgfD0gc2lzdXNiX3RyaWdnZXJzcjE2KHNpc3VzYiwgMCk7IC8qIHNpYyEgKi8KKworCSppcmV0ID0gMTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl9jaGVja19yYmMoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgKmlyZXQsIHUzMiBpbmMsIGludCB0ZXN0bikKK3sKKwlpbnQgcmV0ID0gMCwgaTsKKwl1MzIgaiwgdG1wOworCisJKmlyZXQgPSAwOworCisJZm9yIChpID0gMCwgaiA9IDA7IGkgPCB0ZXN0bjsgaSsrKSB7CisJCXJldCB8PSBXUklURUwoc2lzdXNiLT52cmFtYmFzZSArIGosIGopOworCQlqICs9IGluYzsKKwl9CisKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IHRlc3RuOyBpKyspIHsKKwkJcmV0IHw9IFJFQURMKHNpc3VzYi0+dnJhbWJhc2UgKyBqLCAmdG1wKTsKKwkJaWYgKHRtcCAhPSBqKSByZXR1cm4gcmV0OworCQlqICs9IGluYzsKKwl9CisKKwkqaXJldCA9IDE7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorc2lzdXNiX2NoZWNrX3JhbmtzKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50ICppcmV0LCBpbnQgcmFua25vLAorCQkJCQlpbnQgaWR4LCBpbnQgYncsIGNvbnN0IHU4IHJ0eXBlW11bNV0pCit7CisJaW50IHJldCA9IDAsIGksIGkycmV0OworCXUzMiBpbmM7CisKKwkqaXJldCA9IDA7CisKKwlmb3IgKGkgPSByYW5rbm87IGkgPj0gMTsgaS0tKSB7CisJCWluYyA9IDEgPDwgKHJ0eXBlW2lkeF1bMl0gKworCQkJICAgIHJ0eXBlW2lkeF1bMV0gKworCQkJICAgIHJ0eXBlW2lkeF1bMF0gKworCQkJICAgIGJ3IC8gNjQgKyBpKTsKKwkJcmV0IHw9IHNpc3VzYl9jaGVja19yYmMoc2lzdXNiLCAmaTJyZXQsIGluYywgMik7CisJCWlmICghaTJyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCWluYyA9IDEgPDwgKHJ0eXBlW2lkeF1bMl0gKyBidyAvIDY0ICsgMik7CisJcmV0IHw9IHNpc3VzYl9jaGVja19yYmMoc2lzdXNiLCAmaTJyZXQsIGluYywgNCk7CisJaWYgKCFpMnJldCkKKwkJcmV0dXJuIHJldDsKKworCWluYyA9IDEgPDwgKDEwICsgYncgLyA2NCk7CisJcmV0IHw9IHNpc3VzYl9jaGVja19yYmMoc2lzdXNiLCAmaTJyZXQsIGluYywgMik7CisJaWYgKCFpMnJldCkKKwkJcmV0dXJuIHJldDsKKworCSppcmV0ID0gMTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitzaXN1c2JfZ2V0X3NkcmFtX3NpemUoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgKmlyZXQsIGludCBidywKKwkJCQkJCQkJaW50IGNoYWIpCit7CisJaW50IHJldCA9IDAsIGkycmV0ID0gMCwgaSwgajsKKwlzdGF0aWMgY29uc3QgdTggc2RyYW10eXBlWzEzXVs1XSA9IHsKKwkJeyAyLCAxMiwgOSwgNjQsIDB4MzUgfSwKKwkJeyAxLCAxMywgOSwgNjQsIDB4NDQgfSwKKwkJeyAyLCAxMiwgOCwgMzIsIDB4MzEgfSwKKwkJeyAyLCAxMSwgOSwgMzIsIDB4MjUgfSwKKwkJeyAxLCAxMiwgOSwgMzIsIDB4MzQgfSwKKwkJeyAxLCAxMywgOCwgMzIsIDB4NDAgfSwKKwkJeyAyLCAxMSwgOCwgMTYsIDB4MjEgfSwKKwkJeyAxLCAxMiwgOCwgMTYsIDB4MzAgfSwKKwkJeyAxLCAxMSwgOSwgMTYsIDB4MjQgfSwKKwkJeyAxLCAxMSwgOCwgIDgsIDB4MjAgfSwKKwkJeyAyLCAgOSwgOCwgIDQsIDB4MDEgfSwKKwkJeyAxLCAxMCwgOCwgIDQsIDB4MTAgfSwKKwkJeyAxLCAgOSwgOCwgIDIsIDB4MDAgfQorCX07CisKKwkqaXJldCA9IDE7IC8qIGVycm9yICovCisKKwlmb3IgKGkgPSAwOyBpIDwgMTM7IGkrKykgeworCQlyZXQgfD0gU0VUSVJFR0FORE9SKFNJU1NSLCAweDEzLCAweDgwLCBzZHJhbXR5cGVbaV1bNF0pOworCQlmb3IgKGogPSAyOyBqID4gMDsgai0tKSB7CisJCQlyZXQgfD0gc2lzdXNiX3NldF9yYW5rKHNpc3VzYiwgJmkycmV0LCBpLCBqLAorCQkJCQkJY2hhYiwgc2RyYW10eXBlLCBidyk7CisJCQlpZiAoIWkycmV0KQorCQkJCWNvbnRpbnVlOworCisJCQlyZXQgfD0gc2lzdXNiX2NoZWNrX3JhbmtzKHNpc3VzYiwgJmkycmV0LCBqLCBpLAorCQkJCQkJYncsIHNkcmFtdHlwZSk7CisJCQlpZiAoaTJyZXQpIHsKKwkJCQkqaXJldCA9IDA7CS8qIHJhbSBzaXplIGZvdW5kICovCisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl9zZXR1cF9zY3JlZW4oc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgY2xyYWxsLCBpbnQgZHJ3ZnIpCit7CisJaW50IHJldCA9IDA7CisJdTMyIGFkZHJlc3M7CisJaW50IGksIGxlbmd0aCwgbW9kZXgsIG1vZGV5LCBicHA7CisKKwltb2RleCA9IDY0MDsgbW9kZXkgPSA0ODA7IGJwcCA9IDI7CisKKwlhZGRyZXNzID0gc2lzdXNiLT52cmFtYmFzZTsJLyogQ2xlYXIgdmlkZW8gcmFtICovCisKKwlpZiAoY2xyYWxsKQorCQlsZW5ndGggPSBzaXN1c2ItPnZyYW1zaXplOworCWVsc2UKKwkJbGVuZ3RoID0gbW9kZXggKiBicHAgKiBtb2RleTsKKworCXJldCA9IHNpc3VzYl9jbGVhcl92cmFtKHNpc3VzYiwgYWRkcmVzcywgbGVuZ3RoKTsKKworCWlmICghcmV0ICYmIGRyd2ZyKSB7CisJCWZvciAoaSA9IDA7IGkgPCBtb2RleDsgaSsrKSB7CisJCQlhZGRyZXNzID0gc2lzdXNiLT52cmFtYmFzZSArIChpICogYnBwKTsKKwkJCXJldCB8PSBzaXN1c2Jfd3JpdGVfbWVtaW9fd29yZChzaXN1c2IsIFNJU1VTQl9UWVBFX01FTSwKKwkJCQkJCQlhZGRyZXNzLCAweGYxMDApOworCQkJYWRkcmVzcyArPSAobW9kZXggKiAobW9kZXktMSkgKiBicHApOworCQkJcmV0IHw9IHNpc3VzYl93cml0ZV9tZW1pb193b3JkKHNpc3VzYiwgU0lTVVNCX1RZUEVfTUVNLAorCQkJCQkJCWFkZHJlc3MsIDB4ZjEwMCk7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IG1vZGV5OyBpKyspIHsKKwkJCWFkZHJlc3MgPSBzaXN1c2ItPnZyYW1iYXNlICsgKChpICogbW9kZXgpICogYnBwKTsKKwkJCXJldCB8PSBzaXN1c2Jfd3JpdGVfbWVtaW9fd29yZChzaXN1c2IsIFNJU1VTQl9UWVBFX01FTSwKKwkJCQkJCQlhZGRyZXNzLCAweGYxMDApOworCQkJYWRkcmVzcyArPSAoKG1vZGV4IC0gMSkgKiBicHApOworCQkJcmV0IHw9IHNpc3VzYl93cml0ZV9tZW1pb193b3JkKHNpc3VzYiwgU0lTVVNCX1RZUEVfTUVNLAorCQkJCQkJCWFkZHJlc3MsIDB4ZjEwMCk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitzaXN1c2Jfc2V0X2RlZmF1bHRfbW9kZShzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCB0b3VjaGVuZ2luZXMpCit7CisJaW50IHJldCA9IDAsIGksIGosIG1vZGV4LCBtb2RleSwgYnBwLCBkdTsKKwl1OCBzcjMxLCBjcjYzLCB0bXA4OworCXN0YXRpYyBjb25zdCBjaGFyIGF0dHJkYXRhW10gPSB7CisJCTB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywKKwkJMHgwOCwweDA5LDB4MGEsMHgwYiwweDBjLDB4MGQsMHgwZSwweDBmLAorCQkweDAxLDB4MDAsMHgwMCwweDAwCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciBjcnRjcmRhdGFbXSA9IHsKKwkJMHg1ZiwweDRmLDB4NTAsMHg4MiwweDU0LDB4ODAsMHgwYiwweDNlLAorCQkweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJCTB4ZWEsMHg4YywweGRmLDB4MjgsMHg0MCwweGU3LDB4MDQsMHhhMywKKwkJMHhmZgorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgZ3JjZGF0YVtdID0geworCQkweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4MGYsCisJCTB4ZmYKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyIGNydGNkYXRhW10gPSB7CisJCTB4NWYsMHg0ZiwweDRmLDB4ODMsMHg1NSwweDgxLDB4MGIsMHgzZSwKKwkJMHhlOSwweDhiLDB4ZGYsMHhlOCwweDBjLDB4MDAsMHgwMCwweDA1LAorCQkweDAwCisJfTsKKworCW1vZGV4ID0gNjQwOyBtb2RleSA9IDQ4MDsgYnBwID0gMjsKKworCUdFVElSRUcoU0lTU1IsIDB4MzEsICZzcjMxKTsKKwlHRVRJUkVHKFNJU0NSLCAweDYzLCAmY3I2Myk7CisJU0VUSVJFR09SKFNJU1NSLCAweDAxLCAweDIwKTsKKwlTRVRJUkVHKFNJU0NSLCAweDYzLCBjcjYzICYgMHhiZik7CisJU0VUSVJFR09SKFNJU0NSLCAweDE3LCAweDgwKTsKKwlTRVRJUkVHT1IoU0lTU1IsIDB4MWYsIDB4MDQpOworCVNFVElSRUdBTkQoU0lTU1IsIDB4MDcsIDB4ZmIpOworCVNFVElSRUcoU0lTU1IsIDB4MDAsIDB4MDMpOwkvKiBzZXEgKi8KKwlTRVRJUkVHKFNJU1NSLCAweDAxLCAweDIxKTsKKwlTRVRJUkVHKFNJU1NSLCAweDAyLCAweDBmKTsKKwlTRVRJUkVHKFNJU1NSLCAweDAzLCAweDAwKTsKKwlTRVRJUkVHKFNJU1NSLCAweDA0LCAweDBlKTsKKwlTRVRSRUcoU0lTTUlTQ1csIDB4MjMpOwkJLyogbWlzYyAqLworCWZvciAoaSA9IDA7IGkgPD0gMHgxODsgaSsrKSB7CS8qIGNydGMgKi8KKwkJU0VUSVJFRyhTSVNDUiwgaSwgY3J0Y3JkYXRhW2ldKTsKKwl9CisJZm9yIChpID0gMDsgaSA8PSAweDEzOyBpKyspIHsJLyogYXR0ICovCisJCUdFVFJFRyhTSVNJTlBTVEFULCAmdG1wOCk7CisJCVNFVFJFRyhTSVNBUiwgaSk7CisJCVNFVFJFRyhTSVNBUiwgYXR0cmRhdGFbaV0pOworCX0KKwlHRVRSRUcoU0lTSU5QU1RBVCwgJnRtcDgpOworCVNFVFJFRyhTSVNBUiwgMHgxNCk7CisJU0VUUkVHKFNJU0FSLCAweDAwKTsKKwlHRVRSRUcoU0lTSU5QU1RBVCwgJnRtcDgpOworCVNFVFJFRyhTSVNBUiwgMHgyMCk7CisJR0VUUkVHKFNJU0lOUFNUQVQsICZ0bXA4KTsKKwlmb3IgKGkgPSAwOyBpIDw9IDB4MDg7IGkrKykgewkvKiBncmMgKi8KKwkJU0VUSVJFRyhTSVNHUiwgaSwgZ3JjZGF0YVtpXSk7CisJfQorCVNFVElSRUdBTkQoU0lTR1IsIDB4MDUsIDB4YmYpOworCWZvciAoaSA9IDB4MEE7IGkgPD0gMHgwRTsgaSsrKSB7CS8qIGNsciBleHQgKi8KKwkJU0VUSVJFRyhTSVNTUiwgaSwgMHgwMCk7CisJfQorCVNFVElSRUdBTkQoU0lTU1IsIDB4MzcsIDB4ZmUpOworCVNFVFJFRyhTSVNNSVNDVywgMHhlZik7CQkvKiBzeW5jICovCisJU0VUSVJFRyhTSVNDUiwgMHgxMSwgMHgwMCk7CS8qIGNydGMgKi8KKwlmb3IgKGogPSAweDAwLCBpID0gMDsgaSA8PSA3OyBpKyssIGorKykgeworCQlTRVRJUkVHKFNJU0NSLCBqLCBjcnRjZGF0YVtpXSk7CisJfQorCWZvciAoaiA9IDB4MTA7IGkgPD0gMTA7IGkrKywgaisrKSB7CisJCVNFVElSRUcoU0lTQ1IsIGosIGNydGNkYXRhW2ldKTsKKwl9CisJZm9yIChqID0gMHgxNTsgaSA8PSAxMjsgaSsrLCBqKyspIHsKKwkJU0VUSVJFRyhTSVNDUiwgaiwgY3J0Y2RhdGFbaV0pOworCX0KKwlmb3IgKGogPSAweDBBOyBpIDw9IDE1OyBpKyssIGorKykgeworCQlTRVRJUkVHKFNJU1NSLCBqLCBjcnRjZGF0YVtpXSk7CisJfQorCVNFVElSRUcoU0lTU1IsIDB4MEUsIChjcnRjZGF0YVsxNl0gJiAweEUwKSk7CisJU0VUSVJFR0FORE9SKFNJU0NSLCAweDA5LCAweDVmLCAoKGNydGNkYXRhWzE2XSAmIDB4MDEpIDw8IDUpKTsKKwlTRVRJUkVHKFNJU0NSLCAweDE0LCAweDRmKTsKKwlkdSA9IChtb2RleCAvIDE2KSAqIChicHAgKiAyKTsJLyogb2Zmc2V0L3BpdGNoICovCisJaWYgKG1vZGV4ICUgMTYpIGR1ICs9IGJwcDsKKwlTRVRJUkVHQU5ET1IoU0lTU1IsIDB4MGUsIDB4ZjAsICgoZHUgPj4gOCkgJiAweDBmKSk7CisJU0VUSVJFRyhTSVNDUiwgMHgxMywgKGR1ICYgMHhmZikpOworCWR1IDw8PSA1OworCXRtcDggPSBkdSA+PiA4OworCWlmIChkdSAmIDB4ZmYpIHRtcDgrKzsKKwlTRVRJUkVHKFNJU1NSLCAweDEwLCB0bXA4KTsKKwlTRVRJUkVHKFNJU1NSLCAweDMxLCAweDAwKTsJLyogVkNMSyAqLworCVNFVElSRUcoU0lTU1IsIDB4MmIsIDB4MWIpOworCVNFVElSRUcoU0lTU1IsIDB4MmMsIDB4ZTEpOworCVNFVElSRUcoU0lTU1IsIDB4MmQsIDB4MDEpOworCVNFVElSRUdBTkQoU0lTU1IsIDB4M2QsIDB4ZmUpOwkvKiBGSUZPICovCisJU0VUSVJFRyhTSVNTUiwgMHgwOCwgMHhhZSk7CisJU0VUSVJFR0FORChTSVNTUiwgMHgwOSwgMHhmMCk7CisJU0VUSVJFRyhTSVNTUiwgMHgwOCwgMHgzNCk7CisJU0VUSVJFR09SKFNJU1NSLCAweDNkLCAweDAxKTsKKwlTRVRJUkVHQU5EKFNJU1NSLCAweDFmLCAweDNmKTsJLyogbW9kZSByZWdzICovCisJU0VUSVJFR0FORE9SKFNJU1NSLCAweDA2LCAweGMwLCAweDBhKTsKKwlTRVRJUkVHKFNJU0NSLCAweDE5LCAweDAwKTsKKwlTRVRJUkVHQU5EKFNJU0NSLCAweDFhLCAweGZjKTsKKwlTRVRJUkVHQU5EKFNJU1NSLCAweDBmLCAweGI3KTsKKwlTRVRJUkVHQU5EKFNJU1NSLCAweDMxLCAweGZiKTsKKwlTRVRJUkVHQU5ET1IoU0lTU1IsIDB4MjEsIDB4MWYsIDB4YTApOworCVNFVElSRUdBTkQoU0lTU1IsIDB4MzIsIDB4ZjMpOworCVNFVElSRUdBTkRPUihTSVNTUiwgMHgwNywgMHhmOCwgMHgwMyk7CisJU0VUSVJFRyhTSVNDUiwgMHg1MiwgMHg2Yyk7CisKKwlTRVRJUkVHKFNJU0NSLCAweDBkLCAweDAwKTsJLyogYWRqdXN0IGZyYW1lICovCisJU0VUSVJFRyhTSVNDUiwgMHgwYywgMHgwMCk7CisJU0VUSVJFRyhTSVNTUiwgMHgwZCwgMHgwMCk7CisJU0VUSVJFR0FORChTSVNTUiwgMHgzNywgMHhmZSk7CisKKwlTRVRJUkVHKFNJU0NSLCAweDMyLCAweDIwKTsKKwlTRVRJUkVHQU5EKFNJU1NSLCAweDAxLCAweGRmKTsJLyogZW5hYmxlIGRpc3BsYXkgKi8KKwlTRVRJUkVHKFNJU0NSLCAweDYzLCAoY3I2MyAmIDB4YmYpKTsKKwlTRVRJUkVHKFNJU1NSLCAweDMxLCAoc3IzMSAmIDB4ZmIpKTsKKworCWlmICh0b3VjaGVuZ2luZXMpIHsKKwkJU0VUSVJFRyhTSVNTUiwgMHgyMCwgMHhhMSk7CS8qIGVuYWJsZSBlbmdpbmVzICovCisJCVNFVElSRUdPUihTSVNTUiwgMHgxZSwgMHg1YSk7CisKKwkJU0VUSVJFRyhTSVNTUiwgMHgyNiwgMHgwMSk7CS8qIGRpc2FibGUgY21kcXVldWUgKi8KKwkJU0VUSVJFRyhTSVNTUiwgMHgyNywgMHgxZik7CisJCVNFVElSRUcoU0lTU1IsIDB4MjYsIDB4MDApOworCX0KKworCVNFVElSRUcoU0lTQ1IsIDB4MzQsIDB4NDQpOyAgCS8qIHdlIGp1c3Qgc2V0IHN0ZCBtb2RlICM0NCAqLworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorc2lzdXNiX2luaXRfZ2Z4Y29yZShzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IpCit7CisJaW50IHJldCA9IDAsIGksIGosIGJ3LCBjaGFiLCBpcmV0LCByZXRyeSA9IDM7CisJdTggdG1wOCwgcmFtdHlwZTsKKwl1MzIgdG1wMzI7CisJc3RhdGljIGNvbnN0IGNoYXIgbWNsa3RhYmxlW10gPSB7CisJCTB4M2IsIDB4MjIsIDB4MDEsIDE0MywKKwkJMHgzYiwgMHgyMiwgMHgwMSwgMTQzLAorCQkweDNiLCAweDIyLCAweDAxLCAxNDMsCisJCTB4M2IsIDB4MjIsIDB4MDEsIDE0MworCX07CisJc3RhdGljIGNvbnN0IGNoYXIgZWNsa3RhYmxlW10gPSB7CisJCTB4M2IsIDB4MjIsIDB4MDEsIDE0MywKKwkJMHgzYiwgMHgyMiwgMHgwMSwgMTQzLAorCQkweDNiLCAweDIyLCAweDAxLCAxNDMsCisJCTB4M2IsIDB4MjIsIDB4MDEsIDE0MworCX07CisJc3RhdGljIGNvbnN0IGNoYXIgcmFtdHlwZXRhYmxlMVtdID0geworCQkweDAwLCAweDA0LCAweDYwLCAweDYwLAorCQkweDBmLCAweDBmLCAweDFmLCAweDFmLAorCQkweGJhLCAweGJhLCAweGJhLCAweGJhLAorCQkweGE5LCAweGE5LCAweGFjLCAweGFjLAorCQkweGEwLCAweGEwLCAweGEwLCAweGE4LAorCQkweDAwLCAweDAwLCAweDAyLCAweDAyLAorCQkweDMwLCAweDMwLCAweDQwLCAweDQwCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciByYW10eXBldGFibGUyW10gPSB7CisJCTB4NzcsIDB4NzcsIDB4NDQsIDB4NDQsCisJCTB4NzcsIDB4NzcsIDB4NDQsIDB4NDQsCisJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCTB4NWIsIDB4NWIsIDB4YWIsIDB4YWIsCisJCTB4MDAsIDB4MDAsIDB4ZjAsIDB4ZjgKKwl9OworCisJd2hpbGUgKHJldHJ5LS0pIHsKKworCQkvKiBFbmFibGUgVkdBICovCisJCXJldCA9IEdFVFJFRyhTSVNWR0FFTiwgJnRtcDgpOworCQlyZXQgfD0gU0VUUkVHKFNJU1ZHQUVOLCAodG1wOCB8IDB4MDEpKTsKKworCQkvKiBFbmFibGUgR1BVIGFjY2VzcyB0byBWUkFNICovCisJCXJldCB8PSBHRVRSRUcoU0lTTUlTQ1IsICZ0bXA4KTsKKwkJcmV0IHw9IFNFVFJFRyhTSVNNSVNDVywgKHRtcDggfCAweDAxKSk7CisKKwkJaWYgKHJldCkgY29udGludWU7CisKKwkJLyogUmVzZXQgcmVnaXN0ZXJzICovCisJCXJldCB8PSBTRVRJUkVHQU5EKFNJU0NSLCAweDViLCAweGRmKTsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MDUsIDB4ODYpOworCQlyZXQgfD0gU0VUSVJFR09SKFNJU1NSLCAweDIwLCAweDAxKTsKKworCQlyZXQgfD0gU0VUUkVHKFNJU01JU0NXLCAweDY3KTsKKworCQlmb3IgKGkgPSAweDA2OyBpIDw9IDB4MWY7IGkrKykgeworCQkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIGksIDB4MDApOworCQl9CisJCWZvciAoaSA9IDB4MjE7IGkgPD0gMHgyNzsgaSsrKSB7CisJCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgaSwgMHgwMCk7CisJCX0KKwkJZm9yIChpID0gMHgzMTsgaSA8PSAweDNkOyBpKyspIHsKKwkJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCBpLCAweDAwKTsKKwkJfQorCQlmb3IgKGkgPSAweDEyOyBpIDw9IDB4MWI7IGkrKykgeworCQkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIGksIDB4MDApOworCQl9CisJCWZvciAoaSA9IDB4Nzk7IGkgPD0gMHg3YzsgaSsrKSB7CisJCQlyZXQgfD0gU0VUSVJFRyhTSVNDUiwgaSwgMHgwMCk7CisJCX0KKworCQlpZiAocmV0KSBjb250aW51ZTsKKworCQlyZXQgfD0gU0VUSVJFRyhTSVNDUiwgMHg2MywgMHg4MCk7CisKKwkJcmV0IHw9IEdFVElSRUcoU0lTU1IsIDB4M2EsICZyYW10eXBlKTsKKwkJcmFtdHlwZSAmPSAweDAzOworCisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDI4LCBtY2xrdGFibGVbcmFtdHlwZSAqIDRdKTsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MjksIG1jbGt0YWJsZVsocmFtdHlwZSAqIDQpICsgMV0pOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgyYSwgbWNsa3RhYmxlWyhyYW10eXBlICogNCkgKyAyXSk7CisKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MmUsIGVjbGt0YWJsZVtyYW10eXBlICogNF0pOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgyZiwgZWNsa3RhYmxlWyhyYW10eXBlICogNCkgKyAxXSk7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDMwLCBlY2xrdGFibGVbKHJhbXR5cGUgKiA0KSArIDJdKTsKKworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgwNywgMHgxOCk7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDExLCAweDBmKTsKKworCQlpZiAocmV0KSBjb250aW51ZTsKKworCQlmb3IgKGkgPSAweDE1LCBqID0gMDsgaSA8PSAweDFiOyBpKyssIGorKykgeworCQkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIGksIHJhbXR5cGV0YWJsZTFbKGoqNCkgKyByYW10eXBlXSk7CisJCX0KKwkJZm9yIChpID0gMHg0MCwgaiA9IDA7IGkgPD0gMHg0NDsgaSsrLCBqKyspIHsKKwkJCXJldCB8PSBTRVRJUkVHKFNJU0NSLCBpLCByYW10eXBldGFibGUyWyhqKjQpICsgcmFtdHlwZV0pOworCQl9CisKKwkJcmV0IHw9IFNFVElSRUcoU0lTQ1IsIDB4NDksIDB4YWEpOworCisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDFmLCAweDAwKTsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MjAsIDB4YTApOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgyMywgMHhmNik7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDI0LCAweDBkKTsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MjUsIDB4MzMpOworCisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDExLCAweDBmKTsKKworCQlyZXQgfD0gU0VUSVJFR09SKFNJU1BBUlQxLCAweDJmLCAweDAxKTsKKworCQlyZXQgfD0gU0VUSVJFR0FORChTSVNDQVAsIDB4M2YsIDB4ZWYpOworCisJCWlmIChyZXQpIGNvbnRpbnVlOworCisJCXJldCB8PSBTRVRJUkVHKFNJU1BBUlQxLCAweDAwLCAweDAwKTsKKworCQlyZXQgfD0gR0VUSVJFRyhTSVNTUiwgMHgxMywgJnRtcDgpOworCQl0bXA4ID4+PSA0OworCisJCXJldCB8PSBTRVRJUkVHKFNJU1BBUlQxLCAweDAyLCAweDAwKTsKKwkJcmV0IHw9IFNFVElSRUcoU0lTUEFSVDEsIDB4MmUsIDB4MDgpOworCisJCXJldCB8PSBzaXN1c2JfcmVhZF9wY2lfY29uZmlnKHNpc3VzYiwgMHg1MCwgJnRtcDMyKTsKKwkJdG1wMzIgJj0gMHgwMGYwMDAwMDsKKwkJdG1wOCA9ICh0bXAzMiA9PSAweDEwMDAwMCkgPyAweDMzIDogMHgwMzsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MjUsIHRtcDgpOworCQl0bXA4ID0gKHRtcDMyID09IDB4MTAwMDAwKSA/IDB4YWEgOiAweDg4OworCQlyZXQgfD0gU0VUSVJFRyhTSVNDUiwgMHg0OSwgdG1wOCk7CisKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MjcsIDB4MWYpOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgzMSwgMHgwMCk7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDMyLCAweDExKTsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MzMsIDB4MDApOworCisJCWlmIChyZXQpIGNvbnRpbnVlOworCisJCXJldCB8PSBTRVRJUkVHKFNJU0NSLCAweDgzLCAweDAwKTsKKworCQlyZXQgfD0gc2lzdXNiX3NldF9kZWZhdWx0X21vZGUoc2lzdXNiLCAwKTsKKworCQlyZXQgfD0gU0VUSVJFR0FORChTSVNTUiwgMHgyMSwgMHhkZik7CisJCXJldCB8PSBTRVRJUkVHT1IoU0lTU1IsIDB4MDEsIDB4MjApOworCQlyZXQgfD0gU0VUSVJFR09SKFNJU1NSLCAweDE2LCAweDBmKTsKKworCQlyZXQgfD0gc2lzdXNiX3RyaWdnZXJzcjE2KHNpc3VzYiwgcmFtdHlwZSk7CisKKwkJLyogRGlzYWJsZSByZWZyZXNoICovCisJCXJldCB8PSBTRVRJUkVHQU5EKFNJU1NSLCAweDE3LCAweGY4KTsKKwkJcmV0IHw9IFNFVElSRUdPUihTSVNTUiwgMHgxOSwgMHgwMyk7CisKKwkJcmV0IHw9IHNpc3VzYl9nZXRidXN3aWR0aChzaXN1c2IsICZidywgJmNoYWIpOworCQlyZXQgfD0gc2lzdXNiX3ZlcmlmeV9tY2xrKHNpc3VzYik7CisKKwkJaWYgKHJhbXR5cGUgPD0gMSkgeworCQkJcmV0IHw9IHNpc3VzYl9nZXRfc2RyYW1fc2l6ZShzaXN1c2IsICZpcmV0LCBidywgY2hhYik7CisJCQlpZiAoaXJldCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAic2lzdXNidmdhWyVkXTogUkFNIHNpemUgIgorCQkJCQkiZGV0ZWN0aW9uIGZhaWxlZCwgIgorCQkJCQkiYXNzdW1pbmcgOE1CIHZpZGVvIFJBTVxuIiwKKwkJCQkJc2lzdXNiLT5taW5vcik7CisJCQkJcmV0IHw9IFNFVElSRUcoU0lTU1IsMHgxNCwweDMxKTsKKwkJCQkvKiBUT0RPICovCisJCQl9CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIgInNpc3VzYnZnYVslZF06IEREUiBSQU0gZGV2aWNlIGZvdW5kLCAiCisJCQkJCSJhc3N1bWluZyA4TUIgdmlkZW8gUkFNXG4iLAorCQkJCQlzaXN1c2ItPm1pbm9yKTsKKwkJCXJldCB8PSBTRVRJUkVHKFNJU1NSLDB4MTQsMHgzMSk7CisJCQkvKiAqKiogVE9ETyAqKiogKi8KKwkJfQorCisJCS8qIEVuYWJsZSByZWZyZXNoICovCisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDE2LCByYW10eXBldGFibGUxWzQgKyByYW10eXBlXSk7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDE3LCByYW10eXBldGFibGUxWzggKyByYW10eXBlXSk7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDE5LCByYW10eXBldGFibGUxWzE2ICsgcmFtdHlwZV0pOworCisJCXJldCB8PSBTRVRJUkVHT1IoU0lTU1IsIDB4MjEsIDB4MjApOworCisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDIyLCAweGZiKTsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MjEsIDB4YTUpOworCisJCWlmIChyZXQgPT0gMCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKyN1bmRlZiBTRVRSRUcKKyN1bmRlZiBHRVRSRUcKKyN1bmRlZiBTRVRJUkVHCisjdW5kZWYgR0VUSVJFRworI3VuZGVmIFNFVElSRUdPUgorI3VuZGVmIFNFVElSRUdBTkQKKyN1bmRlZiBTRVRJUkVHQU5ET1IKKyN1bmRlZiBSRUFETAorI3VuZGVmIFdSSVRFTAorCitzdGF0aWMgdm9pZAorc2lzdXNiX2dldF9yYW1jb25maWcoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiKQoreworCXU4IHRtcDgsIHRtcDgyLCByYW10eXBlOworCWludCBidyA9IDA7CisJY2hhciAqcmFtdHlwZXRleHQxID0gTlVMTDsKKwljb25zdCBjaGFyICpyYW10eXBldGV4dDJbXSA9IHsJIlNEUiBTRFJBTSIsICJTRFIgU0dSQU0iLAorCQkJCQkiRERSIFNEUkFNIiwgIkREUiBTR1JBTSIgfTsKKwlzdGF0aWMgY29uc3QgaW50IGJ1c1NEUls0XSAgPSB7NjQsIDY0LCAxMjgsIDEyOH07CisJc3RhdGljIGNvbnN0IGludCBidXNERFJbNF0gID0gezMyLCAzMiwgIDY0LCAgNjR9OworCXN0YXRpYyBjb25zdCBpbnQgYnVzRERSQVs0XSA9IHs2NCszMiwgNjQrMzIgLCAoNjQrMzIpKjIsICg2NCszMikqMn07CisKKwlzaXN1c2JfZ2V0aWR4cmVnKHNpc3VzYiwgU0lTU1IsIDB4MTQsICZ0bXA4KTsKKwlzaXN1c2JfZ2V0aWR4cmVnKHNpc3VzYiwgU0lTU1IsIDB4MTUsICZ0bXA4Mik7CisJc2lzdXNiX2dldGlkeHJlZyhzaXN1c2IsIFNJU1NSLCAweDNhLCAmcmFtdHlwZSk7CisJc2lzdXNiLT52cmFtc2l6ZSA9ICgxIDw8ICgodG1wOCAmIDB4ZjApID4+IDQpKSAqIDEwMjQgKiAxMDI0OworCXJhbXR5cGUgJj0gMHgwMzsKKwlzd2l0Y2ggKCh0bXA4ID4+IDIpICYgMHgwMykgeworCWNhc2UgMDogcmFtdHlwZXRleHQxID0gIjEgY2gvMSByIjsKKwkJaWYgKHRtcDgyICYgMHgxMCkgeworCQkJYncgPSAzMjsKKwkJfSBlbHNlIHsKKwkJCWJ3ID0gYnVzU0RSWyh0bXA4ICYgMHgwMyldOworCQl9CisJCWJyZWFrOworCWNhc2UgMTogcmFtdHlwZXRleHQxID0gIjEgY2gvMiByIjsKKwkJc2lzdXNiLT52cmFtc2l6ZSA8PD0gMTsKKwkJYncgPSBidXNTRFJbKHRtcDggJiAweDAzKV07CisJCWJyZWFrOworCWNhc2UgMjogcmFtdHlwZXRleHQxID0gImFzeW1tZXJpYyI7CisJCXNpc3VzYi0+dnJhbXNpemUgKz0gc2lzdXNiLT52cmFtc2l6ZS8yOworCQlidyA9IGJ1c0REUkFbKHRtcDggJiAweDAzKV07CisJCWJyZWFrOworCWNhc2UgMzogcmFtdHlwZXRleHQxID0gIjIgY2hhbm5lbCI7CisJCXNpc3VzYi0+dnJhbXNpemUgPDw9IDE7CisJCWJ3ID0gYnVzRERSWyh0bXA4ICYgMHgwMyldOworCQlicmVhazsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJzaXN1c2J2Z2FbJWRdOiAlZE1CICVzICVzLCBidXMgd2lkdGggJWRcbiIsCisJCQlzaXN1c2ItPm1pbm9yLCAoc2lzdXNiLT52cmFtc2l6ZSA+PiAyMCksIHJhbXR5cGV0ZXh0MSwKKwkJCXJhbXR5cGV0ZXh0MltyYW10eXBlXSwgYncpOworfQorCitzdGF0aWMgaW50CitzaXN1c2JfZG9faW5pdF9nZnhkZXZpY2Uoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiKQoreworCXN0cnVjdCBzaXN1c2JfcGFja2V0IHBhY2tldDsKKwlpbnQgcmV0OworCXUzMiB0bXAzMjsKKworCS8qIERvIHNvbWUgbWFnaWMgKi8KKwlwYWNrZXQuaGVhZGVyICA9IDB4MDAxZjsKKwlwYWNrZXQuYWRkcmVzcyA9IDB4MDAwMDAzMjQ7CisJcGFja2V0LmRhdGEgICAgPSAweDAwMDAwMDA0OworCXJldCA9IHNpc3VzYl9zZW5kX2JyaWRnZV9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCwgMCk7CisKKwlwYWNrZXQuaGVhZGVyICA9IDB4MDAxZjsKKwlwYWNrZXQuYWRkcmVzcyA9IDB4MDAwMDAzNjQ7CisJcGFja2V0LmRhdGEgICAgPSAweDAwMDAwMDA0OworCXJldCB8PSBzaXN1c2Jfc2VuZF9icmlkZ2VfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQsIDApOworCisJcGFja2V0LmhlYWRlciAgPSAweDAwMWY7CisJcGFja2V0LmFkZHJlc3MgPSAweDAwMDAwMzg0OworCXBhY2tldC5kYXRhICAgID0gMHgwMDAwMDAwNDsKKwlyZXQgfD0gc2lzdXNiX3NlbmRfYnJpZGdlX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0LCAwKTsKKworCXBhY2tldC5oZWFkZXIgID0gMHgwMDFmOworCXBhY2tldC5hZGRyZXNzID0gMHgwMDAwMDEwMDsKKwlwYWNrZXQuZGF0YSAgICA9IDB4MDAwMDA3MDA7CisJcmV0IHw9IHNpc3VzYl9zZW5kX2JyaWRnZV9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCwgMCk7CisKKwlwYWNrZXQuaGVhZGVyICA9IDB4MDAwZjsKKwlwYWNrZXQuYWRkcmVzcyA9IDB4MDAwMDAwMDQ7CisJcmV0IHw9IHNpc3VzYl9zZW5kX2JyaWRnZV9wYWNrZXQoc2lzdXNiLCA2LCAmcGFja2V0LCAwKTsKKwlwYWNrZXQuZGF0YSB8PSAweDE3OworCXJldCB8PSBzaXN1c2Jfc2VuZF9icmlkZ2VfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQsIDApOworCisJLyogSW5pdCBCQVIgMCAoVlJBTSkgKi8KKwlyZXQgfD0gc2lzdXNiX3JlYWRfcGNpX2NvbmZpZyhzaXN1c2IsIDB4MTAsICZ0bXAzMik7CisJcmV0IHw9IHNpc3VzYl93cml0ZV9wY2lfY29uZmlnKHNpc3VzYiwgMHgxMCwgMHhmZmZmZmZmMCk7CisJcmV0IHw9IHNpc3VzYl9yZWFkX3BjaV9jb25maWcoc2lzdXNiLCAweDEwLCAmdG1wMzIpOworCXRtcDMyICY9IDB4MGY7CisJdG1wMzIgfD0gU0lTVVNCX1BDSV9NRU1CQVNFOworCXJldCB8PSBzaXN1c2Jfd3JpdGVfcGNpX2NvbmZpZyhzaXN1c2IsIDB4MTAsIHRtcDMyKTsKKworCS8qIEluaXQgQkFSIDEgKE1NSU8pICovCisJcmV0IHw9IHNpc3VzYl9yZWFkX3BjaV9jb25maWcoc2lzdXNiLCAweDE0LCAmdG1wMzIpOworCXJldCB8PSBzaXN1c2Jfd3JpdGVfcGNpX2NvbmZpZyhzaXN1c2IsIDB4MTQsIDB4ZmZmZmZmZjApOworCXJldCB8PSBzaXN1c2JfcmVhZF9wY2lfY29uZmlnKHNpc3VzYiwgMHgxNCwgJnRtcDMyKTsKKwl0bXAzMiAmPSAweDBmOworCXRtcDMyIHw9IFNJU1VTQl9QQ0lfTU1JT0JBU0U7CisJcmV0IHw9IHNpc3VzYl93cml0ZV9wY2lfY29uZmlnKHNpc3VzYiwgMHgxNCwgdG1wMzIpOworCisJLyogSW5pdCBCQVIgMiAoaS9vIHBvcnRzKSAqLworCXJldCB8PSBzaXN1c2JfcmVhZF9wY2lfY29uZmlnKHNpc3VzYiwgMHgxOCwgJnRtcDMyKTsKKwlyZXQgfD0gc2lzdXNiX3dyaXRlX3BjaV9jb25maWcoc2lzdXNiLCAweDE4LCAweGZmZmZmZmYwKTsKKwlyZXQgfD0gc2lzdXNiX3JlYWRfcGNpX2NvbmZpZyhzaXN1c2IsIDB4MTgsICZ0bXAzMik7CisJdG1wMzIgJj0gMHgwZjsKKwl0bXAzMiB8PSBTSVNVU0JfUENJX0lPUE9SVEJBU0U7CisJcmV0IHw9IHNpc3VzYl93cml0ZV9wY2lfY29uZmlnKHNpc3VzYiwgMHgxOCwgdG1wMzIpOworCisJLyogRW5hYmxlIG1lbW9yeSBhbmQgaS9vIGFjY2VzcyAqLworCXJldCB8PSBzaXN1c2JfcmVhZF9wY2lfY29uZmlnKHNpc3VzYiwgMHgwNCwgJnRtcDMyKTsKKwl0bXAzMiB8PSAweDM7CisJcmV0IHw9IHNpc3VzYl93cml0ZV9wY2lfY29uZmlnKHNpc3VzYiwgMHgwNCwgdG1wMzIpOworCisJaWYgKHJldCA9PSAwKSB7CisJCS8qIFNvbWUgZnVydGhlciBtYWdpYyAqLworCQlwYWNrZXQuaGVhZGVyICA9IDB4MDAxZjsKKwkJcGFja2V0LmFkZHJlc3MgPSAweDAwMDAwMDUwOworCQlwYWNrZXQuZGF0YSAgICA9IDB4MDAwMDAwZmY7CisJCXJldCB8PSBzaXN1c2Jfc2VuZF9icmlkZ2VfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQsIDApOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIGdyYXBoaWNzIGRldmljZSAocmV0dXJuIDAgb24gc3VjY2VzcykKKyAqIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIG5ldDIyODAgYXMgd2VsbCBhcyB0aGUgUENJIHJlZ2lzdGVycworICogb2YgdGhlIGdyYXBoaWNzIGJvYXJkLgorICovCisKK3N0YXRpYyBpbnQKK3Npc3VzYl9pbml0X2dmeGRldmljZShzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCBpbml0c2NyZWVuKQoreworCWludCByZXQgPSAwLCB0ZXN0ID0gMDsKKwl1MzIgdG1wMzI7CisKKwlpZiAoc2lzdXNiLT5kZXZpbml0ID09IDEpIHsKKwkJLyogUmVhZCBQQ0kgQkFScyBhbmQgc2VlIGlmIHRoZXkgaGF2ZSBiZWVuIHNldCB1cCAqLworCQlyZXQgfD0gc2lzdXNiX3JlYWRfcGNpX2NvbmZpZyhzaXN1c2IsIDB4MTAsICZ0bXAzMik7CisJCWlmIChyZXQpIHJldHVybiByZXQ7CisJCWlmICgodG1wMzIgJiAweGZmZmZmZmYwKSA9PSBTSVNVU0JfUENJX01FTUJBU0UpIHRlc3QrKzsKKworCQlyZXQgfD0gc2lzdXNiX3JlYWRfcGNpX2NvbmZpZyhzaXN1c2IsIDB4MTQsICZ0bXAzMik7CisJCWlmIChyZXQpIHJldHVybiByZXQ7CisJCWlmICgodG1wMzIgJiAweGZmZmZmZmYwKSA9PSBTSVNVU0JfUENJX01NSU9CQVNFKSB0ZXN0Kys7CisKKwkJcmV0IHw9IHNpc3VzYl9yZWFkX3BjaV9jb25maWcoc2lzdXNiLCAweDE4LCAmdG1wMzIpOworCQlpZiAocmV0KSByZXR1cm4gcmV0OworCQlpZiAoKHRtcDMyICYgMHhmZmZmZmZmMCkgPT0gU0lTVVNCX1BDSV9JT1BPUlRCQVNFKSB0ZXN0Kys7CisJfQorCisJLyogTm8/IFNvIHJlc2V0IHRoZSBkZXZpY2UgKi8KKwlpZiAoKHNpc3VzYi0+ZGV2aW5pdCA9PSAwKSB8fCAodGVzdCAhPSAzKSkgeworCisJCXJldCB8PSBzaXN1c2JfZG9faW5pdF9nZnhkZXZpY2Uoc2lzdXNiKTsKKworCQlpZiAocmV0ID09IDApCisJCQlzaXN1c2ItPmRldmluaXQgPSAxOworCisJfQorCisJaWYgKHNpc3VzYi0+ZGV2aW5pdCkgeworCQkvKiBJbml0aWFsaXplIHRoZSBncmFwaGljcyBjb3JlICovCisJCWlmIChzaXN1c2JfaW5pdF9nZnhjb3JlKHNpc3VzYikgPT0gMCkgeworCQkJc2lzdXNiLT5nZnhpbml0ID0gMTsKKwkJCXNpc3VzYl9nZXRfcmFtY29uZmlnKHNpc3VzYik7CisJCQlyZXQgfD0gc2lzdXNiX3NldF9kZWZhdWx0X21vZGUoc2lzdXNiLCAxKTsKKwkJCXJldCB8PSBzaXN1c2Jfc2V0dXBfc2NyZWVuKHNpc3VzYiwgMSwgaW5pdHNjcmVlbik7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBmb3BzICovCisKK3N0YXRpYyBpbnQKK3Npc3VzYl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOworCWludCBzdWJtaW5vciA9IGltaW5vcihpbm9kZSk7CisKKwlkb3duKCZkaXNjb25uZWN0X3NlbSk7CisKKwlpZiAoIShpbnRlcmZhY2UgPSB1c2JfZmluZF9pbnRlcmZhY2UoJnNpc3VzYl9kcml2ZXIsIHN1Ym1pbm9yKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzaXN1c2JbJWRdOiBGYWlsZWQgdG8gZmluZCBpbnRlcmZhY2VcbiIsCisJCQkJc3VibWlub3IpOworCQl1cCgmZGlzY29ubmVjdF9zZW0pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoIShzaXN1c2IgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSkpKSB7CisJCXVwKCZkaXNjb25uZWN0X3NlbSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRvd24oJnNpc3VzYi0+bG9jayk7CisKKwlpZiAoIXNpc3VzYi0+cHJlc2VudCB8fCAhc2lzdXNiLT5yZWFkeSkgeworCQl1cCgmc2lzdXNiLT5sb2NrKTsKKwkJdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHNpc3VzYi0+aXNvcGVuKSB7CisJCXVwKCZzaXN1c2ItPmxvY2spOworCQl1cCgmZGlzY29ubmVjdF9zZW0pOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmICghc2lzdXNiLT5kZXZpbml0KSB7CisJCWlmIChzaXN1c2ItPnNpc3VzYl9kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSB7CisJCQlpZiAoc2lzdXNiX2luaXRfZ2Z4ZGV2aWNlKHNpc3VzYiwgMCkpIHsKKwkJCQl1cCgmc2lzdXNiLT5sb2NrKTsKKwkJCQl1cCgmZGlzY29ubmVjdF9zZW0pOworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkic2lzdXNidmdhWyVkXTogRmFpbGVkIHRvIGluaXRpYWxpemUgIgorCQkJCQkiZGV2aWNlXG4iLAorCQkJCQlzaXN1c2ItPm1pbm9yKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXVwKCZzaXN1c2ItPmxvY2spOworCQkJdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJzaXN1c2J2Z2FbJWRdOiBEZXZpY2Ugbm90IGF0dGFjaGVkIHRvICIKKwkJCQkiVVNCIDIuMCBodWJcbiIsCisJCQkJc2lzdXNiLT5taW5vcik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKworCS8qIGluY3JlbWVudCB1c2FnZSBjb3VudCBmb3IgdGhlIGRldmljZSAqLworCWtyZWZfZ2V0KCZzaXN1c2ItPmtyZWYpOworCisJc2lzdXNiLT5pc29wZW4gPSAxOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gc2lzdXNiOworCisJdXAoJnNpc3VzYi0+bG9jayk7CisKKwl1cCgmZGlzY29ubmVjdF9zZW0pOworCisJcHJpbnRrKEtFUk5fREVCVUcgInNpc3VzYnZnYVslZF06IG9wZW5lZCIsIHNpc3VzYi0+bWlub3IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzaXN1c2JfZGVsZXRlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiA9IHRvX3Npc3VzYl9kZXYoa3JlZik7CisKKwlpZiAoIXNpc3VzYikKKwkJcmV0dXJuOworCisJaWYgKHNpc3VzYi0+c2lzdXNiX2RldikKKwkJdXNiX3B1dF9kZXYoc2lzdXNiLT5zaXN1c2JfZGV2KTsKKworCXNpc3VzYi0+c2lzdXNiX2RldiA9IE5VTEw7CisJc2lzdXNiX2ZyZWVfYnVmZmVycyhzaXN1c2IpOworCXNpc3VzYl9mcmVlX3VyYnMoc2lzdXNiKTsKKwlrZnJlZShzaXN1c2IpOworfQorCitzdGF0aWMgaW50CitzaXN1c2JfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2I7CisJaW50IG15bWlub3I7CisKKwlkb3duKCZkaXNjb25uZWN0X3NlbSk7CisKKwlpZiAoIShzaXN1c2IgPSAoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqKWZpbGUtPnByaXZhdGVfZGF0YSkpIHsKKwkJdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZG93bigmc2lzdXNiLT5sb2NrKTsKKworCWlmIChzaXN1c2ItPnByZXNlbnQpIHsKKwkJLyogV2FpdCBmb3IgYWxsIFVSQnMgdG8gZmluaXNoIGlmIGRldmljZSBzdGlsbCBwcmVzZW50ICovCisJCWlmICghc2lzdXNiX3dhaXRfYWxsX291dF9jb21wbGV0ZShzaXN1c2IpKQorCQkJc2lzdXNiX2tpbGxfYWxsX2J1c3koc2lzdXNiKTsKKwl9CisKKwlteW1pbm9yID0gc2lzdXNiLT5taW5vcjsKKworCXNpc3VzYi0+aXNvcGVuID0gMDsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCisJdXAoJnNpc3VzYi0+bG9jayk7CisKKwkvKiBkZWNyZW1lbnQgdGhlIHVzYWdlIGNvdW50IG9uIG91ciBkZXZpY2UgKi8KKwlrcmVmX3B1dCgmc2lzdXNiLT5rcmVmLCBzaXN1c2JfZGVsZXRlKTsKKworCXVwKCZkaXNjb25uZWN0X3NlbSk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAic2lzdXNidmdhWyVkXTogcmVsZWFzZWQiLCBteW1pbm9yKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdAorc2lzdXNiX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYjsKKwlzc2l6ZV90IGJ5dGVzX3JlYWQgPSAwOworCWludCBlcnJubyA9IDA7CisJdTggYnVmODsKKwl1MTYgYnVmMTY7CisJdTMyIGJ1ZjMyLCBhZGRyZXNzOworCisJaWYgKCEoc2lzdXNiID0gKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRvd24oJnNpc3VzYi0+bG9jayk7CisKKwkvKiBTYW5pdHkgY2hlY2sgKi8KKwlpZiAoIXNpc3VzYi0+cHJlc2VudCB8fCAhc2lzdXNiLT5yZWFkeSB8fCAhc2lzdXNiLT5zaXN1c2JfZGV2KSB7CisJCXVwKCZzaXN1c2ItPmxvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoKCpwcG9zKSA+PSBTSVNVU0JfUENJX1BTRVVET19JT1BPUlRCQVNFICYmCisJICAgICgqcHBvcykgPCAgU0lTVVNCX1BDSV9QU0VVRE9fSU9QT1JUQkFTRSArIDEyOCkgeworCisJCWFkZHJlc3MgPSAoKnBwb3MpIC0KKwkJCVNJU1VTQl9QQ0lfUFNFVURPX0lPUE9SVEJBU0UgKworCQkJU0lTVVNCX1BDSV9JT1BPUlRCQVNFOworCisJCS8qIFJlYWQgaS9vIHBvcnRzCisJCSAqIEJ5dGUsIHdvcmQgYW5kIGxvbmcoMzIpIGNhbiBiZSByZWFkLiBBcyB0aGlzCisJCSAqIGVtdWxhdGVzIGluWCBpbnN0cnVjdGlvbnMsIHRoZSBkYXRhIHJldHVybmVkIGlzCisJCSAqIGluIG1hY2hpbmUtZW5kaWFubmVzcy4KKwkJICovCisJCXN3aXRjaCAoY291bnQpIHsKKworCQkJY2FzZSAxOgorCQkJCWlmIChzaXN1c2JfcmVhZF9tZW1pb19ieXRlKHNpc3VzYiwKKwkJCQkJCQlTSVNVU0JfVFlQRV9JTywKKwkJCQkJCQlhZGRyZXNzLCAmYnVmOCkpCisJCQkJCWVycm5vID0gLUVJTzsKKwkJCQllbHNlIGlmIChwdXRfdXNlcihidWY4LCAodTggX191c2VyICopYnVmZmVyKSkKKwkJCQkJZXJybm8gPSAtRUZBVUxUOworCQkJCWVsc2UKKwkJCQkJYnl0ZXNfcmVhZCA9IDE7CisKKwkJCQlicmVhazsKKworCQkJY2FzZSAyOgorCQkJCWlmIChzaXN1c2JfcmVhZF9tZW1pb193b3JkKHNpc3VzYiwKKwkJCQkJCQlTSVNVU0JfVFlQRV9JTywKKwkJCQkJCQlhZGRyZXNzLCAmYnVmMTYpKQorCQkJCQllcnJubyA9IC1FSU87CisJCQkJZWxzZSBpZiAocHV0X3VzZXIoYnVmMTYsICh1MTYgX191c2VyICopYnVmZmVyKSkKKwkJCQkJZXJybm8gPSAtRUZBVUxUOworCQkJCWVsc2UKKwkJCQkJYnl0ZXNfcmVhZCA9IDI7CisKKwkJCQlicmVhazsKKworCQkJY2FzZSA0OgorCQkJCWlmIChzaXN1c2JfcmVhZF9tZW1pb19sb25nKHNpc3VzYiwKKwkJCQkJCQlTSVNVU0JfVFlQRV9JTywKKwkJCQkJCQlhZGRyZXNzLCAmYnVmMzIpKQorCQkJCQllcnJubyA9IC1FSU87CisJCQkJZWxzZSBpZiAocHV0X3VzZXIoYnVmMzIsICh1MzIgX191c2VyICopYnVmZmVyKSkKKwkJCQkJZXJybm8gPSAtRUZBVUxUOworCQkJCWVsc2UKKwkJCQkJYnl0ZXNfcmVhZCA9IDQ7CisKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQllcnJubyA9IC1FSU87CisKKwkJfQorCisJfSBlbHNlIGlmICgoKnBwb3MpID49IFNJU1VTQl9QQ0lfUFNFVURPX01FTUJBU0UgJiYKKwkJICAgKCpwcG9zKSA8ICBTSVNVU0JfUENJX1BTRVVET19NRU1CQVNFICsgc2lzdXNiLT52cmFtc2l6ZSkgeworCisJCWFkZHJlc3MgPSAoKnBwb3MpIC0KKwkJCVNJU1VTQl9QQ0lfUFNFVURPX01FTUJBU0UgKworCQkJU0lTVVNCX1BDSV9NRU1CQVNFOworCisJCS8qIFJlYWQgdmlkZW8gcmFtCisJCSAqIFJlbWVtYmVyOiBEYXRhIGRlbGl2ZXJlZCBpcyBuZXZlciBlbmRpYW4tY29ycmVjdGVkCisJCSAqLworCQllcnJubyA9IHNpc3VzYl9yZWFkX21lbV9idWxrKHNpc3VzYiwgYWRkcmVzcywKKwkJCQkJTlVMTCwgY291bnQsIGJ1ZmZlciwgJmJ5dGVzX3JlYWQpOworCisJCWlmIChieXRlc19yZWFkKQorCQkJZXJybm8gPSBieXRlc19yZWFkOworCisJfSBlbHNlICBpZiAoKCpwcG9zKSA+PSBTSVNVU0JfUENJX1BTRVVET19NTUlPQkFTRSAmJgorCQkgICAgKCpwcG9zKSA8ICBTSVNVU0JfUENJX1BTRVVET19NTUlPQkFTRSArIFNJU1VTQl9QQ0lfTU1JT1NJWkUpIHsKKworCQlhZGRyZXNzID0gKCpwcG9zKSAtCisJCQlTSVNVU0JfUENJX1BTRVVET19NTUlPQkFTRSArCisJCQlTSVNVU0JfUENJX01NSU9CQVNFOworCisJCS8qIFJlYWQgTU1JTworCQkgKiBSZW1lbWJlcjogRGF0YSBkZWxpdmVyZWQgaXMgbmV2ZXIgZW5kaWFuLWNvcnJlY3RlZAorCQkgKi8KKwkJZXJybm8gPSBzaXN1c2JfcmVhZF9tZW1fYnVsayhzaXN1c2IsIGFkZHJlc3MsCisJCQkJCU5VTEwsIGNvdW50LCBidWZmZXIsICZieXRlc19yZWFkKTsKKworCQlpZiAoYnl0ZXNfcmVhZCkKKwkJCWVycm5vID0gYnl0ZXNfcmVhZDsKKworCX0gZWxzZSAgaWYgKCgqcHBvcykgPj0gU0lTVVNCX1BDSV9QU0VVRE9fUENJQkFTRSAmJgorCQkgICAgKCpwcG9zKSA8PSBTSVNVU0JfUENJX1BTRVVET19QQ0lCQVNFICsgMHg1YykgeworCisJCWlmIChjb3VudCAhPSA0KSB7CisJCQl1cCgmc2lzdXNiLT5sb2NrKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJYWRkcmVzcyA9ICgqcHBvcykgLSBTSVNVU0JfUENJX1BTRVVET19QQ0lCQVNFOworCisJCS8qIFJlYWQgUENJIGNvbmZpZyByZWdpc3RlcgorCQkgKiBSZXR1cm4gdmFsdWUgZGVsaXZlcmVkIGluIG1hY2hpbmUgZW5kaWFubmVzcy4KKwkJICovCisJCWlmIChzaXN1c2JfcmVhZF9wY2lfY29uZmlnKHNpc3VzYiwgYWRkcmVzcywgJmJ1ZjMyKSkKKwkJCWVycm5vID0gLUVJTzsKKwkJZWxzZSBpZiAocHV0X3VzZXIoYnVmMzIsICh1MzIgX191c2VyICopYnVmZmVyKSkKKwkJCWVycm5vID0gLUVGQVVMVDsKKwkJZWxzZQorCQkJYnl0ZXNfcmVhZCA9IDQ7CisKKwl9IGVsc2UgeworCisJCWVycm5vID0gLUVCQURGRDsKKworCX0KKworCSgqcHBvcykgKz0gYnl0ZXNfcmVhZDsKKworCXVwKCZzaXN1c2ItPmxvY2spOworCisJcmV0dXJuIGVycm5vID8gZXJybm8gOiBieXRlc19yZWFkOworfQorCitzdGF0aWMgc3NpemVfdAorc2lzdXNiX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsCisJCQkJCQkJCWxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2I7CisJaW50IGVycm5vID0gMDsKKwlzc2l6ZV90IGJ5dGVzX3dyaXR0ZW4gPSAwOworCXU4IGJ1Zjg7CisJdTE2IGJ1ZjE2OworCXUzMiBidWYzMiwgYWRkcmVzczsKKworCWlmICghKHNpc3VzYiA9IChzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICopZmlsZS0+cHJpdmF0ZV9kYXRhKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkb3duKCZzaXN1c2ItPmxvY2spOworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKCFzaXN1c2ItPnByZXNlbnQgfHwgIXNpc3VzYi0+cmVhZHkgfHwgIXNpc3VzYi0+c2lzdXNiX2RldikgeworCQl1cCgmc2lzdXNiLT5sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCgqcHBvcykgPj0gU0lTVVNCX1BDSV9QU0VVRE9fSU9QT1JUQkFTRSAmJgorCSAgICAoKnBwb3MpIDwgIFNJU1VTQl9QQ0lfUFNFVURPX0lPUE9SVEJBU0UgKyAxMjgpIHsKKworCQlhZGRyZXNzID0gKCpwcG9zKSAtCisJCQlTSVNVU0JfUENJX1BTRVVET19JT1BPUlRCQVNFICsKKwkJCVNJU1VTQl9QQ0lfSU9QT1JUQkFTRTsKKworCQkvKiBXcml0ZSBpL28gcG9ydHMKKwkJICogQnl0ZSwgd29yZCBhbmQgbG9uZygzMikgY2FuIGJlIHdyaXR0ZW4uIEFzIHRoaXMKKwkJICogZW11bGF0ZXMgb3V0WCBpbnN0cnVjdGlvbnMsIHRoZSBkYXRhIGlzIGV4cGVjdGVkCisJCSAqIGluIG1hY2hpbmUtZW5kaWFubmVzcy4KKwkJICovCisJCXN3aXRjaCAoY291bnQpIHsKKworCQkJY2FzZSAxOgorCQkJCWlmIChnZXRfdXNlcihidWY4LCAodTggX191c2VyICopYnVmZmVyKSkKKwkJCQkJZXJybm8gPSAtRUZBVUxUOworCQkJCWVsc2UgaWYgKHNpc3VzYl93cml0ZV9tZW1pb19ieXRlKHNpc3VzYiwKKwkJCQkJCQlTSVNVU0JfVFlQRV9JTywKKwkJCQkJCQlhZGRyZXNzLCBidWY4KSkKKwkJCQkJZXJybm8gPSAtRUlPOworCQkJCWVsc2UKKwkJCQkJYnl0ZXNfd3JpdHRlbiA9IDE7CisKKwkJCQlicmVhazsKKworCQkJY2FzZSAyOgorCQkJCWlmIChnZXRfdXNlcihidWYxNiwgKHUxNiBfX3VzZXIgKilidWZmZXIpKQorCQkJCQllcnJubyA9IC1FRkFVTFQ7CisJCQkJZWxzZSBpZiAoc2lzdXNiX3dyaXRlX21lbWlvX3dvcmQoc2lzdXNiLAorCQkJCQkJCVNJU1VTQl9UWVBFX0lPLAorCQkJCQkJCWFkZHJlc3MsIGJ1ZjE2KSkKKwkJCQkJZXJybm8gPSAtRUlPOworCQkJCWVsc2UKKwkJCQkJYnl0ZXNfd3JpdHRlbiA9IDI7CisKKwkJCQlicmVhazsKKworCQkJY2FzZSA0OgorCQkJCWlmIChnZXRfdXNlcihidWYzMiwgKHUzMiBfX3VzZXIgKilidWZmZXIpKQorCQkJCQllcnJubyA9IC1FRkFVTFQ7CisJCQkJZWxzZSBpZiAoc2lzdXNiX3dyaXRlX21lbWlvX2xvbmcoc2lzdXNiLAorCQkJCQkJCVNJU1VTQl9UWVBFX0lPLAorCQkJCQkJCWFkZHJlc3MsIGJ1ZjMyKSkKKwkJCQkJZXJybm8gPSAtRUlPOworCQkJCWVsc2UKKwkJCQkJYnl0ZXNfd3JpdHRlbiA9IDQ7CisKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQllcnJubyA9IC1FSU87CisJCX0KKworCX0gZWxzZSBpZiAoKCpwcG9zKSA+PSBTSVNVU0JfUENJX1BTRVVET19NRU1CQVNFICYmCisJCSAgICgqcHBvcykgPCAgU0lTVVNCX1BDSV9QU0VVRE9fTUVNQkFTRSArIHNpc3VzYi0+dnJhbXNpemUpIHsKKworCQlhZGRyZXNzID0gKCpwcG9zKSAtCisJCQlTSVNVU0JfUENJX1BTRVVET19NRU1CQVNFICsKKwkJCVNJU1VTQl9QQ0lfTUVNQkFTRTsKKworCQkvKiBXcml0ZSB2aWRlbyByYW0uCisJCSAqIEJ1ZmZlciBpcyBjb3BpZWQgMToxLCB0aGVyZWZvcmUsIG9uIGJpZy1lbmRpYW4KKwkJICogbWFjaGluZXMsIHRoZSBkYXRhIG11c3QgYmUgc3dhcHBlZCBieSB1c2VybGFuZAorCQkgKiBpbiBhZHZhbmNlIChpZiBhcHBsaWNhYmxlOyBubyBzd2FwcGluZyBpbiA4YnBwCisJCSAqIG1vZGUgb3IgaWYgWVVWIGRhdGEgaXMgYmVpbmcgdHJhbnNmZXJyZWQpLgorCQkgKi8KKwkJZXJybm8gPSBzaXN1c2Jfd3JpdGVfbWVtX2J1bGsoc2lzdXNiLCBhZGRyZXNzLCBOVUxMLAorCQkJCQljb3VudCwgYnVmZmVyLCAwLCAmYnl0ZXNfd3JpdHRlbik7CisKKwkJaWYgKGJ5dGVzX3dyaXR0ZW4pCisJCQllcnJubyA9IGJ5dGVzX3dyaXR0ZW47CisKKwl9IGVsc2UgIGlmICgoKnBwb3MpID49IFNJU1VTQl9QQ0lfUFNFVURPX01NSU9CQVNFICYmCisJCSAgICAoKnBwb3MpIDwgIFNJU1VTQl9QQ0lfUFNFVURPX01NSU9CQVNFICsgU0lTVVNCX1BDSV9NTUlPU0laRSkgeworCisJCWFkZHJlc3MgPSAoKnBwb3MpIC0KKwkJCVNJU1VTQl9QQ0lfUFNFVURPX01NSU9CQVNFICsKKwkJCVNJU1VTQl9QQ0lfTU1JT0JBU0U7CisKKwkJLyogV3JpdGUgTU1JTy4KKwkJICogQnVmZmVyIGlzIGNvcGllZCAxOjEsIHRoZXJlZm9yZSwgb24gYmlnLWVuZGlhbgorCQkgKiBtYWNoaW5lcywgdGhlIGRhdGEgbXVzdCBiZSBzd2FwcGVkIGJ5IHVzZXJsYW5kCisJCSAqIGluIGFkdmFuY2UuCisJCSAqLworCQllcnJubyA9IHNpc3VzYl93cml0ZV9tZW1fYnVsayhzaXN1c2IsIGFkZHJlc3MsIE5VTEwsCisJCQkJCWNvdW50LCBidWZmZXIsIDAsICZieXRlc193cml0dGVuKTsKKworCQlpZiAoYnl0ZXNfd3JpdHRlbikKKwkJCWVycm5vID0gYnl0ZXNfd3JpdHRlbjsKKworCX0gZWxzZSAgaWYgKCgqcHBvcykgPj0gU0lTVVNCX1BDSV9QU0VVRE9fUENJQkFTRSAmJgorCQkgICAgKCpwcG9zKSA8PSBTSVNVU0JfUENJX1BTRVVET19QQ0lCQVNFICsgU0lTVVNCX1BDSV9QQ09ORlNJWkUpIHsKKworCQlpZiAoY291bnQgIT0gNCkgeworCQkJdXAoJnNpc3VzYi0+bG9jayk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWFkZHJlc3MgPSAoKnBwb3MpIC0gU0lTVVNCX1BDSV9QU0VVRE9fUENJQkFTRTsKKworCQkvKiBXcml0ZSBQQ0kgY29uZmlnIHJlZ2lzdGVyLgorCQkgKiBHaXZlbiB2YWx1ZSBleHBlY3RlZCBpbiBtYWNoaW5lIGVuZGlhbm5lc3MuCisJCSAqLworCQlpZiAoZ2V0X3VzZXIoYnVmMzIsICh1MzIgX191c2VyICopYnVmZmVyKSkKKwkJCWVycm5vID0gLUVGQVVMVDsKKwkJZWxzZSBpZiAoc2lzdXNiX3dyaXRlX3BjaV9jb25maWcoc2lzdXNiLCBhZGRyZXNzLCBidWYzMikpCisJCQllcnJubyA9IC1FSU87CisJCWVsc2UKKwkJCWJ5dGVzX3dyaXR0ZW4gPSA0OworCisKKwl9IGVsc2UgeworCisJCS8qIEVycm9yICovCisJCWVycm5vID0gLUVCQURGRDsKKworCX0KKworCSgqcHBvcykgKz0gYnl0ZXNfd3JpdHRlbjsKKworCXVwKCZzaXN1c2ItPmxvY2spOworCisJcmV0dXJuIGVycm5vID8gZXJybm8gOiBieXRlc193cml0dGVuOworfQorCitzdGF0aWMgbG9mZl90CitzaXN1c2JfbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnKQoreworCXN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYjsKKwlsb2ZmX3QgcmV0OworCisJaWYgKCEoc2lzdXNiID0gKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRvd24oJnNpc3VzYi0+bG9jayk7CisKKwkvKiBTYW5pdHkgY2hlY2sgKi8KKwlpZiAoIXNpc3VzYi0+cHJlc2VudCB8fCAhc2lzdXNiLT5yZWFkeSB8fCAhc2lzdXNiLT5zaXN1c2JfZGV2KSB7CisJCXVwKCZzaXN1c2ItPmxvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzd2l0Y2ggKG9yaWcpIHsKKwkJY2FzZSAwOgorCQkJZmlsZS0+Zl9wb3MgPSBvZmZzZXQ7CisJCQlyZXQgPSBmaWxlLT5mX3BvczsKKwkJCS8qIG5ldmVyIG5lZ2F0aXZlLCBubyBmb3JjZV9zdWNjZXNzZnVsX3N5c2NhbGwgbmVlZGVkICovCisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZmlsZS0+Zl9wb3MgKz0gb2Zmc2V0OworCQkJcmV0ID0gZmlsZS0+Zl9wb3M7CisJCQkvKiBuZXZlciBuZWdhdGl2ZSwgbm8gZm9yY2Vfc3VjY2Vzc2Z1bF9zeXNjYWxsIG5lZWRlZCAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBzZWVraW5nIHJlbGF0aXZlIHRvICJlbmQgb2YgZmlsZSIgaXMgbm90IHN1cHBvcnRlZCAqLworCQkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwl1cCgmc2lzdXNiLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitzaXN1c2JfaGFuZGxlX2NvbW1hbmQoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBzdHJ1Y3Qgc2lzdXNiX2NvbW1hbmQgKnksCisJCQkJCQkJdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IAlyZXR2YWwsIHBvcnQsIGxlbmd0aDsKKwl1MzIJYWRkcmVzczsKKworCXBvcnQgPSB5LT5kYXRhMyAtCisJCVNJU1VTQl9QQ0lfUFNFVURPX0lPUE9SVEJBU0UgKworCQlTSVNVU0JfUENJX0lPUE9SVEJBU0U7CisKKwlzd2l0Y2ggKHktPm9wZXJhdGlvbikgeworCQljYXNlIFNVQ01EX0dFVDoKKwkJCXJldHZhbCA9IHNpc3VzYl9nZXRpZHhyZWcoc2lzdXNiLCBwb3J0LAorCQkJCQkJCSB5LT5kYXRhMCwgJnktPmRhdGExKTsKKwkJCWlmICghcmV0dmFsKSB7CisJCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsIHksCisJCQkJCQkJc2l6ZW9mKCp5KSkpCisJCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFNVQ01EX1NFVDoKKwkJCXJldHZhbCA9IHNpc3VzYl9zZXRpZHhyZWcoc2lzdXNiLCBwb3J0LAorCQkJCQkJeS0+ZGF0YTAsIHktPmRhdGExKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1VDTURfU0VUT1I6CisJCQlyZXR2YWwgPSBzaXN1c2Jfc2V0aWR4cmVnb3Ioc2lzdXNiLCBwb3J0LAorCQkJCQkJeS0+ZGF0YTAsIHktPmRhdGExKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1VDTURfU0VUQU5EOgorCQkJcmV0dmFsID0gc2lzdXNiX3NldGlkeHJlZ2FuZChzaXN1c2IsIHBvcnQsCisJCQkJCQl5LT5kYXRhMCwgeS0+ZGF0YTEpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVUNNRF9TRVRBTkRPUjoKKwkJCXJldHZhbCA9IHNpc3VzYl9zZXRpZHhyZWdhbmRvcihzaXN1c2IsIHBvcnQsCisJCQkJCQl5LT5kYXRhMCwgeS0+ZGF0YTEsIHktPmRhdGEyKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1VDTURfU0VUTUFTSzoKKwkJCXJldHZhbCA9IHNpc3VzYl9zZXRpZHhyZWdtYXNrKHNpc3VzYiwgcG9ydCwKKwkJCQkJCXktPmRhdGEwLCB5LT5kYXRhMSwgeS0+ZGF0YTIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVUNNRF9DTFJTQ1I6CisJCQlsZW5ndGggPSAoeS0+ZGF0YTAgPDwgMTYpIHwgKHktPmRhdGExIDw8IDgpIHwgeS0+ZGF0YTI7CisJCQlhZGRyZXNzID0geS0+ZGF0YTMgLQorCQkJCVNJU1VTQl9QQ0lfUFNFVURPX01FTUJBU0UgKworCQkJCVNJU1VTQl9QQ0lfTUVNQkFTRTsKKwkJCXJldHZhbCA9IHNpc3VzYl9jbGVhcl92cmFtKHNpc3VzYiwgYWRkcmVzcywgbGVuZ3RoKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlyZXR2YWwgPSAtRUlOVkFMOworCX0KKworCWlmKHJldHZhbCA+IDApCisJCXJldHZhbCA9IC1FSU87CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50CitzaXN1c2JfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJICAgICAJCQkJCQl1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2I7CisJc3RydWN0IHNpc3VzYl9pbmZvIHg7CisJc3RydWN0IHNpc3VzYl9jb21tYW5kIHk7CisJaW50IAlyZXR2YWwgPSAwOworCXUzMiBfX3VzZXIgKmFyZ3AgPSAodTMyIF9fdXNlciAqKWFyZzsKKworCWlmICghKHNpc3VzYiA9IChzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICopZmlsZS0+cHJpdmF0ZV9kYXRhKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkb3duKCZzaXN1c2ItPmxvY2spOworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKCFzaXN1c2ItPnByZXNlbnQgfHwgIXNpc3VzYi0+cmVhZHkgfHwgIXNpc3VzYi0+c2lzdXNiX2RldikgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJc3dpdGNoIChjbWQpIHsKKworCQljYXNlIFNJU1VTQl9HRVRfQ09ORklHX1NJWkU6CisKKwkJCWlmIChwdXRfdXNlcihzaXplb2YoeCksIGFyZ3ApKQorCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisKKwkJCWJyZWFrOworCisJCWNhc2UgU0lTVVNCX0dFVF9DT05GSUc6CisKKwkJCXguc2lzdXNiX2lkICAgCSAgICA9IFNJU1VTQl9JRDsKKwkJCXguc2lzdXNiX3ZlcnNpb24gICAgPSBTSVNVU0JfVkVSU0lPTjsKKwkJCXguc2lzdXNiX3JldmlzaW9uICAgPSBTSVNVU0JfUkVWSVNJT047CisJCQl4LnNpc3VzYl9wYXRjaGxldmVsID0gU0lTVVNCX1BBVENITEVWRUw7CisJCQl4LnNpc3VzYl9nZnhpbml0ICAgID0gc2lzdXNiLT5nZnhpbml0OworCQkJeC5zaXN1c2JfdnJhbWJhc2UgICA9IFNJU1VTQl9QQ0lfUFNFVURPX01FTUJBU0U7CisJCQl4LnNpc3VzYl9tbWlvYmFzZSAgID0gU0lTVVNCX1BDSV9QU0VVRE9fTU1JT0JBU0U7CisJCQl4LnNpc3VzYl9pb2Jhc2UgICAgID0gU0lTVVNCX1BDSV9QU0VVRE9fSU9QT1JUQkFTRTsKKwkJCXguc2lzdXNiX3BjaWJhc2UgICAgPSBTSVNVU0JfUENJX1BTRVVET19QQ0lCQVNFOworCQkJeC5zaXN1c2JfdnJhbXNpemUgICA9IHNpc3VzYi0+dnJhbXNpemU7CisJCQl4LnNpc3VzYl9taW5vcgkgICAgPSBzaXN1c2ItPm1pbm9yOworCQkJeC5zaXN1c2JfZmJkZXZhY3RpdmU9IDA7CisKKwkJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmeCwgc2l6ZW9mKHgpKSkKKwkJCQlyZXR2YWwgPSAtRUZBVUxUOworCisJCQlicmVhazsKKworCQljYXNlIFNJU1VTQl9DT01NQU5EOgorCisJCQlpZiAoY29weV9mcm9tX3VzZXIoJnksICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKHkpKSkKKwkJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJZWxzZQorCQkJCXJldHZhbCA9IHNpc3VzYl9oYW5kbGVfY29tbWFuZChzaXN1c2IsICZ5LCBhcmcpOworCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCX0KKworZXJyX291dDoKKwl1cCgmc2lzdXNiLT5sb2NrKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisjaWZkZWYgU0lTVVNCX05FV19DT05GSUdfQ09NUEFUCitzdGF0aWMgbG9uZworc2lzdXNiX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJbG9uZyByZXR2YWw7CisKKwlzd2l0Y2ggKGNtZCkgeworCQljYXNlIFNJU1VTQl9HRVRfQ09ORklHX1NJWkU6CisJCWNhc2UgU0lTVVNCX0dFVF9DT05GSUc6CisJCWNhc2UgU0lTVVNCX0NPTU1BTkQ6CisJCQlsb2NrX2tlcm5lbCgpOworCQkJcmV0dmFsID0gc2lzdXNiX2lvY3RsKGYtPmZfZGVudHJ5LT5kX2lub2RlLCBmLCBjbWQsIGFyZyk7CisJCQl1bmxvY2tfa2VybmVsKCk7CisJCQlyZXR1cm4gcmV0dmFsOworCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCX0KK30KKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2Jfc2lzdXNiX2ZvcHMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm9wZW4gPQkJc2lzdXNiX29wZW4sCisJLnJlbGVhc2UgPQlzaXN1c2JfcmVsZWFzZSwKKwkucmVhZCA9CQlzaXN1c2JfcmVhZCwKKwkud3JpdGUgPQlzaXN1c2Jfd3JpdGUsCisJLmxsc2VlayA9IAlzaXN1c2JfbHNlZWssCisjaWZkZWYgU0lTVVNCX05FV19DT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bCA9IHNpc3VzYl9jb21wYXRfaW9jdGwsCisjZW5kaWYKKwkuaW9jdGwgPQlzaXN1c2JfaW9jdGwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciB1c2Jfc2lzdXNiX2NsYXNzID0geworCS5uYW1lID0JCSJ1c2Ivc2lzdXNidmdhJWQiLAorCS5mb3BzID0JCSZ1c2Jfc2lzdXNiX2ZvcHMsCisJLm1vZGUgPQkJU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JUkdSUCB8IFNfSVdHUlAsCisJLm1pbm9yX2Jhc2UgPQlTSVNVU0JfTUlOT1IKK307CisKK3N0YXRpYyBpbnQgc2lzdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYjsKKwlpbnQgcmV0dmFsID0gMCwgaTsKKwljb25zdCBjaGFyICptZW1mYWlsID0KKwkJS0VSTl9FUlIKKwkJInNpc3VzYnZnYVslZF06IEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yICVzIGJ1ZmZlclxuIjsKKworCXByaW50ayhLRVJOX0lORk8gInNpc3VzYjogVVNCMlZHQSBkb25nbGUgZm91bmQgYXQgYWRkcmVzcyAlZFxuIiwKKwkJZGV2LT5kZXZudW0pOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgcHJpdmF0ZSAqLworCWlmICghKHNpc3VzYiA9IGttYWxsb2Moc2l6ZW9mKCpzaXN1c2IpLCBHRlBfS0VSTkVMKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkic2lzdXNiOiBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBwcml2YXRlIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KHNpc3VzYiwgMCwgc2l6ZW9mKCpzaXN1c2IpKTsKKwlrcmVmX2luaXQoJnNpc3VzYi0+a3JlZik7CisKKwlpbml0X01VVEVYKCYoc2lzdXNiLT5sb2NrKSk7CisKKwkvKiBSZWdpc3RlciBkZXZpY2UgKi8KKwlpZiAoKHJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJnVzYl9zaXN1c2JfY2xhc3MpKSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJzaXN1c2I6IEZhaWxlZCB0byBnZXQgYSBtaW5vciBmb3IgZGV2aWNlICVkXG4iLAorCQkJZGV2LT5kZXZudW0pOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycm9yXzE7CisJfQorCisJc2lzdXNiLT5zaXN1c2JfZGV2ID0gZGV2OworCXNpc3VzYi0+bWlub3IgICAgICA9IGludGYtPm1pbm9yOworCXNpc3VzYi0+dnJhbWJhc2UgICA9IFNJU1VTQl9QQ0lfTUVNQkFTRTsKKwlzaXN1c2ItPm1taW9iYXNlICAgPSBTSVNVU0JfUENJX01NSU9CQVNFOworCXNpc3VzYi0+bW1pb3NpemUgICA9IFNJU1VTQl9QQ0lfTU1JT1NJWkU7CisJc2lzdXNiLT5pb3BvcnRiYXNlID0gU0lTVVNCX1BDSV9JT1BPUlRCQVNFOworCS8qIEV2ZXJ5dGhpbmcgZWxzZSBpcyB6ZXJvICovCisKKwkvKiBBbGxvY2F0ZSBidWZmZXJzICovCisJc2lzdXNiLT5pYnVmc2l6ZSA9IFNJU1VTQl9JQlVGX1NJWkU7CisJaWYgKCEoc2lzdXNiLT5pYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIFNJU1VTQl9JQlVGX1NJWkUsCisJCQkJCUdGUF9LRVJORUwsICZzaXN1c2ItPnRyYW5zZmVyX2RtYV9pbikpKSB7CisJCXByaW50ayhtZW1mYWlsLCAiaW5wdXQiLCBzaXN1c2ItPm1pbm9yKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnJvcl8yOworCX0KKworCXNpc3VzYi0+bnVtb2J1ZnMgPSAwOworCXNpc3VzYi0+b2J1ZnNpemUgPSBTSVNVU0JfT0JVRl9TSVpFOworCWZvciAoaSA9IDA7IGkgPCBOVU1PQlVGUzsgaSsrKSB7CisJCWlmICghKHNpc3VzYi0+b2J1ZltpXSA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCBTSVNVU0JfT0JVRl9TSVpFLAorCQkJCQlHRlBfS0VSTkVMLAorCQkJCQkmc2lzdXNiLT50cmFuc2Zlcl9kbWFfb3V0W2ldKSkpIHsKKwkJCWlmIChpID09IDApIHsKKwkJCQlwcmludGsobWVtZmFpbCwgIm91dHB1dCIsIHNpc3VzYi0+bWlub3IpOworCQkJCXJldHZhbCA9IC1FTk9NRU07CisJCQkJZ290byBlcnJvcl8zOworCQkJfQorCQkJYnJlYWs7CisJCX0gZWxzZQorCQkJc2lzdXNiLT5udW1vYnVmcysrOworCisJfQorCisJLyogQWxsb2NhdGUgVVJCcyAqLworCWlmICghKHNpc3VzYi0+c2lzdXJiaW4gPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpKSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJzaXN1c2J2Z2FbJWRdOiBGYWlsZWQgdG8gYWxsb2NhdGUgVVJCc1xuIiwKKwkJCXNpc3VzYi0+bWlub3IpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yXzM7CisJfQorCXNpc3VzYi0+Y29tcGxldGVpbiA9IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2lzdXNiLT5udW1vYnVmczsgaSsrKSB7CisJCWlmICghKHNpc3VzYi0+c2lzdXJib3V0W2ldID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJzaXN1c2J2Z2FbJWRdOiBGYWlsZWQgdG8gYWxsb2NhdGUgVVJCc1xuIiwKKwkJCQlzaXN1c2ItPm1pbm9yKTsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlnb3RvIGVycm9yXzQ7CisJCX0KKwkJc2lzdXNiLT51cmJvdXRfY29udGV4dFtpXS5zaXN1c2IgPSAodm9pZCAqKXNpc3VzYjsKKwkJc2lzdXNiLT51cmJvdXRfY29udGV4dFtpXS51cmJpbmRleCA9IGk7CisJCXNpc3VzYi0+dXJic3RhdHVzW2ldID0gMDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJzaXN1c2J2Z2FbJWRdOiBBbGxvY2F0ZWQgJWQgb3V0cHV0IGJ1ZmZlcnNcbiIsCisJCQkJCXNpc3VzYi0+bWlub3IsIHNpc3VzYi0+bnVtb2J1ZnMpOworCisJLyogRG8gcmVtYWluaW5nIGluaXQgc3R1ZmYgKi8KKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNpc3VzYi0+d2FpdF9xKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50Ziwgc2lzdXNiKTsKKworI2lmZGVmIFNJU1VTQl9PTERfQ09ORklHX0NPTVBBVAorCXsKKwlpbnQgcmV0OworCS8qIE91ciBpb2N0bHMgYXJlIGFsbCAiMzIvNjRiaXQgY29tcGF0aWJsZSIgKi8KKwlyZXQgPSAgcmVnaXN0ZXJfaW9jdGwzMl9jb252ZXJzaW9uKFNJU1VTQl9HRVRfQ09ORklHX1NJWkUsIE5VTEwpOworCXJldCB8PSByZWdpc3Rlcl9pb2N0bDMyX2NvbnZlcnNpb24oU0lTVVNCX0dFVF9DT05GSUcsICAgICAgTlVMTCk7CisJcmV0IHw9IHJlZ2lzdGVyX2lvY3RsMzJfY29udmVyc2lvbihTSVNVU0JfQ09NTUFORCwgICAgICAgICBOVUxMKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIKKwkJCSJzaXN1c2J2Z2FbJWRdOiBFcnJvciByZWdpc3RlcmluZyBpb2N0bDMyICIKKwkJCSJ0cmFuc2xhdGlvbnNcbiIsCisJCQlzaXN1c2ItPm1pbm9yKTsKKwllbHNlCisJCXNpc3VzYi0+aW9jdGwzMnJlZ2lzdGVyZWQgPSAxOworCisJfQorI2VuZGlmCisKKwlzaXN1c2ItPnByZXNlbnQgPSAxOworCisJaWYgKGRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIHsKKwkJaWYgKHNpc3VzYl9pbml0X2dmeGRldmljZShzaXN1c2IsIDEpKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJInNpc3VzYnZnYVslZF06IEZhaWxlZCB0byBlYXJseSAiCisJCQkJImluaXRpYWxpemUgZGV2aWNlXG4iLAorCQkJCXNpc3VzYi0+bWlub3IpOworCisJfSBlbHNlCisJCXByaW50ayhLRVJOX0lORk8KKwkJCSJzaXN1c2J2Z2FbJWRdOiBOb3QgYXR0YWNoZWQgdG8gVVNCIDIuMCBodWIsICIKKwkJCSJkZWZlcnJpbmcgaW5pdFxuIiwKKwkJCXNpc3VzYi0+bWlub3IpOworCisJc2lzdXNiLT5yZWFkeSA9IDE7CisKKwlyZXR1cm4gMDsKKworZXJyb3JfNDoKKwlzaXN1c2JfZnJlZV91cmJzKHNpc3VzYik7CitlcnJvcl8zOgorCXNpc3VzYl9mcmVlX2J1ZmZlcnMoc2lzdXNiKTsKK2Vycm9yXzI6CisJdXNiX2RlcmVnaXN0ZXJfZGV2KGludGYsICZ1c2Jfc2lzdXNiX2NsYXNzKTsKK2Vycm9yXzE6CisJa2ZyZWUoc2lzdXNiKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBzaXN1c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2I7CisJaW50IG1pbm9yOworCisJZG93bigmZGlzY29ubmVjdF9zZW0pOworCisJLyogVGhpcyBzaG91bGQgKm5vdCogaGFwcGVuICovCisJaWYgKCEoc2lzdXNiID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKSkpIHsKKwkJdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKKwkJcmV0dXJuOworCX0KKworCWRvd24oJnNpc3VzYi0+bG9jayk7CisKKwkvKiBXYWl0IGZvciBhbGwgVVJCcyB0byBjb21wbGV0ZSBhbmQga2lsbCB0aGVtIGluIGNhc2UgKE1VU1QgZG8pICovCisJaWYgKCFzaXN1c2Jfd2FpdF9hbGxfb3V0X2NvbXBsZXRlKHNpc3VzYikpCisJCXNpc3VzYl9raWxsX2FsbF9idXN5KHNpc3VzYik7CisKKwltaW5vciA9IHNpc3VzYi0+bWlub3I7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCisJdXNiX2RlcmVnaXN0ZXJfZGV2KGludGYsICZ1c2Jfc2lzdXNiX2NsYXNzKTsKKworI2lmZGVmIFNJU1VTQl9PTERfQ09ORklHX0NPTVBBVAorCWlmIChzaXN1c2ItPmlvY3RsMzJyZWdpc3RlcmVkKSB7CisJCWludCByZXQ7CisJCXNpc3VzYi0+aW9jdGwzMnJlZ2lzdGVyZWQgPSAwOworCQlyZXQgPSAgdW5yZWdpc3Rlcl9pb2N0bDMyX2NvbnZlcnNpb24oU0lTVVNCX0dFVF9DT05GSUdfU0laRSk7CisJCXJldCB8PSB1bnJlZ2lzdGVyX2lvY3RsMzJfY29udmVyc2lvbihTSVNVU0JfR0VUX0NPTkZJRyk7CisJCXJldCB8PSB1bnJlZ2lzdGVyX2lvY3RsMzJfY29udmVyc2lvbihTSVNVU0JfQ09NTUFORCk7CisJCWlmIChyZXQpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJzaXN1c2J2Z2FbJWRdOiBFcnJvciB1bnJlZ2lzdGVyaW5nICIKKwkJCQkiaW9jdGwzMiB0cmFuc2xhdGlvbnNcbiIsCisJCQkJbWlub3IpOworCQl9CisJfQorI2VuZGlmCisKKwlzaXN1c2ItPnByZXNlbnQgPSAwOworCXNpc3VzYi0+cmVhZHkgPSAwOworCisJdXAoJnNpc3VzYi0+bG9jayk7CisKKwkvKiBkZWNyZW1lbnQgb3VyIHVzYWdlIGNvdW50ICovCisJa3JlZl9wdXQoJnNpc3VzYi0+a3JlZiwgc2lzdXNiX2RlbGV0ZSk7CisKKwl1cCgmZGlzY29ubmVjdF9zZW0pOworCisJcHJpbnRrKEtFUk5fSU5GTyAic2lzdXNidmdhWyVkXTogRGlzY29ubmVjdGVkXG4iLCBtaW5vcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzaXN1c2JfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKDB4MDcxMSwgMHgwOTAwKSB9LAorCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBzaXN1c2JfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2lzdXNiX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkic2lzdXNiIiwKKwkucHJvYmUgPQlzaXN1c2JfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQlzaXN1c2JfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlzaXN1c2JfdGFibGUKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9zaXN1c2JfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlpZiAoIShyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnNpc3VzYl9kcml2ZXIpKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJzaXN1c2I6IERyaXZlciB2ZXJzaW9uICVkLiVkLiVkXG4iLAorCQkJU0lTVVNCX1ZFUlNJT04sIFNJU1VTQl9SRVZJU0lPTiwgU0lTVVNCX1BBVENITEVWRUwpOworCQlwcmludGsoS0VSTl9JTkZPCisJCQkic2lzdXNiOiBDb3B5cmlnaHQgKEMpIDIwMDUgVGhvbWFzIFdpbmlzY2hob2ZlclxuIik7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzYl9zaXN1c2JfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzaXN1c2JfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNiX3Npc3VzYl9pbml0KTsKK21vZHVsZV9leGl0KHVzYl9zaXN1c2JfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlRob21hcyBXaW5pc2NoaG9mZXIgPHRob21hc0B3aW5pc2NoaG9mZXIubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJzaXN1c2IgLSBEcml2ZXIgZm9yIE5ldDIyODAvU2lTMzE1LWJhc2VkIFVTQjJWR0EgZG9uZ2xlcyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuaCBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMDZkMDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuaApAQCAtMCwwICsxLDI3OCBAQAorLyoKKyAqIHNpc3VzYiAtIHVzYiBrZXJuZWwgZHJpdmVyIGZvciBOZXQyMjgwL1NpUzMxNSBiYXNlZCBVU0IyVkdBIGRvbmdsZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgYnkgVGhvbWFzIFdpbmlzY2hob2ZlciwgVmllbm5hLCBBdXN0cmlhCisgKgorICogSWYgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiB0aGUgTGludXgga2VybmVsLCB0aGlzIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgR1BMIHYyLgorICoKKyAqIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaWNlbnNlIHRlcm1zIGFwcGx5OgorICoKKyAqICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogKiBhcmUgbWV0OgorICogKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICogMykgVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogKgorICogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SCisgKiAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBBdXRob3I6IAlUaG9tYXMgV2luaXNjaGhvZmVyIDx0aG9tYXNAd2luaXNjaGhvZmVyLm5ldD4KKyAqCisgKi8KKworI2lmbmRlZiBfU0lTVVNCX0hfCisjZGVmaW5lIF9TSVNVU0JfSF8KKworI2lmZGVmIENPTkZJR19DT01QQVQKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gS0VSTkVMX1ZFUlNJT04oMiw2LDEwKQorI2luY2x1ZGUgPGxpbnV4L2lvY3RsMzIuaD4KKyNkZWZpbmUgU0lTVVNCX09MRF9DT05GSUdfQ09NUEFUCisjZWxzZQorI2RlZmluZSBTSVNVU0JfTkVXX0NPTkZJR19DT01QQVQKKyNlbmRpZgorI2VuZGlmCisKKy8qIFZlcnNpb24gSW5mb3JtYXRpb24gKi8KKworI2RlZmluZSBTSVNVU0JfVkVSU0lPTgkJMAorI2RlZmluZSBTSVNVU0JfUkVWSVNJT04gCTAKKyNkZWZpbmUgU0lTVVNCX1BBVENITEVWRUwJNworCisvKiBVU0IgcmVsYXRlZCAqLworCisjZGVmaW5lIFNJU1VTQl9NSU5PUgkxMzMJCS8qIEZJWE1FICovCisKKy8qIFNpemUgb2YgdGhlIHNpc3VzYiBpbnB1dC9vdXRwdXQgYnVmZmVycyAqLworI2RlZmluZSBTSVNVU0JfSUJVRl9TSVpFICAweDAxMDAwCisjZGVmaW5lIFNJU1VTQl9PQlVGX1NJWkUgIDB4MTAwMDAJLyogZml4ZWQgKi8KKworI2RlZmluZSBOVU1PQlVGUyA4CQkJLyogbWF4IG51bWJlciBvZiBvdXRwdXQgYnVmZmVycy9vdXRwdXQgVVJCcyAqLworCisvKiBBYm91dCBlbmRpYW5uZXNzOgorICoKKyAqIDEpIEkvTyBwb3J0cywgUENJIGNvbmZpZyByZWdpc3RlcnMuIFRoZSByZWFkL3dyaXRlKCkKKyAqICAgIGNhbGxzIGVtdWxhdGUgaW5YL291dFguIEhlbmNlLCB0aGUgZGF0YSBpcworICogICAgZXhwZWN0ZWQvZGVsaXZlcmVkIGluIG1hY2hpbmUgZW5kaWFubmVzIGJ5IHRoaXMKKyAqICAgIGRyaXZlci4KKyAqIDIpIFZpZGVvIG1lbW9yeS4gVGhlIGRhdGEgaXMgY29waWVkIDE6MS4gVGhlcmUgaXMKKyAqICAgIG5vIHN3YXBwaW5nLiBFdmVyLiBUaGlzIG1lYW5zIGZvciB1c2VybGFuZCB0aGF0CisgKiAgICB0aGUgZGF0YSBoYXMgdG8gYmUgcHJlcGFyZWQgcHJvcGVybHkuIChIaW50OgorICogICAgdGhpbmsgZ3JhcGhpY3MgZGF0YSBmb3JtYXQsIGNvbW1hbmQgcXVldWUsCisgKiAgICBoYXJkd2FyZSBjdXJzb3IuKQorICogMykgTU1JTy4gRGF0YSBpcyBjb3BpZWQgMToxLiBNTUlPIG11c3QgYmUgc3dhcHBlZAorICogICAgcHJvcGVybHkgYnkgdXNlcmxhbmQuCisgKgorICovCisKKyNpZmRlZiBfX0JJR19FTkRJQU4KKyNkZWZpbmUgU0lTVVNCX0NPUlJFQ1RfRU5ESUFOTkVTU19QQUNLRVQocCkgCQlcCisJZG8gewkJCQkJCVwKKwkJcC0+aGVhZGVyICA9IGNwdV90b19sZTE2KHAtPmhlYWRlcik7CVwKKwkJcC0+YWRkcmVzcyA9IGNwdV90b19sZTMyKHAtPmFkZHJlc3MpOwlcCisJCXAtPmRhdGEgICAgPSBjcHVfdG9fbGUzMihwLT5kYXRhKTsJXAorCX0gd2hpbGUoMCkKKyNlbHNlCisjZGVmaW5lIFNJU1VTQl9DT1JSRUNUX0VORElBTk5FU1NfUEFDS0VUKHApCisjZW5kaWYKKworc3RydWN0IHNpc3VzYl91c2JfZGF0YTsKKworc3RydWN0IHNpc3VzYl91cmJfY29udGV4dCB7CQkvKiB1cmItPmNvbnRleHQgZm9yIG91dGJvdW5kIGJ1bGsgVVJCcyAqLworCXN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYjsKKwlpbnQgdXJiaW5kZXg7CisJaW50ICphY3R1YWxfbGVuZ3RoOworfTsKKworc3RydWN0IHNpc3VzYl91c2JfZGF0YSB7CisJc3RydWN0IHVzYl9kZXZpY2UgKnNpc3VzYl9kZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3Qga3JlZiBrcmVmOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfcTsJLyogZm9yIHN5bmNpbmQgYW5kIHRpbWVvdXRzICovCisJc3RydWN0IHNlbWFwaG9yZSBsb2NrOwkJLyogZ2VuZXJhbCByYWNlIGF2b2lkYW5jZSAqLworCXVuc2lnbmVkIGludCBpZm51bTsJCS8qIGludGVyZmFjZSBudW1iZXIgb2YgdGhlIFVTQiBkZXZpY2UgKi8KKwlpbnQgbWlub3I7CQkJLyogbWlub3IgKGZvciBsb2dnaW5nIGNsYXJpdHkpICovCisJaW50IGlzb3BlbjsJCQkvKiAhPTAgaWYgb3BlbiAqLworCWludCBwcmVzZW50OwkJCS8qICE9MCBpZiBkZXZpY2UgaXMgcHJlc2VudCBvbiB0aGUgYnVzICovCisJaW50IHJlYWR5OwkJCS8qICE9MCBpZiBkZXZpY2UgaXMgcmVhZHkgZm9yIHVzZXJsYW5kICovCisjaWZkZWYgU0lTVVNCX09MRF9DT05GSUdfQ09NUEFUCisJaW50IGlvY3RsMzJyZWdpc3RlcmVkOworI2VuZGlmCisJaW50IG51bW9idWZzOwkJCS8qIG51bWJlciBvZiBvYnVmcyA9IG51bWJlciBvZiBvdXQgdXJicyAqLworCWNoYXIgKm9idWZbTlVNT0JVRlNdLCAqaWJ1ZjsJLyogdHJhbnNmZXIgYnVmZmVycyAqLworCWludCBvYnVmc2l6ZSwgaWJ1ZnNpemU7CisJZG1hX2FkZHJfdCB0cmFuc2Zlcl9kbWFfb3V0W05VTU9CVUZTXTsKKwlkbWFfYWRkcl90IHRyYW5zZmVyX2RtYV9pbjsKKwlzdHJ1Y3QgdXJiICpzaXN1cmJvdXRbTlVNT0JVRlNdOworCXN0cnVjdCB1cmIgKnNpc3VyYmluOworCXVuc2lnbmVkIGNoYXIgdXJic3RhdHVzW05VTU9CVUZTXTsKKwl1bnNpZ25lZCBjaGFyIGNvbXBsZXRlaW47CisJc3RydWN0IHNpc3VzYl91cmJfY29udGV4dCB1cmJvdXRfY29udGV4dFtOVU1PQlVGU107CisJdW5zaWduZWQgbG9uZyBmbGFnYjA7CisJdW5zaWduZWQgbG9uZyB2cmFtYmFzZTsJCS8qIGZyYW1lYnVmZmVyIGJhc2UgKi8KKwl1bnNpZ25lZCBpbnQgdnJhbXNpemU7CQkvKiBmcmFtZWJ1ZmZlciBzaXplIChieXRlcykgKi8KKwl1bnNpZ25lZCBsb25nIG1taW9iYXNlOworCXVuc2lnbmVkIGludCBtbWlvc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGlvcG9ydGJhc2U7CisJdW5zaWduZWQgY2hhciBkZXZpbml0OwkJLyogZGV2aWNlIGluaXRpYWxpemVkPyAqLworCXVuc2lnbmVkIGNoYXIgZ2Z4aW5pdDsJCS8qIGdyYXBoaWNzIGNvcmUgaW5pdGlhbGl6ZWQ/ICovCisJdW5zaWduZWQgc2hvcnQgY2hpcGlkLCBjaGlwdmVuZG9yOworCXVuc2lnbmVkIHNob3J0IGNoaXByZXZpc2lvbjsKK307CisKKyNkZWZpbmUgdG9fc2lzdXNiX2RldihkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHNpc3VzYl91c2JfZGF0YSwga3JlZikKKworLyogVVNCIHRyYW5zcG9ydCByZWxhdGVkICovCisKKy8qIHVyYnN0YXR1cyAqLworI2RlZmluZSBTVV9VUkJfQlVTWSAgIDEKKyNkZWZpbmUgU1VfVVJCX0FMTE9DICAyCisKKy8qIEVuZHBvaW50cyAqLworCisjZGVmaW5lIFNJU1VTQl9FUF9HRlhfSU4JMHgwZQkvKiBnZnggc3RkIHBhY2tldCBvdXQoMGUpL2luKDhlKSAqLworI2RlZmluZSBTSVNVU0JfRVBfR0ZYX09VVAkweDBlCisKKyNkZWZpbmUgU0lTVVNCX0VQX0dGWF9CVUxLX09VVAkweDAxCS8qIGdmeCBtZW0gYnVsayBvdXQvaW4gKi8KKyNkZWZpbmUgU0lTVVNCX0VQX0dGWF9CVUxLX0lOCTB4MDIJLyogPyAyIGlzICJPVVQiID8gKi8KKworI2RlZmluZSBTSVNVU0JfRVBfR0ZYX0xCVUxLX09VVAkweDAzCS8qIGdmeCBsYXJnZSBtZW0gYnVsayBvdXQgKi8KKworI2RlZmluZSBTSVNVU0JfRVBfVU5LTk9XTl8wNAkweDA0CS8qID8gNCBpcyAiT1VUIiA/IC0gdW51c2VkICovCisKKyNkZWZpbmUgU0lTVVNCX0VQX0JSSURHRV9JTgkweDBkCS8qIE5ldDIyODAgb3V0KDBkKS9pbig4ZCkgKi8KKyNkZWZpbmUgU0lTVVNCX0VQX0JSSURHRV9PVVQJMHgwZAorCisjZGVmaW5lIFNJU1VTQl9UWVBFX01FTQkJMAorI2RlZmluZSBTSVNVU0JfVFlQRV9JTwkJMQorCitzdHJ1Y3Qgc2lzdXNiX3BhY2tldCB7CisJdW5zaWduZWQgc2hvcnQgaGVhZGVyOworCXUzMiBhZGRyZXNzOworCXUzMiBkYXRhOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKKyNkZWZpbmUgQ0xFQVJQQUNLRVQocGFja2V0KSBtZW1zZXQocGFja2V0LCAwLCAxMCkKKworLyogUENJIGJyaWRnZSByZWxhdGVkICovCisKKyNkZWZpbmUgU0lTVVNCX1BDSV9NRU1CQVNFCTB4ZDAwMDAwMDAKKyNkZWZpbmUgU0lTVVNCX1BDSV9NTUlPQkFTRQkweGU0MDAwMDAwCisjZGVmaW5lIFNJU1VTQl9QQ0lfSU9QT1JUQkFTRQkweDAwMDBkMDAwCisKKyNkZWZpbmUgU0lTVVNCX1BDSV9QU0VVRE9fTUVNQkFTRQkweDEwMDAwMDAwCisjZGVmaW5lIFNJU1VTQl9QQ0lfUFNFVURPX01NSU9CQVNFCTB4MjAwMDAwMDAKKyNkZWZpbmUgU0lTVVNCX1BDSV9QU0VVRE9fSU9QT1JUQkFTRQkweDAwMDBkMDAwCisjZGVmaW5lIFNJU1VTQl9QQ0lfUFNFVURPX1BDSUJBU0UJMHgwMDAxMDAwMAorCisjZGVmaW5lIFNJU1VTQl9QQ0lfTU1JT1NJWkUJKDEyOCoxMDI0KQorI2RlZmluZSBTSVNVU0JfUENJX1BDT05GU0laRQkweDVjCisKKy8qIGdyYXBoaWNzIGNvcmUgcmVsYXRlZCAqLworCisjZGVmaW5lIEFST0ZGU0VUCTB4NDAKKyNkZWZpbmUgQVJST0ZGU0VUCTB4NDEKKyNkZWZpbmUgR1JPRkZTRVQJMHg0ZQorI2RlZmluZSBTUk9GRlNFVAkweDQ0CisjZGVmaW5lIENST0ZGU0VUCTB4NTQKKyNkZWZpbmUgTUlTQ1JPRkZTRVQJMHg0YworI2RlZmluZSBNSVNDV09GRlNFVAkweDQyCisjZGVmaW5lIElOUFVUU1RBVE9GRlNFVCAweDVBCisjZGVmaW5lIFBBUlQxT0ZGU0VUCTB4MDQKKyNkZWZpbmUgUEFSVDJPRkZTRVQJMHgxMAorI2RlZmluZSBQQVJUM09GRlNFVAkweDEyCisjZGVmaW5lIFBBUlQ0T0ZGU0VUCTB4MTQKKyNkZWZpbmUgUEFSVDVPRkZTRVQJMHgxNgorI2RlZmluZSBDQVBUVVJFT0ZGU0VUCTB4MDAKKyNkZWZpbmUgVklERU9PRkZTRVQJMHgwMgorI2RlZmluZSBDT0xSRUdPRkZTRVQJMHg0OAorI2RlZmluZSBQRUxNQVNLT0ZGU0VUCTB4NDYKKyNkZWZpbmUgVkdBRU5BQkxFCTB4NDMKKworI2RlZmluZSBTSVNBUgkJU0lTVVNCX1BDSV9JT1BPUlRCQVNFICsgQVJPRkZTRVQKKyNkZWZpbmUgU0lTQVJSCQlTSVNVU0JfUENJX0lPUE9SVEJBU0UgKyBBUlJPRkZTRVQKKyNkZWZpbmUgU0lTR1IJCVNJU1VTQl9QQ0lfSU9QT1JUQkFTRSArIEdST0ZGU0VUCisjZGVmaW5lIFNJU1NSCQlTSVNVU0JfUENJX0lPUE9SVEJBU0UgKyBTUk9GRlNFVAorI2RlZmluZSBTSVNDUgkJU0lTVVNCX1BDSV9JT1BPUlRCQVNFICsgQ1JPRkZTRVQKKyNkZWZpbmUgU0lTTUlTQ1IJU0lTVVNCX1BDSV9JT1BPUlRCQVNFICsgTUlTQ1JPRkZTRVQKKyNkZWZpbmUgU0lTTUlTQ1cJU0lTVVNCX1BDSV9JT1BPUlRCQVNFICsgTUlTQ1dPRkZTRVQKKyNkZWZpbmUgU0lTSU5QU1RBVAlTSVNVU0JfUENJX0lPUE9SVEJBU0UgKyBJTlBVVFNUQVRPRkZTRVQKKyNkZWZpbmUgU0lTUEFSVDEJU0lTVVNCX1BDSV9JT1BPUlRCQVNFICsgUEFSVDFPRkZTRVQKKyNkZWZpbmUgU0lTUEFSVDIJU0lTVVNCX1BDSV9JT1BPUlRCQVNFICsgUEFSVDJPRkZTRVQKKyNkZWZpbmUgU0lTUEFSVDMJU0lTVVNCX1BDSV9JT1BPUlRCQVNFICsgUEFSVDNPRkZTRVQKKyNkZWZpbmUgU0lTUEFSVDQJU0lTVVNCX1BDSV9JT1BPUlRCQVNFICsgUEFSVDRPRkZTRVQKKyNkZWZpbmUgU0lTUEFSVDUJU0lTVVNCX1BDSV9JT1BPUlRCQVNFICsgUEFSVDVPRkZTRVQKKyNkZWZpbmUgU0lTQ0FQCQlTSVNVU0JfUENJX0lPUE9SVEJBU0UgKyBDQVBUVVJFT0ZGU0VUCisjZGVmaW5lIFNJU1ZJRAkJU0lTVVNCX1BDSV9JT1BPUlRCQVNFICsgVklERU9PRkZTRVQKKyNkZWZpbmUgU0lTQ09MSURYUglTSVNVU0JfUENJX0lPUE9SVEJBU0UgKyBDT0xSRUdPRkZTRVQgLSAxCisjZGVmaW5lIFNJU0NPTElEWAlTSVNVU0JfUENJX0lPUE9SVEJBU0UgKyBDT0xSRUdPRkZTRVQKKyNkZWZpbmUgU0lTQ09MREFUQQlTSVNVU0JfUENJX0lPUE9SVEJBU0UgKyBDT0xSRUdPRkZTRVQgKyAxCisjZGVmaW5lIFNJU0NPTDJJRFgJU0lTUEFSVDUKKyNkZWZpbmUgU0lTQ09MMkRBVEEJU0lTUEFSVDUgKyAxCisjZGVmaW5lIFNJU1BFTAkJU0lTVVNCX1BDSV9JT1BPUlRCQVNFICsgUEVMTUFTS09GRlNFVAorI2RlZmluZSBTSVNWR0FFTglTSVNVU0JfUENJX0lPUE9SVEJBU0UgKyBWR0FFTkFCTEUKKyNkZWZpbmUgU0lTREFDQQkJU0lTQ09MSURYCisjZGVmaW5lIFNJU0RBQ0QJCVNJU0NPTERBVEEKKworLyogaW9jdGwgcmVsYXRlZCAqLworCisvKiBTdHJ1Y3R1cmUgYXJndW1lbnQgZm9yIFNJU1VTQl9HRVRfSU5GTyBpb2N0bCAgKi8KK3N0cnVjdCBzaXN1c2JfaW5mbyB7CisJX191MzIJc2lzdXNiX2lkOwkJLyogZm9yIGlkZW50aWZ5aW5nIHNpc3VzYiAqLworI2RlZmluZSBTSVNVU0JfSUQgIDB4NTM0OTUzNTUJCS8qIElkZW50aWZ5IG15c2VsZiB3aXRoICdTSVNVJyAqLworCV9fdTgJc2lzdXNiX3ZlcnNpb247CisJX191OAlzaXN1c2JfcmV2aXNpb247CisJX191OAlzaXN1c2JfcGF0Y2hsZXZlbDsKKwlfX3U4CXNpc3VzYl9nZnhpbml0OwkJLyogZ3JhcGhpY3MgY29yZSBpbml0aWFsaXplZD8gKi8KKworCV9fdTMyCXNpc3VzYl92cmFtYmFzZTsKKwlfX3UzMglzaXN1c2JfbW1pb2Jhc2U7CisJX191MzIJc2lzdXNiX2lvYmFzZTsKKwlfX3UzMglzaXN1c2JfcGNpYmFzZTsKKworCV9fdTMyCXNpc3VzYl92cmFtc2l6ZTsJLyogZnJhbWVidWZmZXIgc2l6ZSBpbiBieXRlcyAqLworCisJX191MzIJc2lzdXNiX21pbm9yOworCisJX191MzIgICBzaXN1c2JfZmJkZXZhY3RpdmU7CS8qICE9IDAgaWYgZnJhbWVidWZmZXIgZGV2aWNlIGFjdGl2ZSAqLworCisJX191OAlzaXN1c2JfcmVzZXJ2ZWRbMzJdOwkvKiBmb3IgZnV0dXJlIHVzZSAqLworfTsKKworc3RydWN0IHNpc3VzYl9jb21tYW5kIHsKKwlfX3U4ICAgb3BlcmF0aW9uOwkvKiBzZWUgYmVsb3cgKi8KKwlfX3U4ICAgZGF0YTA7CQkvKiBvcGVyYXRpb24gZGVwZW5kZW50ICovCisJX191OCAgIGRhdGExOwkJLyogb3BlcmF0aW9uIGRlcGVuZGVudCAqLworCV9fdTggICBkYXRhMjsJCS8qIG9wZXJhdGlvbiBkZXBlbmRlbnQgKi8KKwlfX3UzMiAgZGF0YTM7CQkvKiBvcGVyYXRpb24gZGVwZW5kZW50ICovCisJX191MzIgIGRhdGE0OwkJLyogZm9yIGZ1dHVyZSB1c2UgKi8KK307CisKKyNkZWZpbmUgU1VDTURfR0VUICAgICAgMHgwMQkvKiBmb3IgYWxsOiBkYXRhMCA9IGluZGV4LCBkYXRhMyA9IHBvcnQgKi8KKyNkZWZpbmUgU1VDTURfU0VUICAgICAgMHgwMgkvKiBkYXRhMSA9IHZhbHVlICovCisjZGVmaW5lIFNVQ01EX1NFVE9SICAgIDB4MDMJLyogZGF0YTEgPSBvciAqLworI2RlZmluZSBTVUNNRF9TRVRBTkQgICAweDA0CS8qIGRhdGExID0gYW5kICovCisjZGVmaW5lIFNVQ01EX1NFVEFORE9SIDB4MDUJLyogZGF0YTEgPSBhbmQsIGRhdGEyID0gb3IgKi8KKyNkZWZpbmUgU1VDTURfU0VUTUFTSyAgMHgwNgkvKiBkYXRhMSA9IGRhdGEsIGRhdGEyID0gbWFzayAqLworCisjZGVmaW5lIFNVQ01EX0NMUlNDUiAgIDB4MDcJLyogZGF0YTA6MToyID0gbGVuZ3RoLCBkYXRhMyA9IGFkZHJlc3MgKi8KKworI2RlZmluZSBTSVNVU0JfQ09NTUFORAkJX0lPV1IoMHhGMywweDNELHN0cnVjdCBzaXN1c2JfY29tbWFuZCkKKyNkZWZpbmUgU0lTVVNCX0dFVF9DT05GSUdfU0laRSAJX0lPUigweEYzLDB4M0UsX191MzIpCisjZGVmaW5lIFNJU1VTQl9HRVRfQ09ORklHICAJX0lPUigweEYzLDB4M0Ysc3RydWN0IHNpc3VzYl9pbmZvKQorCisjZW5kaWYgLyogU0lTVVNCX0ggKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk2YWIzMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMKQEAgLTAsMCArMSw0MDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgIFVTQkxDRCBLZXJuZWwgRHJpdmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDEuMDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgIChDKSAyMDA1IEdlb3JnZXMgVG90aCA8Zy50b3RoQGUtYml6Lmx1PiAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwuIFNlZSBDT1BZSU5HIGluIHRoZSBwYWNrYWdlLiAgICAgICoKKyAqIEJhc2VkIG9uIHVzYi1za2VsZXRvbi5jIDIuMCBieSBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKSAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDI4LjAyLjA1IENvbXBsZXRlIHJld3JpdGUgb2YgdGhlIG9yaWdpbmFsIHVzYmxjZC5jIGRyaXZlciwgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgYmFzZWQgb24gdXNiX3NrZWxldG9uLmMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICBUaGlzIG5ldyBkcml2ZXIgYWxsb3dzIG1vcmUgdGhhbiBvbmUgVVNCLUxDRCB0byBiZSBjb25uZWN0ZWQgICAgICoKKyAqICAgICAgICAgIGFuZCBjb250cm9sbGVkLCBhdCBvbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJVU0JMQ0QgRHJpdmVyIFZlcnNpb24gMS4wNSIKKworI2RlZmluZSBVU0JMQ0RfTUlOT1IJCTE0NAorCisjZGVmaW5lIElPQ1RMX0dFVF9IQVJEX1ZFUlNJT04JMQorI2RlZmluZSBJT0NUTF9HRVRfRFJWX1ZFUlNJT04JMgorCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKKwl7IC5pZFZlbmRvciA9IDB4MTBEMiwgLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IsIH0sCisJeyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOworCisKK3N0cnVjdCB1c2JfbGNkIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqCXVkZXY7CQkJLyogaW5pdDogcHJvYmVfbGNkICovCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKiAgaW50ZXJmYWNlOwkJLyogdGhlIGludGVyZmFjZSBmb3IgdGhpcyBkZXZpY2UgKi8KKwl1bnNpZ25lZCBjaGFyICogICAgICAgICBidWxrX2luX2J1ZmZlcjsJCS8qIHRoZSBidWZmZXIgdG8gcmVjZWl2ZSBkYXRhICovCisJc2l6ZV90CQkJYnVsa19pbl9zaXplOwkJLyogdGhlIHNpemUgb2YgdGhlIHJlY2VpdmUgYnVmZmVyICovCisJX191OAkJCWJ1bGtfaW5fZW5kcG9pbnRBZGRyOwkvKiB0aGUgYWRkcmVzcyBvZiB0aGUgYnVsayBpbiBlbmRwb2ludCAqLworCV9fdTgJCQlidWxrX291dF9lbmRwb2ludEFkZHI7CS8qIHRoZSBhZGRyZXNzIG9mIHRoZSBidWxrIG91dCBlbmRwb2ludCAqLworCXN0cnVjdCBrcmVmICAgICAgICAgICAgIGtyZWY7Cit9OworI2RlZmluZSB0b19sY2RfZGV2KGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgdXNiX2xjZCwga3JlZikKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGxjZF9kcml2ZXI7CisKKworc3RhdGljIHZvaWQgbGNkX2RlbGV0ZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgdXNiX2xjZCAqZGV2ID0gdG9fbGNkX2RldihrcmVmKTsKKworCXVzYl9wdXRfZGV2KGRldi0+dWRldik7CisJa2ZyZWUgKGRldi0+YnVsa19pbl9idWZmZXIpOworCWtmcmVlIChkZXYpOworfQorCisKK3N0YXRpYyBpbnQgbGNkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVzYl9sY2QgKmRldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOworCWludCBzdWJtaW5vcjsKKwlpbnQgcmV0dmFsID0gMDsKKworCXN1Ym1pbm9yID0gaW1pbm9yKGlub2RlKTsKKworCWludGVyZmFjZSA9IHVzYl9maW5kX2ludGVyZmFjZSgmbGNkX2RyaXZlciwgc3VibWlub3IpOworCWlmICghaW50ZXJmYWNlKSB7CisJCWVyciAoIlVTQkxDRDogJXMgLSBlcnJvciwgY2FuJ3QgZmluZCBkZXZpY2UgZm9yIG1pbm9yICVkIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHN1Ym1pbm9yKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBleGl0OworCX0KKworCWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlpZiAoIWRldikgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogaW5jcmVtZW50IG91ciB1c2FnZSBjb3VudCBmb3IgdGhlIGRldmljZSAqLworCWtyZWZfZ2V0KCZkZXYtPmtyZWYpOworCisJLyogc2F2ZSBvdXIgb2JqZWN0IGluIHRoZSBmaWxlJ3MgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBkZXY7CisKK2V4aXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBsY2RfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdXNiX2xjZCAqZGV2OworCisJZGV2ID0gKHN0cnVjdCB1c2JfbGNkICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBkZWNyZW1lbnQgdGhlIGNvdW50IG9uIG91ciBkZXZpY2UgKi8KKwlrcmVmX3B1dCgmZGV2LT5rcmVmLCBsY2RfZGVsZXRlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgbGNkX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgdXNiX2xjZCAqZGV2OworCWludCByZXR2YWwgPSAwOworCWludCBieXRlc19yZWFkOworCisJZGV2ID0gKHN0cnVjdCB1c2JfbGNkICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJLyogZG8gYSBibG9ja2luZyBidWxrIHJlYWQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgZGV2aWNlICovCisJcmV0dmFsID0gdXNiX2J1bGtfbXNnKGRldi0+dWRldiwgCisJCQkgICAgICB1c2JfcmN2YnVsa3BpcGUoZGV2LT51ZGV2LCBkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKKwkJCSAgICAgIGRldi0+YnVsa19pbl9idWZmZXIsCisJCQkgICAgICBtaW4oZGV2LT5idWxrX2luX3NpemUsIGNvdW50KSwKKwkJCSAgICAgICZieXRlc19yZWFkLCAxMDAwMCk7CisKKwkvKiBpZiB0aGUgcmVhZCB3YXMgc3VjY2Vzc2Z1bCwgY29weSB0aGUgZGF0YSB0byB1c2Vyc3BhY2UgKi8KKwlpZiAoIXJldHZhbCkgeworCQlpZiAoY29weV90b191c2VyKGJ1ZmZlciwgZGV2LT5idWxrX2luX2J1ZmZlciwgYnl0ZXNfcmVhZCkpCisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQllbHNlCisJCQlyZXR2YWwgPSBieXRlc19yZWFkOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgbGNkX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgdXNiX2xjZCAqZGV2OworCXUxNiBiY2REZXZpY2U7CisJY2hhciBidWZbMzBdOworCisJZGV2ID0gKHN0cnVjdCB1c2JfbGNkICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIElPQ1RMX0dFVF9IQVJEX1ZFUlNJT046CisJCWJjZERldmljZSA9IGxlMTZfdG9fY3B1KChkZXYtPnVkZXYpLT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisJCXNwcmludGYoYnVmLCIlMWQlMWQuJTFkJTFkIiwKKwkJCShiY2REZXZpY2UgJiAweEYwMDApPj4xMiwKKwkJCShiY2REZXZpY2UgJiAweEYwMCk+PjgsCisJCQkoYmNkRGV2aWNlICYgMHhGMCk+PjQsCisJCQkoYmNkRGV2aWNlICYgMHhGKSk7CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLGJ1ZixzdHJsZW4oYnVmKSkhPTApCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisJY2FzZSBJT0NUTF9HRVRfRFJWX1ZFUlNJT046CisJCXNwcmludGYoYnVmLERSSVZFUl9WRVJTSU9OKTsKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsYnVmLHN0cmxlbihidWYpKSE9MCkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT1RUWTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxjZF93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9sY2QgKmRldjsKKworCWRldiA9IChzdHJ1Y3QgdXNiX2xjZCAqKXVyYi0+Y29udGV4dDsKKworCS8qIHN5bmMvYXN5bmMgdW5saW5rIGZhdWx0cyBhcmVuJ3QgZXJyb3JzICovCisJaWYgKHVyYi0+c3RhdHVzICYmCisJICAgICEodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fAorCSAgICAgIHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUIHx8CisgICAgICAgICAgICAgIHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pKSB7CisJCWRiZygiVVNCTENEOiAlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCX0KKworCS8qIGZyZWUgdXAgb3VyIGFsbG9jYXRlZCBidWZmZXIgKi8KKwl1c2JfYnVmZmVyX2ZyZWUodXJiLT5kZXYsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPnRyYW5zZmVyX2RtYSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGxjZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKiB1c2VyX2J1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHVzYl9sY2QgKmRldjsKKyAgICAgICAgaW50IHJldHZhbCA9IDA7CisJc3RydWN0IHVyYiAqdXJiID0gTlVMTDsKKwljaGFyICpidWYgPSBOVUxMOworCQorCWRldiA9IChzdHJ1Y3QgdXNiX2xjZCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwkKKwkvKiB2ZXJpZnkgdGhhdCB3ZSBhY3R1YWxseSBoYXZlIHNvbWUgZGF0YSB0byB3cml0ZSAqLworCWlmIChjb3VudCA9PSAwKQorCQlnb3RvIGV4aXQ7CisKKwkvKiBjcmVhdGUgYSB1cmIsIGFuZCBhIGJ1ZmZlciBmb3IgaXQsIGFuZCBjb3B5IHRoZSBkYXRhIHRvIHRoZSB1cmIgKi8KKwl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghdXJiKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCQorCWJ1ZiA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LT51ZGV2LCBjb3VudCwgR0ZQX0tFUk5FTCwgJnVyYi0+dHJhbnNmZXJfZG1hKTsKKwlpZiAoIWJ1ZikgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKwkKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZmZlciwgY291bnQpKSB7CisJCXJldHZhbCA9IC1FRkFVTFQ7CisJCWdvdG8gZXJyb3I7CisJfQorCQorCS8qIGluaXRpYWxpemUgdGhlIHVyYiBwcm9wZXJseSAqLworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgZGV2LT51ZGV2LAorCQkJICB1c2Jfc25kYnVsa3BpcGUoZGV2LT51ZGV2LCBkZXYtPmJ1bGtfb3V0X2VuZHBvaW50QWRkciksCisJCQkgIGJ1ZiwgY291bnQsIGxjZF93cml0ZV9idWxrX2NhbGxiYWNrLCBkZXYpOworCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJCisJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGJ1bGsgcG9ydCAqLworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldHZhbCkgeworCQllcnIoIlVTQkxDRDogJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXR2YWwpOworCQlnb3RvIGVycm9yOworCX0KKwkKKwkvKiByZWxlYXNlIG91ciByZWZlcmVuY2UgdG8gdGhpcyB1cmIsIHRoZSBVU0IgY29yZSB3aWxsIGV2ZW50dWFsbHkgZnJlZSBpdCBlbnRpcmVseSAqLworCXVzYl9mcmVlX3VyYih1cmIpOworCitleGl0OgorCXJldHVybiBjb3VudDsKKworZXJyb3I6CisJdXNiX2J1ZmZlcl9mcmVlKGRldi0+dWRldiwgY291bnQsIGJ1ZiwgdXJiLT50cmFuc2Zlcl9kbWEpOworCXVzYl9mcmVlX3VyYih1cmIpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxjZF9mb3BzID0geworICAgICAgICAub3duZXIgPSAgICAgICAgVEhJU19NT0RVTEUsCisgICAgICAgIC5yZWFkID0gICAgICAgICBsY2RfcmVhZCwKKyAgICAgICAgLndyaXRlID0gICAgICAgIGxjZF93cml0ZSwKKyAgICAgICAgLm9wZW4gPSAgICAgICAgIGxjZF9vcGVuLAorCS5pb2N0bCA9ICAgICAgICBsY2RfaW9jdGwsCisgICAgICAgIC5yZWxlYXNlID0gICAgICBsY2RfcmVsZWFzZSwKK307CisKKy8qCisgKiAgKiB1c2IgY2xhc3MgZHJpdmVyIGluZm8gaW4gb3JkZXIgdG8gZ2V0IGEgbWlub3IgbnVtYmVyIGZyb20gdGhlIHVzYiBjb3JlLAorICogICAqIGFuZCB0byBoYXZlIHRoZSBkZXZpY2UgcmVnaXN0ZXJlZCB3aXRoIGRldmZzIGFuZCB0aGUgZHJpdmVyIGNvcmUKKyAqICAgICovCitzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgbGNkX2NsYXNzID0geworICAgICAgICAubmFtZSA9ICAgICAgICAgInVzYi9sY2QlZCIsCisgICAgICAgIC5mb3BzID0gICAgICAgICAmbGNkX2ZvcHMsCisgICAgICAgIC5tb2RlID0gICAgICAgICBTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JV0dSUCB8IFNfSVJPVEgsCisgICAgICAgIC5taW5vcl9iYXNlID0gICBVU0JMQ0RfTUlOT1IsCit9OworCitzdGF0aWMgaW50IGxjZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9sY2QgKmRldiA9IE5VTEw7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYzsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCXNpemVfdCBidWZmZXJfc2l6ZTsKKwlpbnQgaTsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLworCWRldiA9IGttYWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJZXJyKCJPdXQgb2YgbWVtb3J5Iik7CisJCWdvdG8gZXJyb3I7CisJfQorCW1lbXNldChkZXYsIDB4MDAsIHNpemVvZigqZGV2KSk7CisJa3JlZl9pbml0KCZkZXYtPmtyZWYpOworCisJZGV2LT51ZGV2ID0gdXNiX2dldF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpKTsKKwlkZXYtPmludGVyZmFjZSA9IGludGVyZmFjZTsKKworCWlmIChsZTE2X3RvX2NwdShkZXYtPnVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSAweDAwMDEpIHsKKwkJd2FybihLRVJOX0lORk8gIlVTQkxDRCBtb2RlbCBub3Qgc3VwcG9ydGVkLiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJCisJLyogc2V0IHVwIHRoZSBlbmRwb2ludCBpbmZvcm1hdGlvbiAqLworCS8qIHVzZSBvbmx5IHRoZSBmaXJzdCBidWxrLWluIGFuZCBidWxrLW91dCBlbmRwb2ludHMgKi8KKwlpZmFjZV9kZXNjID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKKwlmb3IgKGkgPSAwOyBpIDwgaWZhY2VfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyArK2kpIHsKKwkJZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYzsKKworCQlpZiAoIWRldi0+YnVsa19pbl9lbmRwb2ludEFkZHIgJiYKKwkJICAgIChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pICYmCisJCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKKwkJCQkJPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykpIHsKKwkJCS8qIHdlIGZvdW5kIGEgYnVsayBpbiBlbmRwb2ludCAqLworCQkJYnVmZmVyX3NpemUgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOworCQkJZGV2LT5idWxrX2luX3NpemUgPSBidWZmZXJfc2l6ZTsKKwkJCWRldi0+YnVsa19pbl9lbmRwb2ludEFkZHIgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJCWRldi0+YnVsa19pbl9idWZmZXIgPSBrbWFsbG9jKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghZGV2LT5idWxrX2luX2J1ZmZlcikgeworCQkJCWVycigiQ291bGQgbm90IGFsbG9jYXRlIGJ1bGtfaW5fYnVmZmVyIik7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJfQorCisJCWlmICghZGV2LT5idWxrX291dF9lbmRwb2ludEFkZHIgJiYKKwkJICAgICEoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSAmJgorCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCisJCQkJCT09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspKSB7CisJCQkvKiB3ZSBmb3VuZCBhIGJ1bGsgb3V0IGVuZHBvaW50ICovCisJCQlkZXYtPmJ1bGtfb3V0X2VuZHBvaW50QWRkciA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCQl9CisJfQorCWlmICghKGRldi0+YnVsa19pbl9lbmRwb2ludEFkZHIgJiYgZGV2LT5idWxrX291dF9lbmRwb2ludEFkZHIpKSB7CisJCWVycigiQ291bGQgbm90IGZpbmQgYm90aCBidWxrLWluIGFuZCBidWxrLW91dCBlbmRwb2ludHMiKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBzYXZlIG91ciBkYXRhIHBvaW50ZXIgaW4gdGhpcyBpbnRlcmZhY2UgZGV2aWNlICovCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGRldik7CisKKwkvKiB3ZSBjYW4gcmVnaXN0ZXIgdGhlIGRldmljZSBub3csIGFzIGl0IGlzIHJlYWR5ICovCisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRlcmZhY2UsICZsY2RfY2xhc3MpOworCWlmIChyZXR2YWwpIHsKKwkJLyogc29tZXRoaW5nIHByZXZlbnRlZCB1cyBmcm9tIHJlZ2lzdGVyaW5nIHRoaXMgZHJpdmVyICovCisJCWVycigiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLiIpOworCQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaSA9IGxlMTZfdG9fY3B1KGRldi0+dWRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworCisJaW5mbygiVVNCTENEIFZlcnNpb24gJTFkJTFkLiUxZCUxZCBmb3VuZCBhdCBhZGRyZXNzICVkIiwKKwkJKGkgJiAweEYwMDApPj4xMiwoaSAmIDB4RjAwKT4+OCwoaSAmIDB4RjApPj40LChpICYgMHhGKSwKKwkJZGV2LT51ZGV2LT5kZXZudW0pOworCisJLyogbGV0IHRoZSB1c2VyIGtub3cgd2hhdCBub2RlIHRoaXMgZGV2aWNlIGlzIG5vdyBhdHRhY2hlZCB0byAqLworCWluZm8oIlVTQiBMQ0QgZGV2aWNlIG5vdyBhdHRhY2hlZCB0byBVU0JMQ0QtJWQiLCBpbnRlcmZhY2UtPm1pbm9yKTsKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJaWYgKGRldikKKwkJa3JlZl9wdXQoJmRldi0+a3JlZiwgbGNkX2RlbGV0ZSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgbGNkX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2xjZCAqZGV2OworICAgICAgICBpbnQgbWlub3IgPSBpbnRlcmZhY2UtPm1pbm9yOworCisgICAgICAgIC8qIHByZXZlbnQgc2tlbF9vcGVuKCkgZnJvbSByYWNpbmcgc2tlbF9kaXNjb25uZWN0KCkgKi8KKyAgICAgICAgbG9ja19rZXJuZWwoKTsKKworICAgICAgICBkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisgICAgICAgIHVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKworICAgICAgICAvKiBnaXZlIGJhY2sgb3VyIG1pbm9yICovCisgICAgICAgIHVzYl9kZXJlZ2lzdGVyX2RldihpbnRlcmZhY2UsICZsY2RfY2xhc3MpOworIAorCXVubG9ja19rZXJuZWwoKTsKKworCS8qIGRlY3JlbWVudCBvdXIgdXNhZ2UgY291bnQgKi8KKwlrcmVmX3B1dCgmZGV2LT5rcmVmLCBsY2RfZGVsZXRlKTsKKworCWluZm8oIlVTQiBMQ0QgIyVkIG5vdyBkaXNjb25uZWN0ZWQiLCBtaW5vcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBsY2RfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJ1c2JsY2QiLAorCS5wcm9iZSA9CWxjZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CWxjZF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdXNiX2xjZF9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKwkKKwlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmxjZF9kcml2ZXIpOworCWlmIChyZXN1bHQpCisJCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkIiwgcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IHVzYl9sY2RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZsY2RfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNiX2xjZF9pbml0KTsKK21vZHVsZV9leGl0KHVzYl9sY2RfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkdlb3JnZXMgVG90aCA8Zy50b3RoQGUtYml6Lmx1PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNibGVkLmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMzI5ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxlZC5jCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogVVNCIExFRCBkcml2ZXIgLSAxLjEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKwkjZGVmaW5lIERFQlVHCTEKKyNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkdyZWcgS3JvYWgtSGFydG1hbiwgZ3JlZ0Brcm9haC5jb20iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgTEVEIERyaXZlciIKKworI2RlZmluZSBWRU5ET1JfSUQJMHgwZmM1CisjZGVmaW5lIFBST0RVQ1RfSUQJMHgxMjIzCisKKy8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVkVORE9SX0lELCBQUk9EVUNUX0lEKSB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlKTsKKworc3RydWN0IHVzYl9sZWQgeworCXN0cnVjdCB1c2JfZGV2aWNlICoJdWRldjsKKwl1bnNpZ25lZCBjaGFyCQlibHVlOworCXVuc2lnbmVkIGNoYXIJCXJlZDsKKwl1bnNpZ25lZCBjaGFyCQlncmVlbjsKK307CisKKyNkZWZpbmUgQkxVRQkweDA0CisjZGVmaW5lIFJFRAkweDAyCisjZGVmaW5lIEdSRUVOCTB4MDEKK3N0YXRpYyB2b2lkIGNoYW5nZV9jb2xvcihzdHJ1Y3QgdXNiX2xlZCAqbGVkKQoreworCWludCByZXR2YWw7CisJdW5zaWduZWQgY2hhciBjb2xvciA9IDB4MDc7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCisJYnVmZmVyID0ga21hbGxvYyg4LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKCZsZWQtPnVkZXYtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGxlZC0+Ymx1ZSkKKwkJY29sb3IgJj0gfihCTFVFKTsKKwlpZiAobGVkLT5yZWQpCisJCWNvbG9yICY9IH4oUkVEKTsKKwlpZiAobGVkLT5ncmVlbikKKwkJY29sb3IgJj0gfihHUkVFTik7CisJZGV2X2RiZygmbGVkLT51ZGV2LT5kZXYsCisJCSJibHVlID0gJWQsIHJlZCA9ICVkLCBncmVlbiA9ICVkLCBjb2xvciA9ICUuMnhcbiIsCisJCWxlZC0+Ymx1ZSwgbGVkLT5yZWQsIGxlZC0+Z3JlZW4sIGNvbG9yKTsKKworCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhsZWQtPnVkZXYsCisJCQkJdXNiX3NuZGN0cmxwaXBlKGxlZC0+dWRldiwgMCksCisJCQkJMHgxMiwKKwkJCQkweGM4LAorCQkJCSgweDAyICogMHgxMDApICsgMHgwYSwKKwkJCQkoMHgwMCAqIDB4MTAwKSArIGNvbG9yLAorCQkJCWJ1ZmZlciwJCisJCQkJOCwKKwkJCQkyMDAwKTsKKwlpZiAocmV0dmFsKQorCQlkZXZfZGJnKCZsZWQtPnVkZXYtPmRldiwgInJldHZhbCA9ICVkXG4iLCByZXR2YWwpOworCWtmcmVlKGJ1ZmZlcik7Cit9CisKKyNkZWZpbmUgc2hvd19zZXQodmFsdWUpCVwKK3N0YXRpYyBzc2l6ZV90IHNob3dfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikJCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCisJc3RydWN0IHVzYl9sZWQgKmxlZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CQkJXAorCQkJCQkJCQkJXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBsZWQtPnZhbHVlKTsJCQlcCit9CQkJCQkJCQkJXAorc3RhdGljIHNzaXplX3Qgc2V0XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKKwlzdHJ1Y3QgdXNiX2xlZCAqbGVkID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJCQlcCisJaW50IHRlbXAgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsJCQlcCisJCQkJCQkJCQlcCisJbGVkLT52YWx1ZSA9IHRlbXA7CQkJCQkJXAorCWNoYW5nZV9jb2xvcihsZWQpOwkJCQkJCVwKKwlyZXR1cm4gY291bnQ7CQkJCQkJCVwKK30JCQkJCQkJCQlcCitzdGF0aWMgREVWSUNFX0FUVFIodmFsdWUsIFNfSVdVR08gfCBTX0lSVUdPLCBzaG93XyMjdmFsdWUsIHNldF8jI3ZhbHVlKTsKK3Nob3dfc2V0KGJsdWUpOworc2hvd19zZXQocmVkKTsKK3Nob3dfc2V0KGdyZWVuKTsKKworc3RhdGljIGludCBsZWRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCXN0cnVjdCB1c2JfbGVkICpkZXYgPSBOVUxMOworCWludCByZXR2YWwgPSAtRU5PTUVNOworCisJZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9sZWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisJbWVtc2V0IChkZXYsIDB4MDAsIHNpemVvZiAoKmRldikpOworCisJZGV2LT51ZGV2ID0gdXNiX2dldF9kZXYodWRldik7CisKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRlcmZhY2UsIGRldik7CisKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfYmx1ZSk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3JlZCk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2dyZWVuKTsKKworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiBMRUQgZGV2aWNlIG5vdyBhdHRhY2hlZFxuIik7CisJcmV0dXJuIDA7CisKK2Vycm9yOgorCWtmcmVlKGRldik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgbGVkX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2xlZCAqZGV2OworCisJZGV2ID0gdXNiX2dldF9pbnRmZGF0YSAoaW50ZXJmYWNlKTsKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRlcmZhY2UsIE5VTEwpOworCisJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2JsdWUpOworCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9yZWQpOworCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9ncmVlbik7CisKKwl1c2JfcHV0X2RldihkZXYtPnVkZXYpOworCisJa2ZyZWUoZGV2KTsKKworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiBMRUQgbm93IGRpc2Nvbm5lY3RlZFxuIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBsZWRfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJ1c2JsZWQiLAorCS5wcm9iZSA9CWxlZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CWxlZF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdXNiX2xlZF9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbCA9IDA7CisKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmxlZF9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkIiwgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX2xlZF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmxlZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCAodXNiX2xlZF9pbml0KTsKK21vZHVsZV9leGl0ICh1c2JfbGVkX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNidGVzdC5jIGIvZHJpdmVycy91c2IvbWlzYy91c2J0ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEwNGYyOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNidGVzdC5jCkBAIC0wLDAgKzEsMjE0MCBAQAorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2lmICFkZWZpbmVkIChERUJVRykgJiYgZGVmaW5lZCAoQ09ORklHX1VTQl9ERUJVRykKKyMgICBkZWZpbmUgREVCVUcKKyNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvLyBGSVhNRSBtYWtlIHRoZXNlIHB1YmxpYyBzb21ld2hlcmU7IHVzYmRldmZzLmg/CisvLworc3RydWN0IHVzYnRlc3RfcGFyYW0geworCS8vIGlucHV0cworCXVuc2lnbmVkCQl0ZXN0X251bTsJLyogMC4uKFRFU1RfQ0FTRVMtMSkgKi8KKwl1bnNpZ25lZAkJaXRlcmF0aW9uczsKKwl1bnNpZ25lZAkJbGVuZ3RoOworCXVuc2lnbmVkCQl2YXJ5OworCXVuc2lnbmVkCQlzZ2xlbjsKKworCS8vIG91dHB1dHMKKwlzdHJ1Y3QgdGltZXZhbAkJZHVyYXRpb247Cit9OworI2RlZmluZSBVU0JURVNUX1JFUVVFU1QJX0lPV1IoJ1UnLCAxMDAsIHN0cnVjdCB1c2J0ZXN0X3BhcmFtKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lCUdFTkVSSUMJCS8qIGxldCBwcm9iZSgpIGJpbmQgdXNpbmcgbW9kdWxlIHBhcmFtcyAqLworCisvKiBTb21lIGRldmljZXMgdGhhdCBjYW4gYmUgdXNlZCBmb3IgdGVzdGluZyB3aWxsIGhhdmUgInJlYWwiIGRyaXZlcnMuCisgKiBFbnRyaWVzIGZvciB0aG9zZSBuZWVkIHRvIGJlIGVuYWJsZWQgaGVyZSBieSBoYW5kLCBhZnRlciBkaXNhYmxpbmcKKyAqIHRoYXQgInJlYWwiIGRyaXZlci4KKyAqLworLy8jZGVmaW5lCUlCT1QyCQkvKiBncmFiIGlCT1QyIHdlYmNhbXMgKi8KKy8vI2RlZmluZQlLRVlTUEFOXzE5UWkJLyogZ3JhYiB1bi1yZW51bWVyYXRlZCBzZXJpYWwgYWRhcHRlciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdHJ1Y3QgdXNidGVzdF9pbmZvIHsKKwljb25zdCBjaGFyCQkqbmFtZTsKKwl1OAkJCWVwX2luOwkJLyogYnVsay9pbnRyIHNvdXJjZSAqLworCXU4CQkJZXBfb3V0OwkJLyogYnVsay9pbnRyIHNpbmsgKi8KKwl1bnNpZ25lZAkJYXV0b2NvbmYgOiAxOworCXVuc2lnbmVkCQljdHJsX291dCA6IDE7CisJdW5zaWduZWQJCWlzbyA6IDE7CS8qIHRyeSBpc28gaW4vb3V0ICovCisJaW50CQkJYWx0OworfTsKKworLyogdGhpcyBpcyBhY2Nlc3NlZCBvbmx5IHRocm91Z2ggdXNiZnMgaW9jdGwgY2FsbHMuCisgKiBvbmUgaW9jdGwgdG8gaXNzdWUgYSB0ZXN0IC4uLiBvbmUgbG9jayBwZXIgZGV2aWNlLgorICogdGVzdHMgY3JlYXRlIG90aGVyIHRocmVhZHMgaWYgdGhleSBuZWVkIHRoZW0uCisgKiB1cmJzIGFuZCBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHksCisgKiBhbmQgZGF0YSBnZW5lcmF0ZWQgZGV0ZXJtaW5pc3RpY2FsbHkuCisgKi8KK3N0cnVjdCB1c2J0ZXN0X2RldiB7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGY7CisJc3RydWN0IHVzYnRlc3RfaW5mbwkqaW5mbzsKKwlpbnQJCQlpbl9waXBlOworCWludAkJCW91dF9waXBlOworCWludAkJCWluX2lzb19waXBlOworCWludAkJCW91dF9pc29fcGlwZTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmlzb19pbiwgKmlzb19vdXQ7CisJc3RydWN0IHNlbWFwaG9yZQlzZW07CisKKyNkZWZpbmUgVEJVRl9TSVpFCTI1NgorCXU4CQkJKmJ1ZjsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZSAqdGVzdGRldl90b191c2JkZXYgKHN0cnVjdCB1c2J0ZXN0X2RldiAqdGVzdCkKK3sKKwlyZXR1cm4gaW50ZXJmYWNlX3RvX3VzYmRldiAodGVzdC0+aW50Zik7Cit9CisKKy8qIHNldCB1cCBhbGwgdXJicyBzbyB0aGV5IGNhbiBiZSB1c2VkIHdpdGggZWl0aGVyIGJ1bGsgb3IgaW50ZXJydXB0ICovCisjZGVmaW5lCUlOVEVSUlVQVF9SQVRFCQkxCS8qIG1zZWMvdHJhbnNmZXIgKi8KKworI2RlZmluZSB4cHJpbnRrKHRkZXYsbGV2ZWwsZm10LGFyZ3MuLi4pIFwKKwlkZXZfcHJpbnRrKGxldmVsICwgICYodGRldiktPmludGYtPmRldiAsICBmbXQgLCAgIyMgYXJncykKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERCRyhkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fREVCVUcgLCBmbXQgLCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREJHKGRldixmbXQsYXJncy4uLikgXAorCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgVkVSQk9TRQorI2RlZmluZSBWREJHIERCRworI2Vsc2UKKyNkZWZpbmUgVkRCRyhkZXYsZm10LGFyZ3MuLi4pIFwKKwlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYJLyogVkVSQk9TRSAqLworCisjZGVmaW5lIEVSUk9SKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9FUlIgLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBXQVJOKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9XQVJOSU5HICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgSU5GTyhkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fSU5GTyAsIGZtdCAsICMjIGFyZ3MpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQKK2dldF9lbmRwb2ludHMgKHN0cnVjdCB1c2J0ZXN0X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlpbnQJCQkJdG1wOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UJKmFsdDsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQJKmluLCAqb3V0OworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludAkqaXNvX2luLCAqaXNvX291dDsKKwlzdHJ1Y3QgdXNiX2RldmljZQkJKnVkZXY7CisKKwlmb3IgKHRtcCA9IDA7IHRtcCA8IGludGYtPm51bV9hbHRzZXR0aW5nOyB0bXArKykgeworCQl1bnNpZ25lZAllcDsKKworCQlpbiA9IG91dCA9IE5VTEw7CisJCWlzb19pbiA9IGlzb19vdXQgPSBOVUxMOworCQlhbHQgPSBpbnRmLT5hbHRzZXR0aW5nICsgdG1wOworCisJCS8qIHRha2UgdGhlIGZpcnN0IGFsdHNldHRpbmcgd2l0aCBpbi1idWxrICsgb3V0LWJ1bGs7CisJCSAqIGlnbm9yZSBvdGhlciBlbmRwb2ludHMgYW5kIGFsdHNldHR0aW5ncy4KKwkJICovCisJCWZvciAoZXAgPSAwOyBlcCA8IGFsdC0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBlcCsrKSB7CisJCQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQJKmU7CisKKwkJCWUgPSBhbHQtPmVuZHBvaW50ICsgZXA7CisJCQlzd2l0Y2ggKGUtPmRlc2MuYm1BdHRyaWJ1dGVzKSB7CisJCQljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEs6CisJCQkJYnJlYWs7CisJCQljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0M6CisJCQkJaWYgKGRldi0+aW5mby0+aXNvKQorCQkJCQlnb3RvIHRyeV9pc287CisJCQkJLy8gRkFMTFRIUk9VR0gKKwkJCWRlZmF1bHQ6CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoZS0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgeworCQkJCWlmICghaW4pCisJCQkJCWluID0gZTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKCFvdXQpCisJCQkJCW91dCA9IGU7CisJCQl9CisJCQljb250aW51ZTsKK3RyeV9pc286CisJCQlpZiAoZS0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgeworCQkJCWlmICghaXNvX2luKQorCQkJCQlpc29faW4gPSBlOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoIWlzb19vdXQpCisJCQkJCWlzb19vdXQgPSBlOworCQkJfQorCQl9CisJCWlmICgoaW4gJiYgb3V0KSAgfHwgIChpc29faW4gJiYgaXNvX291dCkpCisJCQlnb3RvIGZvdW5kOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKKworZm91bmQ6CisJdWRldiA9IHRlc3RkZXZfdG9fdXNiZGV2IChkZXYpOworCWlmIChhbHQtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmcgIT0gMCkgeworCQl0bXAgPSB1c2Jfc2V0X2ludGVyZmFjZSAodWRldiwKKwkJCQlhbHQtPmRlc2MuYkludGVyZmFjZU51bWJlciwKKwkJCQlhbHQtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmcpOworCQlpZiAodG1wIDwgMCkKKwkJCXJldHVybiB0bXA7CisJfQorCisJaWYgKGluKSB7CisJCWRldi0+aW5fcGlwZSA9IHVzYl9yY3ZidWxrcGlwZSAodWRldiwKKwkJCWluLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCQlkZXYtPm91dF9waXBlID0gdXNiX3NuZGJ1bGtwaXBlICh1ZGV2LAorCQkJb3V0LT5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCX0KKwlpZiAoaXNvX2luKSB7CisJCWRldi0+aXNvX2luID0gJmlzb19pbi0+ZGVzYzsKKwkJZGV2LT5pbl9pc29fcGlwZSA9IHVzYl9yY3Zpc29jcGlwZSAodWRldiwKKwkJCQlpc29faW4tPmRlc2MuYkVuZHBvaW50QWRkcmVzcworCQkJCQkmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJCWRldi0+aXNvX291dCA9ICZpc29fb3V0LT5kZXNjOworCQlkZXYtPm91dF9pc29fcGlwZSA9IHVzYl9zbmRpc29jcGlwZSAodWRldiwKKwkJCQlpc29fb3V0LT5kZXNjLmJFbmRwb2ludEFkZHJlc3MKKwkJCQkJJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCX0KKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogU3VwcG9ydCBmb3IgdGVzdGluZyBiYXNpYyBub24tcXVldWVkIEkvTyBzdHJlYW1zLgorICoKKyAqIFRoZXNlIGp1c3QgcGFja2FnZSB1cmJzIGFzIHJlcXVlc3RzIHRoYXQgY2FuIGJlIGVhc2lseSBjYW5jZWxlZC4KKyAqIEVhY2ggdXJiJ3MgZGF0YSBidWZmZXIgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkOyBjYWxsZXJzIGNhbiBmaWxsCisgKiB0aGVtIHdpdGggbm9uLXplcm8gdGVzdCBkYXRhIChvciB0ZXN0IGZvciBpdCkgd2hlbiBhcHByb3ByaWF0ZS4KKyAqLworCitzdGF0aWMgdm9pZCBzaW1wbGVfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJY29tcGxldGUgKChzdHJ1Y3QgY29tcGxldGlvbiAqKSB1cmItPmNvbnRleHQpOworfQorCitzdGF0aWMgc3RydWN0IHVyYiAqc2ltcGxlX2FsbG9jX3VyYiAoCisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXYsCisJaW50CQkJcGlwZSwKKwl1bnNpZ25lZCBsb25nCQlieXRlcworKQoreworCXN0cnVjdCB1cmIJCSp1cmI7CisKKwlpZiAoYnl0ZXMgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwl1cmIgPSB1c2JfYWxsb2NfdXJiICgwLCBTTEFCX0tFUk5FTCk7CisJaWYgKCF1cmIpCisJCXJldHVybiB1cmI7CisJdXNiX2ZpbGxfYnVsa191cmIgKHVyYiwgdWRldiwgcGlwZSwgTlVMTCwgYnl0ZXMsIHNpbXBsZV9jYWxsYmFjaywgTlVMTCk7CisJdXJiLT5pbnRlcnZhbCA9ICh1ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJCT8gKElOVEVSUlVQVF9SQVRFIDw8IDMpCisJCQk6IElOVEVSUlVQVF9SQVRFOworCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwlpZiAodXNiX3BpcGVpbiAocGlwZSkpCisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX1NIT1JUX05PVF9PSzsKKwl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IHVzYl9idWZmZXJfYWxsb2MgKHVkZXYsIGJ5dGVzLCBTTEFCX0tFUk5FTCwKKwkJCSZ1cmItPnRyYW5zZmVyX2RtYSk7CisJaWYgKCF1cmItPnRyYW5zZmVyX2J1ZmZlcikgeworCQl1c2JfZnJlZV91cmIgKHVyYik7CisJCXVyYiA9IE5VTEw7CisJfSBlbHNlCisJCW1lbXNldCAodXJiLT50cmFuc2Zlcl9idWZmZXIsIDAsIGJ5dGVzKTsKKwlyZXR1cm4gdXJiOworfQorCitzdGF0aWMgdW5zaWduZWQgcGF0dGVybiA9IDA7Cittb2R1bGVfcGFyYW0gKHBhdHRlcm4sIHVpbnQsIFNfSVJVR08pOworLy8gTU9EVUxFX1BBUk1fREVTQyAocGF0dGVybiwgImkvbyBwYXR0ZXJuICgwID09IHplcm9lcykiKTsKKworc3RhdGljIGlubGluZSB2b2lkIHNpbXBsZV9maWxsX2J1ZiAoc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkCWk7CisJdTgJCSpidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwl1bnNpZ25lZAlsZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisKKwlzd2l0Y2ggKHBhdHRlcm4pIHsKKwlkZWZhdWx0OgorCQkvLyBGQUxMVEhST1VHSAorCWNhc2UgMDoKKwkJbWVtc2V0IChidWYsIDAsIGxlbik7CisJCWJyZWFrOworCWNhc2UgMToJCQkvKiBtb2Q2MyAqLworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCQkqYnVmKysgPSAodTgpIChpICUgNjMpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNpbXBsZV9jaGVja19idWYgKHN0cnVjdCB1cmIgKnVyYikKK3sKKwl1bnNpZ25lZAlpOworCXU4CQlleHBlY3RlZDsKKwl1OAkJKmJ1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXVuc2lnbmVkCWxlbiA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKywgYnVmKyspIHsKKwkJc3dpdGNoIChwYXR0ZXJuKSB7CisJCS8qIGFsbC16ZXJvZXMgaGFzIG5vIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgKi8KKwkJY2FzZSAwOgorCQkJZXhwZWN0ZWQgPSAwOworCQkJYnJlYWs7CisJCS8qIG1vZDYzIHN0YXlzIGluIHN5bmMgd2l0aCBzaG9ydC10ZXJtaW5hdGVkIHRyYW5zZmVycywKKwkJICogb3Igb3RoZXJ3aXNlIHdoZW4gaG9zdCBhbmQgZ2FkZ2V0IGFncmVlIG9uIGhvdyBsYXJnZQorCQkgKiBlYWNoIHVzYiB0cmFuc2ZlciByZXF1ZXN0IHNob3VsZCBiZS4gIHJlc3luYyBpcyBkb25lCisJCSAqIHdpdGggc2V0X2ludGVyZmFjZSBvciBzZXRfY29uZmlnLgorCQkgKi8KKwkJY2FzZSAxOgkJCS8qIG1vZDYzICovCisJCQlleHBlY3RlZCA9IGkgJSA2MzsKKwkJCWJyZWFrOworCQkvKiBhbHdheXMgZmFpbCB1bnN1cHBvcnRlZCBwYXR0ZXJucyAqLworCQlkZWZhdWx0OgorCQkJZXhwZWN0ZWQgPSAhKmJ1ZjsKKwkJCWJyZWFrOworCQl9CisJCWlmICgqYnVmID09IGV4cGVjdGVkKQorCQkJY29udGludWU7CisJCWRiZyAoImJ1ZlslZF0gPSAlZCAobm90ICVkKSIsIGksICpidWYsIGV4cGVjdGVkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaW1wbGVfZnJlZV91cmIgKHN0cnVjdCB1cmIgKnVyYikKK3sKKwl1c2JfYnVmZmVyX2ZyZWUgKHVyYi0+ZGV2LCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciwgdXJiLT50cmFuc2Zlcl9kbWEpOworCXVzYl9mcmVlX3VyYiAodXJiKTsKK30KKworc3RhdGljIGludCBzaW1wbGVfaW8gKAorCXN0cnVjdCB1cmIJCSp1cmIsCisJaW50CQkJaXRlcmF0aW9ucywKKwlpbnQJCQl2YXJ5LAorCWludAkJCWV4cGVjdGVkLAorCWNvbnN0IGNoYXIJCSpsYWJlbAorKQoreworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gdXJiLT5kZXY7CisJaW50CQkJbWF4ID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCXN0cnVjdCBjb21wbGV0aW9uCWNvbXBsZXRpb247CisJaW50CQkJcmV0dmFsID0gMDsKKworCXVyYi0+Y29udGV4dCA9ICZjb21wbGV0aW9uOworCXdoaWxlIChyZXR2YWwgPT0gMCAmJiBpdGVyYXRpb25zLS0gPiAwKSB7CisJCWluaXRfY29tcGxldGlvbiAoJmNvbXBsZXRpb24pOworCQlpZiAodXNiX3BpcGVvdXQgKHVyYi0+cGlwZSkpCisJCQlzaW1wbGVfZmlsbF9idWYgKHVyYik7CisJCWlmICgocmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgU0xBQl9LRVJORUwpKSAhPSAwKQorCQkJYnJlYWs7CisKKwkJLyogTk9URTogIG5vIHRpbWVvdXRzOyBjYW4ndCBiZSBicm9rZW4gb3V0IG9mIGJ5IGludGVycnVwdCAqLworCQl3YWl0X2Zvcl9jb21wbGV0aW9uICgmY29tcGxldGlvbik7CisJCXJldHZhbCA9IHVyYi0+c3RhdHVzOworCQl1cmItPmRldiA9IHVkZXY7CisJCWlmIChyZXR2YWwgPT0gMCAmJiB1c2JfcGlwZWluICh1cmItPnBpcGUpKQorCQkJcmV0dmFsID0gc2ltcGxlX2NoZWNrX2J1ZiAodXJiKTsKKworCQlpZiAodmFyeSkgeworCQkJaW50CWxlbiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKworCQkJbGVuICs9IHZhcnk7CisJCQlsZW4gJT0gbWF4OworCQkJaWYgKGxlbiA9PSAwKQorCQkJCWxlbiA9ICh2YXJ5IDwgbWF4KSA/IHZhcnkgOiBtYXg7CisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBsZW47CisJCX0KKworCQkvKiBGSVhNRSBpZiBlbmRwb2ludCBoYWx0ZWQsIGNsZWFyIGhhbHQgKGFuZCBsb2cpICovCisJfQorCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IG1heDsKKworCWlmIChleHBlY3RlZCAhPSByZXR2YWwpCisJCWRldl9kYmcgKCZ1ZGV2LT5kZXYsCisJCQkiJXMgZmFpbGVkLCBpdGVyYXRpb25zIGxlZnQgJWQsIHN0YXR1cyAlZCAobm90ICVkKVxuIiwKKwkJCQlsYWJlbCwgaXRlcmF0aW9ucywgcmV0dmFsLCBleHBlY3RlZCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBXZSB1c2Ugc2NhdHRlcmxpc3QgcHJpbWl0aXZlcyB0byB0ZXN0IHF1ZXVlZCBJL08uCisgKiBZZXMsIHRoaXMgYWxzbyB0ZXN0cyB0aGUgc2NhdHRlcmxpc3QgcHJpbWl0aXZlcy4KKyAqLworCitzdGF0aWMgdm9pZCBmcmVlX3NnbGlzdCAoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzKQoreworCXVuc2lnbmVkCQlpOworCQorCWlmICghc2cpCisJCXJldHVybjsKKwlmb3IgKGkgPSAwOyBpIDwgbmVudHM7IGkrKykgeworCQlpZiAoIXNnIFtpXS5wYWdlKQorCQkJY29udGludWU7CisJCWtmcmVlIChwYWdlX2FkZHJlc3MgKHNnIFtpXS5wYWdlKSArIHNnIFtpXS5vZmZzZXQpOworCX0KKwlrZnJlZSAoc2cpOworfQorCitzdGF0aWMgc3RydWN0IHNjYXR0ZXJsaXN0ICoKK2FsbG9jX3NnbGlzdCAoaW50IG5lbnRzLCBpbnQgbWF4LCBpbnQgdmFyeSkKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKnNnOworCXVuc2lnbmVkCQlpOworCXVuc2lnbmVkCQlzaXplID0gbWF4OworCisJc2cgPSBrbWFsbG9jIChuZW50cyAqIHNpemVvZiAqc2csIFNMQUJfS0VSTkVMKTsKKwlpZiAoIXNnKQorCQlyZXR1cm4gTlVMTDsKKwltZW1zZXQgKHNnLCAwLCBuZW50cyAqIHNpemVvZiAqc2cpOworCisJZm9yIChpID0gMDsgaSA8IG5lbnRzOyBpKyspIHsKKwkJY2hhcgkJKmJ1ZjsKKworCQlidWYgPSBrbWFsbG9jIChzaXplLCBTTEFCX0tFUk5FTCk7CisJCWlmICghYnVmKSB7CisJCQlmcmVlX3NnbGlzdCAoc2csIGkpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJbWVtc2V0IChidWYsIDAsIHNpemUpOworCisJCS8qIGttYWxsb2MgcGFnZXMgYXJlIGFsd2F5cyBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMhICovCisJCXNnIFtpXS5wYWdlID0gdmlydF90b19wYWdlIChidWYpOworCQlzZyBbaV0ub2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UgKGJ1Zik7CisJCXNnIFtpXS5sZW5ndGggPSBzaXplOworCisJCWlmICh2YXJ5KSB7CisJCQlzaXplICs9IHZhcnk7CisJCQlzaXplICU9IG1heDsKKwkJCWlmIChzaXplID09IDApCisJCQkJc2l6ZSA9ICh2YXJ5IDwgbWF4KSA/IHZhcnkgOiBtYXg7CisJCX0KKwl9CisKKwlyZXR1cm4gc2c7Cit9CisKK3N0YXRpYyBpbnQgcGVyZm9ybV9zZ2xpc3QgKAorCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2LAorCXVuc2lnbmVkCQlpdGVyYXRpb25zLAorCWludAkJCXBpcGUsCisJc3RydWN0IHVzYl9zZ19yZXF1ZXN0CSpyZXEsCisJc3RydWN0IHNjYXR0ZXJsaXN0CSpzZywKKwlpbnQJCQluZW50cworKQoreworCWludAkJCXJldHZhbCA9IDA7CisKKwl3aGlsZSAocmV0dmFsID09IDAgJiYgaXRlcmF0aW9ucy0tID4gMCkgeworCQlyZXR2YWwgPSB1c2Jfc2dfaW5pdCAocmVxLCB1ZGV2LCBwaXBlLAorCQkJCSh1ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJCQkJPyAoSU5URVJSVVBUX1JBVEUgPDwgMykKKwkJCQkJOiBJTlRFUlJVUFRfUkFURSwKKwkJCQlzZywgbmVudHMsIDAsIFNMQUJfS0VSTkVMKTsKKwkJCisJCWlmIChyZXR2YWwpCisJCQlicmVhazsKKwkJdXNiX3NnX3dhaXQgKHJlcSk7CisJCXJldHZhbCA9IHJlcS0+c3RhdHVzOworCisJCS8qIEZJWE1FIGlmIGVuZHBvaW50IGhhbHRlZCwgY2xlYXIgaGFsdCAoYW5kIGxvZykgKi8KKwl9CisKKwkvLyBGSVhNRSBmb3IgdW5saW5rIG9yIGZhdWx0IGhhbmRsaW5nIHRlc3RzLCBkb24ndCByZXBvcnQKKwkvLyBmYWlsdXJlIGlmIHJldHZhbCBpcyBhcyB3ZSBleHBlY3RlZCAuLi4KKworCWlmIChyZXR2YWwpCisJCWRiZyAoInBlcmZvcm1fc2dsaXN0IGZhaWxlZCwgaXRlcmF0aW9ucyBsZWZ0ICVkLCBzdGF0dXMgJWQiLAorCQkJCWl0ZXJhdGlvbnMsIHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiB1bnF1ZXVlZCBjb250cm9sIG1lc3NhZ2UgdGVzdGluZworICoKKyAqIHRoZXJlJ3MgYSBuaWNlIHNldCBvZiBkZXZpY2UgZnVuY3Rpb25hbCByZXF1aXJlbWVudHMgaW4gY2hhcHRlciA5IG9mIHRoZQorICogdXNiIDIuMCBzcGVjLCB3aGljaCB3ZSBjYW4gYXBwbHkgdG8gQU5ZIGRldmljZSwgZXZlbiBvbmVzIHRoYXQgZG9uJ3QgdXNlCisgKiBzcGVjaWFsIHRlc3QgZmlybXdhcmUuCisgKgorICogd2Uga25vdyB0aGUgZGV2aWNlIGlzIGNvbmZpZ3VyZWQgKG9yIHN1c3BlbmRlZCkgYnkgdGhlIHRpbWUgaXQncyB2aXNpYmxlCisgKiB0aHJvdWdoIHVzYmZzLiAgd2UgY2FuJ3QgY2hhbmdlIHRoYXQsIHNvIHdlIHdvbid0IHRlc3QgZW51bWVyYXRpb24gKHdoaWNoCisgKiB3b3JrZWQgJ3dlbGwgZW5vdWdoJyB0byBnZXQgaGVyZSwgdGhpcyB0aW1lKSwgcG93ZXIgbWFuYWdlbWVudCAoZGl0dG8pLAorICogb3IgcmVtb3RlIHdha2V1cCAod2hpY2ggbmVlZHMgaHVtYW4gaW50ZXJhY3Rpb24pLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCByZWFsd29ybGQgPSAxOworbW9kdWxlX3BhcmFtIChyZWFsd29ybGQsIHVpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyAocmVhbHdvcmxkLCAiY2xlYXIgdG8gZGVtYW5kIHN0cmljdGVyIGNoOSBjb21wbGlhbmNlIik7CisKK3N0YXRpYyBpbnQgZ2V0X2FsdHNldHRpbmcgKHN0cnVjdCB1c2J0ZXN0X2RldiAqZGV2KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSppZmFjZSA9IGRldi0+aW50ZjsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGlmYWNlKTsKKwlpbnQJCQlyZXR2YWw7CisKKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cgKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSAodWRldiwgMCksCisJCQlVU0JfUkVRX0dFVF9JTlRFUkZBQ0UsIFVTQl9ESVJfSU58VVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCTAsIGlmYWNlLT5hbHRzZXR0aW5nIFswXS5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsCisJCQlkZXYtPmJ1ZiwgMSwgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCXN3aXRjaCAocmV0dmFsKSB7CisJY2FzZSAxOgorCQlyZXR1cm4gZGV2LT5idWYgWzBdOworCWNhc2UgMDoKKwkJcmV0dmFsID0gLUVSQU5HRTsKKwkJLy8gRkFMTFRIUk9VR0gKKwlkZWZhdWx0OgorCQlyZXR1cm4gcmV0dmFsOworCX0KK30KKworc3RhdGljIGludCBzZXRfYWx0c2V0dGluZyAoc3RydWN0IHVzYnRlc3RfZGV2ICpkZXYsIGludCBhbHRlcm5hdGUpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UJCSppZmFjZSA9IGRldi0+aW50ZjsKKwlzdHJ1Y3QgdXNiX2RldmljZQkJKnVkZXY7CisKKwlpZiAoYWx0ZXJuYXRlIDwgMCB8fCBhbHRlcm5hdGUgPj0gMjU2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpZmFjZSk7CisJcmV0dXJuIHVzYl9zZXRfaW50ZXJmYWNlICh1ZGV2LAorCQkJaWZhY2UtPmFsdHNldHRpbmcgWzBdLmRlc2MuYkludGVyZmFjZU51bWJlciwKKwkJCWFsdGVybmF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgaXNfZ29vZF9jb25maWcgKGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yCSpjb25maWc7CisJCisJaWYgKGxlbiA8IHNpemVvZiAqY29uZmlnKQorCQlyZXR1cm4gMDsKKwljb25maWcgPSAoc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvciAqKSBidWY7CisKKwlzd2l0Y2ggKGNvbmZpZy0+YkRlc2NyaXB0b3JUeXBlKSB7CisJY2FzZSBVU0JfRFRfQ09ORklHOgorCWNhc2UgVVNCX0RUX09USEVSX1NQRUVEX0NPTkZJRzoKKwkJaWYgKGNvbmZpZy0+Ykxlbmd0aCAhPSA5KSB7CisJCQlkYmcgKCJib2d1cyBjb25maWcgZGVzY3JpcHRvciBsZW5ndGgiKTsKKwkJCXJldHVybiAwOworCQl9CisJCS8qIHRoaXMgYml0ICdtdXN0IGJlIDEnIGJ1dCBvZnRlbiBpc24ndCAqLworCQlpZiAoIXJlYWx3b3JsZCAmJiAhKGNvbmZpZy0+Ym1BdHRyaWJ1dGVzICYgMHg4MCkpIHsKKwkJCWRiZyAoImhpZ2ggYml0IG9mIGNvbmZpZyBhdHRyaWJ1dGVzIG5vdCBzZXQiKTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmIChjb25maWctPmJtQXR0cmlidXRlcyAmIDB4MWYpIHsJLyogcmVzZXJ2ZWQgPT0gMCAqLworCQkJZGJnICgicmVzZXJ2ZWQgY29uZmlnIGJpdHMgc2V0Iik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobGUxNl90b19jcHUoY29uZmlnLT53VG90YWxMZW5ndGgpID09IGxlbikJCS8qIHJlYWQgaXQgYWxsICovCisJCXJldHVybiAxOworCWlmIChsZTE2X3RvX2NwdShjb25maWctPndUb3RhbExlbmd0aCkgPj0gVEJVRl9TSVpFKQkJLyogbWF4IHBhcnRpYWwgcmVhZCAqLworCQlyZXR1cm4gMTsKKwlkYmcgKCJib2d1cyBjb25maWcgZGVzY3JpcHRvciByZWFkIHNpemUiKTsKKwlyZXR1cm4gMDsKK30KKworLyogc2FuaXR5IHRlc3QgZm9yIHN0YW5kYXJkIHJlcXVlc3RzIHdvcmtpbmcgd2l0aCB1c2JfY29udHJvbF9tZXNnKCkgYW5kIHNvbWUKKyAqIG9mIHRoZSB1dGlsaXR5IGZ1bmN0aW9ucyB3aGljaCB1c2UgaXQuCisgKgorICogdGhpcyBkb2Vzbid0IHRlc3QgaG93IGVuZHBvaW50IGhhbHRzIGJlaGF2ZSBvciBkYXRhIHRvZ2dsZXMgZ2V0IHNldCwgc2luY2UKKyAqIHdlIHdvbid0IGRvIEkvTyB0byBidWxrL2ludGVycnVwdCBlbmRwb2ludHMgaGVyZSAod2hpY2ggaXMgaG93IHRvIGNoYW5nZQorICogaGFsdCBvciB0b2dnbGUpLiAgdG9nZ2xlIHRlc3RpbmcgaXMgaW1wcmFjdGljYWwgd2l0aG91dCBzdXBwb3J0IGZyb20gaGNkcy4KKyAqCisgKiB0aGlzIGF2b2lkcyBmYWlsaW5nIGRldmljZXMgbGludXggd291bGQgbm9ybWFsbHkgd29yayB3aXRoLCBieSBub3QgdGVzdGluZworICogY29uZmlnL2FsdHNldHRpbmcgb3BlcmF0aW9ucyBmb3IgZGV2aWNlcyB0aGF0IG9ubHkgc3VwcG9ydCB0aGVpciBkZWZhdWx0cy4KKyAqIHN1Y2ggZGV2aWNlcyByYXJlbHkgc3VwcG9ydCB0aG9zZSBuZWVkbGVzcyBvcGVyYXRpb25zLgorICoKKyAqIE5PVEUgdGhhdCBzaW5jZSB0aGlzIGlzIGEgc2FuaXR5IHRlc3QsIGl0J3Mgbm90IGV4YW1pbmluZyBib3VuZGFyeSBjYXNlcworICogdG8gc2VlIGlmIHVzYmNvcmUsIGhjZCwgYW5kIGRldmljZSBhbGwgYmVoYXZlIHJpZ2h0LiAgc3VjaCB0ZXN0aW5nIHdvdWxkCisgKiBpbnZvbHZlIHZhcmllZCByZWFkIHNpemVzIGFuZCBvdGhlciBvcGVyYXRpb24gc2VxdWVuY2VzLgorICovCitzdGF0aWMgaW50IGNoOV9wb3N0Y29uZmlnIChzdHJ1Y3QgdXNidGVzdF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaWZhY2UgPSBkZXYtPmludGY7CisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpZmFjZSk7CisJaW50CQkJaSwgYWx0LCByZXR2YWw7CisKKwkvKiBbOS4yLjNdIGlmIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSBhbHRzZXR0aW5nLCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8KKwkgKiBzZXQgYW5kIGdldCBlYWNoIG9uZS4gIG1vc3RseSB0cnVzdHMgdGhlIGRlc2NyaXB0b3JzIGZyb20gdXNiY29yZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaWZhY2UtPm51bV9hbHRzZXR0aW5nOyBpKyspIHsKKworCQkvKiA5LjIuMyBjb25zdHJhaW5zIHRoZSByYW5nZSBoZXJlICovCisJCWFsdCA9IGlmYWNlLT5hbHRzZXR0aW5nIFtpXS5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nOworCQlpZiAoYWx0IDwgMCB8fCBhbHQgPj0gaWZhY2UtPm51bV9hbHRzZXR0aW5nKSB7CisJCQlkZXZfZGJnICgmaWZhY2UtPmRldiwKKwkJCQkJImludmFsaWQgYWx0IFslZF0uYkFsdFNldHRpbmcgPSAlZFxuIiwKKwkJCQkJaSwgYWx0KTsKKwkJfQorCisJCS8qIFtyZWFsIHdvcmxkXSBnZXQvc2V0IHVuaW1wbGVtZW50ZWQgaWYgdGhlcmUncyBvbmx5IG9uZSAqLworCQlpZiAocmVhbHdvcmxkICYmIGlmYWNlLT5udW1fYWx0c2V0dGluZyA9PSAxKQorCQkJY29udGludWU7CisKKwkJLyogWzkuNC4xMF0gc2V0X2ludGVyZmFjZSAqLworCQlyZXR2YWwgPSBzZXRfYWx0c2V0dGluZyAoZGV2LCBhbHQpOworCQlpZiAocmV0dmFsKSB7CisJCQlkZXZfZGJnICgmaWZhY2UtPmRldiwgImNhbid0IHNldF9pbnRlcmZhY2UgPSAlZCwgJWRcbiIsCisJCQkJCWFsdCwgcmV0dmFsKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKworCQkvKiBbOS40LjRdIGdldF9pbnRlcmZhY2UgYWx3YXlzIHdvcmtzICovCisJCXJldHZhbCA9IGdldF9hbHRzZXR0aW5nIChkZXYpOworCQlpZiAocmV0dmFsICE9IGFsdCkgeworCQkJZGV2X2RiZyAoJmlmYWNlLT5kZXYsICJnZXQgYWx0IHNob3VsZCBiZSAlZCwgd2FzICVkXG4iLAorCQkJCQlhbHQsIHJldHZhbCk7CisJCQlyZXR1cm4gKHJldHZhbCA8IDApID8gcmV0dmFsIDogLUVET007CisJCX0KKworCX0KKworCS8qIFtyZWFsIHdvcmxkXSBnZXRfY29uZmlnIHVuaW1wbGVtZW50ZWQgaWYgdGhlcmUncyBvbmx5IG9uZSAqLworCWlmICghcmVhbHdvcmxkIHx8IHVkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpIHsKKwkJaW50CWV4cGVjdGVkID0gdWRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWU7CisKKwkJLyogWzkuNC4yXSBnZXRfY29uZmlndXJhdGlvbiBhbHdheXMgd29ya3MKKwkJICogLi4uIGFsdGhvdWdoIHNvbWUgY2hlYXAgZGV2aWNlcyAobGlrZSBvbmUgVEkgSHViIEkndmUgZ290KQorCQkgKiB3b24ndCByZXR1cm4gY29uZmlnIGRlc2NyaXB0b3JzIGV4Y2VwdCBiZWZvcmUgc2V0X2NvbmZpZy4KKwkJICovCisJCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyAodWRldiwgdXNiX3JjdmN0cmxwaXBlICh1ZGV2LCAwKSwKKwkJCQlVU0JfUkVRX0dFVF9DT05GSUdVUkFUSU9OLAorCQkJCVVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCTAsIDAsIGRldi0+YnVmLCAxLCBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJCWlmIChyZXR2YWwgIT0gMSB8fCBkZXYtPmJ1ZiBbMF0gIT0gZXhwZWN0ZWQpIHsKKwkJCWRldl9kYmcgKCZpZmFjZS0+ZGV2LAorCQkJCSJnZXQgY29uZmlnIC0tPiAlZCAoJWQpXG4iLCByZXR2YWwsCisJCQkJZXhwZWN0ZWQpOworCQkJcmV0dXJuIChyZXR2YWwgPCAwKSA/IHJldHZhbCA6IC1FRE9NOworCQl9CisJfQorCisJLyogdGhlcmUncyBhbHdheXMgWzkuNC4zXSBhIGRldmljZSBkZXNjcmlwdG9yIFs5LjYuMV0gKi8KKwlyZXR2YWwgPSB1c2JfZ2V0X2Rlc2NyaXB0b3IgKHVkZXYsIFVTQl9EVF9ERVZJQ0UsIDAsCisJCQlkZXYtPmJ1Ziwgc2l6ZW9mIHVkZXYtPmRlc2NyaXB0b3IpOworCWlmIChyZXR2YWwgIT0gc2l6ZW9mIHVkZXYtPmRlc2NyaXB0b3IpIHsKKwkJZGV2X2RiZyAoJmlmYWNlLT5kZXYsICJkZXYgZGVzY3JpcHRvciAtLT4gJWRcbiIsIHJldHZhbCk7CisJCXJldHVybiAocmV0dmFsIDwgMCkgPyByZXR2YWwgOiAtRURPTTsKKwl9CisKKwkvKiB0aGVyZSdzIGFsd2F5cyBbOS40LjNdIGF0IGxlYXN0IG9uZSBjb25maWcgZGVzY3JpcHRvciBbOS42LjNdICovCisJZm9yIChpID0gMDsgaSA8IHVkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zOyBpKyspIHsKKwkJcmV0dmFsID0gdXNiX2dldF9kZXNjcmlwdG9yICh1ZGV2LCBVU0JfRFRfQ09ORklHLCBpLAorCQkJCWRldi0+YnVmLCBUQlVGX1NJWkUpOworCQlpZiAoIWlzX2dvb2RfY29uZmlnIChkZXYtPmJ1ZiwgcmV0dmFsKSkgeworCQkJZGV2X2RiZyAoJmlmYWNlLT5kZXYsCisJCQkJCSJjb25maWcgWyVkXSBkZXNjcmlwdG9yIC0tPiAlZFxuIiwKKwkJCQkJaSwgcmV0dmFsKTsKKwkJCXJldHVybiAocmV0dmFsIDwgMCkgPyByZXR2YWwgOiAtRURPTTsKKwkJfQorCisJCS8vIEZJWE1FIGNyb3NzLWNoZWNraW5nIHVkZXYtPmNvbmZpZ1tpXSB0byBtYWtlIHN1cmUgdXNiY29yZQorCQkvLyBwYXJzZWQgaXQgcmlnaHQgKGV0Yykgd291bGQgYmUgZ29vZCB0ZXN0aW5nIHBhcmFub2lhCisJfQorCisJLyogYW5kIHNvbWV0aW1lcyBbOS4yLjYuNl0gc3BlZWQgZGVwZW5kZW50IGRlc2NyaXB0b3JzICovCisJaWYgKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuYmNkVVNCKSA9PSAweDAyMDApIHsKKwkJc3RydWN0IHVzYl9xdWFsaWZpZXJfZGVzY3JpcHRvcgkJKmQgPSBOVUxMOworCisJCS8qIGRldmljZSBxdWFsaWZpZXIgWzkuNi4yXSAqLworCQlyZXR2YWwgPSB1c2JfZ2V0X2Rlc2NyaXB0b3IgKHVkZXYsCisJCQkJVVNCX0RUX0RFVklDRV9RVUFMSUZJRVIsIDAsIGRldi0+YnVmLAorCQkJCXNpemVvZiAoc3RydWN0IHVzYl9xdWFsaWZpZXJfZGVzY3JpcHRvcikpOworCQlpZiAocmV0dmFsID09IC1FUElQRSkgeworCQkJaWYgKHVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSB7CisJCQkJZGV2X2RiZyAoJmlmYWNlLT5kZXYsCisJCQkJCQkiaHMgZGV2IHF1YWxpZmllciAtLT4gJWRcbiIsCisJCQkJCQlyZXR2YWwpOworCQkJCXJldHVybiAocmV0dmFsIDwgMCkgPyByZXR2YWwgOiAtRURPTTsKKwkJCX0KKwkJCS8qIHVzYjIuMCBidXQgbm90IGhpZ2gtc3BlZWQgY2FwYWJsZTsgZmluZSAqLworCQl9IGVsc2UgaWYgKHJldHZhbCAhPSBzaXplb2YgKHN0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IpKSB7CisJCQlkZXZfZGJnICgmaWZhY2UtPmRldiwgImRldiBxdWFsaWZpZXIgLS0+ICVkXG4iLCByZXR2YWwpOworCQkJcmV0dXJuIChyZXR2YWwgPCAwKSA/IHJldHZhbCA6IC1FRE9NOworCQl9IGVsc2UKKwkJCWQgPSAoc3RydWN0IHVzYl9xdWFsaWZpZXJfZGVzY3JpcHRvciAqKSBkZXYtPmJ1ZjsKKworCQkvKiBtaWdodCBub3QgaGF2ZSBbOS42LjJdIGFueSBvdGhlci1zcGVlZCBjb25maWdzIFs5LjYuNF0gKi8KKwkJaWYgKGQpIHsKKwkJCXVuc2lnbmVkIG1heCA9IGQtPmJOdW1Db25maWd1cmF0aW9uczsKKwkJCWZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykgeworCQkJCXJldHZhbCA9IHVzYl9nZXRfZGVzY3JpcHRvciAodWRldiwKKwkJCQkJVVNCX0RUX09USEVSX1NQRUVEX0NPTkZJRywgaSwKKwkJCQkJZGV2LT5idWYsIFRCVUZfU0laRSk7CisJCQkJaWYgKCFpc19nb29kX2NvbmZpZyAoZGV2LT5idWYsIHJldHZhbCkpIHsKKwkJCQkJZGV2X2RiZyAoJmlmYWNlLT5kZXYsCisJCQkJCQkib3RoZXIgc3BlZWQgY29uZmlnIC0tPiAlZFxuIiwKKwkJCQkJCXJldHZhbCk7CisJCQkJCXJldHVybiAocmV0dmFsIDwgMCkgPyByZXR2YWwgOiAtRURPTTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJLy8gRklYTUUgZmV0Y2ggc3RyaW5ncyBmcm9tIGF0IGxlYXN0IHRoZSBkZXZpY2UgZGVzY3JpcHRvcgorCisJLyogWzkuNC41XSBnZXRfc3RhdHVzIGFsd2F5cyB3b3JrcyAqLworCXJldHZhbCA9IHVzYl9nZXRfc3RhdHVzICh1ZGV2LCBVU0JfUkVDSVBfREVWSUNFLCAwLCBkZXYtPmJ1Zik7CisJaWYgKHJldHZhbCAhPSAyKSB7CisJCWRldl9kYmcgKCZpZmFjZS0+ZGV2LCAiZ2V0IGRldiBzdGF0dXMgLS0+ICVkXG4iLCByZXR2YWwpOworCQlyZXR1cm4gKHJldHZhbCA8IDApID8gcmV0dmFsIDogLUVET007CisJfQorCisJLy8gRklYTUUgY29uZmlndXJhdGlvbi5ibUF0dHJpYnV0ZXMgc2F5cyBpZiB3ZSBjb3VsZCB0cnkgdG8gc2V0L2NsZWFyCisJLy8gdGhlIGRldmljZSdzIHJlbW90ZSB3YWtldXAgZmVhdHVyZSAuLi4gaWYgd2UgY2FuLCB0ZXN0IHRoYXQgaGVyZQorCisJcmV0dmFsID0gdXNiX2dldF9zdGF0dXMgKHVkZXYsIFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQlpZmFjZS0+YWx0c2V0dGluZyBbMF0uZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCBkZXYtPmJ1Zik7CisJaWYgKHJldHZhbCAhPSAyKSB7CisJCWRldl9kYmcgKCZpZmFjZS0+ZGV2LCAiZ2V0IGludGVyZmFjZSBzdGF0dXMgLS0+ICVkXG4iLCByZXR2YWwpOworCQlyZXR1cm4gKHJldHZhbCA8IDApID8gcmV0dmFsIDogLUVET007CisJfQorCS8vIEZJWE1FIGdldCBzdGF0dXMgZm9yIGVhY2ggZW5kcG9pbnQgaW4gdGhlIGludGVyZmFjZQorCQorCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiB1c2UgY2g5IHJlcXVlc3RzIHRvIHRlc3Qgd2hldGhlcjoKKyAqICAgKGEpIHF1ZXVlcyB3b3JrIGZvciBjb250cm9sLCBrZWVwaW5nIE4gc3VidGVzdHMgcXVldWVkIGFuZAorICogICAgICAgYWN0aXZlIChhdXRvLXJlc3VibWl0KSBmb3IgTSBsb29wcyB0aHJvdWdoIHRoZSBxdWV1ZS4KKyAqICAgKGIpIHByb3RvY29sIHN0YWxscyAoY29udHJvbC1vbmx5KSB3aWxsIGF1dG9yZWNvdmVyLgorICogICAgICAgaXQncyBub3QgbGlrZSBidWxrL2ludHI7IG5vIGhhbHQgY2xlYXJpbmcuCisgKiAgIChjKSBzaG9ydCBjb250cm9sIHJlYWRzIGFyZSByZXBvcnRlZCBhbmQgaGFuZGxlZC4KKyAqICAgKGQpIHF1ZXVlcyBhcmUgYWx3YXlzIHByb2Nlc3NlZCBpbi1vcmRlcgorICovCisKK3N0cnVjdCBjdHJsX2N0eCB7CisJc3BpbmxvY2tfdAkJbG9jazsKKwlzdHJ1Y3QgdXNidGVzdF9kZXYJKmRldjsKKwlzdHJ1Y3QgY29tcGxldGlvbgljb21wbGV0ZTsKKwl1bnNpZ25lZAkJY291bnQ7CisJdW5zaWduZWQJCXBlbmRpbmc7CisJaW50CQkJc3RhdHVzOworCXN0cnVjdCB1cmIJCSoqdXJiOworCXN0cnVjdCB1c2J0ZXN0X3BhcmFtCSpwYXJhbTsKKwlpbnQJCQlsYXN0OworfTsKKworI2RlZmluZSBOVU1fU1VCQ0FTRVMJMTUJCS8qIGhvdyBtYW55IHRlc3Qgc3ViY2FzZXMgaGVyZT8gKi8KKworc3RydWN0IHN1YmNhc2UgeworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJc2V0dXA7CisJaW50CQkJbnVtYmVyOworCWludAkJCWV4cGVjdGVkOworfTsKKworc3RhdGljIHZvaWQgY3RybF9jb21wbGV0ZSAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgY3RybF9jdHgJCSpjdHggPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdAkqcmVxcDsKKwlzdHJ1Y3Qgc3ViY2FzZQkJKnN1YmNhc2U7CisJaW50CQkJc3RhdHVzID0gdXJiLT5zdGF0dXM7CisKKwlyZXFwID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKil1cmItPnNldHVwX3BhY2tldDsKKwlzdWJjYXNlID0gY29udGFpbmVyX29mIChyZXFwLCBzdHJ1Y3Qgc3ViY2FzZSwgc2V0dXApOworCisJc3Bpbl9sb2NrICgmY3R4LT5sb2NrKTsKKwljdHgtPmNvdW50LS07CisJY3R4LT5wZW5kaW5nLS07CisKKwkvKiBxdWV1ZSBtdXN0IHRyYW5zZmVyIGFuZCBjb21wbGV0ZSBpbiBmaWZvIG9yZGVyLCB1bmxlc3MKKwkgKiB1c2JfdW5saW5rX3VyYigpIGlzIHVzZWQgdG8gdW5saW5rIHNvbWV0aGluZyBub3QgYXQgdGhlCisJICogcGh5c2ljYWwgcXVldWUgaGVhZCAobm90IHRlc3RlZCkuCisJICovCisJaWYgKHN1YmNhc2UtPm51bWJlciA+IDApIHsKKwkJaWYgKChzdWJjYXNlLT5udW1iZXIgLSBjdHgtPmxhc3QpICE9IDEpIHsKKwkJCWRiZyAoInN1YmNhc2UgJWQgY29tcGxldGVkIG91dCBvZiBvcmRlciwgbGFzdCAlZCIsCisJCQkJCXN1YmNhc2UtPm51bWJlciwgY3R4LT5sYXN0KTsKKwkJCXN0YXR1cyA9IC1FRE9NOworCQkJY3R4LT5sYXN0ID0gc3ViY2FzZS0+bnVtYmVyOworCQkJZ290byBlcnJvcjsKKwkJfQorCX0KKwljdHgtPmxhc3QgPSBzdWJjYXNlLT5udW1iZXI7CisKKwkvKiBzdWNjZWVkIG9yIGZhdWx0IGluIG9ubHkgb25lIHdheT8gKi8KKwlpZiAoc3RhdHVzID09IHN1YmNhc2UtPmV4cGVjdGVkKQorCQlzdGF0dXMgPSAwOworCisJLyogYXN5bmMgdW5saW5rIGZvciBjbGVhbnVwPyAqLworCWVsc2UgaWYgKHN0YXR1cyAhPSAtRUNPTk5SRVNFVCkgeworCisJCS8qIHNvbWUgZmF1bHRzIGFyZSBhbGxvd2VkLCBub3QgcmVxdWlyZWQgKi8KKwkJaWYgKHN1YmNhc2UtPmV4cGVjdGVkID4gMCAmJiAoCisJCQkgICgodXJiLT5zdGF0dXMgPT0gLXN1YmNhc2UtPmV4cGVjdGVkCS8qIGhhcHBlbmVkICovCisJCQkgICB8fCB1cmItPnN0YXR1cyA9PSAwKSkpKQkJLyogZGlkbid0ICovCisJCQlzdGF0dXMgPSAwOworCQkvKiBzb21ldGltZXMgbW9yZSB0aGFuIG9uZSBmYXVsdCBpcyBhbGxvd2VkICovCisJCWVsc2UgaWYgKHN1YmNhc2UtPm51bWJlciA9PSAxMiAmJiBzdGF0dXMgPT0gLUVQSVBFKQorCQkJc3RhdHVzID0gMDsKKwkJZWxzZQorCQkJZGJnICgic3VidGVzdCAlZCBlcnJvciwgc3RhdHVzICVkIiwKKwkJCQkJc3ViY2FzZS0+bnVtYmVyLCBzdGF0dXMpOworCX0KKworCS8qIHVuZXhwZWN0ZWQgc3RhdHVzIGNvZGVzIG1lYW4gZXJyb3JzOyBpZGVhbGx5LCBpbiBoYXJkd2FyZSAqLworCWlmIChzdGF0dXMpIHsKK2Vycm9yOgorCQlpZiAoY3R4LT5zdGF0dXMgPT0gMCkgeworCQkJaW50CQlpOworCisJCQljdHgtPnN0YXR1cyA9IHN0YXR1czsKKwkJCWluZm8gKCJjb250cm9sIHF1ZXVlICUwMnguJTAyeCwgZXJyICVkLCAlZCBsZWZ0IiwKKwkJCQkJcmVxcC0+YlJlcXVlc3RUeXBlLCByZXFwLT5iUmVxdWVzdCwKKwkJCQkJc3RhdHVzLCBjdHgtPmNvdW50KTsKKworCQkJLyogRklYTUUgdGhpcyAidW5saW5rIGV2ZXJ5dGhpbmciIGV4aXQgcm91dGUgc2hvdWxkCisJCQkgKiBiZSBhIHNlcGFyYXRlIHRlc3QgY2FzZS4KKwkJCSAqLworCisJCQkvKiB1bmxpbmsgd2hhdGV2ZXIncyBzdGlsbCBwZW5kaW5nICovCisJCQlmb3IgKGkgPSAxOyBpIDwgY3R4LT5wYXJhbS0+c2dsZW47IGkrKykgeworCQkJCXN0cnVjdCB1cmIJKnUgPSBjdHgtPnVyYiBbCisJKGkgKyBzdWJjYXNlLT5udW1iZXIpICUgY3R4LT5wYXJhbS0+c2dsZW5dOworCisJCQkJaWYgKHUgPT0gdXJiIHx8ICF1LT5kZXYpCisJCQkJCWNvbnRpbnVlOworCQkJCXN0YXR1cyA9IHVzYl91bmxpbmtfdXJiICh1KTsKKwkJCQlzd2l0Y2ggKHN0YXR1cykgeworCQkJCWNhc2UgLUVJTlBST0dSRVNTOgorCQkJCWNhc2UgLUVCVVNZOgorCQkJCWNhc2UgLUVJRFJNOgorCQkJCQljb250aW51ZTsKKwkJCQlkZWZhdWx0OgorCQkJCQlkYmcgKCJ1cmIgdW5saW5rIC0tPiAlZCIsIHN0YXR1cyk7CisJCQkJfQorCQkJfQorCQkJc3RhdHVzID0gY3R4LT5zdGF0dXM7CisJCX0KKwl9CisKKwkvKiByZXN1Ym1pdCBpZiB3ZSBuZWVkIHRvLCBlbHNlIG1hcmsgdGhpcyBhcyBkb25lICovCisJaWYgKChzdGF0dXMgPT0gMCkgJiYgKGN0eC0+cGVuZGluZyA8IGN0eC0+Y291bnQpKSB7CisJCWlmICgoc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgU0xBQl9BVE9NSUMpKSAhPSAwKSB7CisJCQlkYmcgKCJjYW4ndCByZXN1Ym1pdCBjdHJsICUwMnguJTAyeCwgZXJyICVkIiwKKwkJCQlyZXFwLT5iUmVxdWVzdFR5cGUsIHJlcXAtPmJSZXF1ZXN0LCBzdGF0dXMpOworCQkJdXJiLT5kZXYgPSBOVUxMOworCQl9IGVsc2UKKwkJCWN0eC0+cGVuZGluZysrOworCX0gZWxzZQorCQl1cmItPmRldiA9IE5VTEw7CisJCisJLyogc2lnbmFsIGNvbXBsZXRpb24gd2hlbiBub3RoaW5nJ3MgcXVldWVkICovCisJaWYgKGN0eC0+cGVuZGluZyA9PSAwKQorCQljb21wbGV0ZSAoJmN0eC0+Y29tcGxldGUpOworCXNwaW5fdW5sb2NrICgmY3R4LT5sb2NrKTsKK30KKworc3RhdGljIGludAordGVzdF9jdHJsX3F1ZXVlIChzdHJ1Y3QgdXNidGVzdF9kZXYgKmRldiwgc3RydWN0IHVzYnRlc3RfcGFyYW0gKnBhcmFtKQoreworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gdGVzdGRldl90b191c2JkZXYgKGRldik7CisJc3RydWN0IHVyYgkJKip1cmI7CisJc3RydWN0IGN0cmxfY3R4CQljb250ZXh0OworCWludAkJCWk7CisKKwlzcGluX2xvY2tfaW5pdCAoJmNvbnRleHQubG9jayk7CisJY29udGV4dC5kZXYgPSBkZXY7CisJaW5pdF9jb21wbGV0aW9uICgmY29udGV4dC5jb21wbGV0ZSk7CisJY29udGV4dC5jb3VudCA9IHBhcmFtLT5zZ2xlbiAqIHBhcmFtLT5pdGVyYXRpb25zOworCWNvbnRleHQucGVuZGluZyA9IDA7CisJY29udGV4dC5zdGF0dXMgPSAtRU5PTUVNOworCWNvbnRleHQucGFyYW0gPSBwYXJhbTsKKwljb250ZXh0Lmxhc3QgPSAtMTsKKworCS8qIGFsbG9jYXRlIGFuZCBpbml0IHRoZSB1cmJzIHdlJ2xsIHF1ZXVlLgorCSAqIGFzIHdpdGggYnVsay9pbnRyIHNnbGlzdHMsIHNnbGVuIGlzIHRoZSBxdWV1ZSBkZXB0aDsgaXQgYWxzbworCSAqIGNvbnRyb2xzIHdoaWNoIHN1YnRlc3RzIHJ1biAobW9yZSB0ZXN0cyB0aGFuIHNnbGVuKSBvciByZXJ1bi4KKwkgKi8KKwl1cmIgPSBrbWFsbG9jIChwYXJhbS0+c2dsZW4gKiBzaXplb2YgKHN0cnVjdCB1cmIgKiksIFNMQUJfS0VSTkVMKTsKKwlpZiAoIXVyYikKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0ICh1cmIsIDAsIHBhcmFtLT5zZ2xlbiAqIHNpemVvZiAoc3RydWN0IHVyYiAqKSk7CisJZm9yIChpID0gMDsgaSA8IHBhcmFtLT5zZ2xlbjsgaSsrKSB7CisJCWludAkJCXBpcGUgPSB1c2JfcmN2Y3RybHBpcGUgKHVkZXYsIDApOworCQl1bnNpZ25lZAkJbGVuOworCQlzdHJ1Y3QgdXJiCQkqdTsKKwkJc3RydWN0IHVzYl9jdHJscmVxdWVzdAlyZXE7CisJCXN0cnVjdCBzdWJjYXNlCQkqcmVxcDsKKwkJaW50CQkJZXhwZWN0ZWQgPSAwOworCisJCS8qIHJlcXVlc3RzIGhlcmUgYXJlIG1vc3RseSBleHBlY3RlZCB0byBzdWNjZWVkIG9uIGFueQorCQkgKiBkZXZpY2UsIGJ1dCBzb21lIGFyZSBjaG9zZW4gdG8gdHJpZ2dlciBwcm90b2NvbCBzdGFsbHMKKwkJICogb3Igc2hvcnQgcmVhZHMuCisJCSAqLworCQltZW1zZXQgKCZyZXEsIDAsIHNpemVvZiByZXEpOworCQlyZXEuYlJlcXVlc3QgPSBVU0JfUkVRX0dFVF9ERVNDUklQVE9SOworCQlyZXEuYlJlcXVlc3RUeXBlID0gVVNCX0RJUl9JTnxVU0JfUkVDSVBfREVWSUNFOworCisJCXN3aXRjaCAoaSAlIE5VTV9TVUJDQVNFUykgeworCQljYXNlIDA6CQkvLyBnZXQgZGV2aWNlIGRlc2NyaXB0b3IKKwkJCXJlcS53VmFsdWUgPSBjcHVfdG9fbGUxNiAoVVNCX0RUX0RFVklDRSA8PCA4KTsKKwkJCWxlbiA9IHNpemVvZiAoc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvcik7CisJCQlicmVhazsKKwkJY2FzZSAxOgkJLy8gZ2V0IGZpcnN0IGNvbmZpZyBkZXNjcmlwdG9yIChvbmx5KQorCQkJcmVxLndWYWx1ZSA9IGNwdV90b19sZTE2ICgoVVNCX0RUX0NPTkZJRyA8PCA4KSB8IDApOworCQkJbGVuID0gc2l6ZW9mIChzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CQkvLyBnZXQgYWx0c2V0dGluZyAoT0ZURU4gU1RBTExTKQorCQkJcmVxLmJSZXF1ZXN0ID0gVVNCX1JFUV9HRVRfSU5URVJGQUNFOworCQkJcmVxLmJSZXF1ZXN0VHlwZSA9IFVTQl9ESVJfSU58VVNCX1JFQ0lQX0lOVEVSRkFDRTsKKwkJCS8vIGluZGV4ID0gMCBtZWFucyBmaXJzdCBpbnRlcmZhY2UKKwkJCWxlbiA9IDE7CisJCQlleHBlY3RlZCA9IEVQSVBFOworCQkJYnJlYWs7CisJCWNhc2UgMzoJCS8vIGdldCBpbnRlcmZhY2Ugc3RhdHVzCisJCQlyZXEuYlJlcXVlc3QgPSBVU0JfUkVRX0dFVF9TVEFUVVM7CisJCQlyZXEuYlJlcXVlc3RUeXBlID0gVVNCX0RJUl9JTnxVU0JfUkVDSVBfSU5URVJGQUNFOworCQkJLy8gaW50ZXJmYWNlIDAKKwkJCWxlbiA9IDI7CisJCQlicmVhazsKKwkJY2FzZSA0OgkJLy8gZ2V0IGRldmljZSBzdGF0dXMKKwkJCXJlcS5iUmVxdWVzdCA9IFVTQl9SRVFfR0VUX1NUQVRVUzsKKwkJCXJlcS5iUmVxdWVzdFR5cGUgPSBVU0JfRElSX0lOfFVTQl9SRUNJUF9ERVZJQ0U7CisJCQlsZW4gPSAyOworCQkJYnJlYWs7CisJCWNhc2UgNToJCS8vIGdldCBkZXZpY2UgcXVhbGlmaWVyIChNQVkgU1RBTEwpCisJCQlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYgKFVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSIDw8IDgpOworCQkJbGVuID0gc2l6ZW9mIChzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yKTsKKwkJCWlmICh1ZGV2LT5zcGVlZCAhPSBVU0JfU1BFRURfSElHSCkKKwkJCQlleHBlY3RlZCA9IEVQSVBFOworCQkJYnJlYWs7CisJCWNhc2UgNjoJCS8vIGdldCBmaXJzdCBjb25maWcgZGVzY3JpcHRvciwgcGx1cyBpbnRlcmZhY2UKKwkJCXJlcS53VmFsdWUgPSBjcHVfdG9fbGUxNiAoKFVTQl9EVF9DT05GSUcgPDwgOCkgfCAwKTsKKwkJCWxlbiA9IHNpemVvZiAoc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvcik7CisJCQlsZW4gKz0gc2l6ZW9mIChzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yKTsKKwkJCWJyZWFrOworCQljYXNlIDc6CQkvLyBnZXQgaW50ZXJmYWNlIGRlc2NyaXB0b3IgKEFMV0FZUyBTVEFMTFMpCisJCQlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYgKFVTQl9EVF9JTlRFUkZBQ0UgPDwgOCk7CisJCQkvLyBpbnRlcmZhY2UgPT0gMAorCQkJbGVuID0gc2l6ZW9mIChzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yKTsKKwkJCWV4cGVjdGVkID0gRVBJUEU7CisJCQlicmVhazsKKwkJLy8gTk9URTogdHdvIGNvbnNlY3V0aXZlIHN0YWxscyBpbiB0aGUgcXVldWUgaGVyZS4KKwkJLy8gdGhhdCB0ZXN0cyBmYXVsdCByZWNvdmVyeSBhIGJpdCBtb3JlIGFnZ3Jlc3NpdmVseS4KKwkJY2FzZSA4OgkJLy8gY2xlYXIgZW5kcG9pbnQgaGFsdCAoVVNVQUxMWSBTVEFMTFMpCisJCQlyZXEuYlJlcXVlc3QgPSBVU0JfUkVRX0NMRUFSX0ZFQVRVUkU7CisJCQlyZXEuYlJlcXVlc3RUeXBlID0gVVNCX1JFQ0lQX0VORFBPSU5UOworCQkJLy8gd1ZhbHVlIDAgPT0gZXAgaGFsdAorCQkJLy8gd0luZGV4IDAgPT0gZXAwIChzaG91bGRuJ3QgaGFsdCEpCisJCQlsZW4gPSAwOworCQkJcGlwZSA9IHVzYl9zbmRjdHJscGlwZSAodWRldiwgMCk7CisJCQlleHBlY3RlZCA9IEVQSVBFOworCQkJYnJlYWs7CisJCWNhc2UgOToJCS8vIGdldCBlbmRwb2ludCBzdGF0dXMKKwkJCXJlcS5iUmVxdWVzdCA9IFVTQl9SRVFfR0VUX1NUQVRVUzsKKwkJCXJlcS5iUmVxdWVzdFR5cGUgPSBVU0JfRElSX0lOfFVTQl9SRUNJUF9FTkRQT0lOVDsKKwkJCS8vIGVuZHBvaW50IDAKKwkJCWxlbiA9IDI7CisJCQlicmVhazsKKwkJY2FzZSAxMDoJLy8gdHJpZ2dlciBzaG9ydCByZWFkIChFUkVNT1RFSU8pCisJCQlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYgKChVU0JfRFRfQ09ORklHIDw8IDgpIHwgMCk7CisJCQlsZW4gPSAxMDI0OworCQkJZXhwZWN0ZWQgPSAtRVJFTU9URUlPOworCQkJYnJlYWs7CisJCS8vIE5PVEU6IHR3byBjb25zZWN1dGl2ZSBfZGlmZmVyZW50XyBmYXVsdHMgaW4gdGhlIHF1ZXVlLgorCQljYXNlIDExOgkvLyBnZXQgZW5kcG9pbnQgZGVzY3JpcHRvciAoQUxXQVlTIFNUQUxMUykKKwkJCXJlcS53VmFsdWUgPSBjcHVfdG9fbGUxNiAoVVNCX0RUX0VORFBPSU5UIDw8IDgpOworCQkJLy8gZW5kcG9pbnQgPT0gMAorCQkJbGVuID0gc2l6ZW9mIChzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yKTsKKwkJCWV4cGVjdGVkID0gRVBJUEU7CisJCQlicmVhazsKKwkJLy8gTk9URTogc29tZXRpbWVzIGV2ZW4gYSB0aGlyZCBmYXVsdCBpbiB0aGUgcXVldWUhCisJCWNhc2UgMTI6CS8vIGdldCBzdHJpbmcgMCBkZXNjcmlwdG9yIChNQVkgU1RBTEwpCisJCQlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYgKFVTQl9EVF9TVFJJTkcgPDwgOCk7CisJCQkvLyBzdHJpbmcgPT0gMCwgZm9yIGxhbmd1YWdlIElEcworCQkJbGVuID0gc2l6ZW9mIChzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yKTsKKwkJCS8vIG1heSBzdWNjZWVkIHdoZW4gPiA0IGxhbmd1YWdlcworCQkJZXhwZWN0ZWQgPSBFUkVNT1RFSU87CS8vIG9yIEVQSVBFLCBpZiBubyBzdHJpbmdzCisJCQlicmVhazsKKwkJY2FzZSAxMzoJLy8gc2hvcnQgcmVhZCwgcmVzZW1ibGluZyBjYXNlIDEwCisJCQlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYgKChVU0JfRFRfQ09ORklHIDw8IDgpIHwgMCk7CisJCQkvLyBsYXN0IGRhdGEgcGFja2V0ICJzaG91bGQiIGJlIERBVEExLCBub3QgREFUQTAKKwkJCWxlbiA9IDEwMjQgLSB1ZGV2LT5kZXNjcmlwdG9yLmJNYXhQYWNrZXRTaXplMDsKKwkJCWV4cGVjdGVkID0gLUVSRU1PVEVJTzsKKwkJCWJyZWFrOworCQljYXNlIDE0OgkvLyBzaG9ydCByZWFkOyB0cnkgdG8gZmlsbCB0aGUgbGFzdCBwYWNrZXQKKwkJCXJlcS53VmFsdWUgPSBjcHVfdG9fbGUxNiAoKFVTQl9EVF9ERVZJQ0UgPDwgOCkgfCAwKTsKKwkJCS8vIGRldmljZSBkZXNjcmlwdG9yIHNpemUgPT0gMTggYnl0ZXMgCisJCQlsZW4gPSB1ZGV2LT5kZXNjcmlwdG9yLmJNYXhQYWNrZXRTaXplMDsKKwkJCXN3aXRjaCAobGVuKSB7CisJCQljYXNlIDg6CQlsZW4gPSAyNDsgYnJlYWs7CisJCQljYXNlIDE2OglsZW4gPSAzMjsgYnJlYWs7CisJCQl9CisJCQlleHBlY3RlZCA9IC1FUkVNT1RFSU87CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVyciAoImJvZ3VzIG51bWJlciBvZiBjdHJsIHF1ZXVlIHRlc3RjYXNlcyEiKTsKKwkJCWNvbnRleHQuc3RhdHVzID0gLUVJTlZBTDsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQlyZXEud0xlbmd0aCA9IGNwdV90b19sZTE2IChsZW4pOworCQl1cmIgW2ldID0gdSA9IHNpbXBsZV9hbGxvY191cmIgKHVkZXYsIHBpcGUsIGxlbik7CisJCWlmICghdSkKKwkJCWdvdG8gY2xlYW51cDsKKworCQlyZXFwID0gdXNiX2J1ZmZlcl9hbGxvYyAodWRldiwgc2l6ZW9mICpyZXFwLCBTTEFCX0tFUk5FTCwKKwkJCQkmdS0+c2V0dXBfZG1hKTsKKwkJaWYgKCFyZXFwKQorCQkJZ290byBjbGVhbnVwOworCQlyZXFwLT5zZXR1cCA9IHJlcTsKKwkJcmVxcC0+bnVtYmVyID0gaSAlIE5VTV9TVUJDQVNFUzsKKwkJcmVxcC0+ZXhwZWN0ZWQgPSBleHBlY3RlZDsKKwkJdS0+c2V0dXBfcGFja2V0ID0gKGNoYXIgKikgJnJlcXAtPnNldHVwOworCisJCXUtPmNvbnRleHQgPSAmY29udGV4dDsKKwkJdS0+Y29tcGxldGUgPSBjdHJsX2NvbXBsZXRlOworCQl1LT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfQVNZTkNfVU5MSU5LOworCX0KKworCS8qIHF1ZXVlIHRoZSB1cmJzICovCisJY29udGV4dC51cmIgPSB1cmI7CisJc3Bpbl9sb2NrX2lycSAoJmNvbnRleHQubG9jayk7CisJZm9yIChpID0gMDsgaSA8IHBhcmFtLT5zZ2xlbjsgaSsrKSB7CisJCWNvbnRleHQuc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiBbaV0sIFNMQUJfQVRPTUlDKTsKKwkJaWYgKGNvbnRleHQuc3RhdHVzICE9IDApIHsKKwkJCWRiZyAoImNhbid0IHN1Ym1pdCB1cmJbJWRdLCBzdGF0dXMgJWQiLAorCQkJCQlpLCBjb250ZXh0LnN0YXR1cyk7CisJCQljb250ZXh0LmNvdW50ID0gY29udGV4dC5wZW5kaW5nOworCQkJYnJlYWs7CisJCX0KKwkJY29udGV4dC5wZW5kaW5nKys7CisJfQorCXNwaW5fdW5sb2NrX2lycSAoJmNvbnRleHQubG9jayk7CisKKwkvKiBGSVhNRSAgc2V0IHRpbWVyIGFuZCB0aW1lIG91dDsgcHJvdmlkZSBhIGRpc2Nvbm5lY3QgaG9vayAqLworCisJLyogd2FpdCBmb3IgdGhlIGxhc3Qgb25lIHRvIGNvbXBsZXRlICovCisJaWYgKGNvbnRleHQucGVuZGluZyA+IDApCisJCXdhaXRfZm9yX2NvbXBsZXRpb24gKCZjb250ZXh0LmNvbXBsZXRlKTsKKworY2xlYW51cDoKKwlmb3IgKGkgPSAwOyBpIDwgcGFyYW0tPnNnbGVuOyBpKyspIHsKKwkJaWYgKCF1cmIgW2ldKQorCQkJY29udGludWU7CisJCXVyYiBbaV0tPmRldiA9IHVkZXY7CisJCWlmICh1cmIgW2ldLT5zZXR1cF9wYWNrZXQpCisJCQl1c2JfYnVmZmVyX2ZyZWUgKHVkZXYsIHNpemVvZiAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksCisJCQkJCXVyYiBbaV0tPnNldHVwX3BhY2tldCwKKwkJCQkJdXJiIFtpXS0+c2V0dXBfZG1hKTsKKwkJc2ltcGxlX2ZyZWVfdXJiICh1cmIgW2ldKTsKKwl9CisJa2ZyZWUgKHVyYik7CisJcmV0dXJuIGNvbnRleHQuc3RhdHVzOworfQorI3VuZGVmIE5VTV9TVUJDQVNFUworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHVubGluazFfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50CXN0YXR1cyA9IHVyYi0+c3RhdHVzOworCisJLy8gd2UgImtub3ciIC1FUElQRSAoc3RhbGwpIG5ldmVyIGhhcHBlbnMKKwlpZiAoIXN0YXR1cykKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgU0xBQl9BVE9NSUMpOworCWlmIChzdGF0dXMpIHsKKwkJdXJiLT5zdGF0dXMgPSBzdGF0dXM7CisJCWNvbXBsZXRlICgoc3RydWN0IGNvbXBsZXRpb24gKikgdXJiLT5jb250ZXh0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdW5saW5rMSAoc3RydWN0IHVzYnRlc3RfZGV2ICpkZXYsIGludCBwaXBlLCBpbnQgc2l6ZSwgaW50IGFzeW5jKQoreworCXN0cnVjdCB1cmIJCSp1cmI7CisJc3RydWN0IGNvbXBsZXRpb24JY29tcGxldGlvbjsKKwlpbnQJCQlyZXR2YWwgPSAwOworCisJaW5pdF9jb21wbGV0aW9uICgmY29tcGxldGlvbik7CisJdXJiID0gc2ltcGxlX2FsbG9jX3VyYiAodGVzdGRldl90b191c2JkZXYgKGRldiksIHBpcGUsIHNpemUpOworCWlmICghdXJiKQorCQlyZXR1cm4gLUVOT01FTTsKKwl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9BU1lOQ19VTkxJTks7CisJdXJiLT5jb250ZXh0ID0gJmNvbXBsZXRpb247CisJdXJiLT5jb21wbGV0ZSA9IHVubGluazFfY2FsbGJhY2s7CisKKwkvKiBrZWVwIHRoZSBlbmRwb2ludCBidXN5LiAgdGhlcmUgYXJlIGxvdHMgb2YgaGMvaGNkLWludGVybmFsCisJICogc3RhdGVzLCBhbmQgdGVzdGluZyBzaG91bGQgZ2V0IHRvIGFsbCBvZiB0aGVtIG92ZXIgdGltZS4KKwkgKgorCSAqIEZJWE1FIHdhbnQgYWRkaXRpb25hbCB0ZXN0cyBmb3Igd2hlbiBlbmRwb2ludCBpcyBTVEFMTGluZworCSAqIGR1ZSB0byBlcnJvcnMsIG9yIGlzIGp1c3QgTkFLaW5nIHJlcXVlc3RzLgorCSAqLworCWlmICgocmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgU0xBQl9LRVJORUwpKSAhPSAwKSB7CisJCWRldl9kYmcgKCZkZXYtPmludGYtPmRldiwgInN1Ym1pdCBmYWlsICVkXG4iLCByZXR2YWwpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCS8qIHVubGlua2luZyB0aGF0IHNob3VsZCBhbHdheXMgd29yay4gIHZhcmlhYmxlIGRlbGF5IHRlc3RzIG1vcmUKKwkgKiBoY2Qgc3RhdGVzIGFuZCBjb2RlIHBhdGhzLCBldmVuIHdpdGggbGl0dGxlIG90aGVyIHN5c3RlbSBsb2FkLgorCSAqLworCW1zbGVlcCAoamlmZmllcyAlICgyICogSU5URVJSVVBUX1JBVEUpKTsKKwlpZiAoYXN5bmMpIHsKK3JldHJ5OgorCQlyZXR2YWwgPSB1c2JfdW5saW5rX3VyYiAodXJiKTsKKwkJaWYgKHJldHZhbCA9PSAtRUJVU1kgfHwgcmV0dmFsID09IC1FSURSTSkgeworCQkJLyogd2UgY2FuJ3QgdW5saW5rIHVyYnMgd2hpbGUgdGhleSdyZSBjb21wbGV0aW5nLgorCQkJICogb3IgaWYgdGhleSd2ZSBjb21wbGV0ZWQsIGFuZCB3ZSBoYXZlbid0IHJlc3VibWl0dGVkLgorCQkJICogIm5vcm1hbCIgZHJpdmVycyB3b3VsZCBwcmV2ZW50IHJlc3VibWlzc2lvbiwgYnV0CisJCQkgKiBzaW5jZSB3ZSdyZSB0ZXN0aW5nIHVubGluayBwYXRocywgd2UgY2FuJ3QuCisJCQkgKi8KKwkJCWRldl9kYmcgKCZkZXYtPmludGYtPmRldiwgInVubGluayByZXRyeVxuIik7CisJCQlnb3RvIHJldHJ5OworCQl9CisJfSBlbHNlCisJCXVzYl9raWxsX3VyYiAodXJiKTsKKwlpZiAoIShyZXR2YWwgPT0gMCB8fCByZXR2YWwgPT0gLUVJTlBST0dSRVNTKSkgeworCQlkZXZfZGJnICgmZGV2LT5pbnRmLT5kZXYsICJ1bmxpbmsgZmFpbCAlZFxuIiwgcmV0dmFsKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uICgmY29tcGxldGlvbik7CisJcmV0dmFsID0gdXJiLT5zdGF0dXM7CisJc2ltcGxlX2ZyZWVfdXJiICh1cmIpOworCisJaWYgKGFzeW5jKQorCQlyZXR1cm4gKHJldHZhbCA9PSAtRUNPTk5SRVNFVCkgPyAwIDogcmV0dmFsIC0gMTAwMDsKKwllbHNlCisJCXJldHVybiAocmV0dmFsID09IC1FTk9FTlQgfHwgcmV0dmFsID09IC1FUEVSTSkgPworCQkJCTAgOiByZXR2YWwgLSAyMDAwOworfQorCitzdGF0aWMgaW50IHVubGlua19zaW1wbGUgKHN0cnVjdCB1c2J0ZXN0X2RldiAqZGV2LCBpbnQgcGlwZSwgaW50IGxlbikKK3sKKwlpbnQJCQlyZXR2YWwgPSAwOworCisJLyogdGVzdCBzeW5jIGFuZCBhc3luYyBwYXRocyAqLworCXJldHZhbCA9IHVubGluazEgKGRldiwgcGlwZSwgbGVuLCAxKTsKKwlpZiAoIXJldHZhbCkKKwkJcmV0dmFsID0gdW5saW5rMSAoZGV2LCBwaXBlLCBsZW4sIDApOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgdmVyaWZ5X25vdF9oYWx0ZWQgKGludCBlcCwgc3RydWN0IHVyYiAqdXJiKQoreworCWludAlyZXR2YWw7CisJdTE2CXN0YXR1czsKKworCS8qIHNob3VsZG4ndCBsb29rIG9yIGFjdCBoYWx0ZWQgKi8KKwlyZXR2YWwgPSB1c2JfZ2V0X3N0YXR1cyAodXJiLT5kZXYsIFVTQl9SRUNJUF9FTkRQT0lOVCwgZXAsICZzdGF0dXMpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRiZyAoImVwICUwMnggY291bGRuJ3QgZ2V0IG5vLWhhbHQgc3RhdHVzLCAlZCIsIGVwLCByZXR2YWwpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJZGJnICgiZXAgJTAyeCBib2d1cyBzdGF0dXM6ICUwNHggIT0gMCIsIGVwLCBzdGF0dXMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dmFsID0gc2ltcGxlX2lvICh1cmIsIDEsIDAsIDAsIF9fRlVOQ1RJT05fXyk7CisJaWYgKHJldHZhbCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2ZXJpZnlfaGFsdGVkIChpbnQgZXAsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpbnQJcmV0dmFsOworCXUxNglzdGF0dXM7CisKKwkvKiBzaG91bGQgbG9vayBhbmQgYWN0IGhhbHRlZCAqLworCXJldHZhbCA9IHVzYl9nZXRfc3RhdHVzICh1cmItPmRldiwgVVNCX1JFQ0lQX0VORFBPSU5ULCBlcCwgJnN0YXR1cyk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJZGJnICgiZXAgJTAyeCBjb3VsZG4ndCBnZXQgaGFsdCBzdGF0dXMsICVkIiwgZXAsIHJldHZhbCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCWlmIChzdGF0dXMgIT0gMSkgeworCQlkYmcgKCJlcCAlMDJ4IGJvZ3VzIHN0YXR1czogJTA0eCAhPSAxIiwgZXAsIHN0YXR1cyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR2YWwgPSBzaW1wbGVfaW8gKHVyYiwgMSwgMCwgLUVQSVBFLCBfX0ZVTkNUSU9OX18pOworCWlmIChyZXR2YWwgIT0gLUVQSVBFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR2YWwgPSBzaW1wbGVfaW8gKHVyYiwgMSwgMCwgLUVQSVBFLCAidmVyaWZ5X3N0aWxsX2hhbHRlZCIpOworCWlmIChyZXR2YWwgIT0gLUVQSVBFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZXN0X2hhbHQgKGludCBlcCwgc3RydWN0IHVyYiAqdXJiKQoreworCWludAlyZXR2YWw7CisKKwkvKiBzaG91bGRuJ3QgbG9vayBvciBhY3QgaGFsdGVkIG5vdyAqLworCXJldHZhbCA9IHZlcmlmeV9ub3RfaGFsdGVkIChlcCwgdXJiKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCS8qIHNldCBoYWx0IChwcm90b2NvbCB0ZXN0IG9ubHkpLCB2ZXJpZnkgaXQgd29ya2VkICovCisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnICh1cmItPmRldiwgdXNiX3NuZGN0cmxwaXBlICh1cmItPmRldiwgMCksCisJCQlVU0JfUkVRX1NFVF9GRUFUVVJFLCBVU0JfUkVDSVBfRU5EUE9JTlQsCisJCQlVU0JfRU5EUE9JTlRfSEFMVCwgZXAsCisJCQlOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJZGJnICgiZXAgJTAyeCBjb3VsZG4ndCBzZXQgaGFsdCwgJWQiLCBlcCwgcmV0dmFsKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJcmV0dmFsID0gdmVyaWZ5X2hhbHRlZCAoZXAsIHVyYik7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwkvKiBjbGVhciBoYWx0ICh0ZXN0cyBBUEkgKyBwcm90b2NvbCksIHZlcmlmeSBpdCB3b3JrZWQgKi8KKwlyZXR2YWwgPSB1c2JfY2xlYXJfaGFsdCAodXJiLT5kZXYsIHVyYi0+cGlwZSk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJZGJnICgiZXAgJTAyeCBjb3VsZG4ndCBjbGVhciBoYWx0LCAlZCIsIGVwLCByZXR2YWwpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlyZXR2YWwgPSB2ZXJpZnlfbm90X2hhbHRlZCAoZXAsIHVyYik7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwkvKiBOT1RFOiAgY291bGQgYWxzbyB2ZXJpZnkgU0VUX0lOVEVSRkFDRSBjbGVhciBoYWx0cyAuLi4gKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbHRfc2ltcGxlIChzdHJ1Y3QgdXNidGVzdF9kZXYgKmRldikKK3sKKwlpbnQJCWVwOworCWludAkJcmV0dmFsID0gMDsKKwlzdHJ1Y3QgdXJiCSp1cmI7CisKKwl1cmIgPSBzaW1wbGVfYWxsb2NfdXJiICh0ZXN0ZGV2X3RvX3VzYmRldiAoZGV2KSwgMCwgNTEyKTsKKwlpZiAodXJiID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGRldi0+aW5fcGlwZSkgeworCQllcCA9IHVzYl9waXBlZW5kcG9pbnQgKGRldi0+aW5fcGlwZSkgfCBVU0JfRElSX0lOOworCQl1cmItPnBpcGUgPSBkZXYtPmluX3BpcGU7CisJCXJldHZhbCA9IHRlc3RfaGFsdCAoZXAsIHVyYik7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJZ290byBkb25lOworCX0KKworCWlmIChkZXYtPm91dF9waXBlKSB7CisJCWVwID0gdXNiX3BpcGVlbmRwb2ludCAoZGV2LT5vdXRfcGlwZSk7CisJCXVyYi0+cGlwZSA9IGRldi0+b3V0X3BpcGU7CisJCXJldHZhbCA9IHRlc3RfaGFsdCAoZXAsIHVyYik7CisJfQorZG9uZToKKwlzaW1wbGVfZnJlZV91cmIgKHVyYik7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogQ29udHJvbCBPVVQgdGVzdHMgdXNlIHRoZSB2ZW5kb3IgY29udHJvbCByZXF1ZXN0cyBmcm9tIEludGVsJ3MKKyAqIFVTQiAyLjAgY29tcGxpYW5jZSB0ZXN0IGRldmljZTogIHdyaXRlIGEgYnVmZmVyLCByZWFkIGl0IGJhY2suCisgKgorICogSW50ZWwncyBzcGVjIG9ubHkgX3JlcXVpcmVzXyB0aGF0IGl0IHdvcmsgZm9yIG9uZSBwYWNrZXQsIHdoaWNoCisgKiBpcyBwcmV0dHkgd2Vhay4gICBTb21lIEhDRHMgcGxhY2UgbGltaXRzIGhlcmU7IG1vc3QgZGV2aWNlcyB3aWxsCisgKiBuZWVkIHRvIGJlIGFibGUgdG8gaGFuZGxlIG1vcmUgdGhhbiBvbmUgT1VUIGRhdGEgcGFja2V0LiAgV2UnbGwKKyAqIHRyeSB3aGF0ZXZlciB3ZSdyZSB0b2xkIHRvIHRyeS4KKyAqLworc3RhdGljIGludCBjdHJsX291dCAoc3RydWN0IHVzYnRlc3RfZGV2ICpkZXYsCisJCXVuc2lnbmVkIGNvdW50LCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZhcnkpCit7CisJdW5zaWduZWQJCWksIGosIGxlbiwgcmV0dmFsOworCXU4CQkJKmJ1ZjsKKwljaGFyCQkJKndoYXQgPSAiPyI7CisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CisJCisJaWYgKGxlbmd0aCA+IDB4ZmZmZiB8fCB2YXJ5ID49IGxlbmd0aCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlidWYgPSBrbWFsbG9jKGxlbmd0aCwgU0xBQl9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXVkZXYgPSB0ZXN0ZGV2X3RvX3VzYmRldiAoZGV2KTsKKwlsZW4gPSBsZW5ndGg7CisJcmV0dmFsID0gMDsKKworCS8qIE5PVEU6ICBoYXJkd2FyZSBtaWdodCB3ZWxsIGFjdCBkaWZmZXJlbnRseSBpZiB3ZSBwdXNoZWQgaXQKKwkgKiB3aXRoIGxvdHMgYmFjay10by1iYWNrIHF1ZXVlZCByZXF1ZXN0cy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQkvKiB3cml0ZSBwYXR0ZXJuZWQgZGF0YSAqLworCQlmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspCisJCQlidWYgW2pdID0gaSArIGo7CisJCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyAodWRldiwgdXNiX3NuZGN0cmxwaXBlICh1ZGV2LDApLAorCQkJCTB4NWIsIFVTQl9ESVJfT1VUfFVTQl9UWVBFX1ZFTkRPUiwKKwkJCQkwLCAwLCBidWYsIGxlbiwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCQlpZiAocmV0dmFsICE9IGxlbikgeworCQkJd2hhdCA9ICJ3cml0ZSI7CisJCQlicmVhazsKKwkJfQorCisJCS8qIHJlYWQgaXQgYmFjayAtLSBhc3N1bWluZyBub3RoaW5nIGludGVydmVuZWQhISAgKi8KKwkJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnICh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUgKHVkZXYsMCksCisJCQkJMHg1YywgVVNCX0RJUl9JTnxVU0JfVFlQRV9WRU5ET1IsCisJCQkJMCwgMCwgYnVmLCBsZW4sIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwkJaWYgKHJldHZhbCAhPSBsZW4pIHsKKwkJCXdoYXQgPSAicmVhZCI7CisJCQlicmVhazsKKwkJfQorCisJCS8qIGZhaWwgaWYgd2UgY2FuJ3QgdmVyaWZ5ICovCisJCWZvciAoaiA9IDA7IGogPCBsZW47IGorKykgeworCQkJaWYgKGJ1ZiBbal0gIT0gKHU4KSAoaSArIGopKSB7CisJCQkJSU5GTyAoZGV2LCAiY3RybF9vdXQsIGJ5dGUgJWQgaXMgJWQgbm90ICVkXG4iLAorCQkJCQlqLCBidWYgW2pdLCAodTgpIGkgKyBqKTsKKwkJCQlyZXR2YWwgPSAtRUJBRE1TRzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAocmV0dmFsIDwgMCkgeworCQkJd2hhdCA9ICJ2ZXJpZnkiOworCQkJYnJlYWs7CisJCX0KKworCQlsZW4gKz0gdmFyeTsKKwkJaWYgKGxlbiA+IGxlbmd0aCkKKwkJCWxlbiA9IDA7CisJfQorCisJaWYgKHJldHZhbCA8IDApCisJCUlORk8gKGRldiwgImN0cmxfb3V0ICVzIGZhaWxlZCwgY29kZSAlZCwgY291bnQgJWRcbiIsCisJCQl3aGF0LCByZXR2YWwsIGkpOworCisJa2ZyZWUgKGJ1Zik7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogSVNPIHRlc3RzIC4uLiBtaW1pY3MgY29tbW9uIHVzYWdlCisgKiAgLSBidWZmZXIgbGVuZ3RoIGlzIHNwbGl0IGludG8gTiBwYWNrZXRzIChtb3N0bHkgbWF4cGFja2V0IHNpemVkKQorICogIC0gbXVsdGktYnVmZmVycyBhY2NvcmRpbmcgdG8gc2dsZW4KKyAqLworCitzdHJ1Y3QgaXNvX2NvbnRleHQgeworCXVuc2lnbmVkCQljb3VudDsKKwl1bnNpZ25lZAkJcGVuZGluZzsKKwlzcGlubG9ja190CQlsb2NrOworCXN0cnVjdCBjb21wbGV0aW9uCWRvbmU7CisJdW5zaWduZWQgbG9uZwkJZXJyb3JzOworCXN0cnVjdCB1c2J0ZXN0X2RldgkqZGV2OworfTsKKworc3RhdGljIHZvaWQgaXNvX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBpc29fY29udGV4dAkqY3R4ID0gdXJiLT5jb250ZXh0OworCisJc3Bpbl9sb2NrKCZjdHgtPmxvY2spOworCWN0eC0+Y291bnQtLTsKKworCWlmICh1cmItPmVycm9yX2NvdW50ID4gMCkKKwkJY3R4LT5lcnJvcnMgKz0gdXJiLT5lcnJvcl9jb3VudDsKKworCWlmICh1cmItPnN0YXR1cyA9PSAwICYmIGN0eC0+Y291bnQgPiAoY3R4LT5wZW5kaW5nIC0gMSkpIHsKKwkJaW50IHN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCQlzd2l0Y2ggKHN0YXR1cykgeworCQljYXNlIDA6CisJCQlnb3RvIGRvbmU7CisJCWRlZmF1bHQ6CisJCQlkZXZfZGJnICgmY3R4LT5kZXYtPmludGYtPmRldiwKKwkJCQkJImlzbyByZXN1Ym1pdCBlcnIgJWRcbiIsCisJCQkJCXN0YXR1cyk7CisJCQkvKiBGQUxMVEhST1VHSCAqLworCQljYXNlIC1FTk9ERVY6CQkJLyogZGlzY29ubmVjdGVkICovCisJCQlicmVhazsKKwkJfQorCX0KKwlzaW1wbGVfZnJlZV91cmIgKHVyYik7CisKKwljdHgtPnBlbmRpbmctLTsKKwlpZiAoY3R4LT5wZW5kaW5nID09IDApIHsKKwkJaWYgKGN0eC0+ZXJyb3JzKQorCQkJZGV2X2RiZyAoJmN0eC0+ZGV2LT5pbnRmLT5kZXYsCisJCQkJImlzbyB0ZXN0LCAlbHUgZXJyb3JzXG4iLAorCQkJCWN0eC0+ZXJyb3JzKTsKKwkJY29tcGxldGUgKCZjdHgtPmRvbmUpOworCX0KK2RvbmU6CisJc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXJiICppc29fYWxsb2NfdXJiICgKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiwKKwlpbnQJCQlwaXBlLAorCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqZGVzYywKKwlsb25nCQkJYnl0ZXMKKykKK3sKKwlzdHJ1Y3QgdXJiCQkqdXJiOworCXVuc2lnbmVkCQlpLCBtYXhwLCBwYWNrZXRzOworCisJaWYgKGJ5dGVzIDwgMCB8fCAhZGVzYykKKwkJcmV0dXJuIE5VTEw7CisJbWF4cCA9IDB4N2ZmICYgbGUxNl90b19jcHUoZGVzYy0+d01heFBhY2tldFNpemUpOworCW1heHAgKj0gMSArICgweDMgJiAobGUxNl90b19jcHUoZGVzYy0+d01heFBhY2tldFNpemUpID4+IDExKSk7CisJcGFja2V0cyA9IChieXRlcyArIG1heHAgLSAxKSAvIG1heHA7CisKKwl1cmIgPSB1c2JfYWxsb2NfdXJiIChwYWNrZXRzLCBTTEFCX0tFUk5FTCk7CisJaWYgKCF1cmIpCisJCXJldHVybiB1cmI7CisJdXJiLT5kZXYgPSB1ZGV2OworCXVyYi0+cGlwZSA9IHBpcGU7CisKKwl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gcGFja2V0czsKKwl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBieXRlczsKKwl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IHVzYl9idWZmZXJfYWxsb2MgKHVkZXYsIGJ5dGVzLCBTTEFCX0tFUk5FTCwKKwkJCSZ1cmItPnRyYW5zZmVyX2RtYSk7CisJaWYgKCF1cmItPnRyYW5zZmVyX2J1ZmZlcikgeworCQl1c2JfZnJlZV91cmIgKHVyYik7CisJCXJldHVybiBOVUxMOworCX0KKwltZW1zZXQgKHVyYi0+dHJhbnNmZXJfYnVmZmVyLCAwLCBieXRlcyk7CisJZm9yIChpID0gMDsgaSA8IHBhY2tldHM7IGkrKykgeworCQkvKiBoZXJlLCBvbmx5IHRoZSBsYXN0IHBhY2tldCB3aWxsIGJlIHNob3J0ICovCisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID0gbWluICgodW5zaWduZWQpIGJ5dGVzLCBtYXhwKTsKKwkJYnl0ZXMgLT0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGg7CisKKwkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQgPSBtYXhwICogaTsKKwl9CisKKwl1cmItPmNvbXBsZXRlID0gaXNvX2NhbGxiYWNrOworCS8vIHVyYi0+Y29udGV4dCA9IFNFVCBCWSBDQUxMRVIKKwl1cmItPmludGVydmFsID0gMSA8PCAoZGVzYy0+YkludGVydmFsIC0gMSk7CisJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUCB8IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCXJldHVybiB1cmI7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RfaXNvX3F1ZXVlIChzdHJ1Y3QgdXNidGVzdF9kZXYgKmRldiwgc3RydWN0IHVzYnRlc3RfcGFyYW0gKnBhcmFtLAorCQlpbnQgcGlwZSwgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjKQoreworCXN0cnVjdCBpc29fY29udGV4dAljb250ZXh0OworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OworCXVuc2lnbmVkCQlpOworCXVuc2lnbmVkIGxvbmcJCXBhY2tldHMgPSAwOworCWludAkJCXN0YXR1czsKKwlzdHJ1Y3QgdXJiCQkqdXJic1sxMF07CS8qIEZJWE1FIG5vIGxpbWl0ICovCisKKwlpZiAocGFyYW0tPnNnbGVuID4gMTApCisJCXJldHVybiAtRURPTTsKKworCWNvbnRleHQuY291bnQgPSBwYXJhbS0+aXRlcmF0aW9ucyAqIHBhcmFtLT5zZ2xlbjsKKwljb250ZXh0LnBlbmRpbmcgPSBwYXJhbS0+c2dsZW47CisJY29udGV4dC5lcnJvcnMgPSAwOworCWNvbnRleHQuZGV2ID0gZGV2OworCWluaXRfY29tcGxldGlvbiAoJmNvbnRleHQuZG9uZSk7CisJc3Bpbl9sb2NrX2luaXQgKCZjb250ZXh0LmxvY2spOworCisJbWVtc2V0ICh1cmJzLCAwLCBzaXplb2YgdXJicyk7CisJdWRldiA9IHRlc3RkZXZfdG9fdXNiZGV2IChkZXYpOworCWRldl9kYmcgKCZkZXYtPmludGYtPmRldiwKKwkJIi4uLiBpc28gcGVyaW9kICVkICVzZnJhbWVzLCB3TWF4UGFja2V0ICUwNHhcbiIsCisJCTEgPDwgKGRlc2MtPmJJbnRlcnZhbCAtIDEpLAorCQkodWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpID8gIm1pY3JvIiA6ICIiLAorCQlsZTE2X3RvX2NwdShkZXNjLT53TWF4UGFja2V0U2l6ZSkpOworCisJZm9yIChpID0gMDsgaSA8IHBhcmFtLT5zZ2xlbjsgaSsrKSB7CisJCXVyYnMgW2ldID0gaXNvX2FsbG9jX3VyYiAodWRldiwgcGlwZSwgZGVzYywKKwkJCQlwYXJhbS0+bGVuZ3RoKTsKKwkJaWYgKCF1cmJzIFtpXSkgeworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQlwYWNrZXRzICs9IHVyYnNbaV0tPm51bWJlcl9vZl9wYWNrZXRzOworCQl1cmJzIFtpXS0+Y29udGV4dCA9ICZjb250ZXh0OworCX0KKwlwYWNrZXRzICo9IHBhcmFtLT5pdGVyYXRpb25zOworCWRldl9kYmcgKCZkZXYtPmludGYtPmRldiwKKwkJIi4uLiB0b3RhbCAlbHUgbXNlYyAoJWx1IHBhY2tldHMpXG4iLAorCQkocGFja2V0cyAqICgxIDw8IChkZXNjLT5iSW50ZXJ2YWwgLSAxKSkpCisJCQkvICgodWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpID8gOCA6IDEpLAorCQlwYWNrZXRzKTsKKworCXNwaW5fbG9ja19pcnEgKCZjb250ZXh0LmxvY2spOworCWZvciAoaSA9IDA7IGkgPCBwYXJhbS0+c2dsZW47IGkrKykgeworCQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJicyBbaV0sIFNMQUJfQVRPTUlDKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCUVSUk9SIChkZXYsICJzdWJtaXQgaXNvWyVkXSwgZXJyb3IgJWRcbiIsIGksIHN0YXR1cyk7CisJCQlpZiAoaSA9PSAwKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxICgmY29udGV4dC5sb2NrKTsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisKKwkJCXNpbXBsZV9mcmVlX3VyYiAodXJicyBbaV0pOworCQkJY29udGV4dC5wZW5kaW5nLS07CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxICgmY29udGV4dC5sb2NrKTsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24gKCZjb250ZXh0LmRvbmUpOworCXJldHVybiAwOworCitmYWlsOgorCWZvciAoaSA9IDA7IGkgPCBwYXJhbS0+c2dsZW47IGkrKykgeworCQlpZiAodXJicyBbaV0pCisJCQlzaW1wbGVfZnJlZV91cmIgKHVyYnMgW2ldKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogV2Ugb25seSBoYXZlIHRoaXMgb25lIGludGVyZmFjZSB0byB1c2VyIHNwYWNlLCB0aHJvdWdoIHVzYmZzLgorICogVXNlciBtb2RlIGNvZGUgY2FuIHNjYW4gdXNiZnMgdG8gZmluZCBOIGRpZmZlcmVudCBkZXZpY2VzIChtYXliZSBvbgorICogZGlmZmVyZW50IGJ1c3NlcykgdG8gdXNlIHdoZW4gdGVzdGluZywgYW5kIGFsbG9jYXRlIG9uZSB0aHJlYWQgcGVyCisgKiB0ZXN0LiAgU28gZGlzY292ZXJ5IGlzIHNpbXBsaWZpZWQsIGFuZCB3ZSBoYXZlIG5vIGRldmljZSBuYW1pbmcgaXNzdWVzLgorICoKKyAqIERvbid0IHVzZSB0aGVzZSBvbmx5IGFzIHN0cmVzcy9sb2FkIHRlc3RzLiAgVXNlIHRoZW0gYWxvbmcgd2l0aCB3aXRoCisgKiBvdGhlciBVU0IgYnVzIGFjdGl2aXR5OiAgcGx1Z2dpbmcsIHVucGx1Z2dpbmcsIG1vdXNpbmcsIG1wMyBwbGF5YmFjaywKKyAqIHZpZGVvIGNhcHR1cmUsIGFuZCBzbyBvbi4gIFJ1biBkaWZmZXJlbnQgdGVzdHMgYXQgZGlmZmVyZW50IHRpbWVzLCBpbgorICogZGlmZmVyZW50IHNlcXVlbmNlcy4gIE5vdGhpbmcgaGVyZSBzaG91bGQgaW50ZXJhY3Qgd2l0aCBvdGhlciBkZXZpY2VzLAorICogZXhjZXB0IGluZGlyZWN0bHkgYnkgY29uc3VtaW5nIFVTQiBiYW5kd2lkdGggYW5kIENQVSByZXNvdXJjZXMgZm9yIHRlc3QKKyAqIHRocmVhZHMgYW5kIHJlcXVlc3QgY29tcGxldGlvbi4gIEJ1dCB0aGUgb25seSB3YXkgdG8ga25vdyB0aGF0IGZvciBzdXJlCisgKiBpcyB0byB0ZXN0IHdoZW4gSEMgcXVldWVzIGFyZSBpbiB1c2UgYnkgbWFueSBkZXZpY2VzLgorICovCisKK3N0YXRpYyBpbnQKK3VzYnRlc3RfaW9jdGwgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCB1bnNpZ25lZCBpbnQgY29kZSwgdm9pZCAqYnVmKQoreworCXN0cnVjdCB1c2J0ZXN0X2RldgkqZGV2ID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXYgPSB0ZXN0ZGV2X3RvX3VzYmRldiAoZGV2KTsKKwlzdHJ1Y3QgdXNidGVzdF9wYXJhbQkqcGFyYW0gPSBidWY7CisJaW50CQkJcmV0dmFsID0gLUVPUE5PVFNVUFA7CisJc3RydWN0IHVyYgkJKnVyYjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKnNnOworCXN0cnVjdCB1c2Jfc2dfcmVxdWVzdAlyZXE7CisJc3RydWN0IHRpbWV2YWwJCXN0YXJ0OworCXVuc2lnbmVkCQlpOworCisJLy8gRklYTUUgVVNCREVWRlNfQ09OTkVDVElORk8gZG9lc24ndCBzYXkgaG93IGZhc3QgdGhlIGRldmljZSBpcy4KKworCWlmIChjb2RlICE9IFVTQlRFU1RfUkVRVUVTVCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKHBhcmFtLT5pdGVyYXRpb25zIDw9IDAgfHwgcGFyYW0tPmxlbmd0aCA8IDAKKwkJCXx8IHBhcmFtLT5zZ2xlbiA8IDAgfHwgcGFyYW0tPnZhcnkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZkZXYtPnNlbSkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwkvKiBzb21lIGRldmljZXMsIGxpa2UgZXotdXNiIGRlZmF1bHQgZGV2aWNlcywgbmVlZCBhIG5vbi1kZWZhdWx0CisJICogYWx0c2V0dGluZyB0byBoYXZlIGFueSBhY3RpdmUgZW5kcG9pbnRzLiAgc29tZSB0ZXN0cyBjaGFuZ2UKKwkgKiBhbHRzZXR0aW5nczsgZm9yY2UgYSBkZWZhdWx0IHNvIG1vc3QgdGVzdHMgZG9uJ3QgbmVlZCB0byBjaGVjay4KKwkgKi8KKwlpZiAoZGV2LT5pbmZvLT5hbHQgPj0gMCkgeworCSAgICAJaW50CXJlczsKKworCQlpZiAoaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKSB7CisJCQl1cCAoJmRldi0+c2VtKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCXJlcyA9IHNldF9hbHRzZXR0aW5nIChkZXYsIGRldi0+aW5mby0+YWx0KTsKKwkJaWYgKHJlcykgeworCQkJZGV2X2VyciAoJmludGYtPmRldiwKKwkJCQkJInNldCBhbHRzZXR0aW5nIHRvICVkIGZhaWxlZCwgJWRcbiIsCisJCQkJCWRldi0+aW5mby0+YWx0LCByZXMpOworCQkJdXAgKCZkZXYtPnNlbSk7CisJCQlyZXR1cm4gcmVzOworCQl9CisJfQorCisJLyoKKwkgKiBKdXN0IGEgYnVuY2ggb2YgdGVzdCBjYXNlcyB0aGF0IGV2ZXJ5IEhDRCBpcyBleHBlY3RlZCB0byBoYW5kbGUuCisJICoKKwkgKiBTb21lIG1heSBuZWVkIHNwZWNpZmljIGZpcm13YXJlLCB0aG91Z2ggaXQnZCBiZSBnb29kIHRvIGhhdmUKKwkgKiBvbmUgZmlybXdhcmUgaW1hZ2UgdG8gaGFuZGxlIGFsbCB0aGUgdGVzdCBjYXNlcy4KKwkgKgorCSAqIEZJWE1FIGFkZCBtb3JlIHRlc3RzISAgY2FuY2VsIHJlcXVlc3RzLCB2ZXJpZnkgdGhlIGRhdGEsIGNvbnRyb2wKKwkgKiBxdWV1ZWluZywgY29uY3VycmVudCByZWFkK3dyaXRlIHRocmVhZHMsIGFuZCBzbyBvbi4KKwkgKi8KKwlkb19nZXR0aW1lb2ZkYXkgKCZzdGFydCk7CisJc3dpdGNoIChwYXJhbS0+dGVzdF9udW0pIHsKKworCWNhc2UgMDoKKwkJZGV2X2RiZyAoJmludGYtPmRldiwgIlRFU1QgMDogIE5PUFxuIik7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCisJLyogU2ltcGxlIG5vbi1xdWV1ZWQgYnVsayBJL08gdGVzdHMgKi8KKwljYXNlIDE6CisJCWlmIChkZXYtPm91dF9waXBlID09IDApCisJCQlicmVhazsKKwkJZGV2X2RiZyAoJmludGYtPmRldiwKKwkJCQkiVEVTVCAxOiAgd3JpdGUgJWQgYnl0ZXMgJXUgdGltZXNcbiIsCisJCQkJcGFyYW0tPmxlbmd0aCwgcGFyYW0tPml0ZXJhdGlvbnMpOworCQl1cmIgPSBzaW1wbGVfYWxsb2NfdXJiICh1ZGV2LCBkZXYtPm91dF9waXBlLCBwYXJhbS0+bGVuZ3RoKTsKKwkJaWYgKCF1cmIpIHsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQorCQkvLyBGSVJNV0FSRTogIGJ1bGsgc2luayAobWF5YmUgYWNjZXB0cyBzaG9ydCB3cml0ZXMpCisJCXJldHZhbCA9IHNpbXBsZV9pbyAodXJiLCBwYXJhbS0+aXRlcmF0aW9ucywgMCwgMCwgInRlc3QxIik7CisJCXNpbXBsZV9mcmVlX3VyYiAodXJiKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlpZiAoZGV2LT5pbl9waXBlID09IDApCisJCQlicmVhazsKKwkJZGV2X2RiZyAoJmludGYtPmRldiwKKwkJCQkiVEVTVCAyOiAgcmVhZCAlZCBieXRlcyAldSB0aW1lc1xuIiwKKwkJCQlwYXJhbS0+bGVuZ3RoLCBwYXJhbS0+aXRlcmF0aW9ucyk7CisJCXVyYiA9IHNpbXBsZV9hbGxvY191cmIgKHVkZXYsIGRldi0+aW5fcGlwZSwgcGFyYW0tPmxlbmd0aCk7CisJCWlmICghdXJiKSB7CisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJYnJlYWs7CisJCX0KKwkJLy8gRklSTVdBUkU6ICBidWxrIHNvdXJjZSAobWF5YmUgZ2VuZXJhdGVzIHNob3J0IHdyaXRlcykKKwkJcmV0dmFsID0gc2ltcGxlX2lvICh1cmIsIHBhcmFtLT5pdGVyYXRpb25zLCAwLCAwLCAidGVzdDIiKTsKKwkJc2ltcGxlX2ZyZWVfdXJiICh1cmIpOworCQlicmVhazsKKwljYXNlIDM6CisJCWlmIChkZXYtPm91dF9waXBlID09IDAgfHwgcGFyYW0tPnZhcnkgPT0gMCkKKwkJCWJyZWFrOworCQlkZXZfZGJnICgmaW50Zi0+ZGV2LAorCQkJCSJURVNUIDM6ICB3cml0ZS8lZCAwLi4lZCBieXRlcyAldSB0aW1lc1xuIiwKKwkJCQlwYXJhbS0+dmFyeSwgcGFyYW0tPmxlbmd0aCwgcGFyYW0tPml0ZXJhdGlvbnMpOworCQl1cmIgPSBzaW1wbGVfYWxsb2NfdXJiICh1ZGV2LCBkZXYtPm91dF9waXBlLCBwYXJhbS0+bGVuZ3RoKTsKKwkJaWYgKCF1cmIpIHsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQorCQkvLyBGSVJNV0FSRTogIGJ1bGsgc2luayAobWF5YmUgYWNjZXB0cyBzaG9ydCB3cml0ZXMpCisJCXJldHZhbCA9IHNpbXBsZV9pbyAodXJiLCBwYXJhbS0+aXRlcmF0aW9ucywgcGFyYW0tPnZhcnksCisJCQkJCTAsICJ0ZXN0MyIpOworCQlzaW1wbGVfZnJlZV91cmIgKHVyYik7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJaWYgKGRldi0+aW5fcGlwZSA9PSAwIHx8IHBhcmFtLT52YXJ5ID09IDApCisJCQlicmVhazsKKwkJZGV2X2RiZyAoJmludGYtPmRldiwKKwkJCQkiVEVTVCA0OiAgcmVhZC8lZCAwLi4lZCBieXRlcyAldSB0aW1lc1xuIiwKKwkJCQlwYXJhbS0+dmFyeSwgcGFyYW0tPmxlbmd0aCwgcGFyYW0tPml0ZXJhdGlvbnMpOworCQl1cmIgPSBzaW1wbGVfYWxsb2NfdXJiICh1ZGV2LCBkZXYtPmluX3BpcGUsIHBhcmFtLT5sZW5ndGgpOworCQlpZiAoIXVyYikgeworCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisJCS8vIEZJUk1XQVJFOiAgYnVsayBzb3VyY2UgKG1heWJlIGdlbmVyYXRlcyBzaG9ydCB3cml0ZXMpCisJCXJldHZhbCA9IHNpbXBsZV9pbyAodXJiLCBwYXJhbS0+aXRlcmF0aW9ucywgcGFyYW0tPnZhcnksCisJCQkJCTAsICJ0ZXN0NCIpOworCQlzaW1wbGVfZnJlZV91cmIgKHVyYik7CisJCWJyZWFrOworCisJLyogUXVldWVkIGJ1bGsgSS9PIHRlc3RzICovCisJY2FzZSA1OgorCQlpZiAoZGV2LT5vdXRfcGlwZSA9PSAwIHx8IHBhcmFtLT5zZ2xlbiA9PSAwKQorCQkJYnJlYWs7CisJCWRldl9kYmcgKCZpbnRmLT5kZXYsCisJCQkiVEVTVCA1OiAgd3JpdGUgJWQgc2dsaXN0cyAlZCBlbnRyaWVzIG9mICVkIGJ5dGVzXG4iLAorCQkJCXBhcmFtLT5pdGVyYXRpb25zLAorCQkJCXBhcmFtLT5zZ2xlbiwgcGFyYW0tPmxlbmd0aCk7CisJCXNnID0gYWxsb2Nfc2dsaXN0IChwYXJhbS0+c2dsZW4sIHBhcmFtLT5sZW5ndGgsIDApOworCQlpZiAoIXNnKSB7CisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJYnJlYWs7CisJCX0KKwkJLy8gRklSTVdBUkU6ICBidWxrIHNpbmsgKG1heWJlIGFjY2VwdHMgc2hvcnQgd3JpdGVzKQorCQlyZXR2YWwgPSBwZXJmb3JtX3NnbGlzdCAodWRldiwgcGFyYW0tPml0ZXJhdGlvbnMsIGRldi0+b3V0X3BpcGUsCisJCQkJJnJlcSwgc2csIHBhcmFtLT5zZ2xlbik7CisJCWZyZWVfc2dsaXN0IChzZywgcGFyYW0tPnNnbGVuKTsKKwkJYnJlYWs7CisKKwljYXNlIDY6CisJCWlmIChkZXYtPmluX3BpcGUgPT0gMCB8fCBwYXJhbS0+c2dsZW4gPT0gMCkKKwkJCWJyZWFrOworCQlkZXZfZGJnICgmaW50Zi0+ZGV2LAorCQkJIlRFU1QgNjogIHJlYWQgJWQgc2dsaXN0cyAlZCBlbnRyaWVzIG9mICVkIGJ5dGVzXG4iLAorCQkJCXBhcmFtLT5pdGVyYXRpb25zLAorCQkJCXBhcmFtLT5zZ2xlbiwgcGFyYW0tPmxlbmd0aCk7CisJCXNnID0gYWxsb2Nfc2dsaXN0IChwYXJhbS0+c2dsZW4sIHBhcmFtLT5sZW5ndGgsIDApOworCQlpZiAoIXNnKSB7CisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJYnJlYWs7CisJCX0KKwkJLy8gRklSTVdBUkU6ICBidWxrIHNvdXJjZSAobWF5YmUgZ2VuZXJhdGVzIHNob3J0IHdyaXRlcykKKwkJcmV0dmFsID0gcGVyZm9ybV9zZ2xpc3QgKHVkZXYsIHBhcmFtLT5pdGVyYXRpb25zLCBkZXYtPmluX3BpcGUsCisJCQkJJnJlcSwgc2csIHBhcmFtLT5zZ2xlbik7CisJCWZyZWVfc2dsaXN0IChzZywgcGFyYW0tPnNnbGVuKTsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlpZiAoZGV2LT5vdXRfcGlwZSA9PSAwIHx8IHBhcmFtLT5zZ2xlbiA9PSAwIHx8IHBhcmFtLT52YXJ5ID09IDApCisJCQlicmVhazsKKwkJZGV2X2RiZyAoJmludGYtPmRldiwKKwkJCSJURVNUIDc6ICB3cml0ZS8lZCAlZCBzZ2xpc3RzICVkIGVudHJpZXMgMC4uJWQgYnl0ZXNcbiIsCisJCQkJcGFyYW0tPnZhcnksIHBhcmFtLT5pdGVyYXRpb25zLAorCQkJCXBhcmFtLT5zZ2xlbiwgcGFyYW0tPmxlbmd0aCk7CisJCXNnID0gYWxsb2Nfc2dsaXN0IChwYXJhbS0+c2dsZW4sIHBhcmFtLT5sZW5ndGgsIHBhcmFtLT52YXJ5KTsKKwkJaWYgKCFzZykgeworCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisJCS8vIEZJUk1XQVJFOiAgYnVsayBzaW5rIChtYXliZSBhY2NlcHRzIHNob3J0IHdyaXRlcykKKwkJcmV0dmFsID0gcGVyZm9ybV9zZ2xpc3QgKHVkZXYsIHBhcmFtLT5pdGVyYXRpb25zLCBkZXYtPm91dF9waXBlLAorCQkJCSZyZXEsIHNnLCBwYXJhbS0+c2dsZW4pOworCQlmcmVlX3NnbGlzdCAoc2csIHBhcmFtLT5zZ2xlbik7CisJCWJyZWFrOworCWNhc2UgODoKKwkJaWYgKGRldi0+aW5fcGlwZSA9PSAwIHx8IHBhcmFtLT5zZ2xlbiA9PSAwIHx8IHBhcmFtLT52YXJ5ID09IDApCisJCQlicmVhazsKKwkJZGV2X2RiZyAoJmludGYtPmRldiwKKwkJCSJURVNUIDg6ICByZWFkLyVkICVkIHNnbGlzdHMgJWQgZW50cmllcyAwLi4lZCBieXRlc1xuIiwKKwkJCQlwYXJhbS0+dmFyeSwgcGFyYW0tPml0ZXJhdGlvbnMsCisJCQkJcGFyYW0tPnNnbGVuLCBwYXJhbS0+bGVuZ3RoKTsKKwkJc2cgPSBhbGxvY19zZ2xpc3QgKHBhcmFtLT5zZ2xlbiwgcGFyYW0tPmxlbmd0aCwgcGFyYW0tPnZhcnkpOworCQlpZiAoIXNnKSB7CisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJYnJlYWs7CisJCX0KKwkJLy8gRklSTVdBUkU6ICBidWxrIHNvdXJjZSAobWF5YmUgZ2VuZXJhdGVzIHNob3J0IHdyaXRlcykKKwkJcmV0dmFsID0gcGVyZm9ybV9zZ2xpc3QgKHVkZXYsIHBhcmFtLT5pdGVyYXRpb25zLCBkZXYtPmluX3BpcGUsCisJCQkJJnJlcSwgc2csIHBhcmFtLT5zZ2xlbik7CisJCWZyZWVfc2dsaXN0IChzZywgcGFyYW0tPnNnbGVuKTsKKwkJYnJlYWs7CisKKwkvKiBub24tcXVldWVkIHNhbml0eSB0ZXN0cyBmb3IgY29udHJvbCAoY2hhcHRlciA5IHN1YnNldCkgKi8KKwljYXNlIDk6CisJCXJldHZhbCA9IDA7CisJCWRldl9kYmcgKCZpbnRmLT5kZXYsCisJCQkiVEVTVCA5OiAgY2g5IChzdWJzZXQpIGNvbnRyb2wgdGVzdHMsICVkIHRpbWVzXG4iLAorCQkJCXBhcmFtLT5pdGVyYXRpb25zKTsKKwkJZm9yIChpID0gcGFyYW0tPml0ZXJhdGlvbnM7IHJldHZhbCA9PSAwICYmIGktLTsgLyogTk9QICovKQorCQkJcmV0dmFsID0gY2g5X3Bvc3Rjb25maWcgKGRldik7CisJCWlmIChyZXR2YWwpCisJCQlkYmcgKCJjaDkgc3Vic2V0IGZhaWxlZCwgaXRlcmF0aW9ucyBsZWZ0ICVkIiwgaSk7CisJCWJyZWFrOworCisJLyogcXVldWVkIGNvbnRyb2wgbWVzc2FnaW5nICovCisJY2FzZSAxMDoKKwkJaWYgKHBhcmFtLT5zZ2xlbiA9PSAwKQorCQkJYnJlYWs7CisJCXJldHZhbCA9IDA7CisJCWRldl9kYmcgKCZpbnRmLT5kZXYsCisJCQkJIlRFU1QgMTA6ICBxdWV1ZSAlZCBjb250cm9sIGNhbGxzLCAlZCB0aW1lc1xuIiwKKwkJCQlwYXJhbS0+c2dsZW4sCisJCQkJcGFyYW0tPml0ZXJhdGlvbnMpOworCQlyZXR2YWwgPSB0ZXN0X2N0cmxfcXVldWUgKGRldiwgcGFyYW0pOworCQlicmVhazsKKworCS8qIHNpbXBsZSBub24tcXVldWVkIHVubGlua3MgKHJpbmcgd2l0aCBvbmUgdXJiKSAqLworCWNhc2UgMTE6CisJCWlmIChkZXYtPmluX3BpcGUgPT0gMCB8fCAhcGFyYW0tPmxlbmd0aCkKKwkJCWJyZWFrOworCQlyZXR2YWwgPSAwOworCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAiVEVTVCAxMTogIHVubGluayAlZCByZWFkcyBvZiAlZFxuIiwKKwkJCQlwYXJhbS0+aXRlcmF0aW9ucywgcGFyYW0tPmxlbmd0aCk7CisJCWZvciAoaSA9IHBhcmFtLT5pdGVyYXRpb25zOyByZXR2YWwgPT0gMCAmJiBpLS07IC8qIE5PUCAqLykKKwkJCXJldHZhbCA9IHVubGlua19zaW1wbGUgKGRldiwgZGV2LT5pbl9waXBlLAorCQkJCQkJcGFyYW0tPmxlbmd0aCk7CisJCWlmIChyZXR2YWwpCisJCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAidW5saW5rIHJlYWRzIGZhaWxlZCAlZCwgIgorCQkJCSJpdGVyYXRpb25zIGxlZnQgJWRcbiIsIHJldHZhbCwgaSk7CisJCWJyZWFrOworCWNhc2UgMTI6CisJCWlmIChkZXYtPm91dF9waXBlID09IDAgfHwgIXBhcmFtLT5sZW5ndGgpCisJCQlicmVhazsKKwkJcmV0dmFsID0gMDsKKwkJZGV2X2RiZyAoJmludGYtPmRldiwgIlRFU1QgMTI6ICB1bmxpbmsgJWQgd3JpdGVzIG9mICVkXG4iLAorCQkJCXBhcmFtLT5pdGVyYXRpb25zLCBwYXJhbS0+bGVuZ3RoKTsKKwkJZm9yIChpID0gcGFyYW0tPml0ZXJhdGlvbnM7IHJldHZhbCA9PSAwICYmIGktLTsgLyogTk9QICovKQorCQkJcmV0dmFsID0gdW5saW5rX3NpbXBsZSAoZGV2LCBkZXYtPm91dF9waXBlLAorCQkJCQkJcGFyYW0tPmxlbmd0aCk7CisJCWlmIChyZXR2YWwpCisJCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAidW5saW5rIHdyaXRlcyBmYWlsZWQgJWQsICIKKwkJCQkiaXRlcmF0aW9ucyBsZWZ0ICVkXG4iLCByZXR2YWwsIGkpOworCQlicmVhazsKKworCS8qIGVwIGhhbHQgdGVzdHMgKi8KKwljYXNlIDEzOgorCQlpZiAoZGV2LT5vdXRfcGlwZSA9PSAwICYmIGRldi0+aW5fcGlwZSA9PSAwKQorCQkJYnJlYWs7CisJCXJldHZhbCA9IDA7CisJCWRldl9kYmcgKCZpbnRmLT5kZXYsICJURVNUIDEzOiAgc2V0L2NsZWFyICVkIGhhbHRzXG4iLAorCQkJCXBhcmFtLT5pdGVyYXRpb25zKTsKKwkJZm9yIChpID0gcGFyYW0tPml0ZXJhdGlvbnM7IHJldHZhbCA9PSAwICYmIGktLTsgLyogTk9QICovKQorCQkJcmV0dmFsID0gaGFsdF9zaW1wbGUgKGRldik7CisJCQorCQlpZiAocmV0dmFsKQorCQkJREJHIChkZXYsICJoYWx0cyBmYWlsZWQsIGl0ZXJhdGlvbnMgbGVmdCAlZFxuIiwgaSk7CisJCWJyZWFrOworCisJLyogY29udHJvbCB3cml0ZSB0ZXN0cyAqLworCWNhc2UgMTQ6CisJCWlmICghZGV2LT5pbmZvLT5jdHJsX291dCkKKwkJCWJyZWFrOworCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAiVEVTVCAxNDogICVkIGVwMG91dCwgMC4uJWQgdmFyeSAlZFxuIiwKKwkJCQlwYXJhbS0+aXRlcmF0aW9ucywgcGFyYW0tPmxlbmd0aCwgcGFyYW0tPnZhcnkpOworCQlyZXR2YWwgPSBjdHJsX291dCAoZGV2LCBwYXJhbS0+aXRlcmF0aW9ucywgCisJCQkJcGFyYW0tPmxlbmd0aCwgcGFyYW0tPnZhcnkpOworCQlicmVhazsKKworCS8qIGlzbyB3cml0ZSB0ZXN0cyAqLworCWNhc2UgMTU6CisJCWlmIChkZXYtPm91dF9pc29fcGlwZSA9PSAwIHx8IHBhcmFtLT5zZ2xlbiA9PSAwKQorCQkJYnJlYWs7CisJCWRldl9kYmcgKCZpbnRmLT5kZXYsIAorCQkJIlRFU1QgMTU6ICB3cml0ZSAlZCBpc28sICVkIGVudHJpZXMgb2YgJWQgYnl0ZXNcbiIsCisJCQkJcGFyYW0tPml0ZXJhdGlvbnMsCisJCQkJcGFyYW0tPnNnbGVuLCBwYXJhbS0+bGVuZ3RoKTsKKwkJLy8gRklSTVdBUkU6ICBpc28gc2luaworCQlyZXR2YWwgPSB0ZXN0X2lzb19xdWV1ZSAoZGV2LCBwYXJhbSwKKwkJCQlkZXYtPm91dF9pc29fcGlwZSwgZGV2LT5pc29fb3V0KTsKKwkJYnJlYWs7CisKKwkvKiBpc28gcmVhZCB0ZXN0cyAqLworCWNhc2UgMTY6CisJCWlmIChkZXYtPmluX2lzb19waXBlID09IDAgfHwgcGFyYW0tPnNnbGVuID09IDApCisJCQlicmVhazsKKwkJZGV2X2RiZyAoJmludGYtPmRldiwKKwkJCSJURVNUIDE2OiAgcmVhZCAlZCBpc28sICVkIGVudHJpZXMgb2YgJWQgYnl0ZXNcbiIsCisJCQkJcGFyYW0tPml0ZXJhdGlvbnMsCisJCQkJcGFyYW0tPnNnbGVuLCBwYXJhbS0+bGVuZ3RoKTsKKwkJLy8gRklSTVdBUkU6ICBpc28gc291cmNlCisJCXJldHZhbCA9IHRlc3RfaXNvX3F1ZXVlIChkZXYsIHBhcmFtLAorCQkJCWRldi0+aW5faXNvX3BpcGUsIGRldi0+aXNvX2luKTsKKwkJYnJlYWs7CisKKwkvLyBGSVhNRSB1bmxpbmsgZnJvbSBxdWV1ZSAocmluZyB3aXRoIE4gdXJicykKKworCS8vIEZJWE1FIHNjYXR0ZXJsaXN0IGNhbmNlbCAobmVlZHMgaGVscGVyIHRocmVhZCkKKworCX0KKwlkb19nZXR0aW1lb2ZkYXkgKCZwYXJhbS0+ZHVyYXRpb24pOworCXBhcmFtLT5kdXJhdGlvbi50dl9zZWMgLT0gc3RhcnQudHZfc2VjOworCXBhcmFtLT5kdXJhdGlvbi50dl91c2VjIC09IHN0YXJ0LnR2X3VzZWM7CisJaWYgKHBhcmFtLT5kdXJhdGlvbi50dl91c2VjIDwgMCkgeworCQlwYXJhbS0+ZHVyYXRpb24udHZfdXNlYyArPSAxMDAwICogMTAwMDsKKwkJcGFyYW0tPmR1cmF0aW9uLnR2X3NlYyAtPSAxOworCX0KKwl1cCAoJmRldi0+c2VtKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdW5zaWduZWQgZm9yY2VfaW50ZXJydXB0ID0gMDsKK21vZHVsZV9wYXJhbSAoZm9yY2VfaW50ZXJydXB0LCB1aW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MgKGZvcmNlX2ludGVycnVwdCwgIjAgPSB0ZXN0IGRlZmF1bHQ7IGVsc2UgaW50ZXJydXB0Iik7CisKKyNpZmRlZglHRU5FUklDCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgdmVuZG9yOworbW9kdWxlX3BhcmFtKHZlbmRvciwgdXNob3J0LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MgKHZlbmRvciwgInZlbmRvciBjb2RlIChmcm9tIHVzYi1pZikiKTsKKworc3RhdGljIHVuc2lnbmVkIHNob3J0IHByb2R1Y3Q7Cittb2R1bGVfcGFyYW0ocHJvZHVjdCwgdXNob3J0LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MgKHByb2R1Y3QsICJwcm9kdWN0IGNvZGUgKGZyb20gdmVuZG9yKSIpOworI2VuZGlmCisKK3N0YXRpYyBpbnQKK3VzYnRlc3RfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CisJc3RydWN0IHVzYnRlc3RfZGV2CSpkZXY7CisJc3RydWN0IHVzYnRlc3RfaW5mbwkqaW5mbzsKKwljaGFyCQkJKnJ0ZXN0LCAqd3Rlc3Q7CisJY2hhcgkJCSppcnRlc3QsICppd3Rlc3Q7CisKKwl1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldiAoaW50Zik7CisKKyNpZmRlZglHRU5FUklDCisJLyogc3BlY2lmeSBkZXZpY2VzIGJ5IG1vZHVsZSBwYXJhbWV0ZXJzPyAqLworCWlmIChpZC0+bWF0Y2hfZmxhZ3MgPT0gMCkgeworCQkvKiB2ZW5kb3IgbWF0Y2ggcmVxdWlyZWQsIHByb2R1Y3QgbWF0Y2ggb3B0aW9uYWwgKi8KKwkJaWYgKCF2ZW5kb3IgfHwgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgIT0gKHUxNil2ZW5kb3IpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJaWYgKHByb2R1Y3QgJiYgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9ICh1MTYpcHJvZHVjdCkKKwkJCXJldHVybiAtRU5PREVWOworCQlkYmcgKCJtYXRjaGVkIG1vZHVsZSBwYXJhbXMsIHZlbmQ9MHglMDR4IHByb2Q9MHglMDR4IiwKKwkJCQlsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkJCQlsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOworCX0KKyNlbmRpZgorCisJZGV2ID0ga21hbGxvYyAoc2l6ZW9mICpkZXYsIFNMQUJfS0VSTkVMKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0IChkZXYsIDAsIHNpemVvZiAqZGV2KTsKKwlpbmZvID0gKHN0cnVjdCB1c2J0ZXN0X2luZm8gKikgaWQtPmRyaXZlcl9pbmZvOworCWRldi0+aW5mbyA9IGluZm87CisJaW5pdF9NVVRFWCAoJmRldi0+c2VtKTsKKworCWRldi0+aW50ZiA9IGludGY7CisKKwkvKiBjYWNoZWxpbmUtYWxpZ25lZCBzY3JhdGNoIGZvciBpL28gKi8KKwlpZiAoKGRldi0+YnVmID0ga21hbGxvYyAoVEJVRl9TSVpFLCBTTEFCX0tFUk5FTCkpID09IE5VTEwpIHsKKwkJa2ZyZWUgKGRldik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIE5PVEUgdGhpcyBkb2Vzbid0IHlldCB0ZXN0IHRoZSBoYW5kZnVsIG9mIGRpZmZlcmVuY2UgdGhhdCBhcmUKKwkgKiB2aXNpYmxlIHdpdGggaGlnaCBzcGVlZCBpbnRlcnJ1cHRzOiAgYmlnZ2VyIG1heHBhY2tldCAoMUspIGFuZAorCSAqICJoaWdoIGJhbmR3aWR0aCIgbW9kZXMgKHVwIHRvIDMgcGFja2V0cy91ZnJhbWUpLgorCSAqLworCXJ0ZXN0ID0gd3Rlc3QgPSAiIjsKKwlpcnRlc3QgPSBpd3Rlc3QgPSAiIjsKKwlpZiAoZm9yY2VfaW50ZXJydXB0IHx8IHVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9MT1cpIHsKKwkJaWYgKGluZm8tPmVwX2luKSB7CisJCQlkZXYtPmluX3BpcGUgPSB1c2JfcmN2aW50cGlwZSAodWRldiwgaW5mby0+ZXBfaW4pOworCQkJcnRlc3QgPSAiIGludHItaW4iOworCQl9CisJCWlmIChpbmZvLT5lcF9vdXQpIHsKKwkJCWRldi0+b3V0X3BpcGUgPSB1c2Jfc25kaW50cGlwZSAodWRldiwgaW5mby0+ZXBfb3V0KTsKKwkJCXd0ZXN0ID0gIiBpbnRyLW91dCI7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoaW5mby0+YXV0b2NvbmYpIHsKKwkJCWludCBzdGF0dXM7CisKKwkJCXN0YXR1cyA9IGdldF9lbmRwb2ludHMgKGRldiwgaW50Zik7CisJCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJCWRiZyAoImNvdWxkbid0IGdldCBlbmRwb2ludHMsICVkXG4iLCBzdGF0dXMpOworCQkJCXJldHVybiBzdGF0dXM7CisJCQl9CisJCQkvKiBtYXkgZmluZCBidWxrIG9yIElTTyBwaXBlcyAqLworCQl9IGVsc2UgeworCQkJaWYgKGluZm8tPmVwX2luKQorCQkJCWRldi0+aW5fcGlwZSA9IHVzYl9yY3ZidWxrcGlwZSAodWRldiwKKwkJCQkJCQlpbmZvLT5lcF9pbik7CisJCQlpZiAoaW5mby0+ZXBfb3V0KQorCQkJCWRldi0+b3V0X3BpcGUgPSB1c2Jfc25kYnVsa3BpcGUgKHVkZXYsCisJCQkJCQkJaW5mby0+ZXBfb3V0KTsKKwkJfQorCQlpZiAoZGV2LT5pbl9waXBlKQorCQkJcnRlc3QgPSAiIGJ1bGstaW4iOworCQlpZiAoZGV2LT5vdXRfcGlwZSkKKwkJCXd0ZXN0ID0gIiBidWxrLW91dCI7CisJCWlmIChkZXYtPmluX2lzb19waXBlKQorCQkJaXJ0ZXN0ID0gIiBpc28taW4iOworCQlpZiAoZGV2LT5vdXRfaXNvX3BpcGUpCisJCQlpd3Rlc3QgPSAiIGlzby1vdXQiOworCX0KKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIGRldik7CisJZGV2X2luZm8gKCZpbnRmLT5kZXYsICIlc1xuIiwgaW5mby0+bmFtZSk7CisJZGV2X2luZm8gKCZpbnRmLT5kZXYsICIlcyBzcGVlZCB7Y29udHJvbCVzJXMlcyVzJXN9IHRlc3RzJXNcbiIsCisJCQkoeyBjaGFyICp0bXA7CisJCQlzd2l0Y2ggKHVkZXYtPnNwZWVkKSB7CisJCQljYXNlIFVTQl9TUEVFRF9MT1c6IHRtcCA9ICJsb3ciOyBicmVhazsKKwkJCWNhc2UgVVNCX1NQRUVEX0ZVTEw6IHRtcCA9ICJmdWxsIjsgYnJlYWs7CisJCQljYXNlIFVTQl9TUEVFRF9ISUdIOiB0bXAgPSAiaGlnaCI7IGJyZWFrOworCQkJZGVmYXVsdDogdG1wID0gInVua25vd24iOyBicmVhazsKKwkJCX07IHRtcDsgfSksCisJCQlpbmZvLT5jdHJsX291dCA/ICIgaW4vb3V0IiA6ICIiLAorCQkJcnRlc3QsIHd0ZXN0LAorCQkJaXJ0ZXN0LCBpd3Rlc3QsCisJCQlpbmZvLT5hbHQgPj0gMCA/ICIgKCthbHQpIiA6ICIiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXNidGVzdF9kaXNjb25uZWN0IChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNidGVzdF9kZXYJKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCisJZG93biAoJmRldi0+c2VtKTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCWRldl9kYmcgKCZpbnRmLT5kZXYsICJkaXNjb25uZWN0XG4iKTsKKwlrZnJlZSAoZGV2KTsKK30KKworLyogQmFzaWMgdGVzdGluZyBvbmx5IG5lZWRzIGEgZGV2aWNlIHRoYXQgY2FuIHNvdXJjZSBvciBzaW5rIGJ1bGsgdHJhZmZpYy4KKyAqIEFueSBkZXZpY2UgY2FuIHRlc3QgY29udHJvbCB0cmFuc2ZlcnMgKGRlZmF1bHQgd2l0aCBHRU5FUklDIGJpbmRpbmcpLgorICoKKyAqIFNldmVyYWwgZW50cmllcyB3b3JrIHdpdGggdGhlIGRlZmF1bHQgRVAwIGltcGxlbWVudGF0aW9uIHRoYXQncyBidWlsdAorICogaW50byBFWi1VU0IgY2hpcHMuICBUaGVyZSdzIGEgZGVmYXVsdCB2ZW5kb3IgSUQgd2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4KKyAqIGJ5ICh2ZXJ5KSBzbWFsbCBjb25maWcgRUVQUk9NUywgYnV0IG90aGVyd2lzZSBhbGwgdGhlc2UgZGV2aWNlcyBhY3QKKyAqIGlkZW50aWNhbGx5IHVudGlsIGZpcm13YXJlIGlzIGxvYWRlZDogIG9ubHkgRVAwIHdvcmtzLiAgSXQgdHVybnMgb3V0CisgKiB0byBiZSBlYXN5IHRvIG1ha2Ugb3RoZXIgZW5kcG9pbnRzIHdvcmssIHdpdGhvdXQgbW9kaWZ5aW5nIHRoYXQgRVAwCisgKiBiZWhhdmlvci4gIEZvciBub3csIHdlIGV4cGVjdCB0aGF0IGtpbmQgb2YgZmlybXdhcmUuCisgKi8KKworLyogYW4yMXh4IG9yIGZ4IHZlcnNpb25zIG9mIGV6LXVzYiAqLworc3RhdGljIHN0cnVjdCB1c2J0ZXN0X2luZm8gZXoxX2luZm8gPSB7CisJLm5hbWUJCT0gIkVaLVVTQiBkZXZpY2UiLAorCS5lcF9pbgkJPSAyLAorCS5lcF9vdXQJCT0gMiwKKwkuYWx0CQk9IDEsCit9OworCisvKiBmeDIgdmVyc2lvbiBvZiBlei11c2IgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNidGVzdF9pbmZvIGV6Ml9pbmZvID0geworCS5uYW1lCQk9ICJGWDIgZGV2aWNlIiwKKwkuZXBfaW4JCT0gNiwKKwkuZXBfb3V0CQk9IDIsCisJLmFsdAkJPSAxLAorfTsKKworLyogZXp1c2IgZmFtaWx5IGRldmljZSB3aXRoIGRlZGljYXRlZCB1c2IgdGVzdCBmaXJtd2FyZSwKKyAqLworc3RhdGljIHN0cnVjdCB1c2J0ZXN0X2luZm8gZndfaW5mbyA9IHsKKwkubmFtZQkJPSAidXNiIHRlc3QgZGV2aWNlIiwKKwkuZXBfaW4JCT0gMiwKKwkuZXBfb3V0CQk9IDIsCisJLmFsdAkJPSAxLAorCS5hdXRvY29uZgk9IDEsCQkvLyBpc28gYW5kIGN0cmxfb3V0IG5lZWQgYXV0b2NvbmYKKwkuY3RybF9vdXQJPSAxLAorCS5pc28JCT0gMSwJCS8vIGlzb19lcCdzIGFyZSAjOCBpbi9vdXQKK307CisKKy8qIHBlcmlwaGVyYWwgcnVubmluZyBMaW51eCBhbmQgJ3plcm8uYycgdGVzdCBmaXJtd2FyZSwgb3IKKyAqIGl0cyB1c2VyLW1vZGUgY291c2luLiBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhpcyB1c2UKKyAqIGRpZmZlcmVudCBoYXJkd2FyZSB3aXRoIHRoZSBzYW1lIHZlbmRvci9wcm9kdWN0IGNvZGVzLgorICogaG9zdCBzaWRlIE1VU1QgcmVseSBvbiB0aGUgZW5kcG9pbnQgZGVzY3JpcHRvcnMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNidGVzdF9pbmZvIGd6X2luZm8gPSB7CisJLm5hbWUJCT0gIkxpbnV4IGdhZGdldCB6ZXJvIiwKKwkuYXV0b2NvbmYJPSAxLAorCS5jdHJsX291dAk9IDEsCisJLmFsdAkJPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2J0ZXN0X2luZm8gdW1faW5mbyA9IHsKKwkubmFtZQkJPSAiTGludXggdXNlciBtb2RlIHRlc3QgZHJpdmVyIiwKKwkuYXV0b2NvbmYJPSAxLAorCS5hbHQJCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IHVzYnRlc3RfaW5mbyB1bTJfaW5mbyA9IHsKKwkubmFtZQkJPSAiTGludXggdXNlciBtb2RlIElTTyB0ZXN0IGRyaXZlciIsCisJLmF1dG9jb25mCT0gMSwKKwkuaXNvCQk9IDEsCisJLmFsdAkJPSAtMSwKK307CisKKyNpZmRlZiBJQk9UMgorLyogdGhpcyBpcyBhIG5pY2Ugc291cmNlIG9mIGhpZ2ggc3BlZWQgYnVsayBkYXRhOworICogdXNlcyBhbiBGWDIsIHdpdGggZmlybXdhcmUgcHJvdmlkZWQgaW4gdGhlIGRldmljZQorICovCitzdGF0aWMgc3RydWN0IHVzYnRlc3RfaW5mbyBpYm90Ml9pbmZvID0geworCS5uYW1lCQk9ICJpQk9UMiB3ZWJjYW0iLAorCS5lcF9pbgkJPSAyLAorCS5hbHQJCT0gLTEsCit9OworI2VuZGlmCisKKyNpZmRlZiBHRU5FUklDCisvKiB3ZSBjYW4gdXNlIGFueSBkZXZpY2UgdG8gdGVzdCBjb250cm9sIHRyYWZmaWMgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNidGVzdF9pbmZvIGdlbmVyaWNfaW5mbyA9IHsKKwkubmFtZQkJPSAiR2VuZXJpYyBVU0IgZGV2aWNlIiwKKwkuYWx0CQk9IC0xLAorfTsKKyNlbmRpZgorCisvLyBGSVhNRSByZW1vdmUgdGhpcyAKK3N0YXRpYyBzdHJ1Y3QgdXNidGVzdF9pbmZvIGhhY3RfaW5mbyA9IHsKKwkubmFtZQkJPSAiRlgyL2hhY3QiLAorCS8vLmVwX2luCQk9IDYsCisJLmVwX291dAkJPSAyLAorCS5hbHQJCT0gLTEsCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKKworCXsgVVNCX0RFVklDRSAoMHgwNTQ3LCAweDEwMDIpLAorCQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmhhY3RfaW5mbywKKwkJfSwKKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKwkvKiBFWi1VU0IgZGV2aWNlcyB3aGljaCBkb3dubG9hZCBmaXJtd2FyZSB0byByZXBsYWNlIChvciBpbiBvdXIKKwkgKiBjYXNlIGF1Z21lbnQpIHRoZSBkZWZhdWx0IGRldmljZSBpbXBsZW1lbnRhdGlvbi4KKwkgKi8KKworCS8qIGdlbmVyaWMgRVotVVNCIEZYIGNvbnRyb2xsZXIgKi8KKwl7IFVTQl9ERVZJQ0UgKDB4MDU0NywgMHgyMjM1KSwKKwkJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZlejFfaW5mbywKKwkJfSwKKworCS8qIENZMzY3MSBkZXZlbG9wbWVudCBib2FyZCB3aXRoIEVaLVVTQiBGWCAqLworCXsgVVNCX0RFVklDRSAoMHgwNTQ3LCAweDAwODApLAorCQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmV6MV9pbmZvLAorCQl9LAorCisJLyogZ2VuZXJpYyBFWi1VU0IgRlgyIGNvbnRyb2xsZXIgKG9yIGRldmVsb3BtZW50IGJvYXJkKSAqLworCXsgVVNCX0RFVklDRSAoMHgwNGI0LCAweDg2MTMpLAorCQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmV6Ml9pbmZvLAorCQl9LAorCisJLyogcmUtZW51bWVyYXRlZCB1c2IgdGVzdCBkZXZpY2UgZmlybXdhcmUgKi8KKwl7IFVTQl9ERVZJQ0UgKDB4ZmZmMCwgMHhmZmYwKSwKKwkJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZmd19pbmZvLAorCQl9LAorCisJLyogIkdhZGdldCBaZXJvIiBmaXJtd2FyZSBydW5zIHVuZGVyIExpbnV4ICovCisJeyBVU0JfREVWSUNFICgweDA1MjUsIDB4YTRhMCksCisJCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmZ3pfaW5mbywKKwkJfSwKKworCS8qIHNvIGRvZXMgYSB1c2VyLW1vZGUgdmFyaWFudCAqLworCXsgVVNCX0RFVklDRSAoMHgwNTI1LCAweGE0YTQpLAorCQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJnVtX2luZm8sCisJCX0sCisKKwkvKiAuLi4gYW5kIGEgdXNlci1tb2RlIHZhcmlhbnQgdGhhdCB0YWxrcyBpc28gKi8KKwl7IFVTQl9ERVZJQ0UgKDB4MDUyNSwgMHhhNGEzKSwKKwkJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZ1bTJfaW5mbywKKwkJfSwKKworI2lmZGVmIEtFWVNQQU5fMTlRaQorCS8qIEtleXNwYW4gMTlxaSB1c2VzIGFuMjF4eCAob3JpZ2luYWwgRVotVVNCKSAqLworCS8vIHRoaXMgZG9lcyBub3QgY29leGlzdCB3aXRoIHRoZSByZWFsIEtleXNwYW4gMTlxaSBkcml2ZXIhCisJeyBVU0JfREVWSUNFICgweDA2Y2QsIDB4MDEwYiksCisJCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmZXoxX2luZm8sCisJCX0sCisjZW5kaWYKKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBJQk9UMgorCS8qIGlCT1QyIG1ha2VzIGEgbmljZSBzb3VyY2Ugb2YgaGlnaCBzcGVlZCBidWxrLWluIGRhdGEgKi8KKwkvLyB0aGlzIGRvZXMgbm90IGNvZXhpc3Qgd2l0aCBhIHJlYWwgaUJPVDIgZHJpdmVyIQorCXsgVVNCX0RFVklDRSAoMHgwYjYyLCAweDAwNTkpLAorCQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmlib3QyX2luZm8sCisJCX0sCisjZW5kaWYKKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBHRU5FUklDCisJLyogbW9kdWxlIHBhcmFtcyBjYW4gc3BlY2lmeSBkZXZpY2VzIHRvIHVzZSBmb3IgY29udHJvbCB0ZXN0cyAqLworCXsgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZnZW5lcmljX2luZm8sIH0sCisjZW5kaWYKKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYnRlc3RfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJ1c2J0ZXN0IiwKKwkuaWRfdGFibGUgPQlpZF90YWJsZSwKKwkucHJvYmUgPQl1c2J0ZXN0X3Byb2JlLAorCS5pb2N0bCA9CXVzYnRlc3RfaW9jdGwsCisJLmRpc2Nvbm5lY3QgPQl1c2J0ZXN0X2Rpc2Nvbm5lY3QsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9faW5pdCB1c2J0ZXN0X2luaXQgKHZvaWQpCit7CisjaWZkZWYgR0VORVJJQworCWlmICh2ZW5kb3IpCisJCWRiZyAoInBhcmFtczogdmVuZD0weCUwNHggcHJvZD0weCUwNHgiLCB2ZW5kb3IsIHByb2R1Y3QpOworI2VuZGlmCisJcmV0dXJuIHVzYl9yZWdpc3RlciAoJnVzYnRlc3RfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0ICh1c2J0ZXN0X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNidGVzdF9leGl0ICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgmdXNidGVzdF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQgKHVzYnRlc3RfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTiAoIlVTQiBDb3JlL0hDRCBUZXN0aW5nIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c3M3MjAuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFhNzQ0MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMKQEAgLTAsMCArMSw2NzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCXVzczcyMC5jICAtLSAgVVNTNzIwIFVTQiBQYXJwb3J0IENhYmxlLgorICoKKyAqCUNvcHlyaWdodCAoQykgMTk5OQorICoJICAgIFRob21hcyBTYWlsZXIgKHNhaWxlckBpZmUuZWUuZXRoei5jaCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICoJYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqCU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICoJWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKglGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiAgQmFzZWQgb24gcGFycG9ydF9wYy5jCisgKgorICogIEhpc3Rvcnk6CisgKiAgIDAuMSAgMDQuMDguOTkgIENyZWF0ZWQKKyAqICAgMC4yICAwNy4wOC45OSAgU29tZSBmaXhlcyBtYWlubHkgc3VnZ2VzdGVkIGJ5IFRpbSBXYXVnaAorICoJCSAgICBJbnRlcnJ1cHQgaGFuZGxpbmcgY3VycmVudGx5IGRpc2FibGVkIGJlY2F1c2UKKyAqCQkgICAgdXNiX3JlcXVlc3RfaXJxIGNyYXNoZXMgc29tZXdoZXJlIHdpdGhpbiBvaGNpLmMKKyAqCQkgICAgZm9yIG5vIGFwcGFyZW50IHJlYXNvbiAodGhhdCBpcyBmb3IgbWUsIGFueXdheSkKKyAqCQkgICAgRUNQIGN1cnJlbnRseSB1bnRlc3RlZAorICogICAwLjMgIDEwLjA4Ljk5ICBmaXhpbmcgbWVyZ2UgZXJyb3JzCisgKiAgIDAuNCAgMTMuMDguOTkgIEFkZGVkIFZlbmRvci9Qcm9kdWN0IElEIG9mIEJyYWQgSGFyZCdzIGNhYmxlCisgKiAgIDAuNSAgMjAuMDkuOTkgIHVzYl9jb250cm9sX21zZyB3cmFwcGVyIHVzZWQKKyAqICAgICAgICBOb3YwMS4wMCAgdXNiX2RldmljZV90YWJsZSBzdXBwb3J0IGJ5IEFkYW0gSi4gUmljaHRlcgorICogICAgICAgIDA4LjA0LjAxICBJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLiAgZ2IKKyAqCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC41IgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJUaG9tYXMgTS4gU2FpbGVyLCBzYWlsZXJAaWZlLmVlLmV0aHouY2giCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgUGFycG9ydCBDYWJsZSBkcml2ZXIgZm9yIENhYmxlcyB1c2luZyB0aGUgTHVjZW50IFRlY2hub2xvZ2llcyBVU1M3MjAgQ2hpcCIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCXZvaWQgKmlycWhhbmRsZTsKKwl1bnNpZ25lZCBpbnQgaXJxcGlwZTsKKwl1bnNpZ25lZCBjaGFyIHJlZ1s3XTsgIC8qIFVTQiByZWdpc3RlcnMgKi8KK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGdldF8xMjg0X3JlZ2lzdGVyKHN0cnVjdCBwYXJwb3J0ICpwcCwgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgKnZhbCkKK3sKKwlzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSAqcHJpdiA9IHBwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IHByaXYtPnVzYmRldjsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciByZWdpbmRleFs5XSA9IHsKKwkJNCwgMCwgMSwgNSwgNSwgMCwgMiwgMywgNgorCX07CisJaW50IHJldDsKKworCWlmICghdXNiZGV2KQorCQlyZXR1cm4gLTE7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVzYmRldiwgdXNiX3JjdmN0cmxwaXBlKHVzYmRldiwwKSwgMywgMHhjMCwgKCh1bnNpZ25lZCBpbnQpcmVnKSA8PCA4LCAwLCBwcml2LT5yZWcsIDcsIDEwMDApOworCWlmIChyZXQgIT0gNykgeworCQlwcmludGsoS0VSTl9ERUJVRyAidXNzNzIwOiBnZXRfMTI4NF9yZWdpc3RlciglZCkgZmFpbGVkLCBzdGF0dXMgMHgleCBleHBlY3RlZCA3XG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGludClyZWcsIHJldCk7CisJCXJldCA9IC0xOworCX0gZWxzZSB7CisjaWYgMAorCQlwcmludGsoS0VSTl9ERUJVRyAidXNzNzIwOiBnZXRfMTI4NF9yZWdpc3RlciglZCkgcmV0dXJuICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCisJCSAgICAgICAodW5zaWduZWQgaW50KXJlZywgKHVuc2lnbmVkIGludClwcml2LT5yZWdbMF0sICh1bnNpZ25lZCBpbnQpcHJpdi0+cmVnWzFdLAorCQkgICAgICAgKHVuc2lnbmVkIGludClwcml2LT5yZWdbMl0sICh1bnNpZ25lZCBpbnQpcHJpdi0+cmVnWzNdLCAodW5zaWduZWQgaW50KXByaXYtPnJlZ1s0XSwKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpcHJpdi0+cmVnWzVdLCAodW5zaWduZWQgaW50KXByaXYtPnJlZ1s2XSk7CisjZW5kaWYKKwkJLyogaWYgbkFjayBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkIGFuZCB3ZSBoYXZlIGFuIGludGVycnVwdCwgY2FsbCB0aGUgaW50ZXJydXB0IHByb2NlZHVyZSAqLworCQlpZiAocHJpdi0+cmVnWzJdICYgcHJpdi0+cmVnWzFdICYgMHgxMCkKKwkJCXBhcnBvcnRfZ2VuZXJpY19pcnEoMCwgcHAsIE5VTEwpOworCQlyZXQgPSAwOworCX0KKwlpZiAodmFsKQorCQkqdmFsID0gcHJpdi0+cmVnWyhyZWcgPj0gOSkgPyAwIDogcmVnaW5kZXhbcmVnXV07CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzZXRfMTI4NF9yZWdpc3RlcihzdHJ1Y3QgcGFycG9ydCAqcHAsIHVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBjaGFyIHZhbCkKK3sKKwlzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSAqcHJpdiA9IHBwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IHByaXYtPnVzYmRldjsKKwlpbnQgcmV0OworCisJaWYgKCF1c2JkZXYpCisJCXJldHVybiAtMTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codXNiZGV2LCB1c2Jfc25kY3RybHBpcGUodXNiZGV2LDApLCA0LCAweDQwLCAoKCh1bnNpZ25lZCBpbnQpcmVnKSA8PCA4KSB8IHZhbCwgMCwgTlVMTCwgMCwgMTAwMCk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAidXNzNzIwOiBzZXRfMTI4NF9yZWdpc3RlcigldSwweCUwMngpIGZhaWxlZCwgc3RhdHVzIDB4JXhcbiIsIAorCQkgICAgICAgKHVuc2lnbmVkIGludClyZWcsICh1bnNpZ25lZCBpbnQpdmFsLCByZXQpOworCX0gZWxzZSB7CisjaWYgMAorCQlwcmludGsoS0VSTl9ERUJVRyAidXNzNzIwOiBzZXRfMTI4NF9yZWdpc3RlcigldSwweCUwMngpXG4iLCAKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpcmVnLCAodW5zaWduZWQgaW50KXZhbCk7CisjZW5kaWYKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEVDUiBtb2RlcyAqLworI2RlZmluZSBFQ1JfU1BQIDAwCisjZGVmaW5lIEVDUl9QUzIgMDEKKyNkZWZpbmUgRUNSX1BQRiAwMgorI2RlZmluZSBFQ1JfRUNQIDAzCisjZGVmaW5lIEVDUl9FUFAgMDQKKworLyogU2FmZWx5IGNoYW5nZSB0aGUgbW9kZSBiaXRzIGluIHRoZSBFQ1IgKi8KK3N0YXRpYyBpbnQgY2hhbmdlX21vZGUoc3RydWN0IHBhcnBvcnQgKnBwLCBpbnQgbSkKK3sKKwlzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSAqcHJpdiA9IHBwLT5wcml2YXRlX2RhdGE7CisJaW50IG1vZGU7CisKKwlpZiAoZ2V0XzEyODRfcmVnaXN0ZXIocHAsIDYsIE5VTEwpKQorCQlyZXR1cm4gLUVJTzsKKwkvKiBCaXRzIDw3OjU+IGNvbnRhaW4gdGhlIG1vZGUuICovCisJbW9kZSA9IChwcml2LT5yZWdbMl0gPj4gNSkgJiAweDc7CisJaWYgKG1vZGUgPT0gbSkKKwkJcmV0dXJuIDA7CisJLyogV2UgaGF2ZSB0byBnbyB0aHJvdWdoIG1vZGUgMDAwIG9yIDAwMSAqLworCWlmIChtb2RlID4gRUNSX1BTMiAmJiBtID4gRUNSX1BTMikKKwkJaWYgKGNoYW5nZV9tb2RlKHBwLCBFQ1JfUFMyKSkKKwkJCXJldHVybiAtRUlPOworCisJaWYgKG0gPD0gRUNSX1BTMiAmJiAhKHByaXYtPnJlZ1sxXSAmIDB4MjApKSB7CisJCS8qIFRoaXMgbW9kZSByZXNldHMgdGhlIEZJRk8sIHNvIHdlIG1heQorCQkgKiBoYXZlIHRvIHdhaXQgZm9yIGl0IHRvIGRyYWluIGZpcnN0LiAqLworCQl1bnNpZ25lZCBsb25nIGV4cGlyZSA9IGppZmZpZXMgKyBwcC0+cGh5c3BvcnQtPmNhZC0+dGltZW91dDsKKwkJc3dpdGNoIChtb2RlKSB7CisJCWNhc2UgRUNSX1BQRjogLyogUGFyYWxsZWwgUG9ydCBGSUZPIG1vZGUgKi8KKwkJY2FzZSBFQ1JfRUNQOiAvKiBFQ1AgUGFyYWxsZWwgUG9ydCBtb2RlICovCisJCQkvKiBQb2xsIHNsb3dseS4gKi8KKwkJCWZvciAoOzspIHsKKwkJCQlpZiAoZ2V0XzEyODRfcmVnaXN0ZXIocHAsIDYsIE5VTEwpKQorCQkJCQlyZXR1cm4gLUVJTzsKKwkJCQlpZiAocHJpdi0+cmVnWzJdICYgMHgwMSkKKwkJCQkJYnJlYWs7CisJCQkJaWYgKHRpbWVfYWZ0ZXJfZXEgKGppZmZpZXMsIGV4cGlyZSkpCisJCQkJCS8qIFRoZSBGSUZPIGlzIHN0dWNrLiAqLworCQkJCQlyZXR1cm4gLUVCVVNZOworCQkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwKTsKKwkJCQlpZiAoc2lnbmFsX3BlbmRpbmcgKGN1cnJlbnQpKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwkvKiBTZXQgdGhlIG1vZGUuICovCisJaWYgKHNldF8xMjg0X3JlZ2lzdGVyKHBwLCA2LCBtIDw8IDUpKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENsZWFyIFRJTUVPVVQgQklUIGluIEVQUCBNT0RFCisgKi8KK3N0YXRpYyBpbnQgY2xlYXJfZXBwX3RpbWVvdXQoc3RydWN0IHBhcnBvcnQgKnBwKQoreworCXVuc2lnbmVkIGNoYXIgc3RhdDsKKworCWlmIChnZXRfMTI4NF9yZWdpc3RlcihwcCwgMSwgJnN0YXQpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gc3RhdCAmIDE7Cit9CisKKy8qCisgKiBBY2Nlc3MgZnVuY3Rpb25zLgorICovCisjaWYgMAorc3RhdGljIGludCB1c3M3MjBfaXJxKGludCB1c2JzdGF0dXMsIHZvaWQgKmJ1ZmZlciwgaW50IGxlbiwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBwYXJwb3J0ICpwcCA9IChzdHJ1Y3QgcGFycG9ydCAqKWRldl9pZDsKKwlzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSAqcHJpdiA9IHBwLT5wcml2YXRlX2RhdGE7CQorCisJaWYgKHVzYnN0YXR1cyAhPSAwIHx8IGxlbiA8IDQgfHwgIWJ1ZmZlcikKKwkJcmV0dXJuIDE7CisJbWVtY3B5KHByaXYtPnJlZywgYnVmZmVyLCA0KTsKKwkvKiBpZiBuQWNrIGludGVycnVwdHMgYXJlIGVuYWJsZWQgYW5kIHdlIGhhdmUgYW4gaW50ZXJydXB0LCBjYWxsIHRoZSBpbnRlcnJ1cHQgcHJvY2VkdXJlICovCisJaWYgKHByaXYtPnJlZ1syXSAmIHByaXYtPnJlZ1sxXSAmIDB4MTApCisJCXBhcnBvcnRfZ2VuZXJpY19pcnEoMCwgcHAsIE5VTEwpOworCXJldHVybiAxOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHBhcnBvcnRfdXNzNzIwX3dyaXRlX2RhdGEoc3RydWN0IHBhcnBvcnQgKnBwLCB1bnNpZ25lZCBjaGFyIGQpCit7CisJc2V0XzEyODRfcmVnaXN0ZXIocHAsIDAsIGQpOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBwYXJwb3J0X3VzczcyMF9yZWFkX2RhdGEoc3RydWN0IHBhcnBvcnQgKnBwKQoreworCXVuc2lnbmVkIGNoYXIgcmV0OworCisJaWYgKGdldF8xMjg0X3JlZ2lzdGVyKHBwLCAwLCAmcmV0KSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcGFycG9ydF91c3M3MjBfd3JpdGVfY29udHJvbChzdHJ1Y3QgcGFycG9ydCAqcHAsIHVuc2lnbmVkIGNoYXIgZCkKK3sKKwlzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSAqcHJpdiA9IHBwLT5wcml2YXRlX2RhdGE7CQorCisJZCA9IChkICYgMHhmKSB8IChwcml2LT5yZWdbMV0gJiAweGYwKTsKKwlpZiAoc2V0XzEyODRfcmVnaXN0ZXIocHAsIDIsIGQpKQorCQlyZXR1cm47CisJcHJpdi0+cmVnWzFdID0gZDsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgcGFycG9ydF91c3M3MjBfcmVhZF9jb250cm9sKHN0cnVjdCBwYXJwb3J0ICpwcCkKK3sKKwlzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSAqcHJpdiA9IHBwLT5wcml2YXRlX2RhdGE7CQorCXJldHVybiBwcml2LT5yZWdbMV0gJiAweGY7IC8qIFVzZSBzb2Z0IGNvcHkgKi8KK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgcGFycG9ydF91c3M3MjBfZnJvYl9jb250cm9sKHN0cnVjdCBwYXJwb3J0ICpwcCwgdW5zaWduZWQgY2hhciBtYXNrLCB1bnNpZ25lZCBjaGFyIHZhbCkKK3sKKwlzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSAqcHJpdiA9IHBwLT5wcml2YXRlX2RhdGE7CQorCXVuc2lnbmVkIGNoYXIgZDsKKworCW1hc2sgJj0gMHgwZjsKKwl2YWwgJj0gMHgwZjsKKwlkID0gKHByaXYtPnJlZ1sxXSAmICh+bWFzaykpIF4gdmFsOworCWlmIChzZXRfMTI4NF9yZWdpc3RlcihwcCwgMiwgZCkpCisJCXJldHVybiAwOworCXByaXYtPnJlZ1sxXSA9IGQ7CisJcmV0dXJuIGQgJiAweGY7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHBhcnBvcnRfdXNzNzIwX3JlYWRfc3RhdHVzKHN0cnVjdCBwYXJwb3J0ICpwcCkKK3sKKwl1bnNpZ25lZCBjaGFyIHJldDsKKworCWlmIChnZXRfMTI4NF9yZWdpc3RlcihwcCwgMSwgJnJldCkpCisJCXJldHVybiAwOworCXJldHVybiByZXQgJiAweGY4OworfQorCitzdGF0aWMgdm9pZCBwYXJwb3J0X3VzczcyMF9kaXNhYmxlX2lycShzdHJ1Y3QgcGFycG9ydCAqcHApCit7CisJc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUgKnByaXYgPSBwcC0+cHJpdmF0ZV9kYXRhOwkKKwl1bnNpZ25lZCBjaGFyIGQ7CisKKwlkID0gcHJpdi0+cmVnWzFdICYgfjB4MTA7CisJaWYgKHNldF8xMjg0X3JlZ2lzdGVyKHBwLCAyLCBkKSkKKwkJcmV0dXJuOworCXByaXYtPnJlZ1sxXSA9IGQ7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnBvcnRfdXNzNzIwX2VuYWJsZV9pcnEoc3RydWN0IHBhcnBvcnQgKnBwKQoreworCXN0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlICpwcml2ID0gcHAtPnByaXZhdGVfZGF0YTsJCisJdW5zaWduZWQgY2hhciBkOworCisJZCA9IHByaXYtPnJlZ1sxXSB8IDB4MTA7CisJaWYgKHNldF8xMjg0X3JlZ2lzdGVyKHBwLCAyLCBkKSkKKwkJcmV0dXJuOworCXByaXYtPnJlZ1sxXSA9IGQ7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnBvcnRfdXNzNzIwX2RhdGFfZm9yd2FyZCAoc3RydWN0IHBhcnBvcnQgKnBwKQoreworCXN0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlICpwcml2ID0gcHAtPnByaXZhdGVfZGF0YTsJCisJdW5zaWduZWQgY2hhciBkOworCisJZCA9IHByaXYtPnJlZ1sxXSAmIH4weDIwOworCWlmIChzZXRfMTI4NF9yZWdpc3RlcihwcCwgMiwgZCkpCisJCXJldHVybjsKKwlwcml2LT5yZWdbMV0gPSBkOworfQorCitzdGF0aWMgdm9pZCBwYXJwb3J0X3VzczcyMF9kYXRhX3JldmVyc2UgKHN0cnVjdCBwYXJwb3J0ICpwcCkKK3sKKwlzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSAqcHJpdiA9IHBwLT5wcml2YXRlX2RhdGE7CQorCXVuc2lnbmVkIGNoYXIgZDsKKworCWQgPSBwcml2LT5yZWdbMV0gfCAweDIwOworCWlmIChzZXRfMTI4NF9yZWdpc3RlcihwcCwgMiwgZCkpCisJCXJldHVybjsKKwlwcml2LT5yZWdbMV0gPSBkOworfQorCitzdGF0aWMgdm9pZCBwYXJwb3J0X3VzczcyMF9pbml0X3N0YXRlKHN0cnVjdCBwYXJkZXZpY2UgKmRldiwgc3RydWN0IHBhcnBvcnRfc3RhdGUgKnMpCit7CisJcy0+dS5wYy5jdHIgPSAweGMgfCAoZGV2LT5pcnFfZnVuYyA/IDB4MTAgOiAweDApOworCXMtPnUucGMuZWNyID0gMHgyNDsKK30KKworc3RhdGljIHZvaWQgcGFycG9ydF91c3M3MjBfc2F2ZV9zdGF0ZShzdHJ1Y3QgcGFycG9ydCAqcHAsIHN0cnVjdCBwYXJwb3J0X3N0YXRlICpzKQoreworCXN0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlICpwcml2ID0gcHAtPnByaXZhdGVfZGF0YTsJCisKKwlpZiAoZ2V0XzEyODRfcmVnaXN0ZXIocHAsIDIsIE5VTEwpKQorCQlyZXR1cm47CisJcy0+dS5wYy5jdHIgPSBwcml2LT5yZWdbMV07CisJcy0+dS5wYy5lY3IgPSBwcml2LT5yZWdbMl07Cit9CisKK3N0YXRpYyB2b2lkIHBhcnBvcnRfdXNzNzIwX3Jlc3RvcmVfc3RhdGUoc3RydWN0IHBhcnBvcnQgKnBwLCBzdHJ1Y3QgcGFycG9ydF9zdGF0ZSAqcykKK3sKKwlzZXRfMTI4NF9yZWdpc3RlcihwcCwgMiwgcy0+dS5wYy5jdHIpOworCXNldF8xMjg0X3JlZ2lzdGVyKHBwLCA2LCBzLT51LnBjLmVjcik7CisJZ2V0XzEyODRfcmVnaXN0ZXIocHAsIDIsIE5VTEwpOworfQorCitzdGF0aWMgc2l6ZV90IHBhcnBvcnRfdXNzNzIwX2VwcF9yZWFkX2RhdGEoc3RydWN0IHBhcnBvcnQgKnBwLCB2b2lkICpidWYsIHNpemVfdCBsZW5ndGgsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSAqcHJpdiA9IHBwLT5wcml2YXRlX2RhdGE7CQorCXNpemVfdCBnb3QgPSAwOworCisJaWYgKGNoYW5nZV9tb2RlKHBwLCBFQ1JfRVBQKSkKKwkJcmV0dXJuIDA7CisJZm9yICg7IGdvdCA8IGxlbmd0aDsgZ290KyspIHsKKwkJaWYgKGdldF8xMjg0X3JlZ2lzdGVyKHBwLCA0LCAoY2hhciAqKWJ1ZikpCisJCQlicmVhazsKKwkJYnVmKys7CisJCWlmIChwcml2LT5yZWdbMF0gJiAweDAxKSB7CisJCQljbGVhcl9lcHBfdGltZW91dChwcCk7CisJCQlicmVhazsKKwkJfQorCX0KKwljaGFuZ2VfbW9kZShwcCwgRUNSX1BTMik7CisJcmV0dXJuIGdvdDsKK30KKworc3RhdGljIHNpemVfdCBwYXJwb3J0X3VzczcyMF9lcHBfd3JpdGVfZGF0YShzdHJ1Y3QgcGFycG9ydCAqcHAsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbmd0aCwgaW50IGZsYWdzKQoreworI2lmIDAKKwlzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSAqcHJpdiA9IHBwLT5wcml2YXRlX2RhdGE7CQorCXNpemVfdCB3cml0dGVuID0gMDsKKworCWlmIChjaGFuZ2VfbW9kZShwcCwgRUNSX0VQUCkpCisJCXJldHVybiAwOworCWZvciAoOyB3cml0dGVuIDwgbGVuZ3RoOyB3cml0dGVuKyspIHsKKwkJaWYgKHNldF8xMjg0X3JlZ2lzdGVyKHBwLCA0LCAoY2hhciAqKWJ1ZikpCisJCQlicmVhazsKKwkJKChjaGFyKilidWYpKys7CisJCWlmIChnZXRfMTI4NF9yZWdpc3RlcihwcCwgMSwgTlVMTCkpCisJCQlicmVhazsKKwkJaWYgKHByaXYtPnJlZ1swXSAmIDB4MDEpIHsKKwkJCWNsZWFyX2VwcF90aW1lb3V0KHBwKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWNoYW5nZV9tb2RlKHBwLCBFQ1JfUFMyKTsKKwlyZXR1cm4gd3JpdHRlbjsKKyNlbHNlCisJc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUgKnByaXYgPSBwcC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBwcml2LT51c2JkZXY7CisJaW50IHJsZW47CisJaW50IGk7CisKKwlpZiAoIXVzYmRldikKKwkJcmV0dXJuIDA7CisJaWYgKGNoYW5nZV9tb2RlKHBwLCBFQ1JfRVBQKSkKKwkJcmV0dXJuIDA7CisJaSA9IHVzYl9idWxrX21zZyh1c2JkZXYsIHVzYl9zbmRidWxrcGlwZSh1c2JkZXYsIDEpLCAodm9pZCAqKWJ1ZiwgbGVuZ3RoLCAmcmxlbiwgMjAwMDApOworCWlmIChpKQorCQlwcmludGsoS0VSTl9FUlIgInVzczcyMDogc2VuZGJ1bGsgZXAgMSBidWYgJXAgbGVuICVadSBybGVuICV1XG4iLCBidWYsIGxlbmd0aCwgcmxlbik7CisJY2hhbmdlX21vZGUocHAsIEVDUl9QUzIpOworCXJldHVybiBybGVuOworI2VuZGlmCit9CisKK3N0YXRpYyBzaXplX3QgcGFycG9ydF91c3M3MjBfZXBwX3JlYWRfYWRkcihzdHJ1Y3QgcGFycG9ydCAqcHAsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbmd0aCwgaW50IGZsYWdzKQoreworCXN0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlICpwcml2ID0gcHAtPnByaXZhdGVfZGF0YTsJCisJc2l6ZV90IGdvdCA9IDA7CisKKwlpZiAoY2hhbmdlX21vZGUocHAsIEVDUl9FUFApKQorCQlyZXR1cm4gMDsKKwlmb3IgKDsgZ290IDwgbGVuZ3RoOyBnb3QrKykgeworCQlpZiAoZ2V0XzEyODRfcmVnaXN0ZXIocHAsIDMsIChjaGFyICopYnVmKSkKKwkJCWJyZWFrOworCQlidWYrKzsKKwkJaWYgKHByaXYtPnJlZ1swXSAmIDB4MDEpIHsKKwkJCWNsZWFyX2VwcF90aW1lb3V0KHBwKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWNoYW5nZV9tb2RlKHBwLCBFQ1JfUFMyKTsKKwlyZXR1cm4gZ290OworfQorCitzdGF0aWMgc2l6ZV90IHBhcnBvcnRfdXNzNzIwX2VwcF93cml0ZV9hZGRyKHN0cnVjdCBwYXJwb3J0ICpwcCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuZ3RoLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUgKnByaXYgPSBwcC0+cHJpdmF0ZV9kYXRhOwkKKwlzaXplX3Qgd3JpdHRlbiA9IDA7CisKKwlpZiAoY2hhbmdlX21vZGUocHAsIEVDUl9FUFApKQorCQlyZXR1cm4gMDsKKwlmb3IgKDsgd3JpdHRlbiA8IGxlbmd0aDsgd3JpdHRlbisrKSB7CisJCWlmIChzZXRfMTI4NF9yZWdpc3RlcihwcCwgMywgKihjaGFyICopYnVmKSkKKwkJCWJyZWFrOworCQlidWYrKzsKKwkJaWYgKGdldF8xMjg0X3JlZ2lzdGVyKHBwLCAxLCBOVUxMKSkKKwkJCWJyZWFrOworCQlpZiAocHJpdi0+cmVnWzBdICYgMHgwMSkgeworCQkJY2xlYXJfZXBwX3RpbWVvdXQocHApOworCQkJYnJlYWs7CisJCX0KKwl9CisJY2hhbmdlX21vZGUocHAsIEVDUl9QUzIpOworCXJldHVybiB3cml0dGVuOworfQorCitzdGF0aWMgc2l6ZV90IHBhcnBvcnRfdXNzNzIwX2VjcF93cml0ZV9kYXRhKHN0cnVjdCBwYXJwb3J0ICpwcCwgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUgKnByaXYgPSBwcC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBwcml2LT51c2JkZXY7CisJaW50IHJsZW47CisJaW50IGk7CisKKwlpZiAoIXVzYmRldikKKwkJcmV0dXJuIDA7CisJaWYgKGNoYW5nZV9tb2RlKHBwLCBFQ1JfRUNQKSkKKwkJcmV0dXJuIDA7CisJaSA9IHVzYl9idWxrX21zZyh1c2JkZXYsIHVzYl9zbmRidWxrcGlwZSh1c2JkZXYsIDEpLCAodm9pZCAqKWJ1ZmZlciwgbGVuLCAmcmxlbiwgMjAwMDApOworCWlmIChpKQorCQlwcmludGsoS0VSTl9FUlIgInVzczcyMDogc2VuZGJ1bGsgZXAgMSBidWYgJXAgbGVuICVadSBybGVuICV1XG4iLCBidWZmZXIsIGxlbiwgcmxlbik7CisJY2hhbmdlX21vZGUocHAsIEVDUl9QUzIpOworCXJldHVybiBybGVuOworfQorCitzdGF0aWMgc2l6ZV90IHBhcnBvcnRfdXNzNzIwX2VjcF9yZWFkX2RhdGEoc3RydWN0IHBhcnBvcnQgKnBwLCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW4sIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSAqcHJpdiA9IHBwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IHByaXYtPnVzYmRldjsKKwlpbnQgcmxlbjsKKwlpbnQgaTsKKworCWlmICghdXNiZGV2KQorCQlyZXR1cm4gMDsKKwlpZiAoY2hhbmdlX21vZGUocHAsIEVDUl9FQ1ApKQorCQlyZXR1cm4gMDsKKwlpID0gdXNiX2J1bGtfbXNnKHVzYmRldiwgdXNiX3JjdmJ1bGtwaXBlKHVzYmRldiwgMiksIGJ1ZmZlciwgbGVuLCAmcmxlbiwgMjAwMDApOworCWlmIChpKQorCQlwcmludGsoS0VSTl9FUlIgInVzczcyMDogcmVjdmJ1bGsgZXAgMiBidWYgJXAgbGVuICVadSBybGVuICV1XG4iLCBidWZmZXIsIGxlbiwgcmxlbik7CisJY2hhbmdlX21vZGUocHAsIEVDUl9QUzIpOworCXJldHVybiBybGVuOworfQorCitzdGF0aWMgc2l6ZV90IHBhcnBvcnRfdXNzNzIwX2VjcF93cml0ZV9hZGRyKHN0cnVjdCBwYXJwb3J0ICpwcCwgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpCit7CisJc2l6ZV90IHdyaXR0ZW4gPSAwOworCisJaWYgKGNoYW5nZV9tb2RlKHBwLCBFQ1JfRUNQKSkKKwkJcmV0dXJuIDA7CisJZm9yICg7IHdyaXR0ZW4gPCBsZW47IHdyaXR0ZW4rKykgeworCQlpZiAoc2V0XzEyODRfcmVnaXN0ZXIocHAsIDUsICooY2hhciAqKWJ1ZmZlcikpCisJCQlicmVhazsKKwkJYnVmZmVyKys7CisJfQorCWNoYW5nZV9tb2RlKHBwLCBFQ1JfUFMyKTsKKwlyZXR1cm4gd3JpdHRlbjsKK30KKworc3RhdGljIHNpemVfdCBwYXJwb3J0X3VzczcyMF93cml0ZV9jb21wYXQoc3RydWN0IHBhcnBvcnQgKnBwLCBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW4sIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSAqcHJpdiA9IHBwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IHByaXYtPnVzYmRldjsKKwlpbnQgcmxlbjsKKwlpbnQgaTsKKworCWlmICghdXNiZGV2KQorCQlyZXR1cm4gMDsKKwlpZiAoY2hhbmdlX21vZGUocHAsIEVDUl9QUEYpKQorCQlyZXR1cm4gMDsKKwlpID0gdXNiX2J1bGtfbXNnKHVzYmRldiwgdXNiX3NuZGJ1bGtwaXBlKHVzYmRldiwgMSksICh2b2lkICopYnVmZmVyLCBsZW4sICZybGVuLCAyMDAwMCk7CisJaWYgKGkpCisJCXByaW50ayhLRVJOX0VSUiAidXNzNzIwOiBzZW5kYnVsayBlcCAxIGJ1ZiAlcCBsZW4gJVp1IHJsZW4gJXVcbiIsIGJ1ZmZlciwgbGVuLCBybGVuKTsKKwljaGFuZ2VfbW9kZShwcCwgRUNSX1BTMik7CisJcmV0dXJuIHJsZW47Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHBhcnBvcnRfb3BlcmF0aW9ucyBwYXJwb3J0X3VzczcyMF9vcHMgPSAKK3sKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLndyaXRlX2RhdGEgPQkJcGFycG9ydF91c3M3MjBfd3JpdGVfZGF0YSwKKwkucmVhZF9kYXRhID0JCXBhcnBvcnRfdXNzNzIwX3JlYWRfZGF0YSwKKworCS53cml0ZV9jb250cm9sID0JcGFycG9ydF91c3M3MjBfd3JpdGVfY29udHJvbCwKKwkucmVhZF9jb250cm9sID0JCXBhcnBvcnRfdXNzNzIwX3JlYWRfY29udHJvbCwKKwkuZnJvYl9jb250cm9sID0JCXBhcnBvcnRfdXNzNzIwX2Zyb2JfY29udHJvbCwKKworCS5yZWFkX3N0YXR1cyA9CQlwYXJwb3J0X3VzczcyMF9yZWFkX3N0YXR1cywKKworCS5lbmFibGVfaXJxID0JCXBhcnBvcnRfdXNzNzIwX2VuYWJsZV9pcnEsCisJLmRpc2FibGVfaXJxID0JCXBhcnBvcnRfdXNzNzIwX2Rpc2FibGVfaXJxLAorCisJLmRhdGFfZm9yd2FyZCA9CQlwYXJwb3J0X3VzczcyMF9kYXRhX2ZvcndhcmQsCisJLmRhdGFfcmV2ZXJzZSA9CQlwYXJwb3J0X3VzczcyMF9kYXRhX3JldmVyc2UsCisKKwkuaW5pdF9zdGF0ZSA9CQlwYXJwb3J0X3VzczcyMF9pbml0X3N0YXRlLAorCS5zYXZlX3N0YXRlID0JCXBhcnBvcnRfdXNzNzIwX3NhdmVfc3RhdGUsCisJLnJlc3RvcmVfc3RhdGUgPQlwYXJwb3J0X3VzczcyMF9yZXN0b3JlX3N0YXRlLAorCisJLmVwcF93cml0ZV9kYXRhID0JcGFycG9ydF91c3M3MjBfZXBwX3dyaXRlX2RhdGEsCisJLmVwcF9yZWFkX2RhdGEgPQlwYXJwb3J0X3VzczcyMF9lcHBfcmVhZF9kYXRhLAorCS5lcHBfd3JpdGVfYWRkciA9CXBhcnBvcnRfdXNzNzIwX2VwcF93cml0ZV9hZGRyLAorCS5lcHBfcmVhZF9hZGRyID0JcGFycG9ydF91c3M3MjBfZXBwX3JlYWRfYWRkciwKKworCS5lY3Bfd3JpdGVfZGF0YSA9CXBhcnBvcnRfdXNzNzIwX2VjcF93cml0ZV9kYXRhLAorCS5lY3BfcmVhZF9kYXRhID0JcGFycG9ydF91c3M3MjBfZWNwX3JlYWRfZGF0YSwKKwkuZWNwX3dyaXRlX2FkZHIgPQlwYXJwb3J0X3VzczcyMF9lY3Bfd3JpdGVfYWRkciwKKworCS5jb21wYXRfd3JpdGVfZGF0YSA9CXBhcnBvcnRfdXNzNzIwX3dyaXRlX2NvbXBhdCwKKwkubmliYmxlX3JlYWRfZGF0YSA9CXBhcnBvcnRfaWVlZTEyODRfcmVhZF9uaWJibGUsCisJLmJ5dGVfcmVhZF9kYXRhID0JcGFycG9ydF9pZWVlMTI4NF9yZWFkX2J5dGUsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCB1c3M3MjBfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZW5kcG9pbnQ7CisJc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUgKnByaXY7CisJc3RydWN0IHBhcnBvcnQgKnBwOworCWludCBpOworCisJcHJpbnRrKEtFUk5fREVCVUcgInVzczcyMDogcHJvYmU6IHZlbmRvciBpZCAweCV4LCBkZXZpY2UgaWQgMHgleFxuIiwKKwkgICAgICAgbGUxNl90b19jcHUodXNiZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkgICAgICAgbGUxNl90b19jcHUodXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOworCisJLyogb3VyIGtub3duIGludGVyZmFjZXMgaGF2ZSAzIGFsdGVybmF0ZSBzZXR0aW5ncyAqLworCWlmIChpbnRmLT5udW1fYWx0c2V0dGluZyAhPSAzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWkgPSB1c2Jfc2V0X2ludGVyZmFjZSh1c2JkZXYsIGludGYtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciwgMik7CisJcHJpbnRrKEtFUk5fREVCVUcgInVzczcyMDogc2V0IGludGVmYWNlIHJlc3VsdCAlZFxuIiwgaSk7CisKKwlpbnRlcmZhY2UgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKworCS8qCisJICogQWxsb2NhdGUgcGFycG9ydCBpbnRlcmZhY2UgCisJICovCisJcHJpbnRrKEtFUk5fSU5GTyAidXNzNzIwOiAoQykgMTk5OSBieSBUaG9tYXMgU2FpbGVyLCA8c2FpbGVyQGlmZS5lZS5ldGh6LmNoPlxuIik7CisKKwlpZiAoIShwcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUpLCBHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtRU5PTUVNOworCWlmICghKHBwID0gcGFycG9ydF9yZWdpc3Rlcl9wb3J0KDAsIFBBUlBPUlRfSVJRX05PTkUsIFBBUlBPUlRfRE1BX05PTkUsICZwYXJwb3J0X3VzczcyMF9vcHMpKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1c2ItdXNzNzIwOiBjb3VsZCBub3QgcmVnaXN0ZXIgcGFycG9ydFxuIik7CisJCWdvdG8gcHJvYmVfYWJvcnQ7CisJfQorCisJcHAtPnByaXZhdGVfZGF0YSA9IHByaXY7CisJcHJpdi0+dXNiZGV2ID0gdXNiZGV2OworCXBwLT5tb2RlcyA9IFBBUlBPUlRfTU9ERV9QQ1NQUCB8IFBBUlBPUlRfTU9ERV9UUklTVEFURSB8IFBBUlBPUlRfTU9ERV9FUFAgfCBQQVJQT1JUX01PREVfRUNQIHwgUEFSUE9SVF9NT0RFX0NPTVBBVDsKKworCS8qIHNldCB0aGUgVVNTNzIwIGNvbnRyb2wgcmVnaXN0ZXIgdG8gbWFudWFsIG1vZGUsIG5vIEVDUCBjb21wcmVzc2lvbiwgZW5hYmxlIGFsbCBpbnRzICovCisJc2V0XzEyODRfcmVnaXN0ZXIocHAsIDcsIDB4MDApOworCXNldF8xMjg0X3JlZ2lzdGVyKHBwLCA2LCAweDMwKTsgIC8qIFBTLzIgbW9kZSAqLworCXNldF8xMjg0X3JlZ2lzdGVyKHBwLCAyLCAweDBjKTsKKwkvKiBkZWJ1Z2dpbmcgKi8KKwlnZXRfMTI4NF9yZWdpc3RlcihwcCwgMCwgTlVMTCk7CisJcHJpbnRrKCJ1c3M3MjA6IHJlZzogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkgICAgICAgcHJpdi0+cmVnWzBdLCBwcml2LT5yZWdbMV0sIHByaXYtPnJlZ1syXSwgcHJpdi0+cmVnWzNdLCBwcml2LT5yZWdbNF0sIHByaXYtPnJlZ1s1XSwgcHJpdi0+cmVnWzZdKTsKKworCWVuZHBvaW50ID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbMl07CisJcHJpbnRrKEtFUk5fREVCVUcgInVzczcyMDogZXBhZGRyICVkIGludGVydmFsICVkXG4iLCBlbmRwb2ludC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLCBlbmRwb2ludC0+ZGVzYy5iSW50ZXJ2YWwpOworI2lmIDAKKwlwcml2LT5pcnFwaXBlID0gdXNiX3JjdmN0cmxwaXBlKHVzYmRldiwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpOworCWkgPSB1c2JfcmVxdWVzdF9pcnEodXNiZGV2LCBwcml2LT5pcnFwaXBlLAorCQkJCSAgdXNzNzIwX2lycSwgZW5kcG9pbnQtPmJJbnRlcnZhbCwKKwkJCQkgIHBwLCAmcHJpdi0+aXJxaGFuZGxlKTsKKwlpZiAoaSkgeworCQlwcmludGsgKEtFUk5fV0FSTklORyAidXNiLXVzczcyMDogdXNiX3JlcXVlc3RfaXJxIGZhaWxlZCAoMHgleClcbiIsIGkpOworCQlnb3RvIHByb2JlX2Fib3J0X3BvcnQ7CisJfQorI2VuZGlmCisJcGFycG9ydF9hbm5vdW5jZV9wb3J0KHBwKTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIHBwKTsKKwlyZXR1cm4gMDsKKworI2lmIDAKK3Byb2JlX2Fib3J0X3BvcnQ6CisJcGFycG9ydF9wdXRfcG9ydChwcCk7CisjZW5kaWYKK3Byb2JlX2Fib3J0OgorCWtmcmVlKHByaXYpOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgdm9pZCB1c3M3MjBfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgcGFycG9ydCAqcHAgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKwlzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSAqcHJpdjsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCWlmIChwcCkgeworCQlwcml2ID0gcHAtPnByaXZhdGVfZGF0YTsKKwkJcGFycG9ydF9yZW1vdmVfcG9ydChwcCk7CisjaWYgMAorCQl1c2JfcmVsZWFzZV9pcnEodXNiZGV2LCBwcml2LT5pcnFoYW5kbGUsIHByaXYtPmlycXBpcGUpOworI2VuZGlmCisJCXByaXYtPnVzYmRldiA9IE5VTEw7CisJCXBhcnBvcnRfcHV0X3BvcnQocHApOworCQlrZnJlZShwcml2KTsKKwl9Cit9CisKKy8qIHRhYmxlIG9mIGNhYmxlcyB0aGF0IHdvcmsgdGhyb3VnaCB0aGlzIGRyaXZlciAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzczcyMF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoMHgwNDdlLCAweDEwMDEpIH0sCisJeyBVU0JfREVWSUNFKDB4MDU1NywgMHgyMDAxKSB9LAorCXsgVVNCX0RFVklDRSgweDA3MjksIDB4MTI4NCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxMjkzLCAweDAwMDIpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgdXNzNzIwX3RhYmxlKTsKKworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNzNzIwX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkidXNzNzIwIiwKKwkucHJvYmUgPQl1c3M3MjBfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c3M3MjBfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQl1c3M3MjBfdGFibGUsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IF9faW5pdCB1c3M3MjBfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ1c3M3MjBfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG91dDsKKworCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNzNzIwX2NsZWFudXAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmdXNzNzIwX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHVzczcyMF9pbml0KTsKK21vZHVsZV9leGl0KHVzczcyMF9jbGVhbnVwKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tb24vS2NvbmZpZyBiL2RyaXZlcnMvdXNiL21vbi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNjE1MmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tb24vS2NvbmZpZwpAQCAtMCwwICsxLDIyIEBACisjCisjIFVTQiBNb25pdG9yIGNvbmZpZ3VyYXRpb24KKyMKKworIyBJbiBub3JtYWwgbGlmZSwgaXQgbWFrZXMgbGl0dGxlIHNlbnNlIHRvIGhhdmUgdXNibW9uIGFzIGEgbW9kdWxlLCBhbmQgaW4gZmFjdAorIyBpdCBpcyBoYXJtZnVsLCBiZWNhdXNlIHRoZXJlIGlzIG5vIHdheSB0byBhdXRvbG9hZCB0aGUgbW9kdWxlLgorIyBUaGUgJ20nIG9wdGlvbiBpcyBhbGxvd2VkIGZvciBoYWNrZXJzIHdobyBkZWJ1ZyB0aGUgdXNibW9uIGl0c2VsZiwKKyMgYW5kIGZvciB0aG9zZSB3aG8gaGF2ZSB1c2Jjb3JlIGFzIGEgbW9kdWxlLgorY29uZmlnIFVTQl9NT04KKwl0cmlzdGF0ZSAiVVNCIE1vbml0b3IiCisJZGVwZW5kcyBvbiBVU0IKKwlkZWZhdWx0IHkKKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgYSBjb21wb25lbnQgd2hpY2ggY2FwdHVyZXMgdGhlIFVTQiB0cmFmZmljCisJICBiZXR3ZWVuIHBlcmlwaGVyYWwtc3BlY2lmaWMgZHJpdmVycyBhbmQgSEMgZHJpdmVycyB3aWxsIGJlIGJ1aWx0LgorCSAgVGhlIFVTQl9NT04gaXMgc2ltaWxhciBpbiBzcGlyaXQgYW5kIG1heSBiZSBjb21wYXRpYmxlIHdpdGggRGF2ZQorCSAgSGFyZGluZydzIFVTQk1vbi4KKworCSAgVGhpcyBpcyBzb21ld2hhdCBleHBlcmltZW50YWwgYXQgdGhpcyB0aW1lLCBidXQgaXQgc2hvdWxkIGJlIHNhZmUsCisJICBhcyBsb25nIGFzIHlvdSBhcmVuJ3QgYnVpbGRpbmcgdGhpcyBhcyBhIG1vZHVsZSBhbmQgdGhlbiByZW1vdmluZyBpdC4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4gRG8gbm90IHNheSBNLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL01ha2VmaWxlIGIvZHJpdmVycy91c2IvbW9uL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZmY4ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tb24vTWFrZWZpbGUKQEAgLTAsMCArMSw3IEBACisjCisjIE1ha2VmaWxlIGZvciBVU0IgQ29yZSBmaWxlcyBhbmQgZmlsZXN5c3RlbQorIworCit1c2Jtb24tb2Jqcwk6PSBtb25fbWFpbi5vIG1vbl9zdGF0Lm8gbW9uX3RleHQubworCitvYmotJChDT05GSUdfVVNCX01PTikJKz0gdXNibW9uLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi9tb25fbWFpbi5jIGIvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE5ZDAwOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21vbi9tb25fbWFpbi5jCkBAIC0wLDAgKzEsMzc3IEBACisvKgorICogVGhlIFVTQiBNb25pdG9yLCBpbnNwaXJlZCBieSBEYXZlIEhhcmRpbmcncyBVU0JNb24uCisgKgorICogbW9uX21haW4uYzogTWFpbiBmaWxlLCBtb2R1bGUgaW5pdGlhdGlvbiBhbmQgZXhpdCwgcmVnaXN0cmF0aW9ucywgZXRjLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKworI2luY2x1ZGUgInVzYl9tb24uaCIKKyNpbmNsdWRlICIuLi9jb3JlL2hjZC5oIgorCitzdGF0aWMgdm9pZCBtb25fc3VibWl0KHN0cnVjdCB1c2JfYnVzICp1YnVzLCBzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQgbW9uX2NvbXBsZXRlKHN0cnVjdCB1c2JfYnVzICp1YnVzLCBzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQgbW9uX3N0b3Aoc3RydWN0IG1vbl9idXMgKm1idXMpOworc3RhdGljIHZvaWQgbW9uX2Rpc3NvbHZlKHN0cnVjdCBtb25fYnVzICptYnVzLCBzdHJ1Y3QgdXNiX2J1cyAqdWJ1cyk7CitzdGF0aWMgdm9pZCBtb25fYnVzX2Ryb3Aoc3RydWN0IGtyZWYgKnIpOworc3RhdGljIHZvaWQgbW9uX2J1c19pbml0KHN0cnVjdCBkZW50cnkgKm1vbmRpciwgc3RydWN0IHVzYl9idXMgKnVidXMpOworCitERUNMQVJFX01VVEVYKG1vbl9sb2NrKTsKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKm1vbl9kaXI7CQkvKiAvZGJnL3VzYm1vbiAqLworc3RhdGljIExJU1RfSEVBRChtb25fYnVzZXMpOwkJLyogQWxsIGJ1c2VzIHdlIGtub3c6IHN0cnVjdCBtb25fYnVzICovCisKKy8qCisgKiBMaW5rIGEgcmVhZGVyIGludG8gdGhlIGJ1cy4KKyAqCisgKiBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggbW9uX2xvY2sgdGFrZW4gYmVjYXVzZSBvZiBtYnVzLT5yZWYuCisgKi8KK3ZvaWQgbW9uX3JlYWRlcl9hZGQoc3RydWN0IG1vbl9idXMgKm1idXMsIHN0cnVjdCBtb25fcmVhZGVyICpyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHVzYl9idXMgKnVidXM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWJ1cy0+bG9jaywgZmxhZ3MpOworCWlmIChtYnVzLT5ucmVhZGVycyA9PSAwKSB7CisJCXVidXMgPSBtYnVzLT51X2J1czsKKwkJaWYgKHVidXMtPm1vbml0b3JlZCkgeworCQkJLyoKKwkJCSAqIFNvbWV0aGluZyBpcyByZWFsbHkgYnJva2VuLCByZWZ1c2UgdG8gZ28gb24gYW5kCisJCQkgKiBwb3NzaWJseSBjb3JydXB0IG9wcyBwb2ludGVycyBvciB3b3JzZS4KKwkJCSAqLworCQkJcHJpbnRrKEtFUk5fRVJSIFRBRyAiOiBidXMgJWQgaXMgYWxyZWFkeSBtb25pdG9yZWRcbiIsCisJCQkgICAgdWJ1cy0+YnVzbnVtKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1idXMtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybjsKKwkJfQorCQl1YnVzLT5tb25pdG9yZWQgPSAxOworCX0KKwltYnVzLT5ucmVhZGVycysrOworCWxpc3RfYWRkX3RhaWwoJnItPnJfbGluaywgJm1idXMtPnJfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWJ1cy0+bG9jaywgZmxhZ3MpOworCisJa3JlZl9nZXQoJm1idXMtPnJlZik7Cit9CisKKy8qCisgKiBVbmxpbmsgcmVhZGVyIGZyb20gdGhlIGJ1cy4KKyAqCisgKiBUaGlzIGlzIGNhbGxlZCB3aXRoIG1vbl9sb2NrIHRha2VuLCBzbyB3ZSBjYW4gZGVjcmVtZW50IG1idXMtPnJlZi4KKyAqLwordm9pZCBtb25fcmVhZGVyX2RlbChzdHJ1Y3QgbW9uX2J1cyAqbWJ1cywgc3RydWN0IG1vbl9yZWFkZXIgKnIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtYnVzLT5sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJnItPnJfbGluayk7CisJLS1tYnVzLT5ucmVhZGVyczsKKwlpZiAobWJ1cy0+bnJlYWRlcnMgPT0gMCkKKwkJbW9uX3N0b3AobWJ1cyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWJ1cy0+bG9jaywgZmxhZ3MpOworCisJa3JlZl9wdXQoJm1idXMtPnJlZiwgbW9uX2J1c19kcm9wKTsKK30KKworLyoKKyAqLworc3RhdGljIHZvaWQgbW9uX3N1Ym1pdChzdHJ1Y3QgdXNiX2J1cyAqdWJ1cywgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBtb25fYnVzICptYnVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCXN0cnVjdCBtb25fcmVhZGVyICpyOworCisJbWJ1cyA9IHVidXMtPm1vbl9idXM7CisJaWYgKG1idXMgPT0gTlVMTCkKKwkJZ290byBvdXRfdW5sb2NrZWQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWJ1cy0+bG9jaywgZmxhZ3MpOworCWlmIChtYnVzLT5ucmVhZGVycyA9PSAwKQorCQlnb3RvIG91dF9sb2NrZWQ7CisKKwlsaXN0X2Zvcl9lYWNoIChwb3MsICZtYnVzLT5yX2xpc3QpIHsKKwkJciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgbW9uX3JlYWRlciwgcl9saW5rKTsKKwkJci0+cm5mX3N1Ym1pdChyLT5yX2RhdGEsIHVyYik7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWJ1cy0+bG9jaywgZmxhZ3MpOworCXJldHVybjsKKworb3V0X2xvY2tlZDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYnVzLT5sb2NrLCBmbGFncyk7CitvdXRfdW5sb2NrZWQ6CisJcmV0dXJuOworfQorCisvKgorICovCitzdGF0aWMgdm9pZCBtb25fc3VibWl0X2Vycm9yKHN0cnVjdCB1c2JfYnVzICp1YnVzLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBlcnIpCit7CisJc3RydWN0IG1vbl9idXMgKm1idXM7CisKKwltYnVzID0gdWJ1cy0+bW9uX2J1czsKKwlpZiAobWJ1cyA9PSBOVUxMKQorCQlnb3RvIG91dF91bmxvY2tlZDsKKworCS8qCisJICogWFhYIENhcHR1cmUgdGhlIGVycm9yIGNvZGUgYW5kIHRoZSAnRScgZXZlbnQuCisJICovCisKKwlyZXR1cm47CisKK291dF91bmxvY2tlZDoKKwlyZXR1cm47Cit9CisKKy8qCisgKi8KK3N0YXRpYyB2b2lkIG1vbl9jb21wbGV0ZShzdHJ1Y3QgdXNiX2J1cyAqdWJ1cywgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBtb25fYnVzICptYnVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCXN0cnVjdCBtb25fcmVhZGVyICpyOworCisJbWJ1cyA9IHVidXMtPm1vbl9idXM7CisJaWYgKG1idXMgPT0gTlVMTCkgeworCQkvKgorCQkgKiBUaGlzIHNob3VsZCBub3QgaGFwcGVuLgorCQkgKiBBdCB0aGlzIHBvaW50IHdlIGRvIG5vdCBldmVuIGtub3cgdGhlIGJ1cyBudW1iZXIuLi4KKwkJICovCisJCXByaW50ayhLRVJOX0VSUiBUQUcgIjogTnVsbCBtb24gYnVzIGluIFVSQiwgcGlwZSAweCV4XG4iLAorCQkgICAgdXJiLT5waXBlKTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZtYnVzLT5sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaCAocG9zLCAmbWJ1cy0+cl9saXN0KSB7CisJCXIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG1vbl9yZWFkZXIsIHJfbGluayk7CisJCXItPnJuZl9jb21wbGV0ZShyLT5yX2RhdGEsIHVyYik7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1idXMtPmxvY2ssIGZsYWdzKTsKK30KKworLyogaW50ICgqdW5saW5rX3VyYikgKHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cyk7ICovCisKKy8qCisgKiBTdG9wIG1vbml0b3JpbmcuCisgKiBPYnZpb3VzbHkgdGhpcyBtdXN0IGJlIHdlbGwgbG9ja2VkLCBzbyBubyBuZWVkIHRvIHBsYXkgd2l0aCBtYidzLgorICovCitzdGF0aWMgdm9pZCBtb25fc3RvcChzdHJ1Y3QgbW9uX2J1cyAqbWJ1cykKK3sKKwlzdHJ1Y3QgdXNiX2J1cyAqdWJ1cyA9IG1idXMtPnVfYnVzOworCisJLyoKKwkgKiBBIHN0b3AgY2FuIGJlIGNhbGxlZCBmb3IgYSBkaXNzb2x2ZWQgbW9uX2J1cyBpbiBjYXNlIG9mCisJICogYSByZWFkZXIgc3RheWluZyBhY3Jvc3MgYW4gcm1tb2QgZm9vX2hjZC4KKwkgKi8KKwlpZiAodWJ1cyAhPSBOVUxMKSB7CisJCXVidXMtPm1vbml0b3JlZCA9IDA7CisJCW1iKCk7CisJfQorfQorCisvKgorICogQWRkIGEgVVNCIGJ1cyAodXN1YWxseSBieSBhIG1vZHByb2JlIGZvby1oY2QpCisgKgorICogVGhpcyBkb2VzIG5vdCByZXR1cm4gYW4gZXJyb3IgY29kZSBiZWNhdXNlIHRoZSBjb3JlIGNhbm5vdCBjYXJlIGxlc3MKKyAqIGlmIG1vbml0b3JpbmcgaXMgbm90IGVzdGFibGlzaGVkLgorICovCitzdGF0aWMgdm9pZCBtb25fYnVzX2FkZChzdHJ1Y3QgdXNiX2J1cyAqdWJ1cykKK3sKKwltb25fYnVzX2luaXQobW9uX2RpciwgdWJ1cyk7Cit9CisKKy8qCisgKiBSZW1vdmUgYSBVU0IgYnVzIChlaXRoZXIgZnJvbSBybW1vZCBmb28taGNkIG9yIGZyb20gYSBob3QtcmVtb3ZlIGV2ZW50KS4KKyAqLworc3RhdGljIHZvaWQgbW9uX2J1c19yZW1vdmUoc3RydWN0IHVzYl9idXMgKnVidXMpCit7CisJc3RydWN0IG1vbl9idXMgKm1idXMgPSB1YnVzLT5tb25fYnVzOworCisJZG93bigmbW9uX2xvY2spOworCWxpc3RfZGVsKCZtYnVzLT5idXNfbGluayk7CisJZGVidWdmc19yZW1vdmUobWJ1cy0+ZGVudF90KTsKKwlkZWJ1Z2ZzX3JlbW92ZShtYnVzLT5kZW50X3MpOworCisJbW9uX2Rpc3NvbHZlKG1idXMsIHVidXMpOworCWtyZWZfcHV0KCZtYnVzLT5yZWYsIG1vbl9idXNfZHJvcCk7CisJdXAoJm1vbl9sb2NrKTsKK30KKworLyoKKyAqIE9wcworICovCitzdGF0aWMgc3RydWN0IHVzYl9tb25fb3BlcmF0aW9ucyBtb25fb3BzXzAgPSB7CisJLnVyYl9zdWJtaXQgPQltb25fc3VibWl0LAorCS51cmJfc3VibWl0X2Vycm9yID0gbW9uX3N1Ym1pdF9lcnJvciwKKwkudXJiX2NvbXBsZXRlID0JbW9uX2NvbXBsZXRlLAorCS5idXNfYWRkID0JbW9uX2J1c19hZGQsCisJLmJ1c19yZW1vdmUgPQltb25fYnVzX3JlbW92ZSwKK307CisKKy8qCisgKiBUZWFyIHVzYl9idXMgYW5kIG1vbl9idXMgYXBhcnQuCisgKi8KK3N0YXRpYyB2b2lkIG1vbl9kaXNzb2x2ZShzdHJ1Y3QgbW9uX2J1cyAqbWJ1cywgc3RydWN0IHVzYl9idXMgKnVidXMpCit7CisKKwkvKgorCSAqIE5ldmVyIGhhcHBlbnMsIGJ1dC4uLgorCSAqLworCWlmICh1YnVzLT5tb25pdG9yZWQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFRBRyAiOiBidXMgJWQgaXMgZGlzc29sdmVkIHdoaWxlIG1vbml0b3JlZFxuIiwKKwkJICAgIHVidXMtPmJ1c251bSk7CisJCXVidXMtPm1vbml0b3JlZCA9IDA7CisJCW1iKCk7CisJfQorCisJdWJ1cy0+bW9uX2J1cyA9IE5VTEw7CisJbWJ1cy0+dV9idXMgPSBOVUxMOworCW1iKCk7CisJLy8gdXNiX2J1c19wdXQodWJ1cyk7Cit9CisKKy8qCisgKi8KK3N0YXRpYyB2b2lkIG1vbl9idXNfZHJvcChzdHJ1Y3Qga3JlZiAqcikKK3sKKwlzdHJ1Y3QgbW9uX2J1cyAqbWJ1cyA9IGNvbnRhaW5lcl9vZihyLCBzdHJ1Y3QgbW9uX2J1cywgcmVmKTsKKwlrZnJlZShtYnVzKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgYSBidXMgZm9yIHVzOgorICogIC0gYWxsb2NhdGUgbW9uX2J1cworICogIC0gcmVmY291bnQgVVNCIGJ1cyBzdHJ1Y3QKKyAqICAtIGxpbmsKKyAqLworc3RhdGljIHZvaWQgbW9uX2J1c19pbml0KHN0cnVjdCBkZW50cnkgKm1vbmRpciwgc3RydWN0IHVzYl9idXMgKnVidXMpCit7CisJc3RydWN0IGRlbnRyeSAqZDsKKwlzdHJ1Y3QgbW9uX2J1cyAqbWJ1czsKKwllbnVtIHsgTkFNRVNaID0gMTAgfTsKKwljaGFyIG5hbWVbTkFNRVNaXTsKKwlpbnQgcmM7CisKKwlpZiAoKG1idXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbW9uX2J1cyksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCQlnb3RvIGVycl9hbGxvYzsKKwltZW1zZXQobWJ1cywgMCwgc2l6ZW9mKHN0cnVjdCBtb25fYnVzKSk7CisJa3JlZl9pbml0KCZtYnVzLT5yZWYpOworCXNwaW5fbG9ja19pbml0KCZtYnVzLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmbWJ1cy0+cl9saXN0KTsKKworCS8qCisJICogVGhpcyB1c2JfYnVzX2dldCBoZXJlIGlzIHN1cGVyZmx1b3VzLCBiZWNhdXNlIHdlIHJlY2VpdmUKKwkgKiBhIG5vdGlmaWNhdGlvbiBpZiB1c2JfYnVzIGlzIGFib3V0IHRvIGJlIHJlbW92ZWQuCisJICovCisJLy8gdXNiX2J1c19nZXQodWJ1cyk7CisJbWJ1cy0+dV9idXMgPSB1YnVzOworCXVidXMtPm1vbl9idXMgPSBtYnVzOworCisJcmMgPSBzbnByaW50ZihuYW1lLCBOQU1FU1osICIlZHQiLCB1YnVzLT5idXNudW0pOworCWlmIChyYyA8PSAwIHx8IHJjID49IE5BTUVTWikKKwkJZ290byBlcnJfcHJpbnRfdDsKKwlkID0gZGVidWdmc19jcmVhdGVfZmlsZShuYW1lLCAwNjAwLCBtb25kaXIsIG1idXMsICZtb25fZm9wc190ZXh0KTsKKwlpZiAoZCA9PSBOVUxMKQorCQlnb3RvIGVycl9jcmVhdGVfdDsKKwltYnVzLT5kZW50X3QgPSBkOworCisJcmMgPSBzbnByaW50ZihuYW1lLCBOQU1FU1osICIlZHMiLCB1YnVzLT5idXNudW0pOworCWlmIChyYyA8PSAwIHx8IHJjID49IE5BTUVTWikKKwkJZ290byBlcnJfcHJpbnRfczsKKwlkID0gZGVidWdmc19jcmVhdGVfZmlsZShuYW1lLCAwNjAwLCBtb25kaXIsIG1idXMsICZtb25fZm9wc19zdGF0KTsKKwlpZiAoZCA9PSBOVUxMKQorCQlnb3RvIGVycl9jcmVhdGVfczsKKwltYnVzLT5kZW50X3MgPSBkOworCisJZG93bigmbW9uX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJm1idXMtPmJ1c19saW5rLCAmbW9uX2J1c2VzKTsKKwl1cCgmbW9uX2xvY2spOworCXJldHVybjsKKworZXJyX2NyZWF0ZV9zOgorZXJyX3ByaW50X3M6CisJZGVidWdmc19yZW1vdmUobWJ1cy0+ZGVudF90KTsKK2Vycl9jcmVhdGVfdDoKK2Vycl9wcmludF90OgorCWtmcmVlKG1idXMpOworZXJyX2FsbG9jOgorCXJldHVybjsKK30KKworc3RhdGljIGludCBfX2luaXQgbW9uX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgdXNiX2J1cyAqdWJ1czsKKwlzdHJ1Y3QgZGVudHJ5ICptb25kaXI7CisKKwltb25kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInVzYm1vbiIsIE5VTEwpOworCWlmIChJU19FUlIobW9uZGlyKSkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgVEFHICI6IGRlYnVncyBpcyBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlmIChtb25kaXIgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgVEFHICI6IHVuYWJsZSB0byBjcmVhdGUgdXNibW9uIGRpcmVjdG9yeVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwltb25fZGlyID0gbW9uZGlyOworCisJaWYgKHVzYl9tb25fcmVnaXN0ZXIoJm1vbl9vcHNfMCkgIT0gMCkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgVEFHICI6IHVuYWJsZSB0byByZWdpc3RlciB3aXRoIHRoZSBjb3JlXG4iKTsKKwkJZGVidWdmc19yZW1vdmUobW9uZGlyKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCS8vIE1PRF9JTkNfVVNFX0NPVU5UKHdoaWNoX21vZHVsZT8pOworCisJZG93bigmdXNiX2J1c19saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkgKHVidXMsICZ1c2JfYnVzX2xpc3QsIGJ1c19saXN0KSB7CisJCW1vbl9idXNfaW5pdChtb25kaXIsIHVidXMpOworCX0KKwl1cCgmdXNiX2J1c19saXN0X2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbW9uX2V4aXQodm9pZCkKK3sKKwlzdHJ1Y3QgbW9uX2J1cyAqbWJ1czsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCisJdXNiX21vbl9kZXJlZ2lzdGVyKCk7CisKKwlkb3duKCZtb25fbG9jayk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZtb25fYnVzZXMpKSB7CisJCXAgPSBtb25fYnVzZXMubmV4dDsKKwkJbWJ1cyA9IGxpc3RfZW50cnkocCwgc3RydWN0IG1vbl9idXMsIGJ1c19saW5rKTsKKwkJbGlzdF9kZWwocCk7CisKKwkJZGVidWdmc19yZW1vdmUobWJ1cy0+ZGVudF90KTsKKwkJZGVidWdmc19yZW1vdmUobWJ1cy0+ZGVudF9zKTsKKworCQkvKgorCQkgKiBUaGlzIG5ldmVyIGhhcHBlbnMsIGJlY2F1c2UgdGhlIG9wZW4vY2xvc2UgcGF0aHMgaW4KKwkJICogZmlsZSBsZXZlbCBtYWludGFpbiBtb2R1bGUgdXNlIGNvdW50ZXJzIGFuZCBzbyBybW1vZCBmYWlscworCQkgKiBiZWZvcmUgcmVhY2hpbmcgaGVyZS4gSG93ZXZlciwgYmV0dGVyIGJlIHNhZmUuLi4KKwkJICovCisJCWlmIChtYnVzLT5ucmVhZGVycykgeworCQkJcHJpbnRrKEtFUk5fRVJSIFRBRworCQkJICAgICI6IE91dHN0YW5kaW5nIG9wZW5zICglZCkgb24gdXNiJWQsIGxlYWtpbmcuLi5cbiIsCisJCQkgICAgbWJ1cy0+bnJlYWRlcnMsIG1idXMtPnVfYnVzLT5idXNudW0pOworCQkJYXRvbWljX3NldCgmbWJ1cy0+cmVmLnJlZmNvdW50LCAyKTsJLyogRm9yY2UgbGVhayAqLworCQl9CisKKwkJbW9uX2Rpc3NvbHZlKG1idXMsIG1idXMtPnVfYnVzKTsKKwkJa3JlZl9wdXQoJm1idXMtPnJlZiwgbW9uX2J1c19kcm9wKTsKKwl9CisJdXAoJm1vbl9sb2NrKTsKKworCWRlYnVnZnNfcmVtb3ZlKG1vbl9kaXIpOworfQorCittb2R1bGVfaW5pdChtb25faW5pdCk7Cittb2R1bGVfZXhpdChtb25fZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi9tb25fc3RhdC5jIGIvZHJpdmVycy91c2IvbW9uL21vbl9zdGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU0YjE2NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21vbi9tb25fc3RhdC5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBUaGUgVVNCIE1vbml0b3IsIGluc3BpcmVkIGJ5IERhdmUgSGFyZGluZydzIFVTQk1vbi4KKyAqCisgKiBUaGlzIGlzIHRoZSAncycgb3IgJ3N0YXQnIHJlYWRlciB3aGljaCBkZWJ1Z3MgdXNibW9uIGl0c2VsZi4KKyAqIE5vdGUgdGhhdCB0aGlzIGNvZGUgYmxvd3MgdGhyb3VnaCBsb2Nrcywgc28gbWFrZSBzdXJlIHRoYXQKKyAqIC9kYmcvdXNibW9uLzBzIGlzIHdlbGwgcHJvdGVjdGVkIGZyb20gbm9uLXJvb3QgdXNlcnMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjaW5jbHVkZSAidXNiX21vbi5oIgorCisjZGVmaW5lIFNUQVRfQlVGX1NJWkUgIDgwCisKK3N0cnVjdCBzbmFwIHsKKwlpbnQgc2xlbjsKKwljaGFyIHN0cltTVEFUX0JVRl9TSVpFXTsKK307CisKK3N0YXRpYyBpbnQgbW9uX3N0YXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbW9uX2J1cyAqbWJ1czsKKwlzdHJ1Y3Qgc25hcCAqc3A7CisKKwlpZiAoKHNwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNuYXApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltYnVzID0gaW5vZGUtPnUuZ2VuZXJpY19pcDsKKworCXNwLT5zbGVuID0gc25wcmludGYoc3AtPnN0ciwgU1RBVF9CVUZfU0laRSwKKwkgICAgIm5yZWFkZXJzICVkIHRleHRfbG9zdCAldVxuIiwKKwkgICAgbWJ1cy0+bnJlYWRlcnMsIG1idXMtPmNudF90ZXh0X2xvc3QpOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gc3A7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1vbl9zdGF0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBzbmFwICpzcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlsb2ZmX3QgcG9zID0gKnBwb3M7CisJaW50IGNudDsKKworCWlmIChwb3MgPCAwIHx8IHBvcyA+PSBzcC0+c2xlbikKKwkJcmV0dXJuIDA7CisJaWYgKG5ieXRlcyA9PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAoKGNudCA9IHNwLT5zbGVuIC0gcG9zKSA+IG5ieXRlcykKKwkJY250ID0gbmJ5dGVzOworCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBzcC0+c3RyICsgcG9zLCBjbnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwkqcHBvcyA9IHBvcyArIGNudDsKKwlyZXR1cm4gY250OworfQorCitzdGF0aWMgaW50IG1vbl9zdGF0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBmaWxlX29wZXJhdGlvbnMgbW9uX2ZvcHNfc3RhdCA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkub3BlbiA9CQltb25fc3RhdF9vcGVuLAorCS5sbHNlZWsgPQlub19sbHNlZWssCisJLnJlYWQgPQkJbW9uX3N0YXRfcmVhZCwKKwkvKiAud3JpdGUgPQltb25fc3RhdF93cml0ZSwgKi8KKwkvKiAucG9sbCA9CQltb25fc3RhdF9wb2xsLCAqLworCS8qIC5pb2N0bCA9CW1vbl9zdGF0X2lvY3RsLCAqLworCS5yZWxlYXNlID0JbW9uX3N0YXRfcmVsZWFzZSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tb24vbW9uX3RleHQuYyBiL2RyaXZlcnMvdXNiL21vbi9tb25fdGV4dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NWE0NTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tb24vbW9uX3RleHQuYwpAQCAtMCwwICsxLDQwNSBAQAorLyoKKyAqIFRoZSBVU0IgTW9uaXRvciwgaW5zcGlyZWQgYnkgRGF2ZSBIYXJkaW5nJ3MgVVNCTW9uLgorICoKKyAqIFRoaXMgaXMgYSB0ZXh0IGZvcm1hdCByZWFkZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgInVzYl9tb24uaCIKKworLyoKKyAqIE5vLCB3ZSBkbyBub3Qgd2FudCBhcmJpdHJhcmlseSBsb25nIGRhdGEgc3RyaW5ncy4KKyAqIFVzZSB0aGUgYmluYXJ5IGludGVyZmFjZSBpZiB5b3Ugd2FudCB0byBjYXB0dXJlIGJ1bGsgZGF0YSEKKyAqLworI2RlZmluZSBEQVRBX01BWCAgMzIKKworLyoKKyAqIFRoaXMgbGltaXQgZXhpc3RzIHRvIHByZXZlbnQgT09NcyB3aGVuIHRoZSB1c2VyIHByb2Nlc3Mgc3RvcHMgcmVhZGluZy4KKyAqLworI2RlZmluZSBFVkVOVF9NQVggIDI1CisKKyNkZWZpbmUgUFJJTlRGX0RGTCAgMTIwCisKK3N0cnVjdCBtb25fZXZlbnRfdGV4dCB7CisJc3RydWN0IGxpc3RfaGVhZCBlX2xpbms7CisJaW50IHR5cGU7CQkvKiBzdWJtaXQsIGNvbXBsZXRlLCBldGMuICovCisJdW5zaWduZWQgaW50IHBpcGU7CS8qIFBpcGUgKi8KKwl1bnNpZ25lZCBsb25nIGlkOwkvKiBGcm9tIHBvaW50ZXIsIG1vc3Qgb2YgdGhlIHRpbWUgKi8KKwl1bnNpZ25lZCBpbnQgdHN0YW1wOworCWludCBsZW5ndGg7CQkvKiBEZXBlbmRzIG9uIHR5cGU6IHhmZXIgbGVuZ3RoIG9yIGFjdCBsZW5ndGggKi8KKwlpbnQgc3RhdHVzOworCWNoYXIgZGF0YV9mbGFnOworCXVuc2lnbmVkIGNoYXIgZGF0YVtEQVRBX01BWF07Cit9OworCisjZGVmaW5lIFNMQUJfTkFNRV9TWiAgMzAKK3N0cnVjdCBtb25fcmVhZGVyX3RleHQgeworCWttZW1fY2FjaGVfdCAqZV9zbGFiOworCWludCBuZXZlbnRzOworCXN0cnVjdCBsaXN0X2hlYWQgZV9saXN0OworCXN0cnVjdCBtb25fcmVhZGVyIHI7CS8qIEluIEMsIHBhcmVudCBjbGFzcyBjYW4gYmUgcGxhY2VkIGFueXdoZXJlICovCisKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworCWludCBwcmludGZfc2l6ZTsKKwljaGFyICpwcmludGZfYnVmOworCXN0cnVjdCBzZW1hcGhvcmUgcHJpbnRmX2xvY2s7CisKKwljaGFyIHNsYWJfbmFtZVtTTEFCX05BTUVfU1pdOworfTsKKworc3RhdGljIHZvaWQgbW9uX3RleHRfY3Rvcih2b2lkICosIGttZW1fY2FjaGVfdCAqLCB1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyB2b2lkIG1vbl90ZXh0X2R0b3Iodm9pZCAqLCBrbWVtX2NhY2hlX3QgKiwgdW5zaWduZWQgbG9uZyk7CisKKy8qCisgKiBtb25fdGV4dF9zdWJtaXQKKyAqIG1vbl90ZXh0X2NvbXBsZXRlCisgKgorICogTWF5IGJlIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdC4KKyAqCisgKiBUaGlzIGlzIGNhbGxlZCB3aXRoIHRoZSB3aG9sZSBtb25fYnVzIGxvY2tlZCwgc28gbm8gYWRkaXRpb25hbCBsb2NrLgorICovCisKK3N0YXRpYyBpbmxpbmUgY2hhciBtb25fdGV4dF9nZXRfZGF0YShzdHJ1Y3QgbW9uX2V2ZW50X3RleHQgKmVwLCBzdHJ1Y3QgdXJiICp1cmIsCisgICAgaW50IGxlbiwgY2hhciBldl90eXBlKQoreworCWludCBwaXBlID0gdXJiLT5waXBlOworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CisKKwkvKgorCSAqIFRoZSBjaGVjayB0byBzZWUgaWYgaXQncyBzYWZlIHRvIHBva2UgYXQgZGF0YSBoYXMgYW4gZW5vcm1vdXMKKwkgKiBudW1iZXIgb2YgY29ybmVyIGNhc2VzLCBidXQgaXQgc2VlbXMgdGhhdCB0aGUgZm9sbG93aW5nIGlzCisJICogbW9yZSBvciBsZXNzIHNhZmUuCisJICoKKwkgKiBXZSBkbyBub3QgZXZlbiB0cnkgdG8gbG9vayB0cmFuc2Zlcl9idWZmZXIsIGJlY2F1c2UgaXQgY2FuCisJICogY29udGFpbiBub24tTlVMTCBnYXJiYWdlIGluIGNhc2UgdGhlIHVwcGVyIGxldmVsIHByb21pc2VkIHRvCisJICogc2V0IERNQSBmb3IgdGhlIEhDRC4KKwkgKi8KKwlpZiAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQKQorCQlyZXR1cm4gJ0QnOworCisJaWYgKGxlbiA8PSAwKQorCQlyZXR1cm4gJ0wnOworCisJaWYgKChkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXIpID09IE5VTEwpCisJCXJldHVybiAnWic7CS8qICcwJyB3b3VsZCBiZSBub3QgYXMgcHJldHR5LiAqLworCisJLyoKKwkgKiBCdWxrIGlzIGVhc3kgdG8gc2hvcnRjdXQgcmVsaWFibHkuIAorCSAqIFhYWCBDb250cm9sIG5lZWRzIHNldHVwIHBhY2tldCB0YWtlbi4KKwkgKiBYWFggT3RoZXIgcGlwZSB0eXBlcyBuZWVkIGNvbnNpZGVyYXRpb24uIEN1cnJlbnRseSwgd2Ugb3ZlcmRvIGl0CisJICogYW5kIGNvbGxlY3QgZ2FyYmFnZSBmb3IgdGhlbTogYmV0dGVyIG1vcmUgdGhhbiBsZXNzLgorCSAqLworCWlmICh1c2JfcGlwZWJ1bGsocGlwZSkgfHwgdXNiX3BpcGVjb250cm9sKHBpcGUpKSB7CisJCWlmICh1c2JfcGlwZWluKHBpcGUpKSB7CisJCQlpZiAoZXZfdHlwZSA9PSAnUycpCisJCQkJcmV0dXJuICc8JzsKKwkJfSBlbHNlIHsKKwkJCWlmIChldl90eXBlID09ICdDJykKKwkJCQlyZXR1cm4gJz4nOworCQl9CisJfQorCisJaWYgKGxlbiA+PSBEQVRBX01BWCkKKwkJbGVuID0gREFUQV9NQVg7CisJbWVtY3B5KGVwLT5kYXRhLCB1cmItPnRyYW5zZmVyX2J1ZmZlciwgbGVuKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbW9uX2dldF90aW1lc3RhbXAodm9pZCkKK3sKKwlzdHJ1Y3QgdGltZXZhbCB0dmFsOworCXVuc2lnbmVkIGludCBzdGFtcDsKKworCWRvX2dldHRpbWVvZmRheSgmdHZhbCk7CisJc3RhbXAgPSB0dmFsLnR2X3NlYyAmIDB4RkZGRjsJLyogMl4zMiA9IDQyOTQ5NjcyOTYuIExpbWl0IHRvIDQwOTZzLiAqLworCXN0YW1wID0gc3RhbXAgKiAxMDAwMDAwICsgdHZhbC50dl91c2VjOworCXJldHVybiBzdGFtcDsKK30KKworc3RhdGljIHZvaWQgbW9uX3RleHRfZXZlbnQoc3RydWN0IG1vbl9yZWFkZXJfdGV4dCAqcnAsIHN0cnVjdCB1cmIgKnVyYiwKKyAgICBjaGFyIGV2X3R5cGUpCit7CisJc3RydWN0IG1vbl9ldmVudF90ZXh0ICplcDsKKwl1bnNpZ25lZCBpbnQgc3RhbXA7CisKKwlzdGFtcCA9IG1vbl9nZXRfdGltZXN0YW1wKCk7CisKKwlpZiAocnAtPm5ldmVudHMgPj0gRVZFTlRfTUFYIHx8CisJICAgIChlcCA9IGttZW1fY2FjaGVfYWxsb2MocnAtPmVfc2xhYiwgU0xBQl9BVE9NSUMpKSA9PSBOVUxMKSB7CisJCXJwLT5yLm1fYnVzLT5jbnRfdGV4dF9sb3N0Kys7CisJCXJldHVybjsKKwl9CisKKwllcC0+dHlwZSA9IGV2X3R5cGU7CisJZXAtPnBpcGUgPSB1cmItPnBpcGU7CisJZXAtPmlkID0gKHVuc2lnbmVkIGxvbmcpIHVyYjsKKwllcC0+dHN0YW1wID0gc3RhbXA7CisJZXAtPmxlbmd0aCA9IChldl90eXBlID09ICdTJykgPworCSAgICB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggOiB1cmItPmFjdHVhbF9sZW5ndGg7CisJLyogQ29sbGVjdGluZyBzdGF0dXMgbWFrZXMgZGVidWdnaW5nIHNlbnNlIGZvciBzdWJtaXRzLCB0b28gKi8KKwllcC0+c3RhdHVzID0gdXJiLT5zdGF0dXM7CisKKwllcC0+ZGF0YV9mbGFnID0gbW9uX3RleHRfZ2V0X2RhdGEoZXAsIHVyYiwgZXAtPmxlbmd0aCwgZXZfdHlwZSk7CisKKwlycC0+bmV2ZW50cysrOworCWxpc3RfYWRkX3RhaWwoJmVwLT5lX2xpbmssICZycC0+ZV9saXN0KTsKKwl3YWtlX3VwKCZycC0+d2FpdCk7Cit9CisKK3N0YXRpYyB2b2lkIG1vbl90ZXh0X3N1Ym1pdCh2b2lkICpkYXRhLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IG1vbl9yZWFkZXJfdGV4dCAqcnAgPSBkYXRhOworCW1vbl90ZXh0X2V2ZW50KHJwLCB1cmIsICdTJyk7Cit9CisKK3N0YXRpYyB2b2lkIG1vbl90ZXh0X2NvbXBsZXRlKHZvaWQgKmRhdGEsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgbW9uX3JlYWRlcl90ZXh0ICpycCA9IGRhdGE7CisJbW9uX3RleHRfZXZlbnQocnAsIHVyYiwgJ0MnKTsKK30KKworLyoKKyAqIEZldGNoIG5leHQgZXZlbnQgZnJvbSB0aGUgY2lyY3VsYXIgYnVmZmVyLgorICovCitzdGF0aWMgc3RydWN0IG1vbl9ldmVudF90ZXh0ICptb25fdGV4dF9mZXRjaChzdHJ1Y3QgbW9uX3JlYWRlcl90ZXh0ICpycCwKKyAgICBzdHJ1Y3QgbW9uX2J1cyAqbWJ1cykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWJ1cy0+bG9jaywgZmxhZ3MpOworCWlmIChsaXN0X2VtcHR5KCZycC0+ZV9saXN0KSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYnVzLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiBOVUxMOworCX0KKwlwID0gcnAtPmVfbGlzdC5uZXh0OworCWxpc3RfZGVsKHApOworCS0tcnAtPm5ldmVudHM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWJ1cy0+bG9jaywgZmxhZ3MpOworCXJldHVybiBsaXN0X2VudHJ5KHAsIHN0cnVjdCBtb25fZXZlbnRfdGV4dCwgZV9saW5rKTsKK30KKworLyoKKyAqLworc3RhdGljIGludCBtb25fdGV4dF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBtb25fYnVzICptYnVzOworCXN0cnVjdCB1c2JfYnVzICp1YnVzOworCXN0cnVjdCBtb25fcmVhZGVyX3RleHQgKnJwOworCWludCByYzsKKworCWRvd24oJm1vbl9sb2NrKTsKKwltYnVzID0gaW5vZGUtPnUuZ2VuZXJpY19pcDsKKwl1YnVzID0gbWJ1cy0+dV9idXM7CisKKwlycCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtb25fcmVhZGVyX3RleHQpLCBHRlBfS0VSTkVMKTsKKwlpZiAocnAgPT0gTlVMTCkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2FsbG9jOworCX0KKwltZW1zZXQocnAsIDAsIHNpemVvZihzdHJ1Y3QgbW9uX3JlYWRlcl90ZXh0KSk7CisJSU5JVF9MSVNUX0hFQUQoJnJwLT5lX2xpc3QpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJwLT53YWl0KTsKKwlpbml0X01VVEVYKCZycC0+cHJpbnRmX2xvY2spOworCisJcnAtPnByaW50Zl9zaXplID0gUFJJTlRGX0RGTDsKKwlycC0+cHJpbnRmX2J1ZiA9IGttYWxsb2MocnAtPnByaW50Zl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAocnAtPnByaW50Zl9idWYgPT0gTlVMTCkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2FsbG9jX3ByOworCX0KKworCXJwLT5yLm1fYnVzID0gbWJ1czsKKwlycC0+ci5yX2RhdGEgPSBycDsKKwlycC0+ci5ybmZfc3VibWl0ID0gbW9uX3RleHRfc3VibWl0OworCXJwLT5yLnJuZl9jb21wbGV0ZSA9IG1vbl90ZXh0X2NvbXBsZXRlOworCisJc25wcmludGYocnAtPnNsYWJfbmFtZSwgU0xBQl9OQU1FX1NaLCAibW9uJWR0XyVseCIsIHVidXMtPmJ1c251bSwKKwkgICAgKGxvbmcpcnApOworCXJwLT5lX3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZShycC0+c2xhYl9uYW1lLAorCSAgICBzaXplb2Yoc3RydWN0IG1vbl9ldmVudF90ZXh0KSwgc2l6ZW9mKGxvbmcpLCAwLAorCSAgICBtb25fdGV4dF9jdG9yLCBtb25fdGV4dF9kdG9yKTsKKwlpZiAocnAtPmVfc2xhYiA9PSBOVUxMKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBlcnJfc2xhYjsKKwl9CisKKwltb25fcmVhZGVyX2FkZChtYnVzLCAmcnAtPnIpOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gcnA7CisJdXAoJm1vbl9sb2NrKTsKKwlyZXR1cm4gMDsKKworLy8gZXJyX2J1c3k6CisvLwlrbWVtX2NhY2hlX2Rlc3Ryb3kocnAtPmVfc2xhYik7CitlcnJfc2xhYjoKKwlrZnJlZShycC0+cHJpbnRmX2J1Zik7CitlcnJfYWxsb2NfcHI6CisJa2ZyZWUocnApOworZXJyX2FsbG9jOgorCXVwKCZtb25fbG9jayk7CisJcmV0dXJuIHJjOworfQorCisvKgorICogRm9yIHNpbXBsaWNpdHksIHdlIHJlYWQgb25lIHJlY29yZCBpbiBvbmUgc3lzdGVtIGNhbGwgYW5kIHRocm93IG91dAorICogd2hhdCBkb2VzIG5vdCBmaXQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgZm9sbG93aW5nIGRvZXMgbm90IHdvcms6CisgKiAgIGRkIGlmPS9kYmcvdXNibW9uLzB0IGJzPTEwCisgKiBBbHNvLCB3ZSBkbyBub3QgYWxsb3cgc2Vla3MgYW5kIGRvIG5vdCBib3RoZXIgYWR2YW5jaW5nIHRoZSBvZmZzZXQuCisgKi8KK3N0YXRpYyBzc2l6ZV90IG1vbl90ZXh0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBtb25fcmVhZGVyX3RleHQgKnJwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtb25fYnVzICptYnVzID0gcnAtPnIubV9idXM7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdGEsIGN1cnJlbnQpOworCXN0cnVjdCBtb25fZXZlbnRfdGV4dCAqZXA7CisJaW50IGNudCwgbGltaXQ7CisJY2hhciAqcGJ1ZjsKKwljaGFyIHVkaXIsIHV0eXBlOworCWludCBkYXRhX2xlbiwgaTsKKworCWFkZF93YWl0X3F1ZXVlKCZycC0+d2FpdCwgJndhaXRhKTsKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCXdoaWxlICgoZXAgPSBtb25fdGV4dF9mZXRjaChycCwgbWJ1cykpID09IE5VTEwpIHsKKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQkJcmVtb3ZlX3dhaXRfcXVldWUoJnJwLT53YWl0LCAmd2FpdGEpOworCQkJcmV0dXJuIC1FV09VTERCTE9DSzsJLyogU2FtZSBhcyBFQUdBSU4gaW4gTGludXggKi8KKwkJfQorCQkvKgorCQkgKiBXZSBkbyBub3QgY291bnQgbndhaXRlcnMsIGJlY2F1c2UgLT5yZWxlYXNlIGlzIHN1cHBvc2VkCisJCSAqIHRvIGJlIGNhbGxlZCB3aGVuIGFsbCBvcGVuZXJzIGFyZSBnb25lIG9ubHkuCisJCSAqLworCQlzY2hlZHVsZSgpOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXJlbW92ZV93YWl0X3F1ZXVlKCZycC0+d2FpdCwgJndhaXRhKTsKKwkJCXJldHVybiAtRUlOVFI7CisJCX0KKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwl9CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmcnAtPndhaXQsICZ3YWl0YSk7CisKKwlkb3duKCZycC0+cHJpbnRmX2xvY2spOworCWNudCA9IDA7CisJcGJ1ZiA9IHJwLT5wcmludGZfYnVmOworCWxpbWl0ID0gcnAtPnByaW50Zl9zaXplOworCisJdWRpciA9IHVzYl9waXBlaW4oZXAtPnBpcGUpID8gJ2knIDogJ28nOworCXN3aXRjaCAodXNiX3BpcGV0eXBlKGVwLT5waXBlKSkgeworCWNhc2UgUElQRV9JU09DSFJPTk9VUzoJdXR5cGUgPSAnWic7IGJyZWFrOworCWNhc2UgUElQRV9JTlRFUlJVUFQ6CXV0eXBlID0gJ0knOyBicmVhazsKKwljYXNlIFBJUEVfQ09OVFJPTDoJdXR5cGUgPSAnQyc7IGJyZWFrOworCWRlZmF1bHQ6IC8qIFBJUEVfQlVMSyAqLyAgdXR5cGUgPSAnQic7CisJfQorCWNudCArPSBzbnByaW50ZihwYnVmICsgY250LCBsaW1pdCAtIGNudCwKKwkgICAgIiVseCAldSAlYyAlYyVjOiUwM3U6JTAydSAlZCAlZCIsCisJICAgIGVwLT5pZCwgZXAtPnRzdGFtcCwgZXAtPnR5cGUsCisJICAgIHV0eXBlLCB1ZGlyLCB1c2JfcGlwZWRldmljZShlcC0+cGlwZSksIHVzYl9waXBlZW5kcG9pbnQoZXAtPnBpcGUpLAorCSAgICBlcC0+c3RhdHVzLCBlcC0+bGVuZ3RoKTsKKworCWlmICgoZGF0YV9sZW4gPSBlcC0+bGVuZ3RoKSA+IDApIHsKKwkJaWYgKGVwLT5kYXRhX2ZsYWcgPT0gMCkgeworCQkJY250ICs9IHNucHJpbnRmKHBidWYgKyBjbnQsIGxpbWl0IC0gY250LCAiID0iKTsKKwkJCWlmIChkYXRhX2xlbiA+PSBEQVRBX01BWCkKKwkJCQlkYXRhX2xlbiA9IERBVEFfTUFYOworCQkJZm9yIChpID0gMDsgaSA8IGRhdGFfbGVuOyBpKyspIHsKKwkJCQlpZiAoaSAlIDQgPT0gMCkgeworCQkJCQljbnQgKz0gc25wcmludGYocGJ1ZiArIGNudCwgbGltaXQgLSBjbnQsCisJCQkJCSAgICAiICIpOworCQkJCX0KKwkJCQljbnQgKz0gc25wcmludGYocGJ1ZiArIGNudCwgbGltaXQgLSBjbnQsCisJCQkJICAgICIlMDJ4IiwgZXAtPmRhdGFbaV0pOworCQkJfQorCQkJY250ICs9IHNucHJpbnRmKHBidWYgKyBjbnQsIGxpbWl0IC0gY250LCAiXG4iKTsKKwkJfSBlbHNlIHsKKwkJCWNudCArPSBzbnByaW50ZihwYnVmICsgY250LCBsaW1pdCAtIGNudCwKKwkJCSAgICAiICVjXG4iLCBlcC0+ZGF0YV9mbGFnKTsKKwkJfQorCX0gZWxzZSB7CisJCWNudCArPSBzbnByaW50ZihwYnVmICsgY250LCBsaW1pdCAtIGNudCwgIlxuIik7CisJfQorCisJaWYgKGNvcHlfdG9fdXNlcihidWYsIHJwLT5wcmludGZfYnVmLCBjbnQpKQorCQljbnQgPSAtRUZBVUxUOworCXVwKCZycC0+cHJpbnRmX2xvY2spOworCWttZW1fY2FjaGVfZnJlZShycC0+ZV9zbGFiLCBlcCk7CisJcmV0dXJuIGNudDsKK30KKworc3RhdGljIGludCBtb25fdGV4dF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBtb25fcmVhZGVyX3RleHQgKnJwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtb25fYnVzICptYnVzOworCS8qIHVuc2lnbmVkIGxvbmcgZmxhZ3M7ICovCisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlzdHJ1Y3QgbW9uX2V2ZW50X3RleHQgKmVwOworCisJZG93bigmbW9uX2xvY2spOworCW1idXMgPSBpbm9kZS0+dS5nZW5lcmljX2lwOworCisJaWYgKG1idXMtPm5yZWFkZXJzIDw9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFRBRyAiOiBjb25zaXN0ZW5jeSBlcnJvciBvbiBjbG9zZVxuIik7CisJCXVwKCZtb25fbG9jayk7CisJCXJldHVybiAwOworCX0KKwltb25fcmVhZGVyX2RlbChtYnVzLCAmcnAtPnIpOworCisJLyoKKwkgKiBJbiB0aGVvcnksIGVfbGlzdCBpcyBwcm90ZWN0ZWQgYnkgbWJ1cy0+bG9jay4gSG93ZXZlciwKKwkgKiBhZnRlciBtb25fcmVhZGVyX2RlbCBoYXMgZmluaXNoZWQsIHRoZSBmb2xsb3dpbmcgaXMgdGhlIGNhc2U6CisJICogIC0gd2UgYXJlIG5vdCBvbiByZWFkZXIgbGlzdCBhbnltb3JlLCBzbyBuZXcgZXZlbnRzIHdvbid0IGJlIGFkZGVkOworCSAqICAtIHdob2xlIG1idXMgbWF5IGJlIGRyb3BwZWQgaWYgaXQgd2FzIG9ycGhhbmVkLgorCSAqIFNvLCB3ZSBiZXR0ZXIgbm90IHRvdWNoIG1idXMuCisJICovCisJLyogc3Bpbl9sb2NrX2lycXNhdmUoJm1idXMtPmxvY2ssIGZsYWdzKTsgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnJwLT5lX2xpc3QpKSB7CisJCXAgPSBycC0+ZV9saXN0Lm5leHQ7CisJCWVwID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgbW9uX2V2ZW50X3RleHQsIGVfbGluayk7CisJCWxpc3RfZGVsKHApOworCQktLXJwLT5uZXZlbnRzOworCQlrbWVtX2NhY2hlX2ZyZWUocnAtPmVfc2xhYiwgZXApOworCX0KKwkvKiBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYnVzLT5sb2NrLCBmbGFncyk7ICovCisKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocnAtPmVfc2xhYik7CisJa2ZyZWUocnAtPnByaW50Zl9idWYpOworCWtmcmVlKHJwKTsKKworCXVwKCZtb25fbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBmaWxlX29wZXJhdGlvbnMgbW9uX2ZvcHNfdGV4dCA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkub3BlbiA9CQltb25fdGV4dF9vcGVuLAorCS5sbHNlZWsgPQlub19sbHNlZWssCisJLnJlYWQgPQkJbW9uX3RleHRfcmVhZCwKKwkvKiAud3JpdGUgPQltb25fdGV4dF93cml0ZSwgKi8KKwkvKiAucG9sbCA9CQltb25fdGV4dF9wb2xsLCAqLworCS8qIC5pb2N0bCA9CW1vbl90ZXh0X2lvY3RsLCAqLworCS5yZWxlYXNlID0JbW9uX3RleHRfcmVsZWFzZSwKK307CisKKy8qCisgKiBTbGFiIGludGVyZmFjZTogY29uc3RydWN0b3IuCisgKi8KK3N0YXRpYyB2b2lkIG1vbl90ZXh0X2N0b3Iodm9pZCAqbWVtLCBrbWVtX2NhY2hlX3QgKnNsYWIsIHVuc2lnbmVkIGxvbmcgc2ZsYWdzKQoreworCS8qCisJICogTm90aGluZyB0byBpbml0aWFsaXplLiBObywgcmVhbGx5IQorCSAqIFNvLCB3ZSBmaWxsIGl0IHdpdGggZ2FyYmFnZSB0byBlbXVsYXRlIGEgcmV1c2VkIG9iamVjdC4KKwkgKi8KKwltZW1zZXQobWVtLCAweGU1LCBzaXplb2Yoc3RydWN0IG1vbl9ldmVudF90ZXh0KSk7Cit9CisKK3N0YXRpYyB2b2lkIG1vbl90ZXh0X2R0b3Iodm9pZCAqbWVtLCBrbWVtX2NhY2hlX3QgKnNsYWIsIHVuc2lnbmVkIGxvbmcgc2ZsYWdzKQoreworCTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi91c2JfbW9uLmggYi9kcml2ZXJzL3VzYi9tb24vdXNiX21vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMzVjMTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tb24vdXNiX21vbi5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBUaGUgVVNCIE1vbml0b3IsIGluc3BpcmVkIGJ5IERhdmUgSGFyZGluZydzIFVTQk1vbi4KKyAqLworCisjaWZuZGVmIF9fVVNCX01PTl9ICisjZGVmaW5lIF9fVVNCX01PTl9ICisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKy8qICNpbmNsdWRlIDxsaW51eC91c2IuaD4gKi8JLyogV2UgdXNlIHN0cnVjdCBwb2ludGVycyBvbmx5IGluIHRoaXMgaGVhZGVyICovCisKKyNkZWZpbmUgVEFHICJ1c2Jtb24iCisKK3N0cnVjdCBtb25fYnVzIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJ1c19saW5rOworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50X3M7CQkvKiBEZWJ1Z2dpbmcgZmlsZSAqLworCXN0cnVjdCBkZW50cnkgKmRlbnRfdDsJCS8qIFRleHQgaW50ZXJmYWNlIGZpbGUgKi8KKwlzdHJ1Y3QgdXNiX2J1cyAqdV9idXM7CisKKwkvKiBSZWYgKi8KKwlpbnQgbnJlYWRlcnM7CQkJLyogVW5kZXIgbW9uX2xvY2sgQU5EIG1idXMtPmxvY2sgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHJfbGlzdDsJLyogQ2hhaW4gb2YgcmVhZGVycyAodXN1YWxseSBvbmUpICovCisJc3RydWN0IGtyZWYgcmVmOwkJLyogVW5kZXIgbW9uX2xvY2sgKi8KKworCS8qIFN0YXRzICovCisJdW5zaWduZWQgaW50IGNudF90ZXh0X2xvc3Q7Cit9OworCisvKgorICogQW4gaW5zdGFuY2Ugb2YgYSBwcm9jZXNzIHdoaWNoIG9wZW5lZCBhIGZpbGUgKGJ1dCBjYW4gZm9yayBsYXRlcikKKyAqLworc3RydWN0IG1vbl9yZWFkZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgcl9saW5rOworCXN0cnVjdCBtb25fYnVzICptX2J1czsKKwl2b2lkICpyX2RhdGE7CQkvKiBVc2UgY29udGFpbmVyX29mIGluc3RlYWQ/ICovCisKKwl2b2lkICgqcm5mX3N1Ym1pdCkodm9pZCAqZGF0YSwgc3RydWN0IHVyYiAqdXJiKTsKKwl2b2lkICgqcm5mX2NvbXBsZXRlKSh2b2lkICpkYXRhLCBzdHJ1Y3QgdXJiICp1cmIpOworfTsKKwordm9pZCBtb25fcmVhZGVyX2FkZChzdHJ1Y3QgbW9uX2J1cyAqbWJ1cywgc3RydWN0IG1vbl9yZWFkZXIgKnIpOwordm9pZCBtb25fcmVhZGVyX2RlbChzdHJ1Y3QgbW9uX2J1cyAqbWJ1cywgc3RydWN0IG1vbl9yZWFkZXIgKnIpOworCitleHRlcm4gc3RydWN0IHNlbWFwaG9yZSBtb25fbG9jazsKKworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbW9uX2ZvcHNfdGV4dDsKK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1vbl9mb3BzX3N0YXQ7CisKKyNlbmRpZiAvKiBfX1VTQl9NT05fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9uZXQvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjY0YzkwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbmV0L0tjb25maWcKQEAgLTAsMCArMSwzMDcgQEAKKyMKKyMgVVNCIE5ldHdvcmsgZGV2aWNlcyBjb25maWd1cmF0aW9uCisjCitjb21tZW50ICJOZXR3b3JraW5nIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgIU5FVAorCittZW51ICJVU0IgTmV0d29yayBBZGFwdGVycyIKKwlkZXBlbmRzIG9uIFVTQiAmJiBORVQKKworY29uZmlnIFVTQl9DQVRDCisJdHJpc3RhdGUgIlVTQiBDQVRDIE5ldE1hdGUtYmFzZWQgRXRoZXJuZXQgZGV2aWNlIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgQ1JDMzIKKwktLS1oZWxwLS0tCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIFVTQiBFdGhlcm5ldAorCSAgZGV2aWNlIGJhc2VkIG9uIHRoZSBFTDEyMTBBIGNoaXAuIFN1cHBvcnRlZCBkZXZpY2VzIGFyZToKKwkgIEJlbGtpbiBGNVUwMTEKKwkgIEJlbGtpbiBGNVUxMTEKKwkgIENBVEMgTmV0TWF0ZQorCSAgQ0FUQyBOZXRNYXRlIElJCisJICBzbWFydEJyaWRnZXMgc21hcnROSUMKKworCSAgVGhpcyBkcml2ZXIgbWFrZXMgdGhlIGFkYXB0ZXIgYXBwZWFyIGFzIGEgbm9ybWFsIEV0aGVybmV0IGludGVyZmFjZSwKKwkgIHR5cGljYWxseSBvbiBldGgwLCBpZiBpdCBpcyB0aGUgb25seSBldGhlcm5ldCBkZXZpY2UsIG9yIHBlcmhhcHMgb24KKwkgIGV0aDEsIGlmIHlvdSBoYXZlIGEgUENJIG9yIElTQSBldGhlcm5ldCBjYXJkIGluc3RhbGxlZC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2F0Yy4KKworY29uZmlnIFVTQl9LQVdFVEgKKwl0cmlzdGF0ZSAiVVNCIEtMU0kgS0w1VVNCMTAxLWJhc2VkIGV0aGVybmV0IGRldmljZSBzdXBwb3J0IgorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBvbmx5CisJICBVU0IgRXRoZXJuZXQgYWRhcHRlcnMgYmFzZWQgb24gdGhlIEtMU0kgS0w1S1VTQjEwMUIgY2hpcHNldDoKKwkgIDNDb20gM0MxOTI1MAorCSAgQURTIFVTQi0xMEJUCisJICBBVEVOIFVTQiBFdGhlcm5ldAorCSAgQVNBTlRFIFVTQiBUbyBFdGhlcm5ldCBBZGFwdGVyCisJICBBT1ggRW5kcG9pbnRzIFVTQiBFdGhlcm5ldAorCSAgQ29ycmVnYSBLLksuCisJICBELUxpbmsgRFNCLTY1MEMgYW5kIERVLUUxMAorCSAgRW50cmVnYSAvIFBvcnRnZWFyIEU0NQorCSAgSS1PIERBVEEgVVNCLUVUL1QKKwkgIEphdG9uIFVTQiBFdGhlcm5ldCBEZXZpY2UgQWRhcHRlcgorCSAgS2luZ3N0b24gVGVjaG5vbG9neSBVU0IgRXRoZXJuZXQgQWRhcHRlcgorCSAgTGlua3N5cyBVU0IxMFQKKwkgIE1vYmlsaXR5IFVTQi1FdGhlcm5ldCBBZGFwdGVyCisJICBOZXRHZWFyIEVBLTEwMQorCSAgUGVyYWNvbSBFbmV0IGFuZCBFbmV0MgorCSAgUG9ydHNtaXRoIEV4cHJlc3MgRXRoZXJuZXQgQWRhcHRlcgorCSAgU2hhcmsgUG9ja2V0IEFkYXB0ZXIKKwkgIFNNQyAyMjAyVVNCCisJICBTb255IFZhaW8gcG9ydCBleHRlbmRlcgorCisJICBUaGlzIGRyaXZlciBpcyBsaWtlbHkgdG8gd29yayB3aXRoIG1vc3QgMTBNYnBzIG9ubHkgVVNCIEV0aGVybmV0CisJICBhZGFwdGVycywgaW5jbHVkaW5nIHNvbWUgIm5vIGJyYW5kIiBkZXZpY2VzLiBJdCBkb2VzIE5PVCB3b3JrIG9uCisJICBTbWFydEJyaWRnZXMgc21hcnROSUMgb3Igb24gQmVsa2luIEY1VTExMSBkZXZpY2VzIC0geW91IHNob3VsZCB1c2UKKwkgIHRoZSBDQVRDIE5ldE1hdGUgZHJpdmVyIGZvciB0aG9zZS4gSWYgeW91IGFyZSBub3Qgc3VyZSB3aGljaCBvbmUKKwkgIHlvdSBuZWVkLCBzZWxlY3QgYm90aCwgYW5kIHRoZSBjb3JyZWN0IG9uZSBzaG91bGQgYmUgc2VsZWN0ZWQgZm9yCisJICB5b3UuCisKKwkgIFRoaXMgZHJpdmVyIG1ha2VzIHRoZSBhZGFwdGVyIGFwcGVhciBhcyBhIG5vcm1hbCBFdGhlcm5ldCBpbnRlcmZhY2UsCisJICB0eXBpY2FsbHkgb24gZXRoMCwgaWYgaXQgaXMgdGhlIG9ubHkgZXRoZXJuZXQgZGV2aWNlLCBvciBwZXJoYXBzIG9uCisJICBldGgxLCBpZiB5b3UgaGF2ZSBhIFBDSSBvciBJU0EgZXRoZXJuZXQgY2FyZCBpbnN0YWxsZWQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGthd2V0aC4KKworY29uZmlnIFVTQl9QRUdBU1VTCisJdHJpc3RhdGUgIlVTQiBQZWdhc3VzL1BlZ2FzdXMtSUkgYmFzZWQgZXRoZXJuZXQgZGV2aWNlIHN1cHBvcnQiCisJc2VsZWN0IE1JSQorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IGtub3cgeW91IGhhdmUgUGVnYXN1cyBvciBQZWdhc3VzLUlJIGJhc2VkIGFkYXB0ZXIuCisJICBJZiBpbiBkb3VidCB0aGVuIGxvb2sgYXQgPGZpbGU6ZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuaD4gZm9yIHRoZQorCSAgY29tcGxldGUgbGlzdCBvZiBzdXBwb3J0ZWQgZGV2aWNlcy4KKworCSAgSWYgeW91ciBwYXJ0aWN1bGFyIGFkYXB0ZXIgaXMgbm90IGluIHRoZSBsaXN0IGFuZCB5b3UgYXJlIF9zdXJlXyBpdAorCSAgaXMgUGVnYXN1cyBvciBQZWdhc3VzIElJIGJhc2VkIHRoZW4gc2VuZCBtZQorCSAgPHBldGthbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IHZlbmRvciBhbmQgZGV2aWNlIElEcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcGVnYXN1cy4KKworY29uZmlnIFVTQl9SVEw4MTUwCisJdHJpc3RhdGUgIlVTQiBSVEw4MTUwIGJhc2VkIGV0aGVybmV0IGRldmljZSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBSVEw4MTUwIGJhc2VkIHVzYi1ldGhlcm5ldCBhZGFwdGVyLgorCSAgU2VuZCBtZSA8cGV0a2FuQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gYW55IGNvbW1lbnRzIHlvdSBtYXkgaGF2ZS4KKwkgIFlvdSBjYW4gYWxzbyBjaGVjayBmb3IgdXBkYXRlcyBhdCA8aHR0cDovL3BlZ2FzdXMyLnNvdXJjZWZvcmdlLm5ldC8+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBydGw4MTUwLgorCitjb25maWcgVVNCX1VTQk5FVAorCXRyaXN0YXRlICJNdWx0aS1wdXJwb3NlIFVTQiBOZXR3b3JraW5nIEZyYW1ld29yayIKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBzZXZlcmFsIGtpbmRzIG9mIG5ldHdvcmsgbGlua3Mgb3ZlciBVU0IsCisJICB3aXRoICJtaW5pZHJpdmVycyIgYnVpbHQgYXJvdW5kIGEgY29tbW9uIG5ldHdvcmsgZHJpdmVyIGNvcmUKKwkgIHRoYXQgc3VwcG9ydHMgZGVlcCBxdWV1ZXMgZm9yIGVmZmljaWVudCB0cmFuc2ZlcnMuICAoVGhpcyBnaXZlcworCSAgYmV0dGVyIHBlcmZvcm1hbmNlIHdpdGggc21hbGwgcGFja2V0cyBhbmQgYXQgaGlnaCBzcGVlZHMpLgorCSAgCisJICBUaGUgVVNCIGhvc3QgcnVucyAidXNibmV0IiwgYW5kIHRoZSBvdGhlciBlbmQgb2YgdGhlIGxpbmsgbWlnaHQgYmU6CisKKwkgIC0gQW5vdGhlciBVU0IgaG9zdCwgd2hlbiB1c2luZyBVU0IgIm5ldHdvcmsiIG9yICJkYXRhIHRyYW5zZmVyIgorCSAgICBjYWJsZXMuICBUaGVzZSBhcmUgb2Z0ZW4gdXNlZCB0byBuZXR3b3JrIGxhcHRvcHMgdG8gUENzLCBsaWtlCisJICAgICJMYXBsaW5rIiBwYXJhbGxlbCBjYWJsZXMgb3Igc29tZSBtb3RoZXJib2FyZHMuICBUaGVzZSByZWx5CisJICAgIG9uIHNwZWNpYWxpemVkIGNoaXBzIGZyb20gbWFueSBzdXBwbGllcnMuCisKKwkgIC0gQW4gaW50ZWxsaWdlbnQgVVNCIGdhZGdldCwgcGVyaGFwcyBlbWJlZGRpbmcgYSBMaW51eCBzeXN0ZW0uCisJICAgIFRoZXNlIGluY2x1ZGUgUERBcyBydW5uaW5nIExpbnV4IChpUGFxLCBZb3B5LCBaYXVydXMsIGFuZAorCSAgICBvdGhlcnMpLCBhbmQgZGV2aWNlcyB0aGF0IGludGVyb3BlcmF0ZSB1c2luZyB0aGUgc3RhbmRhcmQKKwkgICAgQ0RDLUV0aGVybmV0IHNwZWNpZmljYXRpb24gKGluY2x1ZGluZyBtYW55IGNhYmxlIG1vZGVtcykuCisKKwkgIC0gTmV0d29yayBhZGFwdGVyIGhhcmR3YXJlIChsaWtlIHRob3NlIGZvciAxMC8xMDAgRXRoZXJuZXQpIHdoaWNoCisJICAgIHVzZXMgdGhpcyBkcml2ZXIgZnJhbWV3b3JrLgorCisJICBUaGUgbGluayB3aWxsIGFwcGVhciB3aXRoIGEgbmFtZSBsaWtlICJ1c2IwIiwgd2hlbiB0aGUgbGluayBpcworCSAgYSB0d28tbm9kZSBsaW5rLCBvciAiZXRoMCIgZm9yIG1vc3QgQ0RDLUV0aGVybmV0IGRldmljZXMuICBUaG9zZQorCSAgdHdvLW5vZGUgbGlua3MgYXJlIG1vc3QgZWFzaWx5IG1hbmFnZWQgd2l0aCBFdGhlcm5ldCBCcmlkZ2luZworCSAgKENPTkZJR19CUklER0UpIGluc3RlYWQgb2Ygcm91dGluZy4KKworCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIDxodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmcvdXNibmV0Lz4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYm5ldC4KKworY29tbWVudCAiVVNCIEhvc3QtdG8tSG9zdCBDYWJsZXMiCisJZGVwZW5kcyBvbiBVU0JfVVNCTkVUCisKK2NvbmZpZyBVU0JfQUxJX001NjMyCisJYm9vbGVhbiAiQUxpIE01NjMyIGJhc2VkICdVU0IgMi4wIERhdGEgTGluaycgY2FibGVzIgorCWRlcGVuZHMgb24gVVNCX1VTQk5FVAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UncmUgdXNpbmcgYSBob3N0LXRvLWhvc3QgY2FibGUKKwkgIGJhc2VkIG9uIHRoaXMgZGVzaWduLCB3aGljaCBzdXBwb3J0cyBVU0IgMi4wIGhpZ2ggc3BlZWQuCisKK2NvbmZpZyBVU0JfQU4yNzIwCisJYm9vbGVhbiAiQW5jaG9yQ2hpcHMgMjcyMCBiYXNlZCBjYWJsZXMgKFhpcmNvbSBQR1VORVQsIC4uLikiCisJZGVwZW5kcyBvbiBVU0JfVVNCTkVUCisJZGVmYXVsdCB5CisJaGVscAorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSdyZSB1c2luZyBhIGhvc3QtdG8taG9zdCBjYWJsZQorCSAgYmFzZWQgb24gdGhpcyBkZXNpZ24uICBOb3RlIHRoYXQgQW5jaG9yQ2hpcHMgaXMgbm93IGEKKwkgIEN5cHJlc3MgYnJhbmQuCisKK2NvbmZpZyBVU0JfQkVMS0lOCisJYm9vbGVhbiAiZVRFSyBiYXNlZCBob3N0LXRvLWhvc3QgY2FibGVzIChBZHZhbmNlLCBCZWxraW4sIC4uLikiCisJZGVwZW5kcyBvbiBVU0JfVVNCTkVUCisJZGVmYXVsdCB5CisJaGVscAorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSdyZSB1c2luZyBhIGhvc3QtdG8taG9zdCBjYWJsZQorCSAgYmFzZWQgb24gdGhpcyBkZXNpZ246ICB0d28gTmV0Q2hpcCAyODkwIGNoaXBzIGFuZCBhbiBBdG1lbAorCSAgbWljcm9jb250cm9sbGVyLCB3aXRoIExFRHMgdGhhdCBpbmRpY2F0ZSB0cmFmZmljLgorCitjb25maWcgVVNCX0dFTkVTWVMKKwlib29sZWFuICJHZW5lU3lzIEdMNjIwVVNCLUEgYmFzZWQgY2FibGVzIgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gVVNCX1VTQk5FVAorCWhlbHAKKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UncmUgdXNpbmcgYSBob3N0LXRvLWhvc3QgY2FibGUsCisJICBvciBQQzJQQyBtb3RoZXJib2FyZCwgd2l0aCB0aGlzIGNoaXAuCisKKwkgIE5vdGUgdGhhdCB0aGUgaGFsZi1kdXBsZXggIkdMNjIwVVNCIiBpcyBub3Qgc3VwcG9ydGVkLgorCitjb25maWcgVVNCX05FVDEwODAKKwlib29sZWFuICJOZXRDaGlwIDEwODAgYmFzZWQgY2FibGVzIChMYXBsaW5rLCAuLi4pIgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gVVNCX1VTQk5FVAorCWhlbHAKKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UncmUgdXNpbmcgYSBob3N0LXRvLWhvc3QgY2FibGUgYmFzZWQKKwkgIG9uIHRoaXMgZGVzaWduOiAgb25lIE5ldENoaXAgMTA4MCBjaGlwcyBhbmQgc3VwcG9ydGluZyBsb2dpYywKKwkgIHN1cHBvcnRpbmcgTEVEcyB0aGF0IGluZGljYXRlIHRyYWZmaWMKKworY29uZmlnIFVTQl9QTDIzMDEKKwlib29sZWFuICJQcm9saWZpYyBQTC0yMzAxLzIzMDIgYmFzZWQgY2FibGVzIgorCWRlZmF1bHQgeQorCSMgaGFuZHNoYWtlL2luaXQvcmVzZXQgcHJvYmxlbXMsIGZyb20gb3JpZ2luYWwgJ3BsdXNiJyBkcml2ZXIKKwlkZXBlbmRzIG9uIFVTQl9VU0JORVQgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSdyZSB1c2luZyBhIGhvc3QtdG8taG9zdCBjYWJsZQorCSAgd2l0aCBvbmUgb2YgdGhlc2UgY2hpcHMuCisKK2NvbmZpZyBVU0JfS0MyMTkwCisJYm9vbGVhbiAiS1QgVGVjaG5vbG9neSBLQzIxOTAgYmFzZWQgY2FibGVzIChJbnN0YU5ldCkiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBVU0JfVVNCTkVUICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UncmUgdXNpbmcgYSBob3N0LXRvLWhvc3QgY2FibGUKKwkgIHdpdGggb25lIG9mIHRoZXNlIGNoaXBzLgorCitjb21tZW50ICJJbnRlbGxpZ2VudCBVU0IgRGV2aWNlcy9HYWRnZXRzIgorCWRlcGVuZHMgb24gVVNCX1VTQk5FVAorCitjb25maWcgVVNCX0FSTUxJTlVYCisJYm9vbGVhbiAiRW1iZWRkZWQgQVJNIExpbnV4IGxpbmtzIChpUGFxLCAuLi4pIgorCWRlcGVuZHMgb24gVVNCX1VTQk5FVAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIENob29zZSB0aGlzIG9wdGlvbiB0byBzdXBwb3J0IHRoZSAidXNiLWV0aCIgbmV0d29ya2luZyBkcml2ZXIKKwkgIHVzZWQgYnkgbW9zdCBvZiB0aGUgQVJNIExpbnV4IGNvbW11bml0eSB3aXRoIGRldmljZSBjb250cm9sbGVycworCSAgc3VjaCBhcyB0aGUgU0EtMTF4MCBhbmQgUFhBLTI1eCBVRENzLCBvciB0aGUgdGZ0cCBjYXBhYmlsaXRpZXMKKwkgIGluIHNvbWUgUFhBIHZlcnNpb25zIG9mIHRoZSAiYmxvYiIgYm9vdCBsb2FkZXIuCisKKwkgIExpbnV4LWJhc2VkICJHdW1zdGl4IiBQWEEtMjV4IGJhc2VkIHN5c3RlbXMgdXNlIHRoaXMgcHJvdG9jb2wKKwkgIHRvIHRhbGsgd2l0aCBvdGhlciBMaW51eCBzeXN0ZW1zLgorCisJICBBbHRob3VnaCB0aGUgUk9NcyBzaGlwcGVkIHdpdGggU2hhcnAgWmF1cnVzIHByb2R1Y3RzIHVzZSBhCisJICBkaWZmZXJlbnQgbGluayBsZXZlbCBmcmFtaW5nIHByb3RvY29sLCB5b3UgY2FuIGhhdmUgdGhlbSB1c2UKKwkgIHRoaXMgc2ltcGxlciBwcm90b2NvbCBieSBpbnN0YWxsaW5nIGEgZGlmZmVyZW50IGtlcm5lbC4KKworY29uZmlnIFVTQl9FUFNPTjI4ODgKKwlib29sZWFuICJFcHNvbiAyODg4IGJhc2VkIGZpcm13YXJlIChERVZFTE9QTUVOVCkiCisJZGVwZW5kcyBvbiBVU0JfVVNCTkVUCisJZGVmYXVsdCB5CisJaGVscAorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIHRvIHN1cHBvcnQgdGhlIHVzYiBuZXR3b3JraW5nIGxpbmtzIHVzZWQKKwkgIGJ5IHNvbWUgc2FtcGxlIGZpcm13YXJlIGZyb20gRXBzb24uCisKK2NvbmZpZyBVU0JfWkFVUlVTCisJYm9vbGVhbiAiU2hhcnAgWmF1cnVzIChzdG9jayBST01zKSIKKwlkZXBlbmRzIG9uIFVTQl9VU0JORVQKKwlzZWxlY3QgQ1JDMzIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBDaG9vc2UgdGhpcyBvcHRpb24gdG8gc3VwcG9ydCB0aGUgdXNiIG5ldHdvcmtpbmcgbGlua3MgdXNlZCBieQorCSAgWmF1cnVzIG1vZGVscyBsaWtlIHRoZSBTTC01MDAwRCwgU0wtNTUwMCwgU0wtNTYwMCwgQS0zMDAsIEItNTAwLgorCisJICBJZiB5b3UgaW5zdGFsbCBhbiBhbHRlcm5hdGUgUk9NIGltYWdlLCB5b3UgbWF5IG5vIGxvbmdlciBuZWVkCisJICB0byBzdXBwb3J0IHRoaXMgcHJvdG9jb2wuICBPbmx5IHRoZSAiZXRoLWZkIiBkcml2ZXIgcmVhbGx5IG5lZWRzCisJICB0aGlzIG5vbi1jb25mb3JtYW50IHZhcmlhbnQgb2YgQ0RDIEV0aGVybmV0IHByb3RvY29sLgorCitjb25maWcgVVNCX0NEQ0VUSEVSCisJYm9vbGVhbiAiQ0RDIEV0aGVybmV0IHN1cHBvcnQgKHNtYXJ0IGRldmljZXMgc3VjaCBhcyBjYWJsZSBtb2RlbXMpIgorCWRlcGVuZHMgb24gVVNCX1VTQk5FVAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIHN1cHBvcnRzIGRldmljZXMgY29uZm9ybWluZyB0byB0aGUgQ29tbXVuaWNhdGlvbiBEZXZpY2UKKwkgIENsYXNzIChDREMpIEV0aGVybmV0IENvbnRyb2wgTW9kZWwsIGEgc3BlY2lmaWNhdGlvbiB0aGF0J3MgZWFzeSB0bworCSAgaW1wbGVtZW50IGluIGRldmljZSBmaXJtd2FyZS4gIFRoZSBDREMgc3BlY2lmaWNhdGlvbnMgYXJlIGF2YWlsYWJsZQorCSAgZnJvbSA8aHR0cDovL3d3dy51c2Iub3JnLz4uCisJICAKKwkgIENEQyBFdGhlcm5ldCBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvcHRpb24gZm9yIERPQ1NJUyBjYWJsZSBtb2RlbXMKKwkgIHRoYXQgc3VwcG9ydCBVU0IgY29ubmVjdGl2aXR5LCB1c2VkIGZvciBub24tTWljcm9zb2Z0IFVTQiBob3N0cy4KKyAJICBUaGlzIGRyaXZlciBzaG91bGQgd29yayB3aXRoIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgZGV2aWNlczoKKworIAkgICAgKiBFcmljc3NvbiBQaXBlUmlkZXIgKGFsbCB2YXJpYW50cykKKyAJICAgICogTW90b3JvbGEgKERNMTAwIGFuZCBTQjQxMDApCisgCSAgICAqIEJyb2FkY29tIENhYmxlIE1vZGVtIChyZWZlcmVuY2UgZGVzaWduKQorIAkgICAgKiBUb3NoaWJhIFBDWDExMDBVCisJICAgICogLi4uCisKKwkgIFRoaXMgZHJpdmVyIGNyZWF0ZXMgYW4gaW50ZXJmYWNlIG5hbWVkICJldGhYIiwgd2hlcmUgWCBkZXBlbmRzIG9uCisJICB3aGF0IG90aGVyIG5ldHdvcmtpbmcgZGV2aWNlcyB5b3UgaGF2ZSBpbiB1c2UuICBIb3dldmVyLCBpZiB0aGUKKwkgIElFRUUgODAyICJsb2NhbCBhc3NpZ25tZW50IiBiaXQgaXMgc2V0IGluIHRoZSBhZGRyZXNzLCBhICJ1c2JYIgorCSAgbmFtZSBpcyB1c2VkIGluc3RlYWQuCisKK2NvbW1lbnQgIlVTQiBOZXR3b3JrIEFkYXB0ZXJzIgorCWRlcGVuZHMgb24gVVNCX1VTQk5FVAorCitjb25maWcgVVNCX0FYODgxN1gKKwlib29sZWFuICJBU0lYIEFYODh4eHggQmFzZWQgVVNCIDIuMCBFdGhlcm5ldCBEZXZpY2VzIgorCWRlcGVuZHMgb24gVVNCX1VTQk5FVCAmJiBORVRfRVRIRVJORVQKKwlzZWxlY3QgQ1JDMzIKKwlzZWxlY3QgTUlJCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBBU0lYIEFYODh4eHggYmFzZWQgVVNCIDIuMAorCSAgMTAvMTAwIEV0aGVybmV0IGRldmljZXMuCisKKyAJICBUaGlzIGRyaXZlciBzaG91bGQgd29yayB3aXRoIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgZGV2aWNlczoKKwkgICAgKiBBdGVuIFVDMjEwVAorCSAgICAqIEFTSVggQVg4ODE3MgorCSAgICAqIEJpbGxpb250b24gU3lzdGVtcywgVVNCMkFSIAorCSAgICAqIEJ1ZmZhbG8gTFVBLVUyLUtUWAorCSAgICAqIENvcmVnYSBGRXRoZXIgVVNCMi1UWAorCSAgICAqIEQtTGluayBEVUItRTEwMAorCSAgICAqIEhhd2tpbmcgVUYyMDAKKwkgICAgKiBMaW5rc3lzIFVTQjIwME0KKwkgICAgKiBOZXRnZWFyIEZBMTIwCisJICAgICogU2l0ZWNvbSBMTi0wMjkKKwkgICAgKiBJbnRlbGxpbmV0IFVTQiAyLjAgRXRoZXJuZXQKKwkgICAgKiBTVCBMYWIgVVNCIDIuMCBFdGhlcm5ldAorCSAgICAqIFRyZW5kTmV0IFRVMi1FVDEwMAorCisJICBUaGlzIGRyaXZlciBjcmVhdGVzIGFuIGludGVyZmFjZSBuYW1lZCAiZXRoWCIsIHdoZXJlIFggZGVwZW5kcyBvbgorCSAgd2hhdCBvdGhlciBuZXR3b3JraW5nIGRldmljZXMgeW91IGhhdmUgaW4gdXNlLiAgCisKK2NvbmZpZyBVU0JfWkQxMjAxCisJdHJpc3RhdGUgIlVTQiBaRDEyMDEgYmFzZWQgV2lyZWxlc3MgZGV2aWNlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBORVRfUkFESU8KKwlzZWxlY3QgRldfTE9BREVSCisJLS0taGVscC0tLQorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gdXNlIHdpcmVsZXNzIExBTiBhZGFwdGVycyBiYXNlZCBvbiB0aGUgWnlEQVMKKwkgIFpEMTIwMSBjaGlwLgorCisJICBUaGlzIGRyaXZlciBtYWtlcyB0aGUgYWRhcHRlciBhcHBlYXIgYXMgYSBub3JtYWwgRXRoZXJuZXQgaW50ZXJmYWNlLAorCSAgdHlwaWNhbGx5IG9uIHdsYW4wLgorCSAgCisJICBUaGUgemQxMjAxIGRldmljZSByZXF1aXJlcyBleHRlcm5hbCBmaXJtd2FyZSB0byBiZSBsb2FkZWQuCisJICBUaGlzIGNhbiBiZSBmb3VuZCBhdCBodHRwOi8vbGludXgtbGMxMDAwMjAuc291cmNlZm9yZ2UubmV0LworCSAgCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB6ZDEyMDEuCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL25ldC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmYzNTIxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbmV0L01ha2VmaWxlCkBAIC0wLDAgKzEsMTIgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIFVTQiBOZXR3b3JrIGRyaXZlcnMKKyMKKworb2JqLSQoQ09ORklHX1VTQl9DQVRDKQkJKz0gY2F0Yy5vCitvYmotJChDT05GSUdfVVNCX0tBV0VUSCkJKz0ga2F3ZXRoLm8KK29iai0kKENPTkZJR19VU0JfUEVHQVNVUykJKz0gcGVnYXN1cy5vCitvYmotJChDT05GSUdfVVNCX1JUTDgxNTApCSs9IHJ0bDgxNTAubworb2JqLSQoQ09ORklHX1VTQl9VU0JORVQpCSs9IHVzYm5ldC5vCitvYmotJChDT05GSUdfVVNCX1pEMTIwMSkJKz0gemQxMjAxLm8KKworQ0ZMQUdTX3pkMTIwMS5vID0gLUlkcml2ZXJzL25ldC93aXJlbGVzcy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9jYXRjLmMgYi9kcml2ZXJzL3VzYi9uZXQvY2F0Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YmU5MTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9uZXQvY2F0Yy5jCkBAIC0wLDAgKzEsOTYwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAwMSBWb2p0ZWNoIFBhdmxpaworICoKKyAqICBDQVRDIEVMMTIxMEEgTmV0TWF0ZSBVU0IgRXRoZXJuZXQgZHJpdmVyCisgKgorICogIFNwb25zb3JlZCBieSBTdVNFCisgKgorICogIEJhc2VkIG9uIHRoZSB3b3JrIG9mCisgKgkJRG9uYWxkIEJlY2tlcgorICogCisgKiAgT2xkIGNoaXBzZXQgc3VwcG9ydCBhZGRlZCBieSBTaW1vbiBFdmFucyA8c3BzZUBzZWNyZXQub3JnLnVrPiAyMDAyCisgKiAgICAtIGFkZHMgc3VwcG9ydCBmb3IgQmVsa2luIEY1VTAxMQorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIAorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIAorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICogCisgKiBTaG91bGQgeW91IG5lZWQgdG8gY29udGFjdCBtZSwgdGhlIGF1dGhvciwgeW91IGNhbiBkbyBzbyBlaXRoZXIgYnkKKyAqIGUtbWFpbCAtIG1haWwgeW91ciBtZXNzYWdlIHRvIDx2b2p0ZWNoQHN1c2UuY3o+LCBvciBieSBwYXBlciBtYWlsOgorICogVm9qdGVjaCBQYXZsaWssIFNpbXVua292YSAxNTk0LCBQcmFndWUgOCwgMTgyIDAwIEN6ZWNoIFJlcHVibGljCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyN1bmRlZiBERUJVRworCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKy8qCisgKiBWZXJzaW9uIGluZm9ybWF0aW9uLgorICovCisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYyLjgiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+IgorI2RlZmluZSBEUklWRVJfREVTQyAiQ0FUQyBFTDEyMTBBIE5ldE1hdGUgVVNCIEV0aGVybmV0IGRyaXZlciIKKyNkZWZpbmUgU0hPUlRfRFJJVkVSX0RFU0MgIkVMMTIxMEEgTmV0TWF0ZSBVU0IgRXRoZXJuZXQiCisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfbmFtZVtdID0gImNhdGMiOworCisvKgorICogU29tZSBkZWZpbmVzLgorICovIAorCisjZGVmaW5lIFNUQVRTX1VQREFURQkJKEhaKQkvKiBUaW1lIGJldHdlZW4gc3RhdHMgdXBkYXRlcyAqLworI2RlZmluZSBUWF9USU1FT1VUCQkoNSpIWikJLyogTWF4IHRpbWUgdGhlIHF1ZXVlIGNhbiBiZSBzdG9wcGVkICovCisjZGVmaW5lIFBLVF9TWgkJCTE1MzYJLyogTWF4IEV0aGVybmV0IHBhY2tldCBzaXplICovCisjZGVmaW5lIFJYX01BWF9CVVJTVAkJMTUJLyogTWF4IHBhY2tldHMgcGVyIHJ4IGJ1ZmZlciAoPiAwLCA8IDE2KSAqLworI2RlZmluZSBUWF9NQVhfQlVSU1QJCTE1CS8qIE1heCBmdWxsIHNpemVkIHBhY2tldHMgcGVyIHR4IGJ1ZmZlciAoPiAwKSAqLworI2RlZmluZSBDVFJMX1FVRVVFCQkxNgkvKiBNYXggY29udHJvbCByZXF1ZXN0cyBpbiBmbGlnaHQgKHBvd2VyIG9mIHR3bykgKi8KKyNkZWZpbmUgUlhfUEtUX1NaCQkxNjAwCS8qIE1heCBzaXplIG9mIHJlY2VpdmUgcGFja2V0IGZvciBGNVUwMTEgKi8KKworLyoKKyAqIENvbnRyb2wgcmVxdWVzdHMuCisgKi8KKworZW51bSBjb250cm9sX3JlcXVlc3RzIHsKKwlSZWFkTWVtID0JMHhmMSwKKwlHZXRNYWMgPQkweGYyLAorCVJlc2V0ID0JCTB4ZjQsCisJU2V0TWFjID0JMHhmNSwKKwlTZXRSeE1vZGUgPSAgICAgMHhmNSwgIC8qIEY1VTAxMSBvbmx5ICovCisJV3JpdGVST00gPQkweGY4LAorCVNldFJlZyA9CTB4ZmEsCisJR2V0UmVnID0JMHhmYiwKKwlXcml0ZU1lbSA9CTB4ZmMsCisJUmVhZFJPTSA9CTB4ZmQsCit9OworCisvKgorICogUmVnaXN0ZXJzLgorICovCisKK2VudW0gcmVnaXN0ZXJfb2Zmc2V0cyB7CisJVHhCdWZDb3VudCA9CTB4MjAsCisJUnhCdWZDb3VudCA9CTB4MjEsCisJT3BNb2RlcyA9CTB4MjIsCisJVHhRZWQgPQkJMHgyMywKKwlSeFFlZCA9CQkweDI0LAorCU1heEJ1cnN0ID0JMHgyNSwKKwlSeFVuaXQgPQkweDYwLAorCUV0aFN0YXR1cyA9CTB4NjEsCisJU3RhdGlvbkFkZHIwID0JMHg2NywKKwlFdGhTdGF0cyA9CTB4NjksCisJTEVEQ3RybCA9CTB4ODEsCit9OworCitlbnVtIGV0aF9zdGF0cyB7CisJVHhTaW5nbGVDb2xsID0JMHgwMCwKKyAgICAgICAgVHhNdWx0aUNvbGwgPQkweDAyLAorICAgICAgICBUeEV4Y2Vzc0NvbGwgPQkweDA0LAorICAgICAgICBSeEZyYW1FcnIgPQkweDA2LAorfTsKKworZW51bSBvcF9tb2RlX2JpdHMgeworCU9wM01lbVdhaXRzID0JMHgwMywKKwlPcExlbkluY2x1ZGUgPQkweDA4LAorCU9wUnhNZXJnZSA9CTB4MTAsCisJT3BUeE1lcmdlID0JMHgyMCwKKwlPcFdpbjk1YnVnZml4ID0JMHg0MCwKKwlPcExvb3BiYWNrID0JMHg4MCwKK307CisKK2VudW0gcnhfZmlsdGVyX2JpdHMgeworCVJ4RW5hYmxlID0JMHgwMSwKKwlSeFBvbGFyaXR5ID0JMHgwMiwKKwlSeEZvcmNlT0sgPQkweDA0LAorCVJ4TXVsdGlDYXN0ID0JMHgwOCwKKwlSeFByb21pc2MgPQkweDEwLAorCUFsdFJ4UHJvbWlzYyA9ICAweDIwLCAvKiBGNVUwMTEgdXNlcyBkaWZmZXJlbnQgYml0ICovCit9OworCitlbnVtIGxlZF92YWx1ZXMgeworCUxFREZhc3QgPSAJMHgwMSwKKwlMRURTbG93ID0JMHgwMiwKKwlMRURGbGFzaCA9CTB4MDMsCisJTEVEUHVsc2UgPQkweDA0LAorCUxFRExpbmsgPQkweDA4LAorfTsKKworZW51bSBsaW5rX3N0YXR1cyB7CisJTGlua05vQ2hhbmdlID0gMCwKKwlMaW5rR29vZCAgICAgPSAxLAorCUxpbmtCYWQgICAgICA9IDIKK307CisKKy8qCisgKiBUaGUgY2F0YyBzdHJ1Y3QuCisgKi8KKworI2RlZmluZSBDVFJMX1JVTk5JTkcJMAorI2RlZmluZSBSWF9SVU5OSU5HCTEKKyNkZWZpbmUgVFhfUlVOTklORwkyCisKK3N0cnVjdCBjYXRjIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CisKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJdW5zaWduZWQgaW50IHR4X3B0ciwgdHhfaWR4OworCXVuc2lnbmVkIGludCBjdHJsX2hlYWQsIGN0cmxfdGFpbDsKKwlzcGlubG9ja190IHR4X2xvY2ssIGN0cmxfbG9jazsKKworCXU4IHR4X2J1ZlsyXVtUWF9NQVhfQlVSU1QgKiAoUEtUX1NaICsgMildOworCXU4IHJ4X2J1ZltSWF9NQVhfQlVSU1QgKiAoUEtUX1NaICsgMildOworCXU4IGlycV9idWZbMl07CisJdTggY3RybF9idWZbNjRdOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgY3RybF9kcjsKKworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworCXU4IHN0YXRzX2J1Zls4XTsKKwl1MTYgc3RhdHNfdmFsc1s0XTsKKwl1bnNpZ25lZCBsb25nIGxhc3Rfc3RhdHM7CisKKwl1OCBtdWx0aWNhc3RbNjRdOworCisJc3RydWN0IGN0cmxfcXVldWUgeworCQl1OCBkaXI7CisJCXU4IHJlcXVlc3Q7CisJCXUxNiB2YWx1ZTsKKwkJdTE2IGluZGV4OworCQl2b2lkICpidWY7CisJCWludCBsZW47CisJCXZvaWQgKCpjYWxsYmFjaykoc3RydWN0IGNhdGMgKmNhdGMsIHN0cnVjdCBjdHJsX3F1ZXVlICpxKTsKKwl9IGN0cmxfcXVldWVbQ1RSTF9RVUVVRV07CisKKwlzdHJ1Y3QgdXJiICp0eF91cmIsICpyeF91cmIsICppcnFfdXJiLCAqY3RybF91cmI7CisKKwl1OCBpc19mNXUwMTE7CS8qIFNldCBpZiBkZXZpY2UgaXMgYW4gRjVVMDExICovCisJdTggcnhtb2RlWzJdOwkvKiBVc2VkIGZvciBGNVUwMTEgKi8KKwlhdG9taWNfdCByZWNxX3N6OyAvKiBVc2VkIGZvciBGNVUwMTEgLSBjb3VudGVyIG9mIHdhaXRpbmcgcnggcGFja2V0cyAqLworfTsKKworLyoKKyAqIFVzZWZ1bCBtYWNyb3MuCisgKi8KKworI2RlZmluZSBjYXRjX2dldF9tYWMoY2F0YywgbWFjKQkJCQljYXRjX2N0cmxfbXNnKGNhdGMsIFVTQl9ESVJfSU4sICBHZXRNYWMsIDAsIDAsIG1hYywgIDYpCisjZGVmaW5lIGNhdGNfcmVzZXQoY2F0YykJCQkJY2F0Y19jdHJsX21zZyhjYXRjLCBVU0JfRElSX09VVCwgUmVzZXQsIDAsIDAsIE5VTEwsIDApCisjZGVmaW5lIGNhdGNfc2V0X3JlZyhjYXRjLCByZWcsIHZhbCkJCQljYXRjX2N0cmxfbXNnKGNhdGMsIFVTQl9ESVJfT1VULCBTZXRSZWcsIHZhbCwgcmVnLCBOVUxMLCAwKQorI2RlZmluZSBjYXRjX2dldF9yZWcoY2F0YywgcmVnLCBidWYpCQkJY2F0Y19jdHJsX21zZyhjYXRjLCBVU0JfRElSX0lOLCAgR2V0UmVnLCAwLCByZWcsIGJ1ZiwgMSkKKyNkZWZpbmUgY2F0Y193cml0ZV9tZW0oY2F0YywgYWRkciwgYnVmLCBzaXplKQkJY2F0Y19jdHJsX21zZyhjYXRjLCBVU0JfRElSX09VVCwgV3JpdGVNZW0sIDAsIGFkZHIsIGJ1Ziwgc2l6ZSkKKyNkZWZpbmUgY2F0Y19yZWFkX21lbShjYXRjLCBhZGRyLCBidWYsIHNpemUpCQljYXRjX2N0cmxfbXNnKGNhdGMsIFVTQl9ESVJfSU4sICBSZWFkTWVtLCAwLCBhZGRyLCBidWYsIHNpemUpCisKKyNkZWZpbmUgZjV1MDExX3J4bW9kZShjYXRjLCByeG1vZGUpCQkJY2F0Y19jdHJsX21zZyhjYXRjLCBVU0JfRElSX09VVCwgU2V0UnhNb2RlLCAwLCAxLCByeG1vZGUsIDIpCisjZGVmaW5lIGY1dTAxMV9yeG1vZGVfYXN5bmMoY2F0Yywgcnhtb2RlKQkJY2F0Y19jdHJsX2FzeW5jKGNhdGMsIFVTQl9ESVJfT1VULCBTZXRSeE1vZGUsIDAsIDEsICZyeG1vZGUsIDIsIE5VTEwpCisjZGVmaW5lIGY1dTAxMV9tY2hhc2hfYXN5bmMoY2F0YywgaGFzaCkJCQljYXRjX2N0cmxfYXN5bmMoY2F0YywgVVNCX0RJUl9PVVQsIFNldFJ4TW9kZSwgMCwgMiwgJmhhc2gsIDgsIE5VTEwpCisKKyNkZWZpbmUgY2F0Y19zZXRfcmVnX2FzeW5jKGNhdGMsIHJlZywgdmFsKQkJY2F0Y19jdHJsX2FzeW5jKGNhdGMsIFVTQl9ESVJfT1VULCBTZXRSZWcsIHZhbCwgcmVnLCBOVUxMLCAwLCBOVUxMKQorI2RlZmluZSBjYXRjX2dldF9yZWdfYXN5bmMoY2F0YywgcmVnLCBjYikJCWNhdGNfY3RybF9hc3luYyhjYXRjLCBVU0JfRElSX0lOLCBHZXRSZWcsIDAsIHJlZywgTlVMTCwgMSwgY2IpCisjZGVmaW5lIGNhdGNfd3JpdGVfbWVtX2FzeW5jKGNhdGMsIGFkZHIsIGJ1Ziwgc2l6ZSkJY2F0Y19jdHJsX2FzeW5jKGNhdGMsIFVTQl9ESVJfT1VULCBXcml0ZU1lbSwgMCwgYWRkciwgYnVmLCBzaXplLCBOVUxMKQorCisvKgorICogUmVjZWl2ZSByb3V0aW5lcy4KKyAqLworCitzdGF0aWMgdm9pZCBjYXRjX3J4X2RvbmUoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgY2F0YyAqY2F0YyA9IHVyYi0+Y29udGV4dDsKKwl1OCAqcGt0X3N0YXJ0ID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgcGt0X2xlbiwgcGt0X29mZnNldCA9IDA7CisKKwlpZiAoIWNhdGMtPmlzX2Y1dTAxMSkgeworCQljbGVhcl9iaXQoUlhfUlVOTklORywgJmNhdGMtPmZsYWdzKTsKKwkJcGt0X29mZnNldCA9IDI7CisJfQorCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygicnhfZG9uZSwgc3RhdHVzICVkLCBsZW5ndGggJWQiLCB1cmItPnN0YXR1cywgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJcmV0dXJuOworCX0KKworCWRvIHsKKwkJaWYoIWNhdGMtPmlzX2Y1dTAxMSkgeworCQkJcGt0X2xlbiA9IGxlMTZfdG9fY3B1cCgoX19sZTE2Kilwa3Rfc3RhcnQpOworCQkJaWYgKHBrdF9sZW4gPiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJCQljYXRjLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQkJY2F0Yy0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwa3RfbGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCQl9CisKKwkJaWYgKCEoc2tiID0gZGV2X2FsbG9jX3NrYihwa3RfbGVuKSkpCisJCQlyZXR1cm47CisKKwkJc2tiLT5kZXYgPSBjYXRjLT5uZXRkZXY7CisJCWV0aF9jb3B5X2FuZF9zdW0oc2tiLCBwa3Rfc3RhcnQgKyBwa3Rfb2Zmc2V0LCBwa3RfbGVuLCAwKTsKKwkJc2tiX3B1dChza2IsIHBrdF9sZW4pOworCisJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGNhdGMtPm5ldGRldik7CisJCW5ldGlmX3J4KHNrYik7CisKKwkJY2F0Yy0+c3RhdHMucnhfcGFja2V0cysrOworCQljYXRjLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOworCisJCS8qIEY1VTAxMSBvbmx5IGRvZXMgb25lIHBhY2tldCBwZXIgUlggKi8KKwkJaWYgKGNhdGMtPmlzX2Y1dTAxMSkKKwkJCWJyZWFrOworCQlwa3Rfc3RhcnQgKz0gKCgocGt0X2xlbiArIDEpID4+IDYpICsgMSkgPDwgNjsKKworCX0gd2hpbGUgKHBrdF9zdGFydCAtICh1OCAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlciA8IHVyYi0+YWN0dWFsX2xlbmd0aCk7CisKKwljYXRjLT5uZXRkZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCisJaWYgKGNhdGMtPmlzX2Y1dTAxMSkgeworCQlpZiAoYXRvbWljX3JlYWQoJmNhdGMtPnJlY3Ffc3opKSB7CisJCQlpbnQgc3RhdHVzOworCQkJYXRvbWljX2RlYygmY2F0Yy0+cmVjcV9zeik7CisJCQlkYmcoImdldHRpbmcgZXh0cmEgcGFja2V0Iik7CisJCQl1cmItPmRldiA9IGNhdGMtPnVzYmRldjsKKwkJCWlmICgoc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgPCAwKSB7CisJCQkJZGJnKCJzdWJtaXQocnhfdXJiKSBzdGF0dXMgJWQiLCBzdGF0dXMpOworCQkJfQorCQl9IGVsc2UgeworCQkJY2xlYXJfYml0KFJYX1JVTk5JTkcsICZjYXRjLT5mbGFncyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNhdGNfaXJxX2RvbmUoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgY2F0YyAqY2F0YyA9IHVyYi0+Y29udGV4dDsKKwl1OCAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCBzdGF0dXM7CisJdW5zaWduZWQgaW50IGhhc2RhdGEgPSAwLCBsaW5rc3RzID0gTGlua05vQ2hhbmdlOworCisJaWYgKCFjYXRjLT5pc19mNXUwMTEpIHsKKwkJaGFzZGF0YSA9IGRhdGFbMV0gJiAweDgwOworCQlpZiAoZGF0YVsxXSAmIDB4NDApCisJCQlsaW5rc3RzID0gTGlua0dvb2Q7CisJCWVsc2UgaWYgKGRhdGFbMV0gJiAweDIwKQorCQkJbGlua3N0cyA9IExpbmtCYWQ7CisJfSBlbHNlIHsKKwkJaGFzZGF0YSA9ICh1bnNpZ25lZCBpbnQpKGJlMTZfdG9fY3B1cCgoX19iZTE2KilkYXRhKSAmIDB4MGZmZik7CisJCWlmIChkYXRhWzBdID09IDB4OTApCisJCQlsaW5rc3RzID0gTGlua0dvb2Q7CisJCWVsc2UgaWYgKGRhdGFbMF0gPT0gMHhBMCkKKwkJCWxpbmtzdHMgPSBMaW5rQmFkOworCX0KKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CQkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgkvKiB1bmxpbmsgKi8KKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQlyZXR1cm47CisJLyogLUVQSVBFOiAgc2hvdWxkIGNsZWFyIHRoZSBoYWx0ICovCisJZGVmYXVsdDoJCS8qIGVycm9yICovCisJCWRiZygiaXJxX2RvbmUsIHN0YXR1cyAlZCwgZGF0YSAlMDJ4ICUwMnguIiwgdXJiLT5zdGF0dXMsIGRhdGFbMF0sIGRhdGFbMV0pOworCQlnb3RvIHJlc3VibWl0OworCX0KKworCWlmIChsaW5rc3RzID09IExpbmtHb29kKSB7CisJCW5ldGlmX2NhcnJpZXJfb24oY2F0Yy0+bmV0ZGV2KTsKKwkJZGJnKCJsaW5rIG9rIik7CisJfQorCisJaWYgKGxpbmtzdHMgPT0gTGlua0JhZCkgeworCQluZXRpZl9jYXJyaWVyX29mZihjYXRjLT5uZXRkZXYpOworCQlkYmcoImxpbmsgYmFkIik7CisJfQorCisJaWYgKGhhc2RhdGEpIHsKKwkJaWYgKHRlc3RfYW5kX3NldF9iaXQoUlhfUlVOTklORywgJmNhdGMtPmZsYWdzKSkgeworCQkJaWYgKGNhdGMtPmlzX2Y1dTAxMSkKKwkJCQlhdG9taWNfaW5jKCZjYXRjLT5yZWNxX3N6KTsKKwkJfSBlbHNlIHsKKwkJCWNhdGMtPnJ4X3VyYi0+ZGV2ID0gY2F0Yy0+dXNiZGV2OworCQkJaWYgKChzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihjYXRjLT5yeF91cmIsIEdGUF9BVE9NSUMpKSA8IDApIHsKKwkJCQllcnIoInN1Ym1pdChyeF91cmIpIHN0YXR1cyAlZCIsIHN0YXR1cyk7CisJCQl9CisJCX0gCisJfQorcmVzdWJtaXQ6CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgU0xBQl9BVE9NSUMpOworCWlmIChzdGF0dXMpCisJCWVyciAoImNhbid0IHJlc3VibWl0IGludHIsICVzLSVzLCBzdGF0dXMgJWQiLAorCQkJCWNhdGMtPnVzYmRldi0+YnVzLT5idXNfbmFtZSwKKwkJCQljYXRjLT51c2JkZXYtPmRldnBhdGgsIHN0YXR1cyk7Cit9CisKKy8qCisgKiBUcmFuc21pdCByb3V0aW5lcy4KKyAqLworCitzdGF0aWMgdm9pZCBjYXRjX3R4X3J1bihzdHJ1Y3QgY2F0YyAqY2F0YykKK3sKKwlpbnQgc3RhdHVzOworCisJaWYgKGNhdGMtPmlzX2Y1dTAxMSkKKwkJY2F0Yy0+dHhfcHRyID0gKGNhdGMtPnR4X3B0ciArIDYzKSAmIH42MzsKKworCWNhdGMtPnR4X3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGNhdGMtPnR4X3B0cjsKKwljYXRjLT50eF91cmItPnRyYW5zZmVyX2J1ZmZlciA9IGNhdGMtPnR4X2J1ZltjYXRjLT50eF9pZHhdOworCWNhdGMtPnR4X3VyYi0+ZGV2ID0gY2F0Yy0+dXNiZGV2OworCisJaWYgKChzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihjYXRjLT50eF91cmIsIEdGUF9BVE9NSUMpKSA8IDApCisJCWVycigic3VibWl0KHR4X3VyYiksIHN0YXR1cyAlZCIsIHN0YXR1cyk7CisKKwljYXRjLT50eF9pZHggPSAhY2F0Yy0+dHhfaWR4OworCWNhdGMtPnR4X3B0ciA9IDA7CisKKwljYXRjLT5uZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKK30KKworc3RhdGljIHZvaWQgY2F0Y190eF9kb25lKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGNhdGMgKmNhdGMgPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICh1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCkgeworCQlkYmcoIlR4IFJlc2V0LiIpOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzICY9IH5VUkJfQVNZTkNfVU5MSU5LOworCQl1cmItPnN0YXR1cyA9IDA7CisJCWNhdGMtPm5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQljYXRjLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJY2xlYXJfYml0KFRYX1JVTk5JTkcsICZjYXRjLT5mbGFncyk7CisJCW5ldGlmX3dha2VfcXVldWUoY2F0Yy0+bmV0ZGV2KTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoInR4X2RvbmUsIHN0YXR1cyAlZCwgbGVuZ3RoICVkIiwgdXJiLT5zdGF0dXMsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2F0Yy0+dHhfbG9jaywgZmxhZ3MpOworCisJaWYgKGNhdGMtPnR4X3B0cikKKwkJY2F0Y190eF9ydW4oY2F0Yyk7CisJZWxzZQorCQljbGVhcl9iaXQoVFhfUlVOTklORywgJmNhdGMtPmZsYWdzKTsKKworCW5ldGlmX3dha2VfcXVldWUoY2F0Yy0+bmV0ZGV2KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhdGMtPnR4X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBjYXRjX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBjYXRjICpjYXRjID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNoYXIgKnR4X2J1ZjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXRjLT50eF9sb2NrLCBmbGFncyk7CisKKwljYXRjLT50eF9wdHIgPSAoKChjYXRjLT50eF9wdHIgLSAxKSA+PiA2KSArIDEpIDw8IDY7CisJdHhfYnVmID0gY2F0Yy0+dHhfYnVmW2NhdGMtPnR4X2lkeF0gKyBjYXRjLT50eF9wdHI7CisJKigodTE2Kil0eF9idWYpID0gKGNhdGMtPmlzX2Y1dTAxMSkgPyBjcHVfdG9fYmUxNigodTE2KXNrYi0+bGVuKSA6IGNwdV90b19sZTE2KCh1MTYpc2tiLT5sZW4pOworCW1lbWNweSh0eF9idWYgKyAyLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwljYXRjLT50eF9wdHIgKz0gc2tiLT5sZW4gKyAyOworCisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFRYX1JVTk5JTkcsICZjYXRjLT5mbGFncykpCisJCWNhdGNfdHhfcnVuKGNhdGMpOworCisJaWYgKChjYXRjLT5pc19mNXUwMTEgJiYgY2F0Yy0+dHhfcHRyKQorCSAgICAgfHwgKGNhdGMtPnR4X3B0ciA+PSAoKFRYX01BWF9CVVJTVCAtIDEpICogKFBLVF9TWiArIDIpKSkpCisJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhdGMtPnR4X2xvY2ssIGZsYWdzKTsKKworCWNhdGMtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWNhdGMtPnN0YXRzLnR4X3BhY2tldHMrKzsKKworCWRldl9rZnJlZV9za2Ioc2tiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjYXRjX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgY2F0YyAqY2F0YyA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwl3YXJuKCJUcmFuc21pdCB0aW1lZCBvdXQuIik7CisJY2F0Yy0+dHhfdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfQVNZTkNfVU5MSU5LOworCXVzYl91bmxpbmtfdXJiKGNhdGMtPnR4X3VyYik7Cit9CisKKy8qCisgKiBDb250cm9sIG1lc3NhZ2VzLgorICovCisKK3N0YXRpYyBpbnQgY2F0Y19jdHJsX21zZyhzdHJ1Y3QgY2F0YyAqY2F0YywgdTggZGlyLCB1OCByZXF1ZXN0LCB1MTYgdmFsdWUsIHUxNiBpbmRleCwgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworICAgICAgICBpbnQgcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKGNhdGMtPnVzYmRldiwKKwkJZGlyID8gdXNiX3JjdmN0cmxwaXBlKGNhdGMtPnVzYmRldiwgMCkgOiB1c2Jfc25kY3RybHBpcGUoY2F0Yy0+dXNiZGV2LCAwKSwKKwkJIHJlcXVlc3QsIDB4NDAgfCBkaXIsIHZhbHVlLCBpbmRleCwgYnVmLCBsZW4sIDEwMDApOworICAgICAgICByZXR1cm4gcmV0dmFsIDwgMCA/IHJldHZhbCA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIGNhdGNfY3RybF9ydW4oc3RydWN0IGNhdGMgKmNhdGMpCit7CisJc3RydWN0IGN0cmxfcXVldWUgKnEgPSBjYXRjLT5jdHJsX3F1ZXVlICsgY2F0Yy0+Y3RybF90YWlsOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBjYXRjLT51c2JkZXY7CisJc3RydWN0IHVyYiAqdXJiID0gY2F0Yy0+Y3RybF91cmI7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqZHIgPSAmY2F0Yy0+Y3RybF9kcjsKKwlpbnQgc3RhdHVzOworCisJZHItPmJSZXF1ZXN0ID0gcS0+cmVxdWVzdDsKKwlkci0+YlJlcXVlc3RUeXBlID0gMHg0MCB8IHEtPmRpcjsKKwlkci0+d1ZhbHVlID0gY3B1X3RvX2xlMTYocS0+dmFsdWUpOworCWRyLT53SW5kZXggPSBjcHVfdG9fbGUxNihxLT5pbmRleCk7CisJZHItPndMZW5ndGggPSBjcHVfdG9fbGUxNihxLT5sZW4pOworCisgICAgICAgIHVyYi0+cGlwZSA9IHEtPmRpciA/IHVzYl9yY3ZjdHJscGlwZSh1c2JkZXYsIDApIDogdXNiX3NuZGN0cmxwaXBlKHVzYmRldiwgMCk7CisJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gcS0+bGVuOworCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gY2F0Yy0+Y3RybF9idWY7CisJdXJiLT5zZXR1cF9wYWNrZXQgPSAodm9pZCAqKSBkcjsKKwl1cmItPmRldiA9IHVzYmRldjsKKworCWlmICghcS0+ZGlyICYmIHEtPmJ1ZiAmJiBxLT5sZW4pCisJCW1lbWNweShjYXRjLT5jdHJsX2J1ZiwgcS0+YnVmLCBxLT5sZW4pOworCisJaWYgKChzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihjYXRjLT5jdHJsX3VyYiwgR0ZQX0tFUk5FTCkpKQorCQllcnIoInN1Ym1pdChjdHJsX3VyYikgc3RhdHVzICVkIiwgc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgY2F0Y19jdHJsX2RvbmUoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgY2F0YyAqY2F0YyA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgY3RybF9xdWV1ZSAqcTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHVyYi0+c3RhdHVzKQorCQlkYmcoImN0cmxfZG9uZSwgc3RhdHVzICVkLCBsZW4gJWQuIiwgdXJiLT5zdGF0dXMsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2F0Yy0+Y3RybF9sb2NrLCBmbGFncyk7CisKKwlxID0gY2F0Yy0+Y3RybF9xdWV1ZSArIGNhdGMtPmN0cmxfdGFpbDsKKworCWlmIChxLT5kaXIpIHsKKwkJaWYgKHEtPmJ1ZiAmJiBxLT5sZW4pCisJCQltZW1jcHkocS0+YnVmLCBjYXRjLT5jdHJsX2J1ZiwgcS0+bGVuKTsKKwkJZWxzZQorCQkJcS0+YnVmID0gY2F0Yy0+Y3RybF9idWY7CisJfQorCisJaWYgKHEtPmNhbGxiYWNrKQorCQlxLT5jYWxsYmFjayhjYXRjLCBxKTsKKworCWNhdGMtPmN0cmxfdGFpbCA9IChjYXRjLT5jdHJsX3RhaWwgKyAxKSAmIChDVFJMX1FVRVVFIC0gMSk7CisKKwlpZiAoY2F0Yy0+Y3RybF9oZWFkICE9IGNhdGMtPmN0cmxfdGFpbCkKKwkJY2F0Y19jdHJsX3J1bihjYXRjKTsKKwllbHNlCisJCWNsZWFyX2JpdChDVFJMX1JVTk5JTkcsICZjYXRjLT5mbGFncyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXRjLT5jdHJsX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBjYXRjX2N0cmxfYXN5bmMoc3RydWN0IGNhdGMgKmNhdGMsIHU4IGRpciwgdTggcmVxdWVzdCwgdTE2IHZhbHVlLAorCXUxNiBpbmRleCwgdm9pZCAqYnVmLCBpbnQgbGVuLCB2b2lkICgqY2FsbGJhY2spKHN0cnVjdCBjYXRjICpjYXRjLCBzdHJ1Y3QgY3RybF9xdWV1ZSAqcSkpCit7CisJc3RydWN0IGN0cmxfcXVldWUgKnE7CisJaW50IHJldHZhbCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXRjLT5jdHJsX2xvY2ssIGZsYWdzKTsKKwkKKwlxID0gY2F0Yy0+Y3RybF9xdWV1ZSArIGNhdGMtPmN0cmxfaGVhZDsKKworCXEtPmRpciA9IGRpcjsKKwlxLT5yZXF1ZXN0ID0gcmVxdWVzdDsKKwlxLT52YWx1ZSA9IHZhbHVlOworCXEtPmluZGV4ID0gaW5kZXg7CisJcS0+YnVmID0gYnVmOworCXEtPmxlbiA9IGxlbjsKKwlxLT5jYWxsYmFjayA9IGNhbGxiYWNrOworCisJY2F0Yy0+Y3RybF9oZWFkID0gKGNhdGMtPmN0cmxfaGVhZCArIDEpICYgKENUUkxfUVVFVUUgLSAxKTsKKworCWlmIChjYXRjLT5jdHJsX2hlYWQgPT0gY2F0Yy0+Y3RybF90YWlsKSB7CisJCWVycigiY3RybCBxdWV1ZSBmdWxsIik7CisJCWNhdGMtPmN0cmxfdGFpbCA9IChjYXRjLT5jdHJsX3RhaWwgKyAxKSAmIChDVFJMX1FVRVVFIC0gMSk7CisJCXJldHZhbCA9IC0xOworCX0KKworCWlmICghdGVzdF9hbmRfc2V0X2JpdChDVFJMX1JVTk5JTkcsICZjYXRjLT5mbGFncykpCisJCWNhdGNfY3RybF9ydW4oY2F0Yyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXRjLT5jdHJsX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBTdGF0aXN0aWNzLgorICovCisKK3N0YXRpYyB2b2lkIGNhdGNfc3RhdHNfZG9uZShzdHJ1Y3QgY2F0YyAqY2F0Yywgc3RydWN0IGN0cmxfcXVldWUgKnEpCit7CisJaW50IGluZGV4ID0gcS0+aW5kZXggLSBFdGhTdGF0czsKKwl1MTYgZGF0YSwgbGFzdDsKKworCWNhdGMtPnN0YXRzX2J1ZltpbmRleF0gPSAqKChjaGFyICopcS0+YnVmKTsKKworCWlmIChpbmRleCAmIDEpCisJCXJldHVybjsKKworCWRhdGEgPSAoKHUxNiljYXRjLT5zdGF0c19idWZbaW5kZXhdIDw8IDgpIHwgY2F0Yy0+c3RhdHNfYnVmW2luZGV4ICsgMV07CisJbGFzdCA9IGNhdGMtPnN0YXRzX3ZhbHNbaW5kZXggPj4gMV07CisKKwlzd2l0Y2ggKGluZGV4KSB7CisJCWNhc2UgVHhTaW5nbGVDb2xsOgorCQljYXNlIFR4TXVsdGlDb2xsOgorCQkJY2F0Yy0+c3RhdHMuY29sbGlzaW9ucyArPSBkYXRhIC0gbGFzdDsKKwkJCWJyZWFrOworCQljYXNlIFR4RXhjZXNzQ29sbDoKKwkJCWNhdGMtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzICs9IGRhdGEgLSBsYXN0OworCQkJY2F0Yy0+c3RhdHMudHhfZXJyb3JzICs9IGRhdGEgLSBsYXN0OworCQkJYnJlYWs7CisJCWNhc2UgUnhGcmFtRXJyOgorCQkJY2F0Yy0+c3RhdHMucnhfZnJhbWVfZXJyb3JzICs9IGRhdGEgLSBsYXN0OworCQkJY2F0Yy0+c3RhdHMucnhfZXJyb3JzICs9IGRhdGEgLSBsYXN0OworCQkJYnJlYWs7CisJfQorCisJY2F0Yy0+c3RhdHNfdmFsc1tpbmRleCA+PiAxXSA9IGRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGNhdGNfc3RhdHNfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBjYXRjICpjYXRjID0gKHZvaWQgKikgZGF0YTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCWNhdGNfZ2V0X3JlZ19hc3luYyhjYXRjLCBFdGhTdGF0cyArIDcgLSBpLCBjYXRjX3N0YXRzX2RvbmUpOworCisJbW9kX3RpbWVyKCZjYXRjLT50aW1lciwgamlmZmllcyArIFNUQVRTX1VQREFURSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqY2F0Y19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgY2F0YyAqY2F0YyA9IG5ldGRldl9wcml2KG5ldGRldik7CisJcmV0dXJuICZjYXRjLT5zdGF0czsKK30KKworLyoKKyAqIFJlY2VpdmUgbW9kZXMuIEJyb2FkY2FzdCwgTXVsdGljYXN0LCBQcm9taXNjLgorICovCisKK3N0YXRpYyB2b2lkIGNhdGNfbXVsdGljYXN0KHVuc2lnbmVkIGNoYXIgKmFkZHIsIHU4ICptdWx0aWNhc3QpCit7CisJdTMyIGNyYzsKKworCWNyYyA9IGV0aGVyX2NyY19sZSg2LCBhZGRyKTsKKwltdWx0aWNhc3RbKGNyYyA+PiAzKSAmIDB4M2ZdIHw9IDEgPDwgKGNyYyAmIDcpOworfQorCitzdGF0aWMgdm9pZCBjYXRjX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBjYXRjICpjYXRjID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jOworCXU4IGJyb2FkY2FzdFs2XTsKKwl1OCByeCA9IFJ4RW5hYmxlIHwgUnhQb2xhcml0eSB8IFJ4TXVsdGlDYXN0OworCWludCBpOworCisJbWVtc2V0KGJyb2FkY2FzdCwgMHhmZiwgNik7CisJbWVtc2V0KGNhdGMtPm11bHRpY2FzdCwgMCwgNjQpOworCisJY2F0Y19tdWx0aWNhc3QoYnJvYWRjYXN0LCBjYXRjLT5tdWx0aWNhc3QpOworCWNhdGNfbXVsdGljYXN0KG5ldGRldi0+ZGV2X2FkZHIsIGNhdGMtPm11bHRpY2FzdCk7CisKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCW1lbXNldChjYXRjLT5tdWx0aWNhc3QsIDB4ZmYsIDY0KTsKKwkJcnggfD0gKCFjYXRjLT5pc19mNXUwMTEpID8gUnhQcm9taXNjIDogQWx0UnhQcm9taXNjOworCX0gCisKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgeworCQltZW1zZXQoY2F0Yy0+bXVsdGljYXN0LCAweGZmLCA2NCk7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMCwgbWMgPSBuZXRkZXYtPm1jX2xpc3Q7IG1jICYmIGkgPCBuZXRkZXYtPm1jX2NvdW50OyBpKyssIG1jID0gbWMtPm5leHQpIHsKKwkJCXUzMiBjcmMgPSBldGhlcl9jcmNfbGUoNiwgbWMtPmRtaV9hZGRyKTsKKwkJCWlmICghY2F0Yy0+aXNfZjV1MDExKSB7CisJCQkJY2F0Yy0+bXVsdGljYXN0WyhjcmMgPj4gMykgJiAweDNmXSB8PSAxIDw8IChjcmMgJiA3KTsKKwkJCX0gZWxzZSB7CisJCQkJY2F0Yy0+bXVsdGljYXN0WzctKGNyYyA+PiAyOSldIHw9IDEgPDwgKChjcmMgPj4gMjYpICYgNyk7CisJCQl9CisJCX0KKwl9CisJaWYgKCFjYXRjLT5pc19mNXUwMTEpIHsKKwkJY2F0Y19zZXRfcmVnX2FzeW5jKGNhdGMsIFJ4VW5pdCwgcngpOworCQljYXRjX3dyaXRlX21lbV9hc3luYyhjYXRjLCAweGZhODAsIGNhdGMtPm11bHRpY2FzdCwgNjQpOworCX0gZWxzZSB7CisJCWY1dTAxMV9tY2hhc2hfYXN5bmMoY2F0YywgY2F0Yy0+bXVsdGljYXN0KTsKKwkJaWYgKGNhdGMtPnJ4bW9kZVswXSAhPSByeCkgeworCQkJY2F0Yy0+cnhtb2RlWzBdID0gcng7CisJCQlkYmcoIlNldHRpbmcgUlggbW9kZSB0byAlMi4yWCAlMi4yWCIsIGNhdGMtPnJ4bW9kZVswXSwgY2F0Yy0+cnhtb2RlWzFdKTsKKwkJCWY1dTAxMV9yeG1vZGVfYXN5bmMoY2F0YywgY2F0Yy0+cnhtb2RlKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgY2F0Y19nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQoreworCXN0cnVjdCBjYXRjICpjYXRjID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJuY3B5KGluZm8tPmRyaXZlciwgZHJpdmVyX25hbWUsIEVUSFRPT0xfQlVTSU5GT19MRU4pOworCXN0cm5jcHkoaW5mby0+dmVyc2lvbiwgRFJJVkVSX1ZFUlNJT04sIEVUSFRPT0xfQlVTSU5GT19MRU4pOworCXVzYl9tYWtlX3BhdGggKGNhdGMtPnVzYmRldiwgaW5mby0+YnVzX2luZm8sIHNpemVvZiBpbmZvLT5idXNfaW5mbyk7Cit9CisKK3N0YXRpYyBpbnQgY2F0Y19nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IGNhdGMgKmNhdGMgPSBuZXRkZXZfcHJpdihkZXYpOworCWlmICghY2F0Yy0+aXNfZjV1MDExKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwljbWQtPnN1cHBvcnRlZCA9IFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfCBTVVBQT1JURURfVFA7CisJY21kLT5hZHZlcnRpc2luZyA9IEFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwgQURWRVJUSVNFRF9UUDsKKwljbWQtPnNwZWVkID0gU1BFRURfMTA7CisJY21kLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKKwljbWQtPnBvcnQgPSBQT1JUX1RQOyAKKwljbWQtPnBoeV9hZGRyZXNzID0gMDsKKwljbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKKwljbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CisJY21kLT5tYXh0eHBrdCA9IDE7CisJY21kLT5tYXhyeHBrdCA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0geworCS5nZXRfZHJ2aW5mbyA9IGNhdGNfZ2V0X2RydmluZm8sCisJLmdldF9zZXR0aW5ncyA9IGNhdGNfZ2V0X3NldHRpbmdzLAorCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmsKK307CisKKy8qCisgKiBPcGVuLCBjbG9zZS4KKyAqLworCitzdGF0aWMgaW50IGNhdGNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBjYXRjICpjYXRjID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgc3RhdHVzOworCisJY2F0Yy0+aXJxX3VyYi0+ZGV2ID0gY2F0Yy0+dXNiZGV2OworCWlmICgoc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIoY2F0Yy0+aXJxX3VyYiwgR0ZQX0tFUk5FTCkpIDwgMCkgeworCQllcnIoInN1Ym1pdChpcnFfdXJiKSBzdGF0dXMgJWQiLCBzdGF0dXMpOworCQlyZXR1cm4gLTE7CisJfQorCisJbmV0aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKKworCWlmICghY2F0Yy0+aXNfZjV1MDExKQorCQltb2RfdGltZXIoJmNhdGMtPnRpbWVyLCBqaWZmaWVzICsgU1RBVFNfVVBEQVRFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNhdGNfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBjYXRjICpjYXRjID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKworCWlmICghY2F0Yy0+aXNfZjV1MDExKQorCQlkZWxfdGltZXJfc3luYygmY2F0Yy0+dGltZXIpOworCisJdXNiX2tpbGxfdXJiKGNhdGMtPnJ4X3VyYik7CisJdXNiX2tpbGxfdXJiKGNhdGMtPnR4X3VyYik7CisJdXNiX2tpbGxfdXJiKGNhdGMtPmlycV91cmIpOworCXVzYl9raWxsX3VyYihjYXRjLT5jdHJsX3VyYik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFVTQiBwcm9iZSwgZGlzY29ubmVjdC4KKyAqLworCitzdGF0aWMgaW50IGNhdGNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBjYXRjICpjYXRjOworCXU4IGJyb2FkY2FzdFs2XTsKKwlpbnQgaSwgcGt0c3o7CisKKwlpZiAodXNiX3NldF9pbnRlcmZhY2UodXNiZGV2LAorCQkJaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCAxKSkgeworICAgICAgICAgICAgICAgIGVycigiQ2FuJ3Qgc2V0IGFsdHNldHRpbmcgMS4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBjYXRjKSk7CisJaWYgKCFuZXRkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJY2F0YyA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwluZXRkZXYtPm9wZW4gPSBjYXRjX29wZW47CisJbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBjYXRjX2hhcmRfc3RhcnRfeG1pdDsKKwluZXRkZXYtPnN0b3AgPSBjYXRjX3N0b3A7CisJbmV0ZGV2LT5nZXRfc3RhdHMgPSBjYXRjX2dldF9zdGF0czsKKwluZXRkZXYtPnR4X3RpbWVvdXQgPSBjYXRjX3R4X3RpbWVvdXQ7CisJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CisJbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBjYXRjX3NldF9tdWx0aWNhc3RfbGlzdDsKKwlTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LCAmb3BzKTsKKworCWNhdGMtPnVzYmRldiA9IHVzYmRldjsKKwljYXRjLT5uZXRkZXYgPSBuZXRkZXY7CisKKwlzcGluX2xvY2tfaW5pdCgmY2F0Yy0+dHhfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmNhdGMtPmN0cmxfbG9jayk7CisKKwlpbml0X3RpbWVyKCZjYXRjLT50aW1lcik7CisJY2F0Yy0+dGltZXIuZGF0YSA9IChsb25nKSBjYXRjOworCWNhdGMtPnRpbWVyLmZ1bmN0aW9uID0gY2F0Y19zdGF0c190aW1lcjsKKworCWNhdGMtPmN0cmxfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwljYXRjLT50eF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWNhdGMtPnJ4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJY2F0Yy0+aXJxX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCghY2F0Yy0+Y3RybF91cmIpIHx8ICghY2F0Yy0+dHhfdXJiKSB8fCAKKwkgICAgKCFjYXRjLT5yeF91cmIpIHx8ICghY2F0Yy0+aXJxX3VyYikpIHsKKwkJZXJyKCJObyBmcmVlIHVyYnMgYXZhaWxhYmxlLiIpOworCQlpZiAoY2F0Yy0+Y3RybF91cmIpCisJCQl1c2JfZnJlZV91cmIoY2F0Yy0+Y3RybF91cmIpOworCQlpZiAoY2F0Yy0+dHhfdXJiKQorCQkJdXNiX2ZyZWVfdXJiKGNhdGMtPnR4X3VyYik7CisJCWlmIChjYXRjLT5yeF91cmIpCisJCQl1c2JfZnJlZV91cmIoY2F0Yy0+cnhfdXJiKTsKKwkJaWYgKGNhdGMtPmlycV91cmIpCisJCQl1c2JfZnJlZV91cmIoY2F0Yy0+aXJxX3VyYik7CisJCWZyZWVfbmV0ZGV2KG5ldGRldik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIFRoZSBGNVUwMTEgaGFzIHRoZSBzYW1lIHZlbmRvci9wcm9kdWN0IGFzIHRoZSBuZXRtYXRlIGJ1dCBhIGRldmljZSB2ZXJzaW9uIG9mIDB4MTMwICovCisJaWYgKGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gMHgwNDIzICYmIAorCSAgICBsZTE2X3RvX2NwdSh1c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSAweGEgJiYKKwkgICAgbGUxNl90b19jcHUoY2F0Yy0+dXNiZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkgPT0gMHgwMTMwKSB7CisJCWRiZygiVGVzdGluZyBmb3IgZjV1MDExIik7CisJCWNhdGMtPmlzX2Y1dTAxMSA9IDE7CQkKKwkJYXRvbWljX3NldCgmY2F0Yy0+cmVjcV9zeiwgMCk7CisJCXBrdHN6ID0gUlhfUEtUX1NaOworCX0gZWxzZSB7CisJCXBrdHN6ID0gUlhfTUFYX0JVUlNUICogKFBLVF9TWiArIDIpOworCX0KKwkKKwl1c2JfZmlsbF9jb250cm9sX3VyYihjYXRjLT5jdHJsX3VyYiwgdXNiZGV2LCB1c2Jfc25kY3RybHBpcGUodXNiZGV2LCAwKSwKKwkJTlVMTCwgTlVMTCwgMCwgY2F0Y19jdHJsX2RvbmUsIGNhdGMpOworCisJdXNiX2ZpbGxfYnVsa191cmIoY2F0Yy0+dHhfdXJiLCB1c2JkZXYsIHVzYl9zbmRidWxrcGlwZSh1c2JkZXYsIDEpLAorCQlOVUxMLCAwLCBjYXRjX3R4X2RvbmUsIGNhdGMpOworCisJdXNiX2ZpbGxfYnVsa191cmIoY2F0Yy0+cnhfdXJiLCB1c2JkZXYsIHVzYl9yY3ZidWxrcGlwZSh1c2JkZXYsIDEpLAorCQljYXRjLT5yeF9idWYsIHBrdHN6LCBjYXRjX3J4X2RvbmUsIGNhdGMpOworCisJdXNiX2ZpbGxfaW50X3VyYihjYXRjLT5pcnFfdXJiLCB1c2JkZXYsIHVzYl9yY3ZpbnRwaXBlKHVzYmRldiwgMiksCisgICAgICAgICAgICAgICAgY2F0Yy0+aXJxX2J1ZiwgMiwgY2F0Y19pcnFfZG9uZSwgY2F0YywgMSk7CisKKwlpZiAoIWNhdGMtPmlzX2Y1dTAxMSkgeworCQlkYmcoIkNoZWNraW5nIG1lbW9yeSBzaXplXG4iKTsKKworCQlpID0gMHgxMjM0NTY3ODsKKwkJY2F0Y193cml0ZV9tZW0oY2F0YywgMHg3YTgwLCAmaSwgNCk7CisJCWkgPSAweDg3NjU0MzIxOwkKKwkJY2F0Y193cml0ZV9tZW0oY2F0YywgMHhmYTgwLCAmaSwgNCk7CisJCWNhdGNfcmVhZF9tZW0oY2F0YywgMHg3YTgwLCAmaSwgNCk7CisJICAKKwkJc3dpdGNoIChpKSB7CisJCWNhc2UgMHgxMjM0NTY3ODoKKwkJCWNhdGNfc2V0X3JlZyhjYXRjLCBUeEJ1ZkNvdW50LCA4KTsKKwkJCWNhdGNfc2V0X3JlZyhjYXRjLCBSeEJ1ZkNvdW50LCAzMik7CisJCQlkYmcoIjY0ayBNZW1vcnlcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl3YXJuKCJDb3VsZG4ndCBkZXRlY3QgbWVtb3J5IHNpemUsIGFzc3VtaW5nIDMyayIpOworCQljYXNlIDB4ODc2NTQzMjE6CisJCQljYXRjX3NldF9yZWcoY2F0YywgVHhCdWZDb3VudCwgNCk7CisJCQljYXRjX3NldF9yZWcoY2F0YywgUnhCdWZDb3VudCwgMTYpOworCQkJZGJnKCIzMmsgTWVtb3J5XG4iKTsKKwkJCWJyZWFrOworCQl9CisJICAKKwkJZGJnKCJHZXR0aW5nIE1BQyBmcm9tIFNFRVJPTS4iKTsKKwkgIAorCQljYXRjX2dldF9tYWMoY2F0YywgbmV0ZGV2LT5kZXZfYWRkcik7CisJCQorCQlkYmcoIlNldHRpbmcgTUFDIGludG8gcmVnaXN0ZXJzLiIpOworCSAgCisJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCQljYXRjX3NldF9yZWcoY2F0YywgU3RhdGlvbkFkZHIwIC0gaSwgbmV0ZGV2LT5kZXZfYWRkcltpXSk7CisJCQorCQlkYmcoIkZpbGxpbmcgdGhlIG11bHRpY2FzdCBsaXN0LiIpOworCSAgCisJCW1lbXNldChicm9hZGNhc3QsIDB4ZmYsIDYpOworCQljYXRjX211bHRpY2FzdChicm9hZGNhc3QsIGNhdGMtPm11bHRpY2FzdCk7CisJCWNhdGNfbXVsdGljYXN0KG5ldGRldi0+ZGV2X2FkZHIsIGNhdGMtPm11bHRpY2FzdCk7CisJCWNhdGNfd3JpdGVfbWVtKGNhdGMsIDB4ZmE4MCwgY2F0Yy0+bXVsdGljYXN0LCA2NCk7CisJCQorCQlkYmcoIkNsZWFyaW5nIGVycm9yIGNvdW50ZXJzLiIpOworCQkKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCWNhdGNfc2V0X3JlZyhjYXRjLCBFdGhTdGF0cyArIGksIDApOworCQljYXRjLT5sYXN0X3N0YXRzID0gamlmZmllczsKKwkJCisJCWRiZygiRW5hYmxpbmcuIik7CisJCQorCQljYXRjX3NldF9yZWcoY2F0YywgTWF4QnVyc3QsIFJYX01BWF9CVVJTVCk7CisJCWNhdGNfc2V0X3JlZyhjYXRjLCBPcE1vZGVzLCBPcFR4TWVyZ2UgfCBPcFJ4TWVyZ2UgfCBPcExlbkluY2x1ZGUgfCBPcDNNZW1XYWl0cyk7CisJCWNhdGNfc2V0X3JlZyhjYXRjLCBMRURDdHJsLCBMRURMaW5rKTsKKwkJY2F0Y19zZXRfcmVnKGNhdGMsIFJ4VW5pdCwgUnhFbmFibGUgfCBSeFBvbGFyaXR5IHwgUnhNdWx0aUNhc3QpOworCX0gZWxzZSB7CisJCWRiZygiUGVyZm9ybWluZyByZXNldFxuIik7CisJCWNhdGNfcmVzZXQoY2F0Yyk7CisJCWNhdGNfZ2V0X21hYyhjYXRjLCBuZXRkZXYtPmRldl9hZGRyKTsKKwkJCisJCWRiZygiU2V0dGluZyBSWCBNb2RlIik7CisJCWNhdGMtPnJ4bW9kZVswXSA9IFJ4RW5hYmxlIHwgUnhQb2xhcml0eSB8IFJ4TXVsdGlDYXN0OworCQljYXRjLT5yeG1vZGVbMV0gPSAwOworCQlmNXUwMTFfcnhtb2RlKGNhdGMsIGNhdGMtPnJ4bW9kZSk7CisJfQorCWRiZygiSW5pdCBkb25lLiIpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBVU0IgRXRoZXJuZXQgYXQgdXNiLSVzLSVzLCAiLAorCSAgICAgICBuZXRkZXYtPm5hbWUsIChjYXRjLT5pc19mNXUwMTEpID8gIkJlbGtpbiBGNVUwMTEiIDogIkNBVEMgRUwxMjEwQSBOZXRNYXRlIiwKKwkgICAgICAgdXNiZGV2LT5idXMtPmJ1c19uYW1lLCB1c2JkZXYtPmRldnBhdGgpOworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHByaW50aygiJTIuMng6IiwgbmV0ZGV2LT5kZXZfYWRkcltpXSk7CisJcHJpbnRrKCIlMi4yeC5cbiIsIG5ldGRldi0+ZGV2X2FkZHJbaV0pOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2F0Yyk7CisKKwlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZpbnRmLT5kZXYpOworCWlmIChyZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KSAhPSAwKSB7CisJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJCXVzYl9mcmVlX3VyYihjYXRjLT5jdHJsX3VyYik7CisJCXVzYl9mcmVlX3VyYihjYXRjLT50eF91cmIpOworCQl1c2JfZnJlZV91cmIoY2F0Yy0+cnhfdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGNhdGMtPmlycV91cmIpOworCQlmcmVlX25ldGRldihuZXRkZXYpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNhdGNfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgY2F0YyAqY2F0YyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCWlmIChjYXRjKSB7CisJCXVucmVnaXN0ZXJfbmV0ZGV2KGNhdGMtPm5ldGRldik7CisJCXVzYl9mcmVlX3VyYihjYXRjLT5jdHJsX3VyYik7CisJCXVzYl9mcmVlX3VyYihjYXRjLT50eF91cmIpOworCQl1c2JfZnJlZV91cmIoY2F0Yy0+cnhfdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGNhdGMtPmlycV91cmIpOworCQlmcmVlX25ldGRldihjYXRjLT5uZXRkZXYpOworCX0KK30KKworLyoKKyAqIE1vZHVsZSBmdW5jdGlvbnMgYW5kIHRhYmxlcy4KKyAqLworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgY2F0Y19pZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoMHgwNDIzLCAweGEpIH0sCS8qIENBVEMgTmV0bWF0ZSwgQmVsa2luIEY1VTAxMSAqLworCXsgVVNCX0RFVklDRSgweDA0MjMsIDB4YykgfSwJLyogQ0FUQyBOZXRtYXRlIElJLCBCZWxraW4gRjVVMTExICovCisJeyBVU0JfREVWSUNFKDB4MDhkMSwgMHgxKSB9LAkvKiBzbWFydEJyaWRnZXMgc21hcnROSUMgKi8KKwl7IH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBjYXRjX2lkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGNhdGNfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCWRyaXZlcl9uYW1lLAorCS5wcm9iZSA9CWNhdGNfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQljYXRjX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JY2F0Y19pZF90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGNhdGNfaW5pdCh2b2lkKQoreworCWludCByZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmNhdGNfZHJpdmVyKTsKKwlpZiAocmVzdWx0ID09IDApCisJCWluZm8oRFJJVkVSX1ZFUlNJT04gIiAiIERSSVZFUl9ERVNDKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY2F0Y19leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmNhdGNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY2F0Y19pbml0KTsKK21vZHVsZV9leGl0KGNhdGNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQva2F3ZXRoLmMgYi9kcml2ZXJzL3VzYi9uZXQva2F3ZXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlhN2NmNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL25ldC9rYXdldGguYwpAQCAtMCwwICsxLDEyNzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICAgIGthd2V0aC5jIC0gZHJpdmVyIGZvciBLTDVLVVNCMTAxIGJhc2VkIFVTQi0+RXRoZXJuZXQKKyAqCisgKiAgICAgKGMpIDIwMDAgSW50ZXJsYW4gQ29tbXVuaWNhdGlvbnMKKyAqICAgICAoYykgMjAwMCBTdGVwaGFuZSBBbG5ldAorICogICAgIChDKSAyMDAxIEJyYWQgSGFyZHMKKyAqICAgICAoQykgMjAwMiBPbGl2ZXIgTmV1a3VtCisgKgorICogICAgIE9yaWdpbmFsIGF1dGhvcjogVGhlIFphcG1hbiA8emFwbWFuQGludGVybGFuLm5ldD4KKyAqICAgICBJbnNwaXJlZCBieSwgYW5kIG11Y2ggY3JlZGl0IGdvZXMgdG8gTWljaGFlbCBSb3Rod2VsbAorICogICAgIDxyb3Rod2VsbEBpbnRlcmxhbi5uZXQ+IGZvciB0aGUgdGVzdCBlcXVpcG1lbnQsIGhlbHAsIGFuZCBwYXRpZW5jZQorICogICAgIEJhc2VkIG9mZiBvZiAoYW5kIHdpdGggdGhhbmtzIHRvKSBQZXRrbyBNYW5vbG92J3MgcGVnYXVzLmMgZHJpdmVyLgorICogICAgIEFsc28gbWFueSB0aGFua3MgdG8gSm9lbCBTaWx2ZXJtYW4gYW5kIEVkIFN1cnByZW5hbnQgYXQgS2F3YXNha2kKKyAqICAgICBmb3IgcHJvdmlkaW5nIHRoZSBmaXJtd2FyZSBhbmQgZHJpdmVyIHJlc291cmNlcy4KKyAqCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yCisgKiAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRPRE86CisgKiBGaXggaW5faW50ZXJydXB0KCkgcHJvYmxlbQorICogRGV2ZWxvcCB0ZXN0IHByb2NlZHVyZXMgZm9yIFVTQiBuZXQgaW50ZXJmYWNlcworICogUnVuIHRlc3QgcHJvY2VkdXJlcworICogRml4IGJ1Z3MgZnJvbSBwcmV2aW91cyB0d28gc3RlcHMKKyAqIFNub29wIG90aGVyIE9TcyBmb3IgYW55IHRyaWNrcyB3ZSdyZSBub3QgZG9pbmcKKyAqIFNNUCBsb2NraW5nCisgKiBSZWR1Y2UgYXJiaXRyYXJ5IHRpbWVvdXRzCisgKiBTbWFydCBtdWx0aWNhc3Qgc3VwcG9ydAorICogVGVtcG9yYXJ5IE1BQyBjaGFuZ2Ugc3VwcG9ydAorICogVHVuYWJsZSBTT0ZzIHBhcmFtZXRlciAtIGlvY3RsKCk/CisgKiBFdGhlcm5ldCBzdGF0cyBjb2xsZWN0aW9uCisgKiBDb2RlIGZvcm1hdHRpbmcgaW1wcm92ZW1lbnRzCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjdW5kZWYgREVCVUcKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIGthd2V0aF9kYmcoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fICI6ICIgZm9ybWF0ICJcbiIgLCMjYXJnKQorI2Vsc2UKKyNkZWZpbmUga2F3ZXRoX2RiZyhmb3JtYXQsIGFyZy4uLikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKyNkZWZpbmUga2F3ZXRoX2Vycihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fRVJSIF9fRklMRV9fICI6ICIgZm9ybWF0ICJcbiIgLCMjYXJnKQorI2RlZmluZSBrYXdldGhfaW5mbyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fSU5GTyBfX0ZJTEVfXyAiOiAiIGZvcm1hdCAiXG4iICwgIyNhcmcpCisjZGVmaW5lIGthd2V0aF93YXJuKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HIF9fRklMRV9fICI6ICIgZm9ybWF0ICJcbiIgLCAjI2FyZykKKworCisjaW5jbHVkZSAia2F3ZXRoZncuaCIKKworI2RlZmluZSBLQVdFVEhfTVRVCQkJMTUxNAorI2RlZmluZSBLQVdFVEhfQlVGX1NJWkUJCQkxNjY0CisjZGVmaW5lIEtBV0VUSF9UWF9USU1FT1VUCQkoNSAqIEhaKQorI2RlZmluZSBLQVdFVEhfU0NSQVRDSF9TSVpFCQkzMgorI2RlZmluZSBLQVdFVEhfRklSTVdBUkVfQlVGX1NJWkUJNDA5NgorI2RlZmluZSBLQVdFVEhfQ09OVFJPTF9USU1FT1VUCQkoMzAgKiBIWikKKworI2RlZmluZSBLQVdFVEhfU1RBVFVTX0JST0tFTgkJMHgwMDAwMDAxCisjZGVmaW5lIEtBV0VUSF9TVEFUVVNfQ0xPU0lORwkJMHgwMDAwMDAyCisKKyNkZWZpbmUgS0FXRVRIX1BBQ0tFVF9GSUxURVJfUFJPTUlTQ1VPVVMJMHgwMQorI2RlZmluZSBLQVdFVEhfUEFDS0VUX0ZJTFRFUl9BTExfTVVMVElDQVNUCTB4MDIKKyNkZWZpbmUgS0FXRVRIX1BBQ0tFVF9GSUxURVJfRElSRUNURUQJCTB4MDQKKyNkZWZpbmUgS0FXRVRIX1BBQ0tFVF9GSUxURVJfQlJPQURDQVNUCQkweDA4CisjZGVmaW5lIEtBV0VUSF9QQUNLRVRfRklMVEVSX01VTFRJQ0FTVAkJMHgxMAorCisvKiBUYWJsZSA3ICovCisjZGVmaW5lIEtBV0VUSF9DT01NQU5EX0dFVF9FVEhFUk5FVF9ERVNDCTB4MDAKKyNkZWZpbmUgS0FXRVRIX0NPTU1BTkRfTVVMVElDQVNUX0ZJTFRFUlMgICAgICAgIDB4MDEKKyNkZWZpbmUgS0FXRVRIX0NPTU1BTkRfU0VUX1BBQ0tFVF9GSUxURVIJMHgwMgorI2RlZmluZSBLQVdFVEhfQ09NTUFORF9TVEFUSVNUSUNTICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBLQVdFVEhfQ09NTUFORF9TRVRfVEVNUF9NQUMgICAgIAkweDA2CisjZGVmaW5lIEtBV0VUSF9DT01NQU5EX0dFVF9URU1QX01BQyAgICAgICAgICAgICAweDA3CisjZGVmaW5lIEtBV0VUSF9DT01NQU5EX1NFVF9VUkJfU0laRQkJMHgwOAorI2RlZmluZSBLQVdFVEhfQ09NTUFORF9TRVRfU09GU19XQUlUCQkweDA5CisjZGVmaW5lIEtBV0VUSF9DT01NQU5EX1NDQU4JCQkweEZGCisKKyNkZWZpbmUgS0FXRVRIX1NPRlNfVE9fV0FJVAkJCTB4MDUKKworI2RlZmluZSBJTlRCVUZGRVJTSVpFCQkJCTQKKworI2RlZmluZSBTVEFURV9PRkZTRVQJCQkJMAorI2RlZmluZSBTVEFURV9NQVNLCQkJCTB4NDAKKyNkZWZpbmUJU1RBVEVfU0hJRlQJCQkJNQorCisKK01PRFVMRV9BVVRIT1IoIk1pY2hhZWwgWmFwcGUgPHphcG1hbkBpbnRlcmxhbi5uZXQ+LCBTdGVwaGFuZSBBbG5ldCA8c3RlcGhhbmVAdS1waWNhcmRpZS5mcj4sIEJyYWQgSGFyZHMgPGJoYXJkc0BiaWdwb25kLm5ldC5hdT4gYW5kIE9saXZlciBOZXVrdW0gPG9saXZlckBuZXVrdW0ub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJLTDVVU0IxMDEgVVNCIEV0aGVybmV0IGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfbmFtZVtdID0gImthd2V0aCI7CisKK3N0YXRpYyBpbnQga2F3ZXRoX3Byb2JlKAorCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkCS8qIGZyb20gaWRfdGFibGUgKi8KKwkpOworc3RhdGljIHZvaWQga2F3ZXRoX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworc3RhdGljIGludCBrYXdldGhfaW50ZXJuYWxfY29udHJvbF9tc2coc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBwaXBlLAorCQkJCSAgICAgICBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjbWQsIHZvaWQgKmRhdGEsCisJCQkJICAgICAgIGludCBsZW4sIGludCB0aW1lb3V0KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICB1c2JfZGV2aWNlX2lkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2Jfa2xzaV90YWJsZVtdID0geworCXsgVVNCX0RFVklDRSgweDAzZTgsIDB4MDAwOCkgfSwgLyogQU9YIEVuZHBvaW50cyBVU0IgRXRoZXJuZXQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDA5MDEpIH0sIC8qIEktTyBEQVRBIFVTQi1FVC9UICovCisJeyBVU0JfREVWSUNFKDB4MDUwNiwgMHgwM2U4KSB9LCAvKiAzQ29tIDNDMTkyNTAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTA2LCAweDExZjgpIH0sIC8qIDNDb20gM0M0NjAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTU3LCAweDIwMDIpIH0sIC8qIEFURU4gVVNCIEV0aGVybmV0ICovCisJeyBVU0JfREVWSUNFKDB4MDU1NywgMHg0MDAwKSB9LCAvKiBELUxpbmsgRFNCLTY1MEMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTY1LCAweDAwMDIpIH0sIC8qIFBlcmFjb20gRW5ldCAqLworCXsgVVNCX0RFVklDRSgweDA1NjUsIDB4MDAwMykgfSwgLyogT3B0dXNASG9tZSBVRVAxMDQ1QSAqLworCXsgVVNCX0RFVklDRSgweDA1NjUsIDB4MDAwNSkgfSwgLyogUGVyYWNvbSBFbmV0MiAqLworCXsgVVNCX0RFVklDRSgweDA1ZTksIDB4MDAwOCkgfSwgLyogS0xTSSBLTDVLVVNCMTAxQiAqLworCXsgVVNCX0RFVklDRSgweDA1ZTksIDB4MDAwOSkgfSwgLyogS0xTSSBLTDVLVVNCMTAxQiAoQm9hcmQgY2hhbmdlKSAqLworCXsgVVNCX0RFVklDRSgweDA2NmIsIDB4MjIwMikgfSwgLyogTGlua3N5cyBVU0IxMFQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNmUxLCAweDAwMDgpIH0sIC8qIEFEUyBVU0ItMTBCVCAqLworCXsgVVNCX0RFVklDRSgweDA2ZTEsIDB4MDAwOSkgfSwgLyogQURTIFVTQi0xMEJUICovCisJeyBVU0JfREVWSUNFKDB4MDcwNywgMHgwMTAwKSB9LCAvKiBTTUMgMjIwMlVTQiAqLworCXsgVVNCX0RFVklDRSgweDA3YWEsIDB4MDAwMSkgfSwgLyogQ29ycmVnYSBLLksuICovCisJeyBVU0JfREVWSUNFKDB4MDdiOCwgMHg0MDAwKSB9LCAvKiBELUxpbmsgRFUtRTEwICovCisJeyBVU0JfREVWSUNFKDB4MDg0NiwgMHgxMDAxKSB9LCAvKiBOZXRHZWFyIEVBLTEwMSAqLworCXsgVVNCX0RFVklDRSgweDA4NDYsIDB4MTAwMikgfSwgLyogTmV0R2VhciBFQS0xMDEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwODVhLCAweDAwMDgpIH0sIC8qIFBvcnRHZWFyIEV0aGVybmV0IEFkYXB0ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwODVhLCAweDAwMDkpIH0sIC8qIFBvcnRHZWFyIEV0aGVybmV0IEFkYXB0ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwODdkLCAweDU3MDQpIH0sIC8qIEphdG9uIFVTQiBFdGhlcm5ldCBEZXZpY2UgQWRhcHRlciAqLworCXsgVVNCX0RFVklDRSgweDA5NTEsIDB4MDAwOCkgfSwgLyogS2luZ3N0b24gVGVjaG5vbG9neSBVU0IgRXRoZXJuZXQgQWRhcHRlciAqLworCXsgVVNCX0RFVklDRSgweDA5NWEsIDB4MzAwMykgfSwgLyogUG9ydHNtaXRoIEV4cHJlc3MgRXRoZXJuZXQgQWRhcHRlciAqLworCXsgVVNCX0RFVklDRSgweDEwYmQsIDB4MTQyNykgfSwgLyogQVNBTlRFIFVTQiBUbyBFdGhlcm5ldCBBZGFwdGVyICovCisJeyBVU0JfREVWSUNFKDB4MTM0MiwgMHgwMjA0KSB9LCAvKiBNb2JpbGl0eSBVU0ItRXRoZXJuZXQgQWRhcHRlciAqLworCXsgVVNCX0RFVklDRSgweDEzZDIsIDB4MDQwMCkgfSwgLyogU2hhcmsgUG9ja2V0IEFkYXB0ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNDg1LCAweDAwMDEpIH0sCS8qIFNpbGljb20gVTJFICovCisJeyBVU0JfREVWSUNFKDB4MTQ4NSwgMHgwMDAyKSB9LCAvKiBQc2lvbiBEYWNvbSBHb2xkIFBvcnQgRXRoZXJuZXQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNjQ1LCAweDAwMDUpIH0sIC8qIEVudHJlZ2EgRTQ1ICovCisJeyBVU0JfREVWSUNFKDB4MTY0NSwgMHgwMDA4KSB9LCAvKiBFbnRyZWdhIFVTQiBFdGhlcm5ldCBBZGFwdGVyICovCisJeyBVU0JfREVWSUNFKDB4MTY0NSwgMHg4MDA1KSB9LCAvKiBQb3J0R2VhciBFdGhlcm5ldCBBZGFwdGVyICovCisJeyBVU0JfREVWSUNFKDB4MjAwMSwgMHg0MDAwKSB9LCAvKiBELWxpbmsgRFNCLTY1MEMgKi8KKwl7fSAvKiBOdWxsIHRlcm1pbmF0b3IgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgdXNiX2tsc2lfdGFibGUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF9kcml2ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGthd2V0aF9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJZHJpdmVyX25hbWUsCisJLnByb2JlID0Ja2F3ZXRoX3Byb2JlLAorCS5kaXNjb25uZWN0ID0Ja2F3ZXRoX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0gICAgIHVzYl9rbHNpX3RhYmxlLAorfTsKKwordHlwZWRlZiBfX3U4IGV0aF9hZGRyX3RbNl07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgdXNiX2V0aF9kZXYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IHVzYl9ldGhfZGV2IHsKKwljaGFyICpuYW1lOworCV9fdTE2IHZlbmRvcjsKKwlfX3UxNiBkZXZpY2U7CisJdm9pZCAqcGRhdGE7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF9ldGhlcm5ldF9jb25maWd1cmF0aW9uCisgKiAgICAgUmVmZXIgVGFibGUgOAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3Qga2F3ZXRoX2V0aGVybmV0X2NvbmZpZ3VyYXRpb24KK3sKKwlfX3U4IHNpemU7CisJX191OCByZXNlcnZlZDE7CisJX191OCByZXNlcnZlZDI7CisJZXRoX2FkZHJfdCBod19hZGRyOworCV9fdTMyIHN0YXRpc3RpY3NfbWFzazsKKwlfX2xlMTYgc2VnbWVudF9zaXplOworCV9fdTE2IG1heF9tdWx0aWNhc3RfZmlsdGVyczsKKwlfX3U4IHJlc2VydmVkMzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF9kZXZpY2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGthd2V0aF9kZXZpY2UKK3sKKwlzcGlubG9ja190IGRldmljZV9sb2NrOworCisJX191MzIgc3RhdHVzOworCWludCBlbmQ7CisJaW50IHJlbW92ZWQ7CisJaW50IHN1c3BlbmRfbG93bWVtX3J4OworCWludCBzdXNwZW5kX2xvd21lbV9jdHJsOworCWludCBsaW5rc3RhdGU7CisJc3RydWN0IHdvcmtfc3RydWN0IGxvd21lbV93b3JrOworCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0OworCXdhaXRfcXVldWVfaGVhZF90IHRlcm1fd2FpdDsKKworCXN0cnVjdCB1cmIgKnJ4X3VyYjsKKwlzdHJ1Y3QgdXJiICp0eF91cmI7CisJc3RydWN0IHVyYiAqaXJxX3VyYjsKKworCWRtYV9hZGRyX3QgaW50YnVmZmVyaGFuZGxlOworCV9fdTggKmludGJ1ZmZlcjsKKwlkbWFfYWRkcl90IHJ4YnVmZmVyaGFuZGxlOworCV9fdTggKnJ4X2J1ZjsKKworCQorCXN0cnVjdCBza19idWZmICp0eF9za2I7CisKKwlfX3U4ICpmaXJtd2FyZV9idWY7CisJX191OCBzY3JhdGNoW0tBV0VUSF9TQ1JBVENIX1NJWkVdOworCV9fdTE2IHBhY2tldF9maWx0ZXJfYml0bWFwOworCisJc3RydWN0IGthd2V0aF9ldGhlcm5ldF9jb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247CisKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKK307CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfY29udHJvbAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGthd2V0aF9jb250cm9sKHN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGgsCisJCQkgIHVuc2lnbmVkIGludCBwaXBlLAorCQkJICBfX3U4IHJlcXVlc3QsCisJCQkgIF9fdTggcmVxdWVzdHR5cGUsCisJCQkgIF9fdTE2IHZhbHVlLAorCQkJICBfX3UxNiBpbmRleCwKKwkJCSAgdm9pZCAqZGF0YSwKKwkJCSAgX191MTYgc2l6ZSwKKwkJCSAgaW50IHRpbWVvdXQpCit7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqZHI7CisKKwlrYXdldGhfZGJnKCJrYXdldGhfY29udHJvbCgpIik7CisKKwlpZihpbl9pbnRlcnJ1cHQoKSkgeworCQlrYXdldGhfZGJnKCJpbl9pbnRlcnJ1cHQoKSIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWRyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksIEdGUF9BVE9NSUMpOworCisJaWYgKCFkcikgeworCQlrYXdldGhfZGJnKCJrbWFsbG9jKCkgZmFpbGVkIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRyLT5iUmVxdWVzdFR5cGU9IHJlcXVlc3R0eXBlOworCWRyLT5iUmVxdWVzdCA9IHJlcXVlc3Q7CisJZHItPndWYWx1ZSA9IGNwdV90b19sZTE2cCgmdmFsdWUpOworCWRyLT53SW5kZXggPSBjcHVfdG9fbGUxNnAoJmluZGV4KTsKKwlkci0+d0xlbmd0aCA9IGNwdV90b19sZTE2cCgmc2l6ZSk7CisKKwlyZXR1cm4ga2F3ZXRoX2ludGVybmFsX2NvbnRyb2xfbXNnKGthd2V0aC0+ZGV2LAorCQkJCQlwaXBlLAorCQkJCQlkciwKKwkJCQkJZGF0YSwKKwkJCQkJc2l6ZSwKKwkJCQkJdGltZW91dCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX3JlYWRfY29uZmlndXJhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGthd2V0aF9yZWFkX2NvbmZpZ3VyYXRpb24oc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCkKK3sKKwlpbnQgcmV0dmFsOworCisJa2F3ZXRoX2RiZygiUmVhZGluZyBrYXdldGggY29uZmlndXJhdGlvbiIpOworCisJcmV0dmFsID0ga2F3ZXRoX2NvbnRyb2woa2F3ZXRoLAorCQkJCXVzYl9yY3ZjdHJscGlwZShrYXdldGgtPmRldiwgMCksCisJCQkJS0FXRVRIX0NPTU1BTkRfR0VUX0VUSEVSTkVUX0RFU0MsCisJCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJMCwKKwkJCQkwLAorCQkJCSh2b2lkICopJmthd2V0aC0+Y29uZmlndXJhdGlvbiwKKwkJCQlzaXplb2Yoa2F3ZXRoLT5jb25maWd1cmF0aW9uKSwKKwkJCQlLQVdFVEhfQ09OVFJPTF9USU1FT1VUKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX3NldF91cmJfc2l6ZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGthd2V0aF9zZXRfdXJiX3NpemUoc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCwgX191MTYgdXJiX3NpemUpCit7CisJaW50IHJldHZhbDsKKworCWthd2V0aF9kYmcoIlNldHRpbmcgVVJCIHNpemUgdG8gJWQiLCAodW5zaWduZWQpdXJiX3NpemUpOworCisJcmV0dmFsID0ga2F3ZXRoX2NvbnRyb2woa2F3ZXRoLAorCQkJCXVzYl9zbmRjdHJscGlwZShrYXdldGgtPmRldiwgMCksCisJCQkJS0FXRVRIX0NPTU1BTkRfU0VUX1VSQl9TSVpFLAorCQkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCQl1cmJfc2l6ZSwKKwkJCQkwLAorCQkJCSh2b2lkICopJmthd2V0aC0+c2NyYXRjaCwKKwkJCQkwLAorCQkJCUtBV0VUSF9DT05UUk9MX1RJTUVPVVQpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfc2V0X3NvZnNfd2FpdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGthd2V0aF9zZXRfc29mc193YWl0KHN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGgsIF9fdTE2IHNvZnNfd2FpdCkKK3sKKwlpbnQgcmV0dmFsOworCisJa2F3ZXRoX2RiZygiU2V0IFNPRlMgd2FpdCB0byAlZCIsICh1bnNpZ25lZClzb2ZzX3dhaXQpOworCisJcmV0dmFsID0ga2F3ZXRoX2NvbnRyb2woa2F3ZXRoLAorCQkJCXVzYl9zbmRjdHJscGlwZShrYXdldGgtPmRldiwgMCksCisJCQkJS0FXRVRIX0NPTU1BTkRfU0VUX1NPRlNfV0FJVCwKKwkJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJc29mc193YWl0LAorCQkJCTAsCisJCQkJKHZvaWQgKikma2F3ZXRoLT5zY3JhdGNoLAorCQkJCTAsCisJCQkJS0FXRVRIX0NPTlRST0xfVElNRU9VVCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF9zZXRfcmVjZWl2ZV9maWx0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBrYXdldGhfc2V0X3JlY2VpdmVfZmlsdGVyKHN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGgsCisJCQkJICAgICBfX3UxNiByZWNlaXZlX2ZpbHRlcikKK3sKKwlpbnQgcmV0dmFsOworCisJa2F3ZXRoX2RiZygiU2V0IHJlY2VpdmUgZmlsdGVyIHRvICVkIiwgKHVuc2lnbmVkKXJlY2VpdmVfZmlsdGVyKTsKKworCXJldHZhbCA9IGthd2V0aF9jb250cm9sKGthd2V0aCwKKwkJCQl1c2Jfc25kY3RybHBpcGUoa2F3ZXRoLT5kZXYsIDApLAorCQkJCUtBV0VUSF9DT01NQU5EX1NFVF9QQUNLRVRfRklMVEVSLAorCQkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCQlyZWNlaXZlX2ZpbHRlciwKKwkJCQkwLAorCQkJCSh2b2lkICopJmthd2V0aC0+c2NyYXRjaCwKKwkJCQkwLAorCQkJCUtBV0VUSF9DT05UUk9MX1RJTUVPVVQpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfZG93bmxvYWRfZmlybXdhcmUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBrYXdldGhfZG93bmxvYWRfZmlybXdhcmUoc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCwKKwkJCQkgICAgX191OCAqZGF0YSwKKwkJCQkgICAgX191MTYgZGF0YV9sZW4sCisJCQkJICAgIF9fdTggaW50ZXJydXB0LAorCQkJCSAgICBfX3U4IHR5cGUpCit7CisJaWYoZGF0YV9sZW4gPiBLQVdFVEhfRklSTVdBUkVfQlVGX1NJWkUpCXsKKwkJa2F3ZXRoX2VycigiRmlybXdhcmUgdG9vIGJpZzogJWQiLCBkYXRhX2xlbik7CisJCXJldHVybiAtRU5PU1BDOworCX0KKworCW1lbWNweShrYXdldGgtPmZpcm13YXJlX2J1ZiwgZGF0YSwgZGF0YV9sZW4pOworCisJa2F3ZXRoLT5maXJtd2FyZV9idWZbMl0gPSAoZGF0YV9sZW4gJiAweEZGKSAtIDc7CisJa2F3ZXRoLT5maXJtd2FyZV9idWZbM10gPSBkYXRhX2xlbiA+PiA4OworCWthd2V0aC0+ZmlybXdhcmVfYnVmWzRdID0gdHlwZTsKKwlrYXdldGgtPmZpcm13YXJlX2J1Zls1XSA9IGludGVycnVwdDsKKworCWthd2V0aF9kYmcoIkhpZ2g6ICVpLCBMb3c6JWkiLCBrYXdldGgtPmZpcm13YXJlX2J1ZlszXSwKKwkJICAga2F3ZXRoLT5maXJtd2FyZV9idWZbMl0pOworCisJa2F3ZXRoX2RiZygiRG93bmxvYWRpbmcgZmlybXdhcmUgYXQgJXAgdG8ga2F3ZXRoIGRldmljZSBhdCAlcCIsCisJICAgIGRhdGEsCisJICAgIGthd2V0aCk7CisJa2F3ZXRoX2RiZygiRmlybXdhcmUgbGVuZ3RoOiAlZCIsIGRhdGFfbGVuKTsKKworCXJldHVybiBrYXdldGhfY29udHJvbChrYXdldGgsCisJCSAgICAgICAgICAgICAgdXNiX3NuZGN0cmxwaXBlKGthd2V0aC0+ZGV2LCAwKSwKKwkJCSAgICAgIEtBV0VUSF9DT01NQU5EX1NDQU4sCisJCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICAwLAorCQkJICAgICAgMCwKKwkJCSAgICAgICh2b2lkICopa2F3ZXRoLT5maXJtd2FyZV9idWYsCisJCQkgICAgICBkYXRhX2xlbiwKKwkJCSAgICAgIEtBV0VUSF9DT05UUk9MX1RJTUVPVVQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF90cmlnZ2VyX2Zpcm13YXJlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQga2F3ZXRoX3RyaWdnZXJfZmlybXdhcmUoc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCwKKwkJCQkgICBfX3U4IGludGVycnVwdCkKK3sKKwlrYXdldGgtPmZpcm13YXJlX2J1ZlswXSA9IDB4QjY7CisJa2F3ZXRoLT5maXJtd2FyZV9idWZbMV0gPSAweEMzOworCWthd2V0aC0+ZmlybXdhcmVfYnVmWzJdID0gMHgwMTsKKwlrYXdldGgtPmZpcm13YXJlX2J1ZlszXSA9IDB4MDA7CisJa2F3ZXRoLT5maXJtd2FyZV9idWZbNF0gPSAweDA2OworCWthd2V0aC0+ZmlybXdhcmVfYnVmWzVdID0gaW50ZXJydXB0OworCWthd2V0aC0+ZmlybXdhcmVfYnVmWzZdID0gMHgwMDsKKwlrYXdldGgtPmZpcm13YXJlX2J1Zls3XSA9IDB4MDA7CisKKwlrYXdldGhfZGJnKCJUcmlnZ2VyaW5nIGZpcm13YXJlIik7CisKKwlyZXR1cm4ga2F3ZXRoX2NvbnRyb2woa2F3ZXRoLAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGthd2V0aC0+ZGV2LCAwKSwKKwkJCSAgICAgIEtBV0VUSF9DT01NQU5EX1NDQU4sCisJCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICAwLAorCQkJICAgICAgMCwKKwkJCSAgICAgICh2b2lkICopa2F3ZXRoLT5maXJtd2FyZV9idWYsCisJCQkgICAgICA4LAorCQkJICAgICAgS0FXRVRIX0NPTlRST0xfVElNRU9VVCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX3Jlc2V0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQga2F3ZXRoX3Jlc2V0KHN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGgpCit7CisJaW50IHJlc3VsdDsKKworCWthd2V0aF9kYmcoImthd2V0aF9yZXNldCglcCkiLCBrYXdldGgpOworCXJlc3VsdCA9IGthd2V0aF9jb250cm9sKGthd2V0aCwKKwkJCQl1c2Jfc25kY3RybHBpcGUoa2F3ZXRoLT5kZXYsIDApLAorCQkJCVVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04sCisJCQkJMCwKKwkJCQlrYXdldGgtPmRldi0+Y29uZmlnWzBdLmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSwKKwkJCQkwLAorCQkJCU5VTEwsCisJCQkJMCwKKwkJCQlLQVdFVEhfQ09OVFJPTF9USU1FT1VUKTsKKworCXVkZWxheSgxMDAwMCk7CisKKwlrYXdldGhfZGJnKCJrYXdldGhfcmVzZXQoKSByZXR1cm5zICVkLiIscmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGthd2V0aF91c2JfcmVjZWl2ZShzdHJ1Y3QgdXJiICosIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyBpbnQga2F3ZXRoX3Jlc3VibWl0X3J4X3VyYihzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqLCBpbnQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCWludF9jYWxsYmFjaworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIGthd2V0aF9yZXN1Ym1pdF9pbnRfdXJiKHN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGgsIGludCBtZikKK3sKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKGthd2V0aC0+aXJxX3VyYiwgbWYpOworCWlmICh1bmxpa2VseShzdGF0dXMgPT0gLUVOT01FTSkpIHsKKwkJa2F3ZXRoLT5zdXNwZW5kX2xvd21lbV9jdHJsID0gMTsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZrYXdldGgtPmxvd21lbV93b3JrLCBIWi80KTsKKwl9IGVsc2UgeworCQlrYXdldGgtPnN1c3BlbmRfbG93bWVtX2N0cmwgPSAwOworCX0KKworCWlmIChzdGF0dXMpCisJCWVyciAoImNhbid0IHJlc3VibWl0IGludHIsICVzLSVzLCBzdGF0dXMgJWQiLAorCQkJCWthd2V0aC0+ZGV2LT5idXMtPmJ1c19uYW1lLAorCQkJCWthd2V0aC0+ZGV2LT5kZXZwYXRoLCBzdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCBpbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCA9IHUtPmNvbnRleHQ7CisJaW50IGFjdF9zdGF0ZTsKKworCXN3aXRjaCAodS0+c3RhdHVzKSB7CisJY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoJLyogdW5saW5rICovCisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJcmV0dXJuOworCS8qIC1FUElQRTogIHNob3VsZCBjbGVhciB0aGUgaGFsdCAqLworCWRlZmF1bHQ6CQkvKiBlcnJvciAqLworCQlnb3RvIHJlc3VibWl0OworCX0KKworCS8qIHdlIGNoZWNrIHRoZSBsaW5rIHN0YXRlIHRvIHJlcG9ydCBjaGFuZ2VzICovCisJaWYgKGthd2V0aC0+bGlua3N0YXRlICE9IChhY3Rfc3RhdGUgPSAoIGthd2V0aC0+aW50YnVmZmVyW1NUQVRFX09GRlNFVF0gfCBTVEFURV9NQVNLKSA+PiBTVEFURV9TSElGVCkpIHsKKwkJaWYgKCFhY3Rfc3RhdGUpCisJCQluZXRpZl9jYXJyaWVyX29uKGthd2V0aC0+bmV0KTsKKwkJZWxzZQorCQkJbmV0aWZfY2Fycmllcl9vZmYoa2F3ZXRoLT5uZXQpOworCisJCWthd2V0aC0+bGlua3N0YXRlID0gYWN0X3N0YXRlOworCX0KK3Jlc3VibWl0OgorCWthd2V0aF9yZXN1Ym1pdF9pbnRfdXJiKGthd2V0aCwgR0ZQX0FUT01JQyk7Cit9CisKK3N0YXRpYyB2b2lkIGthd2V0aF9yZXN1Ym1pdF90bCh2b2lkICpkKQoreworCXN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGggPSAoc3RydWN0IGthd2V0aF9kZXZpY2UgKilkOworCisJaWYgKGthd2V0aC0+c3RhdHVzIHwgS0FXRVRIX1NUQVRVU19DTE9TSU5HKQorCQlyZXR1cm47CisKKwlpZiAoa2F3ZXRoLT5zdXNwZW5kX2xvd21lbV9yeCkKKwkJa2F3ZXRoX3Jlc3VibWl0X3J4X3VyYihrYXdldGgsIEdGUF9OT0lPKTsKKworCWlmIChrYXdldGgtPnN1c3BlbmRfbG93bWVtX2N0cmwpCisJCWthd2V0aF9yZXN1Ym1pdF9pbnRfdXJiKGthd2V0aCwgR0ZQX05PSU8pOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX3Jlc3VibWl0X3J4X3VyYgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGthd2V0aF9yZXN1Ym1pdF9yeF91cmIoc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCwKKwkJCQkJCWludCBtZW1fZmxhZ3MpCit7CisJaW50IHJlc3VsdDsKKworCXVzYl9maWxsX2J1bGtfdXJiKGthd2V0aC0+cnhfdXJiLAorCQkgICAgICBrYXdldGgtPmRldiwKKwkJICAgICAgdXNiX3JjdmJ1bGtwaXBlKGthd2V0aC0+ZGV2LCAxKSwKKwkJICAgICAga2F3ZXRoLT5yeF9idWYsCisJCSAgICAgIEtBV0VUSF9CVUZfU0laRSwKKwkJICAgICAga2F3ZXRoX3VzYl9yZWNlaXZlLAorCQkgICAgICBrYXdldGgpOworCWthd2V0aC0+cnhfdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwlrYXdldGgtPnJ4X3VyYi0+dHJhbnNmZXJfZG1hID0ga2F3ZXRoLT5yeGJ1ZmZlcmhhbmRsZTsKKworCWlmKChyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihrYXdldGgtPnJ4X3VyYiwgbWVtX2ZsYWdzKSkpIHsKKwkJaWYgKHJlc3VsdCA9PSAtRU5PTUVNKSB7CisJCQlrYXdldGgtPnN1c3BlbmRfbG93bWVtX3J4ID0gMTsKKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygma2F3ZXRoLT5sb3dtZW1fd29yaywgSFovNCk7CisJCX0KKwkJa2F3ZXRoX2VycigicmVzdWJtaXR0aW5nIHJ4X3VyYiAlZCBmYWlsZWQiLCByZXN1bHQpOworCX0gZWxzZSB7CisJCWthd2V0aC0+c3VzcGVuZF9sb3dtZW1fcnggPSAwOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGthd2V0aF9hc3luY19zZXRfcnhfbW9kZShzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfdXNiX3JlY2VpdmUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQga2F3ZXRoX3VzYl9yZWNlaXZlKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ID0ga2F3ZXRoLT5uZXQ7CisKKwlpbnQgY291bnQgPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJaW50IGNvdW50MiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKworCV9fdTE2IHBrdF9sZW4gPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKWthd2V0aC0+cnhfYnVmKTsKKworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZih1bmxpa2VseSh1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCB8fCB1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKSkKKwkvKiB3ZSBhcmUga2lsbGVkIC0gc2V0IGEgZmxhZyBhbmQgd2FrZSB0aGUgZGlzY29ubmVjdCBoYW5kbGVyICovCisJeworCQlrYXdldGgtPmVuZCA9IDE7CisJCXdha2VfdXAoJmthd2V0aC0+dGVybV93YWl0KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChrYXdldGgtPnN0YXR1cyAmIEtBV0VUSF9TVEFUVVNfQ0xPU0lORykKKwkJcmV0dXJuOworCisJaWYodXJiLT5zdGF0dXMgJiYgdXJiLT5zdGF0dXMgIT0gLUVSRU1PVEVJTyAmJiBjb3VudCAhPSAxKSB7CisJCWthd2V0aF9lcnIoIiVzIFJYIHN0YXR1czogJWQgY291bnQ6ICVkIHBhY2tldF9sZW46ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldC0+bmFtZSwKKwkJCSAgIHVyYi0+c3RhdHVzLAorCQkJICAgY291bnQsCisJCQkgICAoaW50KXBrdF9sZW4pOworCQlrYXdldGhfcmVzdWJtaXRfcnhfdXJiKGthd2V0aCwgR0ZQX0FUT01JQyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworCX0KKworCWlmKGthd2V0aC0+bmV0ICYmIChjb3VudCA+IDIpKSB7CisJCWlmKHBrdF9sZW4gPiAoY291bnQgLSAyKSkgeworCQkJa2F3ZXRoX2VycigiUGFja2V0IGxlbmd0aCB0b28gbG9uZyBmb3IgVVNCIGZyYW1lIChwa3RfbGVuOiAleCwgY291bnQ6ICV4KSIscGt0X2xlbiwgY291bnQpOworCQkJa2F3ZXRoX2VycigiUGFja2V0IGxlbiAmIDIwNDc6ICV4IiwgcGt0X2xlbiAmIDIwNDcpOworCQkJa2F3ZXRoX2VycigiQ291bnQgMjogJXgiLCBjb3VudDIpOworCQkgICAgICAgIGthd2V0aF9yZXN1Ym1pdF9yeF91cmIoa2F3ZXRoLCBHRlBfQVRPTUlDKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKwkJaWYoIShza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4rMikpKSB7CisJCSAgICAgICAga2F3ZXRoX3Jlc3VibWl0X3J4X3VyYihrYXdldGgsIEdGUF9BVE9NSUMpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCQl9CisKKwkJc2tiX3Jlc2VydmUoc2tiLCAyKTsgICAgLyogQWxpZ24gSVAgb24gMTYgYnl0ZSBib3VuZGFyaWVzICovCisKKwkJc2tiLT5kZXYgPSBuZXQ7CisKKwkJZXRoX2NvcHlfYW5kX3N1bShza2IsIGthd2V0aC0+cnhfYnVmICsgMiwgcGt0X2xlbiwgMCk7CisKKwkJc2tiX3B1dChza2IsIHBrdF9sZW4pOworCisJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldCk7CisKKwkJbmV0aWZfcngoc2tiKTsKKworCQlrYXdldGgtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJa2F3ZXRoLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOworCX0KKworCWthd2V0aF9yZXN1Ym1pdF9yeF91cmIoa2F3ZXRoLCBHRlBfQVRPTUlDKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfb3BlbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGthd2V0aF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCA9IG5ldGRldl9wcml2KG5ldCk7CisJaW50IHJlczsKKworCWthd2V0aF9kYmcoIk9wZW5pbmcgbmV0d29yayBkZXZpY2UuIik7CisKKwlyZXMgPSBrYXdldGhfcmVzdWJtaXRfcnhfdXJiKGthd2V0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlcykKKwkJcmV0dXJuIC1FSU87CisKKwl1c2JfZmlsbF9pbnRfdXJiKAorCQlrYXdldGgtPmlycV91cmIsCisJCWthd2V0aC0+ZGV2LAorCQl1c2JfcmN2aW50cGlwZShrYXdldGgtPmRldiwgMyksCisJCWthd2V0aC0+aW50YnVmZmVyLAorCQlJTlRCVUZGRVJTSVpFLAorCQlpbnRfY2FsbGJhY2ssCisJCWthd2V0aCwKKwkJMjUwKTsgLyogb3ZlcnJpZGluZyB0aGUgZGVzY3JpcHRvciAqLworCWthd2V0aC0+aXJxX3VyYi0+dHJhbnNmZXJfZG1hID0ga2F3ZXRoLT5pbnRidWZmZXJoYW5kbGU7CisJa2F3ZXRoLT5pcnFfdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCXJlcyA9IHVzYl9zdWJtaXRfdXJiKGthd2V0aC0+aXJxX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlcykgeworCQl1c2Jfa2lsbF91cmIoa2F3ZXRoLT5yeF91cmIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwluZXRpZl9zdGFydF9xdWV1ZShuZXQpOworCisJa2F3ZXRoX2FzeW5jX3NldF9yeF9tb2RlKGthd2V0aCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX2Nsb3NlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQga2F3ZXRoX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCA9IG5ldGRldl9wcml2KG5ldCk7CisKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldCk7CisKKwlrYXdldGgtPnN0YXR1cyB8PSBLQVdFVEhfU1RBVFVTX0NMT1NJTkc7CisKKwl1c2Jfa2lsbF91cmIoa2F3ZXRoLT5pcnFfdXJiKTsKKwl1c2Jfa2lsbF91cmIoa2F3ZXRoLT5yeF91cmIpOworCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCS8qIGEgc2NoZWR1bGVkIHdvcmsgbWF5IGhhdmUgcmVzdWJtaXR0ZWQsCisJICAgd2UgaGl0IHRoZW0gYWdhaW4gKi8KKwl1c2Jfa2lsbF91cmIoa2F3ZXRoLT5pcnFfdXJiKTsKKwl1c2Jfa2lsbF91cmIoa2F3ZXRoLT5yeF91cmIpOworCisJa2F3ZXRoLT5zdGF0dXMgJj0gfktBV0VUSF9TVEFUVVNfQ0xPU0lORzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBrYXdldGhfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKK3sKKworCXN0cmxjcHkoaW5mby0+ZHJpdmVyLCBkcml2ZXJfbmFtZSwgc2l6ZW9mKGluZm8tPmRyaXZlcikpOworfQorCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKKwkuZ2V0X2RydmluZm8gPSBrYXdldGhfZ2V0X2RydmluZm8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX3VzYl90cmFuc21pdF9jb21wbGV0ZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBrYXdldGhfdXNiX3RyYW5zbWl0X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0ga2F3ZXRoLT50eF9za2I7CisKKwlpZiAodW5saWtlbHkodXJiLT5zdGF0dXMgIT0gMCkpCisJCWlmICh1cmItPnN0YXR1cyAhPSAtRU5PRU5UKQorCQkJa2F3ZXRoX2RiZygiJXM6IFRYIHN0YXR1cyAlZC4iLCBrYXdldGgtPm5ldC0+bmFtZSwgdXJiLT5zdGF0dXMpOworCisJbmV0aWZfd2FrZV9xdWV1ZShrYXdldGgtPm5ldCk7CisJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfc3RhcnRfeG1pdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGthd2V0aF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCA9IG5ldGRldl9wcml2KG5ldCk7CisJX19sZTE2ICpwcml2YXRlX2hlYWRlcjsKKworCWludCByZXM7CisKKwlzcGluX2xvY2soJmthd2V0aC0+ZGV2aWNlX2xvY2spOworCisJaWYgKGthd2V0aC0+cmVtb3ZlZCkgeworCS8qIG91ciBkZXZpY2UgaXMgdW5kZXJnb2luZyBkaXNjb25uZWN0aW9uIC0gd2UgYmFpbCBvdXQgKi8KKwkJc3Bpbl91bmxvY2soJmthd2V0aC0+ZGV2aWNlX2xvY2spOworCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCQlyZXR1cm4gMDsKKwl9CisKKwlrYXdldGhfYXN5bmNfc2V0X3J4X21vZGUoa2F3ZXRoKTsKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldCk7CisKKwkvKiBXZSBub3cgZGVjaWRlIHdoZXRoZXIgd2UgY2FuIHB1dCBvdXIgc3BlY2lhbCBoZWFkZXIgaW50byB0aGUgc2tfYnVmZiAqLworCWlmIChza2JfY2xvbmVkKHNrYikgfHwgc2tiX2hlYWRyb29tKHNrYikgPCAyKSB7CisJCS8qIG5vIHN1Y2ggbHVjayAtIHdlIG1ha2Ugb3VyIG93biAqLworCQlzdHJ1Y3Qgc2tfYnVmZiAqY29waWVkX3NrYjsKKwkJY29waWVkX3NrYiA9IHNrYl9jb3B5X2V4cGFuZChza2IsIDIsIDAsIEdGUF9BVE9NSUMpOworCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCQlza2IgPSBjb3BpZWRfc2tiOworCQlpZiAoIWNvcGllZF9za2IpIHsKKwkJCWthd2V0aC0+c3RhdHMudHhfZXJyb3JzKys7CisJCQluZXRpZl9zdGFydF9xdWV1ZShuZXQpOworCQkJc3Bpbl91bmxvY2soJmthd2V0aC0+ZGV2aWNlX2xvY2spOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlwcml2YXRlX2hlYWRlciA9IChfX2xlMTYgKilfX3NrYl9wdXNoKHNrYiwgMik7CisJKnByaXZhdGVfaGVhZGVyID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4tMik7CisJa2F3ZXRoLT50eF9za2IgPSBza2I7CisKKwl1c2JfZmlsbF9idWxrX3VyYihrYXdldGgtPnR4X3VyYiwKKwkJICAgICAga2F3ZXRoLT5kZXYsCisJCSAgICAgIHVzYl9zbmRidWxrcGlwZShrYXdldGgtPmRldiwgMiksCisJCSAgICAgIHByaXZhdGVfaGVhZGVyLAorCQkgICAgICBza2ItPmxlbiwKKwkJICAgICAga2F3ZXRoX3VzYl90cmFuc21pdF9jb21wbGV0ZSwKKwkJICAgICAga2F3ZXRoKTsKKwlrYXdldGgtPmVuZCA9IDA7CisJa2F3ZXRoLT50eF91cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9BU1lOQ19VTkxJTks7CisKKwlpZigocmVzID0gdXNiX3N1Ym1pdF91cmIoa2F3ZXRoLT50eF91cmIsIEdGUF9BVE9NSUMpKSkKKwl7CisJCWthd2V0aF93YXJuKCJrYXdldGggZmFpbGVkIHR4X3VyYiAlZCIsIHJlcyk7CisJCWthd2V0aC0+c3RhdHMudHhfZXJyb3JzKys7CisKKwkJbmV0aWZfc3RhcnRfcXVldWUobmV0KTsKKwkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwl9CisJZWxzZQorCXsKKwkJa2F3ZXRoLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCWthd2V0aC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCW5ldC0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCX0KKworCXNwaW5fdW5sb2NrKCZrYXdldGgtPmRldmljZV9sb2NrKTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF9zZXRfcnhfbW9kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBrYXdldGhfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCV9fdTE2IHBhY2tldF9maWx0ZXJfYml0bWFwID0gS0FXRVRIX1BBQ0tFVF9GSUxURVJfRElSRUNURUQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtBV0VUSF9QQUNLRVRfRklMVEVSX0JST0FEQ0FTVCB8CisJCSAgICAgICAgICAgICAgICAgICAgIEtBV0VUSF9QQUNLRVRfRklMVEVSX01VTFRJQ0FTVDsKKworCWthd2V0aF9kYmcoIlNldHRpbmcgUnggbW9kZSB0byAlZCIsIHBhY2tldF9maWx0ZXJfYml0bWFwKTsKKworCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKKworCWlmIChuZXQtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJcGFja2V0X2ZpbHRlcl9iaXRtYXAgfD0gS0FXRVRIX1BBQ0tFVF9GSUxURVJfUFJPTUlTQ1VPVVM7CisJfQorCWVsc2UgaWYgKChuZXQtPm1jX2NvdW50KSB8fCAobmV0LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKKwkJcGFja2V0X2ZpbHRlcl9iaXRtYXAgfD0gS0FXRVRIX1BBQ0tFVF9GSUxURVJfQUxMX01VTFRJQ0FTVDsKKwl9CisKKwlrYXdldGgtPnBhY2tldF9maWx0ZXJfYml0bWFwID0gcGFja2V0X2ZpbHRlcl9iaXRtYXA7CisJbmV0aWZfd2FrZV9xdWV1ZShuZXQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF9hc3luY19zZXRfcnhfbW9kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBrYXdldGhfYXN5bmNfc2V0X3J4X21vZGUoc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCkKK3sKKwlfX3UxNiBwYWNrZXRfZmlsdGVyX2JpdG1hcCA9IGthd2V0aC0+cGFja2V0X2ZpbHRlcl9iaXRtYXA7CisJa2F3ZXRoLT5wYWNrZXRfZmlsdGVyX2JpdG1hcCA9IDA7CisJaWYgKHBhY2tldF9maWx0ZXJfYml0bWFwID09IDApCisJCXJldHVybjsKKworCXsKKwlpbnQgcmVzdWx0OworCXJlc3VsdCA9IGthd2V0aF9jb250cm9sKGthd2V0aCwKKwkJCQl1c2Jfc25kY3RybHBpcGUoa2F3ZXRoLT5kZXYsIDApLAorCQkJCUtBV0VUSF9DT01NQU5EX1NFVF9QQUNLRVRfRklMVEVSLAorCQkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCQlwYWNrZXRfZmlsdGVyX2JpdG1hcCwKKwkJCQkwLAorCQkJCSh2b2lkICopJmthd2V0aC0+c2NyYXRjaCwKKwkJCQkwLAorCQkJCUtBV0VUSF9DT05UUk9MX1RJTUVPVVQpOworCisJaWYocmVzdWx0IDwgMCkgeworCQlrYXdldGhfZXJyKCJGYWlsZWQgdG8gc2V0IFJ4IG1vZGU6ICVkIiwgcmVzdWx0KTsKKwl9CisJZWxzZSB7CisJCWthd2V0aF9kYmcoIlNldCBSeCBtb2RlIHRvICVkIiwgcGFja2V0X2ZpbHRlcl9iaXRtYXApOworCX0KKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX25ldGRldl9zdGF0cworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmthd2V0aF9uZXRkZXZfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlyZXR1cm4gJmthd2V0aC0+c3RhdHM7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX3R4X3RpbWVvdXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQga2F3ZXRoX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCWthd2V0aF93YXJuKCIlczogVHggdGltZWQgb3V0LiBSZXNldHRpbmcuIiwgbmV0LT5uYW1lKTsKKwlrYXdldGgtPnN0YXRzLnR4X2Vycm9ycysrOworCW5ldC0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCisJdXNiX3VubGlua191cmIoa2F3ZXRoLT50eF91cmIpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF9wcm9iZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGthd2V0aF9wcm9iZSgKKwkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCAgICAgIC8qIGZyb20gaWRfdGFibGUgKi8KKwkpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCWNvbnN0IGV0aF9hZGRyX3QgYmNhc3RfYWRkciA9IHsgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiB9OworCWludCByZXN1bHQgPSAwOworCisJa2F3ZXRoX2RiZygiS2F3YXNha2kgRGV2aWNlIFByb2JlIChEZXZpY2UgbnVtYmVyOiVkKTogMHglNC40eDoweCU0LjR4OjB4JTQuNHgiLAorCQkgZGV2LT5kZXZudW0sCisJCSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQkgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCksCisJCSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSk7CisKKwlrYXdldGhfZGJnKCJEZXZpY2UgYXQgJXAiLCBkZXYpOworCisJa2F3ZXRoX2RiZygiRGVzY3JpcHRvciBsZW5ndGg6ICV4IHR5cGU6ICV4IiwKKwkJIChpbnQpZGV2LT5kZXNjcmlwdG9yLmJMZW5ndGgsCisJCSAoaW50KWRldi0+ZGVzY3JpcHRvci5iRGVzY3JpcHRvclR5cGUpOworCisJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKCprYXdldGgpKTsKKwlpZiAoIW5ldGRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlrYXdldGggPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWthd2V0aC0+ZGV2ID0gZGV2OworCWthd2V0aC0+bmV0ID0gbmV0ZGV2OworCisJc3Bpbl9sb2NrX2luaXQoJmthd2V0aC0+ZGV2aWNlX2xvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmthd2V0aC0+dGVybV93YWl0KTsKKworCWthd2V0aF9kYmcoIlJlc2V0dGluZy4iKTsKKworCWthd2V0aF9yZXNldChrYXdldGgpOworCisJLyoKKwkgKiBJZiBoaWdoIGJ5dGUgb2YgYmNkRGV2aWNlIGlzIG5vbnplcm8sIGZpcm13YXJlIGlzIGFscmVhZHkKKwkgKiBkb3dubG9hZGVkLiBEb24ndCB0cnkgdG8gZG8gaXQgYWdhaW4sIG9yIHdlJ2xsIGhhbmcgdGhlIGRldmljZS4KKwkgKi8KKworCWlmIChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSA+PiA4KSB7CisJCWthd2V0aF9pbmZvKCJGaXJtd2FyZSBwcmVzZW50IGluIGRldmljZS4iKTsKKwl9IGVsc2UgeworCQkvKiBEb3dubG9hZCB0aGUgZmlybXdhcmUgKi8KKwkJa2F3ZXRoX2luZm8oIkRvd25sb2FkaW5nIGZpcm13YXJlLi4uIik7CisJCWthd2V0aC0+ZmlybXdhcmVfYnVmID0gKF9fdTggKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWlmICgocmVzdWx0ID0ga2F3ZXRoX2Rvd25sb2FkX2Zpcm13YXJlKGthd2V0aCwKKwkJCQkJCSAgICAgIGthd2V0aF9uZXdfY29kZSwKKwkJCQkJCSAgICAgIGxlbl9rYXdldGhfbmV3X2NvZGUsCisJCQkJCQkgICAgICAxMDAsCisJCQkJCQkgICAgICAyKSkgPCAwKSB7CisJCQlrYXdldGhfZXJyKCJFcnJvciBkb3dubG9hZGluZyBmaXJtd2FyZSAoJWQpIiwgcmVzdWx0KTsKKwkJCWdvdG8gZXJyX2Z3OworCQl9CisKKwkJaWYgKChyZXN1bHQgPSBrYXdldGhfZG93bmxvYWRfZmlybXdhcmUoa2F3ZXRoLAorCQkJCQkJICAgICAga2F3ZXRoX25ld19jb2RlX2ZpeCwKKwkJCQkJCSAgICAgIGxlbl9rYXdldGhfbmV3X2NvZGVfZml4LAorCQkJCQkJICAgICAgMTAwLAorCQkJCQkJICAgICAgMykpIDwgMCkgeworCQkJa2F3ZXRoX2VycigiRXJyb3IgZG93bmxvYWRpbmcgZmlybXdhcmUgZml4ICglZCkiLCByZXN1bHQpOworCQkJZ290byBlcnJfZnc7CisJCX0KKworCQlpZiAoKHJlc3VsdCA9IGthd2V0aF9kb3dubG9hZF9maXJtd2FyZShrYXdldGgsCisJCQkJCQkgICAgICBrYXdldGhfdHJpZ2dlcl9jb2RlLAorCQkJCQkJICAgICAgbGVuX2thd2V0aF90cmlnZ2VyX2NvZGUsCisJCQkJCQkgICAgICAxMjYsCisJCQkJCQkgICAgICAyKSkgPCAwKSB7CisJCQlrYXdldGhfZXJyKCJFcnJvciBkb3dubG9hZGluZyB0cmlnZ2VyIGNvZGUgKCVkKSIsIHJlc3VsdCk7CisJCQlnb3RvIGVycl9mdzsKKworCQl9CisKKwkJaWYgKChyZXN1bHQgPSBrYXdldGhfZG93bmxvYWRfZmlybXdhcmUoa2F3ZXRoLAorCQkJCQkJICAgICAga2F3ZXRoX3RyaWdnZXJfY29kZV9maXgsCisJCQkJCQkgICAgICBsZW5fa2F3ZXRoX3RyaWdnZXJfY29kZV9maXgsCisJCQkJCQkgICAgICAxMjYsCisJCQkJCQkgICAgICAzKSkgPCAwKSB7CisJCQlrYXdldGhfZXJyKCJFcnJvciBkb3dubG9hZGluZyB0cmlnZ2VyIGNvZGUgZml4ICglZCkiLCByZXN1bHQpOworCQkJZ290byBlcnJfZnc7CisJCX0KKworCisJCWlmICgocmVzdWx0ID0ga2F3ZXRoX3RyaWdnZXJfZmlybXdhcmUoa2F3ZXRoLCAxMjYpKSA8IDApIHsKKwkJCWthd2V0aF9lcnIoIkVycm9yIHRyaWdnZXJpbmcgZmlybXdhcmUgKCVkKSIsIHJlc3VsdCk7CisJCQlnb3RvIGVycl9mdzsKKwkJfQorCisJCS8qIERldmljZSB3aWxsIG5vdyBkaXNhcHBlYXIgZm9yIGEgbW9tZW50Li4uICAqLworCQlrYXdldGhfaW5mbygiRmlybXdhcmUgbG9hZGVkLiAgSSdsbCBiZSBiYWNrLi4uIik7CitlcnJfZnc6CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylrYXdldGgtPmZpcm13YXJlX2J1Zik7CisJCWZyZWVfbmV0ZGV2KG5ldGRldik7CisJCXJldHVybiAtRUlPOworCX0KKworCXJlc3VsdCA9IGthd2V0aF9yZWFkX2NvbmZpZ3VyYXRpb24oa2F3ZXRoKTsKKworCWlmKHJlc3VsdCA8IDApIHsKKwkJa2F3ZXRoX2VycigiRXJyb3IgcmVhZGluZyBjb25maWd1cmF0aW9uICglZCksIG5vIG5ldCBkZXZpY2UgY3JlYXRlZCIsIHJlc3VsdCk7CisJCWdvdG8gZXJyX2ZyZWVfbmV0ZGV2OworCX0KKworCWthd2V0aF9pbmZvKCJTdGF0aXN0aWNzIGNvbGxlY3Rpb246ICV4Iiwga2F3ZXRoLT5jb25maWd1cmF0aW9uLnN0YXRpc3RpY3NfbWFzayk7CisJa2F3ZXRoX2luZm8oIk11bHRpY2FzdCBmaWx0ZXIgbGltaXQ6ICV4Iiwga2F3ZXRoLT5jb25maWd1cmF0aW9uLm1heF9tdWx0aWNhc3RfZmlsdGVycyAmICgoMSA8PCAxNSkgLSAxKSk7CisJa2F3ZXRoX2luZm8oIk1UVTogJWQiLCBsZTE2X3RvX2NwdShrYXdldGgtPmNvbmZpZ3VyYXRpb24uc2VnbWVudF9zaXplKSk7CisJa2F3ZXRoX2luZm8oIlJlYWQgTUFDIGFkZHJlc3MgJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMngiLAorCQkgKGludClrYXdldGgtPmNvbmZpZ3VyYXRpb24uaHdfYWRkclswXSwKKwkJIChpbnQpa2F3ZXRoLT5jb25maWd1cmF0aW9uLmh3X2FkZHJbMV0sCisJCSAoaW50KWthd2V0aC0+Y29uZmlndXJhdGlvbi5od19hZGRyWzJdLAorCQkgKGludClrYXdldGgtPmNvbmZpZ3VyYXRpb24uaHdfYWRkclszXSwKKwkJIChpbnQpa2F3ZXRoLT5jb25maWd1cmF0aW9uLmh3X2FkZHJbNF0sCisJCSAoaW50KWthd2V0aC0+Y29uZmlndXJhdGlvbi5od19hZGRyWzVdKTsKKworCWlmKCFtZW1jbXAoJmthd2V0aC0+Y29uZmlndXJhdGlvbi5od19hZGRyLAorICAgICAgICAgICAgICAgICAgICZiY2FzdF9hZGRyLAorCQkgICBzaXplb2YoYmNhc3RfYWRkcikpKSB7CisJCWthd2V0aF9lcnIoIkZpcm13YXJlIG5vdCBmdW5jdGlvbmluZyBwcm9wZXJseSwgbm8gbmV0IGRldmljZSBjcmVhdGVkIik7CisJCWdvdG8gZXJyX2ZyZWVfbmV0ZGV2OworCX0KKworCWlmKGthd2V0aF9zZXRfdXJiX3NpemUoa2F3ZXRoLCBLQVdFVEhfQlVGX1NJWkUpIDwgMCkgeworCQlrYXdldGhfZGJnKCJFcnJvciBzZXR0aW5nIFVSQiBzaXplIik7CisJCWdvdG8gZXJyX2ZyZWVfbmV0ZGV2OworCX0KKworCWlmKGthd2V0aF9zZXRfc29mc193YWl0KGthd2V0aCwgS0FXRVRIX1NPRlNfVE9fV0FJVCkgPCAwKSB7CisJCWthd2V0aF9lcnIoIkVycm9yIHNldHRpbmcgU09GUyB3YWl0Iik7CisJCWdvdG8gZXJyX2ZyZWVfbmV0ZGV2OworCX0KKworCXJlc3VsdCA9IGthd2V0aF9zZXRfcmVjZWl2ZV9maWx0ZXIoa2F3ZXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtBV0VUSF9QQUNLRVRfRklMVEVSX0RJUkVDVEVEIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLQVdFVEhfUEFDS0VUX0ZJTFRFUl9CUk9BRENBU1QgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtBV0VUSF9QQUNLRVRfRklMVEVSX01VTFRJQ0FTVCk7CisKKwlpZihyZXN1bHQgPCAwKSB7CisJCWthd2V0aF9lcnIoIkVycm9yIHNldHRpbmcgcmVjZWl2ZSBmaWx0ZXIiKTsKKwkJZ290byBlcnJfZnJlZV9uZXRkZXY7CisJfQorCisJa2F3ZXRoX2RiZygiSW5pdGlhbGl6aW5nIG5ldCBkZXZpY2UuIik7CisKKwlrYXdldGgtPnR4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFrYXdldGgtPnR4X3VyYikKKwkJZ290byBlcnJfZnJlZV9uZXRkZXY7CisJa2F3ZXRoLT5yeF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICgha2F3ZXRoLT5yeF91cmIpCisJCWdvdG8gZXJyX29ubHlfdHg7CisJa2F3ZXRoLT5pcnFfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWthd2V0aC0+aXJxX3VyYikKKwkJZ290byBlcnJfdHhfYW5kX3J4OworCisJa2F3ZXRoLT5pbnRidWZmZXIgPSB1c2JfYnVmZmVyX2FsbG9jKAlrYXdldGgtPmRldiwKKwkJCQkJCUlOVEJVRkZFUlNJWkUsCisJCQkJCQlHRlBfS0VSTkVMLAorCQkJCQkJJmthd2V0aC0+aW50YnVmZmVyaGFuZGxlKTsKKwlpZiAoIWthd2V0aC0+aW50YnVmZmVyKQorCQlnb3RvIGVycl90eF9hbmRfcnhfYW5kX2lycTsKKwlrYXdldGgtPnJ4X2J1ZiA9IHVzYl9idWZmZXJfYWxsb2MoCWthd2V0aC0+ZGV2LAorCQkJCQkJS0FXRVRIX0JVRl9TSVpFLAorCQkJCQkJR0ZQX0tFUk5FTCwKKwkJCQkJCSZrYXdldGgtPnJ4YnVmZmVyaGFuZGxlKTsKKwlpZiAoIWthd2V0aC0+cnhfYnVmKQorCQlnb3RvIGVycl9hbGxfYnV0X3J4YnVmOworCisJbWVtY3B5KG5ldGRldi0+YnJvYWRjYXN0LCAmYmNhc3RfYWRkciwgc2l6ZW9mKGJjYXN0X2FkZHIpKTsKKwltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgJmthd2V0aC0+Y29uZmlndXJhdGlvbi5od19hZGRyLAorICAgICAgICAgICAgICAgc2l6ZW9mKGthd2V0aC0+Y29uZmlndXJhdGlvbi5od19hZGRyKSk7CisKKwluZXRkZXYtPm9wZW4gPSBrYXdldGhfb3BlbjsKKwluZXRkZXYtPnN0b3AgPSBrYXdldGhfY2xvc2U7CisKKwluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gS0FXRVRIX1RYX1RJTUVPVVQ7CisJbmV0ZGV2LT50eF90aW1lb3V0ID0ga2F3ZXRoX3R4X3RpbWVvdXQ7CisKKwluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGthd2V0aF9zdGFydF94bWl0OworCW5ldGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0ga2F3ZXRoX3NldF9yeF9tb2RlOworCW5ldGRldi0+Z2V0X3N0YXRzID0ga2F3ZXRoX25ldGRldl9zdGF0czsKKwluZXRkZXYtPm10dSA9IGxlMTZfdG9fY3B1KGthd2V0aC0+Y29uZmlndXJhdGlvbi5zZWdtZW50X3NpemUpOworCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZvcHMpOworCisJLyoga2F3ZXRoIGlzIHplcm9lZCBhcyBwYXJ0IG9mIGFsbG9jX25ldGRldiAqLworCisJSU5JVF9XT1JLKCZrYXdldGgtPmxvd21lbV93b3JrLCBrYXdldGhfcmVzdWJtaXRfdGwsICh2b2lkICopa2F3ZXRoKTsKKworCVNFVF9NT0RVTEVfT1dORVIobmV0ZGV2KTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50Ziwga2F3ZXRoKTsKKworI2lmIDAKKy8vIGRtYV9zdXBwb3J0ZWQoKSBpcyBkZWVwbHkgYnJva2VuIG9uIGFsbW9zdCBhbGwgYXJjaGl0ZWN0dXJlcworCWlmIChkbWFfc3VwcG9ydGVkICgmaW50Zi0+ZGV2LCAweGZmZmZmZmZmZmZmZmZmZmZVTEwpKQorCQlrYXdldGgtPm5ldC0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOworI2VuZGlmCisKKwlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZpbnRmLT5kZXYpOworCWlmIChyZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KSAhPSAwKSB7CisJCWthd2V0aF9lcnIoIkVycm9yIHJlZ2lzdGVyaW5nIG5ldGRldi4iKTsKKwkJZ290byBlcnJfaW50ZmRhdGE7CisJfQorCisJa2F3ZXRoX2luZm8oImthd2V0aCBpbnRlcmZhY2UgY3JlYXRlZCBhdCAlcyIsIGthd2V0aC0+bmV0LT5uYW1lKTsKKworCWthd2V0aF9kYmcoIkthd2V0aCBwcm9iZSByZXR1cm5pbmcuIik7CisKKwlyZXR1cm4gMDsKKworZXJyX2ludGZkYXRhOgorCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJdXNiX2J1ZmZlcl9mcmVlKGthd2V0aC0+ZGV2LCBLQVdFVEhfQlVGX1NJWkUsICh2b2lkICopa2F3ZXRoLT5yeF9idWYsIGthd2V0aC0+cnhidWZmZXJoYW5kbGUpOworZXJyX2FsbF9idXRfcnhidWY6CisJdXNiX2J1ZmZlcl9mcmVlKGthd2V0aC0+ZGV2LCBJTlRCVUZGRVJTSVpFLCAodm9pZCAqKWthd2V0aC0+aW50YnVmZmVyLCBrYXdldGgtPmludGJ1ZmZlcmhhbmRsZSk7CitlcnJfdHhfYW5kX3J4X2FuZF9pcnE6CisJdXNiX2ZyZWVfdXJiKGthd2V0aC0+aXJxX3VyYik7CitlcnJfdHhfYW5kX3J4OgorCXVzYl9mcmVlX3VyYihrYXdldGgtPnJ4X3VyYik7CitlcnJfb25seV90eDoKKwl1c2JfZnJlZV91cmIoa2F3ZXRoLT50eF91cmIpOworZXJyX2ZyZWVfbmV0ZGV2OgorCWZyZWVfbmV0ZGV2KG5ldGRldik7CisKKwlyZXR1cm4gLUVJTzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfZGlzY29ubmVjdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBrYXdldGhfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCisJa2F3ZXRoX2luZm8oIlVucmVnaXN0ZXJpbmciKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJaWYgKCFrYXdldGgpIHsKKwkJa2F3ZXRoX3dhcm4oInVucmVnaXN0ZXJpbmcgbm9uLWV4aXN0YW50IGRldmljZSIpOworCQlyZXR1cm47CisJfQorCW5ldGRldiA9IGthd2V0aC0+bmV0OworCWthd2V0aC0+cmVtb3ZlZCA9IDE7CisJdXNiX2tpbGxfdXJiKGthd2V0aC0+aXJxX3VyYik7CisJdXNiX2tpbGxfdXJiKGthd2V0aC0+cnhfdXJiKTsKKwl1c2Jfa2lsbF91cmIoa2F3ZXRoLT50eF91cmIpOworCisJa2F3ZXRoX2RiZygiVW5yZWdpc3RlcmluZyBuZXQgZGV2aWNlIik7CisJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKKworCXVzYl9mcmVlX3VyYihrYXdldGgtPnJ4X3VyYik7CisJdXNiX2ZyZWVfdXJiKGthd2V0aC0+dHhfdXJiKTsKKwl1c2JfZnJlZV91cmIoa2F3ZXRoLT5pcnFfdXJiKTsKKworCXVzYl9idWZmZXJfZnJlZShrYXdldGgtPmRldiwgS0FXRVRIX0JVRl9TSVpFLCAodm9pZCAqKWthd2V0aC0+cnhfYnVmLCBrYXdldGgtPnJ4YnVmZmVyaGFuZGxlKTsKKwl1c2JfYnVmZmVyX2ZyZWUoa2F3ZXRoLT5kZXYsIElOVEJVRkZFUlNJWkUsICh2b2lkICopa2F3ZXRoLT5pbnRidWZmZXIsIGthd2V0aC0+aW50YnVmZmVyaGFuZGxlKTsKKworCWZyZWVfbmV0ZGV2KG5ldGRldik7Cit9CisKKworLy8gRklYTUUgdGhpcyBjb21wbGV0aW9uIHN0dWZmIGlzIGEgbW9kaWZpZWQgY2xvbmUgb2YKKy8vIGFuIE9MRCB2ZXJzaW9uIG9mIHNvbWUgc3R1ZmYgaW4gdXNiLmMgLi4uCitzdHJ1Y3QgdXNiX2FwaV9kYXRhIHsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cWg7CisJaW50IGRvbmU7Cit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIGNvbXBhdGliaWxpdHkgd3JhcHBlcnMgKHN5bmMgY29udHJvbC9idWxrKSAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgdXNiX2FwaV9ibG9ja2luZ19jb21wbGV0aW9uKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisgICAgICAgIHN0cnVjdCB1c2JfYXBpX2RhdGEgKmF3ZCA9IChzdHJ1Y3QgdXNiX2FwaV9kYXRhICopdXJiLT5jb250ZXh0OworCisJYXdkLT5kb25lPTE7CisJd2FrZV91cCgmYXdkLT53cWgpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBDT01QQVRJQklMSVRZIFNUVUZGICAgICAgICAgICAgICAgICAgICAgICAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvLyBTdGFydHMgdXJiIGFuZCB3YWl0cyBmb3IgY29tcGxldGlvbiBvciB0aW1lb3V0CitzdGF0aWMgaW50IHVzYl9zdGFydF93YWl0X3VyYihzdHJ1Y3QgdXJiICp1cmIsIGludCB0aW1lb3V0LCBpbnQqIGFjdHVhbF9sZW5ndGgpCit7CisJc3RydWN0IHVzYl9hcGlfZGF0YSBhd2Q7CisgICAgICAgIGludCBzdGF0dXM7CisKKyAgICAgICAgaW5pdF93YWl0cXVldWVfaGVhZCgmYXdkLndxaCk7CisgICAgICAgIGF3ZC5kb25lID0gMDsKKworICAgICAgICB1cmItPmNvbnRleHQgPSAmYXdkOworICAgICAgICBzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9OT0lPKTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nCisgICAgICAgICAgICAgICAgdXNiX2ZyZWVfdXJiKHVyYik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgfQorCisJaWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQoYXdkLndxaCwgYXdkLmRvbmUsIHRpbWVvdXQpKSB7CisgICAgICAgICAgICAgICAgLy8gdGltZW91dAorICAgICAgICAgICAgICAgIGthd2V0aF93YXJuKCJ1c2JfY29udHJvbC9idWxrX21zZzogdGltZW91dCIpOworICAgICAgICAgICAgICAgIHVzYl9raWxsX3VyYih1cmIpOyAgLy8gcmVtb3ZlIHVyYiBzYWZlbHkKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAtRVRJTUVET1VUOworICAgICAgICB9CisJZWxzZSB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gdXJiLT5zdGF0dXM7CisJfQorCisgICAgICAgIGlmIChhY3R1YWxfbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgKmFjdHVhbF9sZW5ndGggPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJfQorCisgICAgICAgIHVzYl9mcmVlX3VyYih1cmIpOworICAgICAgICByZXR1cm4gc3RhdHVzOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLy8gcmV0dXJucyBzdGF0dXMgKG5lZ2F0aXZlKSBvciBsZW5ndGggKHBvc2l0aXZlKQorc3RhdGljIGludCBrYXdldGhfaW50ZXJuYWxfY29udHJvbF9tc2coc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBwaXBlLAorCQkJCSAgICAgICBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjbWQsIHZvaWQgKmRhdGEsCisJCQkJICAgICAgIGludCBsZW4sIGludCB0aW1lb3V0KQoreworICAgICAgICBzdHJ1Y3QgdXJiICp1cmI7CisgICAgICAgIGludCByZXR2OworICAgICAgICBpbnQgbGVuZ3RoOworCisgICAgICAgIHVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX05PSU8pOworICAgICAgICBpZiAoIXVyYikKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKworICAgICAgICB1c2JfZmlsbF9jb250cm9sX3VyYih1cmIsIHVzYl9kZXYsIHBpcGUsICh1bnNpZ25lZCBjaGFyKiljbWQsIGRhdGEsCisJCQkgbGVuLCB1c2JfYXBpX2Jsb2NraW5nX2NvbXBsZXRpb24sIE5VTEwpOworCisgICAgICAgIHJldHYgPSB1c2Jfc3RhcnRfd2FpdF91cmIodXJiLCB0aW1lb3V0LCAmbGVuZ3RoKTsKKyAgICAgICAgaWYgKHJldHYgPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHY7CisJfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbGVuZ3RoOworCX0KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF9pbml0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgX19pbml0IGthd2V0aF9pbml0KHZvaWQpCit7CisJa2F3ZXRoX2RiZygiRHJpdmVyIGxvYWRpbmciKTsKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZrYXdldGhfZHJpdmVyKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfZXhpdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBfX2V4aXQga2F3ZXRoX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigma2F3ZXRoX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGthd2V0aF9pbml0KTsKK21vZHVsZV9leGl0KGthd2V0aF9leGl0KTsKKworCisKKworCisKKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9rYXdldGhmdy5oIGIvZHJpdmVycy91c2IvbmV0L2thd2V0aGZ3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y4NWZjYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL25ldC9rYXdldGhmdy5oCkBAIC0wLDAgKzEsNTU3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTk9URTogQjYvQzMgaXMgZGF0YSBoZWFkZXIgc2lnbmF0dXJlICAgKi8KKy8qICAgICAgIDB4QUEvMHhCQiBpcyBkYXRhIGxlbmd0aCA9IHRvdGFsICovCisvKiAgICAgICBieXRlcyAtIDcsIDB4Q0MgaXMgdHlwZSwgMHhERCBpcyAqLworLyogICAgICAgaW50ZXJydXB0IHRvIHVzZS4gICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX3RyaWdnZXJfY29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgX191OCBrYXdldGhfdHJpZ2dlcl9jb2RlW10gPSAKK3sKKyAgICAweEI2LCAweEMzLCAweEFBLCAweEJCLCAweENDLCAweERELAorICAgIDB4YzgsIDB4MDcsIDB4YTAsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4NWUsIDB4MDAsCisgICAgMHgwNiwgMHgwMCwgMHhmMCwgMHgwNywgMHgwYSwgMHgwMCwgMHgwOCwgMHgwMCwKKyAgICAweGYwLCAweDA5LCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweGU3LCAweDA3LAorICAgIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4MDAsCisgICAgMHgwNCwgMHgwMCwgMHhlNywgMHgwNywgMHg1MCwgMHhjMywgMHgxMCwgMHhjMCwKKyAgICAweGYwLCAweDA5LCAweDBlLCAweGMwLCAweDAwLCAweDAwLCAweGU3LCAweDg3LAorICAgIDB4MDEsIDB4MDAsIDB4MGUsIDB4YzAsIDB4OTcsIDB4Y2YsIDB4ZDcsIDB4MDksCisgICAgMHgwMCwgMHhjMCwgMHgxNywgMHgwMiwgMHhjOCwgMHgwNywgMHhhMCwgMHgwMCwKKyAgICAweGU3LCAweDE3LCAweDUwLCAweGMzLCAweDEwLCAweGMwLCAweDMwLCAweGQ4LAorICAgIDB4MDQsIDB4MDAsIDB4MzAsIDB4NWMsIDB4MDgsIDB4MDAsIDB4MDQsIDB4MDAsCisgICAgMHhiMCwgMHhjMCwgMHgwNiwgMHgwMCwgMHhjOCwgMHgwNSwgMHhlNywgMHgwNSwKKyAgICAweDAwLCAweGMwLCAweGMwLCAweGRmLCAweDk3LCAweGNmLCAweDQ5LCAweGFmLAorICAgIDB4YzAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NjAsIDB4YWYsIDB4NGEsIDB4YWYsCisgICAgMHgwMCwgMHgwYywgMHgwYywgMHgwMCwgMHg0MCwgMHhkMiwgMHgwMCwgMHgxYywKKyAgICAweDBjLCAweDAwLCAweDQwLCAweGQyLCAweDMwLCAweDAwLCAweDA4LCAweDAwLAorICAgIDB4ZjAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4ZjAsIDB4MDcsCisgICAgMHg4NiwgMHgwMCwgMHgwNiwgMHgwMCwgMHg2NywgMHhjZiwgMHgyNywgMHgwYywKKyAgICAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDI3LCAweDBjLCAweDAwLCAweDAwLAorICAgIDB4MGUsIDB4YzAsIDB4NDksIDB4YWYsIDB4NjQsIDB4YWYsIDB4YzAsIDB4MDcsCisgICAgMHgwMCwgMHgwMCwgMHg0YiwgMHhhZiwgMHg0YSwgMHhhZiwgMHg1YSwgMHhjZiwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDAsIDB4MDUsIDB4MDAsCisgICAgMHgwMCwgMHgwMAorfTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX3RyaWdnZXJfY29kZV9maXgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIF9fdTgga2F3ZXRoX3RyaWdnZXJfY29kZV9maXhbXSA9IAoreworICAgIDB4QjYsIDB4QzMsIDB4QUEsIDB4QkIsIDB4Q0MsIDB4REQsCisgICAgMHgwMiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwgMHgzZSwgMHgwMCwKKyAgICAweDgwLCAweDAwLCAweDk4LCAweDAwLCAweGFhLCAweDAwLAorICAgIDB4MDAsIDB4MDAKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX25ld19jb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBfX3U4IGthd2V0aF9uZXdfY29kZVtdID0gCit7CisgICAgMHhCNiwgMHhDMywgMHhBQSwgMHhCQiwgMHhDQywgMHhERCwKKyAgICAweDlmLCAweGNmLCAweGRlLCAweDA2LCAweGU3LCAweDU3LCAweDAwLCAweDAwLAorICAgIDB4YzQsIDB4MDYsIDB4OTcsIDB4YzEsIDB4ZTcsIDB4NjcsIDB4ZmYsIDB4MWYsCisgICAgMHgyOCwgMHhjMCwgMHhlNywgMHg4NywgMHgwMCwgMHgwNCwgMHgyNCwgMHhjMCwKKyAgICAweGU3LCAweDY3LCAweGZmLCAweGY5LCAweDIyLCAweGMwLCAweDk3LCAweGNmLAorICAgIDB4ZDcsIDB4MDksIDB4MDAsIDB4YzAsIDB4ZTcsIDB4MDksIDB4YTIsIDB4YzAsCisgICAgMHhiZSwgMHgwNiwgMHg5ZiwgMHhhZiwgMHgzNiwgMHgwMCwgMHhlNywgMHgwNSwKKyAgICAweDAwLCAweGMwLCAweGE3LCAweGNmLCAweGJjLCAweDA2LCAweDk3LCAweGNmLAorICAgIDB4ZTcsIDB4NTcsIDB4MDAsIDB4MDAsIDB4YjgsIDB4MDYsIDB4YTcsIDB4YTEsCisgICAgMHhiOCwgMHgwNiwgMHg5NywgMHhjZiwgMHhlNywgMHg1NywgMHgwMCwgMHgwMCwKKyAgICAweDE0LCAweDA4LCAweDBhLCAweGMwLCAweGU3LCAweDU3LCAweDAwLCAweDAwLAorICAgIDB4YTQsIDB4YzAsIDB4YTcsIDB4YzAsIDB4N2EsIDB4MDYsIDB4OWYsIDB4YWYsCisgICAgMHg5MiwgMHgwNywgMHhlNywgMHgwNywgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwKKyAgICAweGU3LCAweDU3LCAweGZmLCAweGZmLCAweGJhLCAweDA2LCAweDlmLCAweGEwLAorICAgIDB4MzgsIDB4MDAsIDB4ZTcsIDB4NTksIDB4YmEsIDB4MDYsIDB4YmUsIDB4MDYsCisgICAgMHg5ZiwgMHhhMCwgMHgzOCwgMHgwMCwgMHhjOCwgMHgwOSwgMHhjYSwgMHgwNiwKKyAgICAweDA4LCAweDYyLCAweDlmLCAweGExLCAweDM2LCAweDA4LCAweGMwLCAweDA5LAorICAgIDB4NzYsIDB4MDYsIDB4MDAsIDB4NjAsIDB4YTcsIDB4YzAsIDB4N2EsIDB4MDYsCisgICAgMHg5ZiwgMHhhZiwgMHhjYywgMHgwMiwgMHhlNywgMHg1NywgMHgwMCwgMHgwMCwKKyAgICAweGI4LCAweDA2LCAweGE3LCAweGMxLCAweDdhLCAweDA2LCAweDlmLCAweGFmLAorICAgIDB4MDQsIDB4MDAsIDB4ZTcsIDB4NTcsIDB4MDAsIDB4MDAsIDB4OGUsIDB4MDYsCisgICAgMHgwYSwgMHhjMSwgMHhlNywgMHgwOSwgMHgyMCwgMHhjMCwgMHgxMCwgMHgwOCwKKyAgICAweGU3LCAweGQwLCAweDEwLCAweDA4LCAweGU3LCAweDY3LCAweDQwLCAweDAwLAorICAgIDB4MTAsIDB4MDgsIDB4OWYsIDB4YWYsIDB4OTIsIDB4MGMsIDB4YzAsIDB4MDksCisgICAgMHhkMCwgMHgwNiwgMHgwMCwgMHg2MCwgMHgwNSwgMHhjNCwgMHhjMCwgMHg1OSwKKyAgICAweGJlLCAweDA2LCAweDAyLCAweGMwLCAweDlmLCAweGFmLCAweGVjLCAweDAwLAorICAgIDB4OWYsIDB4YWYsIDB4MzQsIDB4MDIsIDB4ZTcsIDB4NTcsIDB4MDAsIDB4MDAsCisgICAgMHhhNiwgMHgwNiwgMHg5ZiwgMHhhMCwgMHg3YSwgMHgwMiwgMHhhNywgMHhjZiwKKyAgICAweDdhLCAweDA2LCAweDQ4LCAweDAyLCAweGU3LCAweDA5LCAweGJlLCAweDA2LAorICAgIDB4ZDAsIDB4MDYsIDB4YzgsIDB4MzcsIDB4MDQsIDB4MDAsIDB4OWYsIDB4YWYsCisgICAgMHgwOCwgMHgwMywgMHg5NywgMHhjZiwgMHhlNywgMHg1NywgMHgwMCwgMHgwMCwKKyAgICAweGNlLCAweDA2LCAweDk3LCAweGMwLCAweGQ3LCAweDA5LCAweDAwLCAweGMwLAorICAgIDB4YzEsIDB4ZGYsIDB4YzgsIDB4MDksIDB4YzYsIDB4MDYsIDB4MDgsIDB4NjIsCisgICAgMHgxNCwgMHhjMCwgMHgyNywgMHgwNCwgMHhjNiwgMHgwNiwgMHgxMCwgMHg5NCwKKyAgICAweGYwLCAweDA3LCAweDEwLCAweDA4LCAweDAyLCAweDAwLCAweGMxLCAweDA3LAorICAgIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4ZjAsIDB4MDcsCisgICAgMHgzMCwgMHgwMSwgMHgwNiwgMHgwMCwgMHg1MCwgMHhhZiwgMHhlNywgMHgwNywKKyAgICAweGZmLCAweGZmLCAweGQwLCAweDA2LCAweGU3LCAweDA3LCAweDAwLCAweDAwLAorICAgIDB4Y2UsIDB4MDYsIDB4ZTcsIDB4MDUsIDB4MDAsIDB4YzAsIDB4OTcsIDB4Y2YsCisgICAgMHhkNywgMHgwOSwgMHgwMCwgMHhjMCwgMHhjMSwgMHhkZiwgMHg0OCwgMHgwMiwKKyAgICAweGQwLCAweDA5LCAweGM2LCAweDA2LCAweDI3LCAweDAyLCAweGM2LCAweDA2LAorICAgIDB4ZTcsIDB4MDUsIDB4MDAsIDB4YzAsIDB4OTcsIDB4Y2YsIDB4NDgsIDB4MDIsCisgICAgMHhjOCwgMHgzNywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwYywgMHgwMCwKKyAgICAweDAwLCAweDYwLCAweDIxLCAweGMwLCAweGMwLCAweDM3LCAweDNlLCAweDAwLAorICAgIDB4MjMsIDB4YzksIDB4YzAsIDB4NTcsIDB4YjQsIDB4MDUsIDB4MWIsIDB4YzgsCisgICAgMHhjMCwgMHgxNywgMHgzZiwgMHgwMCwgMHhjMCwgMHg2NywgMHhjMCwgMHhmZiwKKyAgICAweDMwLCAweDAwLCAweDA4LCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDAwLAorICAgIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDIsIDB4YzAsIDB4MTcsIDB4NGMsIDB4MDAsCisgICAgMHgzMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHhmMCwgMHgwNywgMHhhMCwgMHgwMSwKKyAgICAweDBhLCAweDAwLCAweDQ4LCAweDAyLCAweGMxLCAweDA3LCAweDAyLCAweDAwLAorICAgIDB4ZDcsIDB4MDksIDB4MDAsIDB4YzAsIDB4YzEsIDB4ZGYsIDB4NTEsIDB4YWYsCisgICAgMHhlNywgMHgwNSwgMHgwMCwgMHhjMCwgMHg5NywgMHhjZiwgMHg5ZiwgMHhhZiwKKyAgICAweDA4LCAweDAzLCAweDlmLCAweGFmLCAweDdhLCAweDAyLCAweDk3LCAweGNmLAorICAgIDB4OWYsIDB4YWYsIDB4N2EsIDB4MDIsIDB4YzksIDB4MzcsIDB4MDQsIDB4MDAsCisgICAgMHhjMSwgMHhkZiwgMHhjOCwgMHgwOSwgMHhhMiwgMHgwNiwgMHg1MCwgMHgwMiwKKyAgICAweDY3LCAweDAyLCAweGEyLCAweDA2LCAweGQxLCAweDA3LCAweDAwLCAweDAwLAorICAgIDB4MjcsIDB4ZDgsIDB4YWEsIDB4MDYsIDB4YzAsIDB4ZGYsIDB4OWYsIDB4YWYsCisgICAgMHhjNCwgMHgwMSwgMHg5NywgMHhjZiwgMHhlNywgMHg1NywgMHgwMCwgMHgwMCwKKyAgICAweGQyLCAweDA2LCAweDk3LCAweGMxLCAweGU3LCAweDU3LCAweDAxLCAweDAwLAorICAgIDB4YTgsIDB4MDYsIDB4OTcsIDB4YzAsIDB4YzgsIDB4MDksIDB4YTAsIDB4MDYsCisgICAgMHgwOCwgMHg2MiwgMHg5NywgMHhjMCwgMHgwMCwgMHgwMiwgMHhjMCwgMHgxNywKKyAgICAweDBlLCAweDAwLCAweDI3LCAweDAwLCAweDM0LCAweDAxLCAweDI3LCAweDBjLAorICAgIDB4MGMsIDB4MDAsIDB4MzYsIDB4MDEsIDB4ZTcsIDB4MDcsIDB4NTAsIDB4YzMsCisgICAgMHgxMiwgMHhjMCwgMHhlNywgMHgwNywgMHhjYywgMHgwYiwgMHgwMiwgMHgwMCwKKyAgICAweGU3LCAweDA3LCAweDAxLCAweDAwLCAweGE4LCAweDA2LCAweGU3LCAweDA3LAorICAgIDB4MDUsIDB4MDAsIDB4OTAsIDB4YzAsIDB4OTcsIDB4Y2YsIDB4YzgsIDB4MDksCisgICAgMHhhNCwgMHgwNiwgMHgwOCwgMHg2MiwgMHgwMiwgMHhjMCwgMHgxMCwgMHg2NCwKKyAgICAweDA3LCAweGMxLCAweGU3LCAweDA3LCAweDAwLCAweDAwLCAweDllLCAweDA2LAorICAgIDB4ZTcsIDB4MDcsIDB4NzIsIDB4MDQsIDB4MjQsIDB4MDAsIDB4OTcsIDB4Y2YsCisgICAgMHgyNywgMHgwNCwgMHhhNCwgMHgwNiwgMHhjOCwgMHgxNywgMHgwZSwgMHgwMCwKKyAgICAweDI3LCAweDAyLCAweDllLCAweDA2LCAweGU3LCAweDA3LCAweDgwLCAweDA0LAorICAgIDB4MjQsIDB4MDAsIDB4OTcsIDB4Y2YsIDB4ZDcsIDB4MDksIDB4MDAsIDB4YzAsCisgICAgMHhjMSwgMHhkZiwgMHhlNywgMHg1NywgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNiwKKyAgICAweDEzLCAweGMxLCAweDlmLCAweGFmLCAweDA2LCAweDAyLCAweGU3LCAweDU3LAorICAgIDB4MDAsIDB4MDAsIDB4OWUsIDB4MDYsIDB4MTMsIDB4YzAsIDB4ZTcsIDB4MDksCisgICAgMHg5ZSwgMHgwNiwgMHgzMCwgMHgwMSwgMHhlNywgMHgwNywgMHhmMiwgMHgwNSwKKyAgICAweDMyLCAweDAxLCAweGU3LCAweDA3LCAweDEwLCAweDAwLCAweDk2LCAweGMwLAorICAgIDB4ZTcsIDB4MDksIDB4OWUsIDB4MDYsIDB4OTAsIDB4MDYsIDB4MDQsIDB4Y2YsCisgICAgMHhlNywgMHg1NywgMHgwMCwgMHgwMCwgMHg5ZSwgMHgwNiwgMHgwMiwgMHhjMSwKKyAgICAweDlmLCAweGFmLCAweDA2LCAweDAyLCAweGU3LCAweDA1LCAweDAwLCAweGMwLAorICAgIDB4OTcsIDB4Y2YsIDB4ZDcsIDB4MDksIDB4MDAsIDB4YzAsIDB4YzEsIDB4ZGYsCisgICAgMHgwOCwgMHg5MiwgMHhlNywgMHg1NywgMHgwMiwgMHgwMCwgMHhhYSwgMHgwNiwKKyAgICAweDAyLCAweGMzLCAweGM4LCAweDA5LCAweGE0LCAweDA2LCAweDI3LCAweDAyLAorICAgIDB4YTYsIDB4MDYsIDB4MDgsIDB4NjIsIDB4MDMsIDB4YzEsIDB4ZTcsIDB4MDUsCisgICAgMHgwMCwgMHhjMCwgMHg5NywgMHhjZiwgMHgyNywgMHgwNCwgMHhhNCwgMHgwNiwKKyAgICAweGU3LCAweDA1LCAweDAwLCAweGMwLCAweGYwLCAweDA3LCAweDQwLCAweDAwLAorICAgIDB4MDgsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCisgICAgMHgwMCwgMHgwMiwgMHhjMCwgMHgxNywgMHgwYywgMHgwMCwgMHgzMCwgMHgwMCwKKyAgICAweDA2LCAweDAwLCAweGYwLCAweDA3LCAweDQ2LCAweDAxLCAweDBhLCAweDAwLAorICAgIDB4YzgsIDB4MTcsIDB4MDQsIDB4MDAsIDB4YzEsIDB4MDcsIDB4MDIsIDB4MDAsCisgICAgMHg1MSwgMHhhZiwgMHg5NywgMHhjZiwgMHhlNywgMHg1NywgMHgwMCwgMHgwMCwKKyAgICAweDk2LCAweDA2LCAweDk3LCAweGMwLCAweGMxLCAweGRmLCAweGM4LCAweDA5LAorICAgIDB4OTYsIDB4MDYsIDB4MjcsIDB4MDQsIDB4OTYsIDB4MDYsIDB4MjcsIDB4NTIsCisgICAgMHg5OCwgMHgwNiwgMHgwMywgMHhjMSwgMHhlNywgMHgwNywgMHg5NiwgMHgwNiwKKyAgICAweDk4LCAweDA2LCAweGMwLCAweGRmLCAweDE3LCAweDAyLCAweGM4LCAweDE3LAorICAgIDB4MGUsIDB4MDAsIDB4OWYsIDB4YWYsIDB4YmEsIDB4MDMsIDB4YzgsIDB4MDUsCisgICAgMHgwMCwgMHg2MCwgMHgwMywgMHhjMCwgMHg5ZiwgMHhhZiwgMHgyNCwgMHgwMywKKyAgICAweDk3LCAweGNmLCAweDlmLCAweGFmLCAweDA4LCAweDAzLCAweDk3LCAweGNmLAorICAgIDB4NTcsIDB4MDIsIDB4YzksIDB4MDcsIDB4YTQsIDB4MDYsIDB4ZDcsIDB4MDksCisgICAgMHgwMCwgMHhjMCwgMHhjMSwgMHhkZiwgMHgwOCwgMHg2MiwgMHgxYiwgMHhjMCwKKyAgICAweDUwLCAweDA0LCAweDExLCAweDAyLCAweGU3LCAweDA1LCAweDAwLCAweGMwLAorICAgIDB4YzksIDB4MDUsIDB4OTcsIDB4Y2YsIDB4OTcsIDB4MDIsIDB4Y2EsIDB4MDksCisgICAgMHhkNiwgMHgwNiwgMHhmMiwgMHgxNywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwKKyAgICAweGYyLCAweDI3LCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweGNhLCAweDE3LAorICAgIDB4MmMsIDB4MDAsIDB4ZjgsIDB4NzcsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsCisgICAgMHgwNiwgMHhjMCwgMHhjYSwgMHhkOSwgMHhmOCwgMHg1NywgMHhmZiwgMHgwMCwKKyAgICAweDBlLCAweDAwLCAweDAxLCAweGMxLCAweGNhLCAweGQ5LCAweDIyLCAweDFjLAorICAgIDB4MGMsIDB4MDAsIDB4ZTIsIDB4MjcsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4MTcsCisgICAgMHgwMSwgMHgwMCwgMHhlMiwgMHgyNywgMHgwMCwgMHgwMCwgMHhjYSwgMHgwNSwKKyAgICAweDAwLCAweDBjLCAweDBjLCAweDAwLCAweGMwLCAweDE3LCAweDQxLCAweDAwLAorICAgIDB4YzAsIDB4NjcsIDB4YzAsIDB4ZmYsIDB4MzAsIDB4MDAsIDB4MDgsIDB4MDAsCisgICAgMHgwMCwgMHgwMiwgMHhjMCwgMHgxNywgMHgwYywgMHgwMCwgMHgzMCwgMHgwMCwKKyAgICAweDA2LCAweDAwLCAweGYwLCAweDA3LCAweGRhLCAweDAwLCAweDBhLCAweDAwLAorICAgIDB4ZjAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MGMsCisgICAgMHgwOCwgMHgwMCwgMHg0MCwgMHhkMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgxOSwKKyAgICAweGNlLCAweDA2LCAweGMwLCAweDU5LCAweGMyLCAweDA2LCAweDA0LCAweGM5LAorICAgIDB4NDksIDB4YWYsIDB4OWYsIDB4YWYsIDB4ZWMsIDB4MDAsIDB4NGEsIDB4YWYsCisgICAgMHg2NywgMHgxMCwgMHhjZSwgMHgwNiwgMHhjOCwgMHgxNywgMHgwNCwgMHgwMCwKKyAgICAweGMxLCAweDA3LCAweDAxLCAweDAwLCAweGQ3LCAweDA5LCAweDAwLCAweGMwLAorICAgIDB4YzEsIDB4ZGYsIDB4NTAsIDB4YWYsIDB4ZTcsIDB4MDUsIDB4MDAsIDB4YzAsCisgICAgMHg5NywgMHhjZiwgMHhjMCwgMHgwNywgMHgwMSwgMHgwMCwgMHhjMSwgMHgwOSwKKyAgICAweGFjLCAweDA2LCAweGMxLCAweDc3LCAweDAxLCAweDAwLCAweDk3LCAweGMxLAorICAgIDB4ZDgsIDB4NzcsIDB4MDEsIDB4MDAsIDB4MTIsIDB4YzAsIDB4YzksIDB4MDcsCisgICAgMHg2YSwgMHgwNiwgMHg5ZiwgMHhhZiwgMHgwOCwgMHgwNCwgMHgwNCwgMHhjMSwKKyAgICAweGMxLCAweDc3LCAweDA4LCAweDAwLCAweDEzLCAweGMwLCAweDk3LCAweGNmLAorICAgIDB4YzEsIDB4NzcsIDB4MDIsIDB4MDAsIDB4OTcsIDB4YzEsIDB4YzEsIDB4NzcsCisgICAgMHgxMCwgMHgwMCwgMHgwYywgMHhjMCwgMHg5ZiwgMHhhZiwgMHgyYywgMHgwNCwKKyAgICAweDk3LCAweGNmLCAweGMxLCAweDc3LCAweDA0LCAweDAwLCAweDA2LCAweGMwLAorICAgIDB4YzksIDB4MDcsIDB4NzAsIDB4MDYsIDB4OWYsIDB4YWYsIDB4MDgsIDB4MDQsCisgICAgMHg5NywgMHhjMCwgMHgwMCwgMHhjZiwgMHgwMCwgMHg5MCwgMHg5NywgMHhjZiwKKyAgICAweDUwLCAweDU0LCAweDk3LCAweGMxLCAweDcwLCAweDVjLCAweDAyLCAweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4OTcsIDB4YzEsIDB4NzAsIDB4NWMsIDB4MDQsIDB4MDAsCisgICAgMHgwNCwgMHgwMCwgMHg5NywgMHhjZiwgMHg4MCwgMHgwMSwgMHhjMCwgMHgwMCwKKyAgICAweDYwLCAweDAwLCAweDMwLCAweDAwLCAweDE4LCAweDAwLCAweDBjLCAweDAwLAorICAgIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4MDksIDB4YjIsIDB4MDYsCisgICAgMHhjYywgMHgwOSwgMHhiNCwgMHgwNiwgMHgwYiwgMHg1MywgMHgxMSwgMHhjMCwKKyAgICAweGM5LCAweDAyLCAweGNhLCAweDA3LCAweDFjLCAweDA0LCAweDlmLCAweGFmLAorICAgIDB4MDgsIDB4MDQsIDB4OTcsIDB4YzAsIDB4MGEsIDB4YzgsIDB4ODIsIDB4MDgsCisgICAgMHgwYSwgMHhjZiwgMHg4MiwgMHgwOCwgMHg5ZiwgMHhhZiwgMHgwOCwgMHgwNCwKKyAgICAweDk3LCAweGMwLCAweDA1LCAweGMyLCAweDg5LCAweDMwLCAweDgyLCAweDYwLAorICAgIDB4NzgsIDB4YzEsIDB4MDAsIDB4OTAsIDB4OTcsIDB4Y2YsIDB4ODksIDB4MTAsCisgICAgMHgwOSwgMHg1MywgMHg3OSwgMHhjMiwgMHg4OSwgMHgzMCwgMHg4MiwgMHgwOCwKKyAgICAweDdhLCAweGNmLCAweGMwLCAweGRmLCAweDk3LCAweGNmLCAweGMwLCAweGRmLAorICAgIDB4OTcsIDB4Y2YsIDB4ZTcsIDB4MDksIDB4OTYsIDB4YzAsIDB4OTIsIDB4MDYsCisgICAgMHhlNywgMHgwOSwgMHg5OCwgMHhjMCwgMHg5NCwgMHgwNiwgMHgwZiwgMHhjZiwKKyAgICAweGU3LCAweDA5LCAweDk2LCAweGMwLCAweDkyLCAweDA2LCAweGU3LCAweDA5LAorICAgIDB4OTgsIDB4YzAsIDB4OTQsIDB4MDYsIDB4ZTcsIDB4MDksIDB4OWUsIDB4MDYsCisgICAgMHgzMCwgMHgwMSwgMHhlNywgMHgwNywgMHhmMiwgMHgwNSwgMHgzMiwgMHgwMSwKKyAgICAweGU3LCAweDA3LCAweDEwLCAweDAwLCAweDk2LCAweGMwLCAweGQ3LCAweDA5LAorICAgIDB4MDAsIDB4YzAsIDB4MTcsIDB4MDIsIDB4YzgsIDB4MDksIDB4OTAsIDB4MDYsCisgICAgMHhjOCwgMHgzNywgMHgwZSwgMHgwMCwgMHhlNywgMHg3NywgMHgyYSwgMHgwMCwKKyAgICAweDkyLCAweDA2LCAweDMwLCAweGMwLCAweDk3LCAweDAyLCAweGNhLCAweDA5LAorICAgIDB4ZDYsIDB4MDYsIDB4ZTcsIDB4NzcsIDB4MjAsIDB4MDAsIDB4OTIsIDB4MDYsCisgICAgMHgwZSwgMHhjMCwgMHhmMiwgMHgxNywgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwKKyAgICAweGYyLCAweDI3LCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweGU3LCAweDc3LAorICAgIDB4MGEsIDB4MDAsIDB4OTIsIDB4MDYsIDB4Y2EsIDB4MDUsIDB4MWUsIDB4YzAsCisgICAgMHg5NywgMHgwMiwgMHhjYSwgMHgwOSwgMHhkNiwgMHgwNiwgMHhmMiwgMHgxNywKKyAgICAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweGYyLCAweDI3LCAweDAwLCAweDAwLAorICAgIDB4MGUsIDB4MDAsIDB4ZTcsIDB4NzcsIDB4MDIsIDB4MDAsIDB4OTIsIDB4MDYsCisgICAgMHgwNywgMHhjMCwgMHhmMiwgMHgxNywgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMCwKKyAgICAweGYyLCAweDI3LCAweDAwLCAweDAwLCAweDQ2LCAweDAwLCAweDA2LCAweGNmLAorICAgIDB4ZjIsIDB4MTcsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDAsIDB4ZjIsIDB4MjcsCisgICAgMHgwMCwgMHgwMCwgMHg2MiwgMHgwMCwgMHhjYSwgMHgwNSwgMHg5ZiwgMHhhZiwKKyAgICAweDA4LCAweDAzLCAweDBmLCAweGNmLCAweDU3LCAweDAyLCAweDA5LCAweDAyLAorICAgIDB4ZjEsIDB4MDksIDB4OTQsIDB4MDYsIDB4MGMsIDB4MDAsIDB4ZjEsIDB4ZGEsCisgICAgMHgwYywgMHgwMCwgMHhjOCwgMHgwOSwgMHg5OCwgMHgwNiwgMHg1MCwgMHgwMiwKKyAgICAweDY3LCAweDAyLCAweDk4LCAweDA2LCAweGQxLCAweDA3LCAweDAwLCAweDAwLAorICAgIDB4YzksIDB4MDUsIDB4ZTcsIDB4MDksIDB4OWUsIDB4MDYsIDB4OTAsIDB4MDYsCisgICAgMHhlNywgMHg1NywgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNiwgMHgwMiwgMHhjMCwKKyAgICAweDlmLCAweGFmLCAweDA2LCAweDAyLCAweGM4LCAweDA1LCAweGU3LCAweDA1LAorICAgIDB4MDAsIDB4YzAsIDB4YzAsIDB4ZGYsIDB4OTcsIDB4Y2YsIDB4ZDcsIDB4MDksCisgICAgMHgwMCwgMHhjMCwgMHgxNywgMHgwMCwgMHgxNywgMHgwMiwgMHg5NywgMHgwMiwKKyAgICAweGMwLCAweDA5LCAweDkyLCAweGMwLCAweGU3LCAweDA3LCAweDA0LCAweDAwLAorICAgIDB4OTAsIDB4YzAsIDB4Y2EsIDB4MDksIDB4ZDYsIDB4MDYsIDB4ZTcsIDB4MDcsCisgICAgMHgwMCwgMHgwMCwgMHhhOCwgMHgwNiwgMHhlNywgMHgwNywgMHg2YSwgMHgwNCwKKyAgICAweDAyLCAweDAwLCAweGMwLCAweDc3LCAweDAyLCAweDAwLCAweDA4LCAweGMwLAorICAgIDB4ZjIsIDB4MTcsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDAsIDB4ZjIsIDB4MjcsCisgICAgMHgwMCwgMHgwMCwgMHg1MiwgMHgwMCwgMHg5ZiwgMHhjZiwgMHgyNCwgMHgwNiwKKyAgICAweGMwLCAweDc3LCAweDEwLCAweDAwLCAweDA2LCAweGMwLCAweGYyLCAweDE3LAorICAgIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDAsIDB4ZjIsIDB4MjcsIDB4MDAsIDB4MDAsCisgICAgMHg1YSwgMHgwMCwgMHhjMCwgMHg3NywgMHg4MCwgMHgwMCwgMHgwNiwgMHhjMCwKKyAgICAweGYyLCAweDE3LCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweGYyLCAweDI3LAorICAgIDB4MDAsIDB4MDAsIDB4NzIsIDB4MDAsIDB4YzAsIDB4NzcsIDB4MDgsIDB4MDAsCisgICAgMHgxZCwgMHhjMSwgMHhmMiwgMHgxNywgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwKKyAgICAweGYyLCAweDI3LCAweDAwLCAweDAwLCAweDBhLCAweDAwLCAweGMwLCAweDc3LAorICAgIDB4MDAsIDB4MDIsIDB4MDYsIDB4YzAsIDB4ZjIsIDB4MTcsIDB4MDEsIDB4MDAsCisgICAgMHg2NCwgMHgwMCwgMHhmMiwgMHgyNywgMHgwMCwgMHgwMCwgMHg2NiwgMHgwMCwKKyAgICAweGMwLCAweDc3LCAweDQwLCAweDAwLCAweDA2LCAweGMwLCAweGYyLCAweDE3LAorICAgIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDAsIDB4ZjIsIDB4MjcsIDB4MDAsIDB4MDAsCisgICAgMHg1ZSwgMHgwMCwgMHhjMCwgMHg3NywgMHgwMSwgMHgwMCwgMHgwMSwgMHhjMCwKKyAgICAweDFiLCAweGNmLCAweDFhLCAweGNmLCAweGYyLCAweDE3LCAweDAxLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MjcsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsCisgICAgMHhjOCwgMHgwOSwgMHgzNCwgMHgwMSwgMHhjYSwgMHgxNywgMHgxNCwgMHgwMCwKKyAgICAweGQ4LCAweDc3LCAweDAxLCAweDAwLCAweDA1LCAweGMwLCAweGNhLCAweGQ5LAorICAgIDB4ZDgsIDB4NTcsIDB4ZmYsIDB4MDAsIDB4MDEsIDB4YzAsIDB4Y2EsIDB4ZDksCisgICAgMHhlMiwgMHgxOSwgMHg5NCwgMHhjMCwgMHhlMiwgMHgyNywgMHgwMCwgMHgwMCwKKyAgICAweGUyLCAweDE3LCAweDAxLCAweDAwLCAweGUyLCAweDI3LCAweDAwLCAweDAwLAorICAgIDB4OWYsIDB4YWYsIDB4NDAsIDB4MDYsIDB4OWYsIDB4YWYsIDB4YzQsIDB4MDEsCisgICAgMHhlNywgMHg1NywgMHgwMCwgMHgwMCwgMHhkMiwgMHgwNiwgMHg5ZiwgMHhhMSwKKyAgICAweDBlLCAweDBhLCAweGNhLCAweDA1LCAweGM4LCAweDA1LCAweGMwLCAweDA1LAorICAgIDB4ZTcsIDB4MDUsIDB4MDAsIDB4YzAsIDB4YzAsIDB4ZGYsIDB4OTcsIDB4Y2YsCisgICAgMHhjOCwgMHgwOSwgMHhhMCwgMHgwNiwgMHgwOCwgMHg2MiwgMHg5NywgMHhjMCwKKyAgICAweDI3LCAweDA0LCAweGEwLCAweDA2LCAweDI3LCAweDUyLCAweGEyLCAweDA2LAorICAgIDB4MDMsIDB4YzEsIDB4ZTcsIDB4MDcsIDB4YTAsIDB4MDYsIDB4YTIsIDB4MDYsCisgICAgMHg5ZiwgMHhhZiwgMHgwOCwgMHgwMywgMHhlNywgMHg1NywgMHgwMCwgMHgwMCwKKyAgICAweGFhLCAweDA2LCAweDAyLCAweGMwLCAweDI3LCAweGRhLCAweGFhLCAweDA2LAorICAgIDB4OTcsIDB4Y2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHhmZiwgMHhmZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZiLCAweDEzLCAweGU3LCAweDU3LAorICAgIDB4MDAsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDYsIDB4YzIsIDB4ZTcsIDB4MDcsCisgICAgMHhlZSwgMHgwYiwgMHgxMiwgMHgwMCwgMHhlNywgMHgwNywgMHgzNCwgMHgwYywKKyAgICAweGIyLCAweDAwLCAweGU3LCAweDA3LCAweGM2LCAweDA3LCAweGYyLCAweDAyLAorICAgIDB4YzgsIDB4MDksIDB4YjQsIDB4MDAsIDB4ZjgsIDB4MDcsIDB4MDIsIDB4MDAsCisgICAgMHgwZCwgMHgwMCwgMHhkNywgMHgwOSwgMHgwZSwgMHhjMCwgMHhlNywgMHgwNywKKyAgICAweDAwLCAweDAwLCAweDBlLCAweGMwLCAweGM4LCAweDA5LCAweGRlLCAweDAwLAorICAgIDB4YzgsIDB4MTcsIDB4MDksIDB4MDAsIDB4YzksIDB4MDcsIDB4ZGEsIDB4MDYsCisgICAgMHhjMCwgMHgwNywgMHgwNCwgMHgwMCwgMHg2OCwgMHgwYSwgMHgwMCwgMHhkYSwKKyAgICAweDdkLCAweGMxLCAweGU3LCAweDA5LCAweGMwLCAweDAwLCAweDdjLCAweDA2LAorICAgIDB4ZTcsIDB4MDksIDB4YmUsIDB4MDAsIDB4NzgsIDB4MDYsIDB4ZTcsIDB4MDksCisgICAgMHgxMCwgMHgwMCwgMHhiYywgMHgwNiwgMHhjOCwgMHgwNywgMHhkNiwgMHgwNywKKyAgICAweDlmLCAweGFmLCAweGFlLCAweDA3LCAweDlmLCAweGFmLCAweDAwLCAweDBhLAorICAgIDB4YzgsIDB4MDksIDB4ZGUsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MGYsIDB4MDAsCisgICAgMHg0MSwgMHg5MCwgMHg5ZiwgMHhkZSwgMHgwNiwgMHgwMCwgMHg0NCwgMHhhZiwKKyAgICAweDI3LCAweDAwLCAweGIyLCAweDA2LCAweDI3LCAweDAwLCAweGI0LCAweDA2LAorICAgIDB4MjcsIDB4MDAsIDB4YjYsIDB4MDYsIDB4YzAsIDB4MDcsIDB4NzQsIDB4MDAsCisgICAgMHg0NCwgMHhhZiwgMHgyNywgMHgwMCwgMHhkNiwgMHgwNiwgMHgwOCwgMHgwMCwKKyAgICAweDAwLCAweDkwLCAweGMxLCAweDA3LCAweDNhLCAweDAwLCAweDIwLCAweDAwLAorICAgIDB4MDEsIDB4ZGEsIDB4N2QsIDB4YzEsIDB4OWYsIDB4YWYsIDB4YmEsIDB4MDksCisgICAgMHhjMCwgMHgwNywgMHg0NCwgMHgwMCwgMHg0OCwgMHhhZiwgMHgyNywgMHgwMCwKKyAgICAweDdhLCAweDA2LCAweDlmLCAweGFmLCAweDk2LCAweDBhLCAweGU3LCAweDA3LAorICAgIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDYsIDB4ZTcsIDB4MDUsIDB4MGUsIDB4YzAsCisgICAgMHg5NywgMHhjZiwgMHg0OSwgMHhhZiwgMHhlNywgMHg4NywgMHg0MywgMHgwMCwKKyAgICAweDBlLCAweGMwLCAweGU3LCAweDA3LCAweGZmLCAweGZmLCAweGJlLCAweDA2LAorICAgIDB4OWYsIDB4YWYsIDB4YWUsIDB4MGEsIDB4YzAsIDB4MDcsIDB4MDEsIDB4MDAsCisgICAgMHg2MCwgMHhhZiwgMHg0YSwgMHhhZiwgMHg5NywgMHhjZiwgMHgwMCwgMHgwOCwKKyAgICAweDA5LCAweDA4LCAweDExLCAweDA4LCAweDAwLCAweGRhLCAweDdjLCAweGMxLAorICAgIDB4OTcsIDB4Y2YsIDB4NjcsIDB4MDQsIDB4Y2MsIDB4MDIsIDB4YzAsIDB4ZGYsCisgICAgMHg1MSwgMHg5NCwgMHhiMSwgMHhhZiwgMHgwNiwgMHgwMCwgMHhjMSwgMHhkZiwKKyAgICAweGM5LCAweDA5LCAweGNjLCAweDAyLCAweDQ5LCAweDYyLCAweDc1LCAweGMxLAorICAgIDB4YzAsIDB4ZGYsIDB4YTcsIDB4Y2YsIDB4ZDYsIDB4MDIsIDB4MGUsIDB4MDAsCisgICAgMHgyNCwgMHgwMCwgMHg4MCwgMHgwNCwgMHgyMiwgMHgwMCwgMHg0ZSwgMHgwNSwKKyAgICAweGQwLCAweDAwLCAweDBlLCAweDBhLCAweGFhLCAweDAwLCAweDMwLCAweDA4LAorICAgIDB4YmUsIDB4MDAsIDB4NGEsIDB4MGEsIDB4MTAsIDB4MDAsIDB4MjAsIDB4MDAsCisgICAgMHgwNCwgMHgwMCwgMHg2ZSwgMHgwNCwgMHgwMiwgMHgwMCwgMHg2YSwgMHgwNCwKKyAgICAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDI0LCAweGMwLCAweDA0LCAweDA0LAorICAgIDB4MjgsIDB4YzAsIDB4ZmUsIDB4ZmIsIDB4MWUsIDB4YzAsIDB4MDAsIDB4MDQsCisgICAgMHgyMiwgMHhjMCwgMHhmZiwgMHhmNCwgMHhjMCwgMHgwMCwgMHg5MCwgMHgwOSwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDU2LCAweDA4LAorICAgIDB4NjAsIDB4MDgsIDB4ZDAsIDB4MDgsIDB4ZGEsIDB4MDgsIDB4MDAsIDB4MDksCisgICAgMHgwNCwgMHgwOSwgMHgwOCwgMHgwOSwgMHgzMiwgMHgwOSwgMHg0MiwgMHgwOSwKKyAgICAweDUwLCAweDA5LCAweDUyLCAweDA5LCAweDVhLCAweDA5LCAweDVhLCAweDA5LAorICAgIDB4MjcsIDB4MDIsIDB4Y2EsIDB4MDYsIDB4OTcsIDB4Y2YsIDB4ZTcsIDB4MDcsCisgICAgMHgwMCwgMHgwMCwgMHhjYSwgMHgwNiwgMHgwYSwgMHgwZSwgMHgwMSwgMHgwMCwKKyAgICAweGNhLCAweDU3LCAweDBlLCAweDAwLCAweDlmLCAweGMzLCAweDVhLCAweDA5LAorICAgIDB4Y2EsIDB4MzcsIDB4MDAsIDB4MDAsIDB4OWYsIDB4YzIsIDB4NWEsIDB4MDksCisgICAgMHgwYSwgMHhkMiwgMHhiMiwgMHhjZiwgMHgxNiwgMHgwOCwgMHhjOCwgMHgwOSwKKyAgICAweGRlLCAweDAwLCAweDA3LCAweDA2LCAweDlmLCAweGNmLCAweDZjLCAweDA5LAorICAgIDB4MTcsIDB4MDIsIDB4YzgsIDB4MDksIDB4ZGUsIDB4MDAsIDB4MDAsIDB4MGUsCisgICAgMHgwZiwgMHgwMCwgMHg0MSwgMHg5MCwgMHg5ZiwgMHhkZSwgMHgwNiwgMHgwMCwKKyAgICAweGM4LCAweDA1LCAweDMwLCAweDUwLCAweDA2LCAweDAwLCAweDlmLCAweGM4LAorICAgIDB4NWEsIDB4MDksIDB4MjcsIDB4MGMsIDB4MDIsIDB4MDAsIDB4YjAsIDB4MDYsCisgICAgMHhjMCwgMHgwOSwgMHhiMiwgMHgwNiwgMHgyNywgMHgwMCwgMHhiNCwgMHgwNiwKKyAgICAweGU3LCAweDA3LCAweDAwLCAweDAwLCAweGFlLCAweDA2LCAweDI3LCAweDAwLAorICAgIDB4ODAsIDB4MDYsIDB4MDAsIDB4MWMsIDB4MDYsIDB4MDAsIDB4MjcsIDB4MDAsCisgICAgMHhiNiwgMHgwNiwgMHg0MSwgMHg5MCwgMHg2NywgMHg1MCwgMHhiMCwgMHgwNiwKKyAgICAweDBkLCAweGMwLCAweDY3LCAweDAwLCAweDdlLCAweDA2LCAweDI3LCAweDBjLAorICAgIDB4MDYsIDB4MDAsIDB4ODIsIDB4MDYsIDB4ZTcsIDB4MDcsIDB4YmMsIDB4MDgsCisgICAgMHg4NCwgMHgwNiwgMHhjOCwgMHgwNywgMHg3ZSwgMHgwNiwgMHg0MSwgMHg5MCwKKyAgICAweDUxLCAweGFmLCAweDk3LCAweGNmLCAweDlmLCAweGFmLCAweDQ4LCAweDBjLAorICAgIDB4ZTcsIDB4MDksIDB4YjYsIDB4MDYsIDB4YjQsIDB4MDYsIDB4ZTcsIDB4MDksCisgICAgMHhiMCwgMHgwNiwgMHhhZSwgMHgwNiwgMHg1OSwgMHhhZiwgMHg5NywgMHhjZiwKKyAgICAweDI3LCAweDBjLCAweDAyLCAweDAwLCAweGFjLCAweDA2LCAweDU5LCAweGFmLAorICAgIDB4OTcsIDB4Y2YsIDB4MDksIDB4MGMsIDB4MDIsIDB4MDAsIDB4MDksIDB4ZGEsCisgICAgMHg0OSwgMHhkMiwgMHhjOSwgMHgxOSwgMHhkNiwgMHgwNiwgMHhjOCwgMHgwNywKKyAgICAweDdlLCAweDA2LCAweGUwLCAweDA3LCAweDAwLCAweDAwLCAweDYwLCAweDAyLAorICAgIDB4ZTAsIDB4MDcsIDB4MDQsIDB4MDAsIDB4ZDAsIDB4MDcsIDB4Y2MsIDB4MDgsCisgICAgMHg0OCwgMHhkYiwgMHg0MSwgMHg5MCwgMHg1MCwgMHhhZiwgMHg5NywgMHhjZiwKKyAgICAweDU5LCAweGFmLCAweDk3LCAweGNmLCAweDU5LCAweGFmLCAweDk3LCAweGNmLAorICAgIDB4ZjAsIDB4NTcsIDB4MDYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MjUsIDB4YzEsCisgICAgMHhlNywgMHgwNywgMHg3MCwgMHgwNiwgMHg4MCwgMHgwNiwgMHg0MSwgMHg5MCwKKyAgICAweDY3LCAweDAwLCAweDdlLCAweDA2LCAweDI3LCAweDBjLCAweDA2LCAweDAwLAorICAgIDB4ODIsIDB4MDYsIDB4ZTcsIDB4MDcsIDB4OGMsIDB4MDksIDB4ODQsIDB4MDYsCisgICAgMHhjOCwgMHgwNywgMHg3ZSwgMHgwNiwgMHg0MSwgMHg5MCwgMHg1MSwgMHhhZiwKKyAgICAweDk3LCAweGNmLCAweDA3LCAweDBjLCAweDA2LCAweDAwLCAweGM3LCAweDU3LAorICAgIDB4MDYsIDB4MDAsIDB4MGYsIDB4YzEsIDB4YzgsIDB4MDcsIDB4NzAsIDB4MDYsCisgICAgMHgxNSwgMHhjZiwgMHgwMCwgMHgwYywgMHgwMiwgMHgwMCwgMHgwMCwgMHhkYSwKKyAgICAweDQwLCAweGQxLCAweDI3LCAweDAwLCAweGMyLCAweDA2LCAweDFlLCAweGNmLAorICAgIDB4MWQsIDB4Y2YsIDB4MjcsIDB4MGMsIDB4MDIsIDB4MDAsIDB4Y2MsIDB4MDYsCisgICAgMHgxOSwgMHhjZiwgMHgyNywgMHgwMiwgMHgyMCwgMHgwMSwgMHhlNywgMHgwNywKKyAgICAweDA4LCAweDAwLCAweDIyLCAweDAxLCAweGU3LCAweDA3LCAweDEzLCAweDAwLAorICAgIDB4YjAsIDB4YzAsIDB4OTcsIDB4Y2YsIDB4NDEsIDB4OTAsIDB4NjcsIDB4MDAsCisgICAgMHg3ZSwgMHgwNiwgMHhlNywgMHgwMSwgMHg4MiwgMHgwNiwgMHgyNywgMHgwMiwKKyAgICAweDgwLCAweDA2LCAweGU3LCAweDA3LCAweDhjLCAweDA5LCAweDg0LCAweDA2LAorICAgIDB4YzgsIDB4MDcsIDB4N2UsIDB4MDYsIDB4YzEsIDB4MDcsIDB4MDAsIDB4ODAsCisgICAgMHg1MCwgMHhhZiwgMHg5NywgMHhjZiwgMHg1OSwgMHhhZiwgMHg5NywgMHhjZiwKKyAgICAweDAwLCAweDYwLCAweDA1LCAweGMwLCAweGU3LCAweDA3LCAweDAwLCAweDAwLAorICAgIDB4YzQsIDB4MDYsIDB4YTcsIDB4Y2YsIDB4N2MsIDB4MDYsIDB4OWYsIDB4YWYsCisgICAgMHgwMCwgMHgwYSwgMHhlNywgMHgwNywgMHgwMSwgMHgwMCwgMHhjNCwgMHgwNiwKKyAgICAweDQ5LCAweGFmLCAweGQ3LCAweDA5LCAweDAwLCAweGMwLCAweDA3LCAweGFmLAorICAgIDB4ZTcsIDB4MDUsIDB4MDAsIDB4YzAsIDB4NGEsIDB4YWYsIDB4YTcsIDB4Y2YsCisgICAgMHg3YywgMHgwNiwgMHhjMCwgMHgwNywgMHhmZSwgMHg3ZiwgMHg0NCwgMHhhZiwKKyAgICAweDQwLCAweDAwLCAweGMwLCAweDM3LCAweDAwLCAweDAxLCAweDQxLCAweDkwLAorICAgIDB4YzAsIDB4MzcsIDB4MDgsIDB4MDAsIDB4ZGYsIDB4ZGUsIDB4NTAsIDB4MDYsCisgICAgMHhjMCwgMHg1NywgMHgxMCwgMHgwMCwgMHgwMiwgMHhjMiwgMHhjMCwgMHgwNywKKyAgICAweDEwLCAweDAwLCAweDI3LCAweDAwLCAweDlhLCAweDA2LCAweDQxLCAweDkwLAorICAgIDB4OWYsIDB4ZGUsIDB4NDAsIDB4MDYsIDB4NDQsIDB4YWYsIDB4MjcsIDB4MDAsCisgICAgMHg5YywgMHgwNiwgMHhjMCwgMHgwOSwgMHg5YSwgMHgwNiwgMHg0MSwgMHg5MCwKKyAgICAweDAwLCAweGQyLCAweDAwLCAweGQ4LCAweDlmLCAweGRlLCAweDA4LCAweDAwLAorICAgIDB4NDQsIDB4YWYsIDB4MjcsIDB4MDAsIDB4YzgsIDB4MDYsIDB4OTcsIDB4Y2YsCisgICAgMHhlNywgMHg4NywgMHgwMCwgMHg4NCwgMHgyOCwgMHhjMCwgMHhlNywgMHg2NywKKyAgICAweGZmLCAweGZiLCAweDI0LCAweGMwLCAweDk3LCAweGNmLCAweGU3LCAweDg3LAorICAgIDB4MDEsIDB4MDAsIDB4ZDIsIDB4MDYsIDB4ZTcsIDB4NTcsIDB4MDAsIDB4MDAsCisgICAgMHhhOCwgMHgwNiwgMHg5NywgMHhjMSwgMHg5ZiwgMHhhZiwgMHgwMCwgMHgwYSwKKyAgICAweGU3LCAweDg3LCAweDAwLCAweDA2LCAweDIyLCAweGMwLCAweGU3LCAweDA3LAorICAgIDB4MDAsIDB4MDAsIDB4OTAsIDB4YzAsIDB4ZTcsIDB4NjcsIDB4ZmUsIDB4ZmYsCisgICAgMHgzZSwgMHhjMCwgMHhlNywgMHgwNywgMHgyNiwgMHgwMCwgMHgwYSwgMHhjMCwKKyAgICAweGU3LCAweDg3LCAweDAxLCAweDAwLCAweDNlLCAweGMwLCAweGU3LCAweDA3LAorICAgIDB4ZmYsIDB4ZmYsIDB4YmUsIDB4MDYsIDB4OWYsIDB4YWYsIDB4MTAsIDB4MGIsCisgICAgMHg5NywgMHhjZiwgMHgxNywgMHgwMCwgMHhhNywgMHhhZiwgMHg3OCwgMHgwNiwKKyAgICAweGMwLCAweDA1LCAweDI3LCAweDAwLCAweDc2LCAweDA2LCAweGU3LCAweDg3LAorICAgIDB4MDEsIDB4MDAsIDB4ZDIsIDB4MDYsIDB4OWYsIDB4YWYsIDB4MDAsIDB4MGEsCisgICAgMHhlNywgMHgwNywgMHgwYywgMHgwMCwgMHg0MCwgMHhjMCwgMHg5ZiwgMHhhZiwKKyAgICAweDEwLCAweDBiLCAweDAwLCAweDkwLCAweDI3LCAweDAwLCAweGE2LCAweDA2LAorICAgIDB4MjcsIDB4MDAsIDB4YWEsIDB4MDYsIDB4ZTcsIDB4MDksIDB4YjIsIDB4MDYsCisgICAgMHhiNCwgMHgwNiwgMHgyNywgMHgwMCwgMHhhZSwgMHgwNiwgMHgyNywgMHgwMCwKKyAgICAweGFjLCAweDA2LCAweDlmLCAweGFmLCAweGFlLCAweDBhLCAweGMwLCAweDA3LAorICAgIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4YjIsIDB4MDIsIDB4MjcsIDB4MDAsCisgICAgMHhiNCwgMHgwMiwgMHgyNywgMHgwMCwgMHg4ZSwgMHgwNiwgMHhjMCwgMHgwNywKKyAgICAweDA2LCAweDAwLCAweGM4LCAweDA5LCAweGRlLCAweDAwLCAweGM4LCAweDE3LAorICAgIDB4MDMsIDB4MDAsIDB4YzksIDB4MDcsIDB4NzAsIDB4MDYsIDB4MjksIDB4MGEsCisgICAgMHgwMCwgMHhkYSwgMHg3ZCwgMHhjMSwgMHg5NywgMHhjZiwgMHhkNywgMHgwOSwKKyAgICAweDAwLCAweGMwLCAweGMxLCAweGRmLCAweDAwLCAweDkwLCAweDI3LCAweDAwLAorICAgIDB4OTYsIDB4MDYsIDB4ZTcsIDB4MDcsIDB4OTYsIDB4MDYsIDB4OTgsIDB4MDYsCisgICAgMHgyNywgMHgwMCwgMHhhMCwgMHgwNiwgMHhlNywgMHgwNywgMHhhMCwgMHgwNiwKKyAgICAweGEyLCAweDA2LCAweDI3LCAweDAwLCAweGE2LCAweDA2LCAweDI3LCAweDAwLAorICAgIDB4OTAsIDB4MDYsIDB4MjcsIDB4MDAsIDB4OWUsIDB4MDYsIDB4YzgsIDB4MDksCisgICAgMHg5YywgMHgwNiwgMHhjMSwgMHgwOSwgMHg5YSwgMHgwNiwgMHhjOSwgMHgwNywKKyAgICAweGE0LCAweDA2LCAweDExLCAweDAyLCAweDA5LCAweDAyLCAweGM4LCAweDE3LAorICAgIDB4NDAsIDB4MDYsIDB4MDEsIDB4ZGEsIDB4N2EsIDB4YzEsIDB4NTEsIDB4OTQsCisgICAgMHhjOCwgMHgwOSwgMHhjOCwgMHgwNiwgMHhjOSwgMHgwNywgMHhjNiwgMHgwNiwKKyAgICAweGMxLCAweDA5LCAweDlhLCAweDA2LCAweDExLCAweDAyLCAweDA5LCAweDAyLAorICAgIDB4YzgsIDB4MTcsIDB4MDgsIDB4MDAsIDB4MDEsIDB4ZGEsIDB4N2EsIDB4YzEsCisgICAgMHg1MSwgMHg5NCwgMHhlNywgMHgwNSwgMHgwMCwgMHhjMCwgMHg5NywgMHhjZiwKKyAgICAweGU3LCAweDU3LCAweDAwLCAweDAwLCAweDc2LCAweDA2LCAweDk3LCAweGMwLAorICAgIDB4OWYsIDB4YWYsIDB4MDQsIDB4MDAsIDB4ZTcsIDB4MDksIDB4YmUsIDB4MDYsCisgICAgMHhiYSwgMHgwNiwgMHhlNywgMHg1NywgMHhmZiwgMHhmZiwgMHhiYSwgMHgwNiwKKyAgICAweDA0LCAweGMxLCAweGU3LCAweDA3LCAweDEwLCAweDBiLCAweGI4LCAweDA2LAorICAgIDB4OTcsIDB4Y2YsIDB4ZTcsIDB4MTcsIDB4MzIsIDB4MDAsIDB4YmEsIDB4MDYsCisgICAgMHhlNywgMHg2NywgMHhmZiwgMHgwNywgMHhiYSwgMHgwNiwgMHhlNywgMHgwNywKKyAgICAweDQ2LCAweDBiLCAweGI4LCAweDA2LCAweDk3LCAweGNmLCAweGU3LCAweDU3LAorICAgIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDYsIDB4MjMsIDB4YzAsIDB4ZTcsIDB4MDcsCisgICAgMHgwNCwgMHgwMCwgMHg5MCwgMHhjMCwgMHhlNywgMHgwNywgMHgwMCwgMHg4MCwKKyAgICAweDgwLCAweGMwLCAweGU3LCAweDA3LCAweDAwLCAweDAwLCAweDgwLCAweGMwLAorICAgIDB4ZTcsIDB4MDcsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YzAsIDB4YzAsIDB4MDcsCisgICAgMHgwMCwgMHgwMCwgMHhjMCwgMHgwNywgMHgwMCwgMHgwMCwgMHhjMCwgMHgwNywKKyAgICAweDAwLCAweDAwLCAweGU3LCAweDA3LCAweDAwLCAweDAwLCAweDgwLCAweGMwLAorICAgIDB4ZTcsIDB4MDcsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YzAsIDB4ZTcsIDB4MDcsCisgICAgMHgwMCwgMHg4MCwgMHg0MCwgMHhjMCwgMHhjMCwgMHgwNywgMHgwMCwgMHgwMCwKKyAgICAweGU3LCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweGMwLCAweGU3LCAweDA3LAorICAgIDB4MDAsIDB4MDAsIDB4ODAsIDB4YzAsIDB4ZTcsIDB4MDcsIDB4MDQsIDB4MDAsCisgICAgMHg5MCwgMHhjMCwgMHhlNywgMHgwNywgMHgwMCwgMHgwMiwgMHg0MCwgMHhjMCwKKyAgICAweGU3LCAweDA3LCAweDBjLCAweDAyLCAweDQwLCAweGMwLCAweGU3LCAweDA3LAorICAgIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDYsIDB4ZTcsIDB4MDcsIDB4MDAsIDB4MDAsCisgICAgMHhiOCwgMHgwNiwgMHhlNywgMHgwNywgMHgwMCwgMHgwMCwgMHhkMiwgMHgwNiwKKyAgICAweGQ3LCAweDA5LCAweDAwLCAweGMwLCAweGMxLCAweGRmLCAweDlmLCAweGFmLAorICAgIDB4MzQsIDB4MDIsIDB4ZTcsIDB4MDUsIDB4MDAsIDB4YzAsIDB4OWYsIDB4YWYsCisgICAgMHhjNCwgMHgwMSwgMHg5NywgMHhjZiwgMHhkNywgMHgwOSwgMHgwMCwgMHhjMCwKKyAgICAweDE3LCAweDAwLCAweDE3LCAweDAyLCAweDk3LCAweDAyLCAweGU3LCAweDU3LAorICAgIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDYsIDB4MDYsIDB4YzAsIDB4YzAsIDB4MDksCisgICAgMHg5MiwgMHhjMCwgMHhjMCwgMHg3NywgMHgwOSwgMHgwMiwgMHg5ZiwgMHhjMSwKKyAgICAweDVjLCAweDA1LCAweDlmLCAweGNmLCAweDMyLCAweDA2LCAweGQ3LCAweDA5LAorICAgIDB4MGUsIDB4YzAsIDB4ZTcsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MGUsIDB4YzAsCisgICAgMHg5ZiwgMHhhZiwgMHgwMiwgMHgwYywgMHhlNywgMHgwNSwgMHgwZSwgMHhjMCwKKyAgICAweDk3LCAweGNmLCAweGQ3LCAweDA5LCAweDAwLCAweGMwLCAweDE3LCAweDAyLAorICAgIDB4YzgsIDB4MDksIDB4YjAsIDB4YzAsIDB4ZTcsIDB4NjcsIDB4ZmUsIDB4N2YsCisgICAgMHhiMCwgMHhjMCwgMHhjOCwgMHg3NywgMHgwMCwgMHgyMCwgMHg5ZiwgMHhjMSwKKyAgICAweDY0LCAweGViLCAweGU3LCAweDU3LCAweDAwLCAweDAwLCAweGM4LCAweDAyLAorICAgIDB4OWYsIDB4YzEsIDB4ODAsIDB4ZWIsIDB4YzgsIDB4OTksIDB4Y2EsIDB4MDIsCisgICAgMHhjOCwgMHg2NywgMHgwNCwgMHgwMCwgMHg5ZiwgMHhjMSwgMHg5NiwgMHhlYiwKKyAgICAweDlmLCAweGNmLCAweDRjLCAweGViLCAweGU3LCAweDA3LCAweDAwLCAweDAwLAorICAgIDB4YTYsIDB4YzAsIDB4ZTcsIDB4MDksIDB4YjAsIDB4YzAsIDB4YzgsIDB4MDIsCisgICAgMHhlNywgMHgwNywgMHgwMywgMHgwMCwgMHhiMCwgMHhjMCwgMHg5NywgMHhjZiwKKyAgICAweGMwLCAweDA5LCAweGIwLCAweDA2LCAweGMwLCAweDM3LCAweDAxLCAweDAwLAorICAgIDB4OTcsIDB4YzksIDB4YzksIDB4MDksIDB4YjIsIDB4MDYsIDB4MDIsIDB4MDAsCisgICAgMHg0MSwgMHg5MCwgMHg0OCwgMHgwMiwgMHhjOSwgMHgxNywgMHgwNiwgMHgwMCwKKyAgICAweDlmLCAweGFmLCAweDA4LCAweDA0LCAweDlmLCAweGEyLCAweDcyLCAweDBjLAorICAgIDB4MDIsIDB4ZGEsIDB4NzcsIDB4YzEsIDB4NDEsIDB4NjAsIDB4NzEsIDB4YzEsCisgICAgMHg5NywgMHhjZiwgMHgxNywgMHgwMiwgMHg1NywgMHgwMiwgMHg0MywgMHgwNCwKKyAgICAweDIxLCAweDA0LCAweGUwLCAweDAwLCAweDQzLCAweDA0LCAweDIxLCAweDA0LAorICAgIDB4ZTAsIDB4MDAsIDB4NDMsIDB4MDQsIDB4MjEsIDB4MDQsIDB4ZTAsIDB4MDAsCisgICAgMHhjMSwgMHgwNywgMHgwMSwgMHgwMCwgMHhjOSwgMHgwNSwgMHhjOCwgMHgwNSwKKyAgICAweDk3LCAweGNmLCAweGU3LCAweDA3LCAweDAxLCAweDAwLCAweDhlLCAweDA2LAorICAgIDB4YzgsIDB4MDcsIDB4ODYsIDB4MDYsIDB4ZTcsIDB4MDcsIDB4MDAsIDB4MDAsCisgICAgMHg4NiwgMHgwNiwgMHhlNywgMHgwNywgMHgxMCwgMHgwOCwgMHg4OCwgMHgwNiwKKyAgICAweGU3LCAweDA3LCAweDA0LCAweDAwLCAweDhhLCAweDA2LCAweGU3LCAweDA3LAorICAgIDB4YmMsIDB4MGMsIDB4OGMsIDB4MDYsIDB4YzEsIDB4MDcsIDB4MDMsIDB4ODAsCisgICAgMHg1MCwgMHhhZiwgMHg5NywgMHhjZiwgMHhlNywgMHgwNywgMHgwMCwgMHgwMCwKKyAgICAweDhlLCAweDA2LCAweDk3LCAweGNmLAorICAgIDB4MDAsIDB4MDAKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX25ld19jb2RlX2ZpeAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgX191OCBrYXdldGhfbmV3X2NvZGVfZml4W10gPSAKK3sKKyAgICAweEI2LCAweEMzLCAweEFBLCAweEJCLCAweENDLCAweERELAorICAgIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MmMsIDB4MDAsCisgICAgMHgzNCwgMHgwMCwgMHgzYywgMHgwMCwgMHg0MCwgMHgwMCwgMHg0OCwgMHgwMCwKKyAgICAweDU0LCAweDAwLCAweDU4LCAweDAwLCAweDVlLCAweDAwLCAweDY0LCAweDAwLAorICAgIDB4NjgsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmMsIDB4MDAsIDB4NzIsIDB4MDAsCisgICAgMHg3NiwgMHgwMCwgMHg3YywgMHgwMCwgMHg4MCwgMHgwMCwgMHg4NiwgMHgwMCwKKyAgICAweDhhLCAweDAwLCAweDkwLCAweDAwLCAweDk0LCAweDAwLCAweDk4LCAweDAwLAorICAgIDB4OWUsIDB4MDAsIDB4YTYsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YjAsIDB4MDAsCisgICAgMHhiNCwgMHgwMCwgMHhiOCwgMHgwMCwgMHhjMCwgMHgwMCwgMHhjNiwgMHgwMCwKKyAgICAweGNhLCAweDAwLCAweGQwLCAweDAwLCAweGQ0LCAweDAwLCAweGQ4LCAweDAwLAorICAgIDB4ZTAsIDB4MDAsIDB4ZGUsIDB4MDAsIDB4ZTgsIDB4MDAsIDB4ZjAsIDB4MDAsCisgICAgMHhmYywgMHgwMCwgMHgwNCwgMHgwMSwgMHgwYSwgMHgwMSwgMHgxOCwgMHgwMSwKKyAgICAweDIyLCAweDAxLCAweDI4LCAweDAxLCAweDNhLCAweDAxLCAweDNlLCAweDAxLAorICAgIDB4N2UsIDB4MDEsIDB4OTgsIDB4MDEsIDB4OWMsIDB4MDEsIDB4YTIsIDB4MDEsCisgICAgMHhhYywgMHgwMSwgMHhiMiwgMHgwMSwgMHhiYSwgMHgwMSwgMHhjMCwgMHgwMSwKKyAgICAweGM4LCAweDAxLCAweGQwLCAweDAxLCAweGQ2LCAweDAxLCAweGY0LCAweDAxLAorICAgIDB4ZmMsIDB4MDEsIDB4MDgsIDB4MDIsIDB4MTYsIDB4MDIsIDB4MWEsIDB4MDIsCisgICAgMHgyMiwgMHgwMiwgMHgyYSwgMHgwMiwgMHgyZSwgMHgwMiwgMHgzZSwgMHgwMiwKKyAgICAweDQ0LCAweDAyLCAweDRhLCAweDAyLCAweDUwLCAweDAyLCAweDY0LCAweDAyLAorICAgIDB4NjIsIDB4MDIsIDB4NmMsIDB4MDIsIDB4NzIsIDB4MDIsIDB4ODYsIDB4MDIsCisgICAgMHg4YywgMHgwMiwgMHg5MCwgMHgwMiwgMHg5ZSwgMHgwMiwgMHhiYywgMHgwMiwKKyAgICAweGQwLCAweDAyLCAweGQ4LCAweDAyLCAweGRjLCAweDAyLCAweGUwLCAweDAyLAorICAgIDB4ZTgsIDB4MDIsIDB4ZTYsIDB4MDIsIDB4ZjQsIDB4MDIsIDB4ZmUsIDB4MDIsCisgICAgMHgwNCwgMHgwMywgMHgwYywgMHgwMywgMHgyOCwgMHgwMywgMHg3YywgMHgwMywKKyAgICAweDkwLCAweDAzLCAweDk0LCAweDAzLCAweDljLCAweDAzLCAweGEyLCAweDAzLAorICAgIDB4YzAsIDB4MDMsIDB4ZDAsIDB4MDMsIDB4ZDQsIDB4MDMsIDB4ZWUsIDB4MDMsCisgICAgMHhmYSwgMHgwMywgMHhmZSwgMHgwMywgMHgyZSwgMHgwNCwgMHgzMiwgMHgwNCwKKyAgICAweDNjLCAweDA0LCAweDQwLCAweDA0LCAweDRlLCAweDA0LCAweDc2LCAweDA0LAorICAgIDB4N2MsIDB4MDQsIDB4ODQsIDB4MDQsIDB4OGEsIDB4MDQsIDB4OGUsIDB4MDQsCisgICAgMHhhNiwgMHgwNCwgMHhiMCwgMHgwNCwgMHhiOCwgMHgwNCwgMHhiZSwgMHgwNCwKKyAgICAweGQyLCAweDA0LCAweGRjLCAweDA0LCAweGVlLCAweDA0LCAweDEwLCAweDA1LAorICAgIDB4MWEsIDB4MDUsIDB4MjQsIDB4MDUsIDB4MmEsIDB4MDUsIDB4MzYsIDB4MDUsCisgICAgMHgzNCwgMHgwNSwgMHgzYywgMHgwNSwgMHg0MiwgMHgwNSwgMHg2NCwgMHgwNSwKKyAgICAweDZhLCAweDA1LCAweDZlLCAweDA1LCAweDg2LCAweDA1LCAweDIyLCAweDA2LAorICAgIDB4MjYsIDB4MDYsIDB4MmMsIDB4MDYsIDB4MzAsIDB4MDYsIDB4NDIsIDB4MDYsCisgICAgMHg0YSwgMHgwNiwgMHg0ZSwgMHgwNiwgMHg1NiwgMHgwNiwgMHg1NCwgMHgwNiwKKyAgICAweDVhLCAweDA2LCAweDYwLCAweDA2LCAweDY2LCAweDA2LCAweGU4LCAweDA2LAorICAgIDB4ZWUsIDB4MDYsIDB4ZjQsIDB4MDYsIDB4MTYsIDB4MDcsIDB4MjYsIDB4MDcsCisgICAgMHgyYywgMHgwNywgMHgzMiwgMHgwNywgMHgzNiwgMHgwNywgMHgzYSwgMHgwNywKKyAgICAweDNlLCAweDA3LCAweDUyLCAweDA3LCAweDU2LCAweDA3LCAweDVhLCAweDA3LAorICAgIDB4NjQsIDB4MDcsIDB4NzYsIDB4MDcsIDB4N2EsIDB4MDcsIDB4ODAsIDB4MDcsCisgICAgMHg4NCwgMHgwNywgMHg4YSwgMHgwNywgMHg5ZSwgMHgwNywgMHhhMiwgMHgwNywKKyAgICAweGRhLCAweDA3LCAweGRlLCAweDA3LCAweGUyLCAweDA3LCAweGU2LCAweDA3LAorICAgIDB4ZWEsIDB4MDcsIDB4ZWUsIDB4MDcsIDB4ZjIsIDB4MDcsIDB4ZjYsIDB4MDcsCisgICAgMHgwZSwgMHgwOCwgMHgxNiwgMHgwOCwgMHgxOCwgMHgwOCwgMHgxYSwgMHgwOCwKKyAgICAweDFjLCAweDA4LCAweDFlLCAweDA4LCAweDIwLCAweDA4LCAweDIyLCAweDA4LAorICAgIDB4MjQsIDB4MDgsIDB4MjYsIDB4MDgsIDB4MjgsIDB4MDgsIDB4MmEsIDB4MDgsCisgICAgMHgyYywgMHgwOCwgMHgyZSwgMHgwOCwgMHgzMiwgMHgwOCwgMHgzYSwgMHgwOCwKKyAgICAweDQ2LCAweDA4LCAweDRlLCAweDA4LCAweDU0LCAweDA4LCAweDVlLCAweDA4LAorICAgIDB4NzgsIDB4MDgsIDB4N2UsIDB4MDgsIDB4ODIsIDB4MDgsIDB4ODYsIDB4MDgsCisgICAgMHg4YywgMHgwOCwgMHg5MCwgMHgwOCwgMHg5OCwgMHgwOCwgMHg5ZSwgMHgwOCwKKyAgICAweGE0LCAweDA4LCAweGFhLCAweDA4LCAweGIwLCAweDA4LCAweGFlLCAweDA4LAorICAgIDB4YjQsIDB4MDgsIDB4YmUsIDB4MDgsIDB4YzQsIDB4MDgsIDB4YzIsIDB4MDgsCisgICAgMHhjYSwgMHgwOCwgMHhjOCwgMHgwOCwgMHhkNCwgMHgwOCwgMHhlNCwgMHgwOCwKKyAgICAweGU4LCAweDA4LCAweGY2LCAweDA4LCAweDE0LCAweDA5LCAweDEyLCAweDA5LAorICAgIDB4MWEsIDB4MDksIDB4MjAsIDB4MDksIDB4MjYsIDB4MDksIDB4MjQsIDB4MDksCisgICAgMHgyYSwgMHgwOSwgMHgzZSwgMHgwOSwgMHg0YywgMHgwOSwgMHg1NiwgMHgwOSwKKyAgICAweDcwLCAweDA5LCAweDc0LCAweDA5LCAweDc4LCAweDA5LCAweDdlLCAweDA5LAorICAgIDB4N2MsIDB4MDksIDB4ODIsIDB4MDksIDB4OTgsIDB4MDksIDB4OWMsIDB4MDksCisgICAgMHhhMCwgMHgwOSwgMHhhNiwgMHgwOSwgMHhiOCwgMHgwOSwgMHhkYywgMHgwOSwKKyAgICAweGU4LCAweDA5LCAweGVjLCAweDA5LCAweGZjLCAweDA5LCAweDEyLCAweDBhLAorICAgIDB4MTgsIDB4MGEsIDB4MWUsIDB4MGEsIDB4NDIsIDB4MGEsIDB4NDYsIDB4MGEsCisgICAgMHg0ZSwgMHgwYSwgMHg1NCwgMHgwYSwgMHg1YSwgMHgwYSwgMHg1ZSwgMHgwYSwKKyAgICAweDY4LCAweDBhLCAweDZlLCAweDBhLCAweDcyLCAweDBhLCAweDc4LCAweDBhLAorICAgIDB4NzYsIDB4MGEsIDB4N2MsIDB4MGEsIDB4ODAsIDB4MGEsIDB4ODQsIDB4MGEsCisgICAgMHg5NCwgMHgwYSwgMHhhNCwgMHgwYSwgMHhiOCwgMHgwYSwgMHhiZSwgMHgwYSwKKyAgICAweGJjLCAweDBhLCAweGMyLCAweDBhLCAweGM4LCAweDBhLCAweGM2LCAweDBhLAorICAgIDB4Y2MsIDB4MGEsIDB4ZDAsIDB4MGEsIDB4ZDQsIDB4MGEsIDB4ZDgsIDB4MGEsCisgICAgMHhkYywgMHgwYSwgMHhlMCwgMHgwYSwgMHhmMiwgMHgwYSwgMHhmNiwgMHgwYSwKKyAgICAweGZhLCAweDBhLCAweDE0LCAweDBiLCAweDFhLCAweDBiLCAweDIwLCAweDBiLAorICAgIDB4MWUsIDB4MGIsIDB4MjYsIDB4MGIsIDB4MmUsIDB4MGIsIDB4MmMsIDB4MGIsCisgICAgMHgzNiwgMHgwYiwgMHgzYywgMHgwYiwgMHg0MiwgMHgwYiwgMHg0MCwgMHgwYiwKKyAgICAweDRhLCAweDBiLCAweGFhLCAweDBiLCAweGIwLCAweDBiLCAweGI2LCAweDBiLAorICAgIDB4YzAsIDB4MGIsIDB4YzgsIDB4MGIsIDB4ZGEsIDB4MGIsIDB4ZTgsIDB4MGIsCisgICAgMHhlYywgMHgwYiwgMHhmYSwgMHgwYiwgMHg0YSwgMHgwYywgMHg1NCwgMHgwYywKKyAgICAweDYyLCAweDBjLCAweDY2LCAweDBjLCAweDk2LCAweDBjLCAweDlhLCAweDBjLAorICAgIDB4YTAsIDB4MGMsIDB4YTYsIDB4MGMsIDB4YTQsIDB4MGMsIDB4YWMsIDB4MGMsCisgICAgMHhiMiwgMHgwYywgMHhiMCwgMHgwYywgMHhjMCwgMHgwYywKKyAgICAweDAwLCAweDAwCit9OworCisKK3N0YXRpYyBjb25zdCBpbnQgbGVuX2thd2V0aF90cmlnZ2VyX2NvZGUgPSBzaXplb2Yoa2F3ZXRoX3RyaWdnZXJfY29kZSk7CitzdGF0aWMgY29uc3QgaW50IGxlbl9rYXdldGhfdHJpZ2dlcl9jb2RlX2ZpeCA9IHNpemVvZihrYXdldGhfdHJpZ2dlcl9jb2RlX2ZpeCk7CitzdGF0aWMgY29uc3QgaW50IGxlbl9rYXdldGhfbmV3X2NvZGUgPSBzaXplb2Yoa2F3ZXRoX25ld19jb2RlKTsKK3N0YXRpYyBjb25zdCBpbnQgbGVuX2thd2V0aF9uZXdfY29kZV9maXggPSBzaXplb2Yoa2F3ZXRoX25ld19jb2RlX2ZpeCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvcGVnYXN1cy5jIGIvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmMxOWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuYwpAQCAtMCwwICsxLDE0MDggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgUGV0a28gTWFub2xvdiAocGV0a2FuQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqCUNoYW5nZUxvZzoKKyAqCQkuLi4uCU1vc3Qgb2YgdGhlIHRpbWUgc3BlbnQgb24gcmVhZGluZyBzb3VyY2VzICYgZG9jcy4KKyAqCQl2MC4yLngJRmlyc3Qgb2ZmaWNpYWwgcmVsZWFzZSBmb3IgdGhlIExpbnV4IGtlcm5lbC4KKyAqCQl2MC4zLjAJQmV1dGlmaWVkIGFuZCBzdHJ1Y3R1cmVkLCBzb21lIGJ1Z3MgZml4ZWQuCisgKgkJdjAuMy54CVVSQmlmeWluZyBidWxrIHJlcXVlc3RzIGFuZCBidWdmaXhpbmcuIEZpcnN0IHJlbGF0aXZlbHkKKyAqCQkJc3RhYmxlIHJlbGVhc2UuIFN0aWxsIGNhbiB0b3VjaCBkZXZpY2UncyByZWdpc3RlcnMgb25seQorICoJCQlmcm9tIHRvcC1oYWx2ZXMuCisgKgkJdjAuNC4wCUNvbnRyb2wgbWVzc2FnZXMgcmVtYWluZWQgdW51cmJpZmllZCBhcmUgbm93IFVSQnMuCisgKgkJCU5vdyB3ZSBjYW4gdG91Y2ggdGhlIEhXIGF0IGFueSB0aW1lLgorICoJCXYwLjQuOQlDb250cm9sIHVyYnMgYWdhaW4gdXNlIHByb2Nlc3MgY29udGV4dCB0byB3YWl0LiBBcmdoLi4uCisgKgkJCVNvbWUgbG9uZyBzdGFuZGluZyBidWdzIChlbmFibGVfbmV0X3RyYWZmaWMpIGZpeGVkLgorICoJCQlBbHNvIG5hc3R5IHRyaWNrIGFib3V0IHJlc3VibWl0aW5nIGNvbnRyb2wgdXJiIGZyb20KKyAqCQkJaW50ZXJydXB0IGNvbnRleHQgdXNlZC4gUGxlYXNlIGxldCBtZSBrbm93IGhvdyBpdAorICoJCQliZWhhdmVzLiBQZWdhc3VzIElJIHN1cHBvcnQgYWRkZWQgc2luY2UgdGhpcyB2ZXJzaW9uLgorICoJCQlUT0RPOiBzdXBwcmVzc2luZyBIQ0Qgd2FybmluZ3Mgc3Bld2FnZSBvbiBkaXNjb25uZWN0LgorICoJCXYwLjQuMTMJRXRoZXJuZXQgYWRkcmVzcyBpcyBub3cgc2V0IGF0IHByb2JlKCksIG5vdCBhdCBvcGVuKCkKKyAqCQkJdGltZSBhcyB0aGlzIHNlZW1zIHRvIGJyZWFrIGRoY3BkLiAKKyAqCQl2MC41LjAJYnJhbmNoIHRvIDIuNS54IGtlcm5lbHMKKyAqCQl2MC41LjEJZXRodG9vbCBzdXBwb3J0IGFkZGVkCisgKgkJdjAuNS41CXJ4IHNvY2tldCBidWZmZXJzIGFyZSBpbiBhIHBvb2wgYW5kIHRoZSB0aGVpciBhbGxvY2F0aW9uCisgKiAJCQlpcyBvdXQgb2YgdGhlIGludGVycnVwdCByb3V0aW5lLgorICovCisKKyN1bmRlZglERUJVRworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSAicGVnYXN1cy5oIgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC42LjEyICgyMDA1LzAxLzEzKSIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiUGV0a28gTWFub2xvdiA8cGV0a2FuQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJQZWdhc3VzL1BlZ2FzdXMgSUkgVVNCIEV0aGVybmV0IGRyaXZlciIKKworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWVbXSA9ICJwZWdhc3VzIjsKKworI3VuZGVmCVBFR0FTVVNfV1JJVEVfRUVQUk9NCisjZGVmaW5lCUJNU1JfTUVESUEJKEJNU1JfMTBIQUxGIHwgQk1TUl8xMEZVTEwgfCBCTVNSXzEwMEhBTEYgfCBcCisJCQlCTVNSXzEwMEZVTEwgfCBCTVNSX0FORUdDQVBBQkxFKQorCitzdGF0aWMgaW50IGxvb3BiYWNrID0gMDsKK3N0YXRpYyBpbnQgbWlpX21vZGUgPSAwOworc3RhdGljIGludCBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0ID0gMzI7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2V0aF9kZXYgdXNiX2Rldl9pZFtdID0geworI2RlZmluZQlQRUdBU1VTX0RFVihwbiwgdmlkLCBwaWQsIGZsYWdzKQlcCisJey5uYW1lID0gcG4sIC52ZW5kb3IgPSB2aWQsIC5kZXZpY2UgPSBwaWQsIC5wcml2YXRlID0gZmxhZ3N9LAorI2luY2x1ZGUgInBlZ2FzdXMuaCIKKyN1bmRlZglQRUdBU1VTX0RFVgorCXtOVUxMLCAwLCAwLCAwfQorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHBlZ2FzdXNfaWRzW10gPSB7CisjZGVmaW5lCVBFR0FTVVNfREVWKHBuLCB2aWQsIHBpZCwgZmxhZ3MpIFwKKwl7Lm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsIC5pZFZlbmRvciA9IHZpZCwgLmlkUHJvZHVjdCA9IHBpZH0sCisjaW5jbHVkZSAicGVnYXN1cy5oIgorI3VuZGVmCVBFR0FTVVNfREVWCisJe30KK307CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworbW9kdWxlX3BhcmFtKGxvb3BiYWNrLCBib29sLCAwKTsKK21vZHVsZV9wYXJhbShtaWlfbW9kZSwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGxvb3BiYWNrLCAiRW5hYmxlIE1BQyBsb29wYmFjayBtb2RlIChiaXQgMCkiKTsKK01PRFVMRV9QQVJNX0RFU0MobWlpX21vZGUsICJFbmFibGUgSG9tZVBOQSBtb2RlIChiaXQgMCksZGVmYXVsdD1NSUkgbW9kZSA9IDAiKTsKKworLyogdXNlIGV0aHRvb2wgdG8gY2hhbmdlIHRoZSBsZXZlbCBmb3IgYW55IGdpdmVuIGRldmljZSAqLworc3RhdGljIGludCBtc2dfbGV2ZWwgPSAtMTsKK21vZHVsZV9wYXJhbSAobXNnX2xldmVsLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyAobXNnX2xldmVsLCAiT3ZlcnJpZGUgZGVmYXVsdCBtZXNzYWdlIGxldmVsIik7CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBwZWdhc3VzX2lkcyk7CisKK3N0YXRpYyBpbnQgdXBkYXRlX2V0aF9yZWdzX2FzeW5jKHBlZ2FzdXNfdCAqKTsKKy8qIEFhcmdoISEhIEkgX3JlYWxseV8gaGF0ZSBzdWNoIHR3ZWFrcyAqLworc3RhdGljIHZvaWQgY3RybF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IHVyYi0+Y29udGV4dDsKKworCWlmICghcGVnYXN1cykKKwkJcmV0dXJuOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJaWYgKHBlZ2FzdXMtPmZsYWdzICYgRVRIX1JFR1NfQ0hBTkdFKSB7CisJCQlwZWdhc3VzLT5mbGFncyAmPSB+RVRIX1JFR1NfQ0hBTkdFOworCQkJcGVnYXN1cy0+ZmxhZ3MgfD0gRVRIX1JFR1NfQ0hBTkdFRDsKKwkJCXVwZGF0ZV9ldGhfcmVnc19hc3luYyhwZWdhc3VzKTsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKwljYXNlIC1FSU5QUk9HUkVTUzoKKwkJcmV0dXJuOworCWNhc2UgLUVOT0VOVDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCisJCQlkZXZfZXJyKCZwZWdhc3VzLT5pbnRmLT5kZXYsICIlcywgc3RhdHVzICVkXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCX0KKwlwZWdhc3VzLT5mbGFncyAmPSB+RVRIX1JFR1NfQ0hBTkdFRDsKKwl3YWtlX3VwKCZwZWdhc3VzLT5jdHJsX3dhaXQpOworfQorCitzdGF0aWMgaW50IGdldF9yZWdpc3RlcnMocGVnYXN1c190ICogcGVnYXN1cywgX191MTYgaW5keCwgX191MTYgc2l6ZSwKKwkJCSB2b2lkICpkYXRhKQoreworCWludCByZXQ7CisJY2hhciAqYnVmZmVyOworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCisJYnVmZmVyID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKKwkJCWRldl93YXJuKCZwZWdhc3VzLT5pbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IGluICVzXG4iLAorCQkJCQlfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJYWRkX3dhaXRfcXVldWUoJnBlZ2FzdXMtPmN0cmxfd2FpdCwgJndhaXQpOworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwl3aGlsZSAocGVnYXN1cy0+ZmxhZ3MgJiBFVEhfUkVHU19DSEFOR0VEKQorCQlzY2hlZHVsZSgpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZwZWdhc3VzLT5jdHJsX3dhaXQsICZ3YWl0KTsKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCisJcGVnYXN1cy0+ZHIuYlJlcXVlc3RUeXBlID0gUEVHQVNVU19SRVFUX1JFQUQ7CisJcGVnYXN1cy0+ZHIuYlJlcXVlc3QgPSBQRUdBU1VTX1JFUV9HRVRfUkVHUzsKKwlwZWdhc3VzLT5kci53VmFsdWUgPSBjcHVfdG9fbGUxNigwKTsKKwlwZWdhc3VzLT5kci53SW5kZXggPSBjcHVfdG9fbGUxNnAoJmluZHgpOworCXBlZ2FzdXMtPmRyLndMZW5ndGggPSBjcHVfdG9fbGUxNnAoJnNpemUpOworCXBlZ2FzdXMtPmN0cmxfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gc2l6ZTsKKworCXVzYl9maWxsX2NvbnRyb2xfdXJiKHBlZ2FzdXMtPmN0cmxfdXJiLCBwZWdhc3VzLT51c2IsCisJCQkgICAgIHVzYl9yY3ZjdHJscGlwZShwZWdhc3VzLT51c2IsIDApLAorCQkJICAgICAoY2hhciAqKSAmcGVnYXN1cy0+ZHIsCisJCQkgICAgIGJ1ZmZlciwgc2l6ZSwgY3RybF9jYWxsYmFjaywgcGVnYXN1cyk7CisKKwlhZGRfd2FpdF9xdWV1ZSgmcGVnYXN1cy0+Y3RybF93YWl0LCAmd2FpdCk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOworCisJLyogdXNpbmcgQVRPTUlDLCB3ZSdkIG5ldmVyIHdha2UgdXAgaWYgd2Ugc2xlcHQgKi8KKwlpZiAoKHJldCA9IHVzYl9zdWJtaXRfdXJiKHBlZ2FzdXMtPmN0cmxfdXJiLCBHRlBfQVRPTUlDKSkpIHsKKwkJaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCisJCQlkZXZfZXJyKCZwZWdhc3VzLT5pbnRmLT5kZXYsICIlcywgc3RhdHVzICVkXG4iLAorCQkJCQlfX0ZVTkNUSU9OX18sIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXNjaGVkdWxlKCk7CitvdXQ6CisJcmVtb3ZlX3dhaXRfcXVldWUoJnBlZ2FzdXMtPmN0cmxfd2FpdCwgJndhaXQpOworCW1lbWNweShkYXRhLCBidWZmZXIsIHNpemUpOworCWtmcmVlKGJ1ZmZlcik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNldF9yZWdpc3RlcnMocGVnYXN1c190ICogcGVnYXN1cywgX191MTYgaW5keCwgX191MTYgc2l6ZSwKKwkJCSB2b2lkICpkYXRhKQoreworCWludCByZXQ7CisJY2hhciAqYnVmZmVyOworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCisJYnVmZmVyID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKKwkJCWRldl93YXJuKCZwZWdhc3VzLT5pbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IGluICVzXG4iLAorCQkJCQlfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisKKwlhZGRfd2FpdF9xdWV1ZSgmcGVnYXN1cy0+Y3RybF93YWl0LCAmd2FpdCk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOworCXdoaWxlIChwZWdhc3VzLT5mbGFncyAmIEVUSF9SRUdTX0NIQU5HRUQpCisJCXNjaGVkdWxlKCk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJnBlZ2FzdXMtPmN0cmxfd2FpdCwgJndhaXQpOworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisKKwlwZWdhc3VzLT5kci5iUmVxdWVzdFR5cGUgPSBQRUdBU1VTX1JFUVRfV1JJVEU7CisJcGVnYXN1cy0+ZHIuYlJlcXVlc3QgPSBQRUdBU1VTX1JFUV9TRVRfUkVHUzsKKwlwZWdhc3VzLT5kci53VmFsdWUgPSBjcHVfdG9fbGUxNigwKTsKKwlwZWdhc3VzLT5kci53SW5kZXggPSBjcHVfdG9fbGUxNnAoJmluZHgpOworCXBlZ2FzdXMtPmRyLndMZW5ndGggPSBjcHVfdG9fbGUxNnAoJnNpemUpOworCXBlZ2FzdXMtPmN0cmxfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gc2l6ZTsKKworCXVzYl9maWxsX2NvbnRyb2xfdXJiKHBlZ2FzdXMtPmN0cmxfdXJiLCBwZWdhc3VzLT51c2IsCisJCQkgICAgIHVzYl9zbmRjdHJscGlwZShwZWdhc3VzLT51c2IsIDApLAorCQkJICAgICAoY2hhciAqKSAmcGVnYXN1cy0+ZHIsCisJCQkgICAgIGJ1ZmZlciwgc2l6ZSwgY3RybF9jYWxsYmFjaywgcGVnYXN1cyk7CisKKwlhZGRfd2FpdF9xdWV1ZSgmcGVnYXN1cy0+Y3RybF93YWl0LCAmd2FpdCk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOworCisJaWYgKChyZXQgPSB1c2Jfc3VibWl0X3VyYihwZWdhc3VzLT5jdHJsX3VyYiwgR0ZQX0FUT01JQykpKSB7CisJCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQorCQkJZGV2X2VycigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiJXMsIHN0YXR1cyAlZFxuIiwKKwkJCQkJX19GVU5DVElPTl9fLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlzY2hlZHVsZSgpOworb3V0OgorCXJlbW92ZV93YWl0X3F1ZXVlKCZwZWdhc3VzLT5jdHJsX3dhaXQsICZ3YWl0KTsKKwlrZnJlZShidWZmZXIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzZXRfcmVnaXN0ZXIocGVnYXN1c190ICogcGVnYXN1cywgX191MTYgaW5keCwgX191OCBkYXRhKQoreworCWludCByZXQ7CisJY2hhciAqdG1wOworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCisJdG1wID0ga21hbGxvYygxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRtcCkgeworCQlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKKwkJCWRldl93YXJuKCZwZWdhc3VzLT5pbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IGluICVzXG4iLAorCQkJCQlfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtY3B5KHRtcCwgJmRhdGEsIDEpOworCWFkZF93YWl0X3F1ZXVlKCZwZWdhc3VzLT5jdHJsX3dhaXQsICZ3YWl0KTsKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJd2hpbGUgKHBlZ2FzdXMtPmZsYWdzICYgRVRIX1JFR1NfQ0hBTkdFRCkKKwkJc2NoZWR1bGUoKTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmcGVnYXN1cy0+Y3RybF93YWl0LCAmd2FpdCk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKworCXBlZ2FzdXMtPmRyLmJSZXF1ZXN0VHlwZSA9IFBFR0FTVVNfUkVRVF9XUklURTsKKwlwZWdhc3VzLT5kci5iUmVxdWVzdCA9IFBFR0FTVVNfUkVRX1NFVF9SRUc7CisJcGVnYXN1cy0+ZHIud1ZhbHVlID0gY3B1X3RvX2xlMTYoZGF0YSk7CisJcGVnYXN1cy0+ZHIud0luZGV4ID0gY3B1X3RvX2xlMTZwKCZpbmR4KTsKKwlwZWdhc3VzLT5kci53TGVuZ3RoID0gY3B1X3RvX2xlMTYoMSk7CisJcGVnYXN1cy0+Y3RybF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAxOworCisJdXNiX2ZpbGxfY29udHJvbF91cmIocGVnYXN1cy0+Y3RybF91cmIsIHBlZ2FzdXMtPnVzYiwKKwkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKHBlZ2FzdXMtPnVzYiwgMCksCisJCQkgICAgIChjaGFyICopICZwZWdhc3VzLT5kciwKKwkJCSAgICAgJnRtcCwgMSwgY3RybF9jYWxsYmFjaywgcGVnYXN1cyk7CisKKwlhZGRfd2FpdF9xdWV1ZSgmcGVnYXN1cy0+Y3RybF93YWl0LCAmd2FpdCk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOworCisJaWYgKChyZXQgPSB1c2Jfc3VibWl0X3VyYihwZWdhc3VzLT5jdHJsX3VyYiwgR0ZQX0FUT01JQykpKSB7CisJCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQorCQkJZGV2X2VycigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiJXMsIHN0YXR1cyAlZFxuIiwKKwkJCQkJX19GVU5DVElPTl9fLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlzY2hlZHVsZSgpOworb3V0OgorCXJlbW92ZV93YWl0X3F1ZXVlKCZwZWdhc3VzLT5jdHJsX3dhaXQsICZ3YWl0KTsKKwlrZnJlZSh0bXApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB1cGRhdGVfZXRoX3JlZ3NfYXN5bmMocGVnYXN1c190ICogcGVnYXN1cykKK3sKKwlpbnQgcmV0OworCisJcGVnYXN1cy0+ZHIuYlJlcXVlc3RUeXBlID0gUEVHQVNVU19SRVFUX1dSSVRFOworCXBlZ2FzdXMtPmRyLmJSZXF1ZXN0ID0gUEVHQVNVU19SRVFfU0VUX1JFR1M7CisJcGVnYXN1cy0+ZHIud1ZhbHVlID0gMDsKKwlwZWdhc3VzLT5kci53SW5kZXggPSBjcHVfdG9fbGUxNihFdGhDdHJsMCk7CisJcGVnYXN1cy0+ZHIud0xlbmd0aCA9IGNwdV90b19sZTE2KDMpOworCXBlZ2FzdXMtPmN0cmxfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gMzsKKworCXVzYl9maWxsX2NvbnRyb2xfdXJiKHBlZ2FzdXMtPmN0cmxfdXJiLCBwZWdhc3VzLT51c2IsCisJCQkgICAgIHVzYl9zbmRjdHJscGlwZShwZWdhc3VzLT51c2IsIDApLAorCQkJICAgICAoY2hhciAqKSAmcGVnYXN1cy0+ZHIsCisJCQkgICAgIHBlZ2FzdXMtPmV0aF9yZWdzLCAzLCBjdHJsX2NhbGxiYWNrLCBwZWdhc3VzKTsKKworCWlmICgocmV0ID0gdXNiX3N1Ym1pdF91cmIocGVnYXN1cy0+Y3RybF91cmIsIEdGUF9BVE9NSUMpKSkKKwkJaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCisJCQlkZXZfZXJyKCZwZWdhc3VzLT5pbnRmLT5kZXYsICIlcywgc3RhdHVzICVkXG4iLAorCQkJCQlfX0ZVTkNUSU9OX18sIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJlYWRfbWlpX3dvcmQocGVnYXN1c190ICogcGVnYXN1cywgX191OCBwaHksIF9fdTggaW5keCwgX191MTYgKiByZWdkKQoreworCWludCBpOworCV9fdTggZGF0YVs0XSA9IHsgcGh5LCAwLCAwLCBpbmR4IH07CisJX19sZTE2IHJlZ2RpOworCWludCByZXQ7CisKKwlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgUGh5Q3RybCwgMCk7CisJcmV0ID0gc2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBQaHlBZGRyLCBzaXplb2YgKGRhdGEpLCBkYXRhKTsKKwlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgUGh5Q3RybCwgKGluZHggfCBQSFlfUkVBRCkpOworCWZvciAoaSA9IDA7IGkgPCBSRUdfVElNRU9VVDsgaSsrKSB7CisJCXJldCA9IGdldF9yZWdpc3RlcnMocGVnYXN1cywgUGh5Q3RybCwgMSwgZGF0YSk7CisJCWlmIChkYXRhWzBdICYgUEhZX0RPTkUpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPCBSRUdfVElNRU9VVCkgeworCQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIFBoeURhdGEsIDIsICZyZWdkaSk7CisJCSpyZWdkID0gbGUxNl90b19jcHUocmVnZGkpOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCisJCWRldl93YXJuKCZwZWdhc3VzLT5pbnRmLT5kZXYsICJmYWlsICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2MpCit7CisJcGVnYXN1c190ICpwZWdhc3VzID0gKHBlZ2FzdXNfdCAqKSBuZXRkZXZfcHJpdihkZXYpOworCXUxNiByZXM7CisKKwlyZWFkX21paV93b3JkKHBlZ2FzdXMsIHBoeV9pZCwgbG9jLCAmcmVzKTsKKwlyZXR1cm4gKGludClyZXM7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfbWlpX3dvcmQocGVnYXN1c190ICogcGVnYXN1cywgX191OCBwaHksIF9fdTggaW5keCwgX191MTYgcmVnZCkKK3sKKwlpbnQgaTsKKwlfX3U4IGRhdGFbNF0gPSB7IHBoeSwgMCwgMCwgaW5keCB9OworCWludCByZXQ7CisKKwlkYXRhWzFdID0gKHU4KSByZWdkOworCWRhdGFbMl0gPSAodTgpIChyZWdkID4+IDgpOworCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBQaHlDdHJsLCAwKTsKKwlyZXQgPSBzZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIFBoeUFkZHIsIHNpemVvZihkYXRhKSwgZGF0YSk7CisJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIFBoeUN0cmwsIChpbmR4IHwgUEhZX1dSSVRFKSk7CisJZm9yIChpID0gMDsgaSA8IFJFR19USU1FT1VUOyBpKyspIHsKKwkJcmV0ID0gZ2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBQaHlDdHJsLCAxLCBkYXRhKTsKKwkJaWYgKGRhdGFbMF0gJiBQSFlfRE9ORSkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA8IFJFR19USU1FT1VUKQorCQlyZXR1cm4gMDsKKworCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQorCQlkZXZfd2FybigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiZmFpbCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jLCBpbnQgdmFsKQoreworCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IChwZWdhc3VzX3QgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKworCXdyaXRlX21paV93b3JkKHBlZ2FzdXMsIHBoeV9pZCwgbG9jLCB2YWwpOworfQorCitzdGF0aWMgaW50IHJlYWRfZXByb21fd29yZChwZWdhc3VzX3QgKiBwZWdhc3VzLCBfX3U4IGluZGV4LCBfX3UxNiAqIHJldGRhdGEpCit7CisJaW50IGk7CisJX191OCB0bXA7CisJX19sZTE2IHJldGRhdGFpOworCWludCByZXQ7CisKKwlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgRXByb21DdHJsLCAwKTsKKwlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgRXByb21PZmZzZXQsIGluZGV4KTsKKwlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgRXByb21DdHJsLCBFUFJPTV9SRUFEKTsKKworCWZvciAoaSA9IDA7IGkgPCBSRUdfVElNRU9VVDsgaSsrKSB7CisJCXJldCA9IGdldF9yZWdpc3RlcnMocGVnYXN1cywgRXByb21DdHJsLCAxLCAmdG1wKTsKKwkJaWYgKHRtcCAmIEVQUk9NX0RPTkUpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPCBSRUdfVElNRU9VVCkgeworCQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEVwcm9tRGF0YSwgMiwgJnJldGRhdGFpKTsKKwkJKnJldGRhdGEgPSBsZTE2X3RvX2NwdShyZXRkYXRhaSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQorCQlkZXZfd2FybigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiZmFpbCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlyZXR1cm4gLTE7Cit9CisKKyNpZmRlZglQRUdBU1VTX1dSSVRFX0VFUFJPTQorc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9lcHJvbV93cml0ZShwZWdhc3VzX3QgKiBwZWdhc3VzKQoreworCV9fdTggdG1wOworCWludCByZXQ7CisKKwlyZXQgPSBnZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEV0aEN0cmwyLCAxLCAmdG1wKTsKKwlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgRXRoQ3RybDIsIHRtcCB8IEVQUk9NX1dSX0VOQUJMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2Vwcm9tX3dyaXRlKHBlZ2FzdXNfdCAqIHBlZ2FzdXMpCit7CisJX191OCB0bXA7CisJaW50IHJldDsKKworCXJldCA9IGdldF9yZWdpc3RlcnMocGVnYXN1cywgRXRoQ3RybDIsIDEsICZ0bXApOworCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBFcHJvbUN0cmwsIDApOworCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBFdGhDdHJsMiwgdG1wICYgfkVQUk9NX1dSX0VOQUJMRSk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfZXByb21fd29yZChwZWdhc3VzX3QgKiBwZWdhc3VzLCBfX3U4IGluZGV4LCBfX3UxNiBkYXRhKQoreworCWludCBpOworCV9fdTggdG1wLCBkWzRdID0geyAweDNmLCAwLCAwLCBFUFJPTV9XUklURSB9OworCWludCByZXQ7CisKKwlyZXQgPSBzZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEVwcm9tT2Zmc2V0LCA0LCBkKTsKKwllbmFibGVfZXByb21fd3JpdGUocGVnYXN1cyk7CisJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEVwcm9tT2Zmc2V0LCBpbmRleCk7CisJcmV0ID0gc2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFcHJvbURhdGEsIDIsICZkYXRhKTsKKwlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgRXByb21DdHJsLCBFUFJPTV9XUklURSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUkVHX1RJTUVPVVQ7IGkrKykgeworCQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEVwcm9tQ3RybCwgMSwgJnRtcCk7CisJCWlmICh0bXAgJiBFUFJPTV9ET05FKQorCQkJYnJlYWs7CisJfQorCWRpc2FibGVfZXByb21fd3JpdGUocGVnYXN1cyk7CisJaWYgKGkgPCBSRUdfVElNRU9VVCkKKwkJcmV0dXJuIDA7CisJaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCisJCWRldl93YXJuKCZwZWdhc3VzLT5pbnRmLT5kZXYsICJmYWlsICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCXJldHVybiAtMTsKK30KKyNlbmRpZgkJCQkvKiBQRUdBU1VTX1dSSVRFX0VFUFJPTSAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vZGVfaWQocGVnYXN1c190ICogcGVnYXN1cywgX191OCAqIGlkKQoreworCWludCBpOworCV9fdTE2IHcxNjsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJcmVhZF9lcHJvbV93b3JkKHBlZ2FzdXMsIGksICZ3MTYpOworCQkoKF9fbGUxNiAqKSBpZClbaV0gPSBjcHVfdG9fbGUxNnAoJncxNik7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRfZXRoZXJuZXRfYWRkcihwZWdhc3VzX3QgKiBwZWdhc3VzKQoreworCV9fdTggbm9kZV9pZFs2XTsKKwlpbnQgcmV0OworCisJZ2V0X25vZGVfaWQocGVnYXN1cywgbm9kZV9pZCk7CisJcmV0ID0gc2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFdGhJRCwgc2l6ZW9mIChub2RlX2lkKSwgbm9kZV9pZCk7CisJbWVtY3B5KHBlZ2FzdXMtPm5ldC0+ZGV2X2FkZHIsIG5vZGVfaWQsIHNpemVvZiAobm9kZV9pZCkpOworfQorCitzdGF0aWMgaW5saW5lIGludCByZXNldF9tYWMocGVnYXN1c190ICogcGVnYXN1cykKK3sKKwlfX3U4IGRhdGEgPSAweDg7CisJaW50IGk7CisJaW50IHJldDsKKworCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBFdGhDdHJsMSwgZGF0YSk7CisJZm9yIChpID0gMDsgaSA8IFJFR19USU1FT1VUOyBpKyspIHsKKwkJcmV0ID0gZ2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFdGhDdHJsMSwgMSwgJmRhdGEpOworCQlpZiAofmRhdGEgJiAweDA4KSB7CisJCQlpZiAobG9vcGJhY2sgJiAxKQorCQkJCWJyZWFrOworCQkJaWYgKG1paV9tb2RlICYmIChwZWdhc3VzLT5mZWF0dXJlcyAmIEhBU19IT01FX1BOQSkpCisJCQkJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEdwaW8xLCAweDM0KTsKKwkJCWVsc2UKKwkJCQlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgR3BpbzEsIDB4MjYpOworCQkJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEdwaW8wLCBwZWdhc3VzLT5mZWF0dXJlcyk7CisJCQlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgR3BpbzAsIERFRkFVTFRfR1BJT19TRVQpOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGkgPT0gUkVHX1RJTUVPVVQpCisJCXJldHVybiAxOworCisJaWYgKHVzYl9kZXZfaWRbcGVnYXN1cy0+ZGV2X2luZGV4XS52ZW5kb3IgPT0gVkVORE9SX0xJTktTWVMgfHwKKwkgICAgdXNiX2Rldl9pZFtwZWdhc3VzLT5kZXZfaW5kZXhdLnZlbmRvciA9PSBWRU5ET1JfRExJTkspIHsKKwkJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEdwaW8wLCAweDI0KTsKKwkJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEdwaW8wLCAweDI2KTsKKwl9CisJaWYgKHVzYl9kZXZfaWRbcGVnYXN1cy0+ZGV2X2luZGV4XS52ZW5kb3IgPT0gVkVORE9SX0VMQ09OKSB7CisJCV9fdTE2IGF1eG1vZGU7CisJCXJlYWRfbWlpX3dvcmQocGVnYXN1cywgMywgMHgxYiwgJmF1eG1vZGUpOworCQl3cml0ZV9taWlfd29yZChwZWdhc3VzLCAzLCAweDFiLCBhdXhtb2RlIHwgNCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZW5hYmxlX25ldF90cmFmZmljKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB1c2JfZGV2aWNlICp1c2IpCit7CisJX191MTYgbGlua3BhcnQ7CisJX191OCBkYXRhWzRdOworCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJldDsKKworCXJlYWRfbWlpX3dvcmQocGVnYXN1cywgcGVnYXN1cy0+cGh5LCBNSUlfTFBBLCAmbGlua3BhcnQpOworCWRhdGFbMF0gPSAweGM5OworCWRhdGFbMV0gPSAwOworCWlmIChsaW5rcGFydCAmIChBRFZFUlRJU0VfMTAwRlVMTCB8IEFEVkVSVElTRV8xMEZVTEwpKQorCQlkYXRhWzFdIHw9IDB4MjA7CS8qIHNldCBmdWxsIGR1cGxleCAqLworCWlmIChsaW5rcGFydCAmIChBRFZFUlRJU0VfMTAwRlVMTCB8IEFEVkVSVElTRV8xMDBIQUxGKSkKKwkJZGF0YVsxXSB8PSAweDEwOwkvKiBzZXQgMTAwIE1icHMgKi8KKwlpZiAobWlpX21vZGUpCisJCWRhdGFbMV0gPSAwOworCWRhdGFbMl0gPSAobG9vcGJhY2sgJiAxKSA/IDB4MDkgOiAweDAxOworCisJbWVtY3B5KHBlZ2FzdXMtPmV0aF9yZWdzLCBkYXRhLCBzaXplb2YgKGRhdGEpKTsKKwlyZXQgPSBzZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEV0aEN0cmwwLCAzLCBkYXRhKTsKKworCWlmICh1c2JfZGV2X2lkW3BlZ2FzdXMtPmRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9MSU5LU1lTIHx8CisJICAgIHVzYl9kZXZfaWRbcGVnYXN1cy0+ZGV2X2luZGV4XS52ZW5kb3IgPT0gVkVORE9SX0RMSU5LKSB7CisJCXUxNiBhdXhtb2RlOworCQlyZWFkX21paV93b3JkKHBlZ2FzdXMsIDAsIDB4MWIsICZhdXhtb2RlKTsKKwkJd3JpdGVfbWlpX3dvcmQocGVnYXN1cywgMCwgMHgxYiwgYXV4bW9kZSB8IDQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmaWxsX3NrYl9wb29sKHBlZ2FzdXNfdCAqIHBlZ2FzdXMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUlhfU0tCUzsgaSsrKSB7CisJCWlmIChwZWdhc3VzLT5yeF9wb29sW2ldKQorCQkJY29udGludWU7CisJCXBlZ2FzdXMtPnJ4X3Bvb2xbaV0gPSBkZXZfYWxsb2Nfc2tiKFBFR0FTVVNfTVRVICsgMik7CisJCS8qCisJCSAqKiB3ZSBnaXZlIHVwIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWwuIHRoZSB0YXNrbGV0IHdpbGwgYmUKKwkJICoqIHJlc2NoZWR1bGVkIGFnYWluIGFueXdheS4uLgorCQkgKi8KKwkJaWYgKHBlZ2FzdXMtPnJ4X3Bvb2xbaV0gPT0gTlVMTCkKKwkJCXJldHVybjsKKwkJcGVnYXN1cy0+cnhfcG9vbFtpXS0+ZGV2ID0gcGVnYXN1cy0+bmV0OworCQlza2JfcmVzZXJ2ZShwZWdhc3VzLT5yeF9wb29sW2ldLCAyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfc2tiX3Bvb2wocGVnYXN1c190ICogcGVnYXN1cykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBSWF9TS0JTOyBpKyspIHsKKwkJaWYgKHBlZ2FzdXMtPnJ4X3Bvb2xbaV0pIHsKKwkJCWRldl9rZnJlZV9za2IocGVnYXN1cy0+cnhfcG9vbFtpXSk7CisJCQlwZWdhc3VzLT5yeF9wb29sW2ldID0gTlVMTDsKKwkJfQorCX0KK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqcHVsbF9za2IocGVnYXN1c190ICogcGVnYXN1cykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJZm9yIChpID0gMDsgaSA8IFJYX1NLQlM7IGkrKykgeworCQlpZiAobGlrZWx5KHBlZ2FzdXMtPnJ4X3Bvb2xbaV0gIT0gTlVMTCkpIHsKKwkJCXNrYiA9IHBlZ2FzdXMtPnJ4X3Bvb2xbaV07CisJCQlwZWdhc3VzLT5yeF9wb29sW2ldID0gTlVMTDsKKwkJCXJldHVybiBza2I7CisJCX0KKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0OworCWludCByeF9zdGF0dXMsIGNvdW50ID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCXU4ICpidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlfX3UxNiBwa3RfbGVuOworCisJaWYgKCFwZWdhc3VzKQorCQlyZXR1cm47CisKKwluZXQgPSBwZWdhc3VzLT5uZXQ7CisJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXQpIHx8ICFuZXRpZl9ydW5uaW5nKG5ldCkpCisJCXJldHVybjsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgLUVUSU1FRE9VVDoKKwkJaWYgKG5ldGlmX21zZ19yeF9lcnIocGVnYXN1cykpCisJCQlwcl9kZWJ1ZygiJXM6IHJlc2V0IE1BQ1xuIiwgbmV0LT5uYW1lKTsKKwkJcGVnYXN1cy0+ZmxhZ3MgJj0gflBFR0FTVVNfUlhfQlVTWTsKKwkJYnJlYWs7CisJY2FzZSAtRVBJUEU6CQkvKiBzdGFsbCwgb3IgZGlzY29ubmVjdCBmcm9tIFRUICovCisJCS8qIEZJWE1FIHNjaGVkdWxlIHdvcmsgdG8gY2xlYXIgdGhlIGhhbHQgKi8KKwkJaWYgKG5ldGlmX21zZ19yeF9lcnIocGVnYXN1cykpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogbm8gcnggc3RhbGwgcmVjb3ZlcnlcbiIsCisJCQkJCW5ldC0+bmFtZSk7CisJCXJldHVybjsKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FU0hVVERPV046CisJCWlmIChuZXRpZl9tc2dfaWZkb3duKHBlZ2FzdXMpKQorCQkJcHJfZGVidWcoIiVzOiByeCB1bmxpbmssICVkXG4iLCBuZXQtPm5hbWUsIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWlmIChuZXRpZl9tc2dfcnhfZXJyKHBlZ2FzdXMpKQorCQkJcHJfZGVidWcoIiVzOiBSWCBzdGF0dXMgJWRcbiIsIG5ldC0+bmFtZSwgdXJiLT5zdGF0dXMpOworCQlnb3RvIGdvb247CisJfQorCisJaWYgKCFjb3VudCB8fCBjb3VudCA8IDQpCisJCWdvdG8gZ29vbjsKKworCXJ4X3N0YXR1cyA9IGJ1Zltjb3VudCAtIDJdOworCWlmIChyeF9zdGF0dXMgJiAweDFlKSB7CisJCWlmIChuZXRpZl9tc2dfcnhfZXJyKHBlZ2FzdXMpKQorCQkJcHJfZGVidWcoIiVzOiBSWCBwYWNrZXQgZXJyb3IgJXhcbiIsCisJCQkJCW5ldC0+bmFtZSwgcnhfc3RhdHVzKTsKKwkJcGVnYXN1cy0+c3RhdHMucnhfZXJyb3JzKys7CisJCWlmIChyeF9zdGF0dXMgJiAweDA2KQkvLyBsb25nIG9yIHJ1bnQKKwkJCXBlZ2FzdXMtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJaWYgKHJ4X3N0YXR1cyAmIDB4MDgpCisJCQlwZWdhc3VzLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCWlmIChyeF9zdGF0dXMgJiAweDEwKQkvLyBleHRyYSBiaXRzCisJCQlwZWdhc3VzLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkJZ290byBnb29uOworCX0KKwlpZiAocGVnYXN1cy0+Y2hpcCA9PSAweDg1MTMpIHsKKwkJcGt0X2xlbiA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQlwa3RfbGVuICY9IDB4MGZmZjsKKwkJcGVnYXN1cy0+cnhfc2tiLT5kYXRhICs9IDI7CisJfSBlbHNlIHsKKwkJcGt0X2xlbiA9IGJ1Zltjb3VudCAtIDNdIDw8IDg7CisJCXBrdF9sZW4gKz0gYnVmW2NvdW50IC0gNF07CisJCXBrdF9sZW4gJj0gMHhmZmY7CisJCXBrdF9sZW4gLT0gODsKKwl9CisKKwkvKgorCSAqIGF0IHRoaXMgcG9pbnQgd2UgYXJlIHN1cmUgcGVnYXN1cy0+cnhfc2tiICE9IE5VTEwKKwkgKiBzbyB3ZSBnbyBhaGVhZCBhbmQgcGFzcyB1cCB0aGUgcGFja2V0LgorCSAqLworCXNrYl9wdXQocGVnYXN1cy0+cnhfc2tiLCBwa3RfbGVuKTsKKwlwZWdhc3VzLT5yeF9za2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMocGVnYXN1cy0+cnhfc2tiLCBuZXQpOworCW5ldGlmX3J4KHBlZ2FzdXMtPnJ4X3NrYik7CisJcGVnYXN1cy0+c3RhdHMucnhfcGFja2V0cysrOworCXBlZ2FzdXMtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CisKKwlpZiAocGVnYXN1cy0+ZmxhZ3MgJiBQRUdBU1VTX1VOUExVRykKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrKCZwZWdhc3VzLT5yeF9wb29sX2xvY2spOworCXBlZ2FzdXMtPnJ4X3NrYiA9IHB1bGxfc2tiKHBlZ2FzdXMpOworCXNwaW5fdW5sb2NrKCZwZWdhc3VzLT5yeF9wb29sX2xvY2spOworCisJaWYgKHBlZ2FzdXMtPnJ4X3NrYiA9PSBOVUxMKQorCQlnb3RvIHRsX3NjaGVkOworZ29vbjoKKwl1c2JfZmlsbF9idWxrX3VyYihwZWdhc3VzLT5yeF91cmIsIHBlZ2FzdXMtPnVzYiwKKwkJCSAgdXNiX3JjdmJ1bGtwaXBlKHBlZ2FzdXMtPnVzYiwgMSksCisJCQkgIHBlZ2FzdXMtPnJ4X3NrYi0+ZGF0YSwgUEVHQVNVU19NVFUgKyA4LAorCQkJICByZWFkX2J1bGtfY2FsbGJhY2ssIHBlZ2FzdXMpOworCWlmICh1c2Jfc3VibWl0X3VyYihwZWdhc3VzLT5yeF91cmIsIEdGUF9BVE9NSUMpKSB7CisJCXBlZ2FzdXMtPmZsYWdzIHw9IFBFR0FTVVNfUlhfVVJCX0ZBSUw7CisJCWdvdG8gdGxfc2NoZWQ7CisJfSBlbHNlIHsKKwkJcGVnYXN1cy0+ZmxhZ3MgJj0gflBFR0FTVVNfUlhfVVJCX0ZBSUw7CisJfQorCisJcmV0dXJuOworCit0bF9zY2hlZDoKKwl0YXNrbGV0X3NjaGVkdWxlKCZwZWdhc3VzLT5yeF90bCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ4X2ZpeHVwKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlwZWdhc3VzX3QgKnBlZ2FzdXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXBlZ2FzdXMgPSAocGVnYXN1c190ICopIGRhdGE7CisJaWYgKHBlZ2FzdXMtPmZsYWdzICYgUEVHQVNVU19VTlBMVUcpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwZWdhc3VzLT5yeF9wb29sX2xvY2ssIGZsYWdzKTsKKwlmaWxsX3NrYl9wb29sKHBlZ2FzdXMpOworCWlmIChwZWdhc3VzLT5mbGFncyAmIFBFR0FTVVNfUlhfVVJCX0ZBSUwpCisJCWlmIChwZWdhc3VzLT5yeF9za2IpCisJCQlnb3RvIHRyeV9hZ2FpbjsKKwlpZiAocGVnYXN1cy0+cnhfc2tiID09IE5VTEwpIHsKKwkJcGVnYXN1cy0+cnhfc2tiID0gcHVsbF9za2IocGVnYXN1cyk7CisJfQorCWlmIChwZWdhc3VzLT5yeF9za2IgPT0gTlVMTCkgeworCQlpZiAobmV0aWZfbXNnX3J4X2VycihwZWdhc3VzKSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBsb3cgb24gbWVtb3J5XG4iLAorCQkJCQlwZWdhc3VzLT5uZXQtPm5hbWUpOworCQl0YXNrbGV0X3NjaGVkdWxlKCZwZWdhc3VzLT5yeF90bCk7CisJCWdvdG8gZG9uZTsKKwl9CisJdXNiX2ZpbGxfYnVsa191cmIocGVnYXN1cy0+cnhfdXJiLCBwZWdhc3VzLT51c2IsCisJCQkgIHVzYl9yY3ZidWxrcGlwZShwZWdhc3VzLT51c2IsIDEpLAorCQkJICBwZWdhc3VzLT5yeF9za2ItPmRhdGEsIFBFR0FTVVNfTVRVICsgOCwKKwkJCSAgcmVhZF9idWxrX2NhbGxiYWNrLCBwZWdhc3VzKTsKK3RyeV9hZ2FpbjoKKwlpZiAodXNiX3N1Ym1pdF91cmIocGVnYXN1cy0+cnhfdXJiLCBHRlBfQVRPTUlDKSkgeworCQlwZWdhc3VzLT5mbGFncyB8PSBQRUdBU1VTX1JYX1VSQl9GQUlMOworCQl0YXNrbGV0X3NjaGVkdWxlKCZwZWdhc3VzLT5yeF90bCk7CisJfSBlbHNlIHsKKwkJcGVnYXN1cy0+ZmxhZ3MgJj0gflBFR0FTVVNfUlhfVVJCX0ZBSUw7CisJfQorZG9uZToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZWdhc3VzLT5yeF9wb29sX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ID0gcGVnYXN1cy0+bmV0OworCisJaWYgKCFwZWdhc3VzKQorCQlyZXR1cm47CisKKwlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldCkgfHwgIW5ldGlmX3J1bm5pbmcobmV0KSkKKwkJcmV0dXJuOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgLUVQSVBFOgorCQkvKiBGSVhNRSBzY2hlZHVsZV93b3JrKCkgdG8gY2xlYXIgdGhlIHR4IGhhbHQgKi8KKwkJbmV0aWZfc3RvcF9xdWV1ZShuZXQpOworCQlpZiAobmV0aWZfbXNnX3R4X2VycihwZWdhc3VzKSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBubyB0eCBzdGFsbCByZWNvdmVyeVxuIiwKKwkJCQkJbmV0LT5uYW1lKTsKKwkJcmV0dXJuOworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJaWYgKG5ldGlmX21zZ19pZmRvd24ocGVnYXN1cykpCisJCQlwcl9kZWJ1ZygiJXM6IHR4IHVubGluaywgJWRcbiIsIG5ldC0+bmFtZSwgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJaWYgKG5ldGlmX21zZ190eF9lcnIocGVnYXN1cykpCisJCQlwcl9pbmZvKCIlczogVFggc3RhdHVzICVkXG4iLCBuZXQtPm5hbWUsIHVyYi0+c3RhdHVzKTsKKwkJLyogRkFMTCBUSFJPVUdIICovCisJY2FzZSAwOgorCQlicmVhazsKKwl9CisKKwluZXQtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwluZXRpZl93YWtlX3F1ZXVlKG5ldCk7Cit9CisKK3N0YXRpYyB2b2lkIGludHJfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlwZWdhc3VzX3QgKnBlZ2FzdXMgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldDsKKwlpbnQgc3RhdHVzOworCisJaWYgKCFwZWdhc3VzKQorCQlyZXR1cm47CisJbmV0ID0gcGVnYXN1cy0+bmV0OworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoJLyogdW5saW5rICovCisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCS8qIHNvbWUgUGVnYXN1cy1JIHByb2R1Y3RzIHJlcG9ydCBMT1RTIG9mIGRhdGEKKwkJICogdG9nZ2xlIGVycm9ycy4uLiBhdm9pZCBsb2cgc3BhbW1pbmcKKwkJICovCisJCWlmIChuZXRpZl9tc2dfdGltZXIocGVnYXN1cykpCisJCQlwcl9kZWJ1ZygiJXM6IGludHIgc3RhdHVzICVkXG4iLCBuZXQtPm5hbWUsCisJCQkJCXVyYi0+c3RhdHVzKTsKKwl9CisKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID49IDYpIHsKKwkJdTgJKiBkID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwkJLyogYnl0ZSAwID09IHR4X3N0YXR1czEsIHJlZyAyQiAqLworCQlpZiAoZFswXSAmIChUWF9VTkRFUlJVTnxFWENFU1NJVkVfQ09MCisJCQkJCXxMQVRFX0NPTHxKQUJCRVJfVElNRU9VVCkpIHsKKwkJCXBlZ2FzdXMtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJaWYgKGRbMF0gJiBUWF9VTkRFUlJVTikKKwkJCQlwZWdhc3VzLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOworCQkJaWYgKGRbMF0gJiAoRVhDRVNTSVZFX0NPTCB8IEpBQkJFUl9USU1FT1VUKSkKKwkJCQlwZWdhc3VzLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQkJaWYgKGRbMF0gJiBMQVRFX0NPTCkKKwkJCQlwZWdhc3VzLT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7CisJCX0KKworCQkvKiBkWzVdLkxJTktfU1RBVFVTIGxpZXMgb24gc29tZSBhZGFwdGVycy4KKwkJICogZFswXS5OT19DQVJSSUVSIGtpY2tzIGluIG9ubHkgd2l0aCBmYWlsZWQgVFguCisJCSAqIC4uLiBzbyBtb25pdG9yaW5nIHdpdGggTUlJIG1heSBiZSBzYWZlc3QuCisJCSAqLworCQlpZiAoZFswXSAmIE5PX0NBUlJJRVIpCisJCQluZXRpZl9jYXJyaWVyX29mZihuZXQpOwkKKwkJZWxzZQorCQkJbmV0aWZfY2Fycmllcl9vbihuZXQpOworCisJCS8qIGJ5dGVzIDMtNCA9PSByeF9sb3N0cGt0LCByZWcgMkUvMkYgKi8KKwkJcGVnYXN1cy0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyArPSAoKGRbM10gJiAweDdmKSA8PCA4KSB8IGRbNF07CisJfQorCisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBTTEFCX0FUT01JQyk7CisJaWYgKHN0YXR1cyAmJiBuZXRpZl9tc2dfdGltZXIocGVnYXN1cykpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IHJlc3VibWl0IGludGVycnVwdCB1cmIsICVkXG4iLAorCQkJCW5ldC0+bmFtZSwgc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgcGVnYXN1c190eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJcGVnYXN1c190ICpwZWdhc3VzID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlpZiAobmV0aWZfbXNnX3RpbWVyKHBlZ2FzdXMpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdHggdGltZW91dFxuIiwgbmV0LT5uYW1lKTsKKwlwZWdhc3VzLT50eF91cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9BU1lOQ19VTkxJTks7CisJdXNiX3VubGlua191cmIocGVnYXN1cy0+dHhfdXJiKTsKKwlwZWdhc3VzLT5zdGF0cy50eF9lcnJvcnMrKzsKK30KKworc3RhdGljIGludCBwZWdhc3VzX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlwZWdhc3VzX3QgKnBlZ2FzdXMgPSBuZXRkZXZfcHJpdihuZXQpOworCWludCBjb3VudCA9ICgoc2tiLT5sZW4gKyAyKSAmIDB4M2YpID8gc2tiLT5sZW4gKyAyIDogc2tiLT5sZW4gKyAzOworCWludCByZXM7CisJX191MTYgbDE2ID0gc2tiLT5sZW47CisKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldCk7CisKKwkoKF9fbGUxNiAqKSBwZWdhc3VzLT50eF9idWZmKVswXSA9IGNwdV90b19sZTE2KGwxNik7CisJbWVtY3B5KHBlZ2FzdXMtPnR4X2J1ZmYgKyAyLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwl1c2JfZmlsbF9idWxrX3VyYihwZWdhc3VzLT50eF91cmIsIHBlZ2FzdXMtPnVzYiwKKwkJCSAgdXNiX3NuZGJ1bGtwaXBlKHBlZ2FzdXMtPnVzYiwgMiksCisJCQkgIHBlZ2FzdXMtPnR4X2J1ZmYsIGNvdW50LAorCQkJICB3cml0ZV9idWxrX2NhbGxiYWNrLCBwZWdhc3VzKTsKKwlpZiAoKHJlcyA9IHVzYl9zdWJtaXRfdXJiKHBlZ2FzdXMtPnR4X3VyYiwgR0ZQX0FUT01JQykpKSB7CisJCWlmIChuZXRpZl9tc2dfdHhfZXJyKHBlZ2FzdXMpKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZhaWwgdHgsICVkXG4iLAorCQkJCQluZXQtPm5hbWUsIHJlcyk7CisJCXN3aXRjaCAocmVzKSB7CisJCWNhc2UgLUVQSVBFOgkJLyogc3RhbGwsIG9yIGRpc2Nvbm5lY3QgZnJvbSBUVCAqLworCQkJLyogY2xlYW51cCBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gc2NoZWR1bGVkICovCisJCQlicmVhazsKKwkJY2FzZSAtRU5PREVWOgkJLyogZGlzY29ubmVjdCgpIHVwY29taW5nICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXBlZ2FzdXMtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJbmV0aWZfc3RhcnRfcXVldWUobmV0KTsKKwkJfQorCX0gZWxzZSB7CisJCXBlZ2FzdXMtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJcGVnYXN1cy0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCW5ldC0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCX0KKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpwZWdhc3VzX25ldGRldl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiAmKChwZWdhc3VzX3QgKikgbmV0ZGV2X3ByaXYoZGV2KSktPnN0YXRzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9uZXRfdHJhZmZpYyhwZWdhc3VzX3QgKiBwZWdhc3VzKQoreworCWludCB0bXAgPSAwOworCWludCByZXQ7CisKKwlyZXQgPSBzZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEV0aEN0cmwwLCAyLCAmdG1wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdldF9pbnRlcnJ1cHRfaW50ZXJ2YWwocGVnYXN1c190ICogcGVnYXN1cykKK3sKKwlfX3U4IGRhdGFbMl07CisKKwlyZWFkX2Vwcm9tX3dvcmQocGVnYXN1cywgNCwgKF9fdTE2ICopIGRhdGEpOworCWlmIChkYXRhWzFdIDwgMHg4MCkgeworCQlpZiAobmV0aWZfbXNnX3RpbWVyKHBlZ2FzdXMpKQorCQkJZGV2X2luZm8oJnBlZ2FzdXMtPmludGYtPmRldiwKKwkJCQkiaW50ciBpbnRlcnZhbCBjaGFuZ2VkIGZyb20gJXVtcyB0byAldW1zXG4iLAorCQkJCWRhdGFbMV0sIDB4ODApOworCQlkYXRhWzFdID0gMHg4MDsKKyNpZmRlZglQRUdBU1VTX1dSSVRFX0VFUFJPTQorCQl3cml0ZV9lcHJvbV93b3JkKHBlZ2FzdXMsIDQsICooX191MTYgKikgZGF0YSk7CisjZW5kaWYKKwl9CisJcGVnYXN1cy0+aW50cl9pbnRlcnZhbCA9IGRhdGFbMV07Cit9CisKK3N0YXRpYyB2b2lkIHNldF9jYXJyaWVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJcGVnYXN1c190ICpwZWdhc3VzID0gbmV0ZGV2X3ByaXYobmV0KTsKKwl1MTYgdG1wOworCisJaWYgKHJlYWRfbWlpX3dvcmQocGVnYXN1cywgcGVnYXN1cy0+cGh5LCBNSUlfQk1TUiwgJnRtcCkpCisJCXJldHVybjsKKwlpZiAodG1wICYgQk1TUl9MU1RBVFVTKQorCQluZXRpZl9jYXJyaWVyX29uKG5ldCk7CisJZWxzZQorCQluZXRpZl9jYXJyaWVyX29mZihuZXQpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2FsbF91cmJzKHBlZ2FzdXNfdCAqIHBlZ2FzdXMpCit7CisJdXNiX2ZyZWVfdXJiKHBlZ2FzdXMtPmludHJfdXJiKTsKKwl1c2JfZnJlZV91cmIocGVnYXN1cy0+dHhfdXJiKTsKKwl1c2JfZnJlZV91cmIocGVnYXN1cy0+cnhfdXJiKTsKKwl1c2JfZnJlZV91cmIocGVnYXN1cy0+Y3RybF91cmIpOworfQorCitzdGF0aWMgdm9pZCB1bmxpbmtfYWxsX3VyYnMocGVnYXN1c190ICogcGVnYXN1cykKK3sKKwl1c2Jfa2lsbF91cmIocGVnYXN1cy0+aW50cl91cmIpOworCXVzYl9raWxsX3VyYihwZWdhc3VzLT50eF91cmIpOworCXVzYl9raWxsX3VyYihwZWdhc3VzLT5yeF91cmIpOworCXVzYl9raWxsX3VyYihwZWdhc3VzLT5jdHJsX3VyYik7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfdXJicyhwZWdhc3VzX3QgKiBwZWdhc3VzKQoreworCXBlZ2FzdXMtPmN0cmxfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBlZ2FzdXMtPmN0cmxfdXJiKSB7CisJCXJldHVybiAwOworCX0KKwlwZWdhc3VzLT5yeF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghcGVnYXN1cy0+cnhfdXJiKSB7CisJCXVzYl9mcmVlX3VyYihwZWdhc3VzLT5jdHJsX3VyYik7CisJCXJldHVybiAwOworCX0KKwlwZWdhc3VzLT50eF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghcGVnYXN1cy0+dHhfdXJiKSB7CisJCXVzYl9mcmVlX3VyYihwZWdhc3VzLT5yeF91cmIpOworCQl1c2JfZnJlZV91cmIocGVnYXN1cy0+Y3RybF91cmIpOworCQlyZXR1cm4gMDsKKwl9CisJcGVnYXN1cy0+aW50cl91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghcGVnYXN1cy0+aW50cl91cmIpIHsKKwkJdXNiX2ZyZWVfdXJiKHBlZ2FzdXMtPnR4X3VyYik7CisJCXVzYl9mcmVlX3VyYihwZWdhc3VzLT5yeF91cmIpOworCQl1c2JfZnJlZV91cmIocGVnYXN1cy0+Y3RybF91cmIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwZWdhc3VzX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlwZWdhc3VzX3QgKnBlZ2FzdXMgPSBuZXRkZXZfcHJpdihuZXQpOworCWludCByZXM7CisKKwlpZiAocGVnYXN1cy0+cnhfc2tiID09IE5VTEwpCisJCXBlZ2FzdXMtPnJ4X3NrYiA9IHB1bGxfc2tiKHBlZ2FzdXMpOworCS8qCisJICoqIE5vdGU6IG5vIHBvaW50IHRvIGZyZWUgdGhlIHBvb2wuICBpdCBpcyBlbXB0eSA6LSkKKwkgKi8KKwlpZiAoIXBlZ2FzdXMtPnJ4X3NrYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXMgPSBzZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEV0aElELCA2LCBuZXQtPmRldl9hZGRyKTsKKwkKKwl1c2JfZmlsbF9idWxrX3VyYihwZWdhc3VzLT5yeF91cmIsIHBlZ2FzdXMtPnVzYiwKKwkJCSAgdXNiX3JjdmJ1bGtwaXBlKHBlZ2FzdXMtPnVzYiwgMSksCisJCQkgIHBlZ2FzdXMtPnJ4X3NrYi0+ZGF0YSwgUEVHQVNVU19NVFUgKyA4LAorCQkJICByZWFkX2J1bGtfY2FsbGJhY2ssIHBlZ2FzdXMpOworCWlmICgocmVzID0gdXNiX3N1Ym1pdF91cmIocGVnYXN1cy0+cnhfdXJiLCBHRlBfS0VSTkVMKSkpIHsKKwkJaWYgKG5ldGlmX21zZ19pZnVwKHBlZ2FzdXMpKQorCQkJcHJfZGVidWcoIiVzOiBmYWlsZWQgcnhfdXJiLCAlZCIsIG5ldC0+bmFtZSwgcmVzKTsKKwkJZ290byBleGl0OworCX0KKworCXVzYl9maWxsX2ludF91cmIocGVnYXN1cy0+aW50cl91cmIsIHBlZ2FzdXMtPnVzYiwKKwkJCSB1c2JfcmN2aW50cGlwZShwZWdhc3VzLT51c2IsIDMpLAorCQkJIHBlZ2FzdXMtPmludHJfYnVmZiwgc2l6ZW9mIChwZWdhc3VzLT5pbnRyX2J1ZmYpLAorCQkJIGludHJfY2FsbGJhY2ssIHBlZ2FzdXMsIHBlZ2FzdXMtPmludHJfaW50ZXJ2YWwpOworCWlmICgocmVzID0gdXNiX3N1Ym1pdF91cmIocGVnYXN1cy0+aW50cl91cmIsIEdGUF9LRVJORUwpKSkgeworCQlpZiAobmV0aWZfbXNnX2lmdXAocGVnYXN1cykpCisJCQlwcl9kZWJ1ZygiJXM6IGZhaWxlZCBpbnRyX3VyYiwgJWRcbiIsIG5ldC0+bmFtZSwgcmVzKTsKKwkJdXNiX2tpbGxfdXJiKHBlZ2FzdXMtPnJ4X3VyYik7CisJCWdvdG8gZXhpdDsKKwl9CisJaWYgKChyZXMgPSBlbmFibGVfbmV0X3RyYWZmaWMobmV0LCBwZWdhc3VzLT51c2IpKSkgeworCQlpZiAobmV0aWZfbXNnX2lmdXAocGVnYXN1cykpCisJCQlwcl9kZWJ1ZygiJXM6IGNhbid0IGVuYWJsZV9uZXRfdHJhZmZpYygpIC0gJWRcbiIsCisJCQkJCW5ldC0+bmFtZSwgcmVzKTsKKwkJcmVzID0gLUVJTzsKKwkJdXNiX2tpbGxfdXJiKHBlZ2FzdXMtPnJ4X3VyYik7CisJCXVzYl9raWxsX3VyYihwZWdhc3VzLT5pbnRyX3VyYik7CisJCWZyZWVfc2tiX3Bvb2wocGVnYXN1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisJc2V0X2NhcnJpZXIobmV0KTsKKwluZXRpZl9zdGFydF9xdWV1ZShuZXQpOworCWlmIChuZXRpZl9tc2dfaWZ1cChwZWdhc3VzKSkKKwkJcHJfZGVidWcoIiVzOiBvcGVuXG4iLCBuZXQtPm5hbWUpOworCXJlcyA9IDA7CitleGl0OgorCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgcGVnYXN1c19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IG5ldGRldl9wcml2KG5ldCk7CisKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldCk7CisJaWYgKCEocGVnYXN1cy0+ZmxhZ3MgJiBQRUdBU1VTX1VOUExVRykpCisJCWRpc2FibGVfbmV0X3RyYWZmaWMocGVnYXN1cyk7CisJdGFza2xldF9raWxsKCZwZWdhc3VzLT5yeF90bCk7CisJdW5saW5rX2FsbF91cmJzKHBlZ2FzdXMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBlZ2FzdXNfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQoreworCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IG5ldGRldl9wcml2KGRldik7CisJc3RybmNweShpbmZvLT5kcml2ZXIsIGRyaXZlcl9uYW1lLCBzaXplb2YgKGluZm8tPmRyaXZlcikgLSAxKTsKKwlzdHJuY3B5KGluZm8tPnZlcnNpb24sIERSSVZFUl9WRVJTSU9OLCBzaXplb2YgKGluZm8tPnZlcnNpb24pIC0gMSk7CisJdXNiX21ha2VfcGF0aChwZWdhc3VzLT51c2IsIGluZm8tPmJ1c19pbmZvLCBzaXplb2YgKGluZm8tPmJ1c19pbmZvKSk7Cit9CisKKy8qIGFsc28gaGFuZGxlcyB0aHJlZSBwYXR0ZXJucyBvZiBzb21lIGtpbmQgaW4gaGFyZHdhcmUgKi8KKyNkZWZpbmUJV09MX1NVUFBPUlRFRAkoV0FLRV9NQUdJQ3xXQUtFX1BIWSkKKworc3RhdGljIHZvaWQKK3BlZ2FzdXNfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCit7CisJcGVnYXN1c190CSpwZWdhc3VzID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXdvbC0+c3VwcG9ydGVkID0gV0FLRV9NQUdJQyB8IFdBS0VfUEhZOworCXdvbC0+d29sb3B0cyA9IHBlZ2FzdXMtPndvbG9wdHM7Cit9CisKK3N0YXRpYyBpbnQKK3BlZ2FzdXNfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCit7CisJcGVnYXN1c190CSpwZWdhc3VzID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1OAkJcmVnNzggPSAweDA0OworCQorCWlmICh3b2wtPndvbG9wdHMgJiB+V09MX1NVUFBPUlRFRCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAod29sLT53b2xvcHRzICYgV0FLRV9NQUdJQykKKwkJcmVnNzggfD0gMHg4MDsKKwlpZiAod29sLT53b2xvcHRzICYgV0FLRV9QSFkpCisJCXJlZzc4IHw9IDB4NDA7CisJLyogRklYTUUgdGhpcyAweDEwIGJpdCBzdGlsbCBuZWVkcyB0byBnZXQgc2V0IGluIHRoZSBjaGlwLi4uICovCisJaWYgKHdvbC0+d29sb3B0cykKKwkJcGVnYXN1cy0+ZXRoX3JlZ3NbMF0gfD0gMHgxMDsKKwllbHNlCisJCXBlZ2FzdXMtPmV0aF9yZWdzWzBdICY9IH4weDEwOworCXBlZ2FzdXMtPndvbG9wdHMgPSB3b2wtPndvbG9wdHM7CisJcmV0dXJuIHNldF9yZWdpc3RlcihwZWdhc3VzLCBXYWtldXBDb250cm9sLCByZWc3OCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZWdhc3VzX3Jlc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBldGh0b29sX3dvbGluZm8gd29sOworCQorCW1lbXNldCgmd29sLCAwLCBzaXplb2Ygd29sKTsKKwkodm9pZCkgcGVnYXN1c19zZXRfd29sKGRldiwgJndvbCk7Cit9CisKK3N0YXRpYyBpbnQKK3BlZ2FzdXNfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKK3sKKwlwZWdhc3VzX3QgKnBlZ2FzdXM7CisKKwlpZiAoaW5fYXRvbWljKCkpCisJCXJldHVybiAwOworCisJcGVnYXN1cyA9IG5ldGRldl9wcml2KGRldik7CisJbWlpX2V0aHRvb2xfZ3NldCgmcGVnYXN1cy0+bWlpLCBlY21kKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitwZWdhc3VzX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCit7CisJcGVnYXN1c190ICpwZWdhc3VzID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlyZXR1cm4gbWlpX2V0aHRvb2xfc3NldCgmcGVnYXN1cy0+bWlpLCBlY21kKTsKK30KKworc3RhdGljIGludCBwZWdhc3VzX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlwZWdhc3VzX3QgKnBlZ2FzdXMgPSBuZXRkZXZfcHJpdihkZXYpOworCXJldHVybiBtaWlfbndheV9yZXN0YXJ0KCZwZWdhc3VzLT5taWkpOworfQorCitzdGF0aWMgdTMyIHBlZ2FzdXNfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlwZWdhc3VzX3QgKnBlZ2FzdXMgPSBuZXRkZXZfcHJpdihkZXYpOworCXJldHVybiBtaWlfbGlua19vaygmcGVnYXN1cy0+bWlpKTsKK30KKworc3RhdGljIHUzMiBwZWdhc3VzX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IG5ldGRldl9wcml2KGRldik7CisJcmV0dXJuIHBlZ2FzdXMtPm1zZ19lbmFibGU7Cit9CisKK3N0YXRpYyB2b2lkIHBlZ2FzdXNfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiB2KQoreworCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IG5ldGRldl9wcml2KGRldik7CisJcGVnYXN1cy0+bXNnX2VuYWJsZSA9IHY7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0geworCS5nZXRfZHJ2aW5mbyA9IHBlZ2FzdXNfZ2V0X2RydmluZm8sCisJLmdldF9zZXR0aW5ncyA9IHBlZ2FzdXNfZ2V0X3NldHRpbmdzLAorCS5zZXRfc2V0dGluZ3MgPSBwZWdhc3VzX3NldF9zZXR0aW5ncywKKwkubndheV9yZXNldCA9IHBlZ2FzdXNfbndheV9yZXNldCwKKwkuZ2V0X2xpbmsgPSBwZWdhc3VzX2dldF9saW5rLAorCS5nZXRfbXNnbGV2ZWwgPSBwZWdhc3VzX2dldF9tc2dsZXZlbCwKKwkuc2V0X21zZ2xldmVsID0gcGVnYXN1c19zZXRfbXNnbGV2ZWwsCisJLmdldF93b2wgPSBwZWdhc3VzX2dldF93b2wsCisJLnNldF93b2wgPSBwZWdhc3VzX3NldF93b2wsCit9OworCitzdGF0aWMgaW50IHBlZ2FzdXNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKK3sKKwlfX3UxNiAqZGF0YSA9IChfX3UxNiAqKSAmIHJxLT5pZnJfaWZydTsKKwlwZWdhc3VzX3QgKnBlZ2FzdXMgPSBuZXRkZXZfcHJpdihuZXQpOworCWludCByZXM7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0lPQ0RFVlBSSVZBVEU6CisJCWRhdGFbMF0gPSBwZWdhc3VzLT5waHk7CisJY2FzZSBTSU9DREVWUFJJVkFURSArIDE6CisJCXJlYWRfbWlpX3dvcmQocGVnYXN1cywgZGF0YVswXSwgZGF0YVsxXSAmIDB4MWYsICZkYXRhWzNdKTsKKwkJcmVzID0gMDsKKwkJYnJlYWs7CisJY2FzZSBTSU9DREVWUFJJVkFURSArIDI6CisJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJCXJldHVybiAtRVBFUk07CisJCXdyaXRlX21paV93b3JkKHBlZ2FzdXMsIHBlZ2FzdXMtPnBoeSwgZGF0YVsxXSAmIDB4MWYsIGRhdGFbMl0pOworCQlyZXMgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXMgPSAtRU9QTk9UU1VQUDsKKwl9CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgcGVnYXN1c19zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJcGVnYXN1c190ICpwZWdhc3VzID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCWlmIChuZXQtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJcGVnYXN1cy0+ZXRoX3JlZ3NbRXRoQ3RybDJdIHw9IFJYX1BST01JU0NVT1VTOworCQlpZiAobmV0aWZfbXNnX2xpbmsocGVnYXN1cykpCisJCQlwcl9pbmZvKCIlczogUHJvbWlzY3VvdXMgbW9kZSBlbmFibGVkLlxuIiwgbmV0LT5uYW1lKTsKKwl9IGVsc2UgaWYgKChuZXQtPm1jX2NvdW50ID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKKwkJICAgKG5ldC0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CisJCXBlZ2FzdXMtPmV0aF9yZWdzW0V0aEN0cmwwXSB8PSBSWF9NVUxUSUNBU1Q7CisJCXBlZ2FzdXMtPmV0aF9yZWdzW0V0aEN0cmwyXSAmPSB+UlhfUFJPTUlTQ1VPVVM7CisJCWlmIChuZXRpZl9tc2dfbGluayhwZWdhc3VzKSkKKwkJCXByX2luZm8oIiVzOiBzZXQgYWxsbXVsdGlcbiIsIG5ldC0+bmFtZSk7CisJfSBlbHNlIHsKKwkJcGVnYXN1cy0+ZXRoX3JlZ3NbRXRoQ3RybDBdICY9IH5SWF9NVUxUSUNBU1Q7CisJCXBlZ2FzdXMtPmV0aF9yZWdzW0V0aEN0cmwyXSAmPSB+UlhfUFJPTUlTQ1VPVVM7CisJfQorCisJcGVnYXN1cy0+ZmxhZ3MgfD0gRVRIX1JFR1NfQ0hBTkdFOworCWN0cmxfY2FsbGJhY2socGVnYXN1cy0+Y3RybF91cmIsIE5VTEwpOworfQorCitzdGF0aWMgX191OCBtaWlfcGh5X3Byb2JlKHBlZ2FzdXNfdCAqIHBlZ2FzdXMpCit7CisJaW50IGk7CisJX191MTYgdG1wOworCisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJcmVhZF9taWlfd29yZChwZWdhc3VzLCBpLCBNSUlfQk1TUiwgJnRtcCk7CisJCWlmICh0bXAgPT0gMCB8fCB0bXAgPT0gMHhmZmZmIHx8ICh0bXAgJiBCTVNSX01FRElBKSA9PSAwKQorCQkJY29udGludWU7CisJCWVsc2UKKwkJCXJldHVybiBpOworCX0KKworCXJldHVybiAweGZmOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfcGVnYXN1c19JSShwZWdhc3VzX3QgKiBwZWdhc3VzKQoreworCV9fdTggZGF0YSA9IDB4YTU7CisJaW50IHJldDsKKwkKKwlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgUmVnMWQsIDApOworCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBSZWc3YiwgMSk7CisJbWRlbGF5KDEwMCk7CisJaWYgKChwZWdhc3VzLT5mZWF0dXJlcyAmIEhBU19IT01FX1BOQSkgJiYgbWlpX21vZGUpCisJCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBSZWc3YiwgMCk7CisJZWxzZQorCQlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgUmVnN2IsIDIpOworCisJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIDB4ODMsIGRhdGEpOworCXJldCA9IGdldF9yZWdpc3RlcnMocGVnYXN1cywgMHg4MywgMSwgJmRhdGEpOworCisJaWYgKGRhdGEgPT0gMHhhNSkgeworCQlwZWdhc3VzLT5jaGlwID0gMHg4NTEzOworCX0gZWxzZSB7CisJCXBlZ2FzdXMtPmNoaXAgPSAwOworCX0KKworCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCAweDgwLCAweGMwKTsKKwlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgMHg4MywgMHhmZik7CisJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIDB4ODQsIDB4MDEpOworCQorCWlmIChwZWdhc3VzLT5mZWF0dXJlcyAmIEhBU19IT01FX1BOQSAmJiBtaWlfbW9kZSkKKwkJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIFJlZzgxLCA2KTsKKwllbHNlCisJCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBSZWc4MSwgMik7Cit9CisKKworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpwZWdhc3VzX3dvcmtxdWV1ZSA9IE5VTEw7CisjZGVmaW5lIENBUlJJRVJfQ0hFQ0tfREVMQVkgKDIgKiBIWikKKworc3RhdGljIHZvaWQgY2hlY2tfY2Fycmllcih2b2lkICpkYXRhKQoreworCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IGRhdGE7CisJc2V0X2NhcnJpZXIocGVnYXN1cy0+bmV0KTsKKwlpZiAoIShwZWdhc3VzLT5mbGFncyAmIFBFR0FTVVNfVU5QTFVHKSkgeworCQlxdWV1ZV9kZWxheWVkX3dvcmsocGVnYXN1c193b3JrcXVldWUsICZwZWdhc3VzLT5jYXJyaWVyX2NoZWNrLAorCQkJQ0FSUklFUl9DSEVDS19ERUxBWSk7CisJfQorfQorCitzdGF0aWMgaW50IHBlZ2FzdXNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQ7CisJcGVnYXN1c190ICpwZWdhc3VzOworCWludCBkZXZfaW5kZXggPSBpZCAtIHBlZ2FzdXNfaWRzOworCWludCByZXMgPSAtRU5PTUVNOworCisJdXNiX2dldF9kZXYoZGV2KTsKKwluZXQgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHBlZ2FzdXMpKTsKKwlpZiAoIW5ldCkgeworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJjYW4ndCBhbGxvY2F0ZSAlc1xuIiwgImRldmljZSIpOworCQlnb3RvIG91dDsKKwl9CisKKwlwZWdhc3VzID0gbmV0ZGV2X3ByaXYobmV0KTsKKwltZW1zZXQocGVnYXN1cywgMCwgc2l6ZW9mIChzdHJ1Y3QgcGVnYXN1cykpOworCXBlZ2FzdXMtPmRldl9pbmRleCA9IGRldl9pbmRleDsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwZWdhc3VzLT5jdHJsX3dhaXQpOworCisJaWYgKCFhbGxvY191cmJzKHBlZ2FzdXMpKSB7CisJCWRldl9lcnIoJmludGYtPmRldiwgImNhbid0IGFsbG9jYXRlICVzXG4iLCAidXJicyIpOworCQlnb3RvIG91dDE7CisJfQorCisJdGFza2xldF9pbml0KCZwZWdhc3VzLT5yeF90bCwgcnhfZml4dXAsICh1bnNpZ25lZCBsb25nKSBwZWdhc3VzKTsKKworCUlOSVRfV09SSygmcGVnYXN1cy0+Y2Fycmllcl9jaGVjaywgY2hlY2tfY2FycmllciwgcGVnYXN1cyk7CisKKwlwZWdhc3VzLT5pbnRmID0gaW50ZjsKKwlwZWdhc3VzLT51c2IgPSBkZXY7CisJcGVnYXN1cy0+bmV0ID0gbmV0OworCVNFVF9NT0RVTEVfT1dORVIobmV0KTsKKwluZXQtPm9wZW4gPSBwZWdhc3VzX29wZW47CisJbmV0LT5zdG9wID0gcGVnYXN1c19jbG9zZTsKKwluZXQtPndhdGNoZG9nX3RpbWVvID0gUEVHQVNVU19UWF9USU1FT1VUOworCW5ldC0+dHhfdGltZW91dCA9IHBlZ2FzdXNfdHhfdGltZW91dDsKKwluZXQtPmRvX2lvY3RsID0gcGVnYXN1c19pb2N0bDsKKwluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IHBlZ2FzdXNfc3RhcnRfeG1pdDsKKwluZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHBlZ2FzdXNfc2V0X211bHRpY2FzdDsKKwluZXQtPmdldF9zdGF0cyA9IHBlZ2FzdXNfbmV0ZGV2X3N0YXRzOworCVNFVF9FVEhUT09MX09QUyhuZXQsICZvcHMpOworCXBlZ2FzdXMtPm1paS5kZXYgPSBuZXQ7CisJcGVnYXN1cy0+bWlpLm1kaW9fcmVhZCA9IG1kaW9fcmVhZDsKKwlwZWdhc3VzLT5taWkubWRpb193cml0ZSA9IG1kaW9fd3JpdGU7CisJcGVnYXN1cy0+bWlpLnBoeV9pZF9tYXNrID0gMHgxZjsKKwlwZWdhc3VzLT5taWkucmVnX251bV9tYXNrID0gMHgxZjsKKwlzcGluX2xvY2tfaW5pdCgmcGVnYXN1cy0+cnhfcG9vbF9sb2NrKTsKKwlwZWdhc3VzLT5tc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQgKG1zZ19sZXZlbCwgTkVUSUZfTVNHX0RSVgorCQkJCXwgTkVUSUZfTVNHX1BST0JFIHwgTkVUSUZfTVNHX0xJTkspOworCisJcGVnYXN1cy0+ZmVhdHVyZXMgPSB1c2JfZGV2X2lkW2Rldl9pbmRleF0ucHJpdmF0ZTsKKwlnZXRfaW50ZXJydXB0X2ludGVydmFsKHBlZ2FzdXMpOworCWlmIChyZXNldF9tYWMocGVnYXN1cykpIHsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAiY2FuJ3QgcmVzZXQgTUFDXG4iKTsKKwkJcmVzID0gLUVJTzsKKwkJZ290byBvdXQyOworCX0KKwlzZXRfZXRoZXJuZXRfYWRkcihwZWdhc3VzKTsKKwlmaWxsX3NrYl9wb29sKHBlZ2FzdXMpOworCWlmIChwZWdhc3VzLT5mZWF0dXJlcyAmIFBFR0FTVVNfSUkpIHsKKwkJZGV2X2luZm8oJmludGYtPmRldiwgInNldHVwIFBlZ2FzdXMgSUkgc3BlY2lmaWMgcmVnaXN0ZXJzXG4iKTsKKwkJc2V0dXBfcGVnYXN1c19JSShwZWdhc3VzKTsKKwl9CisJcGVnYXN1cy0+cGh5ID0gbWlpX3BoeV9wcm9iZShwZWdhc3VzKTsKKwlpZiAocGVnYXN1cy0+cGh5ID09IDB4ZmYpIHsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwgImNhbid0IGxvY2F0ZSBNSUkgcGh5LCB1c2luZyBkZWZhdWx0XG4iKTsKKwkJcGVnYXN1cy0+cGh5ID0gMTsKKwl9CisJcGVnYXN1cy0+bWlpLnBoeV9pZCA9IHBlZ2FzdXMtPnBoeTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHBlZ2FzdXMpOworCVNFVF9ORVRERVZfREVWKG5ldCwgJmludGYtPmRldik7CisJcGVnYXN1c19yZXNldF93b2wobmV0KTsKKwlyZXMgPSByZWdpc3Rlcl9uZXRkZXYobmV0KTsKKwlpZiAocmVzKQorCQlnb3RvIG91dDM7CisJcXVldWVfZGVsYXllZF93b3JrKHBlZ2FzdXNfd29ya3F1ZXVlLCAmcGVnYXN1cy0+Y2Fycmllcl9jaGVjaywKKwkJCQlDQVJSSUVSX0NIRUNLX0RFTEFZKTsKKworCWRldl9pbmZvKCZpbnRmLT5kZXYsICIlcywgJXMsICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQluZXQtPm5hbWUsCisJCXVzYl9kZXZfaWRbZGV2X2luZGV4XS5uYW1lLAorCQluZXQtPmRldl9hZGRyIFswXSwgbmV0LT5kZXZfYWRkciBbMV0sCisJCW5ldC0+ZGV2X2FkZHIgWzJdLCBuZXQtPmRldl9hZGRyIFszXSwKKwkJbmV0LT5kZXZfYWRkciBbNF0sIG5ldC0+ZGV2X2FkZHIgWzVdKTsKKwlyZXR1cm4gMDsKKworb3V0MzoKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCWZyZWVfc2tiX3Bvb2wocGVnYXN1cyk7CitvdXQyOgorCWZyZWVfYWxsX3VyYnMocGVnYXN1cyk7CitvdXQxOgorCWZyZWVfbmV0ZGV2KG5ldCk7CitvdXQ6CisJdXNiX3B1dF9kZXYoZGV2KTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCBwZWdhc3VzX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHBlZ2FzdXMgKnBlZ2FzdXMgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwlpZiAoIXBlZ2FzdXMpIHsKKwkJZGV2X2RiZygmaW50Zi0+ZGV2LCAidW5yZWdpc3RlcmluZyBub24tYm91bmQgZGV2aWNlP1xuIik7CisJCXJldHVybjsKKwl9CisKKwlwZWdhc3VzLT5mbGFncyB8PSBQRUdBU1VTX1VOUExVRzsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwZWdhc3VzLT5jYXJyaWVyX2NoZWNrKTsKKwl1bnJlZ2lzdGVyX25ldGRldihwZWdhc3VzLT5uZXQpOworCXVzYl9wdXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZikpOworCWZyZWVfYWxsX3VyYnMocGVnYXN1cyk7CisJZnJlZV9za2JfcG9vbChwZWdhc3VzKTsKKwlpZiAocGVnYXN1cy0+cnhfc2tiKQorCQlkZXZfa2ZyZWVfc2tiKHBlZ2FzdXMtPnJ4X3NrYik7CisJZnJlZV9uZXRkZXYocGVnYXN1cy0+bmV0KTsKK30KKworc3RhdGljIGludCBwZWdhc3VzX3N1c3BlbmQgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHBlZ2FzdXMgKnBlZ2FzdXMgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCQorCW5ldGlmX2RldmljZV9kZXRhY2ggKHBlZ2FzdXMtPm5ldCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGVnYXN1c19yZXN1bWUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBwZWdhc3VzICpwZWdhc3VzID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCW5ldGlmX2RldmljZV9hdHRhY2ggKHBlZ2FzdXMtPm5ldCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwZWdhc3VzX2RyaXZlciA9IHsKKwkubmFtZSA9IGRyaXZlcl9uYW1lLAorCS5wcm9iZSA9IHBlZ2FzdXNfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBwZWdhc3VzX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0gcGVnYXN1c19pZHMsCisJLnN1c3BlbmQgPSBwZWdhc3VzX3N1c3BlbmQsCisJLnJlc3VtZSA9IHBlZ2FzdXNfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGVnYXN1c19pbml0KHZvaWQpCit7CisJcHJfaW5mbygiJXM6ICVzLCAiIERSSVZFUl9ERVNDICJcbiIsIGRyaXZlcl9uYW1lLCBEUklWRVJfVkVSU0lPTik7CisJcGVnYXN1c193b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgicGVnYXN1cyIpOworCWlmICghcGVnYXN1c193b3JrcXVldWUpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiB1c2JfcmVnaXN0ZXIoJnBlZ2FzdXNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHBlZ2FzdXNfZXhpdCh2b2lkKQoreworCWRlc3Ryb3lfd29ya3F1ZXVlKHBlZ2FzdXNfd29ya3F1ZXVlKTsKKwl1c2JfZGVyZWdpc3RlcigmcGVnYXN1c19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChwZWdhc3VzX2luaXQpOworbW9kdWxlX2V4aXQocGVnYXN1c19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmggYi9kcml2ZXJzL3VzYi9uZXQvcGVnYXN1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzY2NlZGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9uZXQvcGVnYXN1cy5oCkBAIC0wLDAgKzEsMjk4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDMgUGV0a28gTWFub2xvdiAtIFBldGthbiAocGV0a2FuQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKworI2lmbmRlZglQRUdBU1VTX0RFVgorCisjZGVmaW5lCVBFR0FTVVNfSUkJCTB4ODAwMDAwMDAKKyNkZWZpbmUJSEFTX0hPTUVfUE5BCQkweDQwMDAwMDAwCisKKyNkZWZpbmUJUEVHQVNVU19NVFUJCTE1MzYKKyNkZWZpbmUJUlhfU0tCUwkJCTQKKworI2RlZmluZQlFUFJPTV9XUklURQkJMHgwMQorI2RlZmluZQlFUFJPTV9SRUFECQkweDAyCisjZGVmaW5lCUVQUk9NX0RPTkUJCTB4MDQKKyNkZWZpbmUJRVBST01fV1JfRU5BQkxFCQkweDEwCisjZGVmaW5lCUVQUk9NX0xPQUQJCTB4MjAKKworI2RlZmluZQlQSFlfRE9ORQkJMHg4MAorI2RlZmluZQlQSFlfUkVBRAkJMHg0MAorI2RlZmluZQlQSFlfV1JJVEUJCTB4MjAKKyNkZWZpbmUJREVGQVVMVF9HUElPX1JFU0VUCTB4MjQKKyNkZWZpbmUJTElOS1NZU19HUElPX1JFU0VUCTB4MjQKKyNkZWZpbmUJREVGQVVMVF9HUElPX1NFVAkweDI2CisKKyNkZWZpbmUJUEVHQVNVU19QUkVTRU5UCQkweDAwMDAwMDAxCisjZGVmaW5lCVBFR0FTVVNfVFhfQlVTWQkJMHgwMDAwMDAwNAorI2RlZmluZQlQRUdBU1VTX1JYX0JVU1kJCTB4MDAwMDAwMDgKKyNkZWZpbmUJQ1RSTF9VUkJfUlVOTklORwkweDAwMDAwMDEwCisjZGVmaW5lCUNUUkxfVVJCX1NMRUVQCQkweDAwMDAwMDIwCisjZGVmaW5lCVBFR0FTVVNfVU5QTFVHCQkweDAwMDAwMDQwCisjZGVmaW5lCVBFR0FTVVNfUlhfVVJCX0ZBSUwJMHgwMDAwMDA4MAorI2RlZmluZQlFVEhfUkVHU19DSEFOR0UJCTB4NDAwMDAwMDAKKyNkZWZpbmUJRVRIX1JFR1NfQ0hBTkdFRAkweDgwMDAwMDAwCisKKyNkZWZpbmUJUlhfTVVMVElDQVNUCQkyCisjZGVmaW5lCVJYX1BST01JU0NVT1VTCQk0CisKKyNkZWZpbmUJUkVHX1RJTUVPVVQJCShIWikKKyNkZWZpbmUJUEVHQVNVU19UWF9USU1FT1VUCShIWioxMCkKKworI2RlZmluZQlUWF9VTkRFUlJVTgkJMHg4MAorI2RlZmluZQlFWENFU1NJVkVfQ09MCQkweDQwCisjZGVmaW5lCUxBVEVfQ09MCQkweDIwCisjZGVmaW5lCU5PX0NBUlJJRVIJCTB4MTAKKyNkZWZpbmUJTE9TU19DQVJSSUVSCQkweDA4CisjZGVmaW5lCUpBQkJFUl9USU1FT1VUCQkweDA0CisKKyNkZWZpbmUJTElOS19TVEFUVVMJCTB4MDEKKworI2RlZmluZQlQRUdBU1VTX1JFUVRfUkVBRAkweGMwCisjZGVmaW5lCVBFR0FTVVNfUkVRVF9XUklURQkweDQwCisjZGVmaW5lCVBFR0FTVVNfUkVRX0dFVF9SRUdTCTB4ZjAKKyNkZWZpbmUJUEVHQVNVU19SRVFfU0VUX1JFR1MJMHhmMQorI2RlZmluZQlQRUdBU1VTX1JFUV9TRVRfUkVHCVBFR0FTVVNfUkVRX1NFVF9SRUdTCisKK2VudW0gcGVnYXN1c19yZWdpc3RlcnMgeworCUV0aEN0cmwwID0gMCwKKwlFdGhDdHJsMSA9IDEsCisJRXRoQ3RybDIgPSAyLAorCUV0aElEID0gMHgxMCwKKwlSZWcxZCA9IDB4MWQsCisJRXByb21PZmZzZXQgPSAweDIwLAorCUVwcm9tRGF0YSA9IDB4MjEsCS8qIDB4MjEgbG93LCAweDIyIGhpZ2ggYnl0ZSAqLworCUVwcm9tQ3RybCA9IDB4MjMsCisJUGh5QWRkciA9IDB4MjUsCisJUGh5RGF0YSA9IDB4MjYsIAkvKiAweDI2IGxvdywgMHgyNyBoaWdoIGJ5dGUgKi8KKwlQaHlDdHJsID0gMHgyOCwKKwlVc2JTdHN0ID0gMHgyYSwKKwlFdGhUeFN0YXQwID0gMHgyYiwKKwlFdGhUeFN0YXQxID0gMHgyYywKKwlFdGhSeFN0YXQgPSAweDJkLAorCVdha2V1cENvbnRyb2wgPSAweDc4LAorCVJlZzdiID0gMHg3YiwKKwlHcGlvMCA9IDB4N2UsCisJR3BpbzEgPSAweDdmLAorCVJlZzgxID0gMHg4MSwKK307CisKKwordHlwZWRlZiBzdHJ1Y3QgcGVnYXN1cyB7CisJc3RydWN0IHVzYl9kZXZpY2UJKnVzYjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZjsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0OworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCXN0YXRzOworCXN0cnVjdCBtaWlfaWZfaW5mbwltaWk7CisJdW5zaWduZWQJCWZsYWdzOworCXVuc2lnbmVkCQlmZWF0dXJlczsKKwl1MzIJCQltc2dfZW5hYmxlOworCXUzMgkJCXdvbG9wdHM7CisJaW50CQkJZGV2X2luZGV4OworCWludAkJCWludHJfaW50ZXJ2YWw7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0CXJ4X3RsOworCXN0cnVjdCB3b3JrX3N0cnVjdAljYXJyaWVyX2NoZWNrOworCXN0cnVjdCB1cmIJCSpjdHJsX3VyYiwgKnJ4X3VyYiwgKnR4X3VyYiwgKmludHJfdXJiOworCXN0cnVjdCBza19idWZmCQkqcnhfcG9vbFtSWF9TS0JTXTsKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnJ4X3NrYjsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0CWRyOworCXdhaXRfcXVldWVfaGVhZF90CWN0cmxfd2FpdDsKKwlzcGlubG9ja190CQlyeF9wb29sX2xvY2s7CisJaW50CQkJY2hpcDsKKwl1bnNpZ25lZCBjaGFyCQlpbnRyX2J1ZmZbOF07CisJX191OAkJCXR4X2J1ZmZbUEVHQVNVU19NVFVdOworCV9fdTgJCQlldGhfcmVnc1s0XTsKKwlfX3U4CQkJcGh5OworCV9fdTgJCQlncGlvX3JlczsKK30gcGVnYXN1c190OworCisKK3N0cnVjdCB1c2JfZXRoX2RldiB7CisJY2hhcgkqbmFtZTsKKwlfX3UxNgl2ZW5kb3I7CisJX191MTYJZGV2aWNlOworCV9fdTMyCXByaXZhdGU7IC8qIExTQiBpcyBncGlvIHJlc2V0IHZhbHVlICovCit9OworCisjZGVmaW5lCVZFTkRPUl8zQ09NCQkweDA1MDYKKyNkZWZpbmUJVkVORE9SX0FCT0NPTQkJMHgwN2I4CisjZGVmaW5lCVZFTkRPUl9BQ0NUT04JCTB4MDgzYQorI2RlZmluZQlWRU5ET1JfQURNVEVLCQkweDA3YTYKKyNkZWZpbmUJVkVORE9SX0FFSUxBQgkJMHgzMzM0CisjZGVmaW5lCVZFTkRPUl9BTExJRURURUwJMHgwN2M5CisjZGVmaW5lCVZFTkRPUl9BVEVOCQkweDA1NTcKKyNkZWZpbmUJVkVORE9SX0JFTEtJTgkJMHgwNTBkCisjZGVmaW5lCVZFTkRPUl9CSUxMSU9OVE9OCTB4MDhkZAorI2RlZmluZQlWRU5ET1JfQ09NUEFRCQkweDA0OWYKKyNkZWZpbmUJVkVORE9SX0NPUkVHQQkJMHgwN2FhCisjZGVmaW5lCVZFTkRPUl9ETElOSwkJMHgyMDAxCisjZGVmaW5lCVZFTkRPUl9FTENPTgkJMHgwZGI3CisjZGVmaW5lCVZFTkRPUl9FTFNBCQkweDA1Y2MKKyNkZWZpbmUJVkVORE9SX0dJR0FCWVRFCQkweDEwNDQKKyNkZWZpbmUJVkVORE9SX0hBV0tJTkcJCTB4MGU2NgorI2RlZmluZQlWRU5ET1JfSFAJCTB4MDNmMAorI2RlZmluZQlWRU5ET1JfSU9EQVRBCQkweDA0YmIKKyNkZWZpbmUJVkVORE9SX0tJTkdTVE9OCQkweDA5NTEKKyNkZWZpbmUJVkVORE9SX0xBTkVFRAkJMHgwNTZlCisjZGVmaW5lCVZFTkRPUl9MSU5LU1lTCQkweDA2NmIKKyNkZWZpbmUJVkVORE9SX01FTENPCQkweDA0MTEKKyNkZWZpbmUJVkVORE9SX01JQ1JPU09GVAkweDA0NWUKKyNkZWZpbmUJVkVORE9SX01PQklMSVRZCQkweDEzNDIKKyNkZWZpbmUJVkVORE9SX05FVEdFQVIJCTB4MDg0NgorI2RlZmluZQlWRU5ET1JfT0NUCQkweDBiMzkKKyNkZWZpbmUJVkVORE9SX1NNQVJUQlJJREdFUwkweDA4ZDEKKyNkZWZpbmUJVkVORE9SX1NNQwkJMHgwNzA3CisjZGVmaW5lCVZFTkRPUl9TT0hPV0FSRQkJMHgxNWU4CisjZGVmaW5lCVZFTkRPUl9TSUVNRU5TCQkweDA2N2MKKworCisjZWxzZQkvKiBQRUdBU1VTX0RFViAqLworCitQRUdBU1VTX0RFViggIjNDb20gVVNCIEV0aGVybmV0IDNDNDYwQiIsIFZFTkRPUl8zQ09NLCAweDQ2MDEsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJBVEVOIFVTQiBFdGhlcm5ldCBVQy0xMTBUIiwgVkVORE9SX0FURU4sIDB4MjAwNywKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIlVTQiBIUE5BL0V0aGVybmV0IiwgVkVORE9SX0FCT0NPTSwgMHgxMTBjLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJIHwgSEFTX0hPTUVfUE5BICkKK1BFR0FTVVNfREVWKCAiVVNCIEhQTkEvRXRoZXJuZXQiLCBWRU5ET1JfQUJPQ09NLCAweDQxMDQsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IEhBU19IT01FX1BOQSApCitQRUdBU1VTX0RFViggIlVTQiBIUE5BL0V0aGVybmV0IiwgVkVORE9SX0FCT0NPTSwgMHg0MDA0LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBIQVNfSE9NRV9QTkEgKQorUEVHQVNVU19ERVYoICJVU0IgSFBOQS9FdGhlcm5ldCIsIFZFTkRPUl9BQk9DT00sIDB4NDAwNywKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgSEFTX0hPTUVfUE5BICkKK1BFR0FTVVNfREVWKCAiVVNCIDEwLzEwMCBGYXN0IEV0aGVybmV0IiwgVkVORE9SX0FCT0NPTSwgMHg0MTAyLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiVVNCIDEwLzEwMCBGYXN0IEV0aGVybmV0IiwgVkVORE9SX0FCT0NPTSwgMHg0MDAyLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgKQorUEVHQVNVU19ERVYoICJVU0IgMTAvMTAwIEZhc3QgRXRoZXJuZXQiLCBWRU5ET1JfQUJPQ09NLCAweDQwMGIsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJVU0IgMTAvMTAwIEZhc3QgRXRoZXJuZXQiLCBWRU5ET1JfQUJPQ09NLCAweDQwMGMsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJVU0IgMTAvMTAwIEZhc3QgRXRoZXJuZXQiLCBWRU5ET1JfQUJPQ09NLCAweGFiYzEsCisJCURFRkFVTFRfR1BJT19SRVNFVCApCitQRUdBU1VTX0RFViggIlVTQiAxMC8xMDAgRmFzdCBFdGhlcm5ldCIsIFZFTkRPUl9BQk9DT00sIDB4MjAwYywKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApIAkKK1BFR0FTVVNfREVWKCAiQWNjdG9uIFVTQiAxMC8xMDAgRXRoZXJuZXQgQWRhcHRlciIsIFZFTkRPUl9BQ0NUT04sIDB4MTA0NiwKKwkJREVGQVVMVF9HUElPX1JFU0VUICkKK1BFR0FTVVNfREVWKCAiU3BlZWRTdHJlYW0gVVNCIDEwLzEwMCBFdGhlcm5ldCIsIFZFTkRPUl9BQ0NUT04sIDB4NTA0NiwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIkFETXRlayBBRE04NTExIFwiUGVnYXN1cyBJSVwiIFVTQiBFdGhlcm5ldCIsCisJCVZFTkRPUl9BRE1URUssIDB4ODUxMSwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSB8IEhBU19IT01FX1BOQSApCitQRUdBU1VTX0RFViggIkFETXRlayBBRE04NTEzIFwiUGVnYXN1cyBJSVwiIFVTQiBFdGhlcm5ldCIsCisJCVZFTkRPUl9BRE1URUssIDB4ODUxMywKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIkFETXRlayBBRE04NTE1IFwiUGVnYXN1cyBJSVwiIFVTQi0yLjAgRXRoZXJuZXQiLAorCQlWRU5ET1JfQURNVEVLLCAweDg1MTUsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJBRE10ZWsgQU45ODYgXCJQZWdhc3VzXCIgVVNCIEV0aGVybmV0IChldmFsdWF0aW9uIGJvYXJkKSIsCisJCVZFTkRPUl9BRE1URUssIDB4MDk4NiwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgSEFTX0hPTUVfUE5BICkKK1BFR0FTVVNfREVWKCAiQU45ODZBIFVTQiBNQUMiLCBWRU5ET1JfQURNVEVLLCAxOTg2LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiQUVJIFVTQiBGYXN0IEV0aGVybmV0IEFkYXB0ZXIiLCBWRU5ET1JfQUVJTEFCLCAweDE3MDEsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJBbGxpZWQgVGVsZXN5biBJbnQuIEFULVVTQjEwMCIsIFZFTkRPUl9BTExJRURURUwsIDB4YjEwMCwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIkJlbGtpbiBGNUQ1MDUwIFVTQiBFdGhlcm5ldCIsIFZFTkRPUl9CRUxLSU4sIDB4MDEyMSwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIkJpbGxpb250b24gVVNCLTEwMCIsIFZFTkRPUl9CSUxMSU9OVE9OLCAweDA5ODYsCisJCURFRkFVTFRfR1BJT19SRVNFVCApCitQRUdBU1VTX0RFViggIkJpbGxpb250b24gVVNCTFAtMTAwIiwgVkVORE9SX0JJTExJT05UT04sIDB4MDk4NywKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgSEFTX0hPTUVfUE5BICkKK1BFR0FTVVNfREVWKCAiaVBBUSBOZXR3b3JraW5nIDEwLzEwMCBVU0IiLCBWRU5ET1JfQ09NUEFRLCAweDg1MTEsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJCaWxsaW9udG9uIFVTQkVMLTEwMCIsIFZFTkRPUl9CSUxMSU9OVE9OLCAweDA5ODgsCisJCURFRkFVTFRfR1BJT19SRVNFVCApCitQRUdBU1VTX0RFViggIkJpbGxpb250b24gVVNCRS0xMDAiLCBWRU5ET1JfQklMTElPTlRPTiwgMHg4NTExLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiQ29yZWdhIEZFdGVyIFVTQi1UWCIsIFZFTkRPUl9DT1JFR0EsIDB4MDAwNCwKKwkJREVGQVVMVF9HUElPX1JFU0VUICkKK1BFR0FTVVNfREVWKCAiQ29yZWdhIEZFdGVyIFVTQi1UWFMiLCBWRU5ET1JfQ09SRUdBLCAweDAwMGQsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJELUxpbmsgRFNCLTY1MFRYIiwgVkVORE9SX0RMSU5LLCAweDQwMDEsCisJCUxJTktTWVNfR1BJT19SRVNFVCApCitQRUdBU1VTX0RFViggIkQtTGluayBEU0ItNjUwVFgiLCBWRU5ET1JfRExJTkssIDB4NDAwMiwKKwkJTElOS1NZU19HUElPX1JFU0VUICkKK1BFR0FTVVNfREVWKCAiRC1MaW5rIERTQi02NTBUWCIsIFZFTkRPUl9ETElOSywgMHg0MTAyLAorCQlMSU5LU1lTX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiRC1MaW5rIERTQi02NTBUWCIsIFZFTkRPUl9ETElOSywgMHg0MDBiLAorCQlMSU5LU1lTX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiRC1MaW5rIERTQi02NTBUWCIsIFZFTkRPUl9ETElOSywgMHgyMDBjLAorCQlMSU5LU1lTX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiRC1MaW5rIERTQi02NTBUWChQTkEpIiwgVkVORE9SX0RMSU5LLCAweDQwMDMsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IEhBU19IT01FX1BOQSApCitQRUdBU1VTX0RFViggIkQtTGluayBEU0ItNjUwIiwgVkVORE9SX0RMSU5LLCAweGFiYzEsCisJCURFRkFVTFRfR1BJT19SRVNFVCApCitQRUdBU1VTX0RFViggIkdPTERQRkVJTCBVU0IgQWRhcHRlciIsIFZFTkRPUl9FTENPTiwgMHgwMDAyLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJIHwgSEFTX0hPTUVfUE5BICkKK1BFR0FTVVNfREVWKCAiRWFzaURvY2sgRXRoZXJuZXQiLCBWRU5ET1JfTU9CSUxJVFksIDB4MDMwNCwKKwkJREVGQVVMVF9HUElPX1JFU0VUICkKK1BFR0FTVVNfREVWKCAiRWxzYSBNaWNvbGluayBVU0IyRXRoZXJuZXQiLCBWRU5ET1JfRUxTQSwgMHgzMDAwLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgKQorUEVHQVNVU19ERVYoICJHSUdBQllURSBHTi1CUjQwMlcgV2lyZWxlc3MgUm91dGVyIiwgVkVORE9SX0dJR0FCWVRFLCAweDgwMDIsCisJCURFRkFVTFRfR1BJT19SRVNFVCApCitQRUdBU1VTX0RFViggIkhhd2tpbmcgVUYxMDAgMTAvMTAwIEV0aGVybmV0IiwgVkVORE9SX0hBV0tJTkcsIDB4NDAwYywKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIkhQIGhuMjEwYyBFdGhlcm5ldCBVU0IiLCBWRU5ET1JfSFAsIDB4ODExYywKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCQorUEVHQVNVU19ERVYoICJJTyBEQVRBIFVTQiBFVC9UWCIsIFZFTkRPUl9JT0RBVEEsIDB4MDkwNCwKKwkJREVGQVVMVF9HUElPX1JFU0VUICkKK1BFR0FTVVNfREVWKCAiSU8gREFUQSBVU0IgRVQvVFgtUyIsIFZFTkRPUl9JT0RBVEEsIDB4MDkxMywKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIktpbmdzdG9uIEtOVTEwMVRYIEV0aGVybmV0IiwgVkVORE9SX0tJTkdTVE9OLCAweDAwMGEsCisJCURFRkFVTFRfR1BJT19SRVNFVCkKK1BFR0FTVVNfREVWKCAiTEFORUVEIFVTQiBFdGhlcm5ldCBMRC1VU0IvVFgiLCBWRU5ET1JfTEFORUVELCAweDQwMDIsCisJCURFRkFVTFRfR1BJT19SRVNFVCApCitQRUdBU1VTX0RFViggIkxBTkVFRCBVU0IgRXRoZXJuZXQgTEQtVVNCL1RYIiwgVkVORE9SX0xBTkVFRCwgMHg0MDBiLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiTEFORUVEIFVTQiBFdGhlcm5ldCBMRC1VU0IvVCIsIFZFTkRPUl9MQU5FRUQsIDB4YWJjMSwKKwkJREVGQVVMVF9HUElPX1JFU0VUICkKK1BFR0FTVVNfREVWKCAiTEFORUVEIFVTQiBFdGhlcm5ldCBMRC1VU0IvVFgiLCBWRU5ET1JfTEFORUVELCAweDIwMGMsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJMaW5rc3lzIFVTQjEwVFgiLCBWRU5ET1JfTElOS1NZUywgMHgyMjAyLAorCQlMSU5LU1lTX0dQSU9fUkVTRVQgKQorUEVHQVNVU19ERVYoICJMaW5rc3lzIFVTQjEwMFRYIiwgVkVORE9SX0xJTktTWVMsIDB4MjIwMywKKwkJTElOS1NZU19HUElPX1JFU0VUICkKK1BFR0FTVVNfREVWKCAiTGlua3N5cyBVU0IxMDBUWCIsIFZFTkRPUl9MSU5LU1lTLCAweDIyMDQsCisJCUxJTktTWVNfR1BJT19SRVNFVCB8IEhBU19IT01FX1BOQSApCitQRUdBU1VTX0RFViggIkxpbmtzeXMgVVNCMTBUIEV0aGVybmV0IEFkYXB0ZXIiLCBWRU5ET1JfTElOS1NZUywgMHgyMjA2LAorCQlMSU5LU1lTX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJKQorUEVHQVNVU19ERVYoICJMaW5rc3lzIFVTQiBVU0IxMDBUWCIsIFZFTkRPUl9MSU5LU1lTLCAweDQwMGIsCisJCUxJTktTWVNfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJMaW5rc3lzIFVTQjEwVFgiLCBWRU5ET1JfTElOS1NZUywgMHgyMDBjLAorCQlMSU5LU1lTX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkJCitQRUdBU1VTX0RFViggIk1FTENPL0JVRkZBTE8gTFVBLVRYIiwgVkVORE9SX01FTENPLCAweDAwMDEsCisJCURFRkFVTFRfR1BJT19SRVNFVCApCitQRUdBU1VTX0RFViggIk1FTENPL0JVRkZBTE8gTFVBLVRYIiwgVkVORE9SX01FTENPLCAweDAwMDUsCisJCURFRkFVTFRfR1BJT19SRVNFVCApCitQRUdBU1VTX0RFViggIk1FTENPL0JVRkZBTE8gTFVBMi1UWCIsIFZFTkRPUl9NRUxDTywgMHgwMDA5LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiTWljcm9zb2Z0IE1OLTExMCIsIFZFTkRPUl9NSUNST1NPRlQsIDB4MDA3YSwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIk5FVEdFQVIgRkExMDEiLCBWRU5ET1JfTkVUR0VBUiwgMHgxMDIwLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiT0NUIEluYy4iLCBWRU5ET1JfT0NULCAweDAxMDksCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJPQ1QgVVNCIFRPIEV0aGVybmV0IiwgVkVORE9SX09DVCwgMHgwOTAxLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAic21hcnROSUMgMiBQblAgQWRhcHRlciIsIFZFTkRPUl9TTUFSVEJSSURHRVMsIDB4MDAwMywKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIlNNQyAyMDIgVVNCIEV0aGVybmV0IiwgVkVORE9SX1NNQywgMHgwMjAwLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgKQorUEVHQVNVU19ERVYoICJTTUMgMjIwNiBVU0IgRXRoZXJuZXQiLCBWRU5ET1JfU01DLCAweDAyMDEsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkpCitQRUdBU1VTX0RFViggIlNPSE93YXJlIE5VQjEwMCBFdGhlcm5ldCIsIFZFTkRPUl9TT0hPV0FSRSwgMHg5MTAwLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgKQorUEVHQVNVU19ERVYoICJTT0hPd2FyZSBOVUIxMTAgRXRoZXJuZXQiLCBWRU5ET1JfU09IT1dBUkUsIDB4OTExMCwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIlNwZWVkU3RyZWFtIFVTQiAxMC8xMDAgRXRoZXJuZXQiLCBWRU5ET1JfU0lFTUVOUywgMHgxMDAxLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKKworCisjZW5kaWYJLyogUEVHQVNVU19ERVYgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9ydGw4MTUwLmMgYi9kcml2ZXJzL3VzYi9uZXQvcnRsODE1MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYjIyMzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9uZXQvcnRsODE1MC5jCkBAIC0wLDAgKzEsOTQyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAwMiBQZXRrbyBNYW5vbG92IChwZXRrYW5AdXNlcnMuc291cmNlZm9yZ2UubmV0KQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisvKiBWZXJzaW9uIEluZm9ybWF0aW9uICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC42LjIgKDIwMDQvMDgvMjcpIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJQZXRrbyBNYW5vbG92IDxwZXRrYW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgInJ0bDgxNTAgYmFzZWQgdXNiLWV0aGVybmV0IGRyaXZlciIKKworI2RlZmluZQlJRFIJCQkweDAxMjAKKyNkZWZpbmUJTUFSCQkJMHgwMTI2CisjZGVmaW5lCUNSCQkJMHgwMTJlCisjZGVmaW5lCVRDUgkJCTB4MDEyZgorI2RlZmluZQlSQ1IJCQkweDAxMzAKKyNkZWZpbmUJVFNSCQkJMHgwMTMyCisjZGVmaW5lCVJTUgkJCTB4MDEzMworI2RlZmluZQlDT04wCQkJMHgwMTM1CisjZGVmaW5lCUNPTjEJCQkweDAxMzYKKyNkZWZpbmUJTVNSCQkJMHgwMTM3CisjZGVmaW5lCVBIWUFERAkJCTB4MDEzOAorI2RlZmluZQlQSFlEQVQJCQkweDAxMzkKKyNkZWZpbmUJUEhZQ05UCQkJMHgwMTNiCisjZGVmaW5lCUdQUEMJCQkweDAxM2QKKyNkZWZpbmUJQk1DUgkJCTB4MDE0MAorI2RlZmluZQlCTVNSCQkJMHgwMTQyCisjZGVmaW5lCUFOQVIJCQkweDAxNDQKKyNkZWZpbmUJQU5MUAkJCTB4MDE0NgorI2RlZmluZQlBRVIJCQkweDAxNDgKKyNkZWZpbmUgQ1NDUgkJCTB4MDE0QyAgLyogVGhpcyBvbmUgaGFzIHRoZSBsaW5rIHN0YXR1cyAqLworI2RlZmluZSBDU0NSX0xJTktfU1RBVFVTCSgxIDw8IDMpCisKKyNkZWZpbmUJSURSX0VFUFJPTQkJMHgxMjAyCisKKyNkZWZpbmUJUEhZX1JFQUQJCTAKKyNkZWZpbmUJUEhZX1dSSVRFCQkweDIwCisjZGVmaW5lCVBIWV9HTwkJCTB4NDAKKworI2RlZmluZQlNSUlfVElNRU9VVAkJMTAKKyNkZWZpbmUJSU5UQlVGU0laRQkJOAorCisjZGVmaW5lCVJUTDgxNTBfUkVRVF9SRUFECTB4YzAKKyNkZWZpbmUJUlRMODE1MF9SRVFUX1dSSVRFCTB4NDAKKyNkZWZpbmUJUlRMODE1MF9SRVFfR0VUX1JFR1MJMHgwNQorI2RlZmluZQlSVEw4MTUwX1JFUV9TRVRfUkVHUwkweDA1CisKKworLyogVHJhbnNtaXQgc3RhdHVzIHJlZ2lzdGVyIGVycm9ycyAqLworI2RlZmluZSBUU1JfRUNPTAkJKDE8PDUpCisjZGVmaW5lIFRTUl9MQ09MCQkoMTw8NCkKKyNkZWZpbmUgVFNSX0xPU1NfQ1JTCQkoMTw8MykKKyNkZWZpbmUgVFNSX0pCUgkJCSgxPDwyKQorI2RlZmluZSBUU1JfRVJST1JTCQkoVFNSX0VDT0wgfCBUU1JfTENPTCB8IFRTUl9MT1NTX0NSUyB8IFRTUl9KQlIpCisvKiBSZWNlaXZlIHN0YXR1cyByZWdpc3RlciBlcnJvcnMgKi8KKyNkZWZpbmUgUlNSX0NSQwkJCSgxPDwyKQorI2RlZmluZSBSU1JfRkFFCQkJKDE8PDEpCisjZGVmaW5lIFJTUl9FUlJPUlMJCShSU1JfQ1JDIHwgUlNSX0ZBRSkKKworLyogTWVkaWEgc3RhdHVzIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIE1TUl9EVVBMRVgJCSgxPDw0KQorI2RlZmluZSBNU1JfU1BFRUQJCSgxPDwzKQorI2RlZmluZSBNU1JfTElOSwkJKDE8PDIpCisKKy8qIEludGVycnVwdCBwaXBlIGRhdGEgKi8KKyNkZWZpbmUgSU5UX1RTUgkJCTB4MDAKKyNkZWZpbmUgSU5UX1JTUgkJCTB4MDEKKyNkZWZpbmUgSU5UX01TUgkJCTB4MDIKKyNkZWZpbmUgSU5UX1dBS1NSCQkweDAzCisjZGVmaW5lIElOVF9UWE9LX0NOVAkJMHgwNAorI2RlZmluZSBJTlRfUlhMT1NUX0NOVAkJMHgwNQorI2RlZmluZSBJTlRfQ1JFUlJfQ05UCQkweDA2CisjZGVmaW5lIElOVF9DT0xfQ05UCQkweDA3CisKKy8qIFRyYW5zbWl0IHN0YXR1cyByZWdpc3RlciBlcnJvcnMgKi8KKyNkZWZpbmUgVFNSX0VDT0wJCSgxPDw1KQorI2RlZmluZSBUU1JfTENPTAkJKDE8PDQpCisjZGVmaW5lIFRTUl9MT1NTX0NSUwkJKDE8PDMpCisjZGVmaW5lIFRTUl9KQlIJCQkoMTw8MikKKyNkZWZpbmUgVFNSX0VSUk9SUwkJKFRTUl9FQ09MIHwgVFNSX0xDT0wgfCBUU1JfTE9TU19DUlMgfCBUU1JfSkJSKQorLyogUmVjZWl2ZSBzdGF0dXMgcmVnaXN0ZXIgZXJyb3JzICovCisjZGVmaW5lIFJTUl9DUkMJCQkoMTw8MikKKyNkZWZpbmUgUlNSX0ZBRQkJCSgxPDwxKQorI2RlZmluZSBSU1JfRVJST1JTCQkoUlNSX0NSQyB8IFJTUl9GQUUpCisKKy8qIE1lZGlhIHN0YXR1cyByZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBNU1JfRFVQTEVYCQkoMTw8NCkKKyNkZWZpbmUgTVNSX1NQRUVECQkoMTw8MykKKyNkZWZpbmUgTVNSX0xJTksJCSgxPDwyKQorCisvKiBJbnRlcnJ1cHQgcGlwZSBkYXRhICovCisjZGVmaW5lIElOVF9UU1IJCQkweDAwCisjZGVmaW5lIElOVF9SU1IJCQkweDAxCisjZGVmaW5lIElOVF9NU1IJCQkweDAyCisjZGVmaW5lIElOVF9XQUtTUgkJMHgwMworI2RlZmluZSBJTlRfVFhPS19DTlQJCTB4MDQKKyNkZWZpbmUgSU5UX1JYTE9TVF9DTlQJCTB4MDUKKyNkZWZpbmUgSU5UX0NSRVJSX0NOVAkJMHgwNgorI2RlZmluZSBJTlRfQ09MX0NOVAkJMHgwNworCisKKyNkZWZpbmUJUlRMODE1MF9NVFUJCTE1NDAKKyNkZWZpbmUJUlRMODE1MF9UWF9USU1FT1VUCShIWikKKyNkZWZpbmUJUlhfU0tCX1BPT0xfU0laRQk0CisKKy8qIHJ0bDgxNTAgZmxhZ3MgKi8KKyNkZWZpbmUJUlRMODE1MF9IV19DUkMJCTAKKyNkZWZpbmUJUlhfUkVHX1NFVAkJMQorI2RlZmluZQlSVEw4MTUwX1VOUExVRwkJMgorI2RlZmluZQlSWF9VUkJfRkFJTAkJMworCisvKiBEZWZpbmUgdGhlc2UgdmFsdWVzIHRvIG1hdGNoIHlvdXIgZGV2aWNlICovCisjZGVmaW5lIFZFTkRPUl9JRF9SRUFMVEVLCQkweDBiZGEKKyNkZWZpbmUJVkVORE9SX0lEX01FTENPCQkJMHgwNDExCisjZGVmaW5lIFZFTkRPUl9JRF9NSUNST05FVAkJMHgzOTgwCisjZGVmaW5lCVZFTkRPUl9JRF9MT05HU0hJTkUJCTB4MDdiOAorCisjZGVmaW5lIFBST0RVQ1RfSURfUlRMODE1MAkJMHg4MTUwCisjZGVmaW5lCVBST0RVQ1RfSURfTFVBS1RYCQkweDAwMTIKKyNkZWZpbmUJUFJPRFVDVF9JRF9MQ1M4MTM4VFgJCTB4NDAxYQorI2RlZmluZSBQUk9EVUNUX0lEX1NQMTI4QVIJCTB4MDAwMworCisjdW5kZWYJRUVQUk9NX1dSSVRFCisKKy8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBydGw4MTUwX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoVkVORE9SX0lEX1JFQUxURUssIFBST0RVQ1RfSURfUlRMODE1MCl9LAorCXtVU0JfREVWSUNFKFZFTkRPUl9JRF9NRUxDTywgUFJPRFVDVF9JRF9MVUFLVFgpfSwKKwl7VVNCX0RFVklDRShWRU5ET1JfSURfTUlDUk9ORVQsIFBST0RVQ1RfSURfU1AxMjhBUil9LAorCXtVU0JfREVWSUNFKFZFTkRPUl9JRF9MT05HU0hJTkUsIFBST0RVQ1RfSURfTENTODEzOFRYKX0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBydGw4MTUwX3RhYmxlKTsKKworc3RydWN0IHJ0bDgxNTAgeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHRsOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IHVyYiAqcnhfdXJiLCAqdHhfdXJiLCAqaW50cl91cmIsICpjdHJsX3VyYjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqdHhfc2tiLCAqcnhfc2tiOworCXN0cnVjdCBza19idWZmICpyeF9za2JfcG9vbFtSWF9TS0JfUE9PTF9TSVpFXTsKKwlzcGlubG9ja190IHJ4X3Bvb2xfbG9jazsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IGRyOworCWludCBpbnRyX2ludGVydmFsOworCV9fbGUxNiByeF9jcmVnOworCXU4ICppbnRyX2J1ZmY7CisJdTggcGh5OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgcnRsODE1MCBydGw4MTUwX3Q7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG11bHRpY2FzdF9maWx0ZXJfbGltaXQgPSAzMjsKKworc3RhdGljIHZvaWQgZmlsbF9za2JfcG9vbChydGw4MTUwX3QgKik7CitzdGF0aWMgdm9pZCBmcmVlX3NrYl9wb29sKHJ0bDgxNTBfdCAqKTsKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnB1bGxfc2tiKHJ0bDgxNTBfdCAqKTsKK3N0YXRpYyB2b2lkIHJ0bDgxNTBfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CitzdGF0aWMgaW50IHJ0bDgxNTBfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworCitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfbmFtZSBbXSA9ICJydGw4MTUwIjsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHJ0bDgxNTBfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCWRyaXZlcl9uYW1lLAorCS5wcm9iZSA9CXJ0bDgxNTBfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQlydGw4MTUwX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JcnRsODE1MF90YWJsZSwKK307CisKKy8qCisqKgorKioJZGV2aWNlIHJlbGF0ZWQgcGFydCBvZiB0aGUgY29kZQorKioKKyovCitzdGF0aWMgaW50IGdldF9yZWdpc3RlcnMocnRsODE1MF90ICogZGV2LCB1MTYgaW5keCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJICAgICAgIFJUTDgxNTBfUkVRX0dFVF9SRUdTLCBSVEw4MTUwX1JFUVRfUkVBRCwKKwkJCSAgICAgICBpbmR4LCAwLCBkYXRhLCBzaXplLCA1MDApOworfQorCitzdGF0aWMgaW50IHNldF9yZWdpc3RlcnMocnRsODE1MF90ICogZGV2LCB1MTYgaW5keCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJICAgICAgIFJUTDgxNTBfUkVRX1NFVF9SRUdTLCBSVEw4MTUwX1JFUVRfV1JJVEUsCisJCQkgICAgICAgaW5keCwgMCwgZGF0YSwgc2l6ZSwgNTAwKTsKK30KKworc3RhdGljIHZvaWQgY3RybF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJ0bDgxNTBfdCAqZGV2OworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAtRUlOUFJPR1JFU1M6CisJCWJyZWFrOworCWNhc2UgLUVOT0VOVDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJd2FybigiY3RybCB1cmIgc3RhdHVzICVkIiwgdXJiLT5zdGF0dXMpOworCX0KKwlkZXYgPSB1cmItPmNvbnRleHQ7CisJY2xlYXJfYml0KFJYX1JFR19TRVQsICZkZXYtPmZsYWdzKTsKK30KKworc3RhdGljIGludCBhc3luY19zZXRfcmVnaXN0ZXJzKHJ0bDgxNTBfdCAqIGRldiwgdTE2IGluZHgsIHUxNiBzaXplKQoreworCWludCByZXQ7CisKKwlpZiAodGVzdF9iaXQoUlhfUkVHX1NFVCwgJmRldi0+ZmxhZ3MpKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCWRldi0+ZHIuYlJlcXVlc3RUeXBlID0gUlRMODE1MF9SRVFUX1dSSVRFOworCWRldi0+ZHIuYlJlcXVlc3QgPSBSVEw4MTUwX1JFUV9TRVRfUkVHUzsKKwlkZXYtPmRyLndWYWx1ZSA9IGNwdV90b19sZTE2KGluZHgpOworCWRldi0+ZHIud0luZGV4ID0gMDsKKwlkZXYtPmRyLndMZW5ndGggPSBjcHVfdG9fbGUxNihzaXplKTsKKwlkZXYtPmN0cmxfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gc2l6ZTsKKwl1c2JfZmlsbF9jb250cm9sX3VyYihkZXYtPmN0cmxfdXJiLCBkZXYtPnVkZXYsCisJCQkgdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksIChjaGFyICopICZkZXYtPmRyLAorCQkJICZkZXYtPnJ4X2NyZWcsIHNpemUsIGN0cmxfY2FsbGJhY2ssIGRldik7CisJaWYgKChyZXQgPSB1c2Jfc3VibWl0X3VyYihkZXYtPmN0cmxfdXJiLCBHRlBfQVRPTUlDKSkpCisJCWVycigiY29udHJvbCByZXF1ZXN0IHN1Ym1pc3Npb24gZmFpbGVkOiAlZCIsIHJldCk7CisJZWxzZQorCQlzZXRfYml0KFJYX1JFR19TRVQsICZkZXYtPmZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9taWlfd29yZChydGw4MTUwX3QgKiBkZXYsIHU4IHBoeSwgX191OCBpbmR4LCB1MTYgKiByZWcpCit7CisJaW50IGk7CisJdTggZGF0YVszXSwgdG1wOworCisJZGF0YVswXSA9IHBoeTsKKwlkYXRhWzFdID0gZGF0YVsyXSA9IDA7CisJdG1wID0gaW5keCB8IFBIWV9SRUFEIHwgUEhZX0dPOworCWkgPSAwOworCisJc2V0X3JlZ2lzdGVycyhkZXYsIFBIWUFERCwgc2l6ZW9mKGRhdGEpLCBkYXRhKTsKKwlzZXRfcmVnaXN0ZXJzKGRldiwgUEhZQ05ULCAxLCAmdG1wKTsKKwlkbyB7CisJCWdldF9yZWdpc3RlcnMoZGV2LCBQSFlDTlQsIDEsIGRhdGEpOworCX0gd2hpbGUgKChkYXRhWzBdICYgUEhZX0dPKSAmJiAoaSsrIDwgTUlJX1RJTUVPVVQpKTsKKworCWlmIChpIDwgTUlJX1RJTUVPVVQpIHsKKwkJZ2V0X3JlZ2lzdGVycyhkZXYsIFBIWURBVCwgMiwgZGF0YSk7CisJCSpyZWcgPSBkYXRhWzBdIHwgKGRhdGFbMV0gPDwgOCk7CisJCXJldHVybiAwOworCX0gZWxzZQorCQlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB3cml0ZV9taWlfd29yZChydGw4MTUwX3QgKiBkZXYsIHU4IHBoeSwgX191OCBpbmR4LCB1MTYgcmVnKQoreworCWludCBpOworCXU4IGRhdGFbM10sIHRtcDsKKworCWRhdGFbMF0gPSBwaHk7CisJKihkYXRhICsgMSkgPSBjcHVfdG9fbGUxNnAoJnJlZyk7CisJdG1wID0gaW5keCB8IFBIWV9XUklURSB8IFBIWV9HTzsKKwlpID0gMDsKKworCXNldF9yZWdpc3RlcnMoZGV2LCBQSFlBREQsIHNpemVvZihkYXRhKSwgZGF0YSk7CisJc2V0X3JlZ2lzdGVycyhkZXYsIFBIWUNOVCwgMSwgJnRtcCk7CisJZG8geworCQlnZXRfcmVnaXN0ZXJzKGRldiwgUEhZQ05ULCAxLCBkYXRhKTsKKwl9IHdoaWxlICgoZGF0YVswXSAmIFBIWV9HTykgJiYgKGkrKyA8IE1JSV9USU1FT1VUKSk7CisKKwlpZiAoaSA8IE1JSV9USU1FT1VUKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2V0aGVybmV0X2FkZHIocnRsODE1MF90ICogZGV2KQoreworCXU4IG5vZGVfaWRbNl07CisKKwlnZXRfcmVnaXN0ZXJzKGRldiwgSURSLCBzaXplb2Yobm9kZV9pZCksIG5vZGVfaWQpOworCW1lbWNweShkZXYtPm5ldGRldi0+ZGV2X2FkZHIsIG5vZGVfaWQsIHNpemVvZihub2RlX2lkKSk7Cit9CisKK3N0YXRpYyBpbnQgcnRsODE1MF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOworCXJ0bDgxNTBfdCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgaTsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCXJldHVybiAtRUJVU1k7CisKKwltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CisJZGJnKCIlczogU2V0dGluZyBNQUMgYWRkcmVzcyB0byAiLCBuZXRkZXYtPm5hbWUpOworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCWRiZygiJTAyWDoiLCBuZXRkZXYtPmRldl9hZGRyW2ldKTsKKwlkYmcoIiUwMlhcbiIsIG5ldGRldi0+ZGV2X2FkZHJbaV0pOworCS8qIFNldCB0aGUgSURSIHJlZ2lzdGVycy4gKi8KKwlzZXRfcmVnaXN0ZXJzKGRldiwgSURSLCBzaXplb2YobmV0ZGV2LT5kZXZfYWRkciksIG5ldGRldi0+ZGV2X2FkZHIpOworI2lmZGVmIEVFUFJPTV9XUklURQorCXsKKwl1OCBjcjsKKwkvKiBHZXQgdGhlIENSIGNvbnRlbnRzLiAqLworCWdldF9yZWdpc3RlcnMoZGV2LCBDUiwgMSwgJmNyKTsKKwkvKiBTZXQgdGhlIFdFUFJPTSBiaXQgKGVlcHJvbSB3cml0ZSBlbmFibGUpLiAqLworCWNyIHw9IDB4MjA7CisJc2V0X3JlZ2lzdGVycyhkZXYsIENSLCAxLCAmY3IpOworCS8qIFdyaXRlIHRoZSBNQUMgYWRkcmVzcyBpbnRvIGVlcHJvbS4gRWVwcm9tIHdyaXRlcyBtdXN0IGJlIHdvcmQtc2l6ZWQsCisJICAgc28gd2UgbmVlZCB0byBzcGxpdCB0aGVtIHVwLiAqLworCWZvciAoaSA9IDA7IGkgKiAyIDwgbmV0ZGV2LT5hZGRyX2xlbjsgaSsrKSB7CisJCXNldF9yZWdpc3RlcnMoZGV2LCBJRFJfRUVQUk9NICsgKGkgKiAyKSwgMiwgCisJCW5ldGRldi0+ZGV2X2FkZHIgKyAoaSAqIDIpKTsKKwl9CisJLyogQ2xlYXIgdGhlIFdFUFJPTSBiaXQgKHByZXZlbnRpbmcgYWNjaWRlbnRhbCBlZXByb20gd3JpdGVzKS4gKi8KKwljciAmPSAweGRmOworCXNldF9yZWdpc3RlcnMoZGV2LCBDUiwgMSwgJmNyKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MTUwX3Jlc2V0KHJ0bDgxNTBfdCAqIGRldikKK3sKKwl1OCBkYXRhID0gMHgxMDsKKwlpbnQgaSA9IEhaOworCisJc2V0X3JlZ2lzdGVycyhkZXYsIENSLCAxLCAmZGF0YSk7CisJZG8geworCQlnZXRfcmVnaXN0ZXJzKGRldiwgQ1IsIDEsICZkYXRhKTsKKwl9IHdoaWxlICgoZGF0YSAmIDB4MTApICYmIC0taSk7CisKKwlyZXR1cm4gKGkgPiAwKSA/IDEgOiAwOworfQorCitzdGF0aWMgaW50IGFsbG9jX2FsbF91cmJzKHJ0bDgxNTBfdCAqIGRldikKK3sKKwlkZXYtPnJ4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPnJ4X3VyYikKKwkJcmV0dXJuIDA7CisJZGV2LT50eF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghZGV2LT50eF91cmIpIHsKKwkJdXNiX2ZyZWVfdXJiKGRldi0+cnhfdXJiKTsKKwkJcmV0dXJuIDA7CisJfQorCWRldi0+aW50cl91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5pbnRyX3VyYikgeworCQl1c2JfZnJlZV91cmIoZGV2LT5yeF91cmIpOworCQl1c2JfZnJlZV91cmIoZGV2LT50eF91cmIpOworCQlyZXR1cm4gMDsKKwl9CisJZGV2LT5jdHJsX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPmludHJfdXJiKSB7CisJCXVzYl9mcmVlX3VyYihkZXYtPnJ4X3VyYik7CisJCXVzYl9mcmVlX3VyYihkZXYtPnR4X3VyYik7CisJCXVzYl9mcmVlX3VyYihkZXYtPmludHJfdXJiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfYWxsX3VyYnMocnRsODE1MF90ICogZGV2KQoreworCXVzYl9mcmVlX3VyYihkZXYtPnJ4X3VyYik7CisJdXNiX2ZyZWVfdXJiKGRldi0+dHhfdXJiKTsKKwl1c2JfZnJlZV91cmIoZGV2LT5pbnRyX3VyYik7CisJdXNiX2ZyZWVfdXJiKGRldi0+Y3RybF91cmIpOworfQorCitzdGF0aWMgdm9pZCB1bmxpbmtfYWxsX3VyYnMocnRsODE1MF90ICogZGV2KQoreworCXVzYl9raWxsX3VyYihkZXYtPnJ4X3VyYik7CisJdXNiX2tpbGxfdXJiKGRldi0+dHhfdXJiKTsKKwl1c2Jfa2lsbF91cmIoZGV2LT5pbnRyX3VyYik7CisJdXNiX2tpbGxfdXJiKGRldi0+Y3RybF91cmIpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpwdWxsX3NrYihydGw4MTUwX3QgKmRldikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFJYX1NLQl9QT09MX1NJWkU7IGkrKykgeworCQlpZiAoZGV2LT5yeF9za2JfcG9vbFtpXSkgeworCQkJc2tiID0gZGV2LT5yeF9za2JfcG9vbFtpXTsKKwkJCWRldi0+cnhfc2tiX3Bvb2xbaV0gPSBOVUxMOworCQkJcmV0dXJuIHNrYjsKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcnRsODE1MF90ICpkZXY7CisJdW5zaWduZWQgcGt0X2xlbiwgcmVzOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwl1MTYgcnhfc3RhdDsKKworCWRldiA9IHVyYi0+Y29udGV4dDsKKwlpZiAoIWRldikKKwkJcmV0dXJuOworCWlmICh0ZXN0X2JpdChSVEw4MTUwX1VOUExVRywgJmRldi0+ZmxhZ3MpKQorCQlyZXR1cm47CisJbmV0ZGV2ID0gZGV2LT5uZXRkZXY7CisJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIC1FTk9FTlQ6CisJCXJldHVybjsJLyogdGhlIHVyYiBpcyBpbiB1bmxpbmsgc3RhdGUgKi8KKwljYXNlIC1FVElNRURPVVQ6CisJCXdhcm4oIm1heSBiZSByZXNldCBpcyBuZWVkZWQ/Li4iKTsKKwkJZ290byBnb29uOworCWRlZmF1bHQ6CisJCXdhcm4oIlJ4IHN0YXR1cyAlZCIsIHVyYi0+c3RhdHVzKTsKKwkJZ290byBnb29uOworCX0KKworCWlmICghZGV2LT5yeF9za2IpCisJCWdvdG8gcmVzY2hlZDsKKwkvKiBwcm90ZWN0IGFnYWluc3Qgc2hvcnQgcGFja2V0cyAodGVsbCBtZSB3aHkgd2UgZ290IHNvbWU/IT8pICovCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA8IDQpCisJCWdvdG8gZ29vbjsKKworCXJlcyA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwlyeF9zdGF0ID0gbGUxNl90b19jcHUoKihfX2xlMTYgKikodXJiLT50cmFuc2Zlcl9idWZmZXIgKyByZXMgLSA0KSk7CisJcGt0X2xlbiA9IHJlcyAtIDQ7CisKKwlza2JfcHV0KGRldi0+cnhfc2tiLCBwa3RfbGVuKTsKKwlkZXYtPnJ4X3NrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhkZXYtPnJ4X3NrYiwgbmV0ZGV2KTsKKwluZXRpZl9yeChkZXYtPnJ4X3NrYik7CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOworCisJc3Bpbl9sb2NrKCZkZXYtPnJ4X3Bvb2xfbG9jayk7CisJc2tiID0gcHVsbF9za2IoZGV2KTsKKwlzcGluX3VubG9jaygmZGV2LT5yeF9wb29sX2xvY2spOworCWlmICghc2tiKQorCQlnb3RvIHJlc2NoZWQ7CisKKwlkZXYtPnJ4X3NrYiA9IHNrYjsKK2dvb246CisJdXNiX2ZpbGxfYnVsa191cmIoZGV2LT5yeF91cmIsIGRldi0+dWRldiwgdXNiX3JjdmJ1bGtwaXBlKGRldi0+dWRldiwgMSksCisJCSAgICAgIGRldi0+cnhfc2tiLT5kYXRhLCBSVEw4MTUwX01UVSwgcmVhZF9idWxrX2NhbGxiYWNrLCBkZXYpOworCWlmICh1c2Jfc3VibWl0X3VyYihkZXYtPnJ4X3VyYiwgR0ZQX0FUT01JQykpIHsKKwkJc2V0X2JpdChSWF9VUkJfRkFJTCwgJmRldi0+ZmxhZ3MpOworCQlnb3RvIHJlc2NoZWQ7CisJfSBlbHNlIHsKKwkJY2xlYXJfYml0KFJYX1VSQl9GQUlMLCAmZGV2LT5mbGFncyk7CisJfQorCisJcmV0dXJuOworcmVzY2hlZDoKKwl0YXNrbGV0X3NjaGVkdWxlKCZkZXYtPnRsKTsKK30KKworc3RhdGljIHZvaWQgcnhfZml4dXAodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXJ0bDgxNTBfdCAqZGV2OworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlkZXYgPSAocnRsODE1MF90ICopZGF0YTsKKworCXNwaW5fbG9ja19pcnEoJmRldi0+cnhfcG9vbF9sb2NrKTsKKwlmaWxsX3NrYl9wb29sKGRldik7CisJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnJ4X3Bvb2xfbG9jayk7CisJaWYgKHRlc3RfYml0KFJYX1VSQl9GQUlMLCAmZGV2LT5mbGFncykpCisJCWlmIChkZXYtPnJ4X3NrYikKKwkJCWdvdG8gdHJ5X2FnYWluOworCXNwaW5fbG9ja19pcnEoJmRldi0+cnhfcG9vbF9sb2NrKTsKKwlza2IgPSBwdWxsX3NrYihkZXYpOworCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5yeF9wb29sX2xvY2spOworCWlmIChza2IgPT0gTlVMTCkKKwkJZ290byB0bHNjaGVkOworCWRldi0+cnhfc2tiID0gc2tiOworCXVzYl9maWxsX2J1bGtfdXJiKGRldi0+cnhfdXJiLCBkZXYtPnVkZXYsIHVzYl9yY3ZidWxrcGlwZShkZXYtPnVkZXYsIDEpLAorCQkgICAgICBkZXYtPnJ4X3NrYi0+ZGF0YSwgUlRMODE1MF9NVFUsIHJlYWRfYnVsa19jYWxsYmFjaywgZGV2KTsKK3RyeV9hZ2FpbjoKKwlpZiAodXNiX3N1Ym1pdF91cmIoZGV2LT5yeF91cmIsIEdGUF9BVE9NSUMpKSB7CisJCXNldF9iaXQoUlhfVVJCX0ZBSUwsICZkZXYtPmZsYWdzKTsKKwkJZ290byB0bHNjaGVkOworCSB9IGVsc2UgeworCQljbGVhcl9iaXQoUlhfVVJCX0ZBSUwsICZkZXYtPmZsYWdzKTsKKwl9CisKKwlyZXR1cm47Cit0bHNjaGVkOgorCXRhc2tsZXRfc2NoZWR1bGUoJmRldi0+dGwpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcnRsODE1MF90ICpkZXY7CisKKwlkZXYgPSB1cmItPmNvbnRleHQ7CisJaWYgKCFkZXYpCisJCXJldHVybjsKKwlkZXZfa2ZyZWVfc2tiX2lycShkZXYtPnR4X3NrYik7CisJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYtPm5ldGRldikpCisJCXJldHVybjsKKwlpZiAodXJiLT5zdGF0dXMpCisJCWluZm8oIiVzOiBUeCBzdGF0dXMgJWQiLCBkZXYtPm5ldGRldi0+bmFtZSwgdXJiLT5zdGF0dXMpOworCWRldi0+bmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJbmV0aWZfd2FrZV9xdWV1ZShkZXYtPm5ldGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGludHJfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlydGw4MTUwX3QgKmRldjsKKwlfX3U4ICpkOworCWludCBzdGF0dXM7CisKKwlkZXYgPSB1cmItPmNvbnRleHQ7CisJaWYgKCFkZXYpCisJCXJldHVybjsKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoJLyogdW5saW5rICovCisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJcmV0dXJuOworCS8qIC1FUElQRTogIHNob3VsZCBjbGVhciB0aGUgaGFsdCAqLworCWRlZmF1bHQ6CisJCWluZm8oIiVzOiBpbnRyIHN0YXR1cyAlZCIsIGRldi0+bmV0ZGV2LT5uYW1lLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gcmVzdWJtaXQ7CisJfQorCisJZCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWlmIChkWzBdICYgVFNSX0VSUk9SUykgeworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlpZiAoZFtJTlRfVFNSXSAmIChUU1JfRUNPTCB8IFRTUl9KQlIpKQorCQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQlpZiAoZFtJTlRfVFNSXSAmIFRTUl9MQ09MKQorCQkJZGV2LT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7CisJCWlmIChkW0lOVF9UU1JdICYgVFNSX0xPU1NfQ1JTKQorCQkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCX0KKwkvKiBSZXBvcnQgbGluayBzdGF0dXMgY2hhbmdlcyB0byB0aGUgbmV0d29yayBzdGFjayAqLworCWlmICgoZFtJTlRfTVNSXSAmIE1TUl9MSU5LKSA9PSAwKSB7CisJCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldi0+bmV0ZGV2KSkgeworCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2LT5uZXRkZXYpOworCQkJZGJnKCIlczogTElOSyBMT1NUXG4iLCBfX2Z1bmNfXyk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZGV2LT5uZXRkZXYpKSB7CisJCQluZXRpZl9jYXJyaWVyX29uKGRldi0+bmV0ZGV2KTsKKwkJCWRiZygiJXM6IExJTksgQ0FNRSBCQUNLXG4iLCBfX2Z1bmNfXyk7CisJCX0KKwl9CisKK3Jlc3VibWl0OgorCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIFNMQUJfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKQorCQllcnIgKCJjYW4ndCByZXN1Ym1pdCBpbnRyLCAlcy0lcy9pbnB1dDAsIHN0YXR1cyAlZCIsCisJCQkJZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLAorCQkJCWRldi0+dWRldi0+ZGV2cGF0aCwgc3RhdHVzKTsKK30KKworCisvKgorKioKKyoqCW5ldHdvcmsgcmVsYXRlZCBwYXJ0IG9mIHRoZSBjb2RlCisqKgorKi8KKworc3RhdGljIHZvaWQgZmlsbF9za2JfcG9vbChydGw4MTUwX3QgKmRldikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFJYX1NLQl9QT09MX1NJWkU7IGkrKykgeworCQlpZiAoZGV2LT5yeF9za2JfcG9vbFtpXSkKKwkJCWNvbnRpbnVlOworCQlza2IgPSBkZXZfYWxsb2Nfc2tiKFJUTDgxNTBfTVRVICsgMik7CisJCWlmICghc2tiKSB7CisJCQlyZXR1cm47CisJCX0KKwkJc2tiLT5kZXYgPSBkZXYtPm5ldGRldjsKKwkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKKwkJZGV2LT5yeF9za2JfcG9vbFtpXSA9IHNrYjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfc2tiX3Bvb2wocnRsODE1MF90ICpkZXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUlhfU0tCX1BPT0xfU0laRTsgaSsrKQorCQlpZiAoZGV2LT5yeF9za2JfcG9vbFtpXSkKKwkJCWRldl9rZnJlZV9za2IoZGV2LT5yeF9za2JfcG9vbFtpXSk7Cit9CisKK3N0YXRpYyBpbnQgZW5hYmxlX25ldF90cmFmZmljKHJ0bDgxNTBfdCAqIGRldikKK3sKKwl1OCBjciwgdGNyLCByY3IsIG1zcjsKKworCWlmICghcnRsODE1MF9yZXNldChkZXYpKSB7CisJCXdhcm4oIiVzIC0gZGV2aWNlIHJlc2V0IGZhaWxlZCIsIF9fRlVOQ1RJT05fXyk7CisJfQorCS8qIFJDUiBiaXQ3PTEgYXR0YWNoIFJ4IGluZm8gYXQgdGhlIGVuZDsgID0wIEhXIENSQyAod2hpY2ggaXMgYnJva2VuKSAqLworCXJjciA9IDB4OWU7CisJZGV2LT5yeF9jcmVnID0gY3B1X3RvX2xlMTYocmNyKTsKKwl0Y3IgPSAweGQ4OworCWNyID0gMHgwYzsKKwlpZiAoIShyY3IgJiAweDgwKSkKKwkJc2V0X2JpdChSVEw4MTUwX0hXX0NSQywgJmRldi0+ZmxhZ3MpOworCXNldF9yZWdpc3RlcnMoZGV2LCBSQ1IsIDEsICZyY3IpOworCXNldF9yZWdpc3RlcnMoZGV2LCBUQ1IsIDEsICZ0Y3IpOworCXNldF9yZWdpc3RlcnMoZGV2LCBDUiwgMSwgJmNyKTsKKwlnZXRfcmVnaXN0ZXJzKGRldiwgTVNSLCAxLCAmbXNyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkaXNhYmxlX25ldF90cmFmZmljKHJ0bDgxNTBfdCAqIGRldikKK3sKKwl1OCBjcjsKKworCWdldF9yZWdpc3RlcnMoZGV2LCBDUiwgMSwgJmNyKTsKKwljciAmPSAweGYzOworCXNldF9yZWdpc3RlcnMoZGV2LCBDUiwgMSwgJmNyKTsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpydGw4MTUwX25ldGRldl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiAmKChydGw4MTUwX3QgKiluZXRkZXZfcHJpdihkZXYpKS0+c3RhdHM7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDgxNTBfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXJ0bDgxNTBfdCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl3YXJuKCIlczogVHggdGltZW91dC4iLCBuZXRkZXYtPm5hbWUpOworCWRldi0+dHhfdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfQVNZTkNfVU5MSU5LOworCXVzYl91bmxpbmtfdXJiKGRldi0+dHhfdXJiKTsKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworfQorCitzdGF0aWMgdm9pZCBydGw4MTUwX3NldF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlydGw4MTUwX3QgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJZGV2LT5yeF9jcmVnIHw9IGNwdV90b19sZTE2KDB4MDAwMSk7CisJCWluZm8oIiVzOiBwcm9taXNjdW91cyBtb2RlIiwgbmV0ZGV2LT5uYW1lKTsKKwl9IGVsc2UgaWYgKChuZXRkZXYtPm1jX2NvdW50ID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKKwkJICAgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CisJCWRldi0+cnhfY3JlZyAmPSBjcHVfdG9fbGUxNigweGZmZmUpOworCQlkZXYtPnJ4X2NyZWcgfD0gY3B1X3RvX2xlMTYoMHgwMDAyKTsKKwkJaW5mbygiJXM6IGFsbG11bHRpIHNldCIsIG5ldGRldi0+bmFtZSk7CisJfSBlbHNlIHsKKwkJLyogflJYX01VTFRJQ0FTVCwgflJYX1BST01JU0NVT1VTICovCisJCWRldi0+cnhfY3JlZyAmPSBjcHVfdG9fbGUxNigweDAwZmMpOworCX0KKwlhc3luY19zZXRfcmVnaXN0ZXJzKGRldiwgUkNSLCAyKTsKKwluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7Cit9CisKK3N0YXRpYyBpbnQgcnRsODE1MF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJcnRsODE1MF90ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBjb3VudCwgcmVzOworCisJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCWNvdW50ID0gKHNrYi0+bGVuIDwgNjApID8gNjAgOiBza2ItPmxlbjsKKwljb3VudCA9IChjb3VudCAmIDB4M2YpID8gY291bnQgOiBjb3VudCArIDE7CisJZGV2LT50eF9za2IgPSBza2I7CisJdXNiX2ZpbGxfYnVsa191cmIoZGV2LT50eF91cmIsIGRldi0+dWRldiwgdXNiX3NuZGJ1bGtwaXBlKGRldi0+dWRldiwgMiksCisJCSAgICAgIHNrYi0+ZGF0YSwgY291bnQsIHdyaXRlX2J1bGtfY2FsbGJhY2ssIGRldik7CisJaWYgKChyZXMgPSB1c2Jfc3VibWl0X3VyYihkZXYtPnR4X3VyYiwgR0ZQX0FUT01JQykpKSB7CisJCXdhcm4oImZhaWxlZCB0eF91cmIgJWRcbiIsIHJlcyk7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CisJfSBlbHNlIHsKKwkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCX0KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHNldF9jYXJyaWVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJcnRsODE1MF90ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXNob3J0IHRtcDsKKworCWdldF9yZWdpc3RlcnMoZGV2LCBDU0NSLCAyLCAmdG1wKTsKKwlpZiAodG1wICYgQ1NDUl9MSU5LX1NUQVRVUykKKwkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOworCWVsc2UKKwkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKK30KKworc3RhdGljIGludCBydGw4MTUwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlydGw4MTUwX3QgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHJlczsKKworCWlmIChkZXYtPnJ4X3NrYiA9PSBOVUxMKQorCQlkZXYtPnJ4X3NrYiA9IHB1bGxfc2tiKGRldik7CisJaWYgKCFkZXYtPnJ4X3NrYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzZXRfcmVnaXN0ZXJzKGRldiwgSURSLCA2LCBuZXRkZXYtPmRldl9hZGRyKTsKKwkKKwl1c2JfZmlsbF9idWxrX3VyYihkZXYtPnJ4X3VyYiwgZGV2LT51ZGV2LCB1c2JfcmN2YnVsa3BpcGUoZGV2LT51ZGV2LCAxKSwKKwkJICAgICAgZGV2LT5yeF9za2ItPmRhdGEsIFJUTDgxNTBfTVRVLCByZWFkX2J1bGtfY2FsbGJhY2ssIGRldik7CisJaWYgKChyZXMgPSB1c2Jfc3VibWl0X3VyYihkZXYtPnJ4X3VyYiwgR0ZQX0tFUk5FTCkpKQorCQl3YXJuKCIlczogcnhfdXJiIHN1Ym1pdCBmYWlsZWQ6ICVkIiwgX19GVU5DVElPTl9fLCByZXMpOworCXVzYl9maWxsX2ludF91cmIoZGV2LT5pbnRyX3VyYiwgZGV2LT51ZGV2LCB1c2JfcmN2aW50cGlwZShkZXYtPnVkZXYsIDMpLAorCQkgICAgIGRldi0+aW50cl9idWZmLCBJTlRCVUZTSVpFLCBpbnRyX2NhbGxiYWNrLAorCQkgICAgIGRldiwgZGV2LT5pbnRyX2ludGVydmFsKTsKKwlpZiAoKHJlcyA9IHVzYl9zdWJtaXRfdXJiKGRldi0+aW50cl91cmIsIEdGUF9LRVJORUwpKSkKKwkJd2FybigiJXM6IGludHJfdXJiIHN1Ym1pdCBmYWlsZWQ6ICVkIiwgX19GVU5DVElPTl9fLCByZXMpOworCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CisJZW5hYmxlX25ldF90cmFmZmljKGRldik7CisJc2V0X2NhcnJpZXIobmV0ZGV2KTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgcnRsODE1MF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXJ0bDgxNTBfdCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgcmVzID0gMDsKKworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwlpZiAoIXRlc3RfYml0KFJUTDgxNTBfVU5QTFVHLCAmZGV2LT5mbGFncykpCisJCWRpc2FibGVfbmV0X3RyYWZmaWMoZGV2KTsKKwl1bmxpbmtfYWxsX3VyYnMoZGV2KTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDgxNTBfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKK3sKKwlydGw4MTUwX3QgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlzdHJuY3B5KGluZm8tPmRyaXZlciwgZHJpdmVyX25hbWUsIEVUSFRPT0xfQlVTSU5GT19MRU4pOworCXN0cm5jcHkoaW5mby0+dmVyc2lvbiwgRFJJVkVSX1ZFUlNJT04sIEVUSFRPT0xfQlVTSU5GT19MRU4pOworCXVzYl9tYWtlX3BhdGgoZGV2LT51ZGV2LCBpbmZvLT5idXNfaW5mbywgc2l6ZW9mIGluZm8tPmJ1c19pbmZvKTsKK30KKworc3RhdGljIGludCBydGw4MTUwX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCit7CisJcnRsODE1MF90ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXNob3J0IGxwYSwgYm1jcjsKKworCWVjbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKKwkJCSAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CisJCQkgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwKKwkJCSAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAorCQkJICBTVVBQT1JURURfQXV0b25lZyB8CisJCQkgIFNVUFBPUlRFRF9UUCB8IFNVUFBPUlRFRF9NSUkpOworCWVjbWQtPnBvcnQgPSBQT1JUX1RQOworCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKKwllY21kLT5waHlfYWRkcmVzcyA9IGRldi0+cGh5OworCWdldF9yZWdpc3RlcnMoZGV2LCBCTUNSLCAyLCAmYm1jcik7CisJZ2V0X3JlZ2lzdGVycyhkZXYsIEFOTFAsIDIsICZscGEpOworCWlmIChibWNyICYgQk1DUl9BTkVOQUJMRSkgeworCQllY21kLT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7CisJCWVjbWQtPnNwZWVkID0gKGxwYSAmIChMUEFfMTAwSEFMRiB8IExQQV8xMDBGVUxMKSkgPworCQkJICAgICBTUEVFRF8xMDAgOiBTUEVFRF8xMDsKKwkJaWYgKGVjbWQtPnNwZWVkID09IFNQRUVEXzEwMCkKKwkJCWVjbWQtPmR1cGxleCA9IChscGEgJiBMUEFfMTAwRlVMTCkgPworCQkJICAgIERVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CisJCWVsc2UKKwkJCWVjbWQtPmR1cGxleCA9IChscGEgJiBMUEFfMTBGVUxMKSA/CisJCQkgICAgRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKKwl9IGVsc2UgeworCQllY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOworCQllY21kLT5zcGVlZCA9IChibWNyICYgQk1DUl9TUEVFRDEwMCkgPworCQkgICAgU1BFRURfMTAwIDogU1BFRURfMTA7CisJCWVjbWQtPmR1cGxleCA9IChibWNyICYgQk1DUl9GVUxMRFBMWCkgPworCQkgICAgRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0geworCS5nZXRfZHJ2aW5mbyA9IHJ0bDgxNTBfZ2V0X2RydmluZm8sCisJLmdldF9zZXR0aW5ncyA9IHJ0bDgxNTBfZ2V0X3NldHRpbmdzLAorCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmsKK307CisKK3N0YXRpYyBpbnQgcnRsODE1MF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQoreworCXJ0bDgxNTBfdCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1MTYgKmRhdGEgPSAodTE2ICopICYgcnEtPmlmcl9pZnJ1OworCWludCByZXMgPSAwOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NERVZQUklWQVRFOgorCQlkYXRhWzBdID0gZGV2LT5waHk7CisJY2FzZSBTSU9DREVWUFJJVkFURSArIDE6CisJCXJlYWRfbWlpX3dvcmQoZGV2LCBkZXYtPnBoeSwgKGRhdGFbMV0gJiAweDFmKSwgJmRhdGFbM10pOworCQlicmVhazsKKwljYXNlIFNJT0NERVZQUklWQVRFICsgMjoKKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQkJcmV0dXJuIC1FUEVSTTsKKwkJd3JpdGVfbWlpX3dvcmQoZGV2LCBkZXYtPnBoeSwgKGRhdGFbMV0gJiAweDFmKSwgZGF0YVsyXSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlcyA9IC1FT1BOT1RTVVBQOworCX0KKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgcnRsODE1MF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXJ0bDgxNTBfdCAqZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisKKwluZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YocnRsODE1MF90KSk7CisJaWYgKCFuZXRkZXYpIHsKKwkJZXJyKCJPdXQgb2YgbWVtb3J5Iik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJbWVtc2V0KGRldiwgMCwgc2l6ZW9mKHJ0bDgxNTBfdCkpOworCisJZGV2LT5pbnRyX2J1ZmYgPSBrbWFsbG9jKElOVEJVRlNJWkUsIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5pbnRyX2J1ZmYpIHsKKwkJZnJlZV9uZXRkZXYobmV0ZGV2KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdGFza2xldF9pbml0KCZkZXYtPnRsLCByeF9maXh1cCwgKHVuc2lnbmVkIGxvbmcpZGV2KTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5yeF9wb29sX2xvY2spOworCQorCWRldi0+dWRldiA9IHVkZXY7CisJZGV2LT5uZXRkZXYgPSBuZXRkZXY7CisJU0VUX01PRFVMRV9PV05FUihuZXRkZXYpOworCW5ldGRldi0+b3BlbiA9IHJ0bDgxNTBfb3BlbjsKKwluZXRkZXYtPnN0b3AgPSBydGw4MTUwX2Nsb3NlOworCW5ldGRldi0+ZG9faW9jdGwgPSBydGw4MTUwX2lvY3RsOworCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSBSVEw4MTUwX1RYX1RJTUVPVVQ7CisJbmV0ZGV2LT50eF90aW1lb3V0ID0gcnRsODE1MF90eF90aW1lb3V0OworCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gcnRsODE1MF9zdGFydF94bWl0OworCW5ldGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gcnRsODE1MF9zZXRfbXVsdGljYXN0OworCW5ldGRldi0+c2V0X21hY19hZGRyZXNzID0gcnRsODE1MF9zZXRfbWFjX2FkZHJlc3M7CisJbmV0ZGV2LT5nZXRfc3RhdHMgPSBydGw4MTUwX25ldGRldl9zdGF0czsKKwluZXRkZXYtPm10dSA9IFJUTDgxNTBfTVRVOworCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZvcHMpOworCWRldi0+aW50cl9pbnRlcnZhbCA9IDEwMDsJLyogMTAwbXMgKi8KKworCWlmICghYWxsb2NfYWxsX3VyYnMoZGV2KSkgeworCQllcnIoIm91dCBvZiBtZW1vcnkiKTsKKwkJZ290byBvdXQ7CisJfQorCWlmICghcnRsODE1MF9yZXNldChkZXYpKSB7CisJCWVycigiY291bGRuJ3QgcmVzZXQgdGhlIGRldmljZSIpOworCQlnb3RvIG91dDE7CisJfQorCWZpbGxfc2tiX3Bvb2woZGV2KTsKKwlzZXRfZXRoZXJuZXRfYWRkcihkZXYpOworCWluZm8oIiVzOiBydGw4MTUwIGlzIGRldGVjdGVkIiwgbmV0ZGV2LT5uYW1lKTsKKwkKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGRldik7CisJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmaW50Zi0+ZGV2KTsKKwlpZiAocmVnaXN0ZXJfbmV0ZGV2KG5ldGRldikgIT0gMCkgeworCQllcnIoImNvdWxkbid0IHJlZ2lzdGVyIHRoZSBkZXZpY2UiKTsKKwkJZ290byBvdXQyOworCX0KKwlyZXR1cm4gMDsKKworb3V0MjoKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCWZyZWVfc2tiX3Bvb2woZGV2KTsKK291dDE6CisJZnJlZV9hbGxfdXJicyhkZXYpOworb3V0OgorCWtmcmVlKGRldi0+aW50cl9idWZmKTsKKwlmcmVlX25ldGRldihuZXRkZXYpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgdm9pZCBydGw4MTUwX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJcnRsODE1MF90ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwlpZiAoZGV2KSB7CisJCXNldF9iaXQoUlRMODE1MF9VTlBMVUcsICZkZXYtPmZsYWdzKTsKKwkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2LT5uZXRkZXYpOworCQl1bmxpbmtfYWxsX3VyYnMoZGV2KTsKKwkJZnJlZV9hbGxfdXJicyhkZXYpOworCQlmcmVlX3NrYl9wb29sKGRldik7CisJCWlmIChkZXYtPnJ4X3NrYikKKwkJCWRldl9rZnJlZV9za2IoZGV2LT5yeF9za2IpOworCQlrZnJlZShkZXYtPmludHJfYnVmZik7CisJCWZyZWVfbmV0ZGV2KGRldi0+bmV0ZGV2KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9ydGw4MTUwX2luaXQodm9pZCkKK3sKKwlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmcnRsODE1MF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3J0bDgxNTBfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZydGw4MTUwX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHVzYl9ydGw4MTUwX2luaXQpOworbW9kdWxlX2V4aXQodXNiX3J0bDgxNTBfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L3VzYm5ldC5jIGIvZHJpdmVycy91c2IvbmV0L3VzYm5ldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkOGI0NDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9uZXQvdXNibmV0LmMKQEAgLTAsMCArMSw0MTA2IEBACisvKgorICogVVNCIE5ldHdvcmtpbmcgTGlua3MKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDAzIGJ5IERhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogQ29weXJpZ2h0IChDKSAyMDAyIFBhdmVsIE1hY2hlayA8cGF2ZWxAdWN3LmN6PgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUgRGF2aWQgSG9sbGlzIDxkaG9sbGlzQGRhdmVob2xsaXMuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA1IFBoaWwgQ2hhbmcgPHBjaGFuZzIzQHNiY2dsb2JhbC5uZXQ+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBUaVZvIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworLyoKKyAqIFRoaXMgaXMgYSBnZW5lcmljICJVU0IgbmV0d29ya2luZyIgZnJhbWV3b3JrIHRoYXQgd29ya3Mgd2l0aCBzZXZlcmFsCisgKiBraW5kcyBvZiBmdWxsIGFuZCBoaWdoIHNwZWVkIG5ldHdvcmtpbmcgZGV2aWNlczoKKyAqCisgKiAgICsgVVNCIGhvc3QtdG8taG9zdCAibmV0d29yayBjYWJsZXMiLCB1c2VkIGZvciBJUC1vdmVyLVVTQiBsaW5rcy4KKyAqICAgICBUaGVzZSBhcmUgb2Z0ZW4gdXNlZCBmb3IgTGFwbGluayBzdHlsZSBjb25uZWN0aXZpdHkgcHJvZHVjdHMuCisgKgktIEFuY2hvckNoaXAgMjcyMAorICoJLSBCZWxraW4sIGVURUsgKGludGVyb3BzIHdpdGggV2luMzIgZHJpdmVycykKKyAqCS0gR2VuZVN5cyBHTDYyMFVTQi1BCisgKgktIE5ldENoaXAgMTA4MCAoaW50ZXJvcGVyYXRlcyB3aXRoIE5ldENoaXAgV2luMzIgZHJpdmVycykKKyAqCS0gUHJvbGlmaWMgUEwtMjMwMS8yMzAyIChyZXBsYWNlcyAicGx1c2IiIGRyaXZlcikKKyAqCS0gS0MgVGVjaG5vbG9neSBLQzIxOTAKKyAqCisgKiAgICsgU21hcnQgVVNCIGRldmljZXMgY2FuIHN1cHBvcnQgc3VjaCBsaW5rcyBkaXJlY3RseSwgdXNpbmcgSW50ZXJuZXQKKyAqICAgICBzdGFuZGFyZCBwcm90b2NvbHMgaW5zdGVhZCBvZiBwcm9wcmlldGFyeSBob3N0LXRvLWRldmljZSBsaW5rcy4KKyAqCS0gTGludXggUERBcyBsaWtlIGlQYXEsIFlvcHksIGFuZCBaYXVydXMKKyAqCS0gVGhlIEJMT0IgYm9vdCBsb2FkZXIgKGZvciBkaXNrbGVzcyBib290aW5nKQorICoJLSBMaW51eCAiZ2FkZ2V0cyIsIHBlcmhhcHMgdXNpbmcgUFhBLTJ4eCBvciBOZXQyMjgwIGNvbnRyb2xsZXJzCisgKgktIERldmljZXMgdXNpbmcgRVBTT04ncyBzYW1wbGUgVVNCIGZpcm13YXJlCisgKgktIENEQy1FdGhlcm5ldCBjbGFzcyBkZXZpY2VzLCBzdWNoIGFzIG1hbnkgY2FibGUgbW9kZW1zCisgKgorICogICArIEFkYXB0ZXJzIHRvIG5ldHdvcmtzIHN1Y2ggYXMgRXRoZXJuZXQuCisgKgktIEFYODgxN1ggYmFzZWQgVVNCIDIuMCBwcm9kdWN0cworICoKKyAqIExpbmtzIHRvIHRoZXNlIGRldmljZXMgY2FuIGJlIGJyaWRnZWQgdXNpbmcgTGludXggRXRoZXJuZXQgYnJpZGdpbmcuCisgKiBXaXRoIG1pbm9yIGV4Y2VwdGlvbnMsIHRoZXNlIGFsbCB1c2Ugc2ltaWxhciBVU0IgZnJhbWluZyBmb3IgbmV0d29yaworICogdHJhZmZpYywgYnV0IG5lZWQgZGlmZmVyZW50IHByb3RvY29scyBmb3IgY29udHJvbCB0cmFmZmljLgorICoKKyAqIFVTQiBkZXZpY2VzIGNhbiBpbXBsZW1lbnQgdGhlaXIgc2lkZSBvZiB0aGlzIHByb3RvY29sIGF0IHRoZSBjb3N0CisgKiBvZiB0d28gYnVsayBlbmRwb2ludHM7IGl0J3Mgbm90IHJlc3RyaWN0ZWQgdG8gImNhYmxlIiBhcHBsaWNhdGlvbnMuCisgKiBTZWUgdGhlIFNBMTExMCwgWmF1cnVzLCBvciBFUFNPTiBkZXZpY2UvY2xpZW50IHN1cHBvcnQgaW4gdGhpcyBkcml2ZXI7CisgKiBzbGF2ZS90YXJnZXQgZHJpdmVycyBzdWNoIGFzICJ1c2ItZXRoIiAob24gbW9zdCBTQS0xMTAwIFBEQXMpIG9yCisgKiAiZ19ldGhlciIgKGluIHRoZSBMaW51eCAiZ2FkZ2V0IiBmcmFtZXdvcmspIGltcGxlbWVudCB0aGF0IGJlaGF2aW9yCisgKiB3aXRoaW4gZGV2aWNlcy4KKyAqCisgKgorICogQ0hBTkdFTE9HOgorICoKKyAqIDEzLXNlcC0yMDAwCWV4cGVyaW1lbnRhbCwgbmV3CisgKiAxMC1vY3QtMjAwMAl1c2JfZGV2aWNlX2lkIHRhYmxlIGNyZWF0ZWQuIAorICogMjgtb2N0LTIwMDAJbWlzYyBmaXhlczsgbW9zdGx5LCBkaXNjYXJkIG1vcmUgVFRMLW1hbmdsZWQgcnggcGFja2V0cy4KKyAqIDAxLW5vdi0yMDAwCXVzYl9kZXZpY2VfaWQgdGFibGUgYW5kIHByb2JpbmcgYXBpIHVwZGF0ZSBieQorICoJCUFkYW0gSi4gUmljaHRlciA8YWRhbUB5Z2dkcmFzaWwuY29tPi4KKyAqIDE4LWRlYy0yMDAwCShkYikgdHggd2F0Y2hkb2csICJuZXQxMDgwIiByZW5hbWluZyB0byAidXNibmV0IiwgZGV2aWNlX2luZm8KKyAqCQlhbmQgcHJvbGlmaWMgc3VwcG9ydCwgaXNvbGF0ZSBuZXQxMDgwLXNwZWNpZmljIGJpdHMsIGNsZWFudXAuCisgKgkJZml4IHVubGlua191cmJzIG9vcHMgaW4gRDMgUE0gcmVzdW1lIGNvZGUgcGF0aC4KKyAqCisgKiAwMi1mZWItMjAwMQkoZGIpIGZpeCB0eCBza2Igc2hhcmluZywgcGFja2V0IGxlbmd0aCwgbWF0Y2hfZmxhZ3MsIC4uLgorICogMDgtZmViLTIwMDEJc3R1YmJlZCBpbiAibGludXhkZXYiLCBtYXliZSB0aGUgU0EtMTEwMCBmb2xrIGNhbiB1c2UgaXQ7CisgKgkJQW5jaG9yQ2hpcHMgMjcyMCBzdXBwb3J0IChmcm9tIHNwZWMpIGZvciB0ZXN0aW5nOworICoJCWZpeCBiaXQtb3JkZXJpbmcgcHJvYmxlbSB3aXRoIGV0aGVybmV0IG11bHRpY2FzdCBhZGRyCisgKiAxOS1mZWItMjAwMSAgU3VwcG9ydCBmb3IgY2xlYXJpbmcgaGFsdCBjb25kaXRpb25zLiBTQTExMDAgVURDIHN1cHBvcnQKKyAqCQl1cGRhdGVzLiBPbGVnIERyb2tpbiAoZ3JlZW5AaVhjZWxlcmF0b3IuY29tKQorICogMjUtbWFyLTIwMDEJTW9yZSBTQS0xMTAwIHVwZGF0ZXMsIGluY2x1ZGluZyB3b3JrYXJvdW5kIGZvciBpcCBwcm9ibGVtCisgKgkJZXhwZWN0aW5nIGNsZWFyZWQgc2tiLT5jYiBhbmQgZnJhbWluZyBjaGFuZ2UgdG8gbWF0Y2ggbGF0ZXN0CisgKgkJaGFuZGhlbGRzLm9yZyB2ZXJzaW9uIChPbGVnKS4gIEVuYWJsZSBkZXZpY2UgSURzIGZyb20gdGhlCisgKgkJV2luMzIgQmVsa2luIGRyaXZlcjsgb3RoZXIgY2xlYW51cHMgKGRiKS4KKyAqIDE2LWp1bC0yMDAxCUJ1Z2ZpeGVzIGZvciB1aGNpIG9vcHMtb24tdW5wbHVnLCBCZWxraW4gc3VwcG9ydCwgdmFyaW91cworICoJCWNsZWFudXBzIGZvciBwcm9ibGVtcyBub3QgeWV0IHNlZW4gaW4gdGhlIGZpZWxkLiAoZGIpCisgKiAxNy1vY3QtMjAwMQlIYW5kbGUgIkFkdmFuY2UgVVNCTkVUIiBwcm9kdWN0LCBsaWtlIEJlbGtpbi9lVEVLIGRldmljZXMsCisgKgkJZnJvbSBJb2FubmlzIE1hdnJvdWtha2lzIDxpLm1hdnJvdWtha2lzQGJ0aW50ZXJuZXQuY29tPjsKKyAqCQlyeCB1bmxpbmtzIHNvbWVob3cgd2VyZW4ndCBhc3luYzsgbWlub3IgY2xlYW51cC4KKyAqIDAzLW5vdi0yMDAxCU1lcmdlZCBHZW5lU3lzIGRyaXZlcjsgb3JpZ2luYWwgY29kZSBmcm9tIEppdW4tSmllIEh1YW5nCisgKgkJPGh1YW5nampAZ2VuZXN5c2xvZ2ljLmNvbS50dz4sIHVwZGF0ZWQgYnkgU3RhbmlzbGF2IEJyYWJlYworICoJCTx1dHhAcGVuZ3Vpbi5jej4uICBNYWRlIGZyYW1pbmcgb3B0aW9ucyAoTmV0Q2hpcC9HZW5lU3lzKQorICoJCXRpZSBtb3N0bHkgdG8gKHN1Yilkcml2ZXIgaW5mby4gIFdvcmthcm91bmQgc29tZSBQTC0yMzAyCisgKgkJY2hpcHMgdGhhdCBzZWVtIHRvIHJlamVjdCBTRVRfSU5URVJGQUNFIHJlcXVlc3RzLgorICoKKyAqIDA2LWFwci0yMDAyCUFkZGVkIGV0aHRvb2wgc3VwcG9ydCwgYmFzZWQgb24gYSBwYXRjaCBmcm9tIEJyYWQgSGFyZHMuCisgKgkJTGV2ZWwgb2YgZGlhZ25vc3RpY3MgaXMgbW9yZSBjb25maWd1cmFibGU7IHRoZXkgdXNlIGRldmljZQorICoJCWxvY2F0aW9uICh1c2JfZGV2aWNlLT5kZXZwYXRoKSBpbnN0ZWFkIG9mIGFkZHJlc3MgKDIuNSkuCisgKgkJRm9yIHR4X2ZpeHVwLCBtZW1mbGFncyBjYW4ndCBiZSBOT0lPLgorICogMDctbWF5LTIwMDIJR2VuZXJhbGl6ZS9jbGVhbnVwIGtldmVudGQgc3VwcG9ydCwgaGFuZGxpbmcgcnggc3RhbGxzIChtb3N0bHkKKyAqCQlmb3IgVVNCIDIuMCBUVHMpIGFuZCBtZW1vcnkgc2hvcnRhZ2VzIChwb3RlbnRpYWwpIHRvby4gKGRiKQorICoJCVVzZSAibG9jYWxseSBhc3NpZ25lZCIgSUVFRTgwMiBhZGRyZXNzIHNwYWNlLiAoQnJhZCBIYXJkcykKKyAqIDE4LW9jdC0yMDAyCVN1cHBvcnQgZm9yIFphdXJ1cyAoUGF2ZWwgTWFjaGVrKSwgcmVsYXRlZCBjbGVhbnVwIChkYikuCisgKiAxNC1kZWMtMjAwMglSZW1vdmUgWmF1cnVzLXByaXZhdGUgY3JjMzIgY29kZSAoUGF2ZWwpOyAyLjUgb29wcyBmaXgsCisgKiAJCWNsZWFudXBzIGFuZCBzdHViYmVkIFBYQS0yNTAgc3VwcG9ydCAoZGIpLCBmaXggZm9yIGZyYW1pbmcKKyAqIAkJaXNzdWVzIG9uIFosIG5ldDEwODAsIGFuZCBnbDYyMGEgKFRvYnkgTWlsbmUpCisgKgorICogMzEtbWFyLTIwMDMJVXNlIGVuZHBvaW50IGRlc2NyaXB0b3JzOiAgaGlnaCBzcGVlZCBzdXBwb3J0LCBzaW1wbGVyIHNhMTEwMAorICogCQl2cyBweGEyNXgsIGFuZCBDREMgRXRoZXJuZXQuICBUaHJvdHRsZSBkb3duIGxvZyBmbG9vZHMgb24KKyAqIAkJZGlzY29ubmVjdDsgb3RoZXIgY2xlYW51cHMuIChkYikgIEZsdXNoIG5ldDEwODAgZmlmb3MKKyAqIAkJYWZ0ZXIgc2V2ZXJhbCBzZXF1ZW50aWFsIGZyYW1pbmcgZXJyb3JzLiAoSm9oYW5uZXMgRXJkZmVsdCkKKyAqIDIyLWF1Zy0yMDAzCUFYODgxN1ggc3VwcG9ydCAoRGF2ZSBIb2xsaXMpLgorICogMTQtanVuLTIwMDQgIFRyaXZpYWwgcGF0Y2ggZm9yIEFYODgxN1ggYmFzZWQgQnVmZmFsbyBMVUEtVTItS1RYIGluIEphcGFuCisgKgkJKE5laWwgQm9ydG5haykKKyAqIDAzLW5vdi0yMDA0CVRyaXZpYWwgcGF0Y2ggZm9yIEtDMjE5MCAoS0MtMTkwKSBjaGlwLiAoSm9uYXRoYW4gTWNEb3dlbGwpCisgKgorICogMDEtZmViLTIwMDUJQVg4ODc3MiBzdXBwb3J0IChQaGlsIENoYW5nICYgRGF2ZSBIb2xsaXMpCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvLyAjZGVmaW5lCURFQlVHCQkJLy8gZXJyb3IgcGF0aCBtZXNzYWdlcywgZXh0cmEgaW5mbworLy8gI2RlZmluZQlWRVJCT1NFCQkJLy8gbW9yZTsgc3VjY2VzcyBtZXNzYWdlcworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaWZkZWYJQ09ORklHX1VTQl9ERUJVRworIyAgIGRlZmluZSBERUJVRworI2VuZGlmCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva21vZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKworI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJIjAzLU5vdi0yMDA0IgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBOaW5ldGVlbiBVU0IgMS4xIG1heCBzaXplIGJ1bGsgdHJhbnNhY3Rpb25zIHBlciBmcmFtZSAobXMpLCBtYXguCisgKiBTZXZlcmFsIGRvemVuIGJ5dGVzIG9mIElQdjQgZGF0YSBjYW4gZml0IGluIHR3byBzdWNoIHRyYW5zYWN0aW9ucy4KKyAqIE9uZSBtYXhpbXVtIHNpemUgRXRoZXJuZXQgcGFja2V0IHRha2VzIHR3ZW50eSBmb3VyIG9mIHRoZW0uCisgKiBGb3IgaGlnaCBzcGVlZCwgZWFjaCBmcmFtZSBjb21mb3J0YWJseSBmaXRzIGFsbW9zdCAzNiBtYXggc2l6ZQorICogRXRoZXJuZXQgcGFja2V0cyAoc28gcXVldWVzIHNob3VsZCBiZSBiaWdnZXIpLgorICovCisjZGVmaW5lCVJYX1FMRU4oZGV2KSAoKChkZXYpLT51ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgPyA2MCA6IDQpCisjZGVmaW5lCVRYX1FMRU4oZGV2KSAoKChkZXYpLT51ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgPyA2MCA6IDQpCisKKy8vIHBhY2tldHMgYXJlIGFsd2F5cyBldGhlcm5ldCBpbnNpZGUKKy8vIC4uLiBleGNlcHQgdGhleSBjYW4gYmUgYmlnZ2VyIChsaW1pdCBvZiA2NEsgd2l0aCBOZXRDaGlwIGZyYW1pbmcpCisjZGVmaW5lIE1JTl9QQUNLRVQJc2l6ZW9mKHN0cnVjdCBldGhoZHIpCisjZGVmaW5lIE1BWF9QQUNLRVQJMzI3NjgKKworLy8gcmVhd2FrZW4gbmV0d29yayBxdWV1ZSB0aGlzIHNvb24gYWZ0ZXIgc3RvcHBpbmc7IGVsc2Ugd2F0Y2hkb2cgYmFya3MKKyNkZWZpbmUgVFhfVElNRU9VVF9KSUZGSUVTCSg1KkhaKQorCisvLyB0aHJvdHRsZSByeC90eCBicmllZmx5IGFmdGVyIHNvbWUgZmF1bHRzLCBzbyBraHViZCBtaWdodCBkaXNjb25uZWN0KCkKKy8vIHVzIChpdCBwb2xscyBhdCBIWi80IHVzdWFsbHkpIGJlZm9yZSB3ZSByZXBvcnQgdG9vIG1hbnkgZmFsc2UgZXJyb3JzLgorI2RlZmluZSBUSFJPVFRMRV9KSUZGSUVTCShIWi84KQorCisvLyBmb3IgdmVuZG9yLXNwZWNpZmljIGNvbnRyb2wgb3BlcmF0aW9ucworI2RlZmluZQlDT05UUk9MX1RJTUVPVVRfTVMJNTAwCisKKy8vIGJldHdlZW4gd2FrZXVwcworI2RlZmluZSBVTkxJTktfVElNRU9VVF9NUwkzCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8vIHJhbmRvbWx5IGdlbmVyYXRlZCBldGhlcm5ldCBhZGRyZXNzCitzdGF0aWMgdTgJbm9kZV9pZCBbRVRIX0FMRU5dOworCisvLyBzdGF0ZSB3ZSBrZWVwIGZvciBlYWNoIGRldmljZSB3ZSBoYW5kbGUKK3N0cnVjdCB1c2JuZXQgeworCS8vIGhvdXNla2VlcGluZworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OworCXN0cnVjdCBkcml2ZXJfaW5mbwkqZHJpdmVyX2luZm87CisJd2FpdF9xdWV1ZV9oZWFkX3QJKndhaXQ7CisKKwkvLyBpL28gaW5mbzogcGlwZXMgZXRjCisJdW5zaWduZWQJCWluLCBvdXQ7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICpzdGF0dXM7CisJdW5zaWduZWQJCW1heHBhY2tldDsKKwlzdHJ1Y3QgdGltZXJfbGlzdAlkZWxheTsKKworCS8vIHByb3RvY29sL2ludGVyZmFjZSBzdGF0ZQorCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXQ7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJc3RhdHM7CisJaW50CQkJbXNnX2VuYWJsZTsKKwl1bnNpZ25lZCBsb25nCQlkYXRhIFs1XTsKKworCXN0cnVjdCBtaWlfaWZfaW5mbwltaWk7CisKKwkvLyB2YXJpb3VzIGtpbmRzIG9mIHBlbmRpbmcgZHJpdmVyIHdvcmsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXJ4cTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXR4cTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCWRvbmU7CisJc3RydWN0IHVyYgkJKmludGVycnVwdDsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJYmg7CisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJa2V2ZW50OworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworIwkJZGVmaW5lIEVWRU5UX1RYX0hBTFQJMAorIwkJZGVmaW5lIEVWRU5UX1JYX0hBTFQJMQorIwkJZGVmaW5lIEVWRU5UX1JYX01FTU9SWQkyCisjCQlkZWZpbmUgRVZFTlRfU1RTX1NQTElUCTMKK307CisKKy8vIGRldmljZS1zcGVjaWZpYyBpbmZvIHVzZWQgYnkgdGhlIGRyaXZlcgorc3RydWN0IGRyaXZlcl9pbmZvIHsKKwljaGFyCQkqZGVzY3JpcHRpb247CisKKwlpbnQJCWZsYWdzOworLyogZnJhbWluZyBpcyBDREMgRXRoZXJuZXQsIG5vdCB3cml0aW5nIFpMUHMgKGh3IGlzc3VlcyksIG9yIG9wdGlvbmFsbHk6ICovCisjZGVmaW5lIEZMQUdfRlJBTUlOR19OQwkweDAwMDEJCS8qIGd1YXJkIGFnYWluc3QgZGV2aWNlIGRyb3BvdXRzICovIAorI2RlZmluZSBGTEFHX0ZSQU1JTkdfR0wJMHgwMDAyCQkvKiBnZW5lbGluayBiYXRjaGVzIHBhY2tldHMgKi8KKyNkZWZpbmUgRkxBR19GUkFNSU5HX1oJMHgwMDA0CQkvKiB6YXVydXMgYWRkcyBhIHRyYWlsZXIgKi8KKyNkZWZpbmUgRkxBR19GUkFNSU5HX1JOCTB4MDAwOAkJLyogUk5ESVMgYmF0Y2hlcywgcGx1cyBodWdlIGhlYWRlciAqLworCisjZGVmaW5lIEZMQUdfTk9fU0VUSU5UCTB4MDAxMAkJLyogZGV2aWNlIGNhbid0IHNldF9pbnRlcmZhY2UoKSAqLworI2RlZmluZSBGTEFHX0VUSEVSCTB4MDAyMAkJLyogbWF5YmUgdXNlICJldGglZCIgbmFtZXMgKi8KKworI2RlZmluZSBGTEFHX0ZSQU1JTkdfQVggMHgwMDQwICAgICAgICAgIC8qIEFYODg3NzIvMTc4IHBhY2tldHMgKi8KKworCS8qIGluaXQgZGV2aWNlIC4uLiBjYW4gc2xlZXAsIG9yIGNhdXNlIHByb2JlKCkgZmFpbHVyZSAqLworCWludAkoKmJpbmQpKHN0cnVjdCB1c2JuZXQgKiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKik7CisKKwkvKiBjbGVhbnVwIGRldmljZSAuLi4gY2FuIHNsZWVwLCBidXQgY2FuJ3QgZmFpbCAqLworCXZvaWQJKCp1bmJpbmQpKHN0cnVjdCB1c2JuZXQgKiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKik7CisKKwkvKiByZXNldCBkZXZpY2UgLi4uIGNhbiBzbGVlcCAqLworCWludAkoKnJlc2V0KShzdHJ1Y3QgdXNibmV0ICopOworCisJLyogc2VlIGlmIHBlZXIgaXMgY29ubmVjdGVkIC4uLiBjYW4gc2xlZXAgKi8KKwlpbnQJKCpjaGVja19jb25uZWN0KShzdHJ1Y3QgdXNibmV0ICopOworCisJLyogZm9yIHN0YXR1cyBwb2xsaW5nICovCisJdm9pZAkoKnN0YXR1cykoc3RydWN0IHVzYm5ldCAqLCBzdHJ1Y3QgdXJiICopOworCisJLyogZml4dXAgcnggcGFja2V0IChzdHJpcCBmcmFtaW5nKSAqLworCWludAkoKnJ4X2ZpeHVwKShzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOworCisJLyogZml4dXAgdHggcGFja2V0IChhZGQgZnJhbWluZykgKi8KKwlzdHJ1Y3Qgc2tfYnVmZgkqKCp0eF9maXh1cCkoc3RydWN0IHVzYm5ldCAqZGV2LAorCQkJCXN0cnVjdCBza19idWZmICpza2IsIGludCBmbGFncyk7CisKKwkvLyBGSVhNRSAtLSBhbHNvIGFuIGludGVycnVwdCBtZWNoYW5pc20KKwkvLyB1c2VmdWwgZm9yIGF0IGxlYXN0IFBMMjMwMS8yMzAyIGFuZCBHTDYyMFVTQi1BCisJLy8gYW5kIENEQyB1c2UgdGhlbSB0byByZXBvcnQgJ2lzIGl0IGNvbm5lY3RlZCcgY2hhbmdlcworCisJLyogZm9yIG5ldyBkZXZpY2VzLCB1c2UgdGhlIGRlc2NyaXB0b3ItcmVhZGluZyBjb2RlIGluc3RlYWQgKi8KKwlpbnQJCWluOwkJLyogcnggZW5kcG9pbnQgKi8KKwlpbnQJCW91dDsJCS8qIHR4IGVuZHBvaW50ICovCisKKwl1bnNpZ25lZCBsb25nCWRhdGE7CQkvKiBNaXNjIGRyaXZlciBzcGVjaWZpYyBkYXRhICovCit9OworCisvLyB3ZSByZWNvcmQgdGhlIHN0YXRlIGZvciBlYWNoIG9mIG91ciBxdWV1ZWQgc2ticworZW51bSBza2Jfc3RhdGUgeworCWlsbGVnYWwgPSAwLAorCXR4X3N0YXJ0LCB0eF9kb25lLAorCXJ4X3N0YXJ0LCByeF9kb25lLCByeF9jbGVhbnVwCit9OworCitzdHJ1Y3Qgc2tiX2RhdGEgewkvLyBza2ItPmNiIGlzIG9uZSBvZiB0aGVzZQorCXN0cnVjdCB1cmIJCSp1cmI7CisJc3RydWN0IHVzYm5ldAkJKmRldjsKKwllbnVtIHNrYl9zdGF0ZQkJc3RhdGU7CisJc2l6ZV90CQkJbGVuZ3RoOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWUgW10gPSAidXNibmV0IjsKKworLyogdXNlIGV0aHRvb2wgdG8gY2hhbmdlIHRoZSBsZXZlbCBmb3IgYW55IGdpdmVuIGRldmljZSAqLworc3RhdGljIGludCBtc2dfbGV2ZWwgPSAtMTsKK21vZHVsZV9wYXJhbSAobXNnX2xldmVsLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyAobXNnX2xldmVsLCAiT3ZlcnJpZGUgZGVmYXVsdCBtZXNzYWdlIGxldmVsIik7CisKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIGRldmRiZyh1c2JuZXQsIGZtdCwgYXJnLi4uKSBcCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZtdCAiXG4iICwgKHVzYm5ldCktPm5ldC0+bmFtZSAsICMjIGFyZykKKyNlbHNlCisjZGVmaW5lIGRldmRiZyh1c2JuZXQsIGZtdCwgYXJnLi4uKSBkbyB7fSB3aGlsZSgwKQorI2VuZGlmCisKKyNkZWZpbmUgZGV2ZXJyKHVzYm5ldCwgZm10LCBhcmcuLi4pIFwKKwlwcmludGsoS0VSTl9FUlIgIiVzOiAiIGZtdCAiXG4iICwgKHVzYm5ldCktPm5ldC0+bmFtZSAsICMjIGFyZykKKyNkZWZpbmUgZGV2d2Fybih1c2JuZXQsIGZtdCwgYXJnLi4uKSBcCisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIgZm10ICJcbiIgLCAodXNibmV0KS0+bmV0LT5uYW1lICwgIyMgYXJnKQorCisjZGVmaW5lIGRldmluZm8odXNibmV0LCBmbXQsIGFyZy4uLikgXAorCXByaW50ayhLRVJOX0lORk8gIiVzOiAiIGZtdCAiXG4iICwgKHVzYm5ldCktPm5ldC0+bmFtZSAsICMjIGFyZyk7IFwKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgdXNibmV0X2dldF9kcnZpbmZvIChzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICopOworc3RhdGljIHUzMiB1c2JuZXRfZ2V0X2xpbmsgKHN0cnVjdCBuZXRfZGV2aWNlICopOworc3RhdGljIHUzMiB1c2JuZXRfZ2V0X21zZ2xldmVsIChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK3N0YXRpYyB2b2lkIHVzYm5ldF9zZXRfbXNnbGV2ZWwgKHN0cnVjdCBuZXRfZGV2aWNlICosIHUzMik7CisKKy8qIG1vc3RseSBmb3IgUERBIHN0eWxlIGRldmljZXMsIHdoaWNoIGFyZSBhbHdheXMgY29ubmVjdGVkIGlmIHByZXNlbnQgKi8KK3N0YXRpYyBpbnQgYWx3YXlzX2Nvbm5lY3RlZCAoc3RydWN0IHVzYm5ldCAqZGV2KQoreworCXJldHVybiAwOworfQorCisvKiBoYW5kbGVzIENEQyBFdGhlcm5ldCBhbmQgbWFueSBvdGhlciBuZXR3b3JrICJidWxrIGRhdGEiIGludGVyZmFjZXMgKi8KK3N0YXRpYyBpbnQKK2dldF9lbmRwb2ludHMgKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJaW50CQkJCXRtcDsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlCSphbHQgPSBOVUxMOworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludAkqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQJKnN0YXR1cyA9IE5VTEw7CisKKwlmb3IgKHRtcCA9IDA7IHRtcCA8IGludGYtPm51bV9hbHRzZXR0aW5nOyB0bXArKykgeworCQl1bnNpZ25lZAllcDsKKworCQlpbiA9IG91dCA9IHN0YXR1cyA9IE5VTEw7CisJCWFsdCA9IGludGYtPmFsdHNldHRpbmcgKyB0bXA7CisKKwkJLyogdGFrZSB0aGUgZmlyc3QgYWx0c2V0dGluZyB3aXRoIGluLWJ1bGsgKyBvdXQtYnVsazsKKwkJICogcmVtZW1iZXIgYW55IHN0YXR1cyBlbmRwb2ludCwganVzdCBpbiBjYXNlOworCQkgKiBpZ25vcmUgb3RoZXIgZW5kcG9pbnRzIGFuZCBhbHRzZXR0dGluZ3MuCisJCSAqLworCQlmb3IgKGVwID0gMDsgZXAgPCBhbHQtPmRlc2MuYk51bUVuZHBvaW50czsgZXArKykgeworCQkJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50CSplOworCQkJaW50CQkJCWludHIgPSAwOworCisJCQllID0gYWx0LT5lbmRwb2ludCArIGVwOworCQkJc3dpdGNoIChlLT5kZXNjLmJtQXR0cmlidXRlcykgeworCQkJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ6CisJCQkJaWYgKCEoZS0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikpCisJCQkJCWNvbnRpbnVlOworCQkJCWludHIgPSAxOworCQkJCS8qIEZBTExUSFJPVUdIICovCisJCQljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEs6CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGUtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pIHsKKwkJCQlpZiAoIWludHIgJiYgIWluKQorCQkJCQlpbiA9IGU7CisJCQkJZWxzZSBpZiAoaW50ciAmJiAhc3RhdHVzKQorCQkJCQlzdGF0dXMgPSBlOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoIW91dCkKKwkJCQkJb3V0ID0gZTsKKwkJCX0KKwkJfQorCQlpZiAoaW4gJiYgb3V0KQorCQkJYnJlYWs7CisJfQorCWlmICghYWx0IHx8ICFpbiB8fCAhb3V0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhbHQtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmcgIT0gMAorCQkJfHwgIShkZXYtPmRyaXZlcl9pbmZvLT5mbGFncyAmIEZMQUdfTk9fU0VUSU5UKSkgeworCQl0bXAgPSB1c2Jfc2V0X2ludGVyZmFjZSAoZGV2LT51ZGV2LCBhbHQtPmRlc2MuYkludGVyZmFjZU51bWJlciwKKwkJCQlhbHQtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmcpOworCQlpZiAodG1wIDwgMCkKKwkJCXJldHVybiB0bXA7CisJfQorCQorCWRldi0+aW4gPSB1c2JfcmN2YnVsa3BpcGUgKGRldi0+dWRldiwKKwkJCWluLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCWRldi0+b3V0ID0gdXNiX3NuZGJ1bGtwaXBlIChkZXYtPnVkZXYsCisJCQlvdXQtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJZGV2LT5zdGF0dXMgPSBzdGF0dXM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGludHJfY29tcGxldGUgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCitzdGF0aWMgaW50IGluaXRfc3RhdHVzIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCWNoYXIJCSpidWYgPSBOVUxMOworCXVuc2lnbmVkCXBpcGUgPSAwOworCXVuc2lnbmVkCW1heHA7CisJdW5zaWduZWQJcGVyaW9kOworCisJaWYgKCFkZXYtPmRyaXZlcl9pbmZvLT5zdGF0dXMpCisJCXJldHVybiAwOworCisJcGlwZSA9IHVzYl9yY3ZpbnRwaXBlIChkZXYtPnVkZXYsCisJCQlkZXYtPnN0YXR1cy0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzCisJCQkJJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCW1heHAgPSB1c2JfbWF4cGFja2V0IChkZXYtPnVkZXYsIHBpcGUsIDApOworCisJLyogYXZvaWQgMSBtc2VjIGNoYXR0ZXI6ICBtaW4gOCBtc2VjIHBvbGwgcmF0ZSAqLworCXBlcmlvZCA9IG1heCAoKGludCkgZGV2LT5zdGF0dXMtPmRlc2MuYkludGVydmFsLAorCQkoZGV2LT51ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgPyA3IDogMyk7CisKKwlidWYgPSBrbWFsbG9jIChtYXhwLCBTTEFCX0tFUk5FTCk7CisJaWYgKGJ1ZikgeworCQlkZXYtPmludGVycnVwdCA9IHVzYl9hbGxvY191cmIgKDAsIFNMQUJfS0VSTkVMKTsKKwkJaWYgKCFkZXYtPmludGVycnVwdCkgeworCQkJa2ZyZWUgKGJ1Zik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfSBlbHNlIHsKKwkJCXVzYl9maWxsX2ludF91cmIoZGV2LT5pbnRlcnJ1cHQsIGRldi0+dWRldiwgcGlwZSwKKwkJCQlidWYsIG1heHAsIGludHJfY29tcGxldGUsIGRldiwgcGVyaW9kKTsKKwkJCWRldl9kYmcoJmludGYtPmRldiwKKwkJCQkic3RhdHVzIGVwJWRpbiwgJWQgYnl0ZXMgcGVyaW9kICVkXG4iLAorCQkJCXVzYl9waXBlZW5kcG9pbnQocGlwZSksIG1heHAsIHBlcmlvZCk7CisJCX0KKwl9CisJcmV0dXJuICAwOworfQorCitzdGF0aWMgdm9pZCBza2JfcmV0dXJuIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50CXN0YXR1czsKKworCXNrYi0+ZGV2ID0gZGV2LT5uZXQ7CisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zIChza2IsIGRldi0+bmV0KTsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCisJaWYgKG5ldGlmX21zZ19yeF9zdGF0dXMgKGRldikpCisJCWRldmRiZyAoZGV2LCAiPCByeCwgbGVuICVkLCB0eXBlIDB4JXgiLAorCQkJc2tiLT5sZW4gKyBzaXplb2YgKHN0cnVjdCBldGhoZHIpLCBza2ItPnByb3RvY29sKTsKKwltZW1zZXQgKHNrYi0+Y2IsIDAsIHNpemVvZiAoc3RydWN0IHNrYl9kYXRhKSk7CisJc3RhdHVzID0gbmV0aWZfcnggKHNrYik7CisJaWYgKHN0YXR1cyAhPSBORVRfUlhfU1VDQ0VTUyAmJiBuZXRpZl9tc2dfcnhfZXJyIChkZXYpKQorCQlkZXZkYmcgKGRldiwgIm5ldGlmX3J4IHN0YXR1cyAlZCIsIHN0YXR1cyk7Cit9CisKKwwKKyNpZmRlZglDT05GSUdfVVNCX0FMSV9NNTYzMgorI2RlZmluZQlIQVZFX0hBUkRXQVJFCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEFMaSBNNTYzMiBkcml2ZXIgLi4uIGRvZXMgaGlnaCBzcGVlZAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8JYWxpX201NjMyX2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0JIkFMaSBNNTYzMiIsCit9OworCisKKyNlbmRpZgorCisMCisjaWZkZWYJQ09ORklHX1VTQl9BTjI3MjAKKyNkZWZpbmUJSEFWRV9IQVJEV0FSRQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBBbmNob3JDaGlwcyAyNzIwIGRyaXZlciAuLi4gaHR0cDovL3d3dy5jeXByZXNzLmNvbQorICoKKyAqIFRoaXMgZG9lc24ndCBzZWVtIHRvIGhhdmUgYSB3YXkgdG8gZGV0ZWN0IHdoZXRoZXIgdGhlIHBlZXIgaXMKKyAqIGNvbm5lY3RlZCwgb3IgbmVlZCBhbnkgcmVzZXQgaGFuZHNoYWtpbmcuICBJdCdzIGdvdCBwcmV0dHkgYmlnCisgKiBpbnRlcm5hbCBidWZmZXJzIChoYW5kbGVzIG1vc3Qgb2YgYSBmcmFtZSdzIHdvcnRoIG9mIGRhdGEpLgorICogQ2hpcCBkYXRhIHNoZWV0cyBkb24ndCBkZXNjcmliZSBhbnkgdmVuZG9yIGNvbnRyb2wgbWVzc2FnZXMuCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbwlhbjI3MjBfaW5mbyA9IHsKKwkuZGVzY3JpcHRpb24gPQkiQW5jaG9yQ2hpcHMvQ3lwcmVzcyAyNzIwIiwKKwkvLyBubyByZXNldCBhdmFpbGFibGUhCisJLy8gbm8gY2hlY2tfY29ubmVjdCBhdmFpbGFibGUhCisKKwkuaW4gPSAyLCAub3V0ID0gMiwJCS8vIGRpcmVjdGlvbiBkaXN0aW5ndWlzaGVzIHRoZXNlCit9OworCisjZW5kaWYJLyogQ09ORklHX1VTQl9BTjI3MjAgKi8KKworDAorI2lmZGVmIENPTkZJR19VU0JfQVg4ODE3WAorLyogQVNJWCBBWDg4MTdYIGJhc2VkIFVTQiAyLjAgRXRoZXJuZXQgRGV2aWNlcyAqLworCisjZGVmaW5lIEhBVkVfSEFSRFdBUkUKKyNkZWZpbmUgTkVFRF9NSUkKKworI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisKKyNkZWZpbmUgQVhfQ01EX1NFVF9TV19NSUkJCTB4MDYKKyNkZWZpbmUgQVhfQ01EX1JFQURfTUlJX1JFRwkJMHgwNworI2RlZmluZSBBWF9DTURfV1JJVEVfTUlJX1JFRwkJMHgwOAorI2RlZmluZSBBWF9DTURfU0VUX0hXX01JSQkJMHgwYQorI2RlZmluZSBBWF9DTURfUkVBRF9FRVBST00JCTB4MGIKKyNkZWZpbmUgQVhfQ01EX1dSSVRFX0VFUFJPTQkJMHgwYworI2RlZmluZSBBWF9DTURfV1JJVEVfRU5BQkxFCQkweDBkCisjZGVmaW5lIEFYX0NNRF9XUklURV9ESVNBQkxFCQkweDBlCisjZGVmaW5lIEFYX0NNRF9XUklURV9SWF9DVEwJCTB4MTAKKyNkZWZpbmUgQVhfQ01EX1JFQURfSVBHMDEyCQkweDExCisjZGVmaW5lIEFYX0NNRF9XUklURV9JUEcwCQkweDEyCisjZGVmaW5lIEFYX0NNRF9XUklURV9JUEcxCQkweDEzCisjZGVmaW5lIEFYX0NNRF9XUklURV9JUEcyCQkweDE0CisjZGVmaW5lIEFYX0NNRF9XUklURV9NVUxUSV9GSUxURVIJMHgxNgorI2RlZmluZSBBWF9DTURfUkVBRF9OT0RFX0lECQkweDE3CisjZGVmaW5lIEFYX0NNRF9SRUFEX1BIWV9JRAkJMHgxOQorI2RlZmluZSBBWF9DTURfV1JJVEVfTUVESVVNX01PREUJMHgxYgorI2RlZmluZSBBWF9DTURfUkVBRF9NT05JVE9SX01PREUJMHgxYworI2RlZmluZSBBWF9DTURfV1JJVEVfTU9OSVRPUl9NT0RFCTB4MWQKKyNkZWZpbmUgQVhfQ01EX1dSSVRFX0dQSU9TCQkweDFmCisjZGVmaW5lIEFYX0NNRF9TV19SRVNFVAkJCTB4MjAKKyNkZWZpbmUgQVhfQ01EX1NXX1BIWV9TVEFUVVMJCTB4MjEKKyNkZWZpbmUgQVhfQ01EX1NXX1BIWV9TRUxFQ1QJCTB4MjIKKyNkZWZpbmUgQVg4ODc3Ml9DTURfUkVBRF9OT0RFX0lECTB4MTMKKworI2RlZmluZSBBWF9NT05JVE9SX01PREUJCQkweDAxCisjZGVmaW5lIEFYX01PTklUT1JfTElOSwkJCTB4MDIKKyNkZWZpbmUgQVhfTU9OSVRPUl9NQUdJQwkJMHgwNAorI2RlZmluZSBBWF9NT05JVE9SX0hTRlMJCQkweDEwCisKKyNkZWZpbmUgQVhfTUNBU1RfRklMVEVSX1NJWkUJCTgKKyNkZWZpbmUgQVhfTUFYX01DQVNUCQkJNjQKKworI2RlZmluZSBBWF9JTlRFUlJVUFRfQlVGU0laRQkJOAorCisjZGVmaW5lIEFYX0VFUFJPTV9MRU4JCQkweDQwCisKKyNkZWZpbmUgQVhfU1dSRVNFVF9DTEVBUgkJMHgwMAorI2RlZmluZSBBWF9TV1JFU0VUX1JSCQkJMHgwMQorI2RlZmluZSBBWF9TV1JFU0VUX1JUCQkJMHgwMgorI2RlZmluZSBBWF9TV1JFU0VUX1BSVEUJCQkweDA0CisjZGVmaW5lIEFYX1NXUkVTRVRfUFJMCQkJMHgwOAorI2RlZmluZSBBWF9TV1JFU0VUX0JaCQkJMHgxMAorI2RlZmluZSBBWF9TV1JFU0VUX0lQUkwJCQkweDIwCisjZGVmaW5lIEFYX1NXUkVTRVRfSVBQRAkJCTB4NDAKKworI2RlZmluZSBBWDg4NzcyX0lQRzBfREVGQVVMVAkJMHgxNQorI2RlZmluZSBBWDg4NzcyX0lQRzFfREVGQVVMVAkJMHgwYworI2RlZmluZSBBWDg4NzcyX0lQRzJfREVGQVVMVAkJMHgxMgorCisjZGVmaW5lIEFYX0VFUFJPTV9NQUdJQwkJCTB4ZGVhZGJlZWYKKworLyogVGhpcyBzdHJ1Y3R1cmUgY2Fubm90IGV4Y2VlZCBzaXplb2YodW5zaWduZWQgbG9uZyBbNV0pIEFLQSAyMCBieXRlcyAqLworc3RydWN0IGF4ODgxN3hfZGF0YSB7CisJdTggbXVsdGlfZmlsdGVyW0FYX01DQVNUX0ZJTFRFUl9TSVpFXTsKKwlzdHJ1Y3QgdXJiICppbnRfdXJiOworCXU4ICppbnRfYnVmOworfTsKKworc3RhdGljIGludCBheDg4MTd4X3JlYWRfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwKKwkJCSAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKAorCQlkZXYtPnVkZXYsCisJCXVzYl9yY3ZjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQljbWQsCisJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQl2YWx1ZSwKKwkJaW5kZXgsCisJCWRhdGEsCisJCXNpemUsCisJCUNPTlRST0xfVElNRU9VVF9NUyk7Cit9CisKK3N0YXRpYyBpbnQgYXg4ODE3eF93cml0ZV9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAorCQkJICAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKAorCQlkZXYtPnVkZXYsCisJCXVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQljbWQsCisJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJdmFsdWUsCisJCWluZGV4LAorCQlkYXRhLAorCQlzaXplLAorCQlDT05UUk9MX1RJTUVPVVRfTVMpOworfQorCitzdGF0aWMgdm9pZCBheDg4MTd4X2FzeW5jX2NtZF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnJlcSA9IChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopdXJiLT5jb250ZXh0OworCisJaWYgKHVyYi0+c3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fREVCVUcgImF4ODgxN3hfYXN5bmNfY21kX2NhbGxiYWNrKCkgZmFpbGVkIHdpdGggJWQiLAorCQkJdXJiLT5zdGF0dXMpOworCisJa2ZyZWUocmVxKTsKKwl1c2JfZnJlZV91cmIodXJiKTsKK30KKworc3RhdGljIHZvaWQgYXg4ODE3eF9pbnRlcnJ1cHRfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSAoc3RydWN0IHVzYm5ldCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgYXg4ODE3eF9kYXRhICpkYXRhID0gKHN0cnVjdCBheDg4MTd4X2RhdGEgKikmZGV2LT5kYXRhOworCWludCBsaW5rOworCisJaWYgKHVyYi0+c3RhdHVzIDwgMCkgeworCQlkZXZkYmcoZGV2LCJheDg4MTd4X2ludGVycnVwdF9jb21wbGV0ZSgpIGZhaWxlZCB3aXRoICVkIiwKKwkJCXVyYi0+c3RhdHVzKTsKKwl9IGVsc2UgeworCQlsaW5rID0gZGF0YS0+aW50X2J1ZlsyXSAmIDB4MDE7CisJCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldi0+bmV0KSAhPSBsaW5rKSB7CisJCQlpZiAobGluaykKKwkJCQluZXRpZl9jYXJyaWVyX29uKGRldi0+bmV0KTsKKwkJCWVsc2UKKwkJCQluZXRpZl9jYXJyaWVyX29mZihkZXYtPm5ldCk7CisJCQlkZXZkYmcoZGV2LCAiYXg4ODE3eCAtIExpbmsgU3RhdHVzIGlzOiAlZCIsIGxpbmspOworCQl9CisJCXVzYl9zdWJtaXRfdXJiKGRhdGEtPmludF91cmIsIEdGUF9BVE9NSUMpOworCX0KK30KKworc3RhdGljIHZvaWQgYXg4ODE3eF93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAorCQkJCSAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXE7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwlpZiAoKHVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQykpID09IE5VTEwpIHsKKwkJZGV2ZGJnKGRldiwgIkVycm9yIGFsbG9jYXRpbmcgVVJCIGluIHdyaXRlX2NtZF9hc3luYyEiKTsKKwkJcmV0dXJuOworCX0KKworCWlmICgocmVxID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksIEdGUF9BVE9NSUMpKSA9PSBOVUxMKSB7CisJCWRldmVycihkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBjb250cm9sIHJlcXVlc3QiKTsKKwkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCXJldHVybjsKKwl9CisKKwlyZXEtPmJSZXF1ZXN0VHlwZSA9IFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRTsKKwlyZXEtPmJSZXF1ZXN0ID0gY21kOworCXJlcS0+d1ZhbHVlID0gY3B1X3RvX2xlMTYodmFsdWUpOworCXJlcS0+d0luZGV4ID0gY3B1X3RvX2xlMTYoaW5kZXgpOyAKKwlyZXEtPndMZW5ndGggPSBjcHVfdG9fbGUxNihzaXplKTsKKworCXVzYl9maWxsX2NvbnRyb2xfdXJiKHVyYiwgZGV2LT51ZGV2LAorCQkJICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKKwkJCSAgICAgKHZvaWQgKilyZXEsIGRhdGEsIHNpemUsCisJCQkgICAgIGF4ODgxN3hfYXN5bmNfY21kX2NhbGxiYWNrLCByZXEpOworCisJaWYoKHN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpIDwgMCkgeworCQlkZXZlcnIoZGV2LCAiRXJyb3Igc3VibWl0dGluZyB0aGUgY29udHJvbCBtZXNzYWdlOiBzdGF0dXM9JWQiLCBzdGF0dXMpOworCQlrZnJlZShyZXEpOworCQl1c2JfZnJlZV91cmIodXJiKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGF4ODgxN3hfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisJc3RydWN0IGF4ODgxN3hfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXg4ODE3eF9kYXRhICopJmRldi0+ZGF0YTsKKwl1OCByeF9jdGwgPSAweDhjOworCisJaWYgKG5ldC0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCQlyeF9jdGwgfD0gMHgwMTsKKwl9IGVsc2UgaWYgKG5ldC0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkKKwkJICAgfHwgbmV0LT5tY19jb3VudCA+IEFYX01BWF9NQ0FTVCkgeworCQlyeF9jdGwgfD0gMHgwMjsKKwl9IGVsc2UgaWYgKG5ldC0+bWNfY291bnQgPT0gMCkgeworCQkvKiBqdXN0IGJyb2FkY2FzdCBhbmQgZGlyZWN0ZWQgKi8KKwl9IGVsc2UgeworCQkvKiBXZSB1c2UgdGhlIDIwIGJ5dGUgZGV2LT5kYXRhCisJCSAqIGZvciBvdXIgOCBieXRlIGZpbHRlciBidWZmZXIKKwkJICogdG8gYXZvaWQgYWxsb2NhdGluZyBtZW1vcnkgdGhhdAorCQkgKiBpcyB0cmlja3kgdG8gZnJlZSBsYXRlciAqLworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3QgPSBuZXQtPm1jX2xpc3Q7CisJCXUzMiBjcmNfYml0czsKKwkJaW50IGk7CisKKwkJbWVtc2V0KGRhdGEtPm11bHRpX2ZpbHRlciwgMCwgQVhfTUNBU1RfRklMVEVSX1NJWkUpOworCisJCS8qIEJ1aWxkIHRoZSBtdWx0aWNhc3QgaGFzaCBmaWx0ZXIuICovCisJCWZvciAoaSA9IDA7IGkgPCBuZXQtPm1jX2NvdW50OyBpKyspIHsKKwkJCWNyY19iaXRzID0KKwkJCSAgICBldGhlcl9jcmMoRVRIX0FMRU4sCisJCQkJICAgICAgbWNfbGlzdC0+ZG1pX2FkZHIpID4+IDI2OworCQkJZGF0YS0+bXVsdGlfZmlsdGVyW2NyY19iaXRzID4+IDNdIHw9CisJCQkgICAgMSA8PCAoY3JjX2JpdHMgJiA3KTsKKwkJCW1jX2xpc3QgPSBtY19saXN0LT5uZXh0OworCQl9CisKKwkJYXg4ODE3eF93cml0ZV9jbWRfYXN5bmMoZGV2LCBBWF9DTURfV1JJVEVfTVVMVElfRklMVEVSLCAwLCAwLAorCQkJCSAgIEFYX01DQVNUX0ZJTFRFUl9TSVpFLCBkYXRhLT5tdWx0aV9maWx0ZXIpOworCisJCXJ4X2N0bCB8PSAweDEwOworCX0KKworCWF4ODgxN3hfd3JpdGVfY21kX2FzeW5jKGRldiwgQVhfQ01EX1dSSVRFX1JYX0NUTCwgcnhfY3RsLCAwLCAwLCBOVUxMKTsKK30KKworc3RhdGljIGludCBheDg4MTd4X21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKQoreworCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdTE2IHJlczsKKwl1OCBidWZbMV07CisKKwlheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TRVRfU1dfTUlJLCAwLCAwLCAwLCAmYnVmKTsKKwlheDg4MTd4X3JlYWRfY21kKGRldiwgQVhfQ01EX1JFQURfTUlJX1JFRywgcGh5X2lkLCAoX191MTYpbG9jLCAyLCAodTE2ICopJnJlcyk7CisJYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU0VUX0hXX01JSSwgMCwgMCwgMCwgJmJ1Zik7CisKKwlyZXR1cm4gcmVzICYgMHhmZmZmOworfQorCitzdGF0aWMgdm9pZCBheDg4MTd4X21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYywgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXUxNiByZXMgPSB2YWw7CisJdTggYnVmWzFdOworCisJYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU0VUX1NXX01JSSwgMCwgMCwgMCwgJmJ1Zik7CisJYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfTUlJX1JFRywgcGh5X2lkLCAoX191MTYpbG9jLCAyLCAodTE2ICopJnJlcyk7CisJYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU0VUX0hXX01JSSwgMCwgMCwgMCwgJmJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIGF4ODgxN3hfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKQoreworCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisJdTggb3B0OworCisJaWYgKGF4ODgxN3hfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9NT05JVE9SX01PREUsIDAsIDAsIDEsICZvcHQpIDwgMCkgeworCQl3b2xpbmZvLT5zdXBwb3J0ZWQgPSAwOworCQl3b2xpbmZvLT53b2xvcHRzID0gMDsKKwkJcmV0dXJuOworCX0KKwl3b2xpbmZvLT5zdXBwb3J0ZWQgPSBXQUtFX1BIWSB8IFdBS0VfTUFHSUM7CisJd29saW5mby0+d29sb3B0cyA9IDA7CisJaWYgKG9wdCAmIEFYX01PTklUT1JfTU9ERSkgeworCQlpZiAob3B0ICYgQVhfTU9OSVRPUl9MSU5LKQorCQkJd29saW5mby0+d29sb3B0cyB8PSBXQUtFX1BIWTsKKwkJaWYgKG9wdCAmIEFYX01PTklUT1JfTUFHSUMpCisJCQl3b2xpbmZvLT53b2xvcHRzIHw9IFdBS0VfTUFHSUM7CisJfQorfQorCitzdGF0aWMgaW50IGF4ODgxN3hfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKQoreworCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisJdTggb3B0ID0gMDsKKwl1OCBidWZbMV07CisKKwlpZiAod29saW5mby0+d29sb3B0cyAmIFdBS0VfUEhZKQorCQlvcHQgfD0gQVhfTU9OSVRPUl9MSU5LOworCWlmICh3b2xpbmZvLT53b2xvcHRzICYgV0FLRV9NQUdJQykKKwkJb3B0IHw9IEFYX01PTklUT1JfTUFHSUM7CisJaWYgKG9wdCAhPSAwKQorCQlvcHQgfD0gQVhfTU9OSVRPUl9NT0RFOworCisJaWYgKGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX01PTklUT1JfTU9ERSwKKwkJCSAgICAgIG9wdCwgMCwgMCwgJmJ1ZikgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF4ODgxN3hfZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlyZXR1cm4gQVhfRUVQUk9NX0xFTjsKK30KKworc3RhdGljIGludCBheDg4MTd4X2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwKKwkJCSAgICAgIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCXUxNiAqZWJ1ZiA9ICh1MTYgKilkYXRhOworCWludCBpOworCisJLyogQ3J1ZGUgaGFjayB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCBvdmVyd3JpdGUgbWVtb3J5CisJICogaWYgYW4gb2RkIGxlbmd0aCBpcyBzdXBwbGllZAorCSAqLworCWlmIChlZXByb20tPmxlbiAlIDIpCisJCXJldHVybiAtRUlOVkFMOworCisJZWVwcm9tLT5tYWdpYyA9IEFYX0VFUFJPTV9NQUdJQzsKKworCS8qIGF4ODgxN3ggcmV0dXJucyAyIGJ5dGVzIGZyb20gZWVwcm9tIG9uIHJlYWQgKi8KKwlmb3IgKGk9MDsgaSA8IGVlcHJvbS0+bGVuIC8gMjsgaSsrKSB7CisJCWlmIChheDg4MTd4X3JlYWRfY21kKGRldiwgQVhfQ01EX1JFQURfRUVQUk9NLCAKKwkJCWVlcHJvbS0+b2Zmc2V0ICsgaSwgMCwgMiwgJmVidWZbaV0pIDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXg4ODE3eF9nZXRfZHJ2aW5mbyAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwKKwkJCQkgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKK3sKKwkvKiBJbmhlcml0IHN0YW5kYXJkIGRldmljZSBpbmZvICovCisJdXNibmV0X2dldF9kcnZpbmZvKG5ldCwgaW5mbyk7CisJaW5mby0+ZWVkdW1wX2xlbiA9IDB4M2U7Cit9CisKK3N0YXRpYyBpbnQgYXg4ODE3eF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCXJldHVybiBtaWlfZXRodG9vbF9nc2V0KCZkZXYtPm1paSxjbWQpOworfQorCitzdGF0aWMgaW50IGF4ODgxN3hfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQoreworCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisKKwlyZXR1cm4gbWlpX2V0aHRvb2xfc3NldCgmZGV2LT5taWksY21kKTsKK30KKworLyogV2UgbmVlZCB0byBvdmVycmlkZSBzb21lIGV0aHRvb2xfb3BzIHNvIHdlIHJlcXVpcmUgb3VyCisgICBvd24gc3RydWN0dXJlIHNvIHdlIGRvbid0IGludGVyZmVyZSB3aXRoIG90aGVyIHVzYm5ldAorICAgZGV2aWNlcyB0aGF0IG1heSBiZSBjb25uZWN0ZWQgYXQgdGhlIHNhbWUgdGltZS4gKi8KK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYXg4ODE3eF9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X2RydmluZm8JCT0gYXg4ODE3eF9nZXRfZHJ2aW5mbywKKwkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKKwkuZ2V0X21zZ2xldmVsCQk9IHVzYm5ldF9nZXRfbXNnbGV2ZWwsCisJLnNldF9tc2dsZXZlbAkJPSB1c2JuZXRfc2V0X21zZ2xldmVsLAorCS5nZXRfd29sCQk9IGF4ODgxN3hfZ2V0X3dvbCwKKwkuc2V0X3dvbAkJPSBheDg4MTd4X3NldF93b2wsCisJLmdldF9lZXByb21fbGVuCQk9IGF4ODgxN3hfZ2V0X2VlcHJvbV9sZW4sCisJLmdldF9lZXByb20JCT0gYXg4ODE3eF9nZXRfZWVwcm9tLAorCS5nZXRfc2V0dGluZ3MJCT0gYXg4ODE3eF9nZXRfc2V0dGluZ3MsCisJLnNldF9zZXR0aW5ncwkJPSBheDg4MTd4X3NldF9zZXR0aW5ncywKK307CisKK3N0YXRpYyBpbnQgYXg4ODE3eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJaW50IHJldCA9IDA7CisJdm9pZCAqYnVmOworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZ3Bpb19iaXRzID0gZGV2LT5kcml2ZXJfaW5mby0+ZGF0YTsKKwlzdHJ1Y3QgYXg4ODE3eF9kYXRhICpkYXRhID0gKHN0cnVjdCBheDg4MTd4X2RhdGEgKilkZXYtPmRhdGE7CisKKwlnZXRfZW5kcG9pbnRzKGRldixpbnRmKTsKKworCWlmICgoZGF0YS0+aW50X3VyYiA9IHVzYl9hbGxvY191cmIgKDAsIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJCWRiZyAoIiVzOiBjYW5ub3QgYWxsb2NhdGUgaW50ZXJydXB0IFVSQiIsCisJCQlkZXYtPm5ldC0+bmFtZSk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0MTsKKwl9CisJCisJaWYgKChkYXRhLT5pbnRfYnVmID0ga21hbGxvYyhBWF9JTlRFUlJVUFRfQlVGU0laRSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwkJZGJnICgiJXM6IGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGludGVycnVwdCBidWZmZXIiLAorCQkJZGV2LT5uZXQtPm5hbWUpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDE7CisJfQorCW1lbXNldChkYXRhLT5pbnRfYnVmLCAwLCBBWF9JTlRFUlJVUFRfQlVGU0laRSk7CisKKwl1c2JfZmlsbF9pbnRfdXJiIChkYXRhLT5pbnRfdXJiLCBkZXYtPnVkZXYsCisJCXVzYl9yY3ZpbnRwaXBlIChkZXYtPnVkZXYsIDEpLAorCQlkYXRhLT5pbnRfYnVmLCBBWF9JTlRFUlJVUFRfQlVGU0laRSwKKwkJYXg4ODE3eF9pbnRlcnJ1cHRfY29tcGxldGUsIGRldiwKKwkJZGV2LT51ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCA/IDggOiAxMDApOworCisJYnVmID0ga21hbGxvYyhFVEhfQUxFTiwgR0ZQX0tFUk5FTCk7CisJaWYoIWJ1ZikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDI7CisJfQorCisJLyogVG9nZ2xlIHRoZSBHUElPcyBpbiBhIG1hbnVmYWN0dXJlci9tb2RlbCBzcGVjaWZpYyB3YXkgKi8KKwlmb3IgKGkgPSAyOyBpID49IDA7IGktLSkgeworCQlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX0dQSU9TLAorCQkJCQkoZ3Bpb19iaXRzID4+IChpICogOCkpICYgMHhmZiwgMCwgMCwKKwkJCQkJYnVmKSkgPCAwKQorCQkJZ290byBvdXQzOworCQltc2xlZXAoNSk7CisJfQorCisJaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9SWF9DVEwsIDB4ODAsIDAsIDAsIGJ1ZikpIDwgMCkgeworCQlkYmcoInNlbmQgQVhfQ01EX1dSSVRFX1JYX0NUTCBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQzOworCX0KKworCS8qIEdldCB0aGUgTUFDIGFkZHJlc3MgKi8KKwltZW1zZXQoYnVmLCAwLCBFVEhfQUxFTik7CisJaWYgKChyZXQgPSBheDg4MTd4X3JlYWRfY21kKGRldiwgQVhfQ01EX1JFQURfTk9ERV9JRCwgMCwgMCwgNiwgYnVmKSkgPCAwKSB7CisJCWRiZygicmVhZCBBWF9DTURfUkVBRF9OT0RFX0lEIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDM7CisJfQorCW1lbWNweShkZXYtPm5ldC0+ZGV2X2FkZHIsIGJ1ZiwgRVRIX0FMRU4pOworCisJLyogR2V0IHRoZSBQSFkgaWQgKi8KKwlpZiAoKHJldCA9IGF4ODgxN3hfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9QSFlfSUQsIDAsIDAsIDIsIGJ1ZikpIDwgMCkgeworCQlkYmcoImVycm9yIG9uIHJlYWQgQVhfQ01EX1JFQURfUEhZX0lEOiAlMDJ4IiwgcmV0KTsKKwkJZ290byBvdXQzOworCX0gZWxzZSBpZiAocmV0IDwgMikgeworCQkvKiB0aGlzIHNob3VsZCBhbHdheXMgcmV0dXJuIDIgYnl0ZXMgKi8KKwkJZGJnKCJBWF9DTURfUkVBRF9QSFlfSUQgcmV0dXJuZWQgbGVzcyB0aGFuIDIgYnl0ZXM6IHJldD0lMDJ4IiwgcmV0KTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXQzOworCX0KKworCS8qIEluaXRpYWxpemUgTUlJIHN0cnVjdHVyZSAqLworCWRldi0+bWlpLmRldiA9IGRldi0+bmV0OworCWRldi0+bWlpLm1kaW9fcmVhZCA9IGF4ODgxN3hfbWRpb19yZWFkOworCWRldi0+bWlpLm1kaW9fd3JpdGUgPSBheDg4MTd4X21kaW9fd3JpdGU7CisJZGV2LT5taWkucGh5X2lkX21hc2sgPSAweDNmOworCWRldi0+bWlpLnJlZ19udW1fbWFzayA9IDB4MWY7CisJZGV2LT5taWkucGh5X2lkID0gKigodTggKilidWYgKyAxKTsKKworCWRldi0+bmV0LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBheDg4MTd4X3NldF9tdWx0aWNhc3Q7CisJZGV2LT5uZXQtPmV0aHRvb2xfb3BzID0gJmF4ODgxN3hfZXRodG9vbF9vcHM7CisKKwlheDg4MTd4X21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsCisJCQljcHVfdG9fbGUxNihCTUNSX1JFU0VUKSk7CisJYXg4ODE3eF9tZGlvX3dyaXRlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UsCisJCQljcHVfdG9fbGUxNihBRFZFUlRJU0VfQUxMIHwgQURWRVJUSVNFX0NTTUEgfCAweDA0MDApKTsKKwltaWlfbndheV9yZXN0YXJ0KCZkZXYtPm1paSk7CisKKwlpZigocmV0ID0gdXNiX3N1Ym1pdF91cmIoZGF0YS0+aW50X3VyYiwgR0ZQX0tFUk5FTCkpIDwgMCkgeworCQlkYmcoIkZhaWxlZCB0byBzdWJtaXQgaW50ZXJydXB0IFVSQjogJTAyeCIsIHJldCk7CisJCWdvdG8gb3V0MjsKKwl9CisKKwlyZXR1cm4gMDsKK291dDM6CisJa2ZyZWUoYnVmKTsKK291dDI6CisJa2ZyZWUoZGF0YS0+aW50X2J1Zik7CitvdXQxOgorCXVzYl9mcmVlX3VyYihkYXRhLT5pbnRfdXJiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBheDg4MTd4X3VuYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBheDg4MTd4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGF4ODgxN3hfZGF0YSAqKWRldi0+ZGF0YTsKKworCXVzYl9raWxsX3VyYihkYXRhLT5pbnRfdXJiKTsKKwl1c2JfZnJlZV91cmIoZGF0YS0+aW50X3VyYik7CisJa2ZyZWUoZGF0YS0+aW50X2J1Zik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYXg4ODc3Ml9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X2RydmluZm8JCT0gYXg4ODE3eF9nZXRfZHJ2aW5mbywKKwkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKKwkuZ2V0X21zZ2xldmVsCQk9IHVzYm5ldF9nZXRfbXNnbGV2ZWwsCisJLnNldF9tc2dsZXZlbAkJPSB1c2JuZXRfc2V0X21zZ2xldmVsLAorCS5nZXRfd29sCQk9IGF4ODgxN3hfZ2V0X3dvbCwKKwkuc2V0X3dvbAkJPSBheDg4MTd4X3NldF93b2wsCisJLmdldF9lZXByb21fbGVuCQk9IGF4ODgxN3hfZ2V0X2VlcHJvbV9sZW4sCisJLmdldF9lZXByb20JCT0gYXg4ODE3eF9nZXRfZWVwcm9tLAorCS5nZXRfc2V0dGluZ3MJCT0gYXg4ODE3eF9nZXRfc2V0dGluZ3MsCisJLnNldF9zZXR0aW5ncwkJPSBheDg4MTd4X3NldF9zZXR0aW5ncywKK307CisKK3N0YXRpYyBpbnQgYXg4ODc3Ml9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJaW50IHJldDsKKwl2b2lkICpidWY7CisJc3RydWN0IGF4ODgxN3hfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXg4ODE3eF9kYXRhICopZGV2LT5kYXRhOworCisJZ2V0X2VuZHBvaW50cyhkZXYsaW50Zik7CisKKwlpZiAoKGRhdGEtPmludF91cmIgPSB1c2JfYWxsb2NfdXJiICgwLCBHRlBfS0VSTkVMKSkgPT0gMCkgeworCQlkYmcgKCJDYW5ub3QgYWxsb2NhdGUgaW50ZXJydXB0IFVSQiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDE7CisJfQorCQorCWlmICgoZGF0YS0+aW50X2J1ZiA9IGttYWxsb2MoQVhfSU5URVJSVVBUX0JVRlNJWkUsIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJCWRiZyAoIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGludGVycnVwdCBidWZmZXIiKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQxOworCX0KKwltZW1zZXQoZGF0YS0+aW50X2J1ZiwgMCwgQVhfSU5URVJSVVBUX0JVRlNJWkUpOworCisJdXNiX2ZpbGxfaW50X3VyYiAoZGF0YS0+aW50X3VyYiwgZGV2LT51ZGV2LAorCQl1c2JfcmN2aW50cGlwZSAoZGV2LT51ZGV2LCAxKSwKKwkJZGF0YS0+aW50X2J1ZiwgQVhfSU5URVJSVVBUX0JVRlNJWkUsCisJCWF4ODgxN3hfaW50ZXJydXB0X2NvbXBsZXRlLCBkZXYsCisJCWRldi0+dWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0ggPyA4IDogMTAwKTsKKworCWJ1ZiA9IGttYWxsb2MoNiwgR0ZQX0tFUk5FTCk7CisJaWYoIWJ1ZikgeworCQlkYmcgKCJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBidWZmZXIiKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQyOworCX0KKworCWlmICgocmV0ID0gYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfR1BJT1MsCisJCQkJICAgICAweDAwQjAsIDAsIDAsIGJ1ZikpIDwgMCkKKwkJZ290byBvdXQzOworCisJbXNsZWVwKDUpOworCWlmICgocmV0ID0gYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU1dfUEhZX1NFTEVDVCwgMHgwMDAxLCAwLCAwLCBidWYpKSA8IDApIHsKKwkJZGJnKCJTZWxlY3QgUEhZICMxIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDM7CisJfQorCisJaWYgKChyZXQgPQorCSAgICAgYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU1dfUkVTRVQsIEFYX1NXUkVTRVRfSVBQRCwgMCwgMCwgYnVmKSkgPCAwKSB7CisJCWRiZygiRmFpbGVkIHRvIHBvd2VyIGRvd24gaW50ZXJuYWwgUEhZOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0MzsKKwl9CisKKwltc2xlZXAoMTUwKTsKKwlpZiAoKHJldCA9CisJICAgICBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TV19SRVNFVCwgQVhfU1dSRVNFVF9DTEVBUiwgMCwgMCwgYnVmKSkgPCAwKSB7CisJCWRiZygiRmFpbGVkIHRvIHBlcmZvcm0gc29mdHdhcmUgcmVzZXQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQzOworCX0KKworCW1zbGVlcCgxNTApOworCWlmICgocmV0ID0KKwkgICAgIGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NXX1JFU0VULCBBWF9TV1JFU0VUX0lQUkwgfCBBWF9TV1JFU0VUX1BSTCwgMCwgMCwgYnVmKSkgPCAwKSB7CisJCWRiZygiRmFpbGVkIHRvIHNldCBJbnRlcm5hbC9FeHRlcm5hbCBQSFkgcmVzZXQgY29udHJvbDogJWQiLCByZXQpOworCQlnb3RvIG91dDM7CisJfQorCisJbXNsZWVwKDE1MCk7CisJaWYgKChyZXQgPQorCSAgICAgYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfUlhfQ1RMLCAweDAwMDAsIDAsIDAsCisJCQkgICAgICAgYnVmKSkgPCAwKSB7CisJCWRiZygiRmFpbGVkIHRvIHJlc2V0IFJYX0NUTDogJWQiLCByZXQpOworCQlnb3RvIG91dDM7CisJfQorCisJLyogR2V0IHRoZSBNQUMgYWRkcmVzcyAqLworCW1lbXNldChidWYsIDAsIEVUSF9BTEVOKTsKKwlpZiAoKHJldCA9IGF4ODgxN3hfcmVhZF9jbWQoZGV2LCBBWDg4NzcyX0NNRF9SRUFEX05PREVfSUQsIDAsIDAsIEVUSF9BTEVOLCBidWYpKSA8IDApIHsKKwkJZGJnKCJGYWlsZWQgdG8gcmVhZCBNQUMgYWRkcmVzczogJWQiLCByZXQpOworCQlnb3RvIG91dDM7CisJfQorCW1lbWNweShkZXYtPm5ldC0+ZGV2X2FkZHIsIGJ1ZiwgRVRIX0FMRU4pOworCisJaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TRVRfU1dfTUlJLCAwLCAwLCAwLCBidWYpKSA8IDApIHsKKwkJZGJnKCJFbmFibGluZyBzb2Z0d2FyZSBNSUkgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0MzsKKwl9CisKKwlpZiAoKChyZXQgPQorCSAgICAgIGF4ODgxN3hfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9NSUlfUkVHLCAweDAwMTAsIDIsIDIsIGJ1ZikpIDwgMCkKKwkgICAgfHwgKCooKHUxNiAqKWJ1ZikgIT0gMHgwMDNiKSkgeworCQlkYmcoIlJlYWQgUEhZIHJlZ2lzdGVyIDIgbXVzdCBiZSAweDNiMDA6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQzOworCX0KKworCS8qIEluaXRpYWxpemUgTUlJIHN0cnVjdHVyZSAqLworCWRldi0+bWlpLmRldiA9IGRldi0+bmV0OworCWRldi0+bWlpLm1kaW9fcmVhZCA9IGF4ODgxN3hfbWRpb19yZWFkOworCWRldi0+bWlpLm1kaW9fd3JpdGUgPSBheDg4MTd4X21kaW9fd3JpdGU7CisJZGV2LT5taWkucGh5X2lkX21hc2sgPSAweGZmOworCWRldi0+bWlpLnJlZ19udW1fbWFzayA9IDB4ZmY7CisKKwkvKiBHZXQgdGhlIFBIWSBpZCAqLworCWlmICgocmV0ID0gYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX1BIWV9JRCwgMCwgMCwgMiwgYnVmKSkgPCAwKSB7CisJCWRiZygiRXJyb3IgcmVhZGluZyBQSFkgSUQ6ICUwMngiLCByZXQpOworCQlnb3RvIG91dDM7CisJfSBlbHNlIGlmIChyZXQgPCAyKSB7CisJCS8qIHRoaXMgc2hvdWxkIGFsd2F5cyByZXR1cm4gMiBieXRlcyAqLworCQlkYmcoIkFYX0NNRF9SRUFEX1BIWV9JRCByZXR1cm5lZCBsZXNzIHRoYW4gMiBieXRlczogcmV0PSUwMngiLAorCQkgICAgcmV0KTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXQzOworCX0KKwlkZXYtPm1paS5waHlfaWQgPSAqKCh1OCAqKWJ1ZiArIDEpOworCisJaWYgKChyZXQgPQorCSAgICAgYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU1dfUkVTRVQsIEFYX1NXUkVTRVRfUFJMLCAwLCAwLCBidWYpKSA8IDApIHsKKwkJZGJnKCJTZXQgZXh0ZXJuYWwgUEhZIHJlc2V0IHBpbiBsZXZlbDogJWQiLCByZXQpOworCQlnb3RvIG91dDM7CisJfQorCW1zbGVlcCgxNTApOworCWlmICgocmV0ID0KKwkgICAgIGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NXX1JFU0VULCBBWF9TV1JFU0VUX0lQUkwgfCBBWF9TV1JFU0VUX1BSTCwgMCwgMCwgYnVmKSkgPCAwKSB7CisJCWRiZygiU2V0IEludGVybmFsL0V4dGVybmFsIFBIWSByZXNldCBjb250cm9sOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0MzsKKwl9CisJbXNsZWVwKDE1MCk7CisKKworCWRldi0+bmV0LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBheDg4MTd4X3NldF9tdWx0aWNhc3Q7CisJZGV2LT5uZXQtPmV0aHRvb2xfb3BzID0gJmF4ODg3NzJfZXRodG9vbF9vcHM7CisKKwlheDg4MTd4X21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsCisJCQljcHVfdG9fbGUxNihCTUNSX1JFU0VUKSk7CisJYXg4ODE3eF9tZGlvX3dyaXRlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UsCisJCQljcHVfdG9fbGUxNihBRFZFUlRJU0VfQUxMIHwgQURWRVJUSVNFX0NTTUEpKTsKKwltaWlfbndheV9yZXN0YXJ0KCZkZXYtPm1paSk7CisKKwlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX01FRElVTV9NT0RFLCAweDAzMzYsIDAsIDAsIGJ1ZikpIDwgMCkgeworCQlkYmcoIldyaXRlIG1lZGl1bSBtb2RlIHJlZ2lzdGVyOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0MzsKKwl9CisKKwlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX0lQRzAsIEFYODg3NzJfSVBHMF9ERUZBVUxUIHwgQVg4ODc3Ml9JUEcxX0RFRkFVTFQsQVg4ODc3Ml9JUEcyX0RFRkFVTFQsIDAsIGJ1ZikpIDwgMCkgeworCQlkYmcoIldyaXRlIElQRyxJUEcxLElQRzIgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0MzsKKwl9CisJaWYgKChyZXQgPQorCSAgICAgYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU0VUX0hXX01JSSwgMCwgMCwgMCwgJmJ1ZikpIDwgMCkgeworCQlkYmcoIkZhaWxlZCB0byBzZXQgaGFyZHdhcmUgTUlJOiAlMDJ4IiwgcmV0KTsKKwkJZ290byBvdXQzOworCX0KKworCS8qIFNldCBSWF9DVEwgdG8gZGVmYXVsdCB2YWx1ZXMgd2l0aCAyayBidWZmZXIsIGFuZCBlbmFibGUgY2FjdHVzICovCisJaWYgKChyZXQgPQorCSAgICAgYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfUlhfQ1RMLCAweDAwODgsIDAsIDAsCisJCQkgICAgICAgYnVmKSkgPCAwKSB7CisJCWRiZygiUmVzZXQgUlhfQ1RMIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDM7CisJfQorCisJaWYoKHJldCA9IHVzYl9zdWJtaXRfdXJiKGRhdGEtPmludF91cmIsIEdGUF9LRVJORUwpKSA8IDApIHsKKwkJZGJnKCJGYWlsZWQgdG8gc3VibWl0IGludGVycnVwdCBVUkI6ICUwMngiLCByZXQpOworCQlnb3RvIG91dDM7CisJfQorCisJa2ZyZWUoYnVmKTsKKworCXJldHVybiAwOworCitvdXQzOgorCWtmcmVlKGJ1Zik7CitvdXQyOgorCWtmcmVlKGRhdGEtPmludF9idWYpOworb3V0MToKKwl1c2JfZnJlZV91cmIoZGF0YS0+aW50X3VyYik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF4ODg3NzJfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXUzMiAqaGVhZGVyOworCWNoYXIgKnBhY2tldDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqYXhfc2tiOworCXUxNiBzaXplOworCisJaGVhZGVyID0gKHUzMiAqKSBza2ItPmRhdGE7CisJbGUzMl90b19jcHVzKGhlYWRlcik7CisJcGFja2V0ID0gKGNoYXIgKikoaGVhZGVyICsgMSk7CisKKwlza2JfcHVsbChza2IsIDQpOworCisJd2hpbGUgKHNrYi0+bGVuID4gMCkgeworCQlpZiAoKHNob3J0KSgqaGVhZGVyICYgMHgwMDAwZmZmZikgIT0KKwkJICAgIH4oKHNob3J0KSgoKmhlYWRlciAmIDB4ZmZmZjAwMDApID4+IDE2KSkpIHsKKwkJCWRldmRiZyhkZXYsImhlYWRlciBsZW5ndGggZGF0YSBpcyBlcnJvciIpOworCQl9CisJCS8qIGdldCB0aGUgcGFja2V0IGxlbmd0aCAqLworCQlzaXplID0gKHUxNikgKCpoZWFkZXIgJiAweDAwMDBmZmZmKTsKKworCQlpZiAoKHNrYi0+bGVuKSAtICgoc2l6ZSArIDEpICYgMHhmZmZlKSA9PSAwKQorCQkJcmV0dXJuIDI7CisJCWlmIChzaXplID4gRVRIX0ZSQU1FX0xFTikgeworCQkJZGV2ZGJnKGRldiwiaW52YWxpZCByeCBsZW5ndGggJWQiLCBzaXplKTsKKwkJCXJldHVybiAwOworCQl9CisJCWF4X3NrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOworCQlpZiAoYXhfc2tiKSB7CisJCQlheF9za2ItPmxlbiA9IHNpemU7CisJCQlheF9za2ItPmRhdGEgPSBwYWNrZXQ7CisJCQlheF9za2ItPnRhaWwgPSBwYWNrZXQgKyBzaXplOworCQkJc2tiX3JldHVybihkZXYsIGF4X3NrYik7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCXNrYl9wdWxsKHNrYiwgKHNpemUgKyAxKSAmIDB4ZmZmZSk7CisKKwkJaWYgKHNrYi0+bGVuID09IDApCisJCQlicmVhazsKKworCQloZWFkZXIgPSAodTMyICopIHNrYi0+ZGF0YTsKKwkJbGUzMl90b19jcHVzKGhlYWRlcik7CisJCXBhY2tldCA9IChjaGFyICopKGhlYWRlciArIDEpOworCQlza2JfcHVsbChza2IsIDQpOworCX0KKworCWlmIChza2ItPmxlbiA8IDApIHsKKwkJZGV2ZGJnKGRldiwiaW52YWxpZCByeCBsZW5ndGggJWQiLCBza2ItPmxlbik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICpheDg4NzcyX3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJaW50IGZsYWdzKQoreworCWludCBwYWRsZW47CisJaW50IGhlYWRyb29tID0gc2tiX2hlYWRyb29tKHNrYik7CisJaW50IHRhaWxyb29tID0gc2tiX3RhaWxyb29tKHNrYik7CisJdTMyICpwYWNrZXRfbGVuOworCXUzMiAqcGFkYnl0ZXNfcHRyOworCisJcGFkbGVuID0gKChza2ItPmxlbiArIDQpICUgNTEyKSA/IDAgOiA0OworCisJaWYgKCghc2tiX2Nsb25lZChza2IpKQorCSAgICAmJiAoKGhlYWRyb29tICsgdGFpbHJvb20pID49ICg0ICsgcGFkbGVuKSkpIHsKKwkJaWYgKChoZWFkcm9vbSA8IDQpIHx8ICh0YWlscm9vbSA8IHBhZGxlbikpIHsKKwkJCXNrYi0+ZGF0YSA9IG1lbW1vdmUoc2tiLT5oZWFkICsgNCwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJCQlza2ItPnRhaWwgPSBza2ItPmRhdGEgKyBza2ItPmxlbjsKKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCBza19idWZmICpza2IyOworCQlza2IyID0gc2tiX2NvcHlfZXhwYW5kKHNrYiwgNCwgcGFkbGVuLCBmbGFncyk7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXNrYiA9IHNrYjI7CisJCWlmICghc2tiKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJcGFja2V0X2xlbiA9ICh1MzIgKikgc2tiX3B1c2goc2tiLCA0KTsKKworCXBhY2tldF9sZW4gPSAodTMyICopIHNrYi0+ZGF0YTsKKwkqcGFja2V0X2xlbiA9ICgoKHNrYi0+bGVuIC0gNCkgXiAweDAwMDBmZmZmKSA8PCAxNikgKyAoc2tiLT5sZW4gLSA0KTsKKworCWlmICgoc2tiLT5sZW4gJSA1MTIpID09IDApIHsKKwkJcGFkYnl0ZXNfcHRyID0gKHUzMiAqKSBza2ItPnRhaWw7CisJCSpwYWRieXRlc19wdHIgPSAweGZmZmYwMDAwOworCQlza2JfcHV0KHNrYiwgcGFkbGVuKTsKKwl9CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4MTd4X2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0gIkFTSVggQVg4ODE3eCBVU0IgMi4wIEV0aGVybmV0IiwKKwkuYmluZCA9IGF4ODgxN3hfYmluZCwKKwkudW5iaW5kID0gYXg4ODE3eF91bmJpbmQsCisJLmZsYWdzID0gIEZMQUdfRVRIRVIsCisJLmRhdGEgPSAweDAwMTMwMTAzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBkbGlua19kdWJfZTEwMF9pbmZvID0geworCS5kZXNjcmlwdGlvbiA9ICJETGluayBEVUItRTEwMCBVU0IgRXRoZXJuZXQiLAorCS5iaW5kID0gYXg4ODE3eF9iaW5kLAorCS51bmJpbmQgPSBheDg4MTd4X3VuYmluZCwKKwkuZmxhZ3MgPSAgRkxBR19FVEhFUiwKKwkuZGF0YSA9IDB4MDA5ZjlkOWYsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIG5ldGdlYXJfZmExMjBfaW5mbyA9IHsKKwkuZGVzY3JpcHRpb24gPSAiTmV0Z2VhciBGQS0xMjAgVVNCIEV0aGVybmV0IiwKKwkuYmluZCA9IGF4ODgxN3hfYmluZCwKKwkudW5iaW5kID0gYXg4ODE3eF91bmJpbmQsCisJLmZsYWdzID0gIEZMQUdfRVRIRVIsCisJLmRhdGEgPSAweDAwMTMwMTAzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBoYXdraW5nX3VmMjAwX2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0gIkhhd2tpbmcgVUYyMDAgVVNCIEV0aGVybmV0IiwKKwkuYmluZCA9IGF4ODgxN3hfYmluZCwKKwkudW5iaW5kID0gYXg4ODE3eF91bmJpbmQsCisJLmZsYWdzID0gIEZMQUdfRVRIRVIsCisJLmRhdGEgPSAweDAwMWYxZDFmLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4NzcyX2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0gIkFTSVggQVg4ODc3MiBVU0IgMi4wIEV0aGVybmV0IiwKKwkuYmluZCA9IGF4ODg3NzJfYmluZCwKKwkudW5iaW5kID0gYXg4ODE3eF91bmJpbmQsCisJLmZsYWdzID0gRkxBR19FVEhFUiB8IEZMQUdfRlJBTUlOR19BWCwKKwkucnhfZml4dXAgPSBheDg4NzcyX3J4X2ZpeHVwLAorCS50eF9maXh1cCA9IGF4ODg3NzJfdHhfZml4dXAsCisJLmRhdGEgPSAweDAwMTMwMTAzLAorfTsKKworI2VuZGlmIC8qIENPTkZJR19VU0JfQVg4ODE3WCAqLworCisKKwwKKyNpZmRlZglDT05GSUdfVVNCX0JFTEtJTgorI2RlZmluZQlIQVZFX0hBUkRXQVJFCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEJlbGtpbiBGNVUxMDQgLi4uIHR3byBOZXRDaGlwIDIyODAgZGV2aWNlcyArIEF0bWVsIG1pY3JvY29udHJvbGxlcgorICoKKyAqIC4uLiBhbHNvIHR3byBlVEVLIGRlc2lnbnMsIGluY2x1ZGluZyBvbmUgc29sZCBhcyAiQWR2YW5jZSBVU0JORVQiCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbwliZWxraW5faW5mbyA9IHsKKwkuZGVzY3JpcHRpb24gPQkiQmVsa2luLCBlVEVLLCBvciBjb21wYXRpYmxlIiwKK307CisKKyNlbmRpZgkvKiBDT05GSUdfVVNCX0JFTEtJTiAqLworCisKKwwKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIENvbW11bmljYXRpb25zIERldmljZSBDbGFzcyBkZWNsYXJhdGlvbnMuCisgKiBVc2VkIGJ5IENEQyBFdGhlcm5ldCwgYW5kIHNvbWUgQ0RDIHZhcmlhbnRzCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmCUNPTkZJR19VU0JfQ0RDRVRIRVIKKyNkZWZpbmUgTkVFRF9HRU5FUklDX0NEQworI2VuZGlmCisKKyNpZmRlZglDT05GSUdfVVNCX1pBVVJVUworLyogRXRoZXJuZXQgdmFyaWFudCB1c2VzIGZ1bmt5IGZyYW1pbmcsIGJyb2tlbiBldGhlcm5ldCBhZGRyZXNzaW5nICovCisjZGVmaW5lIE5FRURfR0VORVJJQ19DREMKKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX1VTQl9STkRJUworLyogQUNNIHZhcmlhbnQgdXNlcyBldmVuIGZ1bmtpZXIgZnJhbWluZywgY29tcGxleCBjb250cm9sIFJQQyBzY2hlbWUgKi8KKyNkZWZpbmUgTkVFRF9HRU5FUklDX0NEQworI2VuZGlmCisKKworI2lmZGVmCU5FRURfR0VORVJJQ19DREMKKworI2luY2x1ZGUgPGxpbnV4L3VzYl9jZGMuaD4KKworc3RydWN0IGNkY19zdGF0ZSB7CisJc3RydWN0IHVzYl9jZGNfaGVhZGVyX2Rlc2MJKmhlYWRlcjsKKwlzdHJ1Y3QgdXNiX2NkY191bmlvbl9kZXNjCSp1OworCXN0cnVjdCB1c2JfY2RjX2V0aGVyX2Rlc2MJKmV0aGVyOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlCQkqY29udHJvbDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkJKmRhdGE7Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNibmV0X2RyaXZlcjsKKworLyoKKyAqIHByb2JlcyBjb250cm9sIGludGVyZmFjZSwgY2xhaW1zIGRhdGEgaW50ZXJmYWNlLCBjb2xsZWN0cyB0aGUgYnVsaworICogZW5kcG9pbnRzLCBhY3RpdmF0ZXMgZGF0YSBpbnRlcmZhY2UgKGlmIG5lZWRlZCksIG1heWJlIHNldHMgTVRVLgorICogYWxsIHB1cmUgY2RjLCBleGNlcHQgZm9yIGNlcnRhaW4gZmlybXdhcmUgd29ya2Fyb3VuZHMuCisgKi8KK3N0YXRpYyBpbnQgZ2VuZXJpY19jZGNfYmluZCAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwl1OAkJCQkqYnVmID0gaW50Zi0+Y3VyX2FsdHNldHRpbmctPmV4dHJhOworCWludAkJCQlsZW4gPSBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZXh0cmFsZW47CisJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcgkqZDsKKwlzdHJ1Y3QgY2RjX3N0YXRlCQkqaW5mbyA9ICh2b2lkICopICZkZXYtPmRhdGE7CisJaW50CQkJCXN0YXR1czsKKwlpbnQJCQkJcm5kaXM7CisKKwlpZiAoc2l6ZW9mIGRldi0+ZGF0YSA8IHNpemVvZiAqaW5mbykKKwkJcmV0dXJuIC1FRE9NOworCisJLyogZXhwZWN0IHN0cmljdCBzcGVjIGNvbmZvcm1hbmNlIGZvciB0aGUgZGVzY3JpcHRvcnMsIGJ1dAorCSAqIGNvcGUgd2l0aCBmaXJtd2FyZSB3aGljaCBzdG9yZXMgdGhlbSBpbiB0aGUgd3JvbmcgcGxhY2UKKwkgKi8KKwlpZiAobGVuID09IDAgJiYgZGV2LT51ZGV2LT5hY3Rjb25maWctPmV4dHJhbGVuKSB7CisJCS8qIE1vdG9yb2xhIFNCNDEwMCAoYW5kIG90aGVyczogQnJhZCBIYXJkcyBzYXlzIGl0J3MKKwkJICogZnJvbSBhIEJyb2FkY29tIGRlc2lnbikgcHV0IENEQyBkZXNjcmlwdG9ycyBoZXJlCisJCSAqLworCQlidWYgPSBkZXYtPnVkZXYtPmFjdGNvbmZpZy0+ZXh0cmE7CisJCWxlbiA9IGRldi0+dWRldi0+YWN0Y29uZmlnLT5leHRyYWxlbjsKKwkJaWYgKGxlbikKKwkJCWRldl9kYmcgKCZpbnRmLT5kZXYsCisJCQkJIkNEQyBkZXNjcmlwdG9ycyBvbiBjb25maWdcbiIpOworCX0KKworCS8qIHRoaXMgYXNzdW1lcyB0aGF0IGlmIHRoZXJlJ3MgYSBub24tUk5ESVMgdmVuZG9yIHZhcmlhbnQKKwkgKiBvZiBjZGMtYWNtLCBpdCdsbCBmYWlsIFJORElTIHJlcXVlc3RzIGNsZWFubHkuCisJICovCisJcm5kaXMgPSAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZVByb3RvY29sID09IDB4ZmYpOworCisJbWVtc2V0IChpbmZvLCAwLCBzaXplb2YgKmluZm8pOworCWluZm8tPmNvbnRyb2wgPSBpbnRmOworCXdoaWxlIChsZW4gPiAzKSB7CisJCWlmIChidWYgWzFdICE9IFVTQl9EVF9DU19JTlRFUkZBQ0UpCisJCQlnb3RvIG5leHRfZGVzYzsKKworCQkvKiB1c2UgYkRlc2NyaXB0b3JTdWJUeXBlIHRvIGlkZW50aWZ5IHRoZSBDREMgZGVzY3JpcHRvcnMuCisJCSAqIFdlIGV4cGVjdCBkZXZpY2VzIHdpdGggQ0RDIGhlYWRlciBhbmQgdW5pb24gZGVzY3JpcHRvcnMuCisJCSAqIEZvciBDREMgRXRoZXJuZXQgd2UgbmVlZCB0aGUgZXRoZXJuZXQgZGVzY3JpcHRvci4KKwkJICogRm9yIFJORElTLCBpZ25vcmUgdHdvIChwb2ludGxlc3MpIENEQyBtb2RlbSBkZXNjcmlwdG9ycworCQkgKiBpbiBmYXZvciBvZiBhIGNvbXBsaWNhdGVkIE9JRC1iYXNlZCBSUEMgc2NoZW1lIGRvaW5nIHdoYXQKKwkJICogQ0RDIEV0aGVybmV0IGFjaGlldmVzIHdpdGggYSBzaW1wbGUgZGVzY3JpcHRvci4KKwkJICovCisJCXN3aXRjaCAoYnVmIFsyXSkgeworCQljYXNlIFVTQl9DRENfSEVBREVSX1RZUEU6CisJCQlpZiAoaW5mby0+aGVhZGVyKSB7CisJCQkJZGV2X2RiZyAoJmludGYtPmRldiwgImV4dHJhIENEQyBoZWFkZXJcbiIpOworCQkJCWdvdG8gYmFkX2Rlc2M7CisJCQl9CisJCQlpbmZvLT5oZWFkZXIgPSAodm9pZCAqKSBidWY7CisJCQlpZiAoaW5mby0+aGVhZGVyLT5iTGVuZ3RoICE9IHNpemVvZiAqaW5mby0+aGVhZGVyKSB7CisJCQkJZGV2X2RiZyAoJmludGYtPmRldiwgIkNEQyBoZWFkZXIgbGVuICV1XG4iLAorCQkJCQlpbmZvLT5oZWFkZXItPmJMZW5ndGgpOworCQkJCWdvdG8gYmFkX2Rlc2M7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBVU0JfQ0RDX1VOSU9OX1RZUEU6CisJCQlpZiAoaW5mby0+dSkgeworCQkJCWRldl9kYmcgKCZpbnRmLT5kZXYsICJleHRyYSBDREMgdW5pb25cbiIpOworCQkJCWdvdG8gYmFkX2Rlc2M7CisJCQl9CisJCQlpbmZvLT51ID0gKHZvaWQgKikgYnVmOworCQkJaWYgKGluZm8tPnUtPmJMZW5ndGggIT0gc2l6ZW9mICppbmZvLT51KSB7CisJCQkJZGV2X2RiZyAoJmludGYtPmRldiwgIkNEQyB1bmlvbiBsZW4gJXVcbiIsCisJCQkJCWluZm8tPnUtPmJMZW5ndGgpOworCQkJCWdvdG8gYmFkX2Rlc2M7CisJCQl9CisKKwkJCS8qIHdlIG5lZWQgYSBtYXN0ZXIvY29udHJvbCBpbnRlcmZhY2UgKHdoYXQgd2UncmUKKwkJCSAqIHByb2JlZCB3aXRoKSBhbmQgYSBzbGF2ZS9kYXRhIGludGVyZmFjZTsgdW5pb24KKwkJCSAqIGRlc2NyaXB0b3JzIHNvcnQgdGhpcyBhbGwgb3V0LgorCQkJICovCisJCQlpbmZvLT5jb250cm9sID0gdXNiX2lmbnVtX3RvX2lmKGRldi0+dWRldiwKKwkJCQkJCWluZm8tPnUtPmJNYXN0ZXJJbnRlcmZhY2UwKTsKKwkJCWluZm8tPmRhdGEgPSB1c2JfaWZudW1fdG9faWYoZGV2LT51ZGV2LAorCQkJCQkJaW5mby0+dS0+YlNsYXZlSW50ZXJmYWNlMCk7CisJCQlpZiAoIWluZm8tPmNvbnRyb2wgfHwgIWluZm8tPmRhdGEpIHsKKwkJCQlkZXZfZGJnICgmaW50Zi0+ZGV2LAorCQkJCQkibWFzdGVyICMldS8lcCBzbGF2ZSAjJXUvJXBcbiIsCisJCQkJCWluZm8tPnUtPmJNYXN0ZXJJbnRlcmZhY2UwLAorCQkJCQlpbmZvLT5jb250cm9sLAorCQkJCQlpbmZvLT51LT5iU2xhdmVJbnRlcmZhY2UwLAorCQkJCQlpbmZvLT5kYXRhKTsKKwkJCQlnb3RvIGJhZF9kZXNjOworCQkJfQorCQkJaWYgKGluZm8tPmNvbnRyb2wgIT0gaW50ZikgeworCQkJCWRldl9kYmcgKCZpbnRmLT5kZXYsICJib2d1cyBDREMgVW5pb25cbiIpOworCQkJCS8qIEFtYml0IFVTQiBDYWJsZSBNb2RlbSAoYW5kIG1heWJlIG90aGVycykKKwkJCQkgKiBpbnRlcmNoYW5nZXMgbWFzdGVyIGFuZCBzbGF2ZSBpbnRlcmZhY2UuCisJCQkJICovCisJCQkJaWYgKGluZm8tPmRhdGEgPT0gaW50ZikgeworCQkJCQlpbmZvLT5kYXRhID0gaW5mby0+Y29udHJvbDsKKwkJCQkJaW5mby0+Y29udHJvbCA9IGludGY7CisJCQkJfSBlbHNlCisJCQkJCWdvdG8gYmFkX2Rlc2M7CisJCQl9CisKKwkJCS8qIGEgZGF0YSBpbnRlcmZhY2UgYWx0c2V0dGluZyBkb2VzIHRoZSByZWFsIGkvbyAqLworCQkJZCA9ICZpbmZvLT5kYXRhLT5jdXJfYWx0c2V0dGluZy0+ZGVzYzsKKwkJCWlmIChkLT5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX0NEQ19EQVRBKSB7CisJCQkJZGV2X2RiZyAoJmludGYtPmRldiwgInNsYXZlIGNsYXNzICV1XG4iLAorCQkJCQlkLT5iSW50ZXJmYWNlQ2xhc3MpOworCQkJCWdvdG8gYmFkX2Rlc2M7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBVU0JfQ0RDX0VUSEVSTkVUX1RZUEU6CisJCQlpZiAoaW5mby0+ZXRoZXIpIHsKKwkJCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAiZXh0cmEgQ0RDIGV0aGVyXG4iKTsKKwkJCQlnb3RvIGJhZF9kZXNjOworCQkJfQorCQkJaW5mby0+ZXRoZXIgPSAodm9pZCAqKSBidWY7CisJCQlpZiAoaW5mby0+ZXRoZXItPmJMZW5ndGggIT0gc2l6ZW9mICppbmZvLT5ldGhlcikgeworCQkJCWRldl9kYmcgKCZpbnRmLT5kZXYsICJDREMgZXRoZXIgbGVuICV1XG4iLAorCQkJCQlpbmZvLT51LT5iTGVuZ3RoKTsKKwkJCQlnb3RvIGJhZF9kZXNjOworCQkJfQorCQkJZGV2LT5uZXQtPm10dSA9IGxlMTZfdG9fY3B1cCAoCisJCQkJCQkmaW5mby0+ZXRoZXItPndNYXhTZWdtZW50U2l6ZSkKKwkJCQkJLSBFVEhfSExFTjsKKwkJCS8qIGJlY2F1c2Ugb2YgWmF1cnVzLCB3ZSBtYXkgYmUgaWdub3JpbmcgdGhlIGhvc3QKKwkJCSAqIHNpZGUgbGluayBhZGRyZXNzIHdlIHdlcmUgZ2l2ZW4uCisJCQkgKi8KKwkJCWJyZWFrOworCQl9CituZXh0X2Rlc2M6CisJCWxlbiAtPSBidWYgWzBdOwkvKiBiTGVuZ3RoICovCisJCWJ1ZiArPSBidWYgWzBdOworCX0KKworCWlmICghaW5mby0+aGVhZGVyIHx8ICFpbmZvLT51IHx8ICghcm5kaXMgJiYgIWluZm8tPmV0aGVyKSkgeworCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAibWlzc2luZyBjZGMgJXMlcyVzZGVzY3JpcHRvclxuIiwKKwkJCWluZm8tPmhlYWRlciA/ICIiIDogImhlYWRlciAiLAorCQkJaW5mby0+dSA/ICIiIDogInVuaW9uICIsCisJCQlpbmZvLT5ldGhlciA/ICIiIDogImV0aGVyICIpOworCQlnb3RvIGJhZF9kZXNjOworCX0KKworCS8qIGNsYWltIGRhdGEgaW50ZXJmYWNlIGFuZCBzZXQgaXQgdXAgLi4uIHdpdGggc2lkZSBlZmZlY3RzLgorCSAqIG5ldHdvcmsgdHJhZmZpYyBjYW4ndCBmbG93IHVudGlsIGFuIGFsdHNldHRpbmcgaXMgZW5hYmxlZC4KKwkgKi8KKwlzdGF0dXMgPSB1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSAoJnVzYm5ldF9kcml2ZXIsIGluZm8tPmRhdGEsIGRldik7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisJc3RhdHVzID0gZ2V0X2VuZHBvaW50cyAoZGV2LCBpbmZvLT5kYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQkvKiBlbnN1cmUgaW1tZWRpYXRlIGV4aXQgZnJvbSB1c2JuZXRfZGlzY29ubmVjdCAqLworCQl1c2Jfc2V0X2ludGZkYXRhKGluZm8tPmRhdGEsIE5VTEwpOworCQl1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlICgmdXNibmV0X2RyaXZlciwgaW5mby0+ZGF0YSk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJLyogc3RhdHVzIGVuZHBvaW50OiBvcHRpb25hbCBmb3IgQ0RDIEV0aGVybmV0LCBub3QgUk5ESVMgKG9yIEFDTSkgKi8KKwlkZXYtPnN0YXR1cyA9IE5VTEw7CisJaWYgKGluZm8tPmNvbnRyb2wtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHMgPT0gMSkgeworCQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmRlc2M7CisKKwkJZGV2LT5zdGF0dXMgPSAmaW5mby0+Y29udHJvbC0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50IFswXTsKKwkJZGVzYyA9ICZkZXYtPnN0YXR1cy0+ZGVzYzsKKwkJaWYgKGRlc2MtPmJtQXR0cmlidXRlcyAhPSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQKKwkJCQl8fCAhKGRlc2MtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKQorCQkJCXx8IChsZTE2X3RvX2NwdShkZXNjLT53TWF4UGFja2V0U2l6ZSkKKwkJCQkJPCBzaXplb2YgKHN0cnVjdCB1c2JfY2RjX25vdGlmaWNhdGlvbikpCisJCQkJfHwgIWRlc2MtPmJJbnRlcnZhbCkgeworCQkJZGV2X2RiZyAoJmludGYtPmRldiwgImJhZCBub3RpZmljYXRpb24gZW5kcG9pbnRcbiIpOworCQkJZGV2LT5zdGF0dXMgPSBOVUxMOworCQl9CisJfQorCWlmIChybmRpcyAmJiAhZGV2LT5zdGF0dXMpIHsKKwkJZGV2X2RiZyAoJmludGYtPmRldiwgIm1pc3NpbmcgUk5ESVMgc3RhdHVzIGVuZHBvaW50XG4iKTsKKwkJdXNiX3NldF9pbnRmZGF0YShpbmZvLT5kYXRhLCBOVUxMKTsKKwkJdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZSAoJnVzYm5ldF9kcml2ZXIsIGluZm8tPmRhdGEpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmV0dXJuIDA7CisKK2JhZF9kZXNjOgorCWRldl9pbmZvICgmZGV2LT51ZGV2LT5kZXYsICJiYWQgQ0RDIGRlc2NyaXB0b3JzXG4iKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIHZvaWQgY2RjX3VuYmluZCAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgY2RjX3N0YXRlCQkqaW5mbyA9ICh2b2lkICopICZkZXYtPmRhdGE7CisKKwkvKiBkaXNjb25uZWN0IG1hc3RlciAtLT4gZGlzY29ubmVjdCBzbGF2ZSAqLworCWlmIChpbnRmID09IGluZm8tPmNvbnRyb2wgJiYgaW5mby0+ZGF0YSkgeworCQkvKiBlbnN1cmUgaW1tZWRpYXRlIGV4aXQgZnJvbSB1c2JuZXRfZGlzY29ubmVjdCAqLworCQl1c2Jfc2V0X2ludGZkYXRhKGluZm8tPmRhdGEsIE5VTEwpOworCQl1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlICgmdXNibmV0X2RyaXZlciwgaW5mby0+ZGF0YSk7CisJCWluZm8tPmRhdGEgPSBOVUxMOworCX0KKworCS8qIGFuZCB2aWNlIHZlcnNhIChqdXN0IGluIGNhc2UpICovCisJZWxzZSBpZiAoaW50ZiA9PSBpbmZvLT5kYXRhICYmIGluZm8tPmNvbnRyb2wpIHsKKwkJLyogZW5zdXJlIGltbWVkaWF0ZSBleGl0IGZyb20gdXNibmV0X2Rpc2Nvbm5lY3QgKi8KKwkJdXNiX3NldF9pbnRmZGF0YShpbmZvLT5jb250cm9sLCBOVUxMKTsKKwkJdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZSAoJnVzYm5ldF9kcml2ZXIsIGluZm8tPmNvbnRyb2wpOworCQlpbmZvLT5jb250cm9sID0gTlVMTDsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgZHVtcHNwZWVkIChzdHJ1Y3QgdXNibmV0ICpkZXYsIF9fbGUzMiAqc3BlZWRzKQoreworCWlmIChuZXRpZl9tc2dfdGltZXIgKGRldikpCisJCWRldmluZm8gKGRldiwgImxpbmsgc3BlZWRzOiAldSBrYnBzIHVwLCAldSBrYnBzIGRvd24iLAorCQkJX19sZTMyX3RvX2NwdShzcGVlZHNbMF0pIC8gMTAwMCwKKwkJX19sZTMyX3RvX2NwdShzcGVlZHNbMV0pIC8gMTAwMCk7Cit9CisKK3N0YXRpYyB2b2lkIGNkY19zdGF0dXMgKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1c2JfY2RjX25vdGlmaWNhdGlvbgkqZXZlbnQ7CisKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDwgc2l6ZW9mICpldmVudCkKKwkJcmV0dXJuOworCQorCS8qIFNQRUVEX0NIQU5HRSBjYW4gZ2V0IHNwbGl0IGludG8gdHdvIDgtYnl0ZSBwYWNrZXRzICovCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdCAoRVZFTlRfU1RTX1NQTElULCAmZGV2LT5mbGFncykpIHsKKwkJZHVtcHNwZWVkIChkZXYsIChfX2xlMzIgKikgdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQlyZXR1cm47CisJfQorCisJZXZlbnQgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlzd2l0Y2ggKGV2ZW50LT5iTm90aWZpY2F0aW9uVHlwZSkgeworCWNhc2UgVVNCX0NEQ19OT1RJRllfTkVUV09SS19DT05ORUNUSU9OOgorCQlpZiAobmV0aWZfbXNnX3RpbWVyIChkZXYpKQorCQkJZGV2ZGJnIChkZXYsICJDREM6IGNhcnJpZXIgJXMiLAorCQkJCQlldmVudC0+d1ZhbHVlID8gIm9uIiA6ICJvZmYiKTsKKwkJaWYgKGV2ZW50LT53VmFsdWUpCisJCQluZXRpZl9jYXJyaWVyX29uKGRldi0+bmV0KTsKKwkJZWxzZQorCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2LT5uZXQpOworCQlicmVhazsKKwljYXNlIFVTQl9DRENfTk9USUZZX1NQRUVEX0NIQU5HRToJLyogdHgvcnggcmF0ZXMgKi8KKwkJaWYgKG5ldGlmX21zZ190aW1lciAoZGV2KSkKKwkJCWRldmRiZyAoZGV2LCAiQ0RDOiBzcGVlZCBjaGFuZ2UgKGxlbiAlZCkiLAorCQkJCQl1cmItPmFjdHVhbF9sZW5ndGgpOworCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoICE9IChzaXplb2YgKmV2ZW50ICsgOCkpCisJCQlzZXRfYml0IChFVkVOVF9TVFNfU1BMSVQsICZkZXYtPmZsYWdzKTsKKwkJZWxzZQorCQkJZHVtcHNwZWVkIChkZXYsIChfX2xlMzIgKikgJmV2ZW50WzFdKTsKKwkJYnJlYWs7CisJLy8gY2FzZSBVU0JfQ0RDX05PVElGWV9SRVNQT05TRV9BVkFJTEFCTEU6CS8qIFJORElTOyBvciB1bnNvbGljaXRlZCAqLworCWRlZmF1bHQ6CisJCWRldmVyciAoZGV2LCAiQ0RDOiB1bmV4cGVjdGVkIG5vdGlmaWNhdGlvbiAlMDJ4ISIsCisJCQkJIGV2ZW50LT5iTm90aWZpY2F0aW9uVHlwZSk7CisJCWJyZWFrOworCX0KK30KKworI2VuZGlmCS8qIE5FRURfR0VORVJJQ19DREMgKi8KKworDAorI2lmZGVmCUNPTkZJR19VU0JfQ0RDRVRIRVIKKyNkZWZpbmUJSEFWRV9IQVJEV0FSRQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBDb21tdW5pY2F0aW9ucyBEZXZpY2UgQ2xhc3MsIEV0aGVybmV0IENvbnRyb2wgbW9kZWwKKyAqIAorICogVGFrZXMgdHdvIGludGVyZmFjZXMuICBUaGUgREFUQSBpbnRlcmZhY2UgaXMgaW5hY3RpdmUgdGlsbCBhbiBhbHRzZXR0aW5nCisgKiBpcyBzZWxlY3RlZC4gIENvbmZpZ3VyYXRpb24gZGF0YSBpbmNsdWRlcyBjbGFzcyBkZXNjcmlwdG9ycy4KKyAqCisgKiBUaGlzIHNob3VsZCBpbnRlcm9wIHdpdGggd2hhdGV2ZXIgdGhlIDIuNCAiQ0RDRXRoZXIuYyIgZHJpdmVyCisgKiAoYnkgQnJhZCBIYXJkcykgdGFsa2VkIHdpdGguCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisKK3N0YXRpYyB1OCBuaWJibGUgKHVuc2lnbmVkIGNoYXIgYykKK3sKKwlpZiAobGlrZWx5IChpc2RpZ2l0IChjKSkpCisJCXJldHVybiBjIC0gJzAnOworCWMgPSB0b3VwcGVyIChjKTsKKwlpZiAobGlrZWx5IChpc3hkaWdpdCAoYykpKQorCQlyZXR1cm4gMTAgKyBjIC0gJ0EnOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorZ2V0X2V0aGVybmV0X2FkZHIgKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9jZGNfZXRoZXJfZGVzYyAqZSkKK3sKKwlpbnQgCQl0bXAsIGk7CisJdW5zaWduZWQgY2hhcglidWYgWzEzXTsKKworCXRtcCA9IHVzYl9zdHJpbmcgKGRldi0+dWRldiwgZS0+aU1BQ0FkZHJlc3MsIGJ1Ziwgc2l6ZW9mIGJ1Zik7CisJaWYgKHRtcCAhPSAxMikgeworCQlkZXZfZGJnICgmZGV2LT51ZGV2LT5kZXYsCisJCQkiYmFkIE1BQyBzdHJpbmcgJWQgZmV0Y2gsICVkXG4iLCBlLT5pTUFDQWRkcmVzcywgdG1wKTsKKwkJaWYgKHRtcCA+PSAwKQorCQkJdG1wID0gLUVJTlZBTDsKKwkJcmV0dXJuIHRtcDsKKwl9CisJZm9yIChpID0gdG1wID0gMDsgaSA8IDY7IGkrKywgdG1wICs9IDIpCisJCWRldi0+bmV0LT5kZXZfYWRkciBbaV0gPQorCQkJIChuaWJibGUgKGJ1ZiBbdG1wXSkgPDwgNCkgKyBuaWJibGUgKGJ1ZiBbdG1wICsgMV0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNkY19iaW5kIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCWludAkJCQlzdGF0dXM7CisJc3RydWN0IGNkY19zdGF0ZQkJKmluZm8gPSAodm9pZCAqKSAmZGV2LT5kYXRhOworCisJc3RhdHVzID0gZ2VuZXJpY19jZGNfYmluZCAoZGV2LCBpbnRmKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCXN0YXR1cyA9IGdldF9ldGhlcm5ldF9hZGRyIChkZXYsIGluZm8tPmV0aGVyKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQl1c2Jfc2V0X2ludGZkYXRhKGluZm8tPmRhdGEsIE5VTEwpOworCQl1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlICgmdXNibmV0X2RyaXZlciwgaW5mby0+ZGF0YSk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJLyogRklYTUUgY2RjLWV0aGVyIGhhcyBzb21lIG11bHRpY2FzdCBjb2RlIHRvbywgdGhvdWdoIGl0IGNvbXBsYWlucworCSAqIGluIHJvdXRpbmUgY2FzZXMuICBpbmZvLT5ldGhlciBkZXNjcmliZXMgdGhlIG11bHRpY2FzdCBzdXBwb3J0LgorCSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCWNkY19pbmZvID0geworCS5kZXNjcmlwdGlvbiA9CSJDREMgRXRoZXJuZXQgRGV2aWNlIiwKKwkuZmxhZ3MgPQlGTEFHX0VUSEVSLAorCS8vIC5jaGVja19jb25uZWN0ID0gY2RjX2NoZWNrX2Nvbm5lY3QsCisJLmJpbmQgPQkJY2RjX2JpbmQsCisJLnVuYmluZCA9CWNkY191bmJpbmQsCisJLnN0YXR1cyA9CWNkY19zdGF0dXMsCit9OworCisjZW5kaWYJLyogQ09ORklHX1VTQl9DRENFVEhFUiAqLworCisKKwwKKyNpZmRlZglDT05GSUdfVVNCX0VQU09OMjg4OAorI2RlZmluZQlIQVZFX0hBUkRXQVJFCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEVQU09OIFVTQiBjbGllbnRzCisgKgorICogVGhpcyBpcyB0aGUgc2FtZSBpZGVhIGFzIExpbnV4IFBEQXMgKGJlbG93KSBleGNlcHQgdGhlIGZpcm13YXJlIGluIHRoZQorICogZGV2aWNlIG1pZ2h0IG5vdCBiZSBUdXgtcG93ZXJlZC4gIEVwc29uIHByb3ZpZGVzIHJlZmVyZW5jZSBmaXJtd2FyZSB0aGF0CisgKiBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlLiAgUHJvZHVjdCBkZXZlbG9wZXJzIGNhbiByZXVzZSBvciBtb2RpZnkgdGhhdAorICogY29kZSwgc3VjaCBhcyBieSB1c2luZyB0aGVpciBvd24gcHJvZHVjdCBhbmQgdmVuZG9yIGNvZGVzLgorICoKKyAqIFN1cHBvcnQgd2FzIGZyb20gSnVybyBCeXN0cmlja3kgPGJ5c3RyaWNreS5qdXJvQGVyZC5lcHNvbi5jb20+CisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbwllcHNvbjI4ODhfaW5mbyA9IHsKKwkuZGVzY3JpcHRpb24gPQkiRXBzb24gVVNCIERldmljZSIsCisJLmNoZWNrX2Nvbm5lY3QgPSBhbHdheXNfY29ubmVjdGVkLAorCisJLmluID0gNCwgLm91dCA9IDMsCit9OworCisjZW5kaWYJLyogQ09ORklHX1VTQl9FUFNPTjI4ODggKi8KKworDAorI2lmZGVmIENPTkZJR19VU0JfR0VORVNZUworI2RlZmluZQlIQVZFX0hBUkRXQVJFCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEdlbmVTeXMgR0w2MjBVU0ItQSAod3d3LmdlbmVzeXNsb2dpYy5jb20udHcpCisgKgorICogLi4uIHNob3VsZCBwYXJ0aWFsbHkgaW50ZXJvcCB3aXRoIHRoZSBXaW4zMiBkcml2ZXIgZm9yIHRoaXMgaGFyZHdhcmUKKyAqIFRoZSBHZW5lU3lzIGRvY3MgaW1wbHkgdGhlcmUncyBzb21lIE5ESVMgaXNzdWUgbW90aXZhdGluZyB0aGlzIGZyYW1pbmcuCisgKgorICogU29tZSBpbmZvIGZyb20gR2VuZVN5czoKKyAqICAtIEdMNjIwVVNCLUEgaXMgZnVsbCBkdXBsZXg7IEdMNjIwVVNCIGlzIG9ubHkgaGFsZiBkdXBsZXggZm9yIGJ1bGsuCisgKiAgICAoU29tZSBjYWJsZXMsIGxpa2UgdGhlIEJBRk8tMTAwYywgdXNlIHRoZSBoYWxmIGR1cGxleCB2ZXJzaW9uLikKKyAqICAtIEZvciB0aGUgZnVsbCBkdXBsZXggbW9kZWwsIHRoZSBsb3cgYml0IG9mIHRoZSB2ZXJzaW9uIGNvZGUgc2F5cworICogICAgd2hpY2ggc2lkZSBpcyB3aGljaCAoImxlZnQvcmlnaHQiKS4KKyAqICAtIEZvciB0aGUgaGFsZiBkdXBsZXggdHlwZSwgYSBjb250cm9sL2ludGVycnVwdCBoYW5kc2hha2Ugc2V0dGxlcworICogICAgdGhlIHRyYW5zZmVyIGRpcmVjdGlvbi4gIChUaGF0J3MgZGlzYWJsZWQgaGVyZSwgcGFydGlhbGx5IGNvZGVkLikKKyAqICAgIEEgY29udHJvbCBVUkIgd291bGQgYmxvY2sgdW50aWwgb3RoZXIgc2lkZSB3cml0ZXMgYW4gaW50ZXJydXB0LgorICoKKyAqIE9yaWdpbmFsIGNvZGUgZnJvbSBKaXVuLUppZSBIdWFuZyA8aHVhbmdqakBnZW5lc3lzbG9naWMuY29tLnR3PgorICogYW5kIG1lcmdlZCBpbnRvICJ1c2JuZXQiIGJ5IFN0YW5pc2xhdiBCcmFiZWMgPHV0eEBwZW5ndWluLmN6Pi4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvLyBjb250cm9sIG1zZyB3cml0ZSBjb21tYW5kCisjZGVmaW5lIEdFTkVMSU5LX0NPTk5FQ1RfV1JJVEUJCQkweEYwCisvLyBpbnRlcnJ1cHQgcGlwZSBpbmRleAorI2RlZmluZSBHRU5FTElOS19JTlRFUlJVUFRfUElQRQkJCTB4MDMKKy8vIGludGVycnVwdCByZWFkIGJ1ZmZlciBzaXplCisjZGVmaW5lIElOVEVSUlVQVF9CVUZTSVpFCQkJMHgwOAorLy8gaW50ZXJydXB0IHBpcGUgaW50ZXJ2YWwgdmFsdWUKKyNkZWZpbmUgR0VORUxJTktfSU5URVJSVVBUX0lOVEVSVkFMCQkweDEwCisvLyBtYXggdHJhbnNtaXQgcGFja2V0IG51bWJlciBwZXIgdHJhbnNtaXQKKyNkZWZpbmUgR0xfTUFYX1RSQU5TTUlUX1BBQ0tFVFMJCQkzMgorLy8gbWF4IHBhY2tldCBsZW5ndGgKKyNkZWZpbmUgR0xfTUFYX1BBQ0tFVF9MRU4JCQkxNTE0CisvLyBtYXggcmVjZWl2ZSBidWZmZXIgc2l6ZSAKKyNkZWZpbmUgR0xfUkNWX0JVRl9TSVpFCQlcCisJKCgoR0xfTUFYX1BBQ0tFVF9MRU4gKyA0KSAqIEdMX01BWF9UUkFOU01JVF9QQUNLRVRTKSArIDQpCisKK3N0cnVjdCBnbF9wYWNrZXQgeworCXUzMgkJcGFja2V0X2xlbmd0aDsKKwljaGFyCQlwYWNrZXRfZGF0YSBbMV07Cit9OworCitzdHJ1Y3QgZ2xfaGVhZGVyIHsKKwl1MzIJCQlwYWNrZXRfY291bnQ7CisJc3RydWN0IGdsX3BhY2tldAlwYWNrZXRzOworfTsKKworI2lmZGVmCUdFTkVMSU5LX0FDSworCisvLyBGSVhNRTogIHRoaXMgY29kZSBpcyBpbmNvbXBsZXRlLCBub3QgZGVidWdnZWQ7IGl0IGRvZXNuJ3QKKy8vIGhhbmRsZSBpbnRlcnJ1cHRzIGNvcnJlY3RseS4gIGludGVycnVwdHMgc2hvdWxkIGJlIGdlbmVyaWMKKy8vIGNvZGUgbGlrZSBhbGwgb3RoZXIgZGV2aWNlIEkvTywgYW55d2F5LgorCitzdHJ1Y3QgZ2xfcHJpdiB7IAorCXN0cnVjdCB1cmIJKmlycV91cmI7CisJY2hhcgkJaXJxX2J1ZiBbSU5URVJSVVBUX0JVRlNJWkVdOworfTsKKworc3RhdGljIGlubGluZSBpbnQgZ2xfY29udHJvbF93cml0ZSAoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZXF1ZXN0LCB1MTYgdmFsdWUpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyAoZGV2LT51ZGV2LAorCQkgICAgICB1c2Jfc25kY3RybHBpcGUgKGRldi0+dWRldiwgMCksCisJCSAgICAgIHJlcXVlc3QsCisJCSAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkgICAgICB2YWx1ZSwgCisJCSAgICAgIDAsCQkJLy8gaW5kZXgKKwkJICAgICAgMCwJCQkvLyBkYXRhIGJ1ZmZlcgorCQkgICAgICAwLAkJCS8vIHNpemUKKwkJICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBnbF9pbnRlcnJ1cHRfY29tcGxldGUgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOworCQorCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsCisJCQkJX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkJCV9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCX0KKworCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCWlmIChzdGF0dXMpCisJCWVyciAoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7Cit9CisKK3N0YXRpYyBpbnQgZ2xfaW50ZXJydXB0X3JlYWQgKHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwlzdHJ1Y3QgZ2xfcHJpdgkqcHJpdiA9IGRldi0+cHJpdl9kYXRhOworCWludAkJcmV0dmFsOworCisJLy8gaXNzdWUgdXNiIGludGVycnVwdCByZWFkCisJaWYgKHByaXYgJiYgcHJpdi0+aXJxX3VyYikgeworCQkvLyBzdWJtaXQgdXJiCisJCWlmICgocmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHByaXYtPmlycV91cmIsIEdGUF9LRVJORUwpKSAhPSAwKQorCQkJZGJnICgiZ2xfaW50ZXJydXB0X3JlYWQ6IHN1Ym1pdCBmYWlsIC0gJVguLi4iLCByZXR2YWwpOworCQllbHNlCisJCQlkYmcgKCJnbF9pbnRlcnJ1cHRfcmVhZDogc3VibWl0IHN1Y2Nlc3MuLi4iKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLy8gY2hlY2sgd2hldGhlciBhbm90aGVyIHNpZGUgaXMgY29ubmVjdGVkCitzdGF0aWMgaW50IGdlbmVsaW5rX2NoZWNrX2Nvbm5lY3QgKHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwlpbnQJCQlyZXR2YWw7CisKKwlkYmcgKCJnZW5lbGlua19jaGVja19jb25uZWN0Li4uIik7CisKKwkvLyBkZXRlY3Qgd2hldGhlciBhbm90aGVyIHNpZGUgaXMgY29ubmVjdGVkCisJaWYgKChyZXR2YWwgPSBnbF9jb250cm9sX3dyaXRlIChkZXYsIEdFTkVMSU5LX0NPTk5FQ1RfV1JJVEUsIDApKSAhPSAwKSB7CisJCWRiZyAoIiVzOiBnZW5lbGlua19jaGVja19jb25uZWN0IHdyaXRlIGZhaWwgLSAlWCIsCisJCQlkZXYtPm5ldC0+bmFtZSwgcmV0dmFsKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkvLyB1c2IgaW50ZXJydXB0IHJlYWQgdG8gYWNrIGFub3RoZXIgc2lkZSAKKwlpZiAoKHJldHZhbCA9IGdsX2ludGVycnVwdF9yZWFkIChkZXYpKSAhPSAwKSB7CisJCWRiZyAoIiVzOiBnZW5lbGlua19jaGVja19jb25uZWN0IHJlYWQgZmFpbCAtICVYIiwKKwkJCWRldi0+bmV0LT5uYW1lLCByZXR2YWwpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWRiZyAoIiVzOiBnZW5lbGlua19jaGVja19jb25uZWN0IHJlYWQgc3VjY2VzcyIsIGRldi0+bmV0LT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworLy8gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIHByaXZhdGUgZGF0YSBmb3IgZ2VuZWxpbmsKK3N0YXRpYyBpbnQgZ2VuZWxpbmtfaW5pdCAoc3RydWN0IHVzYm5ldCAqZGV2KQoreworCXN0cnVjdCBnbF9wcml2ICpwcml2OworCisJLy8gYWxsb2NhdGUgdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKKwlpZiAoKHByaXYgPSBrbWFsbG9jIChzaXplb2YgKnByaXYsIEdGUF9LRVJORUwpKSA9PSAwKSB7CisJCWRiZyAoIiVzOiBjYW5ub3QgYWxsb2NhdGUgcHJpdmF0ZSBkYXRhIHBlciBkZXZpY2UiLAorCQkJZGV2LT5uZXQtPm5hbWUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvLyBhbGxvY2F0ZSBpcnEgdXJiCisJaWYgKChwcml2LT5pcnFfdXJiID0gdXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCkpID09IDApIHsKKwkJZGJnICgiJXM6IGNhbm5vdCBhbGxvY2F0ZSBwcml2YXRlIGlycSB1cmIgcGVyIGRldmljZSIsCisJCQlkZXYtPm5ldC0+bmFtZSk7CisJCWtmcmVlIChwcml2KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLy8gZmlsbCBpcnEgdXJiCisJdXNiX2ZpbGxfaW50X3VyYiAocHJpdi0+aXJxX3VyYiwgZGV2LT51ZGV2LAorCQl1c2JfcmN2aW50cGlwZSAoZGV2LT51ZGV2LCBHRU5FTElOS19JTlRFUlJVUFRfUElQRSksCisJCXByaXYtPmlycV9idWYsIElOVEVSUlVQVF9CVUZTSVpFLAorCQlnbF9pbnRlcnJ1cHRfY29tcGxldGUsIDAsCisJCUdFTkVMSU5LX0lOVEVSUlVQVF9JTlRFUlZBTCk7CisKKwkvLyBzZXQgcHJpdmF0ZSBkYXRhIHBvaW50ZXIKKwlkZXYtPnByaXZfZGF0YSA9IHByaXY7CisKKwlyZXR1cm4gMDsKK30KKworLy8gcmVsZWFzZSB0aGUgcHJpdmF0ZSBkYXRhCitzdGF0aWMgaW50IGdlbmVsaW5rX2ZyZWUgKHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwlzdHJ1Y3QgZ2xfcHJpdgkqcHJpdiA9IGRldi0+cHJpdl9kYXRhOworCisJaWYgKCFwcml2KSAKKwkJcmV0dXJuIDA7CisKKy8vIEZJWE1FOiAgY2FuJ3QgY2FuY2VsIGhlcmU7IGl0J3Mgc3luY2hyb25vdXMsIGFuZAorLy8gc2hvdWxkIGhhdmUgaGFwcGVuZWQgZWFybGllciBpbiBhbnkgY2FzZSAoaW50ZXJydXB0CisvLyBoYW5kbGluZyBuZWVkcyB0byBiZSBnZW5lcmljKQorCisJLy8gY2FuY2VsIGlycSB1cmIgZmlyc3QKKwl1c2Jfa2lsbF91cmIgKHByaXYtPmlycV91cmIpOworCisJLy8gZnJlZSBpcnEgdXJiCisJdXNiX2ZyZWVfdXJiIChwcml2LT5pcnFfdXJiKTsKKworCS8vIGZyZWUgdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKKwlrZnJlZSAocHJpdik7CisKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCisKK3N0YXRpYyBpbnQgZ2VuZWxpbmtfcnhfZml4dXAgKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgZ2xfaGVhZGVyCSpoZWFkZXI7CisJc3RydWN0IGdsX3BhY2tldAkqcGFja2V0OworCXN0cnVjdCBza19idWZmCQkqZ2xfc2tiOworCXUzMgkJCXNpemU7CisKKwloZWFkZXIgPSAoc3RydWN0IGdsX2hlYWRlciAqKSBza2ItPmRhdGE7CisKKwkvLyBnZXQgdGhlIHBhY2tldCBjb3VudCBvZiB0aGUgcmVjZWl2ZWQgc2tiCisJbGUzMl90b19jcHVzICgmaGVhZGVyLT5wYWNrZXRfY291bnQpOworCWlmICgoaGVhZGVyLT5wYWNrZXRfY291bnQgPiBHTF9NQVhfVFJBTlNNSVRfUEFDS0VUUykKKwkJCXx8IChoZWFkZXItPnBhY2tldF9jb3VudCA8IDApKSB7CisJCWRiZyAoImdlbmVsaW5rOiBpbnZhbGlkIHJlY2VpdmVkIHBhY2tldCBjb3VudCAlZCIsCisJCQloZWFkZXItPnBhY2tldF9jb3VudCk7CisJCXJldHVybiAwOworCX0KKworCS8vIHNldCB0aGUgY3VycmVudCBwYWNrZXQgcG9pbnRlciB0byB0aGUgZmlyc3QgcGFja2V0CisJcGFja2V0ID0gJmhlYWRlci0+cGFja2V0czsKKworCS8vIGRlY3JlbWVudCB0aGUgbGVuZ3RoIGZvciB0aGUgcGFja2V0IGNvdW50IHNpemUgNCBieXRlcworCXNrYl9wdWxsIChza2IsIDQpOworCisJd2hpbGUgKGhlYWRlci0+cGFja2V0X2NvdW50ID4gMSkgeworCQkvLyBnZXQgdGhlIHBhY2tldCBsZW5ndGgKKwkJc2l6ZSA9IHBhY2tldC0+cGFja2V0X2xlbmd0aDsKKworCQkvLyB0aGlzIG1heSBiZSBhIGJyb2tlbiBwYWNrZXQKKwkJaWYgKHNpemUgPiBHTF9NQVhfUEFDS0VUX0xFTikgeworCQkJZGJnICgiZ2VuZWxpbms6IGludmFsaWQgcnggbGVuZ3RoICVkIiwgc2l6ZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8vIGFsbG9jYXRlIHRoZSBza2IgZm9yIHRoZSBpbmRpdmlkdWFsIHBhY2tldAorCQlnbF9za2IgPSBhbGxvY19za2IgKHNpemUsIEdGUF9BVE9NSUMpOworCQlpZiAoZ2xfc2tiKSB7CisKKwkJCS8vIGNvcHkgdGhlIHBhY2tldCBkYXRhIHRvIHRoZSBuZXcgc2tiCisJCQltZW1jcHkoc2tiX3B1dChnbF9za2IsIHNpemUpLCBwYWNrZXQtPnBhY2tldF9kYXRhLCBzaXplKTsKKwkJCXNrYl9yZXR1cm4gKGRldiwgc2tiKTsKKwkJfQorCisJCS8vIGFkdmFuY2UgdG8gdGhlIG5leHQgcGFja2V0CisJCXBhY2tldCA9IChzdHJ1Y3QgZ2xfcGFja2V0ICopCisJCQkmcGFja2V0LT5wYWNrZXRfZGF0YSBbc2l6ZV07CisJCWhlYWRlci0+cGFja2V0X2NvdW50LS07CisKKwkJLy8gc2hpZnQgdGhlIGRhdGEgcG9pbnRlciB0byB0aGUgbmV4dCBnbF9wYWNrZXQKKwkJc2tiX3B1bGwgKHNrYiwgc2l6ZSArIDQpOworCX0KKworCS8vIHNraXAgdGhlIHBhY2tldCBsZW5ndGggZmllbGQgNCBieXRlcworCXNrYl9wdWxsIChza2IsIDQpOworCisJaWYgKHNrYi0+bGVuID4gR0xfTUFYX1BBQ0tFVF9MRU4pIHsKKwkJZGJnICgiZ2VuZWxpbms6IGludmFsaWQgcnggbGVuZ3RoICVkIiwgc2tiLT5sZW4pOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCitnZW5lbGlua190eF9maXh1cCAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmxhZ3MpCit7CisJaW50IAlwYWRsZW47CisJaW50CWxlbmd0aCA9IHNrYi0+bGVuOworCWludAloZWFkcm9vbSA9IHNrYl9oZWFkcm9vbSAoc2tiKTsKKwlpbnQJdGFpbHJvb20gPSBza2JfdGFpbHJvb20gKHNrYik7CisJdTMyCSpwYWNrZXRfY291bnQ7CisJdTMyCSpwYWNrZXRfbGVuOworCisJLy8gRklYTUU6ICBtYWdpYyBudW1iZXJzLCBibGVlY2gKKwlwYWRsZW4gPSAoKHNrYi0+bGVuICsgKDQgKyA0KjEpKSAlIDY0KSA/IDAgOiAxOworCisJaWYgKCghc2tiX2Nsb25lZCAoc2tiKSkKKwkJCSYmICgoaGVhZHJvb20gKyB0YWlscm9vbSkgPj0gKHBhZGxlbiArICg0ICsgNCoxKSkpKSB7CisJCWlmICgoaGVhZHJvb20gPCAoNCArIDQqMSkpIHx8ICh0YWlscm9vbSA8IHBhZGxlbikpIHsKKwkJCXNrYi0+ZGF0YSA9IG1lbW1vdmUgKHNrYi0+aGVhZCArICg0ICsgNCoxKSwKKwkJCQkJICAgICBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJCXNrYi0+dGFpbCA9IHNrYi0+ZGF0YSArIHNrYi0+bGVuOworCQl9CisJfSBlbHNlIHsKKwkJc3RydWN0IHNrX2J1ZmYJKnNrYjI7CisJCXNrYjIgPSBza2JfY29weV9leHBhbmQgKHNrYiwgKDQgKyA0KjEpICwgcGFkbGVuLCBmbGFncyk7CisJCWRldl9rZnJlZV9za2JfYW55IChza2IpOworCQlza2IgPSBza2IyOworCQlpZiAoIXNrYikKKwkJCXJldHVybiBOVUxMOworCX0KKworCS8vIGF0dGFjaCB0aGUgcGFja2V0IGNvdW50IHRvIHRoZSBoZWFkZXIKKwlwYWNrZXRfY291bnQgPSAodTMyICopIHNrYl9wdXNoIChza2IsICg0ICsgNCoxKSk7CisJcGFja2V0X2xlbiA9IHBhY2tldF9jb3VudCArIDE7CisKKwkvLyBGSVhNRSBsaXR0bGUgZW5kaWFuPworCSpwYWNrZXRfY291bnQgPSAxOworCSpwYWNrZXRfbGVuID0gbGVuZ3RoOworCisJLy8gYWRkIHBhZGRpbmcgYnl0ZQorCWlmICgoc2tiLT5sZW4gJSBkZXYtPm1heHBhY2tldCkgPT0gMCkKKwkJc2tiX3B1dCAoc2tiLCAxKTsKKworCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8JZ2VuZWxpbmtfaW5mbyA9IHsKKwkuZGVzY3JpcHRpb24gPQkiR2VuZXN5cyBHZW5lTGluayIsCisJLmZsYWdzID0JRkxBR19GUkFNSU5HX0dMIHwgRkxBR19OT19TRVRJTlQsCisJLnJ4X2ZpeHVwID0JZ2VuZWxpbmtfcnhfZml4dXAsCisJLnR4X2ZpeHVwID0JZ2VuZWxpbmtfdHhfZml4dXAsCisKKwkuaW4gPSAxLCAub3V0ID0gMiwKKworI2lmZGVmCUdFTkVMSU5LX0FDSworCS5jaGVja19jb25uZWN0ID1nZW5lbGlua19jaGVja19jb25uZWN0LAorI2VuZGlmCit9OworCisjZW5kaWYgLyogQ09ORklHX1VTQl9HRU5FU1lTICovCisKKworDAorI2lmZGVmCUNPTkZJR19VU0JfTkVUMTA4MAorI2RlZmluZQlIQVZFX0hBUkRXQVJFCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIE5ldGNoaXAgMTA4MCBkcml2ZXIgLi4uIGh0dHA6Ly93d3cubmV0Y2hpcC5jb20KKyAqIFVzZWQgaW4gTGFwTGluayBjYWJsZXMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIGRldl9wYWNrZXRfaWQJZGF0YVswXQorI2RlZmluZSBmcmFtZV9lcnJvcnMJZGF0YVsxXQorCisvKgorICogTmV0Q2hpcCBmcmFtaW5nIG9mIGV0aGVybmV0IHBhY2tldHMsIHN1cHBvcnRpbmcgYWRkaXRpb25hbCBlcnJvcgorICogY2hlY2tzIGZvciBsaW5rcyB0aGF0IG1heSBkcm9wIGJ1bGsgcGFja2V0cyBmcm9tIGluc2lkZSBtZXNzYWdlcy4KKyAqIE9kZCBVU0IgbGVuZ3RoID09IGFsd2F5cyBzaG9ydCByZWFkIGZvciBsYXN0IHVzYiBwYWNrZXQuCisgKgktIG5jX2hlYWRlcgorICoJLSBFdGhlcm5ldCBoZWFkZXIgKDE0IGJ5dGVzKQorICoJLSBwYXlsb2FkCisgKgktIChvcHRpb25hbCBwYWRkaW5nIGJ5dGUsIGlmIG5lZWRlZCBzbyBsZW5ndGggYmVjb21lcyBvZGQpCisgKgktIG5jX3RyYWlsZXIKKyAqCisgKiBUaGlzIGZyYW1pbmcgaXMgdG8gYmUgYXZvaWRlZCBmb3Igbm9uLU5ldENoaXAgZGV2aWNlcy4KKyAqLworCitzdHJ1Y3QgbmNfaGVhZGVyIHsJCS8vIHBhY2tlZDoKKwlfX2xlMTYJaGRyX2xlbjsJCS8vIHNpemVvZiBuY19oZWFkZXIgKExFLCBhbGwpCisJX19sZTE2CXBhY2tldF9sZW47CQkvLyBwYXlsb2FkIHNpemUgKGluY2x1ZGluZyBldGhoZHIpCisJX19sZTE2CXBhY2tldF9pZDsJCS8vIGRldGVjdHMgZHJvcHBlZCBwYWNrZXRzCisjZGVmaW5lIE1JTl9IRUFERVIJNgorCisJLy8gYWxsIGVsc2UgaXMgb3B0aW9uYWwsIGFuZCBtdXN0IHN0YXJ0IHdpdGg6CisJLy8gdTE2CXZlbmRvcklkOwkJLy8gZnJvbSB1c2ItaWYKKwkvLyB1MTYJcHJvZHVjdElkOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKKyNkZWZpbmUJUEFEX0JZVEUJKCh1bnNpZ25lZCBjaGFyKTB4QUMpCisKK3N0cnVjdCBuY190cmFpbGVyIHsKKwlfX2xlMTYJcGFja2V0X2lkOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKKy8vIHBhY2tldHMgbWF5IHVzZSBGTEFHX0ZSQU1JTkdfTkMgYW5kIG9wdGlvbmFsIHBhZAorI2RlZmluZSBGUkFNRURfU0laRShtdHUpIChzaXplb2YgKHN0cnVjdCBuY19oZWFkZXIpIFwKKwkJCQkrIHNpemVvZiAoc3RydWN0IGV0aGhkcikgXAorCQkJCSsgKG10dSkgXAorCQkJCSsgMSBcCisJCQkJKyBzaXplb2YgKHN0cnVjdCBuY190cmFpbGVyKSkKKworI2RlZmluZSBNSU5fRlJBTUVECUZSQU1FRF9TSVpFKDApCisKKworLyoKKyAqIFplcm8gbWVhbnMgbm8gdGltZW91dDsgZWxzZSwgaG93IGxvbmcgYSA2NCBieXRlIGJ1bGsgcGFja2V0IG1heSBiZSBxdWV1ZWQKKyAqIGJlZm9yZSB0aGUgaGFyZHdhcmUgZHJvcHMgaXQuICBJZiB0aGF0J3MgZG9uZSwgdGhlIGRyaXZlciB3aWxsIG5lZWQgdG8KKyAqIGZyYW1lIG5ldHdvcmsgcGFja2V0cyB0byBndWFyZCBhZ2FpbnN0IHRoZSBkcm9wcGVkIFVTQiBwYWNrZXRzLiAgVGhlIHdpbjMyCisgKiBkcml2ZXIgc2V0cyB0aGlzIGZvciBib3RoIHNpZGVzIG9mIHRoZSBsaW5rLgorICovCisjZGVmaW5lCU5DX1JFQURfVFRMX01TCSgodTgpMjU1KQkvLyBtcworCisvKgorICogV2UgaWdub3JlIG1vc3QgcmVnaXN0ZXJzIGFuZCBFRVBST00gY29udGVudHMuCisgKi8KKyNkZWZpbmUJUkVHX1VTQkNUTAkoKHU4KTB4MDQpCisjZGVmaW5lIFJFR19UVEwJCSgodTgpMHgxMCkKKyNkZWZpbmUgUkVHX1NUQVRVUwkoKHU4KTB4MTEpCisKKy8qCisgKiBWZW5kb3Igc3BlY2lmaWMgcmVxdWVzdHMgdG8gcmVhZC93cml0ZSBkYXRhCisgKi8KKyNkZWZpbmUJUkVRVUVTVF9SRUdJU1RFUgkoKHU4KTB4MTApCisjZGVmaW5lCVJFUVVFU1RfRUVQUk9NCQkoKHU4KTB4MTEpCisKK3N0YXRpYyBpbnQKK25jX3ZlbmRvcl9yZWFkIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlcSwgdTggcmVnbnVtLCB1MTYgKnJldHZhbF9wdHIpCit7CisJaW50IHN0YXR1cyA9IHVzYl9jb250cm9sX21zZyAoZGV2LT51ZGV2LAorCQl1c2JfcmN2Y3RybHBpcGUgKGRldi0+dWRldiwgMCksCisJCXJlcSwKKwkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCTAsIHJlZ251bSwKKwkJcmV0dmFsX3B0ciwgc2l6ZW9mICpyZXR2YWxfcHRyLAorCQlDT05UUk9MX1RJTUVPVVRfTVMpOworCWlmIChzdGF0dXMgPiAwKQorCQlzdGF0dXMgPSAwOworCWlmICghc3RhdHVzKQorCQlsZTE2X3RvX2NwdXMgKHJldHZhbF9wdHIpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CituY19yZWdpc3Rlcl9yZWFkIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZ251bSwgdTE2ICpyZXR2YWxfcHRyKQoreworCXJldHVybiBuY192ZW5kb3JfcmVhZCAoZGV2LCBSRVFVRVNUX1JFR0lTVEVSLCByZWdudW0sIHJldHZhbF9wdHIpOworfQorCisvLyBubyByZXR2YWwgLi4uIGNhbiBiZWNvbWUgYXN5bmMsIHVzYWJsZSBpbl9pbnRlcnJ1cHQoKQorc3RhdGljIHZvaWQKK25jX3ZlbmRvcl93cml0ZSAoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZXEsIHU4IHJlZ251bSwgdTE2IHZhbHVlKQoreworCXVzYl9jb250cm9sX21zZyAoZGV2LT51ZGV2LAorCQl1c2Jfc25kY3RybHBpcGUgKGRldi0+dWRldiwgMCksCisJCXJlcSwKKwkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQl2YWx1ZSwgcmVnbnVtLAorCQlOVUxMLCAwLAkJCS8vIGRhdGEgaXMgaW4gc2V0dXAgcGFja2V0CisJCUNPTlRST0xfVElNRU9VVF9NUyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorbmNfcmVnaXN0ZXJfd3JpdGUgKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnbnVtLCB1MTYgdmFsdWUpCit7CisJbmNfdmVuZG9yX3dyaXRlIChkZXYsIFJFUVVFU1RfUkVHSVNURVIsIHJlZ251bSwgdmFsdWUpOworfQorCisKKyNpZiAwCitzdGF0aWMgdm9pZCBuY19kdW1wX3JlZ2lzdGVycyAoc3RydWN0IHVzYm5ldCAqZGV2KQoreworCXU4CXJlZzsKKwl1MTYJKnZwID0ga21hbGxvYyAoc2l6ZW9mICh1MTYpKTsKKworCWlmICghdnApIHsKKwkJZGJnICgibm8gbWVtb3J5PyIpOworCQlyZXR1cm47CisJfQorCisJZGJnICgiJXMgcmVnaXN0ZXJzOiIsIGRldi0+bmV0LT5uYW1lKTsKKwlmb3IgKHJlZyA9IDA7IHJlZyA8IDB4MjA7IHJlZysrKSB7CisJCWludCByZXR2YWw7CisKKwkJLy8gcmVhZGluZyBzb21lIHJlZ2lzdGVycyBpcyB0cm91YmxlCisJCWlmIChyZWcgPj0gMHgwOCAmJiByZWcgPD0gMHhmKQorCQkJY29udGludWU7CisJCWlmIChyZWcgPj0gMHgxMiAmJiByZWcgPD0gMHgxZSkKKwkJCWNvbnRpbnVlOworCisJCXJldHZhbCA9IG5jX3JlZ2lzdGVyX3JlYWQgKGRldiwgcmVnLCB2cCk7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJZGJnICgiJXMgcmVnIFsweCV4XSA9PT4gZXJyb3IgJWQiLAorCQkJCWRldi0+bmV0LT5uYW1lLCByZWcsIHJldHZhbCk7CisJCWVsc2UKKwkJCWRiZyAoIiVzIHJlZyBbMHgleF0gPSAweCV4IiwKKwkJCQlkZXYtPm5ldC0+bmFtZSwgcmVnLCAqdnApOworCX0KKwlrZnJlZSAodnApOworfQorI2VuZGlmCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIENvbnRyb2wgcmVnaXN0ZXIKKyAqLworCisjZGVmaW5lCVVTQkNUTF9XUklUQUJMRV9NQVNLCTB4MWYwZgorLy8gYml0cyAxNS0xMyByZXNlcnZlZCwgci9vCisjZGVmaW5lCVVTQkNUTF9FTkFCTEVfTEFORwkoMSA8PCAxMikKKyNkZWZpbmUJVVNCQ1RMX0VOQUJMRV9NRkdSCSgxIDw8IDExKQorI2RlZmluZQlVU0JDVExfRU5BQkxFX1BST0QJKDEgPDwgMTApCisjZGVmaW5lCVVTQkNUTF9FTkFCTEVfU0VSSUFMCSgxIDw8IDkpCisjZGVmaW5lCVVTQkNUTF9FTkFCTEVfREVGQVVMVFMJKDEgPDwgOCkKKy8vIGJpdHMgNy00IHJlc2VydmVkLCByL28KKyNkZWZpbmUJVVNCQ1RMX0ZMVVNIX09USEVSCSgxIDw8IDMpCisjZGVmaW5lCVVTQkNUTF9GTFVTSF9USElTCSgxIDw8IDIpCisjZGVmaW5lCVVTQkNUTF9ESVNDT05OX09USEVSCSgxIDw8IDEpCisjZGVmaW5lCVVTQkNUTF9ESVNDT05OX1RISVMJKDEgPDwgMCkKKworc3RhdGljIGlubGluZSB2b2lkIG5jX2R1bXBfdXNiY3RsIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiB1c2JjdGwpCit7CisJaWYgKCFuZXRpZl9tc2dfbGluayAoZGV2KSkKKwkJcmV0dXJuOworCWRldmRiZyAoZGV2LCAibmV0MTA4MCAlcy0lcyB1c2JjdGwgMHgleDolcyVzJXMlcyVzOyIKKwkJCSIgdGhpcyVzJXM7IgorCQkJIiBvdGhlciVzJXM7IHIvbyAweCV4IiwKKwkJZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLCBkZXYtPnVkZXYtPmRldnBhdGgsCisJCXVzYmN0bCwKKwkJKHVzYmN0bCAmIFVTQkNUTF9FTkFCTEVfTEFORykgPyAiIGxhbmciIDogIiIsCisJCSh1c2JjdGwgJiBVU0JDVExfRU5BQkxFX01GR1IpID8gIiBtZmdyIiA6ICIiLAorCQkodXNiY3RsICYgVVNCQ1RMX0VOQUJMRV9QUk9EKSA/ICIgcHJvZCIgOiAiIiwKKwkJKHVzYmN0bCAmIFVTQkNUTF9FTkFCTEVfU0VSSUFMKSA/ICIgc2VyaWFsIiA6ICIiLAorCQkodXNiY3RsICYgVVNCQ1RMX0VOQUJMRV9ERUZBVUxUUykgPyAiIGRlZmF1bHRzIiA6ICIiLAorCisJCSh1c2JjdGwgJiBVU0JDVExfRkxVU0hfT1RIRVIpID8gIiBGTFVTSCIgOiAiIiwKKwkJKHVzYmN0bCAmIFVTQkNUTF9ESVNDT05OX09USEVSKSA/ICIgRElTIiA6ICIiLAorCQkodXNiY3RsICYgVVNCQ1RMX0ZMVVNIX1RISVMpID8gIiBGTFVTSCIgOiAiIiwKKwkJKHVzYmN0bCAmIFVTQkNUTF9ESVNDT05OX1RISVMpID8gIiBESVMiIDogIiIsCisJCXVzYmN0bCAmIH5VU0JDVExfV1JJVEFCTEVfTUFTSworCQkpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogU3RhdHVzIHJlZ2lzdGVyCisgKi8KKworI2RlZmluZQlTVEFUVVNfUE9SVF9BCQkoMSA8PCAxNSkKKworI2RlZmluZQlTVEFUVVNfQ09OTl9PVEhFUgkoMSA8PCAxNCkKKyNkZWZpbmUJU1RBVFVTX1NVU1BFTkRfT1RIRVIJKDEgPDwgMTMpCisjZGVmaW5lCVNUQVRVU19NQUlMQk9YX09USEVSCSgxIDw8IDEyKQorI2RlZmluZQlTVEFUVVNfUEFDS0VUU19PVEhFUihuKQkoKChuKSA+PiA4KSAmJiAweDAzKQorCisjZGVmaW5lCVNUQVRVU19DT05OX1RISVMJKDEgPDwgNikKKyNkZWZpbmUJU1RBVFVTX1NVU1BFTkRfVEhJUwkoMSA8PCA1KQorI2RlZmluZQlTVEFUVVNfTUFJTEJPWF9USElTCSgxIDw8IDQpCisjZGVmaW5lCVNUQVRVU19QQUNLRVRTX1RISVMobikJKCgobikgPj4gMCkgJiYgMHgwMykKKworI2RlZmluZQlTVEFUVVNfVU5TUEVDX01BU0sJMHgwYzhjCisjZGVmaW5lCVNUQVRVU19OT0lTRV9NQVNLIAkoKHUxNil+KDB4MDMwM3xTVEFUVVNfVU5TUEVDX01BU0spKQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuY19kdW1wX3N0YXR1cyAoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgc3RhdHVzKQoreworCWlmICghbmV0aWZfbXNnX2xpbmsgKGRldikpCisJCXJldHVybjsKKwlkZXZkYmcgKGRldiwgIm5ldDEwODAgJXMtJXMgc3RhdHVzIDB4JXg6IgorCQkJIiB0aGlzICglYykgUEtUPSVkJXMlcyVzOyIKKwkJCSIgb3RoZXIgUEtUPSVkJXMlcyVzOyB1bnNwZWMgMHgleCIsCisJCWRldi0+dWRldi0+YnVzLT5idXNfbmFtZSwgZGV2LT51ZGV2LT5kZXZwYXRoLAorCQlzdGF0dXMsCisKKwkJLy8gWFhYIHRoZSBwYWNrZXQgY291bnRzIGRvbid0IHNlZW0gcmlnaHQKKwkJLy8gKDEgYXQgcmVzZXQsIG5vdCAwKTsgbWF5YmUgVU5TUEVDIHRvbworCisJCShzdGF0dXMgJiBTVEFUVVNfUE9SVF9BKSA/ICdBJyA6ICdCJywKKwkJU1RBVFVTX1BBQ0tFVFNfVEhJUyAoc3RhdHVzKSwKKwkJKHN0YXR1cyAmIFNUQVRVU19DT05OX1RISVMpID8gIiBDT04iIDogIiIsCisJCShzdGF0dXMgJiBTVEFUVVNfU1VTUEVORF9USElTKSA/ICIgU1VTIiA6ICIiLAorCQkoc3RhdHVzICYgU1RBVFVTX01BSUxCT1hfVEhJUykgPyAiIE1CT1giIDogIiIsCisKKwkJU1RBVFVTX1BBQ0tFVFNfT1RIRVIgKHN0YXR1cyksCisJCShzdGF0dXMgJiBTVEFUVVNfQ09OTl9PVEhFUikgPyAiIENPTiIgOiAiIiwKKwkJKHN0YXR1cyAmIFNUQVRVU19TVVNQRU5EX09USEVSKSA/ICIgU1VTIiA6ICIiLAorCQkoc3RhdHVzICYgU1RBVFVTX01BSUxCT1hfT1RIRVIpID8gIiBNQk9YIiA6ICIiLAorCisJCXN0YXR1cyAmIFNUQVRVU19VTlNQRUNfTUFTSworCQkpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogVFRMIHJlZ2lzdGVyCisgKi8KKworI2RlZmluZQlUVExfVEhJUyh0dGwpCSgweDAwZmYgJiB0dGwpCisjZGVmaW5lCVRUTF9PVEhFUih0dGwpCSgweDAwZmYgJiAodHRsID4+IDgpKQorI2RlZmluZSBNS19UVEwodGhpcyxvdGhlcikJKCh1MTYpKCgob3RoZXIpPDw4KXwoMHgwMGZmJih0aGlzKSkpKQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmNfZHVtcF90dGwgKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IHR0bCkKK3sKKwlpZiAobmV0aWZfbXNnX2xpbmsgKGRldikpCisJCWRldmRiZyAoZGV2LCAibmV0MTA4MCAlcy0lcyB0dGwgMHgleCB0aGlzID0gJWQsIG90aGVyID0gJWQiLAorCQkJZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLCBkZXYtPnVkZXYtPmRldnBhdGgsCisJCQl0dGwsIFRUTF9USElTICh0dGwpLCBUVExfT1RIRVIgKHR0bCkpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG5ldDEwODBfcmVzZXQgKHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwl1MTYJCXVzYmN0bCwgc3RhdHVzLCB0dGw7CisJdTE2CQkqdnAgPSBrbWFsbG9jIChzaXplb2YgKHUxNiksIEdGUF9LRVJORUwpOworCWludAkJcmV0dmFsOworCisJaWYgKCF2cCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvLyBuY19kdW1wX3JlZ2lzdGVycyAoZGV2KTsKKworCWlmICgocmV0dmFsID0gbmNfcmVnaXN0ZXJfcmVhZCAoZGV2LCBSRUdfU1RBVFVTLCB2cCkpIDwgMCkgeworCQlkYmcgKCJjYW4ndCByZWFkICVzLSVzIHN0YXR1czogJWQiLAorCQkJZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLCBkZXYtPnVkZXYtPmRldnBhdGgsIHJldHZhbCk7CisJCWdvdG8gZG9uZTsKKwl9CisJc3RhdHVzID0gKnZwOworCW5jX2R1bXBfc3RhdHVzIChkZXYsIHN0YXR1cyk7CisKKwlpZiAoKHJldHZhbCA9IG5jX3JlZ2lzdGVyX3JlYWQgKGRldiwgUkVHX1VTQkNUTCwgdnApKSA8IDApIHsKKwkJZGJnICgiY2FuJ3QgcmVhZCBVU0JDVEwsICVkIiwgcmV0dmFsKTsKKwkJZ290byBkb25lOworCX0KKwl1c2JjdGwgPSAqdnA7CisJbmNfZHVtcF91c2JjdGwgKGRldiwgdXNiY3RsKTsKKworCW5jX3JlZ2lzdGVyX3dyaXRlIChkZXYsIFJFR19VU0JDVEwsCisJCQlVU0JDVExfRkxVU0hfVEhJUyB8IFVTQkNUTF9GTFVTSF9PVEhFUik7CisKKwlpZiAoKHJldHZhbCA9IG5jX3JlZ2lzdGVyX3JlYWQgKGRldiwgUkVHX1RUTCwgdnApKSA8IDApIHsKKwkJZGJnICgiY2FuJ3QgcmVhZCBUVEwsICVkIiwgcmV0dmFsKTsKKwkJZ290byBkb25lOworCX0KKwl0dGwgPSAqdnA7CisJLy8gbmNfZHVtcF90dGwgKGRldiwgdHRsKTsKKworCW5jX3JlZ2lzdGVyX3dyaXRlIChkZXYsIFJFR19UVEwsCisJCQlNS19UVEwgKE5DX1JFQURfVFRMX01TLCBUVExfT1RIRVIgKHR0bCkpICk7CisJZGJnICgiJXM6IGFzc2lnbmVkIFRUTCwgJWQgbXMiLCBkZXYtPm5ldC0+bmFtZSwgTkNfUkVBRF9UVExfTVMpOworCisJaWYgKG5ldGlmX21zZ19saW5rIChkZXYpKQorCQlkZXZpbmZvIChkZXYsICJwb3J0ICVjLCBwZWVyICVzY29ubmVjdGVkIiwKKwkJCShzdGF0dXMgJiBTVEFUVVNfUE9SVF9BKSA/ICdBJyA6ICdCJywKKwkJCShzdGF0dXMgJiBTVEFUVVNfQ09OTl9PVEhFUikgPyAiIiA6ICJkaXMiCisJCQkpOworCXJldHZhbCA9IDA7CisKK2RvbmU6CisJa2ZyZWUgKHZwKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IG5ldDEwODBfY2hlY2tfY29ubmVjdCAoc3RydWN0IHVzYm5ldCAqZGV2KQoreworCWludAkJCXJldHZhbDsKKwl1MTYJCQlzdGF0dXM7CisJdTE2CQkJKnZwID0ga21hbGxvYyAoc2l6ZW9mICh1MTYpLCBHRlBfS0VSTkVMKTsKKworCWlmICghdnApCisJCXJldHVybiAtRU5PTUVNOworCXJldHZhbCA9IG5jX3JlZ2lzdGVyX3JlYWQgKGRldiwgUkVHX1NUQVRVUywgdnApOworCXN0YXR1cyA9ICp2cDsKKwlrZnJlZSAodnApOworCWlmIChyZXR2YWwgIT0gMCkgeworCQlkYmcgKCIlcyBuZXQxMDgwX2NoZWNrX2Nvbm4gcmVhZCAtICVkIiwgZGV2LT5uZXQtPm5hbWUsIHJldHZhbCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCWlmICgoc3RhdHVzICYgU1RBVFVTX0NPTk5fT1RIRVIpICE9IFNUQVRVU19DT05OX09USEVSKQorCQlyZXR1cm4gLUVOT0xJTks7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5jX2ZsdXNoX2NvbXBsZXRlIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWtmcmVlICh1cmItPmNvbnRleHQpOworCXVzYl9mcmVlX3VyYih1cmIpOworfQorCitzdGF0aWMgdm9pZCBuY19lbnN1cmVfc3luYyAoc3RydWN0IHVzYm5ldCAqZGV2KQoreworCWRldi0+ZnJhbWVfZXJyb3JzKys7CisJaWYgKGRldi0+ZnJhbWVfZXJyb3JzID4gNSkgeworCQlzdHJ1Y3QgdXJiCQkqdXJiOworCQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0CSpyZXE7CisJCWludAkJCXN0YXR1czsKKworCQkvKiBTZW5kIGEgZmx1c2ggKi8KKwkJdXJiID0gdXNiX2FsbG9jX3VyYiAoMCwgU0xBQl9BVE9NSUMpOworCQlpZiAoIXVyYikKKwkJCXJldHVybjsKKworCQlyZXEgPSBrbWFsbG9jIChzaXplb2YgKnJlcSwgR0ZQX0FUT01JQyk7CisJCWlmICghcmVxKSB7CisJCQl1c2JfZnJlZV91cmIgKHVyYik7CisJCQlyZXR1cm47CisJCX0KKworCQlyZXEtPmJSZXF1ZXN0VHlwZSA9IFVTQl9ESVJfT1VUCisJCQl8IFVTQl9UWVBFX1ZFTkRPUgorCQkJfCBVU0JfUkVDSVBfREVWSUNFOworCQlyZXEtPmJSZXF1ZXN0ID0gUkVRVUVTVF9SRUdJU1RFUjsKKwkJcmVxLT53VmFsdWUgPSBjcHVfdG9fbGUxNiAoVVNCQ1RMX0ZMVVNIX1RISVMKKwkJCQl8IFVTQkNUTF9GTFVTSF9PVEhFUik7CisJCXJlcS0+d0luZGV4ID0gY3B1X3RvX2xlMTYgKFJFR19VU0JDVEwpOworCQlyZXEtPndMZW5ndGggPSBjcHVfdG9fbGUxNiAoMCk7CisKKwkJLyogcXVldWUgYW4gYXN5bmMgY29udHJvbCByZXF1ZXN0LCB3ZSBkb24ndCBuZWVkCisJCSAqIHRvIGRvIGFueXRoaW5nIHdoZW4gaXQgZmluaXNoZXMgZXhjZXB0IGNsZWFuIHVwLgorCQkgKi8KKwkJdXNiX2ZpbGxfY29udHJvbF91cmIgKHVyYiwgZGV2LT51ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlIChkZXYtPnVkZXYsIDApLAorCQkJKHVuc2lnbmVkIGNoYXIgKikgcmVxLAorCQkJTlVMTCwgMCwKKwkJCW5jX2ZsdXNoX2NvbXBsZXRlLCByZXEpOworCQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHN0YXR1cykgeworCQkJa2ZyZWUgKHJlcSk7CisJCQl1c2JfZnJlZV91cmIgKHVyYik7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAobmV0aWZfbXNnX3J4X2VyciAoZGV2KSkKKwkJCWRldmRiZyAoZGV2LCAiZmx1c2ggbmV0MTA4MDsgdG9vIG1hbnkgZnJhbWluZyBlcnJvcnMiKTsKKwkJZGV2LT5mcmFtZV9lcnJvcnMgPSAwOworCX0KK30KKworc3RhdGljIGludCBuZXQxMDgwX3J4X2ZpeHVwIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG5jX2hlYWRlcgkqaGVhZGVyOworCXN0cnVjdCBuY190cmFpbGVyCSp0cmFpbGVyOworCXUxNgkJCWhkcl9sZW4sIHBhY2tldF9sZW47CisKKwlpZiAoIShza2ItPmxlbiAmIDB4MDEpCisJCQl8fCBNSU5fRlJBTUVEID4gc2tiLT5sZW4KKwkJCXx8IHNrYi0+bGVuID4gRlJBTUVEX1NJWkUgKGRldi0+bmV0LT5tdHUpKSB7CisJCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJCWRiZyAoInJ4IGZyYW1lc2l6ZSAlZCByYW5nZSAlZC4uJWQgbXR1ICVkIiwgc2tiLT5sZW4sCisJCQkoaW50KU1JTl9GUkFNRUQsIChpbnQpRlJBTUVEX1NJWkUgKGRldi0+bmV0LT5tdHUpLAorCQkJZGV2LT5uZXQtPm10dSk7CisJCW5jX2Vuc3VyZV9zeW5jIChkZXYpOworCQlyZXR1cm4gMDsKKwl9CisKKwloZWFkZXIgPSAoc3RydWN0IG5jX2hlYWRlciAqKSBza2ItPmRhdGE7CisJaGRyX2xlbiA9IGxlMTZfdG9fY3B1cCAoJmhlYWRlci0+aGRyX2xlbik7CisJcGFja2V0X2xlbiA9IGxlMTZfdG9fY3B1cCAoJmhlYWRlci0+cGFja2V0X2xlbik7CisJaWYgKEZSQU1FRF9TSVpFIChwYWNrZXRfbGVuKSA+IE1BWF9QQUNLRVQpIHsKKwkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkJZGJnICgicGFja2V0IHRvbyBiaWcsICVkIiwgcGFja2V0X2xlbik7CisJCW5jX2Vuc3VyZV9zeW5jIChkZXYpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKGhkcl9sZW4gPCBNSU5fSEVBREVSKSB7CisJCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJCWRiZyAoImhlYWRlciB0b28gc2hvcnQsICVkIiwgaGRyX2xlbik7CisJCW5jX2Vuc3VyZV9zeW5jIChkZXYpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKGhkcl9sZW4gPiBNSU5fSEVBREVSKSB7CisJCS8vIG91dCBvZiBiYW5kIGRhdGEgZm9yIHVzPworCQlkYmcgKCJoZWFkZXIgT09CLCAlZCBieXRlcyIsIGhkcl9sZW4gLSBNSU5fSEVBREVSKTsKKwkJbmNfZW5zdXJlX3N5bmMgKGRldik7CisJCS8vIHN3aXRjaCAodmVuZG9yL3Byb2R1Y3QgaWRzKSB7IC4uLiB9CisJfQorCXNrYl9wdWxsIChza2IsIGhkcl9sZW4pOworCisJdHJhaWxlciA9IChzdHJ1Y3QgbmNfdHJhaWxlciAqKQorCQkoc2tiLT5kYXRhICsgc2tiLT5sZW4gLSBzaXplb2YgKnRyYWlsZXIpOworCXNrYl90cmltIChza2IsIHNrYi0+bGVuIC0gc2l6ZW9mICp0cmFpbGVyKTsKKworCWlmICgocGFja2V0X2xlbiAmIDB4MDEpID09IDApIHsKKwkJaWYgKHNrYi0+ZGF0YSBbcGFja2V0X2xlbl0gIT0gUEFEX0JZVEUpIHsKKwkJCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJCQlkYmcgKCJiYWQgcGFkIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlza2JfdHJpbSAoc2tiLCBza2ItPmxlbiAtIDEpOworCX0KKwlpZiAoc2tiLT5sZW4gIT0gcGFja2V0X2xlbikgeworCQlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCQlkYmcgKCJiYWQgcGFja2V0IGxlbiAlZCAoZXhwZWN0ZWQgJWQpIiwKKwkJCXNrYi0+bGVuLCBwYWNrZXRfbGVuKTsKKwkJbmNfZW5zdXJlX3N5bmMgKGRldik7CisJCXJldHVybiAwOworCX0KKwlpZiAoaGVhZGVyLT5wYWNrZXRfaWQgIT0gZ2V0X3VuYWxpZ25lZCAoJnRyYWlsZXItPnBhY2tldF9pZCkpIHsKKwkJZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOworCQlkYmcgKCIoMisgZHJvcHBlZCkgcnggcGFja2V0X2lkIG1pc21hdGNoIDB4JXggMHgleCIsCisJCQlsZTE2X3RvX2NwdSAoaGVhZGVyLT5wYWNrZXRfaWQpLAorCQkJbGUxNl90b19jcHUgKHRyYWlsZXItPnBhY2tldF9pZCkpOworCQlyZXR1cm4gMDsKKwl9CisjaWYgMAorCWRldmRiZyAoZGV2LCAiZnJhbWUgPHJ4IGggJWQgcCAlZCBpZCAlZCIsIGhlYWRlci0+aGRyX2xlbiwKKwkJaGVhZGVyLT5wYWNrZXRfbGVuLCBoZWFkZXItPnBhY2tldF9pZCk7CisjZW5kaWYKKwlkZXYtPmZyYW1lX2Vycm9ycyA9IDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCituZXQxMDgwX3R4X2ZpeHVwIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsIGludCBmbGFncykKK3sKKwlpbnQJCQlwYWRsZW47CisJc3RydWN0IHNrX2J1ZmYJCSpza2IyOworCisJcGFkbGVuID0gKChza2ItPmxlbiArIHNpemVvZiAoc3RydWN0IG5jX2hlYWRlcikKKwkJCSsgc2l6ZW9mIChzdHJ1Y3QgbmNfdHJhaWxlcikpICYgMHgwMSkgPyAwIDogMTsKKwlpZiAoIXNrYl9jbG9uZWQgKHNrYikpIHsKKwkJaW50CWhlYWRyb29tID0gc2tiX2hlYWRyb29tIChza2IpOworCQlpbnQJdGFpbHJvb20gPSBza2JfdGFpbHJvb20gKHNrYik7CisKKwkJaWYgKChwYWRsZW4gKyBzaXplb2YgKHN0cnVjdCBuY190cmFpbGVyKSkgPD0gdGFpbHJvb20KKwkJCSAgICAmJiBzaXplb2YgKHN0cnVjdCBuY19oZWFkZXIpIDw9IGhlYWRyb29tKQorCQkJLyogVGhlcmUncyBlbm91Z2ggaGVhZCBhbmQgdGFpbCByb29tICovCisJCQlyZXR1cm4gc2tiOworCisJCWlmICgoc2l6ZW9mIChzdHJ1Y3QgbmNfaGVhZGVyKSArIHBhZGxlbgorCQkJCQkrIHNpemVvZiAoc3RydWN0IG5jX3RyYWlsZXIpKSA8CisJCQkJKGhlYWRyb29tICsgdGFpbHJvb20pKSB7CisJCQkvKiBUaGVyZSdzIGVub3VnaCB0b3RhbCByb29tLCBzbyBqdXN0IHJlYWRqdXN0ICovCisJCQlza2ItPmRhdGEgPSBtZW1tb3ZlIChza2ItPmhlYWQKKwkJCQkJCSsgc2l6ZW9mIChzdHJ1Y3QgbmNfaGVhZGVyKSwKKwkJCQkJICAgIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCQkJc2tiLT50YWlsID0gc2tiLT5kYXRhICsgc2tiLT5sZW47CisJCQlyZXR1cm4gc2tiOworCQl9CisJfQorCisJLyogQ3JlYXRlIGEgbmV3IHNrYiB0byB1c2Ugd2l0aCB0aGUgY29ycmVjdCBzaXplICovCisJc2tiMiA9IHNrYl9jb3B5X2V4cGFuZCAoc2tiLAorCQkJCXNpemVvZiAoc3RydWN0IG5jX2hlYWRlciksCisJCQkJc2l6ZW9mIChzdHJ1Y3QgbmNfdHJhaWxlcikgKyBwYWRsZW4sCisJCQkJZmxhZ3MpOworCWRldl9rZnJlZV9za2JfYW55IChza2IpOworCXJldHVybiBza2IyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCW5ldDEwODBfaW5mbyA9IHsKKwkuZGVzY3JpcHRpb24gPQkiTmV0Q2hpcCBUdXJib0NPTk5FQ1QiLAorCS5mbGFncyA9CUZMQUdfRlJBTUlOR19OQywKKwkucmVzZXQgPQluZXQxMDgwX3Jlc2V0LAorCS5jaGVja19jb25uZWN0ID1uZXQxMDgwX2NoZWNrX2Nvbm5lY3QsCisJLnJ4X2ZpeHVwID0JbmV0MTA4MF9yeF9maXh1cCwKKwkudHhfZml4dXAgPQluZXQxMDgwX3R4X2ZpeHVwLAorfTsKKworI2VuZGlmIC8qIENPTkZJR19VU0JfTkVUMTA4MCAqLworCisKKwwKKyNpZmRlZiBDT05GSUdfVVNCX1BMMjMwMQorI2RlZmluZQlIQVZFX0hBUkRXQVJFCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFByb2xpZmljIFBMLTIzMDEvUEwtMjMwMiBkcml2ZXIgLi4uIGh0dHA6Ly93d3cucHJvbGlmaWN0ZWNoLmNvbQorICoKKyAqIFRoZSBwcm90b2NvbCBhbmQgaGFuZHNoYWtpbmcgdXNlZCBoZXJlIHNob3VsZCBiZSBidWctY29tcGF0aWJsZQorICogd2l0aCB0aGUgTGludXggMi4yICJwbHVzYiIgZHJpdmVyLCBieSBEZXRpIEZsaWVnbC4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogQml0cyAwLTQgY2FuIGJlIHVzZWQgZm9yIHNvZnR3YXJlIGhhbmRzaGFraW5nOyB0aGV5J3JlIHNldCBmcm9tCisgKiBvbmUgZW5kLCBjbGVhcmVkIGZyb20gdGhlIG90aGVyLCAicmVhZCIgd2l0aCB0aGUgaW50ZXJydXB0IGJ5dGUuCisgKi8KKyNkZWZpbmUJUExfU19FTgkJKDE8PDcpCQkvKiAoZmVhdHVyZSBvbmx5KSBzdXNwZW5kIGVuYWJsZSAqLworLyogcmVzZXJ2ZWQgYml0IC0tIHJ4IHJlYWR5ICg2KSA/ICovCisjZGVmaW5lCVBMX1RYX1JFQURZCSgxPDw1KQkJLyogKGludGVycnVwdCBvbmx5KSB0cmFuc21pdCByZWFkeSAqLworI2RlZmluZQlQTF9SRVNFVF9PVVQJKDE8PDQpCQkvKiByZXNldCBvdXRwdXQgcGlwZSAqLworI2RlZmluZQlQTF9SRVNFVF9JTgkoMTw8MykJCS8qIHJlc2V0IGlucHV0IHBpcGUgKi8KKyNkZWZpbmUJUExfVFhfQwkJKDE8PDIpCQkvKiB0cmFuc21pc3Npb24gY29tcGxldGUgKi8KKyNkZWZpbmUJUExfVFhfUkVRCSgxPDwxKQkJLyogdHJhbnNtaXNzaW9uIHJlY2VpdmVkICovCisjZGVmaW5lCVBMX1BFRVJfRQkoMTw8MCkJCS8qIHBlZXIgZXhpc3RzICovCisKK3N0YXRpYyBpbmxpbmUgaW50CitwbF92ZW5kb3JfcmVxIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlcSwgdTggdmFsLCB1OCBpbmRleCkKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnIChkZXYtPnVkZXYsCisJCXVzYl9yY3ZjdHJscGlwZSAoZGV2LT51ZGV2LCAwKSwKKwkJcmVxLAorCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJdmFsLCBpbmRleCwKKwkJTlVMTCwgMCwKKwkJQ09OVFJPTF9USU1FT1VUX01TKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3BsX2NsZWFyX1F1aWNrTGlua19mZWF0dXJlcyAoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgdmFsKQoreworCXJldHVybiBwbF92ZW5kb3JfcmVxIChkZXYsIDEsICh1OCkgdmFsLCAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3BsX3NldF9RdWlja0xpbmtfZmVhdHVyZXMgKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IHZhbCkKK3sKKwlyZXR1cm4gcGxfdmVuZG9yX3JlcSAoZGV2LCAzLCAodTgpIHZhbCwgMCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcGxfcmVzZXQgKHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwkvKiBzb21lIHVuaXRzIHNlZW0gdG8gbmVlZCB0aGlzIHJlc2V0LCBvdGhlcnMgcmVqZWN0IGl0IHV0dGVybHkuCisJICogRklYTUUgYmUgbW9yZSBsaWtlICJuYXBsaW5rIiBvciB3aW5kb3dzIGRyaXZlcnMuCisJICovCisJKHZvaWQpIHBsX3NldF9RdWlja0xpbmtfZmVhdHVyZXMgKGRldiwKKwkJUExfU19FTnxQTF9SRVNFVF9PVVR8UExfUkVTRVRfSU58UExfUEVFUl9FKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbwlwcm9saWZpY19pbmZvID0geworCS5kZXNjcmlwdGlvbiA9CSJQcm9saWZpYyBQTC0yMzAxL1BMLTIzMDIiLAorCS5mbGFncyA9CUZMQUdfTk9fU0VUSU5ULAorCQkvKiBzb21lIFBMLTIzMDIgdmVyc2lvbnMgc2VlbSB0byBmYWlsIHVzYl9zZXRfaW50ZXJmYWNlKCkgKi8KKwkucmVzZXQgPQlwbF9yZXNldCwKK307CisKKyNlbmRpZiAvKiBDT05GSUdfVVNCX1BMMjMwMSAqLworCisMCisjaWZkZWYgQ09ORklHX1VTQl9LQzIxOTAKKyNkZWZpbmUgSEFWRV9IQVJEV0FSRQorc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBrYzIxOTBfaW5mbyA9IHsKKwkuZGVzY3JpcHRpb24gPSAgIktDIFRlY2hub2xvZ3kgS0MtMTkwIiwKK307CisjZW5kaWYgLyogQ09ORklHX1VTQl9LQzIxOTAgKi8KKworDAorI2lmZGVmCUNPTkZJR19VU0JfQVJNTElOVVgKKyNkZWZpbmUJSEFWRV9IQVJEV0FSRQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBJbnRlbCdzIFNBLTExMDAgY2hpcCBpbnRlZ3JhdGVzIGJhc2ljIFVTQiBzdXBwb3J0LCBhbmQgaXMgdXNlZAorICogaW4gUERBcyBsaWtlIHNvbWUgaVBhcXMsIHRoZSBZb3B5LCBzb21lIFphdXJ1cyBtb2RlbHMsIGFuZCBtb3JlLgorICogV2hlbiB0aGV5IHJ1biBMaW51eCwgYXJjaC9hcm0vbWFjaC1zYTExMDAvdXNiLWV0aC5jIG1heSBiZSB1c2VkIHRvCisgKiBuZXR3b3JrIHVzaW5nIG1pbmltYWwgVVNCIGZyYW1pbmcgZGF0YS4KKyAqCisgKiBUaGlzIGRlc2NyaWJlcyB0aGUgZHJpdmVyIGN1cnJlbnRseSBpbiBzdGFuZGFyZCBBUk0gTGludXgga2VybmVscy4KKyAqIFRoZSBaYXVydXMgdXNlcyBhIGRpZmZlcmVudCBkcml2ZXIgKHNlZSBsYXRlcikuCisgKgorICogUFhBMjV4IGFuZCBQWEEyMTAgdXNlIFhTY2FsZSBjb3JlcyAoQVJNIHY1VEUpIHdpdGggYmV0dGVyIFVTQiBzdXBwb3J0CisgKiBhbmQgZGlmZmVyZW50IFVTQiBlbmRwb2ludCBudW1iZXJpbmcgdGhhbiB0aGUgU0ExMTAwIGRldmljZXMuICBUaGUKKyAqIG1hY2gtcHhhL3VzYi1ldGguYyBkcml2ZXIgcmUtdXNlcyB0aGUgZGV2aWNlIGlkcyBmcm9tIG1hY2gtc2ExMTAwCisgKiBzbyB3ZSByZWx5IG9uIHRoZSBlbmRwb2ludCBkZXNjcmlwdG9ycy4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCWxpbnV4ZGV2X2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0JIkxpbnV4IERldmljZSIsCisJLmNoZWNrX2Nvbm5lY3QgPSBhbHdheXNfY29ubmVjdGVkLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbwl5b3B5X2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0JIllvcHkiLAorCS5jaGVja19jb25uZWN0ID0gYWx3YXlzX2Nvbm5lY3RlZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8JYmxvYl9pbmZvID0geworCS5kZXNjcmlwdGlvbiA9CSJCb290IExvYWRlciBPQmplY3QiLAorCS5jaGVja19jb25uZWN0ID0gYWx3YXlzX2Nvbm5lY3RlZCwKK307CisKKyNlbmRpZgkvKiBDT05GSUdfVVNCX0FSTUxJTlVYICovCisKKwwKKyNpZmRlZiBDT05GSUdfVVNCX1pBVVJVUworI2RlZmluZQlIQVZFX0hBUkRXQVJFCisKKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBaYXVydXMgaXMgYWxzbyBhIFNBLTExMTAgYmFzZWQgUERBLCBidXQgb25lIHVzaW5nIGEgZGlmZmVyZW50IGRyaXZlcgorICogKGFuZCBmcmFtaW5nKSBmb3IgaXRzIFVTQiBzbGF2ZS9nYWRnZXQgY29udHJvbGxlciB0aGFuIHRoZSBjYXNlIGFib3ZlLgorICoKKyAqIEZvciB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoYXQgZHJpdmVyLCB0aGUgbWFpbiB3YXkgdGhhdCBmcmFtaW5nIGlzCisgKiBub25zdGFuZGFyZCAoYWxzbyBmcm9tIHBlcnNwZWN0aXZlIG9mIHRoZSBDREMgZXRoZXJuZXQgbW9kZWwhKSBpcyBhCisgKiBjcmMzMiwgYWRkZWQgdG8gaGVscCBkZXRlY3Qgd2hlbiBzb21lIHNhMTEwMCB1c2ItdG8tbWVtb3J5IERNQSBlcnJhdGEKKyAqIGhhdmVuJ3QgYmVlbiBmdWxseSB3b3JrZWQgYXJvdW5kLiAgQWxzbywgYWxsIFphdXJpaSB1c2UgdGhlIHNhbWUKKyAqIGRlZmF1bHQgRXRoZXJuZXQgYWRkcmVzcy4KKyAqCisgKiBQWEEgYmFzZWQgbW9kZWxzIHVzZSB0aGUgc2FtZSBmcmFtaW5nLCBhbmQgYWxzbyBjYW4ndCBpbXBsZW1lbnQKKyAqIHNldF9pbnRlcmZhY2UgcHJvcGVybHkuCisgKgorICogQWxsIGtub3duIFphdXJpaSBsaWUgYWJvdXQgdGhlaXIgc3RhbmRhcmRzIGNvbmZvcm1hbmNlLiAgTW9zdCBsaWUgYnkKKyAqIHNheWluZyB0aGV5IHN1cHBvcnQgQ0RDIEV0aGVybmV0LiAgU29tZSBsaWUgYW5kIHNheSB0aGV5IHN1cHBvcnQgQ0RDCisgKiBNRExNIChhcyBpZiBmb3IgYWNjZXNzIHRvIGNlbGwgcGhvbmUgbW9kZW1zKS4gIFNvbWVvbmUsIHBsZWFzZSBiZWF0IAorICogb24gU2hhcnAgZm9yIGEgd2hpbGUgd2l0aCBhIGNsdWVzdGljay4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgoremF1cnVzX3R4X2ZpeHVwIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsIGludCBmbGFncykKK3sKKwlpbnQJCQlwYWRsZW47CisJc3RydWN0IHNrX2J1ZmYJCSpza2IyOworCisJcGFkbGVuID0gMjsKKwlpZiAoIXNrYl9jbG9uZWQgKHNrYikpIHsKKwkJaW50CXRhaWxyb29tID0gc2tiX3RhaWxyb29tIChza2IpOworCQlpZiAoKHBhZGxlbiArIDQpIDw9IHRhaWxyb29tKQorCQkJZ290byBkb25lOworCX0KKwlza2IyID0gc2tiX2NvcHlfZXhwYW5kIChza2IsIDAsIDQgKyBwYWRsZW4sIGZsYWdzKTsKKwlkZXZfa2ZyZWVfc2tiX2FueSAoc2tiKTsKKwlza2IgPSBza2IyOworCWlmIChza2IpIHsKKwkJdTMyCQlmY3M7Citkb25lOgorCQlmY3MgPSBjcmMzMl9sZSAofjAsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCQlmY3MgPSB+ZmNzOworCisJCSpza2JfcHV0IChza2IsIDEpID0gZmNzICAgICAgICYgMHhmZjsKKwkJKnNrYl9wdXQgKHNrYiwgMSkgPSAoZmNzPj4gOCkgJiAweGZmOworCQkqc2tiX3B1dCAoc2tiLCAxKSA9IChmY3M+PjE2KSAmIDB4ZmY7CisJCSpza2JfcHV0IChza2IsIDEpID0gKGZjcz4+MjQpICYgMHhmZjsKKwl9CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbwl6YXVydXNfc2w1eDAwX2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0JIlNoYXJwIFphdXJ1cyBTTC01eDAwIiwKKwkuZmxhZ3MgPQlGTEFHX0ZSQU1JTkdfWiwKKwkuY2hlY2tfY29ubmVjdCA9IGFsd2F5c19jb25uZWN0ZWQsCisJLmJpbmQgPQkJZ2VuZXJpY19jZGNfYmluZCwKKwkudW5iaW5kID0JY2RjX3VuYmluZCwKKwkudHhfZml4dXAgPSAJemF1cnVzX3R4X2ZpeHVwLAorfTsKKyNkZWZpbmUJWkFVUlVTX1NUUk9OR0FSTV9JTkZPCSgodW5zaWduZWQgbG9uZykmemF1cnVzX3NsNXgwMF9pbmZvKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCXphdXJ1c19weGFfaW5mbyA9IHsKKwkuZGVzY3JpcHRpb24gPQkiU2hhcnAgWmF1cnVzLCBQWEEtMnh4IGJhc2VkIiwKKwkuZmxhZ3MgPQlGTEFHX0ZSQU1JTkdfWiwKKwkuY2hlY2tfY29ubmVjdCA9IGFsd2F5c19jb25uZWN0ZWQsCisJLmJpbmQgPQkJZ2VuZXJpY19jZGNfYmluZCwKKwkudW5iaW5kID0JY2RjX3VuYmluZCwKKwkudHhfZml4dXAgPSAJemF1cnVzX3R4X2ZpeHVwLAorfTsKKyNkZWZpbmUJWkFVUlVTX1BYQV9JTkZPCQkoKHVuc2lnbmVkIGxvbmcpJnphdXJ1c19weGFfaW5mbykKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbwl6YXVydXNfcHhhX21kbG1faW5mbyA9IHsKKwkuZGVzY3JpcHRpb24gPQkiU2hhcnAgWmF1cnVzLCBQWEEtMjU1IGJhc2VkIiwKKwkuZmxhZ3MgPQlGTEFHX0ZSQU1JTkdfWiwKKwkuY2hlY2tfY29ubmVjdCA9IGFsd2F5c19jb25uZWN0ZWQsCisJLnR4X2ZpeHVwID0gCXphdXJ1c190eF9maXh1cCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8Jb2x5bXB1c19teGxfaW5mbyA9IHsKKwkuZGVzY3JpcHRpb24gPQkiT2x5bXB1cyBSMTAwMCIsCisJLmZsYWdzID0JRkxBR19GUkFNSU5HX1osCisJLmNoZWNrX2Nvbm5lY3QgPSBhbHdheXNfY29ubmVjdGVkLAorCS5iaW5kID0JCWdlbmVyaWNfY2RjX2JpbmQsCisJLnVuYmluZCA9CWNkY191bmJpbmQsCisJLnR4X2ZpeHVwID0gCXphdXJ1c190eF9maXh1cCwKK307CisjZGVmaW5lCU9MWU1QVVNfTVhMX0lORk8JKCh1bnNpZ25lZCBsb25nKSZvbHltcHVzX214bF9pbmZvKQorCisjZWxzZQorCisvKiBibGFja2xpc3QgYWxsIHRob3NlIGRldmljZXMgKi8KKyNkZWZpbmUJWkFVUlVTX1NUUk9OR0FSTV9JTkZPCTAKKyNkZWZpbmUJWkFVUlVTX1BYQV9JTkZPCQkwCisjZGVmaW5lCU9MWU1QVVNfTVhMX0lORk8JMAorCisjZW5kaWYKKworDAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogTmV0d29yayBEZXZpY2UgRHJpdmVyIChwZWVyIGxpbmsgdG8gIkhvc3QgRGV2aWNlIiwgZnJvbSBVU0IgaG9zdCkKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHVzYm5ldF9jaGFuZ2VfbXR1IChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBpbnQgbmV3X210dSkKK3sKKwlzdHJ1Y3QgdXNibmV0CSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCisJaWYgKG5ld19tdHUgPD0gTUlOX1BBQ0tFVCB8fCBuZXdfbXR1ID4gTUFYX1BBQ0tFVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisjaWZkZWYJQ09ORklHX1VTQl9ORVQxMDgwCisJaWYgKCgoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MpICYgRkxBR19GUkFNSU5HX05DKSkgeworCQlpZiAoRlJBTUVEX1NJWkUgKG5ld19tdHUpID4gTUFYX1BBQ0tFVCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKyNlbmRpZgorI2lmZGVmCUNPTkZJR19VU0JfR0VORVNZUworCWlmICgoKGRldi0+ZHJpdmVyX2luZm8tPmZsYWdzKSAmIEZMQUdfRlJBTUlOR19HTCkKKwkJCSYmIG5ld19tdHUgPiBHTF9NQVhfUEFDS0VUX0xFTikKKwkJcmV0dXJuIC1FSU5WQUw7CisjZW5kaWYKKwkvLyBubyBzZWNvbmQgemVyby1sZW5ndGggcGFja2V0IHJlYWQgd2FudGVkIGFmdGVyIG10dS1zaXplZCBwYWNrZXRzCisJaWYgKCgobmV3X210dSArIHNpemVvZiAoc3RydWN0IGV0aGhkcikpICUgZGV2LT5tYXhwYWNrZXQpID09IDApCisJCXJldHVybiAtRURPTTsKKwluZXQtPm10dSA9IG5ld19tdHU7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqdXNibmV0X2dldF9zdGF0cyAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlzdHJ1Y3QgdXNibmV0CSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCXJldHVybiAmZGV2LT5zdGF0czsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogc29tZSBMSyAyLjQgSENEcyBvb3BzZWQgaWYgd2UgZnJlZWQgb3IgcmVzdWJtaXR0ZWQgdXJicyBmcm9tCisgKiBjb21wbGV0aW9uIGNhbGxiYWNrcy4gIDIuNSBzaG91bGQgaGF2ZSBmaXhlZCB0aG9zZSBidWdzLi4uCisgKi8KKworc3RhdGljIHZvaWQgZGVmZXJfYmggKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCSpsaXN0ID0gc2tiLT5saXN0OworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZsaXN0LT5sb2NrLCBmbGFncyk7CisJX19za2JfdW5saW5rIChza2IsIGxpc3QpOworCXNwaW5fdW5sb2NrICgmbGlzdC0+bG9jayk7CisJc3Bpbl9sb2NrICgmZGV2LT5kb25lLmxvY2spOworCV9fc2tiX3F1ZXVlX3RhaWwgKCZkZXYtPmRvbmUsIHNrYik7CisJaWYgKGRldi0+ZG9uZS5xbGVuID09IDEpCisJCXRhc2tsZXRfc2NoZWR1bGUgKCZkZXYtPmJoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT5kb25lLmxvY2ssIGZsYWdzKTsKK30KKworLyogc29tZSB3b3JrIGNhbid0IGJlIGRvbmUgaW4gdGFza2xldHMsIHNvIHdlIHVzZSBrZXZlbnRkCisgKgorICogTk9URTogIGFubm95aW5nIGFzeW1tZXRyeTogIGlmIGl0J3MgYWN0aXZlLCBzY2hlZHVsZV93b3JrKCkgZmFpbHMsCisgKiBidXQgdGFza2xldF9zY2hlZHVsZSgpIGRvZXNuJ3QuICBob3BlIHRoZSBmYWlsdXJlIGlzIHJhcmUuCisgKi8KK3N0YXRpYyB2b2lkIGRlZmVyX2tldmVudCAoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgd29yaykKK3sKKwlzZXRfYml0ICh3b3JrLCAmZGV2LT5mbGFncyk7CisJaWYgKCFzY2hlZHVsZV93b3JrICgmZGV2LT5rZXZlbnQpKQorCQlkZXZlcnIgKGRldiwgImtldmVudCAlZCBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQiLCB3b3JrKTsKKwllbHNlCisJCWRldmRiZyAoZGV2LCAia2V2ZW50ICVkIHNjaGVkdWxlZCIsIHdvcmspOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCByeF9jb21wbGV0ZSAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK3N0YXRpYyB2b2lkIHJ4X3N1Ym1pdCAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIsIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnNrYjsKKwlzdHJ1Y3Qgc2tiX2RhdGEJCSplbnRyeTsKKwlpbnQJCQlyZXR2YWwgPSAwOworCXVuc2lnbmVkIGxvbmcJCWxvY2tmbGFnczsKKwlzaXplX3QJCQlzaXplOworCisjaWZkZWYgQ09ORklHX1VTQl9ORVQxMDgwCisJaWYgKGRldi0+ZHJpdmVyX2luZm8tPmZsYWdzICYgRkxBR19GUkFNSU5HX05DKQorCQlzaXplID0gRlJBTUVEX1NJWkUgKGRldi0+bmV0LT5tdHUpOworCWVsc2UKKyNlbmRpZgorI2lmZGVmIENPTkZJR19VU0JfR0VORVNZUworCWlmIChkZXYtPmRyaXZlcl9pbmZvLT5mbGFncyAmIEZMQUdfRlJBTUlOR19HTCkKKwkJc2l6ZSA9IEdMX1JDVl9CVUZfU0laRTsKKwllbHNlCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNCX1pBVVJVUworCWlmIChkZXYtPmRyaXZlcl9pbmZvLT5mbGFncyAmIEZMQUdfRlJBTUlOR19aKQorCQlzaXplID0gNiArIChzaXplb2YgKHN0cnVjdCBldGhoZHIpICsgZGV2LT5uZXQtPm10dSk7CisJZWxzZQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1VTQl9STkRJUworCWlmIChkZXYtPmRyaXZlcl9pbmZvLT5mbGFncyAmIEZMQUdfRlJBTUlOR19STikKKwkJc2l6ZSA9IFJORElTX01BWF9UUkFOU0ZFUjsKKwllbHNlCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNCX0FYODgxN1gKKwlpZiAoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MgJiBGTEFHX0ZSQU1JTkdfQVgpCisJCXNpemUgPSAyMDQ4OworCWVsc2UKKyNlbmRpZgorCQlzaXplID0gKHNpemVvZiAoc3RydWN0IGV0aGhkcikgKyBkZXYtPm5ldC0+bXR1KTsKKworCWlmICgoc2tiID0gYWxsb2Nfc2tiIChzaXplICsgTkVUX0lQX0FMSUdOLCBmbGFncykpID09IE5VTEwpIHsKKwkJaWYgKG5ldGlmX21zZ19yeF9lcnIgKGRldikpCisJCQlkZXZkYmcgKGRldiwgIm5vIHJ4IHNrYiIpOworCQlkZWZlcl9rZXZlbnQgKGRldiwgRVZFTlRfUlhfTUVNT1JZKTsKKwkJdXNiX2ZyZWVfdXJiICh1cmIpOworCQlyZXR1cm47CisJfQorCXNrYl9yZXNlcnZlIChza2IsIE5FVF9JUF9BTElHTik7CisKKwllbnRyeSA9IChzdHJ1Y3Qgc2tiX2RhdGEgKikgc2tiLT5jYjsKKwllbnRyeS0+dXJiID0gdXJiOworCWVudHJ5LT5kZXYgPSBkZXY7CisJZW50cnktPnN0YXRlID0gcnhfc3RhcnQ7CisJZW50cnktPmxlbmd0aCA9IDA7CisKKwl1c2JfZmlsbF9idWxrX3VyYiAodXJiLCBkZXYtPnVkZXYsIGRldi0+aW4sCisJCXNrYi0+ZGF0YSwgc2l6ZSwgcnhfY29tcGxldGUsIHNrYik7CisJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfQVNZTkNfVU5MSU5LOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkZXYtPnJ4cS5sb2NrLCBsb2NrZmxhZ3MpOworCisJaWYgKG5ldGlmX3J1bm5pbmcgKGRldi0+bmV0KQorCQkJJiYgbmV0aWZfZGV2aWNlX3ByZXNlbnQgKGRldi0+bmV0KQorCQkJJiYgIXRlc3RfYml0IChFVkVOVF9SWF9IQUxULCAmZGV2LT5mbGFncykpIHsKKwkJc3dpdGNoIChyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKSl7IAorCQljYXNlIC1FUElQRToKKwkJCWRlZmVyX2tldmVudCAoZGV2LCBFVkVOVF9SWF9IQUxUKTsKKwkJCWJyZWFrOworCQljYXNlIC1FTk9NRU06CisJCQlkZWZlcl9rZXZlbnQgKGRldiwgRVZFTlRfUlhfTUVNT1JZKTsKKwkJCWJyZWFrOworCQljYXNlIC1FTk9ERVY6CisJCQlpZiAobmV0aWZfbXNnX2lmZG93biAoZGV2KSkKKwkJCQlkZXZkYmcgKGRldiwgImRldmljZSBnb25lIik7CisJCQluZXRpZl9kZXZpY2VfZGV0YWNoIChkZXYtPm5ldCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlmIChuZXRpZl9tc2dfcnhfZXJyIChkZXYpKQorCQkJCWRldmRiZyAoZGV2LCAicnggc3VibWl0LCAlZCIsIHJldHZhbCk7CisJCQl0YXNrbGV0X3NjaGVkdWxlICgmZGV2LT5iaCk7CisJCQlicmVhazsKKwkJY2FzZSAwOgorCQkJX19za2JfcXVldWVfdGFpbCAoJmRldi0+cnhxLCBza2IpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG5ldGlmX21zZ19pZmRvd24gKGRldikpCisJCQlkZXZkYmcgKGRldiwgInJ4OiBzdG9wcGVkIik7CisJCXJldHZhbCA9IC1FTk9MSU5LOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT5yeHEubG9jaywgbG9ja2ZsYWdzKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9rZnJlZV9za2JfYW55IChza2IpOworCQl1c2JfZnJlZV91cmIgKHVyYik7CisJfQorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCByeF9wcm9jZXNzIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKGRldi0+ZHJpdmVyX2luZm8tPnJ4X2ZpeHVwCisJCQkmJiAhZGV2LT5kcml2ZXJfaW5mby0+cnhfZml4dXAgKGRldiwgc2tiKSkKKwkJZ290byBlcnJvcjsKKwkvLyBlbHNlIG5ldHdvcmsgc3RhY2sgcmVtb3ZlcyBleHRyYSBieXRlIGlmIHdlIGZvcmNlZCBhIHNob3J0IHBhY2tldAorCisJaWYgKHNrYi0+bGVuKQorCQlza2JfcmV0dXJuIChkZXYsIHNrYik7CisJZWxzZSB7CisJCWlmIChuZXRpZl9tc2dfcnhfZXJyIChkZXYpKQorCQkJZGV2ZGJnIChkZXYsICJkcm9wIik7CitlcnJvcjoKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJc2tiX3F1ZXVlX3RhaWwgKCZkZXYtPmRvbmUsIHNrYik7CisJfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCByeF9jb21wbGV0ZSAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHNrYl9kYXRhCQkqZW50cnkgPSAoc3RydWN0IHNrYl9kYXRhICopIHNrYi0+Y2I7CisJc3RydWN0IHVzYm5ldAkJKmRldiA9IGVudHJ5LT5kZXY7CisJaW50CQkJdXJiX3N0YXR1cyA9IHVyYi0+c3RhdHVzOworCisJc2tiX3B1dCAoc2tiLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCWVudHJ5LT5zdGF0ZSA9IHJ4X2RvbmU7CisJZW50cnktPnVyYiA9IE5VTEw7CisKKwlzd2l0Y2ggKHVyYl9zdGF0dXMpIHsKKwkgICAgLy8gc3VjY2VzcworCSAgICBjYXNlIDA6CisJCWlmIChNSU5fUEFDS0VUID4gc2tiLT5sZW4gfHwgc2tiLT5sZW4gPiBNQVhfUEFDS0VUKSB7CisJCQllbnRyeS0+c3RhdGUgPSByeF9jbGVhbnVwOworCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJaWYgKG5ldGlmX21zZ19yeF9lcnIgKGRldikpCisJCQkJZGV2ZGJnIChkZXYsICJyeCBsZW5ndGggJWQiLCBza2ItPmxlbik7CisJCX0KKwkJYnJlYWs7CisKKwkgICAgLy8gc3RhbGxzIG5lZWQgbWFudWFsIHJlc2V0LiB0aGlzIGlzIHJhcmUgLi4uIGV4Y2VwdCB0aGF0CisJICAgIC8vIHdoZW4gZ29pbmcgdGhyb3VnaCBVU0IgMi4wIFRUcywgdW5wbHVnIGFwcGVhcnMgdGhpcyB3YXkuCisJICAgIC8vIHdlIGF2b2lkIHRoZSBoaWdoc3BlZWQgdmVyc2lvbiBvZiB0aGUgRVRJTUVPVVQvRUlMU0VRCisJICAgIC8vIHN0b3JtLCByZWNvdmVyaW5nIGFzIG5lZWRlZC4KKwkgICAgY2FzZSAtRVBJUEU6CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRlZmVyX2tldmVudCAoZGV2LCBFVkVOVF9SWF9IQUxUKTsKKwkJLy8gRkFMTFRIUk9VR0gKKworCSAgICAvLyBzb2Z0d2FyZS1kcml2ZW4gaW50ZXJmYWNlIHNodXRkb3duCisJICAgIGNhc2UgLUVDT05OUkVTRVQ6CQkvLyBhc3luYyB1bmxpbmsKKwkgICAgY2FzZSAtRVNIVVRET1dOOgkJLy8gaGFyZHdhcmUgZ29uZQorCQlpZiAobmV0aWZfbXNnX2lmZG93biAoZGV2KSkKKwkJCWRldmRiZyAoZGV2LCAicnggc2h1dGRvd24sIGNvZGUgJWQiLCB1cmJfc3RhdHVzKTsKKwkJZ290byBibG9jazsKKworCSAgICAvLyB3ZSBnZXQgY29udHJvbGxlciBpL28gZmF1bHRzIGR1cmluZyBraHViZCBkaXNjb25uZWN0KCkgZGVsYXlzLgorCSAgICAvLyB0aHJvdHRsZSBkb3duIHJlc3VibWl0cywgdG8gYXZvaWQgbG9nIGZsb29kczsganVzdCB0ZW1wb3JhcmlseSwKKwkgICAgLy8gc28gd2Ugc3RpbGwgcmVjb3ZlciB3aGVuIHRoZSBmYXVsdCBpc24ndCBhIGtodWJkIGRlbGF5LgorCSAgICBjYXNlIC1FUFJPVE86CQkvLyBlaGNpCisJICAgIGNhc2UgLUVUSU1FRE9VVDoJCS8vIG9oY2kKKwkgICAgY2FzZSAtRUlMU0VROgkJLy8gdWhjaQorCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlpZiAoIXRpbWVyX3BlbmRpbmcgKCZkZXYtPmRlbGF5KSkgeworCQkJbW9kX3RpbWVyICgmZGV2LT5kZWxheSwgamlmZmllcyArIFRIUk9UVExFX0pJRkZJRVMpOworCQkJaWYgKG5ldGlmX21zZ19saW5rIChkZXYpKQorCQkJCWRldmRiZyAoZGV2LCAicnggdGhyb3R0bGUgJWQiLCB1cmJfc3RhdHVzKTsKKwkJfQorYmxvY2s6CisJCWVudHJ5LT5zdGF0ZSA9IHJ4X2NsZWFudXA7CisJCWVudHJ5LT51cmIgPSB1cmI7CisJCXVyYiA9IE5VTEw7CisJCWJyZWFrOworCisJICAgIC8vIGRhdGEgb3ZlcnJ1biAuLi4gZmx1c2ggZmlmbz8KKwkgICAgY2FzZSAtRU9WRVJGTE9XOgorCQlkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCS8vIEZBTExUSFJPVUdICisJICAgIAorCSAgICBkZWZhdWx0OgorCQllbnRyeS0+c3RhdGUgPSByeF9jbGVhbnVwOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlpZiAobmV0aWZfbXNnX3J4X2VyciAoZGV2KSkKKwkJCWRldmRiZyAoZGV2LCAicnggc3RhdHVzICVkIiwgdXJiX3N0YXR1cyk7CisJCWJyZWFrOworCX0KKworCWRlZmVyX2JoIChkZXYsIHNrYik7CisKKwlpZiAodXJiKSB7CisJCWlmIChuZXRpZl9ydW5uaW5nIChkZXYtPm5ldCkKKwkJCQkmJiAhdGVzdF9iaXQgKEVWRU5UX1JYX0hBTFQsICZkZXYtPmZsYWdzKSkgeworCQkJcnhfc3VibWl0IChkZXYsIHVyYiwgR0ZQX0FUT01JQyk7CisJCQlyZXR1cm47CisJCX0KKwkJdXNiX2ZyZWVfdXJiICh1cmIpOworCX0KKwlpZiAobmV0aWZfbXNnX3J4X2VyciAoZGV2KSkKKwkJZGV2ZGJnIChkZXYsICJubyByZWFkIHJlc3VibWl0dGVkIik7Cit9CisKK3N0YXRpYyB2b2lkIGludHJfY29tcGxldGUgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYm5ldAkqZGV2ID0gdXJiLT5jb250ZXh0OworCWludAkJc3RhdHVzID0gdXJiLT5zdGF0dXM7CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCSAgICAvKiBzdWNjZXNzICovCisJICAgIGNhc2UgMDoKKwkJZGV2LT5kcml2ZXJfaW5mby0+c3RhdHVzKGRldiwgdXJiKTsKKwkJYnJlYWs7CisKKwkgICAgLyogc29mdHdhcmUtZHJpdmVuIGludGVyZmFjZSBzaHV0ZG93biAqLworCSAgICBjYXNlIC1FTk9FTlQ6CQkvLyB1cmIga2lsbGVkCisJICAgIGNhc2UgLUVTSFVURE9XTjoJCS8vIGhhcmR3YXJlIGdvbmUKKwkJaWYgKG5ldGlmX21zZ19pZmRvd24gKGRldikpCisJCQlkZXZkYmcgKGRldiwgImludHIgc2h1dGRvd24sIGNvZGUgJWQiLCBzdGF0dXMpOworCQlyZXR1cm47CisKKwkgICAgLyogTk9URTogIG5vdCB0aHJvdHRsaW5nIGxpa2UgUlgvVFgsIHNpbmNlIHRoaXMgZW5kcG9pbnQKKwkgICAgICogYWxyZWFkeSBwb2xscyBpbmZyZXF1ZW50bHkKKwkgICAgICovCisJICAgIGRlZmF1bHQ6CisJCWRldmRiZyAoZGV2LCAiaW50ciBzdGF0dXMgJWQiLCBzdGF0dXMpOworCQlicmVhazsKKwl9CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcgKGRldi0+bmV0KSkKKwkJcmV0dXJuOworCisJbWVtc2V0KHVyYi0+dHJhbnNmZXJfYnVmZmVyLCAwLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCWlmIChzdGF0dXMgIT0gMCAmJiBuZXRpZl9tc2dfdGltZXIgKGRldikpCisJCWRldmVycihkZXYsICJpbnRyIHJlc3VibWl0IC0tPiAlZCIsIHN0YXR1cyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8vIHVubGluayBwZW5kaW5nIHJ4L3R4OyBjb21wbGV0aW9uIGhhbmRsZXJzIGRvIGFsbCBvdGhlciBjbGVhbnVwCisKK3N0YXRpYyBpbnQgdW5saW5rX3VyYnMgKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcSkKK3sKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnNrYiwgKnNrYm5leHQ7CisJaW50CQkJY291bnQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZxLT5sb2NrLCBmbGFncyk7CisJZm9yIChza2IgPSBxLT5uZXh0OyBza2IgIT0gKHN0cnVjdCBza19idWZmICopIHE7IHNrYiA9IHNrYm5leHQpIHsKKwkJc3RydWN0IHNrYl9kYXRhCQkqZW50cnk7CisJCXN0cnVjdCB1cmIJCSp1cmI7CisJCWludAkJCXJldHZhbDsKKworCQllbnRyeSA9IChzdHJ1Y3Qgc2tiX2RhdGEgKikgc2tiLT5jYjsKKwkJdXJiID0gZW50cnktPnVyYjsKKwkJc2tibmV4dCA9IHNrYi0+bmV4dDsKKworCQkvLyBkdXJpbmcgc29tZSBQTS1kcml2ZW4gcmVzdW1lIHNjZW5hcmlvcywKKwkJLy8gdGhlc2UgKGFzeW5jKSB1bmxpbmtzIGNvbXBsZXRlIGltbWVkaWF0ZWx5CisJCXJldHZhbCA9IHVzYl91bmxpbmtfdXJiICh1cmIpOworCQlpZiAocmV0dmFsICE9IC1FSU5QUk9HUkVTUyAmJiByZXR2YWwgIT0gMCkKKwkJCWRldmRiZyAoZGV2LCAidW5saW5rIHVyYiBlcnIsICVkIiwgcmV0dmFsKTsKKwkJZWxzZQorCQkJY291bnQrKzsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnEtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLy8gcHJlY29uZGl0aW9uOiBuZXZlciBjYWxsZWQgaW5faW50ZXJydXB0CisKK3N0YXRpYyBpbnQgdXNibmV0X3N0b3AgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IHVzYm5ldAkJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisJaW50CQkJdGVtcDsKKwlERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCAodW5saW5rX3dha2V1cCk7IAorCURFQ0xBUkVfV0FJVFFVRVVFICh3YWl0LCBjdXJyZW50KTsKKworCW5ldGlmX3N0b3BfcXVldWUgKG5ldCk7CisKKwlpZiAobmV0aWZfbXNnX2lmZG93biAoZGV2KSkKKwkJZGV2aW5mbyAoZGV2LCAic3RvcCBzdGF0czogcngvdHggJWxkLyVsZCwgZXJycyAlbGQvJWxkIiwKKwkJCWRldi0+c3RhdHMucnhfcGFja2V0cywgZGV2LT5zdGF0cy50eF9wYWNrZXRzLCAKKwkJCWRldi0+c3RhdHMucnhfZXJyb3JzLCBkZXYtPnN0YXRzLnR4X2Vycm9ycworCQkJKTsKKworCS8vIGVuc3VyZSB0aGVyZSBhcmUgbm8gbW9yZSBhY3RpdmUgdXJicworCWFkZF93YWl0X3F1ZXVlICgmdW5saW5rX3dha2V1cCwgJndhaXQpOworCWRldi0+d2FpdCA9ICZ1bmxpbmtfd2FrZXVwOworCXRlbXAgPSB1bmxpbmtfdXJicyAoZGV2LCAmZGV2LT50eHEpICsgdW5saW5rX3VyYnMgKGRldiwgJmRldi0+cnhxKTsKKworCS8vIG1heWJlIHdhaXQgZm9yIGRlbGV0aW9ucyB0byBmaW5pc2guCisJd2hpbGUgKHNrYl9xdWV1ZV9sZW4gKCZkZXYtPnJ4cSkKKwkJCSYmIHNrYl9xdWV1ZV9sZW4gKCZkZXYtPnR4cSkKKwkJCSYmIHNrYl9xdWV1ZV9sZW4gKCZkZXYtPmRvbmUpKSB7CisJCW1zbGVlcChVTkxJTktfVElNRU9VVF9NUyk7CisJCWlmIChuZXRpZl9tc2dfaWZkb3duIChkZXYpKQorCQkJZGV2ZGJnIChkZXYsICJ3YWl0ZWQgZm9yICVkIHVyYiBjb21wbGV0aW9ucyIsIHRlbXApOworCX0KKwlkZXYtPndhaXQgPSBOVUxMOworCXJlbW92ZV93YWl0X3F1ZXVlICgmdW5saW5rX3dha2V1cCwgJndhaXQpOyAKKworCXVzYl9raWxsX3VyYihkZXYtPmludGVycnVwdCk7CisKKwkvKiBkZWZlcnJlZCB3b3JrICh0YXNrLCB0aW1lciwgc29mdGlycSkgbXVzdCBhbHNvIHN0b3AuCisJICogY2FuJ3QgZmx1c2hfc2NoZWR1bGVkX3dvcmsoKSB1bnRpbCB3ZSBkcm9wIHJ0bmwgKGxhdGVyKSwKKwkgKiBlbHNlIHdvcmtlcnMgY291bGQgZGVhZGxvY2s7IHNvIG1ha2Ugd29ya2VycyBhIE5PUC4KKwkgKi8KKwlkZXYtPmZsYWdzID0gMDsKKwlkZWxfdGltZXJfc3luYyAoJmRldi0+ZGVsYXkpOworCXRhc2tsZXRfa2lsbCAoJmRldi0+YmgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8vIHBvc3RzIHJlYWRzLCBhbmQgZW5hYmxlcyB3cml0ZSBxdWV1aW5nCisKKy8vIHByZWNvbmRpdGlvbjogbmV2ZXIgY2FsbGVkIGluX2ludGVycnVwdAorCitzdGF0aWMgaW50IHVzYm5ldF9vcGVuIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCWludAkJCXJldHZhbCA9IDA7CisJc3RydWN0IGRyaXZlcl9pbmZvCSppbmZvID0gZGV2LT5kcml2ZXJfaW5mbzsKKworCS8vIHB1dCBpbnRvICJrbm93biBzYWZlIiBzdGF0ZQorCWlmIChpbmZvLT5yZXNldCAmJiAocmV0dmFsID0gaW5mby0+cmVzZXQgKGRldikpIDwgMCkgeworCQlpZiAobmV0aWZfbXNnX2lmdXAgKGRldikpCisJCQlkZXZpbmZvIChkZXYsCisJCQkJIm9wZW4gcmVzZXQgZmFpbCAoJWQpIHVzYm5ldCB1c2ItJXMtJXMsICVzIiwKKwkJCQlyZXR2YWwsCisJCQkJZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLCBkZXYtPnVkZXYtPmRldnBhdGgsCisJCQlpbmZvLT5kZXNjcmlwdGlvbik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvLyBpbnNpc3QgcGVlciBiZSBjb25uZWN0ZWQKKwlpZiAoaW5mby0+Y2hlY2tfY29ubmVjdCAmJiAocmV0dmFsID0gaW5mby0+Y2hlY2tfY29ubmVjdCAoZGV2KSkgPCAwKSB7CisJCWlmIChuZXRpZl9tc2dfaWZ1cCAoZGV2KSkKKwkJCWRldmRiZyAoZGV2LCAiY2FuJ3Qgb3BlbjsgJWQiLCByZXR2YWwpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogc3RhcnQgYW55IHN0YXR1cyBpbnRlcnJ1cHQgdHJhbnNmZXIgKi8KKwlpZiAoZGV2LT5pbnRlcnJ1cHQpIHsKKwkJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKGRldi0+aW50ZXJydXB0LCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJldHZhbCA8IDApIHsKKwkJCWlmIChuZXRpZl9tc2dfaWZ1cCAoZGV2KSkKKwkJCQlkZXZlcnIgKGRldiwgImludHIgc3VibWl0ICVkIiwgcmV0dmFsKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworCW5ldGlmX3N0YXJ0X3F1ZXVlIChuZXQpOworCWlmIChuZXRpZl9tc2dfaWZ1cCAoZGV2KSkgeworCQljaGFyCSpmcmFtaW5nOworCisJCWlmIChkZXYtPmRyaXZlcl9pbmZvLT5mbGFncyAmIEZMQUdfRlJBTUlOR19OQykKKwkJCWZyYW1pbmcgPSAiTmV0Q2hpcCI7CisJCWVsc2UgaWYgKGRldi0+ZHJpdmVyX2luZm8tPmZsYWdzICYgRkxBR19GUkFNSU5HX0dMKQorCQkJZnJhbWluZyA9ICJHZW5lU3lzIjsKKwkJZWxzZSBpZiAoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MgJiBGTEFHX0ZSQU1JTkdfWikKKwkJCWZyYW1pbmcgPSAiWmF1cnVzIjsKKwkJZWxzZSBpZiAoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MgJiBGTEFHX0ZSQU1JTkdfUk4pCisJCQlmcmFtaW5nID0gIlJORElTIjsKKwkJZWxzZSBpZiAoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MgJiBGTEFHX0ZSQU1JTkdfQVgpCisJCQlmcmFtaW5nID0gIkFTSVgiOworCQllbHNlCisJCQlmcmFtaW5nID0gInNpbXBsZSI7CisKKwkJZGV2aW5mbyAoZGV2LCAib3BlbjogZW5hYmxlIHF1ZXVlaW5nICIKKwkJCQkiKHJ4ICVkLCB0eCAlZCkgbXR1ICVkICVzIGZyYW1pbmciLAorCQkJUlhfUUxFTiAoZGV2KSwgVFhfUUxFTiAoZGV2KSwgZGV2LT5uZXQtPm10dSwKKwkJCWZyYW1pbmcpOworCX0KKworCS8vIGRlbGF5IHBvc3RpbmcgcmVhZHMgdW50aWwgd2UncmUgZnVsbHkgb3BlbgorCXRhc2tsZXRfc2NoZWR1bGUgKCZkZXYtPmJoKTsKK2RvbmU6CisJcmV0dXJuIHJldHZhbDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgdXNibmV0X2dldF9kcnZpbmZvIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQoreworCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisKKwlzdHJuY3B5IChpbmZvLT5kcml2ZXIsIGRyaXZlcl9uYW1lLCBzaXplb2YgaW5mby0+ZHJpdmVyKTsKKwlzdHJuY3B5IChpbmZvLT52ZXJzaW9uLCBEUklWRVJfVkVSU0lPTiwgc2l6ZW9mIGluZm8tPnZlcnNpb24pOworCXN0cm5jcHkgKGluZm8tPmZ3X3ZlcnNpb24sIGRldi0+ZHJpdmVyX2luZm8tPmRlc2NyaXB0aW9uLAorCQlzaXplb2YgaW5mby0+ZndfdmVyc2lvbik7CisJdXNiX21ha2VfcGF0aCAoZGV2LT51ZGV2LCBpbmZvLT5idXNfaW5mbywgc2l6ZW9mIGluZm8tPmJ1c19pbmZvKTsKK30KKworc3RhdGljIHUzMiB1c2JuZXRfZ2V0X2xpbmsgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCS8qIElmIGEgY2hlY2tfY29ubmVjdCBpcyBkZWZpbmVkLCByZXR1cm4gaXQncyByZXN1bHRzICovCisJaWYgKGRldi0+ZHJpdmVyX2luZm8tPmNoZWNrX2Nvbm5lY3QpCisJCXJldHVybiBkZXYtPmRyaXZlcl9pbmZvLT5jaGVja19jb25uZWN0IChkZXYpID09IDA7CisKKwkvKiBPdGhlcndpc2UsIHdlJ3JlIHVwIHRvIGF2b2lkIGJyZWFraW5nIHNjcmlwdHMgKi8KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHUzMiB1c2JuZXRfZ2V0X21zZ2xldmVsIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisKKwlyZXR1cm4gZGV2LT5tc2dfZW5hYmxlOworfQorCitzdGF0aWMgdm9pZCB1c2JuZXRfc2V0X21zZ2xldmVsIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCB1MzIgbGV2ZWwpCit7CisJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCWRldi0+bXNnX2VuYWJsZSA9IGxldmVsOworfQorCitzdGF0aWMgaW50IHVzYm5ldF9pb2N0bCAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKK3sKKyNpZmRlZiBORUVEX01JSQorCXsKKwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCisJaWYgKGRldi0+bWlpLm1kaW9fcmVhZCAhPSBOVUxMICYmIGRldi0+bWlpLm1kaW9fd3JpdGUgIT0gTlVMTCkKKwkJcmV0dXJuIGdlbmVyaWNfbWlpX2lvY3RsKCZkZXYtPm1paSwgaWZfbWlpKHJxKSwgY21kLCBOVUxMKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHdvcmsgdGhhdCBjYW5ub3QgYmUgZG9uZSBpbiBpbnRlcnJ1cHQgY29udGV4dCB1c2VzIGtldmVudGQuCisgKgorICogTk9URTogIHdpdGggMi41IHdlIGNvdWxkIGRvIG1vcmUgb2YgdGhpcyB1c2luZyBjb21wbGV0aW9uIGNhbGxiYWNrcywKKyAqIGVzcGVjaWFsbHkgbm93IHRoYXQgY29udHJvbCB0cmFuc2ZlcnMgY2FuIGJlIHF1ZXVlZC4KKyAqLworc3RhdGljIHZvaWQKK2tldmVudCAodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gZGF0YTsKKwlpbnQJCQlzdGF0dXM7CisKKwkvKiB1c2JfY2xlYXJfaGFsdCgpIG5lZWRzIGEgdGhyZWFkIGNvbnRleHQgKi8KKwlpZiAodGVzdF9iaXQgKEVWRU5UX1RYX0hBTFQsICZkZXYtPmZsYWdzKSkgeworCQl1bmxpbmtfdXJicyAoZGV2LCAmZGV2LT50eHEpOworCQlzdGF0dXMgPSB1c2JfY2xlYXJfaGFsdCAoZGV2LT51ZGV2LCBkZXYtPm91dCk7CisJCWlmIChzdGF0dXMgPCAwICYmIHN0YXR1cyAhPSAtRVBJUEUpIHsKKwkJCWlmIChuZXRpZl9tc2dfdHhfZXJyIChkZXYpKQorCQkJCWRldmVyciAoZGV2LCAiY2FuJ3QgY2xlYXIgdHggaGFsdCwgc3RhdHVzICVkIiwKKwkJCQkJc3RhdHVzKTsKKwkJfSBlbHNlIHsKKwkJCWNsZWFyX2JpdCAoRVZFTlRfVFhfSEFMVCwgJmRldi0+ZmxhZ3MpOworCQkJbmV0aWZfd2FrZV9xdWV1ZSAoZGV2LT5uZXQpOworCQl9CisJfQorCWlmICh0ZXN0X2JpdCAoRVZFTlRfUlhfSEFMVCwgJmRldi0+ZmxhZ3MpKSB7CisJCXVubGlua191cmJzIChkZXYsICZkZXYtPnJ4cSk7CisJCXN0YXR1cyA9IHVzYl9jbGVhcl9oYWx0IChkZXYtPnVkZXYsIGRldi0+aW4pOworCQlpZiAoc3RhdHVzIDwgMCAmJiBzdGF0dXMgIT0gLUVQSVBFKSB7CisJCQlpZiAobmV0aWZfbXNnX3J4X2VyciAoZGV2KSkKKwkJCQlkZXZlcnIgKGRldiwgImNhbid0IGNsZWFyIHJ4IGhhbHQsIHN0YXR1cyAlZCIsCisJCQkJCXN0YXR1cyk7CisJCX0gZWxzZSB7CisJCQljbGVhcl9iaXQgKEVWRU5UX1JYX0hBTFQsICZkZXYtPmZsYWdzKTsKKwkJCXRhc2tsZXRfc2NoZWR1bGUgKCZkZXYtPmJoKTsKKwkJfQorCX0KKworCS8qIHRhc2tsZXQgY291bGQgcmVzdWJtaXQgaXRzZWxmIGZvcmV2ZXIgaWYgbWVtb3J5IGlzIHRpZ2h0ICovCisJaWYgKHRlc3RfYml0IChFVkVOVF9SWF9NRU1PUlksICZkZXYtPmZsYWdzKSkgeworCQlzdHJ1Y3QgdXJiCSp1cmIgPSBOVUxMOworCisJCWlmIChuZXRpZl9ydW5uaW5nIChkZXYtPm5ldCkpCisJCQl1cmIgPSB1c2JfYWxsb2NfdXJiICgwLCBHRlBfS0VSTkVMKTsKKwkJZWxzZQorCQkJY2xlYXJfYml0IChFVkVOVF9SWF9NRU1PUlksICZkZXYtPmZsYWdzKTsKKwkJaWYgKHVyYiAhPSBOVUxMKSB7CisJCQljbGVhcl9iaXQgKEVWRU5UX1JYX01FTU9SWSwgJmRldi0+ZmxhZ3MpOworCQkJcnhfc3VibWl0IChkZXYsIHVyYiwgR0ZQX0tFUk5FTCk7CisJCQl0YXNrbGV0X3NjaGVkdWxlICgmZGV2LT5iaCk7CisJCX0KKwl9CisKKwlpZiAoZGV2LT5mbGFncykKKwkJZGV2ZGJnIChkZXYsICJrZXZlbnQgZG9uZSwgZmxhZ3MgPSAweCVseCIsCisJCQlkZXYtPmZsYWdzKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgdHhfY29tcGxldGUgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHNrX2J1ZmYJCSpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKikgdXJiLT5jb250ZXh0OworCXN0cnVjdCBza2JfZGF0YQkJKmVudHJ5ID0gKHN0cnVjdCBza2JfZGF0YSAqKSBza2ItPmNiOworCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSBlbnRyeS0+ZGV2OworCisJaWYgKHVyYi0+c3RhdHVzID09IDApIHsKKwkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gZW50cnktPmxlbmd0aDsKKwl9IGVsc2UgeworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCisJCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwkJY2FzZSAtRVBJUEU6CisJCQlkZWZlcl9rZXZlbnQgKGRldiwgRVZFTlRfVFhfSEFMVCk7CisJCQlicmVhazsKKworCQkvKiBzb2Z0d2FyZS1kcml2ZW4gaW50ZXJmYWNlIHNodXRkb3duICovCisJCWNhc2UgLUVDT05OUkVTRVQ6CQkvLyBhc3luYyB1bmxpbmsKKwkJY2FzZSAtRVNIVVRET1dOOgkJLy8gaGFyZHdhcmUgZ29uZQorCQkJYnJlYWs7CisKKwkJLy8gbGlrZSByeCwgdHggZ2V0cyBjb250cm9sbGVyIGkvbyBmYXVsdHMgZHVyaW5nIGtodWJkIGRlbGF5cworCQkvLyBhbmQgc28gaXQgdXNlcyB0aGUgc2FtZSB0aHJvdHRsaW5nIG1lY2hhbmlzbS4KKwkJY2FzZSAtRVBST1RPOgkJLy8gZWhjaQorCQljYXNlIC1FVElNRURPVVQ6CS8vIG9oY2kKKwkJY2FzZSAtRUlMU0VROgkJLy8gdWhjaQorCQkJaWYgKCF0aW1lcl9wZW5kaW5nICgmZGV2LT5kZWxheSkpIHsKKwkJCQltb2RfdGltZXIgKCZkZXYtPmRlbGF5LAorCQkJCQlqaWZmaWVzICsgVEhST1RUTEVfSklGRklFUyk7CisJCQkJaWYgKG5ldGlmX21zZ19saW5rIChkZXYpKQorCQkJCQlkZXZkYmcgKGRldiwgInR4IHRocm90dGxlICVkIiwKKwkJCQkJCQl1cmItPnN0YXR1cyk7CisJCQl9CisJCQluZXRpZl9zdG9wX3F1ZXVlIChkZXYtPm5ldCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlmIChuZXRpZl9tc2dfdHhfZXJyIChkZXYpKQorCQkJCWRldmRiZyAoZGV2LCAidHggZXJyICVkIiwgZW50cnktPnVyYi0+c3RhdHVzKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJdXJiLT5kZXYgPSBOVUxMOworCWVudHJ5LT5zdGF0ZSA9IHR4X2RvbmU7CisJZGVmZXJfYmggKGRldiwgc2tiKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgdXNibmV0X3R4X3RpbWVvdXQgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IHVzYm5ldAkJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisKKwl1bmxpbmtfdXJicyAoZGV2LCAmZGV2LT50eHEpOworCXRhc2tsZXRfc2NoZWR1bGUgKCZkZXYtPmJoKTsKKworCS8vIEZJWE1FOiBkZXZpY2UgcmVjb3ZlcnkgLS0gcmVzZXQ/Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgdXNibmV0X3N0YXJ0X3htaXQgKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IHVzYm5ldAkJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisJaW50CQkJbGVuZ3RoOworCWludAkJCXJldHZhbCA9IE5FVF9YTUlUX1NVQ0NFU1M7CisJc3RydWN0IHVyYgkJKnVyYiA9IE5VTEw7CisJc3RydWN0IHNrYl9kYXRhCQkqZW50cnk7CisJc3RydWN0IGRyaXZlcl9pbmZvCSppbmZvID0gZGV2LT5kcml2ZXJfaW5mbzsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKyNpZmRlZglDT05GSUdfVVNCX05FVDEwODAKKwlzdHJ1Y3QgbmNfaGVhZGVyCSpoZWFkZXIgPSBOVUxMOworCXN0cnVjdCBuY190cmFpbGVyCSp0cmFpbGVyID0gTlVMTDsKKyNlbmRpZgkvKiBDT05GSUdfVVNCX05FVDEwODAgKi8KKworCS8vIHNvbWUgZGV2aWNlcyB3YW50IGZ1bmt5IFVTQi1sZXZlbCBmcmFtaW5nLCBmb3IKKwkvLyB3aW4zMiBkcml2ZXIgKHVzdWFsbHkpIGFuZC9vciBoYXJkd2FyZSBxdWlya3MKKwlpZiAoaW5mby0+dHhfZml4dXApIHsKKwkJc2tiID0gaW5mby0+dHhfZml4dXAgKGRldiwgc2tiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFza2IpIHsKKwkJCWlmIChuZXRpZl9tc2dfdHhfZXJyIChkZXYpKQorCQkJCWRldmRiZyAoZGV2LCAiY2FuJ3QgdHhfZml4dXAgc2tiIik7CisJCQlnb3RvIGRyb3A7CisJCX0KKwl9CisJbGVuZ3RoID0gc2tiLT5sZW47CisKKwlpZiAoISh1cmIgPSB1c2JfYWxsb2NfdXJiICgwLCBHRlBfQVRPTUlDKSkpIHsKKwkJaWYgKG5ldGlmX21zZ190eF9lcnIgKGRldikpCisJCQlkZXZkYmcgKGRldiwgIm5vIHVyYiIpOworCQlnb3RvIGRyb3A7CisJfQorCisJZW50cnkgPSAoc3RydWN0IHNrYl9kYXRhICopIHNrYi0+Y2I7CisJZW50cnktPnVyYiA9IHVyYjsKKwllbnRyeS0+ZGV2ID0gZGV2OworCWVudHJ5LT5zdGF0ZSA9IHR4X3N0YXJ0OworCWVudHJ5LT5sZW5ndGggPSBsZW5ndGg7CisKKwkvLyBGSVhNRTogcmVvcmdhbml6ZSBhIGJpdCwgc28gdGhhdCBmaXh1cCgpIGZpbGxzIG91dCBOZXRDaGlwCisJLy8gZnJhbWluZyB0b28uIChQYWNrZXQgSUQgdXBkYXRlIG5lZWRzIHRoZSBzcGlubG9jay4uLikKKwkvLyBbIEJFVFRFUjogIHdlIGFscmVhZHkgb3duIG5ldC0+eG1pdF9sb2NrLCB0aGF0J3MgZW5vdWdoIF0KKworI2lmZGVmCUNPTkZJR19VU0JfTkVUMTA4MAorCWlmIChpbmZvLT5mbGFncyAmIEZMQUdfRlJBTUlOR19OQykgeworCQloZWFkZXIgPSAoc3RydWN0IG5jX2hlYWRlciAqKSBza2JfcHVzaCAoc2tiLCBzaXplb2YgKmhlYWRlcik7CisJCWhlYWRlci0+aGRyX2xlbiA9IGNwdV90b19sZTE2IChzaXplb2YgKCpoZWFkZXIpKTsKKwkJaGVhZGVyLT5wYWNrZXRfbGVuID0gY3B1X3RvX2xlMTYgKGxlbmd0aCk7CisJCWlmICghKChza2ItPmxlbiArIHNpemVvZiAqdHJhaWxlcikgJiAweDAxKSkKKwkJCSpza2JfcHV0IChza2IsIDEpID0gUEFEX0JZVEU7CisJCXRyYWlsZXIgPSAoc3RydWN0IG5jX3RyYWlsZXIgKikgc2tiX3B1dCAoc2tiLCBzaXplb2YgKnRyYWlsZXIpOworCX0KKyNlbmRpZgkvKiBDT05GSUdfVVNCX05FVDEwODAgKi8KKworCXVzYl9maWxsX2J1bGtfdXJiICh1cmIsIGRldi0+dWRldiwgZGV2LT5vdXQsCisJCQlza2ItPmRhdGEsIHNrYi0+bGVuLCB0eF9jb21wbGV0ZSwgc2tiKTsKKwl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9BU1lOQ19VTkxJTks7CisKKwkvKiBkb24ndCBhc3N1bWUgdGhlIGhhcmR3YXJlIGhhbmRsZXMgVVNCX1pFUk9fUEFDS0VUCisJICogTk9URTogIHN0cmljdGx5IGNvbmZvcm1pbmcgY2RjLWV0aGVyIGRldmljZXMgc2hvdWxkIGV4cGVjdAorCSAqIHRoZSBaTFAgaGVyZSwgYnV0IGlnbm9yZSB0aGUgb25lLWJ5dGUgcGFja2V0LgorCSAqCisJICogRklYTUUgemVybyB0aGF0IGJ5dGUsIGlmIGl0IGRvZXNuJ3QgcmVxdWlyZSBhIG5ldyBza2IuCisJICovCisJaWYgKChsZW5ndGggJSBkZXYtPm1heHBhY2tldCkgPT0gMCkKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKys7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmRldi0+dHhxLmxvY2ssIGZsYWdzKTsKKworI2lmZGVmCUNPTkZJR19VU0JfTkVUMTA4MAorCWlmIChpbmZvLT5mbGFncyAmIEZMQUdfRlJBTUlOR19OQykgeworCQloZWFkZXItPnBhY2tldF9pZCA9IGNwdV90b19sZTE2ICgodTE2KWRldi0+ZGV2X3BhY2tldF9pZCsrKTsKKwkJcHV0X3VuYWxpZ25lZCAoaGVhZGVyLT5wYWNrZXRfaWQsICZ0cmFpbGVyLT5wYWNrZXRfaWQpOworI2lmIDAKKwkJZGV2ZGJnIChkZXYsICJmcmFtZSA+dHggaCAlZCBwICVkIGlkICVkIiwKKwkJCWhlYWRlci0+aGRyX2xlbiwgaGVhZGVyLT5wYWNrZXRfbGVuLAorCQkJaGVhZGVyLT5wYWNrZXRfaWQpOworI2VuZGlmCisJfQorI2VuZGlmCS8qIENPTkZJR19VU0JfTkVUMTA4MCAqLworCisJc3dpdGNoICgocmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQykpKSB7CisJY2FzZSAtRVBJUEU6CisJCW5ldGlmX3N0b3BfcXVldWUgKG5ldCk7CisJCWRlZmVyX2tldmVudCAoZGV2LCBFVkVOVF9UWF9IQUxUKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKG5ldGlmX21zZ190eF9lcnIgKGRldikpCisJCQlkZXZkYmcgKGRldiwgInR4OiBzdWJtaXQgdXJiIGVyciAlZCIsIHJldHZhbCk7CisJCWJyZWFrOworCWNhc2UgMDoKKwkJbmV0LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJCV9fc2tiX3F1ZXVlX3RhaWwgKCZkZXYtPnR4cSwgc2tiKTsKKwkJaWYgKGRldi0+dHhxLnFsZW4gPj0gVFhfUUxFTiAoZGV2KSkKKwkJCW5ldGlmX3N0b3BfcXVldWUgKG5ldCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkZXYtPnR4cS5sb2NrLCBmbGFncyk7CisKKwlpZiAocmV0dmFsKSB7CisJCWlmIChuZXRpZl9tc2dfdHhfZXJyIChkZXYpKQorCQkJZGV2ZGJnIChkZXYsICJkcm9wLCBjb2RlICVkIiwgcmV0dmFsKTsKK2Ryb3A6CisJCXJldHZhbCA9IE5FVF9YTUlUX1NVQ0NFU1M7CisJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlpZiAoc2tiKQorCQkJZGV2X2tmcmVlX3NrYl9hbnkgKHNrYik7CisJCXVzYl9mcmVlX3VyYiAodXJiKTsKKwl9IGVsc2UgaWYgKG5ldGlmX21zZ190eF9xdWV1ZWQgKGRldikpIHsKKwkJZGV2ZGJnIChkZXYsICI+IHR4LCBsZW4gJWQsIHR5cGUgMHgleCIsCisJCQlsZW5ndGgsIHNrYi0+cHJvdG9jb2wpOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8vIHRhc2tsZXQgKHdvcmsgZGVmZXJyZWQgZnJvbSBjb21wbGV0aW9ucywgaW5faXJxKSBvciB0aW1lcgorCitzdGF0aWMgdm9pZCB1c2JuZXRfYmggKHVuc2lnbmVkIGxvbmcgcGFyYW0pCit7CisJc3RydWN0IHVzYm5ldAkJKmRldiA9IChzdHJ1Y3QgdXNibmV0ICopIHBhcmFtOworCXN0cnVjdCBza19idWZmCQkqc2tiOworCXN0cnVjdCBza2JfZGF0YQkJKmVudHJ5OworCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSAoJmRldi0+ZG9uZSkpKSB7CisJCWVudHJ5ID0gKHN0cnVjdCBza2JfZGF0YSAqKSBza2ItPmNiOworCQlzd2l0Y2ggKGVudHJ5LT5zdGF0ZSkgeworCQkgICAgY2FzZSByeF9kb25lOgorCQkJZW50cnktPnN0YXRlID0gcnhfY2xlYW51cDsKKwkJCXJ4X3Byb2Nlc3MgKGRldiwgc2tiKTsKKwkJCWNvbnRpbnVlOworCQkgICAgY2FzZSB0eF9kb25lOgorCQkgICAgY2FzZSByeF9jbGVhbnVwOgorCQkJdXNiX2ZyZWVfdXJiIChlbnRyeS0+dXJiKTsKKwkJCWRldl9rZnJlZV9za2IgKHNrYik7CisJCQljb250aW51ZTsKKwkJICAgIGRlZmF1bHQ6CisJCQlkZXZkYmcgKGRldiwgImJvZ3VzIHNrYiBzdGF0ZSAlZCIsIGVudHJ5LT5zdGF0ZSk7CisJCX0KKwl9CisKKwkvLyB3YWl0aW5nIGZvciBhbGwgcGVuZGluZyB1cmJzIHRvIGNvbXBsZXRlPworCWlmIChkZXYtPndhaXQpIHsKKwkJaWYgKChkZXYtPnR4cS5xbGVuICsgZGV2LT5yeHEucWxlbiArIGRldi0+ZG9uZS5xbGVuKSA9PSAwKSB7CisJCQl3YWtlX3VwIChkZXYtPndhaXQpOworCQl9CisKKwkvLyBvciBhcmUgd2UgbWF5YmUgc2hvcnQgYSBmZXcgdXJicz8KKwl9IGVsc2UgaWYgKG5ldGlmX3J1bm5pbmcgKGRldi0+bmV0KQorCQkJJiYgbmV0aWZfZGV2aWNlX3ByZXNlbnQgKGRldi0+bmV0KQorCQkJJiYgIXRpbWVyX3BlbmRpbmcgKCZkZXYtPmRlbGF5KQorCQkJJiYgIXRlc3RfYml0IChFVkVOVF9SWF9IQUxULCAmZGV2LT5mbGFncykpIHsKKwkJaW50CXRlbXAgPSBkZXYtPnJ4cS5xbGVuOworCQlpbnQJcWxlbiA9IFJYX1FMRU4gKGRldik7CisKKwkJaWYgKHRlbXAgPCBxbGVuKSB7CisJCQlzdHJ1Y3QgdXJiCSp1cmI7CisJCQlpbnQJCWk7CisKKwkJCS8vIGRvbid0IHJlZmlsbCB0aGUgcXVldWUgYWxsIGF0IG9uY2UKKwkJCWZvciAoaSA9IDA7IGkgPCAxMCAmJiBkZXYtPnJ4cS5xbGVuIDwgcWxlbjsgaSsrKSB7CisJCQkJdXJiID0gdXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0FUT01JQyk7CisJCQkJaWYgKHVyYiAhPSBOVUxMKQorCQkJCQlyeF9zdWJtaXQgKGRldiwgdXJiLCBHRlBfQVRPTUlDKTsKKwkJCX0KKwkJCWlmICh0ZW1wICE9IGRldi0+cnhxLnFsZW4gJiYgbmV0aWZfbXNnX2xpbmsgKGRldikpCisJCQkJZGV2ZGJnIChkZXYsICJyeHFsZW4gJWQgLS0+ICVkIiwKKwkJCQkJCXRlbXAsIGRldi0+cnhxLnFsZW4pOworCQkJaWYgKGRldi0+cnhxLnFsZW4gPCBxbGVuKQorCQkJCXRhc2tsZXRfc2NoZWR1bGUgKCZkZXYtPmJoKTsKKwkJfQorCQlpZiAoZGV2LT50eHEucWxlbiA8IFRYX1FMRU4gKGRldikpCisJCQluZXRpZl93YWtlX3F1ZXVlIChkZXYtPm5ldCk7CisJfQorfQorCisKKwwKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFVTQiBEZXZpY2UgRHJpdmVyIHN1cHBvcnQKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorLy8gcHJlY29uZGl0aW9uOiBuZXZlciBjYWxsZWQgaW5faW50ZXJydXB0CisKK3N0YXRpYyB2b2lkIHVzYm5ldF9kaXNjb25uZWN0IChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNibmV0CQkqZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlCSp4ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXQ7CisKKwlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJaWYgKCFkZXYpCisJCXJldHVybjsKKworCXhkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpbnRmKTsKKworCWlmIChuZXRpZl9tc2dfcHJvYmUgKGRldikpCisJCWRldmluZm8gKGRldiwgInVucmVnaXN0ZXIgdXNibmV0IHVzYi0lcy0lcywgJXMiLAorCQkJeGRldi0+YnVzLT5idXNfbmFtZSwgeGRldi0+ZGV2cGF0aCwKKwkJCWRldi0+ZHJpdmVyX2luZm8tPmRlc2NyaXB0aW9uKTsKKwkKKwluZXQgPSBkZXYtPm5ldDsKKwl1bnJlZ2lzdGVyX25ldGRldiAobmV0KTsKKworCS8qIHdlIGRvbid0IGhvbGQgcnRubCBoZXJlIC4uLiAqLworCWZsdXNoX3NjaGVkdWxlZF93b3JrICgpOworCisJaWYgKGRldi0+ZHJpdmVyX2luZm8tPnVuYmluZCkKKwkJZGV2LT5kcml2ZXJfaW5mby0+dW5iaW5kIChkZXYsIGludGYpOworCisJZnJlZV9uZXRkZXYobmV0KTsKKwl1c2JfcHV0X2RldiAoeGRldik7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyB1c2JuZXRfZXRodG9vbF9vcHM7CisKKy8vIHByZWNvbmRpdGlvbjogbmV2ZXIgY2FsbGVkIGluX2ludGVycnVwdAorCitzdGF0aWMgaW50Cit1c2JuZXRfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1ZGV2LCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqcHJvZCkKK3sKKwlzdHJ1Y3QgdXNibmV0CQkJKmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAJCSpuZXQ7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZQkqaW50ZXJmYWNlOworCXN0cnVjdCBkcml2ZXJfaW5mbwkJKmluZm87CisJc3RydWN0IHVzYl9kZXZpY2UJCSp4ZGV2OworCWludAkJCQlzdGF0dXM7CisKKwlpbmZvID0gKHN0cnVjdCBkcml2ZXJfaW5mbyAqKSBwcm9kLT5kcml2ZXJfaW5mbzsKKwlpZiAoIWluZm8pIHsKKwkJZGV2X2RiZyAoJnVkZXYtPmRldiwgImJsYWNrbGlzdGVkIGJ5ICVzXG4iLCBkcml2ZXJfbmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwl4ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldiAodWRldik7CisJaW50ZXJmYWNlID0gdWRldi0+Y3VyX2FsdHNldHRpbmc7CisKKwl1c2JfZ2V0X2RldiAoeGRldik7CisKKwlzdGF0dXMgPSAtRU5PTUVNOworCisJLy8gc2V0IHVwIG91ciBvd24gcmVjb3JkcworCW5ldCA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZigqZGV2KSk7CisJaWYgKCFuZXQpIHsKKwkJZGJnICgiY2FuJ3Qga21hbGxvYyBkZXYiKTsKKwkJZ290byBvdXQ7CisJfQorCisJZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlkZXYtPnVkZXYgPSB4ZGV2OworCWRldi0+ZHJpdmVyX2luZm8gPSBpbmZvOworCWRldi0+bXNnX2VuYWJsZSA9IG5ldGlmX21zZ19pbml0IChtc2dfbGV2ZWwsIE5FVElGX01TR19EUlYKKwkJCQl8IE5FVElGX01TR19QUk9CRSB8IE5FVElGX01TR19MSU5LKTsKKwlza2JfcXVldWVfaGVhZF9pbml0ICgmZGV2LT5yeHEpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQgKCZkZXYtPnR4cSk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCAoJmRldi0+ZG9uZSk7CisJZGV2LT5iaC5mdW5jID0gdXNibmV0X2JoOworCWRldi0+YmguZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkZXY7CisJSU5JVF9XT1JLICgmZGV2LT5rZXZlbnQsIGtldmVudCwgZGV2KTsKKwlkZXYtPmRlbGF5LmZ1bmN0aW9uID0gdXNibmV0X2JoOworCWRldi0+ZGVsYXkuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkZXY7CisJaW5pdF90aW1lciAoJmRldi0+ZGVsYXkpOworCisJU0VUX01PRFVMRV9PV05FUiAobmV0KTsKKwlkZXYtPm5ldCA9IG5ldDsKKwlzdHJjcHkgKG5ldC0+bmFtZSwgInVzYiVkIik7CisJbWVtY3B5IChuZXQtPmRldl9hZGRyLCBub2RlX2lkLCBzaXplb2Ygbm9kZV9pZCk7CisKKyNpZiAwCisvLyBkbWFfc3VwcG9ydGVkKCkgaXMgZGVlcGx5IGJyb2tlbiBvbiBhbG1vc3QgYWxsIGFyY2hpdGVjdHVyZXMKKwkvLyBwb3NzaWJsZSB3aXRoIHNvbWUgRUhDSSBjb250cm9sbGVycworCWlmIChkbWFfc3VwcG9ydGVkICgmdWRldi0+ZGV2LCBETUFfNjRCSVRfTUFTSykpCisJCW5ldC0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOworI2VuZGlmCisKKwluZXQtPmNoYW5nZV9tdHUgPSB1c2JuZXRfY2hhbmdlX210dTsKKwluZXQtPmdldF9zdGF0cyA9IHVzYm5ldF9nZXRfc3RhdHM7CisJbmV0LT5oYXJkX3N0YXJ0X3htaXQgPSB1c2JuZXRfc3RhcnRfeG1pdDsKKwluZXQtPm9wZW4gPSB1c2JuZXRfb3BlbjsKKwluZXQtPnN0b3AgPSB1c2JuZXRfc3RvcDsKKwluZXQtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVF9KSUZGSUVTOworCW5ldC0+dHhfdGltZW91dCA9IHVzYm5ldF90eF90aW1lb3V0OworCW5ldC0+ZG9faW9jdGwgPSB1c2JuZXRfaW9jdGw7CisJbmV0LT5ldGh0b29sX29wcyA9ICZ1c2JuZXRfZXRodG9vbF9vcHM7CisKKwkvLyBhbGxvdyBkZXZpY2Utc3BlY2lmaWMgYmluZC9pbml0IHByb2NlZHVyZXMKKwkvLyBOT1RFIG5ldC0+bmFtZSBzdGlsbCBub3QgdXNhYmxlIC4uLgorCWlmIChpbmZvLT5iaW5kKSB7CisJCXN0YXR1cyA9IGluZm8tPmJpbmQgKGRldiwgdWRldik7CisJCS8vIGhldXJpc3RpYzogICJ1c2IlZCIgZm9yIGxpbmtzIHdlIGtub3cgYXJlIHR3by1ob3N0LAorCQkvLyBlbHNlICJldGglZCIgd2hlbiB0aGVyZSdzIHJlYXNvbmFibGUgZG91YnQuICB1c2Vyc3BhY2UKKwkJLy8gY2FuIHJlbmFtZSB0aGUgbGluayBpZiBpdCBrbm93cyBiZXR0ZXIuCisJCWlmICgoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MgJiBGTEFHX0VUSEVSKSAhPSAwCisJCQkJJiYgKG5ldC0+ZGV2X2FkZHIgWzBdICYgMHgwMikgPT0gMCkKKwkJCXN0cmNweSAobmV0LT5uYW1lLCAiZXRoJWQiKTsKKwl9IGVsc2UgaWYgKCFpbmZvLT5pbiB8fCBpbmZvLT5vdXQpCisJCXN0YXR1cyA9IGdldF9lbmRwb2ludHMgKGRldiwgdWRldik7CisJZWxzZSB7CisJCWRldi0+aW4gPSB1c2JfcmN2YnVsa3BpcGUgKHhkZXYsIGluZm8tPmluKTsKKwkJZGV2LT5vdXQgPSB1c2Jfc25kYnVsa3BpcGUgKHhkZXYsIGluZm8tPm91dCk7CisJCWlmICghKGluZm8tPmZsYWdzICYgRkxBR19OT19TRVRJTlQpKQorCQkJc3RhdHVzID0gdXNiX3NldF9pbnRlcmZhY2UgKHhkZXYsCisJCQkJaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsCisJCQkJaW50ZXJmYWNlLT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nKTsKKwkJZWxzZQorCQkJc3RhdHVzID0gMDsKKworCX0KKworCWlmIChzdGF0dXMgPT0gMCAmJiBkZXYtPnN0YXR1cykKKwkJc3RhdHVzID0gaW5pdF9zdGF0dXMgKGRldiwgdWRldik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gb3V0MTsKKworCWRldi0+bWF4cGFja2V0ID0gdXNiX21heHBhY2tldCAoZGV2LT51ZGV2LCBkZXYtPm91dCwgMSk7CisJCisJU0VUX05FVERFVl9ERVYobmV0LCAmdWRldi0+ZGV2KTsKKwlzdGF0dXMgPSByZWdpc3Rlcl9uZXRkZXYgKG5ldCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBvdXQzOworCWlmIChuZXRpZl9tc2dfcHJvYmUgKGRldikpCisJCWRldmluZm8gKGRldiwgInJlZ2lzdGVyIHVzYm5ldCBhdCB1c2ItJXMtJXMsICVzLCAiCisJCQkJIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IiwKKwkJCXhkZXYtPmJ1cy0+YnVzX25hbWUsIHhkZXYtPmRldnBhdGgsCisJCQlkZXYtPmRyaXZlcl9pbmZvLT5kZXNjcmlwdGlvbiwKKwkJCW5ldC0+ZGV2X2FkZHIgWzBdLCBuZXQtPmRldl9hZGRyIFsxXSwKKwkJCW5ldC0+ZGV2X2FkZHIgWzJdLCBuZXQtPmRldl9hZGRyIFszXSwKKwkJCW5ldC0+ZGV2X2FkZHIgWzRdLCBuZXQtPmRldl9hZGRyIFs1XSk7CisKKwkvLyBvaywgaXQncyByZWFkeSB0byBnby4KKwl1c2Jfc2V0X2ludGZkYXRhICh1ZGV2LCBkZXYpOworCisJLy8gc3RhcnQgYXMgaWYgdGhlIGxpbmsgaXMgdXAKKwluZXRpZl9kZXZpY2VfYXR0YWNoIChuZXQpOworCisJcmV0dXJuIDA7CisKK291dDM6CisJaWYgKGluZm8tPnVuYmluZCkKKwkJaW5mby0+dW5iaW5kIChkZXYsIHVkZXYpOworb3V0MToKKwlmcmVlX25ldGRldihuZXQpOworb3V0OgorCXVzYl9wdXRfZGV2KHhkZXYpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZglDT05GSUdfUE0KKworc3RhdGljIGludCB1c2JuZXRfc3VzcGVuZCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHUzMiBzdGF0ZSkKK3sKKwlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwkKKwluZXRpZl9kZXZpY2VfZGV0YWNoIChkZXYtPm5ldCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNibmV0X3Jlc3VtZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYm5ldAkJKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwluZXRpZl9kZXZpY2VfYXR0YWNoIChkZXYtPm5ldCk7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCS8qICFDT05GSUdfUE0gKi8KKworI2RlZmluZQl1c2JuZXRfc3VzcGVuZAlOVUxMCisjZGVmaW5lCXVzYm5ldF9yZXN1bWUJTlVMTAorCisjZW5kaWYJLyogQ09ORklHX1BNICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZm5kZWYJSEFWRV9IQVJEV0FSRQorI2Vycm9yIFlvdSBuZWVkIHRvIGNvbmZpZ3VyZSBzb21lIGhhcmR3YXJlIGZvciB0aGlzIGRyaXZlcgorI2VuZGlmCisKKy8qCisgKiBjaGlwIHZlbmRvciBuYW1lcyB3b24ndCBub3JtYWxseSBiZSBvbiB0aGUgY2FibGVzLCBhbmQKKyAqIG1heSBub3QgYmUgb24gdGhlIGRldmljZS4KKyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQJcHJvZHVjdHMgW10gPSB7CisKKyNpZmRlZglDT05GSUdfVVNCX0FMSV9NNTYzMgoreworCVVTQl9ERVZJQ0UgKDB4MDQwMiwgMHg1NjMyKSwJLy8gQUxpIGRlZmF1bHRzCisJLmRyaXZlcl9pbmZvID0JKHVuc2lnbmVkIGxvbmcpICZhbGlfbTU2MzJfaW5mbywKK30sCisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19VU0JfQU4yNzIwCit7CisJVVNCX0RFVklDRSAoMHgwNTQ3LCAweDI3MjApLAkvLyBBbmNob3JDaGlwcyBkZWZhdWx0cworCS5kcml2ZXJfaW5mbyA9CSh1bnNpZ25lZCBsb25nKSAmYW4yNzIwX2luZm8sCit9LCB7CisJVVNCX0RFVklDRSAoMHgwNTQ3LCAweDI3MjcpLAkvLyBYaXJjb20gUEdVTkVUCisJLmRyaXZlcl9pbmZvID0JKHVuc2lnbmVkIGxvbmcpICZhbjI3MjBfaW5mbywKK30sCisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19VU0JfQkVMS0lOCit7CisJVVNCX0RFVklDRSAoMHgwNTBkLCAweDAwMDQpLAkvLyBCZWxraW4KKwkuZHJpdmVyX2luZm8gPQkodW5zaWduZWQgbG9uZykgJmJlbGtpbl9pbmZvLAorfSwgeworCVVTQl9ERVZJQ0UgKDB4MDU2YywgMHg4MTAwKSwJLy8gZVRFSworCS5kcml2ZXJfaW5mbyA9CSh1bnNpZ25lZCBsb25nKSAmYmVsa2luX2luZm8sCit9LCB7CisJVVNCX0RFVklDRSAoMHgwNTI1LCAweDk5MDEpLAkvLyBBZHZhbmNlIFVTQk5FVCAoZVRFSykKKwkuZHJpdmVyX2luZm8gPQkodW5zaWduZWQgbG9uZykgJmJlbGtpbl9pbmZvLAorfSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9BWDg4MTdYCit7CisJLy8gTGlua3N5cyBVU0IyMDBNCisJVVNCX0RFVklDRSAoMHgwNzdiLCAweDIyMjYpLAorCS5kcml2ZXJfaW5mbyA9CSh1bnNpZ25lZCBsb25nKSAmYXg4ODE3eF9pbmZvLAorfSwgeworCS8vIE5ldGdlYXIgRkExMjAKKwlVU0JfREVWSUNFICgweDA4NDYsIDB4MTA0MCksCisJLmRyaXZlcl9pbmZvID0gICh1bnNpZ25lZCBsb25nKSAmbmV0Z2Vhcl9mYTEyMF9pbmZvLAorfSwgeworCS8vIERMaW5rIERVQi1FMTAwCisJVVNCX0RFVklDRSAoMHgyMDAxLCAweDFhMDApLAorCS5kcml2ZXJfaW5mbyA9ICAodW5zaWduZWQgbG9uZykgJmRsaW5rX2R1Yl9lMTAwX2luZm8sCit9LCB7CisJLy8gSW50ZWxsaW5ldCwgU1QgTGFiIFVTQiBFdGhlcm5ldAorCVVTQl9ERVZJQ0UgKDB4MGI5NSwgMHgxNzIwKSwKKwkuZHJpdmVyX2luZm8gPSAgKHVuc2lnbmVkIGxvbmcpICZheDg4MTd4X2luZm8sCit9LCB7CisJLy8gSGF3a2luZyBVRjIwMCwgVHJlbmROZXQgVFUyLUVUMTAwCisJVVNCX0RFVklDRSAoMHgwN2I4LCAweDQyMGEpLAorCS5kcml2ZXJfaW5mbyA9ICAodW5zaWduZWQgbG9uZykgJmhhd2tpbmdfdWYyMDBfaW5mbywKK30sIHsKKyAgICAgICAgLy8gQmlsbGlvbnRvbiBTeXN0ZW1zLCBVU0IyQVIgCisgICAgICAgIFVTQl9ERVZJQ0UgKDB4MDhkZCwgMHg5MGZmKSwKKyAgICAgICAgLmRyaXZlcl9pbmZvID0gICh1bnNpZ25lZCBsb25nKSAmYXg4ODE3eF9pbmZvLAorfSwgeworCS8vIEFURU4gVUMyMTBUCisJVVNCX0RFVklDRSAoMHgwNTU3LCAweDIwMDkpLAorCS5kcml2ZXJfaW5mbyA9ICAodW5zaWduZWQgbG9uZykgJmF4ODgxN3hfaW5mbywKK30sIHsKKwkvLyBCdWZmYWxvIExVQS1VMi1LVFgKKwlVU0JfREVWSUNFICgweDA0MTEsIDB4MDAzZCksCisJLmRyaXZlcl9pbmZvID0gICh1bnNpZ25lZCBsb25nKSAmYXg4ODE3eF9pbmZvLAorfSwgeworCS8vIFNpdGVjb20gTE4tMDI5ICJVU0IgMi4wIDEwLzEwMCBFdGhlcm5ldCBhZGFwdGVyIgorCVVTQl9ERVZJQ0UgKDB4NjE4OSwgMHgxODJkKSwKKwkuZHJpdmVyX2luZm8gPSAgKHVuc2lnbmVkIGxvbmcpICZheDg4MTd4X2luZm8sCit9LCB7CisJLy8gY29yZWdhIEZFdGhlciBVU0IyLVRYCisJVVNCX0RFVklDRSAoMHgwN2FhLCAweDAwMTcpLAorCS5kcml2ZXJfaW5mbyA9ICAodW5zaWduZWQgbG9uZykgJmF4ODgxN3hfaW5mbywKK30sIHsKKwkvLyBTdXJlY29tIEVQLTE0MjdYLTIKKwlVU0JfREVWSUNFICgweDExODksIDB4MDg5MyksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZheDg4MTd4X2luZm8sCit9LCB7CisJLy8gZ29vZHdheSBjb3JwIHVzYiBnd3VzYjJlCisJVVNCX0RFVklDRSAoMHgxNjMxLCAweDYyMDApLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmYXg4ODE3eF9pbmZvLAorfSwgeworCS8vIEFTSVggQVg4ODc3MiAxMC8xMDAKKyAgICAgICAgVVNCX0RFVklDRSAoMHgwYjk1LCAweDc3MjApLAorICAgICAgICAuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmF4ODg3NzJfaW5mbywKK30sCisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19VU0JfRVBTT04yODg4Cit7CisJVVNCX0RFVklDRSAoMHgwNTI1LCAweDI4ODgpLAkvLyBFUFNPTiBVU0IgY2xpZW50CisJLmRyaXZlcl9pbmZvCT0gKHVuc2lnbmVkIGxvbmcpICZlcHNvbjI4ODhfaW5mbywKK30sCisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19VU0JfR0VORVNZUworeworCVVTQl9ERVZJQ0UgKDB4MDVlMywgMHgwNTAyKSwJLy8gR0w2MjBVU0ItQQorCS5kcml2ZXJfaW5mbyA9CSh1bnNpZ25lZCBsb25nKSAmZ2VuZWxpbmtfaW5mbywKK30sCisJLyogTk9UOiBVU0JfREVWSUNFICgweDA1ZTMsIDB4MDUwMSksCS8vIEdMNjIwVVNCCisJICogdGhhdCdzIGhhbGYgZHVwbGV4LCBub3QgY3VycmVudGx5IHN1cHBvcnRlZAorCSAqLworI2VuZGlmCisKKyNpZmRlZglDT05GSUdfVVNCX05FVDEwODAKK3sKKwlVU0JfREVWSUNFICgweDA1MjUsIDB4MTA4MCksCS8vIE5ldENoaXAgcmVmIGRlc2lnbgorCS5kcml2ZXJfaW5mbyA9CSh1bnNpZ25lZCBsb25nKSAmbmV0MTA4MF9pbmZvLAorfSwgeworCVVTQl9ERVZJQ0UgKDB4MDZEMCwgMHgwNjIyKSwJLy8gTGFwbGluayBHb2xkCisJLmRyaXZlcl9pbmZvID0JKHVuc2lnbmVkIGxvbmcpICZuZXQxMDgwX2luZm8sCit9LAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1BMMjMwMQoreworCVVTQl9ERVZJQ0UgKDB4MDY3YiwgMHgwMDAwKSwJLy8gUEwtMjMwMQorCS5kcml2ZXJfaW5mbyA9CSh1bnNpZ25lZCBsb25nKSAmcHJvbGlmaWNfaW5mbywKK30sIHsKKwlVU0JfREVWSUNFICgweDA2N2IsIDB4MDAwMSksCS8vIFBMLTIzMDIKKwkuZHJpdmVyX2luZm8gPQkodW5zaWduZWQgbG9uZykgJnByb2xpZmljX2luZm8sCit9LAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0tDMjE5MAoreworCVVTQl9ERVZJQ0UgKDB4MDUwZiwgMHgwMTkwKSwJLy8gS0MtMTkwCisJLmRyaXZlcl9pbmZvID0JKHVuc2lnbmVkIGxvbmcpICZrYzIxOTBfaW5mbywKK30sCisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19VU0JfUk5ESVMKK3sKKwkvKiBSTkRJUyBpcyBNU0ZUJ3MgdW4tb2ZmaWNpYWwgdmFyaWFudCBvZiBDREMgQUNNICovCisJVVNCX0lOVEVSRkFDRV9JTkZPIChVU0JfQ0xBU1NfQ09NTSwgMiAvKiBBQ00gKi8sIDB4MGZmKSwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJnJuZGlzX2luZm8sCit9LAorI2VuZGlmCisKKyNpZmRlZglDT05GSUdfVVNCX0FSTUxJTlVYCisvKgorICogU0EtMTEwMCB1c2luZyBzdGFuZGFyZCBBUk0gTGludXgga2VybmVscywgb3IgY29tcGF0aWJsZS4KKyAqIE9mdGVuIHVzZWQgd2hlbiB0YWxraW5nIHRvIExpbnV4IFBEQXMgKGlQYXEsIFlvcHksIGV0YykuCisgKiBUaGUgc2EtMTEwMCAidXNiLWV0aCIgZHJpdmVyIGhhbmRsZXMgdGhlIGJhc2ljIGZyYW1pbmcuCisgKgorICogUFhBMjV4IG9yIFBYQTIxMCAuLi4gIHRoZXNlIHVzZSBhICJ1c2ItZXRoIiBkcml2ZXIgbXVjaCBsaWtlCisgKiB0aGUgc2ExMTAwIG9uZSwgYnV0IGhhcmR3YXJlIHVzZXMgZGlmZmVyZW50IGVuZHBvaW50IG51bWJlcnMuCisgKgorICogT3IgdGhlIExpbnV4ICJFdGhlcm5ldCIgZ2FkZ2V0IG9uIGhhcmR3YXJlIHRoYXQgY2FuJ3QgdGFsaworICogQ0RDIEV0aGVybmV0IChlLmcuLCBubyBhbHRzZXR0aW5ncyksIGluIGVpdGhlciBvZiB0d28gbW9kZXM6CisgKiAgLSBhY3RpbmcganVzdCBsaWtlIHRoZSBvbGQgInVzYi1ldGgiIGZpcm13YXJlLCB0aG91Z2gKKyAqICAgIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBkaWZmZXJlbnQgCisgKiAgLSBzdXBwb3J0aW5nIFJORElTIGFzIHRoZSBmaXJzdC9kZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yCisgKiAgICBNUy1XaW5kb3dzIGludGVyb3A7IExpbnV4IG5lZWRzIHRvIHVzZSB0aGUgb3RoZXIgY29uZmlnCisgKi8KK3sKKwkvLyAxMTgzID0gMHgwNDlGLCBib3RoIHVzZWQgYXMgaGV4IHZhbHVlcz8KKwkvLyBDb21wYXEgIkl0c3kiIHZlbmRvci9wcm9kdWN0IGlkCisJVVNCX0RFVklDRSAoMHgwNDlGLCAweDUwNUEpLAkvLyB1c2ItZXRoLCBvciBjb21wYXRpYmxlCisJLmRyaXZlcl9pbmZvID0JKHVuc2lnbmVkIGxvbmcpICZsaW51eGRldl9pbmZvLAorfSwgeworCVVTQl9ERVZJQ0UgKDB4MEU3RSwgMHgxMDAxKSwJLy8gRy5NYXRlICJZb3B5IgorCS5kcml2ZXJfaW5mbyA9CSh1bnNpZ25lZCBsb25nKSAmeW9weV9pbmZvLAorfSwgeworCVVTQl9ERVZJQ0UgKDB4ODA4NiwgMHgwN2QzKSwJLy8gImJsb2IiIGJvb3Rsb2FkZXIKKwkuZHJpdmVyX2luZm8gPQkodW5zaWduZWQgbG9uZykgJmJsb2JfaW5mbywKK30sIHsKKwkvLyBMaW51eCBFdGhlcm5ldC9STkRJUyBnYWRnZXQgb24gcHhhMjEwLzI1eC8yNngKKwkvLyBlLmcuIEd1bXN0aXgsIGN1cnJlbnQgT3BlblphdXJ1cywgLi4uCisJVVNCX0RFVklDRV9WRVIgKDB4MDUyNSwgMHhhNGEyLCAweDAyMDMsIDB4MDIwMyksCisJLmRyaXZlcl9pbmZvID0JKHVuc2lnbmVkIGxvbmcpICZsaW51eGRldl9pbmZvLAorfSwgCisjZW5kaWYKKworI2lmCWRlZmluZWQoQ09ORklHX1VTQl9aQVVSVVMpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9DRENFVEhFUikKKy8qCisgKiBTQS0xMTAwIGJhc2VkIFNoYXJwIFphdXJ1cyAoImNvbGxpZSIpLCBvciBjb21wYXRpYmxlLgorICogU2FtZSBpZGVhIGFzIGFib3ZlLCBidXQgZGlmZmVyZW50IGZyYW1pbmcuCisgKgorICogUFhBLTJ4eCBiYXNlZCBtb2RlbHMgYXJlIGFsc28gbHlpbmctYWJvdXQtY2RjLgorICogU29tZSBtb2RlbHMgZG9uJ3QgZXZlbiB0ZWxsIHRoZSBzYW1lIGxpZXMgLi4uCisgKgorICogTk9URTogIE9wZW5aYXVydXMgdmVyc2lvbnMgd2l0aCAyLjYga2VybmVscyB3b24ndCB1c2UgdGhlc2UgZW50cmllcywKKyAqIHVubGlrZSB0aGUgb2xkZXIgb25lcyB3aXRoIDIuNCAiZW1iZWRpeCIga2VybmVscy4KKyAqCisgKiBOT1RFOiAgVGhlc2UgZW50cmllcyBkbyBkb3VibGUtZHV0eSwgc2VydmluZyBhcyBibGFja2xpc3QgZW50cmllcworICogd2hlbmV2ZXIgWmF1cnVzIHN1cHBvcnQgaXNuJ3QgZW5hYmxlZCwgYnV0IENEQyBFdGhlcm5ldCBpcy4KKyAqLworI2RlZmluZQlaQVVSVVNfTUFTVEVSX0lOVEVSRkFDRSBcCisJLmJJbnRlcmZhY2VDbGFzcwk9IFVTQl9DTEFTU19DT01NLCBcCisJLmJJbnRlcmZhY2VTdWJDbGFzcwk9IFVTQl9DRENfU1VCQ0xBU1NfRVRIRVJORVQsIFwKKwkuYkludGVyZmFjZVByb3RvY29sCT0gVVNCX0NEQ19QUk9UT19OT05FCit7CisJLm1hdGNoX2ZsYWdzCT0gICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPCisJCQkgIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsIAorCS5pZFZlbmRvcgkJPSAweDA0REQsCisJLmlkUHJvZHVjdAkJPSAweDgwMDQsCisJWkFVUlVTX01BU1RFUl9JTlRFUkZBQ0UsCisJLmRyaXZlcl9pbmZvID0gWkFVUlVTX1NUUk9OR0FSTV9JTkZPLAorfSwgeworCS5tYXRjaF9mbGFncwk9ICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTworCQkJICB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLCAKKwkuaWRWZW5kb3IJCT0gMHgwNERELAorCS5pZFByb2R1Y3QJCT0gMHg4MDA1LAkvKiBBLTMwMCAqLworCVpBVVJVU19NQVNURVJfSU5URVJGQUNFLAorCS5kcml2ZXJfaW5mbyA9IFpBVVJVU19QWEFfSU5GTywKK30sIHsKKwkubWF0Y2hfZmxhZ3MJPSAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8KKwkJCSAgfCBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwgCisJLmlkVmVuZG9yCQk9IDB4MDRERCwKKwkuaWRQcm9kdWN0CQk9IDB4ODAwNiwJLyogQi01MDAvU0wtNTYwMCAqLworCVpBVVJVU19NQVNURVJfSU5URVJGQUNFLAorCS5kcml2ZXJfaW5mbyA9IFpBVVJVU19QWEFfSU5GTywKK30sIHsKKwkubWF0Y2hfZmxhZ3MgICAgPSAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8KKwkgICAgICAgICAgfCBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwKKwkuaWRWZW5kb3IJCT0gMHgwNERELAorCS5pZFByb2R1Y3QJCT0gMHg4MDA3LAkvKiBDLTcwMCAqLworCVpBVVJVU19NQVNURVJfSU5URVJGQUNFLAorCS5kcml2ZXJfaW5mbyA9IFpBVVJVU19QWEFfSU5GTywKK30sIHsKKwkubWF0Y2hfZmxhZ3MgICAgPSAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8KKwkJIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsCisJLmlkVmVuZG9yICAgICAgICAgICAgICAgPSAweDA0REQsCisJLmlkUHJvZHVjdCAgICAgICAgICAgICAgPSAweDkwMzEsCS8qIEMtNzUwIEMtNzYwICovCisJWkFVUlVTX01BU1RFUl9JTlRFUkZBQ0UsCisJLmRyaXZlcl9pbmZvID0gWkFVUlVTX1BYQV9JTkZPLAorfSwgeworCS5tYXRjaF9mbGFncyAgICA9ICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTworCQkgfCBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwKKwkuaWRWZW5kb3IgICAgICAgICAgICAgICA9IDB4MDRERCwKKwkuaWRQcm9kdWN0ICAgICAgICAgICAgICA9IDB4OTAzMiwJLyogU0wtNjAwMCAqLworCVpBVVJVU19NQVNURVJfSU5URVJGQUNFLAorCS5kcml2ZXJfaW5mbyA9IFpBVVJVU19QWEFfSU5GTywKK30sIHsKKwkubWF0Y2hfZmxhZ3MgICAgPSAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8KKwkJIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsCisJLmlkVmVuZG9yICAgICAgICAgICAgICAgPSAweDA0REQsCisJLyogcmVwb3J0ZWQgd2l0aCBzb21lIEM4NjAgdW5pdHMgKi8KKwkuaWRQcm9kdWN0ICAgICAgICAgICAgICA9IDB4OTA1MCwJLyogQy04NjAgKi8KKwlaQVVSVVNfTUFTVEVSX0lOVEVSRkFDRSwKKwkuZHJpdmVyX2luZm8gPSBaQVVSVVNfUFhBX0lORk8sCisjaWZkZWYJQ09ORklHX1VTQl9aQVVSVVMKKwkvKiBhdCBsZWFzdCBzb21lIChyZXBvcnRzIHZhcnkpIEMtODYwIHVuaXRzIGhhdmUgdmVyeSBkaWZmZXJlbnQKKwkgKiBsaWVzIGFib3V0IHRoZWlyIHN0YW5kYXJkcyBzdXBwb3J0LgorCSAqLworfSwgeworCS5tYXRjaF9mbGFncyAgICA9ICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTworCQkgfCBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwKKwkuaWRWZW5kb3IgICAgICAgICAgICAgICA9IDB4MDRERCwKKwkvKiByZXBvcnRlZCB3aXRoIHNvbWUgQzg2MCB1bml0cyAqLworCS5pZFByb2R1Y3QgICAgICAgICAgICAgID0gMHg5MDMxLAkvKiBDLTg2MCAqLworCS5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfQ09NTSwKKwkuYkludGVyZmFjZVN1YkNsYXNzCT0gVVNCX0NEQ19TVUJDTEFTU19NRExNLAorCS5iSW50ZXJmYWNlUHJvdG9jb2wJPSBVU0JfQ0RDX1BST1RPX05PTkUsCisJLmRyaXZlcl9pbmZvIAkJPSAodW5zaWduZWQgbG9uZykgJnphdXJ1c19weGFfbWRsbV9pbmZvLAorI2VuZGlmCit9LAorCisvKiBPbHltcHVzIGhhcyBzb21lIG1vZGVscyB3aXRoIGEgWmF1cnVzLWNvbXBhdGlibGUgb3B0aW9uLgorICogUi0xMDAwIHVzZXMgYSBGcmVlU2NhbGUgaS5NWEwgY3B1IChBUk12NFQpCisgKi8KK3sKKwkubWF0Y2hfZmxhZ3MgICAgPSAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8KKwkJIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsCisJLmlkVmVuZG9yICAgICAgICAgICAgICAgPSAweDA3QjQsCisJLmlkUHJvZHVjdCAgICAgICAgICAgICAgPSAweDBGMDIsCS8qIFItMTAwMCAqLworCVpBVVJVU19NQVNURVJfSU5URVJGQUNFLAorCS5kcml2ZXJfaW5mbyA9IE9MWU1QVVNfTVhMX0lORk8sCit9LAorI2VuZGlmCisKKyNpZmRlZglDT05GSUdfVVNCX0NEQ0VUSEVSCit7CisJLyogQ0RDIEV0aGVyIHVzZXMgdHdvIGludGVyZmFjZXMsIG5vdCBuZWNlc3NhcmlseSBjb25zZWN1dGl2ZS4KKwkgKiBXZSBtYXRjaCB0aGUgbWFpbiBpbnRlcmZhY2UsIGlnbm9yaW5nIHRoZSBvcHRpb25hbCBkZXZpY2UKKwkgKiBjbGFzcyBzbyB3ZSBjb3VsZCBoYW5kbGUgZGV2aWNlcyB0aGF0IGFyZW4ndCBleGNsdXNpdmVseQorCSAqIENEQyBldGhlci4KKwkgKgorCSAqIE5PVEU6ICB0aGlzIG1hdGNoIG11c3QgY29tZSBBRlRFUiBlbnRyaWVzIHdvcmtpbmcgYXJvdW5kCisJICogYnVncy9xdWlya3MgaW4gYSBnaXZlbiBwcm9kdWN0IChsaWtlIFphdXJ1cywgYWJvdmUpLgorCSAqLworCVVTQl9JTlRFUkZBQ0VfSU5GTyAoVVNCX0NMQVNTX0NPTU0sIFVTQl9DRENfU1VCQ0xBU1NfRVRIRVJORVQsCisJCQlVU0JfQ0RDX1BST1RPX05PTkUpLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmY2RjX2luZm8sCit9LAorI2VuZGlmCisKKwl7IH0sCQkvLyBFTkQKK307CitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHByb2R1Y3RzKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYm5ldF9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJZHJpdmVyX25hbWUsCisJLmlkX3RhYmxlID0JcHJvZHVjdHMsCisJLnByb2JlID0JdXNibmV0X3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNibmV0X2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2JuZXRfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNibmV0X3Jlc3VtZSwKK307CisKKy8qIERlZmF1bHQgZXRodG9vbF9vcHMgYXNzaWduZWQuICBEZXZpY2VzIGNhbiBvdmVycmlkZSBpbiB0aGVpciBiaW5kKCkgcm91dGluZSAqLworc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyB1c2JuZXRfZXRodG9vbF9vcHMgPSB7CisJLmdldF9kcnZpbmZvCQk9IHVzYm5ldF9nZXRfZHJ2aW5mbywKKwkuZ2V0X2xpbmsJCT0gdXNibmV0X2dldF9saW5rLAorCS5nZXRfbXNnbGV2ZWwJCT0gdXNibmV0X2dldF9tc2dsZXZlbCwKKwkuc2V0X21zZ2xldmVsCQk9IHVzYm5ldF9zZXRfbXNnbGV2ZWwsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9faW5pdCB1c2JuZXRfaW5pdCAodm9pZCkKK3sKKwkvLyBjb21waWxlciBzaG91bGQgb3B0aW1pemUgdGhlc2Ugb3V0CisJQlVHX09OIChzaXplb2YgKCgoc3RydWN0IHNrX2J1ZmYgKikwKS0+Y2IpCisJCQk8IHNpemVvZiAoc3RydWN0IHNrYl9kYXRhKSk7CisjaWZkZWYJQ09ORklHX1VTQl9DRENFVEhFUgorCUJVR19PTiAoKHNpemVvZiAoKChzdHJ1Y3QgdXNibmV0ICopMCktPmRhdGEpCisJCQk8IHNpemVvZiAoc3RydWN0IGNkY19zdGF0ZSkpKTsKKyNlbmRpZgorCisJcmFuZG9tX2V0aGVyX2FkZHIobm9kZV9pZCk7CisKKyAJcmV0dXJuIHVzYl9yZWdpc3RlcigmdXNibmV0X2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCAodXNibmV0X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNibmV0X2V4aXQgKHZvaWQpCit7CisgCXVzYl9kZXJlZ2lzdGVyICgmdXNibmV0X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCAodXNibmV0X2V4aXQpOworCitNT0RVTEVfQVVUSE9SICgiRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04gKCJVU0IgSG9zdC10by1Ib3N0IExpbmsgRHJpdmVycyAobnVtZXJvdXMgdmVuZG9ycykiKTsKK01PRFVMRV9MSUNFTlNFICgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvemQxMjAxLmMgYi9kcml2ZXJzL3VzYi9uZXQvemQxMjAxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM4MDI1ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL25ldC96ZDEyMDEuYwpAQCAtMCwwICsxLDE5MDUgQEAKKy8qCisgKglEcml2ZXIgZm9yIFp5REFTIHpkMTIwMSBiYXNlZCB3aXJlbGVzcyBVU0IgZGV2aWNlcy4KKyAqCisgKglDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSmVyb2VuIFZyZWVrZW4gKHBlMXJ4cUBhbXNhdC5vcmcpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCXZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKglQYXJ0cyBvZiB0aGlzIGRyaXZlciBoYXZlIGJlZW4gZGVyaXZlZCBmcm9tIGEgd2xhbi1uZyB2ZXJzaW9uCisgKgltb2RpZmllZCBieSBaeURBUy4gVGhleSBhbHNvIG1hZGUgZG9jdW1lbnRhdGlvbiBhdmFpbGFibGUsIHRoYW5rcyEKKyAqCUNvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8aWVlZTgwMl8xMS5oPgorI2luY2x1ZGUgInpkMTIwMS5oIgorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgemQxMjAxX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgwNTg2LCAweDM0MDApfSwgLyogUGVhYmlyZCBXaXJlbGVzcyBVU0IgQWRhcHRlciAqLworCXtVU0JfREVWSUNFKDB4MGFjZSwgMHgxMjAxKX0sIC8qIFp5REFTIFpEMTIwMSBXaXJlbGVzcyBVU0IgQWRhcHRlciAqLworCXtVU0JfREVWSUNFKDB4MDUwZCwgMHg2MDUxKX0sIC8qIEJlbGtpbiBGNUQ2MDUxIHVzYiAgYWRhcHRlciAqLworCXtVU0JfREVWSUNFKDB4MGRiMCwgMHg2ODIzKX0sIC8qIE1TSSBVQjExQiB1c2IgIGFkYXB0ZXIgKi8KKwl7fQorfTsKKworc3RhdGljIGludCBhcCA9IDA7CS8qIEFyZSB3ZSBhbiBBUCBvciBhIG5vcm1hbCBzdGF0aW9uPyAqLworCisjZGVmaW5lIFpEMTIwMV9WRVJTSU9OCSIwLjE1IgorCitNT0RVTEVfQVVUSE9SKCJKZXJvZW4gVnJlZWtlbiA8cGUxcnhxQGFtc2F0Lm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBaeURBUyBaRDEyMDEgYmFzZWQgVVNCIFdpcmVsZXNzIGFkYXB0ZXJzIik7CitNT0RVTEVfVkVSU0lPTihaRDEyMDFfVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7Cittb2R1bGVfcGFyYW0oYXAsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGFwLCAiSWYgbm9uLXplcm8gQWNjZXNzIFBvaW50IGZpcm13YXJlIHdpbGwgYmUgbG9hZGVkIik7CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgemQxMjAxX3RhYmxlKTsKKworCitpbnQgemQxMjAxX2Z3X3VwbG9hZChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgYXBmdykKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5OworCWNoYXIqIGRhdGE7CisJdW5zaWduZWQgbG9uZyBsZW47CisJaW50IGVycjsKKwl1bnNpZ25lZCBjaGFyIHJldDsKKwljaGFyICpidWY7CisJY2hhciAqZndmaWxlOworCisJaWYgKGFwZncpCisJCWZ3ZmlsZSA9ICJ6ZDEyMDEtYXAuZnciOworCWVsc2UKKwkJZndmaWxlID0gInpkMTIwMS5mdyI7CisKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgZndmaWxlLCAmZGV2LT5kZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJGYWlsZWQgdG8gbG9hZCAlcyBmaXJtd2FyZSBmaWxlIVxuIiwgZndmaWxlKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJNYWtlIHN1cmUgdGhlIGhvdHBsdWcgZmlybXdhcmUgbG9hZGVyIGlzIGluc3RhbGxlZC5cbiIpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkdvdG8gaHR0cDovL2xpbnV4LWxjMTAwMDIwLnNvdXJjZWZvcmdlLm5ldCBmb3IgbW9yZSBpbmZvXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlkYXRhID0gZndfZW50cnktPmRhdGE7CisgICAgICAgIGxlbiA9IGZ3X2VudHJ5LT5zaXplOworCisJYnVmID0ga21hbGxvYygxMDI0LCBHRlBfQVRPTUlDKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBleGl0OworCQorCXdoaWxlIChsZW4gPiAwKSB7CisJCWludCB0cmFuc2xlbiA9IChsZW4gPiAxMDI0KSA/IDEwMjQgOiBsZW47CisJCW1lbWNweShidWYsIGRhdGEsIHRyYW5zbGVuKTsKKworCQllcnIgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgMCwKKwkJICAgIFVTQl9ESVJfT1VUIHwgMHg0MCwgMCwgMCwgYnVmLCB0cmFuc2xlbiwKKwkJICAgIFpEMTIwMV9GV19USU1FT1VUKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGV4aXQ7CisKKwkJbGVuIC09IHRyYW5zbGVuOworCQlkYXRhICs9IHRyYW5zbGVuOworCX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwllcnIgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgMHgyLAorCSAgICBVU0JfRElSX09VVCB8IDB4NDAsIDAsIDAsIE5VTEwsIDAsIFpEMTIwMV9GV19USU1FT1VUKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBleGl0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCWVyciA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCAweDQsCisJICAgIFVTQl9ESVJfSU4gfCAweDQwLCAwLDAsICZyZXQsIHNpemVvZihyZXQpLCBaRDEyMDFfRldfVElNRU9VVCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXhpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwlpZiAocmV0ICYgMHg4MCkgeworCQllcnIgPSAtRUlPOworCQlnb3RvIGV4aXQ7CisJfQorCisJZXJyID0gMDsKK2V4aXQ6CisgCWlmIChidWYpCisJCWtmcmVlKGJ1Zik7CisJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCB6ZDEyMDFfdXNiZnJlZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gdXJiLT5jb250ZXh0OworCisJc3dpdGNoKHVyYi0+c3RhdHVzKSB7CisJCWNhc2UgLUVJTFNFUToKKwkJY2FzZSAtRU5PREVWOgorCQljYXNlIC1FVElNRURPVVQ6CisJCWNhc2UgLUVOT0VOVDoKKwkJY2FzZSAtRVBJUEU6CisJCWNhc2UgLUVPVkVSRkxPVzoKKwkJY2FzZSAtRVNIVVRET1dOOgorCQkJZGV2X3dhcm4oJnpkLT51c2ItPmRldiwgIiVzOiB1cmIgZmFpbGVkOiAlZFxuIiwgCisJCQkgICAgemQtPmRldi0+bmFtZSwgdXJiLT5zdGF0dXMpOworCX0KKworCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwl1c2JfZnJlZV91cmIodXJiKTsKKwlyZXR1cm47Cit9CisKKy8qIGNtZHJlcSBtZXNzYWdlOiAKKwl1MzIgdHlwZQorCXUxNiBjbWQKKwl1MTYgcGFybTAKKwl1MTYgcGFybTEKKwl1MTYgcGFybTIKKwl1OCAgcGFkWzRdCisKKwl0b3RhbDogNCArIDIgKyAyICsgMiArIDIgKyA0ID0gMTYKKyovCitpbnQgemQxMjAxX2RvY21kKHN0cnVjdCB6ZDEyMDEgKnpkLCBpbnQgY21kLCBpbnQgcGFybTAsIGludCBwYXJtMSwgaW50IHBhcm0yKQoreworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQ7CisJaW50IHJldDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwljb21tYW5kID0ga21hbGxvYygxNiwgR0ZQX0FUT01JQyk7CisJaWYgKCFjb21tYW5kKQorCQlyZXR1cm4gLUVOT01FTTsKKworCSooKF9fbGUzMiopY29tbWFuZCkgPSBjcHVfdG9fbGUzMihaRDEyMDFfVVNCX0NNRFJFUSk7CisJKigoX19sZTE2KikmY29tbWFuZFs0XSkgPSBjcHVfdG9fbGUxNihjbWQpOworCSooKF9fbGUxNiopJmNvbW1hbmRbNl0pID0gY3B1X3RvX2xlMTYocGFybTApOworCSooKF9fbGUxNiopJmNvbW1hbmRbOF0pID0gY3B1X3RvX2xlMTYocGFybTEpOworCSooKF9fbGUxNiopJmNvbW1hbmRbMTBdKT0gY3B1X3RvX2xlMTYocGFybTIpOworCisJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXVyYikgeworCQlrZnJlZShjb21tYW5kKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgemQtPnVzYiwgdXNiX3NuZGJ1bGtwaXBlKHpkLT51c2IsIHpkLT5lbmRwX291dDIpLAorCSAgICAgY29tbWFuZCwgMTYsIHpkMTIwMV91c2JmcmVlLCB6ZCk7CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKGNvbW1hbmQpOworCQl1c2JfZnJlZV91cmIodXJiKTsKKwl9CisJCisJcmV0dXJuIHJldDsKK30KKworLyogQ2FsbGJhY2sgYWZ0ZXIgc2VuZGluZyBvdXQgYSBwYWNrZXQgKi8KK3ZvaWQgemQxMjAxX3VzYnR4KHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSB1cmItPmNvbnRleHQ7CisJbmV0aWZfd2FrZV9xdWV1ZSh6ZC0+ZGV2KTsKKwlyZXR1cm47Cit9CisKKy8qIEluY29tbWluZyBkYXRhICovCit2b2lkIHpkMTIwMV91c2JyeChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gdXJiLT5jb250ZXh0OworCWludCBmcmVlID0gMDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bnNpZ25lZCBjaGFyIHR5cGU7CisKKwlpZiAoIXpkKSB7CisJCWZyZWUgPSAxOworCQlnb3RvIGV4aXQ7CisJfQorCisJc3dpdGNoKHVyYi0+c3RhdHVzKSB7CisJCWNhc2UgLUVJTFNFUToKKwkJY2FzZSAtRU5PREVWOgorCQljYXNlIC1FVElNRURPVVQ6CisJCWNhc2UgLUVOT0VOVDoKKwkJY2FzZSAtRVBJUEU6CisJCWNhc2UgLUVPVkVSRkxPVzoKKwkJY2FzZSAtRVNIVVRET1dOOgorCQkJZGV2X3dhcm4oJnpkLT51c2ItPmRldiwgIiVzOiByeCB1cmIgZmFpbGVkOiAlZFxuIiwKKwkJCSAgICB6ZC0+ZGV2LT5uYW1lLCB1cmItPnN0YXR1cyk7CisJCQlmcmVlID0gMTsKKwkJCWdvdG8gZXhpdDsKKwl9CisJCisJaWYgKHVyYi0+c3RhdHVzICE9IDAgfHwgdXJiLT5hY3R1YWxfbGVuZ3RoID09IDApCisJCWdvdG8gcmVzdWJtaXQ7CisKKwl0eXBlID0gZGF0YVswXTsKKwlpZiAodHlwZSA9PSBaRDEyMDFfUEFDS0VUX0VWRU5UU1RBVCB8fCB0eXBlID09IFpEMTIwMV9QQUNLRVRfUkVTT1VSQ0UpIHsKKwkJbWVtY3B5KHpkLT5yeGRhdGEsIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCXpkLT5yeGxlbiA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJemQtPnJ4ZGF0YXMgPSAxOworCQl3YWtlX3VwKCZ6ZC0+cnhkYXRhcSk7CisJfQorCS8qIEluZm8gZnJhbWUgKi8KKwlpZiAodHlwZSA9PSBaRDEyMDFfUEFDS0VUX0lOUVVJUkUpIHsKKwkJaW50IGkgPSAwOworCQl1bnNpZ25lZCBzaG9ydCBpbmZvdHlwZSwgZnJhbWVsZW4sIGNvcHlsZW47CisJCWZyYW1lbGVuID0gbGUxNl90b19jcHUoKihfX2xlMTYqKSZkYXRhWzRdKTsKKwkJaW5mb3R5cGUgPSBsZTE2X3RvX2NwdSgqKF9fbGUxNiopJmRhdGFbNl0pOworCisJCWlmIChpbmZvdHlwZSA9PSBaRDEyMDFfSU5GX0xJTktTVEFUVVMpIHsKKwkJCXNob3J0IGxpbmtzdGF0dXM7CisKKwkJCWxpbmtzdGF0dXMgPSBsZTE2X3RvX2NwdSgqKF9fbGUxNiopJmRhdGFbOF0pOworCQkJc3dpdGNoKGxpbmtzdGF0dXMpIHsKKwkJCQljYXNlIDE6CisJCQkJCW5ldGlmX2NhcnJpZXJfb24oemQtPmRldik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMjoKKwkJCQkJbmV0aWZfY2Fycmllcl9vZmYoemQtPmRldik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMzoKKwkJCQkJbmV0aWZfY2Fycmllcl9vZmYoemQtPmRldik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgNDoKKwkJCQkJbmV0aWZfY2Fycmllcl9vbih6ZC0+ZGV2KTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJbmV0aWZfY2Fycmllcl9vZmYoemQtPmRldik7CisJCQl9CisJCQlnb3RvIHJlc3VibWl0OworCQl9CisJCWlmIChpbmZvdHlwZSA9PSBaRDEyMDFfSU5GX0FTU09DU1RBVFVTKSB7CisJCQlzaG9ydCBzdGF0dXMgPSBsZTE2X3RvX2NwdSgqKF9fbGUxNiopKGRhdGErOCkpOworCQkJaW50IGV2ZW50OworCQkJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCisJCQlzd2l0Y2ggKHN0YXR1cykgeworCQkJCWNhc2UgWkQxMjAxX0FTU09DU1RBVFVTX1NUQUFTU09DOgorCQkJCWNhc2UgWkQxMjAxX0FTU09DU1RBVFVTX1JFQVNTT0M6CisJCQkJCWV2ZW50ID0gSVdFVlJFR0lTVEVSRUQ7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgWkQxMjAxX0FTU09DU1RBVFVTX0RJU0FTU09DOgorCQkJCWNhc2UgWkQxMjAxX0FTU09DU1RBVFVTX0FTU09DRkFJTDoKKwkJCQljYXNlIFpEMTIwMV9BU1NPQ1NUQVRVU19BVVRIRkFJTDoKKwkJCQlkZWZhdWx0OgorCQkJCQlldmVudCA9IElXRVZFWFBJUkVEOworCQkJfQorCQkJbWVtY3B5KHdycXUuYWRkci5zYV9kYXRhLCBkYXRhKzEwLCBFVEhfQUxFTik7CisJCQl3cnF1LmFkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCisJCQkvKiBTZW5kIGV2ZW50IHRvIHVzZXIgc3BhY2UgKi8KKwkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoemQtPmRldiwgZXZlbnQsICZ3cnF1LCBOVUxMKTsKKworCQkJZ290byByZXN1Ym1pdDsKKwkJfQorCQlpZiAoaW5mb3R5cGUgPT0gWkQxMjAxX0lORl9BVVRIUkVRKSB7CisJCQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisKKwkJCW1lbWNweSh3cnF1LmFkZHIuc2FfZGF0YSwgZGF0YSs4LCBFVEhfQUxFTik7CisJCQl3cnF1LmFkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCQkJLyogVGhlcmUgaXNuJ3QgYSBldmVudCB0aGF0IHRydWxseSBmaXRzIHRoaXMgcmVxdWVzdC4KKwkJCSAgIFdlIGFzc3VtZSB0aGF0IHVzZXJzcGFjZSB3aWxsIGJlIHNtYXJ0IGVub3VnaCB0bworCQkJICAgc2VlIGEgbmV3IHN0YXRpb24gYmVpbmcgZXhwaXJlZCBhbmQgc2VuZHMgYmFjayBhCisJCQkgICBhdXRoc3RhdGlvbiBpb2N0bCB0byBhdXRob3JpemUgaXQuICovCisJCQl3aXJlbGVzc19zZW5kX2V2ZW50KHpkLT5kZXYsIElXRVZFWFBJUkVELCAmd3JxdSwgTlVMTCk7CisJCQlnb3RvIHJlc3VibWl0OworCQl9CisJCS8qIE90aGVyIGluZm90eXBlcyBhcmUgaGFuZGxlZCBvdXRzaWRlIHRoaXMgaGFuZGxlciAqLworCQl6ZC0+cnhsZW4gPSAwOworCQl3aGlsZSAoaSA8IHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQkJY29weWxlbiA9IGxlMTZfdG9fY3B1KCooX19sZTE2KikmZGF0YVtpKzJdKTsKKwkJCS8qIFNhbml0eSBjaGVjaywgc29tZXRpbWVzIHdlIGdldCBqdW5rICovCisJCQlpZiAoY29weWxlbit6ZC0+cnhsZW4gPiBzaXplb2YoemQtPnJ4ZGF0YSkpCisJCQkJYnJlYWs7CisJCQltZW1jcHkoemQtPnJ4ZGF0YSt6ZC0+cnhsZW4sIGRhdGEraSs0LCBjb3B5bGVuKTsKKwkJCXpkLT5yeGxlbiArPSBjb3B5bGVuOworCQkJaSArPSA2NDsKKwkJfQorCQlpZiAoaSA+PSB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJCXpkLT5yeGRhdGFzID0gMTsKKwkJCXdha2VfdXAoJnpkLT5yeGRhdGFxKTsKKwkJfQorCQlnb3RvICByZXN1Ym1pdDsKKwl9CisJLyogQWN0dWFsIGRhdGEgKi8KKwlpZiAoZGF0YVt1cmItPmFjdHVhbF9sZW5ndGgtMV0gPT0gWkQxMjAxX1BBQ0tFVF9SWERBVEEpIHsKKwkJaW50IGRhdGFsZW4gPSB1cmItPmFjdHVhbF9sZW5ndGgtMTsKKwkJdW5zaWduZWQgc2hvcnQgbGVuLCBmYywgc2VxOworCQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKworCQlsZW4gPSBudG9ocygqKF9fYmUxNiAqKSZkYXRhW2RhdGFsZW4tMl0pOworCQlpZiAobGVuPmRhdGFsZW4pCisJCQlsZW49ZGF0YWxlbjsKKwkJZmMgPSBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSZkYXRhW2RhdGFsZW4tMTZdKTsKKwkJc2VxID0gbGUxNl90b19jcHUoKihfX2xlMTYgKikmZGF0YVtkYXRhbGVuLTI0XSk7CisKKwkJaWYoemQtPm1vbml0b3IpIHsKKwkJCWlmIChkYXRhbGVuIDwgMjQpCisJCQkJZ290byByZXN1Ym1pdDsKKwkJCWlmICghKHNrYiA9IGRldl9hbGxvY19za2IoZGF0YWxlbisyNCkpKQorCQkJCWdvdG8gcmVzdWJtaXQ7CisJCQkKKwkJCW1lbWNweShza2JfcHV0KHNrYiwgMiksICZkYXRhW2RhdGFsZW4tMTZdLCAyKTsKKwkJCW1lbWNweShza2JfcHV0KHNrYiwgMiksICZkYXRhW2RhdGFsZW4tMl0sIDIpOworCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCA2KSwgJmRhdGFbZGF0YWxlbi0xNF0sIDYpOworCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCA2KSwgJmRhdGFbZGF0YWxlbi0yMl0sIDYpOworCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCA2KSwgJmRhdGFbZGF0YWxlbi04XSwgNik7CisJCQltZW1jcHkoc2tiX3B1dChza2IsIDIpLCAmZGF0YVtkYXRhbGVuLTI0XSwgMik7CisJCQltZW1jcHkoc2tiX3B1dChza2IsIGxlbiksIGRhdGEsIGxlbik7CisJCQlza2ItPmRldiA9IHpkLT5kZXY7CisJCQlza2ItPmRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCB6ZC0+ZGV2KTsKKwkJCXpkLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQl6ZC0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCQluZXRpZl9yeChza2IpOworCQkJZ290byByZXN1Ym1pdDsKKwkJfQorCQkJCisJCWlmICgoc2VxICYgSUVFRTgwMl8xMV9TQ1RMX0ZSQUcpIHx8CisJCSAgICAoZmMgJiBJRUVFODAyXzExX0ZDVExfTU9SRUZSQUdTKSkgeworCQkJc3RydWN0IHpkMTIwMV9mcmFnICpmcmFnID0gTlVMTDsKKwkJCWNoYXIgKnB0cjsKKworCQkJaWYgKGRhdGFsZW48MTQpCisJCQkJZ290byByZXN1Ym1pdDsKKwkJCWlmICgoc2VxICYgSUVFRTgwMl8xMV9TQ1RMX0ZSQUcpID09IDApIHsKKwkJCQlmcmFnID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHpkMTIwMV9mcmFnKiksCisJCQkJICAgIEdGUF9BVE9NSUMpOworCQkJCWlmICghZnJhZykKKwkJCQkJZ290byByZXN1Ym1pdDsKKwkJCQlza2IgPSBkZXZfYWxsb2Nfc2tiKElFRUU4MDJfMTFfREFUQV9MRU4gKzE0KzIpOworCQkJCWlmICghc2tiKSB7CisJCQkJCWtmcmVlKGZyYWcpOworCQkJCQlnb3RvIHJlc3VibWl0OworCQkJCX0KKwkJCQlmcmFnLT5za2IgPSBza2I7CisJCQkJZnJhZy0+c2VxID0gc2VxICYgSUVFRTgwMl8xMV9TQ1RMX1NFUTsKKwkJCQlza2JfcmVzZXJ2ZShza2IsIDIpOworCQkJCW1lbWNweShza2JfcHV0KHNrYiwgMTIpLCAmZGF0YVtkYXRhbGVuLTE0XSwgMTIpOworCQkJCW1lbWNweShza2JfcHV0KHNrYiwgMiksICZkYXRhWzZdLCAyKTsKKwkJCQltZW1jcHkoc2tiX3B1dChza2IsIGxlbiksIGRhdGErOCwgbGVuKTsKKwkJCQlobGlzdF9hZGRfaGVhZCgmZnJhZy0+Zm5vZGUsICZ6ZC0+ZnJhZ2xpc3QpOworCQkJCWdvdG8gcmVzdWJtaXQ7CisJCQl9CisJCQlobGlzdF9mb3JfZWFjaF9lbnRyeShmcmFnLCBub2RlLCAmemQtPmZyYWdsaXN0LCBmbm9kZSkKKwkJCQlpZihmcmFnLT5zZXEgPT0gKHNlcSZJRUVFODAyXzExX1NDVExfU0VRKSkKKwkJCQkJYnJlYWs7CisJCQlpZiAoIWZyYWcpCisJCQkJZ290byByZXN1Ym1pdDsKKwkJCXNrYiA9IGZyYWctPnNrYjsKKwkJCXB0ciA9IHNrYl9wdXQoc2tiLCBsZW4pOworCQkJaWYgKHB0cikKKwkJCQltZW1jcHkocHRyLCBkYXRhKzgsIGxlbik7CisJCQlpZiAoZmMgJiBJRUVFODAyXzExX0ZDVExfTU9SRUZSQUdTKQorCQkJCWdvdG8gcmVzdWJtaXQ7CisJCQlobGlzdF9kZWxfaW5pdCgmZnJhZy0+Zm5vZGUpOworCQkJa2ZyZWUoZnJhZyk7CisJCQkvKiBGYWxsdGhyb3VnaCAqLworCQl9IGVsc2UgeworCQkJaWYgKGRhdGFsZW48MTQpCisJCQkJZ290byByZXN1Ym1pdDsKKwkJCXNrYiA9IGRldl9hbGxvY19za2IobGVuICsgMTQgKyAyKTsKKwkJCWlmICghc2tiKQorCQkJCWdvdG8gcmVzdWJtaXQ7CisJCQlza2JfcmVzZXJ2ZShza2IsIDIpOworCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCAxMiksICZkYXRhW2RhdGFsZW4tMTRdLCAxMik7CisJCQltZW1jcHkoc2tiX3B1dChza2IsIDIpLCAmZGF0YVs2XSwgMik7CisJCQltZW1jcHkoc2tiX3B1dChza2IsIGxlbiksIGRhdGErOCwgbGVuKTsKKwkJfQorCQlza2ItPmRldiA9IHpkLT5kZXY7CisJCXNrYi0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgemQtPmRldik7CisJCXpkLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCXpkLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJbmV0aWZfcngoc2tiKTsKKwl9CityZXN1Ym1pdDoKKwltZW1zZXQoZGF0YSwgMCwgWkQxMjAxX1JYU0laRSk7CisKKwl1cmItPnN0YXR1cyA9IDA7CisJdXJiLT5kZXYgPSB6ZC0+dXNiOworCWlmKHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpCisJCWZyZWUgPSAxOworCitleGl0OgorCWlmIChmcmVlKSB7CisJCXpkLT5yeGxlbiA9IDA7CisJCXpkLT5yeGRhdGFzID0gMTsKKwkJd2FrZV91cCgmemQtPnJ4ZGF0YXEpOworCQlrZnJlZSh1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIGludCB6ZDEyMDFfZ2V0Y29uZmlnKHN0cnVjdCB6ZDEyMDEgKnpkLCBpbnQgcmlkLCB2b2lkICpyaWRkYXRhLAorCXVuc2lnbmVkIGludCByaWRkYXRhbGVuKQoreworCWludCBlcnI7CisJaW50IGkgPSAwOworCWludCBjb2RlOworCWludCByaWRfZmlkOworCWludCBsZW5ndGg7CisJdW5zaWduZWQgY2hhciAqcGRhdGE7CisJCisJemQtPnJ4ZGF0YXMgPSAwOworCWVyciA9IHpkMTIwMV9kb2NtZCh6ZCwgWkQxMjAxX0NNRENPREVfQUNDRVNTLCByaWQsIDAsIDApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoemQtPnJ4ZGF0YXEsIHpkLT5yeGRhdGFzKTsKKwlpZiAoIXpkLT5yeGxlbikKKwkJcmV0dXJuIC1FSU87CisKKwljb2RlID0gbGUxNl90b19jcHUoKihfX2xlMTYqKSgmemQtPnJ4ZGF0YVs0XSkpOworCXJpZF9maWQgPSBsZTE2X3RvX2NwdSgqKF9fbGUxNiopKCZ6ZC0+cnhkYXRhWzZdKSk7CisJbGVuZ3RoID0gbGUxNl90b19jcHUoKihfX2xlMTYqKSgmemQtPnJ4ZGF0YVs4XSkpOworCWlmIChsZW5ndGggPiB6ZC0+cnhsZW4pCisJCWxlbmd0aCA9IHpkLT5yeGxlbi02OworCisJLyogSWYgYWNjZXNzIGJpdCBpcyBub3Qgb24sIHRoZW4gZXJyb3IgKi8KKwlpZiAoKGNvZGUgJiBaRDEyMDFfQUNDRVNTQklUKSAhPSBaRDEyMDFfQUNDRVNTQklUIHx8IHJpZF9maWQgIT0gcmlkICkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBOb3QgZW5vdWdoIGJ1ZmZlciBmb3IgYWxsb2NhdGluZyBkYXRhICovCisJaWYgKHJpZGRhdGFsZW4gIT0gKGxlbmd0aCAtIDQpKSB7CisJCWRldl9kYmcoJnpkLT51c2ItPmRldiwgInJpZGRhdGFsZW4gbWlzbWF0Y2hlcywgZXhwZWN0ZWQ9JXUsIChwYWNrZXQ9JXUpIGxlbmd0aD0ldSwgcmlkPTB4JTA0WCwgcmlkX2ZpZD0weCUwNFhcbiIsCisJCSAgICByaWRkYXRhbGVuLCB6ZC0+cnhsZW4sIGxlbmd0aCwgcmlkLCByaWRfZmlkKTsKKwkJcmV0dXJuIC1FTk9EQVRBOworCX0KKworCXpkLT5yeGRhdGFzID0gMDsKKwkvKiBJc3N1ZSBTZXRSeFJpZCBjb21tbmQgKi8JCQkKKwllcnIgPSB6ZDEyMDFfZG9jbWQoemQsIFpEMTIwMV9DTURDT0RFX1NFVFJYUklELCByaWQsIDAsIGxlbmd0aCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIFJlY2VpdmUgUklEIHJlY29yZCBmcm9tIHJlc291cmNlIHBhY2tldHMgKi8KKwl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoemQtPnJ4ZGF0YXEsIHpkLT5yeGRhdGFzKTsKKwlpZiAoIXpkLT5yeGxlbikKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoemQtPnJ4ZGF0YVt6ZC0+cnhsZW4gLSAxXSAhPSBaRDEyMDFfUEFDS0VUX1JFU09VUkNFKSB7CisJCWRldl9kYmcoJnpkLT51c2ItPmRldiwgIlBhY2tldCB0eXBlIG1pc21hdGNoOiAweCV4IG5vdCAweDNcbiIsCisJCSAgICB6ZC0+cnhkYXRhW3pkLT5yeGxlbi0xXSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFNldCB0aGUgZGF0YSBwb2ludGVyIGFuZCByZWNlaXZlZCBkYXRhIGxlbmd0aCAqLworCXBkYXRhID0gemQtPnJ4ZGF0YTsKKwlsZW5ndGggPSB6ZC0+cnhsZW47CisKKwlkbyB7CisJCWludCAgYWN0dWFsX2xlbmd0aDsKKworCQlhY3R1YWxfbGVuZ3RoID0gKGxlbmd0aCA+IDY0KSA/IDY0IDogbGVuZ3RoOworCisJCWlmKHBkYXRhWzBdICE9IDB4MykgeworCQkJZGV2X2RiZygmemQtPnVzYi0+ZGV2LCAiUnggUmVzb3VyY2UgcGFja2V0IHR5cGUgZXJyb3I6ICUwMlhcbiIsCisJCQkgICAgcGRhdGFbMF0pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoYWN0dWFsX2xlbmd0aCAhPSA2NCkgeworCQkJLyogVHJpbSB0aGUgbGFzdCBwYWNrZXQgdHlwZSBieXRlICovCisJCQlhY3R1YWxfbGVuZ3RoLS07CisJCX0KKworCQkvKiBTa2lwIHRoZSA0IGJ5dGVzIGhlYWRlciAoUklEIGxlbmd0aCBhbmQgUklEKSAqLworCQlpZihpID09IDApIHsKKwkJCXBkYXRhICs9IDg7CisJCQlhY3R1YWxfbGVuZ3RoIC09IDg7CisJCX0KKwkJZWxzZSB7CisJCQlwZGF0YSArPSA0OworCQkJYWN0dWFsX2xlbmd0aCAtPSA0OworCQl9CisJCQorCQltZW1jcHkocmlkZGF0YSwgcGRhdGEsIGFjdHVhbF9sZW5ndGgpOworCQlyaWRkYXRhICs9IGFjdHVhbF9sZW5ndGg7CisJCXBkYXRhICs9IGFjdHVhbF9sZW5ndGg7CisJCWxlbmd0aCAtPSA2NDsKKwkJaSsrOworCX0gd2hpbGUgKGxlbmd0aCA+IDApOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKglyZXNyZXE6CisgKgkJYnl0ZQl0eXBlCisgKgkJYnl0ZQlzZXF1ZW5jZQorICoJCXUxNglyZXNlcnZlZAorICoJCWJ5dGUJZGF0YVsxMl0KKyAqCXRvdGFsOiAxNgorICovCitzdGF0aWMgaW50IHpkMTIwMV9zZXRjb25maWcoc3RydWN0IHpkMTIwMSAqemQsIGludCByaWQsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdhaXQpCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBjaGFyICpyZXF1ZXN0OworCWludCByZXFsZW47CisJY2hhciBzZXE9MDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJdW5zaWduZWQgaW50IGdmcF9tYXNrID0gd2FpdCA/IEdGUF9OT0lPIDogR0ZQX0FUT01JQzsKKworCWxlbiArPSA0OwkJCS8qIGZpcnN0IDQgYXJlIGZvciBoZWFkZXIgKi8KKworCXpkLT5yeGRhdGFzID0gMDsKKwl6ZC0+cnhsZW4gPSAwOworCWZvciAoc2VxPTA7IGxlbiA+IDA7IHNlcSsrKSB7CisJCXJlcXVlc3QgPSBrbWFsbG9jKDE2LCBnZnBfbWFzayk7CisJCWlmICghcmVxdWVzdCkKKwkJCXJldHVybiAtRU5PTUVNOworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIGdmcF9tYXNrKTsKKwkJaWYgKCF1cmIpIHsKKwkJCWtmcmVlKHJlcXVlc3QpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbWVtc2V0KHJlcXVlc3QsIDAsIDE2KTsKKwkJcmVxbGVuID0gbGVuPjEyID8gMTIgOiBsZW47CisJCXJlcXVlc3RbMF0gPSBaRDEyMDFfVVNCX1JFU1JFUTsKKwkJcmVxdWVzdFsxXSA9IHNlcTsKKwkJcmVxdWVzdFsyXSA9IDA7CisJCXJlcXVlc3RbM10gPSAwOworCQlpZiAocmVxdWVzdFsxXSA9PSAwKSB7CisJCQkvKiBhZGQgaGVhZGVyICovCisJCQkqKF9fbGUxNiopJnJlcXVlc3RbNF0gPSBjcHVfdG9fbGUxNigobGVuLTIrMSkvMik7CisJCQkqKF9fbGUxNiopJnJlcXVlc3RbNl0gPSBjcHVfdG9fbGUxNihyaWQpOworCQkJbWVtY3B5KHJlcXVlc3QrOCwgYnVmLCByZXFsZW4tNCk7CisJCQlidWYgKz0gcmVxbGVuLTQ7CisJCX0gZWxzZSB7CisJCQltZW1jcHkocmVxdWVzdCs0LCBidWYsIHJlcWxlbik7CisJCQlidWYgKz0gcmVxbGVuOworCQl9CisKKwkJbGVuIC09IHJlcWxlbjsKKworCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHpkLT51c2IsIHVzYl9zbmRidWxrcGlwZSh6ZC0+dXNiLAorCQkgICAgemQtPmVuZHBfb3V0MiksIHJlcXVlc3QsIDE2LCB6ZDEyMDFfdXNiZnJlZSwgemQpOworCQllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIGdmcF9tYXNrKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyOworCX0KKworCXJlcXVlc3QgPSBrbWFsbG9jKDE2LCBnZnBfbWFzayk7CisJaWYgKCFyZXF1ZXN0KQorCQlyZXR1cm4gLUVOT01FTTsKKwl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIGdmcF9tYXNrKTsKKwlpZiAoIXVyYikgeworCQlrZnJlZShyZXF1ZXN0KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCSooKF9fbGUzMiopcmVxdWVzdCkgPSBjcHVfdG9fbGUzMihaRDEyMDFfVVNCX0NNRFJFUSk7CisJKigoX19sZTE2KikmcmVxdWVzdFs0XSkgPSAKKwkgICAgY3B1X3RvX2xlMTYoWkQxMjAxX0NNRENPREVfQUNDRVNTfFpEMTIwMV9BQ0NFU1NCSVQpOworCSooKF9fbGUxNiopJnJlcXVlc3RbNl0pID0gY3B1X3RvX2xlMTYocmlkKTsKKwkqKChfX2xlMTYqKSZyZXF1ZXN0WzhdKSA9IGNwdV90b19sZTE2KDApOworCSooKF9fbGUxNiopJnJlcXVlc3RbMTBdKSA9IGNwdV90b19sZTE2KDApOworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgemQtPnVzYiwgdXNiX3NuZGJ1bGtwaXBlKHpkLT51c2IsIHpkLT5lbmRwX291dDIpLAorCSAgICAgcmVxdWVzdCwgMTYsIHpkMTIwMV91c2JmcmVlLCB6ZCk7CisJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBnZnBfbWFzayk7CisJaWYgKGVycikKKwkJZ290byBlcnI7CisJCisJaWYgKHdhaXQpIHsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHpkLT5yeGRhdGFxLCB6ZC0+cnhkYXRhcyk7CisJCWlmICghemQtPnJ4bGVuIHx8IGxlMTZfdG9fY3B1KCooX19sZTE2KikmemQtPnJ4ZGF0YVs2XSkgIT0gcmlkKSB7CisJCQlkZXZfZGJnKCZ6ZC0+dXNiLT5kZXYsICJ3cm9uZyBvciBubyBSSUQgcmVjZWl2ZWRcbiIpOworCQl9CisJfQorCisJcmV0dXJuIDA7CitlcnI6CisJa2ZyZWUocmVxdWVzdCk7CisJdXNiX2ZyZWVfdXJiKHVyYik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlubGluZSBpbnQgemQxMjAxX2dldGNvbmZpZzE2KHN0cnVjdCB6ZDEyMDEgKnpkLCBpbnQgcmlkLCBzaG9ydCAqdmFsKQoreworCWludCBlcnI7CisJX19sZTE2IHpkdmFsOworCisJZXJyID0gemQxMjAxX2dldGNvbmZpZyh6ZCwgcmlkLCAmemR2YWwsIHNpemVvZihfX2xlMTYpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCSp2YWwgPSBsZTE2X3RvX2NwdSh6ZHZhbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHpkMTIwMV9zZXRjb25maWcxNihzdHJ1Y3QgemQxMjAxICp6ZCwgaW50IHJpZCwgc2hvcnQgdmFsKQoreworCV9fbGUxNiB6ZHZhbCA9IGNwdV90b19sZTE2KHZhbCk7CisJcmV0dXJuICh6ZDEyMDFfc2V0Y29uZmlnKHpkLCByaWQsICZ6ZHZhbCwgc2l6ZW9mKF9fbGUxNiksIDEpKTsKK30KKworaW50IHpkMTIwMV9kcnZyX3N0YXJ0KHN0cnVjdCB6ZDEyMDEgKnpkKQoreworCWludCBlcnIsIGk7CisJc2hvcnQgbWF4OworCV9fbGUxNiB6ZG1heDsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJCisJYnVmZmVyID0ga21hbGxvYyhaRDEyMDFfUlhTSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KGJ1ZmZlciwgMCwgWkQxMjAxX1JYU0laRSk7CisKKwl1c2JfZmlsbF9idWxrX3VyYih6ZC0+cnhfdXJiLCB6ZC0+dXNiLCAKKwkgICAgdXNiX3JjdmJ1bGtwaXBlKHpkLT51c2IsIHpkLT5lbmRwX2luKSwgYnVmZmVyLCBaRDEyMDFfUlhTSVpFLAorCSAgICB6ZDEyMDFfdXNicngsIHpkKTsKKworCWVyciA9IHVzYl9zdWJtaXRfdXJiKHpkLT5yeF91cmIsIEdGUF9LRVJORUwpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2J1ZmZlcjsKKwkKKwllcnIgPSB6ZDEyMDFfZG9jbWQoemQsIFpEMTIwMV9DTURDT0RFX0lOSVQsIDAsIDAsIDApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3VyYjsKKworCWVyciA9IHpkMTIwMV9nZXRjb25maWcoemQsIFpEMTIwMV9SSURfQ05GTUFYVFhCVUZGRVJOVU1CRVIsICZ6ZG1heCwKKwkgICAgc2l6ZW9mKF9fbGUxNikpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3VyYjsKKworCW1heCA9IGxlMTZfdG9fY3B1KHpkbWF4KTsKKwlmb3IgKGk9MDsgaTxtYXg7IGkrKykgeworCQllcnIgPSB6ZDEyMDFfZG9jbWQoemQsIFpEMTIwMV9DTURDT0RFX0FMTE9DLCAxNTE0LCAwLCAwKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX3VyYjsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX3VyYjoKKwl1c2Jfa2lsbF91cmIoemQtPnJ4X3VyYik7CisJcmV0dXJuIGVycjsKK2Vycl9idWZmZXI6CisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gZXJyOworfQorCisvKglNYWdpYyBhbGVydDogVGhlIGZpcm13YXJlIGRvZXNuJ3Qgc2VlbSB0byBsaWtlIHRoZSBNQUMgc3RhdGUgYmVpbmcKKyAqCXRvZ2dsZWQgaW4gcHJvbWlzYyAoYWthIG1vbml0b3IpIG1vZGUuCisgKgkoSXQgd29ya3MgYSBudW1iZXIgb2YgdGltZXMsIGJ1dCB3aWxsIGhhbHQgZXZlbnR1YWxseSkKKyAqCVNvIHdlIHR1cm4gaXQgb2YgYmVmb3JlIGRpc2FibGluZyBhbmQgb24gYWZ0ZXIgZW5hYmxpbmcgaWYgbmVlZGVkLgorICovCitzdGF0aWMgaW50IHpkMTIwMV9lbmFibGUoc3RydWN0IHpkMTIwMSAqemQpCit7CisJaW50IGVycjsKKworCWlmICh6ZC0+bWFjX2VuYWJsZWQpCisJCXJldHVybiAwOworCisJZXJyID0gemQxMjAxX2RvY21kKHpkLCBaRDEyMDFfQ01EQ09ERV9FTkFCTEUsIDAsIDAsIDApOworCWlmICghZXJyKQorCQl6ZC0+bWFjX2VuYWJsZWQgPSAxOworCisJaWYgKHpkLT5tb25pdG9yKQorCQllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfUFJPTUlTQ1VPVVNNT0RFLCAxKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX2Rpc2FibGUoc3RydWN0IHpkMTIwMSAqemQpCit7CisJaW50IGVycjsKKwkKKwlpZiAoIXpkLT5tYWNfZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisJaWYgKHpkLT5tb25pdG9yKSB7CisJCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9QUk9NSVNDVU9VU01PREUsIDApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSB6ZDEyMDFfZG9jbWQoemQsIFpEMTIwMV9DTURDT0RFX0RJU0FCTEUsIDAsIDAsIDApOworCWlmICghZXJyKQorCQl6ZC0+bWFjX2VuYWJsZWQgPSAwOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX21hY19yZXNldChzdHJ1Y3QgemQxMjAxICp6ZCkKK3sKKwlpZiAoIXpkLT5tYWNfZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisJemQxMjAxX2Rpc2FibGUoemQpOworCXJldHVybiB6ZDEyMDFfZW5hYmxlKHpkKTsKK30KKworc3RhdGljIGludCB6ZDEyMDFfam9pbihzdHJ1Y3QgemQxMjAxICp6ZCwgY2hhciAqZXNzaWQsIGludCBlc3NpZGxlbikKK3sKKwlpbnQgZXJyLCB2YWw7CisJY2hhciBidWZbSVdfRVNTSURfTUFYX1NJWkUrMl07CisKKwllcnIgPSB6ZDEyMDFfZGlzYWJsZSh6ZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXZhbCA9IFpEMTIwMV9DTkZBVVRIRU5USUNBVElPTl9PUEVOU1lTVEVNOworCXZhbCB8PSBaRDEyMDFfQ05GQVVUSEVOVElDQVRJT05fU0hBUkVES0VZOworCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZBVVRIRU5USUNBVElPTiwgdmFsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJKihfX2xlMTYgKilidWYgPSBjcHVfdG9fbGUxNihlc3NpZGxlbik7CisJbWVtY3B5KGJ1ZisyLCBlc3NpZCwgZXNzaWRsZW4pOworCWlmICghemQtPmFwKSB7CS8qIE5vcm1hbCBzdGF0aW9uICovCisJCWVyciA9IHpkMTIwMV9zZXRjb25maWcoemQsIFpEMTIwMV9SSURfQ05GREVTSVJFRFNTSUQsIGJ1ZiwKKwkJICAgIElXX0VTU0lEX01BWF9TSVpFKzIsIDEpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9IGVsc2UgewkvKiBBUCAqLworCQllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnKHpkLCBaRDEyMDFfUklEX0NORk9XTlNTSUQsIGJ1ZiwKKwkJICAgIElXX0VTU0lEX01BWF9TSVpFKzIsIDEpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnKHpkLCBaRDEyMDFfUklEX0NORk9XTk1BQ0FERFIsIAorCSAgICB6ZC0+ZGV2LT5kZXZfYWRkciwgemQtPmRldi0+YWRkcl9sZW4sIDEpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSB6ZDEyMDFfZW5hYmxlKHpkKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJbXNsZWVwKDEwMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKworCS8qIFN0YXJ0IE1BQyB3aXRoIHdpbGRjYXJkIGlmIG5vIGVzc2lkIHNldCAqLworCWlmICghemQtPm1hY19lbmFibGVkKQorCQl6ZDEyMDFfam9pbih6ZCwgemQtPmVzc2lkLCB6ZC0+ZXNzaWRsZW4pOworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZDEyMDFfbmV0X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCisJcmV0dXJuIDA7Cit9CisKKy8qCisJUkZDIDEwNDIgZW5jYXBzdWxhdGVzIEV0aGVybmV0IGZyYW1lcyBpbiA4MDIuMTEgZnJhbWVzCisJYnkgcHJlZml4aW5nIHRoZW0gd2l0aCAweGFhLCAweGFhLCAweDAzKSBmb2xsb3dlZCBieSBhIFNOQVAgT0lEIG9mIDAKKwkoMHgwMCwgMHgwMCwgMHgwMCkuIFpkIHJlcXVpcmVzIGFuIGFkZGl0aW9ubmFsIHBhZGRpbmcsIGNvcHkKKwlvZiBldGhlcm5ldCBhZGRyZXNzZXMsIGxlbmd0aCBvZiB0aGUgc3RhbmRhcmQgUkZDIDEwNDIgcGFja2V0CisJYW5kIGEgY29tbWFuZCBieXRlICh3aGljaCBpcyBudWwgZm9yIHR4KS4KKwkKKwl0eCBmcmFtZSAoZnJvbSBXbGFuIE5HKToKKwlSRkMgMTA0MjoKKwkJbGxjCQkweEFBIDB4QUEgMHgwMyAoODAyLjIgTExDKQorCQlzbmFwCQkweDAwIDB4MDAgMHgwMCAoRXRoZXJuZXQgZW5jYXBzdWxhdGVkKQorCQl0eXBlCQkyIGJ5dGVzLCBFdGhlcm5ldCB0eXBlIGZpZWxkCisJCXBheWxvYWQJCShtaW51cyBldGggaGVhZGVyKQorCVp5ZGFzIHNwZWNpZmljOgorCQlwYWRkaW5nCQkxQiBpZiAoc2tiLT5sZW4rOCsxKSU2ND09MAorCQlFdGggTUFDIGFkZHIJMTIgYnl0ZXMsIEV0aGVybmV0IE1BQyBhZGRyZXNzZXMKKwkJbGVuZ3RoCQkyIGJ5dGVzLCBSRkMgMTA0MiBwYWNrZXQgbGVuZ3RoIAorCQkJCShsbGMrc25hcCt0eXBlK3BheWxvYWQpCisJCXpkCQkxIG51bGwgYnl0ZSwgemQxMjAxIHBhY2tldCB0eXBlCisgKi8KK3N0YXRpYyBpbnQgemQxMjAxX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJdW5zaWduZWQgY2hhciAqdHhidWYgPSB6ZC0+dHhkYXRhOworCWludCB0eGJ1ZmxlbiwgcGFkID0gMCwgZXJyOworCXN0cnVjdCB1cmIgKnVyYiA9IHpkLT50eF91cmI7CisKKwlpZiAoIXpkLT5tYWNfZW5hYmxlZCB8fCB6ZC0+bW9uaXRvcikgeworCQl6ZC0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIDA7CisJfQorCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCXR4YnVmbGVuID0gc2tiLT5sZW4gKyA4ICsgMTsKKwlpZiAodHhidWZsZW4lNjQgPT0gMCkgeworCQlwYWQgPSAxOworCQl0eGJ1ZmxlbisrOworCX0KKwl0eGJ1ZlswXSA9IDB4QUE7CisJdHhidWZbMV0gPSAweEFBOworCXR4YnVmWzJdID0gMHgwMzsKKwl0eGJ1ZlszXSA9IDB4MDA7CS8qIHJmYzEwNDIgKi8KKwl0eGJ1Zls0XSA9IDB4MDA7CisJdHhidWZbNV0gPSAweDAwOworCisJbWVtY3B5KHR4YnVmKzYsIHNrYi0+ZGF0YSsxMiwgc2tiLT5sZW4tMTIpOworCWlmIChwYWQpCisJCXR4YnVmW3NrYi0+bGVuLTEyKzZdPTA7CisJbWVtY3B5KHR4YnVmK3NrYi0+bGVuLTEyKzYrcGFkLCBza2ItPmRhdGEsIDEyKTsKKwkqKF9fYmUxNiopJnR4YnVmW3NrYi0+bGVuKzYrcGFkXSA9IGh0b25zKHNrYi0+bGVuLTEyKzYpOworCXR4YnVmW3R4YnVmbGVuLTFdID0gMDsKKworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgemQtPnVzYiwgdXNiX3NuZGJ1bGtwaXBlKHpkLT51c2IsIHpkLT5lbmRwX291dCksCisJICAgIHR4YnVmLCB0eGJ1ZmxlbiwgemQxMjAxX3VzYnR4LCB6ZCk7CisKKwllcnIgPSB1c2Jfc3VibWl0X3VyYih6ZC0+dHhfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoZXJyKSB7CisJCXpkLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwkJcmV0dXJuIGVycjsKKwl9CisJemQtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwl6ZC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJa2ZyZWVfc2tiKHNrYik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgemQxMjAxX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCisJaWYgKCF6ZCkKKwkJcmV0dXJuOworCWRldl93YXJuKCZ6ZC0+dXNiLT5kZXYsICIlczogVFggdGltZW91dCwgc2hvb3RpbmcgZG93biB1cmJcbiIsCisJICAgIGRldi0+bmFtZSk7CisJemQtPnR4X3VyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0FTWU5DX1VOTElOSzsKKwl1c2JfdW5saW5rX3VyYih6ZC0+dHhfdXJiKTsKKwl6ZC0+c3RhdHMudHhfZXJyb3JzKys7CisJLyogUmVzdGFydCB0aGUgdGltZW91dCB0byBxdWlldCB0aGUgd2F0Y2hkb2c6ICovCisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQoreworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwlpbnQgZXJyOworCisJaWYgKCF6ZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnKHpkLCBaRDEyMDFfUklEX0NORk9XTk1BQ0FERFIsIAorCSAgICBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuLCAxKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKworCXJldHVybiB6ZDEyMDFfbWFjX3Jlc2V0KHpkKTsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICp6ZDEyMDFfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKworCXJldHVybiAmemQtPnN0YXRzOworfQorCitzdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MgKnpkMTIwMV9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCisJcmV0dXJuICZ6ZC0+aXdzdGF0czsKK30KKworc3RhdGljIHZvaWQgemQxMjAxX3NldF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWMgPSBkZXYtPm1jX2xpc3Q7CisJdW5zaWduZWQgY2hhciByZXFidWZbRVRIX0FMRU4qWkQxMjAxX01BWE1VTFRJXTsKKwlpbnQgaTsKKworCWlmIChkZXYtPm1jX2NvdW50ID4gWkQxMjAxX01BWE1VTFRJKQorCQlyZXR1cm47CisKKwlmb3IgKGk9MDsgaTxkZXYtPm1jX2NvdW50OyBpKyspIHsKKwkJbWVtY3B5KHJlcWJ1ZitpKkVUSF9BTEVOLCBtYy0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKKwkJbWMgPSBtYy0+bmV4dDsKKwl9CisJemQxMjAxX3NldGNvbmZpZyh6ZCwgWkQxMjAxX1JJRF9DTkZHUk9VUEFERFJFU1MsIHJlcWJ1ZiwKKwkgICAgZGV2LT5tY19jb3VudCpFVEhfQUxFTiwgMCk7CisJCit9CisKK3N0YXRpYyBpbnQgemQxMjAxX2NvbmZpZ19jb21taXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICplc3NpZCkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCisJcmV0dXJuIHpkMTIwMV9tYWNfcmVzZXQoemQpOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9nZXRfbmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIGNoYXIgKm5hbWUsIGNoYXIgKmV4dHJhKQoreworCXN0cmNweShuYW1lLCAiSUVFRSA4MDIuMTFiIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZDEyMDFfc2V0X2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwlzaG9ydCBjaGFubmVsID0gMDsKKwlpbnQgZXJyOworCisJaWYgKGZyZXEtPmUgPT0gMCkKKwkJY2hhbm5lbCA9IGZyZXEtPm07CisJZWxzZSB7CisJCWlmIChmcmVxLT5tID49IDI0ODIpCisJCQljaGFubmVsID0gMTQ7CisJCWlmIChmcmVxLT5tID49IDI0MDcpCisJCQljaGFubmVsID0gKGZyZXEtPm0tMjQwNykvNTsKKwl9CisKKwllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GT1dOQ0hBTk5FTCwgY2hhbm5lbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXpkMTIwMV9tYWNfcmVzZXQoemQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX2dldF9mcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJc2hvcnQgY2hhbm5lbDsKKwlpbnQgZXJyOworCisJZXJyID0gemQxMjAxX2dldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORk9XTkNIQU5ORUwsICZjaGFubmVsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWZyZXEtPmUgPSAwOworCWZyZXEtPm0gPSBjaGFubmVsOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX3NldF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgX191MzIgKm1vZGUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJc2hvcnQgcG9ydHR5cGUsIG1vbml0b3IgPSAwOworCXVuc2lnbmVkIGNoYXIgYnVmZmVyW0lXX0VTU0lEX01BWF9TSVpFKzJdOworCWludCBlcnI7CisKKwlpZiAoemQtPmFwKSB7CisJCWlmICgqbW9kZSAhPSBJV19NT0RFX01BU1RFUikKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gMDsKKwl9CisKKwllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfUFJPTUlTQ1VPVVNNT0RFLCAwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXpkLT5kZXYtPnR5cGUgPSBBUlBIUkRfRVRIRVI7CisJc3dpdGNoKCptb2RlKSB7CisJCWNhc2UgSVdfTU9ERV9NT05JVE9SOgorCQkJbW9uaXRvciA9IDE7CisJCQl6ZC0+ZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKKwkJCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgbm8gbG9uZ2VyIGFzc29jaWF0ZWQgd2l0aCBieQorCQkJICAgc2V0dGluZyBhbiAnaW1wb3NzaWJsZScgZXNzaWQuCisJCQkgICAob3RoZXJ3aXNlIHdlIG1lc3MgdXAgZmlybXdhcmUpCisJCQkgKi8KKwkJCXpkMTIwMV9qb2luKHpkLCAiXDAtKiNcMCIsIDUpOworCQkJLyogUHV0IHBvcnQgaW4gcElCU1MgKi8KKwkJY2FzZSA4OiAvKiBObyBwc2V1ZG8tSUJTUyBpbiB3aXJlbGVzcyBleHRlbnNpb25zICh5ZXQpICovCisJCQlwb3J0dHlwZSA9IFpEMTIwMV9QT1JUVFlQRV9QU0VVRE9JQlNTOworCQkJYnJlYWs7CisJCWNhc2UgSVdfTU9ERV9BREhPQzoKKwkJCXBvcnR0eXBlID0gWkQxMjAxX1BPUlRUWVBFX0lCU1M7CisJCQlicmVhazsKKwkJY2FzZSBJV19NT0RFX0lORlJBOgorCQkJcG9ydHR5cGUgPSBaRDEyMDFfUE9SVFRZUEVfQlNTOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GUE9SVFRZUEUsIHBvcnR0eXBlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWlmICh6ZC0+bW9uaXRvciAmJiAhbW9uaXRvcikgeworCQkJemQxMjAxX2Rpc2FibGUoemQpOworCQkJKihfX2xlMTYgKilidWZmZXIgPSBjcHVfdG9fbGUxNih6ZC0+ZXNzaWRsZW4pOworCQkJbWVtY3B5KGJ1ZmZlcisyLCB6ZC0+ZXNzaWQsIHpkLT5lc3NpZGxlbik7CisJCQllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnKHpkLCBaRDEyMDFfUklEX0NORkRFU0lSRURTU0lELAorCQkJICAgIGJ1ZmZlciwgSVdfRVNTSURfTUFYX1NJWkUrMiwgMSk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJfQorCXpkLT5tb25pdG9yPW1vbml0b3I7CisJLyogSWYgbW9uaXRvciBtb2RlIGlzIHNldCB3ZSBkb24ndCBhY3R1YWxseSB0dXJuIGl0IG9uIGhlcmUgc2luY2UgaXQKKwkgKiBpcyBkb25lIGR1cmluZyBtYWMgcmVzZXQgYW55d2F5IChzZWUgemQxMjAxX21hY19lbmFibGUpLgorCSAqLworCisJemQxMjAxX21hY19yZXNldCh6ZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZDEyMDFfZ2V0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBfX3UzMiAqbW9kZSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwlzaG9ydCBwb3J0dHlwZTsKKwlpbnQgZXJyOworCisJZXJyID0gemQxMjAxX2dldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORlBPUlRUWVBFLCAmcG9ydHR5cGUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJc3dpdGNoKHBvcnR0eXBlKSB7CisJCWNhc2UgWkQxMjAxX1BPUlRUWVBFX0lCU1M6CisJCQkqbW9kZSA9IElXX01PREVfQURIT0M7CisJCQlicmVhazsKKwkJY2FzZSBaRDEyMDFfUE9SVFRZUEVfQlNTOgorCQkJKm1vZGUgPSBJV19NT0RFX0lORlJBOworCQkJYnJlYWs7CisJCWNhc2UgWkQxMjAxX1BPUlRUWVBFX1dEUzoKKwkJCSptb2RlID0gSVdfTU9ERV9SRVBFQVQ7CisJCQlicmVhazsKKwkJY2FzZSBaRDEyMDFfUE9SVFRZUEVfUFNFVURPSUJTUzoKKwkJCSptb2RlID0gODsvKiBObyBQc2V1ZG8tSUJTUy4uLiAqLworCQkJYnJlYWs7CisJCWNhc2UgWkQxMjAxX1BPUlRUWVBFX0FQOgorCQkJKm1vZGUgPSBJV19NT0RFX01BU1RFUjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X2RiZygmemQtPnVzYi0+ZGV2LCAiVW5rbm93biBwb3J0dHlwZTogJWRcbiIsCisJCQkgICAgcG9ydHR5cGUpOworCQkJKm1vZGUgPSBJV19NT0RFX0FVVE87CisJfQorCWlmICh6ZC0+bW9uaXRvcikKKwkJKm1vZGUgPSBJV19NT0RFX01PTklUT1I7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZDEyMDFfZ2V0X3JhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgc3RydWN0IGl3X3BvaW50ICp3cnEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopZXh0cmE7CisKKwl3cnEtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpOworCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSkpOworCXJhbmdlLT53ZV92ZXJzaW9uX2NvbXBpbGVkID0gV0lSRUxFU1NfRVhUOworCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IFdJUkVMRVNTX0VYVDsKKworCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gMTI4OworCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IDEyODsKKwlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAxMjg7CisJcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQgPSA3OworCisJcmFuZ2UtPmVuY29kaW5nX3NpemVbMF0gPSA1OworCXJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gMTM7CisJcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7CisJcmFuZ2UtPm1heF9lbmNvZGluZ190b2tlbnMgPSBaRDEyMDFfTlVNS0VZUzsKKworCXJhbmdlLT5udW1fYml0cmF0ZXMgPSA0OworCXJhbmdlLT5iaXRyYXRlWzBdID0gMTAwMDAwMDsKKwlyYW5nZS0+Yml0cmF0ZVsxXSA9IDIwMDAwMDA7CisJcmFuZ2UtPmJpdHJhdGVbMl0gPSA1NTAwMDAwOworCXJhbmdlLT5iaXRyYXRlWzNdID0gMTEwMDAwMDA7CisKKwlyYW5nZS0+bWluX3J0cyA9IDA7CisJcmFuZ2UtPm1pbl9mcmFnID0gWkQxMjAxX0ZSQUdNSU47CisJcmFuZ2UtPm1heF9ydHMgPSBaRDEyMDFfUlRTTUFYOworCXJhbmdlLT5taW5fZnJhZyA9IFpEMTIwMV9GUkFHTUFYOworCisJcmV0dXJuIDA7Cit9CisKKy8qCUxpdHRsZSBiaXQgb2YgbWFnaWMgaGVyZTogd2Ugb25seSBnZXQgdGhlIHF1YWxpdHkgaWYgd2UgcG9sbAorICoJZm9yIGl0LCBhbmQgd2UgbmV2ZXIgZ2V0IGFuIGFjdHVhbCByZXF1ZXN0IHRvIHRyaWdnZXIgc3VjaAorICoJYSBwb2xsLiBUaGVyZWZvcmUgd2UgJ2FzdW1lJyB0aGF0IHRoZSB1c2VyIHdpbGwgc29vbiBhc2sgZm9yCisgKgl0aGUgc3RhdHMgYWZ0ZXIgYXNraW5nIHRoZSBic3NpZC4KKyAqLworc3RhdGljIGludCB6ZDEyMDFfZ2V0X3dhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2XTsKKworCWlmICghemQxMjAxX2dldGNvbmZpZyh6ZCwgWkQxMjAxX1JJRF9DT01NU1FVQUxJVFksIGJ1ZmZlciwgNikpIHsKKwkJLyogVW5mb3J0dW5hdGx5IHRoZSBxdWFsaXR5IGFuZCBub2lzZSByZXBvcnRlZCBpcyB1c2VsZXNzLgorCQkgICB0aGV5IHNlZW0gdG8gYmUgYWNjdW11bGF0b3JzIHRoYXQgaW5jcmVhc2UgdW50aWwgeW91CisJCSAgIHJlYWQgdGhlbSwgdW5sZXNzIHdlIHBvbGwgb24gYSBmaXhlZCBpbnRlcnZhbCB3ZSBjYW4ndAorCQkgICB1c2UgdGhlbQorCQkgKi8KKwkJLyp6ZC0+aXdzdGF0cy5xdWFsLnF1YWwgPSBsZTE2X3RvX2NwdSgoKF9fbGUxNiAqKWJ1ZmZlcilbMF0pOyovCisJCXpkLT5pd3N0YXRzLnF1YWwubGV2ZWwgPSBsZTE2X3RvX2NwdSgoKF9fbGUxNiAqKWJ1ZmZlcilbMV0pOworCQkvKnpkLT5pd3N0YXRzLnF1YWwubm9pc2UgPSBsZTE2X3RvX2NwdSgoKF9fbGUxNiAqKWJ1ZmZlcilbMl0pOyovCisJCXpkLT5pd3N0YXRzLnF1YWwudXBkYXRlZCA9IDI7CisJfQorCisJcmV0dXJuIHpkMTIwMV9nZXRjb25maWcoemQsWkQxMjAxX1JJRF9DVVJSRU5UQlNTSUQsYXBfYWRkci0+c2FfZGF0YSw2KTsKK30KKworc3RhdGljIGludCB6ZDEyMDFfc2V0X3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBzdHJ1Y3QgaXdfcG9pbnQgKnNycSwgY2hhciAqZXh0cmEpCit7CisJLyogV2UgZG8gZXZlcnl0aGluZyBpbiBnZXRfc2NhbiAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9nZXRfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHN0cnVjdCBpd19wb2ludCAqc3JxLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCWludCBlcnIsIGksIGosIGVuYWJsZWRfc2F2ZTsKKwlzdHJ1Y3QgaXdfZXZlbnQgaXdlOworCWNoYXIgKmNldiA9IGV4dHJhOworCWNoYXIgKmVuZF9idWYgPSBleHRyYSArIElXX1NDQU5fTUFYX0RBVEE7CisKKwkvKiBObyBzY2FubmluZyBpbiBBUCBtb2RlICovCisJaWYgKHpkLT5hcCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJLyogU2NhbiBkb2Vzbid0IHNlZW0gdG8gd29yayBpZiBkaXNhYmxlZCAqLworCWVuYWJsZWRfc2F2ZSA9IHpkLT5tYWNfZW5hYmxlZDsKKwl6ZDEyMDFfZW5hYmxlKHpkKTsKKworCXpkLT5yeGRhdGFzID0gMDsKKwllcnIgPSB6ZDEyMDFfZG9jbWQoemQsIFpEMTIwMV9DTURDT0RFX0lOUVVJUkUsIAorCSAgICAgWkQxMjAxX0lOUV9TQ0FOUkVTVUxUUywgMCwgMCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh6ZC0+cnhkYXRhcSwgemQtPnJ4ZGF0YXMpOworCWlmICghemQtPnJ4bGVuKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChsZTE2X3RvX2NwdSgqKF9fbGUxNiopJnpkLT5yeGRhdGFbMl0pICE9IFpEMTIwMV9JTlFfU0NBTlJFU1VMVFMpCisJCXJldHVybiAtRUlPOworCisJZm9yKGk9ODsgaTx6ZC0+cnhsZW47IGkrPTYyKSB7CisJCWl3ZS5jbWQgPSBTSU9DR0lXQVA7CisJCWl3ZS51LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCQltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCB6ZC0+cnhkYXRhK2krNiwgNik7CisJCWNldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGNldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfQUREUl9MRU4pOworCisJCWl3ZS5jbWQgPSBTSU9DR0lXRVNTSUQ7CisJCWl3ZS51LmRhdGEubGVuZ3RoID0gemQtPnJ4ZGF0YVtpKzE2XTsKKwkJaXdlLnUuZGF0YS5mbGFncyA9IDE7CisJCWNldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGNldiwgZW5kX2J1ZiwgJml3ZSwgemQtPnJ4ZGF0YStpKzE4KTsKKworCQlpd2UuY21kID0gU0lPQ0dJV01PREU7CisJCWlmICh6ZC0+cnhkYXRhW2krMTRdJjB4MDEpCisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7CisJCWVsc2UKKwkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOworCQljZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChjZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKKwkJCisJCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKKwkJaXdlLnUuZnJlcS5tID0gemQtPnJ4ZGF0YVtpKzBdOworCQlpd2UudS5mcmVxLmUgPSAwOworCQljZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChjZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKKwkJCisJCWl3ZS5jbWQgPSBTSU9DR0lXUkFURTsKKwkJaXdlLnUuYml0cmF0ZS5maXhlZCA9IDA7CisJCWl3ZS51LmJpdHJhdGUuZGlzYWJsZWQgPSAwOworCQlmb3IgKGo9MDsgajwxMDsgaisrKSBpZiAoemQtPnJ4ZGF0YVtpKzUwK2pdKSB7CisJCQlpd2UudS5iaXRyYXRlLnZhbHVlID0gKHpkLT5yeGRhdGFbaSs1MCtqXSYweDdmKSo1MDAwMDA7CisJCQljZXY9aXdlX3N0cmVhbV9hZGRfZXZlbnQoY2V2LCBlbmRfYnVmLCAmaXdlLAorCQkJICAgIElXX0VWX1BBUkFNX0xFTik7CisJCX0KKwkJCisJCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOworCQlpd2UudS5kYXRhLmxlbmd0aCA9IDA7CisJCWlmICh6ZC0+cnhkYXRhW2krMTRdJjB4MTApCisJCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0VOQUJMRUQ7CisJCWVsc2UKKwkJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7CisJCWNldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGNldiwgZW5kX2J1ZiwgJml3ZSwgTlVMTCk7CisJCQorCQlpd2UuY21kID0gSVdFVlFVQUw7CisJCWl3ZS51LnF1YWwucXVhbCA9IHpkLT5yeGRhdGFbaSs0XTsKKwkJaXdlLnUucXVhbC5ub2lzZT0gemQtPnJ4ZGF0YVtpKzJdLzEwLTEwMDsKKwkJaXdlLnUucXVhbC5sZXZlbCA9ICgyNTYremQtPnJ4ZGF0YVtpKzRdKjEwMCkvMjU1LTEwMDsKKwkJaXdlLnUucXVhbC51cGRhdGVkID0gNzsKKwkJY2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9RVUFMX0xFTik7CisJfQorCisJaWYgKCFlbmFibGVkX3NhdmUpCisJCXpkMTIwMV9kaXNhYmxlKHpkKTsKKworCXNycS0+bGVuZ3RoID0gY2V2IC0gZXh0cmE7CisJc3JxLT5mbGFncyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZDEyMDFfc2V0X2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICplc3NpZCkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCisJaWYgKGRhdGEtPmxlbmd0aCA+IElXX0VTU0lEX01BWF9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGF0YS0+bGVuZ3RoIDwgMSkKKwkJZGF0YS0+bGVuZ3RoID0gMTsKKwl6ZC0+ZXNzaWRsZW4gPSBkYXRhLT5sZW5ndGgtMTsKKwltZW1zZXQoemQtPmVzc2lkLCAwLCBJV19FU1NJRF9NQVhfU0laRSsxKTsKKwltZW1jcHkoemQtPmVzc2lkLCBlc3NpZCwgZGF0YS0+bGVuZ3RoKTsKKwlyZXR1cm4gemQxMjAxX2pvaW4oemQsIHpkLT5lc3NpZCwgemQtPmVzc2lkbGVuKTsKK30KKworc3RhdGljIGludCB6ZDEyMDFfZ2V0X2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICplc3NpZCkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCisJbWVtY3B5KGVzc2lkLCB6ZC0+ZXNzaWQsIHpkLT5lc3NpZGxlbik7CisJZGF0YS0+ZmxhZ3MgPSAxOworCWRhdGEtPmxlbmd0aCA9IHpkLT5lc3NpZGxlbjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9nZXRfbmljayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqbmljaykKK3sKKwlzdHJjcHkobmljaywgInpkMTIwMSIpOworCWRhdGEtPmZsYWdzID0gMTsKKwlkYXRhLT5sZW5ndGggPSBzdHJsZW4obmljayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX3NldF9yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJc2hvcnQgcmF0ZTsKKwlpbnQgZXJyOworCisJc3dpdGNoIChycnEtPnZhbHVlKSB7CisJCWNhc2UgMTAwMDAwMDoKKwkJCXJhdGUgPSBaRDEyMDFfUkFURUIxOworCQkJYnJlYWs7CisJCWNhc2UgMjAwMDAwMDoKKwkJCXJhdGUgPSBaRDEyMDFfUkFURUIyOworCQkJYnJlYWs7CisJCWNhc2UgNTUwMDAwMDoKKwkJCXJhdGUgPSBaRDEyMDFfUkFURUI1OworCQkJYnJlYWs7CisJCWNhc2UgMTEwMDAwMDA6CisJCWRlZmF1bHQ6CisJCQlyYXRlID0gWkQxMjAxX1JBVEVCMTE7CisJCQlicmVhazsKKwl9CisJaWYgKCFycnEtPmZpeGVkKSB7IC8qIEFsc28gZW5hYmxlIGFsbCBsb3dlciBiaXRyYXRlcyAqLworCQlyYXRlIHw9IHJhdGUtMTsKKwl9CisJCisJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX1RYUkFURUNOVEwsIHJhdGUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gemQxMjAxX21hY19yZXNldCh6ZCk7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX2dldF9yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJc2hvcnQgcmF0ZTsKKwlpbnQgZXJyOworCisJZXJyID0gemQxMjAxX2dldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NVUlJFTlRUWFJBVEUsICZyYXRlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc3dpdGNoKHJhdGUpIHsKKwkJY2FzZSAxOgorCQkJcnJxLT52YWx1ZSA9IDEwMDAwMDA7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJcnJxLT52YWx1ZSA9IDIwMDAwMDA7CisJCQlicmVhazsKKwkJY2FzZSA1OgorCQkJcnJxLT52YWx1ZSA9IDU1MDAwMDA7CisJCQlicmVhazsKKwkJY2FzZSAxMToKKwkJCXJycS0+dmFsdWUgPSAxMTAwMDAwMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcnJxLT52YWx1ZSA9IDA7CisJfQorCXJycS0+Zml4ZWQgPSAwOworCXJycS0+ZGlzYWJsZWQgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX3NldF9ydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKyAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJ0cywgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwlpbnQgZXJyOworCXNob3J0IHZhbCA9IHJ0cy0+dmFsdWU7CisKKwlpZiAocnRzLT5kaXNhYmxlZCB8fCAhcnRzLT5maXhlZCkKKwkJdmFsID0gWkQxMjAxX1JUU01BWDsKKwlpZiAodmFsID4gWkQxMjAxX1JUU01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHZhbCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORlJUU1RIUkVTSE9MRCwgdmFsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXJldHVybiB6ZDEyMDFfbWFjX3Jlc2V0KHpkKTsKK30KKworc3RhdGljIGludCB6ZDEyMDFfZ2V0X3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorICAgIHN0cnVjdCBpd19wYXJhbSAqcnRzLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCXNob3J0IHJ0c3Q7CisJaW50IGVycjsKKworCWVyciA9IHpkMTIwMV9nZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZSVFNUSFJFU0hPTEQsICZydHN0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXJ0cy0+dmFsdWUgPSBydHN0OworCXJ0cy0+ZGlzYWJsZWQgPSAocnRzLT52YWx1ZSA9PSBaRDEyMDFfUlRTTUFYKTsKKwlydHMtPmZpeGVkID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9zZXRfZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorICAgIHN0cnVjdCBpd19wYXJhbSAqZnJhZywgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwlpbnQgZXJyOworCXNob3J0IHZhbCA9IGZyYWctPnZhbHVlOworCisJaWYgKGZyYWctPmRpc2FibGVkIHx8ICFmcmFnLT5maXhlZCkKKwkJdmFsID0gWkQxMjAxX0ZSQUdNQVg7CisJaWYgKHZhbCA+IFpEMTIwMV9GUkFHTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAodmFsIDwgWkQxMjAxX0ZSQUdNSU4pCisJCXJldHVybiAtRUlOVkFMOworCWlmICh2YWwgJiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GRlJBR1RIUkVTSE9MRCwgdmFsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXJldHVybiB6ZDEyMDFfbWFjX3Jlc2V0KHpkKTsKK30KKworc3RhdGljIGludCB6ZDEyMDFfZ2V0X2ZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKyAgICBzdHJ1Y3QgaXdfcGFyYW0gKmZyYWcsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJc2hvcnQgZnJhZ3Q7CisJaW50IGVycjsKKworCWVyciA9IHpkMTIwMV9nZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZGUkFHVEhSRVNIT0xELCAmZnJhZ3QpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZnJhZy0+dmFsdWUgPSBmcmFndDsKKwlmcmFnLT5kaXNhYmxlZCA9IChmcmFnLT52YWx1ZSA9PSBaRDEyMDFfRlJBR01BWCk7CisJZnJhZy0+Zml4ZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX3NldF9yZXRyeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZDEyMDFfZ2V0X3JldHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9zZXRfZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgc3RydWN0IGl3X3BvaW50ICplcnEsIGNoYXIgKmtleSkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCXNob3J0IGk7CisJaW50IGVyciwgcmlkOworCisJaWYgKGVycS0+bGVuZ3RoID4gWkQxMjAxX01BWEtFWUxFTikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpLTE7CisJaWYgKGkgPT0gLTEpIHsKKwkJZXJyID0gemQxMjAxX2dldGNvbmZpZzE2KHpkLFpEMTIwMV9SSURfQ05GREVGQVVMVEtFWUlELCZpKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfSBlbHNlIHsKKwkJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORkRFRkFVTFRLRVlJRCwgaSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChpIDwgMCB8fCBpID49IFpEMTIwMV9OVU1LRVlTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJpZCA9IFpEMTIwMV9SSURfQ05GREVGQVVMVEtFWTAgKyBpOworCWVyciA9IHpkMTIwMV9zZXRjb25maWcoemQsIHJpZCwga2V5LCBlcnEtPmxlbmd0aCwgMSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwl6ZC0+ZW5jb2RlX2tleWxlbltpXSA9IGVycS0+bGVuZ3RoOworCW1lbWNweSh6ZC0+ZW5jb2RlX2tleXNbaV0sIGtleSwgZXJxLT5sZW5ndGgpOworCisJaT0wOworCWlmICghKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQgJiBJV19FTkNPREVfTU9ERSkpIHsKKwkJaSB8PSAweDAxOworCQl6ZC0+ZW5jb2RlX2VuYWJsZWQgPSAxOworCX0gZWxzZQorCQl6ZC0+ZW5jb2RlX2VuYWJsZWQgPSAwOworCWlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX1JFU1RSSUNURUQgJiBJV19FTkNPREVfTU9ERSkgeworCQlpIHw9IDB4MDI7CisJCXpkLT5lbmNvZGVfcmVzdHJpY3RlZCA9IDE7CisJfSBlbHNlCisJCXpkLT5lbmNvZGVfcmVzdHJpY3RlZCA9IDA7CisJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORldFQkZMQUdTLCBpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKHpkLT5lbmNvZGVfZW5hYmxlZCkKKwkJaSA9IFpEMTIwMV9DTkZBVVRIRU5USUNBVElPTl9TSEFSRURLRVk7CisJZWxzZQorCQlpID0gWkQxMjAxX0NORkFVVEhFTlRJQ0FUSU9OX09QRU5TWVNURU07CisJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORkFVVEhFTlRJQ0FUSU9OLCBpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIHpkMTIwMV9tYWNfcmVzZXQoemQpOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9nZXRfZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgc3RydWN0IGl3X3BvaW50ICplcnEsIGNoYXIgKmtleSkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCXNob3J0IGk7CisJaW50IGVycjsKKworCWlmICh6ZC0+ZW5jb2RlX2VuYWJsZWQpCisJCWVycS0+ZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRDsKKwllbHNlCisJCWVycS0+ZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7CisJaWYgKHpkLT5lbmNvZGVfcmVzdHJpY3RlZCkKKwkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfUkVTVFJJQ1RFRDsKKwllbHNlCisJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX09QRU47CisKKwlpID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0xOworCWlmIChpID09IC0xKSB7CisJCWVyciA9IHpkMTIwMV9nZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZERUZBVUxUS0VZSUQsICZpKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCWlmIChpPDAgfHwgaT49IFpEMTIwMV9OVU1LRVlTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVycS0+ZmxhZ3MgfD0gaSsxOworCQorCWVycS0+bGVuZ3RoID0gemQtPmVuY29kZV9rZXlsZW5baV07CisJbWVtY3B5KGtleSwgemQtPmVuY29kZV9rZXlzW2ldLCBlcnEtPmxlbmd0aCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZDEyMDFfc2V0X3Bvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwlzaG9ydCBlbmFibGVkLCBkdXJhdGlvbiwgbGV2ZWw7CisJaW50IGVycjsKKworCWVuYWJsZWQgPSB2d3JxLT5kaXNhYmxlZCA/IDAgOiAxOworCWlmIChlbmFibGVkKSB7CisJCWlmICh2d3JxLT5mbGFncyAmIElXX1BPV0VSX1BFUklPRCkgeworCQkJZHVyYXRpb24gPSB2d3JxLT52YWx1ZTsKKwkJCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgCisJCQkgICAgWkQxMjAxX1JJRF9DTkZNQVhTTEVFUERVUkFUSU9OLCBkdXJhdGlvbik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAodndycS0+ZmxhZ3MgJiBJV19QT1dFUl9USU1FT1VUKSB7CisJCQllcnIgPSB6ZDEyMDFfZ2V0Y29uZmlnMTYoemQsIAorCQkJICAgIFpEMTIwMV9SSURfQ05GTUFYU0xFRVBEVVJBVElPTiwgJmR1cmF0aW9uKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJCWxldmVsID0gdndycS0+dmFsdWUgKiA0IC8gZHVyYXRpb247CisJCQlpZiAobGV2ZWwgPiA0KQorCQkJCWxldmVsID0gNDsKKwkJCWlmIChsZXZlbCA8IDApCisJCQkJbGV2ZWwgPSAwOworCQkJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORlBNRVBTLAorCQkJICAgIGxldmVsKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJCWdvdG8gb3V0OworCQl9CisJCXJldHVybiAtRUlOVkFMOworCX0KK291dDoKKwllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GUE1FTkFCTEVELCBlbmFibGVkKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX2dldF9wb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwlzaG9ydCBlbmFibGVkLCBsZXZlbCwgZHVyYXRpb247CisJaW50IGVycjsKKworCWVyciA9IHpkMTIwMV9nZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZQTUVOQUJMRUQsICZlbmFibGVkKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWVyciA9IHpkMTIwMV9nZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZQTUVQUywgJmxldmVsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWVyciA9IHpkMTIwMV9nZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZNQVhTTEVFUERVUkFUSU9OLCAmZHVyYXRpb24pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJdndycS0+ZGlzYWJsZWQgPSBlbmFibGVkID8gMCA6IDE7CisJaWYgKHZ3cnEtPmZsYWdzICYgSVdfUE9XRVJfVFlQRSkgeworCQlpZiAodndycS0+ZmxhZ3MgJiBJV19QT1dFUl9QRVJJT0QpIHsKKwkJCXZ3cnEtPnZhbHVlID0gZHVyYXRpb247CisJCQl2d3JxLT5mbGFncyA9IElXX1BPV0VSX1BFUklPRDsKKwkJfSBlbHNlIHsKKwkJCXZ3cnEtPnZhbHVlID0gZHVyYXRpb24gKiBsZXZlbCAvIDQ7CisJCQl2d3JxLT5mbGFncyA9IElXX1BPV0VSX1RJTUVPVVQ7CisJCX0KKwl9CisJaWYgKHZ3cnEtPmZsYWdzICYgSVdfUE9XRVJfTU9ERSkgeworCQlpZiAoZW5hYmxlZCAmJiBsZXZlbCkKKwkJCXZ3cnEtPmZsYWdzID0gSVdfUE9XRVJfVU5JQ0FTVF9SOworCQllbHNlCisJCQl2d3JxLT5mbGFncyA9IElXX1BPV0VSX0FMTF9SOworCX0KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBjb25zdCBpd19oYW5kbGVyIHpkMTIwMV9pd19oYW5kbGVyW10gPQoreworCShpd19oYW5kbGVyKSB6ZDEyMDFfY29uZmlnX2NvbW1pdCwJLyogU0lPQ1NJV0NPTU1JVCAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfZ2V0X25hbWUsICAgIAkvKiBTSU9DR0lXTkFNRSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCS8qIFNJT0NTSVdOV0lEICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJLyogU0lPQ0dJV05XSUQgKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX3NldF9mcmVxLAkJLyogU0lPQ1NJV0ZSRVEgKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX2dldF9mcmVxLAkJLyogU0lPQ0dJV0ZSRVEgKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX3NldF9tb2RlLAkJLyogU0lPQ1NJV01PREUgKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX2dldF9tb2RlLAkJLyogU0lPQ0dJV01PREUgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgICAgICAJLyogU0lPQ1NJV1NFTlMgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgIAkJLyogU0lPQ0dJV1NFTlMgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkvKiBTSU9DU0lXUkFOR0UgKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX2dldF9yYW5nZSwgICAgICAgICAgIC8qIFNJT0NHSVdSQU5HRSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCS8qIFNJT0NTSVdQUklWICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJLyogU0lPQ0dJV1BSSVYgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkvKiBTSU9DU0lXU1RBVFMgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkvKiBTSU9DR0lXU1RBVFMgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkvKiBTSU9DU0lXU1BZICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJLyogU0lPQ0dJV1NQWSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIE5VTEwvKnpkMTIwMV9zZXRfd2FwKi8sCQkvKiBTSU9DU0lXQVAgKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX2dldF93YXAsCQkvKiBTSU9DR0lXQVAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgIAkJLyogU0lPQ0dJV0FQTElTVCAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfc2V0X3NjYW4sCQkvKiBTSU9DU0lXU0NBTiAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfZ2V0X3NjYW4sCQkvKiBTSU9DR0lXU0NBTiAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfc2V0X2Vzc2lkLAkJLyogU0lPQ1NJV0VTU0lEICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9nZXRfZXNzaWQsCQkvKiBTSU9DR0lXRVNTSUQgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAJCS8qIFNJT0NTSVdOSUNLTiAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfZ2V0X25pY2ssIAkJLyogU0lPQ0dJV05JQ0tOICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJLyogLS0gaG9sZSAtLSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX3NldF9yYXRlLAkJLyogU0lPQ1NJV1JBVEUgKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX2dldF9yYXRlLAkJLyogU0lPQ0dJV1JBVEUgKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX3NldF9ydHMsCQkvKiBTSU9DU0lXUlRTICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9nZXRfcnRzLAkJLyogU0lPQ0dJV1JUUyAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfc2V0X2ZyYWcsCQkvKiBTSU9DU0lXRlJBRyAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfZ2V0X2ZyYWcsCQkvKiBTSU9DR0lXRlJBRyAqLworCShpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgIAkJLyogU0lPQ1NJV1RYUE9XICovCisJKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgIAkJLyogU0lPQ0dJV1RYUE9XICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9zZXRfcmV0cnksCQkvKiBTSU9DU0lXUkVUUlkgKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX2dldF9yZXRyeSwJCS8qIFNJT0NHSVdSRVRSWSAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfc2V0X2VuY29kZSwJCS8qIFNJT0NTSVdFTkNPREUgKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX2dldF9lbmNvZGUsCQkvKiBTSU9DR0lXRU5DT0RFICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9zZXRfcG93ZXIsCQkvKiBTSU9DU0lXUE9XRVIgKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX2dldF9wb3dlciwJCS8qIFNJT0NHSVdQT1dFUiAqLworfTsKKworc3RhdGljIGludCB6ZDEyMDFfc2V0X2hvc3RhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJaW50IGVycjsKKworCWlmICghemQtPmFwKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GSE9TVEFVVEgsIHJycS0+dmFsdWUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX2dldF9ob3N0YXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCXNob3J0IGhvc3RhdXRoOworCWludCBlcnI7CisKKwlpZiAoIXpkLT5hcCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJZXJyID0gemQxMjAxX2dldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORkhPU1RBVVRILCAmaG9zdGF1dGgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJcnJxLT52YWx1ZSA9IGhvc3RhdXRoOworCXJycS0+Zml4ZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX2F1dGhfc3RhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgc3RydWN0IHNvY2thZGRyICpzdGEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJdW5zaWduZWQgY2hhciBidWZmZXJbMTBdOworCisJaWYgKCF6ZC0+YXApCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCW1lbWNweShidWZmZXIsIHN0YS0+c2FfZGF0YSwgRVRIX0FMRU4pOworCSooc2hvcnQqKShidWZmZXIrNikgPSAwOwkvKiAwPT1zdWNjZXNzLCAxPT1mYWlsdXJlICovCisJKihzaG9ydCopKGJ1ZmZlcis4KSA9IDA7CisKKwlyZXR1cm4gemQxMjAxX3NldGNvbmZpZyh6ZCwgWkQxMjAxX1JJRF9BVVRIRU5USUNBVEVTVEEsIGJ1ZmZlciwgMTAsIDEpOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9zZXRfbWF4YXNzb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwlpbnQgZXJyOworCisJaWYgKCF6ZC0+YXApCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZNQVhBU1NPQ1NUQVRJT05TLCBycnEtPnZhbHVlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9nZXRfbWF4YXNzb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwlzaG9ydCBtYXhhc3NvYzsKKwlpbnQgZXJyOworCisJaWYgKCF6ZC0+YXApCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWVyciA9IHpkMTIwMV9nZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZNQVhBU1NPQ1NUQVRJT05TLCAmbWF4YXNzb2MpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJcnJxLT52YWx1ZSA9IG1heGFzc29jOworCXJycS0+Zml4ZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBpd19oYW5kbGVyIHpkMTIwMV9wcml2YXRlX2hhbmRsZXJbXSA9IHsKKwkoaXdfaGFuZGxlcikgemQxMjAxX3NldF9ob3N0YXV0aCwJLyogWkQxMjAxU0lXSE9TVEFVVEggKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX2dldF9ob3N0YXV0aCwJLyogWkQxMjAxR0lXSE9TVEFVVEggKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX2F1dGhfc3RhLAkJLyogWkQxMjAxU0lXQVVUSFNUQSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCS8qIG5vdGhpbmcgdG8gZ2V0ICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9zZXRfbWF4YXNzb2MsCS8qIFpEMTIwMVNJTUFYQVNTT0MgKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX2dldF9tYXhhc3NvYywJLyogWkQxMjAxR0lNQVhBU1NPQyAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpd19wcml2X2FyZ3MgemQxMjAxX3ByaXZhdGVfYXJnc1tdID0geworCXsgWkQxMjAxU0lXSE9TVEFVVEgsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAorCSAgICBJV19QUklWX1RZUEVfTk9ORSwgInNldGhvc3RhdXRoIiB9LAorCXsgWkQxMjAxR0lXSE9TVEFVVEgsIElXX1BSSVZfVFlQRV9OT05FLAorCSAgICBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgImdldGhvc3RhdXRoIiB9LAorCXsgWkQxMjAxU0lXQVVUSFNUQSwgSVdfUFJJVl9UWVBFX0FERFIgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAKKwkgICAgSVdfUFJJVl9UWVBFX05PTkUsICJhdXRoc3RhdGlvbiIgfSwKKwl7IFpEMTIwMVNJV01BWEFTU09DLCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKKwkgICAgSVdfUFJJVl9UWVBFX05PTkUsICJzZXRtYXhhc3NvYyIgfSwKKwl7IFpEMTIwMUdJV01BWEFTU09DLCBJV19QUklWX1RZUEVfTk9ORSwKKwkgICAgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsICJnZXRtYXhhc3NvYyIgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgemQxMjAxX2l3X2hhbmRsZXJzID0geworCS5udW1fc3RhbmRhcmQgCQk9IHNpemVvZih6ZDEyMDFfaXdfaGFuZGxlcikvc2l6ZW9mKGl3X2hhbmRsZXIpLAorCS5udW1fcHJpdmF0ZSAJCT0gc2l6ZW9mKHpkMTIwMV9wcml2YXRlX2hhbmRsZXIpL3NpemVvZihpd19oYW5kbGVyKSwKKwkubnVtX3ByaXZhdGVfYXJncyAJPSBzaXplb2YoemQxMjAxX3ByaXZhdGVfYXJncykvc2l6ZW9mKHN0cnVjdCBpd19wcml2X2FyZ3MpLAorCS5zdGFuZGFyZCAJCT0gKGl3X2hhbmRsZXIgKil6ZDEyMDFfaXdfaGFuZGxlciwKKwkucHJpdmF0ZSAJCT0gKGl3X2hhbmRsZXIgKil6ZDEyMDFfcHJpdmF0ZV9oYW5kbGVyLAorCS5wcml2YXRlX2FyZ3MgCQk9IChzdHJ1Y3QgaXdfcHJpdl9hcmdzICopIHpkMTIwMV9wcml2YXRlX2FyZ3MsCit9OworCitpbnQgemQxMjAxX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiOworCWludCBpLCBlcnI7CisJc2hvcnQgcG9ydHR5cGU7CisJY2hhciBidWZbSVdfRVNTSURfTUFYX1NJWkUrMl07CisKKwl1c2IgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisKKwl6ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB6ZDEyMDEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXpkKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQoemQsIDAsIHNpemVvZihzdHJ1Y3QgemQxMjAxKSk7CisJemQtPmFwID0gYXA7CisJemQtPnVzYiA9IHVzYjsKKwl6ZC0+cmVtb3ZlZCA9IDA7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmemQtPnJ4ZGF0YXEpOworCUlOSVRfSExJU1RfSEVBRCgmemQtPmZyYWdsaXN0KTsKKwkKKwllcnIgPSB6ZDEyMDFfZndfdXBsb2FkKHVzYiwgemQtPmFwKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnVzYi0+ZGV2LCAiemQxMjAxIGZpcm13YXJlIHVwbG9hZCBmYWlsZWQ6ICVkXG4iLCBlcnIpOworCQlnb3RvIGVycl96ZDsKKwl9CisJCisJemQtPmVuZHBfaW4gPSAxOworCXpkLT5lbmRwX291dCA9IDE7CisJemQtPmVuZHBfb3V0MiA9IDI7CisJemQtPnJ4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJemQtPnR4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF6ZC0+cnhfdXJiIHx8ICF6ZC0+dHhfdXJiKQorCQlnb3RvIGVycl96ZDsKKworCWZvcihpID0gMDsgaTwxMDA7IGkrKykKKwkJdWRlbGF5KDEwMDApOworCisJZXJyID0gemQxMjAxX2RydnJfc3RhcnQoemQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3pkOworCisJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORk1BWERBVEFMRU4sIDIzMTIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3N0YXJ0OworCisJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX1RYUkFURUNOVEwsCisJICAgIFpEMTIwMV9SQVRFQjEgfCBaRDEyMDFfUkFURUIyIHwgWkQxMjAxX1JBVEVCNSB8IFpEMTIwMV9SQVRFQjExKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9zdGFydDsKKworCXpkLT5kZXYgPSBhbGxvY19ldGhlcmRldigwKTsKKwlpZiAoIXpkLT5kZXYpCisJCWdvdG8gZXJyX3N0YXJ0OworCisJemQtPmRldi0+cHJpdiA9IHpkOworCXpkLT5kZXYtPm9wZW4gPSB6ZDEyMDFfbmV0X29wZW47CisJemQtPmRldi0+c3RvcCA9IHpkMTIwMV9uZXRfc3RvcDsKKwl6ZC0+ZGV2LT5nZXRfc3RhdHMgPSB6ZDEyMDFfZ2V0X3N0YXRzOworCXpkLT5kZXYtPmdldF93aXJlbGVzc19zdGF0cyA9IHpkMTIwMV9nZXRfd2lyZWxlc3Nfc3RhdHM7CisJemQtPmRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPQorCSAgICAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopJnpkMTIwMV9pd19oYW5kbGVyczsKKwl6ZC0+ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB6ZDEyMDFfaGFyZF9zdGFydF94bWl0OworCXpkLT5kZXYtPndhdGNoZG9nX3RpbWVvID0gWkQxMjAxX1RYX1RJTUVPVVQ7CisJemQtPmRldi0+dHhfdGltZW91dCA9IHpkMTIwMV90eF90aW1lb3V0OworCXpkLT5kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHpkMTIwMV9zZXRfbXVsdGljYXN0OworCXpkLT5kZXYtPnNldF9tYWNfYWRkcmVzcyA9IHpkMTIwMV9zZXRfbWFjX2FkZHJlc3M7CisJc3RyY3B5KHpkLT5kZXYtPm5hbWUsICJ3bGFuJWQiKTsKKworCWVyciA9IHpkMTIwMV9nZXRjb25maWcoemQsIFpEMTIwMV9SSURfQ05GT1dOTUFDQUREUiwgCisJICAgIHpkLT5kZXYtPmRldl9hZGRyLCB6ZC0+ZGV2LT5hZGRyX2xlbik7CisJaWYgKGVycikKKwkJZ290byBlcnJfbmV0OworCisJLyogU2V0IHdpbGRjYXJkIGVzc2lkIHRvIG1hdGNoIHpkLT5lc3NpZCAqLworCSooX19sZTE2ICopYnVmID0gY3B1X3RvX2xlMTYoMCk7CisJZXJyID0gemQxMjAxX3NldGNvbmZpZyh6ZCwgWkQxMjAxX1JJRF9DTkZERVNJUkVEU1NJRCwgYnVmLAorCSAgICBJV19FU1NJRF9NQVhfU0laRSsyLCAxKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9uZXQ7CisKKwlpZiAoemQtPmFwKQorCQlwb3J0dHlwZSA9IFpEMTIwMV9QT1JUVFlQRV9BUDsKKwllbHNlCisJCXBvcnR0eXBlID0gWkQxMjAxX1BPUlRUWVBFX0JTUzsKKwllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GUE9SVFRZUEUsIHBvcnR0eXBlKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9uZXQ7CisKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXYoemQtPmRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfbmV0OworCWRldl9pbmZvKCZ1c2ItPmRldiwgIiVzOiBaRDEyMDEgVVNCIFdpcmVsZXNzIGludGVyZmFjZVxuIiwKKwkgICAgemQtPmRldi0+bmFtZSk7CisJCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIHpkKTsKKwlyZXR1cm4gMDsKKworZXJyX25ldDoKKwlmcmVlX25ldGRldih6ZC0+ZGV2KTsKK2Vycl9zdGFydDoKKwkvKiBMZWF2ZSB0aGUgZGV2aWNlIGluIHJlc2V0IHN0YXRlICovCisJemQxMjAxX2RvY21kKHpkLCBaRDEyMDFfQ01EQ09ERV9JTklULCAwLCAwLCAwKTsKK2Vycl96ZDoKKwlpZiAoemQtPnR4X3VyYikKKwkJdXNiX2ZyZWVfdXJiKHpkLT50eF91cmIpOworCWlmICh6ZC0+cnhfdXJiKQorCQl1c2JfZnJlZV91cmIoemQtPnJ4X3VyYik7CisJa2ZyZWUoemQpOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgemQxMjAxX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZD0oc3RydWN0IHpkMTIwMSAqKXVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm5vZGUyOworCXN0cnVjdCB6ZDEyMDFfZnJhZyAqZnJhZzsKKworCWlmICghemQpCisJCXJldHVybjsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisJaWYgKHpkLT5kZXYpIHsKKwkJdW5yZWdpc3Rlcl9uZXRkZXYoemQtPmRldik7CisJCWZyZWVfbmV0ZGV2KHpkLT5kZXYpOworCX0KKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZnJhZywgbm9kZSwgbm9kZTIsICZ6ZC0+ZnJhZ2xpc3QsIGZub2RlKSB7CisJCWhsaXN0X2RlbF9pbml0KCZmcmFnLT5mbm9kZSk7CisJCWtmcmVlX3NrYihmcmFnLT5za2IpOworCQlrZnJlZShmcmFnKTsKKwl9CisKKwlpZiAoemQtPnR4X3VyYikgeworCQl1c2Jfa2lsbF91cmIoemQtPnR4X3VyYik7CisJCXVzYl9mcmVlX3VyYih6ZC0+dHhfdXJiKTsKKwl9CisJaWYgKHpkLT5yeF91cmIpIHsKKwkJdXNiX2tpbGxfdXJiKHpkLT5yeF91cmIpOworCQl1c2JfZnJlZV91cmIoemQtPnJ4X3VyYik7CisJfQorCWtmcmVlKHpkKTsKK30KKworc3RydWN0IHVzYl9kcml2ZXIgemQxMjAxX3VzYiA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9ICJ6ZDEyMDEiLAorCS5wcm9iZSA9IHpkMTIwMV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IHpkMTIwMV9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9IHpkMTIwMV90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHpkMTIwMV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmemQxMjAxX3VzYik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB6ZDEyMDFfY2xlYW51cCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZ6ZDEyMDFfdXNiKTsKK30KKworbW9kdWxlX2luaXQoemQxMjAxX2luaXQpOworbW9kdWxlX2V4aXQoemQxMjAxX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L3pkMTIwMS5oIGIvZHJpdmVycy91c2IvbmV0L3pkMTIwMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MjdjNzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9uZXQvemQxMjAxLmgKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKglDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSmVyb2VuIFZyZWVrZW4gKHBlMXJ4cUBhbXNhdC5vcmcpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCXZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKglQYXJ0cyBvZiB0aGlzIGRyaXZlciBoYXZlIGJlZW4gZGVyaXZlZCBmcm9tIGEgd2xhbi1uZyB2ZXJzaW9uCisgKgltb2RpZmllZCBieSBaeURBUy4KKyAqCUNvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKi8KKworI2lmbmRlZiBfSU5DTFVERV9aRDEyMDFfSF8KKyNkZWZpbmUgX0lOQ0xVREVfWkQxMjAxX0hfCisKKyNkZWZpbmUgWkQxMjAxX05VTUtFWVMJCTQKKyNkZWZpbmUgWkQxMjAxX01BWEtFWUxFTgkxMworI2RlZmluZSBaRDEyMDFfTUFYTVVMVEkJCTE2CisjZGVmaW5lIFpEMTIwMV9GUkFHTUFYCQkyNTAwCisjZGVmaW5lIFpEMTIwMV9GUkFHTUlOCQkyNTYKKyNkZWZpbmUgWkQxMjAxX1JUU01BWAkJMjUwMAorCisjZGVmaW5lIFpEMTIwMV9SWFNJWkUJCTMwMDAKKworc3RydWN0IHpkMTIwMSB7CisJc3RydWN0IHVzYl9kZXZpY2UJKnVzYjsKKwlpbnQJCQlyZW1vdmVkOworCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CisJc3RydWN0IGl3X3N0YXRpc3RpY3MJaXdzdGF0czsKKworCWludAkJCWVuZHBfaW47CisJaW50CQkJZW5kcF9vdXQ7CisJaW50CQkJZW5kcF9vdXQyOworCXN0cnVjdCB1cmIJCSpyeF91cmI7CisJc3RydWN0IHVyYgkJKnR4X3VyYjsKKworCXVuc2lnbmVkIGNoYXIgCQlyeGRhdGFbWkQxMjAxX1JYU0laRV07CisJaW50CQkJcnhsZW47CisJd2FpdF9xdWV1ZV9oZWFkX3QJcnhkYXRhcTsKKwlpbnQJCQlyeGRhdGFzOworCXN0cnVjdCBobGlzdF9oZWFkCWZyYWdsaXN0OworCXVuc2lnbmVkIGNoYXIJCXR4ZGF0YVtaRDEyMDFfUlhTSVpFXTsKKworCWludAkJCWFwOworCWNoYXIJCQllc3NpZFtJV19FU1NJRF9NQVhfU0laRSsxXTsKKwlpbnQJCQllc3NpZGxlbjsKKwlpbnQJCQltYWNfZW5hYmxlZDsKKwlpbnQJCQltb25pdG9yOworCWludAkJCWVuY29kZV9lbmFibGVkOworCWludAkJCWVuY29kZV9yZXN0cmljdGVkOworCXVuc2lnbmVkIGNoYXIJCWVuY29kZV9rZXlzW1pEMTIwMV9OVU1LRVlTXVtaRDEyMDFfTUFYS0VZTEVOXTsKKwlpbnQJCQllbmNvZGVfa2V5bGVuW1pEMTIwMV9OVU1LRVlTXTsKK307CisKK3N0cnVjdCB6ZDEyMDFfZnJhZyB7CisJc3RydWN0IGhsaXN0X25vZGUJZm5vZGU7CisJaW50CQkJc2VxOworCXN0cnVjdCBza19idWZmCQkqc2tiOworfTsKKworI2RlZmluZSBaRDEyMDFTSVdIT1NUQVVUSCBTSU9DSVdGSVJTVFBSSVYKKyNkZWZpbmUgWkQxMjAxR0lXSE9TVEFVVEggWkQxMjAxU0lXSE9TVEFVVEgrMQorI2RlZmluZSBaRDEyMDFTSVdBVVRIU1RBIFNJT0NJV0ZJUlNUUFJJVisyCisjZGVmaW5lIFpEMTIwMVNJV01BWEFTU09DIFNJT0NJV0ZJUlNUUFJJVis0CisjZGVmaW5lIFpEMTIwMUdJV01BWEFTU09DIFpEMTIwMVNJV01BWEFTU09DKzEKKworI2RlZmluZSBaRDEyMDFfRldfVElNRU9VVAkoMTAwMCkKKworI2RlZmluZSBaRDEyMDFfVFhfVElNRU9VVAkoMjAwMCkKKworI2RlZmluZSBaRDEyMDFfVVNCX0NNRFJFUQkwCisjZGVmaW5lIFpEMTIwMV9VU0JfUkVTUkVRCTEKKworI2RlZmluZQlaRDEyMDFfQ01EQ09ERV9JTklUCTB4MDAKKyNkZWZpbmUgWkQxMjAxX0NNRENPREVfRU5BQkxFCTB4MDEKKyNkZWZpbmUgWkQxMjAxX0NNRENPREVfRElTQUJMRQkweDAyCisjZGVmaW5lIFpEMTIwMV9DTURDT0RFX0FMTE9DCTB4MGEKKyNkZWZpbmUgWkQxMjAxX0NNRENPREVfSU5RVUlSRQkweDExCisjZGVmaW5lIFpEMTIwMV9DTURDT0RFX1NFVFJYUklECTB4MTcKKyNkZWZpbmUgWkQxMjAxX0NNRENPREVfQUNDRVNTCTB4MjEKKworI2RlZmluZSBaRDEyMDFfUEFDS0VUX0VWRU5UU1RBVAkweDAKKyNkZWZpbmUgWkQxMjAxX1BBQ0tFVF9SWERBVEEJMHgxCisjZGVmaW5lIFpEMTIwMV9QQUNLRVRfSU5RVUlSRQkweDIKKyNkZWZpbmUgWkQxMjAxX1BBQ0tFVF9SRVNPVVJDRQkweDMKKworI2RlZmluZSBaRDEyMDFfQUNDRVNTQklUCTB4MDEwMAorCisjZGVmaW5lIFpEMTIwMV9SSURfQ05GUE9SVFRZUEUJCTB4ZmMwMAorI2RlZmluZSBaRDEyMDFfUklEX0NORk9XTk1BQ0FERFIJMHhmYzAxCisjZGVmaW5lIFpEMTIwMV9SSURfQ05GREVTSVJFRFNTSUQJMHhmYzAyCisjZGVmaW5lIFpEMTIwMV9SSURfQ05GT1dOQ0hBTk5FTAkweGZjMDMKKyNkZWZpbmUgWkQxMjAxX1JJRF9DTkZPV05TU0lECQkweGZjMDQKKyNkZWZpbmUgWkQxMjAxX1JJRF9DTkZNQVhEQVRBTEVOCTB4ZmMwNworI2RlZmluZSBaRDEyMDFfUklEX0NORlBNRU5BQkxFRAkJMHhmYzA5CisjZGVmaW5lIFpEMTIwMV9SSURfQ05GUE1FUFMJCTB4ZmMwYQorI2RlZmluZSBaRDEyMDFfUklEX0NORk1BWFNMRUVQRFVSQVRJT04JMHhmYzBjCisjZGVmaW5lIFpEMTIwMV9SSURfQ05GREVGQVVMVEtFWUlECTB4ZmMyMworI2RlZmluZSBaRDEyMDFfUklEX0NORkRFRkFVTFRLRVkwCTB4ZmMyNAorI2RlZmluZSBaRDEyMDFfUklEX0NORkRFRkFVTFRLRVkxCTB4ZmMyNQorI2RlZmluZSBaRDEyMDFfUklEX0NORkRFRkFVTFRLRVkyCTB4ZmMyNgorI2RlZmluZSBaRDEyMDFfUklEX0NORkRFRkFVTFRLRVkzCTB4ZmMyNworI2RlZmluZSBaRDEyMDFfUklEX0NORldFQkZMQUdTCQkweGZjMjgKKyNkZWZpbmUgWkQxMjAxX1JJRF9DTkZBVVRIRU5USUNBVElPTgkweGZjMmEKKyNkZWZpbmUgWkQxMjAxX1JJRF9DTkZNQVhBU1NPQ1NUQVRJT05TCTB4ZmMyYgorI2RlZmluZSBaRDEyMDFfUklEX0NORkhPU1RBVVRICQkweGZjMmUKKyNkZWZpbmUgWkQxMjAxX1JJRF9DTkZHUk9VUEFERFJFU1MJMHhmYzgwCisjZGVmaW5lIFpEMTIwMV9SSURfQ05GRlJBR1RIUkVTSE9MRAkweGZjODIKKyNkZWZpbmUgWkQxMjAxX1JJRF9DTkZSVFNUSFJFU0hPTEQJMHhmYzgzCisjZGVmaW5lIFpEMTIwMV9SSURfVFhSQVRFQ05UTAkJMHhmYzg0CisjZGVmaW5lIFpEMTIwMV9SSURfUFJPTUlTQ1VPVVNNT0RFCTB4ZmM4NQorI2RlZmluZSBaRDEyMDFfUklEX0NORkJBU0lDUkFURVMJMHhmY2IzCisjZGVmaW5lIFpEMTIwMV9SSURfQVVUSEVOVElDQVRFU1RBCTB4ZmNlMworI2RlZmluZSBaRDEyMDFfUklEX0NVUlJFTlRCU1NJRAkJMHhmZDQyCisjZGVmaW5lIFpEMTIwMV9SSURfQ09NTVNRVUFMSVRZCQkweGZkNDMKKyNkZWZpbmUgWkQxMjAxX1JJRF9DVVJSRU5UVFhSQVRFCTB4ZmQ0NAorI2RlZmluZSBaRDEyMDFfUklEX0NORk1BWFRYQlVGRkVSTlVNQkVSCTB4ZmRhMAorI2RlZmluZSBaRDEyMDFfUklEX0NVUlJFTlRDSEFOTkVMCTB4ZmRjMQorCisjZGVmaW5lIFpEMTIwMV9JTlFfU0NBTlJFU1VMVFMJCTB4ZjEwMQorCisjZGVmaW5lIFpEMTIwMV9JTkZfTElOS1NUQVRVUwkJMHhmMjAwCisjZGVmaW5lIFpEMTIwMV9JTkZfQVNTT0NTVEFUVVMJCTB4ZjIwMQorI2RlZmluZSBaRDEyMDFfSU5GX0FVVEhSRVEJCTB4ZjIwMgorCisjZGVmaW5lIFpEMTIwMV9BU1NPQ1NUQVRVU19TVEFBU1NPQwkweDEKKyNkZWZpbmUgWkQxMjAxX0FTU09DU1RBVFVTX1JFQVNTT0MJMHgyCisjZGVmaW5lIFpEMTIwMV9BU1NPQ1NUQVRVU19ESVNBU1NPQwkweDMKKyNkZWZpbmUgWkQxMjAxX0FTU09DU1RBVFVTX0FTU09DRkFJTAkweDQKKyNkZWZpbmUgWkQxMjAxX0FTU09DU1RBVFVTX0FVVEhGQUlMCTB4NQorCisjZGVmaW5lIFpEMTIwMV9QT1JUVFlQRV9JQlNTCQkwCisjZGVmaW5lIFpEMTIwMV9QT1JUVFlQRV9CU1MJCTEKKyNkZWZpbmUgWkQxMjAxX1BPUlRUWVBFX1dEUwkJMgorI2RlZmluZSBaRDEyMDFfUE9SVFRZUEVfUFNFVURPSUJTUwkzCisjZGVmaW5lIFpEMTIwMV9QT1JUVFlQRV9BUAkJNgorCisjZGVmaW5lIFpEMTIwMV9SQVRFQjEJMQorI2RlZmluZSBaRDEyMDFfUkFURUIyCTIKKyNkZWZpbmUgWkQxMjAxX1JBVEVCNQk0CS8qIDUuNSByZWFsbHksIGJ1dCA1IGlzIHNob3J0ZXIgOikgKi8KKyNkZWZpbmUgWkQxMjAxX1JBVEVCMTEJOAorCisjZGVmaW5lIFpEMTIwMV9DTkZBVVRIRU5USUNBVElPTl9PUEVOU1lTVEVNCTB4MDAwMQorI2RlZmluZSBaRDEyMDFfQ05GQVVUSEVOVElDQVRJT05fU0hBUkVES0VZCTB4MDAwMgorCisjZW5kaWYgLyogX0lOQ0xVREVfWkQxMjAxX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NjkwNzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZwpAQCAtMCwwICsxLDQ1NSBAQAorIworIyBVU0IgU2VyaWFsIGRldmljZSBjb25maWd1cmF0aW9uCisjCisKK21lbnUgIlVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IhPW4KKworY29uZmlnIFVTQl9TRVJJQUwKKwl0cmlzdGF0ZSAiVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQgorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBVU0IgZGV2aWNlIHRoYXQgcHJvdmlkZXMgbm9ybWFsIHNlcmlhbAorCSAgcG9ydHMsIG9yIGFjdHMgbGlrZSBhIHNlcmlhbCBkZXZpY2UsIGFuZCB5b3Ugd2FudCB0byBjb25uZWN0IGl0IHRvCisJICB5b3VyIFVTQiBidXMuCisKKwkgIFBsZWFzZSByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0PiBmb3IgbW9yZQorCSAgaW5mb3JtYXRpb24gb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgZGlmZmVyZW50IGRldmljZXMgdGhhdCBhcmUKKwkgIHN1cHBvcnRlZCwgYW5kIG9uIGhvdyB0byB1c2UgdGhlbS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNic2VyaWFsLgorCitjb25maWcgVVNCX1NFUklBTF9DT05TT0xFCisJYm9vbCAiVVNCIFNlcmlhbCBDb25zb2xlIGRldmljZSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTD15ICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIElmIHlvdSBzYXkgWSBoZXJlLCBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHVzZSBhIFVTQiB0byBzZXJpYWwKKwkgIGNvbnZlcnRlciBwb3J0IGFzIHRoZSBzeXN0ZW0gY29uc29sZSAodGhlIHN5c3RlbSBjb25zb2xlIGlzIHRoZQorCSAgZGV2aWNlIHdoaWNoIHJlY2VpdmVzIGFsbCBrZXJuZWwgbWVzc2FnZXMgYW5kIHdhcm5pbmdzIGFuZCB3aGljaAorCSAgYWxsb3dzIGxvZ2lucyBpbiBzaW5nbGUgdXNlciBtb2RlKS4gVGhpcyBjb3VsZCBiZSB1c2VmdWwgaWYgc29tZQorCSAgdGVybWluYWwgb3IgcHJpbnRlciBpcyBjb25uZWN0ZWQgdG8gdGhhdCBzZXJpYWwgcG9ydC4KKworCSAgRXZlbiBpZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIGN1cnJlbnRseSB2aXNpYmxlIHZpcnR1YWwgY29uc29sZQorCSAgKC9kZXYvdHR5MCkgd2lsbCBzdGlsbCBiZSB1c2VkIGFzIHRoZSBzeXN0ZW0gY29uc29sZSBieSBkZWZhdWx0LCBidXQKKwkgIHlvdSBjYW4gYWx0ZXIgdGhhdCB1c2luZyBhIGtlcm5lbCBjb21tYW5kIGxpbmUgb3B0aW9uIHN1Y2ggYXMKKwkgICJjb25zb2xlPXR0eVVTQjAiLiAoVHJ5ICJtYW4gYm9vdHBhcmFtIiBvciBzZWUgdGhlIGRvY3VtZW50YXRpb24gb2YKKwkgIHlvdXIgYm9vdCBsb2FkZXIgKGxpbG8gb3IgbG9hZGxpbikgYWJvdXQgaG93IHRvIHBhc3Mgb3B0aW9ucyB0byB0aGUKKwkgIGtlcm5lbCBhdCBib290IHRpbWUuKQorCisJICBJZiB5b3UgZG9uJ3QgaGF2ZSBhIFZHQSBjYXJkIGluc3RhbGxlZCBhbmQgeW91IHNheSBZIGhlcmUsIHRoZQorCSAga2VybmVsIHdpbGwgYXV0b21hdGljYWxseSB1c2UgdGhlIGZpcnN0IFVTQiB0byBzZXJpYWwgY29udmVydGVyCisJICBwb3J0LCAvZGV2L3R0eVVTQjAsIGFzIHN5c3RlbSBjb25zb2xlLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgVVNCX1NFUklBTF9HRU5FUklDCisJYm9vbCAiVVNCIEdlbmVyaWMgU2VyaWFsIERyaXZlciIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgZ2VuZXJpYyBVU0Igc2VyaWFsIGRyaXZlci4gIFBsZWFzZQorCSAgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dD4gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24KKwkgIHVzaW5nIHRoaXMgZHJpdmVyLiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgIlVTQiBTZXJpYWwgY29udmVydGVyCisJICBzdXBwb3J0IiBiZSBjb21waWxlZCBhcyBhIG1vZHVsZSBmb3IgdGhpcyBkcml2ZXIgdG8gYmUgdXNlZAorCSAgcHJvcGVybHkuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0JFTEtJTgorCXRyaXN0YXRlICJVU0IgQmVsa2luIGFuZCBQZXJhY29tIFNpbmdsZSBQb3J0IFNlcmlhbCBEcml2ZXIiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBCZWxraW4gVVNCIFNlcmlhbCBzaW5nbGUgcG9ydAorCSAgYWRhcHRvciAoRjVVMTAzIGlzIG9uZSBvZiB0aGUgbW9kZWwgbnVtYmVycykgb3IgdGhlIFBlcmFjb20gc2luZ2xlCisJICBwb3J0IFVTQiB0byBzZXJpYWwgYWRhcHRlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYmVsa2luX3NhLgorCitjb25maWcgVVNCX1NFUklBTF9XSElURUhFQVQKKwl0cmlzdGF0ZSAiVVNCIENvbm5lY3RUZWNoIFdoaXRlSEVBVCBTZXJpYWwgRHJpdmVyIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTCAmJiBCUk9LRU5fT05fU01QCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBDb25uZWN0VGVjaCBXaGl0ZUhFQVQgNCBwb3J0CisJICBVU0IgdG8gc2VyaWFsIGNvbnZlcnRlciBkZXZpY2UuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHdoaXRlaGVhdC4KKworY29uZmlnIFVTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUCisJdHJpc3RhdGUgIlVTQiBEaWdpIEludGVybmF0aW9uYWwgQWNjZWxlUG9ydCBVU0IgU2VyaWFsIERyaXZlciIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBEaWdpIEFjY2VsZVBvcnQgVVNCIDIgb3IgNCBkZXZpY2VzLAorCSAgMiBwb3J0IChwbHVzIHBhcmFsbGVsIHBvcnQpIGFuZCA0IHBvcnQgVVNCIHNlcmlhbCBjb252ZXJ0ZXJzLiAgVGhlCisJICBwYXJhbGxlbCBwb3J0IG9uIHRoZSBVU0IgMiBhcHBlYXJzIGFzIGEgdGhpcmQgc2VyaWFsIHBvcnQgb24gTGludXguCisJICBUaGUgRGlnaSBBY2NlbGVwb3J0IFVTQiA4IGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLgorCisJICBUaGlzIGRyaXZlciB3b3JrcyB1bmRlciBTTVAgd2l0aCB0aGUgdXNiLXVoY2kgZHJpdmVyLiAgSXQgZG9lcyBub3QKKwkgIHdvcmsgdW5kZXIgU01QIHdpdGggdGhlIHVoY2kgZHJpdmVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBkaWdpX2FjY2VsZXBvcnQuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0NQMjEwMQorCXRyaXN0YXRlICJVU0IgQ1AyMTAxIFVBUlQgQnJpZGdlIENvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgQ1AyMTAxL0NQMjEwMiBiYXNlZCBVU0IgdG8gUlMyMzIKKwkgIGNvbnZlcnRlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3AyMTAxLgorCitjb25maWcgVVNCX1NFUklBTF9DWVBSRVNTX004CisJdHJpc3RhdGUgIlVTQiBDeXByZXNzIE04IFVTQiBTZXJpYWwgRHJpdmVyIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTCAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIGRldmljZSB0aGF0IGNvbnRhaW5zIHRoZSBDeXByZXNzCisJICBVU0IgdG8gU2VyaWFsIG1pY3JvY29udHJvbGxlciwgc3VjaCBhcyB0aGUgRGVMb3JtZSBFYXJ0aG1hdGUgR1BTLgorCisJCUF0dGVtcHRlZCBTTVAgc3VwcG9ydC4uLiBzZW5kIGJ1ZyByZXBvcnRzIQorCisJICBTdXBwb3J0ZWQgbWljcm9jb250cm9sbGVycyBpbiB0aGUgQ1k0NjAxIGZhbWlseSBhcmU6CisJCUNZN0M2Mzc0MSBDWTdDNjM3NDIgQ1k3QzYzNzQzIENZN0M2NDAxMworCQorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3lwcmVzc19tOC4KKworY29uZmlnIFVTQl9TRVJJQUxfRU1QRUcKKwl0cmlzdGF0ZSAiVVNCIEVtcGVnIGVtcGVnLWNhciBNYXJrIEkvSUkgRHJpdmVyIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0byB5b3VyIEVtcGVnIGVtcGVnLWNhciBNYXJrIEkvSUkKKwkgIG1wMyBwbGF5ZXIgdmlhIFVTQi4gIFRoZSBkcml2ZXIgdXNlcyBhIHNpbmdsZSB0dHlVU0J7MCwxLDIsLi4ufQorCSAgZGV2aWNlIG5vZGUuICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQ+IGZvciBtb3JlCisJICB0aWRiaXRzIG9mIGluZm9ybWF0aW9uLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBlbXBlZy4KKworY29uZmlnIFVTQl9TRVJJQUxfRlRESV9TSU8KKwl0cmlzdGF0ZSAiVVNCIEZUREkgU2luZ2xlIFBvcnQgU2VyaWFsIERyaXZlciAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwgJiYgRVhQRVJJTUVOVEFMCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBGVERJIFNJTyBzaW5nbGUgcG9ydCBVU0IgdG8gc2VyaWFsCisJICBjb252ZXJ0ZXIgZGV2aWNlLiBUaGUgaW1wbGVtZW50YXRpb24gSSBoYXZlIGlzIGNhbGxlZCB0aGUgVVNDLTEwMDAuCisJICBUaGlzIGRyaXZlciBoYXMgYWxzbyBiZSB0ZXN0ZWQgd2l0aCB0aGUgMjQ1IGFuZCAyMzIgZGV2aWNlcy4KKworCSAgU2VlIDxodHRwOi8vZnRkaS11c2Itc2lvLnNvdXJjZWZvcmdlLm5ldC8+IGZvciBtb3JlCisJICBpbmZvcm1hdGlvbiBvbiB0aGlzIGRyaXZlciBhbmQgdGhlIGRldmljZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZnRkaV9zaW8uCisKK2NvbmZpZyBVU0JfU0VSSUFMX1ZJU09SCisJdHJpc3RhdGUgIlVTQiBIYW5kc3ByaW5nIFZpc29yIC8gUGFsbSBtNTB4IC8gU29ueSBDbGllIERyaXZlciIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdG8geW91ciBIYW5kU3ByaW5nIFZpc29yLCBQYWxtCisJICBtNTAwIG9yIG01MDUgdGhyb3VnaCBpdHMgVVNCIGRvY2tpbmcgc3RhdGlvbi4gU2VlCisJICA8aHR0cDovL3VzYnZpc29yLnNvdXJjZWZvcmdlLm5ldC8+IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMKKwkgIGRyaXZlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdmlzb3IuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0lQQVEKKwl0cmlzdGF0ZSAiVVNCIFBvY2tldFBDIFBEQSBEcml2ZXIiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHRvIHlvdXIgQ29tcGFxIGlQQVEsIEhQIEpvcm5hZGEKKwkgIG9yIGFueSBvdGhlciBQREEgcnVubmluZyBXaW5kb3dzIENFIDMuMCBvciBQb2NrZXRQQyAyMDAyCisJICB1c2luZyBhIFVTQiBjcmFkbGUvY2FibGUuIEZvciBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUgZHJpdmVyLAorCSAgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dD4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlwYXEuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0lSCisJdHJpc3RhdGUgIlVTQiBJUiBEb25nbGUgU2VyaWFsIERyaXZlciAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc2ltcGxlIHNlcmlhbCBzdXBwb3J0IGZvciBVU0IgSXJEQQorCSAgZGV2aWNlcy4gIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBkbyBub3Qgd2FudCB0byB1c2UgdGhlIGZ1bGwgSXJEQQorCSAgc3RhY2suCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlyLXVzYi4KKworY29uZmlnIFVTQl9TRVJJQUxfRURHRVBPUlQKKwl0cmlzdGF0ZSAiVVNCIEluc2lkZSBPdXQgRWRnZXBvcnQgU2VyaWFsIERyaXZlciIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhbnkgb2YgdGhlIGZvbGxvd2luZyBkZXZpY2VzIGZyb20KKwkgIEluc2lkZSBPdXQgTmV0d29ya3MgKERpZ2kpOgorCSAgRWRnZXBvcnQvNAorCSAgUmFwaWRwb3J0LzQKKwkgIEVkZ2Vwb3J0LzR0CisJICBFZGdlcG9ydC8yCisJICBFZGdlcG9ydC80aQorCSAgRWRnZXBvcnQvMmkKKwkgIEVkZ2Vwb3J0LzQyMQorCSAgRWRnZXBvcnQvMjEKKwkgIEVkZ2Vwb3J0LzgKKwkgIEVkZ2Vwb3J0LzggRHVhbAorCSAgRWRnZXBvcnQvMkQ4CisJICBFZGdlcG9ydC80RDgKKwkgIEVkZ2Vwb3J0LzhpCisJICBFZGdlcG9ydC8yIERJTgorCSAgRWRnZXBvcnQvNCBESU4KKwkgIEVkZ2Vwb3J0LzE2IER1YWwKKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaW9fZWRnZXBvcnQuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0VER0VQT1JUX1RJCisJdHJpc3RhdGUgIlVTQiBJbnNpZGUgT3V0IEVkZ2Vwb3J0IFNlcmlhbCBEcml2ZXIgKFRJIGRldmljZXMpIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGFueSBvZiB0aGUgZGV2aWNlcyBmcm9tIEluc2lkZSBPdXQKKwkgIE5ldHdvcmtzIChEaWdpKSB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBpb19lZGdlcG9ydCBkcml2ZXIuCisJICBUaGlzIGluY2x1ZGVzIHRoZSBFZGdlcG9ydC8xIGRldmljZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaW9fdGkuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0dBUk1JTgorICAgICAgIHRyaXN0YXRlICJVU0IgR2FybWluIEdQUyBkcml2ZXIiCisgICAgICAgZGVwZW5kcyBvbiBVU0JfU0VSSUFMCisgICAgICAgaGVscAorICAgICAgICAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHRvIHlvdXIgR2FybWluIEdQUy4KKyAgICAgICAgIFNob3VsZCB3b3JrIHdpdGggbW9zdCBHYXJtaW4gR1BTIGRldmljZXMgd2hpY2ggaGF2ZSBhIG5hdGl2ZSBVU0IgcG9ydC4KKworICAgICAgICAgU2VlIDxodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dhcm1pbi1ncHM+IGZvciB0aGUgbGF0ZXN0CisgICAgICAgICB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIuCisKKyAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorICAgICAgICAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdhcm1pbl9ncHMuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0lQVworICAgICAgICB0cmlzdGF0ZSAiVVNCIElQV2lyZWxlc3MgKDNHIFVNVFMgVEREKSBEcml2ZXIgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgSVBXaXJlbGVzcyBVU0IgbW9kZW0gc3VjaCBhcworCSAgdGhlIG9uZXMgc3VwcGxpZWQgYnkgQXhpdHkzRy9TZW50ZWNoIFNvdXRoIEFmcmljYS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaXB3LgorCitjb25maWcgVVNCX1NFUklBTF9LRVlTUEFOX1BEQQorCXRyaXN0YXRlICJVU0IgS2V5c3BhbiBQREEgU2luZ2xlIFBvcnQgU2VyaWFsIERyaXZlciIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIEtleXNwYW4gUERBIHNpbmdsZSBwb3J0IFVTQiB0bworCSAgc2VyaWFsIGNvbnZlcnRlciBkZXZpY2UuICBUaGlzIGRyaXZlciBtYWtlcyB1c2Ugb2YgZmlybXdhcmUKKwkgIGRldmVsb3BlZCBmcm9tIHNjcmF0Y2ggYnkgQnJpYW4gV2FybmVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBrZXlzcGFuX3BkYS4KKworY29uZmlnIFVTQl9TRVJJQUxfS0VZU1BBTgorCXRyaXN0YXRlICJVU0IgS2V5c3BhbiBVU0EteHh4IFNlcmlhbCBEcml2ZXIiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgS2V5c3BhbiBVU0IgdG8gc2VyaWFsIGNvbnZlcnRlcgorCSAgZGV2aWNlcy4gIFRoaXMgZHJpdmVyIG1ha2VzIHVzZSBvZiBLZXlzcGFuJ3Mgb2ZmaWNpYWwgZmlybXdhcmUKKwkgIGFuZCB3YXMgZGV2ZWxvcGVkIHdpdGggdGhlaXIgc3VwcG9ydC4gIFlvdSBtdXN0IGFsc28gaW5jbHVkZQorCSAgZmlybXdhcmUgdG8gc3VwcG9ydCB5b3VyIHBhcnRpY3VsYXIgZGV2aWNlKHMpLgorCisJICBTZWUgPGh0dHA6Ly9taXNjLm51L2h1Z2gva2V5c3Bhbi5odG1sPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQga2V5c3Bhbi4KKworY29uZmlnIFVTQl9TRVJJQUxfS0VZU1BBTl9NUFIKKwlib29sICJVU0IgS2V5c3BhbiBNUFIgRmlybXdhcmUiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMX0tFWVNQQU4KKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgZmlybXdhcmUgZm9yIHRoZSBLZXlzcGFuIE1QUiBjb252ZXJ0ZXIuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjgKKwlib29sICJVU0IgS2V5c3BhbiBVU0EtMjggRmlybXdhcmUiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMX0tFWVNQQU4KKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgZmlybXdhcmUgZm9yIHRoZSBVU0EtMjggY29udmVydGVyLgorCitjb25maWcgVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4WAorCWJvb2wgIlVTQiBLZXlzcGFuIFVTQS0yOFggRmlybXdhcmUiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMX0tFWVNQQU4KKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgZmlybXdhcmUgZm9yIHRoZSBVU0EtMjhYIGNvbnZlcnRlci4KKwkgIEJlIHN1cmUgeW91IGhhdmUgYSBVU0EtMjhYLCB0aGVyZSBhcmUgYWxzbyAyOFhBIGFuZCAyOFhCCisJICBtb2RlbHMsIHRoZSBsYWJlbCB1bmRlcm5lYXRoIGhhcyB0aGUgYWN0dWFsIHBhcnQgbnVtYmVyLgorCitjb25maWcgVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4WEEKKwlib29sICJVU0IgS2V5c3BhbiBVU0EtMjhYQSBGaXJtd2FyZSIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUxfS0VZU1BBTgorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBmaXJtd2FyZSBmb3IgdGhlIFVTQS0yOFhBIGNvbnZlcnRlci4KKwkgIEJlIHN1cmUgeW91IGhhdmUgYSBVU0EtMjhYQSwgdGhlcmUgYXJlIGFsc28gMjhYIGFuZCAyOFhCCisJICBtb2RlbHMsIHRoZSBsYWJlbCB1bmRlcm5lYXRoIGhhcyB0aGUgYWN0dWFsIHBhcnQgbnVtYmVyLgorCitjb25maWcgVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4WEIKKwlib29sICJVU0IgS2V5c3BhbiBVU0EtMjhYQiBGaXJtd2FyZSIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUxfS0VZU1BBTgorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBmaXJtd2FyZSBmb3IgdGhlIFVTQS0yOFhCIGNvbnZlcnRlci4KKwkgIEJlIHN1cmUgeW91IGhhdmUgYSBVU0EtMjhYQiwgdGhlcmUgYXJlIGFsc28gMjhYIGFuZCAyOFhBCisJICBtb2RlbHMsIHRoZSBsYWJlbCB1bmRlcm5lYXRoIGhhcyB0aGUgYWN0dWFsIHBhcnQgbnVtYmVyLgorCitjb25maWcgVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5CisJYm9vbCAiVVNCIEtleXNwYW4gVVNBLTE5IEZpcm13YXJlIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTF9LRVlTUEFOCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGZpcm13YXJlIGZvciB0aGUgVVNBLTE5IGNvbnZlcnRlci4KKworY29uZmlnIFVTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOFgKKwlib29sICJVU0IgS2V5c3BhbiBVU0EtMThYIEZpcm13YXJlIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTF9LRVlTUEFOCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGZpcm13YXJlIGZvciB0aGUgVVNBLTE4WCBjb252ZXJ0ZXIuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTlXCisJYm9vbCAiVVNCIEtleXNwYW4gVVNBLTE5VyBGaXJtd2FyZSIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUxfS0VZU1BBTgorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBmaXJtd2FyZSBmb3IgdGhlIFVTQS0xOVcgY29udmVydGVyLgorCitjb25maWcgVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5UVcKKwlib29sICJVU0IgS2V5c3BhbiBVU0EtMTlRVyBGaXJtd2FyZSIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUxfS0VZU1BBTgorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBmaXJtd2FyZSBmb3IgdGhlIFVTQS0xOVFXIGNvbnZlcnRlci4KKworY29uZmlnIFVTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOVFJCisJYm9vbCAiVVNCIEtleXNwYW4gVVNBLTE5UUkgRmlybXdhcmUiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMX0tFWVNQQU4KKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgZmlybXdhcmUgZm9yIHRoZSBVU0EtMTlRSSBjb252ZXJ0ZXIuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0tFWVNQQU5fVVNBNDlXCisJYm9vbCAiVVNCIEtleXNwYW4gVVNBLTQ5VyBGaXJtd2FyZSIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUxfS0VZU1BBTgorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBmaXJtd2FyZSBmb3IgdGhlIFVTQS00OVcgY29udmVydGVyLgorCitjb25maWcgVVNCX1NFUklBTF9LRVlTUEFOX1VTQTQ5V0xDCisJYm9vbCAiVVNCIEtleXNwYW4gVVNBLTQ5V0xDIEZpcm13YXJlIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTF9LRVlTUEFOCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGZpcm13YXJlIGZvciB0aGUgVVNBLTQ5V0xDIGNvbnZlcnRlci4KKworY29uZmlnIFVTQl9TRVJJQUxfS0xTSQorCXRyaXN0YXRlICJVU0IgS0w1S1VTQjEwNSAoUGFsbWNvbm5lY3QpIERyaXZlciAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwgJiYgRVhQRVJJTUVOVEFMCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBLTDVLVVNCMTA1IC0gYmFzZWQgc2luZ2xlIHBvcnQKKwkgIHNlcmlhbCBhZGFwdGVyLiBUaGUgbW9zdCB3aWRlbHkga25vd24gLS0gYW5kIGN1cnJlbnRseSB0aGUgb25seQorCSAgdGVzdGVkIC0tIGRldmljZSBpbiB0aGlzIGNhdGVnb3J5IGlzIHRoZSBQYWxtQ29ubmVjdCBVU0IgU2VyaWFsCisJICBhZGFwdGVyIHNvbGQgYnkgUGFsbSBJbmMuIGZvciB1c2Ugd2l0aCB0aGVpciBQYWxtIElJSSBhbmQgUGFsbSBWCisJICBzZXJpZXMgUERBcy4KKworCSAgUGxlYXNlIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQ+IGZvciBtb3JlCisJICBpbmZvcm1hdGlvbi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQga2w1a3VzYjEwNS4KKworY29uZmlnIFVTQl9TRVJJQUxfS09CSUxfU0NUCisgICAgICAgIHRyaXN0YXRlICJVU0IgS09CSUwgY2hpcGNhcmQgcmVhZGVyIgorICAgICAgICBkZXBlbmRzIG9uIFVTQl9TRVJJQUwKKyAgICAgICAgLS0taGVscC0tLQorICAgICAgICAgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIEtPQklMIFVTQiBjaGlwY2FyZAorICAgICAgICAgIHJlYWRlcnM6CisKKyAgICAgICAgICAgIC0gVVNCIFRXSU4KKyAgICAgICAgICAgIC0gS0FBTiBTdGFuZGFyZCBQbHVzCisgICAgICAgICAgICAtIEtBQU4gU0lNCisgICAgICAgICAgICAtIFNlY09WSUQgUmVhZGVyIFBsdXMKKyAgICAgICAgICAgIC0gQjEgUHJvZmVzc2lvbmFsCisgICAgICAgICAgICAtIEtBQU4gUHJvZmVzc2lvbmFsCisKKyAgICAgICAgICBOb3RlIHRoYXQgeW91IG5lZWQgYSBjdXJyZW50IENULUFQSS4KKyAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBrb2JpbF9zY3QuCisKK2NvbmZpZyBVU0JfU0VSSUFMX01DVF9VMjMyCisJdHJpc3RhdGUgIlVTQiBNQ1QgU2luZ2xlIFBvcnQgU2VyaWFsIERyaXZlciIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIFVTQiBTZXJpYWwgc2luZ2xlIHBvcnQgYWRhcHRlciBmcm9tCisJICBNYWdpYyBDb250cm9sIFRlY2hub2xvZ3kgQ29ycC4gKFUyMzIgaXMgb25lIG9mIHRoZSBtb2RlbCBudW1iZXJzKS4KKworCSAgVGhpcyBkcml2ZXIgYWxzbyB3b3JrcyB3aXRoIFNpdGVjb20gVTIzMi1QMjUgYW5kIEQtTGluayBEVS1IM1NQIFVTQgorCSAgQkFZIGRldmljZXMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1jdF91MjMyLgorCitjb25maWcgVVNCX1NFUklBTF9QTDIzMDMKKwl0cmlzdGF0ZSAiVVNCIFByb2xpZmljIDIzMDMgU2luZ2xlIFBvcnQgU2VyaWFsIERyaXZlciIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgUEwyMzAzIFVTQiBTZXJpYWwgc2luZ2xlIHBvcnQKKwkgIGFkYXB0ZXIgZnJvbSBQcm9saWZpYy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcGwyMzAzLgorCitjb25maWcgVVNCX1NFUklBTF9TQUZFCisJdHJpc3RhdGUgIlVTQiBTYWZlIFNlcmlhbCAoRW5jYXBzdWxhdGVkKSBEcml2ZXIgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMICYmIEVYUEVSSU1FTlRBTAorCitjb25maWcgVVNCX1NFUklBTF9TQUZFX1BBRERFRAorCWJvb2wgIlVTQiBTZWN1cmUgRW5jYXBzdWxhdGVkIERyaXZlciAtIFBhZGRlZCIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUxfU0FGRQorCitjb25maWcgVVNCX1NFUklBTF9USQorCXRyaXN0YXRlICJVU0IgVEkgMzQxMC81MDUyIFNlcmlhbCBEcml2ZXIiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFRJIFVTQiAzNDEwIG9yIDUwNTIKKwkgIHNlcmlhbCBkZXZpY2VzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0aV91c2JfMzQxMF81MDUyLgorCitjb25maWcgVVNCX1NFUklBTF9DWUJFUkpBQ0sKKwl0cmlzdGF0ZSAiVVNCIFJFSU5FUiBTQ1QgY3liZXJKYWNrIHBpbnBhZC9lLWNvbSBjaGlwY2FyZCByZWFkZXIgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgY3liZXJKYWNrIHBpbnBhZC9lLWNvbSBVU0IgY2hpcGNhcmQKKwkgIHJlYWRlci4gVGhpcyBpcyBhbiBpbnRlcmZhY2UgdG8gSVNPIDc4MTYgY29tcGF0aWJsZSBjb250YWN0YmFzZWQKKwkgIGNoaXBjYXJkcywgZS5nLiBHU00gU0lNcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3liZXJqYWNrLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgVVNCX1NFUklBTF9YSVJDT00KKwl0cmlzdGF0ZSAiVVNCIFhpcmNvbSAvIEVudHJlZ3JhIFNpbmdsZSBQb3J0IFNlcmlhbCBEcml2ZXIiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBYaXJjb20gb3IgRW50cmVncmEgc2luZ2xlIHBvcnQgVVNCIHRvCisJICBzZXJpYWwgY29udmVydGVyIGRldmljZS4gIFRoaXMgZHJpdmVyIG1ha2VzIHVzZSBvZiBmaXJtd2FyZQorCSAgZGV2ZWxvcGVkIGZyb20gc2NyYXRjaCBieSBCcmlhbiBXYXJuZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGtleXNwYW5fcGRhLgorCitjb25maWcgVVNCX1NFUklBTF9PTU5JTkVUCisJdHJpc3RhdGUgIlVTQiBaeVhFTCBvbW5pLm5ldCBMQ0QgUGx1cyBEcml2ZXIgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgWnlYRUwgb21uaS5uZXQgTENEIElTRE4gVEEuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG9tbmluZXQuCisKK2NvbmZpZyBVU0JfRVpVU0IKKwlib29sCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMX0tFWVNQQU5fUERBIHx8IFVTQl9TRVJJQUxfWElSQ09NIHx8IFVTQl9TRVJJQUxfS0VZU1BBTiB8fCBVU0JfU0VSSUFMX1dISVRFSEVBVAorCWRlZmF1bHQgeQorCitlbmRtZW51CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTFiODE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlCkBAIC0wLDAgKzEsMzkgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBVU0Igc2VyaWFsIGRldmljZSBkcml2ZXJzLgorIworCisjIE9iamVjdCBmaWxlIGxpc3RzLgorCitvYmotJChDT05GSUdfVVNCX1NFUklBTCkJCQkrPSB1c2JzZXJpYWwubworCit1c2JzZXJpYWwtb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQ09OU09MRSkJKz0gY29uc29sZS5vCit1c2JzZXJpYWwtb2JqLSQoQ09ORklHX1VTQl9FWlVTQikJCSs9IGV6dXNiLm8KKwordXNic2VyaWFsLW9ianMJOj0gdXNiLXNlcmlhbC5vIGdlbmVyaWMubyBidXMubyAkKHVzYnNlcmlhbC1vYmoteSkKKworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOKQkJCSs9IGJlbGtpbl9zYS5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9DUDIxMDEpCQkJKz0gY3AyMTAxLm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSykJCSs9IGN5YmVyamFjay5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004KQkJKz0gY3lwcmVzc19tOC5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQpCSs9IGRpZ2lfYWNjZWxlcG9ydC5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVCkJCSs9IGlvX2VkZ2Vwb3J0Lm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJKQkJKz0gaW9fdGkubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfRU1QRUcpCQkJKz0gZW1wZWcubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU8pCQkrPSBmdGRpX3Npby5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9HQVJNSU4pCQkJKz0gZ2FybWluX2dwcy5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9JUEFRKQkJCSs9IGlwYXEubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfSVBXKQkJCSs9IGlwdy5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9JUikJCQkrPSBpci11c2Iubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTikJCSs9IGtleXNwYW4ubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9QREEpCQkrPSBrZXlzcGFuX3BkYS5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9LTFNJKQkJCSs9IGtsNWt1c2IxMDUubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUKQkJKz0ga29iaWxfc2N0Lm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyKQkJKz0gbWN0X3UyMzIubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCkJCSs9IG9tbmluZXQubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzKQkJCSs9IHBsMjMwMy5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9TQUZFKQkJCSs9IHNhZmVfc2VyaWFsLm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX1RJKQkJCSs9IHRpX3VzYl8zNDEwXzUwNTIubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfVklTT1IpCQkJKz0gdmlzb3Iubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfV0hJVEVIRUFUKQkJKz0gd2hpdGVoZWF0Lm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTSkJCQkrPSBrZXlzcGFuX3BkYS5vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZS1rZXlzcGFuX3BkYV9mdyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZS1rZXlzcGFuX3BkYV9mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjBiYWY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlLWtleXNwYW5fcGRhX2Z3CkBAIC0wLDAgKzEsMTYgQEAKKworIyBzb21lIHJ1bGVzIHRvIGhhbmRsZSB0aGUgcXVpcmtzIG9mIHRoZSAnYXMzMScgYXNzZW1ibGVyLCBsaWtlCisjIGluc2lzdGluZyB1cG9uIGZpeGVkIHN1ZmZpeGVzIGZvciB0aGUgaW5wdXQgYW5kIG91dHB1dCBmaWxlcywKKyMgYW5kIGl0cyBsYWNrIG9mIHByZXByb2Nlc3NvciBzdXBwb3J0CisKK2FsbDoga2V5c3Bhbl9wZGFfZncuaAorCislLmFzbTogJS5TCisJZ2NjIC14IGFzc2VtYmxlci13aXRoLWNwcCAtUCAtRSAtbyAkQCAkPAorCislLmhleDogJS5hc20KKwlhczMxIC1sICQ8CisJbXYgJCoub2JqICRACisKKyVfZncuaDogJS5oZXggZXp1c2JfY29udmVydC5wbAorCXBlcmwgZXp1c2JfY29udmVydC5wbCAkKiA8ICQ8ID4gJEAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Njk5NGQxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5jCkBAIC0wLDAgKzEsNjE0IEBACisvKgorICogQmVsa2luIFVTQiBTZXJpYWwgQWRhcHRlciBEcml2ZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwCQlXaWxsaWFtIEdyZWF0aG91c2UgKHdncmVhdGhvdXNlQHNtdmEuY29tKQorICogIENvcHlyaWdodCAoQykgMjAwMC0yMDAxIAlHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgbGFyZ2VseSBkZXJpdmVkIGZyb20gd29yayBieSB0aGUgbGludXgtdXNiIGdyb3VwCisgKiAgYW5kIGFzc29jaWF0ZWQgc291cmNlIGZpbGVzLiAgUGxlYXNlIHNlZSB0aGUgdXNiL3NlcmlhbCBmaWxlcyBmb3IKKyAqICBpbmRpdmlkdWFsIGNyZWRpdHMgYW5kIGNvcHlyaWdodHMuCisgKiAgCisgKiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIAlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcyBkcml2ZXIKKyAqCisgKiBUT0RPOgorICogLS0gQWRkIHRydWUgbW9kZW0gY29udG9sIGxpbmUgcXVlcnkgY2FwYWJpbGl0eS4gIEN1cnJlbnRseSB3ZSB0cmFjayB0aGUKKyAqICAgIHN0YXRlcyByZXBvcnRlZCBieSB0aGUgaW50ZXJydXB0IGFuZCB0aGUgc3RhdGVzIHdlIHJlcXVlc3QuCisgKiAtLSBBZGQgZXJyb3IgcmVwb3J0aW5nIGJhY2sgdG8gYXBwbGljYXRpb24gZm9yIFVBUlQgZXJyb3IgY29uZGl0aW9ucy4KKyAqICAgIEp1c3QgcG9pbnQgbWUgYXQgaG93IHRvIGltcGxlbWVudCB0aGlzIGFuZCBJJ2xsIGRvIGl0LiBJJ3ZlIHB1dCB0aGUKKyAqICAgIGZyYW1ld29yayBpbiwgYnV0IGhhdmVuJ3QgYW5hbHl6ZWQgdGhlICJ0dHlfZmxpcCIgaW50ZXJmYWNlIHlldC4KKyAqIC0tIEFkZCBzdXBwb3J0IGZvciBmbHVzaCBjb21tYW5kcworICogLS0gQWRkIGV2ZXJ5dGhpbmcgdGhhdCBpcyBtaXNzaW5nIDopCisgKgorICogMjctTm92LTIwMDEgZ2toCisgKiAJY29tcHJlc3NlZCBhbGwgdGhlIGRpZmZlcm5lbnQgZGV2aWNlIGVudHJpZXMgaW50byAxLgorICoKKyAqIDMwLU1heS0yMDAxIGdraAorICoJc3dpdGNoZWQgZnJvbSB1c2luZyBzcGlubG9jayB0byBhIHNlbWFwaG9yZSwgd2hpY2ggZml4ZXMgbG90cyBvZiBwcm9ibGVtcy4KKyAqCisgKiAwOC1BcHItMjAwMSBnYgorICoJLSBJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgorICoKKyAqIDEyLU1hci0yMDAxIGdraAorICoJLSBBZGRlZCBzdXBwb3J0IGZvciB0aGUgR29IdWJzIEdPLUNPTTIzMiBkZXZpY2Ugd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlCisgKgkgIFBlcmFjb20gZGV2aWNlLgorICoKKyAqIDA2LU5vdi0yMDAwIGdraAorICoJLSBBZGRlZCBzdXBwb3J0IGZvciB0aGUgb2xkIEJlbGtpbiBhbmQgUGVyYWNvbSBkZXZpY2VzLgorICoJLSBNYWRlIHRoZSBwb3J0IGFibGUgdG8gYmUgb3BlbmVkIG11bHRpcGxlIHRpbWVzLgorICoJLSBBZGRlZCBzb21lIGRlZmF1bHRzIGluY2FzZSB0aGUgbGluZSBzZXR0aW5ncyBhcmUgdGhpbmdzIHRoZXNlIGRldmljZXMKKyAqCSAgY2FuJ3Qgc3VwcG9ydC4gCisgKgorICogMTgtT2N0LTIwMDAgV2lsbGlhbSBHcmVhdGhvdXNlCisgKiAgICBSZWxlYXNlZCBpbnRvIHRoZSB3aWxkIChsaW51eC11c2ItZGV2ZWwpCisgKgorICogMTctT2N0LTIwMDAgV2lsbGlhbSBHcmVhdGhvdXNlCisgKiAgICBBZGQgY29kZSB0byByZWNvZ25pemUgZmlybXdhcmUgdmVyc2lvbiBhbmQgc2V0IGhhcmR3YXJlIGZsb3cgY29udHJvbAorICogICAgYXBwcm9wcmlhdGVseS4gIEJlbGtpbiBzdGF0ZXMgdGhhdCBmaXJtd2FyZSBwcmlvciB0byAzLjA1IGRvZXMgbm90CisgKiAgICBvcGVyYXRlIGNvcnJlY3RseSBpbiBoYXJkd2FyZSBoYW5kc2hha2UgbW9kZS4gIEkgaGF2ZSB2ZXJpZmllZCB0aGlzCisgKiAgICBvbiBmaXJtd2FyZSAyLjA1IC0tIGZvciBib3RoIFJUUyBhbmQgRFRSIGlucHV0IGZsb3cgY29udHJvbCwgdGhlIGNvbnRyb2wKKyAqICAgIGxpbmUgaXMgbm90IHJlc2V0LiAgVGhlIHRlc3QgcGVyZm9ybWVkIGJ5IHRoZSBCZWxraW4gV2luKiBkcml2ZXIgaXMKKyAqICAgIHRvIGVuYWJsZSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgZm9yIGZpcm13YXJlIDIuMDYgb3IgZ3JlYXRlciBhbmQKKyAqICAgIGZvciAxLjAwIG9yIHByaW9yLiAgSSBhbSBvbmx5IGVuYWJsaW5nIGZvciAyLjA2IG9yIGdyZWF0ZXIuCisgKgorICogMTItT2N0LTIwMDAgV2lsbGlhbSBHcmVhdGhvdXNlCisgKiAgICBGaXJzdCBjdXQgYXQgc3VwcG9ydGluZyBCZWxraW4gVVNCIFNlcmlhbCBBZGFwdGVyIEY1VTEwMworICogICAgSSBkaWQgbm90IGhhdmUgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCB3b3JrIHRvIHN1cHBvcnQgdGhpcworICogICAgYWRhcHRlciwgc28gcGFyZG9uIGFueSBzdHVwaWQgbWlzdGFrZXMuICBBbGwgb2YgdGhlIGluZm9ybWF0aW9uCisgKiAgICBJIGFtIHVzaW5nIHRvIHdyaXRlIHRoaXMgZHJpdmVyIHdhcyBhY3F1aXJlZCBieSB1c2luZyBhIG1vZGlmaWVkCisgKiAgICBVc2JTbm9vcCBvbiBXaW5kb3dzMjAwMCBhbmQgZnJvbSBleGFtaW5pbmcgdGhlIG90aGVyIFVTQiBkcml2ZXJzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKyNpbmNsdWRlICJiZWxraW5fc2EuaCIKKworc3RhdGljIGludCBkZWJ1ZzsKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuMiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiV2lsbGlhbSBHcmVhdGhvdXNlIDx3Z3JlYXRob3VzZUBzbXZhLmNvbT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgQmVsa2luIFNlcmlhbCBjb252ZXJ0ZXIgZHJpdmVyIgorCisvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBhIEJlbGtpbiBVU0IgU2VyaWFsIEFkYXB0ZXIgRjVVMTAzICovCitzdGF0aWMgaW50ICBiZWxraW5fc2Ffc3RhcnR1cAkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIHZvaWQgYmVsa2luX3NhX3NodXRkb3duCQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50ICBiZWxraW5fc2Ffb3BlbgkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIGJlbGtpbl9zYV9jbG9zZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIGJlbGtpbl9zYV9yZWFkX2ludF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBiZWxraW5fc2Ffc2V0X3Rlcm1pb3MJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICogb2xkKTsKK3N0YXRpYyBpbnQgIGJlbGtpbl9zYV9pb2N0bAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIHZvaWQgYmVsa2luX3NhX2JyZWFrX2N0bAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSApOworc3RhdGljIGludCAgYmVsa2luX3NhX3Rpb2NtZ2V0CQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGludCAgYmVsa2luX3NhX3Rpb2Ntc2V0CQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkIFtdID0geworCXsgVVNCX0RFVklDRShCRUxLSU5fU0FfVklELCBCRUxLSU5fU0FfUElEKSB9LAorCXsgVVNCX0RFVklDRShCRUxLSU5fT0xEX1ZJRCwgQkVMS0lOX09MRF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFBFUkFDT01fVklELCBQRVJBQ09NX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoR09IVUJTX1ZJRCwgR09IVUJTX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoR09IVUJTX1ZJRCwgSEFORFlMSU5LX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoQkVMS0lOX0RPQ0tTVEFUSU9OX1ZJRCwgQkVMS0lOX0RPQ0tTVEFUSU9OX1BJRCkgfSwKKwl7IH0JCQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGVfY29tYmluZWQpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYmVsa2luX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiYmVsa2luIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlX2NvbWJpbmVkLAorfTsKKworLyogQWxsIG9mIHRoZSBkZXZpY2UgaW5mbyBuZWVkZWQgZm9yIHRoZSBzZXJpYWwgY29udmVydGVycyAqLworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGJlbGtpbl9kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiQmVsa2luIC8gUGVyYWNvbSAvIEdvSHVicyBVU0IgU2VyaWFsIEFkYXB0ZXIiLAorCS5zaG9ydF9uYW1lID0JCSJiZWxraW4iLAorCS5pZF90YWJsZSA9CQlpZF90YWJsZV9jb21iaW5lZCwKKwkubnVtX2ludGVycnVwdF9pbiA9CTEsCisJLm51bV9idWxrX2luID0JCTEsCisJLm51bV9idWxrX291dCA9CQkxLAorCS5udW1fcG9ydHMgPQkJMSwKKwkub3BlbiA9CQkJYmVsa2luX3NhX29wZW4sCisJLmNsb3NlID0JCWJlbGtpbl9zYV9jbG9zZSwKKwkucmVhZF9pbnRfY2FsbGJhY2sgPQliZWxraW5fc2FfcmVhZF9pbnRfY2FsbGJhY2ssCS8qIEhvdyB3ZSBnZXQgdGhlIHN0YXR1cyBpbmZvICovCisJLmlvY3RsID0JCWJlbGtpbl9zYV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkJYmVsa2luX3NhX3NldF90ZXJtaW9zLAorCS5icmVha19jdGwgPQkJYmVsa2luX3NhX2JyZWFrX2N0bCwKKwkudGlvY21nZXQgPQkJYmVsa2luX3NhX3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9CQliZWxraW5fc2FfdGlvY21zZXQsCisJLmF0dGFjaCA9CQliZWxraW5fc2Ffc3RhcnR1cCwKKwkuc2h1dGRvd24gPQkJYmVsa2luX3NhX3NodXRkb3duLAorfTsKKworCitzdHJ1Y3QgYmVsa2luX3NhX3ByaXZhdGUgeworCXNwaW5sb2NrX3QJCWxvY2s7CisJdW5zaWduZWQgbG9uZwkJY29udHJvbF9zdGF0ZTsKKwl1bnNpZ25lZCBjaGFyCQlsYXN0X2xzcjsKKwl1bnNpZ25lZCBjaGFyCQlsYXN0X21zcjsKKwlpbnQJCQliYWRfZmxvd19jb250cm9sOworfTsKKworCisvKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCZWxraW4gVVNCIFNlcmlhbCBBZGFwdGVyIEY1VTEwMyBzcGVjaWZpYyBkcml2ZXIgZnVuY3Rpb25zCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjZGVmaW5lIFdEUl9USU1FT1VUIDUwMDAgLyogZGVmYXVsdCB1cmIgdGltZW91dCAqLworCisvKiBhc3N1bWVzIHRoYXQgc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCBpcyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgQlNBX1VTQl9DTUQoYyx2KSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksIFwKKwkJCQkJICAgIChjKSwgQkVMS0lOX1NBX1NFVF9SRVFVRVNUX1RZUEUsIFwKKwkJCQkJICAgICh2KSwgMCwgTlVMTCwgMCwgV0RSX1RJTUVPVVQpCisKKy8qIGRvIHNvbWUgc3RhcnR1cCBhbGxvY2F0aW9ucyBub3QgY3VycmVudGx5IHBlcmZvcm1lZCBieSB1c2Jfc2VyaWFsX3Byb2JlKCkgKi8KK3N0YXRpYyBpbnQgYmVsa2luX3NhX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHNlcmlhbC0+ZGV2OworCXN0cnVjdCBiZWxraW5fc2FfcHJpdmF0ZSAqcHJpdjsKKworCS8qIGFsbG9jYXRlIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlICovCisJcHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBiZWxraW5fc2FfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuICgtMSk7IC8qIGVycm9yICovCisJLyogc2V0IGluaXRpYWwgdmFsdWVzIGZvciBjb250cm9sIHN0cnVjdHVyZXMgKi8KKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJcHJpdi0+Y29udHJvbF9zdGF0ZSA9IDA7CisJcHJpdi0+bGFzdF9sc3IgPSAwOworCXByaXYtPmxhc3RfbXNyID0gMDsKKwkvKiBzZWUgY29tbWVudHMgYXQgdG9wIG9mIGZpbGUgKi8KKwlwcml2LT5iYWRfZmxvd19jb250cm9sID0gKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpIDw9IDB4MDIwNikgPyAxIDogMDsKKwlpbmZvKCJiY2REZXZpY2U6ICUwNHgsIGJmYzogJWQiLCBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSwgcHJpdi0+YmFkX2Zsb3dfY29udHJvbCk7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZXJpYWwtPnBvcnRbMF0tPndyaXRlX3dhaXQpOworCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0sIHByaXYpOworCQorCXJldHVybiAoMCk7Cit9CisKKworc3RhdGljIHZvaWQgYmVsa2luX3NhX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBiZWxraW5fc2FfcHJpdmF0ZSAqcHJpdjsKKwlpbnQgaTsKKwkKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBzdG9wIHJlYWRzIGFuZCB3cml0ZXMgb24gYWxsIHBvcnRzICovCisJZm9yIChpPTA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCS8qIE15IHNwZWNpYWwgaXRlbXMsIHRoZSBzdGFuZGFyZCByb3V0aW5lcyBmcmVlIG15IHVyYnMgKi8KKwkJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pOworCQlpZiAocHJpdikKKwkJCWtmcmVlKHByaXYpOworCX0KK30KKworCitzdGF0aWMgaW50ICBiZWxraW5fc2Ffb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IHJldHZhbCA9IDA7CisKKwlkYmcoIiVzIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwkvKlN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlKi8KKwkvKiBUT0RPOiBMb29rIGF0IHBvc3NpYmlsaXR5IG9mIHN1Ym1pdHRpbmcgbXVsdGlwbGUgVVJCcyB0byBkZXZpY2UgdG8KKwkgKiAgICAgICBlbmhhbmNlIGJ1ZmZlcmluZy4gIFdpbiB0cmFjZSBzaG93cyAxNiBpbml0aWFsIHJlYWQgVVJCcy4KKwkgKi8KKwlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXR2YWwpIHsKKwkJZXJyKCJ1c2Jfc3VibWl0X3VyYihyZWFkIGJ1bGspIGZhaWxlZCIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldHZhbCkgeworCQl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworCQllcnIoIiB1c2Jfc3VibWl0X3VyYihyZWFkIGludCkgZmFpbGVkIik7CisJfQorCitleGl0OgorCXJldHVybiByZXR2YWw7Cit9IC8qIGJlbGtpbl9zYV9vcGVuICovCisKKworc3RhdGljIHZvaWQgYmVsa2luX3NhX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlkYmcoIiVzIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiBzaHV0ZG93biBvdXIgYnVsayByZWFkcyBhbmQgd3JpdGVzICovCisJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7Cit9IC8qIGJlbGtpbl9zYV9jbG9zZSAqLworCisKK3N0YXRpYyB2b2lkIGJlbGtpbl9zYV9yZWFkX2ludF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IGJlbGtpbl9zYV9wcml2YXRlICpwcml2OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCisJLyogSGFuZGxlIGtub3duIGludGVycnVwdCBkYXRhICovCisJLyogaWdub3JlIGRhdGFbMF0gYW5kIGRhdGFbMV0gKi8KKworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT5sYXN0X21zciA9IGRhdGFbQkVMS0lOX1NBX01TUl9JTkRFWF07CisJCisJLyogUmVjb3JkIENvbnRyb2wgTGluZSBzdGF0ZXMgKi8KKwlpZiAocHJpdi0+bGFzdF9tc3IgJiBCRUxLSU5fU0FfTVNSX0RTUikKKwkJcHJpdi0+Y29udHJvbF9zdGF0ZSB8PSBUSU9DTV9EU1I7CisJZWxzZQorCQlwcml2LT5jb250cm9sX3N0YXRlICY9IH5USU9DTV9EU1I7CisKKwlpZiAocHJpdi0+bGFzdF9tc3IgJiBCRUxLSU5fU0FfTVNSX0NUUykKKwkJcHJpdi0+Y29udHJvbF9zdGF0ZSB8PSBUSU9DTV9DVFM7CisJZWxzZQorCQlwcml2LT5jb250cm9sX3N0YXRlICY9IH5USU9DTV9DVFM7CisKKwlpZiAocHJpdi0+bGFzdF9tc3IgJiBCRUxLSU5fU0FfTVNSX1JJKQorCQlwcml2LT5jb250cm9sX3N0YXRlIHw9IFRJT0NNX1JJOworCWVsc2UKKwkJcHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+VElPQ01fUkk7CisKKwlpZiAocHJpdi0+bGFzdF9tc3IgJiBCRUxLSU5fU0FfTVNSX0NEKQorCQlwcml2LT5jb250cm9sX3N0YXRlIHw9IFRJT0NNX0NEOworCWVsc2UKKwkJcHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+VElPQ01fQ0Q7CisKKwkvKiBOb3cgdG8gcmVwb3J0IGFueSBlcnJvcnMgKi8KKwlwcml2LT5sYXN0X2xzciA9IGRhdGFbQkVMS0lOX1NBX0xTUl9JTkRFWF07CisjaWYgMAorCS8qCisJICogZmlsbCBpbiB0aGUgZmxpcCBidWZmZXIgaGVyZSwgYnV0IEkgZG8gbm90IGtub3cgdGhlIHJlbGF0aW9uCisJICogdG8gdGhlIGN1cnJlbnQvbmV4dCByZWNlaXZlIGJ1ZmZlciBvciBjaGFyYWN0ZXJzLiAgSSBuZWVkCisJICogdG8gbG9vayBpbiB0byB0aGlzIGJlZm9yZSBjb21taXR0aW5nIGFueSBjb2RlLgorCSAqLworCWlmIChwcml2LT5sYXN0X2xzciAmIEJFTEtJTl9TQV9MU1JfRVJSKSB7CisJCXR0eSA9IHBvcnQtPnR0eTsKKwkJLyogT3ZlcnJ1biBFcnJvciAqLworCQlpZiAocHJpdi0+bGFzdF9sc3IgJiBCRUxLSU5fU0FfTFNSX09FKSB7CisJCX0KKwkJLyogUGFyaXR5IEVycm9yICovCisJCWlmIChwcml2LT5sYXN0X2xzciAmIEJFTEtJTl9TQV9MU1JfUEUpIHsKKwkJfQorCQkvKiBGcmFtaW5nIEVycm9yICovCisJCWlmIChwcml2LT5sYXN0X2xzciAmIEJFTEtJTl9TQV9MU1JfRkUpIHsKKwkJfQorCQkvKiBCcmVhayBJbmRpY2F0b3IgKi8KKwkJaWYgKHByaXYtPmxhc3RfbHNyICYgQkVMS0lOX1NBX0xTUl9CSSkgeworCQl9CisJfQorI2VuZGlmCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworZXhpdDoKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0dmFsKQorCQllcnIgKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCisJCSAgICAgX19GVU5DVElPTl9fLCByZXR2YWwpOworfQorCitzdGF0aWMgdm9pZCBiZWxraW5fc2Ffc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCBiZWxraW5fc2FfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBpbnQgaWZsYWc7CisJdW5zaWduZWQgaW50IGNmbGFnOworCXVuc2lnbmVkIGludCBvbGRfaWZsYWcgPSAwOworCXVuc2lnbmVkIGludCBvbGRfY2ZsYWcgPSAwOworCV9fdTE2IHVyYl92YWx1ZSA9IDA7IC8qIFdpbGwgaG9sZCB0aGUgbmV3IGZsYWdzICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGNvbnRyb2xfc3RhdGU7CisJaW50IGJhZF9mbG93X2NvbnRyb2w7CisJCisJaWYgKCghcG9ydC0+dHR5KSB8fCAoIXBvcnQtPnR0eS0+dGVybWlvcykpIHsKKwkJZGJnICgiJXMgLSBubyB0dHkgb3IgdGVybWlvcyBzdHJ1Y3R1cmUiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJaWZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfaWZsYWc7CisJY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisKKwkvKiBnZXQgYSBsb2NhbCBjb3B5IG9mIHRoZSBjdXJyZW50IHBvcnQgc2V0dGluZ3MgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWNvbnRyb2xfc3RhdGUgPSBwcml2LT5jb250cm9sX3N0YXRlOworCWJhZF9mbG93X2NvbnRyb2wgPSBwcml2LT5iYWRfZmxvd19jb250cm9sOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkKKwkvKiBjaGVjayB0aGF0IHRoZXkgcmVhbGx5IHdhbnQgdXMgdG8gY2hhbmdlIHNvbWV0aGluZyAqLworCWlmIChvbGRfdGVybWlvcykgeworCQlpZiAoKGNmbGFnID09IG9sZF90ZXJtaW9zLT5jX2NmbGFnKSAmJgorCQkgICAgKFJFTEVWQU5UX0lGTEFHKHBvcnQtPnR0eS0+dGVybWlvcy0+Y19pZmxhZykgPT0gUkVMRVZBTlRfSUZMQUcob2xkX3Rlcm1pb3MtPmNfaWZsYWcpKSkgeworCQkJZGJnKCIlcyAtIG5vdGhpbmcgdG8gY2hhbmdlLi4uIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybjsKKwkJfQorCQlvbGRfaWZsYWcgPSBvbGRfdGVybWlvcy0+Y19pZmxhZzsKKwkJb2xkX2NmbGFnID0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWc7CisJfQorCisJLyogU2V0IHRoZSBiYXVkIHJhdGUgKi8KKwlpZiggKGNmbGFnJkNCQVVEKSAhPSAob2xkX2NmbGFnJkNCQVVEKSApIHsKKwkJLyogcmVhc3NlcnQgRFRSIGFuZCAobWF5YmUpIFJUUyBvbiB0cmFuc2l0aW9uIGZyb20gQjAgKi8KKwkJaWYoIChvbGRfY2ZsYWcmQ0JBVUQpID09IEIwICkgeworCQkJY29udHJvbF9zdGF0ZSB8PSAoVElPQ01fRFRSfFRJT0NNX1JUUyk7CisJCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9EVFJfUkVRVUVTVCwgMSkgPCAwKQorCQkJCWVycigiU2V0IERUUiBlcnJvciIpOworCQkJLyogZG9uJ3Qgc2V0IFJUUyBpZiB1c2luZyBoYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8KKwkJCWlmICghKG9sZF9jZmxhZyZDUlRTQ1RTKSApCisJCQkJaWYgKEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfUlRTX1JFUVVFU1QsIDEpIDwgMCkKKwkJCQkJZXJyKCJTZXQgUlRTIGVycm9yIik7CisJCX0KKworCQlzd2l0Y2goY2ZsYWcgJiBDQkFVRCkgeworCQkJY2FzZSBCMDogLyogaGFuZGxlZCBiZWxvdyAqLyBicmVhazsKKwkJCWNhc2UgQjMwMDogdXJiX3ZhbHVlID0gQkVMS0lOX1NBX0JBVUQoMzAwKTsgYnJlYWs7CisJCQljYXNlIEI2MDA6IHVyYl92YWx1ZSA9IEJFTEtJTl9TQV9CQVVEKDYwMCk7IGJyZWFrOworCQkJY2FzZSBCMTIwMDogdXJiX3ZhbHVlID0gQkVMS0lOX1NBX0JBVUQoMTIwMCk7IGJyZWFrOworCQkJY2FzZSBCMjQwMDogdXJiX3ZhbHVlID0gQkVMS0lOX1NBX0JBVUQoMjQwMCk7IGJyZWFrOworCQkJY2FzZSBCNDgwMDogdXJiX3ZhbHVlID0gQkVMS0lOX1NBX0JBVUQoNDgwMCk7IGJyZWFrOworCQkJY2FzZSBCOTYwMDogdXJiX3ZhbHVlID0gQkVMS0lOX1NBX0JBVUQoOTYwMCk7IGJyZWFrOworCQkJY2FzZSBCMTkyMDA6IHVyYl92YWx1ZSA9IEJFTEtJTl9TQV9CQVVEKDE5MjAwKTsgYnJlYWs7CisJCQljYXNlIEIzODQwMDogdXJiX3ZhbHVlID0gQkVMS0lOX1NBX0JBVUQoMzg0MDApOyBicmVhazsKKwkJCWNhc2UgQjU3NjAwOiB1cmJfdmFsdWUgPSBCRUxLSU5fU0FfQkFVRCg1NzYwMCk7IGJyZWFrOworCQkJY2FzZSBCMTE1MjAwOiB1cmJfdmFsdWUgPSBCRUxLSU5fU0FfQkFVRCgxMTUyMDApOyBicmVhazsKKwkJCWNhc2UgQjIzMDQwMDogdXJiX3ZhbHVlID0gQkVMS0lOX1NBX0JBVUQoMjMwNDAwKTsgYnJlYWs7CisJCQlkZWZhdWx0OiBlcnIoIkJFTEtJTiBVU0IgU2VyaWFsIEFkYXB0ZXI6IHVuc3VwcG9ydGVkIGJhdWRyYXRlIHJlcXVlc3QsIHVzaW5nIGRlZmF1bHQgb2YgOTYwMCIpOworCQkJCXVyYl92YWx1ZSA9IEJFTEtJTl9TQV9CQVVEKDk2MDApOyBicmVhazsKKwkJfQorCQlpZiAoKGNmbGFnICYgQ0JBVUQpICE9IEIwICkgeworCQkJaWYgKEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfQkFVRFJBVEVfUkVRVUVTVCwgdXJiX3ZhbHVlKSA8IDApCisJCQkJZXJyKCJTZXQgYmF1ZHJhdGUgZXJyb3IiKTsKKwkJfSBlbHNlIHsKKwkJCS8qIERpc2FibGUgZmxvdyBjb250cm9sICovCisJCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9GTE9XX0NUUkxfUkVRVUVTVCwgQkVMS0lOX1NBX0ZMT1dfTk9ORSkgPCAwKQorCQkJCWVycigiRGlzYWJsZSBmbG93Y29udHJvbCBlcnJvciIpOworCisJCQkvKiBEcm9wIFJUUyBhbmQgRFRSICovCisJCQljb250cm9sX3N0YXRlICY9IH4oVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKKwkJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0RUUl9SRVFVRVNULCAwKSA8IDApCisJCQkJZXJyKCJEVFIgTE9XIGVycm9yIik7CisJCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9SVFNfUkVRVUVTVCwgMCkgPCAwKQorCQkJCWVycigiUlRTIExPVyBlcnJvciIpOworCQl9CisJfQorCisJLyogc2V0IHRoZSBwYXJpdHkgKi8KKwlpZiggKGNmbGFnJihQQVJFTkJ8UEFST0REKSkgIT0gKG9sZF9jZmxhZyYoUEFSRU5CfFBBUk9ERCkpICkgeworCQlpZiAoY2ZsYWcgJiBQQVJFTkIpCisJCQl1cmJfdmFsdWUgPSAoY2ZsYWcgJiBQQVJPREQpID8gIEJFTEtJTl9TQV9QQVJJVFlfT0REIDogQkVMS0lOX1NBX1BBUklUWV9FVkVOOworCQllbHNlCisJCQl1cmJfdmFsdWUgPSBCRUxLSU5fU0FfUEFSSVRZX05PTkU7CisJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX1BBUklUWV9SRVFVRVNULCB1cmJfdmFsdWUpIDwgMCkKKwkJCWVycigiU2V0IHBhcml0eSBlcnJvciIpOworCX0KKworCS8qIHNldCB0aGUgbnVtYmVyIG9mIGRhdGEgYml0cyAqLworCWlmKCAoY2ZsYWcmQ1NJWkUpICE9IChvbGRfY2ZsYWcmQ1NJWkUpICkgeworCQlzd2l0Y2ggKGNmbGFnICYgQ1NJWkUpIHsKKwkJCWNhc2UgQ1M1OiB1cmJfdmFsdWUgPSBCRUxLSU5fU0FfREFUQV9CSVRTKDUpOyBicmVhazsKKwkJCWNhc2UgQ1M2OiB1cmJfdmFsdWUgPSBCRUxLSU5fU0FfREFUQV9CSVRTKDYpOyBicmVhazsKKwkJCWNhc2UgQ1M3OiB1cmJfdmFsdWUgPSBCRUxLSU5fU0FfREFUQV9CSVRTKDcpOyBicmVhazsKKwkJCWNhc2UgQ1M4OiB1cmJfdmFsdWUgPSBCRUxLSU5fU0FfREFUQV9CSVRTKDgpOyBicmVhazsKKwkJCWRlZmF1bHQ6IGVycigiQ1NJWkUgd2FzIG5vdCBDUzUtQ1M4LCB1c2luZyBkZWZhdWx0IG9mIDgiKTsKKwkJCQl1cmJfdmFsdWUgPSBCRUxLSU5fU0FfREFUQV9CSVRTKDgpOworCQkJCWJyZWFrOworCQl9CisJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0RBVEFfQklUU19SRVFVRVNULCB1cmJfdmFsdWUpIDwgMCkKKwkJCWVycigiU2V0IGRhdGEgYml0cyBlcnJvciIpOworCX0KKworCS8qIHNldCB0aGUgbnVtYmVyIG9mIHN0b3AgYml0cyAqLworCWlmKCAoY2ZsYWcmQ1NUT1BCKSAhPSAob2xkX2NmbGFnJkNTVE9QQikgKSB7CisJCXVyYl92YWx1ZSA9IChjZmxhZyAmIENTVE9QQikgPyBCRUxLSU5fU0FfU1RPUF9CSVRTKDIpIDogQkVMS0lOX1NBX1NUT1BfQklUUygxKTsKKwkJaWYgKEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfU1RPUF9CSVRTX1JFUVVFU1QsIHVyYl92YWx1ZSkgPCAwKQorCQkJZXJyKCJTZXQgc3RvcCBiaXRzIGVycm9yIik7CisJfQorCisJLyogU2V0IGZsb3cgY29udHJvbCAqLworCWlmKCAoaWZsYWcmSVhPRkYpICAgIT0gKG9sZF9pZmxhZyZJWE9GRikKKwl8fAkoaWZsYWcmSVhPTikgICAgIT0gKG9sZF9pZmxhZyZJWE9OKQorCXx8ICAoY2ZsYWcmQ1JUU0NUUykgIT0gKG9sZF9jZmxhZyZDUlRTQ1RTKSApIHsKKwkJdXJiX3ZhbHVlID0gMDsKKwkJaWYgKChpZmxhZyAmIElYT0ZGKSB8fCAoaWZsYWcgJiBJWE9OKSkKKwkJCXVyYl92YWx1ZSB8PSAoQkVMS0lOX1NBX0ZMT1dfT1hPTiB8IEJFTEtJTl9TQV9GTE9XX0lYT04pOworCQllbHNlCisJCQl1cmJfdmFsdWUgJj0gfihCRUxLSU5fU0FfRkxPV19PWE9OIHwgQkVMS0lOX1NBX0ZMT1dfSVhPTik7CisKKwkJaWYgKGNmbGFnICYgQ1JUU0NUUykKKwkJCXVyYl92YWx1ZSB8PSAgKEJFTEtJTl9TQV9GTE9XX09DVFMgfCBCRUxLSU5fU0FfRkxPV19JUlRTKTsKKwkJZWxzZQorCQkJdXJiX3ZhbHVlICY9IH4oQkVMS0lOX1NBX0ZMT1dfT0NUUyB8IEJFTEtJTl9TQV9GTE9XX0lSVFMpOworCisJCWlmIChiYWRfZmxvd19jb250cm9sKQorCQkJdXJiX3ZhbHVlICY9IH4oQkVMS0lOX1NBX0ZMT1dfSVJUUyk7CisKKwkJaWYgKEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfRkxPV19DVFJMX1JFUVVFU1QsIHVyYl92YWx1ZSkgPCAwKQorCQkJZXJyKCJTZXQgZmxvdyBjb250cm9sIGVycm9yIik7CisJfQorCisJLyogc2F2ZSBvZmYgdGhlIG1vZGlmaWVkIHBvcnQgc2V0dGluZ3MgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPmNvbnRyb2xfc3RhdGUgPSBjb250cm9sX3N0YXRlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKK30gLyogYmVsa2luX3NhX3NldF90ZXJtaW9zICovCisKKworc3RhdGljIHZvaWQgYmVsa2luX3NhX2JyZWFrX2N0bCggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlICkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCisJaWYgKEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfQlJFQUtfUkVRVUVTVCwgYnJlYWtfc3RhdGUgPyAxIDogMCkgPCAwKQorCQllcnIoIlNldCBicmVha19jdGwgJWQiLCBicmVha19zdGF0ZSk7Cit9CisKKworc3RhdGljIGludCBiZWxraW5fc2FfdGlvY21nZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBiZWxraW5fc2FfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGNvbnRyb2xfc3RhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJY29udHJvbF9zdGF0ZSA9IHByaXYtPmNvbnRyb2xfc3RhdGU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGNvbnRyb2xfc3RhdGU7Cit9CisKKworc3RhdGljIGludCBiZWxraW5fc2FfdGlvY21zZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCBiZWxraW5fc2FfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGNvbnRyb2xfc3RhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsOworCWludCBydHMgPSAwOworCWludCBkdHIgPSAwOworCQorCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwljb250cm9sX3N0YXRlID0gcHJpdi0+Y29udHJvbF9zdGF0ZTsKKworCWlmIChzZXQgJiBUSU9DTV9SVFMpIHsKKwkJY29udHJvbF9zdGF0ZSB8PSBUSU9DTV9SVFM7CisJCXJ0cyA9IDE7CisJfQorCWlmIChzZXQgJiBUSU9DTV9EVFIpIHsKKwkJY29udHJvbF9zdGF0ZSB8PSBUSU9DTV9EVFI7CisJCWR0ciA9IDE7CisJfQorCWlmIChjbGVhciAmIFRJT0NNX1JUUykgeworCQljb250cm9sX3N0YXRlICY9IH5USU9DTV9SVFM7CisJCXJ0cyA9IDA7CisJfQorCWlmIChjbGVhciAmIFRJT0NNX0RUUikgeworCQljb250cm9sX3N0YXRlICY9IH5USU9DTV9EVFI7CisJCWR0ciA9IDA7CisJfQorCisJcHJpdi0+Y29udHJvbF9zdGF0ZSA9IGNvbnRyb2xfc3RhdGU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcmV0dmFsID0gQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9SVFNfUkVRVUVTVCwgcnRzKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQllcnIoIlNldCBSVFMgZXJyb3IgJWQiLCByZXR2YWwpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcmV0dmFsID0gQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9EVFJfUkVRVUVTVCwgZHRyKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQllcnIoIlNldCBEVFIgZXJyb3IgJWQiLCByZXR2YWwpOworCQlnb3RvIGV4aXQ7CisJfQorZXhpdDoKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyBpbnQgYmVsa2luX3NhX2lvY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBUSU9DTUlXQUlUOgorCQkvKiB3YWl0IGZvciBhbnkgb2YgdGhlIDQgbW9kZW0gaW5wdXRzIChEQ0QsUkksRFNSLENUUykqLworCQkvKiBUT0RPICovCisJCXJldHVybiggMCApOworCisJY2FzZSBUSU9DR0lDT1VOVDoKKwkJLyogcmV0dXJuIGNvdW50IG9mIG1vZGVtbGluZSB0cmFuc2l0aW9ucyAqLworCQkvKiBUT0RPICovCisJCXJldHVybiAwOworCisJZGVmYXVsdDoKKwkJZGJnKCJiZWxraW5fc2FfaW9jdGwgYXJnIG5vdCBzdXBwb3J0ZWQgLSAweCUwNHgiLGNtZCk7CisJCXJldHVybigtRU5PSU9DVExDTUQpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9IC8qIGJlbGtpbl9zYV9pb2N0bCAqLworCisKK3N0YXRpYyBpbnQgX19pbml0IGJlbGtpbl9zYV9pbml0ICh2b2lkKQoreworCWludCByZXR2YWw7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmYmVsa2luX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmJlbGtpbl9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKKwlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIDA7CitmYWlsZWRfdXNiX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmYmVsa2luX2RldmljZSk7CitmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjoKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBiZWxraW5fc2FfZXhpdCAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlciAoJmJlbGtpbl9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmJlbGtpbl9kZXZpY2UpOworfQorCisKK21vZHVsZV9pbml0IChiZWxraW5fc2FfaW5pdCk7Cittb2R1bGVfZXhpdCAoYmVsa2luX3NhX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfVkVSU0lPTiggRFJJVkVSX1ZFUlNJT04gKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTE2YjkyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogRGVmaW5pdGlvbnMgZm9yIEJlbGtpbiBVU0IgU2VyaWFsIEFkYXB0ZXIgRHJpdmVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMAorICogICAgICBXaWxsaWFtIEdyZWF0aG91c2UgKHdncmVhdGhvdXNlQHNtdmEuY29tKQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgbGFyZ2VseSBkZXJpdmVkIGZyb20gd29yayBieSB0aGUgbGludXgtdXNiIGdyb3VwCisgKiAgYW5kIGFzc29jaWF0ZWQgc291cmNlIGZpbGVzLiAgUGxlYXNlIHNlZSB0aGUgdXNiL3NlcmlhbCBmaWxlcyBmb3IKKyAqICBpbmRpdmlkdWFsIGNyZWRpdHMgYW5kIGNvcHlyaWdodHMuCisgKiAgCisgKiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIAlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcyBkcml2ZXIKKyAqCisgKiAxMi1NYXItMjAwMSBna2gKKyAqCUFkZGVkIEdvSHVicyBHTy1DT00yMzIgZGV2aWNlIGlkLgorICoKKyAqIDA2LU5vdi0yMDAwIGdraAorICoJQWRkZWQgb2xkIEJlbGtpbiBhbmQgUGVyYWNvbSBkZXZpY2UgaWRzLCB3aGljaCB0aGlzIGRyaXZlciBzdXBwb3J0cworICoKKyAqIDEyLU9jdC0yMDAwIFdpbGxpYW0gR3JlYXRob3VzZQorICogICAgRmlyc3QgY3V0IGF0IHN1cHBvcnRpbmcgQmVsa2luIFVTQiBTZXJpYWwgQWRhcHRlciBGNVUxMDMKKyAqICAgIEkgZGlkIG5vdCBoYXZlIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgd29yayB0byBzdXBwb3J0IHRoaXMKKyAqICAgIGFkYXB0ZXIsIHNvIHBhcmRvbiBhbnkgc3R1cGlkIG1pc3Rha2VzLiAgQWxsIG9mIHRoZSBpbmZvcm1hdGlvbgorICogICAgSSBhbSB1c2luZyB0byB3cml0ZSB0aGlzIGRyaXZlciB3YXMgYWNxdWlyZWQgYnkgdXNpbmcgYSBtb2RpZmllZAorICogICAgVXNiU25vb3Agb24gV2luZG93czIwMDAuCisgKiAgICAKKyAqLworCisjaWZuZGVmIF9fTElOVVhfVVNCX1NFUklBTF9CU0FfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9TRVJJQUxfQlNBX0gKKworI2RlZmluZSBCRUxLSU5fRE9DS1NUQVRJT05fVklECTB4MDUwZAkvKiBWZW5kb3IgSWQgKi8KKyNkZWZpbmUgQkVMS0lOX0RPQ0tTVEFUSU9OX1BJRAkweDEyMDMJLyogUHJvZHVjdCBJZCAqLworCisjZGVmaW5lIEJFTEtJTl9TQV9WSUQJMHgwNTBkCS8qIFZlbmRvciBJZCAqLworI2RlZmluZSBCRUxLSU5fU0FfUElECTB4MDEwMwkvKiBQcm9kdWN0IElkICovCisKKyNkZWZpbmUgQkVMS0lOX09MRF9WSUQJMHgwNTZjCS8qIEJlbGtpbidzICJvbGQiIHZlbmRvciBpZCAqLworI2RlZmluZSBCRUxLSU5fT0xEX1BJRAkweDgwMDcJLyogQmVsa2luJ3MgIm9sZCIgc2luZ2xlIHBvcnQgc2VyaWFsIGNvbnZlcnRlcidzIGlkICovCisKKyNkZWZpbmUgUEVSQUNPTV9WSUQJMHgwNTY1CS8qIFBlcmFjb20ncyB2ZW5kb3IgaWQgKi8KKyNkZWZpbmUgUEVSQUNPTV9QSUQJMHgwMDAxCS8qIFBlcmFjb20ncyBzaW5nbGUgcG9ydCBzZXJpYWwgY29udmVydGVyJ3MgaWQgKi8KKworI2RlZmluZSBHT0hVQlNfVklECTB4MDkyMQkvKiBHb0h1YnMgdmVuZG9yIGlkICovCisjZGVmaW5lIEdPSFVCU19QSUQJMHgxMDAwCS8qIEdvSHVicyBzaW5nbGUgcG9ydCBzZXJpYWwgY29udmVydGVyJ3MgaWQgKGlkZW50aWNhbCB0byB0aGUgUGVyYWNvbSBkZXZpY2UpICovCisjZGVmaW5lIEhBTkRZTElOS19QSUQJMHgxMjAwCS8qIEhhbmR5TGluayBVU0IncyBpZCAoaWRlbnRpY2FsIHRvIHRoZSBQZXJhY29tIGRldmljZSkgKi8KKworLyogVmVuZG9yIFJlcXVlc3QgSW50ZXJmYWNlICovCisjZGVmaW5lIEJFTEtJTl9TQV9TRVRfQkFVRFJBVEVfUkVRVUVTVAkwICAvKiBTZXQgYmF1ZCByYXRlICovCisjZGVmaW5lIEJFTEtJTl9TQV9TRVRfU1RPUF9CSVRTX1JFUVVFU1QJMSAgLyogU2V0IHN0b3AgYml0cyAoMSwyKSAqLworI2RlZmluZSBCRUxLSU5fU0FfU0VUX0RBVEFfQklUU19SRVFVRVNUCTIgIC8qIFNldCBkYXRhIGJpdHMgKDUsNiw3LDgpICovCisjZGVmaW5lIEJFTEtJTl9TQV9TRVRfUEFSSVRZX1JFUVVFU1QJMyAgLyogU2V0IHBhcml0eSAoTm9uZSwgRXZlbiwgT2RkKSAqLworCisjZGVmaW5lIEJFTEtJTl9TQV9TRVRfRFRSX1JFUVVFU1QJMTAgLyogU2V0IERUUiBzdGF0ZSAqLworI2RlZmluZSBCRUxLSU5fU0FfU0VUX1JUU19SRVFVRVNUCTExIC8qIFNldCBSVFMgc3RhdGUgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX1NFVF9CUkVBS19SRVFVRVNUCTEyIC8qIFNldCBCUkVBSyBzdGF0ZSAqLworCisjZGVmaW5lIEJFTEtJTl9TQV9TRVRfRkxPV19DVFJMX1JFUVVFU1QJMTYgLyogU2V0IGZsb3cgY29udHJvbCBtb2RlICovCisKKworI2lmZGVmIFdIRU5fSV9MRUFSTl9USElTCisjZGVmaW5lIEJFTEtJTl9TQV9TRVRfTUFHSUNfUkVRVUVTVAkxNyAvKiBJIGRvbid0IGtub3csIHBvc3NpYmx5IGZsdXNoICovCisJCQkJCSAgIC8qIChhbHdheXMgaW4gV2luaW5pdCBzZXF1ZW5jZSBiZWZvcmUgZmxvdyBjb250cm9sKSAqLworI2RlZmluZSBCRUxLSU5fU0FfUkVTRVQgCQl4eCAvKiBSZXNldCB0aGUgcG9ydCAqLworI2RlZmluZSBCRUxLSU5fU0FfR0VUX01PREVNX1NUQVRVUwl4eCAvKiBGb3JjZSByZXR1cm4gb2YgbW9kZW0gc3RhdHVzIHJlZ2lzdGVyICovCisjZW5kaWYKKworI2RlZmluZSBCRUxLSU5fU0FfU0VUX1JFUVVFU1RfVFlQRQkweDQwCisKKyNkZWZpbmUgQkVMS0lOX1NBX0JBVUQoYikJCSgyMzA0MDAvYikKKworI2RlZmluZSBCRUxLSU5fU0FfU1RPUF9CSVRTKGIpCQkoYi0xKQorCisjZGVmaW5lIEJFTEtJTl9TQV9EQVRBX0JJVFMoYikJCShiLTUpCisKKyNkZWZpbmUgQkVMS0lOX1NBX1BBUklUWV9OT05FCQkwCisjZGVmaW5lIEJFTEtJTl9TQV9QQVJJVFlfRVZFTgkJMQorI2RlZmluZSBCRUxLSU5fU0FfUEFSSVRZX09ERAkJMgorI2RlZmluZSBCRUxLSU5fU0FfUEFSSVRZX01BUksJCTMKKyNkZWZpbmUgQkVMS0lOX1NBX1BBUklUWV9TUEFDRQkJNAorCisjZGVmaW5lIEJFTEtJTl9TQV9GTE9XX05PTkUJCTB4MDAwMAkvKiBObyBmbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX0ZMT1dfT0NUUwkJMHgwMDAxCS8qIHVzZSBDVFMgaW5wdXQgdG8gdGhyb3R0bGUgb3V0cHV0ICovCisjZGVmaW5lIEJFTEtJTl9TQV9GTE9XX09EU1IJCTB4MDAwMgkvKiB1c2UgRFNSIGlucHV0IHRvIHRocm90dGxlIG91dHB1dCAqLworI2RlZmluZSBCRUxLSU5fU0FfRkxPV19JRFNSCQkweDAwMDQJLyogdXNlIERTUiBpbnB1dCB0byBlbmFibGUgcmVjZWl2ZSAqLworI2RlZmluZSBCRUxLSU5fU0FfRkxPV19JRFRSCQkweDAwMDgJLyogdXNlIERUUiBvdXRwdXQgZm9yIGlucHV0IGZsb3cgY29udHJvbCAqLworI2RlZmluZSBCRUxLSU5fU0FfRkxPV19JUlRTCQkweDAwMTAJLyogdXNlIFJUUyBvdXRwdXQgZm9yIGlucHV0IGZsb3cgY29udHJvbCAqLworI2RlZmluZSBCRUxLSU5fU0FfRkxPV19PUlRTCQkweDAwMjAJLyogdXNlIFJUUyB0byBpbmRpY2F0ZSBkYXRhIGF2YWlsYWJsZSB0byBzZW5kICovCisjZGVmaW5lIEJFTEtJTl9TQV9GTE9XX0VSUlNVQgkJMHgwMDQwCS8qID8/Pz8gZ3Vlc3MgPz8/PyBzdWJzdGl0dXRlIGlubGluZSBlcnJvcnMgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX0ZMT1dfT1hPTgkJMHgwMDgwCS8qIHVzZSBYT04vWE9GRiBmb3Igb3V0cHV0IGZsb3cgY29udHJvbCAqLworI2RlZmluZSBCRUxLSU5fU0FfRkxPV19JWE9OCQkweDAxMDAJLyogdXNlIFhPTi9YT0ZGIGZvciBpbnB1dCBmbG93IGNvbnRyb2wgKi8KKworLyoKKyAqIEl0IHNlZW1zIHRoYXQgdGhlIGludGVycnVwdCBwaXBlIGlzIGNsb3NlbHkgbW9kZWxsZWQgYWZ0ZXIgdGhlCisgKiAxNjU1MCByZWdpc3RlciBsYXlvdXQuICBUaGlzIGlzIHByb2JhYmx5IGJlY2F1c2UgdGhlIGFkYXB0ZXIgY2FuIAorICogYmUgdXNlZCBpbiBhICJET1MiIGVudmlyb25tZW50IHRvIHNpbXVsYXRlIGEgc3RhbmRhcmQgaGFyZHdhcmUgcG9ydC4KKyAqLworI2RlZmluZSBCRUxLSU5fU0FfTFNSX0lOREVYCQkyCQkvKiBMaW5lIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBCRUxLSU5fU0FfTFNSX1JEUgkJMHgwMQkvKiByZWNlaXZlIGRhdGEgcmVhZHkgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX0xTUl9PRQkJMHgwMgkvKiBvdmVycnVuIGVycm9yICovCisjZGVmaW5lIEJFTEtJTl9TQV9MU1JfUEUJCTB4MDQJLyogcGFyaXR5IGVycm9yICovCisjZGVmaW5lIEJFTEtJTl9TQV9MU1JfRkUJCTB4MDgJLyogZnJhbWluZyBlcnJvciAqLworI2RlZmluZSBCRUxLSU5fU0FfTFNSX0JJCQkweDEwCS8qIGJyZWFrIGluZGljYXRvciAqLworI2RlZmluZSBCRUxLSU5fU0FfTFNSX1RIRQkJMHgyMAkvKiB0cmFuc21pdCBob2xkaW5nIHJlZ2lzdGVyIGVtcHR5ICovCisjZGVmaW5lIEJFTEtJTl9TQV9MU1JfVEUJCTB4NDAJLyogdHJhbnNtaXQgcmVnaXN0ZXIgZW1wdHkgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX0xTUl9FUlIJCTB4ODAJLyogT0UgfCBQRSB8IEZFIHwgQkkgKi8KKworI2RlZmluZSBCRUxLSU5fU0FfTVNSX0lOREVYCQkzCQkvKiBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX01TUl9EQ1RTCQkweDAxCS8qIERlbHRhIENUUyAqLworI2RlZmluZSBCRUxLSU5fU0FfTVNSX0REU1IJCTB4MDIJLyogRGVsdGEgRFNSICovCisjZGVmaW5lIEJFTEtJTl9TQV9NU1JfRFJJCQkweDA0CS8qIERlbHRhIFJJICovCisjZGVmaW5lIEJFTEtJTl9TQV9NU1JfRENECQkweDA4CS8qIERlbHRhIENEICovCisjZGVmaW5lIEJFTEtJTl9TQV9NU1JfQ1RTCQkweDEwCS8qIEN1cnJlbnQgQ1RTICovCisjZGVmaW5lIEJFTEtJTl9TQV9NU1JfRFNSCQkweDIwCS8qIEN1cnJlbnQgRFNSICovCisjZGVmaW5lIEJFTEtJTl9TQV9NU1JfUkkJCTB4NDAJLyogQ3VycmVudCBSSSAqLworI2RlZmluZSBCRUxLSU5fU0FfTVNSX0NECQkweDgwCS8qIEN1cnJlbnQgQ0QgKi8KKworI2VuZGlmIC8qIF9fTElOVVhfVVNCX1NFUklBTF9CU0FfSCAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvYnVzLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYnVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2MTJjMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9idXMuYwpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIFVTQiBTZXJpYWwgQ29udmVydGVyIEJ1cyBzcGVjaWZpYyBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKgkyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKworc3RhdGljIGludCB1c2Jfc2VyaWFsX2RldmljZV9tYXRjaCAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlICpkcml2ZXI7CisJY29uc3Qgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKworCS8qCisJICogZHJpdmVycyBhcmUgYWxyZWFkeSBhc3NpZ25lZCB0byBwb3J0cyBpbiBzZXJpYWxfcHJvYmUgc28gaXQncworCSAqIGEgc2ltcGxlIGNoZWNrIGhlcmUuCisJICovCisJcG9ydCA9IHRvX3VzYl9zZXJpYWxfcG9ydChkZXYpOworCWlmICghcG9ydCkKKwkJcmV0dXJuIDA7CisKKwlkcml2ZXIgPSB0b191c2Jfc2VyaWFsX2RyaXZlcihkcnYpOworCisJaWYgKGRyaXZlciA9PSBwb3J0LT5zZXJpYWwtPnR5cGUpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBidXNfdHlwZSB1c2Jfc2VyaWFsX2J1c190eXBlID0geworCS5uYW1lID0JCSJ1c2Itc2VyaWFsIiwKKwkubWF0Y2ggPQl1c2Jfc2VyaWFsX2RldmljZV9tYXRjaCwKK307CisKK3N0YXRpYyBpbnQgdXNiX3NlcmlhbF9kZXZpY2VfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqZHJpdmVyOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJaW50IHJldHZhbCA9IDA7CisJaW50IG1pbm9yOworCisJcG9ydCA9IHRvX3VzYl9zZXJpYWxfcG9ydChkZXYpOworCWlmICghcG9ydCkgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGV4aXQ7CisJfQorCisJZHJpdmVyID0gcG9ydC0+c2VyaWFsLT50eXBlOworCWlmIChkcml2ZXItPnBvcnRfcHJvYmUpIHsKKwkJaWYgKCF0cnlfbW9kdWxlX2dldChkcml2ZXItPm93bmVyKSkgeworCQkJZGV2X2VycihkZXYsICJtb2R1bGUgZ2V0IGZhaWxlZCwgZXhpdGluZ1xuIik7CisJCQlyZXR2YWwgPSAtRUlPOworCQkJZ290byBleGl0OworCQl9CisJCXJldHZhbCA9IGRyaXZlci0+cG9ydF9wcm9iZSAocG9ydCk7CisJCW1vZHVsZV9wdXQoZHJpdmVyLT5vd25lcik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGV4aXQ7CisJfQorCisJbWlub3IgPSBwb3J0LT5udW1iZXI7CisJdHR5X3JlZ2lzdGVyX2RldmljZSAodXNiX3NlcmlhbF90dHlfZHJpdmVyLCBtaW5vciwgZGV2KTsKKwlkZXZfaW5mbygmcG9ydC0+c2VyaWFsLT5kZXYtPmRldiwgCisJCSAiJXMgY29udmVydGVyIG5vdyBhdHRhY2hlZCB0byB0dHlVU0IlZFxuIiwKKwkJIGRyaXZlci0+bmFtZSwgbWlub3IpOworCitleGl0OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgdXNiX3NlcmlhbF9kZXZpY2VfcmVtb3ZlIChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKmRyaXZlcjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCWludCByZXR2YWwgPSAwOworCWludCBtaW5vcjsKKworCXBvcnQgPSB0b191c2Jfc2VyaWFsX3BvcnQoZGV2KTsKKwlpZiAoIXBvcnQpIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZHJpdmVyID0gcG9ydC0+c2VyaWFsLT50eXBlOworCWlmIChkcml2ZXItPnBvcnRfcmVtb3ZlKSB7CisJCWlmICghdHJ5X21vZHVsZV9nZXQoZHJpdmVyLT5vd25lcikpIHsKKwkJCWRldl9lcnIoZGV2LCAibW9kdWxlIGdldCBmYWlsZWQsIGV4aXRpbmdcbiIpOworCQkJcmV0dmFsID0gLUVJTzsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlyZXR2YWwgPSBkcml2ZXItPnBvcnRfcmVtb3ZlIChwb3J0KTsKKwkJbW9kdWxlX3B1dChkcml2ZXItPm93bmVyKTsKKwl9CitleGl0OgorCW1pbm9yID0gcG9ydC0+bnVtYmVyOworCXR0eV91bnJlZ2lzdGVyX2RldmljZSAodXNiX3NlcmlhbF90dHlfZHJpdmVyLCBtaW5vcik7CisJZGV2X2luZm8oZGV2LCAiJXMgY29udmVydGVyIG5vdyBkaXNjb25uZWN0ZWQgZnJvbSB0dHlVU0IlZFxuIiwKKwkJIGRyaXZlci0+bmFtZSwgbWlub3IpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworaW50IHVzYl9zZXJpYWxfYnVzX3JlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlICpkZXZpY2UpCit7CisJaW50IHJldHZhbDsKKworCWlmIChkZXZpY2UtPnNob3J0X25hbWUpCisJCWRldmljZS0+ZHJpdmVyLm5hbWUgPSAoY2hhciAqKWRldmljZS0+c2hvcnRfbmFtZTsKKwllbHNlCisJCWRldmljZS0+ZHJpdmVyLm5hbWUgPSAoY2hhciAqKWRldmljZS0+bmFtZTsKKwlkZXZpY2UtPmRyaXZlci5idXMgPSAmdXNiX3NlcmlhbF9idXNfdHlwZTsKKwlkZXZpY2UtPmRyaXZlci5wcm9iZSA9IHVzYl9zZXJpYWxfZGV2aWNlX3Byb2JlOworCWRldmljZS0+ZHJpdmVyLnJlbW92ZSA9IHVzYl9zZXJpYWxfZGV2aWNlX3JlbW92ZTsKKwlkZXZpY2UtPmRyaXZlci5vd25lciA9IGRldmljZS0+b3duZXI7CisKKwlyZXR2YWwgPSBkcml2ZXJfcmVnaXN0ZXIoJmRldmljZS0+ZHJpdmVyKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3ZvaWQgdXNiX3NlcmlhbF9idXNfZGVyZWdpc3RlcihzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqZGV2aWNlKQoreworCWRyaXZlcl91bnJlZ2lzdGVyICgmZGV2aWNlLT5kcml2ZXIpOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY29uc29sZS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NvbnNvbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjdmOGVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NvbnNvbGUuYwpAQCAtMCwwICsxLDI2NCBAQAorLyoKKyAqIFVTQiBTZXJpYWwgQ29uc29sZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgLSAyMDAyIEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICoJMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqIAorICogVGhhbmtzIHRvIFJhbmR5IER1bmxhcCBmb3IgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhpcyBjb2RlLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKK3N0YXRpYyBpbnQgZGVidWc7CisKKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisKK3N0cnVjdCB1c2Jjb25zX2luZm8geworCWludAkJCW1hZ2ljOworCWludAkJCWJyZWFrX2ZsYWc7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkqcG9ydDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiY29uc19pbmZvIHVzYmNvbnNfaW5mbzsKK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSB1c2Jjb25zOworCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVU0IgU2VyaWFsIGNvbnNvbGUgZHJpdmVyCisgKgorICogTXVjaCBvZiB0aGUgY29kZSBoZXJlIGlzIGNvcGllZCBmcm9tIGRyaXZlcnMvY2hhci9zZXJpYWwuYworICogYW5kIGltcGxlbWVudHMgYSBwaG9ueSBzZXJpYWwgY29uc29sZSBpbiB0aGUgc2FtZSB3YXkgdGhhdAorICogc2VyaWFsLmMgZG9lcyBzbyB0aGF0IGluIGNhc2Ugc29tZSBzb2Z0d2FyZSBxdWVyaWVzIGl0LAorICogaXQgd2lsbCBnZXQgdGhlIHNhbWUgcmVzdWx0cy4KKyAqCisgKiBUaGluZ3MgdGhhdCBhcmUgZGlmZmVyZW50IGZyb20gdGhlIHdheSB0aGUgc2VyaWFsIHBvcnQgY29kZQorICogZG9lcyB0aGluZ3MsIGlzIHRoYXQgd2UgY2FsbCB0aGUgbG93ZXIgbGV2ZWwgdXNiLXNlcmlhbAorICogZHJpdmVyIGNvZGUgdG8gaW5pdGlhbGl6ZSB0aGUgZGV2aWNlLCBhbmQgd2Ugc2V0IHRoZSBpbml0aWFsCisgKiBjb25zb2xlIHNwZWVkcyBiYXNlZCBvbiB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKworLyoKKyAqIFRoZSBwYXJzaW5nIG9mIHRoZSBjb21tYW5kIGxpbmUgd29ya3MgZXhhY3RseSBsaWtlIHRoZQorICogc2VyaWFsLmMgY29kZSwgZXhjZXB0IHRoYXQgdGhlIHNwZWNpZmllciBpcyAidHR5VVNCIiBpbnN0ZWFkCisgKiBvZiAidHR5UyIuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHVzYl9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKK3sKKwlzdHJ1Y3QgdXNiY29uc19pbmZvICppbmZvID0gJnVzYmNvbnNfaW5mbzsKKwlpbnQgYmF1ZCA9IDk2MDA7CisJaW50IGJpdHMgPSA4OworCWludCBwYXJpdHkgPSAnbic7CisJaW50IGRvZmxvdyA9IDA7CisJaW50IGNmbGFnID0gQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwljaGFyICpzOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlpbnQgcmV0dmFsID0gMDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCXN0cnVjdCB0ZXJtaW9zICp0ZXJtaW9zOworCisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKG9wdGlvbnMpIHsKKwkJYmF1ZCA9IHNpbXBsZV9zdHJ0b3VsKG9wdGlvbnMsIE5VTEwsIDEwKTsKKwkJcyA9IG9wdGlvbnM7CisJCXdoaWxlICgqcyA+PSAnMCcgJiYgKnMgPD0gJzknKQorCQkJcysrOworCQlpZiAoKnMpCisJCQlwYXJpdHkgPSAqcysrOworCQlpZiAoKnMpCisJCQliaXRzICAgPSAqcysrIC0gJzAnOworCQlpZiAoKnMpCisJCQlkb2Zsb3cgPSAoKnMrKyA9PSAncicpOworCX0KKworCS8qIGJ1aWxkIGEgY2ZsYWcgc2V0dGluZyAqLworCXN3aXRjaCAoYmF1ZCkgeworCQljYXNlIDEyMDA6CisJCQljZmxhZyB8PSBCMTIwMDsKKwkJCWJyZWFrOworCQljYXNlIDI0MDA6CisJCQljZmxhZyB8PSBCMjQwMDsKKwkJCWJyZWFrOworCQljYXNlIDQ4MDA6CisJCQljZmxhZyB8PSBCNDgwMDsKKwkJCWJyZWFrOworCQljYXNlIDE5MjAwOgorCQkJY2ZsYWcgfD0gQjE5MjAwOworCQkJYnJlYWs7CisJCWNhc2UgMzg0MDA6CisJCQljZmxhZyB8PSBCMzg0MDA7CisJCQlicmVhazsKKwkJY2FzZSA1NzYwMDoKKwkJCWNmbGFnIHw9IEI1NzYwMDsKKwkJCWJyZWFrOworCQljYXNlIDExNTIwMDoKKwkJCWNmbGFnIHw9IEIxMTUyMDA7CisJCQlicmVhazsKKwkJY2FzZSA5NjAwOgorCQlkZWZhdWx0OgorCQkJY2ZsYWcgfD0gQjk2MDA7CisJCQkvKgorCQkJICogU2V0IHRoaXMgdG8gYSBzYW5lIHZhbHVlIHRvIHByZXZlbnQgYSBkaXZpZGUgZXJyb3IKKwkJCSAqLworCQkJYmF1ZCAgPSA5NjAwOworCQkJYnJlYWs7CisJfQorCXN3aXRjaCAoYml0cykgeworCQljYXNlIDc6CisJCQljZmxhZyB8PSBDUzc7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSA4OgorCQkJY2ZsYWcgfD0gQ1M4OworCQkJYnJlYWs7CisJfQorCXN3aXRjaCAocGFyaXR5KSB7CisJCWNhc2UgJ28nOiBjYXNlICdPJzoKKwkJCWNmbGFnIHw9IFBBUk9ERDsKKwkJCWJyZWFrOworCQljYXNlICdlJzogY2FzZSAnRSc6CisJCQljZmxhZyB8PSBQQVJFTkI7CisJCQlicmVhazsKKwl9CisJY28tPmNmbGFnID0gY2ZsYWc7CisKKwkvKiBncmFiIHRoZSBmaXJzdCBzZXJpYWwgcG9ydCB0aGF0IGhhcHBlbnMgdG8gYmUgY29ubmVjdGVkICovCisJc2VyaWFsID0gdXNiX3NlcmlhbF9nZXRfYnlfaW5kZXgoMCk7CisJaWYgKHNlcmlhbCA9PSBOVUxMKSB7CisJCS8qIG5vIGRldmljZSBpcyBjb25uZWN0ZWQgeWV0LCBzb3JyeSA6KCAqLworCQllcnIgKCJObyBVU0IgZGV2aWNlIGNvbm5lY3RlZCB0byB0dHlVU0IwIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBvcnQgPSBzZXJpYWwtPnBvcnRbMF07CisJcG9ydC0+dHR5ID0gTlVMTDsKKworCWluZm8tPnBvcnQgPSBwb3J0OworCSAKKwkrK3BvcnQtPm9wZW5fY291bnQ7CisJaWYgKHBvcnQtPm9wZW5fY291bnQgPT0gMSkgeworCQkvKiBvbmx5IGNhbGwgdGhlIGRldmljZSBzcGVjaWZpYyBvcGVuIGlmIHRoaXMgCisJCSAqIGlzIHRoZSBmaXJzdCB0aW1lIHRoZSBwb3J0IGlzIG9wZW5lZCAqLworCQlpZiAoc2VyaWFsLT50eXBlLT5vcGVuKQorCQkJcmV0dmFsID0gc2VyaWFsLT50eXBlLT5vcGVuKHBvcnQsIE5VTEwpOworCQllbHNlCisJCQlyZXR2YWwgPSB1c2Jfc2VyaWFsX2dlbmVyaWNfb3Blbihwb3J0LCBOVUxMKTsKKwkJaWYgKHJldHZhbCkKKwkJCXBvcnQtPm9wZW5fY291bnQgPSAwOworCX0KKworCWlmIChyZXR2YWwpIHsKKwkJZXJyICgiY291bGQgbm90IG9wZW4gVVNCIGNvbnNvbGUgcG9ydCIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmIChzZXJpYWwtPnR5cGUtPnNldF90ZXJtaW9zKSB7CisJCS8qIGJ1aWxkIHVwIGEgZmFrZSB0dHkgc3RydWN0dXJlIHNvIHRoYXQgdGhlIG9wZW4gY2FsbCBoYXMgc29tZXRoaW5nCisJCSAqIHRvIGxvb2sgYXQgdG8gZ2V0IHRoZSBjZmxhZyB2YWx1ZSAqLworCQl0dHkgPSBrbWFsbG9jIChzaXplb2YgKCp0dHkpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF0dHkpIHsKKwkJCWVyciAoIm5vIG1vcmUgbWVtb3J5Iik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQl0ZXJtaW9zID0ga21hbGxvYyAoc2l6ZW9mICgqdGVybWlvcyksIEdGUF9LRVJORUwpOworCQlpZiAoIXRlcm1pb3MpIHsKKwkJCWVyciAoIm5vIG1vcmUgbWVtb3J5Iik7CisJCQlrZnJlZSAodHR5KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1lbXNldCAodHR5LCAweDAwLCBzaXplb2YoKnR0eSkpOworCQltZW1zZXQgKHRlcm1pb3MsIDB4MDAsIHNpemVvZigqdGVybWlvcykpOworCQl0ZXJtaW9zLT5jX2NmbGFnID0gY2ZsYWc7CisJCXR0eS0+dGVybWlvcyA9IHRlcm1pb3M7CisJCXBvcnQtPnR0eSA9IHR0eTsKKworCQkvKiBzZXQgdXAgdGhlIGluaXRpYWwgdGVybWlvcyBzZXR0aW5ncyAqLworCQlzZXJpYWwtPnR5cGUtPnNldF90ZXJtaW9zKHBvcnQsIE5VTEwpOworCQlwb3J0LT50dHkgPSBOVUxMOworCQlrZnJlZSAodGVybWlvcyk7CisJCWtmcmVlICh0dHkpOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHVzYl9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBjb3VudCkKK3sKKwlzdGF0aWMgc3RydWN0IHVzYmNvbnNfaW5mbyAqaW5mbyA9ICZ1c2Jjb25zX2luZm87CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IGluZm8tPnBvcnQ7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlpbnQgcmV0dmFsID0gLUVOT0RFVjsKKworCWlmICghcG9ydCkKKwkJcmV0dXJuOworCXNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKworCWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm47CisKKwlkYmcoIiVzIC0gcG9ydCAlZCwgJWQgYnl0ZShzKSIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCBjb3VudCk7CisKKwlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKKwkJZGJnICgiJXMgLSBwb3J0IG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogcGFzcyBvbiB0byB0aGUgZHJpdmVyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiBpZiBpdCBpcyBhdmFpbGFibGUgKi8KKwlpZiAoc2VyaWFsLT50eXBlLT53cml0ZSkKKwkJcmV0dmFsID0gc2VyaWFsLT50eXBlLT53cml0ZShwb3J0LCBidWYsIGNvdW50KTsKKwllbHNlCisJCXJldHZhbCA9IHVzYl9zZXJpYWxfZ2VuZXJpY193cml0ZShwb3J0LCBidWYsIGNvdW50KTsKKworZXhpdDoKKwlkYmcoIiVzIC0gcmV0dXJuIHZhbHVlIChpZiB3ZSBoYWQgb25lKTogJWQiLCBfX0ZVTkNUSU9OX18sIHJldHZhbCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSB1c2Jjb25zID0geworCS5uYW1lID0JCSJ0dHlVU0IiLAorCS53cml0ZSA9CXVzYl9jb25zb2xlX3dyaXRlLAorCS5zZXR1cCA9CXVzYl9jb25zb2xlX3NldHVwLAorCS5mbGFncyA9CUNPTl9QUklOVEJVRkZFUiwKKwkuaW5kZXggPQktMSwKK307CisKK3ZvaWQgdXNiX3NlcmlhbF9jb25zb2xlX2luaXQgKGludCBzZXJpYWxfZGVidWcsIGludCBtaW5vcikKK3sKKwlkZWJ1ZyA9IHNlcmlhbF9kZWJ1ZzsKKworCWlmIChtaW5vciA9PSAwKSB7CisJCS8qIAorCQkgKiBDYWxsIHJlZ2lzdGVyX2NvbnNvbGUoKSBpZiB0aGlzIGlzIHRoZSBmaXJzdCBkZXZpY2UgcGx1Z2dlZAorCQkgKiBpbi4gIElmIHdlIGNhbGwgaXQgZWFybGllciwgdGhlbiB0aGUgY2FsbGJhY2sgdG8KKwkJICogY29uc29sZV9zZXR1cCgpIHdpbGwgZmFpbCwgYXMgdGhlcmUgaXMgbm90IGEgZGV2aWNlIHNlZW4gYnkKKwkJICogdGhlIFVTQiBzdWJzeXN0ZW0geWV0LgorCQkgKi8KKwkJLyoKKwkJICogUmVnaXN0ZXIgY29uc29sZS4KKwkJICogTk9URVM6CisJCSAqIGNvbnNvbGVfc2V0dXAoKSBpcyBjYWxsZWQgKGJhY2spIGltbWVkaWF0ZWx5IChmcm9tIHJlZ2lzdGVyX2NvbnNvbGUpLgorCQkgKiBjb25zb2xlX3dyaXRlKCkgaXMgY2FsbGVkIGltbWVkaWF0ZWx5IGZyb20gcmVnaXN0ZXJfY29uc29sZSBpZmYKKwkJICogQ09OX1BSSU5UQlVGRkVSIGlzIHNldCBpbiBmbGFncy4KKwkJICovCisJCWRiZyAoInJlZ2lzdGVyaW5nIHRoZSBVU0Igc2VyaWFsIGNvbnNvbGUuIik7CisJCXJlZ2lzdGVyX2NvbnNvbGUoJnVzYmNvbnMpOworCX0KK30KKwordm9pZCB1c2Jfc2VyaWFsX2NvbnNvbGVfZXhpdCAodm9pZCkKK3sKKwl1bnJlZ2lzdGVyX2NvbnNvbGUoJnVzYmNvbnMpOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U5YmI2MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYwpAQCAtMCwwICsxLDU5MSBAQAorLyoKKyAqIFNpbGljb24gTGFib3JhdG9yaWVzIENQMjEwMS9DUDIxMDIgVVNCIHRvIFJTMjMyIHNlcmlhbCBhZGFwdG9yIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBDcmFpZyBTaGVsbGV5IChjcmFpZ0BtaWNyb3Ryb24ub3JnLnVrKQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqCTIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjAzIgorI2RlZmluZSBEUklWRVJfREVTQyAiU2lsaWNvbiBMYWJzIENQMjEwMS9DUDIxMDIgUlMyMzIgc2VyaWFsIGFkYXB0b3IgZHJpdmVyIgorCisvKgorICogRnVuY3Rpb24gUHJvdG90eXBlcworICovCitzdGF0aWMgaW50IGNwMjEwMV9vcGVuKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQqLCBzdHJ1Y3QgZmlsZSopOworc3RhdGljIHZvaWQgY3AyMTAxX2NsZWFudXAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCopOworc3RhdGljIHZvaWQgY3AyMTAxX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQqLCBzdHJ1Y3QgZmlsZSopOworc3RhdGljIHZvaWQgY3AyMTAxX2dldF90ZXJtaW9zKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQqKTsKK3N0YXRpYyB2b2lkIGNwMjEwMV9zZXRfdGVybWlvcyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0Kiwgc3RydWN0IHRlcm1pb3MqKTsKK3N0YXRpYyB2b2lkIGNwMjEwMV9icmVha19jdGwoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCosIGludCk7CitzdGF0aWMgaW50IGNwMjEwMV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqKTsKK3N0YXRpYyB2b2lkIGNwMjEwMV9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCopOworCisKK3N0YXRpYyBpbnQgZGVidWc7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKKwl7VVNCX0RFVklDRSgweDEwYzQsIDB4ZWE2MCkgfSwJLypTaWxpY29uIGxhYnMgZmFjdG9yeSBkZWZhdWx0Ki8KKwl7VVNCX0RFVklDRSgweDEwYWIsIDB4MTBjNSkgfSwJLypTaWVtZW5zIE1DNjAgQ2FibGUqLworCXsgfSAvKiBUZXJtaW5hdGluZyBFbnRyeSovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGNwMjEwMV9kcml2ZXIgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQk9ICJDUDIxMDEiLAorCS5wcm9iZQkJPSB1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0CT0gdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZQk9IGlkX3RhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGNwMjEwMV9kZXZpY2UgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJCT0gIkNQMjEwMSIsCisJLmlkX3RhYmxlCQk9IGlkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luCT0gMCwKKwkubnVtX2J1bGtfaW4JCT0gMCwKKwkubnVtX2J1bGtfb3V0CQk9IDAsCisJLm51bV9wb3J0cwkJPSAxLAorCS5vcGVuCQkJPSBjcDIxMDFfb3BlbiwKKwkuY2xvc2UJCQk9IGNwMjEwMV9jbG9zZSwKKwkuYnJlYWtfY3RsCQk9IGNwMjEwMV9icmVha19jdGwsCisJLnNldF90ZXJtaW9zCQk9IGNwMjEwMV9zZXRfdGVybWlvcywKKwkuYXR0YWNoCQkJPSBjcDIxMDFfc3RhcnR1cCwKKwkuc2h1dGRvd24JCT0gY3AyMTAxX3NodXRkb3duLAorfTsKKworLypDb25maWcgcmVxdWVzdCB0eXBlcyovCisjZGVmaW5lIFJFUVRZUEVfSE9TVF9UT19ERVZJQ0UJMHg0MQorI2RlZmluZSBSRVFUWVBFX0RFVklDRV9UT19IT1NUCTB4YzEKKworLypDb25maWcgU0VUIHJlcXVlc3RzLiBUbyBHRVQsIGFkZCAxIHRvIHRoZSByZXF1ZXN0IG51bWJlciovCisjZGVmaW5lIENQMjEwMV9VQVJUIAkJMHgwMAkvKkVuYWJsZSAvIERpc2FibGUqLworI2RlZmluZSBDUDIxMDFfQkFVRFJBVEUJCTB4MDEJLyooQkFVRF9SQVRFX0dFTl9GUkVRIC8gYmF1ZHJhdGUpKi8KKyNkZWZpbmUgQ1AyMTAxX0JJVFMJCTB4MDMJLyoweCgwKShkYXRhIGJpdHMpKHBhcml0eSkoc3RvcCBiaXRzKSovCisjZGVmaW5lIENQMjEwMV9CUkVBSwkJMHgwNQkvKk9uIC8gT2ZmKi8KKyNkZWZpbmUgQ1AyMTAxX0RUUlJUUwkJMHgwNwkvKjEwMSAvIDIwMiAgPz8/Ki8KKyNkZWZpbmUgQ1AyMTAxX0NPTkZJR18xNgkweDEzCS8qMTYgYnl0ZXMgb2YgY29uZmlnIGRhdGEgPz8/Ki8KKyNkZWZpbmUgQ1AyMTAxX0NPTkZJR182CQkweDE5CS8qNiBieXRlcyBvZiBjb25maWcgZGF0YSA/Pz8qLworCisvKkNQMjEwMV9VQVJUKi8KKyNkZWZpbmUgVUFSVF9FTkFCTEUJCTB4MDAwMQorI2RlZmluZSBVQVJUX0RJU0FCTEUJCTB4MDAwMAorCisvKkNQMjEwMV9CQVVEUkFURSovCisjZGVmaW5lIEJBVURfUkFURV9HRU5fRlJFUQkweDM4NDAwMAorCisvKkNQMjEwMV9CSVRTKi8KKyNkZWZpbmUgQklUU19EQVRBX01BU0sJCTBYMGYwMAorI2RlZmluZSBCSVRTX0RBVEFfNgkJMFgwNjAwCisjZGVmaW5lIEJJVFNfREFUQV83CQkwWDA3MDAKKyNkZWZpbmUgQklUU19EQVRBXzgJCTBYMDgwMAorI2RlZmluZSBCSVRTX0RBVEFfOQkJMFgwOTAwCisKKyNkZWZpbmUgQklUU19QQVJJVFlfTUFTSwkweDAwZjAKKyNkZWZpbmUgQklUU19QQVJJVFlfTk9ORQkweDAwMDAKKyNkZWZpbmUgQklUU19QQVJJVFlfT0RECQkweDAwMTAKKyNkZWZpbmUgQklUU19QQVJJVFlfRVZFTgkweDAwMjAKKyNkZWZpbmUgQklUU19QQVJJVFlfTUFSSwkweDAwMzAKKyNkZWZpbmUgQklUU19QQVJJVFlfU1BBQ0UJMHgwMDQwCisKKyNkZWZpbmUgQklUU19TVE9QX01BU0sJCTB4MDAwZgorI2RlZmluZSBCSVRTX1NUT1BfMQkJMHgwMDAwCisjZGVmaW5lIEJJVFNfU1RPUF8xXzUJCTB4MDAwMQorI2RlZmluZSBCSVRTX1NUT1BfMgkJMHgwMDAyCisjZGVmaW5lIEJSRUFLX09OCQkweDAwMDAKKyNkZWZpbmUgQlJFQUtfT0ZGCQkweDAwMDEKKworCitzdGF0aWMgaW50IGNwMjEwMV9nZXRfY29uZmlnKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQqIHBvcnQsIHU4IHJlcXVlc3QpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwl1bnNpZ25lZCBjaGFyIGJ1Zls0XTsKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisJaW50IHJlc3VsdCwgaTsKKworCS8qRm9yIGdldCByZXF1ZXN0cywgdGhlIHJlcXVlc3QgbnVtYmVyIG11c3QgYmUgaW5jcmVtZW50ZWQqLworCXJlcXVlc3QrKzsKKworCS8qSXNzdWUgdGhlIHJlcXVlc3QsIGF0dGVtcHRpbmcgdG8gcmVhZCA0IGJ5dGVzKi8KKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKHNlcmlhbC0+ZGV2LHVzYl9yY3ZjdHJscGlwZSAoc2VyaWFsLT5kZXYsIDApLAorCQkJCXJlcXVlc3QsIFJFUVRZUEVfREVWSUNFX1RPX0hPU1QsIDB4MDAwMCwKKwkJCQkwLCBidWYsIDQsIDMwMCk7CisKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIFVuYWJsZSB0byBzZW5kIGNvbmZpZyByZXF1ZXN0LCAiCisJCQkJInJlcXVlc3Q9MHgleCByZXN1bHQ9JWRcbiIsCisJCQkJX19GVU5DVElPTl9fLCByZXF1ZXN0LCByZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qQXNzZW1ibGUgZWFjaCBieXRlIHJlYWQgaW50byBhbiBpbnRlZ2VyIHZhbHVlKi8KKwl2YWx1ZSA9IDA7CisJZm9yIChpPTA7IGk8NCAmJiBpPHJlc3VsdDsgaSsrKQorCQl2YWx1ZSB8PSAoYnVmW2ldIDw8IChpICogOCkpOworCisJZGJnKCAiICVzIC0gcmVxdWVzdD0weCV4IHJlc3VsdD0lZCB2YWx1ZT0weCV4IiwKKwkJCV9fRlVOQ1RJT05fXywgcmVxdWVzdCwgcmVzdWx0LCB2YWx1ZSk7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBpbnQgY3AyMTAxX3NldF9jb25maWcoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCogcG9ydCwgdTggcmVxdWVzdCwgdTE2IHZhbHVlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJaW50IHJlc3VsdDsKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJcmVxdWVzdCwgUkVRVFlQRV9IT1NUX1RPX0RFVklDRSwgdmFsdWUsCisJCQkwLCBOVUxMLCAwLCAzMDApOworCisJaWYgKHJlc3VsdCA8MCkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIFVuYWJsZSB0byBzZW5kIGNvbmZpZyByZXF1ZXN0LCAiCisJCQkJInJlcXVlc3Q9MHgleCB2YWx1ZT0weCV4IHJlc3VsdD0lZFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHJlcXVlc3QsIHZhbHVlLCByZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCWRiZygiICVzIC0gcmVxdWVzdD0weCV4IHZhbHVlPTB4JXggcmVzdWx0PSVkIiwKKwkJCV9fRlVOQ1RJT05fXywgcmVxdWVzdCwgdmFsdWUsIHJlc3VsdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjcDIxMDFfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpbnQgcmVzdWx0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX1VBUlQsIFVBUlRfRU5BQkxFKSkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIFVuYWJsZSB0byBlbmFibGUgVUFSVFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVQUk9UTzsKKwl9CisKKwkvKiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLworCXVzYl9maWxsX2J1bGtfdXJiIChwb3J0LT5yZWFkX3VyYiwgc2VyaWFsLT5kZXYsCisJCQl1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQlwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQlzZXJpYWwtPnR5cGUtPnJlYWRfYnVsa19jYWxsYmFjaywKKwkJCXBvcnQpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmVzdWx0KSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgIgorCQkJCSJlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qQ29uZmlndXJlIHRoZSB0ZXJtaW9zIHN0cnVjdHVyZSovCisJY3AyMTAxX2dldF90ZXJtaW9zKHBvcnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNwMjEwMV9jbGVhbnVwIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChzZXJpYWwtPmRldikgeworCQkvKiBzaHV0ZG93biBhbnkgYnVsayByZWFkcyB0aGF0IG1pZ2h0IGJlIGdvaW5nIG9uICovCisJCWlmIChzZXJpYWwtPm51bV9idWxrX291dCkKKwkJCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOworCQlpZiAoc2VyaWFsLT5udW1fYnVsa19pbikKKwkJCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisJfQorfQorCitzdGF0aWMgdm9pZCBjcDIxMDFfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlscCkKK3sKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIHNodXRkb3duIG91ciB1cmJzICovCisJZGJnKCIlcyAtIHNodXR0aW5nIGRvd24gdXJicyIsIF9fRlVOQ1RJT05fXyk7CisJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKworCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9VQVJULCBVQVJUX0RJU0FCTEUpOworfQorCisvKiBjcDIxMDFfZ2V0X3Rlcm1pb3MqLworLyogUmVhZHMgdGhlIGJhdWQgcmF0ZSwgZGF0YSBiaXRzLCBwYXJpdHkgYW5kIHN0b3AgYml0cyBmcm9tIHRoZSBkZXZpY2UqLworLyogQ29ycmVjdHMgYW55IHVuc3VwcG9ydGVkIHZhbHVlcyovCisvKiBDb25maWd1cmVzIHRoZSB0ZXJtaW9zIHN0cnVjdHVyZSB0byByZWZsZWN0IHRoZSBzdGF0ZSBvZiB0aGUgZGV2aWNlKi8KK3N0YXRpYyB2b2lkIGNwMjEwMV9nZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgY2ZsYWc7CisJaW50IGJhdWQ7CisJaW50IGJpdHM7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICgoIXBvcnQtPnR0eSkgfHwgKCFwb3J0LT50dHktPnRlcm1pb3MpKSB7CisJCWRiZygiJXMgLSBubyB0dHkgc3RydWN0dXJlcyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisKKwliYXVkID0gY3AyMTAxX2dldF9jb25maWcocG9ydCwgQ1AyMTAxX0JBVURSQVRFKTsKKwkvKkNvbnZlcnQgdG8gYmF1ZHJhdGUqLworCWlmIChiYXVkKQorCQliYXVkID0gQkFVRF9SQVRFX0dFTl9GUkVRIC8gYmF1ZDsKKworCWRiZygiJXMgLSBiYXVkIHJhdGUgPSAlZCIsIF9fRlVOQ1RJT05fXywgYmF1ZCk7CisJY2ZsYWcgJj0gfkNCQVVEOworCXN3aXRjaCAoYmF1ZCkgeworCQkvKiBUaGUgYmF1ZCByYXRlcyB3aGljaCBhcmUgY29tbWVudGVkIG91dCBiZWxvdworCQkgKiBhcHBlYXIgdG8gYmUgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UKKwkJICogYnV0IGFyZSBub24tc3RhbmRhcmQKKwkJICovCisJCWNhc2UgNjAwOgljZmxhZyB8PSBCNjAwOwkJYnJlYWs7CisJCWNhc2UgMTIwMDoJY2ZsYWcgfD0gQjEyMDA7CQlicmVhazsKKwkJY2FzZSAxODAwOgljZmxhZyB8PSBCMTgwMDsJCWJyZWFrOworCQljYXNlIDI0MDA6CWNmbGFnIHw9IEIyNDAwOwkJYnJlYWs7CisJCWNhc2UgNDgwMDoJY2ZsYWcgfD0gQjQ4MDA7CQlicmVhazsKKwkJLypjYXNlIDcyMDA6CWNmbGFnIHw9IEI3MjAwOwkJYnJlYWs7Ki8KKwkJY2FzZSA5NjAwOgljZmxhZyB8PSBCOTYwMDsJCWJyZWFrOworCQkvKmNhc2UgMTQ0MDA6CWNmbGFnIHw9IEIxNDQwMDsJYnJlYWs7Ki8KKwkJY2FzZSAxOTIwMDoJY2ZsYWcgfD0gQjE5MjAwOwlicmVhazsKKwkJLypjYXNlIDI4ODAwOgljZmxhZyB8PSBCMjg4MDA7CWJyZWFrOyovCisJCWNhc2UgMzg0MDA6CWNmbGFnIHw9IEIzODQwMDsJYnJlYWs7CisJCS8qY2FzZSA1NTg1NDoJY2ZsYWcgfD0gQjU1MDU0OwlicmVhazsqLworCQljYXNlIDU3NjAwOgljZmxhZyB8PSBCNTc2MDA7CWJyZWFrOworCQljYXNlIDExNTIwMDoJY2ZsYWcgfD0gQjExNTIwMDsJYnJlYWs7CisJCS8qY2FzZSAxMjcxMTc6CWNmbGFnIHw9IEIxMjcxMTc7CWJyZWFrOyovCisJCWNhc2UgMjMwNDAwOgljZmxhZyB8PSBCMjMwNDAwOwlicmVhazsKKwkJY2FzZSA0NjA4MDA6CWNmbGFnIHw9IEI0NjA4MDA7CWJyZWFrOworCQljYXNlIDkyMTYwMDoJY2ZsYWcgfD0gQjkyMTYwMDsJYnJlYWs7CisJCS8qY2FzZSAzNjg2NDAwOgljZmxhZyB8PSBCMzY4NjQwMDsJYnJlYWs7Ki8KKwkJZGVmYXVsdDoKKwkJCWRiZygiJXMgLSBCYXVkIHJhdGUgaXMgbm90IHN1cHBvcnRlZCwgIgorCQkJCQkidXNpbmcgOTYwMCBiYXVkIiwgX19GVU5DVElPTl9fKTsKKwkJCWNmbGFnIHw9IEI5NjAwOworCQkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JBVURSQVRFLAorCQkJCQkoQkFVRF9SQVRFX0dFTl9GUkVRLzk2MDApKTsKKwkJCWJyZWFrOworCX0KKworCWJpdHMgPSBjcDIxMDFfZ2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUyk7CisJY2ZsYWcgJj0gfkNTSVpFOworCXN3aXRjaChiaXRzICYgQklUU19EQVRBX01BU0spIHsKKwkJY2FzZSBCSVRTX0RBVEFfNjoKKwkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA2IiwgX19GVU5DVElPTl9fKTsKKwkJCWNmbGFnIHw9IENTNjsKKwkJCWJyZWFrOworCQljYXNlIEJJVFNfREFUQV83OgorCQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDciLCBfX0ZVTkNUSU9OX18pOworCQkJY2ZsYWcgfD0gQ1M3OworCQkJYnJlYWs7CisJCWNhc2UgQklUU19EQVRBXzg6CisJCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gOCIsIF9fRlVOQ1RJT05fXyk7CisJCQljZmxhZyB8PSBDUzg7CisJCQlicmVhazsKKwkJY2FzZSBCSVRTX0RBVEFfOToKKwkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA5IChub3Qgc3VwcG9ydGVkLCAiCisJCQkJCSJ1c2luZyA4IGRhdGEgYml0cykiLCBfX0ZVTkNUSU9OX18pOworCQkJY2ZsYWcgfD0gQ1M4OworCQkJYml0cyAmPSB+QklUU19EQVRBX01BU0s7CisJCQliaXRzIHw9IEJJVFNfREFUQV84OworCQkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsIGJpdHMpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkYmcoIiVzIC0gVW5rbm93biBudW1iZXIgb2YgZGF0YSBiaXRzLCAiCisJCQkJCSJ1c2luZyA4IiwgX19GVU5DVElPTl9fKTsKKwkJCWNmbGFnIHw9IENTODsKKwkJCWJpdHMgJj0gfkJJVFNfREFUQV9NQVNLOworCQkJYml0cyB8PSBCSVRTX0RBVEFfODsKKwkJCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCBiaXRzKTsKKwkJCWJyZWFrOworCX0KKworCXN3aXRjaChiaXRzICYgQklUU19QQVJJVFlfTUFTSykgeworCQljYXNlIEJJVFNfUEFSSVRZX05PTkU6CisJCQlkYmcoIiVzIC0gcGFyaXR5ID0gTk9ORSIsIF9fRlVOQ1RJT05fXyk7CisJCQljZmxhZyAmPSB+UEFSRU5COworCQkJYnJlYWs7CisJCWNhc2UgQklUU19QQVJJVFlfT0REOgorCQkJZGJnKCIlcyAtIHBhcml0eSA9IE9ERCIsIF9fRlVOQ1RJT05fXyk7CisJCQljZmxhZyB8PSAoUEFSRU5CfFBBUk9ERCk7CisJCQlicmVhazsKKwkJY2FzZSBCSVRTX1BBUklUWV9FVkVOOgorCQkJZGJnKCIlcyAtIHBhcml0eSA9IEVWRU4iLCBfX0ZVTkNUSU9OX18pOworCQkJY2ZsYWcgJj0gflBBUk9ERDsKKwkJCWNmbGFnIHw9IFBBUkVOQjsKKwkJCWJyZWFrOworCQljYXNlIEJJVFNfUEFSSVRZX01BUks6CisJCQlkYmcoIiVzIC0gcGFyaXR5ID0gTUFSSyAobm90IHN1cHBvcnRlZCwgIgorCQkJCQkiZGlzYWJsaW5nIHBhcml0eSkiLCBfX0ZVTkNUSU9OX18pOworCQkJY2ZsYWcgJj0gflBBUkVOQjsKKwkJCWJpdHMgJj0gfkJJVFNfUEFSSVRZX01BU0s7CisJCQljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgYml0cyk7CisJCQlicmVhazsKKwkJY2FzZSBCSVRTX1BBUklUWV9TUEFDRToKKwkJCWRiZygiJXMgLSBwYXJpdHkgPSBTUEFDRSAobm90IHN1cHBvcnRlZCwgIgorCQkJCQkiZGlzYWJsaW5nIHBhcml0eSkiLCBfX0ZVTkNUSU9OX18pOworCQkJY2ZsYWcgJj0gflBBUkVOQjsKKwkJCWJpdHMgJj0gfkJJVFNfUEFSSVRZX01BU0s7CisJCQljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgYml0cyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRiZygiJXMgLSBVbmtub3duIHBhcml0eSBtb2RlLCAiCisJCQkJCSJkaXNhYmxpbmcgcGFyaXR5IiwgX19GVU5DVElPTl9fKTsKKwkJCWNmbGFnICY9IH5QQVJFTkI7CisJCQliaXRzICY9IH5CSVRTX1BBUklUWV9NQVNLOworCQkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsIGJpdHMpOworCQkJYnJlYWs7CisJfQorCisJY2ZsYWcgJj0gfkNTVE9QQjsKKwlzd2l0Y2goYml0cyAmIEJJVFNfU1RPUF9NQVNLKSB7CisJCWNhc2UgQklUU19TVE9QXzE6CisJCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMSIsIF9fRlVOQ1RJT05fXyk7CisJCQlicmVhazsKKwkJY2FzZSBCSVRTX1NUT1BfMV81OgorCQkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDEuNSAobm90IHN1cHBvcnRlZCwgIgorCQkJCQkidXNpbmcgMSBzdG9wIGJpdCIsIF9fRlVOQ1RJT05fXyk7CisJCQliaXRzICY9IH5CSVRTX1NUT1BfTUFTSzsKKwkJCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCBiaXRzKTsKKwkJCWJyZWFrOworCQljYXNlIEJJVFNfU1RPUF8yOgorCQkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDIiLCBfX0ZVTkNUSU9OX18pOworCQkJY2ZsYWcgfD0gQ1NUT1BCOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkYmcoIiVzIC0gVW5rbm93biBudW1iZXIgb2Ygc3RvcCBiaXRzLCAiCisJCQkJCSJ1c2luZyAxIHN0b3AgYml0IiwgX19GVU5DVElPTl9fKTsKKwkJCWJpdHMgJj0gfkJJVFNfU1RPUF9NQVNLOworCQkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsIGJpdHMpOworCQkJYnJlYWs7CisJfQorCisJcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnID0gY2ZsYWc7Cit9CisKK3N0YXRpYyB2b2lkIGNwMjEwMV9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQoreworCXVuc2lnbmVkIGludCBjZmxhZywgb2xkX2NmbGFnPTA7CisJaW50IGJhdWQ9MDsKKwlpbnQgYml0czsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCghcG9ydC0+dHR5KSB8fCAoIXBvcnQtPnR0eS0+dGVybWlvcykpIHsKKwkJZGJnKCIlcyAtIG5vIHR0eSBzdHJ1Y3R1cmVzIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKwljZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKworCS8qIGNoZWNrIHRoYXQgdGhleSByZWFsbHkgd2FudCB1cyB0byBjaGFuZ2Ugc29tZXRoaW5nICovCisJaWYgKG9sZF90ZXJtaW9zKSB7CisJCWlmICgoY2ZsYWcgPT0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWcpICYmCisJCQkJKFJFTEVWQU5UX0lGTEFHKHBvcnQtPnR0eS0+dGVybWlvcy0+Y19pZmxhZykKKwkJCQk9PSBSRUxFVkFOVF9JRkxBRyhvbGRfdGVybWlvcy0+Y19pZmxhZykpKSB7CisJCQlkYmcoIiVzIC0gbm90aGluZyB0byBjaGFuZ2UuLi4iLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuOworCQl9CisKKwkJb2xkX2NmbGFnID0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWc7CisJfQorCisJLyogSWYgdGhlIGJhdWQgcmF0ZSBpcyB0byBiZSB1cGRhdGVkKi8KKwlpZiAoKGNmbGFnICYgQ0JBVUQpICE9IChvbGRfY2ZsYWcgJiBDQkFVRCkpIHsKKwkJc3dpdGNoIChjZmxhZyAmIENCQVVEKSB7CisJCQkvKiBUaGUgYmF1ZCByYXRlcyB3aGljaCBhcmUgY29tbWVudGVkIG91dCBiZWxvdworCQkJICogYXBwZWFyIHRvIGJlIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlCisJCQkgKiBidXQgYXJlIG5vbi1zdGFuZGFyZAorCQkJICovCisJCQljYXNlIEIwOgliYXVkID0gMDsJYnJlYWs7CisJCQljYXNlIEI2MDA6CWJhdWQgPSA2MDA7CWJyZWFrOworCQkJY2FzZSBCMTIwMDoJYmF1ZCA9IDEyMDA7CWJyZWFrOworCQkJY2FzZSBCMTgwMDoJYmF1ZCA9IDE4MDA7CWJyZWFrOworCQkJY2FzZSBCMjQwMDoJYmF1ZCA9IDI0MDA7CWJyZWFrOworCQkJY2FzZSBCNDgwMDoJYmF1ZCA9IDQ4MDA7CWJyZWFrOworCQkJLypjYXNlIEI3MjAwOgliYXVkID0gNzIwMDsJYnJlYWs7Ki8KKwkJCWNhc2UgQjk2MDA6CWJhdWQgPSA5NjAwOwlicmVhazsKKwkJCS8qYXNlIEIxNDQwMDoJYmF1ZCA9IDE0NDAwOwlicmVhazsqLworCQkJY2FzZSBCMTkyMDA6CWJhdWQgPSAxOTIwMDsJYnJlYWs7CisJCQkvKmNhc2UgQjI4ODAwOgliYXVkID0gMjg4MDA7CWJyZWFrOyovCisJCQljYXNlIEIzODQwMDoJYmF1ZCA9IDM4NDAwOwlicmVhazsKKwkJCS8qY2FzZSBCNTU4NTQ6CWJhdWQgPSA1NTA1NDsJYnJlYWs7Ki8KKwkJCWNhc2UgQjU3NjAwOgliYXVkID0gNTc2MDA7CWJyZWFrOworCQkJY2FzZSBCMTE1MjAwOgliYXVkID0gMTE1MjAwOwlicmVhazsKKwkJCS8qY2FzZSBCMTI3MTE3OgliYXVkID0gMTI3MTE3OwlicmVhazsqLworCQkJY2FzZSBCMjMwNDAwOgliYXVkID0gMjMwNDAwOwlicmVhazsKKwkJCWNhc2UgQjQ2MDgwMDoJYmF1ZCA9IDQ2MDgwMDsJYnJlYWs7CisJCQljYXNlIEI5MjE2MDA6CWJhdWQgPSA5MjE2MDA7CWJyZWFrOworCQkJLypjYXNlIEIzNjg2NDAwOgliYXVkID0gMzY4NjQwMDsJYnJlYWs7Ki8KKwkJCWRlZmF1bHQ6CisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiY3AyMTAxIGRyaXZlciBkb2VzIG5vdCAiCisJCQkJCSJzdXBwb3J0IHRoZSBiYXVkcmF0ZSByZXF1ZXN0ZWRcbiIpOworCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKGJhdWQpIHsKKwkJCWRiZygiJXMgLSBTZXR0aW5nIGJhdWQgcmF0ZSB0byAlZCBiYXVkIiwgX19GVU5DVElPTl9fLAorCQkJCQliYXVkKTsKKwkJCWlmIChjcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQkFVRFJBVEUsCisJCQkJCQkoQkFVRF9SQVRFX0dFTl9GUkVRIC8gYmF1ZCkpKQorCQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIkJhdWQgcmF0ZSByZXF1ZXN0ZWQgbm90ICIKKwkJCQkJCSJzdXBwb3J0ZWQgYnkgZGV2aWNlXG4iKTsKKwkJfQorCX0KKworCS8qSWYgdGhlIG51bWJlciBvZiBkYXRhIGJpdHMgaXMgdG8gYmUgdXBkYXRlZCovCisJaWYgKChjZmxhZyAmIENTSVpFKSAhPSAob2xkX2NmbGFnICYgQ1NJWkUpKSB7CisJCWJpdHMgPSBjcDIxMDFfZ2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUyk7CisJCWJpdHMgJj0gfkJJVFNfREFUQV9NQVNLOworCQlzd2l0Y2ggKGNmbGFnICYgQ1NJWkUpIHsKKwkJCWNhc2UgQ1M2OgorCQkJCWJpdHMgfD0gQklUU19EQVRBXzY7CisJCQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDYiLCBfX0ZVTkNUSU9OX18pOworCQkJCWJyZWFrOworCQkJY2FzZSBDUzc6CisJCQkJYml0cyB8PSBCSVRTX0RBVEFfNzsKKwkJCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gNyIsIF9fRlVOQ1RJT05fXyk7CisJCQkJYnJlYWs7CisJCQljYXNlIENTODoKKwkJCQliaXRzIHw9IEJJVFNfREFUQV84OworCQkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA4IiwgX19GVU5DVElPTl9fKTsKKwkJCQlicmVhazsKKwkJCS8qY2FzZSBDUzk6CisJCQkgCWJpdHMgfD0gQklUU19EQVRBXzk7CisJCQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDkiLCBfX0ZVTkNUSU9OX18pOworCQkJCWJyZWFrOyovCisJCQlkZWZhdWx0OgorCQkJCWRldl9lcnIoJnBvcnQtPmRldiwgImNwMjEwMSBkcml2ZXIgZG9lcyBub3QgIgorCQkJCQkic3VwcG9ydCB0aGUgbnVtYmVyIG9mIGJpdHMgcmVxdWVzdGVkLCIKKwkJCQkJIiB1c2luZyA4IGJpdCBtb2RlXG4iKTsKKwkJCQliaXRzIHw9IEJJVFNfREFUQV84OworCQkJCWJyZWFrOworCQl9CisJCWlmIChjcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgYml0cykpCisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJOdW1iZXIgb2YgZGF0YSBiaXRzIHJlcXVlc3RlZCAiCisJCQkJCSJub3Qgc3VwcG9ydGVkIGJ5IGRldmljZVxuIik7CisJfQorCisJaWYgKChjZmxhZyAmIChQQVJFTkJ8UEFST0REKSkgIT0gKG9sZF9jZmxhZyAmIChQQVJFTkJ8UEFST0REKSkpIHsKKwkJYml0cyA9IGNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTKTsKKwkJYml0cyAmPSB+QklUU19QQVJJVFlfTUFTSzsKKwkJaWYgKGNmbGFnICYgUEFSRU5CKSB7CisJCQlpZiAoY2ZsYWcgJiBQQVJPREQpIHsKKwkJCQliaXRzIHw9IEJJVFNfUEFSSVRZX09ERDsKKwkJCQlkYmcoIiVzIC0gcGFyaXR5ID0gT0REIiwgX19GVU5DVElPTl9fKTsKKwkJCX0gZWxzZSB7CisJCQkJYml0cyB8PSBCSVRTX1BBUklUWV9FVkVOOworCQkJCWRiZygiJXMgLSBwYXJpdHkgPSBFVkVOIiwgX19GVU5DVElPTl9fKTsKKwkJCX0KKwkJfQorCQlpZiAoY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsIGJpdHMpKQorCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiUGFyaXR5IG1vZGUgbm90IHN1cHBvcnRlZCAiCisJCQkJCSJieSBkZXZpY2VcbiIpOworCX0KKworCWlmICgoY2ZsYWcgJiBDU1RPUEIpICE9IChvbGRfY2ZsYWcgJiBDU1RPUEIpKSB7CisJCWJpdHMgPSBjcDIxMDFfZ2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUyk7CisJCWJpdHMgJj0gfkJJVFNfU1RPUF9NQVNLOworCQlpZiAoY2ZsYWcgJiBDU1RPUEIpIHsKKwkJCWJpdHMgfD0gQklUU19TVE9QXzI7CisJCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMiIsIF9fRlVOQ1RJT05fXyk7CisJCX0gZWxzZSB7CisJCQliaXRzIHw9IEJJVFNfU1RPUF8xOworCQkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDEiLCBfX0ZVTkNUSU9OX18pOworCQl9CisJCWlmIChjcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgYml0cykpCisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJOdW1iZXIgb2Ygc3RvcCBiaXRzIHJlcXVlc3RlZCAiCisJCQkJCSJub3Qgc3VwcG9ydGVkIGJ5IGRldmljZVxuIik7CisJfQorfQorCitzdGF0aWMgdm9pZCBjcDIxMDFfYnJlYWtfY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpCit7CisJdTE2IHN0YXRlOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJaWYgKGJyZWFrX3N0YXRlID09IDApCisJCXN0YXRlID0gQlJFQUtfT0ZGOworCWVsc2UKKwkJc3RhdGUgPSBCUkVBS19PTjsKKwlkYmcoIiVzIC0gdHVybmluZyBicmVhayAlcyIsIF9fRlVOQ1RJT05fXywKKwkJCXN0YXRlPT1CUkVBS19PRkYgPyAib2ZmIiA6ICJvbiIpOworCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CUkVBSywgc3RhdGUpOworfQorCitzdGF0aWMgaW50IGNwMjEwMV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCS8qQ1AyMTAxIGJ1ZmZlcnMgYmVoYXZlIHN0cmFuZ2VseSB1bmxlc3MgZGV2aWNlIGlzIHJlc2V0Ki8KKwl1c2JfcmVzZXRfZGV2aWNlKHNlcmlhbC0+ZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3AyMTAxX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWludCBpOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBzdG9wIHJlYWRzIGFuZCB3cml0ZXMgb24gYWxsIHBvcnRzICovCisJZm9yIChpPTA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCWNwMjEwMV9jbGVhbnVwKHNlcmlhbC0+cG9ydFtpXSk7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBjcDIxMDFfaW5pdCAodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmY3AyMTAxX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsgLypGYWlsZWQgdG8gcmVnaXN0ZXIqLworCisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZjcDIxMDFfZHJpdmVyKTsKKwlpZiAocmV0dmFsKSB7CisJCS8qRmFpbGVkIHRvIHJlZ2lzdGVyKi8KKwkJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZjcDIxMDFfZGV2aWNlKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkvKlN1Y2Nlc3MqLworCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNwMjEwMV9leGl0ICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgmY3AyMTAxX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmY3AyMTAxX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KGNwMjEwMV9pbml0KTsKK21vZHVsZV9leGl0KGNwMjEwMV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIHZlcmJvc2UgZGVidWdnaW5nIG1lc3NhZ2VzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3liZXJqYWNrLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3liZXJqYWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZhMjA0YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeWJlcmphY2suYwpAQCAtMCwwICsxLDUxNCBAQAorLyoKKyAqICBSRUlORVIgU0NUIGN5YmVySmFjayBwaW5wYWQvZS1jb20gVVNCIENoaXBjYXJkIFJlYWRlciBEcml2ZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxICBSRUlORVIgU0NUCisgKiAgQXV0aG9yOiBNYXR0aGlhcyBCcnVlc3RsZQorICoKKyAqICBDb250YWN0OiBzdXBwb3J0QHJlaW5lci1zY3QuY29tIChzZWUgTUFJTlRBSU5FUlMpCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBsYXJnZWx5IGRlcml2ZWQgZnJvbSB3b3JrIGJ5IHRoZSBsaW51eC11c2IgZ3JvdXAKKyAqICBhbmQgYXNzb2NpYXRlZCBzb3VyY2UgZmlsZXMuICBQbGVhc2Ugc2VlIHRoZSB1c2Ivc2VyaWFsIGZpbGVzIGZvcgorICogIGluZGl2aWR1YWwgY3JlZGl0cyBhbmQgY29weXJpZ2h0cy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhhbmtzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pIGZvciBoaXMgaGVscCBhbmQKKyAqICBwYXRpZW5jZS4KKyAqCisgKiAgSW4gY2FzZSBvZiBwcm9ibGVtcywgcGxlYXNlIHdyaXRlIHRvIHRoZSBjb250YWN0IGUtbWFpbCBhZGRyZXNzCisgKiAgbWVudGlvbmVkIGFib3ZlLgorICoKKyAqICBQbGVhc2Ugbm90ZSB0aGF0IGxhdGVyIG1vZGVscyBvZiB0aGUgY3liZXJqYWNrIHJlYWRlciBmYW1pbHkgYXJlCisgKiAgc3VwcG9ydGVkIGJ5IGEgbGlidXNiLWJhc2VkIHVzZXJzcGFjZSBkZXZpY2UgZHJpdmVyLgorICoKKyAqICBIb21lcGFnZTogaHR0cDovL3d3dy5yZWluZXItc2N0LmRlL3N1cHBvcnQvdHJlaWJlcl9jeWJlcmphY2sucGhwI2xpbnV4CisgKi8KKworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisKKyNkZWZpbmUgQ1lCRVJKQUNLX0xPQ0FMX0JVRl9TSVpFIDMyCisKK3N0YXRpYyBpbnQgZGVidWc7CisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjAxIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJNYXR0aGlhcyBCcnVlc3RsZSIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlJFSU5FUiBTQ1QgY3liZXJKYWNrIHBpbnBhZC9lLWNvbSBVU0IgQ2hpcGNhcmQgUmVhZGVyIERyaXZlciIKKworCisjZGVmaW5lIENZQkVSSkFDS19WRU5ET1JfSUQJMHgwQzRCCisjZGVmaW5lIENZQkVSSkFDS19QUk9EVUNUX0lECTB4MDEwMAorCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCitzdGF0aWMgaW50IGN5YmVyamFja19zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIGN5YmVyamFja19zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50ICBjeWJlcmphY2tfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQgY3liZXJqYWNrX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50IGN5YmVyamFja193cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOworc3RhdGljIGludCBjeWJlcmphY2tfd3JpdGVfcm9vbSggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCApOworc3RhdGljIHZvaWQgY3liZXJqYWNrX3JlYWRfaW50X2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIGN5YmVyamFja19yZWFkX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgY3liZXJqYWNrX3dyaXRlX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKENZQkVSSkFDS19WRU5ET1JfSUQsIENZQkVSSkFDS19QUk9EVUNUX0lEKSB9LAorCXsgfQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGN5YmVyamFja19kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImN5YmVyamFjayIsCisJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBjeWJlcmphY2tfZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIlJlaW5lciBTQ1QgQ3liZXJqYWNrIFVTQiBjYXJkIHJlYWRlciIsCisJLnNob3J0X25hbWUgPQkJImN5YmVyamFjayIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luID0JMSwKKwkubnVtX2J1bGtfaW4gPQkJMSwKKwkubnVtX2J1bGtfb3V0ID0JCTEsCisJLm51bV9wb3J0cyA9CQkxLAorCS5hdHRhY2ggPQkJY3liZXJqYWNrX3N0YXJ0dXAsCisJLnNodXRkb3duID0JCWN5YmVyamFja19zaHV0ZG93biwKKwkub3BlbiA9CQkJY3liZXJqYWNrX29wZW4sCisJLmNsb3NlID0JCWN5YmVyamFja19jbG9zZSwKKwkud3JpdGUgPQkJY3liZXJqYWNrX3dyaXRlLAorCS53cml0ZV9yb29tID0JY3liZXJqYWNrX3dyaXRlX3Jvb20sCisJLnJlYWRfaW50X2NhbGxiYWNrID0JY3liZXJqYWNrX3JlYWRfaW50X2NhbGxiYWNrLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQljeWJlcmphY2tfcmVhZF9idWxrX2NhbGxiYWNrLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0JY3liZXJqYWNrX3dyaXRlX2J1bGtfY2FsbGJhY2ssCit9OworCitzdHJ1Y3QgY3liZXJqYWNrX3ByaXZhdGUgeworCXNwaW5sb2NrX3QJbG9jazsJCS8qIExvY2sgZm9yIFNNUCAqLworCXNob3J0CQlyZHRvZG87CQkvKiBCeXRlcyBzdGlsbCB0byByZWFkICovCisJdW5zaWduZWQgY2hhcgl3cmJ1Zls1KjY0XTsJLyogQnVmZmVyIGZvciBjb2xsZWN0aW5nIGRhdGEgdG8gd3JpdGUgKi8KKwlzaG9ydAkJd3JmaWxsZWQ7CS8qIE92ZXJhbGwgZGF0YSBzaXplIHdlIGFscmVhZHkgZ290ICovCisJc2hvcnQJCXdyc2VudDsJCS8qIERhdGEgYWxyZWFkeSBzZW50ICovCit9OworCisvKiBkbyBzb21lIHN0YXJ0dXAgYWxsb2NhdGlvbnMgbm90IGN1cnJlbnRseSBwZXJmb3JtZWQgYnkgdXNiX3NlcmlhbF9wcm9iZSgpICovCitzdGF0aWMgaW50IGN5YmVyamFja19zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBjeWJlcmphY2tfcHJpdmF0ZSAqcHJpdjsKKwlpbnQgaTsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJLyogYWxsb2NhdGUgdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgKi8KKwlwcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGN5YmVyamFja19wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIHNldCBpbml0aWFsIHZhbHVlcyAqLworCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKwlwcml2LT5yZHRvZG8gPSAwOworCXByaXYtPndyZmlsbGVkID0gMDsKKwlwcml2LT53cnNlbnQgPSAwOworCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0sIHByaXYpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmc2VyaWFsLT5wb3J0WzBdLT53cml0ZV93YWl0KTsKKworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCWludCByZXN1bHQ7CisJCXNlcmlhbC0+cG9ydFtpXS0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHNlcmlhbC0+cG9ydFtpXS0+aW50ZXJydXB0X2luX3VyYiwgCisJCQkJCUdGUF9LRVJORUwpOworCQlpZiAocmVzdWx0KQorCQkJZXJyKCIgdXNiX3N1Ym1pdF91cmIocmVhZCBpbnQpIGZhaWxlZCIpOworCQlkYmcoIiVzIC0gdXNiX3N1Ym1pdF91cmIoaW50IHVyYikiLCBfX0ZVTkNUSU9OX18pOworCX0KKworCXJldHVybiggMCApOworfQorCitzdGF0aWMgdm9pZCBjeWJlcmphY2tfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IGk7CisJCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlmb3IgKGk9MDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJdXNiX2tpbGxfdXJiKHNlcmlhbC0+cG9ydFtpXS0+aW50ZXJydXB0X2luX3VyYik7CisJCS8qIE15IHNwZWNpYWwgaXRlbXMsIHRoZSBzdGFuZGFyZCByb3V0aW5lcyBmcmVlIG15IHVyYnMgKi8KKwkJa2ZyZWUodXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSkpOworCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldLCBOVUxMKTsKKwl9Cit9CisJCitzdGF0aWMgaW50ICBjeWJlcmphY2tfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGN5YmVyamFja19wcml2YXRlICpwcml2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJlc3VsdCA9IDA7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWRiZygiJXMgLSB1c2JfY2xlYXJfaGFsdCIsIF9fRlVOQ1RJT05fXyApOworCXVzYl9jbGVhcl9oYWx0KHBvcnQtPnNlcmlhbC0+ZGV2LCBwb3J0LT53cml0ZV91cmItPnBpcGUpOworCisJLyogZm9yY2UgbG93X2xhdGVuY3kgb24gc28gdGhhdCBvdXIgdHR5X3B1c2ggYWN0dWFsbHkgZm9yY2VzCisJICogdGhlIGRhdGEgdGhyb3VnaCwgb3RoZXJ3aXNlIGl0IGlzIHNjaGVkdWxlZCwgYW5kIHdpdGggaGlnaAorCSAqIGRhdGEgcmF0ZXMgKGxpa2Ugd2l0aCBPSENJKSBkYXRhIGNhbiBnZXQgbG9zdC4KKwkgKi8KKwlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gMTsKKworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT5yZHRvZG8gPSAwOworCXByaXYtPndyZmlsbGVkID0gMDsKKwlwcml2LT53cnNlbnQgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGN5YmVyamFja19jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAocG9ydC0+c2VyaWFsLT5kZXYpIHsKKwkJLyogc2h1dGRvd24gYW55IGJ1bGsgcmVhZHMgdGhhdCBtaWdodCBiZSBnb2luZyBvbiAqLworCQl1c2Jfa2lsbF91cmIocG9ydC0+d3JpdGVfdXJiKTsKKwkJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY3liZXJqYWNrX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCBjeWJlcmphY2tfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXN1bHQ7CisJaW50IHdyZXhwZWN0ZWQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChjb3VudCA9PSAwKSB7CisJCWRiZygiJXMgLSB3cml0ZSByZXF1ZXN0IG9mIDAgYnl0ZXMiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gKDApOworCX0KKworCWlmIChwb3J0LT53cml0ZV91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJZGJnKCIlcyAtIGFscmVhZHkgd3JpdGluZyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAoMCk7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWlmKCAoY291bnQrcHJpdi0+d3JmaWxsZWQpPnNpemVvZihwcml2LT53cmJ1ZikgKSB7CisJCS8qIFRvIG11Y2ggZGF0YSBmb3IgYnVmZmVyLiBSZXNldCBidWZmZXIuICovCisJCXByaXYtPndyZmlsbGVkPTA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwkvKiBDb3B5IGRhdGEgKi8KKwltZW1jcHkgKHByaXYtPndyYnVmK3ByaXYtPndyZmlsbGVkLCBidWYsIGNvdW50KTsKKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCBjb3VudCwKKwkJcHJpdi0+d3JidWYrcHJpdi0+d3JmaWxsZWQpOworCXByaXYtPndyZmlsbGVkICs9IGNvdW50OworCisJaWYoIHByaXYtPndyZmlsbGVkID49IDMgKSB7CisJCXdyZXhwZWN0ZWQgPSAoKGludClwcml2LT53cmJ1ZlsyXTw8OCkrcHJpdi0+d3JidWZbMV0rMzsKKwkJZGJnKCIlcyAtIGV4cGVjdGVkIGRhdGE6ICVkIiwgX19GVU5DVElPTl9fLCB3cmV4cGVjdGVkKTsKKwl9IGVsc2UgeworCQl3cmV4cGVjdGVkID0gc2l6ZW9mKHByaXYtPndyYnVmKTsKKwl9CisKKwlpZiggcHJpdi0+d3JmaWxsZWQgPj0gd3JleHBlY3RlZCApIHsKKwkJLyogV2UgaGF2ZSBlbm91Z2ggZGF0YSB0byBiZWdpbiB0cmFuc21pc3Npb24gKi8KKwkJaW50IGxlbmd0aDsKKworCQlkYmcoIiVzIC0gdHJhbnNtaXR0aW5nIGRhdGEgKGZyYW1lIDEpIiwgX19GVU5DVElPTl9fKTsKKwkJbGVuZ3RoID0gKHdyZXhwZWN0ZWQgPiBwb3J0LT5idWxrX291dF9zaXplKSA/IHBvcnQtPmJ1bGtfb3V0X3NpemUgOiB3cmV4cGVjdGVkOworCisJCW1lbWNweSAocG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIHByaXYtPndyYnVmLCBsZW5ndGggKTsKKwkJcHJpdi0+d3JzZW50PWxlbmd0aDsKKworCQkvKiBzZXQgdXAgb3VyIHVyYiAqLworCQl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT53cml0ZV91cmIsIHNlcmlhbC0+ZGV2LCAKKwkJCSAgICAgIHVzYl9zbmRidWxrcGlwZShzZXJpYWwtPmRldiwgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgICAgIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBsZW5ndGgsCisJCQkgICAgICAoKHNlcmlhbC0+dHlwZS0+d3JpdGVfYnVsa19jYWxsYmFjaykgPyAKKwkJCSAgICAgICBzZXJpYWwtPnR5cGUtPndyaXRlX2J1bGtfY2FsbGJhY2sgOiAKKwkJCSAgICAgICBjeWJlcmphY2tfd3JpdGVfYnVsa19jYWxsYmFjayksIAorCQkJICAgICAgcG9ydCk7CisKKwkJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGJ1bGsgcG9ydCAqLworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0KSB7CisJCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJCS8qIFRocm93IGF3YXkgZGF0YS4gTm8gYmV0dGVyIGlkZWEgd2hhdCB0byBkbyB3aXRoIGl0LiAqLworCQkJcHJpdi0+d3JmaWxsZWQ9MDsKKwkJCXByaXYtPndyc2VudD0wOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlkYmcoIiVzIC0gcHJpdi0+d3JzZW50PSVkIiwgX19GVU5DVElPTl9fLHByaXYtPndyc2VudCk7CisJCWRiZygiJXMgLSBwcml2LT53cmZpbGxlZD0lZCIsIF9fRlVOQ1RJT05fXyxwcml2LT53cmZpbGxlZCk7CisKKwkJaWYoIHByaXYtPndyc2VudD49cHJpdi0+d3JmaWxsZWQgKSB7CisJCQlkYmcoIiVzIC0gYnVmZmVyIGNsZWFuZWQiLCBfX0ZVTkNUSU9OX18pOworCQkJbWVtc2V0KCBwcml2LT53cmJ1ZiwgMCwgc2l6ZW9mKHByaXYtPndyYnVmKSApOworCQkJcHJpdi0+d3JmaWxsZWQ9MDsKKwkJCXByaXYtPndyc2VudD0wOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIChjb3VudCk7Cit9IAorCitzdGF0aWMgaW50IGN5YmVyamFja193cml0ZV9yb29tKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ICkKK3sKKwlyZXR1cm4gQ1lCRVJKQUNLX0xPQ0FMX0JVRl9TSVpFOworfQorCitzdGF0aWMgdm9pZCBjeWJlcmphY2tfcmVhZF9pbnRfY2FsbGJhY2soIHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MgKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgY3liZXJqYWNrX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIHRoZSB1cmIgbWlnaHQgaGF2ZSBiZWVuIGtpbGxlZC4gKi8KKwlpZiAodXJiLT5zdGF0dXMpCisJCXJldHVybjsKKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCisJLyogUmVhY3Qgb25seSB0byBpbnRlcnJ1cHRzIHNpZ25hbGluZyBhIGJ1bGtfaW4gdHJhbnNmZXIgKi8KKwlpZiggKHVyYi0+YWN0dWFsX2xlbmd0aD09NCkgJiYgKGRhdGFbMF09PTB4MDEpICkgeworCQlzaG9ydCBvbGRfcmR0b2RvOworCQlpbnQgcmVzdWx0OworCisJCS8qIFRoaXMgaXMgYSBhbm5vdW5jZW1lbnQgb2YgY29taW5nIGJ1bGtfaW5zLiAqLworCQl1bnNpZ25lZCBzaG9ydCBzaXplID0gKCh1bnNpZ25lZCBzaG9ydClkYXRhWzNdPDw4KStkYXRhWzJdKzM7CisKKwkJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKworCQlvbGRfcmR0b2RvID0gcHJpdi0+cmR0b2RvOworCisJCWlmKCAob2xkX3JkdG9kbytzaXplKTwob2xkX3JkdG9kbykgKSB7CisJCQlkYmcoICJUbyBtYW55IGJ1bGtfaW4gdXJicyB0byBkby4iICk7CisJCQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJCQlnb3RvIHJlc3VibWl0OworCQl9CisKKwkJLyogIis9IiBpcyBwcm9iYWJseSBtb3JlIGZhdWx0IHRvbGxlcmFudCB0aGFuICI9IiAqLworCQlwcml2LT5yZHRvZG8gKz0gc2l6ZTsKKworCQlkYmcoIiVzIC0gcmR0b2RvOiAlZCIsIF9fRlVOQ1RJT05fXywgcHJpdi0+cmR0b2RvKTsKKworCQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisKKwkJaWYoICFvbGRfcmR0b2RvICkgeworCQkJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCQkJaWYoIHJlc3VsdCApCisJCQkJZXJyKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHJlYWQgdXJiKSIsIF9fRlVOQ1RJT05fXyk7CisJCX0KKwl9CisKK3Jlc3VibWl0OgorCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQpCisJCWVycigiIHVzYl9zdWJtaXRfdXJiKHJlYWQgaW50KSBmYWlsZWQiKTsKKwlkYmcoIiVzIC0gdXNiX3N1Ym1pdF91cmIoaW50IHVyYikiLCBfX0ZVTkNUSU9OX18pOworfQorCitzdGF0aWMgdm9pZCBjeWJlcmphY2tfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgY3liZXJqYWNrX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc2hvcnQgdG9kbzsKKwlpbnQgaTsKKwlpbnQgcmVzdWx0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwl0dHkgPSBwb3J0LT50dHk7CisJaWYgKCF0dHkpIHsKKwkJZGJnKCIlcyAtIGlnbm9yaW5nIHNpbmNlIGRldmljZSBub3Qgb3BlblxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCWZvciAoaSA9IDA7IGkgPCB1cmItPmFjdHVhbF9sZW5ndGggOyArK2kpIHsKKwkJCS8qIGlmIHdlIGluc2VydCBtb3JlIHRoYW4gVFRZX0ZMSVBCVUZfU0laRSBjaGFyYWN0ZXJzLCB3ZSBkcm9wIHRoZW0uICovCisJCQlpZih0dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkgeworCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQl9CisJCQkvKiB0aGlzIGRvZXNuJ3QgYWN0dWFsbHkgcHVzaCB0aGUgZGF0YSB0aHJvdWdoIHVubGVzcyB0dHktPmxvd19sYXRlbmN5IGlzIHNldCAqLworCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCAwKTsKKwkJfQorCSAgCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJfQorCisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKworCS8qIFJlZHVjZSB1cmJzIHRvIGRvIGJ5IG9uZS4gKi8KKwlwcml2LT5yZHRvZG8tPXVyYi0+YWN0dWFsX2xlbmd0aDsKKwkvKiBKdXN0IHRvIGJlIHN1cmUgKi8KKwlpZiAoIHByaXYtPnJkdG9kbzwwICkgcHJpdi0+cmR0b2RvID0gMDsKKwl0b2RvID0gcHJpdi0+cmR0b2RvOworCisJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCisJZGJnKCIlcyAtIHJkdG9kbzogJWQiLCBfX0ZVTkNUSU9OX18sIHRvZG8pOworCisJLyogQ29udGludWUgdG8gcmVhZCBpZiB3ZSBoYXZlIHN0aWxsIHVyYnMgdG8gZG8uICovCisJaWYoIHRvZG8gLyogfHwgKHVyYi0+YWN0dWFsX2xlbmd0aD09cG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpKi8gKSB7CisJCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0KQorCQkJZXJyKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQlkYmcoIiVzIC0gdXNiX3N1Ym1pdF91cmIocmVhZCB1cmIpIiwgX19GVU5DVElPTl9fKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGN5YmVyamFja193cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgY3liZXJqYWNrX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2soJnByaXYtPmxvY2spOworCisJLyogb25seSBkbyBzb21ldGhpbmcgaWYgd2UgaGF2ZSBtb3JlIGRhdGEgdG8gc2VuZCAqLworCWlmKCBwcml2LT53cmZpbGxlZCApIHsKKwkJaW50IGxlbmd0aCwgYmxrc2l6ZSwgcmVzdWx0OworCisJCWlmIChwb3J0LT53cml0ZV91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJCWRiZygiJXMgLSBhbHJlYWR5IHdyaXRpbmciLCBfX0ZVTkNUSU9OX18pOworCQkJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCQkJcmV0dXJuOworCQl9CisKKwkJZGJnKCIlcyAtIHRyYW5zbWl0dGluZyBkYXRhIChmcmFtZSBuKSIsIF9fRlVOQ1RJT05fXyk7CisKKwkJbGVuZ3RoID0gKChwcml2LT53cmZpbGxlZCAtIHByaXYtPndyc2VudCkgPiBwb3J0LT5idWxrX291dF9zaXplKSA/CisJCQlwb3J0LT5idWxrX291dF9zaXplIDogKHByaXYtPndyZmlsbGVkIC0gcHJpdi0+d3JzZW50KTsKKworCQltZW1jcHkgKHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBwcml2LT53cmJ1ZiArIHByaXYtPndyc2VudCwKKwkJCWxlbmd0aCApOworCQlwcml2LT53cnNlbnQrPWxlbmd0aDsKKworCQkvKiBzZXQgdXAgb3VyIHVyYiAqLworCQl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT53cml0ZV91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJCSAgICAgIHVzYl9zbmRidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgICAgIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBsZW5ndGgsCisJCQkgICAgICAoKHBvcnQtPnNlcmlhbC0+dHlwZS0+d3JpdGVfYnVsa19jYWxsYmFjaykgPyAKKwkJCSAgICAgICBwb3J0LT5zZXJpYWwtPnR5cGUtPndyaXRlX2J1bGtfY2FsbGJhY2sgOiAKKwkJCSAgICAgICBjeWJlcmphY2tfd3JpdGVfYnVsa19jYWxsYmFjayksIAorCQkJICAgICAgcG9ydCk7CisKKwkJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGJ1bGsgcG9ydCAqLworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0KSB7CisJCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJCS8qIFRocm93IGF3YXkgZGF0YS4gTm8gYmV0dGVyIGlkZWEgd2hhdCB0byBkbyB3aXRoIGl0LiAqLworCQkJcHJpdi0+d3JmaWxsZWQ9MDsKKwkJCXByaXYtPndyc2VudD0wOworCQkJZ290byBleGl0OworCQl9CisKKwkJZGJnKCIlcyAtIHByaXYtPndyc2VudD0lZCIsIF9fRlVOQ1RJT05fXyxwcml2LT53cnNlbnQpOworCQlkYmcoIiVzIC0gcHJpdi0+d3JmaWxsZWQ9JWQiLCBfX0ZVTkNUSU9OX18scHJpdi0+d3JmaWxsZWQpOworCisJCWJsa3NpemUgPSAoKGludClwcml2LT53cmJ1ZlsyXTw8OCkrcHJpdi0+d3JidWZbMV0rMzsKKworCQlpZiggKHByaXYtPndyc2VudD49cHJpdi0+d3JmaWxsZWQpIHx8IChwcml2LT53cnNlbnQ+PWJsa3NpemUpICkgeworCQkJZGJnKCIlcyAtIGJ1ZmZlciBjbGVhbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJCW1lbXNldCggcHJpdi0+d3JidWYsIDAsIHNpemVvZihwcml2LT53cmJ1ZikgKTsKKwkJCXByaXYtPndyZmlsbGVkPTA7CisJCQlwcml2LT53cnNlbnQ9MDsKKwkJfQorCX0KKworZXhpdDoKKwlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJc2NoZWR1bGVfd29yaygmcG9ydC0+d29yayk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGN5YmVyamFja19pbml0ICh2b2lkKQoreworCWludCByZXR2YWw7CisJcmV0dmFsICA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmN5YmVyamFja19kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZjeWJlcmphY2tfZHJpdmVyKTsKKwlpZiAocmV0dmFsKSAKKwkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOworCisJaW5mbyhEUklWRVJfVkVSU0lPTiAiICIgRFJJVkVSX0FVVEhPUik7CisJaW5mbyhEUklWRVJfREVTQyk7CisKKwlyZXR1cm4gMDsKK2ZhaWxlZF91c2JfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZjeWJlcmphY2tfZGV2aWNlKTsKK2ZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjeWJlcmphY2tfZXhpdCAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlciAoJmN5YmVyamFja19kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmN5YmVyamFja19kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChjeWJlcmphY2tfaW5pdCk7Cittb2R1bGVfZXhpdChjeWJlcmphY2tfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9WRVJTSU9OKCBEUklWRVJfVkVSU0lPTiApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI4ZjQ3MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKQEAgLTAsMCArMSwxNTM4IEBACisvKgorICogVVNCIEN5cHJlc3MgTTggZHJpdmVyCisgKgorICogCUNvcHlyaWdodCAoQykgMjAwNAorICogCSAgICBMb25uaWUgTWVuZGV6IChkaWdub21lQGdtYWlsLmNvbSkgCisgKglDb3B5cmlnaHQgKEMpIDIwMDMsMjAwNAorICoJICAgIE5laWwgV2hlbGNoZWwgKGtveWFtYUBmaXJzdGxpZ2h0Lm5ldCkKKyAqCisgKiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIAlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcyBkcml2ZXIKKyAqCisgKiBTZWUgaHR0cDovL2dlb2NpdGllcy5jb20vaTB4b3gwaSBmb3IgaW5mb3JtYXRpb24gb24gdGhpcyBkcml2ZXIgYW5kIHRoZQorICogZWFydGhtYXRlIHVzYiBkZXZpY2UuCisgKgorICoKKyAqICBMb25uaWUgTWVuZGV6IDxkaWdub21lQGdtYWlsLmNvbT4KKyAqICAxMi0xNS0yMDA0CisgKglJbmNvcnBvcmF0ZWQgd3JpdGUgYnVmZmVyaW5nIGZyb20gcGwyMzAzIGRyaXZlci4gIEZpeGVkIGJ1ZyB3aXRoIGxpbmUKKyAqCWhhbmRsaW5nIHNvIGJvdGggbGluZXMgYXJlIHJhaXNlZCBpbiBjeXByZXNzX29wZW4uICh3YXMgZHJvcHBpbmcgcnRzKQorICogICAgICBWYXJpb3VzIGNvZGUgY2xlYW51cHMgbWFkZSBhcyB3ZWxsIGFsb25nIHdpdGggb3RoZXIgbWlzYyBidWcgZml4ZXMuCisgKgorICogIExvbm5pZSBNZW5kZXogPGRpZ25vbWVAZ21haWwuY29tPgorICogIDA0LTEwLTIwMDQKKyAqCURyaXZlciBtb2RpZmllZCB0byBzdXBwb3J0IGR5bmFtaWMgbGluZSBzZXR0aW5ncy4gIFZhcmlvdXMgaW1wcm92bWVudHMKKyAqICAgICAgYW5kIGZlYXR1cmVzLgorICoKKyAqICBOZWlsIFdoZWxjaGVsCisgKiAgMTAtMjAwMworICoJRHJpdmVyIGZpcnN0IHJlbGVhc2VkLgorICoKKyAqCisgKiBMb25nIFRlcm0gVE9ETzoKKyAqCUltcHJvdmUgdHJhbnNmZXIgc3BlZWRzIC0gYm90aCByZWFkL3dyaXRlIGFyZSBzb21ld2hhdCBzbG93CisgKiAgIGF0IHRoaXMgcG9pbnQuCisgKiAgICAgIEltcHJvdmUgZGVidWdnaW5nLiAgU2hvdyBtb2RlbSBsaW5lIHN0YXR1cyB3aXRoIGRlYnVnIG91dHB1dCBhbmQKKyAqICAgaW1wbGVtZW50IGZpbHRlcmluZyBmb3IgY2VydGFpbiBkYXRhIGFzIGEgbW9kdWxlIHBhcmFtZXRlci4KKyAqLworCisvKiBUaGFua3MgdG8gTmVpbCBXaGVsY2hlbCBmb3Igd3JpdGluZyB0aGUgZmlyc3QgY3lwcmVzcyBtOCBpbXBsZW1lbnRhdGlvbiBmb3IgbGludXguICovCisvKiBUaGFua3MgdG8gY3lwcmVzcyBmb3IgcHJvdmlkaW5nIHJlZmVyZW5jZXMgZm9yIHRoZSBoaWQgcmVwb3J0cy4gKi8KKy8qIFRoYW5rcyB0byBKaWFuZyBaaGFuZyBmb3IgcHJvdmlkaW5nIGxpbmtzIGFuZCBmb3IgZ2VuZXJhbCBoZWxwLiAqLworLyogQ29kZSBvcmlnaW5hdGVzIGFuZCB3YXMgYnVpbHQgdXAgZnJvbSBmdGRpX3NpbywgYmVsa2luLCBwbDIzMDMgYW5kIG90aGVycy4gKi8KKworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisjaW5jbHVkZSAiY3lwcmVzc19tOC5oIgorCisKKyNpZmRlZiBDT05GSUdfVVNCX1NFUklBTF9ERUJVRworCXN0YXRpYyBpbnQgZGVidWcgPSAxOworI2Vsc2UKKwlzdGF0aWMgaW50IGRlYnVnOworI2VuZGlmCitzdGF0aWMgaW50IHN0YXRzOworCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS4wOCIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiTG9ubmllIE1lbmRleiA8ZGlnbm9tZUBnbWFpbC5jb20+LCBOZWlsIFdoZWxjaGVsIDxrb3lhbWFAZmlyc3RsaWdodC5uZXQ+IgorI2RlZmluZSBEUklWRVJfREVTQyAiQ3lwcmVzcyBVU0IgdG8gU2VyaWFsIERyaXZlciIKKworLyogd3JpdGUgYnVmZmVyIHNpemUgZGVmaW5lcyAqLworI2RlZmluZSBDWVBSRVNTX0JVRl9TSVpFCTEwMjQKKyNkZWZpbmUgQ1lQUkVTU19DTE9TSU5HX1dBSVQJKDMwKkhaKQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfZWFydGhtYXRlIFtdID0geworCXsgVVNCX0RFVklDRShWRU5ET1JfSURfREVMT1JNRSwgUFJPRFVDVF9JRF9FQVJUSE1BVEVVU0IpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jeXBoaWRjb21yczIzMiBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVkVORE9SX0lEX0NZUFJFU1MsIFBST0RVQ1RfSURfQ1lQSElEQ09NKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfY29tYmluZWQgW10gPSB7CisJeyBVU0JfREVWSUNFKFZFTkRPUl9JRF9ERUxPUk1FLCBQUk9EVUNUX0lEX0VBUlRITUFURVVTQikgfSwKKwl7IFVTQl9ERVZJQ0UoVkVORE9SX0lEX0NZUFJFU1MsIFBST0RVQ1RfSURfQ1lQSElEQ09NKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlX2NvbWJpbmVkKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGN5cHJlc3NfZHJpdmVyID0geworCS5uYW1lID0JCSJjeXByZXNzIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlX2NvbWJpbmVkLAorfTsKKworc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSB7CisJc3BpbmxvY2tfdCBsb2NrOwkJICAgLyogcHJpdmF0ZSBsb2NrICovCisJaW50IGNoaXB0eXBlOwkJCSAgIC8qIGlkZW50aWZpZXIgb2YgZGV2aWNlLCBmb3IgcXVpcmtzL2V0YyAqLworCWludCBieXRlc19pbjsJCQkgICAvKiB1c2VkIGZvciBzdGF0aXN0aWNzICovCisJaW50IGJ5dGVzX291dDsJCQkgICAvKiB1c2VkIGZvciBzdGF0aXN0aWNzICovCisJaW50IGNtZF9jb3VudDsJCQkgICAvKiB1c2VkIGZvciBzdGF0aXN0aWNzICovCisJaW50IGNtZF9jdHJsOwkJCSAgIC8qIGFsd2F5cyBzZXQgdGhpcyB0byAxIGJlZm9yZSBpc3N1aW5nIGEgY29tbWFuZCAqLworCXN0cnVjdCBjeXByZXNzX2J1ZiAqYnVmOwkgICAvKiB3cml0ZSBidWZmZXIgKi8KKwlpbnQgd3JpdGVfdXJiX2luX3VzZTsJCSAgIC8qIHdyaXRlIHVyYiBpbiB1c2UgaW5kaWNhdG9yICovCisJaW50IHRlcm1pb3NfaW5pdGlhbGl6ZWQ7CisJX191OCBsaW5lX2NvbnRyb2w7CSAgIAkgICAvKiBob2xkcyBkdHIgLyBydHMgdmFsdWUgKi8KKwlfX3U4IGN1cnJlbnRfc3RhdHVzOwkgICAJICAgLyogcmVjZWl2ZWQgZnJvbSBsYXN0IHJlYWQgLSBpbmZvIG9uIGRzcixjdHMsY2QscmksZXRjICovCisJX191OCBjdXJyZW50X2NvbmZpZzsJICAgCSAgIC8qIHN0b3JlcyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGJ5dGUgKi8KKwlfX3U4IHJ4X2ZsYWdzOwkJCSAgIC8qIHRocm90dGxpbmcgLSB1c2VkIGZyb20gd2hpdGVoZWF0L2Z0ZGlfc2lvICovCisJaW50IGJhdWRfcmF0ZTsJCQkgICAvKiBzdG9yZXMgY3VycmVudCBiYXVkIHJhdGUgaW4gaW50ZWdlciBmb3JtICovCisJaW50IGNicl9tYXNrOwkJCSAgIC8qIHN0b3JlcyBjdXJyZW50IGJhdWQgcmF0ZSBpbiBtYXNrZWQgZm9ybSAqLworCWludCBpc3Rocm90dGxlZDsJCSAgIC8qIGlmIHRocm90dGxlZCwgZGlzY2FyZCByZWFkcyAqLworCXdhaXRfcXVldWVfaGVhZF90IGRlbHRhX21zcl93YWl0OyAgLyogdXNlZCBmb3IgVElPQ01JV0FJVCAqLworCWNoYXIgcHJldl9zdGF0dXMsIGRpZmZfc3RhdHVzOwkgICAvKiB1c2VkIGZvciBUSU9DTUlXQUlUICovCisJLyogd2UgcGFzcyBhIHBvaW50ZXIgdG8gdGhpcyBhcyB0aGUgYXJndWVtZW50IHNlbnQgdG8gY3lwcmVzc19zZXRfdGVybWlvcyBvbGRfdGVybWlvcyAqLworCXN0cnVjdCB0ZXJtaW9zIHRtcF90ZXJtaW9zOyAJICAgLyogc3RvcmVzIHRoZSBvbGQgdGVybWlvcyBzZXR0aW5ncyAqLworCWNoYXIgY2FsbGVkZnJvbW9wZW47CQkgICAvKiB1c2VkIHdoZW4gaXNzdWluZyBsaW5lcyBvbiBvcGVuIC0gZml4ZXMgcnRzIGRyb3AgYnVnICovCit9OworCisvKiB3cml0ZSBidWZmZXIgc3RydWN0dXJlICovCitzdHJ1Y3QgY3lwcmVzc19idWYgeworCXVuc2lnbmVkIGludAlidWZfc2l6ZTsKKwljaGFyCQkqYnVmX2J1ZjsKKwljaGFyCQkqYnVmX2dldDsKKwljaGFyCQkqYnVmX3B1dDsKK307CisKKy8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHRoZSBDeXByZXNzIFVTQiB0byBzZXJpYWwgZGV2aWNlICovCitzdGF0aWMgaW50ICBjeXByZXNzX2VhcnRobWF0ZV9zdGFydHVwCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIGN5cHJlc3NfaGlkY29tX3N0YXJ0dXAJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIHZvaWQgY3lwcmVzc19zaHV0ZG93bgkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgY3lwcmVzc19vcGVuCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQgY3lwcmVzc19jbG9zZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIGN5cHJlc3Nfd3JpdGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CitzdGF0aWMgdm9pZCBjeXByZXNzX3NlbmQJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgIGN5cHJlc3Nfd3JpdGVfcm9vbQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCAgY3lwcmVzc19pb2N0bAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIHZvaWQgY3lwcmVzc19zZXRfdGVybWlvcwkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICogb2xkKTsKK3N0YXRpYyBpbnQgIGN5cHJlc3NfdGlvY21nZXQJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50ICBjeXByZXNzX3Rpb2Ntc2V0CQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CitzdGF0aWMgaW50ICBjeXByZXNzX2NoYXJzX2luX2J1ZmZlcgkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBjeXByZXNzX3Rocm90dGxlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBjeXByZXNzX3VudGhyb3R0bGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIGN5cHJlc3NfcmVhZF9pbnRfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgY3lwcmVzc193cml0ZV9pbnRfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworLyogYmF1ZCBoZWxwZXIgZnVuY3Rpb25zICovCitzdGF0aWMgaW50CSBtYXNrX3RvX3JhdGUJCSh1bnNpZ25lZCBtYXNrKTsKK3N0YXRpYyB1bnNpZ25lZCAgcmF0ZV90b19tYXNrCQkoaW50IHJhdGUpOworLyogd3JpdGUgYnVmZmVyIGZ1bmN0aW9ucyAqLworc3RhdGljIHN0cnVjdCBjeXByZXNzX2J1ZiAqY3lwcmVzc19idWZfYWxsb2ModW5zaWduZWQgaW50IHNpemUpOworc3RhdGljIHZvaWQgCQkgIGN5cHJlc3NfYnVmX2ZyZWUoc3RydWN0IGN5cHJlc3NfYnVmICpjYik7CitzdGF0aWMgdm9pZAkJICBjeXByZXNzX2J1Zl9jbGVhcihzdHJ1Y3QgY3lwcmVzc19idWYgKmNiKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJICBjeXByZXNzX2J1Zl9kYXRhX2F2YWlsKHN0cnVjdCBjeXByZXNzX2J1ZiAqY2IpOworc3RhdGljIHVuc2lnbmVkIGludAkgIGN5cHJlc3NfYnVmX3NwYWNlX2F2YWlsKHN0cnVjdCBjeXByZXNzX2J1ZiAqY2IpOworc3RhdGljIHVuc2lnbmVkIGludAkgIGN5cHJlc3NfYnVmX3B1dChzdHJ1Y3QgY3lwcmVzc19idWYgKmNiLCBjb25zdCBjaGFyICpidWYsCisJCQkJCSAgdW5zaWduZWQgaW50IGNvdW50KTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJICBjeXByZXNzX2J1Zl9nZXQoc3RydWN0IGN5cHJlc3NfYnVmICpjYiwgY2hhciAqYnVmLAorCQkJCQkgIHVuc2lnbmVkIGludCBjb3VudCk7CisKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGN5cHJlc3NfZWFydGhtYXRlX2RldmljZSA9IHsKKwkub3duZXIgPQkJCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkJIkRlTG9ybWUgRWFydGhtYXRlIFVTQiIsCisJLnNob3J0X25hbWUgPQkJCSJlYXJ0aG1hdGUiLAorCS5pZF90YWJsZSA9CQkJaWRfdGFibGVfZWFydGhtYXRlLAorCS5udW1faW50ZXJydXB0X2luID0gCQkxLAorCS5udW1faW50ZXJydXB0X291dCA9CQkxLAorCS5udW1fYnVsa19pbiA9CQkJTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfb3V0ID0JCQlOVU1fRE9OVF9DQVJFLAorCS5udW1fcG9ydHMgPQkJCTEsCisJLmF0dGFjaCA9CQkJY3lwcmVzc19lYXJ0aG1hdGVfc3RhcnR1cCwKKwkuc2h1dGRvd24gPQkJCWN5cHJlc3Nfc2h1dGRvd24sCisJLm9wZW4gPQkJCQljeXByZXNzX29wZW4sCisJLmNsb3NlID0JCQljeXByZXNzX2Nsb3NlLAorCS53cml0ZSA9CQkJY3lwcmVzc193cml0ZSwKKwkud3JpdGVfcm9vbSA9CQkJY3lwcmVzc193cml0ZV9yb29tLAorCS5pb2N0bCA9CQkJY3lwcmVzc19pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkJCWN5cHJlc3Nfc2V0X3Rlcm1pb3MsCisJLnRpb2NtZ2V0ID0JCQljeXByZXNzX3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9CQkJY3lwcmVzc190aW9jbXNldCwKKwkuY2hhcnNfaW5fYnVmZmVyID0JCWN5cHJlc3NfY2hhcnNfaW5fYnVmZmVyLAorCS50aHJvdHRsZSA9CQkgCWN5cHJlc3NfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUgPQkJCWN5cHJlc3NfdW50aHJvdHRsZSwKKwkucmVhZF9pbnRfY2FsbGJhY2sgPQkJY3lwcmVzc19yZWFkX2ludF9jYWxsYmFjaywKKwkud3JpdGVfaW50X2NhbGxiYWNrID0JCWN5cHJlc3Nfd3JpdGVfaW50X2NhbGxiYWNrLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGN5cHJlc3NfaGlkY29tX2RldmljZSA9IHsKKwkub3duZXIgPQkJCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkJIkhJRC0+Q09NIFJTMjMyIEFkYXB0ZXIiLAorCS5zaG9ydF9uYW1lID0JCQkiY3lwaGlkY29tIiwKKwkuaWRfdGFibGUgPQkJCWlkX3RhYmxlX2N5cGhpZGNvbXJzMjMyLAorCS5udW1faW50ZXJydXB0X2luID0JCTEsCisJLm51bV9pbnRlcnJ1cHRfb3V0ID0JCTEsCisJLm51bV9idWxrX2luID0JCQlOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19vdXQgPQkJCU5VTV9ET05UX0NBUkUsCisJLm51bV9wb3J0cyA9CQkJMSwKKwkuYXR0YWNoID0JCQljeXByZXNzX2hpZGNvbV9zdGFydHVwLAorCS5zaHV0ZG93biA9CQkJY3lwcmVzc19zaHV0ZG93biwKKwkub3BlbiA9CQkJCWN5cHJlc3Nfb3BlbiwKKwkuY2xvc2UgPQkJCWN5cHJlc3NfY2xvc2UsCisJLndyaXRlID0JCQljeXByZXNzX3dyaXRlLAorCS53cml0ZV9yb29tID0JCQljeXByZXNzX3dyaXRlX3Jvb20sCisJLmlvY3RsID0JCQljeXByZXNzX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQkJY3lwcmVzc19zZXRfdGVybWlvcywKKwkudGlvY21nZXQgPQkJCWN5cHJlc3NfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0JCQljeXByZXNzX3Rpb2Ntc2V0LAorCS5jaGFyc19pbl9idWZmZXIgPQkJY3lwcmVzc19jaGFyc19pbl9idWZmZXIsCisJLnRocm90dGxlID0JCQljeXByZXNzX3Rocm90dGxlLAorCS51bnRocm90dGxlID0JCQljeXByZXNzX3VudGhyb3R0bGUsCisJLnJlYWRfaW50X2NhbGxiYWNrID0JCWN5cHJlc3NfcmVhZF9pbnRfY2FsbGJhY2ssCisJLndyaXRlX2ludF9jYWxsYmFjayA9CQljeXByZXNzX3dyaXRlX2ludF9jYWxsYmFjaywKK307CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDeXByZXNzIHNlcmlhbCBoZWxwZXIgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyogVGhpcyBmdW5jdGlvbiBjYW4gZWl0aGVyIHNldCBvciByZXRyZWl2ZSB0aGUgY3VycmVudCBzZXJpYWwgbGluZSBzZXR0aW5ncyAqLworc3RhdGljIGludCBjeXByZXNzX3NlcmlhbF9jb250cm9sIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBiYXVkX21hc2ssIGludCBkYXRhX2JpdHMsIGludCBzdG9wX2JpdHMsCisJCQkJICAgaW50IHBhcml0eV9lbmFibGUsIGludCBwYXJpdHlfdHlwZSwgaW50IHJlc2V0LCBpbnQgY3lwcmVzc19yZXF1ZXN0X3R5cGUpCit7CisJaW50IGksIG5fYmF1ZF9yYXRlID0gMCwgcmV0dmFsID0gMDsKKwlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2OworCV9fdTggZmVhdHVyZV9idWZmZXJbNV07CisJX191OCBjb25maWc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCQorCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlzd2l0Y2goY3lwcmVzc19yZXF1ZXN0X3R5cGUpIHsKKwkJY2FzZSBDWVBSRVNTX1NFVF9DT05GSUc6CisKKwkJCS8qCisJCQkgKiBUaGUgZ2VuZXJhbCBwdXJwb3NlIGZpcm13YXJlIGZvciB0aGUgQ3lwcmVzcyBNOCBhbGxvd3MgZm9yIGEgbWF4aW11bSBzcGVlZAorIAkJCSAqIG9mIDU3NjAwYnBzIChJIGhhdmUgbm8gaWRlYSB3aGV0aGVyIERlTG9ybWUgY2hvc2UgdG8gdXNlIHRoZSBnZW5lcmFsIHB1cnBvc2UKKwkJCSAqIGZpcm13YXJlIG9yIG5vdCksIGlmIHlvdSBuZWVkIHRvIG1vZGlmeSB0aGlzIHNwZWVkIHNldHRpbmcgZm9yIHlvdXIgb3duCisJCQkgKiBwcm9qZWN0IHBsZWFzZSBhZGQgeW91ciBvd24gY2hpcHR5cGUgYW5kIG1vZGlmeSB0aGUgY29kZSBsaWtld2lzZS4gIFRoZQorCQkJICogQ3lwcmVzcyBISUQtPkNPTSBkZXZpY2Ugd2lsbCB3b3JrIHN1Y2Nlc3NmdWxseSB1cCB0byAxMTUyMDBicHMuCisJCQkgKi8KKwkJCWlmIChiYXVkX21hc2sgIT0gcHJpdi0+Y2JyX21hc2spIHsKKwkJCQlkYmcoIiVzIC0gYmF1ZCByYXRlIGlzIGNoYW5naW5nIiwgX19GVU5DVElPTl9fKTsKKwkJCQlpZiAoIHByaXYtPmNoaXB0eXBlID09IENUX0VBUlRITUFURSApIHsKKwkJCQkJLyogMzAwIGFuZCA2MDAgYmF1ZCByYXRlcyBhcmUgc3VwcG9ydGVkIHVuZGVyIHRoZSBnZW5lcmljIGZpcm13YXJlLAorCQkJCQkgKiBidXQgYXJlIG5vdCB1c2VkIHdpdGggTk1FQSBhbmQgU2lSRiBwcm90b2NvbHMgKi8KKwkJCQkJCisJCQkJCWlmICggKGJhdWRfbWFzayA9PSBCMzAwKSB8fCAoYmF1ZF9tYXNrID09IEI2MDApICkgeworCQkJCQkJZXJyKCIlcyAtIGZhaWxlZCBzZXR0aW5nIGJhdWQgcmF0ZSwgdW5zdXBwb3J0ZWQgc3BlZWQgKGRlZmF1bHQgdG8gNDgwMCkiLAorCQkJCQkJICAgIF9fRlVOQ1RJT05fXyk7CisJCQkJCQluX2JhdWRfcmF0ZSA9IDQ4MDA7CisJCQkJCX0gZWxzZSBpZiAoIChuX2JhdWRfcmF0ZSA9IG1hc2tfdG9fcmF0ZShiYXVkX21hc2spKSA9PSAtMSkgeworCQkJCQkJZXJyKCIlcyAtIGZhaWxlZCBzZXR0aW5nIGJhdWQgcmF0ZSwgdW5zdXBwb3J0ZWQgc3BlZWQgKGRlZmF1bHQgdG8gNDgwMCkiLAorCQkJCQkJICAgIF9fRlVOQ1RJT05fXyk7CisJCQkJCQluX2JhdWRfcmF0ZSA9IDQ4MDA7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKHByaXYtPmNoaXB0eXBlID09IENUX0NZUEhJRENPTSkgeworCQkJCQlpZiAoIChuX2JhdWRfcmF0ZSA9IG1hc2tfdG9fcmF0ZShiYXVkX21hc2spKSA9PSAtMSkgeworCQkJCQkJZXJyKCIlcyAtIGZhaWxlZCBzZXR0aW5nIGJhdWQgcmF0ZSwgdW5zdXBwb3J0ZWQgc3BlZWQgKGRlZmF1bHQgdG8gNDgwMCkiLAorCQkJCQkJICAgIF9fRlVOQ1RJT05fXyk7CisJCQkJCQluX2JhdWRfcmF0ZSA9IDQ4MDA7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKHByaXYtPmNoaXB0eXBlID09IENUX0dFTkVSSUMpIHsKKwkJCQkJaWYgKCAobl9iYXVkX3JhdGUgPSBtYXNrX3RvX3JhdGUoYmF1ZF9tYXNrKSkgPT0gLTEpIHsKKwkJCQkJCWVycigiJXMgLSBmYWlsZWQgc2V0dGluZyBiYXVkIHJhdGUsIHVuc3VwcG9ydGVkIHNwZWVkIChkZWZhdWx0IHRvIDQ4MDApIiwKKwkJCQkJCSAgICBfX0ZVTkNUSU9OX18pOworCQkJCQkJbl9iYXVkX3JhdGUgPSA0ODAwOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJaW5mbygiJXMgLSBwbGVhc2UgZGVmaW5lIHlvdXIgY2hpcHR5cGUsIHVzaW5nIDQ4MDBicHMgZGVmYXVsdCIsIF9fRlVOQ1RJT05fXyk7CisJCQkJCW5fYmF1ZF9yYXRlID0gNDgwMDsKKwkJCQl9CisJCQl9IGVsc2UgeyAgLyogYmF1ZCByYXRlIG5vdCBjaGFuZ2luZywga2VlcCB0aGUgb2xkICovCisJCQkJbl9iYXVkX3JhdGUgPSBwcml2LT5iYXVkX3JhdGU7CisJCQl9CisJCQlkYmcoIiVzIC0gYmF1ZCByYXRlIGlzIGJlaW5nIHNlbnQgYXMgJWQiLCBfX0ZVTkNUSU9OX18sIG5fYmF1ZF9yYXRlKTsKKworCQkJCisJCQkvKgorCQkJICogVGhpcyBhbGdvcml0aG0gYWNjcmVkaXRlZCB0byBKaWFuZyBKYXkgWmhhbmcuLi4gdGhhbmtzIGZvciBhbGwgdGhlIGhlbHAhCisJCQkgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKwkJCQlmZWF0dXJlX2J1ZmZlcltpXSA9ICggbl9iYXVkX3JhdGUgPj4gKGkqOCkgJiAweEZGICk7CisJCQl9CisKKwkJCWNvbmZpZyA9IDA7CSAgICAgICAgICAgICAgICAgLy8gcmVzZXQgY29uZmlnIGJ5dGUKKwkJCWNvbmZpZyB8PSBkYXRhX2JpdHM7CSAgICAgICAgIC8vIGFzc2lnbiBkYXRhIGJpdHMgaW4gMiBiaXQgc3BhY2UgKCBtYXggMyApCisJCQkvKiAxIGJpdCBnYXAgKi8KKwkJCWNvbmZpZyB8PSAoc3RvcF9iaXRzIDw8IDMpOyAgICAgIC8vIGFzc2lnbiBzdG9wIGJpdHMgaW4gMSBiaXQgc3BhY2UKKwkJCWNvbmZpZyB8PSAocGFyaXR5X2VuYWJsZSA8PCA0KTsgIC8vIGFzc2lnbiBwYXJpdHkgZmxhZyBpbiAxIGJpdCBzcGFjZQorCQkJY29uZmlnIHw9IChwYXJpdHlfdHlwZSA8PCA1KTsgCSAvLyBhc3NpZ24gcGFyaXR5IHR5cGUgaW4gMSBiaXQgc3BhY2UKKwkJCS8qIDEgYml0IGdhcCAqLworCQkJY29uZmlnIHw9IChyZXNldCA8PCA3KTsJCSAvLyBhc3NpZ24gcmVzZXQgYXQgZW5kIG9mIGJ5dGUsIDEgYml0IHNwYWNlCisKKwkJCWZlYXR1cmVfYnVmZmVyWzRdID0gY29uZmlnOworCQkJCQorCQkJZGJnKCIlcyAtIGRldmljZSBpcyBiZWluZyBzZW50IHRoaXMgZmVhdHVyZSByZXBvcnQ6IiwgX19GVU5DVElPTl9fKTsKKwkJCWRiZygiJXMgLSAlMDJYIC0gJTAyWCAtICUwMlggLSAlMDJYIC0gJTAyWCIsIF9fRlVOQ1RJT05fXywgZmVhdHVyZV9idWZmZXJbMF0sIGZlYXR1cmVfYnVmZmVyWzFdLAorCQkgICAgICAgICAgICBmZWF0dXJlX2J1ZmZlclsyXSwgZmVhdHVyZV9idWZmZXJbM10sIGZlYXR1cmVfYnVmZmVyWzRdKTsKKwkJCQorCQkJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnIChwb3J0LT5zZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKKwkJCQkJICAJICBISURfUkVRX1NFVF9SRVBPUlQsIFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTLAorCQkJCQkgIAkgIDB4MDMwMCwgMCwgZmVhdHVyZV9idWZmZXIsIDUsIDUwMCk7CisKKwkJCWlmIChyZXR2YWwgIT0gNSkKKwkJCQllcnIoIiVzIC0gZmFpbGVkIHNlbmRpbmcgc2VyaWFsIGxpbmUgc2V0dGluZ3MgLSAlZCIsIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKwkJCWVsc2UgeworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQkJcHJpdi0+YmF1ZF9yYXRlID0gbl9iYXVkX3JhdGU7CisJCQkJcHJpdi0+Y2JyX21hc2sgPSBiYXVkX21hc2s7CisJCQkJcHJpdi0+Y3VycmVudF9jb25maWcgPSBjb25maWc7CisJCQkJKytwcml2LT5jbWRfY291bnQ7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkJfQorCQlicmVhazsKKwkJY2FzZSBDWVBSRVNTX0dFVF9DT05GSUc6CisJCQlkYmcoIiVzIC0gcmV0cmVpdmluZyBzZXJpYWwgbGluZSBzZXR0aW5ncyIsIF9fRlVOQ1RJT05fXyk7CisJCQkvKiByZXNldCB2YWx1ZXMgaW4gZmVhdHVyZSBidWZmZXIgKi8KKwkJCW1lbXNldChmZWF0dXJlX2J1ZmZlciwgMCwgNSk7CisKKwkJCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyAocG9ydC0+c2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCisJCQkJCQkgIEhJRF9SRVFfR0VUX1JFUE9SVCwgVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUywKKwkJCQkJCSAgMHgwMzAwLCAwLCBmZWF0dXJlX2J1ZmZlciwgNSwgNTAwKTsKKwkJCWlmIChyZXR2YWwgIT0gNSkgeworCQkJCWVycigiJXMgLSBmYWlsZWQgdG8gcmV0cmVpdmUgc2VyaWFsIGxpbmUgc2V0dGluZ3MgLSAlZCIsIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKwkJCQlyZXR1cm4gcmV0dmFsOworCQkJfSBlbHNlIHsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkJCS8qIHN0b3JlIHRoZSBjb25maWcgaW4gb25lIGJ5dGUsIGFuZCBsYXRlciB1c2UgYml0IG1hc2tzIHRvIGNoZWNrIHZhbHVlcyAqLworCQkJCXByaXYtPmN1cnJlbnRfY29uZmlnID0gZmVhdHVyZV9idWZmZXJbNF07CisJCQkJLyogcmV2ZXJzZSB0aGUgcHJvY2VzcyBhYm92ZSB0byBnZXQgdGhlIGJhdWRfbWFzayB2YWx1ZSAqLworCQkJCW5fYmF1ZF9yYXRlID0gMDsgLy8gcmVzZXQgYml0cworCQkJCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKwkJCQkJbl9iYXVkX3JhdGUgfD0gKCBmZWF0dXJlX2J1ZmZlcltpXSA8PCAoaSo4KSApOworCQkJCX0KKwkJCQkKKwkJCQlwcml2LT5iYXVkX3JhdGUgPSBuX2JhdWRfcmF0ZTsKKwkJCQlpZiAoIChwcml2LT5jYnJfbWFzayA9IHJhdGVfdG9fbWFzayhuX2JhdWRfcmF0ZSkpID09IDB4NDApCisJCQkJCWRiZygiJXMgLSBmYWlsZWQgc2V0dGluZyB0aGUgYmF1ZCBtYXNrIChub3QgZGVmaW5lZCkiLCBfX0ZVTkNUSU9OX18pOworCQkJCSsrcHJpdi0+Y21kX2NvdW50OworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZXJyKCIlcyAtIHVuc3VwcG9ydGVkIHNlcmlhbCBjb250cm9sIGNvbW1hbmQgaXNzdWVkIiwgX19GVU5DVElPTl9fKTsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30gLyogY3lwcmVzc19zZXJpYWxfY29udHJvbCAqLworCisKKy8qIGdpdmVuIGEgYmF1ZCBtYXNrLCBpdCB3aWxsIHJldHVybiBzcGVlZCBvbiBzdWNjZXNzICovCitzdGF0aWMgaW50IG1hc2tfdG9fcmF0ZSAodW5zaWduZWQgbWFzaykKK3sKKwlpbnQgcmF0ZTsKKworCXN3aXRjaCAobWFzaykgeworCQljYXNlIEIwOiByYXRlID0gMDsgYnJlYWs7CisJCWNhc2UgQjMwMDogcmF0ZSA9IDMwMDsgYnJlYWs7CisJCWNhc2UgQjYwMDogcmF0ZSA9IDYwMDsgYnJlYWs7CisJCWNhc2UgQjEyMDA6IHJhdGUgPSAxMjAwOyBicmVhazsKKwkJY2FzZSBCMjQwMDogcmF0ZSA9IDI0MDA7IGJyZWFrOworCQljYXNlIEI0ODAwOiByYXRlID0gNDgwMDsgYnJlYWs7CisJCWNhc2UgQjk2MDA6IHJhdGUgPSA5NjAwOyBicmVhazsKKwkJY2FzZSBCMTkyMDA6IHJhdGUgPSAxOTIwMDsgYnJlYWs7CisJCWNhc2UgQjM4NDAwOiByYXRlID0gMzg0MDA7IGJyZWFrOworCQljYXNlIEI1NzYwMDogcmF0ZSA9IDU3NjAwOyBicmVhazsKKwkJY2FzZSBCMTE1MjAwOiByYXRlID0gMTE1MjAwOyBicmVhazsKKwkJZGVmYXVsdDogcmF0ZSA9IC0xOworCX0KKworCXJldHVybiByYXRlOworfQorCisKK3N0YXRpYyB1bnNpZ25lZCByYXRlX3RvX21hc2sgKGludCByYXRlKQoreworCXVuc2lnbmVkIG1hc2s7CisKKwlzd2l0Y2ggKHJhdGUpIHsKKwkJY2FzZSAwOiBtYXNrID0gQjA7IGJyZWFrOworCQljYXNlIDMwMDogbWFzayA9IEIzMDA7IGJyZWFrOworCQljYXNlIDYwMDogbWFzayA9IEI2MDA7IGJyZWFrOworCQljYXNlIDEyMDA6IG1hc2sgPSBCMTIwMDsgYnJlYWs7CisJCWNhc2UgMjQwMDogbWFzayA9IEIyNDAwOyBicmVhazsKKwkJY2FzZSA0ODAwOiBtYXNrID0gQjQ4MDA7IGJyZWFrOworCQljYXNlIDk2MDA6IG1hc2sgPSBCOTYwMDsgYnJlYWs7CisJCWNhc2UgMTkyMDA6IG1hc2sgPSBCMTkyMDA7IGJyZWFrOworCQljYXNlIDM4NDAwOiBtYXNrID0gQjM4NDAwOyBicmVhazsKKwkJY2FzZSA1NzYwMDogbWFzayA9IEI1NzYwMDsgYnJlYWs7CisJCWNhc2UgMTE1MjAwOiBtYXNrID0gQjExNTIwMDsgYnJlYWs7CisJCWRlZmF1bHQ6IG1hc2sgPSAweDQwOworCX0KKworCXJldHVybiBtYXNrOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDeXByZXNzIHNlcmlhbCBkcml2ZXIgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworc3RhdGljIGludCBnZW5lcmljX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdjsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBzZXJpYWwtPnBvcnRbMF0tPm51bWJlcik7CisKKwlwcml2ID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBjeXByZXNzX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KHByaXYsIDB4MDAsIHNpemVvZiAoc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSkpOworCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKwlwcml2LT5idWYgPSBjeXByZXNzX2J1Zl9hbGxvYyhDWVBSRVNTX0JVRl9TSVpFKTsKKwlpZiAocHJpdi0+YnVmID09IE5VTEwpIHsKKwkJa2ZyZWUocHJpdik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CisJCisJdXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24gKHNlcmlhbC0+ZGV2KTsKKwkKKwlwcml2LT5jbWRfY3RybCA9IDA7CisJcHJpdi0+bGluZV9jb250cm9sID0gMDsKKwlwcml2LT50ZXJtaW9zX2luaXRpYWxpemVkID0gMDsKKwlwcml2LT5jYWxsZWRmcm9tb3BlbiA9IDA7CisJcHJpdi0+cnhfZmxhZ3MgPSAwOworCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0sIHByaXYpOworCQorCXJldHVybiAoMCk7CQorfQkKKworCitzdGF0aWMgaW50IGN5cHJlc3NfZWFydGhtYXRlX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdjsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKGdlbmVyaWNfc3RhcnR1cChzZXJpYWwpKSB7CisJCWRiZygiJXMgLSBGYWlsZWQgc2V0dGluZyB1cCBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBzZXJpYWwtPnBvcnRbMF0tPm51bWJlcik7CisJCXJldHVybiAxOworCX0KKworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdKTsKKwlwcml2LT5jaGlwdHlwZSA9IENUX0VBUlRITUFURTsKKwkKKwlyZXR1cm4gKDApOwkKK30gLyogY3lwcmVzc19lYXJ0aG1hdGVfc3RhcnR1cCAqLworCisKK3N0YXRpYyBpbnQgY3lwcmVzc19oaWRjb21fc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2OworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoZ2VuZXJpY19zdGFydHVwKHNlcmlhbCkpIHsKKwkJZGJnKCIlcyAtIEZhaWxlZCBzZXR0aW5nIHVwIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHNlcmlhbC0+cG9ydFswXS0+bnVtYmVyKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0pOworCXByaXYtPmNoaXB0eXBlID0gQ1RfQ1lQSElEQ09NOworCQorCXJldHVybiAoMCk7CQorfSAvKiBjeXByZXNzX2hpZGNvbV9zdGFydHVwICovCisKKworc3RhdGljIHZvaWQgY3lwcmVzc19zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2OworCisJZGJnICgiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBzZXJpYWwtPnBvcnRbMF0tPm51bWJlcik7CisKKwkvKiBhbGwgb3BlbiBwb3J0cyBhcmUgY2xvc2VkIGF0IHRoaXMgcG9pbnQgKi8KKworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdKTsKKworCWlmIChwcml2KSB7CisJCWN5cHJlc3NfYnVmX2ZyZWUocHJpdi0+YnVmKTsKKwkJa2ZyZWUocHJpdik7CisJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0sIE5VTEwpOworCX0KK30KKworCitzdGF0aWMgaW50IGN5cHJlc3Nfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJlc3VsdCA9IDA7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIGNsZWFyIGhhbHRzIGJlZm9yZSBvcGVuICovCisJdXNiX2NsZWFyX2hhbHQoc2VyaWFsLT5kZXYsIDB4MDApOworCXVzYl9jbGVhcl9oYWx0KHNlcmlhbC0+ZGV2LCAweDgxKTsKKwl1c2JfY2xlYXJfaGFsdChzZXJpYWwtPmRldiwgMHgwMik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCS8qIHJlc2V0IHJlYWQvd3JpdGUgc3RhdGlzdGljcyAqLworCXByaXYtPmJ5dGVzX2luID0gMDsKKwlwcml2LT5ieXRlc19vdXQgPSAwOworCXByaXYtPmNtZF9jb3VudCA9IDA7CisJcHJpdi0+cnhfZmxhZ3MgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCS8qIHNldHRpbmcgdG8gemVybyBjb3VsZCBjYXVzZSBkYXRhIGxvc3MgKi8KKwlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gMTsKKworCS8qIHJhaXNlIGJvdGggbGluZXMgYW5kIHNldCB0ZXJtaW9zICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT5saW5lX2NvbnRyb2wgPSBDT05UUk9MX0RUUiB8IENPTlRST0xfUlRTOworCXByaXYtPmNhbGxlZGZyb21vcGVuID0gMTsKKwlwcml2LT5jbWRfY3RybCA9IDE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXJlc3VsdCA9IGN5cHJlc3Nfd3JpdGUocG9ydCwgTlVMTCwgMCk7CisKKwlpZiAocmVzdWx0KSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHNldHRpbmcgdGhlIGNvbnRyb2wgbGluZXMgLSBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0gZWxzZQorCQlkYmcoIiVzIC0gc3VjY2VzcyBzZXR0aW5nIHRoZSBjb250cm9sIGxpbmVzIiwgX19GVU5DVElPTl9fKTsJCisKKwljeXByZXNzX3NldF90ZXJtaW9zKHBvcnQsICZwcml2LT50bXBfdGVybWlvcyk7CisKKwkvKiBzZXR1cCB0aGUgcG9ydCBhbmQgc3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KKwlpZighcG9ydC0+aW50ZXJydXB0X2luX3VyYil7CisJCWVycigiJXMgLSBpbnRlcnJ1cHRfaW5fdXJiIGlzIGVtcHR5ISIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybigtMSk7CisJfQorCisJdXNiX2ZpbGxfaW50X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBzZXJpYWwtPmRldiwKKwkJdXNiX3JjdmludHBpcGUoc2VyaWFsLT5kZXYsIHBvcnQtPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3MpLAorCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT50cmFuc2Zlcl9idWZmZXIsIHBvcnQtPmludGVycnVwdF9pbl91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCWN5cHJlc3NfcmVhZF9pbnRfY2FsbGJhY2ssIHBvcnQsIHBvcnQtPmludGVycnVwdF9pbl91cmItPmludGVydmFsKTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKKworCWlmIChyZXN1bHQpeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9IC8qIGN5cHJlc3Nfb3BlbiAqLworCisKK3N0YXRpYyB2b2lkIGN5cHJlc3NfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxwKQoreworCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgaW50IGNfY2ZsYWc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgYnBzOworCWxvbmcgdGltZW91dDsKKwl3YWl0X3F1ZXVlX3Qgd2FpdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJLyogd2FpdCBmb3IgZGF0YSB0byBkcmFpbiBmcm9tIGJ1ZmZlciAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJdGltZW91dCA9IENZUFJFU1NfQ0xPU0lOR19XQUlUOworCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCBjdXJyZW50KTsKKwlhZGRfd2FpdF9xdWV1ZSgmcG9ydC0+dHR5LT53cml0ZV93YWl0LCAmd2FpdCk7CisJZm9yICg7OykgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlpZiAoY3lwcmVzc19idWZfZGF0YV9hdmFpbChwcml2LT5idWYpID09IDAKKwkJfHwgdGltZW91dCA9PSAwIHx8IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpCisJCXx8ICF1c2JfZ2V0X2ludGZkYXRhKHBvcnQtPnNlcmlhbC0+aW50ZXJmYWNlKSkKKwkJCWJyZWFrOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCX0KKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZwb3J0LT50dHktPndyaXRlX3dhaXQsICZ3YWl0KTsKKwkvKiBjbGVhciBvdXQgYW55IHJlbWFpbmluZyBkYXRhIGluIHRoZSBidWZmZXIgKi8KKwljeXByZXNzX2J1Zl9jbGVhcihwcml2LT5idWYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkKKwkvKiB3YWl0IGZvciBjaGFyYWN0ZXJzIHRvIGRyYWluIGZyb20gZGV2aWNlICovCisJYnBzID0gdHR5X2dldF9iYXVkX3JhdGUocG9ydC0+dHR5KTsKKwlpZiAoYnBzID4gMTIwMCkKKwkJdGltZW91dCA9IG1heCgoSFoqMjU2MCkvYnBzLEhaLzEwKTsKKwllbHNlCisJCXRpbWVvdXQgPSAyKkhaOworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKKworCWRiZygiJXMgLSBzdG9wcGluZyB1cmJzIiwgX19GVU5DVElPTl9fKTsKKwl1c2Jfa2lsbF91cmIgKHBvcnQtPmludGVycnVwdF9pbl91cmIpOworCXVzYl9raWxsX3VyYiAocG9ydC0+aW50ZXJydXB0X291dF91cmIpOworCisJaWYgKHBvcnQtPnR0eSkgeworCQljX2NmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCQlpZiAoY19jZmxhZyAmIEhVUENMKSB7CisJCQkvKiBkcm9wIGR0ciBhbmQgcnRzICovCisJCQlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCXByaXYtPmxpbmVfY29udHJvbCA9IDA7CisJCQlwcml2LT5jbWRfY3RybCA9IDE7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQljeXByZXNzX3dyaXRlKHBvcnQsIE5VTEwsIDApOworCQl9CisJfQorCisJaWYgKHN0YXRzKQorCQlkZXZfaW5mbyAoJnBvcnQtPmRldiwgIlN0YXRpc3RpY3M6ICVkIEJ5dGVzIEluIHwgJWQgQnl0ZXMgT3V0IHwgJWQgQ29tbWFuZHMgSXNzdWVkXG4iLAorCQkgICAgICAgICAgcHJpdi0+Ynl0ZXNfaW4sIHByaXYtPmJ5dGVzX291dCwgcHJpdi0+Y21kX2NvdW50KTsKK30gLyogY3lwcmVzc19jbG9zZSAqLworCisKK3N0YXRpYyBpbnQgY3lwcmVzc193cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCisJZGJnKCIlcyAtIHBvcnQgJWQsICVkIGJ5dGVzIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIGNvdW50KTsKKworCS8qIGxpbmUgY29udHJvbCBjb21tYW5kcywgd2hpY2ggbmVlZCB0byBiZSBleGVjdXRlZCBpbW1lZGlhdGVseSwKKwkgICBhcmUgbm90IHB1dCBpbnRvIHRoZSBidWZmZXIgZm9yIG9idmlvdXMgcmVhc29ucy4KKwkgKi8KKwlpZiAocHJpdi0+Y21kX2N0cmwpIHsKKwkJY291bnQgPSAwOworCQlnb3RvIGZpbmlzaDsKKwl9CisJCisJaWYgKCFjb3VudCkKKwkJcmV0dXJuIGNvdW50OworCQorCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJY291bnQgPSBjeXByZXNzX2J1Zl9wdXQocHJpdi0+YnVmLCBidWYsIGNvdW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKK2ZpbmlzaDoKKwljeXByZXNzX3NlbmQocG9ydCk7CisKKwlyZXR1cm4gY291bnQ7Cit9IC8qIGN5cHJlc3Nfd3JpdGUgKi8KKworCitzdGF0aWMgdm9pZCBjeXByZXNzX3NlbmQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlpbnQgY291bnQgPSAwLCByZXN1bHQsIG9mZnNldCwgYWN0dWFsX3NpemU7CisJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCQorCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCWRiZygiJXMgLSBpbnRlcnJ1cHQgb3V0IHNpemUgaXMgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPmludGVycnVwdF9vdXRfc2l6ZSk7CisJCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAocHJpdi0+d3JpdGVfdXJiX2luX3VzZSkgeworCQlkYmcoIiVzIC0gY2FuJ3Qgd3JpdGUsIHVyYiBpbiB1c2UiLCBfX0ZVTkNUSU9OX18pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJLyogY2xlYXIgYnVmZmVyICovCisJbWVtc2V0KHBvcnQtPmludGVycnVwdF9vdXRfdXJiLT50cmFuc2Zlcl9idWZmZXIsIDAsIHBvcnQtPmludGVycnVwdF9vdXRfc2l6ZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXN3aXRjaCAocG9ydC0+aW50ZXJydXB0X291dF9zaXplKSB7CisJCWNhc2UgMzI6CisJCQkvLyB0aGlzIGlzIGZvciB0aGUgQ1k3QzY0MDEzLi4uCisJCQlvZmZzZXQgPSAyOworCQkJcG9ydC0+aW50ZXJydXB0X291dF9idWZmZXJbMF0gPSBwcml2LT5saW5lX2NvbnRyb2w7CisJCQlicmVhazsKKwkJY2FzZSA4OgorCQkJLy8gdGhpcyBpcyBmb3IgdGhlIENZN0M2Mzc0My4uLgorCQkJb2Zmc2V0ID0gMTsKKwkJCXBvcnQtPmludGVycnVwdF9vdXRfYnVmZmVyWzBdID0gcHJpdi0+bGluZV9jb250cm9sOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkYmcoIiVzIC0gd3JvbmcgcGFja2V0IHNpemUiLCBfX0ZVTkNUSU9OX18pOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuOworCX0KKworCWlmIChwcml2LT5saW5lX2NvbnRyb2wgJiBDT05UUk9MX1JFU0VUKQorCQlwcml2LT5saW5lX2NvbnRyb2wgJj0gfkNPTlRST0xfUkVTRVQ7CisKKwlpZiAocHJpdi0+Y21kX2N0cmwpIHsKKwkJcHJpdi0+Y21kX2NvdW50Kys7CisJCWRiZygiJXMgLSBsaW5lIGNvbnRyb2wgY29tbWFuZCBiZWluZyBpc3N1ZWQiLCBfX0ZVTkNUSU9OX18pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCWdvdG8gc2VuZDsKKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJY291bnQgPSBjeXByZXNzX2J1Zl9nZXQocHJpdi0+YnVmLCAmcG9ydC0+aW50ZXJydXB0X291dF9idWZmZXJbb2Zmc2V0XSwKKwkJCQlwb3J0LT5pbnRlcnJ1cHRfb3V0X3NpemUtb2Zmc2V0KTsKKworCWlmIChjb3VudCA9PSAwKSB7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKHBvcnQtPmludGVycnVwdF9vdXRfc2l6ZSkgeworCQljYXNlIDMyOgorCQkJcG9ydC0+aW50ZXJydXB0X291dF9idWZmZXJbMV0gPSBjb3VudDsKKwkJCWJyZWFrOworCQljYXNlIDg6CisJCQlwb3J0LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlclswXSB8PSBjb3VudDsKKwl9CisKKwlkYmcoIiVzIC0gY291bnQgaXMgJWQiLCBfX0ZVTkNUSU9OX18sIGNvdW50KTsKKworc2VuZDoKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPndyaXRlX3VyYl9pbl91c2UgPSAxOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChwcml2LT5jbWRfY3RybCkKKwkJYWN0dWFsX3NpemUgPSAxOworCWVsc2UKKwkJYWN0dWFsX3NpemUgPSBjb3VudCArIChwb3J0LT5pbnRlcnJ1cHRfb3V0X3NpemUgPT0gMzIgPyAyIDogMSk7CisJCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIHBvcnQtPmludGVycnVwdF9vdXRfc2l6ZSwKKwkJCSAgICAgIHBvcnQtPmludGVycnVwdF9vdXRfdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCisJcG9ydC0+aW50ZXJydXB0X291dF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBhY3R1YWxfc2l6ZTsKKwlwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIgKHBvcnQtPmludGVycnVwdF9vdXRfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLAorCQkJcmVzdWx0KTsKKwkJcHJpdi0+d3JpdGVfdXJiX2luX3VzZSA9IDA7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAocHJpdi0+Y21kX2N0cmwpIHsKKwkJcHJpdi0+Y21kX2N0cmwgPSAwOworCX0KKwlwcml2LT5ieXRlc19vdXQgKz0gY291bnQ7IC8qIGRvIG5vdCBjb3VudCB0aGUgbGluZSBjb250cm9sIGFuZCBzaXplIGJ5dGVzICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJc2NoZWR1bGVfd29yaygmcG9ydC0+d29yayk7Cit9IC8qIGN5cHJlc3Nfc2VuZCAqLworCisKKy8qIHJldHVybnMgaG93IG11Y2ggc3BhY2UgaXMgYXZhaWxhYmxlIGluIHRoZSBzb2Z0IGJ1ZmZlciAqLworc3RhdGljIGludCBjeXByZXNzX3dyaXRlX3Jvb20oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludCByb29tID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXJvb20gPSBjeXByZXNzX2J1Zl9zcGFjZV9hdmFpbChwcml2LT5idWYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19GVU5DVElPTl9fLCByb29tKTsKKwlyZXR1cm4gcm9vbTsKK30KKworCitzdGF0aWMgaW50IGN5cHJlc3NfdGlvY21nZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJX191OCBzdGF0dXMsIGNvbnRyb2w7CisJdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJY29udHJvbCA9IHByaXYtPmxpbmVfY29udHJvbDsKKwlzdGF0dXMgPSBwcml2LT5jdXJyZW50X3N0YXR1czsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXN1bHQgPSAoKGNvbnRyb2wgJiBDT05UUk9MX0RUUikgICAgICAgID8gVElPQ01fRFRSIDogMCkKKwkJfCAoKGNvbnRyb2wgJiBDT05UUk9MX1JUUykgICAgICAgPyBUSU9DTV9SVFMgOiAwKQorCQl8ICgoc3RhdHVzICYgVUFSVF9DVFMpICAgICAgICA/IFRJT0NNX0NUUyA6IDApCisJCXwgKChzdGF0dXMgJiBVQVJUX0RTUikgICAgICAgID8gVElPQ01fRFNSIDogMCkKKwkJfCAoKHN0YXR1cyAmIFVBUlRfUkkpICAgICAgICAgPyBUSU9DTV9SSSAgOiAwKQorCQl8ICgoc3RhdHVzICYgVUFSVF9DRCkgICAgICAgICA/IFRJT0NNX0NEICA6IDApOworCisJZGJnKCIlcyAtIHJlc3VsdCA9ICV4IiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgaW50IGN5cHJlc3NfdGlvY21zZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChzZXQgJiBUSU9DTV9SVFMpCisJCXByaXYtPmxpbmVfY29udHJvbCB8PSBDT05UUk9MX1JUUzsKKwlpZiAoc2V0ICYgVElPQ01fRFRSKQorCQlwcml2LT5saW5lX2NvbnRyb2wgfD0gQ09OVFJPTF9EVFI7CisJaWYgKGNsZWFyICYgVElPQ01fUlRTKQorCQlwcml2LT5saW5lX2NvbnRyb2wgJj0gfkNPTlRST0xfUlRTOworCWlmIChjbGVhciAmIFRJT0NNX0RUUikKKwkJcHJpdi0+bGluZV9jb250cm9sICY9IH5DT05UUk9MX0RUUjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlwcml2LT5jbWRfY3RybCA9IDE7CisJcmV0dXJuIGN5cHJlc3Nfd3JpdGUocG9ydCwgTlVMTCwgMCk7Cit9CisKKworc3RhdGljIGludCBjeXByZXNzX2lvY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCwgY21kIDB4JS40eCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCBjbWQpOworCisJc3dpdGNoIChjbWQpIHsKKwkJY2FzZSBUSU9DR1NFUklBTDoKKwkJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCBwb3J0LT50dHktPnRlcm1pb3MsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpKSB7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisJCQlyZXR1cm4gKDApOworCQkJYnJlYWs7CisJCWNhc2UgVElPQ1NTRVJJQUw6CisJCQlpZiAoY29weV9mcm9tX3VzZXIocG9ydC0+dHR5LT50ZXJtaW9zLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpKSB7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisJCQkvKiBoZXJlIHdlIG5lZWQgdG8gY2FsbCBjeXByZXNzX3NldF90ZXJtaW9zIHRvIGludm9rZSB0aGUgbmV3IHNldHRpbmdzICovCisJCQljeXByZXNzX3NldF90ZXJtaW9zKHBvcnQsICZwcml2LT50bXBfdGVybWlvcyk7CisJCQlyZXR1cm4gKDApOworCQkJYnJlYWs7CisJCS8qIHRoZXNlIGFyZSBjYWxsZWQgd2hlbiBzZXR0aW5nIGJhdWQgcmF0ZSBmcm9tIGdwc2QgKi8KKwkJY2FzZSBUQ0dFVFM6CisJCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgcG9ydC0+dHR5LT50ZXJtaW9zLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKSkgeworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQkJcmV0dXJuICgwKTsKKwkJCWJyZWFrOworCQljYXNlIFRDU0VUUzoKKwkJCWlmIChjb3B5X2Zyb21fdXNlcihwb3J0LT50dHktPnRlcm1pb3MsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkpIHsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJCS8qIGhlcmUgd2UgbmVlZCB0byBjYWxsIGN5cHJlc3Nfc2V0X3Rlcm1pb3MgdG8gaW52b2tlIHRoZSBuZXcgc2V0dGluZ3MgKi8KKwkJCWN5cHJlc3Nfc2V0X3Rlcm1pb3MocG9ydCwgJnByaXYtPnRtcF90ZXJtaW9zKTsKKwkJCXJldHVybiAoMCk7CisJCQlicmVhazsKKwkJLyogVGhpcyBjb2RlIGNvbWVzIGZyb20gZHJpdmVycy9jaGFyL3NlcmlhbC5jIGFuZCBmdGRpX3Npby5jICovCisJCWNhc2UgVElPQ01JV0FJVDoKKwkJCXdoaWxlIChwcml2ICE9IE5VTEwpIHsKKwkJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CisJCQkJLyogc2VlIGlmIGEgc2lnbmFsIGRpZCBpdCAqLworCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJCQllbHNlIHsKKwkJCQkJY2hhciBkaWZmID0gcHJpdi0+ZGlmZl9zdGF0dXM7CisKKwkJCQkJaWYgKGRpZmYgPT0gMCkgeworCQkJCQkJcmV0dXJuIC1FSU87IC8qIG5vIGNoYW5nZSA9PiBlcnJvciAqLworCQkJCQl9CisJCQkJCQorCQkJCQkvKiBjb25zdW1lIGFsbCBldmVudHMgKi8KKwkJCQkJcHJpdi0+ZGlmZl9zdGF0dXMgPSAwOworCisJCQkJCS8qIHJldHVybiAwIGlmIGNhbGxlciB3YW50ZWQgdG8ga25vdyBhYm91dCB0aGVzZSBiaXRzICovCisJCQkJCWlmICggKChhcmcgJiBUSU9DTV9STkcpICYmIChkaWZmICYgVUFSVF9SSSkpIHx8CisJCQkJCSAgICAgKChhcmcgJiBUSU9DTV9EU1IpICYmIChkaWZmICYgVUFSVF9EU1IpKSB8fAorCQkJCQkgICAgICgoYXJnICYgVElPQ01fQ0QpICYmIChkaWZmICYgVUFSVF9DRCkpIHx8CisJCQkJCSAgICAgKChhcmcgJiBUSU9DTV9DVFMpICYmIChkaWZmICYgVUFSVF9DVFMpKSApIHsKKwkJCQkJCXJldHVybiAwOworCQkJCQl9CisJCQkJCS8qIG90aGVyd2lzZSBjYWxsZXIgY2FuJ3QgY2FyZSBsZXNzIGFib3V0IHdoYXQgaGFwcGVuZWQsCisJCQkJCSAqIGFuZCBzbyB3ZSBjb250aW51ZSB0byB3YWl0IGZvciBtb3JlIGV2ZW50cy4KKwkJCQkJICovCisJCQkJfQorCQkJfQorCQkJcmV0dXJuIDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKworCWRiZygiJXMgLSBhcmcgbm90IHN1cHBvcnRlZCAtIGl0IHdhcyAweCUwNHggLSBjaGVjayBpbmNsdWRlL2FzbS9pb2N0bHMuaCIsIF9fRlVOQ1RJT05fXywgY21kKTsKKworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9IC8qIGN5cHJlc3NfaW9jdGwgKi8KKworCitzdGF0aWMgdm9pZCBjeXByZXNzX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7CisJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCWludCBkYXRhX2JpdHMsIHN0b3BfYml0cywgcGFyaXR5X3R5cGUsIHBhcml0eV9lbmFibGU7CisJdW5zaWduZWQgY2ZsYWcsIGlmbGFnLCBiYXVkX21hc2s7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlfX3U4IG9sZGxpbmVzOworCWludCBsaW5lY2hhbmdlOworCQorCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICgoIXR0eSkgfHwgKCF0dHktPnRlcm1pb3MpKSB7CisJCWRiZygiJXMgLSBubyB0dHkgc3RydWN0dXJlcyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmICghcHJpdi0+dGVybWlvc19pbml0aWFsaXplZCkgeworCQlpZiAocHJpdi0+Y2hpcHR5cGUgPT0gQ1RfRUFSVEhNQVRFKSB7CisJCQkqKHR0eS0+dGVybWlvcykgPSB0dHlfc3RkX3Rlcm1pb3M7CisJCQl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgPSBCNDgwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7CisJCX0gZWxzZSBpZiAocHJpdi0+Y2hpcHR5cGUgPT0gQ1RfQ1lQSElEQ09NKSB7CisJCQkqKHR0eS0+dGVybWlvcykgPSB0dHlfc3RkX3Rlcm1pb3M7CisJCQl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgPSBCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7CisJCX0KKwkJcHJpdi0+dGVybWlvc19pbml0aWFsaXplZCA9IDE7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCWlmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2lmbGFnOworCisJLyogY2hlY2sgaWYgdGhlcmUgYXJlIG5ldyBzZXR0aW5ncyAqLworCWlmIChvbGRfdGVybWlvcykgeworCQlpZiAoKGNmbGFnICE9IG9sZF90ZXJtaW9zLT5jX2NmbGFnKSB8fAorCQkgICAgKFJFTEVWQU5UX0lGTEFHKGlmbGFnKSAhPSBSRUxFVkFOVF9JRkxBRyhvbGRfdGVybWlvcy0+Y19pZmxhZykpKSB7CisJCQlkYmcoIiVzIC0gYXR0ZW1wdGluZyB0byBzZXQgbmV3IHRlcm1pb3Mgc2V0dGluZ3MiLCBfX0ZVTkNUSU9OX18pOworCQkJLyogc2hvdWxkIG1ha2UgYSBjb3B5IG9mIHRoaXMgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZyBpbiB0aGUgZnVuY3Rpb24sIHdlIGNhbiByZXN0b3JlIGl0ICovCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkJcHJpdi0+dG1wX3Rlcm1pb3MgPSAqKHR0eS0+dGVybWlvcyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7IAorCQl9IGVsc2UgeworCQkJZGJnKCIlcyAtIG5vdGhpbmcgdG8gZG8sIGV4aXRpbmciLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlCisJCXJldHVybjsKKworCS8qIHNldCBudW1iZXIgb2YgZGF0YSBiaXRzLCBwYXJpdHksIHN0b3AgYml0cyAqLworCS8qIHdoZW4gcGFyaXR5IGlzIGRpc2FibGVkIHRoZSBwYXJpdHkgdHlwZSBiaXQgaXMgaWdub3JlZCAqLworCisJc3RvcF9iaXRzID0gY2ZsYWcgJiBDU1RPUEIgPyAxIDogMDsgLyogMSBtZWFucyAyIHN0b3AgYml0cywgMCBtZWFucyAxIHN0b3AgYml0ICovCisJCisJaWYgKGNmbGFnICYgUEFSRU5CKSB7CisJCXBhcml0eV9lbmFibGUgPSAxOworCQlwYXJpdHlfdHlwZSA9IGNmbGFnICYgUEFST0REID8gMSA6IDA7IC8qIDEgbWVhbnMgb2RkIHBhcml0eSwgMCBtZWFucyBldmVuIHBhcml0eSAqLworCX0gZWxzZQorCQlwYXJpdHlfZW5hYmxlID0gcGFyaXR5X3R5cGUgPSAwOworCisJaWYgKGNmbGFnICYgQ1NJWkUpIHsKKwkJc3dpdGNoIChjZmxhZyAmIENTSVpFKSB7CisJCQljYXNlIENTNTogZGF0YV9iaXRzID0gMDsgYnJlYWs7CisJCQljYXNlIENTNjogZGF0YV9iaXRzID0gMTsgYnJlYWs7CisJCQljYXNlIENTNzogZGF0YV9iaXRzID0gMjsgYnJlYWs7CisJCQljYXNlIENTODogZGF0YV9iaXRzID0gMzsgYnJlYWs7CisJCQlkZWZhdWx0OiBlcnIoIiVzIC0gQ1NJWkUgd2FzIHNldCwgYnV0IG5vdCBDUzUtQ1M4IiwgX19GVU5DVElPTl9fKTsgZGF0YV9iaXRzID0gMzsKKwkJfQorCX0gZWxzZQorCQlkYXRhX2JpdHMgPSAzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlvbGRsaW5lcyA9IHByaXYtPmxpbmVfY29udHJvbDsKKwlpZiAoKGNmbGFnICYgQ0JBVUQpID09IEIwKSB7CisJCS8qIGRyb3AgZHRyIGFuZCBydHMgKi8KKwkJZGJnKCIlcyAtIGRyb3BwaW5nIHRoZSBsaW5lcywgYmF1ZCByYXRlIDBicHMiLCBfX0ZVTkNUSU9OX18pOworCQliYXVkX21hc2sgPSBCMDsKKwkJcHJpdi0+bGluZV9jb250cm9sICY9IH4oQ09OVFJPTF9EVFIgfCBDT05UUk9MX1JUUyk7CisJfSBlbHNlIHsKKwkJYmF1ZF9tYXNrID0gKGNmbGFnICYgQ0JBVUQpOworCQlzd2l0Y2goYmF1ZF9tYXNrKSB7CisJCQljYXNlIEIzMDA6IGRiZygiJXMgLSBzZXR0aW5nIGJhdWQgMzAwYnBzIiwgX19GVU5DVElPTl9fKTsgYnJlYWs7CisJCQljYXNlIEI2MDA6IGRiZygiJXMgLSBzZXR0aW5nIGJhdWQgNjAwYnBzIiwgX19GVU5DVElPTl9fKTsgYnJlYWs7CisJCQljYXNlIEIxMjAwOiBkYmcoIiVzIC0gc2V0dGluZyBiYXVkIDEyMDBicHMiLCBfX0ZVTkNUSU9OX18pOyBicmVhazsKKwkJCWNhc2UgQjI0MDA6IGRiZygiJXMgLSBzZXR0aW5nIGJhdWQgMjQwMGJwcyIsIF9fRlVOQ1RJT05fXyk7IGJyZWFrOworCQkJY2FzZSBCNDgwMDogZGJnKCIlcyAtIHNldHRpbmcgYmF1ZCA0ODAwYnBzIiwgX19GVU5DVElPTl9fKTsgYnJlYWs7CisJCQljYXNlIEI5NjAwOiBkYmcoIiVzIC0gc2V0dGluZyBiYXVkIDk2MDBicHMiLCBfX0ZVTkNUSU9OX18pOyBicmVhazsKKwkJCWNhc2UgQjE5MjAwOiBkYmcoIiVzIC0gc2V0dGluZyBiYXVkIDE5MjAwYnBzIiwgX19GVU5DVElPTl9fKTsgYnJlYWs7CisJCQljYXNlIEIzODQwMDogZGJnKCIlcyAtIHNldHRpbmcgYmF1ZCAzODQwMGJwcyIsIF9fRlVOQ1RJT05fXyk7IGJyZWFrOworCQkJY2FzZSBCNTc2MDA6IGRiZygiJXMgLSBzZXR0aW5nIGJhdWQgNTc2MDBicHMiLCBfX0ZVTkNUSU9OX18pOyBicmVhazsKKwkJCWNhc2UgQjExNTIwMDogZGJnKCIlcyAtIHNldHRpbmcgYmF1ZCAxMTUyMDBicHMiLCBfX0ZVTkNUSU9OX18pOyBicmVhazsKKwkJCWRlZmF1bHQ6IGRiZygiJXMgLSB1bmtub3duIG1hc2tlZCBiYXVkIHJhdGUiLCBfX0ZVTkNUSU9OX18pOworCQl9CisJCXByaXYtPmxpbmVfY29udHJvbCB8PSBDT05UUk9MX0RUUjsKKwkJCisJCS8qIHRvZ2dsZSBDUlRTQ1RTPyAtIGRvbid0IGRvIHRoaXMgaWYgYmVpbmcgY2FsbGVkIGZyb20gY3lwcmVzc19vcGVuICovCisJCWlmICghcHJpdi0+Y2FsbGVkZnJvbW9wZW4pIHsKKwkJCWlmIChjZmxhZyAmIENSVFNDVFMpCisJCQkJcHJpdi0+bGluZV9jb250cm9sIHw9IENPTlRST0xfUlRTOworCQkJZWxzZQorCQkJCXByaXYtPmxpbmVfY29udHJvbCAmPSB+Q09OVFJPTF9SVFM7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQorCWRiZygiJXMgLSBzZW5kaW5nICVkIHN0b3BfYml0cywgJWQgcGFyaXR5X2VuYWJsZSwgJWQgcGFyaXR5X3R5cGUsICVkIGRhdGFfYml0cyAoKzUpIiwgX19GVU5DVElPTl9fLAorCSAgICBzdG9wX2JpdHMsIHBhcml0eV9lbmFibGUsIHBhcml0eV90eXBlLCBkYXRhX2JpdHMpOworCisJY3lwcmVzc19zZXJpYWxfY29udHJvbChwb3J0LCBiYXVkX21hc2ssIGRhdGFfYml0cywgc3RvcF9iaXRzLCBwYXJpdHlfZW5hYmxlLAorCQkJICAgICAgIHBhcml0eV90eXBlLCAwLCBDWVBSRVNTX1NFVF9DT05GSUcpOworCisJbXNsZWVwKDUwKTsJCQkvKiBnaXZlIHNvbWUgdGltZSBiZXR3ZWVuIGNoYW5nZSBhbmQgcmVhZCAoNTBtcykgKi8KKworCS8qIHdlIHBlcmZvcm0gYSBDWVBSRVNTX0dFVF9DT05GSUcgc28gdGhhdCB0aGUgY3VycmVudCBzZXR0aW5ncyBhcmUgZmlsbGVkIGludG8gdGhlIHByaXZhdGUgc3RydWN0dXJlCisgICAgICAgICAqIHRoaXMgc2hvdWxkIGNvbmZpcm0gdGhhdCBhbGwgaXMgd29ya2luZyBpZiBpdCByZXR1cm5zIHdoYXQgd2UganVzdCBzZXQgKi8KKwljeXByZXNzX3NlcmlhbF9jb250cm9sKHBvcnQsIDAsIDAsIDAsIDAsIDAsIDAsIENZUFJFU1NfR0VUX0NPTkZJRyk7CisKKwkvKiBIZXJlIHdlIGNhbiBkZWZpbmUgY3VzdG9tIHR0eSBzZXR0aW5ncyBmb3IgZGV2aWNlcworICAgICAgICAgKgorICAgICAgICAgKiB0aGUgbWFpbiB0dHkgdGVybWlvcyBmbGFnIGJhc2UgY29tZXMgZnJvbSBlbXBlZy5jCisgICAgICAgICAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsJCisJaWYgKCAocHJpdi0+Y2hpcHR5cGUgPT0gQ1RfRUFSVEhNQVRFKSAmJiAocHJpdi0+YmF1ZF9yYXRlID09IDQ4MDApICkgeworCisJCWRiZygiVXNpbmcgY3VzdG9tIHRlcm1pb3Mgc2V0dGluZ3MgZm9yIGEgYmF1ZCByYXRlIG9mIDQ4MDBicHMuIik7CisJCS8qIGRlZmluZSBjdXN0b20gdGVybWlvcyBzZXR0aW5ncyBmb3IgTk1FQSBwcm90b2NvbCAqLworCisJCQorCQl0dHktPnRlcm1pb3MtPmNfaWZsYWcgLyogaW5wdXQgbW9kZXMgLSAqLworCQkJJj0gfihJR05CUksJCS8qIGRpc2FibGUgaWdub3JlIGJyZWFrICovCisJCQl8IEJSS0lOVAkJLyogZGlzYWJsZSBicmVhayBjYXVzZXMgaW50ZXJydXB0ICovCisJCQl8IFBBUk1SSwkJLyogZGlzYWJsZSBtYXJrIHBhcml0eSBlcnJvcnMgKi8KKwkJCXwgSVNUUklQCQkvKiBkaXNhYmxlIGNsZWFyIGhpZ2ggYml0IG9mIGlucHV0IGNoYXJhY3RlcnMgKi8KKwkJCXwgSU5MQ1IJCQkvKiBkaXNhYmxlIHRyYW5zbGF0ZSBOTCB0byBDUiAqLworCQkJfCBJR05DUgkJCS8qIGRpc2FibGUgaWdub3JlIENSICovCisJCQl8IElDUk5MCQkJLyogZGlzYWJsZSB0cmFuc2xhdGUgQ1IgdG8gTkwgKi8KKwkJCXwgSVhPTik7CQkvKiBkaXNhYmxlIGVuYWJsZSBYT04vWE9GRiBmbG93IGNvbnRyb2wgKi8KKwkJCisJCXR0eS0+dGVybWlvcy0+Y19vZmxhZyAvKiBvdXRwdXQgbW9kZXMgKi8KKwkJCSY9IH5PUE9TVDsJCS8qIGRpc2FibGUgcG9zdHByb2Nlc3Mgb3V0cHV0IGNoYXJhY3RlcnMgKi8KKwkJCisJCXR0eS0+dGVybWlvcy0+Y19sZmxhZyAvKiBsaW5lIGRpc2NpcGxpbmUgbW9kZXMgKi8KKwkJCSY9IH4oRUNITyAJCS8qIGRpc2FibGUgZWNobyBpbnB1dCBjaGFyYWN0ZXJzICovCisJCQl8IEVDSE9OTAkJLyogZGlzYWJsZSBlY2hvIG5ldyBsaW5lICovCisJCQl8IElDQU5PTgkJLyogZGlzYWJsZSBlcmFzZSwga2lsbCwgd2VyYXNlLCBhbmQgcnBybnQgc3BlY2lhbCBjaGFyYWN0ZXJzICovCisJCQl8IElTSUcJCQkvKiBkaXNhYmxlIGludGVycnVwdCwgcXVpdCwgYW5kIHN1c3BlbmQgc3BlY2lhbCBjaGFyYWN0ZXJzICovCisJCQl8IElFWFRFTik7CQkvKiBkaXNhYmxlIG5vbi1QT1NJWCBzcGVjaWFsIGNoYXJhY3RlcnMgKi8KKworCX0gZWxzZSBpZiAocHJpdi0+Y2hpcHR5cGUgPT0gQ1RfQ1lQSElEQ09NKSB7CisKKwkJLy8gU29mdHdhcmUgYXBwIGhhbmRsaW5nIGl0IGZvciBkZXZpY2UuLi4JCisKKwl9CisJbGluZWNoYW5nZSA9IChwcml2LT5saW5lX2NvbnRyb2wgIT0gb2xkbGluZXMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCS8qIGlmIG5lY2Vzc2FyeSwgc2V0IGxpbmVzICovCisJaWYgKCFwcml2LT5jYWxsZWRmcm9tb3BlbiAmJiBsaW5lY2hhbmdlKSB7CisJCXByaXYtPmNtZF9jdHJsID0gMTsKKwkJY3lwcmVzc193cml0ZShwb3J0LCBOVUxMLCAwKTsKKwl9CisKKwlpZiAocHJpdi0+Y2FsbGVkZnJvbW9wZW4pCisJCXByaXYtPmNhbGxlZGZyb21vcGVuID0gMDsKKwkKK30gLyogY3lwcmVzc19zZXRfdGVybWlvcyAqLworCisgCisvKiByZXR1cm5zIGFtb3VudCBvZiBkYXRhIHN0aWxsIGxlZnQgaW4gc29mdCBidWZmZXIgKi8KK3N0YXRpYyBpbnQgY3lwcmVzc19jaGFyc19pbl9idWZmZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludCBjaGFycyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQorCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJY2hhcnMgPSBjeXByZXNzX2J1Zl9kYXRhX2F2YWlsKHByaXYtPmJ1Zik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJZGJnKCIlcyAtIHJldHVybnMgJWQiLCBfX0ZVTkNUSU9OX18sIGNoYXJzKTsKKwlyZXR1cm4gY2hhcnM7Cit9CisKKworc3RhdGljIHZvaWQgY3lwcmVzc190aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJpdi0+cnhfZmxhZ3MgPSBUSFJPVFRMRUQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwkgICAKK30KKworCitzdGF0aWMgdm9pZCBjeXByZXNzX3VudGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgYWN0dWFsbHlfdGhyb3R0bGVkLCByZXN1bHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlhY3R1YWxseV90aHJvdHRsZWQgPSBwcml2LT5yeF9mbGFncyAmIEFDVFVBTExZX1RIUk9UVExFRDsKKwlwcml2LT5yeF9mbGFncyA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJaWYgKGFjdHVhbGx5X3Rocm90dGxlZCkgeworCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJfQorfQorCisKK3N0YXRpYyB2b2lkIGN5cHJlc3NfcmVhZF9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNoYXIgdHR5X2ZsYWcgPSBUVFlfTk9STUFMOwkKKwlpbnQgaGF2ZWRhdGEgPSAwOworCWludCBieXRlcyA9IDA7CisJaW50IHJlc3VsdDsKKwlpbnQgaSA9IDA7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyByZWFkIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKHByaXYtPnJ4X2ZsYWdzICYgVEhST1RUTEVEKSB7CisJCWRiZygiJXMgLSBub3cgdGhyb3R0bGluZyIsIF9fRlVOQ1RJT05fXyk7CisJCXByaXYtPnJ4X2ZsYWdzIHw9IEFDVFVBTExZX1RIUk9UVExFRDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXR0eSA9IHBvcnQtPnR0eTsKKwlpZiAoIXR0eSkgeworCQlkYmcoIiVzIC0gYmFkIHR0eSBwb2ludGVyIC0gZXhpdGluZyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXN3aXRjaCh1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJY2FzZSAzMjoKKwkJCS8vIFRoaXMgaXMgZm9yIHRoZSBDWTdDNjQwMTMuLi4KKwkJCXByaXYtPmN1cnJlbnRfc3RhdHVzID0gZGF0YVswXSAmIDB4Rjg7CisJCQlieXRlcyA9IGRhdGFbMV0rMjsKKwkJCWk9MjsKKwkJCWlmIChieXRlcyA+IDIpCisJCQkJaGF2ZWRhdGEgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgODoKKwkJCS8vIFRoaXMgaXMgZm9yIHRoZSBDWTdDNjM3NDMuLi4KKwkJCXByaXYtPmN1cnJlbnRfc3RhdHVzID0gZGF0YVswXSAmIDB4Rjg7CisJCQlieXRlcyA9IChkYXRhWzBdICYgMHgwNykrMTsKKwkJCWk9MTsKKwkJCWlmIChieXRlcyA+IDEpCisJCQkJaGF2ZWRhdGEgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkYmcoIiVzIC0gd3JvbmcgcGFja2V0IHNpemUgLSByZWNlaXZlZCAlZCBieXRlcyIsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCWdvdG8gY29udGludWVfcmVhZDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhIChkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkvKiBjaGVjayB0byBzZWUgaWYgc3RhdHVzIGhhcyBjaGFuZ2VkICovCisJaWYgKHByaXYgIT0gTlVMTCkgeworCQlpZiAocHJpdi0+Y3VycmVudF9zdGF0dXMgIT0gcHJpdi0+cHJldl9zdGF0dXMpIHsKKwkJCXByaXYtPmRpZmZfc3RhdHVzIHw9IHByaXYtPmN1cnJlbnRfc3RhdHVzIF4gcHJpdi0+cHJldl9zdGF0dXM7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKKwkJCXByaXYtPnByZXZfc3RhdHVzID0gcHJpdi0+Y3VycmVudF9zdGF0dXM7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwkKKworCS8qIGhhbmd1cCwgYXMgZGVmaW5lZCBpbiBhY20uYy4uLiB0aGlzIG1pZ2h0IGJlIGEgYmFkIHBsYWNlIGZvciBpdCB0aG91Z2ggKi8KKwlpZiAodHR5ICYmICEodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKSAmJiAhKHByaXYtPmN1cnJlbnRfc3RhdHVzICYgVUFSVF9DRCkpIHsKKwkJZGJnKCIlcyAtIGNhbGxpbmcgaGFuZ3VwIiwgX19GVU5DVElPTl9fKTsKKwkJdHR5X2hhbmd1cCh0dHkpOworCQlnb3RvIGNvbnRpbnVlX3JlYWQ7CisJfQorCisJLyogVGhlcmUgaXMgb25lIGVycm9yIGJpdC4uLiBJJ20gYXNzdW1pbmcgaXQgaXMgYSBwYXJpdHkgZXJyb3IgaW5kaWNhdG9yCisJICogYXMgdGhlIGdlbmVyaWMgZmlybXdhcmUgd2lsbCBzZXQgdGhpcyBiaXQgdG8gMSBpZiBhIHBhcml0eSBlcnJvciBvY2N1cnMuCisJICogSSBjYW4gbm90IGZpbmQgcmVmZXJlbmNlIHRvIGFueSBvdGhlciBlcnJvciBldmVudHMuCisJICoKKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChwcml2LT5jdXJyZW50X3N0YXR1cyAmIENZUF9FUlJPUikgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXR0eV9mbGFnID0gVFRZX1BBUklUWTsKKwkJZGJnKCIlcyAtIFBhcml0eSBFcnJvciBkZXRlY3RlZCIsIF9fRlVOQ1RJT05fXyk7CisJfSBlbHNlCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCS8qIHByb2Nlc3MgcmVhZCBpZiB0aGVyZSBpcyBkYXRhIG90aGVyIHRoYW4gbGluZSBzdGF0dXMgKi8KKwlpZiAodHR5ICYmIChieXRlcyA+IGkpKSB7CisJCWZvciAoOyBpIDwgYnl0ZXMgOyArK2kpIHsKKwkJCWRiZygicHVzaGluZyBieXRlIG51bWJlciAlZCAtICVkIC0gJWMiLGksZGF0YVtpXSxkYXRhW2ldKTsKKwkJCWlmKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCX0KKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgdHR5X2ZsYWcpOworCQl9CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHBvcnQtPnR0eSk7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT5ieXRlc19pbiArPSBieXRlczsgIC8qIGNvbnRyb2wgYW5kIHN0YXR1cyBieXRlKHMpIGFyZSBhbHNvIGNvdW50ZWQgKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKK2NvbnRpbnVlX3JlYWQ6CisJCisJLyogQ29udGludWUgdHJ5aW5nIHRvIGFsd2F5cyByZWFkLi4uIHVubGVzcyB0aGUgcG9ydCBoYXMgY2xvc2VkLiAgKi8KKworCWlmIChwb3J0LT5vcGVuX2NvdW50ID4gMCkgeworCXVzYl9maWxsX2ludF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgcG9ydC0+c2VyaWFsLT5kZXYsCisJCXVzYl9yY3ZpbnRwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCBwb3J0LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQljeXByZXNzX3JlYWRfaW50X2NhbGxiYWNrLCBwb3J0LAorCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5pbnRlcnZhbCk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCkKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwl9CisJCisJcmV0dXJuOworfSAvKiBjeXByZXNzX3JlYWRfaW50X2NhbGxiYWNrICovCisKKworc3RhdGljIHZvaWQgY3lwcmVzc193cml0ZV9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgcmVzdWx0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCQljYXNlIDA6CisJCQkvKiBzdWNjZXNzICovCisJCQlicmVhazsKKwkJY2FzZSAtRUNPTk5SRVNFVDoKKwkJY2FzZSAtRU5PRU5UOgorCQljYXNlIC1FU0hVVERPV046CisJCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQkJcHJpdi0+d3JpdGVfdXJiX2luX3VzZSA9IDA7CisJCQlyZXR1cm47CisJCWRlZmF1bHQ6CisJCQkvKiBlcnJvciBpbiB0aGUgdXJiLCBzbyB3ZSBoYXZlIHRvIHJlc3VibWl0IGl0ICovCisJCQlkYmcoIiVzIC0gT3ZlcmZsb3cgaW4gd3JpdGUiLCBfX0ZVTkNUSU9OX18pOworCQkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCQlwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDE7CisJCQlwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYiwgR0ZQX0FUT01JQyk7CisJCQlpZiAocmVzdWx0KQorCQkJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwKKwkJCQkJX19GVU5DVElPTl9fLCByZXN1bHQpOworCQkJZWxzZQorCQkJCXJldHVybjsKKwl9CisJCisJcHJpdi0+d3JpdGVfdXJiX2luX3VzZSA9IDA7CisJCisJLyogc2VuZCBhbnkgYnVmZmVyZWQgZGF0YSAqLworCWN5cHJlc3Nfc2VuZChwb3J0KTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFdyaXRlIGJ1ZmZlciBmdW5jdGlvbnMgLSBidWZmZXJpbmcgY29kZSBmcm9tIHBsMjMwMyB1c2VkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBjeXByZXNzX2J1Zl9hbGxvYworICoKKyAqIEFsbG9jYXRlIGEgY2lyY3VsYXIgYnVmZmVyIGFuZCBhbGwgYXNzb2NpYXRlZCBtZW1vcnkuCisgKi8KKworc3RhdGljIHN0cnVjdCBjeXByZXNzX2J1ZiAqY3lwcmVzc19idWZfYWxsb2ModW5zaWduZWQgaW50IHNpemUpCit7CisKKwlzdHJ1Y3QgY3lwcmVzc19idWYgKmNiOworCisKKwlpZiAoc2l6ZSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWNiID0gKHN0cnVjdCBjeXByZXNzX2J1ZiAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjeXByZXNzX2J1ZiksIEdGUF9LRVJORUwpOworCWlmIChjYiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWNiLT5idWZfYnVmID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2ItPmJ1Zl9idWYgPT0gTlVMTCkgeworCQlrZnJlZShjYik7CisJCXJldHVybiBOVUxMOworCX0KKworCWNiLT5idWZfc2l6ZSA9IHNpemU7CisJY2ItPmJ1Zl9nZXQgPSBjYi0+YnVmX3B1dCA9IGNiLT5idWZfYnVmOworCisJcmV0dXJuIGNiOworCit9CisKKworLyoKKyAqIGN5cHJlc3NfYnVmX2ZyZWUKKyAqCisgKiBGcmVlIHRoZSBidWZmZXIgYW5kIGFsbCBhc3NvY2lhdGVkIG1lbW9yeS4KKyAqLworCitzdGF0aWMgdm9pZCBjeXByZXNzX2J1Zl9mcmVlKHN0cnVjdCBjeXByZXNzX2J1ZiAqY2IpCit7CisJaWYgKGNiICE9IE5VTEwpIHsKKwkJaWYgKGNiLT5idWZfYnVmICE9IE5VTEwpCisJCQlrZnJlZShjYi0+YnVmX2J1Zik7CisJCWtmcmVlKGNiKTsKKwl9Cit9CisKKworLyoKKyAqIGN5cHJlc3NfYnVmX2NsZWFyCisgKgorICogQ2xlYXIgb3V0IGFsbCBkYXRhIGluIHRoZSBjaXJjdWxhciBidWZmZXIuCisgKi8KKworc3RhdGljIHZvaWQgY3lwcmVzc19idWZfY2xlYXIoc3RydWN0IGN5cHJlc3NfYnVmICpjYikKK3sKKwlpZiAoY2IgIT0gTlVMTCkKKwkJY2ItPmJ1Zl9nZXQgPSBjYi0+YnVmX3B1dDsKKwkJLyogZXF1aXZhbGVudCB0byBhIGdldCBvZiBhbGwgZGF0YSBhdmFpbGFibGUgKi8KK30KKworCisvKgorICogY3lwcmVzc19idWZfZGF0YV9hdmFpbAorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEgYXZhaWxhYmxlIGluIHRoZSBjaXJjdWxhcgorICogYnVmZmVyLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY3lwcmVzc19idWZfZGF0YV9hdmFpbChzdHJ1Y3QgY3lwcmVzc19idWYgKmNiKQoreworCWlmIChjYiAhPSBOVUxMKQorCQlyZXR1cm4gKChjYi0+YnVmX3NpemUgKyBjYi0+YnVmX3B1dCAtIGNiLT5idWZfZ2V0KSAlIGNiLT5idWZfc2l6ZSk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworCisvKgorICogY3lwcmVzc19idWZfc3BhY2VfYXZhaWwKKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBvZiBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGNpcmN1bGFyCisgKiBidWZmZXIuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBjeXByZXNzX2J1Zl9zcGFjZV9hdmFpbChzdHJ1Y3QgY3lwcmVzc19idWYgKmNiKQoreworCWlmIChjYiAhPSBOVUxMKQorCQlyZXR1cm4gKChjYi0+YnVmX3NpemUgKyBjYi0+YnVmX2dldCAtIGNiLT5idWZfcHV0IC0gMSkgJSBjYi0+YnVmX3NpemUpOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIGN5cHJlc3NfYnVmX3B1dAorICoKKyAqIENvcHkgZGF0YSBkYXRhIGZyb20gYSB1c2VyIGJ1ZmZlciBhbmQgcHV0IGl0IGludG8gdGhlIGNpcmN1bGFyIGJ1ZmZlci4KKyAqIFJlc3RyaWN0IHRvIHRoZSBhbW91bnQgb2Ygc3BhY2UgYXZhaWxhYmxlLgorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IGN5cHJlc3NfYnVmX3B1dChzdHJ1Y3QgY3lwcmVzc19idWYgKmNiLCBjb25zdCBjaGFyICpidWYsCisJdW5zaWduZWQgaW50IGNvdW50KQoreworCisJdW5zaWduZWQgaW50IGxlbjsKKworCisJaWYgKGNiID09IE5VTEwpCisJCXJldHVybiAwOworCisJbGVuICA9IGN5cHJlc3NfYnVmX3NwYWNlX2F2YWlsKGNiKTsKKwlpZiAoY291bnQgPiBsZW4pCisJCWNvdW50ID0gbGVuOworCisJaWYgKGNvdW50ID09IDApCisJCXJldHVybiAwOworCisJbGVuID0gY2ItPmJ1Zl9idWYgKyBjYi0+YnVmX3NpemUgLSBjYi0+YnVmX3B1dDsKKwlpZiAoY291bnQgPiBsZW4pIHsKKwkJbWVtY3B5KGNiLT5idWZfcHV0LCBidWYsIGxlbik7CisJCW1lbWNweShjYi0+YnVmX2J1ZiwgYnVmK2xlbiwgY291bnQgLSBsZW4pOworCQljYi0+YnVmX3B1dCA9IGNiLT5idWZfYnVmICsgY291bnQgLSBsZW47CisJfSBlbHNlIHsKKwkJbWVtY3B5KGNiLT5idWZfcHV0LCBidWYsIGNvdW50KTsKKwkJaWYgKGNvdW50IDwgbGVuKQorCQkJY2ItPmJ1Zl9wdXQgKz0gY291bnQ7CisJCWVsc2UgLyogY291bnQgPT0gbGVuICovCisJCQljYi0+YnVmX3B1dCA9IGNiLT5idWZfYnVmOworCX0KKworCXJldHVybiBjb3VudDsKKworfQorCisKKy8qCisgKiBjeXByZXNzX2J1Zl9nZXQKKyAqCisgKiBHZXQgZGF0YSBmcm9tIHRoZSBjaXJjdWxhciBidWZmZXIgYW5kIGNvcHkgdG8gdGhlIGdpdmVuIGJ1ZmZlci4KKyAqIFJlc3RyaWN0IHRvIHRoZSBhbW91bnQgb2YgZGF0YSBhdmFpbGFibGUuCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY3lwcmVzc19idWZfZ2V0KHN0cnVjdCBjeXByZXNzX2J1ZiAqY2IsIGNoYXIgKmJ1ZiwKKwl1bnNpZ25lZCBpbnQgY291bnQpCit7CisKKwl1bnNpZ25lZCBpbnQgbGVuOworCisKKwlpZiAoY2IgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBjeXByZXNzX2J1Zl9kYXRhX2F2YWlsKGNiKTsKKwlpZiAoY291bnQgPiBsZW4pCisJCWNvdW50ID0gbGVuOworCisJaWYgKGNvdW50ID09IDApCisJCXJldHVybiAwOworCisJbGVuID0gY2ItPmJ1Zl9idWYgKyBjYi0+YnVmX3NpemUgLSBjYi0+YnVmX2dldDsKKwlpZiAoY291bnQgPiBsZW4pIHsKKwkJbWVtY3B5KGJ1ZiwgY2ItPmJ1Zl9nZXQsIGxlbik7CisJCW1lbWNweShidWYrbGVuLCBjYi0+YnVmX2J1ZiwgY291bnQgLSBsZW4pOworCQljYi0+YnVmX2dldCA9IGNiLT5idWZfYnVmICsgY291bnQgLSBsZW47CisJfSBlbHNlIHsKKwkJbWVtY3B5KGJ1ZiwgY2ItPmJ1Zl9nZXQsIGNvdW50KTsKKwkJaWYgKGNvdW50IDwgbGVuKQorCQkJY2ItPmJ1Zl9nZXQgKz0gY291bnQ7CisJCWVsc2UgLyogY291bnQgPT0gbGVuICovCisJCQljYi0+YnVmX2dldCA9IGNiLT5idWZfYnVmOworCX0KKworCXJldHVybiBjb3VudDsKKworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1vZHVsZSBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBfX2luaXQgY3lwcmVzc19pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKwkKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKwkKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZjeXByZXNzX2VhcnRobWF0ZV9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX2VtX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmN5cHJlc3NfaGlkY29tX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfaGlkY29tX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmY3lwcmVzc19kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKKworCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlyZXR1cm4gMDsKK2ZhaWxlZF91c2JfcmVnaXN0ZXI6CisJdXNiX2RlcmVnaXN0ZXIoJmN5cHJlc3NfZHJpdmVyKTsKK2ZhaWxlZF9oaWRjb21fcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZjeXByZXNzX2hpZGNvbV9kZXZpY2UpOworZmFpbGVkX2VtX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmY3lwcmVzc19lYXJ0aG1hdGVfZGV2aWNlKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IGN5cHJlc3NfZXhpdCAodm9pZCkKK3sKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXVzYl9kZXJlZ2lzdGVyICgmY3lwcmVzc19kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmN5cHJlc3NfZWFydGhtYXRlX2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmY3lwcmVzc19oaWRjb21fZGV2aWNlKTsKK30KKworCittb2R1bGVfaW5pdChjeXByZXNzX2luaXQpOworbW9kdWxlX2V4aXQoY3lwcmVzc19leGl0KTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX1ZFUlNJT04oIERSSVZFUl9WRVJTSU9OICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7Cittb2R1bGVfcGFyYW0oc3RhdHMsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0Moc3RhdHMsICJFbmFibGUgc3RhdGlzdGljcyBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMTJlZTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5oCkBAIC0wLDAgKzEsNTUgQEAKKyNpZm5kZWYgQ1lQUkVTU19NOF9ICisjZGVmaW5lIENZUFJFU1NfTThfSAorCisvKiBkZWZpbml0aW9ucyBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyB1c2VkIGZvciB0aGUgY3lwcmVzcyBVU0IgdG8gU2VyaWFsIGNvbnRyb2xsZXIgKi8KKworLyogRm9yIHNlbmRpbmcgb3VyIGZlYXR1cmUgYnVmZmVyIC0gY29udHJvbGxpbmcgc2VyaWFsIGNvbW11bmljYXRpb24gc3RhdGVzICovCisvKiBMaW51eCBISUQgaGFzIG5vIHN1cHBvcnQgZm9yIHNlcmlhbCBkZXZpY2VzIHNvIHdlIGRvIHRoaXMgdGhyb3VnaCB0aGUgZHJpdmVyICovCisjZGVmaW5lIEhJRF9SRVFfR0VUX1JFUE9SVCAweDAxCisjZGVmaW5lIEhJRF9SRVFfU0VUX1JFUE9SVCAweDA5CisKKy8qIExpc3Qgb3RoZXIgY3lwcmVzcyBVU0IgdG8gU2VyaWFsIGRldmljZXMgaGVyZSwgYW5kIGFkZCB0aGVtIHRvIHRoZSBpZF90YWJsZSAqLworCisvKiBEZUxvcm1lIEVhcnRobWF0ZSBVU0IgLSBhIEdQUyBkZXZpY2UgKi8KKyNkZWZpbmUJVkVORE9SX0lEX0RFTE9STUUJCSAweDExNjMKKyNkZWZpbmUgUFJPRFVDVF9JRF9FQVJUSE1BVEVVU0IJCSAweDAxMDAKKworLyogQ3lwcmVzcyBISUQtPkNPTSBSUzIzMiBBZGFwdGVyICovCisjZGVmaW5lIFZFTkRPUl9JRF9DWVBSRVNTCQkgMHgwNGI0CisjZGVmaW5lIFBST0RVQ1RfSURfQ1lQSElEQ09NCQkgMHg1NTAwCisvKiBFbmQgb2YgZGV2aWNlIGxpc3RpbmcgKi8KKworLyogVXNlZCBmb3Igc2V0dGluZyAvIHJlcXVlc3Rpbmcgc2VyaWFsIGxpbmUgc2V0dGluZ3MgKi8KKyNkZWZpbmUgQ1lQUkVTU19TRVRfQ09ORklHIDB4MDEKKyNkZWZpbmUgQ1lQUkVTU19HRVRfQ09ORklHIDB4MDIKKworLyogVXNlZCBmb3IgdGhyb3R0bGUgY29udHJvbCAqLworI2RlZmluZSBUSFJPVFRMRUQgMHgxCisjZGVmaW5lIEFDVFVBTExZX1RIUk9UVExFRCAweDIKKworLyogY2hpcHR5cGVzIC0gdXNlZCBpbiBjYXNlIGZpcm13YXJlIGRpZmZlcnMgZnJvbSB0aGUgZ2VuZXJpYyBmb3JtIC4uLiBvZmZlcmluZworICogCWRpZmZlcmVudCBiYXVkIHNwZWVkcy9ldGMuCisgKi8KKworI2RlZmluZSBDVF9FQVJUSE1BVEUJMHgwMQorI2RlZmluZSBDVF9DWVBISURDT00JMHgwMgorI2RlZmluZSBDVF9HRU5FUklDCTB4MEYKKy8qIEVuZCBvZiBjaGlwdHlwZSBkZWZpbml0aW9ucyAqLworCisvKiBSUy0yMzIgc2VyaWFsIGRhdGEgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBkZWZpbml0aW9ucyAqLworLyogdGhlc2UgYXJlIHNlbnQgLyByZWFkIGF0IGJ5dGUgMCBvZiB0aGUgaW5wdXQvb3V0cHV0IGhpZCByZXBvcnRzICovCisvKiBZb3UgY2FuIGZpbmQgdGhlc2UgdmFsdWVzIGRlZmluZWQgaW4gdGhlIENZNDYwMSBVU0IgdG8gU2VyaWFsIGRlc2lnbiBub3RlcyAqLworCisjZGVmaW5lIENPTlRST0xfRFRSIAkweDIwCS8qIGRhdGEgdGVybWluYWwgcmVhZHkgLSBmbG93IGNvbnRyb2wgLSBob3N0IHRvIGRldmljZSAqLworI2RlZmluZSBVQVJUX0RTUgkweDIwCS8qIGRhdGEgc2V0IHJlYWR5IC0gZmxvdyBjb250cm9sIC0gZGV2aWNlIHRvIGhvc3QgKi8KKyNkZWZpbmUgQ09OVFJPTF9SVFMgCTB4MTAJLyogcmVxdWVzdCB0byBzZW5kIC0gZmxvdyBjb250cm9sIC0gaG9zdCB0byBkZXZpY2UgKi8KKyNkZWZpbmUgVUFSVF9DVFMJMHgxMAkvKiBjbGVhciB0byBzZW5kIC0gZmxvdyBjb250cm9sIC0gZGV2aWNlIHRvIGhvc3QgKi8KKyNkZWZpbmUJVUFSVF9SSQkJMHgxMAkvKiByaW5nIGluZGljYXRvciAtIG1vZGVtIC0gZGV2aWNlIHRvIGhvc3QgKi8gCisjZGVmaW5lIFVBUlRfQ0QJCTB4NDAJLyogY2FycmllciBkZXRlY3QgLSBtb2RlbSAtIGRldmljZSB0byBob3N0ICovCisjZGVmaW5lIENZUF9FUlJPUiAJMHgwOAkvKiByZWNlaXZlZCBmcm9tIGlucHV0IHJlcG9ydCAtIGRldmljZSB0byBob3N0ICovCisvKiBOb3RlIC0gdGhlIGJlbG93IGhhcyBub3RoaW5nIHRvIHRvIHdpdGggdGhlICJmZWF0dXJlIHJlcG9ydCIgcmVzZXQgKi8KKyNkZWZpbmUgQ09OVFJPTF9SRVNFVAkweDA4ICAJLyogc2VudCB3aXRoIG91dHB1dCByZXBvcnQgLSBob3N0IHRvIGRldmljZSAqLworCisvKiBFbmQgb2YgUlMtMjMyIHByb3RvY29sIGRlZmluaXRpb25zICovCisKKyNlbmRpZiAvKiBDWVBSRVNTX004X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWY5Mjc4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCkBAIC0wLDAgKzEsMjA0OSBAQAorLyoKKyogIERpZ2kgQWNjZWxlUG9ydCBVU0ItNCBhbmQgVVNCLTIgU2VyaWFsIENvbnZlcnRlcnMKKyoKKyogIENvcHlyaWdodCAyMDAwIGJ5IERpZ2kgSW50ZXJuYXRpb25hbAorKgorKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyoKKyogIFNoYW1lbGVzc2x5IGJhc2VkIG9uIEJyaWFuIFdhcm5lcidzIGtleXNwYW5fcGRhLmMgYW5kIEdyZWcgS3JvYWgtSGFydG1hbidzCisqICB1c2Itc2VyaWFsIGRyaXZlci4KKyoKKyogIFBldGVyIEJlcmdlciAocGJlcmdlckBicmltc29uLmNvbSkKKyogIEFsIEJvcmNoZXJzIChib3JjaGVyc0BzdGVpbmVycG9pbnQuY29tKQorKiAKKyogKDEyLzAzLzIwMDEpIGdraAorKglzd2l0Y2hlZCB0byB1c2luZyBwb3J0LT5vcGVuX2NvdW50IGluc3RlYWQgb2YgcHJpdmF0ZSB2ZXJzaW9uLgorKglSZW1vdmVkIHBvcnQtPmFjdGl2ZQorKgorKiAoMDQvMDgvMjAwMSkgZ2IKKyoJSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZC4KKyoKKyogKDExLzAxLzIwMDApIEFkYW0gSi4gUmljaHRlcgorKgl1c2JfZGV2aWNlX2lkIHRhYmxlIHN1cHBvcnQKKyogCisqICgxMS8wMS8yMDAwKSBwYmVyZ2VyIGFuZCBib3JjaGVycworKiAgICAtLSBUdXJuZWQgb2ZmIHRoZSBVU0JfRElTQUJMRV9TUEQgZmxhZyBmb3Igd3JpdGUgYnVsayB1cmJzLS1pdCBjYXVzZWQKKyogICAgICAgVVNCIDQgcG9ydHMgdG8gaGFuZyBvbiBzdGFydHVwLgorKiAgICAtLSBTZXJpYWxpemVkIGFjY2VzcyB0byB3cml0ZSB1cmJzIGJ5IGFkZGluZyB0aGUgZHBfd3JpdGVfdXJiX2luX3VzZQorKiAgICAgICBmbGFnOyBvdGhlcndpc2UsIHRoZSBkcml2ZXIgY2F1c2VkIFNNUCBzeXN0ZW0gaGFuZ3MuICBXYXRjaGluZyB0aGUKKyogICAgICAgdXJiIHN0YXR1cyBpcyBub3Qgc3VmZmljaWVudC4KKyoKKyogKDEwLzA1LzIwMDApIGdraAorKiAgICAtLSBGaXhlZCBidWcgd2l0aCB1cmItPmRldiBub3QgYmVpbmcgc2V0IHByb3Blcmx5LCBub3cgdGhhdCB0aGUgdXNiCisqCWNvcmUgbmVlZHMgaXQuCisqIAorKiAgKDgvOC8yMDAwKSBwYmVyZ2VyIGFuZCBib3JjaGVycworKiAgICAtLSBGaXhlZCBjbG9zZSBzbyB0aGF0IAorKiAgICAgICAtIGl0IGNhbiB0aW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHRyYW5zbWl0IGlkbGUsIGlmIG5lZWRlZDsKKyogICAgICAgLSBpdCBpZ25vcmVzIGludGVycnVwdHMgd2hlbiBmbHVzaGluZyB0aGUgcG9ydCwgdHVybmluZworKiAgICAgICAgIG9mIG1vZGVtIHNpZ25hbGxpbmcsIGFuZCBzbyBvbjsKKyogICAgICAgLSBpdCB3YWl0cyBmb3IgdGhlIGZsdXNoIHRvIHJlYWxseSBjb21wbGV0ZSBiZWZvcmUgcmV0dXJuaW5nLgorKiAgICAtLSBSZWFkX2J1bGtfY2FsbGJhY2sgYW5kIHdyaXRlX2J1bGtfY2FsbGJhY2sgY2hlY2sgZm9yIGEgY2xvc2VkCisqICAgICAgIHBvcnQgYmVmb3JlIHVzaW5nIHRoZSB0dHkgc3RydWN0IG9yIHdyaXRpbmcgdG8gdGhlIHBvcnQuCisqICAgIC0tIFRoZSB0d28gY2hhbmdlcyBhYm92ZSBmaXggdGhlIG9vcHMgY2F1c2VkIGJ5IGludGVycnVwdGVkIGNsb3Nlcy4KKyogICAgLS0gQWRkZWQgaW50ZXJydXB0aWJsZSBhcmdzIHRvIHdyaXRlX29vYl9jb21tYW5kIGFuZCBzZXRfbW9kZW1fc2lnbmFscworKiAgICAgICBhbmQgYWRkZWQgYSB0aW1lb3V0IGFyZyB0byB0cmFuc21pdF9pZGxlOyBuZWVkZWQgZm9yIGZpeGVzIHRvCisqICAgICAgIGNsb3NlLgorKiAgICAtLSBBZGRlZCBjb2RlIGZvciByeF90aHJvdHRsZSBhbmQgcnhfdW50aHJvdHRsZSBzbyB0aGF0IGlucHV0IGZsb3cKKyogICAgICAgY29udHJvbCB3b3Jrcy4KKyogICAgLS0gQWRkZWQgY29kZSB0byBzZXQgb3ZlcnJ1biwgcGFyaXR5LCBmcmFtaW5nLCBhbmQgYnJlYWsgZXJyb3JzCisqICAgICAgICh1bnRlc3RlZCkuCisqICAgIC0tIFNldCBVU0JfRElTQUJMRV9TUEQgZmxhZyBmb3Igd3JpdGUgYnVsayB1cmJzLCBzbyBubyAwIGxlbmd0aAorKiAgICAgICBidWxrIHdyaXRlcyBhcmUgZG9uZS4gIFRoZXNlIGh1bmcgdGhlIERpZ2kgVVNCIGRldmljZS4gIFRoZQorKiAgICAgICAwIGxlbmd0aCBidWxrIHdyaXRlcyB3ZXJlIGEgbmV3IGZlYXR1cmUgb2YgdXNiLXVoY2kgYWRkZWQgaW4KKyogICAgICAgdGhlIDIuNC4wLXRlc3Q2IGtlcm5lbHMuCisqICAgIC0tIEZpeGVkIG1vZCBpbmMgcmFjZSBpbiBvcGVuOyBkbyBtb2QgaW5jIGJlZm9yZSBzbGVlcGluZyB0byB3YWl0CisqICAgICAgIGZvciBhIGNsb3NlIHRvIGZpbmlzaC4KKyoKKyogICg3LzMxLzIwMDApIHBiZXJnZXIKKyogICAgLS0gRml4ZWQgYnVncyB3aXRoIGhhcmR3YXJlIGhhbmRzaGFraW5nOgorKiAgICAgICAtIEFkZGVkIGNvZGUgdG8gc2V0L2NsZWFyIHR0eS0+aHdfc3RvcHBlZCBpbiBkaWdpX3JlYWRfb29iX2NhbGxiYWNrKCkKKyogICAgICAgICBhbmQgZGlnaV9zZXRfdGVybWlvcygpCisqICAgIC0tIEFkZGVkIGNvZGUgaW4gZGlnaV9zZXRfdGVybWlvcygpIHRvCisqICAgICAgIC0gYWRkIGNvbmRpdGlvbmFsIGluIGNvZGUgaGFuZGxpbmcgdHJhbnNpdGlvbiBmcm9tIEIwIHRvIG9ubHkKKyogICAgICAgICBzZXQgUlRTIGlmIFJUUy9DVFMgZmxvdyBjb250cm9sIGlzIGVpdGhlciBub3QgaW4gdXNlIG9yIGlmCisqICAgICAgICAgdGhlIHBvcnQgaXMgbm90IGN1cnJlbnRseSB0aHJvdHRsZWQuCisqICAgICAgIC0gaGFuZGxlIHR1cm5pbmcgb2ZmIENSVFNDVFMuCisqCisqICAoNy8zMC8yMDAwKSBib3JjaGVycworKiAgICAtLSBBZGRlZCBzdXBwb3J0IGZvciBtb3JlIHRoYW4gb25lIERpZ2kgVVNCIGRldmljZSBieSBtb3ZpbmcKKyogICAgICAgZ2xvYmFscyB0byBhIHByaXZhdGUgc3RydWN0dXJlIGluIHRoZSBwb2ludGVkIHRvIGZyb20gdGhlCisqICAgICAgIHVzYl9zZXJpYWwgc3RydWN0dXJlLgorKiAgICAtLSBNb3ZlZCB0aGUgbW9kZW0gY2hhbmdlIGFuZCB0cmFuc21pdCBpZGxlIHdhaXQgcXVldWVzIGludG8KKyogICAgICAgdGhlIHBvcnQgcHJpdmF0ZSBzdHJ1Y3R1cmUsIHNvIGVhY2ggcG9ydCBoYXMgaXRzIG93biBxdWV1ZQorKiAgICAgICByYXRoZXIgdGhhbiBzaGFyaW5nIGdsb2JhbCBxdWV1ZXMuCisqICAgIC0tIEFkZGVkIHN1cHBvcnQgZm9yIGJyZWFrIHNpZ25hbHMuCisqCisqICAoNy8yNS8yMDAwKSBwYmVyZ2VyCisqICAgIC0tIEFkZGVkIFVTQi0yIHN1cHBvcnQuICBOb3RlOiB0aGUgVVNCLTIgc3VwcG9ydHMgMyBkZXZpY2VzOiB0d28KKyogICAgICAgc2VyaWFsIGFuZCBhIHBhcmFsbGVsIHBvcnQuICBUaGUgcGFyYWxsZWwgcG9ydCBpcyBpbXBsZW1lbnRlZAorKiAgICAgICBhcyBhIHNlcmlhbC10by1wYXJhbGxlbCBjb252ZXJ0ZXIuICBUaGF0IGlzLCB0aGUgZHJpdmVyIGFjdHVhbGx5CisqICAgICAgIHByZXNlbnRzIGFsbCB0aHJlZSBVU0ItMiBpbnRlcmZhY2VzIGFzIHNlcmlhbCBwb3J0cywgYnV0IHRoZSB0aGlyZAorKiAgICAgICBvbmUgcGh5c2ljYWxseSBjb25uZWN0cyB0byBhIHBhcmFsbGVsIGRldmljZS4gIFRodXMsIGZvciBleGFtcGxlLAorKiAgICAgICBvbmUgY291bGQgcGx1ZyBhIHBhcmFsbGVsIHByaW50ZXIgaW50byB0aGUgVVNCLTIncyB0aGlyZCBwb3J0LAorKiAgICAgICBidXQgZnJvbSB0aGUga2VybmVsJ3MgKGFuZCB1c2VybGFuZCdzKSBwb2ludCBvZiB2aWV3IHdoYXQncworKiAgICAgICBhY3R1YWxseSBvdXQgdGhlcmUgaXMgYSBzZXJpYWwgZGV2aWNlLgorKgorKiAgKDcvMTUvMjAwMCkgYm9yY2hlcnMKKyogICAgLS0gRml4ZWQgcmFjZSBpbiBvcGVuIHdoZW4gYSBjbG9zZSBpcyBpbiBwcm9ncmVzcy4KKyogICAgLS0gS2VlcCBjb3VudCBvZiBvcGVucyBhbmQgZGVjIHRoZSBtb2R1bGUgdXNlIGNvdW50IGZvciBlYWNoCisqICAgICAgIG91dHN0YW5kaW5nIG9wZW4gd2hlbiBzaHV0ZG93biBpcyBjYWxsZWQgKG9uIGRpc2Nvbm5lY3QpLgorKiAgICAtLSBGaXhlZCBzYW5pdHkgY2hlY2tzIGluIHJlYWRfYnVsa19jYWxsYmFjayBhbmQgd3JpdGVfYnVsa19jYWxsYmFjaworKiAgICAgICBzbyBwb2ludGVycyBhcmUgY2hlY2tlZCBiZWZvcmUgdXNlLgorKiAgICAtLSBTcGxpdCByZWFkIGJ1bGsgY2FsbGJhY2sgaW50byBpbiBiYW5kIGFuZCBvdXQgb2YgYmFuZAorKiAgICAgICBjYWxsYmFja3MsIGFuZCBubyBsb25nZXIgcmVzdGFydCByZWFkIGNoYWlucyBpZiB0aGVyZSBpcworKiAgICAgICBhIHN0YXR1cyBlcnJvciBvciBhIHNhbml0eSBlcnJvci4gIFRoaXMgZml4ZWQgdGhlIHNlZworKiAgICAgICBmYXVsdHMgYW5kIG90aGVyIGVycm9ycyB3ZSB1c2VkIHRvIGdldCBvbiBkaXNjb25uZWN0LgorKiAgICAtLSBQb3J0LT5hY3RpdmUgaXMgb25jZSBhZ2FpbiBhIGZsYWcgYXMgdXNiLXNlcmlhbCBpbnRlbmRlZCBpdAorKiAgICAgICB0byBiZSwgbm90IGEgY291bnQuICBTaW5jZSBpdCB3YXMgb25seSBhIGNoYXIgaXQgd291bGQKKyogICAgICAgaGF2ZSBiZWVuIGxpbWl0ZWQgdG8gMjU2IHNpbXVsdGFuZW91cyBvcGVucy4gIE5vdyB0aGUgb3BlbgorKiAgICAgICBjb3VudCBpcyBrZXB0IGluIHRoZSBwb3J0IHByaXZhdGUgc3RydWN0dXJlIGluIGRwX29wZW5fY291bnQuCisqICAgIC0tIEFkZGVkIGNvZGUgZm9yIG1vZHVsYXJpemF0aW9uIG9mIHRoZSBkaWdpX2FjY2VsZXBvcnQgZHJpdmVyLgorKgorKiAgKDYvMjcvMjAwMCkgcGJlcmdlciBhbmQgYm9yY2hlcnMKKyogICAgLS0gWmVyb2VkIG91dCBzeW5jIGZpZWxkIGluIHRoZSB3YWtldXBfdGFzayBiZWZvcmUgZmlyc3QgdXNlOworKiAgICAgICBvdGhlcndpc2UgdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUgbWlnaHQgcHJldmVudCB0aGUgdGFzayBmcm9tCisqICAgICAgIGJlaW5nIHNjaGVkdWxlZC4KKyogICAgLS0gSW5pdGlhbGl6ZWQgcmV0IHZhbHVlIHRvIDAgaW4gd3JpdGVfYnVsa19jYWxsYmFjaywgb3RoZXJ3aXNlCisqICAgICAgIHRoZSB1bmluaXRpYWxpemVkIHZhbHVlIGNvdWxkIGNhdXNlIGEgc3B1cmlvdXMgZGVidWdnaW5nIG1lc3NhZ2UuCisqCisqICAoNi8yMi8yMDAwKSBwYmVyZ2VyIGFuZCBib3JjaGVycworKiAgICAtLSBNYWRlIGNvbmRfd2FpdF8uLi4gaW5saW5lLS1hcHBhcmVudGx5IG9uIFNQQVJDIHRoZSBmbGFncyBhcmcKKyogICAgICAgdG8gc3Bpbl9sb2NrX2lycXNhdmUgY2Fubm90IGJlIHBhc3NlZCB0byBhbm90aGVyIGZ1bmN0aW9uCisqICAgICAgIHRvIGNhbGwgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZS4gIFRoYW5rcyB0byBQYXVsaW5lIE1pZGRlbGluay4KKyogICAgLS0gSW4gZGlnaV9zZXRfbW9kZW1fc2lnbmFscyB0aGUgaW5uZXIgbmVzdGVkIHNwaW4gbG9ja3MgdXNlIGp1c3QKKyogICAgICAgc3Bpbl9sb2NrKCkgcmF0aGVyIHRoYW4gc3Bpbl9sb2NrX2lycXNhdmUoKS4gIFRoZSBvbGQgY29kZQorKiAgICAgICBtaXN0YWtlbmx5IGxlZnQgaW50ZXJydXB0cyBvZmYuICBUaGFua3MgdG8gUGF1bGluZSBNaWRkZWxpbmsuCisqICAgIC0tIGNvcHlfZnJvbV91c2VyICh3aGljaCBjYW4gc2xlZXApIGlzIG5vIGxvbmdlciBjYWxsZWQgd2hpbGUgYQorKiAgICAgICBzcGlubG9jayBpcyBoZWxkLiAgV2UgY29weSB0byBhIGxvY2FsIGJ1ZmZlciBiZWZvcmUgZ2V0dGluZworKiAgICAgICB0aGUgc3BpbmxvY2stLWRvbid0IGxpa2UgdGhlIGV4dHJhIGNvcHkgYnV0IHRoZSBjb2RlIGlzIHNpbXBsZXIuCisqICAgIC0tIFByaW50ayBhbmQgZGJnIGFyZSBubyBsb25nZXIgY2FsbGVkIHdoaWxlIGEgc3BpbiBsb2NrIGlzIGhlbGQuCisqCisqICAoNi80LzIwMDApIHBiZXJnZXIgYW5kIGJvcmNoZXJzCisqICAgIC0tIFJlcGxhY2VkIHNlcGFyYXRlIGNhbGxzIHRvIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgYW5kCisqICAgICAgIGludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCB3aXRoIGEgbmV3IGZ1bmN0aW9uCisqICAgICAgIGNvbmRfd2FpdF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRfaXJxcmVzdG9yZS4gIFRoaXMgZWxpbWluYXRlcworKiAgICAgICB0aGUgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIHdha2UgdXAgY291bGQgaGFwcGVuIGFmdGVyCisqICAgICAgIHRoZSB1bmxvY2sgYW5kIGJlZm9yZSB0aGUgc2xlZXAuCisqICAgIC0tIENsb3NlIG5vdyB3YWl0cyBmb3Igb3V0cHV0IHRvIGRyYWluLgorKiAgICAtLSBPcGVuIHdhaXRzIHVudGlsIGFueSBjbG9zZSBpbiBwcm9ncmVzcyBpcyBmaW5pc2hlZC4KKyogICAgLS0gQWxsIG91dCBvZiBiYW5kIHJlc3BvbnNlcyBhcmUgbm93IHByb2Nlc3NlZCwgbm90IGp1c3QgdGhlCisqICAgICAgIGZpcnN0IGluIGEgVVNCIHBhY2tldC4KKyogICAgLS0gRml4ZWQgYSBidWcgdGhhdCBwcmV2ZW50ZWQgdGhlIGRyaXZlciBmcm9tIHdvcmtpbmcgd2hlbiB0aGUKKyogICAgICAgZmlyc3QgRGlnaSBwb3J0IHdhcyBub3QgdGhlIGZpcnN0IFVTQiBzZXJpYWwgcG9ydC0tdGhlIGRyaXZlcgorKiAgICAgICB3YXMgbWlzdGFrZW5seSB1c2luZyB0aGUgZXh0ZXJuYWwgVVNCIHNlcmlhbCBwb3J0IG51bWJlciB0bworKiAgICAgICB0cnkgdG8gaW5kZXggaW50byBpdHMgaW50ZXJuYWwgcG9ydHMuCisqICAgIC0tIEZpeGVkIGFuIFNNUCBidWcgLS0gd3JpdGVfYnVsa19jYWxsYmFjayBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbQorKiAgICAgICBhbiBpbnRlcnJ1cHQsIHNvIHNwaW5fbG9ja19pcnFzYXZlL3NwaW5fdW5sb2NrX2lycXJlc3RvcmUgYXJlCisqICAgICAgIG5lZWRlZCBmb3IgbG9ja3Mgb3V0c2lkZSB3cml0ZV9idWxrX2NhbGxiYWNrIHRoYXQgYXJlIGFsc28KKyogICAgICAgYWNxdWlyZWQgYnkgd3JpdGVfYnVsa19jYWxsYmFjayB0byBwcmV2ZW50IGRlYWRsb2Nrcy4KKyogICAgLS0gRml4ZWQgc3VwcG9ydCBmb3Igc2VsZWN0KCkgYnkgbWFraW5nIGRpZ2lfY2hhcnNfaW5fYnVmZmVyKCkKKyogICAgICAgcmV0dXJuIDI1NiB3aGVuIC1FSU5QUk9HUkVTUyBpcyBzZXQsIGFzIHRoZSBsaW5lIGRpc2NpcGxpbmUKKyogICAgICAgY29kZSBpbiBuX3R0eS5jIGV4cGVjdHMuCisqICAgIC0tIEZpeGVkIGFuIGluY2x1ZGUgZmlsZSBvcmRlcmluZyBwcm9ibGVtIHRoYXQgcHJldmVudGVkIGRlYnVnZ2luZworKiAgICAgICBtZXNzYWdlcyBmcm9tIHdvcmtpbmcuCisqICAgIC0tIEZpeGVkIGFuIGludGVybWl0dGVudCB0aW1lb3V0IHByb2JsZW0gdGhhdCBjYXVzZWQgd3JpdGVzIHRvCisqICAgICAgIHNvbWV0aW1lcyBnZXQgc3R1Y2sgb24gc29tZSBtYWNoaW5lcyBvbiBzb21lIGtlcm5lbHMuICBJdCB0dXJucworKiAgICAgICBvdXQgaW4gdGhlc2UgY2lyY3Vtc3RhbmNlcyB3cml0ZV9jaGFuKCkgKGluIG5fdHR5LmMpIHdhcworKiAgICAgICBhc2xlZXAgd2FpdGluZyBmb3Igb3VyIHdha2V1cCBjYWxsLiAgRXZlbiB0aG91Z2ggd2UgY2FsbAorKiAgICAgICB3YWtlX3VwX2ludGVycnVwdGlibGUoKSBpbiBkaWdpX3dyaXRlX2J1bGtfY2FsbGJhY2soKSwgdGhlcmUgaXMKKyogICAgICAgYSByYWNlIGNvbmRpdGlvbiB0aGF0IGNvdWxkIGNhdXNlIHRoZSB3YWtldXAgdG8gZmFpbDogaWYgb3VyCisqICAgICAgIHdha2VfdXBfaW50ZXJydXB0aWJsZSgpIGNhbGwgb2NjdXJzIGJldHdlZW4gdGhlIHRpbWUgdGhhdCBvdXIKKyogICAgICAgZHJpdmVyIHdyaXRlIHJvdXRpbmUgZmluaXNoZXMgYW5kIHdyaXRlX2NoYW4oKSBzZXRzIGN1cnJlbnQtPnN0YXRlCisqICAgICAgIHRvIFRBU0tfSU5URVJSVVBUSUJMRSwgdGhlIGVmZmVjdCBvZiBvdXIgd2FrZXVwIHNldHRpbmcgdGhlIHN0YXRlCisqICAgICAgIHRvIFRBU0tfUlVOTklORyB3aWxsIGJlIGxvc3QgYW5kIHdyaXRlX2NoYW4ncyBzdWJzZXF1ZW50IGNhbGwgdG8KKyogICAgICAgc2NoZWR1bGUoKSB3aWxsIG5ldmVyIHJldHVybiAodW5sZXNzIGl0IGNhdGNoZXMgYSBzaWduYWwpLgorKiAgICAgICBUaGlzIHJhY2UgY29uZGl0aW9uIG9jY3VycyBiZWNhdXNlIHdyaXRlX2J1bGtfY2FsbGJhY2soKSAoYW5kIHRodXMKKyogICAgICAgdGhlIHdha2V1cCkgYXJlIGNhbGxlZCBhc3luY2hvbm91c2x5IGZyb20gYW4gaW50ZXJydXB0LCByYXRoZXIgdGhhbgorKiAgICAgICBmcm9tIHRoZSBzY2hlZHVsZXIuICBXZSBjYW4gYXZvaWQgdGhlIHJhY2UgYnkgY2FsbGluZyB0aGUgd2FrZXVwCisqICAgICAgIGZyb20gdGhlIHNjaGVkdWxlciBxdWV1ZSBhbmQgdGhhdCdzIG91ciBmaXg6ICBOb3csIGF0IHRoZSBlbmQgb2YKKyogICAgICAgd3JpdGVfYnVsa19jYWxsYmFjaygpIHdlIHF1ZXVlIHVwIGEgd2FrZXVwIGNhbGwgb24gdGhlIHNjaGVkdWxlcgorKiAgICAgICB0YXNrIHF1ZXVlLiAgV2Ugc3RpbGwgYWxzbyBpbnZva2UgdGhlIHdha2V1cCBkaXJlY3RseSBzaW5jZSB0aGF0CisqICAgICAgIHNxdWVlemVzIGEgYml0IG1vcmUgcGVyZm9ybWFuY2Ugb3V0IG9mIHRoZSBkcml2ZXIsIGFuZCBhbnkgbG9zdAorKiAgICAgICByYWNlIGNvbmRpdGlvbnMgd2lsbCBnZXQgY2xlYW5lZCB1cCBhdCB0aGUgbmV4dCBzY2hlZHVsZXIgcnVuLgorKgorKiAgICAgICBOT1RFOiAgVGhlIHByb2JsZW0gYWxzbyBnb2VzIGF3YXkgaWYgeW91IGNvbW1lbnQgb3V0CisqICAgICAgIHRoZSB0d28gY29kZSBsaW5lcyBpbiB3cml0ZV9jaGFuKCkgd2hlcmUgY3VycmVudC0+c3RhdGUKKyogICAgICAgaXMgc2V0IHRvIFRBU0tfUlVOTklORyBqdXN0IGJlZm9yZSBjYWxsaW5nIGRyaXZlci53cml0ZSgpIGFuZCB0bworKiAgICAgICBUQVNLX0lOVEVSUlVQVElCTEUgaW1tZWRpYXRlbHkgYWZ0ZXJ3YXJkcy4gIFRoaXMgaXMgd2h5IHRoZQorKiAgICAgICBwcm9ibGVtIGRpZCBub3Qgc2hvdyB1cCB3aXRoIHRoZSAyLjIga2VybmVscyAtLSB0aGV5IGRvIG5vdAorKiAgICAgICBpbmNsdWRlIHRoYXQgY29kZS4KKyoKKyogICg1LzE2LzIwMDApIHBiZXJnZXIgYW5kIGJvcmNoZXJzCisqICAgIC0tIEFkZGVkIHRpbWVvdXRzIHRvIHNsZWVwcywgdG8gZGVmZW5kIGFnYWluc3QgbG9zdCB3YWtlIHVwcy4KKyogICAgLS0gSGFuZGxlIHRyYW5zaXRpb24gdG8vZnJvbSBCMCBiYXVkIHJhdGUgaW4gZGlnaV9zZXRfdGVybWlvcy4KKyoKKyogICg1LzEzLzIwMDApIHBiZXJnZXIgYW5kIGJvcmNoZXJzCisqICAgIC0tIEFsbCBjb21tYW5kcyBub3cgc2VudCBvbiBvdXQgb2YgYmFuZCBwb3J0LCB1c2luZworKiAgICAgICBkaWdpX3dyaXRlX29vYl9jb21tYW5kLgorKiAgICAtLSBHZXQgbW9kZW0gY29udHJvbCBzaWduYWxzIHdoZW5ldmVyIHRoZXkgY2hhbmdlLCBzdXBwb3J0IFRJT0NNR0VULworKiAgICAgICBTRVQvQklTL0JJQyBpb2N0bHMuCisqICAgIC0tIGRpZ2lfc2V0X3Rlcm1pb3Mgbm93IHN1cHBvcnRzIHBhcml0eSwgd29yZCBzaXplLCBzdG9wIGJpdHMsIGFuZAorKiAgICAgICByZWNlaXZlIGVuYWJsZS4KKyogICAgLS0gQ2xlYW5lZCB1cCBvcGVuIGFuZCBjbG9zZSwgdXNlIGRpZ2lfc2V0X3Rlcm1pb3MgYW5kCisqICAgICAgIGRpZ2lfd3JpdGVfb29iX2NvbW1hbmQgdG8gc2V0IHBvcnQgcGFyYW1ldGVycy4KKyogICAgLS0gQWRkZWQgZGlnaV9zdGFydHVwX2RldmljZSB0byBzdGFydCByZWFkIGNoYWlucyBvbiBhbGwgcG9ydHMuCisqICAgIC0tIFdyaXRlIGJ1ZmZlciBpcyBvbmx5IHVzZWQgd2hlbiBjb3VudD09MSwgdG8gYmUgc3VyZSBwdXRfY2hhciBjYW4KKyogICAgICAgd3JpdGUgYSBjaGFyICh1bmxlc3MgdGhlIGJ1ZmZlciBpcyBmdWxsKS4KKyoKKyogICg1LzEwLzIwMDApIHBiZXJnZXIgYW5kIGJvcmNoZXJzCisqICAgIC0tIEFkZGVkIE1PRF9JTkNfVVNFX0NPVU5UL01PRF9ERUNfVVNFX0NPVU5UIGNhbGxzIG9uIG9wZW4vY2xvc2UuCisqICAgIC0tIEZpeGVkIHByb2JsZW0gd2hlcmUgdGhlIGZpcnN0IGluY29taW5nIGNoYXJhY3RlciBpcyBsb3N0IG9uCisqICAgICAgIHBvcnQgb3BlbnMgYWZ0ZXIgdGhlIGZpcnN0IGNsb3NlIG9uIHRoYXQgcG9ydC4gIE5vdyB3ZSBrZWVwCisqICAgICAgIHRoZSByZWFkX3VyYiBjaGFpbiBvcGVuIHVudGlsIHNodXRkb3duLgorKiAgICAtLSBBZGRlZCBtb3JlIHBvcnQgY29uZGl0aW9uaW5nIGNhbGxzIGluIGRpZ2lfb3BlbiBhbmQgZGlnaV9jbG9zZS4KKyogICAgLS0gQ29udmVydCBwb3J0LT5hY3RpdmUgdG8gYSB1c2UgY291bnQgc28gdGhhdCB3ZSBjYW4gZGVhbCB3aXRoIG11bHRpcGxlCisqICAgICAgIG9wZW5zIGFuZCBjbG9zZXMgcHJvcGVybHkuCisqICAgIC0tIEZpeGVkIHNvbWUgcHJvYmxlbXMgd2l0aCB0aGUgbG9ja2luZyBjb2RlLgorKgorKiAgKDUvMy8yMDAwKSBwYmVyZ2VyIGFuZCBib3JjaGVycworKiAgICAtLSBGaXJzdCBhbHBoYSB2ZXJzaW9uIG9mIHRoZSBkcml2ZXItLW1hbnkga25vd24gbGltaXRhdGlvbnMgYW5kIGJ1Z3MuCisqCisqCisqICBMb2NraW5nIGFuZCBTTVAKKyoKKyogIC0gRWFjaCBwb3J0LCBpbmNsdWRpbmcgdGhlIG91dC1vZi1iYW5kIHBvcnQsIGhhcyBhIGxvY2sgdXNlZCB0bworKiAgICBzZXJpYWxpemUgYWxsIGFjY2VzcyB0byB0aGUgcG9ydCdzIHByaXZhdGUgc3RydWN0dXJlLgorKiAgLSBUaGUgcG9ydCBsb2NrIGlzIGFsc28gdXNlZCB0byBzZXJpYWxpemUgYWxsIHdyaXRlcyBhbmQgYWNjZXNzIHRvCisqICAgIHRoZSBwb3J0J3MgVVJCLgorKiAgLSBUaGUgcG9ydCBsb2NrIGlzIGFsc28gdXNlZCBmb3IgdGhlIHBvcnQgd3JpdGVfd2FpdCBjb25kaXRpb24KKyogICAgdmFyaWFibGUuICBIb2xkaW5nIHRoZSBwb3J0IGxvY2sgd2lsbCBwcmV2ZW50IGEgd2FrZSB1cCBvbiB0aGUKKyogICAgcG9ydCdzIHdyaXRlX3dhaXQ7IHRoaXMgY2FuIGJlIHVzZWQgd2l0aCBjb25kX3dhaXRfLi4uIHRvIGJlIHN1cmUKKyogICAgdGhlIHdha2UgdXAgaXMgbm90IGxvc3QgaW4gYSByYWNlIHdoZW4gZHJvcHBpbmcgdGhlIGxvY2sgYW5kCisqICAgIHNsZWVwaW5nIHdhaXRpbmcgZm9yIHRoZSB3YWtldXAuCisqICAtIGRpZ2lfd3JpdGUoKSBkb2VzIG5vdCBzbGVlcCwgc2luY2UgaXQgaXMgc29tZXRpbWVzIGNhbGxlZCBvbgorKiAgICBpbnRlcnJ1cHQgdGltZS4KKyogIC0gZGlnaV93cml0ZV9idWxrX2NhbGxiYWNrKCkgYW5kIGRpZ2lfcmVhZF9idWxrX2NhbGxiYWNrKCkgYXJlCisqICAgIGNhbGxlZCBkaXJlY3RseSBmcm9tIGludGVycnVwdHMuICBIZW5jZSBzcGluX2xvY2tfaXJxc2F2ZSgpCisqICAgIGFuZCBzcGluX3VubG9ja19pcnFyZXN0b3JlKCkgYXJlIHVzZWQgaW4gdGhlIHJlc3Qgb2YgdGhlIGNvZGUKKyogICAgZm9yIGFueSBsb2NrcyB0aGV5IGFjcXVpcmUuCisqICAtIGRpZ2lfd3JpdGVfYnVsa19jYWxsYmFjaygpIGdldHMgdGhlIHBvcnQgbG9jayBiZWZvcmUgd2FraW5nIHVwCisqICAgIHByb2Nlc3NlcyBzbGVlcGluZyBvbiB0aGUgcG9ydCB3cml0ZV93YWl0LiAgSXQgYWxzbyBzY2hlZHVsZXMKKyogICAgd2FrZSB1cHMgc28gdGhleSBoYXBwZW4gZnJvbSB0aGUgc2NoZWR1bGVyLCBiZWNhdXNlIHRoZSB0dHkKKyogICAgc3lzdGVtIGNhbiBtaXNzIHdha2UgdXBzIGZyb20gaW50ZXJydXB0cy4KKyogIC0gQWxsIHNsZWVwcyB1c2UgYSB0aW1lb3V0IG9mIERJR0lfUkVUUllfVElNRU9VVCBiZWZvcmUgbG9vcGluZyB0bworKiAgICByZWNoZWNrIHRoZSBjb25kaXRpb24gdGhleSBhcmUgc2xlZXBpbmcgb24uICBUaGlzIGlzIGRlZmVuc2l2ZSwKKyogICAgaW4gY2FzZSBhIHdha2UgdXAgaXMgbG9zdC4KKyogIC0gRm9sbG93aW5nIERvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtbG9ja2luZy5wZGYgbm8gc3BpbiBsb2NrcworKiAgICBhcmUgaGVsZCB3aGVuIGNhbGxpbmcgY29weV90by9mcm9tX3VzZXIgb3IgcHJpbnRrLgorKiAgICAKKyogICRJZDogZGlnaV9hY2NlbGVwb3J0LmMsdiAxLjgwLjEuMiAyMDAwLzExLzAyIDA1OjQ1OjA4IHJvb3QgRXhwICQKKyovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisKKy8qIERlZmluZXMgKi8KKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuODAuMS4yIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJQZXRlciBCZXJnZXIgPHBiZXJnZXJAYnJpbXNvbi5jb20+LCBBbCBCb3JjaGVycyA8Ym9yY2hlcnNAc3RlaW5lcnBvaW50LmNvbT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJEaWdpIEFjY2VsZVBvcnQgVVNCLTIvVVNCLTQgU2VyaWFsIENvbnZlcnRlciBkcml2ZXIiCisKKy8qIHBvcnQgb3V0cHV0IGJ1ZmZlciBsZW5ndGggLS0gbXVzdCBiZSA8PSB0cmFuc2ZlciBidWZmZXIgbGVuZ3RoIC0gMiAqLworLyogc28gd2UgY2FuIGJlIHN1cmUgdG8gc2VuZCB0aGUgZnVsbCBidWZmZXIgaW4gb25lIHVyYiAqLworI2RlZmluZSBESUdJX09VVF9CVUZfU0laRQkJOAorCisvKiBwb3J0IGlucHV0IGJ1ZmZlciBsZW5ndGggLS0gbXVzdCBiZSA+PSB0cmFuc2ZlciBidWZmZXIgbGVuZ3RoIC0gMyAqLworLyogc28gd2UgY2FuIGJlIHN1cmUgdG8gaG9sZCBhdCBsZWFzdCBvbmUgZnVsbCBidWZmZXIgZnJvbSBvbmUgdXJiICovCisjZGVmaW5lIERJR0lfSU5fQlVGX1NJWkUJCTY0CisKKy8qIHJldHJ5IHRpbWVvdXQgd2hpbGUgc2xlZXBpbmcgKi8KKyNkZWZpbmUgRElHSV9SRVRSWV9USU1FT1VUCQkoSFovMTApCisKKy8qIHRpbWVvdXQgd2hpbGUgd2FpdGluZyBmb3IgdHR5IG91dHB1dCB0byBkcmFpbiBpbiBjbG9zZSAqLworLyogdGhpcyBkZWxheSBpcyB1c2VkIHR3aWNlIGluIGNsb3NlLCBzbyB0aGUgdG90YWwgZGVsYXkgY291bGQgKi8KKy8qIGJlIHR3aWNlIHRoaXMgdmFsdWUgKi8KKyNkZWZpbmUgRElHSV9DTE9TRV9USU1FT1VUCQkoNSpIWikKKworCisvKiBBY2NlbGVQb3J0IFVTQiBEZWZpbmVzICovCisKKy8qIGlkcyAqLworI2RlZmluZSBESUdJX1ZFTkRPUl9JRAkJCTB4MDVjNQorI2RlZmluZSBESUdJXzJfSUQJCQkweDAwMDIJLyogVVNCLTIgKi8KKyNkZWZpbmUgRElHSV80X0lECQkJMHgwMDA0CS8qIFVTQi00ICovCisKKy8qIGNvbW1hbmRzCisgKiAiSU5CIjogY2FuIGJlIHVzZWQgb24gdGhlIGluLWJhbmQgZW5kcG9pbnQKKyAqICJPT0IiOiBjYW4gYmUgdXNlZCBvbiB0aGUgb3V0LW9mLWJhbmQgZW5kcG9pbnQKKyAqLworI2RlZmluZSBESUdJX0NNRF9TRVRfQkFVRF9SQVRFCQkJMAkvKiBJTkIsIE9PQiAqLworI2RlZmluZSBESUdJX0NNRF9TRVRfV09SRF9TSVpFCQkJMQkvKiBJTkIsIE9PQiAqLworI2RlZmluZSBESUdJX0NNRF9TRVRfUEFSSVRZCQkJMgkvKiBJTkIsIE9PQiAqLworI2RlZmluZSBESUdJX0NNRF9TRVRfU1RPUF9CSVRTCQkJMwkvKiBJTkIsIE9PQiAqLworI2RlZmluZSBESUdJX0NNRF9TRVRfSU5QVVRfRkxPV19DT05UUk9MCQk0CS8qIElOQiwgT09CICovCisjZGVmaW5lIERJR0lfQ01EX1NFVF9PVVRQVVRfRkxPV19DT05UUk9MCTUJLyogSU5CLCBPT0IgKi8KKyNkZWZpbmUgRElHSV9DTURfU0VUX0RUUl9TSUdOQUwJCQk2CS8qIElOQiwgT09CICovCisjZGVmaW5lIERJR0lfQ01EX1NFVF9SVFNfU0lHTkFMCQkJNwkvKiBJTkIsIE9PQiAqLworI2RlZmluZSBESUdJX0NNRF9SRUFEX0lOUFVUX1NJR05BTFMJCTgJLyogICAgICBPT0IgKi8KKyNkZWZpbmUgRElHSV9DTURfSUZMVVNIX0ZJRk8JCQk5CS8qICAgICAgT09CICovCisjZGVmaW5lIERJR0lfQ01EX1JFQ0VJVkVfRU5BQkxFCQkJMTAJLyogSU5CLCBPT0IgKi8KKyNkZWZpbmUgRElHSV9DTURfQlJFQUtfQ09OVFJPTAkJCTExCS8qIElOQiwgT09CICovCisjZGVmaW5lIERJR0lfQ01EX0xPQ0FMX0xPT1BCQUNLCQkJMTIJLyogSU5CLCBPT0IgKi8KKyNkZWZpbmUgRElHSV9DTURfVFJBTlNNSVRfSURMRQkJCTEzCS8qIElOQiwgT09CICovCisjZGVmaW5lIERJR0lfQ01EX1JFQURfVUFSVF9SRUdJU1RFUgkJMTQJLyogICAgICBPT0IgKi8KKyNkZWZpbmUgRElHSV9DTURfV1JJVEVfVUFSVF9SRUdJU1RFUgkJMTUJLyogSU5CLCBPT0IgKi8KKyNkZWZpbmUgRElHSV9DTURfQU5EX1VBUlRfUkVHSVNURVIJCTE2CS8qIElOQiwgT09CICovCisjZGVmaW5lIERJR0lfQ01EX09SX1VBUlRfUkVHSVNURVIJCTE3CS8qIElOQiwgT09CICovCisjZGVmaW5lIERJR0lfQ01EX1NFTkRfREFUQQkJCTE4CS8qIElOQiAgICAgICovCisjZGVmaW5lIERJR0lfQ01EX1JFQ0VJVkVfREFUQQkJCTE5CS8qIElOQiAgICAgICovCisjZGVmaW5lIERJR0lfQ01EX1JFQ0VJVkVfRElTQUJMRQkJMjAJLyogSU5CICAgICAgKi8KKyNkZWZpbmUgRElHSV9DTURfR0VUX1BPUlRfVFlQRQkJCTIxCS8qICAgICAgT09CICovCisKKy8qIGJhdWQgcmF0ZXMgKi8KKyNkZWZpbmUgRElHSV9CQVVEXzUwCQkJCTAKKyNkZWZpbmUgRElHSV9CQVVEXzc1CQkJCTEKKyNkZWZpbmUgRElHSV9CQVVEXzExMAkJCQkyCisjZGVmaW5lIERJR0lfQkFVRF8xNTAJCQkJMworI2RlZmluZSBESUdJX0JBVURfMjAwCQkJCTQKKyNkZWZpbmUgRElHSV9CQVVEXzMwMAkJCQk1CisjZGVmaW5lIERJR0lfQkFVRF82MDAJCQkJNgorI2RlZmluZSBESUdJX0JBVURfMTIwMAkJCQk3CisjZGVmaW5lIERJR0lfQkFVRF8xODAwCQkJCTgKKyNkZWZpbmUgRElHSV9CQVVEXzI0MDAJCQkJOQorI2RlZmluZSBESUdJX0JBVURfNDgwMAkJCQkxMAorI2RlZmluZSBESUdJX0JBVURfNzIwMAkJCQkxMQorI2RlZmluZSBESUdJX0JBVURfOTYwMAkJCQkxMgorI2RlZmluZSBESUdJX0JBVURfMTQ0MDAJCQkJMTMKKyNkZWZpbmUgRElHSV9CQVVEXzE5MjAwCQkJCTE0CisjZGVmaW5lIERJR0lfQkFVRF8yODgwMAkJCQkxNQorI2RlZmluZSBESUdJX0JBVURfMzg0MDAJCQkJMTYKKyNkZWZpbmUgRElHSV9CQVVEXzU3NjAwCQkJCTE3CisjZGVmaW5lIERJR0lfQkFVRF83NjgwMAkJCQkxOAorI2RlZmluZSBESUdJX0JBVURfMTE1MjAwCQkJMTkKKyNkZWZpbmUgRElHSV9CQVVEXzE1MzYwMAkJCTIwCisjZGVmaW5lIERJR0lfQkFVRF8yMzA0MDAJCQkyMQorI2RlZmluZSBESUdJX0JBVURfNDYwODAwCQkJMjIKKworLyogYXJndW1lbnRzICovCisjZGVmaW5lIERJR0lfV09SRF9TSVpFXzUJCQkwCisjZGVmaW5lIERJR0lfV09SRF9TSVpFXzYJCQkxCisjZGVmaW5lIERJR0lfV09SRF9TSVpFXzcJCQkyCisjZGVmaW5lIERJR0lfV09SRF9TSVpFXzgJCQkzCisKKyNkZWZpbmUgRElHSV9QQVJJVFlfTk9ORQkJCTAKKyNkZWZpbmUgRElHSV9QQVJJVFlfT0RECQkJCTEKKyNkZWZpbmUgRElHSV9QQVJJVFlfRVZFTgkJCTIKKyNkZWZpbmUgRElHSV9QQVJJVFlfTUFSSwkJCTMKKyNkZWZpbmUgRElHSV9QQVJJVFlfU1BBQ0UJCQk0CisKKyNkZWZpbmUgRElHSV9TVE9QX0JJVFNfMQkJCTAKKyNkZWZpbmUgRElHSV9TVE9QX0JJVFNfMgkJCTEKKworI2RlZmluZSBESUdJX0lOUFVUX0ZMT1dfQ09OVFJPTF9YT05fWE9GRgkxCisjZGVmaW5lIERJR0lfSU5QVVRfRkxPV19DT05UUk9MX1JUUwkJMgorI2RlZmluZSBESUdJX0lOUFVUX0ZMT1dfQ09OVFJPTF9EVFIJCTQKKworI2RlZmluZSBESUdJX09VVFBVVF9GTE9XX0NPTlRST0xfWE9OX1hPRkYJMQorI2RlZmluZSBESUdJX09VVFBVVF9GTE9XX0NPTlRST0xfQ1RTCQkyCisjZGVmaW5lIERJR0lfT1VUUFVUX0ZMT1dfQ09OVFJPTF9EU1IJCTQKKworI2RlZmluZSBESUdJX0RUUl9JTkFDVElWRQkJCTAKKyNkZWZpbmUgRElHSV9EVFJfQUNUSVZFCQkJCTEKKyNkZWZpbmUgRElHSV9EVFJfSU5QVVRfRkxPV19DT05UUk9MCQkyCisKKyNkZWZpbmUgRElHSV9SVFNfSU5BQ1RJVkUJCQkwCisjZGVmaW5lIERJR0lfUlRTX0FDVElWRQkJCQkxCisjZGVmaW5lIERJR0lfUlRTX0lOUFVUX0ZMT1dfQ09OVFJPTAkJMgorI2RlZmluZSBESUdJX1JUU19UT0dHTEUJCQkJMworCisjZGVmaW5lIERJR0lfRkxVU0hfVFgJCQkJMQorI2RlZmluZSBESUdJX0ZMVVNIX1JYCQkJCTIKKyNkZWZpbmUgRElHSV9SRVNVTUVfVFgJCQkJNCAvKiBjbGVhcnMgeG9mZiBjb25kaXRpb24gKi8KKworI2RlZmluZSBESUdJX1RSQU5TTUlUX05PVF9JRExFCQkJMAorI2RlZmluZSBESUdJX1RSQU5TTUlUX0lETEUJCQkxCisKKyNkZWZpbmUgRElHSV9ESVNBQkxFCQkJCTAKKyNkZWZpbmUgRElHSV9FTkFCTEUJCQkJMQorCisjZGVmaW5lIERJR0lfREVBU1NFUlQJCQkJMAorI2RlZmluZSBESUdJX0FTU0VSVAkJCQkxCisKKy8qIGluIGJhbmQgc3RhdHVzIGNvZGVzICovCisjZGVmaW5lIERJR0lfT1ZFUlJVTl9FUlJPUgkJCTQKKyNkZWZpbmUgRElHSV9QQVJJVFlfRVJST1IJCQk4CisjZGVmaW5lIERJR0lfRlJBTUlOR19FUlJPUgkJCTE2CisjZGVmaW5lIERJR0lfQlJFQUtfRVJST1IJCQkzMgorCisvKiBvdXQgb2YgYmFuZCBzdGF0dXMgKi8KKyNkZWZpbmUgRElHSV9OT19FUlJPUgkJCQkwCisjZGVmaW5lIERJR0lfQkFEX0ZJUlNUX1BBUkFNRVRFUgkJMQorI2RlZmluZSBESUdJX0JBRF9TRUNPTkRfUEFSQU1FVEVSCQkyCisjZGVmaW5lIERJR0lfSU5WQUxJRF9MSU5FCQkJMworI2RlZmluZSBESUdJX0lOVkFMSURfT1BDT0RFCQkJNAorCisvKiBpbnB1dCBzaWduYWxzICovCisjZGVmaW5lIERJR0lfUkVBRF9JTlBVVF9TSUdOQUxTX1NMT1QJCTEKKyNkZWZpbmUgRElHSV9SRUFEX0lOUFVUX1NJR05BTFNfRVJSCQkyCisjZGVmaW5lIERJR0lfUkVBRF9JTlBVVF9TSUdOQUxTX0JVU1kJCTQKKyNkZWZpbmUgRElHSV9SRUFEX0lOUFVUX1NJR05BTFNfUEUJCTgKKyNkZWZpbmUgRElHSV9SRUFEX0lOUFVUX1NJR05BTFNfQ1RTCQkxNgorI2RlZmluZSBESUdJX1JFQURfSU5QVVRfU0lHTkFMU19EU1IJCTMyCisjZGVmaW5lIERJR0lfUkVBRF9JTlBVVF9TSUdOQUxTX1JJCQk2NAorI2RlZmluZSBESUdJX1JFQURfSU5QVVRfU0lHTkFMU19EQ0QJCTEyOAorCisKKy8qIFN0cnVjdHVyZXMgKi8KKworc3RydWN0IGRpZ2lfc2VyaWFsIHsKKwlzcGlubG9ja190IGRzX3NlcmlhbF9sb2NrOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKmRzX29vYl9wb3J0OwkvKiBvdXQtb2YtYmFuZCBwb3J0ICovCisJaW50IGRzX29vYl9wb3J0X251bTsJCQkvKiBpbmRleCBvZiBvdXQtb2YtYmFuZCBwb3J0ICovCisJaW50IGRzX2RldmljZV9zdGFydGVkOworfTsKKworc3RydWN0IGRpZ2lfcG9ydCB7CisJc3BpbmxvY2tfdCBkcF9wb3J0X2xvY2s7CisJaW50IGRwX3BvcnRfbnVtOworCWludCBkcF9vdXRfYnVmX2xlbjsKKwl1bnNpZ25lZCBjaGFyIGRwX291dF9idWZbRElHSV9PVVRfQlVGX1NJWkVdOworCWludCBkcF9pbl9idWZfbGVuOworCXVuc2lnbmVkIGNoYXIgZHBfaW5fYnVmW0RJR0lfSU5fQlVGX1NJWkVdOworCXVuc2lnbmVkIGNoYXIgZHBfaW5fZmxhZ19idWZbRElHSV9JTl9CVUZfU0laRV07CisJaW50IGRwX3dyaXRlX3VyYl9pbl91c2U7CisJdW5zaWduZWQgaW50IGRwX21vZGVtX3NpZ25hbHM7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZHBfbW9kZW1fY2hhbmdlX3dhaXQ7CisJaW50IGRwX3RyYW5zbWl0X2lkbGU7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZHBfdHJhbnNtaXRfaWRsZV93YWl0OworCWludCBkcF90aHJvdHRsZWQ7CisJaW50IGRwX3Rocm90dGxlX3Jlc3RhcnQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZHBfZmx1c2hfd2FpdDsKKwlpbnQgZHBfaW5fY2xvc2U7CQkJLyogY2xvc2UgaW4gcHJvZ3Jlc3MgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBkcF9jbG9zZV93YWl0OwkvKiB3YWl0IHF1ZXVlIGZvciBjbG9zZSAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCBkcF93YWtldXBfd29yazsKK307CisKKworLyogTG9jYWwgRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKK3N0YXRpYyB2b2lkIGRpZ2lfd2FrZXVwX3dyaXRlKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ICk7CitzdGF0aWMgdm9pZCBkaWdpX3dha2V1cF93cml0ZV9sb2NrKHZvaWQgKik7CitzdGF0aWMgaW50IGRpZ2lfd3JpdGVfb29iX2NvbW1hbmQoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQsIGludCBpbnRlcnJ1cHRpYmxlICk7CitzdGF0aWMgaW50IGRpZ2lfd3JpdGVfaW5iX2NvbW1hbmQoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQsIHVuc2lnbmVkIGxvbmcgdGltZW91dCApOworc3RhdGljIGludCBkaWdpX3NldF9tb2RlbV9zaWduYWxzKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCXVuc2lnbmVkIGludCBtb2RlbV9zaWduYWxzLCBpbnQgaW50ZXJydXB0aWJsZSApOworc3RhdGljIGludCBkaWdpX3RyYW5zbWl0X2lkbGUoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ICk7CitzdGF0aWMgdm9pZCBkaWdpX3J4X3Rocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIGRpZ2lfcnhfdW50aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBkaWdpX3NldF90ZXJtaW9zKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCAKKwlzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MgKTsKK3N0YXRpYyB2b2lkIGRpZ2lfYnJlYWtfY3RsKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUgKTsKK3N0YXRpYyBpbnQgZGlnaV9pb2N0bCggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcgKTsKK3N0YXRpYyBpbnQgZGlnaV90aW9jbWdldCggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUgKTsKK3N0YXRpYyBpbnQgZGlnaV90aW9jbXNldCggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyICk7CitzdGF0aWMgaW50IGRpZ2lfd3JpdGUoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50ICk7CitzdGF0aWMgdm9pZCBkaWdpX3dyaXRlX2J1bGtfY2FsbGJhY2soIHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MgKTsKK3N0YXRpYyBpbnQgZGlnaV93cml0ZV9yb29tKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ICk7CitzdGF0aWMgaW50IGRpZ2lfY2hhcnNfaW5fYnVmZmVyKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ICk7CitzdGF0aWMgaW50IGRpZ2lfb3Blbiggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHAgKTsKK3N0YXRpYyB2b2lkIGRpZ2lfY2xvc2UoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwICk7CitzdGF0aWMgaW50IGRpZ2lfc3RhcnR1cF9kZXZpY2UoIHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgKTsKK3N0YXRpYyBpbnQgZGlnaV9zdGFydHVwKCBzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsICk7CitzdGF0aWMgdm9pZCBkaWdpX3NodXRkb3duKCBzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsICk7CitzdGF0aWMgdm9pZCBkaWdpX3JlYWRfYnVsa19jYWxsYmFjayggc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyApOworc3RhdGljIGludCBkaWdpX3JlYWRfaW5iX2NhbGxiYWNrKCBzdHJ1Y3QgdXJiICp1cmIgKTsKK3N0YXRpYyBpbnQgZGlnaV9yZWFkX29vYl9jYWxsYmFjayggc3RydWN0IHVyYiAqdXJiICk7CisKKworLyogU3RhdGljcyAqLworCitzdGF0aWMgaW50IGRlYnVnOworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfY29tYmluZWQgW10gPSB7CisJeyBVU0JfREVWSUNFKERJR0lfVkVORE9SX0lELCBESUdJXzJfSUQpIH0sCisJeyBVU0JfREVWSUNFKERJR0lfVkVORE9SX0lELCBESUdJXzRfSUQpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV8yIFtdID0geworCXsgVVNCX0RFVklDRShESUdJX1ZFTkRPUl9JRCwgRElHSV8yX0lEKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfNCBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoRElHSV9WRU5ET1JfSUQsIERJR0lfNF9JRCkgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZV9jb21iaW5lZCk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBkaWdpX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiZGlnaV9hY2NlbGVwb3J0IiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlX2NvbWJpbmVkLAorfTsKKworCisvKiBkZXZpY2UgaW5mbyBuZWVkZWQgZm9yIHRoZSBEaWdpIHNlcmlhbCBjb252ZXJ0ZXIgKi8KKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGRpZ2lfYWNjZWxlcG9ydF8yX2RldmljZSA9IHsKKwkub3duZXIgPQkJCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkJIkRpZ2kgMiBwb3J0IFVTQiBhZGFwdGVyIiwKKwkuc2hvcnRfbmFtZSA9CQkJImRpZ2lfMiIsCisJLmlkX3RhYmxlID0JCQlpZF90YWJsZV8yLAorCS5udW1faW50ZXJydXB0X2luID0JCTAsCisJLm51bV9idWxrX2luID0JCQk0LAorCS5udW1fYnVsa19vdXQgPQkJCTQsCisJLm51bV9wb3J0cyA9CQkJMywKKwkub3BlbiA9CQkJCWRpZ2lfb3BlbiwKKwkuY2xvc2UgPQkJCWRpZ2lfY2xvc2UsCisJLndyaXRlID0JCQlkaWdpX3dyaXRlLAorCS53cml0ZV9yb29tID0JCQlkaWdpX3dyaXRlX3Jvb20sCisJLndyaXRlX2J1bGtfY2FsbGJhY2sgPSAJCWRpZ2lfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkucmVhZF9idWxrX2NhbGxiYWNrID0JCWRpZ2lfcmVhZF9idWxrX2NhbGxiYWNrLAorCS5jaGFyc19pbl9idWZmZXIgPQkJZGlnaV9jaGFyc19pbl9idWZmZXIsCisJLnRocm90dGxlID0JCQlkaWdpX3J4X3Rocm90dGxlLAorCS51bnRocm90dGxlID0JCQlkaWdpX3J4X3VudGhyb3R0bGUsCisJLmlvY3RsID0JCQlkaWdpX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQkJZGlnaV9zZXRfdGVybWlvcywKKwkuYnJlYWtfY3RsID0JCQlkaWdpX2JyZWFrX2N0bCwKKwkudGlvY21nZXQgPQkJCWRpZ2lfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0JCQlkaWdpX3Rpb2Ntc2V0LAorCS5hdHRhY2ggPQkJCWRpZ2lfc3RhcnR1cCwKKwkuc2h1dGRvd24gPQkJCWRpZ2lfc2h1dGRvd24sCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZGlnaV9hY2NlbGVwb3J0XzRfZGV2aWNlID0geworCS5vd25lciA9CQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCQkiRGlnaSA0IHBvcnQgVVNCIGFkYXB0ZXIiLAorCS5zaG9ydF9uYW1lID0JCQkiZGlnaV80IiwKKwkuaWRfdGFibGUgPQkJCWlkX3RhYmxlXzQsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQkJMCwKKwkubnVtX2J1bGtfaW4gPQkJCTUsCisJLm51bV9idWxrX291dCA9CQkJNSwKKwkubnVtX3BvcnRzID0JCQk0LAorCS5vcGVuID0JCQkJZGlnaV9vcGVuLAorCS5jbG9zZSA9CQkJZGlnaV9jbG9zZSwKKwkud3JpdGUgPQkJCWRpZ2lfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJCWRpZ2lfd3JpdGVfcm9vbSwKKwkud3JpdGVfYnVsa19jYWxsYmFjayA9IAkJZGlnaV93cml0ZV9idWxrX2NhbGxiYWNrLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQkJZGlnaV9yZWFkX2J1bGtfY2FsbGJhY2ssCisJLmNoYXJzX2luX2J1ZmZlciA9CQlkaWdpX2NoYXJzX2luX2J1ZmZlciwKKwkudGhyb3R0bGUgPQkJCWRpZ2lfcnhfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUgPQkJCWRpZ2lfcnhfdW50aHJvdHRsZSwKKwkuaW9jdGwgPQkJCWRpZ2lfaW9jdGwsCisJLnNldF90ZXJtaW9zID0JCQlkaWdpX3NldF90ZXJtaW9zLAorCS5icmVha19jdGwgPQkJCWRpZ2lfYnJlYWtfY3RsLAorCS50aW9jbWdldCA9CQkJZGlnaV90aW9jbWdldCwKKwkudGlvY21zZXQgPQkJCWRpZ2lfdGlvY21zZXQsCisJLmF0dGFjaCA9CQkJZGlnaV9zdGFydHVwLAorCS5zaHV0ZG93biA9CQkJZGlnaV9zaHV0ZG93biwKK307CisKKworLyogRnVuY3Rpb25zICovCisKKy8qCisqICBDb25kIFdhaXQgSW50ZXJydXB0aWJsZSBUaW1lb3V0IElycXJlc3RvcmUKKyoKKyogIERvIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgYW5kIGludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dAorKiAgc28gdGhhdCB3YWtlIHVwcyBhcmUgbm90IGxvc3QgaWYgdGhleSBvY2N1ciBiZXR3ZWVuIHRoZSB1bmxvY2sKKyogIGFuZCB0aGUgc2xlZXAuICBJbiBvdGhlciB3b3Jkcywgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSBhbmQKKyogIGludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCBhcmUgImF0b21pYyIgd2l0aCByZXNwZWN0IHRvCisqICB3YWtlIHVwcy4gIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQgY29uZGl0aW9uIHZhcmlhYmxlcy4KKyovCisKK3N0YXRpYyBpbmxpbmUgbG9uZyBjb25kX3dhaXRfaW50ZXJydXB0aWJsZV90aW1lb3V0X2lycXJlc3RvcmUoCisJd2FpdF9xdWV1ZV9oZWFkX3QgKnEsIGxvbmcgdGltZW91dCwKKwlzcGlubG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzICkKK3sKKwlERUZJTkVfV0FJVCh3YWl0KTsKKworCXByZXBhcmVfdG9fd2FpdChxLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOworCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOworCWZpbmlzaF93YWl0KHEsICZ3YWl0KTsKKworCXJldHVybiB0aW1lb3V0OworCit9CisKKworLyoKKyogIERpZ2kgV2FrZXVwIFdyaXRlCisqCisqICBXYWtlIHVwIHBvcnQsIGxpbmUgZGlzY2lwbGluZSwgYW5kIHR0eSBwcm9jZXNzZXMgc2xlZXBpbmcKKyogIG9uIHdyaXRlcy4KKyovCisKK3N0YXRpYyB2b2lkIGRpZ2lfd2FrZXVwX3dyaXRlX2xvY2sodm9pZCAqYXJnKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSBhcmc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisKKwlzcGluX2xvY2tfaXJxc2F2ZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKwlkaWdpX3dha2V1cF93cml0ZSggcG9ydCApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZ2lfd2FrZXVwX3dyaXRlKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ICkKK3sKKworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CisKKworCS8qIHdha2UgdXAgcG9ydCBwcm9jZXNzZXMgKi8KKwl3YWtlX3VwX2ludGVycnVwdGlibGUoICZwb3J0LT53cml0ZV93YWl0ICk7CisKKwkvKiB3YWtlIHVwIGxpbmUgZGlzY2lwbGluZSAqLworCXR0eV93YWtldXAodHR5KTsKK30KKworCisvKgorKiAgRGlnaSBXcml0ZSBPT0IgQ29tbWFuZAorKgorKiAgV3JpdGUgY29tbWFuZHMgb24gdGhlIG91dCBvZiBiYW5kIHBvcnQuICBDb21tYW5kcyBhcmUgNAorKiAgYnl0ZXMgZWFjaCwgbXVsdGlwbGUgY29tbWFuZHMgY2FuIGJlIHNlbnQgYXQgb25jZSwgYW5kCisqICBubyBjb21tYW5kIHdpbGwgYmUgc3BsaXQgYWNyb3NzIFVTQiBwYWNrZXRzLiAgUmV0dXJucyAwCisqICBpZiBzdWNjZXNzZnVsLCAtRUlOVFIgaWYgaW50ZXJydXB0ZWQgd2hpbGUgc2xlZXBpbmcgYW5kCisqICB0aGUgaW50ZXJydXB0aWJsZSBmbGFnIGlzIHRydWUsIG9yIGEgbmVnYXRpdmUgZXJyb3IKKyogIHJldHVybmVkIGJ5IHVzYl9zdWJtaXRfdXJiLgorKi8KKworc3RhdGljIGludCBkaWdpX3dyaXRlX29vYl9jb21tYW5kKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCXVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50LCBpbnQgaW50ZXJydXB0aWJsZSApCit7CisKKwlpbnQgcmV0ID0gMDsKKwlpbnQgbGVuOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKm9vYl9wb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikoKHN0cnVjdCBkaWdpX3NlcmlhbCAqKSh1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCkpKS0+ZHNfb29iX3BvcnQ7CisJc3RydWN0IGRpZ2lfcG9ydCAqb29iX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEob29iX3BvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCisKK2RiZyggImRpZ2lfd3JpdGVfb29iX2NvbW1hbmQ6IFRPUDogcG9ydD0lZCwgY291bnQ9JWQiLCBvb2JfcHJpdi0+ZHBfcG9ydF9udW0sIGNvdW50ICk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSggJm9vYl9wcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisKKwl3aGlsZSggY291bnQgPiAwICkgeworCisJCXdoaWxlKCBvb2JfcG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTCisJCXx8IG9vYl9wcml2LT5kcF93cml0ZV91cmJfaW5fdXNlICkgeworCQkJY29uZF93YWl0X2ludGVycnVwdGlibGVfdGltZW91dF9pcnFyZXN0b3JlKAorCQkJCSZvb2JfcG9ydC0+d3JpdGVfd2FpdCwgRElHSV9SRVRSWV9USU1FT1VULAorCQkJCSZvb2JfcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCQkJaWYoIGludGVycnVwdGlibGUgJiYgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgKSB7CisJCQkJcmV0dXJuKCAtRUlOVFIgKTsKKwkJCX0KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCAmb29iX3ByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKwkJfQorCisJCS8qIGxlbiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCwgc28gY29tbWFuZHMgYXJlIG5vdCBzcGxpdCAqLworCQlsZW4gPSBtaW4oY291bnQsIG9vYl9wb3J0LT5idWxrX291dF9zaXplICk7CisJCWlmKCBsZW4gPiA0ICkKKwkJCWxlbiAmPSB+MzsKKworCQltZW1jcHkoIG9vYl9wb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgYnVmLCBsZW4gKTsKKwkJb29iX3BvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGxlbjsKKwkJb29iX3BvcnQtPndyaXRlX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisKKwkJaWYoIChyZXQ9dXNiX3N1Ym1pdF91cmIob29iX3BvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQykpID09IDAgKSB7CisJCQlvb2JfcHJpdi0+ZHBfd3JpdGVfdXJiX2luX3VzZSA9IDE7CisJCQljb3VudCAtPSBsZW47CisJCQlidWYgKz0gbGVuOworCQl9CisKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmb29iX3ByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKworCWlmKCByZXQgKSB7CisJCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkIiwgX19GVU5DVElPTl9fLAorCQkJcmV0ICk7CisJfQorCisJcmV0dXJuKCByZXQgKTsKKworfQorCisKKy8qCisqICBEaWdpIFdyaXRlIEluIEJhbmQgQ29tbWFuZAorKgorKiAgV3JpdGUgY29tbWFuZHMgb24gdGhlIGdpdmVuIHBvcnQuICBDb21tYW5kcyBhcmUgNAorKiAgYnl0ZXMgZWFjaCwgbXVsdGlwbGUgY29tbWFuZHMgY2FuIGJlIHNlbnQgYXQgb25jZSwgYW5kCisqICBubyBjb21tYW5kIHdpbGwgYmUgc3BsaXQgYWNyb3NzIFVTQiBwYWNrZXRzLiAgSWYgdGltZW91dAorKiAgaXMgbm9uLXplcm8sIHdyaXRlIGluIGJhbmQgY29tbWFuZCB3aWxsIHJldHVybiBhZnRlcgorKiAgd2FpdGluZyB1bnN1Y2Nlc3NmdWxseSBmb3IgdGhlIFVSQiBzdGF0dXMgdG8gY2xlYXIgZm9yCisqICB0aW1lb3V0IHRpY2tzLiAgUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgbmVnYXRpdmUKKyogIGVycm9yIHJldHVybmVkIGJ5IGRpZ2lfd3JpdGUuCisqLworCitzdGF0aWMgaW50IGRpZ2lfd3JpdGVfaW5iX2NvbW1hbmQoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQsIHVuc2lnbmVkIGxvbmcgdGltZW91dCApCit7CisKKwlpbnQgcmV0ID0gMDsKKwlpbnQgbGVuOworCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCisKK2RiZyggImRpZ2lfd3JpdGVfaW5iX2NvbW1hbmQ6IFRPUDogcG9ydD0lZCwgY291bnQ9JWQiLCBwcml2LT5kcF9wb3J0X251bSwKK2NvdW50ICk7CisKKwlpZiggdGltZW91dCApCisJCXRpbWVvdXQgKz0gamlmZmllczsKKwllbHNlCisJCXRpbWVvdXQgPSBVTE9OR19NQVg7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKworCXdoaWxlKCBjb3VudCA+IDAgJiYgcmV0ID09IDAgKSB7CisKKwkJd2hpbGUoIChwb3J0LT53cml0ZV91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MKKwkJfHwgcHJpdi0+ZHBfd3JpdGVfdXJiX2luX3VzZSkgJiYgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKKwkJCWNvbmRfd2FpdF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRfaXJxcmVzdG9yZSgKKwkJCQkmcG9ydC0+d3JpdGVfd2FpdCwgRElHSV9SRVRSWV9USU1FT1VULAorCQkJCSZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisJCQlpZiggc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgKSB7CisJCQkJcmV0dXJuKCAtRUlOVFIgKTsKKwkJCX0KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCQl9CisKKwkJLyogbGVuIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0IGFuZCBzbWFsbCBlbm91Z2ggdG8gKi8KKwkJLyogZ3VhcmFudGVlIHRoZSB3cml0ZSB3aWxsIHNlbmQgYnVmZmVyZWQgZGF0YSBmaXJzdCwgKi8KKwkJLyogc28gY29tbWFuZHMgYXJlIGluIG9yZGVyIHdpdGggZGF0YSBhbmQgbm90IHNwbGl0ICovCisJCWxlbiA9IG1pbihjb3VudCwgcG9ydC0+YnVsa19vdXRfc2l6ZS0yLXByaXYtPmRwX291dF9idWZfbGVuICk7CisJCWlmKCBsZW4gPiA0ICkKKwkJCWxlbiAmPSB+MzsKKworCQkvKiB3cml0ZSBhbnkgYnVmZmVyZWQgZGF0YSBmaXJzdCAqLworCQlpZiggcHJpdi0+ZHBfb3V0X2J1Zl9sZW4gPiAwICkgeworCQkJZGF0YVswXSA9IERJR0lfQ01EX1NFTkRfREFUQTsKKwkJCWRhdGFbMV0gPSBwcml2LT5kcF9vdXRfYnVmX2xlbjsKKwkJCW1lbWNweSggZGF0YSsyLCBwcml2LT5kcF9vdXRfYnVmLAorCQkJCXByaXYtPmRwX291dF9idWZfbGVuICk7CisJCQltZW1jcHkoIGRhdGErMitwcml2LT5kcF9vdXRfYnVmX2xlbiwgYnVmLCBsZW4gKTsKKwkJCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aAorCQkJCT0gcHJpdi0+ZHBfb3V0X2J1Zl9sZW4rMitsZW47CisJCX0gZWxzZSB7CisJCQltZW1jcHkoIGRhdGEsIGJ1ZiwgbGVuICk7CisJCQlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBsZW47CisJCX0KKwkJcG9ydC0+d3JpdGVfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKworCQlpZiggKHJldD11c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpKSA9PSAwICkgeworCQkJcHJpdi0+ZHBfd3JpdGVfdXJiX2luX3VzZSA9IDE7CisJCQlwcml2LT5kcF9vdXRfYnVmX2xlbiA9IDA7CisJCQljb3VudCAtPSBsZW47CisJCQlidWYgKz0gbGVuOworCQl9CisKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCisJaWYoIHJldCApIHsKKwkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWQsIHBvcnQ9JWQiLCBfX0ZVTkNUSU9OX18sCisJCXJldCwgcHJpdi0+ZHBfcG9ydF9udW0gKTsKKwl9CisKKwlyZXR1cm4oIHJldCApOworCit9CisKKworLyoKKyogIERpZ2kgU2V0IE1vZGVtIFNpZ25hbHMKKyoKKyogIFNldHMgb3IgY2xlYXJzIERUUiBhbmQgUlRTIG9uIHRoZSBwb3J0LCBhY2NvcmRpbmcgdG8gdGhlCisqICBtb2RlbV9zaWduYWxzIGFyZ3VtZW50LiAgVXNlIFRJT0NNX0RUUiBhbmQgVElPQ01fUlRTIGZsYWdzCisqICBmb3IgdGhlIG1vZGVtX3NpZ25hbHMgYXJndW1lbnQuICBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwKKyogIC1FSU5UUiBpZiBpbnRlcnJ1cHRlZCB3aGlsZSBzbGVlcGluZywgb3IgYSBub24temVybyBlcnJvcgorKiAgcmV0dXJuZWQgYnkgdXNiX3N1Ym1pdF91cmIuCisqLworCitzdGF0aWMgaW50IGRpZ2lfc2V0X21vZGVtX3NpZ25hbHMoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJdW5zaWduZWQgaW50IG1vZGVtX3NpZ25hbHMsIGludCBpbnRlcnJ1cHRpYmxlICkKK3sKKworCWludCByZXQ7CisJc3RydWN0IGRpZ2lfcG9ydCAqcG9ydF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKm9vYl9wb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikoKHN0cnVjdCBkaWdpX3NlcmlhbCAqKSh1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCkpKS0+ZHNfb29iX3BvcnQ7CisJc3RydWN0IGRpZ2lfcG9ydCAqb29iX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEob29iX3BvcnQpOworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSBvb2JfcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKworZGJnKCAiZGlnaV9zZXRfbW9kZW1fc2lnbmFsczogVE9QOiBwb3J0PSVkLCBtb2RlbV9zaWduYWxzPTB4JXgiLAorcG9ydF9wcml2LT5kcF9wb3J0X251bSwgbW9kZW1fc2lnbmFscyApOworCisJc3Bpbl9sb2NrX2lycXNhdmUoICZvb2JfcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCXNwaW5fbG9jayggJnBvcnRfcHJpdi0+ZHBfcG9ydF9sb2NrICk7CisKKwl3aGlsZSggb29iX3BvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUworCXx8IG9vYl9wcml2LT5kcF93cml0ZV91cmJfaW5fdXNlICkgeworCQlzcGluX3VubG9jayggJnBvcnRfcHJpdi0+ZHBfcG9ydF9sb2NrICk7CisJCWNvbmRfd2FpdF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRfaXJxcmVzdG9yZSgKKwkJCSZvb2JfcG9ydC0+d3JpdGVfd2FpdCwgRElHSV9SRVRSWV9USU1FT1VULAorCQkJJm9vYl9wcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisJCWlmKCBpbnRlcnJ1cHRpYmxlICYmIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpICkgeworCQkJcmV0dXJuKCAtRUlOVFIgKTsKKwkJfQorCQlzcGluX2xvY2tfaXJxc2F2ZSggJm9vYl9wcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisJCXNwaW5fbG9jayggJnBvcnRfcHJpdi0+ZHBfcG9ydF9sb2NrICk7CisJfQorCisJZGF0YVswXSA9IERJR0lfQ01EX1NFVF9EVFJfU0lHTkFMOworCWRhdGFbMV0gPSBwb3J0X3ByaXYtPmRwX3BvcnRfbnVtOworCWRhdGFbMl0gPSAobW9kZW1fc2lnbmFscyZUSU9DTV9EVFIpID8KKwkJRElHSV9EVFJfQUNUSVZFIDogRElHSV9EVFJfSU5BQ1RJVkU7CisJZGF0YVszXSA9IDA7CisKKwlkYXRhWzRdID0gRElHSV9DTURfU0VUX1JUU19TSUdOQUw7CisJZGF0YVs1XSA9IHBvcnRfcHJpdi0+ZHBfcG9ydF9udW07CisJZGF0YVs2XSA9IChtb2RlbV9zaWduYWxzJlRJT0NNX1JUUykgPworCQlESUdJX1JUU19BQ1RJVkUgOiBESUdJX1JUU19JTkFDVElWRTsKKwlkYXRhWzddID0gMDsKKworCW9vYl9wb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSA4OworCW9vYl9wb3J0LT53cml0ZV91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCisJaWYoIChyZXQ9dXNiX3N1Ym1pdF91cmIob29iX3BvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQykpID09IDAgKSB7CisJCW9vYl9wcml2LT5kcF93cml0ZV91cmJfaW5fdXNlID0gMTsKKwkJcG9ydF9wcml2LT5kcF9tb2RlbV9zaWduYWxzID0KKwkJCShwb3J0X3ByaXYtPmRwX21vZGVtX3NpZ25hbHMmfihUSU9DTV9EVFJ8VElPQ01fUlRTKSkKKwkJCXwgKG1vZGVtX3NpZ25hbHMmKFRJT0NNX0RUUnxUSU9DTV9SVFMpKTsKKwl9CisKKwlzcGluX3VubG9jayggJnBvcnRfcHJpdi0+ZHBfcG9ydF9sb2NrICk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJm9vYl9wcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisKKwlpZiggcmV0ICkgeworCQllcnIoIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCIsIF9fRlVOQ1RJT05fXywKKwkJcmV0ICk7CisJfQorCisJcmV0dXJuKCByZXQgKTsKKworfQorCisKKy8qCisqICBEaWdpIFRyYW5zbWl0IElkbGUKKyoKKyogIERpZ2kgdHJhbnNtaXQgaWRsZSB3YWl0cywgdXAgdG8gdGltZW91dCB0aWNrcywgZm9yIHRoZSB0cmFuc21pdHRlcgorKiAgdG8gZ28gaWRsZS4gIEl0IHJldHVybnMgMCBpZiBzdWNjZXNzZnVsIG9yIGEgbmVnYXRpdmUgZXJyb3IuCisqCisqICBUaGVyZSBhcmUgcmFjZSBjb25kaXRpb25zIGhlcmUgaWYgbW9yZSB0aGFuIG9uZSBwcm9jZXNzIGlzIGNhbGxpbmcKKyogIGRpZ2lfdHJhbnNtaXRfaWRsZSBvbiB0aGUgc2FtZSBwb3J0IGF0IHRoZSBzYW1lIHRpbWUuICBIb3dldmVyLCB0aGlzCisqICBpcyBvbmx5IGNhbGxlZCBmcm9tIGNsb3NlLCBhbmQgb25seSBvbmUgcHJvY2VzcyBjYW4gYmUgaW4gY2xvc2Ugb24gYQorKiAgcG9ydCBhdCBhIHRpbWUsIHNvIGl0cyBvay4KKyovCisKK3N0YXRpYyBpbnQgZGlnaV90cmFuc21pdF9pZGxlKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCXVuc2lnbmVkIGxvbmcgdGltZW91dCApCit7CisKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgYnVmWzJdOworCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKworCXNwaW5fbG9ja19pcnFzYXZlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCXByaXYtPmRwX3RyYW5zbWl0X2lkbGUgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisKKwlidWZbMF0gPSBESUdJX0NNRF9UUkFOU01JVF9JRExFOworCWJ1ZlsxXSA9IDA7CisKKwl0aW1lb3V0ICs9IGppZmZpZXM7CisKKwlpZiggKHJldD1kaWdpX3dyaXRlX2luYl9jb21tYW5kKCBwb3J0LCBidWYsIDIsIHRpbWVvdXQtamlmZmllcyApKSAhPSAwICkKKwkJcmV0dXJuKCByZXQgKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCisJd2hpbGUoIHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpICYmICFwcml2LT5kcF90cmFuc21pdF9pZGxlICkgeworCQljb25kX3dhaXRfaW50ZXJydXB0aWJsZV90aW1lb3V0X2lycXJlc3RvcmUoCisJCQkmcHJpdi0+ZHBfdHJhbnNtaXRfaWRsZV93YWl0LCBESUdJX1JFVFJZX1RJTUVPVVQsCisJCQkmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCQlpZiggc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgKSB7CisJCQlyZXR1cm4oIC1FSU5UUiApOworCQl9CisJCXNwaW5fbG9ja19pcnFzYXZlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCX0KKworCXByaXYtPmRwX3RyYW5zbWl0X2lkbGUgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisKKwlyZXR1cm4oIDAgKTsKKworfQorCisKK3N0YXRpYyB2b2lkIGRpZ2lfcnhfdGhyb3R0bGUoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgKQoreworCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisKK2RiZyggImRpZ2lfcnhfdGhyb3R0bGU6IFRPUDogcG9ydD0lZCIsIHByaXYtPmRwX3BvcnRfbnVtICk7CisKKwkvKiBzdG9wIHJlY2VpdmluZyBjaGFyYWN0ZXJzIGJ5IG5vdCByZXN1Ym1pdHRpbmcgdGhlIHJlYWQgdXJiICovCisJc3Bpbl9sb2NrX2lycXNhdmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisJcHJpdi0+ZHBfdGhyb3R0bGVkID0gMTsKKwlwcml2LT5kcF90aHJvdHRsZV9yZXN0YXJ0ID0gMDsKKwlwcml2LT5kcF9pbl9idWZfbGVuID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCit9CisKKworc3RhdGljIHZvaWQgZGlnaV9yeF91bnRocm90dGxlKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ICkKK3sKKworCWludCByZXQgPSAwOworCWludCBsZW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CisKKworZGJnKCAiZGlnaV9yeF91bnRocm90dGxlOiBUT1A6IHBvcnQ9JWQiLCBwcml2LT5kcF9wb3J0X251bSApOworCisJc3Bpbl9sb2NrX2lycXNhdmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisKKwkvKiBzZW5kIGFueSBidWZmZXJlZCBjaGFycyBmcm9tIHRocm90dGxlIHRpbWUgb24gdG8gdHR5IHN1YnN5c3RlbSAqLworCWxlbiA9IG1pbihwcml2LT5kcF9pbl9idWZfbGVuLCBUVFlfRkxJUEJVRl9TSVpFIC0gdHR5LT5mbGlwLmNvdW50ICk7CisJaWYoIGxlbiA+IDAgKSB7CisJCW1lbWNweSggdHR5LT5mbGlwLmNoYXJfYnVmX3B0ciwgcHJpdi0+ZHBfaW5fYnVmLCBsZW4gKTsKKwkJbWVtY3B5KCB0dHktPmZsaXAuZmxhZ19idWZfcHRyLCBwcml2LT5kcF9pbl9mbGFnX2J1ZiwgbGVuICk7CisJCXR0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIgKz0gbGVuOworCQl0dHktPmZsaXAuZmxhZ19idWZfcHRyICs9IGxlbjsKKwkJdHR5LT5mbGlwLmNvdW50ICs9IGxlbjsKKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2goIHR0eSApOworCX0KKworCS8qIHJlc3RhcnQgcmVhZCBjaGFpbiAqLworCWlmKCBwcml2LT5kcF90aHJvdHRsZV9yZXN0YXJ0ICkgeworCQlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJCXJldCA9IHVzYl9zdWJtaXRfdXJiKCBwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyApOworCX0KKworCS8qIHR1cm4gdGhyb3R0bGUgb2ZmICovCisJcHJpdi0+ZHBfdGhyb3R0bGVkID0gMDsKKwlwcml2LT5kcF9pbl9idWZfbGVuID0gMDsKKwlwcml2LT5kcF90aHJvdHRsZV9yZXN0YXJ0ID0gMDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisKKwlpZiggcmV0ICkgeworCQllcnIoIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCwgcG9ydD0lZCIsIF9fRlVOQ1RJT05fXywKKwkJCXJldCwgcHJpdi0+ZHBfcG9ydF9udW0gKTsKKwl9CisKK30KKworCitzdGF0aWMgdm9pZCBkaWdpX3NldF90ZXJtaW9zKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCAKKwlzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MgKQoreworCisJc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBpbnQgaWZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfaWZsYWc7CisJdW5zaWduZWQgaW50IGNmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCXVuc2lnbmVkIGludCBvbGRfaWZsYWcgPSBvbGRfdGVybWlvcy0+Y19pZmxhZzsKKwl1bnNpZ25lZCBpbnQgb2xkX2NmbGFnID0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWc7CisJdW5zaWduZWQgY2hhciBidWZbMzJdOworCXVuc2lnbmVkIGludCBtb2RlbV9zaWduYWxzOworCWludCBhcmcscmV0OworCWludCBpID0gMDsKKworCitkYmcoICJkaWdpX3NldF90ZXJtaW9zOiBUT1A6IHBvcnQ9JWQsIGlmbGFnPTB4JXgsIG9sZF9pZmxhZz0weCV4LCBjZmxhZz0weCV4LCBvbGRfY2ZsYWc9MHgleCIsIHByaXYtPmRwX3BvcnRfbnVtLCBpZmxhZywgb2xkX2lmbGFnLCBjZmxhZywgb2xkX2NmbGFnICk7CisKKwkvKiBzZXQgYmF1ZCByYXRlICovCisJaWYoIChjZmxhZyZDQkFVRCkgIT0gKG9sZF9jZmxhZyZDQkFVRCkgKSB7CisKKwkJYXJnID0gLTE7CisKKwkJLyogcmVhc3NlcnQgRFRSIGFuZCAobWF5YmUpIFJUUyBvbiB0cmFuc2l0aW9uIGZyb20gQjAgKi8KKwkJaWYoIChvbGRfY2ZsYWcmQ0JBVUQpID09IEIwICkgeworCQkJLyogZG9uJ3Qgc2V0IFJUUyBpZiB1c2luZyBoYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8KKwkJCS8qIGFuZCB0aHJvdHRsaW5nIGlucHV0ICovCisJCQltb2RlbV9zaWduYWxzID0gVElPQ01fRFRSOworCQkJaWYoICEocG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgfHwKKwkJCSF0ZXN0X2JpdChUVFlfVEhST1RUTEVELCAmcG9ydC0+dHR5LT5mbGFncykgKSB7CisJCQkJbW9kZW1fc2lnbmFscyB8PSBUSU9DTV9SVFM7CisJCQl9CisJCQlkaWdpX3NldF9tb2RlbV9zaWduYWxzKCBwb3J0LCBtb2RlbV9zaWduYWxzLCAxICk7CisJCX0KKworCQlzd2l0Y2goIChjZmxhZyZDQkFVRCkgKSB7CisJCQkvKiBkcm9wIERUUiBhbmQgUlRTIG9uIHRyYW5zaXRpb24gdG8gQjAgKi8KKwkJY2FzZSBCMDogZGlnaV9zZXRfbW9kZW1fc2lnbmFscyggcG9ydCwgMCwgMSApOyBicmVhazsKKwkJY2FzZSBCNTA6IGFyZyA9IERJR0lfQkFVRF81MDsgYnJlYWs7CisJCWNhc2UgQjc1OiBhcmcgPSBESUdJX0JBVURfNzU7IGJyZWFrOworCQljYXNlIEIxMTA6IGFyZyA9IERJR0lfQkFVRF8xMTA7IGJyZWFrOworCQljYXNlIEIxNTA6IGFyZyA9IERJR0lfQkFVRF8xNTA7IGJyZWFrOworCQljYXNlIEIyMDA6IGFyZyA9IERJR0lfQkFVRF8yMDA7IGJyZWFrOworCQljYXNlIEIzMDA6IGFyZyA9IERJR0lfQkFVRF8zMDA7IGJyZWFrOworCQljYXNlIEI2MDA6IGFyZyA9IERJR0lfQkFVRF82MDA7IGJyZWFrOworCQljYXNlIEIxMjAwOiBhcmcgPSBESUdJX0JBVURfMTIwMDsgYnJlYWs7CisJCWNhc2UgQjE4MDA6IGFyZyA9IERJR0lfQkFVRF8xODAwOyBicmVhazsKKwkJY2FzZSBCMjQwMDogYXJnID0gRElHSV9CQVVEXzI0MDA7IGJyZWFrOworCQljYXNlIEI0ODAwOiBhcmcgPSBESUdJX0JBVURfNDgwMDsgYnJlYWs7CisJCWNhc2UgQjk2MDA6IGFyZyA9IERJR0lfQkFVRF85NjAwOyBicmVhazsKKwkJY2FzZSBCMTkyMDA6IGFyZyA9IERJR0lfQkFVRF8xOTIwMDsgYnJlYWs7CisJCWNhc2UgQjM4NDAwOiBhcmcgPSBESUdJX0JBVURfMzg0MDA7IGJyZWFrOworCQljYXNlIEI1NzYwMDogYXJnID0gRElHSV9CQVVEXzU3NjAwOyBicmVhazsKKwkJY2FzZSBCMTE1MjAwOiBhcmcgPSBESUdJX0JBVURfMTE1MjAwOyBicmVhazsKKwkJY2FzZSBCMjMwNDAwOiBhcmcgPSBESUdJX0JBVURfMjMwNDAwOyBicmVhazsKKwkJY2FzZSBCNDYwODAwOiBhcmcgPSBESUdJX0JBVURfNDYwODAwOyBicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRiZyggImRpZ2lfc2V0X3Rlcm1pb3M6IGNhbid0IGhhbmRsZSBiYXVkIHJhdGUgMHgleCIsCisJCQkJKGNmbGFnJkNCQVVEKSApOworCQkJYnJlYWs7CisJCX0KKworCQlpZiggYXJnICE9IC0xICkgeworCQkJYnVmW2krK10gPSBESUdJX0NNRF9TRVRfQkFVRF9SQVRFOworCQkJYnVmW2krK10gPSBwcml2LT5kcF9wb3J0X251bTsKKwkJCWJ1ZltpKytdID0gYXJnOworCQkJYnVmW2krK10gPSAwOworCQl9CisKKwl9CisKKwkvKiBzZXQgcGFyaXR5ICovCisJaWYoIChjZmxhZyYoUEFSRU5CfFBBUk9ERCkpICE9IChvbGRfY2ZsYWcmKFBBUkVOQnxQQVJPREQpKSApIHsKKworCQlpZiggKGNmbGFnJlBBUkVOQikgKSB7CisJCQlpZiggKGNmbGFnJlBBUk9ERCkgKQorCQkJCWFyZyA9IERJR0lfUEFSSVRZX09ERDsKKwkJCWVsc2UKKwkJCQlhcmcgPSBESUdJX1BBUklUWV9FVkVOOworCQl9IGVsc2UgeworCQkJYXJnID0gRElHSV9QQVJJVFlfTk9ORTsKKwkJfQorCisJCWJ1ZltpKytdID0gRElHSV9DTURfU0VUX1BBUklUWTsKKwkJYnVmW2krK10gPSBwcml2LT5kcF9wb3J0X251bTsKKwkJYnVmW2krK10gPSBhcmc7CisJCWJ1ZltpKytdID0gMDsKKworCX0KKworCS8qIHNldCB3b3JkIHNpemUgKi8KKwlpZiggKGNmbGFnJkNTSVpFKSAhPSAob2xkX2NmbGFnJkNTSVpFKSApIHsKKworCQlhcmcgPSAtMTsKKworCQlzd2l0Y2goIChjZmxhZyZDU0laRSkgKSB7CisJCWNhc2UgQ1M1OiBhcmcgPSBESUdJX1dPUkRfU0laRV81OyBicmVhazsKKwkJY2FzZSBDUzY6IGFyZyA9IERJR0lfV09SRF9TSVpFXzY7IGJyZWFrOworCQljYXNlIENTNzogYXJnID0gRElHSV9XT1JEX1NJWkVfNzsgYnJlYWs7CisJCWNhc2UgQ1M4OiBhcmcgPSBESUdJX1dPUkRfU0laRV84OyBicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRiZyggImRpZ2lfc2V0X3Rlcm1pb3M6IGNhbid0IGhhbmRsZSB3b3JkIHNpemUgJWQiLAorCQkJCShjZmxhZyZDU0laRSkgKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYoIGFyZyAhPSAtMSApIHsKKwkJCWJ1ZltpKytdID0gRElHSV9DTURfU0VUX1dPUkRfU0laRTsKKwkJCWJ1ZltpKytdID0gcHJpdi0+ZHBfcG9ydF9udW07CisJCQlidWZbaSsrXSA9IGFyZzsKKwkJCWJ1ZltpKytdID0gMDsKKwkJfQorCisJfQorCisJLyogc2V0IHN0b3AgYml0cyAqLworCWlmKCAoY2ZsYWcmQ1NUT1BCKSAhPSAob2xkX2NmbGFnJkNTVE9QQikgKSB7CisKKwkJaWYoIChjZmxhZyZDU1RPUEIpICkKKwkJCWFyZyA9IERJR0lfU1RPUF9CSVRTXzI7CisJCWVsc2UKKwkJCWFyZyA9IERJR0lfU1RPUF9CSVRTXzE7CisKKwkJYnVmW2krK10gPSBESUdJX0NNRF9TRVRfU1RPUF9CSVRTOworCQlidWZbaSsrXSA9IHByaXYtPmRwX3BvcnRfbnVtOworCQlidWZbaSsrXSA9IGFyZzsKKwkJYnVmW2krK10gPSAwOworCisJfQorCisJLyogc2V0IGlucHV0IGZsb3cgY29udHJvbCAqLworCWlmKCAoaWZsYWcmSVhPRkYpICE9IChvbGRfaWZsYWcmSVhPRkYpCisJfHwgKGNmbGFnJkNSVFNDVFMpICE9IChvbGRfY2ZsYWcmQ1JUU0NUUykgKSB7CisKKwkJYXJnID0gMDsKKworCQlpZiggKGlmbGFnJklYT0ZGKSApCisJCQlhcmcgfD0gRElHSV9JTlBVVF9GTE9XX0NPTlRST0xfWE9OX1hPRkY7CisJCWVsc2UKKwkJCWFyZyAmPSB+RElHSV9JTlBVVF9GTE9XX0NPTlRST0xfWE9OX1hPRkY7CisKKwkJaWYoIChjZmxhZyZDUlRTQ1RTKSApIHsKKworCQkJYXJnIHw9IERJR0lfSU5QVVRfRkxPV19DT05UUk9MX1JUUzsKKworCQkJLyogT24gVVNCLTQgaXQgaXMgbmVjZXNzYXJ5IHRvIGFzc2VydCBSVFMgcHJpb3IgKi8KKwkJCS8qIHRvIHNlbGVjdGluZyBSVFMgaW5wdXQgZmxvdyBjb250cm9sLiAgKi8KKwkJCWJ1ZltpKytdID0gRElHSV9DTURfU0VUX1JUU19TSUdOQUw7CisJCQlidWZbaSsrXSA9IHByaXYtPmRwX3BvcnRfbnVtOworCQkJYnVmW2krK10gPSBESUdJX1JUU19BQ1RJVkU7CisJCQlidWZbaSsrXSA9IDA7CisKKwkJfSBlbHNlIHsKKwkJCWFyZyAmPSB+RElHSV9JTlBVVF9GTE9XX0NPTlRST0xfUlRTOworCQl9CisKKwkJYnVmW2krK10gPSBESUdJX0NNRF9TRVRfSU5QVVRfRkxPV19DT05UUk9MOworCQlidWZbaSsrXSA9IHByaXYtPmRwX3BvcnRfbnVtOworCQlidWZbaSsrXSA9IGFyZzsKKwkJYnVmW2krK10gPSAwOworCisJfQorCisJLyogc2V0IG91dHB1dCBmbG93IGNvbnRyb2wgKi8KKwlpZiggKGlmbGFnJklYT04pICE9IChvbGRfaWZsYWcmSVhPTikKKwl8fCAoY2ZsYWcmQ1JUU0NUUykgIT0gKG9sZF9jZmxhZyZDUlRTQ1RTKSApIHsKKworCQlhcmcgPSAwOworCisJCWlmKCAoaWZsYWcmSVhPTikgKQorCQkJYXJnIHw9IERJR0lfT1VUUFVUX0ZMT1dfQ09OVFJPTF9YT05fWE9GRjsKKwkJZWxzZQorCQkJYXJnICY9IH5ESUdJX09VVFBVVF9GTE9XX0NPTlRST0xfWE9OX1hPRkY7CisKKwkJaWYoIChjZmxhZyZDUlRTQ1RTKSApIHsKKwkJCWFyZyB8PSBESUdJX09VVFBVVF9GTE9XX0NPTlRST0xfQ1RTOworCQl9IGVsc2UgeworCQkJYXJnICY9IH5ESUdJX09VVFBVVF9GTE9XX0NPTlRST0xfQ1RTOworCQkJcG9ydC0+dHR5LT5od19zdG9wcGVkID0gMDsKKwkJfQorCisJCWJ1ZltpKytdID0gRElHSV9DTURfU0VUX09VVFBVVF9GTE9XX0NPTlRST0w7CisJCWJ1ZltpKytdID0gcHJpdi0+ZHBfcG9ydF9udW07CisJCWJ1ZltpKytdID0gYXJnOworCQlidWZbaSsrXSA9IDA7CisKKwl9CisKKwkvKiBzZXQgcmVjZWl2ZSBlbmFibGUvZGlzYWJsZSAqLworCWlmKCAoY2ZsYWcmQ1JFQUQpICE9IChvbGRfY2ZsYWcmQ1JFQUQpICkgeworCisJCWlmKCAoY2ZsYWcmQ1JFQUQpICkKKwkJCWFyZyA9IERJR0lfRU5BQkxFOworCQllbHNlCisJCQlhcmcgPSBESUdJX0RJU0FCTEU7CisKKwkJYnVmW2krK10gPSBESUdJX0NNRF9SRUNFSVZFX0VOQUJMRTsKKwkJYnVmW2krK10gPSBwcml2LT5kcF9wb3J0X251bTsKKwkJYnVmW2krK10gPSBhcmc7CisJCWJ1ZltpKytdID0gMDsKKworCX0KKworCWlmKCAocmV0PWRpZ2lfd3JpdGVfb29iX2NvbW1hbmQoIHBvcnQsIGJ1ZiwgaSwgMSApKSAhPSAwICkKKwkJZGJnKCAiZGlnaV9zZXRfdGVybWlvczogd3JpdGUgb29iIGZhaWxlZCwgcmV0PSVkIiwgcmV0ICk7CisKK30KKworCitzdGF0aWMgdm9pZCBkaWdpX2JyZWFrX2N0bCggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlICkKK3sKKworCXVuc2lnbmVkIGNoYXIgYnVmWzRdOworCisKKwlidWZbMF0gPSBESUdJX0NNRF9CUkVBS19DT05UUk9MOworCWJ1ZlsxXSA9IDI7CQkJCS8qIGxlbmd0aCAqLworCWJ1ZlsyXSA9IGJyZWFrX3N0YXRlID8gMSA6IDA7CisJYnVmWzNdID0gMDsJCQkJLyogcGFkICovCisKKwlkaWdpX3dyaXRlX2luYl9jb21tYW5kKCBwb3J0LCBidWYsIDQsIDAgKTsKKworfQorCisKK3N0YXRpYyBpbnQgZGlnaV90aW9jbWdldCggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUgKQoreworCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgaW50IHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlczogVE9QOiBwb3J0PSVkIiwgX19GVU5DVElPTl9fLCBwcml2LT5kcF9wb3J0X251bSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKwl2YWwgPSBwcml2LT5kcF9tb2RlbV9zaWduYWxzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisJcmV0dXJuIHZhbDsKK30KKworCitzdGF0aWMgaW50IGRpZ2lfdGlvY21zZXQoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhciApCit7CisJc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBpbnQgdmFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzOiBUT1A6IHBvcnQ9JWQiLCBfX0ZVTkNUSU9OX18sIHByaXYtPmRwX3BvcnRfbnVtKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCXZhbCA9IChwcml2LT5kcF9tb2RlbV9zaWduYWxzICYgfmNsZWFyKSB8IHNldDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCXJldHVybiBkaWdpX3NldF9tb2RlbV9zaWduYWxzKCBwb3J0LCB2YWwsIDEgKTsKK30KKworCitzdGF0aWMgaW50IGRpZ2lfaW9jdGwoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnICkKK3sKKworCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKK2RiZyggImRpZ2lfaW9jdGw6IFRPUDogcG9ydD0lZCwgY21kPTB4JXgiLCBwcml2LT5kcF9wb3J0X251bSwgY21kICk7CisKKwlzd2l0Y2ggKGNtZCkgeworCisJY2FzZSBUSU9DTUlXQUlUOgorCQkvKiB3YWl0IGZvciBhbnkgb2YgdGhlIDQgbW9kZW0gaW5wdXRzIChEQ0QsUkksRFNSLENUUykqLworCQkvKiBUT0RPICovCisJCXJldHVybiggMCApOworCisJY2FzZSBUSU9DR0lDT1VOVDoKKwkJLyogcmV0dXJuIGNvdW50IG9mIG1vZGVtbGluZSB0cmFuc2l0aW9ucyAqLworCQkvKiBUT0RPICovCisJCXJldHVybiAwOworCisJfQorCisJcmV0dXJuKCAtRU5PSU9DVExDTUQgKTsKKworfQorCisKK3N0YXRpYyBpbnQgZGlnaV93cml0ZSggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQgKQoreworCisJaW50IHJldCxkYXRhX2xlbixuZXdfbGVuOworCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCisKK2RiZyggImRpZ2lfd3JpdGU6IFRPUDogcG9ydD0lZCwgY291bnQ9JWQsIGluX2ludGVycnVwdD0lbGQiLAorcHJpdi0+ZHBfcG9ydF9udW0sIGNvdW50LCBpbl9pbnRlcnJ1cHQoKSApOworCisJLyogY29weSB1c2VyIGRhdGEgKHdoaWNoIGNhbiBzbGVlcCkgYmVmb3JlIGdldHRpbmcgc3BpbiBsb2NrICovCisJY291bnQgPSBtaW4oIGNvdW50LCBwb3J0LT5idWxrX291dF9zaXplLTIgKTsKKwljb3VudCA9IG1pbiggNjQsIGNvdW50KTsKKworCS8qIGJlIHN1cmUgb25seSBvbmUgd3JpdGUgcHJvY2VlZHMgYXQgYSB0aW1lICovCisJLyogdGhlcmUgYXJlIHJhY2VzIG9uIHRoZSBwb3J0IHByaXZhdGUgYnVmZmVyICovCisJLyogYW5kIHJhY2VzIHRvIGNoZWNrIHdyaXRlX3VyYi0+c3RhdHVzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisKKwkvKiB3YWl0IGZvciB1cmIgc3RhdHVzIGNsZWFyIHRvIHN1Ym1pdCBhbm90aGVyIHVyYiAqLworCWlmKCBwb3J0LT53cml0ZV91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MKKwl8fCBwcml2LT5kcF93cml0ZV91cmJfaW5fdXNlICkgeworCisJCS8qIGJ1ZmZlciBkYXRhIGlmIGNvdW50IGlzIDEgKHByb2JhYmx5IHB1dF9jaGFyKSBpZiBwb3NzaWJsZSAqLworCQlpZiggY291bnQgPT0gMSAmJiBwcml2LT5kcF9vdXRfYnVmX2xlbiA8IERJR0lfT1VUX0JVRl9TSVpFICkgeworCQkJcHJpdi0+ZHBfb3V0X2J1Zltwcml2LT5kcF9vdXRfYnVmX2xlbisrXSA9ICpidWY7CisJCQluZXdfbGVuID0gMTsKKwkJfSBlbHNlIHsKKwkJCW5ld19sZW4gPSAwOworCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKworCQlyZXR1cm4oIG5ld19sZW4gKTsKKworCX0KKworCS8qIGFsbG93IHNwYWNlIGZvciBhbnkgYnVmZmVyZWQgZGF0YSBhbmQgZm9yIG5ldyBkYXRhLCB1cCB0byAqLworCS8qIHRyYW5zZmVyIGJ1ZmZlciBzaXplIC0gMiAoZm9yIGNvbW1hbmQgYW5kIGxlbmd0aCBieXRlcykgKi8KKwluZXdfbGVuID0gbWluKGNvdW50LCBwb3J0LT5idWxrX291dF9zaXplLTItcHJpdi0+ZHBfb3V0X2J1Zl9sZW4pOworCWRhdGFfbGVuID0gbmV3X2xlbiArIHByaXYtPmRwX291dF9idWZfbGVuOworCisJaWYoIGRhdGFfbGVuID09IDAgKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisJCXJldHVybiggMCApOworCX0KKworCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGRhdGFfbGVuKzI7CisJcG9ydC0+d3JpdGVfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKworCSpkYXRhKysgPSBESUdJX0NNRF9TRU5EX0RBVEE7CisJKmRhdGErKyA9IGRhdGFfbGVuOworCisJLyogY29weSBpbiBidWZmZXJlZCBkYXRhIGZpcnN0ICovCisJbWVtY3B5KCBkYXRhLCBwcml2LT5kcF9vdXRfYnVmLCBwcml2LT5kcF9vdXRfYnVmX2xlbiApOworCWRhdGEgKz0gcHJpdi0+ZHBfb3V0X2J1Zl9sZW47CisKKwkvKiBjb3B5IGluIG5ldyBkYXRhICovCisJbWVtY3B5KCBkYXRhLCBidWYsIG5ld19sZW4gKTsKKworCWlmKCAocmV0PXVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQykpID09IDAgKSB7CisJCXByaXYtPmRwX3dyaXRlX3VyYl9pbl91c2UgPSAxOworCQlyZXQgPSBuZXdfbGVuOworCQlwcml2LT5kcF9vdXRfYnVmX2xlbiA9IDA7CisJfQorCisJLyogcmV0dXJuIGxlbmd0aCBvZiBuZXcgZGF0YSB3cml0dGVuLCBvciBlcnJvciAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisJaWYoIHJldCA8IDAgKSB7CisJCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkLCBwb3J0PSVkIiwgX19GVU5DVElPTl9fLAorCQkJcmV0LCBwcml2LT5kcF9wb3J0X251bSApOworCX0KKworZGJnKCAiZGlnaV93cml0ZTogcmV0dXJuaW5nICVkIiwgcmV0ICk7CisJcmV0dXJuKCByZXQgKTsKKworfSAKKworCitzdGF0aWMgdm9pZCBkaWdpX3dyaXRlX2J1bGtfY2FsbGJhY2soIHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MgKQoreworCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJc3RydWN0IGRpZ2lfcG9ydCAqcHJpdjsKKwlzdHJ1Y3QgZGlnaV9zZXJpYWwgKnNlcmlhbF9wcml2OworCWludCByZXQgPSAwOworCisKK2RiZyggImRpZ2lfd3JpdGVfYnVsa19jYWxsYmFjazogVE9QLCB1cmItPnN0YXR1cz0lZCIsIHVyYi0+c3RhdHVzICk7CisKKwkvKiBwb3J0IGFuZCBzZXJpYWwgc2FuaXR5IGNoZWNrICovCisJaWYoIHBvcnQgPT0gTlVMTCB8fCAocHJpdj11c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCkpID09IE5VTEwgKSB7CisJCWVycigiJXM6IHBvcnQgb3IgcG9ydC0+cHJpdmF0ZSBpcyBOVUxMLCBzdGF0dXM9JWQiLCBfX0ZVTkNUSU9OX18sCisJCQl1cmItPnN0YXR1cyApOworCQlyZXR1cm47CisJfQorCXNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpZiggc2VyaWFsID09IE5VTEwgfHwgKHNlcmlhbF9wcml2PXVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKSkgPT0gTlVMTCApIHsKKwkJZXJyKCIlczogc2VyaWFsIG9yIHNlcmlhbC0+cHJpdmF0ZSBpcyBOVUxMLCBzdGF0dXM9JWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzICk7CisJCXJldHVybjsKKwl9CisKKwkvKiBoYW5kbGUgb29iIGNhbGxiYWNrICovCisJaWYoIHByaXYtPmRwX3BvcnRfbnVtID09IHNlcmlhbF9wcml2LT5kc19vb2JfcG9ydF9udW0gKSB7CisJCWRiZyggImRpZ2lfd3JpdGVfYnVsa19jYWxsYmFjazogb29iIGNhbGxiYWNrIiApOworCQlzcGluX2xvY2soICZwcml2LT5kcF9wb3J0X2xvY2sgKTsKKwkJcHJpdi0+ZHBfd3JpdGVfdXJiX2luX3VzZSA9IDA7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSggJnBvcnQtPndyaXRlX3dhaXQgKTsKKwkJc3Bpbl91bmxvY2soICZwcml2LT5kcF9wb3J0X2xvY2sgKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHRyeSB0byBzZW5kIGFueSBidWZmZXJlZCBkYXRhIG9uIHRoaXMgcG9ydCwgaWYgaXQgaXMgb3BlbiAqLworCXNwaW5fbG9jayggJnByaXYtPmRwX3BvcnRfbG9jayApOworCXByaXYtPmRwX3dyaXRlX3VyYl9pbl91c2UgPSAwOworCWlmKCBwb3J0LT5vcGVuX2NvdW50ICYmIHBvcnQtPndyaXRlX3VyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUworCSYmIHByaXYtPmRwX291dF9idWZfbGVuID4gMCApIHsKKworCQkqKCh1bnNpZ25lZCBjaGFyICopKHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKSkKKwkJCT0gKHVuc2lnbmVkIGNoYXIpRElHSV9DTURfU0VORF9EQVRBOworCQkqKCh1bnNpZ25lZCBjaGFyICopKHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKSsxKQorCQkJPSAodW5zaWduZWQgY2hhcilwcml2LT5kcF9vdXRfYnVmX2xlbjsKKworCQlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgKKwkJCT0gcHJpdi0+ZHBfb3V0X2J1Zl9sZW4rMjsKKwkJcG9ydC0+d3JpdGVfdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKworCQltZW1jcHkoIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKzIsIHByaXYtPmRwX291dF9idWYsCisJCQlwcml2LT5kcF9vdXRfYnVmX2xlbiApOworCisJCWlmKCAocmV0PXVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQykpID09IDAgKSB7CisJCQlwcml2LT5kcF93cml0ZV91cmJfaW5fdXNlID0gMTsKKwkJCXByaXYtPmRwX291dF9idWZfbGVuID0gMDsKKwkJfQorCisJfQorCisJLyogd2FrZSB1cCBwcm9jZXNzZXMgc2xlZXBpbmcgb24gd3JpdGVzIGltbWVkaWF0ZWx5ICovCisJZGlnaV93YWtldXBfd3JpdGUoIHBvcnQgKTsKKworCS8qIGFsc28gcXVldWUgdXAgYSB3YWtldXAgYXQgc2NoZWR1bGVyIHRpbWUsIGluIGNhc2Ugd2UgKi8KKwkvKiBsb3N0IHRoZSByYWNlIGluIHdyaXRlX2NoYW4oKS4gKi8KKwlzY2hlZHVsZV93b3JrKCZwcml2LT5kcF93YWtldXBfd29yayk7CisKKwlzcGluX3VubG9jayggJnByaXYtPmRwX3BvcnRfbG9jayApOworCisJaWYoIHJldCApIHsKKwkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWQsIHBvcnQ9JWQiLCBfX0ZVTkNUSU9OX18sCisJCQlyZXQsIHByaXYtPmRwX3BvcnRfbnVtICk7CisJfQorCit9CisKKworc3RhdGljIGludCBkaWdpX3dyaXRlX3Jvb20oIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgKQoreworCisJaW50IHJvb207CisJc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKworCisJc3Bpbl9sb2NrX2lycXNhdmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisKKwlpZiggcG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTCisJfHwgcHJpdi0+ZHBfd3JpdGVfdXJiX2luX3VzZSApCisJCXJvb20gPSAwOworCWVsc2UKKwkJcm9vbSA9IHBvcnQtPmJ1bGtfb3V0X3NpemUgLSAyIC0gcHJpdi0+ZHBfb3V0X2J1Zl9sZW47CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCitkYmcoICJkaWdpX3dyaXRlX3Jvb206IHBvcnQ9JWQsIHJvb209JWQiLCBwcml2LT5kcF9wb3J0X251bSwgcm9vbSApOworCXJldHVybiggcm9vbSApOworCit9CisKKworc3RhdGljIGludCBkaWdpX2NoYXJzX2luX2J1ZmZlciggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCApCit7CisKKwlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisKKwlpZiggcG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTCisJfHwgcHJpdi0+ZHBfd3JpdGVfdXJiX2luX3VzZSApIHsKK2RiZyggImRpZ2lfY2hhcnNfaW5fYnVmZmVyOiBwb3J0PSVkLCBjaGFycz0lZCIsIHByaXYtPmRwX3BvcnRfbnVtLCBwb3J0LT5idWxrX291dF9zaXplIC0gMiApOworCQkvKiByZXR1cm4oIHBvcnQtPmJ1bGtfb3V0X3NpemUgLSAyICk7ICovCisJCXJldHVybiggMjU2ICk7CisJfSBlbHNlIHsKK2RiZyggImRpZ2lfY2hhcnNfaW5fYnVmZmVyOiBwb3J0PSVkLCBjaGFycz0lZCIsIHByaXYtPmRwX3BvcnRfbnVtLCBwcml2LT5kcF9vdXRfYnVmX2xlbiApOworCQlyZXR1cm4oIHByaXYtPmRwX291dF9idWZfbGVuICk7CisJfQorCit9CisKKworc3RhdGljIGludCBkaWdpX29wZW4oIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwICkKK3sKKworCWludCByZXQ7CisJdW5zaWduZWQgY2hhciBidWZbMzJdOworCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHRlcm1pb3Mgbm90X3Rlcm1pb3M7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKworZGJnKCAiZGlnaV9vcGVuOiBUT1A6IHBvcnQ9JWQsIG9wZW5fY291bnQ9JWQiLCBwcml2LT5kcF9wb3J0X251bSwgcG9ydC0+b3Blbl9jb3VudCApOworCisJLyogYmUgc3VyZSB0aGUgZGV2aWNlIGlzIHN0YXJ0ZWQgdXAgKi8KKwlpZiggZGlnaV9zdGFydHVwX2RldmljZSggcG9ydC0+c2VyaWFsICkgIT0gMCApCisJCXJldHVybiggLUVOWElPICk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKworCS8qIGRvbid0IHdhaXQgb24gYSBjbG9zZSBpbiBwcm9ncmVzcyBmb3Igbm9uLWJsb2NraW5nIG9wZW5zICovCisJaWYoIHByaXYtPmRwX2luX2Nsb3NlICYmIChmaWxwLT5mX2ZsYWdzJihPX05ERUxBWXxPX05PTkJMT0NLKSkgPT0gMCApIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKwkJcmV0dXJuKCAtRUFHQUlOICk7CisJfQorCisJLyogd2FpdCBmb3IgYSBjbG9zZSBpbiBwcm9ncmVzcyB0byBmaW5pc2ggKi8KKwl3aGlsZSggcHJpdi0+ZHBfaW5fY2xvc2UgKSB7CisJCWNvbmRfd2FpdF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRfaXJxcmVzdG9yZSgKKwkJCSZwcml2LT5kcF9jbG9zZV93YWl0LCBESUdJX1JFVFJZX1RJTUVPVVQsCisJCQkmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCQlpZiggc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgKSB7CisJCQlyZXR1cm4oIC1FSU5UUiApOworCQl9CisJCXNwaW5fbG9ja19pcnFzYXZlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisgCisJLyogcmVhZCBtb2RlbSBzaWduYWxzIGF1dG9tYXRpY2FsbHkgd2hlbmV2ZXIgdGhleSBjaGFuZ2UgKi8KKwlidWZbMF0gPSBESUdJX0NNRF9SRUFEX0lOUFVUX1NJR05BTFM7CisJYnVmWzFdID0gcHJpdi0+ZHBfcG9ydF9udW07CisJYnVmWzJdID0gRElHSV9FTkFCTEU7CisJYnVmWzNdID0gMDsKKworCS8qIGZsdXNoIGZpZm9zICovCisJYnVmWzRdID0gRElHSV9DTURfSUZMVVNIX0ZJRk87CisJYnVmWzVdID0gcHJpdi0+ZHBfcG9ydF9udW07CisJYnVmWzZdID0gRElHSV9GTFVTSF9UWCB8IERJR0lfRkxVU0hfUlg7CisJYnVmWzddID0gMDsKKworCWlmKCAocmV0PWRpZ2lfd3JpdGVfb29iX2NvbW1hbmQoIHBvcnQsIGJ1ZiwgOCwgMSApKSAhPSAwICkKKwkJZGJnKCAiZGlnaV9vcGVuOiB3cml0ZSBvb2IgZmFpbGVkLCByZXQ9JWQiLCByZXQgKTsKKworCS8qIHNldCB0ZXJtaW9zIHNldHRpbmdzICovCisJbm90X3Rlcm1pb3MuY19jZmxhZyA9IH5wb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJbm90X3Rlcm1pb3MuY19pZmxhZyA9IH5wb3J0LT50dHktPnRlcm1pb3MtPmNfaWZsYWc7CisJZGlnaV9zZXRfdGVybWlvcyggcG9ydCwgJm5vdF90ZXJtaW9zICk7CisKKwkvKiBzZXQgRFRSIGFuZCBSVFMgKi8KKwlkaWdpX3NldF9tb2RlbV9zaWduYWxzKCBwb3J0LCBUSU9DTV9EVFJ8VElPQ01fUlRTLCAxICk7CisKKwlyZXR1cm4oIDAgKTsKKworfQorCisKK3N0YXRpYyB2b2lkIGRpZ2lfY2xvc2UoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwICkKK3sKKwlERUZJTkVfV0FJVCh3YWl0KTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgYnVmWzMyXTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OworCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKworZGJnKCAiZGlnaV9jbG9zZTogVE9QOiBwb3J0PSVkLCBvcGVuX2NvdW50PSVkIiwgcHJpdi0+ZHBfcG9ydF9udW0sIHBvcnQtPm9wZW5fY291bnQgKTsKKworCisJLyogaWYgZGlzY29ubmVjdGVkLCBqdXN0IGNsZWFyIGZsYWdzICovCisJaWYgKCF1c2JfZ2V0X2ludGZkYXRhKHBvcnQtPnNlcmlhbC0+aW50ZXJmYWNlKSkKKwkJZ290byBleGl0OworCisJLyogZG8gY2xlYW51cCBvbmx5IGFmdGVyIGZpbmFsIGNsb3NlIG9uIHRoaXMgcG9ydCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCXByaXYtPmRwX2luX2Nsb3NlID0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCisJLyogdGVsbCBsaW5lIGRpc2NpcGxpbmUgdG8gcHJvY2VzcyBvbmx5IFhPTi9YT0ZGICovCisJdHR5LT5jbG9zaW5nID0gMTsKKworCS8qIHdhaXQgZm9yIG91dHB1dCB0byBkcmFpbiAqLworCWlmKCAoZmlscC0+Zl9mbGFncyYoT19OREVMQVl8T19OT05CTE9DSykpID09IDAgKSB7CisJCXR0eV93YWl0X3VudGlsX3NlbnQoIHR0eSwgRElHSV9DTE9TRV9USU1FT1VUICk7CisJfQorCisJLyogZmx1c2ggZHJpdmVyIGFuZCBsaW5lIGRpc2NpcGxpbmUgYnVmZmVycyAqLworCWlmKCB0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyICkKKwkJdHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlciggdHR5ICk7CisJdHR5X2xkaXNjX2ZsdXNoKHR0eSk7CisKKwlpZiAocG9ydC0+c2VyaWFsLT5kZXYpIHsKKwkJLyogd2FpdCBmb3IgdHJhbnNtaXQgaWRsZSAqLworCQlpZiggKGZpbHAtPmZfZmxhZ3MmKE9fTkRFTEFZfE9fTk9OQkxPQ0spKSA9PSAwICkgeworCQkJZGlnaV90cmFuc21pdF9pZGxlKCBwb3J0LCBESUdJX0NMT1NFX1RJTUVPVVQgKTsKKwkJfQorCisJCS8qIGRyb3AgRFRSIGFuZCBSVFMgKi8KKwkJZGlnaV9zZXRfbW9kZW1fc2lnbmFscyggcG9ydCwgMCwgMCApOworCisJCS8qIGRpc2FibGUgaW5wdXQgZmxvdyBjb250cm9sICovCisJCWJ1ZlswXSA9IERJR0lfQ01EX1NFVF9JTlBVVF9GTE9XX0NPTlRST0w7CisJCWJ1ZlsxXSA9IHByaXYtPmRwX3BvcnRfbnVtOworCQlidWZbMl0gPSBESUdJX0RJU0FCTEU7CisJCWJ1ZlszXSA9IDA7CisKKwkJLyogZGlzYWJsZSBvdXRwdXQgZmxvdyBjb250cm9sICovCisJCWJ1Zls0XSA9IERJR0lfQ01EX1NFVF9PVVRQVVRfRkxPV19DT05UUk9MOworCQlidWZbNV0gPSBwcml2LT5kcF9wb3J0X251bTsKKwkJYnVmWzZdID0gRElHSV9ESVNBQkxFOworCQlidWZbN10gPSAwOworCisJCS8qIGRpc2FibGUgcmVhZGluZyBtb2RlbSBzaWduYWxzIGF1dG9tYXRpY2FsbHkgKi8KKwkJYnVmWzhdID0gRElHSV9DTURfUkVBRF9JTlBVVF9TSUdOQUxTOworCQlidWZbOV0gPSBwcml2LT5kcF9wb3J0X251bTsKKwkJYnVmWzEwXSA9IERJR0lfRElTQUJMRTsKKwkJYnVmWzExXSA9IDA7CisKKwkJLyogZGlzYWJsZSByZWNlaXZlICovCisJCWJ1ZlsxMl0gPSBESUdJX0NNRF9SRUNFSVZFX0VOQUJMRTsKKwkJYnVmWzEzXSA9IHByaXYtPmRwX3BvcnRfbnVtOworCQlidWZbMTRdID0gRElHSV9ESVNBQkxFOworCQlidWZbMTVdID0gMDsKKworCQkvKiBmbHVzaCBmaWZvcyAqLworCQlidWZbMTZdID0gRElHSV9DTURfSUZMVVNIX0ZJRk87CisJCWJ1ZlsxN10gPSBwcml2LT5kcF9wb3J0X251bTsKKwkJYnVmWzE4XSA9IERJR0lfRkxVU0hfVFggfCBESUdJX0ZMVVNIX1JYOworCQlidWZbMTldID0gMDsKKworCQlpZiggKHJldD1kaWdpX3dyaXRlX29vYl9jb21tYW5kKCBwb3J0LCBidWYsIDIwLCAwICkpICE9IDAgKQorCQkJZGJnKCAiZGlnaV9jbG9zZTogd3JpdGUgb29iIGZhaWxlZCwgcmV0PSVkIiwgcmV0ICk7CisKKwkJLyogd2FpdCBmb3IgZmluYWwgY29tbWFuZHMgb24gb29iIHBvcnQgdG8gY29tcGxldGUgKi8KKwkJcHJlcGFyZV90b193YWl0KCZwcml2LT5kcF9mbHVzaF93YWl0LCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZV90aW1lb3V0KERJR0lfQ0xPU0VfVElNRU9VVCk7CisJCWZpbmlzaF93YWl0KCZwcml2LT5kcF9mbHVzaF93YWl0LCAmd2FpdCk7CisKKwkJLyogc2h1dGRvd24gYW55IG91dHN0YW5kaW5nIGJ1bGsgd3JpdGVzICovCisJCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOworCX0KKworCXR0eS0+Y2xvc2luZyA9IDA7CisKK2V4aXQ6CisJc3Bpbl9sb2NrX2lycXNhdmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisJcHJpdi0+ZHBfd3JpdGVfdXJiX2luX3VzZSA9IDA7CisJcHJpdi0+ZHBfaW5fY2xvc2UgPSAwOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSggJnByaXYtPmRwX2Nsb3NlX3dhaXQgKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCitkYmcoICJkaWdpX2Nsb3NlOiBkb25lIiApOworfQorCisKKy8qCisqICBEaWdpIFN0YXJ0dXAgRGV2aWNlCisqCisqICBTdGFydHMgcmVhZHMgb24gYWxsIHBvcnRzLiAgTXVzdCBiZSBjYWxsZWQgQUZURVIgc3RhcnR1cCwgd2l0aAorKiAgdXJicyBpbml0aWFsaXplZC4gIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBub24temVybyBlcnJvciBvdGhlcndpc2UuCisqLworCitzdGF0aWMgaW50IGRpZ2lfc3RhcnR1cF9kZXZpY2UoIHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgKQoreworCisJaW50IGkscmV0ID0gMDsKKwlzdHJ1Y3QgZGlnaV9zZXJpYWwgKnNlcmlhbF9wcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisKKworCS8qIGJlIHN1cmUgdGhpcyBoYXBwZW5zIGV4YWN0bHkgb25jZSAqLworCXNwaW5fbG9jayggJnNlcmlhbF9wcml2LT5kc19zZXJpYWxfbG9jayApOworCWlmKCBzZXJpYWxfcHJpdi0+ZHNfZGV2aWNlX3N0YXJ0ZWQgKSB7CisJCXNwaW5fdW5sb2NrKCAmc2VyaWFsX3ByaXYtPmRzX3NlcmlhbF9sb2NrICk7CisJCXJldHVybiggMCApOworCX0KKwlzZXJpYWxfcHJpdi0+ZHNfZGV2aWNlX3N0YXJ0ZWQgPSAxOworCXNwaW5fdW5sb2NrKCAmc2VyaWFsX3ByaXYtPmRzX3NlcmlhbF9sb2NrICk7CisKKwkvKiBzdGFydCByZWFkaW5nIGZyb20gZWFjaCBidWxrIGluIGVuZHBvaW50IGZvciB0aGUgZGV2aWNlICovCisJLyogc2V0IFVTQl9ESVNBQkxFX1NQRCBmbGFnIGZvciB3cml0ZSBidWxrIHVyYnMgKi8KKwlmb3IoIGk9MDsgaTxzZXJpYWwtPnR5cGUtPm51bV9wb3J0cysxOyBpKysgKSB7CisKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKworCQlwb3J0LT53cml0ZV91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCisJCWlmKCAocmV0PXVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKSkgIT0gMCApIHsKKwkJCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkLCBwb3J0PSVkIiwgX19GVU5DVElPTl9fLAorCQkJcmV0LCBpICk7CisJCQlicmVhazsKKwkJfQorCisJfQorCisJcmV0dXJuKCByZXQgKTsKKworfQorCisKK3N0YXRpYyBpbnQgZGlnaV9zdGFydHVwKCBzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsICkKK3sKKworCWludCBpOworCXN0cnVjdCBkaWdpX3BvcnQgKnByaXY7CisJc3RydWN0IGRpZ2lfc2VyaWFsICpzZXJpYWxfcHJpdjsKKworCitkYmcoICJkaWdpX3N0YXJ0dXA6IFRPUCIgKTsKKworCS8qIGFsbG9jYXRlIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlcyBmb3IgYWxsIHBvcnRzICovCisJLyogbnVtYmVyIG9mIHJlZ3VsYXIgcG9ydHMgKyAxIGZvciB0aGUgb3V0LW9mLWJhbmQgcG9ydCAqLworCWZvciggaT0wOyBpPHNlcmlhbC0+dHlwZS0+bnVtX3BvcnRzKzE7IGkrKyApIHsKKworCQkvKiBhbGxvY2F0ZSBwb3J0IHByaXZhdGUgc3RydWN0dXJlICovCisJCXByaXYgPSAoc3RydWN0IGRpZ2lfcG9ydCAqKWttYWxsb2MoIHNpemVvZihzdHJ1Y3QgZGlnaV9wb3J0KSwKKwkJCUdGUF9LRVJORUwgKTsKKwkJaWYoIHByaXYgPT0gKHN0cnVjdCBkaWdpX3BvcnQgKikwICkgeworCQkJd2hpbGUoIC0taSA+PSAwICkKKwkJCQlrZnJlZSggdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSkgKTsKKwkJCXJldHVybiggMSApOwkJCS8qIGVycm9yICovCisJCX0KKworCQkvKiBpbml0aWFsaXplIHBvcnQgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwkJc3Bpbl9sb2NrX2luaXQoICZwcml2LT5kcF9wb3J0X2xvY2sgKTsKKwkJcHJpdi0+ZHBfcG9ydF9udW0gPSBpOworCQlwcml2LT5kcF9vdXRfYnVmX2xlbiA9IDA7CisJCXByaXYtPmRwX2luX2J1Zl9sZW4gPSAwOworCQlwcml2LT5kcF93cml0ZV91cmJfaW5fdXNlID0gMDsKKwkJcHJpdi0+ZHBfbW9kZW1fc2lnbmFscyA9IDA7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoICZwcml2LT5kcF9tb2RlbV9jaGFuZ2Vfd2FpdCApOworCQlwcml2LT5kcF90cmFuc21pdF9pZGxlID0gMDsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCggJnByaXYtPmRwX3RyYW5zbWl0X2lkbGVfd2FpdCApOworCQlwcml2LT5kcF90aHJvdHRsZWQgPSAwOworCQlwcml2LT5kcF90aHJvdHRsZV9yZXN0YXJ0ID0gMDsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCggJnByaXYtPmRwX2ZsdXNoX3dhaXQgKTsKKwkJcHJpdi0+ZHBfaW5fY2xvc2UgPSAwOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCAmcHJpdi0+ZHBfY2xvc2Vfd2FpdCApOworCQlJTklUX1dPUksoJnByaXYtPmRwX3dha2V1cF93b3JrLAorCQkJCWRpZ2lfd2FrZXVwX3dyaXRlX2xvY2ssIHNlcmlhbC0+cG9ydFtpXSk7CisKKwkJLyogaW5pdGlhbGl6ZSB3cml0ZSB3YWl0IHF1ZXVlIGZvciB0aGlzIHBvcnQgKi8KKwkJaW5pdF93YWl0cXVldWVfaGVhZCggJnNlcmlhbC0+cG9ydFtpXS0+d3JpdGVfd2FpdCApOworCisJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIHByaXYpOworCX0KKworCS8qIGFsbG9jYXRlIHNlcmlhbCBwcml2YXRlIHN0cnVjdHVyZSAqLworCXNlcmlhbF9wcml2ID0gKHN0cnVjdCBkaWdpX3NlcmlhbCAqKWttYWxsb2MoIHNpemVvZihzdHJ1Y3QgZGlnaV9zZXJpYWwpLAorCQlHRlBfS0VSTkVMICk7CisJaWYoIHNlcmlhbF9wcml2ID09IChzdHJ1Y3QgZGlnaV9zZXJpYWwgKikwICkgeworCQlmb3IoIGk9MDsgaTxzZXJpYWwtPnR5cGUtPm51bV9wb3J0cysxOyBpKysgKQorCQkJa2ZyZWUoIHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pICk7CisJCXJldHVybiggMSApOwkJCS8qIGVycm9yICovCisJfQorCisJLyogaW5pdGlhbGl6ZSBzZXJpYWwgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwlzcGluX2xvY2tfaW5pdCggJnNlcmlhbF9wcml2LT5kc19zZXJpYWxfbG9jayApOworCXNlcmlhbF9wcml2LT5kc19vb2JfcG9ydF9udW0gPSBzZXJpYWwtPnR5cGUtPm51bV9wb3J0czsKKwlzZXJpYWxfcHJpdi0+ZHNfb29iX3BvcnQgPSBzZXJpYWwtPnBvcnRbc2VyaWFsX3ByaXYtPmRzX29vYl9wb3J0X251bV07CisJc2VyaWFsX3ByaXYtPmRzX2RldmljZV9zdGFydGVkID0gMDsKKwl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgc2VyaWFsX3ByaXYpOworCisJcmV0dXJuKCAwICk7CisKK30KKworCitzdGF0aWMgdm9pZCBkaWdpX3NodXRkb3duKCBzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsICkKK3sKKworCWludCBpOworCisKK2RiZyggImRpZ2lfc2h1dGRvd246IFRPUCwgaW5faW50ZXJydXB0KCk9JWxkIiwgaW5faW50ZXJydXB0KCkgKTsKKworCS8qIHN0b3AgcmVhZHMgYW5kIHdyaXRlcyBvbiBhbGwgcG9ydHMgKi8KKwlmb3IoIGk9MDsgaTxzZXJpYWwtPnR5cGUtPm51bV9wb3J0cysxOyBpKysgKSB7CisJCXVzYl9raWxsX3VyYihzZXJpYWwtPnBvcnRbaV0tPnJlYWRfdXJiKTsKKwkJdXNiX2tpbGxfdXJiKHNlcmlhbC0+cG9ydFtpXS0+d3JpdGVfdXJiKTsKKwl9CisKKwkvKiBmcmVlIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlcyBmb3IgYWxsIHBvcnRzICovCisJLyogbnVtYmVyIG9mIHJlZ3VsYXIgcG9ydHMgKyAxIGZvciB0aGUgb3V0LW9mLWJhbmQgcG9ydCAqLworCWZvciggaT0wOyBpPHNlcmlhbC0+dHlwZS0+bnVtX3BvcnRzKzE7IGkrKyApCisJCWtmcmVlKCB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldKSApOworCWtmcmVlKCB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCkgKTsKK30KKworCitzdGF0aWMgdm9pZCBkaWdpX3JlYWRfYnVsa19jYWxsYmFjayggc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyApCit7CisKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IGRpZ2lfcG9ydCAqcHJpdjsKKwlzdHJ1Y3QgZGlnaV9zZXJpYWwgKnNlcmlhbF9wcml2OworCWludCByZXQ7CisKKworZGJnKCAiZGlnaV9yZWFkX2J1bGtfY2FsbGJhY2s6IFRPUCIgKTsKKworCS8qIHBvcnQgc2FuaXR5IGNoZWNrLCBkbyBub3QgcmVzdWJtaXQgaWYgcG9ydCBpcyBub3QgdmFsaWQgKi8KKwlpZiggcG9ydCA9PSBOVUxMIHx8IChwcml2PXVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KSkgPT0gTlVMTCApIHsKKwkJZXJyKCIlczogcG9ydCBvciBwb3J0LT5wcml2YXRlIGlzIE5VTEwsIHN0YXR1cz0lZCIsIF9fRlVOQ1RJT05fXywKKwkJCXVyYi0+c3RhdHVzICk7CisJCXJldHVybjsKKwl9CisJaWYoIHBvcnQtPnNlcmlhbCA9PSBOVUxMCisJfHwgKHNlcmlhbF9wcml2PXVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKSkgPT0gTlVMTCApIHsKKwkJZXJyKCIlczogc2VyaWFsIGlzIGJhZCBvciBzZXJpYWwtPnByaXZhdGUgaXMgTlVMTCwgc3RhdHVzPSVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyApOworCQlyZXR1cm47CisJfQorCisJLyogZG8gbm90IHJlc3VibWl0IHVyYiBpZiBpdCBoYXMgYW55IHN0YXR1cyBlcnJvciAqLworCWlmKCB1cmItPnN0YXR1cyApIHsKKwkJZXJyKCIlczogbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzOiBzdGF0dXM9JWQsIHBvcnQ9JWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzLCBwcml2LT5kcF9wb3J0X251bSApOworCQlyZXR1cm47CisJfQorCisJLyogaGFuZGxlIG9vYiBvciBpbmIgY2FsbGJhY2ssIGRvIG5vdCByZXN1Ym1pdCBpZiBlcnJvciAqLworCWlmKCBwcml2LT5kcF9wb3J0X251bSA9PSBzZXJpYWxfcHJpdi0+ZHNfb29iX3BvcnRfbnVtICkgeworCQlpZiggZGlnaV9yZWFkX29vYl9jYWxsYmFjayggdXJiICkgIT0gMCApCisJCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJaWYoIGRpZ2lfcmVhZF9pbmJfY2FsbGJhY2soIHVyYiApICE9IDAgKQorCQkJcmV0dXJuOworCX0KKworCS8qIGNvbnRpbnVlIHJlYWQgKi8KKwl1cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCWlmKCAocmV0PXVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpICE9IDAgKSB7CisJCWVycigiJXM6IGZhaWxlZCByZXN1Ym1pdHRpbmcgdXJiLCByZXQ9JWQsIHBvcnQ9JWQiLCBfX0ZVTkNUSU9OX18sCisJCQlyZXQsIHByaXYtPmRwX3BvcnRfbnVtICk7CisJfQorCit9CisKKworLyogCisqICBEaWdpIFJlYWQgSU5CIENhbGxiYWNrCisqCisqICBEaWdpIFJlYWQgSU5CIENhbGxiYWNrIGhhbmRsZXMgcmVhZHMgb24gdGhlIGluIGJhbmQgcG9ydHMsIHNlbmRpbmcKKyogIHRoZSBkYXRhIG9uIHRvIHRoZSB0dHkgc3Vic3lzdGVtLiAgV2hlbiBjYWxsZWQgd2Uga25vdyBwb3J0IGFuZAorKiAgcG9ydC0+cHJpdmF0ZSBhcmUgbm90IE5VTEwgYW5kIHBvcnQtPnNlcmlhbCBoYXMgYmVlbiB2YWxpZGF0ZWQuCisqICBJdCByZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgMSBpZiBzdWNjZXNzZnVsIGJ1dCB0aGUgcG9ydCBpcworKiAgdGhyb3R0bGVkLCBhbmQgLTEgaWYgdGhlIHNhbml0eSBjaGVja3MgZmFpbGVkLgorKi8KKworc3RhdGljIGludCBkaWdpX3JlYWRfaW5iX2NhbGxiYWNrKCBzdHJ1Y3QgdXJiICp1cmIgKQoreworCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CisJc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgb3Bjb2RlID0gKCh1bnNpZ25lZCBjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXIpWzBdOworCWludCBsZW4gPSAoKHVuc2lnbmVkIGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcilbMV07CisJaW50IHN0YXR1cyA9ICgodW5zaWduZWQgY2hhciAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyKVsyXTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gKCh1bnNpZ25lZCBjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXIpKzM7CisJaW50IGZsYWcsdGhyb3R0bGVkOworCisJLyogZG8gbm90IHByb2Nlc3MgY2FsbGJhY2tzIG9uIGNsb3NlZCBwb3J0cyAqLworCS8qIGJ1dCBkbyBjb250aW51ZSB0aGUgcmVhZCBjaGFpbiAqLworCWlmKCBwb3J0LT5vcGVuX2NvdW50ID09IDAgKQorCQlyZXR1cm4oIDAgKTsKKworCS8qIHNob3J0L211bHRpcGxlIHBhY2tldCBjaGVjayAqLworCWlmKCB1cmItPmFjdHVhbF9sZW5ndGggIT0gbGVuICsgMiApIHsKKyAgICAgCQllcnIoIiVzOiBJTkNPTVBMRVRFIE9SIE1VTFRJUExFIFBBQ0tFVCwgdXJiLT5zdGF0dXM9JWQsIHBvcnQ9JWQsIG9wY29kZT0lZCwgbGVuPSVkLCBhY3R1YWxfbGVuZ3RoPSVkLCBzdGF0dXM9JWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzLCBwcml2LT5kcF9wb3J0X251bSwgb3Bjb2RlLCBsZW4sIHVyYi0+YWN0dWFsX2xlbmd0aCwgc3RhdHVzICk7CisJCXJldHVybiggLTEgKTsKKwl9CisKKwlzcGluX2xvY2soICZwcml2LT5kcF9wb3J0X2xvY2sgKTsKKworCS8qIGNoZWNrIGZvciB0aHJvdHRsZTsgaWYgc2V0LCBkbyBub3QgcmVzdWJtaXQgcmVhZCB1cmIgKi8KKwkvKiBpbmRpY2F0ZSB0aGUgcmVhZCBjaGFpbiBuZWVkcyB0byBiZSByZXN0YXJ0ZWQgb24gdW50aHJvdHRsZSAqLworCXRocm90dGxlZCA9IHByaXYtPmRwX3Rocm90dGxlZDsKKwlpZiggdGhyb3R0bGVkICkKKwkJcHJpdi0+ZHBfdGhyb3R0bGVfcmVzdGFydCA9IDE7CisKKwkvKiByZWNlaXZlIGRhdGEgKi8KKwlpZiggb3Bjb2RlID09IERJR0lfQ01EX1JFQ0VJVkVfREFUQSApIHsKKworCQkvKiBnZXQgZmxhZyBmcm9tIHN0YXR1cyAqLworCQlmbGFnID0gMDsKKworCQkvKiBvdmVycnVuIGlzIHNwZWNpYWwsIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBjaGFyICovCisJCWlmKCBzdGF0dXMgJiBESUdJX09WRVJSVU5fRVJST1IgKSB7CisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhciggdHR5LCAwLCBUVFlfT1ZFUlJVTiApOworCQl9CisKKwkJLyogYnJlYWsgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHBhcml0eSwgKi8KKwkJLyogd2hpY2ggdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGZyYW1pbmcgZXJyb3JzICovCisJCWlmKCBzdGF0dXMgJiBESUdJX0JSRUFLX0VSUk9SICkgeworCQkJZmxhZyA9IFRUWV9CUkVBSzsKKwkJfSBlbHNlIGlmKCBzdGF0dXMgJiBESUdJX1BBUklUWV9FUlJPUiApIHsKKwkJCWZsYWcgPSBUVFlfUEFSSVRZOworCQl9IGVsc2UgaWYoIHN0YXR1cyAmIERJR0lfRlJBTUlOR19FUlJPUiApIHsKKwkJCWZsYWcgPSBUVFlfRlJBTUU7CisJCX0KKworCQkvKiBkYXRhIGxlbmd0aCBpcyBsZW4tMSAob25lIGJ5dGUgb2YgbGVuIGlzIHN0YXR1cykgKi8KKwkJLS1sZW47CisKKwkJaWYoIHRocm90dGxlZCApIHsKKworCQkJbGVuID0gbWluKCBsZW4sCisJCQkJRElHSV9JTl9CVUZfU0laRSAtIHByaXYtPmRwX2luX2J1Zl9sZW4gKTsKKworCQkJaWYoIGxlbiA+IDAgKSB7CisJCQkJbWVtY3B5KCBwcml2LT5kcF9pbl9idWYgKyBwcml2LT5kcF9pbl9idWZfbGVuLAorCQkJCQlkYXRhLCBsZW4gKTsKKwkJCQltZW1zZXQoIHByaXYtPmRwX2luX2ZsYWdfYnVmCisJCQkJCSsgcHJpdi0+ZHBfaW5fYnVmX2xlbiwgZmxhZywgbGVuICk7CisJCQkJcHJpdi0+ZHBfaW5fYnVmX2xlbiArPSBsZW47CisJCQl9CisKKwkJfSBlbHNlIHsKKworCQkJbGVuID0gbWluKCBsZW4sIFRUWV9GTElQQlVGX1NJWkUgLSB0dHktPmZsaXAuY291bnQgKTsKKworCQkJaWYoIGxlbiA+IDAgKSB7CisJCQkJbWVtY3B5KCB0dHktPmZsaXAuY2hhcl9idWZfcHRyLCBkYXRhLCBsZW4gKTsKKwkJCQltZW1zZXQoIHR0eS0+ZmxpcC5mbGFnX2J1Zl9wdHIsIGZsYWcsIGxlbiApOworCQkJCXR0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIgKz0gbGVuOworCQkJCXR0eS0+ZmxpcC5mbGFnX2J1Zl9wdHIgKz0gbGVuOworCQkJCXR0eS0+ZmxpcC5jb3VudCArPSBsZW47CisJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2goIHR0eSApOworCQkJfQorCisJCX0KKworCX0KKworCXNwaW5fdW5sb2NrKCAmcHJpdi0+ZHBfcG9ydF9sb2NrICk7CisKKwlpZiggb3Bjb2RlID09IERJR0lfQ01EX1JFQ0VJVkVfRElTQUJMRSApIHsKKwkJZGJnKCIlczogZ290IFJFQ0VJVkVfRElTQUJMRSIsIF9fRlVOQ1RJT05fXyApOworCX0gZWxzZSBpZiggb3Bjb2RlICE9IERJR0lfQ01EX1JFQ0VJVkVfREFUQSApIHsKKwkJZGJnKCIlczogdW5rbm93biBvcGNvZGU6ICVkIiwgX19GVU5DVElPTl9fLCBvcGNvZGUgKTsKKwl9CisKKwlyZXR1cm4oIHRocm90dGxlZCA/IDEgOiAwICk7CisKK30KKworCisvKiAKKyogIERpZ2kgUmVhZCBPT0IgQ2FsbGJhY2sKKyoKKyogIERpZ2kgUmVhZCBPT0IgQ2FsbGJhY2sgaGFuZGxlcyByZWFkcyBvbiB0aGUgb3V0IG9mIGJhbmQgcG9ydC4KKyogIFdoZW4gY2FsbGVkIHdlIGtub3cgcG9ydCBhbmQgcG9ydC0+cHJpdmF0ZSBhcmUgbm90IE5VTEwgYW5kCisqICB0aGUgcG9ydC0+c2VyaWFsIGlzIHZhbGlkLiAgSXQgcmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIGFuZAorKiAgLTEgaWYgdGhlIHNhbml0eSBjaGVja3MgZmFpbGVkLgorKi8KKworc3RhdGljIGludCBkaWdpX3JlYWRfb29iX2NhbGxiYWNrKCBzdHJ1Y3QgdXJiICp1cmIgKQoreworCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgb3Bjb2RlLCBsaW5lLCBzdGF0dXMsIHZhbDsKKwlpbnQgaTsKKworCitkYmcoICJkaWdpX3JlYWRfb29iX2NhbGxiYWNrOiBwb3J0PSVkLCBsZW49JWQiLCBwcml2LT5kcF9wb3J0X251bSwKK3VyYi0+YWN0dWFsX2xlbmd0aCApOworCisJLyogaGFuZGxlIGVhY2ggb29iIGNvbW1hbmQgKi8KKwlmb3IoIGk9MDsgaTx1cmItPmFjdHVhbF9sZW5ndGgtMzsgKSB7CisKKwkJb3Bjb2RlID0gKCh1bnNpZ25lZCBjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXIpW2krK107CisJCWxpbmUgPSAoKHVuc2lnbmVkIGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcilbaSsrXTsKKwkJc3RhdHVzID0gKCh1bnNpZ25lZCBjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXIpW2krK107CisJCXZhbCA9ICgodW5zaWduZWQgY2hhciAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyKVtpKytdOworCitkYmcoICJkaWdpX3JlYWRfb29iX2NhbGxiYWNrOiBvcGNvZGU9JWQsIGxpbmU9JWQsIHN0YXR1cz0lZCwgdmFsPSVkIiwKK29wY29kZSwgbGluZSwgc3RhdHVzLCB2YWwgKTsKKworCQlpZiggc3RhdHVzICE9IDAgfHwgbGluZSA+PSBzZXJpYWwtPnR5cGUtPm51bV9wb3J0cyApCisJCQljb250aW51ZTsKKworCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2xpbmVdOworCisJCWlmICgocHJpdj11c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCkpID09IE5VTEwgKQorCQkJcmV0dXJuIC0xOworCisJCWlmKCBvcGNvZGUgPT0gRElHSV9DTURfUkVBRF9JTlBVVF9TSUdOQUxTICkgeworCisJCQlzcGluX2xvY2soICZwcml2LT5kcF9wb3J0X2xvY2sgKTsKKworCQkJLyogY29udmVydCBmcm9tIGRpZ2kgZmxhZ3MgdG8gdGVybWlveCBmbGFncyAqLworCQkJaWYoIHZhbCAmIERJR0lfUkVBRF9JTlBVVF9TSUdOQUxTX0NUUyApIHsKKwkJCQlwcml2LT5kcF9tb2RlbV9zaWduYWxzIHw9IFRJT0NNX0NUUzsKKwkJCQkvKiBwb3J0IG11c3QgYmUgb3BlbiB0byB1c2UgdHR5IHN0cnVjdCAqLworCQkJCWlmKCBwb3J0LT5vcGVuX2NvdW50CisJCQkJJiYgcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUyApIHsKKwkJCQkJcG9ydC0+dHR5LT5od19zdG9wcGVkID0gMDsKKwkJCQkJZGlnaV93YWtldXBfd3JpdGUoIHBvcnQgKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXByaXYtPmRwX21vZGVtX3NpZ25hbHMgJj0gflRJT0NNX0NUUzsKKwkJCQkvKiBwb3J0IG11c3QgYmUgb3BlbiB0byB1c2UgdHR5IHN0cnVjdCAqLworCQkJCWlmKCBwb3J0LT5vcGVuX2NvdW50CisJCQkJJiYgcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUyApIHsKKwkJCQkJcG9ydC0+dHR5LT5od19zdG9wcGVkID0gMTsKKwkJCQl9CisJCQl9CisJCQlpZiggdmFsICYgRElHSV9SRUFEX0lOUFVUX1NJR05BTFNfRFNSICkKKwkJCQlwcml2LT5kcF9tb2RlbV9zaWduYWxzIHw9IFRJT0NNX0RTUjsKKwkJCWVsc2UKKwkJCQlwcml2LT5kcF9tb2RlbV9zaWduYWxzICY9IH5USU9DTV9EU1I7CisJCQlpZiggdmFsICYgRElHSV9SRUFEX0lOUFVUX1NJR05BTFNfUkkgKQorCQkJCXByaXYtPmRwX21vZGVtX3NpZ25hbHMgfD0gVElPQ01fUkk7CisJCQllbHNlCisJCQkJcHJpdi0+ZHBfbW9kZW1fc2lnbmFscyAmPSB+VElPQ01fUkk7CisJCQlpZiggdmFsICYgRElHSV9SRUFEX0lOUFVUX1NJR05BTFNfRENEICkKKwkJCQlwcml2LT5kcF9tb2RlbV9zaWduYWxzIHw9IFRJT0NNX0NEOworCQkJZWxzZQorCQkJCXByaXYtPmRwX21vZGVtX3NpZ25hbHMgJj0gflRJT0NNX0NEOworCisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoICZwcml2LT5kcF9tb2RlbV9jaGFuZ2Vfd2FpdCApOworCQkJc3Bpbl91bmxvY2soICZwcml2LT5kcF9wb3J0X2xvY2sgKTsKKworCQl9IGVsc2UgaWYoIG9wY29kZSA9PSBESUdJX0NNRF9UUkFOU01JVF9JRExFICkgeworCisJCQlzcGluX2xvY2soICZwcml2LT5kcF9wb3J0X2xvY2sgKTsKKwkJCXByaXYtPmRwX3RyYW5zbWl0X2lkbGUgPSAxOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCAmcHJpdi0+ZHBfdHJhbnNtaXRfaWRsZV93YWl0ICk7CisJCQlzcGluX3VubG9jayggJnByaXYtPmRwX3BvcnRfbG9jayApOworCisJCX0gZWxzZSBpZiggb3Bjb2RlID09IERJR0lfQ01EX0lGTFVTSF9GSUZPICkgeworCisJCQl3YWtlX3VwKCAmcHJpdi0+ZHBfZmx1c2hfd2FpdCApOworCisJCX0KKworCX0KKworCXJldHVybiggMCApOworCit9CisKKworc3RhdGljIGludCBfX2luaXQgZGlnaV9pbml0ICh2b2lkKQoreworCWludCByZXR2YWw7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmZGlnaV9hY2NlbGVwb3J0XzJfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF9hY2NlbGVwb3J0XzJfZGV2aWNlOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmRpZ2lfYWNjZWxlcG9ydF80X2RldmljZSk7CisJaWYgKHJldHZhbCkgCisJCWdvdG8gZmFpbGVkX2FjY2VsZXBvcnRfNF9kZXZpY2U7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZkaWdpX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOworCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlyZXR1cm4gMDsKK2ZhaWxlZF91c2JfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZkaWdpX2FjY2VsZXBvcnRfNF9kZXZpY2UpOworZmFpbGVkX2FjY2VsZXBvcnRfNF9kZXZpY2U6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZkaWdpX2FjY2VsZXBvcnRfMl9kZXZpY2UpOworZmFpbGVkX2FjY2VsZXBvcnRfMl9kZXZpY2U6CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgZGlnaV9leGl0ICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgmZGlnaV9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmRpZ2lfYWNjZWxlcG9ydF8yX2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmZGlnaV9hY2NlbGVwb3J0XzRfZGV2aWNlKTsKK30KKworCittb2R1bGVfaW5pdChkaWdpX2luaXQpOworbW9kdWxlX2V4aXQoZGlnaV9leGl0KTsKKworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZW1wZWcuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNDYzOTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZW1wZWcuYwpAQCAtMCwwICsxLDU5NiBAQAorLyoKKyAqIFVTQiBFbXBlZyBlbXBlZy1jYXIgcGxheWVyIGRyaXZlcgorICoKKyAqCUNvcHlyaWdodCAoQykgMjAwMCwgMjAwMQorICoJICAgIEdhcnkgQnJ1YmFrZXIgKHhhdnllckBpeC5uZXRjb20uY29tKQorICoKKyAqCUNvcHlyaWdodCAoQykgMTk5OSAtIDIwMDEKKyAqCSAgICBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcyBkcml2ZXIKKyAqIAorICogKDA3LzE2LzIwMDEpIGdiCisgKglyZW1vdmUgdW51c2VkIGNvZGUgaW4gZW1wZWdfY2xvc2UoKSAodGhhbmtzIHRvIE9saXZlciBOZXVrdW0gZm9yIHBvaW50aW5nIHRoaXMKKyAqCW91dCkgYW5kIHJld3JvdGUgZW1wZWdfc2V0X3Rlcm1pb3MoKS4KKyAqIAorICogKDA1LzMwLzIwMDEpIGdraAorICoJc3dpdGNoZWQgZnJvbSB1c2luZyBzcGlubG9jayB0byBhIHNlbWFwaG9yZSwgd2hpY2ggZml4ZXMgbG90cyBvZiBwcm9ibGVtcy4KKyAqCisgKiAoMDQvMDgvMjAwMSkgZ2IKKyAqICAgICAgSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZC4KKyAqIAorICogKDAxLzIyLzIwMDEpIGdiCisgKglBZGRlZCB3cml0ZV9yb29tKCkgYW5kIGNoYXJzX2luX2J1ZmZlcigpIHN1cHBvcnQuIAorICogCisgKiAoMTIvMjEvMjAwMCkgZ2IKKyAqCU1vdmVkIHRlcm1pbyBzdHVmZiBpbnNpZGUgdGhlIHBvcnQtPmFjdGl2ZSBjaGVjay4KKyAqCU1vdmVkIE1PRF9ERUNfVVNFX0NPVU5UIHRvIGVuZCBvZiBlbXBlZ19jbG9zZSgpLgorICogCisgKiAoMTIvMDMvMjAwMCkgZ2IKKyAqCUFkZGVkIHBvcnQtPnR0eS0+bGRpc2Muc2V0X3Rlcm1pb3MocG9ydC0+dHR5LCBOVUxMKSB0byBlbXBlZ19vcGVuKCkKKyAqCVRoaXMgbm90aWZpZXMgdGhlIHR0eSBkcml2ZXIgdGhhdCB0aGUgdGVybWlvcyBoYXZlIGNoYW5nZWQuCisgKiAKKyAqICgxMS8xMy8yMDAwKSBnYgorICoJTW92ZWQgdHR5LT5sb3dfbGF0ZW5jeSA9IDEgZnJvbSBlbXBlZ19yZWFkX2J1bGtfY2FsbGJhY2soKSB0byBlbXBlZ19vcGVuKCkKKyAqCShJdCBvbmx5IG5lZWRzIHRvIGJlIHNldCBvbmNlIC0gRG9oISkKKyAqIAorICogKDExLzExLzIwMDApIGdiCisgKglVcGRhdGVkIHRvIHdvcmsgd2l0aCBpZF90YWJsZSBzdHJ1Y3R1cmUuCisgKiAKKyAqICgxMS8wNC8yMDAwKSBnYgorICoJRm9ya2VkIHRoaXMgZnJvbSB2aXNvci5jLCBhbmQgaGFja2VkIGl0IHVwIHRvIHdvcmsgd2l0aCBhbgorICoJRW1wZWcgbHRkLiBlbXBlZy1jYXIgcGxheWVyLiAgQ29uc3RydWN0aXZlIGNyaXRpY2lzbSB3ZWxjb21lZC4KKyAqCUkgd291bGQgbGlrZSB0byBzYXksICdUaGFuayBZb3UnIHRvIEdyZWcgS3JvYWgtSGFydG1hbiBmb3IgdGhlCisgKgl1c2Ugb2YgaGlzIGNvZGUsIGFuZCBmb3IgaGlzIGd1aWRhbmNlLCBhZHZpY2UgYW5kIHBhdGllbmNlLiA6KQorICoJQSAnVGhhbmsgWW91JyBpcyBpbiBvcmRlciBmb3IgSm9obiBSaXBsZXkgb2YgRW1wZWcgbHRkIGZvciBoaXMKKyAqCWFkdmljZSwgYW5kIHBhdGllbmNlIHRvby4KKyAqIAorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKworc3RhdGljIGludCBkZWJ1ZzsKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuMiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4sIEdhcnkgQnJ1YmFrZXIgPHhhdnllckBpeC5uZXRjb20uY29tPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBFbXBlZyBNYXJrIEkvSUkgRHJpdmVyIgorCisjZGVmaW5lIEVNUEVHX1ZFTkRPUl9JRAkJCTB4MDg0ZgorI2RlZmluZSBFTVBFR19QUk9EVUNUX0lECQkweDAwMDEKKworLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgYW4gZW1wZWctY2FyIHBsYXllciAqLworc3RhdGljIGludCAgZW1wZWdfb3BlbgkJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCBlbXBlZ19jbG9zZQkJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50ICBlbXBlZ193cml0ZQkJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisJCQkJCWludCBjb3VudCk7CitzdGF0aWMgaW50ICBlbXBlZ193cml0ZV9yb29tCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50ICBlbXBlZ19jaGFyc19pbl9idWZmZXIJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgZW1wZWdfdGhyb3R0bGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIGVtcGVnX3VudGhyb3R0bGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgIGVtcGVnX3N0YXJ0dXAJCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIGVtcGVnX3NodXRkb3duCQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50ICBlbXBlZ19pb2N0bAkJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQlzdHJ1Y3QgZmlsZSAqIGZpbGUsCisJCQkJCXVuc2lnbmVkIGludCBjbWQsCisJCQkJCXVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyB2b2lkIGVtcGVnX3NldF90ZXJtaW9zCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKTsKK3N0YXRpYyB2b2lkIGVtcGVnX3dyaXRlX2J1bGtfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgZW1wZWdfcmVhZF9idWxrX2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShFTVBFR19WRU5ET1JfSUQsIEVNUEVHX1BST0RVQ1RfSUQpIH0sCisJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBlbXBlZ19kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImVtcGVnIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGVtcGVnX2RldmljZSA9IHsKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCSJFbXBlZyIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luID0JMCwKKwkubnVtX2J1bGtfaW4gPQkJMSwKKwkubnVtX2J1bGtfb3V0ID0JCTEsCisJLm51bV9wb3J0cyA9CQkxLAorCS5vcGVuID0JCQllbXBlZ19vcGVuLAorCS5jbG9zZSA9CQllbXBlZ19jbG9zZSwKKwkudGhyb3R0bGUgPQkJZW1wZWdfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUgPQkJZW1wZWdfdW50aHJvdHRsZSwKKwkuYXR0YWNoID0JCWVtcGVnX3N0YXJ0dXAsCisJLnNodXRkb3duID0JCWVtcGVnX3NodXRkb3duLAorCS5pb2N0bCA9CQllbXBlZ19pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkJZW1wZWdfc2V0X3Rlcm1pb3MsCisJLndyaXRlID0JCWVtcGVnX3dyaXRlLAorCS53cml0ZV9yb29tID0JCWVtcGVnX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlciA9CWVtcGVnX2NoYXJzX2luX2J1ZmZlciwKKwkud3JpdGVfYnVsa19jYWxsYmFjayA9CWVtcGVnX3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJLnJlYWRfYnVsa19jYWxsYmFjayA9CWVtcGVnX3JlYWRfYnVsa19jYWxsYmFjaywKK307CisKKyNkZWZpbmUgTlVNX1VSQlMJCQkxNgorI2RlZmluZSBVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUJNDA5NgorCitzdGF0aWMgc3RydWN0IHVyYgkqd3JpdGVfdXJiX3Bvb2xbTlVNX1VSQlNdOworc3RhdGljIHNwaW5sb2NrX3QJd3JpdGVfdXJiX3Bvb2xfbG9jazsKK3N0YXRpYyBpbnQJCWJ5dGVzX2luOworc3RhdGljIGludAkJYnl0ZXNfb3V0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFbXBlZyBzcGVjaWZpYyBkcml2ZXIgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBlbXBlZ19vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWludCByZXN1bHQgPSAwOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiBGb3JjZSBkZWZhdWx0IHRlcm1pbyBzZXR0aW5ncyAqLworCWVtcGVnX3NldF90ZXJtaW9zIChwb3J0LCBOVUxMKSA7CisKKwlieXRlc19pbiA9IDA7CisJYnl0ZXNfb3V0ID0gMDsKKworCS8qIFN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCisJdXNiX2ZpbGxfYnVsa191cmIoCisJCXBvcnQtPnJlYWRfdXJiLAorCQlzZXJpYWwtPmRldiwgCisJCXVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPmRldiwKKwkJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCWVtcGVnX3JlYWRfYnVsa19jYWxsYmFjaywKKwkJcG9ydCk7CisKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CisKKwlpZiAocmVzdWx0KQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgdm9pZCBlbXBlZ19jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxwKQoreworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJLyogc2h1dGRvd24gb3VyIGJ1bGsgcmVhZCAqLworCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisJLyogVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSBpZiB5b3Ugd2FudCB0byBzZWUgc29tZSBzdGF0aXN0aWNzIGluIHlvdXIgc3lzbG9nICovCisJLyogZGV2X2luZm8gKCZwb3J0LT5kZXYsICJCeXRlcyBJbiA9ICVkICBCeXRlcyBPdXQgPSAlZFxuIiwgYnl0ZXNfaW4sIGJ5dGVzX291dCk7ICovCit9CisKKworc3RhdGljIGludCBlbXBlZ193cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJY29uc3QgdW5zaWduZWQgY2hhciAqY3VycmVudF9wb3NpdGlvbiA9IGJ1ZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzdGF0dXM7CisJaW50IGk7CisJaW50IGJ5dGVzX3NlbnQgPSAwOworCWludCB0cmFuc2Zlcl9zaXplOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwl3aGlsZSAoY291bnQgPiAwKSB7CisKKwkJLyogdHJ5IHRvIGZpbmQgYSBmcmVlIHVyYiBpbiBvdXIgbGlzdCBvZiB0aGVtICovCisJCXVyYiA9IE5VTEw7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUgKCZ3cml0ZV91cmJfcG9vbF9sb2NrLCBmbGFncyk7CisKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9VUkJTOyArK2kpIHsKKwkJCWlmICh3cml0ZV91cmJfcG9vbFtpXS0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCQkJCXVyYiA9IHdyaXRlX3VyYl9wb29sW2ldOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJndyaXRlX3VyYl9wb29sX2xvY2ssIGZsYWdzKTsKKworCQlpZiAodXJiID09IE5VTEwpIHsKKwkJCWRiZygiJXMgLSBubyBtb3JlIGZyZWUgdXJicyIsIF9fRlVOQ1RJT05fXyk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgeworCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jIChVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUsIEdGUF9BVE9NSUMpOworCQkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpIHsKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyBubyBtb3JlIGtlcm5lbCBtZW1vcnkuLi5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJZ290byBleGl0OworCQkJfQorCQl9CisKKwkJdHJhbnNmZXJfc2l6ZSA9IG1pbiAoY291bnQsIFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSk7CisKKwkJbWVtY3B5ICh1cmItPnRyYW5zZmVyX2J1ZmZlciwgY3VycmVudF9wb3NpdGlvbiwgdHJhbnNmZXJfc2l6ZSk7CisKKwkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIHRyYW5zZmVyX3NpemUsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCQkvKiBidWlsZCB1cCBvdXIgdXJiICovCisJCXVzYl9maWxsX2J1bGtfdXJiICgKKwkJCXVyYiwKKwkJCXNlcmlhbC0+ZGV2LAorCQkJdXNiX3NuZGJ1bGtwaXBlKHNlcmlhbC0+ZGV2LAorCQkJCXBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksIAorCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQl0cmFuc2Zlcl9zaXplLAorCQkJZW1wZWdfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkJCXBvcnQpOworCisJCS8qIHNlbmQgaXQgZG93biB0aGUgcGlwZSAqLworCQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCQlpZiAoc3RhdHVzKSB7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZCB3aXRoIHN0YXR1cyA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCQlieXRlc19zZW50ID0gc3RhdHVzOworCQkJYnJlYWs7CisJCX0KKworCQljdXJyZW50X3Bvc2l0aW9uICs9IHRyYW5zZmVyX3NpemU7CisJCWJ5dGVzX3NlbnQgKz0gdHJhbnNmZXJfc2l6ZTsKKwkJY291bnQgLT0gdHJhbnNmZXJfc2l6ZTsKKwkJYnl0ZXNfb3V0ICs9IHRyYW5zZmVyX3NpemU7CisKKwl9CisKK2V4aXQ6CisJcmV0dXJuIGJ5dGVzX3NlbnQ7CisKK30gCisKKworc3RhdGljIGludCBlbXBlZ193cml0ZV9yb29tIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisJaW50IHJvb20gPSAwOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJndyaXRlX3VyYl9wb29sX2xvY2ssIGZsYWdzKTsKKworCS8qIHRhbGx5IHVwIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlICovCisJZm9yIChpID0gMDsgaSA8IE5VTV9VUkJTOyArK2kpIHsKKwkJaWYgKHdyaXRlX3VyYl9wb29sW2ldLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKSB7CisJCQlyb29tICs9IFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRTsKKwkJfQorCX0gCisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmd3JpdGVfdXJiX3Bvb2xfbG9jaywgZmxhZ3MpOworCisJZGJnKCIlcyAtIHJldHVybnMgJWQiLCBfX0ZVTkNUSU9OX18sIHJvb20pOworCisJcmV0dXJuIChyb29tKTsKKworfQorCisKK3N0YXRpYyBpbnQgZW1wZWdfY2hhcnNfaW5fYnVmZmVyIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisJaW50IGNoYXJzID0gMDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZ3cml0ZV91cmJfcG9vbF9sb2NrLCBmbGFncyk7CisKKwkvKiB0YWxseSB1cCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdhaXRpbmcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1VSQlM7ICsraSkgeworCQlpZiAod3JpdGVfdXJiX3Bvb2xbaV0tPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJCWNoYXJzICs9IFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZ3cml0ZV91cmJfcG9vbF9sb2NrLCBmbGFncyk7CisKKwlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fRlVOQ1RJT05fXywgY2hhcnMpOworCisJcmV0dXJuIChjaGFycyk7CisKK30KKworCitzdGF0aWMgdm9pZCBlbXBlZ193cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJc2NoZWR1bGVfd29yaygmcG9ydC0+d29yayk7Cit9CisKKworc3RhdGljIHZvaWQgZW1wZWdfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgaTsKKwlpbnQgcmVzdWx0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCisJdHR5ID0gcG9ydC0+dHR5OworCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoIDsgKytpKSB7CisJCQkvKiBnYiAtIDIwMDAvMTEvMTMKKwkJCSAqIElmIHdlIGluc2VydCB0b28gbWFueSBjaGFyYWN0ZXJzIHdlJ2xsIG92ZXJmbG93IHRoZSBidWZmZXIuCisJCQkgKiBUaGlzIG1lYW5zIHdlJ2xsIGxvc2UgYnl0ZXMgLSBEZWNpZGVkbHkgYmFkLgorCQkJICovCisJCQlpZih0dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkgeworCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQkJfQorCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCAwKTsKKwkJfQorCQkvKiBnYiAtIDIwMDAvMTEvMTMKKwkJICogR29lcyBzdHJhaWdodCB0aHJvdWdoIGluc3RlYWQgb2Ygc2NoZWR1bGluZyAtIGlmIHR0eS0+bG93X2xhdGVuY3kgaXMgc2V0LgorCQkgKi8KKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJYnl0ZXNfaW4gKz0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCX0KKworCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCAgKi8KKwl1c2JfZmlsbF9idWxrX3VyYigKKwkJcG9ydC0+cmVhZF91cmIsCisJCXBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJZW1wZWdfcmVhZF9idWxrX2NhbGxiYWNrLAorCQlwb3J0KTsKKworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKworCWlmIChyZXN1bHQpCisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisKKwlyZXR1cm47CisKK30KKworCitzdGF0aWMgdm9pZCBlbXBlZ190aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworfQorCisKK3N0YXRpYyB2b2lkIGVtcGVnX3VudGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCisJaWYgKHJlc3VsdCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKworCXJldHVybjsKK30KKworCitzdGF0aWMgaW50ICBlbXBlZ19zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWludCByOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlICE9IDEpIHsKKwkJZXJyKCJhY3RpdmUgY29uZmlnICMlZCAhPSAxID8/IiwKKwkJCXNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlkYmcoIiVzIC0gcmVzZXQgY29uZmlnIiwgX19GVU5DVElPTl9fKTsKKwlyID0gdXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24gKHNlcmlhbC0+ZGV2KTsKKworCS8qIGNvbnRpbnVlIG9uIHdpdGggaW5pdGlhbGl6YXRpb24gKi8KKwlyZXR1cm4gcjsKKworfQorCisKK3N0YXRpYyB2b2lkIGVtcGVnX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKK30KKworCitzdGF0aWMgaW50IGVtcGVnX2lvY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWRiZygiJXMgLSBwb3J0ICVkLCBjbWQgMHglLjR4IiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIGNtZCk7CisKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCisKK3N0YXRpYyB2b2lkIGVtcGVnX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICgoIXBvcnQtPnR0eSkgfHwgKCFwb3J0LT50dHktPnRlcm1pb3MpKSB7CisJCWRiZygiJXMgLSBubyB0dHkgc3RydWN0dXJlcyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwkvKgorICAgICAgICAgKiBUaGUgZW1wZWctY2FyIHBsYXllciB3YW50cyB0aGVzZSBwYXJ0aWN1bGFyIHR0eSBzZXR0aW5ncy4KKyAgICAgICAgICogWW91IGNvdWxkLCBmb3IgZXhhbXBsZSwgY2hhbmdlIHRoZSBiYXVkIHJhdGUsIGhvd2V2ZXIgdGhlCisgICAgICAgICAqIHBsYXllciBvbmx5IHN1cHBvcnRzIDExNTIwMCAoY3VycmVudGx5KSwgc28gdGhlcmUgaXMgcmVhbGx5CisgICAgICAgICAqIG5vIHBvaW50IGluIHN1cHBvcnQgZm9yIGNoYW5nZXMgdG8gdGhlIHR0eSBzZXR0aW5ncy4KKyAgICAgICAgICogKGF0IGxlYXN0IGZvciBub3cpCisgICAgICAgICAqCisgICAgICAgICAqIFRoZSBkZWZhdWx0IHJlcXVpcmVtZW50cyBmb3IgdGhpcyBkZXZpY2UgYXJlOgorICAgICAgICAgKi8KKwlwb3J0LT50dHktPnRlcm1pb3MtPmNfaWZsYWcKKwkJJj0gfihJR05CUksJLyogZGlzYWJsZSBpZ25vcmUgYnJlYWsgKi8KKwkJfCBCUktJTlQJLyogZGlzYWJsZSBicmVhayBjYXVzZXMgaW50ZXJydXB0ICovCisJCXwgUEFSTVJLCS8qIGRpc2FibGUgbWFyayBwYXJpdHkgZXJyb3JzICovCisJCXwgSVNUUklQCS8qIGRpc2FibGUgY2xlYXIgaGlnaCBiaXQgb2YgaW5wdXQgY2hhcmFjdGVycyAqLworCQl8IElOTENSCQkvKiBkaXNhYmxlIHRyYW5zbGF0ZSBOTCB0byBDUiAqLworCQl8IElHTkNSCQkvKiBkaXNhYmxlIGlnbm9yZSBDUiAqLworCQl8IElDUk5MCQkvKiBkaXNhYmxlIHRyYW5zbGF0ZSBDUiB0byBOTCAqLworCQl8IElYT04pOwkvKiBkaXNhYmxlIGVuYWJsZSBYT04vWE9GRiBmbG93IGNvbnRyb2wgKi8KKworCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19vZmxhZworCQkmPSB+T1BPU1Q7CS8qIGRpc2FibGUgcG9zdHByb2Nlc3Mgb3V0cHV0IGNoYXJhY3RlcnMgKi8KKworCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19sZmxhZworCQkmPSB+KEVDSE8JLyogZGlzYWJsZSBlY2hvIGlucHV0IGNoYXJhY3RlcnMgKi8KKwkJfCBFQ0hPTkwJLyogZGlzYWJsZSBlY2hvIG5ldyBsaW5lICovCisJCXwgSUNBTk9OCS8qIGRpc2FibGUgZXJhc2UsIGtpbGwsIHdlcmFzZSwgYW5kIHJwcm50IHNwZWNpYWwgY2hhcmFjdGVycyAqLworCQl8IElTSUcJCS8qIGRpc2FibGUgaW50ZXJydXB0LCBxdWl0LCBhbmQgc3VzcGVuZCBzcGVjaWFsIGNoYXJhY3RlcnMgKi8KKwkJfCBJRVhURU4pOwkvKiBkaXNhYmxlIG5vbi1QT1NJWCBzcGVjaWFsIGNoYXJhY3RlcnMgKi8KKworCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZworCQkmPSB+KENTSVpFCS8qIG5vIHNpemUgKi8KKwkJfCBQQVJFTkIJLyogZGlzYWJsZSBwYXJpdHkgYml0ICovCisJCXwgQ0JBVUQpOwkvKiBjbGVhciBjdXJyZW50IGJhdWQgcmF0ZSAqLworCisJcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnCisJCXw9IChDUzgJCS8qIGNoYXJhY3RlciBzaXplIDggYml0cyAqLworCQl8IEIxMTUyMDApOwkvKiBiYXVkIHJhdGUgMTE1MjAwICovCisKKwkvKgorCSAqIEZvcmNlIGxvd19sYXRlbmN5IG9uOyBvdGhlcndpc2UgdGhlIHB1c2hlcyBhcmUgc2NoZWR1bGVkOworCSAqIHRoaXMgaXMgYmFkIGFzIGl0IG9wZW5zIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiBkcm9wcGluZyBieXRlcworCSAqIG9uIHRoZSBmbG9vci4gIFdlIGRvbid0IHdhbnQgdG8gZHJvcCBieXRlcyBvbiB0aGUgZmxvb3IuIDopCisJICovCisJcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IDE7CisKKwlyZXR1cm47Cit9CisKKworc3RhdGljIGludCBfX2luaXQgZW1wZWdfaW5pdCAodm9pZCkKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGksIHJldHZhbDsKKworCS8qIGNyZWF0ZSBvdXIgd3JpdGUgdXJiIHBvb2wgYW5kIHRyYW5zZmVyIGJ1ZmZlcnMgKi8gCisJc3Bpbl9sb2NrX2luaXQgKCZ3cml0ZV91cmJfcG9vbF9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1VSQlM7ICsraSkgeworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQl3cml0ZV91cmJfcG9vbFtpXSA9IHVyYjsKKwkJaWYgKHVyYiA9PSBOVUxMKSB7CisJCQllcnIoIk5vIG1vcmUgdXJicz8/PyIpOworCQkJY29udGludWU7CisJCX0KKworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MgKFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKKwkJCWVycigiJXMgLSBvdXQgb2YgbWVtb3J5IGZvciB1cmIgYnVmZmVycy4iLCAKKwkJCSAgICBfX0ZVTkNUSU9OX18pOworCQkJY29udGludWU7CisJCX0KKwl9CisKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZlbXBlZ19kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZlbXBlZ19kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKKworCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKworCXJldHVybiAwOworZmFpbGVkX3VzYl9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmVtcGVnX2RldmljZSk7CitmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjoKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1VSQlM7ICsraSkgeworCQlpZiAod3JpdGVfdXJiX3Bvb2xbaV0pIHsKKwkJCWlmICh3cml0ZV91cmJfcG9vbFtpXS0+dHJhbnNmZXJfYnVmZmVyKQorCQkJCWtmcmVlKHdyaXRlX3VyYl9wb29sW2ldLT50cmFuc2Zlcl9idWZmZXIpOworCQkJdXNiX2ZyZWVfdXJiKHdyaXRlX3VyYl9wb29sW2ldKTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBlbXBlZ19leGl0ICh2b2lkKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl1c2JfZGVyZWdpc3RlcigmZW1wZWdfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZlbXBlZ19kZXZpY2UpOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZ3cml0ZV91cmJfcG9vbF9sb2NrLCBmbGFncyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1VSQlM7ICsraSkgeworCQlpZiAod3JpdGVfdXJiX3Bvb2xbaV0pIHsKKwkJCS8qIEZJWE1FIC0gdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgdXNiX2tpbGxfdXJiIGNhbGwgd2hlbgorCQkJICogdGhlIGhvc3QgY29udHJvbGxlcnMgZ2V0IGZpeGVkIHRvIHNldCB1cmItPmRldiA9IE5VTEwgYWZ0ZXIKKwkJCSAqIHRoZSB1cmIgaXMgZmluaXNoZWQuICBPdGhlcndpc2UgdGhpcyBjYWxsIG9vcHNlcy4gKi8KKwkJCS8qIHVzYl9raWxsX3VyYih3cml0ZV91cmJfcG9vbFtpXSk7ICovCisJCQlpZiAod3JpdGVfdXJiX3Bvb2xbaV0tPnRyYW5zZmVyX2J1ZmZlcikKKwkJCQlrZnJlZSh3cml0ZV91cmJfcG9vbFtpXS0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJCXVzYl9mcmVlX3VyYiAod3JpdGVfdXJiX3Bvb2xbaV0pOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJndyaXRlX3VyYl9wb29sX2xvY2ssIGZsYWdzKTsKK30KKworCittb2R1bGVfaW5pdChlbXBlZ19pbml0KTsKK21vZHVsZV9leGl0KGVtcGVnX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZXp1c2IuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9lenVzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNDE5YzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZXp1c2IuYwpAQCAtMCwwICsxLDYwIEBACisvKgorICogRVotVVNCIHNwZWNpZmljIGZ1bmN0aW9ucyB1c2VkIGJ5IHNvbWUgb2YgdGhlIFVTQiB0byBTZXJpYWwgZHJpdmVycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDAyIEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICoJMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKworLyogRVotVVNCIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3Rlci4gIEJpdCAwIGNvbnRyb2xzIDgwNTEgcmVzZXQgKi8KKyNkZWZpbmUgQ1BVQ1NfUkVHICAgIDB4N0Y5MgorCitpbnQgZXp1c2Jfd3JpdGVtZW1vcnkgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGludCBhZGRyZXNzLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuZ3RoLCBfX3U4IGJSZXF1ZXN0KQoreworCWludCByZXN1bHQ7CisJdW5zaWduZWQgY2hhciAqdHJhbnNmZXJfYnVmZmVyOworCisJLyogZGJnKCJlenVzYl93cml0ZW1lbW9yeSAleCwgJWQiLCBhZGRyZXNzLCBsZW5ndGgpOyAqLworCWlmICghc2VyaWFsLT5kZXYpIHsKKwkJZXJyKCIlcyAtIG5vIHBoeXNpY2FsIGRldmljZSBwcmVzZW50LCBmYWlsaW5nLiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXRyYW5zZmVyX2J1ZmZlciA9ICBrbWFsbG9jIChsZW5ndGgsIEdGUF9LRVJORUwpOworCWlmICghdHJhbnNmZXJfYnVmZmVyKSB7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIGttYWxsb2MoJWQpIGZhaWxlZC5cbiIsIF9fRlVOQ1RJT05fXywgbGVuZ3RoKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbWNweSAodHJhbnNmZXJfYnVmZmVyLCBkYXRhLCBsZW5ndGgpOworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksIGJSZXF1ZXN0LCAweDQwLCBhZGRyZXNzLCAwLCB0cmFuc2Zlcl9idWZmZXIsIGxlbmd0aCwgMzAwMCk7CisJa2ZyZWUgKHRyYW5zZmVyX2J1ZmZlcik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworaW50IGV6dXNiX3NldF9yZXNldCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgY2hhciByZXNldF9iaXQpCit7CisJaW50IHJlc3BvbnNlOworCisJLyogZGJnKCIlcyAtICVkIiwgX19GVU5DVElPTl9fLCByZXNldF9iaXQpOyAqLworCXJlc3BvbnNlID0gZXp1c2Jfd3JpdGVtZW1vcnkgKHNlcmlhbCwgQ1BVQ1NfUkVHLCAmcmVzZXRfYml0LCAxLCAweGEwKTsKKwlpZiAocmVzcG9uc2UgPCAwKQorCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMtICVkIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fLCByZXNldF9iaXQpOworCXJldHVybiByZXNwb25zZTsKK30KKworCitFWFBPUlRfU1lNQk9MKGV6dXNiX3dyaXRlbWVtb3J5KTsKK0VYUE9SVF9TWU1CT0woZXp1c2Jfc2V0X3Jlc2V0KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2V6dXNiX2NvbnZlcnQucGwgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZXp1c2JfY29udmVydC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2YxMTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2V6dXNiX2NvbnZlcnQucGwKQEAgLTAsMCArMSw1MCBAQAorIyEgL3Vzci9iaW4vcGVybCAtdworCisKKyMgY29udmVydCBhbiBJbnRlbCBIRVggZmlsZSBpbnRvIGEgc2V0IG9mIEMgcmVjb3JkcyB1c2FibGUgYnkgdGhlIGZpcm13YXJlCisjIGxvYWRpbmcgY29kZSBpbiB1c2Itc2VyaWFsLmMgKG9yIG90aGVycykKKworIyBhY2NlcHRzIHRoZSAuaGV4IGZpbGUocykgb24gc3RkaW4sIGEgYmFzZW5hbWUgKHRvIG5hbWUgdGhlIGluaXRpYWxpemVkCisjIGFycmF5KSBhcyBhbiBhcmd1bWVudCwgYW5kIHByaW50cyB0aGUgLmggZmlsZSB0byBzdGRvdXQuIFR5cGljYWwgdXNhZ2U6CisjICBwZXJsIGV6dXNiX2NvbnZlcnQucGwgZm9vIDxmb28uaGV4ID5md19mb28uaAorCisKK215ICRiYXNlbmFtZSA9ICRBUkdWWzBdOworZGllICJubyBiYXNlIG5hbWUgc3BlY2lmaWVkIiB1bmxlc3MgJGJhc2VuYW1lOworCit3aGlsZSAoPFNURElOPikgeworICAgICMgJzonIDxsZW4+IDxhZGRyPiA8dHlwZT4gPGxlbi1kYXRhPiA8Y3JjPiAnXHInCisgICAgIyAgbGVuLCB0eXBlLCBjcmMgYXJlIDItY2hhciBoZXgsIGFkZHIgaXMgNC1jaGFyIGhleC4gdHlwZSBpcyAwMCBmb3IKKyAgICAjIG5vcm1hbCByZWNvcmRzLCAwMSBmb3IgRU9GCisgICAgbXkoJGxlbnN0cmluZywgJGFkZHJzdHJpbmcsICR0eXBlc3RyaW5nLCAkcmVzdHN0cmluZywgJGRvc2NyYXApID0KKyAgICAgIC9eOihcd1x3KShcd1x3XHdcdykoXHdcdykoXHcrKShccj8pJC87CisgICAgZGllICJtYWxmb3JtZWQgbGluZTogJF8iIHVubGVzcyAkcmVzdHN0cmluZzsKKyAgICBsYXN0IGlmICR0eXBlc3RyaW5nIGVxICcwMSc7CisgICAgbXkoJGxlbikgPSBoZXgoJGxlbnN0cmluZyk7CisgICAgbXkoJGFkZHIpID0gaGV4KCRhZGRyc3RyaW5nKTsKKyAgICBteShAYnl0ZXMpID0gdW5wYWNrKCJDKiIsIHBhY2soIkgiLigyKiRsZW4pLCAkcmVzdHN0cmluZykpOworICAgICNwb3AoQGJ5dGVzKTsgIyBsYXN0IGJ5dGUgaXMgYSBDUkMKKyAgICBwdXNoKEByZWNvcmRzLCBbJGFkZHIsIFxAYnl0ZXNdKTsKK30KKworQHNvcnRlZF9yZWNvcmRzID0gc29ydCB7ICRhLT5bMF0gPD0+ICRiLT5bMF0gfSBAcmVjb3JkczsKKworcHJpbnQgPDwiRU9GIjsKKy8qCisgKiAke2Jhc2VuYW1lfV9mdy5oCisgKgorICogR2VuZXJhdGVkIGZyb20gJHtiYXNlbmFtZX0ucyBieSBlenVzYl9jb252ZXJ0LnBsCisgKiBUaGlzIGZpbGUgaXMgcHJlc3VtZWQgdG8gYmUgdW5kZXIgdGhlIHNhbWUgY29weXJpZ2h0IGFzIHRoZSBzb3VyY2UgZmlsZQorICogZnJvbSB3aGljaCBpdCB3YXMgZGVyaXZlZC4KKyAqLworCitFT0YKKworcHJpbnQgInN0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCAke2Jhc2VuYW1lfV9maXJtd2FyZVtdID0ge1xuIjsKK2ZvcmVhY2ggJHIgKEBzb3J0ZWRfcmVjb3JkcykgeworICAgIHByaW50ZigieyAweCUwNHgsXHQlZCxcdHsiLCAkci0+WzBdLCBzY2FsYXIoQHskci0+WzFdfSkpOworICAgIHByaW50IGpvaW4oIiwgIiwgbWFwIHtzcHJpbnRmKCcweCUwMngnLCAkXyk7fSBAeyRyLT5bMV19KTsKKyAgICBwcmludCAifSB9LFxuIjsKK30KK3ByaW50ICJ7IDB4ZmZmZixcdDAsXHR7MHgwMH0gfVxuIjsKK3ByaW50ICJ9O1xuIjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFmZDkwNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCkBAIC0wLDAgKzEsMjQ5NiBAQAorLyoKKyAqIFVTQiBGVERJIFNJTyBkcml2ZXIKKyAqCisgKiAJQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAwMQorICogCSAgICBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICogICAgICAgICAgQmlsbCBSeWRlciAoYnJ5ZGVyQHNnaS5jb20pCisgKglDb3B5cmlnaHQgKEMpIDIwMDIKKyAqCSAgICBLdWJhIE9iZXIgKGt1YmFAbWFyZWltYnJpdW0ub3JnKQorICoKKyAqIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIAkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICoKKyAqIFNlZSBodHRwOi8vZnRkaS11c2Itc2lvLnNvdXJjZWZvcmdlLm5ldCBmb3IgdXB0byBkYXRlIHRlc3RpbmcgaW5mbworICoJYW5kIGV4dHJhIGRvY3VtZW50YXRpb24KKyAqCisgKiAoMjEvSnVsLzIwMDQpIElhbiBBYmJvdHQKKyAqICAgICAgSW5jb3Jwb3JhdGVkIFN0ZXZlbiBUdXJuZXIncyBjb2RlIHRvIGFkZCBzdXBwb3J0IGZvciB0aGUgRlQyMjMyQyBjaGlwLgorICogICAgICBUaGUgcHJlbGltaWxhcnkgcG9ydCB0byB0aGUgMi42IGtlcm5lbCB3YXMgYnkgUnVzIFYuIEJydXNoa29mZi4gIEkgaGF2ZQorICogICAgICBmaXhlZCBhIGNvdXBsZSBvZiB0aGluZ3MuCisgKgorICogKDI3L01heS8yMDA0KSBJYW4gQWJib3R0CisgKiAgICAgIEltcHJvdmVkIHRocm90dGxpbmcgY29kZSwgbW9zdGx5IHN0b2xlbiBmcm9tIHRoZSBXaGl0ZUhFQVQgZHJpdmVyLgorICoKKyAqICgyNi9NYXIvMjAwNCkgSmFuIENhcGVrCisgKiAgICAgIEFkZGVkIFBJRCdzIGZvciBJQ0QtVTIwL0lDRC1VNDAgLSBpbmNpcmN1aXQgUElDIGRlYnVnZ2VycyBmcm9tIENDUyBJbmMuCisgKgorICogKDA5L0ZlYi8yMDA0KSBJYW4gQWJib3R0CisgKiAgICAgIENoYW5nZWQgZnVsbCBuYW1lIG9mIFVTQi1VSVJUIGRldmljZSB0byBhdm9pZCAiLyIgY2hhcmFjdGVyLgorICogICAgICBBZGRlZCBGVERJJ3MgYWx0ZXJuYXRlIFBJRCAoMHg2MDA2KSBmb3IgRlQyMzIvMjQ1IGRldmljZXMuCisgKiAgICAgIEFkZGVkIFBJRCBmb3IgIkVMViBVU0IgTW9kdWxlIFVPMTAwIiBmcm9tIFN0ZWZhbiBGcmluZ3MuCisgKiAKKyAqICgyMS9PY3QvMjAwMykgSWFuIEFiYm90dAorICogICAgICBSZW5hbWVkIHNvbWUgVklEL1BJRCBtYWNyb3MgZm9yIE1hdHJpeCBPcmJpdGFsIGFuZCBQZXJsZSBTeXN0ZW1zCisgKiAgICAgIGRldmljZXMuICBSZW1vdmVkIE1hdHJpeCBPcmJpdGFsIGFuZCBQZXJsZSBTeXN0ZW1zIGRldmljZXMgZnJvbSB0aGUKKyAqICAgICAgOFUyMzJBTSBkZXZpY2UgdGFibGUsIGJ1dCBsZWZ0IHRoZW0gaW4gdGhlIEZUMjMyQk0gdGFibGUsIGFzIHRoZXkgYXJlCisgKiAgICAgIGtub3duIHRvIHVzZSBvbmx5IEZUMjMyQk0uCisgKgorICogKDE3L09jdC8yMDAzKSBTY290dCBBbGxlbgorICogICAgICBBZGRlZCB2aWQvcGlkIGZvciBQZXJsZSBTeXN0ZW1zIFVsdHJhUG9ydCBVU0Igc2VyaWFsIGNvbnZlcnRlcnMKKyAqCisgKiAoMjEvU2VwLzIwMDMpIElhbiBBYmJvdHQKKyAqICAgICAgQWRkZWQgVklEL1BJRCBmb3IgT21uaWRpcmVjdGlvbmFsIENvbnRyb2wgVGVjaG5vbG9neSBVUzEwMSBVU0IgdG8KKyAqICAgICAgUlMtMjMyIGFkYXB0ZXIgKGFsc28gcmViYWRnZWQgYXMgRGljayBTbWl0aCBFbGVjdHJvbmljcyBYSDYzODEpLgorICogICAgICBWSUQvUElEIHN1cHBsaWVkIGJ5IERvbmFsZCBHb3Jkb24uCisgKgorICogKDE5L0F1Zy8yMDAzKSBJYW4gQWJib3R0CisgKiAgICAgIEZyZWVkIHVyYidzIHRyYW5zZmVyIGJ1ZmZlciBpbiB3cml0ZSBidWxrIGNhbGxiYWNrLgorICogICAgICBPbWl0dGVkIHNvbWUgcGFyYW5vaWQgY2hlY2tzIGluIHdyaXRlIGJ1bGsgY2FsbGJhY2sgdGhhdCBkb24ndCBtYXR0ZXIuCisgKiAgICAgIFNjaGVkdWxlZCB3b3JrIGluIHdyaXRlIGJ1bGsgY2FsbGJhY2sgcmVnYXJkbGVzcyBvZiBwb3J0J3Mgb3BlbiBjb3VudC4KKyAqCisgKiAoMDUvQXVnLzIwMDMpIElhbiBBYmJvdHQKKyAqICAgICAgQWRkZWQgVklEL1BJRCBmb3IgSUQgVEVDSCBJRFQxMjIxVSBVU0IgdG8gUlMtMjMyIGFkYXB0ZXIuCisgKiAgICAgIFZJRC9QSUQgcHJvdmlkZWQgYnkgU3RldmUgQnJpZ2dzLgorICoKKyAqICgyMy9KdWwvMjAwMykgSWFuIEFiYm90dAorICogICAgICBBZGRlZCBQSURzIGZvciBDcnlzdGFsRm9udHogNTQ3LCA2MzMsIDYzMSwgNjM1LCA2NDAgYW5kIDY0MCBmcm9tCisgKiAgICAgIFdheW5lIFd5bHVwc2tpLgorICoKKyAqICgxMC9KdWwvMjAwMykgRGF2aWQgR2xhbmNlCisgKiAgICAgIEFkZGVkIFBJRCBmb3IgRFNTLTIwIFN5bmNTdGF0aW9uIGNyYWRsZSBmb3IgU29ueS1Fcmljc3NvbiBQODAwLgorICoKKyAqICgyNy9KdW4vMjAwMykgSWFuIEFiYm90dAorICoJUmV3b3JrZWQgdGhlIHVyYiBoYW5kbGluZyBsb2dpYy4gIFdlIGhhdmUgbm8gbW9yZSBwb29sLCBidXQgZHluYW1pY2FsbHkKKyAqCWFsbG9jYXRlIHRoZSB1cmIgYW5kIHRoZSB0cmFuc2ZlciBidWZmZXIgb24gdGhlIGZseS4gIEluIHRlc3RpbmcgdGhpcworICoJZG9lcyBub3QgaW5jdXJlIGFueSBtZWFzdXJhYmxlIG92ZXJoZWFkLiAgVGhpcyBhbHNvIHJlbGllcyBvbiB0aGUgZmFjdAorICoJdGhhdCB3ZSBoYXZlIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgZm9yIHVyYnMuICBJIG5pY2tlZCB0aGlzCisgKglmcm9tIEdyZWcgS0gncyBWaXNvciBkcml2ZXIuCisgKiAgICAgIAorICogKDIzL0p1bi8yMDAzKSBJYW4gQWJib3R0CisgKiAgICAgIFJlZHVjZWQgZmxpcCBidWZmZXIgcHVzaGVzIGFuZCBjb3JyZWN0ZWQgYSBkYXRhIGxlbmd0aCB0ZXN0IGluCisgKiAgICAgIGZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrLgorICogICAgICBEZWZlcmVyZW5jZSBwb2ludGVycyBhZnRlciBhbnkgcGFyYW5vaWQgY2hlY2tzLCBub3QgYmVmb3JlLgorICoKKyAqICgyMS9KdW4vMjAwMykgRXJpayBOeWdyZW4KKyAqICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgSG9tZSBFbGVjdHJvbmljcyBUaXJhLTEgSVIgdHJhbmNlaXZlciB1c2luZyBGVDIzMkJNIGNoaXAuCisgKiAgICAgIFNlZSA8aHR0cDovL3d3dy5ob21lLWVsZWN0cm8uY29tL3RpcmExLmh0bT4uICBPbmx5IG9wZXJhdGVzIHByb3Blcmx5IAorICogICAgICBhdCAxMDAwMDAgYW5kIFJUUy1DVFMsIHNvIHNldCBjdXN0b20gZGl2aXNvciBtb2RlIG9uIHN0YXJ0dXAuCisgKiAgICAgIEFsc28gZm9yY2UgdGhlIFRpcmEtMSBhbmQgVVNCLVVJUlQgdG8gb25seSB1c2UgdGhlaXIgY3VzdG9tIGJhdWQgcmF0ZXMuCisgKgorICogKDE4L0p1bi8yMDAzKSBJYW4gQWJib3R0CisgKiAgICAgIEFkZGVkIERldmljZSBJRCBvZiB0aGUgVVNCIHJlbGFpcyBmcm9tIFJ1ZG9sZiBHdWdsZXIgKGJhY2twb3J0ZWQgZnJvbQorICogICAgICBQaGlsaXBwIEf8aHJpbmcncyBwYXRjaCBmb3IgMi41Lngga2VybmVsKS4KKyAqICAgICAgTW92ZWQgcmVhZCB0cmFuc2ZlciBidWZmZXIgcmVhbGxvY2F0aW9uIGludG8gc3RhcnR1cCBmdW5jdGlvbi4KKyAqICAgICAgRnJlZSBleGlzdGluZyB3cml0ZSB1cmIgYW5kIHRyYW5zZmVyIGJ1ZmZlciBpbiBzdGFydHVwIGZ1bmN0aW9uLgorICogICAgICBPbmx5IHVzZSB1cmJzIGluIHdyaXRlIHVyYiBwb29sIHRoYXQgd2VyZSBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkLgorICogICAgICBNb3ZlZCBzb21lIGNvbnN0YW50IG1hY3JvcyBvdXQgb2YgZnVuY3Rpb25zLgorICogICAgICBNaW5vciB3aGl0ZXNwYWNlIGFuZCBjb21tZW50IGNoYW5nZXMuCisgKgorICogKDEyL0p1bi8yMDAzKSBEYXZpZCBOb3J3b29kCisgKiAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIFVTQi1VSVJUIElSIHRyYW5jZWl2ZXIgdXNpbmcgOFUyMzJBTSBjaGlwLgorICogICAgICBTZWUgPGh0dHA6Ly9ob21lLmVhcnRobGluay5uZXQvfmpyaGVlcy9VU0JVSVJUL2luZGV4Lmh0bT4uICBPbmx5CisgKiAgICAgIG9wZXJhdGVzIHByb3Blcmx5IGF0IDMxMjUwMCwgc28gc2V0IGN1c3RvbSBkaXZpc29yIG1vZGUgb24gc3RhcnR1cC4KKyAqCisgKiAoMTIvSnVuLzIwMDMpIElhbiBBYmJvdHQKKyAqICAgICAgQWRkZWQgU2VhbGV2ZWwgU2VhTElOSysgMjEweCwgMjIweCwgMjQweCwgMjgweCB2aWQvcGlkcyBmcm9tIFR1YW4gSG9hbmcKKyAqICAgICAgLSBJJ3ZlIGVsaW1pbmF0ZWQgc29tZSB0aGF0IGRvbid0IHNlZW0gdG8gZXhpc3QhCisgKiAgICAgIEFkZGVkIEhvbWUgRWxlY3Ryb25pY3MgVGlyYS0xIElSIHRyYW5zY2VpdmVyIHBpZCBmcm9tIENocmlzIEhvcm4KKyAqICAgICAgU29tZSB3aGl0ZXNwYWNlL2NvZGluZy1zdHlsZSBjbGVhbnVwcworICoKKyAqICgxMS9KdW4vMjAwMykgSWFuIEFiYm90dAorICogICAgICBGaXhlZCB1bnNhZmUgc3BpbmxvY2sgdXNhZ2UgaW4gZnRkaV93cml0ZQorICoKKyAqICgyNC9GZWIvMjAwMykgUmljaGFyZCBTaG9vdGVyCisgKiAgICAgIEluY3JlYXNlIHJlYWQgYnVmZmVyIHNpemUgdG8gaW1wcm92ZSByZWFkIHNwZWVkcyBhdCBoaWdoZXIgYmF1ZCByYXRlcworICogICAgICAoc3BlY2lmaWNhbGx5IHRlc3RlZCB3aXRoIHVwIHRvIDFNYi9zZWMgYXQgMS41TSBiYXVkKQorICoKKyAqICgyMy9GZWIvMjAwMykgSm9obiBXaWxraW5zCisgKiAgICAgIEFkZGVkIFhvbi94b2ZmIGZsb3cgY29udHJvbCAoYWN0aXZhdGluZyBzdXBwb3J0IGluIHRoZSBmdGRpIGRldmljZSkKKyAqICAgICAgQWRkZWQgdmlkL3BpZCBmb3IgVmlkZW9uZXR3b3Jrcy9Ib21lY2hvaWNlIChVSyBJU1ApCisgKgorICogKDIzL0ZlYi8yMDAzKSBCaWxsIFJ5ZGVyCisgKiAgICAgIEFkZGVkIG1hdHJpeCBvcmIgZGV2aWNlIHZpZC9waWRzIGZyb20gV2F5bmUgV3lsdXBza2kKKyAqCisgKiAoMTkvRmViLzIwMDMpIElhbiBBYmJvdHQKKyAqICAgICAgRm9yIFRJT0NTU0VSSUFMLCBzZXQgYWx0X3NwZWVkIHRvIDAgd2hlbiBBU1lOQ19TUERfTUFTSyB2YWx1ZSBoYXMKKyAqICAgICAgY2hhbmdlZCB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBBU1lOQ19TUERfSEksIEFTWU5DX1NQRF9WSEksCisgKiAgICAgIEFTWU5DX1NQRF9TSEkgb3IgQVNZTkNfU1BEX1dBUlAuICBBbHNvLCB1bmxlc3MgQVNZTkNfU1BEX0NVU1QgaXMgaW4KKyAqICAgICAgZm9yY2UsIGRvbid0IGJvdGhlciBjaGFuZ2luZyBiYXVkIHJhdGUgd2hlbiBjdXN0b21fZGl2aXNvciBoYXMgY2hhbmdlZC4KKyAqCisgKiAoMTgvRmViLzIwMDMpIElhbiBBYmJvdHQKKyAqICAgICAgRml4ZWQgVElPQ01HRVQgaGFuZGxpbmcgdG8gaW5jbHVkZSBzdGF0ZSBvZiBEVFIgYW5kIFJUUywgdGhlIHN0YXRlCisgKiAgICAgIG9mIHdoaWNoIGFyZSBub3cgc2F2ZWQgYnkgc2V0X2R0cigpIGFuZCBzZXRfcnRzKCkuCisgKiAgICAgIEZpeGVkIGltcHJvcGVyIHN0b3JhZ2UgY2xhc3MgZm9yIGJ1ZiBpbiBzZXRfZHRyKCkgYW5kIHNldF9ydHMoKS4KKyAqICAgICAgQWRkZWQgRlQyMzJCTSBjaGlwIHR5cGUgYW5kIHN1cHBvcnQgZm9yIGl0cyBleHRyYSBiYXVkIHJhdGVzIChjb21wYXJlZAorICogICAgICB0byBGVDhVMjMyQU0pLgorICogICAgICBUb29rIGFjY291bnQgb2Ygc3BlY2lhbCBjYXNlIGRpdmlzb3IgdmFsdWVzIGZvciBoaWdoZXN0IGJhdWQgcmF0ZXMgb2YKKyAqICAgICAgRlQ4VTIzMkFNIGFuZCBGVDIzMkJNLgorICogICAgICBGb3IgVElPQ1NTRVJJQUwsIGZvcmNlZCBhbHRfc3BlZWQgdG8gMCB3aGVuIEFTWU5DX1NQRF9DVVNUIGtsdWRnZSB1c2VkLAorICogICAgICBhcyBwcmV2aW91cyBhbHRfc3BlZWQgc2V0dGluZyBpcyBub3cgc3RhbGUuCisgKiAgICAgIE1vdmVkIHN0YXJ0dXAgY29kZSBjb21tb24gYmV0d2VlbiB0aGUgc3RhcnR1cCByb3V0aW5lcyBmb3IgdGhlCisgKiAgICAgIGRpZmZlcmVudCBjaGlwIHR5cGVzIGludG8gYSBjb21tb24gc3Vicm91dGluZS4KKyAqCisgKiAoMTcvRmViLzIwMDMpIEJpbGwgUnlkZXIKKyAqICAgICAgQWRkZWQgd3JpdGUgdXJiIGJ1ZmZlciBwb29sIG9uIGEgcGVyIGRldmljZSBiYXNpcworICogICAgICBBZGRlZCBtb3JlIGNoZWNraW5nIGZvciBvcGVuIGZpbGUgb24gY2FsbGJhY2tzIChmaXhlZCBPT1BTKQorICogICAgICBBZGRlZCBDcnlzdGFsRm9udHogNjMyIGFuZCA2MzQgUElEcyAKKyAqICAgICAgICAgKHRoYW54IHRvIENyeXN0YWxGb250eiBmb3IgdGhlIHNhbXBsZSBkZXZpY2VzIC0gdGhleSBmbHVzaGVkIG91dAorICogICAgICAgICAgIHNvbWUgZHJpdmVyIGJ1Z3MpCisgKiAgICAgIE1pbm9yIGRlYnVnZ2luZyBtZXNzYWdlIGNoYW5nZXMKKyAqICAgICAgQWRkZWQgdGhyb3R0bGUsIHVudGhyb3R0bGUgYW5kIGNoYXJzX2luX2J1ZmZlciBmdW5jdGlvbnMKKyAqICAgICAgRml4ZWQgRlRESV9TSU8gKHRoZSBvcmlnaW5hbCBkZXZpY2UpIGJ1ZworICogICAgICBGaXhlZCBzb21lIHNodXRkb3duIGhhbmRsaW5nCisgKiAgICAgIAorICogCisgKiAKKyAqIAorICogKDA3L0p1bi8yMDAyKSBLdWJhIE9iZXIKKyAqCUNoYW5nZWQgRlRESV9TSU9fQkFTRV9CQVVEX1RPX0RJVklTT1IgbWFjcm8gaW50byBmdGRpX2JhdWRfdG9fZGl2aXNvcgorICoJZnVuY3Rpb24uIEl0IHdhcyBnZXR0aW5nIHRvbyBjb21wbGV4LgorICoJRml4IHRoZSBkaXZpc29yIGNhbGN1bGF0aW9uIGxvZ2ljIHdoaWNoIHdhcyBzZXR0aW5nIGRpdmlzb3Igb2YgMC4xMjUKKyAqCWluc3RlYWQgb2YgMC41IGZvciBmcmFjdGlvbmFsIHBhcnRzIG9mIGRpdmlzb3IgZXF1YWwgdG8gNS84LCA2LzgsIDcvOC4KKyAqCUFsc28gbWFrZSBpdCBidW1wIHVwIHRoZSBkaXZpc29yIHRvIG5leHQgaW50ZWdlciBpbiBjYXNlIG9mIDcvOCAtIGl0J3MKKyAqCWEgYmV0dGVyIGFwcHJveGltYXRpb24uCisgKgorICogKDI1L0p1bC8yMDAyKSBCaWxsIFJ5ZGVyIGluc2VydGVkIERtaXRyaSdzIFRJT0NNSVdBSVQgcGF0Y2gKKyAqICAgICAgTm90IHRlc3RlZCBieSBtZSBidXQgaXQgZG9lc24ndCBicmVhayBhbnl0aGluZyBJIHVzZS4KKyAqIAorICogKDA0L0phbi8yMDAyKSBLdWJhIE9iZXIKKyAqCUltcGxlbWVudGVkIDM4NDAwIGJhdWRyYXRlIGtsdWRnZSwgd2hlcmUgaXQgY2FuIGJlIHN1YnN0aXR1dGVkIHdpdGggb3RoZXIKKyAqCSAgdmFsdWVzLiBUaGF0J3MgdGhlIG9ubHkgd2F5IHRvIHNldCBjdXN0b20gYmF1ZHJhdGVzLgorICoJSW1wbGVtZW50ZWQgVElPQ1NTRVJJQUwsIFRJT0NHU0VSSUFMIGlvY3RsJ3Mgc28gdGhhdCBzZXRzZXJpYWwgaXMgaGFwcHkuCisgKglGSVhNRTogYm90aCBiYXVkcmF0ZSB0aGluZ3Mgc2hvdWxkIGV2ZW50dWFsbHkgZ28gdG8gdXNic2VyaWFsLmMgYXMgb3RoZXIKKyAqCSAgZGV2aWNlcyBtYXkgbmVlZCB0aGF0IGZ1bmN0aW9uYWxpdHkgdG9vLiBBY3R1YWxseSwgaXQgY2FuIHByb2JhYmx5IGJlCisgKgkgIG1lcmdlZCBpbiBzZXJpYWwuYyBzb21laG93IC0gdG9vIG1hbnkgZHJpdmVycyByZXBlYXQgdGhpcyBjb2RlIG92ZXIKKyAqCSAgYW5kIG92ZXIuCisgKglGaXhlZCBiYXVkcmF0ZSBmb3JnZXRmdWxuZXNzIC0gb3BlbigpIHVzZWQgdG8gcmVzZXQgYmF1ZHJhdGUgdG8gOTYwMCBldmVyeSB0aW1lLgorICoJRGl2aXNvcnMgZm9yIGJhdWRyYXRlcyBhcmUgY2FsY3VsYXRlZCBieSBhIG1hY3JvLgorICoJU21hbGwgY29kZSBjbGVhbnVwcy4gVWdseSB3aGl0ZXNwYWNlIGNoYW5nZXMgZm9yIFBsYXRvJ3Mgc2FrZSBvbmx5IDstXS4KKyAqCisgKiAoMDQvTm92LzIwMDEpIEJpbGwgUnlkZXIKKyAqCUZpeGVkIGJ1ZyBpbiByZWFkX2J1bGtfY2FsbGJhY2sgd2hlcmUgaW5jb3JyZWN0IHVyYiBidWZmZXIgd2FzIHVzZWQuCisgKglDbGVhbmVkIHVwIHdyaXRlIG9mZnNldCBjYWxjdWxhdGlvbgorICoJQWRkZWQgd3JpdGVfcm9vbSBzaW5jZSBkZWZhdWx0IHZhbHVlcyBjYW4gYmUgaW5jb3JyZWN0IGZvciBzaW8KKyAqCUNoYW5nZWQgd3JpdGVfYnVsa19jYWxsYmFjayB0byB1c2Ugc2FtZSBxdWV1ZV90YXNrIGFzIG90aGVyIGRyaXZlcnMKKyAqICAgICAgICAodGhlIHByZXZpb3VzIHZlcnNpb24gY2F1c2VkIHBhbmljcykKKyAqCVJlbW92ZWQgcG9ydCBpdGVyYXRpb24gY29kZSBzaW5jZSB0aGUgZGV2aWNlIG9ubHkgaGFzIG9uZSBJL08gcG9ydCBhbmQgaXQKKyAqCSAgd2FzIHdyb25nIGFueXdheS4KKyAqIAorICogKDMxL01heS8yMDAxKSBna2gKKyAqCVN3aXRjaGVkIGZyb20gdXNpbmcgc3BpbmxvY2sgdG8gYSBzZW1hcGhvcmUsIHdoaWNoIGZpeGVzIGxvdHMgb2YgcHJvYmxlbXMuCisgKgorICogKDIzL01heS8yMDAxKSAgIEJpbGwgUnlkZXIKKyAqCUFkZGVkIHJ1bnRpbWUgZGVidWcgcGF0Y2ggKHRoYW54IFR5c29uIEQgU2F3eWVyKS4KKyAqCUNsZWFuZWQgdXAgY29tbWVudHMgZm9yIDhVMjMyCisgKglBZGRlZCBwYXJpdHksIGZyYW1pbmcgYW5kIG92ZXJydW4gZXJyb3IgaGFuZGxpbmcKKyAqCUFkZGVkIHJlY2VpdmUgYnJlYWsgaGFuZGxpbmcuCisgKiAKKyAqICgwNC8wOC8yMDAxKSBnYgorICoJSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZC4KKyAqICAgICAgIAorICogKDE4L01hcmNoLzIwMDEpIEJpbGwgUnlkZXIKKyAqCShOb3QgcmVsZWFzZWQpCisgKglBZGRlZCBzZW5kIGJyZWFrIGhhbmRsaW5nLiAocmVxdWlyZXMga2VybmVsIHBhdGNoIHRvbykKKyAqCUZpeGVkIDhVMjMyQU0gaGFyZHdhcmUgUlRTL0NUUyBldGMgc3RhdHVzIHJlcG9ydGluZy4KKyAqCUFkZGVkIGZsaXBidWYgZml4IGNvcGllZCBmcm9tIGdlbmVyaWMgZGV2aWNlCisgKiAKKyAqICgxMi8zLzIwMDApIEJpbGwgUnlkZXIKKyAqCUFkZGVkIHN1cHBvcnQgZm9yIDhVMjMyQU0gZGV2aWNlLgorICoJTW92ZWQgUElEIGFuZCBWSURzIGludG8gaGVhZGVyIGZpbGUgb25seS4KKyAqCVR1cm5lZCBvbiBsb3ctbGF0ZW5jeSBmb3IgdGhlIHR0eSAoZGV2aWNlIHdpbGwgZG8gaGlnaCBiYXVkcmF0ZXMpCisgKglBZGRlZCBzaHV0ZG93biByb3V0aW5lIHRvIGNsb3NlIGZpbGVzIHdoZW4gZGV2aWNlIHJlbW92ZWQuCisgKglNb3JlIGRlYnVnIGFuZCBlcnJvciBtZXNzYWdlIGNsZWFudXBzLgorICoKKyAqICgxMS8xMy8yMDAwKSBCaWxsIFJ5ZGVyCisgKglBZGRlZCBzcGlubG9jayBwcm90ZWN0ZWQgb3BlbiBjb2RlIGFuZCBjbG9zZSBjb2RlLgorICoJTXVsdGlwbGUgb3BlbnMgd29yayAoc29ydCBvZiAtIHNlZSB3ZWJwYWdlIG1lbnRpb25lZCBhYm92ZSkuCisgKglDbGVhbmVkIHVwIGNvbW1lbnRzLiBSZW1vdmVkIG11bHRpcGxlIFBJRC9WSUQgZGVmaW5pdGlvbnMuCisgKglGYWN0b3Jpc2VkIGN0cy9kdHIgY29kZQorICoJTWFkZSB1c2Ugb2YgX19GVU5DVElPTl9fIGluIGRiZydzCisgKiAgICAgIAorICogKDExLzAxLzIwMDApIEFkYW0gSi4gUmljaHRlcgorICoJdXNiX2RldmljZV9pZCB0YWJsZSBzdXBwb3J0CisgKiAKKyAqICgxMC8wNS8yMDAwKSBna2gKKyAqCUZpeGVkIGJ1ZyB3aXRoIHVyYi0+ZGV2IG5vdCBiZWluZyBzZXQgcHJvcGVybHksIG5vdyB0aGF0IHRoZSB1c2IKKyAqCWNvcmUgbmVlZHMgaXQuCisgKiAKKyAqICgwOS8xMS8yMDAwKSBna2gKKyAqCVJlbW92ZWQgREVCVUcgI2lmZGVmcyB3aXRoIGNhbGwgdG8gdXNiX3NlcmlhbF9kZWJ1Z19kYXRhCisgKgorICogKDA3LzE5LzIwMDApIGdraAorICoJQWRkZWQgbW9kdWxlX2luaXQgYW5kIG1vZHVsZV9leGl0IGZ1bmN0aW9ucyB0byBoYW5kbGUgdGhlIGZhY3QgdGhhdCB0aGlzCisgKglkcml2ZXIgaXMgYSBsb2FkYWJsZSBtb2R1bGUgbm93LgorICoKKyAqICgwNC8wNC8yMDAwKSBCaWxsIFJ5ZGVyIAorICoJRml4ZWQgYnVncyBpbiBUQ0dFVC9UQ1NFVCBpb2N0bHMgKGJ5IHJlbW92aW5nIHRoZW0gLSB0aGV5IGFyZQorICogICAgICAgIGhhbmRsZWQgZWxzZXdoZXJlIGluIHRoZSB0dHkgaW8gZHJpdmVyIGNoYWluKS4KKyAqCisgKiAoMDMvMzAvMjAwMCkgQmlsbCBSeWRlciAKKyAqCUltcGxlbWVudGVkIGxvdHMgb2YgaW9jdGxzCisgKglGaXhlZCBhIHJhY2UgY29uZGl0aW9uIGluIHdyaXRlCisgKglDaGFuZ2VkIHNvbWUgZGJnJ3MgdG8gZXJycworICoKKyAqICgwMy8yNi8yMDAwKSBna2gKKyAqCVNwbGl0IGRyaXZlciB1cCBpbnRvIGRldmljZSBzcGVjaWZpYyBwaWVjZXMuCisgKgorICovCisKKy8qIEJpbGwgUnlkZXIgLSBicnlkZXJAc2dpLmNvbSAtIHdyb3RlIHRoZSBGVERJX1NJTyBpbXBsZW1lbnRhdGlvbiAqLworLyogVGhhbnggdG8gRlRESSBmb3Igc28ga2luZGx5IHByb3ZpZGluZyBkZXRhaWxzIG9mIHRoZSBwcm90b2NvbCByZXF1aXJlZCAqLworLyogICB0byB0YWxrIHRvIHRoZSBkZXZpY2UgKi8KKy8qIFRoYW54IHRvIGdraCBhbmQgdGhlIHJlc3Qgb2YgdGhlIHVzYiBkZXYgZ3JvdXAgZm9yIGFsbCBjb2RlIEkgaGF2ZSBhc3NpbWlsYXRlZCA6LSkgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorI2luY2x1ZGUgImZ0ZGlfc2lvLmgiCisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjQuMSIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4sIEJpbGwgUnlkZXIgPGJyeWRlckBzZ2kuY29tPiwgS3ViYSBPYmVyIDxrdWJhQG1hcmVpbWJyaXVtLm9yZz4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgRlRESSBTZXJpYWwgQ29udmVydGVycyBEcml2ZXIiCisKK3N0YXRpYyBpbnQgZGVidWc7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9zaW8gW10gPSB7CisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1NJT19QSUQpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKy8qCisgKiBUaGUgOFUyMzJBTSBoYXMgdGhlIHNhbWUgQVBJIGFzIHRoZSBzaW8gZXhjZXB0IGZvcjoKKyAqIC0gaXQgY2FuIHN1cHBvcnQgTVVDSCBoaWdoZXIgYmF1ZHJhdGVzOyB1cCB0bzoKKyAqICAgbyA5MjE2MDAgZm9yIFJTMjMyIGFuZCAyMDAwMDAwIGZvciBSUzQyMi80ODUgYXQgNDhNSHoKKyAqICAgbyAyMzA0MDAgYXQgMTJNSHoKKyAqICAgc28gLi4gOFUyMzJBTSdzIGJhdWRyYXRlIHNldHRpbmcgY29kZXMgYXJlIGRpZmZlcmVudAorICogLSBpdCBoYXMgYSB0d28gYnl0ZSBzdGF0dXMgY29kZS4KKyAqIC0gaXQgcmV0dXJucyBjaGFyYWN0ZXJzIGV2ZXJ5IDE2bXMgKHRoZSBGVERJIGRvZXMgaXQgZXZlcnkgNDBtcykKKyAqCisgKiB0aGUgYmNkRGV2aWNlIHZhbHVlIGlzIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSBGVDIzMkJNIGFuZCBGVDI0NUJNIGZyb20KKyAqIHRoZSBlYXJsaWVyIEZUOFUyMzJBTSBhbmQgRlQ4VTIzMkJNLiAgRm9yIG5vdywgaW5jbHVkZSBhbGwga25vd24gVklEL1BJRAorICogY29tYmluYXRpb25zIGluIGJvdGggdGFibGVzLgorICogRklYTUU6IHBlcmhhcHMgYmNkRGV2aWNlIGNhbiBhbHNvIGlkZW50aWZ5IDEyTUh6IGRldmljZXMsIGJ1dCBJIGRvbid0IGtub3cKKyAqIGlmIHRob3NlIGV2ZXIgd2VudCBpbnRvIG1hc3MgcHJvZHVjdGlvbi4gW0lhbiBBYmJvdHRdCisgKi8KKworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfOFUyMzJBTSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0lSVFJBTlNfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJXzhVMjMyQU1fUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJXzhVMjMyQU1fQUxUX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV84VTIzMkFNX0FMVF9BTFRfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1JFTEFJU19QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRShJTlRFUkJJT01FVFJJQ1NfVklELCBJTlRFUkJJT01FVFJJQ1NfSU9CT0FSRF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElOVEVSQklPTUVUUklDU19WSUQsIElOVEVSQklPTUVUUklDU19NSU5JX0lPQk9BUkRfUElEKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9ORl9SSUNfVklELCBGVERJX05GX1JJQ19QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfWEZfNjMyX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9YRl82MzRfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1hGXzU0N19QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfWEZfNjMzX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9YRl82MzFfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1hGXzYzNV9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfWEZfNjQwX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9YRl82NDJfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1ZOSENQQ1VTQl9EX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9EU1MyMF9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMTAxX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIxMDJfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjEwM19QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMTA0X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIyMDFfMV9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMjAxXzJfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjIwMl8xX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIyMDJfMl9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMjAzXzFfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjIwM18yX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDFfMV9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAxXzJfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMV8zX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDFfNF9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAyXzFfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMl8yX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDJfM19QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAyXzRfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwM18xX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDNfMl9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAzXzNfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwM180X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfMV9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzJfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV8zX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfNF9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzVfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV82X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfN19QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzhfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl8xX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfMl9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzNfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl80X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfNV9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzZfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl83X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfOF9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzFfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM18yX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfM19QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzRfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM181X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfNl9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzdfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM184X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihJRFRFQ0hfVklELCBJRFRFQ0hfSURUMTIyMVVfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKE9DVF9WSUQsIE9DVF9VUzEwMV9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIFBST1RFR09fU1BFQ0lBTF8xLCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBQUk9URUdPX1IyWDAsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIFBST1RFR09fU1BFQ0lBTF8zLCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBQUk9URUdPX1NQRUNJQUxfNCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9FTFZfVU8xMDBfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBJTlNJREVfQUNDRVNTTywgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihJTlRSRVBJRF9WSUQsIElOVFJFUElEX1ZBTFVFQ0FOX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihJTlRSRVBJRF9WSUQsIElOVFJFUElEX05FT1ZJX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGQUxDT01fVklELCBGQUxDT01fVFdJU1RfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1NVVU5UT19TUE9SVFNfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfUk1fVklELCBGVERJX1JNQ0FOVklFV19QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoQkFOREJfVklELCBCQU5EQl9VU09UTDRfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEJBTkRCX1ZJRCwgQkFOREJfVVNUTDRfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEJBTkRCX1ZJRCwgQkFOREJfVVNPOU1MMl9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEVWRVJfRUNPX1BST19DRFMsIDAsIDB4M2ZmKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9GVDIzMkJNIFtdID0geworCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfSVJUUkFOU19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV84VTIzMkFNX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJXzhVMjMyQU1fQUxUX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJXzhVMjMyQU1fQUxUX0FMVF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9SRUxBSVNfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9ORl9SSUNfVklELCBGVERJX05GX1JJQ19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9YRl82MzJfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfWEZfNjM0X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1hGXzU0N19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9YRl82MzNfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfWEZfNjMxX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1hGXzYzNV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9YRl82NDBfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfWEZfNjQyX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1ZOSENQQ1VTQl9EX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0RTUzIwX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX01UWE9SQl8wX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX01UWE9SQl8xX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX01UWE9SQl8yX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX01UWE9SQl8zX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX01UWE9SQl80X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX01UWE9SQl81X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX01UWE9SQl82X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1BFUkxFX1VMVFJBUE9SVF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9QSUVHUk9VUF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIxMDFfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMTAyX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjEwM19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIxMDRfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMjAxXzFfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMjAxXzJfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMjAyXzFfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMjAyXzJfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMjAzXzFfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMjAzXzJfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAxXzFfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAxXzJfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAxXzNfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAxXzRfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAyXzFfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAyXzJfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAyXzNfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAyXzRfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAzXzFfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAzXzJfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAzXzNfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAzXzRfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzFfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzJfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzNfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzRfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzVfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzZfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzdfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzhfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzFfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzJfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzNfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzRfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzVfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzZfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzdfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzhfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzFfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzJfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzNfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzRfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzVfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzZfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzdfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzhfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoSURURUNIX1ZJRCwgSURURUNIX0lEVDEyMjFVX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKE9DVF9WSUQsIE9DVF9VUzEwMV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgUFJPVEVHT19TUEVDSUFMXzEsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgUFJPVEVHT19SMlgwLCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIFBST1RFR09fU1BFQ0lBTF8zLCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIFBST1RFR09fU1BFQ0lBTF80LCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfR1VERUFEU19FODA4X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0dVREVBRFNfRTgwOV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9HVURFQURTX0U4MEFfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfR1VERUFEU19FODBCX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0dVREVBRFNfRTgwQ19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9HVURFQURTX0U4MERfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfR1VERUFEU19FODBFX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0dVREVBRFNfRTgwRl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9HVURFQURTX0U4ODhfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfR1VERUFEU19FODg5X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0dVREVBRFNfRTg4QV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9HVURFQURTX0U4OEJfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfR1VERUFEU19FODhDX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0dVREVBRFNfRTg4RF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9HVURFQURTX0U4OEVfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfR1VERUFEU19FODhGX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0VMVl9VTzEwMF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisgCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIExJTlhfU0RNVVNCUVNTX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKyAJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgTElOWF9NQVNURVJERVZFTDJfUElELCAweDQwMCwgMHhmZmZmKSB9LAorIAl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBMSU5YX0ZVVFVSRV8wX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKyAJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgTElOWF9GVVRVUkVfMV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisgCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIExJTlhfRlVUVVJFXzJfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9DQ1NJQ0RVMjBfMF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0NDU0lDRFU0MF8xX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBJTlNJREVfQUNDRVNTTywgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKElOVFJFUElEX1ZJRCwgSU5UUkVQSURfVkFMVUVDQU5fUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoSU5UUkVQSURfVklELCBJTlRSRVBJRF9ORU9WSV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGQUxDT01fVklELCBGQUxDT01fVFdJU1RfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfU1VVTlRPX1NQT1JUU19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1JNX1ZJRCwgRlRESV9STUNBTlZJRVdfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoQkFOREJfVklELCBCQU5EQl9VU09UTDRfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoQkFOREJfVklELCBCQU5EQl9VU1RMNF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihCQU5EQl9WSUQsIEJBTkRCX1VTTzlNTDJfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEVWRVJfRUNPX1BST19DRFMsIDB4NDAwLCAweGZmZmYpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX1VTQl9VSVJUIFtdID0geworCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9VU0JfVUlSVF9QSUQpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX0hFX1RJUkExIFtdID0geworCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfSEVfVElSQTFfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9GVDIyMzJDW10gPSB7CisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJXzhVMjIzMkNfUElEKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jb21iaW5lZCBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfSVJUUkFOU19QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1NJT19QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJXzhVMjMyQU1fUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV84VTIzMkFNX0FMVF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJXzhVMjMyQU1fQUxUX0FMVF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJXzhVMjIzMkNfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9SRUxBSVNfUElEKSB9LAorCXsgVVNCX0RFVklDRShJTlRFUkJJT01FVFJJQ1NfVklELCBJTlRFUkJJT01FVFJJQ1NfSU9CT0FSRF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElOVEVSQklPTUVUUklDU19WSUQsIElOVEVSQklPTUVUUklDU19NSU5JX0lPQk9BUkRfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9YRl82MzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9YRl82MzRfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9YRl81NDdfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9YRl82MzNfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9YRl82MzFfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9YRl82MzVfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9YRl82NDBfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9YRl82NDJfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9EU1MyMF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfTkZfUklDX1ZJRCwgRlRESV9ORl9SSUNfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9WTkhDUENVU0JfRF9QSUQpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9NVFhPUkJfMF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9NVFhPUkJfMV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9NVFhPUkJfMl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9NVFhPUkJfM19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9NVFhPUkJfNF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9NVFhPUkJfNV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9NVFhPUkJfNl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9QRVJMRV9VTFRSQVBPUlRfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9QSUVHUk9VUF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjEwMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjEwMl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjEwM19QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjEwNF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjIwMV8xX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMjAxXzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIyMDJfMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjIwMl8yX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMjAzXzFfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIyMDNfMl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMV8xX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAxXzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDFfM19QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMV80X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAyXzFfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDJfMl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMl8zX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAyXzRfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDNfMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwM18yX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAzXzNfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDNfNF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV8xX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfM19QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV80X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzVfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfNl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV83X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzhfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl8yX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzNfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfNF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl81X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzZfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfN19QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl84X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzFfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfMl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM18zX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzRfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfNV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM182X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzdfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfOF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElEVEVDSF9WSUQsIElEVEVDSF9JRFQxMjIxVV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE9DVF9WSUQsIE9DVF9VUzEwMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9IRV9USVJBMV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1VTQl9VSVJUX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIFBST1RFR09fU1BFQ0lBTF8xKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgUFJPVEVHT19SMlgwKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgUFJPVEVHT19TUEVDSUFMXzMpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBQUk9URUdPX1NQRUNJQUxfNCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUxWX1VPMTAwX1BJRCkgfSwKKyAJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgTElOWF9TRE1VU0JRU1NfUElELCAweDQwMCwgMHhmZmZmKSB9LAorIAl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBMSU5YX01BU1RFUkRFVkVMMl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisgCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIExJTlhfRlVUVVJFXzBfUElELCAweDQwMCwgMHhmZmZmKSB9LAorIAl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBMSU5YX0ZVVFVSRV8xX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKyAJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgTElOWF9GVVRVUkVfMl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisgCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9DQ1NJQ0RVMjBfMF9QSUQpIH0sCisgCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9DQ1NJQ0RVNDBfMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBJTlNJREVfQUNDRVNTTykgfSwKKwl7IFVTQl9ERVZJQ0UoSU5UUkVQSURfVklELCBJTlRSRVBJRF9WQUxVRUNBTl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElOVFJFUElEX1ZJRCwgSU5UUkVQSURfTkVPVklfUElEKSB9LAorCXsgVVNCX0RFVklDRShGQUxDT01fVklELCBGQUxDT01fVFdJU1RfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9TVVVOVE9fU1BPUlRTX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9STV9WSUQsIEZURElfUk1DQU5WSUVXX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoQkFOREJfVklELCBCQU5EQl9VU09UTDRfUElEKSB9LAorCXsgVVNCX0RFVklDRShCQU5EQl9WSUQsIEJBTkRCX1VTVEw0X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoQkFOREJfVklELCBCQU5EQl9VU085TUwyX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEVWRVJfRUNPX1BST19DRFMpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGVfY29tYmluZWQpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZnRkaV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJImZ0ZGlfc2lvIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlX2NvbWJpbmVkLAorfTsKKworc3RhdGljIGNoYXIgKmZ0ZGlfY2hpcF9uYW1lW10gPSB7CisJW1NJT10gPSAiU0lPIiwJLyogdGhlIHNlcmlhbCBwYXJ0IG9mIEZUOFUxMDBBWCAqLworCVtGVDhVMjMyQU1dID0gIkZUOFUyMzJBTSIsCisJW0ZUMjMyQk1dID0gIkZUMjMyQk0iLAorCVtGVDIyMzJDXSA9ICJGVDIyMzJDIiwKK307CisKKworLyogQ29uc3RhbnRzIGZvciByZWFkIHVyYiBhbmQgd3JpdGUgdXJiICovCisjZGVmaW5lIEJVRlNaIDUxMgorI2RlZmluZSBQS1RTWiA2NAorCisvKiByeF9mbGFncyAqLworI2RlZmluZSBUSFJPVFRMRUQJCTB4MDEKKyNkZWZpbmUgQUNUVUFMTFlfVEhST1RUTEVECTB4MDIKKworc3RydWN0IGZ0ZGlfcHJpdmF0ZSB7CisJZnRkaV9jaGlwX3R5cGVfdCBjaGlwX3R5cGU7CisJCQkJLyogdHlwZSBvZiB0aGUgZGV2aWNlLCBlaXRoZXIgU0lPIG9yIEZUOFUyMzJBTSAqLworCWludCBiYXVkX2Jhc2U7CQkvKiBiYXVkIGJhc2UgY2xvY2sgZm9yIGRpdmlzb3Igc2V0dGluZyAqLworCWludCBjdXN0b21fZGl2aXNvcjsJLyogY3VzdG9tX2Rpdmlzb3Iga2x1ZGdlLCB0aGlzIGlzIGZvciBiYXVkX2Jhc2UgKGRpZmZlcmVudCBmcm9tIHdoYXQgZ29lcyB0byB0aGUgY2hpcCEpICovCisJX191MTYgbGFzdF9zZXRfZGF0YV91cmJfdmFsdWUgOworCQkJCS8qIHRoZSBsYXN0IGRhdGEgc3RhdGUgc2V0IC0gbmVlZGVkIGZvciBkb2luZyBhIGJyZWFrICovCisgICAgICAgIGludCB3cml0ZV9vZmZzZXQ7ICAgICAgIC8qIFRoaXMgaXMgdGhlIG9mZnNldCBpbiB0aGUgdXNiIGRhdGEgYmxvY2sgdG8gd3JpdGUgdGhlIHNlcmlhbCBkYXRhIC0gCisJCQkJICogaXQgaXMgZGlmZmVyZW50IGJldHdlZW4gZGV2aWNlcworCQkJCSAqLworCWludCBmbGFnczsJCS8qIHNvbWUgQVNZTkNfeHh4eCBmbGFncyBhcmUgc3VwcG9ydGVkICovCisJdW5zaWduZWQgbG9uZyBsYXN0X2R0cl9ydHM7CS8qIHNhdmVkIG1vZGVtIGNvbnRyb2wgb3V0cHV0cyAqLworICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCBkZWx0YV9tc3Jfd2FpdDsgLyogVXNlZCBmb3IgVElPQ01JV0FJVCAqLworIAljaGFyIHByZXZfc3RhdHVzLCBkaWZmX3N0YXR1czsgICAgICAgIC8qIFVzZWQgZm9yIFRJT0NNSVdBSVQgKi8KKwlfX3U4IHJ4X2ZsYWdzOwkJLyogcmVjZWl2ZSBzdGF0ZSBmbGFncyAodGhyb3R0bGluZykgKi8KKwlzcGlubG9ja190IHJ4X2xvY2s7CS8qIHNwaW5sb2NrIGZvciByZWNlaXZlIHN0YXRlICovCisKKwlfX3UxNiBpbnRlcmZhY2U7CS8qIEZUMjIzMkMgcG9ydCBpbnRlcmZhY2UgKDAgZm9yIEZUMjMyLzI0NSkgKi8KKworCWludCBmb3JjZV9iYXVkOwkJLyogaWYgbm9uLXplcm8sIGZvcmNlIHRoZSBiYXVkIHJhdGUgdG8gdGhpcyB2YWx1ZSAqLworCWludCBmb3JjZV9ydHNjdHM7CS8qIGlmIG5vbi16ZXJvLCBmb3JjZSBSVFMtQ1RTIHRvIGFsd2F5cyBiZSBlbmFibGVkICovCit9OworCisvKiBVc2VkIGZvciBUSU9DTUlXQUlUICovCisjZGVmaW5lIEZURElfU1RBVFVTX0IwX01BU0sJKEZURElfUlMwX0NUUyB8IEZURElfUlMwX0RTUiB8IEZURElfUlMwX1JJIHwgRlRESV9SUzBfUkxTRCkKKyNkZWZpbmUgRlRESV9TVEFUVVNfQjFfTUFTSwkoRlRESV9SU19CSSkKKy8qIEVuZCBUSU9DTUlXQUlUICovCisKKyNkZWZpbmUgRlRESV9JTVBMX0FTWU5DX0ZMQUdTID0gKCBBU1lOQ19TUERfSEkgfCBBU1lOQ19TUERfVkhJIFwKKyBBU1lOQ19TUERfQ1VTVCB8IEFTWU5DX1NQRF9TSEkgfCBBU1lOQ19TUERfV0FSUCApCisKKy8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGEgRlRESSBzZXJpYWwgY29udmVydGVyICovCitzdGF0aWMgaW50ICBmdGRpX1NJT19zdGFydHVwCQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50ICBmdGRpXzhVMjMyQU1fc3RhcnR1cAkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50ICBmdGRpX0ZUMjMyQk1fc3RhcnR1cAkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50ICBmdGRpX0ZUMjIzMkNfc3RhcnR1cAkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50ICBmdGRpX1VTQl9VSVJUX3N0YXJ0dXAJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgZnRkaV9IRV9USVJBMV9zdGFydHVwCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIGZ0ZGlfc2h1dGRvd24JCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIGZ0ZGlfb3BlbgkJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCBmdGRpX2Nsb3NlCQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIGZ0ZGlfd3JpdGUJCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOworc3RhdGljIGludCAgZnRkaV93cml0ZV9yb29tCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50ICBmdGRpX2NoYXJzX2luX2J1ZmZlcgkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBmdGRpX3dyaXRlX2J1bGtfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgZnRkaV9wcm9jZXNzX3JlYWQJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIGZ0ZGlfc2V0X3Rlcm1pb3MJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqIG9sZCk7CitzdGF0aWMgaW50ICBmdGRpX3Rpb2NtZ2V0ICAgICAgICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgIGZ0ZGlfdGlvY21zZXQJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CitzdGF0aWMgaW50ICBmdGRpX2lvY3RsCQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIHZvaWQgZnRkaV9icmVha19jdGwJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUgKTsKK3N0YXRpYyB2b2lkIGZ0ZGlfdGhyb3R0bGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIGZ0ZGlfdW50aHJvdHRsZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgaW50IGZ0ZGlfMjMyYW1fYmF1ZF9iYXNlX3RvX2Rpdmlzb3IgKGludCBiYXVkLCBpbnQgYmFzZSk7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgaW50IGZ0ZGlfMjMyYW1fYmF1ZF90b19kaXZpc29yIChpbnQgYmF1ZCk7CitzdGF0aWMgX191MzIgZnRkaV8yMzJibV9iYXVkX2Jhc2VfdG9fZGl2aXNvciAoaW50IGJhdWQsIGludCBiYXNlKTsKK3N0YXRpYyBfX3UzMiBmdGRpXzIzMmJtX2JhdWRfdG9fZGl2aXNvciAoaW50IGJhdWQpOworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZnRkaV9TSU9fZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIkZUREkgU0lPIiwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGVfc2lvLAorCS5udW1faW50ZXJydXB0X2luID0JMCwKKwkubnVtX2J1bGtfaW4gPQkJMSwKKwkubnVtX2J1bGtfb3V0ID0JCTEsCisJLm51bV9wb3J0cyA9CQkxLAorCS5vcGVuID0JCQlmdGRpX29wZW4sCisJLmNsb3NlID0JCWZ0ZGlfY2xvc2UsCisJLnRocm90dGxlID0JCWZ0ZGlfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUgPQkJZnRkaV91bnRocm90dGxlLAorCS53cml0ZSA9CQlmdGRpX3dyaXRlLAorCS53cml0ZV9yb29tID0JCWZ0ZGlfd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyID0JZnRkaV9jaGFyc19pbl9idWZmZXIsCisJLnJlYWRfYnVsa19jYWxsYmFjayA9CWZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0JZnRkaV93cml0ZV9idWxrX2NhbGxiYWNrLAorCS50aW9jbWdldCA9ICAgICAgICAgICAgIGZ0ZGlfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0gICAgICAgICAgICAgZnRkaV90aW9jbXNldCwKKwkuaW9jdGwgPQkJZnRkaV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkJZnRkaV9zZXRfdGVybWlvcywKKwkuYnJlYWtfY3RsID0JCWZ0ZGlfYnJlYWtfY3RsLAorCS5hdHRhY2ggPQkJZnRkaV9TSU9fc3RhcnR1cCwKKwkuc2h1dGRvd24gPQkJZnRkaV9zaHV0ZG93biwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBmdGRpXzhVMjMyQU1fZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIkZUREkgOFUyMzJBTSBDb21wYXRpYmxlIiwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGVfOFUyMzJBTSwKKwkubnVtX2ludGVycnVwdF9pbiA9CTAsCisJLm51bV9idWxrX2luID0JCTEsCisJLm51bV9idWxrX291dCA9CQkxLAorCS5udW1fcG9ydHMgPQkJMSwKKwkub3BlbiA9CQkJZnRkaV9vcGVuLAorCS5jbG9zZSA9CQlmdGRpX2Nsb3NlLAorCS50aHJvdHRsZSA9CQlmdGRpX3Rocm90dGxlLAorCS51bnRocm90dGxlID0JCWZ0ZGlfdW50aHJvdHRsZSwKKwkud3JpdGUgPQkJZnRkaV93cml0ZSwKKwkud3JpdGVfcm9vbSA9CQlmdGRpX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlciA9CWZ0ZGlfY2hhcnNfaW5fYnVmZmVyLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQlmdGRpX3JlYWRfYnVsa19jYWxsYmFjaywKKwkud3JpdGVfYnVsa19jYWxsYmFjayA9CWZ0ZGlfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkudGlvY21nZXQgPSAgICAgICAgICAgICBmdGRpX3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9ICAgICAgICAgICAgIGZ0ZGlfdGlvY21zZXQsCisJLmlvY3RsID0JCWZ0ZGlfaW9jdGwsCisJLnNldF90ZXJtaW9zID0JCWZ0ZGlfc2V0X3Rlcm1pb3MsCisJLmJyZWFrX2N0bCA9CQlmdGRpX2JyZWFrX2N0bCwKKwkuYXR0YWNoID0JCWZ0ZGlfOFUyMzJBTV9zdGFydHVwLAorCS5zaHV0ZG93biA9CQlmdGRpX3NodXRkb3duLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGZ0ZGlfRlQyMzJCTV9kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiRlRESSBGVDIzMkJNIENvbXBhdGlibGUiLAorCS5pZF90YWJsZSA9CQlpZF90YWJsZV9GVDIzMkJNLAorCS5udW1faW50ZXJydXB0X2luID0JMCwKKwkubnVtX2J1bGtfaW4gPQkJMSwKKwkubnVtX2J1bGtfb3V0ID0JCTEsCisJLm51bV9wb3J0cyA9CQkxLAorCS5vcGVuID0JCQlmdGRpX29wZW4sCisJLmNsb3NlID0JCWZ0ZGlfY2xvc2UsCisJLnRocm90dGxlID0JCWZ0ZGlfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUgPQkJZnRkaV91bnRocm90dGxlLAorCS53cml0ZSA9CQlmdGRpX3dyaXRlLAorCS53cml0ZV9yb29tID0JCWZ0ZGlfd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyID0JZnRkaV9jaGFyc19pbl9idWZmZXIsCisJLnJlYWRfYnVsa19jYWxsYmFjayA9CWZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0JZnRkaV93cml0ZV9idWxrX2NhbGxiYWNrLAorCS50aW9jbWdldCA9ICAgICAgICAgICAgIGZ0ZGlfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0gICAgICAgICAgICAgZnRkaV90aW9jbXNldCwKKwkuaW9jdGwgPQkJZnRkaV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkJZnRkaV9zZXRfdGVybWlvcywKKwkuYnJlYWtfY3RsID0JCWZ0ZGlfYnJlYWtfY3RsLAorCS5hdHRhY2ggPQkJZnRkaV9GVDIzMkJNX3N0YXJ0dXAsCisJLnNodXRkb3duID0JCWZ0ZGlfc2h1dGRvd24sCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZnRkaV9GVDIyMzJDX2RldmljZSA9IHsKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCSJGVERJIEZUMjIzMkMgQ29tcGF0aWJsZSIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlX0ZUMjIzMkMsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQkwLAorCS5udW1fYnVsa19pbiA9CQkxLAorCS5udW1fYnVsa19vdXQgPQkJMSwKKwkubnVtX3BvcnRzID0JCTEsCisJLm9wZW4gPQkJCWZ0ZGlfb3BlbiwKKwkuY2xvc2UgPQkJZnRkaV9jbG9zZSwKKwkudGhyb3R0bGUgPQkJZnRkaV90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQlmdGRpX3VudGhyb3R0bGUsCisJLndyaXRlID0JCWZ0ZGlfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJZnRkaV93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIgPQlmdGRpX2NoYXJzX2luX2J1ZmZlciwKKwkucmVhZF9idWxrX2NhbGxiYWNrID0JZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2ssCisJLndyaXRlX2J1bGtfY2FsbGJhY2sgPQlmdGRpX3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJLnRpb2NtZ2V0ID0gICAgICAgICAgICAgZnRkaV90aW9jbWdldCwKKwkudGlvY21zZXQgPSAgICAgICAgICAgICBmdGRpX3Rpb2Ntc2V0LAorCS5pb2N0bCA9CQlmdGRpX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQlmdGRpX3NldF90ZXJtaW9zLAorCS5icmVha19jdGwgPQkJZnRkaV9icmVha19jdGwsCisJLmF0dGFjaCA9CQlmdGRpX0ZUMjIzMkNfc3RhcnR1cCwKKwkuc2h1dGRvd24gPQkJZnRkaV9zaHV0ZG93biwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBmdGRpX1VTQl9VSVJUX2RldmljZSA9IHsKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCSJVU0ItVUlSVCBJbmZyYXJlZCBUcmFuY2VpdmVyIiwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGVfVVNCX1VJUlQsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQkwLAorCS5udW1fYnVsa19pbiA9CQkxLAorCS5udW1fYnVsa19vdXQgPQkJMSwKKwkubnVtX3BvcnRzID0JCTEsCisJLm9wZW4gPQkJCWZ0ZGlfb3BlbiwKKwkuY2xvc2UgPQkJZnRkaV9jbG9zZSwKKwkudGhyb3R0bGUgPQkJZnRkaV90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQlmdGRpX3VudGhyb3R0bGUsCisJLndyaXRlID0JCWZ0ZGlfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJZnRkaV93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIgPQlmdGRpX2NoYXJzX2luX2J1ZmZlciwKKwkucmVhZF9idWxrX2NhbGxiYWNrID0JZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2ssCisJLndyaXRlX2J1bGtfY2FsbGJhY2sgPQlmdGRpX3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJLnRpb2NtZ2V0ID0gICAgICAgICAgICAgZnRkaV90aW9jbWdldCwKKwkudGlvY21zZXQgPSAgICAgICAgICAgICBmdGRpX3Rpb2Ntc2V0LAorCS5pb2N0bCA9CQlmdGRpX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQlmdGRpX3NldF90ZXJtaW9zLAorCS5icmVha19jdGwgPQkJZnRkaV9icmVha19jdGwsCisJLmF0dGFjaCA9CQlmdGRpX1VTQl9VSVJUX3N0YXJ0dXAsCisJLnNodXRkb3duID0JCWZ0ZGlfc2h1dGRvd24sCit9OworCisvKiBUaGUgVElSQTEgaXMgYmFzZWQgb24gYSAgRlQyMzJCTSB3aGljaCByZXF1aXJlcyBhIGZpeGVkIGJhdWQgcmF0ZSBvZiAxMDAwMDAKKyAqIGFuZCB3aGljaCByZXF1aXJlcyBSVFMtQ1RTIHRvIGJlIGVuYWJsZWQuICovCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZnRkaV9IRV9USVJBMV9kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiSG9tZS1FbGVjdHJvbmljcyBUSVJBLTEgSVIgVHJhbnNjZWl2ZXIiLAorCS5pZF90YWJsZSA9CQlpZF90YWJsZV9IRV9USVJBMSwKKwkubnVtX2ludGVycnVwdF9pbiA9CTAsCisJLm51bV9idWxrX2luID0JCTEsCisJLm51bV9idWxrX291dCA9CQkxLAorCS5udW1fcG9ydHMgPQkJMSwKKwkub3BlbiA9CQkJZnRkaV9vcGVuLAorCS5jbG9zZSA9CQlmdGRpX2Nsb3NlLAorCS50aHJvdHRsZSA9CQlmdGRpX3Rocm90dGxlLAorCS51bnRocm90dGxlID0JCWZ0ZGlfdW50aHJvdHRsZSwKKwkud3JpdGUgPQkJZnRkaV93cml0ZSwKKwkud3JpdGVfcm9vbSA9CQlmdGRpX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlciA9CWZ0ZGlfY2hhcnNfaW5fYnVmZmVyLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQlmdGRpX3JlYWRfYnVsa19jYWxsYmFjaywKKwkud3JpdGVfYnVsa19jYWxsYmFjayA9CWZ0ZGlfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkudGlvY21nZXQgPSAgICAgICAgICAgICBmdGRpX3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9ICAgICAgICAgICAgIGZ0ZGlfdGlvY21zZXQsCisJLmlvY3RsID0JCWZ0ZGlfaW9jdGwsCisJLnNldF90ZXJtaW9zID0JCWZ0ZGlfc2V0X3Rlcm1pb3MsCisJLmJyZWFrX2N0bCA9CQlmdGRpX2JyZWFrX2N0bCwKKwkuYXR0YWNoID0JCWZ0ZGlfSEVfVElSQTFfc3RhcnR1cCwKKwkuc2h1dGRvd24gPQkJZnRkaV9zaHV0ZG93biwKK307CisKKworCisjZGVmaW5lIFdEUl9USU1FT1VUIDUwMDAgLyogZGVmYXVsdCB1cmIgdGltZW91dCAqLworCisvKiBIaWdoIGFuZCBsb3cgYXJlIGZvciBEVFIsIFJUUyBldGMgZXRjICovCisjZGVmaW5lIEhJR0ggMQorI2RlZmluZSBMT1cgMAorCisvKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBVdGxpdHkgZnVuY3Rpb25zCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgaW50IGZ0ZGlfMjMyYW1fYmF1ZF9iYXNlX3RvX2Rpdmlzb3IoaW50IGJhdWQsIGludCBiYXNlKQoreworCXVuc2lnbmVkIHNob3J0IGludCBkaXZpc29yOworCWludCBkaXZpc29yMyA9IGJhc2UgLyAyIC8gYmF1ZDsgLy8gZGl2aXNvciBzaGlmdGVkIDMgYml0cyB0byB0aGUgbGVmdAorCWlmICgoZGl2aXNvcjMgJiAweDcpID09IDcpIGRpdmlzb3IzICsrOyAvLyByb3VuZCB4LjcvOCB1cCB0byB4KzEKKwlkaXZpc29yID0gZGl2aXNvcjMgPj4gMzsKKwlkaXZpc29yMyAmPSAweDc7CisJaWYgKGRpdmlzb3IzID09IDEpIGRpdmlzb3IgfD0gMHhjMDAwOyBlbHNlIC8vIDAuMTI1CisJaWYgKGRpdmlzb3IzID49IDQpIGRpdmlzb3IgfD0gMHg0MDAwOyBlbHNlIC8vIDAuNQorCWlmIChkaXZpc29yMyAhPSAwKSBkaXZpc29yIHw9IDB4ODAwMDsgICAgICAvLyAwLjI1CisJaWYgKGRpdmlzb3IgPT0gMSkgZGl2aXNvciA9IDA7CS8qIHNwZWNpYWwgY2FzZSBmb3IgbWF4aW11bSBiYXVkIHJhdGUgKi8KKwlyZXR1cm4gZGl2aXNvcjsKK30KKworc3RhdGljIHVuc2lnbmVkIHNob3J0IGludCBmdGRpXzIzMmFtX2JhdWRfdG9fZGl2aXNvcihpbnQgYmF1ZCkKK3sKKwkgcmV0dXJuKGZ0ZGlfMjMyYW1fYmF1ZF9iYXNlX3RvX2Rpdmlzb3IoYmF1ZCwgNDgwMDAwMDApKTsKK30KKworc3RhdGljIF9fdTMyIGZ0ZGlfMjMyYm1fYmF1ZF9iYXNlX3RvX2Rpdmlzb3IoaW50IGJhdWQsIGludCBiYXNlKQoreworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRpdmZyYWNbOF0gPSB7IDAsIDMsIDIsIDQsIDEsIDUsIDYsIDcgfTsKKwlfX3UzMiBkaXZpc29yOworCWludCBkaXZpc29yMyA9IGJhc2UgLyAyIC8gYmF1ZDsgLy8gZGl2aXNvciBzaGlmdGVkIDMgYml0cyB0byB0aGUgbGVmdAorCWRpdmlzb3IgPSBkaXZpc29yMyA+PiAzOworCWRpdmlzb3IgfD0gKF9fdTMyKWRpdmZyYWNbZGl2aXNvcjMgJiAweDddIDw8IDE0OworCS8qIERlYWwgd2l0aCBzcGVjaWFsIGNhc2VzIGZvciBoaWdoZXN0IGJhdWQgcmF0ZXMuICovCisJaWYgKGRpdmlzb3IgPT0gMSkgZGl2aXNvciA9IDA7IGVsc2UJLy8gMS4wCisJaWYgKGRpdmlzb3IgPT0gMHg0MDAxKSBkaXZpc29yID0gMTsJLy8gMS41CisJcmV0dXJuIGRpdmlzb3I7Cit9CisKK3N0YXRpYyBfX3UzMiBmdGRpXzIzMmJtX2JhdWRfdG9fZGl2aXNvcihpbnQgYmF1ZCkKK3sKKwkgcmV0dXJuKGZ0ZGlfMjMyYm1fYmF1ZF9iYXNlX3RvX2Rpdmlzb3IoYmF1ZCwgNDgwMDAwMDApKTsKK30KKworc3RhdGljIGludCBzZXRfcnRzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBoaWdoX29yX2xvdykKK3sKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBmdGRpX2hpZ2hfb3JfbG93OworCWludCBydjsKKwkKKwlidWYgPSBrbWFsbG9jKDEsIEdGUF9OT0lPKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisJCisJaWYgKGhpZ2hfb3JfbG93KSB7CisJCWZ0ZGlfaGlnaF9vcl9sb3cgPSBGVERJX1NJT19TRVRfUlRTX0hJR0g7CisJCXByaXYtPmxhc3RfZHRyX3J0cyB8PSBUSU9DTV9SVFM7CisJfSBlbHNlIHsKKwkJZnRkaV9oaWdoX29yX2xvdyA9IEZURElfU0lPX1NFVF9SVFNfTE9XOworCQlwcml2LT5sYXN0X2R0cl9ydHMgJj0gflRJT0NNX1JUUzsKKwl9CisJcnYgPSB1c2JfY29udHJvbF9tc2cocG9ydC0+c2VyaWFsLT5kZXYsCisJCQkgICAgICAgdXNiX3NuZGN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICAgICBGVERJX1NJT19TRVRfTU9ERU1fQ1RSTF9SRVFVRVNULCAKKwkJCSAgICAgICBGVERJX1NJT19TRVRfTU9ERU1fQ1RSTF9SRVFVRVNUX1RZUEUsCisJCQkgICAgICAgZnRkaV9oaWdoX29yX2xvdywgcHJpdi0+aW50ZXJmYWNlLCAKKwkJCSAgICAgICBidWYsIDAsIFdEUl9USU1FT1VUKTsKKworCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJ2OworfQorCisKK3N0YXRpYyBpbnQgc2V0X2R0cihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgaGlnaF9vcl9sb3cpCit7CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwljaGFyICpidWY7CisJdW5zaWduZWQgZnRkaV9oaWdoX29yX2xvdzsKKwlpbnQgcnY7CisJCisJYnVmID0ga21hbGxvYygxLCBHRlBfTk9JTyk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGhpZ2hfb3JfbG93KSB7CisJCWZ0ZGlfaGlnaF9vcl9sb3cgPSBGVERJX1NJT19TRVRfRFRSX0hJR0g7CisJCXByaXYtPmxhc3RfZHRyX3J0cyB8PSBUSU9DTV9EVFI7CisJfSBlbHNlIHsKKwkJZnRkaV9oaWdoX29yX2xvdyA9IEZURElfU0lPX1NFVF9EVFJfTE9XOworCQlwcml2LT5sYXN0X2R0cl9ydHMgJj0gflRJT0NNX0RUUjsKKwl9CisJcnYgPSB1c2JfY29udHJvbF9tc2cocG9ydC0+c2VyaWFsLT5kZXYsCisJCQkgICAgICAgdXNiX3NuZGN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICAgICBGVERJX1NJT19TRVRfTU9ERU1fQ1RSTF9SRVFVRVNULCAKKwkJCSAgICAgICBGVERJX1NJT19TRVRfTU9ERU1fQ1RSTF9SRVFVRVNUX1RZUEUsCisJCQkgICAgICAgZnRkaV9oaWdoX29yX2xvdywgcHJpdi0+aW50ZXJmYWNlLCAKKwkJCSAgICAgICBidWYsIDAsIFdEUl9USU1FT1VUKTsKKworCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJ2OworfQorCisKK3N0YXRpYyBfX3UzMiBnZXRfZnRkaV9kaXZpc29yKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKiBwb3J0KTsKKworCitzdGF0aWMgaW50IGNoYW5nZV9zcGVlZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJY2hhciAqYnVmOworICAgICAgICBfX3UxNiB1cmJfdmFsdWU7CisJX191MTYgdXJiX2luZGV4OworCV9fdTMyIHVyYl9pbmRleF92YWx1ZTsKKwlpbnQgcnY7CisKKwlidWYgPSBrbWFsbG9jKDEsIEdGUF9OT0lPKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl1cmJfaW5kZXhfdmFsdWUgPSBnZXRfZnRkaV9kaXZpc29yKHBvcnQpOworCXVyYl92YWx1ZSA9IChfX3UxNil1cmJfaW5kZXhfdmFsdWU7CisJdXJiX2luZGV4ID0gKF9fdTE2KSh1cmJfaW5kZXhfdmFsdWUgPj4gMTYpOworCWlmIChwcml2LT5pbnRlcmZhY2UpIHsJLyogRlQyMjMyQyAqLworCQl1cmJfaW5kZXggPSAoX191MTYpKCh1cmJfaW5kZXggPDwgOCkgfCBwcml2LT5pbnRlcmZhY2UpOworCX0KKwkKKwlydiA9IHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKKwkJCSAgICB1c2Jfc25kY3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJICAgIEZURElfU0lPX1NFVF9CQVVEUkFURV9SRVFVRVNULAorCQkJICAgIEZURElfU0lPX1NFVF9CQVVEUkFURV9SRVFVRVNUX1RZUEUsCisJCQkgICAgdXJiX3ZhbHVlLCB1cmJfaW5kZXgsCisJCQkgICAgYnVmLCAwLCAxMDApOworCisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcnY7Cit9CisKKworc3RhdGljIF9fdTMyIGdldF9mdGRpX2Rpdmlzb3Ioc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqIHBvcnQpCit7IC8qIGdldF9mdGRpX2Rpdmlzb3IgKi8KKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCV9fdTMyIGRpdl92YWx1ZSA9IDA7CisJaW50IGRpdl9va2F5ID0gMTsKKwlpbnQgYmF1ZDsKKworCS8qCisJICogVGhlIGxvZ2ljIGludm9sdmVkIGluIHNldHRpbmcgdGhlIGJhdWRyYXRlIGNhbiBiZSBjbGVhbmx5IHNwbGl0IGluIDMgc3RlcHMuCisJICogT2J0YWluaW5nIHRoZSBhY3R1YWwgYmF1ZCByYXRlIGlzIGEgbGl0dGxlIHRyaWNreSBzaW5jZSB1bml4IHRyYWRpdGlvbmFsbHkKKwkgKiBzb21laG93IGlnbm9yZWQgdGhlIHBvc3NpYmlsaXR5IHRvIHNldCBub24tc3RhbmRhcmQgYmF1ZCByYXRlcy4KKwkgKiAxLiBTdGFuZGFyZCBiYXVkIHJhdGVzIGFyZSBzZXQgaW4gdHR5LT50ZXJtaW9zLT5jX2NmbGFnCisJICogMi4gSWYgdGhlc2UgYXJlIG5vdCBlbm91Z2gsIHlvdSBjYW4gc2V0IGFueSBzcGVlZCB1c2luZyBhbHRfc3BlZWQgYXMgZm9sbG93czoKKwkgKiAgICAtIHNldCB0dHktPnRlcm1pb3MtPmNfY2ZsYWcgc3BlZWQgdG8gQjM4NDAwCisJICogICAgLSBzZXQgeW91ciByZWFsIHNwZWVkIGluIHR0eS0+YWx0X3NwZWVkOyBpdCBnZXRzIGlnbm9yZWQgd2hlbgorCSAqICAgICAgYWx0X3NwZWVkPT0wLCAob3IpCisJICogICAgLSBjYWxsIFRJT0NTU0VSSUFMIGlvY3RsIHdpdGggKHN0cnVjdCBzZXJpYWxfc3RydWN0KSBzZXQgYXMgZm9sbG93czoKKwkgKiAgICAgIGZsYWdzICYgQVNZTkNfU1BEX01BU0sgPT0gQVNZTkNfU1BEX1tISSwgVkhJLCBTSEksIFdBUlBdLCB0aGlzIGp1c3QKKwkgKiAgICAgIHNldHMgYWx0X3NwZWVkIHRvIChISTogNTc2MDAsIFZISTogMTE1MjAwLCBTSEk6IDIzMDQwMCwgV0FSUDogNDYwODAwKQorCSAqICoqIFN0ZXBzIDEsIDIgYXJlIGRvbmUgY291cnRlc3kgb2YgdHR5X2dldF9iYXVkX3JhdGUKKwkgKiAzLiBZb3UgY2FuIGFsc28gc2V0IGJhdWQgcmF0ZSBieSBzZXR0aW5nIGN1c3RvbSBkaXZpc29yIGFzIGZvbGxvd3MKKwkgKiAgICAtIHNldCB0dHktPnRlcm1pb3MtPmNfY2ZsYWcgc3BlZWQgdG8gQjM4NDAwCisJICogICAgLSBjYWxsIFRJT0NTU0VSSUFMIGlvY3RsIHdpdGggKHN0cnVjdCBzZXJpYWxfc3RydWN0KSBzZXQgYXMgZm9sbG93czoKKwkgKiAgICAgIG8gZmxhZ3MgJiBBU1lOQ19TUERfTUFTSyA9PSBBU1lOQ19TUERfQ1VTVAorCSAqICAgICAgbyBjdXN0b21fZGl2aXNvciBzZXQgdG8gYmF1ZF9iYXNlIC8geW91cl9uZXdfYmF1ZHJhdGUKKwkgKiAqKiBTdGVwIDMgaXMgZG9uZSBjb3VydGVzeSBvZiBjb2RlIGJvcnJvd2VkIGZyb20gc2VyaWFsLmMgLSBJIHNob3VsZCByZWFsbHkKKwkgKiAgICBzcGVuZCBzb21lIHRpbWUgYW5kIHNlcGFyYXRlK21vdmUgdGhpcyBjb21tb24gY29kZSB0byBzZXJpYWwuYywgaXQgaXMKKwkgKiAgICByZXBsaWNhdGVkIGluIG5lYXJseSBldmVyeSBzZXJpYWwgZHJpdmVyIHlvdSBzZWUuCisJICovCisKKwkvKiAxLiBHZXQgdGhlIGJhdWQgcmF0ZSBmcm9tIHRoZSB0dHkgc2V0dGluZ3MsIHRoaXMgb2JzZXJ2ZXMgYWx0X3NwZWVkIGhhY2sgKi8KKworCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZShwb3J0LT50dHkpOworCWRiZygiJXMgLSB0dHlfZ2V0X2JhdWRfcmF0ZSByZXBvcnRzIHNwZWVkICVkIiwgX19GVU5DVElPTl9fLCBiYXVkKTsKKworCS8qIDIuIE9ic2VydmUgYXN5bmMtY29tcGF0aWJsZSBjdXN0b21fZGl2aXNvciBoYWNrLCB1cGRhdGUgYmF1ZHJhdGUgaWYgbmVlZGVkICovCisKKwlpZiAoYmF1ZCA9PSAzODQwMCAmJgorCSAgICAoKHByaXYtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9DVVNUKSAmJgorCSAgICAgKHByaXYtPmN1c3RvbV9kaXZpc29yKSkgeworCQliYXVkID0gcHJpdi0+YmF1ZF9iYXNlIC8gcHJpdi0+Y3VzdG9tX2Rpdmlzb3I7CisJCWRiZygiJXMgLSBjdXN0b20gZGl2aXNvciAlZCBzZXRzIGJhdWQgcmF0ZSB0byAlZCIsIF9fRlVOQ1RJT05fXywgcHJpdi0+Y3VzdG9tX2Rpdmlzb3IsIGJhdWQpOworCX0KKworCS8qIDMuIENvbnZlcnQgYmF1ZHJhdGUgdG8gZGV2aWNlLXNwZWNpZmljIGRpdmlzb3IgKi8KKworCWlmICghYmF1ZCkgYmF1ZCA9IDk2MDA7CQorCXN3aXRjaChwcml2LT5jaGlwX3R5cGUpIHsKKwljYXNlIFNJTzogLyogU0lPIGNoaXAgKi8KKwkJc3dpdGNoKGJhdWQpIHsKKwkJY2FzZSAzMDA6IGRpdl92YWx1ZSA9IGZ0ZGlfc2lvX2IzMDA7IGJyZWFrOworCQljYXNlIDYwMDogZGl2X3ZhbHVlID0gZnRkaV9zaW9fYjYwMDsgYnJlYWs7CisJCWNhc2UgMTIwMDogZGl2X3ZhbHVlID0gZnRkaV9zaW9fYjEyMDA7IGJyZWFrOworCQljYXNlIDI0MDA6IGRpdl92YWx1ZSA9IGZ0ZGlfc2lvX2IyNDAwOyBicmVhazsKKwkJY2FzZSA0ODAwOiBkaXZfdmFsdWUgPSBmdGRpX3Npb19iNDgwMDsgYnJlYWs7CisJCWNhc2UgOTYwMDogZGl2X3ZhbHVlID0gZnRkaV9zaW9fYjk2MDA7IGJyZWFrOworCQljYXNlIDE5MjAwOiBkaXZfdmFsdWUgPSBmdGRpX3Npb19iMTkyMDA7IGJyZWFrOworCQljYXNlIDM4NDAwOiBkaXZfdmFsdWUgPSBmdGRpX3Npb19iMzg0MDA7IGJyZWFrOworCQljYXNlIDU3NjAwOiBkaXZfdmFsdWUgPSBmdGRpX3Npb19iNTc2MDA7ICBicmVhazsKKwkJY2FzZSAxMTUyMDA6IGRpdl92YWx1ZSA9IGZ0ZGlfc2lvX2IxMTUyMDA7IGJyZWFrOworCQl9IC8qIGJhdWQgKi8KKwkJaWYgKGRpdl92YWx1ZSA9PSAwKSB7CisgIAkJCWRiZygiJXMgLSBCYXVkcmF0ZSAoJWQpIHJlcXVlc3RlZCBpcyBub3Qgc3VwcG9ydGVkIiwgX19GVU5DVElPTl9fLCAgYmF1ZCk7CisJCQlkaXZfdmFsdWUgPSBmdGRpX3Npb19iOTYwMDsKKwkJCWRpdl9va2F5ID0gMDsKKwkJfQorCQlicmVhazsKKwljYXNlIEZUOFUyMzJBTTogLyogOFUyMzJBTSBjaGlwICovCisJCWlmIChiYXVkIDw9IDMwMDAwMDApIHsKKwkJCWRpdl92YWx1ZSA9IGZ0ZGlfMjMyYW1fYmF1ZF90b19kaXZpc29yKGJhdWQpOworCQl9IGVsc2UgeworCSAgICAgICAgICAgICAgICBkYmcoIiVzIC0gQmF1ZCByYXRlIHRvbyBoaWdoISIsIF9fRlVOQ1RJT05fXyk7CisJCQlkaXZfdmFsdWUgPSBmdGRpXzIzMmFtX2JhdWRfdG9fZGl2aXNvcig5NjAwKTsKKwkJCWRpdl9va2F5ID0gMDsKKwkJfQorCQlicmVhazsKKwljYXNlIEZUMjMyQk06IC8qIEZUMjMyQk0gY2hpcCAqLworCWNhc2UgRlQyMjMyQzogLyogRlQyMjMyQyBjaGlwICovCisJCWlmIChiYXVkIDw9IDMwMDAwMDApIHsKKwkJCWRpdl92YWx1ZSA9IGZ0ZGlfMjMyYm1fYmF1ZF90b19kaXZpc29yKGJhdWQpOworCQl9IGVsc2UgeworCSAgICAgICAgICAgICAgICBkYmcoIiVzIC0gQmF1ZCByYXRlIHRvbyBoaWdoISIsIF9fRlVOQ1RJT05fXyk7CisJCQlkaXZfdmFsdWUgPSBmdGRpXzIzMmJtX2JhdWRfdG9fZGl2aXNvcig5NjAwKTsKKwkJCWRpdl9va2F5ID0gMDsKKwkJfQorCQlicmVhazsKKwl9IC8qIHByaXYtPmNoaXBfdHlwZSAqLworCisJaWYgKGRpdl9va2F5KSB7CisJCWRiZygiJXMgLSBCYXVkIHJhdGUgc2V0IHRvICVkIChkaXZpc29yIDB4JWxYKSBvbiBjaGlwICVzIiwKKwkJCV9fRlVOQ1RJT05fXywgYmF1ZCwgKHVuc2lnbmVkIGxvbmcpZGl2X3ZhbHVlLAorCQkJZnRkaV9jaGlwX25hbWVbcHJpdi0+Y2hpcF90eXBlXSk7CisJfQorCisJcmV0dXJuKGRpdl92YWx1ZSk7Cit9CisKKworc3RhdGljIGludCBnZXRfc2VyaWFsX2luZm8oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqIHBvcnQsIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqIHJldGluZm8pCit7CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCB0bXA7CisKKwlpZiAoIXJldGluZm8pCisJCXJldHVybiAtRUZBVUxUOworCW1lbXNldCgmdG1wLCAwLCBzaXplb2YodG1wKSk7CisJdG1wLmZsYWdzID0gcHJpdi0+ZmxhZ3M7CisJdG1wLmJhdWRfYmFzZSA9IHByaXYtPmJhdWRfYmFzZTsKKwl0bXAuY3VzdG9tX2Rpdmlzb3IgPSBwcml2LT5jdXN0b21fZGl2aXNvcjsKKwlpZiAoY29weV90b191c2VyKHJldGluZm8sICZ0bXAsIHNpemVvZigqcmV0aW5mbykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30gLyogZ2V0X3NlcmlhbF9pbmZvICovCisKKworc3RhdGljIGludCBzZXRfc2VyaWFsX2luZm8oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqIHBvcnQsIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqIG5ld2luZm8pCit7IC8qIHNldF9zZXJpYWxfaW5mbyAqLworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgbmV3X3NlcmlhbDsKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlIG9sZF9wcml2OworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZuZXdfc2VyaWFsLCBuZXdpbmZvLCBzaXplb2YobmV3X3NlcmlhbCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlvbGRfcHJpdiA9ICogcHJpdjsKKworCS8qIERvIGVycm9yIGNoZWNraW5nIGFuZCBwZXJtaXNzaW9uIGNoZWNraW5nICovCisKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKKwkJaWYgKCgobmV3X3NlcmlhbC5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykgIT0KKwkJICAgICAocHJpdi0+ZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spKSkKKwkJCXJldHVybiAtRVBFUk07CisJCXByaXYtPmZsYWdzID0gKChwcml2LT5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykgfAorCQkJICAgICAgIChuZXdfc2VyaWFsLmZsYWdzICYgQVNZTkNfVVNSX01BU0spKTsKKwkJcHJpdi0+Y3VzdG9tX2Rpdmlzb3IgPSBuZXdfc2VyaWFsLmN1c3RvbV9kaXZpc29yOworCQlnb3RvIGNoZWNrX2FuZF9leGl0OworCX0KKworCWlmICgobmV3X3NlcmlhbC5iYXVkX2Jhc2UgIT0gcHJpdi0+YmF1ZF9iYXNlKSAmJgorCSAgICAobmV3X3NlcmlhbC5iYXVkX2Jhc2UgPCA5NjAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBNYWtlIHRoZSBjaGFuZ2VzIC0gdGhlc2UgYXJlIHByaXZpbGVnZWQgY2hhbmdlcyEgKi8KKworCXByaXYtPmZsYWdzID0gKChwcml2LT5mbGFncyAmIH5BU1lOQ19GTEFHUykgfAorCSAgICAgICAgICAgICAgIChuZXdfc2VyaWFsLmZsYWdzICYgQVNZTkNfRkxBR1MpKTsJCisJcHJpdi0+Y3VzdG9tX2Rpdmlzb3IgPSBuZXdfc2VyaWFsLmN1c3RvbV9kaXZpc29yOworCisJcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IChwcml2LT5mbGFncyAmIEFTWU5DX0xPV19MQVRFTkNZKSA/IDEgOiAwOworCitjaGVja19hbmRfZXhpdDoKKwlpZiAoKG9sZF9wcml2LmZsYWdzICYgQVNZTkNfU1BEX01BU0spICE9CisJICAgICAocHJpdi0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykpIHsKKwkJaWYgKChwcml2LT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfSEkpCisJCQlwb3J0LT50dHktPmFsdF9zcGVlZCA9IDU3NjAwOworCQllbHNlIGlmICgocHJpdi0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1ZISSkKKwkJCXBvcnQtPnR0eS0+YWx0X3NwZWVkID0gMTE1MjAwOworCQllbHNlIGlmICgocHJpdi0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1NISSkKKwkJCXBvcnQtPnR0eS0+YWx0X3NwZWVkID0gMjMwNDAwOworCQllbHNlIGlmICgocHJpdi0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1dBUlApCisJCQlwb3J0LT50dHktPmFsdF9zcGVlZCA9IDQ2MDgwMDsKKwkJZWxzZQorCQkJcG9ydC0+dHR5LT5hbHRfc3BlZWQgPSAwOworCX0KKwlpZiAoKChvbGRfcHJpdi5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSAhPQorCSAgICAgKHByaXYtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spKSB8fAorCSAgICAoKChwcml2LT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfQ1VTVCkgJiYKKwkgICAgIChvbGRfcHJpdi5jdXN0b21fZGl2aXNvciAhPSBwcml2LT5jdXN0b21fZGl2aXNvcikpKSB7CisJCWNoYW5nZV9zcGVlZChwb3J0KTsKKwl9CisJCisJcmV0dXJuICgwKTsKKworfSAvKiBzZXRfc2VyaWFsX2luZm8gKi8KKworCisvKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTeXNmcyBBdHRyaWJ1dGUKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbGF0ZW5jeV90aW1lcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdG9fdXNiX3NlcmlhbF9wb3J0KGRldik7CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwl1bnNpZ25lZCBzaG9ydCBsYXRlbmN5ID0gMDsKKwlpbnQgcnYgPSAwOworCQorCXVkZXYgPSB0b191c2JfZGV2aWNlKGRldik7CisJCisJZGJnKCIlcyIsX19GVU5DVElPTl9fKTsKKwkKKwlydiA9IHVzYl9jb250cm9sX21zZyh1ZGV2LAorCQkJICAgICB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCisJCQkgICAgIEZURElfU0lPX0dFVF9MQVRFTkNZX1RJTUVSX1JFUVVFU1QsCisJCQkgICAgIEZURElfU0lPX0dFVF9MQVRFTkNZX1RJTUVSX1JFUVVFU1RfVFlQRSwKKwkJCSAgICAgMCwgcHJpdi0+aW50ZXJmYWNlLCAKKwkJCSAgICAgKGNoYXIqKSAmbGF0ZW5jeSwgMSwgV0RSX1RJTUVPVVQpOworCQorCWlmIChydiA8IDApIHsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gcmVhZCBsYXRlbmN5IHRpbWVyOiAlaSIsIHJ2KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBsYXRlbmN5KTsKK30KKworLyogV3JpdGUgYSBuZXcgdmFsdWUgb2YgdGhlIGxhdGVuY3kgdGltZXIsIGluIHVuaXRzIG9mIG1pbGxpc2Vjb25kcy4gKi8KK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2xhdGVuY3lfdGltZXIoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICp2YWxidWYsCisJCQkJICAgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0b191c2Jfc2VyaWFsX3BvcnQoZGV2KTsKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCWNoYXIgYnVmWzFdOworCWludCB2ID0gc2ltcGxlX3N0cnRvdWwodmFsYnVmLCBOVUxMLCAxMCk7CisJaW50IHJ2ID0gMDsKKwkKKwl1ZGV2ID0gdG9fdXNiX2RldmljZShkZXYpOworCQorCWRiZygiJXM6IHNldHRpbmcgbGF0ZW5jeSB0aW1lciA9ICVpIiwgX19GVU5DVElPTl9fLCB2KTsKKwkKKwlydiA9IHVzYl9jb250cm9sX21zZyh1ZGV2LAorCQkJICAgICB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJCQkgICAgIEZURElfU0lPX1NFVF9MQVRFTkNZX1RJTUVSX1JFUVVFU1QsCisJCQkgICAgIEZURElfU0lPX1NFVF9MQVRFTkNZX1RJTUVSX1JFUVVFU1RfVFlQRSwKKwkJCSAgICAgdiwgcHJpdi0+aW50ZXJmYWNlLCAKKwkJCSAgICAgYnVmLCAwLCBXRFJfVElNRU9VVCk7CisJCisJaWYgKHJ2IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byB3cml0ZSBsYXRlbmN5IHRpbWVyOiAlaSIsIHJ2KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCQorCXJldHVybiBjb3VudDsKK30KKworLyogV3JpdGUgYW4gZXZlbnQgY2hhcmFjdGVyIGRpcmVjdGx5IHRvIHRoZSBGVERJIHJlZ2lzdGVyLiAgVGhlIEFTQ0lJCisgICB2YWx1ZSBpcyBpbiB0aGUgbG93IDggYml0cywgd2l0aCB0aGUgZW5hYmxlIGJpdCBpbiB0aGUgOXRoIGJpdC4gKi8KK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2V2ZW50X2NoYXIoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICp2YWxidWYsCisJCQkJc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0b191c2Jfc2VyaWFsX3BvcnQoZGV2KTsKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCWNoYXIgYnVmWzFdOworCWludCB2ID0gc2ltcGxlX3N0cnRvdWwodmFsYnVmLCBOVUxMLCAxMCk7CisJaW50IHJ2ID0gMDsKKwkKKwl1ZGV2ID0gdG9fdXNiX2RldmljZShkZXYpOworCQorCWRiZygiJXM6IHNldHRpbmcgZXZlbnQgY2hhciA9ICVpIiwgX19GVU5DVElPTl9fLCB2KTsKKwkKKwlydiA9IHVzYl9jb250cm9sX21zZyh1ZGV2LAorCQkJICAgICB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJCQkgICAgIEZURElfU0lPX1NFVF9FVkVOVF9DSEFSX1JFUVVFU1QsCisJCQkgICAgIEZURElfU0lPX1NFVF9FVkVOVF9DSEFSX1JFUVVFU1RfVFlQRSwKKwkJCSAgICAgdiwgcHJpdi0+aW50ZXJmYWNlLCAKKwkJCSAgICAgYnVmLCAwLCBXRFJfVElNRU9VVCk7CisJCisJaWYgKHJ2IDwgMCkgeworCQlkYmcoIlVuYWJsZSB0byB3cml0ZSBldmVudCBjaGFyYWN0ZXI6ICVpIiwgcnYpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIobGF0ZW5jeV90aW1lciwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfbGF0ZW5jeV90aW1lciwgc3RvcmVfbGF0ZW5jeV90aW1lcik7CitzdGF0aWMgREVWSUNFX0FUVFIoZXZlbnRfY2hhciwgU19JV1VTUiwgTlVMTCwgc3RvcmVfZXZlbnRfY2hhcik7CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9zeXNmc19hdHRycyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorewkKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2OworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCisJZGJnKCIlcyIsX19GVU5DVElPTl9fKTsKKwkKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSk7CisJdWRldiA9IHNlcmlhbC0+ZGV2OworCQorCS8qIFhYWCBJJ3ZlIG5vIGlkZWEgaWYgdGhlIG9yaWdpbmFsIFNJTyBzdXBwb3J0cyB0aGUgZXZlbnRfY2hhcgorCSAqIHN5c2ZzIHBhcmFtZXRlciwgc28gSSdtIHBsYXlpbmcgaXQgc2FmZS4gICovCisJaWYgKHByaXYtPmNoaXBfdHlwZSAhPSBTSU8pIHsKKwkJZGJnKCJzeXNmcyBhdHRyaWJ1dGVzIGZvciAlcyIsIGZ0ZGlfY2hpcF9uYW1lW3ByaXYtPmNoaXBfdHlwZV0pOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnVkZXYtPmRldiwgJmRldl9hdHRyX2V2ZW50X2NoYXIpOworCQlpZiAocHJpdi0+Y2hpcF90eXBlID09IEZUMjMyQk0gfHwgcHJpdi0+Y2hpcF90eXBlID09IEZUMjIzMkMpIHsKKwkJCWRldmljZV9jcmVhdGVfZmlsZSgmdWRldi0+ZGV2LCAmZGV2X2F0dHJfbGF0ZW5jeV90aW1lcik7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9zeXNmc19hdHRycyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisKKwlkYmcoIiVzIixfX0ZVTkNUSU9OX18pOwkKKworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdKTsKKwl1ZGV2ID0gc2VyaWFsLT5kZXY7CisJCisJLyogWFhYIHNlZSBjcmVhdGVfc3lzZnNfYXR0cnMgKi8KKwlpZiAocHJpdi0+Y2hpcF90eXBlICE9IFNJTykgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnVkZXYtPmRldiwgJmRldl9hdHRyX2V2ZW50X2NoYXIpOworCQlpZiAocHJpdi0+Y2hpcF90eXBlID09IEZUMjMyQk0gfHwgcHJpdi0+Y2hpcF90eXBlID09IEZUMjIzMkMpIHsKKwkJCWRldmljZV9yZW1vdmVfZmlsZSgmdWRldi0+ZGV2LCAmZGV2X2F0dHJfbGF0ZW5jeV90aW1lcik7CisJCX0KKwl9CisJCit9CisKKy8qCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZUREkgZHJpdmVyIHNwZWNpZmljIGZ1bmN0aW9ucworICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyogQ29tbW9uIHN0YXJ0dXAgc3Vicm91dGluZSAqLworLyogQ2FsbGVkIGZyb20gZnRkaV9TSU9fc3RhcnR1cCwgZXRjLiAqLworc3RhdGljIGludCBmdGRpX2NvbW1vbl9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSBzZXJpYWwtPnBvcnRbMF07CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdjsKKwkKKwlkYmcoIiVzIixfX0ZVTkNUSU9OX18pOworCisJcHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBmdGRpX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpeworCQllcnIoIiVzLSBrbWFsbG9jKCVaZCkgZmFpbGVkLiIsIF9fRlVOQ1RJT05fXywgc2l6ZW9mKHN0cnVjdCBmdGRpX3ByaXZhdGUpKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldChwcml2LCAwLCBzaXplb2YoKnByaXYpKTsKKworCXNwaW5fbG9ja19pbml0KCZwcml2LT5yeF9sb2NrKTsKKyAgICAgICAgaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworCS8qIFRoaXMgd2lsbCBwdXNoIHRoZSBjaGFyYWN0ZXJzIHRocm91Z2ggaW1tZWRpYXRlbHkgcmF0aGVyCisJICAgdGhhbiBxdWV1ZSBhIHRhc2sgdG8gZGVsaXZlciB0aGVtICovCisJcHJpdi0+ZmxhZ3MgPSBBU1lOQ19MT1dfTEFURU5DWTsKKworCS8qIEluY3JlYXNlIHRoZSBzaXplIG9mIHJlYWQgYnVmZmVycyAqLworCWlmIChwb3J0LT5idWxrX2luX2J1ZmZlcikgeworCQlrZnJlZSAocG9ydC0+YnVsa19pbl9idWZmZXIpOworCX0KKwlwb3J0LT5idWxrX2luX2J1ZmZlciA9IGttYWxsb2MgKEJVRlNaLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBvcnQtPmJ1bGtfaW5fYnVmZmVyKSB7CisJCWtmcmVlIChwcml2KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWlmIChwb3J0LT5yZWFkX3VyYikgeworCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyID0gcG9ydC0+YnVsa19pbl9idWZmZXI7CisJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gQlVGU1o7CisJfQorCisJLyogRnJlZSBwb3J0J3MgZXhpc3Rpbmcgd3JpdGUgdXJiIGFuZCB0cmFuc2ZlciBidWZmZXIuICovCisJaWYgKHBvcnQtPndyaXRlX3VyYikgeworCQl1c2JfZnJlZV91cmIgKHBvcnQtPndyaXRlX3VyYik7CisJCXBvcnQtPndyaXRlX3VyYiA9IE5VTEw7CisJfQorCWlmIChwb3J0LT5idWxrX291dF9idWZmZXIpIHsKKwkJa2ZyZWUgKHBvcnQtPmJ1bGtfb3V0X2J1ZmZlcik7CisJCXBvcnQtPmJ1bGtfb3V0X2J1ZmZlciA9IE5VTEw7CisJfQorCisJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSwgcHJpdik7CisJCisJcmV0dXJuICgwKTsKK30KKworCisvKiBTdGFydHVwIGZvciB0aGUgU0lPIGNoaXAgKi8KKy8qIENhbGxlZCBmcm9tIHVzYnNlcmlhbDpzZXJpYWxfcHJvYmUgKi8KK3N0YXRpYyBpbnQgZnRkaV9TSU9fc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2OworCWludCBlcnI7CisKKwlkYmcoIiVzIixfX0ZVTkNUSU9OX18pOworCisJZXJyID0gZnRkaV9jb21tb25fc3RhcnR1cChzZXJpYWwpOworCWlmIChlcnIpeworCQlyZXR1cm4gKGVycik7CisJfQorCisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0pOworCXByaXYtPmNoaXBfdHlwZSA9IFNJTzsKKwlwcml2LT5iYXVkX2Jhc2UgPSAxMjAwMDAwMCAvIDE2OworCXByaXYtPndyaXRlX29mZnNldCA9IDE7CisJCisJcmV0dXJuICgwKTsKK30KKworLyogU3RhcnR1cCBmb3IgdGhlIDhVMjMyQU0gY2hpcCAqLworLyogQ2FsbGVkIGZyb20gdXNic2VyaWFsOnNlcmlhbF9wcm9iZSAqLworc3RhdGljIGludCBmdGRpXzhVMjMyQU1fc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sgLyogZnRkaV84VTIzMkFNX3N0YXJ0dXAgKi8KKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2OworCWludCBlcnI7CisKKwlkYmcoIiVzIixfX0ZVTkNUSU9OX18pOworCWVyciA9IGZ0ZGlfY29tbW9uX3N0YXJ0dXAoc2VyaWFsKTsKKwlpZiAoZXJyKXsKKwkJcmV0dXJuIChlcnIpOworCX0KKworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdKTsKKwlwcml2LT5jaGlwX3R5cGUgPSBGVDhVMjMyQU07CisJcHJpdi0+YmF1ZF9iYXNlID0gNDgwMDAwMDAgLyAyOyAvKiBXb3VsZCBiZSAvIDE2LCBidXQgRlRESSBzdXBwb3J0cyAwLjEyNSwgMC4yNSBhbmQgMC41IGRpdmlzb3IgZnJhY3Rpb25zISAqLworCQorCWNyZWF0ZV9zeXNmc19hdHRycyhzZXJpYWwpOworCQorCXJldHVybiAoMCk7Cit9IC8qIGZ0ZGlfOFUyMzJBTV9zdGFydHVwICovCisKKy8qIFN0YXJ0dXAgZm9yIHRoZSBGVDIzMkJNIGNoaXAgKi8KKy8qIENhbGxlZCBmcm9tIHVzYnNlcmlhbDpzZXJpYWxfcHJvYmUgKi8KK3N0YXRpYyBpbnQgZnRkaV9GVDIzMkJNX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7IC8qIGZ0ZGlfRlQyMzJCTV9zdGFydHVwICovCisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdjsKKwlpbnQgZXJyOworCisJZGJnKCIlcyIsX19GVU5DVElPTl9fKTsKKwllcnIgPSBmdGRpX2NvbW1vbl9zdGFydHVwKHNlcmlhbCk7CisJaWYgKGVycil7CisJCXJldHVybiAoZXJyKTsKKwl9CisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSk7CisJcHJpdi0+Y2hpcF90eXBlID0gRlQyMzJCTTsKKwlwcml2LT5iYXVkX2Jhc2UgPSA0ODAwMDAwMCAvIDI7IC8qIFdvdWxkIGJlIC8gMTYsIGJ1dCBGVDIzMkJNIHN1cHBvcnRzIG11bHRpcGxlIG9mIDAuMTI1IGRpdmlzb3IgZnJhY3Rpb25zISAqLworCQorCWNyZWF0ZV9zeXNmc19hdHRycyhzZXJpYWwpOworCisJcmV0dXJuICgwKTsKK30gLyogZnRkaV9GVDIzMkJNX3N0YXJ0dXAgKi8KKworLyogU3RhcnR1cCBmb3IgdGhlIEZUMjIzMkMgY2hpcCAqLworLyogQ2FsbGVkIGZyb20gdXNic2VyaWFsOnNlcmlhbF9wcm9iZSAqLworc3RhdGljIGludCBmdGRpX0ZUMjIzMkNfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sgLyogZnRkaV9GVDIyMzJDX3N0YXJ0dXAgKi8KKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2OworCWludCBlcnI7CisJaW50IGludGVyOworCisJZGJnKCIlcyIsX19GVU5DVElPTl9fKTsKKwllcnIgPSBmdGRpX2NvbW1vbl9zdGFydHVwKHNlcmlhbCk7CisJaWYgKGVycil7CisJCXJldHVybiAoZXJyKTsKKwl9CisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSk7CisJcHJpdi0+Y2hpcF90eXBlID0gRlQyMjMyQzsKKwlpbnRlciA9IHNlcmlhbC0+aW50ZXJmYWNlLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisKKwlpZiAoaW50ZXIpIHsKKwkJcHJpdi0+aW50ZXJmYWNlID0gSU5URVJGQUNFX0I7CisJfQorCWVsc2UgIHsKKwkJcHJpdi0+aW50ZXJmYWNlID0gSU5URVJGQUNFX0E7CisJfQorCXByaXYtPmJhdWRfYmFzZSA9IDQ4MDAwMDAwIC8gMjsgLyogV291bGQgYmUgLyAxNiwgYnV0IEZUMjIzMkMgc3VwcG9ydHMgbXVsdGlwbGUgb2YgMC4xMjUgZGl2aXNvciBmcmFjdGlvbnMhICovCisJCisJY3JlYXRlX3N5c2ZzX2F0dHJzKHNlcmlhbCk7CisKKwlyZXR1cm4gKDApOworfSAvKiBmdGRpX0ZUMjIzMkNfc3RhcnR1cCAqLworCisvKiBTdGFydHVwIGZvciB0aGUgVVNCLVVJUlQgZGV2aWNlLCB3aGljaCByZXF1aXJlcyBoYXJkd2lyZWQgYmF1ZHJhdGUgKDM4NDAwIGdldHMgbWFwcGVkIHRvIDMxMjUwMCkgKi8KKy8qIENhbGxlZCBmcm9tIHVzYnNlcmlhbDpzZXJpYWxfcHJvYmUgKi8KK3N0YXRpYyBpbnQgZnRkaV9VU0JfVUlSVF9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreyAvKiBmdGRpX1VTQl9VSVJUX3N0YXJ0dXAgKi8KKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2OworCWludCBlcnI7CisKKwlkYmcoIiVzIixfX0ZVTkNUSU9OX18pOworCWVyciA9IGZ0ZGlfOFUyMzJBTV9zdGFydHVwKHNlcmlhbCk7CisJaWYgKGVycil7CisJCXJldHVybiAoZXJyKTsKKwl9CisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSk7CisJcHJpdi0+ZmxhZ3MgfD0gQVNZTkNfU1BEX0NVU1Q7CisJcHJpdi0+Y3VzdG9tX2Rpdmlzb3IgPSA3NzsKKwlwcml2LT5mb3JjZV9iYXVkID0gQjM4NDAwOworCQorCXJldHVybiAoMCk7Cit9IC8qIGZ0ZGlfVVNCX1VJUlRfc3RhcnR1cCAqLworCisvKiBTdGFydHVwIGZvciB0aGUgSEUtVElSQTEgZGV2aWNlLCB3aGljaCByZXF1aXJlcyBoYXJkd2lyZWQKKyAqIGJhdWRyYXRlICgzODQwMCBnZXRzIG1hcHBlZCB0byAxMDAwMDApICovCitzdGF0aWMgaW50IGZ0ZGlfSEVfVElSQTFfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sgLyogZnRkaV9IRV9USVJBMV9zdGFydHVwICovCisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdjsKKwlpbnQgZXJyOworCisJZGJnKCIlcyIsX19GVU5DVElPTl9fKTsKKwllcnIgPSBmdGRpX0ZUMjMyQk1fc3RhcnR1cChzZXJpYWwpOworCWlmIChlcnIpeworCQlyZXR1cm4gKGVycik7CisJfQorCisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0pOworCXByaXYtPmZsYWdzIHw9IEFTWU5DX1NQRF9DVVNUOworCXByaXYtPmN1c3RvbV9kaXZpc29yID0gMjQwOworCXByaXYtPmZvcmNlX2JhdWQgPSBCMzg0MDA7CisJcHJpdi0+Zm9yY2VfcnRzY3RzID0gMTsKKwkKKwlyZXR1cm4gKDApOworfSAvKiBmdGRpX0hFX1RJUkExX3N0YXJ0dXAgKi8KKworCisvKiBmdGRpX3NodXRkb3duIGlzIGNhbGxlZCBmcm9tIHVzYnNlcmlhbDp1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QgCisgKiAgIGl0IGlzIGNhbGxlZCB3aGVuIHRoZSB1c2IgZGV2aWNlIGlzIGRpc2Nvbm5lY3RlZAorICoKKyAqICAgdXNic2VyaWFsOnVzYl9zZXJpYWxfZGlzY29ubmVjdAorICogICAgICBjYWxscyBfX3NlcmlhbF9jbG9zZSBmb3IgZWFjaCBvcGVuIG9mIHRoZSBwb3J0CisgKiAgICAgIHNodXRkb3duIGlzIGNhbGxlZCB0aGVuIChpZSBmdGRpX3NodXRkb3duKQorICovCisKKworc3RhdGljIHZvaWQgZnRkaV9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sgLyogZnRkaV9zaHV0ZG93biAqLworCQorCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSBzZXJpYWwtPnBvcnRbMF07CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJcmVtb3ZlX3N5c2ZzX2F0dHJzKHNlcmlhbCk7CisJCisJLyogYWxsIG9wZW4gcG9ydHMgYXJlIGNsb3NlZCBhdCB0aGlzIHBvaW50IAorICAgICAgICAgKiAgICAoYnkgdXNic2VyaWFsLmM6X19zZXJpYWxfY2xvc2UsIHdoaWNoIGNhbGxzIGZ0ZGlfY2xvc2UpICAKKwkgKi8KKworCWlmIChwcml2KSB7CisJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBOVUxMKTsKKwkJa2ZyZWUocHJpdik7CisJfQorfSAvKiBmdGRpX3NodXRkb3duICovCisKKworc3RhdGljIGludCAgZnRkaV9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sgLyogZnRkaV9vcGVuICovCisJc3RydWN0IHRlcm1pb3MgdG1wX3Rlcm1pb3M7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkKKwlpbnQgcmVzdWx0ID0gMDsKKwljaGFyIGJ1ZlsxXTsgLyogTmVlZGVkIGZvciB0aGUgdXNiX2NvbnRyb2xfbXNnIEkgdGhpbmsgKi8KKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisKKwlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gKHByaXYtPmZsYWdzICYgQVNZTkNfTE9XX0xBVEVOQ1kpID8gMSA6IDA7CisKKwkvKiBObyBlcnJvciBjaGVja2luZyBmb3IgdGhpcyAod2lsbCBnZXQgZXJyb3JzIGxhdGVyIGFueXdheSkgKi8KKwkvKiBTZWUgZnRkaV9zaW8uaCBmb3IgZGVzY3JpcHRpb24gb2Ygd2hhdCBpcyByZXNldCAqLworCXVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJRlRESV9TSU9fUkVTRVRfUkVRVUVTVCwgRlRESV9TSU9fUkVTRVRfUkVRVUVTVF9UWVBFLCAKKwkJCUZURElfU0lPX1JFU0VUX1NJTywgCisJCQlwcml2LT5pbnRlcmZhY2UsIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpOworCisJLyogVGVybWlvcyBkZWZhdWx0cyBhcmUgc2V0IGJ5IHVzYl9zZXJpYWxfaW5pdC4gV2UgZG9uJ3QgY2hhbmdlCisJICAgcG9ydC0+dHR5LT50ZXJtaW9zIC0gdGhpcyB3b3VsZCBsb29zZSBzcGVlZCBzZXR0aW5ncywgZXRjLgorCSAgIFRoaXMgaXMgc2FtZSBiZWhhdmlvdXIgYXMgc2VyaWFsLmMvcnNfb3BlbigpIC0gS3ViYSAqLworCisJLyogZnRkaV9zZXRfdGVybWlvcyAgd2lsbCBzZW5kIHVzYiBjb250cm9sIG1lc3NhZ2VzICovCisJZnRkaV9zZXRfdGVybWlvcyhwb3J0LCAmdG1wX3Rlcm1pb3MpOworCisJLyogRklYTUU6IEZsb3cgY29udHJvbCBtaWdodCBiZSBlbmFibGVkLCBzbyBpdCBzaG91bGQgYmUgY2hlY2tlZCAtCisJICAgd2UgaGF2ZSBubyBjb250cm9sIG9mIGRlZmF1bHRzISAqLworCS8qIFR1cm4gb24gUlRTIGFuZCBEVFIgc2luY2Ugd2UgYXJlIG5vdCBmbG93IGNvbnRyb2xsaW5nIGJ5IGRlZmF1bHQgKi8KKwlpZiAoc2V0X2R0cihwb3J0LCBISUdIKSA8IDApIHsKKwkJZXJyKCIlcyBFcnJvciBmcm9tIERUUiBISUdIIHVyYiIsIF9fRlVOQ1RJT05fXyk7CisJfQorCWlmIChzZXRfcnRzKHBvcnQsIEhJR0gpIDwgMCl7CisJCWVycigiJXMgRXJyb3IgZnJvbSBSVFMgSElHSCB1cmIiLCBfX0ZVTkNUSU9OX18pOworCX0KKworCS8qIE5vdCB0aHJvdHRsZWQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOworCXByaXYtPnJ4X2ZsYWdzICY9IH4oVEhST1RUTEVEIHwgQUNUVUFMTFlfVEhST1RUTEVEKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7CisKKwkvKiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLworCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBkZXYsCisJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShkZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJICAgICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCSAgICAgIGZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlc3VsdCkKKwkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKworCisJcmV0dXJuIHJlc3VsdDsKK30gLyogZnRkaV9vcGVuICovCisKKworCisvKiAKKyAqIHVzYnNlcmlhbDpfX3NlcmlhbF9jbG9zZSAgb25seSBjYWxscyBmdGRpX2Nsb3NlIGlmIHRoZSBwb2ludCBpcyBvcGVuCisgKgorICogICBUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgd2hlbiBpdCBpcyB0aGUgbGFzdCBjbG9zZQorICogICAKKyAqICAgCisgKi8KKworc3RhdGljIHZvaWQgZnRkaV9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7IC8qIGZ0ZGlfY2xvc2UgKi8KKwl1bnNpZ25lZCBpbnQgY19jZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWNoYXIgYnVmWzFdOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoY19jZmxhZyAmIEhVUENMKXsKKwkJLyogRGlzYWJsZSBmbG93IGNvbnRyb2wgKi8KKwkJaWYgKHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwgCisJCQkJICAgIHVzYl9zbmRjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCisJCQkJICAgIEZURElfU0lPX1NFVF9GTE9XX0NUUkxfUkVRVUVTVCwKKwkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNUX1RZUEUsCisJCQkJICAgIDAsIHByaXYtPmludGVyZmFjZSwgYnVmLCAwLAorCQkJCSAgICBXRFJfVElNRU9VVCkgPCAwKSB7CisJCQllcnIoImVycm9yIGZyb20gZmxvd2NvbnRyb2wgdXJiIik7CisJCX0JICAgIAorCisJCS8qIGRyb3AgRFRSICovCisJCWlmIChzZXRfZHRyKHBvcnQsIExPVykgPCAwKXsKKwkJCWVycigiRXJyb3IgZnJvbSBEVFIgTE9XIHVyYiIpOworCQl9CisJCS8qIGRyb3AgUlRTICovCisJCWlmIChzZXRfcnRzKHBvcnQsIExPVykgPCAwKSB7CisJCQllcnIoIkVycm9yIGZyb20gUlRTIExPVyB1cmIiKTsKKwkJfQorCX0gLyogTm90ZSBjaGFuZ2Ugbm8gbGluZSBpZiBodXBjbCBpcyBvZmYgKi8KKwkKKwkvKiBzaHV0ZG93biBvdXIgYnVsayByZWFkICovCisJaWYgKHBvcnQtPnJlYWRfdXJiKQorCQl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworfSAvKiBmdGRpX2Nsb3NlICovCisKKworICAKKy8qIFRoZSBTSU8gcmVxdWlyZXMgdGhlIGZpcnN0IGJ5dGUgdG8gaGF2ZToKKyAqICBCMCAxCisgKiAgQjEgMAorICogIEIyLi43IGxlbmd0aCBvZiBtZXNzYWdlIGV4Y2x1ZGluZyBieXRlIDAKKyAqCisgKiBUaGUgbmV3IGRldmljZXMgZG8gbm90IHJlcXVpcmUgdGhpcyBieXRlCisgKi8KK3N0YXRpYyBpbnQgZnRkaV93cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreyAvKiBmdGRpX3dyaXRlICovCisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCWludCBkYXRhX29mZnNldCA7ICAgICAgIC8qIHdpbGwgYmUgMSBmb3IgdGhlIFNJTyBhbmQgMCBvdGhlcndpc2UgKi8KKwlpbnQgc3RhdHVzOworCWludCB0cmFuc2Zlcl9zaXplOworCisJZGJnKCIlcyBwb3J0ICVkLCAlZCBieXRlcyIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCBjb3VudCk7CisKKwlpZiAoY291bnQgPT0gMCkgeworCQlkYmcoIndyaXRlIHJlcXVlc3Qgb2YgMCBieXRlcyIpOworCQlyZXR1cm4gMDsKKwl9CisJCisJZGF0YV9vZmZzZXQgPSBwcml2LT53cml0ZV9vZmZzZXQ7CisgICAgICAgIGRiZygiZGF0YV9vZmZzZXQgc2V0IHRvICVkIixkYXRhX29mZnNldCk7CisKKwkvKiBEZXRlcm1pbmUgdG90YWwgdHJhbnNmZXIgc2l6ZSAqLworCXRyYW5zZmVyX3NpemUgPSBjb3VudDsKKwlpZiAoZGF0YV9vZmZzZXQgPiAwKSB7CisJCS8qIE9yaWdpbmFsIHNpbyBuZWVkcyBjb250cm9sIGJ5dGVzIHRvby4uLiAqLworCQl0cmFuc2Zlcl9zaXplICs9IChkYXRhX29mZnNldCAqCisJCQkJKChjb3VudCArIChQS1RTWiAtIDEgLSBkYXRhX29mZnNldCkpIC8KKwkJCQkgKFBLVFNaIC0gZGF0YV9vZmZzZXQpKSk7CisJfQorCisJYnVmZmVyID0ga21hbGxvYyAodHJhbnNmZXJfc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFidWZmZXIpIHsKKwkJZXJyKCIlcyByYW4gb3V0IG9mIGtlcm5lbCBtZW1vcnkgZm9yIHVyYiAuLi4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOworCWlmICghdXJiKSB7CisJCWVycigiJXMgLSBubyBtb3JlIGZyZWUgdXJicyIsIF9fRlVOQ1RJT05fXyk7CisJCWtmcmVlIChidWZmZXIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBDb3B5IGRhdGEgKi8KKwlpZiAoZGF0YV9vZmZzZXQgPiAwKSB7CisJCS8qIE9yaWdpbmFsIHNpbyByZXF1aXJlcyBjb250cm9sIGJ5dGUgYXQgc3RhcnQgb2YgZWFjaCBwYWNrZXQuICovCisJCWludCB1c2VyX3BrdHN6ID0gUEtUU1ogLSBkYXRhX29mZnNldDsKKwkJaW50IHRvZG8gPSBjb3VudDsKKwkJdW5zaWduZWQgY2hhciAqZmlyc3RfYnl0ZSA9IGJ1ZmZlcjsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqY3VycmVudF9wb3NpdGlvbiA9IGJ1ZjsKKworCQl3aGlsZSAodG9kbyA+IDApIHsKKwkJCWlmICh1c2VyX3BrdHN6ID4gdG9kbykgeworCQkJCXVzZXJfcGt0c3ogPSB0b2RvOworCQkJfQorCQkJLyogV3JpdGUgdGhlIGNvbnRyb2wgYnl0ZSBhdCB0aGUgZnJvbnQgb2YgdGhlIHBhY2tldCovCisJCQkqZmlyc3RfYnl0ZSA9IDEgfCAoKHVzZXJfcGt0c3opIDw8IDIpOyAKKwkJCS8qIENvcHkgZGF0YSBmb3IgcGFja2V0ICovCisJCQltZW1jcHkgKGZpcnN0X2J5dGUgKyBkYXRhX29mZnNldCwKKwkJCQljdXJyZW50X3Bvc2l0aW9uLCB1c2VyX3BrdHN6KTsKKwkJCWZpcnN0X2J5dGUgKz0gdXNlcl9wa3RzeiArIGRhdGFfb2Zmc2V0OworCQkJY3VycmVudF9wb3NpdGlvbiArPSB1c2VyX3BrdHN6OworCQkJdG9kbyAtPSB1c2VyX3BrdHN6OworCQl9CisJfSBlbHNlIHsKKwkJLyogTm8gY29udHJvbCBieXRlIHJlcXVpcmVkLiAqLworCQkvKiBDb3B5IGluIHRoZSBkYXRhIHRvIHNlbmQgKi8KKwkJbWVtY3B5IChidWZmZXIsIGJ1ZiwgY291bnQpOworCX0KKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCB0cmFuc2Zlcl9zaXplLCBidWZmZXIpOworCisJLyogZmlsbCB0aGUgYnVmZmVyIGFuZCBzZW5kIGl0ICovCisJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBwb3J0LT5zZXJpYWwtPmRldiwgCisJCSAgICAgIHVzYl9zbmRidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKKwkJICAgICAgYnVmZmVyLCB0cmFuc2Zlcl9zaXplLAorCQkgICAgICBmdGRpX3dyaXRlX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKSB7CisJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQljb3VudCA9IHN0YXR1czsKKwkJa2ZyZWUgKGJ1ZmZlcik7CisJfQorCisJLyogd2UgYXJlIGRvbmUgd2l0aCB0aGlzIHVyYiwgc28gbGV0IHRoZSBob3N0IGRyaXZlcgorCSAqIHJlYWxseSBmcmVlIGl0IHdoZW4gaXQgaXMgZmluaXNoZWQgd2l0aCBpdCAqLworCXVzYl9mcmVlX3VyYiAodXJiKTsKKworCWRiZygiJXMgd3JpdGUgcmV0dXJuaW5nOiAlZCIsIF9fRlVOQ1RJT05fXywgY291bnQpOworCXJldHVybiBjb3VudDsKK30gLyogZnRkaV93cml0ZSAqLworCisKKy8qIFRoaXMgZnVuY3Rpb24gbWF5IGdldCBjYWxsZWQgd2hlbiB0aGUgZGV2aWNlIGlzIGNsb3NlZCAqLworCitzdGF0aWMgdm9pZCBmdGRpX3dyaXRlX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCisJLyogZnJlZSB1cCB0aGUgdHJhbnNmZXIgYnVmZmVyLCBhcyB1c2JfZnJlZV91cmIoKSBkb2VzIG5vdCBkbyB0aGlzICovCisJa2ZyZWUgKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQorCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIm5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJc2NoZWR1bGVfd29yaygmcG9ydC0+d29yayk7Cit9IC8qIGZ0ZGlfd3JpdGVfYnVsa19jYWxsYmFjayAqLworCisKK3N0YXRpYyBpbnQgZnRkaV93cml0ZV9yb29tKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ICkKK3sKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCS8qCisJICogV2UgcmVhbGx5IGNhbiB0YWtlIGFueXRoaW5nIHRoZSB1c2VyIHRocm93cyBhdCB1cworCSAqIGJ1dCBsZXQncyBwaWNrIGEgbmljZSBiaWcgbnVtYmVyIHRvIHRlbGwgdGhlIHR0eQorCSAqIGxheWVyIHRoYXQgd2UgaGF2ZSBsb3RzIG9mIGZyZWUgc3BhY2UKKwkgKi8KKwlyZXR1cm4gMjA0ODsKK30gLyogZnRkaV93cml0ZV9yb29tICovCisKKworc3RhdGljIGludCBmdGRpX2NoYXJzX2luX2J1ZmZlciAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sgLyogZnRkaV9jaGFyc19pbl9idWZmZXIgKi8KKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIAorCSAqIFdlIGNhbid0IHJlYWxseSBhY2NvdW50IGZvciBob3cgbXVjaCBkYXRhIHdlCisJICogaGF2ZSBzZW50IG91dCwgYnV0IGhhc24ndCBtYWRlIGl0IHRocm91Z2ggdG8gdGhlCisJICogZGV2aWNlLCBzbyBqdXN0IHRlbGwgdGhlIHR0eSBsYXllciB0aGF0IGV2ZXJ5dGhpbmcKKwkgKiBpcyBmbHVzaGVkLgorCSAqLworCXJldHVybiAwOworfSAvKiBmdGRpX2NoYXJzX2luX2J1ZmZlciAqLworCisKKworc3RhdGljIHZvaWQgZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7IC8qIGZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrICovCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdjsKKworCWlmICh1cmItPm51bWJlcl9vZl9wYWNrZXRzID4gMCkgeworCQllcnIoIiVzIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggJWQgYWN0dWFsX2xlbmd0aCAlZCBudW1iZXIgb2YgcGFja2V0cyAlZCIsX19GVU5DVElPTl9fLAorCQkgICAgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCB1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+bnVtYmVyX29mX3BhY2tldHMgKTsKKwkJZXJyKCIlcyB0cmFuc2Zlcl9mbGFncyAleCAiLCBfX0ZVTkNUSU9OX18sdXJiLT50cmFuc2Zlcl9mbGFncyApOworCX0KKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHBvcnQtPm9wZW5fY291bnQgPD0gMCkKKwkJcmV0dXJuOworCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICghdHR5KSB7CisJCWRiZygiJXMgLSBiYWQgdHR5IHBvaW50ZXIgLSBleGl0aW5nIixfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpZiAoIXByaXYpIHsKKwkJZGJnKCIlcyAtIGJhZCBwb3J0IHByaXZhdGUgZGF0YSBwb2ludGVyIC0gZXhpdGluZyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAodXJiICE9IHBvcnQtPnJlYWRfdXJiKSB7CisJCWVycigiJXMgLSBOb3QgbXkgdXJiISIsIF9fRlVOQ1RJT05fXyk7CisJfQorCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCS8qIFRoaXMgd2lsbCBoYXBwZW4gYXQgY2xvc2UgZXZlcnkgdGltZSBzbyBpdCBpcyBhIGRiZyBub3QgYW4gZXJyICovCisJCWRiZygiKHRoaXMgaXMgb2sgb24gY2xvc2UpIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBJZiB0aHJvdHRsZWQsIGRlbGF5IHJlY2VpdmUgcHJvY2Vzc2luZyB1bnRpbCB1bnRocm90dGxlZC4gKi8KKwlzcGluX2xvY2soJnByaXYtPnJ4X2xvY2spOworCWlmIChwcml2LT5yeF9mbGFncyAmIFRIUk9UVExFRCkgeworCQlkYmcoIkRlZmVycmluZyByZWFkIHVyYiBwcm9jZXNzaW5nIHVudGlsIHVudGhyb3R0bGVkIik7CisJCXByaXYtPnJ4X2ZsYWdzIHw9IEFDVFVBTExZX1RIUk9UVExFRDsKKwkJc3Bpbl91bmxvY2soJnByaXYtPnJ4X2xvY2spOworCQlyZXR1cm47CisJfQorCXNwaW5fdW5sb2NrKCZwcml2LT5yeF9sb2NrKTsKKworCWZ0ZGlfcHJvY2Vzc19yZWFkKHBvcnQpOworCit9IC8qIGZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrICovCisKKworc3RhdGljIHZvaWQgZnRkaV9wcm9jZXNzX3JlYWQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7IC8qIGZ0ZGlfcHJvY2Vzc19yZWFkICovCisJc3RydWN0IHVyYiAqdXJiOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdjsKKwljaGFyIGVycm9yX2ZsYWc7CisgICAgICAgCXVuc2lnbmVkIGNoYXIgKmRhdGE7CisKKwlpbnQgaTsKKwlpbnQgcmVzdWx0OworCWludCBuZWVkX2ZsaXA7CisJaW50IHBhY2tldF9vZmZzZXQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChwb3J0LT5vcGVuX2NvdW50IDw9IDApCisJCXJldHVybjsKKworCXR0eSA9IHBvcnQtPnR0eTsKKwlpZiAoIXR0eSkgeworCQlkYmcoIiVzIC0gYmFkIHR0eSBwb2ludGVyIC0gZXhpdGluZyIsX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaWYgKCFwcml2KSB7CisJCWRiZygiJXMgLSBiYWQgcG9ydCBwcml2YXRlIGRhdGEgcG9pbnRlciAtIGV4aXRpbmciLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJdXJiID0gcG9ydC0+cmVhZF91cmI7CisJaWYgKCF1cmIpIHsKKwkJZGJnKCIlcyAtIGJhZCByZWFkX3VyYiBwb2ludGVyIC0gZXhpdGluZyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKyAgICAgICAgLyogVGhlIGZpcnN0IHR3byBieXRlcyBvZiBldmVyeSByZWFkIHBhY2tldCBhcmUgc3RhdHVzICovCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IDIpIHsKKwkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CisJfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkYmcoIlN0YXR1cyBvbmx5OiAlMDNvbyAlMDNvbyIsZGF0YVswXSxkYXRhWzFdKTsKKyAgICAgICAgfQorCisKKwkvKiBUTyBETyAtLSBjaGVjayBmb3IgaHVuZyB1cCBsaW5lIGFuZCBoYW5kbGUgYXBwcm9wcmlhdGVseTogKi8KKwkvKiAgIHNlbmQgaGFuZ3VwICAqLworCS8qIFNlZSBhY20uYyAtIHlvdSBkbyBhIHR0eV9oYW5ndXAgIC0gZWcgdHR5X2hhbmd1cCh0dHkpICovCisJLyogaWYgQ0QgaXMgZHJvcHBlZCBhbmQgdGhlIGxpbmUgaXMgbm90IENMT0NBTCB0aGVuIHdlIHNob3VsZCBoYW5ndXAgKi8KKworCW5lZWRfZmxpcCA9IDA7CisJZm9yIChwYWNrZXRfb2Zmc2V0PTA7IHBhY2tldF9vZmZzZXQgPCB1cmItPmFjdHVhbF9sZW5ndGg7IHBhY2tldF9vZmZzZXQgKz0gUEtUU1opIHsKKwkJLyogQ29tcGFyZSBuZXcgbGluZSBzdGF0dXMgdG8gdGhlIG9sZCBvbmUsIHNpZ25hbCBpZiBkaWZmZXJlbnQgKi8KKwkJaWYgKHByaXYgIT0gTlVMTCkgeworCQkJY2hhciBuZXdfc3RhdHVzID0gZGF0YVtwYWNrZXRfb2Zmc2V0KzBdICYgRlRESV9TVEFUVVNfQjBfTUFTSzsKKwkJCWlmIChuZXdfc3RhdHVzICE9IHByaXYtPnByZXZfc3RhdHVzKSB7CisJCQkJcHJpdi0+ZGlmZl9zdGF0dXMgfD0gbmV3X3N0YXR1cyBeIHByaXYtPnByZXZfc3RhdHVzOworCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworCQkJCXByaXYtPnByZXZfc3RhdHVzID0gbmV3X3N0YXR1czsKKwkJCX0KKwkJfQorCisJCS8qIEhhbmRsZSBlcnJvcnMgYW5kIGJyZWFrICovCisJCWVycm9yX2ZsYWcgPSBUVFlfTk9STUFMOworCQkvKiBBbHRob3VnaCB0aGUgZGV2aWNlIHVzZXMgYSBiaXRtYXNrIGFuZCBoZW5jZSBjYW4gaGF2ZSBtdWx0aXBsZSAqLworCQkvKiBlcnJvcnMgb24gYSBwYWNrZXQgLSB0aGUgb3JkZXIgaGVyZSBzZXRzIHRoZSBwcmlvcml0eSB0aGUgKi8KKwkJLyogZXJyb3IgaXMgcmV0dXJuZWQgdG8gdGhlIHR0eSBsYXllciAgKi8KKworCQlpZiAoIGRhdGFbcGFja2V0X29mZnNldCsxXSAmIEZURElfUlNfT0UgKSB7CisJCQllcnJvcl9mbGFnID0gVFRZX09WRVJSVU47CisJCQlkYmcoIk9WRVJSUlVOIGVycm9yIik7CisJCX0KKwkJaWYgKCBkYXRhW3BhY2tldF9vZmZzZXQrMV0gJiBGVERJX1JTX0JJICkgeworCQkJZXJyb3JfZmxhZyA9IFRUWV9CUkVBSzsKKwkJCWRiZygiQlJFQUsgcmVjZWl2ZWQiKTsKKwkJfQorCQlpZiAoIGRhdGFbcGFja2V0X29mZnNldCsxXSAmIEZURElfUlNfUEUgKSB7CisJCQllcnJvcl9mbGFnID0gVFRZX1BBUklUWTsKKwkJCWRiZygiUEFSSVRZIGVycm9yIik7CisJCX0KKwkJaWYgKCBkYXRhW3BhY2tldF9vZmZzZXQrMV0gJiBGVERJX1JTX0ZFICkgeworCQkJZXJyb3JfZmxhZyA9IFRUWV9GUkFNRTsKKwkJCWRiZygiRlJBTUlORyBlcnJvciIpOworCQl9CisJCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiBwYWNrZXRfb2Zmc2V0ICsgMikgeworCQkJZm9yIChpID0gMjsgKGkgPCBQS1RTWikgJiYgKChpK3BhY2tldF9vZmZzZXQpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsgKytpKSB7CisJCQkJLyogaGF2ZSB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgb3ZlcmZsb3cgdGhlIGJ1ZmZlcgorCQkJCSAgd2l0aCB0dHlfaW5zZXJ0X2ZsaXBfY2hhcidzICovCisJCQkJaWYodHR5LT5mbGlwLmNvdW50ID49IFRUWV9GTElQQlVGX1NJWkUpIHsKKwkJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCQl9CisJCQkJLyogTm90ZSB0aGF0IHRoZSBlcnJvciBmbGFnIGlzIGR1cGxpY2F0ZWQgZm9yIAorCQkJCSAgIGV2ZXJ5IGNoYXJhY3RlciByZWNlaXZlZCBzaW5jZSB3ZSBkb24ndCBrbm93CisJCQkJICAgd2hpY2ggY2hhcmFjdGVyIGl0IGFwcGxpZWQgdG8gKi8KKwkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbcGFja2V0X29mZnNldCtpXSwgZXJyb3JfZmxhZyk7CisJCQl9CisJCQluZWVkX2ZsaXAgPSAxOworCQl9CisKKyNpZmRlZiBOT1RfQ09SUkVDVF9CVVRfS0VFUElOR19JVF9GT1JfTk9XCisJCS8qIGlmIGEgcGFyaXR5IGVycm9yIGlzIGRldGVjdGVkIHlvdSBnZXQgc3RhdHVzIHBhY2tldHMgZm9yZXZlcgorCQkgICB1bnRpbCBhIGNoYXJhY3RlciBpcyBzZW50IHdpdGhvdXQgYSBwYXJpdHkgZXJyb3IuCisJCSAgIFRoaXMgZG9lc24ndCB3b3JrIHdlbGwgc2luY2UgdGhlIGFwcGxpY2F0aW9uIHJlY2VpdmVzIGEgbmV2ZXIKKwkJICAgZW5kaW5nIHN0cmVhbSBvZiBiYWQgZGF0YSAtIGV2ZW4gdGhvdWdoIG5ldyBkYXRhIGhhc24ndCBiZWVuIHNlbnQuCisJCSAgIFRoZXJlZm9yZSBJIChiaWxsKSBoYXZlIHRha2VuIHRoaXMgb3V0LgorCQkgICBIb3dldmVyIC0gdGhpcyBtaWdodCBtYWtlIHNlbnNlIGZvciBmcmFtaW5nIGVycm9ycyBhbmQgc28gb24gCisJCSAgIHNvIEkgYW0gbGVhdmluZyB0aGUgY29kZSBpbiBmb3Igbm93LgorCQkqLworCQllbHNlIHsKKwkJCWlmIChlcnJvcl9mbGFnICE9IFRUWV9OT1JNQUwpeworCQkJCWRiZygiZXJyb3JfZmxhZyBpcyBub3Qgbm9ybWFsIik7CisJCQkJLyogSW4gdGhpcyBjYXNlIGl0IGlzIGp1c3Qgc3RhdHVzIC0gaWYgdGhhdCBpcyBhbiBlcnJvciBzZW5kIGEgYmFkIGNoYXJhY3RlciAqLworCQkJCWlmKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQkJfQorCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMHhmZiwgZXJyb3JfZmxhZyk7CisJCQkJbmVlZF9mbGlwID0gMTsKKwkJCX0KKwkJfQorI2VuZGlmCisJfSAvKiAiZm9yKHBhY2tldF9vZmZzZXQ9MC4uLiIgKi8KKworCS8qIExvdyBsYXRlbmN5ICovCisJaWYgKG5lZWRfZmxpcCkgeworCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCX0KKworCS8qIGlmIHRoZSBwb3J0IGlzIGNsb3NlZCBzdG9wIHRyeWluZyB0byByZWFkICovCisJaWYgKHBvcnQtPm9wZW5fY291bnQgPiAwKXsKKwkJLyogQ29udGludWUgdHJ5aW5nIHRvIGFsd2F5cyByZWFkICAqLworCQl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgcG9ydC0+c2VyaWFsLT5kZXYsIAorCQkJICAgICAgdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQkgICAgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCSAgICAgIGZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXN1bHQpCisJCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJfQorCisJcmV0dXJuOworfSAvKiBmdGRpX3Byb2Nlc3NfcmVhZCAqLworCisKK3N0YXRpYyB2b2lkIGZ0ZGlfYnJlYWtfY3RsKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUgKQoreworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJX191MTYgdXJiX3ZhbHVlID0gMDsgCisJY2hhciBidWZbMV07CisJCisJLyogYnJlYWtfc3RhdGUgPSAtMSB0byB0dXJuIG9uIGJyZWFrLCBhbmQgMCB0byB0dXJuIG9mZiBicmVhayAqLworCS8qIHNlZSBkcml2ZXJzL2NoYXIvdHR5X2lvLmMgdG8gc2VlIGl0IHVzZWQgKi8KKwkvKiBsYXN0X3NldF9kYXRhX3VyYl92YWx1ZSBORVZFUiBoYXMgdGhlIGJyZWFrIGJpdCBzZXQgaW4gaXQgKi8KKworCWlmIChicmVha19zdGF0ZSkgeworCQl1cmJfdmFsdWUgPSBwcml2LT5sYXN0X3NldF9kYXRhX3VyYl92YWx1ZSB8IEZURElfU0lPX1NFVF9CUkVBSzsKKwl9IGVsc2UgeworCQl1cmJfdmFsdWUgPSBwcml2LT5sYXN0X3NldF9kYXRhX3VyYl92YWx1ZTsgCisJfQorCisJCisJaWYgKHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICBGVERJX1NJT19TRVRfREFUQV9SRVFVRVNULCAKKwkJCSAgICBGVERJX1NJT19TRVRfREFUQV9SRVFVRVNUX1RZUEUsCisJCQkgICAgdXJiX3ZhbHVlICwgcHJpdi0+aW50ZXJmYWNlLAorCQkJICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpIDwgMCkgeworCQllcnIoIiVzIEZBSUxFRCB0byBlbmFibGUvZGlzYWJsZSBicmVhayBzdGF0ZSAoc3RhdGUgd2FzICVkKSIsIF9fRlVOQ1RJT05fXyxicmVha19zdGF0ZSk7CisJfQkgICAKKworCWRiZygiJXMgYnJlYWsgc3RhdGUgaXMgJWQgLSB1cmIgaXMgJWQiLCBfX0ZVTkNUSU9OX18sYnJlYWtfc3RhdGUsIHVyYl92YWx1ZSk7CisJCit9CisKKworLyogb2xkX3Rlcm1pb3MgY29udGFpbnMgdGhlIG9yaWdpbmFsIHRlcm1pb3Mgc2V0dGluZ3MgYW5kIHR0eS0+dGVybWlvcyBjb250YWlucworICogdGhlIG5ldyBzZXR0aW5nIHRvIGJlIHVzZWQKKyAqIFdBUk5JTkc6IHNldF90ZXJtaW9zIGNhbGxzIHRoaXMgd2l0aCBvbGRfdGVybWlvcyBpbiBrZXJuZWwgc3BhY2UKKyAqLworCitzdGF0aWMgdm9pZCBmdGRpX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7IC8qIGZ0ZGlfdGVybWlvcyAqLworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwl1bnNpZ25lZCBpbnQgY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlfX3UxNiB1cmJfdmFsdWU7IC8qIHdpbGwgaG9sZCB0aGUgbmV3IGZsYWdzICovCisJY2hhciBidWZbMV07IC8qIFBlcmhhcHMgSSBzaG91bGQgZHluYW1pY2FsbHkgYWxsb2MgdGhpcz8gKi8KKwkKKwkvLyBBZGRlZCBmb3IgeG9uL3hvZmYgc3VwcG9ydAorCXVuc2lnbmVkIGludCBpZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19pZmxhZzsKKwl1bnNpZ25lZCBjaGFyIHZzdG9wOworCXVuc2lnbmVkIGNoYXIgdnN0YXJ0OworCQorCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJLyogRm9yY2UgYmF1ZCByYXRlIGlmIHRoaXMgZGV2aWNlIHJlcXVpcmVzIGl0LCB1bmxlc3MgaXQgaXMgc2V0IHRvIEIwLiAqLworCWlmIChwcml2LT5mb3JjZV9iYXVkICYmICgocG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQpICE9IEIwKSkgeworCQlkYmcoIiVzOiBmb3JjaW5nIGJhdWQgcmF0ZSBmb3IgdGhpcyBkZXZpY2UiLCBfX0ZVTkNUSU9OX18pOworCQlwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJj0gfkNCQVVEOworCQlwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgfD0gcHJpdi0+Zm9yY2VfYmF1ZDsKKwl9CisKKwkvKiBGb3JjZSBSVFMtQ1RTIGlmIHRoaXMgZGV2aWNlIHJlcXVpcmVzIGl0LiAqLworCWlmIChwcml2LT5mb3JjZV9ydHNjdHMpIHsKKwkJZGJnKCIlczogZm9yY2luZyBydHNjdHMgZm9yIHRoaXMgZGV2aWNlIiwgX19GVU5DVElPTl9fKTsKKwkJcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnIHw9IENSVFNDVFM7CisJfQorCisJY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisKKwkvKiBGSVhNRSAtRm9yIHRoaXMgY3V0IEkgZG9uJ3QgY2FyZSBpZiB0aGUgbGluZSBpcyByZWFsbHkgY2hhbmdpbmcgb3IgCisJICAgbm90ICAtIHNvIGp1c3QgZG8gdGhlIGNoYW5nZSByZWdhcmRsZXNzICAtIHNob3VsZCBiZSBhYmxlIHRvIAorCSAgIGNvbXBhcmUgb2xkX3Rlcm1pb3MgYW5kIHR0eS0+dGVybWlvcyAqLworCS8qIE5PVEUgVGhlc2Ugcm91dGluZXMgY2FuIGdldCBpbnRlcnJ1cHRlZCBieSAKKwkgICBmdGRpX3Npb19yZWFkX2J1bGtfY2FsbGJhY2sgIC0gbmVlZCB0byBleGFtaW5lIHdoYXQgdGhpcyAKKyAgICAgICAgICAgbWVhbnMgLSBkb24ndCBzZWUgYW55IHByb2JsZW1zIHlldCAqLworCQorCS8qIFNldCBudW1iZXIgb2YgZGF0YSBiaXRzLCBwYXJpdHksIHN0b3AgYml0cyAqLworCQorCXVyYl92YWx1ZSA9IDA7CisJdXJiX3ZhbHVlIHw9IChjZmxhZyAmIENTVE9QQiA/IEZURElfU0lPX1NFVF9EQVRBX1NUT1BfQklUU18yIDoKKwkJICAgICAgRlRESV9TSU9fU0VUX0RBVEFfU1RPUF9CSVRTXzEpOworCXVyYl92YWx1ZSB8PSAoY2ZsYWcgJiBQQVJFTkIgPyAKKwkJICAgICAgKGNmbGFnICYgUEFST0REID8gRlRESV9TSU9fU0VUX0RBVEFfUEFSSVRZX09ERCA6IAorCQkgICAgICAgRlRESV9TSU9fU0VUX0RBVEFfUEFSSVRZX0VWRU4pIDoKKwkJICAgICAgRlRESV9TSU9fU0VUX0RBVEFfUEFSSVRZX05PTkUpOworCWlmIChjZmxhZyAmIENTSVpFKSB7CisJCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgeworCQljYXNlIENTNTogdXJiX3ZhbHVlIHw9IDU7IGRiZygiU2V0dGluZyBDUzUiKTsgYnJlYWs7CisJCWNhc2UgQ1M2OiB1cmJfdmFsdWUgfD0gNjsgZGJnKCJTZXR0aW5nIENTNiIpOyBicmVhazsKKwkJY2FzZSBDUzc6IHVyYl92YWx1ZSB8PSA3OyBkYmcoIlNldHRpbmcgQ1M3Iik7IGJyZWFrOworCQljYXNlIENTODogdXJiX3ZhbHVlIHw9IDg7IGRiZygiU2V0dGluZyBDUzgiKTsgYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnIoIkNTSVpFIHdhcyBzZXQgYnV0IG5vdCBDUzUtQ1M4Iik7CisJCX0KKwl9CisKKwkvKiBUaGlzIGlzIG5lZWRlZCBieSB0aGUgYnJlYWsgY29tbWFuZCBzaW5jZSBpdCB1c2VzIHRoZSBzYW1lIGNvbW1hbmQgLSBidXQgaXMKKwkgKiAgb3InZWQgd2l0aCB0aGlzIHZhbHVlICAqLworCXByaXYtPmxhc3Rfc2V0X2RhdGFfdXJiX3ZhbHVlID0gdXJiX3ZhbHVlOworCQorCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCSAgICBGVERJX1NJT19TRVRfREFUQV9SRVFVRVNULCAKKwkJCSAgICBGVERJX1NJT19TRVRfREFUQV9SRVFVRVNUX1RZUEUsCisJCQkgICAgdXJiX3ZhbHVlICwgcHJpdi0+aW50ZXJmYWNlLAorCQkJICAgIGJ1ZiwgMCwgMTAwKSA8IDApIHsKKwkJZXJyKCIlcyBGQUlMRUQgdG8gc2V0IGRhdGFiaXRzL3N0b3BiaXRzL3Bhcml0eSIsIF9fRlVOQ1RJT05fXyk7CisJfQkgICAKKworCS8qIE5vdyBkbyB0aGUgYmF1ZHJhdGUgKi8KKwlpZiAoKGNmbGFnICYgQ0JBVUQpID09IEIwICkgeworCQkvKiBEaXNhYmxlIGZsb3cgY29udHJvbCAqLworCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkJICAgIEZURElfU0lPX1NFVF9GTE9XX0NUUkxfUkVRVUVTVCwgCisJCQkJICAgIEZURElfU0lPX1NFVF9GTE9XX0NUUkxfUkVRVUVTVF9UWVBFLAorCQkJCSAgICAwLCBwcml2LT5pbnRlcmZhY2UsIAorCQkJCSAgICBidWYsIDAsIFdEUl9USU1FT1VUKSA8IDApIHsKKwkJCWVycigiJXMgZXJyb3IgZnJvbSBkaXNhYmxlIGZsb3djb250cm9sIHVyYiIsIF9fRlVOQ1RJT05fXyk7CisJCX0JICAgIAorCQkvKiBEcm9wIFJUUyBhbmQgRFRSICovCisJCWlmIChzZXRfZHRyKHBvcnQsIExPVykgPCAwKXsKKwkJCWVycigiJXMgRXJyb3IgZnJvbSBEVFIgTE9XIHVyYiIsIF9fRlVOQ1RJT05fXyk7CisJCX0KKwkJaWYgKHNldF9ydHMocG9ydCwgTE9XKSA8IDApeworCQkJZXJyKCIlcyBFcnJvciBmcm9tIFJUUyBMT1cgdXJiIiwgX19GVU5DVElPTl9fKTsKKwkJfQkKKwkJCisJfSBlbHNlIHsKKwkJLyogc2V0IHRoZSBiYXVkcmF0ZSBkZXRlcm1pbmVkIGJlZm9yZSAqLworCQlpZiAoY2hhbmdlX3NwZWVkKHBvcnQpKSB7CisJCQllcnIoIiVzIHVyYiBmYWlsZWQgdG8gc2V0IGJhdXJkcmF0ZSIsIF9fRlVOQ1RJT05fXyk7CisJCX0KKwkJLyogRW5zdXJlICBSVFMgYW5kIERUUiBhcmUgcmFpc2VkICovCisJCWVsc2UgaWYgKHNldF9kdHIocG9ydCwgSElHSCkgPCAwKXsKKwkJCWVycigiJXMgRXJyb3IgZnJvbSBEVFIgSElHSCB1cmIiLCBfX0ZVTkNUSU9OX18pOworCQl9CisJCWVsc2UgaWYgKHNldF9ydHMocG9ydCwgSElHSCkgPCAwKXsKKwkJCWVycigiJXMgRXJyb3IgZnJvbSBSVFMgSElHSCB1cmIiLCBfX0ZVTkNUSU9OX18pOworCQl9CQorCX0KKworCS8qIFNldCBmbG93IGNvbnRyb2wgKi8KKwkvKiBOb3RlIGRldmljZSBhbHNvIHN1cHBvcnRzIERUUi9DRCAodWdoKSBhbmQgWG9uL1hvZmYgaW4gaGFyZHdhcmUgKi8KKwlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7CisJCWRiZygiJXMgU2V0dGluZyB0byBDUlRTQ1RTIGZsb3cgY29udHJvbCIsIF9fRlVOQ1RJT05fXyk7CisJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCAKKwkJCQkgICAgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkJICAgIEZURElfU0lPX1NFVF9GTE9XX0NUUkxfUkVRVUVTVCwgCisJCQkJICAgIEZURElfU0lPX1NFVF9GTE9XX0NUUkxfUkVRVUVTVF9UWVBFLAorCQkJCSAgICAwICwgKEZURElfU0lPX1JUU19DVFNfSFMgfCBwcml2LT5pbnRlcmZhY2UpLAorCQkJCSAgICBidWYsIDAsIFdEUl9USU1FT1VUKSA8IDApIHsKKwkJCWVycigidXJiIGZhaWxlZCB0byBzZXQgdG8gcnRzL2N0cyBmbG93IGNvbnRyb2wiKTsKKwkJfQkJCisJCQorCX0gZWxzZSB7IAorCQkvKgorCQkgKiBYb24vWG9mZiBjb2RlCisJCSAqCisJCSAqIENoZWNrIHRoZSBJWE9GRiBzdGF0dXMgaW4gdGhlIGlmbGFnIGNvbXBvbmVudCBvZiB0aGUgdGVybWlvcyBzdHJ1Y3R1cmUKKwkJICogaWYgSVhPRkYgaXMgbm90IHNldCwgdGhlIHByZS14b24veG9mZiBjb2RlIGlzIGV4ZWN1dGVkLgorCQkqLworCQlpZiAoaWZsYWcgJiBJWE9GRikgeworCQkJZGJnKCIlcyAgcmVxdWVzdCB0byBlbmFibGUgeG9ueG9mZiBpZmxhZz0lMDR4IixfX0ZVTkNUSU9OX18saWZsYWcpOworCQkJLy8gVHJ5IHRvIGVuYWJsZSB0aGUgWE9OL1hPRkYgb24gdGhlIGZ0ZGlfc2lvCisJCQkvLyBTZXQgdGhlIHZzdGFydCBhbmQgdnN0b3AgLS0gY291bGQgaGF2ZSBiZWVuIGRvbmUgdXAgYWJvdmUgd2hlcmUKKwkJCS8vIGEgbG90IG9mIG90aGVyIGRlcmVmZXJlbmNpbmcgaXMgZG9uZSBidXQgdGhhdCB3b3VsZCBiZSB2ZXJ5CisJCQkvLyBpbmVmZmljaWVudCBhcyB2c3RhcnQgYW5kIHZzdG9wIGFyZSBub3QgYWx3YXlzIG5lZWRlZAorCQkJdnN0YXJ0PXBvcnQtPnR0eS0+dGVybWlvcy0+Y19jY1tWU1RBUlRdOworCQkJdnN0b3A9cG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NjW1ZTVE9QXTsKKwkJCXVyYl92YWx1ZT0odnN0b3AgPDwgOCkgfCAodnN0YXJ0KTsKKworCQkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsCisJCQkJCSAgICB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCQkJICAgIEZURElfU0lPX1NFVF9GTE9XX0NUUkxfUkVRVUVTVCwKKwkJCQkJICAgIEZURElfU0lPX1NFVF9GTE9XX0NUUkxfUkVRVUVTVF9UWVBFLAorCQkJCQkgICAgdXJiX3ZhbHVlICwgKEZURElfU0lPX1hPTl9YT0ZGX0hTCisJCQkJCQkJIHwgcHJpdi0+aW50ZXJmYWNlKSwKKwkJCQkJICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpIDwgMCkgeworCQkJCWVycigidXJiIGZhaWxlZCB0byBzZXQgdG8geG9uL3hvZmYgZmxvdyBjb250cm9sIik7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBlbHNlIGNsYXVzZSB0byBvbmx5IHJ1biBpZiBjZmFnICEgQ1JUU0NUUyBhbmQgaWZsYWcgISBYT0ZGICovCisJCQkvKiBDSEVDS01FIEFzc3VtaW5nIFhPTi9YT0ZGIGhhbmRsZWQgYnkgdHR5IHN0YWNrIC0gbm90IGJ5IGRldmljZSAqLworCQkJZGJnKCIlcyBUdXJuaW5nIG9mZiBoYXJkd2FyZSBmbG93IGNvbnRyb2wiLCBfX0ZVTkNUSU9OX18pOworCQkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIAorCQkJCQkgICAgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkJCSAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1QsIAorCQkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNUX1RZUEUsCisJCQkJCSAgICAwLCBwcml2LT5pbnRlcmZhY2UsIAorCQkJCQkgICAgYnVmLCAwLCBXRFJfVElNRU9VVCkgPCAwKSB7CisJCQkJZXJyKCJ1cmIgZmFpbGVkIHRvIGNsZWFyIGZsb3cgY29udHJvbCIpOworCQkJfQkJCQkKKwkJfQorCQkKKwl9CisJcmV0dXJuOworfSAvKiBmdGRpX3Rlcm1pb3MgKi8KKworCitzdGF0aWMgaW50IGZ0ZGlfdGlvY21nZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgY2hhciBidWZbMl07CisJaW50IHJldDsKKworCWRiZygiJXMgVElPQ01HRVQiLCBfX0ZVTkNUSU9OX18pOworCXN3aXRjaCAocHJpdi0+Y2hpcF90eXBlKSB7CisJY2FzZSBTSU86CisJCS8qIFJlcXVlc3QgdGhlIHN0YXR1cyBmcm9tIHRoZSBkZXZpY2UgKi8KKwkJaWYgKChyZXQgPSB1c2JfY29udHJvbF9tc2cocG9ydC0+c2VyaWFsLT5kZXYsIAorCQkJCQkgICB1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJCQkgICBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTX1JFUVVFU1QsIAorCQkJCQkgICBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTX1JFUVVFU1RfVFlQRSwKKwkJCQkJICAgMCwgMCwgCisJCQkJCSAgIGJ1ZiwgMSwgV0RSX1RJTUVPVVQpKSA8IDAgKSB7CisJCQllcnIoIiVzIENvdWxkIG5vdCBnZXQgbW9kZW0gc3RhdHVzIG9mIGRldmljZSAtIGVycjogJWQiLCBfX0ZVTkNUSU9OX18sCisJCQkgICAgcmV0KTsKKwkJCXJldHVybihyZXQpOworCQl9CisJCWJyZWFrOworCWNhc2UgRlQ4VTIzMkFNOgorCWNhc2UgRlQyMzJCTToKKwljYXNlIEZUMjIzMkM6CisJCS8qIHRoZSA4VTIzMkFNIHJldHVybnMgYSB0d28gYnl0ZSB2YWx1ZSAodGhlIHNpbyBpcyBhIDEgYnl0ZSB2YWx1ZSkgLSBpbiB0aGUgc2FtZQorCQkgICBmb3JtYXQgYXMgdGhlIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgaW4gcG9pbnQgKi8KKwkJaWYgKChyZXQgPSB1c2JfY29udHJvbF9tc2cocG9ydC0+c2VyaWFsLT5kZXYsIAorCQkJCQkgICB1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJCQkgICBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTX1JFUVVFU1QsIAorCQkJCQkgICBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTX1JFUVVFU1RfVFlQRSwKKwkJCQkJICAgMCwgcHJpdi0+aW50ZXJmYWNlLCAKKwkJCQkJICAgYnVmLCAyLCBXRFJfVElNRU9VVCkpIDwgMCApIHsKKwkJCWVycigiJXMgQ291bGQgbm90IGdldCBtb2RlbSBzdGF0dXMgb2YgZGV2aWNlIC0gZXJyOiAlZCIsIF9fRlVOQ1RJT05fXywKKwkJCSAgICByZXQpOworCQkJcmV0dXJuKHJldCk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCX0KKwkKKwlyZXR1cm4gIChidWZbMF0gJiBGVERJX1NJT19EU1JfTUFTSyA/IFRJT0NNX0RTUiA6IDApIHwKKwkJKGJ1ZlswXSAmIEZURElfU0lPX0NUU19NQVNLID8gVElPQ01fQ1RTIDogMCkgfAorCQkoYnVmWzBdICAmIEZURElfU0lPX1JJX01BU0sgID8gVElPQ01fUkkgIDogMCkgfAorCQkoYnVmWzBdICAmIEZURElfU0lPX1JMU0RfTUFTSyA/IFRJT0NNX0NEICA6IDApIHwKKwkJcHJpdi0+bGFzdF9kdHJfcnRzOwkJCQorfQorCitzdGF0aWMgaW50IGZ0ZGlfdGlvY21zZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJaW50IHJldDsKKwkKKwlkYmcoIiVzIFRJT0NNU0VUIiwgX19GVU5DVElPTl9fKTsKKwlpZiAoc2V0ICYgVElPQ01fRFRSKXsKKwkJaWYgKChyZXQgPSBzZXRfZHRyKHBvcnQsIEhJR0gpKSA8IDApIHsKKwkJCWVycigiVXJiIHRvIHNldCBEVFIgZmFpbGVkIik7CisJCQlyZXR1cm4ocmV0KTsKKwkJfQorCX0KKwlpZiAoc2V0ICYgVElPQ01fUlRTKSB7CisJCWlmICgocmV0ID0gc2V0X3J0cyhwb3J0LCBISUdIKSkgPCAwKXsKKwkJCWVycigiVXJiIHRvIHNldCBSVFMgZmFpbGVkIik7CisJCQlyZXR1cm4ocmV0KTsKKwkJfQorCX0KKwkKKwlpZiAoY2xlYXIgJiBUSU9DTV9EVFIpeworCQlpZiAoKHJldCA9IHNldF9kdHIocG9ydCwgTE9XKSkgPCAwKXsKKwkJCWVycigiVXJiIHRvIHVuc2V0IERUUiBmYWlsZWQiKTsKKwkJCXJldHVybihyZXQpOworCQl9CisJfQkKKwlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpIHsKKwkJaWYgKChyZXQgPSBzZXRfcnRzKHBvcnQsIExPVykpIDwgMCl7CisJCQllcnIoIlVyYiB0byB1bnNldCBSVFMgZmFpbGVkIik7CisJCQlyZXR1cm4ocmV0KTsKKwkJfQorCX0KKwlyZXR1cm4oMCk7Cit9CisKKworc3RhdGljIGludCBmdGRpX2lvY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlpbnQgIHJldCwgbWFzazsKKwkKKwlkYmcoIiVzIGNtZCAweCUwNHgiLCBfX0ZVTkNUSU9OX18sIGNtZCk7CisKKwkvKiBCYXNlZCBvbiBjb2RlIGZyb20gYWNtLmMgYW5kIG90aGVycyAqLworCXN3aXRjaCAoY21kKSB7CisKKwljYXNlIFRJT0NNQklTOiAvKiB0dXJucyBvbiAoU2V0cykgdGhlIGxpbmVzIGFzIHNwZWNpZmllZCBieSB0aGUgbWFzayAqLworCQlkYmcoIiVzIFRJT0NNQklTIiwgX19GVU5DVElPTl9fKTsKKyAJICAgICAgICBpZiAoZ2V0X3VzZXIobWFzaywgKHVuc2lnbmVkIGxvbmcgX191c2VyICopIGFyZykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKyAgCSAgICAgICAgaWYgKG1hc2sgJiBUSU9DTV9EVFIpeworCQkJaWYgKChyZXQgPSBzZXRfZHRyKHBvcnQsIEhJR0gpKSA8IDApIHsKKwkJCQllcnIoIlVyYiB0byBzZXQgRFRSIGZhaWxlZCIpOworCQkJCXJldHVybihyZXQpOworCQkJfQorCQl9CisJCWlmIChtYXNrICYgVElPQ01fUlRTKSB7CisJCQlpZiAoKHJldCA9IHNldF9ydHMocG9ydCwgSElHSCkpIDwgMCl7CisJCQkJZXJyKCJVcmIgdG8gc2V0IFJUUyBmYWlsZWQiKTsKKwkJCQlyZXR1cm4ocmV0KTsKKwkJCX0KKwkJfQorCQlyZXR1cm4oMCk7CisJCWJyZWFrOworCisJY2FzZSBUSU9DTUJJQzogLyogdHVybnMgb2ZmIChDbGVhcnMpIHRoZSBsaW5lcyBhcyBzcGVjaWZpZWQgYnkgdGhlIG1hc2sgKi8KKwkJZGJnKCIlcyBUSU9DTUJJQyIsIF9fRlVOQ1RJT05fXyk7CisgCSAgICAgICAgaWYgKGdldF91c2VyKG1hc2ssICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKSBhcmcpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisgIAkgICAgICAgIGlmIChtYXNrICYgVElPQ01fRFRSKXsKKwkJCWlmICgocmV0ID0gc2V0X2R0cihwb3J0LCBMT1cpKSA8IDApeworCQkJCWVycigiVXJiIHRvIHVuc2V0IERUUiBmYWlsZWQiKTsKKwkJCQlyZXR1cm4ocmV0KTsKKwkJCX0KKwkJfQkKKwkJaWYgKG1hc2sgJiBUSU9DTV9SVFMpIHsKKwkJCWlmICgocmV0ID0gc2V0X3J0cyhwb3J0LCBMT1cpKSA8IDApeworCQkJCWVycigiVXJiIHRvIHVuc2V0IFJUUyBmYWlsZWQiKTsKKwkJCQlyZXR1cm4ocmV0KTsKKwkJCX0KKwkJfQorCQlyZXR1cm4oMCk7CisJCWJyZWFrOworCisJCS8qCisJCSAqIEkgaGFkIG9yaWdpbmFsbHkgaW1wbGVtZW50ZWQgVENTRVR7QSxTfXssRixXfSBhbmQKKwkJICogVENHRVR7QSxTfSBoZXJlIHNlcGFyYXRlbHksIGhvd2V2ZXIgd2hlbiB0ZXN0aW5nIEkKKwkJICogZm91bmQgdGhhdCB0aGUgaGlnaGVyIGxheWVycyBhY3R1YWxseSBkbyB0aGUgdGVybWlvcworCQkgKiBjb252ZXJzaW9ucyB0aGVtc2VsdmVzIGFuZCBwYXNzIHRoZSBjYWxsIG9udG8KKwkJICogZnRkaV9zaW9fc2V0X3Rlcm1pb3MuIAorCQkgKgorCQkgKi8KKworCWNhc2UgVElPQ0dTRVJJQUw6IC8qIGdldHMgc2VyaWFsIHBvcnQgZGF0YSAqLworCQlyZXR1cm4gZ2V0X3NlcmlhbF9pbmZvKHBvcnQsIChzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKikgYXJnKTsKKworCWNhc2UgVElPQ1NTRVJJQUw6IC8qIHNldHMgc2VyaWFsIHBvcnQgZGF0YSAqLworCQlyZXR1cm4gc2V0X3NlcmlhbF9pbmZvKHBvcnQsIChzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKikgYXJnKTsKKworCS8qCisJICogV2FpdCBmb3IgYW55IG9mIHRoZSA0IG1vZGVtIGlucHV0cyAoRENELFJJLERTUixDVFMpIHRvIGNoYW5nZQorCSAqIC0gbWFzayBwYXNzZWQgaW4gYXJnIGZvciBsaW5lcyBvZiBpbnRlcmVzdAorCSAqICAgKHVzZSB8J2VkIFRJT0NNX1JORy9EU1IvQ0QvQ1RTIGZvciBtYXNraW5nKQorCSAqIENhbGxlciBzaG91bGQgdXNlIFRJT0NHSUNPVU5UIHRvIHNlZSB3aGljaCBvbmUgaXQgd2FzLgorCSAqCisJICogVGhpcyBjb2RlIGlzIGJvcnJvd2VkIGZyb20gbGludXgvZHJpdmVycy9jaGFyL3NlcmlhbC5jCisJICovCisJY2FzZSBUSU9DTUlXQUlUOgorCQl3aGlsZSAocHJpdiAhPSBOVUxMKSB7CisJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CisJCQkvKiBzZWUgaWYgYSBzaWduYWwgZGlkIGl0ICovCisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJCWVsc2UgeworCQkJCWNoYXIgZGlmZiA9IHByaXYtPmRpZmZfc3RhdHVzOworCisJCQkJaWYgKGRpZmYgPT0gMCkgeworCQkJCQlyZXR1cm4gLUVJTzsgLyogbm8gY2hhbmdlID0+IGVycm9yICovCisJCQkJfQorCisJCQkJLyogQ29uc3VtZSBhbGwgZXZlbnRzICovCisJCQkJcHJpdi0+ZGlmZl9zdGF0dXMgPSAwOworCisJCQkJLyogUmV0dXJuIDAgaWYgY2FsbGVyIHdhbnRlZCB0byBrbm93IGFib3V0IHRoZXNlIGJpdHMgKi8KKwkJCQlpZiAoICgoYXJnICYgVElPQ01fUk5HKSAmJiAoZGlmZiAmIEZURElfUlMwX1JJKSkgfHwKKwkJCQkgICAgICgoYXJnICYgVElPQ01fRFNSKSAmJiAoZGlmZiAmIEZURElfUlMwX0RTUikpIHx8CisJCQkJICAgICAoKGFyZyAmIFRJT0NNX0NEKSAgJiYgKGRpZmYgJiBGVERJX1JTMF9STFNEKSkgfHwKKwkJCQkgICAgICgoYXJnICYgVElPQ01fQ1RTKSAmJiAoZGlmZiAmIEZURElfUlMwX0NUUykpICkgeworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQkJLyoKKwkJCQkgKiBPdGhlcndpc2UgY2FsbGVyIGNhbid0IGNhcmUgbGVzcyBhYm91dCB3aGF0IGhhcHBlbmVkLAorCQkJCSAqIGFuZCBzbyB3ZSBjb250aW51ZSB0byB3YWl0IGZvciBtb3JlIGV2ZW50cy4KKwkJCQkgKi8KKwkJCX0KKwkJfQorCQlyZXR1cm4oMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCQkKKwl9CisKKworCS8qIFRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IGFuIGVycm9yIC0gdHVybnMgb3V0IHRoZSBoaWdoZXIgbGF5ZXJzIHdpbGwgZG8gCisJICogIHNvbWUgaW9jdGxzIGl0c2VsZiAoc2VlIGNvbW1lbnQgYWJvdmUpCisJICovCisJZGJnKCIlcyBhcmcgbm90IHN1cHBvcnRlZCAtIGl0IHdhcyAweCUwNHggLSBjaGVjayAvdXNyL2luY2x1ZGUvYXNtL2lvY3Rscy5oIiwgX19GVU5DVElPTl9fLCBjbWQpOworCisJcmV0dXJuKC1FTk9JT0NUTENNRCk7Cit9IC8qIGZ0ZGlfaW9jdGwgKi8KKworCitzdGF0aWMgdm9pZCBmdGRpX3Rocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKKwlwcml2LT5yeF9mbGFncyB8PSBUSFJPVFRMRUQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOworfQorCisKK3N0YXRpYyB2b2lkIGZ0ZGlfdW50aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludCBhY3R1YWxseV90aHJvdHRsZWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKKwlhY3R1YWxseV90aHJvdHRsZWQgPSBwcml2LT5yeF9mbGFncyAmIEFDVFVBTExZX1RIUk9UVExFRDsKKwlwcml2LT5yeF9mbGFncyAmPSB+KFRIUk9UVExFRCB8IEFDVFVBTExZX1RIUk9UVExFRCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOworCisJaWYgKGFjdHVhbGx5X3Rocm90dGxlZCkKKwkJZnRkaV9wcm9jZXNzX3JlYWQocG9ydCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGZ0ZGlfaW5pdCAodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmZnRkaV9TSU9fZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF9TSU9fcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmZnRkaV84VTIzMkFNX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfOFUyMzJBTV9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZmdGRpX0ZUMjMyQk1fZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF9GVDIzMkJNX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmZ0ZGlfRlQyMjMyQ19kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX0ZUMjIzMkNfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmZnRkaV9VU0JfVUlSVF9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX1VTQl9VSVJUX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmZ0ZGlfSEVfVElSQTFfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF9IRV9USVJBMV9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmZ0ZGlfZHJpdmVyKTsKKwlpZiAocmV0dmFsKSAKKwkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOworCisJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXJldHVybiAwOworZmFpbGVkX3VzYl9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmZ0ZGlfSEVfVElSQTFfZGV2aWNlKTsKK2ZhaWxlZF9IRV9USVJBMV9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmZ0ZGlfVVNCX1VJUlRfZGV2aWNlKTsKK2ZhaWxlZF9VU0JfVUlSVF9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmZ0ZGlfRlQyMjMyQ19kZXZpY2UpOworZmFpbGVkX0ZUMjIzMkNfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZmdGRpX0ZUMjMyQk1fZGV2aWNlKTsKK2ZhaWxlZF9GVDIzMkJNX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmZnRkaV84VTIzMkFNX2RldmljZSk7CitmYWlsZWRfOFUyMzJBTV9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmZ0ZGlfU0lPX2RldmljZSk7CitmYWlsZWRfU0lPX3JlZ2lzdGVyOgorCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IGZ0ZGlfZXhpdCAodm9pZCkKK3sKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJdXNiX2RlcmVnaXN0ZXIgKCZmdGRpX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmZnRkaV9IRV9USVJBMV9kZXZpY2UpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmZ0ZGlfVVNCX1VJUlRfZGV2aWNlKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZmdGRpX0ZUMjIzMkNfZGV2aWNlKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZmdGRpX0ZUMjMyQk1fZGV2aWNlKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZmdGRpXzhVMjMyQU1fZGV2aWNlKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZmdGRpX1NJT19kZXZpY2UpOworCit9CisKKworbW9kdWxlX2luaXQoZnRkaV9pbml0KTsKK21vZHVsZV9leGl0KGZ0ZGlfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTVkNjBiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKQEAgLTAsMCArMSw3NzcgQEAKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgdGhlIEZUREkgVVNCIFNpbmdsZSBQb3J0IFNlcmlhbCBDb252ZXJ0ZXIgLSAKKyAqIGtub3duIGFzIEZURElfU0lPIChTZXJpYWwgSW5wdXQvT3V0cHV0IGFwcGxpY2F0aW9uIG9mIHRoZSBjaGlwc2V0KSAKKyAqCisgKiBUaGUgZXhhbXBsZSBJIGhhdmUgaXMga25vd24gYXMgdGhlIFVTQy0xMDAwIHdoaWNoIGlzIGF2YWlsYWJsZSBmcm9tCisgKiBodHRwOi8vd3d3LmRzZS5jby5ueiAtIGNhdCBubyBYSDQyMTQgSXQgbG9va3Mgc2ltaWxhciB0byB0aGlzOgorICogaHR0cDovL3d3dy5kYW5zZGF0YS5jb20vdXNic2VyLmh0bSBidXQgSSBjYW4ndCBiZSBzdXJlIFRoZXJlIGFyZSBvdGhlcgorICogVVNDLTEwMDBzIHdoaWNoIGRvbid0IGxvb2sgbGlrZSBteSBkZXZpY2UgdGhvdWdoIHNvIGJld2FyZSEKKyAqCisgKiBUaGUgZGV2aWNlIGlzIGJhc2VkIG9uIHRoZSBGVERJIEZUOFUxMDBBWCBjaGlwLiBJdCBoYXMgYSBEQjI1IG9uIG9uZSBzaWRlLCAKKyAqIFVTQiBvbiB0aGUgb3RoZXIuCisgKgorICogVGhhbnggdG8gRlRESSAoaHR0cDovL3d3dy5mdGRpLmNvLnVrKSBmb3Igc28ga2luZGx5IHByb3ZpZGluZyBkZXRhaWxzCisgKiBvZiB0aGUgcHJvdG9jb2wgcmVxdWlyZWQgdG8gdGFsayB0byB0aGUgZGV2aWNlIGFuZCBvbmdvaW5nIGFzc2lzdGVuY2UKKyAqIGR1cmluZyBkZXZlbG9wbWVudC4KKyAqCisgKiBCaWxsIFJ5ZGVyIC0gYnJ5ZGVyQHNnaS5jb20gZm9ybWVybHkgb2YgU2lsaWNvbiBHcmFwaGljcywgSW5jLi0gd3JvdGUgdGhlIAorICogRlRESV9TSU8gaW1wbGVtZW50YXRpb24uCisgKgorICogUGhpbGlwcCBH/GhyaW5nIC0gcGdAZnV0dXJld2FyZS5hdCAtIGFkZGVkIHRoZSBEZXZpY2UgSUQgb2YgdGhlIFVTQiByZWxhaXMKKyAqIGZyb20gUnVkb2xmIEd1Z2xlcgorICoKKyAqLworCisjZGVmaW5lIEZURElfVklECTB4MDQwMwkvKiBWZW5kb3IgSWQgKi8KKyNkZWZpbmUgRlRESV9TSU9fUElECTB4ODM3MgkvKiBQcm9kdWN0IElkIFNJTyBhcHBsaWNhdGlvbiBvZiA4VTEwMEFYICAqLworI2RlZmluZSBGVERJXzhVMjMyQU1fUElEIDB4NjAwMSAvKiBTaW1pbGFyIGRldmljZSB0byBTSU8gYWJvdmUgKi8KKyNkZWZpbmUgRlRESV84VTIzMkFNX0FMVF9QSUQgMHg2MDA2IC8qIEZUREkncyBhbHRlcm5hdGUgUElEIGZvciBhYm92ZSAqLworI2RlZmluZSBGVERJXzhVMjMyQU1fQUxUX0FMVF9QSUQgMHhmM2MwIC8qIEZUREkncyBzZWNvbmQgYWx0ZXJuYXRlIFBJRCBmb3IgYWJvdmUgKi8KKyNkZWZpbmUgRlRESV84VTIyMzJDX1BJRCAweDYwMTAgLyogRHVhbCBjaGFubmVsIGRldmljZSAqLworI2RlZmluZSBGVERJX1JFTEFJU19QSUQJMHhGQTEwICAvKiBSZWxhaXMgZGV2aWNlIGZyb20gUnVkb2xmIEd1Z2xlciAqLworI2RlZmluZSBGVERJX05GX1JJQ19WSUQJMHgwRENECS8qIFZlbmRvciBJZCAqLworI2RlZmluZSBGVERJX05GX1JJQ19QSUQJMHgwMDAxCS8qIFByb2R1Y3QgSWQgKi8KKworLyogd3d3LmlydHJhbnMuZGUgZGV2aWNlICovCisjZGVmaW5lIEZURElfSVJUUkFOU19QSUQgMHhGQzYwIC8qIFByb2R1Y3QgSWQgKi8KKworLyogd3d3LmNyeXN0YWxmb250ei5jb20gZGV2aWNlcyAtIHRoYW54IGZvciBwcm92aWRpbmcgZnJlZSBkZXZpY2VzIGZvciBldmFsdWF0aW9uICEgKi8KKy8qIHRoZXkgdXNlIHRoZSBmdGRpIGNoaXBzZXQgZm9yIHRoZSBVU0IgaW50ZXJmYWNlIGFuZCB0aGUgdmVuZG9yIGlkIGlzIHRoZSBzYW1lICovCisjZGVmaW5lIEZURElfWEZfNjMyX1BJRCAweEZDMDgJLyogNjMyOiAxNngyIENoYXJhY3RlciBEaXNwbGF5ICovCisjZGVmaW5lIEZURElfWEZfNjM0X1BJRCAweEZDMDkJLyogNjM0OiAyMHg0IENoYXJhY3RlciBEaXNwbGF5ICovCisjZGVmaW5lIEZURElfWEZfNTQ3X1BJRCAweEZDMEEJLyogNTQ3OiBUd28gbGluZSBEaXNwbGF5ICovCisjZGVmaW5lIEZURElfWEZfNjMzX1BJRCAweEZDMEIJLyogNjMzOiAxNngyIENoYXJhY3RlciBEaXNwbGF5IHdpdGggS2V5cyAqLworI2RlZmluZSBGVERJX1hGXzYzMV9QSUQgMHhGQzBDCS8qIDYzMTogMjB4MiBDaGFyYWN0ZXIgRGlzcGxheSAqLworI2RlZmluZSBGVERJX1hGXzYzNV9QSUQgMHhGQzBECS8qIDYzNTogMjB4NCBDaGFyYWN0ZXIgRGlzcGxheSAqLworI2RlZmluZSBGVERJX1hGXzY0MF9QSUQgMHhGQzBFCS8qIDY0MDogVHdvIGxpbmUgRGlzcGxheSAqLworI2RlZmluZSBGVERJX1hGXzY0Ml9QSUQgMHhGQzBGCS8qIDY0MjogVHdvIGxpbmUgRGlzcGxheSAqLworCisvKiBWaWRlbyBOZXR3b3JrcyBMaW1pdGVkIC8gSG9tZWNob2ljZSBpbiB0aGUgVUsgdXNlIGFuIGZ0ZGktYmFzZWQgZGV2aWNlIGZvciB0aGVpciAxTWIgKi8KKy8qIGJyb2FkYmFuZCBpbnRlcm5ldCBzZXJ2aWNlLiAgVGhlIGZvbGxvd2luZyBQSUQgaXMgZXhoaWJpdGVkIGJ5IHRoZSB1c2IgZGV2aWNlIHN1cHBsaWVkICovCisvKiAodGhlIFZJRCBpcyB0aGUgc3RhbmRhcmQgZnRkaSB2aWQgKEZURElfVklEKSAqLworI2RlZmluZSBGVERJX1ZOSENQQ1VTQl9EX1BJRCAweGZlMzggLyogUHJvZHVjdCBJZCAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBhcmUgdGhlIHZhbHVlcyBmb3IgdGhlIE1hdHJpeCBPcmJpdGFsIExDRCBkaXNwbGF5cywKKyAqIHdoaWNoIGFyZSB0aGUgRlQyMzJCTSAoIHNpbWlsYXIgdG8gdGhlIDhVMjMyQU0gKQorICovCisjZGVmaW5lIEZURElfTVRYT1JCXzBfUElEICAgICAgMHhGQTAwICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCisjZGVmaW5lIEZURElfTVRYT1JCXzFfUElEICAgICAgMHhGQTAxICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCisjZGVmaW5lIEZURElfTVRYT1JCXzJfUElEICAgICAgMHhGQTAyICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCisjZGVmaW5lIEZURElfTVRYT1JCXzNfUElEICAgICAgMHhGQTAzICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCisjZGVmaW5lIEZURElfTVRYT1JCXzRfUElEICAgICAgMHhGQTA0ICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCisjZGVmaW5lIEZURElfTVRYT1JCXzVfUElEICAgICAgMHhGQTA1ICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCisjZGVmaW5lIEZURElfTVRYT1JCXzZfUElEICAgICAgMHhGQTA2ICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCisKKy8qIEludGVyYmlvbWV0cmljcyBVU0IgSS9PIEJvYXJkICovCisvKiBEZXZlbG9wZWQgZm9yIEludGVyYmlvbWV0cmljcyBieSBSdWRvbGYgR3VnbGVyICovCisjZGVmaW5lIElOVEVSQklPTUVUUklDU19WSUQgICAgICAgICAgICAgIDB4MTIwOQorI2RlZmluZSBJTlRFUkJJT01FVFJJQ1NfSU9CT0FSRF9QSUQgICAgICAweDEwMDIKKyNkZWZpbmUgSU5URVJCSU9NRVRSSUNTX01JTklfSU9CT0FSRF9QSUQgMHgxMDA2CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgUGVybGUgU3lzdGVtcworICogVWx0cmFQb3J0IFVTQiBzZXJpYWwgY29udmVydGVycworICovCisjZGVmaW5lIEZURElfUEVSTEVfVUxUUkFQT1JUX1BJRCAweEYwQzAJLyogUGVybGUgVWx0cmFQb3J0IFByb2R1Y3QgSWQgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSBTZWFsZXZlbCBTZWFMSU5LKyBhZGFwdGVycy4KKyAqIChPcmlnaW5hbCBsaXN0IHNlbnQgYnkgVHVhbiBIb2FuZy4gIElhbiBBYmJvdHQgcmVuYW1lZCB0aGUgbWFjcm9zIGFuZAorICogcmVtb3ZlZCBzb21lIFBJRHMgdGhhdCBkb24ndCBzZWVtIHRvIG1hdGNoIGFueSBleGlzdGluZyBwcm9kdWN0cy4pCisgKi8KKyNkZWZpbmUgU0VBTEVWRUxfVklECQkweDBjNTIJLyogU2VhbGV2ZWwgVmVuZG9yIElEICovCisjZGVmaW5lIFNFQUxFVkVMXzIxMDFfUElECTB4MjEwMQkvKiBTZWFMSU5LKzIzMiAoMjEwMS8yMTA1KSAqLworI2RlZmluZSBTRUFMRVZFTF8yMTAyX1BJRAkweDIxMDIJLyogU2VhTElOSys0ODUgKDIxMDIpICovCisjZGVmaW5lIFNFQUxFVkVMXzIxMDNfUElECTB4MjEwMwkvKiBTZWFMSU5LKzIzMkkgKDIxMDMpICovCisjZGVmaW5lIFNFQUxFVkVMXzIxMDRfUElECTB4MjEwNAkvKiBTZWFMSU5LKzQ4NUkgKDIxMDQpICovCisjZGVmaW5lIFNFQUxFVkVMXzIyMDFfMV9QSUQJMHgyMjExCS8qIFNlYVBPUlQrMi8yMzIgKDIyMDEpIFBvcnQgMSAqLworI2RlZmluZSBTRUFMRVZFTF8yMjAxXzJfUElECTB4MjIyMQkvKiBTZWFQT1JUKzIvMjMyICgyMjAxKSBQb3J0IDIgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjIwMl8xX1BJRAkweDIyMTIJLyogU2VhUE9SVCsyLzQ4NSAoMjIwMikgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzIyMDJfMl9QSUQJMHgyMjIyCS8qIFNlYVBPUlQrMi80ODUgKDIyMDIpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yMjAzXzFfUElECTB4MjIxMwkvKiBTZWFQT1JUKzIgKDIyMDMpIFBvcnQgMSAqLworI2RlZmluZSBTRUFMRVZFTF8yMjAzXzJfUElECTB4MjIyMwkvKiBTZWFQT1JUKzIgKDIyMDMpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAxXzFfUElECTB4MjQxMQkvKiBTZWFQT1JUKzQvMjMyICgyNDAxKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwMV8yX1BJRAkweDI0MjEJLyogU2VhUE9SVCs0LzIzMiAoMjQwMSkgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDFfM19QSUQJMHgyNDMxCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgMyAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAxXzRfUElECTB4MjQ0MQkvKiBTZWFQT1JUKzQvMjMyICgyNDAxKSBQb3J0IDQgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwMl8xX1BJRAkweDI0MTIJLyogU2VhUE9SVCs0LzQ4NSAoMjQwMikgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDJfMl9QSUQJMHgyNDIyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAyXzNfUElECTB4MjQzMgkvKiBTZWFQT1JUKzQvNDg1ICgyNDAyKSBQb3J0IDMgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwMl80X1BJRAkweDI0NDIJLyogU2VhUE9SVCs0LzQ4NSAoMjQwMikgUG9ydCA0ICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDNfMV9QSUQJMHgyNDEzCS8qIFNlYVBPUlQrNCAoMjQwMykgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDNfMl9QSUQJMHgyNDIzCS8qIFNlYVBPUlQrNCAoMjQwMykgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDNfM19QSUQJMHgyNDMzCS8qIFNlYVBPUlQrNCAoMjQwMykgUG9ydCAzICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDNfNF9QSUQJMHgyNDQzCS8qIFNlYVBPUlQrNCAoMjQwMykgUG9ydCA0ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDFfMV9QSUQJMFgyODExCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgMSAqLworI2RlZmluZSBTRUFMRVZFTF8yODAxXzJfUElECTBYMjgyMQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDIgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMV8zX1BJRAkwWDI4MzEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCAzICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDFfNF9QSUQJMFgyODQxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgNCAqLworI2RlZmluZSBTRUFMRVZFTF8yODAxXzVfUElECTBYMjg1MQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDUgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMV82X1BJRAkwWDI4NjEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA2ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDFfN19QSUQJMFgyODcxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgNyAqLworI2RlZmluZSBTRUFMRVZFTF8yODAxXzhfUElECTBYMjg4MQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDggKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMl8xX1BJRAkwWDI4MTIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDJfMl9QSUQJMFgyODIyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yODAyXzNfUElECTBYMjgzMgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDMgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMl80X1BJRAkwWDI4NDIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA0ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDJfNV9QSUQJMFgyODUyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgNSAqLworI2RlZmluZSBTRUFMRVZFTF8yODAyXzZfUElECTBYMjg2MgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDYgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMl83X1BJRAkwWDI4NzIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA3ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDJfOF9QSUQJMFgyODgyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgOCAqLworI2RlZmluZSBTRUFMRVZFTF8yODAzXzFfUElECTBYMjgxMwkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgMSAqLworI2RlZmluZSBTRUFMRVZFTF8yODAzXzJfUElECTBYMjgyMyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDIgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwM18zX1BJRAkwWDI4MzMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCAzICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfNF9QSUQJMFgyODQzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgNCAqLworI2RlZmluZSBTRUFMRVZFTF8yODAzXzVfUElECTBYMjg1MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDUgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwM182X1BJRAkwWDI4NjMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCA2ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfN19QSUQJMFgyODczIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgNyAqLworI2RlZmluZSBTRUFMRVZFTF8yODAzXzhfUElECTBYMjg4MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDggKi8KKworLyoKKyAqIERTUy0yMCBTeW5jIFN0YXRpb24gZm9yIFNvbnkgRXJpY3Nzb24gUDgwMAorICovCisgCisjZGVmaW5lIEZURElfRFNTMjBfUElEICAgICAgICAgIDB4RkM4MiAgCisKKy8qCisgKiBIb21lIEVsZWN0cm9uaWNzICh3d3cuaG9tZS1lbGVjdHJvLmNvbSkgVVNCIGdhZGdldHMKKyAqLworI2RlZmluZSBGVERJX0hFX1RJUkExX1BJRAkweEZBNzgJLyogVGlyYS0xIElSIHRyYW5jZWl2ZXIgKi8KKworLyogVVNCLVVJUlQgLSBBbiBpbmZyYXJlZCByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIgdXNpbmcgdGhlIDhVMjMyQU0gY2hpcCAqLworLyogaHR0cDovL2hvbWUuZWFydGhsaW5rLm5ldC9+anJoZWVzL1VTQlVJUlQvaW5kZXguaHRtICovCisjZGVmaW5lIEZURElfVVNCX1VJUlRfUElECTB4Rjg1MAkvKiBQcm9kdWN0IElkICovCisKKy8qIEVMViBVU0IgTW9kdWxlIFVPMTAwIChQSUQgc2VudCBieSBTdGVmYW4gRnJpbmdzKSAqLworI2RlZmluZSBGVERJX0VMVl9VTzEwMF9QSUQJMHhGQjU4CS8qIFByb2R1Y3QgSWQgKi8KKworLyoKKyAqIERlZmluaXRpb25zIGZvciBJRCBURUNIICh3d3cuaWR0LW5ldC5jb20pIGRldmljZXMKKyAqLworI2RlZmluZSBJRFRFQ0hfVklECQkweDBBQ0QJLyogSUQgVEVDSCBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgSURURUNIX0lEVDEyMjFVX1BJRAkweDAzMDAJLyogSURUMTIyMVUgVVNCIHRvIFJTLTIzMiBhZGFwdGVyICovCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgT21uaWRpcmVjdGlvbmFsIENvbnRyb2wgVGVjaG5vbG9neSwgSW5jLiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgT0NUX1ZJRAkJCTB4MEIzOQkvKiBPQ1QgdmVuZG9yIElEICovCisvKiBOb3RlOiBPQ1QgVVMxMDEgaXMgYWxzbyByZWJhZGdlZCBhcyBEaWNrIFNtaXRoIEVsZWN0cm9uaWNzIChOWikgWEg2MzgxICovCisvKiBBbHNvIHJlYmFkZ2VkIGFzIFNJSUcgSW5jLiBtb2RlbCBVUzIzMDggKi8KKyNkZWZpbmUgT0NUX1VTMTAxX1BJRAkJMHgwNDIxCS8qIE9DVCBVUzEwMSBVU0IgdG8gUlMtMjMyICovCisKKy8qIGFuIGluZnJhcmVkIHJlY2VpdmVyIGZvciB1c2VyIGFjY2VzcyBjb250cm9sIHdpdGggSVIgdGFncyAqLworI2RlZmluZSBGVERJX1BJRUdST1VQX1BJRAkweEYyMDgJLyogUHJvZHVjdCBJZCAqLworCisvKgorICogUHJvdGVnbyBwcm9kdWN0IGlkcworICovCisjZGVmaW5lIFBST1RFR09fU1BFQ0lBTF8xCTB4RkM3MAkvKiBzcGVjaWFsL3Vua25vd24gZGV2aWNlICovCisjZGVmaW5lIFBST1RFR09fUjJYMAkJMHhGQzcxCS8qIFIyMDAtVVNCIFRSTkcgdW5pdCAoUjIxMCwgUjIyMCwgYW5kIFIyMzApICovCisjZGVmaW5lIFBST1RFR09fU1BFQ0lBTF8zCTB4RkM3MgkvKiBzcGVjaWFsL3Vua25vd24gZGV2aWNlICovCisjZGVmaW5lIFBST1RFR09fU1BFQ0lBTF80CTB4RkM3MwkvKiBzcGVjaWFsL3Vua25vd24gZGV2aWNlICovCisKKy8qCisgKiBHdWRlIEFuYWxvZy0gdW5kIERpZ2l0YWxzeXN0ZW1lIEdtYkgKKyAqLworI2RlZmluZSBGVERJX0dVREVBRFNfRTgwOF9QSUQgICAgMHhFODA4CisjZGVmaW5lIEZURElfR1VERUFEU19FODA5X1BJRCAgICAweEU4MDkKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4MEFfUElEICAgIDB4RTgwQQorI2RlZmluZSBGVERJX0dVREVBRFNfRTgwQl9QSUQgICAgMHhFODBCCisjZGVmaW5lIEZURElfR1VERUFEU19FODBDX1BJRCAgICAweEU4MEMKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4MERfUElEICAgIDB4RTgwRAorI2RlZmluZSBGVERJX0dVREVBRFNfRTgwRV9QSUQgICAgMHhFODBFCisjZGVmaW5lIEZURElfR1VERUFEU19FODBGX1BJRCAgICAweEU4MEYKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4ODhfUElEICAgIDB4RTg4OCAgLyogRXhwZXJ0IElTRE4gQ29udHJvbCBVU0IgKi8KKyNkZWZpbmUgRlRESV9HVURFQURTX0U4ODlfUElEICAgIDB4RTg4OSAgLyogVVNCIFJTLTIzMiBPcHRvQnJpZGdlICovCisjZGVmaW5lIEZURElfR1VERUFEU19FODhBX1BJRCAgICAweEU4OEEKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4OEJfUElEICAgIDB4RTg4QgorI2RlZmluZSBGVERJX0dVREVBRFNfRTg4Q19QSUQgICAgMHhFODhDCisjZGVmaW5lIEZURElfR1VERUFEU19FODhEX1BJRCAgICAweEU4OEQKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4OEVfUElEICAgIDB4RTg4RQorI2RlZmluZSBGVERJX0dVREVBRFNfRTg4Rl9QSUQgICAgMHhFODhGCisKKy8qCisgKiBMaW54IFRlY2hub2xvZ2llcyBwcm9kdWN0IGlkcworICovCisjZGVmaW5lIExJTlhfU0RNVVNCUVNTX1BJRAkweEY0NDgJLyogTGlueCBTRE0tVVNCLVFTLVMgKi8KKyNkZWZpbmUgTElOWF9NQVNURVJERVZFTDJfUElEICAgMHhGNDQ5ICAgLyogTGlueCBNYXN0ZXIgRGV2ZWxvcG1lbnQgMi4wICovCisjZGVmaW5lIExJTlhfRlVUVVJFXzBfUElEICAgMHhGNDRBICAgLyogTGlueCBmdXR1cmUgZGV2aWNlICovCisjZGVmaW5lIExJTlhfRlVUVVJFXzFfUElEICAgMHhGNDRCICAgLyogTGlueCBmdXR1cmUgZGV2aWNlICovCisjZGVmaW5lIExJTlhfRlVUVVJFXzJfUElEICAgMHhGNDRDICAgLyogTGlueCBmdXR1cmUgZGV2aWNlICovCisKKy8qIENDUyBJbmMuIElDRFUvSUNEVTQwIHByb2R1Y3QgSUQgLSB0aGUgRlQyMzJCTSBpcyB1c2VkIGluIGFuIGluLWNpcmN1aXQtZGVidWdnZXIgKi8KKy8qIHVuaXQgZm9yIFBJQzE2J3MvUElDMTgncyAqLworI2RlZmluZSBGVERJX0NDU0lDRFUyMF8wX1BJRCAgICAweEY5RDAgICAgIAorI2RlZmluZSBGVERJX0NDU0lDRFU0MF8xX1BJRCAgICAweEY5RDEgICAgIAorCisvKiBJbnNpZGUgQWNjZXNzbyBjb250YWN0bGVzcyByZWFkZXIgKGh0dHA6Ly93d3cuaW5zaWRlZnIuY29tKSAqLworI2RlZmluZSBJTlNJREVfQUNDRVNTTwkJMHhGQUQwCisKKy8qCisgKiBJbnRyZXBpZCBDb250cm9sIFN5c3RlbXMgKGh0dHA6Ly93d3cuaW50cmVwaWRjcy5jb20vKSBWYWx1ZUNBTiBhbmQgTmVvVkkKKyAqLworI2RlZmluZSBJTlRSRVBJRF9WSUQJCTB4MDkzQworI2RlZmluZSBJTlRSRVBJRF9WQUxVRUNBTl9QSUQJMHgwNjAxCisjZGVmaW5lIElOVFJFUElEX05FT1ZJX1BJRAkweDA3MDEKKworLyoKKyAqIEZhbGNvbSBXaXJlbGVzcyBDb21tdW5pY2F0aW9ucyBHbWJICisgKi8KKyNkZWZpbmUgRkFMQ09NX1ZJRAkJMHgwRjk0CS8qIFZlbmRvciBJZCAqLworI2RlZmluZSBGQUxDT01fVFdJU1RfUElECTB4MDAwMQkvKiBGYWxjb20gVHdpc3QgVVNCIEdQUlMgbW9kZW0gKi8KKworLyoKKyAqIFNVVU5UTyBwcm9kdWN0IGlkcworICovCisjZGVmaW5lIEZURElfU1VVTlRPX1NQT1JUU19QSUQJMHhGNjgwCS8qIFN1dW50byBTcG9ydHMgaW5zdHJ1bWVudCAqLworCisvKgorICogRGVmaW5pdGlvbnMgZm9yIEImQiBFbGVjdHJvbmljcyBwcm9kdWN0cy4KKyAqLworI2RlZmluZSBCQU5EQl9WSUQJCTB4MDg1NgkvKiBCJkIgRWxlY3Ryb25pY3MgVmVuZG9yIElEICovCisjZGVmaW5lIEJBTkRCX1VTT1RMNF9QSUQJMHhBQzAxCS8qIFVTT1RMNCBJc29sYXRlZCBSUy00ODUgQ29udmVydGVyICovCisjZGVmaW5lIEJBTkRCX1VTVEw0X1BJRAkJMHhBQzAyCS8qIFVTVEw0IFJTLTQ4NSBDb252ZXJ0ZXIgKi8KKyNkZWZpbmUgQkFOREJfVVNPOU1MMl9QSUQJMHhBQzAzCS8qIFVTTzlNTDIgSXNvbGF0ZWQgUlMtMjMyIENvbnZlcnRlciAqLworCisvKgorICogUk0gTWljaGFlbGlkZXMgQ0FOdmlldyBVU0IgKGh0dHA6Ly93d3cucm1jYW4uY29tKQorICogQ0FOIGZpbGVkYnVzIGludGVyZmFjZSBhZGFwdGVyLCBhZGRhZCBieSBwb3J0IEdtYkggd3d3LnBvcnQuZGUpCisgKi8KKyNkZWZpbmUgRlRESV9STV9WSUQJCTB4MDQwMwkvKiBWZW5kb3IgIElkICovCisjZGVmaW5lIEZURElfUk1DQU5WSUVXX1BJRAkweGZkNjAJLyogUHJvZHVjdCBJZCAqLworCisvKgorICogRVZFUiBFY28gUHJvIFVQUyAoaHR0cDovL3d3dy5ldmVyLmNvbS5wbC8pCisgKi8KKworI2RlZmluZQlFVkVSX0VDT19QUk9fQ0RTCTB4ZTUyMAkvKiBSUy0yMzIgY29udmVydGVyICovCisKKy8qIENvbW1hbmRzICovCisjZGVmaW5lIEZURElfU0lPX1JFU0VUIAkJMCAvKiBSZXNldCB0aGUgcG9ydCAqLworI2RlZmluZSBGVERJX1NJT19NT0RFTV9DVFJMIAkxIC8qIFNldCB0aGUgbW9kZW0gY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBGVERJX1NJT19TRVRfRkxPV19DVFJMCTIgLyogU2V0IGZsb3cgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBGVERJX1NJT19TRVRfQkFVRF9SQVRFCTMgLyogU2V0IGJhdWQgcmF0ZSAqLworI2RlZmluZSBGVERJX1NJT19TRVRfREFUQQk0IC8qIFNldCB0aGUgZGF0YSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHBvcnQgKi8KKyNkZWZpbmUgRlRESV9TSU9fR0VUX01PREVNX1NUQVRVUwk1IC8qIFJldHJpZXZlIGN1cnJlbnQgdmFsdWUgb2YgbW9kZXJuIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBGVERJX1NJT19TRVRfRVZFTlRfQ0hBUgk2IC8qIFNldCB0aGUgZXZlbnQgY2hhcmFjdGVyICovCisjZGVmaW5lIEZURElfU0lPX1NFVF9FUlJPUl9DSEFSCTcgLyogU2V0IHRoZSBlcnJvciBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgRlRESV9TSU9fU0VUX0xBVEVOQ1lfVElNRVIJOSAvKiBTZXQgdGhlIGxhdGVuY3kgdGltZXIgKi8KKyNkZWZpbmUgRlRESV9TSU9fR0VUX0xBVEVOQ1lfVElNRVIJMTAgLyogR2V0IHRoZSBsYXRlbmN5IHRpbWVyICovCisKKy8qIFBvcnQgaW50ZXJmYWNlIGNvZGUgZm9yIEZUMjIzMkMgKi8KKyNkZWZpbmUgSU5URVJGQUNFX0EJCTEKKyNkZWZpbmUgSU5URVJGQUNFX0IJCTIKKworCisvKgorICogICBCbVJlcXVlc3RUeXBlOiAgMTEwMCAwMDAwYgorICogICBiUmVxdWVzdDogICAgICAgRlRESV9FMl9SRUFECisgKiAgIHdWYWx1ZTogICAgICAgICAwCisgKiAgIHdJbmRleDogICAgICAgICBBZGRyZXNzIG9mIHdvcmQgdG8gcmVhZAorICogICB3TGVuZ3RoOiAgICAgICAgMgorICogICBEYXRhOiAgICAgICAgICAgV2lsbCByZXR1cm4gYSB3b3JkIG9mIGRhdGEgZnJvbSBFMkFkZHJlc3MKKyAqCisgKi8KKworLyogUG9ydCBJZGVudGlmaWVyIFRhYmxlICovCisjZGVmaW5lIFBJVF9ERUZBVUxUIAkJMCAvKiBTSU9BICovCisjZGVmaW5lIFBJVF9TSU9BCQkxIC8qIFNJT0EgKi8KKy8qIFRoZSBkZXZpY2UgdGhpcyBkcml2ZXIgaXMgdGVzdGVkIHdpdGggb25lIGhhcyBvbmx5IG9uZSBwb3J0ICovCisjZGVmaW5lIFBJVF9TSU9CCQkyIC8qIFNJT0IgKi8KKyNkZWZpbmUgUElUX1BBUkFMTEVMCQkzIC8qIFBhcmFsbGVsICovCisKKy8qIEZURElfU0lPX1JFU0VUICovCisjZGVmaW5lIEZURElfU0lPX1JFU0VUX1JFUVVFU1QgRlRESV9TSU9fUkVTRVQKKyNkZWZpbmUgRlRESV9TSU9fUkVTRVRfUkVRVUVTVF9UWVBFIDB4NDAKKyNkZWZpbmUgRlRESV9TSU9fUkVTRVRfU0lPIDAKKyNkZWZpbmUgRlRESV9TSU9fUkVTRVRfUFVSR0VfUlggMQorI2RlZmluZSBGVERJX1NJT19SRVNFVF9QVVJHRV9UWCAyCisKKy8qCisgKiBCbVJlcXVlc3RUeXBlOiAgMDEwMCAwMDAwQgorICogYlJlcXVlc3Q6ICAgICAgIEZURElfU0lPX1JFU0VUCisgKiB3VmFsdWU6ICAgICAgICAgQ29udHJvbCBWYWx1ZSAKKyAqICAgICAgICAgICAgICAgICAgIDAgPSBSZXNldCBTSU8KKyAqICAgICAgICAgICAgICAgICAgIDEgPSBQdXJnZSBSWCBidWZmZXIKKyAqICAgICAgICAgICAgICAgICAgIDIgPSBQdXJnZSBUWCBidWZmZXIKKyAqIHdJbmRleDogICAgICAgICBQb3J0CisgKiB3TGVuZ3RoOiAgICAgICAgMAorICogRGF0YTogICAgICAgICAgIE5vbmUKKyAqCisgKiBUaGUgUmVzZXQgU0lPIGNvbW1hbmQgaGFzIHRoaXMgZWZmZWN0OgorICoKKyAqICAgIFNldHMgZmxvdyBjb250cm9sIHNldCB0byAnbm9uZScKKyAqICAgIEV2ZW50IGNoYXIgPSAkMEQKKyAqICAgIEV2ZW50IHRyaWdnZXIgPSBkaXNhYmxlZAorICogICAgUHVyZ2UgUlggYnVmZmVyCisgKiAgICBQdXJnZSBUWCBidWZmZXIKKyAqICAgIENsZWFyIERUUgorICogICAgQ2xlYXIgUlRTCisgKiAgICBiYXVkIGFuZCBkYXRhIGZvcm1hdCBub3QgcmVzZXQKKyAqCisgKiBUaGUgUHVyZ2UgUlggYW5kIFRYIGJ1ZmZlciBjb21tYW5kcyBhZmZlY3Qgbm90aGluZyBleGNlcHQgdGhlIGJ1ZmZlcnMKKyAqCisgICAqLworCisvKiBGVERJX1NJT19TRVRfQkFVRFJBVEUgKi8KKyNkZWZpbmUgRlRESV9TSU9fU0VUX0JBVURSQVRFX1JFUVVFU1RfVFlQRSAweDQwCisjZGVmaW5lIEZURElfU0lPX1NFVF9CQVVEUkFURV9SRVFVRVNUIDMKKworLyoKKyAqIEJtUmVxdWVzdFR5cGU6ICAwMTAwIDAwMDBCCisgKiBiUmVxdWVzdDogICAgICAgRlRESV9TSU9fU0VUX0JBVURSQVRFCisgKiB3VmFsdWU6ICAgICAgICAgQmF1ZERpdmlzb3IgdmFsdWUgLSBzZWUgYmVsb3cKKyAqIHdJbmRleDogICAgICAgICBQb3J0CisgKiB3TGVuZ3RoOiAgICAgICAgMAorICogRGF0YTogICAgICAgICAgIE5vbmUKKyAqIFRoZSBCYXVkRGl2aXNvciB2YWx1ZXMgYXJlIGNhbGN1bGF0ZWQgYXMgZm9sbG93czoKKyAqIC0gQmFzZUNsb2NrIGlzIGVpdGhlciAxMjAwMDAwMCBvciA0ODAwMDAwMCBkZXBlbmRpbmcgb24gdGhlIGRldmljZS4gRklYTUU6IEkgd2lzaAorICogICBJIGtuZXcgaG93IHRvIGRldGVjdCBvbGQgY2hpcHMgdG8gc2VsZWN0IHByb3BlciBiYXNlIGNsb2NrIQorICogLSBCYXVkRGl2aXNvciBpcyBhIGZpeGVkIHBvaW50IG51bWJlciBlbmNvZGVkIGluIGEgZnVubnkgd2F5LgorICogICAoLS1XUk9ORyBXQVkgT0YgVEhJTktJTkctLSkKKyAqICAgQmF1ZERpdmlzb3IgaXMgYSBmaXhlZCBwb2ludCBudW1iZXIgZW5jb2RlZCB3aXRoIGZvbGxvd2luZyBiaXQgd2VpZ2hzOgorICogICAoLTIpKC0xKSgxMy4uMCkuIEl0IGlzIGEgcmFkaWNhbCB3aXRoIGEgZGVub21pbmF0b3Igb2YgNCwgc28gdmFsdWVzCisgKiAgIGVuZCB3aXRoIDAuMCAoMDAuLi4pLCAwLjI1ICgxMC4uLiksIDAuNSAoMDEuLi4pLCBhbmQgMC43NSAoMTEuLi4pLgorICogICAoLS1USEUgUkVBTElUWS0tKQorICogICBUaGUgYm90aC1iaXRzLXNldCBoYXMgcXVpdGUgZGlmZmVyZW50IG1lYW5pbmcgZnJvbSAwLjc1IC0gdGhlIGNoaXAgZGVzaWduZXJzCisgKiAgIGhhdmUgZGVjaWRlZCBpdCB0byBtZWFuIDAuMTI1IGluc3RlYWQgb2YgMC43NS4KKyAqICAgVGhpcyBpbmZvIGxvb2tlZCB1cCBpbiBGVERJIGFwcGxpY2F0aW9uIG5vdGUgIkZUOFUyMzIgREVWSUNFUyBcIERhdGEgUmF0ZXMKKyAqICAgYW5kIEZsb3cgQ29udHJvbCBDb25zaWRlcmF0aW9uIGZvciBVU0IgdG8gUlMyMzIiLgorICogLSBCYXVkRGl2aXNvciA9IChCYXNlQ2xvY2sgLyAxNikgLyBCYXVkUmF0ZSwgd2hlcmUgdGhlICg9KSBvcGVyYXRpb24gc2hvdWxkCisgKiAgIGF1dG9tYWdpY2FsbHkgcmUtZW5jb2RlIHRoZSByZXN1bHRpbmcgdmFsdWUgdG8gdGFrZSBmcmFjdGlvbnMgaW50byBjb25zaWRlcmF0aW9uLgorICogQXMgYWxsIHZhbHVlcyBhcmUgaW50ZWdlcnMsIHNvbWUgYml0IHR3aWRkbGluZyBpcyBpbiBvcmRlcjoKKyAqICAgQmF1ZERpdmlzb3IgPSAoQmFzZUNsb2NrIC8gMTYgLyBCYXVkUmF0ZSkgfAorICogICAoKChCYXNlQ2xvY2sgLyAyIC8gQmF1ZFJhdGUpICYgNCkgPyAweDQwMDAgICAgLy8gMC41CisgKiAgICA6ICgoQmFzZUNsb2NrIC8gMiAvIEJhdWRSYXRlKSAmIDIpID8gMHg4MDAwICAvLyAwLjI1CisgKiAgICA6ICgoQmFzZUNsb2NrIC8gMiAvIEJhdWRSYXRlKSAmIDEpID8gMHhjMDAwICAvLyAwLjEyNQorICogICAgOiAwKQorICoKKyAqIEZvciB0aGUgRlQyMzJCTSwgYSAxN3RoIGRpdmlzb3IgYml0IHdhcyBpbnRyb2R1Y2VkIHRvIGVuY29kZSB0aGUgbXVsdGlwbGVzCisgKiBvZiAwLjEyNSBtaXNzaW5nIGZyb20gdGhlIEZUOFUyMzJBTS4gIEJpdHMgMTYgdG8gMTQgYXJlIGNvZGVkIGFzIGZvbGxvd3MKKyAqICh0aGUgZmlyc3QgZm91ciBjb2RlcyBhcmUgdGhlIHNhbWUgYXMgZm9yIHRoZSBGVDhVMjMyQU0sIHdoZXJlIGJpdCAxNiBpcworICogYWx3YXlzIDApOgorICogICAwMDAgLSBhZGQgLjAwMCB0byBkaXZpc29yCisgKiAgIDAwMSAtIGFkZCAuNTAwIHRvIGRpdmlzb3IKKyAqICAgMDEwIC0gYWRkIC4yNTAgdG8gZGl2aXNvcgorICogICAwMTEgLSBhZGQgLjEyNSB0byBkaXZpc29yCisgKiAgIDEwMCAtIGFkZCAuMzc1IHRvIGRpdmlzb3IKKyAqICAgMTAxIC0gYWRkIC42MjUgdG8gZGl2aXNvcgorICogICAxMTAgLSBhZGQgLjc1MCB0byBkaXZpc29yCisgKiAgIDExMSAtIGFkZCAuODc1IHRvIGRpdmlzb3IKKyAqIEJpdHMgMTUgdG8gMCBvZiB0aGUgMTctYml0IGRpdmlzb3IgYXJlIHBsYWNlZCBpbiB0aGUgdXJiIHZhbHVlLiAgQml0IDE2IGlzIAorICogcGxhY2VkIGluIGJpdCAwIG9mIHRoZSB1cmIgaW5kZXguCisgKgorICogTm90ZSB0aGF0IHRoZXJlIGFyZSBhIGNvdXBsZSBvZiBzcGVjaWFsIGNhc2VzIHRvIHN1cHBvcnQgdGhlIGhpZ2hlc3QgYmF1ZAorICogcmF0ZXMuICBJZiB0aGUgY2FsY3VsYXRlZCBkaXZpc29yIHZhbHVlIGlzIDEsIHRoaXMgbmVlZHMgdG8gYmUgcmVwbGFjZWQgd2l0aAorICogMC4gIEFkZGl0aW9uYWxseSBmb3IgdGhlIEZUMjMyQk0sIGlmIHRoZSBjYWxjdWxhdGVkIGRpdmlzb3IgdmFsdWUgaXMgMHg0MDAxCisgKiAoMS41KSwgdGhpcyBuZWVkcyB0byBiZSByZXBsYWNlZCB3aXRoIDB4MDAwMSAoMSkgKGJ1dCB0aGlzIGRpdmlzb3IgdmFsdWUgaXMKKyAqIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIEZUOFUyMzJBTSkuCisgKi8KKwordHlwZWRlZiBlbnVtIHsKKwlTSU8gPSAxLAorCUZUOFUyMzJBTSA9IDIsCisJRlQyMzJCTSA9IDMsCisJRlQyMjMyQyA9IDQsCit9IGZ0ZGlfY2hpcF90eXBlX3Q7CisKK3R5cGVkZWYgZW51bSB7CisgZnRkaV9zaW9fYjMwMCA9IDAsIAorIGZ0ZGlfc2lvX2I2MDAgPSAxLCAKKyBmdGRpX3Npb19iMTIwMCA9IDIsCisgZnRkaV9zaW9fYjI0MDAgPSAzLAorIGZ0ZGlfc2lvX2I0ODAwID0gNCwKKyBmdGRpX3Npb19iOTYwMCA9IDUsCisgZnRkaV9zaW9fYjE5MjAwID0gNiwKKyBmdGRpX3Npb19iMzg0MDAgPSA3LAorIGZ0ZGlfc2lvX2I1NzYwMCA9IDgsCisgZnRkaV9zaW9fYjExNTIwMCA9IDkKK30gRlRESV9TSU9fYmF1ZHJhdGVfdCA7CisKKy8qCisgKiBUaGUgZnRkaV84VTIzMkFNX3h4TUh6X2J5eXkgY29uc3RhbnRzIGhhdmUgYmVlbiByZW1vdmVkLiBUaGUgZW5jb2RlZCBkaXZpc29yIHZhbHVlcworICogYXJlIGNhbGN1bGF0ZWQgaW50ZXJuYWxseS4KKyAqLworCisjZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1JFUVVFU1QgRlRESV9TSU9fU0VUX0RBVEEKKyNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfUkVRVUVTVF9UWVBFIDB4NDAKKyNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfUEFSSVRZX05PTkUgKDB4MCA8PCA4ICkKKyNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfUEFSSVRZX09ERCAoMHgxIDw8IDggKQorI2RlZmluZSBGVERJX1NJT19TRVRfREFUQV9QQVJJVFlfRVZFTiAoMHgyIDw8IDggKQorI2RlZmluZSBGVERJX1NJT19TRVRfREFUQV9QQVJJVFlfTUFSSyAoMHgzIDw8IDggKQorI2RlZmluZSBGVERJX1NJT19TRVRfREFUQV9QQVJJVFlfU1BBQ0UgKDB4NCA8PCA4ICkKKyNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfU1RPUF9CSVRTXzEgKDB4MCA8PCAxMSApCisjZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1NUT1BfQklUU18xNSAoMHgxIDw8IDExICkKKyNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfU1RPUF9CSVRTXzIgKDB4MiA8PCAxMSApCisjZGVmaW5lIEZURElfU0lPX1NFVF9CUkVBSyAoMHgxIDw8IDE0KQorLyogRlRESV9TSU9fU0VUX0RBVEEgKi8KKworLyoKKyAqIEJtUmVxdWVzdFR5cGU6ICAwMTAwIDAwMDBCIAorICogYlJlcXVlc3Q6ICAgICAgIEZURElfU0lPX1NFVF9EQVRBCisgKiB3VmFsdWU6ICAgICAgICAgRGF0YSBjaGFyYWN0ZXJpc3RpY3MgKHNlZSBiZWxvdykKKyAqIHdJbmRleDogICAgICAgICBQb3J0CisgKiB3TGVuZ3RoOiAgICAgICAgMAorICogRGF0YTogICAgICAgICAgIE5vCisgKgorICogRGF0YSBjaGFyYWN0ZXJpc3RpY3MKKyAqCisgKiAgIEIwLi43ICAgTnVtYmVyIG9mIGRhdGEgYml0cworICogICBCOC4uMTAgIFBhcml0eQorICogICAgICAgICAgIDAgPSBOb25lCisgKiAgICAgICAgICAgMSA9IE9kZAorICogICAgICAgICAgIDIgPSBFdmVuCisgKiAgICAgICAgICAgMyA9IE1hcmsKKyAqICAgICAgICAgICA0ID0gU3BhY2UKKyAqICAgQjExLi4xMyBTdG9wIEJpdHMKKyAqICAgICAgICAgICAwID0gMQorICogICAgICAgICAgIDEgPSAxLjUKKyAqICAgICAgICAgICAyID0gMgorICogICBCMTQKKyAqICAgICAgICAgICAxID0gVFggT04gKGJyZWFrKQorICogICAgICAgICAgIDAgPSBUWCBPRkYgKG5vcm1hbCBzdGF0ZSkKKyAqICAgQjE1IFJlc2VydmVkCisgKgorICovCisKKworCisvKiBGVERJX1NJT19NT0RFTV9DVFJMICovCisjZGVmaW5lIEZURElfU0lPX1NFVF9NT0RFTV9DVFJMX1JFUVVFU1RfVFlQRSAweDQwCisjZGVmaW5lIEZURElfU0lPX1NFVF9NT0RFTV9DVFJMX1JFUVVFU1QgRlRESV9TSU9fTU9ERU1fQ1RSTAorCisvKiAKKyAqIEJtUmVxdWVzdFR5cGU6ICAgMDEwMCAwMDAwQgorICogYlJlcXVlc3Q6ICAgICAgICBGVERJX1NJT19NT0RFTV9DVFJMCisgKiB3VmFsdWU6ICAgICAgICAgIENvbnRyb2xWYWx1ZSAoc2VlIGJlbG93KQorICogd0luZGV4OiAgICAgICAgICBQb3J0CisgKiB3TGVuZ3RoOiAgICAgICAgIDAKKyAqIERhdGE6ICAgICAgICAgICAgTm9uZQorICoKKyAqIE5PVEU6IElmIHRoZSBkZXZpY2UgaXMgaW4gUlRTL0NUUyBmbG93IGNvbnRyb2wsIHRoZSBSVFMgc2V0IGJ5IHRoaXMKKyAqIGNvbW1hbmQgd2lsbCBiZSBJR05PUkVEIHdpdGhvdXQgYW4gZXJyb3IgYmVpbmcgcmV0dXJuZWQKKyAqIEFsc28gLSB5b3UgY2FuIG5vdCBzZXQgRFRSIGFuZCBSVFMgd2l0aCBvbmUgY29udHJvbCBtZXNzYWdlCisgKi8KKworI2RlZmluZSBGVERJX1NJT19TRVRfRFRSX01BU0sgMHgxCisjZGVmaW5lIEZURElfU0lPX1NFVF9EVFJfSElHSCAoIDEgfCAoIEZURElfU0lPX1NFVF9EVFJfTUFTSyAgPDwgOCkpCisjZGVmaW5lIEZURElfU0lPX1NFVF9EVFJfTE9XICAoIDAgfCAoIEZURElfU0lPX1NFVF9EVFJfTUFTSyAgPDwgOCkpCisjZGVmaW5lIEZURElfU0lPX1NFVF9SVFNfTUFTSyAweDIKKyNkZWZpbmUgRlRESV9TSU9fU0VUX1JUU19ISUdIICggMiB8ICggRlRESV9TSU9fU0VUX1JUU19NQVNLIDw8IDggKSkKKyNkZWZpbmUgRlRESV9TSU9fU0VUX1JUU19MT1cgKCAwIHwgKCBGVERJX1NJT19TRVRfUlRTX01BU0sgPDwgOCApKQorCisvKgorICogQ29udHJvbFZhbHVlCisgKiBCMCAgICBEVFIgc3RhdGUKKyAqICAgICAgICAgIDAgPSByZXNldAorICogICAgICAgICAgMSA9IHNldAorICogQjEgICAgUlRTIHN0YXRlCisgKiAgICAgICAgICAwID0gcmVzZXQKKyAqICAgICAgICAgIDEgPSBzZXQKKyAqIEIyLi43IFJlc2VydmVkCisgKiBCOCAgICBEVFIgc3RhdGUgZW5hYmxlCisgKiAgICAgICAgICAwID0gaWdub3JlCisgKiAgICAgICAgICAxID0gdXNlIERUUiBzdGF0ZQorICogQjkgICAgUlRTIHN0YXRlIGVuYWJsZQorICogICAgICAgICAgMCA9IGlnbm9yZQorICogICAgICAgICAgMSA9IHVzZSBSVFMgc3RhdGUKKyAqIEIxMC4uMTUgUmVzZXJ2ZWQKKyAqLworCisvKiBGVERJX1NJT19TRVRfRkxPV19DVFJMICovCisjZGVmaW5lIEZURElfU0lPX1NFVF9GTE9XX0NUUkxfUkVRVUVTVF9UWVBFIDB4NDAKKyNkZWZpbmUgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNUIEZURElfU0lPX1NFVF9GTE9XX0NUUkwKKyNkZWZpbmUgRlRESV9TSU9fRElTQUJMRV9GTE9XX0NUUkwgMHgwIAorI2RlZmluZSBGVERJX1NJT19SVFNfQ1RTX0hTICgweDEgPDwgOCkKKyNkZWZpbmUgRlRESV9TSU9fRFRSX0RTUl9IUyAoMHgyIDw8IDgpCisjZGVmaW5lIEZURElfU0lPX1hPTl9YT0ZGX0hTICgweDQgPDwgOCkKKy8qCisgKiAgIEJtUmVxdWVzdFR5cGU6ICAwMTAwIDAwMDBiCisgKiAgIGJSZXF1ZXN0OiAgICAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMCisgKiAgIHdWYWx1ZTogICAgICAgICBYb2ZmL1hvbgorICogICB3SW5kZXg6ICAgICAgICAgUHJvdG9jb2wvUG9ydCAtIGhJbmRleCBpcyBwcm90b2NsIC8gbEluZGV4IGlzIHBvcnQKKyAqICAgd0xlbmd0aDogICAgICAgIDAgCisgKiAgIERhdGE6ICAgICAgICAgICBOb25lCisgKgorICogaEluZGV4IHByb3RvY29sIGlzOgorICogICBCMCBPdXRwdXQgaGFuZHNoYWtpbmcgdXNpbmcgUlRTL0NUUworICogICAgICAgMCA9IGRpc2FibGVkCisgKiAgICAgICAxID0gZW5hYmxlZAorICogICBCMSBPdXRwdXQgaGFuZHNoYWtpbmcgdXNpbmcgRFRSL0RTUgorICogICAgICAgMCA9IGRpc2FibGVkCisgKiAgICAgICAxID0gZW5hYmxlZAorICogICBCMiBYb24vWG9mZiBoYW5kc2hha2luZworICogICAgICAgMCA9IGRpc2FibGVkCisgKiAgICAgICAxID0gZW5hYmxlZAorICoKKyAqIEEgdmFsdWUgb2YgemVybyBpbiB0aGUgaEluZGV4IGZpZWxkIGRpc2FibGVzIGhhbmRzaGFraW5nCisgKgorICogSWYgWG9uL1hvZmYgaGFuZHNoYWtpbmcgaXMgc3BlY2lmaWVkLCB0aGUgaFZhbHVlIGZpZWxkIHNob3VsZCBjb250YWluIHRoZSBYT0ZGIGNoYXJhY3RlciAKKyAqIGFuZCB0aGUgbFZhbHVlIGZpZWxkIGNvbnRhaW5zIHRoZSBYT04gY2hhcmFjdGVyLgorICovICAKKyAKKy8qCisgKiBGVERJX1NJT19HRVRfTEFURU5DWV9USU1FUgorICoKKyAqIFNldCB0aGUgdGltZW91dCBpbnRlcnZhbC4gVGhlIEZUREkgY29sbGVjdHMgZGF0YSBmcm9tIHRoZSBzbGF2ZQorICogZGV2aWNlLCB0cmFuc21pdHRpbmcgaXQgdG8gdGhlIGhvc3Qgd2hlbiBlaXRoZXIgQSkgNjIgYnl0ZXMgYXJlCisgKiByZWNlaXZlZCwgb3IgQikgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgaGFzIGVsYXBzZWQgYW5kIHRoZSBidWZmZXIKKyAqIGNvbnRhaW5zIGF0IGxlYXN0IDEgYnl0ZS4gIFNldHRpbmcgdGhpcyB2YWx1ZSB0byBhIHNtYWxsIG51bWJlcgorICogY2FuIGRyYW1hdGljYWxseSBpbXByb3ZlIHBlcmZvcm1hbmNlIGZvciBhcHBsaWNhdGlvbnMgd2hpY2ggc2VuZAorICogc21hbGwgcGFja2V0cywgc2luY2UgdGhlIGRlZmF1bHQgdmFsdWUgaXMgMTZtcy4KKyAqLworI2RlZmluZSAgRlRESV9TSU9fR0VUX0xBVEVOQ1lfVElNRVJfUkVRVUVTVCBGVERJX1NJT19HRVRfTEFURU5DWV9USU1FUgorI2RlZmluZSAgRlRESV9TSU9fR0VUX0xBVEVOQ1lfVElNRVJfUkVRVUVTVF9UWVBFIDB4QzAKKworLyogCisgKiAgQm1SZXF1ZXN0VHlwZTogICAxMTAwIDAwMDBiCisgKiAgYlJlcXVlc3Q6ICAgICAgICBGVERJX1NJT19HRVRfTEFURU5DWV9USU1FUgorICogIHdWYWx1ZTogICAgICAgICAgMAorICogIHdJbmRleDogICAgICAgICAgUG9ydAorICogIHdMZW5ndGg6ICAgICAgICAgMAorICogIERhdGE6ICAgICAgICAgICAgbGF0ZW5jeSAob24gcmV0dXJuKQorICovCisKKy8qIAorICogRlRESV9TSU9fU0VUX0xBVEVOQ1lfVElNRVIKKyAqCisgKiBTZXQgdGhlIHRpbWVvdXQgaW50ZXJ2YWwuIFRoZSBGVERJIGNvbGxlY3RzIGRhdGEgZnJvbSB0aGUgc2xhdmUKKyAqIGRldmljZSwgdHJhbnNtaXR0aW5nIGl0IHRvIHRoZSBob3N0IHdoZW4gZWl0aGVyIEEpIDYyIGJ5dGVzIGFyZQorICogcmVjZWl2ZWQsIG9yIEIpIHRoZSB0aW1lb3V0IGludGVydmFsIGhhcyBlbGFwc2VkIGFuZCB0aGUgYnVmZmVyCisgKiBjb250YWlucyBhdCBsZWFzdCAxIGJ5dGUuICBTZXR0aW5nIHRoaXMgdmFsdWUgdG8gYSBzbWFsbCBudW1iZXIKKyAqIGNhbiBkcmFtYXRpY2FsbHkgaW1wcm92ZSBwZXJmb3JtYW5jZSBmb3IgYXBwbGljYXRpb25zIHdoaWNoIHNlbmQKKyAqIHNtYWxsIHBhY2tldHMsIHNpbmNlIHRoZSBkZWZhdWx0IHZhbHVlIGlzIDE2bXMuCisgKi8KKyNkZWZpbmUgIEZURElfU0lPX1NFVF9MQVRFTkNZX1RJTUVSX1JFUVVFU1QgRlRESV9TSU9fU0VUX0xBVEVOQ1lfVElNRVIKKyNkZWZpbmUgIEZURElfU0lPX1NFVF9MQVRFTkNZX1RJTUVSX1JFUVVFU1RfVFlQRSAweDQwCisKKy8qIAorICogIEJtUmVxdWVzdFR5cGU6ICAgMDEwMCAwMDAwYgorICogIGJSZXF1ZXN0OiAgICAgICAgRlRESV9TSU9fU0VUX0xBVEVOQ1lfVElNRVIKKyAqICB3VmFsdWU6ICAgICAgICAgIExhdGVuY3kgKG1pbGxpc2Vjb25kcykKKyAqICB3SW5kZXg6ICAgICAgICAgIFBvcnQKKyAqICB3TGVuZ3RoOiAgICAgICAgIDAKKyAqICBEYXRhOiAgICAgICAgICAgIE5vbmUKKyAqCisgKiB3VmFsdWU6CisgKiAgIEIwLi43ICAgTGF0ZW5jeSB0aW1lcgorICogICBCOC4uMTUgIDAKKyAqCisgKi8KKworLyoKKyAqIEZURElfU0lPX1NFVF9FVkVOVF9DSEFSIAorICoKKyAqIFNldCB0aGUgc3BlY2lhbCBldmVudCBjaGFyYWN0ZXIgZm9yIHRoZSBzcGVjaWZpZWQgY29tbXVuaWNhdGlvbnMgcG9ydC4KKyAqIElmIHRoZSBkZXZpY2Ugc2VlcyB0aGlzIGNoYXJhY3RlciBpdCB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiB0aGUKKyAqIGRhdGEgcmVhZCBzbyBmYXIgLSByYXRoZXIgdGhhbiB3YWl0IDQwbXMgb3IgdW50aWwgNjIgYnl0ZXMgYXJlIHJlYWQKKyAqIHdoaWNoIGlzIHdoYXQgbm9ybWFsbHkgaGFwcGVucy4KKyAqLworCisKKyNkZWZpbmUgIEZURElfU0lPX1NFVF9FVkVOVF9DSEFSX1JFUVVFU1QgRlRESV9TSU9fU0VUX0VWRU5UX0NIQVIKKyNkZWZpbmUgIEZURElfU0lPX1NFVF9FVkVOVF9DSEFSX1JFUVVFU1RfVFlQRSAweDQwCisKKworLyogCisgKiAgQm1SZXF1ZXN0VHlwZTogICAwMTAwIDAwMDBiCisgKiAgYlJlcXVlc3Q6ICAgICAgICBGVERJX1NJT19TRVRfRVZFTlRfQ0hBUgorICogIHdWYWx1ZTogICAgICAgICAgRXZlbnRDaGFyCisgKiAgd0luZGV4OiAgICAgICAgICBQb3J0CisgKiAgd0xlbmd0aDogICAgICAgICAwCisgKiAgRGF0YTogICAgICAgICAgICBOb25lCisgKgorICogd1ZhbHVlOgorICogICBCMC4uNyAgIEV2ZW50IENoYXJhY3RlcgorICogICBCOCAgICAgIEV2ZW50IENoYXJhY3RlciBQcm9jZXNzaW5nCisgKiAgICAgICAgICAgICAwID0gZGlzYWJsZWQKKyAqICAgICAgICAgICAgIDEgPSBlbmFibGVkCisgKiAgIEI5Li4xNSAgUmVzZXJ2ZWQKKyAqCisgKi8KKyAgICAgICAgICAKKy8qIEZURElfU0lPX1NFVF9FUlJPUl9DSEFSICovCisKKy8qIFNldCB0aGUgcGFyaXR5IGVycm9yIHJlcGxhY2VtZW50IGNoYXJhY3RlciBmb3IgdGhlIHNwZWNpZmllZCBjb21tdW5pY2F0aW9ucyBwb3J0ICovCisKKy8qIAorICogIEJtUmVxdWVzdFR5cGU6ICAwMTAwIDAwMDBiCisgKiAgYlJlcXVlc3Q6ICAgICAgIEZURElfU0lPX1NFVF9FVkVOVF9DSEFSCisgKiAgd1ZhbHVlOiAgICAgICAgIEVycm9yIENoYXIKKyAqICB3SW5kZXg6ICAgICAgICAgUG9ydAorICogIHdMZW5ndGg6ICAgICAgICAwCisgKiAgRGF0YTogICAgICAgICAgIE5vbmUKKyAqCisgKkVycm9yIENoYXIKKyAqICBCMC4uNyAgRXJyb3IgQ2hhcmFjdGVyCisgKiAgQjggICAgIEVycm9yIENoYXJhY3RlciBQcm9jZXNzaW5nCisgKiAgICAgICAgICAgMCA9IGRpc2FibGVkCisgKiAgICAgICAgICAgMSA9IGVuYWJsZWQKKyAqICBCOS4uMTUgUmVzZXJ2ZWQKKyAqCisgKi8KKworLyogRlRESV9TSU9fR0VUX01PREVNX1NUQVRVUyAqLworLyogUmV0cmVpdmUgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIG1vZGVtIHN0YXR1cyByZWdpc3RlciAqLworCisjZGVmaW5lIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVNfUkVRVUVTVF9UWVBFIDB4YzAKKyNkZWZpbmUgRlRESV9TSU9fR0VUX01PREVNX1NUQVRVU19SRVFVRVNUIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVMKKyNkZWZpbmUgRlRESV9TSU9fQ1RTX01BU0sgMHgxMAorI2RlZmluZSBGVERJX1NJT19EU1JfTUFTSyAweDIwCisjZGVmaW5lIEZURElfU0lPX1JJX01BU0sgIDB4NDAKKyNkZWZpbmUgRlRESV9TSU9fUkxTRF9NQVNLIDB4ODAKKy8qIAorICogICBCbVJlcXVlc3RUeXBlOiAgIDExMDAgMDAwMGIKKyAqICAgYlJlcXVlc3Q6ICAgICAgICBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTCisgKiAgIHdWYWx1ZTogICAgICAgICAgemVybworICogICB3SW5kZXg6ICAgICAgICAgIFBvcnQKKyAqICAgd0xlbmd0aDogICAgICAgICAxCisgKiAgIERhdGE6ICAgICAgICAgICAgU3RhdHVzCisgKiAKKyAqIE9uZSBieXRlIG9mIGRhdGEgaXMgcmV0dXJuZWQgCisgKiBCMC4uMyAwCisgKiBCNCAgICBDVFMKKyAqICAgICAgICAgMCA9IGluYWN0aXZlCisgKiAgICAgICAgIDEgPSBhY3RpdmUKKyAqIEI1ICAgIERTUgorICogICAgICAgICAwID0gaW5hY3RpdmUKKyAqICAgICAgICAgMSA9IGFjdGl2ZQorICogQjYgICAgUmluZyBJbmRpY2F0b3IgKFJJKQorICogICAgICAgICAwID0gaW5hY3RpdmUKKyAqICAgICAgICAgMSA9IGFjdGl2ZQorICogQjcgICAgUmVjZWl2ZSBMaW5lIFNpZ25hbCBEZXRlY3QgKFJMU0QpCisgKiAgICAgICAgIDAgPSBpbmFjdGl2ZQorICogICAgICAgICAxID0gYWN0aXZlIAorICovCisKKworCisvKiBEZXNjcmlwdG9ycyByZXR1cm5lZCBieSB0aGUgZGV2aWNlIAorICogCisgKiAgRGV2aWNlIERlc2NyaXB0b3IKKyAqIAorICogT2Zmc2V0CUZpZWxkCQlTaXplCVZhbHVlCURlc2NyaXB0aW9uCisgKiAwCWJMZW5ndGgJCTEJMHgxMglTaXplIG9mIGRlc2NyaXB0b3IgaW4gYnl0ZXMKKyAqIDEJYkRlc2NyaXB0b3JUeXBlCTEJMHgwMQlERVZJQ0UgRGVzY3JpcHRvciBUeXBlCisgKiAyCWJjZFVTQgkJMgkweDAxMTAJVVNCIFNwZWMgUmVsZWFzZSBOdW1iZXIKKyAqIDQJYkRldmljZUNsYXNzCTEJMHgwMAlDbGFzcyBDb2RlCisgKiA1CWJEZXZpY2VTdWJDbGFzcwkxCTB4MDAJU3ViQ2xhc3MgQ29kZQorICogNgliRGV2aWNlUHJvdG9jb2wJMQkweDAwCVByb3RvY29sIENvZGUKKyAqIDcJYk1heFBhY2tldFNpemUwIDEJMHgwOAlNYXhpbXVtIHBhY2tldCBzaXplIGZvciBlbmRwb2ludCAwCisgKiA4CWlkVmVuZG9yCTIJMHgwNDAzCVZlbmRvciBJRAorICogMTAJaWRQcm9kdWN0CTIJMHg4MzcyCVByb2R1Y3QgSUQgKEZURElfU0lPX1BJRCkKKyAqIDEyCWJjZERldmljZQkyCTB4MDAwMQlEZXZpY2UgcmVsZWFzZSBudW1iZXIKKyAqIDE0CWlNYW51ZmFjdHVyZXIJMQkweDAxCUluZGV4IG9mIG1hbi4gc3RyaW5nIGRlc2MKKyAqIDE1CWlQcm9kdWN0CTEJMHgwMglJbmRleCBvZiBwcm9kIHN0cmluZyBkZXNjCisgKiAxNglpU2VyaWFsTnVtYmVyCTEJMHgwMglJbmRleCBvZiBzZXJpYWwgbm1yIHN0cmluZyBkZXNjCisgKiAxNwliTnVtQ29uZmlndXJhdGlvbnMgMSAgICAweDAxCU51bWJlciBvZiBwb3NzaWJsZSBjb25maWd1cmF0aW9ucworICogCisgKiBDb25maWd1cmF0aW9uIERlc2NyaXB0b3IKKyAqIAorICogT2Zmc2V0CUZpZWxkCQkJU2l6ZQlWYWx1ZQorICogMAliTGVuZ3RoCQkJMQkweDA5CVNpemUgb2YgZGVzY3JpcHRvciBpbiBieXRlcworICogMQliRGVzY3JpcHRvclR5cGUJCTEJMHgwMglDT05GSUdVUkFUSU9OIERlc2NyaXB0b3IgVHlwZQorICogMgl3VG90YWxMZW5ndGgJCTIJMHgwMDIwCVRvdGFsIGxlbmd0aCBvZiBkYXRhCisgKiA0CWJOdW1JbnRlcmZhY2VzCQkxCTB4MDEJTnVtYmVyIG9mIGludGVyZmFjZXMgc3VwcG9ydGVkCisgKiA1CWJDb25maWd1cmF0aW9uVmFsdWUJMQkweDAxCUFyZ3VtZW50IGZvciBTZXRDT25maWd1cmF0aW9uKCkgcmVxCisgKiA2CWlDb25maWd1cmF0aW9uCQkxCTB4MDIJSW5kZXggb2YgY29uZmlnIHN0cmluZyBkZXNjcmlwdG9yCisgKiA3CWJtQXR0cmlidXRlcwkJMQkweDIwCUNvbmZpZyBjaGFyYWN0ZXJpc3RpY3MgUmVtb3RlIFdha2V1cAorICogOAlNYXhQb3dlcgkJMQkweDFFCU1heCBwb3dlciBjb25zdW1wdGlvbgorICogCisgKiBJbnRlcmZhY2UgRGVzY3JpcHRvcgorICogCisgKiBPZmZzZXQJRmllbGQJCQlTaXplCVZhbHVlCisgKiAwCWJMZW5ndGgJCQkxCTB4MDkJU2l6ZSBvZiBkZXNjcmlwdG9yIGluIGJ5dGVzCisgKiAxCWJEZXNjcmlwdG9yVHlwZQkJMQkweDA0CUlOVEVSRkFDRSBEZXNjcmlwdG9yIFR5cGUKKyAqIDIJYkludGVyZmFjZU51bWJlcgkxCTB4MDAJTnVtYmVyIG9mIGludGVyZmFjZQorICogMwliQWx0ZXJuYXRlU2V0dGluZwkxCTB4MDAJVmFsdWUgdXNlZCB0byBzZWxlY3QgYWx0ZXJuYXRlCisgKiA0CWJOdW1FbmRwb2ludHMJCTEJMHgwMglOdW1iZXIgb2YgZW5kcG9pbnRzCisgKiA1CWJJbnRlcmZhY2VDbGFzcwkJMQkweEZGCUNsYXNzIENvZGUKKyAqIDYJYkludGVyZmFjZVN1YkNsYXNzCTEJMHhGRglTdWJjbGFzcyBDb2RlCisgKiA3CWJJbnRlcmZhY2VQcm90b2NvbAkxCTB4RkYJUHJvdG9jb2wgQ29kZQorICogOAlpSW50ZXJmYWNlCQkxCTB4MDIJSW5kZXggb2YgaW50ZXJmYWNlIHN0cmluZyBkZXNjcmlwdGlvbgorICogCisgKiBJTiBFbmRwb2ludCBEZXNjcmlwdG9yCisgKiAKKyAqIE9mZnNldAlGaWVsZAkJCVNpemUJVmFsdWUKKyAqIDAJYkxlbmd0aAkJCTEJMHgwNwlTaXplIG9mIGRlc2NyaXB0b3IgaW4gYnl0ZXMKKyAqIDEJYkRlc2NyaXB0b3JUeXBlCQkxCTB4MDUJRU5EUE9JTlQgZGVzY3JpcHRvciB0eXBlCisgKiAyCWJFbmRwb2ludEFkZHJlc3MJMQkweDgyCUFkZHJlc3Mgb2YgZW5kcG9pbnQKKyAqIDMJYm1BdHRyaWJ1dGVzCQkxCTB4MDIJRW5kcG9pbnQgYXR0cmlidXRlcyAtIEJ1bGsKKyAqIDQJYk51bUVuZHBvaW50cwkJMgkweDAwNDAJbWF4aW11bSBwYWNrZXQgc2l6ZQorICogNQliSW50ZXJ2YWwJCTEJMHgwMAlJbnRlcnZhbCBmb3IgcG9sbGluZyBlbmRwb2ludAorICogCisgKiBPVVQgRW5kcG9pbnQgRGVzY3JpcHRvcgorICogCisgKiBPZmZzZXQJRmllbGQJCQlTaXplCVZhbHVlCisgKiAwCWJMZW5ndGgJCQkxCTB4MDcJU2l6ZSBvZiBkZXNjcmlwdG9yIGluIGJ5dGVzCisgKiAxCWJEZXNjcmlwdG9yVHlwZQkJMQkweDA1CUVORFBPSU5UIGRlc2NyaXB0b3IgdHlwZQorICogMgliRW5kcG9pbnRBZGRyZXNzCTEJMHgwMglBZGRyZXNzIG9mIGVuZHBvaW50CisgKiAzCWJtQXR0cmlidXRlcwkJMQkweDAyCUVuZHBvaW50IGF0dHJpYnV0ZXMgLSBCdWxrCisgKiA0CWJOdW1FbmRwb2ludHMJCTIJMHgwMDQwCW1heGltdW0gcGFja2V0IHNpemUKKyAqIDUJYkludGVydmFsCQkxCTB4MDAJSW50ZXJ2YWwgZm9yIHBvbGxpbmcgZW5kcG9pbnQKKyAqICAgICAKKyAqIERBVEEgRk9STUFUCisgKiAKKyAqIElOIEVuZHBvaW50CisgKiAKKyAqIFRoZSBkZXZpY2UgcmVzZXJ2ZXMgdGhlIGZpcnN0IHR3byBieXRlcyBvZiBkYXRhIG9uIHRoaXMgZW5kcG9pbnQgdG8gY29udGFpbiB0aGUgY3VycmVudAorICogdmFsdWVzIG9mIHRoZSBtb2RlbSBhbmQgbGluZSBzdGF0dXMgcmVnaXN0ZXJzLiBJbiB0aGUgYWJzZW5jZSBvZiBkYXRhLCB0aGUgZGV2aWNlIAorICogZ2VuZXJhdGVzIGEgbWVzc2FnZSBjb25zaXN0aW5nIG9mIHRoZXNlIHR3byBzdGF0dXMgYnl0ZXMgZXZlcnkgNDAgbXMKKyAqIAorICogQnl0ZSAwOiBNb2RlbSBTdGF0dXMKKyAqIAorICogT2Zmc2V0CURlc2NyaXB0aW9uCisgKiBCMAlSZXNlcnZlZCAtIG11c3QgYmUgMQorICogQjEJUmVzZXJ2ZWQgLSBtdXN0IGJlIDAKKyAqIEIyCVJlc2VydmVkIC0gbXVzdCBiZSAwCisgKiBCMwlSZXNlcnZlZCAtIG11c3QgYmUgMAorICogQjQJQ2xlYXIgdG8gU2VuZCAoQ1RTKQorICogQjUJRGF0YSBTZXQgUmVhZHkgKERTUikKKyAqIEI2CVJpbmcgSW5kaWNhdG9yIChSSSkKKyAqIEI3CVJlY2VpdmUgTGluZSBTaWduYWwgRGV0ZWN0IChSTFNEKQorICogCisgKiBCeXRlIDE6IExpbmUgU3RhdHVzCisgKiAKKyAqIE9mZnNldAlEZXNjcmlwdGlvbgorICogQjAJRGF0YSBSZWFkeSAoRFIpCisgKiBCMQlPdmVycnVuIEVycm9yIChPRSkKKyAqIEIyCVBhcml0eSBFcnJvciAoUEUpCisgKiBCMwlGcmFtaW5nIEVycm9yIChGRSkKKyAqIEI0CUJyZWFrIEludGVycnVwdCAoQkkpCisgKiBCNQlUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyIChUSFJFKQorICogQjYJVHJhbnNtaXR0ZXIgRW1wdHkgKFRFTVQpCisgKiBCNwlFcnJvciBpbiBSQ1ZSIEZJRk8KKyAqIAorICovCisjZGVmaW5lIEZURElfUlMwX0NUUwkoMSA8PCA0KQorI2RlZmluZSBGVERJX1JTMF9EU1IJKDEgPDwgNSkKKyNkZWZpbmUgRlRESV9SUzBfUkkJKDEgPDwgNikKKyNkZWZpbmUgRlRESV9SUzBfUkxTRAkoMSA8PCA3KQorCisjZGVmaW5lIEZURElfUlNfRFIgIDEKKyNkZWZpbmUgRlRESV9SU19PRSAoMTw8MSkKKyNkZWZpbmUgRlRESV9SU19QRSAoMTw8MikKKyNkZWZpbmUgRlRESV9SU19GRSAoMTw8MykKKyNkZWZpbmUgRlRESV9SU19CSSAoMTw8NCkKKyNkZWZpbmUgRlRESV9SU19USFJFICgxPDw1KQorI2RlZmluZSBGVERJX1JTX1RFTVQgKDE8PDYpCisjZGVmaW5lIEZURElfUlNfRklGTyAgKDE8PDcpCisKKy8qCisgKiBPVVQgRW5kcG9pbnQKKyAqIAorICogVGhpcyBkZXZpY2UgcmVzZXJ2ZXMgdGhlIGZpcnN0IGJ5dGVzIG9mIGRhdGEgb24gdGhpcyBlbmRwb2ludCBjb250YWluIHRoZSBsZW5ndGgKKyAqIGFuZCBwb3J0IGlkZW50aWZpZXIgb2YgdGhlIG1lc3NhZ2UuIEZvciB0aGUgRlRESSBVU0IgU2VyaWFsIGNvbnZlcnRlciB0aGUgcG9ydCAKKyAqIGlkZW50aWZpZXIgaXMgYWx3YXlzIDEuCisgKiAKKyAqIEJ5dGUgMDogTGluZSBTdGF0dXMKKyAqIAorICogT2Zmc2V0CURlc2NyaXB0aW9uCisgKiBCMAlSZXNlcnZlZCAtIG11c3QgYmUgMQorICogQjEJUmVzZXJ2ZWQgLSBtdXN0IGJlIDAKKyAqIEIyLi43CUxlbmd0aCBvZiBtZXNzYWdlIC0gKG5vdCBpbmNsdWRpbmcgQnl0ZSAwKQorICogCisgKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVmNjE0ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMKQEAgLTAsMCArMSwxNTQxIEBACisvKgorICogR2FybWluIEdQUyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgSGVybWFubiBLbmVpc3NlbCBoZXJrbmVAdXNlcnMuc291cmNlZm9yZ2UubmV0CisgKgorICogVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgY2FuIGJlIGZvdW5kIGF0CisgKiBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dhcm1pbi1ncHMvCisgKgorICogVGhpcyBkcml2ZXIgaGFzIGJlZW4gZGVyaXZlZCBmcm9tIHYyLjEgb2YgdGhlIHZpc29yIGRyaXZlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworLyogdGhlIG1vZGUgdG8gYmUgc2V0IHdoZW4gdGhlIHBvcnQgaXN0IG9wZW5lZCAqLworc3RhdGljIGludCBpbml0aWFsX21vZGUgPSAxOworCisvKiBkZWJ1ZyBmbGFnICovCitzdGF0aWMgaW50IGRlYnVnID0gMDsKKworI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKworI2RlZmluZSBHQVJNSU5fVkVORE9SX0lEICAgICAgICAgICAgIDB4MDkxRQorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisKKyNkZWZpbmUgVkVSU0lPTl9NQUpPUgkwCisjZGVmaW5lIFZFUlNJT05fTUlOT1IJMjMKKworI2RlZmluZSBfU1RSKHMpICNzCisjZGVmaW5lIF9EUklWRVJfVkVSU0lPTihhLGIpICJ2IiBfU1RSKGEpICIuIiBfU1RSKGIpCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OIF9EUklWRVJfVkVSU0lPTihWRVJTSU9OX01BSk9SLCBWRVJTSU9OX01JTk9SKQorI2RlZmluZSBEUklWRVJfQVVUSE9SICJoZXJtYW5uIGtuZWlzc2VsIgorI2RlZmluZSBEUklWRVJfREVTQyAiZ2FybWluIGdwcyBkcml2ZXIiCisKKy8qIGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IHRoZSBkcml2ZXIgKi8KKyNkZWZpbmUgRUlOVlBLVAkxMDAwCS8qIGludmFsaWQgcGFja2V0IHN0cnVjdHVyZSAqLworCisKKy8vIHNpemUgb2YgdGhlIGhlYWRlciBvZiBhIHBhY2tldCB1c2luZyB0aGUgdXNiIHByb3RvY29sCisjZGVmaW5lIEdBUk1JTl9QS1RIRFJfTEVOR1RICTEyCisKKy8vIG1heC4gcG9zc2libGUgc2l6ZSBvZiBhIHBhY2tldCB1c2luZyB0aGUgc2VyaWFsIHByb3RvY29sIAorI2RlZmluZSBNQVhfU0VSSUFMX1BLVF9TSVogKDMrMjU1KzMpCisKKy8vIG1heC4gcG9zc2libGUgc2l6ZSBvZiBhIHBhY2tldCB3aXRoIHdvcnN0IGNhc2Ugc3R1ZmZpbmcKKyNkZWZpbmUgTUFYX1NFUklBTF9QS1RfU0laX1NUVUZGRUQgTUFYX1NFUklBTF9QS1RfU0laKzI1NgorCisvLyBzaXplIG9mIGEgYnVmZmVyIGFibGUgdG8gaG9sZCBhIGNvbXBsZXRlIChubyBzdHVmZmluZykgcGFja2V0CisvLyAodGhlIGRvY3VtZW50IHByb3RvY29sIGRvZXMgbm90IGNvbnRhaW4gcGFja2V0cyB3aXRoIGEgbGFyZ2VyCisvLyAgc2l6ZSwgYnV0IGluIHRoZW9yeSBhIHBhY2tldCBtYXkgYmUgNjRrKzEyIGJ5dGVzIC0gaWYgaW4KKy8vICBsYXRlciBwcm90b2NvbCB2ZXJzaW9ucyBsYXJnZXIgcGFja2V0IHNpemVzIG9jY3VyLCB0aGlzIHZhbHVlCisvLyAgc2hvdWxkIGJlIGluY3JlYXNlZCBhY2NvcmRpbmdseSwgc28gdGhlIGlucHV0IGJ1ZmZlciBpcyBhbHdheXMgCisvLyAgbGFyZ2UgZW5vdWdoIHRoZSBzdG9yZSBhIGNvbXBsZXRlIHBhY2tldCBpbmNsdXNpdmUgaGVhZGVyKQorI2RlZmluZSBHUFNfSU5fQlVGU0laICAoR0FSTUlOX1BLVEhEUl9MRU5HVEgrTUFYX1NFUklBTF9QS1RfU0laKSAKKworLy8gc2l6ZSBvZiBhIGJ1ZmZlciBhYmxlIHRvIGhvbGQgYSBjb21wbGV0ZSAoaW5jbC4gc3R1ZmZpbmcpIHBhY2tldAorI2RlZmluZSBHUFNfT1VUX0JVRlNJWiAoR0FSTUlOX1BLVEhEUl9MRU5HVEgrTUFYX1NFUklBTF9QS1RfU0laX1NUVUZGRUQpIAorCisvLyB3aGVyZSB0byBwbGFjZSB0aGUgcGFja2V0IGlkIG9mIGEgc2VyaWFsIHBhY2tldCwgc28gd2UgY2FuCisvLyBwcmVwZW5kIHRoZSB1c2ItcGFja2V0IGhlYWRlciB3aXRob3V0IHRoZSBuZWVkIHRvIG1vdmUgdGhlCisvLyBwYWNrZXRzIGRhdGEKKyNkZWZpbmUgR1NQX0lOSVRJQUxfT0ZGU0VUIChHQVJNSU5fUEtUSERSX0xFTkdUSC0yKQorCisvLyBtYXguIHNpemUgb2YgaW5jb21pbmcgcHJpdmF0ZSBwYWNrZXRzIChoZWFkZXIrMSBwYXJhbSkKKyNkZWZpbmUgUFJJVlBLVFNJWiAoR0FSTUlOX1BLVEhEUl9MRU5HVEgrNCkKKworI2RlZmluZSBHQVJNSU5fTEFZRVJJRF9UUkFOU1BPUlQgIDAKKyNkZWZpbmUgR0FSTUlOX0xBWUVSSURfQVBQTCAgICAgIDIwCisvLyBvdXIgb3duIGxheWVyLWlkIHRvIHVzZSBmb3Igc29tZSBjb250cm9sIG1lY2hhbmlzbXMKKyNkZWZpbmUgR0FSTUlOX0xBWUVSSURfUFJJVkFURQkweDAxMTA2RTRCCisKKyNkZWZpbmUgR0FSTUlOX1BLVElEX1BWVF9EQVRBCTUxCisjZGVmaW5lIEdBUk1JTl9QS1RJRF9MMDAxX0NPTU1BTkRfREFUQSAxMAorCisjZGVmaW5lIENNTkRfQUJPUlRfVFJBTlNGRVIgMAorCisvLyBwYWNrZXQgaWRzIHVzZWQgaW4gcHJpdmF0ZSBsYXllcgorI2RlZmluZSBQUklWX1BLVElEX1NFVF9ERUJVRwkxCisjZGVmaW5lIFBSSVZfUEtUSURfU0VUX01PREUJMgorI2RlZmluZSBQUklWX1BLVElEX0lORk9fUkVRCTMKKyNkZWZpbmUgUFJJVl9QS1RJRF9JTkZPX1JFU1AJNAorI2RlZmluZSBQUklWX1BLVElEX1JFU0VUX1JFUQk1CisjZGVmaW5lIFBSSVZfUEtUSURfU0VUX0RFRl9NT0RFCTYKKworCisjZGVmaW5lIEVUWAkweDAzCisjZGVmaW5lIERMRQkweDEwCisjZGVmaW5lIEFDSwkweDA2CisjZGVmaW5lIE5BSwkweDE1CisKKy8qIHN0cnVjdHVyZSB1c2VkIHRvIHF1ZXVlIGluY29taW5nIHBhY2tldHMgKi8KK3N0cnVjdCBnYXJtaW5fcGFja2V0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICBsaXN0OworCWludCAgICAgICAgICAgICAgIHNlcTsKKwlpbnQgICAgICAgICAgICAgICBzaXplOyAvLyB0aGUgcmVhbCBzaXplIG9mIHRoZSBkYXRhIGFycmF5LCBhbHdheXMgPiAwCisJX191OCAgICAgICAgICAgICAgZGF0YVsxXTsKK307CisKKy8qIHN0cnVjdHVyZSB1c2VkIHRvIGtlZXAgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGRyaXZlciAqLworc3RydWN0IGdhcm1pbl9kYXRhIHsKKwlfX3U4ICAgc3RhdGU7CisJX191MTYgIGZsYWdzOworCV9fdTggICBtb2RlOworCV9fdTggICBpZ25vcmVQa3RzOworCV9fdTggICBjb3VudDsKKwlfX3U4ICAgcGt0X2lkOworCV9fdTMyICBzZXJpYWxfbnVtOworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJaW50ICAgIHNlcV9jb3VudGVyOworCWludCAgICBpbnNpemU7CisJaW50ICAgIG91dHNpemU7CisJX191OCAgIGluYnVmZmVyIFtHUFNfSU5fQlVGU0laXTsgIC8qIHR0eSAtPiB1c2IgKi8KKwlfX3U4ICAgb3V0YnVmZmVyW0dQU19PVVRfQlVGU0laXTsgLyogdXNiIC0+IHR0eSAqLworCV9fdTggICBwcml2cGt0WzQqNl07CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgcGt0bGlzdDsKK307CisKKworI2RlZmluZSBTVEFURV9ORVcgICAgICAgICAgICAwCisjZGVmaW5lIFNUQVRFX0lOSVRJQUxfREVMQVkgIDEKKyNkZWZpbmUgU1RBVEVfVElNRU9VVCAgICAgICAgMgorI2RlZmluZSBTVEFURV9TRVNTSU9OX1JFUTEgICAzCisjZGVmaW5lIFNUQVRFX1NFU1NJT05fUkVRMiAgIDQKKyNkZWZpbmUgU1RBVEVfQUNUSVZFICAgICAgICAgNQorCisjZGVmaW5lIFNUQVRFX1JFU0VUCSAgICAgOAorI2RlZmluZSBTVEFURV9ESVNDT05ORUNURUQgICA5CisjZGVmaW5lIFNUQVRFX1dBSVRfVFRZX0FDSyAgMTAKKyNkZWZpbmUgU1RBVEVfR1NQX1dBSVRfREFUQSAxMQorCisjZGVmaW5lIE1PREVfTkFUSVZFICAgICAgICAgIDAKKyNkZWZpbmUgTU9ERV9HQVJNSU5fU0VSSUFMICAgMQorCisvLyBGbGFncyB1c2VkIGluIGdhcm1pbl9kYXRhLmZsYWdzOgorI2RlZmluZSBGTEFHU19TRVNTSU9OX1JFUExZX01BU0sgIDB4MDBDMAorI2RlZmluZSBGTEFHU19TRVNTSU9OX1JFUExZMV9TRUVOIDB4MDA4MAorI2RlZmluZSBGTEFHU19TRVNTSU9OX1JFUExZMl9TRUVOIDB4MDA0MAorI2RlZmluZSBGTEFHU19CVUxLX0lOX0FDVElWRSAgICAgIDB4MDAyMAorI2RlZmluZSBGTEFHU19USFJPVFRMRUQgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBDTEVBUl9IQUxUX1JFUVVJUkVEICAgICAgIDB4MDAwMQorCisjZGVmaW5lIEZMQUdTX1FVRVVJTkcgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIEZMQUdTX0FQUF9SRVNQX1NFRU4gICAgICAgMHgwMjAwCisjZGVmaW5lIEZMQUdTX0FQUF9SRVFfU0VFTiAgICAgICAgMHgwNDAwCisjZGVmaW5lIEZMQUdTX0RST1BfREFUQSAgICAgICAgICAgMHgwODAwCisKKyNkZWZpbmUgRkxBR1NfR1NQX1NLSVAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgRkxBR1NfR1NQX0RMRVNFRU4gICAgICAgICAweDIwMDAKKworCisKKworCisKKy8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyB2b2lkIGdzcF9uZXh0X3BhY2tldChzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wKTsKK3N0YXRpYyBpbnQgIGdhcm1pbl93cml0ZV9idWxrKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKKworLyogc29tZSBzcGVjaWFsIHBhY2tldHMgdG8gYmUgc2VuZCBvciByZWNlaXZlZCAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgY29uc3QgR0FSTUlOX1NUQVJUX1NFU1NJT05fUkVRW10KKwk9IHsgMCwgMCwgMCwgMCwgIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGNvbnN0IEdBUk1JTl9TVEFSVF9TRVNTSU9OX1JFUTJbXQorCT0geyAwLCAwLCAwLCAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgY29uc3QgR0FSTUlOX1NUQVJUX1NFU1NJT05fUkVQTFlbXQorCT0geyAwLCAwLCAwLCAwLCAgNiwgMCwgMCwgMCwgNCwgMCwgMCwgMCB9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgY29uc3QgR0FSTUlOX1NFU1NJT05fQUNUSVZFX1JFUExZW10KKwk9IHsgMCwgMCwgMCwgMCwgMTcsIDAsIDAsIDAsIDQsIDAsIDAsIDAsIDAsIDE2LCAwLCAwIH07CitzdGF0aWMgdW5zaWduZWQgY2hhciBjb25zdCBHQVJNSU5fQlVMS19JTl9BVkFJTF9SRVBMWVtdCisJPSB7IDAsIDAsIDAsIDAsICAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CitzdGF0aWMgdW5zaWduZWQgY2hhciBjb25zdCBHQVJNSU5fQVBQX0xBWUVSX1JFUExZW10KKwk9IHsgMHgxNCwgMCwgMCwgMCB9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgY29uc3QgR0FSTUlOX1NUQVJUX1BWVF9SRVFbXQorCT0geyAyMCwgMCwgMCwgMCwgIDEwLCAwLCAwLCAwLCAyLCAwLCAwLCAwLCA0OSwgMCB9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgY29uc3QgR0FSTUlOX1NUT1BfUFZUX1JFUVtdCisJPSB7IDIwLCAwLCAwLCAwLCAgMTAsIDAsIDAsIDAsIDIsIDAsIDAsIDAsIDUwLCAwIH07CitzdGF0aWMgdW5zaWduZWQgY2hhciBjb25zdCBHQVJNSU5fU1RPUF9UUkFOU0ZFUl9SRVFbXQorCT0geyAyMCwgMCwgMCwgMCwgIDEwLCAwLCAwLCAwLCAyLCAwLCAwLCAwLCAwLCAwIH07CitzdGF0aWMgdW5zaWduZWQgY2hhciBjb25zdCBHQVJNSU5fU1RPUF9UUkFOU0ZFUl9SRVFfVjJbXQorCT0geyAyMCwgMCwgMCwgMCwgIDEwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwIH07CitzdGF0aWMgdW5zaWduZWQgY2hhciBjb25zdCBQUklWQVRFX1JFUVtdCisJPSAgICB7IDB4NEIsIDB4NkUsIDB4MTAsIDB4MDEsICAweEZGLCAwLCAwLCAwLCAweEZGLCAwLCAwLCAwIH07CisKKworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisJLyogdGhlIHNhbWUgZGV2aWNlIGlkIHNlZW1zIHRvIGJlIHVzZWQgYnkgYWxsIHVzYiBlbmFibGVkIGdwcyBkZXZpY2VzICovCisJeyBVU0JfREVWSUNFKEdBUk1JTl9WRU5ET1JfSUQsIDMgKSB9LAorCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZ2FybWluX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiZ2FybWluX2dwcyIsCisJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZSwKK307CisKKworc3RhdGljIGlubGluZSBpbnQgbm9SZXNwb25zZUZyb21BcHBMYXllcihzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wKQoreworCXJldHVybiAoKGdhcm1pbl9kYXRhX3AtPmZsYWdzCisJCQkJJiAoRkxBR1NfQVBQX1JFUV9TRUVOfEZMQUdTX0FQUF9SRVNQX1NFRU4pKQorCSAgICAgICAgPT0gRkxBR1NfQVBQX1JFUV9TRUVOKTsKK30KKworCitzdGF0aWMgaW5saW5lIGludCBnZXRMYXllcklkKGNvbnN0IF9fdTggKnVzYlBhY2tldCkKK3sKKwlyZXR1cm4gX19sZTMyX3RvX2NwdXAoKF9fbGUzMiAqKSh1c2JQYWNrZXQpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ2V0UGFja2V0SWQoY29uc3QgX191OCAqdXNiUGFja2V0KQoreworCXJldHVybiBfX2xlMzJfdG9fY3B1cCgoX19sZTMyICopKHVzYlBhY2tldCs0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldERhdGFMZW5ndGgoY29uc3QgX191OCAqdXNiUGFja2V0KQoreworCXJldHVybiBfX2xlMzJfdG9fY3B1cCgoX19sZTMyICopKHVzYlBhY2tldCs4KSk7Cit9CisKKworLyoKKyAqIGNoZWNrIGlmIHRoZSB1c2ItcGFja2V0IGluIGJ1ZiBjb250YWlucyBhbiBhYm9ydC10cmFuc2ZlciBjb21tYW5kLgorICogKGlmIHllcywgYWxsIHF1ZXVlZCBkYXRhIHdpbGwgYmUgZHJvcHBlZCkKKyAqLworc3RhdGljIGlubGluZSBpbnQgaXNBYm9ydFRyZkNtbmQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmKQoreworCWlmICgwID09IG1lbWNtcChidWYsIEdBUk1JTl9TVE9QX1RSQU5TRkVSX1JFUSwgCisJICAgICAgICAgICAgICAgIHNpemVvZihHQVJNSU5fU1RPUF9UUkFOU0ZFUl9SRVEpKSB8fAorCSAgICAwID09IG1lbWNtcChidWYsIEdBUk1JTl9TVE9QX1RSQU5TRkVSX1JFUV9WMiwgCisJICAgICAgICAgICAgICAgIHNpemVvZihHQVJNSU5fU1RPUF9UUkFOU0ZFUl9SRVFfVjIpKSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyB2b2lkIHNlbmRfdG9fdHR5KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgYWN0dWFsX2xlbmd0aCkKK3sKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OworCWludCBpOworCisJaWYgKHR0eSAmJiBhY3R1YWxfbGVuZ3RoKSB7CisKKwkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCAKKwkJCQkJX19GVU5DVElPTl9fLCBhY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgYWN0dWFsX2xlbmd0aCA7ICsraSkgeworCQkJLyogaWYgd2UgaW5zZXJ0IG1vcmUgdGhhbiBUVFlfRkxJUEJVRl9TSVpFIGNoYXJhY3RlcnMsCisJCQkgICB3ZSBkcm9wIHRoZW0uICovCisJCQlpZih0dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkgeworCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQl9CisJCQkvKiB0aGlzIGRvZXNuJ3QgYWN0dWFsbHkgcHVzaCB0aGUgZGF0YSB0aHJvdWdoIHVubGVzcworCQkJICAgdHR5LT5sb3dfbGF0ZW5jeSBpcyBzZXQgKi8KKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgMCk7CisJCX0KKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwl9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcGFja2V0IHF1ZXVlIGhhbmRsaW5nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogcXVldWUgYSByZWNlaXZlZCAodXNiLSlwYWNrZXQgZm9yIGxhdGVyIHByb2Nlc3NpbmcKKyAqLworc3RhdGljIGludCBwa3RfYWRkKHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AsCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGRhdGFfbGVuZ3RoKQoreworCWludCByZXN1bHQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGdhcm1pbl9wYWNrZXQgKnBrdDsKKworCS8qIHByb2Nlc3Mgb25seSBwYWNrZXRzIGNvbnRhaW5nIGRhdGEgLi4uICovCisJaWYgKGRhdGFfbGVuZ3RoKSB7CisJCWdhcm1pbl9kYXRhX3AtPmZsYWdzIHw9IEZMQUdTX1FVRVVJTkc7CisJCXBrdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBnYXJtaW5fcGFja2V0KStkYXRhX2xlbmd0aCwKKwkJICAgICAgICAgICAgICBHRlBfQVRPTUlDKTsKKwkJaWYgKHBrdCA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKCZnYXJtaW5fZGF0YV9wLT5wb3J0LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJCXBrdC0+c2l6ZSA9IGRhdGFfbGVuZ3RoOworCQltZW1jcHkocGt0LT5kYXRhLCBkYXRhLCBkYXRhX2xlbmd0aCk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKKwkJcmVzdWx0ID0gbGlzdF9lbXB0eSgmZ2FybWluX2RhdGFfcC0+cGt0bGlzdCk7CisJCXBrdC0+c2VxID0gZ2FybWluX2RhdGFfcC0+c2VxX2NvdW50ZXIrKzsKKwkJbGlzdF9hZGRfdGFpbCgmcGt0LT5saXN0LCAmZ2FybWluX2RhdGFfcC0+cGt0bGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKKworCQkvKiBpbiBzZXJpYWwgbW9kZSwgaWYgc29tZW9uZSBpcyB3YWl0aW5nIGZvciBkYXRhIGZyb20KKwkJICAgdGhlIGRldmljZSwgaWNvbnZlcnQgYW5kIHNlbmQgdGhlIG5leHQgcGFja2V0IHRvIHR0eS4gKi8KKwkJaWYgKHJlc3VsdCAmJiAoZ2FybWluX2RhdGFfcC0+c3RhdGUgPT0gU1RBVEVfR1NQX1dBSVRfREFUQSkpIHsKKwkJCWdzcF9uZXh0X3BhY2tldChnYXJtaW5fZGF0YV9wKTsKKwkJfQorCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qIGdldCB0aGUgbmV4dCBwZW5kaW5nIHBhY2tldCAqLworc3RhdGljIHN0cnVjdCBnYXJtaW5fcGFja2V0ICpwa3RfcG9wKHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3ApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZ2FybWluX3BhY2tldCAqcmVzdWx0ID0gTlVMTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZnYXJtaW5fZGF0YV9wLT5wa3RsaXN0KSkgeworCQlyZXN1bHQgPSAoc3RydWN0IGdhcm1pbl9wYWNrZXQgKilnYXJtaW5fZGF0YV9wLT5wa3RsaXN0Lm5leHQ7CisJCWxpc3RfZGVsKCZyZXN1bHQtPmxpc3QpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKiBmcmVlIHVwIGFsbCBxdWV1ZWQgZGF0YSAqLworc3RhdGljIHZvaWQgcGt0X2NsZWFyKHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3ApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZ2FybWluX3BhY2tldCAqcmVzdWx0ID0gTlVMTDsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmdhcm1pbl9kYXRhX3AtPnBrdGxpc3QpKSB7CisJCXJlc3VsdCA9IChzdHJ1Y3QgZ2FybWluX3BhY2tldCAqKWdhcm1pbl9kYXRhX3AtPnBrdGxpc3QubmV4dDsKKwkJbGlzdF9kZWwoJnJlc3VsdC0+bGlzdCk7CisJCWtmcmVlKHJlc3VsdCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBnYXJtaW4gc2VyaWFsIHByb3RvY29sIGhhbmRsaW5nIGhhbmRsaW5nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBzZW5kIGFuIGFjayBwYWNrZXQgYmFjayB0byB0aGUgdHR5ICovCitzdGF0aWMgaW50IGdzcF9zZW5kX2FjayhzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wLCBfX3U4IHBrdF9pZCkKK3sKKwlfX3U4IHBrdFsxMF07CisgICAgICAgIF9fdTggY2tzdW0gPSAwOworICAgICAgICBfX3U4ICpwdHIgPSBwa3Q7CisgICAgICAgIHVuc2lnbmVkICBsID0gMDsKKworCWRiZygiJXMgLSBwa3QtaWQ6IDB4JVguIiwgX19GVU5DVElPTl9fLCAweEZGICYgcGt0X2lkKTsKKworCSpwdHIrKyA9IERMRTsKKwkqcHRyKysgPSBBQ0s7CisJY2tzdW0gKz0gQUNLOworCisJKnB0cisrID0gMjsKKwlja3N1bSArPSAyOworCisJKnB0cisrID0gcGt0X2lkOworCWNrc3VtICs9IHBrdF9pZDsKKworCWlmIChwa3RfaWQgPT0gRExFKSB7CisJCSpwdHIrKyA9IERMRTsKKwl9CisKKwkqcHRyKysgPSAwOworCSpwdHIrKyA9IDB4RkYgJiAoLWNrc3VtKTsKKwkqcHRyKysgPSBETEU7CisJKnB0cisrID0gRVRYOworCisJbCA9IHB0ci1wa3Q7CisKKwlzZW5kX3RvX3R0eShnYXJtaW5fZGF0YV9wLT5wb3J0LCBwa3QsIGwpOworCXJldHVybiAwOworfQorCisKKworLyoKKyAqIGNhbGxlZCBmb3IgYSBjb21wbGV0ZSBwYWNrZXQgcmVjZWl2ZWQgZnJvbSB0dHkgbGF5ZXIKKyAqCisgKiB0aGUgY29tcGxldGUgcGFja2V0IChwa3ppZCAuLi4gY2tzdW0pIGlzIGluIGdhcm1pbl9kYXRhX3AtPmluYnVmIHN0YXJ0aW5nCisgKiBhdCBHU1BfSU5JVElBTF9PRkZTRVQuCisgKgorICogY291bnQgLSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGlucHV0IGJ1ZmZlciBpbmNsdWRpbmcgc3BhY2UgcmVzZXJ2ZWQgZm9yCisgKiAgICAgICAgIHRoZSB1c2IgaGVhZGVyOiBHU1BfSU5JVElBTF9PRkZTRVQgKyBudW1iZXIgb2YgYnl0ZXMgaW4gcGFja2V0IAorICogICAgICAgICAoaW5jbHVkaW5nIHBrdC1pZCwgZGF0YS1sZW5ndGggYS4gY2tzdW0pCisgKi8KK3N0YXRpYyBpbnQgZ3NwX3JlY19wYWNrZXQoc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCwgaW50IGNvdW50KQoreworCWNvbnN0IF9fdTgqIHJlY3BrdCA9IGdhcm1pbl9kYXRhX3AtPmluYnVmZmVyK0dTUF9JTklUSUFMX09GRlNFVDsKKyAgICAgICAgX19sZTMyICp1c2JkYXRhID0gKF9fbGUzMiAqKSBnYXJtaW5fZGF0YV9wLT5pbmJ1ZmZlcjsKKworCWludCBja3N1bSA9IDA7CisJaW50IG4gPSAwOworCWludCBwa3RpZCA9IHJlY3BrdFswXTsKKwlpbnQgc2l6ZSA9IHJlY3BrdFsxXTsKKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJmdhcm1pbl9kYXRhX3AtPnBvcnQtPmRldiwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGNvdW50LUdTUF9JTklUSUFMX09GRlNFVCwgcmVjcGt0KTsKKworCWlmIChzaXplICE9IChjb3VudC1HU1BfSU5JVElBTF9PRkZTRVQtMykpIHsKKwkJZGJnKCIlcyAtIGludmFsaWQgc2l6ZSwgZXhwZWN0ZWQgJWQgYnl0ZXMsIGdvdCAlZCIsCisJCQlfX0ZVTkNUSU9OX18sIHNpemUsIChjb3VudC1HU1BfSU5JVElBTF9PRkZTRVQtMykpOworCQlyZXR1cm4gLUVJTlZQS1Q7CisJfQorCisJY2tzdW0gKz0gKnJlY3BrdCsrOworCWNrc3VtICs9ICpyZWNwa3QrKzsKKworCS8vIHNhbml0eSBjaGVjaywgcmVtb3ZlIGFmdGVyIHRlc3QgLi4uCisJaWYgKChfX3U4KikmKHVzYmRhdGFbM10pICE9IHJlY3BrdCkgeworCQlkYmcoIiVzIC0gcHRyIG1pc21hdGNoICVwIC0gJXAiLAorCQkJX19GVU5DVElPTl9fLCAmKHVzYmRhdGFbNF0pLCByZWNwa3QpOworCQlyZXR1cm4gLUVJTlZQS1Q7CisJfQorCisJd2hpbGUgKG4gPCBzaXplKSB7CisJCWNrc3VtICs9ICpyZWNwa3QrKzsKKwkJbisrOworCX0KKworICAgICAgIGlmICgoMHhmZiAmIChja3N1bSArICpyZWNwa3QpKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgZGJnKCIlcyAtIGludmFsaWQgY2hlY2tzdW0sIGV4cGVjdGVkICUwMngsIGdvdCAlMDJ4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgMHhmZiAmIC1ja3N1bSwgMHhmZiAmICpyZWNwa3QpOworICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVlBLVDsKKyAgICAgICAgfQorCisJdXNiZGF0YVswXSA9IF9fY3B1X3RvX2xlMzIoR0FSTUlOX0xBWUVSSURfQVBQTCk7CisJdXNiZGF0YVsxXSA9IF9fY3B1X3RvX2xlMzIocGt0aWQpOworCXVzYmRhdGFbMl0gPSBfX2NwdV90b19sZTMyKHNpemUpOworCisJZ2FybWluX3dyaXRlX2J1bGsgKGdhcm1pbl9kYXRhX3AtPnBvcnQsIGdhcm1pbl9kYXRhX3AtPmluYnVmZmVyLAorCQkJICAgR0FSTUlOX1BLVEhEUl9MRU5HVEgrc2l6ZSk7CisKKwkvKiBpZiB0aGlzIHdhcyBhbiBhYm9ydC10cmFuc2ZlciBjb21tYW5kLCBmbHVzaCBhbGwKKwkgICBxdWV1ZWQgZGF0YS4gKi8KKwlpZiAoaXNBYm9ydFRyZkNtbmQoZ2FybWluX2RhdGFfcC0+aW5idWZmZXIpKSB7CisJCWdhcm1pbl9kYXRhX3AtPmZsYWdzIHw9IEZMQUdTX0RST1BfREFUQTsKKwkJcGt0X2NsZWFyKGdhcm1pbl9kYXRhX3ApOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworCisKKy8qCisgKiBDYWxsZWQgZm9yIGRhdGEgcmVjZWl2ZWQgZnJvbSB0dHkKKyAqCisgKiBidWYgY29udGFpbnMgdGhlIGRhdGEgcmVhZCwgaXQgbWF5IHNwYW4gbW9yZSB0aGFuIG9uZSBwYWNrZXQgb3IgZXZlbgorICogaW5jb21wbGV0ZSBwYWNrZXRzCisgKgorICogaW5wdXQgcmVjb3JkIHNob3VsZCBiZSBhIHNlcmlhbC1yZWNvcmQsIGJ1dCBpdCBtYXkgbm90IGJlIGNvbXBsZXRlLgorICogQ29weSBpdCBpbnRvIG91ciBsb2NhbCBidWZmZXIsIHVudGlsIGFuIGV0eCBpcyBzZWVuIChvciBhbiBlcnJvcgorICogb2NjdXJzKS4KKyAqIE9uY2UgdGhlIHJlY29yZCBpcyBjb21wbGV0ZSwgY29udmVydCBpbnRvIGEgdXNiIHBhY2tldCBhbmQgc2VuZCBpdAorICogdG8gdGhlIGJ1bGsgcGlwZSwgc2VuZCBhbiBhY2sgYmFjayB0byB0aGUgdHR5LgorICoKKyAqIElmIHRoZSBpbnB1dCBpcyBhbiBhY2ssIGp1c3Qgc2VuZCB0aGUgbGFzdCBxdWV1ZWQgcGFja2V0IHRvIHRoZQorICogdHR5IGxheWVyLgorICoKKyAqIGlmIHRoZSBpbnB1dCBpcyBhbiBhYm9ydCBjb21tYW5kLCBkcm9wIGFsbCBxdWV1ZWQgZGF0YS4KKyAqLworCitzdGF0aWMgaW50IGdzcF9yZWNlaXZlKHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCWludCBvZmZzID0gMDsKKwlpbnQgYWNrX29yX25ha19zZWVuID0gMDsKKwlpbnQgaSA9IDA7CisJX191OCAqZGVzdCA9IGdhcm1pbl9kYXRhX3AtPmluYnVmZmVyOworCWludCBzaXplID0gZ2FybWluX2RhdGFfcC0+aW5zaXplOworCS8vIGRsZVNlZW46IHNldCBpZiBsYXN0IGJ5dGUgcmVhZCB3YXMgYSBETEUKKwlpbnQgZGxlU2VlbiA9IGdhcm1pbl9kYXRhX3AtPmZsYWdzICYgRkxBR1NfR1NQX0RMRVNFRU47CisJLy8gc2tpcDogaWYgc2V0LCBza2lwIGluY29taW5nIGRhdGEgdW50aWwgcG9zc2libGUgc3RhcnQgb2YKKwkvLyAgICAgICBuZXcgcGFja2V0CisJaW50IHNraXAgPSBnYXJtaW5fZGF0YV9wLT5mbGFncyAmIEZMQUdTX0dTUF9TS0lQOworCV9fdTggZGF0YTsKKworCWRiZygiJXMgLSBkbGU9JWQgc2tpcD0lZCBzaXplPSVkIGNvdW50PSVkIiwKKwkJX19GVU5DVElPTl9fLCBkbGVTZWVuLCBza2lwLCBzaXplLCBjb3VudCk7CisKKwlpZiAoc2l6ZSA9PSAwKSB7CisJCXNpemUgPSBHU1BfSU5JVElBTF9PRkZTRVQ7CisJfQorCisJd2hpbGUgKG9mZnMgPCBjb3VudCkgeworCisJCWRhdGEgPSAqKGJ1ZitvZmZzKTsKKwkJb2ZmcyArKzsKKworCQlpZiAoZGF0YSA9PSBETEUpIHsKKwkJCWlmIChza2lwKSB7IC8qIHN0YXJ0IG9mIGEgbmV3IHBrdCAqLworCQkJCXNraXAgPSAwOworCQkJCXNpemUgPSBHU1BfSU5JVElBTF9PRkZTRVQ7CisJCQkJZGxlU2VlbiA9IDE7CisJCQl9IGVsc2UgaWYgKGRsZVNlZW4pIHsKKwkJCQlkZXN0W3NpemUrK10gPSBkYXRhOworCQkJCWRsZVNlZW4gPSAwOworCQkJfSBlbHNlIHsKKwkJCQlkbGVTZWVuID0gMTsKKwkJCX0KKwkJfSBlbHNlIGlmIChkYXRhID09IEVUWCkgeworCQkJaWYgKGRsZVNlZW4pIHsKKwkJCQkvKiBwYWNrZXQgY29tcGxldGUgKi8KKworCQkJCWRhdGEgPSBkZXN0W0dTUF9JTklUSUFMX09GRlNFVF07CisKKwkJCQlpZiAoZGF0YSA9PSBBQ0spIHsKKwkJCQkJYWNrX29yX25ha19zZWVuID0gQUNLOworCQkJCQlkYmcoIkFDSyBwYWNrZXQgY29tcGxldGUuIik7CisJCQkJfSBlbHNlIGlmIChkYXRhID09IE5BSykgeworCQkJCQlhY2tfb3JfbmFrX3NlZW4gPSBOQUs7CisJCQkJCWRiZygiTkFLIHBhY2tldCBjb21wbGV0ZS4iKTsKKwkJCQl9IGVsc2UgeworCQkJCQlkYmcoInBhY2tldCBjb21wbGV0ZSAiCisJCQkJCQkgICAgICAgICItIGlkPTB4JVguIiwKKwkJCQkJCSAgICAgICAgMHhGRiAmIGRhdGEpOworCQkJCQlnc3BfcmVjX3BhY2tldChnYXJtaW5fZGF0YV9wLCBzaXplKTsKKwkJCQl9CisKKwkJCQlza2lwID0gMTsKKwkJCQlzaXplID0gR1NQX0lOSVRJQUxfT0ZGU0VUOworCQkJCWRsZVNlZW4gPSAwOworCQkJfSBlbHNlIHsKKwkJCQlkZXN0W3NpemUrK10gPSBkYXRhOworCQkJfQorCQl9IGVsc2UgaWYgKCFza2lwKSB7CisKKwkJCWlmIChkbGVTZWVuKSB7CisJCQkJZGJnKCJub24tbWFza2VkIERMRSBhdCAlZCAtIHJlc3RhcnRpbmciLCBpKTsKKwkJCQlzaXplID0gR1NQX0lOSVRJQUxfT0ZGU0VUOworCQkJCWRsZVNlZW4gPSAwOworCQkJfQorCisJCQlkZXN0W3NpemUrK10gPSBkYXRhOworCQl9CisKKwkJaWYgKHNpemUgPj0gR1BTX0lOX0JVRlNJWikgeworCQkJZGJnKCIlcyAtIHBhY2tldCB0b28gbGFyZ2UuIiwgX19GVU5DVElPTl9fKTsKKwkJCXNraXAgPSAxOworCQkJc2l6ZSA9IEdTUF9JTklUSUFMX09GRlNFVDsKKwkJCWRsZVNlZW4gPSAwOworCQl9CisJfQorCisJZ2FybWluX2RhdGFfcC0+aW5zaXplID0gc2l6ZTsKKworCS8vIGNvcHkgZmxhZ3MgYmFjayB0byBzdHJ1Y3R1cmUKKwlpZiAoc2tpcCkKKwkJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgfD0gRkxBR1NfR1NQX1NLSVA7CisJZWxzZQorCQlnYXJtaW5fZGF0YV9wLT5mbGFncyAmPSB+RkxBR1NfR1NQX1NLSVA7CisKKwlpZiAoZGxlU2VlbikKKwkJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgfD0gRkxBR1NfR1NQX0RMRVNFRU47CisJZWxzZQorCQlnYXJtaW5fZGF0YV9wLT5mbGFncyAmPSB+RkxBR1NfR1NQX0RMRVNFRU47CisKKwlpZiAoYWNrX29yX25ha19zZWVuKSB7CisJCWdhcm1pbl9kYXRhX3AtPnN0YXRlID0gU1RBVEVfR1NQX1dBSVRfREFUQTsKKwkJZ3NwX25leHRfcGFja2V0KGdhcm1pbl9kYXRhX3ApOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworCisKKworLyoKKyAqIFNlbmRzIGEgdXNiIHBhY2tldCB0byB0aGUgdHR5CisgKgorICogQXNzdW1lcywgdGhhdCBhbGwgcGFja2FnZXMgYW5kIGF0IGFuIHVzYi1wYWNrZXQgYm91bmRhcnkuCisgKgorICogcmV0dXJuIDwwIG9uIGVycm9yLCAwIGlmIHBhY2tldCBpcyBpbmNvbXBsZXRlIG9yID4gMCBpZiBwYWNrZXQgd2FzIHNlbnQKKyAqLworc3RhdGljIGludCBnc3Bfc2VuZChzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wLAorCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqc3JjOworCXVuc2lnbmVkIGNoYXIgKmRzdDsKKwlpbnQgcGt0aWQgPSAwOworCWludCBkYXRhbGVuID0gMDsKKwlpbnQgY2tzdW0gPSAwOworCWludCBpPTA7CisJaW50IGs7CisKKwlkYmcoIiVzIC0gc3RhdGUgJWQgLSAlZCBieXRlcy4iLCBfX0ZVTkNUSU9OX18sCisJICAgICAgICAgZ2FybWluX2RhdGFfcC0+c3RhdGUsIGNvdW50KTsKKworCWsgPSBnYXJtaW5fZGF0YV9wLT5vdXRzaXplOworCWlmICgoaytjb3VudCkgPiBHUFNfT1VUX0JVRlNJWikgeworCQlkYmcoInBhY2tldCB0b28gbGFyZ2UiKTsKKwkJZ2FybWluX2RhdGFfcC0+b3V0c2l6ZSA9IDA7CisJCXJldHVybiAtNDsKKwl9CisKKwltZW1jcHkoZ2FybWluX2RhdGFfcC0+b3V0YnVmZmVyK2ssIGJ1ZiwgY291bnQpOworCWsgKz0gY291bnQ7CisJZ2FybWluX2RhdGFfcC0+b3V0c2l6ZSA9IGs7CisKKwlpZiAoayA+PSBHQVJNSU5fUEtUSERSX0xFTkdUSCkgeworCQlwa3RpZCAgPSBnZXRQYWNrZXRJZChnYXJtaW5fZGF0YV9wLT5vdXRidWZmZXIpOworCQlkYXRhbGVuPSBnZXREYXRhTGVuZ3RoKGdhcm1pbl9kYXRhX3AtPm91dGJ1ZmZlcik7CisJCWkgPSBHQVJNSU5fUEtUSERSX0xFTkdUSCArIGRhdGFsZW47CisJCWlmIChrIDwgaSkKKwkJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXJldHVybiAwOworCX0KKworCWRiZygiJXMgLSAlZCBieXRlcyBpbiBidWZmZXIsICVkIGJ5dGVzIGluIHBrdC4iLCBfX0ZVTkNUSU9OX18sCisJICAgICAgICAgaywgaSk7CisKKwkvKiBnYXJtaW5fZGF0YV9wLT5vdXRidWZmZXIgbm93IGNvbnRhaW5zIGEgY29tcGxldGUgcGFja2V0ICovCisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZnYXJtaW5fZGF0YV9wLT5wb3J0LT5kZXYsCisJCSAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIGssIGdhcm1pbl9kYXRhX3AtPm91dGJ1ZmZlcik7CisKKwlnYXJtaW5fZGF0YV9wLT5vdXRzaXplID0gMDsKKworCWlmIChHQVJNSU5fTEFZRVJJRF9BUFBMICE9IGdldExheWVySWQoZ2FybWluX2RhdGFfcC0+b3V0YnVmZmVyKSkgeworCQlkYmcoIm5vdCBhbiBhcHBsaWNhdGlvbiBwYWNrZXQgKCVkKSIsIAorCQkgICAgICAgIGdldExheWVySWQoZ2FybWluX2RhdGFfcC0+b3V0YnVmZmVyKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAocGt0aWQgPiAyNTUpIHsKKwkJZGJnKCJwYWNrZXQtaWQgJWQgdG9vIGxhcmdlIiwgcGt0aWQpOworCQlyZXR1cm4gLTI7CisJfQorCisJaWYgKGRhdGFsZW4gPiAyNTUpIHsKKwkJZGJnKCJwYWNrZXQtc2l6ZSAlZCB0b28gbGFyZ2UiLCBkYXRhbGVuKTsKKwkJcmV0dXJuIC0zOworCX0KKworCS8qIHRoZSBzZXJpYWwgcHJvdG9jb2wgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIHRoaXMgcGFja2V0ICovCisKKwlrID0gMDsKKwlzcmMgPSBnYXJtaW5fZGF0YV9wLT5vdXRidWZmZXIrR0FSTUlOX1BLVEhEUl9MRU5HVEg7CisJZm9yIChpPTA7IGk8ZGF0YWxlbjsgaSsrKSB7CisJCWlmICgqc3JjKysgPT0gRExFKQorCQkJaysrOworCX0KKworCXNyYyA9IGdhcm1pbl9kYXRhX3AtPm91dGJ1ZmZlcitHQVJNSU5fUEtUSERSX0xFTkdUSDsKKwlpZiAoayA+IChHQVJNSU5fUEtUSERSX0xFTkdUSC0yKSkgeworCQkvKiBjYW4ndCBhZGQgc3R1ZmZpbmcgRExFcyBpbiBwbGFjZSwgbW92ZSBkYXRhIHRvIGVuZCAKKyAgICAgICAgICAgICAgICAgICBvZiBidWZmZXIgLi4uICovCisJCWRzdCA9IGdhcm1pbl9kYXRhX3AtPm91dGJ1ZmZlcitHUFNfT1VUX0JVRlNJWi1kYXRhbGVuOworCQltZW1jcHkoZHN0LCBzcmMsIGRhdGFsZW4pOworCQlzcmMgPSBkc3Q7CisJfQorCisJZHN0ID0gZ2FybWluX2RhdGFfcC0+b3V0YnVmZmVyOworCisJKmRzdCsrID0gRExFOworCSpkc3QrKyA9IHBrdGlkOworCWNrc3VtICs9IHBrdGlkOworCSpkc3QrKyA9IGRhdGFsZW47CisJY2tzdW0gKz0gZGF0YWxlbjsKKwlpZiAoZGF0YWxlbiA9PSBETEUpCisJCSpkc3QrKyA9IERMRTsKKworCWZvciAoaT0wOyBpPGRhdGFsZW47IGkrKykgeworCQlfX3U4IGMgPSAqc3JjKys7CisJCSpkc3QrKyA9IGM7CisJCWNrc3VtICs9IGM7CisJCWlmIChjID09IERMRSkKKwkJCSpkc3QrKyA9IERMRTsKKwl9CisJCQorCWNrc3VtID0gMHhGRiAmIC1ja3N1bTsKKwkqZHN0KysgPSBja3N1bTsKKwlpZiAoY2tzdW0gPT0gRExFKQorCQkqZHN0KysgPSBETEU7CisJKmRzdCsrID0gRExFOworCSpkc3QrKyA9IEVUWDsKKworCWkgPSBkc3QtZ2FybWluX2RhdGFfcC0+b3V0YnVmZmVyOworCisJc2VuZF90b190dHkoZ2FybWluX2RhdGFfcC0+cG9ydCwgZ2FybWluX2RhdGFfcC0+b3V0YnVmZmVyLCBpKTsKKworCWdhcm1pbl9kYXRhX3AtPnBrdF9pZCA9IHBrdGlkOworCWdhcm1pbl9kYXRhX3AtPnN0YXRlICA9IFNUQVRFX1dBSVRfVFRZX0FDSzsKKworCXJldHVybiBpOworfQorCisKKworCisKKy8qCisgKiBQcm9jZXNzIHRoZSBuZXh0IHBlbmRpbmcgZGF0YSBwYWNrZXQgLSBpZiB0aGVyZSBpcyBvbmUKKyAqLworc3RhdGljIHZvaWQgZ3NwX25leHRfcGFja2V0KHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3ApCit7CisJc3RydWN0IGdhcm1pbl9wYWNrZXQgKnBrdCA9IE5VTEw7CisKKwl3aGlsZSAoKHBrdCA9IHBrdF9wb3AoZ2FybWluX2RhdGFfcCkpICE9IE5VTEwpIHsKKwkJZGJnKCIlcyAtIG5leHQgcGt0OiAlZCIsIF9fRlVOQ1RJT05fXywgcGt0LT5zZXEpOworCQlpZiAoZ3NwX3NlbmQoZ2FybWluX2RhdGFfcCwgcGt0LT5kYXRhLCBwa3QtPnNpemUpID4gMCkgeworCQkJa2ZyZWUocGt0KTsKKwkJCXJldHVybjsKKwkJfQorCQlrZnJlZShwa3QpOworCX0KK30KKworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZ2FybWluIG5hdGl2ZSBtb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qCisgKiBDYWxsZWQgZm9yIGRhdGEgcmVjZWl2ZWQgZnJvbSB0dHkKKyAqCisgKiBUaGUgaW5wdXQgZGF0YSBpcyBleHBlY3RlZCB0byBiZSBpbiBnYXJtaW4gdXNiLXBhY2tldCBmb3JtYXQuCisgKgorICogYnVmIGNvbnRhaW5zIHRoZSBkYXRhIHJlYWQsIGl0IG1heSBzcGFuIG1vcmUgdGhhbiBvbmUgcGFja2V0CisgKiBvciBldmVuIGluY29tcGxldGUgcGFja2V0cworICovCitzdGF0aWMgaW50IG5hdF9yZWNlaXZlKHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCV9fdTggKiBkZXN0OworCWludCBvZmZzID0gMDsKKwlpbnQgcmVzdWx0ID0gY291bnQ7CisJaW50IGxlbjsKKworCXdoaWxlIChvZmZzIDwgY291bnQpIHsKKwkJLy8gaWYgYnVmZmVyIGNvbnRhaW5zIGhlYWRlciwgY29weSByZXN0IG9mIGRhdGEKKwkJaWYgKGdhcm1pbl9kYXRhX3AtPmluc2l6ZSA+PSBHQVJNSU5fUEtUSERSX0xFTkdUSCkKKwkJCWxlbiA9IEdBUk1JTl9QS1RIRFJfTEVOR1RICisJCQkgICAgICArZ2V0RGF0YUxlbmd0aChnYXJtaW5fZGF0YV9wLT5pbmJ1ZmZlcik7CisJCWVsc2UKKwkJCWxlbiA9IEdBUk1JTl9QS1RIRFJfTEVOR1RIOworCisJCWlmIChsZW4gPj0gR1BTX0lOX0JVRlNJWikgeworCQkJLyogc2VlbSB0byBiZSBhbiBpbnZhbGlkIHBhY2tldCwgaWdub3JlIHJlc3Qgb2YgaW5wdXQgKi8KKwkJCWRiZygiJXMgLSBwYWNrZXQgc2l6ZSB0b28gbGFyZ2U6ICVkIiwKKwkJCSAgICAgICAgX19GVU5DVElPTl9fLCBsZW4pOworCQkJZ2FybWluX2RhdGFfcC0+aW5zaXplID0gMDsKKwkJCWNvdW50ID0gMDsKKwkJCXJlc3VsdCA9IC1FSU5WUEtUOworCQl9IGVsc2UgeworCQkJbGVuIC09IGdhcm1pbl9kYXRhX3AtPmluc2l6ZTsKKwkJCWlmIChsZW4gPiAoY291bnQtb2ZmcykpCisJCQkJbGVuID0gKGNvdW50LW9mZnMpOworCQkJaWYgKGxlbiA+IDApIHsKKwkJCQlkZXN0ID0gZ2FybWluX2RhdGFfcC0+aW5idWZmZXIKKwkJCQkgICAgICAgCStnYXJtaW5fZGF0YV9wLT5pbnNpemU7CisJCQkJbWVtY3B5KGRlc3QsIGJ1ZitvZmZzLCBsZW4pOworCQkJCWdhcm1pbl9kYXRhX3AtPmluc2l6ZSArPSBsZW47CisJCQkJb2ZmcyArPSBsZW47CisJCQl9CisJCX0KKworCQkvKiBkbyB3ZSBoYXZlIGEgY29tcGxldGUgcGFja2V0ID8gKi8KKwkJaWYgKGdhcm1pbl9kYXRhX3AtPmluc2l6ZSA+PSBHQVJNSU5fUEtUSERSX0xFTkdUSCkgeworCQkJbGVuID0gR0FSTUlOX1BLVEhEUl9MRU5HVEgrCisJCQkgICBnZXREYXRhTGVuZ3RoKGdhcm1pbl9kYXRhX3AtPmluYnVmZmVyKTsKKwkJCWlmIChnYXJtaW5fZGF0YV9wLT5pbnNpemUgPj0gbGVuKSB7CisJCQkJZ2FybWluX3dyaXRlX2J1bGsgKGdhcm1pbl9kYXRhX3AtPnBvcnQsCisJCQkJICAgICAgICAgICAgICAgICAgIGdhcm1pbl9kYXRhX3AtPmluYnVmZmVyLAorCQkJCSAgICAgICAgICAgICAgICAgICBsZW4pOworCQkJCWdhcm1pbl9kYXRhX3AtPmluc2l6ZSA9IDA7CisKKwkJCQkvKiBpZiB0aGlzIHdhcyBhbiBhYm9ydC10cmFuc2ZlciBjb21tYW5kLAorCQkJCSAgIGZsdXNoIGFsbCBxdWV1ZWQgZGF0YS4gKi8KKwkJCQlpZiAoaXNBYm9ydFRyZkNtbmQoZ2FybWluX2RhdGFfcC0+aW5idWZmZXIpKSB7CisJCQkJCWdhcm1pbl9kYXRhX3AtPmZsYWdzIHw9IEZMQUdTX0RST1BfREFUQTsKKwkJCQkJcGt0X2NsZWFyKGdhcm1pbl9kYXRhX3ApOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHByaXZhdGUgcGFja2V0cworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgcHJpdl9zdGF0dXNfcmVzcChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJX19sZTMyICpwa3QgPSAoX19sZTMyICopZ2FybWluX2RhdGFfcC0+cHJpdnBrdDsKKworCXBrdFswXSA9IF9fY3B1X3RvX2xlMzIoR0FSTUlOX0xBWUVSSURfUFJJVkFURSk7CisJcGt0WzFdID0gX19jcHVfdG9fbGUzMihQUklWX1BLVElEX0lORk9fUkVTUCk7CisJcGt0WzJdID0gX19jcHVfdG9fbGUzMigxMik7CisJcGt0WzNdID0gX19jcHVfdG9fbGUzMihWRVJTSU9OX01BSk9SIDw8IDE2IHwgVkVSU0lPTl9NSU5PUik7CisJcGt0WzRdID0gX19jcHVfdG9fbGUzMihnYXJtaW5fZGF0YV9wLT5tb2RlKTsKKwlwa3RbNV0gPSBfX2NwdV90b19sZTMyKGdhcm1pbl9kYXRhX3AtPnNlcmlhbF9udW0pOworCisJc2VuZF90b190dHkocG9ydCwgKF9fdTgqKXBrdCwgNio0KTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHYXJtaW4gc3BlY2lmaWMgZHJpdmVyIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBwcm9jZXNzX3Jlc2V0ZGV2X3JlcXVlc3Qoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlnYXJtaW5fZGF0YV9wLT5mbGFncyAmPSB+KENMRUFSX0hBTFRfUkVRVUlSRUQpOworCWdhcm1pbl9kYXRhX3AtPnN0YXRlID0gU1RBVEVfUkVTRVQ7CisJZ2FybWluX2RhdGFfcC0+c2VyaWFsX251bSA9IDA7CisKKwl1c2Jfa2lsbF91cmIgKHBvcnQtPmludGVycnVwdF9pbl91cmIpOworCWRiZygiJXMgLSB1c2JfcmVzZXRfZGV2aWNlIiwgX19GVU5DVElPTl9fICk7CisJc3RhdHVzID0gdXNiX3Jlc2V0X2RldmljZShwb3J0LT5zZXJpYWwtPmRldik7CisJaWYgKHN0YXR1cykKKwkJZGJnKCIlcyAtIHVzYl9yZXNldF9kZXZpY2UgZmFpbGVkOiAlZCIsCisJCQlfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworCisKKy8qCisgKiBjbGVhciBhbGwgY2FjaGVkIGRhdGEKKyAqLworc3RhdGljIGludCBnYXJtaW5fY2xlYXIoc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSBnYXJtaW5fZGF0YV9wLT5wb3J0OworCisJaWYgKHBvcnQgIT0gTlVMTCAmJiBnYXJtaW5fZGF0YV9wLT5mbGFncyAmIEZMQUdTX0FQUF9SRVNQX1NFRU4pIHsKKwkJLyogc2VuZCBhIHRlcm1pbmF0ZSBjb21tYW5kICovCisJCXN0YXR1cyA9IGdhcm1pbl93cml0ZV9idWxrKHBvcnQsIEdBUk1JTl9TVE9QX1RSQU5TRkVSX1JFUSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEdBUk1JTl9TVE9QX1RSQU5TRkVSX1JFUSkpOworCX0KKworCS8qIGZsdXNoIGFsbCBxdWV1ZWQgZGF0YSAqLworCXBrdF9jbGVhcihnYXJtaW5fZGF0YV9wKTsKKworCWdhcm1pbl9kYXRhX3AtPmluc2l6ZSA9IDA7CisJZ2FybWluX2RhdGFfcC0+b3V0c2l6ZSA9IDA7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisKKworCisKKworc3RhdGljIGludCBnYXJtaW5faW5pdF9zZXNzaW9uKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludCBzdGF0dXMgPSAwOworCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCXVzYl9raWxsX3VyYiAocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CisKKwkJZGJnKCIlcyAtIGFkZGluZyBpbnRlcnJ1cHQgaW5wdXQiLCBfX0ZVTkNUSU9OX18pOworCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CisJCWlmIChzdGF0dXMpCisJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJICAgICAgICAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiLCIKKwkJCQkiIGVycm9yICVkXG4iLAorCQkJICAgICAgICBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJfQorCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCWRiZygiJXMgLSBzdGFydGluZyBzZXNzaW9uIC4uLiIsIF9fRlVOQ1RJT05fXyk7CisJCWdhcm1pbl9kYXRhX3AtPnN0YXRlID0gU1RBVEVfQUNUSVZFOworCQlzdGF0dXMgPSBnYXJtaW5fd3JpdGVfYnVsayhwb3J0LCBHQVJNSU5fU1RBUlRfU0VTU0lPTl9SRVEsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihHQVJNSU5fU1RBUlRfU0VTU0lPTl9SRVEpKTsKKworCQlpZiAoc3RhdHVzID49IDApIHsKKworCQkJZ2FybWluX2RhdGFfcC0+aWdub3JlUGt0cysrOworCisJCQkvKiBub3QgbmVlZGVkLCBidXQgdGhlIHdpbjMyIGRyaXZlciBkb2VzIGl0IHRvbyAuLi4gKi8KKwkJCXN0YXR1cyA9IGdhcm1pbl93cml0ZV9idWxrKHBvcnQsCisJCQkJCQkgICBHQVJNSU5fU1RBUlRfU0VTU0lPTl9SRVEyLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEdBUk1JTl9TVEFSVF9TRVNTSU9OX1JFUTIpKTsKKwkJCWlmIChzdGF0dXMgPj0gMCkgeworCQkJCXN0YXR1cyA9IDA7CisJCQkJZ2FybWluX2RhdGFfcC0+aWdub3JlUGt0cysrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworCisKKworCitzdGF0aWMgaW50IGdhcm1pbl9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwkvKgorCSAqIEZvcmNlIGxvd19sYXRlbmN5IG9uIHNvIHRoYXQgb3VyIHR0eV9wdXNoIGFjdHVhbGx5IGZvcmNlcyB0aGUgZGF0YQorCSAqIHRocm91Z2gsIG90aGVyd2lzZSBpdCBpcyBzY2hlZHVsZWQsIGFuZCB3aXRoIGhpZ2ggZGF0YSByYXRlcyAobGlrZQorCSAqIHdpdGggT0hDSSkgZGF0YSBjYW4gZ2V0IGxvc3QuCisJICovCisJaWYgKHBvcnQtPnR0eSkKKwkJcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IDE7CisKKwlnYXJtaW5fZGF0YV9wLT5tb2RlICA9IGluaXRpYWxfbW9kZTsKKwlnYXJtaW5fZGF0YV9wLT5jb3VudCA9IDA7CisJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgPSAwOworCisJLyogc2h1dGRvd24gYW55IGJ1bGsgcmVhZHMgdGhhdCBtaWdodCBiZSBnb2luZyBvbiAqLworCXVzYl9raWxsX3VyYiAocG9ydC0+d3JpdGVfdXJiKTsKKwl1c2Jfa2lsbF91cmIgKHBvcnQtPnJlYWRfdXJiKTsKKworCWlmIChnYXJtaW5fZGF0YV9wLT5zdGF0ZSA9PSBTVEFURV9SRVNFVCkgeworCQlzdGF0dXMgPSBnYXJtaW5faW5pdF9zZXNzaW9uKHBvcnQpOworCX0KKworCWdhcm1pbl9kYXRhX3AtPnN0YXRlID0gU1RBVEVfQUNUSVZFOworCisJcmV0dXJuIHN0YXR1czsKK30KKworCitzdGF0aWMgdm9pZCBnYXJtaW5fY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlscCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCAtIG1vZGU9JWQgc3RhdGU9JWQgZmxhZ3M9MHglWCIsIF9fRlVOQ1RJT05fXywKKwkJcG9ydC0+bnVtYmVyLCBnYXJtaW5fZGF0YV9wLT5tb2RlLAorCQlnYXJtaW5fZGF0YV9wLT5zdGF0ZSwgZ2FybWluX2RhdGFfcC0+ZmxhZ3MpOworCisJaWYgKCFzZXJpYWwpCisJCXJldHVybjsKKworCWdhcm1pbl9jbGVhcihnYXJtaW5fZGF0YV9wKTsKKworCS8qIHNodXRkb3duIG91ciB1cmJzICovCisJdXNiX2tpbGxfdXJiIChwb3J0LT5yZWFkX3VyYik7CisJdXNiX2tpbGxfdXJiIChwb3J0LT53cml0ZV91cmIpOworCisJaWYgKG5vUmVzcG9uc2VGcm9tQXBwTGF5ZXIoZ2FybWluX2RhdGFfcCkgfHwKKwkgICAgKChnYXJtaW5fZGF0YV9wLT5mbGFncyAmIENMRUFSX0hBTFRfUkVRVUlSRUQpICE9IDApKSB7CisJCXByb2Nlc3NfcmVzZXRkZXZfcmVxdWVzdChwb3J0KTsKKwkJZ2FybWluX2RhdGFfcC0+c3RhdGUgPSBTVEFURV9SRVNFVDsKKwl9IGVsc2UgeworCQlnYXJtaW5fZGF0YV9wLT5zdGF0ZSA9IFNUQVRFX0RJU0NPTk5FQ1RFRDsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgZ2FybWluX3dyaXRlX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwkvKiBmcmVlIHVwIHRoZSB0cmFuc2ZlciBidWZmZXIsIGFzIHVzYl9mcmVlX3VyYigpIGRvZXMgbm90IGRvIHRoaXMgKi8KKwlrZnJlZSAodXJiLT50cmFuc2Zlcl9idWZmZXIpOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJCV9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnYXJtaW5fZGF0YV9wLT5mbGFncyB8PSBDTEVBUl9IQUxUX1JFUVVJUkVEOworCX0KKworCXNjaGVkdWxlX3dvcmsoJnBvcnQtPndvcmspOworfQorCisKK3N0YXRpYyBpbnQgZ2FybWluX3dyaXRlX2J1bGsgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHVyYiAqdXJiOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwlpbnQgc3RhdHVzOworCisJZGJnKCIlcyAtIHBvcnQgJWQsIHN0YXRlICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsCisJCWdhcm1pbl9kYXRhX3AtPnN0YXRlKTsKKworCWdhcm1pbl9kYXRhX3AtPmZsYWdzICY9IH5GTEFHU19EUk9QX0RBVEE7CisKKwlidWZmZXIgPSBrbWFsbG9jIChjb3VudCwgR0ZQX0FUT01JQyk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CisJaWYgKCF1cmIpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAibm8gbW9yZSBmcmVlIHVyYnNcbiIpOworCQlrZnJlZSAoYnVmZmVyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtY3B5IChidWZmZXIsIGJ1ZiwgY291bnQpOworCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIGNvdW50LCBidWZmZXIpOworCisJdXNiX2ZpbGxfYnVsa191cmIgKHVyYiwgc2VyaWFsLT5kZXYsCisJCQkgCXVzYl9zbmRidWxrcGlwZSAoc2VyaWFsLT5kZXYsCisJCQkJcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKKwkJCQlidWZmZXIsIGNvdW50LAorCQkJCWdhcm1pbl93cml0ZV9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKwl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9aRVJPX1BBQ0tFVDsKKworCWlmIChHQVJNSU5fTEFZRVJJRF9BUFBMID09IGdldExheWVySWQoYnVmZmVyKSkgeworCQlnYXJtaW5fZGF0YV9wLT5mbGFncyB8PSBGTEFHU19BUFBfUkVRX1NFRU47CisJCWlmIChnYXJtaW5fZGF0YV9wLT5tb2RlID09IE1PREVfR0FSTUlOX1NFUklBTCkgIHsKKwkJCXBrdF9jbGVhcihnYXJtaW5fZGF0YV9wKTsKKwkJCWdhcm1pbl9kYXRhX3AtPnN0YXRlID0gU1RBVEVfR1NQX1dBSVRfREFUQTsKKwkJfQorCX0KKworCS8qIHNlbmQgaXQgZG93biB0aGUgcGlwZSAqLworCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCSAgICAgICAgIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgIgorCQkgICAgICAgICJmYWlsZWQgd2l0aCBzdGF0dXMgPSAlZFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCWNvdW50ID0gc3RhdHVzOworCX0gZWxzZSB7CisKKwkJaWYgKEdBUk1JTl9MQVlFUklEX0FQUEwgPT0gZ2V0TGF5ZXJJZChidWZmZXIpCisJCSAgICAmJiAoZ2FybWluX2RhdGFfcC0+bW9kZSA9PSBNT0RFX0dBUk1JTl9TRVJJQUwpKSAgeworCisJCQlnc3Bfc2VuZF9hY2soZ2FybWluX2RhdGFfcCwgYnVmZmVyWzRdKTsKKwkJfQorCX0KKworCS8qIHdlIGFyZSBkb25lIHdpdGggdGhpcyB1cmIsIHNvIGxldCB0aGUgaG9zdCBkcml2ZXIKKwkgKiByZWFsbHkgZnJlZSBpdCB3aGVuIGl0IGlzIGZpbmlzaGVkIHdpdGggaXQgKi8KKwl1c2JfZnJlZV91cmIgKHVyYik7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKworCitzdGF0aWMgaW50IGdhcm1pbl93cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlpbnQgcGt0aWQsIHBrdHNpeiwgbGVuOworCXN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJX19sZTMyICpwcml2cGt0ID0gKF9fbGUzMiAqKWdhcm1pbl9kYXRhX3AtPnByaXZwa3Q7CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgY291bnQsIGJ1Zik7CisKKwkvKiBjaGVjayBmb3Igb3VyIHByaXZhdGUgcGFja2V0cyAqLworCWlmIChjb3VudCA+PSBHQVJNSU5fUEtUSERSX0xFTkdUSCkgeworCisJCWxlbiA9IFBSSVZQS1RTSVo7CisJCWlmIChjb3VudCA8IGxlbikKKwkJCWxlbiA9IGNvdW50OworCisJCW1lbWNweShnYXJtaW5fZGF0YV9wLT5wcml2cGt0LCBidWYsIGxlbik7CisKKwkJcGt0c2l6ID0gZ2V0RGF0YUxlbmd0aChnYXJtaW5fZGF0YV9wLT5wcml2cGt0KTsKKwkJcGt0aWQgID0gZ2V0UGFja2V0SWQoZ2FybWluX2RhdGFfcC0+cHJpdnBrdCk7CisKKwkJaWYgKGNvdW50ID09IChHQVJNSU5fUEtUSERSX0xFTkdUSCtwa3RzaXopCisJCSAgICAmJiBHQVJNSU5fTEFZRVJJRF9QUklWQVRFID09IGdldExheWVySWQoZ2FybWluX2RhdGFfcC0+cHJpdnBrdCkpIHsKKworCQkJZGJnKCIlcyAtIHByb2Nlc3NpbmcgcHJpdmF0ZSByZXF1ZXN0ICVkIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHBrdGlkKTsKKworCQkJLy8gZHJvcCBhbGwgdW5maW5pc2hlZCB0cmFuc2ZlcnMKKwkJCWdhcm1pbl9jbGVhcihnYXJtaW5fZGF0YV9wKTsKKworCQkJc3dpdGNoKHBrdGlkKSB7CisKKwkJCWNhc2UgUFJJVl9QS1RJRF9TRVRfREVCVUc6CisJCQkJaWYgKHBrdHNpeiAhPSA0KQorCQkJCQlyZXR1cm4gLUVJTlZQS1Q7CisJCQkJZGVidWcgPSBfX2xlMzJfdG9fY3B1KHByaXZwa3RbM10pOworCQkJCWRiZygiJXMgLSBkZWJ1ZyBsZXZlbCBzZXQgdG8gMHglWCIsCisJCQkJCV9fRlVOQ1RJT05fXywgZGVidWcpOworCQkJCWJyZWFrOworCisJCQljYXNlIFBSSVZfUEtUSURfU0VUX01PREU6CisJCQkJaWYgKHBrdHNpeiAhPSA0KQorCQkJCQlyZXR1cm4gLUVJTlZQS1Q7CisJCQkJZ2FybWluX2RhdGFfcC0+bW9kZSA9IF9fbGUzMl90b19jcHUocHJpdnBrdFszXSk7CisJCQkJZGJnKCIlcyAtIG1vZGUgc2V0IHRvICVkIiwKKwkJCQkJX19GVU5DVElPTl9fLCBnYXJtaW5fZGF0YV9wLT5tb2RlKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBQUklWX1BLVElEX0lORk9fUkVROgorCQkJCXByaXZfc3RhdHVzX3Jlc3AocG9ydCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUFJJVl9QS1RJRF9SRVNFVF9SRVE6CisJCQkJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgfD0gRkxBR1NfQVBQX1JFUV9TRUVOOworCQkJCWJyZWFrOworCisJCQljYXNlIFBSSVZfUEtUSURfU0VUX0RFRl9NT0RFOgorCQkJCWlmIChwa3RzaXogIT0gNCkKKwkJCQkJcmV0dXJuIC1FSU5WUEtUOworCQkJCWluaXRpYWxfbW9kZSA9IF9fbGUzMl90b19jcHUocHJpdnBrdFszXSk7CisJCQkJZGJnKCIlcyAtIGluaXRpYWxfbW9kZSBzZXQgdG8gJWQiLAorCQkJCQlfX0ZVTkNUSU9OX18sCisJCQkJCWdhcm1pbl9kYXRhX3AtPm1vZGUpOworCQkJCWJyZWFrOworCQkJfQorCQkJcmV0dXJuIGNvdW50OworCQl9CisJfQorCisJaWYgKGdhcm1pbl9kYXRhX3AtPm1vZGUgPT0gTU9ERV9HQVJNSU5fU0VSSUFMKSB7CisJCXJldHVybiBnc3BfcmVjZWl2ZShnYXJtaW5fZGF0YV9wLCBidWYsIGNvdW50KTsKKwl9IGVsc2UgewkvKiBNT0RFX05BVElWRSAqLworCQlyZXR1cm4gbmF0X3JlY2VpdmUoZ2FybWluX2RhdGFfcCwgYnVmLCBjb3VudCk7CisJfQorfQorCisKK3N0YXRpYyBpbnQgZ2FybWluX3dyaXRlX3Jvb20gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJLyoKKwkgKiBSZXBvcnQgYmFjayB0aGUgYnl0ZXMgY3VycmVudGx5IGF2YWlsYWJsZSBpbiB0aGUgb3V0cHV0IGJ1ZmZlci4KKwkgKi8KKwlzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXJldHVybiBHUFNfT1VUX0JVRlNJWi1nYXJtaW5fZGF0YV9wLT5vdXRzaXplOworfQorCisKK3N0YXRpYyBpbnQgZ2FybWluX2NoYXJzX2luX2J1ZmZlciAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwkvKgorCSAqIFJlcG9ydCBiYWNrIHRoZSBudW1iZXIgb2YgYnl0ZXMgY3VycmVudGx5IGluIG91ciBpbnB1dCBidWZmZXIuCisgICAgICAgICAqIFdpbGwgdGhpcyBsb2NrIHVwIHRoZSBkcml2ZXIgLSB0aGUgYnVmZmVyIGNvbnRhaW5zIGFuIGluY29tcGxldGUKKyAgICAgICAgICogcGFja2FnZSB3aGljaCB3aWxsIG5vdCBiZSB3cml0dGVuIHRvIHRoZSBkZXZpY2UgdW50aWwgaXQKKyAgICAgICAgICogaGFzIGJlZW4gY29tcGxldGVkID8KKyAgICAgICAgICovCisJLy9zdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCS8vcmV0dXJuIGdhcm1pbl9kYXRhX3AtPmluc2l6ZTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBnYXJtaW5fcmVhZF9wcm9jZXNzKHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AsCisJCQkJIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGRhdGFfbGVuZ3RoKQoreworCWlmIChnYXJtaW5fZGF0YV9wLT5mbGFncyAmIEZMQUdTX0RST1BfREFUQSkgeworCQkvKiBhYm9ydC10cmFuc2ZlciBjbWQgaXMgYWN0aWNlICovCisJCWRiZygiJXMgLSBwa3QgZHJvcHBlZCIsIF9fRlVOQ1RJT05fXyk7CisJfSBlbHNlIGlmIChnYXJtaW5fZGF0YV9wLT5zdGF0ZSAhPSBTVEFURV9ESVNDT05ORUNURUQgJiYKKwkgICAgICAgICAgIGdhcm1pbl9kYXRhX3AtPnN0YXRlICE9IFNUQVRFX1JFU0VUICkgeworCisJCS8qIHJlbWVtYmVyIGFueSBhcHBsLmxheWVyIHBhY2tldHMsIHNvIHdlIGtub3cKKwkJICAgaWYgYSByZXNldCBpcyByZXF1aXJlZCBvciBub3Qgd2hlbiBjbG9zaW5nCisJCSAgIHRoZSBkZXZpY2UgKi8KKwkJaWYgKDAgPT0gbWVtY21wKGRhdGEsIEdBUk1JTl9BUFBfTEFZRVJfUkVQTFksCisJCSAgICAgICAgICAgICAgICBzaXplb2YoR0FSTUlOX0FQUF9MQVlFUl9SRVBMWSkpKQorCQkJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgfD0gRkxBR1NfQVBQX1JFU1BfU0VFTjsKKworCQkvKiBpZiB0aHJvdHRsaW5nIGlzIGFjdGl2ZSBvciBwb3N0cHJlY2Vzc2luZyBpcyByZXF1aXJlZAorCQkgICBwdXQgdGhlIHJlY2VpdmVkIGRhdGEgaW4gdGggaW5wdXQgcXVldWUsIG90aGVyd2lzZQorCQkgICBzZW5kIGl0IGRpcmVjdGx5IHRvIHRoZSB0dHkgcG9ydCAqLworCQlpZiAoZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJiBGTEFHU19RVUVVSU5HKSB7CisJCQlwa3RfYWRkKGdhcm1pbl9kYXRhX3AsIGRhdGEsIGRhdGFfbGVuZ3RoKTsKKwkJfSBlbHNlIGlmIChnYXJtaW5fZGF0YV9wLT5tb2RlID09IE1PREVfR0FSTUlOX1NFUklBTCkgeworCQkJaWYgKGdldExheWVySWQoZGF0YSkgPT0gR0FSTUlOX0xBWUVSSURfQVBQTCkgeworCQkJCXBrdF9hZGQoZ2FybWluX2RhdGFfcCwgZGF0YSwgZGF0YV9sZW5ndGgpOworCQkJfQorCQl9IGVsc2UgeworCQkJc2VuZF90b190dHkoZ2FybWluX2RhdGFfcC0+cG9ydCwgZGF0YSwgZGF0YV9sZW5ndGgpOworCQl9CisJfQorfQorCisKK3N0YXRpYyB2b2lkIGdhcm1pbl9yZWFkX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSAgcG9ydC0+c2VyaWFsOworCXN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCBzdGF0dXM7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICghc2VyaWFsKSB7CisJCWRiZygiJXMgLSBiYWQgc2VyaWFsIHBvaW50ZXIsIGV4aXRpbmciLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJCV9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCAKKwkJCQlfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CisKKwlnYXJtaW5fcmVhZF9wcm9jZXNzKGdhcm1pbl9kYXRhX3AsIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisKKwkvKiBDb250aW51ZSB0cnlpbmcgdG8gcmVhZCB1bnRpbCBub3RoaW5nIG1vcmUgaXMgcmVjZWl2ZWQgICovCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IDApIHsKKwkJdXNiX2ZpbGxfYnVsa191cmIgKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwKKwkJCSAgIHVzYl9yY3ZidWxrcGlwZSAoc2VyaWFsLT5kZXYsCisJCQkJCSAgICBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQkgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkgICBnYXJtaW5fcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAoc3RhdHVzKQorCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJICAgICAgICBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJfQorCXJldHVybjsKK30KKworCitzdGF0aWMgdm9pZCBnYXJtaW5fcmVhZF9pbnRfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwKKwkJCV9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkJX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgCisJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID09IHNpemVvZihHQVJNSU5fQlVMS19JTl9BVkFJTF9SRVBMWSkgJiYKKwkgICAgMCA9PSBtZW1jbXAoZGF0YSwgR0FSTUlOX0JVTEtfSU5fQVZBSUxfUkVQTFksCisJCSAgICAgICAgc2l6ZW9mKEdBUk1JTl9CVUxLX0lOX0FWQUlMX1JFUExZKSkpIHsKKworCQlkYmcoIiVzIC0gYnVsayBkYXRhIGF2YWlsYWJsZS4iLCBfX0ZVTkNUSU9OX18pOworCisJCS8qIGJ1bGsgZGF0YSBhdmFpbGFibGUgKi8KKwkJdXNiX2ZpbGxfYnVsa191cmIgKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwKKwkJCQl1c2JfcmN2YnVsa3BpcGUgKHNlcmlhbC0+ZGV2LAorCQkJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCWdhcm1pbl9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CisJCWlmIChzdGF0dXMpIHsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCX0KKworCX0gZWxzZSBpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID09ICg0K3NpemVvZihHQVJNSU5fU1RBUlRfU0VTU0lPTl9SRVBMWSkpCisJCQkgJiYgMCA9PSBtZW1jbXAoZGF0YSwgR0FSTUlOX1NUQVJUX1NFU1NJT05fUkVQTFksCisJCQkgICAgICAgICAgICAgICAgc2l6ZW9mKEdBUk1JTl9TVEFSVF9TRVNTSU9OX1JFUExZKSkpIHsKKworCQlnYXJtaW5fZGF0YV9wLT5mbGFncyB8PSBGTEFHU19TRVNTSU9OX1JFUExZMV9TRUVOOworCisJCS8qIHNhdmUgdGhlIHNlcmlhbCBudW1iZXIgKi8KKwkJZ2FybWluX2RhdGFfcC0+c2VyaWFsX251bSAKKwkJCT0gX19sZTMyX3RvX2NwdXAoKF9fbGUzMiopKGRhdGErR0FSTUlOX1BLVEhEUl9MRU5HVEgpKTsKKworCQlkYmcoIiVzIC0gc3RhcnQtb2Ytc2Vzc2lvbiByZXBseSBzZWVuIC0gc2VyaWFsICV1LiIsCisJCQlfX0ZVTkNUSU9OX18sIGdhcm1pbl9kYXRhX3AtPnNlcmlhbF9udW0pOworCX0KKworCWlmIChnYXJtaW5fZGF0YV9wLT5pZ25vcmVQa3RzKSB7CisJCS8qIHRoaXMgcmVwbHkgYmVsb25ncyB0byBhIHJlcXVlc3QgZ2VuZXJhdGVkIGJ5IHRoZSBkcml2ZXIsCisJCSAgIGlnbm9yZSBpdC4gKi8KKwkJZGJnKCIlcyAtIHBrdCBpZ25vcmVkICglZCkiLAorCQkJX19GVU5DVElPTl9fLCBnYXJtaW5fZGF0YV9wLT5pZ25vcmVQa3RzKTsKKwkJZ2FybWluX2RhdGFfcC0+aWdub3JlUGt0cy0tOworCX0gZWxzZSB7CisJCWdhcm1pbl9yZWFkX3Byb2Nlc3MoZ2FybWluX2RhdGFfcCwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwl9CisKKwlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKQorCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LAorCQkJIiVzIC0gRXJyb3IgJWQgc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiXG4iLAorCQkJX19GVU5DVElPTl9fLCBzdGF0dXMpOworfQorCisKKy8qCisgKiBTZW5kcyB0aGUgbmV4dCBxdWV1ZWQgcGFja3QgdG8gdGhlIHR0eSBwb3J0IChnYXJtaW4gbmF0aXZlIG1vZGUgb25seSkKKyAqIGFuZCB0aGVuIHNldHMgYSB0aW1lciB0byBjYWxsIGl0c2VsZiBhZ2FpbiB1bnRpbCBhbGwgcXVldWVkIGRhdGEKKyAqIGlzIHNlbnQuCisgKi8KK3N0YXRpYyBpbnQgZ2FybWluX2ZsdXNoX3F1ZXVlKHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3ApCit7CisJc3RydWN0IGdhcm1pbl9wYWNrZXQgKnBrdDsKKworCWlmICgoZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJiBGTEFHU19USFJPVFRMRUQpID09IDApIHsKKwkJcGt0ID0gcGt0X3BvcChnYXJtaW5fZGF0YV9wKTsKKwkJaWYgKHBrdCAhPSBOVUxMKSB7CisKKwkJCXNlbmRfdG9fdHR5KGdhcm1pbl9kYXRhX3AtPnBvcnQsIHBrdC0+ZGF0YSwgcGt0LT5zaXplKTsKKwkJCWtmcmVlKHBrdCk7CisJCQltb2RfdGltZXIoJmdhcm1pbl9kYXRhX3AtPnRpbWVyLCAoMSkramlmZmllcyk7CisKKwkJfSBlbHNlIHsKKwkJCWdhcm1pbl9kYXRhX3AtPmZsYWdzICY9IH5GTEFHU19RVUVVSU5HOworCQl9CisJfQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIGdhcm1pbl90aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJLyogc2V0IGZsYWcsIGRhdGEgcmVjZWl2ZWQgd2lsbCBiZSBwdXQgaW50byBhIHF1ZXVlCisJICAgZm9yIGxhdGVyIHByb2Nlc3NpbmcgKi8KKwlnYXJtaW5fZGF0YV9wLT5mbGFncyB8PSBGTEFHU19RVUVVSU5HfEZMQUdTX1RIUk9UVExFRDsKK30KKworCitzdGF0aWMgdm9pZCBnYXJtaW5fdW50aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJj0gfkZMQUdTX1RIUk9UVExFRDsKKworCS8qIGluIG5hdGl2ZSBtb2RlIHNlbmQgcXVldWVkIGRhdGEgdG8gdHR5LCBpbgorCSAgIHNlcmlhbCBtb2RlIG5vdGhpbmcgbmVlZHMgdG8gYmUgZG9uZSBoZXJlICovCisJaWYgKGdhcm1pbl9kYXRhX3AtPm1vZGUgPT0gTU9ERV9OQVRJVkUpCisJCWdhcm1pbl9mbHVzaF9xdWV1ZShnYXJtaW5fZGF0YV9wKTsKK30KKworCisKKy8qCisgKiBUaGUgdGltZXIgaXMgY3VycmVudGx5IG9ubHkgdXNlZCB0byBzZW5kIHF1ZXVlZCBwYWNrZXRzIHRvCisgKiB0aGUgdHR5IGluIGNhc2VzIHdoZXJlIHRoZSBwcm90b2NvbCBwcm92aWRlcyBubyBvd24gaGFuZHNoYWtpbmcKKyAqIHRvIGluaXRpYXRlIHRoZSB0cmFuc2Zlci4KKyAqLworc3RhdGljIHZvaWQgdGltZW91dF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZ2FybWluX2RhdGEgKmdhcm1pbl9kYXRhX3AgPSAoc3RydWN0IGdhcm1pbl9kYXRhICopIGRhdGE7CisKKwkvKiBzZW5kIHRoZSBuZXh0IHF1ZXVlZCBwYWNrZXQgdG8gdGhlIHR0eSBwb3J0ICovCisJaWYgKGdhcm1pbl9kYXRhX3AtPm1vZGUgPT0gTU9ERV9OQVRJVkUpCisJCWlmIChnYXJtaW5fZGF0YV9wLT5mbGFncyAmIEZMQUdTX1FVRVVJTkcpCisJCQlnYXJtaW5fZmx1c2hfcXVldWUoZ2FybWluX2RhdGFfcCk7Cit9CisKKworCitzdGF0aWMgaW50IGdhcm1pbl9hdHRhY2ggKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHNlcmlhbC0+cG9ydFswXTsKKwlzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gTlVMTDsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJZ2FybWluX2RhdGFfcCA9IGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgZ2FybWluX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZ2FybWluX2RhdGFfcCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gT3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldCAoZ2FybWluX2RhdGFfcCwgMCwgc2l6ZW9mKHN0cnVjdCBnYXJtaW5fZGF0YSkpOworCWluaXRfdGltZXIoJmdhcm1pbl9kYXRhX3AtPnRpbWVyKTsKKwlzcGluX2xvY2tfaW5pdCgmZ2FybWluX2RhdGFfcC0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmdhcm1pbl9kYXRhX3AtPnBrdGxpc3QpOworCS8vZ2FybWluX2RhdGFfcC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBzZXNzaW9uX3RpbWVvdXQ7CisJZ2FybWluX2RhdGFfcC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWdhcm1pbl9kYXRhX3A7CisJZ2FybWluX2RhdGFfcC0+dGltZXIuZnVuY3Rpb24gPSB0aW1lb3V0X2hhbmRsZXI7CisJZ2FybWluX2RhdGFfcC0+cG9ydCA9IHBvcnQ7CisJZ2FybWluX2RhdGFfcC0+c3RhdGUgPSAwOworCWdhcm1pbl9kYXRhX3AtPmNvdW50ID0gMDsKKwl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgZ2FybWluX2RhdGFfcCk7CisKKwlzdGF0dXMgPSBnYXJtaW5faW5pdF9zZXNzaW9uKHBvcnQpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworCitzdGF0aWMgdm9pZCBnYXJtaW5fc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHNlcmlhbC0+cG9ydFswXTsKKwlzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwl1c2Jfa2lsbF91cmIgKHBvcnQtPmludGVycnVwdF9pbl91cmIpOworCWRlbF90aW1lcl9zeW5jKCZnYXJtaW5fZGF0YV9wLT50aW1lcik7CisJa2ZyZWUgKGdhcm1pbl9kYXRhX3ApOworCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBOVUxMKTsKK30KKworCisKKworCisKKworLyogQWxsIG9mIHRoZSBkZXZpY2UgaW5mbyBuZWVkZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBnYXJtaW5fZGV2aWNlID0geworCS5vd25lciAgICAgICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJLm5hbWUgICAgICAgICAgICAgICAgPSAiR2FybWluIEdQUyB1c2IvdHR5IiwKKwkuc2hvcnRfbmFtZSAgICAgICAgICA9ICJnYXJtaW5fZ3BzIiwKKwkuaWRfdGFibGUgICAgICAgICAgICA9IGlkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luICAgID0gMSwKKwkubnVtX2J1bGtfaW4gICAgICAgICA9IDEsCisJLm51bV9idWxrX291dCAgICAgICAgPSAxLAorCS5udW1fcG9ydHMgICAgICAgICAgID0gMSwKKwkub3BlbiAgICAgICAgICAgICAgICA9IGdhcm1pbl9vcGVuLAorCS5jbG9zZSAgICAgICAgICAgICAgID0gZ2FybWluX2Nsb3NlLAorCS50aHJvdHRsZSAgICAgICAgICAgID0gZ2FybWluX3Rocm90dGxlLAorCS51bnRocm90dGxlICAgICAgICAgID0gZ2FybWluX3VudGhyb3R0bGUsCisJLmF0dGFjaCAgICAgICAgICAgICAgPSBnYXJtaW5fYXR0YWNoLAorCS5zaHV0ZG93biAgICAgICAgICAgID0gZ2FybWluX3NodXRkb3duLAorCS53cml0ZSAgICAgICAgICAgICAgID0gZ2FybWluX3dyaXRlLAorCS53cml0ZV9yb29tICAgICAgICAgID0gZ2FybWluX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlciAgICAgPSBnYXJtaW5fY2hhcnNfaW5fYnVmZmVyLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0gZ2FybWluX3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJLnJlYWRfYnVsa19jYWxsYmFjayAgPSBnYXJtaW5fcmVhZF9idWxrX2NhbGxiYWNrLAorCS5yZWFkX2ludF9jYWxsYmFjayAgID0gZ2FybWluX3JlYWRfaW50X2NhbGxiYWNrLAorfTsKKworCitzdGF0aWMgaW50IF9faW5pdCBnYXJtaW5faW5pdCAodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmZ2FybWluX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfZ2FybWluX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmZ2FybWluX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOworCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKworCXJldHVybiAwOworZmFpbGVkX3VzYl9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmdhcm1pbl9kZXZpY2UpOworZmFpbGVkX2dhcm1pbl9yZWdpc3RlcjoKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBnYXJtaW5fZXhpdCAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlciAoJmdhcm1pbl9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmdhcm1pbl9kZXZpY2UpOworfQorCisKKworCittb2R1bGVfaW5pdChnYXJtaW5faW5pdCk7Cittb2R1bGVfZXhpdChnYXJtaW5fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lXVVNSIHwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKK21vZHVsZV9wYXJhbShpbml0aWFsX21vZGUsIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGluaXRpYWxfbW9kZSwgIkluaXRpYWwgbW9kZSIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTIxNGFhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwpAQCAtMCwwICsxLDMxNSBAQAorLyoKKyAqIFVTQiBTZXJpYWwgQ29udmVydGVyIEdlbmVyaWMgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAwMiBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqCTIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisKK3N0YXRpYyBpbnQgZGVidWc7CisKKyNpZmRlZiBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDCitzdGF0aWMgX191MTYgdmVuZG9yICA9IDB4MDVmOTsKK3N0YXRpYyBfX3UxNiBwcm9kdWN0ID0gMHhmZmZmOworCittb2R1bGVfcGFyYW0odmVuZG9yLCB1c2hvcnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh2ZW5kb3IsICJVc2VyIHNwZWNpZmllZCBVU0IgaWRWZW5kb3IiKTsKKworbW9kdWxlX3BhcmFtKHByb2R1Y3QsIHVzaG9ydCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHByb2R1Y3QsICJVc2VyIHNwZWNpZmllZCBVU0IgaWRQcm9kdWN0Iik7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBnZW5lcmljX2RldmljZV9pZHNbMl07IC8qIEluaXRpYWxseSBhbGwgemVyb2VzLiAqLworCisvKiBBbGwgb2YgdGhlIGRldmljZSBpbmZvIG5lZWRlZCBmb3IgdGhlIEdlbmVyaWMgU2VyaWFsIENvbnZlcnRlciAqLworc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgdXNiX3NlcmlhbF9nZW5lcmljX2RldmljZSA9IHsKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCSJHZW5lcmljIiwKKwkuc2hvcnRfbmFtZSA9CQkiZ2VuZXJpYyIsCisJLmlkX3RhYmxlID0JCWdlbmVyaWNfZGV2aWNlX2lkcywKKwkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX2luID0JCU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX291dCA9CQlOVU1fRE9OVF9DQVJFLAorCS5udW1fcG9ydHMgPQkJMSwKKwkuc2h1dGRvd24gPQkJdXNiX3NlcmlhbF9nZW5lcmljX3NodXRkb3duLAorfTsKKworLyogd2Ugd2FudCB0byBsb29rIGF0IGFsbCBkZXZpY2VzLCBhcyB0aGUgdmVuZG9yL3Byb2R1Y3QgaWQgY2FuIGNoYW5nZQorICogZGVwZW5kaW5nIG9uIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBnZW5lcmljX3NlcmlhbF9pZHNbXSA9IHsKKwl7LmRyaXZlcl9pbmZvID0gNDJ9LAorCXt9Cit9OworCitzdGF0aWMgaW50IGdlbmVyaWNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkX3BhdHRlcm47CisKKwlpZF9wYXR0ZXJuID0gdXNiX21hdGNoX2lkKGludGVyZmFjZSwgZ2VuZXJpY19kZXZpY2VfaWRzKTsKKwlpZiAoaWRfcGF0dGVybiAhPSBOVUxMKQorCQlyZXR1cm4gdXNiX3NlcmlhbF9wcm9iZShpbnRlcmZhY2UsIGlkKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGdlbmVyaWNfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJ1c2JzZXJpYWxfZ2VuZXJpYyIsCisJLnByb2JlID0JZ2VuZXJpY19wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlnZW5lcmljX3NlcmlhbF9pZHMsCit9OworI2VuZGlmCisKK2ludCB1c2Jfc2VyaWFsX2dlbmVyaWNfcmVnaXN0ZXIgKGludCBfZGVidWcpCit7CisJaW50IHJldHZhbCA9IDA7CisKKwlkZWJ1ZyA9IF9kZWJ1ZzsKKyNpZmRlZiBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDCisJZ2VuZXJpY19kZXZpY2VfaWRzWzBdLmlkVmVuZG9yID0gdmVuZG9yOworCWdlbmVyaWNfZGV2aWNlX2lkc1swXS5pZFByb2R1Y3QgPSBwcm9kdWN0OworCWdlbmVyaWNfZGV2aWNlX2lkc1swXS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfVkVORE9SIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9QUk9EVUNUOworCisJLyogcmVnaXN0ZXIgb3VyIGdlbmVyaWMgZHJpdmVyIHdpdGggb3Vyc2VsdmVzICovCisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlciAoJnVzYl9zZXJpYWxfZ2VuZXJpY19kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXhpdDsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmdlbmVyaWNfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnVzYl9zZXJpYWxfZ2VuZXJpY19kZXZpY2UpOworZXhpdDoKKyNlbmRpZgorCXJldHVybiByZXR2YWw7Cit9CisKK3ZvaWQgdXNiX3NlcmlhbF9nZW5lcmljX2RlcmVnaXN0ZXIgKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQworCS8qIHJlbW92ZSBvdXIgZ2VuZXJpYyBkcml2ZXIgKi8KKwl1c2JfZGVyZWdpc3RlcigmZ2VuZXJpY19kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJnVzYl9zZXJpYWxfZ2VuZXJpY19kZXZpY2UpOworI2VuZGlmCit9CisKK2ludCB1c2Jfc2VyaWFsX2dlbmVyaWNfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpbnQgcmVzdWx0ID0gMDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJLyogZm9yY2UgbG93X2xhdGVuY3kgb24gc28gdGhhdCBvdXIgdHR5X3B1c2ggYWN0dWFsbHkgZm9yY2VzIHRoZSBkYXRhIHRocm91Z2gsIAorCSAgIG90aGVyd2lzZSBpdCBpcyBzY2hlZHVsZWQsIGFuZCB3aXRoIGhpZ2ggZGF0YSByYXRlcyAobGlrZSB3aXRoIE9IQ0kpIGRhdGEKKwkgICBjYW4gZ2V0IGxvc3QuICovCisJaWYgKHBvcnQtPnR0eSkKKwkJcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IDE7CisKKwkvKiBpZiB3ZSBoYXZlIGEgYnVsayBpbnRlcnJ1cHQsIHN0YXJ0IHJlYWRpbmcgZnJvbSBpdCAqLworCWlmIChzZXJpYWwtPm51bV9idWxrX2luKSB7CisJCS8qIFN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCisJCXVzYl9maWxsX2J1bGtfdXJiIChwb3J0LT5yZWFkX3VyYiwgc2VyaWFsLT5kZXYsCisJCQkJICAgdXNiX3JjdmJ1bGtwaXBlKHNlcmlhbC0+ZGV2LCBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQkJICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQkgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQkgICAoKHNlcmlhbC0+dHlwZS0+cmVhZF9idWxrX2NhbGxiYWNrKSA/CisJCQkJICAgICBzZXJpYWwtPnR5cGUtPnJlYWRfYnVsa19jYWxsYmFjayA6CisJCQkJICAgICB1c2Jfc2VyaWFsX2dlbmVyaWNfcmVhZF9idWxrX2NhbGxiYWNrKSwKKwkJCQkgICBwb3J0KTsKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmVzdWx0KQorCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGdlbmVyaWNfY2xlYW51cCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoc2VyaWFsLT5kZXYpIHsKKwkJLyogc2h1dGRvd24gYW55IGJ1bGsgcmVhZHMgdGhhdCBtaWdodCBiZSBnb2luZyBvbiAqLworCQlpZiAoc2VyaWFsLT5udW1fYnVsa19vdXQpCisJCQl1c2Jfa2lsbF91cmIocG9ydC0+d3JpdGVfdXJiKTsKKwkJaWYgKHNlcmlhbC0+bnVtX2J1bGtfaW4pCisJCQl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworCX0KK30KKwordm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlscCkKK3sKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwlnZW5lcmljX2NsZWFudXAgKHBvcnQpOworfQorCitpbnQgdXNiX3NlcmlhbF9nZW5lcmljX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoY291bnQgPT0gMCkgeworCQlkYmcoIiVzIC0gd3JpdGUgcmVxdWVzdCBvZiAwIGJ5dGVzIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwkvKiBvbmx5IGRvIHNvbWV0aGluZyBpZiB3ZSBoYXZlIGEgYnVsayBvdXQgZW5kcG9pbnQgKi8KKwlpZiAoc2VyaWFsLT5udW1fYnVsa19vdXQpIHsKKwkJaWYgKHBvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQkJZGJnKCIlcyAtIGFscmVhZHkgd3JpdGluZyIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gKDApOworCQl9CisKKwkJY291bnQgPSAoY291bnQgPiBwb3J0LT5idWxrX291dF9zaXplKSA/IHBvcnQtPmJ1bGtfb3V0X3NpemUgOiBjb3VudDsKKworCQltZW1jcHkgKHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBidWYsIGNvdW50KTsKKwkJZGF0YSA9IHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyOworCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgY291bnQsIGRhdGEpOworCisJCS8qIHNldCB1cCBvdXIgdXJiICovCisJCXVzYl9maWxsX2J1bGtfdXJiIChwb3J0LT53cml0ZV91cmIsIHNlcmlhbC0+ZGV2LAorCQkJCSAgIHVzYl9zbmRidWxrcGlwZSAoc2VyaWFsLT5kZXYsCisJCQkJCQkgICAgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkgICBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgY291bnQsCisJCQkJICAgKChzZXJpYWwtPnR5cGUtPndyaXRlX2J1bGtfY2FsbGJhY2spID8gCisJCQkJICAgICBzZXJpYWwtPnR5cGUtPndyaXRlX2J1bGtfY2FsbGJhY2sgOgorCQkJCSAgICAgdXNiX3NlcmlhbF9nZW5lcmljX3dyaXRlX2J1bGtfY2FsbGJhY2spLCBwb3J0KTsKKworCQkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgYnVsayBwb3J0ICovCisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXN1bHQpCisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJZWxzZQorCQkJcmVzdWx0ID0gY291bnQ7CisKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKiBubyBidWxrIG91dCwgc28gcmV0dXJuIDAgYnl0ZXMgd3JpdHRlbiAqLworCXJldHVybiAoMCk7Cit9CisKK2ludCB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGVfcm9vbSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWludCByb29tID0gMDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQorCWlmIChzZXJpYWwtPm51bV9idWxrX291dCkgeworCQlpZiAocG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKQorCQkJcm9vbSA9IHBvcnQtPmJ1bGtfb3V0X3NpemU7CisJfQorCisJZGJnKCIlcyAtIHJldHVybnMgJWQiLCBfX0ZVTkNUSU9OX18sIHJvb20pOworCXJldHVybiAocm9vbSk7Cit9CisKK2ludCB1c2Jfc2VyaWFsX2dlbmVyaWNfY2hhcnNfaW5fYnVmZmVyIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJaW50IGNoYXJzID0gMDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHNlcmlhbC0+bnVtX2J1bGtfb3V0KSB7CisJCWlmIChwb3J0LT53cml0ZV91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpCisJCQljaGFycyA9IHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwl9CisKKwlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fRlVOQ1RJT05fXywgY2hhcnMpOworCXJldHVybiAoY2hhcnMpOworfQorCit2b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY19yZWFkX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50IGk7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKworCXR0eSA9IHBvcnQtPnR0eTsKKwlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoIDsgKytpKSB7CisJCQkvKiBpZiB3ZSBpbnNlcnQgbW9yZSB0aGFuIFRUWV9GTElQQlVGX1NJWkUgY2hhcmFjdGVycywgd2UgZHJvcCB0aGVtLiAqLworCQkJaWYodHR5LT5mbGlwLmNvdW50ID49IFRUWV9GTElQQlVGX1NJWkUpIHsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJfQorCQkJLyogdGhpcyBkb2Vzbid0IGFjdHVhbGx5IHB1c2ggdGhlIGRhdGEgdGhyb3VnaCB1bmxlc3MgdHR5LT5sb3dfbGF0ZW5jeSBpcyBzZXQgKi8KKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgMCk7CisJCX0KKwkgIAl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCX0KKworCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCAgKi8KKwl1c2JfZmlsbF9idWxrX3VyYiAocG9ydC0+cmVhZF91cmIsIHNlcmlhbC0+ZGV2LAorCQkJICAgdXNiX3JjdmJ1bGtwaXBlIChzZXJpYWwtPmRldiwKKwkJCQkgICAJICAgIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCSAgICgoc2VyaWFsLT50eXBlLT5yZWFkX2J1bGtfY2FsbGJhY2spID8gCisJCQkgICAgIHNlcmlhbC0+dHlwZS0+cmVhZF9idWxrX2NhbGxiYWNrIDogCisJCQkgICAgIHVzYl9zZXJpYWxfZ2VuZXJpY19yZWFkX2J1bGtfY2FsbGJhY2spLCBwb3J0KTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworfQorCit2b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY193cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJdXNiX3NlcmlhbF9wb3J0X3NvZnRpbnQoKHZvaWQgKilwb3J0KTsKKworCXNjaGVkdWxlX3dvcmsoJnBvcnQtPndvcmspOworfQorCit2b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY19zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgaTsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJLyogc3RvcCByZWFkcyBhbmQgd3JpdGVzIG9uIGFsbCBwb3J0cyAqLworCWZvciAoaT0wOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQlnZW5lcmljX2NsZWFudXAoc2VyaWFsLT5wb3J0W2ldKTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb18xNjY1NC5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvXzE2NjU0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUzYWJjOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb18xNjY1NC5oCkBAIC0wLDAgKzEsMTk1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoJMTY2NTQuSAkJRGVmaW5pdGlvbnMgZm9yIDE2QzY1NCBVQVJUIHVzZWQgb24gRWRnZVBvcnRzCisgKgorICoJQ29weXJpZ2h0IChDKSAxOTk4IEluc2lkZSBPdXQgTmV0d29ya3MsIEluYy4KKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmICFkZWZpbmVkKF8xNjY1NF9IKQorI2RlZmluZQlfMTY2NTRfSAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoJCQlEIGUgZiBpIG4gZSBzICAgLyAgIFQgeSBwIGUgZCBlIGYgcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkvLworCS8vIFVBUlQgcmVnaXN0ZXIgbnVtYmVycworCS8vIE51bWJlcnMgMC03IGFyZSBwYXNzZWQgdG8gdGhlIEVkZ2Vwb3J0IGRpcmVjdGx5LiBOdW1iZXJzIDggYW5kCisJLy8gYWJvdmUgYXJlIHVzZWQgaW50ZXJuYWxseSB0byBpbmRpY2F0ZSB0aGF0IHdlIG11c3QgZW5hYmxlIGFjY2VzcworCS8vIHRvIHRoZW0gdmlhIExDUiBiaXQgMHg4MCBvciBMQ1IgPSAweEJGLgorCS8vIFRoZSByZWdpc3RlciBudW1iZXIgc2VudCB0byB0aGUgRWRnZXBvcnQgaXMgdGhlbiAoeCAmIDB4NykuCisJLy8KKwkvLyBEcml2ZXIgbXVzdCBub3QgYWNjZXNzIHJlZ2lzdGVycyB0aGF0IGFmZmVjdCBvcGVyYXRpb24gb2YgdGhlCisJLy8gdGhlIEVkZ2VQb3J0IGZpcm13YXJlIC0tIHRoYXQgaW5jbHVkZXMgVEhSLCBSSFIsIElFUiwgRkNSLgorCisKKyNkZWZpbmUgVEhSCQkJMAkvLyAhIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKFdyaXRlKQorI2RlZmluZSBSRFIJCQkwCS8vICEgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyIChSZWFkKQorI2RlZmluZSBJRVIJCQkxCS8vICEgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgorI2RlZmluZSBGQ1IJCQkyCS8vICEgRmlmbyBDb250cm9sIFJlZ2lzdGVyIChXcml0ZSkKKyNkZWZpbmUgSVNSCQkJMgkvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIChSZWFkKQorI2RlZmluZSBMQ1IJCQkzCS8vIExpbmUgQ29udHJvbCBSZWdpc3RlcgorI2RlZmluZSBNQ1IJCQk0CS8vIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIKKyNkZWZpbmUgTFNSCQkJNQkvLyBMaW5lIFN0YXR1cyBSZWdpc3RlcgorI2RlZmluZSBNU1IJCQk2CS8vIE1vZGVtIFN0YXR1cyBSZWdpc3RlcgorI2RlZmluZSBTUFIJCQk3CS8vIFNjcmF0Y2hQYWQgUmVnaXN0ZXIKKyNkZWZpbmUgRExMCQkJOAkvLyBCYW5rMlsgMCBdIERpdmlzb3IgTGF0Y2ggTFNCCisjZGVmaW5lIERMTQkJCTkJLy8gQmFuazJbIDEgXSBEaXZpc29yIExhdGNoIE1TQgorI2RlZmluZSBFRlIJCQkxMAkvLyBCYW5rMlsgMiBdIEV4dGVuZGVkIEZ1bmN0aW9uIFJlZ2lzdGVyCisvL2VmaW5lIHVudXNlZAkJCTExCS8vIEJhbmsyWyAzIF0KKyNkZWZpbmUgWE9OMQkJCTEyCS8vIEJhbmsyWyA0IF0gWG9uLTEKKyNkZWZpbmUgWE9OMgkJCTEzCS8vIEJhbmsyWyA1IF0gWG9uLTIKKyNkZWZpbmUgWE9GRjEJCQkxNAkvLyBCYW5rMlsgNiBdIFhvZmYtMQorI2RlZmluZSBYT0ZGMgkJCTE1CS8vIEJhbmsyWyA3IF0gWG9mZi0yCisKKyNkZWZpbmUJTlVNXzE2NjU0X1JFR1MJCTE2CisKKyNkZWZpbmUgSVNfUkVHXzJORF9CQU5LKHgpCSgoeCkgPj0gOCkKKworCS8vCisJLy8gQml0IGRlZmluaXRpb25zIGZvciBlYWNoIHJlZ2lzdGVyCisJLy8KKworI2RlZmluZSBJRVJfUlgJCQkweDAxCS8vIEVuYWJsZSByZWNlaXZlIGludGVycnVwdAorI2RlZmluZSBJRVJfVFgJCQkweDAyCS8vIEVuYWJsZSB0cmFuc21pdCBpbnRlcnJ1cHQKKyNkZWZpbmUgSUVSX1JYUwkJCTB4MDQJLy8gRW5hYmxlIHJlY2VpdmUgc3RhdHVzIGludGVycnVwdAorI2RlZmluZSBJRVJfTURNCQkJMHgwOAkvLyBFbmFibGUgbW9kZW0gc3RhdHVzIGludGVycnVwdAorI2RlZmluZSBJRVJfU0xFRVAJCTB4MTAJLy8gRW5hYmxlIHNsZWVwIG1vZGUKKyNkZWZpbmUgSUVSX1hPRkYJCTB4MjAJLy8gRW5hYmxlIHMvdyBmbG93IGNvbnRyb2wgKFhPRkYpIGludGVycnVwdAorI2RlZmluZSBJRVJfUlRTCQkJMHg0MAkvLyBFbmFibGUgUlRTIGludGVycnVwdAorI2RlZmluZSBJRVJfQ1RTCQkJMHg4MAkvLyBFbmFibGUgQ1RTIGludGVycnVwdAorI2RlZmluZSBJRVJfRU5BQkxFX0FMTAkJMHhGRgkvLyBFbmFibGUgYWxsIGludHMKKworCisjZGVmaW5lIEZDUl9GSUZPX0VOCQkweDAxCS8vIEVuYWJsZSBGSUZPcworI2RlZmluZSBGQ1JfUlhDTFIJCTB4MDIJLy8gUmVzZXQgUnggRklGTworI2RlZmluZSBGQ1JfVFhDTFIJCTB4MDQJLy8gUmVzZXQgVHggRklGTworI2RlZmluZSBGQ1JfRE1BX0JMSwkJMHgwOAkvLyBFbmFibGUgRE1BIGJsb2NrIG1vZGUKKyNkZWZpbmUgRkNSX1RYX0xFVkVMX01BU0sJMHgzMAkvLyBNYXNrIGZvciBUeCBGSUZPIExldmVsCisjZGVmaW5lIEZDUl9UWF9MRVZFTF84CQkweDAwCS8vIFR4IEZJRk8gTGV2ZWwgPSAgOCBieXRlcworI2RlZmluZSBGQ1JfVFhfTEVWRUxfMTYJCTB4MTAJLy8gVHggRklGTyBMZXZlbCA9IDE2IGJ5dGVzCisjZGVmaW5lIEZDUl9UWF9MRVZFTF8zMgkJMHgyMAkvLyBUeCBGSUZPIExldmVsID0gMzIgYnl0ZXMKKyNkZWZpbmUgRkNSX1RYX0xFVkVMXzU2CQkweDMwCS8vIFR4IEZJRk8gTGV2ZWwgPSA1NiBieXRlcworI2RlZmluZSBGQ1JfUlhfTEVWRUxfTUFTSwkweEMwCS8vIE1hc2sgZm9yIFJ4IEZJRk8gTGV2ZWwKKyNkZWZpbmUgRkNSX1JYX0xFVkVMXzgJCTB4MDAJLy8gUnggRklGTyBMZXZlbCA9ICA4IGJ5dGVzCisjZGVmaW5lIEZDUl9SWF9MRVZFTF8xNgkJMHg0MAkvLyBSeCBGSUZPIExldmVsID0gMTYgYnl0ZXMKKyNkZWZpbmUgRkNSX1JYX0xFVkVMXzU2CQkweDgwCS8vIFJ4IEZJRk8gTGV2ZWwgPSA1NiBieXRlcworI2RlZmluZSBGQ1JfUlhfTEVWRUxfNjAJCTB4QzAJLy8gUnggRklGTyBMZXZlbCA9IDYwIGJ5dGVzCisKKworI2RlZmluZSBJU1JfSU5UX01ETV9TVEFUVVMJMHgwMAkvLyBNb2RlbSBzdGF0dXMgaW50IHBlbmRpbmcKKyNkZWZpbmUgSVNSX0lOVF9OT05FCQkweDAxCS8vIE5vIGludGVycnVwdCBwZW5kaW5nCisjZGVmaW5lIElTUl9JTlRfVFhSRFkJCTB4MDIJLy8gVHggcmVhZHkgaW50IHBlbmRpbmcKKyNkZWZpbmUgSVNSX0lOVF9SWFJEWQkJMHgwNAkvLyBSeCByZWFkeSBpbnQgcGVuZGluZworI2RlZmluZSBJU1JfSU5UX0xJTkVfU1RBVFVTCTB4MDYJLy8gTGluZSBzdGF0dXMgaW50IHBlbmRpbmcKKyNkZWZpbmUgSVNSX0lOVF9SWF9USU1FT1VUCTB4MEMJLy8gUnggdGltZW91dCBpbnQgcGVuZGluZworI2RlZmluZSBJU1JfSU5UX1JYX1hPRkYJCTB4MTAJLy8gUnggWG9mZiBpbnQgcGVuZGluZworI2RlZmluZSBJU1JfSU5UX1JUU19DVFMJCTB4MjAJLy8gUlRTL0NUUyBjaGFuZ2UgaW50IHBlbmRpbmcKKyNkZWZpbmUgSVNSX0ZJRk9fRU5BQkxFRAkweEMwCS8vIEJpdHMgc2V0IGlmIEZJRk9zIGVuYWJsZWQKKyNkZWZpbmUgSVNSX0lOVF9CSVRTX01BU0sJMHgzRQkvLyBNYXNrIHRvIGlzb2xhdGUgdmFsaWQgaW50IGNhdXNlcworCisKKyNkZWZpbmUgTENSX0JJVFNfNQkJMHgwMAkvLyA1IGJpdHMvY2hhcgorI2RlZmluZSBMQ1JfQklUU182CQkweDAxCS8vIDYgYml0cy9jaGFyCisjZGVmaW5lIExDUl9CSVRTXzcJCTB4MDIJLy8gNyBiaXRzL2NoYXIKKyNkZWZpbmUgTENSX0JJVFNfOAkJMHgwMwkvLyA4IGJpdHMvY2hhcgorI2RlZmluZSBMQ1JfQklUU19NQVNLCQkweDAzCS8vIE1hc2sgZm9yIGJpdHMvY2hhciBmaWVsZAorCisjZGVmaW5lIExDUl9TVE9QXzEJCTB4MDAJLy8gMSBzdG9wIGJpdAorI2RlZmluZSBMQ1JfU1RPUF8xXzUJCTB4MDQJLy8gMS41IHN0b3AgYml0cyAoaWYgNSAgIGJpdHMvY2hhcikKKyNkZWZpbmUgTENSX1NUT1BfMgkJMHgwNAkvLyAyIHN0b3AgYml0cyAgIChpZiA2LTggYml0cy9jaGFyKQorI2RlZmluZSBMQ1JfU1RPUF9NQVNLCQkweDA0CS8vIE1hc2sgZm9yIHN0b3AgYml0cyBmaWVsZAorCisjZGVmaW5lIExDUl9QQVJfTk9ORQkJMHgwMAkvLyBObyBwYXJpdHkKKyNkZWZpbmUgTENSX1BBUl9PREQJCTB4MDgJLy8gT2RkIHBhcml0eQorI2RlZmluZSBMQ1JfUEFSX0VWRU4JCTB4MTgJLy8gRXZlbiBwYXJpdHkKKyNkZWZpbmUgTENSX1BBUl9NQVJLCQkweDI4CS8vIEZvcmNlIHBhcml0eSBiaXQgdG8gMQorI2RlZmluZSBMQ1JfUEFSX1NQQUNFCQkweDM4CS8vIEZvcmNlIHBhcml0eSBiaXQgdG8gMAorI2RlZmluZSBMQ1JfUEFSX01BU0sJCTB4MzgJLy8gTWFzayBmb3IgcGFyaXR5IGZpZWxkCisKKyNkZWZpbmUgTENSX1NFVF9CUkVBSwkJMHg0MAkvLyBTZXQgQnJlYWsgY29uZGl0aW9uCisjZGVmaW5lIExDUl9ETF9FTkFCTEUJCTB4ODAJLy8gRW5hYmxlIGFjY2VzcyB0byBkaXZpc29yIGxhdGNoCisKKyNkZWZpbmUgTENSX0FDQ0VTU19FRlIJCTB4QkYJLy8gTG9hZCB0aGlzIHZhbHVlIHRvIGFjY2VzcyBETEwsRExNLAorCQkJCQkvLyBhbmQgYWxzbyB0aGUgJzY1NC1vbmx5IHJlZ2lzdGVycworCQkJCQkvLyBFRlIsIFhPTjEsIFhPTjIsIFhPRkYxLCBYT0ZGMgorCisKKyNkZWZpbmUgTUNSX0RUUgkJCTB4MDEJLy8gQXNzZXJ0IERUUgorI2RlZmluZSBNQ1JfUlRTCQkJMHgwMgkvLyBBc3NlcnQgUlRTCisjZGVmaW5lIE1DUl9PVVQxCQkweDA0CS8vIExvb3BiYWNrIG9ubHk6IFNldHMgc3RhdGUgb2YgUkkKKyNkZWZpbmUgTUNSX01BU1RFUl9JRQkJMHgwOAkvLyBFbmFibGUgaW50ZXJydXB0IG91dHB1dHMKKyNkZWZpbmUgTUNSX0xPT1BCQUNLCQkweDEwCS8vIFNldCBpbnRlcm5hbCAoZGlnaXRhbCkgbG9vcGJhY2sgbW9kZQorI2RlZmluZSBNQ1JfWE9OX0FOWQkJMHgyMAkvLyBFbmFibGUgYW55IGNoYXIgdG8gZXhpdCBYT0ZGIG1vZGUKKyNkZWZpbmUgTUNSX0lSX0VOQUJMRQkJMHg0MAkvLyBFbmFibGUgSXJEQSBmdW5jdGlvbnMKKyNkZWZpbmUgTUNSX0JSR19ESVZfNAkJMHg4MAkvLyBEaXZpZGUgYmF1ZCByYXRlIGNsayBieSAvNCBpbnN0ZWFkIG9mIC8xCisKKworI2RlZmluZSBMU1JfUlhfQVZBSUwJCTB4MDEJLy8gUnggZGF0YSBhdmFpbGFibGUKKyNkZWZpbmUgTFNSX09WRVJfRVJSCQkweDAyCS8vIFJ4IG92ZXJydW4KKyNkZWZpbmUgTFNSX1BBUl9FUlIJCTB4MDQJLy8gUnggcGFyaXR5IGVycm9yCisjZGVmaW5lIExTUl9GUk1fRVJSCQkweDA4CS8vIFJ4IGZyYW1pbmcgZXJyb3IKKyNkZWZpbmUgTFNSX0JSRUFLCQkweDEwCS8vIFJ4IGJyZWFrIGNvbmRpdGlvbiBkZXRlY3RlZAorI2RlZmluZSBMU1JfVFhfRU1QVFkJCTB4MjAJLy8gVHggRmlmbyBlbXB0eQorI2RlZmluZSBMU1JfVFhfQUxMX0VNUFRZCTB4NDAJLy8gVHggRmlmbyBhbmQgc2hpZnQgcmVnaXN0ZXIgZW1wdHkKKyNkZWZpbmUgTFNSX0ZJRk9fRVJSCQkweDgwCS8vIFJ4IEZpZm8gY29udGFpbnMgYXQgbGVhc3QgMSBlcnJlZCBjaGFyCisKKworI2RlZmluZSBFREdFUE9SVF9NU1JfREVMVEFfQ1RTCTB4MDEJLy8gQ1RTIGNoYW5nZWQgZnJvbSBsYXN0IHJlYWQKKyNkZWZpbmUgRURHRVBPUlRfTVNSX0RFTFRBX0RTUgkweDAyCS8vIERTUiBjaGFuZ2VkIGZyb20gbGFzdCByZWFkCisjZGVmaW5lIEVER0VQT1JUX01TUl9ERUxUQV9SSQkweDA0CS8vIFJJICBjaGFuZ2VkIGZyb20gMCAtPiAxCisjZGVmaW5lIEVER0VQT1JUX01TUl9ERUxUQV9DRAkweDA4CS8vIENEICBjaGFuZ2VkIGZyb20gbGFzdCByZWFkCisjZGVmaW5lIEVER0VQT1JUX01TUl9DVFMJMHgxMAkvLyBDdXJyZW50IHN0YXRlIG9mIENUUworI2RlZmluZSBFREdFUE9SVF9NU1JfRFNSCTB4MjAJLy8gQ3VycmVudCBzdGF0ZSBvZiBEU1IKKyNkZWZpbmUgRURHRVBPUlRfTVNSX1JJCQkweDQwCS8vIEN1cnJlbnQgc3RhdGUgb2YgUkkKKyNkZWZpbmUgRURHRVBPUlRfTVNSX0NECQkweDgwCS8vIEN1cnJlbnQgc3RhdGUgb2YgQ0QKKworCisKKwkJCQkJLy8JVHgJCVJ4CisJCQkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2RlZmluZSBFRlJfU1dGQ19OT05FCQkweDAwCS8vCU5vbmUJCU5vbmUKKyNkZWZpbmUgRUZSX1NXRkNfUlgxCQkweDAyIAkvLwlOb25lCQlYT0ZGMQorI2RlZmluZSBFRlJfU1dGQ19SWDIJCTB4MDEgCS8vCU5vbmUJCVhPRkYyCisjZGVmaW5lIEVGUl9TV0ZDX1JYMTIJCTB4MDMgCS8vCU5vbmUJCVhPRkYxICYgWE9GRjIKKyNkZWZpbmUgRUZSX1NXRkNfVFgxCQkweDA4IAkvLwlYT0ZGMQkJTm9uZQorI2RlZmluZSBFRlJfU1dGQ19UWDFfUlgxCTB4MGEgCS8vCVhPRkYxCQlYT0ZGMQorI2RlZmluZSBFRlJfU1dGQ19UWDFfUlgyCTB4MDkgCS8vCVhPRkYxCQlYT0ZGMgorI2RlZmluZSBFRlJfU1dGQ19UWDFfUlgxMgkweDBiIAkvLwlYT0ZGMQkJWE9GRjEgJiBYT0ZGMgorI2RlZmluZSBFRlJfU1dGQ19UWDIJCTB4MDQgCS8vCVhPRkYyCQlOb25lCisjZGVmaW5lIEVGUl9TV0ZDX1RYMl9SWDEJMHgwNiAJLy8JWE9GRjIJCVhPRkYxCisjZGVmaW5lIEVGUl9TV0ZDX1RYMl9SWDIJMHgwNSAJLy8JWE9GRjIJCVhPRkYyCisjZGVmaW5lIEVGUl9TV0ZDX1RYMl9SWDEyCTB4MDcgCS8vCVhPRkYyCQlYT0ZGMSAmIFhPRkYyCisjZGVmaW5lIEVGUl9TV0ZDX1RYMTIJCTB4MGMgCS8vCVhPRkYxICYgWE9GRjIJTm9uZQorI2RlZmluZSBFRlJfU1dGQ19UWDEyX1JYMQkweDBlIAkvLwlYT0ZGMSAmIFhPRkYyCVhPRkYxCisjZGVmaW5lIEVGUl9TV0ZDX1RYMTJfUlgyCTB4MGQgCS8vCVhPRkYxICYgWE9GRjIJWE9GRjIKKyNkZWZpbmUgRUZSX1NXRkNfVFgxMl9SWDEyCTB4MGYgCS8vCVhPRkYxICYgWE9GRjIJWE9GRjEgJiBYT0ZGMgorCisjZGVmaW5lIEVGUl9UWF9GQ19NQVNLCQkweDBjCS8vIE1hc2sgdG8gaXNvbGF0ZSBSeCBmbG93IGNvbnRyb2wKKyNkZWZpbmUgRUZSX1RYX0ZDX05PTkUJCTB4MDAJLy8gTm8gVHggWG9uL1hvZmYgZmxvdyBjb250cm9sCisjZGVmaW5lIEVGUl9UWF9GQ19YMQkJMHgwOAkvLyBUcmFuc21pdCBYb24xL1hvZmYxCisjZGVmaW5lIEVGUl9UWF9GQ19YMgkJMHgwNAkvLyBUcmFuc21pdCBYb24yL1hvZmYyCisjZGVmaW5lIEVGUl9UWF9GQ19YMV8yCQkweDBjCS8vIFRyYW5zbWl0IFhvbjEmMi9Yb2ZmMSYyCisKKyNkZWZpbmUgRUZSX1JYX0ZDX01BU0sJCTB4MDMJLy8gTWFzayB0byBpc29sYXRlIFJ4IGZsb3cgY29udHJvbAorI2RlZmluZSBFRlJfUlhfRkNfTk9ORQkJMHgwMAkvLyBObyBSeCBYb24vWG9mZiBmbG93IGNvbnRyb2wKKyNkZWZpbmUgRUZSX1JYX0ZDX1gxCQkweDAyCS8vIFJlY2VpdmVyIGNvbXBhcmVzIFhvbjEvWG9mZjEKKyNkZWZpbmUgRUZSX1JYX0ZDX1gyCQkweDAxCS8vIFJlY2VpdmVyIGNvbXBhcmVzIFhvbjIvWG9mZjIKKyNkZWZpbmUgRUZSX1JYX0ZDX1gxXzIJCTB4MDMJLy8gUmVjZWl2ZXIgY29tcGFyZXMgWG9uMSYyL1hvZmYxJjIKKworCisjZGVmaW5lIEVGUl9TV0ZDX01BU0sJCTB4MEYJLy8gTWFzayBmb3Igc29mdHdhcmUgZmxvdyBjb250cm9sIGZpZWxkCisjZGVmaW5lIEVGUl9FTkFCTEVfMTY2NTQJMHgxMAkvLyBFbmFibGUgMTZDNjU0IGZlYXR1cmVzCisjZGVmaW5lIEVGUl9TUEVDX0RFVEVDVAkJMHgyMAkvLyBFbmFibGUgc3BlY2lhbCBjaGFyYWN0ZXIgZGV0ZWN0IGludGVycnVwdAorI2RlZmluZSBFRlJfQVVUT19SVFMJCTB4NDAJLy8gVXNlIFJUUyBmb3IgUnggZmxvdyBjb250cm9sCisjZGVmaW5lIEVGUl9BVVRPX0NUUwkJMHg4MAkvLyBVc2UgQ1RTIGZvciBUeCBmbG93IGNvbnRyb2wKKworI2VuZGlmCS8vIGlmICFkZWZpbmVkKF8xNjY1NF9IKQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNWI1YWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYwpAQCAtMCwwICsxLDMxMTMgQEAKKy8qCisgKiBFZGdlcG9ydCBVU0IgU2VyaWFsIENvbnZlcnRlciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgSW5zaWRlIE91dCBOZXR3b3JrcywgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBTdXBwb3J0cyB0aGUgZm9sbG93aW5nIGRldmljZXM6CisgKglFZGdlcG9ydC80CisgKglFZGdlcG9ydC80dAorICoJRWRnZXBvcnQvMgorICoJRWRnZXBvcnQvNGkKKyAqCUVkZ2Vwb3J0LzJpCisgKglFZGdlcG9ydC80MjEKKyAqCUVkZ2Vwb3J0LzIxCisgKglSYXBpZHBvcnQvNAorICoJRWRnZXBvcnQvOAorICoJRWRnZXBvcnQvMkQ4CisgKglFZGdlcG9ydC80RDgKKyAqCUVkZ2Vwb3J0LzhpCisgKgorICogRm9yIHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBjb250YWN0IEluc2lkZSBPdXQKKyAqIE5ldHdvcmtzIHRlY2huaWNhbCBzdXBwb3J0LCBvciBQZXRlciBCZXJnZXIgPHBiZXJnZXJAYnJpbXNvbi5jb20+LAorICogb3IgQWwgQm9yY2hlcnMgPGFsYm9yY2hlcnNAc3RlaW5lcnBvaW50LmNvbT4uCisgKgorICogVmVyc2lvbiBoaXN0b3J5OgorICogCisgKiAyMDAzXzA0XzAzIGFsIGJvcmNoZXJzCisgKiAgLSBmaXhlZCBhIGJ1ZyAodGhhdCBzaG93cyB1cCB3aXRoIGRvc2VtdSkgd2hlcmUgdGhlIHR0eSBzdHJ1Y3QgaXMKKyAqICAgIHVzZWQgaW4gYSBjYWxsYmFjayBhZnRlciBpdCBoYXMgYmVlbiBmcmVlZAorICoKKyAqIDIuMyAyMDAyXzAzXzA4IGdyZWcga3JvYWgtaGFydG1hbgorICoJLSBmaXhlZCBidWcgd2hlbiBtdWx0aXBsZSBkZXZpY2VzIHdlcmUgYXR0YWNoZWQgYXQgdGhlIHNhbWUgdGltZS4KKyAqCisgKiAyLjIgMjAwMV8xMV8xNCBncmVnIGtyb2FoLWhhcnRtYW4KKyAqCS0gZml4ZWQgYnVnIGluIGVkZ2VfY2xvc2UgdGhhdCBrZXB0IHRoZSBwb3J0IGZyb20gYmVpbmcgdXNlZCBtb3JlCisgKgkgIHRoYW4gb25jZS4KKyAqCS0gZml4ZWQgbWVtb3J5IGxlYWsgb24gZGV2aWNlIHJlbW92YWwuCisgKgktIGZpeGVkIHBvdGVudGlhbCBkb3VibGUgZnJlZSBvZiBtZW1vcnkgd2hlbiBjb21tYW5kIHVyYiBzdWJtaXR0aW5nCisgKgkgIGZhaWxlZC4KKyAqCS0gb3RoZXIgc21hbGwgY2xlYW51cHMgd2hlbiB0aGUgZGV2aWNlIGlzIHJlbW92ZWQKKyAqCQorICogMi4xIDIwMDFfMDdfMDkgZ3JlZyBrcm9haC1oYXJ0bWFuCisgKgktIGFkZGVkIHN1cHBvcnQgZm9yIFRJT0NNQklTIGFuZCBUSU9DTUJJQy4KKyAqCisgKiAgICAgKDA0LzA4LzIwMDEpIGdiCisgKgktIElkZW50aWZ5IHZlcnNpb24gb24gbW9kdWxlIGxvYWQuCisgKgorICogMi4wIDIwMDFfMDNfMDUgZ3JlZyBrcm9haC1oYXJ0bWFuCisgKgktIHJld29ya2VkIGVudGlyZSBkcml2ZXIgdG8gZml0IHByb3Blcmx5IGluIHdpdGggdGhlIG90aGVyIHVzYi1zZXJpYWwKKyAqCSAgZHJpdmVycy4gIE9jY2FzaW9uYWwgb29wc2VzIHN0aWxsIGhhcHBlbiwgYnV0IGl0J3MgYSBnb29kIHN0YXJ0LgorICoKKyAqIDEuMi4zICgwMi8yMy8yMDAxKSBncmVnIGtyb2FoLWhhcnRtYW4KKyAqCS0gY2hhbmdlZCBkZXZpY2UgdGFibGUgdG8gd29yayBwcm9wZXJseSBmb3IgMi40LnggZmluYWwgZm9ybWF0LgorICoJLSBmaXhlZCBwcm9ibGVtIHdpdGggZHJvcHBpbmcgZGF0YSBhdCBoaWdoIGRhdGEgcmF0ZXMuCisgKgorICogMS4yLjIgKDExLzI3LzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgorICoJLSBjbGVhbmVkIHVwIG1vcmUgTlRpc21zLgorICoJLSBBZGRlZCBkZXZpY2UgdGFibGUgZm9yIDIuNC4wLXRlc3QxMQorICoKKyAqIDEuMi4xICgxMS8wOC8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKyAqCS0gU3RhcnRlZCB0byBjbGVhbiB1cCBOVGlzbXMuCisgKgktIEZpeGVkIHByb2JsZW0gd2l0aCBkZXYgZmllbGQgb2YgdXJiIGZvciBrZXJuZWxzID49IDIuNC4wLXRlc3Q5CisgKgorICogMS4yICgxMC8xNy8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKKyAqIAlSZW1vdmUgYWxsIEVQSUMgY29kZSBhbmQgR1BMIHNvdXJjZQorICogIEZpeCBSRUxFVkFOVF9JRkxBRyBtYWNybyB0byBpbmNsdWRlIGZsb3cgY29udHJvbCAKKyAqICBjaGFuZ2VzIHBvcnQgY29uZmlndXJhdGlvbiBjaGFuZ2VzLgorICogIEZpeCByZWRlZmluaXRpb24gb2YgU0VSSUFMX01BR0lDCisgKiAgQ2hhbmdlIGFsbCB0aW1lb3V0IHZhbHVlcyB0byA1IHNlY29uZHMKKyAqICBUcmllZCB0byBmaXggdGhlIFVIQ0kgbXVsdGlwbGUgdXJiIHN1Ym1pc3Npb24sIGJ1dCBmYWlsZWQgbWlzZXJhYmx5LgorICogIGl0IHNlZW1zIHRvIHdvcmsgZmluZSB3aXRoIE9IQ0kuCisgKiAgKCBHcmVnIHRha2UgYSBsb29rIGF0IHRoZSAjaWYgMCBhdCBlbmQgb2YgV3JpdGVDbWRVc2IoKSB3ZSBtdXN0IAorICogICAgZmluZCBhIHdheSB0byB3b3JrIGFyb3VudCB0aGlzIFVIQ0kgYnVnICkKKyAqCisgKiAxLjEgKDEwLzExLzIwMDApIERhdmlkIElhY292ZWxsaQorICogIEZpeCBYT04vWE9GRiBmbG93IGNvbnRyb2wgdG8gc3VwcG9ydCBib3RoIElYT04gYW5kIElYT0ZGCisgKgorICogMC45LjI3ICgwNi8zMC8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKKyAqICBBZGRlZCB0cmFuc21pdCBxdWV1ZSBhbmQgbm93IGFsbG9jYXRlIHVyYiBmb3IgY29tbWFuZCB3cml0ZXMuCisgKgorICogMC45LjI2ICgwNi8yOS8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKKyAqICBBZGQgc3VwcG9ydCBmb3IgODAyNTEgYmFzZWQgZWRnZXBvcnQKKyAqCisgKiAwLjkuMjUgKDA2LzI3LzIwMDApIERhdmlkIElhY292ZWxsaQorICogIERvIG5vdCBjbG9zZSB0aGUgcG9ydCBpZiBpdCBoYXMgbXVsdGlwbGUgb3BlbnMuCisgKgorICogMC45LjI0ICgwNS8yNi8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKKyAqICBBZGQgSU9DVExzIHRvIHN1cHBvcnQgUlhUWCBhbmQgSkFWQSBQT1MgCisgKiAgYW5kIGZpcnN0IGN1dCBhdCBydW5uaW5nIEJsYWNrQm94IERlbW8KKyAqCisgKiAwLjkuMjMgKDA1LzI0LzIwMDApIERhdmlkIElhY292ZWxsaQorICogIEFkZCBJT0NUTHMgdG8gc3VwcG9ydCBSWFRYIGFuZCBKQVZBIFBPUworICoKKyAqIDAuOS4yMiAoMDUvMjMvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCisgKiAgZml4ZWQgYnVnIGluIGVudW1lcmF0aW9uLiAgSWYgZXBjb25maWcgdHVybnMgb24gbWFwcGluZyBieQorICogIHBhdGggYWZ0ZXIgYSBkZXZpY2UgaXMgYWxyZWFkeSBwbHVnZ2VkIGluLCB3ZSBub3cgdXBkYXRlCisgKiAgdGhlIG1hcHBpbmcgY29ycmVjdGx5CisgKgorICogMC45LjIxICgwNS8xNi8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKKyAqICBBZGRlZCBCbG9ja1VudGlsQ2hhc2VSZXNwKCkgdG8gYWxzbyB3YWl0IGZvciB0eGNyZWRpdHMKKyAqICBVcGRhdGVkIHRoZSB3YXkgd2UgYWxsb2NhdGUgYW5kIGhhbmRsZSB3cml0ZSBVUkJzIAorICoJQWRkIGRlYnVnIGNvZGUgdG8gZHVtcCBidWZmZXJzCisgKgorICogMC45LjIwICgwNS8wMS8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKKyAqCWNoYW5nZSBkcml2ZXIgdG8gdXNlIHVzYi90dHMvCisgKgorICogMC45LjE5ICgwNS8wMS8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKKyAqICBVcGRhdGUgY29kZSB0byBjb21waWxlIGlmIERFQlVHIGlzIG9mZgorICoKKyAqIDAuOS4xOCAoMDQvMjgvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCisgKiAgY2xlYW51cCBhbmQgdGVzdCB0dHlfcmVnaXN0ZXIgd2l0aCBkZXZmcworICoKKyAqIDAuOS4xNyAoMDQvMjcvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisgKiAJY2hhbmdlZCB0dHlfcmVnaXN0ZXIgYXJvdW5kIHRvIGJlIGxpa2UgdGhlIHdheSBpdAorICogCXdhcyBiZWZvcmUsIGJ1dCBub3cgaXQgd29ya3MgcHJvcGVybHkgd2l0aCBkZXZmcy4KKyAqCisgKiAwLjkuMTYgKDA0LzI2LzIwMDApIGRhdmlkIGlhY292ZWxsaQorICogIEZpeGVkIGJ1ZyBpbiBHZXRQcm9kdWN0SW5mbygpCisgKgorICogMC45LjE1ICgwNC8yNS8yMDAwKSBkYXZpZCBpYWNvdmVsbGkKKyAqCVVwZGF0ZWQgZW51bWVyYXRpb24KKyAqCisgKiAwLjkuMTQgKDA0LzI0LzIwMDApIGRhdmlkIGlhY292ZWxsaQorICogIFJlbW92ZWQgYWxsIGNvbmZpZy9zdGF0dXMgSU9DVExTIGFuZCAKKyAqICBjb252ZXJ0ZWQgdG8gdXNpbmcgL3Byb2MvZWRnZXBvcnQKKyAqICBzdGlsbCBwbGF5aW5nIHdpdGggZGV2ZnMKKyAqCisgKiAwLjkuMTMgKDA0LzI0LzIwMDApIGRhdmlkIGlhY292ZWxsaQorICogIFJlbW92ZWQgY29uZmlndXJhdGlvbiBiYXNlZCBvbiB0dHlVU0IwCisgKiAgQWRkZWQgc3VwcG9ydCBmb3IgY29uZmlndXJhdGlvbiB1c2luZyAvcHJvZC9lZGdlcG9ydAorICogIGZpcnN0IGF0dGVtcHQgYXQgdXNpbmcgZGV2ZnMgKG5vdCB3b3JraW5nIHlldCEpCisgKiAgQWRkZWQgSU9DVEwgdG8gR2V0UHJvZHVjdEluZm8oKQorICogIEFkZGVkIHN1cHBvcnQgZm9yIGN1c3RvbSBiYXVkIHJhdGVzCisgKglBZGQgc3VwcG9ydCBmb3IgcmFuZG9tIHBvcnQgbnVtYmVycworICoKKyAqIDAuOS4xMiAoMDQvMTgvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCisgKglhZGRlZCBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gSU9DVExzCisgKiAgdXNlIHR0eVVTQjAgZm9yIGNvbmZpZ3VyYXRpb24KKyAqCisgKiAwLjkuMTEgKDA0LzE3LzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgorICoJZml4ZWQgbW9kdWxlIGluaXRpYWxpemF0aW9uIHJhY2UgY29uZGl0aW9ucy4KKyAqCW1hZGUgYWxsIHVyYnMgZHluYW1pY2FsbHkgYWxsb2NhdGVkLgorICoJbWFkZSBkcml2ZXIgZGV2ZnMgY29tcGF0aWJsZS4gbm93IGl0IG9ubHkgcmVnaXN0ZXJzIHRoZSB0dHkgZGV2aWNlCisgKgl3aGVuIHRoZSBkZXZpY2UgaXMgYWN0dWFsbHkgcGx1Z2dlZCBpbi4KKyAqCisgKiAwLjkuMTAgKDA0LzEzLzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgorICoJYWRkZWQgcHJvYyBpbnRlcmZhY2UgZnJhbWV3b3JrLgorICoKKyAqIDAuOS45ICgwNC8xMy8yMDAwKSBkYXZpZCBpYWNvdmVsbGkKKyAqCWFkZGVkIGVudW1lcmF0aW9uIGNvZGUgYW5kIGlvY3RscyB0byBjb25maWd1cmUgdGhlIGRldmljZQorICoKKyAqIDAuOS44ICgwNC8xMi8yMDAwKSBkYXZpZCBpYWNvdmVsbGkKKyAqICBDaGFuZ2UgaW50ZXJydXB0IHJlYWQgc3RhcnQgd2hlbiBkZXZpY2UgaXMgcGx1Z2dlZCBpbgorICogIGFuZCBzdG9wIHdoZW4gZGV2aWNlIGlzIHJlbW92ZWQKKyAqCXByb2Nlc3MgaW50ZXJydXB0IHJlYWRzIHdoZW4gYWxsIHBvcnRzIGFyZSBjbG9zZWQgCisgKiAgKGtlZXAgdmFsdWUgb2YgcnhCeXRlc0F2YWlsIGNvbnNpc3RlbnQgd2l0aCB0aGUgZWRnZXBvcnQpCisgKiAgc2V0IHRoZSBVU0JfQlVMS19RVUVVRSBmbGFnIHNvIHRoYXQgd2UgY2FuIHNob3ZlIGEgYnVuY2ggCisgKiAgb2YgdXJicyBhdCBvbmNlIGRvd24gdGhlIHBpcGUgCisgKgorICogMC45LjcgKDA0LzEwLzIwMDApIGRhdmlkIGlhY292ZWxsaQorICogCXN0YXJ0IHRvIGFkZCBlbnVtZXJhdGlvbiBjb2RlLgorICogIGdlbmVyYXRlIHNlcmlhbCBudW1iZXIgZm9yIGVwaWMgZGV2aWNlcworICogIGFkZCBzdXBwb3J0IGZvciBrZGIKKyAqCisgKiAwLjkuNiAoMDMvMzAvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCisgKiAgYWRkIElPQ1RMIHRvIGdldCBzdHJpbmcsIG1hbnVmYWN0dXJlLCBhbmQgYm9vdCBkZXNjcmlwdG9ycworICoKKyAqIDAuOS41ICgwMy8xNC8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKyAqCW1vcmUgZXJyb3IgY2hlY2tpbmcgYWRkZWQgdG8gU2VyaWFsT3BlbiB0byB0cnkgdG8gZml4IFVIQ0kgb3BlbiBwcm9ibGVtCisgKgorICogMC45LjQgKDAzLzA5LzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgorICoJYWRkZWQgbW9yZSBlcnJvciBjaGVja2luZyB0byBoYW5kbGUgb29wcyB3aGVuIGRhdGEgaXMgaGFuZ2luZworICoJYXJvdW5kIGFuZCB0dHkgaXMgYWJydXB0bHkgY2xvc2VkLgorICoKKyAqIDAuOS4zICgwMy8wOS8yMDAwKSBkYXZpZCBpYWNvdmVsbGkKKyAqCUFkZCBlcGljIHN1cHBvcnQgZm9yIHhvbi94b2ZmIGNoYXJzCisgKglwbGF5IHdpdGggcGVyZm9ybWFuY2UKKyAqCisgKiAwLjkuMiAoMDMvMDgvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisgKgljaGFuZ2VkIG1vc3QgImluZm8iIGNhbGxzIHRvICJkYmciCisgKglpbXBsZW1lbnRlZCBmbG93IGNvbnRyb2wgcHJvcGVybHkgaW4gdGhlIHRlcm1pb3MgY2FsbAorICoKKyAqIDAuOS4xICgwMy8wOC8yMDAwKSBkYXZpZCBpYWNvdmVsbGkKKyAqCWFkZGVkIEVQSUMgc3VwcG9ydAorICoJZW5hYmxlZCBib290bG9hZGVyIHVwZGF0ZQorICoKKyAqIDAuOSAoMDMvMDgvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisgKglSZWxlYXNlIHRvIElPIG5ldHdvcmtzLgorICoJSW50ZWdyYXRlZCBjaGFuZ2VzIHRoYXQgRGF2aWQgbWFkZQorICogIG1hZGUgZ2V0dGluZyB1cmJzIGZvciB3cml0aW5nIFNNUCBzYWZlCisgKgorICogMC44ICgwMy8wNy8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKyAqCVJlbGVhc2UgdG8gSU8gbmV0d29ya3MuCisgKglGaXhlZCBwcm9ibGVtcyB0aGF0IHdlcmUgc2VlbiBpbiBjb2RlIGJ5IERhdmlkLgorICogIE5vdyBib3RoIEVkZ2Vwb3J0LzQgYW5kIEVkZ2Vwb3J0LzIgd29ya3MgcHJvcGVybHkuCisgKiAgQ2hhbmdlZCBtb3N0IG9mIHRoZSBmdW5jdGlvbnMgdG8gdXNlIHBvcnQgaW5zdGVhZCBvZiBzZXJpYWwuCisgKgorICogMC43ICgwMi8yNy8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKyAqCU1pbGVzdG9uZSAzIHJlbGVhc2UuCisgKglSZWxlYXNlIHRvIElPIE5ldHdvcmtzCisgKglpb2N0bCBmb3Igd2FpdGluZyBvbiBsaW5lIGNoYW5nZSBpbXBsZW1lbnRlZC4KKyAqCWlvY3RsIGZvciBnZXR0aW5nIHN0YXRpc3RpY3MgaW1wbGVtZW50ZWQuCisgKgltdWx0aXBvcnQgc3VwcG9ydCB3b3JraW5nLgorICoJbHNyIGFuZCBtc3IgcmVnaXN0ZXJzIGFyZSBub3cgaGFuZGxlZCBwcm9wZXJseS4KKyAqCWNoYW5nZSBicmVhayBub3cgaG9va2VkIHVwIGFuZCB3b3JraW5nLgorICoJc3VwcG9ydCBmb3IgYWxsIGtub3duIEVkZ2Vwb3J0IGRldmljZXMuCisgKgorICogMC42ICgwMi8yMi8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKyAqCVJlbGVhc2UgdG8gSU8gbmV0d29ya3MuCisgKglDSEFTRSBpcyBpbXBsZW1lbnRlZCBjb3JyZWN0bHkgd2hlbiBwb3J0IGlzIGNsb3NlZC4KKyAqCVNlcmlhbE9wZW4gbm93IGJsb2NrcyBjb3JyZWN0bHkgdW50aWwgcG9ydCBpcyBmdWxseSBvcGVuZWQuCisgKgorICogMC41ICgwMi8yMC8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKyAqCVJlbGVhc2UgdG8gSU8gbmV0d29ya3MuCisgKglLbm93biBwcm9ibGVtczoKKyAqCQltb2RlbSBzdGF0dXMgcmVnaXN0ZXIgY2hhbmdlcyBhcmUgbm90IHNlbnQgb24gdG8gdGhlIHVzZXIKKyAqCQlDSEFTRSBpcyBub3QgaW1wbGVtZW50ZWQgd2hlbiB0aGUgcG9ydCBpcyBjbG9zZWQuCisgKgorICogMC40ICgwMi8xNi8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKyAqCVNlY29uZCBjdXQgYXQgdGhlIENlQml0IGRlbW8uCisgKglEb2Vzbid0IGxlYWsgbWVtb3J5IG9uIGV2ZXJ5IHdyaXRlIHRvIHRoZSBwb3J0CisgKglTdGlsbCBzbWFsbCBsZWFrcyBvbiBzdGFydHVwLgorICoJQWRkZWQgc3VwcG9ydCBmb3IgRWRnZXBvcnQvMiBhbmQgRWRnZXBvcnQvOAorICoKKyAqIDAuMyAoMDIvMTUvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisgKglDZUJpdCBkZW1vIHJlbGVhc2UuCisgKglGb3JjZSB0aGUgbGluZSBzZXR0aW5ncyB0byA0ODAwLCA4LCAxLCBlIGZvciB0aGUgZGVtby4KKyAqCVdhcm5pbmchIFRoaXMgdmVyc2lvbiBsZWFrcyBtZW1vcnkgbGlrZSBjcmF6eSEKKyAqCisgKiAwLjIgKDAxLzMwLzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgorICoJTWlsZXN0b25lIDEgcmVsZWFzZS4KKyAqCURldmljZSBpcyBmb3VuZCBieSBVU0Igc3Vic3lzdGVtLCBlbnVtZXJhdGVkLCBmaW13YXJlIGlzIGRvd25sb2FkZWQKKyAqCWFuZCB0aGUgZGVzY3JpcHRvcnMgYXJlIHByaW50ZWQgdG8gdGhlIGRlYnVnIGxvZywgY29uZmlnIGlzIHNldCwgYW5kCisgKglncmVlbiBsaWdodCBzdGFydHMgdG8gYmxpbmsuIE9wZW4gcG9ydCB3b3JrcywgYW5kIGRhdGEgY2FuIGJlIHNlbnQKKyAqCWFuZCByZWNlaXZlZCBhdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBvZiB0aGUgVUFSVC4gTG9vcGJhY2sgY29ubmVjdG9yCisgKglhbmQgZGVidWcgbG9nIGNvbmZpcm1zIHRoaXMuCisgKiAKKyAqIDAuMSAoMDEvMjMvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisgKglJbml0aWFsIHJlbGVhc2UgdG8gaGVscCBJTyBOZXR3b3JrcyB0cnkgdG8gc2V0IHVwIHRoZWlyIHRlc3Qgc3lzdGVtLiAKKyAqCUVkZ2Vwb3J0NCBpcyByZWNvZ25pemVkLCBmaXJtd2FyZSBpcyBkb3dubG9hZGVkLCBjb25maWcgaXMgc2V0IHNvIAorICoJZGV2aWNlIGJsaW5rcyBncmVlbiBsaWdodCBldmVyeSAzIHNlYy4gUG9ydCBpcyBib3VuZCwgYnV0IG9wZW5pbmcsCisgKgljbG9zaW5nLCBhbmQgc2VuZGluZyBkYXRhIGRvIG5vdCB3b3JrIHByb3Blcmx5LgorICogCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKyNpbmNsdWRlICJpb19lZGdlcG9ydC5oIgorI2luY2x1ZGUgImlvX2lvbnNwLmgiCQkvKiBpbmZvIGZvciB0aGUgaW9zcCBtZXNzYWdlcyAqLworI2luY2x1ZGUgImlvXzE2NjU0LmgiCQkvKiAxNjY1NCBVQVJUIGRlZmluZXMgKi8KKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjIuNyIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4gYW5kIERhdmlkIElhY292ZWxsaSIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkVkZ2Vwb3J0IFVTQiBTZXJpYWwgRHJpdmVyIgorCisvKiBGaXJzdCwgdGhlIGxhdGVzdCBib290IGNvZGUgLSBmb3IgZmlyc3QgZ2VuZXJhdGlvbiBlZGdlcG9ydHMgKi8KKyNkZWZpbmUgSU1BR0VfQVJSQVlfTkFNRQlCb290Q29kZUltYWdlX0dFTjEKKyNkZWZpbmUgSU1BR0VfVkVSU0lPTl9OQU1FCUJvb3RDb2RlSW1hZ2VWZXJzaW9uX0dFTjEKKyNpbmNsdWRlICJpb19md19ib290LmgiCQkvKiB0aGUgYm9vdGxvYWRlciBmaXJtd2FyZSB0byBkb3dubG9hZCB0byBhIGRldmljZSwgaWYgaXQgbmVlZHMgaXQgKi8KKworLyogZm9yIHNlY29uZCBnZW5lcmF0aW9uIGVkZ2Vwb3J0cyAqLworI2RlZmluZSBJTUFHRV9BUlJBWV9OQU1FCUJvb3RDb2RlSW1hZ2VfR0VOMgorI2RlZmluZSBJTUFHRV9WRVJTSU9OX05BTUUJQm9vdENvZGVJbWFnZVZlcnNpb25fR0VOMgorI2luY2x1ZGUgImlvX2Z3X2Jvb3QyLmgiCS8qIHRoZSBib290bG9hZGVyIGZpcm13YXJlIHRvIGRvd25sb2FkIHRvIGEgZGV2aWNlLCBpZiBpdCBuZWVkcyBpdCAqLworCisvKiBUaGVuIGZpbmFsbHkgdGhlIG1haW4gcnVuLXRpbWUgb3BlcmF0aW9uYWwgY29kZSAtIGZvciBmaXJzdCBnZW5lcmF0aW9uIGVkZ2Vwb3J0cyAqLworI2RlZmluZSBJTUFHRV9BUlJBWV9OQU1FCU9wZXJhdGlvbmFsQ29kZUltYWdlX0dFTjEKKyNkZWZpbmUgSU1BR0VfVkVSU0lPTl9OQU1FCU9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbl9HRU4xCisjaW5jbHVkZSAiaW9fZndfZG93bi5oIgkJLyogRGVmaW5lIGFycmF5IE9wZXJhdGlvbmFsQ29kZUltYWdlW10gKi8KKworLyogZm9yIHNlY29uZCBnZW5lcmF0aW9uIGVkZ2Vwb3J0cyAqLworI2RlZmluZSBJTUFHRV9BUlJBWV9OQU1FCU9wZXJhdGlvbmFsQ29kZUltYWdlX0dFTjIKKyNkZWZpbmUgSU1BR0VfVkVSU0lPTl9OQU1FCU9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbl9HRU4yCisjaW5jbHVkZSAiaW9fZndfZG93bjIuaCIJLyogRGVmaW5lIGFycmF5IE9wZXJhdGlvbmFsQ29kZUltYWdlW10gKi8KKworI2RlZmluZSBNQVhfTkFNRV9MRU4JCTY0CisKKyNkZWZpbmUgQ0hBU0VfVElNRU9VVAkJKDUqSFopCQkvKiA1IHNlY29uZHMgKi8KKyNkZWZpbmUgT1BFTl9USU1FT1VUCQkoNSpIWikJCS8qIDUgc2Vjb25kcyAqLworI2RlZmluZSBDT01NQU5EX1RJTUVPVVQJCSg1KkhaKQkJLyogNSBzZWNvbmRzICovCisKKy8qIHJlY2VpdmUgcG9ydCBzdGF0ZSAqLworZW51bSBSWFNUQVRFIHsKKwlFWFBFQ1RfSERSMSA9IDAsCS8qIEV4cGVjdCBoZWFkZXIgYnl0ZSAxICovCisJRVhQRUNUX0hEUjIgPSAxLAkvKiBFeHBlY3QgaGVhZGVyIGJ5dGUgMiAqLworCUVYUEVDVF9EQVRBID0gMiwJLyogRXhwZWN0ICdSeEJ5dGVzUmVtYWluaW5nJyBkYXRhICovCisJRVhQRUNUX0hEUjMgPSAzLAkvKiBFeHBlY3QgaGVhZGVyIGJ5dGUgMyAoZm9yIHN0YXR1cyBoZHJzIG9ubHkpICovCit9OworCisKKy8qIFRyYW5zbWl0IEZpZm8gCisgKiBUaGlzIFRyYW5zbWl0IHF1ZXVlIGlzIGFuIGV4dGVuc2lvbiBvZiB0aGUgZWRnZXBvcnQgUnggYnVmZmVyLiAKKyAqIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBkYXRhIGJ1ZmZlcmVkIGluIGJvdGggdGhlIGVkZ2Vwb3J0IAorICogUnggYnVmZmVyIChtYXhUeENyZWRpdHMpIGFuZCB0aGlzIGJ1ZmZlciB3aWxsIG5ldmVyIGV4Y2VlZCBtYXhUeENyZWRpdHMuCisgKi8KK3N0cnVjdCBUeEZpZm8geworCXVuc2lnbmVkIGludAloZWFkOwkvKiBpbmRleCB0byBoZWFkIHBvaW50ZXIgKHdyaXRlKSAqLworCXVuc2lnbmVkIGludAl0YWlsOwkvKiBpbmRleCB0byB0YWlsIHBvaW50ZXIgKHJlYWQpICAqLworCXVuc2lnbmVkIGludAljb3VudDsJLyogQnl0ZXMgaW4gcXVldWUgKi8KKwl1bnNpZ25lZCBpbnQJc2l6ZTsJLyogTWF4IHNpemUgb2YgcXVldWUgKGVxdWFsIHRvIE1heCBudW1iZXIgb2YgVHhDcmVkaXRzKSAqLworCXVuc2lnbmVkIGNoYXIJKmZpZm87CS8qIGFsbG9jYXRlZCBCdWZmZXIgKi8KK307CisKKy8qIFRoaXMgc3RydWN0dXJlIGhvbGRzIGFsbCBvZiB0aGUgbG9jYWwgcG9ydCBpbmZvcm1hdGlvbiAqLworc3RydWN0IGVkZ2Vwb3J0X3BvcnQgeworCV9fdTE2CQkJdHhDcmVkaXRzOwkJLyogb3VyIGN1cnJlbnQgY3JlZGl0cyBmb3IgdGhpcyBwb3J0ICovCisJX191MTYJCQltYXhUeENyZWRpdHM7CQkvKiB0aGUgbWF4IHNpemUgb2YgdGhlIHBvcnQgKi8KKworCXN0cnVjdCBUeEZpZm8JCXR4ZmlmbzsJCQkvKiB0cmFuc21pdCBmaWZvIC0tIHNpemUgd2lsbCBiZSBtYXhUeENyZWRpdHMgKi8KKwlzdHJ1Y3QgdXJiCQkqd3JpdGVfdXJiOwkJLyogd3JpdGUgVVJCIGZvciB0aGlzIHBvcnQgKi8KKwljaGFyCQkJd3JpdGVfaW5fcHJvZ3Jlc3M7CS8qIFRSVUUgd2hpbGUgYSB3cml0ZSBVUkIgaXMgb3V0c3RhbmRpbmcgKi8KKwlzcGlubG9ja190CQllcF9sb2NrOworCisJX191OAkJCXNoYWRvd0xDUjsJCS8qIGxhc3QgTENSIHZhbHVlIHJlY2VpdmVkICovCisJX191OAkJCXNoYWRvd01DUjsJCS8qIGxhc3QgTUNSIHZhbHVlIHJlY2VpdmVkICovCisJX191OAkJCXNoYWRvd01TUjsJCS8qIGxhc3QgTVNSIHZhbHVlIHJlY2VpdmVkICovCisJX191OAkJCXNoYWRvd0xTUjsJCS8qIGxhc3QgTFNSIHZhbHVlIHJlY2VpdmVkICovCisJX191OAkJCXNoYWRvd1hvbkNoYXI7CQkvKiBsYXN0IHZhbHVlIHNldCBhcyBYT04gY2hhciBpbiBFZGdlcG9ydCAqLworCV9fdTgJCQlzaGFkb3dYb2ZmQ2hhcjsJCS8qIGxhc3QgdmFsdWUgc2V0IGFzIFhPRkYgY2hhciBpbiBFZGdlcG9ydCAqLworCV9fdTgJCQl2YWxpZERhdGFNYXNrOworCV9fdTMyCQkJYmF1ZFJhdGU7CisKKwljaGFyCQkJb3BlbjsKKwljaGFyCQkJb3BlblBlbmRpbmc7CisJY2hhcgkJCWNvbW1hbmRQZW5kaW5nOworCWNoYXIJCQljbG9zZVBlbmRpbmc7CisJY2hhcgkJCWNoYXNlUmVzcG9uc2VQZW5kaW5nOworCisJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdF9jaGFzZTsJCS8qIGZvciBoYW5kbGluZyBzbGVlcGluZyB3aGlsZSB3YWl0aW5nIGZvciBjaGFzZSB0byBmaW5pc2ggKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X29wZW47CQkvKiBmb3IgaGFuZGxpbmcgc2xlZXBpbmcgd2hpbGUgd2FpdGluZyBmb3Igb3BlbiB0byBmaW5pc2ggKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X2NvbW1hbmQ7CQkvKiBmb3IgaGFuZGxpbmcgc2xlZXBpbmcgd2hpbGUgd2FpdGluZyBmb3IgY29tbWFuZCB0byBmaW5pc2ggKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAlkZWx0YV9tc3Jfd2FpdDsJCS8qIGZvciBoYW5kbGluZyBzbGVlcGluZyB3aGlsZSB3YWl0aW5nIGZvciBtc3IgY2hhbmdlIHRvIGhhcHBlbiAqLworCisJc3RydWN0IGFzeW5jX2ljb3VudAlpY291bnQ7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkqcG9ydDsJCQkvKiBsb29wIGJhY2sgdG8gdGhlIG93bmVyIG9mIHRoaXMgb2JqZWN0ICovCit9OworCisKKy8qIFRoaXMgc3RydWN0dXJlIGhvbGRzIGFsbCBvZiB0aGUgaW5kaXZpZHVhbCBkZXZpY2UgaW5mb3JtYXRpb24gKi8KK3N0cnVjdCBlZGdlcG9ydF9zZXJpYWwgeworCWNoYXIJCQluYW1lW01BWF9OQU1FX0xFTisxXTsJCS8qIHN0cmluZyBuYW1lIG9mIHRoaXMgZGV2aWNlICovCisKKwlzdHJ1Y3QgZWRnZV9tYW51Zl9kZXNjcmlwdG9yCW1hbnVmX2Rlc2NyaXB0b3I7CS8qIHRoZSBtYW51ZmFjdHVyZXIgZGVzY3JpcHRvciAqLworCXN0cnVjdCBlZGdlX2Jvb3RfZGVzY3JpcHRvcglib290X2Rlc2NyaXB0b3I7CS8qIHRoZSBib290IGZpcm13YXJlIGRlc2NyaXB0b3IgKi8KKwlzdHJ1Y3QgZWRnZXBvcnRfcHJvZHVjdF9pbmZvCXByb2R1Y3RfaW5mbzsJCS8qIFByb2R1Y3QgSW5mbyAqLworCisJX191OAkJCWludGVycnVwdF9pbl9lbmRwb2ludDsJCS8qIHRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQgaGFuZGxlICovCisJdW5zaWduZWQgY2hhciAqCQlpbnRlcnJ1cHRfaW5fYnVmZmVyOwkJLyogdGhlIGJ1ZmZlciB3ZSB1c2UgZm9yIHRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQgKi8KKwlzdHJ1Y3QgdXJiICoJCWludGVycnVwdF9yZWFkX3VyYjsJCS8qIG91ciBpbnRlcnJ1cHQgdXJiICovCisKKwlfX3U4CQkJYnVsa19pbl9lbmRwb2ludDsJCS8qIHRoZSBidWxrIGluIGVuZHBvaW50IGhhbmRsZSAqLworCXVuc2lnbmVkIGNoYXIgKgkJYnVsa19pbl9idWZmZXI7CQkJLyogdGhlIGJ1ZmZlciB3ZSB1c2UgZm9yIHRoZSBidWxrIGluIGVuZHBvaW50ICovCisJc3RydWN0IHVyYiAqCQlyZWFkX3VyYjsJCQkvKiBvdXIgYnVsayByZWFkIHVyYiAqLworCWludAkJCXJlYWRfaW5fcHJvZ3Jlc3M7CisJc3BpbmxvY2tfdAkJZXNfbG9jazsKKworCV9fdTgJCQlidWxrX291dF9lbmRwb2ludDsJCS8qIHRoZSBidWxrIG91dCBlbmRwb2ludCBoYW5kbGUgKi8KKworCV9fczE2CQkJcnhCeXRlc0F2YWlsOwkJCS8qIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3ZSBuZWVkIHRvIHJlYWQgZnJvbSB0aGlzIGRldmljZSAqLworCisJZW51bSBSWFNUQVRFCQlyeFN0YXRlOwkJCS8qIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBidWxrIHJlY2VpdmUgcHJvY2Vzc29yICovCisJX191OAkJCXJ4SGVhZGVyMTsJCQkvKiByZWNlaXZlIGhlYWRlciBieXRlIDEgKi8KKwlfX3U4CQkJcnhIZWFkZXIyOwkJCS8qIHJlY2VpdmUgaGVhZGVyIGJ5dGUgMiAqLworCV9fdTgJCQlyeEhlYWRlcjM7CQkJLyogcmVjZWl2ZSBoZWFkZXIgYnl0ZSAzICovCisJX191OAkJCXJ4UG9ydDsJCQkJLyogdGhlIHBvcnQgdGhhdCB3ZSBhcmUgY3VycmVudGx5IHJlY2VpdmluZyBkYXRhIGZvciAqLworCV9fdTgJCQlyeFN0YXR1c0NvZGU7CQkJLyogdGhlIHJlY2VpdmUgc3RhdHVzIGNvZGUgKi8KKwlfX3U4CQkJcnhTdGF0dXNQYXJhbTsJCQkvKiB0aGUgcmVjZWl2ZSBzdGF0dXMgcGFyYW1hdGVyICovCisJX19zMTYJCQlyeEJ5dGVzUmVtYWluaW5nOwkJLyogdGhlIG51bWJlciBvZiBwb3J0IGJ5dGVzIGxlZnQgdG8gcmVhZCAqLworCXN0cnVjdCB1c2Jfc2VyaWFsCSpzZXJpYWw7CQkJLyogbG9vcCBiYWNrIHRvIHRoZSBvd25lciBvZiB0aGlzIG9iamVjdCAqLworfTsKKworLyogYmF1ZCByYXRlIGluZm9ybWF0aW9uICovCitzdHJ1Y3QgZGl2aXNvcl90YWJsZV9lbnRyeSB7CisJX191MzIgICBCYXVkUmF0ZTsKKwlfX3UxNiAgRGl2aXNvcjsKK307CisKKy8vCisvLyBEZWZpbmUgdGFibGUgb2YgZGl2aXNvcnMgZm9yIFJldiBBIEVkZ2VQb3J0LzQgaGFyZHdhcmUKKy8vIFRoZXNlIGFzc3VtZSBhIDMuNjg2NE1IeiBjcnlzdGFsLCB0aGUgc3RhbmRhcmQgLzE2LCBhbmQKKy8vIE1DUi43ID0gMC4KKy8vCitzdGF0aWMgc3RydWN0IGRpdmlzb3JfdGFibGVfZW50cnkgZGl2aXNvcl90YWJsZVtdID0geworCXsgICA1MCwJCTQ2MDh9LCAgCisJeyAgIDc1LAkJMzA3Mn0sICAKKwl7ICAgMTEwLAkyMDk1fSwJCS8qIDIwOTQuNTQ1NDU1ID0+IDIzMDQ1MCAgID0+IC4wMjE3ICUgb3ZlciAqLworCXsgICAxMzQsCTE3MTN9LAkJLyogMTcxMy4wMTExNTIgPT4gMjMwMzk4LjUgPT4gLjAwMDY1JSB1bmRlciAqLworCXsgICAxNTAsCTE1MzZ9LAorCXsgICAzMDAsCTc2OH0sCisJeyAgIDYwMCwJMzg0fSwKKwl7ICAgMTIwMCwJMTkyfSwKKwl7ICAgMTgwMCwJMTI4fSwKKwl7ICAgMjQwMCwJOTZ9LAorCXsgICA0ODAwLAk0OH0sCisJeyAgIDcyMDAsCTMyfSwKKwl7ICAgOTYwMCwJMjR9LAorCXsgICAxNDQwMCwJMTZ9LAorCXsgICAxOTIwMCwJMTJ9LAorCXsgICAzODQwMCwJNn0sCisJeyAgIDU3NjAwLAk0fSwKKwl7ICAgMTE1MjAwLAkyfSwKKwl7ICAgMjMwNDAwLAkxfSwKK307CisKKy8qIGxvY2FsIHZhcmlhYmxlcyAqLworc3RhdGljIGludCBkZWJ1ZzsKKworc3RhdGljIGludCBsb3dfbGF0ZW5jeSA9IDE7CS8qIHR0eSBsb3cgbGF0ZW5jeSBmbGFnLCBvbiBieSBkZWZhdWx0ICovCisKK3N0YXRpYyBpbnQgQ21kVXJicyA9IDA7CQkvKiBOdW1iZXIgb2Ygb3V0c3RhbmRpbmcgQ29tbWFuZCBXcml0ZSBVcmJzICovCisKKworLyogbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLworCisvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBhbGwgVVJCIGNhbGxiYWNrcyAqLworc3RhdGljIHZvaWQgZWRnZV9pbnRlcnJ1cHRfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgZWRnZV9idWxrX2luX2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIGVkZ2VfYnVsa19vdXRfZGF0YV9jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBlZGdlX2J1bGtfb3V0X2NtZF9jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKy8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHRoZSB1c2JzZXJpYWwgY2FsbGJhY2tzICovCitzdGF0aWMgaW50ICBlZGdlX29wZW4JCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQgZWRnZV9jbG9zZQkJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50ICBlZGdlX3dyaXRlCQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKK3N0YXRpYyBpbnQgIGVkZ2Vfd3JpdGVfcm9vbQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCAgZWRnZV9jaGFyc19pbl9idWZmZXIJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgZWRnZV90aHJvdHRsZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgZWRnZV91bnRocm90dGxlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBlZGdlX3NldF90ZXJtaW9zCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKTsKK3N0YXRpYyBpbnQgIGVkZ2VfaW9jdGwJCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyB2b2lkIGVkZ2VfYnJlYWsJCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlKTsKK3N0YXRpYyBpbnQgIGVkZ2VfdGlvY21nZXQJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50ICBlZGdlX3Rpb2Ntc2V0CQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CitzdGF0aWMgaW50ICBlZGdlX3N0YXJ0dXAJCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIGVkZ2Vfc2h1dGRvd24JCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKKworCisjaW5jbHVkZSAiaW9fdGFibGVzLmgiCS8qIGFsbCBvZiB0aGUgZGV2aWNlcyB0aGF0IHRoaXMgZHJpdmVyIHN1cHBvcnRzICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBpb19kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImlvX2VkZ2Vwb3J0IiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlX2NvbWJpbmVkLAorfTsKKworLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgYWxsIG9mIG91ciBsb2NhbCBmdW5jdGlvbnMgKi8KK3N0YXRpYyB2b2lkICBwcm9jZXNzX3JjdmRfZGF0YQkJKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsLCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIF9fdTE2IGJ1ZmZlckxlbmd0aCk7CitzdGF0aWMgdm9pZCBwcm9jZXNzX3JjdmRfc3RhdHVzCQkoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwsIF9fdTggYnl0ZTIsIF9fdTggYnl0ZTMpOworc3RhdGljIHZvaWQgZWRnZV90dHlfcmVjdgkJCShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgpOworc3RhdGljIHZvaWQgaGFuZGxlX25ld19tc3IJCShzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBfX3U4IG5ld01zcik7CitzdGF0aWMgdm9pZCBoYW5kbGVfbmV3X2xzcgkJKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIF9fdTggbHNyRGF0YSwgX191OCBsc3IsIF9fdTggZGF0YSk7CitzdGF0aWMgaW50ICBzZW5kX2lvc3BfZXh0X2NtZAkJKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIF9fdTggY29tbWFuZCwgX191OCBwYXJhbSk7CitzdGF0aWMgaW50ICBjYWxjX2JhdWRfcmF0ZV9kaXZpc29yCShpbnQgYmF1ZF9yYXRlLCBpbnQgKmRpdmlzb3IpOworc3RhdGljIGludCAgc2VuZF9jbWRfd3JpdGVfYmF1ZF9yYXRlCShzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBpbnQgYmF1ZFJhdGUpOworc3RhdGljIHZvaWQgY2hhbmdlX3BvcnRfc2V0dGluZ3MJKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcyk7CitzdGF0aWMgaW50ICBzZW5kX2NtZF93cml0ZV91YXJ0X3JlZ2lzdGVyCShzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBfX3U4IHJlZ051bSwgX191OCByZWdWYWx1ZSk7CitzdGF0aWMgaW50ICB3cml0ZV9jbWRfdXNiCQkoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgd3JpdGVMZW5ndGgpOworc3RhdGljIHZvaWQgc2VuZF9tb3JlX3BvcnRfZGF0YQkJKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsLCBzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0KTsKKworc3RhdGljIGludCAgc3JhbV93cml0ZQkJCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBfX3UxNiBleHRBZGRyLCBfX3UxNiBhZGRyLCBfX3UxNiBsZW5ndGgsIF9fdTggKmRhdGEpOworc3RhdGljIGludCAgcm9tX3JlYWQJCQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgX191MTYgZXh0QWRkciwgX191MTYgYWRkciwgX191MTYgbGVuZ3RoLCBfX3U4ICpkYXRhKTsKK3N0YXRpYyBpbnQgIHJvbV93cml0ZQkJCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBfX3UxNiBleHRBZGRyLCBfX3UxNiBhZGRyLCBfX3UxNiBsZW5ndGgsIF9fdTggKmRhdGEpOworc3RhdGljIHZvaWQgZ2V0X21hbnVmYWN0dXJpbmdfZGVzYwkoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwpOworc3RhdGljIHZvaWQgZ2V0X2Jvb3RfZGVzYwkJKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsKTsKK3N0YXRpYyB2b2lkIGxvYWRfYXBwbGljYXRpb25fZmlybXdhcmUJKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsKTsKKworc3RhdGljIHZvaWQgdW5pY29kZV90b19hc2NpaQkJKGNoYXIgKnN0cmluZywgX19sZTE2ICp1bmljb2RlLCBpbnQgdW5pY29kZV9zaXplKTsKKworCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJCQkJCQkJCQkqCisgKiB1cGRhdGVfZWRnZXBvcnRfRTJQUk9NKCkJQ29tcGFyZSBjdXJyZW50IHZlcnNpb25zIG9mCQkqCisgKgkJCQlCb290IFJPTSBhbmQgTWFudWZhY3R1cmUgCQkqCisgKgkJCQlEZXNjcmlwdG9ycyB3aXRoIHZlcnNpb25zCQkqCisgKgkJCQllbWJlZGRlZCBpbiB0aGlzIGRyaXZlcgkJCSoKKyAqCQkJCQkJCQkJKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIHVwZGF0ZV9lZGdlcG9ydF9FMlBST00gKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsKQoreworCV9fdTMyIEJvb3RDdXJWZXI7CisJX191MzIgQm9vdE5ld1ZlcjsKKwlfX3U4IEJvb3RNYWpvclZlcnNpb247ICAgICAgICAgICAgICAgICAgCisJX191OCBCb290TWlub3JWZXJzaW9uOyAgICAgICAgICAgICAgICAgIAorCV9fbGUxNiBCb290QnVpbGROdW1iZXI7CisJX191OCAqQm9vdEltYWdlOyAgICAgIAorCV9fdTMyIEJvb3RTaXplOworCXN0cnVjdCBlZGdlX2Zpcm13YXJlX2ltYWdlX3JlY29yZCAqcmVjb3JkOworCXVuc2lnbmVkIGNoYXIgKmZpcm13YXJlOworCWludCByZXNwb25zZTsKKworCisJc3dpdGNoIChlZGdlX3NlcmlhbC0+cHJvZHVjdF9pbmZvLmlEb3dubG9hZEZpbGUpIHsKKwkJY2FzZSBFREdFX0RPV05MT0FEX0ZJTEVfSTkzMDoKKwkJCUJvb3RNYWpvclZlcnNpb24JPSBCb290Q29kZUltYWdlVmVyc2lvbl9HRU4xLk1ham9yVmVyc2lvbjsKKwkJCUJvb3RNaW5vclZlcnNpb24JPSBCb290Q29kZUltYWdlVmVyc2lvbl9HRU4xLk1pbm9yVmVyc2lvbjsKKwkJCUJvb3RCdWlsZE51bWJlcgkJPSBjcHVfdG9fbGUxNihCb290Q29kZUltYWdlVmVyc2lvbl9HRU4xLkJ1aWxkTnVtYmVyKTsKKwkJCUJvb3RJbWFnZQkJPSAmQm9vdENvZGVJbWFnZV9HRU4xWzBdOworCQkJQm9vdFNpemUJCT0gc2l6ZW9mKCBCb290Q29kZUltYWdlX0dFTjEgKTsKKwkJCWJyZWFrOworCisJCWNhc2UgRURHRV9ET1dOTE9BRF9GSUxFXzgwMjUxOgorCQkJQm9vdE1ham9yVmVyc2lvbgk9IEJvb3RDb2RlSW1hZ2VWZXJzaW9uX0dFTjIuTWFqb3JWZXJzaW9uOworCQkJQm9vdE1pbm9yVmVyc2lvbgk9IEJvb3RDb2RlSW1hZ2VWZXJzaW9uX0dFTjIuTWlub3JWZXJzaW9uOworCQkJQm9vdEJ1aWxkTnVtYmVyCQk9IGNwdV90b19sZTE2KEJvb3RDb2RlSW1hZ2VWZXJzaW9uX0dFTjIuQnVpbGROdW1iZXIpOworCQkJQm9vdEltYWdlCQk9ICZCb290Q29kZUltYWdlX0dFTjJbMF07CisJCQlCb290U2l6ZQkJPSBzaXplb2YoIEJvb3RDb2RlSW1hZ2VfR0VOMiApOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybjsKKwl9CisKKwkvLyBDaGVjayBCb290IEltYWdlIFZlcnNpb24KKwlCb290Q3VyVmVyID0gKGVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuTWFqb3JWZXJzaW9uIDw8IDI0KSArCisJCSAgICAgKGVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuTWlub3JWZXJzaW9uIDw8IDE2KSArCisJCSAgICAgIGxlMTZfdG9fY3B1KGVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuQnVpbGROdW1iZXIpOworCisJQm9vdE5ld1ZlciA9IChCb290TWFqb3JWZXJzaW9uIDw8IDI0KSArCisJCSAgICAgKEJvb3RNaW5vclZlcnNpb24gPDwgMTYpICsKKwkJICAgICAgbGUxNl90b19jcHUoQm9vdEJ1aWxkTnVtYmVyKTsKKworCWRiZygiQ3VycmVudCBCb290IEltYWdlIHZlcnNpb24gJWQuJWQuJWQiLAorCSAgICBlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLk1ham9yVmVyc2lvbiwKKwkgICAgZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5NaW5vclZlcnNpb24sCisJICAgIGxlMTZfdG9fY3B1KGVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuQnVpbGROdW1iZXIpKTsKKworCisJaWYgKEJvb3ROZXdWZXIgPiBCb290Q3VyVmVyKSB7CisJCWRiZygiKipVcGRhdGUgQm9vdCBJbWFnZSBmcm9tICVkLiVkLiVkIHRvICVkLiVkLiVkIiwKKwkJICAgIGVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuTWFqb3JWZXJzaW9uLAorCQkgICAgZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5NaW5vclZlcnNpb24sCisJCSAgICBsZTE2X3RvX2NwdShlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLkJ1aWxkTnVtYmVyKSwKKwkJICAgIEJvb3RNYWpvclZlcnNpb24sCisJCSAgICBCb290TWlub3JWZXJzaW9uLAorCQkgICAgbGUxNl90b19jcHUoQm9vdEJ1aWxkTnVtYmVyKSk7CisKKworCQlkYmcoIkRvd25sb2FkaW5nIG5ldyBCb290IEltYWdlIik7CisKKwkJZmlybXdhcmUgPSBCb290SW1hZ2U7CisKKwkJZm9yICg7OykgeworCQkJcmVjb3JkID0gKHN0cnVjdCBlZGdlX2Zpcm13YXJlX2ltYWdlX3JlY29yZCAqKWZpcm13YXJlOworCQkJcmVzcG9uc2UgPSByb21fd3JpdGUgKGVkZ2Vfc2VyaWFsLT5zZXJpYWwsIGxlMTZfdG9fY3B1KHJlY29yZC0+RXh0QWRkciksIGxlMTZfdG9fY3B1KHJlY29yZC0+QWRkciksIGxlMTZfdG9fY3B1KHJlY29yZC0+TGVuKSwgJnJlY29yZC0+RGF0YVswXSk7CisJCQlpZiAocmVzcG9uc2UgPCAwKSB7CisJCQkJZGV2X2VycigmZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsICJyb21fd3JpdGUgZmFpbGVkICgleCwgJXgsICVkKVxuIiwgbGUxNl90b19jcHUocmVjb3JkLT5FeHRBZGRyKSwgbGUxNl90b19jcHUocmVjb3JkLT5BZGRyKSwgbGUxNl90b19jcHUocmVjb3JkLT5MZW4pKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWZpcm13YXJlICs9IHNpemVvZiAoc3RydWN0IGVkZ2VfZmlybXdhcmVfaW1hZ2VfcmVjb3JkKSArIGxlMTZfdG9fY3B1KHJlY29yZC0+TGVuKTsKKwkJCWlmIChmaXJtd2FyZSA+PSAmQm9vdEltYWdlW0Jvb3RTaXplXSkgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJZGJnKCJCb290IEltYWdlIC0tIGFscmVhZHkgdXAgdG8gZGF0ZSIpOworCX0KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkJCQkJCQkJCSoKKyAqICBHZXQgc3RyaW5nIGRlc2NyaXB0b3IgZnJvbSBkZXZpY2UJCQkJCSoKKyAqCQkJCQkJCQkJKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZ2V0X3N0cmluZyAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IElkLCBjaGFyICpzdHJpbmcpCit7CisJc3RydWN0IHVzYl9zdHJpbmdfZGVzY3JpcHRvciBTdHJpbmdEZXNjOworCXN0cnVjdCB1c2Jfc3RyaW5nX2Rlc2NyaXB0b3IgKnBTdHJpbmdEZXNjOworCisJZGJnKCIlcyAtIFVTQiBTdHJpbmcgSUQgPSAlZCIsIF9fRlVOQ1RJT05fXywgSWQgKTsKKworCWlmICghdXNiX2dldF9kZXNjcmlwdG9yKGRldiwgVVNCX0RUX1NUUklORywgSWQsICZTdHJpbmdEZXNjLCBzaXplb2YoU3RyaW5nRGVzYykpKSB7CisJCXJldHVybiAwOworCX0KKworCXBTdHJpbmdEZXNjID0ga21hbGxvYyAoU3RyaW5nRGVzYy5iTGVuZ3RoLCBHRlBfS0VSTkVMKTsKKworCWlmICghcFN0cmluZ0Rlc2MpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCF1c2JfZ2V0X2Rlc2NyaXB0b3IoZGV2LCBVU0JfRFRfU1RSSU5HLCBJZCwgcFN0cmluZ0Rlc2MsIFN0cmluZ0Rlc2MuYkxlbmd0aCApKSB7CisJCWtmcmVlKHBTdHJpbmdEZXNjKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdW5pY29kZV90b19hc2NpaShzdHJpbmcsICBwU3RyaW5nRGVzYy0+d0RhdGEsICAgICBwU3RyaW5nRGVzYy0+Ykxlbmd0aC8yLTEpOworCisJa2ZyZWUocFN0cmluZ0Rlc2MpOworCXJldHVybiBzdHJsZW4oc3RyaW5nKTsKK30KKworCisjaWYgMAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBHZXQgc3RyaW5nIGRlc2NyaXB0b3IgZnJvbSBkZXZpY2UKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBnZXRfc3RyaW5nX2Rlc2MgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBJZCwgc3RydWN0IHVzYl9zdHJpbmdfZGVzY3JpcHRvciAqKnBSZXREZXNjKQoreworCXN0cnVjdCB1c2Jfc3RyaW5nX2Rlc2NyaXB0b3IgU3RyaW5nRGVzYzsKKwlzdHJ1Y3QgdXNiX3N0cmluZ19kZXNjcmlwdG9yICpwU3RyaW5nRGVzYzsKKworCWRiZygiJXMgLSBVU0IgU3RyaW5nIElEID0gJWQiLCBfX0ZVTkNUSU9OX18sIElkICk7CisKKwlpZiAoIXVzYl9nZXRfZGVzY3JpcHRvcihkZXYsIFVTQl9EVF9TVFJJTkcsIElkLCAmU3RyaW5nRGVzYywgc2l6ZW9mKFN0cmluZ0Rlc2MpKSkgeworCQlyZXR1cm4gMDsKKwl9CisKKwlwU3RyaW5nRGVzYyA9IGttYWxsb2MgKFN0cmluZ0Rlc2MuYkxlbmd0aCwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXBTdHJpbmdEZXNjKSB7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoIXVzYl9nZXRfZGVzY3JpcHRvcihkZXYsIFVTQl9EVF9TVFJJTkcsIElkLCBwU3RyaW5nRGVzYywgU3RyaW5nRGVzYy5iTGVuZ3RoICkpIHsKKwkJa2ZyZWUocFN0cmluZ0Rlc2MpOworCQlyZXR1cm4gLTE7CisJfQorCisJKnBSZXREZXNjID0gcFN0cmluZ0Rlc2M7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgZ2V0X3Byb2R1Y3RfaW5mbyhzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCkKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcHJvZHVjdF9pbmZvICpwcm9kdWN0X2luZm8gPSAmZWRnZV9zZXJpYWwtPnByb2R1Y3RfaW5mbzsKKworCW1lbXNldCAocHJvZHVjdF9pbmZvLCAwLCBzaXplb2Yoc3RydWN0IGVkZ2Vwb3J0X3Byb2R1Y3RfaW5mbykpOworCisJcHJvZHVjdF9pbmZvLT5Qcm9kdWN0SWQJCT0gKF9fdTE2KShsZTE2X3RvX2NwdShlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAmIH5JT05fREVWSUNFX0lEXzgwMjUxX05FVENISVApOworCXByb2R1Y3RfaW5mby0+TnVtUG9ydHMJCT0gZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuTnVtUG9ydHM7CisJcHJvZHVjdF9pbmZvLT5Qcm9kSW5mb1Zlcgk9IDA7CisKKwlwcm9kdWN0X2luZm8tPlJvbVNpemUJCT0gZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuUm9tU2l6ZTsKKwlwcm9kdWN0X2luZm8tPlJhbVNpemUJCT0gZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuUmFtU2l6ZTsKKwlwcm9kdWN0X2luZm8tPkNwdVJldgkJPSBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5DcHVSZXY7CisJcHJvZHVjdF9pbmZvLT5Cb2FyZFJldgkJPSBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5Cb2FyZFJldjsKKworCXByb2R1Y3RfaW5mby0+Qm9vdE1ham9yVmVyc2lvbgk9IGVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuTWFqb3JWZXJzaW9uOworCXByb2R1Y3RfaW5mby0+Qm9vdE1pbm9yVmVyc2lvbgk9IGVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuTWlub3JWZXJzaW9uOworCXByb2R1Y3RfaW5mby0+Qm9vdEJ1aWxkTnVtYmVyCT0gZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5CdWlsZE51bWJlcjsKKworCW1lbWNweShwcm9kdWN0X2luZm8tPk1hbnVmYWN0dXJlRGVzY0RhdGUsIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLkRlc2NEYXRlLCBzaXplb2YoZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuRGVzY0RhdGUpKTsKKworCS8vIGNoZWNrIGlmIHRoaXMgaXMgMm5kIGdlbmVyYXRpb24gaGFyZHdhcmUKKwlpZiAobGUxNl90b19jcHUoZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgJiBJT05fREVWSUNFX0lEXzgwMjUxX05FVENISVApIHsKKwkJcHJvZHVjdF9pbmZvLT5GaXJtd2FyZU1ham9yVmVyc2lvbgk9IE9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbl9HRU4yLk1ham9yVmVyc2lvbjsKKwkJcHJvZHVjdF9pbmZvLT5GaXJtd2FyZU1pbm9yVmVyc2lvbgk9IE9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbl9HRU4yLk1pbm9yVmVyc2lvbjsKKwkJcHJvZHVjdF9pbmZvLT5GaXJtd2FyZUJ1aWxkTnVtYmVyCT0gY3B1X3RvX2xlMTYoT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uX0dFTjIuQnVpbGROdW1iZXIpOworCQlwcm9kdWN0X2luZm8tPmlEb3dubG9hZEZpbGUJCT0gRURHRV9ET1dOTE9BRF9GSUxFXzgwMjUxOworCX0gZWxzZSB7CisJCXByb2R1Y3RfaW5mby0+RmlybXdhcmVNYWpvclZlcnNpb24JPSBPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb25fR0VOMS5NYWpvclZlcnNpb247CisJCXByb2R1Y3RfaW5mby0+RmlybXdhcmVNaW5vclZlcnNpb24JPSBPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb25fR0VOMS5NaW5vclZlcnNpb247CisJCXByb2R1Y3RfaW5mby0+RmlybXdhcmVCdWlsZE51bWJlcgk9IGNwdV90b19sZTE2KE9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbl9HRU4xLkJ1aWxkTnVtYmVyKTsKKwkJcHJvZHVjdF9pbmZvLT5pRG93bmxvYWRGaWxlCQk9IEVER0VfRE9XTkxPQURfRklMRV9JOTMwOworCX0KKworCS8vIERldGVybWluZSBQcm9kdWN0IHR5cGUgYW5kIHNldCBhcHByb3ByaWF0ZSBmbGFncworCXN3aXRjaCAoREVWSUNFX0lEX0ZST01fVVNCX1BST0RVQ1RfSUQocHJvZHVjdF9pbmZvLT5Qcm9kdWN0SWQpKSB7CisJCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF9DT01QQVRJQkxFOgorCQljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNFQ6CisJCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80OgorCQljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMjoKKwkJY2FzZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzhfRFVBTF9DUFU6CisJCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF84OgorCQljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNDIxOgorCQljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMjE6CisJCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF8yX0RJTjoKKwkJY2FzZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzRfRElOOgorCQljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMTZfRFVBTF9DUFU6CisJCQlwcm9kdWN0X2luZm8tPklzUlMyMzIgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzJJOgkJCQkgICAvLyBFZGdlcG9ydC8yIFJTNDIyL1JTNDg1CisJCQlwcm9kdWN0X2luZm8tPklzUlM0MjIgPSAxOworCQkJcHJvZHVjdF9pbmZvLT5Jc1JTNDg1ID0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF84SToJCQkJICAgLy8gRWRnZXBvcnQvNCBSUzQyMgorCQljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNEk6CQkJCSAgIC8vIEVkZ2Vwb3J0LzQgUlM0MjIKKwkJCXByb2R1Y3RfaW5mby0+SXNSUzQyMiA9IDE7CisJCQlicmVhazsKKwl9CisKKwkvLyBEdW1wIFByb2R1Y3QgSW5mbyBzdHJ1Y3R1cmUKKwlkYmcoIioqUHJvZHVjdCBJbmZvcm1hdGlvbjoiKTsKKwlkYmcoIiAgUHJvZHVjdElkICAgICAgICAgICAgICV4IiwgcHJvZHVjdF9pbmZvLT5Qcm9kdWN0SWQgKTsKKwlkYmcoIiAgTnVtUG9ydHMgICAgICAgICAgICAgICVkIiwgcHJvZHVjdF9pbmZvLT5OdW1Qb3J0cyApOworCWRiZygiICBQcm9kSW5mb1ZlciAgICAgICAgICAgJWQiLCBwcm9kdWN0X2luZm8tPlByb2RJbmZvVmVyICk7CisJZGJnKCIgIElzU2VydmVyICAgICAgICAgICAgICAlZCIsIHByb2R1Y3RfaW5mby0+SXNTZXJ2ZXIpOworCWRiZygiICBJc1JTMjMyICAgICAgICAgICAgICAgJWQiLCBwcm9kdWN0X2luZm8tPklzUlMyMzIgKTsKKwlkYmcoIiAgSXNSUzQyMiAgICAgICAgICAgICAgICVkIiwgcHJvZHVjdF9pbmZvLT5Jc1JTNDIyICk7CisJZGJnKCIgIElzUlM0ODUgICAgICAgICAgICAgICAlZCIsIHByb2R1Y3RfaW5mby0+SXNSUzQ4NSApOworCWRiZygiICBSb21TaXplICAgICAgICAgICAgICAgJWQiLCBwcm9kdWN0X2luZm8tPlJvbVNpemUgKTsKKwlkYmcoIiAgUmFtU2l6ZSAgICAgICAgICAgICAgICVkIiwgcHJvZHVjdF9pbmZvLT5SYW1TaXplICk7CisJZGJnKCIgIENwdVJldiAgICAgICAgICAgICAgICAleCIsIHByb2R1Y3RfaW5mby0+Q3B1UmV2ICApOworCWRiZygiICBCb2FyZFJldiAgICAgICAgICAgICAgJXgiLCBwcm9kdWN0X2luZm8tPkJvYXJkUmV2KTsKKwlkYmcoIiAgQm9vdE1ham9yVmVyc2lvbiAgICAgICVkLiVkLiVkIiwgcHJvZHVjdF9pbmZvLT5Cb290TWFqb3JWZXJzaW9uLAorCSAgICBwcm9kdWN0X2luZm8tPkJvb3RNaW5vclZlcnNpb24sCisJICAgIGxlMTZfdG9fY3B1KHByb2R1Y3RfaW5mby0+Qm9vdEJ1aWxkTnVtYmVyKSk7CisJZGJnKCIgIEZpcm13YXJlTWFqb3JWZXJzaW9uICAlZC4lZC4lZCIsIHByb2R1Y3RfaW5mby0+RmlybXdhcmVNYWpvclZlcnNpb24sCisJICAgIHByb2R1Y3RfaW5mby0+RmlybXdhcmVNaW5vclZlcnNpb24sCisJICAgIGxlMTZfdG9fY3B1KHByb2R1Y3RfaW5mby0+RmlybXdhcmVCdWlsZE51bWJlcikpOworCWRiZygiICBNYW51ZmFjdHVyZURlc2NEYXRlICAgJWQvJWQvJWQiLCBwcm9kdWN0X2luZm8tPk1hbnVmYWN0dXJlRGVzY0RhdGVbMF0sCisJICAgIHByb2R1Y3RfaW5mby0+TWFudWZhY3R1cmVEZXNjRGF0ZVsxXSwKKwkgICAgcHJvZHVjdF9pbmZvLT5NYW51ZmFjdHVyZURlc2NEYXRlWzJdKzE5MDApOworCWRiZygiICBpRG93bmxvYWRGaWxlICAgICAgICAgMHgleCIsICAgICBwcm9kdWN0X2luZm8tPmlEb3dubG9hZEZpbGUpOworCit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgIFUgUyBCICBDIEEgTCBMIEIgQSBDIEsgICBGIFUgTiBDIFQgSSBPIE4gUyAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICBVIFMgQiAgQyBBIEwgTCBCIEEgQyBLICAgRiBVIE4gQyBUIEkgTyBOIFMgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGVkZ2VfaW50ZXJydXB0X2NhbGxiYWNrCisgKgl0aGlzIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3Igd2hlbiB3ZSBoYXZlIHJlY2VpdmVkIGRhdGEgb24gdGhlIAorICoJaW50ZXJydXB0IGVuZHBvaW50LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgZWRnZV9pbnRlcnJ1cHRfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbAkqZWRnZV9zZXJpYWwgPSAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCBsZW5ndGggPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJaW50IGJ5dGVzX2F2YWlsOworCWludCBwb3NpdGlvbjsKKwlpbnQgdHhDcmVkaXRzOworCWludCBwb3J0TnVtYmVyOworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJLy8gcHJvY2VzcyB0aGlzIGludGVycnVwdC1yZWFkIGV2ZW4gaWYgdGhlcmUgYXJlIG5vIHBvcnRzIG9wZW4KKwlpZiAobGVuZ3RoKSB7CisJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJmVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCBfX0ZVTkNUSU9OX18sIGxlbmd0aCwgZGF0YSk7CisKKwkJaWYgKGxlbmd0aCA+IDEpIHsKKwkJCWJ5dGVzX2F2YWlsID0gZGF0YVswXSB8IChkYXRhWzFdIDw8IDgpOworCQkJaWYgKGJ5dGVzX2F2YWlsKSB7CisJCQkJc3Bpbl9sb2NrKCZlZGdlX3NlcmlhbC0+ZXNfbG9jayk7CisJCQkJZWRnZV9zZXJpYWwtPnJ4Qnl0ZXNBdmFpbCArPSBieXRlc19hdmFpbDsKKwkJCQlkYmcoIiVzIC0gYnl0ZXNfYXZhaWw9JWQsIHJ4Qnl0ZXNBdmFpbD0lZCwgcmVhZF9pbl9wcm9ncmVzcz0lZCIsIF9fRlVOQ1RJT05fXywgYnl0ZXNfYXZhaWwsIGVkZ2Vfc2VyaWFsLT5yeEJ5dGVzQXZhaWwsIGVkZ2Vfc2VyaWFsLT5yZWFkX2luX3Byb2dyZXNzKTsKKworCQkJCWlmIChlZGdlX3NlcmlhbC0+cnhCeXRlc0F2YWlsID4gMCAmJgorCQkJCSAgICAhZWRnZV9zZXJpYWwtPnJlYWRfaW5fcHJvZ3Jlc3MpIHsKKwkJCQkJZGJnKCIlcyAtIHBvc3RpbmcgYSByZWFkIiwgX19GVU5DVElPTl9fKTsKKwkJCQkJZWRnZV9zZXJpYWwtPnJlYWRfaW5fcHJvZ3Jlc3MgPSBUUlVFOworCisJCQkJCS8qIHdlIGhhdmUgcGVuZGluZyBieXRlcyBvbiB0aGUgYnVsayBpbiBwaXBlLCBzZW5kIGEgcmVxdWVzdCAqLworCQkJCQllZGdlX3NlcmlhbC0+cmVhZF91cmItPmRldiA9IGVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldjsKKwkJCQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIoZWRnZV9zZXJpYWwtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJCQkJaWYgKHJlc3VsdCkgeworCQkJCQkJZGV2X2VycigmZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIHVzYl9zdWJtaXRfdXJiKHJlYWQgYnVsaykgZmFpbGVkIHdpdGggcmVzdWx0ID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJCQkJCWVkZ2Vfc2VyaWFsLT5yZWFkX2luX3Byb2dyZXNzID0gRkFMU0U7CisJCQkJCX0KKwkJCQl9CisJCQkJc3Bpbl91bmxvY2soJmVkZ2Vfc2VyaWFsLT5lc19sb2NrKTsKKwkJCX0KKwkJfQorCQkvKiBncmFiIHRoZSB0eGNyZWRpdHMgZm9yIHRoZSBwb3J0cyBpZiBhdmFpbGFibGUgKi8KKwkJcG9zaXRpb24gPSAyOworCQlwb3J0TnVtYmVyID0gMDsKKwkJd2hpbGUgKChwb3NpdGlvbiA8IGxlbmd0aCkgJiYgKHBvcnROdW1iZXIgPCBlZGdlX3NlcmlhbC0+c2VyaWFsLT5udW1fcG9ydHMpKSB7CisJCQl0eENyZWRpdHMgPSBkYXRhW3Bvc2l0aW9uXSB8IChkYXRhW3Bvc2l0aW9uKzFdIDw8IDgpOworCQkJaWYgKHR4Q3JlZGl0cykgeworCQkJCXBvcnQgPSBlZGdlX3NlcmlhbC0+c2VyaWFsLT5wb3J0W3BvcnROdW1iZXJdOworCQkJCWVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkJCQlpZiAoZWRnZV9wb3J0LT5vcGVuKSB7CisJCQkJCXNwaW5fbG9jaygmZWRnZV9wb3J0LT5lcF9sb2NrKTsKKwkJCQkJZWRnZV9wb3J0LT50eENyZWRpdHMgKz0gdHhDcmVkaXRzOworCQkJCQlzcGluX3VubG9jaygmZWRnZV9wb3J0LT5lcF9sb2NrKTsKKwkJCQkJZGJnKCIlcyAtIHR4Y3JlZGl0cyBmb3IgcG9ydCVkID0gJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnROdW1iZXIsIGVkZ2VfcG9ydC0+dHhDcmVkaXRzKTsKKworCQkJCQkvKiB0ZWxsIHRoZSB0dHkgZHJpdmVyIHRoYXQgc29tZXRoaW5nIGhhcyBjaGFuZ2VkICovCisJCQkJCWlmIChlZGdlX3BvcnQtPnBvcnQtPnR0eSkKKwkJCQkJCXR0eV93YWtldXAoZWRnZV9wb3J0LT5wb3J0LT50dHkpOworCisJCQkJCS8vIFNpbmNlIHdlIGhhdmUgbW9yZSBjcmVkaXQsIGNoZWNrIGlmIG1vcmUgZGF0YSBjYW4gYmUgc2VudAorCQkJCQlzZW5kX21vcmVfcG9ydF9kYXRhKGVkZ2Vfc2VyaWFsLCBlZGdlX3BvcnQpOworCQkJCX0KKwkJCX0KKwkJCXBvc2l0aW9uICs9IDI7CisJCQkrK3BvcnROdW1iZXI7CisJCX0KKwl9CisKK2V4aXQ6CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBFcnJvciAlZCBzdWJtaXR0aW5nIGNvbnRyb2wgdXJiXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJfQorfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZWRnZV9idWxrX2luX2NhbGxiYWNrCisgKgl0aGlzIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3Igd2hlbiB3ZSBoYXZlIHJlY2VpdmVkIGRhdGEgb24gdGhlIAorICoJYnVsayBpbiBlbmRwb2ludC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGVkZ2VfYnVsa19pbl9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsCSplZGdlX3NlcmlhbCA9IChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICopdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGNoYXIJCSpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50CQkJc3RhdHVzOworCV9fdTE2CQkJcmF3X2RhdGFfbGVuZ3RoOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZWRnZV9zZXJpYWwtPnJlYWRfaW5fcHJvZ3Jlc3MgPSBGQUxTRTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPT0gMCkgeworCQlkYmcoIiVzIC0gcmVhZCBidWxrIGNhbGxiYWNrIHdpdGggbm8gZGF0YSIsIF9fRlVOQ1RJT05fXyk7CisJCWVkZ2Vfc2VyaWFsLT5yZWFkX2luX3Byb2dyZXNzID0gRkFMU0U7CisJCXJldHVybjsKKwl9CisKKwlyYXdfZGF0YV9sZW5ndGggPSB1cmItPmFjdHVhbF9sZW5ndGg7CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYtPmRldiwgX19GVU5DVElPTl9fLCByYXdfZGF0YV9sZW5ndGgsIGRhdGEpOworCisJc3Bpbl9sb2NrKCZlZGdlX3NlcmlhbC0+ZXNfbG9jayk7CisKKwkvKiBkZWNyZW1lbnQgb3VyIHJ4Qnl0ZXMgYXZhaWxhYmxlIGJ5IHRoZSBudW1iZXIgdGhhdCB3ZSBqdXN0IGdvdCAqLworCWVkZ2Vfc2VyaWFsLT5yeEJ5dGVzQXZhaWwgLT0gcmF3X2RhdGFfbGVuZ3RoOworCisJZGJnKCIlcyAtIFJlY2VpdmVkID0gJWQsIHJ4Qnl0ZXNBdmFpbCAlZCIsIF9fRlVOQ1RJT05fXywgcmF3X2RhdGFfbGVuZ3RoLCBlZGdlX3NlcmlhbC0+cnhCeXRlc0F2YWlsKTsKKworCXByb2Nlc3NfcmN2ZF9kYXRhIChlZGdlX3NlcmlhbCwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKworCS8qIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBtb3JlIGRhdGEgZm9yIHVzIHRvIHJlYWQgKi8KKwlpZiAoZWRnZV9zZXJpYWwtPnJ4Qnl0ZXNBdmFpbCA+IDApIHsKKwkJZGJnKCIlcyAtIHBvc3RpbmcgYSByZWFkIiwgX19GVU5DVElPTl9fKTsKKwkJZWRnZV9zZXJpYWwtPnJlYWRfdXJiLT5kZXYgPSBlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXY7CisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKGVkZ2Vfc2VyaWFsLT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChzdGF0dXMpIHsKKwkJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIHVzYl9zdWJtaXRfdXJiKHJlYWQgYnVsaykgZmFpbGVkLCBzdGF0dXMgPSAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQkJZWRnZV9zZXJpYWwtPnJlYWRfaW5fcHJvZ3Jlc3MgPSBGQUxTRTsKKwkJfQorCX0gZWxzZSB7CisJCWVkZ2Vfc2VyaWFsLT5yZWFkX2luX3Byb2dyZXNzID0gRkFMU0U7CisJfQorCisJc3Bpbl91bmxvY2soJmVkZ2Vfc2VyaWFsLT5lc19sb2NrKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGVkZ2VfYnVsa19vdXRfZGF0YV9jYWxsYmFjaworICoJdGhpcyBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHdoZW4gd2UgaGF2ZSBmaW5pc2hlZCBzZW5kaW5nIHNlcmlhbCBkYXRhCisgKglvbiB0aGUgYnVsayBvdXQgZW5kcG9pbnQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBlZGdlX2J1bGtfb3V0X2RhdGFfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJfQorCisJdHR5ID0gZWRnZV9wb3J0LT5wb3J0LT50dHk7CisKKwlpZiAodHR5ICYmIGVkZ2VfcG9ydC0+b3BlbikgeworCQkvKiBsZXQgdGhlIHR0eSBkcml2ZXIgd2FrZXVwIGlmIGl0IGhhcyBhIHNwZWNpYWwgd3JpdGVfd2FrZXVwIGZ1bmN0aW9uICovCisJCXR0eV93YWtldXAodHR5KTsKKwl9CisKKwkvLyBSZWxlYXNlIHRoZSBXcml0ZSBVUkIKKwllZGdlX3BvcnQtPndyaXRlX2luX3Byb2dyZXNzID0gRkFMU0U7CisKKwkvLyBDaGVjayBpZiBtb3JlIGRhdGEgbmVlZHMgdG8gYmUgc2VudAorCXNlbmRfbW9yZV9wb3J0X2RhdGEoKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKikodXNiX2dldF9zZXJpYWxfZGF0YShlZGdlX3BvcnQtPnBvcnQtPnNlcmlhbCkpLCBlZGdlX3BvcnQpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQnVsa091dENtZENhbGxiYWNrCisgKgl0aGlzIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3Igd2hlbiB3ZSBoYXZlIGZpbmlzaGVkIHNlbmRpbmcgYSBjb21tYW5kCisgKglvbiB0aGUgYnVsayBvdXQgZW5kcG9pbnQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBlZGdlX2J1bGtfb3V0X2NtZF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlDbWRVcmJzLS07CisJZGJnKCIlcyAtIEZSRUUgVVJCICVwIChvdXRzdGFuZGluZyAlZCkiLCBfX0ZVTkNUSU9OX18sIHVyYiwgQ21kVXJicyk7CisKKworCS8qIGNsZWFuIHVwIHRoZSB0cmFuc2ZlciBidWZmZXIgKi8KKwlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgIT0gTlVMTCkgeworCQlrZnJlZSh1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJfQorCisJLyogRnJlZSB0aGUgY29tbWFuZCB1cmIgKi8KKwl1c2JfZnJlZV91cmIgKHVyYik7CisKKwlpZiAoc3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEdldCBwb2ludGVyIHRvIHR0eSAqLworCXR0eSA9IGVkZ2VfcG9ydC0+cG9ydC0+dHR5OworCisJLyogdGVsbCB0aGUgdHR5IGRyaXZlciB0aGF0IHNvbWV0aGluZyBoYXMgY2hhbmdlZCAqLworCWlmICh0dHkgJiYgZWRnZV9wb3J0LT5vcGVuKQorCQl0dHlfd2FrZXVwKHR0eSk7CisKKwkvKiB3ZSBoYXZlIGNvbXBsZXRlZCB0aGUgY29tbWFuZCAqLworCWVkZ2VfcG9ydC0+Y29tbWFuZFBlbmRpbmcgPSBGQUxTRTsKKwl3YWtlX3VwKCZlZGdlX3BvcnQtPndhaXRfY29tbWFuZCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEcml2ZXIgdHR5IGludGVyZmFjZSBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTZXJpYWxPcGVuCisgKgl0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdHR5IGRyaXZlciB3aGVuIGEgcG9ydCBpcyBvcGVuZWQKKyAqCUlmIHN1Y2Nlc3NmdWwsIHdlIHJldHVybiAwCisgKglPdGhlcndpc2Ugd2UgcmV0dXJuIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBlZGdlX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlscCkKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWw7CisJaW50IHJlc3BvbnNlOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoZWRnZV9wb3J0ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHBvcnQtPnR0eSkKKwkJcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IGxvd19sYXRlbmN5OworCisJLyogc2VlIGlmIHdlJ3ZlIHNldCB1cCBvdXIgZW5kcG9pbnQgaW5mbyB5ZXQgKGNhbid0IHNldCBpdCB1cCBpbiBlZGdlX3N0YXJ0dXAKKwkgICBhcyB0aGUgc3RydWN0dXJlcyB3ZXJlIG5vdCBzZXQgdXAgYXQgdGhhdCB0aW1lLikgKi8KKwlzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJZWRnZV9zZXJpYWwgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CisJaWYgKGVkZ2Vfc2VyaWFsID09IE5VTEwpIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlmIChlZGdlX3NlcmlhbC0+aW50ZXJydXB0X2luX2J1ZmZlciA9PSBOVUxMKSB7CisJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQwID0gc2VyaWFsLT5wb3J0WzBdOworCQkKKwkJLyogbm90IHNldCB1cCB5ZXQsIHNvIGRvIGl0IG5vdyAqLworCQllZGdlX3NlcmlhbC0+aW50ZXJydXB0X2luX2J1ZmZlciA9IHBvcnQwLT5pbnRlcnJ1cHRfaW5fYnVmZmVyOworCQllZGdlX3NlcmlhbC0+aW50ZXJydXB0X2luX2VuZHBvaW50ID0gcG9ydDAtPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3M7CisJCWVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfcmVhZF91cmIgPSBwb3J0MC0+aW50ZXJydXB0X2luX3VyYjsKKwkJZWRnZV9zZXJpYWwtPmJ1bGtfaW5fYnVmZmVyID0gcG9ydDAtPmJ1bGtfaW5fYnVmZmVyOworCQllZGdlX3NlcmlhbC0+YnVsa19pbl9lbmRwb2ludCA9IHBvcnQwLT5idWxrX2luX2VuZHBvaW50QWRkcmVzczsKKwkJZWRnZV9zZXJpYWwtPnJlYWRfdXJiID0gcG9ydDAtPnJlYWRfdXJiOworCQllZGdlX3NlcmlhbC0+YnVsa19vdXRfZW5kcG9pbnQgPSBwb3J0MC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzOworCQorCQkvKiBzZXQgdXAgb3VyIGludGVycnVwdCB1cmIgKi8KKwkJdXNiX2ZpbGxfaW50X3VyYihlZGdlX3NlcmlhbC0+aW50ZXJydXB0X3JlYWRfdXJiLAorCQkJCSBzZXJpYWwtPmRldiwKKwkJCQkgdXNiX3JjdmludHBpcGUoc2VyaWFsLT5kZXYsCisJCQkJCSAgICAgICAgcG9ydDAtPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJCSBwb3J0MC0+aW50ZXJydXB0X2luX2J1ZmZlciwKKwkJCQkgZWRnZV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQkgZWRnZV9pbnRlcnJ1cHRfY2FsbGJhY2ssIGVkZ2Vfc2VyaWFsLAorCQkJCSBlZGdlX3NlcmlhbC0+aW50ZXJydXB0X3JlYWRfdXJiLT5pbnRlcnZhbCk7CisJCQorCQkvKiBzZXQgdXAgb3VyIGJ1bGsgaW4gdXJiICovCisJCXVzYl9maWxsX2J1bGtfdXJiKGVkZ2Vfc2VyaWFsLT5yZWFkX3VyYiwgc2VyaWFsLT5kZXYsCisJCQkJICB1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQkJCSAgCSAgcG9ydDAtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkgIHBvcnQwLT5idWxrX2luX2J1ZmZlciwKKwkJCQkgIGVkZ2Vfc2VyaWFsLT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQkgIGVkZ2VfYnVsa19pbl9jYWxsYmFjaywgZWRnZV9zZXJpYWwpOworCQllZGdlX3NlcmlhbC0+cmVhZF9pbl9wcm9ncmVzcyA9IEZBTFNFOworCisJCS8qIHN0YXJ0IGludGVycnVwdCByZWFkIGZvciB0aGlzIGVkZ2Vwb3J0CisJCSAqIHRoaXMgaW50ZXJydXB0IHdpbGwgY29udGludWUgYXMgbG9uZyBhcyB0aGUgZWRnZXBvcnQgaXMgY29ubmVjdGVkICovCisJCXJlc3BvbnNlID0gdXNiX3N1Ym1pdF91cmIgKGVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfcmVhZF91cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmVzcG9uc2UpIHsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gRXJyb3IgJWQgc3VibWl0dGluZyBjb250cm9sIHVyYlxuIiwgX19GVU5DVElPTl9fLCByZXNwb25zZSk7CisJCX0KKwl9CisJCisJLyogaW5pdGlhbGl6ZSBvdXIgd2FpdCBxdWV1ZXMgKi8KKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZlZGdlX3BvcnQtPndhaXRfb3Blbik7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZWRnZV9wb3J0LT53YWl0X2NoYXNlKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZlZGdlX3BvcnQtPmRlbHRhX21zcl93YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZlZGdlX3BvcnQtPndhaXRfY29tbWFuZCk7CisKKwkvKiBpbml0aWFsaXplIG91ciBpY291bnQgc3RydWN0dXJlICovCisJbWVtc2V0ICgmKGVkZ2VfcG9ydC0+aWNvdW50KSwgMHgwMCwgc2l6ZW9mKGVkZ2VfcG9ydC0+aWNvdW50KSk7CisKKwkvKiBpbml0aWFsaXplIG91ciBwb3J0IHNldHRpbmdzICovCisJZWRnZV9wb3J0LT50eENyZWRpdHMgICAgICAgICAgICA9IDA7CQkJLyogQ2FuJ3Qgc2VuZCBhbnkgZGF0YSB5ZXQgKi8KKwllZGdlX3BvcnQtPnNoYWRvd01DUiAgICAgICAgICAgID0gTUNSX01BU1RFUl9JRTsJLyogTXVzdCBhbHdheXMgc2V0IHRoaXMgYml0IHRvIGVuYWJsZSBpbnRzISAqLworCWVkZ2VfcG9ydC0+Y2hhc2VSZXNwb25zZVBlbmRpbmcgPSBGQUxTRTsKKworCS8qIHNlbmQgYSBvcGVuIHBvcnQgY29tbWFuZCAqLworCWVkZ2VfcG9ydC0+b3BlblBlbmRpbmcgPSBUUlVFOworCWVkZ2VfcG9ydC0+b3BlbiAgICAgICAgPSBGQUxTRTsKKwlyZXNwb25zZSA9IHNlbmRfaW9zcF9leHRfY21kIChlZGdlX3BvcnQsIElPU1BfQ01EX09QRU5fUE9SVCwgMCk7CisKKwlpZiAocmVzcG9uc2UgPCAwKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZXJyb3Igc2VuZGluZyBvcGVuIHBvcnQgY29tbWFuZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJZWRnZV9wb3J0LT5vcGVuUGVuZGluZyA9IEZBTFNFOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBub3cgd2FpdCBmb3IgdGhlIHBvcnQgdG8gYmUgY29tcGxldGVseSBvcGVuZWQgKi8KKwl3YWl0X2V2ZW50X3RpbWVvdXQoZWRnZV9wb3J0LT53YWl0X29wZW4sIChlZGdlX3BvcnQtPm9wZW5QZW5kaW5nICE9IFRSVUUpLCBPUEVOX1RJTUVPVVQpOworCisJaWYgKGVkZ2VfcG9ydC0+b3BlbiA9PSBGQUxTRSkgeworCQkvKiBvcGVuIHRpbWVkIG91dCAqLworCQlkYmcoIiVzIC0gb3BlbiB0aW1lZG91dCIsIF9fRlVOQ1RJT05fXyk7CisJCWVkZ2VfcG9ydC0+b3BlblBlbmRpbmcgPSBGQUxTRTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogY3JlYXRlIHRoZSB0eGZpZm8gKi8KKwllZGdlX3BvcnQtPnR4Zmlmby5oZWFkCT0gMDsKKwllZGdlX3BvcnQtPnR4Zmlmby50YWlsCT0gMDsKKwllZGdlX3BvcnQtPnR4Zmlmby5jb3VudAk9IDA7CisJZWRnZV9wb3J0LT50eGZpZm8uc2l6ZQk9IGVkZ2VfcG9ydC0+bWF4VHhDcmVkaXRzOworCWVkZ2VfcG9ydC0+dHhmaWZvLmZpZm8JPSBrbWFsbG9jIChlZGdlX3BvcnQtPm1heFR4Q3JlZGl0cywgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWVkZ2VfcG9ydC0+dHhmaWZvLmZpZm8pIHsKKwkJZGJnKCIlcyAtIG5vIG1lbW9yeSIsIF9fRlVOQ1RJT05fXyk7CisJCWVkZ2VfY2xvc2UgKHBvcnQsIGZpbHApOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhIFVSQiBmb3IgdGhlIHdyaXRlICovCisJZWRnZV9wb3J0LT53cml0ZV91cmIgPSB1c2JfYWxsb2NfdXJiICgwLCBHRlBfS0VSTkVMKTsKKwllZGdlX3BvcnQtPndyaXRlX2luX3Byb2dyZXNzID0gRkFMU0U7CisKKwlpZiAoIWVkZ2VfcG9ydC0+d3JpdGVfdXJiKSB7CisJCWRiZygiJXMgLSBubyBtZW1vcnkiLCBfX0ZVTkNUSU9OX18pOworCQllZGdlX2Nsb3NlIChwb3J0LCBmaWxwKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGJnKCIlcyglZCkgLSBJbml0aWFsaXplIFRYIGZpZm8gdG8gJWQgYnl0ZXMiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgZWRnZV9wb3J0LT5tYXhUeENyZWRpdHMpOworCisJZGJnKCIlcyBleGl0ZWQiLCBfX0ZVTkNUSU9OX18pOworCisJcmV0dXJuIDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGJsb2NrX3VudGlsX2NoYXNlX3Jlc3BvbnNlCisgKgorICoJVGhpcyBmdW5jdGlvbiB3aWxsIGJsb2NrIHRoZSBjbG9zZSB1bnRpbCBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAqCQkxLiBSZXNwb25zZSB0byBvdXIgQ2hhc2UgY29tZXMgZnJvbSBFZGdlcG9ydAorICoJCTIuIEEgdGltb3V0IG9mIDEwIHNlY29uZHMgd2l0aG91dCBhY3Rpdml0eSBoYXMgZXhwaXJlZAorICoJCSAgICgxSyBvZiBFZGdlcG9ydCBkYXRhIEAgMjQwMCBiYXVkID09PiA0IHNlYyB0byBlbXB0eSkKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgYmxvY2tfdW50aWxfY2hhc2VfcmVzcG9uc2Uoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCkKK3sKKwlERUZJTkVfV0FJVCh3YWl0KTsKKwlfX3UxNiBsYXN0Q3JlZGl0czsKKwlpbnQgdGltZW91dCA9IDEqSFo7CisJaW50IGxvb3AgPSAxMDsKKworCXdoaWxlICgxKSB7CisJCS8vIFNhdmUgTGFzdCBjcmVkaXRzCisJCWxhc3RDcmVkaXRzID0gZWRnZV9wb3J0LT50eENyZWRpdHM7CisKKwkJLy8gRGlkIHdlIGdldCBvdXIgQ2hhc2UgcmVzcG9uc2UKKwkJaWYgKGVkZ2VfcG9ydC0+Y2hhc2VSZXNwb25zZVBlbmRpbmcgPT0gRkFMU0UpIHsKKwkJCWRiZygiJXMgLSBHb3QgQ2hhc2UgUmVzcG9uc2UiLCBfX0ZVTkNUSU9OX18pOworCisJCQkvLyBkaWQgd2UgZ2V0IGFsbCBvZiBvdXIgY3JlZGl0IGJhY2s/CisJCQlpZiAoZWRnZV9wb3J0LT50eENyZWRpdHMgPT0gZWRnZV9wb3J0LT5tYXhUeENyZWRpdHMgKSB7CisJCQkJZGJnKCIlcyAtIEdvdCBhbGwgY3JlZGl0cyIsIF9fRlVOQ1RJT05fXyk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisKKwkJLy8gQmxvY2sgdGhlIHRocmVhZCBmb3IgYSB3aGlsZQorCQlwcmVwYXJlX3RvX3dhaXQoJmVkZ2VfcG9ydC0+d2FpdF9jaGFzZSwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKKwkJZmluaXNoX3dhaXQoJmVkZ2VfcG9ydC0+d2FpdF9jaGFzZSwgJndhaXQpOworCisJCWlmIChsYXN0Q3JlZGl0cyA9PSBlZGdlX3BvcnQtPnR4Q3JlZGl0cykgeworCQkJLy8gTm8gYWN0aXZpdHkuLiBjb3VudCBkb3duLgorCQkJbG9vcC0tOworCQkJaWYgKGxvb3AgPT0gMCkgeworCQkJCWVkZ2VfcG9ydC0+Y2hhc2VSZXNwb25zZVBlbmRpbmcgPSBGQUxTRTsKKwkJCQlkYmcoIiVzIC0gQ2hhc2UgVElNRU9VVCIsIF9fRlVOQ1RJT05fXyk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9IGVsc2UgeworCQkJLy8gUmVzZXQgdGltb3V0IHZhbHVlIGJhY2sgdG8gMTAgc2Vjb25kcworCQkJZGJnKCIlcyAtIExhc3QgJWQsIEN1cnJlbnQgJWQiLCBfX0ZVTkNUSU9OX18sIGxhc3RDcmVkaXRzLCBlZGdlX3BvcnQtPnR4Q3JlZGl0cyk7CisJCQlsb29wID0gMTA7CisJCX0KKwl9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGJsb2NrX3VudGlsX3R4X2VtcHR5CisgKgorICoJVGhpcyBmdW5jdGlvbiB3aWxsIGJsb2NrIHRoZSBjbG9zZSB1bnRpbCBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAqCQkxLiBUWCBjb3VudCBhcmUgMAorICoJCTIuIFRoZSBlZGdlcG9ydCBoYXMgc3RvcHBlZAorICoJCTMuIEEgdGltb3V0IG9mIDMgc2Vjb25kcyB3aXRob3V0IGFjdGl2aXR5IGhhcyBleHBpcmVkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGJsb2NrX3VudGlsX3R4X2VtcHR5IChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0KQoreworCURFRklORV9XQUlUKHdhaXQpOworCXN0cnVjdCBUeEZpZm8gKmZpZm8gPSAmZWRnZV9wb3J0LT50eGZpZm87CisJX191MzIgbGFzdENvdW50OworCWludCB0aW1lb3V0ID0gSFovMTA7CisJaW50IGxvb3AgPSAzMDsKKworCXdoaWxlICgxKSB7CisJCS8vIFNhdmUgTGFzdCBjb3VudAorCQlsYXN0Q291bnQgPSBmaWZvLT5jb3VudDsKKworCQkvLyBJcyB0aGUgRWRnZXBvcnQgQnVmZmVyIGVtcHR5PworCQlpZiAobGFzdENvdW50ID09IDApIHsKKwkJCWRiZygiJXMgLSBUWCBCdWZmZXIgRW1wdHkiLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuOworCQl9CisKKwkJLy8gQmxvY2sgdGhlIHRocmVhZCBmb3IgYSB3aGlsZQorCQlwcmVwYXJlX3RvX3dhaXQgKCZlZGdlX3BvcnQtPndhaXRfY2hhc2UsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CisJCWZpbmlzaF93YWl0KCZlZGdlX3BvcnQtPndhaXRfY2hhc2UsICZ3YWl0KTsKKworCQlkYmcoIiVzIHdhaXQiLCBfX0ZVTkNUSU9OX18pOworCisJCWlmIChsYXN0Q291bnQgPT0gZmlmby0+Y291bnQpIHsKKwkJCS8vIE5vIGFjdGl2aXR5Li4gY291bnQgZG93bi4KKwkJCWxvb3AtLTsKKwkJCWlmIChsb29wID09IDApIHsKKwkJCQlkYmcoIiVzIC0gVElNRU9VVCIsIF9fRlVOQ1RJT05fXyk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9IGVsc2UgeworCQkJLy8gUmVzZXQgdGltb3V0IHZhbHVlIGJhY2sgdG8gc2Vjb25kcworCQkJbG9vcCA9IDMwOworCQl9CisJfQorfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZWRnZV9jbG9zZQorICoJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHR0eSBkcml2ZXIgd2hlbiBhIHBvcnQgaXMgY2xvc2VkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBlZGdlX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit7CisJc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWw7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydDsKKwlpbnQgc3RhdHVzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCQkgCisJZWRnZV9zZXJpYWwgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CisJZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWlmICgoZWRnZV9zZXJpYWwgPT0gTlVMTCkgfHwgKGVkZ2VfcG9ydCA9PSBOVUxMKSkKKwkJcmV0dXJuOworCQorCS8vIGJsb2NrIHVudGlsIHR4IGlzIGVtcHR5CisJYmxvY2tfdW50aWxfdHhfZW1wdHkoZWRnZV9wb3J0KTsKKworCWVkZ2VfcG9ydC0+Y2xvc2VQZW5kaW5nID0gVFJVRTsKKworCS8qIGZsdXNoIGFuZCBjaGFzZSAqLworCWVkZ2VfcG9ydC0+Y2hhc2VSZXNwb25zZVBlbmRpbmcgPSBUUlVFOworCisJZGJnKCIlcyAtIFNlbmRpbmcgSU9TUF9DTURfQ0hBU0VfUE9SVCIsIF9fRlVOQ1RJT05fXyk7CisJc3RhdHVzID0gc2VuZF9pb3NwX2V4dF9jbWQgKGVkZ2VfcG9ydCwgSU9TUF9DTURfQ0hBU0VfUE9SVCwgMCk7CisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCS8vIGJsb2NrIHVudGlsIGNoYXNlIGZpbmlzaGVkCisJCWJsb2NrX3VudGlsX2NoYXNlX3Jlc3BvbnNlKGVkZ2VfcG9ydCk7CisJfSBlbHNlIHsKKwkJZWRnZV9wb3J0LT5jaGFzZVJlc3BvbnNlUGVuZGluZyA9IEZBTFNFOworCX0KKworCS8qIGNsb3NlIHRoZSBwb3J0ICovCisJZGJnKCIlcyAtIFNlbmRpbmcgSU9TUF9DTURfQ0xPU0VfUE9SVCIsIF9fRlVOQ1RJT05fXyk7CisJc2VuZF9pb3NwX2V4dF9jbWQgKGVkZ2VfcG9ydCwgSU9TUF9DTURfQ0xPU0VfUE9SVCwgMCk7CisKKwkvL3BvcnQtPmNsb3NlID0gVFJVRTsKKwllZGdlX3BvcnQtPmNsb3NlUGVuZGluZyA9IEZBTFNFOworCWVkZ2VfcG9ydC0+b3BlbiA9IEZBTFNFOworCWVkZ2VfcG9ydC0+b3BlblBlbmRpbmcgPSBGQUxTRTsKKworCWlmIChlZGdlX3BvcnQtPndyaXRlX3VyYikgeworCQl1c2Jfa2lsbF91cmIoZWRnZV9wb3J0LT53cml0ZV91cmIpOworCX0KKworCWlmIChlZGdlX3BvcnQtPndyaXRlX3VyYikgeworCQkvKiBpZiB0aGlzIHVyYiBoYWQgYSB0cmFuc2ZlciBidWZmZXIgYWxyZWFkeSAob2xkIHRyYW5zZmVyKSBmcmVlIGl0ICovCisJCWlmIChlZGdlX3BvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyICE9IE5VTEwpIHsKKwkJCWtmcmVlKGVkZ2VfcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQl9CisJCXVzYl9mcmVlX3VyYiAgIChlZGdlX3BvcnQtPndyaXRlX3VyYik7CisJCWVkZ2VfcG9ydC0+d3JpdGVfdXJiID0gTlVMTDsKKwl9CisJaWYgKGVkZ2VfcG9ydC0+dHhmaWZvLmZpZm8pIHsKKwkJa2ZyZWUoZWRnZV9wb3J0LT50eGZpZm8uZmlmbyk7CisJCWVkZ2VfcG9ydC0+dHhmaWZvLmZpZm8gPSBOVUxMOworCX0KKworCWRiZygiJXMgZXhpdGVkIiwgX19GVU5DVElPTl9fKTsKK30gICAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTZXJpYWxXcml0ZQorICoJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHR0eSBkcml2ZXIgd2hlbiBkYXRhIHNob3VsZCBiZSB3cml0dGVuIHRvCisgKgl0aGUgcG9ydC4KKyAqCUlmIHN1Y2Nlc3NmdWwsIHdlIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4sIG90aGVyd2lzZSB3ZSByZXR1cm4KKyAqCWEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBlZGdlX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgY291bnQpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgVHhGaWZvICpmaWZvOworCWludCBjb3B5U2l6ZTsKKwlpbnQgYnl0ZXNsZWZ0OworCWludCBmaXJzdGhhbGY7CisJaW50IHNlY29uZGhhbGY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKGVkZ2VfcG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8vIGdldCBhIHBvaW50ZXIgdG8gdGhlIFR4IGZpZm8KKwlmaWZvID0gJmVkZ2VfcG9ydC0+dHhmaWZvOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCisJLy8gY2FsY3VsYXRlIG51bWJlciBvZiBieXRlcyB0byBwdXQgaW4gZmlmbworCWNvcHlTaXplID0gbWluICgodW5zaWduZWQgaW50KWNvdW50LCAoZWRnZV9wb3J0LT50eENyZWRpdHMgLSBmaWZvLT5jb3VudCkpOworCisJZGJnKCIlcyglZCkgb2YgJWQgYnl0ZShzKSBGaWZvIHJvb20gICVkIC0tIHdpbGwgY29weSAlZCBieXRlcyIsIF9fRlVOQ1RJT05fXywgCisJICAgIHBvcnQtPm51bWJlciwgY291bnQsIGVkZ2VfcG9ydC0+dHhDcmVkaXRzIC0gZmlmby0+Y291bnQsIGNvcHlTaXplKTsKKworCS8qIGNhdGNoIHdyaXRlcyBvZiAwIGJ5dGVzIHdoaWNoIHRoZSB0dHkgZHJpdmVyIGxpa2VzIHRvIGdpdmUgdXMsIGFuZCB3aGVuIHR4Q3JlZGl0cyBpcyBlbXB0eSAqLworCWlmIChjb3B5U2l6ZSA9PSAwKSB7CisJCWRiZygiJXMgLSBjb3B5U2l6ZSA9IFplcm8iLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGZpbmlzaF93cml0ZTsKKwl9CisKKwkvLyBxdWV1ZSB0aGUgZGF0YQkKKwkvLyBzaW5jZSB3ZSBjYW4gbmV2ZXIgb3ZlcmZsb3cgdGhlIGJ1ZmZlciB3ZSBkbyBub3QgaGF2ZSB0byBjaGVjayBmb3IgZnVsbCBjb25kaXRpb24KKworCS8vIHRoZSBjb3B5IGlzIGRvbmUgaXMgdHdvIHBhcnRzIC0tIGZpcnN0IGZpbGwgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyCisJLy8gdGhlbiBjb3B5IHRoZSByZXNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyIAorCisJYnl0ZXNsZWZ0ID0gZmlmby0+c2l6ZSAtIGZpZm8tPmhlYWQ7CisJZmlyc3RoYWxmID0gbWluIChieXRlc2xlZnQsIGNvcHlTaXplKTsKKwlkYmcoIiVzIC0gY29weSAlZCBieXRlcyBvZiAlZCBpbnRvIGZpZm8gIiwgX19GVU5DVElPTl9fLCBmaXJzdGhhbGYsIGJ5dGVzbGVmdCk7CisKKwkvKiBub3cgY29weSBvdXIgZGF0YSAqLworCW1lbWNweSgmZmlmby0+Zmlmb1tmaWZvLT5oZWFkXSwgZGF0YSwgZmlyc3RoYWxmKTsKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgZmlyc3RoYWxmLCAmZmlmby0+Zmlmb1tmaWZvLT5oZWFkXSk7CisKKwkvLyB1cGRhdGUgdGhlIGluZGV4IGFuZCBzaXplCisJZmlmby0+aGVhZCAgKz0gZmlyc3RoYWxmOworCWZpZm8tPmNvdW50ICs9IGZpcnN0aGFsZjsKKworCS8vIHdyYXAgdGhlIGluZGV4CisJaWYgKGZpZm8tPmhlYWQgPT0gZmlmby0+c2l6ZSkgeworCQlmaWZvLT5oZWFkID0gMDsKKwl9CisKKwlzZWNvbmRoYWxmID0gY29weVNpemUtZmlyc3RoYWxmOworCisJaWYgKHNlY29uZGhhbGYpIHsKKwkJZGJnKCIlcyAtIGNvcHkgcmVzdCBvZiBkYXRhICVkIiwgX19GVU5DVElPTl9fLCBzZWNvbmRoYWxmKTsKKwkJbWVtY3B5KCZmaWZvLT5maWZvW2ZpZm8tPmhlYWRdLCAmZGF0YVtmaXJzdGhhbGZdLCBzZWNvbmRoYWxmKTsKKwkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIHNlY29uZGhhbGYsICZmaWZvLT5maWZvW2ZpZm8tPmhlYWRdKTsKKwkJLy8gdXBkYXRlIHRoZSBpbmRleCBhbmQgc2l6ZQorCQlmaWZvLT5jb3VudCArPSBzZWNvbmRoYWxmOworCQlmaWZvLT5oZWFkICArPSBzZWNvbmRoYWxmOworCQkvLyBObyBuZWVkIHRvIGNoZWNrIGZvciB3cmFwIHNpbmNlIHdlIGNhbiBub3QgZ2V0IHRvIGVuZCBvZiBmaWZvIGluIHRoaXMgcGFydAorCX0KKworZmluaXNoX3dyaXRlOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCisJc2VuZF9tb3JlX3BvcnRfZGF0YSgoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqKXVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKSwgZWRnZV9wb3J0KTsKKworCWRiZygiJXMgd3JvdGUgJWQgYnl0ZShzKSBUeENyZWRpdHMgJWQsIEZpZm8gJWQiLCBfX0ZVTkNUSU9OX18sIGNvcHlTaXplLCBlZGdlX3BvcnQtPnR4Q3JlZGl0cywgZmlmby0+Y291bnQpOworCisJcmV0dXJuIGNvcHlTaXplOyAgIAorfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBzZW5kX21vcmVfcG9ydF9kYXRhKCkKKyAqCisgKglUaGlzIHJvdXRpbmUgYXR0ZW1wdHMgdG8gd3JpdGUgYWRkaXRpb25hbCBVQVJUIHRyYW5zbWl0IGRhdGEKKyAqCXRvIGEgcG9ydCBvdmVyIHRoZSBVU0IgYnVsayBwaXBlLiBJdCBpcyBjYWxsZWQgKDEpIHdoZW4gbmV3CisgKglkYXRhIGhhcyBiZWVuIHdyaXR0ZW4gdG8gYSBwb3J0J3MgVHhCdWZmZXIgZnJvbSBoaWdoZXIgbGF5ZXJzCisgKgkoMikgd2hlbiB0aGUgcGVyaXBoZXJhbCBzZW5kcyB1cyBhZGRpdGlvbmFsIFR4Q3JlZGl0cyBpbmRpY2F0aW5nCisgKgl0aGF0IGl0IGNhbiBhY2NlcHQgbW9yZQlUeCBkYXRhIGZvciBhIGdpdmVuIHBvcnQ7IGFuZCAoMykgd2hlbgorICoJYSBidWxrIHdyaXRlIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkgYW5kIHdlIHdhbnQgdG8gc2VlIGlmIHdlCisgKgljYW4gdHJhbnNtaXQgbW9yZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgc2VuZF9tb3JlX3BvcnRfZGF0YShzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCwgc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCkKK3sKKwlzdHJ1Y3QgVHhGaWZvCSpmaWZvID0gJmVkZ2VfcG9ydC0+dHhmaWZvOworCXN0cnVjdCB1cmIJKnVyYjsKKwl1bnNpZ25lZCBjaGFyCSpidWZmZXI7CisJaW50CQlzdGF0dXM7CisJaW50CQljb3VudDsKKwlpbnQJCWJ5dGVzbGVmdDsKKwlpbnQJCWZpcnN0aGFsZjsKKwlpbnQJCXNlY29uZGhhbGY7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCWRiZygiJXMoJWQpIiwgX19GVU5DVElPTl9fLCBlZGdlX3BvcnQtPnBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CisKKwlpZiAoZWRnZV9wb3J0LT53cml0ZV9pbl9wcm9ncmVzcyB8fAorCSAgICAhZWRnZV9wb3J0LT5vcGVuICAgICAgICAgICAgIHx8CisJICAgIChmaWZvLT5jb3VudCA9PSAwKSkgeworCQlkYmcoIiVzKCVkKSBFWElUIC0gZmlmbyAlZCwgUGVuZGluZ1dyaXRlID0gJWQiLCBfX0ZVTkNUSU9OX18sIGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyLCBmaWZvLT5jb3VudCwgZWRnZV9wb3J0LT53cml0ZV9pbl9wcm9ncmVzcyk7CisJCWdvdG8gZXhpdF9zZW5kOworCX0KKworCS8vIHNpbmNlIHRoZSBhbW91bnQgb2YgZGF0YSBpbiB0aGUgZmlmbyB3aWxsIGFsd2F5cyBmaXQgaW50byB0aGUKKwkvLyBlZGdlcG9ydCBidWZmZXIgd2UgZG8gbm90IG5lZWQgdG8gY2hlY2sgdGhlIHdyaXRlIGxlbmd0aAorCisJLy8JRG8gd2UgaGF2ZSBlbm91Z2ggY3JlZGl0cyBmb3IgdGhpcyBwb3J0IHRvIG1ha2UgaXQgd29ydGh3aGlsZQorCS8vCXRvIGJvdGhlciBxdWV1ZWluZyBhIHdyaXRlLiBJZiBpdCdzIHRvbyBzbWFsbCwgc2F5IGEgZmV3IGJ5dGVzLAorCS8vCWl0J3MgYmV0dGVyIHRvIHdhaXQgZm9yIG1vcmUgY3JlZGl0cyBzbyB3ZSBjYW4gZG8gYSBsYXJnZXIKKwkvLwl3cml0ZS4KKwlpZiAoZWRnZV9wb3J0LT50eENyZWRpdHMgPCBFREdFX0ZXX0dFVF9UWF9DUkVESVRTX1NFTkRfVEhSRVNIT0xEKGVkZ2VfcG9ydC0+bWF4VHhDcmVkaXRzLEVER0VfRldfQlVMS19NQVhfUEFDS0VUX1NJWkUpKSB7CisJCWRiZygiJXMoJWQpIE5vdCBlbm91Z2ggY3JlZGl0IC0gZmlmbyAlZCBUeENyZWRpdCAlZCIsIF9fRlVOQ1RJT05fXywgZWRnZV9wb3J0LT5wb3J0LT5udW1iZXIsIGZpZm8tPmNvdW50LCBlZGdlX3BvcnQtPnR4Q3JlZGl0cyApOworCQlnb3RvIGV4aXRfc2VuZDsKKwl9CisKKwkvLyBsb2NrIHRoaXMgd3JpdGUKKwllZGdlX3BvcnQtPndyaXRlX2luX3Byb2dyZXNzID0gVFJVRTsKKworCS8vIGdldCBhIHBvaW50ZXIgdG8gdGhlIHdyaXRlX3VyYgorCXVyYiA9IGVkZ2VfcG9ydC0+d3JpdGVfdXJiOworCisJLyogaWYgdGhpcyB1cmIgaGFkIGEgdHJhbnNmZXIgYnVmZmVyIGFscmVhZHkgKG9sZCB0cmFuc2ZlcikgZnJlZSBpdCAqLworCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciAhPSBOVUxMKSB7CisJCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBOVUxMOworCX0KKworCS8qIGJ1aWxkIHRoZSBkYXRhIGhlYWRlciBmb3IgdGhlIGJ1ZmZlciBhbmQgcG9ydCB0aGF0IHdlIGFyZSBhYm91dCB0byBzZW5kIG91dCAqLworCWNvdW50ID0gZmlmby0+Y291bnQ7CisJYnVmZmVyID0ga21hbGxvYyAoY291bnQrMiwgR0ZQX0FUT01JQyk7CisJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LCAiJXMgLSBubyBtb3JlIGtlcm5lbCBtZW1vcnkuLi5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVkZ2VfcG9ydC0+d3JpdGVfaW5fcHJvZ3Jlc3MgPSBGQUxTRTsKKwkJZ290byBleGl0X3NlbmQ7CisJfQorCWJ1ZmZlclswXSA9IElPU1BfQlVJTERfREFUQV9IRFIxIChlZGdlX3BvcnQtPnBvcnQtPm51bWJlciAtIGVkZ2VfcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vciwgY291bnQpOworCWJ1ZmZlclsxXSA9IElPU1BfQlVJTERfREFUQV9IRFIyIChlZGdlX3BvcnQtPnBvcnQtPm51bWJlciAtIGVkZ2VfcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vciwgY291bnQpOworCisJLyogbm93IGNvcHkgb3VyIGRhdGEgKi8KKwlieXRlc2xlZnQgPSAgZmlmby0+c2l6ZSAtIGZpZm8tPnRhaWw7CisJZmlyc3RoYWxmID0gbWluIChieXRlc2xlZnQsIGNvdW50KTsKKwltZW1jcHkoJmJ1ZmZlclsyXSwgJmZpZm8tPmZpZm9bZmlmby0+dGFpbF0sIGZpcnN0aGFsZik7CisJZmlmby0+dGFpbCAgKz0gZmlyc3RoYWxmOworCWZpZm8tPmNvdW50IC09IGZpcnN0aGFsZjsKKwlpZiAoZmlmby0+dGFpbCA9PSBmaWZvLT5zaXplKSB7CisJCWZpZm8tPnRhaWwgPSAwOworCX0KKworCXNlY29uZGhhbGYgPSBjb3VudC1maXJzdGhhbGY7CisJaWYgKHNlY29uZGhhbGYpIHsKKwkJbWVtY3B5KCZidWZmZXJbMitmaXJzdGhhbGZdLCAmZmlmby0+Zmlmb1tmaWZvLT50YWlsXSwgc2Vjb25kaGFsZik7CisJCWZpZm8tPnRhaWwgICs9IHNlY29uZGhhbGY7CisJCWZpZm8tPmNvdW50IC09IHNlY29uZGhhbGY7CisJfQorCisJaWYgKGNvdW50KQorCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZlZGdlX3BvcnQtPnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCBjb3VudCwgJmJ1ZmZlclsyXSk7CisKKwkvKiBmaWxsIHVwIHRoZSB1cmIgd2l0aCBhbGwgb2Ygb3VyIGRhdGEgYW5kIHN1Ym1pdCBpdCAqLworCXVzYl9maWxsX2J1bGtfdXJiICh1cmIsIGVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldiwgCisJCSAgICAgICB1c2Jfc25kYnVsa3BpcGUoZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LCBlZGdlX3NlcmlhbC0+YnVsa19vdXRfZW5kcG9pbnQpLAorCQkgICAgICAgYnVmZmVyLCBjb3VudCsyLCBlZGdlX2J1bGtfb3V0X2RhdGFfY2FsbGJhY2ssIGVkZ2VfcG9ydCk7CisKKwkvKiBkZWNyZW1lbnQgdGhlIG51bWJlciBvZiBjcmVkaXRzIHdlIGhhdmUgYnkgdGhlIG51bWJlciB3ZSBqdXN0IHNlbnQgKi8KKwllZGdlX3BvcnQtPnR4Q3JlZGl0cyAtPSBjb3VudDsKKwllZGdlX3BvcnQtPmljb3VudC50eCArPSBjb3VudDsKKworCXVyYi0+ZGV2ID0gZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2OworCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cykgeworCQkvKiBzb21ldGhpbmcgd2VudCB3cm9uZyAqLworCQlkZXZfZXJyKCZlZGdlX3BvcnQtPnBvcnQtPmRldiwgIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkLCBzdGF0dXMgPSAlZCwgZGF0YSBsb3N0XG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCWVkZ2VfcG9ydC0+d3JpdGVfaW5fcHJvZ3Jlc3MgPSBGQUxTRTsKKworCQkvKiByZXZlcnQgdGhlIGNyZWRpdHMgYXMgc29tZXRoaW5nIGJhZCBoYXBwZW5lZC4gKi8KKwkJZWRnZV9wb3J0LT50eENyZWRpdHMgKz0gY291bnQ7CisJCWVkZ2VfcG9ydC0+aWNvdW50LnR4IC09IGNvdW50OworCX0KKwlkYmcoIiVzIHdyb3RlICVkIGJ5dGUocykgVHhDcmVkaXQgJWQsIEZpZm8gJWQiLCBfX0ZVTkNUSU9OX18sIGNvdW50LCBlZGdlX3BvcnQtPnR4Q3JlZGl0cywgZmlmby0+Y291bnQpOworCitleGl0X3NlbmQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBlZGdlX3dyaXRlX3Jvb20KKyAqCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0dHkgZHJpdmVyIHdoZW4gaXQgd2FudHMgdG8ga25vdyBob3cgbWFueQorICoJYnl0ZXMgb2YgZGF0YSB3ZSBjYW4gYWNjZXB0IGZvciBhIHNwZWNpZmljIHBvcnQuCisgKglJZiBzdWNjZXNzZnVsLCB3ZSByZXR1cm4gdGhlIGFtb3VudCBvZiByb29tIHRoYXQgd2UgaGF2ZSBmb3IgdGhpcyBwb3J0CisgKgkodGhlIHR4Q3JlZGl0cyksIAorICoJT3RoZXJ3aXNlIHdlIHJldHVybiBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZWRnZV93cml0ZV9yb29tIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IHJvb207CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKGVkZ2VfcG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoZWRnZV9wb3J0LT5jbG9zZVBlbmRpbmcgPT0gVFJVRSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICghZWRnZV9wb3J0LT5vcGVuKSB7CisJCWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvLyB0b3RhbCBvZiBib3RoIGJ1ZmZlcnMgaXMgc3RpbGwgdHhDcmVkaXQKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CisJcm9vbSA9IGVkZ2VfcG9ydC0+dHhDcmVkaXRzIC0gZWRnZV9wb3J0LT50eGZpZm8uY291bnQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CisKKwlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fRlVOQ1RJT05fXywgcm9vbSk7CisJcmV0dXJuIHJvb207Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBlZGdlX2NoYXJzX2luX2J1ZmZlcgorICoJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHR0eSBkcml2ZXIgd2hlbiBpdCB3YW50cyB0byBrbm93IGhvdyBtYW55CisgKglieXRlcyBvZiBkYXRhIHdlIGN1cnJlbnRseSBoYXZlIG91dHN0YW5kaW5nIGluIHRoZSBwb3J0IChkYXRhIHRoYXQgaGFzCisgKgliZWVuIHdyaXR0ZW4sIGJ1dCBoYXNuJ3QgbWFkZSBpdCBvdXQgdGhlIHBvcnQgeWV0KQorICoJSWYgc3VjY2Vzc2Z1bCwgd2UgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgbGVmdCB0byBiZSB3cml0dGVuIGluIHRoZSAKKyAqCXN5c3RlbSwgCisgKglPdGhlcndpc2Ugd2UgcmV0dXJuIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBlZGdlX2NoYXJzX2luX2J1ZmZlciAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludCBudW1fY2hhcnM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKGVkZ2VfcG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoZWRnZV9wb3J0LT5jbG9zZVBlbmRpbmcgPT0gVFJVRSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIWVkZ2VfcG9ydC0+b3BlbikgeworCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCW51bV9jaGFycyA9IGVkZ2VfcG9ydC0+bWF4VHhDcmVkaXRzIC0gZWRnZV9wb3J0LT50eENyZWRpdHMgKyBlZGdlX3BvcnQtPnR4Zmlmby5jb3VudDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKwlpZiAobnVtX2NoYXJzKSB7CisJCWRiZygiJXMocG9ydCAlZCkgLSByZXR1cm5zICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIG51bV9jaGFycyk7CisJfQorCisJcmV0dXJuIG51bV9jaGFyczsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNlcmlhbFRocm90dGxlCisgKgl0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdHR5IGRyaXZlciB3aGVuIGl0IHdhbnRzIHRvIHN0b3AgdGhlIGRhdGEKKyAqCWJlaW5nIHJlYWQgZnJvbSB0aGUgcG9ydC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGVkZ2VfdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCWludCBzdGF0dXM7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChlZGdlX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKCFlZGdlX3BvcnQtPm9wZW4pIHsKKwkJZGJnKCIlcyAtIHBvcnQgbm90IG9wZW5lZCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwl0dHkgPSBwb3J0LT50dHk7CisJaWYgKCF0dHkpIHsKKwkJZGJnICgiJXMgLSBubyB0dHkgYXZhaWxhYmxlIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgWE9OL1hPRkYsIHNlbmQgdGhlIHN0b3AgY2hhcmFjdGVyICovCisJaWYgKElfSVhPRkYodHR5KSkgeworCQl1bnNpZ25lZCBjaGFyIHN0b3BfY2hhciA9IFNUT1BfQ0hBUih0dHkpOworCQlzdGF0dXMgPSBlZGdlX3dyaXRlIChwb3J0LCAmc3RvcF9jaGFyLCAxKTsKKwkJaWYgKHN0YXR1cyA8PSAwKSB7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFJUUy9DVFMsIHRvZ2dsZSB0aGF0IGxpbmUgKi8KKwlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgeworCQllZGdlX3BvcnQtPnNoYWRvd01DUiAmPSB+TUNSX1JUUzsKKwkJc3RhdHVzID0gc2VuZF9jbWRfd3JpdGVfdWFydF9yZWdpc3RlcihlZGdlX3BvcnQsIE1DUiwgZWRnZV9wb3J0LT5zaGFkb3dNQ1IpOworCQlpZiAoc3RhdHVzICE9IDApIHsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCXJldHVybjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGVkZ2VfdW50aHJvdHRsZQorICoJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHR0eSBkcml2ZXIgd2hlbiBpdCB3YW50cyB0byByZXN1bWUgdGhlIGRhdGEKKyAqCWJlaW5nIHJlYWQgZnJvbSB0aGUgcG9ydCAoY2FsbGVkIGFmdGVyIFNlcmlhbFRocm90dGxlIGlzIGNhbGxlZCkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGVkZ2VfdW50aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJaW50IHN0YXR1czsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKGVkZ2VfcG9ydCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAoIWVkZ2VfcG9ydC0+b3BlbikgeworCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCXR0eSA9IHBvcnQtPnR0eTsKKwlpZiAoIXR0eSkgeworCQlkYmcgKCIlcyAtIG5vIHR0eSBhdmFpbGFibGUiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBYT04vWE9GRiwgc2VuZCB0aGUgc3RhcnQgY2hhcmFjdGVyICovCisJaWYgKElfSVhPRkYodHR5KSkgeworCQl1bnNpZ25lZCBjaGFyIHN0YXJ0X2NoYXIgPSBTVEFSVF9DSEFSKHR0eSk7CisJCXN0YXR1cyA9IGVkZ2Vfd3JpdGUgKHBvcnQsICZzdGFydF9jaGFyLCAxKTsKKwkJaWYgKHN0YXR1cyA8PSAwKSB7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFJUUy9DVFMsIHRvZ2dsZSB0aGF0IGxpbmUgKi8KKwlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgeworCQllZGdlX3BvcnQtPnNoYWRvd01DUiB8PSBNQ1JfUlRTOworCQlzdGF0dXMgPSBzZW5kX2NtZF93cml0ZV91YXJ0X3JlZ2lzdGVyKGVkZ2VfcG9ydCwgTUNSLCBlZGdlX3BvcnQtPnNoYWRvd01DUik7CisJCWlmIChzdGF0dXMgIT0gMCkgeworCQkJcmV0dXJuOworCQl9CisJfQorCisJcmV0dXJuOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU2VyaWFsU2V0VGVybWlvcworICoJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHR0eSBkcml2ZXIgd2hlbiBpdCB3YW50cyB0byBjaGFuZ2UgdGhlIHRlcm1pb3Mgc3RydWN0dXJlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBlZGdlX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OworCXVuc2lnbmVkIGludCBjZmxhZzsKKworCWlmICghcG9ydC0+dHR5IHx8ICFwb3J0LT50dHktPnRlcm1pb3MpIHsKKwkJZGJnICgiJXMgLSBubyB0dHkgb3IgdGVybWlvcyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwljZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwkvKiBjaGVjayB0aGF0IHRoZXkgcmVhbGx5IHdhbnQgdXMgdG8gY2hhbmdlIHNvbWV0aGluZyAqLworCWlmIChvbGRfdGVybWlvcykgeworCQlpZiAoY2ZsYWcgPT0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWcgJiYKKwkJICAgIHR0eS0+dGVybWlvcy0+Y19pZmxhZyA9PSBvbGRfdGVybWlvcy0+Y19pZmxhZykgeworCQkJZGJnKCIlcyAtIG5vdGhpbmcgdG8gY2hhbmdlIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWRiZygiJXMgLSBjbGZhZyAlMDh4IGlmbGFnICUwOHgiLCBfX0ZVTkNUSU9OX18sIAorCSAgICB0dHktPnRlcm1pb3MtPmNfY2ZsYWcsIHR0eS0+dGVybWlvcy0+Y19pZmxhZyk7CisJaWYgKG9sZF90ZXJtaW9zKSB7CisJCWRiZygiJXMgLSBvbGQgY2xmYWcgJTA4eCBvbGQgaWZsYWcgJTA4eCIsIF9fRlVOQ1RJT05fXywKKwkJICAgIG9sZF90ZXJtaW9zLT5jX2NmbGFnLCBvbGRfdGVybWlvcy0+Y19pZmxhZyk7CisJfQorCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoZWRnZV9wb3J0ID09IE5VTEwpCisJCXJldHVybjsKKworCWlmICghZWRnZV9wb3J0LT5vcGVuKSB7CisJCWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJLyogY2hhbmdlIHRoZSBwb3J0IHNldHRpbmdzIHRvIHRoZSBuZXcgb25lcyBzcGVjaWZpZWQgKi8KKwljaGFuZ2VfcG9ydF9zZXR0aW5ncyAoZWRnZV9wb3J0LCBvbGRfdGVybWlvcyk7CisKKwlyZXR1cm47Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBnZXRfbHNyX2luZm8gLSBnZXQgbGluZSBzdGF0dXMgcmVnaXN0ZXIgaW5mbworICoKKyAqIFB1cnBvc2U6IExldCB1c2VyIGNhbGwgaW9jdGwoKSB0byBnZXQgaW5mbyB3aGVuIHRoZSBVQVJUIHBoeXNpY2FsbHkKKyAqIAkgICAgaXMgZW1wdGllZC4gIE9uIGJ1cyB0eXBlcyBsaWtlIFJTNDg1LCB0aGUgdHJhbnNtaXR0ZXIgbXVzdAorICogCSAgICByZWxlYXNlIHRoZSBidXMgYWZ0ZXIgdHJhbnNtaXR0aW5nLiBUaGlzIG11c3QgYmUgZG9uZSB3aGVuCisgKiAJICAgIHRoZSB0cmFuc21pdCBzaGlmdCByZWdpc3RlciBpcyBlbXB0eSwgbm90IGJlIGRvbmUgd2hlbiB0aGUKKyAqIAkgICAgdHJhbnNtaXQgaG9sZGluZyByZWdpc3RlciBpcyBlbXB0eS4gIFRoaXMgZnVuY3Rpb25hbGl0eQorICogCSAgICBhbGxvd3MgYW4gUlM0ODUgZHJpdmVyIHRvIGJlIHdyaXR0ZW4gaW4gdXNlciBzcGFjZS4gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGdldF9sc3JfaW5mbyhzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCB1bnNpZ25lZCBpbnQgX191c2VyICp2YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCWlmIChlZGdlX3BvcnQtPm1heFR4Q3JlZGl0cyA9PSBlZGdlX3BvcnQtPnR4Q3JlZGl0cyAmJgorCSAgICBlZGdlX3BvcnQtPnR4Zmlmby5jb3VudCA9PSAwKSB7CisJCWRiZygiJXMgLS0gRW1wdHkiLCBfX0ZVTkNUSU9OX18pOworCQlyZXN1bHQgPSBUSU9DU0VSX1RFTVQ7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCisJaWYgKGNvcHlfdG9fdXNlcih2YWx1ZSwgJnJlc3VsdCwgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfbnVtYmVyX2J5dGVzX2F2YWlsKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIHVuc2lnbmVkIGludCBfX3VzZXIgKnZhbHVlKQoreworCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBlZGdlX3BvcnQtPnBvcnQtPnR0eTsKKworCWlmICghdHR5KQorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCisJcmVzdWx0ID0gdHR5LT5yZWFkX2NudDsKKworCWRiZygiJXMoJWQpID0gJWQiLCBfX0ZVTkNUSU9OX18sICBlZGdlX3BvcnQtPnBvcnQtPm51bWJlciwgcmVzdWx0KTsKKwlpZiAoY29weV90b191c2VyKHZhbHVlLCAmcmVzdWx0LCBzaXplb2YoaW50KSkpCisJCXJldHVybiAtRUZBVUxUOworCS8vcmV0dXJuIDA7CisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworc3RhdGljIGludCBlZGdlX3Rpb2Ntc2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgaW50IG1jcjsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJbWNyID0gZWRnZV9wb3J0LT5zaGFkb3dNQ1I7CisJaWYgKHNldCAmIFRJT0NNX1JUUykKKwkJbWNyIHw9IE1DUl9SVFM7CisJaWYgKHNldCAmIFRJT0NNX0RUUikKKwkJbWNyIHw9IE1DUl9EVFI7CisJaWYgKHNldCAmIFRJT0NNX0xPT1ApCisJCW1jciB8PSBNQ1JfTE9PUEJBQ0s7CisKKwlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpCisJCW1jciAmPSB+TUNSX1JUUzsKKwlpZiAoY2xlYXIgJiBUSU9DTV9EVFIpCisJCW1jciAmPSB+TUNSX0RUUjsKKwlpZiAoY2xlYXIgJiBUSU9DTV9MT09QKQorCQltY3IgJj0gfk1DUl9MT09QQkFDSzsKKworCWVkZ2VfcG9ydC0+c2hhZG93TUNSID0gbWNyOworCisJc2VuZF9jbWRfd3JpdGVfdWFydF9yZWdpc3RlcihlZGdlX3BvcnQsIE1DUiwgZWRnZV9wb3J0LT5zaGFkb3dNQ1IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZWRnZV90aW9jbWdldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOworCXVuc2lnbmVkIGludCBtc3I7CisJdW5zaWduZWQgaW50IG1jcjsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJbXNyID0gZWRnZV9wb3J0LT5zaGFkb3dNU1I7CisJbWNyID0gZWRnZV9wb3J0LT5zaGFkb3dNQ1I7CisJcmVzdWx0ID0gKChtY3IgJiBNQ1JfRFRSKQk/IFRJT0NNX0RUUjogMCkJICAvKiAweDAwMiAqLworCQkgIHwgKChtY3IgJiBNQ1JfUlRTKQk/IFRJT0NNX1JUUzogMCkgICAvKiAweDAwNCAqLworCQkgIHwgKChtc3IgJiBFREdFUE9SVF9NU1JfQ1RTKQk/IFRJT0NNX0NUUzogMCkgICAvKiAweDAyMCAqLworCQkgIHwgKChtc3IgJiBFREdFUE9SVF9NU1JfQ0QpCT8gVElPQ01fQ0FSOiAwKSAgIC8qIDB4MDQwICovCisJCSAgfCAoKG1zciAmIEVER0VQT1JUX01TUl9SSSkJPyBUSU9DTV9SSTogIDApICAgLyogMHgwODAgKi8KKwkJICB8ICgobXNyICYgRURHRVBPUlRfTVNSX0RTUikJPyBUSU9DTV9EU1I6IDApOyAgLyogMHgxMDAgKi8KKworCisJZGJnKCIlcyAtLSAleCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3NlcmlhbF9pbmZvKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqcmV0aW5mbykKK3sKKwlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCB0bXA7CisKKwlpZiAoIXJldGluZm8pCisJCXJldHVybiAtRUZBVUxUOworCisJbWVtc2V0KCZ0bXAsIDAsIHNpemVvZih0bXApKTsKKworCXRtcC50eXBlCQk9IFBPUlRfMTY1NTBBOworCXRtcC5saW5lCQk9IGVkZ2VfcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vcjsKKwl0bXAucG9ydAkJPSBlZGdlX3BvcnQtPnBvcnQtPm51bWJlcjsKKwl0bXAuaXJxCQkJPSAwOworCXRtcC5mbGFncwkJPSBBU1lOQ19TS0lQX1RFU1QgfCBBU1lOQ19BVVRPX0lSUTsKKwl0bXAueG1pdF9maWZvX3NpemUJPSBlZGdlX3BvcnQtPm1heFR4Q3JlZGl0czsKKwl0bXAuYmF1ZF9iYXNlCQk9IDk2MDA7CisJdG1wLmNsb3NlX2RlbGF5CQk9IDUqSFo7CisJdG1wLmNsb3Npbmdfd2FpdAk9IDMwKkhaOworLy8JdG1wLmN1c3RvbV9kaXZpc29yCT0gc3RhdGUtPmN1c3RvbV9kaXZpc29yOworLy8JdG1wLmh1YjYJCT0gc3RhdGUtPmh1YjY7CisvLwl0bXAuaW9fdHlwZQkJPSBzdGF0ZS0+aW9fdHlwZTsKKworCWlmIChjb3B5X3RvX3VzZXIocmV0aW5mbywgJnRtcCwgc2l6ZW9mKCpyZXRpbmZvKSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTZXJpYWxJb2N0bAorICoJdGhpcyBmdW5jdGlvbiBoYW5kbGVzIGFueSBpb2N0bCBjYWxscyB0byB0aGUgZHJpdmVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGVkZ2VfaW9jdGwgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlERUZJTkVfV0FJVCh3YWl0KTsKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCBhc3luY19pY291bnQgY25vdzsKKwlzdHJ1Y3QgYXN5bmNfaWNvdW50IGNwcmV2OworCXN0cnVjdCBzZXJpYWxfaWNvdW50ZXJfc3RydWN0IGljb3VudDsKKworCWRiZygiJXMgLSBwb3J0ICVkLCBjbWQgPSAweCV4IiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIGNtZCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCQkvLyByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZQorCQljYXNlIFRJT0NJTlE6CisJCQlkYmcoIiVzICglZCkgVElPQ0lOUSIsIF9fRlVOQ1RJT05fXywgIHBvcnQtPm51bWJlcik7CisJCQlyZXR1cm4gZ2V0X251bWJlcl9ieXRlc19hdmFpbChlZGdlX3BvcnQsICh1bnNpZ25lZCBpbnQgX191c2VyICopIGFyZyk7CisJCQlicmVhazsKKworCQljYXNlIFRJT0NTRVJHRVRMU1I6CisJCQlkYmcoIiVzICglZCkgVElPQ1NFUkdFVExTUiIsIF9fRlVOQ1RJT05fXywgIHBvcnQtPm51bWJlcik7CisJCQlyZXR1cm4gZ2V0X2xzcl9pbmZvKGVkZ2VfcG9ydCwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikgYXJnKTsKKwkJCXJldHVybiAwOworCisJCWNhc2UgVElPQ0dTRVJJQUw6CisJCQlkYmcoIiVzICglZCkgVElPQ0dTRVJJQUwiLCBfX0ZVTkNUSU9OX18sICBwb3J0LT5udW1iZXIpOworCQkJcmV0dXJuIGdldF9zZXJpYWxfaW5mbyhlZGdlX3BvcnQsIChzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKikgYXJnKTsKKworCQljYXNlIFRJT0NTU0VSSUFMOgorCQkJZGJnKCIlcyAoJWQpIFRJT0NTU0VSSUFMIiwgX19GVU5DVElPTl9fLCAgcG9ydC0+bnVtYmVyKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVElPQ01JV0FJVDoKKwkJCWRiZygiJXMgKCVkKSBUSU9DTUlXQUlUIiwgX19GVU5DVElPTl9fLCAgcG9ydC0+bnVtYmVyKTsKKwkJCWNwcmV2ID0gZWRnZV9wb3J0LT5pY291bnQ7CisJCQl3aGlsZSAoMSkgeworCQkJCXByZXBhcmVfdG9fd2FpdCgmZWRnZV9wb3J0LT5kZWx0YV9tc3Jfd2FpdCwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQkJc2NoZWR1bGUoKTsKKwkJCQlmaW5pc2hfd2FpdCgmZWRnZV9wb3J0LT5kZWx0YV9tc3Jfd2FpdCwgJndhaXQpOworCQkJCS8qIHNlZSBpZiBhIHNpZ25hbCBkaWQgaXQgKi8KKwkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCQkJY25vdyA9IGVkZ2VfcG9ydC0+aWNvdW50OworCQkJCWlmIChjbm93LnJuZyA9PSBjcHJldi5ybmcgJiYgY25vdy5kc3IgPT0gY3ByZXYuZHNyICYmCisJCQkJICAgIGNub3cuZGNkID09IGNwcmV2LmRjZCAmJiBjbm93LmN0cyA9PSBjcHJldi5jdHMpCisJCQkJCXJldHVybiAtRUlPOyAvKiBubyBjaGFuZ2UgPT4gZXJyb3IgKi8KKwkJCQlpZiAoKChhcmcgJiBUSU9DTV9STkcpICYmIChjbm93LnJuZyAhPSBjcHJldi5ybmcpKSB8fAorCQkJCSAgICAoKGFyZyAmIFRJT0NNX0RTUikgJiYgKGNub3cuZHNyICE9IGNwcmV2LmRzcikpIHx8CisJCQkJICAgICgoYXJnICYgVElPQ01fQ0QpICAmJiAoY25vdy5kY2QgIT0gY3ByZXYuZGNkKSkgfHwKKwkJCQkgICAgKChhcmcgJiBUSU9DTV9DVFMpICYmIChjbm93LmN0cyAhPSBjcHJldi5jdHMpKSApIHsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJCWNwcmV2ID0gY25vdzsKKwkJCX0KKwkJCS8qIE5PVFJFQUNIRUQgKi8KKwkJCWJyZWFrOworCisJCWNhc2UgVElPQ0dJQ09VTlQ6CisJCQljbm93ID0gZWRnZV9wb3J0LT5pY291bnQ7CisJCQltZW1zZXQoJmljb3VudCwgMCwgc2l6ZW9mKGljb3VudCkpOworCQkJaWNvdW50LmN0cyA9IGNub3cuY3RzOworCQkJaWNvdW50LmRzciA9IGNub3cuZHNyOworCQkJaWNvdW50LnJuZyA9IGNub3cucm5nOworCQkJaWNvdW50LmRjZCA9IGNub3cuZGNkOworCQkJaWNvdW50LnJ4ID0gY25vdy5yeDsKKwkJCWljb3VudC50eCA9IGNub3cudHg7CisJCQlpY291bnQuZnJhbWUgPSBjbm93LmZyYW1lOworCQkJaWNvdW50Lm92ZXJydW4gPSBjbm93Lm92ZXJydW47CisJCQlpY291bnQucGFyaXR5ID0gY25vdy5wYXJpdHk7CisJCQlpY291bnQuYnJrID0gY25vdy5icms7CisJCQlpY291bnQuYnVmX292ZXJydW4gPSBjbm93LmJ1Zl9vdmVycnVuOworCisJCQlkYmcoIiVzICglZCkgVElPQ0dJQ09VTlQgUlg9JWQsIFRYPSVkIiwgX19GVU5DVElPTl9fLCAgcG9ydC0+bnVtYmVyLCBpY291bnQucngsIGljb3VudC50eCApOworCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZpY291bnQsIHNpemVvZihpY291bnQpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTZXJpYWxCcmVhaworICoJdGhpcyBmdW5jdGlvbiBzZW5kcyBhIGJyZWFrIHRvIHRoZSBwb3J0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBlZGdlX2JyZWFrIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgc3RhdHVzOworCisJLyogZmx1c2ggYW5kIGNoYXNlICovCisJZWRnZV9wb3J0LT5jaGFzZVJlc3BvbnNlUGVuZGluZyA9IFRSVUU7CisKKwlkYmcoIiVzIC0gU2VuZGluZyBJT1NQX0NNRF9DSEFTRV9QT1JUIiwgX19GVU5DVElPTl9fKTsKKwlzdGF0dXMgPSBzZW5kX2lvc3BfZXh0X2NtZCAoZWRnZV9wb3J0LCBJT1NQX0NNRF9DSEFTRV9QT1JULCAwKTsKKwlpZiAoc3RhdHVzID09IDApIHsKKwkJLy8gYmxvY2sgdW50aWwgY2hhc2UgZmluaXNoZWQKKwkJYmxvY2tfdW50aWxfY2hhc2VfcmVzcG9uc2UoZWRnZV9wb3J0KTsKKwl9IGVsc2UgeworCQllZGdlX3BvcnQtPmNoYXNlUmVzcG9uc2VQZW5kaW5nID0gRkFMU0U7CisJfQorCisJaWYgKGJyZWFrX3N0YXRlID09IC0xKSB7CisJCWRiZygiJXMgLSBTZW5kaW5nIElPU1BfQ01EX1NFVF9CUkVBSyIsIF9fRlVOQ1RJT05fXyk7CisJCXN0YXR1cyA9IHNlbmRfaW9zcF9leHRfY21kIChlZGdlX3BvcnQsIElPU1BfQ01EX1NFVF9CUkVBSywgMCk7CisJfSBlbHNlIHsKKwkJZGJnKCIlcyAtIFNlbmRpbmcgSU9TUF9DTURfQ0xFQVJfQlJFQUsiLCBfX0ZVTkNUSU9OX18pOworCQlzdGF0dXMgPSBzZW5kX2lvc3BfZXh0X2NtZCAoZWRnZV9wb3J0LCBJT1NQX0NNRF9DTEVBUl9CUkVBSywgMCk7CisJfQorCWlmIChzdGF0dXMpIHsKKwkJZGJnKCIlcyAtIGVycm9yIHNlbmRpbmcgYnJlYWsgc2V0L2NsZWFyIGNvbW1hbmQuIiwgX19GVU5DVElPTl9fKTsKKwl9CisKKwlyZXR1cm47Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBwcm9jZXNzX3JjdmRfZGF0YQorICoJdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBkYXRhIHJlY2VpdmVkIG9uIHRoZSBidWxrIGluIHBpcGUuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBwcm9jZXNzX3JjdmRfZGF0YSAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwsIHVuc2lnbmVkIGNoYXIgKiBidWZmZXIsIF9fdTE2IGJ1ZmZlckxlbmd0aCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlfX3UxNiBsYXN0QnVmZmVyTGVuZ3RoOworCV9fdTE2IHJ4TGVuOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlsYXN0QnVmZmVyTGVuZ3RoID0gYnVmZmVyTGVuZ3RoICsgMTsKKworCXdoaWxlIChidWZmZXJMZW5ndGggPiAwKSB7CisJCS8qIGZhaWxzYWZlIGluY2FzZSB3ZSBnZXQgYSBtZXNzYWdlIHRoYXQgd2UgZG9uJ3QgdW5kZXJzdGFuZCAqLworCQlpZiAobGFzdEJ1ZmZlckxlbmd0aCA9PSBidWZmZXJMZW5ndGgpIHsKKwkJCWRiZygiJXMgLSBzdHVjayBpbiBsb29wLCBleGl0aW5nIGl0LiIsIF9fRlVOQ1RJT05fXyk7CisJCQlicmVhazsKKwkJfQorCQlsYXN0QnVmZmVyTGVuZ3RoID0gYnVmZmVyTGVuZ3RoOworCisJCXN3aXRjaCAoZWRnZV9zZXJpYWwtPnJ4U3RhdGUpIHsKKwkJCWNhc2UgRVhQRUNUX0hEUjE6CisJCQkJZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMSA9ICpidWZmZXI7CisJCQkJKytidWZmZXI7CisJCQkJLS1idWZmZXJMZW5ndGg7CisKKwkJCQlpZiAoYnVmZmVyTGVuZ3RoID09IDApIHsKKwkJCQkJZWRnZV9zZXJpYWwtPnJ4U3RhdGUgPSBFWFBFQ1RfSERSMjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8qIG90aGVyd2lzZSwgZHJvcCBvbiB0aHJvdWdoICovCisKKwkJCWNhc2UgRVhQRUNUX0hEUjI6CisJCQkJZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMiA9ICpidWZmZXI7CisJCQkJKytidWZmZXI7CisJCQkJLS1idWZmZXJMZW5ndGg7CisKKwkJCQlkYmcoIiVzIC0gSGRyMT0lMDJYIEhkcjI9JTAyWCIsIF9fRlVOQ1RJT05fXywgZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMSwgZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMik7CisKKwkJCQkvLyBQcm9jZXNzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoaXMgaGVhZGVyIGlzCisJCQkJLy8gZGF0YSBvciBzdGF0dXMKKworCQkJCWlmIChJU19DTURfU1RBVF9IRFIoZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMSkpIHsKKwkJCQkJLy8gRGVjb2RlIHRoaXMgc3RhdHVzIGhlYWRlciBhbmQgZ290byBFWFBFQ1RfSERSMSAoaWYgd2UKKwkJCQkJLy8gY2FuIHByb2Nlc3MgdGhlIHN0YXR1cyB3aXRoIG9ubHkgMiBieXRlcyksIG9yIGdvdG8KKwkJCQkJLy8gRVhQRUNUX0hEUjMgdG8gZ2V0IHRoZSB0aGlyZCBieXRlLgorCisJCQkJCWVkZ2Vfc2VyaWFsLT5yeFBvcnQgICAgICAgPSBJT1NQX0dFVF9IRFJfUE9SVChlZGdlX3NlcmlhbC0+cnhIZWFkZXIxKTsKKwkJCQkJZWRnZV9zZXJpYWwtPnJ4U3RhdHVzQ29kZSA9IElPU1BfR0VUX1NUQVRVU19DT0RFKGVkZ2Vfc2VyaWFsLT5yeEhlYWRlcjEpOworCisJCQkJCWlmICghSU9TUF9TVEFUVVNfSVNfMkJZVEUoZWRnZV9zZXJpYWwtPnJ4U3RhdHVzQ29kZSkpIHsKKwkJCQkJCS8vIFRoaXMgc3RhdHVzIG5lZWRzIGFkZGl0aW9uYWwgYnl0ZXMuIFNhdmUgd2hhdCB3ZSBoYXZlCisJCQkJCQkvLyBhbmQgdGhlbiB3YWl0IGZvciBtb3JlIGRhdGEuCisJCQkJCQllZGdlX3NlcmlhbC0+cnhTdGF0dXNQYXJhbSA9IGVkZ2Vfc2VyaWFsLT5yeEhlYWRlcjI7CisKKwkJCQkJCWVkZ2Vfc2VyaWFsLT5yeFN0YXRlID0gRVhQRUNUX0hEUjM7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCisJCQkJCS8vIFdlIGhhdmUgYWxsIHRoZSBoZWFkZXIgYnl0ZXMsIHByb2Nlc3MgdGhlIHN0YXR1cyBub3cKKwkJCQkJcHJvY2Vzc19yY3ZkX3N0YXR1cyAoZWRnZV9zZXJpYWwsIGVkZ2Vfc2VyaWFsLT5yeEhlYWRlcjIsIDApOworCQkJCQllZGdlX3NlcmlhbC0+cnhTdGF0ZSA9IEVYUEVDVF9IRFIxOworCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgeworCQkJCQllZGdlX3NlcmlhbC0+cnhQb3J0ID0gSU9TUF9HRVRfSERSX1BPUlQoZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMSk7CisJCQkJCWVkZ2Vfc2VyaWFsLT5yeEJ5dGVzUmVtYWluaW5nID0gSU9TUF9HRVRfSERSX0RBVEFfTEVOKGVkZ2Vfc2VyaWFsLT5yeEhlYWRlcjEsIGVkZ2Vfc2VyaWFsLT5yeEhlYWRlcjIpOworCisJCQkJCWRiZygiJXMgLSBEYXRhIGZvciBQb3J0ICV1IExlbiAldSIsIF9fRlVOQ1RJT05fXywgZWRnZV9zZXJpYWwtPnJ4UG9ydCwgZWRnZV9zZXJpYWwtPnJ4Qnl0ZXNSZW1haW5pbmcpOworCisJCQkJCS8vQVNTRVJUKCBEZXZFeHQtPlJ4UG9ydCA8IERldkV4dC0+TnVtUG9ydHMgKTsKKwkJCQkJLy9BU1NFUlQoIERldkV4dC0+UnhCeXRlc1JlbWFpbmluZyA8IElPU1BfTUFYX0RBVEFfTEVOR1RIICk7CisKKwkJCQkJaWYgKGJ1ZmZlckxlbmd0aCA9PSAwICkgeworCQkJCQkJZWRnZV9zZXJpYWwtPnJ4U3RhdGUgPSBFWFBFQ1RfREFUQTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCS8vIEVsc2UsIGRyb3AgdGhyb3VnaAorCQkJCX0KKworCQkJY2FzZSBFWFBFQ1RfREFUQToJLy8gRXhwZWN0IGRhdGEKKworCQkJCWlmIChidWZmZXJMZW5ndGggPCBlZGdlX3NlcmlhbC0+cnhCeXRlc1JlbWFpbmluZykgeworCQkJCQlyeExlbiA9IGJ1ZmZlckxlbmd0aDsKKwkJCQkJZWRnZV9zZXJpYWwtPnJ4U3RhdGUgPSBFWFBFQ1RfREFUQTsJLy8gRXhwZWN0IGRhdGEgdG8gc3RhcnQgbmV4dCBidWZmZXIKKwkJCQl9IGVsc2UgeworCQkJCQkvLyBCdWZMZW4gPj0gUnhCeXRlc1JlbWFpbmluZworCQkJCQlyeExlbiA9IGVkZ2Vfc2VyaWFsLT5yeEJ5dGVzUmVtYWluaW5nOworCQkJCQllZGdlX3NlcmlhbC0+cnhTdGF0ZSA9IEVYUEVDVF9IRFIxOwkvLyBTdGFydCBhbm90aGVyIGhlYWRlciBuZXh0IHRpbWUKKwkJCQl9CisKKwkJCQlidWZmZXJMZW5ndGggLT0gcnhMZW47CisJCQkJZWRnZV9zZXJpYWwtPnJ4Qnl0ZXNSZW1haW5pbmcgLT0gcnhMZW47CisKKwkJCQkvKiBzcGl0IHRoaXMgZGF0YSBiYWNrIGludG8gdGhlIHR0eSBkcml2ZXIgaWYgdGhpcyBwb3J0IGlzIG9wZW4gKi8KKwkJCQlpZiAocnhMZW4pIHsKKwkJCQkJcG9ydCA9IGVkZ2Vfc2VyaWFsLT5zZXJpYWwtPnBvcnRbZWRnZV9zZXJpYWwtPnJ4UG9ydF07CisJCQkJCWVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkJCQkJaWYgKGVkZ2VfcG9ydC0+b3BlbikgeworCQkJCQkJdHR5ID0gZWRnZV9wb3J0LT5wb3J0LT50dHk7CisJCQkJCQlpZiAodHR5KSB7CisJCQkJCQkJZGJnKCIlcyAtIFNlbmRpbmcgJWQgYnl0ZXMgdG8gVFRZIGZvciBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCByeExlbiwgZWRnZV9zZXJpYWwtPnJ4UG9ydCk7CisJCQkJCQkJZWRnZV90dHlfcmVjdigmZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsIHR0eSwgYnVmZmVyLCByeExlbik7CisJCQkJCQl9CisJCQkJCQllZGdlX3BvcnQtPmljb3VudC5yeCArPSByeExlbjsKKwkJCQkJfQorCQkJCQlidWZmZXIgKz0gcnhMZW47CisJCQkJfQorCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgRVhQRUNUX0hEUjM6CQkJLy8gRXhwZWN0IDNyZCBieXRlIG9mIHN0YXR1cyBoZWFkZXIKKwkJCQllZGdlX3NlcmlhbC0+cnhIZWFkZXIzID0gKmJ1ZmZlcjsKKwkJCQkrK2J1ZmZlcjsKKwkJCQktLWJ1ZmZlckxlbmd0aDsKKworCQkJCS8vIFdlIGhhdmUgYWxsIHRoZSBoZWFkZXIgYnl0ZXMsIHByb2Nlc3MgdGhlIHN0YXR1cyBub3cKKwkJCQlwcm9jZXNzX3JjdmRfc3RhdHVzIChlZGdlX3NlcmlhbCwgZWRnZV9zZXJpYWwtPnJ4U3RhdHVzUGFyYW0sIGVkZ2Vfc2VyaWFsLT5yeEhlYWRlcjMpOworCQkJCWVkZ2Vfc2VyaWFsLT5yeFN0YXRlID0gRVhQRUNUX0hEUjE7CisJCQkJYnJlYWs7CisKKwkJfQorCX0KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHByb2Nlc3NfcmN2ZF9zdGF0dXMKKyAqCXRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgYW55IHN0YXR1cyBtZXNzYWdlcyByZWNlaXZlZCBvbiB0aGUgYnVsayBpbiBwaXBlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgcHJvY2Vzc19yY3ZkX3N0YXR1cyAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwsIF9fdTggYnl0ZTIsIF9fdTggYnl0ZTMpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0OworCV9fdTggY29kZSA9IGVkZ2Vfc2VyaWFsLT5yeFN0YXR1c0NvZGU7CisKKwkvKiBzd2l0Y2ggdGhlIHBvcnQgcG9pbnRlciB0byB0aGUgb25lIGJlaW5nIGN1cnJlbnRseSB0YWxrZWQgYWJvdXQgKi8KKwlwb3J0ID0gZWRnZV9zZXJpYWwtPnNlcmlhbC0+cG9ydFtlZGdlX3NlcmlhbC0+cnhQb3J0XTsKKwllZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaWYgKGVkZ2VfcG9ydCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBlZGdlX3BvcnQgPT0gTlVMTCBmb3IgcG9ydCAlZFxuIiwgX19GVU5DVElPTl9fLCBlZGdlX3NlcmlhbC0+cnhQb3J0KTsKKwkJcmV0dXJuOworCX0KKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBlZGdlX3NlcmlhbC0+cnhQb3J0KTsKKworCWlmIChjb2RlID09IElPU1BfRVhUX1NUQVRVUykgeworCQlzd2l0Y2ggKGJ5dGUyKSB7CisJCQljYXNlIElPU1BfRVhUX1NUQVRVU19DSEFTRV9SU1A6CisJCQkJLy8gd2Ugd2FudCB0byBkbyBFWFQgc3RhdHVzIHJlZ2FyZGxlc3Mgb2YgcG9ydCBvcGVuL2Nsb3NlZCAKKwkJCQlkYmcoIiVzIC0gUG9ydCAldSBFWFQgQ0hBU0VfUlNQIERhdGEgPSAlMDJ4IiwgX19GVU5DVElPTl9fLCBlZGdlX3NlcmlhbC0+cnhQb3J0LCBieXRlMyApOworCQkJCS8vIEN1cnJlbnRseSwgdGhlIG9ubHkgRVhUX1NUQVRVUyBpcyBDaGFzZSwgc28gcHJvY2VzcyBoZXJlIGluc3RlYWQgb2Ygb25lIG1vcmUgY2FsbAorCQkJCS8vIHRvIG9uZSBtb3JlIHN1YnJvdXRpbmUuIElmL3doZW4gbW9yZSBFWFRfU1RBVFVTLCB0aGVyZSdsbCBiZSBtb3JlIHdvcmsgdG8gZG8uCisJCQkJLy8gQWxzbywgd2UgY3VycmVudGx5IGNsZWFyIGZsYWcgYW5kIGNsb3NlIHRoZSBwb3J0IHJlZ2FyZGxlc3Mgb2YgY29udGVudCBvZiBhYm92ZSdzIEJ5dGUzLgorCQkJCS8vIFdlIGNvdWxkIGNob29zZSB0byBkbyBzb21ldGhpbmcgZWxzZSB3aGVuIEJ5dGUzIHNheXMgVGltZW91dCBvbiBDaGFzZSBmcm9tIEVkZ2Vwb3J0LAorCQkJCS8vIGxpa2Ugd2FpdCBsb25nZXIgaW4gYmxvY2tfdW50aWxfY2hhc2VfcmVzcG9uc2UsIGJ1dCBmb3Igbm93IHdlIGRvbid0LiAKKwkJCQllZGdlX3BvcnQtPmNoYXNlUmVzcG9uc2VQZW5kaW5nID0gRkFMU0U7CisJCQkJd2FrZV91cCAoJmVkZ2VfcG9ydC0+d2FpdF9jaGFzZSk7CisJCQkJcmV0dXJuOworCisJCQljYXNlIElPU1BfRVhUX1NUQVRVU19SWF9DSEVDS19SU1A6CisJCQkJZGJnKCIlcyA9PT09PT09PT09IFBvcnQgJXUgQ0hFQ0tfUlNQIFNlcXVlbmNlID0gJTAyeCA9PT09PT09PT09PT09XG4iLCBfX0ZVTkNUSU9OX18sIGVkZ2Vfc2VyaWFsLT5yeFBvcnQsIGJ5dGUzICk7CisJCQkJLy9Qb3J0LT5SeENoZWNrUnNwID0gVFJVRTsKKwkJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpZiAoY29kZSA9PSBJT1NQX1NUQVRVU19PUEVOX1JTUCkgeworCQllZGdlX3BvcnQtPnR4Q3JlZGl0cyA9IEdFVF9UWF9CVUZGRVJfU0laRShieXRlMyk7CisJCWVkZ2VfcG9ydC0+bWF4VHhDcmVkaXRzID0gZWRnZV9wb3J0LT50eENyZWRpdHM7CisJCWRiZygiJXMgLSBQb3J0ICV1IE9wZW4gUmVzcG9uc2UgSW5pdGFsIE1TUiA9ICUwMnggVHhCdWZmZXJTaXplID0gJWQiLCBfX0ZVTkNUSU9OX18sIGVkZ2Vfc2VyaWFsLT5yeFBvcnQsIGJ5dGUyLCBlZGdlX3BvcnQtPnR4Q3JlZGl0cyk7CisJCWhhbmRsZV9uZXdfbXNyIChlZGdlX3BvcnQsIGJ5dGUyKTsKKworCQkvKiBzZW5kIHRoZSBjdXJyZW50IGxpbmUgc2V0dGluZ3MgdG8gdGhlIHBvcnQgc28gd2UgYXJlIGluIHN5bmMgd2l0aCBhbnkgZnVydGhlciB0ZXJtaW9zIGNhbGxzICovCisJCWlmIChlZGdlX3BvcnQtPnBvcnQtPnR0eSkKKwkJCWNoYW5nZV9wb3J0X3NldHRpbmdzIChlZGdlX3BvcnQsIGVkZ2VfcG9ydC0+cG9ydC0+dHR5LT50ZXJtaW9zKTsKKworCQkvKiB3ZSBoYXZlIGNvbXBsZXRlZCB0aGUgb3BlbiAqLworCQllZGdlX3BvcnQtPm9wZW5QZW5kaW5nID0gRkFMU0U7CisJCWVkZ2VfcG9ydC0+b3BlbiA9IFRSVUU7CisJCXdha2VfdXAoJmVkZ2VfcG9ydC0+d2FpdF9vcGVuKTsKKwkJcmV0dXJuOworCX0KKworCS8vIElmIHBvcnQgaXMgY2xvc2VkLCBzaWxlbnRseSBkaXNjYXJkIGFsbCByY3ZkIHN0YXR1cy4gV2UgY2FuCisJLy8gaGF2ZSBjYXNlcyB3aGVyZSBidWZmZXJlZCBzdGF0dXMgaXMgcmVjZWl2ZWQgQUZURVIgdGhlIGNsb3NlCisJLy8gcG9ydCBjb21tYW5kIGlzIHNlbnQgdG8gdGhlIEVkZ2Vwb3J0LgorCWlmICgoIWVkZ2VfcG9ydC0+b3BlbiApIHx8IChlZGdlX3BvcnQtPmNsb3NlUGVuZGluZykpIHsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoY29kZSkgeworCQkvLyBOb3QgY3VycmVudGx5IHNlbnQgYnkgRWRnZXBvcnQKKwkJY2FzZSBJT1NQX1NUQVRVU19MU1I6CisJCQlkYmcoIiVzIC0gUG9ydCAldSBMU1IgU3RhdHVzID0gJTAyeCIsIF9fRlVOQ1RJT05fXywgZWRnZV9zZXJpYWwtPnJ4UG9ydCwgYnl0ZTIpOworCQkJaGFuZGxlX25ld19sc3IgKGVkZ2VfcG9ydCwgRkFMU0UsIGJ5dGUyLCAwKTsKKwkJCWJyZWFrOworCisJCWNhc2UgSU9TUF9TVEFUVVNfTFNSX0RBVEE6CisJCQlkYmcoIiVzIC0gUG9ydCAldSBMU1IgU3RhdHVzID0gJTAyeCwgRGF0YSA9ICUwMngiLCBfX0ZVTkNUSU9OX18sIGVkZ2Vfc2VyaWFsLT5yeFBvcnQsIGJ5dGUyLCBieXRlMyk7CisJCQkvLyBieXRlMiBpcyBMU1IgUmVnaXN0ZXIKKwkJCS8vIGJ5dGUzIGlzIGJyb2tlbiBkYXRhIGJ5dGUKKwkJCWhhbmRsZV9uZXdfbHNyIChlZGdlX3BvcnQsIFRSVUUsIGJ5dGUyLCBieXRlMyk7CisJCQlicmVhazsKKwkJCS8vCisJCQkvLwljYXNlIElPU1BfRVhUXzRfU1RBVFVTOgorCQkJLy8JCWRiZygiJXMgLSBQb3J0ICV1IExTUiBTdGF0dXMgPSAlMDJ4IERhdGEgPSAlMDJ4IiwgX19GVU5DVElPTl9fLCBlZGdlX3NlcmlhbC0+cnhQb3J0LCBieXRlMiwgYnl0ZTMpOworCQkJLy8JCWJyZWFrOworCQkJLy8KKwkJY2FzZSBJT1NQX1NUQVRVU19NU1I6CisJCQlkYmcoIiVzIC0gUG9ydCAldSBNU1IgU3RhdHVzID0gJTAyeCIsIF9fRlVOQ1RJT05fXywgZWRnZV9zZXJpYWwtPnJ4UG9ydCwgYnl0ZTIpOworCisJCQkvLyBQcm9jZXNzIHRoaXMgbmV3IG1vZGVtIHN0YXR1cyBhbmQgZ2VuZXJhdGUgYXBwcm9wcmlhdGUKKwkJCS8vIGV2ZW50cywgZXRjLCBiYXNlZCBvbiB0aGUgbmV3IHN0YXR1cy4gVGhpcyByb3V0aW5lCisJCQkvLyBhbHNvIHNhdmVzIHRoZSBNU1IgaW4gUG9ydC0+U2hhZG93TXNyLgorCQkJaGFuZGxlX25ld19tc3IoZWRnZV9wb3J0LCBieXRlMik7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZGJnKCIlcyAtIFVucmVjb2duaXplZCBJT1NQIHN0YXR1cyBjb2RlICV1XG4iLCBfX0ZVTkNUSU9OX18sIGNvZGUpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZWRnZV90dHlfcmVjdgorICoJdGhpcyBmdW5jdGlvbiBwYXNzZXMgZGF0YSBvbiB0byB0aGUgdHR5IGZsaXAgYnVmZmVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBlZGdlX3R0eV9yZWN2KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKwlpbnQgY250OworCisJZG8geworCQlpZiAodHR5LT5mbGlwLmNvdW50ID49IFRUWV9GTElQQlVGX1NJWkUpIHsKKwkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQlpZiAodHR5LT5mbGlwLmNvdW50ID49IFRUWV9GTElQQlVGX1NJWkUpIHsKKwkJCQlkZXZfZXJyKGRldiwgIiVzIC0gZHJvcHBpbmcgZGF0YSwgJWQgYnl0ZXMgbG9zdFxuIiwKKwkJCQkJX19GVU5DVElPTl9fLCBsZW5ndGgpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQljbnQgPSBtaW4obGVuZ3RoLCBUVFlfRkxJUEJVRl9TSVpFIC0gdHR5LT5mbGlwLmNvdW50KTsKKwkJbWVtY3B5KHR0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIsIGRhdGEsIGNudCk7CisJCW1lbXNldCh0dHktPmZsaXAuZmxhZ19idWZfcHRyLCAwLCBjbnQpOworCQl0dHktPmZsaXAuY2hhcl9idWZfcHRyICs9IGNudDsKKwkJdHR5LT5mbGlwLmZsYWdfYnVmX3B0ciArPSBjbnQ7CisJCXR0eS0+ZmxpcC5jb3VudCArPSBjbnQ7CisJCWRhdGEgKz0gY250OworCQlsZW5ndGggLT0gY250OworCX0gd2hpbGUgKGxlbmd0aCA+IDApOworCisJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGhhbmRsZV9uZXdfbXNyCisgKgl0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgYW55IGNoYW5nZSB0byB0aGUgbXNyIHJlZ2lzdGVyIGZvciBhIHBvcnQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBoYW5kbGVfbmV3X21zcihzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBfX3U4IG5ld01zcikKK3sKKwlzdHJ1Y3QgIGFzeW5jX2ljb3VudCAqaWNvdW50OworCisJZGJnKCIlcyAlMDJ4IiwgX19GVU5DVElPTl9fLCBuZXdNc3IpOworCisJaWYgKG5ld01zciAmIChFREdFUE9SVF9NU1JfREVMVEFfQ1RTIHwgRURHRVBPUlRfTVNSX0RFTFRBX0RTUiB8IEVER0VQT1JUX01TUl9ERUxUQV9SSSB8IEVER0VQT1JUX01TUl9ERUxUQV9DRCkpIHsKKwkJaWNvdW50ID0gJmVkZ2VfcG9ydC0+aWNvdW50OworCisJCS8qIHVwZGF0ZSBpbnB1dCBsaW5lIGNvdW50ZXJzICovCisJCWlmIChuZXdNc3IgJiBFREdFUE9SVF9NU1JfREVMVEFfQ1RTKSB7CisJCQlpY291bnQtPmN0cysrOworCQl9CisJCWlmIChuZXdNc3IgJiBFREdFUE9SVF9NU1JfREVMVEFfRFNSKSB7CisJCQlpY291bnQtPmRzcisrOworCQl9CisJCWlmIChuZXdNc3IgJiBFREdFUE9SVF9NU1JfREVMVEFfQ0QpIHsKKwkJCWljb3VudC0+ZGNkKys7CisJCX0KKwkJaWYgKG5ld01zciAmIEVER0VQT1JUX01TUl9ERUxUQV9SSSkgeworCQkJaWNvdW50LT5ybmcrKzsKKwkJfQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmVkZ2VfcG9ydC0+ZGVsdGFfbXNyX3dhaXQpOworCX0KKworCS8qIFNhdmUgdGhlIG5ldyBtb2RlbSBzdGF0dXMgKi8KKwllZGdlX3BvcnQtPnNoYWRvd01TUiA9IG5ld01zciAmIDB4ZjA7CisKKwlyZXR1cm47Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBoYW5kbGVfbmV3X2xzcgorICoJdGhpcyBmdW5jdGlvbiBoYW5kbGVzIGFueSBjaGFuZ2UgdG8gdGhlIGxzciByZWdpc3RlciBmb3IgYSBwb3J0LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgaGFuZGxlX25ld19sc3Ioc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgX191OCBsc3JEYXRhLCBfX3U4IGxzciwgX191OCBkYXRhKQoreworCV9fdTggICAgbmV3THNyID0gKF9fdTgpKGxzciAmIChfX3U4KShMU1JfT1ZFUl9FUlIgfCBMU1JfUEFSX0VSUiB8IExTUl9GUk1fRVJSIHwgTFNSX0JSRUFLKSk7CisJc3RydWN0ICBhc3luY19pY291bnQgKmljb3VudDsKKworCWRiZygiJXMgLSAlMDJ4IiwgX19GVU5DVElPTl9fLCBuZXdMc3IpOworCisJZWRnZV9wb3J0LT5zaGFkb3dMU1IgPSBsc3I7CisKKwlpZiAobmV3THNyICYgTFNSX0JSRUFLKSB7CisJCS8vCisJCS8vIFBhcml0eSBhbmQgRnJhbWluZyBlcnJvcnMgb25seSBjb3VudCBpZiB0aGV5CisJCS8vIG9jY3VyIGV4Y2x1c2l2ZSBvZiBhIGJyZWFrIGJlaW5nCisJCS8vIHJlY2VpdmVkLgorCQkvLworCQluZXdMc3IgJj0gKF9fdTgpKExTUl9PVkVSX0VSUiB8IExTUl9CUkVBSyk7CisJfQorCisJLyogUGxhY2UgTFNSIGRhdGEgYnl0ZSBpbnRvIFJ4IGJ1ZmZlciAqLworCWlmIChsc3JEYXRhICYmIGVkZ2VfcG9ydC0+cG9ydC0+dHR5KQorCQllZGdlX3R0eV9yZWN2KCZlZGdlX3BvcnQtPnBvcnQtPmRldiwgZWRnZV9wb3J0LT5wb3J0LT50dHksICZkYXRhLCAxKTsKKworCS8qIHVwZGF0ZSBpbnB1dCBsaW5lIGNvdW50ZXJzICovCisJaWNvdW50ID0gJmVkZ2VfcG9ydC0+aWNvdW50OworCWlmIChuZXdMc3IgJiBMU1JfQlJFQUspIHsKKwkJaWNvdW50LT5icmsrKzsKKwl9CisJaWYgKG5ld0xzciAmIExTUl9PVkVSX0VSUikgeworCQlpY291bnQtPm92ZXJydW4rKzsKKwl9CisJaWYgKG5ld0xzciAmIExTUl9QQVJfRVJSKSB7CisJCWljb3VudC0+cGFyaXR5Kys7CisJfQorCWlmIChuZXdMc3IgJiBMU1JfRlJNX0VSUikgeworCQlpY291bnQtPmZyYW1lKys7CisJfQorCisJcmV0dXJuOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzcmFtX3dyaXRlCisgKgl3cml0ZXMgYSBudW1iZXIgb2YgYnl0ZXMgdG8gdGhlIEVkZ2Vwb3J0IGRldmljZSdzIHNyYW0gc3RhcnRpbmcgYXQgdGhlIAorICoJZ2l2ZW4gYWRkcmVzcy4KKyAqCUlmIHN1Y2Nlc3NmdWwgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4sIG90aGVyd2lzZSBpdCByZXR1cm5zCisgKglhIG5lZ2F0aXZlIGVycm9yIG51bWJlciBvZiB0aGUgcHJvYmxlbS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBzcmFtX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBfX3UxNiBleHRBZGRyLCBfX3UxNiBhZGRyLCBfX3UxNiBsZW5ndGgsIF9fdTggKmRhdGEpCit7CisJaW50IHJlc3VsdDsKKwlfX3UxNiBjdXJyZW50X2xlbmd0aDsKKwl1bnNpZ25lZCBjaGFyICp0cmFuc2Zlcl9idWZmZXI7CisKKwlkYmcoIiVzIC0gJXgsICV4LCAlZCIsIF9fRlVOQ1RJT05fXywgZXh0QWRkciwgYWRkciwgbGVuZ3RoKTsKKworCXRyYW5zZmVyX2J1ZmZlciA9ICBrbWFsbG9jICg2NCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cmFuc2Zlcl9idWZmZXIpIHsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzIC0ga21hbGxvYyglZCkgZmFpbGVkLlxuIiwgX19GVU5DVElPTl9fLCA2NCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIG5lZWQgdG8gc3BsaXQgdGhlc2Ugd3JpdGVzIHVwIGludG8gNjQgYnl0ZSBjaHVua3MgKi8KKwlyZXN1bHQgPSAwOworCXdoaWxlIChsZW5ndGggPiAwKSB7CisJCWlmIChsZW5ndGggPiA2NCkgeworCQkJY3VycmVudF9sZW5ndGggPSA2NDsKKwkJfSBlbHNlIHsKKwkJCWN1cnJlbnRfbGVuZ3RoID0gbGVuZ3RoOworCQl9CisvLwkJZGJnKCIlcyAtIHdyaXRpbmcgJXgsICV4LCAlZCIsIF9fRlVOQ1RJT05fXywgZXh0QWRkciwgYWRkciwgY3VycmVudF9sZW5ndGgpOworCQltZW1jcHkgKHRyYW5zZmVyX2J1ZmZlciwgZGF0YSwgY3VycmVudF9sZW5ndGgpOworCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLCBVU0JfUkVRVUVTVF9JT05fV1JJVEVfUkFNLCAKKwkJCQkJICAweDQwLCBhZGRyLCBleHRBZGRyLCB0cmFuc2Zlcl9idWZmZXIsIGN1cnJlbnRfbGVuZ3RoLCAzMDApOworCQlpZiAocmVzdWx0IDwgMCkKKwkJCWJyZWFrOworCQlsZW5ndGggLT0gY3VycmVudF9sZW5ndGg7CisJCWFkZHIgKz0gY3VycmVudF9sZW5ndGg7CisJCWRhdGEgKz0gY3VycmVudF9sZW5ndGg7CisJfSAgICAgICAKKworCWtmcmVlICh0cmFuc2Zlcl9idWZmZXIpOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHJvbV93cml0ZQorICoJd3JpdGVzIGEgbnVtYmVyIG9mIGJ5dGVzIHRvIHRoZSBFZGdlcG9ydCBkZXZpY2UncyBST00gc3RhcnRpbmcgYXQgdGhlCisgKglnaXZlbiBhZGRyZXNzLgorICoJSWYgc3VjY2Vzc2Z1bCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiwgb3RoZXJ3aXNlIGl0IHJldHVybnMKKyAqCWEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyIG9mIHRoZSBwcm9ibGVtLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHJvbV93cml0ZSAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgX191MTYgZXh0QWRkciwgX191MTYgYWRkciwgX191MTYgbGVuZ3RoLCBfX3U4ICpkYXRhKQoreworCWludCByZXN1bHQ7CisJX191MTYgY3VycmVudF9sZW5ndGg7CisJdW5zaWduZWQgY2hhciAqdHJhbnNmZXJfYnVmZmVyOworCisvLwlkYmcoIiVzIC0gJXgsICV4LCAlZCIsIF9fRlVOQ1RJT05fXywgZXh0QWRkciwgYWRkciwgbGVuZ3RoKTsKKworCXRyYW5zZmVyX2J1ZmZlciA9ICBrbWFsbG9jICg2NCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cmFuc2Zlcl9idWZmZXIpIHsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzIC0ga21hbGxvYyglZCkgZmFpbGVkLlxuIiwgX19GVU5DVElPTl9fLCA2NCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIG5lZWQgdG8gc3BsaXQgdGhlc2Ugd3JpdGVzIHVwIGludG8gNjQgYnl0ZSBjaHVua3MgKi8KKwlyZXN1bHQgPSAwOworCXdoaWxlIChsZW5ndGggPiAwKSB7CisJCWlmIChsZW5ndGggPiA2NCkgeworCQkJY3VycmVudF9sZW5ndGggPSA2NDsKKwkJfSBlbHNlIHsKKwkJCWN1cnJlbnRfbGVuZ3RoID0gbGVuZ3RoOworCQl9CisvLwkJZGJnKCIlcyAtIHdyaXRpbmcgJXgsICV4LCAlZCIsIF9fRlVOQ1RJT05fXywgZXh0QWRkciwgYWRkciwgY3VycmVudF9sZW5ndGgpOworCQltZW1jcHkgKHRyYW5zZmVyX2J1ZmZlciwgZGF0YSwgY3VycmVudF9sZW5ndGgpOworCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLCBVU0JfUkVRVUVTVF9JT05fV1JJVEVfUk9NLCAKKwkJCQkJICAweDQwLCBhZGRyLCBleHRBZGRyLCB0cmFuc2Zlcl9idWZmZXIsIGN1cnJlbnRfbGVuZ3RoLCAzMDApOworCQlpZiAocmVzdWx0IDwgMCkKKwkJCWJyZWFrOworCQlsZW5ndGggLT0gY3VycmVudF9sZW5ndGg7CisJCWFkZHIgKz0gY3VycmVudF9sZW5ndGg7CisJCWRhdGEgKz0gY3VycmVudF9sZW5ndGg7CisJfSAgICAgICAKKworCWtmcmVlICh0cmFuc2Zlcl9idWZmZXIpOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHJvbV9yZWFkCisgKglyZWFkcyBhIG51bWJlciBvZiBieXRlcyBmcm9tIHRoZSBFZGdlcG9ydCBkZXZpY2Ugc3RhcnRpbmcgYXQgdGhlIGdpdmVuCisgKglhZGRyZXNzLgorICoJSWYgc3VjY2Vzc2Z1bCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCwgb3RoZXJ3aXNlIGl0IHJldHVybnMKKyAqCWEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyIG9mIHRoZSBwcm9ibGVtLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHJvbV9yZWFkIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBfX3UxNiBleHRBZGRyLCBfX3UxNiBhZGRyLCBfX3UxNiBsZW5ndGgsIF9fdTggKmRhdGEpCit7CisJaW50IHJlc3VsdDsKKwlfX3UxNiBjdXJyZW50X2xlbmd0aDsKKwl1bnNpZ25lZCBjaGFyICp0cmFuc2Zlcl9idWZmZXI7CisKKwlkYmcoIiVzIC0gJXgsICV4LCAlZCIsIF9fRlVOQ1RJT05fXywgZXh0QWRkciwgYWRkciwgbGVuZ3RoKTsKKworCXRyYW5zZmVyX2J1ZmZlciA9ICBrbWFsbG9jICg2NCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cmFuc2Zlcl9idWZmZXIpIHsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzIC0ga21hbGxvYyglZCkgZmFpbGVkLlxuIiwgX19GVU5DVElPTl9fLCA2NCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIG5lZWQgdG8gc3BsaXQgdGhlc2UgcmVhZHMgdXAgaW50byA2NCBieXRlIGNodW5rcyAqLworCXJlc3VsdCA9IDA7CisJd2hpbGUgKGxlbmd0aCA+IDApIHsKKwkJaWYgKGxlbmd0aCA+IDY0KSB7CisJCQljdXJyZW50X2xlbmd0aCA9IDY0OworCQl9IGVsc2UgeworCQkJY3VycmVudF9sZW5ndGggPSBsZW5ndGg7CisJCX0KKy8vCQlkYmcoIiVzIC0gJXgsICV4LCAlZCIsIF9fRlVOQ1RJT05fXywgZXh0QWRkciwgYWRkciwgY3VycmVudF9sZW5ndGgpOworCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLCBVU0JfUkVRVUVTVF9JT05fUkVBRF9ST00sIAorCQkJCQkgIDB4QzAsIGFkZHIsIGV4dEFkZHIsIHRyYW5zZmVyX2J1ZmZlciwgY3VycmVudF9sZW5ndGgsIDMwMCk7CisJCWlmIChyZXN1bHQgPCAwKQorCQkJYnJlYWs7CisJCW1lbWNweSAoZGF0YSwgdHJhbnNmZXJfYnVmZmVyLCBjdXJyZW50X2xlbmd0aCk7CisJCWxlbmd0aCAtPSBjdXJyZW50X2xlbmd0aDsKKwkJYWRkciArPSBjdXJyZW50X2xlbmd0aDsKKwkJZGF0YSArPSBjdXJyZW50X2xlbmd0aDsKKwl9ICAgICAgIAorCisJa2ZyZWUgKHRyYW5zZmVyX2J1ZmZlcik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc2VuZF9pb3NwX2V4dF9jbWQKKyAqCUlzIHVzZWQgdG8gc2VuZCBhIElPU1AgbWVzc2FnZSB0byB0aGUgRWRnZXBvcnQgZGV2aWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgc2VuZF9pb3NwX2V4dF9jbWQgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIF9fdTggY29tbWFuZCwgX191OCBwYXJhbSkKK3sKKwl1bnNpZ25lZCBjaGFyICAgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBjaGFyICAgKmN1cnJlbnRDb21tYW5kOworCWludCAgICAgICAgICAgICBsZW5ndGggPSAwOworCWludCAgICAgICAgICAgICBzdGF0dXMgPSAwOworCisJZGJnKCIlcyAtICVkLCAlZCIsIF9fRlVOQ1RJT05fXywgY29tbWFuZCwgcGFyYW0pOworCisJYnVmZmVyID0gIGttYWxsb2MgKDEwLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKCZlZGdlX3BvcnQtPnBvcnQtPmRldiwgIiVzIC0ga21hbGxvYyglZCkgZmFpbGVkLlxuIiwgX19GVU5DVElPTl9fLCAxMCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWN1cnJlbnRDb21tYW5kID0gYnVmZmVyOworCisJTUFLRV9DTURfRVhUX0NNRCAoJmN1cnJlbnRDb21tYW5kLCAmbGVuZ3RoLAorCQkJICBlZGdlX3BvcnQtPnBvcnQtPm51bWJlciAtIGVkZ2VfcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vciwKKwkJCSAgY29tbWFuZCwgcGFyYW0pOworCisJc3RhdHVzID0gd3JpdGVfY21kX3VzYiAoZWRnZV9wb3J0LCBidWZmZXIsIGxlbmd0aCk7CisJaWYgKHN0YXR1cykgeworCQkvKiBzb21ldGhpbmcgYmFkIGhhcHBlbmVkLCBsZXQncyBmcmVlIHVwIHRoZSBtZW1vcnkgKi8KKwkJa2ZyZWUoYnVmZmVyKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogd3JpdGVfY21kX3VzYgorICoJdGhpcyBmdW5jdGlvbiB3cml0ZXMgdGhlIGdpdmVuIGJ1ZmZlciBvdXQgdG8gdGhlIGJ1bGsgd3JpdGUgZW5kcG9pbnQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHdyaXRlX2NtZF91c2IgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwpOworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgdGltZW91dDsKKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIGxlbmd0aCwgYnVmZmVyKTsKKworCS8qIEFsbG9jYXRlIG91ciBuZXh0IHVyYiAqLworCXVyYiA9IHVzYl9hbGxvY191cmIgKDAsIEdGUF9BVE9NSUMpOworCWlmICghdXJiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCUNtZFVyYnMrKzsKKwlkYmcoIiVzIC0gQUxMT0NBVEUgVVJCICVwIChvdXRzdGFuZGluZyAlZCkiLCBfX0ZVTkNUSU9OX18sIHVyYiwgQ21kVXJicyk7CisKKwl1c2JfZmlsbF9idWxrX3VyYiAodXJiLCBlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYsIAorCQkgICAgICAgdXNiX3NuZGJ1bGtwaXBlKGVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldiwgZWRnZV9zZXJpYWwtPmJ1bGtfb3V0X2VuZHBvaW50KSwKKwkJICAgICAgIGJ1ZmZlciwgbGVuZ3RoLCBlZGdlX2J1bGtfb3V0X2NtZF9jYWxsYmFjaywgZWRnZV9wb3J0KTsKKworCWVkZ2VfcG9ydC0+Y29tbWFuZFBlbmRpbmcgPSBUUlVFOworCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisKKwlpZiAoc3RhdHVzKSB7CisJCS8qIHNvbWV0aGluZyB3ZW50IHdyb25nICovCisJCWRldl9lcnIoJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LCAiJXMgLSB1c2Jfc3VibWl0X3VyYih3cml0ZSBjb21tYW5kKSBmYWlsZWQsIHN0YXR1cyA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCXVzYl9raWxsX3VyYih1cmIpOworCQl1c2JfZnJlZV91cmIodXJiKTsKKwkJQ21kVXJicy0tOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCS8vIHdhaXQgZm9yIGNvbW1hbmQgdG8gZmluaXNoCisJdGltZW91dCA9IENPTU1BTkRfVElNRU9VVDsKKyNpZiAwCisJd2FpdF9ldmVudCAoJmVkZ2VfcG9ydC0+d2FpdF9jb21tYW5kLCAoZWRnZV9wb3J0LT5jb21tYW5kUGVuZGluZyA9PSBGQUxTRSkpOworCisJaWYgKGVkZ2VfcG9ydC0+Y29tbWFuZFBlbmRpbmcgPT0gVFJVRSkgeworCQkvKiBjb21tYW5kIHRpbWVkIG91dCAqLworCQlkYmcoIiVzIC0gY29tbWFuZCB0aW1lZCBvdXQiLCBfX0ZVTkNUSU9OX18pOworCQlzdGF0dXMgPSAtRUlOVkFMOworCX0KKyNlbmRpZgorCXJldHVybiBzdGF0dXM7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzZW5kX2NtZF93cml0ZV9iYXVkX3JhdGUKKyAqCXRoaXMgZnVuY3Rpb24gc2VuZHMgdGhlIHByb3BlciBjb21tYW5kIHRvIGNoYW5nZSB0aGUgYmF1ZCByYXRlIG9mIHRoZQorICoJc3BlY2lmaWVkIHBvcnQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHNlbmRfY21kX3dyaXRlX2JhdWRfcmF0ZSAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgaW50IGJhdWRSYXRlKQoreworCXVuc2lnbmVkIGNoYXIgKmNtZEJ1ZmZlcjsKKwl1bnNpZ25lZCBjaGFyICpjdXJyQ21kOworCWludCBjbWRMZW4gPSAwOworCWludCBkaXZpc29yOworCWludCBzdGF0dXM7CisJdW5zaWduZWQgY2hhciBudW1iZXIgPSBlZGdlX3BvcnQtPnBvcnQtPm51bWJlciAtIGVkZ2VfcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vcjsKKworCWRiZygiJXMgLSBwb3J0ID0gJWQsIGJhdWQgPSAlZCIsIF9fRlVOQ1RJT05fXywgZWRnZV9wb3J0LT5wb3J0LT5udW1iZXIsIGJhdWRSYXRlKTsKKworCXN0YXR1cyA9IGNhbGNfYmF1ZF9yYXRlX2Rpdmlzb3IgKGJhdWRSYXRlLCAmZGl2aXNvcik7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZXJyKCZlZGdlX3BvcnQtPnBvcnQtPmRldiwgIiVzIC0gYmFkIGJhdWQgcmF0ZVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwkvLyBBbGxvYyBtZW1vcnkgZm9yIHRoZSBzdHJpbmcgb2YgY29tbWFuZHMuCisJY21kQnVmZmVyID0gIGttYWxsb2MgKDB4MTAwLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWNtZEJ1ZmZlcikgeworCQlkZXZfZXJyKCZlZGdlX3BvcnQtPnBvcnQtPmRldiwgIiVzIC0ga21hbGxvYyglZCkgZmFpbGVkLlxuIiwgX19GVU5DVElPTl9fLCAweDEwMCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwljdXJyQ21kID0gY21kQnVmZmVyOworCisJLy8gRW5hYmxlIGFjY2VzcyB0byBkaXZpc29yIGxhdGNoCisJTUFLRV9DTURfV1JJVEVfUkVHKCAmY3VyckNtZCwgJmNtZExlbiwgbnVtYmVyLCBMQ1IsIExDUl9ETF9FTkFCTEUgKTsKKworCS8vIFdyaXRlIHRoZSBkaXZpc29yIGl0c2VsZgorCU1BS0VfQ01EX1dSSVRFX1JFRyggJmN1cnJDbWQsICZjbWRMZW4sIG51bWJlciwgRExMLCBMT1c4IChkaXZpc29yKSApOworCU1BS0VfQ01EX1dSSVRFX1JFRyggJmN1cnJDbWQsICZjbWRMZW4sIG51bWJlciwgRExNLCBISUdIOChkaXZpc29yKSApOworCisJLy8gUmVzdG9yZSBvcmlnaW5hbCB2YWx1ZSB0byBkaXNhYmxlIGFjY2VzcyB0byBkaXZpc29yIGxhdGNoCisJTUFLRV9DTURfV1JJVEVfUkVHKCAmY3VyckNtZCwgJmNtZExlbiwgbnVtYmVyLCBMQ1IsIGVkZ2VfcG9ydC0+c2hhZG93TENSKTsKKworCXN0YXR1cyA9IHdyaXRlX2NtZF91c2IoZWRnZV9wb3J0LCBjbWRCdWZmZXIsIGNtZExlbiApOworCWlmIChzdGF0dXMpIHsKKwkJLyogc29tZXRoaW5nIGJhZCBoYXBwZW5lZCwgbGV0J3MgZnJlZSB1cCB0aGUgbWVtb3J5ICovCisJCWtmcmVlIChjbWRCdWZmZXIpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBjYWxjX2JhdWRfcmF0ZV9kaXZpc29yCisgKgl0aGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIHByb3BlciBiYXVkIHJhdGUgZGl2aXNvciBmb3IgdGhlIHNwZWNpZmllZAorICoJYmF1ZCByYXRlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBjYWxjX2JhdWRfcmF0ZV9kaXZpc29yIChpbnQgYmF1ZHJhdGUsIGludCAqZGl2aXNvcikKK3sKKwlpbnQgaTsKKwlfX3UxNiBjdXN0b207CisKKworCWRiZygiJXMgLSAlZCIsIF9fRlVOQ1RJT05fXywgYmF1ZHJhdGUpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9FTlRSSUVTKGRpdmlzb3JfdGFibGUpOyBpKyspIHsKKwkJaWYgKCBkaXZpc29yX3RhYmxlW2ldLkJhdWRSYXRlID09IGJhdWRyYXRlICkgeworCQkJKmRpdmlzb3IgPSBkaXZpc29yX3RhYmxlW2ldLkRpdmlzb3I7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8vIFdlIGhhdmUgdHJpZWQgYWxsIG9mIHRoZSBzdGFuZGFyZCBiYXVkIHJhdGVzCisJLy8gbGV0cyB0cnkgdG8gY2FsY3VsYXRlIHRoZSBkaXZpc29yIGZvciB0aGlzIGJhdWQgcmF0ZQorCS8vIE1ha2Ugc3VyZSB0aGUgYmF1ZCByYXRlIGlzIHJlYXNvbmFibGUKKwlpZiAoYmF1ZHJhdGUgPiA1MCAmJiBiYXVkcmF0ZSA8IDIzMDQwMCkgeworCQkvLyBnZXQgZGl2aXNvcgorCQljdXN0b20gPSAoX191MTYpKCgyMzA0MDBMICsgYmF1ZHJhdGUvMikgLyBiYXVkcmF0ZSk7CisKKwkJKmRpdmlzb3IgPSBjdXN0b207CisKKwkJZGJnKCIlcyAtIEJhdWQgJWQgPSAlZFxuIiwgX19GVU5DVElPTl9fLCBiYXVkcmF0ZSwgY3VzdG9tKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC0xOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc2VuZF9jbWRfd3JpdGVfdWFydF9yZWdpc3RlcgorICoJdGhpcyBmdW5jdGlvbiBidWlsZHMgdXAgYSB1YXJ0IHJlZ2lzdGVyIG1lc3NhZ2UgYW5kIHNlbmRzIHRvIHRvIHRoZSBkZXZpY2UuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHNlbmRfY21kX3dyaXRlX3VhcnRfcmVnaXN0ZXIgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIF9fdTggcmVnTnVtLCBfX3U4IHJlZ1ZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgKmNtZEJ1ZmZlcjsKKwl1bnNpZ25lZCBjaGFyICpjdXJyQ21kOworCXVuc2lnbmVkIGxvbmcgY21kTGVuID0gMDsKKwlpbnQgc3RhdHVzOworCisJZGJnKCIlcyAtIHdyaXRlIHRvICVzIHJlZ2lzdGVyIDB4JTAyeCIsIChyZWdOdW0gPT0gTUNSKSA/ICJNQ1IiIDogIkxDUiIsIF9fRlVOQ1RJT05fXywgcmVnVmFsdWUpOworCisJLy8gQWxsb2MgbWVtb3J5IGZvciB0aGUgc3RyaW5nIG9mIGNvbW1hbmRzLgorCWNtZEJ1ZmZlciA9IGttYWxsb2MgKDB4MTAsIEdGUF9BVE9NSUMpOworCWlmIChjbWRCdWZmZXIgPT0gTlVMTCApIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY3VyckNtZCA9IGNtZEJ1ZmZlcjsKKworCS8vIEJ1aWxkIGEgY21kIGluIHRoZSBidWZmZXIgdG8gd3JpdGUgdGhlIGdpdmVuIHJlZ2lzdGVyCisJTUFLRV9DTURfV1JJVEVfUkVHICgmY3VyckNtZCwgJmNtZExlbiwKKwkJCSAgICBlZGdlX3BvcnQtPnBvcnQtPm51bWJlciAtIGVkZ2VfcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vciwKKwkJCSAgICByZWdOdW0sIHJlZ1ZhbHVlKTsKKworCXN0YXR1cyA9IHdyaXRlX2NtZF91c2IoZWRnZV9wb3J0LCBjbWRCdWZmZXIsIGNtZExlbik7CisJaWYgKHN0YXR1cykgeworCQkvKiBzb21ldGhpbmcgYmFkIGhhcHBlbmVkLCBsZXQncyBmcmVlIHVwIHRoZSBtZW1vcnkgKi8KKwkJa2ZyZWUgKGNtZEJ1ZmZlcik7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGNoYW5nZV9wb3J0X3NldHRpbmdzCisgKglUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIHNldCB0aGUgVUFSVCBvbiB0aGUgZGV2aWNlIHRvIG1hdGNoIHRoZSBzcGVjaWZpZWQKKyAqCW5ldyBzZXR0aW5ncy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgQ01TUEFSCisjZGVmaW5lIENNU1BBUiAwCisjZW5kaWYKK3N0YXRpYyB2b2lkIGNoYW5nZV9wb3J0X3NldHRpbmdzIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlpbnQgYmF1ZDsKKwl1bnNpZ25lZCBjZmxhZzsKKwlfX3U4IG1hc2sgPSAweGZmOworCV9fdTggbERhdGE7CisJX191OCBsUGFyaXR5OworCV9fdTggbFN0b3A7CisJX191OCByeEZsb3c7CisJX191OCB0eEZsb3c7CisJaW50IHN0YXR1czsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBlZGdlX3BvcnQtPnBvcnQtPm51bWJlcik7CisKKwlpZiAoKCFlZGdlX3BvcnQtPm9wZW4pICYmCisJICAgICghZWRnZV9wb3J0LT5vcGVuUGVuZGluZykpIHsKKwkJZGJnKCIlcyAtIHBvcnQgbm90IG9wZW5lZCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwl0dHkgPSBlZGdlX3BvcnQtPnBvcnQtPnR0eTsKKwlpZiAoKCF0dHkpIHx8CisJICAgICghdHR5LT50ZXJtaW9zKSkgeworCQlkYmcoIiVzIC0gbm8gdHR5IHN0cnVjdHVyZXMiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisKKwlzd2l0Y2ggKGNmbGFnICYgQ1NJWkUpIHsKKwkJY2FzZSBDUzU6ICAgbERhdGEgPSBMQ1JfQklUU181OyBtYXNrID0gMHgxZjsgICAgZGJnKCIlcyAtIGRhdGEgYml0cyA9IDUiLCBfX0ZVTkNUSU9OX18pOyAgIGJyZWFrOworCQljYXNlIENTNjogICBsRGF0YSA9IExDUl9CSVRTXzY7IG1hc2sgPSAweDNmOyAgICBkYmcoIiVzIC0gZGF0YSBiaXRzID0gNiIsIF9fRlVOQ1RJT05fXyk7ICAgYnJlYWs7CisJCWNhc2UgQ1M3OiAgIGxEYXRhID0gTENSX0JJVFNfNzsgbWFzayA9IDB4N2Y7ICAgIGRiZygiJXMgLSBkYXRhIGJpdHMgPSA3IiwgX19GVU5DVElPTl9fKTsgICBicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSBDUzg6ICAgbERhdGEgPSBMQ1JfQklUU184OyAgICAgICAgICAgICAgICAgZGJnKCIlcyAtIGRhdGEgYml0cyA9IDgiLCBfX0ZVTkNUSU9OX18pOyAgIGJyZWFrOworCX0KKworCWxQYXJpdHkgPSBMQ1JfUEFSX05PTkU7CisJaWYgKGNmbGFnICYgUEFSRU5CKSB7CisJCWlmIChjZmxhZyAmIENNU1BBUikgeworCQkJaWYgKGNmbGFnICYgUEFST0REKSB7CisJCQkJbFBhcml0eSA9IExDUl9QQVJfTUFSSzsKKwkJCQlkYmcoIiVzIC0gcGFyaXR5ID0gbWFyayIsIF9fRlVOQ1RJT05fXyk7CisJCQl9IGVsc2UgeworCQkJCWxQYXJpdHkgPSBMQ1JfUEFSX1NQQUNFOworCQkJCWRiZygiJXMgLSBwYXJpdHkgPSBzcGFjZSIsIF9fRlVOQ1RJT05fXyk7CisJCQl9CisJCX0gZWxzZSBpZiAoY2ZsYWcgJiBQQVJPREQpIHsKKwkJCWxQYXJpdHkgPSBMQ1JfUEFSX09ERDsKKwkJCWRiZygiJXMgLSBwYXJpdHkgPSBvZGQiLCBfX0ZVTkNUSU9OX18pOworCQl9IGVsc2UgeworCQkJbFBhcml0eSA9IExDUl9QQVJfRVZFTjsKKwkJCWRiZygiJXMgLSBwYXJpdHkgPSBldmVuIiwgX19GVU5DVElPTl9fKTsKKwkJfQorCX0gZWxzZSB7CisJCWRiZygiJXMgLSBwYXJpdHkgPSBub25lIiwgX19GVU5DVElPTl9fKTsKKwl9CisKKwlpZiAoY2ZsYWcgJiBDU1RPUEIpIHsKKwkJbFN0b3AgPSBMQ1JfU1RPUF8yOworCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMiIsIF9fRlVOQ1RJT05fXyk7CisJfSBlbHNlIHsKKwkJbFN0b3AgPSBMQ1JfU1RPUF8xOworCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMSIsIF9fRlVOQ1RJT05fXyk7CisJfQorCisJLyogZmlndXJlIG91dCB0aGUgZmxvdyBjb250cm9sIHNldHRpbmdzICovCisJcnhGbG93ID0gdHhGbG93ID0gMHgwMDsKKwlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7CisJCXJ4RmxvdyB8PSBJT1NQX1JYX0ZMT1dfUlRTOworCQl0eEZsb3cgfD0gSU9TUF9UWF9GTE9XX0NUUzsKKwkJZGJnKCIlcyAtIFJUUy9DVFMgaXMgZW5hYmxlZCIsIF9fRlVOQ1RJT05fXyk7CisJfSBlbHNlIHsKKwkJZGJnKCIlcyAtIFJUUy9DVFMgaXMgZGlzYWJsZWQiLCBfX0ZVTkNUSU9OX18pOworCX0KKworCS8qIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgWE9OL1hPRkYsIHNldCB0aGUgc3RhcnQgYW5kIHN0b3AgY2hhcmFjdGVyIGluIHRoZSBkZXZpY2UgKi8KKwlpZiAoSV9JWE9GRih0dHkpIHx8IElfSVhPTih0dHkpKSB7CisJCXVuc2lnbmVkIGNoYXIgc3RvcF9jaGFyICA9IFNUT1BfQ0hBUih0dHkpOworCQl1bnNpZ25lZCBjaGFyIHN0YXJ0X2NoYXIgPSBTVEFSVF9DSEFSKHR0eSk7CisKKwkJc2VuZF9pb3NwX2V4dF9jbWQgKGVkZ2VfcG9ydCwgSU9TUF9DTURfU0VUX1hPTl9DSEFSLCBzdGFydF9jaGFyKTsKKwkJc2VuZF9pb3NwX2V4dF9jbWQgKGVkZ2VfcG9ydCwgSU9TUF9DTURfU0VUX1hPRkZfQ0hBUiwgc3RvcF9jaGFyKTsKKworCQkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIElOQk9VTkQgWE9OL1hPRkYgKi8KKwkJaWYgKElfSVhPRkYodHR5KSkgeworCQkJcnhGbG93IHw9IElPU1BfUlhfRkxPV19YT05fWE9GRjsKKwkJCWRiZygiJXMgLSBJTkJPVU5EIFhPTi9YT0ZGIGlzIGVuYWJsZWQsIFhPTiA9ICUyeCwgWE9GRiA9ICUyeCIsIF9fRlVOQ1RJT05fXywgc3RhcnRfY2hhciwgc3RvcF9jaGFyKTsKKwkJfSBlbHNlIHsKKwkJCWRiZygiJXMgLSBJTkJPVU5EIFhPTi9YT0ZGIGlzIGRpc2FibGVkIiwgX19GVU5DVElPTl9fKTsKKwkJfQorCisJCS8qIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgT1VUQk9VTkQgWE9OL1hPRkYgKi8KKwkJaWYgKElfSVhPTih0dHkpKSB7CisJCQl0eEZsb3cgfD0gSU9TUF9UWF9GTE9XX1hPTl9YT0ZGOworCQkJZGJnKCIlcyAtIE9VVEJPVU5EIFhPTi9YT0ZGIGlzIGVuYWJsZWQsIFhPTiA9ICUyeCwgWE9GRiA9ICUyeCIsIF9fRlVOQ1RJT05fXywgc3RhcnRfY2hhciwgc3RvcF9jaGFyKTsKKwkJfSBlbHNlIHsKKwkJCWRiZygiJXMgLSBPVVRCT1VORCBYT04vWE9GRiBpcyBkaXNhYmxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCX0KKwl9CisKKwkvKiBTZXQgZmxvdyBjb250cm9sIHRvIHRoZSBjb25maWd1cmVkIHZhbHVlICovCisJc2VuZF9pb3NwX2V4dF9jbWQgKGVkZ2VfcG9ydCwgSU9TUF9DTURfU0VUX1JYX0ZMT1csIHJ4Rmxvdyk7CisJc2VuZF9pb3NwX2V4dF9jbWQgKGVkZ2VfcG9ydCwgSU9TUF9DTURfU0VUX1RYX0ZMT1csIHR4Rmxvdyk7CisKKworCWVkZ2VfcG9ydC0+c2hhZG93TENSICY9IH4oTENSX0JJVFNfTUFTSyB8IExDUl9TVE9QX01BU0sgfCBMQ1JfUEFSX01BU0spOworCWVkZ2VfcG9ydC0+c2hhZG93TENSIHw9IChsRGF0YSB8IGxQYXJpdHkgfCBsU3RvcCk7CisKKwllZGdlX3BvcnQtPnZhbGlkRGF0YU1hc2sgPSBtYXNrOworCisJLyogU2VuZCB0aGUgdXBkYXRlZCBMQ1IgdmFsdWUgdG8gdGhlIEVkZ2VQb3J0ICovCisJc3RhdHVzID0gc2VuZF9jbWRfd3JpdGVfdWFydF9yZWdpc3RlcihlZGdlX3BvcnQsIExDUiwgZWRnZV9wb3J0LT5zaGFkb3dMQ1IpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlyZXR1cm47CisJfQorCisJLyogc2V0IHVwIHRoZSBNQ1IgcmVnaXN0ZXIgYW5kIHNlbmQgaXQgdG8gdGhlIEVkZ2VQb3J0ICovCisJZWRnZV9wb3J0LT5zaGFkb3dNQ1IgPSBNQ1JfTUFTVEVSX0lFOworCWlmIChjZmxhZyAmIENCQVVEKSB7CisJCWVkZ2VfcG9ydC0+c2hhZG93TUNSIHw9IChNQ1JfRFRSIHwgTUNSX1JUUyk7CisJfQorCXN0YXR1cyA9IHNlbmRfY21kX3dyaXRlX3VhcnRfcmVnaXN0ZXIoZWRnZV9wb3J0LCBNQ1IsIGVkZ2VfcG9ydC0+c2hhZG93TUNSKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJcmV0dXJuOworCX0KKworCS8qIERldGVybWluZSBkaXZpc29yIGJhc2VkIG9uIGJhdWQgcmF0ZSAqLworCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOworCWlmICghYmF1ZCkgeworCQkvKiBwaWNrIGEgZGVmYXVsdCwgYW55IGRlZmF1bHQuLi4gKi8KKwkJYmF1ZCA9IDk2MDA7CisJfQorCisJZGJnKCIlcyAtIGJhdWQgcmF0ZSA9ICVkIiwgX19GVU5DVElPTl9fLCBiYXVkKTsKKwlzdGF0dXMgPSBzZW5kX2NtZF93cml0ZV9iYXVkX3JhdGUgKGVkZ2VfcG9ydCwgYmF1ZCk7CisKKwlyZXR1cm47Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHVuaWNvZGVfdG9fYXNjaWkKKyAqCVR1cm5zIGEgc3RyaW5nIGZyb20gVW5pY29kZSBpbnRvIEFTQ0lJLgorICoJRG9lc24ndCBkbyBhIGdvb2Qgam9iIHdpdGggYW55IGNoYXJhY3RlcnMgdGhhdCBhcmUgb3V0c2lkZSB0aGUgbm9ybWFsCisgKglBU0NJSSByYW5nZSwgYnV0IGl0J3Mgb25seSBmb3IgZGVidWdnaW5nLi4uCisgKglOT1RFOiBleHBlY3RzIHRoZSB1bmljb2RlIGluIExFIGZvcm1hdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCB1bmljb2RlX3RvX2FzY2lpIChjaGFyICpzdHJpbmcsIF9fbGUxNiAqdW5pY29kZSwgaW50IHVuaWNvZGVfc2l6ZSkKK3sKKwlpbnQgaTsKKworCWlmICh1bmljb2RlX3NpemUgPD0gMCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IHVuaWNvZGVfc2l6ZTsgKytpKQorCQlzdHJpbmdbaV0gPSAoY2hhcikobGUxNl90b19jcHUodW5pY29kZVtpXSkpOworCXN0cmluZ1t1bmljb2RlX3NpemVdID0gMHgwMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZ2V0X21hbnVmYWN0dXJpbmdfZGVzYworICoJcmVhZHMgaW4gdGhlIG1hbnVmYWN0dXJpbmcgZGVzY3JpcHRvciBhbmQgc3RvcmVzIGl0IGludG8gdGhlIHNlcmlhbCAKKyAqCXN0cnVjdHVyZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgZ2V0X21hbnVmYWN0dXJpbmdfZGVzYyAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwpCit7CisJaW50IHJlc3BvbnNlOworCisJZGJnKCJnZXR0aW5nIG1hbnVmYWN0dXJlciBkZXNjcmlwdG9yIik7CisKKwlyZXNwb25zZSA9IHJvbV9yZWFkIChlZGdlX3NlcmlhbC0+c2VyaWFsLCAoRURHRV9NQU5VRl9ERVNDX0FERFIgJiAweGZmZmYwMDAwKSA+PiAxNiwgCisJCQkgICAgKF9fdTE2KShFREdFX01BTlVGX0RFU0NfQUREUiAmIDB4MDAwMGZmZmYpLCBFREdFX01BTlVGX0RFU0NfTEVOLAorCQkJICAgIChfX3U4ICopKCZlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvcikpOworCisJaWYgKHJlc3BvbnNlIDwgMSkgeworCQlkZXZfZXJyKCZlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYtPmRldiwgImVycm9yIGluIGdldHRpbmcgbWFudWZhY3R1cmVyIGRlc2NyaXB0b3JcbiIpOworCX0gZWxzZSB7CisJCWNoYXIgc3RyaW5nWzMwXTsKKwkJZGJnKCIqKk1hbnVmYWN0dXJlciBEZXNjcmlwdG9yIik7CisJCWRiZygiICBSb21TaXplOiAgICAgICAgJWRLIiwgZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuUm9tU2l6ZSk7CisJCWRiZygiICBSYW1TaXplOiAgICAgICAgJWRLIiwgZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuUmFtU2l6ZSk7CisJCWRiZygiICBDcHVSZXY6ICAgICAgICAgJWQiLCBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5DcHVSZXYpOworCQlkYmcoIiAgQm9hcmRSZXY6ICAgICAgICVkIiwgZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuQm9hcmRSZXYpOworCQlkYmcoIiAgTnVtUG9ydHM6ICAgICAgICVkIiwgZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuTnVtUG9ydHMpOworCQlkYmcoIiAgRGVzY0RhdGU6ICAgICAgICVkLyVkLyVkIiwgZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuRGVzY0RhdGVbMF0sIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLkRlc2NEYXRlWzFdLCBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5EZXNjRGF0ZVsyXSsxOTAwKTsKKwkJdW5pY29kZV90b19hc2NpaSAoc3RyaW5nLCBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5TZXJpYWxOdW1iZXIsIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLlNlck51bUxlbmd0aC8yLTEpOworCQlkYmcoIiAgU2VyaWFsTnVtYmVyOiAlcyIsIHN0cmluZyk7CisJCXVuaWNvZGVfdG9fYXNjaWkgKHN0cmluZywgZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuQXNzZW1ibHlOdW1iZXIsIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLkFzc2VtYmx5TnVtTGVuZ3RoLzItMSk7CisJCWRiZygiICBBc3NlbWJseU51bWJlcjogJXMiLCBzdHJpbmcpOworCQl1bmljb2RlX3RvX2FzY2lpIChzdHJpbmcsIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLk9lbUFzc3lOdW1iZXIsIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLk9lbUFzc3lOdW1MZW5ndGgvMi0xKTsKKwkJZGJnKCIgIE9lbUFzc3lOdW1iZXI6ICAlcyIsIHN0cmluZyk7CisJCWRiZygiICBVYXJ0VHlwZTogICAgICAgJWQiLCBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5VYXJ0VHlwZSk7CisJCWRiZygiICBJb25QaWQ6ICAgICAgICAgJWQiLCBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5Jb25QaWQpOworCQlkYmcoIiAgSW9uQ29uZmlnOiAgICAgICVkIiwgZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuSW9uQ29uZmlnKTsKKwl9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGdldF9ib290X2Rlc2MKKyAqCXJlYWRzIGluIHRoZSBib290bG9hZGVyIGRlc2NyaXB0b3IgYW5kIHN0b3JlcyBpdCBpbnRvIHRoZSBzZXJpYWwgCisgKglzdHJ1Y3R1cmUuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGdldF9ib290X2Rlc2MgKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsKQoreworCWludCByZXNwb25zZTsKKworCWRiZygiZ2V0dGluZyBib290IGRlc2NyaXB0b3IiKTsKKworCXJlc3BvbnNlID0gcm9tX3JlYWQgKGVkZ2Vfc2VyaWFsLT5zZXJpYWwsIChFREdFX0JPT1RfREVTQ19BRERSICYgMHhmZmZmMDAwMCkgPj4gMTYsIAorCQkJICAgIChfX3UxNikoRURHRV9CT09UX0RFU0NfQUREUiAmIDB4MDAwMGZmZmYpLCBFREdFX0JPT1RfREVTQ19MRU4sCisJCQkgICAgKF9fdTggKikoJmVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IpKTsKKworCWlmIChyZXNwb25zZSA8IDEpIHsKKwkJZGV2X2VycigmZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsICJlcnJvciBpbiBnZXR0aW5nIGJvb3QgZGVzY3JpcHRvclxuIik7CisJfSBlbHNlIHsKKwkJZGJnKCIqKkJvb3QgRGVzY3JpcHRvcjoiKTsKKwkJZGJnKCIgIEJvb3RDb2RlTGVuZ3RoOiAlZCIsIGxlMTZfdG9fY3B1KGVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuQm9vdENvZGVMZW5ndGgpKTsKKwkJZGJnKCIgIE1ham9yVmVyc2lvbjogICAlZCIsIGVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuTWFqb3JWZXJzaW9uKTsKKwkJZGJnKCIgIE1pbm9yVmVyc2lvbjogICAlZCIsIGVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuTWlub3JWZXJzaW9uKTsKKwkJZGJnKCIgIEJ1aWxkTnVtYmVyOiAgICAlZCIsIGxlMTZfdG9fY3B1KGVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuQnVpbGROdW1iZXIpKTsKKwkJZGJnKCIgIENhcGFiaWxpdGllczogICAweCV4IiwgbGUxNl90b19jcHUoZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5DYXBhYmlsaXRpZXMpKTsKKwkJZGJnKCIgIFVDb25maWcwOiAgICAgICAlZCIsIGVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuVUNvbmZpZzApOworCQlkYmcoIiAgVUNvbmZpZzE6ICAgICAgICVkIiwgZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5VQ29uZmlnMSk7CisJfQorfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBsb2FkX2FwcGxpY2F0aW9uX2Zpcm13YXJlCisgKglUaGlzIGlzIGNhbGxlZCB0byBsb2FkIHRoZSBhcHBsaWNhdGlvbiBmaXJtd2FyZSB0byB0aGUgZGV2aWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGxvYWRfYXBwbGljYXRpb25fZmlybXdhcmUgKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsKQoreworCXN0cnVjdCBlZGdlX2Zpcm13YXJlX2ltYWdlX3JlY29yZCAqcmVjb3JkOworCXVuc2lnbmVkIGNoYXIgKmZpcm13YXJlOworCXVuc2lnbmVkIGNoYXIgKkZpcm13YXJlSW1hZ2U7CisJaW50IEltYWdlU2l6ZTsKKwlpbnQgcmVzcG9uc2U7CisKKworCXN3aXRjaCAoZWRnZV9zZXJpYWwtPnByb2R1Y3RfaW5mby5pRG93bmxvYWRGaWxlKSB7CisJCWNhc2UgRURHRV9ET1dOTE9BRF9GSUxFX0k5MzA6CisJCQlkYmcoImRvd25sb2FkaW5nIGZpcm13YXJlIHZlcnNpb24gKDkzMCkgJWQuJWQuJWQiLCAKKwkJCSAgICBPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb25fR0VOMS5NYWpvclZlcnNpb24sIAorCQkJICAgIE9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbl9HRU4xLk1pbm9yVmVyc2lvbiwgCisJCQkgICAgT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uX0dFTjEuQnVpbGROdW1iZXIpOworCQkJZmlybXdhcmUgPSAmT3BlcmF0aW9uYWxDb2RlSW1hZ2VfR0VOMVswXTsKKwkJCUZpcm13YXJlSW1hZ2UgPSAmT3BlcmF0aW9uYWxDb2RlSW1hZ2VfR0VOMVswXTsKKwkJCUltYWdlU2l6ZSA9IHNpemVvZihPcGVyYXRpb25hbENvZGVJbWFnZV9HRU4xKTsKKwkJCWJyZWFrOworCisJCWNhc2UgRURHRV9ET1dOTE9BRF9GSUxFXzgwMjUxOgorCQkJZGJnKCJkb3dubG9hZGluZyBmaXJtd2FyZSB2ZXJzaW9uICg4MDI1MSkgJWQuJWQuJWQiLCAKKwkJCSAgICBPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb25fR0VOMi5NYWpvclZlcnNpb24sIAorCQkJICAgIE9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbl9HRU4yLk1pbm9yVmVyc2lvbiwgCisJCQkgICAgT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uX0dFTjIuQnVpbGROdW1iZXIpOworCQkJZmlybXdhcmUgPSAmT3BlcmF0aW9uYWxDb2RlSW1hZ2VfR0VOMlswXTsKKwkJCUZpcm13YXJlSW1hZ2UgPSAmT3BlcmF0aW9uYWxDb2RlSW1hZ2VfR0VOMlswXTsKKwkJCUltYWdlU2l6ZSA9IHNpemVvZihPcGVyYXRpb25hbENvZGVJbWFnZV9HRU4yKTsKKwkJCWJyZWFrOworCisJCWNhc2UgRURHRV9ET1dOTE9BRF9GSUxFX05PTkU6CisJCQlkYmcgICAgICgiTm8gZG93bmxvYWQgZmlsZSBzcGVjaWZpZWQsIHNraXBwaW5nIGRvd25sb2FkXG4iKTsKKwkJCXJldHVybjsKKworCQlkZWZhdWx0OgorCQkJcmV0dXJuOworCX0KKworCisJZm9yICg7OykgeworCQlyZWNvcmQgPSAoc3RydWN0IGVkZ2VfZmlybXdhcmVfaW1hZ2VfcmVjb3JkICopZmlybXdhcmU7CisJCXJlc3BvbnNlID0gc3JhbV93cml0ZSAoZWRnZV9zZXJpYWwtPnNlcmlhbCwgbGUxNl90b19jcHUocmVjb3JkLT5FeHRBZGRyKSwgbGUxNl90b19jcHUocmVjb3JkLT5BZGRyKSwgbGUxNl90b19jcHUocmVjb3JkLT5MZW4pLCAmcmVjb3JkLT5EYXRhWzBdKTsKKwkJaWYgKHJlc3BvbnNlIDwgMCkgeworCQkJZGV2X2VycigmZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsICJzcmFtX3dyaXRlIGZhaWxlZCAoJXgsICV4LCAlZClcbiIsIGxlMTZfdG9fY3B1KHJlY29yZC0+RXh0QWRkciksIGxlMTZfdG9fY3B1KHJlY29yZC0+QWRkciksIGxlMTZfdG9fY3B1KHJlY29yZC0+TGVuKSk7CisJCQlicmVhazsKKwkJfQorCQlmaXJtd2FyZSArPSBzaXplb2YgKHN0cnVjdCBlZGdlX2Zpcm13YXJlX2ltYWdlX3JlY29yZCkgKyBsZTE2X3RvX2NwdShyZWNvcmQtPkxlbik7CisJCWlmIChmaXJtd2FyZSA+PSAmRmlybXdhcmVJbWFnZVtJbWFnZVNpemVdKSB7CisJCQlicmVhazsKKwkJfQorCX0KKworCWRiZygic2VuZGluZyBleGVjX2RsX2NvZGUiKTsKKwlyZXNwb25zZSA9IHVzYl9jb250cm9sX21zZyAoZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LCAKKwkJCQkgICAgdXNiX3NuZGN0cmxwaXBlKGVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldiwgMCksIAorCQkJCSAgICBVU0JfUkVRVUVTVF9JT05fRVhFQ19ETF9DT0RFLCAKKwkJCQkgICAgMHg0MCwgMHg0MDAwLCAweDAwMDEsIE5VTEwsIDAsIDMwMDApOworCisJcmV0dXJuOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBlZGdlX3N0YXJ0dXAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBlZGdlX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWw7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OworCWludCBpOworCisJZGV2ID0gc2VyaWFsLT5kZXY7CisKKwkvKiBjcmVhdGUgb3VyIHByaXZhdGUgc2VyaWFsIHN0cnVjdHVyZSAqLworCWVkZ2Vfc2VyaWFsID0ga21hbGxvYyAoc2l6ZW9mKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZWRnZV9zZXJpYWwgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0IChlZGdlX3NlcmlhbCwgMCwgc2l6ZW9mKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwpKTsKKwlzcGluX2xvY2tfaW5pdCgmZWRnZV9zZXJpYWwtPmVzX2xvY2spOworCWVkZ2Vfc2VyaWFsLT5zZXJpYWwgPSBzZXJpYWw7CisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIGVkZ2Vfc2VyaWFsKTsKKworCS8qIGdldCB0aGUgbmFtZSBmb3IgdGhlIGRldmljZSBmcm9tIHRoZSBkZXZpY2UgKi8KKwlpZiAoIChpID0gZ2V0X3N0cmluZyhkZXYsIGRldi0+ZGVzY3JpcHRvci5pTWFudWZhY3R1cmVyLCAmZWRnZV9zZXJpYWwtPm5hbWVbMF0pKSAhPSAwKSB7CisJCWVkZ2Vfc2VyaWFsLT5uYW1lW2ktMV0gPSAnICc7CisJfQorCisJZ2V0X3N0cmluZyhkZXYsIGRldi0+ZGVzY3JpcHRvci5pUHJvZHVjdCwgJmVkZ2Vfc2VyaWFsLT5uYW1lW2ldKTsKKworCWRldl9pbmZvKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgZGV0ZWN0ZWRcbiIsIGVkZ2Vfc2VyaWFsLT5uYW1lKTsKKworCS8qIGdldCB0aGUgbWFudWZhY3R1cmluZyBkZXNjcmlwdG9yIGZvciB0aGlzIGRldmljZSAqLworCWdldF9tYW51ZmFjdHVyaW5nX2Rlc2MgKGVkZ2Vfc2VyaWFsKTsKKworCS8qIGdldCB0aGUgYm9vdCBkZXNjcmlwdG9yICovCisJZ2V0X2Jvb3RfZGVzYyAoZWRnZV9zZXJpYWwpOworCisJZ2V0X3Byb2R1Y3RfaW5mbyhlZGdlX3NlcmlhbCk7CisKKwkvKiBzZXQgdGhlIG51bWJlciBvZiBwb3J0cyBmcm9tIHRoZSBtYW51ZmFjdHVyaW5nIGRlc2NyaXB0aW9uICovCisJLyogc2VyaWFsLT5udW1fcG9ydHMgPSBzZXJpYWwtPnByb2R1Y3RfaW5mby5OdW1Qb3J0czsgKi8KKwlpZiAoZWRnZV9zZXJpYWwtPnByb2R1Y3RfaW5mby5OdW1Qb3J0cyAhPSBzZXJpYWwtPm51bV9wb3J0cykgeworCQl3YXJuKCIlcyAtIERldmljZSBSZXBvcnRlZCAlZCBzZXJpYWwgcG9ydHMgdnMgY29yZSAiCisJCSAgICAgInRoaW5raW5nIHdlIGhhdmUgJWQgcG9ydHMsIGVtYWlsIGdyZWdAa3JvYWguY29tIHRoaXMgaW5mby4iLAorCQkgICAgIF9fRlVOQ1RJT05fXywgZWRnZV9zZXJpYWwtPnByb2R1Y3RfaW5mby5OdW1Qb3J0cywgCisJCSAgICAgc2VyaWFsLT5udW1fcG9ydHMpOworCX0KKworCWRiZygiJXMgLSB0aW1lIDEgJWxkIiwgX19GVU5DVElPTl9fLCBqaWZmaWVzKTsKKworCS8qIG5vdyBsb2FkIHRoZSBhcHBsaWNhdGlvbiBmaXJtd2FyZSBpbnRvIHRoaXMgZGV2aWNlICovCisJbG9hZF9hcHBsaWNhdGlvbl9maXJtd2FyZSAoZWRnZV9zZXJpYWwpOworCisJZGJnKCIlcyAtIHRpbWUgMiAlbGQiLCBfX0ZVTkNUSU9OX18sIGppZmZpZXMpOworCisJLyogQ2hlY2sgY3VycmVudCBFZGdlcG9ydCBFRVBST00gYW5kIHVwZGF0ZSBpZiBuZWNlc3NhcnkgKi8KKwl1cGRhdGVfZWRnZXBvcnRfRTJQUk9NIChlZGdlX3NlcmlhbCk7CisJCisJZGJnKCIlcyAtIHRpbWUgMyAlbGQiLCBfX0ZVTkNUSU9OX18sIGppZmZpZXMpOworCisJLyogc2V0IHRoZSBjb25maWd1cmF0aW9uIHRvIHVzZSAjMSAqLworLy8JZGJnKCJzZXRfY29uZmlndXJhdGlvbiAxIik7CisvLwl1c2Jfc2V0X2NvbmZpZ3VyYXRpb24gKGRldiwgMSk7CisKKwkvKiB3ZSBzZXQgdXAgdGhlIHBvaW50ZXJzIHRvIHRoZSBlbmRwb2ludHMgaW4gdGhlIGVkZ2Vfb3BlbiBmdW5jdGlvbiwgCisJICogYXMgdGhlIHN0cnVjdHVyZXMgYXJlbid0IGNyZWF0ZWQgeWV0LiAqLworCisJLyogc2V0IHVwIG91ciBwb3J0IHByaXZhdGUgc3RydWN0dXJlcyAqLworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCWVkZ2VfcG9ydCA9IGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgZWRnZXBvcnRfcG9ydCksIEdGUF9LRVJORUwpOworCQlpZiAoZWRnZV9wb3J0ID09IE5VTEwpIHsKKwkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgTlVMTCk7CisJCQlrZnJlZShlZGdlX3NlcmlhbCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQltZW1zZXQgKGVkZ2VfcG9ydCwgMCwgc2l6ZW9mKHN0cnVjdCBlZGdlcG9ydF9wb3J0KSk7CisJCXNwaW5fbG9ja19pbml0KCZlZGdlX3BvcnQtPmVwX2xvY2spOworCQllZGdlX3BvcnQtPnBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIGVkZ2VfcG9ydCk7CisJfQorCQorCXJldHVybiAwOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBlZGdlX3NodXRkb3duCisgKglUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgZGV2aWNlIGlzIHJlbW92ZWQgZnJvbSB0aGUgdXNiIGJ1cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgZWRnZV9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgaTsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJLyogc3RvcCByZWFkcyBhbmQgd3JpdGVzIG9uIGFsbCBwb3J0cyAqLworCWZvciAoaT0wOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQlrZnJlZSAodXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSkpOworCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldLCAgTlVMTCk7CisJfQorCWtmcmVlICh1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCkpOworCXVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCBOVUxMKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZWRnZXBvcnRfaW5pdAorICoJVGhpcyBpcyBjYWxsZWQgYnkgdGhlIG1vZHVsZSBzdWJzeXN0ZW0sIG9yIG9uIHN0YXJ0dXAgdG8gaW5pdGlhbGl6ZSB1cworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IF9faW5pdCBlZGdlcG9ydF9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmVkZ2Vwb3J0XzJwb3J0X2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfMnBvcnRfZGV2aWNlX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmVkZ2Vwb3J0XzRwb3J0X2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfNHBvcnRfZGV2aWNlX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmVkZ2Vwb3J0Xzhwb3J0X2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfOHBvcnRfZGV2aWNlX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmaW9fZHJpdmVyKTsKKwlpZiAocmV0dmFsKSAKKwkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOworCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlyZXR1cm4gMDsKKworZmFpbGVkX3VzYl9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmVkZ2Vwb3J0Xzhwb3J0X2RldmljZSk7CitmYWlsZWRfOHBvcnRfZGV2aWNlX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmZWRnZXBvcnRfNHBvcnRfZGV2aWNlKTsKK2ZhaWxlZF80cG9ydF9kZXZpY2VfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZlZGdlcG9ydF8ycG9ydF9kZXZpY2UpOworZmFpbGVkXzJwb3J0X2RldmljZV9yZWdpc3RlcjoKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBlZGdlcG9ydF9leGl0CisgKglDYWxsZWQgd2hlbiB0aGUgZHJpdmVyIGlzIGFib3V0IHRvIGJlIHVubG9hZGVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBfX2V4aXQgZWRnZXBvcnRfZXhpdCAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlciAoJmlvX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmZWRnZXBvcnRfMnBvcnRfZGV2aWNlKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZlZGdlcG9ydF80cG9ydF9kZXZpY2UpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmVkZ2Vwb3J0Xzhwb3J0X2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KGVkZ2Vwb3J0X2luaXQpOworbW9kdWxlX2V4aXQoZWRnZXBvcnRfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOworCittb2R1bGVfcGFyYW0obG93X2xhdGVuY3ksIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MobG93X2xhdGVuY3ksICJMb3cgbGF0ZW5jeSBlbmFibGVkIG9yIG5vdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTEyZDdhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKglpb19lZGdlcG9ydC5oCUVkZ2Vwb3J0IExpbnV4IEludGVyZmFjZSBkZWZpbml0aW9ucworICoKKyAqCUNvcHlyaWdodCAoQykgMjAwMCBJbnNpZGUgT3V0IE5ldHdvcmtzLCBJbmMuCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmICFkZWZpbmVkKF9JT19FREdFUE9SVF9IXykKKyNkZWZpbmUJX0lPX0VER0VQT1JUX0hfCisKKworI2RlZmluZSBNQVhfUlMyMzJfUE9SVFMJCTgJLyogTWF4ICMgb2YgUlMtMjMyIHBvcnRzIHBlciBkZXZpY2UgKi8KKworLyogdHlwZWRlZnMgdGhhdCB0aGUgaW5zaWRlb3V0IGhlYWRlcnMgbmVlZCAqLworI2lmbmRlZiBUUlVFCisJI2RlZmluZSBUUlVFCQkoMSkKKyNlbmRpZgorI2lmbmRlZiBGQUxTRQorCSNkZWZpbmUgRkFMU0UJCSgwKQorI2VuZGlmCisjaWZuZGVmIExPVzgKKwkjZGVmaW5lIExPVzgoYSkJCSgodW5zaWduZWQgY2hhcikoYSAmIDB4ZmYpKQorI2VuZGlmCisjaWZuZGVmIEhJR0g4CisJI2RlZmluZSBISUdIOChhKQkoKHVuc2lnbmVkIGNoYXIpKChhICYgMHhmZjAwKSA+PiA4KSkKKyNlbmRpZgorI2lmbmRlZiBOVU1fRU5UUklFUworCSNkZWZpbmUgTlVNX0VOVFJJRVMoeCkJKHNpemVvZih4KS9zaXplb2YoKHgpWzBdKSkKKyNlbmRpZgorCisjaWZuZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgX19LRVJORUxfXworI2VuZGlmCisKKyNpbmNsdWRlICJpb191c2J2ZW5kLmgiCisKKworCisvKiBUaGUgZm9sbG93aW5nIHRhYmxlIGlzIHVzZWQgdG8gbWFwIHRoZSBVU0J4IHBvcnQgbnVtYmVyIHRvIAorICogdGhlIGRldmljZSBzZXJpYWwgbnVtYmVyIChvciBwaHlzaWNhbCBVU0IgcGF0aCksICovCisjZGVmaW5lIE1BWF9FREdFUE9SVFMJNjQKKworc3RydWN0IGNvbU1hcHBlciB7CisJY2hhcglTZXJpYWxOdW1iZXJbTUFYX1NFUklBTE5VTUJFUl9MRU4rMV07CS8qIFNlcmlhbCBudW1iZXIvdXNiIHBhdGggKi8KKwlpbnQJbnVtUG9ydHM7CQkJICAgICAgIAkvKiBOdW1iZXIgb2YgcG9ydHMgKi8KKwlpbnQJT3JpZ2luYWxbTUFYX1JTMjMyX1BPUlRTXTsJICAgICAgIAkvKiBQb3J0IG51bWJlcnMgc2V0IGJ5IElPQ1RMICovCisJaW50CVBvcnRbTUFYX1JTMjMyX1BPUlRTXTsJCSAgICAgICAJLyogQWN0dWFsIHVzZWQgcG9ydCBudW1iZXJzICovCit9OworCisKKyNkZWZpbmUgRURHRVBPUlRfQ09ORklHX0RFVklDRSAiL3Byb2MvZWRnZXBvcnQiCisKKy8qIC9wcm9jL2VkZ2Vwb3J0IEludGVyZmFjZQorICogVGhpcyBpbnRlcmZhY2UgdXNlcyByZWFkL3dyaXRlL2xzZWVrIGludGVyZmFjZSB0byB0YWxrIHRvIHRoZSBlZGdlcG9ydCBkcml2ZXIKKyAqIHRoZSBmb2xsb3dpbmcgcmVhZCBmdW5jdGlvbnMgYXJlIHN1cHBvcnRlZDogKi8KKyNkZWZpbmUgUFJPQ19HRVRfTUFQUElOR19UT19QQVRIIAkxCisjZGVmaW5lIFBST0NfR0VUX0NPTV9FTlRSWQkJMgorI2RlZmluZSBQUk9DX0dFVF9FREdFX01BTlVGX0RFU0NSSVBUT1IJMworI2RlZmluZSBQUk9DX0dFVF9CT09UX0RFU0NSSVBUT1IJNAorI2RlZmluZSBQUk9DX0dFVF9QUk9EVUNUX0lORk8JCTUKKyNkZWZpbmUgUFJPQ19HRVRfU1RSSU5HUwkJNgorI2RlZmluZSBQUk9DX0dFVF9DVVJSRU5UX0NPTV9NQVBQSU5HCTcKKworLyogVGhlIHBhcmFtZXRlcnMgdG8gdGhlIGxzZWVrKCkgZm9yIHRoZSByZWFkIGlzOiAqLworI2RlZmluZSBQUk9DX1JFQURfU0VUVVAoQ29tbWFuZCwgQXJndW1lbnQpCSgoQ29tbWFuZCkgKyAoKEFyZ3VtZW50KTw8OCkpCisKKworLyogdGhlIGZvbGxvd2luZyB3cml0ZSBmdW5jdGlvbnMgYXJlIHN1cHBvcnRlZDogKi8KKyNkZWZpbmUgUFJPQ19TRVRfQ09NX01BUFBJTkcgCQkxCisjZGVmaW5lIFBST0NfU0VUX0NPTV9FTlRSWQkJMgorCisKKy8qIFRoZSBmb2xsb3dpbmcgc3R1cmN0dXJlIGlzIHBhc3NlZCB0byB0aGUgd3JpdGUgKi8KK3N0cnVjdCBwcm9jV3JpdGUgeworCWludAlDb21tYW5kOworCXVuaW9uIHsKKwkJc3RydWN0IGNvbU1hcHBlcglFbnRyeTsKKwkJaW50CQkJQ29tTWFwcGluZ0Jhc2VkT25VU0JQb3J0OwkvKiBCb29sZWFuIHZhbHVlICovCisJfSB1OworfTsKKworLyoKKyAqCVByb2R1Y3QgaW5mb3JtYXRpb24gcmVhZCBmcm9tIHRoZSBFZGdlcG9ydAorICovCitzdHJ1Y3QgZWRnZXBvcnRfcHJvZHVjdF9pbmZvIHsKKwlfX3UxNglQcm9kdWN0SWQ7CQkJLyogUHJvZHVjdCBJZGVudGlmaWVyICovCisJX191OAlOdW1Qb3J0czsJCQkvKiBOdW1iZXIgb2YgcG9ydHMgb24gZWRnZXBvcnQgKi8KKwlfX3U4CVByb2RJbmZvVmVyOwkJCS8qIFdoYXQgdmVyc2lvbiBvZiBzdHJ1Y3R1cmUgaXMgdGhpcz8gKi8KKworCV9fdTMyCUlzU2VydmVyICAgICAgICA6MTsJCS8qIFNldCBpZiBTZXJ2ZXIgKi8KKwlfX3UzMglJc1JTMjMyICAgICAgICAgOjE7CQkvKiBTZXQgaWYgUlMtMjMyIHBvcnRzIGV4aXN0ICovCisJX191MzIJSXNSUzQyMiAgICAgICAgIDoxOwkJLyogU2V0IGlmIFJTLTQyMiBwb3J0cyBleGlzdCAqLworCV9fdTMyCUlzUlM0ODUgICAgICAgICA6MTsJCS8qIFNldCBpZiBSUy00ODUgcG9ydHMgZXhpc3QgKi8KKwlfX3UzMglJc1Jlc2VydmVkICAgICAgOjI4OwkJLyogUmVzZXJ2ZWQgZm9yIGxhdGVyIGV4cGFuc2lvbiAqLworCisJX191OAlSb21TaXplOwkJCS8qIFNpemUgb2YgUk9NL0UyUFJPTSBpbiBLICovCisJX191OAlSYW1TaXplOwkJCS8qIFNpemUgb2YgZXh0ZXJuYWwgUkFNIGluIEsgKi8KKwlfX3U4CUNwdVJldjsJCQkJLyogQ1BVIHJldmlzaW9uIGxldmVsIChjaGcgb25seSBpZiBzL3cgdmlzaWJsZSkgKi8KKwlfX3U4CUJvYXJkUmV2OwkJCS8qIFBDQiByZXZpc2lvbiBsZXZlbCAoY2hnIG9ubHkgaWYgcy93IHZpc2libGUpICovCisKKwlfX3U4CUJvb3RNYWpvclZlcnNpb247CQkvKiBCb290IEZpcm13YXJlIHZlcnNpb246IHh4LiAqLworCV9fdTgJQm9vdE1pbm9yVmVyc2lvbjsJCS8qCSAgIAkJICB5eS4gKi8KKwlfX2xlMTYJQm9vdEJ1aWxkTnVtYmVyOwkJLyoJCSAgICAgIAkgIHp6enogKExFIGZvcm1hdCkgKi8KKworCV9fdTgJRmlybXdhcmVNYWpvclZlcnNpb247CQkvKiBPcGVyYXRpb25hbCBGaXJtd2FyZSB2ZXJzaW9uOnh4LiAqLworCV9fdTgJRmlybXdhcmVNaW5vclZlcnNpb247CQkvKgkJCQl5eS4gKi8KKwlfX2xlMTYJRmlybXdhcmVCdWlsZE51bWJlcjsJCS8qCQkJCXp6enogKExFIGZvcm1hdCkgKi8KKworCV9fdTgJTWFudWZhY3R1cmVEZXNjRGF0ZVszXTsJCS8qIE1NL0REL1lZIHdoZW4gZGVzY3JpcHRvciB0ZW1wbGF0ZSB3YXMgY29tcGlsZWQgKi8KKwlfX3U4CVVudXNlZDFbMV07CQkJLyogQXZhaWxhYmxlICovCisKKwlfX3U4CWlEb3dubG9hZEZpbGU7CQkJLyogV2hhdCB0byBkb3dubG9hZCB0byBFUGlDIGRldmljZSAqLworCV9fdTgJVW51c2VkMlsyXTsJCQkvKiBBdmFpbGFibGUgKi8KK307CisKKy8qCisgKglFZGdlcG9ydCBTdHJpbmdibG9jayBTdHJpbmcgbG9jYXRpb25zCisgKi8KKyNkZWZpbmUgRURHRVNUUklOR19NQU5VRk5BTUUJCTEJLyogTWFudWZhY3R1cmUgTmFtZSAqLworI2RlZmluZSBFREdFU1RSSU5HX1BST0ROQU1FCQkyCS8qIFByb2R1Y3QgTmFtZSAqLworI2RlZmluZSBFREdFU1RSSU5HX1NFUklBTE5VTQkJMwkvKiBTZXJpYWwgTnVtYmVyICovCisjZGVmaW5lIEVER0VTVFJJTkdfQVNTRU1OVU0JCTQJLyogQXNzZW1ibHkgTnVtYmVyICovCisjZGVmaW5lIEVER0VTVFJJTkdfT0VNQVNTRU1OVU0JCTUJLyogT0VNIEFzc2VtYmx5IE51bWJlciAqLworI2RlZmluZSBFREdFU1RSSU5HX01BTlVGREFURQkJNgkvKiBNYW51ZmFjdHVyZSBEYXRlICovCisjZGVmaW5lIEVER0VTVFJJTkdfT1JJR1NFUklBTE5VTQk3CS8qIFNlcmlhbCBOdW1iZXIgKi8KKworc3RydWN0IHN0cmluZ19ibG9jayB7CisJX191MTYJTnVtU3RyaW5nczsJCQkvKiBOdW1iZXIgb2Ygc3RyaW5ncyBpbiBibG9jayAqLworCV9fdTE2CVN0cmluZ3NbMV07CQkJLyogU3RhcnQgb2Ygc3RyaW5nIGJsb2NrICovCit9OworCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZndfYm9vdC5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2Z3X2Jvb3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTlmYWZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2Z3X2Jvb3QuaApAQCAtMCwwICsxLDU1NiBAQAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8qIEVkZ2Vwb3J0LzQgQmluYXJ5IEltYWdlCisvLyogR2VuZXJhdGVkIGJ5IEhFWDJDIHYxLjA2CisvLyogQ29weXJpZ2h0IChDKSAxOTk4IEluc2lkZSBPdXQgTmV0d29ya3MsIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy8vKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLy8qCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisvLyoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisvL0ltYWdlIHN0cnVjdHVyZSBkZWZpbml0aW9uCisjaWYgIWRlZmluZWQoREVGSU5FRF9FREdFX0ZJUk1XQVJFX0lNQUdFX1JFQ09SRCkKKyNkZWZpbmUgREVGSU5FRF9FREdFX0ZJUk1XQVJFX0lNQUdFX1JFQ09SRAorCXN0cnVjdCBlZGdlX2Zpcm13YXJlX2ltYWdlX3JlY29yZCB7CisJCV9fbGUxNiBFeHRBZGRyOworCQlfX2xlMTYgQWRkcjsKKwkJX19sZTE2IExlbjsKKwkJdW5zaWduZWQgY2hhciAgRGF0YVswXTsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCXN0cnVjdCBlZGdlX2Zpcm13YXJlX3ZlcnNpb25faW5mbyB7CisJCXVuc2lnbmVkIGNoYXIJIE1ham9yVmVyc2lvbjsKKwkJdW5zaWduZWQgY2hhciAgTWlub3JWZXJzaW9uOworCQl1bnNpZ25lZCBzaG9ydCBCdWlsZE51bWJlcjsKKwl9OworCisjZW5kaWYKKworI2lmICFkZWZpbmVkKElNQUdFX0FSUkFZX05BTUUpCisjZGVmaW5lIElNQUdFX0FSUkFZX05BTUUJCUZpcm13YXJlSW1hZ2UKKyNkZWZpbmUgSU1BR0VfVkVSU0lPTl9OQU1FCUZpcm13YXJlSW1hZ2VWZXJzaW9uCisjZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgSU1BR0VfQVJSQVlfTkFNRVtdID0geworCisvLyBTZWdtZW50ICMxLCBTdGFydCBBZGRyZXNzIDAwZmYwMDAwLCBMZW5ndGggNgorMHhmZiwweDAwLDB4MDAsMHgwMCwweDA2LDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMywgCisKKy8vIFNlZ21lbnQgIzIsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMGIsIExlbmd0aCAzCisweGZmLDB4MDAsMHgwYiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDBiLCAKKworLy8gU2VnbWVudCAjMywgU3RhcnQgQWRkcmVzcyAwMGZmMDAxMywgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDEzLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDEsIDB4YjgsIAorCisvLyBTZWdtZW50ICM0LCBTdGFydCBBZGRyZXNzIDAwZmYwMDFiLCBMZW5ndGggMworMHhmZiwweDAwLDB4MWIsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgxYiwgCisKKy8vIFNlZ21lbnQgIzUsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMjMsIExlbmd0aCAzCisweGZmLDB4MDAsMHgyMywweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDIzLCAKKworLy8gU2VnbWVudCAjNiwgU3RhcnQgQWRkcmVzcyAwMGZmMDAyYiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDJiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4MmIsIAorCisvLyBTZWdtZW50ICM3LCBTdGFydCBBZGRyZXNzIDAwZmYwMDMzLCBMZW5ndGggMworMHhmZiwweDAwLDB4MzMsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgzMywgCisKKy8vIFNlZ21lbnQgIzgsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwM2IsIExlbmd0aCAzCisweGZmLDB4MDAsMHgzYiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDNiLCAKKworLy8gU2VnbWVudCAjOSwgU3RhcnQgQWRkcmVzcyAwMGZmMDA0MywgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDQzLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDEsIDB4YmQsIAorCisvLyBTZWdtZW50ICMxMCwgU3RhcnQgQWRkcmVzcyAwMGZmMDA0YiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDRiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDEsIDB4ZDAsIAorCisvLyBTZWdtZW50ICMxMSwgU3RhcnQgQWRkcmVzcyAwMGZmMDA1MywgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDUzLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDEsIDB4MjEsIAorCisvLyBTZWdtZW50ICMxMiwgU3RhcnQgQWRkcmVzcyAwMGZmMDA3YiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDdiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4N2IsIAorCisvLyBTZWdtZW50ICMxMywgU3RhcnQgQWRkcmVzcyAwMGZmMDA4MCwgTGVuZ3RoIDM1OAorMHhmZiwweDAwLDB4ODAsMHgwMCwweDY2LDB4MDEsCisgICAgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3YSwgMHhiMywgMHgzZiwgMHhmMiwgMHg3ZSwgMHhmOCwgMHgwMCwgMHgyMywgMHg3ZSwgMHgwMCwgMHgwMSwgMHg3ZSwgMHgxMCwgCisgICAgMHgwMCwgMHgxMiwgMHgwNywgMHg1ZiwgMHg2OSwgMHgyMCwgMHgwMCwgMHgwYSwgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwNSwgMHg3NSwgMHg5MCwgCisgICAgMHgwZCwgMHg4MCwgMHgwMywgMHg3NSwgMHg5MCwgMHgxZCwgMHhkMiwgMHhiNSwgMHg3ZSwgMHgwMCwgMHgwMCwgMHhhNSwgMHhkOCwgMHhmZCwgMHg3NSwgMHhhOCwgCisgICAgMHgwMCwgMHg3NSwgMHhiMSwgMHgwMCwgMHhhOSwgMHhkNSwgMHg4NywgMHhjYSwgMHgyOSwgMHgxMiwgMHgwOSwgMHhjYywgMHgxMiwgMHgwOSwgMHhhMCwgMHhmNSwgCisgICAgMHgwOSwgMHg3YSwgMHhhMSwgMHgyMCwgMHgxMiwgMHgwMSwgMHhlNiwgMHhkYSwgMHgyOSwgMHhhOSwgMHhkMCwgMHhjNywgMHg3ZSwgMHgwMCwgMHgwNSwgMHg3YSwgCisgICAgMHgwMSwgMHhmMSwgMHg3NSwgMHhlMSwgMHgxMCwgMHhhOSwgMHhkNywgMHhmNCwgMHhhOSwgMHhkNywgMHhlNCwgMHhhNSwgMHhkOCwgMHhmMSwgMHg3NSwgMHhmMSwgCisgICAgMHgwMCwgMHg3NSwgMHhlMSwgMHgzZiwgMHg3NSwgMHhhMiwgMHgwMywgMHg3NSwgMHhhMywgMHgwMCwgMHg3NSwgMHhjMCwgMHgwMCwgMHg3NSwgMHhjMSwgMHgwMCwgCisgICAgMHhhOSwgMHhkMSwgMHhiMSwgMHhhOSwgMHhkMCwgMHhiMSwgMHhhOSwgMHhkNSwgMHhkMywgMHhkMiwgMHhhZiwgMHhlNCwgMHg3ZSwgMHgwNCwgMHgyOCwgMHgwMCwgCisgICAgMHg4ZCwgMHhlZiwgMHgxYiwgMHgwNCwgMHg3OCwgMHhmYSwgMHgwNCwgMHhhOSwgMHgzNCwgMHhkMywgMHgwMywgMHgzMCwgMHhlMCwgMHhlZSwgMHhiZSwgMHgyNCwgCisgICAgMHgwMCwgMHgwMCwgMHg3OCwgMHgwNSwgMHg2MywgMHg5MCwgMHgzMCwgMHg4MCwgMHhlMywgMHhiMiwgMHg5NSwgMHg4MCwgMHhkZiwgMHhiZSwgMHhiMCwgMHgwMiwgCisgICAgMHgyMiwgMHhjMCwgMHhkMCwgMHhhOSwgMHgyMCwgMHhkZiwgMHgwZiwgMHhhOSwgMHgzMSwgMHhkZiwgMHgwMywgMHgwMiwgMHgwMSwgMHhiNSwgMHg3NSwgMHgwOCwgCisgICAgMHgwMSwgMHgxMiwgMHgwOCwgMHgzMywgMHg4MCwgMHhmZSwgMHg3NSwgMHgwOCwgMHhmZSwgMHgxMiwgMHgwOCwgMHgzMywgMHg3NSwgMHhhOCwgMHgwMCwgMHg3ZSwgCisgICAgMHhiMywgMHgzZiwgMHhmMiwgMHgzMCwgMHhlMCwgMHg0YiwgMHgzMCwgMHgwMSwgMHg0NiwgMHhjMiwgMHg5MiwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgCisgICAgMHgxMSwgMHgwOSwgMHg3NCwgMHgwOCwgMHgxOSwgMHhiMiwgMHgwMCwgMHgxMCwgMHg3NCwgMHgwZSwgMHgxOSwgMHhiMiwgMHgwMCwgMHgwNCwgMHgyZSwgMHgyNCwgCisgICAgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHhlZCwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgwOSwgMHhlNCwgMHhkNSwgMHhlMCwgMHhmZCwgCisgICAgMHgwOSwgMHhiMiwgMHgwMCwgMHgwOCwgMHgyMCwgMHhlMCwgMHgwYSwgMHgwOSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg4MCwgCisgICAgMHhlYiwgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHhlNCwgMHg0MywgMHg5MCwgMHgzMCwgMHhkMiwgMHhhYSwgMHg4MCwgMHgwNSwgMHhkMiwgCisgICAgMHhhYSwgMHg0MywgMHg5MCwgMHgzNCwgMHhkMiwgMHhhZiwgMHhhOSwgMHhkMSwgMHg4NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHgxMSwgCisgICAgMHhkZiwgMHgwMywgMHhhOSwgMHhkMiwgMHhkZiwgMHg3NSwgMHgwOCwgMHhmZiwgMHgxMiwgMHgwOCwgMHgzMywgMHhjMCwgMHhkMSwgMHhjYSwgMHgwMiwgMHhmZiwgCisgICAgMHhjYSwgMHgwNiwgMHg4MywgMHgwMCwgMHgzMiwgMHhkMCwgMHhkMCwgMHgzMiwgMHhjMiwgMHg4YiwgMHhjMiwgMHhhYSwgMHgzMiwgMHg3NSwgMHgwOCwgMHgwOCwgCisgICAgMHgxMiwgMHgwOCwgMHgzMywgMHhhOSwgMHhjMCwgMHhiMSwgMHhhOSwgMHhjNSwgMHhkMywgMHhhOSwgMHhjNiwgMHhkMywgMHhhOSwgMHhkMiwgMHhiMSwgMHgzMiwgCisgICAgMHhjYSwgMHhiOCwgMHg3NSwgMHgwOCwgMHgwMiwgMHgxMiwgMHgwOCwgMHgzMywgMHhlNSwgMHhjMCwgMHg1NCwgMHgwMywgMHg2OCwgMHgwNSwgMHgxMiwgMHgwMSwgCisgICAgMHhlZSwgMHg4MCwgMHhmNSwgMHhkYSwgMHhiOCwgMHgzMiwgCisKKy8vIFNlZ21lbnQgIzE0LCBTdGFydCBBZGRyZXNzIDAwZmYxYmNhLCBMZW5ndGggMQorMHhmZiwweDAwLDB4Y2EsMHgxYiwweDAxLDB4MDAsCisgICAgMHgwMCwgCisKKy8vIFNlZ21lbnQgIzE1LCBTdGFydCBBZGRyZXNzIDAwZmYwMWU2LCBMZW5ndGggMTYxMworMHhmZiwweDAwLDB4ZTYsMHgwMSwweDRkLDB4MDYsCisgICAgMHhlNCwgMHg3YSwgMHhiMywgMHgzZiwgMHhmMSwgMHgwMiwgMHgwMiwgMHg2MywgMHhjYSwgMHgwYiwgMHhjYSwgMHgxYiwgMHhjYSwgMHgyYiwgMHhjYSwgMHgzYiwgCisgICAgMHhjYSwgMHg0YiwgMHhjYSwgMHg1YiwgMHhjYSwgMHg2YiwgMHhjYSwgMHg3YiwgMHhjYSwgMHhlYiwgMHhjMCwgMHhmMSwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyYiwgCisgICAgMHhiNCwgMHgwMCwgMHgwMiwgMHg4MCwgMHgxOSwgMHhiNCwgMHgwMSwgMHgxNiwgMHgzMCwgMHhjMCwgMHgwOCwgMHg3NSwgMHhmMSwgMHgwMCwgMHgxMiwgMHgwMiwgCisgICAgMHg0ZCwgMHg4MCwgMHgxZiwgMHgzMCwgMHhjMSwgMHgxYywgMHg3NSwgMHhmMSwgMHgwMCwgMHgxMiwgMHgwMiwgMHhkZSwgMHg4MCwgMHgxNCwgMHgzMCwgMHhjMSwgCisgICAgMHgwOCwgMHg3NSwgMHhmMSwgMHgwMCwgMHgxMiwgMHgwMiwgMHhkZSwgMHg4MCwgMHgwOSwgMHgzMCwgMHhjMCwgMHgwNiwgMHg3NSwgMHhmMSwgMHgwMCwgMHgxMiwgCisgICAgMHgwMiwgMHg0ZCwgMHhkMCwgMHhmMSwgMHhkYSwgMHhlYiwgMHhkYSwgMHg3YiwgMHhkYSwgMHg2YiwgMHhkYSwgMHg1YiwgMHhkYSwgMHg0YiwgMHhkYSwgMHgzYiwgCisgICAgMHhkYSwgMHgyYiwgMHhkYSwgMHgxYiwgMHhkYSwgMHgwYiwgMHgyMiwgMHhjMiwgMHhjMCwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyYiwgMHhiNCwgMHgwMiwgMHgwNywgCisgICAgMHgxMiwgMHgwMiwgMHg2ZiwgMHgwMiwgMHgwMiwgMHg2MywgMHgyMiwgMHhiNCwgMHgwMSwgMHhmYywgMHgwMiwgMHgwMiwgMHhhOSwgMHg3ZSwgMHgwMCwgMHgwMCwgCisgICAgMHg3YSwgMHgwMywgMHgwMSwgMHgyYiwgMHg3YSwgMHgwMywgMHgwMSwgMHgyYywgMHgyMiwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyMywgMHg1NCwgMHg2MCwgMHg2MCwgCisgICAgMHgwNSwgMHhiNCwgMHg0MCwgMHgxNSwgMHg4MCwgMHgxMywgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNCwgMHhiNCwgMHgwNSwgMHgwYywgMHg3NSwgMHgwOCwgMHg3MSwgCisgICAgMHgxMiwgMHgwOCwgMHgzMywgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNiwgMHhmNSwgMHg4ZiwgMHgyMiwgMHg3NSwgMHhmNiwgMHgwMCwgMHgyMiwgMHhiZSwgMHg1NywgCisgICAgMHgwMSwgMHgyOSwgMHgyOCwgMHgwNCwgMHg3ZSwgMHg1NywgMHgwMSwgMHgyOSwgMHg3YSwgMHgwZiwgMHgwMSwgMHgyZSwgMHg3YSwgMHg1NywgMHgwMSwgMHgzMiwgCisgICAgMHgwMiwgMHgwMiwgMHhhOSwgMHg3ZSwgMHhlZiwgMHgwMSwgMHgyZSwgMHg3ZSwgMHhmNywgMHgwMSwgMHgzMiwgMHg3ZSwgMHgwNywgMHgwMSwgMHgzMiwgMHg0ZCwgCisgICAgMHgwMCwgMHg2OCwgMHgyMSwgMHg3ZSwgMHgwMCwgMHgwMCwgMHg3ZSwgMHhlYiwgMHhiMCwgMHhmNSwgMHhmMywgMHhhMywgMHhhNSwgMHgwOCwgMHgxYiwgMHhmNCwgCisgICAgMHg2OCwgMHgwNCwgMHhhNSwgMHhiOCwgMHgwOCwgMHhmMCwgMHg3YSwgMHhlZiwgMHgwMSwgMHgyZSwgMHg3YSwgMHhmNywgMHgwMSwgMHgzMiwgMHg3NSwgMHgwOCwgCisgICAgMHgwNiwgMHgxMiwgMHgwOCwgMHgzMywgMHg3YSwgMHgwMSwgMHhmNiwgMHgyMiwgMHhjMiwgMHhjMSwgMHg3NSwgMHgwOCwgMHgwMywgMHgxMiwgMHgwOCwgMHgzMywgCisgICAgMHhhOSwgMHgzNiwgMHhlMiwgMHgxNiwgMHhlNSwgMHhmNSwgMHg1NCwgMHhjMCwgMHg2OCwgMHgwNywgMHhhOSwgMHhkNywgMHhmNCwgMHhhOSwgMHgyNywgMHhmNCwgCisgICAgMHhmYywgMHg1MywgMHhlMSwgMHgzZiwgMHg0MywgMHhmMiwgMHg4OCwgMHgwMiwgMHgwMywgMHg1NSwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyYywgMHhiNCwgMHgwMiwgCisgICAgMHgwZiwgMHhhOSwgMHhkNCwgMHhlNCwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3YSwgMHhiMywgMHgwMSwgMHgyYywgMHg3YSwgMHhiMywgMHgwMSwgMHgyYiwgMHgyMiwgCisgICAgMHhiNCwgMHgwMSwgMHgzOSwgMHg3ZSwgMHgyMSwgMHhlNiwgMHg3YywgMHgzMiwgMHg3ZSwgMHgxMywgMHgwMSwgMHgyZCwgMHgyYywgMHgyMSwgMHg3YSwgMHgyMywgCisgICAgMHgwMSwgMHgyZCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwNCwgMHgwMSwgMHgzNCwgMHhlNSwgMHhlMywgMHg3YSwgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgCisgICAgMHhhNSwgMHhkYiwgMHhmNiwgMHhhOSwgMHhkNCwgMHhlNCwgMHg3NSwgMHgwOCwgMHg3MCwgMHgxMiwgMHgwOCwgMHgzMywgMHg3ZSwgMHhiMywgMHgwMSwgMHgyZCwgCisgICAgMHg3ZSwgMHhhMywgMHgwMSwgMHgyYSwgMHhiYywgMHhhYiwgMHg3OCwgMHgwMywgMHgxMiwgMHgwMywgMHhlYywgMHgyMiwgMHgwMiwgMHgwNywgMHg1NSwgMHhlNSwgCisgICAgMHhlNiwgMHhiNCwgMHgwOCwgMHg2NSwgMHhhOSwgMHhjNCwgMHhlMiwgMHg3ZSwgMHgwMSwgMHhlMywgMHg3ZSwgMHgxMSwgMHhlMywgMHg3ZSwgMHgzMSwgMHhlMywgCisgICAgMHg3ZSwgMHgyMSwgMHhlMywgMHg3ZSwgMHg1MSwgMHhlMywgMHg3ZSwgMHg0MSwgMHhlMywgMHg3ZSwgMHg3MSwgMHhlMywgMHg3ZSwgMHg2MSwgMHhlMywgMHg3YSwgCisgICAgMHgwZiwgMHgwMSwgMHgyMywgMHg3YSwgMHgxZiwgMHgwMSwgMHgyNywgMHg3NSwgMHgwOCwgMHgwNCwgMHgxMiwgMHgwOCwgMHgzMywgMHg3YSwgMHgwMSwgMHgwOCwgCisgICAgMHgxMiwgMHgwOCwgMHgzMywgMHg3YSwgMHgxMSwgMHgwOCwgMHgxMiwgMHgwOCwgMHgzMywgMHg3YSwgMHgyMSwgMHgwOCwgMHgxMiwgMHgwOCwgMHgzMywgMHg3YSwgCisgICAgMHgzMSwgMHgwOCwgMHgxMiwgMHgwOCwgMHgzMywgMHg3YSwgMHg0MSwgMHgwOCwgMHgxMiwgMHgwOCwgMHgzMywgMHg3YSwgMHg1MSwgMHgwOCwgMHgxMiwgMHgwOCwgCisgICAgMHgzMywgMHg3YSwgMHg2MSwgMHgwOCwgMHgxMiwgMHgwOCwgMHgzMywgMHg3YSwgMHg3MSwgMHgwOCwgMHgxMiwgMHgwOCwgMHgzMywgMHhhOSwgMHhkNCwgMHhlNCwgCisgICAgMHhhOSwgMHhkNywgMHhmNCwgMHhhOSwgMHhjNiwgMHhlMiwgMHgxMiwgMHgwMywgMHhjMCwgMHgyMiwgMHg2ZCwgMHgwMCwgMHg3ZSwgMHgxNCwgMHgwMSwgMHgwMiwgCisgICAgMHg3YSwgMHgwNywgMHgwMSwgMHgzMiwgMHg3YSwgMHgwMywgMHgwMSwgMHgyZCwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyMywgMHgyMCwgMHhlNywgMHgwZiwgMHg3YSwgCisgICAgMHgyMywgMHgwMSwgMHgyYywgMHg3YSwgMHgzMywgMHgwMSwgMHgyYiwgMHhiZSwgMHgwNywgMHgwMSwgMHgyOSwgMHg2OCwgMHgwOSwgMHgyMiwgMHg3YSwgMHgzMywgCisgICAgMHgwMSwgMHgyYywgMHg3YSwgMHgyMywgMHgwMSwgMHgyYiwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyMywgMHg1NCwgMHhlMywgMHgyMywgMHgyMywgMHgzMCwgMHhlMCwgCisgICAgMHgwMiwgMHhkMiwgMHhlNSwgMHgzMCwgMHhlNywgMHgwMiwgMHhkMiwgMHhlNCwgMHgzMCwgMHhlNSwgMHgwNiwgMHgzMCwgMHhlNCwgMHgwMywgMHgwMiwgMHgwNywgCisgICAgMHg1NSwgMHg1NCwgMHgzZSwgMHhmNSwgMHhmMCwgMHgwMywgMHg1NCwgMHgxZiwgMHhjMywgMHgyNSwgMHhmMCwgMHg5MCwgMHgwNCwgMHgxOCwgMHg3NSwgMHg4NCwgCisgICAgMHhmZiwgMHg3MywgMHgwMiwgMHgwNSwgMHg2YywgMHgwMiwgMHgwNCwgMHg2MCwgMHgwMiwgMHgwNiwgMHgwOSwgMHgwMiwgMHgwNiwgMHgyNCwgMHgwMiwgMHgwNSwgCisgICAgMHgwNSwgMHgwMiwgMHgwNCwgMHhjNiwgMHgwMiwgMHgwNiwgMHgzZCwgMHgwMiwgMHgwNiwgMHgzZCwgMHgwMiwgMHgwNiwgMHg0MCwgMHgwMiwgMHgwNiwgMHg0MCwgCisgICAgMHgwMiwgMHgwNiwgMHg0MCwgMHgwMiwgMHgwNiwgMHg0MCwgMHgwMiwgMHgwNiwgMHg0MCwgMHgwMiwgMHgwNiwgMHg0MCwgMHgwMiwgMHgwNiwgMHg0MCwgMHgwMiwgCisgICAgMHgwNiwgMHg0MCwgMHgwMiwgMHgwNiwgMHg0NiwgMHgwMiwgMHgwNiwgMHhmYSwgMHgwMiwgMHgwNiwgMHg0MywgMHgwMiwgMHgwNiwgMHg0MywgMHgwMiwgMHgwNiwgCisgICAgMHg0MywgMHgwMiwgMHgwNiwgMHg0MywgMHgwMiwgMHgwNiwgMHg0MywgMHgwMiwgMHgwNiwgMHg0MywgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNCwgMHhiNCwgMHgwNiwgCisgICAgMHgyYSwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNSwgMHg2MCwgMHg1NiwgMHg3YywgMHgwYiwgMHg3ZSwgMHgxMywgMHgwMSwgMHgyNiwgMHg3ZSwgMHgxNywgMHgwMSwgCisgICAgMHgyNywgMHg3NSwgMHgwOCwgMHg3MiwgMHgxMiwgMHgwOCwgMHgzMywgMHg3YSwgMHgwMSwgMHgwOCwgMHgxMiwgMHgwOCwgMHgzMywgMHg3YSwgMHgxMSwgMHgwOCwgCisgICAgMHgxMiwgMHgwOCwgMHgzMywgMHgxMiwgMHgwNywgMHg1ZiwgMHg0MCwgMHgzNSwgMHgwMiwgMHgwMiwgMHg5NCwgMHhiNCwgMHgwOCwgMHgxMCwgMHg3NSwgMHgwOCwgCisgICAgMHg3NCwgMHgxMiwgMHgwOCwgMHgzMywgMHg3ZSwgMHhiMywgMHgzZiwgMHhmMSwgMHhmNSwgMHhmMywgMHg3NSwgMHhmNiwgMHgwMSwgMHgyMiwgMHhiNCwgMHgwMCwgCisgICAgMHgxYywgMHg3NSwgMHgwOCwgMHg3NSwgMHgxMiwgMHgwOCwgMHgzMywgMHg3ZSwgMHhiMywgMHgzZiwgMHhmMiwgMHgzMCwgMHhlMCwgMHgwNSwgMHg3NSwgMHhmMywgCisgICAgMHgwMiwgMHg4MCwgMHgwMywgMHg3NSwgMHhmMywgMHgwMCwgMHg3NSwgMHhmMywgMHgwMCwgMHg3NSwgMHhmNiwgMHgwMiwgMHgyMiwgMHgwMiwgMHgwNywgMHg1NSwgCisgICAgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNCwgMHhiNCwgMHgwMCwgMHgzNSwgMHg3NSwgMHgwOCwgMHg3NiwgMHgxMiwgMHgwOCwgMHgzMywgMHg3ZSwgMHhiMywgMHgwMSwgCisgICAgMHgyOCwgMHg1NCwgMHgwZiwgMHhmNSwgMHhmMSwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyOCwgMHgyMCwgMHhlNywgMHgwOSwgMHhlNSwgMHhlMSwgMHgzMCwgMHhlNywgCisgICAgMHgwZCwgMHg3NCwgMHgwMSwgMHg4MCwgMHgwYiwgMHhlNSwgMHhlMSwgMHgzMCwgMHhlNiwgMHgwNCwgMHg3NCwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3NCwgMHgwMCwgCisgICAgMHg1MywgMHhmMSwgMHg4MCwgMHhmNSwgMHhmMywgMHg3NSwgMHhmMywgMHgwMCwgMHg3NSwgMHhmNiwgMHgwMiwgMHgyMiwgMHgwMiwgMHgwNywgMHg1NSwgMHhjMCwgCisgICAgMHhmMSwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyOCwgMHg1NCwgMHgwZiwgMHg0MiwgMHhmMSwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNiwgMHhiNCwgMHgwMCwgMHg0NSwgCisgICAgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNCwgMHhiNCwgMHgwMSwgMHgyNCwgMHg3NSwgMHgwOCwgMHg3NywgMHgxMiwgMHgwOCwgMHgzMywgMHg3ZSwgMHhiMywgMHgwMSwgCisgICAgMHgyOCwgMHg1NCwgMHgwZiwgMHg3OCwgMHgwNSwgMHg1MywgMHhlMSwgMHgzZiwgMHg4MCwgMHgzNywgMHg3ZSwgMHhiMywgMHgwMSwgMHgyOCwgMHgyMCwgMHhlNywgCisgICAgMHgwNSwgMHg1MywgMHhlMSwgMHg3ZiwgMHg4MCwgMHgyYiwgMHg1MywgMHhlMSwgMHhiZiwgMHg4MCwgMHgyNiwgMHhiNCwgMHgwMywgMHgxNywgMHg3NSwgMHgwOCwgCisgICAgMHg3OCwgMHgxMiwgMHgwOCwgMHgzMywgMHg3ZSwgMHhiMywgMHgwMSwgMHgyOCwgMHgyMCwgMHhlNywgMHgwNSwgMHg0MywgMHhlMSwgMHg4MCwgMHg4MCwgMHgxMSwgCisgICAgMHg0MywgMHhlMSwgMHg0MCwgMHg4MCwgMHgwYywgMHg0MywgMHhlMSwgMHhjMCwgMHhkMCwgMHhmMSwgMHg3NSwgMHgwOCwgMHgwNywgMHgxMiwgMHgwOCwgMHgzMywgCisgICAgMHgyMiwgMHhkMCwgMHhmMSwgMHgwMiwgMHgwMiwgMHg5MCwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNCwgMHhiNCwgMHgwOSwgMHgyMywgMHg3NSwgMHgwOCwgMHg3OSwgCisgICAgMHgxMiwgMHgwOCwgMHgzMywgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNiwgMHhiZSwgMHhiMywgMHgzZiwgMHhmMSwgMHg2OCwgMHgxMSwgMHhjYSwgMHhiOCwgMHhjMCwgCisgICAgMHhmMSwgMHgxMiwgMHgwMSwgMHgxZCwgMHhkMCwgMHhmMSwgMHhkYSwgMHhiOCwgMHg1MCwgMHg3NiwgMHg3YSwgMHhiMywgMHgzZiwgMHhmMSwgMHg4MCwgMHg2ZCwgCisgICAgMHhiNCwgMHgwNSwgMHgwOCwgMHg3NSwgMHgwOCwgMHg3YSwgMHgxMiwgMHgwOCwgMHgzMywgMHg4MCwgMHg2MiwgMHhiNCwgMHgwMywgMHgxOSwgMHg3NSwgMHgwOCwgCisgICAgMHg3YiwgMHgxMiwgMHgwOCwgMHgzMywgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNiwgMHhiNCwgMHgwMSwgMHg1NSwgMHg3ZSwgMHhiMywgMHgzZiwgMHhmMiwgMHg0NCwgCisgICAgMHgwMSwgMHg3YSwgMHhiMywgMHgzZiwgMHhmMiwgMHg4MCwgMHg0NiwgMHhiNCwgMHgwMSwgMHgxOSwgMHg3NSwgMHgwOCwgMHg3YywgMHgxMiwgMHgwOCwgMHgzMywgCisgICAgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNiwgMHhiNCwgMHgwMSwgMHgzOSwgMHg3ZSwgMHhiMywgMHgzZiwgMHhmMiwgMHg1NCwgMHhmZSwgMHg3YSwgMHhiMywgMHgzZiwgCisgICAgMHhmMiwgMHg4MCwgMHgyYSwgMHhiNCwgMHgwNywgMHgyYSwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNSwgMHg2MCwgMHgyNCwgMHg3YywgMHgwYiwgMHg3ZSwgMHgxMywgCisgICAgMHgwMSwgMHgyNiwgMHg3ZSwgMHgxNywgMHgwMSwgMHgyNywgMHg3NSwgMHgwOCwgMHg3MywgMHgxMiwgMHgwOCwgMHgzMywgMHg3YSwgMHgwMSwgMHgwOCwgMHgxMiwgCisgICAgMHgwOCwgMHgzMywgMHg3YSwgMHgxMSwgMHgwOCwgMHgxMiwgMHgwOCwgMHgzMywgMHgxMiwgMHgwNywgMHg4YiwgMHg0MCwgMHgwMywgMHgwMiwgMHgwMiwgMHg5MCwgCisgICAgMHgwMiwgMHgwNywgMHg1NSwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNCwgMHhiNCwgMHgwYiwgMHhmNiwgMHg3NSwgMHgwOCwgMHg3ZCwgMHgxMiwgMHgwOCwgMHgzMywgCisgICAgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNiwgMHg3ZSwgMHhhMywgMHgwMSwgMHgyOCwgMHg0YywgMHhhYiwgMHg3OCwgMHhlNCwgMHg4MCwgMHhkZiwgMHg3ZSwgMHhiMywgCisgICAgMHgwMSwgMHgyNCwgMHhiNCwgMHgwYSwgMHhkYiwgMHg3NSwgMHgwOCwgMHg3ZSwgMHgxMiwgMHgwOCwgMHgzMywgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNiwgMHg3MCwgCisgICAgMHhjZiwgMHhmNSwgMHhmMywgMHg3NSwgMHhmNiwgMHgwMSwgMHgyMiwgMHgwMiwgMHgwNywgMHg1NSwgMHgwMiwgMHgwNywgMHg1NSwgMHgwMiwgMHgwNywgMHg1NSwgCisgICAgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNCwgMHhiNCwgMHgwNCwgMHgyMCwgMHg3NSwgMHgwOCwgMHhjMywgMHgxMiwgMHgwOCwgMHgzMywgMHg3ZSwgMHgwNCwgMHgwMCwgCisgICAgMHgwMSwgMHg3ZSwgMHgxNywgMHgwMSwgMHgyNSwgMHg3ZSwgMHgxOCwgMHgwMSwgMHgzNCwgMHg3YSwgMHgxYywgMHgwMCwgMHgwMCwgMHg3ZSwgMHg0NywgMHgwMSwgCisgICAgMHgyOSwgMHgxMiwgMHgwOCwgMHgzZiwgMHgwMiwgMHgwNiwgMHhmNCwgMHhiNCwgMHgwNiwgMHgzYSwgMHg3NSwgMHgwOCwgMHhjMSwgMHgxMiwgMHgwOCwgMHgzMywgCisgICAgMHg3ZSwgMHg1OCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg1YywgMHgwMCwgMHhmZSwgMHg3ZCwgMHhjYSwgMHg3ZSwgMHhkNywgMHgwMSwgMHgyNSwgMHg3ZSwgMHg3OCwgCisgICAgMHgwMSwgMHgzNCwgMHg3YSwgMHg3YywgMHgwMCwgMHgwMCwgMHg3ZSwgMHg3NywgMHgwMSwgMHgyOSwgMHg3NSwgMHgwOCwgMHhjMSwgMHgxMiwgMHgwOCwgMHgzMywgCisgICAgMHhjMCwgMHhhOCwgMHhjMCwgMHg4NywgMHhjMiwgMHhhZiwgMHhhOSwgMHhkNSwgMHg4NywgMHgxMiwgMHgwOCwgMHhkNiwgMHhkMCwgMHg4NywgMHhkMCwgMHhhOCwgCisgICAgMHg0MCwgMHg0ZiwgMHg4MCwgMHg0YSwgMHhiNCwgMHgwMCwgMHgxYywgMHhjMiwgMHhhZiwgMHhhOSwgMHhkNSwgMHg4NywgMHgxMiwgMHgwMiwgMHg5MCwgMHhlNCwgCisgICAgMHg4ZCwgMHhlZiwgMHg4ZCwgMHhlZiwgMHg4ZCwgMHhlZiwgMHhkNSwgMHhlMCwgMHhmNywgMHhjMCwgMHhkMSwgMHhjYSwgMHgwMiwgMHhmZiwgMHhjYSwgMHgwNiwgCisgICAgMHgwMCwgMHgwMCwgMHgzMiwgMHhiNCwgMHgwOSwgMHgxMiwgMHg3ZSwgMHg1NywgMHgwMSwgMHgyNSwgMHg0ZCwgMHg1NSwgMHg2OCwgMHgwNSwgMHhhOSwgMHhkMiwgCisgICAgMHhiMSwgMHg4MCwgMHgwMywgMHhhOSwgMHhjMiwgMHhiMSwgMHg4MCwgMHgxNiwgMHhiNCwgMHgwNywgMHgxNiwgMHhjMiwgMHhhZiwgMHg3ZSwgMHgwNywgMHgwMSwgCisgICAgMHgyNywgMHg3ZSwgMHgxNywgMHgwMSwgMHgyNSwgMHhjMCwgMHhkMSwgMHhjYSwgMHgxOCwgMHhjYSwgMHgzOCwgMHhjYSwgMHgyOCwgMHgzMiwgMHgwMiwgMHgwMiwgCisgICAgMHg5MCwgMHgwMiwgMHgwNywgMHg1NSwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNCwgMHhiNCwgMHgwMywgMHgxNSwgMHg3NSwgMHgwOCwgMHhjMiwgMHgxMiwgMHgwOCwgCisgICAgMHgzMywgMHg3ZSwgMHgwNCwgMHgwMCwgMHgwMSwgMHg3ZSwgMHgxNywgMHgwMSwgMHgyNSwgMHg3ZSwgMHg1NywgMHgwMSwgMHgyOSwgMHgwMiwgMHgwMiwgMHg5NCwgCisgICAgMHhiNCwgMHgwNSwgMHgzOSwgMHg3NSwgMHgwOCwgMHhjMCwgMHgxMiwgMHgwOCwgMHgzMywgMHhjMCwgMHhhOCwgMHhjMCwgMHg4NywgMHhjMiwgMHhhZiwgMHhhOSwgCisgICAgMHhkNSwgMHg4NywgMHg3ZSwgMHgwOCwgMHgwMSwgMHgzNCwgMHg3YSwgMHgwYywgMHgwMCwgMHgwMCwgMHg3ZSwgMHgyNCwgMHgwMCwgMHhmZSwgMHg3ZSwgMHgzNywgCisgICAgMHgwMSwgMHgyNSwgMHg3ZSwgMHg0NywgMHgwMSwgMHgyOSwgMHgxMiwgMHgwOCwgMHgzZiwgMHhkMCwgMHg4NywgMHhkMCwgMHhhOCwgMHg3ZSwgMHgwOCwgMHgwMSwgCisgICAgMHgzNCwgMHg3YSwgMHgwYywgMHgwMCwgMHgwMCwgMHg3ZSwgMHg1NywgMHgwMSwgMHgyOSwgMHgwMiwgMHgwMiwgMHg5NCwgMHgwMiwgMHgwNywgMHg1NSwgMHg3NSwgCisgICAgMHgwOCwgMHgwNywgMHgxMiwgMHgwOCwgMHgzMywgMHg0MywgMHhlMSwgMHhjMCwgMHgyMiwgMHhjMCwgMHhhOCwgMHhjMCwgMHg4NywgMHhjMiwgMHhhZiwgMHhhOSwgCisgICAgMHhkNSwgMHg4NywgMHgxMiwgMHgwNywgMHhjYSwgMHg0MCwgMHgxOSwgMHg3ZSwgMHgwOCwgMHgwMSwgMHgzNCwgMHg3YSwgMHgwYywgMHgwMCwgMHgwMCwgMHhjYSwgCisgICAgMHgwYiwgMHhjYSwgMHg0OSwgMHgxMiwgMHgwOCwgMHgzZiwgMHhkYSwgMHg1OSwgMHhkYSwgMHgwYiwgMHhkMCwgMHg4NywgMHhkMCwgMHhhOCwgMHhjMywgMHgyMiwgCisgICAgMHhkMCwgMHg4NywgMHhkMCwgMHhhOCwgMHgyMiwgMHhjMCwgMHhhOCwgMHhjMCwgMHg4NywgMHhjMiwgMHhhZiwgMHhhOSwgMHhkNSwgMHg4NywgMHgxMiwgMHgwNywgCisgICAgMHhjYSwgMHg0MCwgMHgyYiwgMHg3ZSwgMHg1OCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg1YywgMHgwMCwgMHhmZSwgMHg3ZiwgMHg2MSwgMHg3ZSwgMHg3OCwgMHgwMSwgCisgICAgMHgzNCwgMHg3YSwgMHg3YywgMHgwMCwgMHgwMCwgMHg3ZSwgMHg3NywgMHgwMSwgMHgyOSwgMHhiZCwgMHg3NCwgMHg3OCwgMHgxMSwgMHg3NSwgMHgwOCwgMHhjMSwgCisgICAgMHgxMiwgMHgwOCwgMHgzMywgMHgxMiwgMHgwOCwgMHhkNiwgMHg0MCwgMHgwNiwgMHhkMCwgMHg4NywgMHhkMCwgMHhhOCwgMHhjMywgMHgyMiwgMHhkMCwgMHg4NywgCisgICAgMHhkMCwgMHhhOCwgMHhkMywgMHgyMiwgMHg3ZSwgMHgyNCwgMHgwMCwgMHhmZSwgMHg3ZSwgMHgzNCwgMHg3ZiwgMHhjYSwgMHgwYiwgMHgxYSwgMHg1MCwgMHhjNSwgCisgICAgMHhmMCwgMHg3ZCwgMHg2MiwgMHg3ZCwgMHg3NSwgMHg3ZCwgMHg4NywgMHg3ZSwgMHgzNCwgMHg3ZiwgMHgwMywgMHg3ZSwgMHgxYiwgMHhiMCwgMHhiYywgMHgwYiwgCisgICAgMHg1MCwgMHg0OSwgMHgzZSwgMHgwMCwgMHgzZSwgMHgwMCwgMHgwYSwgMHg1MCwgMHgyZCwgMHg3NSwgMHgwYiwgMHgzYSwgMHgzMCwgMHg2OSwgMHg1MywgMHgwMCwgCisgICAgMHgwMiwgMHhiZCwgMHgzOCwgMHg1MCwgMHgwMiwgMHgyZCwgMHgzOCwgMHhiYywgMHgxYiwgMHg1MCwgMHgzMCwgMHgzZSwgMHgxMCwgMHgzZSwgMHgxMCwgMHgwYSwgCisgICAgMHg1MSwgMHgyZCwgMHgzNSwgMHg2OSwgMHg0MSwgMHgwMCwgMHgwMiwgMHgwYiwgMHgxYSwgMHgzMCwgMHhiZCwgMHgzOCwgMHg1MCwgMHgwMiwgMHgyZCwgMHgzOCwgCisgICAgMHhiZSwgMHg0NCwgMHhmZiwgMHhmZiwgMHg3OCwgMHgwNSwgMHg3ZSwgMHgxYiwgMHg5MCwgMHgwYSwgMHg0OSwgMHg0ZCwgMHg0NCwgMHg2OCwgMHgwYywgMHhiZSwgCisgICAgMHg0NCwgMHgwMCwgMHhmZiwgMHgyOCwgMHgwNCwgMHg3ZSwgMHg0NCwgMHgwMCwgMHhmZiwgMHhjMywgMHgyMiwgMHhkMywgMHgyMiwgCisKKy8vIFNlZ21lbnQgIzE2LCBFWENMVURFRCBTdGFydCBBZGRyZXNzIDAwZmY3YzAwLCBMZW5ndGggMTk5CisKKworLy8gU2VnbWVudCAjMTcsIEVYQ0xVREVEIFN0YXJ0IEFkZHJlc3MgMDBmZjdmMDAsIExlbmd0aCAxOTIKKworCisvLyBTZWdtZW50ICMxNywgU3RhcnQgQWRkcmVzcyAwMGZmN2ZjMCwgTGVuZ3RoIDY0CisweGZmLDB4MDAsMHhjMCwweDdmLDB4NDAsMHgwMCwKKyAgICAweDQwLCAweDAxLCAweDAyLCAweDAwLCAweGNhLCAweDFiLCAweDAxLCAweDBjLCAweDAyLCAweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAKKworLy8gU2VnbWVudCAjMTgsIFN0YXJ0IEFkZHJlc3MgMDBmZjA4MzMsIExlbmd0aCA1MDE1CisweGZmLDB4MDAsMHgzMywweDA4LDB4OTcsMHgxMywKKyAgICAweGNhLCAweDA4LCAweDdlLCAweDAxLCAweDA4LCAweDdhLCAweDAzLCAweDNmLCAweGYwLCAweGRhLCAweDA4LCAweDIyLCAweDgwLCAweDUwLCAweDBiLCAweDFhLCAKKyAgICAweDYwLCAweDBiLCAweDM1LCAweDBiLCAweDFhLCAweDcwLCAweDBiLCAweDM1LCAweDBiLCAweDFhLCAweDgwLCAweDBiLCAweDM1LCAweDBiLCAweDFhLCAweDkwLCAKKyAgICAweDBiLCAweDM1LCAweDBiLCAweDFhLCAweGEwLCAweDBiLCAweDM1LCAweDBiLCAweDFhLCAweGIwLCAweDBiLCAweDM1LCAweDBiLCAweDFhLCAweGMwLCAweDBiLCAKKyAgICAweDM1LCAweDBiLCAweDFhLCAweGQwLCAweDBiLCAweDM1LCAweDFiLCAweDBhLCAweDYwLCAweDBiLCAweDE1LCAweDFiLCAweDBhLCAweDcwLCAweDBiLCAweDE1LCAKKyAgICAweDFiLCAweDBhLCAweDgwLCAweDBiLCAweDE1LCAweDFiLCAweDBhLCAweDkwLCAweDBiLCAweDE1LCAweDFiLCAweDBhLCAweGEwLCAweDBiLCAweDE1LCAweDFiLCAKKyAgICAweDBhLCAweGIwLCAweDBiLCAweDE1LCAweDFiLCAweDBhLCAweGMwLCAweDBiLCAweDE1LCAweDFiLCAweDBhLCAweGQwLCAweDBiLCAweDE1LCAweDllLCAweDQ0LCAKKyAgICAweDAwLCAweDEwLCAweDUwLCAweGFhLCAweDJlLCAweDQ0LCAweDAwLCAweDEwLCAweDY4LCAweDBlLCAweDdlLCAweDFiLCAweGMwLCAweDdhLCAweDBiLCAweGMwLCAKKyAgICAweDBiLCAweDE0LCAweDBiLCAweDM0LCAweDFiLCAweDQ0LCAweDc4LCAweGYyLCAweDIyLCAweDdmLCAweDZmLCAweDdmLCAweGYwLCAweDFiLCAweGZjLCAweDdjLCAKKyAgICAweDU0LCAweDdkLCAweDMyLCAweDgwLCAweDA4LCAweGNhLCAweDFiLCAweGNhLCAweDFiLCAweGNhLCAweDFiLCAweGNhLCAweDFiLCAweDllLCAweDQ0LCAweDAwLCAKKyAgICAweDEwLCAweDUwLCAweGYyLCAweDJlLCAweDQ0LCAweDAwLCAweDEwLCAweDY4LCAweDA2LCAweGNhLCAweDQ4LCAweDFiLCAweDQ0LCAweDc4LCAweGZhLCAweDdmLCAKKyAgICAweGY2LCAweDg5LCAweGU0LCAweGNhLCAweDZiLCAweDVlLCAweGQ0LCAweDAwLCAweDNmLCAweDY4LCAweDIwLCAweDdlLCAweDg0LCAweDAwLCAweDQwLCAweDlkLCAKKyAgICAweDhkLCAweGRhLCAweDZiLCAweGJkLCAweDg3LCAweDM4LCAweDE2LCAweGNhLCAweDc5LCAweDdkLCAweDc4LCAweDEyLCAweDA5LCAweDAwLCAweGRhLCAweDc5LCAKKyAgICAweDQwLCAweDA4LCAweDlkLCAweDc4LCAweDY4LCAweDAyLCAweDgwLCAweDA1LCAweGMyLCAweGQ3LCAweDIyLCAweGRhLCAweDZiLCAweDQzLCAweDkwLCAweDMwLCAKKyAgICAweDc0LCAweGFhLCAweDM5LCAweGI1LCAweDU1LCAweDU1LCAweDc0LCAweDU1LCAweDM5LCAweGI1LCAweDJhLCAweGFhLCAweDc0LCAweGEwLCAweDM5LCAweGI1LCAKKyAgICAweDU1LCAweDU1LCAweDdlLCAweDA0LCAweDAwLCAweDQwLCAweDlkLCAweDcwLCAweDUwLCAweDA2LCAweDJkLCAweDcwLCAweDdkLCAweDA3LCAweDZkLCAweDc3LCAKKyAgICAweDdjLCAweDMxLCAweDdlLCAweDdiLCAweDAwLCAweDdhLCAweDZiLCAweDAwLCAweDBiLCAweDdjLCAweDBiLCAweDZjLCAweGE1LCAweGQ5LCAweGYzLCAweDdmLCAKKyAgICAweDE2LCAweDFiLCAweDFjLCAweDdlLCAweDU0LCAweDI3LCAweDEwLCAweDdlLCAweDFiLCAweDEwLCAweGJjLCAweDEwLCAweDY4LCAweDA2LCAweDFiLCAweDU0LCAKKyAgICAweDc4LCAweGY1LCAweDgwLCAweDJjLCAweDZkLCAweDAwLCAweDdjLCAweDIwLCAweDdmLCAweDE2LCAweDlmLCAweDEwLCAweDdmLCAweDI3LCAweDlmLCAweDIwLCAKKyAgICAweDdlLCAweDJiLCAweDAwLCAweDdlLCAweDFiLCAweDEwLCAweGJjLCAweDAxLCAweDc4LCAweDE2LCAweDBiLCAweDJjLCAweDBiLCAweDFjLCAweGE1LCAweGRiLCAKKyAgICAweGVmLCAweDdjLCAweGI2LCAweDIwLCAweGUwLCAweDAzLCAweDYzLCAweDkwLCAweDMwLCAweDRkLCAweDc3LCAweDc4LCAweDkzLCAweGMyLCAweGQ3LCAweDIyLCAKKyAgICAweGQyLCAweGQ3LCAweDIyLCAweDAwLCAweDA0LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDA2LCAweDA0LCAweDAyLCAweDA0LCAweDAwLCAweDAyLCAweDAxLCAKKyAgICAweDA0LCAweDAxLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAKKyAgICAweDA0LCAweDAwLCAweDA4LCAweDEwLCAweDAyLCAweDEwLCAweDA0LCAweDAyLCAweDA4LCAweDAwLCAweDAxLCAweDAxLCAweDA4LCAweDdlLCAweDE4LCAweDdmLCAKKyAgICAweGJkLCAweDdhLCAweDFjLCAweDAwLCAweGZmLCAweDBiLCAweDFhLCAweDAwLCAweGJlLCAweDEwLCAweDE0LCAweDM4LCAweDFhLCAweDBhLCAweDUxLCAweDIzLCAKKyAgICAweDdlLCAweDE4LCAweDA5LCAweDc2LCAweDdhLCAweDFjLCAweDAwLCAweGZmLCAweDJkLCAweDM1LCAweDBiLCAweDFhLCAweDUwLCAweDYwLCAweDA4LCAweGE1LCAKKyAgICAweGI4LCAweDAyLCAweDAzLCAweDRlLCAweGEwLCAweDA4LCAweDIyLCAweDgwLCAweGZlLCAweDdlLCAweGU4LCAweDdmLCAweGJmLCAweDdhLCAweGVjLCAweDAwLCAKKyAgICAweGZmLCAweGUwLCAweGY1LCAweDIyLCAweDU0LCAweGMwLCAweDY4LCAweDE2LCAweDdlLCAweGU4LCAweDdmLCAweGJlLCAweDdhLCAweGVjLCAweDAwLCAweGZmLCAKKyAgICAweGUwLCAweDYwLCAweDBjLCAweDEyLCAweDA5LCAweGEwLCAweGY1LCAweDA5LCAweDdhLCAweGExLCAweDIwLCAweDAyLCAweDBmLCAweDBhLCAweDIyLCAweGMyLCAKKyAgICAweDk1LCAweGQyLCAweDk0LCAweDEyLCAweDE5LCAweGZiLCAweDUzLCAweDkwLCAweGNmLCAweDEyLCAweDE5LCAweGZiLCAweDgwLCAweGYxLCAweDBkLCAweDBhLCAKKyAgICAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBkLCAKKyAgICAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAKKyAgICAweDQ1LCAweDY0LCAweDY3LCAweDY1LCAweDcwLCAweDZmLCAweDcyLCAweDc0LCAweDJmLCAweDM0LCAweDIwLCAweDJkLCAweDIwLCAweDQ4LCAweDYxLCAweDcyLCAKKyAgICAweDY0LCAweDc3LCAweDYxLCAweDcyLCAweDY1LCAweDIwLCAweDQ0LCAweDY5LCAweDYxLCAweDY3LCAweDZlLCAweDZmLCAweDczLCAweDc0LCAweDY5LCAweDYzLCAKKyAgICAweDczLCAweDJjLCAweDIwLCAweDUyLCAweDY1LCAweDc2LCAweDIwLCAweDMxLCAweDJlLCAweDMwLCAweDMwLCAweDNiLCAweDIwLCAweDQzLCAweDZmLCAweDcwLCAKKyAgICAweDc5LCAweDcyLCAweDY5LCAweDY3LCAweDY4LCAweDc0LCAweDIwLCAweDMxLCAweDM5LCAweDM5LCAweDM4LCAweDIwLCAweDQ5LCAweDZlLCAweDczLCAweDY5LCAKKyAgICAweDY0LCAweDY1LCAweDIwLCAweDRmLCAweDc1LCAweDc0LCAweDIwLCAweDRlLCAweDY1LCAweDc0LCAweDc3LCAweDZmLCAweDcyLCAweDZiLCAweDczLCAweDBkLCAKKyAgICAweDBhLCAweDAwLCAweDUwLCAweDYxLCAweDczLCAweDczLCAweDAwLCAweDQ2LCAweDQxLCAweDQ5LCAweDRjLCAweDIwLCAweDIxLCAweDIxLCAweDAwLCAweDUwLCAKKyAgICAweDYxLCAweDczLCAweDczLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDAwLCAweDQ2LCAweDQxLCAweDQ5LCAweDRjLCAweDIwLCAweDIxLCAweDIxLCAweDIwLCAKKyAgICAweDAwLCAweDBkLCAweDBhLCAweDQ0LCAweDY1LCAweDc0LCAweDY1LCAweDYzLCAweDc0LCAweDIwLCAweDUyLCAweDYxLCAweDZkLCAweDNhLCAweDIwLCAweDIwLCAKKyAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKyAgICAweDIwLCAweDIwLCAweDAwLCAweDBkLCAweDBhLCAweDUyLCAweDYxLCAweDZkLCAweDIwLCAweDU0LCAweDY1LCAweDczLCAweDc0LCAweDNhLCAweDIwLCAweDIwLCAKKyAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKyAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDAwLCAweDBkLCAweDBhLCAweDQxLCAweDY0LCAweDY0LCAweDcyLCAweDY1LCAweDczLCAweDczLCAweDIwLCAweDYyLCAKKyAgICAweDY5LCAweDc0LCAweDIwLCAweDMwLCAweDJkLCAweDMxLCAweDM0LCAweDIwLCAweDc0LCAweDY1LCAweDczLCAweDc0LCAweDNhLCAweDIwLCAweDIwLCAweDIwLCAKKyAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDAwLCAweDBkLCAweDBhLCAweDU3LCAweDcyLCAweDZmLCAweDc0LCAweDY1LCAweDIwLCAweDQxLCAKKyAgICAweDY0LCAweDY0LCAweDcyLCAweDY1LCAweDczLCAweDczLCAweDNhLCAweDIwLCAweDMwLCAweDMwLCAweDNhLCAweDAwLCAweDIwLCAweDIwLCAweDc3LCAweDY5LCAKKyAgICAweDc0LCAweDY4LCAweDIwLCAweDY0LCAweDYxLCAweDc0LCAweDYxLCAweDNhLCAweDIwLCAweDAwLCAweDJjLCAweDIwLCAweDYxLCAweDZlLCAweDY0LCAweDIwLCAKKyAgICAweDcyLCAweDY1LCAweDYxLCAweDY0LCAweDNhLCAweDIwLCAweDAwLCAweDBkLCAweDBhLCAweDRmLCAweDZlLCAweDY1LCAweDIwLCAweDZmLCAweDcyLCAweDIwLCAKKyAgICAweDYyLCAweDZmLCAweDc0LCAweDY4LCAweDIwLCAweDZmLCAweDY2LCAweDIwLCAweDc0LCAweDY4LCAweDY1LCAweDIwLCAweDY2LCAweDZmLCAweDZjLCAweDZjLCAKKyAgICAweDZmLCAweDc3LCAweDY5LCAweDZlLCAweDY3LCAweDIwLCAweDQxLCAweDY0LCAweDY0LCAweDcyLCAweDY1LCAweDczLCAweDczLCAweDIwLCAweDYyLCAweDY5LCAKKyAgICAweDc0LCAweDczLCAweDIwLCAweDZjLCAweDY5LCAweDczLCAweDc0LCAweDY1LCAweDY0LCAweDIwLCAweDYxLCAweDcyLCAweDY1LCAweDIwLCAweDczLCAweDY4LCAKKyAgICAweDZmLCAweDcyLCAweDc0LCAweDY1LCAweDY0LCAweDBkLCAweDBhLCAweDc0LCAweDZmLCAweDIwLCAweDczLCAweDZmLCAweDZkLCAweDY1LCAweDc0LCAweDY4LCAKKyAgICAweDY5LCAweDZlLCAweDY3LCAweDNhLCAweDIwLCAweDAwLCAweDIwLCAweDYxLCAweDZlLCAweDY0LCAweDIwLCAweDAwLCAweDBkLCAweDBhLCAweDQ0LCAweDY1LCAKKyAgICAweDc0LCAweDY1LCAweDYzLCAweDc0LCAweDIwLCAweDU1LCAweDYxLCAweDcyLCAweDc0LCAweDNhLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKyAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDAwLCAweDBkLCAweDBhLCAKKyAgICAweDUzLCAweDYzLCAweDcyLCAweDYxLCAweDc0LCAweDYzLCAweDY4LCAweDIwLCAweDUwLCAweDYxLCAweDY0LCAweDJjLCAweDQ2LCAweDY5LCAweDQ2LCAweDZmLCAKKyAgICAweDIwLCAweDQ1LCAweDZlLCAweDYxLCAweDYyLCAweDZjLCAweDY1LCAweDIwLCAweDI2LCAweDIwLCAweDUyLCAweDUzLCAweDU0LCAweDNhLCAweDIwLCAweDAwLCAKKyAgICAweDBkLCAweDBhLCAweDBhLCAweDIwLCAweDIwLCAweDIwLCAweDU1LCAweDYxLCAweDcyLCAweDc0LCAweDIwLCAweDU0LCAweDY1LCAweDczLCAweDc0LCAweDczLCAKKyAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKyAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDUwLCAweDZmLCAweDcyLCAweDc0LCAweDMxLCAweDIwLCAweDIwLCAweDIwLCAweDUwLCAweDZmLCAweDcyLCAweDc0LCAKKyAgICAweDMyLCAweDIwLCAweDIwLCAweDIwLCAweDUwLCAweDZmLCAweDcyLCAweDc0LCAweDMzLCAweDIwLCAweDIwLCAweDIwLCAweDUwLCAweDZmLCAweDcyLCAweDc0LCAKKyAgICAweDM0LCAweDBkLCAweDBhLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKyAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKyAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDJkLCAweDJkLCAweDJkLCAweDJkLCAweDJkLCAweDJkLCAweDJkLCAweDJkLCAweDJkLCAweDJkLCAweDJkLCAweDJkLCAKKyAgICAweDJkLCAweDJkLCAweDJkLCAweDJkLCAweDJkLCAweDJkLCAweDJkLCAweDJkLCAweDJkLCAweDJkLCAweDJkLCAweDJkLCAweDJkLCAweDJkLCAweDJkLCAweDJkLCAKKyAgICAweDJkLCAweDAwLCAweDBkLCAweDBhLCAweDUwLCAweDZmLCAweDcyLCAweDc0LCAweDIwLCAweDQ0LCAweDY1LCAweDYzLCAweDZmLCAweDY0LCAweDY1LCAweDcyLCAKKyAgICAweDNhLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKyAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDAwLCAweDBkLCAweDBhLCAweDQ0LCAweDY5LCAweDY3LCAweDY5LCAweDc0LCAweDYxLCAweDZjLCAweDIwLCAKKyAgICAweDRjLCAweDZmLCAweDZmLCAweDcwLCAweDYyLCAweDYxLCAweDYzLCAweDZiLCAweDNhLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKyAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDAwLCAweDBkLCAweDBhLCAweDQxLCAweDZlLCAweDYxLCAweDZjLCAKKyAgICAweDZmLCAweDY3LCAweDIwLCAweDRjLCAweDZmLCAweDZmLCAweDcwLCAweDYyLCAweDYxLCAweDYzLCAweDZiLCAweDNhLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKyAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDAwLCAweDBkLCAweDBhLCAKKyAgICAweDUyLCAweDU4LCAweDQ0LCAweDJjLCAweDU0LCAweDU4LCAweDQ0LCAweDIwLCAweDc0LCAweDZmLCAweDIwLCAweDUyLCAweDU0LCAweDUzLCAweDJjLCAweDQzLCAKKyAgICAweDU0LCAweDUzLCAweDJjLCAweDUyLCAweDQ5LCAweDIwLCAweDUzLCAweDY4LCAweDZmLCAweDcyLCAweDc0LCAweDNhLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKyAgICAweDIwLCAweDAwLCAweDBkLCAweDBhLCAweDUyLCAweDU4LCAweDQ0LCAweDJjLCAweDU0LCAweDU4LCAweDQ0LCAweDIwLCAweDc0LCAweDZmLCAweDIwLCAweDQ0LCAKKyAgICAweDU0LCAweDUyLCAweDJjLCAweDQ0LCAweDUzLCAweDUyLCAweDJjLCAweDQzLCAweDQ0LCAweDIwLCAweDUzLCAweDY4LCAweDZmLCAweDcyLCAweDc0LCAweDNhLCAKKyAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDAwLCAweDBkLCAweDBhLCAweDUyLCAweDU0LCAweDUzLCAweDViLCAweDQzLCAweDU0LCAweDUzLCAweDJjLCAKKyAgICAweDUyLCAweDQ5LCAweDVkLCAweDIwLCAweDc0LCAweDZmLCAweDIwLCAweDQ0LCAweDU0LCAweDUyLCAweDJjLCAweDQ0LCAweDUzLCAweDUyLCAweDJjLCAweDQzLCAKKyAgICAweDQ0LCAweDIwLCAweDUzLCAweDY4LCAweDZmLCAweDcyLCAweDc0LCAweDNhLCAweDIwLCAweDAwLCAweDBkLCAweDBhLCAweDUyLCAweDU0LCAweDUzLCAweDViLCAKKyAgICAweDQzLCAweDU0LCAweDUzLCAweDJjLCAweDQzLCAweDQ0LCAweDVkLCAweDIwLCAweDc0LCAweDZmLCAweDIwLCAweDQ0LCAweDUzLCAweDUyLCAweDJjLCAweDUyLCAKKyAgICAweDQ5LCAweDIwLCAweDUzLCAweDY4LCAweDZmLCAweDcyLCAweDc0LCAweDNhLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDAwLCAweDBkLCAweDBhLCAKKyAgICAweDQ0LCAweDU0LCAweDUyLCAweDViLCAweDQ0LCAweDUzLCAweDUyLCAweDJjLCAweDQzLCAweDQ0LCAweDVkLCAweDIwLCAweDc0LCAweDZmLCAweDIwLCAweDUyLCAKKyAgICAweDU0LCAweDUzLCAweDJjLCAweDQzLCAweDU0LCAweDUzLCAweDJjLCAweDUyLCAweDQ5LCAweDIwLCAweDUzLCAweDY4LCAweDZmLCAweDcyLCAweDc0LCAweDNhLCAKKyAgICAweDIwLCAweDAwLCAweDBkLCAweDBhLCAweDQ0LCAweDU0LCAweDUyLCAweDIwLCAweDc0LCAweDZmLCAweDIwLCAweDQzLCAweDU0LCAweDUzLCAweDJjLCAweDQzLCAKKyAgICAweDQ0LCAweDIwLCAweDUzLCAweDY4LCAweDZmLCAweDcyLCAweDc0LCAweDNhLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKyAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDAwLCAweDBkLCAweDBhLCAweDUyLCAweDU0LCAweDUzLCAweDIwLCAweDc0LCAweDZmLCAweDIwLCAweDQzLCAKKyAgICAweDU0LCAweDUzLCAweDJjLCAweDUyLCAweDQ5LCAweDIwLCAweDRjLCAweDZmLCAweDZmLCAweDcwLCAweDYyLCAweDYxLCAweDYzLCAweDZiLCAweDNhLCAweDIwLCAKKyAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDAwLCAweDBkLCAweDBhLCAweDUyLCAweDU0LCAweDUzLCAweDIwLCAKKyAgICAweDc0LCAweDZmLCAweDIwLCAweDQzLCAweDU0LCAweDUzLCAweDJjLCAweDQzLCAweDQ0LCAweDIwLCAweDRjLCAweDZmLCAweDZmLCAweDcwLCAweDYyLCAweDYxLCAKKyAgICAweDYzLCAweDZiLCAweDNhLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDAwLCAweDBkLCAweDBhLCAKKyAgICAweDQ0LCAweDU0LCAweDUyLCAweDIwLCAweDc0LCAweDZmLCAweDIwLCAweDQ0LCAweDUzLCAweDUyLCAweDJjLCAweDQzLCAweDQ0LCAweDIwLCAweDRjLCAweDZmLCAKKyAgICAweDZmLCAweDcwLCAweDYyLCAweDYxLCAweDYzLCAweDZiLCAweDNhLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKyAgICAweDIwLCAweDAwLCAweDBkLCAweDBhLCAweDBhLCAweDIwLCAweDIwLCAweDIwLCAweDQ1LCAweDIwLCAweDUyLCAweDIwLCAweDUyLCAweDIwLCAweDRmLCAweDIwLCAKKyAgICAweDUyLCAweDIwLCAweDIxLCAweDIxLCAweDIxLCAweDJjLCAweDIwLCAweDQ1LCAweDIwLCAweDUyLCAweDIwLCAweDUyLCAweDIwLCAweDRmLCAweDIwLCAweDUyLCAKKyAgICAweDIwLCAweDIxLCAweDIxLCAweDIxLCAweDIwLCAweDJjLCAweDIwLCAweDQ1LCAweDIwLCAweDUyLCAweDIwLCAweDUyLCAweDIwLCAweDRmLCAweDIwLCAweDUyLCAKKyAgICAweDIwLCAweDIxLCAweDIxLCAweDIxLCAweDBkLCAweDBhLCAweDBhLCAweDQ0LCAweDY5LCAweDYxLCAweDY3LCAweDZlLCAweDZmLCAweDczLCAweDc0LCAweDY5LCAKKyAgICAweDYzLCAweDczLCAweDIwLCAweDZlLCAweDZmLCAweDc3LCAweDIwLCAweDc3LCAweDY5LCAweDZjLCAweDZjLCAweDIwLCAweDY1LCAweDZlLCAweDc0LCAweDY1LCAKKyAgICAweDcyLCAweDIwLCAweDYxLCAweDIwLCAweDY0LCAweDY1LCAweDYyLCAweDc1LCAweDY3LCAweDIwLCAweDZjLCAweDZmLCAweDZmLCAweDcwLCAweDIwLCAweDZmLCAKKyAgICAweDY2LCAweDIwLCAweDc0LCAweDY4LCAweDY1LCAweDIwLCAweDY2LCAweDY5LCAweDcyLCAweDczLCAweDc0LCAweDIwLCAweDY0LCAweDY1LCAweDc0LCAweDY1LCAKKyAgICAweDYzLCAweDc0LCAweDY1LCAweDY0LCAweDIwLCAweDY1LCAweDcyLCAweDcyLCAweDZmLCAweDcyLCAweDJlLCAweDAwLCAweDBkLCAweDBhLCAweDBhLCAweDRlLCAKKyAgICAweDZmLCAweDIwLCAweDQ4LCAweDYxLCAweDcyLCAweDY0LCAweDc3LCAweDYxLCAweDcyLCAweDY1LCAweDIwLCAweDY1LCAweDcyLCAweDcyLCAweDZmLCAweDcyLCAKKyAgICAweDczLCAweDIwLCAweDY0LCAweDY1LCAweDc0LCAweDY1LCAweDYzLCAweDc0LCAweDY1LCAweDY0LCAweDJlLCAweDBkLCAweDBhLCAweDAwLCAweDQzLCAweDZmLCAKKyAgICAweDcwLCAweDc5LCAweDY5LCAweDZlLCAweDY3LCAweDIwLCAweDYzLCAweDZmLCAweDY0LCAweDY1LCAweDIwLCAweDY2LCAweDcyLCAweDZmLCAweDZkLCAweDIwLCAKKyAgICAweDRkLCAweDYxLCAweDczLCAweDc0LCAweDY1LCAweDcyLCAweDIwLCAweDc0LCAweDZmLCAweDIwLCAweDUzLCAweDZjLCAweDYxLCAweDc2LCAweDY1LCAweDI3LCAKKyAgICAweDczLCAweDIwLCAweDQ1LCAweDQ1LCAweDcwLCAweDcyLCAweDZmLCAweDZkLCAweDIwLCAweDJlLCAweDJlLCAweDJlLCAweDAwLCAweDQ0LCAweDZmLCAweDZlLCAKKyAgICAweDY1LCAweDBkLCAweDBhLCAweDBhLCAweDJkLCAweDNlLCAweDIwLCAweDU0LCAweDc1LCAweDcyLCAweDZlLCAweDIwLCAweDc1LCAweDZlLCAweDY5LCAweDc0LCAKKyAgICAweDIwLCAweDZmLCAweDY2LCAweDY2LCAweDJjLCAweDIwLCAweDY0LCAweDY5LCAweDczLCAweDYzLCAweDZmLCAweDZlLCAweDZlLCAweDY1LCAweDYzLCAweDc0LCAKKyAgICAweDIwLCAweDYzLCAweDYxLCAweDYyLCAweDZjLCAweDY1LCAweDIwLCAweDYxLCAweDZlLCAweDY0LCAweDIwLCAweDcyLCAweDc1LCAweDZlLCAweDIwLCAweDczLCAKKyAgICAweDc0LCAweDYxLCAweDZlLCAweDY0LCAweDYxLCAweDZjLCAweDZmLCAweDZlLCAweDY1LCAweDIwLCAweDY0LCAweDY5LCAweDYxLCAweDY3LCAweDZlLCAweDZmLCAKKyAgICAweDczLCAweDc0LCAweDY5LCAweDYzLCAweDczLCAweDJlLCAweDAwLCAweGMyLCAweGFmLCAweGMyLCAweDA5LCAweGMyLCAweDBhLCAweDc1LCAweDkwLCAweDBkLCAKKyAgICAweDIwLCAweDE3LCAweDAyLCAweGQyLCAweGI1LCAweDQzLCAweDkwLCAweDMwLCAweDZjLCAweDAwLCAweDdlLCAweDEwLCAweDAzLCAweDEyLCAweDBmLCAweDM4LCAKKyAgICAweDdlLCAweDY4LCAweDBhLCAweDAxLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDBiLCAweDAwLCAweDMwLCAweGI0LCAweDAyLCAKKyAgICAweDgwLCAweDI0LCAweDAyLCAweDFiLCAweDNjLCAweDIwLCAweDA5LCAweDFkLCAweGMyLCAweDk0LCAweGQyLCAweDk1LCAweDEyLCAweDE5LCAweGZiLCAweDUzLCAKKyAgICAweDkwLCAweGNmLCAweDEyLCAweDE5LCAweGZiLCAweGMyLCAweDk1LCAweGQyLCAweDk0LCAweDEyLCAweDE5LCAweGZiLCAweGE1LCAweGQ5LCAweGU2LCAweDQzLCAKKyAgICAweDkwLCAweDMwLCAweDEyLCAweDE5LCAweGZiLCAweDIyLCAweDdlLCAweDY4LCAweDBhLCAweDk0LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAKKyAgICAweDkzLCAweDdlLCAweGU0LCAweDEwLCAweDAwLCAweDdlLCAweDQwLCAweDU1LCAweDdhLCAweGU5LCAweDQwLCAweDBiLCAweGU0LCAweDdlLCAweDUwLCAweGFhLCAKKyAgICAweDdhLCAweGU5LCAweDUwLCAweDFiLCAweGU0LCAweGJlLCAweGU5LCAweDQwLCAweDY4LCAweDE5LCAweDdlLCAweDY4LCAweDBhLCAweDdhLCAweDdhLCAweDZjLCAKKyAgICAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDEyLCAweDFhLCAweDA4LCAweDMwLCAweDA5LCAweDEzLCAweDdhLCAweGU5LCAweDQwLCAweDdlLCAweGU5LCAKKyAgICAweDEwLCAweDgwLCAweGY4LCAweDdlLCAweDY4LCAweDBhLCAweDc1LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDBiLCAweDAwLCAKKyAgICAweDdlLCAweDY4LCAweDBhLCAweGQ4LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDdlLCAweDc4LCAweDAwLCAweDAwLCAweDdlLCAKKyAgICAweDcwLCAweDBlLCAweDdlLCAweGE0LCAweGZmLCAweGZmLCAweDdlLCAweGI0LCAweGJmLCAweGZmLCAweDdkLCAweGNiLCAweDBlLCAweGM0LCAweDdkLCAweGRjLCAKKyAgICAweDVkLCAweGRiLCAweDZjLCAweGJiLCAweDdkLCAweGZhLCAweDVlLCAweGY0LCAweDdmLCAweGZmLCAweDdhLCAweDdiLCAweGIwLCAweDBiLCAweGIwLCAweDdkLCAKKyAgICAweGZiLCAweDVlLCAweGY0LCAweDdmLCAweGZmLCAweDdhLCAweDdiLCAweGIwLCAweDBiLCAweGIwLCAweDdkLCAweGZjLCAweDVlLCAweGY0LCAweDdmLCAweGZmLCAKKyAgICAweDdhLCAweDdiLCAweGIwLCAweDBiLCAweGIwLCAweDdkLCAweGZkLCAweDVlLCAweGY0LCAweDdmLCAweGZmLCAweDdhLCAweDdiLCAweGIwLCAweDZjLCAweGJiLCAKKyAgICAweDdkLCAweGZhLCAweDVlLCAweGY0LCAweDdmLCAweGZmLCAweGJlLCAweDdiLCAweGIwLCAweDc4LCAweDQxLCAweDBiLCAweGIwLCAweDdkLCAweGZiLCAweDVlLCAKKyAgICAweGY0LCAweDdmLCAweGZmLCAweGJlLCAweDdiLCAweGIwLCAweDc4LCAweDM0LCAweDBiLCAweGIwLCAweDdkLCAweGZjLCAweDVlLCAweGY0LCAweDdmLCAweGZmLCAKKyAgICAweGJlLCAweDdiLCAweGIwLCAweDc4LCAweDI3LCAweDBiLCAweGIwLCAweDdkLCAweGZkLCAweDVlLCAweGY0LCAweDdmLCAweGZmLCAweGJlLCAweDdiLCAweGIwLCAKKyAgICAweDc4LCAweDFhLCAweDBiLCAweGIwLCAweGJlLCAweGM0LCAweGZmLCAweGZlLCAweDc4LCAweDkyLCAweDBlLCAweGI0LCAweGE1LCAweGRmLCAweDhiLCAweDdlLCAKKyAgICAweDY4LCAweDBhLCAweDgyLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDgwLCAweDc3LCAweGNhLCAweDViLCAweGNhLCAweDZiLCAKKyAgICAweDdlLCAweDY4LCAweDBhLCAweDhiLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDdlLCAweDY4LCAweDBiLCAweDJhLCAweDdhLCAKKyAgICAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDBhLCAweDQ3LCAweDEyLCAweDFhLCAweGM5LCAweDdlLCAweDY4LCAweDBiLCAweDc5LCAweDdhLCAKKyAgICAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDZjLCAweDc3LCAweGRhLCAweDZiLCAweGNhLCAweDZiLCAweDBiLCAweDcwLCAweDBlLCAweGM0LCAKKyAgICAweGJlLCAweGM0LCAweGZmLCAweGZmLCAweDc4LCAweGY2LCAweDFiLCAweDcwLCAweDBhLCAweDQ3LCAweDEyLCAweDFhLCAweGM5LCAweDEyLCAweDFhLCAweDA4LCAKKyAgICAweDMwLCAweDA5LCAweDMwLCAweGRhLCAweDZiLCAweGRhLCAweDViLCAweDZjLCAweGJiLCAweDdlLCAweDc4LCAweDAwLCAweDAwLCAweDdkLCAweGZhLCAweDVlLCAKKyAgICAweGY0LCAweDdmLCAweGZmLCAweDdhLCAweDdiLCAweGIwLCAweDdkLCAweGZiLCAweDVlLCAweGY0LCAweDdmLCAweGZmLCAweDdhLCAweDdiLCAweGIwLCAweDdkLCAKKyAgICAweGZjLCAweDVlLCAweGY0LCAweDdmLCAweGZmLCAweDdhLCAweDdiLCAweGIwLCAweDdkLCAweGZkLCAweDVlLCAweGY0LCAweDdmLCAweGZmLCAweDdhLCAweDdiLCAKKyAgICAweGIwLCAweDgwLCAweGQ0LCAweDdlLCAweDY4LCAweDBhLCAweGI2LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDMwLCAweDE3LCAKKyAgICAweDBlLCAweDdlLCAweDc4LCAweDA0LCAweDIwLCAweDdhLCAweDdjLCAweDAwLCAweDAwLCAweDdlLCAweDQ0LCAweDdiLCAweGUwLCAweDgwLCAweDBjLCAweDdlLCAKKyAgICAweDc4LCAweDAwLCAweDAwLCAweDdhLCAweDdjLCAweDAwLCAweDAxLCAweDdlLCAweDQ0LCAweDgwLCAweDAwLCAweDBiLCAweDAwLCAweDdlLCAweDQwLCAweDNhLCAKKyAgICAweDdjLCAweDU0LCAweDdmLCAweDU3LCAweDdkLCAweDg0LCAweDZjLCAweDY2LCAweDdhLCAweDViLCAweDUwLCAweDBiLCAweDVjLCAweDBiLCAweDUwLCAweGE1LCAKKyAgICAweGRlLCAweDAyLCAweDBiLCAweDUwLCAweDFiLCAweDg0LCAweDc4LCAweGYwLCAweDdjLCAweDU0LCAweDdmLCAweDU3LCAweDdkLCAweDg0LCAweDZjLCAweDY2LCAKKyAgICAweGJlLCAweDViLCAweDUwLCAweDc4LCAweDFhLCAweDBiLCAweDVjLCAweDBiLCAweDUwLCAweGE1LCAweGRlLCAweDAyLCAweDBiLCAweDUwLCAweDFiLCAweDg0LCAKKyAgICAweDc4LCAweGVlLCAweDdlLCAweDY4LCAweDBhLCAweDc1LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDgwLCAweDRiLCAweDdmLCAKKyAgICAweDQ1LCAweDdlLCAweDY4LCAweDBhLCAweDdhLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDdlLCAweDY4LCAweDBhLCAweGZhLCAKKyAgICAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDdkLCAweDRiLCAweDEyLCAweDFhLCAweGM5LCAweDdlLCAweDY4LCAweDBiLCAweDBmLCAKKyAgICAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDZjLCAweDg4LCAweDdjLCAweDk1LCAweDEyLCAweDFhLCAweGM5LCAweDdlLCAweDY4LCAKKyAgICAweDBiLCAweDFkLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDdlLCAweDRiLCAweDkwLCAweDEyLCAweDFhLCAweGM5LCAweDEyLCAKKyAgICAweDFhLCAweDA4LCAweDMwLCAweDA5LCAweDA1LCAweDdlLCAweDRiLCAweDkwLCAweDgwLCAweGZiLCAweDdlLCAweDY4LCAweDBiLCAweDdmLCAweDdhLCAweDZjLCAKKyAgICAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDBiLCAweDAwLCAweGQyLCAweDkyLCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDA5LCAweGIyLCAweDAwLCAKKyAgICAweDA4LCAweGJlLCAweGIwLCAweDAxLCAweDc4LCAweDBiLCAweDA5LCAweGIyLCAweDAwLCAweDE0LCAweGJlLCAweGIwLCAweDYwLCAweDc4LCAweDAyLCAweDgwLCAKKyAgICAweDE3LCAweDdlLCAweDY4LCAweDBhLCAweDdhLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDEyLCAweDFhLCAweDA4LCAweDMwLCAKKyAgICAweDA5LCAweDExLCAweDA5LCAweGIyLCAweDAwLCAweDA4LCAweDgwLCAweGZhLCAweDdlLCAweDY4LCAweDBhLCAweDc1LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAKKyAgICAweDEyLCAweDFhLCAweDkzLCAweDdlLCAweDY4LCAweDBiLCAweGExLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDBiLCAweDAwLCAKKyAgICAweGMyLCAweDkyLCAweDEyLCAweDE5LCAweGVlLCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweGEwLCAweDU1LCAweDE5LCAweGEyLCAweDAwLCAweDFjLCAKKyAgICAweDdlLCAweGIwLCAweDAxLCAweDE5LCAweGIyLCAweDAwLCAweDA4LCAweDA5LCAweGIyLCAweDAwLCAweDFjLCAweGJjLCAweGFiLCAweDc4LCAweDM3LCAweDA5LCAKKyAgICAweGIyLCAweDAwLCAweDA4LCAweDVlLCAweGIwLCAweGMwLCAweGJlLCAweGIwLCAweGMwLCAweDc4LCAweDJiLCAweDdlLCAweGEwLCAweGFhLCAweDE5LCAweGEyLCAKKyAgICAweDAwLCAweDFjLCAweDZjLCAweGJiLCAweDE5LCAweGIyLCAweDAwLCAweDA4LCAweDA5LCAweGIyLCAweDAwLCAweDFjLCAweGJjLCAweGFiLCAweDc4LCAweDE2LCAKKyAgICAweDA5LCAweGIyLCAweDAwLCAweDA4LCAweDVlLCAweGIwLCAweGMwLCAweDc4LCAweDBkLCAweDdlLCAweDY4LCAweDBhLCAweDc1LCAweDdhLCAweDZjLCAweDAwLCAKKyAgICAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDgwLCAweDFiLCAweDdlLCAweDY4LCAweDBhLCAweDdhLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAKKyAgICAweDkzLCAweDEyLCAweDFhLCAweDA4LCAweDMwLCAweDA5LCAweDBhLCAweDE5LCAweGEyLCAweDAwLCAweDFjLCAweDA5LCAweGIyLCAweDAwLCAweDFjLCAweDgwLCAKKyAgICAweGY2LCAweDdlLCAweDY4LCAweDBiLCAweGMzLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDdlLCAweDY4LCAweDBjLCAweDQ1LCAKKyAgICAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDA5LCAweDdlLCAweGIwLCAKKyAgICAweDAxLCAweDE5LCAweGIyLCAweDAwLCAweDFjLCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweDBiLCAweGIwLCAweGE1LCAweGQ5LCAweGYzLCAweDdlLCAweDI0LCAKKyAgICAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDA5LCAweDdlLCAweGIwLCAweDAxLCAweDBiLCAweDAwLCAweDA5LCAweGEyLCAweDAwLCAweDFjLCAweGJjLCAweGFiLCAKKyAgICAweDc4LCAweDE2LCAweDdlLCAweDY4LCAweDBhLCAweDgyLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDJlLCAweDI0LCAweDAxLCAKKyAgICAweDAwLCAweDBiLCAweGIwLCAweGE1LCAweGQ5LCAweGUyLCAweDgwLCAweDI1LCAweDdlLCAweDY4LCAweDBhLCAweDhiLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAKKyAgICAweDEyLCAweDFhLCAweDkzLCAweDEyLCAweDFhLCAweDA4LCAweDMwLCAweDA5LCAweGU0LCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDA5LCAKKyAgICAweDA5LCAweGEyLCAweDAwLCAweDFjLCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweGY1LCAweDgwLCAweGVjLCAweDdlLCAweDY4LCAweDBjLCAKKyAgICAweDY5LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDEyLCAweDEzLCAweDhhLCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAKKyAgICAweDExLCAweDA5LCAweDBiLCAweDAwLCAweDc0LCAweDEwLCAweDE5LCAweGIyLCAweDAwLCAweDEwLCAweDEyLCAweDEzLCAweDAzLCAweDJlLCAweDI0LCAweDAxLCAKKyAgICAweDAwLCAweGE1LCAweGQ5LCAweGVlLCAweDdlLCAweDY4LCAweDBjLCAweDhkLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDdlLCAKKyAgICAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDA5LCAweDBiLCAweDAwLCAweGU0LCAweDE5LCAweGIyLCAweDAwLCAweDEwLCAweDEyLCAweDEzLCAweDAzLCAKKyAgICAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweGVmLCAweDMwLCAweDAwLCAweDAzLCAweDAyLCAweDE4LCAweGI3LCAweDAyLCAweDEzLCAweGJiLCAKKyAgICAweDc0LCAweDA3LCAweDE5LCAweGIyLCAweDAwLCAweDA4LCAweDEyLCAweDE5LCAweGZiLCAweDA5LCAweGIyLCAweDAwLCAweDAwLCAweDA5LCAweGIyLCAweDAwLCAKKyAgICAweDE0LCAweDA5LCAweGIyLCAweDAwLCAweDAwLCAweDA5LCAweGIyLCAweDAwLCAweDE0LCAweDA5LCAweGIyLCAweDAwLCAweDAwLCAweDA5LCAweGIyLCAweDAwLCAKKyAgICAweDE0LCAweDA5LCAweGIyLCAweDAwLCAweDAwLCAweDA5LCAweGIyLCAweDAwLCAweDE0LCAweGMyLCAweDBiLCAweDdlLCAweGIwLCAweDU1LCAweDEyLCAweDEzLCAKKyAgICAweDY0LCAweDdlLCAweGIwLCAweGFhLCAweDEyLCAweDEzLCAweDY0LCAweDdlLCAweGIwLCAweDAwLCAweDEyLCAweDEzLCAweDY0LCAweDdlLCAweGIwLCAweGZmLCAKKyAgICAweDEyLCAweDEzLCAweDY0LCAweDMwLCAweDBiLCAweDBmLCAweDdlLCAweDY4LCAweDBhLCAweDhiLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAKKyAgICAweDkzLCAweDEyLCAweDFhLCAweDA4LCAweDIyLCAweDdlLCAweDY4LCAweDBhLCAweDgyLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAKKyAgICAweDIyLCAweDE5LCAweGIyLCAweDAwLCAweDAwLCAweDEyLCAweDE5LCAweGVlLCAweDA5LCAweGEyLCAweDAwLCAweDAwLCAweGJjLCAweGFiLCAweDc4LCAweDAxLCAKKyAgICAweDIyLCAweDIwLCAweDA5LCAweDAzLCAweGQyLCAweDBiLCAweDIyLCAweDEyLCAweDFhLCAweDA4LCAweDE5LCAweGIyLCAweDAwLCAweDAwLCAweDEyLCAweDE5LCAKKyAgICAweGVlLCAweDA5LCAweGEyLCAweDAwLCAweDAwLCAweDgwLCAweGYzLCAweGQyLCAweDkyLCAweDEyLCAweDE5LCAweGVlLCAweGMyLCAweDkyLCAweDEyLCAweDE5LCAKKyAgICAweGVlLCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDA5LCAweDc0LCAweDgwLCAweDE5LCAweGIyLCAweDAwLCAweDBjLCAweDdlLCAweDU0LCAKKyAgICAweDAwLCAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDA0LCAweDE5LCAweGIyLCAweDAwLCAweDAwLCAweDc0LCAweDAzLCAweDE5LCAweGIyLCAweDAwLCAweDBjLCAKKyAgICAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweGUxLCAweDIyLCAweDdlLCAweDY4LCAweDBjLCAweGIxLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAKKyAgICAweDEyLCAweDFhLCAweDkzLCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDA5LCAweDBiLCAweDAwLCAweDEyLCAweDE5LCAweGVlLCAweDA5LCAKKyAgICAweGIyLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDU1LCAweDE5LCAweGEyLCAweDAwLCAweDAwLCAweDEyLCAweDE5LCAweGVlLCAweDA5LCAweGIyLCAweDAwLCAKKyAgICAweDE4LCAweDVlLCAweGIwLCAweDA1LCAweDc4LCAweDBkLCAweDdlLCAweDY4LCAweDBhLCAweDgyLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAKKyAgICAweDkzLCAweDgwLCAweDFhLCAweDdlLCAweDY4LCAweDBhLCAweDhiLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDEyLCAweDFhLCAKKyAgICAweDA4LCAweDMwLCAweDA5LCAweDA5LCAweDE5LCAweGEyLCAweDAwLCAweDAwLCAweDEyLCAweDE5LCAweGVlLCAweDgwLCAweGY3LCAweDJlLCAweDI0LCAweDAxLCAKKyAgICAweDAwLCAweGE1LCAweGQ5LCAweGI2LCAweDdlLCAweDY4LCAweDBjLCAweGQ1LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDdlLCAKKyAgICAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDA5LCAweDBiLCAweDAwLCAweDEyLCAweDE5LCAweGVlLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDdlLCAKKyAgICAweGEwLCAweDU1LCAweDE5LCAweGEyLCAweDAwLCAweDAwLCAweDEyLCAweDE5LCAweGVlLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDBhLCAKKyAgICAweDc4LCAweDBkLCAweDdlLCAweDY4LCAweDBhLCAweDgyLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDgwLCAweDFhLCAweDdlLCAKKyAgICAweDY4LCAweDBhLCAweDhiLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDEyLCAweDFhLCAweDA4LCAweDMwLCAweDA5LCAweDA5LCAKKyAgICAweDE5LCAweGEyLCAweDAwLCAweDAwLCAweDEyLCAweDE5LCAweGVlLCAweDgwLCAweGY3LCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweGI2LCAKKyAgICAweDMwLCAweDA0LCAweDAzLCAweDAyLCAweDE2LCAweDhjLCAweDdlLCAweDY4LCAweDBjLCAweGY5LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAKKyAgICAweDkzLCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDA5LCAweDBiLCAweDAwLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAKKyAgICAweDEyLCAweDE5LCAweGVlLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDZjLCAweGFhLCAKKyAgICAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE5LCAweGVlLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDBhLCAweDc4LCAweDNjLCAKKyAgICAweDdlLCAweGEwLCAweDAxLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE5LCAweGVlLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAKKyAgICAweDAzLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDdlLCAweGEwLCAweDAxLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE5LCAweGVlLCAweDA5LCAKKyAgICAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDBhLCAweDc4LCAweDE0LCAweDdlLCAweDY4LCAweDBhLCAweDgyLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAKKyAgICAweDEyLCAweDFhLCAweDkzLCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweDllLCAweDgwLCAweDIwLCAweDdlLCAweDY4LCAweDBhLCAweDhiLCAKKyAgICAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDEyLCAweDFhLCAweDA4LCAweDMwLCAweDA5LCAweGU2LCAweDdlLCAweGEwLCAweDAyLCAKKyAgICAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDgwLCAweGYxLCAweDdlLCAweDY4LCAweDBkLCAweDQxLCAKKyAgICAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDA5LCAweDBiLCAweDAwLCAKKyAgICAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE5LCAweGVlLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDAxLCAKKyAgICAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE5LCAweGVlLCAweDA5LCAweGIyLCAweDAwLCAKKyAgICAweDE4LCAweDVlLCAweGIwLCAweDA1LCAweDc4LCAweDNjLCAweDdlLCAweGEwLCAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE5LCAweGVlLCAKKyAgICAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDAzLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDdlLCAweGEwLCAweDAyLCAweDE5LCAweGEyLCAKKyAgICAweDAwLCAweDEwLCAweDEyLCAweDE5LCAweGVlLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDA1LCAweDc4LCAweDE0LCAweDdlLCAweDY4LCAKKyAgICAweDBhLCAweDgyLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweDllLCAKKyAgICAweDgwLCAweDIwLCAweDdlLCAweDY4LCAweDBhLCAweDhiLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDEyLCAweDFhLCAweDA4LCAKKyAgICAweDMwLCAweDA5LCAweGU2LCAweDdlLCAweGEwLCAweDAxLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAKKyAgICAweDgwLCAweGYxLCAweDdlLCAweDY4LCAweDBkLCAweDg5LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDdlLCAweDI0LCAweDgwLCAKKyAgICAweDAwLCAweDdlLCAweDExLCAweDA5LCAweDBiLCAweDAwLCAweDdlLCAweGEwLCAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE5LCAweGVlLCAKKyAgICAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDUwLCAweGJlLCAweGIwLCAweDUwLCAweDc4LCAweDFmLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAKKyAgICAweDAwLCAweDEwLCAweDEyLCAweDE5LCAweGVlLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDUwLCAweDc4LCAweDBkLCAweDdlLCAweDY4LCAKKyAgICAweDBhLCAweDgyLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDgwLCAweDIwLCAweDdlLCAweDY4LCAweDBhLCAweDhiLCAweDdhLCAKKyAgICAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDEyLCAweDFhLCAweDA4LCAweDMwLCAweDA5LCAweDBmLCAweDdlLCAweGEwLCAweDAyLCAweDE5LCAKKyAgICAweGEyLCAweDAwLCAweDEwLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDgwLCAweGYxLCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAKKyAgICAweGQ5LCAweGEyLCAweDdlLCAweDY4LCAweDBkLCAweGQxLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDdlLCAweDI0LCAweDgwLCAKKyAgICAweDAwLCAweDdlLCAweDExLCAweDA5LCAweDBiLCAweDAwLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDAxLCAweDE5LCAweGEyLCAweDAwLCAKKyAgICAweDEwLCAweDEyLCAweDE5LCAweGVlLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweGEwLCAweGJlLCAweGIwLCAweGEwLCAweDc4LCAweDFmLCAKKyAgICAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE5LCAweGVlLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweGEwLCAKKyAgICAweDc4LCAweDBkLCAweDdlLCAweDY4LCAweDBhLCAweDgyLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDgwLCAweDIwLCAweDdlLCAKKyAgICAweDY4LCAweDBhLCAweDhiLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDEyLCAweDFhLCAweDA4LCAweDMwLCAweDA5LCAweDBmLCAKKyAgICAweDdlLCAweGEwLCAweDAxLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDgwLCAweGYxLCAweDJlLCAKKyAgICAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweDllLCAweDAyLCAweDE4LCAweDJiLCAweDdlLCAweDY4LCAweDBkLCAweDFkLCAweDdhLCAweDZjLCAweDAwLCAKKyAgICAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDA5LCAweDBiLCAweDAwLCAweDZjLCAweGFhLCAweDE5LCAKKyAgICAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE5LCAweGVlLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDAyLCAweDE5LCAweGEyLCAweDAwLCAKKyAgICAweDEwLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE5LCAweGVlLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAKKyAgICAweDA2LCAweDc4LCAweDNjLCAweDdlLCAweGEwLCAweDAxLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE5LCAweGVlLCAweDA5LCAweGIyLCAweDAwLCAKKyAgICAweDE4LCAweDdlLCAweGEwLCAweDAzLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDdlLCAweGEwLCAweDAxLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAKKyAgICAweDE5LCAweGVlLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDA2LCAweDc4LCAweDE0LCAweDdlLCAweDY4LCAweDBhLCAweDgyLCAweDdhLCAKKyAgICAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweDllLCAweDgwLCAweDIwLCAweDdlLCAKKyAgICAweDY4LCAweDBhLCAweDhiLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDEyLCAweDFhLCAweDA4LCAweDMwLCAweDA5LCAweGU2LCAKKyAgICAweDdlLCAweGEwLCAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDgwLCAweGYxLCAweDdlLCAKKyAgICAweDY4LCAweDBkLCAweDY1LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAKKyAgICAweDA5LCAweDBiLCAweDAwLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE5LCAweGVlLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAKKyAgICAweDdlLCAweGEwLCAweDAxLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE5LCAweGVlLCAKKyAgICAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDA5LCAweDc4LCAweDNjLCAweDdlLCAweGEwLCAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAKKyAgICAweDEyLCAweDE5LCAweGVlLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDAzLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDdlLCAweGEwLCAKKyAgICAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE5LCAweGVlLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDA5LCAweDc4LCAKKyAgICAweDE0LCAweDdlLCAweDY4LCAweDBhLCAweDgyLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAKKyAgICAweGE1LCAweGQ5LCAweDllLCAweDgwLCAweDIwLCAweDdlLCAweDY4LCAweDBhLCAweDhiLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAKKyAgICAweDEyLCAweDFhLCAweDA4LCAweDMwLCAweDA5LCAweGU2LCAweDdlLCAweGEwLCAweDAxLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDZjLCAweGFhLCAweDE5LCAKKyAgICAweGEyLCAweDAwLCAweDEwLCAweDgwLCAweGYxLCAweDdlLCAweDY4LCAweDBkLCAweGFkLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAKKyAgICAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDA5LCAweDBiLCAweDAwLCAweDdlLCAweGEwLCAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAKKyAgICAweDEyLCAweDE5LCAweGVlLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDkwLCAweGJlLCAweGIwLCAweDkwLCAweDc4LCAweDFmLCAweDZjLCAKKyAgICAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE5LCAweGVlLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDkwLCAweDc4LCAKKyAgICAweDBkLCAweDdlLCAweDY4LCAweDBhLCAweDgyLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDgwLCAweDIwLCAweDdlLCAweDY4LCAKKyAgICAweDBhLCAweDhiLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDEyLCAweDFhLCAweDA4LCAweDMwLCAweDA5LCAweDBmLCAweDdlLCAKKyAgICAweGEwLCAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDgwLCAweGYxLCAweDJlLCAweDI0LCAKKyAgICAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweGEyLCAweDAyLCAweDE4LCAweGI3LCAweDMwLCAweDE3LCAweDAzLCAweDAyLCAweDE5LCAweDNiLCAweGMyLCAweDhhLCAKKyAgICAweDEyLCAweDE5LCAweDIyLCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDA5LCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDA0LCAKKyAgICAweDEyLCAweDE5LCAweGVlLCAweDBiLCAweDAwLCAweDdlLCAweGEwLCAweDA4LCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE5LCAweGVlLCAweDIwLCAKKyAgICAweDhiLCAweDNlLCAweDIwLCAweDg5LCAweDNiLCAweDdlLCAweGEwLCAweDA4LCAweDE5LCAweGEyLCAweDAwLCAweDA0LCAweDA5LCAweGEyLCAweDAwLCAweDEwLCAKKyAgICAweDRlLCAweGEwLCAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE5LCAweGVlLCAweDMwLCAweDhiLCAweDIzLCAweDMwLCAweDg5LCAweDIwLCAKKyAgICAweDA5LCAweGEyLCAweDAwLCAweDEwLCAweDVlLCAweGEwLCAweGZkLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE5LCAweGVlLCAweDdlLCAweGEwLCAKKyAgICAweDAwLCAweDE5LCAweGEyLCAweDAwLCAweDA0LCAweDEyLCAweDE5LCAweGVlLCAweDIwLCAweDhiLCAweDA1LCAweDIwLCAweDg5LCAweDAyLCAweDgwLCAweDFhLCAKKyAgICAweDEyLCAweDFhLCAweDA4LCAweDMwLCAweDA5LCAweDE0LCAweDdlLCAweGEwLCAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDVlLCAKKyAgICAweGEwLCAweGZkLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDgwLCAweGVjLCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAKKyAgICAweDg5LCAweDAyLCAweDE5LCAweDNiLCAweDIwLCAweDE3LCAweGZhLCAweDEyLCAweDEzLCAweDhhLCAweDEyLCAweDE5LCAweDIyLCAweDdlLCAweDI0LCAweDgwLCAKKyAgICAweDAwLCAweDdlLCAweDExLCAweDA5LCAweDBiLCAweDAwLCAweDIwLCAweDg5LCAweDI2LCAweDdlLCAweGEwLCAweGZmLCAweDE5LCAweGEyLCAweDAwLCAweDA0LCAKKyAgICAweDEyLCAweDE5LCAweGVlLCAweDdlLCAweGIwLCAweDU1LCAweDE5LCAweGIyLCAweDAwLCAweDAwLCAweDEyLCAweDE5LCAweGVlLCAweDMwLCAweDg5LCAweDBmLCAKKyAgICAweDdlLCAweGEwLCAweDAwLCAweDE5LCAweGEyLCAweDAwLCAweDA0LCAweDEyLCAweDE5LCAweGVlLCAweDIwLCAweDg5LCAweDAyLCAweDgwLCAweDI2LCAweDEyLCAKKyAgICAweDFhLCAweDA4LCAweDMwLCAweDA5LCAweDIwLCAweDdlLCAweGEwLCAweGZmLCAweDE5LCAweGEyLCAweDAwLCAweDA0LCAweDEyLCAweDE5LCAweGVlLCAweDdlLCAKKyAgICAweGIwLCAweDU1LCAweDE5LCAweGIyLCAweDAwLCAweDAwLCAweDEyLCAweDE5LCAweGVlLCAweDdlLCAweGEwLCAweDAwLCAweDE5LCAweGEyLCAweDAwLCAweDA0LCAKKyAgICAweDEyLCAweDE5LCAweGVlLCAweDgwLCAweGUwLCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweGE4LCAweDAyLCAweDE5LCAweDNiLCAweDdlLCAKKyAgICAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDA5LCAweDdlLCAweGEwLCAweDA4LCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE5LCAweGVlLCAKKyAgICAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweGVmLCAweDIyLCAweDMwLCAweDBhLCAweDE5LCAweDdlLCAweDY4LCAweDBkLCAweGY1LCAweDdhLCAKKyAgICAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweGQyLCAweDA5LCAweDEyLCAweDE5LCAweGVlLCAweDEyLCAweDE5LCAweGVlLCAweDEyLCAweDE5LCAKKyAgICAweGVlLCAweDAyLCAweDBmLCAweDEwLCAweDMwLCAweDE3LCAweDFjLCAweDdlLCAweDY4LCAweDBlLCAweDZmLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAKKyAgICAweDFhLCAweDkzLCAweDdlLCAweDY4LCAweDBlLCAweDkxLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDEyLCAweDFiLCAweDNjLCAKKyAgICAweDAyLCAweDE5LCAweGU2LCAweDBiLCAweDAwLCAweDdlLCAweDc4LCAweDE5LCAweGEwLCAweDdhLCAweDdjLCAweDAwLCAweGZmLCAweDdmLCAweDY3LCAweDdhLCAKKyAgICAweDZjLCAweDAwLCAweDAwLCAweDdlLCAweDcwLCAweDNlLCAweDdlLCAweDdiLCAweGIwLCAweDdhLCAweDZiLCAweGIwLCAweDBiLCAweDdjLCAweDBiLCAweDZjLCAKKyAgICAweGE1LCAweGRmLCAweGYzLCAweDdlLCAweDc4LCAweDE5LCAweGEwLCAweDdhLCAweDdjLCAweDAwLCAweDAwLCAweDg5LCAweDc4LCAweDdlLCAweDc4LCAweDAwLCAKKyAgICAweDAwLCAweDdhLCAweDdjLCAweDAwLCAweGZlLCAweDdlLCAweDY4LCAweDdmLCAweGJmLCAweDdhLCAweDZjLCAweDAwLCAweGZlLCAweDc0LCAweGFhLCAweDM5LCAKKyAgICAweGI3LCAweDU1LCAweDU1LCAweDc0LCAweDU1LCAweDM5LCAweGI3LCAweDJhLCAweGFhLCAweDc0LCAweGEwLCAweDM5LCAweGI3LCAweDU1LCAweDU1LCAweDZjLCAKKyAgICAweDk5LCAweDdhLCAweDZiLCAweDkwLCAweDdlLCAweDU0LCAweDI3LCAweDEwLCAweDdlLCAweDZiLCAweDgwLCAweGJjLCAweDg5LCAweDY4LCAweDA4LCAweDFiLCAKKyAgICAweDU0LCAweDc4LCAweGY1LCAweDhhLCAweGZmLCAweDE5LCAweGRlLCAweDhhLCAweGZmLCAweDE5LCAweGU2LCAweDEyLCAweDFhLCAweDA4LCAweDdlLCAweDZiLCAKKyAgICAweDgwLCAweDgwLCAweGZiLCAweDdlLCAweDEwLCAweGZmLCAweDEyLCAweDFhLCAweDg1LCAweDgwLCAweGY4LCAweGNhLCAweGY5LCAweDdlLCAweGY0LCAweDAwLCAKKyAgICAweGZmLCAweDFiLCAweGY0LCAweDc4LCAweGZjLCAweGRhLCAweGY5LCAweDIyLCAweGNhLCAweGY5LCAweDdlLCAweGY0LCAweDAwLCAweDAwLCAweDFiLCAweGY0LCAKKyAgICAweDc4LCAweGZjLCAweGRhLCAweGY5LCAweDIyLCAweDIwLCAweDA5LCAweDE5LCAweGQyLCAweDBhLCAweDEyLCAweDE5LCAweGZiLCAweGMyLCAweDk1LCAweGQyLCAKKyAgICAweDk0LCAweDEyLCAweDE5LCAweGZiLCAweDEyLCAweDE5LCAweGZiLCAweDEyLCAweDE5LCAweGZiLCAweDEyLCAweDE5LCAweGZiLCAweDQzLCAweDkwLCAweDMwLCAKKyAgICAweDIyLCAweGNhLCAweDBiLCAweDdlLCAweDEwLCAweDAzLCAweDdjLCAweDMwLCAweDZjLCAweDIyLCAweDBiLCAweDIwLCAweDllLCAweDMwLCAweDBhLCAweDUwLCAKKyAgICAweGY5LCAweDJlLCAweDMwLCAweDBiLCAweDFiLCAweDIwLCAweDY4LCAweDE4LCAweDEyLCAweDE5LCAweGZiLCAweDEyLCAweDE5LCAweGZiLCAweDUzLCAweDkwLCAKKyAgICAweGNmLCAweDEyLCAweDE5LCAweGZiLCAweDEyLCAweDE5LCAweGZiLCAweDEyLCAweDE5LCAweGZiLCAweDQzLCAweDkwLCAweDMwLCAweGE1LCAweGRhLCAweGU4LCAKKyAgICAweDEyLCAweDE5LCAweGZiLCAweDEyLCAweDE5LCAweGZiLCAweDFiLCAweDMwLCAweDY4LCAweDE5LCAweDEyLCAweDE5LCAweGZiLCAweDEyLCAweDE5LCAweGZiLCAKKyAgICAweGMyLCAweDk1LCAweGQyLCAweDk0LCAweDEyLCAweDE5LCAweGZiLCAweDEyLCAweDE5LCAweGZiLCAweDEyLCAweDE5LCAweGZiLCAweDQzLCAweDkwLCAweDMwLCAKKyAgICAweGE1LCAweGRiLCAweGU3LCAweDdlLCAweDIwLCAweDBhLCAweDEyLCAweDE5LCAweGZiLCAweGE1LCAweGRhLCAweGZhLCAweGE1LCAweGQ5LCAweGE3LCAweGRhLCAKKyAgICAweDBiLCAweDIyLCAweDIwLCAweDA5LCAweDBhLCAweDEyLCAweDE5LCAweGZiLCAweGIyLCAweDk0LCAweDEyLCAweDE5LCAweGZiLCAweGIyLCAweDk0LCAweDIyLCAKKyAgICAweDMwLCAweDE3LCAweDMyLCAweDIwLCAweDA5LCAweDJmLCAweGNhLCAweDJiLCAweGNhLCAweDdiLCAweDdlLCAweDc4LCAweDgwLCAweDAwLCAweDdhLCAweDdjLCAKKyAgICAweDAwLCAweGZlLCAweDEyLCAweDFiLCAweDFjLCAweDdlLCAweDZiLCAweGEwLCAweDVjLCAweGFhLCAweDY4LCAweDEwLCAweDI5LCAweGI3LCAweDAwLCAweDE0LCAKKyAgICAweDU0LCAweDYwLCAweDY4LCAweGY4LCAweDM5LCAweGE3LCAweDAwLCAweDAwLCAweDBiLCAweDZjLCAweDgwLCAweGU5LCAweDEyLCAweDE5LCAweGVlLCAweGQyLCAKKyAgICAweGI1LCAweGRhLCAweDdiLCAweGRhLCAweDJiLCAweDIyLCAweDEyLCAweDFhLCAweGQ0LCAweDdlLCAweDY4LCAweDAwLCAweDBiLCAweDEyLCAweDFhLCAweDkzLCAKKyAgICAweDIyLCAweGNhLCAweDU5LCAweGNhLCAweDViLCAweDdlLCAweGI0LCAweDAwLCAweDBiLCAweDdjLCAweGI4LCAweGM0LCAweDEyLCAweDFiLCAweDA0LCAweDdjLCAKKyAgICAweGI4LCAweDEyLCAweDFiLCAweDA0LCAweDdjLCAweGI5LCAweGM0LCAweDEyLCAweDFiLCAweDA0LCAweDdjLCAweGI5LCAweDEyLCAweDFiLCAweDA0LCAweDdlLCAKKyAgICAweGIwLCAweDY4LCAweDdhLCAweGI5LCAweGIwLCAweDBiLCAweGI0LCAweDZjLCAweGJiLCAweDdhLCAweGI5LCAweGIwLCAweGRhLCAweDU5LCAweGRhLCAweDViLCAKKyAgICAweDIyLCAweDVlLCAweGIwLCAweDBmLCAweDdjLCAweGFiLCAweDllLCAweGEwLCAweDBhLCAweDQwLCAweDA1LCAweDJlLCAweGIwLCAweDM3LCAweDgwLCAweDAzLCAKKyAgICAweDJlLCAweGIwLCAweDMwLCAweDdhLCAweGI5LCAweGIwLCAweDBiLCAweGI0LCAweDIyLCAweGMyLCAweGI1LCAweGMyLCAweDkyLCAweDEyLCAweDE5LCAweGVlLCAKKyAgICAweDc0LCAweDgwLCAweDM5LCAweGI3LCAweDAwLCAweDBjLCAweDdlLCAweDU0LCAweDAwLCAweDA2LCAweDM5LCAweGE3LCAweDAwLCAweDA0LCAweDM5LCAweGI3LCAKKyAgICAweDAwLCAweDAwLCAweDc0LCAweDAzLCAweDM5LCAweGI3LCAweDAwLCAweDBjLCAweDIyLCAweDdlLCAweDc4LCAweDAwLCAweDAwLCAweDdhLCAweDdjLCAweDAwLCAKKyAgICAweGZmLCAweDdlLCAweDU4LCAweDAwLCAweDAwLCAweDdhLCAweDVjLCAweDAwLCAweDAxLCAweDdmLCAweDY1LCAweDdlLCAweDc0LCAweDIwLCAweDAwLCAweDEyLCAKKyAgICAweDA4LCAweGQ2LCAweDQwLCAweDU0LCAweDdlLCAweDc4LCAweDdjLCAweDAwLCAweDdhLCAweDdjLCAweDAwLCAweGZmLCAweDdlLCAweDU4LCAweDAwLCAweDAwLCAKKyAgICAweDdhLCAweDVjLCAweDAwLCAweDAxLCAweDdlLCAweDY4LCAweDdjLCAweDAwLCAweDdhLCAweDZjLCAweDAwLCAweDAxLCAweDdlLCAweDc0LCAweDA0LCAweDAwLCAKKyAgICAweDEyLCAweDA4LCAweGQ2LCAweDQwLCAweDMzLCAweDc0LCAweDgwLCAweDEyLCAweDFiLCAweGIxLCAweDQwLCAweDJjLCAweDUzLCAweDkwLCAweGNmLCAweGQyLCAKKyAgICAweDA4LCAweDdlLCAweDA0LCAweDAwLCAweDA4LCAweDdlLCAweDE0LCAweDAwLCAweDAwLCAweDg0LCAweGE1LCAweGRiLCAweGZjLCAweGE1LCAweGRhLCAweGY5LCAKKyAgICAweGE1LCAweGQ5LCAweGY2LCAweDc0LCAweDQwLCAweDEyLCAweDFiLCAweGIxLCAweDQwLCAweDBlLCAweDdlLCAweDY4LCAweDBlLCAweGMwLCAweDdhLCAweDZjLCAKKyAgICAweDAwLCAweGZmLCAweDEyLCAweDFhLCAweDkzLCAweDAyLCAweDE5LCAweGU2LCAweGMyLCAweDk1LCAweGQyLCAweDk0LCAweDgwLCAweGZlLCAweGY1LCAweDBhLCAKKyAgICAweDdlLCAweDc4LCAweDAwLCAweDBhLCAweDdhLCAweDdjLCAweDAwLCAweDAwLCAweDdlLCAweDY4LCAweDdmLCAweGJmLCAweDdhLCAweDZjLCAweDAwLCAweDAxLCAKKyAgICAweDdlLCAweDc0LCAweDAwLCAweDAxLCAweDAyLCAweDA4LCAweGQ2LCAKK307CisKK3N0YXRpYyBzdHJ1Y3QgZWRnZV9maXJtd2FyZV92ZXJzaW9uX2luZm8gSU1BR0VfVkVSU0lPTl9OQU1FID0geworCTEsIDEyLCAyIH07CQkvLyBNYWpvciwgTWlub3IsIEJ1aWxkCisKKyN1bmRlZiBJTUFHRV9WRVJTSU9OX05BTUUKKworI3VuZGVmIElNQUdFX0FSUkFZX05BTUUKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2Z3X2Jvb3QyLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZndfYm9vdDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2MzYTNjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2Z3X2Jvb3QyLmgKQEAgLTAsMCArMSw1NDYgQEAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vKiBFZGdlcG9ydC80IEJpbmFyeSBJbWFnZQorLy8qIEdlbmVyYXRlZCBieSBIRVgyQyB2MS4wNgorLy8qIENvcHlyaWdodCAoQykgMTk5OCBJbnNpZGUgT3V0IE5ldHdvcmtzLCBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8qCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisvLyoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy8vKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorLy8qCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworLy9JbWFnZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbgorI2lmICFkZWZpbmVkKERFRklORURfRURHRV9GSVJNV0FSRV9JTUFHRV9SRUNPUkQpCisjZGVmaW5lIERFRklORURfRURHRV9GSVJNV0FSRV9JTUFHRV9SRUNPUkQKKwlzdHJ1Y3QgZWRnZV9maXJtd2FyZV9pbWFnZV9yZWNvcmQgeworCQlfX2xlMTYgRXh0QWRkcjsKKwkJX19sZTE2IEFkZHI7CisJCV9fbGUxNiBMZW47CisJCXVuc2lnbmVkIGNoYXIgIERhdGFbMF07CisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKwlzdHJ1Y3QgZWRnZV9maXJtd2FyZV92ZXJzaW9uX2luZm8geworCQl1bnNpZ25lZCBjaGFyCSBNYWpvclZlcnNpb247CisJCXVuc2lnbmVkIGNoYXIgIE1pbm9yVmVyc2lvbjsKKwkJdW5zaWduZWQgc2hvcnQgQnVpbGROdW1iZXI7CisJfTsKKworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChJTUFHRV9BUlJBWV9OQU1FKQorI2RlZmluZSBJTUFHRV9BUlJBWV9OQU1FCQlGaXJtd2FyZUltYWdlCisjZGVmaW5lIElNQUdFX1ZFUlNJT05fTkFNRQlGaXJtd2FyZUltYWdlVmVyc2lvbgorI2VuZGlmCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIElNQUdFX0FSUkFZX05BTUVbXSA9IHsKKworLy8gU2VnbWVudCAjMSwgU3RhcnQgQWRkcmVzcyAwMGZmMDAwMCwgTGVuZ3RoIDYKKzB4ZmYsMHgwMCwweDAwLDB4MDAsMHgwNiwweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDMsIAorCisvLyBTZWdtZW50ICMyLCBTdGFydCBBZGRyZXNzIDAwZmYwMDBiLCBMZW5ndGggMworMHhmZiwweDAwLDB4MGIsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgwYiwgCisKKy8vIFNlZ21lbnQgIzMsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMTMsIExlbmd0aCAzCisweGZmLDB4MDAsMHgxMywweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAyLCAweDU2LCAKKworLy8gU2VnbWVudCAjNCwgU3RhcnQgQWRkcmVzcyAwMGZmMDAxYiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDFiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4MWIsIAorCisvLyBTZWdtZW50ICM1LCBTdGFydCBBZGRyZXNzIDAwZmYwMDIzLCBMZW5ndGggMworMHhmZiwweDAwLDB4MjMsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgyMywgCisKKy8vIFNlZ21lbnQgIzYsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMmIsIExlbmd0aCAzCisweGZmLDB4MDAsMHgyYiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDJiLCAKKworLy8gU2VnbWVudCAjNywgU3RhcnQgQWRkcmVzcyAwMGZmMDAzMywgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDMzLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4MzMsIAorCisvLyBTZWdtZW50ICM4LCBTdGFydCBBZGRyZXNzIDAwZmYwMDNiLCBMZW5ndGggMworMHhmZiwweDAwLDB4M2IsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgzYiwgCisKKy8vIFNlZ21lbnQgIzksIFN0YXJ0IEFkZHJlc3MgMDBmZjAwNDMsIExlbmd0aCAzCisweGZmLDB4MDAsMHg0MywweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDQzLCAKKworLy8gU2VnbWVudCAjMTAsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwNGIsIExlbmd0aCAzCisweGZmLDB4MDAsMHg0YiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDRiLCAKKworLy8gU2VnbWVudCAjMTEsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwNTMsIExlbmd0aCAzCisweGZmLDB4MDAsMHg1MywweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAxLCAweGY1LCAKKworLy8gU2VnbWVudCAjMTIsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwN2IsIExlbmd0aCAzCisweGZmLDB4MDAsMHg3YiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDdiLCAKKworLy8gU2VnbWVudCAjMTMsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwODAsIExlbmd0aCA1MzQKKzB4ZmYsMHgwMCwweDgwLDB4MDAsMHgxNiwweDAyLAorICAgIDB4N2UsIDB4YjMsIDB4OTEsIDB4MDEsIDB4MjAsIDB4ZTMsIDB4MGMsIDB4N2UsIDB4YjMsIDB4M2YsIDB4ZjIsIDB4NTQsIDB4ZmUsIDB4N2EsIDB4YjMsIDB4M2YsIAorICAgIDB4ZjIsIDB4ODAsIDB4MGEsIDB4N2UsIDB4YjMsIDB4M2YsIDB4ZjIsIDB4NDQsIDB4MDEsIDB4N2EsIDB4YjMsIDB4M2YsIDB4ZjIsIDB4NzQsIDB4MDAsIDB4N2EsIAorICAgIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDEsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTIsIDB4N2UsIDB4ZjgsIDB4MDAsIDB4MjQsIDB4N2UsIDB4MDAsIDB4MDEsIAorICAgIDB4N2UsIDB4MTAsIDB4MDAsIDB4MTIsIDB4MDksIDB4ZDAsIDB4NjksIDB4MjAsIDB4MDAsIDB4MGEsIDB4NWUsIDB4NDAsIDB4MWYsIDB4YmUsIDB4MjQsIDB4MDAsIAorICAgIDB4MDAsIDB4NzgsIDB4MDksIDB4N2UsIDB4MDAsIDB4MDMsIDB4N2EsIDB4MDMsIDB4OTAsIDB4MDAsIDB4ODAsIDB4MDcsIDB4N2UsIDB4MDAsIDB4MDIsIDB4N2EsIAorICAgIDB4MDMsIDB4OTAsIDB4MDAsIDB4NzUsIDB4YjAsIDB4ZGYsIDB4N2UsIDB4MDAsIDB4MDEsIDB4N2EsIDB4MDMsIDB4OTQsIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIAorICAgIDB4MjQsIDB4N2UsIDB4MDAsIDB4MDEsIDB4N2EsIDB4MDMsIDB4OTMsIDB4MDAsIDB4N2UsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ZDgsIDB4ZmQsIDB4NzUsIDB4YTgsIAorICAgIDB4MDAsIDB4NzUsIDB4YjEsIDB4MDAsIDB4Y2EsIDB4MjksIDB4MTIsIDB4MGMsIDB4NjYsIDB4MTIsIDB4MGMsIDB4MzcsIDB4ZjUsIDB4MjEsIDB4N2EsIDB4YTEsIAorICAgIDB4MjAsIDB4MjAsIDB4MDksIDB4MDgsIDB4MjAsIDB4MGEsIDB4MGEsIDB4N2UsIDB4YjAsIDB4MGMsIDB4ODAsIDB4MDgsIDB4N2UsIDB4YjAsIDB4MDAsIDB4ODAsIAorICAgIDB4MDMsIDB4N2UsIDB4YjAsIDB4MDgsIDB4N2EsIDB4YjMsIDB4OTIsIDB4MDAsIDB4MTIsIDB4MDIsIDB4OTYsIDB4ZGEsIDB4MjksIDB4NzQsIDB4MTAsIDB4N2EsIAorICAgIDB4YjMsIDB4OTEsIDB4MDEsIDB4N2UsIDB4MjAsIDB4MDQsIDB4N2MsIDB4YjIsIDB4YzIsIDB4ZDcsIDB4MTMsIDB4MTMsIDB4MTMsIDB4MTMsIDB4N2EsIDB4YjMsIAorICAgIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTAsIDB4NzQsIDB4NjAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MWMsIDB4NzQsIDB4MDIsIAorICAgIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTIsIDB4YTUsIDB4ZGEsIDB4ZGYsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4NjAsIDB4N2EsIAorICAgIDB4YjMsIDB4OTEsIDB4MWMsIDB4NzQsIDB4MTAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDYsIDB4NzQsIDB4MTAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDcsIDB4NzQsIAorICAgIDB4MzQsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTMsIDB4NzQsIDB4M2YsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTQsIDB4NzQsIDB4MDIsIDB4N2EsIDB4YjMsIDB4OTEsIAorICAgIDB4MDYsIDB4NzQsIDB4MDEsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDcsIDB4NzQsIDB4MDMsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDYsIDB4NzQsIDB4NDQsIDB4N2EsIAorICAgIDB4YjMsIDB4OTEsIDB4MDcsIDB4NzQsIDB4ZWYsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDQsIDB4NzQsIDB4MDcsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDYsIDB4N2UsIAorICAgIDB4YjMsIDB4OTEsIDB4MDcsIDB4N2EsIDB4YjEsIDB4MGEsIDB4NzUsIDB4MDksIDB4MDEsIDB4ZDIsIDB4YWEsIDB4ZDIsIDB4YWYsIDB4ZTQsIDB4N2UsIDB4NjAsIAorICAgIDB4MDIsIDB4NGQsIDB4MjIsIDB4NzgsIDB4MDMsIDB4N2UsIDB4NjAsIDB4MDMsIDB4N2MsIDB4NzYsIDB4N2UsIDB4MDQsIDB4MjgsIDB4MDAsIDB4OGQsIDB4ZWYsIAorICAgIDB4MWIsIDB4MDQsIDB4NzgsIDB4ZmEsIDB4MDQsIDB4N2UsIDB4MjAsIDB4MDcsIDB4N2EsIDB4MjMsIDB4OTEsIDB4MDYsIDB4N2UsIDB4MjMsIDB4OTEsIDB4MDcsIAorICAgIDB4N2UsIDB4MzEsIDB4MGEsIDB4YmMsIDB4MzIsIDB4NjgsIDB4MjIsIDB4N2EsIDB4MjEsIDB4MGEsIDB4N2UsIDB4MjEsIDB4MDksIDB4NjgsIDB4MTcsIDB4Y2EsIAorICAgIDB4YjgsIDB4NzQsIDB4MDMsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDYsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MDcsIDB4NDQsIDB4MDIsIDB4N2EsIDB4YjMsIDB4OTEsIAorICAgIDB4MDcsIDB4ZGEsIDB4YjgsIDB4NzUsIDB4MDksIDB4MDAsIDB4MzAsIDB4ZTAsIDB4YzEsIDB4NmMsIDB4NjcsIDB4N2EsIDB4NjMsIDB4OTAsIDB4MDAsIDB4ODAsIAorICAgIDB4YjksIDB4YmUsIDB4YjAsIDB4MDIsIDB4MjIsIDB4YzAsIDB4ZDAsIDB4NzUsIDB4MDgsIDB4ZmUsIDB4MTIsIDB4MGEsIDB4YzAsIDB4NzQsIDB4MDIsIDB4N2EsIAorICAgIDB4YjMsIDB4OTEsIDB4MDYsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDcsIDB4NzQsIDB4MDMsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDYsIDB4NzQsIAorICAgIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDcsIDB4NzQsIDB4MDIsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDQsIDB4N2UsIDB4YjMsIDB4M2YsIDB4ZjIsIDB4MzAsIAorICAgIDB4ZTAsIDB4MDgsIDB4NzQsIDB4MTgsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDEsIDB4ODAsIDB4MDYsIDB4NzQsIDB4MTAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDEsIAorICAgIDB4NzQsIDB4MTAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDQsIDB4MDIsIDB4MDIsIDB4MzYsIDB4NzUsIDB4MDgsIDB4ZmYsIDB4MTIsIDB4MGEsIDB4YzAsIDB4NzQsIAorICAgIDB4MDEsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDQsIDB4NzQsIDB4MDMsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDYsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MDcsIDB4NTQsIAorICAgIDB4ZmMsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDcsIDB4MzIsIDB4Y2EsIDB4YjgsIDB4NzUsIDB4MDgsIDB4MDIsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2UsIDB4YjMsIAorICAgIDB4OTEsIDB4MDMsIDB4MjAsIDB4ZTUsIDB4MDgsIDB4MzAsIDB4ZTAsIDB4MmIsIDB4MTIsIDB4MDIsIDB4OWUsIDB4ODAsIDB4ZjEsIDB4N2UsIDB4YjMsIDB4OTEsIAorICAgIDB4MDQsIDB4MzAsIDB4ZTAsIDB4MDUsIDB4ZGEsIDB4YjgsIDB4MDIsIDB4MDIsIDB4MzksIDB4MzAsIDB4ZTEsIDB4MDUsIDB4ZGEsIDB4YjgsIDB4MDIsIDB4MDEsIAorICAgIDB4ZjUsIDB4MzAsIDB4ZTYsIDB4MDUsIDB4MTIsIDB4MDQsIDB4MDMsIDB4ODAsIDB4ZDUsIDB4MzAsIDB4ZTIsIDB4MDUsIDB4ZGEsIDB4YjgsIDB4MDIsIDB4MDAsIAorICAgIDB4ODAsIDB4ODAsIDB4Y2IsIDB4ZGEsIDB4YjgsIDB4MzIsIAorCisvLyBTZWdtZW50ICMxNCwgRVhDTFVERUQgU3RhcnQgQWRkcmVzcyAwMGZmMzFkNywgTGVuZ3RoIDEKKworCisvLyBTZWdtZW50ICMxNSwgU3RhcnQgQWRkcmVzcyAwMGZmMDI5NiwgTGVuZ3RoIDIwOTAKKzB4ZmYsMHgwMCwweDk2LDB4MDIsMHgyYSwweDA4LAorICAgIDB4ZTQsIDB4N2EsIDB4YjMsIDB4M2YsIDB4ZjEsIDB4MDIsIDB4MDMsIDB4NDEsIDB4Y2EsIDB4MGIsIDB4Y2EsIDB4MWIsIDB4Y2EsIDB4MmIsIDB4Y2EsIDB4M2IsIAorICAgIDB4Y2EsIDB4NGIsIDB4Y2EsIDB4NWIsIDB4Y2EsIDB4NmIsIDB4Y2EsIDB4N2IsIDB4Y2EsIDB4ZWIsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIAorICAgIDB4N2UsIDB4YjMsIDB4MDEsIDB4MmUsIDB4YjQsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MWMsIDB4YjQsIDB4MDEsIDB4MTksIDB4N2UsIDB4YjMsIDB4OTEsIDB4MTQsIAorICAgIDB4NTQsIDB4MTQsIDB4NjgsIDB4MDUsIDB4MTIsIDB4MDMsIDB4MDUsIDB4ODAsIDB4MjMsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MTQsIDB4MzAsIDB4ZTUsIDB4MWMsIAorICAgIDB4MTIsIDB4MDQsIDB4NDMsIDB4ODAsIDB4MTcsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MTQsIDB4MzAsIDB4ZTUsIDB4MDUsIDB4MTIsIDB4MDQsIDB4NDMsIDB4ODAsIAorICAgIDB4MGIsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MTQsIDB4NTQsIDB4MTQsIDB4NjgsIDB4MDMsIDB4MTIsIDB4MDMsIDB4MDUsIDB4ZGEsIDB4ZWIsIDB4ZGEsIDB4N2IsIAorICAgIDB4ZGEsIDB4NmIsIDB4ZGEsIDB4NWIsIDB4ZGEsIDB4NGIsIDB4ZGEsIDB4M2IsIDB4ZGEsIDB4MmIsIDB4ZGEsIDB4MWIsIDB4ZGEsIDB4MGIsIDB4MjIsIDB4MjAsIAorICAgIDB4ZTQsIDB4MTksIDB4NzUsIDB4MDgsIDB4MGEsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MmQsIDB4NzAsIDB4MGEsIDB4N2UsIDB4YjMsIAorICAgIDB4MDEsIDB4MmUsIDB4YjQsIDB4MDEsIDB4MWYsIDB4MDIsIDB4MDMsIDB4OWQsIDB4MDIsIDB4MDksIDB4OGIsIDB4NzUsIDB4MDgsIDB4MGIsIDB4MTIsIDB4MGEsIAorICAgIDB4YzAsIDB4NzQsIDB4MTQsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTQsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MmUsIDB4YjQsIDB4MDIsIDB4MGMsIDB4MTIsIDB4MDMsIAorICAgIDB4NGQsIDB4MDIsIDB4MDMsIDB4NDEsIDB4NzQsIDB4MDQsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTQsIDB4MjIsIDB4N2UsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MDMsIAorICAgIDB4MDEsIDB4MmUsIDB4N2EsIDB4MDMsIDB4MDEsIDB4MmYsIDB4MjIsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjUsIDB4NTQsIDB4NjAsIDB4NjAsIDB4MDUsIDB4YjQsIAorICAgIDB4NDAsIDB4MWUsIDB4ODAsIDB4MWMsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjYsIDB4YjQsIDB4MDUsIDB4MTUsIDB4NzUsIDB4MDgsIDB4NzEsIDB4MTIsIDB4MGEsIAorICAgIDB4YzAsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjgsIDB4N2UsIDB4YTAsIDB4MDEsIDB4N2EsIDB4YTMsIDB4OTEsIDB4MDYsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDcsIAorICAgIDB4MjIsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MTAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTIsIDB4MjIsIDB4YmUsIDB4NTcsIAorICAgIDB4MDEsIDB4MmIsIDB4MjgsIDB4MDQsIDB4N2UsIDB4NTcsIDB4MDEsIDB4MmIsIDB4N2EsIDB4MGYsIDB4MDEsIDB4MzEsIDB4N2EsIDB4NTcsIDB4MDEsIDB4MzUsIAorICAgIDB4NzQsIDB4MTAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTIsIDB4MjIsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4N2UsIDB4YjMsIDB4OTEsIAorICAgIDB4MWEsIDB4NzAsIDB4NTMsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MTQsIDB4MjAsIDB4ZTQsIDB4NGMsIDB4N2UsIDB4ZWYsIDB4MDEsIDB4MzEsIDB4N2UsIDB4ZjcsIAorICAgIDB4MDEsIDB4MzUsIDB4N2UsIDB4MDcsIDB4MDEsIDB4MzUsIDB4NGQsIDB4MDAsIDB4NjgsIDB4MjEsIDB4N2UsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4N2EsIDB4YjMsIAorICAgIDB4OTEsIDB4MTcsIDB4YTMsIDB4YTUsIDB4MDgsIDB4MWIsIDB4ZjQsIDB4NjgsIDB4MDYsIDB4YTUsIDB4YjgsIDB4MTAsIDB4ZjAsIDB4ODAsIDB4MTksIDB4N2UsIAorICAgIDB4YjAsIDB4MDAsIDB4N2EsIDB4YjMsIDB4MDEsIDB4MmUsIDB4YmUsIDB4MDAsIDB4MTAsIDB4NjgsIDB4MGQsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2EsIDB4YjMsIAorICAgIDB4MDEsIDB4MmUsIDB4NzQsIDB4ODAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MWUsIDB4N2EsIDB4ZWYsIDB4MDEsIDB4MzEsIDB4N2EsIDB4ZjcsIDB4MDEsIDB4MzUsIAorICAgIDB4NzUsIDB4MDgsIDB4MDYsIDB4MTIsIDB4MGEsIDB4YzAsIDB4NzQsIDB4MDQsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTQsIDB4MjIsIDB4Y2EsIDB4MGIsIDB4Y2EsIAorICAgIDB4MWIsIDB4Y2EsIDB4MmIsIDB4Y2EsIDB4M2IsIDB4Y2EsIDB4NGIsIDB4Y2EsIDB4NWIsIDB4Y2EsIDB4NmIsIDB4Y2EsIDB4N2IsIDB4Y2EsIDB4ZWIsIDB4NzUsIAorICAgIDB4MDgsIDB4MDMsIDB4MTIsIDB4MGEsIDB4YzAsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4MDEsIDB4MmQsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIAorICAgIDB4MDAsIDB4NzQsIDB4MDEsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTIsIDB4MTIsIDB4MDQsIDB4YjIsIDB4ZGEsIDB4ZWIsIDB4ZGEsIDB4N2IsIDB4ZGEsIDB4NmIsIAorICAgIDB4ZGEsIDB4NWIsIDB4ZGEsIDB4NGIsIDB4ZGEsIDB4M2IsIDB4ZGEsIDB4MmIsIDB4ZGEsIDB4MWIsIDB4ZGEsIDB4MGIsIDB4MjIsIDB4NzUsIDB4MDgsIDB4MDMsIAorICAgIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MmYsIDB4YjQsIDB4MDIsIDB4MTEsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4MDEsIDB4MmYsIAorICAgIDB4N2EsIDB4YjMsIDB4MDEsIDB4MmUsIDB4NzQsIDB4MjAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTQsIDB4MjIsIDB4YjQsIDB4MDEsIDB4NDYsIDB4N2UsIDB4YjMsIAorICAgIDB4OTEsIDB4MDQsIDB4MjAsIDB4ZTYsIDB4NDIsIDB4N2UsIDB4MjMsIDB4OTEsIDB4MWEsIDB4N2MsIDB4MzIsIDB4N2UsIDB4MTMsIDB4MDEsIDB4MzAsIDB4MmMsIAorICAgIDB4MjEsIDB4N2EsIDB4MjMsIDB4MDEsIDB4MzAsIDB4N2UsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDQsIDB4MDEsIDB4MzcsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MTYsIAorICAgIDB4N2EsIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4YTUsIDB4ZGIsIDB4ZjQsIDB4NzQsIDB4MjAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTQsIDB4NzUsIDB4MDgsIAorICAgIDB4NzAsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MzAsIDB4N2UsIDB4YTMsIDB4MDEsIDB4MmMsIDB4YmMsIDB4YWIsIDB4NzgsIDB4MDMsIAorICAgIDB4MTIsIDB4MDUsIDB4NTIsIDB4MjIsIDB4MDIsIDB4MDksIDB4OGIsIDB4ZGEsIDB4NTksIDB4MDIsIDB4MDQsIDB4MTUsIDB4NzQsIDB4ZTAsIDB4N2EsIDB4YjMsIAorICAgIDB4OTEsIDB4MDAsIDB4N2UsIDB4MDMsIDB4OTEsIDB4MTAsIDB4N2UsIDB4MTMsIDB4OTEsIDB4MTEsIDB4N2UsIDB4MzMsIDB4OTEsIDB4MTIsIDB4N2UsIDB4MjMsIAorICAgIDB4OTEsIDB4MTMsIDB4N2UsIDB4NTMsIDB4OTEsIDB4MTQsIDB4N2UsIDB4NDMsIDB4OTEsIDB4MTUsIDB4N2UsIDB4NzMsIDB4OTEsIDB4MTYsIDB4N2UsIDB4NjMsIAorICAgIDB4OTEsIDB4MTcsIDB4N2EsIDB4MGYsIDB4MDEsIDB4MjUsIDB4N2EsIDB4MWYsIDB4MDEsIDB4MjksIDB4NzUsIDB4MDgsIDB4MDQsIDB4MTIsIDB4MGEsIDB4YzAsIAorICAgIDB4N2EsIDB4MDEsIDB4MDgsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2EsIDB4MTEsIDB4MDgsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2EsIDB4MjEsIDB4MDgsIDB4MTIsIAorICAgIDB4MGEsIDB4YzAsIDB4N2EsIDB4MzEsIDB4MDgsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2EsIDB4NDEsIDB4MDgsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2EsIDB4NTEsIAorICAgIDB4MDgsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2EsIDB4NjEsIDB4MDgsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2EsIDB4NzEsIDB4MDgsIDB4MTIsIDB4MGEsIDB4YzAsIAorICAgIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4NDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDQsIDB4MTIsIDB4MDUsIDB4MjYsIDB4MjIsIAorICAgIDB4NmQsIDB4MDAsIDB4N2UsIDB4MTQsIDB4MDEsIDB4MDIsIDB4N2EsIDB4MDcsIDB4MDEsIDB4MzUsIDB4N2EsIDB4MDMsIDB4MDEsIDB4MzAsIDB4N2UsIDB4YjMsIAorICAgIDB4MDEsIDB4MjUsIDB4MjAsIDB4ZTcsIDB4MGYsIDB4N2EsIDB4MjMsIDB4MDEsIDB4MmYsIDB4N2EsIDB4MzMsIDB4MDEsIDB4MmUsIDB4YmUsIDB4MDcsIDB4MDEsIAorICAgIDB4MmIsIDB4NjgsIDB4MDksIDB4MjIsIDB4N2EsIDB4MzMsIDB4MDEsIDB4MmYsIDB4N2EsIDB4MjMsIDB4MDEsIDB4MmUsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjUsIAorICAgIDB4NTQsIDB4ZTMsIDB4MjMsIDB4MjMsIDB4MzAsIDB4ZTAsIDB4MDIsIDB4ZDIsIDB4ZTUsIDB4MzAsIDB4ZTcsIDB4MDIsIDB4ZDIsIDB4ZTQsIDB4MzAsIDB4ZTUsIAorICAgIDB4MDYsIDB4MzAsIDB4ZTQsIDB4MDMsIDB4MDIsIDB4MDksIDB4OGIsIDB4NTQsIDB4M2UsIDB4ZjUsIDB4ZjAsIDB4MDMsIDB4NTQsIDB4MWYsIDB4YzMsIDB4MjUsIAorICAgIDB4ZjAsIDB4OTAsIDB4MDUsIDB4N2UsIDB4NzUsIDB4ODQsIDB4ZmYsIDB4NzMsIDB4MDIsIDB4MDcsIDB4MzksIDB4MDIsIDB4MDUsIDB4YzYsIDB4MDIsIDB4MDcsIAorICAgIDB4ZDIsIDB4MDIsIDB4MDcsIDB4ZWQsIDB4MDIsIDB4MDYsIDB4ZDAsIDB4MDIsIDB4MDYsIDB4NWIsIDB4MDIsIDB4MDgsIDB4MWUsIDB4MDIsIDB4MDgsIDB4MWUsIAorICAgIDB4MDIsIDB4MDgsIDB4MjEsIDB4MDIsIDB4MDgsIDB4MjEsIDB4MDIsIDB4MDgsIDB4MjEsIDB4MDIsIDB4MDgsIDB4MjEsIDB4MDIsIDB4MDgsIDB4MjEsIDB4MDIsIAorICAgIDB4MDgsIDB4MjEsIDB4MDIsIDB4MDgsIDB4MjEsIDB4MDIsIDB4MDgsIDB4MjEsIDB4MDIsIDB4MDgsIDB4MjcsIDB4MDIsIDB4MDgsIDB4ZjksIDB4MDIsIDB4MDgsIAorICAgIDB4MjQsIDB4MDIsIDB4MDgsIDB4MjQsIDB4MDIsIDB4MDgsIDB4MjQsIDB4MDIsIDB4MDgsIDB4MjQsIDB4MDIsIDB4MDgsIDB4MjQsIDB4MDIsIDB4MDgsIDB4MjQsIAorICAgIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4NjAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MWMsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjYsIAorICAgIDB4YjQsIDB4MDYsIDB4MmEsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjcsIDB4NjAsIDB4NzksIDB4N2MsIDB4MGIsIDB4N2UsIDB4MTMsIDB4MDEsIDB4MjgsIDB4N2UsIAorICAgIDB4MTcsIDB4MDEsIDB4MjksIDB4NzUsIDB4MDgsIDB4NzIsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2EsIDB4MDEsIDB4MDgsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2EsIAorICAgIDB4MTEsIDB4MDgsIDB4MTIsIDB4MGEsIDB4YzAsIDB4MTIsIDB4MDksIDB4ZDAsIDB4NDAsIDB4NTgsIDB4MDIsIDB4MDMsIDB4ODQsIDB4YjQsIDB4MDgsIDB4MWMsIAorICAgIDB4NzUsIDB4MDgsIDB4NzQsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2UsIDB4YjMsIDB4M2YsIDB4ZjEsIDB4N2UsIDB4MDgsIDB4MDEsIDB4MzcsIDB4N2EsIDB4MGMsIAorICAgIDB4MDAsIDB4MDAsIDB4N2EsIDB4MGIsIDB4YjAsIDB4N2UsIDB4NTQsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4ODQsIDB4YjQsIDB4MDAsIDB4MzMsIDB4NzUsIAorICAgIDB4MDgsIDB4NzUsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2UsIDB4MDgsIDB4MDEsIDB4MzcsIDB4N2EsIDB4MGMsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MGIsIDB4N2UsIAorICAgIDB4YjMsIDB4M2YsIDB4ZjIsIDB4MzAsIDB4ZTAsIDB4MDcsIDB4NzQsIDB4MDIsIDB4N2EsIDB4MGIsIDB4YjAsIDB4ODAsIDB4MDUsIDB4NzQsIDB4MDAsIDB4N2EsIAorICAgIDB4MGIsIDB4YjAsIDB4MGIsIDB4MTQsIDB4NzQsIDB4MDAsIDB4N2EsIDB4MGIsIDB4YjAsIDB4N2UsIDB4NTQsIDB4MDAsIDB4MDIsIDB4ZGEsIDB4MGIsIDB4MDIsIAorICAgIDB4MDMsIDB4ODQsIDB4MDIsIDB4MDksIDB4OGIsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4NjAsIDB4N2EsIDB4YjMsIDB4OTEsIAorICAgIDB4MWMsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjYsIDB4YjQsIDB4MDAsIDB4NWYsIDB4NzUsIDB4MDgsIDB4NzYsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2UsIDB4YjMsIAorICAgIDB4MDEsIDB4MmEsIDB4NTQsIDB4MGYsIDB4YjQsIDB4MDIsIDB4MDUsIDB4N2UsIDB4YjAsIDB4NjAsIDB4ODAsIDB4MTcsIDB4YjQsIDB4MDAsIDB4MDUsIDB4N2UsIAorICAgIDB4YjAsIDB4MDAsIDB4ODAsIDB4MGYsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MmEsIDB4MjAsIDB4ZTcsIDB4MDUsIDB4N2UsIDB4YjAsIDB4NDAsIDB4ODAsIDB4MDMsIAorICAgIDB4N2UsIDB4YjAsIDB4MjAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MTEsIDB4MzAsIDB4ZTAsIDB4MDQsIDB4NzQsIDB4MDEsIAorICAgIDB4ODAsIDB4MDIsIDB4NzQsIDB4MDAsIDB4N2UsIDB4MDgsIDB4MDEsIDB4MzcsIDB4N2EsIDB4MGMsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MGIsIDB4N2EsIDB4MGIsIAorICAgIDB4YjAsIDB4MGIsIDB4MTQsIDB4NzQsIDB4MDAsIDB4N2EsIDB4MGIsIDB4YjAsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4N2UsIDB4NTQsIAorICAgIDB4MDAsIDB4MDIsIDB4ZGEsIDB4MGIsIDB4MDIsIDB4MDMsIDB4ODQsIDB4MDIsIDB4MDksIDB4OGIsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MmEsIDB4NTQsIDB4MGYsIAorICAgIDB4YjQsIDB4MDIsIDB4MDUsIDB4N2UsIDB4YjAsIDB4NjAsIDB4ODAsIDB4MTcsIDB4YjQsIDB4MDAsIDB4MDUsIDB4N2UsIDB4YjAsIDB4MDAsIDB4ODAsIDB4MGYsIAorICAgIDB4N2UsIDB4YjMsIDB4MDEsIDB4MmEsIDB4MjAsIDB4ZTcsIDB4MDUsIDB4N2UsIDB4YjAsIDB4NDAsIDB4ODAsIDB4MDMsIDB4N2UsIDB4YjAsIDB4MjAsIDB4N2EsIAorICAgIDB4YjMsIDB4OTEsIDB4MDAsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjgsIDB4YjQsIDB4MDAsIDB4MjYsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjYsIDB4YjQsIDB4MDEsIAorICAgIDB4MGUsIDB4NzUsIDB4MDgsIDB4NzcsIDB4MTIsIDB4MGEsIDB4YzAsIDB4NzQsIDB4MDEsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTIsIDB4ODAsIDB4MWIsIDB4YjQsIAorICAgIDB4MDMsIDB4MGUsIDB4NzUsIDB4MDgsIDB4NzgsIDB4MTIsIDB4MGEsIDB4YzAsIDB4NzQsIDB4MDEsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTEsIDB4ODAsIDB4MGEsIAorICAgIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4MTIsIDB4MDksIDB4OGIsIDB4MjIsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIAorICAgIDB4MDIsIDB4MDMsIDB4NzcsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjYsIDB4YjQsIDB4MDksIDB4MWYsIDB4NzUsIDB4MDgsIDB4NzksIDB4MTIsIDB4MGEsIDB4YzAsIAorICAgIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjgsIDB4YmUsIDB4YjMsIDB4M2YsIDB4ZjEsIDB4NjgsIDB4MGQsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4MDEsIDB4ZjEsIDB4ZGEsIAorICAgIDB4YjgsIDB4NTAsIDB4NzYsIDB4N2EsIDB4YjMsIDB4M2YsIDB4ZjEsIDB4ODAsIDB4NmQsIDB4YjQsIDB4MDUsIDB4MDgsIDB4NzUsIDB4MDgsIDB4N2EsIDB4MTIsIAorICAgIDB4MGEsIDB4YzAsIDB4ODAsIDB4NjIsIDB4YjQsIDB4MDMsIDB4MTksIDB4NzUsIDB4MDgsIDB4N2IsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2UsIDB4YjMsIDB4MDEsIAorICAgIDB4MjgsIDB4YjQsIDB4MDEsIDB4NTUsIDB4N2UsIDB4YjMsIDB4M2YsIDB4ZjIsIDB4NDQsIDB4MDEsIDB4N2EsIDB4YjMsIDB4M2YsIDB4ZjIsIDB4ODAsIDB4NDYsIAorICAgIDB4YjQsIDB4MDEsIDB4MTksIDB4NzUsIDB4MDgsIDB4N2MsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjgsIDB4YjQsIDB4MDEsIDB4MzksIAorICAgIDB4N2UsIDB4YjMsIDB4M2YsIDB4ZjIsIDB4NTQsIDB4ZmUsIDB4N2EsIDB4YjMsIDB4M2YsIDB4ZjIsIDB4ODAsIDB4MmEsIDB4YjQsIDB4MDcsIDB4MmEsIDB4N2UsIAorICAgIDB4YjMsIDB4MDEsIDB4MjcsIDB4NjAsIDB4MjQsIDB4N2MsIDB4MGIsIDB4N2UsIDB4MTMsIDB4MDEsIDB4MjgsIDB4N2UsIDB4MTcsIDB4MDEsIDB4MjksIDB4NzUsIAorICAgIDB4MDgsIDB4NzMsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2EsIDB4MDEsIDB4MDgsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2EsIDB4MTEsIDB4MDgsIDB4MTIsIDB4MGEsIAorICAgIDB4YzAsIDB4MTIsIDB4MGEsIDB4MGEsIDB4NDAsIDB4MDMsIDB4MDIsIDB4MDMsIDB4NzcsIDB4MDIsIDB4MDksIDB4OGIsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjYsIAorICAgIDB4YjQsIDB4MGIsIDB4ZjYsIDB4NzUsIDB4MDgsIDB4N2QsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjgsIDB4N2UsIDB4YTMsIDB4MDEsIAorICAgIDB4MmEsIDB4NGMsIDB4YWIsIDB4NzgsIDB4ZTQsIDB4ODAsIDB4ZGYsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4NjAsIDB4N2EsIAorICAgIDB4YjMsIDB4OTEsIDB4MWMsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjYsIDB4YjQsIDB4MGEsIDB4Y2YsIDB4NzUsIDB4MDgsIDB4N2UsIDB4MTIsIDB4MGEsIDB4YzAsIAorICAgIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjgsIDB4NzAsIDB4YzMsIDB4N2UsIDB4MDgsIDB4MDEsIDB4MzcsIDB4N2EsIDB4MGMsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MGIsIAorICAgIDB4YjAsIDB4N2UsIDB4NTQsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4ODQsIDB4MDIsIDB4MDksIDB4OGIsIDB4MDIsIDB4MDksIDB4OGIsIDB4MDIsIDB4MDksIAorICAgIDB4OGIsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjYsIDB4YjQsIDB4MDQsIDB4MjAsIDB4NzUsIDB4MDgsIDB4YzMsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2UsIDB4MDQsIAorICAgIDB4MDAsIDB4MDEsIDB4N2UsIDB4MTcsIDB4MDEsIDB4MjcsIDB4N2UsIDB4MTgsIDB4MDEsIDB4MzcsIDB4N2EsIDB4MWMsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NDcsIAorICAgIDB4MDEsIDB4MmIsIDB4MTIsIDB4MGEsIDB4Y2MsIDB4MDIsIDB4MDgsIDB4ZjMsIDB4YjQsIDB4MDYsIDB4NDIsIDB4NzUsIDB4MDgsIDB4YzEsIDB4MTIsIDB4MGEsIAorICAgIDB4YzAsIDB4N2UsIDB4NTgsIDB4MDAsIDB4MDAsIDB4N2EsIDB4NWMsIDB4MDAsIDB4ZmUsIDB4N2QsIDB4Y2EsIDB4N2UsIDB4ZDcsIDB4MDEsIDB4MjcsIDB4N2UsIAorICAgIDB4NzgsIDB4MDEsIDB4MzcsIDB4N2EsIDB4N2MsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NzcsIDB4MDEsIDB4MmIsIDB4NzUsIDB4MDgsIDB4YzEsIDB4MTIsIDB4MGEsIAorICAgIDB4YzAsIDB4YzAsIDB4YTgsIDB4YzIsIDB4YWYsIDB4N2UsIDB4NDAsIDB4MDEsIDB4N2EsIDB4NDMsIDB4OTQsIDB4MDAsIDB4MTIsIDB4MGIsIDB4NjMsIDB4N2UsIAorICAgIDB4NDMsIDB4MDEsIDB4MjQsIDB4N2EsIDB4NDMsIDB4OTQsIDB4MDAsIDB4ZDAsIDB4YTgsIDB4NDAsIDB4NjUsIDB4ODAsIDB4NjAsIDB4YjQsIDB4MDAsIDB4MjQsIAorICAgIDB4YzIsIDB4YWYsIDB4N2UsIDB4YjAsIDB4MDEsIDB4N2EsIDB4YjMsIDB4OTQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4MDEsIDB4MjQsIDB4MTIsIDB4MDMsIDB4NzcsIAorICAgIDB4ZTQsIDB4OGQsIDB4ZWYsIDB4OGQsIDB4ZWYsIDB4OGQsIDB4ZWYsIDB4ZDUsIDB4ZTAsIDB4ZjcsIDB4YzAsIDB4ZDEsIDB4Y2EsIDB4MDIsIDB4ZmYsIDB4Y2EsIAorICAgIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsIDB4YjQsIDB4MDksIDB4MjAsIDB4NzQsIDB4MDMsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDYsIDB4N2UsIDB4MjMsIDB4OTEsIAorICAgIDB4MDcsIDB4N2UsIDB4NTcsIDB4MDEsIDB4MjcsIDB4NGQsIDB4NTUsIDB4NjgsIDB4MDUsIDB4NGUsIDB4MjAsIDB4MDIsIDB4ODAsIDB4MDMsIDB4NWUsIDB4MjAsIAorICAgIDB4ZmQsIDB4N2EsIDB4MjMsIDB4OTEsIDB4MDcsIDB4ODAsIDB4MTYsIDB4YjQsIDB4MDcsIDB4MTYsIDB4YzIsIDB4YWYsIDB4N2UsIDB4MDcsIDB4MDEsIDB4MjksIAorICAgIDB4N2UsIDB4MTcsIDB4MDEsIDB4MjcsIDB4YzAsIDB4ZDEsIDB4Y2EsIDB4MTgsIDB4Y2EsIDB4MzgsIDB4Y2EsIDB4MjgsIDB4MzIsIDB4MDIsIDB4MDMsIDB4NzcsIAorICAgIDB4MDIsIDB4MDksIDB4OGIsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4NjAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MWMsIDB4N2UsIAorICAgIDB4YjMsIDB4MDEsIDB4MjYsIDB4YjQsIDB4MDMsIDB4MTUsIDB4NzUsIDB4MDgsIDB4YzIsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MDEsIAorICAgIDB4N2UsIDB4MTcsIDB4MDEsIDB4MjcsIDB4N2UsIDB4NTcsIDB4MDEsIDB4MmIsIDB4MDIsIDB4MDMsIDB4ODQsIDB4YjQsIDB4MDUsIDB4NDEsIDB4NzUsIDB4MDgsIAorICAgIDB4YzAsIDB4MTIsIDB4MGEsIDB4YzAsIDB4YzAsIDB4YTgsIDB4YzIsIDB4YWYsIDB4N2UsIDB4NDAsIDB4MDEsIDB4N2EsIDB4NDMsIDB4OTQsIDB4MDAsIDB4N2UsIAorICAgIDB4MDgsIDB4MDEsIDB4MzcsIDB4N2EsIDB4MGMsIDB4MDAsIDB4MDAsIDB4N2UsIDB4MjQsIDB4MDAsIDB4ZmUsIDB4N2UsIDB4MzcsIDB4MDEsIDB4MjcsIDB4N2UsIAorICAgIDB4NDcsIDB4MDEsIDB4MmIsIDB4MTIsIDB4MGEsIDB4Y2MsIDB4N2UsIDB4NDMsIDB4MDEsIDB4MjQsIDB4N2EsIDB4NDMsIDB4OTQsIDB4MDAsIDB4ZDAsIDB4YTgsIAorICAgIDB4N2UsIDB4MDgsIDB4MDEsIDB4MzcsIDB4N2EsIDB4MGMsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NTcsIDB4MDEsIDB4MmIsIDB4MDIsIDB4MDMsIDB4ODQsIDB4YjQsIAorICAgIDB4MDEsIDB4MjAsIDB4N2UsIDB4MDAsIDB4MDAsIDB4N2UsIDB4MTAsIDB4MDEsIDB4NzUsIDB4MDgsIDB4NzIsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2EsIDB4MDEsIAorICAgIDB4MDgsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2EsIDB4MTEsIDB4MDgsIDB4MTIsIDB4MGEsIDB4YzAsIDB4MTIsIDB4MDksIDB4ZDAsIDB4NDAsIDB4MDMsIDB4MDIsIAorICAgIDB4MDMsIDB4ODQsIDB4MDIsIDB4MDksIDB4OGIsIDB4NzUsIDB4MDgsIDB4MDcsIDB4MTIsIDB4MGEsIDB4YzAsIDB4N2UsIDB4YjAsIDB4MDIsIDB4N2EsIDB4YjMsIAorICAgIDB4OTAsIDB4MDAsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4NDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTUsIDB4NzQsIDB4MDEsIAorICAgIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTEsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MTUsIDB4NTQsIDB4NjAsIDB4YmUsIDB4YjAsIDB4NDAsIDB4NjgsIDB4MDgsIDB4NzQsIAorICAgIDB4MjAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTUsIDB4ODAsIDB4ZWQsIDB4NzQsIDB4MDEsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTIsIDB4NzQsIDB4MDQsIDB4N2EsIAorICAgIDB4YjMsIDB4OTEsIDB4MTQsIDB4NzQsIDB4ZmYsIDB4N2EsIDB4YjMsIDB4MDEsIDB4MmQsIDB4MjIsIDB4YzAsIDB4YTgsIDB4YzIsIDB4YWYsIDB4N2UsIDB4NDAsIAorICAgIDB4MDEsIDB4N2EsIDB4NDMsIDB4OTQsIDB4MDAsIDB4MTIsIDB4MGEsIDB4NTcsIDB4NDAsIDB4MWYsIDB4N2UsIDB4MDgsIDB4MDEsIDB4MzcsIDB4N2EsIDB4MGMsIAorICAgIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MGIsIDB4Y2EsIDB4NDksIDB4MTIsIDB4MGEsIDB4Y2MsIDB4ZGEsIDB4NTksIDB4ZGEsIDB4MGIsIDB4N2UsIDB4NDMsIDB4MDEsIAorICAgIDB4MjQsIDB4N2EsIDB4NDMsIDB4OTQsIDB4MDAsIDB4ZDAsIDB4YTgsIDB4YzMsIDB4MjIsIDB4N2UsIDB4NDMsIDB4MDEsIDB4MjQsIDB4N2EsIDB4NDMsIDB4OTQsIAorICAgIDB4MDAsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4YzAsIDB4YTgsIDB4YzIsIDB4YWYsIDB4N2UsIDB4NDAsIDB4MDEsIDB4N2EsIDB4NDMsIDB4OTQsIDB4MDAsIDB4MTIsIAorICAgIDB4MGEsIDB4NTcsIDB4NDAsIDB4MzEsIDB4N2UsIDB4NTgsIDB4MDAsIDB4MDAsIDB4N2EsIDB4NWMsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4NjEsIDB4N2UsIDB4NzgsIAorICAgIDB4MDEsIDB4MzcsIDB4N2EsIDB4N2MsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NzcsIDB4MDEsIDB4MmIsIDB4YmQsIDB4NzQsIDB4NzgsIDB4MTcsIDB4NzUsIDB4MDgsIAorICAgIDB4YzEsIDB4MTIsIDB4MGEsIDB4YzAsIDB4MTIsIDB4MGIsIDB4NjMsIDB4NDAsIDB4MGMsIDB4N2UsIDB4NDMsIDB4MDEsIDB4MjQsIDB4N2EsIDB4NDMsIDB4OTQsIAorICAgIDB4MDAsIDB4ZDAsIDB4YTgsIDB4YzMsIDB4MjIsIDB4N2UsIDB4NDMsIDB4MDEsIDB4MjQsIDB4N2EsIDB4NDMsIDB4OTQsIDB4MDAsIDB4ZDAsIDB4YTgsIDB4ZDMsIAorICAgIDB4MjIsIDB4N2UsIDB4MjQsIDB4MDAsIDB4ZmUsIDB4N2UsIDB4MzQsIDB4N2YsIDB4Y2EsIDB4MGIsIDB4MWEsIDB4NTAsIDB4YzUsIDB4ZjAsIDB4N2QsIDB4NjIsIAorICAgIDB4N2QsIDB4NzUsIDB4N2QsIDB4ODcsIDB4N2UsIDB4MzQsIDB4N2YsIDB4MDMsIDB4N2UsIDB4MWIsIDB4YjAsIDB4YmMsIDB4MGIsIDB4NTAsIDB4NDksIDB4M2UsIAorICAgIDB4MDAsIDB4M2UsIDB4MDAsIDB4MGEsIDB4NTAsIDB4MmQsIDB4NzUsIDB4MGIsIDB4M2EsIDB4MzAsIDB4NjksIDB4NTMsIDB4MDAsIDB4MDIsIDB4YmQsIDB4MzgsIAorICAgIDB4NTAsIDB4MDIsIDB4MmQsIDB4MzgsIDB4YmMsIDB4MWIsIDB4NTAsIDB4MzAsIDB4M2UsIDB4MTAsIDB4M2UsIDB4MTAsIDB4MGEsIDB4NTEsIDB4MmQsIDB4MzUsIAorICAgIDB4NjksIDB4NDEsIDB4MDAsIDB4MDIsIDB4MGIsIDB4MWEsIDB4MzAsIDB4YmQsIDB4MzgsIDB4NTAsIDB4MDIsIDB4MmQsIDB4MzgsIDB4YmUsIDB4NDQsIDB4ZmYsIAorICAgIDB4ZmYsIDB4NzgsIDB4MDUsIDB4N2UsIDB4MWIsIDB4OTAsIDB4MGEsIDB4NDksIDB4NGQsIDB4NDQsIDB4NjgsIDB4MGMsIDB4YmUsIDB4NDQsIDB4MDAsIDB4ZmYsIAorICAgIDB4MjgsIDB4MDQsIDB4N2UsIDB4NDQsIDB4MDAsIDB4ZmYsIDB4YzMsIDB4MjIsIDB4ZDMsIDB4MjIsIAorCisvLyBTZWdtZW50ICMxNiwgRVhDTFVERUQgU3RhcnQgQWRkcmVzcyAwMGZmN2MwMCwgTGVuZ3RoIDIyNworCisKKy8vIFNlZ21lbnQgIzE3LCBFWENMVURFRCBTdGFydCBBZGRyZXNzIDAwZmY3ZjAwLCBMZW5ndGggMTkyCisKKworLy8gU2VnbWVudCAjMTcsIFN0YXJ0IEFkZHJlc3MgMDBmZjdmYzAsIExlbmd0aCA2NAorMHhmZiwweDAwLDB4YzAsMHg3ZiwweDQwLDB4MDAsCisgICAgMHg0MCwgMHgwMSwgMHgwMiwgMHgwMCwgMHhkNywgMHgzMSwgMHgwMiwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCisKKy8vIFNlZ21lbnQgIzE4LCBTdGFydCBBZGRyZXNzIDAwZmYwYWMwLCBMZW5ndGggNDE2MworMHhmZiwweDAwLDB4YzAsMHgwYSwweDQzLDB4MTAsCisgICAgMHhjYSwgMHgwOCwgMHg3ZSwgMHgwMSwgMHgwOCwgMHg3YSwgMHgwMywgMHgzZiwgMHhmMCwgMHhkYSwgMHgwOCwgMHgyMiwgMHg4MCwgMHg1MCwgMHgwYiwgMHgxYSwgCisgICAgMHg2MCwgMHgwYiwgMHgzNSwgMHgwYiwgMHgxYSwgMHg3MCwgMHgwYiwgMHgzNSwgMHgwYiwgMHgxYSwgMHg4MCwgMHgwYiwgMHgzNSwgMHgwYiwgMHgxYSwgMHg5MCwgCisgICAgMHgwYiwgMHgzNSwgMHgwYiwgMHgxYSwgMHhhMCwgMHgwYiwgMHgzNSwgMHgwYiwgMHgxYSwgMHhiMCwgMHgwYiwgMHgzNSwgMHgwYiwgMHgxYSwgMHhjMCwgMHgwYiwgCisgICAgMHgzNSwgMHgwYiwgMHgxYSwgMHhkMCwgMHgwYiwgMHgzNSwgMHgxYiwgMHgwYSwgMHg2MCwgMHgwYiwgMHgxNSwgMHgxYiwgMHgwYSwgMHg3MCwgMHgwYiwgMHgxNSwgCisgICAgMHgxYiwgMHgwYSwgMHg4MCwgMHgwYiwgMHgxNSwgMHgxYiwgMHgwYSwgMHg5MCwgMHgwYiwgMHgxNSwgMHgxYiwgMHgwYSwgMHhhMCwgMHgwYiwgMHgxNSwgMHgxYiwgCisgICAgMHgwYSwgMHhiMCwgMHgwYiwgMHgxNSwgMHgxYiwgMHgwYSwgMHhjMCwgMHgwYiwgMHgxNSwgMHgxYiwgMHgwYSwgMHhkMCwgMHgwYiwgMHgxNSwgMHg5ZSwgMHg0NCwgCisgICAgMHgwMCwgMHgxMCwgMHg1MCwgMHhhYSwgMHgyZSwgMHg0NCwgMHgwMCwgMHgxMCwgMHg2OCwgMHgwZSwgMHg3ZSwgMHgxYiwgMHhjMCwgMHg3YSwgMHgwYiwgMHhjMCwgCisgICAgMHgwYiwgMHgxNCwgMHgwYiwgMHgzNCwgMHgxYiwgMHg0NCwgMHg3OCwgMHhmMiwgMHgyMiwgMHg3ZiwgMHg2ZiwgMHg3ZiwgMHhmMCwgMHgxYiwgMHhmYywgMHg3YywgCisgICAgMHg1NCwgMHg3ZCwgMHgzMiwgMHg4MCwgMHgwOCwgMHhjYSwgMHgxYiwgMHhjYSwgMHgxYiwgMHhjYSwgMHgxYiwgMHhjYSwgMHgxYiwgMHg5ZSwgMHg0NCwgMHgwMCwgCisgICAgMHgxMCwgMHg1MCwgMHhmMiwgMHgyZSwgMHg0NCwgMHgwMCwgMHgxMCwgMHg2OCwgMHgwNiwgMHhjYSwgMHg0OCwgMHgxYiwgMHg0NCwgMHg3OCwgMHhmYSwgMHg3ZiwgCisgICAgMHhmNiwgMHg4OSwgMHhlNCwgMHhjYSwgMHg2YiwgMHg1ZSwgMHhkNCwgMHgwMCwgMHgzZiwgMHg2OCwgMHgyMCwgMHg3ZSwgMHg4NCwgMHgwMCwgMHg0MCwgMHg5ZCwgCisgICAgMHg4ZCwgMHhkYSwgMHg2YiwgMHhiZCwgMHg4NywgMHgzOCwgMHgxNiwgMHhjYSwgMHg3OSwgMHg3ZCwgMHg3OCwgMHgxMiwgMHgwYiwgMHg4ZCwgMHhkYSwgMHg3OSwgCisgICAgMHg0MCwgMHgwOCwgMHg5ZCwgMHg3OCwgMHg2OCwgMHgwMiwgMHg4MCwgMHgwNSwgMHhjMiwgMHhkNywgMHgyMiwgMHhkYSwgMHg2YiwgMHg3ZSwgMHhjMCwgMHgwMywgCisgICAgMHg3ZSwgMHhkMCwgMHgwMCwgMHg3YSwgMHhkMywgMHg5MCwgMHgwMCwgMHg3NCwgMHhhYSwgMHgzOSwgMHhiNSwgMHg1NSwgMHg1NSwgMHg3NCwgMHg1NSwgMHgzOSwgCisgICAgMHhiNSwgMHgyYSwgMHhhYSwgMHg3NCwgMHhhMCwgMHgzOSwgMHhiNSwgMHg1NSwgMHg1NSwgMHg3ZSwgMHgwNCwgMHgwMCwgMHg0MCwgMHg5ZCwgMHg3MCwgMHg1MCwgCisgICAgMHgwNiwgMHgyZCwgMHg3MCwgMHg3ZCwgMHgwNywgMHg2ZCwgMHg3NywgMHg3YywgMHgzMSwgMHg3ZSwgMHg3YiwgMHgwMCwgMHg3YSwgMHg2YiwgMHgwMCwgMHgwYiwgCisgICAgMHg3YywgMHgwYiwgMHg2YywgMHhhNSwgMHhkOSwgMHhmMywgMHg3ZiwgMHgxNiwgMHgxYiwgMHgxYywgMHg3ZSwgMHg1NCwgMHgyNywgMHgxMCwgMHg3ZSwgMHgxYiwgCisgICAgMHgxMCwgMHhiYywgMHgxMCwgMHg2OCwgMHgwNiwgMHgxYiwgMHg1NCwgMHg3OCwgMHhmNSwgMHg4MCwgMHgyZiwgMHg2ZCwgMHgwMCwgMHg3YywgMHgyMCwgMHg3ZiwgCisgICAgMHgxNiwgMHg5ZiwgMHgxMCwgMHg3ZiwgMHgyNywgMHg5ZiwgMHgyMCwgMHg3ZSwgMHgyYiwgMHgwMCwgMHg3ZSwgMHgxYiwgMHgxMCwgMHhiYywgMHgwMSwgMHg3OCwgCisgICAgMHgxOSwgMHgwYiwgMHgyYywgMHgwYiwgMHgxYywgMHhhNSwgMHhkYiwgMHhlZiwgMHg3YywgMHhiNiwgMHgyMCwgMHhlMCwgMHgwNiwgMHg2YywgMHhkYywgMHg3YSwgCisgICAgMHhkMywgMHg5MCwgMHgwMCwgMHg0ZCwgMHg3NywgMHg3OCwgMHg5MCwgMHhjMiwgMHhkNywgMHgyMiwgMHhkMiwgMHhkNywgMHgyMiwgMHgwMCwgMHgwNCwgMHgwMCwgCisgICAgMHgwNCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwNCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMiwgMHgwMSwgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwOCwgMHgxMCwgMHgwMiwgMHgxMCwgCisgICAgMHgwNCwgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwOCwgMHg3ZSwgMHgxOCwgMHg3ZiwgMHhiZCwgMHg3YSwgMHgxYywgMHgwMCwgMHhmZiwgMHgwYiwgCisgICAgMHgxYSwgMHgwMCwgMHg1ZSwgMHgxMCwgMHgxZiwgMHhiZSwgMHgxMCwgMHgxNCwgMHgzOCwgMHgxYSwgMHgwYSwgMHg1MSwgMHgyMywgMHg3ZSwgMHgxOCwgMHgwYywgCisgICAgMHgwZCwgMHg3YSwgMHgxYywgMHgwMCwgMHhmZiwgMHgyZCwgMHgzNSwgMHgwYiwgMHgxYSwgMHg1MCwgMHg2MCwgMHgwOCwgMHhhNSwgMHhiOCwgMHgwMiwgMHgwMywgCisgICAgMHg0ZSwgMHhhMCwgMHgwOCwgMHgyMiwgMHg4MCwgMHhmZSwgMHg3ZSwgMHhlOCwgMHg3ZiwgMHhiZiwgMHg3YSwgMHhlYywgMHgwMCwgMHhmZiwgMHhlMCwgMHhmNSwgCisgICAgMHgyMywgMHg1NCwgMHhjMCwgMHg2OCwgMHgzOCwgMHg3ZSwgMHhlOCwgMHg3ZiwgMHhiZSwgMHg3YSwgMHhlYywgMHgwMCwgMHhmZiwgMHhlMCwgMHg2MCwgMHgyZSwgCisgICAgMHgxMiwgMHgwYywgMHgzNywgMHhmNSwgMHgyMSwgMHg3YSwgMHhhMSwgMHgyMCwgMHgyMCwgMHgwOSwgMHgwYywgMHgyMCwgMHgwYSwgMHgxMiwgMHg3ZSwgMHhiMCwgCisgICAgMHgwZSwgMHg3YSwgMHhiMywgMHg5MiwgMHgwMCwgMHg4MCwgMHgxMCwgMHg3ZSwgMHhiMCwgMHgwMiwgMHg3YSwgMHhiMywgMHg5MiwgMHgwMCwgMHg4MCwgMHgwNywgCisgICAgMHg3ZSwgMHhiMCwgMHgwYSwgMHg3YSwgMHhiMywgMHg5MiwgMHgwMCwgMHg3YSwgMHhiMSwgMHgwZCwgMHgwMiwgMHgwYywgMHhjNCwgMHgyMiwgMHg3ZSwgMHhiMCwgCisgICAgMHgwMiwgMHg3YSwgMHhiMywgMHg5MCwgMHgwMCwgMHgxMiwgMHgxOSwgMHgwYywgMHg3ZSwgMHhiMCwgMHgwMywgMHg3YSwgMHhiMywgMHg5MCwgMHgwMCwgMHgxMiwgCisgICAgMHgxOSwgMHgwYywgMHg4MCwgMHhlYSwgMHhjMiwgMHhhZiwgMHhjMiwgMHgxMSwgMHhjMiwgMHgxMiwgMHg3NSwgMHhiMCwgMHhkZiwgMHg3ZSwgMHgwMCwgMHgwMSwgCisgICAgMHg3YSwgMHgwMywgMHg5MywgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwMywgMHg5MCwgMHgwMCwgMHg2YywgMHgwMCwgMHg3ZSwgMHgxMCwgMHgwMywgCisgICAgMHgxMiwgMHgwYywgMHhmNSwgMHg3ZSwgMHg2OCwgMHgyYywgMHg2NiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgwYiwgMHgwMCwgCisgICAgMHg4MCwgMHgzMiwgMHgwMiwgMHgxYSwgMHg2ZSwgMHgyMCwgMHgxMSwgMHgyYiwgMHg3ZSwgMHhiMCwgMHgwMSwgMHg3YSwgMHhiMywgMHg5MCwgMHgwMCwgMHgxMiwgCisgICAgMHgxOSwgMHgwYywgMHg3ZSwgMHhiMCwgMHgwMywgMHg3YSwgMHhiMywgMHg5MCwgMHgwMCwgMHgxMiwgMHgxOSwgMHgwYywgMHg3ZSwgMHhiMCwgMHgwMiwgMHg3YSwgCisgICAgMHhiMywgMHg5MCwgMHgwMCwgMHgxMiwgMHgxOSwgMHgwYywgMHhhNSwgMHhkOSwgMHhkYywgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MCwgMHgwMCwgCisgICAgMHgxMiwgMHgxOSwgMHgwYywgMHgyMiwgMHg3ZSwgMHg2OCwgMHgyYywgMHhmOSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg3ZSwgCisgICAgMHhlNCwgMHgxMCwgMHgwMCwgMHg3ZSwgMHg0MCwgMHg1NSwgMHg3YSwgMHhlOSwgMHg0MCwgMHgwYiwgMHhlNCwgMHg3ZSwgMHg1MCwgMHhhYSwgMHg3YSwgMHhlOSwgCisgICAgMHg1MCwgMHgxYiwgMHhlNCwgMHhiZSwgMHhlOSwgMHg0MCwgMHg2OCwgMHgxOSwgMHg3ZSwgMHg2OCwgMHgyYywgMHhkZiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgCisgICAgMHgxMiwgMHgxOSwgMHhjNCwgMHgxMiwgMHgxOSwgMHgxOSwgMHgzMCwgMHgxMSwgMHgxMywgMHg3YSwgMHhlOSwgMHg0MCwgMHg3ZSwgMHhlOSwgMHgxMCwgMHg4MCwgCisgICAgMHhmOCwgMHg3ZSwgMHg2OCwgMHgyYywgMHhkYSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgwYiwgMHgwMCwgMHg3ZSwgMHg2OCwgCisgICAgMHgyZCwgMHgzZCwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg3ZSwgMHg3OCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHg3MCwgMHgwZSwgCisgICAgMHg3ZSwgMHhhNCwgMHhmZiwgMHhmZiwgMHg3ZSwgMHhiNCwgMHhiZiwgMHhmZiwgMHg3ZCwgMHhjYiwgMHgwZSwgMHhjNCwgMHg3ZCwgMHhkYywgMHg1ZCwgMHhkYiwgCisgICAgMHg2YywgMHhiYiwgMHg3ZCwgMHhmYSwgMHg1ZSwgMHhmNCwgMHg3ZiwgMHhmZiwgMHg3YSwgMHg3YiwgMHhiMCwgMHgwYiwgMHhiMCwgMHg3ZCwgMHhmYiwgMHg1ZSwgCisgICAgMHhmNCwgMHg3ZiwgMHhmZiwgMHg3YSwgMHg3YiwgMHhiMCwgMHgwYiwgMHhiMCwgMHg3ZCwgMHhmYywgMHg1ZSwgMHhmNCwgMHg3ZiwgMHhmZiwgMHg3YSwgMHg3YiwgCisgICAgMHhiMCwgMHgwYiwgMHhiMCwgMHg3ZCwgMHhmZCwgMHg1ZSwgMHhmNCwgMHg3ZiwgMHhmZiwgMHg3YSwgMHg3YiwgMHhiMCwgMHg2YywgMHhiYiwgMHg3ZCwgMHhmYSwgCisgICAgMHg1ZSwgMHhmNCwgMHg3ZiwgMHhmZiwgMHhiZSwgMHg3YiwgMHhiMCwgMHg3OCwgMHg0MSwgMHgwYiwgMHhiMCwgMHg3ZCwgMHhmYiwgMHg1ZSwgMHhmNCwgMHg3ZiwgCisgICAgMHhmZiwgMHhiZSwgMHg3YiwgMHhiMCwgMHg3OCwgMHgzNCwgMHgwYiwgMHhiMCwgMHg3ZCwgMHhmYywgMHg1ZSwgMHhmNCwgMHg3ZiwgMHhmZiwgMHhiZSwgMHg3YiwgCisgICAgMHhiMCwgMHg3OCwgMHgyNywgMHgwYiwgMHhiMCwgMHg3ZCwgMHhmZCwgMHg1ZSwgMHhmNCwgMHg3ZiwgMHhmZiwgMHhiZSwgMHg3YiwgMHhiMCwgMHg3OCwgMHgxYSwgCisgICAgMHgwYiwgMHhiMCwgMHhiZSwgMHhjNCwgMHhmZiwgMHhmZSwgMHg3OCwgMHg5MiwgMHgwZSwgMHhiNCwgMHhhNSwgMHhkZiwgMHg4YiwgMHg3ZSwgMHg2OCwgMHgyYywgCisgICAgMHhlNywgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg4MCwgMHg3NywgMHhjYSwgMHg1YiwgMHhjYSwgMHg2YiwgMHg3ZSwgMHg2OCwgCisgICAgMHgyYywgMHhmMCwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg3ZSwgMHg2OCwgMHgyZCwgMHg4ZiwgMHg3YSwgMHg2YywgMHgwMCwgCisgICAgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgwYSwgMHg0NywgMHgxMiwgMHgxOSwgMHhmYSwgMHg3ZSwgMHg2OCwgMHgyZCwgMHhkZSwgMHg3YSwgMHg2YywgMHgwMCwgCisgICAgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg2YywgMHg3NywgMHhkYSwgMHg2YiwgMHhjYSwgMHg2YiwgMHgwYiwgMHg3MCwgMHgwZSwgMHhjNCwgMHhiZSwgMHhjNCwgCisgICAgMHhmZiwgMHhmZiwgMHg3OCwgMHhmNiwgMHgxYiwgMHg3MCwgMHgwYSwgMHg0NywgMHgxMiwgMHgxOSwgMHhmYSwgMHgxMiwgMHgxOSwgMHgxOSwgMHgzMCwgMHgxMSwgCisgICAgMHgzMCwgMHhkYSwgMHg2YiwgMHhkYSwgMHg1YiwgMHg2YywgMHhiYiwgMHg3ZSwgMHg3OCwgMHgwMCwgMHgwMCwgMHg3ZCwgMHhmYSwgMHg1ZSwgMHhmNCwgMHg3ZiwgCisgICAgMHhmZiwgMHg3YSwgMHg3YiwgMHhiMCwgMHg3ZCwgMHhmYiwgMHg1ZSwgMHhmNCwgMHg3ZiwgMHhmZiwgMHg3YSwgMHg3YiwgMHhiMCwgMHg3ZCwgMHhmYywgMHg1ZSwgCisgICAgMHhmNCwgMHg3ZiwgMHhmZiwgMHg3YSwgMHg3YiwgMHhiMCwgMHg3ZCwgMHhmZCwgMHg1ZSwgMHhmNCwgMHg3ZiwgMHhmZiwgMHg3YSwgMHg3YiwgMHhiMCwgMHg4MCwgCisgICAgMHhkNCwgMHg3ZSwgMHg2OCwgMHgyZCwgMHgxYiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgzMCwgMHgxZiwgMHgwZSwgMHg3ZSwgCisgICAgMHg3OCwgMHgwNCwgMHgyMCwgMHg3YSwgMHg3YywgMHgwMCwgMHgwMCwgMHg3ZSwgMHg0NCwgMHg3YiwgMHhlMCwgMHg4MCwgMHgwYywgMHg3ZSwgMHg3OCwgMHgwMCwgCisgICAgMHgwMCwgMHg3YSwgMHg3YywgMHgwMCwgMHgwMSwgMHg3ZSwgMHg0NCwgMHg4MCwgMHgwMCwgMHgwYiwgMHgwMCwgMHg3ZSwgMHg0MCwgMHgzYSwgMHg3YywgMHg1NCwgCisgICAgMHg3ZiwgMHg1NywgMHg3ZCwgMHg4NCwgMHg2YywgMHg2NiwgMHg3YSwgMHg1YiwgMHg1MCwgMHgwYiwgMHg1YywgMHgwYiwgMHg1MCwgMHhhNSwgMHhkZSwgMHgwMiwgCisgICAgMHgwYiwgMHg1MCwgMHgxYiwgMHg4NCwgMHg3OCwgMHhmMCwgMHg3YywgMHg1NCwgMHg3ZiwgMHg1NywgMHg3ZCwgMHg4NCwgMHg2YywgMHg2NiwgMHhiZSwgMHg1YiwgCisgICAgMHg1MCwgMHg3OCwgMHgxYSwgMHgwYiwgMHg1YywgMHgwYiwgMHg1MCwgMHhhNSwgMHhkZSwgMHgwMiwgMHgwYiwgMHg1MCwgMHgxYiwgMHg4NCwgMHg3OCwgMHhlZSwgCisgICAgMHg3ZSwgMHg2OCwgMHgyYywgMHhkYSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg4MCwgMHg0YiwgMHg3ZiwgMHg0NSwgMHg3ZSwgCisgICAgMHg2OCwgMHgyYywgMHhkZiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg3ZSwgMHg2OCwgMHgyZCwgMHg1ZiwgMHg3YSwgMHg2YywgCisgICAgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg3ZCwgMHg0YiwgMHgxMiwgMHgxOSwgMHhmYSwgMHg3ZSwgMHg2OCwgMHgyZCwgMHg3NCwgMHg3YSwgMHg2YywgCisgICAgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg2YywgMHg4OCwgMHg3YywgMHg5NSwgMHgxMiwgMHgxOSwgMHhmYSwgMHg3ZSwgMHg2OCwgMHgyZCwgMHg4MiwgCisgICAgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg3ZSwgMHg0YiwgMHg5MCwgMHgxMiwgMHgxOSwgMHhmYSwgMHgxMiwgMHgxOSwgMHgxOSwgCisgICAgMHgzMCwgMHgxMSwgMHgwNSwgMHg3ZSwgMHg0YiwgMHg5MCwgMHg4MCwgMHhmYiwgMHg3ZSwgMHg2OCwgMHgyZSwgMHgyOCwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgCisgICAgMHgxMiwgMHgxOSwgMHhjNCwgMHgwYiwgMHgwMCwgMHg3ZSwgMHhiMCwgMHg4MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3ZSwgMHhhMCwgMHg1NSwgMHg3YSwgCisgICAgMHhhMywgMHg5MSwgMHgxMCwgMHg3ZSwgMHhiMywgMHg5MSwgMHgwNywgMHg3ZSwgMHhiMywgMHg5MSwgMHgxMCwgMHhiYywgMHhhYiwgMHg3OCwgMHgyMCwgMHg3ZSwgCisgICAgMHhhMCwgMHhhYSwgMHg3YSwgMHhhMywgMHg5MSwgMHgxMCwgMHg3ZSwgMHhiMywgMHg5MSwgMHgwNywgMHg3ZSwgMHhiMywgMHg5MSwgMHgxMCwgMHhiYywgMHhhYiwgCisgICAgMHg3OCwgMHgwZCwgMHg3ZSwgMHg2OCwgMHgyYywgMHhkYSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg4MCwgMHgxYiwgMHg3ZSwgCisgICAgMHg2OCwgMHgyYywgMHhkZiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgxMiwgMHgxOSwgMHgxOSwgMHgzMCwgMHgxMSwgMHgwYSwgCisgICAgMHg3YSwgMHhhMywgMHg5MSwgMHgxMCwgMHg3ZSwgMHhiMywgMHg5MSwgMHgxMCwgMHg4MCwgMHhmNiwgMHg3ZSwgMHg2OCwgMHgyZSwgMHg0YSwgMHg3YSwgMHg2YywgCisgICAgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgxMiwgMHgxMiwgMHgzMSwgMHgwYiwgMHgwMCwgMHg3ZSwgMHhlNCwgMHgxMCwgMHgwMCwgMHg3ZSwgMHhhMCwgCisgICAgMHhhNSwgMHhjYSwgMHhhOCwgMHg3YSwgMHhlOSwgMHhhMCwgMHg3ZSwgMHhiMCwgMHgzMCwgMHg3YSwgMHhiMywgMHg5NSwgMHgwMCwgMHg3ZSwgMHhlOSwgMHhhMCwgCisgICAgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5NSwgMHgwMCwgMHgxMiwgMHgxOSwgMHgwYywgMHgwYiwgMHhlNSwgMHg3ZSwgMHhiMCwgMHgyMCwgMHg3YSwgCisgICAgMHhiMywgMHg5NSwgMHgwMCwgMHg3ZSwgMHhlOSwgMHhiMCwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5NSwgMHgwMCwgMHg3ZSwgMHhlOSwgMHhiMCwgCisgICAgMHhkYSwgMHhhOCwgMHhiYywgMHhhYiwgMHg3OCwgMHgwZCwgMHg3ZSwgMHg2OCwgMHgyYywgMHhkYSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgCisgICAgMHhjNCwgMHg4MCwgMHgxZCwgMHg3ZSwgMHg2OCwgMHgyYywgMHhkZiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgxMiwgMHgxOSwgCisgICAgMHgxOSwgMHgzMCwgMHgxMSwgMHgwYywgMHg3ZSwgMHhiMCwgMHgzOCwgMHg3YSwgMHhiMywgMHg5NSwgMHgwMCwgMHg3ZSwgMHhlOSwgMHhiMCwgMHg4MCwgMHhmYiwgCisgICAgMHg4MCwgMHgwMCwgMHg3ZSwgMHg2OCwgMHgyZCwgMHhlNCwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgwYiwgMHgwMCwgMHg3NSwgCisgICAgMHhiMCwgMHhkZiwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgwOCwgMHhiZSwgMHhiMCwgMHgwMSwgMHg3OCwgMHgwYiwgMHgwOSwgCisgICAgMHhiMiwgMHgwMCwgMHgxNCwgMHhiZSwgMHhiMCwgMHg2MCwgMHg3OCwgMHgwMiwgMHg4MCwgMHgxNywgMHg3ZSwgMHg2OCwgMHgyYywgMHhkZiwgMHg3YSwgMHg2YywgCisgICAgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgxMiwgMHgxOSwgMHgxOSwgMHgzMCwgMHgxMSwgMHgxMSwgMHgwOSwgMHhiMiwgMHgwMCwgMHgwOCwgMHg4MCwgCisgICAgMHhmYSwgMHg3ZSwgMHg2OCwgMHgyYywgMHhkYSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg3ZSwgMHg2OCwgMHgyZSwgMHgwNiwgCisgICAgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgwYiwgMHgwMCwgMHg3NSwgMHhiMCwgMHhlZiwgMHgxMiwgMHgxOCwgMHhmZiwgMHg3ZSwgCisgICAgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHhhMCwgMHg1NSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxYywgMHg3ZSwgMHhiMCwgMHgwMSwgMHgxOSwgMHhiMiwgMHgwMCwgCisgICAgMHgwOCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxYywgMHhiYywgMHhhYiwgMHg3OCwgMHgzNywgMHgwOSwgMHhiMiwgMHgwMCwgMHgwOCwgMHg1ZSwgMHhiMCwgMHhjMCwgCisgICAgMHhiZSwgMHhiMCwgMHhjMCwgMHg3OCwgMHgyYiwgMHg3ZSwgMHhhMCwgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxYywgMHg2YywgMHhiYiwgMHgxOSwgMHhiMiwgCisgICAgMHgwMCwgMHgwOCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxYywgMHhiYywgMHhhYiwgMHg3OCwgMHgxNiwgMHgwOSwgMHhiMiwgMHgwMCwgMHgwOCwgMHg1ZSwgMHhiMCwgCisgICAgMHhjMCwgMHg3OCwgMHgwZCwgMHg3ZSwgMHg2OCwgMHgyYywgMHhkYSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg4MCwgMHgxYiwgCisgICAgMHg3ZSwgMHg2OCwgMHgyYywgMHhkZiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgxMiwgMHgxOSwgMHgxOSwgMHgzMCwgMHgxMSwgCisgICAgMHgwYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxYywgMHgwOSwgMHhiMiwgMHgwMCwgMHgxYywgMHg4MCwgMHhmNiwgMHg3ZSwgMHg2OCwgMHgyZSwgMHg2YywgMHg3YSwgCisgICAgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg3ZSwgMHg2OCwgMHgyZSwgMHhlZSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgCisgICAgMHhjNCwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgyMSwgMHg3ZSwgMHhiMCwgMHgwMSwgMHgxOSwgMHhiMiwgMHgwMCwgMHgxYywgMHgyZSwgCisgICAgMHgyNCwgMHgwMSwgMHgwMCwgMHgwYiwgMHhiMCwgMHhhNSwgMHhkOSwgMHhmMywgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgyMSwgMHg3ZSwgCisgICAgMHhiMCwgMHgwMSwgMHgwYiwgMHgwMCwgMHgwOSwgMHhhMiwgMHgwMCwgMHgxYywgMHhiYywgMHhhYiwgMHg3OCwgMHgxNiwgMHg3ZSwgMHg2OCwgMHgyYywgMHhlNywgCisgICAgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHgwYiwgMHhiMCwgMHhhNSwgMHhkOSwgMHhlMiwgCisgICAgMHg4MCwgMHgyNSwgMHg3ZSwgMHg2OCwgMHgyYywgMHhmMCwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgxMiwgMHgxOSwgMHgxOSwgCisgICAgMHgzMCwgMHgxMSwgMHhlNCwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgyMSwgMHgwOSwgMHhhMiwgMHgwMCwgMHgxYywgMHgyZSwgMHgyNCwgCisgICAgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHhmNSwgMHg4MCwgMHhlYywgMHg3ZSwgMHg2OCwgMHgyZiwgMHgxMiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgCisgICAgMHgxOSwgMHhjNCwgMHgxMiwgMHgxMiwgMHgzMSwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgyMSwgMHgwYiwgMHgwMCwgMHg3NCwgMHgxMCwgCisgICAgMHgxOSwgMHhiMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxMSwgMHhhYSwgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHhlZSwgMHg3ZSwgMHg2OCwgCisgICAgMHgyZiwgMHgzNiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgyMSwgCisgICAgMHgwYiwgMHgwMCwgMHhlNCwgMHgxOSwgMHhiMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxMSwgMHhhYSwgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgCisgICAgMHhlZiwgMHgzMCwgMHgwMCwgMHgwMywgMHgwMiwgMHgxNywgMHgzYiwgMHgwMiwgMHgxMiwgMHg2YSwgMHg3NCwgMHgwNywgMHgxOSwgMHhiMiwgMHgwMCwgMHgwOCwgCisgICAgMHgxMiwgMHgxOSwgMHgwYywgMHgwOSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxNCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwOSwgCisgICAgMHhiMiwgMHgwMCwgMHgxNCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxNCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwOSwgCisgICAgMHhiMiwgMHgwMCwgMHgxNCwgMHhjMiwgMHgxMywgMHg3ZSwgMHhiMCwgMHg1NSwgMHgxMiwgMHgxMiwgMHgwYiwgMHg3ZSwgMHhiMCwgMHhhYSwgMHgxMiwgMHgxMiwgCisgICAgMHgwYiwgMHg3ZSwgMHhiMCwgMHgwMCwgMHgxMiwgMHgxMiwgMHgwYiwgMHg3ZSwgMHhiMCwgMHhmZiwgMHgxMiwgMHgxMiwgMHgwYiwgMHgzMCwgMHgxMywgMHgwZiwgCisgICAgMHg3ZSwgMHg2OCwgMHgyYywgMHhmMCwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgxMiwgMHgxOSwgMHgxOSwgMHgyMiwgMHg3ZSwgCisgICAgMHg2OCwgMHgyYywgMHhlNywgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgyMiwgMHgxOSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMiwgCisgICAgMHgxOCwgMHhmZiwgMHgwOSwgMHhhMiwgMHgwMCwgMHgwMCwgMHhiYywgMHhhYiwgMHg3OCwgMHgwMSwgMHgyMiwgMHgyMCwgMHgxMSwgMHgwMywgMHhkMiwgMHgxMywgCisgICAgMHgyMiwgMHgxMiwgMHgxOSwgMHgxOSwgMHgxOSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgwOSwgMHhhMiwgMHgwMCwgMHgwMCwgMHg4MCwgCisgICAgMHhmMywgMHg3NSwgMHhiMCwgMHhkZiwgMHgxMiwgMHgxOCwgMHhmZiwgMHg3NSwgMHhiMCwgMHhlZiwgMHgxMiwgMHgxOCwgMHhmZiwgMHg3ZSwgMHgyNCwgMHg4MCwgCisgICAgMHgwMCwgMHg3ZSwgMHgxMSwgMHgyMSwgMHg3NCwgMHg4MCwgMHgxOSwgMHhiMiwgMHgwMCwgMHgwYywgMHg3ZSwgMHg1NCwgMHgwMCwgMHgwMiwgMHgxOSwgMHhhMiwgCisgICAgMHgwMCwgMHgwNCwgMHgxOSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMywgMHgxOSwgMHhiMiwgMHgwMCwgMHgwYywgMHg3NCwgMHgwNiwgMHgxOSwgMHhiMiwgCisgICAgMHgwMCwgMHgwOCwgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHhkYiwgMHgyMiwgMHg3ZSwgMHg2OCwgMHgyZiwgMHg1YSwgMHg3YSwgMHg2YywgCisgICAgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgyMSwgMHgwYiwgMHgwMCwgMHgxMiwgMHgxOCwgCisgICAgMHhmZiwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHg1NSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgwOSwgCisgICAgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHgwNSwgMHg3OCwgMHgwZCwgMHg3ZSwgMHg2OCwgMHgyYywgMHhlNywgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgCisgICAgMHgxMiwgMHgxOSwgMHhjNCwgMHg4MCwgMHgxYSwgMHg3ZSwgMHg2OCwgMHgyYywgMHhmMCwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgCisgICAgMHgxMiwgMHgxOSwgMHgxOSwgMHgzMCwgMHgxMSwgMHgwOSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHg4MCwgMHhmNywgMHgyZSwgCisgICAgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHhiNiwgMHg3ZSwgMHg2OCwgMHgyZiwgMHg3ZSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgCisgICAgMHhjNCwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgyMSwgMHgwYiwgMHgwMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgwOSwgMHhiMiwgMHgwMCwgCisgICAgMHgxOCwgMHg3ZSwgMHhhMCwgMHg1NSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgCisgICAgMHhiMCwgMHgwYSwgMHg3OCwgMHgwZCwgMHg3ZSwgMHg2OCwgMHgyYywgMHhlNywgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg4MCwgCisgICAgMHgxYSwgMHg3ZSwgMHg2OCwgMHgyYywgMHhmMCwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgxMiwgMHgxOSwgMHgxOSwgMHgzMCwgCisgICAgMHgxMSwgMHgwOSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHg4MCwgMHhmNywgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgCisgICAgMHhkOSwgMHhiNiwgMHgzMCwgMHgwNCwgMHgwMywgMHgwMiwgMHgxNSwgMHg5ZiwgMHg3ZSwgMHg2OCwgMHgyZiwgMHhhMiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgCisgICAgMHgxMiwgMHgxOSwgMHhjNCwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgyMSwgMHgwYiwgMHgwMCwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgCisgICAgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgCisgICAgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHgwYSwgCisgICAgMHg3OCwgMHgzYywgMHg3ZSwgMHhhMCwgMHgwMSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgCisgICAgMHg3ZSwgMHhhMCwgMHgwMywgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg3ZSwgMHhhMCwgMHgwMSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOCwgCisgICAgMHhmZiwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHgwYSwgMHg3OCwgMHgxNCwgMHg3ZSwgMHg2OCwgMHgyYywgMHhlNywgMHg3YSwgMHg2YywgCisgICAgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHg5ZSwgMHg4MCwgMHgyMCwgMHg3ZSwgMHg2OCwgCisgICAgMHgyYywgMHhmMCwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgxMiwgMHgxOSwgMHgxOSwgMHgzMCwgMHgxMSwgMHhlNiwgMHg3ZSwgCisgICAgMHhhMCwgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg4MCwgMHhmMSwgMHg3ZSwgMHg2OCwgCisgICAgMHgyZiwgMHhlYSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgyMSwgCisgICAgMHgwYiwgMHgwMCwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg3ZSwgCisgICAgMHhhMCwgMHgwMSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgwOSwgCisgICAgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHgwNSwgMHg3OCwgMHgzYywgMHg3ZSwgMHhhMCwgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgCisgICAgMHgxOCwgMHhmZiwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHgwMywgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg3ZSwgMHhhMCwgMHgwMiwgCisgICAgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHgwNSwgMHg3OCwgMHgxNCwgCisgICAgMHg3ZSwgMHg2OCwgMHgyYywgMHhlNywgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgCisgICAgMHhkOSwgMHg5ZSwgMHg4MCwgMHgyMCwgMHg3ZSwgMHg2OCwgMHgyYywgMHhmMCwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgxMiwgCisgICAgMHgxOSwgMHgxOSwgMHgzMCwgMHgxMSwgMHhlNiwgMHg3ZSwgMHhhMCwgMHgwMSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgCisgICAgMHgwMCwgMHgxMCwgMHg4MCwgMHhmMSwgMHg3ZSwgMHg2OCwgMHgzMCwgMHgzMiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg3ZSwgCisgICAgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgyMSwgMHgwYiwgMHgwMCwgMHg3ZSwgMHhhMCwgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgCisgICAgMHgxOCwgMHhmZiwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHg1MCwgMHhiZSwgMHhiMCwgMHg1MCwgMHg3OCwgMHgxZiwgMHg2YywgMHhhYSwgCisgICAgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHg1MCwgMHg3OCwgMHgwZCwgCisgICAgMHg3ZSwgMHg2OCwgMHgyYywgMHhlNywgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg4MCwgMHgyMCwgMHg3ZSwgMHg2OCwgMHgyYywgCisgICAgMHhmMCwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgxMiwgMHgxOSwgMHgxOSwgMHgzMCwgMHgxMSwgMHgwZiwgMHg3ZSwgMHhhMCwgCisgICAgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg4MCwgMHhmMSwgMHgyZSwgMHgyNCwgMHgwMSwgCisgICAgMHgwMCwgMHhhNSwgMHhkOSwgMHhhMiwgMHg3ZSwgMHg2OCwgMHgzMCwgMHg3YSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg3ZSwgCisgICAgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgyMSwgMHgwYiwgMHgwMCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHgwMSwgMHgxOSwgCisgICAgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHhhMCwgMHhiZSwgMHhiMCwgMHhhMCwgCisgICAgMHg3OCwgMHgxZiwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgCisgICAgMHhiMCwgMHhhMCwgMHg3OCwgMHgwZCwgMHg3ZSwgMHg2OCwgMHgyYywgMHhlNywgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg4MCwgCisgICAgMHgyMCwgMHg3ZSwgMHg2OCwgMHgyYywgMHhmMCwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgxMiwgMHgxOSwgMHgxOSwgMHgzMCwgCisgICAgMHgxMSwgMHgwZiwgMHg3ZSwgMHhhMCwgMHgwMSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg4MCwgCisgICAgMHhmMSwgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHg5ZSwgMHg3ZSwgMHg2OCwgMHgzMCwgMHg5ZSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgCisgICAgMHgxMiwgMHgxOSwgMHhjNCwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgyMSwgMHgwYiwgMHgwMCwgMHgyMCwgMHhiMSwgMHgyNiwgMHg3ZSwgCisgICAgMHhhMCwgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgzMCwgMHhiMSwgMHgxOSwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgCisgICAgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgyMCwgMHhiMSwgMHgwZCwgMHg3ZSwgMHg2OCwgMHgyYywgMHhlNywgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgCisgICAgMHgxMiwgMHgxOSwgMHhjNCwgMHg4MCwgMHgyMCwgMHg3ZSwgMHg2OCwgMHgyYywgMHhmMCwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgCisgICAgMHgxMiwgMHgxOSwgMHgxOSwgMHgzMCwgMHgxMSwgMHgwZiwgMHg3ZSwgMHhhMCwgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg2YywgMHhhYSwgMHgxOSwgCisgICAgMHhhMiwgMHgwMCwgMHgxMCwgMHg4MCwgMHhmMSwgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHhhZSwgMHgwMiwgMHgxNywgMHgzYiwgMHg3ZSwgCisgICAgMHg2OCwgMHgyZiwgMHhjNiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgCisgICAgMHgyMSwgMHgwYiwgMHgwMCwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgCisgICAgMHg3ZSwgMHhhMCwgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOCwgMHhmZiwgCisgICAgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHgwNiwgMHg3OCwgMHgzYywgMHg3ZSwgMHhhMCwgMHgwMSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgCisgICAgMHgxMiwgMHgxOCwgMHhmZiwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHgwMywgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg3ZSwgMHhhMCwgCisgICAgMHgwMSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHgwNiwgMHg3OCwgCisgICAgMHgxNCwgMHg3ZSwgMHg2OCwgMHgyYywgMHhlNywgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgCisgICAgMHhhNSwgMHhkOSwgMHg5ZSwgMHg4MCwgMHgyMCwgMHg3ZSwgMHg2OCwgMHgyYywgMHhmMCwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgCisgICAgMHgxMiwgMHgxOSwgMHgxOSwgMHgzMCwgMHgxMSwgMHhlNiwgMHg3ZSwgMHhhMCwgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg2YywgMHhhYSwgMHgxOSwgCisgICAgMHhhMiwgMHgwMCwgMHgxMCwgMHg4MCwgMHhmMSwgMHg3ZSwgMHg2OCwgMHgzMCwgMHgwZSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgCisgICAgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgyMSwgMHgwYiwgMHgwMCwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgCisgICAgMHgxOCwgMHhmZiwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHgwMSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg2YywgMHhhYSwgMHgxOSwgCisgICAgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHgwOSwgMHg3OCwgMHgzYywgMHg3ZSwgCisgICAgMHhhMCwgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHgwMywgCisgICAgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg3ZSwgMHhhMCwgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgwOSwgMHhiMiwgCisgICAgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHgwOSwgMHg3OCwgMHgxNCwgMHg3ZSwgMHg2OCwgMHgyYywgMHhlNywgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgCisgICAgMHgxOSwgMHhjNCwgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHg5ZSwgMHg4MCwgMHgyMCwgMHg3ZSwgMHg2OCwgMHgyYywgMHhmMCwgMHg3YSwgCisgICAgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgxMiwgMHgxOSwgMHgxOSwgMHgzMCwgMHgxMSwgMHhlNiwgMHg3ZSwgMHhhMCwgMHgwMSwgMHgxOSwgCisgICAgMHhhMiwgMHgwMCwgMHgxMCwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg4MCwgMHhmMSwgMHg3ZSwgMHg2OCwgMHgzMCwgMHg1NiwgMHg3YSwgCisgICAgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgyMSwgMHgwYiwgMHgwMCwgMHg3ZSwgCisgICAgMHhhMCwgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHg5MCwgCisgICAgMHhiZSwgMHhiMCwgMHg5MCwgMHg3OCwgMHgxZiwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgwOSwgMHhiMiwgCisgICAgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHg5MCwgMHg3OCwgMHgwZCwgMHg3ZSwgMHg2OCwgMHgyYywgMHhlNywgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgCisgICAgMHgxOSwgMHhjNCwgMHg4MCwgMHgyMCwgMHg3ZSwgMHg2OCwgMHgyYywgMHhmMCwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgxMiwgCisgICAgMHgxOSwgMHgxOSwgMHgzMCwgMHgxMSwgMHgwZiwgMHg3ZSwgMHhhMCwgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgCisgICAgMHgwMCwgMHgxMCwgMHg4MCwgMHhmMSwgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHhhMiwgMHgyMCwgMHgxZiwgMHg2OCwgMHgxMiwgMHgxMiwgCisgICAgMHgzMSwgMHgxMiwgMHgxNywgMHhhOSwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgyMSwgMHgwYiwgMHgwMCwgMHgyMCwgMHg4OSwgMHgyNiwgCisgICAgMHg3ZSwgMHhhMCwgMHhmZiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgwNCwgMHgxMiwgMHgxOCwgMHhmZiwgMHg3ZSwgMHhiMCwgMHg1NSwgMHgxOSwgMHhiMiwgMHgwMCwgCisgICAgMHgwMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgzMCwgMHg4OSwgMHgwZiwgMHg3ZSwgMHhhMCwgMHgwMCwgMHgxOSwgMHhhMiwgMHgwMCwgMHgwNCwgMHgxMiwgMHgxOCwgCisgICAgMHhmZiwgMHgyMCwgMHg4OSwgMHgwMiwgMHg4MCwgMHgyNiwgMHgxMiwgMHgxOSwgMHgxOSwgMHgzMCwgMHgxMSwgMHgyMCwgMHg3ZSwgMHhhMCwgMHhmZiwgMHgxOSwgCisgICAgMHhhMiwgMHgwMCwgMHgwNCwgMHgxMiwgMHgxOCwgMHhmZiwgMHg3ZSwgMHhiMCwgMHg1NSwgMHgxOSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOCwgMHhmZiwgCisgICAgMHg3ZSwgMHhhMCwgMHgwMCwgMHgxOSwgMHhhMiwgMHgwMCwgMHgwNCwgMHgxMiwgMHgxOCwgMHhmZiwgMHg4MCwgMHhlMCwgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgCisgICAgMHhhNSwgMHhkOSwgMHhhOCwgMHgwMiwgMHgxNywgMHhjMiwgMHgwMiwgMHgxOCwgMHg0YywgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgyMSwgCisgICAgMHg3ZSwgMHhhMCwgMHgwOCwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOCwgMHhmZiwgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgCisgICAgMHhlZiwgMHgyMiwgMHgzMCwgMHgxZiwgMHgwMywgMHgwMiwgMHgxOCwgMHg0YywgMHhjMiwgMHg4YSwgMHgxMiwgMHgxNywgMHhhOSwgMHgwYiwgMHgwMCwgMHgxMiwgCisgICAgMHgxOCwgMHgxNiwgMHgyMCwgMHg4YiwgMHgyNCwgMHg3NCwgMHgwMywgMHg3YSwgMHhiMywgMHg5MSwgMHgwNiwgMHg3NCwgMHgwMiwgMHg3YSwgMHhiMywgMHg5MSwgCisgICAgMHgwNywgMHg3NCwgMHgwYywgMHg3YSwgMHhiMywgMHg5MSwgMHgwNiwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNywgMHgxMiwgMHgxOSwgMHgwYywgCisgICAgMHgzMCwgMHg4YiwgMHgwNiwgMHgxMiwgMHgxOCwgMHgxNiwgMHgzMCwgMHg4YiwgMHhhZCwgMHgxMiwgMHgxOSwgMHgxOSwgMHgzMCwgMHgxMSwgMHhhNywgMHgxMiwgCisgICAgMHgxOCwgMHgxNiwgMHg3NCwgMHgwMywgMHg3YSwgMHhiMywgMHg5MSwgMHgwNiwgMHg3NCwgMHgwMiwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNywgMHgxMiwgMHgxOSwgCisgICAgMHgwYywgMHgxMiwgMHgxOCwgMHgxNiwgMHg4MCwgMHhlOSwgMHg3ZSwgMHhhMCwgMHgwMCwgMHg3NCwgMHgwMiwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNiwgMHg3YSwgCisgICAgMHhhMywgMHg5MSwgMHgwNywgMHg3NCwgMHgwMywgMHg3YSwgMHhiMywgMHg5MSwgMHgwNiwgMHg3YSwgMHhhMywgMHg5MSwgMHgwNywgMHgxMiwgMHgxOCwgMHhmZiwgCisgICAgMHg3NCwgMHhlZiwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNCwgMHg3NCwgMHg4MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMywgMHg3NCwgMHgwYywgMHg3YSwgMHhiMywgCisgICAgMHg5MSwgMHgwNiwgMHg3NCwgMHgwOCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNywgMHgxMiwgMHgxOSwgMHgwYywgMHgyMiwgMHgzMCwgMHgxMiwgMHgxOSwgMHg3ZSwgCisgICAgMHg2OCwgMHgzMCwgMHhjMiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHhkMiwgMHgxMSwgMHgxMiwgMHgxOCwgMHhmZiwgMHgxMiwgCisgICAgMHgxOCwgMHhmZiwgMHgxMiwgMHgxOCwgMHhmZiwgMHgwMiwgMHgwYywgMHhjYSwgMHgzMCwgMHgxZiwgMHgxYywgMHg3ZSwgMHg2OCwgMHgzMSwgMHgzYywgMHg3YSwgCisgICAgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHg3ZSwgMHg2OCwgMHgzMSwgMHg1ZSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgCisgICAgMHhjNCwgMHgxMiwgMHgxYSwgMHg2ZSwgMHgwMiwgMHgxOCwgMHhmNywgMHgwYiwgMHgwMCwgMHg3ZSwgMHg3OCwgMHgxOCwgMHhiMSwgMHg3YSwgMHg3YywgMHgwMCwgCisgICAgMHhmZiwgMHg3ZiwgMHg2NywgMHg3YSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3ZSwgMHg3MCwgMHgzZSwgMHg3ZSwgMHg3YiwgMHhiMCwgMHg3YSwgMHg2YiwgMHhiMCwgCisgICAgMHgwYiwgMHg3YywgMHgwYiwgMHg2YywgMHhhNSwgMHhkZiwgMHhmMywgMHg3ZSwgMHg3OCwgMHgxOCwgMHhiMSwgMHg3YSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4OSwgCisgICAgMHg3OCwgMHg3ZSwgMHg3OCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg3YywgMHgwMCwgMHhmZSwgMHg3ZSwgMHg2OCwgMHg3ZiwgMHhiZiwgMHg3YSwgMHg2YywgMHgwMCwgCisgICAgMHhmZSwgMHg3NCwgMHhhYSwgMHgzOSwgMHhiNywgMHg1NSwgMHg1NSwgMHg3NCwgMHg1NSwgMHgzOSwgMHhiNywgMHgyYSwgMHhhYSwgMHg3NCwgMHhhMCwgMHgzOSwgCisgICAgMHhiNywgMHg1NSwgMHg1NSwgMHg2YywgMHg5OSwgMHg3YSwgMHg2YiwgMHg5MCwgMHg3ZSwgMHg1NCwgMHgyNywgMHgxMCwgMHg3ZSwgMHg2YiwgMHg4MCwgMHhiYywgCisgICAgMHg4OSwgMHg2OCwgMHgwOCwgMHgxYiwgMHg1NCwgMHg3OCwgMHhmNSwgMHg4YSwgMHhmZiwgMHgxOCwgMHhlZiwgMHg4YSwgMHhmZiwgMHgxOCwgMHhmNywgMHgxMiwgCisgICAgMHgxOSwgMHgxOSwgMHg3ZSwgMHg2YiwgMHg4MCwgMHg4MCwgMHhmYiwgMHg3ZSwgMHgxMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhhYywgMHg4MCwgMHhmOCwgMHhjYSwgCisgICAgMHhmOSwgMHg3ZSwgMHhmNCwgMHgwMCwgMHhmZiwgMHgxYiwgMHhmNCwgMHg3OCwgMHhmYywgMHhkYSwgMHhmOSwgMHgyMiwgMHhjYSwgMHhmOSwgMHg3ZSwgMHhmNCwgCisgICAgMHgwMCwgMHgwMCwgMHgxYiwgMHhmNCwgMHg3OCwgMHhmYywgMHhkYSwgMHhmOSwgMHgyMiwgMHgyMCwgMHgxMSwgMHgyMCwgMHhkMiwgMHgxMiwgMHgxMiwgMHgxOSwgCisgICAgMHgwYywgMHg3ZSwgMHhiMCwgMHgwMiwgMHg3YSwgMHhiMywgMHg5MCwgMHgwMCwgMHgxMiwgMHgxOSwgMHgwYywgMHgxMiwgMHgxOSwgMHgwYywgMHgxMiwgMHgxOSwgCisgICAgMHgwYywgMHgxMiwgMHgxOSwgMHgwYywgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MCwgMHgwMCwgMHgyMiwgMHhjYSwgMHgwYiwgMHg3ZSwgMHgxMCwgCisgICAgMHgwMywgMHg3YywgMHgzMCwgMHg2YywgMHgyMiwgMHgwYiwgMHgyMCwgMHg5ZSwgMHgzMCwgMHgwYSwgMHg1MCwgMHhmOSwgMHgyZSwgMHgzMCwgMHgwYiwgMHgxYiwgCisgICAgMHgyMCwgMHg2OCwgMHgyMCwgMHgxMiwgMHgxOSwgMHgwYywgMHgxMiwgMHgxOSwgMHgwYywgMHg3ZSwgMHhiMCwgMHgwMywgMHg3YSwgMHhiMywgMHg5MCwgMHgwMCwgCisgICAgMHgxMiwgMHgxOSwgMHgwYywgMHgxMiwgMHgxOSwgMHgwYywgMHgxMiwgMHgxOSwgMHgwYywgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MCwgMHgwMCwgCisgICAgMHhhNSwgMHhkYSwgMHhlMCwgMHgxMiwgMHgxOSwgMHgwYywgMHgxMiwgMHgxOSwgMHgwYywgMHgxYiwgMHgzMCwgMHg2OCwgMHgyMCwgMHgxMiwgMHgxOSwgMHgwYywgCisgICAgMHgxMiwgMHgxOSwgMHgwYywgMHg3ZSwgMHhiMCwgMHgwMiwgMHg3YSwgMHhiMywgMHg5MCwgMHgwMCwgMHgxMiwgMHgxOSwgMHgwYywgMHgxMiwgMHgxOSwgMHgwYywgCisgICAgMHgxMiwgMHgxOSwgMHgwYywgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MCwgMHgwMCwgMHhhNSwgMHhkYiwgMHhlMCwgMHg3ZSwgMHgyMCwgMHgwYSwgCisgICAgMHgxMiwgMHgxOSwgMHgwYywgMHhhNSwgMHhkYSwgMHhmYSwgMHhhNSwgMHhkOSwgMHg5OCwgMHhkYSwgMHgwYiwgMHgyMiwgMHgyMCwgMHgxMSwgMHgxNCwgMHgxMiwgCisgICAgMHgxOSwgMHgwYywgMHg3ZSwgMHhiMCwgMHgwMSwgMHg3YSwgMHhiMywgMHg5MCwgMHgwMCwgMHgxMiwgMHgxOSwgMHgwYywgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3YSwgCisgICAgMHhiMywgMHg5MCwgMHgwMCwgMHgyMiwgMHgzMCwgMHgxZiwgMHgzMiwgMHgyMCwgMHgxMSwgMHgyZiwgMHhjYSwgMHgyYiwgMHhjYSwgMHg3YiwgMHg3ZSwgMHg3OCwgCisgICAgMHg4MCwgMHgwMCwgMHg3YSwgMHg3YywgMHgwMCwgMHhmZSwgMHgxMiwgMHgxYSwgMHg0ZCwgMHg3ZSwgMHg2YiwgMHhhMCwgMHg1YywgMHhhYSwgMHg2OCwgMHgxMCwgCisgICAgMHgyOSwgMHhiNywgMHgwMCwgMHgxNCwgMHg1NCwgMHg2MCwgMHg2OCwgMHhmOCwgMHgzOSwgMHhhNywgMHgwMCwgMHgwMCwgMHgwYiwgMHg2YywgMHg4MCwgMHhlOSwgCisgICAgMHgxMiwgMHgxOCwgMHhmZiwgMHhkMiwgMHhiNSwgMHhkYSwgMHg3YiwgMHhkYSwgMHgyYiwgMHgyMiwgMHgxMiwgMHgxYSwgMHgwNSwgMHg3ZSwgMHg2OCwgMHgwMCwgCisgICAgMHgwYywgMHgxMiwgMHgxOSwgMHhjNCwgMHgyMiwgMHhjYSwgMHg1OSwgMHhjYSwgMHg1YiwgMHg3ZSwgMHhiNCwgMHgwMCwgMHgwYywgMHg3YywgMHhiOCwgMHhjNCwgCisgICAgMHgxMiwgMHgxYSwgMHgzNSwgMHg3YywgMHhiOCwgMHgxMiwgMHgxYSwgMHgzNSwgMHg3YywgMHhiOSwgMHhjNCwgMHgxMiwgMHgxYSwgMHgzNSwgMHg3YywgMHhiOSwgCisgICAgMHgxMiwgMHgxYSwgMHgzNSwgMHg3ZSwgMHhiMCwgMHg2OCwgMHg3YSwgMHhiOSwgMHhiMCwgMHgwYiwgMHhiNCwgMHg2YywgMHhiYiwgMHg3YSwgMHhiOSwgMHhiMCwgCisgICAgMHhkYSwgMHg1OSwgMHhkYSwgMHg1YiwgMHgyMiwgMHg1ZSwgMHhiMCwgMHgwZiwgMHg3YywgMHhhYiwgMHg5ZSwgMHhhMCwgMHgwYSwgMHg0MCwgMHgwNSwgMHgyZSwgCisgICAgMHhiMCwgMHgzNywgMHg4MCwgMHgwMywgMHgyZSwgMHhiMCwgMHgzMCwgMHg3YSwgMHhiOSwgMHhiMCwgMHgwYiwgMHhiNCwgMHgyMiwgMHhjMiwgMHhiNSwgMHg3NSwgCisgICAgMHhiMCwgMHhlZiwgMHgxMiwgMHgxOCwgMHhmZiwgMHg3NCwgMHg4MCwgMHgzOSwgMHhiNywgMHgwMCwgMHgwYywgMHg3ZSwgMHg1NCwgMHgwMCwgMHgwNiwgMHgzOSwgCisgICAgMHhhNywgMHgwMCwgMHgwNCwgMHgzOSwgMHhiNywgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMywgMHgzOSwgMHhiNywgMHgwMCwgMHgwYywgMHgyMiwgMHg3ZSwgMHg3OCwgCisgICAgMHgwMCwgMHgwMCwgMHg3YSwgMHg3YywgMHgwMCwgMHhmZiwgMHg3ZSwgMHg1OCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg1YywgMHgwMCwgMHgwMSwgMHg3ZiwgMHg2NSwgCisgICAgMHg3ZSwgMHg3NCwgMHgyMCwgMHgwMCwgMHgxMiwgMHgwYiwgMHg2MywgMHg0MCwgMHg1OCwgMHg3ZSwgMHg3OCwgMHg3YywgMHgwMCwgMHg3YSwgMHg3YywgMHgwMCwgCisgICAgMHhmZiwgMHg3ZSwgMHg1OCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg1YywgMHgwMCwgMHgwMSwgMHg3ZSwgMHg2OCwgMHg3YywgMHgwMCwgMHg3YSwgMHg2YywgMHgwMCwgCisgICAgMHgwMSwgMHg3ZSwgMHg3NCwgMHgwNCwgMHgwMCwgMHgxMiwgMHgwYiwgMHg2MywgMHg0MCwgMHgzNywgMHg3NCwgMHg4MCwgMHgxMiwgMHgxYSwgMHhlYSwgMHg0MCwgCisgICAgMHgzMCwgMHg3ZSwgMHgwMCwgMHgwMywgMHg3YSwgMHgwMywgMHg5MCwgMHgwMCwgMHhkMiwgMHgxMCwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgwOCwgMHg3ZSwgMHgxNCwgCisgICAgMHgwMCwgMHgwMCwgMHg4NCwgMHhhNSwgMHhkYiwgMHhmYywgMHhhNSwgMHhkYSwgMHhmOSwgMHhhNSwgMHhkOSwgMHhmNiwgMHg3NCwgMHg0MCwgMHgxMiwgMHgxYSwgCisgICAgMHhlYSwgMHg0MCwgMHgwZSwgMHg3ZSwgMHg2OCwgMHgzMSwgMHg4ZCwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxOSwgMHhjNCwgMHgwMiwgMHgxOCwgCisgICAgMHhmNywgMHg3ZSwgMHhiMCwgMHgwMiwgMHg3YSwgMHhiMywgMHg5MCwgMHgwMCwgMHg4MCwgMHhmZSwgMHhmNSwgMHgwYiwgMHg3ZSwgMHg3OCwgMHgwMCwgMHgwYiwgCisgICAgMHg3YSwgMHg3YywgMHgwMCwgMHgwMCwgMHg3ZSwgMHg2OCwgMHg3ZiwgMHhiZiwgMHg3YSwgMHg2YywgMHgwMCwgMHgwMSwgMHg3ZSwgMHg3NCwgMHgwMCwgMHgwMSwgCisgICAgMHgwMiwgMHgwYiwgMHg2MywgCisKKy8vIFNlZ21lbnQgIzE5LCBFWENMVURFRCBTdGFydCBBZGRyZXNzIDAwZmYyYzY2LCBMZW5ndGggMTM5MworCit9OworCitzdGF0aWMgc3RydWN0IGVkZ2VfZmlybXdhcmVfdmVyc2lvbl9pbmZvIElNQUdFX1ZFUlNJT05fTkFNRSA9IHsKKwkyLCAwLCAzIH07CQkvLyBNYWpvciwgTWlub3IsIEJ1aWxkCisKKyN1bmRlZiBJTUFHRV9WRVJTSU9OX05BTUUKKworI3VuZGVmIElNQUdFX0FSUkFZX05BTUUKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2Z3X2Rvd24uaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19md19kb3duLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE2MWQ4MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19md19kb3duLmgKQEAgLTAsMCArMSwxMjI5IEBACisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyogRWRnZXBvcnQvNCBCaW5hcnkgSW1hZ2UKKy8vKiBHZW5lcmF0ZWQgYnkgSEVYMkMgdjEuMDYKKy8vKiBDb3B5cmlnaHQgKEMpIDE5OTggSW5zaWRlIE91dCBOZXR3b3JrcywgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLy8qCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisvLyoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKy8vKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKKy8vSW1hZ2Ugc3RydWN0dXJlIGRlZmluaXRpb24KKyNpZiAhZGVmaW5lZChERUZJTkVEX0VER0VfRklSTVdBUkVfSU1BR0VfUkVDT1JEKQorCSNkZWZpbmUgREVGSU5FRF9FREdFX0ZJUk1XQVJFX0lNQUdFX1JFQ09SRAorCXN0cnVjdCBlZGdlX2Zpcm13YXJlX2ltYWdlX3JlY29yZCB7CisJCV9fbGUxNiBFeHRBZGRyOworCQlfX2xlMTYgQWRkcjsKKwkJX19sZTE2IExlbjsKKwkJdW5zaWduZWQgY2hhcglEYXRhWzBdOworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisJc3RydWN0IGVkZ2VfZmlybXdhcmVfdmVyc2lvbl9pbmZvIHsKKwkJdW5zaWduZWQgY2hhcglNYWpvclZlcnNpb247CisJCXVuc2lnbmVkIGNoYXIJTWlub3JWZXJzaW9uOworCQl1bnNpZ25lZCBzaG9ydAlCdWlsZE51bWJlcjsKKwl9OworCisjZW5kaWYKKworI2lmICFkZWZpbmVkKElNQUdFX0FSUkFZX05BTUUpCisJI2RlZmluZSBJTUFHRV9BUlJBWV9OQU1FCUZpcm13YXJlSW1hZ2UKKwkjZGVmaW5lIElNQUdFX1ZFUlNJT05fTkFNRQlGaXJtd2FyZUltYWdlVmVyc2lvbgorI2VuZGlmCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIElNQUdFX0FSUkFZX05BTUVbXSA9IHsKKworLy8gU2VnbWVudCAjMSwgU3RhcnQgQWRkcmVzcyAwMGZmMDAwMCwgTGVuZ3RoIDYKKzB4ZmYsMHgwMCwweDAwLDB4MDAsMHgwNiwweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDQsIDB4YjAsIAorCisvLyBTZWdtZW50ICMyLCBTdGFydCBBZGRyZXNzIDAwZmYwMDBiLCBMZW5ndGggMworMHhmZiwweDAwLDB4MGIsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHg0NCwgMHg3MiwgCisKKy8vIFNlZ21lbnQgIzMsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMTMsIExlbmd0aCAzCisweGZmLDB4MDAsMHgxMywweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDEzLCAKKworLy8gU2VnbWVudCAjNCwgU3RhcnQgQWRkcmVzcyAwMGZmMDAxYiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDFiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4MWIsIAorCisvLyBTZWdtZW50ICM1LCBTdGFydCBBZGRyZXNzIDAwZmYwMDIzLCBMZW5ndGggMworMHhmZiwweDAwLDB4MjMsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgyMywgCisKKy8vIFNlZ21lbnQgIzYsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMmIsIExlbmd0aCAzCisweGZmLDB4MDAsMHgyYiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDJiLCAKKworLy8gU2VnbWVudCAjNywgU3RhcnQgQWRkcmVzcyAwMGZmMDAzMywgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDMzLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4MzMsIAorCisvLyBTZWdtZW50ICM4LCBTdGFydCBBZGRyZXNzIDAwZmYwMDNiLCBMZW5ndGggMworMHhmZiwweDAwLDB4M2IsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgzYiwgCisKKy8vIFNlZ21lbnQgIzksIFN0YXJ0IEFkZHJlc3MgMDBmZjAwNDMsIExlbmd0aCAzCisweGZmLDB4MDAsMHg0MywweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDQzLCAKKworLy8gU2VnbWVudCAjMTAsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwNGIsIExlbmd0aCAzCisweGZmLDB4MDAsMHg0YiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDZlLCAweGM0LCAKKworLy8gU2VnbWVudCAjMTEsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwNTMsIExlbmd0aCAzCisweGZmLDB4MDAsMHg1MywweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDc1LCAweDhkLCAKKworLy8gU2VnbWVudCAjMTIsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwN2IsIExlbmd0aCAzCisweGZmLDB4MDAsMHg3YiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDdiLCAKKworLy8gU2VnbWVudCAjMTMsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwODAsIExlbmd0aCA3CisweGZmLDB4MDAsMHg4MCwweDAwLDB4MDcsMHgwMCwKKyAgICAweDdlLCAweDE0LCAweDAwLCAweDAwLCAweDAyLCAweDQwLCAweDUxLCAKKworLy8gU2VnbWVudCAjMTQsIFN0YXJ0IEFkZHJlc3MgMDBmZjMwMDAsIExlbmd0aCAyMTc4CisweGZmLDB4MDAsMHgwMCwweDMwLDB4ODIsMHgwOCwKKyAgICAweDEyLCAweDM3LCAweDI4LCAweDEyLCAweDMwLCAweDNlLCAweDEyLCAweDMwLCAweDU0LCAweDEyLCAweDMwLCAweGU1LCAweDEyLCAweDMxLCAweDY4LCAweDEyLCAKKyAgICAweDM1LCAweDIwLCAweDEyLCAweDM4LCAweDU4LCAweDEyLCAweDMxLCAweDE1LCAweDEyLCAweDMxLCAweDQwLCAweDEyLCAweDMwLCAweGEwLCAweDgwLCAweGUwLCAKKyAgICAweGU1LCAweDIzLCAweDYwLCAweDE5LCAweDdlLCAweDE0LCAweDAwLCAweDAwLCAweDA5LCAweGIxLCAweDAxLCAweGNmLCAweGI0LCAweDAwLCAweDAyLCAweDgwLCAKKyAgICAweDA1LCAweDE0LCAweDE5LCAweGIxLCAweDAxLCAweGNmLCAweGE1LCAweDBiLCAweGJlLCAweDMxLCAweDJmLCAweDc4LCAweGViLCAweDIyLCAweGMyLCAweGFmLCAKKyAgICAweDdlLCAweGIzLCAweDNmLCAweGYxLCAweGI0LCAweDAxLCAweDBhLCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAyLCAweDEyLCAweDcwLCAweGVmLCAweGQwLCAKKyAgICAweGYxLCAweGQyLCAweGFmLCAweDIyLCAweGMyLCAweGFmLCAweGU1LCAweDIyLCAweDYwLCAweDQzLCAweDdlLCAweDA3LCAweDAxLCAweGUxLCAweGJlLCAweDA0LCAKKyAgICAweDAzLCAweDgwLCAweDM4LCAweDM5LCAweDdlLCAweDA0LCAweDgwLCAweDAwLCAweDdlLCAweDIwLCAweDAwLCAweDEzLCAweDUwLCAweDIxLCAweDA5LCAweGEwLCAKKyAgICAweDAwLCAweDA0LCAweDRlLCAweGEwLCAweDA1LCAweDE5LCAweGEwLCAweDAwLCAweDA0LCAweDBhLCAweDMyLCAweDA5LCAweDUzLCAweDY3LCAweDhlLCAweDVlLCAKKyAgICAweDUxLCAweDI3LCAweDY4LCAweDBiLCAweDA5LCAweGEwLCAweDAwLCAweDEwLCAweDRlLCAweGEwLCAweDAxLCAweDE5LCAweGEwLCAweDAwLCAweDEwLCAweDJlLCAKKyAgICAweDA0LCAweDAxLCAweDAwLCAweGE1LCAweDBhLCAweGJlLCAweDIxLCAweDJmLCAweDc4LCAweGQxLCAweDc1LCAweDIyLCAweDAwLCAweGQyLCAweGFmLCAweDIyLCAKKyAgICAweGMyLCAweGFmLCAweDdlLCAweDIwLCAweDAwLCAweDdlLCAweDMwLCAweDAxLCAweDdjLCAweGIyLCAweDIzLCAweDBhLCAweDJiLCAweDQ5LCAweDMyLCAweDAxLCAKKyAgICAweDhmLCAweGJlLCAweDM0LCAweDAwLCAweDAwLCAweDY4LCAweDEyLCAweDdlLCAweGIxLCAweDIxLCAweGE1LCAweDRiLCAweDdhLCAweGIxLCAweDIxLCAweGNhLCAKKyAgICAweDE5LCAweDQ5LCAweDIyLCAweDMwLCAweGQ1LCAweDk5LCAweDI0LCAweGRhLCAweDE5LCAweDNlLCAweDMwLCAweGE1LCAweDBhLCAweGJlLCAweDIxLCAweDJmLCAKKyAgICAweDc4LCAweGQ2LCAweGQyLCAweGFmLCAweDIyLCAweDQ2LCAweDBmLCAweDQ5LCAweDY3LCAweDRjLCAweGJmLCAweDUwLCAweDE3LCAweDUzLCAweDZmLCAweDU2LCAKKyAgICAweGM3LCAweDVhLCAweDFmLCAweDVkLCAweDc3LCAweGMyLCAweGFmLCAweGU1LCAweDMyLCAweDYwLCAweDE0LCAweDdlLCAweDIwLCAweDAwLCAweDEzLCAweDUwLCAKKyAgICAweDA3LCAweGNhLCAweGI4LCAweDEyLCAweDMxLCAweDAyLCAweGRhLCAweGI4LCAweGE1LCAweDBhLCAweGJlLCAweDIxLCAweDJmLCAweDc4LCAweGVmLCAweGQyLCAKKyAgICAweGFmLCAweDIyLCAweGNhLCAweDI4LCAweDEyLCAweDY3LCAweGFiLCAweGRhLCAweDI4LCAweDQwLCAweDA5LCAweDBhLCAweDIyLCAweDA5LCAweGIyLCAweDY3LCAKKyAgICAweDhlLCAweGY0LCAweDUyLCAweDMyLCAweDIyLCAweGMyLCAweGFmLCAweGU1LCAweDM0LCAweDYwLCAweDE0LCAweDdlLCAweDIwLCAweDAwLCAweDEzLCAweDUwLCAKKyAgICAweDA3LCAweGNhLCAweGI4LCAweDEyLCAweDMxLCAweDMyLCAweGRhLCAweGI4LCAweGE1LCAweDBhLCAweGJlLCAweDIxLCAweDJmLCAweDc4LCAweGVmLCAweGQyLCAKKyAgICAweGFmLCAweDIyLCAweGNhLCAweDI4LCAweDBhLCAweDIyLCAweDA5LCAweDQyLCAweDAwLCAweDNlLCAweDEyLCAweDY5LCAweGMyLCAweGRhLCAweDI4LCAweDIyLCAKKyAgICAweGMyLCAweGFmLCAweGU1LCAweDM1LCAweDYwLCAweDE0LCAweDdlLCAweDIwLCAweDAwLCAweDEzLCAweDUwLCAweDA3LCAweGNhLCAweGI4LCAweDEyLCAweDMxLCAKKyAgICAweDVkLCAweGRhLCAweGI4LCAweGE1LCAweDBhLCAweGJlLCAweDIxLCAweDJmLCAweDc4LCAweGVmLCAweGQyLCAweGFmLCAweDIyLCAweGNhLCAweDI4LCAweDdlLCAKKyAgICAweDQwLCAweDAwLCAweDEyLCAweDZjLCAweDViLCAweGRhLCAweDI4LCAweDIyLCAweGMyLCAweGFmLCAweGU1LCAweDIzLCAweDYwLCAweDE0LCAweDdlLCAweDIwLCAKKyAgICAweDAwLCAweDEzLCAweDUwLCAweDA3LCAweGNhLCAweGI4LCAweDEyLCAweDMxLCAweDg1LCAweGRhLCAweGI4LCAweGE1LCAweDBhLCAweGJlLCAweDIxLCAweDJmLCAKKyAgICAweDc4LCAweGVmLCAweGQyLCAweGFmLCAweDIyLCAweDdjLCAweGIyLCAweDIzLCAweDBhLCAweDJiLCAweDQ5LCAweDIyLCAweDMxLCAweDkwLCAweDg5LCAweDI0LCAKKyAgICAweDMxLCAweGEwLCAweDMyLCAweDEwLCAweDMyLCAweDgwLCAweDMyLCAweGYwLCAweDMzLCAweDYwLCAweDMzLCAweGQwLCAweDM0LCAweDQwLCAweDM0LCAweGIwLCAKKyAgICAweDdlLCAweDI3LCAweDAxLCAweDhmLCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDc4LCAweDI0LCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDA5LCAweGIyLCAKKyAgICAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDBiLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAKKyAgICAweDQ5LCAweDMwLCAweDdkLCAweDIxLCAweGRhLCAweDE5LCAweDMwLCAweGU2LCAweDE4LCAweDdlLCAweDYwLCAweDAwLCAweDgwLCAweDFlLCAweGJlLCAweDI3LCAKKyAgICAweDAxLCAweDlmLCAweDY4LCAweDBkLCAweDdhLCAweDI3LCAweDAxLCAweDlmLCAweDdlLCAweDYwLCAweDljLCAweDdhLCAweDYzLCAweDAxLCAweGNmLCAweDgwLCAKKyAgICAweDJlLCAweDdlLCAweDYzLCAweDAxLCAweGNmLCAweGE1LCAweGJlLCAweDAwLCAweDI2LCAweDdlLCAweDYwLCAweDAxLCAweDdlLCAweGIwLCAweDAwLCAweDdlLCAKKyAgICAweGEwLCAweGM4LCAweDEyLCAweDYyLCAweGI2LCAweDQwLCAweDE4LCAweDc1LCAweDMxLCAweGIzLCAweDEyLCAweDdjLCAweDE1LCAweGMyLCAweDE4LCAweDZjLCAKKyAgICAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGNmLCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAKKyAgICAweDdlLCAweDI3LCAweDAxLCAweDkxLCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDc4LCAweDI0LCAweDdlLCAweDI0LCAweDgxLCAweDAwLCAweDA5LCAweGIyLCAKKyAgICAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDBiLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAKKyAgICAweDRjLCAweDg4LCAweDdkLCAweDIxLCAweGRhLCAweDE5LCAweDMwLCAweGU2LCAweDE4LCAweDdlLCAweDYwLCAweDAwLCAweDgwLCAweDFlLCAweGJlLCAweDI3LCAKKyAgICAweDAxLCAweGExLCAweDY4LCAweDBkLCAweDdhLCAweDI3LCAweDAxLCAweGExLCAweDdlLCAweDYwLCAweDljLCAweDdhLCAweDYzLCAweDAxLCAweGQwLCAweDgwLCAKKyAgICAweDJlLCAweDdlLCAweDYzLCAweDAxLCAweGQwLCAweGE1LCAweGJlLCAweDAwLCAweDI2LCAweDdlLCAweDYwLCAweDAxLCAweDdlLCAweGIwLCAweDAwLCAweDdlLCAKKyAgICAweGEwLCAweGM4LCAweDEyLCAweDYyLCAweGI2LCAweDQwLCAweDE4LCAweDc1LCAweDMxLCAweGIzLCAweDEyLCAweDdjLCAweDE1LCAweGMyLCAweDE5LCAweDZjLCAKKyAgICAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGQwLCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAKKyAgICAweDdlLCAweDI3LCAweDAxLCAweDkzLCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDc4LCAweDI0LCAweDdlLCAweDI0LCAweDgyLCAweDAwLCAweDA5LCAweGIyLCAKKyAgICAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDBiLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAKKyAgICAweDRmLCAweGUwLCAweDdkLCAweDIxLCAweGRhLCAweDE5LCAweDMwLCAweGU2LCAweDE4LCAweDdlLCAweDYwLCAweDAwLCAweDgwLCAweDFlLCAweGJlLCAweDI3LCAKKyAgICAweDAxLCAweGEzLCAweDY4LCAweDBkLCAweDdhLCAweDI3LCAweDAxLCAweGEzLCAweDdlLCAweDYwLCAweDljLCAweDdhLCAweDYzLCAweDAxLCAweGQxLCAweDgwLCAKKyAgICAweDJlLCAweDdlLCAweDYzLCAweDAxLCAweGQxLCAweGE1LCAweGJlLCAweDAwLCAweDI2LCAweDdlLCAweDYwLCAweDAxLCAweDdlLCAweGIwLCAweDAwLCAweDdlLCAKKyAgICAweGEwLCAweGM4LCAweDEyLCAweDYyLCAweGI2LCAweDQwLCAweDE4LCAweDc1LCAweDMxLCAweGIzLCAweDEyLCAweDdjLCAweDE1LCAweGMyLCAweDFhLCAweDZjLCAKKyAgICAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGQxLCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAKKyAgICAweDdlLCAweDI3LCAweDAxLCAweDk1LCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDc4LCAweDI0LCAweDdlLCAweDI0LCAweDgzLCAweDAwLCAweDA5LCAweGIyLCAKKyAgICAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDBiLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAKKyAgICAweDUzLCAweDM4LCAweDdkLCAweDIxLCAweGRhLCAweDE5LCAweDMwLCAweGU2LCAweDE4LCAweDdlLCAweDYwLCAweDAwLCAweDgwLCAweDFlLCAweGJlLCAweDI3LCAKKyAgICAweDAxLCAweGE1LCAweDY4LCAweDBkLCAweDdhLCAweDI3LCAweDAxLCAweGE1LCAweDdlLCAweDYwLCAweDljLCAweDdhLCAweDYzLCAweDAxLCAweGQyLCAweDgwLCAKKyAgICAweDJlLCAweDdlLCAweDYzLCAweDAxLCAweGQyLCAweGE1LCAweGJlLCAweDAwLCAweDI2LCAweDdlLCAweDYwLCAweDAxLCAweDdlLCAweGIwLCAweDAwLCAweDdlLCAKKyAgICAweGEwLCAweGM4LCAweDEyLCAweDYyLCAweGI2LCAweDQwLCAweDE4LCAweDc1LCAweDMxLCAweGIzLCAweDEyLCAweDdjLCAweDE1LCAweGMyLCAweDFiLCAweDZjLCAKKyAgICAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGQyLCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAKKyAgICAweDdlLCAweDI3LCAweDAxLCAweDk3LCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDc4LCAweDI0LCAweDdlLCAweDI0LCAweDg0LCAweDAwLCAweDA5LCAweGIyLCAKKyAgICAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDBiLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAKKyAgICAweDU2LCAweDkwLCAweDdkLCAweDIxLCAweGRhLCAweDE5LCAweDMwLCAweGU2LCAweDE4LCAweDdlLCAweDYwLCAweDAwLCAweDgwLCAweDFlLCAweGJlLCAweDI3LCAKKyAgICAweDAxLCAweGE3LCAweDY4LCAweDBkLCAweDdhLCAweDI3LCAweDAxLCAweGE3LCAweDdlLCAweDYwLCAweDljLCAweDdhLCAweDYzLCAweDAxLCAweGQzLCAweDgwLCAKKyAgICAweDJlLCAweDdlLCAweDYzLCAweDAxLCAweGQzLCAweGE1LCAweGJlLCAweDAwLCAweDI2LCAweDdlLCAweDYwLCAweDAxLCAweDdlLCAweGIwLCAweDAwLCAweDdlLCAKKyAgICAweGEwLCAweGM4LCAweDEyLCAweDYyLCAweGI2LCAweDQwLCAweDE4LCAweDc1LCAweDMxLCAweGIzLCAweDEyLCAweDdjLCAweDE1LCAweGMyLCAweDFjLCAweDZjLCAKKyAgICAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGQzLCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAKKyAgICAweDdlLCAweDI3LCAweDAxLCAweDk5LCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDc4LCAweDI0LCAweDdlLCAweDI0LCAweDg1LCAweDAwLCAweDA5LCAweGIyLCAKKyAgICAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDBiLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAKKyAgICAweDU5LCAweGU4LCAweDdkLCAweDIxLCAweGRhLCAweDE5LCAweDMwLCAweGU2LCAweDE4LCAweDdlLCAweDYwLCAweDAwLCAweDgwLCAweDFlLCAweGJlLCAweDI3LCAKKyAgICAweDAxLCAweGE5LCAweDY4LCAweDBkLCAweDdhLCAweDI3LCAweDAxLCAweGE5LCAweDdlLCAweDYwLCAweDljLCAweDdhLCAweDYzLCAweDAxLCAweGQ0LCAweDgwLCAKKyAgICAweDJlLCAweDdlLCAweDYzLCAweDAxLCAweGQ0LCAweGE1LCAweGJlLCAweDAwLCAweDI2LCAweDdlLCAweDYwLCAweDAxLCAweDdlLCAweGIwLCAweDAwLCAweDdlLCAKKyAgICAweGEwLCAweGM4LCAweDEyLCAweDYyLCAweGI2LCAweDQwLCAweDE4LCAweDc1LCAweDMxLCAweGIzLCAweDEyLCAweDdjLCAweDE1LCAweGMyLCAweDFkLCAweDZjLCAKKyAgICAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGQ0LCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAKKyAgICAweDdlLCAweDI3LCAweDAxLCAweDliLCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDc4LCAweDI0LCAweDdlLCAweDI0LCAweDg2LCAweDAwLCAweDA5LCAweGIyLCAKKyAgICAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDBiLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAKKyAgICAweDVkLCAweDQwLCAweDdkLCAweDIxLCAweGRhLCAweDE5LCAweDMwLCAweGU2LCAweDE4LCAweDdlLCAweDYwLCAweDAwLCAweDgwLCAweDFlLCAweGJlLCAweDI3LCAKKyAgICAweDAxLCAweGFiLCAweDY4LCAweDBkLCAweDdhLCAweDI3LCAweDAxLCAweGFiLCAweDdlLCAweDYwLCAweDljLCAweDdhLCAweDYzLCAweDAxLCAweGQ1LCAweDgwLCAKKyAgICAweDJlLCAweDdlLCAweDYzLCAweDAxLCAweGQ1LCAweGE1LCAweGJlLCAweDAwLCAweDI2LCAweDdlLCAweDYwLCAweDAxLCAweDdlLCAweGIwLCAweDAwLCAweDdlLCAKKyAgICAweGEwLCAweGM4LCAweDEyLCAweDYyLCAweGI2LCAweDQwLCAweDE4LCAweDc1LCAweDMxLCAweGIzLCAweDEyLCAweDdjLCAweDE1LCAweGMyLCAweDFlLCAweDZjLCAKKyAgICAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGQ1LCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAKKyAgICAweDdlLCAweDI3LCAweDAxLCAweDlkLCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDc4LCAweDI0LCAweDdlLCAweDI0LCAweDg3LCAweDAwLCAweDA5LCAweGIyLCAKKyAgICAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDBiLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAKKyAgICAweDYwLCAweDk4LCAweDdkLCAweDIxLCAweGRhLCAweDE5LCAweDMwLCAweGU2LCAweDE4LCAweDdlLCAweDYwLCAweDAwLCAweDgwLCAweDFlLCAweGJlLCAweDI3LCAKKyAgICAweDAxLCAweGFkLCAweDY4LCAweDBkLCAweDdhLCAweDI3LCAweDAxLCAweGFkLCAweDdlLCAweDYwLCAweDljLCAweDdhLCAweDYzLCAweDAxLCAweGQ2LCAweDgwLCAKKyAgICAweDJlLCAweDdlLCAweDYzLCAweDAxLCAweGQ2LCAweGE1LCAweGJlLCAweDAwLCAweDI2LCAweDdlLCAweDYwLCAweDAxLCAweDdlLCAweGIwLCAweDAwLCAweDdlLCAKKyAgICAweGEwLCAweGM4LCAweDEyLCAweDYyLCAweGI2LCAweDQwLCAweDE4LCAweDc1LCAweDMxLCAweGIzLCAweDEyLCAweDdjLCAweDE1LCAweGMyLCAweDFmLCAweDZjLCAKKyAgICAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGQ2LCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAKKyAgICAweGMyLCAweGFmLCAweGU1LCAweDI0LCAweDYwLCAweDE0LCAweDdlLCAweDIwLCAweDAwLCAweDEzLCAweDUwLCAweDA3LCAweGNhLCAweGI4LCAweDEyLCAweDM1LCAKKyAgICAweDNkLCAweGRhLCAweGI4LCAweGE1LCAweDBhLCAweGJlLCAweDIxLCAweDJmLCAweDc4LCAweGVmLCAweGQyLCAweGFmLCAweDIyLCAweDdjLCAweGIyLCAweDIzLCAKKyAgICAweDBhLCAweDJiLCAweDQ5LCAweDIyLCAweDM1LCAweDQ4LCAweDg5LCAweDI0LCAweDM1LCAweDU4LCAweDM1LCAweDkyLCAweDM1LCAweGNjLCAweDM2LCAweDA2LCAKKyAgICAweDM2LCAweDQwLCAweDM2LCAweDdhLCAweDM2LCAweGI0LCAweDM2LCAweGVlLCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDA5LCAweGIyLCAweDAwLCAweDE0LCAKKyAgICAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDBiLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAweDQ5LCAweDMwLCAKKyAgICAweDdkLCAweDIxLCAweGRhLCAweDE5LCAweDVlLCAweGIwLCAweDAxLCAweDdlLCAweGEwLCAweDkwLCAweDEyLCAweDYyLCAweDkzLCAweDQwLCAweDEyLCAweDc1LCAKKyAgICAweDMxLCAweGI4LCAweDEyLCAweDdjLCAweDE1LCAweGMyLCAweDIwLCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAKKyAgICAweGYxLCAweDIyLCAweDdlLCAweDI0LCAweDgxLCAweDAwLCAweDA5LCAweGIyLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAKKyAgICAweGI4LCAweDY4LCAweDBiLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAweDRjLCAweDg4LCAweDdkLCAweDIxLCAweGRhLCAweDE5LCAweDVlLCAweGIwLCAKKyAgICAweDAxLCAweDdlLCAweGEwLCAweDkwLCAweDEyLCAweDYyLCAweDkzLCAweDQwLCAweDEyLCAweDc1LCAweDMxLCAweGI4LCAweDEyLCAweDdjLCAweDE1LCAweGMyLCAKKyAgICAweDIxLCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAweDdlLCAweDI0LCAweDgyLCAweDAwLCAKKyAgICAweDA5LCAweGIyLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDBiLCAweGNhLCAweDE5LCAweDdkLCAKKyAgICAweDEyLCAweDEyLCAweDRmLCAweGUwLCAweDdkLCAweDIxLCAweGRhLCAweDE5LCAweDVlLCAweGIwLCAweDAxLCAweDdlLCAweGEwLCAweDkwLCAweDEyLCAweDYyLCAKKyAgICAweDkzLCAweDQwLCAweDEyLCAweDc1LCAweDMxLCAweGI4LCAweDEyLCAweDdjLCAweDE1LCAweGMyLCAweDIyLCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAKKyAgICAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAweDdlLCAweDI0LCAweDgzLCAweDAwLCAweDA5LCAweGIyLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAKKyAgICAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDBiLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAweDUzLCAweDM4LCAweDdkLCAweDIxLCAKKyAgICAweGRhLCAweDE5LCAweDVlLCAweGIwLCAweDAxLCAweDdlLCAweGEwLCAweDkwLCAweDEyLCAweDYyLCAweDkzLCAweDQwLCAweDEyLCAweDc1LCAweDMxLCAweGI4LCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweGMyLCAweDIzLCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAKKyAgICAweDdlLCAweDI0LCAweDg0LCAweDAwLCAweDA5LCAweGIyLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAKKyAgICAweDBiLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAweDU2LCAweDkwLCAweDdkLCAweDIxLCAweGRhLCAweDE5LCAweDVlLCAweGIwLCAweDAxLCAweDdlLCAKKyAgICAweGEwLCAweDkwLCAweDEyLCAweDYyLCAweDkzLCAweDQwLCAweDEyLCAweDc1LCAweDMxLCAweGI4LCAweDEyLCAweDdjLCAweDE1LCAweGMyLCAweDI0LCAweGMwLCAKKyAgICAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAweDdlLCAweDI0LCAweDg1LCAweDAwLCAweDA5LCAweGIyLCAKKyAgICAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDBiLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAKKyAgICAweDU5LCAweGU4LCAweDdkLCAweDIxLCAweGRhLCAweDE5LCAweDVlLCAweGIwLCAweDAxLCAweDdlLCAweGEwLCAweDkwLCAweDEyLCAweDYyLCAweDkzLCAweDQwLCAKKyAgICAweDEyLCAweDc1LCAweDMxLCAweGI4LCAweDEyLCAweDdjLCAweDE1LCAweGMyLCAweDI1LCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAKKyAgICAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAweDdlLCAweDI0LCAweDg2LCAweDAwLCAweDA5LCAweGIyLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAKKyAgICAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDBiLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAweDVkLCAweDQwLCAweDdkLCAweDIxLCAweGRhLCAweDE5LCAKKyAgICAweDVlLCAweGIwLCAweDAxLCAweDdlLCAweGEwLCAweDkwLCAweDEyLCAweDYyLCAweDkzLCAweDQwLCAweDEyLCAweDc1LCAweDMxLCAweGI4LCAweDEyLCAweDdjLCAKKyAgICAweDE1LCAweGMyLCAweDI2LCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAweDdlLCAweDI0LCAKKyAgICAweDg3LCAweDAwLCAweDA5LCAweGIyLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDBiLCAweGNhLCAKKyAgICAweDE5LCAweDdkLCAweDEyLCAweDEyLCAweDYwLCAweDk4LCAweDdkLCAweDIxLCAweGRhLCAweDE5LCAweDVlLCAweGIwLCAweDAxLCAweDdlLCAweGEwLCAweDkwLCAKKyAgICAweDEyLCAweDYyLCAweDkzLCAweDQwLCAweDEyLCAweDc1LCAweDMxLCAweGI4LCAweDEyLCAweDdjLCAweDE1LCAweGMyLCAweDI3LCAweGMwLCAweGYxLCAweDc1LCAKKyAgICAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAweGMyLCAweGFmLCAweGU1LCAweDMzLCAweDYwLCAweDE0LCAweDdlLCAweDIwLCAKKyAgICAweDAwLCAweDEzLCAweDUwLCAweDA3LCAweGNhLCAweGI4LCAweDEyLCAweDM3LCAweDQ1LCAweGRhLCAweGI4LCAweGE1LCAweDBhLCAweGJlLCAweDIxLCAweDJmLCAKKyAgICAweDc4LCAweGVmLCAweGQyLCAweGFmLCAweDIyLCAweDdjLCAweGIyLCAweDIzLCAweDBhLCAweDJiLCAweDQ5LCAweDIyLCAweDM3LCAweDUwLCAweDg5LCAweDI0LCAKKyAgICAweDM3LCAweDYwLCAweDM3LCAweDdmLCAweDM3LCAweDllLCAweDM3LCAweGJkLCAweDM3LCAweGRjLCAweDM3LCAweGZiLCAweDM4LCAweDFhLCAweDM4LCAweDM5LCAKKyAgICAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAweDQ4LCAweDFiLCAweGRhLCAweDE5LCAweDEwLCAweDA0LCAweDAyLCAKKyAgICAweDgwLCAweDBjLCAweGQyLCAweDAxLCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAweDdlLCAKKyAgICAweDI0LCAweDgxLCAweDAwLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAweDRiLCAweDczLCAweGRhLCAweDE5LCAweDEwLCAweDA0LCAweDAyLCAweDgwLCAKKyAgICAweDBjLCAweGQyLCAweDAxLCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAweDdlLCAweDI0LCAKKyAgICAweDgyLCAweDAwLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAweDRlLCAweGNiLCAweGRhLCAweDE5LCAweDEwLCAweDA0LCAweDAyLCAweDgwLCAweDBjLCAKKyAgICAweGQyLCAweDAxLCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAweDdlLCAweDI0LCAweDgzLCAKKyAgICAweDAwLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAweDUyLCAweDIzLCAweGRhLCAweDE5LCAweDEwLCAweDA0LCAweDAyLCAweDgwLCAweDBjLCAweGQyLCAKKyAgICAweDAxLCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAweDdlLCAweDI0LCAweDg0LCAweDAwLCAKKyAgICAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAweDU1LCAweDdiLCAweGRhLCAweDE5LCAweDEwLCAweDA0LCAweDAyLCAweDgwLCAweDBjLCAweGQyLCAweDAxLCAKKyAgICAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAweDdlLCAweDI0LCAweDg1LCAweDAwLCAweGNhLCAKKyAgICAweDE5LCAweDdkLCAweDEyLCAweDEyLCAweDU4LCAweGQzLCAweGRhLCAweDE5LCAweDEwLCAweDA0LCAweDAyLCAweDgwLCAweDBjLCAweGQyLCAweDAxLCAweGMwLCAKKyAgICAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAweDdlLCAweDI0LCAweDg2LCAweDAwLCAweGNhLCAweDE5LCAKKyAgICAweDdkLCAweDEyLCAweDEyLCAweDVjLCAweDJiLCAweGRhLCAweDE5LCAweDEwLCAweDA0LCAweDAyLCAweDgwLCAweDBjLCAweGQyLCAweDAxLCAweGMwLCAweGYxLCAKKyAgICAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAweDdlLCAweDI0LCAweDg3LCAweDAwLCAweGNhLCAweDE5LCAweDdkLCAKKyAgICAweDEyLCAweDEyLCAweDVmLCAweDgzLCAweGRhLCAweDE5LCAweDEwLCAweDA0LCAweDAyLCAweDgwLCAweDBjLCAweGQyLCAweDAxLCAweGMwLCAweGYxLCAweDc1LCAKKyAgICAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAweGMyLCAweGFmLCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweGE5LCAKKyAgICAweDMyLCAweGYyLCAweDFhLCAweDdlLCAweDA3LCAweDAxLCAweGUxLCAweGJlLCAweDA0LCAweDAwLCAweDAwLCAweDc4LCAweDEwLCAweGU1LCAweGY1LCAweDMzLCAKKyAgICAweDgyLCAweGU3LCAweDQwLCAweDA5LCAweDg1LCAweDMxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDc1LCAweGY2LCAweDAwLCAweGQwLCAweGYxLCAweGQyLCAKKyAgICAweGFmLCAweDIyLCAKKworLy8gU2VnbWVudCAjMTUsIFN0YXJ0IEFkZHJlc3MgMDBmZjQwMDAsIExlbmd0aCAxNTM4MQorMHhmZiwweDAwLDB4MDAsMHg0MCwweDE1LDB4M2MsCisgICAgMHg3ZSwgMHgwNCwgMHgwMCwgMHgwMSwgMHg3ZSwgMHgxNCwgMHg3ZiwgMHhmOCwgMHg3ZSwgMHgyNCwgMHgwMCwgMHhmZSwgMHg3ZCwgMHgzMSwgMHgwYiwgMHgxYSwgCisgICAgMHg1MCwgMHgxYiwgMHgwYSwgMHg1MCwgMHg3ZSwgMHgxNCwgMHg0MCwgMHgxYiwgMHgwMiwgMHg0MCwgMHg2YSwgMHg3ZSwgMHhmOCwgMHgwMCwgMHg2ZiwgMHhkMiwgCisgICAgMHgwNCwgMHhjMiwgMHg5NCwgMHhkMiwgMHg5NSwgMHg3ZSwgMHhmNCwgMHg0MCwgMHgyYywgMHgwMiwgMHg0MCwgMHg3YywgMHgxMiwgMHg3ZCwgMHgzMCwgMHhmNSwgCisgICAgMHgyZiwgMHg3YSwgMHhhMSwgMHgzMCwgMHg3YSwgMHgxMSwgMHg2ZSwgMHgxMiwgMHg3NSwgMHhjYSwgMHgxMiwgMHg0MCwgMHhkYywgMHg3ZSwgMHhiMywgMHgzZiwgCisgICAgMHhmMSwgMHg2MCwgMHgwMywgMHgxMiwgMHg0MywgMHhkNCwgMHg3NSwgMHhmMSwgMHgwMCwgMHgxMiwgMHg3NiwgMHg2ZiwgMHhkMiwgMHhhZiwgMHgwMiwgMHgzMCwgCisgICAgMHgwMCwgMHg3ZSwgMHgwNCwgMHgwMCwgMHhmZiwgMHg3ZSwgMHgxOCwgMHg0MCwgMHg1ZiwgMHg3YSwgMHgxYywgMHgwMCwgMHgwMSwgMHg4OSwgMHgxOCwgMHhhOSwgCisgICAgMHgyNSwgMHg4NywgMHgwMywgMHhhOSwgMHhkNSwgMHg4NywgMHhkMiwgMHg5MywgMHg4OSwgMHgwOCwgMHg3ZSwgMHgwNCwgMHgwMCwgMHhmZiwgMHg3ZSwgMHgxOCwgCisgICAgMHg0MCwgMHg3OCwgMHg3YSwgMHgxYywgMHgwMCwgMHgwMSwgMHg4OSwgMHgxOCwgMHhjMiwgMHg5MywgMHg4OSwgMHgwOCwgMHg3ZSwgMHgwOCwgMHgwMCwgMHgyMCwgCisgICAgMHg3ZSwgMHg0NCwgMHgwNCwgMHgwMCwgMHg3ZSwgMHg0MCwgMHgwMCwgMHg3ZSwgMHhlNCwgMHg0MCwgMHg4ZSwgMHgwMiwgMHg3YywgMHgzMCwgMHg3ZSwgMHgwOCwgCisgICAgMHgwMSwgMHg2ZiwgMHg3ZSwgMHg0NCwgMHgyOCwgMHg3YywgMHg3ZSwgMHg0MCwgMHgwMCwgMHg3ZSwgMHhlNCwgMHg0MCwgMHhhMCwgMHgwMiwgMHg3YywgMHgzMCwgCisgICAgMHg3ZSwgMHgwOCwgMHgwMCwgMHg2ZiwgMHg3ZSwgMHg0NCwgMHgwMSwgMHgwMCwgMHg3ZSwgMHg0MCwgMHg1MywgMHg3ZSwgMHhlNCwgMHg0MCwgMHhiMiwgMHgwMiwgCisgICAgMHg3YywgMHgzMCwgMHg3NSwgMHg2ZCwgMHgyMCwgMHg3NSwgMHg2YywgMHgzMCwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgwOCwgMHg3NSwgMHg2YSwgMHg1OCwgMHg3NSwgCisgICAgMHg2YiwgMHgwOCwgMHg3NSwgMHg2NywgMHgwOCwgMHg3NSwgMHg2OSwgMHgwMSwgMHg3NSwgMHg4OSwgMHgwMSwgMHg3NSwgMHg4YSwgMHgwMSwgMHg3NSwgMHg4YywgCisgICAgMHgwMCwgMHhkMiwgMHg4YywgMHg3ZSwgMHgwNCwgMHgwMCwgMHgwMiwgMHg3YSwgMHgwNSwgMHg1OCwgMHg4OSwgMHhmNCwgMHg3NSwgMHhiNywgMHg3ZiwgMHg3NSwgCisgICAgMHhiOCwgMHg3ZiwgMHg3NSwgMHhiMywgMHgwNywgMHg3NSwgMHhiMiwgMHgwNywgMHhkMiwgMHhhOSwgMHgyMiwgMHhkMiwgMHg5MiwgMHhlNCwgMHhkNSwgMHhlMCwgCisgICAgMHhmZCwgMHhjMiwgMHg5MiwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgyZiwgMHg3ZSwgMHhhMCwgMHgwOCwgMHgxOSwgMHhhMiwgMHgwMCwgCisgICAgMHgxMCwgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHhmMiwgMHg3ZSwgMHgyMCwgMHgwMCwgMHgxMiwgMHg0MSwgMHg3ZSwgMHgwYiwgMHgyMCwgCisgICAgMHhiZSwgMHgyMSwgMHgyZiwgMHg3OCwgMHhmNiwgMHgyMiwgMHg3ZSwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0YywgMHgwMiwgMHg3NCwgMHhiZiwgMHgxOSwgMHhiMCwgCisgICAgMHgwMCwgMHgwYywgMHg3NCwgMHgxMCwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwOCwgMHg3NCwgMHg4MCwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgMHg3ZSwgMHg1NCwgCisgICAgMHgwMCwgMHgwMiwgMHgxOSwgMHhhMCwgMHgwMCwgMHgwNCwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMywgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgCisgICAgMHg3NCwgMHgwNywgMHhhOSwgMHgyMCwgMHgzMCwgMHgwYiwgMHhhOSwgMHgzNSwgMHgzMCwgMHgwNSwgMHhiZSwgMHgyMCwgMHgwMSwgMHgyOCwgMHgwMiwgMHg3NCwgCisgICAgMHgwZiwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwNCwgMHhhOSwgMHgzMywgMHgzMCwgMHgxOCwgMHg3NCwgMHhiZiwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgMHg3NCwgCisgICAgMHgyOCwgMHhhOSwgMHgyMCwgMHgzMCwgMHgwMiwgMHg3NCwgMHgyMCwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwNCwgMHg3NCwgMHgwMywgMHgxOSwgMHhiMCwgMHgwMCwgCisgICAgMHgwYywgMHg3NCwgMHhhNywgMHgxOSwgMHhiMCwgMHgwMCwgMHgwOCwgMHg3NCwgMHgwYywgMHgxOSwgMHhiMCwgMHgwMCwgMHgxMCwgMHgyMiwgMHg3ZSwgMHgwNCwgCisgICAgMHg4MCwgMHgwMCwgMHg0YywgMHgwMiwgMHhlNCwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgxMCwgMHg1NCwgMHgwOCwgMHgxOSwgCisgICAgMHhiMCwgMHgwMCwgMHgxMCwgMHg3NCwgMHhhNywgMHgxOSwgMHhiMCwgMHgwMCwgMHgwOCwgMHgyMiwgMHg3YywgMHhiMiwgMHgyMywgMHgwYSwgMHgyYiwgMHg0OSwgCisgICAgMHgyMiwgMHg0MSwgMHhhNSwgMHg4OSwgMHgyNCwgMHg0MSwgMHhiNSwgMHg0MSwgMHhkNCwgMHg0MSwgMHhmMywgMHg0MiwgMHgxMiwgMHg0MiwgMHgzMSwgMHg0MiwgCisgICAgMHg1MCwgMHg0MiwgMHg2ZiwgMHg0MiwgMHg4ZSwgMHhjMiwgMHgxMCwgMHhjMiwgMHgxOCwgMHhjMiwgMHgyMCwgMHhjMiwgMHgwOCwgMHg3ZSwgMHgwNCwgMHgwOSwgCisgICAgMHhlMywgMHg3YSwgMHgwNywgMHgwMSwgMHg2ZiwgMHg3YSwgMHgwNywgMHgwMSwgMHg3ZiwgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwNywgMHgwMSwgMHg4ZiwgMHg3YSwgCisgICAgMHgwNywgMHgwMSwgMHg5ZiwgMHgyMiwgMHhjMiwgMHgxMSwgMHhjMiwgMHgxOSwgMHhjMiwgMHgyMSwgMHhjMiwgMHgwOSwgMHg3ZSwgMHgwNCwgMHgwZCwgMHhlMywgCisgICAgMHg3YSwgMHgwNywgMHgwMSwgMHg3MSwgMHg3YSwgMHgwNywgMHgwMSwgMHg4MSwgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwNywgMHgwMSwgMHg5MSwgMHg3YSwgMHgwNywgCisgICAgMHgwMSwgMHhhMSwgMHgyMiwgMHhjMiwgMHgxMiwgMHhjMiwgMHgxYSwgMHhjMiwgMHgyMiwgMHhjMiwgMHgwYSwgMHg3ZSwgMHgwNCwgMHgxMSwgMHhlMywgMHg3YSwgCisgICAgMHgwNywgMHgwMSwgMHg3MywgMHg3YSwgMHgwNywgMHgwMSwgMHg4MywgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwNywgMHgwMSwgMHg5MywgMHg3YSwgMHgwNywgMHgwMSwgCisgICAgMHhhMywgMHgyMiwgMHhjMiwgMHgxMywgMHhjMiwgMHgxYiwgMHhjMiwgMHgyMywgMHhjMiwgMHgwYiwgMHg3ZSwgMHgwNCwgMHgxNSwgMHhlMywgMHg3YSwgMHgwNywgCisgICAgMHgwMSwgMHg3NSwgMHg3YSwgMHgwNywgMHgwMSwgMHg4NSwgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwNywgMHgwMSwgMHg5NSwgMHg3YSwgMHgwNywgMHgwMSwgMHhhNSwgCisgICAgMHgyMiwgMHhjMiwgMHgxNCwgMHhjMiwgMHgxYywgMHhjMiwgMHgyNCwgMHhjMiwgMHgwYywgMHg3ZSwgMHgwNCwgMHgxOSwgMHhlMywgMHg3YSwgMHgwNywgMHgwMSwgCisgICAgMHg3NywgMHg3YSwgMHgwNywgMHgwMSwgMHg4NywgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwNywgMHgwMSwgMHg5NywgMHg3YSwgMHgwNywgMHgwMSwgMHhhNywgMHgyMiwgCisgICAgMHhjMiwgMHgxNSwgMHhjMiwgMHgxZCwgMHhjMiwgMHgyNSwgMHhjMiwgMHgwZCwgMHg3ZSwgMHgwNCwgMHgxZCwgMHhlMywgMHg3YSwgMHgwNywgMHgwMSwgMHg3OSwgCisgICAgMHg3YSwgMHgwNywgMHgwMSwgMHg4OSwgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwNywgMHgwMSwgMHg5OSwgMHg3YSwgMHgwNywgMHgwMSwgMHhhOSwgMHgyMiwgMHhjMiwgCisgICAgMHgxNiwgMHhjMiwgMHgxZSwgMHhjMiwgMHgyNiwgMHhjMiwgMHgwZSwgMHg3ZSwgMHgwNCwgMHgyMSwgMHhlMywgMHg3YSwgMHgwNywgMHgwMSwgMHg3YiwgMHg3YSwgCisgICAgMHgwNywgMHgwMSwgMHg4YiwgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwNywgMHgwMSwgMHg5YiwgMHg3YSwgMHgwNywgMHgwMSwgMHhhYiwgMHgyMiwgMHhjMiwgMHgxNywgCisgICAgMHhjMiwgMHgxZiwgMHhjMiwgMHgyNywgMHhjMiwgMHgwZiwgMHg3ZSwgMHgwNCwgMHgyNSwgMHhlMywgMHg3YSwgMHgwNywgMHgwMSwgMHg3ZCwgMHg3YSwgMHgwNywgCisgICAgMHgwMSwgMHg4ZCwgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwNywgMHgwMSwgMHg5ZCwgMHg3YSwgMHgwNywgMHgwMSwgMHhhZCwgMHgyMiwgMHg3YywgMHhiMiwgMHgyMywgCisgICAgMHgwYSwgMHgyYiwgMHg0OSwgMHgyMiwgMHg0MiwgMHhiOCwgMHg4OSwgMHgyNCwgMHg0MiwgMHhjOCwgMHg0MiwgMHhlOSwgMHg0MywgMHgwYSwgMHg0MywgMHgyYiwgCisgICAgMHg0MywgMHg0YywgMHg0MywgMHg2ZCwgMHg0MywgMHg4ZSwgMHg0MywgMHhhZiwgMHgzMCwgMHg1MCwgMHgwNywgMHgyMCwgMHg2OCwgMHgwNCwgMHhjMiwgMHgyOCwgCisgICAgMHg4MCwgMHgxNiwgMHgzMCwgMHg0MCwgMHgwNywgMHgyMCwgMHg2MCwgMHgwNCwgMHhjMiwgMHgyOCwgMHg4MCwgMHgwYywgMHgzMCwgMHg0OCwgMHgwNywgMHgyMCwgCisgICAgMHg1OCwgMHgwNCwgMHhjMiwgMHgyOCwgMHg4MCwgMHgwMiwgMHhkMiwgMHgyOCwgMHgyMiwgMHgzMCwgMHg1MSwgMHgwNywgMHgyMCwgMHg2OSwgMHgwNCwgMHhjMiwgCisgICAgMHgyOSwgMHg4MCwgMHgxNiwgMHgzMCwgMHg0MSwgMHgwNywgMHgyMCwgMHg2MSwgMHgwNCwgMHhjMiwgMHgyOSwgMHg4MCwgMHgwYywgMHgzMCwgMHg0OSwgMHgwNywgCisgICAgMHgyMCwgMHg1OSwgMHgwNCwgMHhjMiwgMHgyOSwgMHg4MCwgMHgwMiwgMHhkMiwgMHgyOSwgMHgyMiwgMHgzMCwgMHg1MiwgMHgwNywgMHgyMCwgMHg2YSwgMHgwNCwgCisgICAgMHhjMiwgMHgyYSwgMHg4MCwgMHgxNiwgMHgzMCwgMHg0MiwgMHgwNywgMHgyMCwgMHg2MiwgMHgwNCwgMHhjMiwgMHgyYSwgMHg4MCwgMHgwYywgMHgzMCwgMHg0YSwgCisgICAgMHgwNywgMHgyMCwgMHg1YSwgMHgwNCwgMHhjMiwgMHgyYSwgMHg4MCwgMHgwMiwgMHhkMiwgMHgyYSwgMHgyMiwgMHgzMCwgMHg1MywgMHgwNywgMHgyMCwgMHg2YiwgCisgICAgMHgwNCwgMHhjMiwgMHgyYiwgMHg4MCwgMHgxNiwgMHgzMCwgMHg0MywgMHgwNywgMHgyMCwgMHg2MywgMHgwNCwgMHhjMiwgMHgyYiwgMHg4MCwgMHgwYywgMHgzMCwgCisgICAgMHg0YiwgMHgwNywgMHgyMCwgMHg1YiwgMHgwNCwgMHhjMiwgMHgyYiwgMHg4MCwgMHgwMiwgMHhkMiwgMHgyYiwgMHgyMiwgMHgzMCwgMHg1NCwgMHgwNywgMHgyMCwgCisgICAgMHg2YywgMHgwNCwgMHhjMiwgMHgyYywgMHg4MCwgMHgxNiwgMHgzMCwgMHg0NCwgMHgwNywgMHgyMCwgMHg2NCwgMHgwNCwgMHhjMiwgMHgyYywgMHg4MCwgMHgwYywgCisgICAgMHgzMCwgMHg0YywgMHgwNywgMHgyMCwgMHg1YywgMHgwNCwgMHhjMiwgMHgyYywgMHg4MCwgMHgwMiwgMHhkMiwgMHgyYywgMHgyMiwgMHgzMCwgMHg1NSwgMHgwNywgCisgICAgMHgyMCwgMHg2ZCwgMHgwNCwgMHhjMiwgMHgyZCwgMHg4MCwgMHgxNiwgMHgzMCwgMHg0NSwgMHgwNywgMHgyMCwgMHg2NSwgMHgwNCwgMHhjMiwgMHgyZCwgMHg4MCwgCisgICAgMHgwYywgMHgzMCwgMHg0ZCwgMHgwNywgMHgyMCwgMHg1ZCwgMHgwNCwgMHhjMiwgMHgyZCwgMHg4MCwgMHgwMiwgMHhkMiwgMHgyZCwgMHgyMiwgMHgzMCwgMHg1NiwgCisgICAgMHgwNywgMHgyMCwgMHg2ZSwgMHgwNCwgMHhjMiwgMHgyZSwgMHg4MCwgMHgxNiwgMHgzMCwgMHg0NiwgMHgwNywgMHgyMCwgMHg2NiwgMHgwNCwgMHhjMiwgMHgyZSwgCisgICAgMHg4MCwgMHgwYywgMHgzMCwgMHg0ZSwgMHgwNywgMHgyMCwgMHg1ZSwgMHgwNCwgMHhjMiwgMHgyZSwgMHg4MCwgMHgwMiwgMHhkMiwgMHgyZSwgMHgyMiwgMHgzMCwgCisgICAgMHg1NywgMHgwNywgMHgyMCwgMHg2ZiwgMHgwNCwgMHhjMiwgMHgyZiwgMHg4MCwgMHgxNiwgMHgzMCwgMHg0NywgMHgwNywgMHgyMCwgMHg2NywgMHgwNCwgMHhjMiwgCisgICAgMHgyZiwgMHg4MCwgMHgwYywgMHgzMCwgMHg0ZiwgMHgwNywgMHgyMCwgMHg1ZiwgMHgwNCwgMHhjMiwgMHgyZiwgMHg4MCwgMHgwMiwgMHhkMiwgMHgyZiwgMHgyMiwgCisgICAgMHg0NCwgMHgzOCwgMHg0MywgMHhlNSwgMHhiZSwgMHhiMCwgMHgwMiwgMHg0MCwgMHgwMSwgMHgyMiwgMHgyMywgMHgwYSwgMHg1YiwgMHg0OSwgMHg1NSwgMHg0MywgCisgICAgMHhkMCwgMHg5OSwgMHg1NCwgMHhkMywgMHgyMiwgMHhhOSwgMHhjNSwgMHg4NywgMHgxMiwgMHg0NCwgMHg0MywgMHg3ZSwgMHgwNCwgMHgwNSwgMHhlMywgMHg3YSwgCisgICAgMHgwNywgMHgwMSwgMHhkNywgMHg3YSwgMHgwNywgMHgwMSwgMHhkOSwgMHg3ZSwgMHgwNCwgMHgwMSwgMHhlMywgMHg3YSwgMHgwNywgMHgwMSwgMHhkZCwgMHg3YSwgCisgICAgMHgwNywgMHgwMSwgMHhkZiwgMHg3ZSwgMHgwNCwgMHg3NCwgMHhhZCwgMHg3YSwgMHgwNSwgMHg2MSwgMHg3NSwgMHhmMSwgMHgwMSwgMHg3NSwgMHhlMSwgMHgxZiwgCisgICAgMHg3NSwgMHhlNCwgMHgwNCwgMHg3NSwgMHhmNCwgMHgwNCwgMHg3NSwgMHhmMSwgMHgwMiwgMHg3NSwgMHhlMSwgMHgwMywgMHg3NSwgMHhlNCwgMHgwNCwgMHg3NSwgCisgICAgMHhmNCwgMHgwNCwgMHg0MywgMHhhMiwgMHgxYywgMHgxMiwgMHg0MCwgMHhlYiwgMHg3ZSwgMHgyMCwgMHgwMCwgMHgxMiwgMHg0MSwgMHg5YSwgMHgwYiwgMHgyMCwgCisgICAgMHhiZSwgMHgyMSwgMHgyZiwgMHg3OCwgMHhmNiwgMHhkMiwgMHhhOCwgMHgyMiwgMHhhOSwgMHhkNSwgMHg4NywgMHgxMiwgMHg0NCwgMHg0MywgMHhkMiwgMHg5MiwgCisgICAgMHhjMiwgMHhhOCwgMHgyMiwgMHg3NSwgMHhhMywgMHgwMCwgMHg1MywgMHhhMiwgMHgwMywgMHg3NSwgMHhjMSwgMHgwMCwgMHg1MywgMHhjMCwgMHgwMywgMHg3ZSwgCisgICAgMHgwMCwgMHgwNSwgMHg3YSwgMHgwMSwgMHhmMSwgMHg0MywgMHhmNCwgMHg4MCwgMHg0MywgMHhlNCwgMHg4MCwgMHhlNSwgMHhmMiwgMHg1NCwgMHg3ZiwgMHg0NCwgCisgICAgMHgwOCwgMHhmNSwgMHhmMiwgMHhlNSwgMHhlMiwgMHg1NCwgMHg3ZiwgMHg0NCwgMHgwOCwgMHhmNSwgMHhlMiwgMHg3NSwgMHhlMSwgMHgxMCwgMHhhNSwgMHhkOCwgCisgICAgMHhlMSwgMHgyMiwgMHhjYSwgMHgwOSwgMHgxMiwgMHgzMCwgMHgyMCwgMHgxMCwgMHgwMSwgMHgxMiwgMHhkNSwgMHg2NywgMHgxZSwgMHg2MywgMHg2OSwgMHgwMSwgCisgICAgMHg3ZSwgMHgwMCwgMHg2YSwgMHgyZSwgMHgwMSwgMHg2OSwgMHhhNSwgMHhlNiwgMHhmNSwgMHg2NywgMHg4MCwgMHgxMiwgMHgyMCwgMHgwMiwgMHgxZSwgMHg3NSwgCisgICAgMHg2OSwgMHgwMCwgMHg4NSwgMHg2YSwgMHg2NywgMHhkMiwgMHgwMiwgMHg3NCwgMHgwMCwgMHg4MCwgMHgwZCwgMHgzMCwgMHgwMiwgMHgwZiwgMHhjMiwgMHgwMiwgCisgICAgMHg3ZSwgMHgwMCwgMHg2YywgMHgyZSwgMHgwMSwgMHg2OSwgMHhhNSwgMHhlNiwgMHg1MywgMHg5MCwgMHhjZiwgMHg0MiwgMHg5MCwgMHhkYSwgMHgwOSwgMHgzMiwgCisgICAgMHhjMCwgMHhkMCwgMHhjMCwgMHhkMSwgMHhjMCwgMHhlMCwgMHhjMCwgMHhmMCwgMHhjYSwgMHgwYiwgMHhjYSwgMHgxYiwgMHhjYSwgMHgyYiwgMHhkMiwgMHgwMSwgCisgICAgMHg3NSwgMHgzMSwgMHg4OSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHgxNCwgMHg4MCwgMHgwMCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwOCwgMHgyMCwgMHhlMCwgCisgICAgMHgwMywgMHgwMiwgMHg0NSwgMHg0ZiwgMHgyMCwgMHg3OCwgMHg1YSwgMHhhNSwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwOCwgMHgyMCwgMHhlMCwgMHgwMywgCisgICAgMHgwMiwgMHg0NSwgMHg2NywgMHgyMCwgMHg3OSwgMHg0YiwgMHhhNSwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwOCwgMHgyMCwgMHhlMCwgMHgwMywgMHgwMiwgCisgICAgMHg0NSwgMHg3ZiwgMHhhNSwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwOCwgMHgyMCwgMHhlMCwgMHgwMywgMHgwMiwgMHg0NSwgMHg5NywgMHgyMCwgMHg3YSwgCisgICAgMHgzMCwgMHhhNSwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwOCwgMHgyMCwgMHhlMCwgMHgwMywgMHgwMiwgMHg0NSwgMHhhZiwgMHhhNSwgMHgwYSwgMHgwOSwgCisgICAgMHhiMSwgMHgwMCwgMHgwOCwgMHgyMCwgMHhlMCwgMHgwMywgMHgwMiwgMHg0NSwgMHhjNywgMHhhNSwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwOCwgMHgyMCwgCisgICAgMHhlMCwgMHgwMywgMHgwMiwgMHg0NSwgMHhkZiwgMHhhNSwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwOCwgMHgyMCwgMHhlMCwgMHgwMywgMHgwMiwgMHg0NSwgCisgICAgMHhmNywgMHgzMCwgMHgwNCwgMHgwYywgMHhjMiwgMHgwNCwgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgCisgICAgMHhkYSwgMHgyYiwgMHhkYSwgMHgxYiwgMHhkYSwgMHgwYiwgMHhkMCwgMHhmMCwgMHhkMCwgMHhlMCwgMHhkMCwgMHhkMSwgMHhkMCwgMHhkMCwgMHgzMiwgMHg3NSwgCisgICAgMHgzMSwgMHg4MCwgMHgxMiwgMHg3YywgMHgxNSwgMHg1NCwgMHgzZSwgMHgwYSwgMHg1YiwgMHg3ZSwgMHg0NCwgMHgwMCwgMHhmZiwgMHg2OSwgMHg1MiwgMHg2MywgCisgICAgMHgyYiwgMHhjYSwgMHgwNiwgMHhjNiwgMHg0NCwgMHg4OSwgMHg1NCwgMHg3NSwgMHgzMSwgMHg4MSwgMHgxMiwgMHg3YywgMHgxNSwgMHg1NCwgMHgzZSwgMHgwYSwgCisgICAgMHg1YiwgMHg3ZSwgMHg0NCwgMHgwMCwgMHhmZiwgMHg2OSwgMHg1MiwgMHg2MywgMHg2YiwgMHhjYSwgMHgwNiwgMHhjNiwgMHg0NCwgMHg4OSwgMHg1NCwgMHg3NSwgCisgICAgMHgzMSwgMHg4MiwgMHgxMiwgMHg3YywgMHgxNSwgMHg1NCwgMHgzZSwgMHgwYSwgMHg1YiwgMHg3ZSwgMHg0NCwgMHgwMCwgMHhmZiwgMHg2OSwgMHg1MiwgMHg2MywgCisgICAgMHhhYiwgMHhjYSwgMHgwNiwgMHhjNiwgMHg0NCwgMHg4OSwgMHg1NCwgMHg3NSwgMHgzMSwgMHg4MywgMHgxMiwgMHg3YywgMHgxNSwgMHg1NCwgMHgzZSwgMHgwYSwgCisgICAgMHg1YiwgMHg3ZSwgMHg0NCwgMHgwMCwgMHhmZiwgMHg2OSwgMHg1MiwgMHg2MywgMHhlYiwgMHhjYSwgMHgwNiwgMHhjNiwgMHg0NCwgMHg4OSwgMHg1NCwgMHg3NSwgCisgICAgMHgzMSwgMHg4NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg1NCwgMHgzZSwgMHgwYSwgMHg1YiwgMHg3ZSwgMHg0NCwgMHgwMCwgMHhmZiwgMHg2OSwgMHg1MiwgMHg2NCwgCisgICAgMHgyYiwgMHhjYSwgMHgwNiwgMHhjNiwgMHg0NCwgMHg4OSwgMHg1NCwgMHg3NSwgMHgzMSwgMHg4NSwgMHgxMiwgMHg3YywgMHgxNSwgMHg1NCwgMHgzZSwgMHgwYSwgCisgICAgMHg1YiwgMHg3ZSwgMHg0NCwgMHgwMCwgMHhmZiwgMHg2OSwgMHg1MiwgMHg2NCwgMHg2YiwgMHhjYSwgMHgwNiwgMHhjNiwgMHg0NCwgMHg4OSwgMHg1NCwgMHg3NSwgCisgICAgMHgzMSwgMHg4NiwgMHgxMiwgMHg3YywgMHgxNSwgMHg1NCwgMHgzZSwgMHgwYSwgMHg1YiwgMHg3ZSwgMHg0NCwgMHgwMCwgMHhmZiwgMHg2OSwgMHg1MiwgMHg2NCwgCisgICAgMHhhYiwgMHhjYSwgMHgwNiwgMHhjNiwgMHg0NCwgMHg4OSwgMHg1NCwgMHg3NSwgMHgzMSwgMHg4NywgMHgxMiwgMHg3YywgMHgxNSwgMHg1NCwgMHgzZSwgMHgwYSwgCisgICAgMHg1YiwgMHg3ZSwgMHg0NCwgMHgwMCwgMHhmZiwgMHg2OSwgMHg1MiwgMHg2NCwgMHhlYiwgMHhjYSwgMHgwNiwgMHhjNiwgMHg0NCwgMHg4OSwgMHg1NCwgMHgxMCwgCisgICAgMHgwOCwgMHgwMSwgMHgyMiwgMHgyMCwgMHgyOCwgMHgwMywgMHhkMiwgMHgwOCwgMHgyMiwgMHg3NSwgMHgzMSwgMHhhMCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgCisgICAgMHgxNCwgMHg4MCwgMHgwMCwgMHg4MCwgMHgwNiwgMHgyMCwgMHgyOCwgMHgwMywgMHhkMiwgMHgwOCwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgCisgICAgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwMywgMHgxMiwgMHg0OSwgMHgzMCwgMHgyMCwgMHhlNiwgMHgwMywgMHhkMiwgMHgwOCwgCisgICAgMHgyMiwgMHgzMCwgMHgzMCwgMHg0OSwgMHhkMiwgMHg3MCwgMHg3ZSwgMHgzNywgMHgwMSwgMHg4ZiwgMHg3ZSwgMHgyNywgMHgwMSwgMHhhZiwgMHg5ZCwgMHgzMiwgCisgICAgMHg0MCwgMHgzMSwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHg0OCwgMHg3YSwgMHgwNSwgMHg0OCwgMHg3YSwgMHgzNywgMHgwMSwgMHg4ZiwgMHg3ZSwgMHgzNywgCisgICAgMHgwMSwgMHg2ZiwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgwZCwgMHhlMiwgMHgzOCwgMHg2OCwgMHg3YSwgMHg0NywgMHgwMSwgMHg2ZiwgCisgICAgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgxMiwgMHg2NSwgMHgyYiwgMHgxMCwgCisgICAgMHg3MCwgMHhjNCwgMHgyMiwgMHhjMiwgMHg3MCwgMHgyZCwgMHgyMywgMHg2OCwgMHg3OCwgMHg2ZCwgMHgzMywgMHg4MCwgMHgxYSwgMHg3ZSwgMHgyNywgMHgwMSwgCisgICAgMHg4ZiwgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg2YSwgMHhiZSwgMHgyNywgMHgwMSwgMHhhZiwgMHgyOCwgMHgwNCwgMHg3ZSwgMHgyNywgMHgwMSwgCisgICAgMHhhZiwgMHg3ZSwgMHgzNywgMHgwMSwgMHg4ZiwgMHg5ZCwgMHgzMiwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHg0OCwgMHg3YSwgMHgwNSwgMHg0OCwgMHg3YSwgCisgICAgMHgzNywgMHgwMSwgMHg4ZiwgMHg3ZSwgMHgzNywgMHgwMSwgMHg2ZiwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgwZCwgMHhlMiwgMHgzOCwgCisgICAgMHgxMywgMHg3YSwgMHg0NywgMHgwMSwgMHg2ZiwgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgCisgICAgMHgxNSwgMHgwMiwgMHg2NSwgMHgyYiwgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgCisgICAgMHg5ZSwgMHg0NCwgMHgwZCwgMHhlMywgMHg5ZCwgMHgyNCwgMHgxMiwgMHg2NSwgMHgyYiwgMHg3ZSwgMHgzNCwgMHgwOSwgMHhlMywgMHg3ZCwgMHgyNCwgMHgyZCwgCisgICAgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHg2ZiwgMHgxMiwgMHg2NSwgMHgyYiwgMHhiZSwgMHgyNSwgMHgyMCwgMHg3OCwgMHgwMywgMHgwMiwgMHg0NiwgMHg3ZiwgCisgICAgMHgyMiwgMHhkMiwgMHgwOCwgMHg3ZSwgMHgwNCwgMHgwOSwgMHhlMywgMHg3YSwgMHgwNywgMHgwMSwgMHg2ZiwgMHg3YSwgMHgwNywgMHgwMSwgMHg3ZiwgMHg3NSwgCisgICAgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3NSwgMHgzMSwgMHgwMCwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgMHg3NSwgMHgzMSwgMHg5MiwgMHgxMiwgCisgICAgMHg3YywgMHgxNSwgMHhkMiwgMHgwNCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHg4MiwgMHhkYSwgMHhiOCwgMHg3OCwgMHg3MCwgCisgICAgMHg3ZSwgMHgzNywgMHgwMSwgMHhlMSwgMHg3ZSwgMHgyNywgMHgwMSwgMHhiZiwgMHgyZSwgMHgyNCwgMHgwMCwgMHgwMiwgMHgyZCwgMHgzMiwgMHhiZSwgMHgzNCwgCisgICAgMHgwNCwgMHgwMCwgMHgzOCwgMHgzYywgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHg0NiwgMHg3YSwgMHgwNSwgMHg0NiwgMHg3YSwgMHgzNywgMHgwMSwgMHhlMSwgCisgICAgMHg3ZSwgMHgzNywgMHgwMSwgMHhkZiwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgwNSwgMHhlMiwgMHgzOCwgMHg0NCwgMHg3YSwgMHg0NywgCisgICAgMHgwMSwgMHhkZiwgMHg3ZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgyNywgMHgwMSwgMHhiZiwgMHgxYiwgMHgzOCwgMHgyMCwgMHgwYiwgMHgzNSwgMHg3YSwgCisgICAgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHhiZSwgMHg1MCwgMHgzOCwgMHg3OCwgMHgwMywgMHgwMiwgMHg2NiwgMHgxNiwgMHgwMiwgMHg2NSwgMHhmYiwgCisgICAgMHg3NSwgMHgzMSwgMHg5OSwgMHgxMiwgMHg3YywgMHgxNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgCisgICAgMHgzMCwgMHgzOCwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxMCwgMHgyMiwgCisgICAgMHg4MCwgMHg3ZCwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg5ZSwgMHg0NCwgMHgwNSwgMHhlMywgMHg5ZCwgMHgyNCwgMHg3ZSwgMHg2NCwgCisgICAgMHgwMCwgMHgwMCwgMHgyZSwgMHg2NywgMHgwMSwgMHhiZiwgMHg5ZSwgMHgyNCwgMHgwMCwgMHgwMiwgMHg0MCwgMHgxNywgMHgxYiwgMHgzOCwgMHg2MCwgMHgwYiwgCisgICAgMHgzNSwgMHgxMiwgMHg2NSwgMHhmYiwgMHg3ZSwgMHgzNCwgMHgwMSwgMHhlMywgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhkZiwgCisgICAgMHgwMiwgMHg2NSwgMHhmYiwgMHg3YSwgMHgzOSwgMHhjMCwgMHg3ZSwgMHgzNCwgMHgwMSwgMHhlMywgMHg3YSwgMHgzOSwgMHhkMCwgMHgwYiwgMHgzNCwgMHgxYiwgCisgICAgMHg0NCwgMHg4MCwgMHhlNSwgMHg5ZCwgMHgzMiwgMHg3YywgMHhiNiwgMHg1NCwgMHgwZiwgMHgyMywgMHgyMywgMHgyMywgMHg0NCwgMHgwMCwgMHg3YSwgMHg2OSwgCisgICAgMHhiMCwgMHg3YSwgMHg3OSwgMHg3MCwgMHgwYiwgMHgzNSwgMHg3NSwgMHgzMSwgMHg5MywgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg3MSwgMHgzMSwgMHgxMiwgCisgICAgMHg3YywgMHgxNSwgMHhiZCwgMHgwNCwgMHg2OCwgMHgyOSwgMHg3YSwgMHgwNywgMHgwMSwgMHhkZiwgMHg3ZSwgMHg0NywgMHgwMSwgMHhlMSwgMHgyZCwgMHg0MywgCisgICAgMHg3YSwgMHg0NywgMHgwMSwgMHhlMSwgMHgyZSwgMHgzNSwgMHg0NiwgMHg3YSwgMHgzNSwgMHg0NiwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgCisgICAgMHhlMCwgMHgxMywgMHgyMiwgMHg3ZSwgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgMHgyYSwgMHg3ZSwgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgMHgyYywgMHg3ZSwgCisgICAgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgMHhkMSwgMHhkMiwgMHgwNCwgMHg3ZSwgMHgwNywgMHgwMSwgMHhlMSwgMHg3ZSwgMHgyNCwgMHgwMywgMHhmZSwgMHg5ZCwgCisgICAgMHgyMCwgMHgyOCwgMHg0MCwgMHg3ZSwgMHgwNywgMHgwMSwgMHhkZiwgMHg3ZSwgMHg0NCwgMHgwNSwgMHhlMywgMHg3ZCwgMHg2MCwgMHgwYiwgMHgwNCwgMHhiZCwgCisgICAgMHgwNCwgMHg2OCwgMHhkMCwgMHg3ZCwgMHg3MCwgMHgwYiwgMHgwNCwgMHhiZCwgMHgwNCwgMHg2OCwgMHhjZSwgMHg3ZCwgMHg1NCwgMHg5ZCwgMHg1MCwgMHhiZCwgCisgICAgMHgyNSwgMHg0MCwgMHgwMiwgMHg3ZCwgMHgyNSwgMHg3ZCwgMHgzMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHgxZiwgMHhiNCwgCisgICAgMHgwMSwgMHgzMSwgMHhkYSwgMHhiOCwgMHg3ZSwgMHgxOSwgMHhiMCwgMHg3YSwgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHgxYiwgMHgyNCwgMHg3OCwgMHhlNywgCisgICAgMHgwMiwgMHg0NywgMHhlMywgMHg3NSwgMHgzMSwgMHg5OSwgMHgxMiwgMHg3YywgMHgxNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgCisgICAgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzOCwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgCisgICAgMHhkMiwgMHgxMCwgMHgyMiwgMHhkYSwgMHhiOCwgMHgzMCwgMHhlMCwgMHhkOCwgMHhiZCwgMHgzMiwgMHg2OCwgMHgwNywgMHhjYSwgMHhiOCwgMHgxMiwgMHg0NywgCisgICAgMHhlMywgMHhkYSwgMHhiOCwgMHgwMiwgMHg0OSwgMHgzMCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHg4OCwgMHg3NSwgMHgzMSwgMHg5MCwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHhmNSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHhhNSwgMHhmYywgMHg1ZSwgMHhiMCwgMHhmMCwgMHhhNSwgMHhmZCwgMHgwOSwgCisgICAgMHhiMSwgMHgwMCwgMHgxOCwgMHg0YywgMHg0YiwgMHg1ZSwgMHhiMCwgMHhmMCwgMHhiYywgMHhiNSwgMHg3OCwgMHhmMSwgMHg1ZSwgMHg0MCwgMHgwZiwgMHg0YywgCisgICAgMHg1NCwgMHg3YywgMHhiNSwgMHg1ZSwgMHg1MCwgMHgwYiwgMHg2OCwgMHgyYSwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgxMCwgMHg2OCwgMHgwNCwgMHhkMiwgCisgICAgMHg2OCwgMHg4MCwgMHgwMiwgMHhjMiwgMHg2OCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2MCwgMHg4MCwgMHgwMiwgCisgICAgMHhjMiwgMHg2MCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1OCwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1OCwgMHgxMiwgCisgICAgMHg0MiwgMHhjOCwgMHgwMiwgMHg2MiwgMHg5MywgMHg3NSwgMHgzMSwgMHg5MSwgMHgxMiwgMHg3YywgMHgxNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHg3YSwgCisgICAgMHhiMSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMCwgMHhlMCwgMHgwOCwgMHhkMiwgMHgwNCwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgwMiwgMHg2MiwgMHg5MywgCisgICAgMHhkMiwgMHgwNCwgMHgzMCwgMHhlMSwgMHgwNiwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgxMiwgMHg2MiwgMHg5MywgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxYywgCisgICAgMHhkYSwgMHhiOCwgMHg2OCwgMHgxMiwgMHg3ZSwgMHhhMCwgMHhjMCwgMHgwOSwgMHg2MSwgMHgwMCwgMHgwMCwgMHgxMiwgMHg2MiwgMHhiNiwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHhkYiwgMHgyMiwgMHgwMiwgMHg0OCwgMHgzNSwgMHg3NSwgMHgzMSwgMHg5NSwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgCisgICAgMHg3NSwgMHgzMSwgMHg5NiwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgMHgxMCwgMHgwOSwgMHgwMSwgMHgyMiwgMHgyMCwgMHgyOSwgMHgwMywgMHhkMiwgMHgwOSwgCisgICAgMHgyMiwgMHg3NSwgMHgzMSwgMHhhMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHgxNCwgMHg4MSwgMHgwMCwgMHg4MCwgMHgwNiwgMHgyMCwgMHgyOSwgMHgwMywgCisgICAgMHhkMiwgMHgwOSwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwMywgCisgICAgMHgxMiwgMHg0YywgMHg4OCwgMHgyMCwgMHhlNiwgMHgwMywgMHhkMiwgMHgwOSwgMHgyMiwgMHgzMCwgMHgzMSwgMHg0OSwgMHhkMiwgMHg3MSwgMHg3ZSwgMHgzNywgCisgICAgMHgwMSwgMHg5MSwgMHg3ZSwgMHgyNywgMHgwMSwgMHhiMSwgMHg5ZCwgMHgzMiwgMHg0MCwgMHgzMSwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHg0YSwgMHg3YSwgCisgICAgMHgwNSwgMHg0YSwgMHg3YSwgMHgzNywgMHgwMSwgMHg5MSwgMHg3ZSwgMHgzNywgMHgwMSwgMHg3MSwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgCisgICAgMHgxMSwgMHhlMiwgMHgzOCwgMHg2OCwgMHg3YSwgMHg0NywgMHgwMSwgMHg3MSwgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgCisgICAgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgxMiwgMHg2NSwgMHgyYiwgMHgxMCwgMHg3MSwgMHhjNCwgMHgyMiwgMHhjMiwgMHg3MSwgMHgyZCwgMHgyMywgMHg2OCwgCisgICAgMHg3OCwgMHg2ZCwgMHgzMywgMHg4MCwgMHgxYSwgMHg3ZSwgMHgyNywgMHgwMSwgMHg5MSwgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg2YSwgMHhiZSwgCisgICAgMHgyNywgMHgwMSwgMHhiMSwgMHgyOCwgMHgwNCwgMHg3ZSwgMHgyNywgMHgwMSwgMHhiMSwgMHg3ZSwgMHgzNywgMHgwMSwgMHg5MSwgMHg5ZCwgMHgzMiwgMHg3ZCwgCisgICAgMHgwMiwgMHgyZSwgMHgwNSwgMHg0YSwgMHg3YSwgMHgwNSwgMHg0YSwgMHg3YSwgMHgzNywgMHgwMSwgMHg5MSwgMHg3ZSwgMHgzNywgMHgwMSwgMHg3MSwgMHg3ZCwgCisgICAgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgxMSwgMHhlMiwgMHgzOCwgMHgxMywgMHg3YSwgMHg0NywgMHgwMSwgMHg3MSwgMHg3NSwgMHgzMSwgMHg5NCwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgwMiwgMHg2NSwgMHgyYiwgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgCisgICAgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg5ZSwgMHg0NCwgMHgxMSwgMHhlMywgMHg5ZCwgMHgyNCwgMHgxMiwgMHg2NSwgCisgICAgMHgyYiwgMHg3ZSwgMHgzNCwgMHgwZCwgMHhlMywgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHg3MSwgMHgxMiwgMHg2NSwgMHgyYiwgCisgICAgMHhiZSwgMHgyNSwgMHgyMCwgMHg3OCwgMHgwMywgMHgwMiwgMHg0OSwgMHhkNywgMHgyMiwgMHhkMiwgMHgwOSwgMHg3ZSwgMHgwNCwgMHgwZCwgMHhlMywgMHg3YSwgCisgICAgMHgwNywgMHgwMSwgMHg3MSwgMHg3YSwgMHgwNywgMHgwMSwgMHg4MSwgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3NSwgMHgzMSwgMHgwMCwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgMHg3NSwgMHgzMSwgMHg5MiwgMHgxMiwgMHg3YywgMHgxNSwgMHhkMiwgMHgwNCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgCisgICAgMHhjYSwgMHhiOCwgMHg1NCwgMHg4MiwgMHhkYSwgMHhiOCwgMHg3OCwgMHg3MCwgMHg3ZSwgMHgzNywgMHgwMSwgMHhlMSwgMHg3ZSwgMHgyNywgMHgwMSwgMHhjMSwgCisgICAgMHgyZSwgMHgyNCwgMHgwMCwgMHgwMiwgMHgyZCwgMHgzMiwgMHhiZSwgMHgzNCwgMHgwNCwgMHgwMCwgMHgzOCwgMHgzYywgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgCisgICAgMHg0NiwgMHg3YSwgMHgwNSwgMHg0NiwgMHg3YSwgMHgzNywgMHgwMSwgMHhlMSwgMHg3ZSwgMHgzNywgMHgwMSwgMHhkZiwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgCisgICAgMHhiZSwgMHg0NCwgMHgwNSwgMHhlMiwgMHgzOCwgMHg0NCwgMHg3YSwgMHg0NywgMHgwMSwgMHhkZiwgMHg3ZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHgyZSwgMHgyNywgCisgICAgMHgwMSwgMHhjMSwgMHgxYiwgMHgzOCwgMHgyMCwgMHgwYiwgMHgzNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHhiZSwgMHg1MCwgMHgzOCwgCisgICAgMHg3OCwgMHgwMywgMHgwMiwgMHg2NiwgMHgxNiwgMHgwMiwgMHg2NSwgMHhmYiwgMHg3NSwgMHgzMSwgMHg5OSwgMHgxMiwgMHg3YywgMHgxNSwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzOSwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgCisgICAgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxMSwgMHgyMiwgMHg4MCwgMHg3ZCwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgCisgICAgMHg5ZSwgMHg0NCwgMHgwNSwgMHhlMywgMHg5ZCwgMHgyNCwgMHg3ZSwgMHg2NCwgMHgwMSwgMHgwMCwgMHgyZSwgMHg2NywgMHgwMSwgMHhjMSwgMHg5ZSwgMHgyNCwgCisgICAgMHgwMCwgMHgwMiwgMHg0MCwgMHgxNywgMHgxYiwgMHgzOCwgMHg2MCwgMHgwYiwgMHgzNSwgMHgxMiwgMHg2NSwgMHhmYiwgMHg3ZSwgMHgzNCwgMHgwMSwgMHhlMywgCisgICAgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhkZiwgMHgwMiwgMHg2NSwgMHhmYiwgMHg3YSwgMHgzOSwgMHhjMCwgMHg3ZSwgMHgzNCwgCisgICAgMHgwMSwgMHhlMywgMHg3YSwgMHgzOSwgMHhkMCwgMHgwYiwgMHgzNCwgMHgxYiwgMHg0NCwgMHg4MCwgMHhlNSwgMHg5ZCwgMHgzMiwgMHg3YywgMHhiNiwgMHg1NCwgCisgICAgMHgwZiwgMHgyMywgMHgyMywgMHgyMywgMHg0NCwgMHgwMSwgMHg3YSwgMHg2OSwgMHhiMCwgMHg3YSwgMHg3OSwgMHg3MCwgMHgwYiwgMHgzNSwgMHg3NSwgMHgzMSwgCisgICAgMHg5MywgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg3MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHhiZCwgMHgwNCwgMHg2OCwgMHgyOSwgMHg3YSwgMHgwNywgCisgICAgMHgwMSwgMHhkZiwgMHg3ZSwgMHg0NywgMHgwMSwgMHhlMSwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhlMSwgMHgyZSwgMHgzNSwgMHg0NiwgMHg3YSwgCisgICAgMHgzNSwgMHg0NiwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHgxMywgMHgyMiwgMHg3ZSwgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgCisgICAgMHgyYSwgMHg3ZSwgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgMHgyYywgMHg3ZSwgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgMHhkMSwgMHhkMiwgMHgwNCwgMHg3ZSwgCisgICAgMHgwNywgMHgwMSwgMHhlMSwgMHg3ZSwgMHgyNCwgMHgwMywgMHhmZSwgMHg5ZCwgMHgyMCwgMHgyOCwgMHg0MCwgMHg3ZSwgMHgwNywgMHgwMSwgMHhkZiwgMHg3ZSwgCisgICAgMHg0NCwgMHgwNSwgMHhlMywgMHg3ZCwgMHg2MCwgMHgwYiwgMHgwNCwgMHhiZCwgMHgwNCwgMHg2OCwgMHhkMCwgMHg3ZCwgMHg3MCwgMHgwYiwgMHgwNCwgMHhiZCwgCisgICAgMHgwNCwgMHg2OCwgMHhjZSwgMHg3ZCwgMHg1NCwgMHg5ZCwgMHg1MCwgMHhiZCwgMHgyNSwgMHg0MCwgMHgwMiwgMHg3ZCwgMHgyNSwgMHg3ZCwgMHgzMiwgMHgwOSwgCisgICAgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHgxZiwgMHhiNCwgMHgwMSwgMHgzMSwgMHhkYSwgMHhiOCwgMHg3ZSwgMHgxOSwgMHhiMCwgMHg3YSwgCisgICAgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHgxYiwgMHgyNCwgMHg3OCwgMHhlNywgMHgwMiwgMHg0YiwgMHgzYiwgMHg3NSwgMHgzMSwgMHg5OSwgMHgxMiwgMHg3YywgCisgICAgMHgxNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzOSwgMHgwYSwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxMSwgMHgyMiwgMHhkYSwgMHhiOCwgMHgzMCwgMHhlMCwgMHhkOCwgCisgICAgMHhiZCwgMHgzMiwgMHg2OCwgMHgwNywgMHhjYSwgMHhiOCwgMHgxMiwgMHg0YiwgMHgzYiwgMHhkYSwgMHhiOCwgMHgwMiwgMHg0YywgMHg4OCwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHg4OCwgMHg3NSwgMHgzMSwgMHg5MCwgMHgxMiwgMHg3YywgMHgxNSwgMHhmNSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgCisgICAgMHhhNSwgMHhmYywgMHg1ZSwgMHhiMCwgMHhmMCwgMHhhNSwgMHhmZCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHg0YywgMHg0YiwgMHg1ZSwgMHhiMCwgMHhmMCwgCisgICAgMHhiYywgMHhiNSwgMHg3OCwgMHhmMSwgMHg1ZSwgMHg0MCwgMHgwZiwgMHg0YywgMHg1NCwgMHg3YywgMHhiNSwgMHg1ZSwgMHg1MCwgMHgwYiwgMHg2OCwgMHgyYSwgCisgICAgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgxMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2OSwgMHg4MCwgMHgwMiwgMHhjMiwgMHg2OSwgMHhhNSwgMHhmZCwgMHg1ZSwgCisgICAgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2MSwgMHg4MCwgMHgwMiwgMHhjMiwgMHg2MSwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgCisgICAgMHgwNCwgMHhkMiwgMHg1OSwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1OSwgMHgxMiwgMHg0MiwgMHhlOSwgMHgwMiwgMHg2MiwgMHg5MywgMHg3NSwgMHgzMSwgMHg5MSwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHg3YSwgMHhiMSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMCwgMHhlMCwgMHgwOCwgCisgICAgMHhkMiwgMHgwNCwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgwMiwgMHg2MiwgMHg5MywgMHhkMiwgMHgwNCwgMHgzMCwgMHhlMSwgMHgwNiwgMHg3ZSwgMHhhMCwgMHg4MCwgCisgICAgMHgxMiwgMHg2MiwgMHg5MywgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxYywgMHhkYSwgMHhiOCwgMHg2OCwgMHgxMiwgMHg3ZSwgMHhhMCwgMHhjMCwgMHgwOSwgCisgICAgMHg2MSwgMHgwMCwgMHgwMCwgMHgxMiwgMHg2MiwgMHhiNiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHhkYiwgMHgyMiwgMHgwMiwgMHg0YiwgCisgICAgMHg4ZCwgMHg3NSwgMHgzMSwgMHg5NSwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgMHg3NSwgMHgzMSwgMHg5NiwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgMHgxMCwgCisgICAgMHgwYSwgMHgwMSwgMHgyMiwgMHgyMCwgMHgyYSwgMHgwMywgMHhkMiwgMHgwYSwgMHgyMiwgMHg3NSwgMHgzMSwgMHhhMiwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgCisgICAgMHgxNCwgMHg4MiwgMHgwMCwgMHg4MCwgMHgwNiwgMHgyMCwgMHgyYSwgMHgwMywgMHhkMiwgMHgwYSwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgCisgICAgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwMywgMHgxMiwgMHg0ZiwgMHhlMCwgMHgyMCwgMHhlNiwgMHgwMywgMHhkMiwgMHgwYSwgCisgICAgMHgyMiwgMHgzMCwgMHgzMiwgMHg0OSwgMHhkMiwgMHg3MiwgMHg3ZSwgMHgzNywgMHgwMSwgMHg5MywgMHg3ZSwgMHgyNywgMHgwMSwgMHhiMywgMHg5ZCwgMHgzMiwgCisgICAgMHg0MCwgMHgzMSwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHg0YywgMHg3YSwgMHgwNSwgMHg0YywgMHg3YSwgMHgzNywgMHgwMSwgMHg5MywgMHg3ZSwgMHgzNywgCisgICAgMHgwMSwgMHg3MywgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgxNSwgMHhlMiwgMHgzOCwgMHg2OCwgMHg3YSwgMHg0NywgMHgwMSwgMHg3MywgCisgICAgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgxMiwgMHg2NSwgMHgyYiwgMHgxMCwgCisgICAgMHg3MiwgMHhjNCwgMHgyMiwgMHhjMiwgMHg3MiwgMHgyZCwgMHgyMywgMHg2OCwgMHg3OCwgMHg2ZCwgMHgzMywgMHg4MCwgMHgxYSwgMHg3ZSwgMHgyNywgMHgwMSwgCisgICAgMHg5MywgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg2YSwgMHhiZSwgMHgyNywgMHgwMSwgMHhiMywgMHgyOCwgMHgwNCwgMHg3ZSwgMHgyNywgMHgwMSwgCisgICAgMHhiMywgMHg3ZSwgMHgzNywgMHgwMSwgMHg5MywgMHg5ZCwgMHgzMiwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHg0YywgMHg3YSwgMHgwNSwgMHg0YywgMHg3YSwgCisgICAgMHgzNywgMHgwMSwgMHg5MywgMHg3ZSwgMHgzNywgMHgwMSwgMHg3MywgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgxNSwgMHhlMiwgMHgzOCwgCisgICAgMHgxMywgMHg3YSwgMHg0NywgMHgwMSwgMHg3MywgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgCisgICAgMHgxNSwgMHgwMiwgMHg2NSwgMHgyYiwgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgCisgICAgMHg5ZSwgMHg0NCwgMHgxNSwgMHhlMywgMHg5ZCwgMHgyNCwgMHgxMiwgMHg2NSwgMHgyYiwgMHg3ZSwgMHgzNCwgMHgxMSwgMHhlMywgMHg3ZCwgMHgyNCwgMHgyZCwgCisgICAgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHg3MywgMHgxMiwgMHg2NSwgMHgyYiwgMHhiZSwgMHgyNSwgMHgyMCwgMHg3OCwgMHgwMywgMHgwMiwgMHg0ZCwgMHgyZiwgCisgICAgMHgyMiwgMHhkMiwgMHgwYSwgMHg3ZSwgMHgwNCwgMHgxMSwgMHhlMywgMHg3YSwgMHgwNywgMHgwMSwgMHg3MywgMHg3YSwgMHgwNywgMHgwMSwgMHg4MywgMHg3NSwgCisgICAgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3NSwgMHgzMSwgMHgwMCwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgMHg3NSwgMHgzMSwgMHg5MiwgMHgxMiwgCisgICAgMHg3YywgMHgxNSwgMHhkMiwgMHgwNCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHg4MiwgMHhkYSwgMHhiOCwgMHg3OCwgMHg3MCwgCisgICAgMHg3ZSwgMHgzNywgMHgwMSwgMHhlMSwgMHg3ZSwgMHgyNywgMHgwMSwgMHhjMywgMHgyZSwgMHgyNCwgMHgwMCwgMHgwMiwgMHgyZCwgMHgzMiwgMHhiZSwgMHgzNCwgCisgICAgMHgwNCwgMHgwMCwgMHgzOCwgMHgzYywgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHg0NiwgMHg3YSwgMHgwNSwgMHg0NiwgMHg3YSwgMHgzNywgMHgwMSwgMHhlMSwgCisgICAgMHg3ZSwgMHgzNywgMHgwMSwgMHhkZiwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgwNSwgMHhlMiwgMHgzOCwgMHg0NCwgMHg3YSwgMHg0NywgCisgICAgMHgwMSwgMHhkZiwgMHg3ZSwgMHgyNCwgMHgwMiwgMHgwMCwgMHgyZSwgMHgyNywgMHgwMSwgMHhjMywgMHgxYiwgMHgzOCwgMHgyMCwgMHgwYiwgMHgzNSwgMHg3YSwgCisgICAgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHhiZSwgMHg1MCwgMHgzOCwgMHg3OCwgMHgwMywgMHgwMiwgMHg2NiwgMHgxNiwgMHgwMiwgMHg2NSwgMHhmYiwgCisgICAgMHg3NSwgMHgzMSwgMHg5OSwgMHgxMiwgMHg3YywgMHgxNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgCisgICAgMHgzMCwgMHgzYSwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxMiwgMHgyMiwgCisgICAgMHg4MCwgMHg3ZCwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg5ZSwgMHg0NCwgMHgwNSwgMHhlMywgMHg5ZCwgMHgyNCwgMHg3ZSwgMHg2NCwgCisgICAgMHgwMiwgMHgwMCwgMHgyZSwgMHg2NywgMHgwMSwgMHhjMywgMHg5ZSwgMHgyNCwgMHgwMCwgMHgwMiwgMHg0MCwgMHgxNywgMHgxYiwgMHgzOCwgMHg2MCwgMHgwYiwgCisgICAgMHgzNSwgMHgxMiwgMHg2NSwgMHhmYiwgMHg3ZSwgMHgzNCwgMHgwMSwgMHhlMywgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhkZiwgCisgICAgMHgwMiwgMHg2NSwgMHhmYiwgMHg3YSwgMHgzOSwgMHhjMCwgMHg3ZSwgMHgzNCwgMHgwMSwgMHhlMywgMHg3YSwgMHgzOSwgMHhkMCwgMHgwYiwgMHgzNCwgMHgxYiwgCisgICAgMHg0NCwgMHg4MCwgMHhlNSwgMHg5ZCwgMHgzMiwgMHg3YywgMHhiNiwgMHg1NCwgMHgwZiwgMHgyMywgMHgyMywgMHgyMywgMHg0NCwgMHgwMiwgMHg3YSwgMHg2OSwgCisgICAgMHhiMCwgMHg3YSwgMHg3OSwgMHg3MCwgMHgwYiwgMHgzNSwgMHg3NSwgMHgzMSwgMHg5MywgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg3MSwgMHgzMSwgMHgxMiwgCisgICAgMHg3YywgMHgxNSwgMHhiZCwgMHgwNCwgMHg2OCwgMHgyOSwgMHg3YSwgMHgwNywgMHgwMSwgMHhkZiwgMHg3ZSwgMHg0NywgMHgwMSwgMHhlMSwgMHgyZCwgMHg0MywgCisgICAgMHg3YSwgMHg0NywgMHgwMSwgMHhlMSwgMHgyZSwgMHgzNSwgMHg0NiwgMHg3YSwgMHgzNSwgMHg0NiwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgCisgICAgMHhlMCwgMHgxMywgMHgyMiwgMHg3ZSwgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgMHgyYSwgMHg3ZSwgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgMHgyYywgMHg3ZSwgCisgICAgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgMHhkMSwgMHhkMiwgMHgwNCwgMHg3ZSwgMHgwNywgMHgwMSwgMHhlMSwgMHg3ZSwgMHgyNCwgMHgwMywgMHhmZSwgMHg5ZCwgCisgICAgMHgyMCwgMHgyOCwgMHg0MCwgMHg3ZSwgMHgwNywgMHgwMSwgMHhkZiwgMHg3ZSwgMHg0NCwgMHgwNSwgMHhlMywgMHg3ZCwgMHg2MCwgMHgwYiwgMHgwNCwgMHhiZCwgCisgICAgMHgwNCwgMHg2OCwgMHhkMCwgMHg3ZCwgMHg3MCwgMHgwYiwgMHgwNCwgMHhiZCwgMHgwNCwgMHg2OCwgMHhjZSwgMHg3ZCwgMHg1NCwgMHg5ZCwgMHg1MCwgMHhiZCwgCisgICAgMHgyNSwgMHg0MCwgMHgwMiwgMHg3ZCwgMHgyNSwgMHg3ZCwgMHgzMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHgxZiwgMHhiNCwgCisgICAgMHgwMSwgMHgzMSwgMHhkYSwgMHhiOCwgMHg3ZSwgMHgxOSwgMHhiMCwgMHg3YSwgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHgxYiwgMHgyNCwgMHg3OCwgMHhlNywgCisgICAgMHgwMiwgMHg0ZSwgMHg5MywgMHg3NSwgMHgzMSwgMHg5OSwgMHgxMiwgMHg3YywgMHgxNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgCisgICAgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzYSwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgCisgICAgMHhkMiwgMHgxMiwgMHgyMiwgMHhkYSwgMHhiOCwgMHgzMCwgMHhlMCwgMHhkOCwgMHhiZCwgMHgzMiwgMHg2OCwgMHgwNywgMHhjYSwgMHhiOCwgMHgxMiwgMHg0ZSwgCisgICAgMHg5MywgMHhkYSwgMHhiOCwgMHgwMiwgMHg0ZiwgMHhlMCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHg4OCwgMHg3NSwgMHgzMSwgMHg5MCwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHhmNSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHhhNSwgMHhmYywgMHg1ZSwgMHhiMCwgMHhmMCwgMHhhNSwgMHhmZCwgMHgwOSwgCisgICAgMHhiMSwgMHgwMCwgMHgxOCwgMHg0YywgMHg0YiwgMHg1ZSwgMHhiMCwgMHhmMCwgMHhiYywgMHhiNSwgMHg3OCwgMHhmMSwgMHg1ZSwgMHg0MCwgMHgwZiwgMHg0YywgCisgICAgMHg1NCwgMHg3YywgMHhiNSwgMHg1ZSwgMHg1MCwgMHgwYiwgMHg2OCwgMHgyYSwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgxMCwgMHg2OCwgMHgwNCwgMHhkMiwgCisgICAgMHg2YSwgMHg4MCwgMHgwMiwgMHhjMiwgMHg2YSwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2MiwgMHg4MCwgMHgwMiwgCisgICAgMHhjMiwgMHg2MiwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1YSwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1YSwgMHgxMiwgCisgICAgMHg0MywgMHgwYSwgMHgwMiwgMHg2MiwgMHg5MywgMHg3NSwgMHgzMSwgMHg5MSwgMHgxMiwgMHg3YywgMHgxNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHg3YSwgCisgICAgMHhiMSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMCwgMHhlMCwgMHgwOCwgMHhkMiwgMHgwNCwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgwMiwgMHg2MiwgMHg5MywgCisgICAgMHhkMiwgMHgwNCwgMHgzMCwgMHhlMSwgMHgwNiwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgxMiwgMHg2MiwgMHg5MywgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxYywgCisgICAgMHhkYSwgMHhiOCwgMHg2OCwgMHgxMiwgMHg3ZSwgMHhhMCwgMHhjMCwgMHgwOSwgMHg2MSwgMHgwMCwgMHgwMCwgMHgxMiwgMHg2MiwgMHhiNiwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHhkYiwgMHgyMiwgMHgwMiwgMHg0ZSwgMHhlNSwgMHg3NSwgMHgzMSwgMHg5NSwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgCisgICAgMHg3NSwgMHgzMSwgMHg5NiwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgMHgxMCwgMHgwYiwgMHgwMSwgMHgyMiwgMHgyMCwgMHgyYiwgMHgwMywgMHhkMiwgMHgwYiwgCisgICAgMHgyMiwgMHg3NSwgMHgzMSwgMHhhMywgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHgxNCwgMHg4MywgMHgwMCwgMHg4MCwgMHgwNiwgMHgyMCwgMHgyYiwgMHgwMywgCisgICAgMHhkMiwgMHgwYiwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwMywgCisgICAgMHgxMiwgMHg1MywgMHgzOCwgMHgyMCwgMHhlNiwgMHgwMywgMHhkMiwgMHgwYiwgMHgyMiwgMHgzMCwgMHgzMywgMHg0OSwgMHhkMiwgMHg3MywgMHg3ZSwgMHgzNywgCisgICAgMHgwMSwgMHg5NSwgMHg3ZSwgMHgyNywgMHgwMSwgMHhiNSwgMHg5ZCwgMHgzMiwgMHg0MCwgMHgzMSwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHg0ZSwgMHg3YSwgCisgICAgMHgwNSwgMHg0ZSwgMHg3YSwgMHgzNywgMHgwMSwgMHg5NSwgMHg3ZSwgMHgzNywgMHgwMSwgMHg3NSwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgCisgICAgMHgxOSwgMHhlMiwgMHgzOCwgMHg2OCwgMHg3YSwgMHg0NywgMHgwMSwgMHg3NSwgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgCisgICAgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgxMiwgMHg2NSwgMHgyYiwgMHgxMCwgMHg3MywgMHhjNCwgMHgyMiwgMHhjMiwgMHg3MywgMHgyZCwgMHgyMywgMHg2OCwgCisgICAgMHg3OCwgMHg2ZCwgMHgzMywgMHg4MCwgMHgxYSwgMHg3ZSwgMHgyNywgMHgwMSwgMHg5NSwgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg2YSwgMHhiZSwgCisgICAgMHgyNywgMHgwMSwgMHhiNSwgMHgyOCwgMHgwNCwgMHg3ZSwgMHgyNywgMHgwMSwgMHhiNSwgMHg3ZSwgMHgzNywgMHgwMSwgMHg5NSwgMHg5ZCwgMHgzMiwgMHg3ZCwgCisgICAgMHgwMiwgMHgyZSwgMHgwNSwgMHg0ZSwgMHg3YSwgMHgwNSwgMHg0ZSwgMHg3YSwgMHgzNywgMHgwMSwgMHg5NSwgMHg3ZSwgMHgzNywgMHgwMSwgMHg3NSwgMHg3ZCwgCisgICAgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgxOSwgMHhlMiwgMHgzOCwgMHgxMywgMHg3YSwgMHg0NywgMHgwMSwgMHg3NSwgMHg3NSwgMHgzMSwgMHg5NCwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgwMiwgMHg2NSwgMHgyYiwgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgCisgICAgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg5ZSwgMHg0NCwgMHgxOSwgMHhlMywgMHg5ZCwgMHgyNCwgMHgxMiwgMHg2NSwgCisgICAgMHgyYiwgMHg3ZSwgMHgzNCwgMHgxNSwgMHhlMywgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHg3NSwgMHgxMiwgMHg2NSwgMHgyYiwgCisgICAgMHhiZSwgMHgyNSwgMHgyMCwgMHg3OCwgMHgwMywgMHgwMiwgMHg1MCwgMHg4NywgMHgyMiwgMHhkMiwgMHgwYiwgMHg3ZSwgMHgwNCwgMHgxNSwgMHhlMywgMHg3YSwgCisgICAgMHgwNywgMHgwMSwgMHg3NSwgMHg3YSwgMHgwNywgMHgwMSwgMHg4NSwgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3NSwgMHgzMSwgMHgwMCwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgMHg3NSwgMHgzMSwgMHg5MiwgMHgxMiwgMHg3YywgMHgxNSwgMHhkMiwgMHgwNCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgCisgICAgMHhjYSwgMHhiOCwgMHg1NCwgMHg4MiwgMHhkYSwgMHhiOCwgMHg3OCwgMHg3MCwgMHg3ZSwgMHgzNywgMHgwMSwgMHhlMSwgMHg3ZSwgMHgyNywgMHgwMSwgMHhjNSwgCisgICAgMHgyZSwgMHgyNCwgMHgwMCwgMHgwMiwgMHgyZCwgMHgzMiwgMHhiZSwgMHgzNCwgMHgwNCwgMHgwMCwgMHgzOCwgMHgzYywgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgCisgICAgMHg0NiwgMHg3YSwgMHgwNSwgMHg0NiwgMHg3YSwgMHgzNywgMHgwMSwgMHhlMSwgMHg3ZSwgMHgzNywgMHgwMSwgMHhkZiwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgCisgICAgMHhiZSwgMHg0NCwgMHgwNSwgMHhlMiwgMHgzOCwgMHg0NCwgMHg3YSwgMHg0NywgMHgwMSwgMHhkZiwgMHg3ZSwgMHgyNCwgMHgwMywgMHgwMCwgMHgyZSwgMHgyNywgCisgICAgMHgwMSwgMHhjNSwgMHgxYiwgMHgzOCwgMHgyMCwgMHgwYiwgMHgzNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHhiZSwgMHg1MCwgMHgzOCwgCisgICAgMHg3OCwgMHgwMywgMHgwMiwgMHg2NiwgMHgxNiwgMHgwMiwgMHg2NSwgMHhmYiwgMHg3NSwgMHgzMSwgMHg5OSwgMHgxMiwgMHg3YywgMHgxNSwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzYiwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgCisgICAgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxMywgMHgyMiwgMHg4MCwgMHg3ZCwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgCisgICAgMHg5ZSwgMHg0NCwgMHgwNSwgMHhlMywgMHg5ZCwgMHgyNCwgMHg3ZSwgMHg2NCwgMHgwMywgMHgwMCwgMHgyZSwgMHg2NywgMHgwMSwgMHhjNSwgMHg5ZSwgMHgyNCwgCisgICAgMHgwMCwgMHgwMiwgMHg0MCwgMHgxNywgMHgxYiwgMHgzOCwgMHg2MCwgMHgwYiwgMHgzNSwgMHgxMiwgMHg2NSwgMHhmYiwgMHg3ZSwgMHgzNCwgMHgwMSwgMHhlMywgCisgICAgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhkZiwgMHgwMiwgMHg2NSwgMHhmYiwgMHg3YSwgMHgzOSwgMHhjMCwgMHg3ZSwgMHgzNCwgCisgICAgMHgwMSwgMHhlMywgMHg3YSwgMHgzOSwgMHhkMCwgMHgwYiwgMHgzNCwgMHgxYiwgMHg0NCwgMHg4MCwgMHhlNSwgMHg5ZCwgMHgzMiwgMHg3YywgMHhiNiwgMHg1NCwgCisgICAgMHgwZiwgMHgyMywgMHgyMywgMHgyMywgMHg0NCwgMHgwMywgMHg3YSwgMHg2OSwgMHhiMCwgMHg3YSwgMHg3OSwgMHg3MCwgMHgwYiwgMHgzNSwgMHg3NSwgMHgzMSwgCisgICAgMHg5MywgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg3MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHhiZCwgMHgwNCwgMHg2OCwgMHgyOSwgMHg3YSwgMHgwNywgCisgICAgMHgwMSwgMHhkZiwgMHg3ZSwgMHg0NywgMHgwMSwgMHhlMSwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhlMSwgMHgyZSwgMHgzNSwgMHg0NiwgMHg3YSwgCisgICAgMHgzNSwgMHg0NiwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHgxMywgMHgyMiwgMHg3ZSwgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgCisgICAgMHgyYSwgMHg3ZSwgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgMHgyYywgMHg3ZSwgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgMHhkMSwgMHhkMiwgMHgwNCwgMHg3ZSwgCisgICAgMHgwNywgMHgwMSwgMHhlMSwgMHg3ZSwgMHgyNCwgMHgwMywgMHhmZSwgMHg5ZCwgMHgyMCwgMHgyOCwgMHg0MCwgMHg3ZSwgMHgwNywgMHgwMSwgMHhkZiwgMHg3ZSwgCisgICAgMHg0NCwgMHgwNSwgMHhlMywgMHg3ZCwgMHg2MCwgMHgwYiwgMHgwNCwgMHhiZCwgMHgwNCwgMHg2OCwgMHhkMCwgMHg3ZCwgMHg3MCwgMHgwYiwgMHgwNCwgMHhiZCwgCisgICAgMHgwNCwgMHg2OCwgMHhjZSwgMHg3ZCwgMHg1NCwgMHg5ZCwgMHg1MCwgMHhiZCwgMHgyNSwgMHg0MCwgMHgwMiwgMHg3ZCwgMHgyNSwgMHg3ZCwgMHgzMiwgMHgwOSwgCisgICAgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHgxZiwgMHhiNCwgMHgwMSwgMHgzMSwgMHhkYSwgMHhiOCwgMHg3ZSwgMHgxOSwgMHhiMCwgMHg3YSwgCisgICAgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHgxYiwgMHgyNCwgMHg3OCwgMHhlNywgMHgwMiwgMHg1MSwgMHhlYiwgMHg3NSwgMHgzMSwgMHg5OSwgMHgxMiwgMHg3YywgCisgICAgMHgxNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzYiwgMHgwYSwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxMywgMHgyMiwgMHhkYSwgMHhiOCwgMHgzMCwgMHhlMCwgMHhkOCwgCisgICAgMHhiZCwgMHgzMiwgMHg2OCwgMHgwNywgMHhjYSwgMHhiOCwgMHgxMiwgMHg1MSwgMHhlYiwgMHhkYSwgMHhiOCwgMHgwMiwgMHg1MywgMHgzOCwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHg4OCwgMHg3NSwgMHgzMSwgMHg5MCwgMHgxMiwgMHg3YywgMHgxNSwgMHhmNSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgCisgICAgMHhhNSwgMHhmYywgMHg1ZSwgMHhiMCwgMHhmMCwgMHhhNSwgMHhmZCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHg0YywgMHg0YiwgMHg1ZSwgMHhiMCwgMHhmMCwgCisgICAgMHhiYywgMHhiNSwgMHg3OCwgMHhmMSwgMHg1ZSwgMHg0MCwgMHgwZiwgMHg0YywgMHg1NCwgMHg3YywgMHhiNSwgMHg1ZSwgMHg1MCwgMHgwYiwgMHg2OCwgMHgyYSwgCisgICAgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgxMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2YiwgMHg4MCwgMHgwMiwgMHhjMiwgMHg2YiwgMHhhNSwgMHhmZCwgMHg1ZSwgCisgICAgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2MywgMHg4MCwgMHgwMiwgMHhjMiwgMHg2MywgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgCisgICAgMHgwNCwgMHhkMiwgMHg1YiwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1YiwgMHgxMiwgMHg0MywgMHgyYiwgMHgwMiwgMHg2MiwgMHg5MywgMHg3NSwgMHgzMSwgMHg5MSwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHg3YSwgMHhiMSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMCwgMHhlMCwgMHgwOCwgCisgICAgMHhkMiwgMHgwNCwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgwMiwgMHg2MiwgMHg5MywgMHhkMiwgMHgwNCwgMHgzMCwgMHhlMSwgMHgwNiwgMHg3ZSwgMHhhMCwgMHg4MCwgCisgICAgMHgxMiwgMHg2MiwgMHg5MywgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxYywgMHhkYSwgMHhiOCwgMHg2OCwgMHgxMiwgMHg3ZSwgMHhhMCwgMHhjMCwgMHgwOSwgCisgICAgMHg2MSwgMHgwMCwgMHgwMCwgMHgxMiwgMHg2MiwgMHhiNiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHhkYiwgMHgyMiwgMHgwMiwgMHg1MiwgCisgICAgMHgzZCwgMHg3NSwgMHgzMSwgMHg5NSwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgMHg3NSwgMHgzMSwgMHg5NiwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgMHgxMCwgCisgICAgMHgwYywgMHgwMSwgMHgyMiwgMHgyMCwgMHgyYywgMHgwMywgMHhkMiwgMHgwYywgMHgyMiwgMHg3NSwgMHgzMSwgMHhhNCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgCisgICAgMHgxNCwgMHg4NCwgMHgwMCwgMHg4MCwgMHgwNiwgMHgyMCwgMHgyYywgMHgwMywgMHhkMiwgMHgwYywgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgCisgICAgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwMywgMHgxMiwgMHg1NiwgMHg5MCwgMHgyMCwgMHhlNiwgMHgwMywgMHhkMiwgMHgwYywgCisgICAgMHgyMiwgMHgzMCwgMHgzNCwgMHg0OSwgMHhkMiwgMHg3NCwgMHg3ZSwgMHgzNywgMHgwMSwgMHg5NywgMHg3ZSwgMHgyNywgMHgwMSwgMHhiNywgMHg5ZCwgMHgzMiwgCisgICAgMHg0MCwgMHgzMSwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHg1MCwgMHg3YSwgMHgwNSwgMHg1MCwgMHg3YSwgMHgzNywgMHgwMSwgMHg5NywgMHg3ZSwgMHgzNywgCisgICAgMHgwMSwgMHg3NywgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgxZCwgMHhlMiwgMHgzOCwgMHg2OCwgMHg3YSwgMHg0NywgMHgwMSwgMHg3NywgCisgICAgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgxMiwgMHg2NSwgMHgyYiwgMHgxMCwgCisgICAgMHg3NCwgMHhjNCwgMHgyMiwgMHhjMiwgMHg3NCwgMHgyZCwgMHgyMywgMHg2OCwgMHg3OCwgMHg2ZCwgMHgzMywgMHg4MCwgMHgxYSwgMHg3ZSwgMHgyNywgMHgwMSwgCisgICAgMHg5NywgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg2YSwgMHhiZSwgMHgyNywgMHgwMSwgMHhiNywgMHgyOCwgMHgwNCwgMHg3ZSwgMHgyNywgMHgwMSwgCisgICAgMHhiNywgMHg3ZSwgMHgzNywgMHgwMSwgMHg5NywgMHg5ZCwgMHgzMiwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHg1MCwgMHg3YSwgMHgwNSwgMHg1MCwgMHg3YSwgCisgICAgMHgzNywgMHgwMSwgMHg5NywgMHg3ZSwgMHgzNywgMHgwMSwgMHg3NywgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgxZCwgMHhlMiwgMHgzOCwgCisgICAgMHgxMywgMHg3YSwgMHg0NywgMHgwMSwgMHg3NywgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgCisgICAgMHgxNSwgMHgwMiwgMHg2NSwgMHgyYiwgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgCisgICAgMHg5ZSwgMHg0NCwgMHgxZCwgMHhlMywgMHg5ZCwgMHgyNCwgMHgxMiwgMHg2NSwgMHgyYiwgMHg3ZSwgMHgzNCwgMHgxOSwgMHhlMywgMHg3ZCwgMHgyNCwgMHgyZCwgCisgICAgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHg3NywgMHgxMiwgMHg2NSwgMHgyYiwgMHhiZSwgMHgyNSwgMHgyMCwgMHg3OCwgMHgwMywgMHgwMiwgMHg1MywgMHhkZiwgCisgICAgMHgyMiwgMHhkMiwgMHgwYywgMHg3ZSwgMHgwNCwgMHgxOSwgMHhlMywgMHg3YSwgMHgwNywgMHgwMSwgMHg3NywgMHg3YSwgMHgwNywgMHgwMSwgMHg4NywgMHg3NSwgCisgICAgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3NSwgMHgzMSwgMHgwMCwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgMHg3NSwgMHgzMSwgMHg5MiwgMHgxMiwgCisgICAgMHg3YywgMHgxNSwgMHhkMiwgMHgwNCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHg4MiwgMHhkYSwgMHhiOCwgMHg3OCwgMHg3MCwgCisgICAgMHg3ZSwgMHgzNywgMHgwMSwgMHhlMSwgMHg3ZSwgMHgyNywgMHgwMSwgMHhjNywgMHgyZSwgMHgyNCwgMHgwMCwgMHgwMiwgMHgyZCwgMHgzMiwgMHhiZSwgMHgzNCwgCisgICAgMHgwNCwgMHgwMCwgMHgzOCwgMHgzYywgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHg0NiwgMHg3YSwgMHgwNSwgMHg0NiwgMHg3YSwgMHgzNywgMHgwMSwgMHhlMSwgCisgICAgMHg3ZSwgMHgzNywgMHgwMSwgMHhkZiwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgwNSwgMHhlMiwgMHgzOCwgMHg0NCwgMHg3YSwgMHg0NywgCisgICAgMHgwMSwgMHhkZiwgMHg3ZSwgMHgyNCwgMHgwNCwgMHgwMCwgMHgyZSwgMHgyNywgMHgwMSwgMHhjNywgMHgxYiwgMHgzOCwgMHgyMCwgMHgwYiwgMHgzNSwgMHg3YSwgCisgICAgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHhiZSwgMHg1MCwgMHgzOCwgMHg3OCwgMHgwMywgMHgwMiwgMHg2NiwgMHgxNiwgMHgwMiwgMHg2NSwgMHhmYiwgCisgICAgMHg3NSwgMHgzMSwgMHg5OSwgMHgxMiwgMHg3YywgMHgxNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgCisgICAgMHgzMCwgMHgzYywgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxNCwgMHgyMiwgCisgICAgMHg4MCwgMHg3ZCwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg5ZSwgMHg0NCwgMHgwNSwgMHhlMywgMHg5ZCwgMHgyNCwgMHg3ZSwgMHg2NCwgCisgICAgMHgwNCwgMHgwMCwgMHgyZSwgMHg2NywgMHgwMSwgMHhjNywgMHg5ZSwgMHgyNCwgMHgwMCwgMHgwMiwgMHg0MCwgMHgxNywgMHgxYiwgMHgzOCwgMHg2MCwgMHgwYiwgCisgICAgMHgzNSwgMHgxMiwgMHg2NSwgMHhmYiwgMHg3ZSwgMHgzNCwgMHgwMSwgMHhlMywgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhkZiwgCisgICAgMHgwMiwgMHg2NSwgMHhmYiwgMHg3YSwgMHgzOSwgMHhjMCwgMHg3ZSwgMHgzNCwgMHgwMSwgMHhlMywgMHg3YSwgMHgzOSwgMHhkMCwgMHgwYiwgMHgzNCwgMHgxYiwgCisgICAgMHg0NCwgMHg4MCwgMHhlNSwgMHg5ZCwgMHgzMiwgMHg3YywgMHhiNiwgMHg1NCwgMHgwZiwgMHgyMywgMHgyMywgMHgyMywgMHg0NCwgMHgwNCwgMHg3YSwgMHg2OSwgCisgICAgMHhiMCwgMHg3YSwgMHg3OSwgMHg3MCwgMHgwYiwgMHgzNSwgMHg3NSwgMHgzMSwgMHg5MywgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg3MSwgMHgzMSwgMHgxMiwgCisgICAgMHg3YywgMHgxNSwgMHhiZCwgMHgwNCwgMHg2OCwgMHgyOSwgMHg3YSwgMHgwNywgMHgwMSwgMHhkZiwgMHg3ZSwgMHg0NywgMHgwMSwgMHhlMSwgMHgyZCwgMHg0MywgCisgICAgMHg3YSwgMHg0NywgMHgwMSwgMHhlMSwgMHgyZSwgMHgzNSwgMHg0NiwgMHg3YSwgMHgzNSwgMHg0NiwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgCisgICAgMHhlMCwgMHgxMywgMHgyMiwgMHg3ZSwgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgMHgyYSwgMHg3ZSwgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgMHgyYywgMHg3ZSwgCisgICAgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgMHhkMSwgMHhkMiwgMHgwNCwgMHg3ZSwgMHgwNywgMHgwMSwgMHhlMSwgMHg3ZSwgMHgyNCwgMHgwMywgMHhmZSwgMHg5ZCwgCisgICAgMHgyMCwgMHgyOCwgMHg0MCwgMHg3ZSwgMHgwNywgMHgwMSwgMHhkZiwgMHg3ZSwgMHg0NCwgMHgwNSwgMHhlMywgMHg3ZCwgMHg2MCwgMHgwYiwgMHgwNCwgMHhiZCwgCisgICAgMHgwNCwgMHg2OCwgMHhkMCwgMHg3ZCwgMHg3MCwgMHgwYiwgMHgwNCwgMHhiZCwgMHgwNCwgMHg2OCwgMHhjZSwgMHg3ZCwgMHg1NCwgMHg5ZCwgMHg1MCwgMHhiZCwgCisgICAgMHgyNSwgMHg0MCwgMHgwMiwgMHg3ZCwgMHgyNSwgMHg3ZCwgMHgzMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHgxZiwgMHhiNCwgCisgICAgMHgwMSwgMHgzMSwgMHhkYSwgMHhiOCwgMHg3ZSwgMHgxOSwgMHhiMCwgMHg3YSwgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHgxYiwgMHgyNCwgMHg3OCwgMHhlNywgCisgICAgMHgwMiwgMHg1NSwgMHg0MywgMHg3NSwgMHgzMSwgMHg5OSwgMHgxMiwgMHg3YywgMHgxNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgCisgICAgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzYywgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgCisgICAgMHhkMiwgMHgxNCwgMHgyMiwgMHhkYSwgMHhiOCwgMHgzMCwgMHhlMCwgMHhkOCwgMHhiZCwgMHgzMiwgMHg2OCwgMHgwNywgMHhjYSwgMHhiOCwgMHgxMiwgMHg1NSwgCisgICAgMHg0MywgMHhkYSwgMHhiOCwgMHgwMiwgMHg1NiwgMHg5MCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHg4OCwgMHg3NSwgMHgzMSwgMHg5MCwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHhmNSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHhhNSwgMHhmYywgMHg1ZSwgMHhiMCwgMHhmMCwgMHhhNSwgMHhmZCwgMHgwOSwgCisgICAgMHhiMSwgMHgwMCwgMHgxOCwgMHg0YywgMHg0YiwgMHg1ZSwgMHhiMCwgMHhmMCwgMHhiYywgMHhiNSwgMHg3OCwgMHhmMSwgMHg1ZSwgMHg0MCwgMHgwZiwgMHg0YywgCisgICAgMHg1NCwgMHg3YywgMHhiNSwgMHg1ZSwgMHg1MCwgMHgwYiwgMHg2OCwgMHgyYSwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgxMCwgMHg2OCwgMHgwNCwgMHhkMiwgCisgICAgMHg2YywgMHg4MCwgMHgwMiwgMHhjMiwgMHg2YywgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2NCwgMHg4MCwgMHgwMiwgCisgICAgMHhjMiwgMHg2NCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1YywgMHg4MCwgMHgwMiwgMHhjMiwgMHg1YywgMHgxMiwgCisgICAgMHg0MywgMHg0YywgMHgwMiwgMHg2MiwgMHg5MywgMHg3NSwgMHgzMSwgMHg5MSwgMHgxMiwgMHg3YywgMHgxNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHg3YSwgCisgICAgMHhiMSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMCwgMHhlMCwgMHgwOCwgMHhkMiwgMHgwNCwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgwMiwgMHg2MiwgMHg5MywgCisgICAgMHhkMiwgMHgwNCwgMHgzMCwgMHhlMSwgMHgwNiwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgxMiwgMHg2MiwgMHg5MywgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxYywgCisgICAgMHhkYSwgMHhiOCwgMHg2OCwgMHgxMiwgMHg3ZSwgMHhhMCwgMHhjMCwgMHgwOSwgMHg2MSwgMHgwMCwgMHgwMCwgMHgxMiwgMHg2MiwgMHhiNiwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHhkYiwgMHgyMiwgMHgwMiwgMHg1NSwgMHg5NSwgMHg3NSwgMHgzMSwgMHg5NSwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgCisgICAgMHg3NSwgMHgzMSwgMHg5NiwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgMHgxMCwgMHgwZCwgMHgwMSwgMHgyMiwgMHgyMCwgMHgyZCwgMHgwMywgMHhkMiwgMHgwZCwgCisgICAgMHgyMiwgMHg3NSwgMHgzMSwgMHhhNSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHgxNCwgMHg4NSwgMHgwMCwgMHg4MCwgMHgwNiwgMHgyMCwgMHgyZCwgMHgwMywgCisgICAgMHhkMiwgMHgwZCwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwMywgCisgICAgMHgxMiwgMHg1OSwgMHhlOCwgMHgyMCwgMHhlNiwgMHgwMywgMHhkMiwgMHgwZCwgMHgyMiwgMHgzMCwgMHgzNSwgMHg0OSwgMHhkMiwgMHg3NSwgMHg3ZSwgMHgzNywgCisgICAgMHgwMSwgMHg5OSwgMHg3ZSwgMHgyNywgMHgwMSwgMHhiOSwgMHg5ZCwgMHgzMiwgMHg0MCwgMHgzMSwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHg1MiwgMHg3YSwgCisgICAgMHgwNSwgMHg1MiwgMHg3YSwgMHgzNywgMHgwMSwgMHg5OSwgMHg3ZSwgMHgzNywgMHgwMSwgMHg3OSwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgCisgICAgMHgyMSwgMHhlMiwgMHgzOCwgMHg2OCwgMHg3YSwgMHg0NywgMHgwMSwgMHg3OSwgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgCisgICAgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgxMiwgMHg2NSwgMHgyYiwgMHgxMCwgMHg3NSwgMHhjNCwgMHgyMiwgMHhjMiwgMHg3NSwgMHgyZCwgMHgyMywgMHg2OCwgCisgICAgMHg3OCwgMHg2ZCwgMHgzMywgMHg4MCwgMHgxYSwgMHg3ZSwgMHgyNywgMHgwMSwgMHg5OSwgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg2YSwgMHhiZSwgCisgICAgMHgyNywgMHgwMSwgMHhiOSwgMHgyOCwgMHgwNCwgMHg3ZSwgMHgyNywgMHgwMSwgMHhiOSwgMHg3ZSwgMHgzNywgMHgwMSwgMHg5OSwgMHg5ZCwgMHgzMiwgMHg3ZCwgCisgICAgMHgwMiwgMHgyZSwgMHgwNSwgMHg1MiwgMHg3YSwgMHgwNSwgMHg1MiwgMHg3YSwgMHgzNywgMHgwMSwgMHg5OSwgMHg3ZSwgMHgzNywgMHgwMSwgMHg3OSwgMHg3ZCwgCisgICAgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgyMSwgMHhlMiwgMHgzOCwgMHgxMywgMHg3YSwgMHg0NywgMHgwMSwgMHg3OSwgMHg3NSwgMHgzMSwgMHg5NCwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgwMiwgMHg2NSwgMHgyYiwgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgCisgICAgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg5ZSwgMHg0NCwgMHgyMSwgMHhlMywgMHg5ZCwgMHgyNCwgMHgxMiwgMHg2NSwgCisgICAgMHgyYiwgMHg3ZSwgMHgzNCwgMHgxZCwgMHhlMywgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHg3OSwgMHgxMiwgMHg2NSwgMHgyYiwgCisgICAgMHhiZSwgMHgyNSwgMHgyMCwgMHg3OCwgMHgwMywgMHgwMiwgMHg1NywgMHgzNywgMHgyMiwgMHhkMiwgMHgwZCwgMHg3ZSwgMHgwNCwgMHgxZCwgMHhlMywgMHg3YSwgCisgICAgMHgwNywgMHgwMSwgMHg3OSwgMHg3YSwgMHgwNywgMHgwMSwgMHg4OSwgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3NSwgMHgzMSwgMHgwMCwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgMHg3NSwgMHgzMSwgMHg5MiwgMHgxMiwgMHg3YywgMHgxNSwgMHhkMiwgMHgwNCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgCisgICAgMHhjYSwgMHhiOCwgMHg1NCwgMHg4MiwgMHhkYSwgMHhiOCwgMHg3OCwgMHg3MCwgMHg3ZSwgMHgzNywgMHgwMSwgMHhlMSwgMHg3ZSwgMHgyNywgMHgwMSwgMHhjOSwgCisgICAgMHgyZSwgMHgyNCwgMHgwMCwgMHgwMiwgMHgyZCwgMHgzMiwgMHhiZSwgMHgzNCwgMHgwNCwgMHgwMCwgMHgzOCwgMHgzYywgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgCisgICAgMHg0NiwgMHg3YSwgMHgwNSwgMHg0NiwgMHg3YSwgMHgzNywgMHgwMSwgMHhlMSwgMHg3ZSwgMHgzNywgMHgwMSwgMHhkZiwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgCisgICAgMHhiZSwgMHg0NCwgMHgwNSwgMHhlMiwgMHgzOCwgMHg0NCwgMHg3YSwgMHg0NywgMHgwMSwgMHhkZiwgMHg3ZSwgMHgyNCwgMHgwNSwgMHgwMCwgMHgyZSwgMHgyNywgCisgICAgMHgwMSwgMHhjOSwgMHgxYiwgMHgzOCwgMHgyMCwgMHgwYiwgMHgzNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHhiZSwgMHg1MCwgMHgzOCwgCisgICAgMHg3OCwgMHgwMywgMHgwMiwgMHg2NiwgMHgxNiwgMHgwMiwgMHg2NSwgMHhmYiwgMHg3NSwgMHgzMSwgMHg5OSwgMHgxMiwgMHg3YywgMHgxNSwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzZCwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgCisgICAgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxNSwgMHgyMiwgMHg4MCwgMHg3ZCwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgCisgICAgMHg5ZSwgMHg0NCwgMHgwNSwgMHhlMywgMHg5ZCwgMHgyNCwgMHg3ZSwgMHg2NCwgMHgwNSwgMHgwMCwgMHgyZSwgMHg2NywgMHgwMSwgMHhjOSwgMHg5ZSwgMHgyNCwgCisgICAgMHgwMCwgMHgwMiwgMHg0MCwgMHgxNywgMHgxYiwgMHgzOCwgMHg2MCwgMHgwYiwgMHgzNSwgMHgxMiwgMHg2NSwgMHhmYiwgMHg3ZSwgMHgzNCwgMHgwMSwgMHhlMywgCisgICAgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhkZiwgMHgwMiwgMHg2NSwgMHhmYiwgMHg3YSwgMHgzOSwgMHhjMCwgMHg3ZSwgMHgzNCwgCisgICAgMHgwMSwgMHhlMywgMHg3YSwgMHgzOSwgMHhkMCwgMHgwYiwgMHgzNCwgMHgxYiwgMHg0NCwgMHg4MCwgMHhlNSwgMHg5ZCwgMHgzMiwgMHg3YywgMHhiNiwgMHg1NCwgCisgICAgMHgwZiwgMHgyMywgMHgyMywgMHgyMywgMHg0NCwgMHgwNSwgMHg3YSwgMHg2OSwgMHhiMCwgMHg3YSwgMHg3OSwgMHg3MCwgMHgwYiwgMHgzNSwgMHg3NSwgMHgzMSwgCisgICAgMHg5MywgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg3MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHhiZCwgMHgwNCwgMHg2OCwgMHgyOSwgMHg3YSwgMHgwNywgCisgICAgMHgwMSwgMHhkZiwgMHg3ZSwgMHg0NywgMHgwMSwgMHhlMSwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhlMSwgMHgyZSwgMHgzNSwgMHg0NiwgMHg3YSwgCisgICAgMHgzNSwgMHg0NiwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHgxMywgMHgyMiwgMHg3ZSwgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgCisgICAgMHgyYSwgMHg3ZSwgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgMHgyYywgMHg3ZSwgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgMHhkMSwgMHhkMiwgMHgwNCwgMHg3ZSwgCisgICAgMHgwNywgMHgwMSwgMHhlMSwgMHg3ZSwgMHgyNCwgMHgwMywgMHhmZSwgMHg5ZCwgMHgyMCwgMHgyOCwgMHg0MCwgMHg3ZSwgMHgwNywgMHgwMSwgMHhkZiwgMHg3ZSwgCisgICAgMHg0NCwgMHgwNSwgMHhlMywgMHg3ZCwgMHg2MCwgMHgwYiwgMHgwNCwgMHhiZCwgMHgwNCwgMHg2OCwgMHhkMCwgMHg3ZCwgMHg3MCwgMHgwYiwgMHgwNCwgMHhiZCwgCisgICAgMHgwNCwgMHg2OCwgMHhjZSwgMHg3ZCwgMHg1NCwgMHg5ZCwgMHg1MCwgMHhiZCwgMHgyNSwgMHg0MCwgMHgwMiwgMHg3ZCwgMHgyNSwgMHg3ZCwgMHgzMiwgMHgwOSwgCisgICAgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHgxZiwgMHhiNCwgMHgwMSwgMHgzMSwgMHhkYSwgMHhiOCwgMHg3ZSwgMHgxOSwgMHhiMCwgMHg3YSwgCisgICAgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHgxYiwgMHgyNCwgMHg3OCwgMHhlNywgMHgwMiwgMHg1OCwgMHg5YiwgMHg3NSwgMHgzMSwgMHg5OSwgMHgxMiwgMHg3YywgCisgICAgMHgxNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzZCwgMHgwYSwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxNSwgMHgyMiwgMHhkYSwgMHhiOCwgMHgzMCwgMHhlMCwgMHhkOCwgCisgICAgMHhiZCwgMHgzMiwgMHg2OCwgMHgwNywgMHhjYSwgMHhiOCwgMHgxMiwgMHg1OCwgMHg5YiwgMHhkYSwgMHhiOCwgMHgwMiwgMHg1OSwgMHhlOCwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHg4OCwgMHg3NSwgMHgzMSwgMHg5MCwgMHgxMiwgMHg3YywgMHgxNSwgMHhmNSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgCisgICAgMHhhNSwgMHhmYywgMHg1ZSwgMHhiMCwgMHhmMCwgMHhhNSwgMHhmZCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHg0YywgMHg0YiwgMHg1ZSwgMHhiMCwgMHhmMCwgCisgICAgMHhiYywgMHhiNSwgMHg3OCwgMHhmMSwgMHg1ZSwgMHg0MCwgMHgwZiwgMHg0YywgMHg1NCwgMHg3YywgMHhiNSwgMHg1ZSwgMHg1MCwgMHgwYiwgMHg2OCwgMHgyYSwgCisgICAgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgxMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2ZCwgMHg4MCwgMHgwMiwgMHhjMiwgMHg2ZCwgMHhhNSwgMHhmZCwgMHg1ZSwgCisgICAgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2NSwgMHg4MCwgMHgwMiwgMHhjMiwgMHg2NSwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgCisgICAgMHgwNCwgMHhkMiwgMHg1ZCwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1ZCwgMHgxMiwgMHg0MywgMHg2ZCwgMHgwMiwgMHg2MiwgMHg5MywgMHg3NSwgMHgzMSwgMHg5MSwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHg3YSwgMHhiMSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMCwgMHhlMCwgMHgwOCwgCisgICAgMHhkMiwgMHgwNCwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgwMiwgMHg2MiwgMHg5MywgMHhkMiwgMHgwNCwgMHgzMCwgMHhlMSwgMHgwNiwgMHg3ZSwgMHhhMCwgMHg4MCwgCisgICAgMHgxMiwgMHg2MiwgMHg5MywgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxYywgMHhkYSwgMHhiOCwgMHg2OCwgMHgxMiwgMHg3ZSwgMHhhMCwgMHhjMCwgMHgwOSwgCisgICAgMHg2MSwgMHgwMCwgMHgwMCwgMHgxMiwgMHg2MiwgMHhiNiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHhkYiwgMHgyMiwgMHgwMiwgMHg1OCwgCisgICAgMHhlZCwgMHg3NSwgMHgzMSwgMHg5NSwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgMHg3NSwgMHgzMSwgMHg5NiwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgMHgxMCwgCisgICAgMHgwZSwgMHgwMSwgMHgyMiwgMHgyMCwgMHgyZSwgMHgwMywgMHhkMiwgMHgwZSwgMHgyMiwgMHg3NSwgMHgzMSwgMHhhNiwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgCisgICAgMHgxNCwgMHg4NiwgMHgwMCwgMHg4MCwgMHgwNiwgMHgyMCwgMHgyZSwgMHgwMywgMHhkMiwgMHgwZSwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgCisgICAgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwMywgMHgxMiwgMHg1ZCwgMHg0MCwgMHgyMCwgMHhlNiwgMHgwMywgMHhkMiwgMHgwZSwgCisgICAgMHgyMiwgMHgzMCwgMHgzNiwgMHg0OSwgMHhkMiwgMHg3NiwgMHg3ZSwgMHgzNywgMHgwMSwgMHg5YiwgMHg3ZSwgMHgyNywgMHgwMSwgMHhiYiwgMHg5ZCwgMHgzMiwgCisgICAgMHg0MCwgMHgzMSwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHg1NCwgMHg3YSwgMHgwNSwgMHg1NCwgMHg3YSwgMHgzNywgMHgwMSwgMHg5YiwgMHg3ZSwgMHgzNywgCisgICAgMHgwMSwgMHg3YiwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgyNSwgMHhlMiwgMHgzOCwgMHg2OCwgMHg3YSwgMHg0NywgMHgwMSwgMHg3YiwgCisgICAgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgxMiwgMHg2NSwgMHgyYiwgMHgxMCwgCisgICAgMHg3NiwgMHhjNCwgMHgyMiwgMHhjMiwgMHg3NiwgMHgyZCwgMHgyMywgMHg2OCwgMHg3OCwgMHg2ZCwgMHgzMywgMHg4MCwgMHgxYSwgMHg3ZSwgMHgyNywgMHgwMSwgCisgICAgMHg5YiwgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg2YSwgMHhiZSwgMHgyNywgMHgwMSwgMHhiYiwgMHgyOCwgMHgwNCwgMHg3ZSwgMHgyNywgMHgwMSwgCisgICAgMHhiYiwgMHg3ZSwgMHgzNywgMHgwMSwgMHg5YiwgMHg5ZCwgMHgzMiwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHg1NCwgMHg3YSwgMHgwNSwgMHg1NCwgMHg3YSwgCisgICAgMHgzNywgMHgwMSwgMHg5YiwgMHg3ZSwgMHgzNywgMHgwMSwgMHg3YiwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgyNSwgMHhlMiwgMHgzOCwgCisgICAgMHgxMywgMHg3YSwgMHg0NywgMHgwMSwgMHg3YiwgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgCisgICAgMHgxNSwgMHgwMiwgMHg2NSwgMHgyYiwgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgCisgICAgMHg5ZSwgMHg0NCwgMHgyNSwgMHhlMywgMHg5ZCwgMHgyNCwgMHgxMiwgMHg2NSwgMHgyYiwgMHg3ZSwgMHgzNCwgMHgyMSwgMHhlMywgMHg3ZCwgMHgyNCwgMHgyZCwgCisgICAgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHg3YiwgMHgxMiwgMHg2NSwgMHgyYiwgMHhiZSwgMHgyNSwgMHgyMCwgMHg3OCwgMHgwMywgMHgwMiwgMHg1YSwgMHg4ZiwgCisgICAgMHgyMiwgMHhkMiwgMHgwZSwgMHg3ZSwgMHgwNCwgMHgyMSwgMHhlMywgMHg3YSwgMHgwNywgMHgwMSwgMHg3YiwgMHg3YSwgMHgwNywgMHgwMSwgMHg4YiwgMHg3NSwgCisgICAgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3NSwgMHgzMSwgMHgwMCwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgMHg3NSwgMHgzMSwgMHg5MiwgMHgxMiwgCisgICAgMHg3YywgMHgxNSwgMHhkMiwgMHgwNCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHg4MiwgMHhkYSwgMHhiOCwgMHg3OCwgMHg3MCwgCisgICAgMHg3ZSwgMHgzNywgMHgwMSwgMHhlMSwgMHg3ZSwgMHgyNywgMHgwMSwgMHhjYiwgMHgyZSwgMHgyNCwgMHgwMCwgMHgwMiwgMHgyZCwgMHgzMiwgMHhiZSwgMHgzNCwgCisgICAgMHgwNCwgMHgwMCwgMHgzOCwgMHgzYywgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHg0NiwgMHg3YSwgMHgwNSwgMHg0NiwgMHg3YSwgMHgzNywgMHgwMSwgMHhlMSwgCisgICAgMHg3ZSwgMHgzNywgMHgwMSwgMHhkZiwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgwNSwgMHhlMiwgMHgzOCwgMHg0NCwgMHg3YSwgMHg0NywgCisgICAgMHgwMSwgMHhkZiwgMHg3ZSwgMHgyNCwgMHgwNiwgMHgwMCwgMHgyZSwgMHgyNywgMHgwMSwgMHhjYiwgMHgxYiwgMHgzOCwgMHgyMCwgMHgwYiwgMHgzNSwgMHg3YSwgCisgICAgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHhiZSwgMHg1MCwgMHgzOCwgMHg3OCwgMHgwMywgMHgwMiwgMHg2NiwgMHgxNiwgMHgwMiwgMHg2NSwgMHhmYiwgCisgICAgMHg3NSwgMHgzMSwgMHg5OSwgMHgxMiwgMHg3YywgMHgxNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgCisgICAgMHgzMCwgMHgzZSwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxNiwgMHgyMiwgCisgICAgMHg4MCwgMHg3ZCwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg5ZSwgMHg0NCwgMHgwNSwgMHhlMywgMHg5ZCwgMHgyNCwgMHg3ZSwgMHg2NCwgCisgICAgMHgwNiwgMHgwMCwgMHgyZSwgMHg2NywgMHgwMSwgMHhjYiwgMHg5ZSwgMHgyNCwgMHgwMCwgMHgwMiwgMHg0MCwgMHgxNywgMHgxYiwgMHgzOCwgMHg2MCwgMHgwYiwgCisgICAgMHgzNSwgMHgxMiwgMHg2NSwgMHhmYiwgMHg3ZSwgMHgzNCwgMHgwMSwgMHhlMywgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhkZiwgCisgICAgMHgwMiwgMHg2NSwgMHhmYiwgMHg3YSwgMHgzOSwgMHhjMCwgMHg3ZSwgMHgzNCwgMHgwMSwgMHhlMywgMHg3YSwgMHgzOSwgMHhkMCwgMHgwYiwgMHgzNCwgMHgxYiwgCisgICAgMHg0NCwgMHg4MCwgMHhlNSwgMHg5ZCwgMHgzMiwgMHg3YywgMHhiNiwgMHg1NCwgMHgwZiwgMHgyMywgMHgyMywgMHgyMywgMHg0NCwgMHgwNiwgMHg3YSwgMHg2OSwgCisgICAgMHhiMCwgMHg3YSwgMHg3OSwgMHg3MCwgMHgwYiwgMHgzNSwgMHg3NSwgMHgzMSwgMHg5MywgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg3MSwgMHgzMSwgMHgxMiwgCisgICAgMHg3YywgMHgxNSwgMHhiZCwgMHgwNCwgMHg2OCwgMHgyOSwgMHg3YSwgMHgwNywgMHgwMSwgMHhkZiwgMHg3ZSwgMHg0NywgMHgwMSwgMHhlMSwgMHgyZCwgMHg0MywgCisgICAgMHg3YSwgMHg0NywgMHgwMSwgMHhlMSwgMHgyZSwgMHgzNSwgMHg0NiwgMHg3YSwgMHgzNSwgMHg0NiwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgCisgICAgMHhlMCwgMHgxMywgMHgyMiwgMHg3ZSwgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgMHgyYSwgMHg3ZSwgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgMHgyYywgMHg3ZSwgCisgICAgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgMHhkMSwgMHhkMiwgMHgwNCwgMHg3ZSwgMHgwNywgMHgwMSwgMHhlMSwgMHg3ZSwgMHgyNCwgMHgwMywgMHhmZSwgMHg5ZCwgCisgICAgMHgyMCwgMHgyOCwgMHg0MCwgMHg3ZSwgMHgwNywgMHgwMSwgMHhkZiwgMHg3ZSwgMHg0NCwgMHgwNSwgMHhlMywgMHg3ZCwgMHg2MCwgMHgwYiwgMHgwNCwgMHhiZCwgCisgICAgMHgwNCwgMHg2OCwgMHhkMCwgMHg3ZCwgMHg3MCwgMHgwYiwgMHgwNCwgMHhiZCwgMHgwNCwgMHg2OCwgMHhjZSwgMHg3ZCwgMHg1NCwgMHg5ZCwgMHg1MCwgMHhiZCwgCisgICAgMHgyNSwgMHg0MCwgMHgwMiwgMHg3ZCwgMHgyNSwgMHg3ZCwgMHgzMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHgxZiwgMHhiNCwgCisgICAgMHgwMSwgMHgzMSwgMHhkYSwgMHhiOCwgMHg3ZSwgMHgxOSwgMHhiMCwgMHg3YSwgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHgxYiwgMHgyNCwgMHg3OCwgMHhlNywgCisgICAgMHgwMiwgMHg1YiwgMHhmMywgMHg3NSwgMHgzMSwgMHg5OSwgMHgxMiwgMHg3YywgMHgxNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgCisgICAgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzZSwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgCisgICAgMHhkMiwgMHgxNiwgMHgyMiwgMHhkYSwgMHhiOCwgMHgzMCwgMHhlMCwgMHhkOCwgMHhiZCwgMHgzMiwgMHg2OCwgMHgwNywgMHhjYSwgMHhiOCwgMHgxMiwgMHg1YiwgCisgICAgMHhmMywgMHhkYSwgMHhiOCwgMHgwMiwgMHg1ZCwgMHg0MCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHg4OCwgMHg3NSwgMHgzMSwgMHg5MCwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHhmNSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHhhNSwgMHhmYywgMHg1ZSwgMHhiMCwgMHhmMCwgMHhhNSwgMHhmZCwgMHgwOSwgCisgICAgMHhiMSwgMHgwMCwgMHgxOCwgMHg0YywgMHg0YiwgMHg1ZSwgMHhiMCwgMHhmMCwgMHhiYywgMHhiNSwgMHg3OCwgMHhmMSwgMHg1ZSwgMHg0MCwgMHgwZiwgMHg0YywgCisgICAgMHg1NCwgMHg3YywgMHhiNSwgMHg1ZSwgMHg1MCwgMHgwYiwgMHg2OCwgMHgyYSwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgxMCwgMHg2OCwgMHgwNCwgMHhkMiwgCisgICAgMHg2ZSwgMHg4MCwgMHgwMiwgMHhjMiwgMHg2ZSwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2NiwgMHg4MCwgMHgwMiwgCisgICAgMHhjMiwgMHg2NiwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1ZSwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1ZSwgMHgxMiwgCisgICAgMHg0MywgMHg4ZSwgMHgwMiwgMHg2MiwgMHg5MywgMHg3NSwgMHgzMSwgMHg5MSwgMHgxMiwgMHg3YywgMHgxNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHg3YSwgCisgICAgMHhiMSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMCwgMHhlMCwgMHgwOCwgMHhkMiwgMHgwNCwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgwMiwgMHg2MiwgMHg5MywgCisgICAgMHhkMiwgMHgwNCwgMHgzMCwgMHhlMSwgMHgwNiwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgxMiwgMHg2MiwgMHg5MywgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxYywgCisgICAgMHhkYSwgMHhiOCwgMHg2OCwgMHgxMiwgMHg3ZSwgMHhhMCwgMHhjMCwgMHgwOSwgMHg2MSwgMHgwMCwgMHgwMCwgMHgxMiwgMHg2MiwgMHhiNiwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHhkYiwgMHgyMiwgMHgwMiwgMHg1YywgMHg0NSwgMHg3NSwgMHgzMSwgMHg5NSwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgCisgICAgMHg3NSwgMHgzMSwgMHg5NiwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgMHgxMCwgMHgwZiwgMHgwMSwgMHgyMiwgMHgyMCwgMHgyZiwgMHgwMywgMHhkMiwgMHgwZiwgCisgICAgMHgyMiwgMHg3NSwgMHgzMSwgMHhhNywgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHgxNCwgMHg4NywgMHgwMCwgMHg4MCwgMHgwNiwgMHgyMCwgMHgyZiwgMHgwMywgCisgICAgMHhkMiwgMHgwZiwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwMywgCisgICAgMHgxMiwgMHg2MCwgMHg5OCwgMHgyMCwgMHhlNiwgMHgwMywgMHhkMiwgMHgwZiwgMHgyMiwgMHgzMCwgMHgzNywgMHg0OSwgMHhkMiwgMHg3NywgMHg3ZSwgMHgzNywgCisgICAgMHgwMSwgMHg5ZCwgMHg3ZSwgMHgyNywgMHgwMSwgMHhiZCwgMHg5ZCwgMHgzMiwgMHg0MCwgMHgzMSwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHg1NiwgMHg3YSwgCisgICAgMHgwNSwgMHg1NiwgMHg3YSwgMHgzNywgMHgwMSwgMHg5ZCwgMHg3ZSwgMHgzNywgMHgwMSwgMHg3ZCwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgCisgICAgMHgyOSwgMHhlMiwgMHgzOCwgMHg2OCwgMHg3YSwgMHg0NywgMHgwMSwgMHg3ZCwgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgCisgICAgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgxMiwgMHg2NSwgMHgyYiwgMHgxMCwgMHg3NywgMHhjNCwgMHgyMiwgMHhjMiwgMHg3NywgMHgyZCwgMHgyMywgMHg2OCwgCisgICAgMHg3OCwgMHg2ZCwgMHgzMywgMHg4MCwgMHgxYSwgMHg3ZSwgMHgyNywgMHgwMSwgMHg5ZCwgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg2YSwgMHhiZSwgCisgICAgMHgyNywgMHgwMSwgMHhiZCwgMHgyOCwgMHgwNCwgMHg3ZSwgMHgyNywgMHgwMSwgMHhiZCwgMHg3ZSwgMHgzNywgMHgwMSwgMHg5ZCwgMHg5ZCwgMHgzMiwgMHg3ZCwgCisgICAgMHgwMiwgMHgyZSwgMHgwNSwgMHg1NiwgMHg3YSwgMHgwNSwgMHg1NiwgMHg3YSwgMHgzNywgMHgwMSwgMHg5ZCwgMHg3ZSwgMHgzNywgMHgwMSwgMHg3ZCwgMHg3ZCwgCisgICAgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgyOSwgMHhlMiwgMHgzOCwgMHgxMywgMHg3YSwgMHg0NywgMHgwMSwgMHg3ZCwgMHg3NSwgMHgzMSwgMHg5NCwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgwMiwgMHg2NSwgMHgyYiwgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgCisgICAgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg5ZSwgMHg0NCwgMHgyOSwgMHhlMywgMHg5ZCwgMHgyNCwgMHgxMiwgMHg2NSwgCisgICAgMHgyYiwgMHg3ZSwgMHgzNCwgMHgyNSwgMHhlMywgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHg3ZCwgMHgxMiwgMHg2NSwgMHgyYiwgCisgICAgMHhiZSwgMHgyNSwgMHgyMCwgMHg3OCwgMHgwMywgMHgwMiwgMHg1ZCwgMHhlNywgMHgyMiwgMHhkMiwgMHgwZiwgMHg3ZSwgMHgwNCwgMHgyNSwgMHhlMywgMHg3YSwgCisgICAgMHgwNywgMHgwMSwgMHg3ZCwgMHg3YSwgMHgwNywgMHgwMSwgMHg4ZCwgMHg3NSwgMHgzMSwgMHg5NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3NSwgMHgzMSwgMHgwMCwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgMHg3NSwgMHgzMSwgMHg5MiwgMHgxMiwgMHg3YywgMHgxNSwgMHhkMiwgMHgwNCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgCisgICAgMHhjYSwgMHhiOCwgMHg1NCwgMHg4MiwgMHhkYSwgMHhiOCwgMHg3OCwgMHg3MCwgMHg3ZSwgMHgzNywgMHgwMSwgMHhlMSwgMHg3ZSwgMHgyNywgMHgwMSwgMHhjZCwgCisgICAgMHgyZSwgMHgyNCwgMHgwMCwgMHgwMiwgMHgyZCwgMHgzMiwgMHhiZSwgMHgzNCwgMHgwNCwgMHgwMCwgMHgzOCwgMHgzYywgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgCisgICAgMHg0NiwgMHg3YSwgMHgwNSwgMHg0NiwgMHg3YSwgMHgzNywgMHgwMSwgMHhlMSwgMHg3ZSwgMHgzNywgMHgwMSwgMHhkZiwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgCisgICAgMHhiZSwgMHg0NCwgMHgwNSwgMHhlMiwgMHgzOCwgMHg0NCwgMHg3YSwgMHg0NywgMHgwMSwgMHhkZiwgMHg3ZSwgMHgyNCwgMHgwNywgMHgwMCwgMHgyZSwgMHgyNywgCisgICAgMHgwMSwgMHhjZCwgMHgxYiwgMHgzOCwgMHgyMCwgMHgwYiwgMHgzNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHhiZSwgMHg1MCwgMHgzOCwgCisgICAgMHg3OCwgMHgwMywgMHgwMiwgMHg2NiwgMHgxNiwgMHgwMiwgMHg2NSwgMHhmYiwgMHg3NSwgMHgzMSwgMHg5OSwgMHgxMiwgMHg3YywgMHgxNSwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzZiwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgCisgICAgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxNywgMHgyMiwgMHg4MCwgMHg3ZCwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgCisgICAgMHg5ZSwgMHg0NCwgMHgwNSwgMHhlMywgMHg5ZCwgMHgyNCwgMHg3ZSwgMHg2NCwgMHgwNywgMHgwMCwgMHgyZSwgMHg2NywgMHgwMSwgMHhjZCwgMHg5ZSwgMHgyNCwgCisgICAgMHgwMCwgMHgwMiwgMHg0MCwgMHgxNywgMHgxYiwgMHgzOCwgMHg2MCwgMHgwYiwgMHgzNSwgMHgxMiwgMHg2NSwgMHhmYiwgMHg3ZSwgMHgzNCwgMHgwMSwgMHhlMywgCisgICAgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhkZiwgMHgwMiwgMHg2NSwgMHhmYiwgMHg3YSwgMHgzOSwgMHhjMCwgMHg3ZSwgMHgzNCwgCisgICAgMHgwMSwgMHhlMywgMHg3YSwgMHgzOSwgMHhkMCwgMHgwYiwgMHgzNCwgMHgxYiwgMHg0NCwgMHg4MCwgMHhlNSwgMHg5ZCwgMHgzMiwgMHg3YywgMHhiNiwgMHg1NCwgCisgICAgMHgwZiwgMHgyMywgMHgyMywgMHgyMywgMHg0NCwgMHgwNywgMHg3YSwgMHg2OSwgMHhiMCwgMHg3YSwgMHg3OSwgMHg3MCwgMHgwYiwgMHgzNSwgMHg3NSwgMHgzMSwgCisgICAgMHg5MywgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg3MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHhiZCwgMHgwNCwgMHg2OCwgMHgyOSwgMHg3YSwgMHgwNywgCisgICAgMHgwMSwgMHhkZiwgMHg3ZSwgMHg0NywgMHgwMSwgMHhlMSwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhlMSwgMHgyZSwgMHgzNSwgMHg0NiwgMHg3YSwgCisgICAgMHgzNSwgMHg0NiwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHgxMywgMHgyMiwgMHg3ZSwgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgCisgICAgMHgyYSwgMHg3ZSwgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgMHgyYywgMHg3ZSwgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgMHhkMSwgMHhkMiwgMHgwNCwgMHg3ZSwgCisgICAgMHgwNywgMHgwMSwgMHhlMSwgMHg3ZSwgMHgyNCwgMHgwMywgMHhmZSwgMHg5ZCwgMHgyMCwgMHgyOCwgMHg0MCwgMHg3ZSwgMHgwNywgMHgwMSwgMHhkZiwgMHg3ZSwgCisgICAgMHg0NCwgMHgwNSwgMHhlMywgMHg3ZCwgMHg2MCwgMHgwYiwgMHgwNCwgMHhiZCwgMHgwNCwgMHg2OCwgMHhkMCwgMHg3ZCwgMHg3MCwgMHgwYiwgMHgwNCwgMHhiZCwgCisgICAgMHgwNCwgMHg2OCwgMHhjZSwgMHg3ZCwgMHg1NCwgMHg5ZCwgMHg1MCwgMHhiZCwgMHgyNSwgMHg0MCwgMHgwMiwgMHg3ZCwgMHgyNSwgMHg3ZCwgMHgzMiwgMHgwOSwgCisgICAgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHgxZiwgMHhiNCwgMHgwMSwgMHgzMSwgMHhkYSwgMHhiOCwgMHg3ZSwgMHgxOSwgMHhiMCwgMHg3YSwgCisgICAgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHgxYiwgMHgyNCwgMHg3OCwgMHhlNywgMHgwMiwgMHg1ZiwgMHg0YiwgMHg3NSwgMHgzMSwgMHg5OSwgMHgxMiwgMHg3YywgCisgICAgMHgxNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzZiwgMHgwYSwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxNywgMHgyMiwgMHhkYSwgMHhiOCwgMHgzMCwgMHhlMCwgMHhkOCwgCisgICAgMHhiZCwgMHgzMiwgMHg2OCwgMHgwNywgMHhjYSwgMHhiOCwgMHgxMiwgMHg1ZiwgMHg0YiwgMHhkYSwgMHhiOCwgMHgwMiwgMHg2MCwgMHg5OCwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHg4OCwgMHg3NSwgMHgzMSwgMHg5MCwgMHgxMiwgMHg3YywgMHgxNSwgMHhmNSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgCisgICAgMHhhNSwgMHhmYywgMHg1ZSwgMHhiMCwgMHhmMCwgMHhhNSwgMHhmZCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHg0YywgMHg0YiwgMHg1ZSwgMHhiMCwgMHhmMCwgCisgICAgMHhiYywgMHhiNSwgMHg3OCwgMHhmMSwgMHg1ZSwgMHg0MCwgMHgwZiwgMHg0YywgMHg1NCwgMHg3YywgMHhiNSwgMHg1ZSwgMHg1MCwgMHgwYiwgMHg2OCwgMHgyYSwgCisgICAgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgxMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2ZiwgMHg4MCwgMHgwMiwgMHhjMiwgMHg2ZiwgMHhhNSwgMHhmZCwgMHg1ZSwgCisgICAgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2NywgMHg4MCwgMHgwMiwgMHhjMiwgMHg2NywgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgCisgICAgMHgwNCwgMHhkMiwgMHg1ZiwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1ZiwgMHgxMiwgMHg0MywgMHhhZiwgMHgwMiwgMHg2MiwgMHg5MywgMHg3NSwgMHgzMSwgMHg5MSwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHg3YSwgMHhiMSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMCwgMHhlMCwgMHgwOCwgCisgICAgMHhkMiwgMHgwNCwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgwMiwgMHg2MiwgMHg5MywgMHhkMiwgMHgwNCwgMHgzMCwgMHhlMSwgMHgwNiwgMHg3ZSwgMHhhMCwgMHg4MCwgCisgICAgMHgxMiwgMHg2MiwgMHg5MywgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxYywgMHhkYSwgMHhiOCwgMHg2OCwgMHgxMiwgMHg3ZSwgMHhhMCwgMHhjMCwgMHgwOSwgCisgICAgMHg2MSwgMHgwMCwgMHgwMCwgMHgxMiwgMHg2MiwgMHhiNiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHhkYiwgMHgyMiwgMHgwMiwgMHg1ZiwgCisgICAgMHg5ZCwgMHg3NSwgMHgzMSwgMHg5NSwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgMHg3NSwgMHgzMSwgMHg5NiwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgMHg3YywgCisgICAgMHgwMiwgMHg3ZSwgMHgxNCwgMHg4MCwgMHgwMCwgMHg0YywgMHgyMCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgxMCwgCisgICAgMHg2OCwgMHgwNCwgMHhkMiwgMHg2OCwgMHg4MCwgMHgwMiwgMHhjMiwgMHg2OCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgCisgICAgMHg2MCwgMHg4MCwgMHgwMiwgMHhjMiwgMHg2MCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1OCwgMHg4MCwgMHgwMiwgCisgICAgMHhjMiwgMHg1OCwgMHgwMiwgMHg2MiwgMHg3ZiwgMHg3YywgMHgwMiwgMHg3ZSwgMHgxNCwgMHg4MCwgMHgwMCwgMHg0YywgMHgyMCwgMHgwOSwgMHhiMSwgMHgwMCwgCisgICAgMHgxOCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgxMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2OSwgMHg4MCwgMHgwMiwgMHhjMiwgMHg2OSwgMHhhNSwgMHhmZCwgCisgICAgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2MSwgMHg4MCwgMHgwMiwgMHhjMiwgMHg2MSwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgCisgICAgMHg2OCwgMHgwNCwgMHhkMiwgMHg1OSwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1OSwgMHgwMiwgMHg2MiwgMHg3ZiwgMHg3YywgMHgwMiwgMHg3ZSwgMHgxNCwgMHg4MCwgCisgICAgMHgwMCwgMHg0YywgMHgyMCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgxMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2YSwgCisgICAgMHg4MCwgMHgwMiwgMHhjMiwgMHg2YSwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2MiwgMHg4MCwgMHgwMiwgMHhjMiwgCisgICAgMHg2MiwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1YSwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1YSwgMHgwMiwgMHg2MiwgCisgICAgMHg3ZiwgMHg3YywgMHgwMiwgMHg3ZSwgMHgxNCwgMHg4MCwgMHgwMCwgMHg0YywgMHgyMCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHhhNSwgMHhmZCwgMHg1ZSwgCisgICAgMHg1MCwgMHgxMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2YiwgMHg4MCwgMHgwMiwgMHhjMiwgMHg2YiwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgCisgICAgMHgwNCwgMHhkMiwgMHg2MywgMHg4MCwgMHgwMiwgMHhjMiwgMHg2MywgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1YiwgCisgICAgMHg4MCwgMHgwMiwgMHhjMiwgMHg1YiwgMHgwMiwgMHg2MiwgMHg3ZiwgMHg3YywgMHgwMiwgMHg3ZSwgMHgxNCwgMHg4MCwgMHgwMCwgMHg0YywgMHgyMCwgMHgwOSwgCisgICAgMHhiMSwgMHgwMCwgMHgxOCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgxMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2YywgMHg4MCwgMHgwMiwgMHhjMiwgMHg2YywgCisgICAgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2NCwgMHg4MCwgMHgwMiwgMHhjMiwgMHg2NCwgMHhhNSwgMHhmZCwgMHg1ZSwgCisgICAgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1YywgMHg4MCwgMHgwMiwgMHhjMiwgMHg1YywgMHgwMiwgMHg2MiwgMHg3ZiwgMHg3YywgMHgwMiwgMHg3ZSwgCisgICAgMHgxNCwgMHg4MCwgMHgwMCwgMHg0YywgMHgyMCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgxMCwgMHg2OCwgMHgwNCwgCisgICAgMHhkMiwgMHg2ZCwgMHg4MCwgMHgwMiwgMHhjMiwgMHg2ZCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2NSwgMHg4MCwgCisgICAgMHgwMiwgMHhjMiwgMHg2NSwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1ZCwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1ZCwgCisgICAgMHgwMiwgMHg2MiwgMHg3ZiwgMHg3YywgMHgwMiwgMHg3ZSwgMHgxNCwgMHg4MCwgMHgwMCwgMHg0YywgMHgyMCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHhhNSwgCisgICAgMHhmZCwgMHg1ZSwgMHg1MCwgMHgxMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2ZSwgMHg4MCwgMHgwMiwgMHhjMiwgMHg2ZSwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgCisgICAgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2NiwgMHg4MCwgMHgwMiwgMHhjMiwgMHg2NiwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgCisgICAgMHhkMiwgMHg1ZSwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1ZSwgMHgwMiwgMHg2MiwgMHg3ZiwgMHg3YywgMHgwMiwgMHg3ZSwgMHgxNCwgMHg4MCwgMHgwMCwgMHg0YywgCisgICAgMHgyMCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgxMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2ZiwgMHg4MCwgMHgwMiwgCisgICAgMHhjMiwgMHg2ZiwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg2NywgMHg4MCwgMHgwMiwgMHhjMiwgMHg2NywgMHhhNSwgCisgICAgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1ZiwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1ZiwgMHgwMiwgMHg2MiwgMHg3ZiwgMHg1NCwgCisgICAgMHhmMCwgMHhjNCwgMHhhNSwgMHhmZiwgMHhjNCwgMHhhNSwgMHg0ZiwgMHg3NSwgMHgzMSwgMHg5MCwgMHgxMiwgMHg3YywgMHgxNSwgMHhmNSwgMHgzMSwgMHgxMiwgCisgICAgMHg3YywgMHgxNSwgMHgyMiwgMHhjYSwgMHgxOSwgMHg1ZSwgMHgyMCwgMHgwNywgMHg0YywgMHhhMiwgMHg3ZSwgMHg3NCwgMHgyOSwgMHhlMywgMHhjYSwgMHg3OSwgCisgICAgMHg3YSwgMHg3OSwgMHhhMCwgMHgwYiwgMHg3NCwgMHg3YSwgMHg3OSwgMHhiMCwgMHgwYiwgMHg3NCwgMHhkYSwgMHg3OSwgMHg3ZSwgMHgzMCwgMHgwMiwgMHg3ZSwgCisgICAgMHg2NCwgMHgwMCwgMHgwMiwgMHgwMiwgMHg2MiwgMHhkZSwgMHhjYSwgMHgxOSwgMHg1ZSwgMHgyMCwgMHgwNywgMHg0YywgMHhhMiwgMHg3ZSwgMHg3NCwgMHgyOSwgCisgICAgMHhlMywgMHhjYSwgMHg3OSwgMHg3YSwgMHg3OSwgMHhhMCwgMHgwYiwgMHg3NCwgMHg3YSwgMHg3OSwgMHhiMCwgMHgwYiwgMHg3NCwgMHg3YSwgMHg3OSwgMHg2MCwgCisgICAgMHgwYiwgMHg3NCwgMHhkYSwgMHg3OSwgMHg3ZSwgMHgzMCwgMHgwMywgMHg3ZSwgMHg2NCwgMHgwMCwgMHgwMywgMHgwMiwgMHg2MiwgMHhkZSwgMHhkMiwgMHgwNCwgCisgICAgMHg3ZSwgMHgyNywgMHgwMSwgMHhlMSwgMHgyZCwgMHgyNiwgMHhiZSwgMHgyNCwgMHgwNCwgMHgwMCwgMHgzOCwgMHgyZSwgMHg3ZSwgMHgwNywgMHgwMSwgMHhkZiwgCisgICAgMHg3ZSwgMHg0NCwgMHgwNSwgMHhlMywgMHg3ZSwgMHg3OSwgMHhhMCwgMHg3YSwgMHgwOSwgMHhhMCwgMHgwYiwgMHgwNCwgMHgwYiwgMHg3NCwgMHhiZCwgMHgwNCwgCisgICAgMHg2OCwgMHgyMywgMHhhNSwgMHhkYiwgMHhlZiwgMHg3YSwgMHgyNywgMHgwMSwgMHhlMSwgMHg3ZSwgMHgyNSwgMHg0NiwgMHgyZCwgMHgyNiwgMHg3YSwgMHgyNSwgCisgICAgMHg0NiwgMHg3YSwgMHgwNywgMHgwMSwgMHhkZiwgMHhkYSwgMHgxOSwgMHhjMiwgMHhkNywgMHgyMiwgMHg3NSwgMHgzMSwgMHg5YSwgMHgxMiwgMHg3YywgMHgxNSwgCisgICAgMHhkYSwgMHgxOSwgMHhkMiwgMHhkNywgMHgyMiwgMHg3ZSwgMHgwNCwgMHgwMSwgMHhlMywgMHg4MCwgMHhkNywgMHg0OCwgMHhiNiwgMHg0NiwgMHgyNSwgMHg0NywgCisgICAgMHgxYywgMHg0OSwgMHgxNSwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0OCwgMHgxYiwgMHg0NCwgMHhjNiwgMHg0OSwgMHg1OSwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0OSwgMHg2MCwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0YywgMHgwZSwgMHg0OSwgMHg3ZCwgMHg0YSwgCisgICAgMHg3NCwgMHg0YywgMHg2ZCwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0YiwgMHg3MywgMHg0NCwgMHhjNiwgMHg0YywgMHhiMSwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0YywgMHhiOCwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0ZiwgMHg2NiwgMHg0YywgMHhkNSwgMHg0ZCwgCisgICAgMHhjYywgMHg0ZiwgMHhjNSwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0ZSwgMHhjYiwgMHg0NCwgMHhjNiwgMHg1MCwgMHgwOSwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg1MCwgMHgxMCwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg1MiwgMHhiZSwgMHg1MCwgMHgyZCwgMHg1MSwgCisgICAgMHgyNCwgMHg1MywgMHgxZCwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg1MiwgMHgyMywgMHg0NCwgMHhjNiwgMHg1MywgMHg2MSwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg1MywgMHg2OCwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg1NiwgMHgxNiwgMHg1MywgMHg4NSwgMHg1NCwgCisgICAgMHg3YywgMHg1NiwgMHg3NSwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg1NSwgMHg3YiwgMHg0NCwgMHhjNiwgMHg1NiwgMHhiOSwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg1NiwgMHhjMCwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg1OSwgMHg2ZSwgMHg1NiwgMHhkZCwgMHg1NywgCisgICAgMHhkNCwgMHg1OSwgMHhjZCwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg1OCwgMHhkMywgMHg0NCwgMHhjNiwgMHg1YSwgMHgxMSwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg1YSwgMHgxOCwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg1YywgMHhjNiwgMHg1YSwgMHgzNSwgMHg1YiwgCisgICAgMHgyYywgMHg1ZCwgMHgyNSwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg1YywgMHgyYiwgMHg0NCwgMHhjNiwgMHg1ZCwgMHg2OSwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg1ZCwgMHg3MCwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg2MCwgMHgxZSwgMHg1ZCwgMHg4ZCwgMHg1ZSwgCisgICAgMHg4NCwgMHg2MCwgMHg3ZCwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg1ZiwgMHg4MywgMHg0NCwgMHhjNiwgMHg2MCwgMHhjMSwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg2MCwgMHhjOCwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgCisgICAgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHg0NCwgMHhjNiwgMHhjYSwgMHgyOSwgMHgxZSwgMHg1MCwgMHg0MCwgCisgICAgMHgwZCwgMHg3ZSwgMHg1NCwgMHgwYiwgMHgxMCwgMHg5YywgMHhiNSwgMHhhNCwgMHgyZSwgMHg1NCwgMHg2NSwgMHg0OCwgMHg4OSwgMHg1NCwgMHg3ZSwgMHgzOSwgCisgICAgMHgwMCwgMHg3YSwgMHgxOSwgMHgwMCwgMHgwYiwgMHgzNCwgMHg4MCwgMHhlOSwgMHgwYiwgMHgzOCwgMHgwMCwgMHg3YSwgMHgxOSwgMHgwMCwgMHg3YSwgMHgxOSwgCisgICAgMHgxMCwgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHgwMCwgMHg3YSwgMHgxOSwgMHgwMCwgMHg3YSwgMHgxOSwgMHgxMCwgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgCisgICAgMHgwMCwgMHg3YSwgMHgxOSwgMHgwMCwgMHg3YSwgMHgxOSwgMHgxMCwgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHgwMCwgMHg3YSwgMHgxOSwgMHgwMCwgMHg3YSwgCisgICAgMHgxOSwgMHgxMCwgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHgwMCwgMHg3YSwgMHgxOSwgMHgwMCwgMHg3YSwgMHgxOSwgMHgxMCwgMHgwYiwgMHgzNSwgMHgwYiwgCisgICAgMHgzOCwgMHgwMCwgMHg3YSwgMHgxOSwgMHgwMCwgMHg3YSwgMHgxOSwgMHgxMCwgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHgwMCwgMHg3YSwgMHgxOSwgMHgwMCwgCisgICAgMHg3YSwgMHgxOSwgMHgxMCwgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHgwMCwgMHg3YSwgMHgxOSwgMHgwMCwgMHg3YSwgMHgxOSwgMHgxMCwgMHgwYiwgMHgzNSwgCisgICAgMHgwYiwgMHgzOCwgMHgwMCwgMHg3YSwgMHgxOSwgMHgwMCwgMHg3YSwgMHgxOSwgMHgxMCwgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHgwMCwgMHg3YSwgMHgxOSwgCisgICAgMHgwMCwgMHg3YSwgMHgxOSwgMHgxMCwgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHgwMCwgMHg3YSwgMHgxOSwgMHgwMCwgMHg3YSwgMHgxOSwgMHgxMCwgMHgwYiwgCisgICAgMHgzNSwgMHgwYiwgMHgzOCwgMHgwMCwgMHg3YSwgMHgxOSwgMHgwMCwgMHg3YSwgMHgxOSwgMHgxMCwgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHgwMCwgMHg3YSwgCisgICAgMHgxOSwgMHgwMCwgMHg3YSwgMHgxOSwgMHgxMCwgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHgwMCwgMHg3YSwgMHgxOSwgMHgwMCwgMHg3YSwgMHgxOSwgMHgxMCwgCisgICAgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHgwMCwgMHg3YSwgMHgxOSwgMHgwMCwgMHg3YSwgMHgxOSwgMHgxMCwgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHgwMCwgCisgICAgMHg3YSwgMHgxOSwgMHgwMCwgMHg3YSwgMHgxOSwgMHgxMCwgMHgwYiwgMHgzNSwgMHhkYSwgMHgyOSwgMHgyMiwgMHgxZSwgMHg1MCwgMHg0MCwgMHgwZCwgMHg3ZSwgCisgICAgMHg1NCwgMHgwYiwgMHgxYywgMHg5YywgMHhiNSwgMHhhNCwgMHgyZSwgMHg1NCwgMHg2NiwgMHgxNiwgMHg4OSwgMHg1NCwgMHg3ZSwgMHgxOSwgMHgwMCwgMHg3YSwgCisgICAgMHgzOSwgMHgwMCwgMHgwYiwgMHgzNCwgMHg4MCwgMHhlOSwgMHg3ZSwgMHgxOSwgMHgwMCwgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgMHgwMCwgMHgwYiwgCisgICAgMHgzNSwgMHg3ZSwgMHgxOSwgMHgwMCwgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgMHgwMCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHgxOSwgMHgwMCwgMHg3ZSwgCisgICAgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgMHgwMCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHgxOSwgMHgwMCwgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgMHgwMCwgCisgICAgMHgwYiwgMHgzNSwgMHg3ZSwgMHgxOSwgMHgwMCwgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgMHgwMCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHgxOSwgMHgwMCwgCisgICAgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgMHgwMCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHgxOSwgMHgwMCwgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgCisgICAgMHgwMCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHgxOSwgMHgwMCwgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgMHgwMCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHgxOSwgCisgICAgMHgwMCwgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgMHgwMCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHgxOSwgMHgwMCwgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgCisgICAgMHgzOCwgMHgwMCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHgxOSwgMHgwMCwgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgMHgwMCwgMHgwYiwgMHgzNSwgMHg3ZSwgCisgICAgMHgxOSwgMHgwMCwgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgMHgwMCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHgxOSwgMHgwMCwgMHg3ZSwgMHgxOSwgMHgxMCwgCisgICAgMHgxYiwgMHgzOCwgMHgwMCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHgxOSwgMHgwMCwgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgMHgwMCwgMHgwYiwgMHgzNSwgCisgICAgMHg3ZSwgMHgxOSwgMHgwMCwgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgMHgwMCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHgxOSwgMHgwMCwgMHg3ZSwgMHgxOSwgCisgICAgMHgxMCwgMHgxYiwgMHgzOCwgMHgwMCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHgxOSwgMHgwMCwgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgMHgwMCwgMHgwYiwgCisgICAgMHgzNSwgMHg3ZSwgMHgxOSwgMHgwMCwgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgMHgwMCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHgxOSwgMHgwMCwgMHg3ZSwgCisgICAgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgMHgwMCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHgxOSwgMHgwMCwgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgMHgwMCwgCisgICAgMHgwYiwgMHgzNSwgMHg3ZSwgMHgxOSwgMHgwMCwgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgMHgwMCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHgxOSwgMHgwMCwgCisgICAgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgMHgwMCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHgxOSwgMHgwMCwgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgCisgICAgMHgwMCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHgxOSwgMHgwMCwgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgMHgwMCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHgxOSwgCisgICAgMHgwMCwgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgMHgwMCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHgxOSwgMHgwMCwgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgCisgICAgMHgzOCwgMHgwMCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHgxOSwgMHgwMCwgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgMHgwMCwgMHgwYiwgMHgzNSwgMHg3ZSwgCisgICAgMHgxOSwgMHgwMCwgMHg3ZSwgMHgxOSwgMHgxMCwgMHgxYiwgMHgzOCwgMHgwMCwgMHgwYiwgMHgzNSwgMHgyMiwgMHg2NywgMHg5NiwgMHg2OSwgMHg2MywgMHg2OSwgCisgICAgMHg3YiwgMHg2YSwgMHg0OSwgMHg2YSwgMHhlNCwgMHg2YiwgMHg4ZSwgMHg2YiwgMHhhOSwgMHg2YywgMHgzYiwgMHg2YiwgMHhjNCwgMHg2YywgMHgwNSwgMHg2OSwgCisgICAgMHg5NiwgMHg2OSwgMHhhYSwgMHg3YywgMHhiMywgMHhiZSwgMHhiMCwgMHgwYiwgMHgyOCwgMHgxNCwgMHg3NSwgMHgzMSwgMHgwOSwgMHgxMiwgMHg3YywgMHgxNSwgCisgICAgMHg3NSwgMHg2ZCwgMHgxMCwgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHg0MywgMHhlMSwgMHhjMCwgMHhkMCwgMHhmMSwgMHgyMiwgMHhjMCwgMHhhOCwgCisgICAgMHhjMiwgMHhhZiwgMHgyMywgMHg2YywgMHhhYSwgMHgyZSwgMHg1NCwgMHg2NywgMHg0YiwgMHgwYiwgMHg1OCwgMHg1MCwgMHg4OSwgMHg1NCwgMHgwMSwgMHgwMiwgCisgICAgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHg3NSwgMHgzMSwgMHhiMCwgMHgxMiwgMHg3YywgMHgxNSwgMHgwYSwgMHgzMiwgMHgwOSwgMHhiMywgCisgICAgMHg2NywgMHg4ZSwgMHg0MiwgMHgzMiwgMHgxOSwgMHg0MywgMHgwMCwgMHgzNiwgMHhkMCwgMHhhOCwgMHgyMiwgMHg3YywgMHhiMiwgMHgyMywgMHgwYSwgMHgzYiwgCisgICAgMHg0OSwgMHgzMywgMHg2NywgMHhjYiwgMHgwYSwgMHgyMiwgMHgwOSwgMHgzMiwgMHgwMCwgMHgzNiwgMHgwOSwgMHhiMiwgMHg2NywgMHg4ZSwgMHhhNSwgMHhiYiwgCisgICAgMHgwMCwgMHgwNSwgMHhmNCwgMHg1MiwgMHgzMywgMHg4MCwgMHgwMiwgMHg0MiwgMHgzMywgMHg4OSwgMHgzNCwgMHg2NywgMHhkYiwgMHg2OCwgMHgwOSwgMHg2OCwgCisgICAgMHgzNywgMHg2OCwgMHg2NSwgMHg2OCwgMHg5MywgMHg2OCwgMHhjMSwgMHg2OCwgMHhlZiwgMHg2OSwgMHgxZCwgMHgxMiwgMHg0MSwgMHhiNSwgMHhkMiwgMHgyOCwgCisgICAgMHhkMiwgMHgwOCwgMHhjMiwgMHg0MCwgMHhjMiwgMHg0OCwgMHhjMiwgMHgzOCwgMHhjMiwgMHgzMCwgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhjZiwgCisgICAgMHg3ZSwgMHgwNCwgMHgwMCwgMHgyMCwgMHg3YSwgMHgwNywgMHgwMSwgMHhhZiwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgzOCwgMHg3YSwgMHgwNywgMHgwMSwgMHhiZiwgCisgICAgMHgxMiwgMHg0MSwgMHgxNiwgMHgxMiwgMHg2MCwgMHhjZiwgMHgwMiwgMHg2OSwgMHg0YiwgMHgxMiwgMHg0MSwgMHhkNCwgMHhkMiwgMHgyOSwgMHhkMiwgMHgwOSwgCisgICAgMHhjMiwgMHg0MSwgMHhjMiwgMHg0OSwgMHhjMiwgMHgzOSwgMHhjMiwgMHgzMSwgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhkMCwgMHg3ZSwgMHgwNCwgCisgICAgMHgwMCwgMHgyMCwgMHg3YSwgMHgwNywgMHgwMSwgMHhiMSwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgzOCwgMHg3YSwgMHgwNywgMHgwMSwgMHhjMSwgMHgxMiwgMHg0MSwgCisgICAgMHgxNiwgMHgxMiwgMHg2MSwgMHgwNSwgMHgwMiwgMHg2OSwgMHg0YiwgMHgxMiwgMHg0MSwgMHhmMywgMHhkMiwgMHgyYSwgMHhkMiwgMHgwYSwgMHhjMiwgMHg0MiwgCisgICAgMHhjMiwgMHg0YSwgMHhjMiwgMHgzYSwgMHhjMiwgMHgzMiwgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhkMSwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgyMCwgCisgICAgMHg3YSwgMHgwNywgMHgwMSwgMHhiMywgMHg3ZSwgMHgwNCwgMHgwMCwgMHgzOCwgMHg3YSwgMHgwNywgMHgwMSwgMHhjMywgMHgxMiwgMHg0MSwgMHgxNiwgMHgxMiwgCisgICAgMHg2MSwgMHgzYiwgMHgwMiwgMHg2OSwgMHg0YiwgMHgxMiwgMHg0MiwgMHgxMiwgMHhkMiwgMHgyYiwgMHhkMiwgMHgwYiwgMHhjMiwgMHg0MywgMHhjMiwgMHg0YiwgCisgICAgMHhjMiwgMHgzYiwgMHhjMiwgMHgzMywgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhkMiwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgyMCwgMHg3YSwgMHgwNywgCisgICAgMHgwMSwgMHhiNSwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgzOCwgMHg3YSwgMHgwNywgMHgwMSwgMHhjNSwgMHgxMiwgMHg0MSwgMHgxNiwgMHgxMiwgMHg2MSwgMHg3MSwgCisgICAgMHgwMiwgMHg2OSwgMHg0YiwgMHgxMiwgMHg0MiwgMHgzMSwgMHhkMiwgMHgyYywgMHhkMiwgMHgwYywgMHhjMiwgMHg0NCwgMHhjMiwgMHg0YywgMHhjMiwgMHgzYywgCisgICAgMHhjMiwgMHgzNCwgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhkMywgMHg3ZSwgMHgwNCwgMHgwMCwgMHgyMCwgMHg3YSwgMHgwNywgMHgwMSwgMHhiNywgCisgICAgMHg3ZSwgMHgwNCwgMHgwMCwgMHgzOCwgMHg3YSwgMHgwNywgMHgwMSwgMHhjNywgMHgxMiwgMHg0MSwgMHgxNiwgMHgxMiwgMHg2MSwgMHhhNywgMHgwMiwgMHg2OSwgCisgICAgMHg0YiwgMHgxMiwgMHg0MiwgMHg1MCwgMHhkMiwgMHgyZCwgMHhkMiwgMHgwZCwgMHhjMiwgMHg0NSwgMHhjMiwgMHg0ZCwgMHhjMiwgMHgzZCwgMHhjMiwgMHgzNSwgCisgICAgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhkNCwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgyMCwgMHg3YSwgMHgwNywgMHgwMSwgMHhiOSwgMHg3ZSwgMHgwNCwgCisgICAgMHgwMCwgMHgzOCwgMHg3YSwgMHgwNywgMHgwMSwgMHhjOSwgMHgxMiwgMHg0MSwgMHgxNiwgMHgxMiwgMHg2MSwgMHhkZCwgMHgwMiwgMHg2OSwgMHg0YiwgMHgxMiwgCisgICAgMHg0MiwgMHg2ZiwgMHhkMiwgMHgyZSwgMHhkMiwgMHgwZSwgMHhjMiwgMHg0NiwgMHhjMiwgMHg0ZSwgMHhjMiwgMHgzZSwgMHhjMiwgMHgzNiwgMHg2ZCwgMHgwMCwgCisgICAgMHg3YSwgMHgwMywgMHgwMSwgMHhkNSwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgyMCwgMHg3YSwgMHgwNywgMHgwMSwgMHhiYiwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgzOCwgCisgICAgMHg3YSwgMHgwNywgMHgwMSwgMHhjYiwgMHgxMiwgMHg0MSwgMHgxNiwgMHgxMiwgMHg2MiwgMHgxMywgMHgwMiwgMHg2OSwgMHg0YiwgMHgxMiwgMHg0MiwgMHg4ZSwgCisgICAgMHhkMiwgMHgyZiwgMHhkMiwgMHgwZiwgMHhjMiwgMHg0NywgMHhjMiwgMHg0ZiwgMHhjMiwgMHgzZiwgMHhjMiwgMHgzNywgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwMywgCisgICAgMHgwMSwgMHhkNiwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgyMCwgMHg3YSwgMHgwNywgMHgwMSwgMHhiZCwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgzOCwgMHg3YSwgMHgwNywgCisgICAgMHgwMSwgMHhjZCwgMHgxMiwgMHg0MSwgMHgxNiwgMHgxMiwgMHg2MiwgMHg0OSwgMHgwMiwgMHg2OSwgMHg0YiwgMHg3ZSwgMHhhMCwgMHhkMCwgMHg3ZSwgMHg2MCwgCisgICAgMHgwZiwgMHgxMiwgMHg2MiwgMHhiNiwgMHg0MCwgMHgwYywgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgCisgICAgMHhjMiwgMHhkNywgMHgyMiwgMHg3NSwgMHgzMSwgMHhiMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgwYSwgMHg1MiwgMHgyMywgMHg2ZCwgMHgwMCwgMHg1OSwgMHgwNSwgCisgICAgMHgwMCwgMHg0OCwgMHgxMiwgMHg0MSwgMHg3ZSwgMHgxMiwgMHg0MSwgMHg5YSwgMHhkMCwgMHhhOCwgMHgyMiwgMHg3NSwgMHgzMSwgMHhiMiwgMHgxMiwgMHg3YywgCisgICAgMHgxNSwgMHgwYSwgMHgyMiwgMHgwOSwgMHhiMiwgMHg2NywgMHg4ZSwgMHg0MiwgMHgyMywgMHg3ZSwgMHhiMCwgMHg5YywgMHgxOSwgMHhiMiwgMHgwMSwgMHhjZiwgCisgICAgMHgxMiwgMHgzMSwgMHg4NSwgMHhkMCwgMHhhOCwgMHgyMiwgMHg3NSwgMHgzMSwgMHhiNywgMHgxMiwgMHg3YywgMHgxNSwgMHgwYSwgMHgyMiwgMHgwOSwgMHhiMiwgCisgICAgMHg2NywgMHg4ZSwgMHg0MiwgMHgyNCwgMHgxMiwgMHgzNSwgMHgzZCwgMHhkMCwgMHhhOCwgMHgyMiwgMHg3NSwgMHgzMSwgMHhiOSwgMHgxMiwgMHg3YywgMHgxNSwgCisgICAgMHgwYSwgMHgzMiwgMHgwOSwgMHhiMywgMHg2NywgMHg4ZSwgMHg0MiwgMHgzNCwgMHgxOSwgMHg0MywgMHgwMCwgMHgzZSwgMHgxMiwgMHg2OSwgMHhjMiwgMHhkMCwgCisgICAgMHhhOCwgMHgyMiwgMHg3YywgMHhiMiwgMHgyMywgMHgwYSwgMHgwYiwgMHg3YywgMHhiNCwgMHgyMCwgMHhlMCwgMHgwNCwgMHg2ZCwgMHgzMywgMHg4MCwgMHgwNCwgCisgICAgMHg0OSwgMHgzMCwgMHgwMSwgMHg4ZiwgMHg3ZSwgMHhhMCwgMHhkOCwgMHhhNSwgMHhlZiwgMHhjYSwgMHgwYiwgMHhjYSwgMHgyOSwgMHgxMiwgMHg2MiwgMHhiNiwgCisgICAgMHhkYSwgMHgyOSwgMHhkYSwgMHgwYiwgMHg0MCwgMHg2MiwgMHg3NSwgMHgzMSwgMHhiYSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YywgMHhiNCwgMHgzMCwgMHhlMCwgCisgICAgMHgxZSwgMHg2ZCwgMHgzMywgMHg1OSwgMHgzMCwgMHgwMSwgMHg4ZiwgMHg3ZSwgMHgzNCwgMHgwOSwgMHhlMywgMHgwYSwgMHg4MiwgMHg3ZSwgMHg5NCwgMHgwNCwgCisgICAgMHgwMCwgMHhhZCwgMHg4OSwgMHgyZCwgMHgzOSwgMHg1OSwgMHgzMCwgMHgwMSwgMHg2ZiwgMHg1OSwgMHgzMCwgMHgwMSwgMHg3ZiwgMHg3YywgMHhiNCwgMHgzMCwgCisgICAgMHhlMSwgMHgxMCwgMHg3ZSwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0YywgMHgwMiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwOCwgMHg0NCwgMHgwNCwgMHgxOSwgMHhiMCwgCisgICAgMHgwMCwgMHgwOCwgMHgwYSwgMHgwMiwgMHgwOSwgMHhiMCwgMHg2NywgMHg4ZSwgMHg0MiwgMHgyMSwgMHhmNCwgMHg1MiwgMHgzNCwgMHg3YywgMHhiMiwgMHgyMywgCisgICAgMHgwYSwgMHgwYiwgMHhjYSwgMHgxOSwgMHg0OSwgMHgwMCwgMHgzMCwgMHhkNSwgMHg5OSwgMHgwNCwgMHhkYSwgMHgxOSwgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgCisgICAgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHhjMiwgMHhkNywgMHgyMiwgMHg3ZSwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0YywgMHgwMiwgMHgwOSwgCisgICAgMHgzMCwgMHgwMCwgMHgwYywgMHg3NCwgMHhiZiwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwOCwgMHgxOSwgMHgzMCwgMHgwMCwgCisgICAgMHgwYywgMHg3YywgMHg3NCwgMHg1ZSwgMHg3MCwgMHgwMSwgMHg2OCwgMHgxMiwgMHg0NCwgMHg0MCwgMHhjYSwgMHhiOCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgxMCwgCisgICAgMHg0NCwgMHgwMiwgMHgxOSwgMHhiMCwgMHgwMCwgMHgxMCwgMHhkYSwgMHhiOCwgMHg4MCwgMHgwMiwgMHg1NCwgMHhiZiwgMHg3YywgMHg3NCwgMHg1ZSwgMHg3MCwgCisgICAgMHgwOCwgMHg2OCwgMHgwNCwgMHg0NCwgMHgwOCwgMHg4MCwgMHgwMiwgMHg1NCwgMHhmNywgMHgwOSwgMHgzMCwgMHgwMCwgMHgwYywgMHhjYSwgMHhiOCwgMHg3NCwgCisgICAgMHhiZiwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgMHhkYSwgMHhiOCwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwOCwgMHgxOSwgMHgzMCwgMHgwMCwgMHgwYywgMHgwYSwgCisgICAgMHg2MiwgMHgwOSwgMHhiNiwgMHg2NywgMHg4ZSwgMHgzZSwgMHgyMCwgMHgwYSwgMHg2MiwgMHg3YywgMHg3NCwgMHg1ZSwgMHg3MCwgMHgwMiwgMHg2OCwgMHgyMCwgCisgICAgMHg0MiwgMHgyNywgMHhjYSwgMHhiOCwgMHg3NCwgMHg2MSwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwOCwgMHg3ZSwgMHg0NCwgMHgwMCwgMHgxMCwgMHg1OSwgMHg0NiwgCisgICAgMHgwMSwgMHhiZiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgxMCwgMHg0NCwgMHgwMSwgMHgxOSwgMHhiMCwgMHgwMCwgMHgxMCwgMHhkYSwgMHhiOCwgMHg4MCwgMHgxMSwgCisgICAgMHhmNCwgMHg1MiwgMHgyNywgMHg3NCwgMHhhMSwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwOCwgMHg3ZSwgMHg0NCwgMHgwMCwgMHgzOCwgMHg1OSwgMHg0NiwgMHgwMSwgCisgICAgMHhiZiwgMHhkMCwgMHhhOCwgMHgyMiwgMHg3YywgMHg3NCwgMHg3ZSwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0YywgMHgwMiwgMHgwYSwgMHg2MiwgMHgwOSwgMHhiNiwgCisgICAgMHg2NywgMHg4ZSwgMHhhNSwgMHhmZCwgMHhmNCwgMHhhNSwgMHhmZSwgMHhjYSwgMHgyOCwgMHgzZSwgMHgyMCwgMHgwYSwgMHg2MiwgMHhhNSwgMHhlZSwgMHg1MiwgCisgICAgMHgyNiwgMHg3ZSwgMHg0NCwgMHgwMCwgMHgyMCwgMHg1OSwgMHg0NiwgMHgwMSwgMHhhZiwgMHhkYSwgMHgyOCwgMHgwOSwgMHgzMCwgMHgwMCwgMHgwYywgMHg3NCwgCisgICAgMHhiZiwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwOCwgMHg3YywgMHg3NCwgMHg1ZSwgMHg3MCwgMHgwMSwgMHg2OCwgMHgwYywgCisgICAgMHg0NCwgMHg4MCwgMHhjYSwgMHhiOCwgMHhhNSwgMHhlZCwgMHg0MiwgMHgyYSwgMHhkYSwgMHhiOCwgMHg4MCwgMHgwYSwgMHg1NCwgMHg3ZiwgMHhjYSwgMHhiOCwgCisgICAgMHhhNSwgMHhlZSwgMHg1MiwgMHgyYSwgMHhkYSwgMHhiOCwgMHg3YywgMHg3NCwgMHg1ZSwgMHg3MCwgMHgwOCwgMHg2OCwgMHgwNCwgMHg0NCwgMHgwMiwgMHg4MCwgCisgICAgMHgwMiwgMHg1NCwgMHhmZCwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwOCwgMHgxOSwgMHgzMCwgMHgwMCwgMHgwYywgMHg3YywgMHg3NCwgMHg1ZSwgMHg3MCwgMHgwMiwgCisgICAgMHg2OCwgMHgxMCwgMHhhNSwgMHhlZCwgMHg0MiwgMHgyOCwgMHg0MiwgMHgyNiwgMHg3ZSwgMHg0NCwgMHgwMCwgMHgwOCwgMHg1OSwgMHg0NiwgMHgwMSwgMHhhZiwgCisgICAgMHg4MCwgMHgwNCwgMHhhNSwgMHhlZSwgMHg1MiwgMHgyOCwgMHg3YywgMHg3NCwgMHg1ZSwgMHg3MCwgMHgwNCwgMHg2OCwgMHgxMCwgMHhhNSwgMHhlZCwgMHg0MiwgCisgICAgMHgyOSwgMHg0MiwgMHgyNiwgMHg3ZSwgMHg0NCwgMHgwMCwgMHgwOCwgMHg1OSwgMHg0NiwgMHgwMSwgMHhhZiwgMHg4MCwgMHgwYiwgMHhhNSwgMHhlZSwgMHg1MiwgCisgICAgMHgyOSwgMHg3YywgMHg3NCwgMHg1ZSwgMHg3MCwgMHgwMiwgMHg3OCwgMHgwMCwgMHgxMiwgMHg0MiwgMHhhZCwgMHhkMCwgMHhhOCwgMHgyMiwgMHg3ZSwgMHgwNCwgCisgICAgMHg4MCwgMHgwMCwgMHg0YywgMHgwMiwgMHgwOSwgMHgzMCwgMHgwMCwgMHgwYywgMHg3NCwgMHhiZiwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgMHgxOSwgMHg0MCwgCisgICAgMHgwMCwgMHgxMCwgMHgxOSwgMHgzMCwgMHgwMCwgMHgwYywgMHhkMCwgMHhhOCwgMHgyMiwgMHg3ZSwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0YywgMHgwMiwgMHgwOSwgCisgICAgMHgzMCwgMHgwMCwgMHgwYywgMHg3NCwgMHhiZiwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgMHgxOSwgMHg0MCwgMHgwMCwgMHgxOCwgMHgxOSwgMHgzMCwgMHgwMCwgCisgICAgMHgwYywgMHhkMCwgMHhhOCwgMHgyMiwgMHg3NSwgMHgzMSwgMHhiNSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0YywgMHgwMiwgCisgICAgMHgwOSwgMHhiMCwgMHgwMCwgMHgwYywgMHg0NCwgMHg0MCwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgMHhlNSwgMHg2ZSwgMHhiNCwgMHgwNywgMHgyMywgMHgwOSwgCisgICAgMHhiMCwgMHgwMCwgMHgxMCwgMHg0ZSwgMHhiMCwgMHgwMiwgMHgxOSwgMHhiMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgzMCwgMHgwMCwgMHgwYywgMHg3NCwgMHhiZiwgCisgICAgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmNywgMHgxOSwgMHhiMCwgMHgwMCwgMHgwNCwgMHgxOSwgMHgzMCwgCisgICAgMHgwMCwgMHgwYywgMHhkMCwgMHhhOCwgMHgyMiwgMHg3NSwgMHgzMSwgMHhiNiwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0YywgCisgICAgMHgwMiwgMHhlNSwgMHg2ZSwgMHhiNCwgMHgwNywgMHgxOCwgMHgwOSwgMHgzMCwgMHgwMCwgMHgwYywgMHg3NCwgMHhiZiwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgCisgICAgMHgwOSwgMHhiMCwgMHgwMCwgMHgwNCwgMHg0NCwgMHgwOCwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwNCwgMHgxOSwgMHgzMCwgMHgwMCwgMHgwYywgMHgwOSwgMHhiMCwgCisgICAgMHgwMCwgMHgwYywgMHg1NCwgMHhiZiwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgMHhkMCwgMHhhOCwgMHgyMiwgMHg3NSwgMHgzMSwgMHhiNCwgMHgxMiwgMHg3YywgCisgICAgMHgxNSwgMHg3YSwgMHgyMSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg0MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgwYSwgMHgzMiwgMHgwOSwgCisgICAgMHhiMywgMHg2NywgMHg4ZSwgMHg0MiwgMHgzNSwgMHgxMiwgMHg2YywgMHg1YiwgMHhkMCwgMHhhOCwgMHgyMiwgMHg3ZSwgMHhiMCwgMHgwMSwgMHg3ZSwgMHhhMCwgCisgICAgMHhjOCwgMHg3YywgMHg2NCwgMHgxMiwgMHg2MiwgMHhiNiwgMHg0MCwgMHgxMywgMHgwYSwgMHgzMiwgMHgwOSwgMHhiMywgMHg2NywgMHg4ZSwgMHhmNCwgMHg1MiwgCisgICAgMHgzNSwgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgMHg2YywgMHg4YywgMHg2YywgMHhkMywgCisgICAgMHg2ZCwgMHgxYSwgMHg2ZCwgMHg2MSwgMHg2ZCwgMHhhOCwgMHg2ZCwgMHhlZiwgMHg2ZSwgMHgzNiwgMHg2ZSwgMHg3ZCwgMHg3NSwgMHgzMSwgMHg1NSwgMHgxMiwgCisgICAgMHg3YywgMHgxNSwgMHg3NSwgMHgzMSwgMHgwMCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg2MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg3MSwgCisgICAgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHgxNywgMHgwMSwgMHg3ZiwgMHg3ZSwgMHgyNywgMHgwMSwgMHg4ZiwgMHgyZCwgMHgyMywgMHg3ZSwgMHgwOSwgCisgICAgMHhiMCwgMHgwYiwgMHgwNCwgMHg3YSwgMHgxOSwgMHhiMCwgMHgwYiwgMHgxNCwgMHhiZSwgMHgxNCwgMHgwZCwgMHhlMiwgMHgzOCwgMHgwZiwgMHgxYiwgMHgzNCwgCisgICAgMHg3OCwgMHhlYywgMHg3YSwgMHgxNywgMHgwMSwgMHg3ZiwgMHg3YSwgMHgyNywgMHgwMSwgMHg4ZiwgMHgwMiwgMHg0NiwgMHgwZiwgMHg3ZSwgMHgxNCwgMHgwOSwgCisgICAgMHhlMywgMHg4MCwgMHhlYiwgMHg3NSwgMHgzMSwgMHg1NSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3NSwgMHgzMSwgMHgwMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgCisgICAgMHg2MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg3MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHgxNywgMHgwMSwgMHg4MSwgMHg3ZSwgCisgICAgMHgyNywgMHgwMSwgMHg5MSwgMHgyZCwgMHgyMywgMHg3ZSwgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHg3YSwgMHgxOSwgMHhiMCwgMHgwYiwgMHgxNCwgMHhiZSwgCisgICAgMHgxNCwgMHgxMSwgMHhlMiwgMHgzOCwgMHgwZiwgMHgxYiwgMHgzNCwgMHg3OCwgMHhlYywgMHg3YSwgMHgxNywgMHgwMSwgMHg4MSwgMHg3YSwgMHgyNywgMHgwMSwgCisgICAgMHg5MSwgMHgwMiwgMHg0OSwgMHg2NywgMHg3ZSwgMHgxNCwgMHgwZCwgMHhlMywgMHg4MCwgMHhlYiwgMHg3NSwgMHgzMSwgMHg1NSwgMHgxMiwgMHg3YywgMHgxNSwgCisgICAgMHg3NSwgMHgzMSwgMHgwMiwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg2MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg3MSwgMHgzMSwgMHgxMiwgCisgICAgMHg3YywgMHgxNSwgMHg3ZSwgMHgxNywgMHgwMSwgMHg4MywgMHg3ZSwgMHgyNywgMHgwMSwgMHg5MywgMHgyZCwgMHgyMywgMHg3ZSwgMHgwOSwgMHhiMCwgMHgwYiwgCisgICAgMHgwNCwgMHg3YSwgMHgxOSwgMHhiMCwgMHgwYiwgMHgxNCwgMHhiZSwgMHgxNCwgMHgxNSwgMHhlMiwgMHgzOCwgMHgwZiwgMHgxYiwgMHgzNCwgMHg3OCwgMHhlYywgCisgICAgMHg3YSwgMHgxNywgMHgwMSwgMHg4MywgMHg3YSwgMHgyNywgMHgwMSwgMHg5MywgMHgwMiwgMHg0YywgMHhiZiwgMHg3ZSwgMHgxNCwgMHgxMSwgMHhlMywgMHg4MCwgCisgICAgMHhlYiwgMHg3NSwgMHgzMSwgMHg1NSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3NSwgMHgzMSwgMHgwMywgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg2MSwgMHgzMSwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg3MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHgxNywgMHgwMSwgMHg4NSwgMHg3ZSwgMHgyNywgMHgwMSwgCisgICAgMHg5NSwgMHgyZCwgMHgyMywgMHg3ZSwgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHg3YSwgMHgxOSwgMHhiMCwgMHgwYiwgMHgxNCwgMHhiZSwgMHgxNCwgMHgxOSwgCisgICAgMHhlMiwgMHgzOCwgMHgwZiwgMHgxYiwgMHgzNCwgMHg3OCwgMHhlYywgMHg3YSwgMHgxNywgMHgwMSwgMHg4NSwgMHg3YSwgMHgyNywgMHgwMSwgMHg5NSwgMHgwMiwgCisgICAgMHg1MCwgMHgxNywgMHg3ZSwgMHgxNCwgMHgxNSwgMHhlMywgMHg4MCwgMHhlYiwgMHg3NSwgMHgzMSwgMHg1NSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3NSwgMHgzMSwgCisgICAgMHgwNCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg2MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg3MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgCisgICAgMHg3ZSwgMHgxNywgMHgwMSwgMHg4NywgMHg3ZSwgMHgyNywgMHgwMSwgMHg5NywgMHgyZCwgMHgyMywgMHg3ZSwgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHg3YSwgCisgICAgMHgxOSwgMHhiMCwgMHgwYiwgMHgxNCwgMHhiZSwgMHgxNCwgMHgxZCwgMHhlMiwgMHgzOCwgMHgwZiwgMHgxYiwgMHgzNCwgMHg3OCwgMHhlYywgMHg3YSwgMHgxNywgCisgICAgMHgwMSwgMHg4NywgMHg3YSwgMHgyNywgMHgwMSwgMHg5NywgMHgwMiwgMHg1MywgMHg2ZiwgMHg3ZSwgMHgxNCwgMHgxOSwgMHhlMywgMHg4MCwgMHhlYiwgMHg3NSwgCisgICAgMHgzMSwgMHg1NSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3NSwgMHgzMSwgMHgwNSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg2MSwgMHgzMSwgMHgxMiwgMHg3YywgCisgICAgMHgxNSwgMHg3YSwgMHg3MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHgxNywgMHgwMSwgMHg4OSwgMHg3ZSwgMHgyNywgMHgwMSwgMHg5OSwgMHgyZCwgCisgICAgMHgyMywgMHg3ZSwgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHg3YSwgMHgxOSwgMHhiMCwgMHgwYiwgMHgxNCwgMHhiZSwgMHgxNCwgMHgyMSwgMHhlMiwgMHgzOCwgCisgICAgMHgwZiwgMHgxYiwgMHgzNCwgMHg3OCwgMHhlYywgMHg3YSwgMHgxNywgMHgwMSwgMHg4OSwgMHg3YSwgMHgyNywgMHgwMSwgMHg5OSwgMHgwMiwgMHg1NiwgMHhjNywgCisgICAgMHg3ZSwgMHgxNCwgMHgxZCwgMHhlMywgMHg4MCwgMHhlYiwgMHg3NSwgMHgzMSwgMHg1NSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3NSwgMHgzMSwgMHgwNiwgMHgxMiwgCisgICAgMHg3YywgMHgxNSwgMHg3YSwgMHg2MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg3MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHgxNywgCisgICAgMHgwMSwgMHg4YiwgMHg3ZSwgMHgyNywgMHgwMSwgMHg5YiwgMHgyZCwgMHgyMywgMHg3ZSwgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHg3YSwgMHgxOSwgMHhiMCwgCisgICAgMHgwYiwgMHgxNCwgMHhiZSwgMHgxNCwgMHgyNSwgMHhlMiwgMHgzOCwgMHgwZiwgMHgxYiwgMHgzNCwgMHg3OCwgMHhlYywgMHg3YSwgMHgxNywgMHgwMSwgMHg4YiwgCisgICAgMHg3YSwgMHgyNywgMHgwMSwgMHg5YiwgMHgwMiwgMHg1YSwgMHgxZiwgMHg3ZSwgMHgxNCwgMHgyMSwgMHhlMywgMHg4MCwgMHhlYiwgMHg3NSwgMHgzMSwgMHg1NSwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHg3NSwgMHgzMSwgMHgwNywgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg2MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgCisgICAgMHg3MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHgxNywgMHgwMSwgMHg4ZCwgMHg3ZSwgMHgyNywgMHgwMSwgMHg5ZCwgMHgyZCwgMHgyMywgMHg3ZSwgCisgICAgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHg3YSwgMHgxOSwgMHhiMCwgMHgwYiwgMHgxNCwgMHhiZSwgMHgxNCwgMHgyOSwgMHhlMiwgMHgzOCwgMHgwZiwgMHgxYiwgCisgICAgMHgzNCwgMHg3OCwgMHhlYywgMHg3YSwgMHgxNywgMHgwMSwgMHg4ZCwgMHg3YSwgMHgyNywgMHgwMSwgMHg5ZCwgMHgwMiwgMHg1ZCwgMHg3NywgMHg3ZSwgMHgxNCwgCisgICAgMHgyNSwgMHhlMywgMHg4MCwgMHhlYiwgMHhjYSwgMHhiOCwgMHhjMCwgMHhmMSwgMHg3NSwgMHgzMSwgMHgwMiwgMHgxMiwgMHg3YywgMHgxNSwgMHhlNSwgMHhjMCwgCisgICAgMHg1NCwgMHgwMywgMHg2OCwgMHgwNSwgMHgxMiwgMHg3NSwgMHhjZCwgMHg4MCwgMHhmNSwgMHgzMCwgMHhjMiwgMHgwOCwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgCisgICAgMHg2ZiwgMHhkOSwgMHg4MCwgMHgxNCwgMHgzMCwgMHhjMywgMHgwOCwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZSwgMHhmZCwgMHg4MCwgMHgwOSwgMHgzMCwgCisgICAgMHhjNCwgMHgwNiwgMHg3NSwgMHhmMSwgMHgwMiwgMHgxMiwgMHg3MCwgMHhlOSwgMHhkMCwgMHhmMSwgMHhkYSwgMHhiOCwgMHgzMiwgMHg3NSwgMHgzMSwgMHgxMCwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHhjYSwgMHgwYiwgMHhjYSwgMHgzOSwgMHhjYSwgMHg1OSwgMHhjMiwgMHhjMywgMHhhOSwgMHgyMSwgMHhlMiwgMHg1YywgMHhlNSwgCisgICAgMHhlNSwgMHg1NCwgMHhjMCwgMHg2OCwgMHg0ZiwgMHhlNSwgMHhlNiwgMHg2YywgMHhhYSwgMHg3ZSwgMHgzNywgMHgwMSwgMHhkYiwgMHgyZCwgMHgzNSwgMHhiZSwgCisgICAgMHgzNCwgMHgwNCwgMHgwMCwgMHgzOCwgMHg0YSwgMHg3YSwgMHgzNywgMHgwMSwgMHhkYiwgMHg3ZSwgMHgzNywgMHgwMSwgMHhkOSwgMHg3ZCwgMHg0MywgMHgyZCwgCisgICAgMHg0NSwgMHhiZSwgMHg0NCwgMHgwOSwgMHhlMiwgMHgzOCwgMHg0MCwgMHg3YSwgMHg0NywgMHgwMSwgMHhkOSwgMHg3NSwgMHgzMSwgMHgxMSwgMHgxMiwgMHg3YywgCisgICAgMHgxNSwgMHg3YSwgMHhiMSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgxMiwgMHg3MSwgMHhiOCwgMHhhOSwgMHgyMSwgMHhlNSwgMHgxZiwgMHhhOSwgMHhkNCwgCisgICAgMHhlNCwgMHhhOSwgMHgyNCwgMHhlNCwgMHhmYywgMHhjMiwgMHhjMywgMHhhOSwgMHgyMSwgMHhlMiwgMHgzYiwgMHhlNSwgMHhlNSwgMHg1NCwgMHhjMCwgMHg3OCwgCisgICAgMHhiNCwgMHgxMiwgMHg3NCwgMHg1YSwgMHhkYSwgMHg1OSwgMHhkYSwgMHgzOSwgMHhkYSwgMHgwYiwgMHgyMiwgMHg4MCwgMHgyOSwgMHg4MCwgMHg1OCwgMHg3NSwgCisgICAgMHgzMSwgMHgxNiwgMHgxMiwgMHg3YywgMHgxNSwgMHg4MCwgMHhlZCwgMHg3NSwgMHgzMSwgMHgxMiwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHhiMSwgMHgzMSwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHg5ZSwgMHg0NCwgMHgwOSwgMHhlMywgMHg5ZCwgMHg1NCwgMHgxMiwgMHg3MSwgMHhiOCwgMHg3ZSwgMHgzNCwgMHgwNSwgMHhlMywgCisgICAgMHg3ZCwgMHg1NCwgMHgyZCwgMHg0MywgMHg4MCwgMHhhMSwgMHhlNSwgMHhlNSwgMHg1NCwgMHgwMywgMHg3OCwgMHgxMiwgMHg3NSwgMHgzMSwgMHgxMywgMHgxMiwgCisgICAgMHg3YywgMHgxNSwgMHg3ZSwgMHgwZiwgMHgyOSwgMHhmZiwgMHgwYiwgMHgwYywgMHg3YSwgMHgwZiwgMHgyOSwgMHhmZiwgMHg4MCwgMHhhNywgMHg3NSwgMHgzMSwgCisgICAgMHgxNCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHgwZiwgMHgyYSwgMHgwMywgMHgwYiwgMHgwYywgMHg3YSwgMHgwZiwgMHgyYSwgMHgwMywgMHhhOSwgMHhkNywgCisgICAgMHhlNCwgMHhhOSwgMHgyNywgMHhlNCwgMHhmYywgMHg4MCwgMHg5ZCwgMHg3NSwgMHgzMSwgMHgxNSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHgwZiwgMHgyYSwgCisgICAgMHgwNywgMHgwYiwgMHgwYywgMHg3YSwgMHgwZiwgMHgyYSwgMHgwNywgMHg4MCwgMHhlNSwgMHg3NSwgMHgzMSwgMHgxOCwgMHgxMiwgMHg3YywgMHgxNSwgMHhjYSwgCisgICAgMHgwOSwgMHhjYSwgMHgzOSwgMHhjYSwgMHgyYiwgMHhjMiwgMHhjMiwgMHhhOSwgMHgyMSwgMHhmMiwgMHg1MiwgMHhlNSwgMHhmNSwgMHgzMywgMHg4MiwgMHhlNywgCisgICAgMHg0MCwgMHg0NCwgMHg3ZSwgMHgzNywgMHgwMSwgMHhlMSwgMHg3ZSwgMHg1NCwgMHgwMCwgMHg0MCwgMHg5ZCwgMHgzNSwgMHg0MCwgMHg0MywgMHg3YSwgMHgzNywgCisgICAgMHgwMSwgMHhlMSwgMHg3ZSwgMHgzNywgMHgwMSwgMHhkZCwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0NSwgMHhiZSwgMHg0NCwgMHgwNSwgMHhlMiwgMHgzOCwgMHg1MiwgCisgICAgMHg3YSwgMHg0NywgMHgwMSwgMHhkZCwgMHg3ZCwgMHg0NSwgMHgxMiwgMHg3MywgMHgxNiwgMHhhOSwgMHgyMCwgMHhmNSwgMHgyMiwgMHg3NSwgMHgzMSwgMHgxOSwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg5MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg4MSwgMHhmNywgMHg3YSwgMHg5MSwgMHhmNiwgMHhlNSwgCisgICAgMHhmNSwgMHgzMywgMHg4MiwgMHhlNywgMHg1MCwgMHhiYywgMHhkYSwgMHgyYiwgMHhkYSwgMHgzOSwgMHhkYSwgMHgwOSwgMHgyMiwgMHg4MCwgMHg0MSwgMHg4MCwgCisgICAgMHg2NCwgMHgyZCwgMHg1MywgMHg2ZCwgMHgzMywgMHg3MCwgMHhiNywgMHg3ZSwgMHgwNCwgMHgwMSwgMHhlMywgMHg3YSwgMHgwNywgMHgwMSwgMHhkZiwgMHg3YSwgCisgICAgMHgwNywgMHgwMSwgMHhkZCwgMHhhOSwgMHgzMiwgMHhmMiwgMHhkZiwgMHg4NSwgMHgzMCwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3NSwgMHhmNiwgMHgwMCwgCisgICAgMHg4MCwgMHhkNCwgMHhjYSwgMHg1OSwgMHg5ZSwgMHg0NCwgMHgwNSwgMHhlMywgMHg5ZCwgMHg1NCwgMHgxMiwgMHg3MywgMHgxNiwgMHg3ZSwgMHgzNCwgMHgwMSwgCisgICAgMHhlMywgMHg3ZCwgMHg1NCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhkZCwgMHgxMiwgMHg3MywgMHgxNiwgMHhkYSwgMHg0OSwgMHg4MCwgMHg5OSwgCisgICAgMHhlNSwgMHhmNSwgMHg1NCwgMHgwMywgMHg3OCwgMHgxZiwgMHg3ZSwgMHgwZiwgMHgyOSwgMHhlZiwgMHgwYiwgMHgwYywgMHg3YSwgMHgwZiwgMHgyOSwgMHhlZiwgCisgICAgMHg4MCwgMHg5ZCwgMHg3ZSwgMHgwZiwgMHgyOSwgMHhmNywgMHgwYiwgMHgwYywgMHg3YSwgMHgwZiwgMHgyOSwgMHhmNywgMHhhOSwgMHhkNywgMHhmNCwgMHhhOSwgCisgICAgMHgyNywgMHhmNCwgMHhmYywgMHg4MCwgMHg4YSwgMHg3ZSwgMHgwZiwgMHgyOSwgMHhmMywgMHgwYiwgMHgwYywgMHg3YSwgMHgwZiwgMHgyOSwgMHhmMywgMHg4MCwgCisgICAgMHhlYiwgMHhlNSwgMHhmNSwgMHg1NCwgMHgwMywgMHg3OCwgMHgxZiwgMHg3ZSwgMHgyZiwgMHgyYSwgMHgwZiwgMHgwYiwgMHgyYywgMHg3YSwgMHgyZiwgMHgyYSwgCisgICAgMHgwZiwgMHg4MCwgMHgzNCwgMHg3ZSwgMHgyZiwgMHgyYSwgMHgxNywgMHgwYiwgMHgyYywgMHg3YSwgMHgyZiwgMHgyYSwgMHgxNywgMHhhOSwgMHhkNywgMHhmNCwgCisgICAgMHhhOSwgMHgyNywgMHhmNCwgMHhmYywgMHg4MCwgMHgyMSwgMHg3ZSwgMHgyZiwgMHgyYSwgMHgxMywgMHgwYiwgMHgyYywgMHg3YSwgMHgyZiwgMHgyYSwgMHgxMywgCisgICAgMHg4MCwgMHhlYiwgMHhkYSwgMHgyYiwgMHhkYSwgMHgxYiwgMHhkYSwgMHgwYiwgMHgyMiwgMHg3NSwgMHgzMSwgMHgyOCwgMHgxMiwgMHg3YywgMHgxNSwgMHhjYSwgCisgICAgMHgwYiwgMHhjYSwgMHgxYiwgMHhjYSwgMHgyYiwgMHhjMiwgMHhjNCwgMHhhOSwgMHgyMSwgMHhmMiwgMHhiNiwgMHhlNSwgMHhmNSwgMHgzMywgMHg3MiwgMHhlNywgCisgICAgMHg0MCwgMHhlMCwgMHg3ZSwgMHgwZCwgMHg0NiwgMHg3ZSwgMHgxZCwgMHg0YSwgMHg3ZSwgMHgyZCwgMHg0ZSwgMHg3ZSwgMHgzZCwgMHg1MiwgMHg3ZSwgMHg4NSwgCisgICAgMHg1NiwgMHg3ZCwgMHg5MCwgMHg0ZCwgMHg5MSwgMHg0ZCwgMHg5MiwgMHg0ZCwgMHg5MywgMHg0ZCwgMHg5NCwgMHg0ZCwgMHg5NSwgMHg0ZCwgMHg5NiwgMHg0ZCwgCisgICAgMHg5NywgMHg0ZCwgMHg5OCwgMHg2OCwgMHg3MiwgMHg3YSwgMHgxMSwgMHhmMywgMHg3YSwgMHgwMSwgMHhmMywgMHg3YSwgMHgzMSwgMHhmMywgMHg3YSwgMHgyMSwgCisgICAgMHhmMywgMHg3YSwgMHg1MSwgMHhmMywgMHg3YSwgMHg0MSwgMHhmMywgMHg3YSwgMHg3MSwgMHhmMywgMHg3YSwgMHg2MSwgMHhmMywgMHg3YSwgMHg5MSwgMHhmMywgCisgICAgMHg3YSwgMHg4MSwgMHhmMywgMHgzMCwgMHg3YiwgMHgxYSwgMHg3YSwgMHhiMSwgMHhmMywgMHg3YSwgMHhhMSwgMHhmMywgMHg3YSwgMHhkMSwgMHhmMywgMHg3YSwgCisgICAgMHhjMSwgMHhmMywgMHg3YSwgMHhmMSwgMHhmMywgMHg3YSwgMHhlMSwgMHhmMywgMHg3ZCwgMHg3OCwgMHg3YSwgMHhmMSwgMHhmMywgMHg3YSwgMHhlMSwgMHhmMywgCisgICAgMHhhOSwgMHgzMCwgMHhmNSwgMHgwMywgMHgwMiwgMHg3MCwgMHhkNiwgMHg3NSwgMHgzMSwgMHgyOSwgMHgxMiwgMHg3YywgMHgxNSwgMHgyMCwgMHg3YiwgMHgwYiwgCisgICAgMHg3NSwgMHgzMSwgMHgwYSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3NSwgMHhmNiwgMHgwYSwgMHg4MCwgMHgwOSwgMHg3NSwgMHgzMSwgMHgxMiwgMHgxMiwgMHg3YywgCisgICAgMHgxNSwgMHg3NSwgMHhmNiwgMHgxMiwgMHg2ZCwgMHgwMCwgMHg3ZCwgMHgxMCwgMHg3YSwgMHgwZCwgMHg0NiwgMHg3YSwgMHgwZCwgMHg0YSwgMHg3YSwgMHgwZCwgCisgICAgMHg0ZSwgMHg3YSwgMHgwZCwgMHg1MiwgMHg3YSwgMHgwNSwgMHg1NiwgMHhkYSwgMHgyYiwgMHhkYSwgMHgxYiwgMHhkYSwgMHgwYiwgMHgyMiwgMHgxZSwgMHhiMCwgCisgICAgMHg0MCwgMHgwYywgMHg3ZSwgMHhhMCwgMHgwYSwgMHhhNCwgMHg3ZSwgMHgwNCwgMHg3MiwgMHhmYiwgMHg5ZCwgMHgwNSwgMHg4OSwgMHgwNCwgMHg3ZSwgMHhhMSwgCisgICAgMHhlMywgMHg3YSwgMHgzOSwgMHhhMCwgMHgwYiwgMHgzNCwgMHg4MCwgMHhlYSwgMHhiNCwgMHg0MCwgMHhlMywgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgCisgICAgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgCisgICAgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgCisgICAgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgCisgICAgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgCisgICAgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgCisgICAgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgCisgICAgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgCisgICAgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgCisgICAgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgCisgICAgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgCisgICAgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgCisgICAgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgCisgICAgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgCisgICAgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgCisgICAgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgCisgICAgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgCisgICAgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgCisgICAgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgCisgICAgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgCisgICAgMHgzNSwgMHg3ZSwgMHhhMSwgMHhlMywgMHhlNSwgMHhlMywgMHgxYiwgMHgzOCwgMHg1MCwgMHgwYiwgMHgzNSwgMHgyMiwgMHgxZSwgMHhiMCwgMHg0MCwgMHgwYywgCisgICAgMHg3ZSwgMHhhMCwgMHgwYSwgMHhhNCwgMHg3ZSwgMHgwNCwgMHg3NCwgMHg1OSwgMHg5ZCwgMHgwNSwgMHg4OSwgMHgwNCwgMHg3ZSwgMHgzOSwgMHhhMCwgMHg3YSwgCisgICAgMHhhMSwgMHhmMywgMHgwYiwgMHgzNCwgMHg4MCwgMHhlYSwgMHhiNCwgMHg0MCwgMHhlMywgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgCisgICAgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgCisgICAgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgCisgICAgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgCisgICAgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgCisgICAgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgCisgICAgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgCisgICAgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgCisgICAgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgCisgICAgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgCisgICAgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgCisgICAgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgCisgICAgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgCisgICAgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgCisgICAgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgCisgICAgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgCisgICAgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgCisgICAgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgCisgICAgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgCisgICAgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgwYiwgCisgICAgMHgzOCwgMHg1MCwgMHg3YSwgMHhhMSwgMHhmMywgMHhmNSwgMHhmMywgMHgwYiwgMHgzNSwgMHgyMiwgMHhjMiwgMHhhZiwgMHg3ZSwgMHgzNywgMHgwMSwgMHhkYiwgCisgICAgMHg0ZCwgMHgzMywgMHg2OCwgMHgzYiwgMHg3ZSwgMHgwNywgMHgwMSwgMHhkNywgMHg3ZSwgMHg1NCwgMHgwOSwgMHhlMywgMHg5ZCwgMHg1MCwgMHhiZCwgMHgzNSwgCisgICAgMHg0MCwgMHgwMiwgMHg3ZCwgMHgzNSwgMHhjYSwgMHgzOSwgMHg3ZSwgMHg2NSwgMHg2MSwgMHg5OSwgMHg2NCwgMHhkYSwgMHgzOSwgMHg3ZSwgMHgwNywgMHgwMSwgCisgICAgMHhkYiwgMHg5ZCwgMHgwMywgMHg3YSwgMHgwNywgMHgwMSwgMHhkYiwgMHgyZSwgMHgzNywgMHgwMSwgMHhkNywgMHg3YSwgMHgzNywgMHgwMSwgMHhkNywgMHhiZSwgCisgICAgMHgzNCwgMHgwOSwgMHhlMiwgMHgyOCwgMHhjNywgMHg3ZSwgMHgzNCwgMHgwNSwgMHhlMywgMHg3YSwgMHgzNywgMHgwMSwgMHhkNywgMHg4MCwgMHhiZCwgMHhkMiwgCisgICAgMHhhZiwgMHgyMiwgMHg3NSwgMHgzMSwgMHg1MywgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHgxNSwgMHg2MywgMHg4MCwgMHgxMSwgMHg3NSwgMHgzMSwgMHg1MSwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHgwYiwgMHgwOCwgMHgxMCwgMHgwYiwgMHgwNSwgMHg5ZSwgMHgzNCwgMHgwMCwgMHgwMiwgMHgyOCwgMHg0ZCwgMHg3YywgMHhiMiwgCisgICAgMHgyMCwgMHhlNywgMHgyNywgMHg1NCwgMHgwNywgMHgyMywgMHgwYSwgMHgyYiwgMHg0OSwgMHgyMiwgMHg2YywgMHg3YywgMHg3YywgMHhiMiwgMHg1NCwgMHg3OCwgCisgICAgMHgwMywgMHgwMywgMHgwMywgMHg3YywgMHgyYiwgMHg5ZCwgMHgxMywgMHg0MCwgMHgxYSwgMHg2OCwgMHgxMiwgMHg3YSwgMHgxNSwgMHg2MywgMHg3YSwgMHgyNSwgCisgICAgMHg2NSwgMHg3ZSwgMHg2NCwgMHg3NSwgMHgzNywgMHg3YSwgMHg2NSwgMHg2MSwgMHg4OSwgMHgyNCwgMHgwMiwgMHg3NSwgMHg0NSwgMHg3ZSwgMHg2NCwgMHg3NCwgCisgICAgMHhhZCwgMHg4MCwgMHhmMiwgMHgyZCwgMHgxMywgMHg5ZCwgMHgzMSwgMHhjYSwgMHgzOSwgMHg3ZCwgMHgzMSwgMHgyZCwgMHgxMCwgMHhjYSwgMHgxOSwgMHhjYSwgCisgICAgMHgyOSwgMHg5OSwgMHgyNCwgMHhkYSwgMHgyOSwgMHhkYSwgMHgwOSwgMHhkYSwgMHgzOSwgMHg4MCwgMHhhMiwgMHg3YSwgMHgxNSwgMHg2MywgMHg3ZSwgMHg2NCwgCisgICAgMHg3NSwgMHgyMywgMHg0ZCwgMHgzMywgMHg3OCwgMHgwOSwgMHg3YywgMHhiMiwgMHgyMCwgMHhlNywgMHgyYSwgMHg3ZSwgMHg2NCwgMHg3NCwgMHhhMiwgMHg3YSwgCisgICAgMHg2NSwgMHg2MSwgMHgyMiwgMHg3NSwgMHgzMSwgMHg1MiwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHgyMSwgMHg2MywgMHg3ZSwgMHgwOSwgMHgzMCwgMHgwYiwgCisgICAgMHgwNCwgMHgxYiwgMHgzNCwgMHg3OCwgMHg4OSwgMHg4MCwgMHhkNCwgMHg3NSwgMHgzMSwgMHg1NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHgxNSwgMHg2MywgCisgICAgMHg3ZSwgMHgyNSwgMHg2NSwgMHg4MCwgMHg5MCwgMHg1ZSwgMHgyMCwgMHgwNywgMHg1NCwgMHg3OCwgMHg3ZSwgMHg0NCwgMHg3NSwgMHhjMSwgMHgzMCwgMHhlNiwgCisgICAgMHgxNiwgMHg0ZCwgMHgzMywgMHg2OCwgMHgyNiwgMHgxYiwgMHgzNCwgMHg3ZSwgMHgwOSwgMHg0MCwgMHgwYiwgMHgwNCwgMHg3ZSwgMHg0NCwgMHg2NywgMHg2MywgCisgICAgMHgyMCwgMHhlMywgMHgwNCwgMHg3ZSwgMHg0NCwgMHg3NSwgMHhjOSwgMHhjYSwgMHgwOSwgMHhjYSwgMHgzOSwgMHg5OSwgMHg0NCwgMHhkYSwgMHgzOSwgMHhkYSwgCisgICAgMHgwOSwgMHg3ZSwgMHg2NCwgMHg3NCwgMHhhZCwgMHg0ZCwgMHgzMywgMHg2OCwgMHhhNiwgMHg4OSwgMHg2NCwgMHg3YSwgMHgxNSwgMHg2MywgMHhmNSwgMHg2NSwgCisgICAgMHg3ZSwgMHg2NCwgMHg3NSwgMHg4NiwgMHg4MCwgMHg5OSwgMHg3ZSwgMHgxNSwgMHg2MywgMHhlNSwgMHg2NSwgMHg4MCwgMHhjNCwgMHhjMCwgMHhkMCwgMHhjMCwgCisgICAgMHhkMSwgMHhjMCwgMHhlMCwgMHhjYSwgMHgxOSwgMHhhOSwgMHgyMCwgMHhkZiwgMHgxMiwgMHhhOSwgMHgyMSwgMHhkZiwgMHgxYiwgMHg3NSwgMHgzMSwgMHgwMSwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHg1MywgMHhkZiwgMHhmNywgMHgxMiwgMHg0MCwgMHhkYywgMHg4MCwgMHgwZCwgMHg3NSwgMHgzMSwgMHhmZSwgMHgxMiwgMHg3YywgCisgICAgMHgxNSwgMHg3ZSwgMHgxNCwgMHgwMCwgMHg1MywgMHgwMiwgMHg0MCwgMHg1MSwgMHhkYSwgMHgxOSwgMHhkMCwgMHhlMCwgMHhkMCwgMHhkMSwgMHhkMCwgMHhkMCwgCisgICAgMHgzMiwgMHgwMywgMHhhNSwgMHhjYiwgMHgxOSwgMHhiMSwgMHg4MCwgMHgwMCwgMHgyMiwgMHgyMiwgMHgwMiwgMHg3NiwgMHg0MiwgMHhjYSwgMHgwYiwgMHhjYSwgCisgICAgMHgxYiwgMHhjYSwgMHgyYiwgMHhjYSwgMHgzYiwgMHhjYSwgMHg0YiwgMHhjYSwgMHg1YiwgMHhjYSwgMHg2YiwgMHhjYSwgMHg3YiwgMHhjYSwgMHhlYiwgMHhjMCwgCisgICAgMHhmMSwgMHg3ZSwgMHhiMywgMHgyYSwgMHgzMywgMHhiNCwgMHgwMCwgMHgwMiwgMHg4MCwgMHgxOSwgMHhiNCwgMHgwMSwgMHgxNiwgMHgzMCwgMHhjMCwgMHgwOCwgCisgICAgMHg3NSwgMHhmMSwgMHgwMCwgMHgxMiwgMHg3NiwgMHgyYywgMHg4MCwgMHgxZiwgMHgzMCwgMHhjMSwgMHgxYywgMHg3NSwgMHhmMSwgMHgwMCwgMHgxMiwgMHg3NiwgCisgICAgMHhiZCwgMHg4MCwgMHgxNCwgMHgzMCwgMHhjMSwgMHgwOCwgMHg3NSwgMHhmMSwgMHgwMCwgMHgxMiwgMHg3NiwgMHhiZCwgMHg4MCwgMHgwOSwgMHgzMCwgMHhjMCwgCisgICAgMHgwNiwgMHg3NSwgMHhmMSwgMHgwMCwgMHgxMiwgMHg3NiwgMHgyYywgMHhkMCwgMHhmMSwgMHhkYSwgMHhlYiwgMHhkYSwgMHg3YiwgMHhkYSwgMHg2YiwgMHhkYSwgCisgICAgMHg1YiwgMHhkYSwgMHg0YiwgMHhkYSwgMHgzYiwgMHhkYSwgMHgyYiwgMHhkYSwgMHgxYiwgMHhkYSwgMHgwYiwgMHgyMiwgMHhjMiwgMHhjMCwgMHg3ZSwgMHhiMywgCisgICAgMHgyYSwgMHgzMywgMHhiNCwgMHgwMiwgMHgwNywgMHgxMiwgMHg3NiwgMHg0ZSwgMHgwMiwgMHg3NiwgMHg0MiwgMHgyMiwgMHhiNCwgMHgwMSwgMHhmYywgMHgwMiwgCisgICAgMHg3NiwgMHg4OCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwMywgMHgyYSwgMHgzMywgMHg3YSwgMHgwMywgMHgyYSwgMHgzNCwgMHgyMiwgMHg3ZSwgMHhiMywgCisgICAgMHgyYSwgMHgyYiwgMHg1NCwgMHg2MCwgMHg2MCwgMHgwNSwgMHhiNCwgMHg0MCwgMHgxNSwgMHg4MCwgMHgxMywgMHg3ZSwgMHhiMywgMHgyYSwgMHgyYywgMHhiNCwgCisgICAgMHgwNSwgMHgwYywgMHg3NSwgMHgzMSwgMHg3MSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHhiMywgMHgyYSwgMHgyZSwgMHhmNSwgMHg4ZiwgMHgyMiwgMHg3NSwgCisgICAgMHhmNiwgMHgwMCwgMHgyMiwgMHhiZSwgMHg1NywgMHgyYSwgMHgzMSwgMHgyOCwgMHgwNCwgMHg3ZSwgMHg1NywgMHgyYSwgMHgzMSwgMHg3YSwgMHgwZiwgMHgyYSwgCisgICAgMHgzNiwgMHg3YSwgMHg1NywgMHgyYSwgMHgzYSwgMHgwMiwgMHg3NiwgMHg4OCwgMHg3ZSwgMHhlZiwgMHgyYSwgMHgzNiwgMHg3ZSwgMHhmNywgMHgyYSwgMHgzYSwgCisgICAgMHg3ZSwgMHgwNywgMHgyYSwgMHgzYSwgMHg0ZCwgMHgwMCwgMHg2OCwgMHgyMSwgMHg3ZSwgMHgwMCwgMHgwMCwgMHg3ZSwgMHhlYiwgMHhiMCwgMHhmNSwgMHhmMywgCisgICAgMHhhMywgMHhhNSwgMHgwOCwgMHgxYiwgMHhmNCwgMHg2OCwgMHgwNCwgMHhhNSwgMHhiOCwgMHgwOCwgMHhmMCwgMHg3YSwgMHhlZiwgMHgyYSwgMHgzNiwgMHg3YSwgCisgICAgMHhmNywgMHgyYSwgMHgzYSwgMHg3NSwgMHgzMSwgMHgwNiwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHgwMSwgMHhmNiwgMHgyMiwgMHhjMiwgMHhjMSwgMHg3NSwgCisgICAgMHgzMSwgMHgwMywgMHgxMiwgMHg3YywgMHgxNSwgMHhhOSwgMHgzNiwgMHhlMiwgMHgxNiwgMHhlNSwgMHhmNSwgMHg1NCwgMHhjMCwgMHg2OCwgMHgwNywgMHhhOSwgCisgICAgMHhkNywgMHhmNCwgMHhhOSwgMHgyNywgMHhmNCwgMHhmYywgMHg1MywgMHhlMSwgMHgzZiwgMHg0MywgMHhmMiwgMHg4OCwgMHgwMiwgMHg3NywgMHgyOSwgMHg3ZSwgCisgICAgMHhiMywgMHgyYSwgMHgzNCwgMHhiNCwgMHgwMiwgMHgwNCwgMHhhOSwgMHhkNCwgMHhlNCwgMHgyMiwgMHhiNCwgMHgwMSwgMHgzOSwgMHg3ZSwgMHgyMSwgMHhlNiwgCisgICAgMHg3YywgMHgzMiwgMHg3ZSwgMHgxMywgMHgyYSwgMHgzNSwgMHgyYywgMHgyMSwgMHg3YSwgMHgyMywgMHgyYSwgMHgzNSwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgyZSwgCisgICAgMHgwNCwgMHgyYSwgMHgzYywgMHhlNSwgMHhlMywgMHg3YSwgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHhhNSwgMHhkYiwgMHhmNiwgMHhhOSwgMHhkNCwgMHhlNCwgCisgICAgMHg3NSwgMHgzMSwgMHg3MCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHhiMywgMHgyYSwgMHgzNSwgMHg3ZSwgMHhhMywgMHgyYSwgMHgzMiwgMHhiYywgMHhhYiwgCisgICAgMHg3OCwgMHgwMywgMHgxMiwgMHg3NywgMHhjMCwgMHgyMiwgMHgwMiwgMHg3YiwgMHgyOSwgMHhlNSwgMHhlNiwgMHhiNCwgMHgwOCwgMHg2NSwgMHhhOSwgMHhjNCwgCisgICAgMHhlMiwgMHg3ZSwgMHgwMSwgMHhlMywgMHg3ZSwgMHgxMSwgMHhlMywgMHg3ZSwgMHgzMSwgMHhlMywgMHg3ZSwgMHgyMSwgMHhlMywgMHg3ZSwgMHg1MSwgMHhlMywgCisgICAgMHg3ZSwgMHg0MSwgMHhlMywgMHg3ZSwgMHg3MSwgMHhlMywgMHg3ZSwgMHg2MSwgMHhlMywgMHg3YSwgMHgwZiwgMHgyYSwgMHgyYiwgMHg3YSwgMHgxZiwgMHgyYSwgCisgICAgMHgyZiwgMHg3NSwgMHgzMSwgMHgwNCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHgwMSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHgxMSwgMHgzMSwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHgyMSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHgzMSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgCisgICAgMHg0MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg1MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHg2MSwgMHgzMSwgMHgxMiwgMHg3YywgCisgICAgMHgxNSwgMHg3YSwgMHg3MSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHhhOSwgMHhkNCwgMHhlNCwgMHhhOSwgMHhkNywgMHhmNCwgMHhhOSwgMHhjNiwgMHhlMiwgCisgICAgMHgxMiwgMHg3NywgMHg5NCwgMHgyMiwgMHg2ZCwgMHgwMCwgMHg3ZSwgMHgxNCwgMHgwMSwgMHgwMiwgMHg3YSwgMHgwNywgMHgyYSwgMHgzYSwgMHg3YSwgMHgwMywgCisgICAgMHgyYSwgMHgzNSwgMHg3ZSwgMHhiMywgMHgyYSwgMHgyYiwgMHgyMCwgMHhlNywgMHgwZiwgMHg3YSwgMHgyMywgMHgyYSwgMHgzNCwgMHg3YSwgMHgzMywgMHgyYSwgCisgICAgMHgzMywgMHhiZSwgMHgwNywgMHgyYSwgMHgzMSwgMHg2OCwgMHgwOSwgMHgyMiwgMHg3YSwgMHgzMywgMHgyYSwgMHgzNCwgMHg3YSwgMHgyMywgMHgyYSwgMHgzMywgCisgICAgMHg3ZSwgMHhiMywgMHgyYSwgMHgyYiwgMHg1NCwgMHhlMywgMHgyMywgMHgyMywgMHgzMCwgMHhlMCwgMHgwMiwgMHhkMiwgMHhlNSwgMHgzMCwgMHhlNywgMHgwMiwgCisgICAgMHhkMiwgMHhlNCwgMHgzMCwgMHhlNSwgMHgwNiwgMHgzMCwgMHhlNCwgMHgwMywgMHgwMiwgMHg3YiwgMHgyOSwgMHg1NCwgMHgzZSwgMHhmNSwgMHhmMCwgMHgwMywgCisgICAgMHg1NCwgMHgxZiwgMHhjMywgMHgyNSwgMHhmMCwgMHg5MCwgMHg3NywgMHhlYywgMHg3NSwgMHg4NCwgMHhmZiwgMHg3MywgMHgwMiwgMHg3OSwgMHg0MCwgMHgwMiwgCisgICAgMHg3OCwgMHgzNCwgMHgwMiwgMHg3OSwgMHhkZCwgMHgwMiwgMHg3OSwgMHhmOCwgMHgwMiwgMHg3OCwgMHhkOSwgMHgwMiwgMHg3OCwgMHg5YSwgMHgwMiwgMHg3YSwgCisgICAgMHgxMSwgMHgwMiwgMHg3YSwgMHgxMSwgMHgwMiwgMHg3YSwgMHgxNCwgMHgwMiwgMHg3YSwgMHgxNCwgMHgwMiwgMHg3YSwgMHgxNCwgMHgwMiwgMHg3YSwgMHgxNCwgCisgICAgMHgwMiwgMHg3YSwgMHgxNCwgMHgwMiwgMHg3YSwgMHgxNCwgMHgwMiwgMHg3YSwgMHgxNCwgMHgwMiwgMHg3YSwgMHgxNCwgMHgwMiwgMHg3YSwgMHgxYSwgMHgwMiwgCisgICAgMHg3YSwgMHhjZSwgMHgwMiwgMHg3YSwgMHgxNywgMHgwMiwgMHg3YSwgMHgxNywgMHgwMiwgMHg3YSwgMHgxNywgMHgwMiwgMHg3YSwgMHgxNywgMHgwMiwgMHg3YSwgCisgICAgMHgxNywgMHgwMiwgMHg3YSwgMHgxNywgMHg3ZSwgMHhiMywgMHgyYSwgMHgyYywgMHhiNCwgMHgwNiwgMHgyYSwgMHg3ZSwgMHhiMywgMHgyYSwgMHgyZCwgMHg2MCwgCisgICAgMHg1NiwgMHg3YywgMHgwYiwgMHg3ZSwgMHgxMywgMHgyYSwgMHgyZSwgMHg3ZSwgMHgxNywgMHgyYSwgMHgyZiwgMHg3NSwgMHgzMSwgMHg3MiwgMHgxMiwgMHg3YywgCisgICAgMHgxNSwgMHg3YSwgMHgwMSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHgxMSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgxMiwgMHg3YiwgMHgzMywgCisgICAgMHg0MCwgMHgzNSwgMHgwMiwgMHg3NiwgMHg3MywgMHhiNCwgMHgwOCwgMHgxMCwgMHg3NSwgMHgzMSwgMHg3NCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHhiMywgCisgICAgMHgzZiwgMHhmMSwgMHhmNSwgMHhmMywgMHg3NSwgMHhmNiwgMHgwMSwgMHgyMiwgMHhiNCwgMHgwMCwgMHgxYywgMHg3NSwgMHgzMSwgMHg3NSwgMHgxMiwgMHg3YywgCisgICAgMHgxNSwgMHg3ZSwgMHhiMywgMHgzZiwgMHhmMiwgMHgzMCwgMHhlMCwgMHgwNSwgMHg3NSwgMHhmMywgMHgwMiwgMHg4MCwgMHgwMywgMHg3NSwgMHhmMywgMHgwMCwgCisgICAgMHg3NSwgMHhmMywgMHgwMCwgMHg3NSwgMHhmNiwgMHgwMiwgMHgyMiwgMHgwMiwgMHg3YiwgMHgyOSwgMHg3ZSwgMHhiMywgMHgyYSwgMHgyYywgMHhiNCwgMHgwMCwgCisgICAgMHgzNSwgMHg3NSwgMHgzMSwgMHg3NiwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHhiMywgMHgyYSwgMHgzMCwgMHg1NCwgMHgwZiwgMHhmNSwgMHhmMSwgMHg3ZSwgCisgICAgMHhiMywgMHgyYSwgMHgzMCwgMHgyMCwgMHhlNywgMHgwOSwgMHhlNSwgMHhlMSwgMHgzMCwgMHhlNywgMHgwZCwgMHg3NCwgMHgwMSwgMHg4MCwgMHgwYiwgMHhlNSwgCisgICAgMHhlMSwgMHgzMCwgMHhlNiwgMHgwNCwgMHg3NCwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3NCwgMHgwMCwgMHg1MywgMHhmMSwgMHg4MCwgMHhmNSwgMHhmMywgMHg3NSwgCisgICAgMHhmMywgMHgwMCwgMHg3NSwgMHhmNiwgMHgwMiwgMHgyMiwgMHgwMiwgMHg3YiwgMHgyOSwgMHhjMCwgMHhmMSwgMHg3ZSwgMHhiMywgMHgyYSwgMHgzMCwgMHg1NCwgCisgICAgMHgwZiwgMHg0MiwgMHhmMSwgMHg3ZSwgMHhiMywgMHgyYSwgMHgyZSwgMHhiNCwgMHgwMCwgMHg0NSwgMHg3ZSwgMHhiMywgMHgyYSwgMHgyYywgMHhiNCwgMHgwMSwgCisgICAgMHgyNCwgMHg3NSwgMHgzMSwgMHg3NywgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHhiMywgMHgyYSwgMHgzMCwgMHg1NCwgMHgwZiwgMHg3OCwgMHgwNSwgMHg1MywgCisgICAgMHhlMSwgMHgzZiwgMHg4MCwgMHgzNywgMHg3ZSwgMHhiMywgMHgyYSwgMHgzMCwgMHgyMCwgMHhlNywgMHgwNSwgMHg1MywgMHhlMSwgMHg3ZiwgMHg4MCwgMHgyYiwgCisgICAgMHg1MywgMHhlMSwgMHhiZiwgMHg4MCwgMHgyNiwgMHhiNCwgMHgwMywgMHgxNywgMHg3NSwgMHgzMSwgMHg3OCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHhiMywgCisgICAgMHgyYSwgMHgzMCwgMHgyMCwgMHhlNywgMHgwNSwgMHg0MywgMHhlMSwgMHg4MCwgMHg4MCwgMHgxMSwgMHg0MywgMHhlMSwgMHg0MCwgMHg4MCwgMHgwYywgMHg0MywgCisgICAgMHhlMSwgMHhjMCwgMHhkMCwgMHhmMSwgMHg3NSwgMHgzMSwgMHgwNywgMHgxMiwgMHg3YywgMHgxNSwgMHgyMiwgMHhkMCwgMHhmMSwgMHgwMiwgMHg3NiwgMHg2ZiwgCisgICAgMHg3ZSwgMHhiMywgMHgyYSwgMHgyYywgMHhiNCwgMHgwOSwgMHgyMywgMHg3NSwgMHgzMSwgMHg3OSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHhiMywgMHgyYSwgCisgICAgMHgyZSwgMHhiZSwgMHhiMywgMHgzZiwgMHhmMSwgMHg2OCwgMHgxMSwgMHhjYSwgMHhiOCwgMHhjMCwgMHhmMSwgMHgxMiwgMHg0MywgMHhkNCwgMHhkMCwgMHhmMSwgCisgICAgMHhkYSwgMHhiOCwgMHg1MCwgMHg3NiwgMHg3YSwgMHhiMywgMHgzZiwgMHhmMSwgMHg4MCwgMHg2ZCwgMHhiNCwgMHgwNSwgMHgwOCwgMHg3NSwgMHgzMSwgMHg3YSwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHg4MCwgMHg2MiwgMHhiNCwgMHgwMywgMHgxOSwgMHg3NSwgMHgzMSwgMHg3YiwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHhiMywgCisgICAgMHgyYSwgMHgyZSwgMHhiNCwgMHgwMSwgMHg1NSwgMHg3ZSwgMHhiMywgMHgzZiwgMHhmMiwgMHg0NCwgMHgwMSwgMHg3YSwgMHhiMywgMHgzZiwgMHhmMiwgMHg4MCwgCisgICAgMHg0NiwgMHhiNCwgMHgwMSwgMHgxOSwgMHg3NSwgMHgzMSwgMHg3YywgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHhiMywgMHgyYSwgMHgyZSwgMHhiNCwgMHgwMSwgCisgICAgMHgzOSwgMHg3ZSwgMHhiMywgMHgzZiwgMHhmMiwgMHg1NCwgMHhmZSwgMHg3YSwgMHhiMywgMHgzZiwgMHhmMiwgMHg4MCwgMHgyYSwgMHhiNCwgMHgwNywgMHgyYSwgCisgICAgMHg3ZSwgMHhiMywgMHgyYSwgMHgyZCwgMHg2MCwgMHgyNCwgMHg3YywgMHgwYiwgMHg3ZSwgMHgxMywgMHgyYSwgMHgyZSwgMHg3ZSwgMHgxNywgMHgyYSwgMHgyZiwgCisgICAgMHg3NSwgMHgzMSwgMHg3MywgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHgwMSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3YSwgMHgxMSwgMHgzMSwgMHgxMiwgCisgICAgMHg3YywgMHgxNSwgMHgxMiwgMHg3YiwgMHg1ZiwgMHg0MCwgMHgwMywgMHgwMiwgMHg3NiwgMHg2ZiwgMHgwMiwgMHg3YiwgMHgyOSwgMHg3ZSwgMHhiMywgMHgyYSwgCisgICAgMHgyYywgMHhiNCwgMHgwYiwgMHhmNiwgMHg3NSwgMHgzMSwgMHg3ZCwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHhiMywgMHgyYSwgMHgyZSwgMHg3ZSwgMHhhMywgCisgICAgMHgyYSwgMHgzMCwgMHg0YywgMHhhYiwgMHg3OCwgMHhlNCwgMHg4MCwgMHhkZiwgMHg3ZSwgMHhiMywgMHgyYSwgMHgyYywgMHhiNCwgMHgwYSwgMHhkYiwgMHg3NSwgCisgICAgMHgzMSwgMHg3ZSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHhiMywgMHgyYSwgMHgyZSwgMHg3MCwgMHhjZiwgMHhmNSwgMHhmMywgMHg3NSwgMHhmNiwgMHgwMSwgCisgICAgMHgyMiwgMHgwMiwgMHg3YiwgMHgyOSwgMHgwMiwgMHg3YiwgMHgyOSwgMHgwMiwgMHg3YiwgMHgyOSwgMHg3ZSwgMHhiMywgMHgyYSwgMHgyYywgMHhiNCwgMHgwNCwgCisgICAgMHgyMCwgMHg3NSwgMHgzMSwgMHhjMywgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgwMSwgMHg3ZSwgMHgxNywgMHgyYSwgMHgyZCwgMHg3ZSwgCisgICAgMHgxOCwgMHgyYSwgMHgzYywgMHg3YSwgMHgxYywgMHgwMCwgMHgwMCwgMHg3ZSwgMHg0NywgMHgyYSwgMHgzMSwgMHgxMiwgMHg3YywgMHgyMSwgMHgwMiwgMHg3YSwgCisgICAgMHhjOCwgMHhiNCwgMHgwNiwgMHgzYSwgMHg3NSwgMHgzMSwgMHhjMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHg1OCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg1YywgCisgICAgMHgwMCwgMHhmZSwgMHg3ZCwgMHhjYSwgMHg3ZSwgMHhkNywgMHgyYSwgMHgyZCwgMHg3ZSwgMHg3OCwgMHgyYSwgMHgzYywgMHg3YSwgMHg3YywgMHgwMCwgMHgwMCwgCisgICAgMHg3ZSwgMHg3NywgMHgyYSwgMHgzMSwgMHg3NSwgMHgzMSwgMHhjMSwgMHgxMiwgMHg3YywgMHgxNSwgMHhjMCwgMHhhOCwgMHhjMCwgMHg4NywgMHhjMiwgMHhhZiwgCisgICAgMHhhOSwgMHhkNSwgMHg4NywgMHgxMiwgMHg3YywgMHg1YSwgMHhkMCwgMHg4NywgMHhkMCwgMHhhOCwgMHg0MCwgMHg0ZiwgMHg4MCwgMHg0YSwgMHhiNCwgMHgwMCwgCisgICAgMHgxYywgMHhjMiwgMHhhZiwgMHhhOSwgMHhkNSwgMHg4NywgMHgxMiwgMHg3NiwgMHg2ZiwgMHhlNCwgMHg4ZCwgMHhlZiwgMHg4ZCwgMHhlZiwgMHg4ZCwgMHhlZiwgCisgICAgMHhkNSwgMHhlMCwgMHhmNywgMHhjMCwgMHhkMSwgMHhjYSwgMHgwMiwgMHhmZiwgMHhjYSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwgMHhiNCwgMHgwOSwgMHgxMiwgCisgICAgMHg3ZSwgMHg1NywgMHgyYSwgMHgyZCwgMHg0ZCwgMHg1NSwgMHg2OCwgMHgwNSwgMHhhOSwgMHhkMiwgMHhiMSwgMHg4MCwgMHgwMywgMHhhOSwgMHhjMiwgMHhiMSwgCisgICAgMHg4MCwgMHgxNiwgMHhiNCwgMHgwNywgMHgxNiwgMHhjMiwgMHhhZiwgMHg3ZSwgMHgwNywgMHgyYSwgMHgyZiwgMHg3ZSwgMHgxNywgMHgyYSwgMHgyZCwgMHhjMCwgCisgICAgMHhkMSwgMHhjYSwgMHgxOCwgMHhjYSwgMHgzOCwgMHhjYSwgMHgyOCwgMHgzMiwgMHgwMiwgMHg3NiwgMHg2ZiwgMHgwMiwgMHg3YiwgMHgyOSwgMHg3ZSwgMHhiMywgCisgICAgMHgyYSwgMHgyYywgMHhiNCwgMHgwMywgMHgxNSwgMHg3NSwgMHgzMSwgMHhjMiwgMHgxMiwgMHg3YywgMHgxNSwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgwMSwgMHg3ZSwgCisgICAgMHgxNywgMHgyYSwgMHgyZCwgMHg3ZSwgMHg1NywgMHgyYSwgMHgzMSwgMHgwMiwgMHg3NiwgMHg3MywgMHhiNCwgMHgwNSwgMHgzOSwgMHg3NSwgMHgzMSwgMHhjMCwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHhjMCwgMHhhOCwgMHhjMCwgMHg4NywgMHhjMiwgMHhhZiwgMHhhOSwgMHhkNSwgMHg4NywgMHg3ZSwgMHgwOCwgMHgyYSwgMHgzYywgCisgICAgMHg3YSwgMHgwYywgMHgwMCwgMHgwMCwgMHg3ZSwgMHgyNCwgMHgwMCwgMHhmZSwgMHg3ZSwgMHgzNywgMHgyYSwgMHgyZCwgMHg3ZSwgMHg0NywgMHgyYSwgMHgzMSwgCisgICAgMHgxMiwgMHg3YywgMHgyMSwgMHhkMCwgMHg4NywgMHhkMCwgMHhhOCwgMHg3ZSwgMHgwOCwgMHgyYSwgMHgzYywgMHg3YSwgMHgwYywgMHgwMCwgMHgwMCwgMHg3ZSwgCisgICAgMHg1NywgMHgyYSwgMHgzMSwgMHgwMiwgMHg3NiwgMHg3MywgMHgwMiwgMHg3YiwgMHgyOSwgMHg3NSwgMHgzMSwgMHgwNywgMHgxMiwgMHg3YywgMHgxNSwgMHg0MywgCisgICAgMHhlMSwgMHhjMCwgMHgyMiwgMHhjMCwgMHhhOCwgMHhjMCwgMHg4NywgMHhjMiwgMHhhZiwgMHhhOSwgMHhkNSwgMHg4NywgMHgxMiwgMHg3YiwgMHg5ZSwgMHg0MCwgCisgICAgMHgxOSwgMHg3ZSwgMHgwOCwgMHgyYSwgMHgzYywgMHg3YSwgMHgwYywgMHgwMCwgMHgwMCwgMHhjYSwgMHgwYiwgMHhjYSwgMHg0OSwgMHgxMiwgMHg3YywgMHgyMSwgCisgICAgMHhkYSwgMHg1OSwgMHhkYSwgMHgwYiwgMHhkMCwgMHg4NywgMHhkMCwgMHhhOCwgMHhjMywgMHgyMiwgMHhkMCwgMHg4NywgMHhkMCwgMHhhOCwgMHgyMiwgMHhjMCwgCisgICAgMHhhOCwgMHhjMCwgMHg4NywgMHhjMiwgMHhhZiwgMHhhOSwgMHhkNSwgMHg4NywgMHgxMiwgMHg3YiwgMHg5ZSwgMHg0MCwgMHgyYiwgMHg3ZSwgMHg1OCwgMHgwMCwgCisgICAgMHgwMCwgMHg3YSwgMHg1YywgMHgwMCwgMHhmZSwgMHg3ZiwgMHg2MSwgMHg3ZSwgMHg3OCwgMHgyYSwgMHgzYywgMHg3YSwgMHg3YywgMHgwMCwgMHgwMCwgMHg3ZSwgCisgICAgMHg3NywgMHgyYSwgMHgzMSwgMHhiZCwgMHg3NCwgMHg3OCwgMHgxMSwgMHg3NSwgMHgzMSwgMHhjMSwgMHgxMiwgMHg3YywgMHgxNSwgMHgxMiwgMHg3YywgMHg1YSwgCisgICAgMHg0MCwgMHgwNiwgMHhkMCwgMHg4NywgMHhkMCwgMHhhOCwgMHhjMywgMHgyMiwgMHhkMCwgMHg4NywgMHhkMCwgMHhhOCwgMHhkMywgMHgyMiwgMHg3ZSwgMHgyNCwgCisgICAgMHgwMCwgMHhmZSwgMHg3ZSwgMHgzNCwgMHg3ZiwgMHhjYSwgMHgwYiwgMHgxYSwgMHg1MCwgMHhjNSwgMHhmMCwgMHg3ZCwgMHg2MiwgMHg3ZCwgMHg3NSwgMHg3ZCwgCisgICAgMHg4NywgMHg3ZSwgMHgzNCwgMHg3ZiwgMHhjMiwgMHg3ZSwgMHgxYiwgMHhiMCwgMHg3ZSwgMHgzNCwgMHg3ZiwgMHgwMywgMHhiNCwgMHgwMSwgMHgwNCwgMHg3ZSwgCisgICAgMHgzNCwgMHg3ZiwgMHhjYywgMHg3ZSwgMHgxYiwgMHhiMCwgMHhiYywgMHgwYiwgMHg1MCwgMHg0OSwgMHgzZSwgMHgwMCwgMHgzZSwgMHgwMCwgMHgwYSwgMHg1MCwgCisgICAgMHgyZCwgMHg3NSwgMHgwYiwgMHgzYSwgMHgzMCwgMHg2OSwgMHg1MywgMHgwMCwgMHgwMiwgMHhiZCwgMHgzOCwgMHg1MCwgMHgwMiwgMHgyZCwgMHgzOCwgMHhiYywgCisgICAgMHgxYiwgMHg1MCwgMHgzMCwgMHgzZSwgMHgxMCwgMHgzZSwgMHgxMCwgMHgwYSwgMHg1MSwgMHgyZCwgMHgzNSwgMHg2OSwgMHg0MSwgMHgwMCwgMHgwMiwgMHgwYiwgCisgICAgMHgxYSwgMHgzMCwgMHhiZCwgMHgzOCwgMHg1MCwgMHgwMiwgMHgyZCwgMHgzOCwgMHhiZSwgMHg0NCwgMHhmZiwgMHhmZiwgMHg3OCwgMHgwNSwgMHg3ZSwgMHgxYiwgCisgICAgMHg5MCwgMHgwYSwgMHg0OSwgMHg0ZCwgMHg0NCwgMHg2OCwgMHgwYywgMHhiZSwgMHg0NCwgMHgwMCwgMHhmZiwgMHgyOCwgMHgwNCwgMHg3ZSwgMHg0NCwgMHgwMCwgCisgICAgMHhmZiwgMHhjMywgMHgyMiwgMHhkMywgMHgyMiwgCisKKy8vIFNlZ21lbnQgIzE2LCBTdGFydCBBZGRyZXNzIDAwZmY3ZmM2LCBMZW5ndGggNAorMHhmZiwweDAwLDB4YzYsMHg3ZiwweDA0LDB4MDAsCisgICAgMHgwMSwgMHgxMCwgMHgwNCwgMHgwMCwgCisKKy8vIFNlZ21lbnQgIzE3LCBTdGFydCBBZGRyZXNzIDAwZmY3YzE1LCBMZW5ndGggMzMwCisweGZmLDB4MDAsMHgxNSwweDdjLDB4NGEsMHgwMSwKKyAgICAweGNhLCAweDA4LCAweDdlLCAweDAxLCAweDMxLCAweDdhLCAweDAzLCAweDNmLCAweGYwLCAweGRhLCAweDA4LCAweDIyLCAweDdlLCAweDFiLCAweGMwLCAweDdhLCAKKyAgICAweDBiLCAweGMwLCAweDBiLCAweDE0LCAweDBiLCAweDM0LCAweDFiLCAweDQ0LCAweDc4LCAweGYyLCAweDIyLCAweDdmLCAweDZmLCAweDdmLCAweGYwLCAweDFiLCAKKyAgICAweGZjLCAweDdjLCAweDU0LCAweDdkLCAweDMyLCAweDgwLCAweDA4LCAweGNhLCAweDFiLCAweGNhLCAweDFiLCAweGNhLCAweDFiLCAweGNhLCAweDFiLCAweDllLCAKKyAgICAweDQ0LCAweDAwLCAweDEwLCAweDUwLCAweGYyLCAweDJlLCAweDQ0LCAweDAwLCAweDEwLCAweDY4LCAweDA2LCAweGNhLCAweDQ4LCAweDFiLCAweDQ0LCAweDc4LCAKKyAgICAweGZhLCAweDdmLCAweGY2LCAweDg5LCAweGU0LCAweGNhLCAweDZiLCAweDVlLCAweGQ0LCAweDAwLCAweDNmLCAweDY4LCAweDIwLCAweDdlLCAweDg0LCAweDAwLCAKKyAgICAweDQwLCAweDlkLCAweDhkLCAweGRhLCAweDZiLCAweGJkLCAweDg3LCAweDM4LCAweDE2LCAweGNhLCAweDc5LCAweDdkLCAweDc4LCAweDEyLCAweDdjLCAweDg0LCAKKyAgICAweGRhLCAweDc5LCAweDQwLCAweDA4LCAweDlkLCAweDc4LCAweDY4LCAweDAyLCAweDgwLCAweDA1LCAweGMyLCAweGQ3LCAweDIyLCAweGRhLCAweDZiLCAweDQzLCAKKyAgICAweDkwLCAweDMwLCAweDc0LCAweGFhLCAweDM5LCAweGI1LCAweDU1LCAweDU1LCAweDc0LCAweDU1LCAweDM5LCAweGI1LCAweDJhLCAweGFhLCAweDc0LCAweGEwLCAKKyAgICAweDM5LCAweGI1LCAweDU1LCAweDU1LCAweDdlLCAweDA0LCAweDAwLCAweDQwLCAweDlkLCAweDcwLCAweDUwLCAweDA2LCAweDJkLCAweDcwLCAweDdkLCAweDA3LCAKKyAgICAweDZkLCAweDc3LCAweDdjLCAweDMxLCAweDdlLCAweDdiLCAweDAwLCAweDdhLCAweDZiLCAweDAwLCAweDBiLCAweDdjLCAweDBiLCAweDZjLCAweGE1LCAweGQ5LCAKKyAgICAweGYzLCAweDdmLCAweDE2LCAweDFiLCAweDFjLCAweDdlLCAweDU0LCAweDI3LCAweDEwLCAweDdlLCAweDFiLCAweDEwLCAweGJjLCAweDEwLCAweDY4LCAweDA2LCAKKyAgICAweDFiLCAweDU0LCAweDc4LCAweGY1LCAweDgwLCAweDJjLCAweDZkLCAweDAwLCAweDdjLCAweDIwLCAweDdmLCAweDE2LCAweDlmLCAweDEwLCAweDdmLCAweDI3LCAKKyAgICAweDlmLCAweDIwLCAweDdlLCAweDJiLCAweDAwLCAweDdlLCAweDFiLCAweDEwLCAweGJjLCAweDAxLCAweDc4LCAweDE2LCAweDBiLCAweDJjLCAweDBiLCAweDFjLCAKKyAgICAweGE1LCAweGRiLCAweGVmLCAweDdjLCAweGI2LCAweDIwLCAweGUwLCAweDAzLCAweDYzLCAweDkwLCAweDMwLCAweDRkLCAweDc3LCAweDc4LCAweDkzLCAweGMyLCAKKyAgICAweGQ3LCAweDIyLCAweGQyLCAweGQ3LCAweDIyLCAweDAwLCAweDA0LCAweDAwLCAweDA0LCAweDQyLCAweDA4LCAweDA2LCAweDA0LCAweDAyLCAweDA0LCAweDAwLCAKKyAgICAweDAyLCAweDAxLCAweDA0LCAweDAxLCAweDAyLCAweDgyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAyLCAweDAyLCAKKyAgICAweDAyLCAweDAyLCAweDA0LCAweDAyLCAweDA4LCAweDEwLCAweDAyLCAweDEwLCAweDA0LCAweDAyLCAweDA4LCAweDAwLCAweDAxLCAweDAxLCAweDA4LCAweDAwLCAKKyAgICAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAyLCAweDAyLCAweDA4LCAweDAyLCAweDA0LCAweDIwLCAweDA0LCAweDdlLCAweDE4LCAweDdmLCAweGJkLCAweDdhLCAKKyAgICAweDFjLCAweDAwLCAweGZlLCAweDBiLCAweDFhLCAweDAwLCAweDVlLCAweDEwLCAweDFmLCAweGJlLCAweDEwLCAweDFhLCAweDM4LCAweDFhLCAweDBhLCAweDUxLCAKKyAgICAweDIzLCAweDdlLCAweDE4LCAweDdjLCAweGZhLCAweDdhLCAweDFjLCAweDAwLCAweGZmLCAweDJkLCAweDM1LCAweDBiLCAweDFhLCAweDUwLCAweDYwLCAweDA4LCAKKyAgICAweGE1LCAweGI4LCAweDAyLCAweDAzLCAweDRlLCAweGEwLCAweDA4LCAweDIyLCAweDgwLCAweGZlLCAKK307CisKK3N0YXRpYyBzdHJ1Y3QgZWRnZV9maXJtd2FyZV92ZXJzaW9uX2luZm8gSU1BR0VfVkVSU0lPTl9OQU1FID0geworCTEsIDE2LCA0IH07CQkvLyBNYWpvciwgTWlub3IsIEJ1aWxkCisKKyN1bmRlZiBJTUFHRV9WRVJTSU9OX05BTUUKKworI3VuZGVmIElNQUdFX0FSUkFZX05BTUUKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2Z3X2Rvd24yLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZndfZG93bjIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjcyNzdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2Z3X2Rvd24yLmgKQEAgLTAsMCArMSwxMTMzIEBACisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyogRWRnZXBvcnQvNCBCaW5hcnkgSW1hZ2UKKy8vKiBHZW5lcmF0ZWQgYnkgSEVYMkMgdjEuMDYKKy8vKiBDb3B5cmlnaHQgKEMpIDE5OTggSW5zaWRlIE91dCBOZXR3b3JrcywgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLy8qCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisvLyoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKy8vKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKKy8vSW1hZ2Ugc3RydWN0dXJlIGRlZmluaXRpb24KKyNpZiAhZGVmaW5lZChERUZJTkVEX0VER0VfRklSTVdBUkVfSU1BR0VfUkVDT1JEKQorCSNkZWZpbmUgREVGSU5FRF9FREdFX0ZJUk1XQVJFX0lNQUdFX1JFQ09SRAorCXN0cnVjdCBlZGdlX2Zpcm13YXJlX2ltYWdlX3JlY29yZCB7CisJCV9fbGUxNiBFeHRBZGRyOworCQlfX2xlMTYgQWRkcjsKKwkJX19sZTE2IExlbjsKKwkJdW5zaWduZWQgY2hhciAgRGF0YVswXTsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCXN0cnVjdCBlZGdlX2Zpcm13YXJlX3ZlcnNpb25faW5mbyB7CisJCXVuc2lnbmVkIGNoYXIgIE1ham9yVmVyc2lvbjsKKwkJdW5zaWduZWQgY2hhciAgTWlub3JWZXJzaW9uOworCQl1bnNpZ25lZCBzaG9ydCBCdWlsZE51bWJlcjsKKwl9OworCisjZW5kaWYKKworI2lmICFkZWZpbmVkKElNQUdFX0FSUkFZX05BTUUpCisJI2RlZmluZSBJTUFHRV9BUlJBWV9OQU1FCUZpcm13YXJlSW1hZ2UKKwkjZGVmaW5lIElNQUdFX1ZFUlNJT05fTkFNRQlGaXJtd2FyZUltYWdlVmVyc2lvbgorI2VuZGlmCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIElNQUdFX0FSUkFZX05BTUVbXSA9IHsKKworLy8gU2VnbWVudCAjMSwgU3RhcnQgQWRkcmVzcyAwMGZmMDAwMCwgTGVuZ3RoIDYKKzB4ZmYsMHgwMCwweDAwLDB4MDAsMHgwNiwweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDUsIDB4MTQsIAorCisvLyBTZWdtZW50ICMyLCBTdGFydCBBZGRyZXNzIDAwZmYwMDBiLCBMZW5ndGggMworMHhmZiwweDAwLDB4MGIsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHg0NCwgMHhhNSwgCisKKy8vIFNlZ21lbnQgIzMsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMTMsIExlbmd0aCAzCisweGZmLDB4MDAsMHgxMywweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDYzLCAweGFiLCAKKworLy8gU2VnbWVudCAjNCwgU3RhcnQgQWRkcmVzcyAwMGZmMDAxYiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDFiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4MWIsIAorCisvLyBTZWdtZW50ICM1LCBTdGFydCBBZGRyZXNzIDAwZmYwMDIzLCBMZW5ndGggMworMHhmZiwweDAwLDB4MjMsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgyMywgCisKKy8vIFNlZ21lbnQgIzYsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMmIsIExlbmd0aCAzCisweGZmLDB4MDAsMHgyYiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDJiLCAKKworLy8gU2VnbWVudCAjNywgU3RhcnQgQWRkcmVzcyAwMGZmMDAzMywgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDMzLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4MzMsIAorCisvLyBTZWdtZW50ICM4LCBTdGFydCBBZGRyZXNzIDAwZmYwMDNiLCBMZW5ndGggMworMHhmZiwweDAwLDB4M2IsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgzYiwgCisKKy8vIFNlZ21lbnQgIzksIFN0YXJ0IEFkZHJlc3MgMDBmZjAwNDMsIExlbmd0aCAzCisweGZmLDB4MDAsMHg0MywweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDQzLCAKKworLy8gU2VnbWVudCAjMTAsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwNGIsIExlbmd0aCAzCisweGZmLDB4MDAsMHg0YiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDRiLCAKKworLy8gU2VnbWVudCAjMTEsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwNTMsIExlbmd0aCAzCisweGZmLDB4MDAsMHg1MywweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDY3LCAweDVmLCAKKworLy8gU2VnbWVudCAjMTIsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwN2IsIExlbmd0aCAzCisweGZmLDB4MDAsMHg3YiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDdiLCAKKworLy8gU2VnbWVudCAjMTMsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwODAsIExlbmd0aCA3CisweGZmLDB4MDAsMHg4MCwweDAwLDB4MDcsMHgwMCwKKyAgICAweDdlLCAweDE0LCAweDAwLCAweDAwLCAweDAyLCAweDQwLCAweDUyLCAKKworLy8gU2VnbWVudCAjMTQsIFN0YXJ0IEFkZHJlc3MgMDBmZjMwMDAsIExlbmd0aCAyOTE4CisweGZmLDB4MDAsMHgwMCwweDMwLDB4NjYsMHgwYiwKKyAgICAweDEyLCAweDMwLCAweDY0LCAweDEyLCAweDMwLCAweGZmLCAweDEyLCAweDMxLCAweDJmLCAweDEyLCAweDMwLCAweGIwLCAweDgwLCAweGYyLCAweGU1LCAweDIzLCAKKyAgICAweDYwLCAweDE5LCAweDdlLCAweDE0LCAweDAwLCAweDAwLCAweDA5LCAweGIxLCAweDAxLCAweGI5LCAweGI0LCAweDAwLCAweDAyLCAweDgwLCAweDA1LCAweDE0LCAKKyAgICAweDE5LCAweGIxLCAweDAxLCAweGI5LCAweGE1LCAweDBhLCAweGJlLCAweDIxLCAweDJlLCAweDc4LCAweGViLCAweDIyLCAweGMyLCAweGFmLCAweDdlLCAweGIzLCAKKyAgICAweDNmLCAweGYxLCAweGI0LCAweDAxLCAweDAzLCAweDEyLCAweDY1LCAweDY3LCAweGQyLCAweGFmLCAweDIyLCAweGMyLCAweGFmLCAweDdlLCAweGIzLCAweDNmLCAKKyAgICAweGYxLCAweGI0LCAweDAxLCAweDFkLCAweDc0LCAweDQwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDdlLCAweGIzLCAweDkxLCAweDFhLCAweDZjLCAweGFhLCAKKyAgICAweDYwLCAweDBmLCAweGNhLCAweDBiLCAweGNhLCAweDM5LCAweGNhLCAweDU5LCAweDEyLCAweDY0LCAweDI0LCAweGRhLCAweDU5LCAweGRhLCAweDM5LCAweGRhLCAKKyAgICAweDBiLCAweGQyLCAweGFmLCAweDIyLCAweGMyLCAweGFmLCAweGU1LCAweDIyLCAweDYwLCAweDQzLCAweDdlLCAweDA3LCAweDAxLCAweGNiLCAweGJlLCAweDA0LCAKKyAgICAweDAzLCAweDgwLCAweDM4LCAweDM5LCAweDdlLCAweDA0LCAweDgwLCAweDAwLCAweDdlLCAweDIwLCAweDAwLCAweDEzLCAweDUwLCAweDIxLCAweDA5LCAweGEwLCAKKyAgICAweDAwLCAweDA0LCAweDRlLCAweGEwLCAweDA1LCAweDE5LCAweGEwLCAweDAwLCAweDA0LCAweDBhLCAweDMyLCAweDA5LCAweDUzLCAweDM1LCAweDMzLCAweDVlLCAKKyAgICAweDUxLCAweDI3LCAweDY4LCAweDBiLCAweDA5LCAweGEwLCAweDAwLCAweDEwLCAweDRlLCAweGEwLCAweDAxLCAweDE5LCAweGEwLCAweDAwLCAweDEwLCAweDJlLCAKKyAgICAweDA0LCAweDAxLCAweDAwLCAweGE1LCAweDBhLCAweGJlLCAweDIxLCAweDJlLCAweDc4LCAweGQxLCAweDc1LCAweDIyLCAweDAwLCAweGQyLCAweGFmLCAweDIyLCAKKyAgICAweGMyLCAweGFmLCAweGU1LCAweDI2LCAweDYwLCAweDM2LCAweDdlLCAweDIwLCAweDAwLCAweDdlLCAweDMwLCAweDAxLCAweGU1LCAweDI2LCAweGE1LCAweDViLCAKKyAgICAweDY4LCAweDIxLCAweDdjLCAweGIyLCAweDIzLCAweDBhLCAweDJiLCAweDQ5LCAweDMyLCAweDAxLCAweDc5LCAweGJlLCAweDM0LCAweDAwLCAweDAwLCAweDY4LCAKKyAgICAweDEyLCAweDdlLCAweGIxLCAweDIxLCAweGE1LCAweDRiLCAweDdhLCAweGIxLCAweDIxLCAweGNhLCAweDE5LCAweDQ5LCAweDIyLCAweDMwLCAweGVmLCAweDk5LCAKKyAgICAweDI0LCAweGRhLCAweDE5LCAweDNlLCAweDMwLCAweGE1LCAweDBhLCAweGJlLCAweDIxLCAweDJlLCAweDc4LCAweGQwLCAweGQyLCAweGFmLCAweDIyLCAweDQ2LCAKKyAgICAweDRmLCAweDQ5LCAweDdjLCAweDRjLCAweGE5LCAweDRmLCAweGQ2LCAweDUzLCAweDAzLCAweDU2LCAweDMwLCAweDU5LCAweDVkLCAweDVjLCAweDhhLCAweGMyLCAKKyAgICAweGFmLCAweGU1LCAweDI0LCAweDYwLCAweDE0LCAweDdlLCAweDIwLCAweDAwLCAweDEzLCAweDUwLCAweDA3LCAweGNhLCAweGI4LCAweDEyLCAweDMxLCAweDFjLCAKKyAgICAweGRhLCAweGI4LCAweGE1LCAweDBhLCAweGJlLCAweDIxLCAweDJlLCAweDc4LCAweGVmLCAweGQyLCAweGFmLCAweDIyLCAweGNhLCAweDI4LCAweDEyLCAweDM1LCAKKyAgICAweDRjLCAweGRhLCAweDI4LCAweDQwLCAweDA5LCAweDBhLCAweDIyLCAweDA5LCAweGIyLCAweDM1LCAweDMzLCAweGY0LCAweDUyLCAweDI0LCAweDIyLCAweGMyLCAKKyAgICAweGFmLCAweGU1LCAweDIzLCAweDYwLCAweDE0LCAweDdlLCAweDIwLCAweDAwLCAweDEzLCAweDUwLCAweDA3LCAweGNhLCAweGI4LCAweDEyLCAweDMxLCAweDRjLCAKKyAgICAweGRhLCAweGI4LCAweGE1LCAweDBhLCAweGJlLCAweDIxLCAweDJlLCAweDc4LCAweGVmLCAweGQyLCAweGFmLCAweDIyLCAweDdjLCAweGIyLCAweDIzLCAweDBhLCAKKyAgICAweDJiLCAweDQ5LCAweDIyLCAweDMxLCAweDU3LCAweDg5LCAweDI0LCAweDMxLCAweDY3LCAweDMxLCAweGQwLCAweDMyLCAweDM5LCAweDMyLCAweGEyLCAweDMzLCAKKyAgICAweDBiLCAweDMzLCAweDc0LCAweDMzLCAweGRkLCAweDM0LCAweDQ2LCAweDdlLCAweDI3LCAweDAxLCAweDc5LCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDc4LCAKKyAgICAweDI0LCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDA5LCAweGIyLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAKKyAgICAweDY4LCAweDBiLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAweDQ5LCAweDQ1LCAweDdkLCAweDIxLCAweGRhLCAweDE5LCAweDMwLCAweGU2LCAweDE4LCAKKyAgICAweDdlLCAweDYwLCAweDAwLCAweDgwLCAweDFlLCAweGJlLCAweDI3LCAweDAxLCAweDg5LCAweDY4LCAweDBkLCAweDdhLCAweDI3LCAweDAxLCAweDg5LCAweDdlLCAKKyAgICAweDYwLCAweDljLCAweDdhLCAweDYzLCAweDAxLCAweGI5LCAweDgwLCAweDI3LCAweDdlLCAweDYzLCAweDAxLCAweGI5LCAweGE1LCAweGJlLCAweDAwLCAweDFmLCAKKyAgICAweDdlLCAweDYwLCAweDAxLCAweDdlLCAweGIwLCAweDAwLCAweDdlLCAweGEwLCAweGM4LCAweDEyLCAweDYxLCAweDM2LCAweDQwLCAweDExLCAweDc1LCAweDJmLCAKKyAgICAweGIzLCAweDEyLCAweDczLCAweDM1LCAweGMyLCAweDE4LCAweDZjLCAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGI5LCAweDEyLCAweDY0LCAweDg2LCAweDIyLCAKKyAgICAweDdlLCAweDI3LCAweDAxLCAweDdiLCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDc4LCAweDI0LCAweDdlLCAweDI0LCAweDgxLCAweDAwLCAweDA5LCAweGIyLCAKKyAgICAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDBiLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAKKyAgICAweDRjLCAweDcyLCAweDdkLCAweDIxLCAweGRhLCAweDE5LCAweDMwLCAweGU2LCAweDE4LCAweDdlLCAweDYwLCAweDAwLCAweDgwLCAweDFlLCAweGJlLCAweDI3LCAKKyAgICAweDAxLCAweDhiLCAweDY4LCAweDBkLCAweDdhLCAweDI3LCAweDAxLCAweDhiLCAweDdlLCAweDYwLCAweDljLCAweDdhLCAweDYzLCAweDAxLCAweGJhLCAweDgwLCAKKyAgICAweDI3LCAweDdlLCAweDYzLCAweDAxLCAweGJhLCAweGE1LCAweGJlLCAweDAwLCAweDFmLCAweDdlLCAweDYwLCAweDAxLCAweDdlLCAweGIwLCAweDAwLCAweDdlLCAKKyAgICAweGEwLCAweGM4LCAweDEyLCAweDYxLCAweDM2LCAweDQwLCAweDExLCAweDc1LCAweDJmLCAweGIzLCAweDEyLCAweDczLCAweDM1LCAweGMyLCAweDE5LCAweDZjLCAKKyAgICAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGJhLCAweDEyLCAweDY0LCAweDg2LCAweDIyLCAweDdlLCAweDI3LCAweDAxLCAweDdkLCAweGJlLCAweDI0LCAweDAwLCAKKyAgICAweDAwLCAweDc4LCAweDI0LCAweDdlLCAweDI0LCAweDgyLCAweDAwLCAweDA5LCAweGIyLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAKKyAgICAweGRhLCAweGI4LCAweDY4LCAweDBiLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAweDRmLCAweDlmLCAweDdkLCAweDIxLCAweGRhLCAweDE5LCAweDMwLCAKKyAgICAweGU2LCAweDE4LCAweDdlLCAweDYwLCAweDAwLCAweDgwLCAweDFlLCAweGJlLCAweDI3LCAweDAxLCAweDhkLCAweDY4LCAweDBkLCAweDdhLCAweDI3LCAweDAxLCAKKyAgICAweDhkLCAweDdlLCAweDYwLCAweDljLCAweDdhLCAweDYzLCAweDAxLCAweGJiLCAweDgwLCAweDI3LCAweDdlLCAweDYzLCAweDAxLCAweGJiLCAweGE1LCAweGJlLCAKKyAgICAweDAwLCAweDFmLCAweDdlLCAweDYwLCAweDAxLCAweDdlLCAweGIwLCAweDAwLCAweDdlLCAweGEwLCAweGM4LCAweDEyLCAweDYxLCAweDM2LCAweDQwLCAweDExLCAKKyAgICAweDc1LCAweDJmLCAweGIzLCAweDEyLCAweDczLCAweDM1LCAweGMyLCAweDFhLCAweDZjLCAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGJiLCAweDEyLCAweDY0LCAKKyAgICAweDg2LCAweDIyLCAweDdlLCAweDI3LCAweDAxLCAweDdmLCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDc4LCAweDI0LCAweDdlLCAweDI0LCAweDgzLCAweDAwLCAKKyAgICAweDA5LCAweGIyLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDBiLCAweGNhLCAweDE5LCAweDdkLCAKKyAgICAweDEyLCAweDEyLCAweDUyLCAweGNjLCAweDdkLCAweDIxLCAweGRhLCAweDE5LCAweDMwLCAweGU2LCAweDE4LCAweDdlLCAweDYwLCAweDAwLCAweDgwLCAweDFlLCAKKyAgICAweGJlLCAweDI3LCAweDAxLCAweDhmLCAweDY4LCAweDBkLCAweDdhLCAweDI3LCAweDAxLCAweDhmLCAweDdlLCAweDYwLCAweDljLCAweDdhLCAweDYzLCAweDAxLCAKKyAgICAweGJjLCAweDgwLCAweDI3LCAweDdlLCAweDYzLCAweDAxLCAweGJjLCAweGE1LCAweGJlLCAweDAwLCAweDFmLCAweDdlLCAweDYwLCAweDAxLCAweDdlLCAweGIwLCAKKyAgICAweDAwLCAweDdlLCAweGEwLCAweGM4LCAweDEyLCAweDYxLCAweDM2LCAweDQwLCAweDExLCAweDc1LCAweDJmLCAweGIzLCAweDEyLCAweDczLCAweDM1LCAweGMyLCAKKyAgICAweDFiLCAweDZjLCAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGJjLCAweDEyLCAweDY0LCAweDg2LCAweDIyLCAweDdlLCAweDI3LCAweDAxLCAweDgxLCAweGJlLCAKKyAgICAweDI0LCAweDAwLCAweDAwLCAweDc4LCAweDI0LCAweDdlLCAweDI0LCAweDg0LCAweDAwLCAweDA5LCAweGIyLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAKKyAgICAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDBiLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAweDU1LCAweGY5LCAweDdkLCAweDIxLCAweGRhLCAKKyAgICAweDE5LCAweDMwLCAweGU2LCAweDE4LCAweDdlLCAweDYwLCAweDAwLCAweDgwLCAweDFlLCAweGJlLCAweDI3LCAweDAxLCAweDkxLCAweDY4LCAweDBkLCAweDdhLCAKKyAgICAweDI3LCAweDAxLCAweDkxLCAweDdlLCAweDYwLCAweDljLCAweDdhLCAweDYzLCAweDAxLCAweGJkLCAweDgwLCAweDI3LCAweDdlLCAweDYzLCAweDAxLCAweGJkLCAKKyAgICAweGE1LCAweGJlLCAweDAwLCAweDFmLCAweDdlLCAweDYwLCAweDAxLCAweDdlLCAweGIwLCAweDAwLCAweDdlLCAweGEwLCAweGM4LCAweDEyLCAweDYxLCAweDM2LCAKKyAgICAweDQwLCAweDExLCAweDc1LCAweDJmLCAweGIzLCAweDEyLCAweDczLCAweDM1LCAweGMyLCAweDFjLCAweDZjLCAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGJkLCAKKyAgICAweDEyLCAweDY0LCAweDg2LCAweDIyLCAweDdlLCAweDI3LCAweDAxLCAweDgzLCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDc4LCAweDI0LCAweDdlLCAweDI0LCAKKyAgICAweDg1LCAweDAwLCAweDA5LCAweGIyLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDBiLCAweGNhLCAKKyAgICAweDE5LCAweDdkLCAweDEyLCAweDEyLCAweDU5LCAweDI2LCAweDdkLCAweDIxLCAweGRhLCAweDE5LCAweDMwLCAweGU2LCAweDE4LCAweDdlLCAweDYwLCAweDAwLCAKKyAgICAweDgwLCAweDFlLCAweGJlLCAweDI3LCAweDAxLCAweDkzLCAweDY4LCAweDBkLCAweDdhLCAweDI3LCAweDAxLCAweDkzLCAweDdlLCAweDYwLCAweDljLCAweDdhLCAKKyAgICAweDYzLCAweDAxLCAweGJlLCAweDgwLCAweDI3LCAweDdlLCAweDYzLCAweDAxLCAweGJlLCAweGE1LCAweGJlLCAweDAwLCAweDFmLCAweDdlLCAweDYwLCAweDAxLCAKKyAgICAweDdlLCAweGIwLCAweDAwLCAweDdlLCAweGEwLCAweGM4LCAweDEyLCAweDYxLCAweDM2LCAweDQwLCAweDExLCAweDc1LCAweDJmLCAweGIzLCAweDEyLCAweDczLCAKKyAgICAweDM1LCAweGMyLCAweDFkLCAweDZjLCAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGJlLCAweDEyLCAweDY0LCAweDg2LCAweDIyLCAweDdlLCAweDI3LCAweDAxLCAKKyAgICAweDg1LCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDc4LCAweDI0LCAweDdlLCAweDI0LCAweDg2LCAweDAwLCAweDA5LCAweGIyLCAweDAwLCAweDE0LCAweGNhLCAKKyAgICAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDBiLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAweDVjLCAweDUzLCAweDdkLCAKKyAgICAweDIxLCAweGRhLCAweDE5LCAweDMwLCAweGU2LCAweDE4LCAweDdlLCAweDYwLCAweDAwLCAweDgwLCAweDFlLCAweGJlLCAweDI3LCAweDAxLCAweDk1LCAweDY4LCAKKyAgICAweDBkLCAweDdhLCAweDI3LCAweDAxLCAweDk1LCAweDdlLCAweDYwLCAweDljLCAweDdhLCAweDYzLCAweDAxLCAweGJmLCAweDgwLCAweDI3LCAweDdlLCAweDYzLCAKKyAgICAweDAxLCAweGJmLCAweGE1LCAweGJlLCAweDAwLCAweDFmLCAweDdlLCAweDYwLCAweDAxLCAweDdlLCAweGIwLCAweDAwLCAweDdlLCAweGEwLCAweGM4LCAweDEyLCAKKyAgICAweDYxLCAweDM2LCAweDQwLCAweDExLCAweDc1LCAweDJmLCAweGIzLCAweDEyLCAweDczLCAweDM1LCAweGMyLCAweDFlLCAweDZjLCAweDAwLCAweDdhLCAweDAzLCAKKyAgICAweDAxLCAweGJmLCAweDEyLCAweDY0LCAweDg2LCAweDIyLCAweDdlLCAweDI3LCAweDAxLCAweDg3LCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDc4LCAweDI0LCAKKyAgICAweDdlLCAweDI0LCAweDg3LCAweDAwLCAweDA5LCAweGIyLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAKKyAgICAweDBiLCAweGNhLCAweDE5LCAweDdkLCAweDEyLCAweDEyLCAweDVmLCAweDgwLCAweDdkLCAweDIxLCAweGRhLCAweDE5LCAweDMwLCAweGU2LCAweDE4LCAweDdlLCAKKyAgICAweDYwLCAweDAwLCAweDgwLCAweDFlLCAweGJlLCAweDI3LCAweDAxLCAweDk3LCAweDY4LCAweDBkLCAweDdhLCAweDI3LCAweDAxLCAweDk3LCAweDdlLCAweDYwLCAKKyAgICAweDljLCAweDdhLCAweDYzLCAweDAxLCAweGMwLCAweDgwLCAweDI3LCAweDdlLCAweDYzLCAweDAxLCAweGMwLCAweGE1LCAweGJlLCAweDAwLCAweDFmLCAweDdlLCAKKyAgICAweDYwLCAweDAxLCAweDdlLCAweGIwLCAweDAwLCAweDdlLCAweGEwLCAweGM4LCAweDEyLCAweDYxLCAweDM2LCAweDQwLCAweDExLCAweDc1LCAweDJmLCAweGIzLCAKKyAgICAweDEyLCAweDczLCAweDM1LCAweGMyLCAweDFmLCAweDZjLCAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGMwLCAweDEyLCAweDY0LCAweDg2LCAweDIyLCAweGMyLCAKKyAgICAweGFmLCAweDdlLCAweDA3LCAweDAxLCAweGNiLCAweGJlLCAweDA0LCAweDAwLCAweDAwLCAweDc4LCAweDI4LCAweDc0LCAweDIwLCAweDdhLCAweGIzLCAweDkxLCAKKyAgICAweDAwLCAweDdlLCAweGIzLCAweDkxLCAweDE1LCAweDMwLCAweGU1LCAweDFiLCAweDdlLCAweGIzLCAweDkxLCAweDFhLCAweGJlLCAweGIwLCAweDNmLCAweDM4LCAKKyAgICAweDBjLCAweDg1LCAweDMxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDc0LCAweDgwLCAweDdhLCAweGIzLCAweDkxLCAweDFlLCAweDc0LCAweDIwLCAweDdhLCAKKyAgICAweGIzLCAweDkxLCAweDE1LCAweGQyLCAweGFmLCAweDIyLCAweDM1LCAweDNiLCAweDM2LCAweGU4LCAweDM3LCAweDAwLCAweDM3LCAweDFiLCAweDM3LCAweGI2LCAKKyAgICAweDM4LCAweDRlLCAweDM4LCAweDY5LCAweDM4LCAweGZiLCAweDM4LCAweDg0LCAweDM4LCAweGM1LCAweDdjLCAweGIzLCAweGJlLCAweGIwLCAweDA5LCAweDI4LCAKKyAgICAweDIyLCAweDc1LCAweDJmLCAweDA5LCAweDEyLCAweDczLCAweDM1LCAweDc1LCAweDU3LCAweDAyLCAweDc0LCAweDIwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAKKyAgICAweDc0LCAweDAxLCAweDdhLCAweGIzLCAweDkxLCAweDExLCAweDc0LCAweDQwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDAxLCAweDdhLCAweGIzLCAKKyAgICAweDkxLCAweDExLCAweDIyLCAweGMwLCAweGE4LCAweGMyLCAweGFmLCAweDIzLCAweDZjLCAweGFhLCAweDJlLCAweDU0LCAweDM0LCAweGU2LCAweDBiLCAweDU4LCAKKyAgICAweDUwLCAweDg5LCAweDU0LCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDc1LCAweDJmLCAweGIwLCAweDEyLCAweDczLCAKKyAgICAweDM1LCAweDBhLCAweDIyLCAweDA5LCAweGIyLCAweDM1LCAweDMzLCAweDQyLCAweDI0LCAweGQwLCAweGE4LCAweDIyLCAweDdjLCAweGIyLCAweDIzLCAweDBhLCAKKyAgICAweDNiLCAweDQ5LCAweDMzLCAweDM1LCAweDU3LCAweDg5LCAweDM0LCAweDM1LCAweDY3LCAweDM1LCAweDk1LCAweDM1LCAweGMzLCAweDM1LCAweGYxLCAweDM2LCAKKyAgICAweDFmLCAweDM2LCAweDRkLCAweDM2LCAweDdiLCAweDM2LCAweGE5LCAweDEyLCAweDQxLCAweGJhLCAweGQyLCAweDI4LCAweGQyLCAweDA4LCAweGMyLCAweDQwLCAKKyAgICAweGMyLCAweDQ4LCAweGMyLCAweDM4LCAweGMyLCAweDMwLCAweDZkLCAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGI5LCAweDdlLCAweDA0LCAweDAwLCAweDIwLCAKKyAgICAweDdhLCAweDA3LCAweDAxLCAweDk5LCAweDdlLCAweDA0LCAweDAwLCAweDM4LCAweDdhLCAweDA3LCAweDAxLCAweGE5LCAweDEyLCAweDQxLCAweDI3LCAweDEyLCAKKyAgICAweDVmLCAweGI3LCAweDAyLCAweDM2LCAweGQ3LCAweDEyLCAweDQxLCAweGQ3LCAweGQyLCAweDI5LCAweGQyLCAweDA5LCAweGMyLCAweDQxLCAweGMyLCAweDQ5LCAKKyAgICAweGMyLCAweDM5LCAweGMyLCAweDMxLCAweDZkLCAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGJhLCAweDdlLCAweDA0LCAweDAwLCAweDIwLCAweDdhLCAweDA3LCAKKyAgICAweDAxLCAweDliLCAweDdlLCAweDA0LCAweDAwLCAweDM4LCAweDdhLCAweDA3LCAweDAxLCAweGFiLCAweDEyLCAweDQxLCAweDI3LCAweDEyLCAweDVmLCAweGUwLCAKKyAgICAweDAyLCAweDM2LCAweGQ3LCAweDEyLCAweDQxLCAweGY0LCAweGQyLCAweDJhLCAweGQyLCAweDBhLCAweGMyLCAweDQyLCAweGMyLCAweDRhLCAweGMyLCAweDNhLCAKKyAgICAweGMyLCAweDMyLCAweDZkLCAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGJiLCAweDdlLCAweDA0LCAweDAwLCAweDIwLCAweDdhLCAweDA3LCAweDAxLCAweDlkLCAKKyAgICAweDdlLCAweDA0LCAweDAwLCAweDM4LCAweDdhLCAweDA3LCAweDAxLCAweGFkLCAweDEyLCAweDQxLCAweDI3LCAweDEyLCAweDYwLCAweDA5LCAweDAyLCAweDM2LCAKKyAgICAweGQ3LCAweDEyLCAweDQyLCAweDExLCAweGQyLCAweDJiLCAweGQyLCAweDBiLCAweGMyLCAweDQzLCAweGMyLCAweDRiLCAweGMyLCAweDNiLCAweGMyLCAweDMzLCAKKyAgICAweDZkLCAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGJjLCAweDdlLCAweDA0LCAweDAwLCAweDIwLCAweDdhLCAweDA3LCAweDAxLCAweDlmLCAweDdlLCAweDA0LCAKKyAgICAweDAwLCAweDM4LCAweDdhLCAweDA3LCAweDAxLCAweGFmLCAweDEyLCAweDQxLCAweDI3LCAweDEyLCAweDYwLCAweDMyLCAweDAyLCAweDM2LCAweGQ3LCAweDEyLCAKKyAgICAweDQyLCAweDJlLCAweGQyLCAweDJjLCAweGQyLCAweDBjLCAweGMyLCAweDQ0LCAweGMyLCAweDRjLCAweGMyLCAweDNjLCAweGMyLCAweDM0LCAweDZkLCAweDAwLCAKKyAgICAweDdhLCAweDAzLCAweDAxLCAweGJkLCAweDdlLCAweDA0LCAweDAwLCAweDIwLCAweDdhLCAweDA3LCAweDAxLCAweGExLCAweDdlLCAweDA0LCAweDAwLCAweDM4LCAKKyAgICAweDdhLCAweDA3LCAweDAxLCAweGIxLCAweDEyLCAweDQxLCAweDI3LCAweDEyLCAweDYwLCAweDViLCAweDAyLCAweDM2LCAweGQ3LCAweDEyLCAweDQyLCAweDRiLCAKKyAgICAweGQyLCAweDJkLCAweGQyLCAweDBkLCAweGMyLCAweDQ1LCAweGMyLCAweDRkLCAweGMyLCAweDNkLCAweGMyLCAweDM1LCAweDZkLCAweDAwLCAweDdhLCAweDAzLCAKKyAgICAweDAxLCAweGJlLCAweDdlLCAweDA0LCAweDAwLCAweDIwLCAweDdhLCAweDA3LCAweDAxLCAweGEzLCAweDdlLCAweDA0LCAweDAwLCAweDM4LCAweDdhLCAweDA3LCAKKyAgICAweDAxLCAweGIzLCAweDEyLCAweDQxLCAweDI3LCAweDEyLCAweDYwLCAweDg0LCAweDAyLCAweDM2LCAweGQ3LCAweDEyLCAweDQyLCAweDY4LCAweGQyLCAweDJlLCAKKyAgICAweGQyLCAweDBlLCAweGMyLCAweDQ2LCAweGMyLCAweDRlLCAweGMyLCAweDNlLCAweGMyLCAweDM2LCAweDZkLCAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGJmLCAKKyAgICAweDdlLCAweDA0LCAweDAwLCAweDIwLCAweDdhLCAweDA3LCAweDAxLCAweGE1LCAweDdlLCAweDA0LCAweDAwLCAweDM4LCAweDdhLCAweDA3LCAweDAxLCAweGI1LCAKKyAgICAweDEyLCAweDQxLCAweDI3LCAweDEyLCAweDYwLCAweGFkLCAweDAyLCAweDM2LCAweGQ3LCAweDEyLCAweDQyLCAweDg1LCAweGQyLCAweDJmLCAweGQyLCAweDBmLCAKKyAgICAweGMyLCAweDQ3LCAweGMyLCAweDRmLCAweGMyLCAweDNmLCAweGMyLCAweDM3LCAweDZkLCAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGMwLCAweDdlLCAweDA0LCAKKyAgICAweDAwLCAweDIwLCAweDdhLCAweDA3LCAweDAxLCAweGE3LCAweDdlLCAweDA0LCAweDAwLCAweDM4LCAweDdhLCAweDA3LCAweDAxLCAweGI3LCAweDEyLCAweDQxLCAKKyAgICAweDI3LCAweDEyLCAweDYwLCAweGQ2LCAweDAyLCAweDM2LCAweGQ3LCAweDdlLCAweGEwLCAweGQwLCAweDdlLCAweDYwLCAweDBmLCAweDEyLCAweDYxLCAweDM2LCAKKyAgICAweDQwLCAweDA1LCAweDEyLCAweDY0LCAweDg2LCAweGMyLCAweGQ3LCAweDIyLCAweDc1LCAweDJmLCAweGIxLCAweDEyLCAweDczLCAweDM1LCAweDBhLCAweDUyLCAKKyAgICAweDIzLCAweDZkLCAweDAwLCAweDU5LCAweDA1LCAweDAwLCAweDMyLCAweDEyLCAweDQxLCAweDgzLCAweDEyLCAweDQxLCAweDlmLCAweGQwLCAweGE4LCAweDIyLCAKKyAgICAweDc1LCAweDJmLCAweGIyLCAweDEyLCAweDczLCAweDM1LCAweDBhLCAweDIyLCAweDA5LCAweGIyLCAweDM1LCAweDMzLCAweDQyLCAweDIzLCAweDdlLCAweGIwLCAKKyAgICAweDljLCAweDE5LCAweGIyLCAweDAxLCAweGI5LCAweDEyLCAweDMxLCAweDRjLCAweGQwLCAweGE4LCAweDIyLCAweDdlLCAweDA0LCAweDgwLCAweDAwLCAweDRjLCAKKyAgICAweDAyLCAweDA5LCAweDMwLCAweDAwLCAweDBjLCAweDc0LCAweGJmLCAweDE5LCAweGIwLCAweDAwLCAweDBjLCAweDA5LCAweGIwLCAweDAwLCAweDA4LCAweDE5LCAKKyAgICAweDMwLCAweDAwLCAweDBjLCAweDdjLCAweDc0LCAweDVlLCAweDcwLCAweDAxLCAweDY4LCAweDEyLCAweDQ0LCAweDQwLCAweGNhLCAweGI4LCAweDA5LCAweGIwLCAKKyAgICAweDAwLCAweDEwLCAweDQ0LCAweDAyLCAweDE5LCAweGIwLCAweDAwLCAweDEwLCAweGRhLCAweGI4LCAweDgwLCAweDAyLCAweDU0LCAweGJmLCAweDdjLCAweDc0LCAKKyAgICAweDVlLCAweDcwLCAweDA4LCAweDY4LCAweDA0LCAweDQ0LCAweDA4LCAweDgwLCAweDAyLCAweDU0LCAweGY3LCAweDA5LCAweDMwLCAweDAwLCAweDBjLCAweGNhLCAKKyAgICAweGI4LCAweDc0LCAweGJmLCAweDE5LCAweGIwLCAweDAwLCAweDBjLCAweGRhLCAweGI4LCAweDE5LCAweGIwLCAweDAwLCAweDA4LCAweDE5LCAweDMwLCAweDAwLCAKKyAgICAweDBjLCAweDBhLCAweDYyLCAweDA5LCAweGI2LCAweDM1LCAweDMzLCAweDNlLCAweDIwLCAweDBhLCAweDYyLCAweDdjLCAweDc0LCAweDVlLCAweDcwLCAweDAyLCAKKyAgICAweDY4LCAweDIwLCAweDQyLCAweDI3LCAweGNhLCAweGI4LCAweDc0LCAweDYxLCAweDE5LCAweGIwLCAweDAwLCAweDA4LCAweDdlLCAweDQ0LCAweDAwLCAweDEwLCAKKyAgICAweDU5LCAweDQ2LCAweDAxLCAweGE5LCAweDA5LCAweGIwLCAweDAwLCAweDEwLCAweDQ0LCAweDAxLCAweDE5LCAweGIwLCAweDAwLCAweDEwLCAweGRhLCAweGI4LCAKKyAgICAweDgwLCAweDExLCAweGY0LCAweDUyLCAweDI3LCAweDc0LCAweGExLCAweDE5LCAweGIwLCAweDAwLCAweDA4LCAweDdlLCAweDQ0LCAweDAwLCAweDM4LCAweDU5LCAKKyAgICAweDQ2LCAweDAxLCAweGE5LCAweGQwLCAweGE4LCAweDIyLCAweDdjLCAweDc0LCAweDdlLCAweDA0LCAweDgwLCAweDAwLCAweDRjLCAweDAyLCAweDA5LCAweDMwLCAKKyAgICAweDAwLCAweDBjLCAweDc0LCAweGJmLCAweDE5LCAweGIwLCAweDAwLCAweDBjLCAweDA5LCAweGIwLCAweDAwLCAweDA4LCAweDdjLCAweDc0LCAweDVlLCAweDcwLCAKKyAgICAweDAxLCAweDY4LCAweDA0LCAweDQ0LCAweDgwLCAweDgwLCAweDAyLCAweDU0LCAweDdmLCAweDdjLCAweDc0LCAweDVlLCAweDcwLCAweDA4LCAweDY4LCAweDA0LCAKKyAgICAweDQ0LCAweDAyLCAweDgwLCAweDAyLCAweDU0LCAweGZkLCAweDE5LCAweGIwLCAweDAwLCAweDA4LCAweDE5LCAweDMwLCAweDAwLCAweDBjLCAweDBhLCAweDYyLCAKKyAgICAweDA5LCAweGI2LCAweDM1LCAweDMzLCAweGE1LCAweGZkLCAweGY0LCAweGE1LCAweGZlLCAweGNhLCAweDI4LCAweDNlLCAweDIwLCAweDBhLCAweDYyLCAweGRhLCAKKyAgICAweDI4LCAweDdjLCAweDc0LCAweDVlLCAweDcwLCAweDAyLCAweDY4LCAweDEwLCAweGE1LCAweGVkLCAweDQyLCAweDI4LCAweDQyLCAweDI2LCAweDdlLCAweDQ0LCAKKyAgICAweDAwLCAweDA4LCAweDU5LCAweDQ2LCAweDAxLCAweDk5LCAweDgwLCAweDA0LCAweGE1LCAweGVlLCAweDUyLCAweDI4LCAweDdjLCAweDc0LCAweDVlLCAweDcwLCAKKyAgICAweDA0LCAweDY4LCAweDEwLCAweGE1LCAweGVkLCAweDQyLCAweDI5LCAweDQyLCAweDI2LCAweDdlLCAweDQ0LCAweDAwLCAweDA4LCAweDU5LCAweDQ2LCAweDAxLCAKKyAgICAweDk5LCAweDgwLCAweDE1LCAweGE1LCAweGVlLCAweDUyLCAweDI5LCAweDdjLCAweDc0LCAweDVlLCAweDcwLCAweDAyLCAweDc4LCAweDBhLCAweDUyLCAweDI2LCAKKyAgICAweDdlLCAweDQ0LCAweDAwLCAweDIwLCAweDU5LCAweDQ2LCAweDAxLCAweDk5LCAweDEyLCAweDQyLCAweGEyLCAweGQwLCAweGE4LCAweDIyLCAweDdlLCAweDA0LCAKKyAgICAweDgwLCAweDAwLCAweDRjLCAweDAyLCAweDA5LCAweDMwLCAweDAwLCAweDBjLCAweDc0LCAweGJmLCAweDE5LCAweGIwLCAweDAwLCAweDBjLCAweDE5LCAweDQwLCAKKyAgICAweDAwLCAweDEwLCAweDE5LCAweDMwLCAweDAwLCAweDBjLCAweGQwLCAweGE4LCAweDIyLCAweDdlLCAweDA0LCAweDgwLCAweDAwLCAweDRjLCAweDAyLCAweDA5LCAKKyAgICAweDMwLCAweDAwLCAweDBjLCAweDc0LCAweGJmLCAweDE5LCAweGIwLCAweDAwLCAweDBjLCAweDE5LCAweDQwLCAweDAwLCAweDE4LCAweDE5LCAweDMwLCAweDAwLCAKKyAgICAweDBjLCAweGQwLCAweGE4LCAweDIyLCAweDc1LCAweDJmLCAweGI1LCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweDA0LCAweDgwLCAweDAwLCAweDRjLCAweDAyLCAKKyAgICAweDA5LCAweGIwLCAweDAwLCAweDBjLCAweDQ0LCAweDQwLCAweDE5LCAweGIwLCAweDAwLCAweDBjLCAweGU1LCAweDU4LCAweGI0LCAweDA3LCAweDIzLCAweDA5LCAKKyAgICAweGIwLCAweDAwLCAweDEwLCAweDRlLCAweGIwLCAweDAyLCAweDE5LCAweGIwLCAweDAwLCAweDEwLCAweDA5LCAweDMwLCAweDAwLCAweDBjLCAweDc0LCAweGJmLCAKKyAgICAweDE5LCAweGIwLCAweDAwLCAweDBjLCAweDA5LCAweGIwLCAweDAwLCAweDA0LCAweDU0LCAweGY3LCAweDE5LCAweGIwLCAweDAwLCAweDA0LCAweDE5LCAweDMwLCAKKyAgICAweDAwLCAweDBjLCAweGQwLCAweGE4LCAweDIyLCAweDc1LCAweDJmLCAweGI2LCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweDA0LCAweDgwLCAweDAwLCAweDRjLCAKKyAgICAweDAyLCAweGU1LCAweDU4LCAweGI0LCAweDA3LCAweDE4LCAweDA5LCAweDMwLCAweDAwLCAweDBjLCAweDc0LCAweGJmLCAweDE5LCAweGIwLCAweDAwLCAweDBjLCAKKyAgICAweDA5LCAweGIwLCAweDAwLCAweDA0LCAweDQ0LCAweDA4LCAweDE5LCAweGIwLCAweDAwLCAweDA0LCAweDE5LCAweDMwLCAweDAwLCAweDBjLCAweDA5LCAweGIwLCAKKyAgICAweDAwLCAweDBjLCAweDU0LCAweGJmLCAweDE5LCAweGIwLCAweDAwLCAweDBjLCAweGQwLCAweGE4LCAweDIyLCAweDc1LCAweDJmLCAweGI0LCAweDEyLCAweDczLCAKKyAgICAweDM1LCAweDdhLCAweDIxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDQxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweGIwLCAweDAxLCAKKyAgICAweDdlLCAweGEwLCAweGM4LCAweDdjLCAweDY0LCAweDEyLCAweDYxLCAweDM2LCAweDEyLCAweDY0LCAweDg2LCAweGQwLCAweGE4LCAweDIyLCAweDM5LCAweDJlLCAKKyAgICAweDM5LCAweDc1LCAweDM5LCAweGJjLCAweDNhLCAweDAzLCAweDNhLCAweDRhLCAweDNhLCAweDkxLCAweDNhLCAweGQ4LCAweDNiLCAweDFmLCAweDc1LCAweDJmLCAKKyAgICAweDU1LCAweDEyLCAweDczLCAweDM1LCAweDc1LCAweDJmLCAweDAwLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDYxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAKKyAgICAweDdhLCAweDcxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweDE3LCAweDAxLCAweDY5LCAweDdlLCAweDI3LCAweDAxLCAweDc5LCAweDJkLCAweDIzLCAKKyAgICAweDdlLCAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDdhLCAweDE5LCAweGIwLCAweDBiLCAweDE0LCAweGJlLCAweDE0LCAweDA4LCAweDJjLCAweDM4LCAweDBmLCAKKyAgICAweDFiLCAweDM0LCAweDc4LCAweGVjLCAweDdhLCAweDE3LCAweDAxLCAweDY5LCAweDdhLCAweDI3LCAweDAxLCAweDc5LCAweDAyLCAweDQ2LCAweDRmLCAweDdlLCAKKyAgICAweDE0LCAweDA0LCAweDJkLCAweDgwLCAweGViLCAweDc1LCAweDJmLCAweDU1LCAweDEyLCAweDczLCAweDM1LCAweDc1LCAweDJmLCAweDAxLCAweDEyLCAweDczLCAKKyAgICAweDM1LCAweDdhLCAweDYxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDcxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweDE3LCAweDAxLCAKKyAgICAweDZiLCAweDdlLCAweDI3LCAweDAxLCAweDdiLCAweDJkLCAweDIzLCAweDdlLCAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDdhLCAweDE5LCAweGIwLCAweDBiLCAKKyAgICAweDE0LCAweGJlLCAweDE0LCAweDBjLCAweDJjLCAweDM4LCAweDBmLCAweDFiLCAweDM0LCAweDc4LCAweGVjLCAweDdhLCAweDE3LCAweDAxLCAweDZiLCAweDdhLCAKKyAgICAweDI3LCAweDAxLCAweDdiLCAweDAyLCAweDQ5LCAweDdjLCAweDdlLCAweDE0LCAweDA4LCAweDJkLCAweDgwLCAweGViLCAweDc1LCAweDJmLCAweDU1LCAweDEyLCAKKyAgICAweDczLCAweDM1LCAweDc1LCAweDJmLCAweDAyLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDYxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDcxLCAKKyAgICAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweDE3LCAweDAxLCAweDZkLCAweDdlLCAweDI3LCAweDAxLCAweDdkLCAweDJkLCAweDIzLCAweDdlLCAweDA5LCAKKyAgICAweGIwLCAweDBiLCAweDA0LCAweDdhLCAweDE5LCAweGIwLCAweDBiLCAweDE0LCAweGJlLCAweDE0LCAweDEwLCAweDJjLCAweDM4LCAweDBmLCAweDFiLCAweDM0LCAKKyAgICAweDc4LCAweGVjLCAweDdhLCAweDE3LCAweDAxLCAweDZkLCAweDdhLCAweDI3LCAweDAxLCAweDdkLCAweDAyLCAweDRjLCAweGE5LCAweDdlLCAweDE0LCAweDBjLCAKKyAgICAweDJkLCAweDgwLCAweGViLCAweDc1LCAweDJmLCAweDU1LCAweDEyLCAweDczLCAweDM1LCAweDc1LCAweDJmLCAweDAzLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAKKyAgICAweDYxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDcxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweDE3LCAweDAxLCAweDZmLCAweDdlLCAKKyAgICAweDI3LCAweDAxLCAweDdmLCAweDJkLCAweDIzLCAweDdlLCAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDdhLCAweDE5LCAweGIwLCAweDBiLCAweDE0LCAweGJlLCAKKyAgICAweDE0LCAweDE0LCAweDJjLCAweDM4LCAweDBmLCAweDFiLCAweDM0LCAweDc4LCAweGVjLCAweDdhLCAweDE3LCAweDAxLCAweDZmLCAweDdhLCAweDI3LCAweDAxLCAKKyAgICAweDdmLCAweDAyLCAweDRmLCAweGQ2LCAweDdlLCAweDE0LCAweDEwLCAweDJkLCAweDgwLCAweGViLCAweDc1LCAweDJmLCAweDU1LCAweDEyLCAweDczLCAweDM1LCAKKyAgICAweDc1LCAweDJmLCAweDA0LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDYxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDcxLCAweDJmLCAweDEyLCAKKyAgICAweDczLCAweDM1LCAweDdlLCAweDE3LCAweDAxLCAweDcxLCAweDdlLCAweDI3LCAweDAxLCAweDgxLCAweDJkLCAweDIzLCAweDdlLCAweDA5LCAweGIwLCAweDBiLCAKKyAgICAweDA0LCAweDdhLCAweDE5LCAweGIwLCAweDBiLCAweDE0LCAweGJlLCAweDE0LCAweDE4LCAweDJjLCAweDM4LCAweDBmLCAweDFiLCAweDM0LCAweDc4LCAweGVjLCAKKyAgICAweDdhLCAweDE3LCAweDAxLCAweDcxLCAweDdhLCAweDI3LCAweDAxLCAweDgxLCAweDAyLCAweDUzLCAweDAzLCAweDdlLCAweDE0LCAweDE0LCAweDJkLCAweDgwLCAKKyAgICAweGViLCAweDc1LCAweDJmLCAweDU1LCAweDEyLCAweDczLCAweDM1LCAweDc1LCAweDJmLCAweDA1LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDYxLCAweDJmLCAKKyAgICAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDcxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweDE3LCAweDAxLCAweDczLCAweDdlLCAweDI3LCAweDAxLCAKKyAgICAweDgzLCAweDJkLCAweDIzLCAweDdlLCAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDdhLCAweDE5LCAweGIwLCAweDBiLCAweDE0LCAweGJlLCAweDE0LCAweDFjLCAKKyAgICAweDJjLCAweDM4LCAweDBmLCAweDFiLCAweDM0LCAweDc4LCAweGVjLCAweDdhLCAweDE3LCAweDAxLCAweDczLCAweDdhLCAweDI3LCAweDAxLCAweDgzLCAweDAyLCAKKyAgICAweDU2LCAweDMwLCAweDdlLCAweDE0LCAweDE4LCAweDJkLCAweDgwLCAweGViLCAweDc1LCAweDJmLCAweDU1LCAweDEyLCAweDczLCAweDM1LCAweDc1LCAweDJmLCAKKyAgICAweDA2LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDYxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDcxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAKKyAgICAweDdlLCAweDE3LCAweDAxLCAweDc1LCAweDdlLCAweDI3LCAweDAxLCAweDg1LCAweDJkLCAweDIzLCAweDdlLCAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDdhLCAKKyAgICAweDE5LCAweGIwLCAweDBiLCAweDE0LCAweGJlLCAweDE0LCAweDIwLCAweDJjLCAweDM4LCAweDBmLCAweDFiLCAweDM0LCAweDc4LCAweGVjLCAweDdhLCAweDE3LCAKKyAgICAweDAxLCAweDc1LCAweDdhLCAweDI3LCAweDAxLCAweDg1LCAweDAyLCAweDU5LCAweDVkLCAweDdlLCAweDE0LCAweDFjLCAweDJkLCAweDgwLCAweGViLCAweDc1LCAKKyAgICAweDJmLCAweDU1LCAweDEyLCAweDczLCAweDM1LCAweDc1LCAweDJmLCAweDA3LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDYxLCAweDJmLCAweDEyLCAweDczLCAKKyAgICAweDM1LCAweDdhLCAweDcxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweDE3LCAweDAxLCAweDc3LCAweDdlLCAweDI3LCAweDAxLCAweDg3LCAweDJkLCAKKyAgICAweDIzLCAweDdlLCAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDdhLCAweDE5LCAweGIwLCAweDBiLCAweDE0LCAweGJlLCAweDE0LCAweDI0LCAweDJjLCAweDM4LCAKKyAgICAweDBmLCAweDFiLCAweDM0LCAweDc4LCAweGVjLCAweDdhLCAweDE3LCAweDAxLCAweDc3LCAweDdhLCAweDI3LCAweDAxLCAweDg3LCAweDAyLCAweDVjLCAweDhhLCAKKyAgICAweDdlLCAweDE0LCAweDIwLCAweDJkLCAweDgwLCAweGViLCAKKworLy8gU2VnbWVudCAjMTUsIFN0YXJ0IEFkZHJlc3MgMDBmZjQwMDAsIExlbmd0aCAxMzEwOQorMHhmZiwweDAwLDB4MDAsMHg0MCwweDM1LDB4MzMsCisgICAgMHg3ZSwgMHgwNCwgMHgwMCwgMHgwMSwgMHg3ZSwgMHgxNCwgMHg3ZiwgMHhmOCwgMHg3ZSwgMHgyNCwgMHgwMCwgMHhmZSwgMHg3ZCwgMHgzMSwgMHgwYiwgMHgxYSwgCisgICAgMHg1MCwgMHgxYiwgMHgwYSwgMHg1MCwgMHg3ZSwgMHgxNCwgMHg0MCwgMHgxYiwgMHgwMiwgMHg0MCwgMHg3NCwgMHg3ZSwgMHhmOCwgMHgwMCwgMHg1OSwgMHg3NSwgCisgICAgMHhiMCwgMHhkZiwgMHg3ZSwgMHhiMCwgMHgwMSwgMHg3YSwgMHhiMywgMHg5MCwgMHgwMCwgMHg3ZSwgMHhmNCwgMHg0MCwgMHgzMCwgMHgwMiwgMHg0MCwgMHg4YiwgCisgICAgMHgxMiwgMHg3NCwgMHg0ZSwgMHhmNSwgMHgyZSwgMHg3YSwgMHhhMSwgMHgyZCwgMHg3YSwgMHgxMSwgMHg1OCwgMHgxMiwgMHg2YiwgMHgwMiwgMHgxMiwgMHg0MCwgCisgICAgMHhlYiwgMHg3ZSwgMHhiMywgMHgzZiwgMHhmMSwgMHg2MCwgMHgwMywgMHgxMiwgMHg0MywgMHg3OSwgMHgxMiwgMHg2YiwgMHhkZSwgMHhkMiwgMHhhZiwgMHgwMiwgCisgICAgMHgzMCwgMHgwMCwgMHg3ZSwgMHgwNCwgMHgwMCwgMHhmZiwgMHg3ZSwgMHgxOCwgMHg0MCwgMHg2MCwgMHg3YSwgMHgxYywgMHgwMCwgMHgwMSwgMHg4OSwgMHgxOCwgCisgICAgMHg3ZSwgMHhiMCwgMHgwMSwgMHg3YSwgMHhiMywgMHg5NCwgMHgwMCwgMHg3YSwgMHhiMywgMHgyYywgMHgzNSwgMHg3ZSwgMHhiMCwgMHgwMSwgMHg3YSwgMHhiMywgCisgICAgMHg5MywgMHgwMCwgMHg4OSwgMHgwOCwgMHg3ZSwgMHgwNCwgMHgwMCwgMHhmZiwgMHg3ZSwgMHgxOCwgMHg0MCwgMHg4MiwgMHg3YSwgMHgxYywgMHgwMCwgMHgwMSwgCisgICAgMHg4OSwgMHgxOCwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MywgMHgwMCwgMHg4OSwgMHgwOCwgMHg3ZSwgMHgwOCwgMHgwMCwgMHgyMCwgMHg3ZSwgCisgICAgMHg0NCwgMHgwNCwgMHgwMCwgMHg3ZSwgMHg0MCwgMHgwMCwgMHg3ZSwgMHhlNCwgMHg0MCwgMHg5ZCwgMHgwMiwgMHg3MywgMHg1MCwgMHg3ZSwgMHgwOCwgMHgwMSwgCisgICAgMHg1OSwgMHg3ZSwgMHg0NCwgMHgyYSwgMHhkZCwgMHg3ZSwgMHg0MCwgMHgwMCwgMHg3ZSwgMHhlNCwgMHg0MCwgMHhhZiwgMHgwMiwgMHg3MywgMHg1MCwgMHg3ZSwgCisgICAgMHgwOCwgMHgwMCwgMHg1OSwgMHg3ZSwgMHg0NCwgMHgwMSwgMHgwMCwgMHg3ZSwgMHg0MCwgMHg1MywgMHg3ZSwgMHhlNCwgMHg0MCwgMHhjMSwgMHgwMiwgMHg3MywgCisgICAgMHg1MCwgMHg3NSwgMHg1NywgMHgwMSwgMHg3NSwgMHg1NiwgMHgwMCwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgwOCwgMHg3NSwgMHg1NCwgMHg1OCwgMHg3NSwgMHg1NSwgCisgICAgMHgwOCwgMHg3NSwgMHg1MSwgMHgwOCwgMHg3NSwgMHg1MywgMHgwMSwgMHg3NSwgMHg4OSwgMHgwMSwgMHg3NSwgMHg4YSwgMHgwMSwgMHg3NSwgMHg4YywgMHgwMCwgCisgICAgMHhkMiwgMHg4YywgMHg3ZSwgMHgwNCwgMHgwMCwgMHgwMiwgMHg3YSwgMHgwNSwgMHg0MiwgMHg4OSwgMHhmNCwgMHg3NSwgMHhiNywgMHg3ZiwgMHg3NSwgMHhiOCwgCisgICAgMHg3ZiwgMHg3NSwgMHhiMywgMHgwMSwgMHg3NSwgMHhiMiwgMHgwMSwgMHhkMiwgMHhhOSwgMHgyMiwgMHg3NSwgMHhiMCwgMHhkZiwgMHhlNCwgMHhkNSwgMHhlMCwgCisgICAgMHhmZCwgMHg3NSwgMHhiMCwgMHhlZiwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgyZSwgMHg3ZSwgMHhhMCwgMHgwOCwgMHgxOSwgMHhhMiwgCisgICAgMHgwMCwgMHgxMCwgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHhmMiwgMHg3ZSwgMHgyMCwgMHgwMCwgMHgxMiwgMHg0MSwgMHg4MywgMHgwYiwgCisgICAgMHgyMCwgMHhiZSwgMHgyMSwgMHgyZSwgMHg3OCwgMHhmNiwgMHgyMiwgMHg3ZSwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0YywgMHgwMiwgMHg3NCwgMHhiZiwgMHgxOSwgCisgICAgMHhiMCwgMHgwMCwgMHgwYywgMHg3NCwgMHgxMCwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwOCwgMHg3NCwgMHg4MCwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgMHg3ZSwgCisgICAgMHg1NCwgMHgwMCwgMHgwMiwgMHgxOSwgMHhhMCwgMHgwMCwgMHgwNCwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMywgMHgxOSwgMHhiMCwgMHgwMCwgCisgICAgMHgwYywgMHg3NCwgMHgwNywgMHgyMCwgMHg2OCwgMHgwMiwgMHg3NCwgMHgwZiwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwNCwgMHgzMCwgMHg2YiwgMHgxNywgMHg3NCwgCisgICAgMHhiZiwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgMHg3NCwgMHgyOCwgMHgyMCwgMHg2OCwgMHgwMiwgMHg3NCwgMHgyMCwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwNCwgCisgICAgMHg3NCwgMHgwMywgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgMHg3NCwgMHhhNywgMHgxOSwgMHhiMCwgMHgwMCwgMHgwOCwgMHg3NCwgMHgwYywgMHgxOSwgMHhiMCwgCisgICAgMHgwMCwgMHgxMCwgMHgyMiwgMHg3ZSwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0YywgMHgwMiwgMHhlNCwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhiMCwgCisgICAgMHgwMCwgMHgxMCwgMHg1NCwgMHgwOCwgMHgxOSwgMHhiMCwgMHgwMCwgMHgxMCwgMHg3NCwgMHhhNywgMHgxOSwgMHhiMCwgMHgwMCwgMHgwOCwgMHgyMiwgMHg3YywgCisgICAgMHhiMiwgMHgyMywgMHgwYSwgMHgyYiwgMHg0OSwgMHgyMiwgMHg0MSwgMHhhYSwgMHg4OSwgMHgyNCwgMHg0MSwgMHhiYSwgMHg0MSwgMHhkNywgMHg0MSwgMHhmNCwgCisgICAgMHg0MiwgMHgxMSwgMHg0MiwgMHgyZSwgMHg0MiwgMHg0YiwgMHg0MiwgMHg2OCwgMHg0MiwgMHg4NSwgMHhjMiwgMHgxMCwgMHhjMiwgMHgxOCwgMHhjMiwgMHgwOCwgCisgICAgMHg3ZSwgMHgwNCwgMHgwNCwgMHgyZCwgMHg3YSwgMHgwNywgMHgwMSwgMHg1OSwgMHg3YSwgMHgwNywgMHgwMSwgMHg2OSwgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwNywgCisgICAgMHgwMSwgMHg3OSwgMHg3YSwgMHgwNywgMHgwMSwgMHg4OSwgMHgyMiwgMHhjMiwgMHgxMSwgMHhjMiwgMHgxOSwgMHhjMiwgMHgwOSwgMHg3ZSwgMHgwNCwgMHgwOCwgCisgICAgMHgyZCwgMHg3YSwgMHgwNywgMHgwMSwgMHg1YiwgMHg3YSwgMHgwNywgMHgwMSwgMHg2YiwgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwNywgMHgwMSwgMHg3YiwgMHg3YSwgCisgICAgMHgwNywgMHgwMSwgMHg4YiwgMHgyMiwgMHhjMiwgMHgxMiwgMHhjMiwgMHgxYSwgMHhjMiwgMHgwYSwgMHg3ZSwgMHgwNCwgMHgwYywgMHgyZCwgMHg3YSwgMHgwNywgCisgICAgMHgwMSwgMHg1ZCwgMHg3YSwgMHgwNywgMHgwMSwgMHg2ZCwgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwNywgMHgwMSwgMHg3ZCwgMHg3YSwgMHgwNywgMHgwMSwgMHg4ZCwgCisgICAgMHgyMiwgMHhjMiwgMHgxMywgMHhjMiwgMHgxYiwgMHhjMiwgMHgwYiwgMHg3ZSwgMHgwNCwgMHgxMCwgMHgyZCwgMHg3YSwgMHgwNywgMHgwMSwgMHg1ZiwgMHg3YSwgCisgICAgMHgwNywgMHgwMSwgMHg2ZiwgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwNywgMHgwMSwgMHg3ZiwgMHg3YSwgMHgwNywgMHgwMSwgMHg4ZiwgMHgyMiwgMHhjMiwgMHgxNCwgCisgICAgMHhjMiwgMHgxYywgMHhjMiwgMHgwYywgMHg3ZSwgMHgwNCwgMHgxNCwgMHgyZCwgMHg3YSwgMHgwNywgMHgwMSwgMHg2MSwgMHg3YSwgMHgwNywgMHgwMSwgMHg3MSwgCisgICAgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwNywgMHgwMSwgMHg4MSwgMHg3YSwgMHgwNywgMHgwMSwgMHg5MSwgMHgyMiwgMHhjMiwgMHgxNSwgMHhjMiwgMHgxZCwgMHhjMiwgCisgICAgMHgwZCwgMHg3ZSwgMHgwNCwgMHgxOCwgMHgyZCwgMHg3YSwgMHgwNywgMHgwMSwgMHg2MywgMHg3YSwgMHgwNywgMHgwMSwgMHg3MywgMHg2ZCwgMHgwMCwgMHg3YSwgCisgICAgMHgwNywgMHgwMSwgMHg4MywgMHg3YSwgMHgwNywgMHgwMSwgMHg5MywgMHgyMiwgMHhjMiwgMHgxNiwgMHhjMiwgMHgxZSwgMHhjMiwgMHgwZSwgMHg3ZSwgMHgwNCwgCisgICAgMHgxYywgMHgyZCwgMHg3YSwgMHgwNywgMHgwMSwgMHg2NSwgMHg3YSwgMHgwNywgMHgwMSwgMHg3NSwgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwNywgMHgwMSwgMHg4NSwgCisgICAgMHg3YSwgMHgwNywgMHgwMSwgMHg5NSwgMHgyMiwgMHhjMiwgMHgxNywgMHhjMiwgMHgxZiwgMHhjMiwgMHgwZiwgMHg3ZSwgMHgwNCwgMHgyMCwgMHgyZCwgMHg3YSwgCisgICAgMHgwNywgMHgwMSwgMHg2NywgMHg3YSwgMHgwNywgMHgwMSwgMHg3NywgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwNywgMHgwMSwgMHg4NywgMHg3YSwgMHgwNywgMHgwMSwgCisgICAgMHg5NywgMHgyMiwgMHg3YywgMHhiMiwgMHgyMywgMHgwYSwgMHgyYiwgMHg0OSwgMHgyMiwgMHg0MiwgMHhhZCwgMHg4OSwgMHgyNCwgMHg0MiwgMHhiZCwgMHg0MiwgCisgICAgMHhkNCwgMHg0MiwgMHhlYiwgMHg0MywgMHgwMiwgMHg0MywgMHgxOSwgMHg0MywgMHgzMCwgMHg0MywgMHg0NywgMHg0MywgMHg1ZSwgMHgzMCwgMHg0MCwgMHgwNywgCisgICAgMHgyMCwgMHg1OCwgMHgwNCwgMHhjMiwgMHgyOCwgMHg4MCwgMHgwYywgMHgzMCwgMHg0OCwgMHgwNywgMHgyMCwgMHg1MCwgMHgwNCwgMHhjMiwgMHgyOCwgMHg4MCwgCisgICAgMHgwMiwgMHhkMiwgMHgyOCwgMHgyMiwgMHgzMCwgMHg0MSwgMHgwNywgMHgyMCwgMHg1OSwgMHgwNCwgMHhjMiwgMHgyOSwgMHg4MCwgMHgwYywgMHgzMCwgMHg0OSwgCisgICAgMHgwNywgMHgyMCwgMHg1MSwgMHgwNCwgMHhjMiwgMHgyOSwgMHg4MCwgMHgwMiwgMHhkMiwgMHgyOSwgMHgyMiwgMHgzMCwgMHg0MiwgMHgwNywgMHgyMCwgMHg1YSwgCisgICAgMHgwNCwgMHhjMiwgMHgyYSwgMHg4MCwgMHgwYywgMHgzMCwgMHg0YSwgMHgwNywgMHgyMCwgMHg1MiwgMHgwNCwgMHhjMiwgMHgyYSwgMHg4MCwgMHgwMiwgMHhkMiwgCisgICAgMHgyYSwgMHgyMiwgMHgzMCwgMHg0MywgMHgwNywgMHgyMCwgMHg1YiwgMHgwNCwgMHhjMiwgMHgyYiwgMHg4MCwgMHgwYywgMHgzMCwgMHg0YiwgMHgwNywgMHgyMCwgCisgICAgMHg1MywgMHgwNCwgMHhjMiwgMHgyYiwgMHg4MCwgMHgwMiwgMHhkMiwgMHgyYiwgMHgyMiwgMHgzMCwgMHg0NCwgMHgwNywgMHgyMCwgMHg1YywgMHgwNCwgMHhjMiwgCisgICAgMHgyYywgMHg4MCwgMHgwYywgMHgzMCwgMHg0YywgMHgwNywgMHgyMCwgMHg1NCwgMHgwNCwgMHhjMiwgMHgyYywgMHg4MCwgMHgwMiwgMHhkMiwgMHgyYywgMHgyMiwgCisgICAgMHgzMCwgMHg0NSwgMHgwNywgMHgyMCwgMHg1ZCwgMHgwNCwgMHhjMiwgMHgyZCwgMHg4MCwgMHgwYywgMHgzMCwgMHg0ZCwgMHgwNywgMHgyMCwgMHg1NSwgMHgwNCwgCisgICAgMHhjMiwgMHgyZCwgMHg4MCwgMHgwMiwgMHhkMiwgMHgyZCwgMHgyMiwgMHgzMCwgMHg0NiwgMHgwNywgMHgyMCwgMHg1ZSwgMHgwNCwgMHhjMiwgMHgyZSwgMHg4MCwgCisgICAgMHgwYywgMHgzMCwgMHg0ZSwgMHgwNywgMHgyMCwgMHg1NiwgMHgwNCwgMHhjMiwgMHgyZSwgMHg4MCwgMHgwMiwgMHhkMiwgMHgyZSwgMHgyMiwgMHgzMCwgMHg0NywgCisgICAgMHgwNywgMHgyMCwgMHg1ZiwgMHgwNCwgMHhjMiwgMHgyZiwgMHg4MCwgMHgwYywgMHgzMCwgMHg0ZiwgMHgwNywgMHgyMCwgMHg1NywgMHgwNCwgMHhjMiwgMHgyZiwgCisgICAgMHg4MCwgMHgwMiwgMHhkMiwgMHgyZiwgMHgyMiwgMHg0NCwgMHg2NiwgMHg0MywgMHg4YSwgMHhiZSwgMHhiMCwgMHgwMiwgMHg0MCwgMHgwMSwgMHgyMiwgMHgyMywgCisgICAgMHgwYSwgMHg1YiwgMHg0OSwgMHg1NSwgMHg0MywgMHg3NSwgMHg5OSwgMHg1NCwgMHhkMywgMHgyMiwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5NCwgCisgICAgMHgwMCwgMHg3YSwgMHhiMywgMHgyYywgMHgzNSwgMHgxMiwgMHg0NCwgMHg3YSwgMHg3ZSwgMHgwNCwgMHgyOCwgMHgyZCwgMHg3YSwgMHgwNywgMHgwMSwgMHhjMSwgCisgICAgMHg3YSwgMHgwNywgMHgwMSwgMHhjMywgMHg3ZSwgMHgwNCwgMHgyNCwgMHgyZCwgMHg3YSwgMHgwNywgMHgwMSwgMHhjNywgMHg3YSwgMHgwNywgMHgwMSwgMHhjOSwgCisgICAgMHg3ZSwgMHgwNCwgMHg2NiwgMHg3ZiwgMHg3YSwgMHgwNSwgMHg0YiwgMHg3NCwgMHgyMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHg2MCwgMHg3YSwgCisgICAgMHhiMywgMHg5MSwgMHgxYywgMHg3NCwgMHgxMiwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNiwgMHg3NCwgMHg0MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNywgMHg3NCwgCisgICAgMHgxZSwgMHg3YSwgMHhiMywgMHg5MSwgMHgxMCwgMHg3NCwgMHg0OCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxMiwgMHg3NCwgMHgxMCwgMHg3YSwgMHhiMywgMHg5MSwgCisgICAgMHgxMywgMHg3NCwgMHgzZiwgMHg3YSwgMHhiMywgMHg5MSwgMHgxNCwgMHg3NCwgMHg0MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHg2MCwgMHg3YSwgCisgICAgMHhiMywgMHg5MSwgMHgxYywgMHg3NCwgMHgxNCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNiwgMHg3NCwgMHg0MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNywgMHg3NCwgCisgICAgMHgxNiwgMHg3YSwgMHhiMywgMHg5MSwgMHgxMCwgMHg3NCwgMHgwOCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxMSwgMHg3NCwgMHgyMCwgMHg3YSwgMHhiMywgMHg5MSwgCisgICAgMHgxMywgMHg3NCwgMHgzZiwgMHg3YSwgMHhiMywgMHg5MSwgMHgxNCwgMHg3NCwgMHg2MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHg2MCwgMHg3YSwgCisgICAgMHhiMywgMHg5MSwgMHgxYywgMHg3NCwgMHgxNiwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNiwgMHg3NCwgMHgyMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNywgMHg3NCwgCisgICAgMHgyZiwgMHg3YSwgMHhiMywgMHg5MSwgMHgxMCwgMHg3NCwgMHg0OCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxMiwgMHg3NCwgMHgxMCwgMHg3YSwgMHhiMywgMHg5MSwgCisgICAgMHgxMywgMHg3NCwgMHgzZiwgMHg3YSwgMHhiMywgMHg5MSwgMHgxNCwgMHg3NCwgMHgwMiwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNiwgMHg3NCwgMHgwZiwgMHg3YSwgCisgICAgMHhiMywgMHg5MSwgMHgwNywgMHgxMiwgMHg0MCwgMHhmYSwgMHg3ZSwgMHgyMCwgMHgwMCwgMHgxMiwgMHg0MSwgMHg5ZiwgMHgwYiwgMHgyMCwgMHhiZSwgMHgyMSwgCisgICAgMHgyZSwgMHg3OCwgMHhmNiwgMHhkMiwgMHhhOCwgMHgyMiwgMHg3ZSwgMHhiMCwgMHgwMSwgMHg3YSwgMHhiMywgMHg5NCwgMHgwMCwgMHg3YSwgMHhiMywgMHgyYywgCisgICAgMHgzNSwgMHgxMiwgMHg0NCwgMHg3YSwgMHg3NSwgMHhiMCwgMHhkZiwgMHhjMiwgMHhhOCwgMHgyMiwgMHg3NCwgMHgwMiwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNiwgCisgICAgMHg3NCwgMHgwMSwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNywgMHg3ZSwgMHgyMCwgMHgwNCwgMHg3YywgMHhiMiwgMHhjMiwgMHhkNywgMHgxMywgMHgxMywgMHgxMywgCisgICAgMHgxMywgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHg2MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxYywgMHg3NCwgMHgwMiwgMHg3YSwgMHhiMywgMHg5MSwgCisgICAgMHgxMiwgMHhhNSwgMHhkYSwgMHhlNSwgMHgyMiwgMHhjYSwgMHgwOSwgMHgxMiwgMHgzMCwgMHgwZSwgMHgxMCwgMHgwMSwgMHgzNCwgMHhkNSwgMHg1MSwgMHg0MCwgCisgICAgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNiwgMHg3ZSwgMHhiMywgMHg5MSwgMHgwNywgCisgICAgMHg3NCwgMHgwMywgMHg3YSwgMHhiMywgMHg5MSwgMHgwNiwgMHg3ZSwgMHhiMywgMHg5MSwgMHgwNywgMHg3ZSwgMHhiMywgMHg5MSwgMHgxNCwgMHg3ZSwgMHhiMywgCisgICAgMHg5MSwgMHgwNCwgMHg2MywgMHg1MywgMHgwMSwgMHg3ZSwgMHgwMCwgMHg1NCwgMHgyZSwgMHgwMSwgMHg1MywgMHhhNSwgMHhlNiwgMHhmNSwgMHg1MSwgMHg4MCwgCisgICAgMHgxMiwgMHgyMCwgMHgwMiwgMHgxZCwgMHg3NSwgMHg1MywgMHgwMCwgMHg4NSwgMHg1NCwgMHg1MSwgMHhkMiwgMHgwMiwgMHg3NCwgMHgwMywgMHg4MCwgMHgwZCwgCisgICAgMHgzMCwgMHgwMiwgMHgwZSwgMHhjMiwgMHgwMiwgMHg3ZSwgMHgwMCwgMHg1NiwgMHgyZSwgMHgwMSwgMHg1MywgMHhhNSwgMHhlNiwgMHg3YSwgMHhiMywgMHg5MCwgCisgICAgMHgwMCwgMHhkYSwgMHgwOSwgMHgzMiwgMHg0NSwgMHg2ZiwgMHg0NSwgMHg4YiwgMHg0NSwgMHhhNywgMHg0NSwgMHhjMywgMHg0NSwgMHhkZiwgMHg0NSwgMHhmYiwgCisgICAgMHg0NiwgMHgxNywgMHg0NiwgMHgzMywgMHhjMCwgMHhkMCwgMHhjMCwgMHhkMSwgMHhjMCwgMHhlMCwgMHhjMCwgMHhmMCwgMHhjYSwgMHgwYiwgMHhjYSwgMHgxYiwgCisgICAgMHhjYSwgMHgyYiwgMHhkMiwgMHgwMSwgMHg3NSwgMHgyZiwgMHg4OSwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHhiMywgMHg5MCwgMHgwMCwgMHg2MCwgMHgyOCwgCisgICAgMHg3ZSwgMHgxNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgxMywgMHg1MCwgMHgxMywgMHhjYSwgMHgwYiwgMHhjYSwgMHg1OSwgMHg3YywgMHhiMCwgCisgICAgMHgyMywgMHgwYSwgMHgyYiwgMHg0OSwgMHgyMiwgMHg0NSwgMHgwNCwgMHg5OSwgMHgyNCwgMHhkYSwgMHg1OSwgMHhkYSwgMHgwYiwgMHhhNSwgMHgwYSwgMHhhNSwgCisgICAgMHgwOCwgMHhiZSwgMHgwMSwgMHgyZSwgMHg3OCwgMHhlMSwgMHg4MCwgMHhkMiwgMHgzMCwgMHgwNCwgMHgwNSwgMHhjMiwgMHgwNCwgMHgxMiwgMHg2NCwgMHg4NiwgCisgICAgMHhkYSwgMHgyYiwgMHhkYSwgMHgxYiwgMHhkYSwgMHgwYiwgMHhkMCwgMHhmMCwgMHhkMCwgMHhlMCwgMHhkMCwgMHhkMSwgMHhkMCwgMHhkMCwgMHgzMiwgMHgwOSwgCisgICAgMHhiMSwgMHgwMCwgMHgwOCwgMHgyMCwgMHhlMCwgMHgxNCwgMHg3NSwgMHgyZiwgMHg4MCwgMHgxMiwgMHg3MywgMHgzNSwgMHg1NCwgMHgzZSwgMHgwYSwgMHg1YiwgCisgICAgMHg3ZSwgMHg0NCwgMHgwMCwgMHhmZiwgMHg2OSwgMHg1MiwgMHg2MSwgMHhhYiwgMHg4OSwgMHg1NCwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwOCwgMHgyMCwgCisgICAgMHhlMCwgMHgxNCwgMHg3NSwgMHgyZiwgMHg4MSwgMHgxMiwgMHg3MywgMHgzNSwgMHg1NCwgMHgzZSwgMHgwYSwgMHg1YiwgMHg3ZSwgMHg0NCwgMHgwMCwgMHhmZiwgCisgICAgMHg2OSwgMHg1MiwgMHg2MSwgMHhlYiwgMHg4OSwgMHg1NCwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwOCwgMHgyMCwgMHhlMCwgMHgxNCwgMHg3NSwgMHgyZiwgCisgICAgMHg4MiwgMHgxMiwgMHg3MywgMHgzNSwgMHg1NCwgMHgzZSwgMHgwYSwgMHg1YiwgMHg3ZSwgMHg0NCwgMHgwMCwgMHhmZiwgMHg2OSwgMHg1MiwgMHg2MiwgMHgyYiwgCisgICAgMHg4OSwgMHg1NCwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwOCwgMHgyMCwgMHhlMCwgMHgxNCwgMHg3NSwgMHgyZiwgMHg4MywgMHgxMiwgMHg3MywgMHgzNSwgCisgICAgMHg1NCwgMHgzZSwgMHgwYSwgMHg1YiwgMHg3ZSwgMHg0NCwgMHgwMCwgMHhmZiwgMHg2OSwgMHg1MiwgMHg2MiwgMHg2YiwgMHg4OSwgMHg1NCwgMHgyMiwgMHgwOSwgCisgICAgMHhiMSwgMHgwMCwgMHgwOCwgMHgyMCwgMHhlMCwgMHgxNCwgMHg3NSwgMHgyZiwgMHg4NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg1NCwgMHgzZSwgMHgwYSwgMHg1YiwgCisgICAgMHg3ZSwgMHg0NCwgMHgwMCwgMHhmZiwgMHg2OSwgMHg1MiwgMHg2MiwgMHhhYiwgMHg4OSwgMHg1NCwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwOCwgMHgyMCwgCisgICAgMHhlMCwgMHgxNCwgMHg3NSwgMHgyZiwgMHg4NSwgMHgxMiwgMHg3MywgMHgzNSwgMHg1NCwgMHgzZSwgMHgwYSwgMHg1YiwgMHg3ZSwgMHg0NCwgMHgwMCwgMHhmZiwgCisgICAgMHg2OSwgMHg1MiwgMHg2MiwgMHhlYiwgMHg4OSwgMHg1NCwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwOCwgMHgyMCwgMHhlMCwgMHgxNCwgMHg3NSwgMHgyZiwgCisgICAgMHg4NiwgMHgxMiwgMHg3MywgMHgzNSwgMHg1NCwgMHgzZSwgMHgwYSwgMHg1YiwgMHg3ZSwgMHg0NCwgMHgwMCwgMHhmZiwgMHg2OSwgMHg1MiwgMHg2MywgMHgyYiwgCisgICAgMHg4OSwgMHg1NCwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwOCwgMHgyMCwgMHhlMCwgMHgxNCwgMHg3NSwgMHgyZiwgMHg4NywgMHgxMiwgMHg3MywgMHgzNSwgCisgICAgMHg1NCwgMHgzZSwgMHgwYSwgMHg1YiwgMHg3ZSwgMHg0NCwgMHgwMCwgMHhmZiwgMHg2OSwgMHg1MiwgMHg2MywgMHg2YiwgMHg4OSwgMHg1NCwgMHgyMiwgMHgxMCwgCisgICAgMHgwOCwgMHgwMSwgMHgyMiwgMHgyMCwgMHgyOCwgMHgwMywgMHhkMiwgMHgwOCwgMHgyMiwgMHg3NSwgMHgyZiwgMHhhMCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgCisgICAgMHgxNCwgMHg4MCwgMHgwMCwgMHg4MCwgMHgwNiwgMHgyMCwgMHgyOCwgMHgwMywgMHhkMiwgMHgwOCwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgCisgICAgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwMywgMHgxMiwgMHg0OSwgMHg0NSwgMHgzMCwgMHgzMCwgMHgwNiwgMHgyMCwgMHhlNiwgCisgICAgMHg0ZiwgMHhkMiwgMHgwOCwgMHgyMiwgMHgzMCwgMHhlNiwgMHgwMiwgMHhkMiwgMHg2MCwgMHg3ZSwgMHgzNywgMHgwMSwgMHg3OSwgMHg3ZSwgMHgyNywgMHgwMSwgCisgICAgMHg5OSwgMHg5ZCwgMHgzMiwgMHg0MCwgMHgzMSwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHgzMiwgMHg3YSwgMHgwNSwgMHgzMiwgMHg3YSwgMHgzNywgMHgwMSwgCisgICAgMHg3OSwgMHg3ZSwgMHgzNywgMHgwMSwgMHg1OSwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgwOCwgMHgyYywgMHgzOCwgMHg2OCwgMHg3YSwgCisgICAgMHg0NywgMHgwMSwgMHg1OSwgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgxMiwgCisgICAgMHg2OSwgMHhmMCwgMHgxMCwgMHg2MCwgMHhjNCwgMHgyMiwgMHhjMiwgMHg2MCwgMHgyZCwgMHgyMywgMHg2OCwgMHg3OCwgMHg2ZCwgMHgzMywgMHg4MCwgMHgxYSwgCisgICAgMHg3ZSwgMHgyNywgMHgwMSwgMHg3OSwgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg2YSwgMHhiZSwgMHgyNywgMHgwMSwgMHg5OSwgMHgyOCwgMHgwNCwgCisgICAgMHg3ZSwgMHgyNywgMHgwMSwgMHg5OSwgMHg3ZSwgMHgzNywgMHgwMSwgMHg3OSwgMHg5ZCwgMHgzMiwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHgzMiwgMHg3YSwgCisgICAgMHgwNSwgMHgzMiwgMHg3YSwgMHgzNywgMHgwMSwgMHg3OSwgMHg3ZSwgMHgzNywgMHgwMSwgMHg1OSwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgCisgICAgMHgwOCwgMHgyYywgMHgzOCwgMHgxMywgMHg3YSwgMHg0NywgMHgwMSwgMHg1OSwgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg1MSwgCisgICAgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgwMiwgMHg2OSwgMHhmMCwgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgCisgICAgMHgxMiwgMHg3MywgMHgzNSwgMHg5ZSwgMHg0NCwgMHgwOCwgMHgyZCwgMHg5ZCwgMHgyNCwgMHgxMiwgMHg2OSwgMHhmMCwgMHg3ZSwgMHgzNCwgMHgwNCwgMHgyZCwgCisgICAgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHg1OSwgMHgxMiwgMHg2OSwgMHhmMCwgMHhiZSwgMHgyNSwgMHgyMCwgMHg3OCwgMHgwMywgCisgICAgMHgwMiwgMHg0NiwgMHhjMiwgMHgyMiwgMHhkMiwgMHgwOCwgMHg3ZSwgMHgwNCwgMHgwNCwgMHgyZCwgMHg3YSwgMHgwNywgMHgwMSwgMHg1OSwgMHg3YSwgMHgwNywgCisgICAgMHgwMSwgMHg2OSwgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3NSwgMHgyZiwgMHgwMCwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMiwgMHg3NSwgCisgICAgMHgyZiwgMHg5MiwgMHgxMiwgMHg3MywgMHgzNSwgMHhkMiwgMHgwNCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHg4MiwgMHhkYSwgCisgICAgMHhiOCwgMHg3OCwgMHg2OCwgMHg3ZSwgMHgzNywgMHgwMSwgMHhjYiwgMHg3ZSwgMHgyNywgMHgwMSwgMHhhOSwgMHgyZSwgMHgyNCwgMHgwMCwgMHgwMiwgMHgyZCwgCisgICAgMHgzMiwgMHhiZSwgMHgzNCwgMHgwNCwgMHgwMCwgMHgzOCwgMHgzNCwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHgzMCwgMHg3YSwgMHgwNSwgMHgzMCwgMHg3YSwgCisgICAgMHgzNywgMHgwMSwgMHhjYiwgMHg3ZSwgMHgzNywgMHgwMSwgMHhjOSwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgyOCwgMHgyYywgMHgzOCwgCisgICAgMHgzYywgMHg3YSwgMHg0NywgMHgwMSwgMHhjOSwgMHg3ZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgyNywgMHgwMSwgMHhhOSwgMHgxYiwgMHgzOCwgMHgyMCwgCisgICAgMHgwYiwgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgwMiwgMHg2YSwgMHg2MywgMHg3NSwgMHgyZiwgMHg5OSwgMHgxMiwgMHg3MywgCisgICAgMHgzNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzOCwgMHgwYSwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxMCwgMHgyMiwgMHg4MCwgMHg3ZiwgMHg3YSwgMHg1MSwgMHgyZiwgCisgICAgMHgxMiwgMHg3MywgMHgzNSwgMHg5ZSwgMHg0NCwgMHgyOCwgMHgyZCwgMHg5ZCwgMHgyNCwgMHg3ZSwgMHg2NCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg2NywgMHgwMSwgCisgICAgMHhhOSwgMHg5ZSwgMHgyNCwgMHgwMCwgMHgwMiwgMHg0MCwgMHgxNywgMHgxYiwgMHgzOCwgMHg2MCwgMHgwYiwgMHgzNSwgMHgxMiwgMHg2YSwgMHg2MywgMHg3ZSwgCisgICAgMHgzNCwgMHgyNCwgMHgyZCwgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhjOSwgMHgwMiwgMHg2YSwgMHg2MywgMHg3YSwgMHgzOSwgCisgICAgMHhjMCwgMHg3ZSwgMHgzNCwgMHgyNCwgMHgyZCwgMHg3YSwgMHgzOSwgMHhkMCwgMHgwYiwgMHgzNCwgMHgxYiwgMHg0NCwgMHg4MCwgMHhlNSwgMHg5ZCwgMHgzMiwgCisgICAgMHg3YywgMHhiNiwgMHg1NCwgMHgwZiwgMHgyMywgMHgyMywgMHgyMywgMHg0NCwgMHgwMCwgMHg3YSwgMHg2OSwgMHhiMCwgMHg3YSwgMHg3OSwgMHg3MCwgMHgwYiwgCisgICAgMHgzNSwgMHg3NSwgMHgyZiwgMHg5MywgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg3MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHhiZCwgMHgwNCwgMHg2OCwgCisgICAgMHgyYiwgMHg3YSwgMHgwNywgMHgwMSwgMHhjOSwgMHg3ZSwgMHg0NywgMHgwMSwgMHhjYiwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhjYiwgMHgyZSwgCisgICAgMHgzNSwgMHgzMCwgMHg3YSwgMHgzNSwgMHgzMCwgMHgyMiwgMHhkMiwgMHgwNCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHgxMywgMHgyMiwgCisgICAgMHg3ZSwgMHgwNCwgMHgyNCwgMHgyZCwgMHg4MCwgMHgyOCwgMHg3ZSwgMHgwNCwgMHgyNCwgMHgyZCwgMHg4MCwgMHgyYSwgMHg3ZSwgMHgwNCwgMHgyNCwgMHgyZCwgCisgICAgMHg4MCwgMHhjZiwgMHg3ZSwgMHgwNywgMHgwMSwgMHhjYiwgMHg3ZSwgMHgyNCwgMHgwMywgMHhmZSwgMHg5ZCwgMHgyMCwgMHgyOCwgMHg0MCwgMHg3ZSwgMHgwNywgCisgICAgMHgwMSwgMHhjOSwgMHg3ZSwgMHg0NCwgMHgyOCwgMHgyZCwgMHg3ZCwgMHg2MCwgMHgwYiwgMHgwNCwgMHhiZCwgMHgwNCwgMHg2OCwgMHhkMiwgMHg3ZCwgMHg3MCwgCisgICAgMHgwYiwgMHgwNCwgMHhiZCwgMHgwNCwgMHg2OCwgMHhkMCwgMHg3ZCwgMHg1NCwgMHg5ZCwgMHg1MCwgMHhiZCwgMHgyNSwgMHg0MCwgMHgwMiwgMHg3ZCwgMHgyNSwgCisgICAgMHg3ZCwgMHgzMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHgxZiwgMHhiNCwgMHgwMSwgMHgzMSwgMHhkYSwgMHhiOCwgMHg3ZSwgCisgICAgMHgxOSwgMHhiMCwgMHg3YSwgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHgxYiwgMHgyNCwgMHg3OCwgMHhlNywgMHgwMiwgMHg0OCwgMHgxZSwgMHg3NSwgMHgyZiwgCisgICAgMHg5OSwgMHgxMiwgMHg3MywgMHgzNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzOCwgCisgICAgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxMCwgMHgyMiwgMHhkYSwgMHhiOCwgCisgICAgMHgzMCwgMHhlMCwgMHhkOCwgMHhiZCwgMHgzMiwgMHg2OCwgMHgwNywgMHhjYSwgMHhiOCwgMHgxMiwgMHg0OCwgMHgxZSwgMHhkYSwgMHhiOCwgMHgwMiwgMHg0OSwgCisgICAgMHg0NSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHg4OCwgMHg3NSwgMHgyZiwgMHg5MCwgMHgxMiwgMHg3MywgMHgzNSwgMHhmNSwgMHgyZiwgCisgICAgMHgxMiwgMHg3MywgMHgzNSwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgwYSwgMHg2OCwgMHgxZCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgCisgICAgMHgwNCwgMHhkMiwgMHg1OCwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1OCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1MCwgCisgICAgMHg4MCwgMHgwMiwgMHhjMiwgMHg1MCwgMHgxMiwgMHg0MiwgMHhiZCwgMHgwMiwgMHg2MSwgMHgxMywgMHg3NSwgMHgyZiwgMHg5MSwgMHgxMiwgMHg3MywgMHgzNSwgCisgICAgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHg3YSwgMHhiMSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMCwgMHhlMCwgMHgwOCwgMHhkMiwgMHgwNCwgMHg3ZSwgCisgICAgMHhhMCwgMHg4MCwgMHgwMiwgMHg2MSwgMHgxMywgMHhkMiwgMHgwNCwgMHgzMCwgMHhlMSwgMHgwNiwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgxMiwgMHg2MSwgMHgxMywgCisgICAgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxYywgMHhkYSwgMHhiOCwgMHg2OCwgMHgxMiwgMHg3ZSwgMHhhMCwgMHhjMCwgMHgwOSwgMHg2MSwgMHgwMCwgMHgwMCwgCisgICAgMHgxMiwgMHg2MSwgMHgzNiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHhkYiwgMHgyMiwgMHgwMiwgMHg0OCwgMHg3MiwgMHg3NSwgMHgyZiwgCisgICAgMHg5NSwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMiwgMHg3NSwgMHgyZiwgMHg5NiwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMiwgMHgxMCwgMHgwOSwgMHgwMSwgMHgyMiwgCisgICAgMHgyMCwgMHgyOSwgMHgwMywgMHhkMiwgMHgwOSwgMHgyMiwgMHg3NSwgMHgyZiwgMHhhMSwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHgxNCwgMHg4MSwgMHgwMCwgCisgICAgMHg4MCwgMHgwNiwgMHgyMCwgMHgyOSwgMHgwMywgMHhkMiwgMHgwOSwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgCisgICAgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwMywgMHgxMiwgMHg0YywgMHg3MiwgMHgzMCwgMHgzMSwgMHgwNiwgMHgyMCwgMHhlNiwgMHg0ZiwgMHhkMiwgMHgwOSwgCisgICAgMHgyMiwgMHgzMCwgMHhlNiwgMHgwMiwgMHhkMiwgMHg2MSwgMHg3ZSwgMHgzNywgMHgwMSwgMHg3YiwgMHg3ZSwgMHgyNywgMHgwMSwgMHg5YiwgMHg5ZCwgMHgzMiwgCisgICAgMHg0MCwgMHgzMSwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHgzNCwgMHg3YSwgMHgwNSwgMHgzNCwgMHg3YSwgMHgzNywgMHgwMSwgMHg3YiwgMHg3ZSwgMHgzNywgCisgICAgMHgwMSwgMHg1YiwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgwYywgMHgyYywgMHgzOCwgMHg2OCwgMHg3YSwgMHg0NywgMHgwMSwgMHg1YiwgCisgICAgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgxMiwgMHg2OSwgMHhmMCwgMHgxMCwgCisgICAgMHg2MSwgMHhjNCwgMHgyMiwgMHhjMiwgMHg2MSwgMHgyZCwgMHgyMywgMHg2OCwgMHg3OCwgMHg2ZCwgMHgzMywgMHg4MCwgMHgxYSwgMHg3ZSwgMHgyNywgMHgwMSwgCisgICAgMHg3YiwgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg2YSwgMHhiZSwgMHgyNywgMHgwMSwgMHg5YiwgMHgyOCwgMHgwNCwgMHg3ZSwgMHgyNywgMHgwMSwgCisgICAgMHg5YiwgMHg3ZSwgMHgzNywgMHgwMSwgMHg3YiwgMHg5ZCwgMHgzMiwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHgzNCwgMHg3YSwgMHgwNSwgMHgzNCwgMHg3YSwgCisgICAgMHgzNywgMHgwMSwgMHg3YiwgMHg3ZSwgMHgzNywgMHgwMSwgMHg1YiwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgwYywgMHgyYywgMHgzOCwgCisgICAgMHgxMywgMHg3YSwgMHg0NywgMHgwMSwgMHg1YiwgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgCisgICAgMHgzNSwgMHgwMiwgMHg2OSwgMHhmMCwgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgCisgICAgMHg5ZSwgMHg0NCwgMHgwYywgMHgyZCwgMHg5ZCwgMHgyNCwgMHgxMiwgMHg2OSwgMHhmMCwgMHg3ZSwgMHgzNCwgMHgwOCwgMHgyZCwgMHg3ZCwgMHgyNCwgMHgyZCwgCisgICAgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHg1YiwgMHgxMiwgMHg2OSwgMHhmMCwgMHhiZSwgMHgyNSwgMHgyMCwgMHg3OCwgMHgwMywgMHgwMiwgMHg0OSwgMHhlZiwgCisgICAgMHgyMiwgMHhkMiwgMHgwOSwgMHg3ZSwgMHgwNCwgMHgwOCwgMHgyZCwgMHg3YSwgMHgwNywgMHgwMSwgMHg1YiwgMHg3YSwgMHgwNywgMHgwMSwgMHg2YiwgMHg3NSwgCisgICAgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3NSwgMHgyZiwgMHgwMCwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMiwgMHg3NSwgMHgyZiwgMHg5MiwgMHgxMiwgCisgICAgMHg3MywgMHgzNSwgMHhkMiwgMHgwNCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHg4MiwgMHhkYSwgMHhiOCwgMHg3OCwgMHg2OCwgCisgICAgMHg3ZSwgMHgzNywgMHgwMSwgMHhjYiwgMHg3ZSwgMHgyNywgMHgwMSwgMHhhYiwgMHgyZSwgMHgyNCwgMHgwMCwgMHgwMiwgMHgyZCwgMHgzMiwgMHhiZSwgMHgzNCwgCisgICAgMHgwNCwgMHgwMCwgMHgzOCwgMHgzNCwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHgzMCwgMHg3YSwgMHgwNSwgMHgzMCwgMHg3YSwgMHgzNywgMHgwMSwgMHhjYiwgCisgICAgMHg3ZSwgMHgzNywgMHgwMSwgMHhjOSwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgyOCwgMHgyYywgMHgzOCwgMHgzYywgMHg3YSwgMHg0NywgCisgICAgMHgwMSwgMHhjOSwgMHg3ZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHgyZSwgMHgyNywgMHgwMSwgMHhhYiwgMHgxYiwgMHgzOCwgMHgyMCwgMHgwYiwgMHgzNSwgMHg3YSwgCisgICAgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgwMiwgMHg2YSwgMHg2MywgMHg3NSwgMHgyZiwgMHg5OSwgMHgxMiwgMHg3MywgMHgzNSwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzOSwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgCisgICAgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxMSwgMHgyMiwgMHg4MCwgMHg3ZiwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgCisgICAgMHg5ZSwgMHg0NCwgMHgyOCwgMHgyZCwgMHg5ZCwgMHgyNCwgMHg3ZSwgMHg2NCwgMHgwMSwgMHgwMCwgMHgyZSwgMHg2NywgMHgwMSwgMHhhYiwgMHg5ZSwgMHgyNCwgCisgICAgMHgwMCwgMHgwMiwgMHg0MCwgMHgxNywgMHgxYiwgMHgzOCwgMHg2MCwgMHgwYiwgMHgzNSwgMHgxMiwgMHg2YSwgMHg2MywgMHg3ZSwgMHgzNCwgMHgyNCwgMHgyZCwgCisgICAgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhjOSwgMHgwMiwgMHg2YSwgMHg2MywgMHg3YSwgMHgzOSwgMHhjMCwgMHg3ZSwgMHgzNCwgCisgICAgMHgyNCwgMHgyZCwgMHg3YSwgMHgzOSwgMHhkMCwgMHgwYiwgMHgzNCwgMHgxYiwgMHg0NCwgMHg4MCwgMHhlNSwgMHg5ZCwgMHgzMiwgMHg3YywgMHhiNiwgMHg1NCwgCisgICAgMHgwZiwgMHgyMywgMHgyMywgMHgyMywgMHg0NCwgMHgwMSwgMHg3YSwgMHg2OSwgMHhiMCwgMHg3YSwgMHg3OSwgMHg3MCwgMHgwYiwgMHgzNSwgMHg3NSwgMHgyZiwgCisgICAgMHg5MywgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg3MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHhiZCwgMHgwNCwgMHg2OCwgMHgyYiwgMHg3YSwgMHgwNywgCisgICAgMHgwMSwgMHhjOSwgMHg3ZSwgMHg0NywgMHgwMSwgMHhjYiwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhjYiwgMHgyZSwgMHgzNSwgMHgzMCwgMHg3YSwgCisgICAgMHgzNSwgMHgzMCwgMHgyMiwgMHhkMiwgMHgwNCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHgxMywgMHgyMiwgMHg3ZSwgMHgwNCwgMHgyNCwgCisgICAgMHgyZCwgMHg4MCwgMHgyOCwgMHg3ZSwgMHgwNCwgMHgyNCwgMHgyZCwgMHg4MCwgMHgyYSwgMHg3ZSwgMHgwNCwgMHgyNCwgMHgyZCwgMHg4MCwgMHhjZiwgMHg3ZSwgCisgICAgMHgwNywgMHgwMSwgMHhjYiwgMHg3ZSwgMHgyNCwgMHgwMywgMHhmZSwgMHg5ZCwgMHgyMCwgMHgyOCwgMHg0MCwgMHg3ZSwgMHgwNywgMHgwMSwgMHhjOSwgMHg3ZSwgCisgICAgMHg0NCwgMHgyOCwgMHgyZCwgMHg3ZCwgMHg2MCwgMHgwYiwgMHgwNCwgMHhiZCwgMHgwNCwgMHg2OCwgMHhkMiwgMHg3ZCwgMHg3MCwgMHgwYiwgMHgwNCwgMHhiZCwgCisgICAgMHgwNCwgMHg2OCwgMHhkMCwgMHg3ZCwgMHg1NCwgMHg5ZCwgMHg1MCwgMHhiZCwgMHgyNSwgMHg0MCwgMHgwMiwgMHg3ZCwgMHgyNSwgMHg3ZCwgMHgzMiwgMHgwOSwgCisgICAgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHgxZiwgMHhiNCwgMHgwMSwgMHgzMSwgMHhkYSwgMHhiOCwgMHg3ZSwgMHgxOSwgMHhiMCwgMHg3YSwgCisgICAgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHgxYiwgMHgyNCwgMHg3OCwgMHhlNywgMHgwMiwgMHg0YiwgMHg0YiwgMHg3NSwgMHgyZiwgMHg5OSwgMHgxMiwgMHg3MywgCisgICAgMHgzNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzOSwgMHgwYSwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxMSwgMHgyMiwgMHhkYSwgMHhiOCwgMHgzMCwgMHhlMCwgMHhkOCwgCisgICAgMHhiZCwgMHgzMiwgMHg2OCwgMHgwNywgMHhjYSwgMHhiOCwgMHgxMiwgMHg0YiwgMHg0YiwgMHhkYSwgMHhiOCwgMHgwMiwgMHg0YywgMHg3MiwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHg4OCwgMHg3NSwgMHgyZiwgMHg5MCwgMHgxMiwgMHg3MywgMHgzNSwgMHhmNSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgCisgICAgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgwYSwgMHg2OCwgMHgxZCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1OSwgCisgICAgMHg4MCwgMHgwMiwgMHhjMiwgMHg1OSwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1MSwgMHg4MCwgMHgwMiwgMHhjMiwgCisgICAgMHg1MSwgMHgxMiwgMHg0MiwgMHhkNCwgMHgwMiwgMHg2MSwgMHgxMywgMHg3NSwgMHgyZiwgMHg5MSwgMHgxMiwgMHg3MywgMHgzNSwgMHgwOSwgMHhiMSwgMHgwMCwgCisgICAgMHgxNCwgMHg3YSwgMHhiMSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMCwgMHhlMCwgMHgwOCwgMHhkMiwgMHgwNCwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgwMiwgCisgICAgMHg2MSwgMHgxMywgMHhkMiwgMHgwNCwgMHgzMCwgMHhlMSwgMHgwNiwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgxMiwgMHg2MSwgMHgxMywgMHhjYSwgMHhiOCwgMHg1ZSwgCisgICAgMHhiMCwgMHgxYywgMHhkYSwgMHhiOCwgMHg2OCwgMHgxMiwgMHg3ZSwgMHhhMCwgMHhjMCwgMHgwOSwgMHg2MSwgMHgwMCwgMHgwMCwgMHgxMiwgMHg2MSwgMHgzNiwgCisgICAgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHhkYiwgMHgyMiwgMHgwMiwgMHg0YiwgMHg5ZiwgMHg3NSwgMHgyZiwgMHg5NSwgMHgxMiwgMHg3MywgCisgICAgMHgzNSwgMHgyMiwgMHg3NSwgMHgyZiwgMHg5NiwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMiwgMHgxMCwgMHgwYSwgMHgwMSwgMHgyMiwgMHgyMCwgMHgyYSwgMHgwMywgCisgICAgMHhkMiwgMHgwYSwgMHgyMiwgMHg3NSwgMHgyZiwgMHhhMiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHgxNCwgMHg4MiwgMHgwMCwgMHg4MCwgMHgwNiwgMHgyMCwgCisgICAgMHgyYSwgMHgwMywgMHhkMiwgMHgwYSwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgCisgICAgMHg2OCwgMHgwMywgMHgxMiwgMHg0ZiwgMHg5ZiwgMHgzMCwgMHgzMiwgMHgwNiwgMHgyMCwgMHhlNiwgMHg0ZiwgMHhkMiwgMHgwYSwgMHgyMiwgMHgzMCwgMHhlNiwgCisgICAgMHgwMiwgMHhkMiwgMHg2MiwgMHg3ZSwgMHgzNywgMHgwMSwgMHg3ZCwgMHg3ZSwgMHgyNywgMHgwMSwgMHg5ZCwgMHg5ZCwgMHgzMiwgMHg0MCwgMHgzMSwgMHg3ZCwgCisgICAgMHgwMiwgMHgyZSwgMHgwNSwgMHgzNiwgMHg3YSwgMHgwNSwgMHgzNiwgMHg3YSwgMHgzNywgMHgwMSwgMHg3ZCwgMHg3ZSwgMHgzNywgMHgwMSwgMHg1ZCwgMHg3ZCwgCisgICAgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgxMCwgMHgyYywgMHgzOCwgMHg2OCwgMHg3YSwgMHg0NywgMHgwMSwgMHg1ZCwgMHg3NSwgMHgyZiwgMHg5NCwgCisgICAgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgxMiwgMHg2OSwgMHhmMCwgMHgxMCwgMHg2MiwgMHhjNCwgMHgyMiwgCisgICAgMHhjMiwgMHg2MiwgMHgyZCwgMHgyMywgMHg2OCwgMHg3OCwgMHg2ZCwgMHgzMywgMHg4MCwgMHgxYSwgMHg3ZSwgMHgyNywgMHgwMSwgMHg3ZCwgMHhiZSwgMHgyNCwgCisgICAgMHgwMCwgMHgwMCwgMHg2OCwgMHg2YSwgMHhiZSwgMHgyNywgMHgwMSwgMHg5ZCwgMHgyOCwgMHgwNCwgMHg3ZSwgMHgyNywgMHgwMSwgMHg5ZCwgMHg3ZSwgMHgzNywgCisgICAgMHgwMSwgMHg3ZCwgMHg5ZCwgMHgzMiwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHgzNiwgMHg3YSwgMHgwNSwgMHgzNiwgMHg3YSwgMHgzNywgMHgwMSwgMHg3ZCwgCisgICAgMHg3ZSwgMHgzNywgMHgwMSwgMHg1ZCwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgxMCwgMHgyYywgMHgzOCwgMHgxMywgMHg3YSwgMHg0NywgCisgICAgMHgwMSwgMHg1ZCwgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgwMiwgMHg2OSwgCisgICAgMHhmMCwgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg5ZSwgMHg0NCwgMHgxMCwgCisgICAgMHgyZCwgMHg5ZCwgMHgyNCwgMHgxMiwgMHg2OSwgMHhmMCwgMHg3ZSwgMHgzNCwgMHgwYywgMHgyZCwgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgCisgICAgMHgwMSwgMHg1ZCwgMHgxMiwgMHg2OSwgMHhmMCwgMHhiZSwgMHgyNSwgMHgyMCwgMHg3OCwgMHgwMywgMHgwMiwgMHg0ZCwgMHgxYywgMHgyMiwgMHhkMiwgMHgwYSwgCisgICAgMHg3ZSwgMHgwNCwgMHgwYywgMHgyZCwgMHg3YSwgMHgwNywgMHgwMSwgMHg1ZCwgMHg3YSwgMHgwNywgMHgwMSwgMHg2ZCwgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgCisgICAgMHg3MywgMHgzNSwgMHg3NSwgMHgyZiwgMHgwMCwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMiwgMHg3NSwgMHgyZiwgMHg5MiwgMHgxMiwgMHg3MywgMHgzNSwgMHhkMiwgCisgICAgMHgwNCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHg4MiwgMHhkYSwgMHhiOCwgMHg3OCwgMHg2OCwgMHg3ZSwgMHgzNywgMHgwMSwgCisgICAgMHhjYiwgMHg3ZSwgMHgyNywgMHgwMSwgMHhhZCwgMHgyZSwgMHgyNCwgMHgwMCwgMHgwMiwgMHgyZCwgMHgzMiwgMHhiZSwgMHgzNCwgMHgwNCwgMHgwMCwgMHgzOCwgCisgICAgMHgzNCwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHgzMCwgMHg3YSwgMHgwNSwgMHgzMCwgMHg3YSwgMHgzNywgMHgwMSwgMHhjYiwgMHg3ZSwgMHgzNywgMHgwMSwgCisgICAgMHhjOSwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgyOCwgMHgyYywgMHgzOCwgMHgzYywgMHg3YSwgMHg0NywgMHgwMSwgMHhjOSwgMHg3ZSwgCisgICAgMHgyNCwgMHgwMiwgMHgwMCwgMHgyZSwgMHgyNywgMHgwMSwgMHhhZCwgMHgxYiwgMHgzOCwgMHgyMCwgMHgwYiwgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgCisgICAgMHg3MywgMHgzNSwgMHgwMiwgMHg2YSwgMHg2MywgMHg3NSwgMHgyZiwgMHg5OSwgMHgxMiwgMHg3MywgMHgzNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgCisgICAgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzYSwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgCisgICAgMHgwMCwgMHgxMCwgMHhkMiwgMHgxMiwgMHgyMiwgMHg4MCwgMHg3ZiwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg5ZSwgMHg0NCwgMHgyOCwgCisgICAgMHgyZCwgMHg5ZCwgMHgyNCwgMHg3ZSwgMHg2NCwgMHgwMiwgMHgwMCwgMHgyZSwgMHg2NywgMHgwMSwgMHhhZCwgMHg5ZSwgMHgyNCwgMHgwMCwgMHgwMiwgMHg0MCwgCisgICAgMHgxNywgMHgxYiwgMHgzOCwgMHg2MCwgMHgwYiwgMHgzNSwgMHgxMiwgMHg2YSwgMHg2MywgMHg3ZSwgMHgzNCwgMHgyNCwgMHgyZCwgMHg3ZCwgMHgyNCwgMHgyZCwgCisgICAgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhjOSwgMHgwMiwgMHg2YSwgMHg2MywgMHg3YSwgMHgzOSwgMHhjMCwgMHg3ZSwgMHgzNCwgMHgyNCwgMHgyZCwgMHg3YSwgCisgICAgMHgzOSwgMHhkMCwgMHgwYiwgMHgzNCwgMHgxYiwgMHg0NCwgMHg4MCwgMHhlNSwgMHg5ZCwgMHgzMiwgMHg3YywgMHhiNiwgMHg1NCwgMHgwZiwgMHgyMywgMHgyMywgCisgICAgMHgyMywgMHg0NCwgMHgwMiwgMHg3YSwgMHg2OSwgMHhiMCwgMHg3YSwgMHg3OSwgMHg3MCwgMHgwYiwgMHgzNSwgMHg3NSwgMHgyZiwgMHg5MywgMHgxMiwgMHg3MywgCisgICAgMHgzNSwgMHg3YSwgMHg3MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHhiZCwgMHgwNCwgMHg2OCwgMHgyYiwgMHg3YSwgMHgwNywgMHgwMSwgMHhjOSwgMHg3ZSwgCisgICAgMHg0NywgMHgwMSwgMHhjYiwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhjYiwgMHgyZSwgMHgzNSwgMHgzMCwgMHg3YSwgMHgzNSwgMHgzMCwgMHgyMiwgCisgICAgMHhkMiwgMHgwNCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHgxMywgMHgyMiwgMHg3ZSwgMHgwNCwgMHgyNCwgMHgyZCwgMHg4MCwgMHgyOCwgCisgICAgMHg3ZSwgMHgwNCwgMHgyNCwgMHgyZCwgMHg4MCwgMHgyYSwgMHg3ZSwgMHgwNCwgMHgyNCwgMHgyZCwgMHg4MCwgMHhjZiwgMHg3ZSwgMHgwNywgMHgwMSwgMHhjYiwgCisgICAgMHg3ZSwgMHgyNCwgMHgwMywgMHhmZSwgMHg5ZCwgMHgyMCwgMHgyOCwgMHg0MCwgMHg3ZSwgMHgwNywgMHgwMSwgMHhjOSwgMHg3ZSwgMHg0NCwgMHgyOCwgMHgyZCwgCisgICAgMHg3ZCwgMHg2MCwgMHgwYiwgMHgwNCwgMHhiZCwgMHgwNCwgMHg2OCwgMHhkMiwgMHg3ZCwgMHg3MCwgMHgwYiwgMHgwNCwgMHhiZCwgMHgwNCwgMHg2OCwgMHhkMCwgCisgICAgMHg3ZCwgMHg1NCwgMHg5ZCwgMHg1MCwgMHhiZCwgMHgyNSwgMHg0MCwgMHgwMiwgMHg3ZCwgMHgyNSwgMHg3ZCwgMHgzMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgCisgICAgMHhjYSwgMHhiOCwgMHg1NCwgMHgxZiwgMHhiNCwgMHgwMSwgMHgzMSwgMHhkYSwgMHhiOCwgMHg3ZSwgMHgxOSwgMHhiMCwgMHg3YSwgMHgwOSwgMHhiMCwgMHgwYiwgCisgICAgMHgwNCwgMHgxYiwgMHgyNCwgMHg3OCwgMHhlNywgMHgwMiwgMHg0ZSwgMHg3OCwgMHg3NSwgMHgyZiwgMHg5OSwgMHgxMiwgMHg3MywgMHgzNSwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzYSwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgCisgICAgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxMiwgMHgyMiwgMHhkYSwgMHhiOCwgMHgzMCwgMHhlMCwgMHhkOCwgMHhiZCwgMHgzMiwgMHg2OCwgCisgICAgMHgwNywgMHhjYSwgMHhiOCwgMHgxMiwgMHg0ZSwgMHg3OCwgMHhkYSwgMHhiOCwgMHgwMiwgMHg0ZiwgMHg5ZiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHg3ZSwgCisgICAgMHhhMCwgMHg4OCwgMHg3NSwgMHgyZiwgMHg5MCwgMHgxMiwgMHg3MywgMHgzNSwgMHhmNSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHhhNSwgMHhmZCwgMHg1ZSwgCisgICAgMHg1MCwgMHgwYSwgMHg2OCwgMHgxZCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1YSwgMHg4MCwgMHgwMiwgMHhjMiwgCisgICAgMHg1YSwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1MiwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1MiwgMHgxMiwgMHg0MiwgCisgICAgMHhlYiwgMHgwMiwgMHg2MSwgMHgxMywgMHg3NSwgMHgyZiwgMHg5MSwgMHgxMiwgMHg3MywgMHgzNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHg3YSwgMHhiMSwgCisgICAgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMCwgMHhlMCwgMHgwOCwgMHhkMiwgMHgwNCwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgwMiwgMHg2MSwgMHgxMywgMHhkMiwgCisgICAgMHgwNCwgMHgzMCwgMHhlMSwgMHgwNiwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgxMiwgMHg2MSwgMHgxMywgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxYywgMHhkYSwgCisgICAgMHhiOCwgMHg2OCwgMHgxMiwgMHg3ZSwgMHhhMCwgMHhjMCwgMHgwOSwgMHg2MSwgMHgwMCwgMHgwMCwgMHgxMiwgMHg2MSwgMHgzNiwgMHgwOSwgMHhiMSwgMHgwMCwgCisgICAgMHgxNCwgMHgyMCwgMHhlMCwgMHhkYiwgMHgyMiwgMHgwMiwgMHg0ZSwgMHhjYywgMHg3NSwgMHgyZiwgMHg5NSwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMiwgMHg3NSwgCisgICAgMHgyZiwgMHg5NiwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMiwgMHgxMCwgMHgwYiwgMHgwMSwgMHgyMiwgMHgyMCwgMHgyYiwgMHgwMywgMHhkMiwgMHgwYiwgMHgyMiwgCisgICAgMHg3NSwgMHgyZiwgMHhhMywgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHgxNCwgMHg4MywgMHgwMCwgMHg4MCwgMHgwNiwgMHgyMCwgMHgyYiwgMHgwMywgMHhkMiwgCisgICAgMHgwYiwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwMywgMHgxMiwgCisgICAgMHg1MiwgMHhjYywgMHgzMCwgMHgzMywgMHgwNiwgMHgyMCwgMHhlNiwgMHg0ZiwgMHhkMiwgMHgwYiwgMHgyMiwgMHgzMCwgMHhlNiwgMHgwMiwgMHhkMiwgMHg2MywgCisgICAgMHg3ZSwgMHgzNywgMHgwMSwgMHg3ZiwgMHg3ZSwgMHgyNywgMHgwMSwgMHg5ZiwgMHg5ZCwgMHgzMiwgMHg0MCwgMHgzMSwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgCisgICAgMHgzOCwgMHg3YSwgMHgwNSwgMHgzOCwgMHg3YSwgMHgzNywgMHgwMSwgMHg3ZiwgMHg3ZSwgMHgzNywgMHgwMSwgMHg1ZiwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgCisgICAgMHhiZSwgMHg0NCwgMHgxNCwgMHgyYywgMHgzOCwgMHg2OCwgMHg3YSwgMHg0NywgMHgwMSwgMHg1ZiwgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgCisgICAgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgxMiwgMHg2OSwgMHhmMCwgMHgxMCwgMHg2MywgMHhjNCwgMHgyMiwgMHhjMiwgMHg2MywgMHgyZCwgCisgICAgMHgyMywgMHg2OCwgMHg3OCwgMHg2ZCwgMHgzMywgMHg4MCwgMHgxYSwgMHg3ZSwgMHgyNywgMHgwMSwgMHg3ZiwgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg2OCwgCisgICAgMHg2YSwgMHhiZSwgMHgyNywgMHgwMSwgMHg5ZiwgMHgyOCwgMHgwNCwgMHg3ZSwgMHgyNywgMHgwMSwgMHg5ZiwgMHg3ZSwgMHgzNywgMHgwMSwgMHg3ZiwgMHg5ZCwgCisgICAgMHgzMiwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHgzOCwgMHg3YSwgMHgwNSwgMHgzOCwgMHg3YSwgMHgzNywgMHgwMSwgMHg3ZiwgMHg3ZSwgMHgzNywgMHgwMSwgCisgICAgMHg1ZiwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgxNCwgMHgyYywgMHgzOCwgMHgxMywgMHg3YSwgMHg0NywgMHgwMSwgMHg1ZiwgMHg3NSwgCisgICAgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgwMiwgMHg2OSwgMHhmMCwgMHg3NSwgMHgyZiwgCisgICAgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg5ZSwgMHg0NCwgMHgxNCwgMHgyZCwgMHg5ZCwgMHgyNCwgCisgICAgMHgxMiwgMHg2OSwgMHhmMCwgMHg3ZSwgMHgzNCwgMHgxMCwgMHgyZCwgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHg1ZiwgMHgxMiwgCisgICAgMHg2OSwgMHhmMCwgMHhiZSwgMHgyNSwgMHgyMCwgMHg3OCwgMHgwMywgMHgwMiwgMHg1MCwgMHg0OSwgMHgyMiwgMHhkMiwgMHgwYiwgMHg3ZSwgMHgwNCwgMHgxMCwgCisgICAgMHgyZCwgMHg3YSwgMHgwNywgMHgwMSwgMHg1ZiwgMHg3YSwgMHgwNywgMHgwMSwgMHg2ZiwgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3NSwgCisgICAgMHgyZiwgMHgwMCwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMiwgMHg3NSwgMHgyZiwgMHg5MiwgMHgxMiwgMHg3MywgMHgzNSwgMHhkMiwgMHgwNCwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHg4MiwgMHhkYSwgMHhiOCwgMHg3OCwgMHg2OCwgMHg3ZSwgMHgzNywgMHgwMSwgMHhjYiwgMHg3ZSwgMHgyNywgCisgICAgMHgwMSwgMHhhZiwgMHgyZSwgMHgyNCwgMHgwMCwgMHgwMiwgMHgyZCwgMHgzMiwgMHhiZSwgMHgzNCwgMHgwNCwgMHgwMCwgMHgzOCwgMHgzNCwgMHg3ZCwgMHgwMiwgCisgICAgMHgyZSwgMHgwNSwgMHgzMCwgMHg3YSwgMHgwNSwgMHgzMCwgMHg3YSwgMHgzNywgMHgwMSwgMHhjYiwgMHg3ZSwgMHgzNywgMHgwMSwgMHhjOSwgMHg3ZCwgMHg0MywgCisgICAgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgyOCwgMHgyYywgMHgzOCwgMHgzYywgMHg3YSwgMHg0NywgMHgwMSwgMHhjOSwgMHg3ZSwgMHgyNCwgMHgwMywgMHgwMCwgCisgICAgMHgyZSwgMHgyNywgMHgwMSwgMHhhZiwgMHgxYiwgMHgzOCwgMHgyMCwgMHgwYiwgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgwMiwgCisgICAgMHg2YSwgMHg2MywgMHg3NSwgMHgyZiwgMHg5OSwgMHgxMiwgMHg3MywgMHgzNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgCisgICAgMHgwMCwgMHgwNCwgMHgzMCwgMHgzYiwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgCisgICAgMHgxMywgMHgyMiwgMHg4MCwgMHg3ZiwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg5ZSwgMHg0NCwgMHgyOCwgMHgyZCwgMHg5ZCwgMHgyNCwgCisgICAgMHg3ZSwgMHg2NCwgMHgwMywgMHgwMCwgMHgyZSwgMHg2NywgMHgwMSwgMHhhZiwgMHg5ZSwgMHgyNCwgMHgwMCwgMHgwMiwgMHg0MCwgMHgxNywgMHgxYiwgMHgzOCwgCisgICAgMHg2MCwgMHgwYiwgMHgzNSwgMHgxMiwgMHg2YSwgMHg2MywgMHg3ZSwgMHgzNCwgMHgyNCwgMHgyZCwgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgCisgICAgMHgwMSwgMHhjOSwgMHgwMiwgMHg2YSwgMHg2MywgMHg3YSwgMHgzOSwgMHhjMCwgMHg3ZSwgMHgzNCwgMHgyNCwgMHgyZCwgMHg3YSwgMHgzOSwgMHhkMCwgMHgwYiwgCisgICAgMHgzNCwgMHgxYiwgMHg0NCwgMHg4MCwgMHhlNSwgMHg5ZCwgMHgzMiwgMHg3YywgMHhiNiwgMHg1NCwgMHgwZiwgMHgyMywgMHgyMywgMHgyMywgMHg0NCwgMHgwMywgCisgICAgMHg3YSwgMHg2OSwgMHhiMCwgMHg3YSwgMHg3OSwgMHg3MCwgMHgwYiwgMHgzNSwgMHg3NSwgMHgyZiwgMHg5MywgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg3MSwgCisgICAgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHhiZCwgMHgwNCwgMHg2OCwgMHgyYiwgMHg3YSwgMHgwNywgMHgwMSwgMHhjOSwgMHg3ZSwgMHg0NywgMHgwMSwgMHhjYiwgCisgICAgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhjYiwgMHgyZSwgMHgzNSwgMHgzMCwgMHg3YSwgMHgzNSwgMHgzMCwgMHgyMiwgMHhkMiwgMHgwNCwgMHgwOSwgCisgICAgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHgxMywgMHgyMiwgMHg3ZSwgMHgwNCwgMHgyNCwgMHgyZCwgMHg4MCwgMHgyOCwgMHg3ZSwgMHgwNCwgMHgyNCwgCisgICAgMHgyZCwgMHg4MCwgMHgyYSwgMHg3ZSwgMHgwNCwgMHgyNCwgMHgyZCwgMHg4MCwgMHhjZiwgMHg3ZSwgMHgwNywgMHgwMSwgMHhjYiwgMHg3ZSwgMHgyNCwgMHgwMywgCisgICAgMHhmZSwgMHg5ZCwgMHgyMCwgMHgyOCwgMHg0MCwgMHg3ZSwgMHgwNywgMHgwMSwgMHhjOSwgMHg3ZSwgMHg0NCwgMHgyOCwgMHgyZCwgMHg3ZCwgMHg2MCwgMHgwYiwgCisgICAgMHgwNCwgMHhiZCwgMHgwNCwgMHg2OCwgMHhkMiwgMHg3ZCwgMHg3MCwgMHgwYiwgMHgwNCwgMHhiZCwgMHgwNCwgMHg2OCwgMHhkMCwgMHg3ZCwgMHg1NCwgMHg5ZCwgCisgICAgMHg1MCwgMHhiZCwgMHgyNSwgMHg0MCwgMHgwMiwgMHg3ZCwgMHgyNSwgMHg3ZCwgMHgzMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgCisgICAgMHgxZiwgMHhiNCwgMHgwMSwgMHgzMSwgMHhkYSwgMHhiOCwgMHg3ZSwgMHgxOSwgMHhiMCwgMHg3YSwgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHgxYiwgMHgyNCwgCisgICAgMHg3OCwgMHhlNywgMHgwMiwgMHg1MSwgMHhhNSwgMHg3NSwgMHgyZiwgMHg5OSwgMHgxMiwgMHg3MywgMHgzNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgCisgICAgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzYiwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgCisgICAgMHgwMCwgMHgxMCwgMHhkMiwgMHgxMywgMHgyMiwgMHhkYSwgMHhiOCwgMHgzMCwgMHhlMCwgMHhkOCwgMHhiZCwgMHgzMiwgMHg2OCwgMHgwNywgMHhjYSwgMHhiOCwgCisgICAgMHgxMiwgMHg1MSwgMHhhNSwgMHhkYSwgMHhiOCwgMHgwMiwgMHg1MiwgMHhjYywgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHg4OCwgMHg3NSwgCisgICAgMHgyZiwgMHg5MCwgMHgxMiwgMHg3MywgMHgzNSwgMHhmNSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgwYSwgMHg2OCwgCisgICAgMHgxZCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1YiwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1YiwgMHhhNSwgMHhmZCwgCisgICAgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1MywgMHg4MCwgMHgwMiwgMHhjMiwgMHg1MywgMHgxMiwgMHg0MywgMHgwMiwgMHgwMiwgMHg2MSwgCisgICAgMHgxMywgMHg3NSwgMHgyZiwgMHg5MSwgMHgxMiwgMHg3MywgMHgzNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHg3YSwgMHhiMSwgMHgyZiwgMHgxMiwgMHg3MywgCisgICAgMHgzNSwgMHgyMCwgMHhlMCwgMHgwOCwgMHhkMiwgMHgwNCwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgwMiwgMHg2MSwgMHgxMywgMHhkMiwgMHgwNCwgMHgzMCwgMHhlMSwgCisgICAgMHgwNiwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgxMiwgMHg2MSwgMHgxMywgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxYywgMHhkYSwgMHhiOCwgMHg2OCwgMHgxMiwgCisgICAgMHg3ZSwgMHhhMCwgMHhjMCwgMHgwOSwgMHg2MSwgMHgwMCwgMHgwMCwgMHgxMiwgMHg2MSwgMHgzNiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgCisgICAgMHhkYiwgMHgyMiwgMHgwMiwgMHg1MSwgMHhmOSwgMHg3NSwgMHgyZiwgMHg5NSwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMiwgMHg3NSwgMHgyZiwgMHg5NiwgMHgxMiwgCisgICAgMHg3MywgMHgzNSwgMHgyMiwgMHgxMCwgMHgwYywgMHgwMSwgMHgyMiwgMHgyMCwgMHgyYywgMHgwMywgMHhkMiwgMHgwYywgMHgyMiwgMHg3NSwgMHgyZiwgMHhhNCwgCisgICAgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHgxNCwgMHg4NCwgMHgwMCwgMHg4MCwgMHgwNiwgMHgyMCwgMHgyYywgMHgwMywgMHhkMiwgMHgwYywgMHgyMiwgMHgwOSwgCisgICAgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwMywgMHgxMiwgMHg1NSwgMHhmOSwgMHgzMCwgCisgICAgMHgzNCwgMHgwNiwgMHgyMCwgMHhlNiwgMHg0ZiwgMHhkMiwgMHgwYywgMHgyMiwgMHgzMCwgMHhlNiwgMHgwMiwgMHhkMiwgMHg2NCwgMHg3ZSwgMHgzNywgMHgwMSwgCisgICAgMHg4MSwgMHg3ZSwgMHgyNywgMHgwMSwgMHhhMSwgMHg5ZCwgMHgzMiwgMHg0MCwgMHgzMSwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHgzYSwgMHg3YSwgMHgwNSwgCisgICAgMHgzYSwgMHg3YSwgMHgzNywgMHgwMSwgMHg4MSwgMHg3ZSwgMHgzNywgMHgwMSwgMHg2MSwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgxOCwgCisgICAgMHgyYywgMHgzOCwgMHg2OCwgMHg3YSwgMHg0NywgMHgwMSwgMHg2MSwgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgCisgICAgMHgxMiwgMHg3MywgMHgzNSwgMHgxMiwgMHg2OSwgMHhmMCwgMHgxMCwgMHg2NCwgMHhjNCwgMHgyMiwgMHhjMiwgMHg2NCwgMHgyZCwgMHgyMywgMHg2OCwgMHg3OCwgCisgICAgMHg2ZCwgMHgzMywgMHg4MCwgMHgxYSwgMHg3ZSwgMHgyNywgMHgwMSwgMHg4MSwgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg2YSwgMHhiZSwgMHgyNywgCisgICAgMHgwMSwgMHhhMSwgMHgyOCwgMHgwNCwgMHg3ZSwgMHgyNywgMHgwMSwgMHhhMSwgMHg3ZSwgMHgzNywgMHgwMSwgMHg4MSwgMHg5ZCwgMHgzMiwgMHg3ZCwgMHgwMiwgCisgICAgMHgyZSwgMHgwNSwgMHgzYSwgMHg3YSwgMHgwNSwgMHgzYSwgMHg3YSwgMHgzNywgMHgwMSwgMHg4MSwgMHg3ZSwgMHgzNywgMHgwMSwgMHg2MSwgMHg3ZCwgMHg0MywgCisgICAgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgxOCwgMHgyYywgMHgzOCwgMHgxMywgMHg3YSwgMHg0NywgMHgwMSwgMHg2MSwgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgCisgICAgMHg3MywgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgwMiwgMHg2OSwgMHhmMCwgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgCisgICAgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg5ZSwgMHg0NCwgMHgxOCwgMHgyZCwgMHg5ZCwgMHgyNCwgMHgxMiwgMHg2OSwgMHhmMCwgCisgICAgMHg3ZSwgMHgzNCwgMHgxNCwgMHgyZCwgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHg2MSwgMHgxMiwgMHg2OSwgMHhmMCwgMHhiZSwgCisgICAgMHgyNSwgMHgyMCwgMHg3OCwgMHgwMywgMHgwMiwgMHg1MywgMHg3NiwgMHgyMiwgMHhkMiwgMHgwYywgMHg3ZSwgMHgwNCwgMHgxNCwgMHgyZCwgMHg3YSwgMHgwNywgCisgICAgMHgwMSwgMHg2MSwgMHg3YSwgMHgwNywgMHgwMSwgMHg3MSwgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3NSwgMHgyZiwgMHgwMCwgMHgxMiwgCisgICAgMHg3MywgMHgzNSwgMHgyMiwgMHg3NSwgMHgyZiwgMHg5MiwgMHgxMiwgMHg3MywgMHgzNSwgMHhkMiwgMHgwNCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgCisgICAgMHhiOCwgMHg1NCwgMHg4MiwgMHhkYSwgMHhiOCwgMHg3OCwgMHg2OCwgMHg3ZSwgMHgzNywgMHgwMSwgMHhjYiwgMHg3ZSwgMHgyNywgMHgwMSwgMHhiMSwgMHgyZSwgCisgICAgMHgyNCwgMHgwMCwgMHgwMiwgMHgyZCwgMHgzMiwgMHhiZSwgMHgzNCwgMHgwNCwgMHgwMCwgMHgzOCwgMHgzNCwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHgzMCwgCisgICAgMHg3YSwgMHgwNSwgMHgzMCwgMHg3YSwgMHgzNywgMHgwMSwgMHhjYiwgMHg3ZSwgMHgzNywgMHgwMSwgMHhjOSwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgCisgICAgMHg0NCwgMHgyOCwgMHgyYywgMHgzOCwgMHgzYywgMHg3YSwgMHg0NywgMHgwMSwgMHhjOSwgMHg3ZSwgMHgyNCwgMHgwNCwgMHgwMCwgMHgyZSwgMHgyNywgMHgwMSwgCisgICAgMHhiMSwgMHgxYiwgMHgzOCwgMHgyMCwgMHgwYiwgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgwMiwgMHg2YSwgMHg2MywgMHg3NSwgCisgICAgMHgyZiwgMHg5OSwgMHgxMiwgMHg3MywgMHgzNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgCisgICAgMHgzYywgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxNCwgMHgyMiwgMHg4MCwgCisgICAgMHg3ZiwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg5ZSwgMHg0NCwgMHgyOCwgMHgyZCwgMHg5ZCwgMHgyNCwgMHg3ZSwgMHg2NCwgMHgwNCwgCisgICAgMHgwMCwgMHgyZSwgMHg2NywgMHgwMSwgMHhiMSwgMHg5ZSwgMHgyNCwgMHgwMCwgMHgwMiwgMHg0MCwgMHgxNywgMHgxYiwgMHgzOCwgMHg2MCwgMHgwYiwgMHgzNSwgCisgICAgMHgxMiwgMHg2YSwgMHg2MywgMHg3ZSwgMHgzNCwgMHgyNCwgMHgyZCwgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhjOSwgMHgwMiwgCisgICAgMHg2YSwgMHg2MywgMHg3YSwgMHgzOSwgMHhjMCwgMHg3ZSwgMHgzNCwgMHgyNCwgMHgyZCwgMHg3YSwgMHgzOSwgMHhkMCwgMHgwYiwgMHgzNCwgMHgxYiwgMHg0NCwgCisgICAgMHg4MCwgMHhlNSwgMHg5ZCwgMHgzMiwgMHg3YywgMHhiNiwgMHg1NCwgMHgwZiwgMHgyMywgMHgyMywgMHgyMywgMHg0NCwgMHgwNCwgMHg3YSwgMHg2OSwgMHhiMCwgCisgICAgMHg3YSwgMHg3OSwgMHg3MCwgMHgwYiwgMHgzNSwgMHg3NSwgMHgyZiwgMHg5MywgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg3MSwgMHgyZiwgMHgxMiwgMHg3MywgCisgICAgMHgzNSwgMHhiZCwgMHgwNCwgMHg2OCwgMHgyYiwgMHg3YSwgMHgwNywgMHgwMSwgMHhjOSwgMHg3ZSwgMHg0NywgMHgwMSwgMHhjYiwgMHgyZCwgMHg0MywgMHg3YSwgCisgICAgMHg0NywgMHgwMSwgMHhjYiwgMHgyZSwgMHgzNSwgMHgzMCwgMHg3YSwgMHgzNSwgMHgzMCwgMHgyMiwgMHhkMiwgMHgwNCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgCisgICAgMHgyMCwgMHhlMCwgMHgxMywgMHgyMiwgMHg3ZSwgMHgwNCwgMHgyNCwgMHgyZCwgMHg4MCwgMHgyOCwgMHg3ZSwgMHgwNCwgMHgyNCwgMHgyZCwgMHg4MCwgMHgyYSwgCisgICAgMHg3ZSwgMHgwNCwgMHgyNCwgMHgyZCwgMHg4MCwgMHhjZiwgMHg3ZSwgMHgwNywgMHgwMSwgMHhjYiwgMHg3ZSwgMHgyNCwgMHgwMywgMHhmZSwgMHg5ZCwgMHgyMCwgCisgICAgMHgyOCwgMHg0MCwgMHg3ZSwgMHgwNywgMHgwMSwgMHhjOSwgMHg3ZSwgMHg0NCwgMHgyOCwgMHgyZCwgMHg3ZCwgMHg2MCwgMHgwYiwgMHgwNCwgMHhiZCwgMHgwNCwgCisgICAgMHg2OCwgMHhkMiwgMHg3ZCwgMHg3MCwgMHgwYiwgMHgwNCwgMHhiZCwgMHgwNCwgMHg2OCwgMHhkMCwgMHg3ZCwgMHg1NCwgMHg5ZCwgMHg1MCwgMHhiZCwgMHgyNSwgCisgICAgMHg0MCwgMHgwMiwgMHg3ZCwgMHgyNSwgMHg3ZCwgMHgzMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHgxZiwgMHhiNCwgMHgwMSwgCisgICAgMHgzMSwgMHhkYSwgMHhiOCwgMHg3ZSwgMHgxOSwgMHhiMCwgMHg3YSwgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHgxYiwgMHgyNCwgMHg3OCwgMHhlNywgMHgwMiwgCisgICAgMHg1NCwgMHhkMiwgMHg3NSwgMHgyZiwgMHg5OSwgMHgxMiwgMHg3MywgMHgzNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgCisgICAgMHgwMCwgMHgwNCwgMHgzMCwgMHgzYywgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgCisgICAgMHgxNCwgMHgyMiwgMHhkYSwgMHhiOCwgMHgzMCwgMHhlMCwgMHhkOCwgMHhiZCwgMHgzMiwgMHg2OCwgMHgwNywgMHhjYSwgMHhiOCwgMHgxMiwgMHg1NCwgMHhkMiwgCisgICAgMHhkYSwgMHhiOCwgMHgwMiwgMHg1NSwgMHhmOSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHg4OCwgMHg3NSwgMHgyZiwgMHg5MCwgMHgxMiwgCisgICAgMHg3MywgMHgzNSwgMHhmNSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgwYSwgMHg2OCwgMHgxZCwgMHhhNSwgMHhmZCwgCisgICAgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1YywgMHg4MCwgMHgwMiwgMHhjMiwgMHg1YywgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgCisgICAgMHg2OCwgMHgwNCwgMHhkMiwgMHg1NCwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1NCwgMHgxMiwgMHg0MywgMHgxOSwgMHgwMiwgMHg2MSwgMHgxMywgMHg3NSwgMHgyZiwgCisgICAgMHg5MSwgMHgxMiwgMHg3MywgMHgzNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHg3YSwgMHhiMSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMCwgMHhlMCwgCisgICAgMHgwOCwgMHhkMiwgMHgwNCwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgwMiwgMHg2MSwgMHgxMywgMHhkMiwgMHgwNCwgMHgzMCwgMHhlMSwgMHgwNiwgMHg3ZSwgMHhhMCwgCisgICAgMHg4MCwgMHgxMiwgMHg2MSwgMHgxMywgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxYywgMHhkYSwgMHhiOCwgMHg2OCwgMHgxMiwgMHg3ZSwgMHhhMCwgMHhjMCwgCisgICAgMHgwOSwgMHg2MSwgMHgwMCwgMHgwMCwgMHgxMiwgMHg2MSwgMHgzNiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHhkYiwgMHgyMiwgMHgwMiwgCisgICAgMHg1NSwgMHgyNiwgMHg3NSwgMHgyZiwgMHg5NSwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMiwgMHg3NSwgMHgyZiwgMHg5NiwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMiwgCisgICAgMHgxMCwgMHgwZCwgMHgwMSwgMHgyMiwgMHgyMCwgMHgyZCwgMHgwMywgMHhkMiwgMHgwZCwgMHgyMiwgMHg3NSwgMHgyZiwgMHhhNSwgMHgxMiwgMHg3MywgMHgzNSwgCisgICAgMHg3ZSwgMHgxNCwgMHg4NSwgMHgwMCwgMHg4MCwgMHgwNiwgMHgyMCwgMHgyZCwgMHgwMywgMHhkMiwgMHgwZCwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgCisgICAgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwMywgMHgxMiwgMHg1OSwgMHgyNiwgMHgzMCwgMHgzNSwgMHgwNiwgMHgyMCwgCisgICAgMHhlNiwgMHg0ZiwgMHhkMiwgMHgwZCwgMHgyMiwgMHgzMCwgMHhlNiwgMHgwMiwgMHhkMiwgMHg2NSwgMHg3ZSwgMHgzNywgMHgwMSwgMHg4MywgMHg3ZSwgMHgyNywgCisgICAgMHgwMSwgMHhhMywgMHg5ZCwgMHgzMiwgMHg0MCwgMHgzMSwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHgzYywgMHg3YSwgMHgwNSwgMHgzYywgMHg3YSwgMHgzNywgCisgICAgMHgwMSwgMHg4MywgMHg3ZSwgMHgzNywgMHgwMSwgMHg2MywgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgxYywgMHgyYywgMHgzOCwgMHg2OCwgCisgICAgMHg3YSwgMHg0NywgMHgwMSwgMHg2MywgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgCisgICAgMHgxMiwgMHg2OSwgMHhmMCwgMHgxMCwgMHg2NSwgMHhjNCwgMHgyMiwgMHhjMiwgMHg2NSwgMHgyZCwgMHgyMywgMHg2OCwgMHg3OCwgMHg2ZCwgMHgzMywgMHg4MCwgCisgICAgMHgxYSwgMHg3ZSwgMHgyNywgMHgwMSwgMHg4MywgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg2YSwgMHhiZSwgMHgyNywgMHgwMSwgMHhhMywgMHgyOCwgCisgICAgMHgwNCwgMHg3ZSwgMHgyNywgMHgwMSwgMHhhMywgMHg3ZSwgMHgzNywgMHgwMSwgMHg4MywgMHg5ZCwgMHgzMiwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHgzYywgCisgICAgMHg3YSwgMHgwNSwgMHgzYywgMHg3YSwgMHgzNywgMHgwMSwgMHg4MywgMHg3ZSwgMHgzNywgMHgwMSwgMHg2MywgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgCisgICAgMHg0NCwgMHgxYywgMHgyYywgMHgzOCwgMHgxMywgMHg3YSwgMHg0NywgMHgwMSwgMHg2MywgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgCisgICAgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgwMiwgMHg2OSwgMHhmMCwgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg1MSwgCisgICAgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg5ZSwgMHg0NCwgMHgxYywgMHgyZCwgMHg5ZCwgMHgyNCwgMHgxMiwgMHg2OSwgMHhmMCwgMHg3ZSwgMHgzNCwgMHgxOCwgCisgICAgMHgyZCwgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHg2MywgMHgxMiwgMHg2OSwgMHhmMCwgMHhiZSwgMHgyNSwgMHgyMCwgMHg3OCwgCisgICAgMHgwMywgMHgwMiwgMHg1NiwgMHhhMywgMHgyMiwgMHhkMiwgMHgwZCwgMHg3ZSwgMHgwNCwgMHgxOCwgMHgyZCwgMHg3YSwgMHgwNywgMHgwMSwgMHg2MywgMHg3YSwgCisgICAgMHgwNywgMHgwMSwgMHg3MywgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3NSwgMHgyZiwgMHgwMCwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMiwgCisgICAgMHg3NSwgMHgyZiwgMHg5MiwgMHgxMiwgMHg3MywgMHgzNSwgMHhkMiwgMHgwNCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHg4MiwgCisgICAgMHhkYSwgMHhiOCwgMHg3OCwgMHg2OCwgMHg3ZSwgMHgzNywgMHgwMSwgMHhjYiwgMHg3ZSwgMHgyNywgMHgwMSwgMHhiMywgMHgyZSwgMHgyNCwgMHgwMCwgMHgwMiwgCisgICAgMHgyZCwgMHgzMiwgMHhiZSwgMHgzNCwgMHgwNCwgMHgwMCwgMHgzOCwgMHgzNCwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHgzMCwgMHg3YSwgMHgwNSwgMHgzMCwgCisgICAgMHg3YSwgMHgzNywgMHgwMSwgMHhjYiwgMHg3ZSwgMHgzNywgMHgwMSwgMHhjOSwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgyOCwgMHgyYywgCisgICAgMHgzOCwgMHgzYywgMHg3YSwgMHg0NywgMHgwMSwgMHhjOSwgMHg3ZSwgMHgyNCwgMHgwNSwgMHgwMCwgMHgyZSwgMHgyNywgMHgwMSwgMHhiMywgMHgxYiwgMHgzOCwgCisgICAgMHgyMCwgMHgwYiwgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgwMiwgMHg2YSwgMHg2MywgMHg3NSwgMHgyZiwgMHg5OSwgMHgxMiwgCisgICAgMHg3MywgMHgzNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzZCwgMHgwYSwgMHgwOSwgCisgICAgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxNSwgMHgyMiwgMHg4MCwgMHg3ZiwgMHg3YSwgMHg1MSwgCisgICAgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg5ZSwgMHg0NCwgMHgyOCwgMHgyZCwgMHg5ZCwgMHgyNCwgMHg3ZSwgMHg2NCwgMHgwNSwgMHgwMCwgMHgyZSwgMHg2NywgCisgICAgMHgwMSwgMHhiMywgMHg5ZSwgMHgyNCwgMHgwMCwgMHgwMiwgMHg0MCwgMHgxNywgMHgxYiwgMHgzOCwgMHg2MCwgMHgwYiwgMHgzNSwgMHgxMiwgMHg2YSwgMHg2MywgCisgICAgMHg3ZSwgMHgzNCwgMHgyNCwgMHgyZCwgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhjOSwgMHgwMiwgMHg2YSwgMHg2MywgMHg3YSwgCisgICAgMHgzOSwgMHhjMCwgMHg3ZSwgMHgzNCwgMHgyNCwgMHgyZCwgMHg3YSwgMHgzOSwgMHhkMCwgMHgwYiwgMHgzNCwgMHgxYiwgMHg0NCwgMHg4MCwgMHhlNSwgMHg5ZCwgCisgICAgMHgzMiwgMHg3YywgMHhiNiwgMHg1NCwgMHgwZiwgMHgyMywgMHgyMywgMHgyMywgMHg0NCwgMHgwNSwgMHg3YSwgMHg2OSwgMHhiMCwgMHg3YSwgMHg3OSwgMHg3MCwgCisgICAgMHgwYiwgMHgzNSwgMHg3NSwgMHgyZiwgMHg5MywgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg3MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHhiZCwgMHgwNCwgCisgICAgMHg2OCwgMHgyYiwgMHg3YSwgMHgwNywgMHgwMSwgMHhjOSwgMHg3ZSwgMHg0NywgMHgwMSwgMHhjYiwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhjYiwgCisgICAgMHgyZSwgMHgzNSwgMHgzMCwgMHg3YSwgMHgzNSwgMHgzMCwgMHgyMiwgMHhkMiwgMHgwNCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHgxMywgCisgICAgMHgyMiwgMHg3ZSwgMHgwNCwgMHgyNCwgMHgyZCwgMHg4MCwgMHgyOCwgMHg3ZSwgMHgwNCwgMHgyNCwgMHgyZCwgMHg4MCwgMHgyYSwgMHg3ZSwgMHgwNCwgMHgyNCwgCisgICAgMHgyZCwgMHg4MCwgMHhjZiwgMHg3ZSwgMHgwNywgMHgwMSwgMHhjYiwgMHg3ZSwgMHgyNCwgMHgwMywgMHhmZSwgMHg5ZCwgMHgyMCwgMHgyOCwgMHg0MCwgMHg3ZSwgCisgICAgMHgwNywgMHgwMSwgMHhjOSwgMHg3ZSwgMHg0NCwgMHgyOCwgMHgyZCwgMHg3ZCwgMHg2MCwgMHgwYiwgMHgwNCwgMHhiZCwgMHgwNCwgMHg2OCwgMHhkMiwgMHg3ZCwgCisgICAgMHg3MCwgMHgwYiwgMHgwNCwgMHhiZCwgMHgwNCwgMHg2OCwgMHhkMCwgMHg3ZCwgMHg1NCwgMHg5ZCwgMHg1MCwgMHhiZCwgMHgyNSwgMHg0MCwgMHgwMiwgMHg3ZCwgCisgICAgMHgyNSwgMHg3ZCwgMHgzMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHgxZiwgMHhiNCwgMHgwMSwgMHgzMSwgMHhkYSwgMHhiOCwgCisgICAgMHg3ZSwgMHgxOSwgMHhiMCwgMHg3YSwgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHgxYiwgMHgyNCwgMHg3OCwgMHhlNywgMHgwMiwgMHg1NywgMHhmZiwgMHg3NSwgCisgICAgMHgyZiwgMHg5OSwgMHgxMiwgMHg3MywgMHgzNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgCisgICAgMHgzZCwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxNSwgMHgyMiwgMHhkYSwgCisgICAgMHhiOCwgMHgzMCwgMHhlMCwgMHhkOCwgMHhiZCwgMHgzMiwgMHg2OCwgMHgwNywgMHhjYSwgMHhiOCwgMHgxMiwgMHg1NywgMHhmZiwgMHhkYSwgMHhiOCwgMHgwMiwgCisgICAgMHg1OSwgMHgyNiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHg4OCwgMHg3NSwgMHgyZiwgMHg5MCwgMHgxMiwgMHg3MywgMHgzNSwgMHhmNSwgCisgICAgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgwYSwgMHg2OCwgMHgxZCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgyMCwgCisgICAgMHg2OCwgMHgwNCwgMHhkMiwgMHg1ZCwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1ZCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgMHhkMiwgCisgICAgMHg1NSwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1NSwgMHgxMiwgMHg0MywgMHgzMCwgMHgwMiwgMHg2MSwgMHgxMywgMHg3NSwgMHgyZiwgMHg5MSwgMHgxMiwgMHg3MywgCisgICAgMHgzNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHg3YSwgMHhiMSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMCwgMHhlMCwgMHgwOCwgMHhkMiwgMHgwNCwgCisgICAgMHg3ZSwgMHhhMCwgMHg4MCwgMHgwMiwgMHg2MSwgMHgxMywgMHhkMiwgMHgwNCwgMHgzMCwgMHhlMSwgMHgwNiwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgxMiwgMHg2MSwgCisgICAgMHgxMywgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxYywgMHhkYSwgMHhiOCwgMHg2OCwgMHgxMiwgMHg3ZSwgMHhhMCwgMHhjMCwgMHgwOSwgMHg2MSwgMHgwMCwgCisgICAgMHgwMCwgMHgxMiwgMHg2MSwgMHgzNiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHhkYiwgMHgyMiwgMHgwMiwgMHg1OCwgMHg1MywgMHg3NSwgCisgICAgMHgyZiwgMHg5NSwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMiwgMHg3NSwgMHgyZiwgMHg5NiwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMiwgMHgxMCwgMHgwZSwgMHgwMSwgCisgICAgMHgyMiwgMHgyMCwgMHgyZSwgMHgwMywgMHhkMiwgMHgwZSwgMHgyMiwgMHg3NSwgMHgyZiwgMHhhNiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHgxNCwgMHg4NiwgCisgICAgMHgwMCwgMHg4MCwgMHgwNiwgMHgyMCwgMHgyZSwgMHgwMywgMHhkMiwgMHgwZSwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgCisgICAgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwMywgMHgxMiwgMHg1YywgMHg1MywgMHgzMCwgMHgzNiwgMHgwNiwgMHgyMCwgMHhlNiwgMHg0ZiwgMHhkMiwgCisgICAgMHgwZSwgMHgyMiwgMHgzMCwgMHhlNiwgMHgwMiwgMHhkMiwgMHg2NiwgMHg3ZSwgMHgzNywgMHgwMSwgMHg4NSwgMHg3ZSwgMHgyNywgMHgwMSwgMHhhNSwgMHg5ZCwgCisgICAgMHgzMiwgMHg0MCwgMHgzMSwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHgzZSwgMHg3YSwgMHgwNSwgMHgzZSwgMHg3YSwgMHgzNywgMHgwMSwgMHg4NSwgMHg3ZSwgCisgICAgMHgzNywgMHgwMSwgMHg2NSwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgyMCwgMHgyYywgMHgzOCwgMHg2OCwgMHg3YSwgMHg0NywgMHgwMSwgCisgICAgMHg2NSwgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgxMiwgMHg2OSwgMHhmMCwgCisgICAgMHgxMCwgMHg2NiwgMHhjNCwgMHgyMiwgMHhjMiwgMHg2NiwgMHgyZCwgMHgyMywgMHg2OCwgMHg3OCwgMHg2ZCwgMHgzMywgMHg4MCwgMHgxYSwgMHg3ZSwgMHgyNywgCisgICAgMHgwMSwgMHg4NSwgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg2YSwgMHhiZSwgMHgyNywgMHgwMSwgMHhhNSwgMHgyOCwgMHgwNCwgMHg3ZSwgMHgyNywgCisgICAgMHgwMSwgMHhhNSwgMHg3ZSwgMHgzNywgMHgwMSwgMHg4NSwgMHg5ZCwgMHgzMiwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHgzZSwgMHg3YSwgMHgwNSwgMHgzZSwgCisgICAgMHg3YSwgMHgzNywgMHgwMSwgMHg4NSwgMHg3ZSwgMHgzNywgMHgwMSwgMHg2NSwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgyMCwgMHgyYywgCisgICAgMHgzOCwgMHgxMywgMHg3YSwgMHg0NywgMHgwMSwgMHg2NSwgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgCisgICAgMHg3MywgMHgzNSwgMHgwMiwgMHg2OSwgMHhmMCwgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgCisgICAgMHgzNSwgMHg5ZSwgMHg0NCwgMHgyMCwgMHgyZCwgMHg5ZCwgMHgyNCwgMHgxMiwgMHg2OSwgMHhmMCwgMHg3ZSwgMHgzNCwgMHgxYywgMHgyZCwgMHg3ZCwgMHgyNCwgCisgICAgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHg2NSwgMHgxMiwgMHg2OSwgMHhmMCwgMHhiZSwgMHgyNSwgMHgyMCwgMHg3OCwgMHgwMywgMHgwMiwgMHg1OSwgCisgICAgMHhkMCwgMHgyMiwgMHhkMiwgMHgwZSwgMHg3ZSwgMHgwNCwgMHgxYywgMHgyZCwgMHg3YSwgMHgwNywgMHgwMSwgMHg2NSwgMHg3YSwgMHgwNywgMHgwMSwgMHg3NSwgCisgICAgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3NSwgMHgyZiwgMHgwMCwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMiwgMHg3NSwgMHgyZiwgMHg5MiwgCisgICAgMHgxMiwgMHg3MywgMHgzNSwgMHhkMiwgMHgwNCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHg4MiwgMHhkYSwgMHhiOCwgMHg3OCwgCisgICAgMHg2OCwgMHg3ZSwgMHgzNywgMHgwMSwgMHhjYiwgMHg3ZSwgMHgyNywgMHgwMSwgMHhiNSwgMHgyZSwgMHgyNCwgMHgwMCwgMHgwMiwgMHgyZCwgMHgzMiwgMHhiZSwgCisgICAgMHgzNCwgMHgwNCwgMHgwMCwgMHgzOCwgMHgzNCwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHgzMCwgMHg3YSwgMHgwNSwgMHgzMCwgMHg3YSwgMHgzNywgMHgwMSwgCisgICAgMHhjYiwgMHg3ZSwgMHgzNywgMHgwMSwgMHhjOSwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgyOCwgMHgyYywgMHgzOCwgMHgzYywgMHg3YSwgCisgICAgMHg0NywgMHgwMSwgMHhjOSwgMHg3ZSwgMHgyNCwgMHgwNiwgMHgwMCwgMHgyZSwgMHgyNywgMHgwMSwgMHhiNSwgMHgxYiwgMHgzOCwgMHgyMCwgMHgwYiwgMHgzNSwgCisgICAgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgwMiwgMHg2YSwgMHg2MywgMHg3NSwgMHgyZiwgMHg5OSwgMHgxMiwgMHg3MywgMHgzNSwgMHgwOSwgCisgICAgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzZSwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgCisgICAgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxNiwgMHgyMiwgMHg4MCwgMHg3ZiwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgCisgICAgMHgzNSwgMHg5ZSwgMHg0NCwgMHgyOCwgMHgyZCwgMHg5ZCwgMHgyNCwgMHg3ZSwgMHg2NCwgMHgwNiwgMHgwMCwgMHgyZSwgMHg2NywgMHgwMSwgMHhiNSwgMHg5ZSwgCisgICAgMHgyNCwgMHgwMCwgMHgwMiwgMHg0MCwgMHgxNywgMHgxYiwgMHgzOCwgMHg2MCwgMHgwYiwgMHgzNSwgMHgxMiwgMHg2YSwgMHg2MywgMHg3ZSwgMHgzNCwgMHgyNCwgCisgICAgMHgyZCwgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhjOSwgMHgwMiwgMHg2YSwgMHg2MywgMHg3YSwgMHgzOSwgMHhjMCwgMHg3ZSwgCisgICAgMHgzNCwgMHgyNCwgMHgyZCwgMHg3YSwgMHgzOSwgMHhkMCwgMHgwYiwgMHgzNCwgMHgxYiwgMHg0NCwgMHg4MCwgMHhlNSwgMHg5ZCwgMHgzMiwgMHg3YywgMHhiNiwgCisgICAgMHg1NCwgMHgwZiwgMHgyMywgMHgyMywgMHgyMywgMHg0NCwgMHgwNiwgMHg3YSwgMHg2OSwgMHhiMCwgMHg3YSwgMHg3OSwgMHg3MCwgMHgwYiwgMHgzNSwgMHg3NSwgCisgICAgMHgyZiwgMHg5MywgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg3MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHhiZCwgMHgwNCwgMHg2OCwgMHgyYiwgMHg3YSwgCisgICAgMHgwNywgMHgwMSwgMHhjOSwgMHg3ZSwgMHg0NywgMHgwMSwgMHhjYiwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhjYiwgMHgyZSwgMHgzNSwgMHgzMCwgCisgICAgMHg3YSwgMHgzNSwgMHgzMCwgMHgyMiwgMHhkMiwgMHgwNCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHgxMywgMHgyMiwgMHg3ZSwgMHgwNCwgCisgICAgMHgyNCwgMHgyZCwgMHg4MCwgMHgyOCwgMHg3ZSwgMHgwNCwgMHgyNCwgMHgyZCwgMHg4MCwgMHgyYSwgMHg3ZSwgMHgwNCwgMHgyNCwgMHgyZCwgMHg4MCwgMHhjZiwgCisgICAgMHg3ZSwgMHgwNywgMHgwMSwgMHhjYiwgMHg3ZSwgMHgyNCwgMHgwMywgMHhmZSwgMHg5ZCwgMHgyMCwgMHgyOCwgMHg0MCwgMHg3ZSwgMHgwNywgMHgwMSwgMHhjOSwgCisgICAgMHg3ZSwgMHg0NCwgMHgyOCwgMHgyZCwgMHg3ZCwgMHg2MCwgMHgwYiwgMHgwNCwgMHhiZCwgMHgwNCwgMHg2OCwgMHhkMiwgMHg3ZCwgMHg3MCwgMHgwYiwgMHgwNCwgCisgICAgMHhiZCwgMHgwNCwgMHg2OCwgMHhkMCwgMHg3ZCwgMHg1NCwgMHg5ZCwgMHg1MCwgMHhiZCwgMHgyNSwgMHg0MCwgMHgwMiwgMHg3ZCwgMHgyNSwgMHg3ZCwgMHgzMiwgCisgICAgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHgxZiwgMHhiNCwgMHgwMSwgMHgzMSwgMHhkYSwgMHhiOCwgMHg3ZSwgMHgxOSwgMHhiMCwgCisgICAgMHg3YSwgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHgxYiwgMHgyNCwgMHg3OCwgMHhlNywgMHgwMiwgMHg1YiwgMHgyYywgMHg3NSwgMHgyZiwgMHg5OSwgMHgxMiwgCisgICAgMHg3MywgMHgzNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzZSwgMHgwYSwgMHgwOSwgCisgICAgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxNiwgMHgyMiwgMHhkYSwgMHhiOCwgMHgzMCwgMHhlMCwgCisgICAgMHhkOCwgMHhiZCwgMHgzMiwgMHg2OCwgMHgwNywgMHhjYSwgMHhiOCwgMHgxMiwgMHg1YiwgMHgyYywgMHhkYSwgMHhiOCwgMHgwMiwgMHg1YywgMHg1MywgMHgwOSwgCisgICAgMHhiMSwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHg4OCwgMHg3NSwgMHgyZiwgMHg5MCwgMHgxMiwgMHg3MywgMHgzNSwgMHhmNSwgMHgyZiwgMHgxMiwgMHg3MywgCisgICAgMHgzNSwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgwYSwgMHg2OCwgMHgxZCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgCisgICAgMHg1ZSwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1ZSwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1NiwgMHg4MCwgMHgwMiwgCisgICAgMHhjMiwgMHg1NiwgMHgxMiwgMHg0MywgMHg0NywgMHgwMiwgMHg2MSwgMHgxMywgMHg3NSwgMHgyZiwgMHg5MSwgMHgxMiwgMHg3MywgMHgzNSwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgxNCwgMHg3YSwgMHhiMSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMCwgMHhlMCwgMHgwOCwgMHhkMiwgMHgwNCwgMHg3ZSwgMHhhMCwgMHg4MCwgCisgICAgMHgwMiwgMHg2MSwgMHgxMywgMHhkMiwgMHgwNCwgMHgzMCwgMHhlMSwgMHgwNiwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgxMiwgMHg2MSwgMHgxMywgMHhjYSwgMHhiOCwgCisgICAgMHg1ZSwgMHhiMCwgMHgxYywgMHhkYSwgMHhiOCwgMHg2OCwgMHgxMiwgMHg3ZSwgMHhhMCwgMHhjMCwgMHgwOSwgMHg2MSwgMHgwMCwgMHgwMCwgMHgxMiwgMHg2MSwgCisgICAgMHgzNiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHhkYiwgMHgyMiwgMHgwMiwgMHg1YiwgMHg4MCwgMHg3NSwgMHgyZiwgMHg5NSwgMHgxMiwgCisgICAgMHg3MywgMHgzNSwgMHgyMiwgMHg3NSwgMHgyZiwgMHg5NiwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMiwgMHgxMCwgMHgwZiwgMHgwMSwgMHgyMiwgMHgyMCwgMHgyZiwgCisgICAgMHgwMywgMHhkMiwgMHgwZiwgMHgyMiwgMHg3NSwgMHgyZiwgMHhhNywgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHgxNCwgMHg4NywgMHgwMCwgMHg4MCwgMHgwNiwgCisgICAgMHgyMCwgMHgyZiwgMHgwMywgMHhkMiwgMHgwZiwgMHgyMiwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgCisgICAgMHhiOCwgMHg2OCwgMHgwMywgMHgxMiwgMHg1ZiwgMHg4MCwgMHgzMCwgMHgzNywgMHgwNiwgMHgyMCwgMHhlNiwgMHg0ZiwgMHhkMiwgMHgwZiwgMHgyMiwgMHgzMCwgCisgICAgMHhlNiwgMHgwMiwgMHhkMiwgMHg2NywgMHg3ZSwgMHgzNywgMHgwMSwgMHg4NywgMHg3ZSwgMHgyNywgMHgwMSwgMHhhNywgMHg5ZCwgMHgzMiwgMHg0MCwgMHgzMSwgCisgICAgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHg0MCwgMHg3YSwgMHgwNSwgMHg0MCwgMHg3YSwgMHgzNywgMHgwMSwgMHg4NywgMHg3ZSwgMHgzNywgMHgwMSwgMHg2NywgCisgICAgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgyNCwgMHgyYywgMHgzOCwgMHg2OCwgMHg3YSwgMHg0NywgMHgwMSwgMHg2NywgMHg3NSwgMHgyZiwgCisgICAgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgxMiwgMHg2OSwgMHhmMCwgMHgxMCwgMHg2NywgMHhjNCwgCisgICAgMHgyMiwgMHhjMiwgMHg2NywgMHgyZCwgMHgyMywgMHg2OCwgMHg3OCwgMHg2ZCwgMHgzMywgMHg4MCwgMHgxYSwgMHg3ZSwgMHgyNywgMHgwMSwgMHg4NywgMHhiZSwgCisgICAgMHgyNCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg2YSwgMHhiZSwgMHgyNywgMHgwMSwgMHhhNywgMHgyOCwgMHgwNCwgMHg3ZSwgMHgyNywgMHgwMSwgMHhhNywgMHg3ZSwgCisgICAgMHgzNywgMHgwMSwgMHg4NywgMHg5ZCwgMHgzMiwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHg0MCwgMHg3YSwgMHgwNSwgMHg0MCwgMHg3YSwgMHgzNywgMHgwMSwgCisgICAgMHg4NywgMHg3ZSwgMHgzNywgMHgwMSwgMHg2NywgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgyNCwgMHgyYywgMHgzOCwgMHgxMywgMHg3YSwgCisgICAgMHg0NywgMHgwMSwgMHg2NywgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgwMiwgCisgICAgMHg2OSwgMHhmMCwgMHg3NSwgMHgyZiwgMHg5NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg5ZSwgMHg0NCwgCisgICAgMHgyNCwgMHgyZCwgMHg5ZCwgMHgyNCwgMHgxMiwgMHg2OSwgMHhmMCwgMHg3ZSwgMHgzNCwgMHgyMCwgMHgyZCwgMHg3ZCwgMHgyNCwgMHgyZCwgMHg0MywgMHg3YSwgCisgICAgMHg0NywgMHgwMSwgMHg2NywgMHgxMiwgMHg2OSwgMHhmMCwgMHhiZSwgMHgyNSwgMHgyMCwgMHg3OCwgMHgwMywgMHgwMiwgMHg1YywgMHhmZCwgMHgyMiwgMHhkMiwgCisgICAgMHgwZiwgMHg3ZSwgMHgwNCwgMHgyMCwgMHgyZCwgMHg3YSwgMHgwNywgMHgwMSwgMHg2NywgMHg3YSwgMHgwNywgMHgwMSwgMHg3NywgMHg3NSwgMHgyZiwgMHg5NCwgCisgICAgMHgxMiwgMHg3MywgMHgzNSwgMHg3NSwgMHgyZiwgMHgwMCwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMiwgMHg3NSwgMHgyZiwgMHg5MiwgMHgxMiwgMHg3MywgMHgzNSwgCisgICAgMHhkMiwgMHgwNCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHg4MiwgMHhkYSwgMHhiOCwgMHg3OCwgMHg2OCwgMHg3ZSwgMHgzNywgCisgICAgMHgwMSwgMHhjYiwgMHg3ZSwgMHgyNywgMHgwMSwgMHhiNywgMHgyZSwgMHgyNCwgMHgwMCwgMHgwMiwgMHgyZCwgMHgzMiwgMHhiZSwgMHgzNCwgMHgwNCwgMHgwMCwgCisgICAgMHgzOCwgMHgzNCwgMHg3ZCwgMHgwMiwgMHgyZSwgMHgwNSwgMHgzMCwgMHg3YSwgMHgwNSwgMHgzMCwgMHg3YSwgMHgzNywgMHgwMSwgMHhjYiwgMHg3ZSwgMHgzNywgCisgICAgMHgwMSwgMHhjOSwgMHg3ZCwgMHg0MywgMHgyZCwgMHg0MiwgMHhiZSwgMHg0NCwgMHgyOCwgMHgyYywgMHgzOCwgMHgzYywgMHg3YSwgMHg0NywgMHgwMSwgMHhjOSwgCisgICAgMHg3ZSwgMHgyNCwgMHgwNywgMHgwMCwgMHgyZSwgMHgyNywgMHgwMSwgMHhiNywgMHgxYiwgMHgzOCwgMHgyMCwgMHgwYiwgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgCisgICAgMHgxMiwgMHg3MywgMHgzNSwgMHgwMiwgMHg2YSwgMHg2MywgMHg3NSwgMHgyZiwgMHg5OSwgMHgxMiwgMHg3MywgMHgzNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgwNCwgCisgICAgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzZiwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHg1NCwgMHhmZSwgMHgxOSwgCisgICAgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxNywgMHgyMiwgMHg4MCwgMHg3ZiwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg5ZSwgMHg0NCwgCisgICAgMHgyOCwgMHgyZCwgMHg5ZCwgMHgyNCwgMHg3ZSwgMHg2NCwgMHgwNywgMHgwMCwgMHgyZSwgMHg2NywgMHgwMSwgMHhiNywgMHg5ZSwgMHgyNCwgMHgwMCwgMHgwMiwgCisgICAgMHg0MCwgMHgxNywgMHgxYiwgMHgzOCwgMHg2MCwgMHgwYiwgMHgzNSwgMHgxMiwgMHg2YSwgMHg2MywgMHg3ZSwgMHgzNCwgMHgyNCwgMHgyZCwgMHg3ZCwgMHgyNCwgCisgICAgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhjOSwgMHgwMiwgMHg2YSwgMHg2MywgMHg3YSwgMHgzOSwgMHhjMCwgMHg3ZSwgMHgzNCwgMHgyNCwgMHgyZCwgCisgICAgMHg3YSwgMHgzOSwgMHhkMCwgMHgwYiwgMHgzNCwgMHgxYiwgMHg0NCwgMHg4MCwgMHhlNSwgMHg5ZCwgMHgzMiwgMHg3YywgMHhiNiwgMHg1NCwgMHgwZiwgMHgyMywgCisgICAgMHgyMywgMHgyMywgMHg0NCwgMHgwNywgMHg3YSwgMHg2OSwgMHhiMCwgMHg3YSwgMHg3OSwgMHg3MCwgMHgwYiwgMHgzNSwgMHg3NSwgMHgyZiwgMHg5MywgMHgxMiwgCisgICAgMHg3MywgMHgzNSwgMHg3YSwgMHg3MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHhiZCwgMHgwNCwgMHg2OCwgMHgyYiwgMHg3YSwgMHgwNywgMHgwMSwgMHhjOSwgCisgICAgMHg3ZSwgMHg0NywgMHgwMSwgMHhjYiwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhjYiwgMHgyZSwgMHgzNSwgMHgzMCwgMHg3YSwgMHgzNSwgMHgzMCwgCisgICAgMHgyMiwgMHhkMiwgMHgwNCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHgxMywgMHgyMiwgMHg3ZSwgMHgwNCwgMHgyNCwgMHgyZCwgMHg4MCwgCisgICAgMHgyOCwgMHg3ZSwgMHgwNCwgMHgyNCwgMHgyZCwgMHg4MCwgMHgyYSwgMHg3ZSwgMHgwNCwgMHgyNCwgMHgyZCwgMHg4MCwgMHhjZiwgMHg3ZSwgMHgwNywgMHgwMSwgCisgICAgMHhjYiwgMHg3ZSwgMHgyNCwgMHgwMywgMHhmZSwgMHg5ZCwgMHgyMCwgMHgyOCwgMHg0MCwgMHg3ZSwgMHgwNywgMHgwMSwgMHhjOSwgMHg3ZSwgMHg0NCwgMHgyOCwgCisgICAgMHgyZCwgMHg3ZCwgMHg2MCwgMHgwYiwgMHgwNCwgMHhiZCwgMHgwNCwgMHg2OCwgMHhkMiwgMHg3ZCwgMHg3MCwgMHgwYiwgMHgwNCwgMHhiZCwgMHgwNCwgMHg2OCwgCisgICAgMHhkMCwgMHg3ZCwgMHg1NCwgMHg5ZCwgMHg1MCwgMHhiZCwgMHgyNSwgMHg0MCwgMHgwMiwgMHg3ZCwgMHgyNSwgMHg3ZCwgMHgzMiwgMHgwOSwgMHhiMSwgMHgwMCwgCisgICAgMHgxNCwgMHhjYSwgMHhiOCwgMHg1NCwgMHgxZiwgMHhiNCwgMHgwMSwgMHgzMSwgMHhkYSwgMHhiOCwgMHg3ZSwgMHgxOSwgMHhiMCwgMHg3YSwgMHgwOSwgMHhiMCwgCisgICAgMHgwYiwgMHgwNCwgMHgxYiwgMHgyNCwgMHg3OCwgMHhlNywgMHgwMiwgMHg1ZSwgMHg1OSwgMHg3NSwgMHgyZiwgMHg5OSwgMHgxMiwgMHg3MywgMHgzNSwgMHgwOSwgCisgICAgMHhiMSwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmYSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgzZiwgMHgwYSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxMCwgCisgICAgMHg1NCwgMHhmZSwgMHgxOSwgMHhiMSwgMHgwMCwgMHgxMCwgMHhkMiwgMHgxNywgMHgyMiwgMHhkYSwgMHhiOCwgMHgzMCwgMHhlMCwgMHhkOCwgMHhiZCwgMHgzMiwgCisgICAgMHg2OCwgMHgwNywgMHhjYSwgMHhiOCwgMHgxMiwgMHg1ZSwgMHg1OSwgMHhkYSwgMHhiOCwgMHgwMiwgMHg1ZiwgMHg4MCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgCisgICAgMHg3ZSwgMHhhMCwgMHg4OCwgMHg3NSwgMHgyZiwgMHg5MCwgMHgxMiwgMHg3MywgMHgzNSwgMHhmNSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHhhNSwgMHhmZCwgCisgICAgMHg1ZSwgMHg1MCwgMHgwYSwgMHg2OCwgMHgxZCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1ZiwgMHg4MCwgMHgwMiwgCisgICAgMHhjMiwgMHg1ZiwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1NywgMHg4MCwgMHgwMiwgMHhjMiwgMHg1NywgMHgxMiwgCisgICAgMHg0MywgMHg1ZSwgMHgwMiwgMHg2MSwgMHgxMywgMHg3NSwgMHgyZiwgMHg5MSwgMHgxMiwgMHg3MywgMHgzNSwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxNCwgMHg3YSwgCisgICAgMHhiMSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMCwgMHhlMCwgMHgwOCwgMHhkMiwgMHgwNCwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgwMiwgMHg2MSwgMHgxMywgCisgICAgMHhkMiwgMHgwNCwgMHgzMCwgMHhlMSwgMHgwNiwgMHg3ZSwgMHhhMCwgMHg4MCwgMHgxMiwgMHg2MSwgMHgxMywgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxYywgCisgICAgMHhkYSwgMHhiOCwgMHg2OCwgMHgxMiwgMHg3ZSwgMHhhMCwgMHhjMCwgMHgwOSwgMHg2MSwgMHgwMCwgMHgwMCwgMHgxMiwgMHg2MSwgMHgzNiwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgxNCwgMHgyMCwgMHhlMCwgMHhkYiwgMHgyMiwgMHgwMiwgMHg1ZSwgMHhhZCwgMHg3NSwgMHgyZiwgMHg5NSwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMiwgCisgICAgMHg3NSwgMHgyZiwgMHg5NiwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMiwgMHg3YywgMHgwMiwgMHg3ZSwgMHgxNCwgMHg4MCwgMHgwMCwgMHg0YywgMHgyMCwgMHgwOSwgCisgICAgMHhiMSwgMHgwMCwgMHgxOCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1OCwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1OCwgCisgICAgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1MCwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1MCwgMHgwMiwgMHg2MCwgMHhmZiwgCisgICAgMHg3YywgMHgwMiwgMHg3ZSwgMHgxNCwgMHg4MCwgMHgwMCwgMHg0YywgMHgyMCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgCisgICAgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1OSwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1OSwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgCisgICAgMHhkMiwgMHg1MSwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1MSwgMHgwMiwgMHg2MCwgMHhmZiwgMHg3YywgMHgwMiwgMHg3ZSwgMHgxNCwgMHg4MCwgMHgwMCwgMHg0YywgCisgICAgMHgyMCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1YSwgMHg4MCwgMHgwMiwgCisgICAgMHhjMiwgMHg1YSwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1MiwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1MiwgMHgwMiwgCisgICAgMHg2MCwgMHhmZiwgMHg3YywgMHgwMiwgMHg3ZSwgMHgxNCwgMHg4MCwgMHgwMCwgMHg0YywgMHgyMCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHhhNSwgMHhmZCwgCisgICAgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1YiwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1YiwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgCisgICAgMHg2OCwgMHgwNCwgMHhkMiwgMHg1MywgMHg4MCwgMHgwMiwgMHhjMiwgMHg1MywgMHgwMiwgMHg2MCwgMHhmZiwgMHg3YywgMHgwMiwgMHg3ZSwgMHgxNCwgMHg4MCwgCisgICAgMHgwMCwgMHg0YywgMHgyMCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1YywgCisgICAgMHg4MCwgMHgwMiwgMHhjMiwgMHg1YywgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1NCwgMHg4MCwgMHgwMiwgMHhjMiwgCisgICAgMHg1NCwgMHgwMiwgMHg2MCwgMHhmZiwgMHg3YywgMHgwMiwgMHg3ZSwgMHgxNCwgMHg4MCwgMHgwMCwgMHg0YywgMHgyMCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgCisgICAgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1ZCwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1ZCwgMHhhNSwgMHhmZCwgMHg1ZSwgCisgICAgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1NSwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1NSwgMHgwMiwgMHg2MCwgMHhmZiwgMHg3YywgMHgwMiwgMHg3ZSwgCisgICAgMHgxNCwgMHg4MCwgMHgwMCwgMHg0YywgMHgyMCwgMHgwOSwgMHhiMSwgMHgwMCwgMHgxOCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgCisgICAgMHhkMiwgMHg1ZSwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1ZSwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1NiwgMHg4MCwgCisgICAgMHgwMiwgMHhjMiwgMHg1NiwgMHgwMiwgMHg2MCwgMHhmZiwgMHg3YywgMHgwMiwgMHg3ZSwgMHgxNCwgMHg4MCwgMHgwMCwgMHg0YywgMHgyMCwgMHgwOSwgMHhiMSwgCisgICAgMHgwMCwgMHgxOCwgMHhhNSwgMHhmZCwgMHg1ZSwgMHg1MCwgMHgyMCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1ZiwgMHg4MCwgMHgwMiwgMHhjMiwgMHg1ZiwgMHhhNSwgCisgICAgMHhmZCwgMHg1ZSwgMHg1MCwgMHg4MCwgMHg2OCwgMHgwNCwgMHhkMiwgMHg1NywgMHg4MCwgMHgwMiwgMHhjMiwgMHg1NywgMHgwMiwgMHg2MCwgMHhmZiwgMHg1NCwgCisgICAgMHhmMCwgMHhjNCwgMHhhNSwgMHhmZiwgMHhjNCwgMHhhNSwgMHg0ZiwgMHg3NSwgMHgyZiwgMHg5MCwgMHgxMiwgMHg3MywgMHgzNSwgMHhmNSwgMHgyZiwgMHgxMiwgCisgICAgMHg3MywgMHgzNSwgMHgyMiwgMHhjYSwgMHgxOSwgMHg1ZSwgMHgyMCwgMHgwNywgMHg0YywgMHhhMiwgMHg3ZSwgMHg3NCwgMHgyYywgMHgyZCwgMHhjYSwgMHg3OSwgCisgICAgMHg3YSwgMHg3OSwgMHhhMCwgMHgwYiwgMHg3NCwgMHg3YSwgMHg3OSwgMHhiMCwgMHgwYiwgMHg3NCwgMHhkYSwgMHg3OSwgMHg3ZSwgMHgzMCwgMHgwMiwgMHg3ZSwgCisgICAgMHg2NCwgMHgwMCwgMHgwMiwgMHgwMiwgMHg2MSwgMHg1ZSwgMHhjYSwgMHgxOSwgMHg1ZSwgMHgyMCwgMHgwNywgMHg0YywgMHhhMiwgMHg3ZSwgMHg3NCwgMHgyYywgCisgICAgMHgyZCwgMHhjYSwgMHg3OSwgMHg3YSwgMHg3OSwgMHhhMCwgMHgwYiwgMHg3NCwgMHg3YSwgMHg3OSwgMHhiMCwgMHgwYiwgMHg3NCwgMHg3YSwgMHg3OSwgMHg2MCwgCisgICAgMHgwYiwgMHg3NCwgMHhkYSwgMHg3OSwgMHg3ZSwgMHgzMCwgMHgwMywgMHg3ZSwgMHg2NCwgMHgwMCwgMHgwMywgMHgwMiwgMHg2MSwgMHg1ZSwgMHhkMiwgMHgwNCwgCisgICAgMHg3ZSwgMHgyNywgMHgwMSwgMHhjYiwgMHgyZCwgMHgyNiwgMHhiZSwgMHgyNCwgMHgwNCwgMHgwMCwgMHgzOCwgMHgyZSwgMHg3ZSwgMHgwNywgMHgwMSwgMHhjOSwgCisgICAgMHg3ZSwgMHg0NCwgMHgyOCwgMHgyZCwgMHg3ZSwgMHg3OSwgMHhhMCwgMHg3YSwgMHgwOSwgMHhhMCwgMHgwYiwgMHgwNCwgMHgwYiwgMHg3NCwgMHhiZCwgMHgwNCwgCisgICAgMHg2OCwgMHgyMywgMHhhNSwgMHhkYiwgMHhlZiwgMHg3YSwgMHgyNywgMHgwMSwgMHhjYiwgMHg3ZSwgMHgyNSwgMHgzMCwgMHgyZCwgMHgyNiwgMHg3YSwgMHgyNSwgCisgICAgMHgzMCwgMHg3YSwgMHgwNywgMHgwMSwgMHhjOSwgMHhkYSwgMHgxOSwgMHhjMiwgMHhkNywgMHgyMiwgMHg3NSwgMHgyZiwgMHg5YSwgMHgxMiwgMHg3MywgMHgzNSwgCisgICAgMHhkYSwgMHgxOSwgMHhkMiwgMHhkNywgMHgyMiwgMHg3ZSwgMHgwNCwgMHgyNCwgMHgyZCwgMHg4MCwgMHhkNywgMHg0OCwgMHhmMSwgMHg0NiwgMHg2NSwgMHg0NywgCisgICAgMHg1ZiwgMHg0OSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0OCwgMHg1NiwgMHg0NSwgMHgyYSwgMHg0OSwgMHg2ZSwgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0OSwgMHg3NSwgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0YywgMHgxZSwgMHg0OSwgMHg5MiwgMHg0YSwgCisgICAgMHg4YywgMHg0YywgMHg1NywgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0YiwgMHg4MywgMHg0NSwgMHgyYSwgMHg0YywgMHg5YiwgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0YywgMHhhMiwgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0ZiwgMHg0YiwgMHg0YywgMHhiZiwgMHg0ZCwgCisgICAgMHhiOSwgMHg0ZiwgMHg4NCwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0ZSwgMHhiMCwgMHg0NSwgMHgyYSwgMHg0ZiwgMHhjOCwgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0ZiwgMHhjZiwgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg1MiwgMHg3OCwgMHg0ZiwgMHhlYywgMHg1MCwgCisgICAgMHhlNiwgMHg1MiwgMHhiMSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg1MSwgMHhkZCwgMHg0NSwgMHgyYSwgMHg1MiwgMHhmNSwgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg1MiwgMHhmYywgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg1NSwgMHhhNSwgMHg1MywgMHgxOSwgMHg1NCwgCisgICAgMHgxMywgMHg1NSwgMHhkZSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg1NSwgMHgwYSwgMHg0NSwgMHgyYSwgMHg1NiwgMHgyMiwgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg1NiwgMHgyOSwgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg1OCwgMHhkMiwgMHg1NiwgMHg0NiwgMHg1NywgCisgICAgMHg0MCwgMHg1OSwgMHgwYiwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg1OCwgMHgzNywgMHg0NSwgMHgyYSwgMHg1OSwgMHg0ZiwgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg1OSwgMHg1NiwgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg1YiwgMHhmZiwgMHg1OSwgMHg3MywgMHg1YSwgCisgICAgMHg2ZCwgMHg1YywgMHgzOCwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg1YiwgMHg2NCwgMHg0NSwgMHgyYSwgMHg1YywgMHg3YywgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg1YywgMHg4MywgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg1ZiwgMHgyYywgMHg1YywgMHhhMCwgMHg1ZCwgCisgICAgMHg5YSwgMHg1ZiwgMHg2NSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg1ZSwgMHg5MSwgMHg0NSwgMHgyYSwgMHg1ZiwgMHhhOSwgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg1ZiwgMHhiMCwgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgCisgICAgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHg0NSwgMHgyYSwgMHhjYSwgMHhiOCwgMHg3NSwgMHgyZiwgMHgwMiwgCisgICAgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHhiMywgMHg5MSwgMHgwMywgMHgyMCwgMHhlNSwgMHgyMCwgMHgzMCwgMHhlMCwgMHgwNSwgMHgxMiwgMHg2YiwgMHgwNSwgCisgICAgMHg4MCwgMHgzMCwgMHgzMCwgMHhlMSwgMHgwNSwgMHgxMiwgMHg2NCwgMHg4NiwgMHg4MCwgMHgyOCwgMHgzMCwgMHhlMiwgMHgwNSwgMHgxMiwgMHg2MywgMHhmNSwgCisgICAgMHg4MCwgMHgyMCwgMHgzMCwgMHhlMywgMHgxZCwgMHgxMiwgMHg2NSwgMHg2MSwgMHg4MCwgMHgxOCwgMHg3ZSwgMHhiMywgMHg5MSwgMHgwNCwgMHgzMCwgMHhlMSwgCisgICAgMHgwMywgMHgwMiwgMHg2NywgMHg1ZiwgMHgzMCwgMHhlNiwgMHgwNSwgMHgxMiwgMHg2YywgMHg2YSwgMHg4MCwgMHgwNiwgMHgyMCwgMHhlMiwgMHgwMywgMHgwMiwgCisgICAgMHgwMCwgMHg4MCwgMHhkYSwgMHhiOCwgMHgzMiwgMHg3NSwgMHgyZiwgMHgxMCwgMHgxMiwgMHg3MywgMHgzNSwgMHhjYSwgMHgwYiwgMHhjYSwgMHgzOSwgMHhjYSwgCisgICAgMHg1OSwgMHg3NCwgMHg0MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3ZSwgMHhiMywgMHg5MSwgMHgxYSwgMHg2YywgMHhhYSwgMHhiZSwgMHhiMCwgMHg0MCwgCisgICAgMHgyOCwgMHgwYSwgMHgxMiwgMHg2NCwgMHgyNCwgMHhkYSwgMHg1OSwgMHhkYSwgMHgzOSwgMHhkYSwgMHgwYiwgMHgyMiwgMHg3NCwgMHgyMCwgMHg3YSwgMHhiMywgCisgICAgMHg5MSwgMHgxNCwgMHg4MCwgMHhmMSwgMHg3ZSwgMHgzNywgMHgwMSwgMHhjNSwgMHgyZCwgMHgzNSwgMHhiZSwgMHgzNCwgMHgwNCwgMHgwMCwgMHgzOCwgMHgyZiwgCisgICAgMHg3YSwgMHgzNywgMHgwMSwgMHhjNSwgMHg3ZSwgMHgzNywgMHgwMSwgMHhjMywgMHg3ZCwgMHg0MywgMHgyZCwgMHg0NSwgMHhiZSwgMHg0NCwgMHgyYywgMHgyYywgCisgICAgMHgzOCwgMHgyNSwgMHg3YSwgMHg0NywgMHgwMSwgMHhjMywgMHg3NSwgMHgyZiwgMHgxMSwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHhiMSwgMHgyZiwgMHgxMiwgCisgICAgMHg3MywgMHgzNSwgMHgxMiwgMHg2NywgMHg5ZiwgMHg3NCwgMHgyMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxNCwgMHgxMiwgMHg2NiwgMHgzMCwgMHgyMiwgMHg3NSwgCisgICAgMHgyZiwgMHgxNiwgMHgxMiwgMHg3MywgMHgzNSwgMHg4MCwgMHhmNCwgMHg3NSwgMHgyZiwgMHgxMiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHhiMSwgMHgyZiwgCisgICAgMHgxMiwgMHg3MywgMHgzNSwgMHg5ZSwgMHg0NCwgMHgyYywgMHgyZCwgMHg5ZCwgMHg1NCwgMHgxMiwgMHg2NywgMHg5ZiwgMHg3ZSwgMHgzNCwgMHgyOCwgMHgyZCwgCisgICAgMHg3ZCwgMHg1NCwgMHgyZCwgMHg0MywgMHg4MCwgMHhiYywgMHg3NSwgMHgyZiwgMHgxOCwgMHgxMiwgMHg3MywgMHgzNSwgMHhjYSwgMHgwOSwgMHhjYSwgMHgzOSwgCisgICAgMHhjYSwgMHgyYiwgMHg3NCwgMHgyMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3ZSwgMHg2MywgMHg5MSwgMHgxYSwgMHg3NCwgMHgxMCwgMHg3YSwgMHhiMywgCisgICAgMHg5MSwgMHgxNCwgMHg3ZSwgMHhiMCwgMHg4MCwgMHg5YywgMHhiNiwgMHg2MCwgMHgzOCwgMHg2YywgMHhhYSwgMHg3ZSwgMHgzNywgMHgwMSwgMHhjYiwgMHg5ZCwgCisgICAgMHgzNSwgMHg0MCwgMHgzNywgMHg3YSwgMHgzNywgMHgwMSwgMHhjYiwgMHg3ZSwgMHgzNywgMHgwMSwgMHhjNywgMHg3ZCwgMHg0MywgMHgyZCwgMHg0NSwgMHhiZSwgCisgICAgMHg0NCwgMHgyOCwgMHgyYywgMHgzOCwgMHgzYiwgMHg3YSwgMHg0NywgMHgwMSwgMHhjNywgMHg3ZCwgMHg0NSwgMHgxMiwgMHg2OCwgMHhkNCwgMHg3ZSwgMHhiMywgCisgICAgMHg5MSwgMHgxZSwgMHgyMCwgMHhlNSwgMHgxMywgMHg3NSwgMHgyZiwgMHgxOSwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg5MSwgMHgyZiwgMHgxMiwgMHg3MywgCisgICAgMHgzNSwgMHhkYSwgMHgyYiwgMHhkYSwgMHgzOSwgMHhkYSwgMHgwOSwgMHgyMiwgMHg4MCwgMHgzNCwgMHgyZCwgMHg1MywgMHg2ZCwgMHgzMywgMHg2MCwgMHgwMiwgCisgICAgMHg4MCwgMHhjMSwgMHg3ZSwgMHgwNCwgMHgyNCwgMHgyZCwgMHg3YSwgMHgwNywgMHgwMSwgMHhjOSwgMHg3YSwgMHgwNywgMHgwMSwgMHhjNywgMHg4MCwgMHhlMSwgCisgICAgMHhjYSwgMHg1OSwgMHg5ZSwgMHg0NCwgMHgyOCwgMHgyZCwgMHg5ZCwgMHg1NCwgMHgxMiwgMHg2OCwgMHhkNCwgMHg3ZSwgMHgzNCwgMHgyNCwgMHgyZCwgMHg3ZCwgCisgICAgMHg1NCwgMHgyZCwgMHg0MywgMHg3YSwgMHg0NywgMHgwMSwgMHhjNywgMHgxMiwgMHg2OCwgMHhkNCwgMHhkYSwgMHg0OSwgMHg4MCwgMHhiMCwgMHg3ZSwgMHgwZiwgCisgICAgMHgyYywgMHgzZSwgMHgwYiwgMHgwYywgMHg3YSwgMHgwZiwgMHgyYywgMHgzZSwgMHg3NCwgMHgyMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxZSwgMHg3NCwgMHg2MCwgCisgICAgMHg3YSwgMHhiMywgMHg5MSwgMHgxYywgMHg3NCwgMHgwMiwgMHg3YSwgMHhiMywgMHg5MSwgMHgxMiwgMHg4MCwgMHhhNSwgMHg3ZSwgMHgyZiwgMHgyYywgMHg1ZSwgCisgICAgMHgwYiwgMHgyYywgMHg3YSwgMHgyZiwgMHgyYywgMHg1ZSwgMHg3NCwgMHgyMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxZSwgMHg3NCwgMHg2MCwgMHg3YSwgMHhiMywgCisgICAgMHg5MSwgMHgxYywgMHg3NCwgMHgwMiwgMHg3YSwgMHhiMywgMHg5MSwgMHgxMiwgMHg4MCwgMHgxZiwgMHhkYSwgMHgyYiwgMHhkYSwgMHgxYiwgMHhkYSwgMHgwYiwgCisgICAgMHgyMiwgMHg3NSwgMHgyZiwgMHgyOCwgMHgxMiwgMHg3MywgMHgzNSwgMHhjYSwgMHgwYiwgMHhjYSwgMHgxYiwgMHhjYSwgMHgyYiwgMHg3NCwgMHg2MCwgMHg3YSwgCisgICAgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHgxMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxNCwgMHg3ZSwgMHhiMywgMHg5MSwgMHgxYSwgMHg3MCwgMHhkYiwgMHg3ZSwgCisgICAgMHgwZCwgMHgzMCwgMHg3ZSwgMHgxZCwgMHgzNCwgMHg3ZSwgMHgyZCwgMHgzOCwgMHg3ZSwgMHgzZCwgMHgzYywgMHg3ZSwgMHg4NSwgMHg0MCwgMHg3ZCwgMHg5MCwgCisgICAgMHg0ZCwgMHg5MSwgMHg0ZCwgMHg5MiwgMHg0ZCwgMHg5MywgMHg0ZCwgMHg5NCwgMHg0ZCwgMHg5NSwgMHg0ZCwgMHg5NiwgMHg0ZCwgMHg5NywgMHg0ZCwgMHg5OCwgCisgICAgMHg2OCwgMHhiOCwgMHg3YSwgMHgxMywgMHg5MSwgMHgxNywgMHg3YSwgMHgwMywgMHg5MSwgMHgxNywgMHg3YSwgMHgzMywgMHg5MSwgMHgxNywgMHg3YSwgMHgyMywgCisgICAgMHg5MSwgMHgxNywgMHg3YSwgMHg1MywgMHg5MSwgMHgxNywgMHg3YSwgMHg0MywgMHg5MSwgMHgxNywgMHg3YSwgMHg3MywgMHg5MSwgMHgxNywgMHg3YSwgMHg2MywgCisgICAgMHg5MSwgMHgxNywgMHg3YSwgMHg5MywgMHg5MSwgMHgxNywgMHg3YSwgMHg4MywgMHg5MSwgMHgxNywgMHgzMCwgMHg3MywgMHgyMiwgMHg3YSwgMHhiMywgMHg5MSwgCisgICAgMHgxNywgMHg3YSwgMHhhMywgMHg5MSwgMHgxNywgMHg3YSwgMHhkMywgMHg5MSwgMHgxNywgMHg3YSwgMHhjMywgMHg5MSwgMHgxNywgMHg3YSwgMHhmMywgMHg5MSwgCisgICAgMHgxNywgMHg3YSwgMHhlMywgMHg5MSwgMHgxNywgMHg3ZCwgMHg3OCwgMHg3YSwgMHhmMywgMHg5MSwgMHgxNywgMHg3YSwgMHhlMywgMHg5MSwgMHgxNywgMHg3ZSwgCisgICAgMHhiMywgMHg5MSwgMHgxZSwgMHgzMCwgMHhlNSwgMHgwMywgMHgwMiwgMHg2NSwgMHgzYywgMHg3NSwgMHgyZiwgMHgyOSwgMHgxMiwgMHg3MywgMHgzNSwgMHgyMCwgCisgICAgMHg3MywgMHgwOCwgMHg3NSwgMHgyZiwgMHgwYSwgMHgxMiwgMHg3MywgMHgzNSwgMHg4MCwgMHgwNiwgMHg3NSwgMHgyZiwgMHgxMiwgMHgxMiwgMHg3MywgMHgzNSwgCisgICAgMHg3NCwgMHg4MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxZSwgMHg2ZCwgMHgwMCwgMHg3ZCwgMHgxMCwgMHg3YSwgMHgwZCwgMHgzMCwgMHg3YSwgMHgwZCwgMHgzNCwgCisgICAgMHg3YSwgMHgwZCwgMHgzOCwgMHg3YSwgMHgwZCwgMHgzYywgMHg3YSwgMHgwNSwgMHg0MCwgMHhkYSwgMHgyYiwgMHhkYSwgMHgxYiwgMHhkYSwgMHgwYiwgMHgyMiwgCisgICAgMHg3ZSwgMHgzNywgMHgwMSwgMHhjNSwgMHg0ZCwgMHgzMywgMHg2OCwgMHgzYiwgMHg3ZSwgMHgwNywgMHgwMSwgMHhjMSwgMHg3ZSwgMHg1NCwgMHgyYywgMHgyZCwgCisgICAgMHg5ZCwgMHg1MCwgMHhiZCwgMHgzNSwgMHg0MCwgMHgwMiwgMHg3ZCwgMHgzNSwgMHhjYSwgMHgzOSwgMHg3ZSwgMHg2NSwgMHg0YiwgMHg5OSwgMHg2NCwgMHhkYSwgCisgICAgMHgzOSwgMHg3ZSwgMHgwNywgMHgwMSwgMHhjNSwgMHg5ZCwgMHgwMywgMHg3YSwgMHgwNywgMHgwMSwgMHhjNSwgMHgyZSwgMHgzNywgMHgwMSwgMHhjMSwgMHg3YSwgCisgICAgMHgzNywgMHgwMSwgMHhjMSwgMHhiZSwgMHgzNCwgMHgyYywgMHgyYywgMHgyOCwgMHhjNywgMHg3ZSwgMHgzNCwgMHgyOCwgMHgyZCwgMHg3YSwgMHgzNywgMHgwMSwgCisgICAgMHhjMSwgMHg4MCwgMHhiZCwgMHgyMiwgMHg3NSwgMHgyZiwgMHg1MywgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHgxNSwgMHg0ZCwgMHg4MCwgMHgxMSwgMHg3NSwgCisgICAgMHgyZiwgMHg1MSwgMHgxMiwgMHg3MywgMHgzNSwgMHgwYiwgMHgwOCwgMHgxMCwgMHgwYiwgMHgwNSwgMHg5ZSwgMHgzNCwgMHgwMCwgMHgwMiwgMHgyOCwgMHg0ZCwgCisgICAgMHg3YywgMHhiMiwgMHgyMCwgMHhlNywgMHgyNywgMHg1NCwgMHgwNywgMHgyMywgMHgwYSwgMHgyYiwgMHg0OSwgMHgyMiwgMHgzOSwgMHgxZSwgMHg3YywgMHhiMiwgCisgICAgMHg1NCwgMHg3OCwgMHgwMywgMHgwMywgMHgwMywgMHg3YywgMHgyYiwgMHg5ZCwgMHgxMywgMHg0MCwgMHgxYSwgMHg2OCwgMHgxMiwgMHg3YSwgMHgxNSwgMHg0ZCwgCisgICAgMHg3YSwgMHgyNSwgMHg0ZiwgMHg3ZSwgMHg2NCwgMHg2NywgMHgwOSwgMHg3YSwgMHg2NSwgMHg0YiwgMHg4OSwgMHgyNCwgMHgwMiwgMHg2NywgMHgxNywgMHg3ZSwgCisgICAgMHg2NCwgMHg2NiwgMHg3ZiwgMHg4MCwgMHhmMiwgMHgyZCwgMHgxMywgMHg5ZCwgMHgzMSwgMHhjYSwgMHgzOSwgMHg3ZCwgMHgzMSwgMHgyZCwgMHgxMCwgMHhjYSwgCisgICAgMHgxOSwgMHhjYSwgMHgyOSwgMHg5OSwgMHgyNCwgMHhkYSwgMHgyOSwgMHhkYSwgMHgwOSwgMHhkYSwgMHgzOSwgMHg4MCwgMHhhMiwgMHg3YSwgMHgxNSwgMHg0ZCwgCisgICAgMHg3ZSwgMHg2NCwgMHg2NiwgMHhmNSwgMHg0ZCwgMHgzMywgMHg3OCwgMHgwOSwgMHg3YywgMHhiMiwgMHgyMCwgMHhlNywgMHgyYSwgMHg3ZSwgMHg2NCwgMHg2NiwgCisgICAgMHg3NCwgMHg3YSwgMHg2NSwgMHg0YiwgMHgyMiwgMHg3NSwgMHgyZiwgMHg1MiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHgyMSwgMHg0ZCwgMHg3ZSwgMHgwOSwgCisgICAgMHgzMCwgMHgwYiwgMHgwNCwgMHgxYiwgMHgzNCwgMHg3OCwgMHg4OSwgMHg4MCwgMHhkNCwgMHg3NSwgMHgyZiwgMHg1NCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgCisgICAgMHgxNSwgMHg0ZCwgMHg3ZSwgMHgyNSwgMHg0ZiwgMHg4MCwgMHg5MCwgMHg1ZSwgMHgyMCwgMHgwNywgMHg1NCwgMHg3OCwgMHg3ZSwgMHg0NCwgMHg2NywgMHg3ZCwgCisgICAgMHgzMCwgMHhlNiwgMHgxNiwgMHg0ZCwgMHgzMywgMHg2OCwgMHgyNiwgMHgxYiwgMHgzNCwgMHg3ZSwgMHgwOSwgMHg0MCwgMHgwYiwgMHgwNCwgMHg3ZSwgMHg0NCwgCisgICAgMHgzNCwgMHhmYSwgMHgyMCwgMHhlMywgMHgwNCwgMHg3ZSwgMHg0NCwgMHg2NywgMHg4NSwgMHhjYSwgMHgwOSwgMHhjYSwgMHgzOSwgMHg5OSwgMHg0NCwgMHhkYSwgCisgICAgMHgzOSwgMHhkYSwgMHgwOSwgMHg3ZSwgMHg2NCwgMHg2NiwgMHg3ZiwgMHg0ZCwgMHgzMywgMHg2OCwgMHhhNiwgMHg4OSwgMHg2NCwgMHg3YSwgMHgxNSwgMHg0ZCwgCisgICAgMHhmNSwgMHg0ZiwgMHg3ZSwgMHg2NCwgMHg2NywgMHg1OCwgMHg4MCwgMHg5OSwgMHg3ZSwgMHgxNSwgMHg0ZCwgMHhlNSwgMHg0ZiwgMHg4MCwgMHhjNCwgMHhjMCwgCisgICAgMHhkMCwgMHhjMCwgMHhkMSwgMHhjMCwgMHhlMCwgMHhjYSwgMHgxOSwgMHg3NSwgMHgyZiwgMHhmZSwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHgxNCwgMHgwMCwgCisgICAgMHg1MywgMHgwMiwgMHg0MCwgMHg1MiwgMHhkYSwgMHgxOSwgMHhkMCwgMHhlMCwgMHhkMCwgMHhkMSwgMHhkMCwgMHhkMCwgMHgzMiwgMHgwMywgMHhhNSwgMHhjYiwgCisgICAgMHgxOSwgMHhiMSwgMHg4MCwgMHgwMCwgMHgyMiwgMHgyMiwgMHg3ZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg3ZiwgMHhlMSwgMHg3ZSwgMHhhMCwgMHgwMiwgMHhhNCwgCisgICAgMHg3ZSwgMHgwNCwgMHg2OCwgMHhiMSwgMHg5ZCwgMHgwNSwgMHg3ZSwgMHhiMCwgMHgyOCwgMHg3YSwgMHhiMywgMHg5NSwgMHgwMCwgMHg4OSwgMHgwNCwgMHhjYSwgCisgICAgMHgyOSwgMHhiNCwgMHg4MCwgMHhlMiwgMHg3ZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg3ZiwgMHhlMSwgMHg3ZSwgMHgwMCwgMHgyOCwgMHg3YSwgMHgwMywgMHg5NSwgCisgICAgMHgwMCwgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgCisgICAgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgCisgICAgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgCisgICAgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgCisgICAgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgCisgICAgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgCisgICAgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgCisgICAgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgCisgICAgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgCisgICAgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgCisgICAgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgCisgICAgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgCisgICAgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgCisgICAgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgCisgICAgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgCisgICAgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgCisgICAgMHhhMywgMHg3ZSwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwMywgMHg5NSwgMHgwMCwgMHhkYSwgMHgyOSwgMHgyMiwgMHg3ZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg3ZiwgCisgICAgMHhlMSwgMHg3ZSwgMHhhMCwgMHgwMiwgMHhhNCwgMHg3ZSwgMHgwNCwgMHg2OSwgMHhlNiwgMHg5ZCwgMHgwNSwgMHg3ZSwgMHhiMCwgMHgzOCwgMHg3YSwgMHhiMywgCisgICAgMHg5NSwgMHgwMCwgMHg4OSwgMHgwNCwgMHhjYSwgMHgyOSwgMHhiNCwgMHg4MCwgMHhlMiwgMHg3ZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg3ZiwgMHhlMSwgMHg3ZSwgCisgICAgMHgwMCwgMHgzOCwgMHg3YSwgMHgwMywgMHg5NSwgMHgwMCwgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgCisgICAgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgCisgICAgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgCisgICAgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgCisgICAgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgCisgICAgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgCisgICAgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgCisgICAgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgCisgICAgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgCisgICAgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgCisgICAgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgCisgICAgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgCisgICAgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgCisgICAgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgCisgICAgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgCisgICAgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgCisgICAgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHg3ZSwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwMywgMHg5NSwgMHgwMCwgMHhkYSwgMHgyOSwgMHgyMiwgCisgICAgMHhjYSwgMHgyOSwgMHhjYSwgMHgxOSwgMHhjYSwgMHg1OCwgMHg3ZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg3ZiwgMHhlMSwgMHhkYSwgMHg1OCwgMHg3ZSwgMHg1NCwgCisgICAgMHgwMiwgMHgyMCwgMHg5YywgMHhiNSwgMHhhNCwgMHg3ZSwgMHg1MCwgMHgzMCwgMHg1ZSwgMHgyMCwgMHgwNywgMHgyYywgMHg1MiwgMHg3YSwgMHg1MywgMHg5NSwgCisgICAgMHgwMCwgMHgyZSwgMHg1NCwgMHg2YSwgMHgxNywgMHg4OSwgMHg1NCwgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgCisgICAgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgCisgICAgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgCisgICAgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgCisgICAgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHg3ZSwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwMywgMHg5NSwgMHgwMCwgMHhkYSwgMHgxOSwgCisgICAgMHhkYSwgMHgyOSwgMHgyMiwgMHhjYSwgMHgxOSwgMHhjYSwgMHg1OCwgMHg3ZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg3ZiwgMHhlMSwgMHhkYSwgMHg1OCwgMHg3ZSwgCisgICAgMHg1NCwgMHgwMiwgMHgzOCwgMHg5YywgMHhiNSwgMHhhNCwgMHg3ZSwgMHg1MCwgMHgyMCwgMHg1ZSwgMHgyMCwgMHgwNywgMHgyYywgMHg1MiwgMHg3YSwgMHg1MywgCisgICAgMHg5NSwgMHgwMCwgMHgyZSwgMHg1NCwgMHg2YSwgMHg4OCwgMHg4OSwgMHg1NCwgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgCisgICAgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgCisgICAgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgCisgICAgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgCisgICAgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgCisgICAgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgCisgICAgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgCisgICAgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHhhMywgMHg3ZSwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwMywgMHg5NSwgMHgwMCwgMHhkYSwgCisgICAgMHgxOSwgMHgyMiwgMHgwMiwgMHg2YiwgMHhhOCwgMHhjYSwgMHgwYiwgMHhjYSwgMHgxYiwgMHhjYSwgMHgyYiwgMHhjYSwgMHgzYiwgMHhjYSwgMHg0YiwgMHhjYSwgCisgICAgMHg1YiwgMHhjYSwgMHg2YiwgMHhjYSwgMHg3YiwgMHhjYSwgMHhlYiwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3ZSwgMHhiMywgMHgyYywgCisgICAgMHg3ZiwgMHhiNCwgMHgwMCwgMHgwMiwgMHg4MCwgMHgxYywgMHhiNCwgMHgwMSwgMHgxOSwgMHg3ZSwgMHhiMywgMHg5MSwgMHgxNCwgMHg1NCwgMHgxNCwgMHg2OCwgCisgICAgMHgwNSwgMHgxMiwgMHg2YiwgMHg2YywgMHg4MCwgMHgyMywgMHg3ZSwgMHhiMywgMHg5MSwgMHgxNCwgMHgzMCwgMHhlNSwgMHgxYywgMHgxMiwgMHg2YywgMHhhYSwgCisgICAgMHg4MCwgMHgxNywgMHg3ZSwgMHhiMywgMHg5MSwgMHgxNCwgMHgzMCwgMHhlNSwgMHgwNSwgMHgxMiwgMHg2YywgMHhhYSwgMHg4MCwgMHgwYiwgMHg3ZSwgMHhiMywgCisgICAgMHg5MSwgMHgxNCwgMHg1NCwgMHgxNCwgMHg2OCwgMHgwMywgMHgxMiwgMHg2YiwgMHg2YywgMHhkYSwgMHhlYiwgMHhkYSwgMHg3YiwgMHhkYSwgMHg2YiwgMHhkYSwgCisgICAgMHg1YiwgMHhkYSwgMHg0YiwgMHhkYSwgMHgzYiwgMHhkYSwgMHgyYiwgMHhkYSwgMHgxYiwgMHhkYSwgMHgwYiwgMHgyMiwgMHgyMCwgMHhlNCwgMHgxOSwgMHg3NSwgCisgICAgMHgyZiwgMHgwYSwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHhiMywgMHgyYywgMHg3ZSwgMHg3MCwgMHgwYSwgMHg3ZSwgMHhiMywgMHgyYywgMHg3ZiwgMHhiNCwgCisgICAgMHgwMSwgMHgxZiwgMHgwMiwgMHg2YywgMHgwNCwgMHgwMiwgMHg3MSwgMHhmMiwgMHg3NSwgMHgyZiwgMHgwYiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3NCwgMHgxNCwgCisgICAgMHg3YSwgMHhiMywgMHg5MSwgMHgxNCwgMHg3ZSwgMHhiMywgMHgyYywgMHg3ZiwgMHhiNCwgMHgwMiwgMHgwYywgMHgxMiwgMHg2YiwgMHhiNCwgMHgwMiwgMHg2YiwgCisgICAgMHhhOCwgMHg3NCwgMHgwNCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxNCwgMHgyMiwgMHg3ZSwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwMywgMHgyYywgMHg3ZiwgMHg3YSwgCisgICAgMHgwMywgMHgyYywgMHg4MCwgMHgyMiwgMHg3ZSwgMHhiMywgMHgyYywgMHg3NiwgMHg1NCwgMHg2MCwgMHg2MCwgMHgwNSwgMHhiNCwgMHg0MCwgMHgxZSwgMHg4MCwgCisgICAgMHgxYywgMHg3ZSwgMHhiMywgMHgyYywgMHg3NywgMHhiNCwgMHgwNSwgMHgxNSwgMHg3NSwgMHgyZiwgMHg3MSwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHhiMywgCisgICAgMHgyYywgMHg3OSwgMHg3ZSwgMHhhMCwgMHgwMSwgMHg3YSwgMHhhMywgMHg5MSwgMHgwNiwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNywgMHgyMiwgMHg3NCwgMHgwMCwgCisgICAgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHgxMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxMiwgMHgyMiwgMHhiZSwgMHg1NywgMHgyYywgMHg3YywgMHgyOCwgCisgICAgMHgwNCwgMHg3ZSwgMHg1NywgMHgyYywgMHg3YywgMHg3YSwgMHgwZiwgMHgyYywgMHg4MiwgMHg3YSwgMHg1NywgMHgyYywgMHg4NiwgMHg3NCwgMHgxMCwgMHg3YSwgCisgICAgMHhiMywgMHg5MSwgMHgxMiwgMHgyMiwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3ZSwgMHhiMywgMHg5MSwgMHgxYSwgMHg3MCwgMHg1MywgCisgICAgMHg3ZSwgMHhiMywgMHg5MSwgMHgxNCwgMHgyMCwgMHhlNCwgMHg0YywgMHg3ZSwgMHhlZiwgMHgyYywgMHg4MiwgMHg3ZSwgMHhmNywgMHgyYywgMHg4NiwgMHg3ZSwgCisgICAgMHgwNywgMHgyYywgMHg4NiwgMHg0ZCwgMHgwMCwgMHg2OCwgMHgyMSwgMHg3ZSwgMHgwMCwgMHgwMCwgMHhlMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxNywgMHhhMywgCisgICAgMHhhNSwgMHgwOCwgMHgxYiwgMHhmNCwgMHg2OCwgMHgwNiwgMHhhNSwgMHhiOCwgMHgxMCwgMHhmMCwgMHg4MCwgMHgxOSwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3YSwgCisgICAgMHhiMywgMHgyYywgMHg3ZiwgMHhiZSwgMHgwMCwgMHgxMCwgMHg2OCwgMHgwZCwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3YSwgMHhiMywgMHgyYywgMHg3ZiwgMHg3NCwgCisgICAgMHg4MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxZSwgMHg3YSwgMHhlZiwgMHgyYywgMHg4MiwgMHg3YSwgMHhmNywgMHgyYywgMHg4NiwgMHg3NSwgMHgyZiwgMHgwNiwgCisgICAgMHgxMiwgMHg3MywgMHgzNSwgMHg3NCwgMHgwNCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxNCwgMHgyMiwgMHhjYSwgMHgwYiwgMHhjYSwgMHgxYiwgMHhjYSwgMHgyYiwgCisgICAgMHhjYSwgMHgzYiwgMHhjYSwgMHg0YiwgMHhjYSwgMHg1YiwgMHhjYSwgMHg2YiwgMHhjYSwgMHg3YiwgMHhjYSwgMHhlYiwgMHg3NSwgMHgyZiwgMHgwMywgMHgxMiwgCisgICAgMHg3MywgMHgzNSwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHgyYywgMHg3ZSwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMSwgCisgICAgMHg3YSwgMHhiMywgMHg5MSwgMHgxMiwgMHgxMiwgMHg2ZCwgMHgxOSwgMHhkYSwgMHhlYiwgMHhkYSwgMHg3YiwgMHhkYSwgMHg2YiwgMHhkYSwgMHg1YiwgMHhkYSwgCisgICAgMHg0YiwgMHhkYSwgMHgzYiwgMHhkYSwgMHgyYiwgMHhkYSwgMHgxYiwgMHhkYSwgMHgwYiwgMHgyMiwgMHg3NSwgMHgyZiwgMHgwMywgMHgxMiwgMHg3MywgMHgzNSwgCisgICAgMHg3ZSwgMHhiMywgMHgyYywgMHg4MCwgMHhiNCwgMHgwMiwgMHgxMSwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHgyYywgMHg4MCwgMHg3YSwgMHhiMywgMHgyYywgCisgICAgMHg3ZiwgMHg3NCwgMHgyMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxNCwgMHgyMiwgMHhiNCwgMHgwMSwgMHg0NiwgMHg3ZSwgMHhiMywgMHg5MSwgMHgwNCwgMHgyMCwgCisgICAgMHhlNiwgMHg0MiwgMHg3ZSwgMHgyMywgMHg5MSwgMHgxYSwgMHg3YywgMHgzMiwgMHg3ZSwgMHgxMywgMHgyYywgMHg4MSwgMHgyYywgMHgyMSwgMHg3YSwgMHgyMywgCisgICAgMHgyYywgMHg4MSwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwNCwgMHgyYywgMHg4OCwgMHg3ZSwgMHhiMywgMHg5MSwgMHgxNiwgMHg3YSwgMHgwOSwgMHhiMCwgCisgICAgMHgwYiwgMHgwNCwgMHhhNSwgMHhkYiwgMHhmNCwgMHg3NCwgMHgyMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxNCwgMHg3NSwgMHgyZiwgMHg3MCwgMHgxMiwgMHg3MywgCisgICAgMHgzNSwgMHg3ZSwgMHhiMywgMHgyYywgMHg4MSwgMHg3ZSwgMHhhMywgMHgyYywgMHg3ZCwgMHhiYywgMHhhYiwgMHg3OCwgMHgwMywgMHgxMiwgMHg2ZCwgMHhiOSwgCisgICAgMHgyMiwgMHgwMiwgMHg3MSwgMHhmMiwgMHhkYSwgMHg1OSwgMHgwMiwgMHg2YywgMHg3YywgMHg3NCwgMHhlMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3ZSwgCisgICAgMHgwMywgMHg5MSwgMHgxMCwgMHg3ZSwgMHgxMywgMHg5MSwgMHgxMSwgMHg3ZSwgMHgzMywgMHg5MSwgMHgxMiwgMHg3ZSwgMHgyMywgMHg5MSwgMHgxMywgMHg3ZSwgCisgICAgMHg1MywgMHg5MSwgMHgxNCwgMHg3ZSwgMHg0MywgMHg5MSwgMHgxNSwgMHg3ZSwgMHg3MywgMHg5MSwgMHgxNiwgMHg3ZSwgMHg2MywgMHg5MSwgMHgxNywgMHg3YSwgCisgICAgMHgwZiwgMHgyYywgMHg3NiwgMHg3YSwgMHgxZiwgMHgyYywgMHg3YSwgMHg3NSwgMHgyZiwgMHgwNCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHgwMSwgMHgyZiwgCisgICAgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHgxMSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHgyMSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgCisgICAgMHgzMSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg0MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg1MSwgMHgyZiwgMHgxMiwgMHg3MywgCisgICAgMHgzNSwgMHg3YSwgMHg2MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg3MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3NCwgMHgwMCwgMHg3YSwgCisgICAgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHg0MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNCwgMHgxMiwgMHg2ZCwgMHg4ZCwgMHgyMiwgMHg2ZCwgMHgwMCwgMHg3ZSwgCisgICAgMHgxNCwgMHgwMSwgMHgwMiwgMHg3YSwgMHgwNywgMHgyYywgMHg4NiwgMHg3YSwgMHgwMywgMHgyYywgMHg4MSwgMHg3ZSwgMHhiMywgMHgyYywgMHg3NiwgMHgyMCwgCisgICAgMHhlNywgMHgwZiwgMHg3YSwgMHgyMywgMHgyYywgMHg4MCwgMHg3YSwgMHgzMywgMHgyYywgMHg3ZiwgMHhiZSwgMHgwNywgMHgyYywgMHg3YywgMHg2OCwgMHgwOSwgCisgICAgMHgyMiwgMHg3YSwgMHgzMywgMHgyYywgMHg4MCwgMHg3YSwgMHgyMywgMHgyYywgMHg3ZiwgMHg3ZSwgMHhiMywgMHgyYywgMHg3NiwgMHg1NCwgMHhlMywgMHgyMywgCisgICAgMHgyMywgMHgzMCwgMHhlMCwgMHgwMiwgMHhkMiwgMHhlNSwgMHgzMCwgMHhlNywgMHgwMiwgMHhkMiwgMHhlNCwgMHgzMCwgMHhlNSwgMHgwNiwgMHgzMCwgMHhlNCwgCisgICAgMHgwMywgMHgwMiwgMHg3MSwgMHhmMiwgMHg1NCwgMHgzZSwgMHhmNSwgMHhmMCwgMHgwMywgMHg1NCwgMHgxZiwgMHhjMywgMHgyNSwgMHhmMCwgMHg5MCwgMHg2ZCwgCisgICAgMHhlNSwgMHg3NSwgMHg4NCwgMHhmZiwgMHg3MywgMHgwMiwgMHg2ZiwgMHhhMCwgMHgwMiwgMHg2ZSwgMHgyZCwgMHgwMiwgMHg3MCwgMHgzOSwgMHgwMiwgMHg3MCwgCisgICAgMHg1NCwgMHgwMiwgMHg2ZiwgMHgzNywgMHgwMiwgMHg2ZSwgMHhjMiwgMHgwMiwgMHg3MCwgMHg4NSwgMHgwMiwgMHg3MCwgMHg4NSwgMHgwMiwgMHg3MCwgMHg4OCwgCisgICAgMHgwMiwgMHg3MCwgMHg4OCwgMHgwMiwgMHg3MCwgMHg4OCwgMHgwMiwgMHg3MCwgMHg4OCwgMHgwMiwgMHg3MCwgMHg4OCwgMHgwMiwgMHg3MCwgMHg4OCwgMHgwMiwgCisgICAgMHg3MCwgMHg4OCwgMHgwMiwgMHg3MCwgMHg4OCwgMHgwMiwgMHg3MCwgMHg4ZSwgMHgwMiwgMHg3MSwgMHg2MCwgMHgwMiwgMHg3MCwgMHg4YiwgMHgwMiwgMHg3MCwgCisgICAgMHg4YiwgMHgwMiwgMHg3MCwgMHg4YiwgMHgwMiwgMHg3MCwgMHg4YiwgMHgwMiwgMHg3MCwgMHg4YiwgMHgwMiwgMHg3MCwgMHg4YiwgMHg3NCwgMHgwMCwgMHg3YSwgCisgICAgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHg2MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxYywgMHg3ZSwgMHhiMywgMHgyYywgMHg3NywgMHhiNCwgMHgwNiwgMHgyYSwgCisgICAgMHg3ZSwgMHhiMywgMHgyYywgMHg3OCwgMHg2MCwgMHg3OSwgMHg3YywgMHgwYiwgMHg3ZSwgMHgxMywgMHgyYywgMHg3OSwgMHg3ZSwgMHgxNywgMHgyYywgMHg3YSwgCisgICAgMHg3NSwgMHgyZiwgMHg3MiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHgwMSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHgxMSwgMHgyZiwgMHgxMiwgCisgICAgMHg3MywgMHgzNSwgMHgxMiwgMHg3MiwgMHgzNywgMHg0MCwgMHg1OCwgMHgwMiwgMHg2YiwgMHhlYiwgMHhiNCwgMHgwOCwgMHgxYywgMHg3NSwgMHgyZiwgMHg3NCwgCisgICAgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHhiMywgMHgzZiwgMHhmMSwgMHg3ZSwgMHgwOCwgMHgyYywgMHg4OCwgMHg3YSwgMHgwYywgMHgwMCwgMHgwMCwgMHg3YSwgCisgICAgMHgwYiwgMHhiMCwgMHg3ZSwgMHg1NCwgMHgwMCwgMHgwMSwgMHgwMiwgMHg2YiwgMHhlYiwgMHhiNCwgMHgwMCwgMHgzMywgMHg3NSwgMHgyZiwgMHg3NSwgMHgxMiwgCisgICAgMHg3MywgMHgzNSwgMHg3ZSwgMHgwOCwgMHgyYywgMHg4OCwgMHg3YSwgMHgwYywgMHgwMCwgMHgwMCwgMHhjYSwgMHgwYiwgMHg3ZSwgMHhiMywgMHgzZiwgMHhmMiwgCisgICAgMHgzMCwgMHhlMCwgMHgwNywgMHg3NCwgMHgwMiwgMHg3YSwgMHgwYiwgMHhiMCwgMHg4MCwgMHgwNSwgMHg3NCwgMHgwMCwgMHg3YSwgMHgwYiwgMHhiMCwgMHgwYiwgCisgICAgMHgxNCwgMHg3NCwgMHgwMCwgMHg3YSwgMHgwYiwgMHhiMCwgMHg3ZSwgMHg1NCwgMHgwMCwgMHgwMiwgMHhkYSwgMHgwYiwgMHgwMiwgMHg2YiwgMHhlYiwgMHgwMiwgCisgICAgMHg3MSwgMHhmMiwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHg2MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxYywgMHg3ZSwgMHhiMywgCisgICAgMHgyYywgMHg3NywgMHhiNCwgMHgwMCwgMHg1ZiwgMHg3NSwgMHgyZiwgMHg3NiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHhiMywgMHgyYywgMHg3YiwgMHg1NCwgCisgICAgMHgwZiwgMHhiNCwgMHgwMiwgMHgwNSwgMHg3ZSwgMHhiMCwgMHg2MCwgMHg4MCwgMHgxNywgMHhiNCwgMHgwMCwgMHgwNSwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg4MCwgCisgICAgMHgwZiwgMHg3ZSwgMHhiMywgMHgyYywgMHg3YiwgMHgyMCwgMHhlNywgMHgwNSwgMHg3ZSwgMHhiMCwgMHg0MCwgMHg4MCwgMHgwMywgMHg3ZSwgMHhiMCwgMHgyMCwgCisgICAgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3ZSwgMHhiMywgMHg5MSwgMHgxMSwgMHgzMCwgMHhlMCwgMHgwNCwgMHg3NCwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3NCwgCisgICAgMHgwMCwgMHg3ZSwgMHgwOCwgMHgyYywgMHg4OCwgMHg3YSwgMHgwYywgMHgwMCwgMHgwMCwgMHhjYSwgMHgwYiwgMHg3YSwgMHgwYiwgMHhiMCwgMHgwYiwgMHgxNCwgCisgICAgMHg3NCwgMHgwMCwgMHg3YSwgMHgwYiwgMHhiMCwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3ZSwgMHg1NCwgMHgwMCwgMHgwMiwgMHhkYSwgCisgICAgMHgwYiwgMHgwMiwgMHg2YiwgMHhlYiwgMHgwMiwgMHg3MSwgMHhmMiwgMHg3ZSwgMHhiMywgMHgyYywgMHg3YiwgMHg1NCwgMHgwZiwgMHhiNCwgMHgwMiwgMHgwNSwgCisgICAgMHg3ZSwgMHhiMCwgMHg2MCwgMHg4MCwgMHgxNywgMHhiNCwgMHgwMCwgMHgwNSwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg4MCwgMHgwZiwgMHg3ZSwgMHhiMywgMHgyYywgCisgICAgMHg3YiwgMHgyMCwgMHhlNywgMHgwNSwgMHg3ZSwgMHhiMCwgMHg0MCwgMHg4MCwgMHgwMywgMHg3ZSwgMHhiMCwgMHgyMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgCisgICAgMHg3ZSwgMHhiMywgMHgyYywgMHg3OSwgMHhiNCwgMHgwMCwgMHgyNiwgMHg3ZSwgMHhiMywgMHgyYywgMHg3NywgMHhiNCwgMHgwMSwgMHgwZSwgMHg3NSwgMHgyZiwgCisgICAgMHg3NywgMHgxMiwgMHg3MywgMHgzNSwgMHg3NCwgMHgwMSwgMHg3YSwgMHhiMywgMHg5MSwgMHgxMiwgMHg4MCwgMHgxYiwgMHhiNCwgMHgwMywgMHgwZSwgMHg3NSwgCisgICAgMHgyZiwgMHg3OCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3NCwgMHgwMSwgMHg3YSwgMHhiMywgMHg5MSwgMHgxMSwgMHg4MCwgMHgwYSwgMHg3NCwgMHgwMCwgMHg3YSwgCisgICAgMHhiMywgMHg5MSwgMHgwMCwgMHgxMiwgMHg3MSwgMHhmMiwgMHgyMiwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHgwMiwgMHg2YiwgMHhkZSwgCisgICAgMHg3ZSwgMHhiMywgMHgyYywgMHg3NywgMHhiNCwgMHgwOSwgMHgxZiwgMHg3NSwgMHgyZiwgMHg3OSwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHhiMywgMHgyYywgCisgICAgMHg3OSwgMHhiZSwgMHhiMywgMHgzZiwgMHhmMSwgMHg2OCwgMHgwZCwgMHhjYSwgMHhiOCwgMHgxMiwgMHg0MywgMHg3OSwgMHhkYSwgMHhiOCwgMHg1MCwgMHg3NiwgCisgICAgMHg3YSwgMHhiMywgMHgzZiwgMHhmMSwgMHg4MCwgMHg2ZCwgMHhiNCwgMHgwNSwgMHgwOCwgMHg3NSwgMHgyZiwgMHg3YSwgMHgxMiwgMHg3MywgMHgzNSwgMHg4MCwgCisgICAgMHg2MiwgMHhiNCwgMHgwMywgMHgxOSwgMHg3NSwgMHgyZiwgMHg3YiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHhiMywgMHgyYywgMHg3OSwgMHhiNCwgMHgwMSwgCisgICAgMHg1NSwgMHg3ZSwgMHhiMywgMHgzZiwgMHhmMiwgMHg0NCwgMHgwMSwgMHg3YSwgMHhiMywgMHgzZiwgMHhmMiwgMHg4MCwgMHg0NiwgMHhiNCwgMHgwMSwgMHgxOSwgCisgICAgMHg3NSwgMHgyZiwgMHg3YywgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHhiMywgMHgyYywgMHg3OSwgMHhiNCwgMHgwMSwgMHgzOSwgMHg3ZSwgMHhiMywgMHgzZiwgCisgICAgMHhmMiwgMHg1NCwgMHhmZSwgMHg3YSwgMHhiMywgMHgzZiwgMHhmMiwgMHg4MCwgMHgyYSwgMHhiNCwgMHgwNywgMHgyYSwgMHg3ZSwgMHhiMywgMHgyYywgMHg3OCwgCisgICAgMHg2MCwgMHgyNCwgMHg3YywgMHgwYiwgMHg3ZSwgMHgxMywgMHgyYywgMHg3OSwgMHg3ZSwgMHgxNywgMHgyYywgMHg3YSwgMHg3NSwgMHgyZiwgMHg3MywgMHgxMiwgCisgICAgMHg3MywgMHgzNSwgMHg3YSwgMHgwMSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHgxMSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgxMiwgMHg3MiwgCisgICAgMHg3MSwgMHg0MCwgMHgwMywgMHgwMiwgMHg2YiwgMHhkZSwgMHgwMiwgMHg3MSwgMHhmMiwgMHg3ZSwgMHhiMywgMHgyYywgMHg3NywgMHhiNCwgMHgwYiwgMHhmNiwgCisgICAgMHg3NSwgMHgyZiwgMHg3ZCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHhiMywgMHgyYywgMHg3OSwgMHg3ZSwgMHhhMywgMHgyYywgMHg3YiwgMHg0YywgMHhhYiwgCisgICAgMHg3OCwgMHhlNCwgMHg4MCwgMHhkZiwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHg2MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxYywgCisgICAgMHg3ZSwgMHhiMywgMHgyYywgMHg3NywgMHhiNCwgMHgwYSwgMHhjZiwgMHg3NSwgMHgyZiwgMHg3ZSwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHhiMywgMHgyYywgCisgICAgMHg3OSwgMHg3MCwgMHhjMywgMHg3ZSwgMHgwOCwgMHgyYywgMHg4OCwgMHg3YSwgMHgwYywgMHgwMCwgMHgwMCwgMHg3YSwgMHgwYiwgMHhiMCwgMHg3ZSwgMHg1NCwgCisgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHg2YiwgMHhlYiwgMHgwMiwgMHg3MSwgMHhmMiwgMHgwMiwgMHg3MSwgMHhmMiwgMHgwMiwgMHg3MSwgMHhmMiwgMHg3ZSwgMHhiMywgCisgICAgMHgyYywgMHg3NywgMHhiNCwgMHgwNCwgMHgyMCwgMHg3NSwgMHgyZiwgMHhjMywgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgwMSwgMHg3ZSwgCisgICAgMHgxNywgMHgyYywgMHg3OCwgMHg3ZSwgMHgxOCwgMHgyYywgMHg4OCwgMHg3YSwgMHgxYywgMHgwMCwgMHgwMCwgMHg3ZSwgMHg0NywgMHgyYywgMHg3YywgMHgxMiwgCisgICAgMHg3MywgMHg0MSwgMHgwMiwgMHg3MSwgMHg1YSwgMHhiNCwgMHgwNiwgMHg0MiwgMHg3NSwgMHgyZiwgMHhjMSwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHg1OCwgCisgICAgMHgwMCwgMHgwMCwgMHg3YSwgMHg1YywgMHgwMCwgMHhmZSwgMHg3ZCwgMHhjYSwgMHg3ZSwgMHhkNywgMHgyYywgMHg3OCwgMHg3ZSwgMHg3OCwgMHgyYywgMHg4OCwgCisgICAgMHg3YSwgMHg3YywgMHgwMCwgMHgwMCwgMHg3ZSwgMHg3NywgMHgyYywgMHg3YywgMHg3NSwgMHgyZiwgMHhjMSwgMHgxMiwgMHg3MywgMHgzNSwgMHhjMCwgMHhhOCwgCisgICAgMHhjMiwgMHhhZiwgMHg3ZSwgMHg0MCwgMHgwMSwgMHg3YSwgMHg0MywgMHg5NCwgMHgwMCwgMHgxMiwgMHg3MywgMHg3YSwgMHg3ZSwgMHg0MywgMHgyYywgMHgzNSwgCisgICAgMHg3YSwgMHg0MywgMHg5NCwgMHgwMCwgMHhkMCwgMHhhOCwgMHg0MCwgMHg2NSwgMHg4MCwgMHg2MCwgMHhiNCwgMHgwMCwgMHgyNCwgMHhjMiwgMHhhZiwgMHg3ZSwgCisgICAgMHhiMCwgMHgwMSwgMHg3YSwgMHhiMywgMHg5NCwgMHgwMCwgMHg3YSwgMHhiMywgMHgyYywgMHgzNSwgMHgxMiwgMHg2YiwgMHhkZSwgMHhlNCwgMHg4ZCwgMHhlZiwgCisgICAgMHg4ZCwgMHhlZiwgMHg4ZCwgMHhlZiwgMHhkNSwgMHhlMCwgMHhmNywgMHhjMCwgMHhkMSwgMHhjYSwgMHgwMiwgMHhmZiwgMHhjYSwgMHgwNiwgMHgwMCwgMHgwMCwgCisgICAgMHgzMiwgMHhiNCwgMHgwOSwgMHgyMCwgMHg3NCwgMHgwMywgMHg3YSwgMHhiMywgMHg5MSwgMHgwNiwgMHg3ZSwgMHgyMywgMHg5MSwgMHgwNywgMHg3ZSwgMHg1NywgCisgICAgMHgyYywgMHg3OCwgMHg0ZCwgMHg1NSwgMHg2OCwgMHgwNSwgMHg0ZSwgMHgyMCwgMHgwMiwgMHg4MCwgMHgwMywgMHg1ZSwgMHgyMCwgMHhmZCwgMHg3YSwgMHgyMywgCisgICAgMHg5MSwgMHgwNywgMHg4MCwgMHgxNiwgMHhiNCwgMHgwNywgMHgxNiwgMHhjMiwgMHhhZiwgMHg3ZSwgMHgwNywgMHgyYywgMHg3YSwgMHg3ZSwgMHgxNywgMHgyYywgCisgICAgMHg3OCwgMHhjMCwgMHhkMSwgMHhjYSwgMHgxOCwgMHhjYSwgMHgzOCwgMHhjYSwgMHgyOCwgMHgzMiwgMHgwMiwgMHg2YiwgMHhkZSwgMHgwMiwgMHg3MSwgMHhmMiwgCisgICAgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHg2MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxYywgMHg3ZSwgMHhiMywgMHgyYywgMHg3NywgCisgICAgMHhiNCwgMHgwMywgMHgxNSwgMHg3NSwgMHgyZiwgMHhjMiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgwMSwgMHg3ZSwgMHgxNywgMHgyYywgCisgICAgMHg3OCwgMHg3ZSwgMHg1NywgMHgyYywgMHg3YywgMHgwMiwgMHg2YiwgMHhlYiwgMHhiNCwgMHgwNSwgMHg0MSwgMHg3NSwgMHgyZiwgMHhjMCwgMHgxMiwgMHg3MywgCisgICAgMHgzNSwgMHhjMCwgMHhhOCwgMHhjMiwgMHhhZiwgMHg3ZSwgMHg0MCwgMHgwMSwgMHg3YSwgMHg0MywgMHg5NCwgMHgwMCwgMHg3ZSwgMHgwOCwgMHgyYywgMHg4OCwgCisgICAgMHg3YSwgMHgwYywgMHgwMCwgMHgwMCwgMHg3ZSwgMHgyNCwgMHgwMCwgMHhmZSwgMHg3ZSwgMHgzNywgMHgyYywgMHg3OCwgMHg3ZSwgMHg0NywgMHgyYywgMHg3YywgCisgICAgMHgxMiwgMHg3MywgMHg0MSwgMHg3ZSwgMHg0MywgMHgyYywgMHgzNSwgMHg3YSwgMHg0MywgMHg5NCwgMHgwMCwgMHhkMCwgMHhhOCwgMHg3ZSwgMHgwOCwgMHgyYywgCisgICAgMHg4OCwgMHg3YSwgMHgwYywgMHgwMCwgMHgwMCwgMHg3ZSwgMHg1NywgMHgyYywgMHg3YywgMHgwMiwgMHg2YiwgMHhlYiwgMHhiNCwgMHgwMSwgMHgyMCwgMHg3ZSwgCisgICAgMHgwMCwgMHgwMCwgMHg3ZSwgMHgxMCwgMHgwMSwgMHg3NSwgMHgyZiwgMHg3MiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHgwMSwgMHgyZiwgMHgxMiwgMHg3MywgCisgICAgMHgzNSwgMHg3YSwgMHgxMSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHgxMiwgMHg3MiwgMHgzNywgMHg0MCwgMHgwMywgMHgwMiwgMHg2YiwgMHhlYiwgMHgwMiwgCisgICAgMHg3MSwgMHhmMiwgMHg3NSwgMHgyZiwgMHgwNywgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHhiMCwgMHgwMiwgMHg3YSwgMHhiMywgMHg5MCwgMHgwMCwgMHg3NCwgCisgICAgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHg0MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxNSwgMHg3NCwgMHgwMSwgMHg3YSwgMHhiMywgMHg5MSwgCisgICAgMHgxMSwgMHg3ZSwgMHhiMywgMHg5MSwgMHgxNSwgMHg1NCwgMHg2MCwgMHhiZSwgMHhiMCwgMHg0MCwgMHg2OCwgMHgwOCwgMHg3NCwgMHgyMCwgMHg3YSwgMHhiMywgCisgICAgMHg5MSwgMHgxNSwgMHg4MCwgMHhlZCwgMHg3NCwgMHgwMSwgMHg3YSwgMHhiMywgMHg5MSwgMHgxMiwgMHg3NCwgMHgwNCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxNCwgCisgICAgMHg3NCwgMHhmZiwgMHg3YSwgMHhiMywgMHgyYywgMHg3ZSwgMHgyMiwgMHhjMCwgMHhhOCwgMHhjMiwgMHhhZiwgMHg3ZSwgMHg0MCwgMHgwMSwgMHg3YSwgMHg0MywgCisgICAgMHg5NCwgMHgwMCwgMHgxMiwgMHg3MiwgMHhiZSwgMHg0MCwgMHgxZiwgMHg3ZSwgMHgwOCwgMHgyYywgMHg4OCwgMHg3YSwgMHgwYywgMHgwMCwgMHgwMCwgMHhjYSwgCisgICAgMHgwYiwgMHhjYSwgMHg0OSwgMHgxMiwgMHg3MywgMHg0MSwgMHhkYSwgMHg1OSwgMHhkYSwgMHgwYiwgMHg3ZSwgMHg0MywgMHgyYywgMHgzNSwgMHg3YSwgMHg0MywgCisgICAgMHg5NCwgMHgwMCwgMHhkMCwgMHhhOCwgMHhjMywgMHgyMiwgMHg3ZSwgMHg0MywgMHgyYywgMHgzNSwgMHg3YSwgMHg0MywgMHg5NCwgMHgwMCwgMHhkMCwgMHhhOCwgCisgICAgMHgyMiwgMHhjMCwgMHhhOCwgMHhjMiwgMHhhZiwgMHg3ZSwgMHg0MCwgMHgwMSwgMHg3YSwgMHg0MywgMHg5NCwgMHgwMCwgMHgxMiwgMHg3MiwgMHhiZSwgMHg0MCwgCisgICAgMHgzMSwgMHg3ZSwgMHg1OCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg1YywgMHgwMCwgMHhmZSwgMHg3ZiwgMHg2MSwgMHg3ZSwgMHg3OCwgMHgyYywgMHg4OCwgMHg3YSwgCisgICAgMHg3YywgMHgwMCwgMHgwMCwgMHg3ZSwgMHg3NywgMHgyYywgMHg3YywgMHhiZCwgMHg3NCwgMHg3OCwgMHgxNywgMHg3NSwgMHgyZiwgMHhjMSwgMHgxMiwgMHg3MywgCisgICAgMHgzNSwgMHgxMiwgMHg3MywgMHg3YSwgMHg0MCwgMHgwYywgMHg3ZSwgMHg0MywgMHgyYywgMHgzNSwgMHg3YSwgMHg0MywgMHg5NCwgMHgwMCwgMHhkMCwgMHhhOCwgCisgICAgMHhjMywgMHgyMiwgMHg3ZSwgMHg0MywgMHgyYywgMHgzNSwgMHg3YSwgMHg0MywgMHg5NCwgMHgwMCwgMHhkMCwgMHhhOCwgMHhkMywgMHgyMiwgMHg3ZSwgMHgyNCwgCisgICAgMHgwMCwgMHhmZSwgMHg3ZSwgMHgzNCwgMHg3ZiwgMHhjYSwgMHgwYiwgMHgxYSwgMHg1MCwgMHhjNSwgMHhmMCwgMHg3ZCwgMHg2MiwgMHg3ZCwgMHg3NSwgMHg3ZCwgCisgICAgMHg4NywgMHg3ZSwgMHgzNCwgMHg3ZiwgMHhjMiwgMHg3ZSwgMHgxYiwgMHhiMCwgMHg3ZSwgMHgzNCwgMHg3ZiwgMHgwMywgMHhiNCwgMHgwMSwgMHgwNCwgMHg3ZSwgCisgICAgMHgzNCwgMHg3ZiwgMHhjYywgMHg3ZSwgMHgxYiwgMHhiMCwgMHhiYywgMHgwYiwgMHg1MCwgMHg0OSwgMHgzZSwgMHgwMCwgMHgzZSwgMHgwMCwgMHgwYSwgMHg1MCwgCisgICAgMHgyZCwgMHg3NSwgMHgwYiwgMHgzYSwgMHgzMCwgMHg2OSwgMHg1MywgMHgwMCwgMHgwMiwgMHhiZCwgMHgzOCwgMHg1MCwgMHgwMiwgMHgyZCwgMHgzOCwgMHhiYywgCisgICAgMHgxYiwgMHg1MCwgMHgzMCwgMHgzZSwgMHgxMCwgMHgzZSwgMHgxMCwgMHgwYSwgMHg1MSwgMHgyZCwgMHgzNSwgMHg2OSwgMHg0MSwgMHgwMCwgMHgwMiwgMHgwYiwgCisgICAgMHgxYSwgMHgzMCwgMHhiZCwgMHgzOCwgMHg1MCwgMHgwMiwgMHgyZCwgMHgzOCwgMHhiZSwgMHg0NCwgMHhmZiwgMHhmZiwgMHg3OCwgMHgwNSwgMHg3ZSwgMHgxYiwgCisgICAgMHg5MCwgMHgwYSwgMHg0OSwgMHg0ZCwgMHg0NCwgMHg2OCwgMHgwYywgMHhiZSwgMHg0NCwgMHgwMCwgMHhmZiwgMHgyOCwgMHgwNCwgMHg3ZSwgMHg0NCwgMHgwMCwgCisgICAgMHhmZiwgMHhjMywgMHgyMiwgMHhkMywgMHgyMiwgCisKKy8vIFNlZ21lbnQgIzE2LCBTdGFydCBBZGRyZXNzIDAwZmY3ZmM2LCBMZW5ndGggNAorMHhmZiwweDAwLDB4YzYsMHg3ZiwweDA0LDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgwMywgMHgwMCwgCisKKy8vIFNlZ21lbnQgIzE3LCBTdGFydCBBZGRyZXNzIDAwZmY3MzM1LCBMZW5ndGggMzI4CisweGZmLDB4MDAsMHgzNSwweDczLDB4NDgsMHgwMSwKKyAgICAweGNhLCAweDA4LCAweDdlLCAweDAxLCAweDJmLCAweDdhLCAweDAzLCAweDNmLCAweGYwLCAweGRhLCAweDA4LCAweDIyLCAweDdlLCAweDFiLCAweGMwLCAweDdhLCAKKyAgICAweDBiLCAweGMwLCAweDBiLCAweDE0LCAweDBiLCAweDM0LCAweDFiLCAweDQ0LCAweDc4LCAweGYyLCAweDIyLCAweDdmLCAweDZmLCAweDdmLCAweGYwLCAweDFiLCAKKyAgICAweGZjLCAweDdjLCAweDU0LCAweDdkLCAweDMyLCAweDgwLCAweDA4LCAweGNhLCAweDFiLCAweGNhLCAweDFiLCAweGNhLCAweDFiLCAweGNhLCAweDFiLCAweDllLCAKKyAgICAweDQ0LCAweDAwLCAweDEwLCAweDUwLCAweGYyLCAweDJlLCAweDQ0LCAweDAwLCAweDEwLCAweDY4LCAweDA2LCAweGNhLCAweDQ4LCAweDFiLCAweDQ0LCAweDc4LCAKKyAgICAweGZhLCAweDdmLCAweGY2LCAweDg5LCAweGU0LCAweGNhLCAweDZiLCAweDVlLCAweGQ0LCAweDAwLCAweDNmLCAweDY4LCAweDIwLCAweDdlLCAweDg0LCAweDAwLCAKKyAgICAweDQwLCAweDlkLCAweDhkLCAweGRhLCAweDZiLCAweGJkLCAweDg3LCAweDM4LCAweDE2LCAweGNhLCAweDc5LCAweDdkLCAweDc4LCAweDEyLCAweDczLCAweGE0LCAKKyAgICAweGRhLCAweDc5LCAweDQwLCAweDA4LCAweDlkLCAweDc4LCAweDY4LCAweDAyLCAweDgwLCAweDA1LCAweGMyLCAweGQ3LCAweDIyLCAweGRhLCAweDZiLCAweDdlLCAKKyAgICAweGMwLCAweDAzLCAweDdlLCAweGQwLCAweDAwLCAweDdhLCAweGQzLCAweDkwLCAweDAwLCAweDc0LCAweGFhLCAweDM5LCAweGI1LCAweDU1LCAweDU1LCAweDc0LCAKKyAgICAweDU1LCAweDM5LCAweGI1LCAweDJhLCAweGFhLCAweDc0LCAweGEwLCAweDM5LCAweGI1LCAweDU1LCAweDU1LCAweDdlLCAweDA0LCAweDAwLCAweDQwLCAweDlkLCAKKyAgICAweDcwLCAweDUwLCAweDA2LCAweDJkLCAweDcwLCAweDdkLCAweDA3LCAweDZkLCAweDc3LCAweDdjLCAweDMxLCAweDdlLCAweDdiLCAweDAwLCAweDdhLCAweDZiLCAKKyAgICAweDAwLCAweDBiLCAweDdjLCAweDBiLCAweDZjLCAweGE1LCAweGQ5LCAweGYzLCAweDdmLCAweDE2LCAweDFiLCAweDFjLCAweDdlLCAweDU0LCAweDI3LCAweDEwLCAKKyAgICAweDdlLCAweDFiLCAweDEwLCAweGJjLCAweDEwLCAweDY4LCAweDA2LCAweDFiLCAweDU0LCAweDc4LCAweGY1LCAweDgwLCAweDJmLCAweDZkLCAweDAwLCAweDdjLCAKKyAgICAweDIwLCAweDdmLCAweDE2LCAweDlmLCAweDEwLCAweDdmLCAweDI3LCAweDlmLCAweDIwLCAweDdlLCAweDJiLCAweDAwLCAweDdlLCAweDFiLCAweDEwLCAweGJjLCAKKyAgICAweDAxLCAweDc4LCAweDE5LCAweDBiLCAweDJjLCAweDBiLCAweDFjLCAweGE1LCAweGRiLCAweGVmLCAweDdjLCAweGI2LCAweDIwLCAweGUwLCAweDA2LCAweDZjLCAKKyAgICAweGRjLCAweDdhLCAweGQzLCAweDkwLCAweDAwLCAweDRkLCAweDc3LCAweDc4LCAweDkwLCAweGMyLCAweGQ3LCAweDIyLCAweGQyLCAweGQ3LCAweDIyLCAweDAwLCAKKyAgICAweDA0LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDA2LCAweDA0LCAweDAyLCAweDA0LCAweDAwLCAweDAyLCAweDAxLCAweDA0LCAweDAxLCAweDAyLCAweDAwLCAKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDA0LCAweDAwLCAweDA4LCAweDEwLCAKKyAgICAweDAyLCAweDEwLCAweDA0LCAweDAyLCAweDA4LCAweDAwLCAweDAxLCAweDAxLCAweDA4LCAweDdlLCAweDE4LCAweDdmLCAweGJkLCAweDdhLCAweDFjLCAweDAwLCAKKyAgICAweGZlLCAweDBiLCAweDFhLCAweDAwLCAweDVlLCAweDEwLCAweDFmLCAweGJlLCAweDEwLCAweDE0LCAweDM4LCAweDFhLCAweDBhLCAweDUxLCAweDIzLCAweDdlLCAKKyAgICAweDE4LCAweDc0LCAweDI0LCAweDdhLCAweDFjLCAweDAwLCAweGZmLCAweDJkLCAweDM1LCAweDBiLCAweDFhLCAweDUwLCAweDYwLCAweDA4LCAweGE1LCAweGI4LCAKKyAgICAweDAyLCAweDAzLCAweDRlLCAweGEwLCAweDA4LCAweDIyLCAweDgwLCAweGZlLCAKK307CisKK3N0YXRpYyBzdHJ1Y3QgZWRnZV9maXJtd2FyZV92ZXJzaW9uX2luZm8gSU1BR0VfVkVSU0lPTl9OQU1FID0geworCTIsIDAsIDMgfTsJCS8vIE1ham9yLCBNaW5vciwgQnVpbGQKKworI3VuZGVmIElNQUdFX1ZFUlNJT05fTkFNRQorCisjdW5kZWYgSU1BR0VfQVJSQVlfTkFNRQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZndfZG93bjMuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19md19kb3duMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYjU2ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZndfZG93bjMuaApAQCAtMCwwICsxLDgzNSBAQAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8qIEVkZ2Vwb3J0IEJpbmFyeSBJbWFnZSAoZm9yIFRJIGJhc2VkIHByb2R1Y3RzKQorLy8qIEdlbmVyYXRlZCBieSBUSUJpbjJDIHYyLjAwICh3YXRjaHBvcnQpCisvLyogQ29weXJpZ2h0IChDKSAyMDAxIEluc2lkZSBPdXQgTmV0d29ya3MsIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworc3RhdGljIGludCBJTUFHRV9TSVpFID0gMTI3NDk7CisKK3N0cnVjdCBFREdFX0ZJUk1XQVJFX1ZFUlNJT05fSU5GTworeworCXVuc2lnbmVkIGNoYXIgICBNYWpvclZlcnNpb247CisJdW5zaWduZWQgY2hhciAgIE1pbm9yVmVyc2lvbjsKKwl1bnNpZ25lZCBzaG9ydCAgQnVpbGROdW1iZXI7Cit9OworCitzdGF0aWMgc3RydWN0IEVER0VfRklSTVdBUkVfVkVSU0lPTl9JTkZPIElNQUdFX1ZFUlNJT05fTkFNRSA9Cit7CisJNCwgMTAsIDAJCS8vIE1ham9yLCBNaW5vciwgQnVpbGQKKworfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgSU1BR0VfQVJSQVlfTkFNRVtdID0gCit7CisvLyAgc3RydWN0IEltYWdlSGRyCisvLyAgeworLy8gICAgICBXT1JEICAgIExlbmd0aDsKKy8vICAgICAgQllURSAgICBDaGVja1N1bTsKKy8vICB9OworMHhjYSwgMHgzMSwgCisweGE4LCAKKworMHgwMiwgMHgyNiwgMHhmZSwgMHgwMiwgMHgyMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAxLCAweDFhLCAweDg1LCAweDNmLCAKKzB4OGMsIDB4ODUsIDB4NDAsIDB4OGEsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ZDAsIDB4YzAsIDB4ZjAsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODMsIDB4YzAsIDB4MDAsIAorMHhjMCwgMHgwMSwgMHhjMCwgMHgwMiwgMHhjMCwgMHgwMywgMHhjMCwgMHgwNCwgMHhjMCwgMHgwNSwgMHhjMCwgMHgwNiwgMHhjMCwgMHgwNywgMHhlNSwgMHgzZSwgCisweDI0LCAweDA4LCAweGY4LCAweGU2LCAweDYwLCAweDJiLCAweGU1LCAweDNlLCAweDI0LCAweDEwLCAweGY4LCAweGE2LCAweDgxLCAweGU1LCAweDNlLCAweDc1LCAKKzB4ZjAsIDB4MjEsIDB4YTQsIDB4MjQsIDB4MDUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4ZjgsIDB4ZjUsIDB4ODMsIDB4NzgsIDB4OGMsIDB4ZTUsIDB4ODEsIAorMHgwNCwgMHhjMywgMHg5OCwgMHhmOSwgMHg5NCwgMHgyMiwgMHg0MCwgMHgwMywgMHgwMiwgMHgxMSwgMHg5NCwgMHhlNiwgMHhmMCwgMHgwOCwgMHhhMywgMHhkOSwgCisweGZhLCAweDc0LCAweDA4LCAweDI1LCAweDNlLCAweGY4LCAweDA1LCAweDNlLCAweDA4LCAweGU2LCAweDU0LCAweDgwLCAweDcwLCAweDBjLCAweGU1LCAweDNlLCAKKzB4YjQsIDB4MDcsIDB4ZjMsIDB4NzgsIDB4MDgsIDB4NzUsIDB4M2UsIDB4MDAsIDB4ODAsIDB4ZWYsIDB4ZTUsIDB4M2UsIDB4MjQsIDB4MTAsIDB4ZjgsIDB4ODYsIAorMHg4MSwgMHhlNSwgMHgzZSwgMHg3NSwgMHhmMCwgMHgyMSwgMHhhNCwgMHgyNCwgMHgwNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHhmOCwgMHhmNSwgMHg4MywgCisweDc4LCAweDhjLCAweGU1LCAweDgxLCAweDA0LCAweGMzLCAweDk4LCAweGY5LCAweGUwLCAweGY2LCAweDA4LCAweGEzLCAweGQ5LCAweGZhLCAweGQwLCAweDA3LCAKKzB4ZDAsIDB4MDYsIDB4ZDAsIDB4MDUsIDB4ZDAsIDB4MDQsIDB4ZDAsIDB4MDMsIDB4ZDAsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4ODMsIAorMHhkMCwgMHg4MiwgMHhkMCwgMHhmMCwgMHhkMCwgMHhkMCwgMHhkMCwgMHhlMCwgMHgzMiwgMHgzMCwgMHgwMSwgMHg0ZCwgMHgzMCwgMHhiNCwgMHg0OCwgMHgxMCwgCisweDAwLCAweDQ1LCAweDkwLCAweGZmLCAweDA4LCAweGUwLCAweDU0LCAweDIwLCAweGY4LCAweDkwLCAweGZmLCAweDQ4LCAweGUwLCAweDU0LCAweDIwLCAweGY5LCAKKzB4OTAsIDB4ZmYsIDB4MTAsIDB4ZTAsIDB4NTQsIDB4MjAsIDB4ZmEsIDB4OTAsIDB4ZmYsIDB4NTAsIDB4ZTAsIDB4NTQsIDB4MjAsIDB4ZmIsIDB4NzQsIDB4MDAsIAorMHhmNSwgMHg4MiwgMHg3NCwgMHhmOCwgMHhmNSwgMHg4MywgMHhlMCwgMHhjOCwgMHhmMCwgMHg2OCwgMHg2MCwgMHgwMiwgMHg3ZSwgMHgwNCwgMHhhMywgMHhlMCwgCisweGM5LCAweGYwLCAweDY5LCAweDYwLCAweDAyLCAweDdlLCAweDA0LCAweGEzLCAweGUwLCAweGNhLCAweGYwLCAweDZhLCAweDYwLCAweDAyLCAweDdlLCAweDA0LCAKKzB4YTMsIDB4ZTAsIDB4Y2IsIDB4ZjAsIDB4NmIsIDB4NjAsIDB4MDIsIDB4N2UsIDB4MDQsIDB4MjIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ZDAsIDB4YzAsIDB4ZjAsIAorMHhjMCwgMHg4MiwgMHhjMCwgMHg4MywgMHhjMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHhjMCwgMHgwMiwgMHhjMCwgMHgwMywgMHhjMCwgMHgwNCwgMHhjMCwgMHgwNSwgCisweGMwLCAweDA2LCAweGMwLCAweDA3LCAweDkwLCAweGZmLCAweDkzLCAweDc0LCAweDAxLCAweGYwLCAweGU1LCAweDgxLCAweDk0LCAweGZkLCAweDQwLCAweDAzLCAKKzB4MDIsIDB4MTEsIDB4OTQsIDB4ODUsIDB4NDEsIDB4OGQsIDB4ODUsIDB4NDIsIDB4OGIsIDB4NzQsIDB4YWYsIDB4ZjUsIDB4ODIsIDB4NzQsIDB4ZmEsIDB4ZjUsIAorMHg4MywgMHhlMCwgMHhiNCwgMHgwMSwgMHgxYiwgMHhjMCwgMHg4MiwgMHhjMCwgMHg4MywgMHg5MCwgMHhmZiwgMHg0YSwgMHhlMCwgMHgzMCwgMHhlNywgMHgyYywgCisweDkwLCAweGZmLCAweDRlLCAweGUwLCAweDMwLCAweGU3LCAweDI1LCAweGQwLCAweDgzLCAweGQwLCAweDgyLCAweDc0LCAweDAyLCAweGYwLCAweDgwLCAweDIwLCAKKzB4YjQsIDB4MDIsIDB4MWQsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODMsIDB4OTAsIDB4ZmYsIDB4N2EsIDB4ZTAsIDB4MzAsIDB4ZTcsIDB4MDUsIDB4MTIsIDB4MjcsIAorMHg4ZCwgMHg4MCwgMHgwOSwgMHhkMCwgMHg4MywgMHhkMCwgMHg4MiwgMHg3NCwgMHgwMywgMHhmMCwgMHg4MCwgMHgwNCwgMHhkMCwgMHg4MywgMHhkMCwgMHg4MiwgCisweGEzLCAweGUwLCAweGI0LCAweDAxLCAweDFiLCAweGMwLCAweDgyLCAweGMwLCAweDgzLCAweDkwLCAweGZmLCAweDUyLCAweGUwLCAweDMwLCAweGU3LCAweDJjLCAKKzB4OTAsIDB4ZmYsIDB4NTYsIDB4ZTAsIDB4MzAsIDB4ZTcsIDB4MjUsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4ODAsIDB4MjUsIAorMHhiNCwgMHgwMiwgMHgyMiwgMHhjMCwgMHg4MiwgMHhjMCwgMHg4MywgMHg5MCwgMHhmZiwgMHg3YSwgMHhlMCwgMHgzMCwgMHhlNywgMHgwNSwgMHgxMiwgMHgyNywgCisweDhkLCAweDgwLCAweDA5LCAweGQwLCAweDgzLCAweGQwLCAweDgyLCAweDc0LCAweDAzLCAweGYwLCAweDgwLCAweDA5LCAweGQwLCAweDgzLCAweGQwLCAweDgyLCAKKzB4ODAsIDB4MDMsIDB4MDIsIDB4MDIsIDB4NjIsIDB4NzQsIDB4MTUsIDB4ZjUsIDB4ODIsIDB4NzQsIDB4ZjksIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MjAsIDB4MDQsIAorMHhmMSwgMHgyMCwgMHgwMiwgMHgwMywgMHgzMCwgMHgwMSwgMHhlYiwgMHg3NCwgMHgxOCwgMHhmNSwgMHg4MiwgMHg3NCwgMHhmOSwgMHhmNSwgMHg4MywgMHhlMCwgCisweDE0LCAweGZjLCAweGYwLCAweGEzLCAweGUwLCAweGZkLCAweGEzLCAweGUwLCAweGZlLCAweDY0LCAweDA0LCAweDcwLCAweDBmLCAweGVjLCAweDcwLCAweDYyLCAKKzB4N2UsIDB4MDEsIDB4MTIsIDB4MDAsIDB4YzksIDB4N2MsIDB4MGEsIDB4N2QsIDB4ZmEsIDB4MDIsIDB4MDIsIDB4MzMsIDB4MTIsIDB4MDAsIDB4YzksIDB4ZWUsIAorMHg2NCwgMHgwNCwgMHg2MCwgMHgxZCwgMHhlYywgMHg3MCwgMHg0YiwgMHg3YywgMHgwYSwgMHhlZCwgMHgxNCwgMHhmZCwgMHg3MCwgMHgxNSwgMHhlZSwgMHg2NCwgCisweDAyLCAweDYwLCAweDA3LCAweDdlLCAweDAyLCAweDdkLCAweDMyLCAweDAyLCAweDAyLCAweDMzLCAweDdlLCAweDAxLCAweDdkLCAweGZhLCAweDAyLCAweDAyLCAKKzB4MzMsIDB4N2MsIDB4MGEsIDB4NzQsIDB4MTgsIDB4ZjUsIDB4ODIsIDB4NzQsIDB4ZjksIDB4ZjUsIDB4ODMsIDB4ZWMsIDB4ZjAsIDB4YTMsIDB4ZWQsIDB4ZjAsIAorMHhhMywgMHhlZSwgMHhmMCwgMHgxNCwgMHg2MCwgMHgxOCwgMHgyMCwgMHhlMSwgMHgwZiwgMHgyMCwgMHgwMSwgMHgwNiwgMHhkMiwgMHhiMSwgMHhjMiwgMHhiMCwgCisweDgwLCAweDEwLCAweGMyLCAweGIxLCAweGQyLCAweGIwLCAweDgwLCAweDBhLCAweGMyLCAweGIxLCAweGMyLCAweGIwLCAweDgwLCAweDA0LCAweGQyLCAweGIwLCAKKzB4ZDIsIDB4YjEsIDB4NzgsIDB4MTksIDB4NzksIDB4MDksIDB4N2EsIDB4MDcsIDB4ZTcsIDB4NzAsIDB4MDQsIDB4YTYsIDB4MDAsIDB4ODAsIDB4MGIsIDB4ZTYsIAorMHg2MCwgMHgwOCwgMHgxNiwgMHhlNiwgMHg3MCwgMHgwNCwgMHhlNywgMHg0NCwgMHg4MCwgMHhmNywgMHgwOCwgMHgwOSwgMHhkYSwgMHhlYSwgMHhlNSwgMHgzZCwgCisweDYwLCAweDEzLCAweDE0LCAweGY1LCAweDNkLCAweDcwLCAweDBlLCAweGU1LCAweDNlLCAweDI0LCAweDA4LCAweGY4LCAweDc2LCAweDAwLCAweDEyLCAweDExLCAKKzB4MGYsIDB4ZDIsIDB4OGMsIDB4ZDIsIDB4OGQsIDB4ZDAsIDB4MDcsIDB4ZDAsIDB4MDYsIDB4ZDAsIDB4MDUsIDB4ZDAsIDB4MDQsIDB4ZDAsIDB4MDMsIDB4ZDAsIAorMHgwMiwgMHhkMCwgMHgwMSwgMHhkMCwgMHgwMCwgMHhkMCwgMHg4MywgMHhkMCwgMHg4MiwgMHhkMCwgMHhmMCwgMHhkMCwgMHhkMCwgMHhkMCwgMHhlMCwgMHgzMiwgCisweDkwLCAweGZmLCAweDA0LCAweGUwLCAweDkwLCAweGZhLCAweGI2LCAweGYwLCAweDkwLCAweGZmLCAweDA2LCAweGUwLCAweGZjLCAweGEzLCAweGUwLCAweGZhLCAKKzB4ZWMsIDB4ZmYsIDB4ZWEsIDB4ZmUsIDB4ZWYsIDB4YzMsIDB4OTQsIDB4MDgsIDB4ZWUsIDB4OTQsIDB4MDEsIDB4NTAsIDB4MDIsIDB4ODAsIDB4MDQsIDB4N2UsIAorMHgwMSwgMHg3ZiwgMHgwOCwgMHg4ZSwgMHgzYiwgMHg4ZiwgMHgzYywgMHg5MCwgMHhmZiwgMHgwMiwgMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgMHhmYSwgMHhlYywgCisweGZmLCAweGVhLCAweDkwLCAweGZhLCAweGJhLCAweGYwLCAweGVmLCAweGEzLCAweGYwLCAweDEyLCAweDFjLCAweDMwLCAweGU0LCAweGY1LCAweDRkLCAweGU1LCAKKzB4NGQsIDB4YzMsIDB4OTQsIDB4MDIsIDB4NTAsIDB4MGYsIDB4MTIsIDB4MWMsIDB4MTEsIDB4ZTQsIDB4MTIsIDB4MWEsIDB4MzgsIDB4MDUsIDB4NGQsIDB4MDQsIAorMHgxMiwgMHgxYywgMHgwMiwgMHg4MCwgMHhlYSwgMHgxMiwgMHgxYywgMHgzMCwgMHg5MCwgMHhmZiwgMHgwMCwgMHhlMCwgMHhmZiwgMHg1NCwgMHg2MCwgMHgyNCwgCisweGMwLCAweDcwLCAweDAzLCAweDAyLCAweDA4LCAweGM1LCAweDI0LCAweDQwLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDkwLCAweGZhLCAweGI2LCAKKzB4ZTAsIDB4ZmUsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NGQsIDB4ZWUsIDB4MzAsIDB4ZTcsIDB4MDMsIDB4ZDMsIDB4ODAsIDB4MDEsIDB4YzMsIDB4OTIsIDB4MGEsIAorMHg5MCwgMHhmZiwgMHgwMSwgMHhlMCwgMHgxMiwgMHgxYiwgMHg0YywgMHgwMywgMHg1NiwgMHgwMCwgMHgwNCwgMHgyOSwgMHgwMSwgMHgwNSwgMHgzYywgMHgwMywgCisweDA2LCAweDAzLCAweDA1LCAweDA2LCAweDQ1LCAweDA2LCAweDA3LCAweGE3LCAweDA4LCAweDA3LCAweGVmLCAweDA5LCAweDA4LCAweDRiLCAweDBhLCAweDA4LCAKKzB4OGIsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MGYsIDB4MjYsIDB4ZTUsIDB4MzUsIDB4MjAsIDB4ZTcsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4OTAsIDB4ZmEsIAorMHhiYSwgMHhlMCwgMHg3MCwgMHgwMiwgMHhhMywgMHhlMCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhlNSwgMHgzYywgMHg2NCwgMHgwMiwgMHg0NSwgCisweDNiLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGVmLCAweDU0LCAweDFmLCAweDE0LCAweDYwLCAweDJiLCAweDE0LCAweDYwLCAweDQ3LCAweDI0LCAKKzB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZWUsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4MTIsIDB4MWMsIDB4MTEsIDB4NzQsIAorMHgwMSwgMHgxMiwgMHgxYSwgMHgzOCwgMHg3OCwgMHg2NywgMHhlNiwgMHgzMCwgMHhlMCwgMHgwOCwgMHgxMiwgMHgxYywgMHgxMSwgMHg3NCwgMHgwMiwgMHgxMiwgCisweDFhLCAweDM4LCAweDdmLCAweDAyLCAweDAyLCAweDMxLCAweGIxLCAweGU1LCAweDM1LCAweDIwLCAweGUxLCAweDA5LCAweDkwLCAweGZhLCAweGI2LCAweGUwLCAKKzB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4OTAsIDB4ZmEsIDB4YjYsIDB4ZTAsIDB4ZDMsIDB4OTQsIDB4MDEsIDB4NDAsIDB4MDMsIDB4MDIsIDB4MGYsIAorMHgyNiwgMHg3ZiwgMHgwMiwgMHgwMiwgMHgzMSwgMHhiMSwgMHhlNSwgMHgzNSwgMHgyMCwgMHhlMSwgMHgwZSwgMHg5MCwgMHhmYSwgMHhiNiwgMHhlMCwgMHhmZiwgCisweDYwLCAweDA3LCAweDY0LCAweDgwLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDEyLCAweDBmLCAweGIyLCAweDQwLCAweDAzLCAweDAyLCAweDBmLCAKKzB4MjYsIDB4ZTUsIDB4NGQsIDB4NzAsIDB4MTksIDB4MzAsIDB4MGEsIDB4MGIsIDB4OTAsIDB4ZmYsIDB4ODAsIDB4MTIsIDB4MWMsIDB4MGUsIDB4MTIsIDB4MWEsIAorMHgzOCwgMHg4MCwgMHgyNCwgMHg5MCwgMHhmZiwgMHg4MiwgMHgxMiwgMHgxYywgMHgwZSwgMHgxMiwgMHgxYSwgMHgzOCwgMHg4MCwgMHgxOSwgMHgxNSwgMHg0ZCwgCisweDMwLCAweDBhLCAweDBiLCAweDEyLCAweDFjLCAweGE1LCAweDEyLCAweDFjLCAweDBjLCAweDEyLCAweDFhLCAweDM4LCAweDgwLCAweDA5LCAweDEyLCAweDFjLCAKKzB4YjMsIDB4MTIsIDB4MWMsIDB4MGMsIDB4MTIsIDB4MWEsIDB4MzgsIDB4MTIsIDB4MWMsIDB4MTEsIDB4MTIsIDB4MTksIDB4ZjIsIDB4NjAsIDB4MDUsIDB4NzQsIAorMHgwMSwgMHgxMiwgMHgxYSwgMHgzOCwgMHg3ZiwgMHgwMiwgMHgwMiwgMHgzMSwgMHhiMSwgMHhlNSwgMHgzNSwgMHgzMCwgMHhlNywgMHgwMywgMHgwMiwgMHgwZiwgCisweDI2LCAweGU1LCAweDNjLCAweDQ1LCAweDNiLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDEyLCAweDFjLCAweGM5LCAweDE0LCAweDYwLCAweDJkLCAKKzB4MTQsIDB4NjAsIDB4NTksIDB4MjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4OTAsIDB4ZmEsIDB4YmEsIDB4ZTAsIDB4NzAsIDB4MDQsIAorMHhhMywgMHhlMCwgMHg2NCwgMHgwMSwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHg5MCwgMHhmYSwgMHhiNiwgMHhlMCwgMHg2MCwgMHgwMywgMHgwMiwgCisweDBmLCAweDI2LCAweDc4LCAweDY3LCAweGU2LCAweDU0LCAweGZlLCAweGY2LCAweGU0LCAweGZmLCAweDAyLCAweDMxLCAweGIxLCAweGU1LCAweDM1LCAweDIwLCAKKzB4ZTEsIDB4MDYsIDB4MjAsIDB4ZTAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZTUsIDB4MzUsIDB4MzAsIDB4ZTAsIDB4MDksIDB4OTAsIDB4ZmEsIDB4YjYsIAorMHhlMCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhlNSwgMHgzNSwgMHgzMCwgMHhlMSwgMHgwYywgMHg5MCwgMHhmYSwgMHhiNiwgMHhlMCwgMHhkMywgCisweDk0LCAweDAxLCAweDQwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGU0LCAweGZmLCAweDAyLCAweDMxLCAweGIxLCAweDkwLCAweGZhLCAweGJhLCAweGUwLCAKKzB4NzAsIDB4MDIsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4MTIsIDB4MGYsIDB4YjIsIDB4NDAsIDB4MDMsIDB4MDIsIDB4MGYsIAorMHgyNiwgMHhlNSwgMHgzNSwgMHgyMCwgMHhlMSwgMHgwNiwgMHgyMCwgMHhlMCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhlNSwgMHgzNSwgMHgzMCwgMHhlMCwgCisweDA3LCAweGU1LCAweDRkLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGU1LCAweDRkLCAweDcwLCAweDBmLCAweDkwLCAweGZmLCAweDgyLCAweGUwLCAKKzB4NTQsIDB4ZjcsIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4ODAsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjAsIDB4MjIsIDB4ZTUsIDB4NGQsIDB4MjQsIDB4ZmUsIDB4NjAsIAorMHgyMCwgMHgyNCwgMHhmYiwgMHg2MCwgMHgzNCwgMHgyNCwgMHgwNiwgMHg3MCwgMHgzNSwgMHgzMCwgMHgwYSwgMHgwYywgMHhhMiwgMHgwYSwgMHhlNCwgMHgzMywgCisweGZkLCAweDdmLCAweDAzLCAweDEyLCAweDJkLCAweGE4LCAweDgwLCAweDI2LCAweGU0LCAweGZkLCAweDdmLCAweDAzLCAweDEyLCAweDJkLCAweGE4LCAweDgwLCAKKzB4MWQsIDB4MzAsIDB4MGEsIDB4MGMsIDB4YTIsIDB4MGEsIDB4ZTQsIDB4MzMsIDB4ZmQsIDB4N2YsIDB4MDQsIDB4MTIsIDB4MmQsIDB4YTgsIDB4ODAsIDB4MGUsIAorMHhlNCwgMHhmZCwgMHg3ZiwgMHgwNCwgMHgxMiwgMHgyZCwgMHhhOCwgMHg4MCwgMHgwNSwgMHg3ZiwgMHg4NywgMHgxMiwgMHgzMSwgMHgzMiwgMHgxNSwgMHg0ZCwgCisweDMwLCAweDBhLCAweDBiLCAweDEyLCAweDFjLCAweGE1LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGY3LCAweGYwLCAweDgwLCAweDA5LCAweDEyLCAweDFjLCAKKzB4YjMsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjAsIDB4ZTQsIDB4ZmYsIDB4MDIsIDB4MzEsIDB4YjEsIDB4ZTUsIDB4MzUsIDB4MzAsIDB4ZTcsIAorMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhlNSwgMHgzYywgMHg0NSwgMHgzYiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHgxMiwgMHgxYywgMHhjOSwgCisweDE0LCAweDYwLCAweDJkLCAweDE0LCAweDYwLCAweDU1LCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDkwLCAweGZhLCAweGJhLCAKKzB4ZTAsIDB4NzAsIDB4MDQsIDB4YTMsIDB4ZTAsIDB4NjQsIDB4MDEsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4OTAsIDB4ZmEsIDB4YjYsIDB4ZTAsIAorMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHg3OCwgMHg2NywgMHhlNiwgMHg0NCwgMHgwMSwgMHhmNiwgMHhlNCwgMHhmZiwgMHgwMiwgMHgzMSwgMHhiMSwgCisweGU1LCAweDM1LCAweDIwLCAweGUxLCAweDA2LCAweDIwLCAweGUwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGU1LCAweDM1LCAweDMwLCAweGUwLCAweDA3LCAKKzB4ZTUsIDB4NGQsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZTUsIDB4MzUsIDB4MzAsIDB4ZTEsIDB4MGEsIDB4ZTUsIDB4NGQsIDB4ZDMsIDB4OTQsIAorMHgwMSwgMHg0MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhlNCwgMHhmZiwgMHgwMiwgMHgzMSwgMHhiMSwgMHg5MCwgMHhmYSwgMHhiYSwgMHhlMCwgMHg3MCwgCisweDAyLCAweGEzLCAweGUwLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDkwLCAweGZhLCAweGI2LCAweGUwLCAweGZmLCAweDEyLCAweDMxLCAweDgyLCAKKzB4NDAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZTUsIDB4MzUsIDB4MjAsIDB4ZTEsIDB4MDYsIDB4MjAsIDB4ZTAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIAorMHhlNSwgMHg0ZCwgMHg3MCwgMHgwOSwgMHgzMCwgMHgwYSwgMHgwMywgMHgwMiwgMHgxZCwgMHg2NCwgMHgwMiwgMHgxZCwgMHgyZiwgMHhlNSwgMHgzNSwgMHgyMCwgCisweGUxLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDE1LCAweDRkLCAweDMwLCAweDBhLCAweDBiLCAweDEyLCAweDFjLCAweGE1LCAweGY1LCAweDgzLCAweGUwLCAKKzB4NDQsIDB4MDgsIDB4ZjAsIDB4ODAsIDB4MDksIDB4MTIsIDB4MWMsIDB4YjMsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4ZTQsIDB4ZmYsIAorMHgwMiwgMHgzMSwgMHhiMSwgMHhlNSwgMHgzNSwgMHgzMCwgMHhlNywgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhlNSwgMHgzYywgMHg0NSwgMHgzYiwgMHg2MCwgCisweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDkwLCAweGZhLCAweGI2LCAweGUwLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDEyLCAweDFjLCAweGM5LCAKKzB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZTUsIDB4MzUsIDB4MzAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4OTAsIDB4ZmEsIDB4YmIsIAorMHhlMCwgMHg5MCwgMHhmZiwgMHhmZiwgMHhmMCwgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHgzNSwgMHgwMSwgMHg4MCwgMHgwMywgMHg1MywgMHgzNSwgMHhmZSwgCisweGU0LCAweGZmLCAweDAyLCAweDMxLCAweGIxLCAweGU1LCAweDM1LCAweDIwLCAweGU3LCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGU1LCAweDNjLCAweDQ1LCAKKzB4M2IsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4MTIsIDB4MWMsIDB4YzksIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4OTAsIDB4ZmEsIAorMHhiYSwgMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgMHhmZCwgMHhlYywgMHgyNCwgMHhmZSwgMHg2MCwgMHgzYSwgMHgxNCwgMHg2MCwgMHg3NSwgMHgyNCwgMHgwMiwgCisweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGVkLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDEyLCAweDFjLCAweDMwLCAweDEyLCAweDFkLCAKKzB4NWQsIDB4N2QsIDB4MDMsIDB4MTIsIDB4MGYsIDB4NmQsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4MTIsIDB4MGYsIDB4MmEsIDB4OTAsIDB4ZmEsIAorMHhiMywgMHhlMCwgMHhmZCwgMHhhMywgMHgxMiwgMHgxYywgMHg3YiwgMHgxMiwgMHgwZiwgMHg4OSwgMHg1MCwgMHgwMiwgMHg4MCwgMHgwNCwgMHhhZSwgMHgzYiwgCisweGFmLCAweDNjLCAweDAyLCAweDBmLCAweGJhLCAweDEyLCAweDFjLCAweDMwLCAweDkwLCAweGY5LCAweDE1LCAweGUwLCAweDMwLCAweGU0LCAweDBkLCAweDEyLCAKKzB4MWQsIDB4NWQsIDB4N2QsIDB4MTQsIDB4MTIsIDB4MGYsIDB4NmQsIDB4NjAsIDB4MTAsIDB4MDIsIDB4MGYsIDB4MjYsIDB4MTIsIDB4MWQsIDB4NWQsIDB4N2QsIAorMHgwNCwgMHgxMiwgMHgwZiwgMHhjMSwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHgxMiwgMHgwZiwgMHgyYSwgMHg5MCwgMHhmYSwgMHhiMywgMHhlMCwgCisweGZkLCAweGEzLCAweDEyLCAweDFjLCAweDdiLCAweDEyLCAweDBmLCAweDg5LCAweDUwLCAweDAyLCAweDgwLCAweDA0LCAweGFlLCAweDNiLCAweGFmLCAweDNjLCAKKzB4MDIsIDB4MGYsIDB4YmEsIDB4MTIsIDB4MWQsIDB4NWQsIDB4N2QsIDB4MDUsIDB4MTIsIDB4MGYsIDB4YzEsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIAorMHg3YiwgMHgwMSwgMHg3YSwgMHhmYSwgMHg3OSwgMHhiMywgMHgxMiwgMHgxYywgMHg3OCwgMHg3ZCwgMHgwMSwgMHgxMiwgMHgyNSwgMHhkNywgMHg5MCwgMHhmYSwgCisweGI0LCAweGU0LCAweDc1LCAweGYwLCAweDAzLCAweDEyLCAweDFhLCAweDZjLCAweDkwLCAweGZhLCAweGJiLCAweGUwLCAweDkwLCAweGZhLCAweGIyLCAweGYwLCAKKzB4ZTQsIDB4ZjUsIDB4NGMsIDB4OTAsIDB4ZmEsIDB4YjIsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4NGMsIDB4YzMsIDB4OWYsIDB4NTAsIDB4MjQsIDB4MTIsIDB4MWMsIAorMHg3MiwgMHgxMiwgMHgwZiwgMHhjYywgMHhmZiwgMHhmZCwgMHg5MCwgMHhmYSwgMHhiNCwgMHhlNCwgMHg4ZCwgMHhmMCwgMHgxMiwgMHgxYSwgMHg2YywgMHg5MCwgCisweGZhLCAweGIzLCAweGUwLCAweGMzLCAweDlmLCAweGYwLCAweGQzLCAweDk0LCAweDAwLCAweDUwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDA1LCAweDRjLCAKKzB4ODAsIDB4ZDEsIDB4MTIsIDB4MWMsIDB4NzIsIDB4MTIsIDB4MGYsIDB4Y2MsIDB4MjQsIDB4ZmUsIDB4ZmYsIDB4OTAsIDB4ZmEsIDB4YjMsIDB4ZjAsIDB4ZmQsIAorMHhhMywgMHhlNCwgMHg3NSwgMHhmMCwgMHgwMiwgMHgxMiwgMHgxYSwgMHg2YywgMHg3YSwgMHhmOSwgMHg3OSwgMHg2ZiwgMHg3YiwgMHgwMSwgMHg4YiwgMHgzNiwgCisweDhhLCAweDM3LCAweDg5LCAweDM4LCAweGU5LCAweDI0LCAweDAyLCAweGY5LCAweGU0LCAweDNhLCAweGZhLCAweDEyLCAweDFjLCAweDc4LCAweDEyLCAweDI1LCAKKzB4ZDcsIDB4OGYsIDB4NGMsIDB4MDUsIDB4NGMsIDB4MDUsIDB4NGMsIDB4MTIsIDB4MWMsIDB4MTEsIDB4ZTUsIDB4NGMsIDB4MTIsIDB4MWEsIDB4MzgsIDB4MTIsIAorMHgxYywgMHgxMSwgMHg5MCwgMHgwMCwgMHgwMSwgMHg3NCwgMHgwMywgMHgxMiwgMHgxYSwgMHg0YSwgMHhhZiwgMHg0YywgMHg3ZSwgMHgwMCwgMHhjMywgMHhlZiwgCisweDk1LCAweDNjLCAweGVlLCAweDk1LCAweDNiLCAweDUwLCAweDAyLCAweDgwLCAweDA0LCAweGFlLCAweDNiLCAweGFmLCAweDNjLCAweDhlLCAweDM5LCAweDhmLCAKKzB4M2EsIDB4MDIsIDB4MmMsIDB4MDcsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZTUsIDB4MzUsIDB4MjAsIDB4ZTcsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZTUsIAorMHgzYywgMHg2NCwgMHgwMSwgMHg0NSwgMHgzYiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHg5MCwgMHhmYSwgMHhiNiwgMHhlMCwgMHg2MCwgMHgwMywgCisweDAyLCAweDBmLCAweDI2LCAweDkwLCAweGZhLCAweGJhLCAweGUwLCAweDcwLCAweDAyLCAweGEzLCAweGUwLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAKKzB4MTIsIDB4MWMsIDB4YzksIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZTUsIDB4MzUsIDB4MjAsIDB4ZTAsIDB4MDYsIDB4MjAsIDB4ZTEsIDB4MDMsIAorMHgwMiwgMHgwZiwgMHgyNiwgMHg3NSwgMHgzNiwgMHgwMCwgMHg3NSwgMHgzNywgMHgwMCwgMHg3NSwgMHgzOCwgMHgzMiwgMHgwMiwgMHgwZiwgMHhhOSwgMHhlNSwgCisweDM1LCAweDMwLCAweGU3LCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGU1LCAweDNjLCAweDQ1LCAweDNiLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAKKzB4OTAsIDB4ZmEsIDB4YjYsIDB4ZTAsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZDMsIDB4OTAsIDB4ZmEsIDB4YmIsIDB4ZTAsIDB4OTQsIDB4MDEsIAorMHg5MCwgMHhmYSwgMHhiYSwgMHhlMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHgxMiwgMHgxYywgMHhjOSwgMHg2MCwgMHgwMywgCisweDAyLCAweDBmLCAweDI2LCAweGU1LCAweDM1LCAweDIwLCAweGUwLCAweDA2LCAweDIwLCAweGUxLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDkwLCAweGZhLCAKKzB4YmIsIDB4ZTAsIDB4ZjUsIDB4MzIsIDB4ZTUsIDB4MzIsIDB4NzAsIDB4MDgsIDB4NDMsIDB4MzUsIDB4MDEsIDB4NTMsIDB4MzUsIDB4ZmQsIDB4ODAsIDB4MDYsIAorMHg1MywgMHgzNSwgMHhmZSwgMHg0MywgMHgzNSwgMHgwMiwgMHhlNCwgMHhmZiwgMHgwMiwgMHgzMSwgMHhiMSwgMHhlNSwgMHgzNSwgMHgyMCwgMHhlNywgMHgwMywgCisweDAyLCAweDBmLCAweDI2LCAweGU1LCAweDNjLCAweDY0LCAweDAxLCAweDQ1LCAweDNiLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDkwLCAweGZhLCAKKzB4YjYsIDB4ZTAsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4OTAsIDB4ZmEsIDB4YmEsIDB4ZTAsIDB4NzAsIDB4MDIsIDB4YTMsIDB4ZTAsIDB4NjAsIAorMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHgxMiwgMHgxYywgMHhjOSwgMHg2NCwgMHgwMSwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhlNSwgMHgzNSwgCisweDIwLCAweGUxLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDdmLCAweDAxLCAweDAyLCAweDMxLCAweGIxLCAweGU1LCAweDM1LCAweDMwLCAweGU3LCAweDAzLCAKKzB4MDIsIDB4MGYsIDB4MjYsIDB4ZTUsIDB4M2MsIDB4NDUsIDB4M2IsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZDMsIDB4OTAsIDB4ZmEsIDB4YmIsIAorMHhlMCwgMHg5NCwgMHgwMCwgMHg5MCwgMHhmYSwgMHhiYSwgMHhlMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHgxMiwgMHgxYywgCisweGM5LCAweDY0LCAweDAxLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGU1LCAweDM1LCAweDIwLCAweGUxLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAKKzB4ZTQsIDB4ZmYsIDB4MDIsIDB4MzEsIDB4YjEsIDB4OTAsIDB4ZmYsIDB4MDEsIDB4MTIsIDB4MWQsIDB4NzQsIDB4ZWYsIDB4MTIsIDB4MWEsIDB4MzgsIDB4OTAsIAorMHhmYSwgMHhiNiwgMHgxMiwgMHgxZCwgMHg3NCwgMHg5MCwgMHgwMCwgMHgwMSwgMHhlZiwgMHgxMiwgMHgxYSwgMHg0YSwgMHg5MCwgMHgwMCwgMHgwMiwgMHhlNCwgCisweDEyLCAweDFhLCAweDRhLCAweDc0LCAweDAzLCAweDEyLCAweDFjLCAweDAyLCAweDkwLCAweGZhLCAweGJhLCAweGUwLCAweGZmLCAweGEzLCAweGUwLCAweDg1LCAKKzB4MzgsIDB4ODIsIDB4ODUsIDB4MzcsIDB4ODMsIDB4Y2YsIDB4ZjAsIDB4YTMsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4MDEsIDB4ZTAsIDB4MTIsIDB4MWIsIAorMHg0YywgMHgwOSwgMHg0YSwgMHgwMiwgMHgwOSwgMHg2YywgMHgwNCwgMHgwOSwgMHg4ZSwgMHgwNSwgMHgwOSwgMHhiYSwgMHgwNiwgMHgwOSwgMHhkOCwgMHgwNywgCisweDA5LCAweGY2LCAweDA4LCAweDBhLCAweDE0LCAweDA5LCAweDBhLCAweDMyLCAweDBiLCAweDBhLCAweGU3LCAweDgwLCAweDBkLCAweDZmLCAweDgxLCAweDBkLCAKKzB4YTAsIDB4ODIsIDB4MGIsIDB4MmUsIDB4ODMsIDB4MGIsIDB4NzcsIDB4ODQsIDB4MGIsIDB4OTYsIDB4ODUsIDB4MGIsIDB4ZGIsIDB4ODYsIDB4MGMsIDB4MjYsIAorMHg4NywgMHgwYywgMHhiNywgMHg4OCwgMHgwZCwgMHg0MiwgMHg4OSwgMHgwYSwgMHg1MCwgMHg5MiwgMHgwYSwgMHg1MCwgMHg5MywgMHgwZSwgMHg1MywgMHhjMCwgCisweDBlLCAweDdmLCAweGMxLCAweDBlLCAweDkwLCAweGMyLCAweDAwLCAweDAwLCAweDBmLCAweDE1LCAweGU1LCAweDM1LCAweDIwLCAweGU3LCAweDA1LCAweDdmLCAKKzB4MDUsIDB4MDIsIDB4MzAsIDB4ZWMsIDB4MTIsIDB4MWMsIDB4YzEsIDB4NjAsIDB4MDMsIDB4MDQsIDB4NzAsIDB4MDksIDB4ZWYsIDB4ZmQsIDB4N2MsIDB4MDAsIAorMHg3ZiwgMHgwNywgMHgwMiwgMHgxMSwgMHgxNiwgMHhlNCwgMHhmZCwgMHg3ZiwgMHgwNywgMHgwMiwgMHgyZiwgMHgxOCwgMHhlNSwgMHgzNSwgMHgyMCwgMHhlNywgCisweDA1LCAweDdmLCAweDA1LCAweDAyLCAweDMwLCAweGVjLCAweDEyLCAweDFjLCAweGMxLCAweDYwLCAweDAzLCAweDA0LCAweDcwLCAweDA5LCAweGVmLCAweGZkLCAKKzB4N2MsIDB4MDAsIDB4N2YsIDB4MGMsIDB4MDIsIDB4MTEsIDB4MTYsIDB4ZTQsIDB4ZmQsIDB4N2YsIDB4MDcsIDB4MDIsIDB4MmYsIDB4MTgsIDB4ZTUsIDB4MzUsIAorMHgzMCwgMHhlNywgMHgwMywgMHgwMiwgMHgwZiwgMHgyOSwgMHgxMiwgMHgxZCwgMHg5MiwgMHg1MCwgMHgwNiwgMHhlNSwgMHgzYywgMHg0NSwgMHgzYiwgMHg3MCwgCisweDA1LCAweDdmLCAweDAyLCAweDAyLCAweDMwLCAweGVjLCAweDkwLCAweGZhLCAweGI2LCAweGUwLCAweDI0LCAweGZlLCAweDI0LCAweGZkLCAweDUwLCAweDAyLCAKKzB4ODAsIDB4MDMsIDB4MDIsIDB4MzEsIDB4NmYsIDB4N2YsIDB4MDcsIDB4MDIsIDB4MzAsIDB4ZWMsIDB4ZTUsIDB4MzUsIDB4MzAsIDB4ZTcsIDB4MDMsIDB4MDIsIAorMHgwZiwgMHgyOSwgMHgxMiwgMHgxYywgMHhjMSwgMHg2MCwgMHgwMywgMHgwNCwgMHg3MCwgMHgwOSwgMHhlZiwgMHhmZCwgMHg3YywgMHgwMCwgMHg3ZiwgMHgwOCwgCisweDAyLCAweDExLCAweDE2LCAweDdmLCAweDA3LCAweDAyLCAweDMwLCAweGVjLCAweGU1LCAweDM1LCAweDMwLCAweGU3LCAweDAzLCAweDAyLCAweDBmLCAweDI5LCAKKzB4MTIsIDB4MWMsIDB4YzEsIDB4NjAsIDB4MDMsIDB4MDQsIDB4NzAsIDB4MDksIDB4ZWYsIDB4ZmQsIDB4N2MsIDB4MDAsIDB4N2YsIDB4MDksIDB4MDIsIDB4MTEsIAorMHgxNiwgMHg3ZiwgMHgwNywgMHgwMiwgMHgzMCwgMHhlYywgMHhlNSwgMHgzNSwgMHgzMCwgMHhlNywgMHgwMywgMHgwMiwgMHgwZiwgMHgyOSwgMHgxMiwgMHgxYywgCisweGMxLCAweDYwLCAweDAzLCAweDA0LCAweDcwLCAweDA5LCAweGVmLCAweGZkLCAweDdjLCAweDAwLCAweDdmLCAweDBhLCAweDAyLCAweDExLCAweDE2LCAweDdmLCAKKzB4MDcsIDB4MDIsIDB4MzAsIDB4ZWMsIDB4ZTUsIDB4MzUsIDB4MzAsIDB4ZTcsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjksIDB4MTIsIDB4MWMsIDB4YzEsIDB4NjAsIAorMHgwMywgMHgwNCwgMHg3MCwgMHgwOSwgMHhlZiwgMHhmZCwgMHg3YywgMHgwMCwgMHg3ZiwgMHgwYiwgMHgwMiwgMHgxMSwgMHgxNiwgMHg3ZiwgMHgwNywgMHgwMiwgCisweDMwLCAweGVjLCAweGU1LCAweDM1LCAweDMwLCAweGU3LCAweDAzLCAweDAyLCAweDBmLCAweDI5LCAweDEyLCAweDFjLCAweGMxLCAweDYwLCAweDAzLCAweDA0LCAKKzB4NzAsIDB4MDksIDB4ZWYsIDB4ZmQsIDB4N2MsIDB4MDAsIDB4N2YsIDB4MGUsIDB4MDIsIDB4MTEsIDB4MTYsIDB4N2YsIDB4MDcsIDB4MDIsIDB4MzAsIDB4ZWMsIAorMHhlNSwgMHgzNSwgMHgzMCwgMHhlNywgMHg1NiwgMHgxMiwgMHgxYywgMHhjOSwgMHg3MCwgMHg0YSwgMHg5MCwgMHhmZiwgMHgwMiwgMHhlMCwgMHhmNSwgMHg0YywgCisweGU1LCAweDRjLCAweGI0LCAweDgyLCAweDA1LCAweDc1LCAweDRjLCAweDYxLCAweDgwLCAweDEyLCAweGU1LCAweDRjLCAweGI0LCAweDgzLCAweDA1LCAweDc1LCAKKzB4NGMsIDB4NjIsIDB4ODAsIDB4MDgsIDB4ZTUsIDB4NGMsIDB4YzQsIDB4NTQsIDB4ZjAsIDB4MDQsIDB4ZjUsIDB4NGMsIDB4MTIsIDB4MWIsIDB4NzIsIDB4MTIsIAorMHgxZCwgMHg4YiwgMHgxMiwgMHgyNSwgMHgzOSwgMHgxMiwgMHgxYywgMHhkOSwgMHgxMiwgMHgxYSwgMHgwYiwgMHg2MCwgMHgwNSwgMHgxMiwgMHgzMSwgMHhiZCwgCisweDgwLCAweDA2LCAweDg1LCAweDMzLCAweDM5LCAweDg1LCAweDM0LCAweDNhLCAweDc1LCAweDM2LCAweDAxLCAweDc1LCAweDM3LCAweGY5LCAweDc1LCAweDM4LCAKKzB4NzIsIDB4MDIsIDB4MmMsIDB4MDcsIDB4ZTQsIDB4ZmQsIDB4N2YsIDB4MDUsIDB4MDIsIDB4MmYsIDB4MTgsIDB4MTIsIDB4MWMsIDB4YzksIDB4NjAsIDB4MDUsIAorMHg3ZiwgMHgwNSwgMHgwMiwgMHgzMCwgMHhlYywgMHgxMiwgMHgxZCwgMHg5MiwgMHg0MCwgMHgwNSwgMHg3ZiwgMHgwMywgMHgwMiwgMHgzMCwgMHhlYywgMHg5MCwgCisweGZmLCAweDAyLCAweGUwLCAweGY1LCAweDRjLCAweGU1LCAweDRjLCAweGI0LCAweDgyLCAweDA1LCAweDc1LCAweDRjLCAweDYxLCAweDgwLCAweDEyLCAweGU1LCAKKzB4NGMsIDB4YjQsIDB4ODMsIDB4MDUsIDB4NzUsIDB4NGMsIDB4NjIsIDB4ODAsIDB4MDgsIDB4ZTUsIDB4NGMsIDB4YzQsIDB4NTQsIDB4ZjAsIDB4MDQsIDB4ZjUsIAorMHg0YywgMHgxMiwgMHgxYiwgMHg3MiwgMHgwMiwgMHgzMSwgMHg2ZiwgMHgxMiwgMHgxZCwgMHg5YywgMHgxMiwgMHgyYSwgMHgwNiwgMHgxMiwgMHgxYywgMHg4MywgCisweGUwLCAweDU0LCAweDdmLCAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDkwLCAweGZhLCAweGI3LCAweGYwLCAweDc4LCAweDY4LCAweDEyLCAweDFiLCAKKzB4MjgsIDB4OTAsIDB4MDAsIDB4MDIsIDB4MTIsIDB4MWEsIDB4MGIsIDB4MzAsIDB4ZTcsIDB4ZjIsIDB4OTAsIDB4MDAsIDB4MDIsIDB4ZTQsIDB4MTIsIDB4MWEsIAorMHg0YSwgMHg5MCwgMHhmYSwgMHhiNywgMHhlMCwgMHg0NCwgMHg4MCwgMHhmZiwgMHhmMCwgMHg3OCwgMHg3YywgMHhlNiwgMHhmYywgMHgwOCwgMHhlNiwgMHg4YywgCisweDgzLCAweDEyLCAweDFjLCAweDhiLCAweGVmLCAweGYwLCAweDEyLCAweDMxLCAweGM3LCAweGU0LCAweGZmLCAweDAyLCAweDMwLCAweGVjLCAweDkwLCAweGZhLCAKKzB4YjYsIDB4ZTAsIDB4NjQsIDB4MDEsIDB4NzAsIDB4MWYsIDB4OTAsIDB4ZmEsIDB4YmEsIDB4ZTAsIDB4ZmYsIDB4N2UsIDB4MDAsIDB4NzAsIDB4MDYsIDB4YTMsIAorMHhlMCwgMHhmNSwgMHg5MCwgMHg4MCwgMHgyZCwgMHhjMiwgMHhhZiwgMHhlZiwgMHhmNCwgMHg1MiwgMHg5MCwgMHg5MCwgMHhmYSwgMHhiYiwgMHhlMCwgMHg0MiwgCisweDkwLCAweGQyLCAweGFmLCAweDgwLCAweDFkLCAweDkwLCAweGZhLCAweGJhLCAweGUwLCAweGZmLCAweDdlLCAweDAwLCAweDcwLCAweDA2LCAweGEzLCAweGUwLCAKKzB4ZjUsIDB4YjAsIDB4ODAsIDB4MGUsIDB4YzIsIDB4YWYsIDB4ZWYsIDB4ZjQsIDB4NTIsIDB4YjAsIDB4OTAsIDB4ZmEsIDB4YmIsIDB4ZTAsIDB4NDIsIDB4YjAsIAorMHhkMiwgMHhhZiwgMHhlNCwgMHhmZiwgMHgwMiwgMHgzMCwgMHhlYywgMHgxMiwgMHgxYywgMHgzMCwgMHg5MCwgMHhmYSwgMHhiNiwgMHhlMCwgMHhiNCwgMHgwMSwgCisweDBhLCAweDEyLCAweDFjLCAweDExLCAweGU1LCAweDkwLCAweDEyLCAweDFhLCAweDM4LCAweDgwLCAweDA4LCAweDEyLCAweDFjLCAweDExLCAweGU1LCAweGIwLCAKKzB4MTIsIDB4MWEsIDB4MzgsIDB4MDIsIDB4MGYsIDB4YTksIDB4OTAsIDB4ZmEsIDB4YjYsIDB4ZTAsIDB4ZmYsIDB4MjQsIDB4MTIsIDB4MTIsIDB4MWMsIDB4NDEsIAorMHgyMCwgMHhlMSwgMHgzMywgMHgxMiwgMHgxYywgMHhkMCwgMHhlZiwgMHgyNCwgMHhmYywgMHg2MCwgMHgxOCwgMHgwNCwgMHg3MCwgMHgyOCwgMHg5MCwgMHhmYSwgCisweGI3LCAweGUwLCAweDYwLCAweDA5LCAweDkwLCAweGZmLCAweGE0LCAweGUwLCAweDQ0LCAweDEwLCAweGYwLCAweDgwLCAweDE5LCAweDEyLCAweDFkLCAweGE2LCAKKzB4ZjAsIDB4ODAsIDB4MTMsIDB4OTAsIDB4ZmEsIDB4YjcsIDB4ZTAsIDB4NjAsIDB4MDksIDB4OTAsIDB4ZmYsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MTAsIDB4ZjAsIAorMHg4MCwgMHgwNCwgMHgxMiwgMHgxZCwgMHhhZCwgMHhmMCwgMHhlNCwgMHhmZiwgMHgwMiwgMHgzMCwgMHhlYywgMHg5MCwgMHhmYSwgMHhiNiwgMHhlMCwgMHhmZiwgCisweDI0LCAweDEyLCAweDEyLCAweDFjLCAweDQxLCAweDIwLCAweGUxLCAweDM5LCAweDEyLCAweDFjLCAweGQwLCAweGVmLCAweDI0LCAweGZjLCAweDYwLCAweDFiLCAKKzB4MDQsIDB4NzAsIDB4MmUsIDB4OTAsIDB4ZmEsIDB4YjcsIDB4ZTAsIDB4NjAsIDB4MDksIDB4OTAsIDB4ZmYsIDB4YTQsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIAorMHg4MCwgMHgxZiwgMHg5MCwgMHhmZiwgMHhhNCwgMHhlMCwgMHg1NCwgMHhkZiwgMHhmMCwgMHg4MCwgMHgxNiwgMHg5MCwgMHhmYSwgMHhiNywgMHhlMCwgMHg2MCwgCisweDA5LCAweDkwLCAweGZmLCAweGI0LCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAweDgwLCAweDA3LCAweDkwLCAweGZmLCAweGI0LCAweGUwLCAweDU0LCAweGRmLCAKKzB4ZjAsIDB4ZTQsIDB4ZmYsIDB4MDIsIDB4MzAsIDB4ZWMsIDB4MTIsIDB4MWMsIDB4ZDAsIDB4MTIsIDB4MWMsIDB4YzEsIDB4NjAsIDB4NGQsIDB4MDQsIDB4NjAsIAorMHgwMywgMHgwMiwgMHgwYywgMHhiMiwgMHg5MCwgMHhmYSwgMHhiNywgMHhlMCwgMHg2MCwgMHgwZiwgMHg5MCwgMHhmZiwgMHhhNCwgMHgxMiwgMHgxYywgMHgzYSwgCisweDMwLCAweGUxLCAweDZmLCAweDEyLCAweDFkLCAweDdjLCAweDAyLCAweDBjLCAweGIyLCAweDkwLCAweGZmLCAweGE0LCAweGUwLCAweDU0LCAweGZiLCAweDEyLCAKKzB4MWMsIDB4M2QsIDB4ZmUsIDB4MzAsIDB4ZTEsIDB4NWMsIDB4MzAsIDB4ZTIsIDB4MTEsIDB4MzAsIDB4YjQsIDB4MDUsIDB4MTIsIDB4MWQsIDB4N2MsIDB4ODAsIAorMHg1MSwgMHg5MCwgMHhmZiwgMHhhNCwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHg4MCwgMHg0OCwgMHgzMCwgMHg5NSwgMHgwNSwgMHgxMiwgMHgxZCwgMHg3YywgCisweDgwLCAweDQwLCAweDkwLCAweGZmLCAweGE0LCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweDgwLCAweDM3LCAweDkwLCAweGZhLCAweGI3LCAweGUwLCAweDYwLCAKKzB4MTIsIDB4OTAsIDB4ZmYsIDB4YjQsIDB4MTIsIDB4MWMsIDB4M2EsIDB4MzAsIDB4ZTEsIDB4MjgsIDB4OTAsIDB4ZmYsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDIsIAorMHhmMCwgMHg4MCwgMHgxZiwgMHg5MCwgMHhmZiwgMHhiNCwgMHhlMCwgMHg1NCwgMHhmYiwgMHgxMiwgMHgxYywgMHgzZCwgMHgzMCwgMHhlMSwgMHgxMywgMHgzMCwgCisweDkzLCAweDA5LCAweDkwLCAweGZmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDgwLCAweDA3LCAweDkwLCAweGZmLCAweGI0LCAweGUwLCAweDU0LCAKKzB4ZmQsIDB4ZjAsIDB4ZTQsIDB4ZmYsIDB4MDIsIDB4MzAsIDB4ZWMsIDB4MTIsIDB4MWMsIDB4ZDAsIDB4OTAsIDB4ZmEsIDB4YjYsIDB4ZTAsIDB4MjQsIDB4ZmMsIAorMHg2MCwgMHg0MCwgMHgwNCwgMHg3MCwgMHg3OCwgMHg5MCwgMHhmYSwgMHhiNywgMHhlMCwgMHg2MCwgMHgxZCwgMHg5MCwgMHhmZiwgMHhhMiwgMHhlMCwgMHg0NCwgCisweDQwLCAweGYwLCAweGEzLCAweGUwLCAweGZmLCAweDMwLCAweGU3LCAweDY1LCAweGQyLCAweDAzLCAweGEzLCAweGUwLCAweDU0LCAweGRmLCAweGYwLCAweDkwLCAKKzB4ZmYsIDB4YTMsIDB4ZWYsIDB4NTQsIDB4N2YsIDB4ZjAsIDB4ODAsIDB4NTUsIDB4MzAsIDB4MDMsIDB4MGUsIDB4OTAsIDB4ZmYsIDB4YTMsIDB4ZTAsIDB4NDQsIAorMHg4MCwgMHhmMCwgMHhjMiwgMHgwMywgMHhhMywgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHg5MCwgMHhmZiwgMHhhMiwgMHhlMCwgMHg1NCwgMHhiZiwgMHhmMCwgCisweDgwLCAweDNiLCAweDkwLCAweGZhLCAweGI3LCAweGUwLCAweDYwLCAweDFkLCAweDkwLCAweGZmLCAweGIyLCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweGEzLCAKKzB4ZTAsIDB4ZmYsIDB4MzAsIDB4ZTcsIDB4MjgsIDB4ZDIsIDB4MDQsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4ZGYsIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4YjMsIDB4ZWYsIAorMHg1NCwgMHg3ZiwgMHhmMCwgMHg4MCwgMHgxOCwgMHgzMCwgMHgwNCwgMHgwZSwgMHg5MCwgMHhmZiwgMHhiMywgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHhjMiwgCisweDA0LCAweGEzLCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAweDkwLCAweGZmLCAweGIyLCAweGUwLCAweDU0LCAweGJmLCAweGYwLCAweGU0LCAweGZmLCAweDAyLCAKKzB4MzAsIDB4ZWMsIDB4MTIsIDB4MWMsIDB4MzAsIDB4OTAsIDB4ZmEsIDB4YjYsIDB4ZTAsIDB4MjQsIDB4ZmMsIDB4NjAsIDB4MGYsIDB4MDQsIDB4NzAsIDB4MTYsIAorMHg5MCwgMHhmZiwgMHhhNiwgMHhlMCwgMHgxMiwgMHgxYywgMHgxMSwgMHgxMiwgMHgxYSwgMHgzOCwgMHg4MCwgMHgwYSwgMHg5MCwgMHhmZiwgMHhiNiwgMHhlMCwgCisweDEyLCAweDFjLCAweDExLCAweDEyLCAweDFhLCAweDM4LCAweDc1LCAweDM5LCAweDAwLCAweDc1LCAweDNhLCAweDAxLCAweDAyLCAweDJjLCAweDA3LCAweGU0LCAKKzB4ZmYsIDB4MTIsIDB4MzAsIDB4ZWMsIDB4MTIsIDB4MWQsIDB4MzcsIDB4N2YsIDB4MDMsIDB4MTIsIDB4MTIsIDB4MTksIDB4OTAsIDB4ZjksIDB4MTUsIDB4ZTAsIAorMHgzMCwgMHhlNCwgMHgwOCwgMHg5MCwgMHhmZiwgMHg5MywgMHg3NCwgMHg4MCwgMHhmMCwgMHg4MCwgMHgxMCwgMHg5MCwgMHhmZiwgMHhmYywgMHhlMCwgMHg1NCwgCisweDdmLCAweGYwLCAweDdmLCAweGZmLCAweDdlLCAweDAwLCAweDEyLCAweDMwLCAweDE2LCAweGMyLCAweDkwLCAweGMyLCAweGFmLCAweDAwLCAweDgwLCAweGZkLCAKKzB4ZTQsIDB4ZjUsIDB4NGUsIDB4ZjUsIDB4NGYsIDB4OTAsIDB4ZmEsIDB4YmMsIDB4NzQsIDB4M2UsIDB4ZjAsIDB4YTMsIDB4ZTQsIDB4ZjAsIDB4OTAsIDB4ZmEsIAorMHhiNCwgMHhmMCwgMHhhMywgMHg3NCwgMHgxNSwgMHhmMCwgMHhlMCwgMHg1NCwgMHgzZiwgMHhmZiwgMHhjMywgMHg3NCwgMHg0MCwgMHg5ZiwgMHg5MCwgMHhmYSwgCisweGI5LCAweGYwLCAweGQzLCAweDk0LCAweDAwLCAweGU0LCAweDk0LCAweDNlLCAweDQwLCAweDA4LCAweDkwLCAweGZhLCAweGJkLCAweGUwLCAweDkwLCAweGZhLCAKKzB4YjksIDB4ZjAsIDB4MTIsIDB4MGYsIDB4NTAsIDB4ZTUsIDB4MzEsIDB4NDUsIDB4MzAsIDB4NzAsIDB4NzMsIDB4MTIsIDB4MWMsIDB4NGEsIDB4OTAsIDB4ZmEsIAorMHhiYywgMHgxMiwgMHgxZCwgMHg1NiwgMHg2MCwgMHgyNywgMHhkMywgMHhlZiwgMHg5NCwgMHg0MCwgMHhlZSwgMHg5NCwgMHgwMCwgMHg0MCwgMHgwOCwgMHg5MCwgCisweGZhLCAweGI5LCAweDc0LCAweDQwLCAweGYwLCAweDgwLCAweDA4LCAweDkwLCAweGZhLCAweGJkLCAweGUwLCAweDkwLCAweGZhLCAweGI5LCAweGYwLCAweDEyLCAKKzB4MGYsIDB4NTAsIDB4ZTUsIDB4MzEsIDB4NDUsIDB4MzAsIDB4NzAsIDB4NDYsIDB4MTIsIDB4MWMsIDB4NGEsIDB4ODAsIDB4ZDEsIDB4NzUsIDB4NGMsIDB4MDIsIAorMHg5MCwgMHhmYSwgMHhiYywgMHhlNCwgMHhmMCwgMHhhMywgMHgwNCwgMHhmMCwgMHg5MCwgMHhmYSwgMHhiNCwgMHhlNCwgMHhmMCwgMHhhMywgMHg3NCwgMHgwZiwgCisweGYwLCAweDdiLCAweDAwLCAweDdhLCAweDAwLCAweDc5LCAweDRjLCAweDkwLCAweGZhLCAweGJkLCAweGUwLCAweGY1LCAweDRhLCAweDdkLCAweDBmLCAweDdjLCAKKzB4MDAsIDB4MTIsIDB4MjgsIDB4OWYsIDB4NzUsIDB4MzAsIDB4MDAsIDB4OGYsIDB4MzEsIDB4N2IsIDB4MDAsIDB4N2EsIDB4MDAsIDB4NzksIDB4NGMsIDB4ZTQsIAorMHhmNSwgMHgyZCwgMHhmNSwgMHgyZSwgMHg3ZCwgMHgwMSwgMHgxMiwgMHgyNSwgMHhkNywgMHhlNCwgMHhmNSwgMHgzMCwgMHhmNSwgMHgzMSwgMHhhZiwgMHgzMSwgCisweDAyLCAweDMwLCAweGVjLCAweDEyLCAweDFjLCAweGQwLCAweDMwLCAweGU3LCAweDEwLCAweGUwLCAweDU0LCAweDBmLCAweDkwLCAweGY5LCAweDY0LCAweGYwLCAKKzB4ZDMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTUsIDB4YzIsIDB4OTUsIDB4ODAsIDB4MTEsIDB4OTAsIDB4ZmEsIDB4YjcsIDB4ZTAsIDB4NTQsIDB4MGYsIDB4OTAsIAorMHhmOSwgMHg2MywgMHhmMCwgMHhkMywgMHg5NCwgMHgwMCwgMHg0MCwgMHgwMiwgMHhjMiwgMHg5NCwgMHhlNCwgMHhmZiwgMHgwMiwgMHgzMCwgMHhlYywgMHgxMiwgCisweDFkLCAweDljLCAweGJmLCAweDAxLCAweDA0LCAweGQyLCAweDkzLCAweDgwLCAweDAyLCAweGMyLCAweDkzLCAweGU0LCAweGZmLCAweDAyLCAweDMwLCAweGVjLCAKKzB4MTIsIDB4MWMsIDB4ZDAsIDB4NTQsIDB4MDMsIDB4MTQsIDB4NjAsIDB4MGEsIDB4MTQsIDB4NjAsIDB4MGYsIDB4MTQsIDB4NjAsIDB4MDgsIDB4MjQsIDB4MDMsIAorMHg3MCwgMHgyYiwgMHhkMiwgMHg5MSwgMHg4MCwgMHgyNywgMHhjMiwgMHg5MSwgMHg4MCwgMHgyMywgMHgxMiwgMHgxZCwgMHhhNiwgMHgxMiwgMHgwZiwgMHg3OCwgCisweDYwLCAweDA0LCAweGQyLCAweDkxLCAweDgwLCAweDE3LCAweDkwLCAweGZmLCAweGE0LCAweGUwLCAweDQ0LCAweDEwLCAweDEyLCAweDBmLCAweDc4LCAweGZmLCAKKzB4YmYsIDB4YTAsIDB4MDQsIDB4YzIsIDB4OTEsIDB4ODAsIDB4MDIsIDB4ZDIsIDB4OTEsIDB4MTIsIDB4MWQsIDB4YTYsIDB4ZjAsIDB4OTAsIDB4ZmEsIDB4YjcsIAorMHhlMCwgMHg1NCwgMHgwYywgMHhmZiwgMHgxMywgMHgxMywgMHg1NCwgMHgzZiwgMHgxNCwgMHg2MCwgMHgwYSwgMHgxNCwgMHg2MCwgMHgwZiwgMHgxNCwgMHg2MCwgCisweDA4LCAweDI0LCAweDAzLCAweDcwLCAweDJiLCAweGQyLCAweDkyLCAweDgwLCAweDI3LCAweGMyLCAweDkyLCAweDgwLCAweDIzLCAweDEyLCAweDFkLCAweGFkLCAKKzB4MTIsIDB4MGYsIDB4OTgsIDB4NjAsIDB4MDQsIDB4ZDIsIDB4OTIsIDB4ODAsIDB4MTcsIDB4OTAsIDB4ZmYsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MTAsIDB4MTIsIAorMHgwZiwgMHg5OCwgMHhmZiwgMHhiZiwgMHhhMCwgMHgwNCwgMHhjMiwgMHg5MiwgMHg4MCwgMHgwMiwgMHhkMiwgMHg5MiwgMHgxMiwgMHgxZCwgMHhhZCwgMHhmMCwgCisweGU0LCAweGZmLCAweDAyLCAweDMwLCAweGVjLCAweGU1LCAweDM1LCAweDMwLCAweGU3LCAweDA3LCAweGU0LCAweGZkLCAweDdmLCAweDA1LCAweDAyLCAweDJmLCAKKzB4MTgsIDB4N2YsIDB4MDUsIDB4MDIsIDB4MzAsIDB4ZWMsIDB4MTIsIDB4MzEsIDB4YmQsIDB4MjIsIDB4N2IsIDB4MDEsIDB4N2EsIDB4ZmEsIDB4NzksIDB4YjMsIAorMHg5MCwgMHhmYSwgMHhiNCwgMHhlMCwgMHhmNSwgMHgyZCwgMHhhMywgMHhlMCwgMHhmNSwgMHgyZSwgMHg3ZCwgMHgwMSwgMHgxMiwgMHgyNSwgMHhkNywgMHg5MCwgCisweGZhLCAweGI0LCAweGU0LCAweDc1LCAweGYwLCAweDAzLCAweDEyLCAweDFhLCAweDZjLCAweGFiLCAweDM2LCAweGFhLCAweDM3LCAweGE5LCAweDM4LCAweDIyLCAKKzB4YWEsIDB4NGUsIDB4YTksIDB4NGYsIDB4N2IsIDB4ZmYsIDB4OTAsIDB4ZmEsIDB4YjQsIDB4ZTAsIDB4ZmMsIDB4YTMsIDB4ZTAsIDB4ZmQsIDB4OTAsIDB4ZmEsIAorMHhiOSwgMHhlMCwgMHhmNSwgMHg0YSwgMHgxMiwgMHgyOCwgMHg5ZiwgMHg3NSwgMHgzMCwgMHgwMCwgMHg4ZiwgMHgzMSwgMHgyMiwgMHgxMiwgMHgyMiwgMHhhMCwgCisweDdlLCAweDAwLCAweDhlLCAweDMwLCAweDhmLCAweDMxLCAweGVmLCAweDIyLCAweGYwLCAweDdmLCAweDAxLCAweDEyLCAweDEyLCAweDE5LCAweDkwLCAweGZmLCAKKzB4YTYsIDB4ZTAsIDB4OTAsIDB4ZmEsIDB4YjgsIDB4ZjAsIDB4NTQsIDB4YTAsIDB4MjIsIDB4MTIsIDB4MjUsIDB4ZDcsIDB4OGYsIDB4NGMsIDB4N2UsIDB4MDAsIAorMHhjMywgMHhlZiwgMHg5NSwgMHgzYywgMHhlZSwgMHg5NSwgMHgzYiwgMHgyMiwgMHhmMCwgMHg3ZiwgMHgwMSwgMHgxMiwgMHgxMiwgMHgxOSwgMHg5MCwgMHhmZiwgCisweGI2LCAweGUwLCAweDkwLCAweGZhLCAweGI4LCAweGYwLCAweDU0LCAweGEwLCAweDIyLCAweDc1LCAweDM5LCAweDAwLCAweDc1LCAweDNhLCAweDAxLCAweDAyLCAKKzB4MmMsIDB4MDcsIDB4OTAsIDB4ZmEsIDB4YjYsIDB4ZTAsIDB4ZmYsIDB4MDIsIDB4MzEsIDB4ODIsIDB4OGUsIDB4MzksIDB4OGYsIDB4M2EsIDB4MDIsIDB4MmMsIAorMHgwNywgMHgxMiwgMHgyMiwgMHhhMCwgMHg3ZSwgMHgwMCwgMHg4ZSwgMHgzMCwgMHg4ZiwgMHgzMSwgMHhlZiwgMHgyMiwgMHg3ZCwgMHgwMSwgMHgxMiwgMHgyNSwgCisweGQ3LCAweDkwLCAweGZhLCAweGIxLCAweGUwLCAweDIyLCAweGVmLCAweDkwLCAweGY4LCAweDA0LCAweGYwLCAweDIyLCAweGMwLCAweGE4LCAweGMyLCAweGFmLCAKKzB4ZWUsIDB4NjAsIDB4MGEsIDB4YzAsIDB4MDUsIDB4N2QsIDB4N2YsIDB4ZGQsIDB4ZmUsIDB4ZGUsIDB4ZmEsIDB4ZDAsIDB4MDUsIDB4ZWYsIDB4YzMsIDB4OTQsIAorMHgxNSwgMHg1MCwgMHgwMywgMHhkMCwgMHhhOCwgMHgyMiwgMHgxMywgMHg3MCwgMHgwMywgMHhkMCwgMHhhOCwgMHgyMiwgMHhmZiwgMHhkNSwgMHgwNywgMHhmZCwgCisweGQwLCAweGE4LCAweDIyLCAweGMwLCAweDAwLCAweGMwLCAweDAxLCAweGMwLCAweDAyLCAweGMwLCAweDA0LCAweGMwLCAweDA1LCAweGU1LCAweDNlLCAweDI0LCAKKzB4MDgsIDB4ZjgsIDB4ODYsIDB4MDUsIDB4NTMsIDB4MDUsIDB4N2YsIDB4N2MsIDB4ZmYsIDB4MTIsIDB4MTAsIDB4NzgsIDB4N2YsIDB4MDAsIDB4N2UsIDB4MDAsIAorMHhlNSwgMHg0MywgMHg2MCwgMHg0NiwgMHhmYywgMHg5MCwgMHhmOSwgMHgxYiwgMHhlMCwgMHg1NCwgMHg3ZiwgMHg2ZCwgMHg3MCwgMHgwZiwgMHhjMCwgMHg4MywgCisweGMwLCAweDgyLCAweGEzLCAweGUwLCAweGZlLCAweGEzLCAweGUwLCAweGZmLCAweGEzLCAweDE1LCAweDQzLCAweDgwLCAweDA3LCAweGEzLCAweGEzLCAweGEzLCAKKzB4ZGMsIDB4ZTYsIDB4ODAsIDB4MjYsIDB4ZGMsIDB4MDYsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ODAsIDB4MWUsIDB4ZTAsIDB4ZjgsIDB4YTMsIDB4ZTAsIAorMHhmOSwgMHhhMywgMHhlMCwgMHhmYSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhlOCwgMHhmMCwgMHhhMywgMHhlOSwgMHhmMCwgMHhhMywgMHhlYSwgMHhmMCwgCisweGEzLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGEzLCAweGEzLCAweGEzLCAweDgwLCAweGRhLCAweDEyLCAweDExLCAweDBmLCAweGQwLCAweDA1LCAweGQwLCAKKzB4MDQsIDB4ZDAsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4ZDAsIDB4MDAsIDB4MjIsIDB4ODUsIDB4YTgsIDB4NDQsIDB4NzUsIDB4YTgsIDB4ODgsIDB4ZWMsIDB4NzAsIAorMHgwMiwgMHg3YywgMHgzZiwgMHg4YywgMHgzZCwgMHgyMiwgMHhlNSwgMHgzZSwgMHgyNCwgMHgwOCwgMHhmOCwgMHg3NiwgMHgwMCwgMHgxMiwgMHgxMSwgMHg2NiwgCisweDgwLCAweGZiLCAweGMwLCAweDAwLCAweGMwLCAweDAxLCAweGMwLCAweDAyLCAweGMwLCAweDA0LCAweGMwLCAweDA2LCAweDdjLCAweGZmLCAweDEyLCAweDEwLCAKKzB4NzgsIDB4ZTUsIDB4NDMsIDB4NjAsIDB4NDIsIDB4ZmUsIDB4OTAsIDB4ZjksIDB4MWIsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4NmYsIDB4NzAsIDB4MGIsIDB4YzAsIAorMHg4MywgMHhjMCwgMHg4MiwgMHhhMywgMHhhMywgMHhhMywgMHgxNSwgMHg0MywgMHg4MCwgMHgwNywgMHhhMywgMHhhMywgMHhhMywgMHhkZSwgMHhlYSwgMHg4MCwgCisweDI2LCAweGRlLCAweDA2LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweDgwLCAweGQ4LCAweGUwLCAweGY4LCAweGEzLCAweGUwLCAweGY5LCAweGEzLCAweGUwLCAKKzB4ZmEsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZTgsIDB4ZjAsIDB4YTMsIDB4ZTksIDB4ZjAsIDB4YTMsIDB4ZWEsIDB4ZjAsIDB4YTMsIDB4YzAsIDB4ODMsIAorMHhjMCwgMHg4MiwgMHhhMywgMHhhMywgMHhhMywgMHg4MCwgMHhkYSwgMHg3OCwgMHgwOCwgMHgwOCwgMHg3OSwgMHgxOCwgMHgwOSwgMHg3YywgMHgwMSwgMHhlNiwgCisweDU0LCAweDdmLCAweDZmLCAweDcwLCAweDA2LCAweDc2LCAweDAwLCAweDc3LCAweDAwLCAweDgwLCAweDA2LCAweDA4LCAweDA5LCAweDBjLCAweGJjLCAweDA4LCAKKzB4ZWUsIDB4MTIsIDB4MTEsIDB4MGYsIDB4ZDAsIDB4MDYsIDB4ZDAsIDB4MDQsIDB4ZDAsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4ZDAsIDB4MDAsIDB4MjIsIDB4NzUsIAorMHgzZCwgMHgwMCwgMHg4NSwgMHg0NCwgMHhhOCwgMHgyMiwgMHhjMCwgMHhmMCwgMHhjMCwgMHg4MiwgMHhjMCwgMHg4MywgMHhjMywgMHhlNSwgMHg0MywgMHgyNCwgCisweGU4LCAweDUwLCAweDA1LCAweDEyLCAweDExLCAweDY2LCAweDgwLCAweGY0LCAweGVmLCAweDYwLCAweDMxLCAweDkwLCAweDMwLCAweDU0LCAweGU0LCAweDkzLCAKKzB4YzMsIDB4OWYsIDB4NDAsIDB4MmYsIDB4YzAsIDB4MDQsIDB4N2MsIDB4ZmYsIDB4MTIsIDB4MTAsIDB4NzgsIDB4ZDAsIDB4MDQsIDB4NDMsIDB4MDcsIDB4ODAsIAorMHhlNSwgMHg0MywgMHg3NSwgMHhmMCwgMHgwMywgMHhhNCwgMHgyNCwgMHgxYiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHhmOSwgMHhmNSwgMHg4MywgMHhlZiwgCisweGYwLCAweGVjLCAweGEzLCAweGYwLCAweGVkLCAweGEzLCAweGYwLCAweDA1LCAweDQzLCAweDEyLCAweDExLCAweDBmLCAweGQwLCAweDgzLCAweGQwLCAweDgyLCAKKzB4ZDAsIDB4ZjAsIDB4MjIsIDB4MDIsIDB4MTEsIDB4OTQsIDB4YzAsIDB4MDQsIDB4N2MsIDB4MjAsIDB4ZDIsIDB4OGMsIDB4ZDIsIDB4OGQsIDB4ZDUsIDB4MDQsIAorMHhmZCwgMHhkMCwgMHgwNCwgMHgyMiwgMHg3NSwgMHhhOCwgMHgwMCwgMHg3NSwgMHg4OCwgMHgwMCwgMHg3NSwgMHhiOCwgMHgwMCwgMHg3NSwgMHhmMCwgMHgwMCwgCisweDc1LCAweGQwLCAweDAwLCAweGU0LCAweGY4LCAweDkwLCAweGY4LCAweDA0LCAweGYwLCAweDkwLCAweDAwLCAweDAwLCAweGY2LCAweDA4LCAweGI4LCAweDAwLCAKKzB4ZmIsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YzIsIDB4YWYsIDB4ZTQsIDB4OTAsIDB4ZmYsIDB4NDgsIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4NTAsIDB4ZjAsIDB4OTAsIAorMHhmZiwgMHgwOCwgMHhmMCwgMHg5MCwgMHhmZiwgMHgxMCwgMHhmMCwgMHg5MCwgMHhmZiwgMHg4MCwgMHhmMCwgMHhhMywgMHhhMywgMHhmMCwgMHhkMiwgMHhiMSwgCisweGMyLCAweGIwLCAweDdlLCAweGZmLCAweDdmLCAweGZmLCAweDEyLCAweDBmLCAweGRjLCAweDdlLCAweGZmLCAweDdmLCAweGZmLCAweDEyLCAweDBmLCAweGRjLCAKKzB4N2UsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4MTIsIDB4MGYsIDB4ZGMsIDB4ZDIsIDB4YjAsIDB4ZDIsIDB4YjEsIDB4N2UsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4MTIsIAorMHgwZiwgMHhkYywgMHg3ZSwgMHhmZiwgMHg3ZiwgMHhmZiwgMHgxMiwgMHgwZiwgMHhkYywgMHg3ZSwgMHhmZiwgMHg3ZiwgMHhmZiwgMHgxMiwgMHgwZiwgMHhkYywgCisweDgwLCAweGNjLCAweGMzLCAweGVlLCAweDk0LCAweDAyLCAweDUwLCAweDA0LCAweDdlLCAweDAzLCAweDdmLCAweGU4LCAweGVmLCAweGY0LCAweGZmLCAweGVlLCAKKzB4ZjQsIDB4ZmUsIDB4MGYsIDB4YmYsIDB4MDAsIDB4MDEsIDB4MGUsIDB4OGYsIDB4NDIsIDB4OGUsIDB4NDEsIDB4MjIsIDB4YzMsIDB4ZWYsIDB4OTQsIDB4YmMsIAorMHhlZSwgMHg5NCwgMHgwMiwgMHg1MCwgMHgwNCwgMHg3ZSwgMHgwNywgMHg3ZiwgMHhkMCwgMHhlZiwgMHhmNCwgMHhmZiwgMHhlZSwgMHhmNCwgMHhmZSwgMHgwZiwgCisweGJmLCAweDAwLCAweDAxLCAweDBlLCAweDhmLCAweDQwLCAweDhlLCAweDNmLCAweDIyLCAweGVmLCAweDcwLCAweDAxLCAweDIyLCAweGMwLCAweDAwLCAweGMwLCAKKzB4YTgsIDB4YzIsIDB4YWYsIDB4ZTUsIDB4M2UsIDB4MjQsIDB4MTgsIDB4ZjgsIDB4YTYsIDB4MDcsIDB4ZTUsIDB4M2UsIDB4MjQsIDB4MDgsIDB4ZjgsIDB4YzYsIAorMHg1NCwgMHg3ZiwgMHhmNiwgMHhkMCwgMHhhOCwgMHhlNiwgMHgzMCwgMHhlNywgMHgwMywgMHhkMCwgMHgwMCwgMHgyMiwgMHgxMiwgMHgxMSwgMHg2NiwgMHg4MCwgCisweGY0LCAweGMwLCAweDAwLCAweDdmLCAweDAxLCAweGVmLCAweDI0LCAweDA4LCAweGY4LCAweGU2LCAweDYwLCAweDA5LCAweDBmLCAweGJmLCAweDA4LCAweGY1LCAKKzB4MTIsIDB4MTEsIDB4NjYsIDB4ODAsIDB4ZWUsIDB4ZDAsIDB4MDAsIDB4MjIsIDB4YzAsIDB4ZjAsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODMsIDB4YzAsIDB4MDAsIAorMHhjMCwgMHgwNiwgMHhjMCwgMHgwNCwgMHhlZCwgMHgyNCwgMHgxMCwgMHhmOCwgMHg3NiwgMHg5YSwgMHhlZCwgMHg3NSwgMHhmMCwgMHgyMSwgMHhhNCwgMHgyNCwgCisweDA1LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweGY4LCAweGY1LCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDgzLCAweGEzLCAweGEzLCAweGU0LCAweDc4LCAKKzB4MGQsIDB4ZjAsIDB4YTMsIDB4ZDgsIDB4ZmMsIDB4ZWYsIDB4NTQsIDB4N2YsIDB4NzUsIDB4ZjAsIDB4MDIsIDB4YTQsIDB4MjQsIDB4MzYsIDB4ZjUsIDB4ODIsIAorMHhlNSwgMHhmMCwgMHgzNCwgMHgzMCwgMHhmNSwgMHg4MywgMHhlNCwgMHg5MywgMHhmZSwgMHg3NCwgMHgwMSwgMHg5MywgMHhmYywgMHhkMCwgMHg4MywgMHhkMCwgCisweDgyLCAweGVjLCAweGYwLCAweGEzLCAweGVlLCAweGYwLCAweGVkLCAweDI0LCAweDA4LCAweGY4LCAweGVmLCAweDQ0LCAweDgwLCAweGY2LCAweGQwLCAweDA0LCAKKzB4ZDAsIDB4MDYsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ZjAsIDB4MjIsIDB4NzUsIDB4M2UsIDB4MDAsIDB4NzUsIDB4NDMsIAorMHgwMCwgMHg3YSwgMHgwOCwgMHg3OSwgMHgxOCwgMHg3OCwgMHgwOCwgMHg3NiwgMHgwMCwgMHg3NywgMHgwMCwgMHgwOCwgMHgwOSwgMHhkYSwgMHhmOCwgMHg5MCwgCisweGY4LCAweDA0LCAweGUwLCAweGZjLCAweDkwLCAweDMwLCAweDU0LCAweGU0LCAweDkzLCAweGMzLCAweDljLCAweDUwLCAweDA1LCAweGU0LCAweDkwLCAweGY4LCAKKzB4MDQsIDB4ZjAsIDB4NzgsIDB4MDgsIDB4NzQsIDB4ODAsIDB4NDQsIDB4N2YsIDB4ZjYsIDB4NzQsIDB4MDEsIDB4NDQsIDB4MTAsIDB4ZjUsIDB4ODksIDB4NzUsIAorMHhiOCwgMHgwMCwgMHhkMiwgMHhhYiwgMHhkMiwgMHhhOSwgMHgyMiwgMHg3NSwgMHg4MSwgMHg4YiwgMHhkMiwgMHg4ZSwgMHhkMiwgMHg4YywgMHhkMiwgMHhhZiwgCisweGU1LCAweDQzLCAweDYwLCAweDM2LCAweGZmLCAweDkwLCAweGY5LCAweDFiLCAweGUwLCAweDU0LCAweDgwLCAweDYwLCAweDI4LCAweDc4LCAweDA4LCAweDc5LCAKKzB4MDgsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4ZmEsIDB4N2IsIDB4MDAsIDB4ZTYsIDB4NTQsIDB4N2YsIDB4YjUsIDB4MDIsIDB4MDIsIDB4N2IsIDB4ZmYsIDB4MDgsIAorMHhkOSwgMHhmNSwgMHhlYiwgMHg3MCwgMHgxMCwgMHhlYSwgMHhmMCwgMHhjMCwgMHgwNywgMHgxMiwgMHgxMiwgMHg0MSwgMHhhZCwgMHgwNywgMHhhZiwgMHgwMiwgCisweDEyLCAweDEyLCAweDU4LCAweGQwLCAweDA3LCAweGEzLCAweGEzLCAweGEzLCAweGRmLCAweGNlLCAweDEyLCAweDExLCAweDY2LCAweDgwLCAweGMxLCAweDhmLCAKKzB4MjQsIDB4MTIsIDB4MmEsIDB4MDYsIDB4NzgsIDB4ODAsIDB4ZTYsIDB4ZmUsIDB4MDgsIDB4ZTYsIDB4ZmYsIDB4OGUsIDB4ODMsIDB4MjQsIDB4MDgsIDB4MTIsIAorMHgyMSwgMHhmMywgMHhlMCwgMHhmZCwgMHgxMiwgMHgyMiwgMHg4YSwgMHg4YSwgMHg4MywgMHgyNCwgMHgwYSwgMHgxMiwgMHgyMSwgMHhmMywgMHhlZCwgMHhmMCwgCisweDEyLCAweDIyLCAweDU2LCAweDI0LCAweDA3LCAweDEyLCAweDIxLCAweGYzLCAweGUwLCAweGZmLCAweDEyLCAweDIyLCAweDk5LCAweDI0LCAweDA5LCAweDEyLCAKKzB4MjEsIDB4ZjMsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4ZjksIDB4MTUsIDB4ZTAsIDB4MzAsIDB4ZTQsIDB4MjAsIDB4MDgsIDB4MTIsIDB4MjIsIDB4MDksIDB4YzAsIAorMHg4MywgMHhjMCwgMHg4MiwgMHhhMywgMHhlMCwgMHgyNSwgMHhlMCwgMHhmZiwgMHgwNSwgMHg4MiwgMHhkNSwgMHg4MiwgMHgwMiwgMHgxNSwgMHg4MywgMHgxNSwgCisweDgyLCAweGUwLCAweDMzLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGYwLCAweGEzLCAweGVmLCAweGYwLCAweDc4LCAweDgwLCAweDEyLCAweDIyLCAweDA5LCAKKzB4ZTAsIDB4ZmMsIDB4YTMsIDB4ZTAsIDB4ZmQsIDB4ZWMsIDB4ZmYsIDB4MTIsIDB4MjIsIDB4OGEsIDB4OGEsIDB4ODMsIDB4MjQsIDB4MDgsIDB4MTIsIDB4MjEsIAorMHhmMywgMHhlZiwgMHhmMCwgMHhlZCwgMHgxMiwgMHgyMiwgMHg5OSwgMHgyNCwgMHgwNywgMHgxMiwgMHgyMSwgMHhmMywgMHhlZCwgMHhmMCwgMHgxMiwgMHgyMSwgCisweGZiLCAweGUwLCAweGZmLCAweDMwLCAweGU3LCAweDE5LCAweDEyLCAweDIyLCAweDZlLCAweDEyLCAweDIxLCAweGYzLCAweGUwLCAweDYwLCAweDA5LCAweDEyLCAKKzB4MjEsIDB4ZmIsIDB4ZWYsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ODAsIDB4MDcsIDB4MTIsIDB4MjEsIDB4ZmIsIDB4ZWYsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4NzgsIAorMHg3ZSwgMHgxMiwgMHgyMiwgMHgwOSwgMHhhMywgMHhhMywgMHhlMCwgMHhmZiwgMHg1MywgMHgwNywgMHhjNywgMHgwOCwgMHhlNiwgMHhmYywgMHgwOCwgMHhlNiwgCisweGZkLCAweDEyLCAweDIyLCAweDQzLCAweGEzLCAweGUwLCAweDMwLCAweGUzLCAweDEyLCAweDhkLCAweDgyLCAweDhjLCAweDgzLCAweGU1LCAweDgyLCAweDI0LCAKKzB4MDUsIDB4MTIsIDB4MjEsIDB4ZjMsIDB4ZTAsIDB4OTAsIDB4MzEsIDB4OTQsIDB4OTMsIDB4NDIsIDB4MDcsIDB4NTMsIDB4MDcsIDB4ZmIsIDB4NzgsIDB4ODAsIAorMHhlNiwgMHhmYywgMHgwOCwgMHhlNiwgMHg4YywgMHg4MywgMHgyNCwgMHgwNiwgMHgxMiwgMHgyMSwgMHhmMywgMHhlMCwgMHg2MCwgMHgwMywgMHg0MywgMHgwNywgCisweDA0LCAweDUzLCAweDA3LCAweGZjLCAweDc4LCAweDgwLCAweDEyLCAweDIyLCAweDdhLCAweDI0LCAweDA0LCAweDEyLCAweDIxLCAweGYzLCAweGUwLCAweDQyLCAKKzB4MDcsIDB4NDMsIDB4MDcsIDB4ODAsIDB4MTIsIDB4MjIsIDB4OGEsIDB4ZjUsIDB4ODIsIDB4OGEsIDB4ODMsIDB4YTMsIDB4YTMsIDB4ZWYsIDB4ZjAsIDB4MTIsIAorMHgyMiwgMHg5OSwgMHgyNCwgMHgwNCwgMHgxMiwgMHgyMSwgMHhmMywgMHhlMCwgMHhmZiwgMHg4ZCwgMHg4MiwgMHg4YywgMHg4MywgMHhhMywgMHhhMywgMHhlMCwgCisweGZjLCAweGEzLCAweGUwLCAweGZkLCAweDMwLCAweGUxLCAweDA1LCAweDUzLCAweDA3LCAweGRmLCAweDgwLCAweDAzLCAweDQzLCAweDA3LCAweDIwLCAweGVjLCAKKzB4MzAsIDB4ZTQsIDB4MDUsIDB4NTMsIDB4MDcsIDB4ZWYsIDB4ODAsIDB4MDMsIDB4NDMsIDB4MDcsIDB4MTAsIDB4MTIsIDB4MjEsIDB4ZmIsIDB4ZTAsIDB4ZmUsIAorMHg1NCwgMHgwMywgMHg2MCwgMHg3MywgMHg1MywgMHgwNywgMHhkZiwgMHhlZSwgMHgzMCwgMHhlMSwgMHg2OSwgMHg3OCwgMHg4MCwgMHgxMiwgMHgyMiwgMHg2ZiwgCisweDEyLCAweDIxLCAweGYzLCAweGUwLCAweDEyLCAweDFiLCAweDRjLCAweDE0LCAweGE2LCAweDAwLCAweDE0LCAweGRhLCAweDAxLCAweDE0LCAweGRmLCAweDAzLCAKKzB4MTQsIDB4ZGEsIDB4MDUsIDB4MTQsIDB4ZGYsIDB4MDcsIDB4MTQsIDB4ZGEsIDB4MDksIDB4MTQsIDB4ZGYsIDB4MGIsIDB4MTQsIDB4ZGEsIDB4MGQsIDB4MTQsIAorMHhkZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHhlNywgMHhlNSwgMHgyNCwgMHg2NCwgMHgwMywgMHg3MCwgMHgyMSwgMHg5MCwgMHhmOSwgMHgxNSwgMHhlMCwgCisweDMwLCAweGUyLCAweDBkLCAweDMwLCAweGI0LCAweDA1LCAweDQzLCAweDA3LCAweDAyLCAweDgwLCAweDJjLCAweDUzLCAweDA3LCAweGZkLCAweDgwLCAweDI3LCAKKzB4MzAsIDB4OTUsIDB4MDUsIDB4NDMsIDB4MDcsIDB4MDIsIDB4ODAsIDB4MWYsIDB4NTMsIDB4MDcsIDB4ZmQsIDB4ODAsIDB4MWEsIDB4MzAsIDB4OTMsIDB4MDUsIAorMHg0MywgMHgwNywgMHgwMiwgMHg4MCwgMHgxMiwgMHg1MywgMHgwNywgMHhmZCwgMHg4MCwgMHgwZCwgMHg0MywgMHgwNywgMHgwMiwgMHg4MCwgMHgwOCwgMHg1MywgCisweDA3LCAweGZkLCAweDgwLCAweDAzLCAweDUzLCAweDA3LCAweGZkLCAweDEyLCAweDIyLCAweDc4LCAweDI0LCAweDA0LCAweDEyLCAweDIxLCAweGYzLCAweGVmLCAKKzB4ZjAsIDB4OGQsIDB4ODIsIDB4OGMsIDB4ODMsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MjEsIDB4ZmIsIDB4ZTAsIDB4ZmUsIDB4NTQsIAorMHgwMywgMHg3MCwgMHgwMywgMHgwMiwgMHgxNSwgMHhkNywgMHhlZSwgMHgyMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgxNSwgMHhkNCwgMHgxMiwgMHgyMiwgMHg2ZSwgCisweDEyLCAweDIxLCAweGYzLCAweGUwLCAweDEyLCAweDFiLCAweDRjLCAweDE1LCAweDM2LCAweDAwLCAweDE1LCAweDZjLCAweDAxLCAweDE1LCAweDZjLCAweDAzLCAKKzB4MTUsIDB4YTAsIDB4MDUsIDB4MTUsIDB4YTAsIDB4MDcsIDB4MTUsIDB4ODYsIDB4MDksIDB4MTUsIDB4ODYsIDB4MGIsIDB4MTUsIDB4YmEsIDB4MGQsIDB4MTUsIAorMHhiYSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgxNSwgMHhkNywgMHhlNSwgMHgyNCwgMHg2NCwgMHgwMywgMHg3MCwgMHgyMywgMHg5MCwgMHhmOSwgMHgxNSwgMHhlMCwgCisweDMwLCAweGUyLCAweDBmLCAweDMwLCAweGIxLCAweDA2LCAweDUzLCAweDA3LCAweDdmLCAweDAyLCAweDE1LCAweGQ3LCAweDQzLCAweDA3LCAweDgwLCAweDAyLCAKKzB4MTUsIDB4ZDcsIDB4MzAsIDB4OTQsIDB4MDUsIDB4NTMsIDB4MDcsIDB4N2YsIDB4ODAsIDB4N2QsIDB4NDMsIDB4MDcsIDB4ODAsIDB4ODAsIDB4NzgsIDB4MzAsIAorMHg5MiwgMHgwNSwgMHg1MywgMHgwNywgMHg3ZiwgMHg4MCwgMHg3MCwgMHg0MywgMHgwNywgMHg4MCwgMHg4MCwgMHg2YiwgMHhlNSwgMHgyNCwgMHhiNCwgMHgwMywgCisweDA5LCAweDkwLCAweGZmLCAweDllLCAweGUwLCAweDU0LCAweGVmLCAweGYwLCAweDgwLCAweDA3LCAweDkwLCAweGZmLCAweDllLCAweGUwLCAweDU0LCAweGRmLCAKKzB4ZjAsIDB4NTMsIDB4MDcsIDB4N2YsIDB4ODAsIDB4NTEsIDB4ZTUsIDB4MjQsIDB4YjQsIDB4MDMsIDB4MDksIDB4OTAsIDB4ZmYsIDB4OWUsIDB4ZTAsIDB4NDQsIAorMHgxMCwgMHhmMCwgMHg4MCwgMHgwNywgMHg5MCwgMHhmZiwgMHg5ZSwgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHg1MywgMHgwNywgMHg3ZiwgMHg4MCwgMHgzNywgCisweGU1LCAweDI0LCAweGI0LCAweDAzLCAweDA5LCAweDkwLCAweGZmLCAweDllLCAweGUwLCAweDU0LCAweGVmLCAweGYwLCAweDgwLCAweDA3LCAweDkwLCAweGZmLCAKKzB4OWUsIDB4ZTAsIDB4NTQsIDB4ZGYsIDB4ZjAsIDB4NDMsIDB4MDcsIDB4ODAsIDB4ODAsIDB4MWQsIDB4ZTUsIDB4MjQsIDB4YjQsIDB4MDMsIDB4MDksIDB4OTAsIAorMHhmZiwgMHg5ZSwgMHhlMCwgMHg0NCwgMHgxMCwgMHhmMCwgMHg4MCwgMHgwNywgMHg5MCwgMHhmZiwgMHg5ZSwgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHg0MywgCisweDA3LCAweDgwLCAweDgwLCAweDAzLCAweDUzLCAweDA3LCAweDdmLCAweDc4LCAweDgwLCAweDEyLCAweDIyLCAweDNmLCAweGUwLCAweGZjLCAweGEzLCAweGUwLCAKKzB4ZmQsIDB4MzAsIDB4ZTAsIDB4MDUsIDB4NDMsIDB4MDcsIDB4MjAsIDB4ODAsIDB4MDMsIDB4NTMsIDB4MDcsIDB4ZGYsIDB4ZWMsIDB4MzAsIDB4ZTMsIDB4MDUsIAorMHg0MywgMHgwNywgMHg0MCwgMHg4MCwgMHgwMywgMHg1MywgMHgwNywgMHhiZiwgMHhlYywgMHgzMCwgMHhlMCwgMHgwNSwgMHg0MywgMHgwNywgMHgxMCwgMHg4MCwgCisweDAzLCAweDUzLCAweDA3LCAweGVmLCAweGVkLCAweDMwLCAweGU0LCAweDA1LCAweDQzLCAweDA3LCAweDA4LCAweDgwLCAweDAzLCAweDUzLCAweDA3LCAweGY3LCAKKzB4ZWQsIDB4MzAsIDB4ZTUsIDB4MDUsIDB4NDMsIDB4MDcsIDB4MDQsIDB4ODAsIDB4MDMsIDB4NTMsIDB4MDcsIDB4ZmIsIDB4ZWQsIDB4MzAsIDB4ZTYsIDB4MDUsIAorMHg0MywgMHgwNywgMHgwMSwgMHg4MCwgMHgwMywgMHg1MywgMHgwNywgMHhmZSwgMHhlZCwgMHgzMCwgMHhlNywgMHgwNSwgMHg0MywgMHgwNywgMHgwMiwgMHg4MCwgCisweDAzLCAweDUzLCAweDA3LCAweGZkLCAweDc4LCAweDdlLCAweDEyLCAweDIyLCAweDNmLCAweGEzLCAweGVmLCAweGYwLCAweDEyLCAweDMxLCAweGM3LCAweDdmLCAKKzB4MDAsIDB4MjIsIDB4OTAsIDB4ZmYsIDB4ZmEsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MTYsIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4ZjksIDB4NzQsIAorMHgwMiwgMHhmMCwgMHg3YiwgMHgwMSwgMHg3YSwgMHhmYSwgMHg3OSwgMHhjYywgMHhlNCwgMHhmZCwgMHgxMiwgMHgyMiwgMHhhMCwgMHg5MCwgMHhmYSwgMHhjYywgCisweGU0LCAweDc1LCAweGYwLCAweDAzLCAweDEyLCAweDFhLCAweDZjLCAweDEyLCAweDE4LCAweGUyLCAweGU1LCAweDIzLCAweDMwLCAweGU3LCAweDAyLCAweGQyLCAKKzB4MDIsIDB4N2IsIDB4MDAsIDB4N2EsIDB4MDAsIDB4NzksIDB4MjQsIDB4OTAsIDB4ZmEsIDB4Y2MsIDB4ZTAsIDB4ZjUsIDB4MmQsIDB4YTMsIDB4ZTAsIDB4ZjUsIAorMHgyZSwgMHg3ZCwgMHgwMSwgMHgxMiwgMHgyNSwgMHhkNywgMHg5MCwgMHhmYSwgMHhjYywgMHhlNCwgMHhmMCwgMHhhMywgMHg3NCwgMHgwYiwgMHhmMCwgMHg3YiwgCisweDAwLCAweDdhLCAweDAwLCAweDc5LCAweDIzLCAweDc1LCAweDJkLCAweDAwLCAweGY1LCAweDJlLCAweDdkLCAweDAxLCAweDEyLCAweDI1LCAweGQ3LCAweGU1LCAKKzB4MjMsIDB4MjQsIDB4ODAsIDB4OTAsIDB4ZmYsIDB4ZjgsIDB4ZjAsIDB4ZTUsIDB4MjMsIDB4NjQsIDB4MDcsIDB4NjAsIDB4MWUsIDB4ZTUsIDB4MjMsIDB4NjQsIAorMHgwNiwgMHg2MCwgMHgxOCwgMHhlNSwgMHgyMywgMHg2NCwgMHgxNCwgMHg2MCwgMHgxMiwgMHhlNSwgMHgyMywgMHg2NCwgMHg0MSwgMHg2MCwgMHgwYywgMHhlNSwgCisweDIzLCAweDY0LCAweDFhLCAweDcwLCAweDQ2LCAweGU1LCAweDI0LCAweDY0LCAweDAyLCAweDcwLCAweDQwLCAweGU1LCAweDIzLCAweGI0LCAweDA3LCAweDE2LCAKKzB4ZDIsIDB4OTQsIDB4ZDIsIDB4OTUsIDB4ZDIsIDB4OTIsIDB4ZDIsIDB4OTMsIDB4OTAsIDB4ZjksIDB4MTUsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4YTMsIAorMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg4MCwgMHgxZSwgMHhlNSwgMHgyMywgMHhiNCwgMHg0MSwgMHgxMiwgMHg5MCwgMHhmOSwgMHgxNSwgMHhlMCwgMHg0NCwgCisweDA2LCAweGYwLCAweGEzLCAweGUwLCAweDQ0LCAweDA2LCAweGYwLCAweGQyLCAweGIxLCAweGQyLCAweGI0LCAweDgwLCAweDA3LCAweDkwLCAweGY5LCAweDE1LCAKKzB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4ZjksIDB4MTYsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ZTUsIDB4MjMsIDB4NjQsIDB4NDIsIDB4NjAsIAorMHgwNSwgMHhlNSwgMHgyMywgMHhiNCwgMHg0MywgMHgwYywgMHg5MCwgMHhmOSwgMHgxNSwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHhhMywgMHhlMCwgMHg0NCwgCisweDgwLCAweGYwLCAweDkwLCAweGZhLCAweGNjLCAweGU0LCAweGYwLCAweGEzLCAweDc0LCAweDBkLCAweGYwLCAweDEyLCAweDE4LCAweGUyLCAweDkwLCAweGZmLCAKKzB4ZjUsIDB4ZTUsIDB4MjMsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MzUsIDB4ZjUsIDB4MzMsIDB4ZjUsIDB4MzQsIDB4ZjUsIDB4MzIsIDB4MTIsIDB4MWQsIDB4ODQsIAorMHgxMiwgMHgxYywgMHgzMCwgMHgxMiwgMHgxZCwgMHg4YiwgMHg5MCwgMHhmOSwgMHg2NywgMHgxMiwgMHgxYiwgMHg0MywgMHg5MCwgMHhmOSwgMHg2YywgMHgxMiwgCisweDFiLCAweDQzLCAweDkwLCAweGZmLCAweGZmLCAweGU0LCAweGYwLCAweDkwLCAweGZmLCAweDgzLCAweGUwLCAweGU0LCAweGYwLCAweDkwLCAweGZmLCAweDgxLCAKKzB4NzQsIDB4ODAsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4ODQsIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MjMsIDB4ZTUsIDB4MjMsIAorMHgxMiwgMHgxYywgMHhhNywgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHhlNSwgMHgyMywgMHgxMiwgMHgxYywgMHhiNSwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgCisweDA1LCAweDIzLCAweGU1LCAweDIzLCAweGI0LCAweDA3LCAweGU3LCAweDc4LCAweDdhLCAweDc2LCAweGZlLCAweDA4LCAweDc2LCAweGYwLCAweDkwLCAweDMxLCAKKzB4NGQsIDB4ZTQsIDB4OTMsIDB4ZmYsIDB4NzgsIDB4NzgsIDB4ZjYsIDB4ZmQsIDB4YWQsIDB4MDcsIDB4OTAsIDB4MzEsIDB4NWEsIDB4ZTQsIDB4OTMsIDB4ZmYsIAorMHgwOCwgMHhmNiwgMHhmZiwgMHhlZCwgMHg1NCwgMHgwZiwgMHhmZCwgMHgxMiwgMHgxYywgMHg5NywgMHg3NCwgMHg4NCwgMHhmMCwgMHhlZCwgMHg3NSwgMHhmMCwgCisweDA4LCAweGE0LCAweDI0LCAweDQ3LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweGZmLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweGMzLCAweDc0LCAweGYwLCAKKzB4OWYsIDB4NzgsIDB4N2IsIDB4ZjYsIDB4NzQsIDB4ZmUsIDB4OTQsIDB4MDAsIDB4MTgsIDB4MTIsIDB4MWMsIDB4MjgsIDB4Y2UsIDB4YzMsIDB4MTMsIDB4Y2UsIAorMHgxMywgMHhkOCwgMHhmOSwgMHhmZiwgMHhlZCwgMHgxMiwgMHgxYywgMHhmOCwgMHhlZiwgMHhmMCwgMHhlZCwgMHgxMiwgMHgxZCwgMHgxZSwgMHhlNCwgMHhmNSwgCisweDIzLCAweGU1LCAweDIzLCAweDkwLCAweDMxLCAweDQ3LCAweDkzLCAweGZmLCAweDc4LCAweDc4LCAweGY2LCAweGZkLCAweGU1LCAweDIzLCAweDI1LCAweGUwLCAKKzB4MjQsIDB4NGUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MzEsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MDgsIDB4ZjYsIDB4ZWQsIDB4MzAsIDB4ZTcsIAorMHg1MywgMHgxOCwgMHhlNiwgMHg1NCwgMHgwZiwgMHhmOSwgMHgxMiwgMHgxYywgMHg5NywgMHgxMiwgMHgxZCwgMHgwNiwgMHgyNCwgMHg0NywgMHhmNSwgMHg4MiwgCisweGU0LCAweDM0LCAweGZmLCAweDEyLCAweDFjLCAweDE4LCAweGNlLCAweGMzLCAweDEzLCAweGNlLCAweDEzLCAweGQ4LCAweGY5LCAweGZmLCAweGU5LCAweDEyLCAKKzB4MWMsIDB4ZjgsIDB4ZWYsIDB4ZjAsIDB4MTIsIDB4MWMsIDB4MWYsIDB4Y2UsIDB4YzMsIDB4MTMsIDB4Y2UsIDB4MTMsIDB4ZDgsIDB4ZjksIDB4MTIsIDB4MWQsIAorMHgwYiwgMHgyNCwgMHg0NSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHhmZiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHhlOSwgMHgxMiwgMHgxZCwgMHgxZSwgCisweGU5LCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDQ2LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweGZmLCAweGY1LCAweDgzLCAweDc0LCAweDgwLCAKKzB4ZjAsIDB4MDIsIDB4MTgsIDB4YjcsIDB4NzgsIDB4NzgsIDB4ZTYsIDB4NTQsIDB4MGYsIDB4ZjksIDB4MTIsIDB4MWMsIDB4ZWEsIDB4MTIsIDB4MWQsIDB4MDYsIAorMHgyNCwgMHgwNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHhmZiwgMHgxMiwgMHgxYywgMHgxOCwgMHhjZSwgMHhjMywgMHgxMywgMHhjZSwgMHgxMywgMHhkOCwgCisweGY5LCAweDEyLCAweDFkLCAweDBiLCAweDI0LCAweDAxLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweGZmLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDEyLCAKKzB4MWMsIDB4MWYsIDB4Y2UsIDB4YzMsIDB4MTMsIDB4Y2UsIDB4MTMsIDB4ZDgsIDB4ZjksIDB4MTIsIDB4MWQsIDB4MGIsIDB4MjQsIDB4MDUsIDB4ZjUsIDB4ODIsIAorMHhlNCwgMHgzNCwgMHhmZiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHhlOSwgMHg3NSwgMHhmMCwgMHgwOCwgMHhhNCwgMHgyNCwgMHgwMiwgMHhmNSwgMHg4MiwgCisweGU0LCAweDM0LCAweGZmLCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweGU5LCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDA2LCAweGY1LCAweDgyLCAKKzB4ZTQsIDB4MzQsIDB4ZmYsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4MDUsIDB4MjMsIDB4ZTUsIDB4MjMsIDB4NjQsIDB4MDQsIDB4NjAsIDB4MDMsIDB4MDIsIAorMHgxNywgMHhlMSwgMHg5MCwgMHgzMSwgMHg0YywgMHhlNCwgMHg5MywgMHhmZiwgMHg3OCwgMHg3OCwgMHhmNiwgMHgxMiwgMHgxYywgMHhlOCwgMHhlNCwgMHhmMCwgCisweDkwLCAweDMxLCAweDRiLCAweDkzLCAweGZmLCAweGY2LCAweDEyLCAweDFjLCAweDk1LCAweGU0LCAweGYwLCAweDkwLCAweGZmLCAweGZkLCAweDc0LCAweDA1LCAKKzB4ZjAsIDB4MjIsIDB4N2IsIDB4MDAsIDB4N2EsIDB4MDAsIDB4NzksIDB4MjMsIDB4OTAsIDB4ZmEsIDB4Y2MsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDEsIDB4MTIsIAorMHgxYSwgMHg4MiwgMHg4NSwgMHhmMCwgMHgyZSwgMHhmNSwgMHgyZCwgMHg3ZCwgMHgwMSwgMHgwMiwgMHgyNSwgMHhkNywgMHhlNywgMHgwOSwgMHhmNiwgMHgwOCwgCisweGRmLCAweGZhLCAweDgwLCAweDQ2LCAweGU3LCAweDA5LCAweGYyLCAweDA4LCAweGRmLCAweGZhLCAweDgwLCAweDNlLCAweDg4LCAweDgyLCAweDhjLCAweDgzLCAKKzB4ZTcsIDB4MDksIDB4ZjAsIDB4YTMsIDB4ZGYsIDB4ZmEsIDB4ODAsIDB4MzIsIDB4ZTMsIDB4MDksIDB4ZjYsIDB4MDgsIDB4ZGYsIDB4ZmEsIDB4ODAsIDB4NzgsIAorMHhlMywgMHgwOSwgMHhmMiwgMHgwOCwgMHhkZiwgMHhmYSwgMHg4MCwgMHg3MCwgMHg4OCwgMHg4MiwgMHg4YywgMHg4MywgMHhlMywgMHgwOSwgMHhmMCwgMHhhMywgCisweGRmLCAweGZhLCAweDgwLCAweDY0LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGUwLCAweGEzLCAweGY2LCAweDA4LCAweGRmLCAweGZhLCAweDgwLCAweDU4LCAKKzB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTAsIDB4YTMsIDB4ZjIsIDB4MDgsIDB4ZGYsIDB4ZmEsIDB4ODAsIDB4NGMsIDB4ODAsIDB4ZDIsIDB4ODAsIDB4ZmEsIAorMHg4MCwgMHhjNiwgMHg4MCwgMHhkNCwgMHg4MCwgMHg2OSwgMHg4MCwgMHhmMiwgMHg4MCwgMHgzMywgMHg4MCwgMHgxMCwgMHg4MCwgMHhhNiwgMHg4MCwgMHhlYSwgCisweDgwLCAweDlhLCAweDgwLCAweGE4LCAweDgwLCAweGRhLCAweDgwLCAweGUyLCAweDgwLCAweGNhLCAweDgwLCAweDMzLCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAKKzB4ZWMsIDB4ZmEsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2MsIDB4YzUsIDB4ODMsIDB4Y2MsIDB4ZjAsIDB4YTMsIDB4YzgsIAorMHhjNSwgMHg4MiwgMHhjOCwgMHhjYywgMHhjNSwgMHg4MywgMHhjYywgMHhkZiwgMHhlOSwgMHhkZSwgMHhlNywgMHg4MCwgMHgwZCwgMHg4OSwgMHg4MiwgMHg4YSwgCisweDgzLCAweGU0LCAweDkzLCAweGEzLCAweGY2LCAweDA4LCAweGRmLCAweGY5LCAweGVjLCAweGZhLCAweGE5LCAweGYwLCAweGVkLCAweGZiLCAweDIyLCAweDg5LCAKKzB4ODIsIDB4OGEsIDB4ODMsIDB4ZWMsIDB4ZmEsIDB4ZTAsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2MsIDB4YzUsIDB4ODMsIDB4Y2MsIDB4ZjAsIAorMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYywgMHhjNSwgMHg4MywgMHhjYywgMHhkZiwgMHhlYSwgMHhkZSwgMHhlOCwgMHg4MCwgMHhkYiwgMHg4OSwgCisweDgyLCAweDhhLCAweDgzLCAweGU0LCAweDkzLCAweGEzLCAweGYyLCAweDA4LCAweGRmLCAweGY5LCAweDgwLCAweGNjLCAweDg4LCAweGYwLCAweGVmLCAweDYwLCAKKzB4MDEsIDB4MGUsIDB4NGUsIDB4NjAsIDB4YzMsIDB4ODgsIDB4ZjAsIDB4ZWQsIDB4MjQsIDB4MDIsIDB4YjQsIDB4MDQsIDB4MDAsIDB4NTAsIDB4YjksIDB4ZjUsIAorMHg4MiwgMHhlYiwgMHgyNCwgMHgwMiwgMHhiNCwgMHgwNCwgMHgwMCwgMHg1MCwgMHhhZiwgMHgyMywgMHgyMywgMHg0NSwgMHg4MiwgMHgyMywgMHg5MCwgMHgxOSwgCisweDRjLCAweDczLCAweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGUwLCAweDIyLCAweDUwLCAweDAyLCAweGU3LCAweDIyLCAweGJiLCAKKzB4ZmUsIDB4MDIsIDB4ZTMsIDB4MjIsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MGMsIDB4ZTUsIDB4ODIsIAorMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwNiwgMHhlOSwgMHgyNSwgMHg4MiwgMHhmOCwgCisweGU2LCAweDIyLCAweGJiLCAweGZlLCAweDA2LCAweGU5LCAweDI1LCAweDgyLCAweGY4LCAweGUyLCAweDIyLCAweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAKKzB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZjAsIAorMHgyMiwgMHg1MCwgMHgwMiwgMHhmNywgMHgyMiwgMHhiYiwgMHhmZSwgMHgwMSwgMHhmMywgMHgyMiwgMHhmOCwgMHhiYiwgMHgwMSwgMHgwZCwgMHhlNSwgMHg4MiwgCisweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGU4LCAweGYwLCAweDIyLCAweDUwLCAweDA2LCAweGU5LCAweDI1LCAweDgyLCAKKzB4YzgsIDB4ZjYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDUsIDB4ZTksIDB4MjUsIDB4ODIsIDB4YzgsIDB4ZjIsIDB4MjIsIDB4YzUsIDB4ZjAsIDB4ZjgsIDB4YTMsIAorMHhlMCwgMHgyOCwgMHhmMCwgMHhjNSwgMHhmMCwgMHhmOCwgMHhlNSwgMHg4MiwgMHgxNSwgMHg4MiwgMHg3MCwgMHgwMiwgMHgxNSwgMHg4MywgMHhlMCwgMHgzOCwgCisweGYwLCAweDIyLCAweGEzLCAweGY4LCAweGUwLCAweGM1LCAweGYwLCAweDI1LCAweGYwLCAweGYwLCAweGU1LCAweDgyLCAweDE1LCAweDgyLCAweDcwLCAweDAyLCAKKzB4MTUsIDB4ODMsIDB4ZTAsIDB4YzgsIDB4MzgsIDB4ZjAsIDB4ZTgsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MTAsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIAorMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHhmMCwgMHhhMywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwOSwgMHhlOSwgMHgyNSwgMHg4MiwgCisweGY4LCAweDg2LCAweGYwLCAweDA4LCAweGU2LCAweDIyLCAweGJiLCAweGZlLCAweDBhLCAweGU5LCAweDI1LCAweDgyLCAweGY4LCAweGUyLCAweGY1LCAweGYwLCAKKzB4MDgsIDB4ZTIsIDB4MjIsIDB4ZTUsIDB4ODMsIDB4MmEsIDB4ZjUsIDB4ODMsIDB4ZTksIDB4OTMsIDB4ZjUsIDB4ZjAsIDB4YTMsIDB4ZTksIDB4OTMsIDB4MjIsIAorMHhiYiwgMHgwMSwgMHgwYSwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhmMCwgMHhlNSwgMHhmMCwgMHhhMywgMHhmMCwgMHgyMiwgMHg1MCwgMHgwNiwgMHhmNywgCisweDA5LCAweGE3LCAweGYwLCAweDE5LCAweDIyLCAweGJiLCAweGZlLCAweDA2LCAweGYzLCAweGU1LCAweGYwLCAweDA5LCAweGYzLCAweDE5LCAweDIyLCAweGY4LCAKKzB4YmIsIDB4MDEsIDB4MTEsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTgsIDB4ZjAsIDB4ZTUsIAorMHhmMCwgMHhhMywgMHhmMCwgMHgyMiwgMHg1MCwgMHgwOSwgMHhlOSwgMHgyNSwgMHg4MiwgMHhjOCwgMHhmNiwgMHgwOCwgMHhhNiwgMHhmMCwgMHgyMiwgMHhiYiwgCisweGZlLCAweDA5LCAweGU5LCAweDI1LCAweDgyLCAweGM4LCAweGYyLCAweGU1LCAweGYwLCAweDA4LCAweGYyLCAweDIyLCAweGE0LCAweDI1LCAweDgyLCAweGY1LCAKKzB4ODIsIDB4ZTUsIDB4ZjAsIDB4MzUsIDB4ODMsIDB4ZjUsIDB4ODMsIDB4MjIsIDB4ZTYsIDB4ZmIsIDB4MDgsIDB4ZTYsIDB4ZmEsIDB4MDgsIDB4ZTYsIDB4ZjksIAorMHgyMiwgMHhlYiwgMHhmNiwgMHgwOCwgMHhlYSwgMHhmNiwgMHgwOCwgMHhlOSwgMHhmNiwgMHgyMiwgMHhlMCwgMHhmYiwgMHhhMywgMHhlMCwgMHhmYSwgMHhhMywgCisweGUwLCAweGY5LCAweDIyLCAweGViLCAweGYwLCAweGEzLCAweGVhLCAweGYwLCAweGEzLCAweGU5LCAweGYwLCAweDIyLCAweGQwLCAweDgzLCAweGQwLCAweDgyLCAKKzB4ZjgsIDB4ZTQsIDB4OTMsIDB4NzAsIDB4MTIsIDB4NzQsIDB4MDEsIDB4OTMsIDB4NzAsIDB4MGQsIDB4YTMsIDB4YTMsIDB4OTMsIDB4ZjgsIDB4NzQsIDB4MDEsIAorMHg5MywgMHhmNSwgMHg4MiwgMHg4OCwgMHg4MywgMHhlNCwgMHg3MywgMHg3NCwgMHgwMiwgMHg5MywgMHg2OCwgMHg2MCwgMHhlZiwgMHhhMywgMHhhMywgMHhhMywgCisweDgwLCAweGRmLCAweGFiLCAweDM2LCAweGFhLCAweDM3LCAweGE5LCAweDM4LCAweGU1LCAweDRjLCAweDEyLCAweDFhLCAweDM4LCAweDc0LCAweDAxLCAweDI1LCAKKzB4MzgsIDB4ZjUsIDB4MzgsIDB4ZTQsIDB4MzUsIDB4MzcsIDB4ZjUsIDB4MzcsIDB4YWIsIDB4MzYsIDB4ZmEsIDB4YTksIDB4MzgsIDB4NzQsIDB4MTEsIDB4MTIsIAorMHgxYSwgMHgzOCwgMHg3NCwgMHgwMSwgMHgyNSwgMHgzOCwgMHhmNSwgMHgzOCwgMHhlNCwgMHgzNSwgMHgzNywgMHhmNSwgMHgzNywgMHg5MCwgMHhmZiwgMHgwNiwgCisweGUwLCAweGFiLCAweDM2LCAweGFhLCAweDM3LCAweGE5LCAweDM4LCAweDEyLCAweDFhLCAweDM4LCAweDc0LCAweDAxLCAweDI1LCAweDM4LCAweGY1LCAweDM4LCAKKzB4ZTQsIDB4MzUsIDB4MzcsIDB4ZjUsIDB4MzcsIDB4YWIsIDB4MzYsIDB4ZmEsIDB4YTksIDB4MzgsIDB4ZTQsIDB4MTIsIDB4MWEsIDB4MzgsIDB4MDQsIDB4MjUsIAorMHgzOCwgMHhmNSwgMHgzOCwgMHhlNCwgMHgzNSwgMHgzNywgMHhmNSwgMHgzNywgMHhhYiwgMHgzNiwgMHhmYSwgMHhhOSwgMHgzOCwgMHhlNCwgMHgxMiwgMHgxYSwgCisweDM4LCAweDA0LCAweDI1LCAweDM4LCAweGY1LCAweDM4LCAweGU0LCAweDM1LCAweDM3LCAweGY1LCAweDM3LCAweDkwLCAweGZmLCAweDA0LCAweGUwLCAweGFiLCAKKzB4MzYsIDB4YWEsIDB4MzcsIDB4YTksIDB4MzgsIDB4MTIsIDB4MWEsIDB4MzgsIDB4NzQsIDB4MDEsIDB4MjUsIDB4MzgsIDB4ZjUsIDB4MzgsIDB4ZTQsIDB4MzUsIAorMHgzNywgMHhmNSwgMHgzNywgMHg5MCwgMHhmZiwgMHgwNSwgMHhlMCwgMHhhYiwgMHgzNiwgMHhhYSwgMHgzNywgMHhhOSwgMHgzOCwgMHgxMiwgMHgxYSwgMHgzOCwgCisweDc0LCAweDAxLCAweDI1LCAweDM4LCAweGY1LCAweDM4LCAweGU0LCAweDM1LCAweDM3LCAweGY1LCAweDM3LCAweDIyLCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAKKzB4MDgsIDB4YWIsIDB4MzYsIDB4YWEsIDB4MzcsIDB4YTksIDB4MzgsIDB4MjIsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4ZmQsIDB4N2MsIDB4MDAsIDB4YzMsIAorMHg3OCwgMHg3YiwgMHhlNiwgMHg5ZCwgMHhmNiwgMHgxOCwgMHhlNiwgMHg5YywgMHhmNiwgMHhlNiwgMHhmZSwgMHgwOCwgMHhlNiwgMHg3OCwgMHgwMywgMHgyMiwgCisweDc1LCAweDM2LCAweDAxLCAweDc1LCAweDM3LCAweGY5LCAweDc1LCAweDM4LCAweDZmLCAweDIyLCAweGUwLCAweDQ0LCAweDA0LCAweGYwLCAweDc0LCAweDEyLCAKKzB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4ZjksIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4OTAsIDB4ZmEsIDB4YjksIDB4ZTAsIDB4ZmYsIDB4N2UsIAorMHgwMCwgMHhjMywgMHg5MCwgMHhmYSwgMHhiZCwgMHhlMCwgMHg5ZiwgMHhmMCwgMHg5MCwgMHhmYSwgMHhiYywgMHhlMCwgMHg5ZSwgMHhmMCwgMHg5MCwgMHhmYSwgCisweGI0LCAweGVlLCAweDhmLCAweGYwLCAweDEyLCAweDFhLCAweDZjLCAweGVmLCAweDI1LCAweDRmLCAweGY1LCAweDRmLCAweGVlLCAweDM1LCAweDRlLCAweGY1LCAKKzB4NGUsIDB4MjIsIDB4N2IsIDB4MDEsIDB4N2EsIDB4ZmEsIDB4NzksIDB4YjEsIDB4OTAsIDB4ZmEsIDB4YjQsIDB4ZTAsIDB4ZjUsIDB4MmQsIDB4YTMsIDB4ZTAsIAorMHhmNSwgMHgyZSwgMHgyMiwgMHg3OCwgMHg3YywgMHhlNiwgMHhmZSwgMHgwOCwgMHhlNiwgMHg4ZSwgMHg4MywgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgCisweDM1LCAweDgzLCAweGY1LCAweDgzLCAweDIyLCAweDU0LCAweDBmLCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDQwLCAweGY1LCAweDgyLCAweGU0LCAKKzB4MzQsIDB4ZmYsIDB4ZjUsIDB4ODMsIDB4MjIsIDB4ZTUsIDB4NGQsIDB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4NDgsIDB4ZjUsIDB4ODIsIDB4ZTQsIAorMHgzNCwgMHhmZiwgMHgyMiwgMHhlNSwgMHg0ZCwgMHg3NSwgMHhmMCwgMHgwOCwgMHhhNCwgMHgyNCwgMHgwOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHhmZiwgCisweDIyLCAweDkwLCAweGZhLCAweGI2LCAweGUwLCAweGZmLCAweDI0LCAweGZjLCAweDIyLCAweDkwLCAweGZmLCAweDAwLCAweGUwLCAweDU0LCAweDFmLCAweDIyLCAKKzB4OTAsIDB4ZmEsIDB4YmIsIDB4ZTAsIDB4OTAsIDB4ZmEsIDB4YjcsIDB4ZjAsIDB4MjIsIDB4NzUsIDB4MzMsIDB4MDAsIDB4OGYsIDB4MzQsIDB4OTAsIDB4ZjksIAorMHg2YywgMHgxMiwgMHgxYiwgMHgzYSwgMHg5MCwgMHgwMCwgMHgwMiwgMHgyMiwgMHg1NCwgMHgwZiwgMHg3NSwgMHhmMCwgMHgwOCwgMHhhNCwgMHgyNCwgMHgwMCwgCisweGY1LCAweDgyLCAweGU0LCAweDM0LCAweGZmLCAweGY1LCAweDgzLCAweDIyLCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDQxLCAweGY1LCAweDgyLCAKKzB4ZTQsIDB4MzQsIDB4ZmYsIDB4ZjUsIDB4ODMsIDB4MjIsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4MDgsIDB4ZTYsIDB4ZmYsIDB4ZTksIDB4NzUsIDB4ZjAsIDB4MDgsIAorMHhhNCwgMHgyMiwgMHg3NCwgMHhhZiwgMHgyNSwgMHgyMiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHhmYSwgMHhmNSwgMHg4MywgMHgyMiwgMHg3NSwgMHhmMCwgCisweDA4LCAweGE0LCAweDI0LCAweDQyLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweGZmLCAweGY1LCAweDgzLCAweDc0LCAweDgwLCAweGYwLCAweDIyLCAweDkwLCAKKzB4ZmYsIDB4ODIsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4ZmYsIDB4ZmUsIDB4ZTAsIDB4NDQsIDB4MDMsIDB4ZjAsIDB4OTAsIDB4ZmYsIAorMHhmYywgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHgyMiwgMHg3OCwgMHg2NywgMHhlNiwgMHg1NCwgMHhmZCwgMHhmNiwgMHg5MCwgMHhmZiwgMHhmZCwgMHg3NCwgCisweDY1LCAweGYwLCAweDIyLCAweDEyLCAweDFiLCAweDFjLCAweGUwLCAweGZlLCAweGEzLCAweGUwLCAweGZmLCAweDRlLCAweDIyLCAweDdiLCAweDAxLCAweDdhLCAKKzB4ZmEsIDB4NzksIDB4YjQsIDB4MjIsIDB4OTAsIDB4ZmYsIDB4ODAsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4ZmYsIDB4ODMsIDB4ZTAsIAorMHg1NCwgMHg3ZiwgMHhmMCwgMHgyMiwgMHhlMCwgMHhmZiwgMHg5MCwgMHhmOSwgMHg2NywgMHgwMiwgMHgxYiwgMHgzYSwgMHg5MCwgMHhmZiwgMHhhNCwgMHhlMCwgCisweDQ0LCAweDAyLCAweGYwLCAweDIyLCAweDc1LCAweDM5LCAweDAxLCAweDc1LCAweDNhLCAweDA5LCAweDIyLCAweDdiLCAweDAxLCAweDdhLCAweGY5LCAweDc5LCAKKzB4NmYsIDB4MjIsIDB4ZDMsIDB4ZTUsIDB4M2MsIDB4OTQsIDB4MDgsIDB4ZTUsIDB4M2IsIDB4OTQsIDB4MDEsIDB4MjIsIDB4OTAsIDB4ZmEsIDB4YmIsIDB4ZTAsIAorMHhmZiwgMHg5MCwgMHhmYSwgMHhiNywgMHhmMCwgMHgyMiwgMHg5MCwgMHhmZiwgMHhhNCwgMHhlMCwgMHg1NCwgMHhlZiwgMHgyMiwgMHg5MCwgMHhmZiwgMHhiNCwgCisweGUwLCAweDU0LCAweGVmLCAweDIyLCAweDEyLCAweDEwLCAweDAzLCAweDc4LCAweDg4LCAweGVmLCAweGY2LCAweDEyLCAweDJhLCAweDA2LCAweDEyLCAweDIyLCAKKzB4NGEsIDB4OGUsIDB4ODMsIDB4MjQsIDB4MDksIDB4MTIsIDB4MjEsIDB4ZjMsIDB4ZTAsIDB4ZmQsIDB4MTIsIDB4MjIsIDB4MmQsIDB4OTAsIDB4MDAsIDB4MGEsIAorMHgxMiwgMHgyMiwgMHg1MiwgMHgyNCwgMHgwYSwgMHgxMiwgMHgyMSwgMHhmMywgMHhlMCwgMHg5MCwgMHgwMCwgMHgwYiwgMHgxMiwgMHgxYSwgMHg0YSwgMHgxMiwgCisweDIyLCAweDRhLCAweGY1LCAweDgyLCAweDhlLCAweDgzLCAweGEzLCAweGEzLCAweGEzLCAweGUwLCAweGY1LCAweDUzLCAweDEyLCAweDIyLCAweDU2LCAweDI0LCAKKzB4MDQsIDB4MTIsIDB4MjEsIDB4ZjMsIDB4ZTAsIDB4ZjUsIDB4NTQsIDB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4NTUsIAorMHhlNSwgMHg1MywgMHhjNCwgMHgxMywgMHgxMywgMHgxMywgMHg1NCwgMHgwMSwgMHg3OCwgMHg4OCwgMHhmNiwgMHhkMywgMHg5NCwgMHgwMCwgMHg0MCwgMHgwNiwgCisweGU1LCAweDU0LCAweDMwLCAweGUxLCAweDAxLCAweDA2LCAweDc4LCAweDg4LCAweGU2LCAweDEyLCAweDIyLCAweDJjLCAweDkwLCAweDAwLCAweDBjLCAweGVmLCAKKzB4MTIsIDB4MWEsIDB4NGEsIDB4NzgsIDB4ODAsIDB4MTIsIDB4MjIsIDB4MDksIDB4YTMsIDB4YTMsIDB4ZTAsIDB4ZmUsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4NTMsIAorMHgwNywgMHgwYywgMHg1MywgMHgwNiwgMHhlNiwgMHhlNSwgMHg1MywgMHgzMCwgMHhlNSwgMHgwMywgMHg0MywgMHgwNywgMHgwMSwgMHhlNSwgMHg1NCwgMHgyMCwgCisweGU1LCAweDBlLCAweGU1LCAweDUzLCAweDU0LCAweDdmLCAweDcwLCAweDA4LCAweGU1LCAweDUzLCAweDIwLCAweGU3LCAweDAzLCAweDQzLCAweDA3LCAweDAyLCAKKzB4ZTUsIDB4NTMsIDB4MzAsIDB4ZTMsIDB4MDMsIDB4NDMsIDB4MDcsIDB4MTAsIDB4ZTUsIDB4NTMsIDB4MzAsIDB4ZTIsIDB4MDMsIDB4NDMsIDB4MDcsIDB4MjAsIAorMHhlNSwgMHg1MywgMHg1NCwgMHgwMywgMHg2MCwgMHgwMywgMHg0MywgMHgwNywgMHg0MCwgMHhlNSwgMHg1MywgMHgzMCwgMHhlMSwgMHgwMywgMHg0MywgMHgwNywgCisweDgwLCAweGU1LCAweDUzLCAweDMwLCAweGU0LCAweDAzLCAweDQzLCAweDA2LCAweDAxLCAweGU1LCAweDUzLCAweDMwLCAweGU2LCAweDAzLCAweDQzLCAweDA2LCAKKzB4MDgsIDB4ZTUsIDB4NTQsIDB4MjAsIDB4ZTQsIDB4MGUsIDB4ZTUsIDB4NTMsIDB4NTQsIDB4N2YsIDB4NzAsIDB4MDgsIDB4ZTUsIDB4NTMsIDB4MjAsIDB4ZTcsIAorMHgwMywgMHg0MywgMHgwNiwgMHgxMCwgMHg1MywgMHgwNywgMHhmYiwgMHg1MywgMHgwNiwgMHg3OSwgMHg5MCwgMHgwMCwgMHgwNSwgMHhlZSwgMHg4ZiwgMHhmMCwgCisweDEyLCAweDFhLCAweGVmLCAweGU1LCAweDU1LCAweDMwLCAweGUzLCAweDEyLCAweDU0LCAweDMwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweDEyLCAweDIyLCAKKzB4MmMsIDB4OTAsIDB4MDAsIDB4MDgsIDB4ZWYsIDB4MTIsIDB4MWEsIDB4NGEsIDB4ODAsIDB4MGEsIDB4MTIsIDB4MjIsIDB4MmQsIDB4OTAsIDB4MDAsIDB4MDgsIAorMHhlNCwgMHgxMiwgMHgxYSwgMHg0YSwgMHhlNSwgMHg1NSwgMHg1NCwgMHgwMywgMHgxMiwgMHgyMiwgMHgyYywgMHg5MCwgMHgwMCwgMHgwNywgMHhlZiwgMHgxMiwgCisweDFhLCAweDRhLCAweGU1LCAweDU1LCAweDU0LCAweDA0LCAweGZmLCAweGMzLCAweDEzLCAweDkwLCAweDAwLCAweDA5LCAweDEyLCAweDFhLCAweDRhLCAweDkwLCAKKzB4MDAsIDB4MDcsIDB4MTIsIDB4MWEsIDB4MGIsIDB4NzAsIDB4MTMsIDB4MTIsIDB4MjIsIDB4MmQsIDB4ZTksIDB4MjQsIDB4MDksIDB4ZjksIDB4ZTQsIDB4M2EsIAorMHhmYSwgMHgxMiwgMHgxOSwgMHhmMiwgMHhmZiwgMHhjMywgMHgxMywgMHgxMiwgMHgxYSwgMHgzOCwgMHgxMiwgMHgyMiwgMHg3OCwgMHgyNCwgMHgwOCwgMHgxMiwgCisweDIxLCAweGYzLCAweGUwLCAweGZlLCAweDhkLCAweDgyLCAweDhjLCAweDgzLCAweGU1LCAweDgyLCAweDI0LCAweDA3LCAweDEyLCAweDIxLCAweGYzLCAweGUwLCAKKzB4ZmQsIDB4ZWUsIDB4ZWQsIDB4MTIsIDB4MjIsIDB4MmMsIDB4OTAsIDB4MDAsIDB4MDMsIDB4ZWUsIDB4OGYsIDB4ZjAsIDB4MTIsIDB4MWEsIDB4ZWYsIDB4MTIsIAorMHgzMSwgMHhjNywgMHg3ZCwgMHgwYSwgMHhlNCwgMHhmZiwgMHgxMiwgMHgyZiwgMHgxOCwgMHgwMiwgMHgxMCwgMHg4NiwgMHg5MCwgMHhmYSwgMHhlMywgMHhlMCwgCisweGI0LCAweDAzLCAweDA2LCAweDdlLCAweDAwLCAweDdmLCAweDQwLCAweDgwLCAweDA0LCAweDdlLCAweDAwLCAweDdmLCAweDA4LCAweDkwLCAweGZhLCAweGQ3LCAKKzB4ZWUsIDB4ZjAsIDB4YTMsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4MDAsIDB4MDUsIDB4MTIsIDB4MWEsIDB4MGIsIDB4ZmYsIDB4N2UsIDB4MDAsIDB4OTAsIDB4ZmEsIAorMHhkMywgMHhlZSwgMHhmMCwgMHhhMywgMHhlZiwgMHhmMCwgMHg3MCwgMHgwMywgMHg3ZiwgMHgwOCwgMHgyMiwgMHg5MCwgMHgwMCwgMHgwOCwgMHgxMiwgMHgxYSwgCisweDk4LCAweGZmLCAweDkwLCAweGZhLCAweGQ1LCAweGU1LCAweGYwLCAweGYwLCAweGEzLCAweGVmLCAweGYwLCAweGFlLCAweDAyLCAweGFmLCAweDAxLCAweDhlLCAKKzB4NTAsIDB4OGYsIDB4NTEsIDB4NzQsIDB4MGEsIDB4MjUsIDB4NTEsIDB4ZjUsIDB4NTEsIDB4ZTQsIDB4MzUsIDB4NTAsIDB4ZjUsIDB4NTAsIDB4OTAsIDB4ZmEsIAorMHhkOCwgMHhlMCwgMHhmZiwgMHgxNCwgMHhmZSwgMHg5MCwgMHhmYSwgMHhkNiwgMHhlMCwgMHg1ZSwgMHhmZSwgMHhjMywgMHhlZiwgMHg5ZSwgMHhmZiwgMHg5MCwgCisweGZhLCAweGRhLCAweGYwLCAweGMzLCAweDkwLCAweGZhLCAweGQ0LCAweGUwLCAweDlmLCAweDkwLCAweGZhLCAweGQzLCAweGUwLCAweDk0LCAweDAwLCAweDUwLCAKKzB4MDYsIDB4YTMsIDB4ZTAsIDB4OTAsIDB4ZmEsIDB4ZGEsIDB4ZjAsIDB4MTIsIDB4MWYsIDB4ZmIsIDB4NjAsIDB4MDMsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4MTIsIAorMHgyZCwgMHg1YSwgMHg5MCwgMHhmYSwgMHhkMywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHhmZiwgMHg0ZSwgMHg2MCwgMHgyYiwgMHg5MCwgMHhmYSwgMHhkNywgCisweGUwLCAweGZjLCAweGEzLCAweGUwLCAweGZkLCAweGQzLCAweGVmLCAweDlkLCAweGVlLCAweDljLCAweDQwLCAweDA3LCAweGUwLCAweDkwLCAweGZhLCAweGRhLCAKKzB4ZjAsIDB4ODAsIDB4MDgsIDB4OTAsIDB4ZmEsIDB4ZDQsIDB4ZTAsIDB4OTAsIDB4ZmEsIDB4ZGEsIDB4ZjAsIDB4MTIsIDB4MWYsIDB4ZmIsIDB4NjAsIDB4MDMsIAorMHhlMCwgMHhmZiwgMHgyMiwgMHgxMiwgMHgyZCwgMHg1YSwgMHg4MCwgMHhjYSwgMHg3YiwgMHgwMCwgMHg3YSwgMHgwMCwgMHg3OSwgMHg1MiwgMHhlNCwgMHhmNSwgCisweDJkLCAweGY1LCAweDJlLCAweDdkLCAweDAxLCAweDEyLCAweDI1LCAweGQ3LCAweDdmLCAweDAwLCAweDIyLCAweGFhLCAweDUwLCAweGE5LCAweDUxLCAweDdiLCAKKzB4MDEsIDB4OTAsIDB4ZmEsIDB4ZDUsIDB4ZTAsIDB4ZmMsIDB4YTMsIDB4ZTAsIDB4ZmQsIDB4OTAsIDB4ZmEsIDB4ZGEsIDB4ZTAsIDB4ZjUsIDB4NGEsIDB4MTIsIAorMHgyOCwgMHg5ZiwgMHg5MCwgMHhmYSwgMHhkOSwgMHhlZiwgMHhmMCwgMHgyMiwgMHhlZiwgMHgyNCwgMHhhZSwgMHg2MCwgMHg1MiwgMHgyNCwgMHhmZSwgMHg2MCwgCisweDJlLCAweDI0LCAweGZlLCAweDcwLCAweDAzLCAweDAyLCAweDIwLCAweGJiLCAweDI0LCAweDA2LCAweDYwLCAweDAzLCAweDAyLCAweDIxLCAweDAzLCAweDc4LCAKKzB4NzEsIDB4ZTYsIDB4NTQsIDB4ZmIsIDB4ZjYsIDB4OTAsIDB4ZmYsIDB4YTUsIDB4ZTAsIDB4ZjUsIDB4MjIsIDB4NDQsIDB4MGYsIDB4ZjAsIDB4NzQsIDB4MzMsIAorMHg5MCwgMHhmYSwgMHg5MSwgMHhmMCwgMHhlNSwgMHgyMiwgMHhhMywgMHhmMCwgMHg5MCwgMHhmYSwgMHhhZiwgMHg3NCwgMHgwMSwgMHhmMCwgMHgyMiwgMHg3OCwgCisweDcyLCAweGU2LCAweDU0LCAweGZiLCAweGY2LCAweDkwLCAweGZmLCAweGI1LCAweGUwLCAweGY1LCAweDIyLCAweDQ0LCAweDBmLCAweGYwLCAweDc0LCAweDQzLCAKKzB4OTAsIDB4ZmEsIDB4OTMsIDB4ZjAsIDB4ZTUsIDB4MjIsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4ZmEsIDB4YjAsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MjIsIDB4OTAsIAorMHhmYSwgMHg5ZCwgMHhlMCwgMHhhMywgMHgyMCwgMHhlNSwgMHgwMywgMHgwMiwgMHgyMSwgMHgwMywgMHg5MCwgMHhmZiwgMHhhNiwgMHhlMCwgMHg5MCwgMHhmYSwgCisweGNhLCAweGYwLCAweGEzLCAweGYwLCAweDkwLCAweGZhLCAweGNhLCAweGUwLCAweGZmLCAweDU0LCAweDBmLCAweGZlLCAweDYwLCAweDEwLCAweDkwLCAweGZmLCAKKzB4YTYsIDB4MTIsIDB4MjIsIDB4NWQsIDB4OTAsIDB4ZmYsIDB4YTYsIDB4ZTAsIDB4OTAsIDB4ZmEsIDB4Y2EsIDB4ZjAsIDB4ODAsIDB4ZTYsIDB4OTAsIDB4ZmEsIAorMHhjYiwgMHhlMCwgMHhmZiwgMHg3NCwgMHgzNCwgMHhmZSwgMHgxMiwgMHgyYywgMHhiNCwgMHhlZiwgMHg3MCwgMHg1NywgMHg5MCwgMHhmYSwgMHhjYiwgMHhlMCwgCisweGZmLCAweDc0LCAweDM0LCAweDkwLCAweGZhLCAweDk1LCAweGYwLCAweGVmLCAweGEzLCAweGYwLCAweDIyLCAweDkwLCAweGZhLCAweGE3LCAweGUwLCAweGEzLCAKKzB4MzAsIDB4ZTUsIDB4NDAsIDB4OTAsIDB4ZmYsIDB4YjYsIDB4ZTAsIDB4OTAsIDB4ZmEsIDB4Y2EsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4ZmEsIDB4Y2EsIAorMHhlMCwgMHhmZiwgMHg1NCwgMHgwZiwgMHhmZSwgMHg2MCwgMHgxMCwgMHg5MCwgMHhmZiwgMHhiNiwgMHgxMiwgMHgyMiwgMHg1ZCwgMHg5MCwgMHhmZiwgMHhiNiwgCisweGUwLCAweDkwLCAweGZhLCAweGNhLCAweGYwLCAweDgwLCAweGU2LCAweDkwLCAweGZhLCAweGNiLCAweGUwLCAweGZmLCAweDc0LCAweDQ0LCAweGZlLCAweDEyLCAKKzB4MmMsIDB4YjQsIDB4ZWYsIDB4NzAsIDB4MGUsIDB4OTAsIDB4ZmEsIDB4Y2IsIDB4ZTAsIDB4ZmYsIDB4NzQsIDB4NDQsIDB4OTAsIDB4ZmEsIDB4OTcsIDB4ZjAsIAorMHhlZiwgMHhhMywgMHhmMCwgMHgyMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHhmMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHhkMCwgMHg3NSwgMHhkMCwgCisweDAwLCAweGMwLCAweDAwLCAweGMwLCAweDAxLCAweGMwLCAweDAyLCAweGMwLCAweDAzLCAweGMwLCAweDA0LCAweGMwLCAweDA1LCAweGMwLCAweDA2LCAweGMwLCAKKzB4MDcsIDB4OTAsIDB4ZmYsIDB4OTIsIDB4ZTAsIDB4ZmYsIDB4OTAsIDB4ZmEsIDB4YzksIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4OTIsIDB4ZTQsIDB4ZjAsIDB4ZWYsIAorMHgxMiwgMHgxYiwgMHg0YywgMHgyMSwgMHhiYiwgMHgyNiwgMHgyMSwgMHhiYiwgMHgyZSwgMHgyMSwgMHg1ZSwgMHgzMCwgMHgyMSwgMHg1ZSwgMHgzMiwgMHgyMSwgCisweDZjLCAweDM4LCAweDIxLCAweDdlLCAweDNhLCAweDIxLCAweGIwLCAweDNlLCAweDIxLCAweDliLCAweDQ0LCAweDIxLCAweDkwLCAweDQ2LCAweDIxLCAweGE2LCAKKzB4NTAsIDB4MjEsIDB4YTYsIDB4NTIsIDB4MjEsIDB4YTYsIDB4NTQsIDB4MjEsIDB4YTYsIDB4NTYsIDB4MDAsIDB4MDAsIDB4MjEsIDB4YzAsIDB4OTAsIDB4ZmEsIAorMHhjOSwgMHhlMCwgMHhmZCwgMHg3YywgMHgwMCwgMHg3ZiwgMHgwMSwgMHgxMiwgMHgxMSwgMHgxNiwgMHg4MCwgMHg2MiwgMHg3YywgMHgwMCwgMHg3ZCwgMHgwMSwgCisweDdmLCAweDAzLCAweDEyLCAweDExLCAweDE2LCAweDkwLCAweGZmLCAweGZlLCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAweDgwLCAweDUwLCAweDdjLCAweDAwLCAKKzB4N2QsIDB4MDEsIDB4N2YsIDB4MDIsIDB4MTIsIDB4MTEsIDB4MTYsIDB4OTAsIDB4ZmYsIDB4ZmUsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4ODAsIDB4M2UsIAorMHg3YywgMHgwMCwgMHg3ZCwgMHgwMSwgMHg3ZiwgMHgwNSwgMHgxMiwgMHgxMSwgMHgxNiwgMHg4MCwgMHgzMywgMHg3YywgMHgwMCwgMHg3ZCwgMHgwMSwgMHg3ZiwgCisweDA2LCAweDEyLCAweDExLCAweDE2LCAweDgwLCAweDI4LCAweDkwLCAweGZhLCAweGM5LCAweGUwLCAweGZmLCAweDEyLCAweDIwLCAweDE4LCAweDgwLCAweDFlLCAKKzB4N2MsIDB4MDAsIDB4N2QsIDB4MDEsIDB4N2YsIDB4MDQsIDB4MTIsIDB4MTEsIDB4MTYsIDB4ODAsIDB4MTMsIDB4MTIsIDB4MjcsIDB4OGQsIDB4ODAsIDB4MGUsIAorMHg5MCwgMHhmYSwgMHhjOSwgMHhlMCwgMHgyNCwgMHgwMCwgMHhmZiwgMHhlNCwgMHgzNCwgMHhmZiwgMHhmZSwgMHgxMiwgMHgyYywgMHhiNCwgMHhkMCwgMHgwNywgCisweGQwLCAweDA2LCAweGQwLCAweDA1LCAweGQwLCAweDA0LCAweGQwLCAweDAzLCAweGQwLCAweDAyLCAweGQwLCAweDAxLCAweGQwLCAweDAwLCAweGQwLCAweGQwLCAKKzB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZjAsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4NzgsIDB4N2MsIDB4ZTYsIDB4ZmUsIDB4MDgsIDB4ZTYsIDB4MjQsIAorMHgwNCwgMHg4ZSwgMHg4MywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg4MywgMHhmNSwgMHg4MywgMHgyMiwgMHg3NCwgMHgxMiwgMHgyNSwgMHgyNCwgMHhmNSwgCisweDgyLCAweGU0LCAweDM0LCAweGY5LCAweGY1LCAweDgzLCAweDIyLCAweDc4LCAweDdjLCAweGU2LCAweGZlLCAweDA4LCAweGU2LCAweGY1LCAweDgyLCAweDhlLCAKKzB4ODMsIDB4MjIsIDB4NzgsIDB4ODAsIDB4ZTYsIDB4ZmUsIDB4MDgsIDB4ZTYsIDB4YWEsIDB4MDYsIDB4ZjgsIDB4YWMsIDB4MDIsIDB4N2QsIDB4MDEsIDB4N2IsIAorMHhmZiwgMHg3YSwgMHgzMSwgMHg3OSwgMHg5OSwgMHg3ZSwgMHgwMCwgMHg3ZiwgMHgwYSwgMHgwMiwgMHgxOSwgMHhjYywgMHhmZiwgMHg5MCwgMHhmOSwgMHg2YywgCisweDAyLCAweDFiLCAweDNhLCAweDkwLCAweGY5LCAweDY3LCAweDEyLCAweDFiLCAweDNhLCAweDkwLCAweDAwLCAweDA0LCAweDAyLCAweDFhLCAweDBiLCAweGU2LCAKKzB4ZmMsIDB4MDgsIDB4ZTYsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4YTMsIDB4YTMsIDB4MjIsIDB4NzgsIDB4N2UsIDB4ZTYsIDB4ZmUsIDB4MDgsIDB4ZTYsIAorMHhmZiwgMHgyMiwgMHhlZCwgMHgxMiwgMHgxYSwgMHg0YSwgMHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlNSwgMHg4MiwgMHgyMiwgMHhlZiwgMHhmMCwgMHg5MCwgCisweGZhLCAweGNiLCAweGUwLCAweDU0LCAweDBmLCAweDRlLCAweGZlLCAweGYwLCAweGVmLCAweDU0LCAweGYwLCAweDRlLCAweGYwLCAweDIyLCAweDA4LCAweGU2LCAKKzB4ZmMsIDB4MDgsIDB4ZTYsIDB4OGMsIDB4ODMsIDB4MjQsIDB4MDksIDB4MjIsIDB4NzgsIDB4N2UsIDB4ZTYsIDB4ZmMsIDB4MDgsIDB4ZTYsIDB4ZmQsIDB4OGMsIAorMHg4MywgMHgyMiwgMHhhNiwgMHgwNywgMHhlNiwgMHgyNCwgMHg2ZSwgMHhmOCwgMHhlNiwgMHgyMiwgMHg3OCwgMHg3ZSwgMHhlNiwgMHhmYSwgMHgwOCwgMHhlNiwgCisweGZiLCAweDIyLCAweDI2LCAweGY2LCAweDE4LCAweGVlLCAweDM2LCAweGY2LCAweDIyLCAweDhiLCAweDgyLCAweDhhLCAweDgzLCAweGU1LCAweDgyLCAweDIyLCAKKzB4OGIsIDB4MjUsIDB4OGEsIDB4MjYsIDB4ODksIDB4MjcsIDB4OGQsIDB4MjgsIDB4OTAsIDB4ZmEsIDB4Y2YsIDB4ZTQsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MDIsIAorMHhmMCwgMHg3YiwgMHgwMSwgMHg3YSwgMHhmYSwgMHg3OSwgMHhjZSwgMHg5MCwgMHhmYSwgMHhjZiwgMHhlMCwgMHhmNSwgMHgyZCwgMHhhMywgMHhlMCwgMHhmNSwgCisweDJlLCAweDdkLCAweDAxLCAweDEyLCAweDI1LCAweGQ3LCAweDkwLCAweGZhLCAweGNlLCAweGUwLCAweDY1LCAweDI4LCAweDYwLCAweDQ2LCAweGEzLCAweGUwLCAKKzB4ZmYsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4Y2YsIDB4ZjAsIDB4YTMsIDB4ZWYsIDB4ZjAsIDB4MTIsIDB4MjMsIDB4MmYsIDB4OTAsIDB4ZmEsIDB4Y2UsIDB4ZTAsIAorMHhmZiwgMHg5MCwgMHhmYSwgMHhkMSwgMHhlNCwgMHg4ZiwgMHhmMCwgMHgxMiwgMHgxYSwgMHg2YywgMHgxMiwgMHgyMywgMHgyZiwgMHg5MCwgMHhmYSwgMHhkMSwgCisweGUwLCAweGZmLCAweGEzLCAweGUwLCAweDkwLCAweGZhLCAweGNmLCAweGNmLCAweGYwLCAweGEzLCAweGVmLCAweGYwLCAweDkwLCAweGZhLCAweGNlLCAweGUwLCAKKzB4YTMsIDB4NzUsIDB4ZjAsIDB4MDAsIDB4MTIsIDB4MWEsIDB4NmMsIDB4OTAsIDB4ZmEsIDB4Y2YsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDQsIDB4MTIsIDB4MWEsIAorMHg2YywgMHgwMiwgMHgyMiwgMHhiMSwgMHg5MCwgMHhmYSwgMHhkMCwgMHhlMCwgMHgyNCwgMHgwMSwgMHhmZiwgMHg5MCwgMHhmYSwgMHhjZiwgMHhlMCwgMHgzNCwgCisweDAwLCAweGFiLCAweDI1LCAweGFhLCAweDI2LCAweGE5LCAweDI3LCAweDhmLCAweGYwLCAweDEyLCAweDFhLCAweGQwLCAweDdmLCAweDAwLCAweDIyLCAweDdiLCAKKzB4MDEsIDB4N2EsIDB4ZmEsIDB4NzksIDB4Y2UsIDB4OTAsIDB4ZmEsIDB4Y2YsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDEsIDB4MTIsIDB4MWEsIDB4NmMsIDB4ODUsIAorMHhmMCwgMHgyZSwgMHhmNSwgMHgyZCwgMHg3ZCwgMHgwMSwgMHgwMiwgMHgyNSwgMHhkNywgMHg4ZiwgMHg2MiwgMHgxMiwgMHgyYSwgMHgwNiwgMHgxMiwgMHgyMiwgCisweDRhLCAweDhlLCAweDgzLCAweDI0LCAweDBiLCAweDEyLCAweDIxLCAweGYzLCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweDQ0LCAweDAyLCAweGYwLCAweDA4LCAKKzB4MTIsIDB4MjIsIDB4M2YsIDB4ZTAsIDB4YTMsIDB4MzAsIDB4ZTUsIDB4MGMsIDB4MTIsIDB4MjIsIDB4NTYsIDB4MjQsIDB4MGIsIDB4MTIsIDB4MjEsIDB4ZjMsIAorMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg3OCwgMHg3YywgMHhlNiwgMHhmZSwgMHgwOCwgMHhlNiwgMHhmZiwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgCisweDU0LCAweGI4LCAweGZkLCAweGYwLCAweGU1LCAweDYyLCAweDI0LCAweGZlLCAweDQ0LCAweDIwLCAweGZjLCAweDRkLCAweGYwLCAweGU1LCAweDgyLCAweDI0LCAKKzB4MDQsIDB4MTIsIDB4MjEsIDB4ZjMsIDB4ZTAsIDB4NTQsIDB4YjgsIDB4ZjAsIDB4NGMsIDB4ZjAsIDB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4YTMsIDB4NzQsIAorMHgwMywgMHhmMCwgMHgxOCwgMHhlNiwgMHhmZSwgMHgwOCwgMHhlNiwgMHhmZiwgMHg4ZSwgMHg4MywgMHgyNCwgMHgwNSwgMHgxMiwgMHgyMSwgMHhmMywgMHhjMCwgCisweDgzLCAweGMwLCAweDgyLCAweGUwLCAweGZkLCAweDc0LCAweDk2LCAweDI1LCAweDYyLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweGZhLCAweGY1LCAweDgzLCAKKzB4ZTAsIDB4NTQsIDB4ZmMsIDB4NDQsIDB4MDMsIDB4ZmMsIDB4ZWQsIDB4NGMsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZjAsIDB4OGYsIDB4ODIsIDB4OGUsIAorMHg4MywgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHhlNSwgMHg4MiwgMHgyNCwgMHgwNCwgMHgxMiwgMHgyMSwgMHhmMywgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgCisweDEyLCAweDMxLCAweGM3LCAweDc0LCAweDZlLCAweDI1LCAweDYyLCAweGY4LCAweDc0LCAweDA0LCAweDQ2LCAweGY2LCAweDdmLCAweDAwLCAweDIyLCAweDEyLCAKKzB4MTAsIDB4MDMsIDB4N2YsIDB4MDIsIDB4MTIsIDB4MTIsIDB4MTksIDB4NzgsIDB4NjcsIDB4ZTYsIDB4NDQsIDB4MDIsIDB4ZjYsIDB4ZDIsIDB4YjAsIDB4ZDIsIAorMHhiMSwgMHg5MCwgMHhmOSwgMHgxNSwgMHhlMCwgMHgzMCwgMHhlNywgMHgwNywgMHg5MCwgMHhmZiwgMHg5ZSwgMHhlNCwgMHhmMCwgMHg4MCwgMHgzNiwgMHhkMiwgCisweGIzLCAweDkwLCAweGZmLCAweGE0LCAweGUwLCAweDkwLCAweGZhLCAweDdiLCAweGYwLCAweDkwLCAweGZmLCAweGI0LCAweGUwLCAweDkwLCAweGZhLCAweDdjLCAKKzB4ZjAsIDB4OTAsIDB4ZmYsIDB4YTIsIDB4ZTAsIDB4OTAsIDB4ZmEsIDB4NzksIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4YjIsIDB4ZTAsIDB4OTAsIDB4ZmEsIDB4N2EsIAorMHhmMCwgMHg5MCwgMHhmZiwgMHhhNCwgMHg3NCwgMHgzMCwgMHhmMCwgMHg5MCwgMHhmZiwgMHhiNCwgMHhmMCwgMHg5MCwgMHhmZiwgMHhhMiwgMHg3NCwgMHg0MCwgCisweGYwLCAweDkwLCAweGZmLCAweGIyLCAweGYwLCAweDkwLCAweGZhLCAweGU0LCAweGU1LCAweGE4LCAweGYwLCAweDc1LCAweGE4LCAweDgxLCAweDkwLCAweGZmLCAKKzB4OTIsIDB4ZTAsIDB4NjAsIDB4MDQsIDB4ZTQsIDB4ZjAsIDB4ODAsIDB4ZjYsIDB4OTAsIDB4ZmYsIDB4ZmQsIDB4NzQsIDB4M2EsIDB4ZjAsIDB4NDMsIDB4ODcsIAorMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHhmYSwgMHg3YiwgMHhlMCwgMHg5MCwgMHhmZiwgMHhhNCwgMHhmMCwgMHg5MCwgMHhmYSwgMHg3YywgMHhlMCwgCisweDkwLCAweGZmLCAweGI0LCAweGYwLCAweDkwLCAweGZhLCAweDc5LCAweGUwLCAweDkwLCAweGZmLCAweGEyLCAweGYwLCAweDkwLCAweGZhLCAweDdhLCAweGUwLCAKKzB4OTAsIDB4ZmYsIDB4YjIsIDB4ZjAsIDB4OTAsIDB4ZjksIDB4MTcsIDB4ZTAsIDB4NjAsIDB4MDIsIDB4YzIsIDB4YjMsIDB4OTAsIDB4ZmEsIDB4ZTQsIDB4ZTAsIAorMHhmNSwgMHhhOCwgMHgwMiwgMHgxMCwgMHg4NiwgMHg4YiwgMHg1YywgMHg4YSwgMHg1ZCwgMHg4OSwgMHg1ZSwgMHgxMiwgMHgyZCwgMHgzYywgMHg5MCwgMHhmYSwgCisweGMwLCAweDEyLCAweDFiLCAweDQzLCAweGFhLCAweDVkLCAweGE5LCAweDVlLCAweDkwLCAweGZhLCAweGMzLCAweDEyLCAweDFiLCAweDQzLCAweDkwLCAweGZhLCAKKzB4YzQsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MGEsIDB4MTIsIDB4MWEsIDB4NmMsIDB4OTAsIDB4ZmEsIDB4YzMsIDB4MTIsIDB4MWIsIDB4M2EsIDB4ZTksIDB4MjQsIAorMHgwMSwgMHhmOSwgMHhlNCwgMHgzYSwgMHhmYSwgMHg5MCwgMHhmYSwgMHhjNiwgMHgxMiwgMHgxYiwgMHg0MywgMHhhYiwgMHg1YywgMHhhYSwgMHg1ZCwgMHhhOSwgCisweDVlLCAweDEyLCAweDJkLCAweDQ4LCAweGUwLCAweGZmLCAweGMzLCAweDEzLCAweGYwLCAweGU0LCAweDc4LCAweDgyLCAweGY2LCAweDkwLCAweGZhLCAweGJlLCAKKzB4ZTAsIDB4ZmYsIDB4NzgsIDB4ODIsIDB4ZTYsIDB4YzMsIDB4OWYsIDB4NTAsIDB4NGEsIDB4OTAsIDB4ZmEsIDB4YzAsIDB4MTIsIDB4MmQsIDB4MWQsIDB4ZmYsIAorMHg3OCwgMHg4MywgMHhmNiwgMHg5MCwgMHhmYSwgMHhjMywgMHgxMiwgMHgyZCwgMHgxZCwgMHhmZSwgMHhmNCwgMHg1ZiwgMHhmZiwgMHg3OCwgMHg4MywgMHhmNiwgCisweDEyLCAweDJkLCAweDFhLCAweDVlLCAweDRmLCAweGZmLCAweDc4LCAweDgzLCAweGY2LCAweDEyLCAweDJkLCAweDIzLCAweDc1LCAweGYwLCAweDAyLCAweDEyLCAKKzB4MWEsIDB4NmMsIDB4OTAsIDB4ZmEsIDB4YzQsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDIsIDB4MTIsIDB4MWEsIDB4NmMsIDB4YWIsIDB4NWMsIDB4YWEsIDB4NWQsIAorMHhhOSwgMHg1ZSwgMHg5MCwgMHgwMCwgMHgwNCwgMHgxMiwgMHgxYSwgMHgwYiwgMHgzMCwgMHhlNCwgMHgwMywgMHgxMiwgMHgyZCwgMHgzMiwgMHg3OCwgMHg4MiwgCisweDA2LCAweDgwLCAweGFhLCAweGU0LCAweDkwLCAweGZhLCAweGJmLCAweGYwLCAweDIyLCAweDhiLCAweDU2LCAweDhhLCAweDU3LCAweDg5LCAweDU4LCAweDkwLCAKKzB4ZmEsIDB4YmYsIDB4NzQsIDB4MDYsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4ZmEsIDB4YmUsIDB4ZjAsIDB4MTIsIDB4MTksIDB4ZjIsIDB4MjQsIDB4NmUsIDB4NjAsIAorMHgyNiwgMHgxNCwgMHg3MCwgMHg3MCwgMHgxMiwgMHgyZCwgMHgwOSwgMHg2MCwgMHgwOSwgMHgyNCwgMHgzMCwgMHg3MCwgMHgxMiwgMHgxMiwgMHgyNCwgMHg5NSwgCisweDgwLCAweDYyLCAweDEyLCAweDJkLCAweDUzLCAweDEyLCAweDFmLCAweDJjLCAweDkwLCAweGZhLCAweGJmLCAweGVmLCAweGYwLCAweDgwLCAweDU1LCAweDkwLCAKKzB4ZmEsIDB4YmYsIDB4NzQsIDB4ODEsIDB4ZjAsIDB4ODAsIDB4NGQsIDB4MTIsIDB4MmQsIDB4MDksIDB4NjAsIDB4MDksIDB4MjQsIDB4MzAsIDB4NzAsIDB4M2UsIAorMHgxMiwgMHgyYywgMHg1ZiwgMHg4MCwgMHgzZiwgMHhlNSwgMHg1OCwgMHgyNCwgMHgwMywgMHhmOSwgMHhlNCwgMHgzNSwgMHg1NywgMHhmYSwgMHg3YiwgMHgwMSwgCisweGMwLCAweDAzLCAweGMwLCAweDAyLCAweGMwLCAweDAxLCAweDEyLCAweDJkLCAweDUzLCAweDkwLCAweDAwLCAweDA1LCAweDEyLCAweDFhLCAweDBiLCAweGZkLCAKKzB4OTAsIDB4MDAsIDB4MDgsIDB4MTIsIDB4MWEsIDB4OTgsIDB4ZjUsIDB4MmUsIDB4ODUsIDB4ZjAsIDB4MmQsIDB4ZDAsIDB4MDEsIDB4ZDAsIDB4MDIsIDB4ZDAsIAorMHgwMywgMHgxMiwgMHgyNSwgMHhkNywgMHg5MCwgMHhmYSwgMHhiZSwgMHhlZiwgMHhmMCwgMHhlNCwgMHhhMywgMHhmMCwgMHg4MCwgMHgwNiwgMHg5MCwgMHhmYSwgCisweGJmLCAweDc0LCAweDgxLCAweGYwLCAweDkwLCAweGZhLCAweGJmLCAweGUwLCAweDEyLCAweDJkLCAweDUzLCAweDkwLCAweDAwLCAweDAyLCAweDEyLCAweDFhLCAKKzB4NGEsIDB4OTAsIDB4ZmEsIDB4YmUsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OGIsIDB4MjksIDB4OGEsIDB4MmEsIDB4ODksIDB4MmIsIDB4OGQsIDB4MmMsIDB4ZTUsIAorMHgyYywgMHg3MCwgMHgwMywgMHhhZiwgMHgyYywgMHgyMiwgMHgxMiwgMHgyZCwgMHg4MiwgMHg3MCwgMHgxNiwgMHgxMiwgMHgyZCwgMHhhMSwgMHhlNSwgMHgyZCwgCisweDkwLCAweGZmLCAweGYxLCAweGYwLCAweDEyLCAweDMxLCAweDFiLCAweDUwLCAweGYyLCAweDEyLCAweDI2LCAweDY0LCAweDQwLCAweDBiLCAweDdmLCAweDAwLCAKKzB4MjIsIDB4MTIsIDB4MmQsIDB4YTEsIDB4MTIsIDB4MjYsIDB4NjQsIDB4NTAsIDB4ZjgsIDB4OTAsIDB4ZmYsIDB4ZjMsIDB4NzQsIDB4YTEsIDB4ZjAsIDB4ZTUsIAorMHgyYywgMHhiNCwgMHgwMSwgMHgwNywgMHg5MCwgMHhmZiwgMHhmMCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg5MCwgMHhmZiwgMHhmMSwgMHhlNCwgMHhmMCwgCisweGY1LCAweDJmLCAweGU1LCAweDJjLCAweDE0LCAweGZmLCAweGU1LCAweDJmLCAweGMzLCAweDlmLCAweDUwLCAweDJhLCAweDEyLCAweDMxLCAweDA0LCAweDQwLCAKKzB4MDMsIDB4YWYsIDB4MmYsIDB4MjIsIDB4YzMsIDB4ZTUsIDB4MmMsIDB4OTUsIDB4MmYsIDB4ZmYsIDB4YmYsIDB4MDIsIDB4MDcsIDB4OTAsIDB4ZmYsIDB4ZjAsIAorMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHgxMiwgMHgyZCwgMHg5NCwgMHgwNSwgMHgyZiwgMHg3NCwgMHgwMSwgMHgyNSwgMHgyYiwgMHhmNSwgMHgyYiwgMHhlNCwgCisweDM1LCAweDJhLCAweGY1LCAweDJhLCAweDgwLCAweGNjLCAweDEyLCAweDMxLCAweDA0LCAweDQwLCAweDAzLCAweDdmLCAweDE4LCAweDIyLCAweDEyLCAweDJkLCAKKzB4OTQsIDB4YWYsIDB4MmMsIDB4MjIsIDB4OTAsIDB4ZmYsIDB4ZjEsIDB4ZTUsIDB4MmUsIDB4ZjAsIDB4MDIsIDB4MzEsIDB4MWIsIDB4MTIsIDB4MTAsIDB4MDMsIAorMHg3OCwgMHg4NCwgMHgxMiwgMHgyMiwgMHg4MiwgMHgzMCwgMHhlMSwgMHgwOCwgMHg3ZiwgMHgxMywgMHgxMiwgMHgzMCwgMHhlYywgMHgwMiwgMHgyNiwgMHhmYiwgCisweDc4LCAweDg0LCAweGU2LCAweGY5LCAweDI0LCAweDEyLCAweDEyLCAweDIxLCAweGZmLCAweGUwLCAweGZmLCAweDMwLCAweGU3LCAweDQwLCAweDU0LCAweDAzLCAKKzB4NjAsIDB4MWUsIDB4ZTksIDB4YjQsIDB4MDMsIDB4MGQsIDB4OTAsIDB4ZmYsIDB4OWUsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MDQsIAorMHhmMCwgMHg4MCwgMHg0NiwgMHg5MCwgMHhmZiwgMHg5ZSwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHg4MCwgMHgzOSwgCisweGU5LCAweGI0LCAweDAzLCAweDBkLCAweDkwLCAweGZmLCAweDllLCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAKKzB4MjgsIDB4OTAsIDB4ZmYsIDB4OWUsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ODAsIDB4MWIsIDB4ZWYsIDB4NTQsIAorMHgwMywgMHg2MCwgMHgxNCwgMHhlOSwgMHhiNCwgMHgwMywgMHgwOSwgMHg5MCwgMHhmZiwgMHhhNCwgMHhlMCwgMHg1NCwgMHhkZiwgMHhmMCwgMHg4MCwgMHgwNywgCisweDkwLCAweGZmLCAweGI0LCAweGUwLCAweDU0LCAweGRmLCAweGYwLCAweGMyLCAweGIzLCAweDkwLCAweGY5LCAweDE3LCAweGUwLCAweDA0LCAweGYwLCAweGFmLCAKKzB4MDEsIDB4MTIsIDB4MjIsIDB4MzMsIDB4ZmQsIDB4MTIsIDB4MmYsIDB4NDksIDB4MTIsIDB4MzAsIDB4ZWMsIDB4MDIsIDB4MTAsIDB4ODYsIDB4NzUsIDB4YTgsIAorMHg0MCwgMHg3OCwgMHg3ZiwgMHhlNCwgMHhmNiwgMHhkOCwgMHhmZCwgMHg3NSwgMHg4MSwgMHg4YiwgMHgwMiwgMHgyNywgMHg0OCwgMHgwMiwgMHgzMCwgMHhjZiwgCisweGU0LCAweDkzLCAweGEzLCAweGY4LCAweGU0LCAweDkzLCAweGEzLCAweDQwLCAweDAzLCAweGY2LCAweDgwLCAweDAxLCAweGYyLCAweDA4LCAweGRmLCAweGY0LCAKKzB4ODAsIDB4MjksIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4NTQsIDB4MDcsIDB4MjQsIDB4MGMsIDB4YzgsIDB4YzMsIDB4MzMsIDB4YzQsIDB4NTQsIDB4MGYsIAorMHg0NCwgMHgyMCwgMHhjOCwgMHg4MywgMHg0MCwgMHgwNCwgMHhmNCwgMHg1NiwgMHg4MCwgMHgwMSwgMHg0NiwgMHhmNiwgMHhkZiwgMHhlNCwgMHg4MCwgMHgwYiwgCisweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDkwLCAweDJiLCAweDRjLCAweGU0LCAweDdlLCAweDAxLCAweDkzLCAweDYwLCAKKzB4YmMsIDB4YTMsIDB4ZmYsIDB4NTQsIDB4M2YsIDB4MzAsIDB4ZTUsIDB4MDksIDB4NTQsIDB4MWYsIDB4ZmUsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NjAsIDB4MDEsIAorMHgwZSwgMHhjZiwgMHg1NCwgMHhjMCwgMHgyNSwgMHhlMCwgMHg2MCwgMHhhOCwgMHg0MCwgMHhiOCwgMHhlNCwgMHg5MywgMHhhMywgMHhmYSwgMHhlNCwgMHg5MywgCisweGEzLCAweGY4LCAweGU0LCAweDkzLCAweGEzLCAweGM4LCAweGM1LCAweDgyLCAweGM4LCAweGNhLCAweGM1LCAweDgzLCAweGNhLCAweGYwLCAweGEzLCAweGM4LCAKKzB4YzUsIDB4ODIsIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2EsIDB4ZGYsIDB4ZTksIDB4ZGUsIDB4ZTcsIDB4ODAsIDB4YmUsIDB4ZTQsIDB4ZjUsIDB4MjIsIAorMHgxMiwgMHgxZCwgMHgxMiwgMHhlMCwgMHhiNCwgMHgwNCwgMHgwZCwgMHhlNSwgMHgyMiwgMHgyNCwgMHgwMywgMHhmZiwgMHgxMiwgMHgyZiwgMHg3NywgMHgxMiwgCisweDFkLCAweDEyLCAweGU0LCAweGYwLCAweDA1LCAweDIyLCAweGU1LCAweDIyLCAweGMzLCAweDk0LCAweDAyLCAweDQwLCAweGUzLCAweGU0LCAweGY1LCAweDIyLCAKKzB4NzUsIDB4ZjAsIDB4MDIsIDB4ZTUsIDB4MjIsIDB4OTAsIDB4ZmEsIDB4OTEsIDB4MTIsIDB4MWQsIDB4NTMsIDB4NjAsIDB4MmMsIDB4MTIsIDB4MmMsIDB4YjQsIAorMHhlZiwgMHg2MCwgMHg1MiwgMHg3NSwgMHhmMCwgMHgwMiwgMHhlNSwgMHgyMiwgMHg5MCwgMHhmYSwgMHg5MSwgMHgxMiwgMHgxYiwgMHgxYywgMHhlNCwgMHhmMCwgCisweGEzLCAweGYwLCAweDc1LCAweGYwLCAweDBhLCAweGU1LCAweDIyLCAweDkwLCAweGZhLCAweDlkLCAweDEyLCAweDFiLCAweDFjLCAweGUwLCAweGEzLCAweDMwLCAKKzB4ZTYsIDB4MzMsIDB4MTIsIDB4MWQsIDB4MTIsIDB4NzQsIDB4MDQsIDB4ZjAsIDB4MjIsIDB4NzUsIDB4ZjAsIDB4MDIsIDB4ZTUsIDB4MjIsIDB4OTAsIDB4ZmEsIAorMHg5NSwgMHgxMiwgMHgxZCwgMHg1MywgMHg2MCwgMHgxNiwgMHgxMiwgMHgyYywgMHhiNCwgMHhlZiwgMHg2MCwgMHgxOSwgMHg3NSwgMHhmMCwgMHgwMiwgMHhlNSwgCisweDIyLCAweDkwLCAweGZhLCAweDk1LCAweDEyLCAweDFiLCAweDFjLCAweGU0LCAweGYwLCAweGEzLCAweGYwLCAweDIyLCAweDA1LCAweDIyLCAweGU1LCAweDIyLCAKKzB4YzMsIDB4OTQsIDB4MDIsIDB4NDAsIDB4OWIsIDB4MjIsIDB4ZTQsIDB4ZmYsIDB4OTAsIDB4ZmYsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4MGYsIDB4ZmUsIDB4ZWYsIAorMHhjMywgMHg5ZSwgMHg1MCwgMHgxNywgMHg3NCwgMHhmMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHhmZSwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMiwgCisweDFjLCAweDExLCAweDEyLCAweDFhLCAweDM4LCAweDBmLCAweDEyLCAweDFjLCAweDAwLCAweDgwLCAweGRkLCAweGVmLCAweGZkLCAweGMzLCAweGU1LCAweDNhLCAKKzB4OWQsIDB4ZjUsIDB4M2EsIDB4ZTUsIDB4MzksIDB4OTQsIDB4MDAsIDB4ZjUsIDB4MzksIDB4ZDMsIDB4ZTUsIDB4M2EsIDB4OTQsIDB4MDAsIDB4ZTUsIDB4MzksIAorMHg5NCwgMHgwMCwgMHg0MCwgMHgwNiwgMHhlNCwgMHg5MCwgMHhmZiwgMHg4MywgMHhmMCwgMHgyMiwgMHgxMiwgMHgxZCwgMHgyZiwgMHgxMiwgMHgxZCwgMHg4NCwgCisweDEyLCAweDFkLCAweDc2LCAweDEyLCAweDE5LCAweGYyLCAweDI0LCAweDZlLCAweDYwLCAweDFlLCAweDE0LCAweDYwLCAweDFiLCAweDI0LCAweDhlLCAweDcwLCAKKzB4MmQsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4MWEsIDB4MGIsIDB4ZmYsIDB4MjQsIDB4ZmMsIDB4NjAsIDB4MDMsIDB4MDQsIDB4NzAsIDB4MWYsIDB4ZWYsIAorMHhmZCwgMHg3YywgMHgwMCwgMHg3ZiwgMHgwZCwgMHgwMiwgMHgxMSwgMHgxNiwgMHgxMiwgMHgxZCwgMHg4YiwgMHgxMiwgMHgyNSwgMHgzOSwgMHgxMiwgMHgxYywgCisweGQ5LCAweDEyLCAweDFhLCAweDBiLCAweDYwLCAweDAzLCAweDAyLCAweDMxLCAweGJkLCAweGU0LCAweGZmLCAweDEyLCAweDMxLCAweGIxLCAweDIyLCAweDhiLCAKKzB4NDUsIDB4OGEsIDB4NDYsIDB4ODksIDB4NDcsIDB4OGMsIDB4NDgsIDB4OGQsIDB4NDksIDB4ZDIsIDB4MDAsIDB4MTIsIDB4MmQsIDB4ODIsIDB4NzAsIDB4MTYsIAorMHgxMiwgMHgyZCwgMHhhMSwgMHhlNSwgMHg0OCwgMHg5MCwgMHhmZiwgMHhmMSwgMHhmMCwgMHgxMiwgMHgzMSwgMHgxYiwgMHg1MCwgMHhmMiwgMHgxMiwgMHgyOSwgCisweDE0LCAweDQwLCAweDBiLCAweDdmLCAweDE4LCAweDIyLCAweDEyLCAweDJkLCAweGExLCAweDEyLCAweDI5LCAweDE0LCAweDUwLCAweGY4LCAweGU0LCAweGY1LCAKKzB4NGIsIDB4ZTUsIDB4NGEsIDB4MTQsIDB4ZmYsIDB4ZTUsIDB4NGIsIDB4YzMsIDB4OWYsIDB4NTAsIDB4MTcsIDB4MTIsIDB4MjksIDB4MDQsIDB4NDAsIDB4MDMsIAorMHg3ZiwgMHgxOCwgMHgyMiwgMHgwNSwgMHg0YiwgMHg3NCwgMHgwMSwgMHgyNSwgMHg0NywgMHhmNSwgMHg0NywgMHhlNCwgMHgzNSwgMHg0NiwgMHhmNSwgMHg0NiwgCisweDgwLCAweGRmLCAweDkwLCAweGZmLCAweGYwLCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDEyLCAweDI5LCAweDA0LCAweDQwLCAweDAzLCAweDdmLCAweDE4LCAKKzB4MjIsIDB4N2YsIDB4MDAsIDB4MjIsIDB4YWIsIDB4NDUsIDB4YWEsIDB4NDYsIDB4YTksIDB4NDcsIDB4MTIsIDB4MTksIDB4ZjIsIDB4OTAsIDB4ZmYsIDB4ZjEsIAorMHhmMCwgMHgwMiwgMHgzMSwgMHgxYiwgMHg5MCwgMHhmZiwgMHhmMSwgMHhlNSwgMHg0OSwgMHhmMCwgMHgwMiwgMHgzMSwgMHgxYiwgMHg3YiwgMHgwMSwgMHg3YSwgCisweGZhLCAweDc5LCAweGNjLCAweGU0LCAweGZkLCAweDEyLCAweDIyLCAweGEwLCAweDkwLCAweGZhLCAweGNjLCAweGU0LCAweDc1LCAweGYwLCAweDA5LCAweDEyLCAKKzB4MWEsIDB4NmMsIDB4N2IsIDB4MDAsIDB4N2EsIDB4MDAsIDB4NzksIDB4MjMsIDB4OTAsIDB4ZmEsIDB4Y2MsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDEsIDB4MTIsIAorMHgxYSwgMHg4MiwgMHg4NSwgMHhmMCwgMHgyZSwgMHhmNSwgMHgyZCwgMHg3ZCwgMHgwMSwgMHgxMiwgMHgyNSwgMHhkNywgMHg5MCwgMHhmZiwgMHhmNywgMHhlNSwgCisweDIzLCAweDEyLCAweDI5LCAweDc4LCAweDkwLCAweGZmLCAweGY2LCAweGU1LCAweDIzLCAweGYwLCAweDkwLCAweGZhLCAweGNjLCAweGU0LCAweGYwLCAweGEzLCAKKzB4NzQsIDB4MDYsIDB4MTIsIDB4MjksIDB4NzgsIDB4ZTUsIDB4MjMsIDB4MzAsIDB4ZTAsIDB4MDcsIDB4OTAsIDB4ZmYsIDB4ZmMsIDB4NzQsIDB4OTQsIDB4ZjAsIAorMHgyMiwgMHg5MCwgMHhmZiwgMHhmYywgMHg3NCwgMHg5MCwgMHhmMCwgMHgyMiwgMHhmMCwgMHg3YiwgMHgwMCwgMHg3YSwgMHgwMCwgMHg3OSwgMHgyMywgMHg5MCwgCisweGZhLCAweGNjLCAweGU0LCAweDc1LCAweGYwLCAweDAxLCAweDEyLCAweDFhLCAweDgyLCAweDg1LCAweGYwLCAweDJlLCAweGY1LCAweDJkLCAweDdkLCAweDAxLCAKKzB4MDIsIDB4MjUsIDB4ZDcsIDB4OTAsIDB4ZmYsIDB4OTMsIDB4NzQsIDB4MmEsIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4ZmYsIDB4ZTAsIDB4NjAsIDB4MDYsIDB4OTAsIAorMHhmZiwgMHhmYywgMHg3NCwgMHgxMCwgMHhmMCwgMHg5MCwgMHhmZiwgMHg5MSwgMHhlMCwgMHg0NCwgMHg5MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHhmOSwgMHgxNSwgCisweGYwLCAweGEzLCAweGYwLCAweDEyLCAweDJhLCAweDc4LCAweDEyLCAweDE2LCAweDQyLCAweDEyLCAweDJmLCAweGNkLCAweDdlLCAweDA3LCAweDdmLCAweGQwLCAKKzB4MTIsIDB4MTEsIDB4ZTIsIDB4N2UsIDB4MGYsIDB4N2YsIDB4YTAsIDB4MTIsIDB4MTEsIDB4ZmMsIDB4ZTQsIDB4NzgsIDB4NzcsIDB4ZjYsIDB4NzgsIDB4NzcsIAorMHhlNiwgMHhmZiwgMHhjMywgMHg5NCwgMHgwNiwgMHg1MCwgMHgwYiwgMHg3NCwgMHg2ZSwgMHgyZiwgMHhmOCwgMHhlNCwgMHhmNiwgMHg3OCwgMHg3NywgMHgwNiwgCisweDgwLCAweGVjLCAweDdmLCAweDAzLCAweDEyLCAweDJlLCAweGIzLCAweDkwLCAweGY5LCAweDE1LCAweGUwLCAweDIwLCAweGU0LCAweDA1LCAweDdmLCAweDA0LCAKKzB4MTIsIDB4MmUsIDB4YjMsIDB4OTAsIDB4ZmYsIDB4OWIsIDB4ZTQsIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4OWEsIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4ZTgsIDB4ZTAsIAorMHg1NCwgMHgxZiwgMHhmMCwgMHhkMiwgMHhhOCwgMHgyMiwgMHgxNSwgMHg2NSwgMHhhOCwgMHg2NSwgMHhhNiwgMHgwNywgMHgzMCwgMHgwOCwgMHgwNSwgMHgxMiwgCisweDExLCAweDY2LCAweDgwLCAweGY4LCAweGQyLCAweDA4LCAweGE4LCAweDY1LCAweGU2LCAweGZmLCAweGI0LCAweDAzLCAweDBmLCAweDc4LCAweDdjLCAweDc2LCAKKzB4ZmYsIDB4MDgsIDB4NzYsIDB4ZTAsIDB4MDgsIDB4NzYsIDB4ZmYsIDB4MDgsIDB4NzYsIDB4YTAsIDB4ODAsIDB4MGQsIDB4NzgsIDB4N2MsIDB4NzYsIDB4ZmYsIAorMHgwOCwgMHg3NiwgMHhlMiwgMHgwOCwgMHg3NiwgMHhmZiwgMHgwOCwgMHg3NiwgMHhiMCwgMHg3OCwgMHg4MCwgMHg3NiwgMHhmYSwgMHgwOCwgMHg3NiwgMHg5YiwgCisweGVmLCAweDI0LCAweGZkLCAweDc1LCAweGYwLCAweDBhLCAweGE0LCAweGFlLCAweGYwLCAweDEyLCAweDIyLCAweDkyLCAweDdiLCAweDAxLCAweDdhLCAweGZmLCAKKzB4NzksIDB4NDgsIDB4NzgsIDB4NjgsIDB4MTIsIDB4MWIsIDB4MzEsIDB4YTgsIDB4NjUsIDB4ZTYsIDB4MjQsIDB4ZmQsIDB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIAorMHhmZiwgMHhhZSwgMHhmMCwgMHg3OCwgMHg2YSwgMHgxMiwgMHgyMiwgMHg5MiwgMHg3OSwgMHgwOCwgMHg3OCwgMHg2YiwgMHgxMiwgMHgxYiwgMHgzMSwgMHg3OCwgCisweDZkLCAweGVmLCAweDEyLCAweDIyLCAweDkyLCAweDA1LCAweDY1LCAweDIyLCAweDkwLCAweGZmLCAweGYwLCAweGUwLCAweDU0LCAweGFiLCAweGYwLCAweGUwLCAKKzB4NDQsIDB4MjAsIDB4ZjAsIDB4OTAsIDB4ZmEsIDB4ZTMsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4N2IsIDB4MDEsIDB4N2EsIDB4ZmEsIDB4NzksIDB4Y2MsIDB4ZTQsIAorMHhmNSwgMHgyZCwgMHhmNSwgMHgyZSwgMHg3ZCwgMHgwMSwgMHgxMiwgMHgyNSwgMHhkNywgMHg3ZSwgMHgwMCwgMHg5MCwgMHhmYSwgMHhlMSwgMHhlZSwgMHhmMCwgCisweGEzLCAweGVmLCAweGYwLCAweDY0LCAweDAxLCAweDcwLCAweDEwLCAweDkwLCAweGZhLCAweGNjLCAweGUwLCAweGI0LCAweDUyLCAweDA5LCAweDkwLCAweGY5LCAKKzB4MTUsIDB4ZTAsIDB4NTQsIDB4ZWYsIDB4ZjAsIDB4ODAsIDB4MjksIDB4OTAsIDB4ZmEsIDB4ZTEsIDB4ZTAsIDB4NzAsIDB4MDQsIDB4YTMsIDB4ZTAsIDB4NjQsIAorMHgwMSwgMHg3MCwgMHgxMCwgMHg5MCwgMHhmYSwgMHhjYywgMHhlMCwgMHhiNCwgMHgxMCwgMHgwOSwgMHg5MCwgMHhmOSwgMHgxNSwgMHhlMCwgMHg0NCwgMHgxMCwgCisweGYwLCAweDgwLCAweDBkLCAweDkwLCAweGZhLCAweGUzLCAweDc0LCAweDAzLCAweGYwLCAweDkwLCAweGY5LCAweDE1LCAweGUwLCAweDU0LCAweGVmLCAweGYwLCAKKzB4OTAsIDB4ZmYsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4MjIsIDB4MTIsIDB4MTAsIDB4MDMsIDB4NzgsIDB4OGEsIDB4ZWYsIDB4ZjYsIDB4MTIsIAorMHgyYSwgMHgwNiwgMHgxMiwgMHgyMiwgMHgzMywgMHgzMCwgMHhlMCwgMHgyNSwgMHgxMiwgMHgyMiwgMHgwNywgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmMCwgMHg3OCwgCisweDZiLCAweDEyLCAweDFiLCAweDI4LCAweDkwLCAweDAwLCAweDAyLCAweDEyLCAweDFhLCAweDBiLCAweDMwLCAweGU3LCAweDA5LCAweDkwLCAweDAwLCAweDAyLCAKKzB4ZTQsIDB4MTIsIDB4MWEsIDB4NGEsIDB4ODAsIDB4ZTksIDB4MTIsIDB4MjIsIDB4MDcsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4MTIsIDB4MjIsIDB4MzMsIAorMHgzMCwgMHhlMSwgMHgxZSwgMHgxMiwgMHgyMSwgMHhlOSwgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmMCwgMHgxMiwgMHgzMSwgMHg1YywgMHg3OCwgMHg2OCwgMHgxMiwgCisweDFiLCAweDI4LCAweDkwLCAweDAwLCAweDAyLCAweDc0LCAweDgwLCAweDEyLCAweDFhLCAweDRhLCAweDEyLCAweDIxLCAweGU5LCAweGUwLCAweDQ0LCAweDgwLCAKKzB4ZjAsIDB4MTIsIDB4MzEsIDB4YzcsIDB4ZTQsIDB4ZmYsIDB4MTIsIDB4MzAsIDB4ZWMsIDB4MDIsIDB4MTAsIDB4ODYsIDB4MDMsIDB4NjgsIDB4MDEsIDB4ZmYsIAorMHg0OCwgMHgwMywgMHg2YiwgMHgwMSwgMHhmZiwgMHgwOCwgMHgwMiwgMHg2NiwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmYSwgMHg5NSwgMHgwMCwgMHgwMCwgMHgwMCwgCisweDAwLCAweDQ0LCAweGZhLCAweDkxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGZhLCAweGFmLCAweDAwLCAweDAwLCAweDQyLCAweGZhLCAweDdiLCAKKzB4MDAsIDB4MDAsIDB4NDIsIDB4ZmEsIDB4NzksIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjksIDB4NmEsIDB4ZmYsIDB4ZmYsIDB4NDIsIDB4ZmEsIDB4NzcsIDB4MDAsIAorMHgwMCwgMHg0MywgMHhmOSwgMHgxOCwgMHgwYSwgMHgzMiwgMHgwMiwgMHg0MSwgMHhmOSwgMHg2NSwgMHgyMCwgMHg0MSwgMHhmOSwgMHg2NiwgMHgyMCwgMHg0MSwgCisweGY5LCAweDYzLCAweDAwLCAweDQxLCAweGY5LCAweDY0LCAweDAwLCAweDQ0LCAweGY4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGY5LCAKKzB4MTUsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjksIDB4MTcsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MDAsIDB4NDEsIDB4ZjgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTIsIAorMHgxMCwgMHgwMywgMHg3OCwgMHg4NSwgMHhlZiwgMHhmNiwgMHgxMiwgMHgzMCwgMHg5MywgMHgxMiwgMHgzMCwgMHhlYywgMHg3OCwgMHg4NSwgMHhlNiwgMHhmZiwgCisweDI0LCAweDEyLCAweDEyLCAweDIxLCAweGZmLCAweGUwLCAweGZlLCAweDMwLCAweGU3LCAweDE2LCAweGVmLCAweGI0LCAweDAzLCAweDA5LCAweDkwLCAweGZmLCAKKzB4OWUsIDB4ZTAsIDB4NTQsIDB4ZmEsIDB4ZjAsIDB4ODAsIDB4MjIsIDB4OTAsIDB4ZmYsIDB4OWUsIDB4ZTAsIDB4NTQsIDB4ZjUsIDB4ZjAsIDB4ODAsIDB4MTksIAorMHhlZSwgMHg1NCwgMHgwMywgMHg2MCwgMHgxNCwgMHhlZiwgMHhiNCwgMHgwMywgMHgwOSwgMHg5MCwgMHhmZiwgMHhhNCwgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgCisweDgwLCAweDA3LCAweDkwLCAweGZmLCAweGI0LCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAweDkwLCAweGY5LCAweDE3LCAweGUwLCAweDE0LCAweGYwLCAweGUwLCAKKzB4NzAsIDB4MDIsIDB4ZDIsIDB4YjMsIDB4MDIsIDB4MTAsIDB4ODYsIDB4MTIsIDB4MWQsIDB4NmMsIDB4ZTUsIDB4M2EsIDB4NjQsIDB4MDksIDB4NzAsIDB4MDQsIAorMHhlNSwgMHgzOSwgMHg2NCwgMHgwMSwgMHg2MCwgMHg0OCwgMHhjMywgMHhlNSwgMHgzYSwgMHg5NCwgMHgwOCwgMHhlNSwgMHgzOSwgMHg5NCwgMHgwMCwgMHg0MCwgCisweDExLCAweDdmLCAweDA4LCAweGVmLCAweGU1LCAweDNhLCAweDk0LCAweDA4LCAweGY1LCAweDNhLCAweGU1LCAweDM5LCAweDk0LCAweDAwLCAweGY1LCAweDM5LCAKKzB4ODAsIDB4MDUsIDB4YWYsIDB4M2EsIDB4MTIsIDB4MWQsIDB4ODQsIDB4ZTQsIDB4ZmUsIDB4ZWUsIDB4YzMsIDB4OWYsIDB4NTAsIDB4MTksIDB4MTIsIDB4MWMsIAorMHgxMSwgMHgxMiwgMHgxOSwgMHhmMiwgMHhmZCwgMHg3NCwgMHhmOCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHhmZSwgMHhmNSwgMHg4MywgMHhlZCwgCisweGYwLCAweDBlLCAweDEyLCAweDFjLCAweDAwLCAweDgwLCAweGUyLCAweGVmLCAweDU0LCAweDdmLCAweDkwLCAweGZmLCAweDgxLCAweGYwLCAweDIyLCAweDhiLCAKKzB4NTksIDB4OGEsIDB4NWEsIDB4ODksIDB4NWIsIDB4MTIsIDB4MmQsIDB4NDgsIDB4NzAsIDB4MDUsIDB4YTMsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4MjIsIDB4YWIsIAorMHg1OSwgMHhhYSwgMHg1YSwgMHhhOSwgMHg1YiwgMHgxMiwgMHgyZCwgMHgzYywgMHg5MCwgMHhmYSwgMHhjNiwgMHgxMiwgMHgxYiwgMHg0MywgMHhlNSwgMHg1YiwgCisweDI0LCAweDAzLCAweGY5LCAweGU0LCAweDM1LCAweDVhLCAweGZhLCAweDkwLCAweGZhLCAweGMwLCAweDEyLCAweDFiLCAweDQzLCAweGU0LCAweDkwLCAweGZhLCAKKzB4YmYsIDB4ZjAsIDB4NzgsIDB4OGIsIDB4ZjYsIDB4OTAsIDB4ZmEsIDB4YmUsIDB4ZTAsIDB4ZmYsIDB4NzgsIDB4OGIsIDB4ZTYsIDB4YzMsIDB4OWYsIDB4NTAsIAorMHgxMiwgMHgxMiwgMHgyZCwgMHgxYSwgMHhmZiwgMHgxMiwgMHgyZCwgMHgyMywgMHgxMiwgMHgyZCwgMHgzNiwgMHg3OCwgMHg4YiwgMHgwNiwgMHgxMiwgMHgyZCwgCisweDMyLCAweDgwLCAweGUyLCAweDIyLCAweGFkLCAweDA3LCAweGFjLCAweDA2LCAweDkwLCAweDMxLCAweDRkLCAweGU0LCAweDkzLCAweGZmLCAweDc4LCAweDc0LCAKKzB4ZjYsIDB4NTQsIDB4MGYsIDB4MTIsIDB4MWMsIDB4ZjgsIDB4ZTAsIDB4MDgsIDB4NzYsIDB4MDAsIDB4MDgsIDB4ZjYsIDB4MTgsIDB4MTIsIDB4MWMsIDB4MjksIAorMHhjMywgMHgzMywgMHhjZSwgMHgzMywgMHhjZSwgMHhkOCwgMHhmOSwgMHhmZiwgMHg3OCwgMHg3NSwgMHhlZSwgMHhmNiwgMHgwOCwgMHhlZiwgMHhmNiwgMHhlZSwgCisweDQ0LCAweGY4LCAweDE4LCAweGY2LCAweGVmLCAweDA4LCAweGY2LCAweDkwLCAweGZmLCAweDdhLCAweGUwLCAweDIwLCAweGU3LCAweDAzLCAweDdmLCAweDAwLCAKKzB4MjIsIDB4NzgsIDB4NzUsIDB4ZTYsIDB4ZmUsIDB4MDgsIDB4ZTYsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZWMsIDB4ZjAsIDB4YTMsIDB4ZWQsIDB4ZjAsIAorMHg5MCwgMHhmZiwgMHg3YSwgMHg3NCwgMHgwMiwgMHhmMCwgMHg3ZiwgMHgwMSwgMHgyMiwgMHhhYiwgMHg1NiwgMHhhYSwgMHg1NywgMHhhOSwgMHg1OCwgMHg5MCwgCisweDAwLCAweDAzLCAweDEyLCAweDFhLCAweDBiLCAweDU0LCAweGYwLCAweDI0LCAweGEwLCAweDIyLCAweDkwLCAweGZhLCAweGM2LCAweDEyLCAweDFiLCAweDNhLCAKKzB4MDIsIDB4MTksIDB4ZjIsIDB4OTAsIDB4ZmEsIDB4YzAsIDB4MTIsIDB4MWIsIDB4M2EsIDB4ZWYsIDB4MTIsIDB4MWEsIDB4MzgsIDB4OTAsIDB4ZmEsIDB4YzcsIAorMHhlNCwgMHgyMiwgMHg5MCwgMHhmYSwgMHhjMSwgMHhlNCwgMHg3NSwgMHhmMCwgMHgwMSwgMHgwMiwgMHgxYSwgMHg2YywgMHg5MCwgMHgwMCwgMHgwOCwgMHgxMiwgCisweDFhLCAweDk4LCAweGFhLCAweGYwLCAweGY5LCAweDdiLCAweDAxLCAweDIyLCAweDkwLCAweDAwLCAweDA1LCAweDEyLCAweDFhLCAweDBiLCAweDkwLCAweGZhLCAKKzB4YmUsIDB4ZjAsIDB4MjIsIDB4YWIsIDB4NTYsIDB4YWEsIDB4NTcsIDB4YTksIDB4NTgsIDB4MjIsIDB4OTAsIDB4ZmEsIDB4ZGEsIDB4ZTAsIDB4ZmYsIDB4N2UsIAorMHgwMCwgMHhjMywgMHg5MCwgMHhmYSwgMHhkNCwgMHhlMCwgMHg5ZiwgMHhmMCwgMHg5MCwgMHhmYSwgMHhkMywgMHhlMCwgMHg5ZSwgMHhmMCwgMHg5MCwgMHhmYSwgCisweGQ1LCAweGVlLCAweDhmLCAweGYwLCAweDEyLCAweDFhLCAweDZjLCAweGVmLCAweDI1LCAweDUxLCAweGY1LCAweDUxLCAweGVlLCAweDM1LCAweDUwLCAweGY1LCAKKzB4NTAsIDB4MjIsIDB4OTAsIDB4ZmYsIDB4ZjAsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4OTAsIDB4ZmEsIDB4ZTMsIAorMHhlMCwgMHg2NCwgMHgwMywgMHgyMiwgMHg5MCwgMHhmZiwgMHhmMiwgMHhlMCwgMHhhYiwgMHgyOSwgMHhhYSwgMHgyYSwgMHhhOSwgMHgyYiwgMHgwMiwgMHgxYSwgCisweDM4LCAweDkwLCAweGZmLCAweGYzLCAweDc0LCAweGEwLCAweGYwLCAweDIyLCAweDhmLCAweDY0LCAweGVkLCAweDcwLCAweDBmLCAweGU1LCAweDY0LCAweGI0LCAKKzB4MDMsIDB4MDUsIDB4N2YsIDB4MDEsIDB4MDIsIDB4MzEsIDB4MzIsIDB4N2YsIDB4MDIsIDB4MDIsIDB4MzEsIDB4MzIsIDB4YWYsIDB4NjQsIDB4MTIsIDB4MmEsIAorMHgwNiwgMHg3NCwgMHg2ZSwgMHgyNSwgMHg2NCwgMHhmOCwgMHhlNiwgMHgzMCwgMHhlMiwgMHgwYiwgMHhkMiwgMHgwOSwgMHgxMiwgMHgxYywgMHg4MywgMHhlMCwgCisweDU0LCAweDdmLCAweGYwLCAweDgwLCAweDAyLCAweGMyLCAweDA5LCAweGU1LCAweDY0LCAweGI0LCAweDAzLCAweDA3LCAweDdmLCAweDgxLCAweDEyLCAweDMxLCAKKzB4MzIsIDB4ODAsIDB4MDUsIDB4N2YsIDB4ODIsIDB4MTIsIDB4MzEsIDB4MzIsIDB4MzAsIDB4MDksIDB4MDcsIDB4MTIsIDB4MWMsIDB4ODMsIDB4ZTAsIDB4NDQsIAorMHg4MCwgMHhmMCwgMHgxMiwgMHgzMSwgMHhjNywgMHgyMiwgMHgxMiwgMHgxMCwgMHgwMywgMHg5MCwgMHhmZiwgMHhmZCwgMHhlMCwgMHg0NCwgMHg2MCwgMHhmMCwgCisweGQyLCAweDAxLCAweDkwLCAweGZmLCAweGZjLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDkwLCAweGZmLCAweDAwLCAweGUwLCAweDMwLCAweGU3LCAweDEzLCAKKzB4OTAsIDB4ZmYsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4NDMsIDB4MzUsIDB4ODAsIDB4OTAsIDB4ZmYsIDB4ZmMsIDB4ZTAsIDB4NDQsIDB4MDEsIAorMHhmMCwgMHg4MCwgMHgwZCwgMHgxMiwgMHgxZCwgMHgyZiwgMHg1MywgMHgzNSwgMHg3ZiwgMHg5MCwgMHhmZiwgMHhmYywgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgCisweDkwLCAweGZmLCAweDgxLCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweDEyLCAweDAyLCAweGIwLCAweDEyLCAweDFkLCAweDM3LCAweDAyLCAweDEwLCAweDg2LCAKKzB4MTIsIDB4MTAsIDB4MDMsIDB4NzgsIDB4ODksIDB4ZWYsIDB4ZjYsIDB4ZDIsIDB4MDAsIDB4MTIsIDB4MmEsIDB4MDYsIDB4OTAsIDB4ZjksIDB4NjcsIDB4MTIsIAorMHgxYiwgMHgzYSwgMHhlOSwgMHgyNCwgMHgwMywgMHhmOSwgMHhlNCwgMHgzYSwgMHhmYSwgMHhjMCwgMHgwMiwgMHg3OCwgMHg4MCwgMHhlNiwgMHhmZSwgMHgwOCwgCisweGU2LCAweGFhLCAweDA2LCAweGY4LCAweGFjLCAweDAyLCAweDdkLCAweDAxLCAweGQwLCAweDAyLCAweDEyLCAweDIyLCAweDI1LCAweDEyLCAweDMxLCAweGM3LCAKKzB4NzgsIDB4ODksIDB4ZTYsIDB4ZmYsIDB4MTIsIDB4MTMsIDB4M2YsIDB4MTIsIDB4MzAsIDB4ZWMsIDB4MDIsIDB4MTAsIDB4ODYsIDB4OGYsIDB4NjMsIDB4MTIsIAorMHgyYSwgMHgwNiwgMHgxMiwgMHgyMiwgMHgwNywgMHhlMCwgMHg1NCwgMHgzZiwgMHhmMCwgMHhlNSwgMHg4MiwgMHgyNCwgMHgwNCwgMHgxMiwgMHgyMSwgMHhmMywgCisweGUwLCAweDU0LCAweDNmLCAweGYwLCAweDA4LCAweGU2LCAweGZlLCAweDA4LCAweGU2LCAweDhlLCAweDgzLCAweDI0LCAweDBiLCAweDEyLCAweDIxLCAweGYzLCAKKzB4ZTAsIDB4NTQsIDB4ZjgsIDB4ZjAsIDB4MTIsIDB4MzEsIDB4YzcsIDB4NzQsIDB4NmUsIDB4MjUsIDB4NjMsIDB4ZjgsIDB4NzQsIDB4ZmIsIDB4NTYsIDB4ZjYsIAorMHg3ZiwgMHgwMCwgMHgyMiwgMHg4ZiwgMHgyMywgMHhjMiwgMHgwOCwgMHgxMiwgMHgyYSwgMHgwNiwgMHgxMiwgMHgyMiwgMHgxMiwgMHg3OCwgMHg3ZSwgMHgxMiwgCisweDIxLCAweGViLCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDEyLCAweDIyLCAweDRhLCAweDEyLCAweDIxLCAweGVmLCAweGUwLCAweDIwLCAweGUwLCAweGY2LCAKKzB4ZWYsIDB4MjQsIDB4MGIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4M2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZjgsIDB4ZjAsIDB4MTIsIDB4MzEsIDB4YzcsIAorMHhhZiwgMHgyMywgMHgxMiwgMHgxMywgMHgzZiwgMHgyMiwgMHgxMiwgMHgxMCwgMHgwMywgMHgxMiwgMHgyYSwgMHgwNiwgMHgxMiwgMHgyMiwgMHg0YSwgMHgyNCwgCisweDA2LCAweDEyLCAweDIxLCAweGYxLCAweGUwLCAweGZkLCAweDEyLCAweDIyLCAweDJkLCAweDkwLCAweDAwLCAweDAzLCAweDEyLCAweDIyLCAweDUyLCAweDI0LCAKKzB4MDUsIDB4MTIsIDB4MjEsIDB4ZjMsIDB4ZTAsIDB4OTAsIDB4MDAsIDB4MDQsIDB4MTIsIDB4MWEsIDB4NGEsIDB4MTIsIDB4MzEsIDB4YzcsIDB4N2QsIDB4MDIsIAorMHhlNCwgMHhmZiwgMHgxMiwgMHgyZiwgMHgxOCwgMHgwMiwgMHgxMCwgMHg4NiwgMHhhZSwgMHgwNSwgMHgxMiwgMHgxYywgMHhkZSwgMHhlZiwgMHgxMiwgMHgxYSwgCisweDRhLCAweDBlLCAweDBlLCAweDBlLCAweGVlLCAweGQzLCAweDk1LCAweDNjLCAweGU0LCAweDk1LCAweDNiLCAweDQwLCAweDAyLCAweGFlLCAweDNjLCAweGVlLCAKKzB4ZDMsIDB4OTQsIDB4MDgsIDB4NzQsIDB4ODAsIDB4OTQsIDB4ODEsIDB4NDAsIDB4MGEsIDB4N2UsIDB4MDMsIDB4OTAsIDB4MDAsIDB4MDIsIDB4NzQsIDB4MDIsIAorMHgxMiwgMHgxYSwgMHg0YSwgMHhhZiwgMHgwNiwgMHgxMiwgMHgzMSwgMHhiMSwgMHgyMiwgMHhhZSwgMHgwNywgMHhlZCwgMHg1NCwgMHgwMywgMHg2NCwgMHgwMSwgCisweDYwLCAweDAzLCAweDdmLCAweDEwLCAweDIyLCAweGVkLCAweDU0LCAweDdjLCAweGMzLCAweDk0LCAweDA0LCAweDUwLCAweDAzLCAweDdmLCAweDBiLCAweDIyLCAKKzB4NzQsIDB4NmUsIDB4MmUsIDB4ZjgsIDB4NzQsIDB4MDIsIDB4NDYsIDB4ZjYsIDB4NzQsIDB4OTYsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4ZmEsIAorMHhmNSwgMHg4MywgMHhlZCwgMHhmMCwgMHg3ZiwgMHgwMCwgMHgyMiwgMHhiZiwgMHgwMywgMHgwNiwgMHg3YywgMHhmZiwgMHg3ZCwgMHhlMCwgMHg4MCwgMHgwNCwgCisweDdjLCAweGZmLCAweDdkLCAweGUyLCAweDhkLCAweDgyLCAweDhjLCAweDgzLCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweGU1LCAweDgyLCAweDI0LCAweDA0LCAKKzB4MTIsIDB4MjEsIDB4ZjMsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4NzQsIDB4NmUsIDB4MmYsIDB4ZjgsIDB4NzQsIDB4MDQsIDB4NDYsIDB4ZjYsIDB4N2YsIAorMHgwMCwgMHgyMiwgMHgxMiwgMHgxMCwgMHgwMywgMHhlNSwgMHgzYSwgMHg2NCwgMHgwOSwgMHg3MCwgMHgwNCwgMHhlNSwgMHgzOSwgMHg2NCwgMHgwMSwgMHg2MCwgCisweDE2LCAweDkwLCAweGZmLCAweDgzLCAweGUwLCAweDU0LCAweDBmLCAweGZmLCAweGMzLCAweGU1LCAweDNhLCAweDlmLCAweGU1LCAweDM5LCAweDk0LCAweDAwLCAKKzB4NDAsIDB4MDUsIDB4MTIsIDB4MjgsIDB4MTYsIDB4ODAsIDB4MDMsIDB4MTIsIDB4MzEsIDB4YmQsIDB4MDIsIDB4MTAsIDB4ODYsIDB4OTAsIDB4ZmYsIDB4ZmMsIAorMHhlMCwgMHgyMCwgMHhlNywgMHgxZiwgMHhjMiwgMHhhZiwgMHg3ZCwgMHhmZiwgMHhhYywgMHgwNSwgMHgxZCwgMHhlYywgMHg2MCwgMHgxNSwgMHg3ZSwgMHgwNCwgCisweDdmLCAweDAwLCAweGVmLCAweDFmLCAweGFhLCAweDA2LCAweDcwLCAweDAxLCAweDFlLCAweDRhLCAweDYwLCAweGVjLCAweDkwLCAweGZmLCAweDkyLCAweGU0LCAKKzB4ZjAsIDB4ODAsIDB4ZWYsIDB4MjIsIDB4MTIsIDB4MTAsIDB4MDMsIDB4NzgsIDB4NjYsIDB4ZTYsIDB4ZmUsIDB4MDgsIDB4ZTYsIDB4ZmYsIDB4MzAsIDB4ZTAsIAorMHgxMiwgMHgzMCwgMHhlMSwgMHgwZiwgMHg5MCwgMHhmZiwgMHhmYywgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHg3ZiwgMHgwNCwgMHgxMiwgMHgxMiwgMHgxOSwgCisweDEyLCAweDFkLCAweDQ2LCAweDAyLCAweDEwLCAweDg2LCAweDhlLCAweDVmLCAweDhmLCAweDYwLCAweGU1LCAweDYwLCAweDE1LCAweDYwLCAweGFlLCAweDVmLCAKKzB4NzAsIDB4MDIsIDB4MTUsIDB4NWYsIDB4ZDMsIDB4OTQsIDB4MDAsIDB4ZWUsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDksIDB4N2UsIDB4MDcsIDB4N2YsIDB4ZDAsIAorMHgxMiwgMHgwZiwgMHhkYywgMHg4MCwgMHhlNSwgMHgyMiwgMHgxMSwgMHg5NCwgMHgyZCwgMHhmNiwgMHgyMywgMHhlZiwgMHgzMSwgMHhhMywgMHgyZiwgMHhmNCwgCisweDJmLCAweGEyLCAweDMwLCAweGIyLCAweDJlLCAweGU2LCAweDI2LCAweDZkLCAweDJiLCAweGFmLCAweDMwLCAweDU1LCAweDMwLCAweDc0LCAweDFkLCAweGI0LCAKKzB4MmUsIDB4NDAsIDB4MmEsIDB4ZTgsIDB4MGUsIDB4MTIsIDB4MTAsIDB4MDMsIDB4NzgsIDB4ODYsIDB4MTIsIDB4MjIsIDB4ODIsIDB4MjAsIDB4ZTEsIDB4MDcsIAorMHg3ZiwgMHgxMiwgMHgxMiwgMHgzMCwgMHhlYywgMHg4MCwgMHgwYSwgMHg3OCwgMHg4NiwgMHhlNiwgMHhmZiwgMHgxMiwgMHgyMywgMHg0OSwgMHgxMiwgMHgzMCwgCisweGVjLCAweDAyLCAweDEwLCAweDg2LCAweDEyLCAweDEwLCAweDAzLCAweDc4LCAweDg3LCAweDEyLCAweDIyLCAweDgyLCAweDIwLCAweGUyLCAweDA3LCAweDdmLCAKKzB4MTEsIDB4MTIsIDB4MzAsIDB4ZWMsIDB4ODAsIDB4MGEsIDB4NzgsIDB4ODcsIDB4ZTYsIDB4ZmYsIDB4MTIsIDB4MmUsIDB4N2QsIDB4MTIsIDB4MzAsIDB4ZWMsIAorMHgwMiwgMHgxMCwgMHg4NiwgMHg4ZiwgMHg2MSwgMHgxMiwgMHgyZSwgMHg3ZCwgMHhhZiwgMHg2MSwgMHgxMiwgMHgyYSwgMHgwNiwgMHgxMiwgMHgyMiwgMHgxMiwgCisweDEyLCAweDMxLCAweGM3LCAweDc0LCAweDZlLCAweDI1LCAweDYxLCAweGY4LCAweDc0LCAweGZkLCAweDU2LCAweGY2LCAweGFmLCAweDYxLCAweDEyLCAweDEzLCAKKzB4M2YsIDB4MjIsIDB4MTIsIDB4MTAsIDB4MDMsIDB4ZTUsIDB4M2EsIDB4NjQsIDB4MDksIDB4NzAsIDB4MDQsIDB4ZTUsIDB4MzksIDB4NjQsIDB4MDEsIDB4NjAsIAorMHgwNSwgMHgxMiwgMHgyYywgMHgwNywgMHg4MCwgMHgwNiwgMHgxMiwgMHgxZCwgMHg2NCwgMHgxMiwgMHgxZCwgMHg2YywgMHgwMiwgMHgxMCwgMHg4NiwgMHgxMiwgCisweDI5LCAweDkzLCAweDEyLCAweDEyLCAweGJiLCAweDkwLCAweGY4LCAweDA0LCAweGUwLCAweGZmLCAweDYwLCAweDA1LCAweDdkLCAweDAxLCAweDEyLCAweDEyLCAKKzB4NTgsIDB4MTIsIDB4MjksIDB4MWQsIDB4MTIsIDB4MTIsIDB4ZjcsIDB4MTIsIDB4MTEsIDB4NzQsIDB4ODAsIDB4ZTMsIDB4MTIsIDB4MWMsIDB4ZGUsIDB4ZWYsIAorMHgxMiwgMHgxYSwgMHg0YSwgMHhlNCwgMHhmNSwgMHgzMywgMHhmNSwgMHgzNCwgMHhlZiwgMHg2MCwgMHgwMywgMHgwMiwgMHgzMSwgMHhiZCwgMHhlNCwgMHhmZiwgCisweDEyLCAweDMxLCAweGIxLCAweDIyLCAweDkwLCAweGZmLCAweGYwLCAweGUwLCAweGZmLCAweDU0LCAweGEwLCAweDYwLCAweGY3LCAweGVmLCAweDMwLCAweGU1LCAKKzB4MDgsIDB4OTAsIDB4ZmYsIDB4ZjAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4YzMsIDB4MjIsIDB4ZDMsIDB4MjIsIDB4OTAsIDB4ZmYsIDB4ZjAsIDB4ZTAsIDB4ZmYsIAorMHg1NCwgMHgyOCwgMHg2MCwgMHhmNywgMHhlZiwgMHgzMCwgMHhlNSwgMHgwOCwgMHg5MCwgMHhmZiwgMHhmMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHhjMywgMHgyMiwgCisweGQzLCAweDIyLCAweGVmLCAweDMwLCAweGU3LCAweDA4LCAweDEyLCAweDFjLCAweDk1LCAweGUwLCAweDU0LCAweGRmLCAweGYwLCAweDIyLCAweGVmLCAweDEyLCAKKzB4MWMsIDB4ZTgsIDB4ZTAsIDB4NTQsIDB4ZGYsIDB4ZjAsIDB4MjIsIDB4ODEsIDB4MDEsIDB4ODIsIDB4MDIsIDB4ODMsIDB4MDMsIDB4ODcsIDB4NDAsIDB4MDAsIAorMHg0MCwgMHgwMCwgMHg0MCwgMHgwMCwgMHg0MCwgMHgwMCwgMHg0MCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg3OCwgMHg3ZSwgMHgxMiwgMHgyMiwgCisweDA5LCAweGEzLCAweGEzLCAweGUwLCAweGZmLCAweDMwLCAweGU3LCAweDA2LCAweDU0LCAweDdmLCAweGYwLCAweDQ0LCAweDgwLCAweGYwLCAweDIyLCAweDg1LCAKKzB4M2IsIDB4MzksIDB4ODUsIDB4M2MsIDB4M2EsIDB4OTAsIDB4ZmYsIDB4ODIsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4N2YsIAorMHhmMCwgMHgyMiwgMHhlNCwgMHhmZSwgMHhlZSwgMHg5MCwgMHgzMSwgMHg0NywgMHg5MywgMHhiNSwgMHgwNywgMHgwMiwgMHhkMywgMHgyMiwgMHgwZSwgMHhiZSwgCisweDA3LCAweGYyLCAweGMzLCAweDIyLCAweDAwLCAweDA4LCAweDE4LCAweDI4LCAweDM4LCAweDAxLCAweDgxLCAweDEwLCAweDBhLCAweDAyLCAweDAwLCAweDAwLCAKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MDMsIDB4N2YsIDB4MDIsIDB4MTIsIDB4MTAsIDB4OTIsIDB4MTIsIDB4MWQsIDB4NDYsIDB4MDIsIDB4MTAsIAorMHg4NiwgMHg3NSwgMHgzOSwgMHgwMCwgMHg4ZiwgMHgzYSwgMHgxMiwgMHgxYywgMHgzMCwgMHgxMiwgMHgyYywgMHgwNywgMHgyMiwgMHgxMiwgMHgxZCwgMHg2YywgCisweDEyLCAweDFkLCAweDJmLCAweDEyLCAweDFkLCAweDY0LCAweDIyLCAweGMyLCAweDA4LCAweDIyLCAKK307CisKKyN1bmRlZiBJTUFHRV9WRVJTSU9OX05BTUUKKworI3VuZGVmIElNQUdFX0FSUkFZX05BTUUKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2lvbnNwLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9faW9uc3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTJlMDNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2lvbnNwLmgKQEAgLTAsMCArMSw0NTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKglJT05TUC5ICQlEZWZpbml0aW9ucyBmb3IgSS9PIE5ldHdvcmtzIFNlcmlhbCBQcm90b2NvbAorICoKKyAqCUNvcHlyaWdodCAoQykgMTk5Ny0xOTk4IEluc2lkZSBPdXQgTmV0d29ya3MsIEluYy4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqCVRoZXNlIGRlZmluaXRpb25zIGFyZSB1c2VkIGJ5IGJvdGgga2VybmVsLW1vZGUgZHJpdmVyIGFuZCB0aGUKKyAqCXBlcmlwaGVyYWwgZmlybXdhcmUgYW5kIE1VU1QgYmUga2VwdCBpbiBzeW5jLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhlIGRhdGEgdG8gYW5kIGZyb20gYWxsIHBvcnRzIG9uIHRoZSBwZXJpcGhlcmFsIGlzIG11bHRpcGxleGVkCit0aHJvdWdoIGEgc2luZ2xlIGVuZHBvaW50IHBhaXIgKEVQMSBzaW5jZSBpdCBzdXBwb3J0cyA2NC1ieXRlCitNYXhQYWNrZXRTaXplKS4gVGhlcmVmb3JlLCB0aGUgZGF0YSwgY29tbWFuZHMsIGFuZCBzdGF0dXMgZm9yCitlYWNoIHBvcnQgbXVzdCBiZSBwcmVjZWRlZCBieSBhIHNob3J0IGhlYWRlciBpZGVudGlmeWluZyB0aGUKK2Rlc3RpbmF0aW9uIHBvcnQuIFRoZSBoZWFkZXIgYWxzbyBpZGVudGlmaWVzIHRoZSBieXRlcyB0aGF0IGZvbGxvdworYXMgZGF0YSBvciBhcyBjb21tYW5kL3N0YXR1cyBpbmZvLgorCitIZWFkZXIgZm9ybWF0LCBmaXJzdCBieXRlOgorCisgICAgQ0xMTExQUFAKKyAgICAtLS0tLS0tLQorICAgIHwgfAkgfC0tLS0tLSBQb3J0IE51bWJlcjoJMC03CisgICAgfCB8LS0tLS0tLS0tIExlbmd0aDoJTVNCIGJpdHMgb2YgbGVuZ3RoCisgICAgfC0tLS0tLS0tLS0tIERhdGEvQ29tbWFuZDoJMCA9IERhdGEgaGVhZGVyCisJCQkJMSA9IENtZCAvIFN0YXR1cyAoQ21kIGlmIE9VVCwgU3RhdHVzIGlmIElOKQorCitUaGlzIGdpdmVzIDIgcG9zc2libGUgZm9ybWF0czoKKworCisgICAgRGF0YSBoZWFkZXI6CQkwTExMTFBQUAlMTExMTExMTAorICAgID09PT09PT09PT09PQorCisgICAgV2hlcmUgKExMTEwsTExMTExMTCkgaXMgMTItYml0IGxlbmd0aCBvZiBkYXRhIHRoYXQgZm9sbG93cyBmb3IKKyAgICBwb3J0IG51bWJlciAoUFBQKS4gVGhlIGxlbmd0aCBpcyAwLWJhc2VkICgwLUZGRiBtZWFucyAwLTQwOTUKKyAgICBieXRlcykuIFRoZSB+NEsgbGltaXQgYWxsb3dzIHRoZSBob3N0IGRyaXZlciAod2hpY2ggZGVhbHMgaW4KKyAgICB0cmFuc2ZlciByZXF1ZXN0cyBpbnN0ZWFkIG9mIGluZGl2aWR1YWwgcGFja2V0cykgdG8gd3JpdGUgYQorICAgIGxhcmdlIGNodW5rIG9mIGRhdGEgaW4gYSBzaW5nbGUgcmVxdWVzdC4gTm90ZSwgaG93ZXZlciwgdGhhdAorICAgIHRoZSBsZW5ndGggbXVzdCBhbHdheXMgYmUgPD0gdGhlIGN1cnJlbnQgVHhDcmVkaXRzIGZvciBhIGdpdmVuCisgICAgcG9ydCBkdWUgdG8gYnVmZmVyaW5nIGxpbWl0YXRpb25zIG9uIHRoZSBwZXJpcGhlcmFsLgorCisKKyAgICBDbWQvU3RhdHVzIGhlYWRlcjoJCTFjY2NjUFBQCVsgQ0NDQ0NDQ0MsCSBQYXJhbXMgXS4uLgorICAgID09PT09PT09PT09PT09PT09PQorCisgICAgV2hlcmUgKGNjY2MpIG9yIChjY2NjLENDQ0NDQ0NDKSBpcyB0aGUgY21kIG9yIHN0YXR1cyBpZGVudGlmaWVyLgorICAgIEZyZXF1ZW50bHktdXNlZCB2YWx1ZXMgYXJlIGVuY29kZWQgYXMgKGNjY2MpLCBsb25nZXIgb25lcyB1c2luZworICAgIChjY2NjLENDQ0NDQ0NDKS4gU3Vic2VxdWVudCBieXRlcyBhcmUgb3B0aW9uYWwgcGFyYW1ldGVycyBhbmQgYXJlCisgICAgc3BlY2lmaWMgdG8gdGhlIGNtZCBvciBzdGF0dXMgY29kZS4gVGhpcyBtYXkgaW5jbHVkZSBhIGxlbmd0aAorICAgIGZvciBjb21tYW5kIGFuZCBzdGF0dXMgY29kZXMgdGhhdCBuZWVkIHZhcmlhYmxlLWxlbmd0aCBwYXJhbWV0ZXJzLgorCisKK0luIGFkZGl0aW9uLCB3ZSB1c2UgYW5vdGhlciBpbnRlcnJ1cHQgcGlwZSAoZW5kcG9pbnQpIHdoaWNoIHRoZSBob3N0IHBvbGxzCitwZXJpb2RpY2FsbHkgZm9yIGZsb3cgY29udHJvbCBpbmZvcm1hdGlvbi4gVGhlIHBlcmlwaGVyYWwsIHdoZW4gdGhlcmUgaGFzCitiZWVuIGEgY2hhbmdlLCBzZW5kcyB0aGUgZm9sbG93aW5nIDEwLWJ5dGUgcGFja2V0OgorCisJUlJSUlJSUlJSUlJSUlJSUgorCVQwVDBUMFQwVDBUMFQwVDAKKwlUMVQxVDFUMVQxVDFUMVQxCisJVDJUMlQyVDJUMlQyVDJUMgorCVQzVDNUM1QzVDNUM1QzVDMKKworVGhlIGZpcnN0IGZpZWxkIGlzIHRoZSAxNi1iaXQgUnhCeXRlc0F2YWlsIGZpZWxkLCB3aGljaCBpbmRpY2F0ZXMgdGhlCitudW1iZXIgb2YgYnl0ZXMgd2hpY2ggbWF5IGJlIHJlYWQgYnkgdGhlIGhvc3QgZnJvbSBFUDEuIFRoaXMgaXMgbmVjZXNzYXJ5OgorKGEpIGJlY2F1c2UgT1NSMi4xIGhhcyBhIGJ1ZyB3aGljaCBjYXVzZXMgZGF0YSBsb3NzIGlmIHRoZSBwZXJpcGhlcmFsIHJldHVybnMKK2Zld2VyIGJ5dGVzIHRoYW4gdGhlIGhvc3QgZXhwZWN0cyB0byByZWFkLCBhbmQgKGIpIGJlY2F1c2UsIG9uIE1pY3Jvc29mdAorcGxhdGZvcm1zIGF0IGxlYXN0LCBhbiBvdXRzdGFuZGluZyByZWFkIHBvc3RlZCBvbiBFUDEgY29uc3VtZXMgYWJvdXQgMzUlIG9mCit0aGUgQ1BVIGp1c3QgcG9sbGluZyB0aGUgZGV2aWNlIGZvciBkYXRhLgorCitUaGUgbmV4dCA0IGZpZWxkcyBhcmUgdGhlIDE2LWJpdCBUeENyZWRpdHMgZm9yIGVhY2ggcG9ydCwgd2hpY2ggaW5kaWNhdGUgaG93CittYW55IGJ5dGVzIHRoZSBob3N0IGlzIGFsbG93ZWQgdG8gc2VuZCBvbiBFUDEgZm9yIHRyYW5zbWl0IHRvIGEgZ2l2ZW4gcG9ydC4KK0FmdGVyIGFuIE9QRU5fUE9SVCBjb21tYW5kLCB0aGUgRWRnZXBvcnQgc2VuZHMgdGhlIGluaXRpYWwgVHhDcmVkaXRzIGZvciB0aGF0Citwb3J0LgorCitBbGwgMTYtYml0IGZpZWxkcyBhcmUgc2VudCBpbiBsaXR0bGUtZW5kaWFuIChJbnRlbCkgZm9ybWF0LgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vCisvLyBEZWZpbmUgZm9ybWF0IG9mIEludGVycnVwdFN0YXR1cyBwYWNrZXQgcmV0dXJuZWQgZnJvbSB0aGUKKy8vIEludGVycnVwdCBwaXBlCisvLworCitzdHJ1Y3QgaW50X3N0YXR1c19wa3QgeworCV9fdTE2ICAgICAgUnhCeXRlc0F2YWlsOwkJICAgIC8vIEFkZGl0aW9uYWwgYnl0ZXMgYXZhaWxhYmxlIHRvCisJCQkJCQkgICAgLy8gYmUgcmVhZCBmcm9tIEJ1bGsgSU4gcGlwZQorCV9fdTE2ICAgICAgVHhDcmVkaXRzWyBNQVhfUlMyMzJfUE9SVFMgXTsgICAvLyBBZGRpdGlvbmFsIHNwYWNlIGF2YWlsYWJsZSBpbgorCQkJCQkJICAgIC8vIGdpdmVuIHBvcnQncyBUeEJ1ZmZlcgorfTsKKworCisjZGVmaW5lIEdFVF9JTlRfU1RBVFVTX1NJWkUoTnVtUG9ydHMpIChzaXplb2YoX191MTYpICsgKHNpemVvZihfX3UxNikgKiAoTnVtUG9ydHMpKSkKKworCisKKy8vCisvLyBEZWZpbmUgY21kL3N0YXR1cyBoZWFkZXIgdmFsdWVzIGFuZCBtYWNyb3MgdG8gZXh0cmFjdCB0aGVtLgorLy8KKy8vCURhdGE6CQkwTExMTFBQUCBMTExMTExMTAorLy8JQ21kL1N0YXQ6CTFjY2NjUFBQIENDQ0NDQ0NDCisKKyNkZWZpbmUJSU9TUF9EQVRBX0hEUl9TSVpFCQkyCisjZGVmaW5lCUlPU1BfQ01EX0hEUl9TSVpFCQkyCisKKyNkZWZpbmUJSU9TUF9NQVhfREFUQV9MRU5HVEgJCTB4MEZGRgkJLy8gMTIgYml0cyAtPiA0SworCisjZGVmaW5lCUlPU1BfUE9SVF9NQVNLCQkJMHgwNwkJLy8gTWFzayB0byBpc29sYXRlIHBvcnQgbnVtYmVyCisjZGVmaW5lCUlPU1BfQ01EX1NUQVRfQklUCQkweDgwCQkvLyBJZiBzZXQsIHRoaXMgaXMgY29tbWFuZC9zdGF0dXMgaGVhZGVyCisKKyNkZWZpbmUgSVNfQ01EX1NUQVRfSERSKEJ5dGUxKQkJKChCeXRlMSkgJiBJT1NQX0NNRF9TVEFUX0JJVCkKKyNkZWZpbmUgSVNfREFUQV9IRFIoQnl0ZTEpCQkoISBJU19DTURfU1RBVF9IRFIoQnl0ZTEpKQorCisjZGVmaW5lCUlPU1BfR0VUX0hEUl9QT1JUKEJ5dGUxKQkJKChfX3U4KSAoKEJ5dGUxKSAmIElPU1BfUE9SVF9NQVNLKSkKKyNkZWZpbmUJSU9TUF9HRVRfSERSX0RBVEFfTEVOKEJ5dGUxLCBCeXRlMikJKChfX3UxNikgKCAoKF9fdTE2KSgoQnl0ZTEpICYgMHg3OCkpIDw8IDUpIHwgKEJ5dGUyKSkKKyNkZWZpbmUJSU9TUF9HRVRfU1RBVFVTX0NPREUoQnl0ZTEpCQkoKF9fdTgpICgoKEJ5dGUxKSAmICAweDc4KSA+PiAzKSkKKworCisvLworLy8gVGhlc2UgbWFjcm9zIGJ1aWxkIHRoZSAxc3QgYW5kIDJuZCBieXRlcyBmb3IgYSBkYXRhIGhlYWRlcgorLy8KKyNkZWZpbmUJSU9TUF9CVUlMRF9EQVRBX0hEUjEoUG9ydCwgTGVuKQkJKChfX3U4KSAoKChQb3J0KSB8ICgoX191OCkgKCgoX191MTYpIChMZW4pKSA+PiA1KSAmIDB4NzggKSkpKQorI2RlZmluZQlJT1NQX0JVSUxEX0RBVEFfSERSMihQb3J0LCBMZW4pCQkoKF9fdTgpIChMZW4pKQorCisKKy8vCisvLyBUaGVzZSBtYWNyb3MgYnVpbGQgdGhlIDFzdCBhbmQgMm5kIGJ5dGVzIGZvciBhIGNvbW1hbmQgaGVhZGVyCisvLworI2RlZmluZQlJT1NQX0JVSUxEX0NNRF9IRFIxKFBvcnQsIENtZCkJCSgoX191OCkgKCBJT1NQX0NNRF9TVEFUX0JJVCB8IChQb3J0KSB8CSgoX191OCkgKChDbWQpIDw8IDMpKSApKQorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisvLwlEZWZpbmUgdmFsdWVzIGZvciBjb21tYW5kcyBhbmQgY29tbWFuZCBwYXJhbWV0ZXJzCisvLwkoc2VudCBmcm9tIEhvc3QgdG8gRWRnZXBvcnQpCisvLworLy8JMWNjY2NQUFAgUDFQMVAxUDEgWyBQMlAyUDJQMlAyIF0uLi4KKy8vCisvLwljY2NjOgkwMC0wNwkyLWJ5dGUgY29tbWFuZHMuIFdyaXRlIFVBUlQgcmVnaXN0ZXIgMC03IHdpdGgKKy8vCQkJCQl2YWx1ZSBpbiBQMS4gU2VlIDE2NjUwLkggZm9yIGRlZmluaXRpb25zIG9mCisvLwkJCQkJVUFSVCByZWdpc3RlciBudW1iZXJzIGFuZCBjb250ZW50cy4KKy8vCisvLwkJMDgtMEIJMy1ieXRlIGNvbW1hbmRzOgkJCQkJPT09PSBQMSA9PT09CT09PT0gUDIgPT09PQorLy8JCQkJCTA4CWF2YWlsYWJsZSBmb3IgZXhwYW5zaW9uCisvLwkJCQkJMDkJMS1wYXJhbSBjb21tYW5kcwkJQ29tbWFuZCBDb2RlCVBhcmFtCisvLwkJCQkJMEEJYXZhaWxhYmxlIGZvciBleHBhbnNpb24KKy8vCQkJCQkwQglhdmFpbGFibGUgZm9yIGV4cGFuc2lvbgorLy8KKy8vCQkwQy0wRAk0LWJ5dGUgY29tbWFuZHMuCVAxID0gZXh0ZW5kZWQgY21kIGFuZCBQMixQMyA9IHBhcmFtcworLy8JCQkJCQlDdXJyZW50bHkgdW5pbXBsZW1lbnRlZC4KKy8vCisvLwkJMEUtMEYJTi1ieXRlIGNvbW1hbmRzOglQMSA9IG51bSBieXRlcyBhZnRlciBQMSAoaWUsIFRvdGFsTGVuIC0gMikKKy8vCQkJCQkJUDIgPSBleHRlbmRlZCBjbWQsIFAzLi5QbiA9IHBhcmFtZXRlcnMuCisvLwkJCQkJCUN1cnJlbnRseSB1bmltcGxlbWVudGVkLgorLy8KKworI2RlZmluZQlJT1NQX1dSSVRFX1VBUlRfUkVHKG4pCSgobikgJiAweDA3KQkvLyBVYXJ0UmVnWyBuIF0gOj0gUDEKKworLy8gUmVnaXN0ZXIgbnVtYmVycyBhbmQgY29udGVudHMKKy8vIGRlZmluZWQgaW4gMTY1NTQuSC4KKworLy8JCQkJCTB4MDgJCS8vIEF2YWlsYWJsZSBmb3IgZXhwYW5zaW9uLgorI2RlZmluZQlJT1NQX0VYVF9DTUQJCQkweDA5CQkvLyBQMSA9IENvbW1hbmQgY29kZSAoZGVmaW5lZCBiZWxvdykKKworLy8gUDIgPSBQYXJhbWV0ZXIKKworLy8KKy8vIEV4dGVuZGVkIENvbW1hbmQgdmFsdWVzLCB1c2VkIHdpdGggSU9TUF9FWFRfQ01ELCBtYXkKKy8vIG9yIG1heSBub3QgdXNlIHBhcmFtZXRlciBQMi4KKy8vCisKKyNkZWZpbmUJSU9TUF9DTURfT1BFTl9QT1JUCQkweDAwCQkvLyBFbmFibGUgaW50cywgaW5pdCBVQVJULiAoTk8gUEFSQU0pCisjZGVmaW5lCUlPU1BfQ01EX0NMT1NFX1BPUlQJCTB4MDEJCS8vIERpc2FibGUgaW50cywgZmx1c2ggYnVmZmVycy4gKE5PIFBBUkFNKQorI2RlZmluZQlJT1NQX0NNRF9DSEFTRV9QT1JUCQkweDAyCQkvLyBXYWl0IGZvciBFZGdlcG9ydCBUWCBidWZmZXJzIHRvIGVtcHR5LiAoTk8gUEFSQU0pCisjZGVmaW5lIElPU1BfQ01EX1NFVF9SWF9GTE9XCQkweDAzCQkvLyBTZXQgUnggRmxvdyBDb250cm9sIGluIEVkZ2Vwb3J0CisjZGVmaW5lIElPU1BfQ01EX1NFVF9UWF9GTE9XCQkweDA0CQkvLyBTZXQgVHggRmxvdyBDb250cm9sIGluIEVkZ2Vwb3J0CisjZGVmaW5lIElPU1BfQ01EX1NFVF9YT05fQ0hBUgkJMHgwNQkJLy8gU2V0IFhPTiBDaGFyYWN0ZXIgaW4gRWRnZXBvcnQKKyNkZWZpbmUgSU9TUF9DTURfU0VUX1hPRkZfQ0hBUgkJMHgwNgkJLy8gU2V0IFhPRkYgQ2hhcmFjdGVyIGluIEVkZ2Vwb3J0CisjZGVmaW5lIElPU1BfQ01EX1JYX0NIRUNLX1JFUQkJMHgwNwkJLy8gUmVxdWVzdCBFZGdlcG9ydCB0byBpbnNlcnQgYSBDaGVja3BvaW50IGludG8KKworLy8gdGhlIHJlY2VpdmUgZGF0YSBzdHJlYW0gKFBhcmFtZXRlciA9IDEgYnl0ZSBzZXF1ZW5jZSBudW1iZXIpCisKKyNkZWZpbmUgSU9TUF9DTURfU0VUX0JSRUFLCQkweDA4CQkvLyBUdXJuIG9uIHRoZSBCUkVBSyAoTENSIGJpdCA2KQorI2RlZmluZSBJT1NQX0NNRF9DTEVBUl9CUkVBSwkJMHgwOQkJLy8gVHVybiBvZmYgdGhlIEJSRUFLIChMQ1IgYml0IDYpCisKKworLy8KKy8vIERlZmluZSBtYWNyb3MgdG8gc2ltcGxpZnkgYnVpbGRpbmcgb2YgSU9TUCBjbWRzCisvLworCisjZGVmaW5lCU1BS0VfQ01EX1dSSVRFX1JFRyhwcEJ1ZiwgcExlbiwgUG9ydCwgUmVnLCBWYWwpCQkJCQkJXAorCWRvIHsJCQkJCQkJCQkJCVwKKwkJKCoocHBCdWYpKVswXSA9IElPU1BfQlVJTERfQ01EX0hEUjEoIChQb3J0KSwgSU9TUF9XUklURV9VQVJUX1JFRyhSZWcpICk7CVwKKwkJKCoocHBCdWYpKVsxXSA9IChWYWwpOwkJCQkJCQkJXAorCQkJCQkJCQkJCQkJXAorCQkqcHBCdWYgKz0gMjsJCQkJCQkJCQlcCisJCSpwTGVuICArPSAyOwkJCQkJCQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lCU1BS0VfQ01EX0VYVF9DTUQocHBCdWYsIHBMZW4sIFBvcnQsIEV4dENtZCwgUGFyYW0pCQkJCQlcCisJZG8gewkJCQkJCQkJCQkJXAorCQkoKihwcEJ1ZikpWzBdID0gSU9TUF9CVUlMRF9DTURfSERSMSggKFBvcnQpLCBJT1NQX0VYVF9DTUQgKTsJCQlcCisJCSgqKHBwQnVmKSlbMV0gPSAoRXh0Q21kKTsJCQkJCQkJXAorCQkoKihwcEJ1ZikpWzJdID0gKFBhcmFtKTsJCQkJCQkJXAorCQkJCQkJCQkJCQkJXAorCQkqcHBCdWYgKz0gMzsJCQkJCQkJCQlcCisJCSpwTGVuICArPSAzOwkJCQkJCQkJCVwKKwl9IHdoaWxlICgwKQorCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKy8vCURlZmluZSBmb3JtYXQgb2YgZmxvdyBjb250cm9sIGNvbW1hbmRzCisvLwkoc2VudCBmcm9tIEhvc3QgdG8gRWRnZXBvcnQpCisvLworLy8JMTEwMDFQUFAgRmxvd0NtZCBGbG93VHlwZXMKKy8vCisvLwlOb3RlIHRoYXQgdGhlICdGbG93VHlwZXMnIHBhcmFtZXRlciBpcyBhIGJpdCBtYXNrOyB0aGF0IGlzLAorLy8JbW9yZSB0aGFuIG9uZSBmbG93IGNvbnRyb2wgdHlwZSBjYW4gYmUgYWN0aXZlIGF0IHRoZSBzYW1lIHRpbWUuCisvLwlGbG93VHlwZXMgPSAwIG1lYW5zICdubyBmbG93IGNvbnRyb2wnLgorLy8KKworLy8KKy8vCUlPU1BfQ01EX1NFVF9SWF9GTE9XCisvLworLy8JVGVsbHMgRWRnZXBvcnQgaG93IGl0IGNhbiBzdG9wIGluY29taW5nIFVBUlQgZGF0YQorLy8KKy8vICBFeGFtcGxlIGZvciBQb3J0IDAKKy8vCVAwID0gMTEwMDEwMDAKKy8vICBQMSA9IElPU1BfQ01EX1NFVF9SWF9GTE9XCisvLyAgUDIgPSBCaXQgbWFzayBhcyBmb2xsb3dzOgorCisjZGVmaW5lIElPU1BfUlhfRkxPV19SVFMJCTB4MDEJLy8gRWRnZXBvcnQgZHJvcHMgUlRTIHRvIHN0b3AgaW5jb21pbmcgZGF0YQorI2RlZmluZSBJT1NQX1JYX0ZMT1dfRFRSCQkweDAyCS8vIEVkZ2Vwb3J0IGRyb3BzIERUUiB0byBzdG9wIGluY29taW5nIGRhdGEKKyNkZWZpbmUgSU9TUF9SWF9GTE9XX0RTUl9TRU5TSVRJVklUWQkweDA0CS8vIElnbm9yZXMgUnggZGF0YSB1bmxlc3MgRFNSIGhpZ2gKKworLy8gTm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZCBieSBmaXJtd2FyZS4KKyNkZWZpbmUgSU9TUF9SWF9GTE9XX1hPTl9YT0ZGCQkweDA4CS8vIEVkZ2Vwb3J0IHNlbmRzIFhPRkYgY2hhciB0byBzdG9wIGluY29taW5nIGRhdGEuCisKKy8vIEhvc3QgbXVzdCBoYXZlIHByZXZpb3VzbHkgcHJvZ3JhbW1lZCB0aGUKKy8vIFhPTi9YT0ZGIHZhbHVlcyB3aXRoIFNFVF9YT04vU0VUX1hPRkYKKy8vIGJlZm9yZSBlbmFibGluZyB0aGlzIGJpdC4KKworLy8KKy8vCUlPU1BfQ01EX1NFVF9UWF9GTE9XCisvLworLy8JVGVsbHMgRWRnZXBvcnQgd2hhdCBzaWduYWwocykgd2lsbCBzdG9wIGl0IGZyb20gdHJhbnNtaXR0aW5nIFVBUlQgZGF0YQorLy8KKy8vICBFeGFtcGxlIGZvciBQb3J0IDAKKy8vCVAwID0gMTEwMDEwMDAKKy8vICBQMSA9IElPU1BfQ01EX1NFVF9UWF9GTE9XCisvLyAgUDIgPSBCaXQgbWFzayBhcyBmb2xsb3dzOgorCisjZGVmaW5lIElPU1BfVFhfRkxPV19DVFMJCTB4MDEJLy8gRWRnZXBvcnQgc3RvcHMgVHggaWYgQ1RTIGxvdworI2RlZmluZSBJT1NQX1RYX0ZMT1dfRFNSCQkweDAyCS8vIEVkZ2Vwb3J0IHN0b3BzIFR4IGlmIERTUiBsb3cKKyNkZWZpbmUgSU9TUF9UWF9GTE9XX0RDRAkJMHgwNAkvLyBFZGdlcG9ydCBzdG9wcyBUeCBpZiBEQ0QgbG93CisjZGVmaW5lIElPU1BfVFhfRkxPV19YT05fWE9GRgkJMHgwOAkvLyBFZGdlcG9ydCBzdG9wcyBUeCB1cG9uIHJlY2VpdmluZyBYT0ZGIGNoYXIuCisKKy8vIEhvc3QgbXVzdCBoYXZlIHByZXZpb3VzbHkgcHJvZ3JhbW1lZCB0aGUKKy8vIFhPTi9YT0ZGIHZhbHVlcyB3aXRoIFNFVF9YT04vU0VUX1hPRkYKKy8vIGJlZm9yZSBlbmFibGluZyB0aGlzIGJpdC4KKyNkZWZpbmUgSU9TUF9UWF9GTE9XX1hPRkZfQ09OVElOVUUJMHgxMAkvLyBJZiBub3Qgc2V0LCBFZGdlcG9ydCBzdG9wcyBUeCB3aGVuCisKKy8vIHNlbmRpbmcgWE9GRiBpbiBvcmRlciB0byBmaXggYnJva2VuCisvLyBzeXN0ZW1zIHRoYXQgaW50ZXJwcmV0IHRoZSBuZXh0CisvLyByZWNlaXZlZCBjaGFyIGFzIFhPTi4KKy8vIElmIHNldCwgRWRnZXBvcnQgY29udGludWVzIFR4CisvLyBub3JtYWxseSBhZnRlciB0cmFuc21pdHRpbmcgWE9GRi4KKy8vIE5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWQgYnkgZmlybXdhcmUuCisjZGVmaW5lIElPU1BfVFhfVE9HR0xFX1JUUwkJMHgyMAkvLyBFZGdlcG9ydCBkcml2ZXMgUlRTIGFzIGEgdHJ1ZSBoYWxmLWR1cGxleAorCisvLyBSZXF1ZXN0LXRvLVNlbmQgc2lnbmFsOiBpdCBpcyByYWlzZWQgYmVmb3JlCisvLyBiZWdpbm5pbmcgdHJhbnNtaXNzaW9uIGFuZCBsb3dlcmVkIGFmdGVyCisvLyB0aGUgbGFzdCBUeCBjaGFyIGxlYXZlcyB0aGUgVUFSVC4KKy8vIE5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWQgYnkgZmlybXdhcmUuCisKKy8vCisvLwlJT1NQX0NNRF9TRVRfWE9OX0NIQVIKKy8vCisvLwlTZXRzIHRoZSBjaGFyYWN0ZXIgd2hpY2ggRWRnZXBvcnQgdHJhbnNtaXRzL2ludGVycHJldHMgYXMgWE9OLgorLy8JTm90ZTogVGhpcyBjb21tYW5kIE1VU1QgYmUgc2VudCBiZWZvcmUgc2VuZGluZyBhIFNFVF9SWF9GTE9XIG9yCisvLwlTRVRfVFhfRkxPVyB3aXRoIHRoZSBYT05fWE9GRiBiaXQgc2V0LgorLy8KKy8vICBFeGFtcGxlIGZvciBQb3J0IDAKKy8vCVAwID0gMTEwMDEwMDAKKy8vICBQMSA9IElPU1BfQ01EX1NFVF9YT05fQ0hBUgorLy8gIFAyID0gMHgxMQorCisKKy8vCisvLwlJT1NQX0NNRF9TRVRfWE9GRl9DSEFSCisvLworLy8JU2V0cyB0aGUgY2hhcmFjdGVyIHdoaWNoIEVkZ2Vwb3J0IHRyYW5zbWl0cy9pbnRlcnByZXRzIGFzIFhPRkYuCisvLwlOb3RlOiBUaGlzIGNvbW1hbmQgbXVzdCBiZSBzZW50IGJlZm9yZSBzZW5kaW5nIGEgU0VUX1JYX0ZMT1cgb3IKKy8vCVNFVF9UWF9GTE9XIHdpdGggdGhlIFhPTl9YT0ZGIGJpdCBzZXQuCisvLworLy8gIEV4YW1wbGUgZm9yIFBvcnQgMAorLy8JUDAgPSAxMTAwMTAwMAorLy8gIFAxID0gSU9TUF9DTURfU0VUX1hPRkZfQ0hBUgorLy8gIFAyID0gMHgxMworCisKKy8vCisvLwlJT1NQX0NNRF9SWF9DSEVDS19SRVEKKy8vCisvLyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gYXNzaXN0IGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgCisvLyAgSU9DVExfU0VSSUFMX1BVUkdFIFdpbmRvd3MgSU9DVEwuICAKKy8vICBUaGlzIElPU1AgY29tbWFuZCB0cmllcyB0byBwbGFjZSBhIG1hcmtlciBhdCB0aGUgZW5kIG9mIHRoZSBSWCAKKy8vICBxdWV1ZSBpbiB0aGUgRWRnZXBvcnQuIElmIHRoZSBFZGdlcG9ydCBSWCBxdWV1ZSBpcyBmdWxsIHRoZW4gCisvLyAgdGhlIENoZWNrIHdpbGwgYmUgZGlzY2FyZGVkLiAgCisvLyAgSXQgaXMgdXAgdG8gdGhlIGRldmljZSBkcml2ZXIgdG8gdGltZW91dCB3YWl0aW5nIGZvciB0aGUgCisvLyAgUlhfQ0hFQ0tfUlNQLiAgSWYgYSBSWF9DSEVDS19SU1AgaXMgcmVjZWl2ZWQsIHRoZSBkcml2ZXIgaXMgCisvLwlzdXJlIHRoYXQgYWxsIGRhdGEgaGFzIGJlZW4gcmVjZWl2ZWQgZnJvbSB0aGUgZWRnZXBvcnQgYW5kIAorLy8JbWF5IG5vdyBwdXJnZSBhbnkgaW50ZXJuYWwgUlggYnVmZmVycy4KKy8vICBOb3RlIHRhdCB0aGUgc2VxdWVuY2UgbnVtYmVycyBtYXkgYmUgdXNlZCB0byBkZXRlY3QgbG9zdCAKKy8vICBDSEVDS19SRVFzLgorCisvLyAgRXhhbXBsZSBmb3IgUG9ydCAwCisvLwlQMCA9IDExMDAxMDAwCisvLyAgUDEgPSBJT1NQX0NNRF9SWF9DSEVDS19SRVEKKy8vICBQMiA9IFNlcXVlbmNlIG51bWJlcgorCisKKy8vICBSZXNwb25zZSB3aWxsIGJlOgorLy8gIFAxID0gSU9TUF9FWFRfUlhfQ0hFQ0tfUlNQCisvLyAgUDIgPSBSZXF1ZXN0IFNlcXVlbmNlIG51bWJlcgorCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKy8vCURlZmluZSB2YWx1ZXMgZm9yIHN0YXR1cyBhbmQgc3RhdHVzIHBhcmFtZXRlcnMKKy8vCShyZWNlaXZlZCBieSBIb3N0IGZyb20gRWRnZXBvcnQpCisvLworLy8JMXNzc3NQUFAgUDFQMVAxUDEgWyBQMlAyUDJQMlAyIF0uLi4KKy8vCisvLyAJc3NzczoJMDAtMDcJMi1ieXRlIHN0YXR1cy4Jc3NzcyBpZGVudGlmaWVzIHdoaWNoIFVBUlQgcmVnaXN0ZXIKKy8vCQkJCQloYXMgY2hhbmdlZCB2YWx1ZSwgYW5kIHRoZSBuZXcgdmFsdWUgaXMgaW4gUDEuCisvLwkJCQkJTm90ZSB0aGF0IHRoZSBzc3NzIHZhbHVlcyBkbyBub3QgY29ycmVzcG9uZCB0byB0aGUKKy8vCQkJCQkxNjU1NCByZWdpc3RlciBudW1iZXJzIGdpdmVuIGluIDE2NTU0LkguIEluc3RlYWQsCisvLwkJCQkJc2VlIGJlbG93IGZvciBkZWZpbml0aW9ucyBvZiB0aGUgc3NzcyBudW1iZXJzCisvLwkJCQkJdXNlZCBpbiB0aGlzIHN0YXR1cyBtZXNzYWdlLgorLy8KKy8vCQkwOC0wQgkzLWJ5dGUgc3RhdHVzOgkJCQkJPT09PSBQMSA9PT09CT09PT0gUDIgPT09PQorLy8JCQkJCTA4CUxTUl9EQVRBOgkJTmV3IExTUgkJRXJyb3JlZCBieXRlCisvLwkJCQkJMDkJMS1wYXJhbSByZXNwb25zZXMJUmVzcG9uc2UgQ29kZQlQYXJhbQorLy8JCQkJCTBBCU9QRU5fUlNQOgkJSW5pdGlhbE1zcglUeEJ1ZmZlclNpemUKKy8vCQkJCQkwQglhdmFpbGFibGUgZm9yIGV4cGFuc2lvbgorLy8KKy8vCQkwQy0wRAk0LWJ5dGUgc3RhdHVzLglQMSA9IGV4dGVuZGVkIHN0YXR1cyBjb2RlIGFuZCBQMixQMyA9IHBhcmFtcworLy8JCQkJCU5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWQuCisvLworLy8JCTBFLTBGCU4tYnl0ZSBzdGF0dXM6CVAxID0gbnVtIGJ5dGVzIGFmdGVyIFAxIChpZSwgVG90YWxMZW4gLSAyKQorLy8JCQkJCVAyID0gZXh0ZW5kZWQgc3RhdHVzLCBQMy4uUG4gPSBwYXJhbWV0ZXJzLgorLy8JCQkJCU5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWQuCisvLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJU1NTUyB2YWx1ZXMgZm9yIDItYnl0ZSBzdGF0dXMgbWVzc2FnZXMgKDAtOCkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lCUlPU1BfU1RBVFVTX0xTUgkJCTB4MDAJLy8gUDEgaXMgbmV3IHZhbHVlIG9mIExTUiByZWdpc3Rlci4KKworLy8gQml0cyBkZWZpbmVkIGluIDE2NTU0LkguIEVkZ2Vwb3J0CisvLyByZXR1cm5zIHRoaXMgaW4gb3JkZXIgdG8gcmVwb3J0CisvLyBsaW5lIHN0YXR1cyBlcnJvcnMgKG92ZXJydW4sCisvLyBwYXJpdHksIGZyYW1pbmcsIGJyZWFrKS4gVGhpcyBmb3JtCisvLyBpcyB1c2VkIHdoZW4gYSBlcnJvcmVkIHJlY2VpdmUgZGF0YQorLy8gY2hhcmFjdGVyIHdhcyBOT1QgcHJlc2VudCBpbiB0aGUKKy8vIFVBUlQgd2hlbiB0aGUgTFNSIGVycm9yIG9jY3VycmVkCisvLyAoaWUsIHdoZW4gTFNSIGJpdCAwID0gMCkuCisKKyNkZWZpbmUJSU9TUF9TVEFUVVNfTVNSCQkJMHgwMQkvLyBQMSBpcyBuZXcgdmFsdWUgb2YgTVNSIHJlZ2lzdGVyLgorCisvLyBCaXRzIGRlZmluZWQgaW4gMTY1NTQuSC4gRWRnZXBvcnQKKy8vIHJldHVybnMgdGhpcyBpbiBvcmRlciB0byByZXBvcnQKKy8vIGNoYW5nZXMgaW4gbW9kZW0gc3RhdHVzIGxpbmVzCisvLyAoQ1RTLCBEU1IsIFJJLCBDRCkKKy8vIAorCisvLwkJCQkJMHgwMgkvLyBBdmFpbGFibGUgZm9yIGZ1dHVyZSBleHBhbnNpb24KKy8vCQkJCQkweDAzCS8vIAorLy8JCQkJCTB4MDQJLy8gCisvLwkJCQkJMHgwNQkvLyAKKy8vCQkJCQkweDA2CS8vIAorLy8JCQkJCTB4MDcJLy8gCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCVNTU1MgdmFsdWVzIGZvciAzLWJ5dGUgc3RhdHVzIG1lc3NhZ2VzICg4LUEpCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZQlJT1NQX1NUQVRVU19MU1JfREFUQQkJMHgwOAkvLyBQMSBpcyBuZXcgdmFsdWUgb2YgTFNSIHJlZ2lzdGVyIChzYW1lIGFzIFNUQVRVU19MU1IpCisKKy8vIFAyIGlzIGVycm9yZWQgY2hhcmFjdGVyIHJlYWQgZnJvbQorLy8gICAgUnhGSUZPIGFmdGVyIExTUiByZXBvcnRlZCBhbiBlcnJvci4JCQkJCQkJCQkJCQkJCisKKyNkZWZpbmUJSU9TUF9FWFRfU1RBVFVTCQkJMHgwOQkvLyBQMSBpcyBzdGF0dXMvcmVzcG9uc2UgY29kZSwgcGFyYW0gaW4gUDIuCisKKworLy8gUmVzcG9uc2UgQ29kZXMgKFAxIHZhbHVlcykgZm9yIDMtYnl0ZSBzdGF0dXMgbWVzc2FnZXMKKworI2RlZmluZQlJT1NQX0VYVF9TVEFUVVNfQ0hBU0VfUlNQCTAJLy8gUmVwbHkgdG8gQ0hBU0VfUE9SVCBjbWQuIFAyIGlzIG91dGNvbWU6CisjZGVmaW5lCUlPU1BfRVhUX1NUQVRVU19DSEFTRV9QQVNTCTAJLy8gCVAyID0gMDogQWxsIFR4IGRhdGEgZHJhaW5lZCBzdWNjZXNzZnVsbHkKKyNkZWZpbmUJSU9TUF9FWFRfU1RBVFVTX0NIQVNFX0ZBSUwJMQkvLwlQMiA9IDE6IFRpbWVkIG91dCAoc3R1Y2sgZHVlIHRvIGZsb3cKKworLy8JCQljb250cm9sIGZyb20gcmVtb3RlIGRldmljZSkuCisKKyNkZWZpbmUJSU9TUF9FWFRfU1RBVFVTX1JYX0NIRUNLX1JTUAkxCS8vIFJlcGx5IHRvIFJYX0NIRUNLIGNtZC4gUDIgaXMgc2VxdWVuY2UgbnVtYmVyCisKKworI2RlZmluZSBJT1NQX1NUQVRVU19PUEVOX1JTUAkJMHgwQQkvLyBSZXBseSB0byBPUEVOX1BPUlQgY21kLgorCisvLyBQMSBpcyBJbml0aWFsIE1TUiB2YWx1ZQorLy8gUDIgaXMgZW5jb2RlZCBUeEJ1ZmZlciBTaXplOgorLy8JVHhCdWZmZXJTaXplID0gKFAyICsgMSkgKiA2NAorCisvLwkJCQkJMHgwQgkvLyBBdmFpbGFibGUgZm9yIGZ1dHVyZSBleHBhbnNpb24KKworI2RlZmluZSBHRVRfVFhfQlVGRkVSX1NJWkUoUDIpICgoKFAyKSArIDEpICogNjQpCisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKglTU1NTIHZhbHVlcyBmb3IgNC1ieXRlIHN0YXR1cyBtZXNzYWdlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgSU9TUF9FWFQ0X1NUQVRVUwkJMHgwQwkvLyBFeHRlbmRlZCBzdGF0dXMgY29kZSBpbiBQMSwKKworLy8gUGFyYW1zIGluIFAyLCBQMworLy8gQ3VycmVudGx5IHVuaW1wbGVtZW50ZWQuCisKKy8vCQkJCQkweDBECS8vIEN1cnJlbnRseSB1bnVzZWQsIGF2YWlsYWJsZS4KKworCisKKy8vCisvLyBNYWNyb3MgdG8gcGFyc2Ugc3RhdHVzIG1lc3NhZ2VzCisvLworCisjZGVmaW5lCUlPU1BfR0VUX1NUQVRVU19MRU4oY29kZSkJKCAoY29kZSkgPCA4ID8gMiA6ICgoY29kZSkgPCAweDBBID8gMyA6IDQpICkKKworI2RlZmluZQlJT1NQX1NUQVRVU19JU18yQllURShjb2RlKQkoIChjb2RlKSA8IDB4MDggKQorI2RlZmluZQlJT1NQX1NUQVRVU19JU18zQllURShjb2RlKQkoICgoY29kZSkgPj0gMHgwOCkgJiYgKChjb2RlKSA8PSAweDBCKSApCisjZGVmaW5lCUlPU1BfU1RBVFVTX0lTXzRCWVRFKGNvZGUpCSggKChjb2RlKSA+PSAweDBDKSAmJiAoKGNvZGUpIDw9IDB4MEQpICkKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RhYmxlcy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RhYmxlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZmZlMDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGFibGVzLmgKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBJTyBFZGdlcG9ydCBEcml2ZXIgdGFibGVzCisgKgorICoJQ29weXJpZ2h0IChDKSAyMDAxCisgKgkgICAgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKi8KKworI2lmbmRlZiBJT19UQUJMRVNfSAorI2RlZmluZSBJT19UQUJMRVNfSAorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZWRnZXBvcnRfMnBvcnRfaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzJJKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80MjEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzIxKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF8yX0RJTikgfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBlZGdlcG9ydF80cG9ydF9pZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfUkFQSURQT1JUXzQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzRUKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9NVDRYNTZVU0IpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzRJKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF84X0RVQUxfQ1BVKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80X0RJTikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMjJJKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80MTJfNCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfQ09NUEFUSUJMRSkgfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBlZGdlcG9ydF84cG9ydF9pZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfOCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMTZfRFVBTF9DUFUpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzhJKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF84UikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfOFJSKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80MTJfOCkgfSwKKwl7IH0KK307CisKKy8qIERldmljZXMgdGhhdCB0aGlzIGRyaXZlciBzdXBwb3J0cyAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkIFtdID0geworCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwJSU9OX0RFVklDRV9JRF9FREdFUE9SVF80KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwJSU9OX0RFVklDRV9JRF9SQVBJRFBPUlRfNCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sCUlPTl9ERVZJQ0VfSURfRURHRVBPUlRfNFQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX01UNFg1NlVTQikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sCUlPTl9ERVZJQ0VfSURfRURHRVBPUlRfMikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sCUlPTl9ERVZJQ0VfSURfRURHRVBPUlRfNEkpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLAlJT05fREVWSUNFX0lEX0VER0VQT1JUXzJJKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwJSU9OX0RFVklDRV9JRF9FREdFUE9SVF80MjEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLAlJT05fREVWSUNFX0lEX0VER0VQT1JUXzIxKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwJSU9OX0RFVklDRV9JRF9FREdFUE9SVF84X0RVQUxfQ1BVKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwJSU9OX0RFVklDRV9JRF9FREdFUE9SVF84KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwJSU9OX0RFVklDRV9JRF9FREdFUE9SVF8yX0RJTikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sCUlPTl9ERVZJQ0VfSURfRURHRVBPUlRfNF9ESU4pIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLAlJT05fREVWSUNFX0lEX0VER0VQT1JUXzE2X0RVQUxfQ1BVKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF8yMkkpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzQxMl80KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwJSU9OX0RFVklDRV9JRF9FREdFUE9SVF9DT01QQVRJQkxFKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwJSU9OX0RFVklDRV9JRF9FREdFUE9SVF84SSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfOFIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzhSUikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNDEyXzgpIH0sCisJeyB9CQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlX2NvbWJpbmVkKTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGVkZ2Vwb3J0XzJwb3J0X2RldmljZSA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQkJPSAiRWRnZXBvcnQgMiBwb3J0IGFkYXB0ZXIiLAorCS5zaG9ydF9uYW1lCQk9ICJlZGdlcG9ydF8yIiwKKwkuaWRfdGFibGUJCT0gZWRnZXBvcnRfMnBvcnRfaWRfdGFibGUsCisJLm51bV9pbnRlcnJ1cHRfaW4JPSAxLAorCS5udW1fYnVsa19pbgkJPSAxLAorCS5udW1fYnVsa19vdXQJCT0gMSwKKwkubnVtX3BvcnRzCQk9IDIsCisJLm9wZW4JCQk9IGVkZ2Vfb3BlbiwKKwkuY2xvc2UJCQk9IGVkZ2VfY2xvc2UsCisJLnRocm90dGxlCQk9IGVkZ2VfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUJCT0gZWRnZV91bnRocm90dGxlLAorCS5hdHRhY2gJCQk9IGVkZ2Vfc3RhcnR1cCwKKwkuc2h1dGRvd24JCT0gZWRnZV9zaHV0ZG93biwKKwkuaW9jdGwJCQk9IGVkZ2VfaW9jdGwsCisJLnNldF90ZXJtaW9zCQk9IGVkZ2Vfc2V0X3Rlcm1pb3MsCisJLnRpb2NtZ2V0CQk9IGVkZ2VfdGlvY21nZXQsCisJLnRpb2Ntc2V0CQk9IGVkZ2VfdGlvY21zZXQsCisJLndyaXRlCQkJPSBlZGdlX3dyaXRlLAorCS53cml0ZV9yb29tCQk9IGVkZ2Vfd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyCT0gZWRnZV9jaGFyc19pbl9idWZmZXIsCisJLmJyZWFrX2N0bAkJPSBlZGdlX2JyZWFrLAorCS5yZWFkX2ludF9jYWxsYmFjawk9IGVkZ2VfaW50ZXJydXB0X2NhbGxiYWNrLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sJPSBlZGdlX2J1bGtfaW5fY2FsbGJhY2ssCisJLndyaXRlX2J1bGtfY2FsbGJhY2sJPSBlZGdlX2J1bGtfb3V0X2RhdGFfY2FsbGJhY2ssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZWRnZXBvcnRfNHBvcnRfZGV2aWNlID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCQk9ICJFZGdlcG9ydCA0IHBvcnQgYWRhcHRlciIsCisJLnNob3J0X25hbWUJCT0gImVkZ2Vwb3J0XzQiLAorCS5pZF90YWJsZQkJPSBlZGdlcG9ydF80cG9ydF9pZF90YWJsZSwKKwkubnVtX2ludGVycnVwdF9pbgk9IDEsCisJLm51bV9idWxrX2luCQk9IDEsCisJLm51bV9idWxrX291dAkJPSAxLAorCS5udW1fcG9ydHMJCT0gNCwKKwkub3BlbgkJCT0gZWRnZV9vcGVuLAorCS5jbG9zZQkJCT0gZWRnZV9jbG9zZSwKKwkudGhyb3R0bGUJCT0gZWRnZV90aHJvdHRsZSwKKwkudW50aHJvdHRsZQkJPSBlZGdlX3VudGhyb3R0bGUsCisJLmF0dGFjaAkJCT0gZWRnZV9zdGFydHVwLAorCS5zaHV0ZG93bgkJPSBlZGdlX3NodXRkb3duLAorCS5pb2N0bAkJCT0gZWRnZV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MJCT0gZWRnZV9zZXRfdGVybWlvcywKKwkudGlvY21nZXQJCT0gZWRnZV90aW9jbWdldCwKKwkudGlvY21zZXQJCT0gZWRnZV90aW9jbXNldCwKKwkud3JpdGUJCQk9IGVkZ2Vfd3JpdGUsCisJLndyaXRlX3Jvb20JCT0gZWRnZV93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIJPSBlZGdlX2NoYXJzX2luX2J1ZmZlciwKKwkuYnJlYWtfY3RsCQk9IGVkZ2VfYnJlYWssCisJLnJlYWRfaW50X2NhbGxiYWNrCT0gZWRnZV9pbnRlcnJ1cHRfY2FsbGJhY2ssCisJLnJlYWRfYnVsa19jYWxsYmFjawk9IGVkZ2VfYnVsa19pbl9jYWxsYmFjaywKKwkud3JpdGVfYnVsa19jYWxsYmFjawk9IGVkZ2VfYnVsa19vdXRfZGF0YV9jYWxsYmFjaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBlZGdlcG9ydF84cG9ydF9kZXZpY2UgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJCT0gIkVkZ2Vwb3J0IDggcG9ydCBhZGFwdGVyIiwKKwkuc2hvcnRfbmFtZQkJPSAiZWRnZXBvcnRfOCIsCisJLmlkX3RhYmxlCQk9IGVkZ2Vwb3J0Xzhwb3J0X2lkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luCT0gMSwKKwkubnVtX2J1bGtfaW4JCT0gMSwKKwkubnVtX2J1bGtfb3V0CQk9IDEsCisJLm51bV9wb3J0cwkJPSA4LAorCS5vcGVuCQkJPSBlZGdlX29wZW4sCisJLmNsb3NlCQkJPSBlZGdlX2Nsb3NlLAorCS50aHJvdHRsZQkJPSBlZGdlX3Rocm90dGxlLAorCS51bnRocm90dGxlCQk9IGVkZ2VfdW50aHJvdHRsZSwKKwkuYXR0YWNoCQkJPSBlZGdlX3N0YXJ0dXAsCisJLnNodXRkb3duCQk9IGVkZ2Vfc2h1dGRvd24sCisJLmlvY3RsCQkJPSBlZGdlX2lvY3RsLAorCS5zZXRfdGVybWlvcwkJPSBlZGdlX3NldF90ZXJtaW9zLAorCS50aW9jbWdldAkJPSBlZGdlX3Rpb2NtZ2V0LAorCS50aW9jbXNldAkJPSBlZGdlX3Rpb2Ntc2V0LAorCS53cml0ZQkJCT0gZWRnZV93cml0ZSwKKwkud3JpdGVfcm9vbQkJPSBlZGdlX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlcgk9IGVkZ2VfY2hhcnNfaW5fYnVmZmVyLAorCS5icmVha19jdGwJCT0gZWRnZV9icmVhaywKKwkucmVhZF9pbnRfY2FsbGJhY2sJPSBlZGdlX2ludGVycnVwdF9jYWxsYmFjaywKKwkucmVhZF9idWxrX2NhbGxiYWNrCT0gZWRnZV9idWxrX2luX2NhbGxiYWNrLAorCS53cml0ZV9idWxrX2NhbGxiYWNrCT0gZWRnZV9idWxrX291dF9kYXRhX2NhbGxiYWNrLAorfTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM5NmZkYWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYwpAQCAtMCwwICsxLDMwOTEgQEAKKy8qCisgKiBFZGdlcG9ydCBVU0IgU2VyaWFsIENvbnZlcnRlciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBJbnNpZGUgT3V0IE5ldHdvcmtzLCBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZGV2aWNlczoKKyAqCUVQLzEgRVAvMiBFUC80IEVQLzIxIEVQLzIyIEVQLzIyMSBFUC80MiBFUC80MjEgV0FUQ0hQT1JUCisgKgorICogRm9yIHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBjb250YWN0IEluc2lkZSBPdXQKKyAqIE5ldHdvcmtzIHRlY2huaWNhbCBzdXBwb3J0LCBvciBQZXRlciBCZXJnZXIgPHBiZXJnZXJAYnJpbXNvbi5jb20+LAorICogb3IgQWwgQm9yY2hlcnMgPGFsYm9yY2hlcnNAc3RlaW5lcnBvaW50LmNvbT4uCisgKgorICogVmVyc2lvbiBoaXN0b3J5OgorICoKKyAqCUp1bHkgMTEsIDIwMDIgCVJlbW92ZWQgNCBwb3J0IGRldmljZSBzdHJ1Y3R1cmUgc2luY2UgYWxsIFRJIFVNUCAKKyAqCQkJY2hpcHMgaGF2ZSBvbmx5IDIgcG9ydHMgCisgKgkJCURhdmlkIElhY292ZWxsaSAoZGF2aWRpQGlvbmV0d29ya3MuY29tKQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisjaW5jbHVkZSAiaW9fMTY2NTQuaCIKKyNpbmNsdWRlICJpb191c2J2ZW5kLmgiCisjaW5jbHVkZSAiaW9fdGkuaCIKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuNyIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4gYW5kIERhdmlkIElhY292ZWxsaSIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkVkZ2Vwb3J0IFVTQiBTZXJpYWwgRHJpdmVyIgorCisKKy8qIGZpcm13YXJlIGltYWdlIGNvZGUgKi8KKyNkZWZpbmUgSU1BR0VfVkVSU0lPTl9OQU1FCVBhZ2FibGVPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb24KKyNkZWZpbmUgSU1BR0VfQVJSQVlfTkFNRQlQYWdhYmxlT3BlcmF0aW9uYWxDb2RlSW1hZ2UKKyNkZWZpbmUgSU1BR0VfU0laRQkJUGFnYWJsZU9wZXJhdGlvbmFsQ29kZVNpemUKKyNpbmNsdWRlICJpb19md19kb3duMy5oIgkvKiBEZWZpbmUgYXJyYXkgT3BlcmF0aW9uYWxDb2RlSW1hZ2VbXSAqLworCisjZGVmaW5lIEVQUk9NX1BBR0VfU0laRQkJNjQKKworCitzdHJ1Y3QgZWRnZXBvcnRfdWFydF9idWZfZGVzYyB7CisJX191MzIgY291bnQ7CQkvLyBOdW1iZXIgb2YgYnl0ZXMgY3VycmVudGx5IGluIGJ1ZmZlcgorfTsKKworLyogZGlmZmVyZW50IGhhcmR3YXJlIHR5cGVzICovCisjZGVmaW5lIEhBUkRXQVJFX1RZUEVfOTMwCTAKKyNkZWZpbmUgSEFSRFdBUkVfVFlQRV9USVVNUAkxCisKKy8vIElPQ1RMX1BSSVZBVEVfVElfR0VUX01PREUgRGVmaW5pdGlvbnMKKyNkZWZpbmUJVElfTU9ERV9DT05GSUdVUklORwkwICAgLy8gRGV2aWNlIGhhcyBub3QgZW50ZXJlZCBzdGFydCBkZXZpY2UgCisjZGVmaW5lCVRJX01PREVfQk9PVAkJMSAgIC8vIFN0YXlpbmcgaW4gYm9vdCBtb2RlCisjZGVmaW5lIFRJX01PREVfRE9XTkxPQUQJMiAgIC8vIE1hZGUgaXQgdG8gZG93bmxvYWQgbW9kZQorI2RlZmluZSBUSV9NT0RFX1RSQU5TSVRJT05JTkcJMyAgIC8vIEN1cnJlbnRseSBpbiBib290IG1vZGUgYnV0IHRyYW5zaXRpb25pbmcgdG8gZG93bmxvYWQgbW9kZQorCisvKiByZWFkIHVyYiBzdGF0ZSAqLworI2RlZmluZSBFREdFX1JFQURfVVJCX1JVTk5JTkcJMAorI2RlZmluZSBFREdFX1JFQURfVVJCX1NUT1BQSU5HCTEKKyNkZWZpbmUgRURHRV9SRUFEX1VSQl9TVE9QUEVECTIKKworI2RlZmluZSBFREdFX0xPV19MQVRFTkNZCTEKKyNkZWZpbmUgRURHRV9DTE9TSU5HX1dBSVQJNDAwMAkvKiBpbiAuMDEgc2VjICovCisKKyNkZWZpbmUgRURHRV9PVVRfQlVGX1NJWkUJMTAyNAorCisKKy8qIFByb2R1Y3QgaW5mb3JtYXRpb24gcmVhZCBmcm9tIHRoZSBFZGdlcG9ydCAqLworc3RydWN0IHByb2R1Y3RfaW5mbworeworCWludAlUaU1vZGU7CQkJLy8gQ3VycmVudCBUSSBNb2RlCisJX191OAloYXJkd2FyZV90eXBlOwkJLy8gVHlwZSBvZiBoYXJkd2FyZQorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogY2lyY3VsYXIgYnVmZmVyICovCitzdHJ1Y3QgZWRnZV9idWYgeworCXVuc2lnbmVkIGludAlidWZfc2l6ZTsKKwljaGFyCQkqYnVmX2J1ZjsKKwljaGFyCQkqYnVmX2dldDsKKwljaGFyCQkqYnVmX3B1dDsKK307CisKK3N0cnVjdCBlZGdlcG9ydF9wb3J0IHsKKwlfX3UxNiB1YXJ0X2Jhc2U7CisJX191MTYgZG1hX2FkZHJlc3M7CisJX191OCBzaGFkb3dfbXNyOworCV9fdTggc2hhZG93X21jcjsKKwlfX3U4IHNoYWRvd19sc3I7CisJX191OCBsc3JfbWFzazsKKwlfX3UzMiB1bXBfcmVhZF90aW1lb3V0OwkJLyogTnVtYmVyIG9mIG1pbGlzZWNvbmRzIHRoZSBVTVAgd2lsbAorCQkJCQkgICB3YWl0IHdpdGhvdXQgZGF0YSBiZWZvcmUgY29tcGxldGluZworCQkJCQkgICBhIHJlYWQgc2hvcnQgKi8KKwlpbnQgYmF1ZF9yYXRlOworCWludCBjbG9zZV9wZW5kaW5nOworCWludCBsc3JfZXZlbnQ7CisJc3RydWN0IGVkZ2Vwb3J0X3VhcnRfYnVmX2Rlc2MgdHg7CisJc3RydWN0IGFzeW5jX2ljb3VudAlpY291bnQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QJZGVsdGFfbXNyX3dhaXQ7CS8qIGZvciBoYW5kbGluZyBzbGVlcGluZyB3aGlsZQorCQkJCQkJICAgd2FpdGluZyBmb3IgbXNyIGNoYW5nZSB0bworCQkJCQkJICAgaGFwcGVuICovCisJc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbAkqZWRnZV9zZXJpYWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkqcG9ydDsKKwlfX3U4IGJVYXJ0TW9kZTsJCS8qIFBvcnQgdHlwZSwgMDogUlMyMzIsIGV0Yy4gKi8gCisJc3BpbmxvY2tfdCBlcF9sb2NrOworCWludCBlcF9yZWFkX3VyYl9zdGF0ZTsKKwlpbnQgZXBfd3JpdGVfdXJiX2luX3VzZTsKKwlzdHJ1Y3QgZWRnZV9idWYgKmVwX291dF9idWY7Cit9OworCitzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsIHsKKwlzdHJ1Y3QgcHJvZHVjdF9pbmZvIHByb2R1Y3RfaW5mbzsKKwl1OCBUSV9JMkNfVHlwZTsJCQkvLyBUeXBlIG9mIEkyQyBpbiBVTVAKKwl1OCBUaVJlYWRJMkM7CQkJLy8gU2V0IHRvIFRSVUUgaWYgd2UgaGF2ZSByZWFkIHRoZSBJMmMgaW4gQm9vdCBNb2RlCisJc3RydWN0IHNlbWFwaG9yZSBlc19zZW07CisJaW50IG51bV9wb3J0c19vcGVuOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7Cit9OworCisKKy8qIERldmljZXMgdGhhdCB0aGlzIGRyaXZlciBzdXBwb3J0cyAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGVkZ2Vwb3J0XzFwb3J0X2lkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8xKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9USTM0MTBfRURHRVBPUlRfMSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfVEkzNDEwX0VER0VQT1JUXzFJKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9XUF9QUk9YSU1JVFkpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX01PVElPTikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfV1BfTU9JU1RVUkUpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX1RFTVBFUkFUVVJFKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9XUF9IVU1JRElUWSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfV1BfUE9XRVIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX0xJR0hUKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9XUF9SQURJQVRJT04pIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX0RJU1RBTkNFKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9XUF9BQ0NFTEVSQVRJT04pIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX1BST1hfRElTVCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfUExVU19QV1JfSFA0Q0QpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1BMVVNfUFdSX1BDSSkgfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBlZGdlcG9ydF8ycG9ydF9pZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMkMpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzJJKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF80MjEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzIxKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF80MikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfNCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfNEkpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzIySSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMjIxQykgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMjJDKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8yMUMpIH0sCisvLyBUaGUgNC1wb3J0IHNob3dzIHVwIGFzIHR3byAyLXBvcnQgZGV2aWNlcworCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF80UykgfSwKKwl7IH0KK307CisKKy8qIERldmljZXMgdGhhdCB0aGlzIGRyaXZlciBzdXBwb3J0cyAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkIFtdID0geworCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8xKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9USTM0MTBfRURHRVBPUlRfMSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfVEkzNDEwX0VER0VQT1JUXzFJKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9XUF9QUk9YSU1JVFkpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX01PVElPTikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfV1BfTU9JU1RVUkUpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX1RFTVBFUkFUVVJFKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9XUF9IVU1JRElUWSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfV1BfUE9XRVIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX0xJR0hUKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9XUF9SQURJQVRJT04pIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX0RJU1RBTkNFKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9XUF9BQ0NFTEVSQVRJT04pIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX1BST1hfRElTVCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfUExVU19QV1JfSFA0Q0QpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1BMVVNfUFdSX1BDSSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMkMpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzJJKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF80MjEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzIxKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF80MikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfNCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfNEkpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzIySSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMjIxQykgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMjJDKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8yMUMpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzRTKSB9LAorCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZV9jb21iaW5lZCk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBpb19kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImlvX3RpIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlX2NvbWJpbmVkLAorfTsKKworCitzdGF0aWMgc3RydWN0IEVER0VfRklSTVdBUkVfVkVSU0lPTl9JTkZPIE9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbjsKKworc3RhdGljIGludCBkZWJ1ZzsKKworc3RhdGljIGludCBUSVN0YXlJbkJvb3RNb2RlID0gMDsKK3N0YXRpYyBpbnQgbG93X2xhdGVuY3kgPSBFREdFX0xPV19MQVRFTkNZOworc3RhdGljIGludCBjbG9zaW5nX3dhaXQgPSBFREdFX0NMT1NJTkdfV0FJVDsKK3N0YXRpYyBpbnQgaWdub3JlX2NwdV9yZXYgPSAwOworCisKK3N0YXRpYyB2b2lkIGVkZ2VfdHR5X3JlY3Yoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuZ3RoKTsKKworc3RhdGljIHZvaWQgc3RvcF9yZWFkKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQpOworc3RhdGljIGludCByZXN0YXJ0X3JlYWQoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCk7CisKK3N0YXRpYyB2b2lkIGVkZ2Vfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcyk7CitzdGF0aWMgdm9pZCBlZGdlX3NlbmQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CisKKy8qIGNpcmN1bGFyIGJ1ZmZlciAqLworc3RhdGljIHN0cnVjdCBlZGdlX2J1ZiAqZWRnZV9idWZfYWxsb2ModW5zaWduZWQgaW50IHNpemUpOworc3RhdGljIHZvaWQgZWRnZV9idWZfZnJlZShzdHJ1Y3QgZWRnZV9idWYgKmViKTsKK3N0YXRpYyB2b2lkIGVkZ2VfYnVmX2NsZWFyKHN0cnVjdCBlZGdlX2J1ZiAqZWIpOworc3RhdGljIHVuc2lnbmVkIGludCBlZGdlX2J1Zl9kYXRhX2F2YWlsKHN0cnVjdCBlZGdlX2J1ZiAqZWIpOworc3RhdGljIHVuc2lnbmVkIGludCBlZGdlX2J1Zl9zcGFjZV9hdmFpbChzdHJ1Y3QgZWRnZV9idWYgKmViKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZWRnZV9idWZfcHV0KHN0cnVjdCBlZGdlX2J1ZiAqZWIsIGNvbnN0IGNoYXIgKmJ1ZiwKKwl1bnNpZ25lZCBpbnQgY291bnQpOworc3RhdGljIHVuc2lnbmVkIGludCBlZGdlX2J1Zl9nZXQoc3RydWN0IGVkZ2VfYnVmICplYiwgY2hhciAqYnVmLAorCXVuc2lnbmVkIGludCBjb3VudCk7CisKKworc3RhdGljIGludCBUSVJlYWRWZW5kb3JSZXF1ZXN0U3luYyAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKKwkJCQlfX3U4CQlyZXF1ZXN0LAorCQkJCV9fdTE2CQl2YWx1ZSwKKwkJCQlfX3UxNgkJaW5kZXgsCisJCQkJdTggCQkqZGF0YSwKKwkJCQlpbnQJCXNpemUpCit7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyAoZGV2LAorCQkJCXVzYl9yY3ZjdHJscGlwZShkZXYsIDApLAorCQkJCXJlcXVlc3QsCisJCQkJKFVTQl9UWVBFX1ZFTkRPUiB8IAorCQkJCSBVU0JfUkVDSVBfREVWSUNFIHwgCisJCQkJIFVTQl9ESVJfSU4pLAorCQkJCXZhbHVlLAorCQkJCWluZGV4LAorCQkJCWRhdGEsCisJCQkJc2l6ZSwKKwkJCQkxMDAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKwlpZiAoc3RhdHVzICE9IHNpemUpIHsKKwkJZGJnICgiJXMgLSB3YW50ZWQgdG8gd3JpdGUgJWQsIGJ1dCBvbmx5IHdyb3RlICVkIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHNpemUsIHN0YXR1cyk7CisJCXJldHVybiAtRUNPTU07CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IFRJU2VuZFZlbmRvclJlcXVlc3RTeW5jIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAorCQkJCV9fdTgJCXJlcXVlc3QsCisJCQkJX191MTYJCXZhbHVlLAorCQkJCV9fdTE2CQlpbmRleCwKKwkJCQl1OCAJCSpkYXRhLAorCQkJCWludAkJc2l6ZSkKK3sKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnIChkZXYsCisJCQkJdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkJcmVxdWVzdCwKKwkJCQkoVVNCX1RZUEVfVkVORE9SIHwgCisJCQkJIFVTQl9SRUNJUF9ERVZJQ0UgfCAKKwkJCQkgVVNCX0RJUl9PVVQpLAorCQkJCXZhbHVlLAorCQkJCWluZGV4LAorCQkJCWRhdGEsCisJCQkJc2l6ZSwKKwkJCQkxMDAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKwlpZiAoc3RhdHVzICE9IHNpemUpIHsKKwkJZGJnICgiJXMgLSB3YW50ZWQgdG8gd3JpdGUgJWQsIGJ1dCBvbmx5IHdyb3RlICVkIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHNpemUsIHN0YXR1cyk7CisJCXJldHVybiAtRUNPTU07CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IFRJV3JpdGVDb21tYW5kU3luYyAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgX191OCBjb21tYW5kLAorCQkJCV9fdTggbW9kdWxlaWQsIF9fdTE2IHZhbHVlLCB1OCAqZGF0YSwKKwkJCQlpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gVElTZW5kVmVuZG9yUmVxdWVzdFN5bmMgKGRldiwKKwkJCQkJICBjb21tYW5kLAkgIAkJLy8gUmVxdWVzdAorCQkJCQkgIHZhbHVlLAkJCS8vIHdWYWx1ZSAKKwkJCQkJICBtb2R1bGVpZCwJCQkvLyB3SW5kZXgKKwkJCQkJICBkYXRhLAkJCQkvLyBUcmFuc2ZlckJ1ZmZlcgorCQkJCQkgIHNpemUpOwkJCS8vIFRyYW5zZmVyQnVmZmVyTGVuZ3RoCisKK30KKworLyogY2xlYXIgdHgvcnggYnVmZmVycyBhbmQgZmlmbyBpbiBUSSBVTVAgKi8KK3N0YXRpYyBpbnQgVElQdXJnZURhdGFTeW5jIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3UxNiBtYXNrKQoreworCWludCBwb3J0X251bWJlciA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3I7CisKKwlkYmcgKCIlcyAtIHBvcnQgJWQsIG1hc2sgJXgiLCBfX0ZVTkNUSU9OX18sIHBvcnRfbnVtYmVyLCBtYXNrKTsKKworCXJldHVybiBUSVdyaXRlQ29tbWFuZFN5bmMgKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCQlVTVBDX1BVUkdFX1BPUlQsCisJCQkJCShfX3U4KShVTVBNX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksCisJCQkJCW1hc2ssCisJCQkJCU5VTEwsCisJCQkJCTApOworfQorCisvKioKKyAqIFRJUmVhZERvd25sb2FkTWVtb3J5IC0gUmVhZCBlZGdlcG9ydCBtZW1vcnkgZnJvbSBUSSBjaGlwCisgKiBAZGV2OiB1c2IgZGV2aWNlIHBvaW50ZXIKKyAqIEBzdGFydF9hZGRyZXNzOiBEZXZpY2UgQ1BVIGFkZHJlc3MgYXQgd2hpY2ggdG8gcmVhZAorICogQGxlbmd0aDogTGVuZ3RoIG9mIGFib3ZlIGRhdGEKKyAqIEBhZGRyZXNzX3R5cGU6IENhbiByZWFkIGJvdGggWERBVEEgYW5kIEkyQworICogQGJ1ZmZlcjogcG9pbnRlciB0byBpbnB1dCBkYXRhIGJ1ZmZlcgorICovCitzdGF0aWMgaW50IFRJUmVhZERvd25sb2FkTWVtb3J5KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBzdGFydF9hZGRyZXNzLAorCQkJCWludCBsZW5ndGgsIF9fdTggYWRkcmVzc190eXBlLCBfX3U4ICpidWZmZXIpCit7CisJaW50IHN0YXR1cyA9IDA7CisJX191OCByZWFkX2xlbmd0aDsKKwlfX2JlMTYgYmVfc3RhcnRfYWRkcmVzczsKKwkKKwlkYmcgKCIlcyAtIEAgJXggZm9yICVkIiwgX19GVU5DVElPTl9fLCBzdGFydF9hZGRyZXNzLCBsZW5ndGgpOworCisJLyogUmVhZCBpbiBibG9ja3Mgb2YgNjQgYnl0ZXMKKwkgKiAoVEkgZmlybXdhcmUgY2FuJ3QgaGFuZGxlIG1vcmUgdGhhbiA2NCBieXRlIHJlYWRzKQorCSAqLworCXdoaWxlIChsZW5ndGgpIHsKKwkJaWYgKGxlbmd0aCA+IDY0KQorCQkJcmVhZF9sZW5ndGg9IDY0OworCQllbHNlCisJCQlyZWFkX2xlbmd0aCA9IChfX3U4KWxlbmd0aDsKKworCQlpZiAocmVhZF9sZW5ndGggPiAxKSB7CisJCQlkYmcgKCIlcyAtIEAgJXggZm9yICVkIiwgX19GVU5DVElPTl9fLCAKKwkJCSAgICAgc3RhcnRfYWRkcmVzcywgcmVhZF9sZW5ndGgpOworCQl9CisJCWJlX3N0YXJ0X2FkZHJlc3MgPSBjcHVfdG9fYmUxNiAoc3RhcnRfYWRkcmVzcyk7CisJCXN0YXR1cyA9IFRJUmVhZFZlbmRvclJlcXVlc3RTeW5jIChkZXYsCisJCQkJCQkgIFVNUENfTUVNT1JZX1JFQUQsCS8vIFJlcXVlc3QKKwkJCQkJCSAgKF9fdTE2KWFkZHJlc3NfdHlwZSwJLy8gd1ZhbHVlIChBZGRyZXNzIHR5cGUpCisJCQkJCQkgIChfX2ZvcmNlIF9fdTE2KWJlX3N0YXJ0X2FkZHJlc3MsCS8vIHdJbmRleCAoQWRkcmVzcyB0byByZWFkKQorCQkJCQkJICBidWZmZXIsCQkvLyBUcmFuc2ZlckJ1ZmZlcgorCQkJCQkJICByZWFkX2xlbmd0aCk7CS8vIFRyYW5zZmVyQnVmZmVyTGVuZ3RoCisKKwkJaWYgKHN0YXR1cykgeworCQkJZGJnICgiJXMgLSBFUlJPUiAleCIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKworCQlpZiAocmVhZF9sZW5ndGggPiAxKSB7CisJCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZkZXYtPmRldiwgX19GVU5DVElPTl9fLAorCQkJCQkgICAgICByZWFkX2xlbmd0aCwgYnVmZmVyKTsKKwkJfQorCisJCS8qIFVwZGF0ZSBwb2ludGVycy9sZW5ndGggKi8KKwkJc3RhcnRfYWRkcmVzcyArPSByZWFkX2xlbmd0aDsKKwkJYnVmZmVyICs9IHJlYWRfbGVuZ3RoOworCQlsZW5ndGggLT0gcmVhZF9sZW5ndGg7CisJfQorCQorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgVElSZWFkUmFtIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgc3RhcnRfYWRkcmVzcywgaW50IGxlbmd0aCwgX191OCAqYnVmZmVyKQoreworCXJldHVybiBUSVJlYWREb3dubG9hZE1lbW9yeSAoZGV2LAorCQkJCSAgICAgc3RhcnRfYWRkcmVzcywKKwkJCQkgICAgIGxlbmd0aCwKKwkJCQkgICAgIERUS19BRERSX1NQQUNFX1hEQVRBLAorCQkJCSAgICAgYnVmZmVyKTsKK30KKworLyogUmVhZCBlZGdlcG9ydCBtZW1vcnkgdG8gYSBnaXZlbiBibG9jayAqLworc3RhdGljIGludCBUSVJlYWRCb290TWVtb3J5IChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICpzZXJpYWwsIGludCBzdGFydF9hZGRyZXNzLCBpbnQgbGVuZ3RoLCBfX3U4ICogYnVmZmVyKQoreworCWludCBzdGF0dXMgPSAwOworCWludCBpOworCisJZm9yIChpPTA7IGk8IGxlbmd0aDsgaSsrKSB7CisJCXN0YXR1cyA9IFRJUmVhZFZlbmRvclJlcXVlc3RTeW5jIChzZXJpYWwtPnNlcmlhbC0+ZGV2LAorCQkJCQlVTVBDX01FTU9SWV9SRUFELAkJLy8gUmVxdWVzdAorCQkJCQlzZXJpYWwtPlRJX0kyQ19UeXBlLAkJLy8gd1ZhbHVlIChBZGRyZXNzIHR5cGUpCisJCQkJCShfX3UxNikoc3RhcnRfYWRkcmVzcytpKSwJLy8gd0luZGV4CisJCQkJCSZidWZmZXJbaV0sCQkJLy8gVHJhbnNmZXJCdWZmZXIKKwkJCQkJMHgwMSk7CQkJCS8vIFRyYW5zZmVyQnVmZmVyTGVuZ3RoCisJCWlmIChzdGF0dXMpIHsKKwkJCWRiZyAoIiVzIC0gRVJST1IgJXgiLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCQlyZXR1cm4gc3RhdHVzOworCQl9CisJfQorCisJZGJnICgiJXMgLSBzdGFydF9hZGRyZXNzID0gJXgsIGxlbmd0aCA9ICVkIiwgX19GVU5DVElPTl9fLCBzdGFydF9hZGRyZXNzLCBsZW5ndGgpOworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnNlcmlhbC0+c2VyaWFsLT5kZXYtPmRldiwgX19GVU5DVElPTl9fLCBsZW5ndGgsIGJ1ZmZlcik7CisKKwlzZXJpYWwtPlRpUmVhZEkyQyA9IDE7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBXcml0ZSBnaXZlbiBibG9jayB0byBUSSBFUFJPTSBtZW1vcnkgKi8KK3N0YXRpYyBpbnQgVElXcml0ZUJvb3RNZW1vcnkgKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKnNlcmlhbCwgaW50IHN0YXJ0X2FkZHJlc3MsIGludCBsZW5ndGgsIF9fdTggKmJ1ZmZlcikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlpbnQgaTsKKwlfX3U4IHRlbXA7CisKKwkvKiBNdXN0IGRvIGEgcmVhZCBiZWZvcmUgd3JpdGUgKi8KKwlpZiAoIXNlcmlhbC0+VGlSZWFkSTJDKSB7CisJCXN0YXR1cyA9IFRJUmVhZEJvb3RNZW1vcnkoc2VyaWFsLCAwLCAxLCAmdGVtcCk7CisJCWlmIChzdGF0dXMpCisJCQlyZXR1cm4gc3RhdHVzOworCX0KKworCWZvciAoaT0wOyBpIDwgbGVuZ3RoOyArK2kpIHsKKwkJc3RhdHVzID0gVElTZW5kVmVuZG9yUmVxdWVzdFN5bmMgKHNlcmlhbC0+c2VyaWFsLT5kZXYsCisJCQkJCQlVTVBDX01FTU9SWV9XUklURSwJCS8vIFJlcXVlc3QKKwkJCQkJCWJ1ZmZlcltpXSwJCQkvLyB3VmFsdWUKKwkJCQkJCShfX3UxNikoaStzdGFydF9hZGRyZXNzKSwJLy8gd0luZGV4CisJCQkJCQlOVUxMLAkJCQkvLyBUcmFuc2ZlckJ1ZmZlcgorCQkJCQkJMCk7CQkJCS8vIFRyYW5zZmVyQnVmZmVyTGVuZ3RoCisJCWlmIChzdGF0dXMpCisJCQlyZXR1cm4gc3RhdHVzOworCX0KKworICAJZGJnICgiJXMgLSBzdGFydF9zZGRyID0gJXgsIGxlbmd0aCA9ICVkIiwgX19GVU5DVElPTl9fLCBzdGFydF9hZGRyZXNzLCBsZW5ndGgpOworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnNlcmlhbC0+c2VyaWFsLT5kZXYtPmRldiwgX19GVU5DVElPTl9fLCBsZW5ndGgsIGJ1ZmZlcik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisKKy8qIFdyaXRlIGVkZ2Vwb3J0IEkyQyBtZW1vcnkgdG8gVEkgY2hpcAkqLworc3RhdGljIGludCBUSVdyaXRlRG93bmxvYWRJMkMgKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKnNlcmlhbCwgaW50IHN0YXJ0X2FkZHJlc3MsIGludCBsZW5ndGgsIF9fdTggYWRkcmVzc190eXBlLCBfX3U4ICpidWZmZXIpCit7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IHdyaXRlX2xlbmd0aDsKKwlfX2JlMTYgYmVfc3RhcnRfYWRkcmVzczsKKworCS8qIFdlIGNhbiBvbmx5IHNlbmQgYSBtYXhpbXVtIG9mIDEgYWxpZ25lZCBieXRlIHBhZ2UgYXQgYSB0aW1lICovCisJCisJLyogY2FsdWxhdGUgdGhlIG51bWJlciBvZiBieXRlcyBsZWZ0IGluIHRoZSBmaXJzdCBwYWdlICovCisJd3JpdGVfbGVuZ3RoID0gRVBST01fUEFHRV9TSVpFIC0gKHN0YXJ0X2FkZHJlc3MgJiAoRVBST01fUEFHRV9TSVpFIC0gMSkpOworCisJaWYgKHdyaXRlX2xlbmd0aCA+IGxlbmd0aCkKKwkJd3JpdGVfbGVuZ3RoID0gbGVuZ3RoOworCisJZGJnICgiJXMgLSBCeXRlc0luRmlyc3RQYWdlIEFkZHIgPSAleCwgbGVuZ3RoID0gJWQiLCBfX0ZVTkNUSU9OX18sIHN0YXJ0X2FkZHJlc3MsIHdyaXRlX2xlbmd0aCk7CisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCBfX0ZVTkNUSU9OX18sIHdyaXRlX2xlbmd0aCwgYnVmZmVyKTsKKworCS8qIFdyaXRlIGZpcnN0IHBhZ2UgKi8KKwliZV9zdGFydF9hZGRyZXNzID0gY3B1X3RvX2JlMTYgKHN0YXJ0X2FkZHJlc3MpOworCXN0YXR1cyA9IFRJU2VuZFZlbmRvclJlcXVlc3RTeW5jIChzZXJpYWwtPnNlcmlhbC0+ZGV2LAorCQkJCQlVTVBDX01FTU9SWV9XUklURSwJLy8gUmVxdWVzdAorCQkJCQkoX191MTYpYWRkcmVzc190eXBlLAkvLyB3VmFsdWUKKwkJCQkJKF9fZm9yY2UgX191MTYpYmVfc3RhcnRfYWRkcmVzcywJLy8gd0luZGV4CisJCQkJCWJ1ZmZlciwJCQkvLyBUcmFuc2ZlckJ1ZmZlcgorCQkJCQl3cml0ZV9sZW5ndGgpOworCWlmIChzdGF0dXMpIHsKKwkJZGJnICgiJXMgLSBFUlJPUiAlZCIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlsZW5ndGgJCS09IHdyaXRlX2xlbmd0aDsKKwlzdGFydF9hZGRyZXNzCSs9IHdyaXRlX2xlbmd0aDsKKwlidWZmZXIJCSs9IHdyaXRlX2xlbmd0aDsKKworCS8qIFdlIHNob3VsZCBiZSBhbGlnbmVkIG5vdyAtLSBjYW4gd3JpdGUgbWF4IHBhZ2Ugc2l6ZSBieXRlcyBhdCBhIHRpbWUgKi8KKwl3aGlsZSAobGVuZ3RoKSB7CisJCWlmIChsZW5ndGggPiBFUFJPTV9QQUdFX1NJWkUpCisJCQl3cml0ZV9sZW5ndGggPSBFUFJPTV9QQUdFX1NJWkU7CisJCWVsc2UKKwkJCXdyaXRlX2xlbmd0aCA9IGxlbmd0aDsKKworCQlkYmcgKCIlcyAtIFBhZ2UgV3JpdGUgQWRkciA9ICV4LCBsZW5ndGggPSAlZCIsIF9fRlVOQ1RJT05fXywgc3RhcnRfYWRkcmVzcywgd3JpdGVfbGVuZ3RoKTsKKwkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCBfX0ZVTkNUSU9OX18sIHdyaXRlX2xlbmd0aCwgYnVmZmVyKTsKKworCQkvKiBXcml0ZSBuZXh0IHBhZ2UgKi8KKwkJYmVfc3RhcnRfYWRkcmVzcyA9IGNwdV90b19iZTE2IChzdGFydF9hZGRyZXNzKTsKKwkJc3RhdHVzID0gVElTZW5kVmVuZG9yUmVxdWVzdFN5bmMgKHNlcmlhbC0+c2VyaWFsLT5kZXYsCisJCQkJCQlVTVBDX01FTU9SWV9XUklURSwJLy8gUmVxdWVzdAorCQkJCQkJKF9fdTE2KWFkZHJlc3NfdHlwZSwJLy8gd1ZhbHVlCisJCQkJCQkoX19mb3JjZSBfX3UxNiliZV9zdGFydF9hZGRyZXNzLAkvLyB3SW5kZXgKKwkJCQkJCWJ1ZmZlciwJICAJCS8vIFRyYW5zZmVyQnVmZmVyCisJCQkJCQl3cml0ZV9sZW5ndGgpOwkJLy8gVHJhbnNmZXJCdWZmZXJMZW5ndGgKKwkJaWYgKHN0YXR1cykgeworCQkJZGV2X2VyciAoJnNlcmlhbC0+c2VyaWFsLT5kZXYtPmRldiwgIiVzIC0gRVJST1IgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKwkJCisJCWxlbmd0aAkJLT0gd3JpdGVfbGVuZ3RoOworCQlzdGFydF9hZGRyZXNzCSs9IHdyaXRlX2xlbmd0aDsKKwkJYnVmZmVyCQkrPSB3cml0ZV9sZW5ndGg7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIEV4YW1pbmUgdGhlIFVNUCBETUEgcmVnaXN0ZXJzIGFuZCBMU1IKKyAqIAorICogQ2hlY2sgdGhlIE1TQml0IG9mIHRoZSBYIGFuZCBZIERNQSBieXRlIGNvdW50IHJlZ2lzdGVycy4KKyAqIEEgemVybyBpbiB0aGlzIGJpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgVFggRE1BIGJ1ZmZlcnMgYXJlIGVtcHR5CisgKiB0aGVuIGNoZWNrIHRoZSBUWCBFbXB0eSBiaXQgaW4gdGhlIFVBUlQuCisgKi8KK3N0YXRpYyBpbnQgVElJc1R4QWN0aXZlIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqcG9ydCkKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBvdXRfZW5kcG9pbnRfZGVzY19ibG9jayAqb2VkYjsKKwlfX3U4ICpsc3I7CisJaW50IGJ5dGVzX2xlZnQgPSAwOworCisJb2VkYiA9IGttYWxsb2MgKHNpemVvZiAoKiBvZWRiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvZWRiKSB7CisJCWRldl9lcnIgKCZwb3J0LT5wb3J0LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWxzciA9IGttYWxsb2MgKDEsIEdGUF9LRVJORUwpOwkvKiBTaWdoLCB0aGF0J3MgcmlnaHQsIGp1c3Qgb25lIGJ5dGUsCisJCQkJCSAgIGFzIG5vdCBhbGwgcGxhdGZvcm1zIGNhbiBkbyBETUEKKwkJCQkJICAgZnJvbSBzdGFjayAqLworCWlmICghbHNyKSB7CisJCWtmcmVlKG9lZGIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJLyogUmVhZCB0aGUgRE1BIENvdW50IFJlZ2lzdGVycyAqLworCXN0YXR1cyA9IFRJUmVhZFJhbSAocG9ydC0+cG9ydC0+c2VyaWFsLT5kZXYsCisJCQkgICAgcG9ydC0+ZG1hX2FkZHJlc3MsCisJCQkgICAgc2l6ZW9mKCAqb2VkYiksCisJCQkgICAgKHZvaWQgKilvZWRiKTsKKworCWlmIChzdGF0dXMpCisJCWdvdG8gZXhpdF9pc190eF9hY3RpdmU7CisKKwlkYmcgKCIlcyAtIFhCeXRlQ291bnQgICAgMHglWCIsIF9fRlVOQ1RJT05fXywgb2VkYi0+WEJ5dGVDb3VudCk7CisKKwkvKiBhbmQgdGhlIExTUiAqLworCXN0YXR1cyA9IFRJUmVhZFJhbSAocG9ydC0+cG9ydC0+c2VyaWFsLT5kZXYsIAorCQkJICAgIHBvcnQtPnVhcnRfYmFzZSArIFVNUE1FTV9PRkZTX1VBUlRfTFNSLAorCQkJICAgIDEsCisJCQkgICAgbHNyKTsKKworCWlmIChzdGF0dXMpCisJCWdvdG8gZXhpdF9pc190eF9hY3RpdmU7CisJZGJnICgiJXMgLSBMU1IgPSAweCVYIiwgX19GVU5DVElPTl9fLCAqbHNyKTsKKwkKKwkvKiBJZiBlaXRoZXIgYnVmZmVyIGhhcyBkYXRhIG9yIHdlIGFyZSB0cmFuc21pdHRpbmcgdGhlbiByZXR1cm4gVFJVRSAqLworCWlmICgob2VkYi0+WEJ5dGVDb3VudCAmIDB4ODAgKSAhPSAwICkKKwkJYnl0ZXNfbGVmdCArPSA2NDsKKworCWlmICgoKmxzciAmIFVNUF9VQVJUX0xTUl9UWF9NQVNLICkgPT0gMCApCisJCWJ5dGVzX2xlZnQgKz0gMTsKKworCS8qIFdlIHJldHVybiBOb3QgQWN0aXZlIGlmIHdlIGdldCBhbnkga2luZCBvZiBlcnJvciAqLworZXhpdF9pc190eF9hY3RpdmU6CisJZGJnICgiJXMgLSByZXR1cm4gJWQiLCBfX0ZVTkNUSU9OX18sIGJ5dGVzX2xlZnQgKTsKKworCWtmcmVlKGxzcik7CisJa2ZyZWUob2VkYik7CisJcmV0dXJuIGJ5dGVzX2xlZnQ7Cit9CisKK3N0YXRpYyB2b2lkIFRJQ2hhc2VQb3J0KHN0cnVjdCBlZGdlcG9ydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBsb25nIHRpbWVvdXQsIGludCBmbHVzaCkKK3sKKwlpbnQgYmF1ZF9yYXRlOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5wb3J0LT50dHk7CisJd2FpdF9xdWV1ZV90IHdhaXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghdGltZW91dCkKKwkJdGltZW91dCA9IChIWipFREdFX0NMT1NJTkdfV0FJVCkvMTAwOworCisJLyogd2FpdCBmb3IgZGF0YSB0byBkcmFpbiBmcm9tIHRoZSBidWZmZXIgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCBjdXJyZW50KTsKKwlhZGRfd2FpdF9xdWV1ZSgmdHR5LT53cml0ZV93YWl0LCAmd2FpdCk7CisJZm9yICg7OykgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlpZiAoZWRnZV9idWZfZGF0YV9hdmFpbChwb3J0LT5lcF9vdXRfYnVmKSA9PSAwCisJCXx8IHRpbWVvdXQgPT0gMCB8fCBzaWduYWxfcGVuZGluZyhjdXJyZW50KQorCQl8fCAhdXNiX2dldF9pbnRmZGF0YShwb3J0LT5wb3J0LT5zZXJpYWwtPmludGVyZmFjZSkpICAvKiBkaXNjb25uZWN0ICovCisJCQlicmVhazsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKwl9CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmdHR5LT53cml0ZV93YWl0LCAmd2FpdCk7CisJaWYgKGZsdXNoKQorCQllZGdlX2J1Zl9jbGVhcihwb3J0LT5lcF9vdXRfYnVmKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5lcF9sb2NrLCBmbGFncyk7CisKKwkvKiB3YWl0IGZvciBkYXRhIHRvIGRyYWluIGZyb20gdGhlIGRldmljZSAqLworCXRpbWVvdXQgKz0gamlmZmllczsKKwl3aGlsZSAoKGxvbmcpKGppZmZpZXMgLSB0aW1lb3V0KSA8IDAgJiYgIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpCisJJiYgdXNiX2dldF9pbnRmZGF0YShwb3J0LT5wb3J0LT5zZXJpYWwtPmludGVyZmFjZSkpIHsgIC8qIG5vdCBkaXNjb25uZWN0ZWQgKi8KKwkJaWYgKCFUSUlzVHhBY3RpdmUocG9ydCkpCisJCQlicmVhazsKKwkJbXNsZWVwKDEwKTsKKwl9CisKKwkvKiBkaXNjb25uZWN0ZWQgKi8KKwlpZiAoIXVzYl9nZXRfaW50ZmRhdGEocG9ydC0+cG9ydC0+c2VyaWFsLT5pbnRlcmZhY2UpKQorCQlyZXR1cm47CisKKwkvKiB3YWl0IG9uZSBtb3JlIGNoYXJhY3RlciB0aW1lLCBiYXNlZCBvbiBiYXVkIHJhdGUgKi8KKwkvKiAoVElJc1R4QWN0aXZlIGRvZXNuJ3Qgc2VlbSB0byB3YWl0IGZvciB0aGUgbGFzdCBieXRlKSAqLworCWlmICgoYmF1ZF9yYXRlPXBvcnQtPmJhdWRfcmF0ZSkgPT0gMCkKKwkJYmF1ZF9yYXRlID0gNTA7CisJbXNsZWVwKG1heCgxLCgxMDAwMCtiYXVkX3JhdGUtMSkvYmF1ZF9yYXRlKSk7Cit9CisKK3N0YXRpYyBpbnQgVElDaG9vc2VDb25maWd1cmF0aW9uIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQoreworCS8vIFRoZXJlIG1heSBiZSBtdWx0aXBsZSBjb25maWd1cmF0aW9ucyBvbiB0aGlzIGRldmljZSwgaW4gd2hpY2ggY2FzZQorCS8vIHdlIHdvdWxkIG5lZWQgdG8gcmVhZCBhbmQgcGFyc2UgYWxsIG9mIHRoZW0gdG8gZmluZCBvdXQgd2hpY2ggb25lCisJLy8gd2Ugd2FudC4gSG93ZXZlciwgd2UganVzdCBzdXBwb3J0IG9uZSBjb25maWcgYXQgdGhpcyBwb2ludCwKKwkvLyBjb25maWd1cmF0aW9uICMgMSwgd2hpY2ggaXMgQ29uZmlnIERlc2NyaXB0b3IgMC4KKworCWRiZyAoIiVzIC0gTnVtYmVyIG9mIEludGVyZmFjZXMgPSAlZCIsIF9fRlVOQ1RJT05fXywgZGV2LT5jb25maWctPmRlc2MuYk51bUludGVyZmFjZXMpOworCWRiZyAoIiVzIC0gTUFYIFBvd2VyICAgICAgICAgICAgPSAlZCIsIF9fRlVOQ1RJT05fXywgZGV2LT5jb25maWctPmRlc2MuYk1heFBvd2VyKjIpOworCisJaWYgKGRldi0+Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzICE9IDEpIHsKKwkJZGV2X2VyciAoJmRldi0+ZGV2LCAiJXMgLSBiTnVtSW50ZXJmYWNlcyBpcyBub3QgMSwgRVJST1IhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBUSVJlYWRSb20gKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKnNlcmlhbCwgaW50IHN0YXJ0X2FkZHJlc3MsIGludCBsZW5ndGgsIF9fdTggKmJ1ZmZlcikKK3sKKwlpbnQgc3RhdHVzOworCisJaWYgKHNlcmlhbC0+cHJvZHVjdF9pbmZvLlRpTW9kZSA9PSBUSV9NT0RFX0RPV05MT0FEKSB7CisJCXN0YXR1cyA9IFRJUmVhZERvd25sb2FkTWVtb3J5IChzZXJpYWwtPnNlcmlhbC0+ZGV2LAorCQkJCQkgICAgICAgc3RhcnRfYWRkcmVzcywKKwkJCQkJICAgICAgIGxlbmd0aCwKKwkJCQkJICAgICAgIHNlcmlhbC0+VElfSTJDX1R5cGUsCisJCQkJCSAgICAgICBidWZmZXIpOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IFRJUmVhZEJvb3RNZW1vcnkgKHNlcmlhbCwKKwkJCQkJICAgc3RhcnRfYWRkcmVzcywKKwkJCQkJICAgbGVuZ3RoLAorCQkJCQkgICBidWZmZXIpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgVElXcml0ZVJvbSAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqc2VyaWFsLCBpbnQgc3RhcnRfYWRkcmVzcywgaW50IGxlbmd0aCwgX191OCAqYnVmZmVyKQoreworCWlmIChzZXJpYWwtPnByb2R1Y3RfaW5mby5UaU1vZGUgPT0gVElfTU9ERV9CT09UKQorCQlyZXR1cm4gVElXcml0ZUJvb3RNZW1vcnkgKHNlcmlhbCwKKwkJCQkJICBzdGFydF9hZGRyZXNzLAorCQkJCQkgIGxlbmd0aCwKKwkJCQkJICBidWZmZXIpOworCisJaWYgKHNlcmlhbC0+cHJvZHVjdF9pbmZvLlRpTW9kZSA9PSBUSV9NT0RFX0RPV05MT0FEKQorCQlyZXR1cm4gVElXcml0ZURvd25sb2FkSTJDIChzZXJpYWwsCisJCQkJCSAgIHN0YXJ0X2FkZHJlc3MsCisJCQkJCSAgIGxlbmd0aCwKKwkJCQkJICAgc2VyaWFsLT5USV9JMkNfVHlwZSwKKwkJCQkJICAgYnVmZmVyKTsKKworCXJldHVybiAtRUlOVkFMOworfQorCisKKworLyogUmVhZCBhIGRlc2NyaXB0b3IgaGVhZGVyIGZyb20gSTJDIGJhc2VkIG9uIHR5cGUgKi8KK3N0YXRpYyBpbnQgVElHZXREZXNjcmlwdG9yQWRkcmVzcyAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqc2VyaWFsLCBpbnQgZGVzY190eXBlLCBzdHJ1Y3QgdGlfaTJjX2Rlc2MgKnJvbV9kZXNjKQoreworCWludCBzdGFydF9hZGRyZXNzOworCWludCBzdGF0dXM7CisKKwkvKiBTZWFyY2ggZm9yIHJlcXVlc3RlZCBkZXNjcmlwdG9yIGluIEkyQyAqLworCXN0YXJ0X2FkZHJlc3MgPSAyOworCWRvIHsKKwkJc3RhdHVzID0gVElSZWFkUm9tIChzZXJpYWwsCisJCQkJICAgc3RhcnRfYWRkcmVzcywKKwkJCQkgICBzaXplb2Yoc3RydWN0IHRpX2kyY19kZXNjKSwKKwkJCQkgICAoX191OCAqKXJvbV9kZXNjICk7CisJCWlmIChzdGF0dXMpCisJCQlyZXR1cm4gMDsKKworCQlpZiAocm9tX2Rlc2MtPlR5cGUgPT0gZGVzY190eXBlKQorCQkJcmV0dXJuIHN0YXJ0X2FkZHJlc3M7CisKKwkJc3RhcnRfYWRkcmVzcyA9IHN0YXJ0X2FkZHJlc3MgKyBzaXplb2Yoc3RydWN0IHRpX2kyY19kZXNjKSArICByb21fZGVzYy0+U2l6ZTsKKworCX0gd2hpbGUgKChzdGFydF9hZGRyZXNzIDwgVElfTUFYX0kyQ19TSVpFKSAmJiByb21fZGVzYy0+VHlwZSk7CisJCisJcmV0dXJuIDA7Cit9CisKKy8qIFZhbGlkYXRlIGRlc2NyaXB0b3IgY2hlY2tzdW0gKi8KK3N0YXRpYyBpbnQgVmFsaWRDaGVja3N1bShzdHJ1Y3QgdGlfaTJjX2Rlc2MgKnJvbV9kZXNjLCBfX3U4ICpidWZmZXIpCit7CisJX191MTYgaTsKKwlfX3U4IGNzID0gMDsKKworCWZvciAoaT0wOyBpIDwgcm9tX2Rlc2MtPlNpemU7IGkrKykgeworCQljcyA9IChfX3U4KShjcyArIGJ1ZmZlcltpXSk7CisJfQorCWlmIChjcyAhPSByb21fZGVzYy0+Q2hlY2tTdW0pIHsKKwkJZGJnICgiJXMgLSBNaXNtYXRjaCAleCAtICV4IiwgX19GVU5DVElPTl9fLCByb21fZGVzYy0+Q2hlY2tTdW0sIGNzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisvKiBNYWtlIHN1cmUgdGhhdCB0aGUgSTJDIGltYWdlIGlzIGdvb2QgKi8KK3N0YXRpYyBpbnQgVGlWYWxpZGF0ZUkyY0ltYWdlIChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnNlcmlhbC0+c2VyaWFsLT5kZXYtPmRldjsKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgdGlfaTJjX2Rlc2MgKnJvbV9kZXNjOworCWludCBzdGFydF9hZGRyZXNzID0gMjsKKwlfX3U4ICpidWZmZXI7CisJX191MTYgdHR5cGU7CisKKwlyb21fZGVzYyA9IGttYWxsb2MgKHNpemVvZiAoKnJvbV9kZXNjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyb21fZGVzYykgeworCQlkZXZfZXJyIChkZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlidWZmZXIgPSBrbWFsbG9jIChUSV9NQVhfSTJDX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIgKGRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeSB3aGVuIGFsbG9jYXRpbmcgYnVmZmVyXG4iLCBfX0ZVTkNUSU9OX18pOworCQlrZnJlZSAocm9tX2Rlc2MpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvLyBSZWFkIHRoZSBmaXJzdCBieXRlIChTaWduYXR1cmUwKSBtdXN0IGJlIDB4NTIgb3IgMHgxMAorCXN0YXR1cyA9IFRJUmVhZFJvbSAoc2VyaWFsLCAwLCAxLCBidWZmZXIpOworCWlmIChzdGF0dXMpCisJCWdvdG8gRXhpdFRpVmFsaWRhdGVJMmNJbWFnZTsgCisKKwlpZiAoKmJ1ZmZlciAhPSBVTVA1MTUyICYmICpidWZmZXIgIT0gVU1QMzQxMCkgeworCQlkZXZfZXJyIChkZXYsICIlcyAtIGludmFsaWQgYnVmZmVyIHNpZ25hdHVyZVxuIiwgX19GVU5DVElPTl9fKTsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBFeGl0VGlWYWxpZGF0ZUkyY0ltYWdlOworCX0KKworCWRvIHsKKwkJLy8gVmFsaWRhdGUgdGhlIEkyQworCQlzdGF0dXMgPSBUSVJlYWRSb20gKHNlcmlhbCwKKwkJCQlzdGFydF9hZGRyZXNzLAorCQkJCXNpemVvZihzdHJ1Y3QgdGlfaTJjX2Rlc2MpLAorCQkJCShfX3U4ICopcm9tX2Rlc2MpOworCQlpZiAoc3RhdHVzKQorCQkJYnJlYWs7CisKKwkJaWYgKChzdGFydF9hZGRyZXNzICsgc2l6ZW9mKHN0cnVjdCB0aV9pMmNfZGVzYykgKyByb21fZGVzYy0+U2l6ZSkgPiBUSV9NQVhfSTJDX1NJWkUpIHsKKwkJCXN0YXR1cyA9IC1FTk9ERVY7CisJCQlkYmcgKCIlcyAtIHN0cnVjdHVyZSB0b28gYmlnLCBlcnJvcmluZyBvdXQuIiwgX19GVU5DVElPTl9fKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZGJnICgiJXMgVHlwZSA9IDB4JXgiLCBfX0ZVTkNUSU9OX18sIHJvbV9kZXNjLT5UeXBlKTsKKworCQkvLyBTa2lwIHR5cGUgMiByZWNvcmQKKwkJdHR5cGUgPSByb21fZGVzYy0+VHlwZSAmIDB4MGY7CisJCWlmICggdHR5cGUgIT0gSTJDX0RFU0NfVFlQRV9GSVJNV0FSRV9CQVNJQworCQkJJiYgdHR5cGUgIT0gSTJDX0RFU0NfVFlQRV9GSVJNV0FSRV9BVVRPICkgeworCQkJLy8gUmVhZCB0aGUgZGVzY3JpcHRvciBkYXRhCisJCQlzdGF0dXMgPSBUSVJlYWRSb20oc2VyaWFsLAorCQkJCQkJc3RhcnRfYWRkcmVzcytzaXplb2Yoc3RydWN0IHRpX2kyY19kZXNjKSwKKwkJCQkJCXJvbV9kZXNjLT5TaXplLAorCQkJCQkJYnVmZmVyKTsKKwkJCWlmIChzdGF0dXMpCisJCQkJYnJlYWs7CisKKwkJCXN0YXR1cyA9IFZhbGlkQ2hlY2tzdW0ocm9tX2Rlc2MsIGJ1ZmZlcik7CisJCQlpZiAoc3RhdHVzKQorCQkJCWJyZWFrOworCQl9CisJCXN0YXJ0X2FkZHJlc3MgPSBzdGFydF9hZGRyZXNzICsgc2l6ZW9mKHN0cnVjdCB0aV9pMmNfZGVzYykgKyByb21fZGVzYy0+U2l6ZTsKKworCX0gd2hpbGUgKChyb21fZGVzYy0+VHlwZSAhPSBJMkNfREVTQ19UWVBFX0lPTikgJiYgKHN0YXJ0X2FkZHJlc3MgPCBUSV9NQVhfSTJDX1NJWkUpKTsKKworCWlmICgocm9tX2Rlc2MtPlR5cGUgIT0gSTJDX0RFU0NfVFlQRV9JT04pIHx8IChzdGFydF9hZGRyZXNzID4gVElfTUFYX0kyQ19TSVpFKSkKKwkJc3RhdHVzID0gLUVOT0RFVjsKKworRXhpdFRpVmFsaWRhdGVJMmNJbWFnZToJCisJa2ZyZWUgKGJ1ZmZlcik7CisJa2ZyZWUgKHJvbV9kZXNjKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IFRJUmVhZE1hbnVmRGVzY3JpcHRvciAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqc2VyaWFsLCBfX3U4ICpidWZmZXIpCit7CisJaW50IHN0YXR1czsKKwlpbnQgc3RhcnRfYWRkcmVzczsKKwlzdHJ1Y3QgdGlfaTJjX2Rlc2MgKnJvbV9kZXNjOworCXN0cnVjdCBlZGdlX3RpX21hbnVmX2Rlc2NyaXB0b3IgKmRlc2M7CisKKwlyb21fZGVzYyA9IGttYWxsb2MgKHNpemVvZiAoKnJvbV9kZXNjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyb21fZGVzYykgeworCQlkZXZfZXJyICgmc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJc3RhcnRfYWRkcmVzcyA9IFRJR2V0RGVzY3JpcHRvckFkZHJlc3MgKHNlcmlhbCwgSTJDX0RFU0NfVFlQRV9JT04sIHJvbV9kZXNjKTsKKworCWlmICghc3RhcnRfYWRkcmVzcykgeworCQlkYmcgKCIlcyAtIEVkZ2UgRGVzY3JpcHRvciBub3QgZm91bmQgaW4gSTJDIiwgX19GVU5DVElPTl9fKTsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBleGl0OworCX0KKworCS8vIFJlYWQgdGhlIGRlc2NyaXB0b3IgZGF0YQorCXN0YXR1cyA9IFRJUmVhZFJvbSAoc2VyaWFsLAorCQkJCXN0YXJ0X2FkZHJlc3Mrc2l6ZW9mKHN0cnVjdCB0aV9pMmNfZGVzYyksCisJCQkJcm9tX2Rlc2MtPlNpemUsCisJCQkJYnVmZmVyKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGV4aXQ7CisJCisJc3RhdHVzID0gVmFsaWRDaGVja3N1bShyb21fZGVzYywgYnVmZmVyKTsKKwkKKwlkZXNjID0gKHN0cnVjdCBlZGdlX3RpX21hbnVmX2Rlc2NyaXB0b3IgKilidWZmZXI7CisJZGJnICggIiVzIC0gSW9uQ29uZmlnICAgICAgMHgleCIsIF9fRlVOQ1RJT05fXywgZGVzYy0+SW9uQ29uZmlnIAkpOworCWRiZyAoICIlcyAtIFZlcnNpb24gICAgICAgICAgJWQiLCBfX0ZVTkNUSU9OX18sIGRlc2MtPlZlcnNpb24JICAJKTsKKwlkYmcgKCAiJXMgLSBDcHUvQm9hcmQgICAgICAweCV4IiwgX19GVU5DVElPTl9fLCBkZXNjLT5DcHVSZXZfQm9hcmRSZXYJKTsKKwlkYmcgKCAiJXMgLSBOdW1Qb3J0cyAgICAgICAgICVkIiwgX19GVU5DVElPTl9fLCBkZXNjLT5OdW1Qb3J0cyAgCSk7CQorCWRiZyAoICIlcyAtIE51bVZpcnR1YWxQb3J0cyAgJWQiLCBfX0ZVTkNUSU9OX18sIGRlc2MtPk51bVZpcnR1YWxQb3J0cwkpOwkKKwlkYmcgKCAiJXMgLSBUb3RhbFBvcnRzICAgICAgICVkIiwgX19GVU5DVElPTl9fLCBkZXNjLT5Ub3RhbFBvcnRzICAJKTsJCisKK2V4aXQ6CisJa2ZyZWUgKHJvbV9kZXNjKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBCdWlsZCBmaXJtd2FyZSBoZWFkZXIgdXNlZCBmb3IgZmlybXdhcmUgdXBkYXRlICovCitzdGF0aWMgaW50IEJ1aWxkSTJDRmlybXdhcmVIZWFkZXIgKF9fdTggKmhlYWRlciwgc3RydWN0IGRldmljZSAqZGV2KQoreworCV9fdTggKmJ1ZmZlcjsKKwlpbnQgYnVmZmVyX3NpemU7CisJaW50IGk7CisJX191OCBjcyA9IDA7CisJc3RydWN0IHRpX2kyY19kZXNjICppMmNfaGVhZGVyOworCXN0cnVjdCB0aV9pMmNfaW1hZ2VfaGVhZGVyICppbWdfaGVhZGVyOworCXN0cnVjdCB0aV9pMmNfZmlybXdhcmVfcmVjICpmaXJtd2FyZV9yZWM7CisKKwkvLyBJbiBvcmRlciB0byB1cGRhdGUgdGhlIEkyQyBmaXJtd2FyZSB3ZSBtdXN0IGNoYW5nZSB0aGUgdHlwZSAyIHJlY29yZCB0byB0eXBlIDB4RjIuCisJLy8gVGhpcyB3aWxsIGZvcmNlIHRoZSBVTVAgdG8gY29tZSB1cCBpbiBCb290IE1vZGUuICBUaGVuIHdoaWxlIGluIGJvb3QgbW9kZSwgdGhlIGRyaXZlciAKKwkvLyB3aWxsIGRvd25sb2FkIHRoZSBsYXRlc3QgZmlybXdhcmUgKHBhZGRlZCB0byAxNS41aykgaW50byB0aGUgVU1QIHJhbS4gCisJLy8gQW5kIGZpbmFsbHkgd2hlbiB0aGUgZGV2aWNlIGNvbWVzIGJhY2sgdXAgaW4gZG93bmxvYWQgbW9kZSB0aGUgZHJpdmVyIHdpbGwgY2F1c2UgCisJLy8gdGhlIG5ldyBmaXJtd2FyZSB0byBiZSBjb3BpZWQgZnJvbSB0aGUgVU1QIFJhbSB0byBJMkMgYW5kIHRoZSBmaXJtd2FyZSB3aWxsIHVwZGF0ZQorCS8vIHRoZSByZWNvcmQgdHlwZSBmcm9tIDB4ZjIgdG8gMHgwMi4KKwkKKwkvLyBBbGxvY2F0ZSBhIDE1LjVrIGJ1ZmZlciArIDIgYnl0ZXMgZm9yIHZlcnNpb24gbnVtYmVyIChGaXJtd2FyZSBSZWNvcmQpCisJYnVmZmVyX3NpemUgPSAoKCgxMDI0ICogMTYpIC0gNTEyICkrIHNpemVvZihzdHJ1Y3QgdGlfaTJjX2Zpcm13YXJlX3JlYykpOworCisJYnVmZmVyID0ga21hbGxvYyAoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIgKGRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCQorCS8vIFNldCBlbnRpcmUgaW1hZ2Ugb2YgMHhmZnMKKwltZW1zZXQgKGJ1ZmZlciwgMHhmZiwgYnVmZmVyX3NpemUpOworCisJLy8gQ29weSB2ZXJzaW9uIG51bWJlciBpbnRvIGZpcm13YXJlIHJlY29yZAorCWZpcm13YXJlX3JlYyA9IChzdHJ1Y3QgdGlfaTJjX2Zpcm13YXJlX3JlYyAqKWJ1ZmZlcjsKKworCWZpcm13YXJlX3JlYy0+VmVyX01ham9yCT0gT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uLk1ham9yVmVyc2lvbjsKKwlmaXJtd2FyZV9yZWMtPlZlcl9NaW5vcgk9IE9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbi5NaW5vclZlcnNpb247CisKKwkvLyBQb2ludGVyIHRvIGZ3X2Rvd24gbWVtb3J5IGltYWdlCisJaW1nX2hlYWRlciA9IChzdHJ1Y3QgdGlfaTJjX2ltYWdlX2hlYWRlciAqKSZQYWdhYmxlT3BlcmF0aW9uYWxDb2RlSW1hZ2VbMF07CisKKwltZW1jcHkgKGJ1ZmZlciArIHNpemVvZihzdHJ1Y3QgdGlfaTJjX2Zpcm13YXJlX3JlYyksCisJCSZQYWdhYmxlT3BlcmF0aW9uYWxDb2RlSW1hZ2Vbc2l6ZW9mKHN0cnVjdCB0aV9pMmNfaW1hZ2VfaGVhZGVyKV0sCisJCWxlMTZfdG9fY3B1KGltZ19oZWFkZXItPkxlbmd0aCkpOworCisJZm9yIChpPTA7IGkgPCBidWZmZXJfc2l6ZTsgaSsrKSB7CisJCWNzID0gKF9fdTgpKGNzICsgYnVmZmVyW2ldKTsKKwl9CisKKwlrZnJlZSAoYnVmZmVyKTsKKworCS8vIEJ1aWxkIG5ldyBoZWFkZXIKKwlpMmNfaGVhZGVyID0gIChzdHJ1Y3QgdGlfaTJjX2Rlc2MgKiloZWFkZXI7CisJZmlybXdhcmVfcmVjID0gIChzdHJ1Y3QgdGlfaTJjX2Zpcm13YXJlX3JlYyopaTJjX2hlYWRlci0+RGF0YTsKKwkKKwlpMmNfaGVhZGVyLT5UeXBlCT0gSTJDX0RFU0NfVFlQRV9GSVJNV0FSRV9CTEFOSzsKKwlpMmNfaGVhZGVyLT5TaXplCT0gKF9fdTE2KWJ1ZmZlcl9zaXplOworCWkyY19oZWFkZXItPkNoZWNrU3VtCT0gY3M7CisJZmlybXdhcmVfcmVjLT5WZXJfTWFqb3IJPSBPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb24uTWFqb3JWZXJzaW9uOworCWZpcm13YXJlX3JlYy0+VmVyX01pbm9yCT0gT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uLk1pbm9yVmVyc2lvbjsKKworCXJldHVybiAwOworfQorCisvKiBUcnkgdG8gZmlndXJlIG91dCB3aGF0IHR5cGUgb2YgSTJjIHdlIGhhdmUgKi8KK3N0YXRpYyBpbnQgVElHZXRJMmNUeXBlSW5Cb290TW9kZSAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqc2VyaWFsKQoreworCWludCBzdGF0dXM7CisJX191OCBkYXRhOworCQkKKwkvLyBUcnkgdG8gcmVhZCB0eXBlIDIKKwlzdGF0dXMgPSBUSVJlYWRWZW5kb3JSZXF1ZXN0U3luYyAoc2VyaWFsLT5zZXJpYWwtPmRldiwKKwkJCQkJVU1QQ19NRU1PUllfUkVBRCwJCS8vIFJlcXVlc3QKKwkJCQkJRFRLX0FERFJfU1BBQ0VfSTJDX1RZUEVfSUksCS8vIHdWYWx1ZSAoQWRkcmVzcyB0eXBlKQorCQkJCQkwLAkJIAkJLy8gd0luZGV4CisJCQkJCSZkYXRhLAkJCQkvLyBUcmFuc2ZlckJ1ZmZlcgorCQkJCQkweDAxKTsJCQkJLy8gVHJhbnNmZXJCdWZmZXJMZW5ndGgKKwlpZiAoc3RhdHVzKQorCQlkYmcgKCIlcyAtIHJlYWQgMiBzdGF0dXMgZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwllbHNlCisJCWRiZyAoIiVzIC0gcmVhZCAyIGRhdGEgPSAweCV4IiwgX19GVU5DVElPTl9fLCBkYXRhKTsKKwlpZiAoKCFzdGF0dXMpICYmIChkYXRhID09IFVNUDUxNTIgfHwgZGF0YSA9PSBVTVAzNDEwKSkgeworCQlkYmcgKCIlcyAtIFJPTV9UWVBFX0lJIiwgX19GVU5DVElPTl9fKTsKKwkJc2VyaWFsLT5USV9JMkNfVHlwZSA9IERUS19BRERSX1NQQUNFX0kyQ19UWVBFX0lJOworCQlyZXR1cm4gMDsKKwl9CisKKwkvLyBUcnkgdG8gcmVhZCB0eXBlIDMKKwlzdGF0dXMgPSBUSVJlYWRWZW5kb3JSZXF1ZXN0U3luYyAoc2VyaWFsLT5zZXJpYWwtPmRldiwKKwkJCQkJVU1QQ19NRU1PUllfUkVBRCwJCS8vIFJlcXVlc3QKKwkJCQkJRFRLX0FERFJfU1BBQ0VfSTJDX1RZUEVfSUlJLAkvLyB3VmFsdWUgKEFkZHJlc3MgdHlwZSkKKwkJCQkJMCwJCQkJLy8gd0luZGV4CisJCQkJCSZkYXRhLAkJCQkvLyBUcmFuc2ZlckJ1ZmZlcgorCQkJCQkweDAxKTsJCQkJLy8gVHJhbnNmZXJCdWZmZXJMZW5ndGgKKwlpZiAoc3RhdHVzKQorCQlkYmcgKCIlcyAtIHJlYWQgMyBzdGF0dXMgZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwllbHNlCisJCWRiZyAoIiVzIC0gcmVhZCAyIGRhdGEgPSAweCV4IiwgX19GVU5DVElPTl9fLCBkYXRhKTsKKwlpZiAoKCFzdGF0dXMpICYmIChkYXRhID09IFVNUDUxNTIgfHwgZGF0YSA9PSBVTVAzNDEwKSkgeworCQlkYmcgKCIlcyAtIFJPTV9UWVBFX0lJSSIsIF9fRlVOQ1RJT05fXyk7CisJCXNlcmlhbC0+VElfSTJDX1R5cGUgPSBEVEtfQUREUl9TUEFDRV9JMkNfVFlQRV9JSUk7CisJCXJldHVybiAwOworCX0KKworCWRiZyAoIiVzIC0gVW5rbm93biIsIF9fRlVOQ1RJT05fXyk7CisJc2VyaWFsLT5USV9JMkNfVHlwZSA9IERUS19BRERSX1NQQUNFX0kyQ19UWVBFX0lJOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50IFRJU2VuZEJ1bGtUcmFuc2ZlclN5bmMgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHZvaWQgKmJ1ZmZlciwgaW50IGxlbmd0aCwgaW50ICpudW1fc2VudCkKK3sKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gdXNiX2J1bGtfbXNnIChzZXJpYWwtPmRldiwKKwkJCQl1c2Jfc25kYnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQkJCQlzZXJpYWwtPnBvcnRbMF0tPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQkJYnVmZmVyLAorCQkJCWxlbmd0aCwKKwkJCQludW1fc2VudCwKKwkJCQkxMDAwKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBEb3dubG9hZCBnaXZlbiBmaXJtd2FyZSBpbWFnZSB0byB0aGUgZGV2aWNlIChJTiBCT09UIE1PREUpICovCitzdGF0aWMgaW50IFRJRG93bmxvYWRDb2RlSW1hZ2UgKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKnNlcmlhbCwgX191OCAqaW1hZ2UsIGludCBpbWFnZV9sZW5ndGgpCit7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IHBvczsKKwlpbnQgdHJhbnNmZXI7CisJaW50IGRvbmU7CisKKwkvLyBUcmFuc2ZlciBmaXJtd2FyZSBpbWFnZQorCWZvciAocG9zID0gMDsgcG9zIDwgaW1hZ2VfbGVuZ3RoOyApIHsKKwkJLy8gUmVhZCB0aGUgbmV4dCBidWZmZXIgZnJvbSBmaWxlCisJCXRyYW5zZmVyID0gaW1hZ2VfbGVuZ3RoIC0gcG9zOworCQlpZiAodHJhbnNmZXIgPiBFREdFX0ZXX0JVTEtfTUFYX1BBQ0tFVF9TSVpFKQorCQkJdHJhbnNmZXIgPSBFREdFX0ZXX0JVTEtfTUFYX1BBQ0tFVF9TSVpFOworCisJCS8vIFRyYW5zZmVyIGRhdGEKKwkJc3RhdHVzID0gVElTZW5kQnVsa1RyYW5zZmVyU3luYyAoc2VyaWFsLT5zZXJpYWwsICZpbWFnZVtwb3NdLCB0cmFuc2ZlciwgJmRvbmUpOworCQlpZiAoc3RhdHVzKQorCQkJYnJlYWs7CisJCS8vIEFkdmFuY2UgYnVmZmVyIHBvaW50ZXIKKwkJcG9zICs9IGRvbmU7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLy8gRklYTUUhISEKK3N0YXRpYyBpbnQgVElDb25maWd1cmVCb290RGV2aWNlIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQoreworCXJldHVybiAwOworfQorCisvKioKKyAqIERvd25sb2FkVElGaXJtd2FyZSAtIERvd25sb2FkIHJ1bi10aW1lIG9wZXJhdGluZyBmaXJtd2FyZSB0byB0aGUgVEk1MDUyCisgKiAKKyAqIFRoaXMgcm91dGluZSBkb3dubG9hZHMgdGhlIG1haW4gb3BlcmF0aW5nIGNvZGUgaW50byB0aGUgVEk1MDUyLCB1c2luZyB0aGUKKyAqIGJvb3QgY29kZSBhbHJlYWR5IGJ1cm5lZCBpbnRvIEUyUFJPTSBvciBST00uCisgKi8KK3N0YXRpYyBpbnQgVElEb3dubG9hZEZpcm13YXJlIChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnNlcmlhbC0+c2VyaWFsLT5kZXYtPmRldjsKKwlpbnQgc3RhdHVzID0gMDsKKwlpbnQgc3RhcnRfYWRkcmVzczsKKwlzdHJ1Y3QgZWRnZV90aV9tYW51Zl9kZXNjcmlwdG9yICp0aV9tYW51Zl9kZXNjOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKmludGVyZmFjZTsKKwlpbnQgZG93bmxvYWRfY3VyX3ZlcjsKKwlpbnQgZG93bmxvYWRfbmV3X3ZlcjsKKworCS8qIFRoaXMgcm91dGluZSBpcyBlbnRlcmVkIGJ5IGJvdGggdGhlIEJPT1QgbW9kZSBhbmQgdGhlIERvd25sb2FkIG1vZGUKKwkgKiBXZSBjYW4gZGV0ZXJtaW5lIHdoaWNoIGNvZGUgaXMgcnVubmluZyBieSB0aGUgcmVhZGluZyB0aGUgY29uZmlnCisJICogZGVzY3JpcHRvciBhbmQgaWYgd2UgaGF2ZSBvbmx5IG9uZSBidWxrIHBpcGUgaXQgaXMgaW4gYm9vdCBtb2RlCisJICovCisJc2VyaWFsLT5wcm9kdWN0X2luZm8uaGFyZHdhcmVfdHlwZSA9IEhBUkRXQVJFX1RZUEVfVElVTVA7CisKKwkvKiBEZWZhdWx0IHRvIHR5cGUgMiBpMmMgKi8KKwlzZXJpYWwtPlRJX0kyQ19UeXBlID0gRFRLX0FERFJfU1BBQ0VfSTJDX1RZUEVfSUk7CisKKwlzdGF0dXMgPSBUSUNob29zZUNvbmZpZ3VyYXRpb24gKHNlcmlhbC0+c2VyaWFsLT5kZXYpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlpbnRlcmZhY2UgPSAmc2VyaWFsLT5zZXJpYWwtPmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2M7CisJaWYgKCFpbnRlcmZhY2UpIHsKKwkJZGV2X2VyciAoZGV2LCAiJXMgLSBubyBpbnRlcmZhY2Ugc2V0LCBlcnJvciFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8vIFNldHVwIGluaXRpYWwgbW9kZSAtLSB0aGUgZGVmYXVsdCBtb2RlIDAgaXMgVElfTU9ERV9DT05GSUdVUklORworCS8vIGlmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBlbmRwb2ludCB3ZSBhcmUgZGVmaW5pdGVseSBpbiBkb3dubG9hZCBtb2RlCisJaWYgKGludGVyZmFjZS0+Yk51bUVuZHBvaW50cyA+IDEpCisJCXNlcmlhbC0+cHJvZHVjdF9pbmZvLlRpTW9kZSA9IFRJX01PREVfRE9XTkxPQUQ7CisJZWxzZQorCQkvLyBPdGhlcndpc2Ugd2Ugd2lsbCByZW1haW4gaW4gY29uZmlndXJpbmcgbW9kZQorCQlzZXJpYWwtPnByb2R1Y3RfaW5mby5UaU1vZGUgPSBUSV9NT0RFX0NPTkZJR1VSSU5HOworCisJLy8gU2F2ZSBEb3dubG9hZCBWZXJzaW9uIE51bWJlcgorCU9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbi5NYWpvclZlcnNpb24gPSBQYWdhYmxlT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uLk1ham9yVmVyc2lvbjsKKwlPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb24uTWlub3JWZXJzaW9uID0gUGFnYWJsZU9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbi5NaW5vclZlcnNpb247CisJT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uLkJ1aWxkTnVtYmVyCSA9IFBhZ2FibGVPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb24uQnVpbGROdW1iZXI7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogRG93bmxvYWQgTW9kZSAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlpZiAoc2VyaWFsLT5wcm9kdWN0X2luZm8uVGlNb2RlID09IFRJX01PREVfRE9XTkxPQUQpIHsKKwkJc3RydWN0IHRpX2kyY19kZXNjICpyb21fZGVzYzsKKworCQlkYmcgKCIlcyAtIDw8PDw8PDw8PDw8PDw8PFJVTk5JTkcgSU4gRE9XTkxPQUQgTU9ERT4+Pj4+Pj4+Pj4iLCBfX0ZVTkNUSU9OX18pOworCisJCXN0YXR1cyA9IFRpVmFsaWRhdGVJMmNJbWFnZSAoc2VyaWFsKTsKKwkJaWYgKHN0YXR1cykgeworCQkJZGJnICgiJXMgLSA8PDw8PDw8PDw8PDw8PDxET1dOTE9BRCBNT0RFIC0tIEJBRCBJMkMgPj4+Pj4+Pj4+PiIsCisJCQkgICAgIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gc3RhdHVzOworCQl9CisJCQorCQkvKiBWYWxpZGF0ZSBIYXJkd2FyZSB2ZXJzaW9uIG51bWJlcgorCQkgKiBSZWFkIE1hbnVmYWN0dXJpbmcgRGVzY3JpcHRvciBmcm9tIFRJIEJhc2VkIEVkZ2Vwb3J0CisJCSAqLworCQl0aV9tYW51Zl9kZXNjID0ga21hbGxvYyAoc2l6ZW9mICgqdGlfbWFudWZfZGVzYyksIEdGUF9LRVJORUwpOworCQlpZiAoIXRpX21hbnVmX2Rlc2MpIHsKKwkJCWRldl9lcnIgKGRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlzdGF0dXMgPSBUSVJlYWRNYW51ZkRlc2NyaXB0b3IgKHNlcmlhbCwgKF9fdTggKil0aV9tYW51Zl9kZXNjKTsKKwkJaWYgKHN0YXR1cykgeworCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCisJCS8vIENoZWNrIHZlcnNpb24gbnVtYmVyIG9mIElPTiBkZXNjcmlwdG9yCisJCWlmICghaWdub3JlX2NwdV9yZXYgJiYgVElfR0VUX0NQVV9SRVZJU0lPTih0aV9tYW51Zl9kZXNjLT5DcHVSZXZfQm9hcmRSZXYpIDwgMikgeworCQkJZGJnICggIiVzIC0gV3JvbmcgQ1BVIFJldiAlZCAoTXVzdCBiZSAyKSIsIF9fRlVOQ1RJT05fXywgCisJCQkgICAgIFRJX0dFVF9DUFVfUkVWSVNJT04odGlfbWFudWZfZGVzYy0+Q3B1UmV2X0JvYXJkUmV2KSk7CisJCQlrZnJlZSAodGlfbWFudWZfZGVzYyk7CisJCSAgIAlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXJvbV9kZXNjID0ga21hbGxvYyAoc2l6ZW9mICgqcm9tX2Rlc2MpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFyb21fZGVzYykgeworCQkJZGV2X2VyciAoZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5LlxuIiwgX19GVU5DVElPTl9fKTsKKwkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJLy8gU2VhcmNoIGZvciB0eXBlIDIgcmVjb3JkIChmaXJtd2FyZSByZWNvcmQpCisJCWlmICgoc3RhcnRfYWRkcmVzcyA9IFRJR2V0RGVzY3JpcHRvckFkZHJlc3MgKHNlcmlhbCwgSTJDX0RFU0NfVFlQRV9GSVJNV0FSRV9CQVNJQywgcm9tX2Rlc2MpKSAhPSAwKSB7CisJCQlzdHJ1Y3QgdGlfaTJjX2Zpcm13YXJlX3JlYyAqZmlybXdhcmVfdmVyc2lvbjsKKwkJCV9fdTggcmVjb3JkOworCisJCQlkYmcgKCIlcyAtIEZvdW5kIFR5cGUgRklSTVdBUkUgKFR5cGUgMikgcmVjb3JkIiwgX19GVU5DVElPTl9fKTsKKworCQkJZmlybXdhcmVfdmVyc2lvbiA9IGttYWxsb2MgKHNpemVvZiAoKmZpcm13YXJlX3ZlcnNpb24pLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghZmlybXdhcmVfdmVyc2lvbikgeworCQkJCWRldl9lcnIgKGRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJa2ZyZWUgKHJvbV9kZXNjKTsKKwkJCQlrZnJlZSAodGlfbWFudWZfZGVzYyk7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisKKwkJCS8vIFZhbGlkYXRlIHZlcnNpb24gbnVtYmVyCQkJCQorCQkJLy8gUmVhZCB0aGUgZGVzY3JpcHRvciBkYXRhCisJCQlzdGF0dXMgPSBUSVJlYWRSb20gKHNlcmlhbCwKKwkJCQkJc3RhcnRfYWRkcmVzcytzaXplb2Yoc3RydWN0IHRpX2kyY19kZXNjKSwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB0aV9pMmNfZmlybXdhcmVfcmVjKSwKKwkJCQkJKF9fdTggKilmaXJtd2FyZV92ZXJzaW9uKTsKKwkJCWlmIChzdGF0dXMpIHsKKwkJCQlrZnJlZSAoZmlybXdhcmVfdmVyc2lvbik7CisJCQkJa2ZyZWUgKHJvbV9kZXNjKTsKKwkJCQlrZnJlZSAodGlfbWFudWZfZGVzYyk7CisJCQkJcmV0dXJuIHN0YXR1czsKKwkJCX0KKworCQkJLy8gQ2hlY2sgdmVyc2lvbiBudW1iZXIgb2YgZG93bmxvYWQgd2l0aCBjdXJyZW50IHZlcnNpb24gaW4gSTJjCisJCQlkb3dubG9hZF9jdXJfdmVyID0gKGZpcm13YXJlX3ZlcnNpb24tPlZlcl9NYWpvciA8PCA4KSArIAorCQkJCQkgICAoZmlybXdhcmVfdmVyc2lvbi0+VmVyX01pbm9yKTsKKwkJCWRvd25sb2FkX25ld192ZXIgPSAoT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uLk1ham9yVmVyc2lvbiA8PCA4KSArCisJCQkJCSAgIChPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb24uTWlub3JWZXJzaW9uKTsKKworCQkJZGJnICgiJXMgLSA+Pj5GaXJtd2FyZSBWZXJzaW9ucyBEZXZpY2UgJWQuJWQgIERyaXZlciAlZC4lZCIsCisJCQkgICAgIF9fRlVOQ1RJT05fXywKKwkJCSAgICAgZmlybXdhcmVfdmVyc2lvbi0+VmVyX01ham9yLAorCQkJICAgICBmaXJtd2FyZV92ZXJzaW9uLT5WZXJfTWlub3IsCisJCQkgICAgIE9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbi5NYWpvclZlcnNpb24sCisJCQkgICAgIE9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbi5NaW5vclZlcnNpb24pOworCisJCQkvLyBDaGVjayBpZiB3ZSBoYXZlIGFuIG9sZCB2ZXJzaW9uIGluIHRoZSBJMkMgYW5kIHVwZGF0ZSBpZiBuZWNlc3NhcnkKKwkJCWlmIChkb3dubG9hZF9jdXJfdmVyICE9IGRvd25sb2FkX25ld192ZXIpIHsKKwkJCQlkYmcgKCIlcyAtIFVwZGF0ZSBJMkMgRG93bmxvYWQgZnJvbSAlZC4lZCB0byAlZC4lZCIsCisJCQkJICAgICBfX0ZVTkNUSU9OX18sCisJCQkJICAgICBmaXJtd2FyZV92ZXJzaW9uLT5WZXJfTWFqb3IsCisJCQkJICAgICBmaXJtd2FyZV92ZXJzaW9uLT5WZXJfTWlub3IsCisJCQkJICAgICBPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb24uTWFqb3JWZXJzaW9uLAorCQkJCSAgICAgT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uLk1pbm9yVmVyc2lvbik7CisKKwkJCQkvLyBJbiBvcmRlciB0byB1cGRhdGUgdGhlIEkyQyBmaXJtd2FyZSB3ZSBtdXN0IGNoYW5nZSB0aGUgdHlwZSAyIHJlY29yZCB0byB0eXBlIDB4RjIuCisJCQkJLy8gVGhpcyB3aWxsIGZvcmNlIHRoZSBVTVAgdG8gY29tZSB1cCBpbiBCb290IE1vZGUuICBUaGVuIHdoaWxlIGluIGJvb3QgbW9kZSwgdGhlIGRyaXZlciAKKwkJCQkvLyB3aWxsIGRvd25sb2FkIHRoZSBsYXRlc3QgZmlybXdhcmUgKHBhZGRlZCB0byAxNS41aykgaW50byB0aGUgVU1QIHJhbS4gCisJCQkJLy8gQW5kIGZpbmFsbHkgd2hlbiB0aGUgZGV2aWNlIGNvbWVzIGJhY2sgdXAgaW4gZG93bmxvYWQgbW9kZSB0aGUgZHJpdmVyIHdpbGwgY2F1c2UgCisJCQkJLy8gdGhlIG5ldyBmaXJtd2FyZSB0byBiZSBjb3BpZWQgZnJvbSB0aGUgVU1QIFJhbSB0byBJMkMgYW5kIHRoZSBmaXJtd2FyZSB3aWxsIHVwZGF0ZQorCQkJCS8vIHRoZSByZWNvcmQgdHlwZSBmcm9tIDB4ZjIgdG8gMHgwMi4KKworCQkJCXJlY29yZCA9IEkyQ19ERVNDX1RZUEVfRklSTVdBUkVfQkxBTks7CisKKwkJCQkvLyBDaGFuZ2UgdGhlIEkyQyBGaXJtd2FyZSByZWNvcmQgdHlwZSB0byAweGYyIHRvIHRyaWdnZXIgYW4gdXBkYXRlCisJCQkJc3RhdHVzID0gVElXcml0ZVJvbSAoc2VyaWFsLAorCQkJCQkJCXN0YXJ0X2FkZHJlc3MsCisJCQkJCQkJc2l6ZW9mKHJlY29yZCksCisJCQkJCQkJJnJlY29yZCk7CisJCQkJaWYgKHN0YXR1cykgeworCQkJCQlrZnJlZSAoZmlybXdhcmVfdmVyc2lvbik7CisJCQkJCWtmcmVlIChyb21fZGVzYyk7CisJCQkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJCQkJcmV0dXJuIHN0YXR1czsKKwkJCQl9CisKKwkJCQkvLyB2ZXJpZnkgdGhlIHdyaXRlIC0tIG11c3QgZG8gdGhpcyBpbiBvcmRlciBmb3Igd3JpdGUgdG8gCisJCQkJLy8gY29tcGxldGUgYmVmb3JlIHdlIGRvIHRoZSBoYXJkd2FyZSByZXNldAorCQkJCXN0YXR1cyA9IFRJUmVhZFJvbSAoc2VyaWFsLAorCQkJCQkJCXN0YXJ0X2FkZHJlc3MsCisJCQkJCQkJc2l6ZW9mKHJlY29yZCksCisJCQkJCQkJJnJlY29yZCk7CisKKwkJCQlpZiAoc3RhdHVzKSB7CisJCQkJCWtmcmVlIChmaXJtd2FyZV92ZXJzaW9uKTsKKwkJCQkJa2ZyZWUgKHJvbV9kZXNjKTsKKwkJCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJCQlyZXR1cm4gc3RhdHVzOworCQkJCX0KKworCQkJCWlmIChyZWNvcmQgIT0gSTJDX0RFU0NfVFlQRV9GSVJNV0FSRV9CTEFOSykgeworCQkJCQlkZXZfZXJyIChkZXYsICIlcyAtIGVycm9yIHJlc2V0dGluZyBkZXZpY2VcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJCWtmcmVlIChmaXJtd2FyZV92ZXJzaW9uKTsKKwkJCQkJa2ZyZWUgKHJvbV9kZXNjKTsKKwkJCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCQl9CisKKwkJCQlkYmcgKCIlcyAtIEhBUkRXQVJFIFJFU0VUIiwgX19GVU5DVElPTl9fKTsKKworCQkJCS8vIFJlc2V0IFVNUCAtLSBCYWNrIHRvIEJPT1QgTU9ERQorCQkJCXN0YXR1cyA9IFRJU2VuZFZlbmRvclJlcXVlc3RTeW5jIChzZXJpYWwtPnNlcmlhbC0+ZGV2LAorCQkJCQkJCQlVTVBDX0hBUkRXQVJFX1JFU0VULAkvLyBSZXF1ZXN0CisJCQkJCQkJCTAsCQkJLy8gd1ZhbHVlCisJCQkJCQkJCTAsCQkJLy8gd0luZGV4CisJCQkJCQkJCU5VTEwsCQkJLy8gVHJhbnNmZXJCdWZmZXIKKwkJCQkJCQkJMCk7CQkJLy8gVHJhbnNmZXJCdWZmZXJMZW5ndGgKKworCQkJCWRiZyAoICIlcyAtIEhBUkRXQVJFIFJFU0VUIHJldHVybiAlZCIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKworCQkJCS8qIHJldHVybiBhbiBlcnJvciBvbiBwdXJwb3NlLiAqLworCQkJCWtmcmVlIChmaXJtd2FyZV92ZXJzaW9uKTsKKwkJCQlrZnJlZSAocm9tX2Rlc2MpOworCQkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0KKwkJCWtmcmVlIChmaXJtd2FyZV92ZXJzaW9uKTsKKwkJfQorCQkvLyBTZWFyY2ggZm9yIHR5cGUgMHhGMiByZWNvcmQgKGZpcm13YXJlIGJsYW5rIHJlY29yZCkKKwkJZWxzZSBpZiAoKHN0YXJ0X2FkZHJlc3MgPSBUSUdldERlc2NyaXB0b3JBZGRyZXNzIChzZXJpYWwsIEkyQ19ERVNDX1RZUEVfRklSTVdBUkVfQkxBTkssIHJvbV9kZXNjKSkgIT0gMCkgeworCQkJI2RlZmluZSBIRUFERVJfU0laRQkoc2l6ZW9mKHN0cnVjdCB0aV9pMmNfZGVzYykgKyBzaXplb2Yoc3RydWN0IHRpX2kyY19maXJtd2FyZV9yZWMpKQorCQkJX191OCAqaGVhZGVyOworCQkJX191OCAqdmhlYWRlcjsKKworCQkJaGVhZGVyICA9IGttYWxsb2MgKEhFQURFUl9TSVpFLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghaGVhZGVyKSB7CisJCQkJZGV2X2VyciAoZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5LlxuIiwgX19GVU5DVElPTl9fKTsKKwkJCQlrZnJlZSAocm9tX2Rlc2MpOworCQkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJCQkKKwkJCXZoZWFkZXIgPSBrbWFsbG9jIChIRUFERVJfU0laRSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXZoZWFkZXIpIHsKKwkJCQlkZXZfZXJyIChkZXYsICIlcyAtIG91dCBvZiBtZW1vcnkuXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCWtmcmVlIChoZWFkZXIpOworCQkJCWtmcmVlIChyb21fZGVzYyk7CisJCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQkJCisJCQlkYmcgKCIlcyAtIEZvdW5kIFR5cGUgQkxBTksgRklSTVdBUkUgKFR5cGUgRjIpIHJlY29yZCIsIF9fRlVOQ1RJT05fXyk7CisKKwkJCS8vIEluIG9yZGVyIHRvIHVwZGF0ZSB0aGUgSTJDIGZpcm13YXJlIHdlIG11c3QgY2hhbmdlIHRoZSB0eXBlIDIgcmVjb3JkIHRvIHR5cGUgMHhGMi4KKwkJCS8vIFRoaXMgd2lsbCBmb3JjZSB0aGUgVU1QIHRvIGNvbWUgdXAgaW4gQm9vdCBNb2RlLiAgVGhlbiB3aGlsZSBpbiBib290IG1vZGUsIHRoZSBkcml2ZXIgCisJCQkvLyB3aWxsIGRvd25sb2FkIHRoZSBsYXRlc3QgZmlybXdhcmUgKHBhZGRlZCB0byAxNS41aykgaW50byB0aGUgVU1QIHJhbS4gCisJCQkvLyBBbmQgZmluYWxseSB3aGVuIHRoZSBkZXZpY2UgY29tZXMgYmFjayB1cCBpbiBkb3dubG9hZCBtb2RlIHRoZSBkcml2ZXIgd2lsbCBjYXVzZSAKKwkJCS8vIHRoZSBuZXcgZmlybXdhcmUgdG8gYmUgY29waWVkIGZyb20gdGhlIFVNUCBSYW0gdG8gSTJDIGFuZCB0aGUgZmlybXdhcmUgd2lsbCB1cGRhdGUKKwkJCS8vIHRoZSByZWNvcmQgdHlwZSBmcm9tIDB4ZjIgdG8gMHgwMi4KKwkJCXN0YXR1cyA9IEJ1aWxkSTJDRmlybXdhcmVIZWFkZXIoaGVhZGVyLCBkZXYpOworCQkJaWYgKHN0YXR1cykgeworCQkJCWtmcmVlICh2aGVhZGVyKTsKKwkJCQlrZnJlZSAoaGVhZGVyKTsKKwkJCQlrZnJlZSAocm9tX2Rlc2MpOworCQkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJCQlyZXR1cm4gc3RhdHVzOworCQkJfQorCisJCQkvLyBVcGRhdGUgSTJDIHdpdGggdHlwZSAweGYyIHJlY29yZCB3aXRoIGNvcnJlY3Qgc2l6ZSBhbmQgY2hlY2tzdW0KKwkJCXN0YXR1cyA9IFRJV3JpdGVSb20gKHNlcmlhbCwKKwkJCQkJCXN0YXJ0X2FkZHJlc3MsCisJCQkJCQlIRUFERVJfU0laRSwKKwkJCQkJCWhlYWRlcik7CisJCQlpZiAoc3RhdHVzKSB7CisJCQkJa2ZyZWUgKHZoZWFkZXIpOworCQkJCWtmcmVlIChoZWFkZXIpOworCQkJCWtmcmVlIChyb21fZGVzYyk7CisJCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJCXJldHVybiBzdGF0dXM7CisJCQl9CisKKwkJCS8vIHZlcmlmeSB0aGUgd3JpdGUgLS0gbXVzdCBkbyB0aGlzIGluIG9yZGVyIGZvciB3cml0ZSB0byAKKwkJCS8vIGNvbXBsZXRlIGJlZm9yZSB3ZSBkbyB0aGUgaGFyZHdhcmUgcmVzZXQKKwkJCXN0YXR1cyA9IFRJUmVhZFJvbSAoc2VyaWFsLAorCQkJCQkJc3RhcnRfYWRkcmVzcywKKwkJCQkJCUhFQURFUl9TSVpFLAorCQkJCQkJdmhlYWRlcik7CisKKwkJCWlmIChzdGF0dXMpIHsKKwkJCQlkYmcgKCIlcyAtIGNhbid0IHJlYWQgaGVhZGVyIGJhY2siLCBfX0ZVTkNUSU9OX18pOworCQkJCWtmcmVlICh2aGVhZGVyKTsKKwkJCQlrZnJlZSAoaGVhZGVyKTsKKwkJCQlrZnJlZSAocm9tX2Rlc2MpOworCQkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJCQlyZXR1cm4gc3RhdHVzOworCQkJfQorCQkJaWYgKG1lbWNtcCh2aGVhZGVyLCBoZWFkZXIsIEhFQURFUl9TSVpFKSkgeworCQkJCWRiZyAoIiVzIC0gd3JpdGUgZG93bmxvYWQgcmVjb3JkIGZhaWxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCQkJa2ZyZWUgKHZoZWFkZXIpOworCQkJCWtmcmVlIChoZWFkZXIpOworCQkJCWtmcmVlIChyb21fZGVzYyk7CisJCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJCXJldHVybiBzdGF0dXM7CisJCQl9CisKKwkJCWtmcmVlICh2aGVhZGVyKTsKKwkJCWtmcmVlIChoZWFkZXIpOworCisJCQlkYmcgKCIlcyAtIFN0YXJ0IGZpcm13YXJlIHVwZGF0ZSIsIF9fRlVOQ1RJT05fXyk7CisKKwkJCS8vIFRlbGwgZmlybXdhcmUgdG8gY29weSBkb3dubG9hZCBpbWFnZSBpbnRvIEkyQyAKKwkJCXN0YXR1cyA9IFRJU2VuZFZlbmRvclJlcXVlc3RTeW5jIChzZXJpYWwtPnNlcmlhbC0+ZGV2LAorCQkJCQkJVU1QQ19DT1BZX0ROTERfVE9fSTJDLAkvLyBSZXF1ZXN0CisJCQkJCQkwLAkJCS8vIHdWYWx1ZSAKKwkJCQkJCTAsCQkJLy8gd0luZGV4CisJCQkJCQlOVUxMLAkJCS8vIFRyYW5zZmVyQnVmZmVyCisJCQkJCQkwKTsJCQkvLyBUcmFuc2ZlckJ1ZmZlckxlbmd0aAorCisJCSAgCWRiZyAoIiVzIC0gVXBkYXRlIGNvbXBsZXRlIDB4JXgiLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCQlpZiAoc3RhdHVzKSB7CisJCQkJZGV2X2VyciAoZGV2LCAiJXMgLSBVTVBDX0NPUFlfRE5MRF9UT19JMkMgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCWtmcmVlIChyb21fZGVzYyk7CisJCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJCXJldHVybiBzdGF0dXM7CisJCQl9CisJCX0KKworCQkvLyBUaGUgZGV2aWNlIGlzIHJ1bm5pbmcgdGhlIGRvd25sb2FkIGNvZGUKKwkJa2ZyZWUgKHJvbV9kZXNjKTsKKwkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogQm9vdCBNb2RlICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCWRiZyAoIiVzIC0gPDw8PDw8PDw8PDw8PDw8UlVOTklORyBJTiBCT09UIE1PREU+Pj4+Pj4+Pj4+Pj4+Pj4iLAorCSAgICAgX19GVU5DVElPTl9fKTsKKworCS8vIENvbmZpZ3VyZSB0aGUgVEkgZGV2aWNlIHNvIHdlIGNhbiB1c2UgdGhlIEJVTEsgcGlwZXMgZm9yIGRvd25sb2FkCisJc3RhdHVzID0gVElDb25maWd1cmVCb290RGV2aWNlIChzZXJpYWwtPnNlcmlhbC0+ZGV2KTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJaWYgKGxlMTZfdG9fY3B1KHNlcmlhbC0+c2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpICE9IFVTQl9WRU5ET1JfSURfSU9OKSB7CisJCWRiZyAoIiVzIC0gVklEID0gMHgleCIsIF9fRlVOQ1RJT05fXywKKwkJICAgICBsZTE2X3RvX2NwdShzZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSk7CisJCXNlcmlhbC0+VElfSTJDX1R5cGUgPSBEVEtfQUREUl9TUEFDRV9JMkNfVFlQRV9JSTsKKwkJZ290byBTdGF5SW5Cb290TW9kZTsKKwl9CisKKwkvLyBXZSBoYXZlIGFuIElPTiBkZXZpY2UgKEkyYyBNdXN0IGJlIHByb2dyYW1tZWQpCisJLy8gRGV0ZXJtaW5lIEkyQyBpbWFnZSB0eXBlCisJaWYgKFRJR2V0STJjVHlwZUluQm9vdE1vZGUoc2VyaWFsKSkgeworCQlnb3RvIFN0YXlJbkJvb3RNb2RlOworCX0KKworCS8vIFJlZ2lzdHJ5IHZhcmlhYmxlIHNldD8KKwlpZiAoVElTdGF5SW5Cb290TW9kZSkgeworCQlkYmcgKCIlcyAtIFRJU3RheUluQm9vdE1vZGUiLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIFN0YXlJbkJvb3RNb2RlOworCX0KKworCS8vIENoZWNrIGZvciBJT04gVmVuZG9yIElEIGFuZCB0aGF0IHRoZSBJMkMgaXMgdmFsaWQKKwlpZiAoIVRpVmFsaWRhdGVJMmNJbWFnZShzZXJpYWwpKSB7CisJCXN0cnVjdCB0aV9pMmNfaW1hZ2VfaGVhZGVyICpoZWFkZXI7CisJCWludCBpOworCQlfX3U4IGNzID0gMDsKKwkJX191OCAqYnVmZmVyOworCQlpbnQgYnVmZmVyX3NpemU7CisKKwkJLyogVmFsaWRhdGUgSGFyZHdhcmUgdmVyc2lvbiBudW1iZXIKKwkJICogUmVhZCBNYW51ZmFjdHVyaW5nIERlc2NyaXB0b3IgZnJvbSBUSSBCYXNlZCBFZGdlcG9ydAorCQkgKi8KKwkJdGlfbWFudWZfZGVzYyA9IGttYWxsb2MgKHNpemVvZiAoKnRpX21hbnVmX2Rlc2MpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF0aV9tYW51Zl9kZXNjKSB7CisJCQlkZXZfZXJyIChkZXYsICIlcyAtIG91dCBvZiBtZW1vcnkuXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJc3RhdHVzID0gVElSZWFkTWFudWZEZXNjcmlwdG9yIChzZXJpYWwsIChfX3U4ICopdGlfbWFudWZfZGVzYyk7CisJCWlmIChzdGF0dXMpIHsKKwkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJCWdvdG8gU3RheUluQm9vdE1vZGU7CisJCX0KKworCQkvLyBDaGVjayBmb3IgdmVyc2lvbiAyCisJCWlmICghaWdub3JlX2NwdV9yZXYgJiYgVElfR0VUX0NQVV9SRVZJU0lPTih0aV9tYW51Zl9kZXNjLT5DcHVSZXZfQm9hcmRSZXYpIDwgMikgeworCQkJZGJnICgiJXMgLSBXcm9uZyBDUFUgUmV2ICVkIChNdXN0IGJlIDIpIiwgX19GVU5DVElPTl9fLAorCQkJICAgICBUSV9HRVRfQ1BVX1JFVklTSU9OKHRpX21hbnVmX2Rlc2MtPkNwdVJldl9Cb2FyZFJldikpOworCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJZ290byBTdGF5SW5Cb290TW9kZTsKKwkJfQorCisJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKworCQkvLyBJbiBvcmRlciB0byB1cGRhdGUgdGhlIEkyQyBmaXJtd2FyZSB3ZSBtdXN0IGNoYW5nZSB0aGUgdHlwZSAyIHJlY29yZCB0byB0eXBlIDB4RjIuCisJCS8vIFRoaXMgd2lsbCBmb3JjZSB0aGUgVU1QIHRvIGNvbWUgdXAgaW4gQm9vdCBNb2RlLiAgVGhlbiB3aGlsZSBpbiBib290IG1vZGUsIHRoZSBkcml2ZXIgCisJCS8vIHdpbGwgZG93bmxvYWQgdGhlIGxhdGVzdCBmaXJtd2FyZSAocGFkZGVkIHRvIDE1LjVrKSBpbnRvIHRoZSBVTVAgcmFtLiAKKwkJLy8gQW5kIGZpbmFsbHkgd2hlbiB0aGUgZGV2aWNlIGNvbWVzIGJhY2sgdXAgaW4gZG93bmxvYWQgbW9kZSB0aGUgZHJpdmVyIHdpbGwgY2F1c2UgCisJCS8vIHRoZSBuZXcgZmlybXdhcmUgdG8gYmUgY29waWVkIGZyb20gdGhlIFVNUCBSYW0gdG8gSTJDIGFuZCB0aGUgZmlybXdhcmUgd2lsbCB1cGRhdGUKKwkJLy8gdGhlIHJlY29yZCB0eXBlIGZyb20gMHhmMiB0byAweDAyLgorCQkKKwkJLyoKKwkJICogRG8gd2UgcmVhbGx5IGhhdmUgdG8gY29weSB0aGUgd2hvbGUgZmlybXdhcmUgaW1hZ2UsCisJCSAqIG9yIGNvdWxkIHdlIGRvIHRoaXMgaW4gcGxhY2UhCisJCSAqLworCisJCS8vIEFsbG9jYXRlIGEgMTUuNWsgYnVmZmVyICsgMyBieXRlIGhlYWRlcgorCQlidWZmZXJfc2l6ZSA9ICgoKDEwMjQgKiAxNikgLSA1MTIpICsgc2l6ZW9mKHN0cnVjdCB0aV9pMmNfaW1hZ2VfaGVhZGVyKSk7CisJCWJ1ZmZlciA9IGttYWxsb2MgKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFidWZmZXIpIHsKKwkJCWRldl9lcnIgKGRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCQorCQkvLyBJbml0aWFsaXplIHRoZSBidWZmZXIgdG8gMHhmZiAocGFkIHRoZSBidWZmZXIpCisJCW1lbXNldCAoYnVmZmVyLCAweGZmLCBidWZmZXJfc2l6ZSk7CisKKwkJbWVtY3B5IChidWZmZXIsICZQYWdhYmxlT3BlcmF0aW9uYWxDb2RlSW1hZ2VbMF0sIFBhZ2FibGVPcGVyYXRpb25hbENvZGVTaXplKTsKKworCQlmb3IoaSA9IHNpemVvZihzdHJ1Y3QgdGlfaTJjX2ltYWdlX2hlYWRlcik7IGkgPCBidWZmZXJfc2l6ZTsgaSsrKSB7CisJCQljcyA9IChfX3U4KShjcyArIGJ1ZmZlcltpXSk7CisJCX0KKwkJCisJCWhlYWRlciA9IChzdHJ1Y3QgdGlfaTJjX2ltYWdlX2hlYWRlciAqKWJ1ZmZlcjsKKwkJCisJCS8vIHVwZGF0ZSBsZW5ndGggYW5kIGNoZWNrc3VtIGFmdGVyIHBhZGRpbmcKKwkJaGVhZGVyLT5MZW5ndGggCSA9IGNwdV90b19sZTE2KChfX3UxNikoYnVmZmVyX3NpemUgLSBzaXplb2Yoc3RydWN0IHRpX2kyY19pbWFnZV9oZWFkZXIpKSk7CisJCWhlYWRlci0+Q2hlY2tTdW0gPSBjczsKKworCQkvLyBEb3dubG9hZCB0aGUgb3BlcmF0aW9uYWwgY29kZSAKKwkJZGJnICgiJXMgLSBEb3dubG9hZGluZyBvcGVyYXRpb25hbCBjb2RlIGltYWdlIChUSSBVTVApIiwgX19GVU5DVElPTl9fKTsKKwkJc3RhdHVzID0gVElEb3dubG9hZENvZGVJbWFnZSAoc2VyaWFsLCBidWZmZXIsIGJ1ZmZlcl9zaXplKTsKKworCQlrZnJlZSAoYnVmZmVyKTsKKworCQlpZiAoc3RhdHVzKSB7CisJICAJCWRiZyAoIiVzIC0gRXJyb3IgZG93bmxvYWRpbmcgb3BlcmF0aW9uYWwgY29kZSBpbWFnZSIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gc3RhdHVzOworCQl9CisKKwkJLy8gRGV2aWNlIHdpbGwgcmVib290CisJCXNlcmlhbC0+cHJvZHVjdF9pbmZvLlRpTW9kZSA9IFRJX01PREVfVFJBTlNJVElPTklORzsKKworICAJCWRiZyAoIiVzIC0gRG93bmxvYWQgc3VjY2Vzc2Z1bCAtLSBEZXZpY2UgcmVib290aW5nLi4uIiwgX19GVU5DVElPTl9fKTsKKworCQkvKiByZXR1cm4gYW4gZXJyb3Igb24gcHVycG9zZSAqLworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKK1N0YXlJbkJvb3RNb2RlOgorCS8vIEVwcm9tIGlzIGludmFsaWQgb3IgYmxhbmsgc3RheSBpbiBib290IG1vZGUKKwlkYmcgKCIlcyAtIDw8PDw8PDw8PDw8PDw8PFNUQVlJTkcgSU4gQk9PVCBNT0RFPj4+Pj4+Pj4+Pj4+IiwgX19GVU5DVElPTl9fKTsKKwlzZXJpYWwtPnByb2R1Y3RfaW5mby5UaU1vZGUgPSBUSV9NT0RFX0JPT1Q7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IFRJU2V0RHRyIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqcG9ydCkKK3sKKwlpbnQgcG9ydF9udW1iZXIgPSBwb3J0LT5wb3J0LT5udW1iZXIgLSBwb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yOworCisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCXBvcnQtPnNoYWRvd19tY3IgfD0gTUNSX0RUUjsKKworCXJldHVybiBUSVdyaXRlQ29tbWFuZFN5bmMgKHBvcnQtPnBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCVVNUENfU0VUX0NMUl9EVFIsCisJCQkJKF9fdTgpKFVNUE1fVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwKKwkJCQkxLAkvKiBzZXQgKi8KKwkJCQlOVUxMLAorCQkJCTApOworfQorCitzdGF0aWMgaW50IFRJQ2xlYXJEdHIgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICpwb3J0KQoreworCWludCBwb3J0X251bWJlciA9IHBvcnQtPnBvcnQtPm51bWJlciAtIHBvcnQtPnBvcnQtPnNlcmlhbC0+bWlub3I7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisJcG9ydC0+c2hhZG93X21jciAmPSB+TUNSX0RUUjsKKworCXJldHVybiBUSVdyaXRlQ29tbWFuZFN5bmMgKHBvcnQtPnBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCVVNUENfU0VUX0NMUl9EVFIsCisJCQkJKF9fdTgpKFVNUE1fVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwKKwkJCQkwLAkvKiBjbGVhciAqLworCQkJCU5VTEwsCisJCQkJMCk7Cit9CisKK3N0YXRpYyBpbnQgVElTZXRSdHMgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICpwb3J0KQoreworCWludCBwb3J0X251bWJlciA9IHBvcnQtPnBvcnQtPm51bWJlciAtIHBvcnQtPnBvcnQtPnNlcmlhbC0+bWlub3I7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisJcG9ydC0+c2hhZG93X21jciB8PSBNQ1JfUlRTOworCisJcmV0dXJuIFRJV3JpdGVDb21tYW5kU3luYyAocG9ydC0+cG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJVU1QQ19TRVRfQ0xSX1JUUywKKwkJCQkoX191OCkoVU1QTV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLAorCQkJCTEsCS8qIHNldCAqLworCQkJCU5VTEwsCisJCQkJMCk7Cit9CisKK3N0YXRpYyBpbnQgVElDbGVhclJ0cyAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKnBvcnQpCit7CisJaW50IHBvcnRfbnVtYmVyID0gcG9ydC0+cG9ydC0+bnVtYmVyIC0gcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vcjsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKwlwb3J0LT5zaGFkb3dfbWNyICY9IH5NQ1JfUlRTOworCisJcmV0dXJuIFRJV3JpdGVDb21tYW5kU3luYyAocG9ydC0+cG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJVU1QQ19TRVRfQ0xSX1JUUywKKwkJCQkoX191OCkoVU1QTV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLAorCQkJCTAsCS8qIGNsZWFyICovCisJCQkJTlVMTCwKKwkJCQkwKTsKK30KKworc3RhdGljIGludCBUSVNldExvb3BCYWNrIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqcG9ydCkKK3sKKwlpbnQgcG9ydF9udW1iZXIgPSBwb3J0LT5wb3J0LT5udW1iZXIgLSBwb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yOworCisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJcmV0dXJuIFRJV3JpdGVDb21tYW5kU3luYyAocG9ydC0+cG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJVU1QQ19TRVRfQ0xSX0xPT1BCQUNLLAorCQkJCShfX3U4KShVTVBNX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksCisJCQkJMSwJLyogc2V0ICovCisJCQkJTlVMTCwKKwkJCQkwKTsKK30KKworc3RhdGljIGludCBUSUNsZWFyTG9vcEJhY2sgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICpwb3J0KQoreworCWludCBwb3J0X251bWJlciA9IHBvcnQtPnBvcnQtPm51bWJlciAtIHBvcnQtPnBvcnQtPnNlcmlhbC0+bWlub3I7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlyZXR1cm4gVElXcml0ZUNvbW1hbmRTeW5jIChwb3J0LT5wb3J0LT5zZXJpYWwtPmRldiwKKwkJCQlVTVBDX1NFVF9DTFJfTE9PUEJBQ0ssCisJCQkJKF9fdTgpKFVNUE1fVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwKKwkJCQkwLAkvKiBjbGVhciAqLworCQkJCU5VTEwsCisJCQkJMCk7Cit9CisKK3N0YXRpYyBpbnQgVElTZXRCcmVhayAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKnBvcnQpCit7CisJaW50IHBvcnRfbnVtYmVyID0gcG9ydC0+cG9ydC0+bnVtYmVyIC0gcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vcjsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiBUSVdyaXRlQ29tbWFuZFN5bmMgKHBvcnQtPnBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCVVNUENfU0VUX0NMUl9CUkVBSywKKwkJCQkoX191OCkoVU1QTV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLAorCQkJCTEsCS8qIHNldCAqLworCQkJCU5VTEwsCisJCQkJMCk7Cit9CisKK3N0YXRpYyBpbnQgVElDbGVhckJyZWFrIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqcG9ydCkKK3sKKwlpbnQgcG9ydF9udW1iZXIgPSBwb3J0LT5wb3J0LT5udW1iZXIgLSBwb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yOworCisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJcmV0dXJuIFRJV3JpdGVDb21tYW5kU3luYyAocG9ydC0+cG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJVU1QQ19TRVRfQ0xSX0JSRUFLLAorCQkJCShfX3U4KShVTVBNX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksCisJCQkJMCwJLyogY2xlYXIgKi8KKwkJCQlOVUxMLAorCQkJCTApOworfQorCitzdGF0aWMgaW50IFRJUmVzdG9yZU1DUiAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKnBvcnQsIF9fdTggbWNyKQoreworCWludCBzdGF0dXMgPSAwOworCisJZGJnICgiJXMgLSAleCIsIF9fRlVOQ1RJT05fXywgbWNyKTsKKworCWlmIChtY3IgJiBNQ1JfRFRSKQorCQlzdGF0dXMgPSBUSVNldER0ciAocG9ydCk7CisJZWxzZQorCQlzdGF0dXMgPSBUSUNsZWFyRHRyIChwb3J0KTsKKworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAobWNyICYgTUNSX1JUUykKKwkJc3RhdHVzID0gVElTZXRSdHMgKHBvcnQpOworCWVsc2UKKwkJc3RhdHVzID0gVElDbGVhclJ0cyAocG9ydCk7CisKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJaWYgKG1jciAmIE1DUl9MT09QQkFDSykKKwkJc3RhdHVzID0gVElTZXRMb29wQmFjayAocG9ydCk7CisJZWxzZQorCQlzdGF0dXMgPSBUSUNsZWFyTG9vcEJhY2sgKHBvcnQpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworCisKKy8qIENvbnZlcnQgVEkgTFNSIHRvIHN0YW5kYXJkIFVBUlQgZmxhZ3MgKi8KK3N0YXRpYyBfX3U4IE1hcExpbmVTdGF0dXMgKF9fdTggdGlfbHNyKQoreworCV9fdTggbHNyID0gMDsKKworI2RlZmluZSBNQVBfRkxBRyhmbGFnVW1wLCBmbGFnVWFydCkgICAgXAorCWlmICh0aV9sc3IgJiBmbGFnVW1wKSBcCisJCWxzciB8PSBmbGFnVWFydDsKKworCU1BUF9GTEFHKFVNUF9VQVJUX0xTUl9PVl9NQVNLLCBMU1JfT1ZFUl9FUlIpCS8qIG92ZXJydW4gKi8KKwlNQVBfRkxBRyhVTVBfVUFSVF9MU1JfUEVfTUFTSywgTFNSX1BBUl9FUlIpCS8qIHBhcml0eSBlcnJvciAqLworCU1BUF9GTEFHKFVNUF9VQVJUX0xTUl9GRV9NQVNLLCBMU1JfRlJNX0VSUikJLyogZnJhbWluZyBlcnJvciAqLworCU1BUF9GTEFHKFVNUF9VQVJUX0xTUl9CUl9NQVNLLCBMU1JfQlJFQUspCS8qIGJyZWFrIGRldGVjdGVkICovCisJTUFQX0ZMQUcoVU1QX1VBUlRfTFNSX1JYX01BU0ssIExTUl9SWF9BVkFJTCkJLyogcmVjZWl2ZSBkYXRhIGF2YWlsYWJsZSAqLworCU1BUF9GTEFHKFVNUF9VQVJUX0xTUl9UWF9NQVNLLCBMU1JfVFhfRU1QVFkpCS8qIHRyYW5zbWl0IGhvbGRpbmcgcmVnaXN0ZXIgZW1wdHkgKi8KKworI3VuZGVmIE1BUF9GTEFHCisKKwlyZXR1cm4gbHNyOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfbmV3X21zciAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgX191OCBtc3IpCit7CisJc3RydWN0IGFzeW5jX2ljb3VudCAqaWNvdW50OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisKKwlkYmcgKCIlcyAtICUwMngiLCBfX0ZVTkNUSU9OX18sIG1zcik7CisKKwlpZiAobXNyICYgKEVER0VQT1JUX01TUl9ERUxUQV9DVFMgfCBFREdFUE9SVF9NU1JfREVMVEFfRFNSIHwgRURHRVBPUlRfTVNSX0RFTFRBX1JJIHwgRURHRVBPUlRfTVNSX0RFTFRBX0NEKSkgeworCQlpY291bnQgPSAmZWRnZV9wb3J0LT5pY291bnQ7CisKKwkJLyogdXBkYXRlIGlucHV0IGxpbmUgY291bnRlcnMgKi8KKwkJaWYgKG1zciAmIEVER0VQT1JUX01TUl9ERUxUQV9DVFMpCisJCQlpY291bnQtPmN0cysrOworCQlpZiAobXNyICYgRURHRVBPUlRfTVNSX0RFTFRBX0RTUikKKwkJCWljb3VudC0+ZHNyKys7CisJCWlmIChtc3IgJiBFREdFUE9SVF9NU1JfREVMVEFfQ0QpCisJCQlpY291bnQtPmRjZCsrOworCQlpZiAobXNyICYgRURHRVBPUlRfTVNSX0RFTFRBX1JJKQorCQkJaWNvdW50LT5ybmcrKzsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlICgmZWRnZV9wb3J0LT5kZWx0YV9tc3Jfd2FpdCk7CisJfQorCisJLyogU2F2ZSB0aGUgbmV3IG1vZGVtIHN0YXR1cyAqLworCWVkZ2VfcG9ydC0+c2hhZG93X21zciA9IG1zciAmIDB4ZjA7CisKKwl0dHkgPSBlZGdlX3BvcnQtPnBvcnQtPnR0eTsKKwkvKiBoYW5kbGUgQ1RTIGZsb3cgY29udHJvbCAqLworCWlmICh0dHkgJiYgQ19DUlRTQ1RTKHR0eSkpIHsKKwkJaWYgKG1zciAmIEVER0VQT1JUX01TUl9DVFMpIHsKKwkJCXR0eS0+aHdfc3RvcHBlZCA9IDA7CisJCQl0dHlfd2FrZXVwKHR0eSk7CisJCX0gZWxzZSB7CisJCQl0dHktPmh3X3N0b3BwZWQgPSAxOworCQl9CisJfQorCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfbmV3X2xzciAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgaW50IGxzcl9kYXRhLCBfX3U4IGxzciwgX191OCBkYXRhKQoreworCXN0cnVjdCBhc3luY19pY291bnQgKmljb3VudDsKKwlfX3U4IG5ld19sc3IgPSAoX191OCkobHNyICYgKF9fdTgpKExTUl9PVkVSX0VSUiB8IExTUl9QQVJfRVJSIHwgTFNSX0ZSTV9FUlIgfCBMU1JfQlJFQUspKTsKKworCWRiZyAoIiVzIC0gJTAyeCIsIF9fRlVOQ1RJT05fXywgbmV3X2xzcik7CisKKwllZGdlX3BvcnQtPnNoYWRvd19sc3IgPSBsc3I7CisKKwlpZiAobmV3X2xzciAmIExTUl9CUkVBSykgeworCQkvKgorCQkgKiBQYXJpdHkgYW5kIEZyYW1pbmcgZXJyb3JzIG9ubHkgY291bnQgaWYgdGhleQorCQkgKiBvY2N1ciBleGNsdXNpdmUgb2YgYSBicmVhayBiZWluZyByZWNlaXZlZC4KKwkJICovCisJCW5ld19sc3IgJj0gKF9fdTgpKExTUl9PVkVSX0VSUiB8IExTUl9CUkVBSyk7CisJfQorCisJLyogUGxhY2UgTFNSIGRhdGEgYnl0ZSBpbnRvIFJ4IGJ1ZmZlciAqLworCWlmIChsc3JfZGF0YSAmJiBlZGdlX3BvcnQtPnBvcnQtPnR0eSkKKwkJZWRnZV90dHlfcmVjdigmZWRnZV9wb3J0LT5wb3J0LT5kZXYsIGVkZ2VfcG9ydC0+cG9ydC0+dHR5LCAmZGF0YSwgMSk7CisKKwkvKiB1cGRhdGUgaW5wdXQgbGluZSBjb3VudGVycyAqLworCWljb3VudCA9ICZlZGdlX3BvcnQtPmljb3VudDsKKwlpZiAobmV3X2xzciAmIExTUl9CUkVBSykKKwkJaWNvdW50LT5icmsrKzsKKwlpZiAobmV3X2xzciAmIExTUl9PVkVSX0VSUikKKwkJaWNvdW50LT5vdmVycnVuKys7CisJaWYgKG5ld19sc3IgJiBMU1JfUEFSX0VSUikKKwkJaWNvdW50LT5wYXJpdHkrKzsKKwlpZiAobmV3X2xzciAmIExTUl9GUk1fRVJSKQorCQlpY291bnQtPmZyYW1lKys7Cit9CisKKworc3RhdGljIHZvaWQgZWRnZV9pbnRlcnJ1cHRfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwgPSAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCBsZW5ndGggPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJaW50IHBvcnRfbnVtYmVyOworCWludCBmdW5jdGlvbjsKKwlpbnQgc3RhdHVzOworCV9fdTggbHNyOworCV9fdTggbXNyOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZFxuIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoIWxlbmd0aCkgeworCQlkYmcgKCIlcyAtIG5vIGRhdGEgaW4gdXJiIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0OworCX0KKwkJCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsIF9fRlVOQ1RJT05fXywgbGVuZ3RoLCBkYXRhKTsKKwkJCisJaWYgKGxlbmd0aCAhPSAyKSB7CisJCWRiZyAoIiVzIC0gZXhwZWN0aW5nIHBhY2tldCBvZiBzaXplIDIsIGdvdCAlZCIsIF9fRlVOQ1RJT05fXywgbGVuZ3RoKTsKKwkJZ290byBleGl0OworCX0KKworCXBvcnRfbnVtYmVyID0gVElVTVBfR0VUX1BPUlRfRlJPTV9DT0RFIChkYXRhWzBdKTsKKwlmdW5jdGlvbiAgICA9IFRJVU1QX0dFVF9GVU5DX0ZST01fQ09ERSAoZGF0YVswXSk7CisJZGJnICgiJXMgLSBwb3J0X251bWJlciAlZCwgZnVuY3Rpb24gJWQsIGluZm8gMHgleCIsCisJICAgICBfX0ZVTkNUSU9OX18sIHBvcnRfbnVtYmVyLCBmdW5jdGlvbiwgZGF0YVsxXSk7CisJcG9ydCA9IGVkZ2Vfc2VyaWFsLT5zZXJpYWwtPnBvcnRbcG9ydF9udW1iZXJdOworCWVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpZiAoIWVkZ2VfcG9ydCkgeworCQlkYmcgKCIlcyAtIGVkZ2VfcG9ydCBub3QgZm91bmQiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCXN3aXRjaCAoZnVuY3Rpb24pIHsKKwljYXNlIFRJVU1QX0lOVEVSUlVQVF9DT0RFX0xTUjoKKwkJbHNyID0gTWFwTGluZVN0YXR1cyhkYXRhWzFdKTsKKwkJaWYgKGxzciAmIFVNUF9VQVJUX0xTUl9EQVRBX01BU0spIHsKKwkJCS8qIFNhdmUgdGhlIExTUiBldmVudCBmb3IgYnVsayByZWFkIGNvbXBsZXRpb24gcm91dGluZSAqLworCQkJZGJnICgiJXMgLSBMU1IgRXZlbnQgUG9ydCAldSBMU1IgU3RhdHVzID0gJTAyeCIsCisJCQkgICAgIF9fRlVOQ1RJT05fXywgcG9ydF9udW1iZXIsIGxzcik7CisJCQllZGdlX3BvcnQtPmxzcl9ldmVudCA9IDE7CisJCQllZGdlX3BvcnQtPmxzcl9tYXNrID0gbHNyOworCQl9IGVsc2UgeworCQkJZGJnICgiJXMgLSA9PT09PSBQb3J0ICVkIExTUiBTdGF0dXMgPSAlMDJ4ID09PT09PSIsCisJCQkgICAgIF9fRlVOQ1RJT05fXywgcG9ydF9udW1iZXIsIGxzcik7CisJCQloYW5kbGVfbmV3X2xzciAoZWRnZV9wb3J0LCAwLCBsc3IsIDApOworCQl9CisJCWJyZWFrOworCisJY2FzZSBUSVVNUF9JTlRFUlJVUFRfQ09ERV9NU1I6CS8vIE1TUgorCQkvKiBDb3B5IE1TUiBmcm9tIFVNUCAqLworCQltc3IgPSBkYXRhWzFdOworCQlkYmcgKCIlcyAtID09PT09IFBvcnQgJXUgTVNSIFN0YXR1cyA9ICUwMnggPT09PT09XG4iLAorCQkgICAgIF9fRlVOQ1RJT05fXywgcG9ydF9udW1iZXIsIG1zcik7CisJCWhhbmRsZV9uZXdfbXNyIChlZGdlX3BvcnQsIG1zcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X2VyciAoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIFVua25vd24gSW50ZXJydXB0IGNvZGUgZnJvbSBVTVAgJXhcbiIsCisJCQkgX19GVU5DVElPTl9fLCBkYXRhWzFdKTsKKwkJYnJlYWs7CisJCQorCX0KKworZXhpdDoKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKQorCQlkZXZfZXJyICgmdXJiLT5kZXYtPmRldiwgIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkXG4iLAorCQkJIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgZWRnZV9idWxrX2luX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKil1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IHBvcnRfbnVtYmVyOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGV2X2VyciAoJnVyYi0+ZGV2LT5kZXYsIiVzIC0gbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZFxuIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzICk7CisJfQorCisJaWYgKHVyYi0+c3RhdHVzID09IC1FUElQRSkKKwkJZ290byBleGl0OworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsIiVzIC0gc3RvcHBpbmcgcmVhZCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlwb3J0X251bWJlciA9IGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyIC0gZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yOworCisJaWYgKGVkZ2VfcG9ydC0+bHNyX2V2ZW50KSB7CisJCWVkZ2VfcG9ydC0+bHNyX2V2ZW50ID0gMDsKKwkJZGJnICgiJXMgPT09PT0gUG9ydCAldSBMU1IgU3RhdHVzID0gJTAyeCwgRGF0YSA9ICUwMnggPT09PT09IiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHBvcnRfbnVtYmVyLCBlZGdlX3BvcnQtPmxzcl9tYXNrLCAqZGF0YSk7CisJCWhhbmRsZV9uZXdfbHNyIChlZGdlX3BvcnQsIDEsIGVkZ2VfcG9ydC0+bHNyX21hc2ssICpkYXRhKTsKKwkJLyogQWRqdXN0IGJ1ZmZlciBsZW5ndGgvcG9pbnRlciAqLworCQktLXVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJKytkYXRhOworCX0KKworCXR0eSA9IGVkZ2VfcG9ydC0+cG9ydC0+dHR5OworCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CisKKwkJaWYgKGVkZ2VfcG9ydC0+Y2xvc2VfcGVuZGluZykgeworCQkJZGJnICgiJXMgLSBjbG9zZSBpcyBwZW5kaW5nLCBkcm9wcGluZyBkYXRhIG9uIHRoZSBmbG9vci4iLCBfX0ZVTkNUSU9OX18pOworCQl9IGVsc2UgeworCQkJZWRnZV90dHlfcmVjdigmZWRnZV9wb3J0LT5wb3J0LT5kZXYsIHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJfQorCQllZGdlX3BvcnQtPmljb3VudC5yeCArPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJfQorCitleGl0OgorCS8qIGNvbnRpbnVlIHJlYWQgdW5sZXNzIHN0b3BwZWQgKi8KKwlzcGluX2xvY2soJmVkZ2VfcG9ydC0+ZXBfbG9jayk7CisJaWYgKGVkZ2VfcG9ydC0+ZXBfcmVhZF91cmJfc3RhdGUgPT0gRURHRV9SRUFEX1VSQl9SVU5OSU5HKSB7CisJCXVyYi0+ZGV2ID0gZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPmRldjsKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwl9IGVsc2UgaWYgKGVkZ2VfcG9ydC0+ZXBfcmVhZF91cmJfc3RhdGUgPT0gRURHRV9SRUFEX1VSQl9TVE9QUElORykgeworCQllZGdlX3BvcnQtPmVwX3JlYWRfdXJiX3N0YXRlID0gRURHRV9SRUFEX1VSQl9TVE9QUEVEOworCX0KKwlzcGluX3VubG9jaygmZWRnZV9wb3J0LT5lcF9sb2NrKTsKKwlpZiAoc3RhdHVzKQorCQlkZXZfZXJyICgmdXJiLT5kZXYtPmRldiwgIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkXG4iLAorCQkJIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgZWRnZV90dHlfcmVjdihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgpCit7CisJaW50IGNudDsKKworCWRvIHsKKwkJaWYgKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJaWYgKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQkJZGV2X2VycihkZXYsICIlcyAtIGRyb3BwaW5nIGRhdGEsICVkIGJ5dGVzIGxvc3RcbiIsCisJCQkJCV9fRlVOQ1RJT05fXywgbGVuZ3RoKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwkJY250ID0gbWluKGxlbmd0aCwgVFRZX0ZMSVBCVUZfU0laRSAtIHR0eS0+ZmxpcC5jb3VudCk7CisJCW1lbWNweSh0dHktPmZsaXAuY2hhcl9idWZfcHRyLCBkYXRhLCBjbnQpOworCQltZW1zZXQodHR5LT5mbGlwLmZsYWdfYnVmX3B0ciwgMCwgY250KTsKKwkJdHR5LT5mbGlwLmNoYXJfYnVmX3B0ciArPSBjbnQ7CisJCXR0eS0+ZmxpcC5mbGFnX2J1Zl9wdHIgKz0gY250OworCQl0dHktPmZsaXAuY291bnQgKz0gY250OworCQlkYXRhICs9IGNudDsKKwkJbGVuZ3RoIC09IGNudDsKKwl9IHdoaWxlIChsZW5ndGggPiAwKTsKKworCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Cit9CisKK3N0YXRpYyB2b2lkIGVkZ2VfYnVsa19vdXRfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlkYmcgKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwllZGdlX3BvcnQtPmVwX3dyaXRlX3VyYl9pbl91c2UgPSAwOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRldl9lcnIgKCZ1cmItPmRldi0+ZGV2LCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkXG4iLAorCQkgICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCX0KKworCS8qIHNlbmQgYW55IGJ1ZmZlcmVkIGRhdGEgKi8KKwllZGdlX3NlbmQocG9ydCk7Cit9CisKK3N0YXRpYyBpbnQgZWRnZV9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgcG9ydF9udW1iZXI7CisJaW50IHN0YXR1czsKKwl1MTYgb3Blbl9zZXR0aW5nczsKKwl1OCB0cmFuc2FjdGlvbl90aW1lb3V0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoZWRnZV9wb3J0ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHBvcnQtPnR0eSkKKwkJcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IGxvd19sYXRlbmN5OworCisJcG9ydF9udW1iZXIgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yOworCXN3aXRjaCAocG9ydF9udW1iZXIpIHsKKwkJY2FzZSAwOgorCQkJZWRnZV9wb3J0LT51YXJ0X2Jhc2UgPSBVTVBNRU1fQkFTRV9VQVJUMTsKKwkJCWVkZ2VfcG9ydC0+ZG1hX2FkZHJlc3MgPSBVTVBEX09FREIxX0FERFJFU1M7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZWRnZV9wb3J0LT51YXJ0X2Jhc2UgPSBVTVBNRU1fQkFTRV9VQVJUMjsKKwkJCWVkZ2VfcG9ydC0+ZG1hX2FkZHJlc3MgPSBVTVBEX09FREIyX0FERFJFU1M7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIgKCZwb3J0LT5kZXYsICJVbmtub3duIHBvcnQgbnVtYmVyISEhXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCX0KKworCWRiZyAoIiVzIC0gcG9ydF9udW1iZXIgPSAlZCwgdWFydF9iYXNlID0gJTA0eCwgZG1hX2FkZHJlc3MgPSAlMDR4IiwKKwkgICAgIF9fRlVOQ1RJT05fXywgcG9ydF9udW1iZXIsIGVkZ2VfcG9ydC0+dWFydF9iYXNlLCBlZGdlX3BvcnQtPmRtYV9hZGRyZXNzKTsKKworCWRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCisJbWVtc2V0ICgmKGVkZ2VfcG9ydC0+aWNvdW50KSwgMHgwMCwgc2l6ZW9mKGVkZ2VfcG9ydC0+aWNvdW50KSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCAoJmVkZ2VfcG9ydC0+ZGVsdGFfbXNyX3dhaXQpOworCisJLyogdHVybiBvZmYgbG9vcGJhY2sgKi8KKwlzdGF0dXMgPSBUSUNsZWFyTG9vcEJhY2sgKGVkZ2VfcG9ydCk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsIiVzIC0gY2Fubm90IHNlbmQgY2xlYXIgbG9vcGJhY2sgY29tbWFuZCwgJWRcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCQorCS8qIHNldCB1cCB0aGUgcG9ydCBzZXR0aW5ncyAqLworCWVkZ2Vfc2V0X3Rlcm1pb3MgKHBvcnQsIE5VTEwpOworCisJLyogb3BlbiB1cCB0aGUgcG9ydCAqLworCisJLyogbWlsbGlzZWNvbmRzIHRvIHRpbWVvdXQgZm9yIERNQSB0cmFuc2ZlciAqLworCXRyYW5zYWN0aW9uX3RpbWVvdXQgPSAyOworCisJZWRnZV9wb3J0LT51bXBfcmVhZF90aW1lb3V0ID0gbWF4ICgyMCwgKCh0cmFuc2FjdGlvbl90aW1lb3V0ICogMykgLyAyKSApOworCisJLy8gbWlsbGlzZWNvbmRzIHRvIHRpbWVvdXQgZm9yIERNQSB0cmFuc2ZlcgorCW9wZW5fc2V0dGluZ3MgPSAodTgpKFVNUF9ETUFfTU9ERV9DT05USU5PVVMgfCAKKwkJCSAgICAgVU1QX1BJUEVfVFJBTlNfVElNRU9VVF9FTkEgfCAKKwkJCSAgICAgKHRyYW5zYWN0aW9uX3RpbWVvdXQgPDwgMikpOworCisJZGJnICgiJXMgLSBTZW5kaW5nIFVNUENfT1BFTl9QT1JUIiwgX19GVU5DVElPTl9fKTsKKworCS8qIFRlbGwgVEkgdG8gb3BlbiBhbmQgc3RhcnQgdGhlIHBvcnQgKi8KKwlzdGF0dXMgPSBUSVdyaXRlQ29tbWFuZFN5bmMgKGRldiwKKwkJCQkJVU1QQ19PUEVOX1BPUlQsCisJCQkJCSh1OCkoVU1QTV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLAorCQkJCQlvcGVuX3NldHRpbmdzLAorCQkJCQlOVUxMLAorCQkJCQkwKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwiJXMgLSBjYW5ub3Qgc2VuZCBvcGVuIGNvbW1hbmQsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJLyogU3RhcnQgdGhlIERNQT8gKi8KKwlzdGF0dXMgPSBUSVdyaXRlQ29tbWFuZFN5bmMgKGRldiwKKwkJCQkJVU1QQ19TVEFSVF9QT1JULAorCQkJCQkodTgpKFVNUE1fVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwKKwkJCQkJMCwKKwkJCQkJTlVMTCwKKwkJCQkJMCk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsIiVzIC0gY2Fubm90IHNlbmQgc3RhcnQgRE1BIGNvbW1hbmQsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJLyogQ2xlYXIgVFggYW5kIFJYIGJ1ZmZlcnMgaW4gVU1QICovCisJc3RhdHVzID0gVElQdXJnZURhdGFTeW5jIChwb3J0LCBVTVBfUE9SVF9ESVJfT1VUIHwgVU1QX1BPUlRfRElSX0lOKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwiJXMgLSBjYW5ub3Qgc2VuZCBjbGVhciBidWZmZXJzIGNvbW1hbmQsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJLyogUmVhZCBJbml0aWFsIE1TUiAqLworCXN0YXR1cyA9IFRJUmVhZFZlbmRvclJlcXVlc3RTeW5jIChkZXYsCisJCQkJCVVNUENfUkVBRF9NU1IsCS8vIFJlcXVlc3QKKwkJCQkJMCwJCS8vIHdWYWx1ZQorCQkJCQkoX191MTYpKFVNUE1fVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwJLy8gd0luZGV4IChBZGRyZXNzKQorCQkJCQkmZWRnZV9wb3J0LT5zaGFkb3dfbXNyLAkJCS8vIFRyYW5zZmVyQnVmZmVyCisJCQkJCTEpOwkJCQkJLy8gVHJhbnNmZXJCdWZmZXJMZW5ndGgKKwlpZiAoc3RhdHVzKSB7CisgCQlkZXZfZXJyKCZwb3J0LT5kZXYsIiVzIC0gY2Fubm90IHNlbmQgcmVhZCBNU1IgY29tbWFuZCwgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlkYmcgKCJTaGFkb3dNU1IgMHglWCIsIGVkZ2VfcG9ydC0+c2hhZG93X21zcik7CisgCisJLyogU2V0IEluaXRpYWwgTUNSICovCisJZWRnZV9wb3J0LT5zaGFkb3dfbWNyID0gTUNSX1JUUyB8IE1DUl9EVFI7CisJZGJnICgiU2hhZG93TUNSIDB4JVgiLCBlZGdlX3BvcnQtPnNoYWRvd19tY3IpOworCisJZWRnZV9zZXJpYWwgPSBlZGdlX3BvcnQtPmVkZ2Vfc2VyaWFsOworCWlmIChkb3duX2ludGVycnVwdGlibGUoJmVkZ2Vfc2VyaWFsLT5lc19zZW0pKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCWlmIChlZGdlX3NlcmlhbC0+bnVtX3BvcnRzX29wZW4gPT0gMCkgeworCQkvKiB3ZSBhcmUgdGhlIGZpcnN0IHBvcnQgdG8gYmUgb3BlbmVkLCBsZXQncyBwb3N0IHRoZSBpbnRlcnJ1cHQgdXJiICovCisJCXVyYiA9IGVkZ2Vfc2VyaWFsLT5zZXJpYWwtPnBvcnRbMF0tPmludGVycnVwdF9pbl91cmI7CisJCWlmICghdXJiKSB7CisJCQlkZXZfZXJyICgmcG9ydC0+ZGV2LCAiJXMgLSBubyBpbnRlcnJ1cHQgdXJiIHByZXNlbnQsIGV4aXRpbmdcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlzdGF0dXMgPSAtRUlOVkFMOworCQkJZ290byB1cF9lc19zZW07CisJCX0KKwkJdXJiLT5jb21wbGV0ZSA9IGVkZ2VfaW50ZXJydXB0X2NhbGxiYWNrOworCQl1cmItPmNvbnRleHQgPSBlZGdlX3NlcmlhbDsKKwkJdXJiLT5kZXYgPSBkZXY7CisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9LRVJORUwpOworCQlpZiAoc3RhdHVzKSB7CisJCQlkZXZfZXJyICgmcG9ydC0+ZGV2LCAiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCB2YWx1ZSAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQkJZ290byB1cF9lc19zZW07CisJCX0KKwl9CisKKwkvKgorCSAqIHJlc2V0IHRoZSBkYXRhIHRvZ2dsZSBvbiB0aGUgYnVsayBlbmRwb2ludHMgdG8gd29yayBhcm91bmQgYnVnIGluCisJICogaG9zdCBjb250cm9sbGVycyB3aGVyZSB0aGluZ3MgZ2V0IG91dCBvZiBzeW5jIHNvbWUgdGltZXMKKwkgKi8KKwl1c2JfY2xlYXJfaGFsdCAoZGV2LCBwb3J0LT53cml0ZV91cmItPnBpcGUpOworCXVzYl9jbGVhcl9oYWx0IChkZXYsIHBvcnQtPnJlYWRfdXJiLT5waXBlKTsKKworCS8qIHN0YXJ0IHVwIG91ciBidWxrIHJlYWQgdXJiICovCisJdXJiID0gcG9ydC0+cmVhZF91cmI7CisJaWYgKCF1cmIpIHsKKwkJZGV2X2VyciAoJnBvcnQtPmRldiwgIiVzIC0gbm8gcmVhZCB1cmIgcHJlc2VudCwgZXhpdGluZ1xuIiwgX19GVU5DVElPTl9fKTsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJZ290byB1bmxpbmtfaW50X3VyYjsKKwl9CisJZWRnZV9wb3J0LT5lcF9yZWFkX3VyYl9zdGF0ZSA9IEVER0VfUkVBRF9VUkJfUlVOTklORzsKKwl1cmItPmNvbXBsZXRlID0gZWRnZV9idWxrX2luX2NhbGxiYWNrOworCXVyYi0+Y29udGV4dCA9IGVkZ2VfcG9ydDsKKwl1cmItPmRldiA9IGRldjsKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIgKCZwb3J0LT5kZXYsICIlcyAtIHJlYWQgYnVsayB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCB2YWx1ZSAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQlnb3RvIHVubGlua19pbnRfdXJiOworCX0KKworCSsrZWRnZV9zZXJpYWwtPm51bV9wb3J0c19vcGVuOworCisJZGJnKCIlcyAtIGV4aXRlZCIsIF9fRlVOQ1RJT05fXyk7CisKKwlnb3RvIHVwX2VzX3NlbTsKKwordW5saW5rX2ludF91cmI6CisJaWYgKGVkZ2VfcG9ydC0+ZWRnZV9zZXJpYWwtPm51bV9wb3J0c19vcGVuID09IDApCisJCXVzYl9raWxsX3VyYihwb3J0LT5zZXJpYWwtPnBvcnRbMF0tPmludGVycnVwdF9pbl91cmIpOwordXBfZXNfc2VtOgorCXVwKCZlZGdlX3NlcmlhbC0+ZXNfc2VtKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBlZGdlX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbDsKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0OworCWludCBwb3J0X251bWJlcjsKKwlpbnQgc3RhdHVzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCQkgCisJZWRnZV9zZXJpYWwgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CisJZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWlmICgoZWRnZV9zZXJpYWwgPT0gTlVMTCkgfHwgKGVkZ2VfcG9ydCA9PSBOVUxMKSkKKwkJcmV0dXJuOworCQorCS8qIFRoZSBidWxrcmVhZGNvbXBsZXRpb24gcm91dGluZSB3aWxsIGNoZWNrIAorCSAqIHRoaXMgZmxhZyBhbmQgZHVtcCBhZGQgcmVhZCBkYXRhICovCisJZWRnZV9wb3J0LT5jbG9zZV9wZW5kaW5nID0gMTsKKworCS8qIGNoYXNlIHRoZSBwb3J0IGNsb3NlIGFuZCBmbHVzaCAqLworCVRJQ2hhc2VQb3J0IChlZGdlX3BvcnQsIChIWipjbG9zaW5nX3dhaXQpLzEwMCwgMSk7CisKKwl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOworCWVkZ2VfcG9ydC0+ZXBfd3JpdGVfdXJiX2luX3VzZSA9IDA7CisKKwkvKiBhc3N1bWluZyB3ZSBjYW4gc3RpbGwgdGFsayB0byB0aGUgZGV2aWNlLAorCSAqIHNlbmQgYSBjbG9zZSBwb3J0IGNvbW1hbmQgdG8gaXQgKi8KKwlkYmcoIiVzIC0gc2VuZCB1bXBjX2Nsb3NlX3BvcnQiLCBfX0ZVTkNUSU9OX18pOworCXBvcnRfbnVtYmVyID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vcjsKKwlzdGF0dXMgPSBUSVdyaXRlQ29tbWFuZFN5bmMgKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCSAgICAgVU1QQ19DTE9TRV9QT1JULAorCQkJCSAgICAgKF9fdTgpKFVNUE1fVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwKKwkJCQkgICAgIDAsCisJCQkJICAgICBOVUxMLAorCQkJCSAgICAgMCk7CisJZG93bigmZWRnZV9zZXJpYWwtPmVzX3NlbSk7CisJLS1lZGdlX3BvcnQtPmVkZ2Vfc2VyaWFsLT5udW1fcG9ydHNfb3BlbjsKKwlpZiAoZWRnZV9wb3J0LT5lZGdlX3NlcmlhbC0+bnVtX3BvcnRzX29wZW4gPD0gMCkgeworCQkvKiBsYXN0IHBvcnQgaXMgbm93IGNsb3NlZCwgbGV0J3Mgc2h1dCBkb3duIG91ciBpbnRlcnJ1cHQgdXJiICovCisJCXVzYl9raWxsX3VyYihwb3J0LT5zZXJpYWwtPnBvcnRbMF0tPmludGVycnVwdF9pbl91cmIpOworCQllZGdlX3BvcnQtPmVkZ2Vfc2VyaWFsLT5udW1fcG9ydHNfb3BlbiA9IDA7CisJfQorCXVwKCZlZGdlX3NlcmlhbC0+ZXNfc2VtKTsKKwllZGdlX3BvcnQtPmNsb3NlX3BlbmRpbmcgPSAwOworCisJZGJnKCIlcyAtIGV4aXRlZCIsIF9fRlVOQ1RJT05fXyk7Cit9CisKK3N0YXRpYyBpbnQgZWRnZV93cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGNvdW50KQoreworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKGNvdW50ID09IDApIHsKKwkJZGJnKCIlcyAtIHdyaXRlIHJlcXVlc3Qgb2YgMCBieXRlcyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAwOworCX0KKworCWlmIChlZGdlX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKGVkZ2VfcG9ydC0+Y2xvc2VfcGVuZGluZyA9PSAxKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKwljb3VudCA9IGVkZ2VfYnVmX3B1dChlZGdlX3BvcnQtPmVwX291dF9idWYsIGRhdGEsIGNvdW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKworCWVkZ2Vfc2VuZChwb3J0KTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHZvaWQgZWRnZV9zZW5kKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJaW50IGNvdW50LCByZXN1bHQ7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCisJaWYgKGVkZ2VfcG9ydC0+ZXBfd3JpdGVfdXJiX2luX3VzZSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCWNvdW50ID0gZWRnZV9idWZfZ2V0KGVkZ2VfcG9ydC0+ZXBfb3V0X2J1ZiwKKwkJCQlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQlwb3J0LT5idWxrX291dF9zaXplKTsKKworCWlmIChjb3VudCA9PSAwKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJZWRnZV9wb3J0LT5lcF93cml0ZV91cmJfaW5fdXNlID0gMTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIGNvdW50LCBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcik7CisKKwkvKiBzZXQgdXAgb3VyIHVyYiAqLworCXVzYl9maWxsX2J1bGtfdXJiIChwb3J0LT53cml0ZV91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJICAgdXNiX3NuZGJ1bGtwaXBlIChwb3J0LT5zZXJpYWwtPmRldiwKKwkJCQkJICAgIHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQkgICBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgY291bnQsCisJCQkgICBlZGdlX2J1bGtfb3V0X2NhbGxiYWNrLAorCQkJICAgcG9ydCk7CisKKwkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgYnVsayBwb3J0ICovCisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQllZGdlX3BvcnQtPmVwX3dyaXRlX3VyYl9pbl91c2UgPSAwOworCQkvLyBUT0RPOiByZXNjaGVkdWxlIGVkZ2Vfc2VuZAorCX0gZWxzZSB7CisJCWVkZ2VfcG9ydC0+aWNvdW50LnR4ICs9IGNvdW50OworCX0KKworCS8qIHdha2V1cCBhbnkgcHJvY2VzcyB3YWl0aW5nIGZvciB3cml0ZXMgdG8gY29tcGxldGUgKi8KKwkvKiB0aGVyZSBpcyBub3cgbW9yZSByb29tIGluIHRoZSBidWZmZXIgZm9yIG5ldyB3cml0ZXMgKi8KKwlpZiAodHR5KSB7CisJCS8qIGxldCB0aGUgdHR5IGRyaXZlciB3YWtldXAgaWYgaXQgaGFzIGEgc3BlY2lhbCB3cml0ZV93YWtldXAgZnVuY3Rpb24gKi8KKwkJdHR5X3dha2V1cCh0dHkpOworCX0KK30KKworc3RhdGljIGludCBlZGdlX3dyaXRlX3Jvb20gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgcm9vbSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKGVkZ2VfcG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoZWRnZV9wb3J0LT5jbG9zZV9wZW5kaW5nID09IDEpCisJCXJldHVybiAtRU5PREVWOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCXJvb20gPSBlZGdlX2J1Zl9zcGFjZV9hdmFpbChlZGdlX3BvcnQtPmVwX291dF9idWYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCisJZGJnKCIlcyAtIHJldHVybnMgJWQiLCBfX0ZVTkNUSU9OX18sIHJvb20pOworCXJldHVybiByb29tOworfQorCitzdGF0aWMgaW50IGVkZ2VfY2hhcnNfaW5fYnVmZmVyIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IGNoYXJzID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoZWRnZV9wb3J0ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCWlmIChlZGdlX3BvcnQtPmNsb3NlX3BlbmRpbmcgPT0gMSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CisJY2hhcnMgPSBlZGdlX2J1Zl9kYXRhX2F2YWlsKGVkZ2VfcG9ydC0+ZXBfb3V0X2J1Zik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CisKKwlkYmcgKCIlcyAtIHJldHVybnMgJWQiLCBfX0ZVTkNUSU9OX18sIGNoYXJzKTsKKwlyZXR1cm4gY2hhcnM7Cit9CisKK3N0YXRpYyB2b2lkIGVkZ2VfdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCWludCBzdGF0dXM7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChlZGdlX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICghdHR5KSB7CisJCWRiZyAoIiVzIC0gbm8gdHR5IGF2YWlsYWJsZSIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFhPTi9YT0ZGLCBzZW5kIHRoZSBzdG9wIGNoYXJhY3RlciAqLworCWlmIChJX0lYT0ZGKHR0eSkpIHsKKwkJdW5zaWduZWQgY2hhciBzdG9wX2NoYXIgPSBTVE9QX0NIQVIodHR5KTsKKwkJc3RhdHVzID0gZWRnZV93cml0ZSAocG9ydCwgJnN0b3BfY2hhciwgMSk7CisJCWlmIChzdGF0dXMgPD0gMCkgeworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgdG8gd3JpdGUgc3RvcCBjaGFyYWN0ZXIsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCX0KKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFJUUy9DVFMsIHN0b3AgcmVhZHMgKi8KKwkvKiBhbmQgdGhlIEVkZ2Vwb3J0IHdpbGwgY2xlYXIgdGhlIFJUUyBsaW5lICovCisJaWYgKENfQ1JUU0NUUyh0dHkpKQorCQlzdG9wX3JlYWQoZWRnZV9wb3J0KTsKKworfQorCitzdGF0aWMgdm9pZCBlZGdlX3VudGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCWludCBzdGF0dXM7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChlZGdlX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICghdHR5KSB7CisJCWRiZyAoIiVzIC0gbm8gdHR5IGF2YWlsYWJsZSIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFhPTi9YT0ZGLCBzZW5kIHRoZSBzdGFydCBjaGFyYWN0ZXIgKi8KKwlpZiAoSV9JWE9GRih0dHkpKSB7CisJCXVuc2lnbmVkIGNoYXIgc3RhcnRfY2hhciA9IFNUQVJUX0NIQVIodHR5KTsKKwkJc3RhdHVzID0gZWRnZV93cml0ZSAocG9ydCwgJnN0YXJ0X2NoYXIsIDEpOworCQlpZiAoc3RhdHVzIDw9IDApIHsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHRvIHdyaXRlIHN0YXJ0IGNoYXJhY3RlciwgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJfQorCX0KKworCS8qIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgUlRTL0NUUywgcmVzdGFydCByZWFkcyAqLworCS8qIGFyZSB0aGUgRWRnZXBvcnQgd2lsbCBhc3NlcnQgdGhlIFJUUyBsaW5lICovCisJaWYgKENfQ1JUU0NUUyh0dHkpKSB7CisJCXN0YXR1cyA9IHJlc3RhcnRfcmVhZChlZGdlX3BvcnQpOworCQlpZiAoc3RhdHVzKQorCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSByZWFkIGJ1bGsgdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggdmFsdWUgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwl9CisKK30KKworc3RhdGljIHZvaWQgc3RvcF9yZWFkKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKworCWlmIChlZGdlX3BvcnQtPmVwX3JlYWRfdXJiX3N0YXRlID09IEVER0VfUkVBRF9VUkJfUlVOTklORykKKwkJZWRnZV9wb3J0LT5lcF9yZWFkX3VyYl9zdGF0ZSA9IEVER0VfUkVBRF9VUkJfU1RPUFBJTkc7CisJZWRnZV9wb3J0LT5zaGFkb3dfbWNyICY9IH5NQ1JfUlRTOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgcmVzdGFydF9yZWFkKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQpCit7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBzdGF0dXMgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CisKKwlpZiAoZWRnZV9wb3J0LT5lcF9yZWFkX3VyYl9zdGF0ZSA9PSBFREdFX1JFQURfVVJCX1NUT1BQRUQpIHsKKwkJdXJiID0gZWRnZV9wb3J0LT5wb3J0LT5yZWFkX3VyYjsKKwkJdXJiLT5jb21wbGV0ZSA9IGVkZ2VfYnVsa19pbl9jYWxsYmFjazsKKwkJdXJiLT5jb250ZXh0ID0gZWRnZV9wb3J0OworCQl1cmItPmRldiA9IGVkZ2VfcG9ydC0+cG9ydC0+c2VyaWFsLT5kZXY7CisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CisJfQorCWVkZ2VfcG9ydC0+ZXBfcmVhZF91cmJfc3RhdGUgPSBFREdFX1JFQURfVVJCX1JVTk5JTkc7CisJZWRnZV9wb3J0LT5zaGFkb3dfbWNyIHw9IE1DUl9SVFM7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIGNoYW5nZV9wb3J0X3NldHRpbmdzIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7CisJc3RydWN0IHVtcF91YXJ0X2NvbmZpZyAqY29uZmlnOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJaW50IGJhdWQ7CisJdW5zaWduZWQgY2ZsYWc7CisJaW50IHN0YXR1czsKKwlpbnQgcG9ydF9udW1iZXIgPSBlZGdlX3BvcnQtPnBvcnQtPm51bWJlciAtIGVkZ2VfcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vcjsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBlZGdlX3BvcnQtPnBvcnQtPm51bWJlcik7CisKKwl0dHkgPSBlZGdlX3BvcnQtPnBvcnQtPnR0eTsKKwlpZiAoKCF0dHkpIHx8CisJICAgICghdHR5LT50ZXJtaW9zKSkgeworCQlkYmcoIiVzIC0gbm8gdHR5IHN0cnVjdHVyZXMiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJY29uZmlnID0ga21hbGxvYyAoc2l6ZW9mICgqY29uZmlnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb25maWcpIHsKKwkJZGV2X2VyciAoJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisKKwljb25maWctPndGbGFncyA9IDA7CisKKwkvKiBUaGVzZSBmbGFncyBtdXN0IGJlIHNldCAqLworCWNvbmZpZy0+d0ZsYWdzIHw9IFVNUF9NQVNLX1VBUlRfRkxBR1NfUkVDRUlWRV9NU19JTlQ7CisJY29uZmlnLT53RmxhZ3MgfD0gVU1QX01BU0tfVUFSVF9GTEFHU19BVVRPX1NUQVJUX09OX0VSUjsKKwljb25maWctPmJVYXJ0TW9kZSA9IChfX3U4KShlZGdlX3BvcnQtPmJVYXJ0TW9kZSk7CisKKwlzd2l0Y2ggKGNmbGFnICYgQ1NJWkUpIHsKKwkJY2FzZSBDUzU6CisJCQkgICAgY29uZmlnLT5iRGF0YUJpdHMgPSBVTVBfVUFSVF9DSEFSNUJJVFM7CisJCQkgICAgZGJnICgiJXMgLSBkYXRhIGJpdHMgPSA1IiwgX19GVU5DVElPTl9fKTsKKwkJCSAgICBicmVhazsKKwkJY2FzZSBDUzY6CisJCQkgICAgY29uZmlnLT5iRGF0YUJpdHMgPSBVTVBfVUFSVF9DSEFSNkJJVFM7CisJCQkgICAgZGJnICgiJXMgLSBkYXRhIGJpdHMgPSA2IiwgX19GVU5DVElPTl9fKTsKKwkJCSAgICBicmVhazsKKwkJY2FzZSBDUzc6CisJCQkgICAgY29uZmlnLT5iRGF0YUJpdHMgPSBVTVBfVUFSVF9DSEFSN0JJVFM7CisJCQkgICAgZGJnICgiJXMgLSBkYXRhIGJpdHMgPSA3IiwgX19GVU5DVElPTl9fKTsKKwkJCSAgICBicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSBDUzg6CisJCQkgICAgY29uZmlnLT5iRGF0YUJpdHMgPSBVTVBfVUFSVF9DSEFSOEJJVFM7CisJCQkgICAgZGJnICgiJXMgLSBkYXRhIGJpdHMgPSA4IiwgX19GVU5DVElPTl9fKTsKKwkJCSAgICBicmVhazsKKwl9CisKKwlpZiAoY2ZsYWcgJiBQQVJFTkIpIHsKKwkJaWYgKGNmbGFnICYgUEFST0REKSB7CisJCQljb25maWctPndGbGFncyB8PSBVTVBfTUFTS19VQVJUX0ZMQUdTX1BBUklUWTsKKwkJCWNvbmZpZy0+YlBhcml0eSA9IFVNUF9VQVJUX09ERFBBUklUWTsKKwkJCWRiZygiJXMgLSBwYXJpdHkgPSBvZGQiLCBfX0ZVTkNUSU9OX18pOworCQl9IGVsc2UgeworCQkJY29uZmlnLT53RmxhZ3MgfD0gVU1QX01BU0tfVUFSVF9GTEFHU19QQVJJVFk7CisJCQljb25maWctPmJQYXJpdHkgPSBVTVBfVUFSVF9FVkVOUEFSSVRZOworCQkJZGJnKCIlcyAtIHBhcml0eSA9IGV2ZW4iLCBfX0ZVTkNUSU9OX18pOworCQl9CisJfSBlbHNlIHsKKwkJY29uZmlnLT5iUGFyaXR5ID0gVU1QX1VBUlRfTk9QQVJJVFk7IAkKKwkJZGJnKCIlcyAtIHBhcml0eSA9IG5vbmUiLCBfX0ZVTkNUSU9OX18pOworCX0KKworCWlmIChjZmxhZyAmIENTVE9QQikgeworCQljb25maWctPmJTdG9wQml0cyA9IFVNUF9VQVJUX1NUT1BCSVQyOworCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMiIsIF9fRlVOQ1RJT05fXyk7CisJfSBlbHNlIHsKKwkJY29uZmlnLT5iU3RvcEJpdHMgPSBVTVBfVUFSVF9TVE9QQklUMTsKKwkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDEiLCBfX0ZVTkNUSU9OX18pOworCX0KKworCS8qIGZpZ3VyZSBvdXQgdGhlIGZsb3cgY29udHJvbCBzZXR0aW5ncyAqLworCWlmIChjZmxhZyAmIENSVFNDVFMpIHsKKwkJY29uZmlnLT53RmxhZ3MgfD0gVU1QX01BU0tfVUFSVF9GTEFHU19PVVRfWF9DVFNfRkxPVzsKKwkJY29uZmlnLT53RmxhZ3MgfD0gVU1QX01BU0tfVUFSVF9GTEFHU19SVFNfRkxPVzsKKwkJZGJnKCIlcyAtIFJUUy9DVFMgaXMgZW5hYmxlZCIsIF9fRlVOQ1RJT05fXyk7CisJfSBlbHNlIHsKKwkJZGJnKCIlcyAtIFJUUy9DVFMgaXMgZGlzYWJsZWQiLCBfX0ZVTkNUSU9OX18pOworCQl0dHktPmh3X3N0b3BwZWQgPSAwOworCQlyZXN0YXJ0X3JlYWQoZWRnZV9wb3J0KTsKKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFhPTi9YT0ZGLCBzZXQgdGhlIHN0YXJ0IGFuZCBzdG9wIGNoYXJhY3RlciBpbiB0aGUgZGV2aWNlICovCisJaWYgKElfSVhPRkYodHR5KSB8fCBJX0lYT04odHR5KSkgeworCQljb25maWctPmNYb24gID0gU1RBUlRfQ0hBUih0dHkpOworCQljb25maWctPmNYb2ZmID0gU1RPUF9DSEFSKHR0eSk7CisKKwkJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBJTkJPVU5EIFhPTi9YT0ZGICovCisJCWlmIChJX0lYT0ZGKHR0eSkpIHsKKwkJCWNvbmZpZy0+d0ZsYWdzIHw9IFVNUF9NQVNLX1VBUlRfRkxBR1NfSU5fWDsKKwkJCWRiZyAoIiVzIC0gSU5CT1VORCBYT04vWE9GRiBpcyBlbmFibGVkLCBYT04gPSAlMngsIFhPRkYgPSAlMngiLAorCQkJICAgICBfX0ZVTkNUSU9OX18sIGNvbmZpZy0+Y1hvbiwgY29uZmlnLT5jWG9mZik7CisJCX0gZWxzZSB7CisJCQlkYmcgKCIlcyAtIElOQk9VTkQgWE9OL1hPRkYgaXMgZGlzYWJsZWQiLCBfX0ZVTkNUSU9OX18pOworCQl9CisKKwkJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBPVVRCT1VORCBYT04vWE9GRiAqLworCQlpZiAoSV9JWE9OKHR0eSkpIHsKKwkJCWNvbmZpZy0+d0ZsYWdzIHw9IFVNUF9NQVNLX1VBUlRfRkxBR1NfT1VUX1g7CisJCQlkYmcgKCIlcyAtIE9VVEJPVU5EIFhPTi9YT0ZGIGlzIGVuYWJsZWQsIFhPTiA9ICUyeCwgWE9GRiA9ICUyeCIsCisJCQkgICAgIF9fRlVOQ1RJT05fXywgY29uZmlnLT5jWG9uLCBjb25maWctPmNYb2ZmKTsKKwkJfSBlbHNlIHsKKwkJCWRiZyAoIiVzIC0gT1VUQk9VTkQgWE9OL1hPRkYgaXMgZGlzYWJsZWQiLCBfX0ZVTkNUSU9OX18pOworCQl9CisJfQorCisJLyogUm91bmQgdGhlIGJhdWQgcmF0ZSAqLworCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOworCWlmICghYmF1ZCkgeworCQkvKiBwaWNrIGEgZGVmYXVsdCwgYW55IGRlZmF1bHQuLi4gKi8KKwkJYmF1ZCA9IDk2MDA7CisJfQorCWVkZ2VfcG9ydC0+YmF1ZF9yYXRlID0gYmF1ZDsKKwljb25maWctPndCYXVkUmF0ZSA9IChfX3UxNikoKDQ2MTU1MEwgKyBiYXVkLzIpIC8gYmF1ZCk7CisKKwlkYmcgKCIlcyAtIGJhdWQgcmF0ZSA9ICVkLCB3QmF1ZFJhdGUgPSAlZCIsIF9fRlVOQ1RJT05fXywgYmF1ZCwgY29uZmlnLT53QmF1ZFJhdGUpOworCisJZGJnICgid0JhdWRSYXRlOiAgICVkIiwgKGludCkoNDYxNTUwTCAvIGNvbmZpZy0+d0JhdWRSYXRlKSk7CisJZGJnICgid0ZsYWdzOiAgICAweCV4IiwgY29uZmlnLT53RmxhZ3MpOworCWRiZyAoImJEYXRhQml0czogICAlZCIsIGNvbmZpZy0+YkRhdGFCaXRzKTsKKwlkYmcgKCJiUGFyaXR5OiAgICAgJWQiLCBjb25maWctPmJQYXJpdHkpOworCWRiZyAoImJTdG9wQml0czogICAlZCIsIGNvbmZpZy0+YlN0b3BCaXRzKTsKKwlkYmcgKCJjWG9uOiAgICAgICAgJWQiLCBjb25maWctPmNYb24pOworCWRiZyAoImNYb2ZmOiAgICAgICAlZCIsIGNvbmZpZy0+Y1hvZmYpOworCWRiZyAoImJVYXJ0TW9kZTogICAlZCIsIGNvbmZpZy0+YlVhcnRNb2RlKTsKKworCS8qIG1vdmUgdGhlIHdvcmQgdmFsdWVzIGludG8gYmlnIGVuZGlhbiBtb2RlICovCisJY3B1X3RvX2JlMTZzICgmY29uZmlnLT53RmxhZ3MpOworCWNwdV90b19iZTE2cyAoJmNvbmZpZy0+d0JhdWRSYXRlKTsKKworCXN0YXR1cyA9IFRJV3JpdGVDb21tYW5kU3luYyAoZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPmRldiwKKwkJCQlVTVBDX1NFVF9DT05GSUcsCisJCQkJKF9fdTgpKFVNUE1fVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwKKwkJCQkwLAorCQkJCShfX3U4ICopY29uZmlnLAorCQkJCXNpemVvZigqY29uZmlnKSk7CisJaWYgKHN0YXR1cykgeworCQlkYmcgKCIlcyAtIGVycm9yICVkIHdoZW4gdHJ5aW5nIHRvIHdyaXRlIGNvbmZpZyB0byBkZXZpY2UiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwl9CisKKwlrZnJlZSAoY29uZmlnKTsKKwkKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGVkZ2Vfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CisJdW5zaWduZWQgaW50IGNmbGFnOworCisJaWYgKCFwb3J0LT50dHkgfHwgIXBvcnQtPnR0eS0+dGVybWlvcykgeworCQlkYmcgKCIlcyAtIG5vIHR0eSBvciB0ZXJtaW9zIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCS8qIGNoZWNrIHRoYXQgdGhleSByZWFsbHkgd2FudCB1cyB0byBjaGFuZ2Ugc29tZXRoaW5nICovCisJaWYgKG9sZF90ZXJtaW9zKSB7CisJCWlmIChjZmxhZyA9PSBvbGRfdGVybWlvcy0+Y19jZmxhZyAmJgorCQkgICAgdHR5LT50ZXJtaW9zLT5jX2lmbGFnID09IG9sZF90ZXJtaW9zLT5jX2lmbGFnKSB7CisJCQlkYmcgKCIlcyAtIG5vdGhpbmcgdG8gY2hhbmdlIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWRiZygiJXMgLSBjbGZhZyAlMDh4IGlmbGFnICUwOHgiLCBfX0ZVTkNUSU9OX18sIAorCSAgICB0dHktPnRlcm1pb3MtPmNfY2ZsYWcsIHR0eS0+dGVybWlvcy0+Y19pZmxhZyk7CisJaWYgKG9sZF90ZXJtaW9zKSB7CisJCWRiZygiJXMgLSBvbGQgY2xmYWcgJTA4eCBvbGQgaWZsYWcgJTA4eCIsIF9fRlVOQ1RJT05fXywKKwkJICAgIG9sZF90ZXJtaW9zLT5jX2NmbGFnLCBvbGRfdGVybWlvcy0+Y19pZmxhZyk7CisJfQorCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoZWRnZV9wb3J0ID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIGNoYW5nZSB0aGUgcG9ydCBzZXR0aW5ncyB0byB0aGUgbmV3IG9uZXMgc3BlY2lmaWVkICovCisJY2hhbmdlX3BvcnRfc2V0dGluZ3MgKGVkZ2VfcG9ydCwgb2xkX3Rlcm1pb3MpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGVkZ2VfdGlvY21zZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBpbnQgbWNyOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwltY3IgPSBlZGdlX3BvcnQtPnNoYWRvd19tY3I7CisJaWYgKHNldCAmIFRJT0NNX1JUUykKKwkJbWNyIHw9IE1DUl9SVFM7CisJaWYgKHNldCAmIFRJT0NNX0RUUikKKwkJbWNyIHw9IE1DUl9EVFI7CisJaWYgKHNldCAmIFRJT0NNX0xPT1ApCisJCW1jciB8PSBNQ1JfTE9PUEJBQ0s7CisKKwlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpCisJCW1jciAmPSB+TUNSX1JUUzsKKwlpZiAoY2xlYXIgJiBUSU9DTV9EVFIpCisJCW1jciAmPSB+TUNSX0RUUjsKKwlpZiAoY2xlYXIgJiBUSU9DTV9MT09QKQorCQltY3IgJj0gfk1DUl9MT09QQkFDSzsKKworCWVkZ2VfcG9ydC0+c2hhZG93X21jciA9IG1jcjsKKworCVRJUmVzdG9yZU1DUiAoZWRnZV9wb3J0LCBtY3IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZWRnZV90aW9jbWdldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOworCXVuc2lnbmVkIGludCBtc3I7CisJdW5zaWduZWQgaW50IG1jcjsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJbXNyID0gZWRnZV9wb3J0LT5zaGFkb3dfbXNyOworCW1jciA9IGVkZ2VfcG9ydC0+c2hhZG93X21jcjsKKwlyZXN1bHQgPSAoKG1jciAmIE1DUl9EVFIpCT8gVElPQ01fRFRSOiAwKQkgIC8qIDB4MDAyICovCisJCSAgfCAoKG1jciAmIE1DUl9SVFMpCT8gVElPQ01fUlRTOiAwKSAgIC8qIDB4MDA0ICovCisJCSAgfCAoKG1zciAmIEVER0VQT1JUX01TUl9DVFMpCT8gVElPQ01fQ1RTOiAwKSAgIC8qIDB4MDIwICovCisJCSAgfCAoKG1zciAmIEVER0VQT1JUX01TUl9DRCkJPyBUSU9DTV9DQVI6IDApICAgLyogMHgwNDAgKi8KKwkJICB8ICgobXNyICYgRURHRVBPUlRfTVNSX1JJKQk/IFRJT0NNX1JJOiAgMCkgICAvKiAweDA4MCAqLworCQkgIHwgKChtc3IgJiBFREdFUE9SVF9NU1JfRFNSKQk/IFRJT0NNX0RTUjogMCk7ICAvKiAweDEwMCAqLworCisKKwlkYmcoIiVzIC0tICV4IiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBnZXRfc2VyaWFsX2luZm8gKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqcmV0aW5mbykKK3sKKwlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCB0bXA7CisKKwlpZiAoIXJldGluZm8pCisJCXJldHVybiAtRUZBVUxUOworCisJbWVtc2V0KCZ0bXAsIDAsIHNpemVvZih0bXApKTsKKworCXRtcC50eXBlCQk9IFBPUlRfMTY1NTBBOworCXRtcC5saW5lCQk9IGVkZ2VfcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vcjsKKwl0bXAucG9ydAkJPSBlZGdlX3BvcnQtPnBvcnQtPm51bWJlcjsKKwl0bXAuaXJxCQkJPSAwOworCXRtcC5mbGFncwkJPSBBU1lOQ19TS0lQX1RFU1QgfCBBU1lOQ19BVVRPX0lSUTsKKwl0bXAueG1pdF9maWZvX3NpemUJPSBlZGdlX3BvcnQtPnBvcnQtPmJ1bGtfb3V0X3NpemU7CisJdG1wLmJhdWRfYmFzZQkJPSA5NjAwOworCXRtcC5jbG9zZV9kZWxheQkJPSA1KkhaOworCXRtcC5jbG9zaW5nX3dhaXQJPSBjbG9zaW5nX3dhaXQ7CisvLwl0bXAuY3VzdG9tX2Rpdmlzb3IJPSBzdGF0ZS0+Y3VzdG9tX2Rpdmlzb3I7CisvLwl0bXAuaHViNgkJPSBzdGF0ZS0+aHViNjsKKy8vCXRtcC5pb190eXBlCQk9IHN0YXRlLT5pb190eXBlOworCisKKwlpZiAoY29weV90b191c2VyKHJldGluZm8sICZ0bXAsIHNpemVvZigqcmV0aW5mbykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlZGdlX2lvY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgYXN5bmNfaWNvdW50IGNub3c7CisJc3RydWN0IGFzeW5jX2ljb3VudCBjcHJldjsKKworCWRiZygiJXMgLSBwb3J0ICVkLCBjbWQgPSAweCV4IiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIGNtZCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCQljYXNlIFRJT0NJTlE6CisJCQlkYmcoIiVzIC0gKCVkKSBUSU9DSU5RIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworLy8JCQlyZXR1cm4gZ2V0X251bWJlcl9ieXRlc19hdmFpbChlZGdlX3BvcnQsICh1bnNpZ25lZCBpbnQgKikgYXJnKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVElPQ1NFUkdFVExTUjoKKwkJCWRiZygiJXMgLSAoJWQpIFRJT0NTRVJHRVRMU1IiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisvLwkJCXJldHVybiBnZXRfbHNyX2luZm8oZWRnZV9wb3J0LCAodW5zaWduZWQgaW50ICopIGFyZyk7CisJCQlicmVhazsKKworCQljYXNlIFRJT0NHU0VSSUFMOgorCQkJZGJnKCIlcyAtICglZCkgVElPQ0dTRVJJQUwiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCQlyZXR1cm4gZ2V0X3NlcmlhbF9pbmZvKGVkZ2VfcG9ydCwgKHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqKSBhcmcpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUSU9DU1NFUklBTDoKKwkJCWRiZygiJXMgLSAoJWQpIFRJT0NTU0VSSUFMIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUSU9DTUlXQUlUOgorCQkJZGJnKCIlcyAtICglZCkgVElPQ01JV0FJVCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkJCWNwcmV2ID0gZWRnZV9wb3J0LT5pY291bnQ7CisJCQl3aGlsZSAoMSkgeworCQkJCWludGVycnVwdGlibGVfc2xlZXBfb24oJmVkZ2VfcG9ydC0+ZGVsdGFfbXNyX3dhaXQpOworCQkJCS8qIHNlZSBpZiBhIHNpZ25hbCBkaWQgaXQgKi8KKwkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCQkJY25vdyA9IGVkZ2VfcG9ydC0+aWNvdW50OworCQkJCWlmIChjbm93LnJuZyA9PSBjcHJldi5ybmcgJiYgY25vdy5kc3IgPT0gY3ByZXYuZHNyICYmCisJCQkJICAgIGNub3cuZGNkID09IGNwcmV2LmRjZCAmJiBjbm93LmN0cyA9PSBjcHJldi5jdHMpCisJCQkJCXJldHVybiAtRUlPOyAvKiBubyBjaGFuZ2UgPT4gZXJyb3IgKi8KKwkJCQlpZiAoKChhcmcgJiBUSU9DTV9STkcpICYmIChjbm93LnJuZyAhPSBjcHJldi5ybmcpKSB8fAorCQkJCSAgICAoKGFyZyAmIFRJT0NNX0RTUikgJiYgKGNub3cuZHNyICE9IGNwcmV2LmRzcikpIHx8CisJCQkJICAgICgoYXJnICYgVElPQ01fQ0QpICAmJiAoY25vdy5kY2QgIT0gY3ByZXYuZGNkKSkgfHwKKwkJCQkgICAgKChhcmcgJiBUSU9DTV9DVFMpICYmIChjbm93LmN0cyAhPSBjcHJldi5jdHMpKSApIHsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJCWNwcmV2ID0gY25vdzsKKwkJCX0KKwkJCS8qIG5vdCByZWFjaGVkICovCisJCQlicmVhazsKKworCQljYXNlIFRJT0NHSUNPVU5UOgorCQkJZGJnICgiJXMgLSAoJWQpIFRJT0NHSUNPVU5UIFJYPSVkLCBUWD0lZCIsIF9fRlVOQ1RJT05fXywKKwkJCSAgICAgcG9ydC0+bnVtYmVyLCBlZGdlX3BvcnQtPmljb3VudC5yeCwgZWRnZV9wb3J0LT5pY291bnQudHgpOworCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZlZGdlX3BvcnQtPmljb3VudCwgc2l6ZW9mKGVkZ2VfcG9ydC0+aWNvdW50KSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCitzdGF0aWMgdm9pZCBlZGdlX2JyZWFrIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgc3RhdHVzOworCisJZGJnICgiJXMgLSBzdGF0ZSA9ICVkIiwgX19GVU5DVElPTl9fLCBicmVha19zdGF0ZSk7CisKKwkvKiBjaGFzZSB0aGUgcG9ydCBjbG9zZSAqLworCVRJQ2hhc2VQb3J0IChlZGdlX3BvcnQsIDAsIDApOworCisJaWYgKGJyZWFrX3N0YXRlID09IC0xKSB7CisJCXN0YXR1cyA9IFRJU2V0QnJlYWsgKGVkZ2VfcG9ydCk7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gVElDbGVhckJyZWFrIChlZGdlX3BvcnQpOworCX0KKwlpZiAoc3RhdHVzKSB7CisJCWRiZyAoIiVzIC0gZXJyb3IgJWQgc2VuZGluZyBicmVhayBzZXQvY2xlYXIgY29tbWFuZC4iLAorCQkgICAgIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZWRnZV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsOworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQ7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKwlpbnQgc3RhdHVzOworCWludCBpOworCisJZGV2ID0gc2VyaWFsLT5kZXY7CisKKwkvKiBjcmVhdGUgb3VyIHByaXZhdGUgc2VyaWFsIHN0cnVjdHVyZSAqLworCWVkZ2Vfc2VyaWFsID0ga21hbGxvYyAoc2l6ZW9mKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZWRnZV9zZXJpYWwgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0IChlZGdlX3NlcmlhbCwgMCwgc2l6ZW9mKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwpKTsKKwlzZW1hX2luaXQoJmVkZ2Vfc2VyaWFsLT5lc19zZW0sIDEpOworCWVkZ2Vfc2VyaWFsLT5zZXJpYWwgPSBzZXJpYWw7CisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIGVkZ2Vfc2VyaWFsKTsKKworCXN0YXR1cyA9IFRJRG93bmxvYWRGaXJtd2FyZSAoZWRnZV9zZXJpYWwpOworCWlmIChzdGF0dXMpIHsKKwkJa2ZyZWUgKGVkZ2Vfc2VyaWFsKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwkvKiBzZXQgdXAgb3VyIHBvcnQgcHJpdmF0ZSBzdHJ1Y3R1cmVzICovCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJZWRnZV9wb3J0ID0ga21hbGxvYyAoc2l6ZW9mKHN0cnVjdCBlZGdlcG9ydF9wb3J0KSwgR0ZQX0tFUk5FTCk7CisJCWlmIChlZGdlX3BvcnQgPT0gTlVMTCkgeworCQkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzIC0gT3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQltZW1zZXQgKGVkZ2VfcG9ydCwgMCwgc2l6ZW9mKHN0cnVjdCBlZGdlcG9ydF9wb3J0KSk7CisJCXNwaW5fbG9ja19pbml0KCZlZGdlX3BvcnQtPmVwX2xvY2spOworCQllZGdlX3BvcnQtPmVwX291dF9idWYgPSBlZGdlX2J1Zl9hbGxvYyhFREdFX09VVF9CVUZfU0laRSk7CisJCWlmIChlZGdlX3BvcnQtPmVwX291dF9idWYgPT0gTlVMTCkgeworCQkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzIC0gT3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCWtmcmVlKGVkZ2VfcG9ydCk7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJZWRnZV9wb3J0LT5wb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQllZGdlX3BvcnQtPmVkZ2Vfc2VyaWFsID0gZWRnZV9zZXJpYWw7CisJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIGVkZ2VfcG9ydCk7CisJCWVkZ2VfcG9ydC0+YlVhcnRNb2RlID0gMDsJLyogRGVmYXVsdCBpcyBSUzIzMiAqLworCX0KKwkKKwlyZXR1cm4gMDsKKworY2xlYW51cDoKKwlmb3IgKC0taTsgaT49MDsgLS1pKSB7CisJCWVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pOworCQllZGdlX2J1Zl9mcmVlKGVkZ2VfcG9ydC0+ZXBfb3V0X2J1Zik7CisJCWtmcmVlKGVkZ2VfcG9ydCk7CisJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIE5VTEwpOworCX0KKwlrZnJlZSAoZWRnZV9zZXJpYWwpOworCXVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCBOVUxMKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgZWRnZV9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0OworCisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJZm9yIChpPTA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCWVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pOworCQlpZiAoZWRnZV9wb3J0KSB7CisJCQllZGdlX2J1Zl9mcmVlKGVkZ2VfcG9ydC0+ZXBfb3V0X2J1Zik7CisJCQlrZnJlZShlZGdlX3BvcnQpOworCQl9CisJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIE5VTEwpOworCX0KKwlrZnJlZSAodXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpKTsKKwl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgTlVMTCk7Cit9CisKKworLyogQ2lyY3VsYXIgQnVmZmVyICovCisKKy8qCisgKiBlZGdlX2J1Zl9hbGxvYworICoKKyAqIEFsbG9jYXRlIGEgY2lyY3VsYXIgYnVmZmVyIGFuZCBhbGwgYXNzb2NpYXRlZCBtZW1vcnkuCisgKi8KKworc3RhdGljIHN0cnVjdCBlZGdlX2J1ZiAqZWRnZV9idWZfYWxsb2ModW5zaWduZWQgaW50IHNpemUpCit7CisJc3RydWN0IGVkZ2VfYnVmICplYjsKKworCisJaWYgKHNpemUgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwllYiA9IChzdHJ1Y3QgZWRnZV9idWYgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZWRnZV9idWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZWIgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwllYi0+YnVmX2J1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKGViLT5idWZfYnVmID09IE5VTEwpIHsKKwkJa2ZyZWUoZWIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwllYi0+YnVmX3NpemUgPSBzaXplOworCWViLT5idWZfZ2V0ID0gZWItPmJ1Zl9wdXQgPSBlYi0+YnVmX2J1ZjsKKworCXJldHVybiBlYjsKK30KKworCisvKgorICogZWRnZV9idWZfZnJlZQorICoKKyAqIEZyZWUgdGhlIGJ1ZmZlciBhbmQgYWxsIGFzc29jaWF0ZWQgbWVtb3J5LgorICovCisKK3ZvaWQgZWRnZV9idWZfZnJlZShzdHJ1Y3QgZWRnZV9idWYgKmViKQoreworCWlmIChlYiAhPSBOVUxMKSB7CisJCWlmIChlYi0+YnVmX2J1ZiAhPSBOVUxMKQorCQkJa2ZyZWUoZWItPmJ1Zl9idWYpOworCQlrZnJlZShlYik7CisJfQorfQorCisKKy8qCisgKiBlZGdlX2J1Zl9jbGVhcgorICoKKyAqIENsZWFyIG91dCBhbGwgZGF0YSBpbiB0aGUgY2lyY3VsYXIgYnVmZmVyLgorICovCisKK3N0YXRpYyB2b2lkIGVkZ2VfYnVmX2NsZWFyKHN0cnVjdCBlZGdlX2J1ZiAqZWIpCit7CisgICAgICAgIGlmIChlYiAhPSBOVUxMKQorICAgICAgICAgICAgICAgIGViLT5idWZfZ2V0ID0gZWItPmJ1Zl9wdXQ7CisgICAgICAgICAgICAgICAgLyogZXF1aXZhbGVudCB0byBhIGdldCBvZiBhbGwgZGF0YSBhdmFpbGFibGUgKi8KK30KKworCisvKgorICogZWRnZV9idWZfZGF0YV9hdmFpbAorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEgYXZhaWxhYmxlIGluIHRoZSBjaXJjdWxhcgorICogYnVmZmVyLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZWRnZV9idWZfZGF0YV9hdmFpbChzdHJ1Y3QgZWRnZV9idWYgKmViKQoreworCWlmIChlYiAhPSBOVUxMKQorCQlyZXR1cm4gKChlYi0+YnVmX3NpemUgKyBlYi0+YnVmX3B1dCAtIGViLT5idWZfZ2V0KSAlIGViLT5idWZfc2l6ZSk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworCisvKgorICogZWRnZV9idWZfc3BhY2VfYXZhaWwKKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBvZiBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGNpcmN1bGFyCisgKiBidWZmZXIuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBlZGdlX2J1Zl9zcGFjZV9hdmFpbChzdHJ1Y3QgZWRnZV9idWYgKmViKQoreworCWlmIChlYiAhPSBOVUxMKQorCQlyZXR1cm4gKChlYi0+YnVmX3NpemUgKyBlYi0+YnVmX2dldCAtIGViLT5idWZfcHV0IC0gMSkgJSBlYi0+YnVmX3NpemUpOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIGVkZ2VfYnVmX3B1dAorICoKKyAqIENvcHkgZGF0YSBkYXRhIGZyb20gYSB1c2VyIGJ1ZmZlciBhbmQgcHV0IGl0IGludG8gdGhlIGNpcmN1bGFyIGJ1ZmZlci4KKyAqIFJlc3RyaWN0IHRvIHRoZSBhbW91bnQgb2Ygc3BhY2UgYXZhaWxhYmxlLgorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IGVkZ2VfYnVmX3B1dChzdHJ1Y3QgZWRnZV9idWYgKmViLCBjb25zdCBjaGFyICpidWYsCisJdW5zaWduZWQgaW50IGNvdW50KQoreworCXVuc2lnbmVkIGludCBsZW47CisKKworCWlmIChlYiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWxlbiAgPSBlZGdlX2J1Zl9zcGFjZV9hdmFpbChlYik7CisJaWYgKGNvdW50ID4gbGVuKQorCQljb3VudCA9IGxlbjsKKworCWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IGViLT5idWZfYnVmICsgZWItPmJ1Zl9zaXplIC0gZWItPmJ1Zl9wdXQ7CisJaWYgKGNvdW50ID4gbGVuKSB7CisJCW1lbWNweShlYi0+YnVmX3B1dCwgYnVmLCBsZW4pOworCQltZW1jcHkoZWItPmJ1Zl9idWYsIGJ1ZitsZW4sIGNvdW50IC0gbGVuKTsKKwkJZWItPmJ1Zl9wdXQgPSBlYi0+YnVmX2J1ZiArIGNvdW50IC0gbGVuOworCX0gZWxzZSB7CisJCW1lbWNweShlYi0+YnVmX3B1dCwgYnVmLCBjb3VudCk7CisJCWlmIChjb3VudCA8IGxlbikKKwkJCWViLT5idWZfcHV0ICs9IGNvdW50OworCQllbHNlIC8qIGNvdW50ID09IGxlbiAqLworCQkJZWItPmJ1Zl9wdXQgPSBlYi0+YnVmX2J1ZjsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKworLyoKKyAqIGVkZ2VfYnVmX2dldAorICoKKyAqIEdldCBkYXRhIGZyb20gdGhlIGNpcmN1bGFyIGJ1ZmZlciBhbmQgY29weSB0byB0aGUgZ2l2ZW4gYnVmZmVyLgorICogUmVzdHJpY3QgdG8gdGhlIGFtb3VudCBvZiBkYXRhIGF2YWlsYWJsZS4KKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBlZGdlX2J1Zl9nZXQoc3RydWN0IGVkZ2VfYnVmICplYiwgY2hhciAqYnVmLAorCXVuc2lnbmVkIGludCBjb3VudCkKK3sKKwl1bnNpZ25lZCBpbnQgbGVuOworCisKKwlpZiAoZWIgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBlZGdlX2J1Zl9kYXRhX2F2YWlsKGViKTsKKwlpZiAoY291bnQgPiBsZW4pCisJCWNvdW50ID0gbGVuOworCisJaWYgKGNvdW50ID09IDApCisJCXJldHVybiAwOworCisJbGVuID0gZWItPmJ1Zl9idWYgKyBlYi0+YnVmX3NpemUgLSBlYi0+YnVmX2dldDsKKwlpZiAoY291bnQgPiBsZW4pIHsKKwkJbWVtY3B5KGJ1ZiwgZWItPmJ1Zl9nZXQsIGxlbik7CisJCW1lbWNweShidWYrbGVuLCBlYi0+YnVmX2J1ZiwgY291bnQgLSBsZW4pOworCQllYi0+YnVmX2dldCA9IGViLT5idWZfYnVmICsgY291bnQgLSBsZW47CisJfSBlbHNlIHsKKwkJbWVtY3B5KGJ1ZiwgZWItPmJ1Zl9nZXQsIGNvdW50KTsKKwkJaWYgKGNvdW50IDwgbGVuKQorCQkJZWItPmJ1Zl9nZXQgKz0gY291bnQ7CisJCWVsc2UgLyogY291bnQgPT0gbGVuICovCisJCQllYi0+YnVmX2dldCA9IGViLT5idWZfYnVmOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZWRnZXBvcnRfMXBvcnRfZGV2aWNlID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCQk9ICJFZGdlcG9ydCBUSSAxIHBvcnQgYWRhcHRlciIsCisJLnNob3J0X25hbWUJCT0gImVkZ2Vwb3J0X3RpXzEiLAorCS5pZF90YWJsZQkJPSBlZGdlcG9ydF8xcG9ydF9pZF90YWJsZSwKKwkubnVtX2ludGVycnVwdF9pbgk9IDEsCisJLm51bV9idWxrX2luCQk9IDEsCisJLm51bV9idWxrX291dAkJPSAxLAorCS5udW1fcG9ydHMJCT0gMSwKKwkub3BlbgkJCT0gZWRnZV9vcGVuLAorCS5jbG9zZQkJCT0gZWRnZV9jbG9zZSwKKwkudGhyb3R0bGUJCT0gZWRnZV90aHJvdHRsZSwKKwkudW50aHJvdHRsZQkJPSBlZGdlX3VudGhyb3R0bGUsCisJLmF0dGFjaAkJCT0gZWRnZV9zdGFydHVwLAorCS5zaHV0ZG93bgkJPSBlZGdlX3NodXRkb3duLAorCS5pb2N0bAkJCT0gZWRnZV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MJCT0gZWRnZV9zZXRfdGVybWlvcywKKwkudGlvY21nZXQJCT0gZWRnZV90aW9jbWdldCwKKwkudGlvY21zZXQJCT0gZWRnZV90aW9jbXNldCwKKwkud3JpdGUJCQk9IGVkZ2Vfd3JpdGUsCisJLndyaXRlX3Jvb20JCT0gZWRnZV93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIJPSBlZGdlX2NoYXJzX2luX2J1ZmZlciwKKwkuYnJlYWtfY3RsCQk9IGVkZ2VfYnJlYWssCisJLnJlYWRfaW50X2NhbGxiYWNrCT0gZWRnZV9pbnRlcnJ1cHRfY2FsbGJhY2ssCisJLnJlYWRfYnVsa19jYWxsYmFjawk9IGVkZ2VfYnVsa19pbl9jYWxsYmFjaywKKwkud3JpdGVfYnVsa19jYWxsYmFjawk9IGVkZ2VfYnVsa19vdXRfY2FsbGJhY2ssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZWRnZXBvcnRfMnBvcnRfZGV2aWNlID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCQk9ICJFZGdlcG9ydCBUSSAyIHBvcnQgYWRhcHRlciIsCisJLnNob3J0X25hbWUJCT0gImVkZ2Vwb3J0X3RpXzIiLAorCS5pZF90YWJsZQkJPSBlZGdlcG9ydF8ycG9ydF9pZF90YWJsZSwKKwkubnVtX2ludGVycnVwdF9pbgk9IDEsCisJLm51bV9idWxrX2luCQk9IDIsCisJLm51bV9idWxrX291dAkJPSAyLAorCS5udW1fcG9ydHMJCT0gMiwKKwkub3BlbgkJCT0gZWRnZV9vcGVuLAorCS5jbG9zZQkJCT0gZWRnZV9jbG9zZSwKKwkudGhyb3R0bGUJCT0gZWRnZV90aHJvdHRsZSwKKwkudW50aHJvdHRsZQkJPSBlZGdlX3VudGhyb3R0bGUsCisJLmF0dGFjaAkJCT0gZWRnZV9zdGFydHVwLAorCS5zaHV0ZG93bgkJPSBlZGdlX3NodXRkb3duLAorCS5pb2N0bAkJCT0gZWRnZV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MJCT0gZWRnZV9zZXRfdGVybWlvcywKKwkudGlvY21nZXQJCT0gZWRnZV90aW9jbWdldCwKKwkudGlvY21zZXQJCT0gZWRnZV90aW9jbXNldCwKKwkud3JpdGUJCQk9IGVkZ2Vfd3JpdGUsCisJLndyaXRlX3Jvb20JCT0gZWRnZV93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIJPSBlZGdlX2NoYXJzX2luX2J1ZmZlciwKKwkuYnJlYWtfY3RsCQk9IGVkZ2VfYnJlYWssCisJLnJlYWRfaW50X2NhbGxiYWNrCT0gZWRnZV9pbnRlcnJ1cHRfY2FsbGJhY2ssCisJLnJlYWRfYnVsa19jYWxsYmFjawk9IGVkZ2VfYnVsa19pbl9jYWxsYmFjaywKKwkud3JpdGVfYnVsa19jYWxsYmFjawk9IGVkZ2VfYnVsa19vdXRfY2FsbGJhY2ssCit9OworCisKK3N0YXRpYyBpbnQgX19pbml0IGVkZ2Vwb3J0X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmVkZ2Vwb3J0XzFwb3J0X2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfMXBvcnRfZGV2aWNlX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmVkZ2Vwb3J0XzJwb3J0X2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfMnBvcnRfZGV2aWNlX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmaW9fZHJpdmVyKTsKKwlpZiAocmV0dmFsKSAKKwkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOworCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlyZXR1cm4gMDsKK2ZhaWxlZF91c2JfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZlZGdlcG9ydF8ycG9ydF9kZXZpY2UpOworZmFpbGVkXzJwb3J0X2RldmljZV9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmVkZ2Vwb3J0XzFwb3J0X2RldmljZSk7CitmYWlsZWRfMXBvcnRfZGV2aWNlX3JlZ2lzdGVyOgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBlZGdlcG9ydF9leGl0ICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgmaW9fZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZlZGdlcG9ydF8xcG9ydF9kZXZpY2UpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmVkZ2Vwb3J0XzJwb3J0X2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KGVkZ2Vwb3J0X2luaXQpOworbW9kdWxlX2V4aXQoZWRnZXBvcnRfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CisKK21vZHVsZV9wYXJhbShsb3dfbGF0ZW5jeSwgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhsb3dfbGF0ZW5jeSwgIkxvdyBsYXRlbmN5IGVuYWJsZWQgb3Igbm90Iik7CisKK21vZHVsZV9wYXJhbShjbG9zaW5nX3dhaXQsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhjbG9zaW5nX3dhaXQsICJNYXhpbXVtIHdhaXQgZm9yIGRhdGEgdG8gZHJhaW4sIGluIC4wMSBzZWNzIik7CisKK21vZHVsZV9wYXJhbShpZ25vcmVfY3B1X3JldiwgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhpZ25vcmVfY3B1X3JldiwgIklnbm9yZSB0aGUgY3B1IHJldmlzaW9uIHdoZW4gY29ubmVjdGluZyB0byBhIGRldmljZSIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYjg0ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuaApAQCAtMCwwICsxLDE4MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAKKyAqCisgKglDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBJbnNpZGUgT3V0IE5ldHdvcmtzLCBJbmMuCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKgorICoJRmViLTE2LTIwMDEJRE1JCUFkZGVkIEkyQyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMKKyAqCU1heS0yOS0yMDAyCWdraAlQb3J0ZWQgdG8gTGludXgKKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfSU9fVElfSF8KKyNkZWZpbmUgX0lPX1RJX0hfCisKKy8qIEFkZHJlc3MgU3BhY2UgKi8KKyNkZWZpbmUgRFRLX0FERFJfU1BBQ0VfWERBVEEJCTB4MDMJLyogQWRkciBpcyBwbGFjZWQgaW4gWERBVEEgc3BhY2UgKi8KKyNkZWZpbmUgRFRLX0FERFJfU1BBQ0VfSTJDX1RZUEVfSUkJMHg4MgkvKiBBZGRyIGlzIHBsYWNlZCBpbiBJMkMgYXJlYSAqLworI2RlZmluZSBEVEtfQUREUl9TUEFDRV9JMkNfVFlQRV9JSUkJMHg4MwkvKiBBZGRyIGlzIHBsYWNlZCBpbiBJMkMgYXJlYSAqLworCisvLyBVQVJUIERlZmluZXMKKyNkZWZpbmUgVU1QTUVNX0JBU0VfVUFSVDEJCTB4RkZBMCAgLyogVU1QIFVBUlQxIGJhc2UgYWRkcmVzcyAgICAgICAgICAqLworI2RlZmluZSBVTVBNRU1fQkFTRV9VQVJUMgkJMHhGRkIwICAvKiBVTVAgVUFSVDIgYmFzZSBhZGRyZXNzICAgICAgICAgICovCisjZGVmaW5lIFVNUE1FTV9PRkZTX1VBUlRfTFNSCQkweDA1ICAgIC8qIFVNUCBVQVJUIExTUiByZWdpc3RlciBvZmZzZXQgICAgKi8KKworLyogQml0cyBwZXIgY2hhcmFjdGVyICovCisjZGVmaW5lIFVNUF9VQVJUX0NIQVI1QklUUwkJMHgwMAorI2RlZmluZSBVTVBfVUFSVF9DSEFSNkJJVFMJCTB4MDEKKyNkZWZpbmUgVU1QX1VBUlRfQ0hBUjdCSVRTCQkweDAyCisjZGVmaW5lIFVNUF9VQVJUX0NIQVI4QklUUwkJMHgwMworCisvKiBQYXJpdHkgKi8KKyNkZWZpbmUgVU1QX1VBUlRfTk9QQVJJVFkJCTB4MDAKKyNkZWZpbmUgVU1QX1VBUlRfT0REUEFSSVRZCQkweDAxCisjZGVmaW5lIFVNUF9VQVJUX0VWRU5QQVJJVFkJCTB4MDIKKyNkZWZpbmUgVU1QX1VBUlRfTUFSS1BBUklUWQkJMHgwMworI2RlZmluZSBVTVBfVUFSVF9TUEFDRVBBUklUWQkJMHgwNAorCisvKiBTdG9wIGJpdHMgKi8KKyNkZWZpbmUgVU1QX1VBUlRfU1RPUEJJVDEJCTB4MDAKKyNkZWZpbmUgVU1QX1VBUlRfU1RPUEJJVDE1CQkweDAxCisjZGVmaW5lIFVNUF9VQVJUX1NUT1BCSVQyCQkweDAyCisKKy8qIExpbmUgc3RhdHVzIHJlZ2lzdGVyIG1hc2tzICovCisjZGVmaW5lIFVNUF9VQVJUX0xTUl9PVl9NQVNLCQkweDAxCisjZGVmaW5lIFVNUF9VQVJUX0xTUl9QRV9NQVNLCQkweDAyCisjZGVmaW5lIFVNUF9VQVJUX0xTUl9GRV9NQVNLCQkweDA0CisjZGVmaW5lIFVNUF9VQVJUX0xTUl9CUl9NQVNLCQkweDA4CisjZGVmaW5lIFVNUF9VQVJUX0xTUl9FUl9NQVNLCQkweDBGCisjZGVmaW5lIFVNUF9VQVJUX0xTUl9SWF9NQVNLCQkweDEwCisjZGVmaW5lIFVNUF9VQVJUX0xTUl9UWF9NQVNLCQkweDIwCisKKyNkZWZpbmUgVU1QX1VBUlRfTFNSX0RBVEFfTUFTSwkJKCBMU1JfUEFSX0VSUiB8IExTUl9GUk1fRVJSIHwgTFNSX0JSRUFLICkKKworLyogUG9ydCBTZXR0aW5ncyBDb25zdGFudHMpICovCisjZGVmaW5lIFVNUF9NQVNLX1VBUlRfRkxBR1NfUlRTX0ZMT1cJCTB4MDAwMQorI2RlZmluZSBVTVBfTUFTS19VQVJUX0ZMQUdTX1JUU19ESVNBQkxFCQkweDAwMDIKKyNkZWZpbmUgVU1QX01BU0tfVUFSVF9GTEFHU19QQVJJVFkJCTB4MDAwOAorI2RlZmluZSBVTVBfTUFTS19VQVJUX0ZMQUdTX09VVF9YX0RTUl9GTE9XCTB4MDAxMAorI2RlZmluZSBVTVBfTUFTS19VQVJUX0ZMQUdTX09VVF9YX0NUU19GTE9XCTB4MDAyMAorI2RlZmluZSBVTVBfTUFTS19VQVJUX0ZMQUdTX09VVF9YCQkweDAwNDAKKyNkZWZpbmUgVU1QX01BU0tfVUFSVF9GTEFHU19PVVRfWEEJCTB4MDA4MAorI2RlZmluZSBVTVBfTUFTS19VQVJUX0ZMQUdTX0lOX1gJCTB4MDEwMAorI2RlZmluZSBVTVBfTUFTS19VQVJUX0ZMQUdTX0RUUl9GTE9XCQkweDA4MDAKKyNkZWZpbmUgVU1QX01BU0tfVUFSVF9GTEFHU19EVFJfRElTQUJMRQkJMHgxMDAwCisjZGVmaW5lIFVNUF9NQVNLX1VBUlRfRkxBR1NfUkVDRUlWRV9NU19JTlQJMHgyMDAwCisjZGVmaW5lIFVNUF9NQVNLX1VBUlRfRkxBR1NfQVVUT19TVEFSVF9PTl9FUlIJMHg0MDAwCisKKyNkZWZpbmUgVU1QX0RNQV9NT0RFX0NPTlRJTk9VUwkJCTB4MDEKKyNkZWZpbmUgVU1QX1BJUEVfVFJBTlNfVElNRU9VVF9FTkEJCTB4ODAKKyNkZWZpbmUgVU1QX1BJUEVfVFJBTlNGRVJfTU9ERV9NQVNLCQkweDAzCisjZGVmaW5lIFVNUF9QSVBFX1RSQU5TX1RJTUVPVVRfTUFTSwkJMHg3QworCisvKiBQdXJnZSBwb3J0IERpcmVjdGlvbiBNYXNrIEJpdHMgKi8KKyNkZWZpbmUgVU1QX1BPUlRfRElSX09VVAkJCTB4MDEKKyNkZWZpbmUgVU1QX1BPUlRfRElSX0lOCQkJCTB4MDIKKworLy8gQWRkcmVzcyBvZiBQb3J0IDAKKyNkZWZpbmUgVU1QTV9VQVJUMV9QT1JUICAJCQkweDAzCisKKy8vIENvbW1hbmRzCisjZGVmaW5lCVVNUENfU0VUX0NPTkZJRyAJCTB4MDUKKyNkZWZpbmUJVU1QQ19PUEVOX1BPUlQgIAkJMHgwNgorI2RlZmluZQlVTVBDX0NMT1NFX1BPUlQgCQkweDA3CisjZGVmaW5lCVVNUENfU1RBUlRfUE9SVCAJCTB4MDgKKyNkZWZpbmUJVU1QQ19TVE9QX1BPUlQgIAkJMHgwOQorI2RlZmluZQlVTVBDX1RFU1RfUE9SVCAgCQkweDBBCisjZGVmaW5lCVVNUENfUFVSR0VfUE9SVCAJCTB4MEIKKworI2RlZmluZQlVTVBDX0NPTVBMRVRFX1JFQUQJCTB4ODAJLy8gRm9yY2UgdGhlIEZpcm13YXJlIHRvIGNvbXBsZXRlIHRoZSBjdXJyZW50IFJlYWQKKyNkZWZpbmUJVU1QQ19IQVJEV0FSRV9SRVNFVAkJMHg4MQkvLyBGb3JjZSBVTVAgYmFjayBpbnRvIEJPT1QgTW9kZQorI2RlZmluZQlVTVBDX0NPUFlfRE5MRF9UT19JMkMJCTB4ODIJLy8gQ29weSBjdXJyZW50IGRvd25sb2FkIGltYWdlIHRvIHR5cGUgMHhmMiByZWNvcmQgaW4gMTZrIEkyQworCQkJCQkJLy8gZmlybXdhcmUgd2lsbCBjaGFuZ2UgMHhmZiByZWNvcmQgdG8gdHlwZSAyIHJlY29yZCB3aGVuIGNvbXBsZXRlCisKKwkvLyBTcGVjaWFsIGZ1bmN0aW9uIHJlZ2lzdGVyIGNvbW1hbmRzCisJLy8gd0luZGV4IGlzIHJlZ2lzdGVyIGFkZHJlc3MKKwkvLyB3VmFsdWUgaXMgTVNCL0xTQiBtYXNrL2RhdGEKKyNkZWZpbmUJVU1QQ19XUklURV9TRlIJICAJCTB4ODMJLy8gV3JpdGUgU0ZSIFJlZ2lzdGVyCisKKwkvLyB3SW5kZXggaXMgcmVnaXN0ZXIgYWRkcmVzcworI2RlZmluZQlVTVBDX1JFQURfU0ZSCSAgCQkweDg0CS8vIFJlYWQgU1JGIFJlZ2lzdGVyCisKKwkvLyBTZXQgb3IgQ2xlYXIgRFRSICh3VmFsdWUgYml0IDAgU2V0L0NsZWFyKQkJd0luZGV4IE1vZHVsZUlEIChwb3J0KQorI2RlZmluZQlVTVBDX1NFVF9DTFJfRFRSCQkweDg1CisKKwkvLyBTZXQgb3IgQ2xlYXIgUlRTICh3VmFsdWUgYml0IDAgU2V0L0NsZWFyKQkJd0luZGV4IE1vZHVsZUlEIChwb3J0KQorI2RlZmluZQlVTVBDX1NFVF9DTFJfUlRTCQkweDg2CisKKwkvLyBTZXQgb3IgQ2xlYXIgTE9PUEJBQ0sgKHdWYWx1ZSBiaXQgMCBTZXQvQ2xlYXIpCXdJbmRleCBNb2R1bGVJRCAocG9ydCkKKyNkZWZpbmUJVU1QQ19TRVRfQ0xSX0xPT1BCQUNLCQkweDg3CisKKwkvLyBTZXQgb3IgQ2xlYXIgQlJFQUsgKHdWYWx1ZSBiaXQgMCBTZXQvQ2xlYXIpCQl3SW5kZXggTW9kdWxlSUQgKHBvcnQpCisjZGVmaW5lCVVNUENfU0VUX0NMUl9CUkVBSwkJMHg4OAorCisJLy8gUmVhZCBNU1Igd0luZGV4IE1vZHVsZUlEIChwb3J0KQorI2RlZmluZQlVTVBDX1JFQURfTVNSCQkJMHg4OQorCisJLyogVG9vbGtpdCBjb21tYW5kcyAqLworCS8qIFJlYWQtd3JpdGUgZ3JvdXAgKi8KKyNkZWZpbmUJVU1QQ19NRU1PUllfUkVBRCAgIAkJMHg5MgorI2RlZmluZQlVTVBDX01FTU9SWV9XUklURSAgCQkweDkzCisKKy8qCisgKglVTVAgRE1BIERlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgVU1QRF9PRURCMV9BRERSRVNTCQkweEZGMDgKKyNkZWZpbmUgVU1QRF9PRURCMl9BRERSRVNTCQkweEZGMTAKKworc3RydWN0IG91dF9lbmRwb2ludF9kZXNjX2Jsb2NrCit7CisJX191OCBDb25maWd1cmF0aW9uOworCV9fdTggWEJ1ZkFkZHI7CisJX191OCBYQnl0ZUNvdW50OworCV9fdTggVW51c2VkMTsKKwlfX3U4IFVudXNlZDI7CisJX191OCBZQnVmQWRkcjsKKwlfX3U4IFlCeXRlQ291bnQ7CisJX191OCBCdWZmZXJTaXplOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisvKgorICogVFlQRSBERUZJTklUSU9OUworICogU3RydWN0dXJlcyBmb3IgRmlybXdhcmUgY29tbWFuZHMKKyAqLworc3RydWN0IHVtcF91YXJ0X2NvbmZpZwkJLyogVUFSVCBzZXR0aW5ncyAgICAgICAgICAgICAgICAgICAgKi8KK3sKKwlfX3UxNiB3QmF1ZFJhdGU7CS8qIEJhdWQgcmF0ZSAgICAgICAgICAgICAgICAgICAgICAgICovCisJX191MTYgd0ZsYWdzOwkJLyogQml0bWFwIG1hc2sgb2YgZmxhZ3MgICAgICAgICAgICAgKi8KKwlfX3U4IGJEYXRhQml0czsJCS8qIDUuLjggLSBkYXRhIGJpdHMgcGVyIGNoYXJhY3RlciAgICovCisJX191OCBiUGFyaXR5OwkJLyogUGFyaXR5IHNldHRpbmdzICAgICAgICAgICAgICAgICAgKi8KKwlfX3U4IGJTdG9wQml0czsJCS8qIFN0b3AgYml0cyBzZXR0aW5ncyAgICAgICAgICAgICAgICovCisJY2hhciBjWG9uOwkJLyogWE9OIGNoYXJhY3RlciAgICAgICAgICAgICAgICAgICAgKi8KKwljaGFyIGNYb2ZmOwkJLyogWE9GRiBjaGFyYWN0ZXIgICAgICAgICAgICAgICAgICAgKi8KKwlfX3U4IGJVYXJ0TW9kZTsJCS8qIFdpbGwgYmUgdXBkYXRlZCB3aGVuIGEgdXNlciAgICAgICovCisJCQkJLyogaW50ZXJmYWNlIGlzIGRlZmluZWQgICAgICAgICAgICAgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworLyoKKyAqIFRZUEUgREVGSU5JVElPTlMKKyAqIFN0cnVjdHVyZXMgZm9yIFVTQiBpbnRlcnJ1cHRzCisgKi8KK3N0cnVjdCB1bXBfaW50ZXJydXB0CQkJLyogSW50ZXJydXB0IHBhY2tldCBzdHJ1Y3R1cmUgICAgICAgKi8KK3sKKwlfX3U4IGJJQ29kZTsJCQkvKiBJbnRlcnJ1cHQgY29kZSAoaW50ZXJydXB0IG51bSkgICAqLworCV9fdTggYklJbmZvOwkJCS8qIEludGVycnVwdCBpbmZvcm1hdGlvbiAgICAgICAgICAgICovCit9ICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisjZGVmaW5lIFRJVU1QX0dFVF9QT1JUX0ZST01fQ09ERShjKQkoKChjKSA+PiA0KSAtIDMpCisjZGVmaW5lIFRJVU1QX0dFVF9GVU5DX0ZST01fQ09ERShjKQkoKGMpICYgMHgwZikKKyNkZWZpbmUgVElVTVBfSU5URVJSVVBUX0NPREVfTFNSCTB4MDMKKyNkZWZpbmUgVElVTVBfSU5URVJSVVBUX0NPREVfTVNSCTB4MDQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdXNidmVuZC5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3VzYnZlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzFmYTVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3VzYnZlbmQuaApAQCAtMCwwICsxLDY4NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCVVTQlZFTkQuSAkJVmVuZG9yLXNwZWNpZmljIFVTQiBkZWZpbml0aW9ucworICoKKyAqCU5PVEU6IFRoaXMgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgRWRnZXBvcnQgZmlybXdhcmUgYW5kCisgKgltdXN0IGJlIGtlcHQgYmFja3dhcmQtY29tcGF0aWJsZSB3aXRoIG9sZGVyIGZpcm13YXJlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKglDb3B5cmlnaHQgKEMpIDE5OTggSW5zaWRlIE91dCBOZXR3b3JrcywgSW5jLgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgIWRlZmluZWQoX1VTQlZFTkRfSCkKKyNkZWZpbmUJX1VTQlZFTkRfSAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoJCUQgZSBmIGkgbiBlIHMgICAvICAgVCB5IHAgZSBkIGUgZiBzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8KKy8vIERlZmluaXRpb25zIG9mIFVTQiBwcm9kdWN0IElEcworLy8gCisKKyNkZWZpbmUJVVNCX1ZFTkRPUl9JRF9JT04JMHgxNjA4CQkvLyBPdXIgVklECisjZGVmaW5lCVVTQl9WRU5ET1JfSURfVEkJMHgwNDUxCQkvLyBUSSBWSUQKKworLy8KKy8vIERlZmluaXRpb25zIG9mIFVTQiBwcm9kdWN0IElEcyAoUElEKQorLy8gV2UgYnJlYWsgdGhlIFVTQi1kZWZpbmVkIFBJRCBpbnRvIGFuIE9FTSBJZCBmaWVsZCAodXBwZXIgNiBiaXRzKQorLy8gYW5kIGEgRGV2aWNlIElkIChib3R0b20gMTAgYml0cykuIFRoZSBEZXZpY2UgSWQgZGVmaW5lcyB3aGF0CisvLyBkZXZpY2UgdGhpcyBhY3R1YWxseSBpcyByZWdhcmRsZXNzIG9mIHdoYXQgdGhlIE9FTSB3YW50cyB0bworLy8gY2FsbCBpdC4KKy8vCisKKy8vIElPTi1kZXZpY2UgT0VNIElEcworI2RlZmluZQlJT05fT0VNX0lEX0lPTgkJMAkJLy8gMDBoIEluc2lkZSBPdXQgTmV0d29ya3MKKyNkZWZpbmUJSU9OX09FTV9JRF9OTFlOWAkxCQkvLyAwMWggTkx5bnggU3lzdGVtcworI2RlZmluZQlJT05fT0VNX0lEX0dFTkVSSUMJMgkJLy8gMDJoIEdlbmVyaWMgT0VNCisjZGVmaW5lCUlPTl9PRU1fSURfTUFDCQkzCQkvLyAwM2ggTWFjIFZlcnNpb24KKyNkZWZpbmUJSU9OX09FTV9JRF9NRUdBV09MRgk0CQkvLyAwNGggTHVwdXNiIE9FTSBNYWMgdmVyc2lvbiAoTWVnYVdvbGYpCisjZGVmaW5lCUlPTl9PRU1fSURfTVVMVElURUNICTUJCS8vIDA1aCBNdWx0aXRlY2ggUmFwaWRwb3J0cworI2RlZmluZQlJT05fT0VNX0lEX0FHSUxFTlQJNgkJLy8gMDZoIEFHSUxFTlQgYm9hcmQKKworCisvLyBJT04tZGV2aWNlIERldmljZSBJRHMKKy8vIFByb2R1Y3QgSURzIC0gYXNzaWduZWQgdG8gbWF0Y2ggbWlkZGxlIGRpZ2l0IG9mIHNlcmlhbCBudW1iZXIgKE5vIGxvbmdlciB0cnVlKQorCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfODAyNTFfTkVUQ0hJUAkweDAyMAkvLyBUaGlzIGJpdCBpcyBzZXQgaW4gdGhlIFBJRCBpZiB0aGlzIGVkZ2Vwb3J0IGhhcmR3YXJlJAorCQkJCQkJLy8gaXMgYmFzZWQgb24gdGhlIDgwMjUxK05ldGNoaXAuICAKKworI2RlZmluZSBJT05fREVWSUNFX0lEX0dFTkVSQVRJT05fMQkweDAwCS8vIFZhbHVlIGZvciA5MzAgYmFzZWQgZWRnZXBvcnRzCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfR0VORVJBVElPTl8yCTB4MDEJLy8gVmFsdWUgZm9yIDgwMjUxK05ldGNoaXAuCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfR0VORVJBVElPTl8zCTB4MDIJLy8gVmFsdWUgZm9yIFRleGFzIEluc3RydW1lbnRzIFRVU0I1MDUyIGNoaXAKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9HRU5FUkFUSU9OXzQJMHgwMwkvLyBXYXRjaHBvcnQgRmFtaWx5IG9mIHByb2R1Y3RzCisjZGVmaW5lIElPTl9HRU5FUkFUSU9OX01BU0sJCTB4MDMKKworI2RlZmluZSBJT05fREVWSUNFX0lEX0hVQl9NQVNLCQkweDAwODAJLy8gVGhpcyBiaXQgaW4gdGhlIFBJRCBkZXNpZ25hdGVzIGEgSFVCIGRldmljZQorCQkJCQkJLy8gZm9yIGV4YW1wbGUgOEMgd291bGQgYmUgYSA0MjEgNCBwb3J0IGh1YgorCQkJCQkJLy8gYW5kIDhEIHdvdWxkIGJlIGEgMiBwb3J0IGVtYmVkZGVkIGh1YgorCisjZGVmaW5lIEVER0VQT1JUX0RFVklDRV9JRF9NQVNLCQkJMHgwZmYJLy8gTm90IGluY2x1ZGluZyBPRU0gb3IgR0VORVJBVElPTiBmaWVsZHMKKworI2RlZmluZQlJT05fREVWSUNFX0lEX1VOQ09ORklHVVJFRF9FREdFX0RFVklDRQkweDAwMAkvLyBJbiBtYW51ZmFjdHVyaW5nIG9ubHkKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80CQkweDAwMQkvLyBFZGdlcG9ydC80IFJTMjMyCisjZGVmaW5lCUlPTl9ERVZJQ0VfSURfRURHRVBPUlRfOFIJCTB4MDAyCS8vIEVkZ2Vwb3J0IHdpdGggUko0NSBubyBSaW5nCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfUkFQSURQT1JUXzQJCTB4MDAzCS8vIFJhcGlkcG9ydC80CisjZGVmaW5lIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNFQJCTB4MDA0CS8vIEVkZ2Vwb3J0LzQgUlMyMzIgZm9yIFRlbHhvbiAoYWthICJGbGVldHBvcnQiKQorI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzIJCTB4MDA1CS8vIEVkZ2Vwb3J0LzIgUlMyMzIKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80SQkJMHgwMDYJLy8gRWRnZXBvcnQvNCBSUzQyMgorI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzJJCQkweDAwNwkvLyBFZGdlcG9ydC8yIFJTNDIyL1JTNDg1CisjZGVmaW5lCUlPTl9ERVZJQ0VfSURfRURHRVBPUlRfOFJSCQkweDAwOAkvLyBFZGdlcG9ydCB3aXRoIFJKNDUgd2l0aCBEYXRhIGFuZCBSVFMvQ1RTIG9ubHkKKy8vCUlPTl9ERVZJQ0VfSURfRURHRVBPUlRfOF9IQU5EQlVJTFQJMHgwMDkJLy8gSGFuZC1idWlsdCBFZGdlcG9ydC84IChQbGFjZWhvbGRlciwgdXNlZCBpbiBtaWRkbGUgZGlnaXQgb2Ygc2VyaWFsIG51bWJlciBvbmx5ISkKKy8vCUlPTl9ERVZJQ0VfSURfTVVMVElNT0RFTV80WDU2CQkweDAwQQkvLyBNdWx0aVRlY2ggdmVyc2lvbiBvZiBSUC80IChQbGFjZWhvbGRlciwgdXNlZCBpbiBtaWRkbGUgZGlnaXQgb2Ygc2VyaWFsIG51bWJlciBvbmx5ISkKKyNkZWZpbmUJSU9OX0RFVklDRV9JRF9FREdFUE9SVF9QQVJBTExFTF9QT1JUCTB4MDBCCS8vIEVkZ2Vwb3J0Lyg0KTIxIFBhcmFsbGVsIHBvcnQgKFVTUzcyMCkKKyNkZWZpbmUJSU9OX0RFVklDRV9JRF9FREdFUE9SVF80MjEJCTB4MDBDCS8vIEVkZ2Vwb3J0LzQyMSBIdWIrUlMyMzIrUGFyYWxsZWwKKyNkZWZpbmUJSU9OX0RFVklDRV9JRF9FREdFUE9SVF8yMQkJMHgwMEQJLy8gRWRnZXBvcnQvMjEgIFJTMjMyK1BhcmFsbGVsCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfOF9EVUFMX0NQVQkweDAwRQkvLyBIYWxmIG9mIGFuIEVkZ2Vwb3J0LzggKHRoZSBraW5kIHdpdGggMiBFUC80cyBvbiAxIFBDQikKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FREdFUE9SVF84CQkweDAwRgkvLyBFZGdlcG9ydC84IChzaW5nbGUtQ1BVKQorI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzJfRElOCQkweDAxMAkvLyBFZGdlcG9ydC8yIFJTMjMyIHdpdGggQXBwbGUgRElOIGNvbm5lY3RvcgorI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzRfRElOCQkweDAxMQkvLyBFZGdlcG9ydC80IFJTMjMyIHdpdGggQXBwbGUgRElOIGNvbm5lY3RvcgorI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzE2X0RVQUxfQ1BVCTB4MDEyCS8vIEhhbGYgb2YgYW4gRWRnZXBvcnQvMTYgKHRoZSBraW5kIHdpdGggMiBFUC84cykKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FREdFUE9SVF9DT01QQVRJQkxFCTB4MDEzCS8vIEVkZ2Vwb3J0IENvbXBhdGlibGUsIGZvciBOQ1IsIEF4aW9obSBldGMuIHRlc3RpbmcKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FREdFUE9SVF84SQkJMHgwMTQJLy8gRWRnZXBvcnQvOCBSUzQyMiAoc2luZ2xlLUNQVSkKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FREdFUE9SVF8xCQkweDAxNQkvLyBFZGdlcG9ydC8xIFJTMjMyCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfRVBPUzQ0CQkJMHgwMTYJLy8gSGFsZiBvZiBhbiBFUE9TLzQ0IChUSVVNUCBCQVNFRCkKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80MgkJMHgwMTcJLy8gRWRnZXBvcnQvNDIKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80MTJfOAkJMHgwMTgJLy8gRWRnZXBvcnQvNDEyIDggcG9ydCBwYXJ0CisjZGVmaW5lIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNDEyXzQJCTB4MDE5CS8vIEVkZ2Vwb3J0LzQxMgk0IHBvcnQgcGFydAorI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzIySQkJMHgwMUEJLy8gRWRnZXBvcnQvMjJJIGlzIGFuIEVkZ2Vwb3J0LzQgd2l0aCBwb3J0cyAxJjIgUlM0MjIgYW5kIHBvcnRzIDMmNCBSUzIzMgorCisvLyBDb21wYWN0IEZvcm0gZmFjdG9yIFRJIGJhc2VkIGRldmljZXMgIDJjLCAyMWMsIDIyYywgMjIxYworI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzJDCQkweDAxQgkvLyBFZGdlcG9ydC8yYyBpcyBhIFRJIGJhc2VkIEVkZ2Vwb3J0LzIgLSBTbWFsbCBJMmMKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FREdFUE9SVF8yMjFDCQkweDAxQwkvLyBFZGdlcG9ydC8yMjFjIGlzIGEgVEkgYmFzZWQgRWRnZXBvcnQvMiB3aXRoIGx1Y2VudCBjaGlwIGFuZAorCQkJCQkJCS8vIDIgZXh0ZXJuYWwgaHViIHBvcnRzIC0gTGFyZ2UgSTJDCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMjJDCQkweDAxRAkvLyBFZGdlcG9ydC8yMmMgaXMgYSBUSSBiYXNlZCBFZGdlcG9ydC8yIHdpdGgKKwkJCQkJCQkvLyAyIGV4dGVybmFsIGh1YiBwb3J0cyAtIExhcmdlIEkyQworI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzIxQwkJMHgwMUUJLy8gRWRnZXBvcnQvMjFjIGlzIGEgVEkgYmFzZWQgRWRnZXBvcnQvMiB3aXRoIGx1Y2VudCBjaGlwCisJCQkJCQkJLy8gU21hbGwgSTJDCisKKworLyoKKyAqICBEQU5HRVIgREFOR0VSIFRoZSAweDIwIGJpdCB3YXMgdXNlZCB0byBpbmRpY2F0ZSBhIDgyNTEvbmV0Y2hpcCBHRU4gMiBkZXZpY2UuCisgKiAgU2luY2UgdGhlIE1BQywgTGludXgsIGFuZCBPcHRpbWFsIGRyaXZlcnMgc3RpbGwgdXNlZCB0aGUgb2xkIGNvZGUKKyAqICBJIHN1Z2dlc3QgdGhhdCB5b3Ugc2tpcCB0aGUgMHgyMCBiaXQgd2hlbiBjcmVhdGluZyBuZXcgUElEcworICovCisKKworLy8gR2VuZXJhdGlvbiAzIGRldmljZXMgLS0gMzQxMCBiYXNlZCBlZGdwb3J0LzEgKDI1NiBieXRlIEkyQykKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9USTM0MTBfRURHRVBPUlRfMQkJMHgwNDAJLy8gRWRnZXBvcnQvMSBSUzIzMgorI2RlZmluZSBJT05fREVWSUNFX0lEX1RJMzQxMF9FREdFUE9SVF8xSQkweDA0MQkvLyBFZGdlcG9ydC8xaS0gUlM0MjIgbW9kZWwKKworLy8gVGkgYmFzZWQgc29mdHdhcmUgc3dpdGNoYWJsZSBSUzIzMi9SUzQyMi9SUzQ4NSBkZXZpY2VzCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNFMJCTB4MDQyCS8vIEVkZ2Vwb3J0LzRzIC0gc29mdHdhcmUgc3dpdGNoYWJsZSBtb2RlbAorI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzhTCQkweDA0MwkvLyBFZGdlcG9ydC84cyAtIHNvZnR3YXJlIHN3aXRjaGFibGUgbW9kZWwKKworLy8gVXNiIHRvIEV0aGVybmV0IGRvbmdsZQorI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUX0UJCTB4MEUwCS8vIEVkZ2Vwb3J0L0UgVXNiIHRvIEV0aGVybmV0CisKKy8vIEVkZ2Vwb3J0IFRJIGJhc2VkIGRldmljZXMKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF80CQkweDAyMDEJLy8gRWRnZXBvcnQvNCBSUzIzMgorI2RlZmluZSBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzIJCTB4MDIwNQkvLyBFZGdlcG9ydC8yIFJTMjMyCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfNEkJCTB4MDIwNgkvLyBFZGdlcG9ydC80aSBSUzQyMgorI2RlZmluZSBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzJJCQkweDAyMDcJLy8gRWRnZXBvcnQvMmkgUlM0MjIvUlM0ODUKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF80MjEJCTB4MDIwQwkvLyBFZGdlcG9ydC80MjEgNCBodWIgMiBSUzIzMiArIFBhcmFsbGVsIChsdWNlbnQgb24gYSBkaWZmZXJlbnQgaHViIHBvcnQpCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMjEJCTB4MDIwRAkvLyBFZGdlcG9ydC8yMSAyIFJTMjMyICsgUGFyYWxsZWwgKGx1Y2VudCBvbiBhIGRpZmZlcmVudCBodWIgcG9ydCkKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF84CQkweDAyMEYJLy8gRWRnZXBvcnQvOCAoc2luZ2xlLUNQVSkKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8xCQkweDAyMTUJLy8gRWRnZXBvcnQvMSBSUzIzMgorI2RlZmluZSBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzQyCQkweDAyMTcJLy8gRWRnZXBvcnQvNDIgNCBodWIgMiBSUzIzMgorI2RlZmluZSBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzIySSAgCQkweDAyMUEJLy8gRWRnZXBvcnQvMjJJIGlzIGFuIEVkZ2Vwb3J0LzQgd2l0aCBwb3J0cyAxJjIgUlM0MjIgYW5kIHBvcnRzIDMmNCBSUzIzMgorI2RlZmluZSBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzJDCQkweDAyMUIJLy8gRWRnZXBvcnQvMmMgUlMyMzIKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8yMjFDCQkweDAyMUMJLy8gRWRnZXBvcnQvMjIxYyBpcyBhIFRJIGJhc2VkIEVkZ2Vwb3J0LzIgd2l0aCBsdWNlbnQgY2hpcCBhbmQKKwkJCQkJCQkvLyAyIGV4dGVybmFsIGh1YiBwb3J0cyAtIExhcmdlIEkyQworI2RlZmluZSBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzIyQwkJMHgwMjFECS8vIEVkZ2Vwb3J0LzIyYyBpcyBhIFRJIGJhc2VkIEVkZ2Vwb3J0LzIgd2l0aAorCQkJCQkJCS8vIDIgZXh0ZXJuYWwgaHViIHBvcnRzIC0gTGFyZ2UgSTJDCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMjFDCQkweDAyMUUJLy8gRWRnZXBvcnQvMjFjIGlzIGEgVEkgYmFzZWQgRWRnZXBvcnQvMiB3aXRoIGx1Y2VudCBjaGlwCisKKy8vIEdlbmVyYXRpb24gMyBkZXZpY2VzIC0tIDM0MTAgYmFzZWQgZWRncG9ydC8xICgyNTYgYnl0ZSBJMkMpIAorI2RlZmluZSBJT05fREVWSUNFX0lEX1RJX1RJMzQxMF9FREdFUE9SVF8xCTB4MjQwCS8vIEVkZ2Vwb3J0LzEgUlMyMzIKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9USV9USTM0MTBfRURHRVBPUlRfMUkJMHgyNDEJLy8gRWRnZXBvcnQvMWktIFJTNDIyIG1vZGVsCisKKy8vIFRpIGJhc2VkIHNvZnR3YXJlIHN3aXRjaGFibGUgUlMyMzIvUlM0MjIvUlM0ODUgZGV2aWNlcworI2RlZmluZSBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzRTCQkweDI0MgkvLyBFZGdlcG9ydC80cyAtIHNvZnR3YXJlIHN3aXRjaGFibGUgbW9kZWwKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9JVF9FREdFUE9SVF84UwkJMHgyNDMJLy8gRWRnZXBvcnQvOHMgLSBzb2Z0d2FyZSBzd2l0Y2hhYmxlIG1vZGVsCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGlvbiA0IGRldmljZXMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyBXYXRjaHBvcnQgYmFzZWQgb24gMzQxMCBib3RoIDEtd2lyZSBhbmQgYmluYXJ5IHByb2R1Y3RzICgxNksgSTJDKQorI2RlZmluZSBJT05fREVWSUNFX0lEX1dQX1VOU0VSSUFMSVpFRAkJMHgzMDAJLy8gV2F0Y2hwb3J0IGJhc2VkIG9uIDM0MTAgYm90aCAxLXdpcmUgYW5kIGJpbmFyeSBwcm9kdWN0cworI2RlZmluZSBJT05fREVWSUNFX0lEX1dQX1BST1hJTUlUWQkJMHgzMDEJLy8gV2F0Y2hwb3J0L1AgRGlzY29udGludWVkCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfV1BfTU9USU9OCQkJMHgzMDIJLy8gV2F0Y2hwb3J0L00KKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9XUF9NT0lTVFVSRQkJMHgzMDMJLy8gV2F0Y2hwb3J0L1cKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9XUF9URU1QRVJBVFVSRQkJMHgzMDQJLy8gV2F0Y2hwb3J0L1QKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9XUF9IVU1JRElUWQkJMHgzMDUJLy8gV2F0Y2hwb3J0L0gKKworI2RlZmluZSBJT05fREVWSUNFX0lEX1dQX1BPV0VSCQkJMHgzMDYJLy8gV2F0Y2hwb3J0CisjZGVmaW5lIElPTl9ERVZJQ0VfSURfV1BfTElHSFQJCQkweDMwNwkvLyBXYXRjaHBvcnQKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9XUF9SQURJQVRJT04JCTB4MzA4CS8vIFdhdGNocG9ydAorI2RlZmluZSBJT05fREVWSUNFX0lEX1dQX0FDQ0VMRVJBVElPTgkJMHgzMDkJLy8gV2F0Y2hwb3J0L0EKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9XUF9ESVNUQU5DRQkJMHgzMEEJLy8gV2F0Y2hwb3J0L0QgRGlzY29udGludWVkCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfV1BfUFJPWF9ESVNUCQkweDMwQgkvLyBXYXRjaHBvcnQvRCB1c2VzIGRpc3RhbmNlIHNlbnNvcgorCQkJCQkJCS8vIERlZmF1bHQgdG8gL1AgZnVuY3Rpb24KKworI2RlZmluZSBJT05fREVWSUNFX0lEX1BMVVNfUFdSX0hQNENECQkweDMwQwkvLyA1MDUyIFBsdXMgUG93ZXIgSHViUG9ydC80Q0QrIChmb3IgRGVsbCkKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9QTFVTX1BXUl9IUDRDCQkweDMwRAkvLyA1MDUyIFBsdXMgUG93ZXIgSHViUG9ydC80QysgCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfUExVU19QV1JfUENJCQkweDMwRQkvLyAzNDEwIFBsdXMgUG93ZXIgUENJIEhvc3QgQ29udHJvbGxlciA0IHBvcnQKKworCisvLworLy8gRGVmaW5pdGlvbnMgZm9yIEFYSU9ITSBVU0IgcHJvZHVjdCBJRHMKKy8vCisjZGVmaW5lCVVTQl9WRU5ET1JfSURfQVhJT0hNCQkJMHgwNUQ5CS8vIEF4aW9obSBWSUQKKworI2RlZmluZSBBWElPSE1fREVWSUNFX0lEX01BU0sJCQkweGZmZmYKKyNkZWZpbmUgQVhJT0hNX0RFVklDRV9JRF9FUElDX0E3NTgJCTB4QTc1OAorI2RlZmluZSBBWElPSE1fREVWSUNFX0lEX0VQSUNfQTc5NAkJMHhBNzk0CisjZGVmaW5lIEFYSU9ITV9ERVZJQ0VfSURfRVBJQ19BMjI1CQkweEEyMjUKKworCisvLworLy8gRGVmaW5pdGlvbnMgZm9yIE5DUiBVU0IgcHJvZHVjdCBJRHMKKy8vCisjZGVmaW5lCVVTQl9WRU5ET1JfSURfTkNSCQkJMHgwNDA0CS8vIE5DUiBWSUQKKworI2RlZmluZSBOQ1JfREVWSUNFX0lEX01BU0sJCQkweGZmZmYKKyNkZWZpbmUgTkNSX0RFVklDRV9JRF9FUElDXzAyMDIJCQkweDAyMDIKKyNkZWZpbmUgTkNSX0RFVklDRV9JRF9FUElDXzAyMDMJCQkweDAyMDMKKyNkZWZpbmUgTkNSX0RFVklDRV9JRF9FUElDXzAzMTAJCQkweDAzMTAKKyNkZWZpbmUgTkNSX0RFVklDRV9JRF9FUElDXzAzMTEJCQkweDAzMTEKKyNkZWZpbmUgTkNSX0RFVklDRV9JRF9FUElDXzAzMTIJCQkweDAzMTIKKworCisvLworLy8gRGVmaW5pdGlvbnMgZm9yIFNZTUJPTCBVU0IgcHJvZHVjdCBJRHMKKy8vCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfU1lNQk9MCQkJMHgwNUUwCS8vIFN5bWJvbCBWSUQKKyNkZWZpbmUgU1lNQk9MX0RFVklDRV9JRF9NQVNLCQkJMHhmZmZmCisjZGVmaW5lIFNZTUJPTF9ERVZJQ0VfSURfS0VZRk9CCQkJMHgwNzAwCisKKworLy8KKy8vIERlZmluaXRpb25zIGZvciBvdGhlciBwcm9kdWN0IElEcworI2RlZmluZSBJT05fREVWSUNFX0lEX01UNFg1NlVTQgkJCTB4MTQwMwkvLyBPRU0gZGV2aWNlCisKKworI2RlZmluZQlHRU5FUkFUSU9OX0lEX0ZST01fVVNCX1BST0RVQ1RfSUQoIFByb2R1Y3RJZCApCQkJCVwKKwkJCSggKF9fdTE2KSAoKFByb2R1Y3RJZCA+PiA4KSAmIChJT05fR0VORVJBVElPTl9NQVNLKSkgKQorCisjZGVmaW5lCU1BS0VfVVNCX1BST0RVQ1RfSUQoIE9lbUlkLCBEZXZpY2VJZCApCQkJCQlcCisJCQkoIChfX3UxNikgKCgoT2VtSWQpIDw8IDEwKSB8fCAoRGV2aWNlSWQpKSApCisKKyNkZWZpbmUJREVWSUNFX0lEX0ZST01fVVNCX1BST0RVQ1RfSUQoIFByb2R1Y3RJZCApCQkJCVwKKwkJCSggKF9fdTE2KSAoKFByb2R1Y3RJZCkgJiAoRURHRVBPUlRfREVWSUNFX0lEX01BU0spKSApCisKKyNkZWZpbmUJT0VNX0lEX0ZST01fVVNCX1BST0RVQ1RfSUQoIFByb2R1Y3RJZCApCQkJCQlcCisJCQkoIChfX3UxNikgKCgoUHJvZHVjdElkKSA+PiAxMCkgJiAweDNGKSApCisKKy8vCisvLyBEZWZpbml0aW9ucyBvZiBwYXJhbWV0ZXJzIGZvciBkb3dubG9hZCBjb2RlLiBOb3RlIHRoYXQgdGhlc2UgYXJlCisvLyBzcGVjaWZpYyB0byBhIGdpdmVuIHZlcnNpb24gb2YgZG93bmxvYWQgY29kZSBhbmQgbXVzdCBjaGFuZ2UgaWYgdGhlCisvLyBjb3JyZXNwb25kaW5nIGRvd25sb2FkIGNvZGUgY2hhbmdlcy4KKy8vCisKKy8vIFR4Q3JlZGl0cyB2YWx1ZSBiZWxvdyB3aGljaCBkcml2ZXIgd29uJ3QgYm90aGVyIHNlbmRpbmcgKHRvIHByZXZlbnQgdG9vIG1hbnkgc21hbGwgd3JpdGVzKS4KKy8vIFNlbmQgb25seSBpZiBhYm92ZSAyNSUKKyNkZWZpbmUgRURHRV9GV19HRVRfVFhfQ1JFRElUU19TRU5EX1RIUkVTSE9MRChJbml0aWFsQ3JlZGl0LCBNYXhQYWNrZXRTaXplKSAobWF4KCAoKEluaXRpYWxDcmVkaXQpIC8gNCksIChNYXhQYWNrZXRTaXplKSApKQorCisjZGVmaW5lCUVER0VfRldfQlVMS19NQVhfUEFDS0VUX1NJWkUJCTY0CS8vIE1heCBQYWNrZXQgU2l6ZSBmb3IgQnVsayBJbiBFbmRwb2ludCAoRVAxKQorI2RlZmluZSBFREdFX0ZXX0JVTEtfUkVBRF9CVUZGRVJfU0laRQkJMTAyNAkvLyBTaXplIHRvIHVzZSBmb3IgQnVsayByZWFkcworCisjZGVmaW5lCUVER0VfRldfSU5UX01BWF9QQUNLRVRfU0laRQkJMzIJLy8gTWF4IFBhY2tldCBTaXplIGZvciBJbnRlcnJ1cHQgSW4gRW5kcG9pbnQKKwkJCQkJCQkvLyBOb3RlIHRoYXQgbWFueSB1bml0cyB3ZXJlIHNoaXBwZWQgd2l0aCBNUFM9MTYsIHdlCisJCQkJCQkJLy8gZm9yY2UgYW4gdXBncmFkZSB0byB0aGlzIHZhbHVlKS4KKyNkZWZpbmUgRURHRV9GV19JTlRfSU5URVJWQUwJCQkyCS8vIDJtcyBwb2xsaW5nIG9uIEludFBpcGUKKworCisvLworLy8gRGVmaW5pdGlvbnMgb2YgSS9PIE5ldHdvcmtzIHZlbmRvci1zcGVjaWZpYyByZXF1ZXN0cworLy8gZm9yIGRlZmF1bHQgZW5kcG9pbnQKKy8vCisvLwlibVJlcXVlc3RUeXBlID0gMDEwMDAwMDAJU2V0IHZlbmRvci1zcGVjaWZpYywgdG8gZGV2aWNlCisvLwlibVJlcXVlc3RUeXBlID0gMTEwMDAwMDAJR2V0IHZlbmRvci1zcGVjaWZpYywgdG8gZGV2aWNlCisvLworLy8gVGhlc2UgYXJlIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIGJSZXF1ZXN0IGZpZWxkIGZvciB0aGUKKy8vIGFib3ZlIGJtUmVxdWVzdFR5cGVzLgorLy8KKy8vIEZvciB0aGUgcmVhZC93cml0ZSBFZGdlcG9ydCBtZW1vcnkgY29tbWFuZHMsIHRoZSBwYXJhbWV0ZXJzCisvLyBhcmUgYXMgZm9sbG93czoKKy8vCQl3VmFsdWUgPSAxNi1iaXQgYWRkcmVzcworLy8JCXdJbmRleCA9IHVudXNlZCAodGhvdWdoIHdlIGNvdWxkIHB1dCBzZWdtZW50IDAwOiBvciBGRjogaGVyZSkKKy8vCQl3TGVuZ3RoID0gIyBieXRlcyB0byByZWFkL3dyaXRlIChtYXggNjQpCisvLwkJCQkJCQkKKworI2RlZmluZSBVU0JfUkVRVUVTVF9JT05fUkVTRVRfREVWSUNFCTAJLy8gV2FybSByZWJvb3QgRWRnZXBvcnQsIHJldGFpbmluZyBVU0IgYWRkcmVzcworI2RlZmluZSBVU0JfUkVRVUVTVF9JT05fR0VUX0VQSUNfREVTQwkxCS8vIEdldCBFZGdlcG9ydCBDb21wYXRpYmlsaXR5IERlc2NyaXB0b3IKKy8vIHVudXNlZAkJCQkyCS8vIFVudXNlZCwgYXZhaWxhYmxlCisjZGVmaW5lIFVTQl9SRVFVRVNUX0lPTl9SRUFEX1JBTQkzCS8vIFJlYWQgIEVkZ2VQb3J0IFJBTSBhdCBzcGVjaWZpZWQgYWRkcgorI2RlZmluZSBVU0JfUkVRVUVTVF9JT05fV1JJVEVfUkFNCTQJLy8gV3JpdGUgRWRnZVBvcnQgUkFNIGF0IHNwZWNpZmllZCBhZGRyCisjZGVmaW5lIFVTQl9SRVFVRVNUX0lPTl9SRUFEX1JPTQk1CS8vIFJlYWQgIEVkZ2VQb3J0IFJPTSBhdCBzcGVjaWZpZWQgYWRkcgorI2RlZmluZSBVU0JfUkVRVUVTVF9JT05fV1JJVEVfUk9NCTYJLy8gV3JpdGUgRWRnZVBvcnQgUk9NIGF0IHNwZWNpZmllZCBhZGRyCisjZGVmaW5lIFVTQl9SRVFVRVNUX0lPTl9FWEVDX0RMX0NPREUJNwkvLyBCZWdpbiBleGVjdXRpb24gb2YgUkFNLWJhc2VkIGRvd25sb2FkCisJCQkJCQkvLyBjb2RlIGJ5IGp1bXBpbmcgdG8gYWRkcmVzcyBpbiB3SW5kZXg6d1ZhbHVlCisvLwkJCQkJOAkvLyBVbnVzZWQsIGF2YWlsYWJsZQorI2RlZmluZSBVU0JfUkVRVUVTVF9JT05fRU5BQkxFX1NVU1BFTkQJOQkvLyBFbmFibGUvRGlzYWJsZSBzdXNwZW5kIGZlYXR1cmUKKwkJCQkJCS8vICh3VmFsdWUgIT0gMDogRW5hYmxlOyB3VmFsdWUgPSAwOiBEaXNhYmxlKQorCisjZGVmaW5lIFVTQl9SRVFVRVNUX0lPTl9TRU5EX0lPU1AJMTAJLy8gU2VuZCBhbiBJT1NQIGNvbW1hbmQgdG8gdGhlIGVkZ2Vwb3J0IG92ZXIgdGhlIGNvbnRyb2wgcGlwZQkKKyNkZWZpbmUgVVNCX1JFUVVFU1RfSU9OX1JFQ1ZfSU9TUAkxMQkvLyBSZWNlaXZlIGFuIElPU1AgY29tbWFuZCBmcm9tIHRoZSBlZGdlcG9ydCBvdmVyIHRoZSBjb250cm9sIHBpcGUKKworCisjZGVmaW5lIFVTQl9SRVFVRVNUX0lPTl9ESVNfSU5UX1RJTUVSCTB4ODAJLy8gU2VudCB0byBBeGlvaG0gdG8gZW5hYmxlLyBkaXNhYmxlCisJCQkJCQkvLyBpbnRlcnJ1cHQgdG9rZW4gdGltZXIKKwkJCQkJCS8vIHdWYWx1ZSA9IDEsIGVuYWJsZSAoZGVmYXVsdCkKKwkJCQkJCS8vIHdWYWx1ZSA9IDAsIGRpc2FibGUKKworLy8KKy8vIERlZmluZSBwYXJhbWV0ZXIgdmFsdWVzIGZvciBvdXIgdmVuZG9yLXNwZWNpZmljIGNvbW1hbmRzCisvLworCisvLworLy8gRWRnZXBvcnQgQ29tcGF0aWJsaXR5IERlc2NyaXB0b3IKKy8vCisvLyBUaGlzIGRlc2NyaXB0b3IgaXMgb25seSByZXR1cm5lZCBieSBFZGdlcG9ydC1jb21wYXRpYmxlIGRldmljZXMKKy8vIHN1cHBvcnRpbmcgdGhlIEVQaUMgc3BlYy4gVHJ1ZSBJT04gZGV2aWNlcyBkbyBub3QgcmV0dXJuIHRoaXMKKy8vIGRlc2NyaXB0b3IsIGJ1dCBpbnN0ZWFkIHJldHVybiBTVEFMTCBvbiByZWNlaXB0IG9mIHRoZQorLy8gR0VUX0VQSUNfREVTQyBjb21tYW5kLiBUaGUgZHJpdmVyIGludGVycHJldHMgYSBTVEFMTCB0byBtZWFuIHRoYXQKKy8vIHRoaXMgaXMgYSAicmVhbCIgRWRnZXBvcnQuCisvLworCitzdHJ1Y3QgZWRnZV9jb21wYXRpYmlsaXR5X2JpdHMKK3sKKwkvLyBUaGlzIF9fdTMyIGRlZmluZXMgd2hpY2ggVmVuZG9yLXNwZWNpZmljIGNvbW1hbmRzL2Z1bmN0aW9uYWxpdHkKKwkvLyB0aGUgZGV2aWNlIHN1cHBvcnRzIG9uIHRoZSBkZWZhdWx0IEVQMCBwaXBlLgorCisJX191MzIJVmVuZEVuYWJsZVN1c3BlbmQJOiAgMTsJLy8gMDAwMSBTZXQgaWYgZGV2aWNlIHN1cHBvcnRzIElPTl9FTkFCTEVfU1VTUEVORAorCV9fdTMyCVZlbmRVbnVzZWQJCTogMzE7CS8vIEF2YWlsYWJsZSBmb3IgZnV0dXJlIGV4cGFuc2lvbiwgbXVzdCBiZSAwCisKKwkvLyBUaGlzIF9fdTMyIGRlZmluZXMgd2hpY2ggSU9TUCBjb21tYW5kcyBhcmUgc3VwcG9ydGVkIG92ZXIgdGhlCisJLy8gYnVsayBwaXBlIEVQMS4KKworCQkJCQkJCQkJCQkvLyB4eHh4IFNldCBpZiBkZXZpY2Ugc3VwcG9ydHM6CisJX191MzIJSU9TUE9wZW4JCTogIDE7CS8vIDAwMDEJT1BFTiAvIE9QRU5fUlNQIChDdXJyZW50bHkgbXVzdCBiZSAxKQorCV9fdTMyCUlPU1BDbG9zZQkJOiAgMTsJLy8gMDAwMglDTE9TRQorCV9fdTMyCUlPU1BDaGFzZQkJOiAgMTsJLy8gMDAwNAlDSEFTRSAvIENIQVNFX1JTUAorCV9fdTMyCUlPU1BTZXRSeEZsb3cJCTogIDE7CS8vIDAwMDgJU0VUX1JYX0ZMT1cKKwlfX3UzMglJT1NQU2V0VHhGbG93CQk6ICAxOwkvLyAwMDEwCVNFVF9UWF9GTE9XCisJX191MzIJSU9TUFNldFhDaGFyCQk6ICAxOwkvLyAwMDIwCVNFVF9YT05fQ0hBUi9TRVRfWE9GRl9DSEFSCisJX191MzIJSU9TUFJ4Q2hlY2sJCTogIDE7CS8vIDAwNDAJUlhfQ0hFQ0tfUkVRL1JYX0NIRUNLX1JTUAorCV9fdTMyCUlPU1BTZXRDbHJCcmVhawkJOiAgMTsJLy8gMDA4MAlTRVRfQlJFQUsvQ0xFQVJfQlJFQUsKKwlfX3UzMglJT1NQV3JpdGVNQ1IJCTogIDE7CS8vIDAxMDAJTUNSIHJlZ2lzdGVyIHdyaXRlcyAoc2V0L2NsciBEVFIvUlRTKQorCV9fdTMyCUlPU1BXcml0ZUxDUgkJOiAgMTsJLy8gMDIwMAlMQ1IgcmVnaXN0ZXIgd3JpdGVzICh3b3JkbGVuL3N0b3AvcGFyaXR5KQorCV9fdTMyCUlPU1BTZXRCYXVkUmF0ZQkJOiAgMTsJLy8gMDQwMAlzZXR0aW5nIEJhdWQgcmF0ZSAod3JpdGVzIHRvIExDUi44MGggYW5kIERMTC9ETE0gcmVnaXN0ZXIpCisJX191MzIJSU9TUERpc2FibGVJbnRQaXBlCTogIDE7CS8vIDA4MDAgRG8gbm90IHVzZSB0aGUgaW50ZXJydXB0IHBpcGUgZm9yIFR4Q3JlZGl0cyBvciBSeEJ1dGVzQXZhaWxhYmxlCisJX191MzIJSU9TUFJ4RGF0YUF2YWlsCQk6ICAxOyAgIC8vIDEwMDAgUmV0dXJuIHN0YXR1cyBvZiBSWCBGaWZvIChEYXRhIGF2YWlsYWJsZSBpbiBGaWZvKQorCV9fdTMyCUlPU1BUeFB1cmdlCQk6ICAxOwkvLyAyMDAwIFB1cmdlIFRYQnVmZmVyIGFuZC9vciBGaWZvIGluIEVkZ2Vwb3J0IGhhcmR3YXJlCisJX191MzIJSU9TUFVudXNlZAkJOiAxODsJLy8gQXZhaWxhYmxlIGZvciBmdXR1cmUgZXhwYW5zaW9uLCBtdXN0IGJlIDAKKworCS8vIFRoaXMgX191MzIgZGVmaW5lcyB3aGljaCAnZ2VuZXJhbCcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZAorCisJX191MzIJVHJ1ZUVkZ2Vwb3J0CQk6ICAxOwkvLyAwMDAxCVNldCBpZiBkZXZpY2UgaXMgYSAncmVhbCcgRWRnZXBvcnQKKwkJCQkJCQkJCQkJLy8gKFVzZWQgb25seSBieSBkcml2ZXIsIE5FVkVSIHNldCBieSBhbiBFUGlDIGRldmljZSkKKwlfX3UzMglHZW5VbnVzZWQJCTogMzE7CS8vIEF2YWlsYWJsZSBmb3IgZnV0dXJlIGV4cGFuc2lvbiwgbXVzdCBiZSAwCisKK307CisKK3N0cnVjdCBlZGdlX2NvbXBhdGliaWxpdHlfZGVzY3JpcHRvcgoreworCV9fdTgJTGVuZ3RoOwkJCQkvLyBEZXNjcmlwdG9yIExlbmd0aCAocGVyIFVTQiBzcGVjKQorCV9fdTgJRGVzY1R5cGU7CQkJLy8gRGVzY3JpcHRvciBUeXBlIChwZXIgVVNCIHNwZWMsID1ERVZJQ0UgdHlwZSkKKwlfX3U4CUVwaWNWZXI7CQkJLy8gVmVyc2lvbiBvZiBFUGlDIHNwZWMgc3VwcG9ydGVkCisJCQkJCQkJCQkJCS8vIChDdXJyZW50bHkgbXVzdCBiZSAxKQorCV9fdTgJTnVtUG9ydHM7CQkJLy8gTnVtYmVyIG9mIHNlcmlhbCBwb3J0cyBzdXBwb3J0ZWQKKwlfX3U4CWlEb3dubG9hZEZpbGU7CQkJLy8gSW5kZXggb2Ygc3RyaW5nIGNvbnRhaW5pbmcgZG93bmxvYWQgY29kZSBmaWxlbmFtZQorCQkJCQkJCQkJCQkvLyAwPW5vIGRvd25sb2FkLCBGRj1kb3dubG9hZCBjb21waWxlZCBpbnRvIGRyaXZlci4KKwlfX3U4CVVudXNlZFsgMyBdOwkJCS8vIEF2YWlsYWJsZSBmb3IgZnV0dXJlIGV4cGFuc2lvbiwgbXVzdCBiZSAwCisJCQkJCQkJCQkJCS8vIChDdXJyZW50bHkgbXVzdCBiZSAwKS4KKwlfX3U4CU1ham9yVmVyc2lvbjsJCQkvLyBGaXJtd2FyZSB2ZXJzaW9uOiB4eC4KKwlfX3U4CU1pbm9yVmVyc2lvbjsJCQkvLyAgeXkuCisJX19sZTE2CUJ1aWxkTnVtYmVyOwkJCS8vICB6enp6IChMRSBmb3JtYXQpCisKKwkvLyBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBjb250YWlucyBfX3UzMnMsIHdpdGggZWFjaCBiaXQKKwkvLyBzcGVjaWZ5aW5nIHdoZXRoZXIgdGhlIEVQaUMgZGV2aWNlIHN1cHBvcnRzIHRoZSBnaXZlbgorCS8vIGNvbW1hbmQgb3IgZnVuY3Rpb25hbGl0eS4KKworCXN0cnVjdCBlZGdlX2NvbXBhdGliaWxpdHlfYml0cwlTdXBwb3J0czsKKworfTsKKworLy8gVmFsdWVzIGZvciBpRG93bmxvYWRGaWxlCisjZGVmaW5lCUVER0VfRE9XTkxPQURfRklMRV9OT05FCQkwCS8vIE5vIGRvd25sb2FkIHJlcXVlc3RlZAorI2RlZmluZQlFREdFX0RPV05MT0FEX0ZJTEVfSU5URVJOQUwJMHhGRgkvLyBEb3dubG9hZCB0aGUgZmlsZSBjb21waWxlZCBpbnRvIGRyaXZlciAoOTMwIHZlcnNpb24pCisjZGVmaW5lCUVER0VfRE9XTkxPQURfRklMRV9JOTMwCQkweEZGCS8vIERvd25sb2FkIHRoZSBmaWxlIGNvbXBpbGVkIGludG8gZHJpdmVyICg5MzAgdmVyc2lvbikKKyNkZWZpbmUJRURHRV9ET1dOTE9BRF9GSUxFXzgwMjUxCTB4RkUJLy8gRG93bmxvYWQgdGhlIGZpbGUgY29tcGlsZWQgaW50byBkcml2ZXIgKDgwMjUxIHZlcnNpb24pCisKKworCisvKgorICoJU3BlY2lhbCBhZGRyZXNzZXMgZm9yIFJFQUQvV1JJVEVfUkFNL1JPTQorICovCisKKy8vIFZlcnNpb24gMSAob3JpZ2luYWwpIGZvcm1hdCBvZiBEZXZpY2VQYXJhbXMKKyNkZWZpbmUJRURHRV9NQU5VRl9ERVNDX0FERFJfVjEJCTB4MDBGRjdGMDAKKyNkZWZpbmUJRURHRV9NQU5VRl9ERVNDX0xFTl9WMQkJc2l6ZW9mKEVER0VfTUFOVUZfREVTQ1JJUFRPUl9WMSkKKworLy8gVmVyc2lvbiAyIGZvcm1hdCBvZiBEZXZpY2VQYXJhbXMuIFRoaXMgZm9ybWF0IGlzIGxvbmdlciAoM0MwaCkKKy8vIGFuZCBzdGFydHMgbG93ZXIgaW4gbWVtb3J5LCBhdCB0aGUgdXBwZXJtb3N0IDFLIGluIFJPTS4KKyNkZWZpbmUJRURHRV9NQU5VRl9ERVNDX0FERFIJCTB4MDBGRjdDMDAKKyNkZWZpbmUJRURHRV9NQU5VRl9ERVNDX0xFTgkJc2l6ZW9mKHN0cnVjdCBlZGdlX21hbnVmX2Rlc2NyaXB0b3IpCisKKy8vIEJvb3QgcGFyYW1zIGRlc2NyaXB0b3IKKyNkZWZpbmUJRURHRV9CT09UX0RFU0NfQUREUgkJMHgwMEZGN0ZDMAorI2RlZmluZQlFREdFX0JPT1RfREVTQ19MRU4JCXNpemVvZihzdHJ1Y3QgZWRnZV9ib290X2Rlc2NyaXB0b3IpCisKKy8vIERlZmluZSB0aGUgbWF4IGJsb2NrIHNpemUgdGhhdCBtYXkgYmUgcmVhZCBvciB3cml0dGVuCisvLyBpbiBhIHJlYWQvd3JpdGUgUkFNL1JPTSBjb21tYW5kLgorI2RlZmluZQlNQVhfU0laRV9SRVFfSU9OX1JFQURfTUVNCSggKF9fdTE2KSA2NCApCisjZGVmaW5lCU1BWF9TSVpFX1JFUV9JT05fV1JJVEVfTUVNCSggKF9fdTE2KSA2NCApCisKKworLy8KKy8vIE5vdGVzIGZvciB0aGUgZm9sbG93aW5nIHR3byBJT04gdmVuZG9yLXNwZWNpZmljIHBhcmFtIGRlc2NyaXB0b3JzOgorLy8KKy8vCTEuCVRoZXNlIGhhdmUgYSBzdGFuZGFyZCBVU0IgZGVzY3JpcHRvciBoZWFkZXIgc28gdGhleSBsb29rIGxpa2UgYQorLy8JCW5vcm1hbCBkZXNjcmlwdG9yLgorLy8JMi4JQW55IHN0cmluZ3MgaW4gdGhlIHN0cnVjdHVyZXMgYXJlIGluIFVTQi1kZWZpbmVkIHN0cmluZworLy8JCWRlc2NyaXB0b3IgZm9ybWF0LCBzbyB0aGF0IHRoZXkgbWF5IGJlIHNlcGFyYXRlbHkgcmV0cmlldmVkLAorLy8JCWlmIG5lY2Vzc2FyeSwgd2l0aCBhIG1pbmltdW0gb2Ygd29yayBvbiB0aGUgOTMwLiBUaGlzIGFsc28KKy8vCQlyZXF1aXJlcyB0aGVtIHRvIGJlIGluIFVOSUNPREUgZm9ybWF0LCB3aGljaCwgZm9yIEVuZ2xpc2ggYXQKKy8vCQlsZWFzdCwgc2ltcGx5IG1lYW5zIGV4dGVuZGluZyBlYWNoIF9fdTggaW50byBhIF9fdTE2LgorLy8JMy4JRm9yIGFsbCBmaWVsZHMsIDAwIG1lYW5zICd1bmluaXRpYWxpemVkJy4KKy8vCTQuCUFsbCB1bnVzZWQgYXJlYXMgc2hvdWxkIGJlIHNldCB0byAwMCBmb3IgZnV0dXJlIGV4cGFuc2lvbi4KKy8vCisKKy8vIFRoaXMgc3RydWN0dXJlIGlzIHZlciAyIGZvcm1hdC4gSXQgY29udGFpbnMgQUxMIFVTQiBkZXNjcmlwdG9ycyBhcworLy8gd2VsbCBhcyB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRoYXQgd2VyZSBpbiB0aGUgb3JpZ2luYWwgVjEKKy8vIHN0cnVjdHVyZS4gSXQgaXMgTk9UIG1vZGlmaWVkIHdoZW4gbmV3IGJvb3QgY29kZSBpcyBkb3dubG9hZGVkOyByYXRoZXIsCisvLyB0aGVzZSB2YWx1ZXMgYXJlIHNldCBvciBtb2RpZmllZCBieSBtYW51ZmFjdHVyaW5nLiBJdCBpcyBsb2NhdGVkIGF0CisvLyB4QzAwLXhGQkYgKGxlbmd0aCAzQzBoKSBpbiB0aGUgUk9NLgorLy8gVGhpcyBzdHJ1Y3R1cmUgaXMgYSBzdXBlcnNldCBvZiB0aGUgdjEgc3RydWN0dXJlIGFuZCBpcyBhcnJhbmdlZCBzbworLy8gdGhhdCBhbGwgb2YgdGhlIHYxIGZpZWxkcyByZW1haW4gYXQgdGhlIHNhbWUgYWRkcmVzcy4gV2UgYXJlIGp1c3QKKy8vIGFkZGluZyBtb3JlIHJvb20gdG8gdGhlIGZyb250IG9mIHRoZSBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgZGVzY3JpcHRvcnMuCisvLworLy8gVGhlIGFjdHVhbCBjb250ZW50cyBvZiB0aGlzIHN0cnVjdHVyZSBhcmUgZGVmaW5lZCBpbiBhIDkzMCBhc3NlbWJseQorLy8gZmlsZSwgY29udmVydGVkIHRvIGEgYmluYXJ5IGltYWdlLCBhbmQgdGhlbiB3cml0dGVuIGJ5IHRoZSBzZXJpYWxpemF0aW9uCisvLyBwcm9ncmFtLiBUaGUgQyBkZWZpbml0aW9uIG9mIHRoaXMgc3RydWN0dXJlIGp1c3QgZGVmaW5lcyBhIGR1bW15CisvLyBhcmVhIGZvciBnZW5lcmFsIFVTQiBkZXNjcmlwdG9ycyBhbmQgdGhlIGRlc2NyaXB0b3IgdGFibGVzICh0aGUgcm9vdAorLy8gZGVzY3JpcHRvciBzdGFydHMgYXQgeEMwMCkuIEF0IHRoZSBib3R0b20gb2YgdGhlIHN0cnVjdHVyZSBhcmUgdGhlCisvLyBmaWVsZHMgaW5oZXJpdGVkIGZyb20gdGhlIHYxIHN0cnVjdHVyZS4KKworI2RlZmluZSBNQVhfU0VSSUFMTlVNQkVSX0xFTgkxMgorI2RlZmluZSBNQVhfQVNTRU1CTFlOVU1CRVJfTEVOCTE0CisKK3N0cnVjdCBlZGdlX21hbnVmX2Rlc2NyaXB0b3IgeworCisJX191MTYJUm9vdERlc2NUYWJsZVsweDEwXTsJCQkvLyBDMDAgUm9vdCBvZiBkZXNjcmlwdG9yIHRhYmxlcyAoanVzdCBhIHBsYWNlaG9sZGVyKQorCV9fdTgJRGVzY3JpcHRvckFyZWFbMHgyRTBdOwkJCS8vIEMyMCBEZXNjcmlwdG9ycyBnbyBoZXJlLCB1cCB0byAyRTBoIChqdXN0IGEgcGxhY2Vob2xkZXIpCisKKwkJCQkJCQkvLyAgICAgU3RhcnQgb2YgdjEtY29tcGF0aWJsZSBzZWN0aW9uCisJX191OAlMZW5ndGg7CQkJCQkvLyBGMDAgRGVzYyBsZW5ndGggZm9yIHdoYXQgZm9sbG93cywgcGVyIFVTQiAoPSBDMGggKQorCV9fdTgJRGVzY1R5cGU7CQkJCS8vIEYwMSBEZXNjIHR5cGUsIHBlciBVU0IgKD1ERVZJQ0UgdHlwZSkKKwlfX3U4CURlc2NWZXI7CQkJCS8vIEYwMiBEZXNjIHZlcnNpb24vZm9ybWF0IChjdXJyZW50bHkgMikKKwlfX3U4CU51bVJvb3REZXNjRW50cmllczsJCQkvLyBGMDMgIyBlbnRyaWVzIGluIFJvb3REZXNjVGFibGUKKworCV9fdTgJUm9tU2l6ZTsJCQkJLy8gRjA0IFNpemUgb2YgUk9NL0UyUFJPTSBpbiBLCisJX191OAlSYW1TaXplOwkJCQkvLyBGMDUgU2l6ZSBvZiBleHRlcm5hbCBSQU0gaW4gSworCV9fdTgJQ3B1UmV2OwkJCQkJLy8gRjA2IENQVSByZXZpc2lvbiBsZXZlbCAoY2hnIG9ubHkgaWYgcy93IHZpc2libGUpCisJX191OAlCb2FyZFJldjsJCQkJLy8gRjA3IFBDQiByZXZpc2lvbiBsZXZlbCAoY2hnIG9ubHkgaWYgcy93IHZpc2libGUpCisKKwlfX3U4CU51bVBvcnRzOwkJCQkvLyBGMDggTnVtYmVyIG9mIHBvcnRzCisJX191OAlEZXNjRGF0ZVszXTsJCQkJLy8gRjA5IE1NL0REL1lZIHdoZW4gZGVzY3JpcHRvciB0ZW1wbGF0ZSB3YXMgY29tcGlsZXIsCisJCQkJCQkJLy8gICAgIHNvIGhvc3QgY2FuIHRyYWNrIGNoYW5nZXMgdG8gVVNCLW9ubHkgZGVzY3JpcHRvcnMuCisKKwlfX3U4CVNlck51bUxlbmd0aDsJCQkJLy8gRjBDIFVTQiBzdHJpbmcgZGVzY3JpcHRvciBsZW4KKwlfX3U4CVNlck51bURlc2NUeXBlOwkJCQkvLyBGMEQgVVNCIGRlc2NyaXB0b3IgdHlwZSAoPVNUUklORyB0eXBlKQorCV9fbGUxNglTZXJpYWxOdW1iZXJbTUFYX1NFUklBTE5VTUJFUl9MRU5dOwkvLyBGMEUgIjAxLTAxLTAwMDEwMCIgVW5pY29kZSBTZXJpYWwgTnVtYmVyCisKKwlfX3U4CUFzc2VtYmx5TnVtTGVuZ3RoOwkJCS8vIEYyNiBVU0Igc3RyaW5nIGRlc2NyaXB0b3IgbGVuCisJX191OAlBc3NlbWJseU51bURlc2NUeXBlOwkJCS8vIEYyNyBVU0IgZGVzY3JpcHRvciB0eXBlICg9U1RSSU5HIHR5cGUpCisJX19sZTE2CUFzc2VtYmx5TnVtYmVyW01BWF9BU1NFTUJMWU5VTUJFUl9MRU5dOwkvLyBGMjggIjM1MC0xMDAwLTAxLUEgIiBhc3NlbWJseSBudW1iZXIKKworCV9fdTgJT2VtQXNzeU51bUxlbmd0aDsJCQkvLyBGNDQgVVNCIHN0cmluZyBkZXNjcmlwdG9yIGxlbgorCV9fdTgJT2VtQXNzeU51bURlc2NUeXBlOwkJCS8vIEY0NSBVU0IgZGVzY3JpcHRvciB0eXBlICg9U1RSSU5HIHR5cGUpCisJX19sZTE2CU9lbUFzc3lOdW1iZXJbTUFYX0FTU0VNQkxZTlVNQkVSX0xFTl07CS8vIEY0NiAieHh4eHh4eHh4eHh4eHgiIE9FTSBhc3NlbWJseSBudW1iZXIKKworCV9fdTgJTWFudWZEYXRlTGVuZ3RoOwkJCS8vIEY2MiBVU0Igc3RyaW5nIGRlc2NyaXB0b3IgbGVuCisJX191OAlNYW51ZkRhdGVEZXNjVHlwZTsJCQkvLyBGNjMgVVNCIGRlc2NyaXB0b3IgdHlwZSAoPVNUUklORyB0eXBlKQorCV9fbGUxNglNYW51ZkRhdGVbNl07CQkJCS8vIEY2NCAiTU1ERFlZIiBtYW51ZmFjdHVyaW5nIGRhdGUKKworCV9fdTgJUmVzZXJ2ZWQzWzB4NERdOwkJCS8vIEY3MCAtLSB1bnVzZWQsIHNldCB0byAwIC0tCisKKwlfX3U4CVVhcnRUeXBlOwkJCQkvLyBGQkQgVWFydCBUeXBlCisJX191OAlJb25QaWQ7CQkJCQkvLyBGQkUgUHJvZHVjdCBJRCwgPT0gTFNCIG9mIFVTQiBEZXZEZXNjLlBJRAorCQkJCQkJCS8vICAgICAgKE5vdGU6IEVkZ2Vwb3J0LzRzIGJlZm9yZSAxMS85OCB3aWxsIGhhdmUKKwkJCQkJCQkvLyAgICAgICAwMCBoZXJlIGluc3RlYWQgb2YgMDEpCisJX191OAlJb25Db25maWc7CQkJCS8vIEZCRiBDb25maWcgYnl0ZSBmb3IgSU9OIG1hbnVmYWN0dXJpbmcgdXNlCisJCQkJCQkJLy8gRkJGIGVuZCBvZiBzdHJ1Y3R1cmUsIHRvdGFsIGxlbiA9IDNDMGgKKworfTsKKworCisjZGVmaW5lIE1BTlVGX0RFU0NfVkVSXzEJMQkvLyBPcmlnaW5hbCBkZWZpbml0aW9uIG9mIE1BTlVGX0RFU0MKKyNkZWZpbmUgTUFOVUZfREVTQ19WRVJfMgkyCS8vIFZlciAyLCBzdGFydHMgYXQgeEMwMGggbGVuIDNDMGgKKworCisvLyBVYXJ0IFR5cGVzCisvLyBOb3RlOiBTaW5jZSB0aGlzIGZpZWxkIHdhcyBhZGRlZCBvbmx5IHJlY2VudGx5LCBhbGwgRWRnZXBvcnQvNCB1bml0cworLy8gc2hpcHBlZCBiZWZvcmUgMTEvOTggd2lsbCBoYXZlIDAwIGluIHRoaXMgZmllbGQuIFRoZXJlZm9yZSwKKy8vIGJvdGggMDAgYW5kIDAxIHZhbHVlcyBtZWFuICc2NTQuCisjZGVmaW5lIE1BTlVGX1VBUlRfRVhBUl82NTRfRUFSTFkJMAkvLyBFeGFyIDE2QzY1NCBpbiBFZGdlcG9ydC80cyBiZWZvcmUgMTEvOTgKKyNkZWZpbmUgTUFOVUZfVUFSVF9FWEFSXzY1NAkJMQkvLyBFeGFyIDE2QzY1NAorI2RlZmluZSBNQU5VRl9VQVJUX0VYQVJfMjg1MgkJMgkvLyBFeGFyIDE2QzI4NTIKKworLy8KKy8vIE5vdGU6IFRoZSBDcHVSZXYgYW5kIEJvYXJkUmV2IHZhbHVlcyBkbyBub3QgY29uZm9ybSB0byBtYW51ZmFjdHVyaW5nCisvLyByZXZpc2lvbnM7IHRoZXkgYXJlIHRvIGJlIGluY3JlbWVudGVkIG9ubHkgd2hlbiB0aGUgQ1BVIG9yIGhhcmR3YXJlCisvLyBjaGFuZ2VzIGluIGEgc29mdHdhcmUtdmlzaWJsZSB3YXksIHN1Y2ggdGhhdCB0aGUgOTMwIHNvZnR3YXJlIG9yCisvLyB0aGUgaG9zdCBkcml2ZXIgbmVlZHMgdG8gaGFuZGxlIHRoZSBoYXJkd2FyZSBkaWZmZXJlbnRseS4KKy8vCisKKy8vIFZhbHVlcyBvZiBib3R0b20gNSBiaXRzIG9mIENwdVJldiAmIEJvYXJkUmV2IGZvcgorLy8gSW1wbGVtZW50YXRpb24gMCAoaWUsIDkzMC1iYXNlZCkKKyNkZWZpbmUJTUFOVUZfQ1BVX1JFVl9BRDQJCTEJLy8gOTMwIEFENCwgd2l0aCBFUDEgUnggYnVnIChuZWVkcyBSWFNQTSkKKyNkZWZpbmUJTUFOVUZfQ1BVX1JFVl9BRDUJCTIJLy8gOTMwIEFENSwgd2l0aCBhYm92ZSBidWcgKHN1cHBvc2VkbHkpIGZpeGVkCisjZGVmaW5lCU1BTlVGX0NQVV84MDI1MQkJCTB4MjAJLy8gSW50ZWwgODAyNTEKKworCisjZGVmaW5lIE1BTlVGX0JPQVJEX1JFVl9BCQkxCS8vIE9yaWdpbmFsIHZlcnNpb24sID09IE1hbnVmIFJldiBBCisjZGVmaW5lIE1BTlVGX0JPQVJEX1JFVl9CCQkyCS8vIE1hbnVmIFJldiBCLCB3YWtldXAgaW50ZXJydXB0IHdvcmtzCisjZGVmaW5lIE1BTlVGX0JPQVJEX1JFVl9DCQkzCS8vIE1hbnVmIFJldiBDLCAyLzQgcG9ydHMsIHJzMjMyL3JzNDIyCisjZGVmaW5lIE1BTlVGX0JPQVJEX1JFVl9HRU5FUkFUSU9OXzIJMHgyMAkvLyBTZWNvbmQgZ2VuZXJhaXRvbiBlZGdlcG9ydAorCisKKy8vIFZhbHVlcyBvZiBib3R0b20gNSBiaXRzIG9mIENwdVJldiAmIEJvYXJkUmV2IGZvcgorLy8gSW1wbGVtZW50YXRpb24gMSAoaWUsIDI1MStOZXRjaGlwLWJhc2VkKQorI2RlZmluZQlNQU5VRl9DUFVfUkVWXzEJCQkxCS8vIEMyNTFUQiBSZXYgMSAoTmVlZCBhY3R1YWwgSW50ZWwgcmV2IGhlcmUpCisKKyNkZWZpbmUgTUFOVUZfQk9BUkRfUkVWX0EJCTEJLy8gRmlyc3QgcmV2IG9mIDI1MStOZXRjaGlwIGRlc2lnbgorCisjZGVmaW5lCU1BTlVGX1NFUk5VTV9MRU5HVEgJCXNpemVvZigoKHN0cnVjdCBlZGdlX21hbnVmX2Rlc2NyaXB0b3IgKikwKS0+U2VyaWFsTnVtYmVyKQorI2RlZmluZQlNQU5VRl9BU1NZTlVNX0xFTkdUSAkJc2l6ZW9mKCgoc3RydWN0IGVkZ2VfbWFudWZfZGVzY3JpcHRvciAqKTApLT5Bc3NlbWJseU51bWJlcikKKyNkZWZpbmUJTUFOVUZfT0VNQVNTWU5VTV9MRU5HVEgJCXNpemVvZigoKHN0cnVjdCBlZGdlX21hbnVmX2Rlc2NyaXB0b3IgKikwKS0+T2VtQXNzeU51bWJlcikKKyNkZWZpbmUJTUFOVUZfTUFOVUZEQVRFX0xFTkdUSAkJc2l6ZW9mKCgoc3RydWN0IGVkZ2VfbWFudWZfZGVzY3JpcHRvciAqKTApLT5NYW51ZkRhdGUpCisKKyNkZWZpbmUJTUFOVUZfSU9OX0NPTkZJR19ESUFHX05PX0xPT1AJMHgyMAkvLyBBcyBiZWxvdyBidXQgbm8gZXh0IGxvb3BiYWNrIHRlc3QKKyNkZWZpbmUJTUFOVUZfSU9OX0NPTkZJR19ESUFHCQkweDQwCS8vIDkzMCBiYXNlZCBkZXZpY2U6IDE9UnVuIGgvdyBkaWFncywgMD1ub3JtCisJCQkJCQkvLyBUSVVNUCBEZXZpY2UgICAgOiAxPUlPTlNFUklBTCBuZWVkcyB0byBydW4gRmluYWwgVGVzdAorI2RlZmluZQlNQU5VRl9JT05fQ09ORklHX01BU1RFUgkJMHg4MAkvLyA5MzAgYmFzZWQgZGV2aWNlOiAgMT1NYXN0ZXIgbW9kZSwgMD1Ob3JtYWwKKwkJCQkJCS8vIFRJVU1QIERldmljZSAgICA6ICAxPUZpcnN0IGRldmljZSBvbiBhIG11bHRpIFRJVU1QIERldmljZQorCisvLworLy8gVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHBhcmFtZXRlcnMgZm9yIHRoZSBib290IGNvZGUsIGFuZAorLy8gaXMgcHJvZ3JhbW1lZCBhbG9uZyB3aXRoIG5ldyBib290IGNvZGUuIFRoZXNlIGFyZSB2YWx1ZXMKKy8vIHdoaWNoIGFyZSBzcGVjaWZpYyB0byBhIGdpdmVuIGJ1aWxkIG9mIHRoZSBib290IGNvZGUuIEl0CisvLyBpcyBleGFjdGx5IDY0IGJ5dGVzIGxvbmcgYW5kIGlzIGZpeGVkIGF0IGFkZHJlc3MgRkY6eEZDMAorLy8gLSBGRjp4RkZGLiBOb3RlIHRoYXQgdGhlIDkzMC1tYW5kYXRlZCBVQ09ORklHIGJ5dGVzIGFyZQorLy8gaW5jbHVkZWQgaW4gdGhpcyBzdHJ1Y3R1cmUuCisvLworc3RydWN0IGVkZ2VfYm9vdF9kZXNjcmlwdG9yIHsKKwlfX3U4CQlMZW5ndGg7CQkJLy8gQzAgRGVzYyBsZW5ndGgsIHBlciBVU0IgKD0gNDBoKQorCV9fdTgJCURlc2NUeXBlOwkJLy8gQzEgRGVzYyB0eXBlLCBwZXIgVVNCICg9IERFVklDRSB0eXBlKQorCV9fdTgJCURlc2NWZXI7CQkvLyBDMiBEZXNjIHZlcnNpb24vZm9ybWF0CisJX191OAkJUmVzZXJ2ZWQxOwkJLy8gQzMgLS0gdW51c2VkLCBzZXQgdG8gMCAtLQorCisJX19sZTE2CQlCb290Q29kZUxlbmd0aDsJCS8vIEM0IEJvb3QgY29kZSBnb2VzIGZyb20gRkY6MDAwMCB0byBGRjoobGVuLTEpCisJCQkJCQkvLwkgIChMRSBmb3JtYXQpCisKKwlfX3U4CQlNYWpvclZlcnNpb247CQkvLyBDNiBGaXJtd2FyZSB2ZXJzaW9uOiB4eC4KKwlfX3U4CQlNaW5vclZlcnNpb247CQkvLyBDNwkJCXl5LgorCV9fbGUxNgkJQnVpbGROdW1iZXI7CQkvLyBDOAkJCXp6enogKExFIGZvcm1hdCkKKwkKKwlfX3UxNgkJRW51bVJvb3REZXNjVGFibGU7CS8vIENBIFJvb3Qgb2YgUk9NLWJhc2VkIGRlc2NyaXB0b3IgdGFibGUKKwlfX3U4CQlOdW1EZXNjVHlwZXM7CQkvLyBDQyBOdW1iZXIgb2Ygc3VwcG9ydGVkIGRlc2NyaXB0b3IgdHlwZXMKKworCV9fdTgJCVJlc2VydmVkNDsJCS8vIENEIEZpeCBDb21waWxlciBQYWNraW5nCisKKwlfX2xlMTYJCUNhcGFiaWxpdGllczsJCS8vIENFLUNGIENhcGFiaWxpdGllcyBmbGFncyAoTEUgZm9ybWF0KQorCV9fdTgJCVJlc2VydmVkMlsweDI4XTsJLy8gRDAgLS0gdW51c2VkLCBzZXQgdG8gMCAtLQorCV9fdTgJCVVDb25maWcwOwkJLy8gRjggOTMwLWRlZmluZWQgQ1BVIGNvbmZpZ3VyYXRpb24gYnl0ZSAwCisJX191OAkJVUNvbmZpZzE7CQkvLyBGOSA5MzAtZGVmaW5lZCBDUFUgY29uZmlndXJhdGlvbiBieXRlIDEKKwlfX3U4CQlSZXNlcnZlZDNbNl07CQkvLyBGQSAtLSB1bnVzZWQsIHNldCB0byAwIC0tCisJCQkJCQkvLyBGRiBlbmQgb2Ygc3RydWN0dXJlLCB0b3RhbCBsZW4gPSA4MAorfTsKKworCisjZGVmaW5lIEJPT1RfREVTQ19WRVJfMQkJMQkvLyBPcmlnaW5hbCBkZWZpbml0aW9uIG9mIEJPT1RfUEFSQU1TCisjZGVmaW5lIEJPT1RfREVTQ19WRVJfMgkJMgkvLyAybmQgZGVmaW5pdGlvbiwgZGVzY3JpcHRvcnMgbm90IGluY2x1ZGVkIGluIGJvb3QKKworCisJLy8gQ2FwYWJpbGl0aWVzIGZsYWdzCisKKyNkZWZpbmUJQk9PVF9DQVBfUkVTRVRfQ01ECTB4MDAwMQkvLyBJZiBzZXQsIGJvb3QgY29ycmVjdGx5IHN1cHBvcnRzIElPTl9SRVNFVF9ERVZJQ0UKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgIFQgSSAgIFUgTSBQICAgRCBFIEYgSSBOIEkgVCBJIE8gTiBTCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vIENoaXAgZGVmaW5pdGlvbnMgaW4gSTJDCisjZGVmaW5lIFVNUDUxNTIJCQkweDUyCisjZGVmaW5lIFVNUDM0MTAJCQkweDEwCisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCVRJIEkyQyBGb3JtYXQgRGVmaW5pdGlvbnMKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEkyQ19ERVNDX1RZUEVfSU5GT19CQVNJQwkweDAxCisjZGVmaW5lIEkyQ19ERVNDX1RZUEVfRklSTVdBUkVfQkFTSUMJMHgwMgorI2RlZmluZSBJMkNfREVTQ19UWVBFX0RFVklDRQkJMHgwMworI2RlZmluZSBJMkNfREVTQ19UWVBFX0NPTkZJRwkJMHgwNAorI2RlZmluZSBJMkNfREVTQ19UWVBFX1NUUklORwkJMHgwNQorI2RlZmluZSBJMkNfREVTQ19UWVBFX0ZJUk1XQVJFX0FVVE8JMHgwNwkvLyBmb3IgMzQxMCBkb3dubG9hZAorI2RlZmluZSBJMkNfREVTQ19UWVBFX0NPTkZJR19LTFVER0UJMHgxNAkvLyBmb3IgMzQxMAorI2RlZmluZSBJMkNfREVTQ19UWVBFX1dBVENIUE9SVF9WRVJTSU9OCTB4MTUJLy8gZmlybXdhcmUgdmVyc2lvbiBudW1iZXIgZm9yIHdhdGNocG9ydAorI2RlZmluZSBJMkNfREVTQ19UWVBFX1dBVENIUE9SVF9DQUxJQlJBVElPTl9EQVRBIDB4MTYJLy8gV2F0Y2hwb3J0IENhbGlicmF0aW9uIERhdGEKKworI2RlZmluZSBJMkNfREVTQ19UWVBFX0ZJUk1XQVJFX0JMQU5LCTB4ZjIKKworLy8gU3BlY2lhbCBzZWN0aW9uIGRlZmluZWQgYnkgSU9OCisjZGVmaW5lIEkyQ19ERVNDX1RZUEVfSU9OCQkwCS8vIE5vdCBkZWZpbmVkIGJ5IFRJCisKKworc3RydWN0IHRpX2kyY19kZXNjCit7CisJX191OAlUeXBlOwkJCS8vIFR5cGUgb2YgZGVzY3JpcHRvcgorCV9fdTE2CVNpemU7CQkJLy8gU2l6ZSBvZiBkYXRhIG9ubHkgbm90IGluY2x1ZGluZyBoZWFkZXIKKwlfX3U4CUNoZWNrU3VtOwkJLy8gQ2hlY2tzdW0gKDggYml0IHN1bSBvZiBkYXRhIG9ubHkpCisJX191OAlEYXRhWzBdOwkJLy8gRGF0YSBzdGFydHMgaGVyZQorfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvLyBmb3IgNTE1MiBkZXZpY2VzIG9ubHkgKHR5cGUgMiByZWNvcmQpCisvLyBmb3IgMzQxMCB0aGUgdmVyc2lvbiBpcyBzdG9yZWQgaW4gdGhlIFdBVENIUE9SVF9GSVJNV0FSRV9WRVJTSU9OIGRlc2NyaXB0b3IKK3N0cnVjdCB0aV9pMmNfZmlybXdhcmVfcmVjCit7CisJX191OAlWZXJfTWFqb3I7CQkvLyBGaXJtd2FyZSBNYWpvciB2ZXJzaW9uIG51bWJlcgorCV9fdTgJVmVyX01pbm9yOwkJLy8gRmlybXdhcmUgTWlub3IgdmVyc2lvbiBudW1iZXIKKwlfX3U4CURhdGFbMF07CQkvLyBEb3dubG9hZCBzdGFydHMgaGVyZQorfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKK3N0cnVjdCB3YXRjaHBvcnRfZmlybXdhcmVfdmVyc2lvbgoreworLy8gQWRkZWQgMiBieXRlcyBmb3IgdmVyc2lvbiBudW1iZXIKKwlfX3U4CVZlcnNpb25fTWFqb3I7CQkvLyAgRG93bmxvYWQgVmVyc2lvbiAoZm9yIFdhdGNocG9ydCkKKwlfX3U4CVZlcnNpb25fTWlub3I7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworLy8gU3RydWN0dXJlIG9mIGhlYWRlciBvZiBkb3dubG9hZCBpbWFnZSBpbiBmd19kb3duLmgKK3N0cnVjdCB0aV9pMmNfaW1hZ2VfaGVhZGVyCit7CisJX19sZTE2CUxlbmd0aDsKKwlfX3U4CUNoZWNrU3VtOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgdGlfYmFzaWNfZGVzY3JpcHRvcgoreworCV9fdTgJUG93ZXI7CQkvLyBTZWxmIHBvd2VyZWQKKwkJCQkvLyBiaXQgNzogMSAtIHBvd2VyIHN3aXRjaGluZyBzdXBwb3J0ZWQKKwkJCQkvLyAgICAgICAgMCAtIHBvd2VyIHN3aXRjaGluZyBub3Qgc3VwcG9ydGVkCisJCQkJLy8KKwkJCQkvLyBiaXQgMDogMSAtIHNlbGYgcG93ZXJlZAorCQkJCS8vICAgICAgICAwIC0gYnVzIHBvd2VyZWQKKwkJCQkvLworCQkJCS8vCisJX191MTYJSHViVmlkOwkJLy8gVklEIEhVQgorCV9fdTE2CUh1YlBpZDsJCS8vIFBJRCBIVUIKKwlfX3UxNglEZXZQaWQ7CQkvLyBQSUQgRWRnZXBvcnQKKwlfX3U4CUh1YlRpbWU7CS8vIFRpbWUgZm9yIHBvd2VyIG9uIHRvIHBvd2VyIGdvb2QKKwlfX3U4CUh1YkN1cnJlbnQ7CS8vIEhVQiBDdXJyZW50ID0gMTAwbWEKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworLy8gQ1BVIC8gQm9hcmQgUmV2IERlZmluaXRpb25zCisjZGVmaW5lIFRJX0NQVV9SRVZfNTA1MgkJCTIJLy8gNTA1MiBiYXNlZCBlZGdlcG9ydHMKKyNkZWZpbmUgVElfQ1BVX1JFVl8zNDEwCQkJMwkvLyAzNDEwIGJhc2VkIGVkZ2Vwb3J0cworCisjZGVmaW5lIFRJX0JPQVJEX1JFVl9USV9FUAkJMAkvLyBCYXNpYyB0aSBiYXNlZCBlZGdlcG9ydAorI2RlZmluZSBUSV9CT0FSRF9SRVZfQ09NUEFDVAkJMQkvLyBDb21wYWN0IGJvYXJkCisjZGVmaW5lIFRJX0JPQVJEX1JFVl9XQVRDSFBPUlQJCTIJLy8gV2F0Y2hwb3J0CisKKworI2RlZmluZSBUSV9HRVRfQ1BVX1JFVklTSU9OKHgpCQkoX191OCkoKCgoeCk+PjQpJjB4MGYpKQorI2RlZmluZSBUSV9HRVRfQk9BUkRfUkVWSVNJT04oeCkJKF9fdTgpKCgoeCkmMHgwZikpCisKKyNkZWZpbmUgVElfSTJDX1NJWkVfTUFTSwkJMHgxZiAgLy8gNSBiaXRzCisjZGVmaW5lIFRJX0dFVF9JMkNfU0laRSh4KQkJKCgoKHgpICYgVElfSTJDX1NJWkVfTUFTSykrMSkqMjU2KQorCisjZGVmaW5lIFRJX01BWF9JMkNfU0laRQkJCSggMTYgKiAxMDI0ICkKKworI2RlZmluZSBUSV9NQU5VRl9WRVJTSU9OXzAJCTAJCisKKy8vIElvbkNvbmlnMiBmbGFncworI2RlZmluZSBUSV9DT05GSUcyX1JTMjMyCQkweDAxCisjZGVmaW5lIFRJX0NPTkZJRzJfUlM0MjIJCTB4MDIKKyNkZWZpbmUgVElfQ09ORklHMl9SUzQ4NQkJMHgwNAorI2RlZmluZSBUSV9DT05GSUcyX1NXSVRDSEFCTEUJCTB4MDgKKworI2RlZmluZSBUSV9DT05GSUcyX1dBVENIUE9SVAkJMHgxMAorCisKK3N0cnVjdCBlZGdlX3RpX21hbnVmX2Rlc2NyaXB0b3IKK3sKKwlfX3U4IElvbkNvbmZpZzsJCS8vICBDb25maWcgYnl0ZSBmb3IgSU9OIG1hbnVmYWN0dXJpbmcgdXNlCisJX191OCBJb25Db25maWcyOwkvLyAgRXhwYW5zaW9uCisJX191OCBWZXJzaW9uOwkJLy8gIFZlcnNpb24KKwlfX3U4IENwdVJldl9Cb2FyZFJldjsJLy8gIENQVSByZXZpc2lvbiBsZXZlbCAoMHhGMCkgYW5kIEJvYXJkIFJldiBMZXZlbCAoMHgwRikKKwlfX3U4IE51bVBvcnRzOwkJLy8gIE51bWJlciBvZiBwb3J0cwlmb3IgdGhpcyBVTVAKKwlfX3U4IE51bVZpcnR1YWxQb3J0czsJLy8gIE51bWJlciBvZiBWaXJ0dWFsIHBvcnRzCisJX191OCBIdWJDb25maWcxOwkvLyAgVXNlZCB0byBjb25maWd1cmUgdGhlIEh1YgorCV9fdTggSHViQ29uZmlnMjsJLy8gIFVzZWQgdG8gY29uZmlndXJlIHRoZSBIdWIKKwlfX3U4IFRvdGFsUG9ydHM7CS8vICBUb3RhbCBOdW1iZXIgb2YgQ29tIFBvcnRzIGZvciB0aGUgZW50aXJlIGRldmljZSAoQWxsIFVNUHMpCisJX191OCBSZXNlcnZlZDsJCS8vICBSZXNlcnZlZAorfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKKyNlbmRpZgkJLy8gaWYgIWRlZmluZWQoX1VTQlZFTkRfSCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZDY5YzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCkBAIC0wLDAgKzEsOTczIEBACisvKgorICogVVNCIENvbXBhcSBpUEFRIGRyaXZlcgorICoKKyAqCUNvcHlyaWdodCAoQykgMjAwMSAtIDIwMDIKKyAqCSAgICBHYW5lc2ggVmFyYWRhcmFqYW4gPGdhbmVzaEB2ZXJpdGFzLmNvbT4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICgxMi8xMi8yMDAyKSBnYW5lc2gKKyAqIAlBZGRlZCBzdXBwb3J0IGZvciBwcmFjdGljYWxseSBhbGwgZGV2aWNlcyBzdXBwb3J0ZWQgYnkgQWN0aXZlU3luYworICogCW9uIFdpbmRvd3MuIFRoYW5rcyB0byBXZXMgQ2lsbGRoYWlyZSA8YmlsbHlib2Jqb2VoZW5yeWJvYkBob3RtYWlsLmNvbT4uCisgKgorICogKDI2LzExLzIwMDIpIGdhbmVzaAorICogCUFkZGVkIGluc21vZCBvcHRpb25zIHRvIHNwZWNpZnkgcHJvZHVjdCBhbmQgdmVuZG9yIGlkLgorICogCVVzZSBtb2Rwcm9iZSBpcGFxIHZlbmRvcj0weGZvbyBwcm9kdWN0PTB4YmFyCisgKgorICogKDI2LzcvMjAwMikgZ2FuZXNoCisgKiAJRml4ZWQgdXAgYnJva2VuIGVycm9yIGhhbmRsaW5nIGluIGlwYXFfb3Blbi4gUmV0cnkgdGhlICJraWNrc3RhcnQiCisgKiAJcGFja2V0IG11Y2ggaGFyZGVyIC0gdGhpcyBkcmFzdGljYWxseSByZWR1Y2VzIGNvbm5lY3Rpb24gZmFpbHVyZXMuCisgKgorICogKDMwLzQvMjAwMikgZ2FuZXNoCisgKiAJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIENhc2lvIEVNNTAwLiBDb21wbGV0ZWx5IHVudGVzdGVkLiBUaGFua3MKKyAqIAl0byBpbmZvIGZyb20gTmF0aGFuIDx3ZmlsYXJkb0BmdXNlLm5ldD4KKyAqCisgKiAoMTkvMy8yMDAyKSBnYW5lc2gKKyAqCURvbid0IHN1Ym1pdCB1cmJzIHdoaWxlIGhvbGRpbmcgc3BpbmxvY2tzLiBOb3Qgc3RyaWN0bHkgbmVjZXNzYXJ5CisgKglpbiAyLjUueC4KKyAqCisgKiAoOC8zLzIwMDIpIGdhbmVzaAorICogCVRoZSBpcGFxIHNvbWV0aW1lcyBlbWl0cyBhICdcMCcgYmVmb3JlIHRoZSBDTElFTlQgc3RyaW5nLiBBdCB0aGlzCisgKiAJcG9pbnQgb2YgdGltZSwgdGhlIHBwcCBsZGlzYyBpcyBub3QgeWV0IGF0dGFjaGVkIHRvIHRoZSB0dHksIHNvCisgKiAJbl90dHkgZWNob2VzICJeICIgdG8gdGhlIGlwYXEsIHdoaWNoIG1lc3NlcyB1cCB0aGUgY2hhdC4gSW4gMi41LjYtcHJlMgorICogCXRoaXMgY2F1c2VzIGEgcGFuaWMgYmVjYXVzZSBlY2hvX2NoYXIoKSB0cmllcyB0byBzbGVlcCBpbiBpbnRlcnJ1cHQKKyAqIAljb250ZXh0LgorICogCVRoZSBmaXggaXMgdG8gdGVsbCB0aGUgdXBwZXIgbGF5ZXJzIHRoYXQgdGhpcyBpcyBhIHJhdyBkZXZpY2Ugc28gdGhhdAorICogCWVjaG9pbmcgaXMgc3VwcHJlc3NlZC4gVGhhbmtzIHRvIEx5bGUgTGluZGhvbG0gZm9yIGEgZGV0YWlsZWQgYnVnCisgKiAJcmVwb3J0LgorICoKKyAqICgyNS8yLzIwMDIpIGdhbmVzaAorICogCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBIUCBKb3JuYWRhIDU0OCBhbmQgNTY4LiBDb21wbGV0ZWx5IHVudGVzdGVkLgorICogCVRoYW5rcyB0byBpbmZvIGZyb20gSGVhdGggUm9iaW5zb24gYW5kIEFyaWVoIERhdmlkb2ZmLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKyNpbmNsdWRlICJpcGFxLmgiCisKKyNkZWZpbmUgS1BfUkVUUklFUwkxMDAKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC41IgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJHYW5lc2ggVmFyYWRhcmFqYW4gPGdhbmVzaEB2ZXJpdGFzLmNvbT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgUG9ja2V0UEMgUERBIGRyaXZlciIKKworc3RhdGljIF9fdTE2IHByb2R1Y3QsIHZlbmRvcjsKK3N0YXRpYyBpbnQgZGVidWc7CisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGFuIGlwYXEgKi8KK3N0YXRpYyBpbnQgIGlwYXFfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQgaXBhcV9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCAgaXBhcV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIGlwYXFfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCBpcGFxX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJICAgICAgIGludCBjb3VudCk7CitzdGF0aWMgaW50IGlwYXFfd3JpdGVfYnVsayhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisJCQkgICBpbnQgY291bnQpOworc3RhdGljIHZvaWQgaXBhcV93cml0ZV9nYXRoZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBpcGFxX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBpcGFxX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgaW50IGlwYXFfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgaXBhcV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBpcGFxX2Rlc3Ryb3lfbGlzdHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlwYXFfaWRfdGFibGUgW10gPSB7CisJLyogVGhlIGZpcnN0IGVudHJ5IGlzIGEgcGxhY2Vob2xkZXIgZm9yIHRoZSBpbnNtb2Qtc3BlY2lmaWVkIGRldmljZSAqLworCXsgVVNCX0RFVklDRSgweDA0OUYsIDB4MDAwMykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNjkwLCAweDA2MDEpIH0sIC8qIEFza2V5IFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDk2MCwgMHgwMDY1KSB9LCAvKiBCQ09NIFVTQiBTeW5jIDAwNjUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOTYwLCAweDAwNjYpIH0sIC8qIEJDT00gVVNCIFN5bmMgMDA2NiAqLworCXsgVVNCX0RFVklDRSgweDA5NjAsIDB4MDA2NykgfSwgLyogQkNPTSBVU0IgU3luYyAwMDY3ICovCisJeyBVU0JfREVWSUNFKDB4MDdDRiwgMHgyMDAxKSB9LCAvKiBDQVNJTyBVU0IgU3luYyAyMDAxICovCisJeyBVU0JfREVWSUNFKDB4MDdDRiwgMHgyMDAyKSB9LCAvKiBDQVNJTyBVU0IgU3luYyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDdDRiwgMHgyMDAzKSB9LCAvKiBDQVNJTyBVU0IgU3luYyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ5RiwgMHgwMDAzKSB9LCAvKiBDb21wYXEgaVBBUSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0OUYsIDB4MDAzMikgfSwgLyogQ29tcGFxIGlQQVEgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDEpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwMikgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDAzKSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDQpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwNSkgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDA2KSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDcpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwOCkgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDA5KSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDEwMTYpIH0sIC8qIEhQIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgxMTE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjExICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgxMjE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjEyICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgyMDE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjIwICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgyMTE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjIxICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgyMjE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjIyICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgzMDE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjMwICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgzMTE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjMxICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgzMjE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjMyICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg0MDE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjQwICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg0MTE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjQxICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg0MjE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjQyICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg1MDE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjUwICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg1MTE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjUxICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg1MjE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjUyICovCisJeyBVU0JfREVWSUNFKDB4MDk0QiwgMHgwMDAxKSB9LCAvKiBMaW5rdXAgU3lzdGVtcyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwMCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDAxKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwMykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDA0KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwNikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDA3KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwOSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDBBKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MEIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwQykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDBEKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MEUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwRikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDEwKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MTEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQxMikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDEzKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MTQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQxNSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDE2KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MTcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzMikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDMzKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MzQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzNSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDM2KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MzcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzOCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDM5KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0M0EpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzQikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDNDKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0M0QpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzRSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDNGKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDApIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0MSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQyKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0NCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQ1KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0NykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQ4KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0QSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDRCKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NEMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0RCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDRFKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NEYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1MCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDUxKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1MykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDU0KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1NikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDU3KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1OSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDVBKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NUIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1QykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDVEKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NUUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1RikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDYwKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2MikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDYzKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2NSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDY2KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2OCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDY5KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NkEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2QikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDZDKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NkQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2RSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDZGKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzApIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3MSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDcyKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3NCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDc1KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3NykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDc4KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3QSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDdCKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0QzgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0QzkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0Q0EpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0Q0IpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0Q0MpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0Q0QpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0Q0UpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RDcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RDgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RDkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0REEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0REIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0REMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0REQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0REUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0REYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTApIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RUEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOTYxLCAweDAwMTApIH0sIC8qIFBvcnRhdGVjIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4NUUwNCwgMHhDRTAwKSB9LCAvKiBTQUdFTSBXaXJlbGVzcyBBc3Npc3RhbnQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwMTA0LCAweDAwQkUpIH0sIC8qIFNvY2tldCBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwMCkgfSwgLyogVE9TSElCQSBVU0IgU3luYyAwNzAwICovCisJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzA1KSB9LCAvKiBUT1NISUJBIFBvY2tldCBQQyBlMzEwICovCisJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzA3KSB9LCAvKiBUT1NISUJBIFBvY2tldCBQQyBlMzMwIFNlcmllcyAqLworCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwOCkgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTM1MKBTZXJpZXMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MDYpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGU3NDAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MDkpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGU3NTAgU2VyaWVzICovCisJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzBBKSB9LCAvKiBUT1NISUJBIFBvY2tldCBQQyBlNDAwIFNlcmllcyAqLworCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwQikgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTgwMCBTZXJpZXMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDAwQ0UpIH0sIC8qIEhUQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwMSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMDIpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTAzKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwNCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMDUpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA2KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwNykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMDgpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA5KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwQSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMEIpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBDKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwRCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMEUpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBGKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExMCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMTEpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTEyKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExMykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMTQpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE1KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExNikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMTcpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE4KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExOSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMUEpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFCKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExQykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMUQpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFFKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExRikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMjApIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTIxKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyMikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMjMpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI0KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyNSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMjYpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI3KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyOCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMjkpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJBKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyQikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMkMpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJEKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyRSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMkYpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTMwKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzMSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMzIpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTMzKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzNCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMzUpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM2KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzNykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMzgpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM5KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzQSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBM0IpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNDKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzRCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBM0UpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNGKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0MCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNDEpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQyKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0MykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNDQpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ1KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0NikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNDcpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ4KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0OSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNEEpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTRCKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0QykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNEQpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTRFKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0RikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTApIH0sIC8qIEhUQyBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTUxKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTUyKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTUzKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTU0KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTU1KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTU2KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTU3KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTU4KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTU5KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTVBKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTVCKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTVDKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTVEKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTVFKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTVGKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTYwKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTYxKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTYyKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTYzKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTY0KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTY1KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTY2KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTY3KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTY4KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTY5KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTZBKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTZCKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTZDKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTZEKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTZFKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTZGKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTcwKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTcxKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTcyKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTczKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTc0KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTc1KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTc2KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTc3KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTc4KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTc5KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTdBKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTdCKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTdDKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTdEKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTdFKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTdGKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTgwKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTgxKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTgyKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTgzKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTg0KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTg1KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTg2KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTg3KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTg4KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTg5KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQThBKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQThCKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQThDKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQThEKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQThFKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQThGKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTkwKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTkxKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTkyKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTkzKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTk0KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTk1KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTk2KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTk3KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTk4KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTk5KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlBKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlCKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlDKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlEKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlFKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlGKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDQwOSwgMHgwMEQ1KSB9LCAvKiBORUMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDA5LCAweDAwRDYpIH0sIC8qIE5FQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0MDksIDB4MDBENykgfSwgLyogTkVDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDQwOSwgMHg4MDI0KSB9LCAvKiBORUMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDA5LCAweDgwMjUpIH0sIC8qIE5FQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0QTQsIDB4MDAxNCkgfSwgLyogSGl0YWNoaSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCRjgsIDB4MTAwMSkgfSwgLyogRnVqaXRzdSBTaWVtZW5zIENvbXB1dGVycyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBGOTgsIDB4MDIwMSkgfSwgLyogQ3liZXJiYW5rIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDUwMiwgMHgxNkUxKSB9LCAvKiBBY2VyIG4xMCBIYW5kaGVsZCBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA1MDIsIDB4MTZFMykgfSwgLyogQWNlciBuMzAgSGFuZGhlbGQgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTAyLCAweDE2RTIpIH0sIC8qIEFjZXIgbjIwIEhhbmRoZWxkIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDUwMiwgMHgxNjMxKSB9LCAvKiBjMTAgU2VyaWVzICovCisJeyBVU0JfREVWSUNFKDB4MDUwMiwgMHgxNjMyKSB9LCAvKiBjMjAgU2VyaWVzICovCisJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg5MjAyKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg0MjBGKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg0MjAwKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg0MjAxKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg0MjAyKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg5MjAwKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEM4RSwgMHg2MDAwKSB9LCAvKiBDZXNzY29tIEx1eGlhbiBTZXJpZXMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEFELCAweDAzMDEpIH0sIC8qIFVTQiBTeW5jIDAzMDEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEFELCAweDAzMDIpIH0sIC8qIFVTQiBTeW5jIDAzMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEFELCAweDAzMDMpIH0sIC8qIFVTQiBTeW5jIDAzMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDAzMDApIH0sIC8qIEUtVEVOIFAzWFggUG9ja2V0IFBDICovCisJeyBVU0JfREVWSUNFKDB4MTA2NiwgMHgwNTAwKSB9LCAvKiBFLVRFTiBQNVhYIFBvY2tldCBQQyAqLworCXsgVVNCX0RFVklDRSgweDEwNjYsIDB4MDYwMCkgfSwgLyogRS1URU4gUDZYWCBQb2NrZXQgUEMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDA3MDApIH0sIC8qIEUtVEVOIFA3WFggUG9ja2V0IFBDICovCisJeyBVU0JfREVWSUNFKDB4MTA2NiwgMHgwMENFKSB9LCAvKiBFLVRFTiBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBGNEUsIDB4MDIwMCkgfSwgLyogRnJlZWRvbSBTY2llbnRpZmljIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDRDNSwgMHgxMDU4KSB9LCAvKiBGVUpJVFNVIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDRDNSwgMHgxMDc5KSB9LCAvKiBGVUpJVFNVIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDY3RSwgMHgxMDAxKSB9LCAvKiBJbnRlcm1lYyBNb2JpbGUgQ29tcHV0ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNGYxLCAweDMwMTEpIH0sIC8qIEpWQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RjEsIDB4MzAxMikgfSwgLyogSlZDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MzcwOCwgMHgyMENFKSB9LCAvKiBMZWdlbmQgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgzNzA4LCAweDIxQ0UpIH0sIC8qIExlbm92byBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0M0UsIDB4OUMwMSkgfSwgLyogTEdFIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDREQSwgMHgyNTAwKSB9LCAvKiBQYW5hc29uaWMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDBCMUMpIH0sIC8qIEdlbmVyaWMgUFBDIFN0cm9uZ0FSTSAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MEUzQSkgfSwgLyogR2VuZXJpYyBQUEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDBGM0EpIH0sIC8qIEdlbmVyaWMgU21hcnRQaG9uZSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MEYxQykgfSwgLyogSXRhdXRlYyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MTMyNikgfSwgLyogSXRhdXRlYyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MzMyNikgfSwgLyogTUVESU9OIFdpbm9kd3MgTW9ibGUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDAzMjYpIH0sIC8qIE1pbyBEaWdpV2Fsa2VyIDMzOCAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MDQyNikgfSwgLyogTWlvIERpZ2lXYWxrZXIgMzM4ICovCisJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwMTFDKSB9LCAvKiBNaW8gRGlnaVdhbGtlciBQUEMgU3Ryb25nQVJNICovCisJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwNTNBKSB9LCAvKiBNaW8gRGlnaVdhbGtlciBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwNDNBKSB9LCAvKiBNaW8gRGlnaVdhbGtlciBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MDcxQykgfSwgLyogTWlUQUMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDA1MUMpIH0sIC8qIE1pVEFDIFVTQiBTeW5jIDUyOCAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MjMyNikgfSwgLyogVm9iaXMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDE5MUMpIH0sIC8qIFlBS1VNTyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDQxMTMsIDB4MDIxMCkgfSwgLyogTW9iaWxlIE1lZGlhIFRlY2hub2xvZ3kgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHg0MTEzLCAweDAyMTEpIH0sIC8qIE1vYmlsZSBNZWRpYSBUZWNobm9sb2d5IFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4NDExMywgMHgwNDAwKSB9LCAvKiBNb2JpbGUgTWVkaWEgVGVjaG5vbG9neSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDQxMTMsIDB4MDQxMCkgfSwgLyogTW9iaWxlIE1lZGlhIFRlY2hub2xvZ3kgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQ0FELCAweDkwMDEpIH0sIC8qIE1vdG9yb2xhIFBvd2VyUGFkIFBvY2tldCBQQ6BEZXZpY2UgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQzQ0LCAweDAzQTIpIH0sIC8qIE1vdG9yb2xhIGlERU4gU21hcnRwaG9uZSAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYxMSkgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjEzKSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MTUpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYxNykgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjE5KSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MUIpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwMCkgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwMSkgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwMikgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwMykgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwNCkgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYyRSkgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjMwKSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MzIpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDQ1MDUsIDB4MDAxMCkgfSwgLyogU21hcnRwaG9uZSAqLworCXsgVVNCX0RFVklDRSgweDA1RTAsIDB4MjAwMCkgfSwgLyogU3ltYm9sIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDAxKSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDAxICovCisJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDAyKSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDAzKSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA0KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA0ICovCisJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA1KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA1ICovCisJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA2KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA2ICovCisJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA3KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA3ICovCisJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA4KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA4ICovCisJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA5KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA5ICovCisJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDBBKSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDBBICovCisJeyBVU0JfREVWSUNFKDB4MTE4MiwgMHgxMzg4KSB9LCAvKiBWRVMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDBFRDkpIH0sIC8qIFZpZXdTb25pYyBDb2xvciBQb2NrZXQgUEMgVjM1ICovCisJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxNTI3KSB9LCAvKiBWaWV3U29uaWMgQ29sb3IgUG9ja2V0IFBDIFYzNiAqLworCXsgVVNCX0RFVklDRSgweDA1NDMsIDB4MTUyOSkgfSwgLyogVmlld1NvbmljIENvbG9yIFBvY2tldCBQQyBWMzcgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE1MkIpIH0sIC8qIFZpZXdTb25pYyBDb2xvciBQb2NrZXQgUEMgVjM4ICovCisJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxNTJFKSB9LCAvKiBWaWV3U29uaWMgUG9ja2V0IFBDICovCisJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxOTIxKSB9LCAvKiBWaWV3U29uaWMgQ29tbXVuaWNhdG9yIFBvY2tldCBQQyAqLworCXsgVVNCX0RFVklDRSgweDA1NDMsIDB4MTkyMikgfSwgLyogVmlld1NvbmljIFNtYXJ0cGhvbmUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE5MjMpIH0sIC8qIFZpZXdTb25pYyBQb2NrZXQgUEMgVjMwICovCisJeyBVU0JfREVWSUNFKDB4MDUzNiwgMHgwMUEwKSB9LCAvKiBISFAgUERUICovCisJeyBVU0JfREVWSUNFKDB4MDk5RSwgMHgwMDUyKSB9LCAvKiBUcmltYmxlIEdlb0V4cGxvcmVyICovCisJeyBVU0JfREVWSUNFKDB4MDk5RSwgMHg0MDAwKSB9LCAvKiBURFMgRGF0YSBDb2xsZWN0b3IgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwRkI4LCAweDMwMDEpIH0sIC8qIFdpc3Ryb24gVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwRkI4LCAweDMwMDIpIH0sIC8qIFdpc3Ryb24gVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwRkI4LCAweDMwMDMpIH0sIC8qIFdpc3Ryb24gVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwRkI4LCAweDQwMDEpIH0sIC8qIFdpc3Ryb24gVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMUQ5LCAweDEwMDMpIH0sIC8qIFJ1Z2dlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDExRDksIDB4MTAwMikgfSwgLyogUnVnZ2VkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MjJCOCwgMHg0MjA0KSB9LCAvKiBNb3Rvcm9sYSBNUHgyMDAgU21hcnRwaG9uZSAqLworCXsgVVNCX0RFVklDRSgweDIyQjgsIDB4NDIxNCkgfSwgLyogTW90b3JvbGEgTVBjIEdTTSAqLworCXsgVVNCX0RFVklDRSgweDIyQjgsIDB4NDIyNCkgfSwgLyogTW90b3JvbGEgTVB4MjIwIFNtYXJ0cGhvbmUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgyMkI4LCAweDQyMzQpIH0sIC8qIE1vdG9yb2xhIE1QYyBDRE1BICovCisJeyBVU0JfREVWSUNFKDB4MjJCOCwgMHg0MjQ0KSB9LCAvKiBNb3Rvcm9sYSBNUHgxMDAgU21hcnRwaG9uZSAqLworCXsgVVNCX0RFVklDRSgweDEyMzEsIDB4Q0UwMSkgfSwgLyogVVNCIFN5bmMgMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMjMxLCAweENFMDIpIH0sIC8qIFVTQiBTeW5jIDAzICovCisJeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpcGFxX2lkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGlwYXFfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJpcGFxIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlwYXFfaWRfdGFibGUsCit9OworCisKKy8qIEFsbCBvZiB0aGUgZGV2aWNlIGluZm8gbmVlZGVkIGZvciB0aGUgQ29tcGFxIGlQQVEgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBpcGFxX2RldmljZSA9IHsKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCSJQb2NrZXRQQyBQREEiLAorCS5pZF90YWJsZSA9CQlpcGFxX2lkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luID0JTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfaW4gPQkJMSwKKwkubnVtX2J1bGtfb3V0ID0JCTEsCisJLm51bV9wb3J0cyA9CQkxLAorCS5vcGVuID0JCQlpcGFxX29wZW4sCisJLmNsb3NlID0JCWlwYXFfY2xvc2UsCisJLmF0dGFjaCA9CQlpcGFxX3N0YXJ0dXAsCisJLnNodXRkb3duID0JCWlwYXFfc2h1dGRvd24sCisJLndyaXRlID0JCWlwYXFfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJaXBhcV93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIgPQlpcGFxX2NoYXJzX2luX2J1ZmZlciwKKwkucmVhZF9idWxrX2NhbGxiYWNrID0JaXBhcV9yZWFkX2J1bGtfY2FsbGJhY2ssCisJLndyaXRlX2J1bGtfY2FsbGJhY2sgPQlpcGFxX3dyaXRlX2J1bGtfY2FsbGJhY2ssCit9OworCitzdGF0aWMgc3BpbmxvY2tfdAl3cml0ZV9saXN0X2xvY2s7CitzdGF0aWMgaW50CQlieXRlc19pbjsKK3N0YXRpYyBpbnQJCWJ5dGVzX291dDsKKworc3RhdGljIGludCBpcGFxX29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHVzYl9zZXJpYWwJKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2OworCXN0cnVjdCBpcGFxX3BhY2tldAkqcGt0OworCWludAkJCWksIHJlc3VsdCA9IDA7CisJaW50CQkJcmV0cmllcyA9IEtQX1JFVFJJRVM7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWJ5dGVzX2luID0gMDsKKwlieXRlc19vdXQgPSAwOworCXByaXYgPSAoc3RydWN0IGlwYXFfcHJpdmF0ZSAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcGFxX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJpdiA9PSBOVUxMKSB7CisJCWVycigiJXMgLSBPdXQgb2YgbWVtb3J5IiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBwcml2KTsKKwlwcml2LT5hY3RpdmUgPSAwOworCXByaXYtPnF1ZXVlX2xlbiA9IDA7CisJcHJpdi0+ZnJlZV9sZW4gPSAwOworCUlOSVRfTElTVF9IRUFEKCZwcml2LT5xdWV1ZSk7CisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmZyZWVsaXN0KTsKKworCWZvciAoaSA9IDA7IGkgPCBVUkJEQVRBX1FVRVVFX01BWCAvIFBBQ0tFVF9TSVpFOyBpKyspIHsKKwkJcGt0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlwYXFfcGFja2V0KSwgR0ZQX0tFUk5FTCk7CisJCWlmIChwa3QgPT0gTlVMTCkgeworCQkJZ290byBlbm9tZW07CisJCX0KKwkJcGt0LT5kYXRhID0ga21hbGxvYyhQQUNLRVRfU0laRSwgR0ZQX0tFUk5FTCk7CisJCWlmIChwa3QtPmRhdGEgPT0gTlVMTCkgeworCQkJa2ZyZWUocGt0KTsKKwkJCWdvdG8gZW5vbWVtOworCQl9CisJCXBrdC0+bGVuID0gMDsKKwkJcGt0LT53cml0dGVuID0gMDsKKwkJSU5JVF9MSVNUX0hFQUQoJnBrdC0+bGlzdCk7CisJCWxpc3RfYWRkKCZwa3QtPmxpc3QsICZwcml2LT5mcmVlbGlzdCk7CisJCXByaXYtPmZyZWVfbGVuICs9IFBBQ0tFVF9TSVpFOworCX0KKworCS8qCisJICogRm9yY2UgbG93IGxhdGVuY3kgb24uIFRoaXMgd2lsbCBpbW1lZGlhdGVseSBwdXNoIGRhdGEgdG8gdGhlIGxpbmUKKwkgKiBkaXNjaXBsaW5lIGluc3RlYWQgb2YgcXVldWVpbmcuCisJICovCisKKwlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gMTsKKwlwb3J0LT50dHktPnJhdyA9IDE7CisJcG9ydC0+dHR5LT5yZWFsX3JhdyA9IDE7CisKKwkvKgorCSAqIExvc2UgdGhlIHNtYWxsIGJ1ZmZlcnMgdXNic2VyaWFsIHByb3ZpZGVzLiBNYWtlIGxhcmdlciBvbmVzLgorCSAqLworCisJa2ZyZWUocG9ydC0+YnVsa19pbl9idWZmZXIpOworCWtmcmVlKHBvcnQtPmJ1bGtfb3V0X2J1ZmZlcik7CisJcG9ydC0+YnVsa19pbl9idWZmZXIgPSBrbWFsbG9jKFVSQkRBVEFfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBvcnQtPmJ1bGtfaW5fYnVmZmVyID09IE5VTEwpIHsKKwkJZ290byBlbm9tZW07CisJfQorCXBvcnQtPmJ1bGtfb3V0X2J1ZmZlciA9IGttYWxsb2MoVVJCREFUQV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAocG9ydC0+YnVsa19vdXRfYnVmZmVyID09IE5VTEwpIHsKKwkJa2ZyZWUocG9ydC0+YnVsa19pbl9idWZmZXIpOworCQlnb3RvIGVub21lbTsKKwl9CisJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciA9IHBvcnQtPmJ1bGtfaW5fYnVmZmVyOworCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyID0gcG9ydC0+YnVsa19vdXRfYnVmZmVyOworCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gVVJCREFUQV9TSVpFOworCXBvcnQtPmJ1bGtfb3V0X3NpemUgPSBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBVUkJEQVRBX1NJWkU7CisJCisJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KKwl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgc2VyaWFsLT5kZXYsIAorCQkgICAgICB1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJICAgICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCSAgICAgIGlwYXFfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlc3VsdCkgeworCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQlnb3RvIGVycm9yOworCX0KKworCS8qCisJICogU2VuZCBvdXQgY29udHJvbCBtZXNzYWdlIG9ic2VydmVkIGluIHdpbjk4IHNuaWZmcy4gTm90IHN1cmUgd2hhdAorCSAqIGl0IGRvZXMsIGJ1dCBmcm9tIGVtcGlyaWNhbCBvYnNlcnZhdGlvbnMsIGl0IHNlZW1zIHRoYXQgdGhlIGRldmljZQorCSAqIHdpbGwgc3RhcnQgdGhlIGNoYXQgc2VxdWVuY2Ugb25jZSBvbmUgb2YgdGhlc2UgbWVzc2FnZXMgZ2V0cworCSAqIHRocm91Z2guIFNpbmNlIHRoaXMgaGFzIGEgcmVhc29uYWJseSBoaWdoIGZhaWx1cmUgcmF0ZSwgd2UgcmV0cnkKKwkgKiBzZXZlcmFsIHRpbWVzLgorCSAqLworCisJd2hpbGUgKHJldHJpZXMtLSkgeworCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsCisJCQkJdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwgMHgyMiwgMHgyMSwKKwkJCQkweDEsIDAsIE5VTEwsIDAsIDEwMCk7CisJCWlmIChyZXN1bHQgPT0gMCkgeworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJZXJyKCIlcyAtIGZhaWxlZCBkb2luZyBjb250cm9sIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJZ290byBlcnJvcjsKKworZW5vbWVtOgorCXJlc3VsdCA9IC1FTk9NRU07CisJZXJyKCIlcyAtIE91dCBvZiBtZW1vcnkiLCBfX0ZVTkNUSU9OX18pOworZXJyb3I6CisJaXBhcV9kZXN0cm95X2xpc3RzKHBvcnQpOworCWtmcmVlKHByaXYpOworCXJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIHZvaWQgaXBhcV9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCQkgCisJLyoKKwkgKiBzaHV0IGRvd24gYnVsayByZWFkIGFuZCB3cml0ZQorCSAqLworCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisJaXBhcV9kZXN0cm95X2xpc3RzKHBvcnQpOworCWtmcmVlKHByaXYpOworCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBOVUxMKTsKKworCS8qIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgaWYgeW91IHdhbnQgdG8gc2VlIHNvbWUgc3RhdGlzdGljcyBpbiB5b3VyIHN5c2xvZyAqLworCS8qIGluZm8gKCJCeXRlcyBJbiA9ICVkICBCeXRlcyBPdXQgPSAlZCIsIGJ5dGVzX2luLCBieXRlc19vdXQpOyAqLworfQorCitzdGF0aWMgdm9pZCBpcGFxX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQJKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdAkqdHR5OworCXVuc2lnbmVkIGNoYXIJCSpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50CQkJaSwgcmVzdWx0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCWZvciAoaSA9IDA7IGkgPCB1cmItPmFjdHVhbF9sZW5ndGggOyArK2kpIHsKKwkJCS8qIGlmIHdlIGluc2VydCBtb3JlIHRoYW4gVFRZX0ZMSVBCVUZfU0laRSBjaGFyYWN0ZXJzLCB3ZSBkcm9wIHRoZW0uICovCisJCQlpZih0dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkgeworCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQl9CisJCQkvKiB0aGlzIGRvZXNuJ3QgYWN0dWFsbHkgcHVzaCB0aGUgZGF0YSB0aHJvdWdoIHVubGVzcyB0dHktPmxvd19sYXRlbmN5IGlzIHNldCAqLworCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCAwKTsKKwkJfQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQlieXRlc19pbiArPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJfQorCisJLyogQ29udGludWUgdHJ5aW5nIHRvIGFsd2F5cyByZWFkICAqLworCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwgCisJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkgICAgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJICAgICAgaXBhcV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KQorCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGlwYXFfd3JpdGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCQkgICAgICAgaW50IGNvdW50KQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIJKmN1cnJlbnRfcG9zaXRpb24gPSBidWY7CisJaW50CQkJYnl0ZXNfc2VudCA9IDA7CisJaW50CQkJdHJhbnNmZXJfc2l6ZTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJd2hpbGUgKGNvdW50ID4gMCkgeworCQl0cmFuc2Zlcl9zaXplID0gbWluKGNvdW50LCBQQUNLRVRfU0laRSk7CisJCWlmIChpcGFxX3dyaXRlX2J1bGsocG9ydCwgY3VycmVudF9wb3NpdGlvbiwgdHJhbnNmZXJfc2l6ZSkpIHsKKwkJCWJyZWFrOworCQl9CisJCWN1cnJlbnRfcG9zaXRpb24gKz0gdHJhbnNmZXJfc2l6ZTsKKwkJYnl0ZXNfc2VudCArPSB0cmFuc2Zlcl9zaXplOworCQljb3VudCAtPSB0cmFuc2Zlcl9zaXplOworCQlieXRlc19vdXQgKz0gdHJhbnNmZXJfc2l6ZTsKKwl9CisKKwlyZXR1cm4gYnl0ZXNfc2VudDsKK30gCisKK3N0YXRpYyBpbnQgaXBhcV93cml0ZV9idWxrKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCSAgIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCBpcGFxX3BhY2tldAkqcGt0ID0gTlVMTDsKKwlpbnQJCQlyZXN1bHQgPSAwOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJaWYgKHByaXYtPmZyZWVfbGVuIDw9IDApIHsKKwkJZGJnKCIlcyAtIHdlJ3JlIHN0dWZmZWQiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZwcml2LT5mcmVlbGlzdCkpIHsKKwkJcGt0ID0gbGlzdF9lbnRyeShwcml2LT5mcmVlbGlzdC5uZXh0LCBzdHJ1Y3QgaXBhcV9wYWNrZXQsIGxpc3QpOworCQlsaXN0X2RlbCgmcGt0LT5saXN0KTsKKwkJcHJpdi0+ZnJlZV9sZW4gLT0gUEFDS0VUX1NJWkU7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOworCWlmIChwa3QgPT0gTlVMTCkgeworCQlkYmcoIiVzIC0gd2UncmUgc3R1ZmZlZCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKworCW1lbWNweShwa3QtPmRhdGEsIGJ1ZiwgY291bnQpOworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCBjb3VudCwgcGt0LT5kYXRhKTsKKworCXBrdC0+bGVuID0gY291bnQ7CisJcGt0LT53cml0dGVuID0gMDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmcGt0LT5saXN0LCAmcHJpdi0+cXVldWUpOworCXByaXYtPnF1ZXVlX2xlbiArPSBjb3VudDsKKwlpZiAocHJpdi0+YWN0aXZlID09IDApIHsKKwkJcHJpdi0+YWN0aXZlID0gMTsKKwkJaXBhcV93cml0ZV9nYXRoZXIocG9ydCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0KSB7CisJCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJfQorCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBpcGFxX3dyaXRlX2dhdGhlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBpcGFxX3ByaXZhdGUJKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHVzYl9zZXJpYWwJKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpbnQJCQljb3VudCwgcm9vbTsKKwlzdHJ1Y3QgaXBhcV9wYWNrZXQJKnBrdCwgKnRtcDsKKwlzdHJ1Y3QgdXJiCQkqdXJiID0gcG9ydC0+d3JpdGVfdXJiOworCisJaWYgKHVyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuICovCisJCWVycigiJXMgLSBmbHVzaGluZyB3aGlsZSB1cmIgaXMgYWN0aXZlICEiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCXJvb20gPSBVUkJEQVRBX1NJWkU7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBrdCwgdG1wLCAmcHJpdi0+cXVldWUsIGxpc3QpIHsKKwkJY291bnQgPSBtaW4ocm9vbSwgKGludCkocGt0LT5sZW4gLSBwa3QtPndyaXR0ZW4pKTsKKwkJbWVtY3B5KHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgKFVSQkRBVEFfU0laRSAtIHJvb20pLAorCQkgICAgICAgcGt0LT5kYXRhICsgcGt0LT53cml0dGVuLCBjb3VudCk7CisJCXJvb20gLT0gY291bnQ7CisJCXBrdC0+d3JpdHRlbiArPSBjb3VudDsKKwkJcHJpdi0+cXVldWVfbGVuIC09IGNvdW50OworCQlpZiAocGt0LT53cml0dGVuID09IHBrdC0+bGVuKSB7CisJCQlsaXN0X21vdmUoJnBrdC0+bGlzdCwgJnByaXYtPmZyZWVsaXN0KTsKKwkJCXByaXYtPmZyZWVfbGVuICs9IFBBQ0tFVF9TSVpFOworCQl9CisJCWlmIChyb29tID09IDApIHsKKwkJCWJyZWFrOworCQl9CisJfQorCisJY291bnQgPSBVUkJEQVRBX1NJWkUgLSByb29tOworCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPndyaXRlX3VyYiwgc2VyaWFsLT5kZXYsIAorCQkgICAgICB1c2Jfc25kYnVsa3BpcGUoc2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCSAgICAgIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBjb3VudCwgaXBhcV93cml0ZV9idWxrX2NhbGxiYWNrLAorCQkgICAgICBwb3J0KTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGlwYXFfd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQJKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCWludAkJCXJlc3VsdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQorCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZwcml2LT5xdWV1ZSkpIHsKKwkJaXBhcV93cml0ZV9nYXRoZXIocG9ydCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0KSB7CisJCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJfQorCX0gZWxzZSB7CisJCXByaXYtPmFjdGl2ZSA9IDA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOworCX0KKworCXNjaGVkdWxlX3dvcmsoJnBvcnQtPndvcmspOworfQorCitzdGF0aWMgaW50IGlwYXFfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBpcGFxX3ByaXZhdGUJKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlkYmcoIiVzIC0gZnJlZWxlbiAlZCIsIF9fRlVOQ1RJT05fXywgcHJpdi0+ZnJlZV9sZW4pOworCXJldHVybiBwcml2LT5mcmVlX2xlbjsKK30KKworc3RhdGljIGludCBpcGFxX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBpcGFxX3ByaXZhdGUJKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlkYmcoIiVzIC0gcXVldWVsZW4gJWQiLCBfX0ZVTkNUSU9OX18sIHByaXYtPnF1ZXVlX2xlbik7CisJcmV0dXJuIHByaXYtPnF1ZXVlX2xlbjsKK30KKworc3RhdGljIHZvaWQgaXBhcV9kZXN0cm95X2xpc3RzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGlwYXFfcHJpdmF0ZQkqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgaXBhcV9wYWNrZXQJKnBrdCwgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwa3QsIHRtcCwgJnByaXYtPnF1ZXVlLCBsaXN0KSB7CisJCWtmcmVlKHBrdC0+ZGF0YSk7CisJCWtmcmVlKHBrdCk7CisJfQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwa3QsIHRtcCwgJnByaXYtPmZyZWVsaXN0LCBsaXN0KSB7CisJCWtmcmVlKHBrdC0+ZGF0YSk7CisJCWtmcmVlKHBrdCk7CisJfQorfQorCisKK3N0YXRpYyBpbnQgaXBhcV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisJaWYgKHNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSAhPSAxKSB7CisJCWVycigiYWN0aXZlIGNvbmZpZyAjJWQgIT0gMSA/PyIsCisJCQlzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmV0dXJuIHVzYl9yZXNldF9jb25maWd1cmF0aW9uIChzZXJpYWwtPmRldik7Cit9CisKK3N0YXRpYyB2b2lkIGlwYXFfc2h1dGRvd24oc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKK30KKworc3RhdGljIGludCBfX2luaXQgaXBhcV9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKwlzcGluX2xvY2tfaW5pdCgmd3JpdGVfbGlzdF9sb2NrKTsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZpcGFxX2RldmljZSk7CisJaWYgKHJldHZhbCkgCisJCWdvdG8gZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI7CisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCWlmICh2ZW5kb3IpIHsKKwkJaXBhcV9pZF90YWJsZVswXS5pZFZlbmRvciA9IHZlbmRvcjsKKwkJaXBhcV9pZF90YWJsZVswXS5pZFByb2R1Y3QgPSBwcm9kdWN0OworCX0KKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmlwYXFfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisJCSAgCisJcmV0dXJuIDA7CitmYWlsZWRfdXNiX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmaXBhcV9kZXZpY2UpOworZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI6CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgaXBhcV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmlwYXFfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmlwYXFfZGV2aWNlKTsKK30KKworCittb2R1bGVfaW5pdChpcGFxX2luaXQpOworbW9kdWxlX2V4aXQoaXBhcV9leGl0KTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOworCittb2R1bGVfcGFyYW0odmVuZG9yLCB1c2hvcnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh2ZW5kb3IsICJVc2VyIHNwZWNpZmllZCBVU0IgaWRWZW5kb3IiKTsKKworbW9kdWxlX3BhcmFtKHByb2R1Y3QsIHVzaG9ydCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHByb2R1Y3QsICJVc2VyIHNwZWNpZmllZCBVU0IgaWRQcm9kdWN0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjkwMzU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogVVNCIENvbXBhcSBpUEFRIGRyaXZlcgorICoKKyAqCUNvcHlyaWdodCAoQykgMjAwMSAtIDIwMDIKKyAqCSAgICBHYW5lc2ggVmFyYWRhcmFqYW4gPGdhbmVzaEB2ZXJpdGFzLmNvbT4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fTElOVVhfVVNCX1NFUklBTF9JUEFRX0gKKyNkZWZpbmUgX19MSU5VWF9VU0JfU0VSSUFMX0lQQVFfSAorCisvKgorICogU2luY2Ugd2UgY2FuJ3QgcXVldWUgb3VyIGJ1bGsgd3JpdGUgdXJicyAoZG9uJ3Qga25vdyB3aHkgLSBpdCBqdXN0CisgKiBkb2Vzbid0IHdvcmspLCB3ZSBjYW4gc2VuZCBkb3duIG9ubHkgb25lIHdyaXRlIHVyYiBhdCBhIHRpbWUuIFRoZSBzaW1wbGlzdGljCisgKiBhcHByb2FjaCB0YWtlbiBieSB0aGUgZ2VuZXJpYyB1c2JzZXJpYWwgZHJpdmVyIHdpbGwgd29yaywgYnV0IGl0J3Mgbm90IGdvb2QKKyAqIGZvciBwZXJmb3JtYW5jZS4gVGhlcmVmb3JlLCB3ZSBidWZmZXIgdXB0byBVUkJEQVRBX1FVRVVFX01BWCBieXRlcyBvZiB3cml0ZQorICogcmVxdWVzdHMgY29taW5nIGZyb20gdGhlIGxpbmUgZGlzY2lwbGluZS4gVGhpcyBpcyBkb25lIGJ5IGNoYWluaW5nIHRoZW0KKyAqIGluIGxpc3RzIG9mIHN0cnVjdCBpcGFxX3BhY2tldCwgZWFjaCBwYWNrZXQgaG9sZGluZyBhIG1heGltdW0gb2YKKyAqIFBBQ0tFVF9TSVpFIGJ5dGVzLgorICoKKyAqIGlwYXFfd3JpdGUoKSBjYW4gYmUgY2FsbGVkIGZyb20gYm90dG9tIGhhbGYgY29udGV4dDsgaGVuY2Ugd2UgY2FuJ3QKKyAqIGFsbG9jYXRlIG1lbW9yeSBmb3IgcGFja2V0cyB0aGVyZS4gU28gd2UgaW5pdGlhbGl6ZSBhIHBvb2wgb2YgcGFja2V0cyBhdAorICogdGhlIGZpcnN0IG9wZW4gYW5kIG1haW50YWluIGEgZnJlZWxpc3QuCisgKgorICogVGhlIHZhbHVlIG9mIFBBQ0tFVF9TSVpFIHdhcyBlbXBpcmljYWxseSBkZXRlcm1pbmVkIGJ5CisgKiBjaGVja2luZyB0aGUgbWF4aW11bSB3cml0ZSBzaXplcyBzZW50IGRvd24gYnkgdGhlIHBwcCBsZGlzYy4KKyAqIFVSQkRBVEFfUVVFVUVfTUFYIGlzIHNldCB0byA2NEssIHdoaWNoIGlzIHRoZSBtYXhpbXVtIFRDUCB3aW5kb3cgc2l6ZS4KKyAqLworCitzdHJ1Y3QgaXBhcV9wYWNrZXQgeworCWNoYXIJCQkqZGF0YTsKKwlzaXplX3QJCQlsZW47CisJc2l6ZV90CQkJd3JpdHRlbjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7Cit9OworCitzdHJ1Y3QgaXBhcV9wcml2YXRlIHsKKwlpbnQJCQlhY3RpdmU7CisJaW50CQkJcXVldWVfbGVuOworCWludAkJCWZyZWVfbGVuOworCXN0cnVjdCBsaXN0X2hlYWQJcXVldWU7CisJc3RydWN0IGxpc3RfaGVhZAlmcmVlbGlzdDsKK307CisKKyNkZWZpbmUgVVJCREFUQV9TSVpFCQk0MDk2CisjZGVmaW5lIFVSQkRBVEFfUVVFVUVfTUFYCSg2NCAqIDEwMjQpCisjZGVmaW5lIFBBQ0tFVF9TSVpFCQkyNTYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXB3LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXB3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTExMDVkNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcHcuYwpAQCAtMCwwICsxLDQ5MSBAQAorLyoKKyAqIElQV2lyZWxlc3MgM0cgVU1UUyBUREQgTW9kZW0gZHJpdmVyIChVU0IgY29ubmVjdGVkKQorICoKKyAqICAgQ29weXJpZ2h0IChDKSAyMDA0IFJvZWxmIERpZWRlcmlja3MgPHJvZWxmZEBpbmV0LmNvLnphPgorICogICBDb3B5cmlnaHQgKEMpIDIwMDQgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogQWxsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkZXZpY2Ugd2FzIGFjcXVpcmVkIHVzaW5nIFNub29weVBybworICogb24gTVNGVCdzIE8vUywgYW5kIGV4YW1pbmcgdGhlIE1TRlQgZHJpdmVycycgZGVidWcgb3V0cHV0IAorICogKGluc2FuZWx5IGxlZnQgX29uXyBpbiB0aGUgZW5kdXNlciB2ZXJzaW9uKQorICoKKyAqIEl0IHdhcyB3cml0dGVuIG91dCBvZiBmcnVzdHJhdGlvbiB3aXRoIHRoZSBJUFdpcmVsZXNzIFVTQiBtb2RlbQorICogc3VwcGxpZWQgYnkgQXhpdHkzRy9TZW50ZWNoIFNvdXRoIEFmcmljYSBub3Qgc3VwcG9ydGluZworICogTGludXggd2hhdHNvZXZlci4KKyAqCisgKiBOb2JvZHkgcHJvdmlkZWQgYW55IHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uIHRoYXQgd2FzIG5vdCBhbHJlYWR5IAorICogYXZhaWxhYmxlIGZvciB0aGlzIGRldmljZS4KKyAqIAorICogVGhlIG1vZGVtIGFkaGVyZXMgdG8gdGhlICIzR1BQIFRTICAyNy4wMDcgQVQgY29tbWFuZCBzZXQgZm9yIDNHIAorICogVXNlciBFcXVpcG1lbnQgKFVFKSIgc3RhbmRhcmQsIGF2YWlsYWJsZSBmcm9tIAorICogaHR0cDovL3d3dy4zZ3BwLm9yZy9mdHAvU3BlY3MvaHRtbC1pbmZvLzI3MDA3Lmh0bQorICoKKyAqIFRoZSBjb2RlIHdhcyBvbmx5IHRlc3RlZCB0aGUgSVBXaXJlbGVzcyBoYW5kaGVsZCBtb2RlbSBkaXN0cmlidXRlZAorICogaW4gU291dGggQWZyaWNhIGJ5IFNlbnRlY2guCisgKiAKKyAqIEl0IG1heSB3b3JrIGZvciBXb29zaCBJbmMgaW4gLm56IHRvbywgYXMgaXQgYXBwZWFycyB0aGV5IHVzZSB0aGUKKyAqIHNhbWUga2l0LgorICoKKyAqIFRoZXJlIGlzIHN0aWxsIHNvbWUgd29yayB0byBiZSBkb25lIGluIHRlcm1zIG9mIGhhbmRsaW5nIAorICogRENELCBEVFIsIFJUUywgQ1RTIHdoaWNoIGFyZSBjdXJyZW50bHkgZmFrZWQuCisgKiBJdCdzIGdvb2QgZW5vdWdoIGZvciBQUFAgYXQgdGhpcyBwb2ludC4gSXQncyBiYXNlZCBvZmYgYWxsIGtpbmRzIG9mCisgKiBjb2RlIGZvdW5kIGluIHVzYi9zZXJpYWwgYW5kIHVzYi9jbGFzcworICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTgkidjAuMyIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUgkiUm9lbGYgRGllZGVyaWNrcyIKKyNkZWZpbmUgRFJJVkVSX0RFU0MJIklQV2lyZWxlc3MgdHR5IGRyaXZlciIKKworI2RlZmluZSBJUFdfVFRZX01BSk9SCTI0MAkvKiByZWFsIGRldmljZSBub2RlIG1ham9yIGlkLCBleHBlcmltZW50YWwgcmFuZ2UgKi8KKyNkZWZpbmUgSVBXX1RUWV9NSU5PUlMJMjU2CS8qIHdlIHN1cHBvcnQgMjU2IGRldmljZXMsIGR1bm5vIHdoeSwgaXQnZCBiZSBpbnNhbmUgOikgKi8KKworI2RlZmluZSBVU0JfSVBXX01BR0lDCTB4NmQwMgkvKiBtYWdpYyBudW1iZXIgZm9yIGlwdyBzdHJ1Y3QgKi8KKworCisvKiBNZXNzYWdlIHNpemVzICovCisjZGVmaW5lIEVWRU5UX0JVRkZFUl9TSVpFCTB4RkYKKyNkZWZpbmUgQ0hBUjJJTlQxNihjMSxjMCkJKCgodTMyKSgoYzEpICYgMHhmZikgPDwgOCkgKyAodTMyKSgoYzApICYgMHhmZikpCisjZGVmaW5lIE5VTV9CVUxLX1VSQlMJCTI0CisjZGVmaW5lIE5VTV9DT05UUk9MX1VSQlMJMTYKKworLyogdmVuZG9yL3Byb2R1Y3QgcGFpcnMgdGhhdCBhcmUga25vd24gd29yayB3aXRoIHRoaXMgZHJpdmVyKi8KKyNkZWZpbmUgSVBXX1ZJRAkJMHgwYmMzCisjZGVmaW5lIElQV19QSUQJCTB4MDAwMQorCisKKy8qIFZlbmRvciBjb21tYW5kczogKi8KKworLyogYmF1ZCByYXRlcyAqLworZW51bSB7CisJaXB3X3Npb19iMjU2MDAwID0gMHgwMDBlLAorCWlwd19zaW9fYjEyODAwMCA9IDB4MDAxZCwKKwlpcHdfc2lvX2IxMTUyMDAgPSAweDAwMjAsCisJaXB3X3Npb19iNTc2MDAgID0gMHgwMDQwLAorCWlwd19zaW9fYjU2MDAwICA9IDB4MDA0MiwKKwlpcHdfc2lvX2IzODQwMCAgPSAweDAwNjAsCisJaXB3X3Npb19iMTkyMDAgID0gMHgwMGMwLAorCWlwd19zaW9fYjE0NDAwICA9IDB4MDEwMCwKKwlpcHdfc2lvX2I5NjAwICAgPSAweDAxODAsCisJaXB3X3Npb19iNDgwMCAgID0gMHgwMzAwLAorCWlwd19zaW9fYjI0MDAgICA9IDB4MDYwMCwKKwlpcHdfc2lvX2IxMjAwICAgPSAweDBjMDAsCisJaXB3X3Npb19iNjAwICAgID0gMHgxODAwCit9OworCisvKiBkYXRhIGJpdHMgKi8KKyNkZWZpbmUgaXB3X2R0Yl83CQkweDcwMAorI2RlZmluZSBpcHdfZHRiXzgJCTB4ODEwCS8vIG9rIHNvIHRoZSBkZWZpbmUgaXMgbWlzbGVhZGluZywgSSBrbm93LCBidXQgZm9yY2VzIDgsbiwxCisJCQkJCS8vIEkgbWVhbiwgaXMgdGhlcmUgYSBwb2ludCB0byBhbnkgb3RoZXIgc2V0dGluZyB0aGVzZSBkYXlzPyA6KQkKKworLyogdXNiIGNvbnRyb2wgcmVxdWVzdCB0eXBlcyA6ICovCisjZGVmaW5lIElQV19TSU9fUlhDVEwJCTB4MDAJLy8gY29udHJvbCBidWxrIHJ4IGNoYW5uZWwgdHJhbnNtaXNzaW9ucywgdmFsdWU9MS8wIChvbi9vZmYpCisjZGVmaW5lIElQV19TSU9fU0VUX0JBVUQJMHgwMQkvLyBzZXQgYmF1ZCwgdmFsdWU9cmVxdWVzdGVkIGlwd19zaW9fYnh4eHgKKyNkZWZpbmUgSVBXX1NJT19TRVRfTElORQkweDAzCS8vIHNldCBkYXRhYml0cywgcGFyaXR5LiB2YWx1ZT1pcHdfZHRiX3gKKyNkZWZpbmUgSVBXX1NJT19TRVRfUElOCQkweDAzCS8vIHNldC9jbGVhciBkdHIvcnRzIHZhbHVlPWlwd19waW5feHh4CisjZGVmaW5lIElQV19TSU9fUE9MTAkJMHgwOAkvLyBnZXQgc2VyaWFsIHBvcnQgc3RhdHVzIGJ5dGUsIGNhbGwgd2l0aCB2YWx1ZT0wCisjZGVmaW5lIElQV19TSU9fSU5JVAkJMHgxMQkvLyBpbml0aWFsaXplcyA/IHZhbHVlPTAgKGFwcGVhcnMgYXMgZmlyc3QgdGhpbmcgdG9kbyBvbiBvcGVuKQorI2RlZmluZSBJUFdfU0lPX1BVUkdFCQkweDEyCS8vIHB1cmdlIGFsbCB0cmFuc21pc3Npb25zPywgY2FsbCB3aXRoIHZhbHVlPW51bWNoYXJfdG9fcHVyZ2UKKyNkZWZpbmUgSVBXX1NJT19IQU5ERkxPVwkweDEzCS8vIHNldCB4b24veG9mZiBsaW1pdHMgdmFsdWU9MCwgYW5kIGEgYnVmZmVyIG9mIDB4MTAgYnl0ZXMKKyNkZWZpbmUgSVBXX1NJT19TRVRDSEFSUwkweDEzCS8vIHNldCB0aGUgZmxvd2NvbnRyb2wgc3BlY2lhbCBjaGFycywgdmFsdWU9MCwgYnVmPTYgYnl0ZXMsIAorCQkJCQkvLyBsYXN0IDIgYnl0ZXMgY29udGFpbiBmbG93Y29udHJvbCBjaGFycyBlLmcuIDAwIDAwIDAwIDAwIDExIDEzCisKKy8qIHZhbHVlcyB1c2VkIGZvciByZXF1ZXN0IElQV19TSU9fU0VUX1BJTiAqLworI2RlZmluZSBJUFdfUElOX1NFVERUUgkJMHgxMDEKKyNkZWZpbmUgSVBXX1BJTl9TRVRSVFMJCTB4MjAyCisjZGVmaW5lIElQV19QSU5fQ0xSRFRSCQkweDEwMAorI2RlZmluZSBJUFdfUElOX0NMUlJUUwkJMHgyMDAgLy8gdW5jb25maXJtZWQKKworLyogdmFsdWVzIHVzZWQgZm9yIHJlcXVlc3QgSVBXX1NJT19SWENUTCAqLworI2RlZmluZSBJUFdfUlhCVUxLX09OCQkxCisjZGVmaW5lIElQV19SWEJVTEtfT0ZGCQkwCisKKy8qIHZhcmlvdXMgMTYgYnl0ZSBoYXJkY29kZWQgdHJhbnNmZXJidWZmZXJzIHVzZWQgYnkgZmxvdyBjb250cm9sICovCisjZGVmaW5lIElQV19CWVRFU19GTE9XSU5JVAl7IDB4MDEsIDAsIDAsIDAsIDB4NDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCisvKiBJbnRlcnByZXRhdGlvbiBvZiBtb2RlbSBzdGF0dXMgbGluZXMgKi8KKy8qIFRoZXNlIG5lZWQgc29ydGluZyBvdXQgYnkgaW5kaXZpZHVhbGx5IGNvbm5lY3RpbmcgcGlucyBhbmQgY2hlY2tpbmcKKyAqIHJlc3VsdHMuIEZJWE1FIQorICogV2hlbiBkYXRhIGlzIGJlaW5nIHNlbnQgd2Ugc2VlIDB4MzAgaW4gdGhlIGxvd2VyIGJ5dGU7IHRoaXMgbXVzdAorICogY29udGFpbiBEU1IgYW5kIENUUyAuLi4KKyAqLworI2RlZmluZSBJUFdfRFNSCQkJKCgxPDw0KSB8ICgxPDw1KSkKKyNkZWZpbmUgSVBXX0NUUwkJCSgoMTw8NSkgfCAoMTw8NCkpCisKKyNkZWZpbmUgSVBXX1dBTlRTX1RPX1NFTkQJMHgzMAorLy8jZGVmaW5lIElQV19EVFIJCQkvKiBEYXRhIFRlcm1pbmFsIFJlYWR5ICovCisvLyNkZWZpbmUgSVBXX0NUUwkJCS8qIENsZWFyIFRvIFNlbmQgKi8KKy8vI2RlZmluZSBJUFdfQ0QJCQkvKiBDYXJyaWVyIERldGVjdCAqLworLy8jZGVmaW5lIElQV19EU1IJCQkvKiBEYXRhIFNldCBSZWFkeSAqLworLy8jZGVmaW5lIElQV19SeEQJCQkvKiBSZWNlaXZlIHBpbiAqLworCisvLyNkZWZpbmUgSVBXX0xFCisvLyNkZWZpbmUgSVBXX1JUUwkJCisvLyNkZWZpbmUgSVBXX1NUCQkKKy8vI2RlZmluZSBJUFdfU1IJCQorLy8jZGVmaW5lIElQV19SSQkJCS8qIFJpbmcgSW5kaWNhdG9yICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfaXB3X2lkc1tdID0geworCXsgVVNCX0RFVklDRShJUFdfVklELCBJUFdfUElEKSB9LAorCXsgfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB1c2JfaXB3X2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2JfaXB3X2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiaXB3dHR5IiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CXVzYl9pcHdfaWRzLAorfTsKKworc3RhdGljIGludCBkZWJ1ZzsKKworc3RhdGljIHZvaWQgaXB3X3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJaW50IGk7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKworCXR0eSA9IHBvcnQtPnR0eTsKKwlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoIDsgKytpKSB7CisJCQkvKiBpZiB3ZSBpbnNlcnQgbW9yZSB0aGFuIFRUWV9GTElQQlVGX1NJWkUgY2hhcmFjdGVycywgd2UgZHJvcCB0aGVtLiAqLworCQkJaWYodHR5LT5mbGlwLmNvdW50ID49IFRUWV9GTElQQlVGX1NJWkUpIHsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJfQorCQkJLyogdGhpcyBkb2Vzbid0IGFjdHVhbGx5IHB1c2ggdGhlIGRhdGEgdGhyb3VnaCB1bmxlc3MgdHR5LT5sb3dfbGF0ZW5jeSBpcyBzZXQgKi8KKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgMCk7CisJCX0KKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwl9CisKKwkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgICovCisJdXNiX2ZpbGxfYnVsa191cmIgKHBvcnQtPnJlYWRfdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwKKwkJCSAgIHVzYl9yY3ZidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwKKwkJCQkJICAgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCSAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJICAgaXB3X3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQpCisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgaXB3X29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXU4IGJ1Zl9mbG93X3N0YXRpY1sxNl0gPSBJUFdfQllURVNfRkxPV0lOSVQ7CisJdTggKmJ1Zl9mbG93X2luaXQ7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJYnVmX2Zsb3dfaW5pdCA9IGttYWxsb2MoMTYsIEdGUF9LRVJORUwpOworCWlmICghYnVmX2Zsb3dfaW5pdCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtY3B5KGJ1Zl9mbG93X2luaXQsIGJ1Zl9mbG93X3N0YXRpYywgMTYpOworCisJaWYgKHBvcnQtPnR0eSkKKwkJcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IDE7CisKKwkvKiAtLTE6IFRlbGwgdGhlIG1vZGVtIHRvIGluaXRpYWxpemUgKHdlIHRoaW5rKSBGcm9tIHNuaWZmcyB0aGlzIGlzIGFsd2F5cyB0aGUKKwkgKiBmaXJzdCB0aGluZyB0aGF0IGdldHMgc2VudCB0byB0aGUgbW9kZW0gZHVyaW5nIG9wZW5pbmcgb2YgdGhlIGRldmljZSAqLworCWRiZygiJXM6IFNlbmRpbmcgU0lPX0lOSVQgKHdlIGd1ZXNzKSIsX19GVU5DVElPTl9fKTsKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LDApLAorCQkJCSBJUFdfU0lPX0lOSVQsCisJCQkJIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX09VVCwKKwkJCQkgMCwKKwkJCQkgMCwgLyogaW5kZXggKi8KKwkJCQkgTlVMTCwKKwkJCQkgMCwKKwkJCQkgMTAwMDAwKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiSW5pdCBvZiBtb2RlbSBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmVzdWx0KTsKKworCS8qIHJlc2V0IHRoZSBidWxrIHBpcGVzICovCisJdXNiX2NsZWFyX2hhbHQoZGV2LCB1c2JfcmN2YnVsa3BpcGUoZGV2LCBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcykpOworCXVzYl9jbGVhcl9oYWx0KGRldiwgdXNiX3NuZGJ1bGtwaXBlKGRldiwgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSk7CisKKwkvKi0tMjogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8JCisJZGJnKCIlczogc2V0dGluZyB1cCBidWxrIHJlYWQgY2FsbGJhY2siLF9fRlVOQ1RJT05fXyk7CisJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIGRldiwKKwkJCSAgdXNiX3JjdmJ1bGtwaXBlKGRldiwgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJICBwb3J0LT5idWxrX2luX2J1ZmZlciwKKwkJCSAgcG9ydC0+YnVsa19pbl9zaXplLAorCQkJICBpcHdfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlc3VsdCA8IDApCisJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihyZWFkIGJ1bGspIGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKworCS8qLS0zOiBUZWxsIHRoZSBtb2RlbSB0byBvcGVuIHRoZSBmbG9vZGdhdGVzIG9uIHRoZSByeCBidWxrIGNoYW5uZWwgKi8KKwlkYmcoIiVzOmFza2luZyBtb2RlbSBmb3IgUnhSZWFkIChSWEJVTEtfT04pIixfX0ZVTkNUSU9OX18pOworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJCSBJUFdfU0lPX1JYQ1RMLAorCQkJCSBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9PVVQsCisJCQkJIElQV19SWEJVTEtfT04sCisJCQkJIDAsIC8qIGluZGV4ICovCisJCQkJIE5VTEwsCisJCQkJIDAsCisJCQkJIDEwMDAwMCk7CisJaWYgKHJlc3VsdCA8IDApIAorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJFbmFibGluZyBidWxrIFJ4UmVhZCBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmVzdWx0KTsKKworCS8qLS00OiBzZXR1cCB0aGUgaW5pdGlhbCBmbG93Y29udHJvbCAqLworCWRiZygiJXM6c2V0dGluZyBpbml0IGZsb3djb250cm9sICglcykiLF9fRlVOQ1RJT05fXyxidWZfZmxvd19pbml0KTsKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCQkgSVBXX1NJT19IQU5ERkxPVywKKwkJCQkgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAorCQkJCSAwLAorCQkJCSAwLAorCQkJCSBidWZfZmxvd19pbml0LAorCQkJCSAweDEwLAorCQkJCSAyMDAwMDApOworCWlmIChyZXN1bHQgPCAwKQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJpbml0aWFsIGZsb3djb250cm9sIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByZXN1bHQpOworCisKKwkvKi0tNTogcmFpc2UgdGhlIGR0ciAqLworCWRiZygiJXM6cmFpc2luZyBkdHIiLF9fRlVOQ1RJT05fXyk7CisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkJIElQV19TSU9fU0VUX1BJTiwKKwkJCQkgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAorCQkJCSBJUFdfUElOX1NFVERUUiwKKwkJCQkgMCwKKwkJCQkgTlVMTCwKKwkJCQkgMCwKKwkJCQkgMjAwMDAwKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAic2V0dGluZyBkdHIgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJlc3VsdCk7CisKKwkvKi0tNjogcmFpc2UgdGhlIHJ0cyAqLworCWRiZygiJXM6cmFpc2luZyBydHMiLF9fRlVOQ1RJT05fXyk7CisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkJIElQV19TSU9fU0VUX1BJTiwKKwkJCQkgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAorCQkJCSBJUFdfUElOX1NFVFJUUywKKwkJCQkgMCwKKwkJCQkgTlVMTCwKKwkJCQkgMCwKKwkJCQkgMjAwMDAwKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAic2V0dGluZyBkdHIgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJlc3VsdCk7CisJCisJa2ZyZWUoYnVmX2Zsb3dfaW5pdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlwd19jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCWludCByZXN1bHQ7CisKKwlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSkgeworCQlkYmcoIiVzOiB0dHlfaHVuZ191cF9wIC4uLiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwkvKi0tMTogZHJvcCB0aGUgZHRyICovCisJZGJnKCIlczpkcm9wcGluZyBkdHIiLF9fRlVOQ1RJT05fXyk7CisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkJIElQV19TSU9fU0VUX1BJTiwKKwkJCQkgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAorCQkJCSBJUFdfUElOX0NMUkRUUiwKKwkJCQkgMCwKKwkJCQkgTlVMTCwKKwkJCQkgMCwKKwkJCQkgMjAwMDAwKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiZHJvcHBpbmcgZHRyIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByZXN1bHQpOworCisJLyotLTI6IGRyb3AgdGhlIHJ0cyAqLworCWRiZygiJXM6ZHJvcHBpbmcgcnRzIixfX0ZVTkNUSU9OX18pOworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJCSBJUFdfU0lPX1NFVF9QSU4sIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX09VVCwKKwkJCQkgSVBXX1BJTl9DTFJSVFMsCisJCQkJIDAsCisJCQkJIE5VTEwsCisJCQkJIDAsCisJCQkJIDIwMDAwMCk7CisJaWYgKHJlc3VsdCA8IDApCisJCWRldl9lcnIoJnBvcnQtPmRldiwgImRyb3BwaW5nIHJ0cyBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmVzdWx0KTsKKworCisJLyotLTM6IHB1cmdlICovCisJZGJnKCIlczpzZW5kaW5nIHB1cmdlIixfX0ZVTkNUSU9OX18pOworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJCSBJUFdfU0lPX1BVUkdFLCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9PVVQsCisJCQkJIDB4MDMsCisJCQkJIDAsCisJCQkJIE5VTEwsCisJCQkJIDAsCisJCQkJIDIwMDAwMCk7CisJaWYgKHJlc3VsdCA8IDApCisJCWRldl9lcnIoJnBvcnQtPmRldiwgInB1cmdlIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByZXN1bHQpOworCisKKwkvKiBzZW5kIFJYQlVMS19vZmYgKHRlbGwgbW9kZW0gdG8gc3RvcCB0cmFuc21pdHRpbmcgYnVsayBkYXRhIG9uIHJ4IGNoYW4pICovCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkJIElQV19TSU9fUlhDVEwsCisJCQkJIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX09VVCwKKwkJCQkgSVBXX1JYQlVMS19PRkYsCisJCQkJIDAsIC8qIGluZGV4ICovCisJCQkJIE5VTEwsCisJCQkJIDAsCisJCQkJIDEwMDAwMCk7CisKKwlpZiAocmVzdWx0IDwgMCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiRGlzYWJsaW5nIGJ1bGsgUnhSZWFkIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByZXN1bHQpOworCisJLyogc2h1dGRvd24gYW55IGluLWZsaWdodCB1cmJzIHRoYXQgd2Uga25vdyBhYm91dCAqLworCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7Cit9CisKK3N0YXRpYyB2b2lkIGlwd193cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHVyYi0+Y29udGV4dDsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKHVyYi0+c3RhdHVzKQorCQlkYmcoIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKworCXNjaGVkdWxlX3dvcmsoJnBvcnQtPndvcmspOworfQorCitzdGF0aWMgaW50IGlwd193cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJaW50IHJldDsKKworCWRiZygiJXM6IFRPUDogY291bnQ9JWQsIGluX2ludGVycnVwdD0lbGQiLCBfX0ZVTkNUSU9OX18sCisJCWNvdW50LCBpbl9pbnRlcnJ1cHQoKSApOworCisJaWYgKGNvdW50ID09IDApIHsKKwkJZGJnKCIlcyAtIHdyaXRlIHJlcXVlc3Qgb2YgMCBieXRlcyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAwOworCX0KKwkKKwkvKiBSYWN5IGFuZCBicm9rZW4sIEZJWE1FIHByb3Blcmx5ISAqLworCWlmIChwb3J0LT53cml0ZV91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpCisJCXJldHVybiAwOworCisJY291bnQgPSBtaW4oY291bnQsIHBvcnQtPmJ1bGtfb3V0X3NpemUpOworCW1lbWNweShwb3J0LT5idWxrX291dF9idWZmZXIsIGJ1ZiwgY291bnQpOworCisJZGJnKCIlcyBjb3VudCBub3c6JWQiLCBfX0ZVTkNUSU9OX18sIGNvdW50KTsKKwkKKwl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT53cml0ZV91cmIsIGRldiwKKwkJCSAgdXNiX3NuZGJ1bGtwaXBlKGRldiwgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkgIGNvdW50LAorCQkJICBpcHdfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkJCSAgcG9ydCk7CisKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXQgIT0gMCkgeworCQlkYmcoIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkIHdpdGggZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkYmcoIiVzIHJldHVybmluZyAlZCIsIF9fRlVOQ1RJT05fXywgY291bnQpOworCXJldHVybiBjb3VudDsKK30gCisKK3N0YXRpYyBpbnQgaXB3X3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXB3X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgTlVMTCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBpcHdfZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIklQV2lyZWxlc3MgY29udmVydGVyIiwKKwkuc2hvcnRfbmFtZSA9CQkiaXB3IiwKKwkuaWRfdGFibGUgPQkJdXNiX2lwd19pZHMsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQlOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19pbiA9CQkxLAorCS5udW1fYnVsa19vdXQgPQkJMSwKKwkubnVtX3BvcnRzID0JCTEsCisJLm9wZW4gPQkJCWlwd19vcGVuLAorCS5jbG9zZSA9CQlpcHdfY2xvc2UsCisJLnBvcnRfcHJvYmUgPSAJCWlwd19wcm9iZSwKKwkucG9ydF9yZW1vdmUgPQkJaXB3X2Rpc2Nvbm5lY3QsCisJLndyaXRlID0JCWlwd193cml0ZSwKKwkud3JpdGVfYnVsa19jYWxsYmFjayA9CWlwd193cml0ZV9idWxrX2NhbGxiYWNrLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQlpcHdfcmVhZF9idWxrX2NhbGxiYWNrLAorfTsKKworCisKK3N0YXRpYyBpbnQgdXNiX2lwd19pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmlwd19kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ1c2JfaXB3X2RyaXZlcik7CisJaWYgKHJldHZhbCkgeworCQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmlwd19kZXZpY2UpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYl9pcHdfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZ1c2JfaXB3X2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZpcHdfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQodXNiX2lwd19pbml0KTsKK21vZHVsZV9leGl0KHVzYl9pcHdfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZjIzNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMKQEAgLTAsMCArMSw2MTkgQEAKKy8qCisgKiBVU0IgSVIgRG9uZ2xlIGRyaXZlcgorICoKKyAqCUNvcHlyaWdodCAoQykgMjAwMS0yMDAyCUdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisgKglDb3B5cmlnaHQgKEMpIDIwMDIJR2FyeSBCcnViYWtlciAoeGF2eWVyQGl4Lm5ldGNvbS5jb20pCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGRyaXZlciBhbGxvd3MgYSBVU0IgSXJEQSBkZXZpY2UgdG8gYmUgdXNlZCBhcyBhICJkdW1iIiBzZXJpYWwgZGV2aWNlLgorICogVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gYSBmdWxsIElyREEgc3RhY2sgb24gdGhlCisgKiBvdGhlciBzaWRlIG9mIHRoZSBjb25uZWN0aW9uLiAgSWYgeW91IGRvIGhhdmUgYW4gSXJEQSBzdGFjayBvbiBib3RoIGRldmljZXMsCisgKiBwbGVhc2UgdXNlIHRoZSB1c2ItaXJkYSBkcml2ZXIsIGFzIGl0IGNvbnRhaW5zIHRoZSBwcm9wZXIgZXJyb3IgY2hlY2tpbmcgYW5kCisgKiBvdGhlciBnb29kbmVzcyBvZiBhIGZ1bGwgSXJEQSBzdGFjay4KKyAqCisgKiBQb3J0aW9ucyBvZiB0aGlzIGRyaXZlciB3ZXJlIHRha2VuIGZyb20gZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jLCB3aGljaAorICogd2FzIHdyaXR0ZW4gYnkgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PiwgRGFnIEJyYXR0bGkKKyAqIDxkYWdAYnJhdHRsaS5uZXQ+LCBhbmQgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICoKKyAqIDIwMDJfTWFyXzA3CWdyZWcga2gKKyAqCW1vdmVkIHNvbWUgbmVlZGVkIHN0cnVjdHVyZXMgYW5kICNkZWZpbmUgdmFsdWVzIGZyb20gdGhlCisgKgluZXQvaXJkYS9pcmRhLXVzYi5oIGZpbGUgaW50byBvdXIgZmlsZSwgYXMgd2UgZG9uJ3Qgd2FudCB0byBkZXBlbmQgb24KKyAqCXRoYXQgY29kZWJhc2UgY29tcGlsaW5nIGNvcnJlY3RseSA6KQorICoKKyAqIDIwMDJfSmFuXzE0ICBnYgorICoJQWRkZWQgbW9kdWxlIHBhcmFtZXRlciB0byBmb3JjZSBzcGVjaWZpYyBudW1iZXIgb2YgWEJPRnMuCisgKglBZGRlZCBpcl94Ym9mX2NoYW5nZSgpLgorICoJUmVvcmdhbml6ZWQgcmVhZF9idWxrX2NhbGxiYWNrIGVycm9yIGhhbmRsaW5nLgorICoJU3dpdGNoZWQgZnJvbSBGSUxMX0JVTEtfVVJCKCkgdG8gdXNiX2ZpbGxfYnVsa191cmIoKS4KKyAqCisgKiAyMDAxX05vdl8wOCAgZ3JlZyBraAorICoJQ2hhbmdlZCB0aGUgaXJkYV91c2JfZmluZF9jbGFzc19kZXNjKCkgZnVuY3Rpb24gYmFzZWQgb24gY29tbWVudHMgYW5kCisgKgljb2RlIGZyb20gTWFydGluIERpZWhsLgorICoKKyAqIDIwMDFfTm92XzAxCWdyZWcga2gKKyAqCUFkZGVkIHN1cHBvcnQgZm9yIG1vcmUgSXJEQSBVU0IgZGV2aWNlcy4KKyAqCUFkZGVkIHN1cHBvcnQgZm9yIHplcm8gcGFja2V0LiAgQWRkZWQgYnVmZmVyIG92ZXJyaWRlIHBhcmFtYXRlciwgc28KKyAqCXVzZXJzIGNhbiB0cmFuc2ZlciBsYXJnZXIgcGFja2V0cyBhdCBvbmNlIGlmIHRoZXkgd2lzaC4gIEJvdGggcGF0Y2hlcworICoJY2FtZSBmcm9tIERhZyBCcmF0dGxpIDxkYWdAb2JleGNvZGUuY29tPi4KKyAqCisgKiAyMDAxX09jdF8wNwlncmVnIGtoCisgKglpbml0aWFsIHZlcnNpb24gcmVsZWFzZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC40IgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBJUiBEb25nbGUgZHJpdmVyIgorCisvKiBVU0IgSXJEQSBjbGFzcyBzcGVjIGluZm9ybWF0aW9uICovCisjZGVmaW5lIFVTQl9DTEFTU19JUkRBCQkweDAyCisjZGVmaW5lIFVTQl9EVF9JUkRBCQkweDIxCisjZGVmaW5lIElVX1JFUV9HRVRfQ0xBU1NfREVTQwkweDA2CisjZGVmaW5lIFNQRUVEXzI0MDAJCTB4MDEKKyNkZWZpbmUgU1BFRURfOTYwMAkJMHgwMgorI2RlZmluZSBTUEVFRF8xOTIwMAkJMHgwMworI2RlZmluZSBTUEVFRF8zODQwMAkJMHgwNAorI2RlZmluZSBTUEVFRF81NzYwMAkJMHgwNQorI2RlZmluZSBTUEVFRF8xMTUyMDAJCTB4MDYKKyNkZWZpbmUgU1BFRURfNTc2MDAwCQkweDA3CisjZGVmaW5lIFNQRUVEXzExNTIwMDAJCTB4MDgKKyNkZWZpbmUgU1BFRURfNDAwMDAwMAkJMHgwOQorCitzdHJ1Y3QgaXJkYV9jbGFzc19kZXNjIHsKKwl1OAliTGVuZ3RoOworCXU4CWJEZXNjcmlwdG9yVHlwZTsKKwl1MTYJYmNkU3BlY1JldmlzaW9uOworCXU4CWJtRGF0YVNpemU7CisJdTgJYm1XaW5kb3dTaXplOworCXU4CWJtTWluVHVybmFyb3VuZFRpbWU7CisJdTE2CXdCYXVkUmF0ZTsKKwl1OAlibUFkZGl0aW9uYWxCT0ZzOworCXU4CWJJcmRhUmF0ZVNuaWZmOworCXU4CWJNYXhVbmljYXN0TGlzdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdGF0aWMgaW50IGRlYnVnOworCisvKiBpZiBvdmVycmlkZGVuIGJ5IHRoZSB1c2VyLCB0aGVuIHVzZSB0aGVpciB2YWx1ZSBmb3IgdGhlIHNpemUgb2YgdGhlIHJlYWQgYW5kCisgKiB3cml0ZSB1cmJzICovCitzdGF0aWMgaW50IGJ1ZmZlcl9zaXplOworLyogaWYgb3ZlcnJpZGRlbiBieSB0aGUgdXNlciwgdGhlbiB1c2UgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgWEJPRnMgKi8KK3N0YXRpYyBpbnQgeGJvZiA9IC0xOworCitzdGF0aWMgaW50ICBpcl9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIGlyX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlcCk7CitzdGF0aWMgdm9pZCBpcl9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGVwKTsKK3N0YXRpYyBpbnQgIGlyX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CitzdGF0aWMgdm9pZCBpcl93cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIGlyX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBpcl9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKTsKKworc3RhdGljIHU4IGlyX2JhdWQgPSAwOworc3RhdGljIHU4IGlyX3hib2YgPSAwOworc3RhdGljIHU4IGlyX2FkZF9ib2YgPSAwOworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKDB4MDUwZiwgMHgwMTgwKSB9LAkJLyogS0MgVGVjaG5vbG9neSwgS0MtMTgwICovCisJeyBVU0JfREVWSUNFKDB4MDhlOSwgMHgwMTAwKSB9LAkJLyogWFROREFjY2VzcyAqLworCXsgVVNCX0RFVklDRSgweDA5YzQsIDB4MDAxMSkgfSwJCS8qIEFDVGlTeXMgQUNULUlSMjAwMFUgKi8KKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyAoVVNCX0NMQVNTX0FQUF9TUEVDLCBVU0JfQ0xBU1NfSVJEQSwgMCkgfSwKKwl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGlyX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiaXItdXNiIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorfTsKKworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgaXJfZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIklSIERvbmdsZSIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luID0JMSwKKwkubnVtX2J1bGtfaW4gPQkJMSwKKwkubnVtX2J1bGtfb3V0ID0JCTEsCisJLm51bV9wb3J0cyA9CQkxLAorCS5zZXRfdGVybWlvcyA9CQlpcl9zZXRfdGVybWlvcywKKwkuYXR0YWNoID0JCWlyX3N0YXJ0dXAsCisJLm9wZW4gPQkJCWlyX29wZW4sCisJLmNsb3NlID0JCWlyX2Nsb3NlLAorCS53cml0ZSA9CQlpcl93cml0ZSwKKwkud3JpdGVfYnVsa19jYWxsYmFjayA9CWlyX3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJLnJlYWRfYnVsa19jYWxsYmFjayA9CWlyX3JlYWRfYnVsa19jYWxsYmFjaywKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcmRhX3VzYl9kdW1wX2NsYXNzX2Rlc2Moc3RydWN0IGlyZGFfY2xhc3NfZGVzYyAqZGVzYykKK3sKKwlkYmcoImJMZW5ndGg9JXgiLCBkZXNjLT5iTGVuZ3RoKTsKKwlkYmcoImJEZXNjcmlwdG9yVHlwZT0leCIsIGRlc2MtPmJEZXNjcmlwdG9yVHlwZSk7CisJZGJnKCJiY2RTcGVjUmV2aXNpb249JXgiLCBkZXNjLT5iY2RTcGVjUmV2aXNpb24pOyAKKwlkYmcoImJtRGF0YVNpemU9JXgiLCBkZXNjLT5ibURhdGFTaXplKTsKKwlkYmcoImJtV2luZG93U2l6ZT0leCIsIGRlc2MtPmJtV2luZG93U2l6ZSk7CisJZGJnKCJibU1pblR1cm5hcm91bmRUaW1lPSVkIiwgZGVzYy0+Ym1NaW5UdXJuYXJvdW5kVGltZSk7CisJZGJnKCJ3QmF1ZFJhdGU9JXgiLCBkZXNjLT53QmF1ZFJhdGUpOworCWRiZygiYm1BZGRpdGlvbmFsQk9Gcz0leCIsIGRlc2MtPmJtQWRkaXRpb25hbEJPRnMpOworCWRiZygiYklyZGFSYXRlU25pZmY9JXgiLCBkZXNjLT5iSXJkYVJhdGVTbmlmZik7CisJZGJnKCJiTWF4VW5pY2FzdExpc3Q9JXgiLCBkZXNjLT5iTWF4VW5pY2FzdExpc3QpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogRnVuY3Rpb24gaXJkYV91c2JfZmluZF9jbGFzc19kZXNjKGRldiwgaWZudW0pCisgKgorICogICAgUmV0dXJucyBpbnN0YW5jZSBvZiBJckRBIGNsYXNzIGRlc2NyaXB0b3IsIG9yIE5VTEwgaWYgbm90IGZvdW5kCisgKgorICogVGhlIGNsYXNzIGRlc2NyaXB0b3IgaXMgc29tZSBleHRyYSBpbmZvIHRoYXQgSXJEQSBVU0IgZGV2aWNlcyB3aWxsCisgKiBvZmZlciB0byB1cywgZGVzY3JpYmluZyB0aGVpciBJckRBIGNoYXJhY3RlcmlzdGljcy4gV2Ugd2lsbCB1c2UgdGhhdCBpbgorICogaXJkYV91c2JfaW5pdF9xb3MoKQorICoKKyAqIEJhc2VkIG9uIHRoZSBzYW1lIGZ1bmN0aW9uIGluIGRyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYworICovCitzdGF0aWMgc3RydWN0IGlyZGFfY2xhc3NfZGVzYyAqaXJkYV91c2JfZmluZF9jbGFzc19kZXNjKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZm51bSkKK3sKKwlzdHJ1Y3QgaXJkYV9jbGFzc19kZXNjICpkZXNjOworCWludCByZXQ7CisJCQorCWRlc2MgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IGlyZGFfY2xhc3NfZGVzYyksIEdGUF9LRVJORUwpOworCWlmIChkZXNjID09IE5VTEwpIAorCQlyZXR1cm4gTlVMTDsKKwltZW1zZXQoZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBpcmRhX2NsYXNzX2Rlc2MpKTsKKwkKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LDApLAorCQkJSVVfUkVRX0dFVF9DTEFTU19ERVNDLAorCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCTAsIGlmbnVtLCBkZXNjLCBzaXplb2YoKmRlc2MpLCAxMDAwKTsKKwkKKwlkYmcoIiVzIC0gIHJldD0lZCIsIF9fRlVOQ1RJT05fXywgcmV0KTsKKwlpZiAocmV0IDwgc2l6ZW9mKCpkZXNjKSkgeworCQlkYmcoIiVzIC0gY2xhc3MgZGVzY3JpcHRvciByZWFkICVzICglZCkiLAorCQkJCV9fRlVOQ1RJT05fXywgCisJCQkJKHJldDwwKSA/ICJmYWlsZWQiIDogInRvbyBzaG9ydCIsCisJCQkJcmV0KTsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKGRlc2MtPmJEZXNjcmlwdG9yVHlwZSAhPSBVU0JfRFRfSVJEQSkgeworCQlkYmcoIiVzIC0gYmFkIGNsYXNzIGRlc2NyaXB0b3IgdHlwZSIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXJyb3I7CisJfQorCQorCWlyZGFfdXNiX2R1bXBfY2xhc3NfZGVzYyhkZXNjKTsKKwlyZXR1cm4gZGVzYzsKK2Vycm9yOgorCWtmcmVlKGRlc2MpOworCXJldHVybiBOVUxMOworfQorCisKK3N0YXRpYyB1OCBpcl94Ym9mX2NoYW5nZSh1OCB4Ym9mKQoreworCXU4IHJlc3VsdDsKKwkvKiByZWZlcmVuY2UgaXJkYS11c2IuYyAqLworCXN3aXRjaCh4Ym9mKSB7CisJCWNhc2UgNDg6IHJlc3VsdCA9IDB4MTA7IGJyZWFrOworCQljYXNlIDI4OgorCQljYXNlIDI0OiByZXN1bHQgPSAweDIwOyBicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSAxMjogcmVzdWx0ID0gMHgzMDsgYnJlYWs7CisJCWNhc2UgIDU6CisJCWNhc2UgIDY6IHJlc3VsdCA9IDB4NDA7IGJyZWFrOworCQljYXNlICAzOiByZXN1bHQgPSAweDUwOyBicmVhazsKKwkJY2FzZSAgMjogcmVzdWx0ID0gMHg2MDsgYnJlYWs7CisJCWNhc2UgIDE6IHJlc3VsdCA9IDB4NzA7IGJyZWFrOworCQljYXNlICAwOiByZXN1bHQgPSAweDgwOyBicmVhazsKKwl9CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKworc3RhdGljIGludCBpcl9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBpcmRhX2NsYXNzX2Rlc2MgKmlyZGFfZGVzYzsKKworCWlyZGFfZGVzYyA9IGlyZGFfdXNiX2ZpbmRfY2xhc3NfZGVzYyAoc2VyaWFsLT5kZXYsIDApOworCWlmIChpcmRhX2Rlc2MgPT0gTlVMTCkgeworCQlkZXZfZXJyICgmc2VyaWFsLT5kZXYtPmRldiwgIklSREEgY2xhc3MgZGVzY3JpcHRvciBub3QgZm91bmQsIGRldmljZSBub3QgYm91bmRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkYmcgKCIlcyAtIEJhdWQgcmF0ZXMgc3VwcG9ydGVkOiVzJXMlcyVzJXMlcyVzJXMlcyIsCisJCV9fRlVOQ1RJT05fXywKKwkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDAxKSA/ICIgMjQwMCIgICAgOiAiIiwKKwkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDAyKSA/ICIgOTYwMCIgICAgOiAiIiwKKwkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDA0KSA/ICIgMTkyMDAiICAgOiAiIiwKKwkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDA4KSA/ICIgMzg0MDAiICAgOiAiIiwKKwkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDEwKSA/ICIgNTc2MDAiICAgOiAiIiwKKwkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDIwKSA/ICIgMTE1MjAwIiAgOiAiIiwKKwkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDQwKSA/ICIgNTc2MDAwIiAgOiAiIiwKKwkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDgwKSA/ICIgMTE1MjAwMCIgOiAiIiwKKwkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMTAwKSA/ICIgNDAwMDAwMCIgOiAiIik7CisKKwlzd2l0Y2goIGlyZGFfZGVzYy0+Ym1BZGRpdGlvbmFsQk9GcyApIHsKKwkJY2FzZSAweDAxOiBpcl9hZGRfYm9mID0gNDg7IGJyZWFrOworCQljYXNlIDB4MDI6IGlyX2FkZF9ib2YgPSAyNDsgYnJlYWs7CisJCWNhc2UgMHgwNDogaXJfYWRkX2JvZiA9IDEyOyBicmVhazsKKwkJY2FzZSAweDA4OiBpcl9hZGRfYm9mID0gIDY7IGJyZWFrOworCQljYXNlIDB4MTA6IGlyX2FkZF9ib2YgPSAgMzsgYnJlYWs7CisJCWNhc2UgMHgyMDogaXJfYWRkX2JvZiA9ICAyOyBicmVhazsKKwkJY2FzZSAweDQwOiBpcl9hZGRfYm9mID0gIDE7IGJyZWFrOworCQljYXNlIDB4ODA6IGlyX2FkZF9ib2YgPSAgMDsgYnJlYWs7CisJCWRlZmF1bHQ6OworCX0KKworCWtmcmVlIChpcmRhX2Rlc2MpOworCisJcmV0dXJuIDA7CQkKK30KKworc3RhdGljIGludCBpcl9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwljaGFyICpidWZmZXI7CisJaW50IHJlc3VsdCA9IDA7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChidWZmZXJfc2l6ZSkgeworCQkvKiBvdmVycmlkZSB0aGUgZGVmYXVsdCBidWZmZXIgc2l6ZXMgKi8KKwkJYnVmZmVyID0ga21hbGxvYyAoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIWJ1ZmZlcikgeworCQkJZGV2X2VyciAoJnBvcnQtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlrZnJlZSAocG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBidWZmZXI7CisJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gYnVmZmVyX3NpemU7CisKKwkJYnVmZmVyID0ga21hbGxvYyAoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIWJ1ZmZlcikgeworCQkJZGV2X2VyciAoJnBvcnQtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlrZnJlZSAocG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciA9IGJ1ZmZlcjsKKwkJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gYnVmZmVyX3NpemU7CisJCXBvcnQtPmJ1bGtfb3V0X3NpemUgPSBidWZmZXJfc2l6ZTsKKwl9CisKKwkvKiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLworCXVzYl9maWxsX2J1bGtfdXJiICgKKwkJcG9ydC0+cmVhZF91cmIsCisJCXBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQlpcl9yZWFkX2J1bGtfY2FsbGJhY2ssCisJCXBvcnQpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmVzdWx0KQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgaXJfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlscCkKK3sKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkJCSAKKwkvKiBzaHV0ZG93biBvdXIgYnVsayByZWFkICovCisJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKK30KKworc3RhdGljIGludCBpcl93cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJdW5zaWduZWQgY2hhciAqdHJhbnNmZXJfYnVmZmVyOworCWludCByZXN1bHQ7CisJaW50IHRyYW5zZmVyX3NpemU7CisKKwlkYmcoIiVzIC0gcG9ydCA9ICVkLCBjb3VudCA9ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIGNvdW50KTsKKworCWlmICghcG9ydC0+dHR5KSB7CisJCWRldl9lcnIgKCZwb3J0LT5kZXYsICIlcyAtIG5vIHR0eT8/P1xuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGNvdW50ID09IDApCisJCXJldHVybiAwOworCisJaWYgKHBvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQlkYmcgKCIlcyAtIGFscmVhZHkgd3JpdGluZyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAwOworCX0KKworCXRyYW5zZmVyX2J1ZmZlciA9IHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyOworCXRyYW5zZmVyX3NpemUgPSBtaW4oY291bnQsIHBvcnQtPmJ1bGtfb3V0X3NpemUgLSAxKTsKKworCS8qCisJICogVGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHBhY2tldCB3ZSBzZW5kIHRvIHRoZSBkZXZpY2UgY29udGFpbnMgYW4KKwkgKiBpbmJhbmQgaGVhZGVyIHdoaWNoIGluZGljYXRlcyBhbiBhZGRpdGlvbmFsIG51bWJlciBvZiBCT0ZzIGFuZAorCSAqIGEgYmF1ZCByYXRlIGNoYW5nZS4KKwkgKgorCSAqIFNlZSBzZWN0aW9uIDUuNC4yLjIgb2YgdGhlIFVTQiBJckRBIHNwZWMuCisJICovCisJKnRyYW5zZmVyX2J1ZmZlciA9IGlyX3hib2YgfCBpcl9iYXVkOworCSsrdHJhbnNmZXJfYnVmZmVyOworCisJbWVtY3B5ICh0cmFuc2Zlcl9idWZmZXIsIGJ1ZiwgdHJhbnNmZXJfc2l6ZSk7CisKKwl1c2JfZmlsbF9idWxrX3VyYiAoCisJCXBvcnQtPndyaXRlX3VyYiwKKwkJcG9ydC0+c2VyaWFsLT5kZXYsCisJCXVzYl9zbmRidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwKKwkJCXBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQl0cmFuc2Zlcl9zaXplICsgMSwKKwkJaXJfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkJcG9ydCk7CisKKwlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX1pFUk9fUEFDS0VUOworCisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIgKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJZWxzZQorCQlyZXN1bHQgPSB0cmFuc2Zlcl9zaXplOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgaXJfd3JpdGVfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEgKAorCQlkZWJ1ZywKKwkJJnBvcnQtPmRldiwKKwkJX19GVU5DVElPTl9fLAorCQl1cmItPmFjdHVhbF9sZW5ndGgsCisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCXNjaGVkdWxlX3dvcmsoJnBvcnQtPndvcmspOworfQorCitzdGF0aWMgdm9pZCBpcl9yZWFkX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlkYmcoIiVzIC0gcG9ydCBjbG9zZWQuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKworCQljYXNlIDA6IC8qIFN1Y2Nlc3NmdWwgKi8KKworCQkJLyoKKwkJCSAqIFRoZSBmaXJzdCBieXRlIG9mIHRoZSBwYWNrZXQgd2UgZ2V0IGZyb20gdGhlIGRldmljZQorCQkJICogY29udGFpbnMgYSBidXN5IGluZGljYXRvciBhbmQgYmF1ZCByYXRlIGNoYW5nZS4KKwkJCSAqIFNlZSBzZWN0aW9uIDUuNC4xLjIgb2YgdGhlIFVTQiBJckRBIHNwZWMuCisJCQkgKi8KKwkJCWlmICgoKmRhdGEgJiAweDBmKSA+IDApCisJCQkJaXJfYmF1ZCA9ICpkYXRhICYgMHgwZjsKKworCQkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhICgKKwkJCQlkZWJ1ZywKKwkJCQkmcG9ydC0+ZGV2LAorCQkJCV9fRlVOQ1RJT05fXywKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGgsCisJCQkJZGF0YSk7CisKKwkJCS8qCisJCQkgKiBCeXBhc3MgZmxpcC1idWZmZXJzLCBhbmQgZmVlZCB0aGUgbGRpc2MgZGlyZWN0bHkKKwkJCSAqIGR1ZSB0byBvdXIgcG90ZW50aWFsbHkgbGFyZ2UgYnVmZmVyIHNpemUuICBTaW5jZSB3ZQorCQkJICogdXNlZCB0byBzZXQgbG93X2xhdGVuY3ksIHRoaXMgaXMgZXhhY3RseSB3aGF0IHRoZQorCQkJICogdHR5IGxheWVyIGRpZCBhbnl3YXkgOikKKwkJCSAqLworCQkJdHR5ID0gcG9ydC0+dHR5OworCisJCQkvKgorCQkJICoJRklYTUU6IG11c3Qgbm90IGRvIHRoaXMgaW4gSVJRIGNvbnRleHQsCisJCQkgKgltdXN0IGhvbm91ciBUVFlfRE9OVF9GTElQCisJCQkgKi8KKwkJCXR0eS0+bGRpc2MucmVjZWl2ZV9idWYoCisJCQkJdHR5LAorCQkJCWRhdGErMSwKKwkJCQlOVUxMLAorCQkJCXVyYi0+YWN0dWFsX2xlbmd0aC0xKTsKKworCQkJLyoKKwkJCSAqIE5vIGJyZWFrIGhlcmUuCisJCQkgKiBXZSB3YW50IHRvIHJlc3VibWl0IHRoZSB1cmIgc28gd2UgY2FuIHJlYWQKKwkJCSAqIGFnYWluLgorCQkJICovCisKKwkJY2FzZSAtRVBST1RPOiAvKiB0YWtpbmcgaW5zcGlyYXRpb24gZnJvbSBwbDIzMDMuYyAqLworCisJCQkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgKi8KKwkJCXVzYl9maWxsX2J1bGtfdXJiICgKKwkJCQlwb3J0LT5yZWFkX3VyYiwKKwkJCQlwb3J0LT5zZXJpYWwtPmRldiwgCisJCQkJdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCQlwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQlpcl9yZWFkX2J1bGtfY2FsbGJhY2ssCisJCQkJcG9ydCk7CisKKwkJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJCWlmIChyZXN1bHQpCisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCQkJX19GVU5DVElPTl9fLCByZXN1bHQpOworCisJCQlicmVhayA7CisKKwkJZGVmYXVsdDoKKwkJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJCQlfX0ZVTkNUSU9OX18sIAorCQkJCXVyYi0+c3RhdHVzKTsKKwkJCWJyZWFrIDsKKworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgaXJfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwl1bnNpZ25lZCBjaGFyICp0cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQgaW50IGNmbGFnOworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICgoIXBvcnQtPnR0eSkgfHwgKCFwb3J0LT50dHktPnRlcm1pb3MpKSB7CisJCWRiZygiJXMgLSBubyB0dHkgc3RydWN0dXJlcyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwljZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwkvKiBjaGVjayB0aGF0IHRoZXkgcmVhbGx5IHdhbnQgdXMgdG8gY2hhbmdlIHNvbWV0aGluZyAqLworCWlmIChvbGRfdGVybWlvcykgeworCQlpZiAoKGNmbGFnID09IG9sZF90ZXJtaW9zLT5jX2NmbGFnKSAmJgorCQkgICAgKFJFTEVWQU5UX0lGTEFHKHBvcnQtPnR0eS0+dGVybWlvcy0+Y19pZmxhZykgPT0gUkVMRVZBTlRfSUZMQUcob2xkX3Rlcm1pb3MtPmNfaWZsYWcpKSkgeworCQkJZGJnKCIlcyAtIG5vdGhpbmcgdG8gY2hhbmdlLi4uIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIEFsbCB3ZSBjYW4gY2hhbmdlIGlzIHRoZSBiYXVkIHJhdGUgKi8KKwlpZiAoY2ZsYWcgJiBDQkFVRCkgeworCisJCWRiZyAoIiVzIC0gYXNraW5nIGZvciBiYXVkICVkIiwKKwkJCV9fRlVOQ1RJT05fXywKKwkJCXR0eV9nZXRfYmF1ZF9yYXRlKHBvcnQtPnR0eSkpOworCisJCS8qIAorCQkgKiBGSVhNRSwgd2Ugc2hvdWxkIGNvbXBhcmUgdGhlIGJhdWQgcmVxdWVzdCBhZ2FpbnN0IHRoZQorCQkgKiBjYXBhYmlsaXR5IHN0YXRlZCBpbiB0aGUgSVIgaGVhZGVyIHRoYXQgd2UgZ290IGluIHRoZQorCQkgKiBzdGFydHVwIGZ1bmN0aW9uLgorCQkgKi8KKwkJc3dpdGNoIChjZmxhZyAmIENCQVVEKSB7CisJCQljYXNlIEIyNDAwOiAgICBpcl9iYXVkID0gU1BFRURfMjQwMDsgICAgYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJY2FzZSBCOTYwMDogICAgaXJfYmF1ZCA9IFNQRUVEXzk2MDA7ICAgIGJyZWFrOworCQkJY2FzZSBCMTkyMDA6ICAgaXJfYmF1ZCA9IFNQRUVEXzE5MjAwOyAgIGJyZWFrOworCQkJY2FzZSBCMzg0MDA6ICAgaXJfYmF1ZCA9IFNQRUVEXzM4NDAwOyAgIGJyZWFrOworCQkJY2FzZSBCNTc2MDA6ICAgaXJfYmF1ZCA9IFNQRUVEXzU3NjAwOyAgIGJyZWFrOworCQkJY2FzZSBCMTE1MjAwOiAgaXJfYmF1ZCA9IFNQRUVEXzExNTIwMDsgIGJyZWFrOworCQkJY2FzZSBCNTc2MDAwOiAgaXJfYmF1ZCA9IFNQRUVEXzU3NjAwMDsgIGJyZWFrOworCQkJY2FzZSBCMTE1MjAwMDogaXJfYmF1ZCA9IFNQRUVEXzExNTIwMDA7IGJyZWFrOworI2lmZGVmIEI0MDAwMDAwCisJCQljYXNlIEI0MDAwMDAwOiBpcl9iYXVkID0gU1BFRURfNDAwMDAwMDsgYnJlYWs7CisjZW5kaWYKKwkJfQorCisJCWlmICh4Ym9mID09IC0xKSB7CisJCQlpcl94Ym9mID0gaXJfeGJvZl9jaGFuZ2UoaXJfYWRkX2JvZik7CisJCX0gZWxzZSB7CisJCQlpcl94Ym9mID0gaXJfeGJvZl9jaGFuZ2UoeGJvZikgOworCQl9CisKKwkJLyogTm90aWZ5IHRoZSB0dHkgZHJpdmVyIHRoYXQgdGhlIHRlcm1pb3MgaGF2ZSBjaGFuZ2VkLiAqLworCQlwb3J0LT50dHktPmxkaXNjLnNldF90ZXJtaW9zKHBvcnQtPnR0eSwgTlVMTCk7CisKKwkJLyogRklYTUUgbmVlZCB0byBjaGVjayB0byBzZWUgaWYgb3VyIHdyaXRlIHVyYiBpcyBidXN5IHJpZ2h0CisJCSAqIG5vdywgb3IgdXNlIGEgdXJiIHBvb2wuCisJCSAqCisJCSAqIHNlbmQgdGhlIGJhdWQgY2hhbmdlIG91dCBvbiBhbiAiZW1wdHkiIGRhdGEgcGFja2V0CisJCSAqLworCQl0cmFuc2Zlcl9idWZmZXIgPSBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwkJKnRyYW5zZmVyX2J1ZmZlciA9IGlyX3hib2YgfCBpcl9iYXVkOworCisJCXVzYl9maWxsX2J1bGtfdXJiICgKKwkJCXBvcnQtPndyaXRlX3VyYiwKKwkJCXBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJdXNiX3NuZGJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCXBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCTEsCisJCQlpcl93cml0ZV9idWxrX2NhbGxiYWNrLAorCQkJcG9ydCk7CisKKwkJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9aRVJPX1BBQ0tFVDsKKworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiAocG9ydC0+d3JpdGVfdXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCX0KKwlyZXR1cm47Cit9CisKKworc3RhdGljIGludCBfX2luaXQgaXJfaW5pdCAodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmlyX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmlyX2RyaXZlcik7CisJaWYgKHJldHZhbCkgCisJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKKwlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIDA7CitmYWlsZWRfdXNiX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmaXJfZGV2aWNlKTsKK2ZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOgorCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IGlyX2V4aXQgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIgKCZpcl9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmlyX2RldmljZSk7Cit9CisKKworbW9kdWxlX2luaXQoaXJfaW5pdCk7Cittb2R1bGVfZXhpdChpcl9leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7Cittb2R1bGVfcGFyYW0oeGJvZiwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoeGJvZiwgIkZvcmNlIHNwZWNpZmljIG51bWJlciBvZiBYQk9GcyIpOworbW9kdWxlX3BhcmFtKGJ1ZmZlcl9zaXplLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhidWZmZXJfc2l6ZSwgIlNpemUgb2YgdGhlIHRyYW5zZmVyIGJ1ZmZlcnMiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIwOTI2MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKQEAgLTAsMCArMSwyMzU0IEBACisvKgorICBLZXlzcGFuIFVTQiB0byBTZXJpYWwgQ29udmVydGVyIGRyaXZlcgorIAorICAoQykgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEJSHVnaCBCbGVtaW5ncyA8aHVnaEBibGVtaW5ncy5vcmc+CisgIChDKSBDb3B5cmlnaHQgKEMpIDIwMDIJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KKyAgIAorICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIFNlZSBodHRwOi8vbWlzYy5udS9odWdoL2tleXNwYW4uaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgCisgIENvZGUgaW4gdGhpcyBkcml2ZXIgaW5zcGlyZWQgYnkgYW5kIGluIGEgbnVtYmVyIG9mIHBsYWNlcyB0YWtlbgorICBmcm9tIEJyaWFuIFdhcm5lcidzIG9yaWdpbmFsIEtleXNwYW4tUERBIGRyaXZlci4KKworICBUaGlzIGRyaXZlciBoYXMgYmVlbiBwdXQgdG9nZXRoZXIgd2l0aCB0aGUgc3VwcG9ydCBvZiBJbm5vc3lzLCBJbmMuCisgIGFuZCBLZXlzcGFuLCBJbmMgdGhlIG1hbnVmYWN0dXJlcnMgb2YgdGhlIEtleXNwYW4gVVNCLXNlcmlhbCBwcm9kdWN0cy4KKyAgVGhhbmtzIEd1eXMgOikKKyAgCisgIFRoYW5rcyB0byBQYXVsdXMgZm9yIG1pc2NlbGxhbmVvdXMgdGlkeSB1cHMsIHNvbWUgbGFyZ2lzaCBjaHVua3MKKyAgb2YgbXVjaCBuaWNlciBhbmQvb3IgY29tcGxldGVseSBuZXcgY29kZSBhbmQgKHBlcmhhcHMgbW9zdCB1bmlxdWVseSkKKyAgaGF2aW5nIHRoZSBwYXRpZW5jZSB0byBzaXQgZG93biBhbmQgZXhwbGFpbiB3aHkgYW5kIHdoZXJlIGhlJ2QgY2hhbmdlZAorICBzdHVmZi4gCisgIAorICBUaXAgJ28gdGhlIGhhdCB0byBJQk0gKGFuZCBwcmV2aW91c2x5IExpbnV4Y2FyZSA6KSBmb3Igc3VwcG9ydGluZyAKKyAgc3RhZmYgaW4gdGhlaXIgd29yayBvbiBvcGVuIHNvdXJjZSBwcm9qZWN0cy4KKworICBDaGFuZ2UgSGlzdG9yeQorCisgICAgMjAwM3NlcDA0CUxQTSAoS2V5c3BhbikgYWRkIHN1cHBvcnQgZm9yIG5ldyBzaW5nbGUgcG9ydCBwcm9kdWN0IFVTQTE5SFMuCisJCQkJSW1wcm92ZSBzZXR1cCBtZXNzYWdlIGhhbmRsaW5nIGZvciBhbGwgZGV2aWNlcy4KKworICAgIFdlZCBGZWIgMTkgMjI6MDA6MDAgUFNUIDIwMDMgKEplZmZyZXkgUy4gTGFpbmcgPGtleXNwYW5AanNsLmNvbT4pCisgICAgICBNZXJnZWQgdGhlIGN1cnJlbnQgKDEvMzEvMDMpIEtleXNwYW4gY29kZSB3aXRoIHRoZSBjdXJyZW50ICgyLjQuMjEtcHJlNCkKKyAgICAgIExpbnV4IHNvdXJjZSB0cmVlLiAgVGhlIExpbnV4IHRyZWUgbGFja2VkIHN1cHBvcnQgZm9yIHRoZSA0OVdMQyBhbmQKKyAgICAgIG90aGVycy4gIFRoZSBLZXlzcGFuIHBhdGNoZXMgZGlkbid0IHdvcmsgd2l0aCB0aGUgY3VycmVudCBrZXJuZWwuCisKKyAgICAyMDAzamFuMzAJTFBNCWFkZCBzdXBwb3J0IGZvciB0aGUgNDlXTEMgYW5kIE1QUgorCisgICAgV2VkIEFwciAyNSAxMjowMDowMCBQU1QgMjAwMiAoS2V5c3BhbikKKyAgICAgIFN0YXJ0ZWQgd2l0aCBIdWdoIEJsZW1pbmdzJyBjb2RlIGRhdGVkIEphbiAxNywgMjAwMi4gIEFsbCBhZGFwdGVycworICAgICAgbm93IHN1cHBvcnRlZCAoaW5jbHVkaW5nIFFJIGFuZCBRVykuICBNb2RpZmllZCBwb3J0IG9wZW4sIHBvcnQKKyAgICAgIGNsb3NlLCBhbmQgc2VuZCBzZXR1cCgpIGxvZ2ljIHRvIGZpeCB2YXJpb3VzIGRhdGEgYW5kIGVuZHBvaW50CisgICAgICBzeW5jaHJvbml6YXRpb24gYnVncyBhbmQgZGV2aWNlIExFRCBzdGF0dXMgYnVncy4gIENoYW5nZWQga2V5c3Bhbl8KKyAgICAgIHdyaXRlX3Jvb20oKSB0byBhY2N1cmF0ZWx5IHJldHVybiB0cmFuc21pdCBidWZmZXIgYXZhaWxhYmlsaXR5LgorICAgICAgQ2hhbmdlZCBmb3J3YXJkaW5nTGVuZ3RoIGZyb20gMSB0byAxNiBmb3IgYWxsIGFkYXB0ZXJzLgorCisgICAgRnJpIE9jdCAxMiAxNjo0NTowMCBFU1QgMjAwMQorICAgICAgUHJlbGltaW5hcnkgVVNBLTE5UUkgYW5kIFVTQS0yOCBzdXBwb3J0IChib3RoIHRlc3QgT0sgZm9yIG1lLCBZTU1WKQorCisgICAgV2VkIEFwciAyNSAxMjowMDowMCBQU1QgMjAwMiAoS2V5c3BhbikKKyAgICAgIFN0YXJ0ZWQgd2l0aCBIdWdoIEJsZW1pbmdzJyBjb2RlIGRhdGVkIEphbiAxNywgMjAwMi4gIEFsbCBhZGFwdGVycworICAgICAgbm93IHN1cHBvcnRlZCAoaW5jbHVkaW5nIFFJIGFuZCBRVykuICBNb2RpZmllZCBwb3J0IG9wZW4sIHBvcnQKKyAgICAgIGNsb3NlLCBhbmQgc2VuZCBzZXR1cCgpIGxvZ2ljIHRvIGZpeCB2YXJpb3VzIGRhdGEgYW5kIGVuZHBvaW50CisgICAgICBzeW5jaHJvbml6YXRpb24gYnVncyBhbmQgZGV2aWNlIExFRCBzdGF0dXMgYnVncy4gIENoYW5nZWQga2V5c3Bhbl8KKyAgICAgIHdyaXRlX3Jvb20oKSB0byBhY2N1cmF0ZWx5IHJldHVybiB0cmFuc21pdCBidWZmZXIgYXZhaWxhYmlsaXR5LgorICAgICAgQ2hhbmdlZCBmb3J3YXJkaW5nTGVuZ3RoIGZyb20gMSB0byAxNiBmb3IgYWxsIGFkYXB0ZXJzLgorCisgICAgRnJpIE9jdCAxMiAxNjo0NTowMCBFU1QgMjAwMQorICAgICAgUHJlbGltaW5hcnkgVVNBLTE5UUkgYW5kIFVTQS0yOCBzdXBwb3J0IChib3RoIHRlc3QgT0sgZm9yIG1lLCBZTU1WKQorCisgICAgTW9uIE9jdCAgOCAxNDoyOTowMCBFU1QgMjAwMSBodWdoCisgICAgICBGaXhlZCBidWcgdGhhdCBwcmV2ZW50ZWQgbXVsaXRwb3J0IGRldmljZXMgb3BlcmF0aW5nIGNvcnJlY3RseQorICAgICAgaWYgdGhleSB3ZXJlbid0IHRoZSBmaXJzdCB1bml0IGF0dGFjaGVkLgorCisgICAgU2F0IE9jdCAgNiAxMjozMToyMSBFU1QgMjAwMSBodWdoCisgICAgICBBZGRlZCBzdXBwb3J0IGZvciBVU0EtMjhYQSBhbmQgLTI4WEIsIG1pc2MgY2xlYW51cHMsIGJyZWFrIHN1cHBvcnQKKyAgICAgIGZvciB1c2EyNiBiYXNlZCBtb2RlbHMgdGhhbmtzIHRvIERhdmlkIEdpYnNvbi4KKworICAgIFRodSBNYXkgMzEgMTE6NTY6NDIgUERUIDIwMDEgZ2toCisgICAgICBzd2l0Y2hlZCBmcm9tIHVzaW5nIHNwaW5sb2NrIHRvIGEgc2VtYXBob3JlCisgICAKKyAgICAoMDQvMDgvMjAwMSkgZ2IKKwlJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgorICAgCisgICAgKDExLzAxLzIwMDApIEFkYW0gSi4gUmljaHRlcgorCXVzYl9kZXZpY2VfaWQgdGFibGUgc3VwcG9ydC4KKyAgIAorICAgIFR1ZSBPY3QgMTAgMjM6MTU6MzMgRVNUIDIwMDAgSHVnaAorICAgICAgTWVyZ2VkIFBhdWwncyBjaGFuZ2VzIHdpdGggbXkgVVNBLTQ5VyBtb2RzLiAgV29yayBpbiBwcm9ncmVzcworICAgICAgc3RpbGwuLi4KKyAgCisgICAgV2VkIEp1bCAxOSAxNDowMDo0MiBFU1QgMjAwMCBna2gKKyAgICAgIEFkZGVkIG1vZHVsZV9pbml0IGFuZCBtb2R1bGVfZXhpdCBmdW5jdGlvbnMgdG8gaGFuZGxlIHRoZSBmYWN0IHRoYXQKKyAgICAgIHRoaXMgZHJpdmVyIGlzIGEgbG9hZGFibGUgbW9kdWxlIG5vdy4KKyAKKyAgICBUdWUgSnVsIDE4IDE2OjE0OjUyIEVTVCAyMDAwIEh1Z2gKKyAgICAgIEJhc2ljIGNoYXJhY3RlciBpbnB1dC9vdXRwdXQgZm9yIFVTQS0xOSBub3cgbW9zdGx5IHdvcmtzLAorICAgICAgZml4ZWQgYXQgOTYwMCBiYXVkIGZvciB0aGUgbW9tZW50LgorCisgICAgU2F0IEp1bCAgOCAxMToxMTo0OCBFU1QgMjAwMCBIdWdoCisgICAgICBGaXJzdCBwdWJsaWMgcmVsZWFzZSAtIG5vdGhpbmcgd29ya3MgZXhjZXB0IHRoZSBmaXJtd2FyZSB1cGxvYWQuCisgICAgICBUZXN0ZWQgb24gUFBDIGFuZCB4ODYgYXJjaGl0ZWN0dXJlcywgc2VlbXMgdG8gYmVoYXZlLi4uCisqLworCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisjaW5jbHVkZSAia2V5c3Bhbi5oIgorCitzdGF0aWMgaW50IGRlYnVnOworCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS4xLjQiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkh1Z2ggQmxlbWluZ3MgPGh1Z2hAbWlzYy5udSIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIktleXNwYW4gVVNCIHRvIFNlcmlhbCBDb252ZXJ0ZXIgRHJpdmVyIgorCisjZGVmaW5lIElOU1RBVF9CVUZMRU4JMzIKKyNkZWZpbmUgR0xPQ09OVF9CVUZMRU4JNjQKKworCS8qIFBlciBkZXZpY2UgYW5kIHBlciBwb3J0IHByaXZhdGUgZGF0YSAqLworc3RydWN0IGtleXNwYW5fc2VyaWFsX3ByaXZhdGUgeworCWNvbnN0IHN0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzCSpkZXZpY2VfZGV0YWlsczsKKworCXN0cnVjdCB1cmIJKmluc3RhdF91cmI7CisJY2hhcgkJaW5zdGF0X2J1ZltJTlNUQVRfQlVGTEVOXTsKKworCS8qIFhYWCB0aGlzIG9uZSBwcm9iYWJseSB3aWxsIG5lZWQgYSBsb2NrICovCisJc3RydWN0IHVyYgkqZ2xvY29udF91cmI7CisJY2hhcgkJZ2xvY29udF9idWZbR0xPQ09OVF9CVUZMRU5dOworfTsKKworc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlIHsKKwkvKiBLZWVwIHRyYWNrIG9mIHdoaWNoIGlucHV0ICYgb3V0cHV0IGVuZHBvaW50cyB0byB1c2UgKi8KKwlpbnQJCWluX2ZsaXA7CisJaW50CQlvdXRfZmxpcDsKKworCS8qIEtlZXAgZHVwbGljYXRlIG9mIGRldmljZSBkZXRhaWxzIGluIGVhY2ggcG9ydAorCSAgIHN0cnVjdHVyZSBhcyB3ZWxsIC0gc2ltcGxpZmllcyBzb21lIG9mIHRoZQorCSAgIGNhbGxiYWNrIGZ1bmN0aW9ucyBldGMuICovCisJY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMJKmRldmljZV9kZXRhaWxzOworCisJLyogSW5wdXQgZW5kcG9pbnRzIGFuZCBidWZmZXIgZm9yIHRoaXMgcG9ydCAqLworCXN0cnVjdCB1cmIJKmluX3VyYnNbMl07CisJY2hhcgkJaW5fYnVmZmVyWzJdWzY0XTsKKwkvKiBPdXRwdXQgZW5kcG9pbnRzIGFuZCBidWZmZXIgZm9yIHRoaXMgcG9ydCAqLworCXN0cnVjdCB1cmIJKm91dF91cmJzWzJdOworCWNoYXIJCW91dF9idWZmZXJbMl1bNjRdOworCisJLyogSW5wdXQgYWNrIGVuZHBvaW50ICovCisJc3RydWN0IHVyYgkqaW5hY2tfdXJiOworCWNoYXIJCWluYWNrX2J1ZmZlclsxXTsKKworCS8qIE91dHB1dCBjb250cm9sIGVuZHBvaW50ICovCisJc3RydWN0IHVyYgkqb3V0Y29udF91cmI7CisJY2hhcgkJb3V0Y29udF9idWZmZXJbNjRdOworCisJLyogU2V0dGluZ3MgZm9yIHRoZSBwb3J0ICovCisJaW50CQliYXVkOworCWludAkJb2xkX2JhdWQ7CisJdW5zaWduZWQgaW50CWNmbGFnOworCXVuc2lnbmVkIGludAlvbGRfY2ZsYWc7CisJZW51bQkJe2Zsb3dfbm9uZSwgZmxvd19jdHMsIGZsb3dfeG9ufSBmbG93X2NvbnRyb2w7CisJaW50CQlydHNfc3RhdGU7CS8qIEhhbmRzaGFraW5nIHBpbnMgKG91dHB1dHMpICovCisJaW50CQlkdHJfc3RhdGU7CisJaW50CQljdHNfc3RhdGU7CS8qIEhhbmRzaGFraW5nIHBpbnMgKGlucHV0cykgKi8KKwlpbnQJCWRzcl9zdGF0ZTsKKwlpbnQJCWRjZF9zdGF0ZTsKKwlpbnQJCXJpX3N0YXRlOworCWludAkJYnJlYWtfb247CisKKwl1bnNpZ25lZCBsb25nCXR4X3N0YXJ0X3RpbWVbMl07CisJaW50CQlyZXNlbmRfY29udDsJLyogbmVlZCB0byByZXNlbmQgY29udHJvbCBwYWNrZXQgKi8KK307CisKKwkKKy8qIEluY2x1ZGUgS2V5c3BhbiBtZXNzYWdlIGhlYWRlcnMuICBBbGwgY3VycmVudCBLZXlzcGFuIEFkYXB0ZXJzCisgICBtYWtlIHVzZSBvZiBvbmUgb2YgZm91ciBtZXNzYWdlIGZvcm1hdHMgd2hpY2ggYXJlIHJlZmVycmVkCisgICB0byBhcyBVU0EtMjYsIFVTQS0yOCBhbmQgVVNBLTQ5LCBVU0EtOTAgYnkgS2V5c3BhbiBhbmQgd2l0aGluIHRoaXMgZHJpdmVyLiAqLworI2luY2x1ZGUgImtleXNwYW5fdXNhMjZtc2cuaCIKKyNpbmNsdWRlICJrZXlzcGFuX3VzYTI4bXNnLmgiCisjaW5jbHVkZSAia2V5c3Bhbl91c2E0OW1zZy5oIgorI2luY2x1ZGUgImtleXNwYW5fdXNhOTBtc2cuaCIKKwkKKworLyogRnVuY3Rpb25zIHVzZWQgYnkgbmV3IHVzYi1zZXJpYWwgY29kZS4gKi8KK3N0YXRpYyBpbnQgX19pbml0IGtleXNwYW5faW5pdCAodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmtleXNwYW5fcHJlX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfcHJlX2RldmljZV9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZrZXlzcGFuXzFwb3J0X2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfMXBvcnRfZGV2aWNlX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmtleXNwYW5fMnBvcnRfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF8ycG9ydF9kZXZpY2VfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3Rlcigma2V5c3Bhbl80cG9ydF9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkXzRwb3J0X2RldmljZV9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmtleXNwYW5fZHJpdmVyKTsKKwlpZiAocmV0dmFsKSAKKwkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOworCisJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCisJcmV0dXJuIDA7CitmYWlsZWRfdXNiX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigma2V5c3Bhbl80cG9ydF9kZXZpY2UpOworZmFpbGVkXzRwb3J0X2RldmljZV9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmtleXNwYW5fMnBvcnRfZGV2aWNlKTsKK2ZhaWxlZF8ycG9ydF9kZXZpY2VfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZrZXlzcGFuXzFwb3J0X2RldmljZSk7CitmYWlsZWRfMXBvcnRfZGV2aWNlX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigma2V5c3Bhbl9wcmVfZGV2aWNlKTsKK2ZhaWxlZF9wcmVfZGV2aWNlX3JlZ2lzdGVyOgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBrZXlzcGFuX2V4aXQgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIgKCZrZXlzcGFuX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgma2V5c3Bhbl9wcmVfZGV2aWNlKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZrZXlzcGFuXzFwb3J0X2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgma2V5c3Bhbl8ycG9ydF9kZXZpY2UpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmtleXNwYW5fNHBvcnRfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQoa2V5c3Bhbl9pbml0KTsKK21vZHVsZV9leGl0KGtleXNwYW5fZXhpdCk7CisKK3N0YXRpYyB2b2lkIGtleXNwYW5fcnhfdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7Cit9CisKKworc3RhdGljIHZvaWQga2V5c3Bhbl9yeF91bnRocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworfQorCisKK3N0YXRpYyB2b2lkIGtleXNwYW5fYnJlYWtfY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpCit7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlIAkqcF9wcml2OworCisgCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJaWYgKGJyZWFrX3N0YXRlID09IC0xKQorCQlwX3ByaXYtPmJyZWFrX29uID0gMTsKKwllbHNlCisJCXBfcHJpdi0+YnJlYWtfb24gPSAwOworCisJa2V5c3Bhbl9zZW5kX3NldHVwKHBvcnQsIDApOworfQorCisKK3N0YXRpYyB2b2lkIGtleXNwYW5fc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIAorCQkJCSAgICAgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQoreworCWludAkJCQliYXVkX3JhdGUsIGRldmljZV9wb3J0OworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZSAJKnBfcHJpdjsKKwljb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscwkqZF9kZXRhaWxzOworCXVuc2lnbmVkIGludCAJCQljZmxhZzsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOyAKKworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlkX2RldGFpbHMgPSBwX3ByaXYtPmRldmljZV9kZXRhaWxzOworCWNmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCWRldmljZV9wb3J0ID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vcjsKKworCS8qIEJhdWQgcmF0ZSBjYWxjdWxhdGlvbiB0YWtlcyBiYXVkIHJhdGUgYXMgYW4gaW50ZWdlcgorCSAgIHNvIG90aGVyIHJhdGVzIGNhbiBiZSBnZW5lcmF0ZWQgaWYgZGVzaXJlZC4gKi8KKwliYXVkX3JhdGUgPSB0dHlfZ2V0X2JhdWRfcmF0ZShwb3J0LT50dHkpOworCS8qIElmIG5vIG1hdGNoIG9yIGludmFsaWQsIGRvbid0IGNoYW5nZSAqLwkJCisJaWYgKGJhdWRfcmF0ZSA+PSAwCisJICAgICYmIGRfZGV0YWlscy0+Y2FsY3VsYXRlX2JhdWRfcmF0ZShiYXVkX3JhdGUsIGRfZGV0YWlscy0+YmF1ZGNsaywKKwkJCQlOVUxMLCBOVUxMLCBOVUxMLCBkZXZpY2VfcG9ydCkgPT0gS0VZU1BBTl9CQVVEX1JBVEVfT0spIHsKKwkJLyogRklYTUUgLSBtb3JlIHRvIGRvIGhlcmUgdG8gZW5zdXJlIHJhdGUgY2hhbmdlcyBjbGVhbmx5ICovCisJCXBfcHJpdi0+YmF1ZCA9IGJhdWRfcmF0ZTsKKwl9CisKKwkvKiBzZXQgQ1RTL1JUUyBoYW5kc2hha2UgZXRjLiAqLworCXBfcHJpdi0+Y2ZsYWcgPSBjZmxhZzsKKwlwX3ByaXYtPmZsb3dfY29udHJvbCA9IChjZmxhZyAmIENSVFNDVFMpPyBmbG93X2N0czogZmxvd19ub25lOworCisJa2V5c3Bhbl9zZW5kX3NldHVwKHBvcnQsIDApOworfQorCitzdGF0aWMgaW50IGtleXNwYW5fdGlvY21nZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJdW5zaWduZWQgaW50CQkJdmFsdWU7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlIAkqcF9wcml2OworCisJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQorCXZhbHVlID0gKChwX3ByaXYtPnJ0c19zdGF0ZSkgPyBUSU9DTV9SVFMgOiAwKSB8CisJCSgocF9wcml2LT5kdHJfc3RhdGUpID8gVElPQ01fRFRSIDogMCkgfAorCQkoKHBfcHJpdi0+Y3RzX3N0YXRlKSA/IFRJT0NNX0NUUyA6IDApIHwKKwkJKChwX3ByaXYtPmRzcl9zdGF0ZSkgPyBUSU9DTV9EU1IgOiAwKSB8CisJCSgocF9wcml2LT5kY2Rfc3RhdGUpID8gVElPQ01fQ0FSIDogMCkgfAorCQkoKHBfcHJpdi0+cmlfc3RhdGUpID8gVElPQ01fUk5HIDogMCk7IAorCisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgaW50IGtleXNwYW5fdGlvY21zZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZSAJKnBfcHJpdjsKKworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkKKwlpZiAoc2V0ICYgVElPQ01fUlRTKQorCQlwX3ByaXYtPnJ0c19zdGF0ZSA9IDE7CisJaWYgKHNldCAmIFRJT0NNX0RUUikKKwkJcF9wcml2LT5kdHJfc3RhdGUgPSAxOworCisJaWYgKGNsZWFyICYgVElPQ01fUlRTKQorCQlwX3ByaXYtPnJ0c19zdGF0ZSA9IDA7CisJaWYgKGNsZWFyICYgVElPQ01fRFRSKQorCQlwX3ByaXYtPmR0cl9zdGF0ZSA9IDA7CisJa2V5c3Bhbl9zZW5kX3NldHVwKHBvcnQsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGtleXNwYW5faW9jdGwoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKKwkvKiBXcml0ZSBmdW5jdGlvbiBpcyBzaW1pbGFyIGZvciB0aGUgZm91ciBwcm90b2NvbHMgdXNlZAorCSAgIHdpdGggb25seSBhIG1pbm9yIGNoYW5nZSBmb3IgdXNhOTAgKHVzYTE5aHMpIHJlcXVpcmVkICovCitzdGF0aWMgaW50IGtleXNwYW5fd3JpdGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgCisJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlIAkqcF9wcml2OworCWNvbnN0IHN0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzCSpkX2RldGFpbHM7CisJaW50CQkJCWZsaXA7CisJaW50IAkJCQlsZWZ0LCB0b2RvOworCXN0cnVjdCB1cmIJCQkqdGhpc191cmI7CisgCWludCAJCQkJZXJyLCBtYXhEYXRhTGVuLCBkYXRhT2Zmc2V0OworCisJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWRfZGV0YWlscyA9IHBfcHJpdi0+ZGV2aWNlX2RldGFpbHM7CisKKwlpZiAoZF9kZXRhaWxzLT5tc2dfZm9ybWF0ID09IG1zZ191c2E5MCkgeworICAgCQltYXhEYXRhTGVuID0gNjQ7CisJCWRhdGFPZmZzZXQgPSAwOworCX0gZWxzZSB7CisJCW1heERhdGFMZW4gPSA2MzsKKwkJZGF0YU9mZnNldCA9IDE7CisJfQorCQorCWRiZygiJXMgLSBmb3IgcG9ydCAlZCAoJWQgY2hhcnMpLCBmbGlwPSVkIiwKKwkgICAgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIGNvdW50LCBwX3ByaXYtPm91dF9mbGlwKTsKKworCWZvciAobGVmdCA9IGNvdW50OyBsZWZ0ID4gMDsgbGVmdCAtPSB0b2RvKSB7CisJCXRvZG8gPSBsZWZ0OworCQlpZiAodG9kbyA+IG1heERhdGFMZW4pCisJCQl0b2RvID0gbWF4RGF0YUxlbjsKKworCQlmbGlwID0gcF9wcml2LT5vdXRfZmxpcDsKKwkKKwkJLyogQ2hlY2sgd2UgaGF2ZSBhIHZhbGlkIHVyYi9lbmRwb2ludCBiZWZvcmUgd2UgdXNlIGl0Li4uICovCisJCWlmICgodGhpc191cmIgPSBwX3ByaXYtPm91dF91cmJzW2ZsaXBdKSA9PSBOVUxMKSB7CisJCQkvKiBubyBidWxrIG91dCwgc28gcmV0dXJuIDAgYnl0ZXMgd3JpdHRlbiAqLworCQkJZGJnKCIlcyAtIG5vIG91dHB1dCB1cmIgOigiLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuIGNvdW50OworCQl9CisKKwkJZGJnKCIlcyAtIGVuZHBvaW50ICVkIGZsaXAgJWQiLCBfX0ZVTkNUSU9OX18sIHVzYl9waXBlZW5kcG9pbnQodGhpc191cmItPnBpcGUpLCBmbGlwKTsKKworCQlpZiAodGhpc191cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJCWlmICh0aGlzX3VyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfQVNZTkNfVU5MSU5LKQorCQkJCWJyZWFrOworCQkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHBfcHJpdi0+dHhfc3RhcnRfdGltZVtmbGlwXSArIDEwICogSFopKQorCQkJCWJyZWFrOworCQkJdGhpc191cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9BU1lOQ19VTkxJTks7CisJCQl1c2JfdW5saW5rX3VyYih0aGlzX3VyYik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIEZpcnN0IGJ5dGUgaW4gYnVmZmVyIGlzICJsYXN0IGZsYWciIChleGNlcHQgZm9yIHVzYTE5aHgpIC0gdW51c2VkIHNvCisJCSAgIGZvciBub3cgc28gc2V0IHRvIHplcm8gKi8KKwkJKChjaGFyICopdGhpc191cmItPnRyYW5zZmVyX2J1ZmZlcilbMF0gPSAwOworCisJCW1lbWNweSAodGhpc191cmItPnRyYW5zZmVyX2J1ZmZlciArIGRhdGFPZmZzZXQsIGJ1ZiwgdG9kbyk7CisJCWJ1ZiArPSB0b2RvOworCisJCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBidWxrIHBvcnQgKi8KKwkJdGhpc191cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSB0b2RvICsgZGF0YU9mZnNldDsKKworCQl0aGlzX3VyYi0+dHJhbnNmZXJfZmxhZ3MgJj0gflVSQl9BU1lOQ19VTkxJTks7CisJCXRoaXNfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwkJaWYgKChlcnIgPSB1c2Jfc3VibWl0X3VyYih0aGlzX3VyYiwgR0ZQX0FUT01JQykpICE9IDApIHsKKwkJCWRiZygidXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkICglZCkiLCBlcnIpOworCQl9CisJCXBfcHJpdi0+dHhfc3RhcnRfdGltZVtmbGlwXSA9IGppZmZpZXM7CisKKwkJLyogRmxpcCBmb3IgbmV4dCB0aW1lIGlmIHVzYTI2IG9yIHVzYTI4IGludGVyZmFjZQorCQkgICAobm90IHVzZWQgb24gdXNhNDkpICovCisJCXBfcHJpdi0+b3V0X2ZsaXAgPSAoZmxpcCArIDEpICYgZF9kZXRhaWxzLT5vdXRkYXRfZW5kcF9mbGlwOworCX0KKworCXJldHVybiBjb3VudCAtIGxlZnQ7Cit9CisKK3N0YXRpYyB2b2lkCXVzYTI2X2luZGF0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50CQkJaSwgZXJyOworCWludAkJCWVuZHBvaW50OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQJKnBvcnQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QJKnR0eTsKKwl1bnNpZ25lZCBjaGFyIAkJKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsgCisKKwllbmRwb2ludCA9IHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyBzdGF0dXM6ICV4IG9uIGVuZHBvaW50ICVkLiIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzLCBlbmRwb2ludCk7CisJCXJldHVybjsKKwl9CisKKwlwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OworCXR0eSA9IHBvcnQtPnR0eTsKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCS8qIDB4ODAgYml0IGlzIGVycm9yIGZsYWcgKi8KKwkJaWYgKChkYXRhWzBdICYgMHg4MCkgPT0gMCkgeworCQkJLyogbm8gZXJyb3JzIG9uIGluZGl2aWR1YWwgYnl0ZXMsIG9ubHkgcG9zc2libGUgb3ZlcnJ1biBlcnIqLworCQkJaWYgKGRhdGFbMF0gJiBSWEVSUk9SX09WRVJSVU4pCisJCQkJCWVyciA9IFRUWV9PVkVSUlVOOworCQkJZWxzZSBlcnIgPSAwOworCQkJZm9yIChpID0gMTsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aCA7ICsraSkgeworCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgZXJyKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIHNvbWUgYnl0ZXMgaGFkIGVycm9ycywgZXZlcnkgYnl0ZSBoYXMgc3RhdHVzICovCisJCQlkYmcoIiVzIC0gUlggZXJyb3IhISEhIiwgX19GVU5DVElPTl9fKTsKKwkJCWZvciAoaSA9IDA7IGkgKyAxIDwgdXJiLT5hY3R1YWxfbGVuZ3RoOyBpICs9IDIpIHsKKwkJCQlpbnQgc3RhdCA9IGRhdGFbaV0sIGZsYWcgPSAwOworCQkJCWlmIChzdGF0ICYgUlhFUlJPUl9PVkVSUlVOKQorCQkJCQlmbGFnIHw9IFRUWV9PVkVSUlVOOworCQkJCWlmIChzdGF0ICYgUlhFUlJPUl9GUkFNSU5HKQorCQkJCQlmbGFnIHw9IFRUWV9GUkFNRTsKKwkJCQlpZiAoc3RhdCAmIFJYRVJST1JfUEFSSVRZKQorCQkJCQlmbGFnIHw9IFRUWV9QQVJJVFk7CisJCQkJLyogWFhYIHNob3VsZCBoYW5kbGUgYnJlYWsgKDB4MTApICovCisJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2krMV0sIGZsYWcpOworCQkJfQorCQl9CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJfQorCQkJCQorCQkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCisJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlpZiAocG9ydC0+b3Blbl9jb3VudCkKKwkJaWYgKChlcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSAhPSAwKSB7CisJCQlkYmcoIiVzIC0gcmVzdWJtaXQgcmVhZCB1cmIgZmFpbGVkLiAoJWQpIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQl9CisJcmV0dXJuOworfQorCisgCS8qIE91dGRhdCBoYW5kbGluZyBpcyBjb21tb24gZm9yIGFsbCBkZXZpY2VzICovCitzdGF0aWMgdm9pZAl1c2EyeF9vdXRkYXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZSAqcF9wcml2OworCisJcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHVyYi0+Y29udGV4dDsKKwlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJZGJnICgiJXMgLSB1cmIgJWQiLCBfX0ZVTkNUSU9OX18sIHVyYiA9PSBwX3ByaXYtPm91dF91cmJzWzFdKTsgCisKKwlpZiAocG9ydC0+b3Blbl9jb3VudCkKKwkJc2NoZWR1bGVfd29yaygmcG9ydC0+d29yayk7Cit9CisKK3N0YXRpYyB2b2lkCXVzYTI2X2luYWNrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOyAKKwkKK30KKworc3RhdGljIHZvaWQJdXNhMjZfb3V0Y29udF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlICpwX3ByaXY7CisKKwlwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWlmIChwX3ByaXYtPnJlc2VuZF9jb250KSB7CisJCWRiZyAoIiVzIC0gc2VuZGluZyBzZXR1cCIsIF9fRlVOQ1RJT05fXyk7IAorCQlrZXlzcGFuX3VzYTI2X3NlbmRfc2V0dXAocG9ydC0+c2VyaWFsLCBwb3J0LCBwX3ByaXYtPnJlc2VuZF9jb250IC0gMSk7CisJfQorfQorCitzdGF0aWMgdm9pZAl1c2EyNl9pbnN0YXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBjaGFyIAkJCQkqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCBrZXlzcGFuX3VzYTI2X3BvcnRTdGF0dXNNZXNzYWdlCSptc2c7CisJc3RydWN0IHVzYl9zZXJpYWwJCQkqc2VyaWFsOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQJCQkqcG9ydDsKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUJIAkqcF9wcml2OworCWludCBvbGRfZGNkX3N0YXRlLCBlcnI7CisKKwlzZXJpYWwgPSAoc3RydWN0IHVzYl9zZXJpYWwgKikgdXJiLT5jb250ZXh0OworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHN0YXR1czogJXgiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoICE9IDkpIHsKKwkJZGJnKCIlcyAtICVkIGJ5dGUgcmVwb3J0Pz8iLCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltc2cgPSAoc3RydWN0IGtleXNwYW5fdXNhMjZfcG9ydFN0YXR1c01lc3NhZ2UgKilkYXRhOworCisjaWYgMAorCWRiZygiJXMgLSBwb3J0IHN0YXR1czogcG9ydCAlZCBjdHMgJWQgZGNkICVkIGRzciAlZCByaSAlZCB0b2ZmICVkIHR4b2ZmICVkIHJ4ZW4gJWQgY3IgJWQiLAorCSAgICBfX0ZVTkNUSU9OX18sIG1zZy0+cG9ydCwgbXNnLT5oc2tpYV9jdHMsIG1zZy0+Z3BpYV9kY2QsIG1zZy0+ZHNyLCBtc2ctPnJpLCBtc2ctPl90eE9mZiwKKwkgICAgbXNnLT5fdHhYb2ZmLCBtc2ctPnJ4RW5hYmxlZCwgbXNnLT5jb250cm9sUmVzcG9uc2UpOworI2VuZGlmCisKKwkvKiBOb3cgZG8gc29tZXRoaW5nIHVzZWZ1bCB3aXRoIHRoZSBkYXRhICovCisKKworCS8qIENoZWNrIHBvcnQgbnVtYmVyIGZyb20gbWVzc2FnZSBhbmQgcmV0cmlldmUgcHJpdmF0ZSBkYXRhICovCQorCWlmIChtc2ctPnBvcnQgPj0gc2VyaWFsLT5udW1fcG9ydHMpIHsKKwkJZGJnICgiJXMgLSBVbmV4cGVjdGVkIHBvcnQgbnVtYmVyICVkIiwgX19GVU5DVElPTl9fLCBtc2ctPnBvcnQpOworCQlnb3RvIGV4aXQ7CisJfQorCXBvcnQgPSBzZXJpYWwtPnBvcnRbbXNnLT5wb3J0XTsKKwlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJCisJLyogVXBkYXRlIGhhbmRzaGFraW5nIHBpbiBzdGF0ZSBpbmZvcm1hdGlvbiAqLworCW9sZF9kY2Rfc3RhdGUgPSBwX3ByaXYtPmRjZF9zdGF0ZTsKKwlwX3ByaXYtPmN0c19zdGF0ZSA9ICgobXNnLT5oc2tpYV9jdHMpID8gMSA6IDApOworCXBfcHJpdi0+ZHNyX3N0YXRlID0gKChtc2ctPmRzcikgPyAxIDogMCk7CisJcF9wcml2LT5kY2Rfc3RhdGUgPSAoKG1zZy0+Z3BpYV9kY2QpID8gMSA6IDApOworCXBfcHJpdi0+cmlfc3RhdGUgPSAoKG1zZy0+cmkpID8gMSA6IDApOworCisJaWYgKHBvcnQtPnR0eSAmJiAhQ19DTE9DQUwocG9ydC0+dHR5KQorCSAgICAmJiBvbGRfZGNkX3N0YXRlICE9IHBfcHJpdi0+ZGNkX3N0YXRlKSB7CisJCWlmIChvbGRfZGNkX3N0YXRlKQorCQkJdHR5X2hhbmd1cChwb3J0LT50dHkpOworCQkvKiAgZWxzZSAqLworCQkvKgl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBfcHJpdi0+b3Blbl93YWl0KTsgKi8KKwl9CisJCisJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLworCXVyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisJaWYgKChlcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSAhPSAwKSB7CisJCWRiZygiJXMgLSByZXN1Ym1pdCByZWFkIHVyYiBmYWlsZWQuICglZCkiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJfQorZXhpdDogOworfQorCitzdGF0aWMgdm9pZAl1c2EyNl9nbG9jb250X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCQorfQorCisKK3N0YXRpYyB2b2lkIHVzYTI4X2luZGF0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50ICAgICAgICAgICAgICAgICAgICAgaSwgZXJyOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgICpwb3J0OworCXN0cnVjdCB0dHlfc3RydWN0ICAgICAgICp0dHk7CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgKmRhdGE7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlICAgICAgICAgICAgICpwX3ByaXY7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwlpZiAodXJiICE9IHBfcHJpdi0+aW5fdXJic1twX3ByaXYtPmluX2ZsaXBdKQorCQlyZXR1cm47CisKKwlkbyB7CisJCWlmICh1cmItPnN0YXR1cykgeworCQkJZGJnKCIlcyAtIG5vbnplcm8gc3RhdHVzOiAleCBvbiBlbmRwb2ludCAlZC4iLAorCQkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSk7CisJCQlyZXR1cm47CisJCX0KKworCQlwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OworCQlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJCWRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKworCQl0dHkgPSBwb3J0LT50dHk7CisJCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCB1cmItPmFjdHVhbF9sZW5ndGggOyArK2kpIHsKKwkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIDApOworCQkJfQorCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJfQorCisJCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgKi8KKwkJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwkJaWYgKHBvcnQtPm9wZW5fY291bnQpCisJCQlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpICE9IDApIHsKKwkJCQlkYmcoIiVzIC0gcmVzdWJtaXQgcmVhZCB1cmIgZmFpbGVkLiAoJWQpIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQkJfQorCQlwX3ByaXYtPmluX2ZsaXAgXj0gMTsKKworCQl1cmIgPSBwX3ByaXYtPmluX3VyYnNbcF9wcml2LT5pbl9mbGlwXTsKKwl9IHdoaWxlICh1cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpOworfQorCitzdGF0aWMgdm9pZAl1c2EyOF9pbmFja19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKK30KKworc3RhdGljIHZvaWQJdXNhMjhfb3V0Y29udF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlICpwX3ByaXY7CisKKwlwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWlmIChwX3ByaXYtPnJlc2VuZF9jb250KSB7CisJCWRiZyAoIiVzIC0gc2VuZGluZyBzZXR1cCIsIF9fRlVOQ1RJT05fXyk7CisJCWtleXNwYW5fdXNhMjhfc2VuZF9zZXR1cChwb3J0LT5zZXJpYWwsIHBvcnQsIHBfcHJpdi0+cmVzZW5kX2NvbnQgLSAxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCXVzYTI4X2luc3RhdF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludAkJCQkJZXJyOworCXVuc2lnbmVkIGNoYXIgCQkJCSpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3RydWN0IGtleXNwYW5fdXNhMjhfcG9ydFN0YXR1c01lc3NhZ2UJKm1zZzsKKwlzdHJ1Y3QgdXNiX3NlcmlhbAkJCSpzZXJpYWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkJCSpwb3J0OworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZQkgCSpwX3ByaXY7CisJaW50IG9sZF9kY2Rfc3RhdGU7CisKKwlzZXJpYWwgPSAoc3RydWN0IHVzYl9zZXJpYWwgKikgdXJiLT5jb250ZXh0OworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHN0YXR1czogJXgiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggIT0gc2l6ZW9mKHN0cnVjdCBrZXlzcGFuX3VzYTI4X3BvcnRTdGF0dXNNZXNzYWdlKSkgeworCQlkYmcoIiVzIC0gYmFkIGxlbmd0aCAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJZ290byBleGl0OworCX0KKworCS8qZGJnKCIlcyAleCAleCAleCAleCAleCAleCAleCAleCAleCAleCAleCAleCIsIF9fRlVOQ1RJT05fXworCSAgICBkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdLCBkYXRhWzRdLCBkYXRhWzVdLAorCSAgICBkYXRhWzZdLCBkYXRhWzddLCBkYXRhWzhdLCBkYXRhWzldLCBkYXRhWzEwXSwgZGF0YVsxMV0pOyovCisJCisJCS8qIE5vdyBkbyBzb21ldGhpbmcgdXNlZnVsIHdpdGggdGhlIGRhdGEgKi8KKwltc2cgPSAoc3RydWN0IGtleXNwYW5fdXNhMjhfcG9ydFN0YXR1c01lc3NhZ2UgKilkYXRhOworCisKKwkJLyogQ2hlY2sgcG9ydCBudW1iZXIgZnJvbSBtZXNzYWdlIGFuZCByZXRyaWV2ZSBwcml2YXRlIGRhdGEgKi8JCisJaWYgKG1zZy0+cG9ydCA+PSBzZXJpYWwtPm51bV9wb3J0cykgeworCQlkYmcgKCIlcyAtIFVuZXhwZWN0ZWQgcG9ydCBudW1iZXIgJWQiLCBfX0ZVTkNUSU9OX18sIG1zZy0+cG9ydCk7CisJCWdvdG8gZXhpdDsKKwl9CisJcG9ydCA9IHNlcmlhbC0+cG9ydFttc2ctPnBvcnRdOworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkKKwkvKiBVcGRhdGUgaGFuZHNoYWtpbmcgcGluIHN0YXRlIGluZm9ybWF0aW9uICovCisJb2xkX2RjZF9zdGF0ZSA9IHBfcHJpdi0+ZGNkX3N0YXRlOworCXBfcHJpdi0+Y3RzX3N0YXRlID0gKChtc2ctPmN0cykgPyAxIDogMCk7CisJcF9wcml2LT5kc3Jfc3RhdGUgPSAoKG1zZy0+ZHNyKSA/IDEgOiAwKTsKKwlwX3ByaXYtPmRjZF9zdGF0ZSA9ICgobXNnLT5kY2QpID8gMSA6IDApOworCXBfcHJpdi0+cmlfc3RhdGUgPSAoKG1zZy0+cmkpID8gMSA6IDApOworCisJaWYgKHBvcnQtPnR0eSAmJiAhQ19DTE9DQUwocG9ydC0+dHR5KQorCSAgICAmJiBvbGRfZGNkX3N0YXRlICE9IHBfcHJpdi0+ZGNkX3N0YXRlKSB7CisJCWlmIChvbGRfZGNkX3N0YXRlKQorCQkJdHR5X2hhbmd1cChwb3J0LT50dHkpOworCQkvKiAgZWxzZSAqLworCQkvKgl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBfcHJpdi0+b3Blbl93YWl0KTsgKi8KKwl9CisKKwkJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLworCXVyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisJaWYgKChlcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSAhPSAwKSB7CisJCWRiZygiJXMgLSByZXN1Ym1pdCByZWFkIHVyYiBmYWlsZWQuICglZCkiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJfQorZXhpdDogOworfQorCitzdGF0aWMgdm9pZAl1c2EyOF9nbG9jb250X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworfQorCisKK3N0YXRpYyB2b2lkCXVzYTQ5X2dsb2NvbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlICpwX3ByaXY7CisJaW50IGk7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlzZXJpYWwgPSAoc3RydWN0IHVzYl9zZXJpYWwgKikgdXJiLT5jb250ZXh0OworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCQlpZiAocF9wcml2LT5yZXNlbmRfY29udCkgeworCQkJZGJnICgiJXMgLSBzZW5kaW5nIHNldHVwIiwgX19GVU5DVElPTl9fKTsgCisJCQlrZXlzcGFuX3VzYTQ5X3NlbmRfc2V0dXAoc2VyaWFsLCBwb3J0LCBwX3ByaXYtPnJlc2VuZF9jb250IC0gMSk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworCS8qIFRoaXMgaXMgYWN0dWFsbHkgY2FsbGVkIGdsb3N0YXQgaW4gdGhlIEtleXNwYW4KKwkgICBkb2NvICovCitzdGF0aWMgdm9pZAl1c2E0OV9pbnN0YXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQJCQkJCWVycjsKKwl1bnNpZ25lZCBjaGFyIAkJCQkqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCBrZXlzcGFuX3VzYTQ5X3BvcnRTdGF0dXNNZXNzYWdlCSptc2c7CisJc3RydWN0IHVzYl9zZXJpYWwJCQkqc2VyaWFsOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQJCQkqcG9ydDsKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUJIAkqcF9wcml2OworCWludCBvbGRfZGNkX3N0YXRlOworCisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJc2VyaWFsID0gKHN0cnVjdCB1c2Jfc2VyaWFsICopIHVyYi0+Y29udGV4dDsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyBzdGF0dXM6ICV4IiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoICE9IHNpemVvZihzdHJ1Y3Qga2V5c3Bhbl91c2E0OV9wb3J0U3RhdHVzTWVzc2FnZSkpIHsKKwkJZGJnKCIlcyAtIGJhZCBsZW5ndGggJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKmRiZygiICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4IiwgX19GVU5DVElPTl9fLCAKKwkgICAgZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSwgZGF0YVszXSwgZGF0YVs0XSwgZGF0YVs1XSwKKwkgICAgZGF0YVs2XSwgZGF0YVs3XSwgZGF0YVs4XSwgZGF0YVs5XSwgZGF0YVsxMF0pOyovCisJCisJCS8qIE5vdyBkbyBzb21ldGhpbmcgdXNlZnVsIHdpdGggdGhlIGRhdGEgKi8KKwltc2cgPSAoc3RydWN0IGtleXNwYW5fdXNhNDlfcG9ydFN0YXR1c01lc3NhZ2UgKilkYXRhOworCisJCS8qIENoZWNrIHBvcnQgbnVtYmVyIGZyb20gbWVzc2FnZSBhbmQgcmV0cmlldmUgcHJpdmF0ZSBkYXRhICovCQorCWlmIChtc2ctPnBvcnROdW1iZXIgPj0gc2VyaWFsLT5udW1fcG9ydHMpIHsKKwkJZGJnICgiJXMgLSBVbmV4cGVjdGVkIHBvcnQgbnVtYmVyICVkIiwgX19GVU5DVElPTl9fLCBtc2ctPnBvcnROdW1iZXIpOworCQlnb3RvIGV4aXQ7CisJfQorCXBvcnQgPSBzZXJpYWwtPnBvcnRbbXNnLT5wb3J0TnVtYmVyXTsKKwlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJCisJLyogVXBkYXRlIGhhbmRzaGFraW5nIHBpbiBzdGF0ZSBpbmZvcm1hdGlvbiAqLworCW9sZF9kY2Rfc3RhdGUgPSBwX3ByaXYtPmRjZF9zdGF0ZTsKKwlwX3ByaXYtPmN0c19zdGF0ZSA9ICgobXNnLT5jdHMpID8gMSA6IDApOworCXBfcHJpdi0+ZHNyX3N0YXRlID0gKChtc2ctPmRzcikgPyAxIDogMCk7CisJcF9wcml2LT5kY2Rfc3RhdGUgPSAoKG1zZy0+ZGNkKSA/IDEgOiAwKTsKKwlwX3ByaXYtPnJpX3N0YXRlID0gKChtc2ctPnJpKSA/IDEgOiAwKTsKKworCWlmIChwb3J0LT50dHkgJiYgIUNfQ0xPQ0FMKHBvcnQtPnR0eSkKKwkgICAgJiYgb2xkX2RjZF9zdGF0ZSAhPSBwX3ByaXYtPmRjZF9zdGF0ZSkgeworCQlpZiAob2xkX2RjZF9zdGF0ZSkKKwkJCXR0eV9oYW5ndXAocG9ydC0+dHR5KTsKKwkJLyogIGVsc2UgKi8KKwkJLyoJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwX3ByaXYtPm9wZW5fd2FpdCk7ICovCisJfQorCisJCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgKi8KKwl1cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCisJaWYgKChlcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSAhPSAwKSB7CisJCWRiZygiJXMgLSByZXN1Ym1pdCByZWFkIHVyYiBmYWlsZWQuICglZCkiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJfQorZXhpdDoJOworfQorCitzdGF0aWMgdm9pZAl1c2E0OV9pbmFja19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKK30KKworc3RhdGljIHZvaWQJdXNhNDlfaW5kYXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQJCQlpLCBlcnI7CisJaW50CQkJZW5kcG9pbnQ7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkqcG9ydDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdAkqdHR5OworCXVuc2lnbmVkIGNoYXIgCQkqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJZW5kcG9pbnQgPSB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSk7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gc3RhdHVzOiAleCBvbiBlbmRwb2ludCAlZC4iLCBfX0ZVTkNUSU9OX18sCisJCSAgICB1cmItPnN0YXR1cywgZW5kcG9pbnQpOworCQlyZXR1cm47CisJfQorCisJcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHVyYi0+Y29udGV4dDsKKwl0dHkgPSBwb3J0LT50dHk7CisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQkvKiAweDgwIGJpdCBpcyBlcnJvciBmbGFnICovCisJCWlmICgoZGF0YVswXSAmIDB4ODApID09IDApIHsKKwkJCS8qIG5vIGVycm9yIG9uIGFueSBieXRlICovCisJCQlmb3IgKGkgPSAxOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoIDsgKytpKSB7CisJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCAwKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIHNvbWUgYnl0ZXMgaGFkIGVycm9ycywgZXZlcnkgYnl0ZSBoYXMgc3RhdHVzICovCisJCQlmb3IgKGkgPSAwOyBpICsgMSA8IHVyYi0+YWN0dWFsX2xlbmd0aDsgaSArPSAyKSB7CisJCQkJaW50IHN0YXQgPSBkYXRhW2ldLCBmbGFnID0gMDsKKwkJCQlpZiAoc3RhdCAmIFJYRVJST1JfT1ZFUlJVTikKKwkJCQkJZmxhZyB8PSBUVFlfT1ZFUlJVTjsKKwkJCQlpZiAoc3RhdCAmIFJYRVJST1JfRlJBTUlORykKKwkJCQkJZmxhZyB8PSBUVFlfRlJBTUU7CisJCQkJaWYgKHN0YXQgJiBSWEVSUk9SX1BBUklUWSkKKwkJCQkJZmxhZyB8PSBUVFlfUEFSSVRZOworCQkJCS8qIFhYWCBzaG91bGQgaGFuZGxlIGJyZWFrICgweDEwKSAqLworCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpKzFdLCBmbGFnKTsKKwkJCX0KKwkJfQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCX0KKwkJCQkKKwkJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLworCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJaWYgKHBvcnQtPm9wZW5fY291bnQpCisJCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgIT0gMCkgeworCQkJZGJnKCIlcyAtIHJlc3VibWl0IHJlYWQgdXJiIGZhaWxlZC4gKCVkKSIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJfQorfQorCisvKiBub3QgdXNlZCwgdXNhLTQ5IGRvZXNuJ3QgaGF2ZSBwZXItcG9ydCBjb250cm9sIGVuZHBvaW50cyAqLworc3RhdGljIHZvaWQJdXNhNDlfb3V0Y29udF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKK30KKworc3RhdGljIHZvaWQJdXNhOTBfaW5kYXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQJCQlpLCBlcnI7CisJaW50CQkJZW5kcG9pbnQ7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkqcG9ydDsKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUJIAkqcF9wcml2OworCXN0cnVjdCB0dHlfc3RydWN0CSp0dHk7CisJdW5zaWduZWQgY2hhciAJCSpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7IAorCisJZW5kcG9pbnQgPSB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSk7CisKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyBzdGF0dXM6ICV4IG9uIGVuZHBvaW50ICVkLiIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzLCBlbmRwb2ludCk7CisJCXJldHVybjsKKwl9CisKKwlwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCXR0eSA9IHBvcnQtPnR0eTsKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCisJCS8qIGlmIGN1cnJlbnQgbW9kZSBpcyBETUEsIGxvb2tzIGxpa2UgdXNhMjggZm9ybWF0CisJICAgCQlvdGhlcndpc2UgbG9va3MgbGlrZSB1c2EyNiBkYXRhIGZvcm1hdCAqLworCisJCWlmIChwX3ByaXYtPmJhdWQgPiA1NzYwMCkgeworCQkJZm9yIChpID0gMDsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aCA7ICsraSkgCisJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCAwKTsKKwkJfQorCQllbHNlIHsKKwkJCQorCQkJLyogMHg4MCBiaXQgaXMgZXJyb3IgZmxhZyAqLworCQkJaWYgKChkYXRhWzBdICYgMHg4MCkgPT0gMCkgeworCQkJCS8qIG5vIGVycm9ycyBvbiBpbmRpdmlkdWFsIGJ5dGVzLCBvbmx5IHBvc3NpYmxlIG92ZXJydW4gZXJyKi8KKwkJCQlpZiAoZGF0YVswXSAmIFJYRVJST1JfT1ZFUlJVTikKKwkJCQkJCWVyciA9IFRUWV9PVkVSUlVOOworCQkJCWVsc2UgZXJyID0gMDsKKwkJCQlmb3IgKGkgPSAxOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoIDsgKytpKSAKKwkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCBlcnIpOworCQkJCisJCQl9IAorCQkJZWxzZSB7CisJCQkvKiBzb21lIGJ5dGVzIGhhZCBlcnJvcnMsIGV2ZXJ5IGJ5dGUgaGFzIHN0YXR1cyAqLworCQkJCWRiZygiJXMgLSBSWCBlcnJvciEhISEiLCBfX0ZVTkNUSU9OX18pOworCQkJCWZvciAoaSA9IDA7IGkgKyAxIDwgdXJiLT5hY3R1YWxfbGVuZ3RoOyBpICs9IDIpIHsKKwkJCQkJaW50IHN0YXQgPSBkYXRhW2ldLCBmbGFnID0gMDsKKwkJCQkJaWYgKHN0YXQgJiBSWEVSUk9SX09WRVJSVU4pCisJCQkJCQlmbGFnIHw9IFRUWV9PVkVSUlVOOworCQkJCQlpZiAoc3RhdCAmIFJYRVJST1JfRlJBTUlORykKKwkJCQkJCWZsYWcgfD0gVFRZX0ZSQU1FOworCQkJCQlpZiAoc3RhdCAmIFJYRVJST1JfUEFSSVRZKQorCQkJCQkJZmxhZyB8PSBUVFlfUEFSSVRZOworCQkJCQkvKiBYWFggc2hvdWxkIGhhbmRsZSBicmVhayAoMHgxMCkgKi8KKwkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2krMV0sIGZsYWcpOworCQkJCX0KKwkJCX0KKwkJfQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCX0KKwkJCQkKKwkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCisJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlpZiAocG9ydC0+b3Blbl9jb3VudCkKKwkJaWYgKChlcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSAhPSAwKSB7CisJCQlkYmcoIiVzIC0gcmVzdWJtaXQgcmVhZCB1cmIgZmFpbGVkLiAoJWQpIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQl9CisJcmV0dXJuOworfQorCisKK3N0YXRpYyB2b2lkCXVzYTkwX2luc3RhdF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGNoYXIgCQkJCSpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3RydWN0IGtleXNwYW5fdXNhOTBfcG9ydFN0YXR1c01lc3NhZ2UJKm1zZzsKKwlzdHJ1Y3QgdXNiX3NlcmlhbAkJCSpzZXJpYWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkJCSpwb3J0OworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZQkgCSpwX3ByaXY7CisJaW50IG9sZF9kY2Rfc3RhdGUsIGVycjsKKworCXNlcmlhbCA9IChzdHJ1Y3QgdXNiX3NlcmlhbCAqKSB1cmItPmNvbnRleHQ7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gc3RhdHVzOiAleCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPCAxNCkgeworCQlkYmcoIiVzIC0gJWQgYnl0ZSByZXBvcnQ/PyIsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJZ290byBleGl0OworCX0KKworCW1zZyA9IChzdHJ1Y3Qga2V5c3Bhbl91c2E5MF9wb3J0U3RhdHVzTWVzc2FnZSAqKWRhdGE7CisKKwkvKiBOb3cgZG8gc29tZXRoaW5nIHVzZWZ1bCB3aXRoIHRoZSBkYXRhICovCisKKwlwb3J0ID0gc2VyaWFsLT5wb3J0WzBdOworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkKKwkvKiBVcGRhdGUgaGFuZHNoYWtpbmcgcGluIHN0YXRlIGluZm9ybWF0aW9uICovCisJb2xkX2RjZF9zdGF0ZSA9IHBfcHJpdi0+ZGNkX3N0YXRlOworCXBfcHJpdi0+Y3RzX3N0YXRlID0gKChtc2ctPmN0cykgPyAxIDogMCk7CisJcF9wcml2LT5kc3Jfc3RhdGUgPSAoKG1zZy0+ZHNyKSA/IDEgOiAwKTsKKwlwX3ByaXYtPmRjZF9zdGF0ZSA9ICgobXNnLT5kY2QpID8gMSA6IDApOworCXBfcHJpdi0+cmlfc3RhdGUgPSAoKG1zZy0+cmkpID8gMSA6IDApOworCisJaWYgKHBvcnQtPnR0eSAmJiAhQ19DTE9DQUwocG9ydC0+dHR5KQorCSAgICAmJiBvbGRfZGNkX3N0YXRlICE9IHBfcHJpdi0+ZGNkX3N0YXRlKSB7CisJCWlmIChvbGRfZGNkX3N0YXRlKQorCQkJdHR5X2hhbmd1cChwb3J0LT50dHkpOworCQkvKiAgZWxzZSAqLworCQkvKgl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBfcHJpdi0+b3Blbl93YWl0KTsgKi8KKwl9CisJCisJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLworCXVyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisJaWYgKChlcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSAhPSAwKSB7CisJCWRiZygiJXMgLSByZXN1Ym1pdCByZWFkIHVyYiBmYWlsZWQuICglZCkiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJfQorZXhpdDoKKwk7Cit9CisKK3N0YXRpYyB2b2lkCXVzYTkwX291dGNvbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZSAqcF9wcml2OworCisJcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHVyYi0+Y29udGV4dDsKKwlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlpZiAocF9wcml2LT5yZXNlbmRfY29udCkgeworCQlkYmcgKCIlcyAtIHNlbmRpbmcgc2V0dXAiLCBfX0ZVTkNUSU9OX18pOyAKKwkJa2V5c3Bhbl91c2E5MF9zZW5kX3NldHVwKHBvcnQtPnNlcmlhbCwgcG9ydCwgcF9wcml2LT5yZXNlbmRfY29udCAtIDEpOworCX0KK30KKworc3RhdGljIGludCBrZXlzcGFuX3dyaXRlX3Jvb20gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlCSpwX3ByaXY7CisJY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMJKmRfZGV0YWlsczsKKwlpbnQJCQkJZmxpcDsKKwlpbnQJCQkJZGF0YV9sZW47CisJc3RydWN0IHVyYgkJCSp0aGlzX3VyYjsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlkX2RldGFpbHMgPSBwX3ByaXYtPmRldmljZV9kZXRhaWxzOworCisJaWYgKGRfZGV0YWlscy0+bXNnX2Zvcm1hdCA9PSBtc2dfdXNhOTApCisgICAJCWRhdGFfbGVuID0gNjQ7CisJZWxzZQorCQlkYXRhX2xlbiA9IDYzOworCisJZmxpcCA9IHBfcHJpdi0+b3V0X2ZsaXA7CisKKwkvKiBDaGVjayBib3RoIGVuZHBvaW50cyB0byBzZWUgaWYgYW55IGFyZSBhdmFpbGFibGUuICovCisJaWYgKCh0aGlzX3VyYiA9IHBfcHJpdi0+b3V0X3VyYnNbZmxpcF0pICE9IE5VTEwpIHsKKwkJaWYgKHRoaXNfdXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKQorCQkJcmV0dXJuIChkYXRhX2xlbik7CisJCWZsaXAgPSAoZmxpcCArIDEpICYgZF9kZXRhaWxzLT5vdXRkYXRfZW5kcF9mbGlwOyAgICAgICAgCisJCWlmICgodGhpc191cmIgPSBwX3ByaXYtPm91dF91cmJzW2ZsaXBdKSAhPSBOVUxMKSAKKwkJCWlmICh0aGlzX3VyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykKKwkJCQlyZXR1cm4gKGRhdGFfbGVuKTsKKwl9CisJcmV0dXJuICgwKTsKK30KKworCitzdGF0aWMgaW50IGtleXNwYW5fY2hhcnNfaW5fYnVmZmVyIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXJldHVybiAoMCk7Cit9CisKKworc3RhdGljIGludCBrZXlzcGFuX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZSAJKnBfcHJpdjsKKwlzdHJ1Y3Qga2V5c3Bhbl9zZXJpYWxfcHJpdmF0ZSAJKnNfcHJpdjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAJCSpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMJKmRfZGV0YWlsczsKKwlpbnQJCQkJaSwgZXJyOworCWludAkJCQliYXVkX3JhdGUsIGRldmljZV9wb3J0OworCXN0cnVjdCB1cmIJCQkqdXJiOworCXVuc2lnbmVkIGludAkJCWNmbGFnOworCisJc19wcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlkX2RldGFpbHMgPSBwX3ByaXYtPmRldmljZV9kZXRhaWxzOworCQorCWRiZygiJXMgLSBwb3J0JWQuIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOyAKKworCS8qIFNldCBzb21lIHNhbmUgZGVmYXVsdHMgKi8KKwlwX3ByaXYtPnJ0c19zdGF0ZSA9IDE7CisJcF9wcml2LT5kdHJfc3RhdGUgPSAxOworCXBfcHJpdi0+YmF1ZCA9IDk2MDA7CisKKwkvKiBmb3JjZSBiYXVkIGFuZCBsY3IgdG8gYmUgc2V0IG9uIG9wZW4gKi8KKwlwX3ByaXYtPm9sZF9iYXVkID0gMDsKKwlwX3ByaXYtPm9sZF9jZmxhZyA9IDA7CisKKwlwX3ByaXYtPm91dF9mbGlwID0gMDsKKwlwX3ByaXYtPmluX2ZsaXAgPSAwOworCisJLyogUmVzZXQgbG93IGxldmVsIGRhdGEgdG9nZ2xlIGFuZCBzdGFydCByZWFkaW5nIGZyb20gZW5kcG9pbnRzICovCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlpZiAoKHVyYiA9IHBfcHJpdi0+aW5fdXJic1tpXSkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQl1cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCisJCS8qIG1ha2Ugc3VyZSBlbmRwb2ludCBkYXRhIHRvZ2dsZSBpcyBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgZGV2aWNlICovCisJCQorCQl1c2JfY2xlYXJfaGFsdCh1cmItPmRldiwgdXJiLT5waXBlKTsKKworCQlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCkpICE9IDApIHsKKwkJCWRiZygiJXMgLSBzdWJtaXQgdXJiICVkIGZhaWxlZCAoJWQpIiwgX19GVU5DVElPTl9fLCBpLCBlcnIpOworCQl9CisJfQorCisJLyogUmVzZXQgbG93IGxldmVsIGRhdGEgdG9nZ2xlIG9uIG91dCBlbmRwb2ludHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWlmICgodXJiID0gcF9wcml2LT5vdXRfdXJic1tpXSkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQl1cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCQkvKiB1c2Jfc2V0dG9nZ2xlKHVyYi0+ZGV2LCB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksIHVzYl9waXBlb3V0KHVyYi0+cGlwZSksIDApOyAqLworCX0KKworCS8qIGdldCB0aGUgdGVybWluYWwgY29uZmlnIGZvciB0aGUgc2V0dXAgbWVzc2FnZSBub3cgc28gd2UgZG9uJ3QgCisJICogbmVlZCB0byBzZW5kIDIgb2YgdGhlbSAqLworCisJY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJZGV2aWNlX3BvcnQgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yOworCisJLyogQmF1ZCByYXRlIGNhbGN1bGF0aW9uIHRha2VzIGJhdWQgcmF0ZSBhcyBhbiBpbnRlZ2VyCisJICAgc28gb3RoZXIgcmF0ZXMgY2FuIGJlIGdlbmVyYXRlZCBpZiBkZXNpcmVkLiAqLworCWJhdWRfcmF0ZSA9IHR0eV9nZXRfYmF1ZF9yYXRlKHBvcnQtPnR0eSk7CisJLyogSWYgbm8gbWF0Y2ggb3IgaW52YWxpZCwgbGVhdmUgYXMgZGVmYXVsdCAqLwkJCisJaWYgKGJhdWRfcmF0ZSA+PSAwCisJICAgICYmIGRfZGV0YWlscy0+Y2FsY3VsYXRlX2JhdWRfcmF0ZShiYXVkX3JhdGUsIGRfZGV0YWlscy0+YmF1ZGNsaywKKwkJCQlOVUxMLCBOVUxMLCBOVUxMLCBkZXZpY2VfcG9ydCkgPT0gS0VZU1BBTl9CQVVEX1JBVEVfT0spIHsKKwkJcF9wcml2LT5iYXVkID0gYmF1ZF9yYXRlOworCX0KKworCS8qIHNldCBDVFMvUlRTIGhhbmRzaGFrZSBldGMuICovCisJcF9wcml2LT5jZmxhZyA9IGNmbGFnOworCXBfcHJpdi0+Zmxvd19jb250cm9sID0gKGNmbGFnICYgQ1JUU0NUUyk/IGZsb3dfY3RzOiBmbG93X25vbmU7CisKKwlrZXlzcGFuX3NlbmRfc2V0dXAocG9ydCwgMSk7CisJLy9tZGVsYXkoMTAwKTsKKwkvL2tleXNwYW5fc2V0X3Rlcm1pb3MocG9ydCwgTlVMTCk7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RvcF91cmIoc3RydWN0IHVyYiAqdXJiKQoreworCWlmICh1cmIgJiYgdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgJj0gflVSQl9BU1lOQ19VTkxJTks7CisJCXVzYl9raWxsX3VyYih1cmIpOworCX0KK30KKworc3RhdGljIHZvaWQga2V5c3Bhbl9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQJCQlpOworCXN0cnVjdCB1c2Jfc2VyaWFsCSpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IGtleXNwYW5fc2VyaWFsX3ByaXZhdGUgCSpzX3ByaXY7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlIAkqcF9wcml2OworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisJc19wcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkKKwlwX3ByaXYtPnJ0c19zdGF0ZSA9IDA7CisJcF9wcml2LT5kdHJfc3RhdGUgPSAwOworCQorCWlmIChzZXJpYWwtPmRldikgeworCQlrZXlzcGFuX3NlbmRfc2V0dXAocG9ydCwgMik7CisJCS8qIHBpbG90LXhmZXIgc2VlbXMgdG8gd29yayBiZXN0IHdpdGggdGhpcyBkZWxheSAqLworCQltZGVsYXkoMTAwKTsKKwkJLy8ga2V5c3Bhbl9zZXRfdGVybWlvcyhwb3J0LCBOVUxMKTsKKwl9CisKKwkvKndoaWxlIChwX3ByaXYtPm91dGNvbnRfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCWRiZygiJXMgLSB1cmIgaW4gcHJvZ3Jlc3MiLCBfX0ZVTkNUSU9OX18pOworCX0qLworCisJcF9wcml2LT5vdXRfZmxpcCA9IDA7CisJcF9wcml2LT5pbl9mbGlwID0gMDsKKworCWlmIChzZXJpYWwtPmRldikgeworCQkvKiBTdG9wIHJlYWRpbmcvd3JpdGluZyB1cmJzICovCisJCXN0b3BfdXJiKHBfcHJpdi0+aW5hY2tfdXJiKTsKKwkJLyogc3RvcF91cmIocF9wcml2LT5vdXRjb250X3VyYik7ICovCisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCXN0b3BfdXJiKHBfcHJpdi0+aW5fdXJic1tpXSk7CisJCQlzdG9wX3VyYihwX3ByaXYtPm91dF91cmJzW2ldKTsKKwkJfQorCX0KKwlwb3J0LT50dHkgPSBOVUxMOworfQorCisKKwkvKiBkb3dubG9hZCB0aGUgZmlybXdhcmUgdG8gYSBwcmUtcmVudW1lcmF0aW9uIGRldmljZSAqLworc3RhdGljIGludCBrZXlzcGFuX2Zha2Vfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgCQkJCXJlc3BvbnNlOworCWNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkIAkqcmVjb3JkOworCWNoYXIJCQkJKmZ3X25hbWU7CisKKwlkYmcoIktleXNwYW4gc3RhcnR1cCB2ZXJzaW9uICUwNHggcHJvZHVjdCAlMDR4IiwKKwkgICAgbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSwKKwkgICAgbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisJCisJaWYgKChsZTE2X3RvX2NwdShzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpICYgMHg4MDAwKSAhPSAweDgwMDApIHsKKwkJZGJnKCJGaXJtd2FyZSBhbHJlYWR5IGxvYWRlZC4gIFF1aXR0aW5nLiIpOworCQlyZXR1cm4oMSk7CisJfQorCisJCS8qIFNlbGVjdCBmaXJtd2FyZSBpbWFnZSBvbiB0aGUgYmFzaXMgb2YgaWRQcm9kdWN0ICovCisJc3dpdGNoIChsZTE2X3RvX2NwdShzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKSB7CisJY2FzZSBrZXlzcGFuX3VzYTI4X3ByZV9wcm9kdWN0X2lkOgorCQlyZWNvcmQgPSAma2V5c3Bhbl91c2EyOF9maXJtd2FyZVswXTsKKwkJZndfbmFtZSA9ICJVU0EyOCI7CisJCWJyZWFrOworCisJY2FzZSBrZXlzcGFuX3VzYTI4eF9wcmVfcHJvZHVjdF9pZDoKKwkJcmVjb3JkID0gJmtleXNwYW5fdXNhMjh4X2Zpcm13YXJlWzBdOworCQlmd19uYW1lID0gIlVTQTI4WCI7CisJCWJyZWFrOworCisJY2FzZSBrZXlzcGFuX3VzYTI4eGFfcHJlX3Byb2R1Y3RfaWQ6CisJCXJlY29yZCA9ICZrZXlzcGFuX3VzYTI4eGFfZmlybXdhcmVbMF07CisJCWZ3X25hbWUgPSAiVVNBMjhYQSI7CisJCWJyZWFrOworCisJY2FzZSBrZXlzcGFuX3VzYTI4eGJfcHJlX3Byb2R1Y3RfaWQ6CisJCXJlY29yZCA9ICZrZXlzcGFuX3VzYTI4eGJfZmlybXdhcmVbMF07CisJCWZ3X25hbWUgPSAiVVNBMjhYQiI7CisJCWJyZWFrOworCisJY2FzZSBrZXlzcGFuX3VzYTE5X3ByZV9wcm9kdWN0X2lkOgorCQlyZWNvcmQgPSAma2V5c3Bhbl91c2ExOV9maXJtd2FyZVswXTsKKwkJZndfbmFtZSA9ICJVU0ExOSI7CisJCWJyZWFrOworCQkJICAgICAKKwljYXNlIGtleXNwYW5fdXNhMTlxaV9wcmVfcHJvZHVjdF9pZDoKKwkJcmVjb3JkID0gJmtleXNwYW5fdXNhMTlxaV9maXJtd2FyZVswXTsKKwkJZndfbmFtZSA9ICJVU0ExOVFJIjsKKwkJYnJlYWs7CisJCQkgICAgIAorCWNhc2Uga2V5c3Bhbl9tcHJfcHJlX3Byb2R1Y3RfaWQ6CisJCXJlY29yZCA9ICZrZXlzcGFuX21wcl9maXJtd2FyZVswXTsKKwkJZndfbmFtZSA9ICJNUFIiOworCQlicmVhazsKKworCWNhc2Uga2V5c3Bhbl91c2ExOXF3X3ByZV9wcm9kdWN0X2lkOgorCQlyZWNvcmQgPSAma2V5c3Bhbl91c2ExOXF3X2Zpcm13YXJlWzBdOworCQlmd19uYW1lID0gIlVTQTE5UUkiOworCQlicmVhazsKKwkJCSAgICAgCisJY2FzZSBrZXlzcGFuX3VzYTE4eF9wcmVfcHJvZHVjdF9pZDoKKwkJcmVjb3JkID0gJmtleXNwYW5fdXNhMTh4X2Zpcm13YXJlWzBdOworCQlmd19uYW1lID0gIlVTQTE4WCI7CisJCWJyZWFrOworCQkJICAgICAKKwljYXNlIGtleXNwYW5fdXNhMTl3X3ByZV9wcm9kdWN0X2lkOgorCQlyZWNvcmQgPSAma2V5c3Bhbl91c2ExOXdfZmlybXdhcmVbMF07CisJCWZ3X25hbWUgPSAiVVNBMTlXIjsKKwkJYnJlYWs7CisJCQorCWNhc2Uga2V5c3Bhbl91c2E0OXdfcHJlX3Byb2R1Y3RfaWQ6CisJCXJlY29yZCA9ICZrZXlzcGFuX3VzYTQ5d19maXJtd2FyZVswXTsKKwkJZndfbmFtZSA9ICJVU0E0OVciOworCQlicmVhazsKKworCWNhc2Uga2V5c3Bhbl91c2E0OXdsY19wcmVfcHJvZHVjdF9pZDoKKwkJcmVjb3JkID0gJmtleXNwYW5fdXNhNDl3bGNfZmlybXdhcmVbMF07CisJCWZ3X25hbWUgPSAiVVNBNDlXTEMiOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJlY29yZCA9IE5VTEw7CisJCWZ3X25hbWUgPSAiVW5rbm93biI7CisJCWJyZWFrOworCX0KKworCWlmIChyZWNvcmQgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiUmVxdWlyZWQga2V5c3BhbiBmaXJtd2FyZSBpbWFnZSAoJXMpIHVuYXZhaWxhYmxlLlxuIiwgZndfbmFtZSk7CisJCXJldHVybigxKTsKKwl9CisKKwlkYmcoIlVwbG9hZGluZyBLZXlzcGFuICVzIGZpcm13YXJlLiIsIGZ3X25hbWUpOworCisJCS8qIGRvd25sb2FkIHRoZSBmaXJtd2FyZSBpbWFnZSAqLworCXJlc3BvbnNlID0gZXp1c2Jfc2V0X3Jlc2V0KHNlcmlhbCwgMSk7CisKKwl3aGlsZShyZWNvcmQtPmFkZHJlc3MgIT0gMHhmZmZmKSB7CisJCXJlc3BvbnNlID0gZXp1c2Jfd3JpdGVtZW1vcnkoc2VyaWFsLCByZWNvcmQtPmFkZHJlc3MsCisJCQkJCSAgICAgKHVuc2lnbmVkIGNoYXIgKilyZWNvcmQtPmRhdGEsCisJCQkJCSAgICAgcmVjb3JkLT5kYXRhX3NpemUsIDB4YTApOworCQlpZiAocmVzcG9uc2UgPCAwKSB7CisJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiZXp1c2Jfd3JpdGVtZW1vcnkgZmFpbGVkIGZvciBLZXlzcGFuIgorCQkJCSJmaXJtd2FyZSAoJWQgJTA0WCAlcCAlZClcbiIsCisJCQkJcmVzcG9uc2UsIAorCQkJCXJlY29yZC0+YWRkcmVzcywgcmVjb3JkLT5kYXRhLCByZWNvcmQtPmRhdGFfc2l6ZSk7CisJCQlicmVhazsKKwkJfQorCQlyZWNvcmQrKzsKKwl9CisJCS8qIGJyaW5nIGRldmljZSBvdXQgb2YgcmVzZXQuIFJlbnVtZXJhdGlvbiB3aWxsIG9jY3VyIGluIGEKKwkJICAgbW9tZW50IGFuZCB0aGUgbmV3IGRldmljZSB3aWxsIGJpbmQgdG8gdGhlIHJlYWwgZHJpdmVyICovCisJcmVzcG9uc2UgPSBlenVzYl9zZXRfcmVzZXQoc2VyaWFsLCAwKTsKKworCS8qIHdlIGRvbid0IHdhbnQgdGhpcyBkZXZpY2UgdG8gaGF2ZSBhIGRyaXZlciBhc3NpZ25lZCB0byBpdC4gKi8KKwlyZXR1cm4gKDEpOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkga2V5c3Bhbl9zZXR1cF91cmJzICovCitzdGF0aWMgc3RydWN0IHVyYiAqa2V5c3Bhbl9zZXR1cF91cmIgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGludCBlbmRwb2ludCwKKwkJCQkgICAgICBpbnQgZGlyLCB2b2lkICpjdHgsIGNoYXIgKmJ1ZiwgaW50IGxlbiwKKwkJCQkgICAgICB2b2lkICgqY2FsbGJhY2spKHN0cnVjdCB1cmIgKiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpKQoreworCXN0cnVjdCB1cmIgKnVyYjsKKworCWlmIChlbmRwb2ludCA9PSAtMSkKKwkJcmV0dXJuIE5VTEw7CQkvKiBlbmRwb2ludCBub3QgbmVlZGVkICovCisKKwlkYmcgKCIlcyAtIGFsbG9jIGZvciBlbmRwb2ludCAlZC4iLCBfX0ZVTkNUSU9OX18sIGVuZHBvaW50KTsKKwl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwkJLyogTm8gSVNPICovCisJaWYgKHVyYiA9PSBOVUxMKSB7CisJCWRiZyAoIiVzIC0gYWxsb2MgZm9yIGVuZHBvaW50ICVkIGZhaWxlZC4iLCBfX0ZVTkNUSU9OX18sIGVuZHBvaW50KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJCS8qIEZpbGwgVVJCIHVzaW5nIHN1cHBsaWVkIGRhdGEuICovCisJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBzZXJpYWwtPmRldiwKKwkJICAgICAgdXNiX3NuZGJ1bGtwaXBlKHNlcmlhbC0+ZGV2LCBlbmRwb2ludCkgfCBkaXIsCisJCSAgICAgIGJ1ZiwgbGVuLCBjYWxsYmFjaywgY3R4KTsKKworCXJldHVybiB1cmI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2FsbGJhY2tzIHsKKwl2b2lkCSgqaW5zdGF0X2NhbGxiYWNrKShzdHJ1Y3QgdXJiICosIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKwl2b2lkCSgqZ2xvY29udF9jYWxsYmFjaykoc3RydWN0IHVyYiAqLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisJdm9pZAkoKmluZGF0X2NhbGxiYWNrKShzdHJ1Y3QgdXJiICosIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKwl2b2lkCSgqb3V0ZGF0X2NhbGxiYWNrKShzdHJ1Y3QgdXJiICosIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKwl2b2lkCSgqaW5hY2tfY2FsbGJhY2spKHN0cnVjdCB1cmIgKiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCXZvaWQJKCpvdXRjb250X2NhbGxiYWNrKShzdHJ1Y3QgdXJiICosIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK30ga2V5c3Bhbl9jYWxsYmFja3NbXSA9IHsKKwl7CisJCS8qIG1zZ191c2EyNiBjYWxsYmFja3MgKi8KKwkJLmluc3RhdF9jYWxsYmFjayA9CXVzYTI2X2luc3RhdF9jYWxsYmFjaywKKwkJLmdsb2NvbnRfY2FsbGJhY2sgPQl1c2EyNl9nbG9jb250X2NhbGxiYWNrLAorCQkuaW5kYXRfY2FsbGJhY2sgPQl1c2EyNl9pbmRhdF9jYWxsYmFjaywKKwkJLm91dGRhdF9jYWxsYmFjayA9CXVzYTJ4X291dGRhdF9jYWxsYmFjaywKKwkJLmluYWNrX2NhbGxiYWNrID0JdXNhMjZfaW5hY2tfY2FsbGJhY2ssCisJCS5vdXRjb250X2NhbGxiYWNrID0JdXNhMjZfb3V0Y29udF9jYWxsYmFjaywKKwl9LCB7CisJCS8qIG1zZ191c2EyOCBjYWxsYmFja3MgKi8KKwkJLmluc3RhdF9jYWxsYmFjayA9CXVzYTI4X2luc3RhdF9jYWxsYmFjaywKKwkJLmdsb2NvbnRfY2FsbGJhY2sgPQl1c2EyOF9nbG9jb250X2NhbGxiYWNrLAorCQkuaW5kYXRfY2FsbGJhY2sgPQl1c2EyOF9pbmRhdF9jYWxsYmFjaywKKwkJLm91dGRhdF9jYWxsYmFjayA9CXVzYTJ4X291dGRhdF9jYWxsYmFjaywKKwkJLmluYWNrX2NhbGxiYWNrID0JdXNhMjhfaW5hY2tfY2FsbGJhY2ssCisJCS5vdXRjb250X2NhbGxiYWNrID0JdXNhMjhfb3V0Y29udF9jYWxsYmFjaywKKwl9LCB7CisJCS8qIG1zZ191c2E0OSBjYWxsYmFja3MgKi8KKwkJLmluc3RhdF9jYWxsYmFjayA9CXVzYTQ5X2luc3RhdF9jYWxsYmFjaywKKwkJLmdsb2NvbnRfY2FsbGJhY2sgPQl1c2E0OV9nbG9jb250X2NhbGxiYWNrLAorCQkuaW5kYXRfY2FsbGJhY2sgPQl1c2E0OV9pbmRhdF9jYWxsYmFjaywKKwkJLm91dGRhdF9jYWxsYmFjayA9CXVzYTJ4X291dGRhdF9jYWxsYmFjaywKKwkJLmluYWNrX2NhbGxiYWNrID0JdXNhNDlfaW5hY2tfY2FsbGJhY2ssCisJCS5vdXRjb250X2NhbGxiYWNrID0JdXNhNDlfb3V0Y29udF9jYWxsYmFjaywKKwl9LCB7CisJCS8qIG1zZ191c2E5MCBjYWxsYmFja3MgKi8KKwkJLmluc3RhdF9jYWxsYmFjayA9CXVzYTkwX2luc3RhdF9jYWxsYmFjaywKKwkJLmdsb2NvbnRfY2FsbGJhY2sgPQl1c2EyOF9nbG9jb250X2NhbGxiYWNrLAkJCisJCS5pbmRhdF9jYWxsYmFjayA9CXVzYTkwX2luZGF0X2NhbGxiYWNrLAorCQkub3V0ZGF0X2NhbGxiYWNrID0JdXNhMnhfb3V0ZGF0X2NhbGxiYWNrLAorCQkuaW5hY2tfY2FsbGJhY2sgPQl1c2EyOF9pbmFja19jYWxsYmFjaywKKwkJLm91dGNvbnRfY2FsbGJhY2sgPQl1c2E5MF9vdXRjb250X2NhbGxiYWNrLAorCX0KK307CisKKwkvKiBHZW5lcmljIHNldHVwIHVyYnMgZnVuY3Rpb24gdGhhdCB1c2VzCisJICAgZGF0YSBpbiBkZXZpY2VfZGV0YWlscyAqLworc3RhdGljIHZvaWQga2V5c3Bhbl9zZXR1cF91cmJzKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50CQkJCWksIGo7CisJc3RydWN0IGtleXNwYW5fc2VyaWFsX3ByaXZhdGUgCSpzX3ByaXY7CisJY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMJKmRfZGV0YWlsczsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CQkqcG9ydDsKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUJKnBfcHJpdjsKKwlzdHJ1Y3QgY2FsbGJhY2tzCQkqY2JhY2s7CisJaW50CQkJCWVuZHA7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlzX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CisJZF9kZXRhaWxzID0gc19wcml2LT5kZXZpY2VfZGV0YWlsczsKKworCQkvKiBTZXR1cCB2YWx1ZXMgZm9yIHRoZSB2YXJpb3VzIGNhbGxiYWNrIHJvdXRpbmVzICovCisJY2JhY2sgPSAma2V5c3Bhbl9jYWxsYmFja3NbZF9kZXRhaWxzLT5tc2dfZm9ybWF0XTsKKworCQkvKiBBbGxvY2F0ZSBhbmQgc2V0IHVwIHVyYnMgZm9yIGVhY2ggb25lIHRoYXQgaXMgaW4gdXNlLCAKKwkJICAgc3RhcnRpbmcgd2l0aCBpbnN0YXQgZW5kcG9pbnRzICovCisJc19wcml2LT5pbnN0YXRfdXJiID0ga2V5c3Bhbl9zZXR1cF91cmIKKwkJKHNlcmlhbCwgZF9kZXRhaWxzLT5pbnN0YXRfZW5kcG9pbnQsIFVTQl9ESVJfSU4sCisJCSBzZXJpYWwsIHNfcHJpdi0+aW5zdGF0X2J1ZiwgSU5TVEFUX0JVRkxFTiwKKwkJIGNiYWNrLT5pbnN0YXRfY2FsbGJhY2spOworCisJc19wcml2LT5nbG9jb250X3VyYiA9IGtleXNwYW5fc2V0dXBfdXJiCisJCShzZXJpYWwsIGRfZGV0YWlscy0+Z2xvY29udF9lbmRwb2ludCwgVVNCX0RJUl9PVVQsCisJCSBzZXJpYWwsIHNfcHJpdi0+Z2xvY29udF9idWYsIEdMT0NPTlRfQlVGTEVOLAorCQkgY2JhY2stPmdsb2NvbnRfY2FsbGJhY2spOworCisJCS8qIFNldHVwIGVuZHBvaW50cyBmb3IgZWFjaCBwb3J0IHNwZWNpZmljIHRoaW5nICovCisJZm9yIChpID0gMDsgaSA8IGRfZGV0YWlscy0+bnVtX3BvcnRzOyBpICsrKSB7CisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCQkvKiBEbyBpbmRhdCBlbmRwb2ludHMgZmlyc3QsIG9uY2UgZm9yIGVhY2ggZmxpcCAqLworCQllbmRwID0gZF9kZXRhaWxzLT5pbmRhdF9lbmRwb2ludHNbaV07CisJCWZvciAoaiA9IDA7IGogPD0gZF9kZXRhaWxzLT5pbmRhdF9lbmRwX2ZsaXA7ICsraiwgKytlbmRwKSB7CisJCQlwX3ByaXYtPmluX3VyYnNbal0gPSBrZXlzcGFuX3NldHVwX3VyYgorCQkJCShzZXJpYWwsIGVuZHAsIFVTQl9ESVJfSU4sIHBvcnQsCisJCQkJIHBfcHJpdi0+aW5fYnVmZmVyW2pdLCA2NCwKKwkJCQkgY2JhY2stPmluZGF0X2NhbGxiYWNrKTsKKwkJfQorCQlmb3IgKDsgaiA8IDI7ICsraikKKwkJCXBfcHJpdi0+aW5fdXJic1tqXSA9IE5VTEw7CisKKwkJLyogb3V0ZGF0IGVuZHBvaW50cyBhbHNvIGhhdmUgZmxpcCAqLworCQllbmRwID0gZF9kZXRhaWxzLT5vdXRkYXRfZW5kcG9pbnRzW2ldOworCQlmb3IgKGogPSAwOyBqIDw9IGRfZGV0YWlscy0+b3V0ZGF0X2VuZHBfZmxpcDsgKytqLCArK2VuZHApIHsKKwkJCXBfcHJpdi0+b3V0X3VyYnNbal0gPSBrZXlzcGFuX3NldHVwX3VyYgorCQkJCShzZXJpYWwsIGVuZHAsIFVTQl9ESVJfT1VULCBwb3J0LAorCQkJCSBwX3ByaXYtPm91dF9idWZmZXJbal0sIDY0LAorCQkJCSBjYmFjay0+b3V0ZGF0X2NhbGxiYWNrKTsKKwkJfQorCQlmb3IgKDsgaiA8IDI7ICsraikKKwkJCXBfcHJpdi0+b3V0X3VyYnNbal0gPSBOVUxMOworCisJCS8qIGluYWNrIGVuZHBvaW50ICovCisJCXBfcHJpdi0+aW5hY2tfdXJiID0ga2V5c3Bhbl9zZXR1cF91cmIKKwkJCShzZXJpYWwsIGRfZGV0YWlscy0+aW5hY2tfZW5kcG9pbnRzW2ldLCBVU0JfRElSX0lOLAorCQkJIHBvcnQsIHBfcHJpdi0+aW5hY2tfYnVmZmVyLCAxLCBjYmFjay0+aW5hY2tfY2FsbGJhY2spOworCisJCS8qIG91dGNvbnQgZW5kcG9pbnQgKi8KKwkJcF9wcml2LT5vdXRjb250X3VyYiA9IGtleXNwYW5fc2V0dXBfdXJiCisJCQkoc2VyaWFsLCBkX2RldGFpbHMtPm91dGNvbnRfZW5kcG9pbnRzW2ldLCBVU0JfRElSX09VVCwKKwkJCSBwb3J0LCBwX3ByaXYtPm91dGNvbnRfYnVmZmVyLCA2NCwKKwkJCSBjYmFjay0+b3V0Y29udF9jYWxsYmFjayk7CisJfQkKKworfQorCisvKiB1c2ExOSBmdW5jdGlvbiBkb2Vzbid0IHJlcXVpcmUgcHJlc2NhbGVyICovCitzdGF0aWMgaW50IGtleXNwYW5fdXNhMTlfY2FsY19iYXVkKHUzMiBiYXVkX3JhdGUsIHUzMiBiYXVkY2xrLCB1OCAqcmF0ZV9oaSwKKwkJCQkgICB1OCAqcmF0ZV9sb3csIHU4ICpwcmVzY2FsZXIsIGludCBwb3J0bnVtKQoreworCXUzMiAJYjE2LAkvKiBiYXVkIHJhdGUgdGltZXMgMTYgKGFjdHVhbCByYXRlIHVzZWQgaW50ZXJuYWxseSkgKi8KKwkJZGl2LAkvKiBkaXZpc29yICovCQorCQljbnQ7CS8qIGludmVyc2Ugb2YgZGl2aXNvciAocHJvZ3JhbW1lZCBpbnRvIDgwNTEpICovCisJCQorCWRiZyAoIiVzIC0gJWQuIiwgX19GVU5DVElPTl9fLCBiYXVkX3JhdGUpOworCisJCS8qIHByZXZlbnQgZGl2aWRlIGJ5IHplcm8uLi4gICovCisJaWYoIChiMTYgPSAoYmF1ZF9yYXRlICogMTZMKSkgPT0gMCkgeworCQlyZXR1cm4gKEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUpOworCX0KKworCQkvKiBBbnkgInN0YW5kYXJkIiByYXRlIG92ZXIgNTdrNiBpcyBtYXJnaW5hbCBvbiB0aGUgVVNBLTE5CisJCSAgIGFzIHdlIHJ1biBvdXQgb2YgZGl2aXNvciByZXNvbHV0aW9uLiAqLworCWlmIChiYXVkX3JhdGUgPiA1NzYwMCkgeworCQlyZXR1cm4gKEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUpOworCX0KKworCQkvKiBjYWxjdWxhdGUgdGhlIGRpdmlzb3IgYW5kIHRoZSBjb3VudGVyIChpdHMgaW52ZXJzZSkgKi8KKwlpZiggKGRpdiA9IChiYXVkY2xrIC8gYjE2KSkgPT0gMCkgeworCQlyZXR1cm4gKEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUpOworCX0KKwllbHNlIHsKKwkJY250ID0gMCAtIGRpdjsKKwl9CisKKwlpZihkaXYgPiAweGZmZmYpIHsKKwkJcmV0dXJuIChLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFKTsKKwl9CisKKwkJLyogcmV0dXJuIHRoZSBjb3VudGVyIHZhbHVlcyBpZiBub24tbnVsbCAqLworCWlmIChyYXRlX2xvdykgeworCQkqcmF0ZV9sb3cgPSAodTgpIChjbnQgJiAweGZmKTsKKwl9CisJaWYgKHJhdGVfaGkpIHsKKwkJKnJhdGVfaGkgPSAodTgpICgoY250ID4+IDgpICYgMHhmZik7CisJfQorCWlmIChyYXRlX2xvdyAmJiByYXRlX2hpKSB7CisJCWRiZyAoIiVzIC0gJWQgJTAyeCAlMDJ4LiIsIF9fRlVOQ1RJT05fXywgYmF1ZF9yYXRlLCAqcmF0ZV9oaSwgKnJhdGVfbG93KTsKKwl9CisJCisJcmV0dXJuIChLRVlTUEFOX0JBVURfUkFURV9PSyk7Cit9CisKKy8qIHVzYTE5aHMgZnVuY3Rpb24gZG9lc24ndCByZXF1aXJlIHByZXNjYWxlciAqLworc3RhdGljIGludCBrZXlzcGFuX3VzYTE5aHNfY2FsY19iYXVkKHUzMiBiYXVkX3JhdGUsIHUzMiBiYXVkY2xrLCB1OCAqcmF0ZV9oaSwKKwkJCQkgICB1OCAqcmF0ZV9sb3csIHU4ICpwcmVzY2FsZXIsIGludCBwb3J0bnVtKQoreworCXUzMiAJYjE2LAkvKiBiYXVkIHJhdGUgdGltZXMgMTYgKGFjdHVhbCByYXRlIHVzZWQgaW50ZXJuYWxseSkgKi8KKwkJCWRpdjsJLyogZGl2aXNvciAqLwkKKwkJCisJZGJnICgiJXMgLSAlZC4iLCBfX0ZVTkNUSU9OX18sIGJhdWRfcmF0ZSk7CisKKwkJLyogcHJldmVudCBkaXZpZGUgYnkgemVyby4uLiAgKi8KKwlpZiggKGIxNiA9IChiYXVkX3JhdGUgKiAxNkwpKSA9PSAwKSAKKwkJcmV0dXJuIChLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFKTsKKwkKKworCisJCS8qIGNhbGN1bGF0ZSB0aGUgZGl2aXNvciAqLworCWlmKCAoZGl2ID0gKGJhdWRjbGsgLyBiMTYpKSA9PSAwKSAKKwkJcmV0dXJuIChLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFKTsKKworCWlmKGRpdiA+IDB4ZmZmZikgCisJCXJldHVybiAoS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSk7CisKKwkJLyogcmV0dXJuIHRoZSBjb3VudGVyIHZhbHVlcyBpZiBub24tbnVsbCAqLworCWlmIChyYXRlX2xvdykgCisJCSpyYXRlX2xvdyA9ICh1OCkgKGRpdiAmIDB4ZmYpOworCQorCWlmIChyYXRlX2hpKSAKKwkJKnJhdGVfaGkgPSAodTgpICgoZGl2ID4+IDgpICYgMHhmZik7CisJCisJaWYgKHJhdGVfbG93ICYmIHJhdGVfaGkpIAorCQlkYmcgKCIlcyAtICVkICUwMnggJTAyeC4iLCBfX0ZVTkNUSU9OX18sIGJhdWRfcmF0ZSwgKnJhdGVfaGksICpyYXRlX2xvdyk7CisJCisJcmV0dXJuIChLRVlTUEFOX0JBVURfUkFURV9PSyk7Cit9CisKK3N0YXRpYyBpbnQga2V5c3Bhbl91c2ExOXdfY2FsY19iYXVkKHUzMiBiYXVkX3JhdGUsIHUzMiBiYXVkY2xrLCB1OCAqcmF0ZV9oaSwKKwkJCQkgICAgdTggKnJhdGVfbG93LCB1OCAqcHJlc2NhbGVyLCBpbnQgcG9ydG51bSkKK3sKKwl1MzIgCWIxNiwJLyogYmF1ZCByYXRlIHRpbWVzIDE2IChhY3R1YWwgcmF0ZSB1c2VkIGludGVybmFsbHkpICovCisJCWNsaywJLyogY2xvY2sgd2l0aCAxMy84IHByZXNjYWxlciAqLworCQlkaXYsCS8qIGRpdmlzb3IgdXNpbmcgMTMvOCBwcmVzY2FsZXIgKi8JCisJCXJlcywJLyogcmVzdWx0aW5nIGJhdWQgcmF0ZSB1c2luZyAxMy84IHByZXNjYWxlciAqLworCQlkaWZmLAkvKiBlcnJvciB1c2luZyAxMy84IHByZXNjYWxlciAqLworCQlzbWFsbGVzdF9kaWZmOworCXU4CWJlc3RfcHJlc2NhbGVyOworCWludAlpOworCisJZGJnICgiJXMgLSAlZC4iLCBfX0ZVTkNUSU9OX18sIGJhdWRfcmF0ZSk7CisKKwkJLyogcHJldmVudCBkaXZpZGUgYnkgemVybyAqLworCWlmKCAoYjE2ID0gYmF1ZF9yYXRlICogMTZMKSA9PSAwKSB7CisJCXJldHVybiAoS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSk7CisJfQorCisJCS8qIENhbGN1bGF0ZSBwcmVzY2FsZXIgYnkgdHJ5aW5nIHRoZW0gYWxsIGFuZCBsb29raW5nCisJCSAgIGZvciBiZXN0IGZpdCAqLworCQkKKwkJLyogc3RhcnQgd2l0aCBsYXJnZXN0IHBvc3NpYmxlIGRpZmZlcmVuY2UgKi8KKwlzbWFsbGVzdF9kaWZmID0gMHhmZmZmZmZmZjsKKworCQkvKiAwIGlzIGFuIGludmFsaWQgcHJlc2NhbGVyLCB1c2VkIGFzIGEgZmxhZyAqLworCWJlc3RfcHJlc2NhbGVyID0gMDsKKworCWZvcihpID0gODsgaSA8PSAweGZmOyArK2kpIHsKKwkJY2xrID0gKGJhdWRjbGsgKiA4KSAvICh1MzIpIGk7CisJCQorCQlpZiggKGRpdiA9IGNsayAvIGIxNikgPT0gMCkgeworCQkJY29udGludWU7CisJCX0KKworCQlyZXMgPSBjbGsgLyBkaXY7CisJCWRpZmY9IChyZXMgPiBiMTYpID8gKHJlcy1iMTYpIDogKGIxNi1yZXMpOworCisJCWlmKGRpZmYgPCBzbWFsbGVzdF9kaWZmKSB7CisJCQliZXN0X3ByZXNjYWxlciA9IGk7CisJCQlzbWFsbGVzdF9kaWZmID0gZGlmZjsKKwkJfQorCX0KKworCWlmKGJlc3RfcHJlc2NhbGVyID09IDApIHsKKwkJcmV0dXJuIChLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFKTsKKwl9CisKKwljbGsgPSAoYmF1ZGNsayAqIDgpIC8gKHUzMikgYmVzdF9wcmVzY2FsZXI7CisJZGl2ID0gY2xrIC8gYjE2OworCisJCS8qIHJldHVybiB0aGUgZGl2aXNvciBhbmQgcHJlc2NhbGVyIGlmIG5vbi1udWxsICovCisJaWYgKHJhdGVfbG93KSB7CisJCSpyYXRlX2xvdyA9ICh1OCkgKGRpdiAmIDB4ZmYpOworCX0KKwlpZiAocmF0ZV9oaSkgeworCQkqcmF0ZV9oaSA9ICh1OCkgKChkaXYgPj4gOCkgJiAweGZmKTsKKwl9CisJaWYgKHByZXNjYWxlcikgeworCQkqcHJlc2NhbGVyID0gYmVzdF9wcmVzY2FsZXI7CisJCS8qICBkYmcoIiVzIC0gJWQgJWQiLCBfX0ZVTkNUSU9OX18sICpwcmVzY2FsZXIsIGRpdik7ICovCisJfQorCXJldHVybiAoS0VZU1BBTl9CQVVEX1JBVEVfT0spOworfQorCisJLyogVVNBLTI4IHN1cHBvcnRzIGRpZmZlcmVudCBtYXhpbXVtIGJhdWQgcmF0ZXMgb24gZWFjaCBwb3J0ICovCitzdGF0aWMgaW50IGtleXNwYW5fdXNhMjhfY2FsY19iYXVkKHUzMiBiYXVkX3JhdGUsIHUzMiBiYXVkY2xrLCB1OCAqcmF0ZV9oaSwKKwkJCQkgICAgdTggKnJhdGVfbG93LCB1OCAqcHJlc2NhbGVyLCBpbnQgcG9ydG51bSkKK3sKKwl1MzIgCWIxNiwJLyogYmF1ZCByYXRlIHRpbWVzIDE2IChhY3R1YWwgcmF0ZSB1c2VkIGludGVybmFsbHkpICovCisJCWRpdiwJLyogZGl2aXNvciAqLwkKKwkJY250OwkvKiBpbnZlcnNlIG9mIGRpdmlzb3IgKHByb2dyYW1tZWQgaW50byA4MDUxKSAqLworCisJZGJnICgiJXMgLSAlZC4iLCBfX0ZVTkNUSU9OX18sIGJhdWRfcmF0ZSk7CisKKwkJLyogcHJldmVudCBkaXZpZGUgYnkgemVybyAqLworCWlmICgoYjE2ID0gYmF1ZF9yYXRlICogMTZMKSA9PSAwKQorCQlyZXR1cm4gKEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUpOworCisJCS8qIGNhbGN1bGF0ZSB0aGUgZGl2aXNvciBhbmQgdGhlIGNvdW50ZXIgKGl0cyBpbnZlcnNlKSAqLworCWlmICgoZGl2ID0gKEtFWVNQQU5fVVNBMjhfQkFVRENMSyAvIGIxNikpID09IDApIHsKKwkJcmV0dXJuIChLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFKTsKKwl9CisJZWxzZSB7CisJCWNudCA9IDAgLSBkaXY7CisJfQorCisJCS8qIGNoZWNrIGZvciBvdXQgb2YgcmFuZ2UsIGJhc2VkIG9uIHBvcnRudW0sIAorCQkgICBhbmQgcmV0dXJuIHJlc3VsdCAqLworCWlmKHBvcnRudW0gPT0gMCkgeworCQlpZihkaXYgPiAweGZmZmYpCisJCQlyZXR1cm4gKEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUpOworCX0KKwllbHNlIHsKKwkJaWYocG9ydG51bSA9PSAxKSB7CisJCQlpZihkaXYgPiAweGZmKSB7CisJCQkJcmV0dXJuIChLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFKTsKKwkJCX0KKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiAoS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSk7CisJCX0KKwl9CisKKwkJLyogcmV0dXJuIHRoZSBjb3VudGVyIHZhbHVlcyBpZiBub3QgTlVMTAorCQkgICAocG9ydCAxIHdpbGwgaWdub3JlIHJldEhpKSAqLworCWlmIChyYXRlX2xvdykgeworCQkqcmF0ZV9sb3cgPSAodTgpIChjbnQgJiAweGZmKTsKKwl9CisJaWYgKHJhdGVfaGkpIHsKKwkJKnJhdGVfaGkgPSAodTgpICgoY250ID4+IDgpICYgMHhmZik7CisJfQorCWRiZyAoIiVzIC0gJWQgT0suIiwgX19GVU5DVElPTl9fLCBiYXVkX3JhdGUpOworCXJldHVybiAoS0VZU1BBTl9CQVVEX1JBVEVfT0spOworfQorCitzdGF0aWMgaW50IGtleXNwYW5fdXNhMjZfc2VuZF9zZXR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJCSAgICBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCSAgICBpbnQgcmVzZXRfcG9ydCkKK3sKKwlzdHJ1Y3Qga2V5c3Bhbl91c2EyNl9wb3J0Q29udHJvbE1lc3NhZ2UJbXNnOwkJCisJc3RydWN0IGtleXNwYW5fc2VyaWFsX3ByaXZhdGUgCQkqc19wcml2OworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZSAJCSpwX3ByaXY7CisJY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMJKmRfZGV0YWlsczsKKwlpbnQgCQkJCQlvdXRjb250X3VyYjsKKwlzdHJ1Y3QgdXJiCQkJCSp0aGlzX3VyYjsKKwlpbnQgCQkJCQlkZXZpY2VfcG9ydCwgZXJyOworCisJZGJnICgiJXMgcmVzZXQ9JWQiLCBfX0ZVTkNUSU9OX18sIHJlc2V0X3BvcnQpOyAKKworCXNfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKwlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJZF9kZXRhaWxzID0gc19wcml2LT5kZXZpY2VfZGV0YWlsczsKKwlkZXZpY2VfcG9ydCA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3I7CisKKwlvdXRjb250X3VyYiA9IGRfZGV0YWlscy0+b3V0Y29udF9lbmRwb2ludHNbcG9ydC0+bnVtYmVyXTsKKwl0aGlzX3VyYiA9IHBfcHJpdi0+b3V0Y29udF91cmI7CisKKwlkYmcoIiVzIC0gZW5kcG9pbnQgJWQiLCBfX0ZVTkNUSU9OX18sIHVzYl9waXBlZW5kcG9pbnQodGhpc191cmItPnBpcGUpKTsKKworCQkvKiBNYWtlIHN1cmUgd2UgaGF2ZSBhbiB1cmIgdGhlbiBzZW5kIHRoZSBtZXNzYWdlICovCisJaWYgKHRoaXNfdXJiID09IE5VTEwpIHsKKwkJZGJnKCIlcyAtIG9vcHMgbm8gdXJiLiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBTYXZlIHJlc2V0IHBvcnQgdmFsIGZvciByZXNlbmQuCisJRG9uJ3Qgb3ZlcndyaXRlIHJlc2VuZCBmb3IgY2xvc2UgY29uZGl0aW9uLiAqLworCWlmIChwX3ByaXYtPnJlc2VuZF9jb250ICE9IDMpCisJCXBfcHJpdi0+cmVzZW5kX2NvbnQgPSByZXNldF9wb3J0ICsgMTsKKwlpZiAodGhpc191cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJLyogIGRiZyAoIiVzIC0gYWxyZWFkeSB3cml0aW5nIiwgX19GVU5DVElPTl9fKTsgKi8KKwkJbWRlbGF5KDUpOworCQlyZXR1cm4oLTEpOworCX0KKworCW1lbXNldCgmbXNnLCAwLCBzaXplb2YgKHN0cnVjdCBrZXlzcGFuX3VzYTI2X3BvcnRDb250cm9sTWVzc2FnZSkpOworCQorCQkvKiBPbmx5IHNldCBiYXVkIHJhdGUgaWYgaXQncyBjaGFuZ2VkICovCQorCWlmIChwX3ByaXYtPm9sZF9iYXVkICE9IHBfcHJpdi0+YmF1ZCkgeworCQlwX3ByaXYtPm9sZF9iYXVkID0gcF9wcml2LT5iYXVkOworCQltc2cuc2V0Q2xvY2tpbmcgPSAweGZmOworCQlpZiAoZF9kZXRhaWxzLT5jYWxjdWxhdGVfYmF1ZF9yYXRlCisJCSAgICAocF9wcml2LT5iYXVkLCBkX2RldGFpbHMtPmJhdWRjbGssICZtc2cuYmF1ZEhpLAorCQkgICAgICZtc2cuYmF1ZExvLCAmbXNnLnByZXNjYWxlciwgZGV2aWNlX3BvcnQpID09IEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUgKSB7CisJCQlkYmcoIiVzIC0gSW52YWxpZCBiYXVkIHJhdGUgJWQgcmVxdWVzdGVkLCB1c2luZyA5NjAwLiIsIF9fRlVOQ1RJT05fXywKKwkJCSAgICBwX3ByaXYtPmJhdWQpOworCQkJbXNnLmJhdWRMbyA9IDA7CisJCQltc2cuYmF1ZEhpID0gMTI1OwkvKiBWYWx1ZXMgZm9yIDk2MDAgYmF1ZCAqLworCQkJbXNnLnByZXNjYWxlciA9IDEwOworCQl9CisJCW1zZy5zZXRQcmVzY2FsZXIgPSAweGZmOworCX0KKworCW1zZy5sY3IgPSAocF9wcml2LT5jZmxhZyAmIENTVE9QQik/IFNUT1BCSVRTXzY3OF8yOiBTVE9QQklUU181Njc4XzE7CisJc3dpdGNoIChwX3ByaXYtPmNmbGFnICYgQ1NJWkUpIHsKKwljYXNlIENTNToKKwkJbXNnLmxjciB8PSBVU0FfREFUQUJJVFNfNTsKKwkJYnJlYWs7CisJY2FzZSBDUzY6CisJCW1zZy5sY3IgfD0gVVNBX0RBVEFCSVRTXzY7CisJCWJyZWFrOworCWNhc2UgQ1M3OgorCQltc2cubGNyIHw9IFVTQV9EQVRBQklUU183OworCQlicmVhazsKKwljYXNlIENTODoKKwkJbXNnLmxjciB8PSBVU0FfREFUQUJJVFNfODsKKwkJYnJlYWs7CisJfQorCWlmIChwX3ByaXYtPmNmbGFnICYgUEFSRU5CKSB7CisJCS8qIG5vdGUgVVNBX1BBUklUWV9OT05FID09IDAgKi8KKwkJbXNnLmxjciB8PSAocF9wcml2LT5jZmxhZyAmIFBBUk9ERCk/CisJCQlVU0FfUEFSSVRZX09ERDogVVNBX1BBUklUWV9FVkVOOworCX0KKwltc2cuc2V0TGNyID0gMHhmZjsKKworCW1zZy5jdHNGbG93Q29udHJvbCA9IChwX3ByaXYtPmZsb3dfY29udHJvbCA9PSBmbG93X2N0cyk7CisJbXNnLnhvbkZsb3dDb250cm9sID0gMDsKKwltc2cuc2V0Rmxvd0NvbnRyb2wgPSAweGZmOworCW1zZy5mb3J3YXJkaW5nTGVuZ3RoID0gMTY7CisJbXNnLnhvbkNoYXIgPSAxNzsKKwltc2cueG9mZkNoYXIgPSAxOTsKKworCS8qIE9wZW5pbmcgcG9ydCAqLworCWlmIChyZXNldF9wb3J0ID09IDEpIHsKKwkJbXNnLl90eE9uID0gMTsKKwkJbXNnLl90eE9mZiA9IDA7CisJCW1zZy50eEZsdXNoID0gMDsKKwkJbXNnLnR4QnJlYWsgPSAwOworCQltc2cucnhPbiA9IDE7CisJCW1zZy5yeE9mZiA9IDA7CisJCW1zZy5yeEZsdXNoID0gMTsKKwkJbXNnLnJ4Rm9yd2FyZCA9IDA7CisJCW1zZy5yZXR1cm5TdGF0dXMgPSAwOworCQltc2cucmVzZXREYXRhVG9nZ2xlID0gMHhmZjsKKwl9CisKKwkvKiBDbG9zaW5nIHBvcnQgKi8KKwllbHNlIGlmIChyZXNldF9wb3J0ID09IDIpIHsKKwkJbXNnLl90eE9uID0gMDsKKwkJbXNnLl90eE9mZiA9IDE7CisJCW1zZy50eEZsdXNoID0gMDsKKwkJbXNnLnR4QnJlYWsgPSAwOworCQltc2cucnhPbiA9IDA7CisJCW1zZy5yeE9mZiA9IDE7CisJCW1zZy5yeEZsdXNoID0gMTsKKwkJbXNnLnJ4Rm9yd2FyZCA9IDA7CisJCW1zZy5yZXR1cm5TdGF0dXMgPSAwOworCQltc2cucmVzZXREYXRhVG9nZ2xlID0gMDsKKwl9CisKKwkvKiBTZW5kaW5nIGludGVybWVkaWF0ZSBjb25maWdzICovCisJZWxzZSB7CisJCW1zZy5fdHhPbiA9ICghIHBfcHJpdi0+YnJlYWtfb24pOworCQltc2cuX3R4T2ZmID0gMDsKKwkJbXNnLnR4Rmx1c2ggPSAwOworCQltc2cudHhCcmVhayA9IChwX3ByaXYtPmJyZWFrX29uKTsKKwkJbXNnLnJ4T24gPSAwOworCQltc2cucnhPZmYgPSAwOworCQltc2cucnhGbHVzaCA9IDA7CisJCW1zZy5yeEZvcndhcmQgPSAwOworCQltc2cucmV0dXJuU3RhdHVzID0gMDsKKwkJbXNnLnJlc2V0RGF0YVRvZ2dsZSA9IDB4MDsKKwl9CisKKwkJLyogRG8gaGFuZHNoYWtpbmcgb3V0cHV0cyAqLwkKKwltc2cuc2V0VHhUcmlTdGF0ZV9zZXRSdHMgPSAweGZmOworCW1zZy50eFRyaVN0YXRlX3J0cyA9IHBfcHJpdi0+cnRzX3N0YXRlOworCisJbXNnLnNldEhza29hX3NldER0ciA9IDB4ZmY7CisJbXNnLmhza29hX2R0ciA9IHBfcHJpdi0+ZHRyX3N0YXRlOworCQkKKwlwX3ByaXYtPnJlc2VuZF9jb250ID0gMDsKKwltZW1jcHkgKHRoaXNfdXJiLT50cmFuc2Zlcl9idWZmZXIsICZtc2csIHNpemVvZihtc2cpKTsKKwkKKwkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgZGV2aWNlIG9uIGNvbnRyb2wgZW5kcG9pbnQgKi8KKwl0aGlzX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHNpemVvZihtc2cpOworCisJdGhpc191cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIodGhpc191cmIsIEdGUF9BVE9NSUMpKSAhPSAwKSB7CisJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihzZXR1cCkgZmFpbGVkICglZCkiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJfQorI2lmIDAKKwllbHNlIHsKKwkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKCVkKSBPSyAlZCBieXRlcyAoZW5kICVkKSIsIF9fRlVOQ1RJT05fXworCQkgICAgb3V0Y29udF91cmIsIHRoaXNfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkgICAgdXNiX3BpcGVlbmRwb2ludCh0aGlzX3VyYi0+cGlwZSkpOworCX0KKyNlbmRpZgorCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludCBrZXlzcGFuX3VzYTI4X3NlbmRfc2V0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCQkgICAgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkgICAgaW50IHJlc2V0X3BvcnQpCit7CisJc3RydWN0IGtleXNwYW5fdXNhMjhfcG9ydENvbnRyb2xNZXNzYWdlCW1zZzsJCQorCXN0cnVjdCBrZXlzcGFuX3NlcmlhbF9wcml2YXRlCSAJKnNfcHJpdjsKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUgCQkqcF9wcml2OworCWNvbnN0IHN0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzCSpkX2RldGFpbHM7CisJc3RydWN0IHVyYgkJCQkqdGhpc191cmI7CisJaW50IAkJCQkJZGV2aWNlX3BvcnQsIGVycjsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXNfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKwlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJZF9kZXRhaWxzID0gc19wcml2LT5kZXZpY2VfZGV0YWlsczsKKwlkZXZpY2VfcG9ydCA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3I7CisKKwkvKiBvbmx5IGRvIHNvbWV0aGluZyBpZiB3ZSBoYXZlIGEgYnVsayBvdXQgZW5kcG9pbnQgKi8KKwlpZiAoKHRoaXNfdXJiID0gcF9wcml2LT5vdXRjb250X3VyYikgPT0gTlVMTCkgeworCQlkYmcoIiVzIC0gb29wcyBubyB1cmIuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFNhdmUgcmVzZXQgcG9ydCB2YWwgZm9yIHJlc2VuZC4KKwkgICBEb24ndCBvdmVyd3JpdGUgcmVzZW5kIGZvciBjbG9zZSBjb25kaXRpb24uICovCisJaWYgKHBfcHJpdi0+cmVzZW5kX2NvbnQgIT0gMykKKwkJcF9wcml2LT5yZXNlbmRfY29udCA9IHJlc2V0X3BvcnQgKyAxOworCWlmICh0aGlzX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQlkYmcgKCIlcyBhbHJlYWR5IHdyaXRpbmciLCBfX0ZVTkNUSU9OX18pOworCQltZGVsYXkoNSk7CisJCXJldHVybigtMSk7CisJfQorCisJbWVtc2V0KCZtc2csIDAsIHNpemVvZiAoc3RydWN0IGtleXNwYW5fdXNhMjhfcG9ydENvbnRyb2xNZXNzYWdlKSk7CisKKwltc2cuc2V0QmF1ZFJhdGUgPSAxOworCWlmIChkX2RldGFpbHMtPmNhbGN1bGF0ZV9iYXVkX3JhdGUocF9wcml2LT5iYXVkLCBkX2RldGFpbHMtPmJhdWRjbGssCisJCSZtc2cuYmF1ZEhpLCAmbXNnLmJhdWRMbywgTlVMTCwgZGV2aWNlX3BvcnQpID09IEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUgKSB7CisJCWRiZygiJXMgLSBJbnZhbGlkIGJhdWQgcmF0ZSByZXF1ZXN0ZWQgJWQuIiwgX19GVU5DVElPTl9fLCBwX3ByaXYtPmJhdWQpOworCQltc2cuYmF1ZExvID0gMHhmZjsKKwkJbXNnLmJhdWRIaSA9IDB4YjI7CS8qIFZhbHVlcyBmb3IgOTYwMCBiYXVkICovCisJfQorCisJLyogSWYgcGFyaXR5IGlzIGVuYWJsZWQsIHdlIG11c3QgY2FsY3VsYXRlIGl0IG91cnNlbHZlcy4gKi8KKwltc2cucGFyaXR5ID0gMDsJCS8qIFhYWCBmb3Igbm93ICovCisKKwltc2cuY3RzRmxvd0NvbnRyb2wgPSAocF9wcml2LT5mbG93X2NvbnRyb2wgPT0gZmxvd19jdHMpOworCW1zZy54b25GbG93Q29udHJvbCA9IDA7CisKKwkvKiBEbyBoYW5kc2hha2luZyBvdXRwdXRzLCBEVFIgaXMgaW52ZXJ0ZWQgcmVsYXRpdmUgdG8gUlRTICovCQorCW1zZy5ydHMgPSBwX3ByaXYtPnJ0c19zdGF0ZTsKKwltc2cuZHRyID0gcF9wcml2LT5kdHJfc3RhdGU7CisKKwltc2cuZm9yd2FyZGluZ0xlbmd0aCA9IDE2OworCW1zZy5mb3J3YXJkTXMgPSAxMDsKKwltc2cuYnJlYWtUaHJlc2hvbGQgPSA0NTsKKwltc2cueG9uQ2hhciA9IDE3OworCW1zZy54b2ZmQ2hhciA9IDE5OworCisJLyptc2cucmV0dXJuU3RhdHVzID0gMTsKKwltc2cucmVzZXREYXRhVG9nZ2xlID0gMHhmZjsqLworCS8qIE9wZW5pbmcgcG9ydCAqLworCWlmIChyZXNldF9wb3J0ID09IDEpIHsKKwkJbXNnLl90eE9uID0gMTsKKwkJbXNnLl90eE9mZiA9IDA7CisJCW1zZy50eEZsdXNoID0gMDsKKwkJbXNnLnR4Rm9yY2VYb2ZmID0gMDsKKwkJbXNnLnR4QnJlYWsgPSAwOworCQltc2cucnhPbiA9IDE7CisJCW1zZy5yeE9mZiA9IDA7CisJCW1zZy5yeEZsdXNoID0gMTsKKwkJbXNnLnJ4Rm9yd2FyZCA9IDA7CisJCW1zZy5yZXR1cm5TdGF0dXMgPSAwOworCQltc2cucmVzZXREYXRhVG9nZ2xlID0gMHhmZjsKKwl9CisJLyogQ2xvc2luZyBwb3J0ICovCisJZWxzZSBpZiAocmVzZXRfcG9ydCA9PSAyKSB7CisJCW1zZy5fdHhPbiA9IDA7CisJCW1zZy5fdHhPZmYgPSAxOworCQltc2cudHhGbHVzaCA9IDA7CisJCW1zZy50eEZvcmNlWG9mZiA9IDA7CisJCW1zZy50eEJyZWFrID0gMDsKKwkJbXNnLnJ4T24gPSAwOworCQltc2cucnhPZmYgPSAxOworCQltc2cucnhGbHVzaCA9IDE7CisJCW1zZy5yeEZvcndhcmQgPSAwOworCQltc2cucmV0dXJuU3RhdHVzID0gMDsKKwkJbXNnLnJlc2V0RGF0YVRvZ2dsZSA9IDA7CisJfQorCS8qIFNlbmRpbmcgaW50ZXJtZWRpYXRlIGNvbmZpZ3MgKi8KKwllbHNlIHsKKwkJbXNnLl90eE9uID0gKCEgcF9wcml2LT5icmVha19vbik7CisJCW1zZy5fdHhPZmYgPSAwOworCQltc2cudHhGbHVzaCA9IDA7CisJCW1zZy50eEZvcmNlWG9mZiA9IDA7CisJCW1zZy50eEJyZWFrID0gKHBfcHJpdi0+YnJlYWtfb24pOworCQltc2cucnhPbiA9IDA7CisJCW1zZy5yeE9mZiA9IDA7CisJCW1zZy5yeEZsdXNoID0gMDsKKwkJbXNnLnJ4Rm9yd2FyZCA9IDA7CisJCW1zZy5yZXR1cm5TdGF0dXMgPSAwOworCQltc2cucmVzZXREYXRhVG9nZ2xlID0gMHgwOworCX0KKworCXBfcHJpdi0+cmVzZW5kX2NvbnQgPSAwOworCW1lbWNweSAodGhpc191cmItPnRyYW5zZmVyX2J1ZmZlciwgJm1zZywgc2l6ZW9mKG1zZykpOworCisJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGRldmljZSBvbiBjb250cm9sIGVuZHBvaW50ICovCisJdGhpc191cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBzaXplb2YobXNnKTsKKworCXRoaXNfdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKwlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHRoaXNfdXJiLCBHRlBfQVRPTUlDKSkgIT0gMCkgeworCQlkYmcoIiVzIC0gdXNiX3N1Ym1pdF91cmIoc2V0dXApIGZhaWxlZCIsIF9fRlVOQ1RJT05fXyk7CisJfQorI2lmIDAKKwllbHNlIHsKKwkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHNldHVwKSBPSyAlZCBieXRlcyIsIF9fRlVOQ1RJT05fXywKKwkJICAgIHRoaXNfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwl9CisjZW5kaWYKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQga2V5c3Bhbl91c2E0OV9zZW5kX3NldHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCisJCQkJICAgIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJICAgIGludCByZXNldF9wb3J0KQoreworCXN0cnVjdCBrZXlzcGFuX3VzYTQ5X3BvcnRDb250cm9sTWVzc2FnZQltc2c7CQkKKwlzdHJ1Y3Qga2V5c3Bhbl9zZXJpYWxfcHJpdmF0ZSAJCSpzX3ByaXY7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlIAkJKnBfcHJpdjsKKwljb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscwkqZF9kZXRhaWxzOworCWludCAJCQkJCWdsb2NvbnRfdXJiOworCXN0cnVjdCB1cmIJCQkJKnRoaXNfdXJiOworCWludCAJCQkJCWVyciwgZGV2aWNlX3BvcnQ7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlzX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CisJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWRfZGV0YWlscyA9IHNfcHJpdi0+ZGV2aWNlX2RldGFpbHM7CisKKwlnbG9jb250X3VyYiA9IGRfZGV0YWlscy0+Z2xvY29udF9lbmRwb2ludDsKKwl0aGlzX3VyYiA9IHNfcHJpdi0+Z2xvY29udF91cmI7CisKKwkJLyogV29yayBvdXQgd2hpY2ggcG9ydCB3aXRoaW4gdGhlIGRldmljZSBpcyBiZWluZyBzZXR1cCAqLworCWRldmljZV9wb3J0ID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vcjsKKworCWRiZygiJXMgLSBlbmRwb2ludCAlZCBwb3J0ICVkICglZCkiLF9fRlVOQ1RJT05fXywgdXNiX3BpcGVlbmRwb2ludCh0aGlzX3VyYi0+cGlwZSksIHBvcnQtPm51bWJlciwgZGV2aWNlX3BvcnQpOworCisJCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIHVyYiB0aGVuIHNlbmQgdGhlIG1lc3NhZ2UgKi8KKwlpZiAodGhpc191cmIgPT0gTlVMTCkgeworCQlkYmcoIiVzIC0gb29wcyBubyB1cmIgZm9yIHBvcnQgJWQuIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogU2F2ZSByZXNldCBwb3J0IHZhbCBmb3IgcmVzZW5kLgorCSAgIERvbid0IG92ZXJ3cml0ZSByZXNlbmQgZm9yIGNsb3NlIGNvbmRpdGlvbi4gKi8KKwlpZiAocF9wcml2LT5yZXNlbmRfY29udCAhPSAzKQorCQlwX3ByaXYtPnJlc2VuZF9jb250ID0gcmVzZXRfcG9ydCArIDE7CisJaWYgKHRoaXNfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCS8qICBkYmcgKCIlcyAtIGFscmVhZHkgd3JpdGluZyIsIF9fRlVOQ1RJT05fXyk7ICovCisJCW1kZWxheSg1KTsKKwkJcmV0dXJuKC0xKTsKKwl9CisKKwltZW1zZXQoJm1zZywgMCwgc2l6ZW9mIChzdHJ1Y3Qga2V5c3Bhbl91c2E0OV9wb3J0Q29udHJvbE1lc3NhZ2UpKTsKKworCS8qbXNnLnBvcnROdW1iZXIgPSBwb3J0LT5udW1iZXI7Ki8KKwltc2cucG9ydE51bWJlciA9IGRldmljZV9wb3J0OworCQorCQkvKiBPbmx5IHNldCBiYXVkIHJhdGUgaWYgaXQncyBjaGFuZ2VkICovCQorCWlmIChwX3ByaXYtPm9sZF9iYXVkICE9IHBfcHJpdi0+YmF1ZCkgeworCQlwX3ByaXYtPm9sZF9iYXVkID0gcF9wcml2LT5iYXVkOworCQltc2cuc2V0Q2xvY2tpbmcgPSAweGZmOworCQlpZiAoZF9kZXRhaWxzLT5jYWxjdWxhdGVfYmF1ZF9yYXRlCisJCSAgICAocF9wcml2LT5iYXVkLCBkX2RldGFpbHMtPmJhdWRjbGssICZtc2cuYmF1ZEhpLAorCQkgICAgICZtc2cuYmF1ZExvLCAmbXNnLnByZXNjYWxlciwgZGV2aWNlX3BvcnQpID09IEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUgKSB7CisJCQlkYmcoIiVzIC0gSW52YWxpZCBiYXVkIHJhdGUgJWQgcmVxdWVzdGVkLCB1c2luZyA5NjAwLiIsIF9fRlVOQ1RJT05fXywKKwkJCSAgICBwX3ByaXYtPmJhdWQpOworCQkJbXNnLmJhdWRMbyA9IDA7CisJCQltc2cuYmF1ZEhpID0gMTI1OwkvKiBWYWx1ZXMgZm9yIDk2MDAgYmF1ZCAqLworCQkJbXNnLnByZXNjYWxlciA9IDEwOworCQl9CisJCS8vbXNnLnNldFByZXNjYWxlciA9IDB4ZmY7CisJfQorCisJbXNnLmxjciA9IChwX3ByaXYtPmNmbGFnICYgQ1NUT1BCKT8gU1RPUEJJVFNfNjc4XzI6IFNUT1BCSVRTXzU2NzhfMTsKKwlzd2l0Y2ggKHBfcHJpdi0+Y2ZsYWcgJiBDU0laRSkgeworCWNhc2UgQ1M1OgorCQltc2cubGNyIHw9IFVTQV9EQVRBQklUU181OworCQlicmVhazsKKwljYXNlIENTNjoKKwkJbXNnLmxjciB8PSBVU0FfREFUQUJJVFNfNjsKKwkJYnJlYWs7CisJY2FzZSBDUzc6CisJCW1zZy5sY3IgfD0gVVNBX0RBVEFCSVRTXzc7CisJCWJyZWFrOworCWNhc2UgQ1M4OgorCQltc2cubGNyIHw9IFVTQV9EQVRBQklUU184OworCQlicmVhazsKKwl9CisJaWYgKHBfcHJpdi0+Y2ZsYWcgJiBQQVJFTkIpIHsKKwkJLyogbm90ZSBVU0FfUEFSSVRZX05PTkUgPT0gMCAqLworCQltc2cubGNyIHw9IChwX3ByaXYtPmNmbGFnICYgUEFST0REKT8KKwkJCVVTQV9QQVJJVFlfT0REOiBVU0FfUEFSSVRZX0VWRU47CisJfQorCW1zZy5zZXRMY3IgPSAweGZmOworCisJbXNnLmN0c0Zsb3dDb250cm9sID0gKHBfcHJpdi0+Zmxvd19jb250cm9sID09IGZsb3dfY3RzKTsKKwltc2cueG9uRmxvd0NvbnRyb2wgPSAwOworCW1zZy5zZXRGbG93Q29udHJvbCA9IDB4ZmY7CisJCisJbXNnLmZvcndhcmRpbmdMZW5ndGggPSAxNjsKKwltc2cueG9uQ2hhciA9IDE3OworCW1zZy54b2ZmQ2hhciA9IDE5OworCisJLyogT3BlbmluZyBwb3J0ICovIAorCWlmIChyZXNldF9wb3J0ID09IDEpIHsKKwkJbXNnLl90eE9uID0gMTsKKwkJbXNnLl90eE9mZiA9IDA7CisJCW1zZy50eEZsdXNoID0gMDsKKwkJbXNnLnR4QnJlYWsgPSAwOworCQltc2cucnhPbiA9IDE7CisJCW1zZy5yeE9mZiA9IDA7CisJCW1zZy5yeEZsdXNoID0gMTsKKwkJbXNnLnJ4Rm9yd2FyZCA9IDA7CisJCW1zZy5yZXR1cm5TdGF0dXMgPSAwOworCQltc2cucmVzZXREYXRhVG9nZ2xlID0gMHhmZjsKKwkJbXNnLmVuYWJsZVBvcnQgPSAxOworCQltc2cuZGlzYWJsZVBvcnQgPSAwOworCX0KKwkvKiBDbG9zaW5nIHBvcnQgKi8KKwllbHNlIGlmIChyZXNldF9wb3J0ID09IDIpIHsKKwkJbXNnLl90eE9uID0gMDsKKwkJbXNnLl90eE9mZiA9IDE7CisJCW1zZy50eEZsdXNoID0gMDsKKwkJbXNnLnR4QnJlYWsgPSAwOworCQltc2cucnhPbiA9IDA7CisJCW1zZy5yeE9mZiA9IDE7CisJCW1zZy5yeEZsdXNoID0gMTsKKwkJbXNnLnJ4Rm9yd2FyZCA9IDA7CisJCW1zZy5yZXR1cm5TdGF0dXMgPSAwOworCQltc2cucmVzZXREYXRhVG9nZ2xlID0gMDsKKwkJbXNnLmVuYWJsZVBvcnQgPSAwOworCQltc2cuZGlzYWJsZVBvcnQgPSAxOworCX0KKwkvKiBTZW5kaW5nIGludGVybWVkaWF0ZSBjb25maWdzICovCisJZWxzZSB7CisJCW1zZy5fdHhPbiA9ICghIHBfcHJpdi0+YnJlYWtfb24pOworCQltc2cuX3R4T2ZmID0gMDsKKwkJbXNnLnR4Rmx1c2ggPSAwOworCQltc2cudHhCcmVhayA9IChwX3ByaXYtPmJyZWFrX29uKTsKKwkJbXNnLnJ4T24gPSAwOworCQltc2cucnhPZmYgPSAwOworCQltc2cucnhGbHVzaCA9IDA7CisJCW1zZy5yeEZvcndhcmQgPSAwOworCQltc2cucmV0dXJuU3RhdHVzID0gMDsKKwkJbXNnLnJlc2V0RGF0YVRvZ2dsZSA9IDB4MDsKKwkJbXNnLmVuYWJsZVBvcnQgPSAwOworCQltc2cuZGlzYWJsZVBvcnQgPSAwOworCX0KKworCQkvKiBEbyBoYW5kc2hha2luZyBvdXRwdXRzICovCQorCW1zZy5zZXRSdHMgPSAweGZmOworCW1zZy5ydHMgPSBwX3ByaXYtPnJ0c19zdGF0ZTsKKworCW1zZy5zZXREdHIgPSAweGZmOworCW1zZy5kdHIgPSBwX3ByaXYtPmR0cl9zdGF0ZTsKKwkJCisJcF9wcml2LT5yZXNlbmRfY29udCA9IDA7CisJbWVtY3B5ICh0aGlzX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCAmbXNnLCBzaXplb2YobXNnKSk7CisJCisJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGRldmljZSBvbiBjb250cm9sIGVuZHBvaW50ICovCisJdGhpc191cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBzaXplb2YobXNnKTsKKworCXRoaXNfdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKwlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHRoaXNfdXJiLCBHRlBfQVRPTUlDKSkgIT0gMCkgeworCQlkYmcoIiVzIC0gdXNiX3N1Ym1pdF91cmIoc2V0dXApIGZhaWxlZCAoJWQpIiwgX19GVU5DVElPTl9fLCBlcnIpOworCX0KKyNpZiAwCisJZWxzZSB7CisJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYiglZCkgT0sgJWQgYnl0ZXMgKGVuZCAlZCkiLCBfX0ZVTkNUSU9OX18sCisJCSAgICBvdXRjb250X3VyYiwgdGhpc191cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCSAgICB1c2JfcGlwZWVuZHBvaW50KHRoaXNfdXJiLT5waXBlKSk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50IGtleXNwYW5fdXNhOTBfc2VuZF9zZXR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJCSAgICBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCSAgICBpbnQgcmVzZXRfcG9ydCkKK3sKKwlzdHJ1Y3Qga2V5c3Bhbl91c2E5MF9wb3J0Q29udHJvbE1lc3NhZ2UJbXNnOwkJCisJc3RydWN0IGtleXNwYW5fc2VyaWFsX3ByaXZhdGUgCQkqc19wcml2OworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZSAJCSpwX3ByaXY7CisJY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMJKmRfZGV0YWlsczsKKwlzdHJ1Y3QgdXJiCQkJCSp0aGlzX3VyYjsKKwlpbnQgCQkJCQllcnI7CisJdTgJCQkJCQlwcmVzY2FsZXI7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlzX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CisJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWRfZGV0YWlscyA9IHNfcHJpdi0+ZGV2aWNlX2RldGFpbHM7CisKKwkvKiBvbmx5IGRvIHNvbWV0aGluZyBpZiB3ZSBoYXZlIGEgYnVsayBvdXQgZW5kcG9pbnQgKi8KKwlpZiAoKHRoaXNfdXJiID0gcF9wcml2LT5vdXRjb250X3VyYikgPT0gTlVMTCkgeworCQlkYmcoIiVzIC0gb29wcyBubyB1cmIuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFNhdmUgcmVzZXQgcG9ydCB2YWwgZm9yIHJlc2VuZC4KKwkgICBEb24ndCBvdmVyd3JpdGUgcmVzZW5kIGZvciBvcGVuL2Nsb3NlIGNvbmRpdGlvbi4gKi8KKwlpZiAoKHJlc2V0X3BvcnQgKyAxKSA+IHBfcHJpdi0+cmVzZW5kX2NvbnQpCisJCXBfcHJpdi0+cmVzZW5kX2NvbnQgPSByZXNldF9wb3J0ICsgMTsKKwlpZiAodGhpc191cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJZGJnICgiJXMgYWxyZWFkeSB3cml0aW5nIiwgX19GVU5DVElPTl9fKTsKKwkJbWRlbGF5KDUpOworCQlyZXR1cm4oLTEpOworCX0KKworCW1lbXNldCgmbXNnLCAwLCBzaXplb2YgKHN0cnVjdCBrZXlzcGFuX3VzYTkwX3BvcnRDb250cm9sTWVzc2FnZSkpOworCisJLyogT25seSBzZXQgYmF1ZCByYXRlIGlmIGl0J3MgY2hhbmdlZCAqLwkKKwlpZiAocF9wcml2LT5vbGRfYmF1ZCAhPSBwX3ByaXYtPmJhdWQpIHsKKwkJcF9wcml2LT5vbGRfYmF1ZCA9IHBfcHJpdi0+YmF1ZDsKKwkJbXNnLnNldENsb2NraW5nID0gMHgwMTsKKwkJaWYgKGRfZGV0YWlscy0+Y2FsY3VsYXRlX2JhdWRfcmF0ZQorCQkgICAgKHBfcHJpdi0+YmF1ZCwgZF9kZXRhaWxzLT5iYXVkY2xrLCAmbXNnLmJhdWRIaSwKKwkJICAgICAmbXNnLmJhdWRMbywgJnByZXNjYWxlciwgMCkgPT0gS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSApIHsKKwkJCWRiZygiJXMgLSBJbnZhbGlkIGJhdWQgcmF0ZSAlZCByZXF1ZXN0ZWQsIHVzaW5nIDk2MDAuIiwgX19GVU5DVElPTl9fLAorCQkJICAgIHBfcHJpdi0+YmF1ZCk7CisJCQlwX3ByaXYtPmJhdWQgPSA5NjAwOworCQkJZF9kZXRhaWxzLT5jYWxjdWxhdGVfYmF1ZF9yYXRlIChwX3ByaXYtPmJhdWQsIGRfZGV0YWlscy0+YmF1ZGNsaywgCisJCQkJJm1zZy5iYXVkSGksICZtc2cuYmF1ZExvLCAmcHJlc2NhbGVyLCAwKTsKKwkJfQorCQltc2cuc2V0UnhNb2RlID0gMTsKKwkJbXNnLnNldFR4TW9kZSA9IDE7CisJfQorCisJLyogbW9kZXMgbXVzdCBhbHdheXMgYmUgY29ycmVjdGx5IHNwZWNpZmllZCAqLworCWlmIChwX3ByaXYtPmJhdWQgPiA1NzYwMCkKKwl7CisJCW1zZy5yeE1vZGUgPSBSWE1PREVfRE1BOworCQltc2cudHhNb2RlID0gVFhNT0RFX0RNQTsKKwl9CisJZWxzZQorCXsKKwkJbXNnLnJ4TW9kZSA9IFJYTU9ERV9CWUhBTkQ7CisJCW1zZy50eE1vZGUgPSBUWE1PREVfQllIQU5EOworCX0KKworCW1zZy5sY3IgPSAocF9wcml2LT5jZmxhZyAmIENTVE9QQik/IFNUT1BCSVRTXzY3OF8yOiBTVE9QQklUU181Njc4XzE7CisJc3dpdGNoIChwX3ByaXYtPmNmbGFnICYgQ1NJWkUpIHsKKwljYXNlIENTNToKKwkJbXNnLmxjciB8PSBVU0FfREFUQUJJVFNfNTsKKwkJYnJlYWs7CisJY2FzZSBDUzY6CisJCW1zZy5sY3IgfD0gVVNBX0RBVEFCSVRTXzY7CisJCWJyZWFrOworCWNhc2UgQ1M3OgorCQltc2cubGNyIHw9IFVTQV9EQVRBQklUU183OworCQlicmVhazsKKwljYXNlIENTODoKKwkJbXNnLmxjciB8PSBVU0FfREFUQUJJVFNfODsKKwkJYnJlYWs7CisJfQorCWlmIChwX3ByaXYtPmNmbGFnICYgUEFSRU5CKSB7CisJCS8qIG5vdGUgVVNBX1BBUklUWV9OT05FID09IDAgKi8KKwkJbXNnLmxjciB8PSAocF9wcml2LT5jZmxhZyAmIFBBUk9ERCk/CisJCQlVU0FfUEFSSVRZX09ERDogVVNBX1BBUklUWV9FVkVOOworCX0KKwlpZiAocF9wcml2LT5vbGRfY2ZsYWcgIT0gcF9wcml2LT5jZmxhZykgeworCQlwX3ByaXYtPm9sZF9jZmxhZyA9IHBfcHJpdi0+Y2ZsYWc7CisJCW1zZy5zZXRMY3IgPSAweDAxOworCX0KKworCWlmIChwX3ByaXYtPmZsb3dfY29udHJvbCA9PSBmbG93X2N0cykKKwkJbXNnLnR4Rmxvd0NvbnRyb2wgPSBUWEZMT1dfQ1RTOworCW1zZy5zZXRUeEZsb3dDb250cm9sID0gMHgwMTsKKwltc2cuc2V0UnhGbG93Q29udHJvbCA9IDB4MDE7CisJCisJbXNnLnJ4Rm9yd2FyZGluZ0xlbmd0aCA9IDE2OworCW1zZy5yeEZvcndhcmRpbmdUaW1lb3V0ID0gMTY7CQorCW1zZy50eEFja1NldHRpbmcgPSAwOworCW1zZy54b25DaGFyID0gMTc7CisJbXNnLnhvZmZDaGFyID0gMTk7CisKKwkvKiBPcGVuaW5nIHBvcnQgKi8gCisJaWYgKHJlc2V0X3BvcnQgPT0gMSkgeworCQltc2cucG9ydEVuYWJsZWQgPSAxOworCQltc2cucnhGbHVzaCA9IDE7CisJCW1zZy50eEJyZWFrID0gKHBfcHJpdi0+YnJlYWtfb24pOworCX0KKwkvKiBDbG9zaW5nIHBvcnQgKi8KKwllbHNlIGlmIChyZXNldF9wb3J0ID09IDIpIHsKKwkJbXNnLnBvcnRFbmFibGVkID0gMDsKKwl9CisJLyogU2VuZGluZyBpbnRlcm1lZGlhdGUgY29uZmlncyAqLworCWVsc2UgeworCQlpZiAocG9ydC0+b3Blbl9jb3VudCkKKwkJCW1zZy5wb3J0RW5hYmxlZCA9IDE7CisJCW1zZy50eEJyZWFrID0gKHBfcHJpdi0+YnJlYWtfb24pOworCX0KKworCS8qIERvIGhhbmRzaGFraW5nIG91dHB1dHMgKi8JCisJbXNnLnNldFJ0cyA9IDB4MDE7CisJbXNnLnJ0cyA9IHBfcHJpdi0+cnRzX3N0YXRlOworCisJbXNnLnNldER0ciA9IDB4MDE7CisJbXNnLmR0ciA9IHBfcHJpdi0+ZHRyX3N0YXRlOworCQkKKwlwX3ByaXYtPnJlc2VuZF9jb250ID0gMDsKKwltZW1jcHkgKHRoaXNfdXJiLT50cmFuc2Zlcl9idWZmZXIsICZtc2csIHNpemVvZihtc2cpKTsKKwkKKwkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgZGV2aWNlIG9uIGNvbnRyb2wgZW5kcG9pbnQgKi8KKwl0aGlzX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHNpemVvZihtc2cpOworCisJdGhpc191cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIodGhpc191cmIsIEdGUF9BVE9NSUMpKSAhPSAwKSB7CisJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihzZXR1cCkgZmFpbGVkICglZCkiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJfQorCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkIGtleXNwYW5fc2VuZF9zZXR1cChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgcmVzZXRfcG9ydCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCBrZXlzcGFuX3NlcmlhbF9wcml2YXRlICpzX3ByaXY7CisJY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMgKmRfZGV0YWlsczsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXNfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKwlkX2RldGFpbHMgPSBzX3ByaXYtPmRldmljZV9kZXRhaWxzOworCisJc3dpdGNoIChkX2RldGFpbHMtPm1zZ19mb3JtYXQpIHsKKwljYXNlIG1zZ191c2EyNjoKKwkJa2V5c3Bhbl91c2EyNl9zZW5kX3NldHVwKHNlcmlhbCwgcG9ydCwgcmVzZXRfcG9ydCk7CisJCWJyZWFrOworCWNhc2UgbXNnX3VzYTI4OgorCQlrZXlzcGFuX3VzYTI4X3NlbmRfc2V0dXAoc2VyaWFsLCBwb3J0LCByZXNldF9wb3J0KTsKKwkJYnJlYWs7CisJY2FzZSBtc2dfdXNhNDk6CisJCWtleXNwYW5fdXNhNDlfc2VuZF9zZXR1cChzZXJpYWwsIHBvcnQsIHJlc2V0X3BvcnQpOworCQlicmVhazsKKwljYXNlIG1zZ191c2E5MDoKKwkJa2V5c3Bhbl91c2E5MF9zZW5kX3NldHVwKHNlcmlhbCwgcG9ydCwgcmVzZXRfcG9ydCk7CisJCWJyZWFrOworCX0KK30KKworCisvKiBHZXRzIGNhbGxlZCBieSB0aGUgInJlYWwiIGRyaXZlciAoaWUgb25jZSBmaXJtd2FyZSBpcyBsb2FkZWQKKyAgIGFuZCByZW51bWVyYXRpb24gaGFzIHRha2VuIHBsYWNlLiAqLworc3RhdGljIGludCBrZXlzcGFuX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50CQkJCWksIGVycjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CQkqcG9ydDsKKwlzdHJ1Y3Qga2V5c3Bhbl9zZXJpYWxfcHJpdmF0ZSAJKnNfcHJpdjsKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUJKnBfcHJpdjsKKwljb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscwkqZF9kZXRhaWxzOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlmb3IgKGkgPSAwOyAoZF9kZXRhaWxzID0ga2V5c3Bhbl9kZXZpY2VzW2ldKSAhPSBOVUxMOyArK2kpCisJCWlmIChkX2RldGFpbHMtPnByb2R1Y3RfaWQgPT0gbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSkKKwkJCWJyZWFrOworCWlmIChkX2RldGFpbHMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSB1bmtub3duIHByb2R1Y3QgaWQgJXhcbiIsIF9fRlVOQ1RJT05fXywgbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisJCXJldHVybiAxOworCX0KKworCS8qIFNldHVwIHByaXZhdGUgZGF0YSBmb3Igc2VyaWFsIGRyaXZlciAqLworCXNfcHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrZXlzcGFuX3NlcmlhbF9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzX3ByaXYpIHsKKwkJZGJnKCIlcyAtIGttYWxsb2MgZm9yIGtleXNwYW5fc2VyaWFsX3ByaXZhdGUgZmFpbGVkLiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQoc19wcml2LCAwLCBzaXplb2Yoc3RydWN0IGtleXNwYW5fc2VyaWFsX3ByaXZhdGUpKTsKKworCXNfcHJpdi0+ZGV2aWNlX2RldGFpbHMgPSBkX2RldGFpbHM7CisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIHNfcHJpdik7CisKKwkvKiBOb3cgc2V0dXAgcGVyIHBvcnQgcHJpdmF0ZSBkYXRhICovCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJcF9wcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcF9wcml2KSB7CisJCQlkYmcoIiVzIC0ga21hbGxvYyBmb3Iga2V5c3Bhbl9wb3J0X3ByaXZhdGUgKCVkKSBmYWlsZWQhLiIsIF9fRlVOQ1RJT05fXywgaSk7CisJCQlyZXR1cm4gKDEpOworCQl9CisJCW1lbXNldChwX3ByaXYsIDAsIHNpemVvZihzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUpKTsKKwkJcF9wcml2LT5kZXZpY2VfZGV0YWlscyA9IGRfZGV0YWlsczsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIHBfcHJpdik7CisJfQorCisJa2V5c3Bhbl9zZXR1cF91cmJzKHNlcmlhbCk7CisKKwlzX3ByaXYtPmluc3RhdF91cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIoc19wcml2LT5pbnN0YXRfdXJiLCBHRlBfS0VSTkVMKSkgIT0gMCkgeworCQlkYmcoIiVzIC0gc3VibWl0IGluc3RhdCB1cmIgZmFpbGVkICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCX0KKwkJCQorCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkIGtleXNwYW5fc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50CQkJCWksIGo7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkJKnBvcnQ7CisJc3RydWN0IGtleXNwYW5fc2VyaWFsX3ByaXZhdGUgCSpzX3ByaXY7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlCSpwX3ByaXY7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXNfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKworCS8qIFN0b3AgcmVhZGluZy93cml0aW5nIHVyYnMgKi8KKwlzdG9wX3VyYihzX3ByaXYtPmluc3RhdF91cmIpOworCXN0b3BfdXJiKHNfcHJpdi0+Z2xvY29udF91cmIpOworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkJc3RvcF91cmIocF9wcml2LT5pbmFja191cmIpOworCQlzdG9wX3VyYihwX3ByaXYtPm91dGNvbnRfdXJiKTsKKwkJZm9yIChqID0gMDsgaiA8IDI7IGorKykgeworCQkJc3RvcF91cmIocF9wcml2LT5pbl91cmJzW2pdKTsKKwkJCXN0b3BfdXJiKHBfcHJpdi0+b3V0X3VyYnNbal0pOworCQl9CisJfQorCisJLyogTm93IGZyZWUgdGhlbSAqLworCWlmIChzX3ByaXYtPmluc3RhdF91cmIpCisJCXVzYl9mcmVlX3VyYihzX3ByaXYtPmluc3RhdF91cmIpOworCWlmIChzX3ByaXYtPmdsb2NvbnRfdXJiKQorCQl1c2JfZnJlZV91cmIoc19wcml2LT5nbG9jb250X3VyYik7CisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQlpZiAocF9wcml2LT5pbmFja191cmIpCisJCQl1c2JfZnJlZV91cmIocF9wcml2LT5pbmFja191cmIpOworCQlpZiAocF9wcml2LT5vdXRjb250X3VyYikKKwkJCXVzYl9mcmVlX3VyYihwX3ByaXYtPm91dGNvbnRfdXJiKTsKKwkJZm9yIChqID0gMDsgaiA8IDI7IGorKykgeworCQkJaWYgKHBfcHJpdi0+aW5fdXJic1tqXSkKKwkJCQl1c2JfZnJlZV91cmIocF9wcml2LT5pbl91cmJzW2pdKTsKKwkJCWlmIChwX3ByaXYtPm91dF91cmJzW2pdKQorCQkJCXVzYl9mcmVlX3VyYihwX3ByaXYtPm91dF91cmJzW2pdKTsKKwkJfQorCX0KKworCS8qICBkYmcoIkZyZWVpbmcgc2VyaWFsLT5wcml2YXRlLiIpOyAqLworCWtmcmVlKHNfcHJpdik7CisKKwkvKiAgZGJnKCJGcmVlaW5nIHBvcnQtPnByaXZhdGUuIik7ICovCisJLyogTm93IGZyZWUgcGVyIHBvcnQgcHJpdmF0ZSBkYXRhICovCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJa2ZyZWUodXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpKTsKKwl9Cit9CisKK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTliNDViNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmgKQEAgLTAsMCArMSw2NjAgQEAKKy8qCisgIEtleXNwYW4gVVNCIHRvIFNlcmlhbCBDb252ZXJ0ZXIgZHJpdmVyCisgCisgIChDKSBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMQorICAgICAgSHVnaCBCbGVtaW5ncyA8aHVnaEBibGVtaW5ncy5vcmc+CisgICAKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBTZWUgaHR0cDovL21pc2MubnUvaHVnaC9rZXlzcGFuLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgIAorICBDb2RlIGluIHRoaXMgZHJpdmVyIGluc3BpcmVkIGJ5IGFuZCBpbiBhIG51bWJlciBvZiBwbGFjZXMgdGFrZW4KKyAgZnJvbSBCcmlhbiBXYXJuZXIncyBvcmlnaW5hbCBLZXlzcGFuLVBEQSBkcml2ZXIuCisKKyAgVGhpcyBkcml2ZXIgaGFzIGJlZW4gcHV0IHRvZ2V0aGVyIHdpdGggdGhlIHN1cHBvcnQgb2YgSW5ub3N5cywgSW5jLgorICBhbmQgS2V5c3BhbiwgSW5jIHRoZSBtYW51ZmFjdHVyZXJzIG9mIHRoZSBLZXlzcGFuIFVTQi1zZXJpYWwgcHJvZHVjdHMuCisgIFRoYW5rcyBHdXlzIDopCisgIAorICBUaGFua3MgdG8gUGF1bHVzIGZvciBtaXNjZWxsYW5lb3VzIHRpZHkgdXBzLCBzb21lIGxhcmdpc2ggY2h1bmtzCisgIG9mIG11Y2ggbmljZXIgYW5kL29yIGNvbXBsZXRlbHkgbmV3IGNvZGUgYW5kIChwZXJoYXBzIG1vc3QgdW5pcXVlbHkpCisgIGhhdmluZyB0aGUgcGF0aWVuY2UgdG8gc2l0IGRvd24gYW5kIGV4cGxhaW4gd2h5IGFuZCB3aGVyZSBoZSdkIGNoYW5nZWQKKyAgc3R1ZmYuCisKKyAgVGlwICdvIHRoZSBoYXQgdG8gSUJNIChhbmQgcHJldmlvdXNseSBMaW51eGNhcmUgOikgZm9yIHN1cHBvcnRpbmcgCisgIHN0YWZmIGluIHRoZWlyIHdvcmsgb24gb3BlbiBzb3VyY2UgcHJvamVjdHMuCisgIAorICBTZWUga2V5c3Bhbi5jIGZvciB1cGRhdGUgaGlzdG9yeS4KKworKi8KKworI2lmbmRlZiBfX0xJTlVYX1VTQl9TRVJJQUxfS0VZU1BBTl9ICisjZGVmaW5lIF9fTElOVVhfVVNCX1NFUklBTF9LRVlTUEFOX0gKKworCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzIGZvciBLZXlzcGFuIHNlcmlhbCBjb252ZXJ0ZXIgKi8KK3N0YXRpYyBpbnQgIGtleXNwYW5fb3BlbgkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCBrZXlzcGFuX2Nsb3NlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIGtleXNwYW5fc3RhcnR1cAkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIHZvaWQga2V5c3Bhbl9zaHV0ZG93bgkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIHZvaWQga2V5c3Bhbl9yeF90aHJvdHRsZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQga2V5c3Bhbl9yeF91bnRocm90dGxlCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgIGtleXNwYW5fd3JpdGVfcm9vbQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworCitzdGF0aWMgaW50ICBrZXlzcGFuX3dyaXRlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCQkJIGludCBjb3VudCk7CisKK3N0YXRpYyB2b2lkIGtleXNwYW5fc2VuZF9zZXR1cAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSBpbnQgcmVzZXRfcG9ydCk7CisKKworc3RhdGljIGludCAga2V5c3Bhbl9jaGFyc19pbl9idWZmZXIgCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgIGtleXNwYW5faW9jdGwJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCSB1bnNpZ25lZCBpbnQgY21kLAorCQkJCQkgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIHZvaWQga2V5c3Bhbl9zZXRfdGVybWlvcwkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSBzdHJ1Y3QgdGVybWlvcyAqb2xkKTsKK3N0YXRpYyB2b2lkIGtleXNwYW5fYnJlYWtfY3RsCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJIGludCBicmVha19zdGF0ZSk7CitzdGF0aWMgaW50ICBrZXlzcGFuX3Rpb2NtZ2V0CQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgIGtleXNwYW5fdGlvY21zZXQJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBzZXQsCisJCQkJCSB1bnNpZ25lZCBpbnQgY2xlYXIpOworc3RhdGljIGludCAga2V5c3Bhbl9mYWtlX3N0YXJ0dXAJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworCitzdGF0aWMgaW50ICBrZXlzcGFuX3VzYTE5X2NhbGNfYmF1ZAkodTMyIGJhdWRfcmF0ZSwgdTMyIGJhdWRjbGssIAorCQkJCQkgdTggKnJhdGVfaGksIHU4ICpyYXRlX2xvdywKKwkJCQkJIHU4ICpwcmVzY2FsZXIsIGludCBwb3J0bnVtKTsKKworc3RhdGljIGludCAga2V5c3Bhbl91c2ExOXdfY2FsY19iYXVkCSh1MzIgYmF1ZF9yYXRlLCB1MzIgYmF1ZGNsaywKKwkJCQkJIHU4ICpyYXRlX2hpLCB1OCAqcmF0ZV9sb3csCisJCQkJCSB1OCAqcHJlc2NhbGVyLCBpbnQgcG9ydG51bSk7CisKK3N0YXRpYyBpbnQgIGtleXNwYW5fdXNhMjhfY2FsY19iYXVkCSh1MzIgYmF1ZF9yYXRlLCB1MzIgYmF1ZGNsaywKKwkJCQkJIHU4ICpyYXRlX2hpLCB1OCAqcmF0ZV9sb3csCisJCQkJCSB1OCAqcHJlc2NhbGVyLCBpbnQgcG9ydG51bSk7CisKK3N0YXRpYyBpbnQgIGtleXNwYW5fdXNhMTloc19jYWxjX2JhdWQJKHUzMiBiYXVkX3JhdGUsIHUzMiBiYXVkY2xrLAorCQkJCQkgdTggKnJhdGVfaGksIHU4ICpyYXRlX2xvdywKKwkJCQkJIHU4ICpwcmVzY2FsZXIsIGludCBwb3J0bnVtKTsKKworc3RhdGljIGludCAga2V5c3Bhbl91c2EyOF9zZW5kX3NldHVwCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJCQkgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJIGludCByZXNldF9wb3J0KTsKK3N0YXRpYyBpbnQgIGtleXNwYW5fdXNhMjZfc2VuZF9zZXR1cAkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkgICAgICAgCQkJCSBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgaW50IHJlc2V0X3BvcnQpOworc3RhdGljIGludCAga2V5c3Bhbl91c2E0OV9zZW5kX3NldHVwCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJCQkgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJIGludCByZXNldF9wb3J0KTsKKworc3RhdGljIGludCAga2V5c3Bhbl91c2E5MF9zZW5kX3NldHVwCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJCQkgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJIGludCByZXNldF9wb3J0KTsKKworLyogU3RydWN0IHVzZWQgZm9yIGZpcm13YXJlIC0gaW5jcmVhc2VkIHNpemUgb2YgZGF0YSBzZWN0aW9uCisgICB0byBhbGxvdyBLZXlzcGFuJ3MgJ0MnIGZpcm13YXJlIHN0cnVjdCB0byBiZSB1c2VkIHVubW9kaWZpZWQgKi8KK3N0cnVjdCBlenVzYl9oZXhfcmVjb3JkIHsKKwlfX3UxNiBhZGRyZXNzOworCV9fdTggZGF0YV9zaXplOworCV9fdTggZGF0YVs2NF07Cit9OworCisvKiBDb25kaXRpb25hbGx5IGluY2x1ZGUgZmlybXdhcmUgaW1hZ2VzLCBpZiB0aGV5IGFyZW4ndAorICAgaW5jbHVkZWQgY3JlYXRlIGEgbnVsbCBwb2ludGVyIGluc3RlYWQuICBDdXJyZW50IAorICAgZmlybXdhcmUgaW1hZ2VzIGFyZW4ndCBvcHRpbWlzZWQgdG8gcmVtb3ZlIGR1cGxpY2F0ZQorICAgYWRkcmVzc2VzIGluIHRoZSBpbWFnZSBpdHNlbGYuICovCisjaWZkZWYgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOAorCSNpbmNsdWRlICJrZXlzcGFuX3VzYTI4X2Z3LmgiCisjZWxzZQorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCAqa2V5c3Bhbl91c2EyOF9maXJtd2FyZSA9IE5VTEw7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjhYCisJI2luY2x1ZGUgImtleXNwYW5fdXNhMjh4X2Z3LmgiCisjZWxzZQorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCAqa2V5c3Bhbl91c2EyOHhfZmlybXdhcmUgPSBOVUxMOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4WEEKKwkjaW5jbHVkZSAia2V5c3Bhbl91c2EyOHhhX2Z3LmgiCisjZWxzZQorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCAqa2V5c3Bhbl91c2EyOHhhX2Zpcm13YXJlID0gTlVMTDsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOFhCCisJI2luY2x1ZGUgImtleXNwYW5fdXNhMjh4Yl9mdy5oIgorI2Vsc2UKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGV6dXNiX2hleF9yZWNvcmQgKmtleXNwYW5fdXNhMjh4Yl9maXJtd2FyZSA9IE5VTEw7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTkKKwkjaW5jbHVkZSAia2V5c3Bhbl91c2ExOV9mdy5oIgorI2Vsc2UKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGV6dXNiX2hleF9yZWNvcmQgKmtleXNwYW5fdXNhMTlfZmlybXdhcmUgPSBOVUxMOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5UUkKKwkjaW5jbHVkZSAia2V5c3Bhbl91c2ExOXFpX2Z3LmgiCisjZWxzZQorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCAqa2V5c3Bhbl91c2ExOXFpX2Zpcm13YXJlID0gTlVMTDsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9NUFIKKyAgICAgICAgI2luY2x1ZGUgImtleXNwYW5fbXByX2Z3LmgiCisjZWxzZQorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCAqa2V5c3Bhbl9tcHJfZmlybXdhcmUgPSBOVUxMOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5UVcKKwkjaW5jbHVkZSAia2V5c3Bhbl91c2ExOXF3X2Z3LmgiCisjZWxzZQorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCAqa2V5c3Bhbl91c2ExOXF3X2Zpcm13YXJlID0gTlVMTDsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOFgKKwkjaW5jbHVkZSAia2V5c3Bhbl91c2ExOHhfZncuaCIKKyNlbHNlCisJc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkICprZXlzcGFuX3VzYTE4eF9maXJtd2FyZSA9IE5VTEw7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTlXCisJI2luY2x1ZGUgImtleXNwYW5fdXNhMTl3X2Z3LmgiCisjZWxzZQorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCAqa2V5c3Bhbl91c2ExOXdfZmlybXdhcmUgPSBOVUxMOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTQ5VworCSNpbmNsdWRlICJrZXlzcGFuX3VzYTQ5d19mdy5oIgorI2Vsc2UKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGV6dXNiX2hleF9yZWNvcmQgKmtleXNwYW5fdXNhNDl3X2Zpcm13YXJlID0gTlVMTDsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0E0OVdMQworICAgICAgICAjaW5jbHVkZSAia2V5c3Bhbl91c2E0OXdsY19mdy5oIgorI2Vsc2UKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGV6dXNiX2hleF9yZWNvcmQgKmtleXNwYW5fdXNhNDl3bGNfZmlybXdhcmUgPSBOVUxMOworI2VuZGlmCisKKy8qIFZhbHVlcyB1c2VkIGZvciBiYXVkIHJhdGUgY2FsY3VsYXRpb24gLSBkZXZpY2Ugc3BlY2lmaWMgKi8KKyNkZWZpbmUJS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURQkJKC0xKQorI2RlZmluZQlLRVlTUEFOX0JBVURfUkFURV9PSwkJCSgwKQorI2RlZmluZQlLRVlTUEFOX1VTQTE4WF9CQVVEQ0xLCQkJKDEyMDAwMDAwTCkJLyogYSBndWVzcyAqLworI2RlZmluZQlLRVlTUEFOX1VTQTE5X0JBVURDTEsJCQkoMTIwMDAwMDBMKQorI2RlZmluZQlLRVlTUEFOX1VTQTE5V19CQVVEQ0xLCQkJKDI0MDAwMDAwTCkKKyNkZWZpbmUJS0VZU1BBTl9VU0ExOUhTX0JBVURDTEsJCQkoMTQ3NjkyMzFMKQorI2RlZmluZQlLRVlTUEFOX1VTQTI4X0JBVURDTEsJCQkoMTg0MzIwMEwpCisjZGVmaW5lCUtFWVNQQU5fVVNBMjhYX0JBVURDTEsJCQkoMTIwMDAwMDBMKQorI2RlZmluZQlLRVlTUEFOX1VTQTQ5V19CQVVEQ0xLCQkJKDQ4MDAwMDAwTCkKKworLyogU29tZSBjb25zdGFudHMgdXNlZCB0byBjaGFyYWN0ZXJpc2UgZWFjaCBkZXZpY2UuICAqLworI2RlZmluZQkJS0VZU1BBTl9NQVhfTlVNX1BPUlRTCQkoNCkKKyNkZWZpbmUJCUtFWVNQQU5fTUFYX0ZMSVBTCQkoMikKKworLyogRGV2aWNlIGluZm8gZm9yIHRoZSBLZXlzcGFuIHNlcmlhbCBjb252ZXJ0ZXIsIHVzZWQKKyAgIGJ5IHRoZSBvdmVyYWxsIHVzYi1zZXJpYWwgcHJvYmUgZnVuY3Rpb24gKi8KKyNkZWZpbmUgS0VZU1BBTl9WRU5ET1JfSUQJCQkoMHgwNmNkKQorCisvKiBQcm9kdWN0IElEcyBmb3IgdGhlIHByb2R1Y3RzIHN1cHBvcnRlZCwgcHJlLXJlbnVtZXJhdGlvbiAqLworI2RlZmluZQlrZXlzcGFuX3VzYTE4eF9wcmVfcHJvZHVjdF9pZAkJMHgwMTA1CisjZGVmaW5lCWtleXNwYW5fdXNhMTlfcHJlX3Byb2R1Y3RfaWQJCTB4MDEwMworI2RlZmluZQlrZXlzcGFuX3VzYTE5cWlfcHJlX3Byb2R1Y3RfaWQJCTB4MDEwYgorI2RlZmluZQlrZXlzcGFuX21wcl9wcmVfcHJvZHVjdF9pZAkJMHgwMTFiCisjZGVmaW5lCWtleXNwYW5fdXNhMTlxd19wcmVfcHJvZHVjdF9pZAkJMHgwMTE4CisjZGVmaW5lCWtleXNwYW5fdXNhMTl3X3ByZV9wcm9kdWN0X2lkCQkweDAxMDYKKyNkZWZpbmUJa2V5c3Bhbl91c2EyOF9wcmVfcHJvZHVjdF9pZAkJMHgwMTAxCisjZGVmaW5lCWtleXNwYW5fdXNhMjh4X3ByZV9wcm9kdWN0X2lkCQkweDAxMDIKKyNkZWZpbmUJa2V5c3Bhbl91c2EyOHhhX3ByZV9wcm9kdWN0X2lkCQkweDAxMTQKKyNkZWZpbmUJa2V5c3Bhbl91c2EyOHhiX3ByZV9wcm9kdWN0X2lkCQkweDAxMTMKKyNkZWZpbmUJa2V5c3Bhbl91c2E0OXdfcHJlX3Byb2R1Y3RfaWQJCTB4MDEwOQorI2RlZmluZQlrZXlzcGFuX3VzYTQ5d2xjX3ByZV9wcm9kdWN0X2lkCQkweDAxMWEKKworLyogUHJvZHVjdCBJRHMgcG9zdC1yZW51bWVyYXRpb24uICBOb3RlIHRoYXQgdGhlIDI4eCBhbmQgMjh4YgorICAgaGF2ZSB0aGUgc2FtZSBpZCdzIHBvc3QtcmVudW1lcmF0aW9uIGJ1dCBiZWhhdmUgaWRlbnRpY2FsbHkKKyAgIHNvIGl0J3Mgbm90IGFuIGlzc3VlLiAqLworI2RlZmluZQlrZXlzcGFuX3VzYTE4eF9wcm9kdWN0X2lkCQkweDAxMTIKKyNkZWZpbmUJa2V5c3Bhbl91c2ExOV9wcm9kdWN0X2lkCQkweDAxMDcKKyNkZWZpbmUJa2V5c3Bhbl91c2ExOXFpX3Byb2R1Y3RfaWQJCTB4MDEwYworI2RlZmluZQlrZXlzcGFuX3VzYTE5aHNfcHJvZHVjdF9pZAkJMHgwMTIxCisjZGVmaW5lCWtleXNwYW5fbXByX3Byb2R1Y3RfaWQJCQkweDAxMWMKKyNkZWZpbmUJa2V5c3Bhbl91c2ExOXF3X3Byb2R1Y3RfaWQJCTB4MDExOQorI2RlZmluZQlrZXlzcGFuX3VzYTE5d19wcm9kdWN0X2lkCQkweDAxMDgKKyNkZWZpbmUJa2V5c3Bhbl91c2EyOF9wcm9kdWN0X2lkCQkweDAxMGYKKyNkZWZpbmUJa2V5c3Bhbl91c2EyOHhfcHJvZHVjdF9pZAkJMHgwMTEwCisjZGVmaW5lCWtleXNwYW5fdXNhMjh4YV9wcm9kdWN0X2lkCQkweDAxMTUKKyNkZWZpbmUJa2V5c3Bhbl91c2EyOHhiX3Byb2R1Y3RfaWQJCTB4MDExMAorI2RlZmluZQlrZXlzcGFuX3VzYTQ5d19wcm9kdWN0X2lkCQkweDAxMGEKKyNkZWZpbmUJa2V5c3Bhbl91c2E0OXdsY19wcm9kdWN0X2lkCQkweDAxMmEKKworCitzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscyB7CisJLyogcHJvZHVjdCBJRCB2YWx1ZSAqLworCWludAlwcm9kdWN0X2lkOworCisJZW51bQl7bXNnX3VzYTI2LCBtc2dfdXNhMjgsIG1zZ191c2E0OSwgbXNnX3VzYTkwfSBtc2dfZm9ybWF0OworCisJCS8qIE51bWJlciBvZiBwaHlzaWNhbCBwb3J0cyAqLworCWludAludW1fcG9ydHM7CisKKwkJLyogMSBpZiBlbmRwb2ludCBmbGlwcGluZyB1c2VkIG9uIGlucHV0LCAwIGlmIG5vdCAqLworCWludAlpbmRhdF9lbmRwX2ZsaXA7CisKKwkJLyogMSBpZiBlbmRwb2ludCBmbGlwcGluZyB1c2VkIG9uIG91dHB1dCwgMCBpZiBub3QgKi8KKwlpbnQgCW91dGRhdF9lbmRwX2ZsaXA7CisKKwkJLyogVGFibGUgbWFwcGluZyBpbnB1dCBkYXRhIGVuZHBvaW50IElEcyB0byBwaHlzaWNhbAorCQkgICBwb3J0IG51bWJlciBhbmQgZmxpcCBpZiB1c2VkICovCisJaW50CWluZGF0X2VuZHBvaW50c1tLRVlTUEFOX01BWF9OVU1fUE9SVFNdOworCisJCS8qIFNhbWUgZm9yIG91dHB1dCBlbmRwb2ludHMgKi8KKwlpbnQJb3V0ZGF0X2VuZHBvaW50c1tLRVlTUEFOX01BWF9OVU1fUE9SVFNdOworCisJCS8qIElucHV0IGFja25vd2xlZGdlIGVuZHBvaW50cyAqLworCWludAlpbmFja19lbmRwb2ludHNbS0VZU1BBTl9NQVhfTlVNX1BPUlRTXTsKKworCQkvKiBPdXRwdXQgY29udHJvbCBlbmRwb2ludHMgKi8KKwlpbnQJb3V0Y29udF9lbmRwb2ludHNbS0VZU1BBTl9NQVhfTlVNX1BPUlRTXTsKKworCQkvKiBFbmRwb2ludCB1c2VkIGZvciBpbnB1dCBzdGF0dXMgKi8KKwlpbnQJaW5zdGF0X2VuZHBvaW50OworCisJCS8qIEVuZHBvaW50IHVzZWQgZm9yIGdsb2JhbCBjb250cm9sIGZ1bmN0aW9ucyAqLworCWludAlnbG9jb250X2VuZHBvaW50OworCisJaW50CSgqY2FsY3VsYXRlX2JhdWRfcmF0ZSkgKHUzMiBiYXVkX3JhdGUsIHUzMiBiYXVkY2xrLAorCQkJdTggKnJhdGVfaGksIHU4ICpyYXRlX2xvdywgdTggKnByZXNjYWxlciwgaW50IHBvcnRudW0pOworCXUzMgliYXVkY2xrOworfTsgCisKKy8qIE5vdyBmb3IgZWFjaCBkZXZpY2UgdHlwZSB3ZSBzZXR1cCB0aGUgZGV2aWNlIGRldGFpbAorICAgc3RydWN0dXJlIHdpdGggdGhlIGFwcHJvcHJpYXRlIGluZm9ybWF0aW9uIChwcm92aWRlZAorICAgaW4gS2V5c3BhbidzIGRvY3VtZW50YXRpb24pICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscyB1c2ExOHhfZGV2aWNlX2RldGFpbHMgPSB7CisJLnByb2R1Y3RfaWQJCT0ga2V5c3Bhbl91c2ExOHhfcHJvZHVjdF9pZCwKKwkubXNnX2Zvcm1hdAkJPSBtc2dfdXNhMjYsCisJLm51bV9wb3J0cwkJPSAxLAorCS5pbmRhdF9lbmRwX2ZsaXAJPSAwLAorCS5vdXRkYXRfZW5kcF9mbGlwCT0gMSwKKwkuaW5kYXRfZW5kcG9pbnRzCT0gezB4ODF9LAorCS5vdXRkYXRfZW5kcG9pbnRzCT0gezB4MDF9LAorCS5pbmFja19lbmRwb2ludHMJPSB7MHg4NX0sCisJLm91dGNvbnRfZW5kcG9pbnRzCT0gezB4MDV9LAorCS5pbnN0YXRfZW5kcG9pbnQJPSAweDg3LAorCS5nbG9jb250X2VuZHBvaW50CT0gMHgwNywKKwkuY2FsY3VsYXRlX2JhdWRfcmF0ZQk9IGtleXNwYW5fdXNhMTl3X2NhbGNfYmF1ZCwKKwkuYmF1ZGNsawkJPSBLRVlTUEFOX1VTQTE4WF9CQVVEQ0xLLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzIHVzYTE5X2RldmljZV9kZXRhaWxzID0geworCS5wcm9kdWN0X2lkCQk9IGtleXNwYW5fdXNhMTlfcHJvZHVjdF9pZCwKKwkubXNnX2Zvcm1hdAkJPSBtc2dfdXNhMjgsCisJLm51bV9wb3J0cwkJPSAxLAorCS5pbmRhdF9lbmRwX2ZsaXAJPSAxLAorCS5vdXRkYXRfZW5kcF9mbGlwCT0gMSwKKwkuaW5kYXRfZW5kcG9pbnRzCT0gezB4ODF9LAorCS5vdXRkYXRfZW5kcG9pbnRzCT0gezB4MDF9LAorCS5pbmFja19lbmRwb2ludHMJPSB7MHg4M30sCisJLm91dGNvbnRfZW5kcG9pbnRzCT0gezB4MDN9LAorCS5pbnN0YXRfZW5kcG9pbnQJPSAweDg0LAorCS5nbG9jb250X2VuZHBvaW50CT0gLTEsCisJLmNhbGN1bGF0ZV9iYXVkX3JhdGUJPSBrZXlzcGFuX3VzYTE5X2NhbGNfYmF1ZCwKKwkuYmF1ZGNsawkJPSBLRVlTUEFOX1VTQTE5X0JBVURDTEssCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMgdXNhMTlxaV9kZXZpY2VfZGV0YWlscyA9IHsKKwkucHJvZHVjdF9pZAkJPSBrZXlzcGFuX3VzYTE5cWlfcHJvZHVjdF9pZCwKKwkubXNnX2Zvcm1hdAkJPSBtc2dfdXNhMjgsCisJLm51bV9wb3J0cwkJPSAxLAorCS5pbmRhdF9lbmRwX2ZsaXAJPSAxLAorCS5vdXRkYXRfZW5kcF9mbGlwCT0gMSwKKwkuaW5kYXRfZW5kcG9pbnRzCT0gezB4ODF9LAorCS5vdXRkYXRfZW5kcG9pbnRzCT0gezB4MDF9LAorCS5pbmFja19lbmRwb2ludHMJPSB7MHg4M30sCisJLm91dGNvbnRfZW5kcG9pbnRzCT0gezB4MDN9LAorCS5pbnN0YXRfZW5kcG9pbnQJPSAweDg0LAorCS5nbG9jb250X2VuZHBvaW50CT0gLTEsCisJLmNhbGN1bGF0ZV9iYXVkX3JhdGUJPSBrZXlzcGFuX3VzYTI4X2NhbGNfYmF1ZCwKKwkuYmF1ZGNsawkJPSBLRVlTUEFOX1VTQTE5X0JBVURDTEssCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMgbXByX2RldmljZV9kZXRhaWxzID0geworCS5wcm9kdWN0X2lkCQk9IGtleXNwYW5fbXByX3Byb2R1Y3RfaWQsCisJLm1zZ19mb3JtYXQJCT0gbXNnX3VzYTI4LAorCS5udW1fcG9ydHMJCT0gMSwKKwkuaW5kYXRfZW5kcF9mbGlwCT0gMSwKKwkub3V0ZGF0X2VuZHBfZmxpcAk9IDEsCisJLmluZGF0X2VuZHBvaW50cwk9IHsweDgxfSwKKwkub3V0ZGF0X2VuZHBvaW50cwk9IHsweDAxfSwKKwkuaW5hY2tfZW5kcG9pbnRzCT0gezB4ODN9LAorCS5vdXRjb250X2VuZHBvaW50cwk9IHsweDAzfSwKKwkuaW5zdGF0X2VuZHBvaW50CT0gMHg4NCwKKwkuZ2xvY29udF9lbmRwb2ludAk9IC0xLAorCS5jYWxjdWxhdGVfYmF1ZF9yYXRlCT0ga2V5c3Bhbl91c2EyOF9jYWxjX2JhdWQsCisJLmJhdWRjbGsJCT0gS0VZU1BBTl9VU0ExOV9CQVVEQ0xLLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzIHVzYTE5cXdfZGV2aWNlX2RldGFpbHMgPSB7CisJLnByb2R1Y3RfaWQJCT0ga2V5c3Bhbl91c2ExOXF3X3Byb2R1Y3RfaWQsCisJLm1zZ19mb3JtYXQJCT0gbXNnX3VzYTI2LAorCS5udW1fcG9ydHMJCT0gMSwKKwkuaW5kYXRfZW5kcF9mbGlwCT0gMCwKKwkub3V0ZGF0X2VuZHBfZmxpcAk9IDEsCisJLmluZGF0X2VuZHBvaW50cwk9IHsweDgxfSwKKwkub3V0ZGF0X2VuZHBvaW50cwk9IHsweDAxfSwKKwkuaW5hY2tfZW5kcG9pbnRzCT0gezB4ODV9LAorCS5vdXRjb250X2VuZHBvaW50cwk9IHsweDA1fSwKKwkuaW5zdGF0X2VuZHBvaW50CT0gMHg4NywKKwkuZ2xvY29udF9lbmRwb2ludAk9IDB4MDcsCisJLmNhbGN1bGF0ZV9iYXVkX3JhdGUJPSBrZXlzcGFuX3VzYTE5d19jYWxjX2JhdWQsCisJLmJhdWRjbGsJCT0gS0VZU1BBTl9VU0ExOVdfQkFVRENMSywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscyB1c2ExOXdfZGV2aWNlX2RldGFpbHMgPSB7CisJLnByb2R1Y3RfaWQJCT0ga2V5c3Bhbl91c2ExOXdfcHJvZHVjdF9pZCwKKwkubXNnX2Zvcm1hdAkJPSBtc2dfdXNhMjYsCisJLm51bV9wb3J0cwkJPSAxLAorCS5pbmRhdF9lbmRwX2ZsaXAJPSAwLAorCS5vdXRkYXRfZW5kcF9mbGlwCT0gMSwKKwkuaW5kYXRfZW5kcG9pbnRzCT0gezB4ODF9LAorCS5vdXRkYXRfZW5kcG9pbnRzCT0gezB4MDF9LAorCS5pbmFja19lbmRwb2ludHMJPSB7MHg4NX0sCisJLm91dGNvbnRfZW5kcG9pbnRzCT0gezB4MDV9LAorCS5pbnN0YXRfZW5kcG9pbnQJPSAweDg3LAorCS5nbG9jb250X2VuZHBvaW50CT0gMHgwNywKKwkuY2FsY3VsYXRlX2JhdWRfcmF0ZQk9IGtleXNwYW5fdXNhMTl3X2NhbGNfYmF1ZCwKKwkuYmF1ZGNsawkJPSBLRVlTUEFOX1VTQTE5V19CQVVEQ0xLLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzIHVzYTE5aHNfZGV2aWNlX2RldGFpbHMgPSB7CisJLnByb2R1Y3RfaWQJCT0ga2V5c3Bhbl91c2ExOWhzX3Byb2R1Y3RfaWQsCisJLm1zZ19mb3JtYXQJCT0gbXNnX3VzYTkwLAorCS5udW1fcG9ydHMJCT0gMSwKKwkuaW5kYXRfZW5kcF9mbGlwCT0gMCwKKwkub3V0ZGF0X2VuZHBfZmxpcAk9IDAsCisJLmluZGF0X2VuZHBvaW50cwk9IHsweDgxfSwKKwkub3V0ZGF0X2VuZHBvaW50cwk9IHsweDAxfSwKKwkuaW5hY2tfZW5kcG9pbnRzCT0gey0xfSwKKwkub3V0Y29udF9lbmRwb2ludHMJPSB7MHgwMn0sCisJLmluc3RhdF9lbmRwb2ludAk9IDB4ODIsCisJLmdsb2NvbnRfZW5kcG9pbnQJPSAtMSwKKwkuY2FsY3VsYXRlX2JhdWRfcmF0ZQk9IGtleXNwYW5fdXNhMTloc19jYWxjX2JhdWQsCisJLmJhdWRjbGsJCT0gS0VZU1BBTl9VU0ExOUhTX0JBVURDTEssCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMgdXNhMjhfZGV2aWNlX2RldGFpbHMgPSB7CisJLnByb2R1Y3RfaWQJCT0ga2V5c3Bhbl91c2EyOF9wcm9kdWN0X2lkLAorCS5tc2dfZm9ybWF0CQk9IG1zZ191c2EyOCwKKwkubnVtX3BvcnRzCQk9IDIsCisJLmluZGF0X2VuZHBfZmxpcAk9IDEsCisJLm91dGRhdF9lbmRwX2ZsaXAJPSAxLAorCS5pbmRhdF9lbmRwb2ludHMJPSB7MHg4MSwgMHg4M30sCisJLm91dGRhdF9lbmRwb2ludHMJPSB7MHgwMSwgMHgwM30sCisJLmluYWNrX2VuZHBvaW50cwk9IHsweDg1LCAweDg2fSwKKwkub3V0Y29udF9lbmRwb2ludHMJPSB7MHgwNSwgMHgwNn0sCisJLmluc3RhdF9lbmRwb2ludAk9IDB4ODcsCisJLmdsb2NvbnRfZW5kcG9pbnQJPSAweDA3LAorCS5jYWxjdWxhdGVfYmF1ZF9yYXRlCT0ga2V5c3Bhbl91c2EyOF9jYWxjX2JhdWQsCisJLmJhdWRjbGsJCT0gS0VZU1BBTl9VU0EyOF9CQVVEQ0xLLAkJCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMgdXNhMjh4X2RldmljZV9kZXRhaWxzID0geworCS5wcm9kdWN0X2lkCQk9IGtleXNwYW5fdXNhMjh4X3Byb2R1Y3RfaWQsCisJLm1zZ19mb3JtYXQJCT0gbXNnX3VzYTI2LAorCS5udW1fcG9ydHMJCT0gMiwKKwkuaW5kYXRfZW5kcF9mbGlwCT0gMCwKKwkub3V0ZGF0X2VuZHBfZmxpcAk9IDEsCisJLmluZGF0X2VuZHBvaW50cwk9IHsweDgxLCAweDgzfSwKKwkub3V0ZGF0X2VuZHBvaW50cwk9IHsweDAxLCAweDAzfSwKKwkuaW5hY2tfZW5kcG9pbnRzCT0gezB4ODUsIDB4ODZ9LAorCS5vdXRjb250X2VuZHBvaW50cwk9IHsweDA1LCAweDA2fSwKKwkuaW5zdGF0X2VuZHBvaW50CT0gMHg4NywKKwkuZ2xvY29udF9lbmRwb2ludAk9IDB4MDcsCisJLmNhbGN1bGF0ZV9iYXVkX3JhdGUJPSBrZXlzcGFuX3VzYTE5d19jYWxjX2JhdWQsCisJLmJhdWRjbGsJCT0gS0VZU1BBTl9VU0EyOFhfQkFVRENMSywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscyB1c2EyOHhhX2RldmljZV9kZXRhaWxzID0geworCS5wcm9kdWN0X2lkCQk9IGtleXNwYW5fdXNhMjh4YV9wcm9kdWN0X2lkLAorCS5tc2dfZm9ybWF0CQk9IG1zZ191c2EyNiwKKwkubnVtX3BvcnRzCQk9IDIsCisJLmluZGF0X2VuZHBfZmxpcAk9IDAsCisJLm91dGRhdF9lbmRwX2ZsaXAJPSAxLAorCS5pbmRhdF9lbmRwb2ludHMJPSB7MHg4MSwgMHg4M30sCisJLm91dGRhdF9lbmRwb2ludHMJPSB7MHgwMSwgMHgwM30sCisJLmluYWNrX2VuZHBvaW50cwk9IHsweDg1LCAweDg2fSwKKwkub3V0Y29udF9lbmRwb2ludHMJPSB7MHgwNSwgMHgwNn0sCisJLmluc3RhdF9lbmRwb2ludAk9IDB4ODcsCisJLmdsb2NvbnRfZW5kcG9pbnQJPSAweDA3LAorCS5jYWxjdWxhdGVfYmF1ZF9yYXRlCT0ga2V5c3Bhbl91c2ExOXdfY2FsY19iYXVkLAorCS5iYXVkY2xrCQk9IEtFWVNQQU5fVVNBMjhYX0JBVURDTEssCit9OworCisvKiBXZSBkb24ndCBuZWVkIGEgc2VwYXJhdGUgZW50cnkgZm9yIHRoZSB1c2EyOHhiIGFzIGl0IGFwcGVhcnMgYXMgYSAyOHggYW55d2F5ICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscyB1c2E0OXdfZGV2aWNlX2RldGFpbHMgPSB7CisJLnByb2R1Y3RfaWQJCT0ga2V5c3Bhbl91c2E0OXdfcHJvZHVjdF9pZCwKKwkubXNnX2Zvcm1hdAkJPSBtc2dfdXNhNDksCisJLm51bV9wb3J0cwkJPSA0LAorCS5pbmRhdF9lbmRwX2ZsaXAJPSAwLAorCS5vdXRkYXRfZW5kcF9mbGlwCT0gMCwKKwkuaW5kYXRfZW5kcG9pbnRzCT0gezB4ODEsIDB4ODIsIDB4ODMsIDB4ODR9LAorCS5vdXRkYXRfZW5kcG9pbnRzCT0gezB4MDEsIDB4MDIsIDB4MDMsIDB4MDR9LAorCS5pbmFja19lbmRwb2ludHMJPSB7LTEsIC0xLCAtMSwgLTF9LAorCS5vdXRjb250X2VuZHBvaW50cwk9IHstMSwgLTEsIC0xLCAtMX0sCisJLmluc3RhdF9lbmRwb2ludAk9IDB4ODcsCisJLmdsb2NvbnRfZW5kcG9pbnQJPSAweDA3LAorCS5jYWxjdWxhdGVfYmF1ZF9yYXRlCT0ga2V5c3Bhbl91c2ExOXdfY2FsY19iYXVkLAorCS5iYXVkY2xrCQk9IEtFWVNQQU5fVVNBNDlXX0JBVURDTEssCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMgdXNhNDl3bGNfZGV2aWNlX2RldGFpbHMgPSB7CisJLnByb2R1Y3RfaWQJCT0ga2V5c3Bhbl91c2E0OXdsY19wcm9kdWN0X2lkLAorCS5tc2dfZm9ybWF0CQk9IG1zZ191c2E0OSwKKwkubnVtX3BvcnRzCQk9IDQsCisJLmluZGF0X2VuZHBfZmxpcAk9IDAsCisJLm91dGRhdF9lbmRwX2ZsaXAJPSAwLAorCS5pbmRhdF9lbmRwb2ludHMJPSB7MHg4MSwgMHg4MiwgMHg4MywgMHg4NH0sCisJLm91dGRhdF9lbmRwb2ludHMJPSB7MHgwMSwgMHgwMiwgMHgwMywgMHgwNH0sCisJLmluYWNrX2VuZHBvaW50cwk9IHstMSwgLTEsIC0xLCAtMX0sCisJLm91dGNvbnRfZW5kcG9pbnRzCT0gey0xLCAtMSwgLTEsIC0xfSwKKwkuaW5zdGF0X2VuZHBvaW50CT0gMHg4NywKKwkuZ2xvY29udF9lbmRwb2ludAk9IDB4MDcsCisJLmNhbGN1bGF0ZV9iYXVkX3JhdGUJPSBrZXlzcGFuX3VzYTE5d19jYWxjX2JhdWQsCisJLmJhdWRjbGsJCT0gS0VZU1BBTl9VU0ExOVdfQkFVRENMSywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscyAqa2V5c3Bhbl9kZXZpY2VzW10gPSB7CisJJnVzYTE4eF9kZXZpY2VfZGV0YWlscywKKwkmdXNhMTlfZGV2aWNlX2RldGFpbHMsCisJJnVzYTE5cWlfZGV2aWNlX2RldGFpbHMsCisJJm1wcl9kZXZpY2VfZGV0YWlscywKKwkmdXNhMTlxd19kZXZpY2VfZGV0YWlscywKKwkmdXNhMTl3X2RldmljZV9kZXRhaWxzLAorCSZ1c2ExOWhzX2RldmljZV9kZXRhaWxzLAorCSZ1c2EyOF9kZXZpY2VfZGV0YWlscywKKwkmdXNhMjh4X2RldmljZV9kZXRhaWxzLAorCSZ1c2EyOHhhX2RldmljZV9kZXRhaWxzLAorCS8qIDI4eGIgbm90IHJlcXVpcmVkIGFzIGl0IHJlbnVtZXJhdGVzIGFzIGEgMjh4ICovCisJJnVzYTQ5d19kZXZpY2VfZGV0YWlscywKKwkmdXNhNDl3bGNfZGV2aWNlX2RldGFpbHMsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBrZXlzcGFuX2lkc19jb21iaW5lZFtdID0geworCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOHhfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5X3ByZV9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOXdfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5cWlfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5cXdfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX21wcl9wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjhfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTI4eF9wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjh4YV9wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjh4Yl9wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhNDl3X3ByZV9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2E0OXdsY19wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTh4X3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5X3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5d19wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOXFpX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5cXdfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTloc19wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl9tcHJfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjhfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjh4X3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTI4eGFfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjh4Yl9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2E0OXdfcHJvZHVjdF9pZCl9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2E0OXdsY19wcm9kdWN0X2lkKX0sCisJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwga2V5c3Bhbl9pZHNfY29tYmluZWQpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIga2V5c3Bhbl9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImtleXNwYW4iLCAgICAgICAgICAgICAgICAKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWtleXNwYW5faWRzX2NvbWJpbmVkLAorfTsKKworLyogdXNiX2RldmljZV9pZCB0YWJsZSBmb3IgdGhlIHByZS1maXJtd2FyZSBkb3dubG9hZCBrZXlzcGFuIGRldmljZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBrZXlzcGFuX3ByZV9pZHNbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTh4X3ByZV9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOV9wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTlxaV9wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTlxd19wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTl3X3ByZV9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl9tcHJfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTI4X3ByZV9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2EyOHhfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTI4eGFfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTI4eGJfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTQ5d19wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhNDl3bGNfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQga2V5c3Bhbl8xcG9ydF9pZHNbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTh4X3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5X3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5cWlfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTlxd19wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOXdfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTloc19wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl9tcHJfcHJvZHVjdF9pZCkgfSwKKwl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBrZXlzcGFuXzJwb3J0X2lkc1tdID0geworCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2EyOF9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2EyOHhfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjh4YV9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2EyOHhiX3Byb2R1Y3RfaWQpIH0sCisJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQga2V5c3Bhbl80cG9ydF9pZHNbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhNDl3X3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTQ5d2xjX3Byb2R1Y3RfaWQpfSwKKwl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKy8qIFN0cnVjdHMgZm9yIHRoZSBkZXZpY2VzLCBwcmUgYW5kIHBvc3QgcmVudW1lcmF0aW9uLiAqLworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGtleXNwYW5fcHJlX2RldmljZSA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQkJPSAiS2V5c3BhbiAtICh3aXRob3V0IGZpcm13YXJlKSIsCisJLnNob3J0X25hbWUJCT0gImtleXNwYW5fbm9fZmlybSIsCisJLmlkX3RhYmxlCQk9IGtleXNwYW5fcHJlX2lkcywKKwkubnVtX2ludGVycnVwdF9pbgk9IE5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX2luCQk9IE5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX291dAkJPSBOVU1fRE9OVF9DQVJFLAorCS5udW1fcG9ydHMJCT0gMSwKKwkuYXR0YWNoCQkJPSBrZXlzcGFuX2Zha2Vfc3RhcnR1cCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBrZXlzcGFuXzFwb3J0X2RldmljZSA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQkJPSAiS2V5c3BhbiAxIHBvcnQgYWRhcHRlciIsCisJLnNob3J0X25hbWUJCT0gImtleXNwYW5fMSIsCisJLmlkX3RhYmxlCQk9IGtleXNwYW5fMXBvcnRfaWRzLAorCS5udW1faW50ZXJydXB0X2luCT0gTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfaW4JCT0gTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfb3V0CQk9IE5VTV9ET05UX0NBUkUsCisJLm51bV9wb3J0cwkJPSAxLAorCS5vcGVuCQkJPSBrZXlzcGFuX29wZW4sCisJLmNsb3NlCQkJPSBrZXlzcGFuX2Nsb3NlLAorCS53cml0ZQkJCT0ga2V5c3Bhbl93cml0ZSwKKwkud3JpdGVfcm9vbQkJPSBrZXlzcGFuX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlcgk9IGtleXNwYW5fY2hhcnNfaW5fYnVmZmVyLAorCS50aHJvdHRsZQkJPSBrZXlzcGFuX3J4X3Rocm90dGxlLAorCS51bnRocm90dGxlCQk9IGtleXNwYW5fcnhfdW50aHJvdHRsZSwKKwkuaW9jdGwJCQk9IGtleXNwYW5faW9jdGwsCisJLnNldF90ZXJtaW9zCQk9IGtleXNwYW5fc2V0X3Rlcm1pb3MsCisJLmJyZWFrX2N0bAkJPSBrZXlzcGFuX2JyZWFrX2N0bCwKKwkudGlvY21nZXQJCT0ga2V5c3Bhbl90aW9jbWdldCwKKwkudGlvY21zZXQJCT0ga2V5c3Bhbl90aW9jbXNldCwKKwkuYXR0YWNoCQkJPSBrZXlzcGFuX3N0YXJ0dXAsCisJLnNodXRkb3duCQk9IGtleXNwYW5fc2h1dGRvd24sCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUga2V5c3Bhbl8ycG9ydF9kZXZpY2UgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJCT0gIktleXNwYW4gMiBwb3J0IGFkYXB0ZXIiLAorCS5zaG9ydF9uYW1lCQk9ICJrZXlzcGFuXzIiLAorCS5pZF90YWJsZQkJPSBrZXlzcGFuXzJwb3J0X2lkcywKKwkubnVtX2ludGVycnVwdF9pbgk9IE5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX2luCQk9IE5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX291dAkJPSBOVU1fRE9OVF9DQVJFLAorCS5udW1fcG9ydHMJCT0gMiwKKwkub3BlbgkJCT0ga2V5c3Bhbl9vcGVuLAorCS5jbG9zZQkJCT0ga2V5c3Bhbl9jbG9zZSwKKwkud3JpdGUJCQk9IGtleXNwYW5fd3JpdGUsCisJLndyaXRlX3Jvb20JCT0ga2V5c3Bhbl93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIJPSBrZXlzcGFuX2NoYXJzX2luX2J1ZmZlciwKKwkudGhyb3R0bGUJCT0ga2V5c3Bhbl9yeF90aHJvdHRsZSwKKwkudW50aHJvdHRsZQkJPSBrZXlzcGFuX3J4X3VudGhyb3R0bGUsCisJLmlvY3RsCQkJPSBrZXlzcGFuX2lvY3RsLAorCS5zZXRfdGVybWlvcwkJPSBrZXlzcGFuX3NldF90ZXJtaW9zLAorCS5icmVha19jdGwJCT0ga2V5c3Bhbl9icmVha19jdGwsCisJLnRpb2NtZ2V0CQk9IGtleXNwYW5fdGlvY21nZXQsCisJLnRpb2Ntc2V0CQk9IGtleXNwYW5fdGlvY21zZXQsCisJLmF0dGFjaAkJCT0ga2V5c3Bhbl9zdGFydHVwLAorCS5zaHV0ZG93bgkJPSBrZXlzcGFuX3NodXRkb3duLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGtleXNwYW5fNHBvcnRfZGV2aWNlID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCQk9ICJLZXlzcGFuIDQgcG9ydCBhZGFwdGVyIiwKKwkuc2hvcnRfbmFtZQkJPSAia2V5c3Bhbl80IiwKKwkuaWRfdGFibGUJCT0ga2V5c3Bhbl80cG9ydF9pZHMsCisJLm51bV9pbnRlcnJ1cHRfaW4JPSBOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19pbgkJPSA1LAorCS5udW1fYnVsa19vdXQJCT0gNSwKKwkubnVtX3BvcnRzCQk9IDQsCisJLm9wZW4JCQk9IGtleXNwYW5fb3BlbiwKKwkuY2xvc2UJCQk9IGtleXNwYW5fY2xvc2UsCisJLndyaXRlCQkJPSBrZXlzcGFuX3dyaXRlLAorCS53cml0ZV9yb29tCQk9IGtleXNwYW5fd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyCT0ga2V5c3Bhbl9jaGFyc19pbl9idWZmZXIsCisJLnRocm90dGxlCQk9IGtleXNwYW5fcnhfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUJCT0ga2V5c3Bhbl9yeF91bnRocm90dGxlLAorCS5pb2N0bAkJCT0ga2V5c3Bhbl9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MJCT0ga2V5c3Bhbl9zZXRfdGVybWlvcywKKwkuYnJlYWtfY3RsCQk9IGtleXNwYW5fYnJlYWtfY3RsLAorCS50aW9jbWdldAkJPSBrZXlzcGFuX3Rpb2NtZ2V0LAorCS50aW9jbXNldAkJPSBrZXlzcGFuX3Rpb2Ntc2V0LAorCS5hdHRhY2gJCQk9IGtleXNwYW5fc3RhcnR1cCwKKwkuc2h1dGRvd24JCT0ga2V5c3Bhbl9zaHV0ZG93biwKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fbXByX2Z3LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9tcHJfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzg4MDVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fbXByX2Z3LmgKQEAgLTAsMCArMSwyODYgQEAKKy8qIGtleXNwYW5fbXByX2Z3LmgKKyAKKwlUaGUgZmlybXdhcmUgY29udGFpbmVkIGhlcmVpbiBhcyBrZXlzcGFuX21wcl9mdy5oIGlzCisKKwkJQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEKKwkJS2V5c3BhbiwgQSBkaXZpc2lvbiBvZiBJbm5vU3lzIEluY29ycG9yYXRlZCAoIktleXNwYW4iKQorCQkKKwlhcyBhbiB1bnB1Ymxpc2hlZCB3b3JrLiBUaGlzIG5vdGljZSBkb2VzIG5vdCBpbXBseSB1bnJlc3RyaWN0ZWQgb3IKKwlwdWJsaWMgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29kZSBmcm9tIHdoaWNoIHRoaXMgZmlybXdhcmUgaW1hZ2UgaXMKKwlkZXJpdmVkLiAgRXhjZXB0IGFzIG5vdGVkIGJlbG93IHRoaXMgZmlybXdhcmUgaW1hZ2UgbWF5IG5vdCBiZSAKKwlyZXByb2R1Y2VkLCB1c2VkLCBzb2xkIG9yIHRyYW5zZmVycmVkIHRvIGFueSB0aGlyZCBwYXJ0eSB3aXRob3V0IAorCUtleXNwYW4ncyBwcmlvciB3cml0dGVuIGNvbnNlbnQuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisJUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIAorCWltYWdlIGFzIHBhcnQgb2YgYSBMaW51eCBvciBvdGhlciBPcGVuIFNvdXJjZSBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbCAKKwlpbiB0ZXh0IG9yIGJpbmFyeSBmb3JtIGFzIHJlcXVpcmVkLiAKKworCVRoaXMgZmlybXdhcmUgbWF5IG5vdCBiZSBtb2RpZmllZCBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aXRoICAKKwlLZXlzcGFuIGhhcmR3YXJlLiAgRGlzdHJpYnV0aW9uIGFuZC9vciBNb2RpZmljYXRpb24gb2YgdGhlIAorCWtleXNwYW4uYyBkcml2ZXIgd2hpY2ggaW5jbHVkZXMgdGhpcyBmaXJtd2FyZSwgaW4gd2hvbGUgb3IgaW4gCisJcGFydCwgcmVxdWlyZXMgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHN0YXRlbWVudC4iCisKK3N0YXRpYyBjaGFyIHRoZUZpcm13YXJlRGF0ZTUzW10gPQorCSIwNC8yNi8yMDAyICAwMjo0N3AgICAgICAgICAgICAgIDExLDU3MCBVU0E1MyI7CisqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGV6dXNiX2hleF9yZWNvcmQga2V5c3Bhbl9tcHJfZmlybXdhcmVbXSA9IHsKKyB7MHgwMDMzLCAgMywgeyAweDAyLCAweDAwLCAweDFhfX0sCisgezB4MDAxYSwgIDQsIHsgMHg1MywgMHhkOCwgMHhlZiwgMHgzMn19LAorIHsweDAwMDMsIDE2LCB7IDB4OGUsIDB4NTYsIDB4OGYsIDB4NTcsIDB4ZTUsIDB4NTcsIDB4MTUsIDB4NTcsIDB4YWUsIDB4NTYsIDB4NzAsIDB4MDIsIDB4MTUsIDB4NTYsIDB4NGUsIDB4NjB9fSwKKyB7MHgwMDEzLCAgNywgeyAweDA1LCAweDEyLCAweDBmLCAweGEyLCAweDgwLCAweGVlLCAweDIyfX0sCisgezB4MDAyMywgIDMsIHsgMHgwMiwgMHgwMCwgMHg0Nn19LAorIHsweDAwNDYsIDE2LCB7IDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4YzAsIDB4ZDAsIDB4NzUsIDB4ZDAsIDB4MDh9fSwKKyB7MHgwMDU2LCAxNiwgeyAweDMwLCAweDk5LCAweDBlLCAweDMwLCAweDBiLCAweDA3LCAweGEyLCAweDBlLCAweDkyLCAweDliLCAweDg1LCAweDM2LCAweDk5LCAweGMyLCAweDk5LCAweGQyfX0sCisgezB4MDA2NiwgMTYsIHsgMHgxMiwgMHgyMCwgMHgxMiwgMHgwMywgMHgwMiwgMHgwMiwgMHhmOSwgMHhjMiwgMHgxMiwgMHgzMCwgMHgwMywgMHgxOSwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg0MH19LAorIHsweDAwNzYsIDE2LCB7IDB4NzUsIDB4MWEsIDB4N2UsIDB4NzUsIDB4MWIsIDB4NDAsIDB4NzUsIDB4MTcsIDB4MDAsIDB4N2UsIDB4N2QsIDB4N2YsIDB4YzAsIDB4NzUsIDB4MTgsIDB4N2R9fSwKKyB7MHgwMDg2LCAxNiwgeyAweDc1LCAweDE5LCAweGMwLCAweDgwLCAweDE3LCAweDdlLCAweDdkLCAweDdmLCAweGMwLCAweDc1LCAweDFhLCAweDdkLCAweDc1LCAweDFiLCAweGMwLCAweDc1fX0sCisgezB4MDA5NiwgMTYsIHsgMHgxNywgMHgwMSwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg0MCwgMHg3NSwgMHgxOCwgMHg3ZSwgMHg3NSwgMHgxOSwgMHg0MCwgMHgyMCwgMHgwYiwgMHgwMywgMHgwMn19LAorIHsweDAwYTYsIDE2LCB7IDB4MDEsIDB4ODQsIDB4ZTUsIDB4M2EsIDB4YzMsIDB4OTUsIDB4NTMsIDB4NTAsIDB4M2MsIDB4MjAsIDB4MGMsIDB4MzQsIDB4MjAsIDB4MDksIDB4MzEsIDB4OTB9fSwKKyB7MHgwMGI2LCAxNiwgeyAweDdmLCAweDliLCAweGUwLCAweDU1LCAweDM4LCAweDcwLCAweDI5LCAweDMwLCAweDEwLCAweDEyLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweGU1LCAweDFifX0sCisgezB4MDBjNiwgMTYsIHsgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxYSwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgwZSwgMHhhZiwgMHgzYSwgMHgwNSwgMHgzYX19LAorIHsweDAwZDYsIDE2LCB7IDB4ZTUsIDB4MWIsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MWEsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4MzYsIDB4MDIsIDB4MDIsIDB4Zjd9fSwKKyB7MHgwMGU2LCAxNiwgeyAweGMyLCAweDBiLCAweDAyLCAweDAyLCAweGY3LCAweDMwLCAweDAzLCAweDExLCAweDkwLCAweDdmLCAweGM3LCAweGU0LCAweGYwLCAweGEzLCAweGUwLCAweDU0fX0sCisgezB4MDBmNiwgMTYsIHsgMHgwMiwgMHhmNSwgMHgxZCwgMHhhMywgMHhlMCwgMHhmNSwgMHgxYywgMHg4MCwgMHgxMSwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlNCwgMHhmMCwgMHg5MCwgMHg3Zn19LAorIHsweDAwNDMsICAzLCB7IDB4MDIsIDB4MGYsIDB4MDB9fSwKKyB7MHgwMDAwLCAgMywgeyAweDAyLCAweDAwLCAweDI2fX0sCisgezB4MDAyNiwgMTIsIHsgMHg3OCwgMHg3ZiwgMHhlNCwgMHhmNiwgMHhkOCwgMHhmZCwgMHg3NSwgMHg4MSwgMHg1YSwgMHgwMiwgMHgwYSwgMHgzM319LAorIHsweDAxMDYsIDY0LCB7IDB4YzYsIDB4ZTAsIDB4NTQsIDB4MDIsIDB4ZjUsIDB4MWQsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4MWMsIDB4ZTUsIDB4MTcsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4MDMsIDB4MzAsCisgIDB4MGQsIDB4MGQsIDB4YzIsIDB4MGQsIDB4OTAsIDB4N2YsIDB4YmIsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4YzIsIDB4MGIsIDB4MDIsIDB4MDIsIDB4ZjcsIDB4ZTUsCisgIDB4MWQsIDB4NjAsIDB4MDUsIDB4YzIsIDB4MGIsIDB4MDIsIDB4MDIsIDB4ZjcsIDB4ODUsIDB4MWMsIDB4NTMsIDB4ODUsIDB4MTksIDB4ODIsIDB4ODUsIDB4MTgsCisgIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGQsIDB4NzUsIDB4MTIsIDB4ZmYsIDB4MjAsIDB4MGMsIDB4M2EsIDB4MjAsIDB4MDksIDB4MzcsIDB4OTB9fSwKKyB7MHgwMTQ2LCA2NCwgeyAweDdmLCAweDliLCAweGUwLCAweDU1LCAweDM4LCAweDcwLCAweDJmLCAweDMwLCAweDEwLCAweDFjLCAweDg1LCAweDE5LCAweDgyLCAweDg1LCAweDE4LCAweDgzLCAweGEzLAorICAweGUwLCAweDEzLCAweDkyLCAweDBlLCAweDg1LCAweDE5LCAweDgyLCAweDg1LCAweDE4LCAweDgzLCAweGEzLCAweGEzLCAweGUwLCAweGY1LCAweDM2LCAweDc1LAorICAweDNhLCAweDAzLCAweDAyLCAweDAyLCAweGY3LCAweDc1LCAweDNhLCAweDAyLCAweDg1LCAweDE5LCAweDgyLCAweDg1LCAweDE4LCAweDgzLCAweGEzLCAweGUwLAorICAweGY1LCAweDM2LCAweDAyLCAweDAyLCAweGY3LCAweDc1LCAweDNhLCAweDAxLCAweGMyLCAweDBiLCAweDAyLCAweDAyLCAweGY3LCAweDMwLCAweDAzfX0sCisgezB4MDE4NiwgNjQsIHsgMHgwZSwgMHg5MCwgMHg3ZiwgMHhjNiwgMHhlMCwgMHg1NCwgMHgwMiwgMHhmNSwgMHgxZCwgMHhhMywgMHhlMCwgMHhmNSwgMHgxYywgMHg4MCwgMHgwYywgMHg5MCwgMHg3ZiwKKyAgMHhjOCwgMHhlMCwgMHg1NCwgMHgwMiwgMHhmNSwgMHgxZCwgMHhhMywgMHhlMCwgMHhmNSwgMHgxYywgMHhlNSwgMHgzYSwgMHhjMywgMHg5NSwgMHg1MywgMHg1MCwKKyAgMHgwMywgMHgwMiwgMHgwMiwgMHg2OCwgMHhlNSwgMHgxZCwgMHg2MCwgMHgwNywgMHhjMiwgMHgxNCwgMHhjMiwgMHgwNSwgMHgwMiwgMHgwMiwgMHhmNywgMHg4NSwKKyAgMHgxYywgMHg1MywgMHg4NSwgMHgxYiwgMHg4MiwgMHg4NSwgMHgxYSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgwZCwgMHg3NSwgMHgxMiwgMHhmZn19LAorIHsweDAxYzYsIDY0LCB7IDB4MzAsIDB4MGMsIDB4MDMsIDB4MDIsIDB4MDIsIDB4NjAsIDB4MzAsIDB4MDksIDB4MDMsIDB4MDIsIDB4MDIsIDB4NjAsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTUsCisgIDB4MzgsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MDIsIDB4NjAsIDB4MzAsIDB4MTAsIDB4MWIsIDB4ODUsIDB4MWIsIDB4ODIsIDB4ODUsIDB4MWEsIDB4ODMsIDB4YTMsCisgIDB4ZTAsIDB4MTMsIDB4OTIsIDB4OWIsIDB4ODUsIDB4MWIsIDB4ODIsIDB4ODUsIDB4MWEsIDB4ODMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4OTksIDB4NzUsCisgIDB4M2EsIDB4MDMsIDB4ODAsIDB4MGQsIDB4ODUsIDB4MWIsIDB4ODIsIDB4ODUsIDB4MWEsIDB4ODMsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4OTksIDB4NzV9fSwKKyB7MHgwMjA2LCA2NCwgeyAweDNhLCAweDAyLCAweGU1LCAweDNhLCAweGMzLCAweDk1LCAweDUzLCAweDQwLCAweDI2LCAweDMwLCAweDAzLCAweDA3LCAweDkwLCAweDdmLCAweGM3LCAweGU0LCAweGYwLAorICAweDgwLCAweDA1LCAweDkwLCAweDdmLCAweGM5LCAweGU0LCAweGYwLCAweGU1LCAweDE3LCAweDI0LCAweGZmLCAweDkyLCAweDAzLCAweDIwLCAweDBkLCAweDAzLAorICAweDAyLCAweDAyLCAweGY3LCAweGMyLCAweDBkLCAweDkwLCAweDdmLCAweGJiLCAweDc0LCAweDAxLCAweGYwLCAweDAyLCAweDAyLCAweGY3LCAweDMwLCAweDEwLAorICAweDEyLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweGU1LCAweDFiLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDFhLCAweGY1LCAweDgzfX0sCisgezB4MDI0NiwgNjQsIHsgMHhlMCwgMHgxMywgMHg5MiwgMHgwZSwgMHhhZiwgMHgzYSwgMHgwNSwgMHgzYSwgMHhlNSwgMHgxYiwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxYSwgMHhmNSwKKyAgMHg4MywgMHhlMCwgMHhmNSwgMHgzNiwgMHhkMiwgMHgwYiwgMHgwMiwgMHgwMiwgMHhmNywgMHg3NSwgMHgzYSwgMHgwMSwgMHhjMiwgMHgxNCwgMHgwMiwgMHgwMiwKKyAgMHhmNywgMHgzMCwgMHgwYywgMHgwMywgMHgwMiwgMHgwMiwgMHhmNSwgMHgzMCwgMHgwOSwgMHgwMywgMHgwMiwgMHgwMiwgMHhmNSwgMHg5MCwgMHg3ZiwgMHg5YiwKKyAgMHhlMCwgMHg1NSwgMHgzOCwgMHg3MCwgMHg3OSwgMHgzMCwgMHgxMCwgMHgxMiwgMHhhZiwgMHgzYSwgMHgwNSwgMHgzYSwgMHhlNSwgMHgxYiwgMHgyZn19LAorIHsweDAyODYsIDY0LCB7IDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MWEsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4OWIsIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsIDB4ZTUsIDB4MWIsCisgIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MWEsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4OTksIDB4ZTUsIDB4M2EsIDB4YzMsIDB4OTUsIDB4NTMsCisgIDB4NDAsIDB4MjIsIDB4MzAsIDB4MDMsIDB4MDcsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTQsIDB4ZjAsIDB4ODAsIDB4MDUsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZTQsCisgIDB4ZjAsIDB4ZTUsIDB4MTcsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4MDMsIDB4MzAsIDB4MGQsIDB4MzYsIDB4YzIsIDB4MGQsIDB4OTAsIDB4N2YsIDB4YmJ9fSwKKyB7MHgwMmM2LCA2NCwgeyAweDc0LCAweDAxLCAweGYwLCAweDgwLCAweDJjLCAweDMwLCAweDEwLCAweDEyLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweGU1LCAweDFiLCAweDJmLCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDFhLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDBlLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweGU1LCAweDFiLCAweDJmLAorICAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDFhLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDM2LCAweGQyLCAweDBiLCAweDgwLCAweDAyLCAweGMyLCAweDE0LAorICAweGQyLCAweDAxLCAweDIwLCAweDk4LCAweDAzLCAweDAyLCAweDA0LCAweDM1LCAweGMyLCAweDk4LCAweDIwLCAweDAyLCAweDAzLCAweDAyLCAweDAzfX0sCisgezB4MDMwNiwgNjQsIHsgMHhhMiwgMHgyMCwgMHgxNSwgMHgyNywgMHhhZiwgMHgzOSwgMHgwNSwgMHgzOSwgMHg3NCwgMHg4MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwKKyAgMHg4MywgMHhlNSwgMHg5OSwgMHhmMCwgMHgzMCwgMHgxMCwgMHg0ZCwgMHhhZiwgMHgzOSwgMHgwNSwgMHgzOSwgMHg3NCwgMHg4MCwgMHgyZiwgMHhmNSwgMHg4MiwKKyAgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg5OCwgMHhmMCwgMHg4MCwgMHgzYSwgMHg4NSwgMHg5OSwgMHg1NSwgMHhlNSwgMHg1NSwgMHhiNSwKKyAgMHg0NywgMHgwNCwgMHhkMiwgMHgwOSwgMHg4MCwgMHgyZSwgMHhlNSwgMHg1NSwgMHhiNSwgMHg0NiwgMHgwNCwgMHhjMiwgMHgwOSwgMHg4MCwgMHgyNX19LAorIHsweDAzNDYsIDY0LCB7IDB4YWYsIDB4MzksIDB4MDUsIDB4MzksIDB4NzQsIDB4ODAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4NTUsIDB4ZjAsCisgIDB4MzAsIDB4MTAsIDB4MTEsIDB4YWYsIDB4MzksIDB4MDUsIDB4MzksIDB4NzQsIDB4ODAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsCisgIDB4ODMsIDB4ZTUsIDB4OTgsIDB4ZjAsIDB4ZDIsIDB4MGYsIDB4ZTUsIDB4MzksIDB4YzMsIDB4OTUsIDB4NDMsIDB4NTAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MzMsCisgIDB4OTAsIDB4N2YsIDB4YjgsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MTYsIDB4ZTUsIDB4MzksIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTAsIDB4MDMsIDB4MDJ9fSwKKyB7MHgwMzg2LCA2NCwgeyAweDA0LCAweDMzLCAweDE1LCAweDM5LCAweDE1LCAweDM5LCAweDA1LCAweDJiLCAweDQzLCAweDM0LCAweDAxLCAweDAyLCAweDA0LCAweDMzLCAweDkwLCAweDdmLCAweGI3LAorICAweGU1LCAweDM5LCAweGYwLCAweDc1LCAweDM5LCAweDAwLCAweGMyLCAweDAyLCAweDAyLCAweDA0LCAweDMzLCAweDIwLCAweDE1LCAweDI3LCAweGFmLCAweDM5LAorICAweDA1LCAweDM5LCAweDc0LCAweDAwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGU1LCAweDk5LCAweGYwLCAweDMwLAorICAweDEwLCAweDRkLCAweGFmLCAweDM5LCAweDA1LCAweDM5LCAweDc0LCAweDAwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1fX0sCisgezB4MDNjNiwgNjQsIHsgMHg4MywgMHhlNSwgMHg5OCwgMHhmMCwgMHg4MCwgMHgzYSwgMHg4NSwgMHg5OSwgMHg1NSwgMHhlNSwgMHg1NSwgMHhiNSwgMHg0NywgMHgwNCwgMHhkMiwgMHgwOSwgMHg4MCwKKyAgMHgyZSwgMHhlNSwgMHg1NSwgMHhiNSwgMHg0NiwgMHgwNCwgMHhjMiwgMHgwOSwgMHg4MCwgMHgyNSwgMHhhZiwgMHgzOSwgMHgwNSwgMHgzOSwgMHg3NCwgMHgwMCwKKyAgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg1NSwgMHhmMCwgMHgzMCwgMHgxMCwgMHgxMSwgMHhhZiwgMHgzOSwKKyAgMHgwNSwgMHgzOSwgMHg3NCwgMHgwMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg5OCwgMHhmMH19LAorIHsweDA0MDYsIDY0LCB7IDB4ZDIsIDB4MGYsIDB4ZTUsIDB4MzksIDB4YzMsIDB4OTUsIDB4NDMsIDB4NDAsIDB4MjQsIDB4OTAsIDB4N2YsIDB4YjYsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MTIsIDB4ZTUsCisgIDB4MzksIDB4YzMsIDB4OTQsIDB4NDAsIDB4NDAsIDB4MTYsIDB4MTUsIDB4MzksIDB4MTUsIDB4MzksIDB4MDUsIDB4MmIsIDB4NDMsIDB4MzQsIDB4MDEsIDB4ODAsCisgIDB4MGIsIDB4OTAsIDB4N2YsIDB4YjksIDB4ZTUsIDB4MzksIDB4ZjAsIDB4NzUsIDB4MzksIDB4MDAsIDB4ZDIsIDB4MDIsIDB4ZDIsIDB4MDEsIDB4MzAsIDB4MDEsCisgIDB4MDUsIDB4YzIsIDB4MDEsIDB4MDIsIDB4MDAsIDB4NTYsIDB4ZDAsIDB4ZDAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDB9fSwKKyB7MHgwNDQ2LCA2NCwgeyAweGUwLCAweDMyLCAweDkwLCAweDdmLCAweGJjLCAweGUwLCAweDIwLCAweGUxLCAweDU0LCAweGU1LCAweDM0LCAweDYwLCAweDUwLCAweGU1LCAweDMxLCAweDcwLCAweDRjLAorICAweGU1LCAweDM0LCAweDMwLCAweGUxLCAweDBiLCAweGU0LCAweGY1LCAweDJmLCAweDc1LCAweDM0LCAweDAxLCAweDc1LCAweDMxLCAweDAyLCAweDgwLCAweDBlLAorICAweGEyLCAweDA4LCAweGU0LCAweDMzLCAweGY1LCAweDJmLCAweGMyLCAweDA4LCAweGU0LCAweGY1LCAweDM0LCAweDc1LCAweDMxLCAweDEwLCAweGU0LCAweGY1LAorICAweDU2LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDI0LCAweDI1LCAweDU2LCAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhLCAweDEyfX0sCisgezB4MDQ4NiwgNjQsIHsgMHgwYywgMHg3OSwgMHhmZiwgMHg3NCwgMHgwMCwgMHgyNSwgMHg1NiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwKKyAgMHg1NiwgMHhlNSwgMHg1NiwgMHhiNCwgMHgwYywgMHhkYiwgMHg5MCwgMHg3ZiwgMHhiZCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjYSwgMHhlMCwKKyAgMHgzMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwNSwgMHhkMSwgMHhlNCwgMHhmNSwgMHg1NiwgMHg3NCwgMHg0MCwgMHgyNSwgMHg1NiwgMHhmNSwgMHg4MiwgMHhlNCwKKyAgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHg1NiwgMHg3YywgMHgwMCwgMHg3YiwgMHgwMCwgMHgyNCwgMHgzYiwgMHhmOX19LAorIHsweDA0YzYsIDY0LCB7IDB4ZWMsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4ZWYsIDB4MTIsIDB4MGMsIDB4OTIsIDB4MDUsIDB4NTYsIDB4ZTUsIDB4NTYsIDB4YjQsIDB4MTgsIDB4ZGIsIDB4ZTUsIDB4M2IsCisgIDB4NjAsIDB4MTEsIDB4NzUsIDB4YzksIDB4MjAsIDB4NzUsIDB4YzgsIDB4MzYsIDB4ODUsIDB4M2MsIDB4Y2EsIDB4ODUsIDB4M2QsIDB4Y2IsIDB4ZTQsIDB4OTAsCisgIDB4N2YsIDB4OWYsIDB4ZjAsIDB4ZTUsIDB4M2UsIDB4MTMsIDB4OTIsIDB4MTAsIDB4OTIsIDB4OWYsIDB4ODUsIDB4M2YsIDB4MzgsIDB4ZTUsIDB4NDAsIDB4MTMsCisgIDB4OTIsIDB4MTUsIDB4ZTUsIDB4NDEsIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4ODAsIDB4MDd9fSwKKyB7MHgwNTA2LCA2NCwgeyAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDQ0LCAweDA0LCAweGYwLCAweGU1LCAweDQyLCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDU0LCAweDdmLAorICAweGYwLCAweDgwLCAweDA3LCAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweGU1LCAweDQ4LCAweDYwLCAweDBiLCAweGMyLCAweDBjLAorICAweGMyLCAweDA5LCAweDkwLCAweDdmLCAweDk1LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGU1LCAweDQ5LCAweDYwLCAweDBjLCAweGQyLCAweDA5LCAweDQzLAorICAweDM0LCAweDAxLCAweDkwLCAweDdmLCAweDk1LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGU1LCAweDRhLCAweDYwLCAweDBkLCAweGMyLCAweGFmfX0sCisgezB4MDU0NiwgNjQsIHsgMHhjMiwgMHgwYiwgMHhkMiwgMHgwMCwgMHhlNCwgMHhmNSwgMHg1MywgMHhmNSwgMHgzYSwgMHhkMiwgMHhhZiwgMHhlNSwgMHg0YiwgMHg2MCwgMHgwNSwgMHgzMCwgMHgxNSwKKyAgMHgwMiwgMHhkMiwgMHgwOSwgMHhlNSwgMHg0YywgMHg2MCwgMHgxNSwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5ZSwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHhlNSwgMHg0ZCwgMHg2MCwgMHgwYSwKKyAgMHhkMiwgMHg5YywgMHhjMiwgMHg5OCwgMHg3NSwgMHgyYywgMHgwMSwgMHg3NSwgMHgzMSwgMHgxZSwgMHhlNSwgMHg0ZSwgMHg2MCwgMHgwNywgMHhjMn19LAorIHsweDA1ODYsIDY0LCB7IDB4OWMsIDB4ZTQsIDB4ZjUsIDB4MzksIDB4ZjUsIDB4MmMsIDB4ZTUsIDB4NGYsIDB4NjAsIDB4MDMsIDB4ZTQsIDB4ZjUsIDB4MzksIDB4ZTUsIDB4NTAsIDB4NjAsIDB4MDIsCisgIDB4ZDIsIDB4MDcsIDB4ZTUsIDB4NTEsIDB4NjAsIDB4MGEsIDB4ZTUsIDB4NGQsIDB4NzAsIDB4MDIsIDB4ZjUsIDB4MzEsIDB4ZTUsIDB4NTEsIDB4NDIsIDB4MzQsCisgIDB4ZTUsIDB4NTIsIDB4NjAsIDB4MWYsIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4NzQsIDB4MzEsIDB4ZjAsIDB4NzQsIDB4MTIsIDB4ZjAsCisgIDB4NzQsIDB4MzIsIDB4ZjAsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4NzQsIDB4MzMsIDB4ZjAsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4NzQsIDB4MzQsIDB4ZjB9fSwKKyB7MHgwNWM2LCA2NCwgeyAweGQyLCAweDAzLCAweGQyLCAweDAyLCAweGQyLCAweDA4LCAweGU0LCAweDkwLCAweDdmLCAweGNiLCAweGYwLCAweGEyLCAweDBjLCAweGU0LCAweDMzLCAweGZmLCAweDY1LAorICAweDI5LCAweDYwLCAweDA1LCAweDhmLCAweDI5LCAweDQzLCAweDM0LCAweDAxLCAweGEyLCAweDA5LCAweGU0LCAweDMzLCAweGZmLCAweDY1LCAweDJhLCAweDYwLAorICAweDA1LCAweDhmLCAweDJhLCAweDQzLCAweDM0LCAweDAxLCAweDkwLCAweDdmLCAweDliLCAweGUwLCAweGZmLCAweDU0LCAweDA4LCAweDY0LCAweDA4LCAweGY1LAorICAweDU3LCAweDY1LCAweDI1LCAweDYwLCAweDA2LCAweDg1LCAweDU3LCAweDI1LCAweDQzLCAweDM0LCAweDAxLCAweGVmLCAweDU0LCAweDEwLCAweDY0fX0sCisgezB4MDYwNiwgNjQsIHsgMHgxMCwgMHhmNSwgMHg1NywgMHg2NSwgMHgyNiwgMHg2MCwgMHgwNiwgMHg4NSwgMHg1NywgMHgyNiwgMHg0MywgMHgzNCwgMHgwMSwgMHhlZiwgMHg1NCwgMHg0MCwgMHg2NCwKKyAgMHg0MCwgMHhmNSwgMHg1NywgMHg2NSwgMHgyNywgMHg2MCwgMHgwNiwgMHg4NSwgMHg1NywgMHgyNywgMHg0MywgMHgzNCwgMHgwMSwgMHhlZiwgMHg1NCwgMHgyMCwKKyAgMHg2NCwgMHgyMCwgMHhmNSwgMHg1NywgMHg2NSwgMHgyOCwgMHg2MCwgMHgwNiwgMHg4NSwgMHg1NywgMHgyOCwgMHg0MywgMHgzNCwgMHgwMSwgMHg5MCwgMHg3ZiwKKyAgMHg5YSwgMHhlMCwgMHg1NCwgMHg0MCwgMHg2NCwgMHg0MCwgMHhmNSwgMHg1NywgMHg2NSwgMHgyZSwgMHg2MCwgMHgwNiwgMHg4NSwgMHg1NywgMHgyZX19LAorIHsweDA2NDYsIDY0LCB7IDB4NDMsIDB4MzQsIDB4MDEsIDB4MzAsIDB4MDcsIDB4MzUsIDB4YzIsIDB4YWYsIDB4MzAsIDB4MDIsIDB4MTgsIDB4OTAsIDB4N2YsIDB4YjgsIDB4ZTAsIDB4MjAsIDB4ZTEsCisgIDB4MjcsIDB4ZTUsIDB4MzksIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MzksIDB4YzIsIDB4MDIsIDB4YzIsIDB4MDcsCisgIDB4ODAsIDB4MTYsIDB4OTAsIDB4N2YsIDB4YjYsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MGYsIDB4ZTUsIDB4MzksIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsIDB4YjksCisgIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MzksIDB4ZDIsIDB4MDIsIDB4YzIsIDB4MDcsIDB4ZDIsIDB4YWYsIDB4MjAsIDB4MDUsIDB4M2QsIDB4MzAsIDB4MDN9fSwKKyB7MHgwNjg2LCA2NCwgeyAweDFlLCAweDkwLCAweDdmLCAweGM2LCAweGUwLCAweDIwLCAweGUxLCAweDMzLCAweDkwLCAweDdlLCAweDQwLCAweGUwLCAweDEzLCAweDkyLCAweDBkLCAweDc1LCAweDNhLAorICAweDAxLCAweDkwLCAweDdmLCAweGM3LCAweGUwLCAweGY1LCAweDUzLCAweGQyLCAweDA1LCAweDc1LCAweDEyLCAweGZmLCAweDgwLCAweDFjLCAweDkwLCAweDdmLAorICAweGM4LCAweGUwLCAweDIwLCAweGUxLCAweDE1LCAweDkwLCAweDdkLCAweGMwLCAweGUwLCAweDEzLCAweDkyLCAweDBkLCAweDc1LCAweDNhLCAweDAxLCAweDkwLAorICAweDdmLCAweGM5LCAweGUwLCAweGY1LCAweDUzLCAweGQyLCAweDA1LCAweDc1LCAweDEyLCAweGZmLCAweDIwLCAweDE0LCAweDMzLCAweDIwLCAweDAwfX0sCisgezB4MDZjNiwgNjQsIHsgMHgwNiwgMHhlNSwgMHgzYSwgMHg2NSwgMHg1MywgMHg3MCwgMHgyYSwgMHgzMCwgMHgwNSwgMHgxYSwgMHgzMCwgMHgwMywgMHgwOSwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjNywKKyAgMHhmMCwgMHhjMiwgMHgwMywgMHg4MCwgMHgwNywgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhmMCwgMHhkMiwgMHgwMywgMHhjMiwgMHgwNSwgMHhlNCwgMHhmNSwKKyAgMHg1MywgMHhmNSwgMHgzYSwgMHgzMCwgMHgwZCwgMHgwYSwgMHhjMiwgMHgwZCwgMHhjMiwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhiYiwgMHg3NCwgMHgwMSwgMHhmMCwKKyAgMHgzMCwgMHgxNCwgMHgwMywgMHgwMiwgMHgwNywgMHhiZiwgMHgyMCwgMHgwNSwgMHgwMywgMHgwMiwgMHgwNywgMHhiZiwgMHgzMCwgMHgwYywgMHgwM319LAorIHsweDA3MDYsIDY0LCB7IDB4MDIsIDB4MDcsIDB4YmYsIDB4MzAsIDB4MDksIDB4MDMsIDB4MDIsIDB4MDcsIDB4YmYsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTUsIDB4MzgsIDB4NjAsIDB4MDMsCisgIDB4MDIsIDB4MDcsIDB4YmYsIDB4MzAsIDB4MDMsIDB4MGMsIDB4N2UsIDB4N2UsIDB4N2YsIDB4NDAsIDB4NzUsIDB4NTgsIDB4N2UsIDB4NzUsIDB4NTksIDB4NDAsCisgIDB4ODAsIDB4MGEsIDB4N2UsIDB4N2QsIDB4N2YsIDB4YzAsIDB4NzUsIDB4NTgsIDB4N2QsIDB4NzUsIDB4NTksIDB4YzAsIDB4MzAsIDB4MTAsIDB4MTIsIDB4YWYsCisgIDB4M2EsIDB4MDUsIDB4M2EsIDB4ZTUsIDB4NTksIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTgsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTN9fSwKKyB7MHgwNzQ2LCA2NCwgeyAweDkyLCAweDFhLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweGU1LCAweDU5LCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDU4LCAweGY1LCAweDgzLCAweGUwLAorICAweGY1LCAweDU3LCAweGU1LCAweDNhLCAweGMzLCAweDk1LCAweDUzLCAweDUwLCAweDJhLCAweDMwLCAweDEwLCAweDEyLCAweGFmLCAweDNhLCAweDA1LCAweDNhLAorICAweGU1LCAweDU5LCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDU4LCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDBlLCAweGFmLCAweDNhLAorICAweDA1LCAweDNhLCAweGU1LCAweDU5LCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDU4LCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDM2fX0sCisgezB4MDc4NiwgNjQsIHsgMHhkMiwgMHgwYiwgMHg4MCwgMHgxNSwgMHhjMiwgMHgwYiwgMHgzMCwgMHgwMywgMHgwOSwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhmMCwgMHhjMiwgMHgwMywgMHg4MCwKKyAgMHgwNywgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhmMCwgMHhkMiwgMHgwMywgMHgzMCwgMHgxMCwgMHgwNCwgMHhhMiwgMHgxYSwgMHg5MiwgMHg5YiwgMHhkMiwKKyAgMHgxNCwgMHhjMiwgMHhhZiwgMHg4NSwgMHg1NywgMHg5OSwgMHgyMCwgMHgwYiwgMHgwZCwgMHgzMCwgMHgwZCwgMHgwYSwgMHhjMiwgMHgwZCwgMHhjMiwgMHgwMCwKKyAgMHg5MCwgMHg3ZiwgMHhiYiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMiwgMHhhZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhlOSwgMHhlMCwgMHgxMiwgMHgwY319LAorIHsweDA3YzYsIDY0LCB7IDB4YTQsIDB4MDksIDB4MWMsIDB4MDAsIDB4MDksIDB4ODksIDB4MDEsIDB4MDksIDB4ZTYsIDB4MDMsIDB4MDcsIDB4ZTMsIDB4MDYsIDB4MDksIDB4MGQsIDB4MDgsIDB4MDksCisgIDB4MDEsIDB4MDksIDB4MDgsIDB4ZTksIDB4MGEsIDB4MDgsIDB4ZjgsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MjQsIDB4OTAsIDB4N2YsIDB4ZWIsIDB4ZTAsCisgIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MWMsIDB4MTQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDgsIDB4NzksIDB4MjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGEsCisgIDB4MjQsIDB4NzQsIDB4MGQsIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4NzQsIDB4ODcsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MGF9fSwKKyB7MHgwODA2LCA2NCwgeyAweDJiLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGI0LCAweDAxLCAweDA0LCAweDdmLCAweDAyLCAweDgwLCAweDAyLCAweDdmLCAweDAzLCAweDc1LCAweDgyLCAweGQ4LAorICAweDc1LCAweDgzLCAweDBkLCAweGVmLCAweGYwLCAweDc1LCAweDgyLCAweGQxLCAweDc1LCAweDgzLCAweDBkLCAweGYwLCAweDc1LCAweDgyLCAweGNhLCAweDc1LAorICAweDgzLCAweDBkLCAweGYwLCAweDc1LCAweDgyLCAweGMzLCAweDc1LCAweDgzLCAweDBkLCAweGYwLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDA0LCAweDc1LAorICAweDgyLCAweDllLCAweDc1LCAweDgzLCAweDBkLCAweGYwLCAweDkwLCAweDdmLCAweGVmLCAweGUwLCAweGZlLCAweDkwLCAweDdmLCAweGVlLCAweGUwfX0sCisgezB4MDg0NiwgNjQsIHsgMHg3YywgMHgwMCwgMHgyNCwgMHgwMCwgMHhmNSwgMHg1YSwgMHhlYywgMHgzZSwgMHhmNSwgMHg1OSwgMHg3NSwgMHgxNSwgMHgwZCwgMHg3NSwgMHgxNiwgMHg5OSwgMHg3NSwKKyAgMHg4MiwgMHg5YiwgMHg3NSwgMHg4MywgMHgwZCwgMHhlMCwgMHg3NSwgMHgxMywgMHgwMCwgMHhmNSwgMHgxNCwgMHhkMywgMHhlNSwgMHgxNCwgMHg5NSwgMHg1YSwKKyAgMHhlNSwgMHgxMywgMHg5NSwgMHg1OSwgMHg0MCwgMHgwNiwgMHg4NSwgMHg1OSwgMHgxMywgMHg4NSwgMHg1YSwgMHgxNCwgMHgxMiwgMHgwYiwgMHhiYSwgMHgwMiwKKyAgMHgwYSwgMHgyYiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgwYiwgMHg3NSwgMHg1NiwgMHhmZiwgMHg3NSwgMHg1NywgMHgwZCwgMHg3NX19LAorIHsweDA4ODYsIDY0LCB7IDB4NTgsIDB4ZGMsIDB4ODAsIDB4MmQsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MGIsIDB4NzUsIDB4NTYsIDB4ZmYsIDB4NzUsIDB4NTcsIDB4MGQsCisgIDB4NzUsIDB4NTgsIDB4ZTAsIDB4ODAsIDB4MWIsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDIsIDB4MGIsIDB4NzUsIDB4NTYsIDB4ZmYsIDB4NzUsCisgIDB4NTcsIDB4MGQsIDB4NzUsIDB4NTgsIDB4ZjAsIDB4ODAsIDB4MDksIDB4NzUsIDB4NTYsIDB4ZmYsIDB4NzUsIDB4NTcsIDB4MGUsIDB4NzUsIDB4NTgsIDB4MWUsCisgIDB4OTAsIDB4N2YsIDB4ZWUsIDB4ZTAsIDB4NzUsIDB4NTksIDB4MDAsIDB4ZjUsIDB4NWEsIDB4YWUsIDB4NTcsIDB4YWYsIDB4NTgsIDB4OGUsIDB4MTV9fSwKKyB7MHgwOGM2LCA2NCwgeyAweDhmLCAweDE2LCAweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGUwLCAweGZlLCAweGEzLCAweGUwLCAweDhlLCAweDEzLCAweGY1LCAweDE0LCAweGQzLCAweDk1LCAweDVhLAorICAweGU1LCAweDEzLCAweDk1LCAweDU5LCAweDQwLCAweDA2LCAweDg1LCAweDU5LCAweDEzLCAweDg1LCAweDVhLCAweDE0LCAweDEyLCAweDBiLCAweGJhLCAweDAyLAorICAweDBhLCAweDJiLCAweDkwLCAweDdmLCAweDAwLCAweGU1LCAweDExLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAxLCAweGYwLCAweDAyLCAweDBhLAorICAweDJiLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGY1LCAweDExLCAweDAyLCAweDBhLCAweDJiLCAweDEyLCAweDBjLCAweDI0LCAweDkwLCAweDdmfX0sCisgezB4MDkwNiwgNjQsIHsgMHhlYSwgMHhlMCwgMHhmNSwgMHgxMCwgMHgwMiwgMHgwYSwgMHgyYiwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhlNSwgMHgxMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwKKyAgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYSwgMHgyYiwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHg3ZiwgMHg2MCwgMHgyNywgMHgxNCwgMHg2MCwgMHgzNCwKKyAgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwYSwgMHgyNCwgMHhhMiwgMHgxNiwgMHhlNCwgMHgzMywgMHhmZiwgMHgyNSwgMHhlMCwgMHhmZiwgMHhhMiwKKyAgMHgxOCwgMHhlNCwgMHgzMywgMHg0ZiwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NH19LAorIHsweDA5NDYsIDY0LCB7IDB4MDIsIDB4ZjAsIDB4MDIsIDB4MGEsIDB4MmIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsCisgIDB4ZjAsIDB4MDIsIDB4MGEsIDB4MmIsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsCisgIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTAsCisgIDB4NTQsIDB4ZmQsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4ZTQsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjB9fSwKKyB7MHgwOTg2LCA2NCwgeyAweDAyLCAweDBhLCAweDJiLCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE3LCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDBhLAorICAweDJiLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDY0LCAweDAxLCAweDYwLCAweDAzLCAweDAyLCAweDBhLCAweDI0LCAweGMyLCAweDE2LCAweDAyLCAweDBhLAorICAweDJiLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDc2LCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LAorICAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0fX0sCisgezB4MDljNiwgNjQsIHsgMHg3ZiwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHg1NCwgMHg4MCwgMHhmZiwgMHgxMywgMHgxMywgMHgxMywgMHg1NCwgMHgxZiwKKyAgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHg5MCwgMHg3ZiwgMHhkNywgMHhmMCwgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHg4MCwgMHg0NSwgMHg5MCwKKyAgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxMCwgMHgyNCwgMHgwMiwgMHg3MCwgMHgzOSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg2NCwKKyAgMHgwMSwgMHg3MCwgMHgyYSwgMHhkMiwgMHgxNiwgMHg4MCwgMHgyZCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgyMCwgMHg5MCwgMHg3Zn19LAorIHsweDBhMDYsIDY0LCB7IDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsCisgIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MDcsIDB4OTAsIDB4N2YsIDB4YjQsCisgIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4MjIsIDB4YzIsIDB4MTAsIDB4ZTQsIDB4ZjUsCisgIDB4MTAsIDB4ZjUsIDB4MzQsIDB4YzIsIDB4MDksIDB4YzIsIDB4MGMsIDB4YzIsIDB4MGIsIDB4YzIsIDB4MTQsIDB4YzIsIDB4MGQsIDB4YzIsIDB4MTV9fSwKKyB7MHgwYTQ2LCA2NCwgeyAweGMyLCAweDExLCAweGMyLCAweDA3LCAweGMyLCAweDEyLCAweGMyLCAweDBmLCAweGMyLCAweDA4LCAweGY1LCAweDM1LCAweGY1LCAweDM5LCAweGY1LCAweDUzLCAweGY1LAorICAweDNhLCAweGY1LCAweDMzLCAweGY1LCAweDMwLCAweGY1LCAweDJmLCAweGY1LCAweDJlLCAweGY1LCAweDJkLCAweGY1LCAweDJjLCAweGY1LCAweDJiLCAweGY1LAorICAweDJhLCAweGY1LCAweDI5LCAweGY1LCAweDI4LCAweGY1LCAweDI3LCAweGY1LCAweDI2LCAweGY1LCAweDI1LCAweGY1LCAweDI0LCAweGMyLCAweDA1LCAweGMyLAorICAweDE3LCAweGMyLCAweDE5LCAweGMyLCAweDE2LCAweGMyLCAweDE4LCAweGMyLCAweDA0LCAweGQyLCAweDEzLCAweGMyLCAweDA2LCAweGMyLCAweDAxfX0sCisgezB4MGE4NiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHg5MiwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHhkMiwgMHhlOCwgMHg0MywgMHhkOCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhkZSwgMHg3NCwgMHgwMSwKKyAgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHhmZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhOSwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHhhYSwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhZiwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZSwKKyAgMHhlMCwgMHg0NCwgMHgwZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYywgMHg3NCwgMHgwZSwgMHhmMCwgMHhkMiwgMHhhZiwgMHhkMiwgMHhiYywgMHhkMn19LAorIHsweDBhYzYsIDY0LCB7IDB4MWEsIDB4MTIsIDB4MGYsIDB4N2QsIDB4YzIsIDB4MTcsIDB4MzAsIDB4MDQsIDB4MDMsIDB4MTIsIDB4MDQsIDB4NDgsIDB4MzAsIDB4MDQsIDB4MmEsIDB4MzAsIDB4MDYsCisgIDB4MjcsIDB4YzIsIDB4MDYsIDB4ZTUsIDB4MTIsIDB4NjAsIDB4MTYsIDB4MTUsIDB4MTIsIDB4OTAsIDB4N2YsIDB4ZDgsIDB4ZTAsIDB4MzAsIDB4ZTYsIDB4MDQsCisgIDB4N2YsIDB4MDAsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MjAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZWYsIDB4ZjAsIDB4ODAsIDB4MDYsIDB4OTAsIDB4N2YsIDB4OTYsCisgIDB4NzQsIDB4MjAsIDB4ZjAsIDB4MTIsIDB4MGIsIDB4MTQsIDB4ODAsIDB4Y2QsIDB4MzAsIDB4MTcsIDB4MDcsIDB4YzIsIDB4MTcsIDB4MTIsIDB4MDd9fSwKKyB7MHgwYjA2LCA2NCwgeyAweGMwLCAweDgwLCAweGMzLCAweDMwLCAweDE5LCAweGMwLCAweGMyLCAweDE5LCAweDEyLCAweDBlLCAweGRjLCAweDgwLCAweGI5LCAweDIyLCAweGU1LCAweDMxLCAweDYwLAorICAweDAyLCAweDE1LCAweDMxLCAweGU1LCAweDM5LCAweDYwLCAweDU1LCAweDY1LCAweDM1LCAweDcwLCAweDRiLCAweGU1LCAweDMzLCAweGY0LCAweDYwLCAweDAyLAorICAweDA1LCAweDMzLCAweGU1LCAweDMzLCAweGMzLCAweDk1LCAweDQ0LCAweDQwLCAweDQzLCAweGMyLCAweGFmLCAweDMwLCAweDAyLCAweDFiLCAweDkwLCAweDdmLAorICAweGI4LCAweGUwLCAweDIwLCAweGUxLCAweDJkLCAweDkwLCAweDdmLCAweGI3LCAweGU1LCAweDM5LCAweGYwLCAweGMyLCAweDAyLCAweGU0LCAweGY1fX0sCisgezB4MGI0NiwgNjQsIHsgMHgzOSwgMHhmNSwgMHgzMywgMHhmNSwgMHgzNSwgMHg3NSwgMHgxMiwgMHhmZiwgMHg4MCwgMHgxOSwgMHg5MCwgMHg3ZiwgMHhiNiwgMHhlMCwgMHgyMCwgMHhlMSwgMHgxMiwKKyAgMHg5MCwgMHg3ZiwgMHhiOSwgMHhlNSwgMHgzOSwgMHhmMCwgMHhkMiwgMHgwMiwgMHhlNCwgMHhmNSwgMHgzOSwgMHhmNSwgMHgzMywgMHhmNSwgMHgzNSwgMHg3NSwKKyAgMHgxMiwgMHhmZiwgMHhkMiwgMHhhZiwgMHg4MCwgMHgwNiwgMHg4NSwgMHgzOSwgMHgzNSwgMHhlNCwgMHhmNSwgMHgzMywgMHhlNSwgMHgyYywgMHg2MCwgMHgzMCwKKyAgMHgyMCwgMHgwZiwgMHgwNywgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHgzMCwgMHhlMCwgMHgwZiwgMHhlNSwgMHgyZCwgMHg2MCwgMHgwNiwgMHhlNH19LAorIHsweDBiODYsIDY0LCB7IDB4ZjUsIDB4MmQsIDB4NDMsIDB4MzQsIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4MzAsIDB4ODAsIDB4MTQsIDB4ZTUsIDB4MzAsIDB4ZDMsIDB4OTUsIDB4NDUsIDB4NTAsIDB4MGQsCisgIDB4ZTUsIDB4MzAsIDB4YjUsIDB4NDUsIDB4MDYsIDB4NzUsIDB4MmQsIDB4MDEsIDB4NDMsIDB4MzQsIDB4MDEsIDB4MDUsIDB4MzAsIDB4YzIsIDB4MGYsIDB4MjIsCisgIDB4OTAsIDB4N2YsIDB4ZDksIDB4ZTAsIDB4MzAsIDB4ZTIsIDB4MDQsIDB4N2YsIDB4MDAsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MjAsIDB4OTAsIDB4N2YsIDB4OTYsCisgIDB4ZWYsIDB4ZjAsIDB4MjIsIDB4ZTUsIDB4MTQsIDB4NDUsIDB4MTMsIDB4NjAsIDB4NTcsIDB4YWUsIDB4MTMsIDB4YWYsIDB4MTQsIDB4ZDMsIDB4ZWZ9fSwKKyB7MHgwYmM2LCA2NCwgeyAweDk0LCAweDQwLCAweGVlLCAweDk0LCAweDAwLCAweDQwLCAweDA0LCAweDdlLCAweDAwLCAweDdmLCAweDQwLCAweGMzLCAweGU1LCAweDE0LCAweDlmLCAweGY1LCAweDE0LAorICAweGU1LCAweDEzLCAweDllLCAweGY1LCAweDEzLCAweGU0LCAweGZkLCAweGVkLCAweGMzLCAweDlmLCAweGU0LCAweDllLCAweDUwLCAweDFmLCAweDg1LCAweDE2LAorICAweDgyLCAweDg1LCAweDE1LCAweDgzLCAweGUwLCAweGZjLCAweDc0LCAweDAwLCAweDJkLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLAorICAweGVjLCAweGYwLCAweDBkLCAweDA1LCAweDE2LCAweGU1LCAweDE2LCAweDcwLCAweDAyLCAweDA1LCAweDE1LCAweDgwLCAweGRhLCAweDkwLCAweDdmfX0sCisgezB4MGMwNiwgNjQsIHsgMHhhOSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYywgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHhlZiwgMHhmMCwgMHgyMiwKKyAgMHg5MCwgMHg3ZiwgMHhhYywgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHhmMCwgMHgyMiwgMHhlNCwgMHg5MCwgMHg3ZiwKKyAgMHg5MywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHg3NCwgMHgzMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHg3NCwgMHgyMCwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5NCwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZCwgMHg3NCwgMHhmZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NywgMHg3NCwgMHg4Nn19LAorIHsweDBjNDYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTUsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4ODQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZjAsCisgIDB4ZTQsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZjAsIDB4NzUsIDB4OTgsIDB4NDAsCisgIDB4NDMsIDB4YTgsIDB4MTAsIDB4OTAsIDB4N2YsIDB4ZGUsIDB4NzQsIDB4MWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGYsIDB4NzQsIDB4MGYsIDB4ZjAsIDB4ZDIsCisgIDB4MDQsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDIsIDB4ZTcsIDB4MjJ9fSwKKyB7MHgwYzg2LCA2NCwgeyAweGJiLCAweGZlLCAweDAyLCAweGUzLCAweDIyLCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGU0LCAweDkzLCAweDIyLCAweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLAorICAweDhhLCAweDgzLCAweGYwLCAweDIyLCAweDUwLCAweDAyLCAweGY3LCAweDIyLCAweGJiLCAweGZlLCAweDAxLCAweGYzLCAweDIyLCAweGQwLCAweDgzLCAweGQwLAorICAweDgyLCAweGY4LCAweGU0LCAweDkzLCAweDcwLCAweDEyLCAweDc0LCAweDAxLCAweDkzLCAweDcwLCAweDBkLCAweGEzLCAweGEzLCAweDkzLCAweGY4LCAweDc0LAorICAweDAxLCAweDkzLCAweGY1LCAweDgyLCAweDg4LCAweDgzLCAweGU0LCAweDczLCAweDc0LCAweDAyLCAweDkzLCAweDY4LCAweDYwLCAweGVmLCAweGEzfX0sCisgezB4MGNjNiwgNjQsIHsgMHhhMywgMHhhMywgMHg4MCwgMHhkZiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5MywgMHhmMCwKKyAgMHg5MCwgMHg3ZiwgMHg5ZCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NywgMHhlMCwgMHg0NCwgMHg0MiwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5YywgMHg3NCwgMHgxMCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZCwgMHg3NCwgMHhiZSwgMHhmMCwgMHgzMCwKKyAgMHgxNiwgMHgwNCwgMHg3ZiwgMHg4MCwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHg5MCwgMHg3ZiwgMHg5NywgMHhlZiwgMHhmMCwgMHhlNCwgMHg5MH19LAorIHsweDBkMDYsIDY0LCB7IDB4N2YsIDB4OTUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZjAsIDB4MjIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ZjAsIDB4YzAsCisgIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4YzAsIDB4ZDAsIDB4NzUsIDB4ZDAsCisgIDB4MDgsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YTksIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MTIsIDB4MGIsIDB4YmEsIDB4ZDAsIDB4ZDAsIDB4ZDAsCisgIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZjAsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4YzB9fSwKKyB7MHgwZDQ2LCA2NCwgeyAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweDkwLCAweDdmLCAweGM0LAorICAweGU0LCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA0LCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLAorICAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MGQ4NiwgNjQsIHsgMHgwMCwgMHgxMiwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHg0MCwgMHhjZCwgMHgwNiwgMHgxYywgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMiwKKyAgMHgwMCwgMHgwMiwgMHgwOSwgMHgwMiwgMHg0MywgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwOSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwNywKKyAgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMSwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMiwgMHgwMiwgMHg0MCwKKyAgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHg4MSwgMHgwMiwgMHg0MCwgMHgwMH19LAorIHsweDBkYzYsIDY0LCB7IDB4MDEsIDB4MDcsIDB4MDUsIDB4ODIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODMsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsCisgIDB4ODQsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4MDMsIDB4MDksIDB4MDQsIDB4MTAsIDB4MDMsIDB4NGIsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzksCisgIDB4MDAsIDB4NzMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmUsIDB4MDAsIDB4MmUsIDB4MDMsIDB4NGIsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzksCisgIDB4MDAsIDB4NzMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NTUsIDB4MDAsIDB4NTAsIDB4MDB9fSwKKyB7MHgwZTA2LCA2NCwgeyAweDUzLCAweDAwLCAweDQ4LCAweDAwLCAweDMxLCAweDAwLCAweDMxLCAweDAwLCAweDMyLCAweDAwLCAweDJkLCAweDAwLCAweDUzLCAweDAwLCAweDY1LCAweDAwLCAweDcyLAorICAweDAwLCAweDY5LCAweDAwLCAweDYxLCAweDAwLCAweDZjLCAweDAwLCAweDIyLCAweDAzLCAweDU1LCAweDAwLCAweDUzLCAweDAwLCAweDQxLCAweDAwLCAweDJkLAorICAweDAwLCAweDM1LCAweDAwLCAweDMzLCAweDAwLCAweDIwLCAweDAwLCAweDMyLCAweDAwLCAweDMwLCAweDAwLCAweDMwLCAweDAwLCAweDMyLCAweDAwLCAweDYxLAorICAweDAwLCAweDcwLCAweDAwLCAweDcyLCAweDAwLCAweDMyLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweGUwLCAweGMwLCAweDgzfX0sCisgezB4MGU0NiwgNjQsIHsgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwKKyAgMHg3NCwgMHgwMiwgMHhmMCwgMHhkMiwgMHgwNiwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwKKyAgMHhlMCwgMHgzMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwKKyAgMHgwMCwgMHhkMiwgMHgxNywgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMH19LAorIHsweDBlODYsIDY0LCB7IDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsCisgIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4ZDIsIDB4MTksIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsCisgIDB4NzQsIDB4MDgsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsCisgIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDB9fSwKKyB7MHgwZWM2LCA2NCwgeyAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGE5LCAweDc0LCAweDAyLCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLAorICAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweDEyLCAweDBjLCAweGNhLCAweDEyLCAweDBmLCAweGIzLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDMwLAorICAweGU3LCAweDEyLCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDdmLCAweDBkLCAweDdlLCAweDAwLCAweDEyLCAweDAwLCAweDAzLCAweDkwLCAweDdmLCAweGQ2LAorICAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweDEyLCAweDBjLCAweDI0LCAweDIyLCAweDAwLCAweDAyLCAweDBlLCAweDY5LCAweDAwLCAweDAyLCAweDBlfX0sCisgezB4MGYwNiwgNjQsIHsgMHg0MiwgMHgwMCwgMHgwMiwgMHgwZCwgMHg0NSwgMHgwMCwgMHgwMiwgMHgwZSwgMHg5MCwgMHgwMCwgMHgwMiwgMHgwZiwgMHgxMCwgMHgwMCwgMHgwMiwgMHgwZiwgMHgxNCwKKyAgMHgwMCwgMHgwMiwgMHgwZCwgMHgxMiwgMHgwMCwgMHgwMiwgMHgwZiwgMHgxYywgMHgwMCwgMHgwMiwgMHgwZSwgMHhiNywgMHgwMCwgMHgwMiwgMHgwZiwgMHgyNCwKKyAgMHgwMCwgMHgwMiwgMHgwZiwgMHgzMywgMHgwMCwgMHgwMiwgMHgwZiwgMHgyYywgMHgwMCwgMHgwMiwgMHgwZiwgMHg1OCwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywKKyAgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MH19LAorIHsweDBmNDYsIDY0LCB7IDB4N2YsIDB4YTksIDB4NzQsIDB4MDQsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsCisgIDB4MzIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsCisgIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YTksIDB4NzQsIDB4MDgsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsCisgIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4ZTAsIDB4NDR9fSwKKyB7MHgwZjg2LCA2MSwgeyAweDA4LCAweGYwLCAweDMwLCAweDFhLCAweDA0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDdmLCAweGY0LCAweDdlLCAweDAxLCAweDEyLCAweDAwLCAweDAzLCAweDkwLAorICAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGY3LCAweGYwLCAweGUwLCAweDQ0LCAweDA0LCAweGYwLCAweDIyLCAweDc0LCAweDAwLCAweGY1LCAweDg2LCAweDkwLAorICAweGZkLCAweGE1LCAweDdjLCAweDA1LCAweGEzLCAweGU1LCAweDgyLCAweDQ1LCAweDgzLCAweDcwLCAweGY5LCAweDIyLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLAorICAweDQ0LCAweDgwLCAweGYwLCAweDQzLCAweDg3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIyfX0sCisgezB4ZmZmZiwJMCwJezB4MDB9fQorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLlMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MThmZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLlMKQEAgLTAsMCArMSwxMTI0IEBACisvKiAgJElkOiBsb29wLnMsdiAxLjIzIDIwMDAvMDMvMjAgMDk6NDk6MDYgd2FybmVyIEV4cCAkCisgKiAKKyAqICBGaXJtd2FyZSBmb3IgdGhlIEtleXNwYW4gUERBIFNlcmlhbCBBZGFwdGVyLCBhIFVTQiBzZXJpYWwgcG9ydCBiYXNlZCBvbgorICogIHRoZSBFelVTQiBtaWNyb2NvbnRyb2xsZXIuCisgKiAKKyAqICAoQykgQ29weXJpZ2h0IDIwMDAgQnJpYW4gV2FybmVyIDx3YXJuZXJAbG90aGFyLmNvbT4KKyAqIAorICogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIAl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqICAiS2V5c3BhbiBQREEgU2VyaWFsIEFkYXB0ZXIiIGlzIHByb2JhYmx5IGEgY29weXJpZ2h0IG9mIEtleXNwYW4sIHRoZQorICogIGNvbXBhbnkuCisgKiAKKyAqICBUaGlzIHNlcmlhbCBhZGFwdGVyIGlzIGJhc2ljYWxseSBhbiBFelVTQiBjaGlwIGFuZCBhbiBSUy0yMzIgbGluZSBkcml2ZXIKKyAqICBpbiBhIGxpdHRsZSB3aWRnZXQgdGhhdCBoYXMgYSBEQi05IG9uIG9uZSBlbmQgYW5kIGEgVVNCIHBsdWcgb24gdGhlIG90aGVyLgorICogIEl0IHVzZXMgdGhlIEV6VVNCJ3MgaW50ZXJuYWwgVUFSVDAgKHVzaW5nIHRoZSBwaW5zIGZyb20gUG9ydCBDKSBhbmQgdGltZXIyCisgKiAgYXMgYSBiYXVkLXJhdGUgZ2VuZXJhdG9yLiBUaGUgd2lyaW5nIGlzOgorICogICBQQzAvUnhEMCA8LSByeGQgKERCOSBwaW4gMikgICAgICAgICBQQzQgPC0gZHNyIHBpbiA2CisgKiAgIFBDMS9UeEQwIC0+IHR4ZCBwaW4gMyAgICAgICAgICAgICAgIFBDNSA8LSByaSAgcGluIDkKKyAqICAgUEMyICAgICAgLT4gcnRzIHBpbiA3ICAgICAgICAgICAgICAgUEM2IDwtIGRjZCBwaW4gMQorICogICBQQzMgICAgICA8LSBjdHMgcGluIDggICAgICAgICAgICAgICBQQzcgLT4gZHRyIHBpbiA0CisgKiAgIFBCMSAtPiBsaW5lIGRyaXZlciBzdGFuZGJ5CisgKgorICogIFRoZSBFelVTQiByZWdpc3RlciBjb25zdGFudHMgYmVsb3cgY29tZSBmcm9tIHRoZWlyIGV4Y2VsbGVudCBkb2N1bWVudGF0aW9uCisgKiAgYW5kIHNhbXBsZSBjb2RlICh3aGljaCB1c2VkIHRvIGJlIGF2YWlsYWJsZSBhdCB3d3cuYW5jaG9yY2hpcHMuY29tLCBidXQKKyAqICB0aGF0IGhhcyBub3cgYmVlbiBhYnNvcmJlZCBpbnRvIEN5cHJlc3MnIHNpdGUgYW5kIHRoZSBDRC1ST00gY29udGVudHMKKyAqICBkb24ndCBhcHBlYXIgdG8gYmUgYXZhaWxhYmxlIG9ubGluZSBhbnltb3JlKS4gSWYgd2UgZ2V0IG11bHRpcGxlCisgKiAgRXpVU0ItYmFzZWQgZHJpdmVycyBpbnRvIHRoZSBrZXJuZWwsIGl0IG1pZ2h0IGJlIHVzZWZ1bCB0byBwdWxsIHRoZW0gb3V0CisgKiAgaW50byBhIHNlcGFyYXRlIC5oIGZpbGUuCisgKiAKKyAqIFRIRU9SWSBPRiBPUEVSQVRJT046CisgKgorICogICBUaGVyZSBhcmUgdHdvIDI1Ni1ieXRlIHJpbmcgYnVmZmVycywgb25lIGZvciB0eCwgb25lIGZvciByeC4KKyAqCisgKiAgIEVQMm91dCBpcyBwdXJlIHR4IGRhdGEuIFdoZW4gaXQgYXBwZWFycywgdGhlIGRhdGEgaXMgY29waWVkIGludG8gdGhlIHR4CisgKiAgIHJpbmcgYW5kIHNlcmlhbCB0cmFuc21pc3Npb24gaXMgc3RhcnRlZCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBydW5uaW5nLiBUaGUKKyAqICAgInR4IGJ1ZmZlciBlbXB0eSIgaW50ZXJydXB0IG1heSBraWNrIG9mZiBhbm90aGVyIGNoYXJhY3RlciBpZiB0aGUgcmluZworICogICBzdGlsbCBoYXMgZGF0YS4gSWYgdGhlIGhvc3QgaXMgdHgtYmxvY2tlZCBiZWNhdXNlIHRoZSByaW5nIGZpbGxlZCB1cCwKKyAqICAgaXQgd2lsbCByZXF1ZXN0IGEgInR4IHVudGhyb3R0bGUiIGludGVycnVwdC4gSWYgc2VuZGluZyBhIHNlcmlhbCBjaGFyYWN0ZXIKKyAqICAgZW1wdGllcyB0aGUgcmluZyBiZWxvdyB0aGUgZGVzaXJlZCB0aHJlc2hvbGQsIHdlIHNldCBhIGJpdCB0aGF0IHdpbGwgc2VuZAorICogICB1cCB0aGUgdHggdW50aHJvdHRsZSBtZXNzYWdlIGFzIHNvb24gYXMgdGhlIHJ4IGJ1ZmZlciBiZWNvbWVzIGZyZWUuCisgKgorICogICBFUDJpbiAoaW50ZXJydXB0KSBpcyB1c2VkIHRvIHNlbmQgYm90aCByeCBjaGFycyBhbmQgcnggc3RhdHVzIG1lc3NhZ2VzCisgKiAgIChvbmx5ICJ0eCB1bnRocm90dGxlIiBhdCB0aGlzIHRpbWUpIGJhY2sgdXAgdG8gdGhlIGhvc3QuIFRoZSBmaXJzdCBieXRlCisgKiAgIG9mIHRoZSByeCBtZXNzYWdlIGluZGljYXRlcyBkYXRhICgwKSBvciBzdGF0dXMgbXNnICgxKS4gU3RhdHVzIG1lc3NhZ2VzCisgKiAgIGFyZSBzZW50IGJlZm9yZSBhbnkgZGF0YS4KKyAqCisgKiAgIEluY29taW5nIHNlcmlhbCBjaGFyYWN0ZXJzIGFyZSBwdXQgaW50byB0aGUgcnggcmluZyBieSB0aGUgc2VyaWFsCisgKiAgIGludGVycnVwdCwgYW5kIHRoZSBFUDJpbiBidWZmZXIgc2VudCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBpbiB0cmFuc2l0LgorICogICBXaGVuIHRoZSBFUDJpbiBidWZmZXIgcmV0dXJucywgdGhlIGludGVycnVwdCBwcm9tcHRzIHVzIHRvIHNlbmQgbW9yZQorICogICByeCBjaGFycyAob3Igc3RhdHVzIG1lc3NhZ2VzKSBpZiB0aGV5IGFyZSBwZW5kaW5nLgorICoKKyAqICAgRGV2aWNlIGNvbnRyb2wgaGFwcGVucyB0aHJvdWdoICJ2ZW5kb3Igc3BlY2lmaWMiIGNvbnRyb2wgbWVzc2FnZXMgb24gRVAwLgorICogICBBbGwgbWVzc2FnZXMgYXJlIGRlc3RpbmVkIGZvciB0aGUgIkludGVyZmFjZSIgKHdpdGggdGhlIGluZGV4IGFsd2F5cyAwLAorICogICBzbyB0aGF0IGlmIHRoZWlyIHR3by1wb3J0IGRldmljZSBtaWdodCBzb21lZGF5IHVzZSBzaW1pbGFyIGZpcm13YXJlLCB3ZQorICogICBjYW4gdXNlIGluZGV4PTEgdG8gcmVmZXIgdG8gdGhlIHNlY29uZCBwb3J0KS4gVGhlIG1lc3NhZ2VzIGRlZmluZWQgYXJlOgorICoKKyAqICAgIGJSZXF1ZXN0ID0gMCA6IHNldCBiYXVkL2JpdHMvcGFyaXR5CisgKiAgICAgICAgICAgICAgIDEgOiB1bnVzZWQKKyAqICAgICAgICAgICAgICAgMiA6IHJlc2VydmVkIGZvciBzZXR0aW5nIEhXIGZsb3cgY29udHJvbCAoQ1RTUlRTKQorICogICAgICAgICAgICAgICAzIDogZ2V0L3NldCAibW9kZW0gaW5mbyIgKHBpbiBzdGF0ZXM6IERUUiwgUlRTLCBEQ0QsIFJJLCBldGMpCisgKiAgICAgICAgICAgICAgIDQgOiBzZXQgYnJlYWsgKG9uL29mZikKKyAqICAgICAgICAgICAgICAgNSA6IHJlc2VydmVkIGZvciByZXF1ZXN0aW5nIGludGVycnVwdHMgb24gcGluIHN0YXRlIGNoYW5nZQorICogICAgICAgICAgICAgICA2IDogcXVlcnkgYnVmZmVyIHJvb20gb3IgY2hhcnMgaW4gdHggYnVmZmVyCisgKiAgICAgICAgICAgICAgIDcgOiByZXF1ZXN0IHR4IHVudGhyb3R0bGUgaW50ZXJydXB0CisgKgorICogIFRoZSBob3N0LXNpZGUgZHJpdmVyIGlzIHNldCB0byByZWNvZ25pemUgdGhlIGRldmljZSBJRCB2YWx1ZXMgc3Rhc2hlZCBpbgorICogIHNlcmlhbCBFRVBST00gKDB4MDZjZCwgMHgwMTAzKSwgcHJvZ3JhbSB0aGlzIGZpcm13YXJlIGludG8gcGxhY2UsIHRoZW4KKyAqICBzdGFydCBpdCBydW5uaW5nLiBUaGlzIGZpcm13YXJlIHdpbGwgdXNlIEV6VVNCJ3MgInJlbnVtZXJhdGlvbiIgdHJpY2sgYnkKKyAqICBzaW11bGF0aW5nIGEgYnVzIGRpc2Nvbm5lY3QsIHRoZW4gcmVjb25uZWN0IHdpdGggYSBkaWZmZXJlbnQgZGV2aWNlIElECisgKiAgKGVuY29kZWQgaW4gdGhlIGRlc2NfZGV2aWNlIGRlc2NyaXB0b3IgYmVsb3cpLiBUaGUgaG9zdCBkcml2ZXIgdGhlbgorICogIHJlY29nbml6ZXMgdGhlIG5ldyBkZXZpY2UgSUQgYW5kIGdsdWVzIGl0IHRvIHRoZSByZWFsIHNlcmlhbCBkcml2ZXIgY29kZS4KKyAqCisgKiBVU0VGVUwgRE9DUzoKKyAqICBFelVTQiBUZWNobmljYWwgUmVmZXJlbmNlIE1hbnVhbDogPGh0dHA6Ly93d3cuYW5jaG9yY2hpcHMuY29tPgorICogIDgwNTEgbWFudWFsczogZXZlcnl3aGVyZSwgYnV0IHRyeSB3d3cuZGFsc2VtaS5jb20gYmVjYXVzZSB0aGUgRXpVU0IgaXMKKyAqICAgYmFzaWNhbGx5IHRoZSBEYWxsYXMgZW5oYW5jZWQgODA1MSBjb2RlLiBSZW1lbWJlciB0aGF0IHRoZSBFelVTQiBJTyBwb3J0cworICogICB1c2UgdG90YWxseSBkaWZmZXJlbnQgcmVnaXN0ZXJzIQorICogIFVTQiAxLjEgc3BlYzogd3d3LnVzYi5vcmcKKyAqCisgKiBIT1cgVE8gQlVJTEQ6CisgKiAgZ2NjIC14IGFzc2VtYmxlci13aXRoLWNwcCAtUCAtRSAtbyBrZXlzcGFuX3BkYS5hc20ga2V5c3Bhbl9wZGEucworICogIGFzMzEgLWwga2V5c3Bhbl9wZGEuYXNtCisgKiAgbXYga2V5c3Bhbl9wZGEub2JqIGtleXNwYW5fcGRhLmhleAorICogIHBlcmwgZXp1c2JfY29udmVydC5wbCBrZXlzcGFuX3BkYSA8IGtleXNwYW5fcGRhLmhleCA+IGtleXNwYW5fcGRhX2Z3LmgKKyAqIEdldCBhczMxIGZyb20gPGh0dHA6Ly93d3cucGpyYy5jb20vdGVjaC84MDUxL2luZGV4Lmh0bWw+LCBhbmQgaGFjayBvbiBpdAorICogYSBiaXQgdG8gbWFrZSBpdCBidWlsZC4KKyAqCisgKiBUSEFOS1M6CisgKiAgR3JlZyBLcm9haC1IYXJ0bWFuLCBmb3IgY29vcmRpbmF0aW5nIHRoZSB3aG9sZSB1c2Itc2VyaWFsIHRoaW5nLgorICogIEFuY2hvckNoaXBzLCBmb3IgbWFraW5nIHN1Y2ggYW4gaW5jcmVkaWJseSB1c2VmdWwgbGl0dGxlIG1pY3JvY29udHJvbGxlci4KKyAqICBLZXlTcGFuLCBmb3IgbWFraW5nIGEgaGFuZHksIGNoZWFwICgkNDApIHdpZGdldCB0aGF0IHdhcyBzbyBlYXN5IHRvIHRha2UKKyAqICAgICAgICAgICBhcGFydCBhbmQgdHJhY2Ugd2l0aCBhbiBvaG1tZXRlci4KKyAqCisgKiBUT0RPOgorICogIGxvdHMuIGdyZXAgZm9yIFRPRE8uIEludGVycnVwdCBzYWZldHkgbmVlZHMgc3RyZXNzLXRlc3RpbmcuIEJldHRlciBmbG93CisgKiAgY29udHJvbC4gSW50ZXJydXB0aW5nIGhvc3QgdXBvbiBjaGFuZ2UgaW4gRENELCBldGMsIGNvdW50aW5nIHRyYW5zaXRpb25zLgorICogIE5lZWQgdG8gZmluZCBhIHNhZmUgZGV2aWNlIGlkIHRvIHVzZSAodGhlIG9uZSB1c2VkIGJ5IHRoZSBLZXlzcGFuIGZpcm13YXJlCisgKiAgdW5kZXIgV2luZG93cyB3b3VsZCBiZSBpZGVhbC4uIGNhbiBhbnlvbmUgZmlndXJlIG91dCB3aGF0IGl0IGlzPykuIFBhcml0eS4KKyAqICBNb3JlIGJhdWQgcmF0ZXMuIE9oLCBhbmQgdGhlIHN0cmluZy1kZXNjcmlwdG9yLWxlbmd0aCBzaWxpY29uIGJ1ZworICogIHdvcmthcm91bmQgc2hvdWxkIGJlIGltcGxlbWVudGVkLCBidXQgSSdtIGxhenksIGFuZCB0aGUgY29uc2VxdWVuY2UgaXMKKyAqICB0aGF0IHRoZSBkZXZpY2UgbmFtZSBzdHJpbmdzIHRoYXQgc2hvdyB1cCBpbiB5b3VyIGtlcm5lbCBsb2cgd2lsbCBoYXZlCisgKiAgbG90cyBvZiB0cmFpbGluZyBiaW5hcnkgZ2FyYmFnZSBpbiB0aGVtIChhcHBlYXJzIGFzID8/Pz8pLiBEZXZpY2Ugc3RyaW5ncworICogIHNob3VsZCBiZSBtYWRlIG1vcmUgYWNjdXJhdGUuCisgKgorICogUXVlc3Rpb25zLCBidWdzLCBwYXRjaGVzIHRvIEJyaWFuLgorICoKKyAqICAtQnJpYW4gV2FybmVyIDx3YXJuZXJAbG90aGFyLmNvbT4KKyAqCisgKi8KKwkKKyNkZWZpbmUgSElHSCh4KSAoKCh4KSAmIDB4ZmYwMCkgLyAyNTYpCisjZGVmaW5lIExPVyh4KSAoKHgpICYgMHhmZikKKworI2RlZmluZSBkcGwxIDB4ODQKKyNkZWZpbmUgZHBoMSAweDg1CisjZGVmaW5lIGRwcyAweDg2CisKKzs7OyBvdXIgYml0IGFzc2lnbm1lbnRzCisjZGVmaW5lIFRYX1JVTk5JTkcgMAorI2RlZmluZSBET19UWF9VTlRIUk9UVExFIDEKKwkKKwk7OyBzdGFjayBmcm9tIDB4NjAgdG8gMHg3Zjogc2hvdWxkIHJlYWxseSBzZXQgU1AgdG8gMHg2MC0xLCBub3QgMHg2MAorI2RlZmluZSBTVEFDSyAjMHg2MC0xCisKKyNkZWZpbmUgRVhJRiAweDkxCisjZGVmaW5lIEVJRSAweGU4CisJLmZsYWcgRVVTQiwgRUlFLjAKKwkuZmxhZyBFUzAsIElFLjQKKworI2RlZmluZSBFUDBDUyAjMHg3ZmI0CisjZGVmaW5lIEVQMFNUQUxMYml0ICMweDAxCisjZGVmaW5lIElOMEJVRiAjMHg3ZjAwCisjZGVmaW5lIElOMEJDICMweDdmYjUKKyNkZWZpbmUgT1VUMEJVRiAjMHg3ZWMwCisjZGVmaW5lIE9VVDBCQyAjMHg3ZmM1CQkKKyNkZWZpbmUgSU4yQlVGICMweDdlMDAKKyNkZWZpbmUgSU4yQkMgIzB4N2ZiOQorI2RlZmluZSBJTjJDUyAjMHg3ZmI4CisjZGVmaW5lIE9VVDJCQyAjMHg3ZmM5CisjZGVmaW5lIE9VVDJDUyAjMHg3ZmM4CisjZGVmaW5lIE9VVDJCVUYgIzB4N2RjMAorI2RlZmluZSBJTjRCVUYgIzB4N2QwMAorI2RlZmluZSBJTjRCQyAjMHg3ZmJkCisjZGVmaW5lIElONENTICMweDdmYmMKKyNkZWZpbmUgT0VCICMweDdmOWQKKyNkZWZpbmUgT1VUQiAjMHg3Zjk3CisjZGVmaW5lIE9FQyAjMHg3ZjllCisjZGVmaW5lIE9VVEMgIzB4N2Y5OAorI2RlZmluZSBQSU5TQyAjMHg3ZjliCisjZGVmaW5lIFBPUlRDQ0ZHICMweDdmOTUKKyNkZWZpbmUgSU4wN0lSUSAjMHg3ZmE5CisjZGVmaW5lIE9VVDA3SVJRICMweDdmYWEKKyNkZWZpbmUgSU4wN0lFTiAjMHg3ZmFjCisjZGVmaW5lIE9VVDA3SUVOICMweDdmYWQKKyNkZWZpbmUgVVNCSVJRICMweDdmYWIKKyNkZWZpbmUgVVNCSUVOICMweDdmYWUKKyNkZWZpbmUgVVNCQkFWICMweDdmYWYKKyNkZWZpbmUgVVNCQ1MgIzB4N2ZkNgorI2RlZmluZSBTVURQVFJIICMweDdmZDQKKyNkZWZpbmUgU1VEUFRSTCAjMHg3ZmQ1CisjZGVmaW5lIFNFVFVQREFUICMweDdmZTgKKwkJCisJOzsgdXNiIGludGVycnVwdCA6IGVuYWJsZSBpcyBFSUUuMCAoMHhlOCksIGZsYWcgaXMgRVhJRi40ICgweDkxKQorCisJLm9yZyAwCisJbGptcCBzdGFydAorCTs7IGludGVycnVwdCB2ZWN0b3JzCisJLm9yZyAyM0gKKwlsam1wIHNlcmlhbF9pbnQKKwkuYnl0ZSAwCisJCisJLm9yZyA0M0gKKwlsam1wIFVTQl9KdW1wX1RhYmxlCisJLmJ5dGUgMAkJCTsgZmlsbGVkIGluIGJ5IHRoZSBVU0IgY29yZQorCis7OzsgbG9jYWwgdmFyaWFibGVzLiBUaGVzZSBhcmUgbm90IGluaXRpYWxpemVkIHByb3Blcmx5OiBkbyBpdCBieSBoYW5kLgorCS5vcmcgMzBICityeF9yaW5nX2luOgkuYnl0ZSAwCityeF9yaW5nX291dDoJLmJ5dGUgMAordHhfcmluZ19pbjoJLmJ5dGUgMAordHhfcmluZ19vdXQ6CS5ieXRlIDAKK3R4X3VudGhyb3R0bGVfdGhyZXNob2xkOgkuYnl0ZSAwCisJCQorCS5vcmcgMHgxMDBICQk7IHdhbnRzIHRvIGJlIG9uIGEgcGFnZSBib3VuZGFyeQorVVNCX0p1bXBfVGFibGU6CisJbGptcAlJU1JfU3VkYXYJOyBTZXR1cCBEYXRhIEF2YWlsYWJsZQorCS5ieXRlIDAKKwlsam1wCTAJCTsgU3RhcnQgb2YgRnJhbWUKKwkuYnl0ZSAwCisJbGptcAkwCQk7IFNldHVwIERhdGEgTG9hZGluZworCS5ieXRlIDAKKwlsam1wCTAJCTsgR2xvYmFsIFN1c3BlbmQKKwkuYnl0ZSAJMAorCWxqbXAJMAkJOyBVU0IgUmVzZXQgIAkKKwkuYnl0ZQkwCisJbGptcAkwCQk7IFJlc2VydmVkCisJLmJ5dGUJMAorCWxqbXAJMAkJOyBFbmQgUG9pbnQgMCBJbgorCS5ieXRlCTAKKwlsam1wCTAJCTsgRW5kIFBvaW50IDAgT3V0CisJLmJ5dGUJMAorCWxqbXAJMAkJOyBFbmQgUG9pbnQgMSBJbgorCS5ieXRlCTAKKwlsam1wCTAJCTsgRW5kIFBvaW50IDEgT3V0CisJLmJ5dGUJMAorCWxqbXAJSVNSX0VwMmluCisJLmJ5dGUJMAorCWxqbXAJSVNSX0VwMm91dAorCS5ieXRlCTAKKworCisJLm9yZyAweDIwMAorCQkKK3N0YXJ0Ogltb3YgU1AsU1RBQ0stMSA7IHNldCBzdGFjaworCTs7IGNsZWFyIGxvY2FsIHZhcmlhYmxlcworCWNsciBhCisJbW92IHR4X3JpbmdfaW4sIGEKKwltb3YgdHhfcmluZ19vdXQsIGEKKwltb3YgcnhfcmluZ19pbiwgYQorCW1vdiByeF9yaW5nX291dCwgYQorCW1vdiB0eF91bnRocm90dGxlX3RocmVzaG9sZCwgYQorCWNsciBUWF9SVU5OSU5HCisJY2xyIERPX1RYX1VOVEhST1RUTEUKKwkKKwk7OyBjbGVhciBmaWZvIHdpdGggImZlIgorCW1vdiByMSwgMAorCW1vdiBhLCAjMHhmZQorCW1vdiBkcHRyLCAjdHhfcmluZworY2xlYXJfdHhfcmluZ19sb29wOgorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCWRqbnogcjEsIGNsZWFyX3R4X3JpbmdfbG9vcAorCisJbW92IGEsICMweGZkCisJbW92IGRwdHIsICNyeF9yaW5nCitjbGVhcl9yeF9yaW5nX2xvb3A6CisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJZGpueiByMSwgY2xlYXJfcnhfcmluZ19sb29wCisKKzs7OyB0dXJuIG9uIHRoZSBSUy0yMzIgZHJpdmVyIGNoaXAgKGJyaW5nIHRoZSBTVEFOREJZIHBpbiBsb3cpCisJOzsgc2V0IE9FQi4xCisJbW92IGEsICMwMkgKKwltb3YgZHB0cixPRUIKKwltb3Z4IEBkcHRyLGEKKwk7OyBjbGVhciBQQjEKKwltb3YgYSwgIzAwSAorCW1vdiBkcHRyLE9VVEIKKwltb3Z4IEBkcHRyLGEKKwk7OyBzZXQgT0VDLlsxMjddCisJbW92IGEsICMweDg2CisJbW92IGRwdHIsT0VDCisJbW92eCBAZHB0cixhCisJOzsgc2V0IFBPUlRDQ0ZHLlswMV0gdG8gcm91dGUgVHhEMCxSeEQwIHRvIHNlcmlhbCBwb3J0CisJbW92IGRwdHIsIFBPUlRDQ0ZHCisJbW92IGEsICMweDAzCisJbW92eCBAZHB0ciwgYQorCQorCTs7IHNldCB1cCBpbnRlcnJ1cHRzLCBhdXRvdmVjdG9yaW5nCisJbW92IGRwdHIsIFVTQkJBVgorCW1vdnggYSxAZHB0cgorCXNldGIgYWNjLjAJCTsgQVZFTiBiaXQgdG8gMAorCW1vdnggQGRwdHIsIGEKKworCW1vdiBhLCMweDAxCQk7IGVuYWJsZSBTVURBVjoJc2V0dXAgZGF0YSBhdmFpbGFibGUgKGZvciBlcDApCisJbW92IGRwdHIsIFVTQklSUQorCW1vdnggQGRwdHIsIGEJCTsgY2xlYXIgU1VEQVZJCisJbW92IGRwdHIsIFVTQklFTgorCW1vdnggQGRwdHIsIGEKKwkKKwltb3YgZHB0ciwgSU4wN0lFTgorCW1vdiBhLCMweDA0CQk7IGVuYWJsZSBJTjIgaW50CisJbW92eCBAZHB0ciwgYQorCQorCW1vdiBkcHRyLCBPVVQwN0lFTgorCW1vdiBhLCMweDA0CQk7IGVuYWJsZSBPVVQyIGludAorCW1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgT1VUMkJDCisJbW92eCBAZHB0ciwgYQkJOyBhcm0gT1VUMgorCisJbW92IGEsICMweDg0CQk7IHR1cm4gb24gUlRTLCBEVFIKKwltb3YgZHB0cixPVVRDCisJbW92eCBAZHB0ciwgYQorCTs7IHNldHVwIHRoZSBzZXJpYWwgcG9ydC4gOTYwMCA4TjEuCisJbW92IGEsIzAxMDEwMDExCQk7IG1vZGUgMSwgZW5hYmxlIHJ4LCBjbGVhciBpbnQKKwltb3YgU0NPTiwgYQorCTs7ICB1c2luZyB0aW1lcjIsIGluIDE2LWJpdCBiYXVkLXJhdGUtZ2VuZXJhdG9yIG1vZGUKKwk7OyAgICh4dGFsIDEyTUh6LCBpbnRlcm5hbCBmb3NjIDI0TUh6KQorCTs7ICBSQ0FQMkgsUkNBUDJMID0gNjU1MzYgLSBmb3NjLygzMipiYXVkKQorCTs7ICA1NzYwMDogMHhGRkYyLkYsIHNheSAweEZGRjMKKwk7OyAgIDk2MDA6IDB4RkZCMS5FLCBzYXkgMHhGRkIyCisJOzsgICAgMzAwOiAweEY2M0MKKyNkZWZpbmUgQkFVRCA5NjAwCisjZGVmaW5lIEJBVURfVElNRU9VVChyYXRlKSAoNjU1MzYgLSAoMjQgKiAxMDAwICogMTAwMCkgLyAoMzIgKiByYXRlKSkKKyNkZWZpbmUgQkFVRF9ISUdIKHJhdGUpIEhJR0goQkFVRF9USU1FT1VUKHJhdGUpKQorI2RlZmluZSBCQVVEX0xPVyhyYXRlKSBMT1coQkFVRF9USU1FT1VUKHJhdGUpKQorCQkKKwltb3YgVDJDT04sICMwMzBoCTsgcmNsaz0xLHRjbGs9MSxjcD0wLHRyMj0wKGVuYWJsZSBsYXRlcikKKwltb3YgcjMsICM1CisJYWNhbGwgc2V0X2JhdWQKKwlzZXRiIFRSMgorCW1vdiBTQ09OLCAjMDUwaAorCQorI2lmIDAKKwltb3YgcjEsICMweDQwCisJbW92IGEsICMweDQxCitzZW5kOgkKKwltb3YgU0JVRiwgYQorCWluYyBhCisJYW5sIGEsICMweDNGCisJb3JsIGEsICMweDQwCis7CXhybCBhLCAjMHgwMgord2FpdDE6CQorCWpuYiBUSSwgd2FpdDEKKwljbHIgVEkKKwlkam56IHIxLCBzZW5kCis7ZG9uZToJc2ptcCBkb25lCisKKyNlbmRpZgorCQorCXNldGIgRVVTQgorCXNldGIgRUEKKwlzZXRiIEVTMAorCTthY2FsbCBkdW1wX3N0YXQKKworCTs7IGhleSwgd2hhdCBzYXkgd2UgUkVOVU1FUkFURSEgKFRSTSBwLjYyKQorCW1vdiBhLCAjMAorCW1vdiBkcHMsIGEKKwltb3YgZHB0ciwgVVNCQ1MKKwltb3YgYSwgIzB4MDIJCTsgRElTQ09OPTAsIERJU0NPRT0wLCBSRU5VTT0xCisJbW92eCBAZHB0ciwgYQorCTs7IG5vdyBwcmVzZW5jZSBwaW4gaXMgZmxvYXRpbmcsIHNpbXVsYXRpbmcgZGlzY29ubmVjdC4gd2FpdCAwLjVzCisJbW92IHIxLCAjNDYKK3JlbnVtX3dhaXQxOgorCW1vdiByMiwgIzAKK3JlbnVtX3dhaXQyOgorCW1vdiByMywgIzAKK3JlbnVtX3dhaXQzOgorCWRqbnogcjMsIHJlbnVtX3dhaXQzCisJZGpueiByMiwgcmVudW1fd2FpdDIKKwlkam56IHIxLCByZW51bV93YWl0MQk7IHdhaXQgYWJvdXQgbiooMjU2XjIpIDZNSHogY2xvY2tzCisJbW92IGEsICMweDA2CQk7IERJU0NPTj0wLCBESVNDT0U9MSwgUkVOVU09MQorCW1vdnggQGRwdHIsIGEKKwk7OyB3ZSBhcmUgYmFjayBvbmxpbmUuIHRoZSBob3N0IGRldmljZSB3aWxsIG5vdyByZS1xdWVyeSB1cworCQorCQorbWFpbjoJc2ptcCBtYWluCisKKwkKKworSVNSX1N1ZGF2OgorCXB1c2ggZHBzCisJcHVzaCBkcGwKKwlwdXNoIGRwaAorCXB1c2ggZHBsMQorCXB1c2ggZHBoMQorCXB1c2ggYWNjCisJbW92IGEsRVhJRgorCWNsciBhY2MuNAorCW1vdiBFWElGLGEJCTsgY2xlYXIgSU5UMiBmaXJzdAorCW1vdiBkcHRyLCBVU0JJUlEJOyBjbGVhciBVU0IgaW50CisJbW92IGEsIzAxaAorCW1vdnggQGRwdHIsYQorCisJOzsgZ2V0IHJlcXVlc3QgdHlwZQorCW1vdiBkcHRyLCBTRVRVUERBVAorCW1vdnggYSwgQGRwdHIKKwltb3YgcjEsIGEJCTsgcjEgPSBibVJlcXVlc3RUeXBlCisJaW5jIGRwdHIKKwltb3Z4IGEsIEBkcHRyCisJbW92IHIyLCBhCQk7IHIyID0gYlJlcXVlc3QKKwlpbmMgZHB0cgorCW1vdnggYSwgQGRwdHIKKwltb3YgcjMsIGEJCTsgcjMgPSB3VmFsdWVMCisJaW5jIGRwdHIKKwltb3Z4IGEsIEBkcHRyCisJbW92IHI0LCBhCQk7IHI0ID0gd1ZhbHVlSAorCisJOzsgbWFpbiBzd2l0Y2ggb24gYm1SZXF1ZXN0LnR5cGU6IHN0YW5kYXJkIG9yIHZlbmRvcgorCW1vdiBhLCByMQorCWFubCBhLCAjMHg2MAorCWNqbmUgYSwgIzB4MDAsIHNldHVwX2JtcmVxX3R5cGVfbm90X3N0YW5kYXJkCisJOzsgc3RhbmRhcmQgcmVxdWVzdDogbm93IG1haW4gc3dpdGNoIGlzIG9uIGJSZXF1ZXN0CisJbGptcCBzZXR1cF9ibXJlcV9pc19zdGFuZGFyZAorCQorc2V0dXBfYm1yZXFfdHlwZV9ub3Rfc3RhbmRhcmQ6CQorCTs7IGEgc3RpbGwgaGFzIGJtcmVxJjB4NjAKKwljam5lIGEsICMweDQwLCBzZXR1cF9ibXJlcV90eXBlX25vdF92ZW5kb3IKKwk7OyBBbmNob3IgcmVzZXJ2ZXMgYlJlcXVlc3QgMHhhMC0weGFmLCB3ZSB1c2Ugc21hbGwgb25lcworCTs7IHN3aXRjaCBvbiBiUmVxdWVzdC4gYm1SZXF1ZXN0IHdpbGwgYWx3YXlzIGJlIDB4NDEgb3IgMHhjMQorCWNqbmUgcjIsICMweDAwLCBzZXR1cF9jdHJsX25vdF8wMAorCTs7IDAwIGlzIHNldCBiYXVkLCB3VmFsdWVbMF0gaGFzIGJhdWQgcmF0ZSBpbmRleAorCWxjYWxsIHNldF9iYXVkCQk7IGluZGV4IGluIHIzLCBjYXJyeSBzZXQgaWYgZXJyb3IKKwlqYyBzZXR1cF9ibXJlcV90eXBlX25vdF9zdGFuZGFyZF9fZG9fc3RhbGwKKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9ibXJlcV90eXBlX25vdF9zdGFuZGFyZF9fZG9fc3RhbGw6CisJbGptcCBzZXR1cF9zdGFsbAorc2V0dXBfY3RybF9ub3RfMDA6CisJY2puZSByMiwgIzB4MDEsIHNldHVwX2N0cmxfbm90XzAxCisJOzsgMDEgaXMgcmVzZXJ2ZWQgZm9yIHNldCBiaXRzIChwYXJpdHkpLiBUT0RPCisJbGptcCBzZXR1cF9zdGFsbAorc2V0dXBfY3RybF9ub3RfMDE6CisJY2puZSByMiwgIzB4MDIsIHNldHVwX2N0cmxfbm90XzAyCisJOzsgMDIgaXMgc2V0IEhXIGZsb3cgY29udHJvbC4gVE9ETworCWxqbXAgc2V0dXBfc3RhbGwKK3NldHVwX2N0cmxfbm90XzAyOgorCWNqbmUgcjIsICMweDAzLCBzZXR1cF9jdHJsX25vdF8wMworCTs7IDAzIGlzIGNvbnRyb2wgcGlucyAoUlRTLCBEVFIpLgorCWxqbXAgY29udHJvbF9waW5zCTsgd2lsbCBqdW1wIHRvIHNldHVwX2RvbmVfYWNrLAorCQkJCTsgIG9yIHNldHVwX3JldHVybl9vbmVfYnl0ZQorc2V0dXBfY3RybF9ub3RfMDM6CisJY2puZSByMiwgIzB4MDQsIHNldHVwX2N0cmxfbm90XzA0CisJOzsgMDQgaXMgc2VuZCBicmVhayAocmVhbGx5ICJ0dXJuIGJyZWFrIG9uL29mZiIpLiBUT0RPCisJY2puZSByMywgIzB4MDAsIHNldHVwX2N0cmxfZG9fYnJlYWtfb24KKwk7OyBkbyBicmVhayBvZmY6IHJlc3RvcmUgUE9SVENDRkcuMSB0byByZWNvbm5lY3QgVHhEMCB0byBzZXJpYWwgcG9ydAorCW1vdiBkcHRyLCBQT1JUQ0NGRworCW1vdnggYSwgQGRwdHIKKwlvcmwgYSwgIzB4MDIKKwltb3Z4IEBkcHRyLCBhCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfY3RybF9kb19icmVha19vbjoKKwk7OyBkbyBicmVhayBvbjogY2xlYXIgUE9SVENDRkcuMCwgc2V0IFR4RCBoaWdoKD8pIChiMSBsb3cpCisJbW92IGRwdHIsIE9VVEMKKwltb3Z4IGEsIEBkcHRyCisJYW5sIGEsICMweGZkCQk7IH4weDAyCisJbW92eCBAZHB0ciwgYQorCW1vdiBkcHRyLCBQT1JUQ0NGRworCW1vdnggYSwgQGRwdHIKKwlhbmwgYSwgIzB4ZmQJCTsgfjB4MDIKKwltb3Z4IEBkcHRyLCBhCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfY3RybF9ub3RfMDQ6CisJY2puZSByMiwgIzB4MDUsIHNldHVwX2N0cmxfbm90XzA1CisJOzsgMDUgaXMgc2V0IGRlc2lyZWQgaW50ZXJydXB0IGJpdG1hcC4gVE9ETworCWxqbXAgc2V0dXBfc3RhbGwKK3NldHVwX2N0cmxfbm90XzA1OgorCWNqbmUgcjIsICMweDA2LCBzZXR1cF9jdHJsX25vdF8wNgorCTs7IDA2IGlzIHF1ZXJ5IHJvb20KKwljam5lIHIzLCAjMHgwMCwgc2V0dXBfY3RybF8wNl9ub3RfMDAKKwk7OyAwNiwgd1ZhbHVlWzBdPTAgaXMgcXVlcnkgd3JpdGVfcm9vbQorCW1vdiBhLCB0eF9yaW5nX291dAorCXNldGIgYworCXN1YmIgYSwgdHhfcmluZ19pbgk7IG91dC0xLWluID0gMjU1IC0gKGluLW91dCkKKwlsam1wIHNldHVwX3JldHVybl9vbmVfYnl0ZQorc2V0dXBfY3RybF8wNl9ub3RfMDA6CisJY2puZSByMywgIzB4MDEsIHNldHVwX2N0cmxfMDZfbm90XzAxCisJOzsgMDYsIHdWYWx1ZVswXT0xIGlzIHF1ZXJ5IGNoYXJzX2luX2J1ZmZlcgorCW1vdiBhLCB0eF9yaW5nX2luCisJY2xyIGMKKwlzdWJiIGEsIHR4X3Jpbmdfb3V0CTsgaW4tb3V0CisJbGptcCBzZXR1cF9yZXR1cm5fb25lX2J5dGUKK3NldHVwX2N0cmxfMDZfbm90XzAxOgkKKwlsam1wIHNldHVwX3N0YWxsCitzZXR1cF9jdHJsX25vdF8wNjoKKwljam5lIHIyLCAjMHgwNywgc2V0dXBfY3RybF9ub3RfMDcKKwk7OyAwNyBpcyByZXF1ZXN0IHR4IHVudGhyb3R0bGUgaW50ZXJydXB0CisJbW92IHR4X3VudGhyb3R0bGVfdGhyZXNob2xkLCByMzsgd1ZhbHVlWzBdIGlzIHRocmVzaG9sZCB2YWx1ZQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX2N0cmxfbm90XzA3OgorCWxqbXAgc2V0dXBfc3RhbGwKKwkKK3NldHVwX2JtcmVxX3R5cGVfbm90X3ZlbmRvcjoKKwlsam1wIHNldHVwX3N0YWxsCisKKworc2V0dXBfYm1yZXFfaXNfc3RhbmRhcmQ6CQorCWNqbmUgcjIsICMweDAwLCBzZXR1cF9icmVxX25vdF8wMAorCTs7IDAwOglHZXRfU3RhdHVzIChzdWItc3dpdGNoIG9uIGJtUmVxdWVzdFR5cGU6IGRldmljZSwgZXAsIGludCkKKwljam5lIHIxLCAjMHg4MCwgc2V0dXBfR2V0X1N0YXR1c19ub3RfZGV2aWNlCisJOzsgR2V0X1N0YXR1cyhkZXZpY2UpCisJOzsgIGFyZSB3ZSBzZWxmLXBvd2VyZWQ/IG5vLiBjYW4gd2UgZG8gcmVtb3RlIHdha2V1cD8gbm8KKwk7OyAgIHNvIHJldHVybiB0d28gemVybyBieXRlcy4gVGhpcyBpcyByZXVzYWJsZQorc2V0dXBfcmV0dXJuX3R3b196ZXJvX2J5dGVzOgorCW1vdiBkcHRyLCBJTjBCVUYKKwljbHIgYQorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCW1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgSU4wQkMKKwltb3YgYSwgIzIKKwltb3Z4IEBkcHRyLCBhCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfR2V0X1N0YXR1c19ub3RfZGV2aWNlOgorCWNqbmUgcjEsICMweDgyLCBzZXR1cF9HZXRfU3RhdHVzX25vdF9lbmRwb2ludAorCTs7IEdldF9TdGF0dXMoZW5kcG9pbnQpCisJOzsgIG11c3QgZ2V0IHN0YWxsIGJpdCBmb3IgZXBbd0luZGV4TF0sIHJldHVybiB0d28gYnl0ZXMsIGJpdCBpbiBsc2IgMAorCTs7IGZvciBub3c6IGNoZWF0LiBUT0RPCisJc2ptcCBzZXR1cF9yZXR1cm5fdHdvX3plcm9fYnl0ZXMKK3NldHVwX0dldF9TdGF0dXNfbm90X2VuZHBvaW50OgorCWNqbmUgcjEsICMweDgxLCBzZXR1cF9HZXRfU3RhdHVzX25vdF9pbnRlcmZhY2UKKwk7OyBHZXRfU3RhdHVzKGludGVyZmFjZSk6IHJldHVybiB0d28gemVyb3MKKwlzam1wIHNldHVwX3JldHVybl90d29femVyb19ieXRlcworc2V0dXBfR2V0X1N0YXR1c19ub3RfaW50ZXJmYWNlOgkKKwlsam1wIHNldHVwX3N0YWxsCisJCitzZXR1cF9icmVxX25vdF8wMDoKKwljam5lIHIyLCAjMHgwMSwgc2V0dXBfYnJlcV9ub3RfMDEKKwk7OyAwMToJQ2xlYXJfRmVhdHVyZSAoc3ViLXN3aXRjaCBvbiB3VmFsdWVMOiBzdGFsbCwgcmVtb3RlIHdha2V1cCkKKwljam5lIHIzLCAjMHgwMCwgc2V0dXBfQ2xlYXJfRmVhdHVyZV9ub3Rfc3RhbGwKKwk7OyBDbGVhcl9GZWF0dXJlKHN0YWxsKS4gc2hvdWxkIGNsZWFyIGEgc3RhbGwgYml0LiBUT0RPCisJbGptcCBzZXR1cF9zdGFsbAorc2V0dXBfQ2xlYXJfRmVhdHVyZV9ub3Rfc3RhbGw6CisJY2puZSByMywgIzB4MDEsIHNldHVwX0NsZWFyX0ZlYXR1cmVfbm90X3J3YWtlCisJOzsgQ2xlYXJfRmVhdHVyZShyZW1vdGUgd2FrZXVwKS4gaWdub3JlZC4KKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9DbGVhcl9GZWF0dXJlX25vdF9yd2FrZToKKwlsam1wIHNldHVwX3N0YWxsCisJCitzZXR1cF9icmVxX25vdF8wMToKKwljam5lIHIyLCAjMHgwMywgc2V0dXBfYnJlcV9ub3RfMDMKKwk7OyAwMzoJU2V0X0ZlYXR1cmUgKHN1Yi1zd2l0Y2ggb24gd1ZhbHVlTDogc3RhbGwsIHJlbW90ZSB3YWtldXApCisJY2puZSByMywgIzB4MDAsIHNldHVwX1NldF9GZWF0dXJlX25vdF9zdGFsbAorCTs7IFNldF9GZWF0dXJlKHN0YWxsKS4gU2hvdWxkIHNldCBhIHN0YWxsIGJpdC4gVE9ETworCWxqbXAgc2V0dXBfc3RhbGwKK3NldHVwX1NldF9GZWF0dXJlX25vdF9zdGFsbDoKKwljam5lIHIzLCAjMHgwMSwgc2V0dXBfU2V0X0ZlYXR1cmVfbm90X3J3YWtlCisJOzsgU2V0X0ZlYXR1cmUocmVtb3RlIHdha2V1cCkuIGlnbm9yZWQuCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfU2V0X0ZlYXR1cmVfbm90X3J3YWtlOgorCWxqbXAgc2V0dXBfc3RhbGwKKwkKK3NldHVwX2JyZXFfbm90XzAzOgkKKwljam5lIHIyLCAjMHgwNiwgc2V0dXBfYnJlcV9ub3RfMDYKKwk7OyAwNjoJR2V0X0Rlc2NyaXB0b3IgKHMtc3dpdGNoIG9uIHdWYWx1ZUg6IGRldiwgY29uZmlnW25dLCBzdHJpbmdbbl0pCisJY2puZSByNCwgIzB4MDEsIHNldHVwX0dldF9EZXNjcmlwdG9yX25vdF9kZXZpY2UKKwk7OyBHZXRfRGVzY3JpcHRvcihkZXZpY2UpCisJbW92IGRwdHIsIFNVRFBUUkgKKwltb3YgYSwgI0hJR0goZGVzY19kZXZpY2UpCisJbW92eCBAZHB0ciwgYQorCW1vdiBkcHRyLCBTVURQVFJMCisJbW92IGEsICNMT1coZGVzY19kZXZpY2UpCisJbW92eCBAZHB0ciwgYQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX0dldF9EZXNjcmlwdG9yX25vdF9kZXZpY2U6CisJY2puZSByNCwgIzB4MDIsIHNldHVwX0dldF9EZXNjcmlwdG9yX25vdF9jb25maWcKKwk7OyBHZXRfRGVzY3JpcHRvcihjb25maWdbbl0pCisJY2puZSByMywgIzB4MDAsIHNldHVwX3N0YWxsOyBvbmx5IGhhbmRsZSBuPT0wCisJOzsgR2V0X0Rlc2NyaXB0b3IoY29uZmlnWzBdKQorCW1vdiBkcHRyLCBTVURQVFJICisJbW92IGEsICNISUdIKGRlc2NfY29uZmlnMSkKKwltb3Z4IEBkcHRyLCBhCisJbW92IGRwdHIsIFNVRFBUUkwKKwltb3YgYSwgI0xPVyhkZXNjX2NvbmZpZzEpCisJbW92eCBAZHB0ciwgYQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX0dldF9EZXNjcmlwdG9yX25vdF9jb25maWc6CisJY2puZSByNCwgIzB4MDMsIHNldHVwX0dldF9EZXNjcmlwdG9yX25vdF9zdHJpbmcKKwk7OyBHZXRfRGVzY3JpcHRvcihzdHJpbmdbd1ZhbHVlTF0pCisJOzsgIGlmICh3VmFsdWVMID49IG1heHN0cmluZ3MpIHN0YWxsCisJbW92IGEsICMoKGRlc2Nfc3RyaW5nc19lbmQtZGVzY19zdHJpbmdzKS8yKQorCWNsciBjCisJc3ViYiBhLHIzCQk7IGE9NCwgcjMgPSAwLi4zIC4gaWYgYTw9MCB0aGVuIHN0YWxsCisJamMgIHNldHVwX3N0YWxsCisJanogIHNldHVwX3N0YWxsCisJbW92IGEsIHIzCisJYWRkIGEsIHIzCQk7IGEgPSAyKndWYWx1ZUwKKwltb3YgZHB0ciwgI2Rlc2Nfc3RyaW5ncworCWFkZCBhLCBkcGwKKwltb3YgZHBsLCBhCisJbW92IGEsICMwCisJYWRkYyBhLCBkcGgKKwltb3YgZHBoLCBhCQk7IGRwaCA9IGRlc2Nfc3RyaW5nc1thXS4gYmlnIGVuZGlhbiEgKGhhbmR5KQorCTs7IGl0IGxvb2tzIGxpa2UgbXkgYWRhcHRlciB1c2VzIGEgcmV2aXNpb24gb2YgdGhlIEVaVVNCIHRoYXQKKwk7OyBjb250YWlucyAicmV2IEQgZXJyYXRhIG51bWJlciA4IiwgYXMgaGludGVkIGluIHRoZSBFelVTQiBleGFtcGxlCisJOzsgY29kZS4gSSBjYW5ub3QgZmluZCBhbiBhY3R1YWwgZXJyYXRhIGRlc2NyaXB0aW9uIG9uIHRoZSBDeXByZXNzCisJOzsgd2ViIHNpdGUsIGJ1dCBmcm9tIHRoZSBleGFtcGxlIGNvZGUgaXQgbG9va3MgbGlrZSB0aGlzIGJ1ZyBjYXVzZXMKKwk7OyB0aGUgbGVuZ3RoIG9mIHN0cmluZyBkZXNjcmlwdG9ycyB0byBiZSByZWFkIGluY29ycmVjdGx5LCBwb3NzaWJseQorCTs7IHNlbmRpbmcgYmFjayBtb3JlIGNoYXJhY3RlcnMgdGhhbiB0aGUgZGVzY3JpcHRvciBoYXMuIFRoZSB3b3JrYXJvdW5kCisJOzsgaXMgdG8gbWFudWFsbHkgc2VuZCBvdXQgYWxsIG9mIHRoZSBkYXRhLiBUaGUgY29uc2VxdWVuY2Ugb2Ygbm90CisJOzsgdXNpbmcgdGhlIHdvcmthcm91bmQgaXMgdGhhdCB0aGUgc3RyaW5ncyBnYXRoZXJlZCBieSB0aGUga2VybmVsCisJOzsgZHJpdmVyIGFyZSB0b28gbG9uZyBhbmQgYXJlIGZpbGxlZCB3aXRoIHRyYWlsaW5nIGdhcmJhZ2UgKGluY2x1ZGluZworCTs7IGxlZnRvdmVyIHN0cmluZ3MpLiBXcml0aW5nIHRoaXMgb3V0IGJ5IGhhbmQgaXMgYSBudWlzYW5jZSwgc28gZm9yCisJOzsgbm93IEkgd2lsbCBqdXN0IGxpdmUgd2l0aCB0aGUgYnVnLgorCW1vdnggYSwgQGRwdHIKKwltb3YgcjEsIGEKKwlpbmMgZHB0cgorCW1vdnggYSwgQGRwdHIKKwltb3YgcjIsIGEKKwltb3YgZHB0ciwgU1VEUFRSSAorCW1vdiBhLCByMQorCW1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgU1VEUFRSTAorCW1vdiBhLCByMgorCW1vdnggQGRwdHIsIGEKKwk7OyBkb25lCisJbGptcCBzZXR1cF9kb25lX2FjaworCQorc2V0dXBfR2V0X0Rlc2NyaXB0b3Jfbm90X3N0cmluZzoKKwlsam1wIHNldHVwX3N0YWxsCisJCitzZXR1cF9icmVxX25vdF8wNjoKKwljam5lIHIyLCAjMHgwOCwgc2V0dXBfYnJlcV9ub3RfMDgKKwk7OyBHZXRfQ29uZmlndXJhdGlvbi4gYWx3YXlzIDEuIHJldHVybiBvbmUgYnl0ZS4KKwk7OyB0aGlzIGlzIHJldXNhYmxlCisJbW92IGEsICMxCitzZXR1cF9yZXR1cm5fb25lX2J5dGU6CQorCW1vdiBkcHRyLCBJTjBCVUYKKwltb3Z4IEBkcHRyLCBhCisJbW92IGEsICMxCisJbW92IGRwdHIsIElOMEJDCisJbW92eCBAZHB0ciwgYQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX2JyZXFfbm90XzA4OgorCWNqbmUgcjIsICMweDA5LCBzZXR1cF9icmVxX25vdF8wOQorCTs7IDA5OiBTZXRfQ29uZmlndXJhdGlvbi4gaWdub3JlZC4KKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9icmVxX25vdF8wOToKKwljam5lIHIyLCAjMHgwYSwgc2V0dXBfYnJlcV9ub3RfMGEKKwk7OyAwYTogR2V0X0ludGVyZmFjZS4gZ2V0IHRoZSBjdXJyZW50IGFsdHNldHRpbmcgZm9yIGludFt3SW5kZXhMXQorCTs7ICBzaW5jZSB3ZSBvbmx5IGhhdmUgb25lIGludGVyZmFjZSwgaWdub3JlIHdJbmRleEwsIHJldHVybiBhIDAKKwltb3YgYSwgIzAKKwlsam1wIHNldHVwX3JldHVybl9vbmVfYnl0ZQorc2V0dXBfYnJlcV9ub3RfMGE6CisJY2puZSByMiwgIzB4MGIsIHNldHVwX2JyZXFfbm90XzBiCisJOzsgMGI6IFNldF9JbnRlcmZhY2UuIHNldCBhbHRzZXR0aW5nIGZvciBpbnRlcmZhY2Vbd0luZGV4TF0uIGlnbm9yZWQKKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9icmVxX25vdF8wYjoKKwlsam1wIHNldHVwX3N0YWxsCisKKwkJCitzZXR1cF9kb25lX2FjazoJCisJOzsgbm93IGNsZWFyIEhTTkFLCisJbW92IGRwdHIsIEVQMENTCisJbW92IGEsICMweDAyCisJbW92eCBAZHB0ciwgYQorCXNqbXAgc2V0dXBfZG9uZQorc2V0dXBfc3RhbGw6CQorCTs7IHVuaGFuZGxlZC4gU1RBTEwKKwk7RVAwQ1MgfD0gYm1FUFNUQUxMCisJbW92IGRwdHIsIEVQMENTCisJbW92eCBhLCBAZHB0cgorCW9ybCBhLCBFUDBTVEFMTGJpdAorCW1vdnggQGRwdHIsIGEKKwlzam1wIHNldHVwX2RvbmUKKwkKK3NldHVwX2RvbmU6CQorCXBvcCBhY2MKKwlwb3AgZHBoMQorCXBvcCBkcGwxCisJcG9wIGRwaAorCXBvcCBkcGwKKwlwb3AgZHBzCisJcmV0aQorCis7OzsgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkKK3NldF9iYXVkOgkJCTsgYmF1ZCBpbmRleCBpbiByMworCTs7IHZlcmlmeSBhIDwgMTAKKwltb3YgYSwgcjMKKwlqYiBBQ0MuNywgc2V0X2JhdWRfX2JhZGJhdWQKKwljbHIgYworCXN1YmIgYSwgIzEwCisJam5jIHNldF9iYXVkX19iYWRiYXVkCisJbW92IGEsIHIzCisJcmwgYQkJCTsgYSA9IGluZGV4KjIKKwlhZGQgYSwgI0xPVyhiYXVkX3RhYmxlKQorCW1vdiBkcGwsIGEKKwltb3YgYSwgI0hJR0goYmF1ZF90YWJsZSkKKwlhZGRjIGEsICMwCisJbW92IGRwaCwgYQorCTs7IFRPRE86IHNodXQgZG93biB4bWl0L3JlY2VpdmUKKwk7OyBUT0RPOiB3YWl0IGZvciBjdXJyZW50IHhtaXQgY2hhciB0byBsZWF2ZQorCTs7IFRPRE86IHNodXQgZG93biB0aW1lciB0byBhdm9pZCBwYXJ0aWFsLWNoYXIgZ2xpdGNoCisJbW92eCBhLEBkcHRyCQk7IEJBVURfSElHSAorCW1vdiBSQ0FQMkgsIGEKKwltb3YgVEgyLCBhCisJaW5jIGRwdHIKKwltb3Z4IGEsQGRwdHIJCTsgQkFVRF9MT1cKKwltb3YgUkNBUDJMLCBhCisJbW92IFRMMiwgYQorCTs7IFRPRE86IHJlc3RhcnQgeG1pdC9yZWNlaXZlCisJOzsgVE9ETzogcmVlbmFibGUgaW50ZXJydXB0cywgcmVzdW1lIHR4IGlmIHBlbmRpbmcKKwljbHIgYwkJCTsgYz0wOiBzdWNjZXNzCisJcmV0CitzZXRfYmF1ZF9fYmFkYmF1ZDoKKwlzZXRiIGMJCQk7IGM9MTogZmFpbHVyZQorCXJldAorCQorOzs7ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Citjb250cm9sX3BpbnM6CisJY2puZSByMSwgIzB4NDEsIGNvbnRyb2xfcGluc19pbgorY29udHJvbF9waW5zX291dDoKKwltb3YgYSwgcjMgOyB3VmFsdWVbMF0gaG9sZHMgbmV3IGJpdHM6CWI3IGlzIG5ldyBEVFIsIGIyIGlzIG5ldyBSVFMKKwl4cmwgYSwgIzB4ZmYJCTsgMSBtZWFucyBhY3RpdmUsIDBWLCArMTJWID8KKwlhbmwgYSwgIzB4ODQKKwltb3YgcjMsIGEKKwltb3YgZHB0ciwgT1VUQworCW1vdnggYSwgQGRwdHIJCTsgb25seSBjaGFuZ2UgYml0cyA3IGFuZCAyCisJYW5sIGEsICMweDdiCQk7IH4weDg0CisJb3JsIGEsIHIzCisJbW92eCBAZHB0ciwgYQkJOyBvdGhlciBwaW5zIGFyZSBpbnB1dHMsIGJpdHMgaWdub3JlZAorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK2NvbnRyb2xfcGluc19pbjoKKwltb3YgZHB0ciwgUElOU0MKKwltb3Z4IGEsIEBkcHRyCisJeHJsIGEsICMweGZmCisJbGptcCBzZXR1cF9yZXR1cm5fb25lX2J5dGUKKworOzs7ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkKK0lTUl9FcDJpbjoKKwlwdXNoIGRwcworCXB1c2ggZHBsCisJcHVzaCBkcGgKKwlwdXNoIGRwbDEKKwlwdXNoIGRwaDEKKwlwdXNoIGFjYworCW1vdiBhLEVYSUYKKwljbHIgYWNjLjQKKwltb3YgRVhJRixhCQk7IGNsZWFyIElOVDIgZmlyc3QKKwltb3YgZHB0ciwgSU4wN0lSUQk7IGNsZWFyIFVTQiBpbnQKKwltb3YgYSwjMDRoCisJbW92eCBAZHB0cixhCisKKwk7OyBkbyBzdHVmZgorCWxjYWxsIHN0YXJ0X2luCisJCisJcG9wIGFjYworCXBvcCBkcGgxCisJcG9wIGRwbDEKKwlwb3AgZHBoCisJcG9wIGRwbAorCXBvcCBkcHMKKwlyZXRpCisKK0lTUl9FcDJvdXQ6CisJcHVzaCBkcHMKKwlwdXNoIGRwbAorCXB1c2ggZHBoCisJcHVzaCBkcGwxCisJcHVzaCBkcGgxCisJcHVzaCBhY2MKKwltb3YgYSxFWElGCisJY2xyIGFjYy40CisJbW92IEVYSUYsYQkJOyBjbGVhciBJTlQyIGZpcnN0CisJbW92IGRwdHIsIE9VVDA3SVJRCTsgY2xlYXIgVVNCIGludAorCW1vdiBhLCMwNGgKKwltb3Z4IEBkcHRyLGEKKworCTs7IGRvIHN0dWZmCisKKwk7OyBjb3B5IGRhdGEgaW50byBidWZmZXIuIGZvciBub3csIGFzc3VtZSB3ZSB3aWxsIGhhdmUgZW5vdWdoIHNwYWNlCisJbW92IGRwdHIsIE9VVDJCQwk7IGdldCBieXRlIGNvdW50CisJbW92eCBhLEBkcHRyCisJbW92IHIxLCBhCisJY2xyIGEKKwltb3YgZHBzLCBhCisJbW92IGRwdHIsIE9VVDJCVUYJOyBsb2FkIERQVFIwIHdpdGggc291cmNlCisJbW92IGRwaDEsICNISUdIKHR4X3JpbmcpCTsgbG9hZCBEUFRSMSB3aXRoIHRhcmdldAorCW1vdiBkcGwxLCB0eF9yaW5nX2luCitPVVRfbG9vcDoKKwltb3Z4IGEsQGRwdHIJCTsgcmVhZAorCWluYyBkcHMJCQk7IHN3aXRjaCB0byBEUFRSMTogdGFyZ2V0CisJaW5jIGRwbDEJCTsgdGFyZ2V0ID0gdHhfcmluZ19pbisxCisJbW92eCBAZHB0cixhCQk7IHN0b3JlCisJbW92IGEsZHBsMQorCWNqbmUgYSwgdHhfcmluZ19vdXQsIE9VVF9ub19vdmVyZmxvdworCXNqbXAgT1VUX292ZXJmbG93CitPVVRfbm9fb3ZlcmZsb3c6CQorCWluYyB0eF9yaW5nX2luCQk7IHR4X3JpbmdfaW4rKworCWluYyBkcHMJCQk7IHN3aXRjaCB0byBEUFRSMDogc291cmNlCisJaW5jIGRwdHIKKwlkam56IHIxLCBPVVRfbG9vcAorCXNqbXAgT1VUX2RvbmUKK09VVF9vdmVyZmxvdzoKKwk7OyBzaWduYWwgb3ZlcmZsb3cKKwk7OyBmYWxsIHRocm91Z2gKK09VVF9kb25lOgkKKwk7OyBhY2sKKwltb3YgZHB0cixPVVQyQkMKKwltb3Z4IEBkcHRyLGEKKworCTs7IHN0YXJ0IHR4CisJYWNhbGwgbWF5YmVfc3RhcnRfdHgKKwk7YWNhbGwgZHVtcF9zdGF0CisJCisJcG9wIGFjYworCXBvcCBkcGgxCisJcG9wIGRwbDEKKwlwb3AgZHBoCisJcG9wIGRwbAorCXBvcCBkcHMKKwlyZXRpCisKK2R1bXBfc3RhdDoKKwk7OyBmaWxsIGluIEVQNGluIHdpdGggYSBkZWJ1Z2dpbmcgbWVzc2FnZToKKwk7OyAgIHR4X3JpbmdfaW4sIHR4X3Jpbmdfb3V0LCByeF9yaW5nX2luLCByeF9yaW5nX291dAorCTs7ICAgdHhfYWN0aXZlCisJOzsgICB0eF9yaW5nWzAuLjE1XQorCTs7ICAgMHhmYworCTs7ICAgcnhfcmluZ1swLi4xNV0KKwljbHIgYQorCW1vdiBkcHMsIGEKKwkKKwltb3YgZHB0ciwgSU40Q1MKKwltb3Z4IGEsIEBkcHRyCisJamIgYWNjLjEsIGR1bXBfc3RhdF9fZG9uZTsgYnVzeTogY2Fubm90IGR1bXAsIG9sZCBvbmUgc3RpbGwgcGVuZGluZworCW1vdiBkcHRyLCBJTjRCVUYKKwkKKwltb3YgYSwgdHhfcmluZ19pbgorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCW1vdiBhLCB0eF9yaW5nX291dAorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCisJbW92IGEsIHJ4X3JpbmdfaW4KKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwltb3YgYSwgcnhfcmluZ19vdXQKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwkKKwljbHIgYQorCWpuYiBUWF9SVU5OSU5HLCBkdW1wX3N0YXRfX25vX3R4X3J1bm5pbmcKKwlpbmMgYQorZHVtcF9zdGF0X19ub190eF9ydW5uaW5nOgorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCTs7IHR4X3JpbmdbMC4uMTVdCisJaW5jIGRwcworCW1vdiBkcHRyLCAjdHhfcmluZwk7IERQVFIxOiBzb3VyY2UKKwltb3YgcjEsICMxNgorZHVtcF9zdGF0X190eF9yaW5nX2xvb3A6CisJbW92eCBhLCBAZHB0cgorCWluYyBkcHRyCisJaW5jIGRwcworCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCWluYyBkcHMKKwlkam56IHIxLCBkdW1wX3N0YXRfX3R4X3JpbmdfbG9vcAorCWluYyBkcHMKKwkKKwltb3YgYSwgIzB4ZmMKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwkKKwk7OyByeF9yaW5nWzAuLjE1XQorCWluYyBkcHMKKwltb3YgZHB0ciwgI3J4X3JpbmcJOyBEUFRSMTogc291cmNlCisJbW92IHIxLCAjMTYKK2R1bXBfc3RhdF9fcnhfcmluZ19sb29wOgorCW1vdnggYSwgQGRwdHIKKwlpbmMgZHB0cgorCWluYyBkcHMKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwlpbmMgZHBzCisJZGpueiByMSwgZHVtcF9zdGF0X19yeF9yaW5nX2xvb3AKKwkKKwk7OyBub3cgc2VuZCBpdAorCWNsciBhCisJbW92IGRwcywgYQorCW1vdiBkcHRyLCBJTjRCQworCW1vdiBhLCAjMzgKKwltb3Z4IEBkcHRyLCBhCitkdW1wX3N0YXRfX2RvbmU6CQorCXJldAorCQkKKzs7OyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkKK21heWJlX3N0YXJ0X3R4OgorCTs7IG1ha2Ugc3VyZSB0aGUgdHggcHJvY2VzcyBpcyBydW5uaW5nLgorCWpiIFRYX1JVTk5JTkcsIHN0YXJ0X3R4X2RvbmUKK3N0YXJ0X3R4OgorCTs7IGlzIHRoZXJlIHdvcmsgdG8gYmUgZG9uZT8KKwltb3YgYSwgdHhfcmluZ19pbgorCWNqbmUgYSx0eF9yaW5nX291dCwgc3RhcnRfdHhfX3dvcmsKKwlyZXQJCQk7IG5vIHdvcmsKK3N0YXJ0X3R4X193b3JrOgkKKwk7OyB0eCB3YXMgbm90IHJ1bm5pbmcuIHNlbmQgdGhlIGZpcnN0IGNoYXJhY3Rlciwgc2V0dXAgdGhlIFRJIGludAorCWluYyB0eF9yaW5nX291dAkJOyBbKyt0eF9yaW5nX291dF0KKwltb3YgZHBoLCAjSElHSCh0eF9yaW5nKQorCW1vdiBkcGwsIHR4X3Jpbmdfb3V0CisJbW92eCBhLCBAZHB0cgorCW1vdiBzYnVmLCBhCisJc2V0YiBUWF9SVU5OSU5HCitzdGFydF90eF9kb25lOgorCTs7IGNhbiB3ZSB1bnRocm90dGxlIHRoZSBob3N0IHR4IHByb2Nlc3M/CisJOzsgIHN0ZXAgMTogZG8gd2UgY2FyZT8KKwltb3YgYSwgIzAKKwljam5lIGEsIHR4X3VudGhyb3R0bGVfdGhyZXNob2xkLCBzdGFydF90eF9fbWF5YmVfdW50aHJvdHRsZV90eAorCTs7IG5vcGUKK3N0YXJ0X3R4X3JlYWxseV9kb25lOgorCXJldAorc3RhcnRfdHhfX21heWJlX3VudGhyb3R0bGVfdHg6CisJOzsgIHN0ZXAgMjogaXMgdGhlcmUgbm93IHJvb20/CisJbW92IGEsIHR4X3Jpbmdfb3V0CisJc2V0YiBjCisJc3ViYiBhLCB0eF9yaW5nX2luCisJOzsgYSBpcyBub3cgd3JpdGVfcm9vbS4gSWYgdGhyZXNoID49IGEsIHdlIGNhbiB1bnRocm90dGxlCisJY2xyIGMKKwlzdWJiIGEsIHR4X3VudGhyb3R0bGVfdGhyZXNob2xkCisJamMgc3RhcnRfdHhfcmVhbGx5X2RvbmUJOyBub3BlCisJOzsgeWVzLCB3ZSBjYW4gdW50aHJvdHRsZS4gcmVtb3ZlIHRoZSB0aHJlc2hvbGQgYW5kIG1hcmsgYSByZXF1ZXN0CisJbW92IHR4X3VudGhyb3R0bGVfdGhyZXNob2xkLCAjMAorCXNldGIgRE9fVFhfVU5USFJPVFRMRQorCTs7IHByb2QgcngsIHdoaWNoIHdpbGwgYWN0dWFsbHkgc2VuZCB0aGUgbWVzc2FnZSB3aGVuIGluMiBiZWNvbWVzIGZyZWUKKwlsam1wIHN0YXJ0X2luCisJCisKK3NlcmlhbF9pbnQ6CisJcHVzaCBkcHMKKwlwdXNoIGRwbAorCXB1c2ggZHBoCisJcHVzaCBkcGwxCisJcHVzaCBkcGgxCisJcHVzaCBhY2MKKwlqbmIgVEksIHNlcmlhbF9pbnRfX25vdF90eAorCTs7IHR4IGZpbmlzaGVkLiBzZW5kIGFub3RoZXIgY2hhcmFjdGVyIGlmIHdlIGhhdmUgb25lCisJY2xyIFRJCQkJOyBjbGVhciBpbnQKKwljbHIgVFhfUlVOTklORworCWxjYWxsIHN0YXJ0X3R4CitzZXJpYWxfaW50X19ub3RfdHg6CisJam5iIFJJLCBzZXJpYWxfaW50X19ub3RfcngKKwlsY2FsbCBnZXRfcnhfY2hhcgorCWNsciBSSQkJCTsgY2xlYXIgaW50CitzZXJpYWxfaW50X19ub3Rfcng6CQorCTs7IHJldHVybgorCXBvcCBhY2MKKwlwb3AgZHBoMQorCXBvcCBkcGwxCisJcG9wIGRwaAorCXBvcCBkcGwKKwlwb3AgZHBzCisJcmV0aQorCitnZXRfcnhfY2hhcjoKKwltb3YgZHBoLCAjSElHSChyeF9yaW5nKQorCW1vdiBkcGwsIHJ4X3JpbmdfaW4KKwlpbmMgZHBsCQkJOyB0YXJnZXQgPSByeF9yaW5nX2luKzEKKwltb3YgYSwgc2J1ZgorCW1vdnggQGRwdHIsIGEKKwk7OyBjaGVjayBmb3Igb3ZlcmZsb3cgYmVmb3JlIGluY3JlbWVudGluZyByeF9yaW5nX2luCisJbW92IGEsIGRwbAorCWNqbmUgYSwgcnhfcmluZ19vdXQsIGdldF9yeF9jaGFyX19ub19vdmVyZmxvdworCTs7IHNpZ25hbCBvdmVyZmxvdworCXJldAorZ2V0X3J4X2NoYXJfX25vX292ZXJmbG93OgkKKwlpbmMgcnhfcmluZ19pbgorCTs7IGtpY2sgb2ZmIFVTQiBJTnBpcGUKKwlhY2FsbCBzdGFydF9pbgorCXJldAorCitzdGFydF9pbjoKKwk7OyBjaGVjayBpZiB0aGUgaW5waXBlIGlzIGFscmVhZHkgcnVubmluZy4KKwltb3YgZHB0ciwgSU4yQ1MKKwltb3Z4IGEsIEBkcHRyCisJamIgYWNjLjEsIHN0YXJ0X2luX19kb25lOyBpbnQgd2lsbCBoYW5kbGUgaXQKKwlqYiBET19UWF9VTlRIUk9UVExFLCBzdGFydF9pbl9fZG9fdHhfdW50aHJvdHRsZQorCTs7IHNlZSBpZiB0aGVyZSBpcyBhbnkgd29yayB0byBkby4gYSBzZXJpYWwgaW50ZXJydXB0IG1pZ2h0IG9jY3VyCisJOzsgZHVyaW5nIHRoaXMgc2VxdWVuY2U/CisJbW92IGEsIHJ4X3JpbmdfaW4KKwljam5lIGEsIHJ4X3Jpbmdfb3V0LCBzdGFydF9pbl9faGF2ZV93b3JrCisJcmV0CQkJOyBub3BlCitzdGFydF9pbl9faGF2ZV93b3JrOgkKKwk7OyBub3cgY29weSBhcyBtdWNoIGRhdGEgYXMgcG9zc2libGUgaW50byB0aGUgcGlwZS4gNjMgYnl0ZXMgbWF4LgorCWNsciBhCisJbW92IGRwcywgYQorCW1vdiBkcGgsICNISUdIKHJ4X3JpbmcpCTsgbG9hZCBEUFRSMCB3aXRoIHNvdXJjZQorCWluYyBkcHMKKwltb3YgZHB0ciwgSU4yQlVGCTsgbG9hZCBEUFRSMSB3aXRoIHRhcmdldAorCW1vdnggQGRwdHIsIGEJCTsgaW5bMF0gc2lnbmFscyB0aGF0IHJlc3Qgb2YgSU4gaXMgcnggZGF0YQorCWluYyBkcHRyCisJaW5jIGRwcworCTs7IGxvb3AgdW50aWwgd2UgcnVuIG91dCBvZiBkYXRhLCBvciB3ZSBoYXZlIGNvcGllZCA2NCBieXRlcworCW1vdiByMSwgIzEJCTsgSU5idWYgc2l6ZSBjb3VudGVyCitzdGFydF9pbl9fbG9vcDoKKwltb3YgYSwgcnhfcmluZ19pbgorCWNqbmUgYSwgcnhfcmluZ19vdXQsIHN0YXJ0X2lubG9jYWxfaXJxX2VuYWJsZWxsX2NvcHlpbmcKKwlzam1wIHN0YXJ0X2luX19raWNrCitzdGFydF9pbmxvY2FsX2lycV9lbmFibGVsbF9jb3B5aW5nOgorCWluYyByeF9yaW5nX291dAorCW1vdiBkcGwsIHJ4X3Jpbmdfb3V0CisJbW92eCBhLCBAZHB0cgorCWluYyBkcHMKKwltb3Z4IEBkcHRyLCBhCQk7IHdyaXRlIGludG8gSU4gYnVmZmVyCisJaW5jIGRwdHIKKwlpbmMgZHBzCisJaW5jIHIxCisJY2puZSByMSwgIzY0LCBzdGFydF9pbl9fbG9vcDsgbG9vcAorc3RhcnRfaW5fX2tpY2s6CisJOzsgZWl0aGVyIHdlIHJhbiBvdXQgb2YgZGF0YSwgb3Igd2UgY29waWVkIDY0IGJ5dGVzLiByMSBoYXMgYnl0ZSBjb3VudAorCTs7IGtpY2sgb2ZmIElOCisJbW92IGRwdHIsIElOMkJDCisJbW92IGEsIHIxCisJanogc3RhcnRfaW5fX2RvbmUKKwltb3Z4IEBkcHRyLCBhCisJOzsgZG9uZQorc3RhcnRfaW5fX2RvbmU6CisJO2FjYWxsIGR1bXBfc3RhdAorCXJldAorc3RhcnRfaW5fX2RvX3R4X3VudGhyb3R0bGU6CisJOzsgc3BlY2lhbCBzZXF1ZW5jZTogc2VuZCBhIHR4IHVudGhyb3R0bGUgbWVzc2FnZQorCWNsciBET19UWF9VTlRIUk9UVExFCisJY2xyIGEKKwltb3YgZHBzLCBhCisJbW92IGRwdHIsIElOMkJVRgorCW1vdiBhLCAjMQorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCW1vdiBhLCAjMgorCW1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgSU4yQkMKKwltb3Z4IEBkcHRyLCBhCisJcmV0CisJCitwdXRjaGFyOgorCWNsciBUSQorCW1vdiBTQlVGLCBhCitwdXRjaGFyX3dhaXQ6CisJam5iIFRJLCBwdXRjaGFyX3dhaXQKKwljbHIgVEkKKwlyZXQKKworCQorYmF1ZF90YWJsZToJCQk7IGJhdWRfaGlnaCwgdGhlbiBiYXVkX2xvdworCTs7IGJhdWRbMF06IDExMAorCS5ieXRlIEJBVURfSElHSCgxMTApCisJLmJ5dGUgQkFVRF9MT1coMTEwKQorCTs7IGJhdWRbMV06IDMwMAorCS5ieXRlIEJBVURfSElHSCgzMDApCisJLmJ5dGUgQkFVRF9MT1coMzAwKQorCTs7IGJhdWRbMl06IDEyMDAKKwkuYnl0ZSBCQVVEX0hJR0goMTIwMCkKKwkuYnl0ZSBCQVVEX0xPVygxMjAwKQorCTs7IGJhdWRbM106IDI0MDAKKwkuYnl0ZSBCQVVEX0hJR0goMjQwMCkKKwkuYnl0ZSBCQVVEX0xPVygyNDAwKQorCTs7IGJhdWRbNF06IDQ4MDAKKwkuYnl0ZSBCQVVEX0hJR0goNDgwMCkKKwkuYnl0ZSBCQVVEX0xPVyg0ODAwKQorCTs7IGJhdWRbNV06IDk2MDAKKwkuYnl0ZSBCQVVEX0hJR0goOTYwMCkKKwkuYnl0ZSBCQVVEX0xPVyg5NjAwKQorCTs7IGJhdWRbNl06IDE5MjAwCisJLmJ5dGUgQkFVRF9ISUdIKDE5MjAwKQorCS5ieXRlIEJBVURfTE9XKDE5MjAwKQorCTs7IGJhdWRbN106IDM4NDAwCisJLmJ5dGUgQkFVRF9ISUdIKDM4NDAwKQorCS5ieXRlIEJBVURfTE9XKDM4NDAwKQorCTs7IGJhdWRbOF06IDU3NjAwCisJLmJ5dGUgQkFVRF9ISUdIKDU3NjAwKQorCS5ieXRlIEJBVURfTE9XKDU3NjAwKQorCTs7IGJhdWRbOV06IDExNTIwMAorCS5ieXRlIEJBVURfSElHSCgxMTUyMDApCisJLmJ5dGUgQkFVRF9MT1coMTE1MjAwKQorCitkZXNjX2RldmljZToKKwkuYnl0ZSAweDEyLCAweDAxLCAweDAwLCAweDAxLCAweGZmLCAweGZmLCAweGZmLCAweDQwCisJLmJ5dGUgMHhjZCwgMHgwNiwgMHgwNCwgMHgwMSwgMHg4OSwgMHhhYiwgMSwgMiwgMywgMHgwMQorOzs7IFRoZSAicmVhbCIgZGV2aWNlIGlkLCB3aGljaCBtdXN0IG1hdGNoIHRoZSBob3N0IGRyaXZlciwgaXMgdGhhdAorOzs7ICIweGNkIDB4MDYgMHgwNCAweDAxIiBzZXF1ZW5jZSwgd2hpY2ggaXMgMHgwNmNkLCAweDAxMDQKKwkKK2Rlc2NfY29uZmlnMToKKwkuYnl0ZSAweDA5LCAweDAyLCAweDIwLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDgwLCAweDMyCisJLmJ5dGUgMHgwOSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMAorCS5ieXRlIDB4MDcsIDB4MDUsIDB4ODIsIDB4MDMsIDB4NDAsIDB4MDAsIDB4MDEKKwkuYnl0ZSAweDA3LCAweDA1LCAweDAyLCAweDAyLCAweDQwLCAweDAwLCAweDAwCisKK2Rlc2Nfc3RyaW5nczoKKwkud29yZCBzdHJpbmdfbGFuZ2lkcywgc3RyaW5nX21mZywgc3RyaW5nX3Byb2R1Y3QsIHN0cmluZ19zZXJpYWwKK2Rlc2Nfc3RyaW5nc19lbmQ6CisKK3N0cmluZ19sYW5naWRzOgkuYnl0ZSBzdHJpbmdfbGFuZ2lkc19lbmQtc3RyaW5nX2xhbmdpZHMKKwkuYnl0ZSAzCisJLndvcmQgMAorc3RyaW5nX2xhbmdpZHNfZW5kOgorCisJOzsgc2lnaC4gVGhlc2Ugc3RyaW5ncyBhcmUgVW5pY29kZSwgbWVhbmluZyBVVEYxNj8gMiBieXRlcyBlYWNoLiBOb3cKKwk7OyAqdGhhdCogaXMgYSBwYWluIGluIHRoZSBhc3MgdG8gZW5jb2RlLiBBbmQgdGhleSBhcmUgbGl0dGxlLWVuZGlhbgorCTs7IHRvby4gVXNlIHRoaXMgcGVybCBzbmlwcGV0IHRvIGdldCB0aGUgYnl0ZWNvZGVzOgorCS8qIHdoaWxlICg8PikgeworCSAgICBAYyA9IHNwbGl0KC8vKTsKKwkgICAgZm9yZWFjaCAkYyAoQGMpIHsKKwkgICAgIHByaW50ZigiMHglMDJ4LCAweDAwLCAiLCBvcmQoJGMpKTsKKwkgICAgfQorCSAgIH0KKwkqLworCitzdHJpbmdfbWZnOgkuYnl0ZSBzdHJpbmdfbWZnX2VuZC1zdHJpbmdfbWZnCisJLmJ5dGUgMworOwkuYnl0ZSAiQUNNRSB1c2Igd2lkZ2V0cyIKKwkuYnl0ZSAweDQxLCAweDAwLCAweDQzLCAweDAwLCAweDRkLCAweDAwLCAweDQ1LCAweDAwLCAweDIwLCAweDAwLCAweDc1LCAweDAwLCAweDczLCAweDAwLCAweDYyLCAweDAwLCAweDIwLCAweDAwLCAweDc3LCAweDAwLCAweDY5LCAweDAwLCAweDY0LCAweDAwLCAweDY3LCAweDAwLCAweDY1LCAweDAwLCAweDc0LCAweDAwLCAweDczLCAweDAwCitzdHJpbmdfbWZnX2VuZDoKKwkKK3N0cmluZ19wcm9kdWN0OgkuYnl0ZSBzdHJpbmdfcHJvZHVjdF9lbmQtc3RyaW5nX3Byb2R1Y3QKKwkuYnl0ZSAzCis7CS5ieXRlICJBQ01FIFVTQiBzZXJpYWwgd2lkZ2V0IgorCS5ieXRlIDB4NDEsIDB4MDAsIDB4NDMsIDB4MDAsIDB4NGQsIDB4MDAsIDB4NDUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NTUsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NzMsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzIsIDB4MDAsIDB4NjksIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4NjksIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjcsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzQsIDB4MDAKK3N0cmluZ19wcm9kdWN0X2VuZDoKKwkKK3N0cmluZ19zZXJpYWw6CS5ieXRlIHN0cmluZ19zZXJpYWxfZW5kLXN0cmluZ19zZXJpYWwKKwkuYnl0ZSAzCis7CS5ieXRlICI0NyIKKwkuYnl0ZSAweDM0LCAweDAwLCAweDM3LCAweDAwCitzdHJpbmdfc2VyaWFsX2VuZDoKKwkJCis7OzsgcmluZyBidWZmZXIgbWVtb3J5CisJOzsgdHhfcmluZ19pbisxIGlzIHdoZXJlIHRoZSBuZXh0IGlucHV0IGJ5dGUgd2lsbCBnbworCTs7IFt0eF9yaW5nX291dF0gaGFzIGJlZW4gc2VudAorCTs7IGlmIHR4X3JpbmdfaW4gPT0gdHhfcmluZ19vdXQsIHRoZXJlcyBubyB3b3JrIHRvIGRvCisJOzsgdGhlcmUgYXJlICh0eF9yaW5nX2luIC0gdHhfcmluZ19vdXQpIGNoYXJzIHRvIGJlIHdyaXR0ZW4KKwk7OyBkb250IGxldCBfaW4gbGFwIF9vdXQKKwk7OyAgIGNhbm5vdCBpbmMgaWYgdHhfcmluZ19pbisxID09IHR4X3Jpbmdfb3V0CisJOzsgIHdyaXRlIFt0eF9yaW5nX2luKzFdIHRoZW4gdHhfcmluZ19pbisrCisJOzsgICBpZiAodHhfcmluZ19pbisxID09IHR4X3Jpbmdfb3V0KSwgb3ZlcmZsb3cKKwk7OyAgIGVsc2UgdHhfcmluZ19pbisrCisJOzsgIHJlYWQvc2VuZCBbdHhfcmluZ19vdXQrMV0sIHRoZW4gdHhfcmluZ19vdXQrKworCisJOzsgcnhfcmluZ19pbiB3b3JrcyB0aGUgc2FtZSB3YXkKKwkKKwkub3JnIDB4MTAwMAordHhfcmluZzoKKwkuc2tpcCAweDEwMAkJOyAyNTYgYnl0ZXMKK3J4X3Jpbmc6CisJLnNraXAgMHgxMDAJCTsgMjU2IGJ5dGVzCisJCisJCisJLkVORAorCQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmQwYWE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKQEAgLTAsMCArMSw4OTQgQEAKKy8qCisgKiBVU0IgS2V5c3BhbiBQREEgLyBYaXJjb20gLyBFbnRyZWdyYSBDb252ZXJ0ZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAwMSBHcmVnIEtyb2FoLUhhcnRtYW4JPGdyZWdAa3JvYWguY29tPgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIEJyaWFuIFdhcm5lcgk8d2FybmVyQGxvdGhhci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgQWwgQm9yY2hlcnMJCTxib3JjaGVyc0BzdGVpbmVycG9pbnQuY29tPgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMgZHJpdmVyCisgKiAKKyAqICgwOS8wNy8yMDAxKSBna2gKKyAqCWNsZWFuZWQgdXAgdGhlIFhpcmNvbSBzdXBwb3J0LiAgQWRkZWQgaWRzIGZvciBFbnRyZWdyYSBkZXZpY2Ugd2hpY2ggaXMKKyAqCXRoZSBzYW1lIGFzIHRoZSBYaXJjb20gZGV2aWNlLiAgRW5hYmxlZCB0aGUgY29kZSB0byBiZSBjb21waWxlZCBmb3IKKyAqCWVpdGhlciBYaXJjb20gb3IgS2V5c3BhbiBkZXZpY2VzLgorICoKKyAqICgwOC8xMS8yMDAxKSBDcmlzdGlhbiBNLiBDcmFjaXVuZXNjdQorICoJc3VwcG9ydCBmb3IgWGlyY29tIFBHU0RCOQorICoKKyAqICgwNS8zMS8yMDAxKSBna2gKKyAqCXN3aXRjaGVkIGZyb20gdXNpbmcgc3BpbmxvY2sgdG8gYSBzZW1hcGhvcmUsIHdoaWNoIGZpeGVzIGxvdHMgb2YgcHJvYmxlbXMuCisgKgorICogKDA0LzA4LzIwMDEpIGdiCisgKglJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgorICogCisgKiAoMTEvMDEvMjAwMCkgQWRhbSBKLiBSaWNodGVyCisgKgl1c2JfZGV2aWNlX2lkIHRhYmxlIHN1cHBvcnQKKyAqIAorICogKDEwLzA1LzIwMDApIGdraAorICoJRml4ZWQgYnVnIHdpdGggdXJiLT5kZXYgbm90IGJlaW5nIHNldCBwcm9wZXJseSwgbm93IHRoYXQgdGhlIHVzYgorICoJY29yZSBuZWVkcyBpdC4KKyAqIAorICogKDA4LzI4LzIwMDApIGdraAorICoJQWRkZWQgbG9ja3MgZm9yIFNNUCBzYWZlbmVzcy4KKyAqCUZpeGVkIE1PRF9JTkMgYW5kIE1PRF9ERUMgbG9naWMgYW5kIHRoZSBhYmlsaXR5IHRvIG9wZW4gYSBwb3J0IG1vcmUgCisgKgl0aGFuIG9uY2UuCisgKiAKKyAqICgwNy8yMC8yMDAwKSBib3JjaGVycworICoJLSBrZXlzcGFuX3BkYV93cml0ZSBubyBsb25nZXIgc2xlZXBzIGlmIGl0IGlzIGNhbGxlZCBvbiBpbnRlcnJ1cHQgdGltZTsKKyAqCSAgUFBQIGFuZCB0aGUgbGluZSBkaXNjaXBsaW5lIHdpdGggc3R0eSBlY2hvIG9uIGNhbiBjYWxsIHdyaXRlIG9uCisgKgkgIGludGVycnVwdCB0aW1lIGFuZCB0aGlzIHdvdWxkIGNhdXNlIGFuIG9vcHMgaWYgd3JpdGUgc2xlcHQKKyAqCS0gaWYga2V5c3Bhbl9wZGFfd3JpdGUgaXMgaW4gYW4gaW50ZXJydXB0LCBpdCB3aWxsIG5vdCBjYWxsCisgKgkgIHVzYl9jb250cm9sX21zZyAod2hpY2ggc2xlZXBzKSB0byBxdWVyeSB0aGUgcm9vbSBpbiB0aGUgZGV2aWNlCisgKgkgIGJ1ZmZlciwgaXQgc2ltcGx5IHVzZXMgdGhlIGN1cnJlbnQgcm9vbSB2YWx1ZSBpdCBoYXMKKyAqCS0gaWYgdGhlIHVyYiBpcyBidXN5IG9yIGlmIGl0IGlzIHRocm90dGxlZCBrZXlzcGFuX3BkYV93cml0ZSBqdXN0CisgKgkgIHJldHVybnMgMCwgcmF0aGVyIHRoYW4gc2xlZXBpbmcgdG8gd2FpdCBmb3IgdGhpcyB0byBjaGFuZ2U7IHRoZQorICoJICB3cml0ZV9jaGFuIGNvZGUgaW4gbl90dHkuYyB3aWxsIHNsZWVwIGlmIG5lZWRlZCBiZWZvcmUgY2FsbGluZworICoJICBrZXlzcGFuX3BkYV93cml0ZSBhZ2FpbgorICoJLSBpZiB0aGUgZGV2aWNlIG5lZWRzIHRvIGJlIHVudGhyb3R0bGVkLCB3cml0ZSBub3cgcXVldWVzIHVwIHRoZQorICoJICBjYWxsIHRvIHVzYl9jb250cm9sX21zZyAod2hpY2ggc2xlZXBzKSB0byB1bnRocm90dGxlIHRoZSBkZXZpY2UKKyAqCS0gdGhlIHdha2V1cHMgZnJvbSBrZXlzcGFuX3BkYV93cml0ZV9idWxrX2NhbGxiYWNrIGFyZSBxdWV1ZWQgcmF0aGVyCisgKgkgIHRoYW4gZG9uZSBkaXJlY3RseSBmcm9tIHRoZSBjYWxsYmFjayB0byBhdm9pZCB0aGUgcmFjZSBpbiB3cml0ZV9jaGFuCisgKgktIGtleXNwYW5fcGRhX2NoYXJzX2luX2J1ZmZlciBhbHNvIGluZGljYXRlcyBpdHMgYnVmZmVyIGlzIGZ1bGwgaWYgdGhlCisgKgkgIHVyYiBzdGF0dXMgaXMgLUVJTlBST0dSRVNTLCBtZWFuaW5nIGl0IGNhbm5vdCB3cml0ZSBhdCB0aGUgbW9tZW50CisgKiAgICAgIAorICogKDA3LzE5LzIwMDApIGdraAorICoJQWRkZWQgbW9kdWxlX2luaXQgYW5kIG1vZHVsZV9leGl0IGZ1bmN0aW9ucyB0byBoYW5kbGUgdGhlIGZhY3QgdGhhdCB0aGlzCisgKglkcml2ZXIgaXMgYSBsb2FkYWJsZSBtb2R1bGUgbm93LgorICoKKyAqICgwMy8yNi8yMDAwKSBna2gKKyAqCVNwbGl0IGRyaXZlciB1cCBpbnRvIGRldmljZSBzcGVjaWZpYyBwaWVjZXMuCisgKiAKKyAqLworCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCitzdGF0aWMgaW50IGRlYnVnOworCitzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCB7CisJX191MTYgYWRkcmVzczsKKwlfX3U4IGRhdGFfc2l6ZTsKKwlfX3U4IGRhdGFbMTZdOworfTsKKworLyogbWFrZSBhIHNpbXBsZSBkZWZpbmUgdG8gaGFuZGxlIGlmIHdlIGFyZSBjb21waWxpbmcga2V5c3Bhbl9wZGEgb3IgeGlyY29tIHN1cHBvcnQgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBX01PRFVMRSkKKwkjZGVmaW5lIEtFWVNQQU4KKyNlbHNlCisJI3VuZGVmIEtFWVNQQU4KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTV9NT0RVTEUpCisJI2RlZmluZSBYSVJDT00KKyNlbHNlCisJI3VuZGVmIFhJUkNPTQorI2VuZGlmCisKKyNpZmRlZiBLRVlTUEFOCisjaW5jbHVkZSAia2V5c3Bhbl9wZGFfZncuaCIKKyNlbmRpZgorCisjaWZkZWYgWElSQ09NCisjaW5jbHVkZSAieGlyY29tX3Bnc19mdy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjEiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkJyaWFuIFdhcm5lciA8d2FybmVyQGxvdGhhci5jb20+IgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIEtleXNwYW4gUERBIENvbnZlcnRlciBkcml2ZXIiCisKK3N0cnVjdCBrZXlzcGFuX3BkYV9wcml2YXRlIHsKKwlpbnQJCQl0eF9yb29tOworCWludAkJCXR4X3Rocm90dGxlZDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCQl3YWtldXBfd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCQl1bnRocm90dGxlX3dvcms7Cit9OworCisKKyNkZWZpbmUgS0VZU1BBTl9WRU5ET1JfSUQJCTB4MDZjZAorI2RlZmluZSBLRVlTUEFOX1BEQV9GQUtFX0lECQkweDAxMDMKKyNkZWZpbmUgS0VZU1BBTl9QREFfSUQJCQkweDAxMDQgLyogbm8gY2x1ZSAqLworCisvKiBGb3IgWGlyY29tIFBHU0RCOSBhbmQgb2xkZXIgRW50cmVncmEgdmVyc2lvbiBvZiB0aGUgc2FtZSBkZXZpY2UgKi8KKyNkZWZpbmUgWElSQ09NX1ZFTkRPUl9JRAkJMHgwODVhCisjZGVmaW5lIFhJUkNPTV9GQUtFX0lECQkJMHg4MDI3CisjZGVmaW5lIEVOVFJFR1JBX1ZFTkRPUl9JRAkJMHgxNjQ1CisjZGVmaW5lIEVOVFJFR1JBX0ZBS0VfSUQJCTB4ODA5MworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfY29tYmluZWQgW10gPSB7CisjaWZkZWYgS0VZU1BBTgorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwgS0VZU1BBTl9QREFfRkFLRV9JRCkgfSwKKyNlbmRpZgorI2lmZGVmIFhJUkNPTQorCXsgVVNCX0RFVklDRShYSVJDT01fVkVORE9SX0lELCBYSVJDT01fRkFLRV9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRU5UUkVHUkFfVkVORE9SX0lELCBFTlRSRUdSQV9GQUtFX0lEKSB9LAorI2VuZGlmCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBLRVlTUEFOX1BEQV9JRCkgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZV9jb21iaW5lZCk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBrZXlzcGFuX3BkYV9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImtleXNwYW5fcGRhIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlX2NvbWJpbmVkLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX3N0ZCBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIEtFWVNQQU5fUERBX0lEKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjaWZkZWYgS0VZU1BBTgorc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2Zha2UgW10gPSB7CisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBLRVlTUEFOX1BEQV9GQUtFX0lEKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworI2VuZGlmCisKKyNpZmRlZiBYSVJDT00KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9mYWtlX3hpcmNvbSBbXSA9IHsKKyAgICAgICAgeyBVU0JfREVWSUNFKFhJUkNPTV9WRU5ET1JfSUQsIFhJUkNPTV9GQUtFX0lEKSB9LAorICAgICAgICB7IFVTQl9ERVZJQ0UoRU5UUkVHUkFfVkVORE9SX0lELCBFTlRSRUdSQV9GQUtFX0lEKSB9LAorICAgICAgICB7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK307CisjZW5kaWYKKworc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfd2FrZXVwX3dyaXRlKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ICkKK3sKKworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CisKKwkvKiB3YWtlIHVwIHBvcnQgcHJvY2Vzc2VzICovCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCAmcG9ydC0+d3JpdGVfd2FpdCApOworCisJLyogd2FrZSB1cCBsaW5lIGRpc2NpcGxpbmUgKi8KKwl0dHlfd2FrZXVwKHR0eSk7Cit9CisKK3N0YXRpYyB2b2lkIGtleXNwYW5fcGRhX3JlcXVlc3RfdW50aHJvdHRsZSggc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCApCit7CisJaW50IHJlc3VsdDsKKworCWRiZygiIHJlcXVlc3RfdW50aHJvdHRsZSIpOworCS8qIGFzayB0aGUgZGV2aWNlIHRvIHRlbGwgdXMgd2hlbiB0aGUgdHggYnVmZmVyIGJlY29tZXMKKwkgICBzdWZmaWNpZW50bHkgZW1wdHkgKi8KKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIAorCQkJCSB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJCSA3LCAvKiByZXF1ZXN0X3VudGhyb3R0bGUgKi8KKwkJCQkgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRQorCQkJCSB8IFVTQl9ESVJfT1VULAorCQkJCSAxNiwgLyogdmFsdWU6IHRocmVzaG9sZCAqLworCQkJCSAwLCAvKiBpbmRleCAqLworCQkJCSBOVUxMLAorCQkJCSAwLAorCQkJCSAyMDAwKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZGJnKCIlcyAtIGVycm9yICVkIGZyb20gdXNiX2NvbnRyb2xfbXNnIiwgCisJCSAgICBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7Cit9CisKKworc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfcnhfaW50ZXJydXB0IChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKyAgICAgICAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnR0eTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50IGk7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3Qga2V5c3Bhbl9wZGFfcHJpdmF0ZSAqcHJpdjsKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKyAJLyogc2VlIGlmIHRoZSBtZXNzYWdlIGlzIGRhdGEgb3IgYSBzdGF0dXMgaW50ZXJydXB0ICovCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSAwOgorCQkvKiByZXN0IG9mIG1lc3NhZ2UgaXMgcnggZGF0YSAqLworCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCQlmb3IgKGkgPSAxOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoIDsgKytpKSB7CisJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCAwKTsKKwkJCX0KKwkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAxOgorCQkvKiBzdGF0dXMgaW50ZXJydXB0ICovCisJCWRiZygiIHJ4IGludCwgZDE9JWQsIGQyPSVkIiwgZGF0YVsxXSwgZGF0YVsyXSk7CisJCXN3aXRjaCAoZGF0YVsxXSkgeworCQljYXNlIDE6IC8qIG1vZGVtbGluZSBjaGFuZ2UgKi8KKwkJCWJyZWFrOworCQljYXNlIDI6IC8qIHR4IHVudGhyb3R0bGUgaW50ZXJydXB0ICovCisJCQlwcml2LT50eF90aHJvdHRsZWQgPSAwOworCQkJLyogcXVldWUgdXAgYSB3YWtldXAgYXQgc2NoZWR1bGVyIHRpbWUgKi8KKwkJCXNjaGVkdWxlX3dvcmsoJnByaXYtPndha2V1cF93b3JrKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCitleGl0OgorCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCWlmIChzdGF0dXMpCisJCWVyciAoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7Cit9CisKKworc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfcnhfdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJLyogc3RvcCByZWNlaXZpbmcgY2hhcmFjdGVycy4gV2UganVzdCB0dXJuIG9mZiB0aGUgVVJCIHJlcXVlc3QsIGFuZAorCSAgIGxldCBjaGFycyBwaWxlIHVwIGluIHRoZSBkZXZpY2UuIElmIHdlJ3JlIGRvaW5nIGhhcmR3YXJlCisJICAgZmxvd2NvbnRyb2wsIHRoZSBkZXZpY2Ugd2lsbCBzaWduYWwgdGhlIG90aGVyIGVuZCB3aGVuIGl0cyBidWZmZXIKKwkgICBmaWxscyB1cC4gSWYgd2UncmUgZG9pbmcgWE9OL1hPRkYsIHRoaXMgd291bGQgYmUgYSBnb29kIHRpbWUgdG8KKwkgICBzZW5kIGFuIFhPRkYsIGFsdGhvdWdoIGl0IG1pZ2h0IG1ha2Ugc2Vuc2UgdG8gZm9pc3QgdGhhdCBvZmYKKwkgICB1cG9uIHRoZSBkZXZpY2UgdG9vLiAqLworCisJZGJnKCJrZXlzcGFuX3BkYV9yeF90aHJvdHRsZSBwb3J0ICVkIiwgcG9ydC0+bnVtYmVyKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7Cit9CisKKworc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfcnhfdW50aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwkvKiBqdXN0IHJlc3RhcnQgdGhlIHJlY2VpdmUgaW50ZXJydXB0IFVSQiAqLworCWRiZygia2V5c3Bhbl9wZGFfcnhfdW50aHJvdHRsZSBwb3J0ICVkIiwgcG9ydC0+bnVtYmVyKTsKKwlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlpZiAodXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQykpCisJCWRiZygiIHVzYl9zdWJtaXRfdXJiKHJlYWQgdXJiKSBmYWlsZWQiKTsKKwlyZXR1cm47Cit9CisKKworc3RhdGljIGludCBrZXlzcGFuX3BkYV9zZXRiYXVkIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBpbnQgYmF1ZCkKK3sKKwlpbnQgcmM7CisJaW50IGJpbmRleDsKKworCXN3aXRjaChiYXVkKSB7CisJCWNhc2UgMTEwOiBiaW5kZXggPSAwOyBicmVhazsKKwkJY2FzZSAzMDA6IGJpbmRleCA9IDE7IGJyZWFrOworCQljYXNlIDEyMDA6IGJpbmRleCA9IDI7IGJyZWFrOworCQljYXNlIDI0MDA6IGJpbmRleCA9IDM7IGJyZWFrOworCQljYXNlIDQ4MDA6IGJpbmRleCA9IDQ7IGJyZWFrOworCQljYXNlIDk2MDA6IGJpbmRleCA9IDU7IGJyZWFrOworCQljYXNlIDE5MjAwOiBiaW5kZXggPSA2OyBicmVhazsKKwkJY2FzZSAzODQwMDogYmluZGV4ID0gNzsgYnJlYWs7CisJCWNhc2UgNTc2MDA6IGJpbmRleCA9IDg7IGJyZWFrOworCQljYXNlIDExNTIwMDogYmluZGV4ID0gOTsgYnJlYWs7CisJCWRlZmF1bHQ6IHJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHJhdGhlciB0aGFuIGZpZ3VyZSBvdXQgaG93IHRvIHNsZWVwIHdoaWxlIHdhaXRpbmcgZm9yIHRoaXMKKwkgICB0byBjb21wbGV0ZSwgSSBqdXN0IHVzZSB0aGUgImxlZ2FjeSIgQVBJLiAqLworCXJjID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJICAgICAwLCAvKiBzZXQgYmF1ZCAqLworCQkJICAgICBVU0JfVFlQRV9WRU5ET1IgCisJCQkgICAgIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRQorCQkJICAgICB8IFVTQl9ESVJfT1VULCAvKiB0eXBlICovCisJCQkgICAgIGJpbmRleCwgLyogdmFsdWUgKi8KKwkJCSAgICAgMCwgLyogaW5kZXggKi8KKwkJCSAgICAgTlVMTCwgLyogJmRhdGEgKi8KKwkJCSAgICAgMCwgLyogc2l6ZSAqLworCQkJICAgICAyMDAwKTsgLyogdGltZW91dCAqLworCXJldHVybihyYyk7Cit9CisKKworc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfYnJlYWtfY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpbnQgdmFsdWU7CisJaW50IHJlc3VsdDsKKworCWlmIChicmVha19zdGF0ZSA9PSAtMSkKKwkJdmFsdWUgPSAxOyAvKiBzdGFydCBicmVhayAqLworCWVsc2UKKwkJdmFsdWUgPSAwOyAvKiBjbGVhciBicmVhayAqLworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCQk0LCAvKiBzZXQgYnJlYWsgKi8KKwkJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9PVVQsCisJCQkJdmFsdWUsIDAsIE5VTEwsIDAsIDIwMDApOworCWlmIChyZXN1bHQgPCAwKQorCQlkYmcoIiVzIC0gZXJyb3IgJWQgZnJvbSB1c2JfY29udHJvbF9tc2ciLCAKKwkJICAgIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkvKiB0aGVyZSBpcyBzb21ldGhpbmcgZnVua3kgYWJvdXQgdGhpcy4uIHRoZSBUQ1NCUksgdGhhdCAnY3UnIHBlcmZvcm1zCisJICAgb3VnaHQgdG8gdHJhbnNsYXRlIGludG8gYSBicmVha19jdGwoLTEpLGJyZWFrX2N0bCgwKSBwYWlyIEhaLzQKKwkgICBzZWNvbmRzIGFwYXJ0LCBidXQgaXQgZmVlbHMgbGlrZSB0aGUgYnJlYWsgc2VudCBpc24ndCBhcyBsb25nIGFzIGl0CisJICAgaXMgb24gL2Rldi90dHlTMCAqLworfQorCisKK3N0YXRpYyB2b2lkIGtleXNwYW5fcGRhX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCAKKwkJCQkgICAgIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXVuc2lnbmVkIGludCBjZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKworCS8qIGNmbGFnIHNwZWNpZmllcyBsb3RzIG9mIHN0dWZmOiBudW1iZXIgb2Ygc3RvcCBiaXRzLCBwYXJpdHksIG51bWJlcgorCSAgIG9mIGRhdGEgYml0cywgYmF1ZC4gV2hhdCBjYW4gdGhlIGRldmljZSBhY3R1YWxseSBoYW5kbGU/OgorCSAgIENTVE9QQiAoMSBzdG9wIGJpdCBvciAyKQorCSAgIFBBUkVOQiAocGFyaXR5KQorCSAgIENTSVpFICg1Yml0IC4uIDhiaXQpCisJICAgVGhlcmUgaXMgbWluaW1hbCBodyBzdXBwb3J0IGZvciBwYXJpdHkgKGEgUFNXIGJpdCBzZWVtcyB0byBob2xkIHRoZQorCSAgIHBhcml0eSBvZiB3aGF0ZXZlciBpcyBpbiB0aGUgYWNjdW11bGF0b3IpLiBUaGUgVUFSVCBlaXRoZXIgZGVhbHMKKwkgICB3aXRoIDEwIGJpdHMgKHN0YXJ0LCA4IGRhdGEsIHN0b3ApIG9yIDExIGJpdHMgKHN0YXJ0LCA4IGRhdGEsCisJICAgMSBzcGVjaWFsLCBzdG9wKS4gU28sIHdpdGggZmlybXdhcmUgY2hhbmdlcywgd2UgY291bGQgZG86CisJICAgOE4xOiAxMCBiaXQKKwkgICA4TjI6IDExIGJpdCwgZXh0cmEgYml0IGFsd2F5cyAobWFyaz8pCisJICAgOFtFT01TXTE6IDExIGJpdCwgZXh0cmEgYml0IGlzIHBhcml0eQorCSAgIDdbRU9NU10xOiAxMCBiaXQsIGIwL2I3IGlzIHBhcml0eQorCSAgIDdbRU9NU10yOiAxMSBiaXQsIGIwL2I3IGlzIHBhcml0eSwgZXh0cmEgYml0IGFsd2F5cyAobWFyaz8pCisKKwkgICBIVyBmbG93IGNvbnRyb2wgaXMgZGljdGF0ZWQgYnkgdGhlIHR0eS0+dGVybWlvcy0+Y19jZmxhZ3MgJiBDUlRTQ1RTCisJICAgYml0LgorCisJICAgRm9yIG5vdywganVzdCBkbyBiYXVkLiAqLworCisJc3dpdGNoIChjZmxhZyAmIENCQVVEKSB7CisJCS8qIHdlIGNvdWxkIHN1cHBvcnQgbW9yZSB2YWx1ZXMgaGVyZSwganVzdCBuZWVkIHRvIGNhbGN1bGF0ZQorCQkgICB0aGUgbmVjZXNzYXJ5IGRpdmlzb3JzIGluIHRoZSBmaXJtd2FyZS4gPGFzbS90ZXJtYml0cy5oPgorCQkgICBoYXMgdGhlIEJubm4gY29uc3RhbnRzLiAqLworCQljYXNlIEIxMTA6IGtleXNwYW5fcGRhX3NldGJhdWQoc2VyaWFsLCAxMTApOyBicmVhazsKKwkJY2FzZSBCMzAwOiBrZXlzcGFuX3BkYV9zZXRiYXVkKHNlcmlhbCwgMzAwKTsgYnJlYWs7CisJCWNhc2UgQjEyMDA6IGtleXNwYW5fcGRhX3NldGJhdWQoc2VyaWFsLCAxMjAwKTsgYnJlYWs7CisJCWNhc2UgQjI0MDA6IGtleXNwYW5fcGRhX3NldGJhdWQoc2VyaWFsLCAyNDAwKTsgYnJlYWs7CisJCWNhc2UgQjQ4MDA6IGtleXNwYW5fcGRhX3NldGJhdWQoc2VyaWFsLCA0ODAwKTsgYnJlYWs7CisJCWNhc2UgQjk2MDA6IGtleXNwYW5fcGRhX3NldGJhdWQoc2VyaWFsLCA5NjAwKTsgYnJlYWs7CisJCWNhc2UgQjE5MjAwOiBrZXlzcGFuX3BkYV9zZXRiYXVkKHNlcmlhbCwgMTkyMDApOyBicmVhazsKKwkJY2FzZSBCMzg0MDA6IGtleXNwYW5fcGRhX3NldGJhdWQoc2VyaWFsLCAzODQwMCk7IGJyZWFrOworCQljYXNlIEI1NzYwMDoga2V5c3Bhbl9wZGFfc2V0YmF1ZChzZXJpYWwsIDU3NjAwKTsgYnJlYWs7CisJCWNhc2UgQjExNTIwMDoga2V5c3Bhbl9wZGFfc2V0YmF1ZChzZXJpYWwsIDExNTIwMCk7IGJyZWFrOworCQlkZWZhdWx0OiBkYmcoImNhbid0IGhhbmRsZSByZXF1ZXN0ZWQgYmF1ZCByYXRlIik7IGJyZWFrOworCX0KK30KKworCisvKiBtb2RlbSBjb250cm9sIHBpbnM6IERUUiBhbmQgUlRTIGFyZSBvdXRwdXRzIGFuZCBjYW4gYmUgY29udHJvbGxlZC4KKyAgIERDRCwgUkksIERTUiwgQ1RTIGFyZSBpbnB1dHMgYW5kIGNhbiBiZSByZWFkLiBBbGwgb3V0cHV0cyBjYW4gYWxzbyBiZQorICAgcmVhZC4gVGhlIGJ5dGUgcGFzc2VkIGlzOiBEVFIoYjcpIERDRCBSSSBEU1IgQ1RTIFJUUyhiMikgdW51c2VkIHVudXNlZCAqLworCitzdGF0aWMgaW50IGtleXNwYW5fcGRhX2dldF9tb2RlbV9pbmZvKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCisJCQkJICAgICAgdW5zaWduZWQgY2hhciAqdmFsdWUpCit7CisJaW50IHJjOworCXVuc2lnbmVkIGNoYXIgZGF0YTsKKwlyYyA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICAgMywgLyogZ2V0IHBpbnMgKi8KKwkJCSAgICAgVVNCX1RZUEVfVkVORE9SfFVTQl9SRUNJUF9JTlRFUkZBQ0V8VVNCX0RJUl9JTiwKKwkJCSAgICAgMCwgMCwgJmRhdGEsIDEsIDIwMDApOworCWlmIChyYyA+IDApCisJCSp2YWx1ZSA9IGRhdGE7CisJcmV0dXJuIHJjOworfQorCisKK3N0YXRpYyBpbnQga2V5c3Bhbl9wZGFfc2V0X21vZGVtX2luZm8oc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCQkgICAgICB1bnNpZ25lZCBjaGFyIHZhbHVlKQoreworCWludCByYzsKKwlyYyA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICAgMywgLyogc2V0IHBpbnMgKi8KKwkJCSAgICAgVVNCX1RZUEVfVkVORE9SfFVTQl9SRUNJUF9JTlRFUkZBQ0V8VVNCX0RJUl9PVVQsCisJCQkgICAgIHZhbHVlLCAwLCBOVUxMLCAwLCAyMDAwKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQga2V5c3Bhbl9wZGFfdGlvY21nZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpbnQgcmM7CisJdW5zaWduZWQgY2hhciBzdGF0dXM7CisJaW50IHZhbHVlOworCisJcmMgPSBrZXlzcGFuX3BkYV9nZXRfbW9kZW1faW5mbyhzZXJpYWwsICZzdGF0dXMpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKwl2YWx1ZSA9CisJCSgoc3RhdHVzICYgKDE8PDcpKSA/IFRJT0NNX0RUUiA6IDApIHwKKwkJKChzdGF0dXMgJiAoMTw8NikpID8gVElPQ01fQ0FSIDogMCkgfAorCQkoKHN0YXR1cyAmICgxPDw1KSkgPyBUSU9DTV9STkcgOiAwKSB8CisJCSgoc3RhdHVzICYgKDE8PDQpKSA/IFRJT0NNX0RTUiA6IDApIHwKKwkJKChzdGF0dXMgJiAoMTw8MykpID8gVElPQ01fQ1RTIDogMCkgfAorCQkoKHN0YXR1cyAmICgxPDwyKSkgPyBUSU9DTV9SVFMgOiAwKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBpbnQga2V5c3Bhbl9wZGFfdGlvY21zZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJaW50IHJjOworCXVuc2lnbmVkIGNoYXIgc3RhdHVzOworCisJcmMgPSBrZXlzcGFuX3BkYV9nZXRfbW9kZW1faW5mbyhzZXJpYWwsICZzdGF0dXMpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCWlmIChzZXQgJiBUSU9DTV9SVFMpCisJCXN0YXR1cyB8PSAoMTw8Mik7CisJaWYgKHNldCAmIFRJT0NNX0RUUikKKwkJc3RhdHVzIHw9ICgxPDw3KTsKKworCWlmIChjbGVhciAmIFRJT0NNX1JUUykKKwkJc3RhdHVzICY9IH4oMTw8Mik7CisJaWYgKGNsZWFyICYgVElPQ01fRFRSKQorCQlzdGF0dXMgJj0gfigxPDw3KTsKKwlyYyA9IGtleXNwYW5fcGRhX3NldF9tb2RlbV9pbmZvKHNlcmlhbCwgc3RhdHVzKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQga2V5c3Bhbl9wZGFfaW9jdGwoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBUSU9DTUlXQUlUOgorCQkvKiB3YWl0IGZvciBhbnkgb2YgdGhlIDQgbW9kZW0gaW5wdXRzIChEQ0QsUkksRFNSLENUUykqLworCQkvKiBUT0RPICovCisJY2FzZSBUSU9DR0lDT1VOVDoKKwkJLyogcmV0dXJuIGNvdW50IG9mIG1vZGVtbGluZSB0cmFuc2l0aW9ucyAqLworCQlyZXR1cm4gMDsgLyogVE9ETyAqLworCX0KKwkKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCitzdGF0aWMgaW50IGtleXNwYW5fcGRhX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIAorCQkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWludCByZXF1ZXN0X3VudGhyb3R0bGUgPSAwOworCWludCByYyA9IDA7CisJc3RydWN0IGtleXNwYW5fcGRhX3ByaXZhdGUgKnByaXY7CisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCS8qIGd1ZXNzIGhvdyBtdWNoIHJvb20gaXMgbGVmdCBpbiB0aGUgZGV2aWNlJ3MgcmluZyBidWZmZXIsIGFuZCBpZiB3ZQorCSAgIHdhbnQgdG8gc2VuZCBtb3JlIHRoYW4gdGhhdCwgY2hlY2sgZmlyc3QsIHVwZGF0aW5nIG91ciBub3Rpb24gb2YKKwkgICB3aGF0IGlzIGxlZnQuIElmIG91ciB3cml0ZSB3aWxsIHJlc3VsdCBpbiBubyByb29tIGxlZnQsIGFzayB0aGUKKwkgICBkZXZpY2UgdG8gZ2l2ZSB1cyBhbiBpbnRlcnJ1cHQgd2hlbiB0aGUgcm9vbSBhdmFpbGFibGUgcmlzZXMgYWJvdmUKKwkgICBhIHRocmVzaG9sZCwgYW5kIGhvbGQgb2ZmIGFsbCB3cml0ZXJzIChldmVudHVhbGx5LCB0aG9zZSB1c2luZworCSAgIHNlbGVjdCgpIG9yIHBvbGwoKSB0b28pIHVudGlsIHdlIHJlY2VpdmUgdGhhdCB1bnRocm90dGxlIGludGVycnVwdC4KKwkgICBCbG9jayBpZiB3ZSBjYW4ndCB3cml0ZSBhbnl0aGluZyBhdCBhbGwsIG90aGVyd2lzZSB3cml0ZSBhcyBtdWNoIGFzCisJICAgd2UgY2FuLiAqLworCWRiZygia2V5c3Bhbl9wZGFfd3JpdGUoJWQpIixjb3VudCk7CisJaWYgKGNvdW50ID09IDApIHsKKwkJZGJnKCIgd3JpdGUgcmVxdWVzdCBvZiAwIGJ5dGVzIik7CisJCXJldHVybiAoMCk7CisJfQorCisJLyogd2UgbWlnaHQgYmxvY2sgYmVjYXVzZSBvZjoKKwkgICB0aGUgVFggdXJiIGlzIGluLWZsaWdodCAod2FpdCB1bnRpbCBpdCBjb21wbGV0ZXMpCisJICAgdGhlIGRldmljZSBpcyBmdWxsICh3YWl0IHVudGlsIGl0IHNheXMgdGhlcmUgaXMgcm9vbSkKKwkqLworCWlmIChwb3J0LT53cml0ZV91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MgfHwgcHJpdi0+dHhfdGhyb3R0bGVkICkgeworCQlyZXR1cm4oIDAgKTsKKwl9CisKKwkvKiBBdCB0aGlzIHBvaW50IHRoZSBVUkIgaXMgaW4gb3VyIGNvbnRyb2wsIG5vYm9keSBlbHNlIGNhbiBzdWJtaXQgaXQKKwkgICBhZ2FpbiAodGhlIG9ubHkgc3VkZGVuIHRyYW5zaXRpb24gd2FzIHRoZSBvbmUgZnJvbSBFSU5QUk9HUkVTUyB0bworCSAgIGZpbmlzaGVkKS4gIEFsc28sIHRoZSB0eCBwcm9jZXNzIGlzIG5vdCB0aHJvdHRsZWQuIFNvIHdlIGFyZQorCSAgIHJlYWR5IHRvIHdyaXRlLiAqLworCisJY291bnQgPSAoY291bnQgPiBwb3J0LT5idWxrX291dF9zaXplKSA/IHBvcnQtPmJ1bGtfb3V0X3NpemUgOiBjb3VudDsKKworCS8qIENoZWNrIGlmIHdlIG1pZ2h0IG92ZXJydW4gdGhlIFR4IGJ1ZmZlci4gICBJZiBzbywgYXNrIHRoZQorCSAgIGRldmljZSBob3cgbXVjaCByb29tIGl0IHJlYWxseSBoYXMuICBUaGlzIGlzIGRvbmUgb25seSBvbgorCSAgIHNjaGVkdWxlciB0aW1lLCBzaW5jZSB1c2JfY29udHJvbF9tc2coKSBzbGVlcHMuICovCisJaWYgKGNvdW50ID4gcHJpdi0+dHhfcm9vbSAmJiAhaW5faW50ZXJydXB0KCkpIHsKKwkJdW5zaWduZWQgY2hhciByb29tOworCQlyYyA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgCisJCQkJICAgICB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJCSAgICAgNiwgLyogd3JpdGVfcm9vbSAqLworCQkJCSAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRQorCQkJCSAgICAgfCBVU0JfRElSX0lOLAorCQkJCSAgICAgMCwgLyogdmFsdWU6IDAgbWVhbnMgInJlbWFpbmluZyByb29tIiAqLworCQkJCSAgICAgMCwgLyogaW5kZXggKi8KKwkJCQkgICAgICZyb29tLAorCQkJCSAgICAgMSwKKwkJCQkgICAgIDIwMDApOworCQlpZiAocmMgPCAwKSB7CisJCQlkYmcoIiByb29tcXVlcnkgZmFpbGVkIik7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJaWYgKHJjID09IDApIHsKKwkJCWRiZygiIHJvb21xdWVyeSByZXR1cm5lZCAwIGJ5dGVzIik7CisJCQlyYyA9IC1FSU87IC8qIGRldmljZSBkaWRuJ3QgcmV0dXJuIGFueSBkYXRhICovCisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJZGJnKCIgcm9vbXF1ZXJ5IHNheXMgJWQiLCByb29tKTsKKwkJcHJpdi0+dHhfcm9vbSA9IHJvb207CisJfQorCWlmIChjb3VudCA+IHByaXYtPnR4X3Jvb20pIHsKKwkJLyogd2UncmUgYWJvdXQgdG8gY29tcGxldGVseSBmaWxsIHRoZSBUeCBidWZmZXIsIHNvCisJCSAgIHdlJ2xsIGJlIHRocm90dGxlZCBhZnRlcndhcmRzLiAqLworCQljb3VudCA9IHByaXYtPnR4X3Jvb207CisJCXJlcXVlc3RfdW50aHJvdHRsZSA9IDE7CisJfQorCisJaWYgKGNvdW50KSB7CisJCS8qIG5vdyB0cmFuc2ZlciBkYXRhICovCisJCW1lbWNweSAocG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIGJ1ZiwgY291bnQpOworCQkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgYnVsayBwb3J0ICovCisJCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGNvdW50OworCQkKKwkJcHJpdi0+dHhfcm9vbSAtPSBjb3VudDsKKworCQlwb3J0LT53cml0ZV91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCQlyYyA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChyYykgeworCQkJZGJnKCIgdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkIik7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwl9CisJZWxzZSB7CisJCS8qIFRoZXJlIHdhc24ndCBhbnkgcm9vbSBsZWZ0LCBzbyB3ZSBhcmUgdGhyb3R0bGVkIHVudGlsCisJCSAgIHRoZSBidWZmZXIgZW1wdGllcyBhIGJpdCAqLworCQlyZXF1ZXN0X3VudGhyb3R0bGUgPSAxOworCX0KKworCWlmIChyZXF1ZXN0X3VudGhyb3R0bGUpIHsKKwkJcHJpdi0+dHhfdGhyb3R0bGVkID0gMTsgLyogYmxvY2sgd3JpdGVycyAqLworCQlzY2hlZHVsZV93b3JrKCZwcml2LT51bnRocm90dGxlX3dvcmspOworCX0KKworCXJjID0gY291bnQ7CitleGl0OgorCXJldHVybiByYzsKK30KKworCitzdGF0aWMgdm9pZCBrZXlzcGFuX3BkYV93cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qga2V5c3Bhbl9wZGFfcHJpdmF0ZSAqcHJpdjsKKworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwkvKiBxdWV1ZSB1cCBhIHdha2V1cCBhdCBzY2hlZHVsZXIgdGltZSAqLworCXNjaGVkdWxlX3dvcmsoJnByaXYtPndha2V1cF93b3JrKTsKK30KKworCitzdGF0aWMgaW50IGtleXNwYW5fcGRhX3dyaXRlX3Jvb20gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGtleXNwYW5fcGRhX3ByaXZhdGUgKnByaXY7CisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJLyogdXNlZCBieSBuX3R0eS5jIGZvciBwcm9jZXNzaW5nIG9mIHRhYnMgYW5kIHN1Y2guIEdpdmluZyBpdCBvdXIKKwkgICBjb25zZXJ2YXRpdmUgZ3Vlc3MgaXMgcHJvYmFibHkgZ29vZCBlbm91Z2gsIGJ1dCBuZWVkcyB0ZXN0aW5nIGJ5CisJICAgcnVubmluZyBhIGNvbnNvbGUgdGhyb3VnaCB0aGUgZGV2aWNlLiAqLworCisJcmV0dXJuIChwcml2LT50eF9yb29tKTsKK30KKworCitzdGF0aWMgaW50IGtleXNwYW5fcGRhX2NoYXJzX2luX2J1ZmZlciAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qga2V5c3Bhbl9wZGFfcHJpdmF0ZSAqcHJpdjsKKwkKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQorCS8qIHdoZW4gdGhyb3R0bGVkLCByZXR1cm4gYXQgbGVhc3QgV0FLRVVQX0NIQVJTIHRvIHRlbGwgc2VsZWN0KCkgKHZpYQorCSAgIG5fdHR5LmM6bm9ybWFsX3BvbGwoKSApIHRoYXQgd2UncmUgbm90IHdyaXRlYWJsZS4gKi8KKwlpZiggcG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTIHx8IHByaXYtPnR4X3Rocm90dGxlZCApCisJCXJldHVybiAyNTY7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBrZXlzcGFuX3BkYV9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXVuc2lnbmVkIGNoYXIgcm9vbTsKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBrZXlzcGFuX3BkYV9wcml2YXRlICpwcml2OworCisJLyogZmluZCBvdXQgaG93IG11Y2ggcm9vbSBpcyBpbiB0aGUgVHggcmluZyAqLworCXJjID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJICAgICA2LCAvKiB3cml0ZV9yb29tICovCisJCQkgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UKKwkJCSAgICAgfCBVU0JfRElSX0lOLAorCQkJICAgICAwLCAvKiB2YWx1ZSAqLworCQkJICAgICAwLCAvKiBpbmRleCAqLworCQkJICAgICAmcm9vbSwKKwkJCSAgICAgMSwKKwkJCSAgICAgMjAwMCk7CisJaWYgKHJjIDwgMCkgeworCQlkYmcoIiVzIC0gcm9vbXF1ZXJ5IGZhaWxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXJyb3I7CisJfQorCWlmIChyYyA9PSAwKSB7CisJCWRiZygiJXMgLSByb29tcXVlcnkgcmV0dXJuZWQgMCBieXRlcyIsIF9fRlVOQ1RJT05fXyk7CisJCXJjID0gLUVJTzsKKwkJZ290byBlcnJvcjsKKwl9CisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlwcml2LT50eF9yb29tID0gcm9vbTsKKwlwcml2LT50eF90aHJvdHRsZWQgPSByb29tID8gMCA6IDE7CisKKwkvKiB0aGUgbm9ybWFsIHNlcmlhbCBkZXZpY2Ugc2VlbXMgdG8gYWx3YXlzIHR1cm4gb24gRFRSIGFuZCBSVFMgaGVyZSwKKwkgICBzbyBkbyB0aGUgc2FtZSAqLworCWlmIChwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkKKwkJa2V5c3Bhbl9wZGFfc2V0X21vZGVtX2luZm8oc2VyaWFsLCAoMTw8NykgfCAoMTw8MikgKTsKKwllbHNlCisJCWtleXNwYW5fcGRhX3NldF9tb2RlbV9pbmZvKHNlcmlhbCwgMCk7CisKKwkvKlN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlKi8KKwlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKwlyYyA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOworCWlmIChyYykgeworCQlkYmcoIiVzIC0gdXNiX3N1Ym1pdF91cmIocmVhZCBpbnQpIGZhaWxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXJyb3I7CisJfQorCitlcnJvcjoKKwlyZXR1cm4gcmM7Cit9CisKKworc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKworCWlmIChzZXJpYWwtPmRldikgeworCQkvKiB0aGUgbm9ybWFsIHNlcmlhbCBkZXZpY2Ugc2VlbXMgdG8gYWx3YXlzIHNodXQgb2ZmIERUUiBhbmQgUlRTIG5vdyAqLworCQlpZiAocG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgSFVQQ0wpCisJCQlrZXlzcGFuX3BkYV9zZXRfbW9kZW1faW5mbyhzZXJpYWwsIDApOworCisJCS8qIHNodXRkb3duIG91ciBidWxrIHJlYWRzIGFuZCB3cml0ZXMgKi8KKwkJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwl9Cit9CisKKworLyogZG93bmxvYWQgdGhlIGZpcm13YXJlIHRvIGEgImZha2UiIGRldmljZSAocHJlLXJlbnVtZXJhdGlvbikgKi8KK3N0YXRpYyBpbnQga2V5c3Bhbl9wZGFfZmFrZV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWludCByZXNwb25zZTsKKwljb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCAqcmVjb3JkID0gTlVMTDsKKworCS8qIGRvd25sb2FkIHRoZSBmaXJtd2FyZSBoZXJlIC4uLiAqLworCXJlc3BvbnNlID0gZXp1c2Jfc2V0X3Jlc2V0KHNlcmlhbCwgMSk7CisKKyNpZmRlZiBLRVlTUEFOCisJaWYgKGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBLRVlTUEFOX1ZFTkRPUl9JRCkKKwkJcmVjb3JkID0gJmtleXNwYW5fcGRhX2Zpcm13YXJlWzBdOworI2VuZGlmCisjaWZkZWYgWElSQ09NCisJaWYgKChsZTE2X3RvX2NwdShzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gWElSQ09NX1ZFTkRPUl9JRCkgfHwKKwkgICAgKGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBFTlRSRUdSQV9WRU5ET1JfSUQpKQorCQlyZWNvcmQgPSAmeGlyY29tX3Bnc19maXJtd2FyZVswXTsKKyNlbmRpZgorCWlmIChyZWNvcmQgPT0gTlVMTCkgeworCQllcnIoIiVzOiB1bmtub3duIHZlbmRvciwgYWJvcnRpbmcuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJd2hpbGUocmVjb3JkLT5hZGRyZXNzICE9IDB4ZmZmZikgeworCQlyZXNwb25zZSA9IGV6dXNiX3dyaXRlbWVtb3J5KHNlcmlhbCwgcmVjb3JkLT5hZGRyZXNzLAorCQkJCQkgICAgICh1bnNpZ25lZCBjaGFyICopcmVjb3JkLT5kYXRhLAorCQkJCQkgICAgIHJlY29yZC0+ZGF0YV9zaXplLCAweGEwKTsKKwkJaWYgKHJlc3BvbnNlIDwgMCkgeworCQkJZXJyKCJlenVzYl93cml0ZW1lbW9yeSBmYWlsZWQgZm9yIEtleXNwYW4gUERBICIKKwkJCSAgICAiZmlybXdhcmUgKCVkICUwNFggJXAgJWQpIiwKKwkJCSAgICByZXNwb25zZSwgCisJCQkgICAgcmVjb3JkLT5hZGRyZXNzLCByZWNvcmQtPmRhdGEsIHJlY29yZC0+ZGF0YV9zaXplKTsKKwkJCWJyZWFrOworCQl9CisJCXJlY29yZCsrOworCX0KKwkvKiBicmluZyBkZXZpY2Ugb3V0IG9mIHJlc2V0LiBSZW51bWVyYXRpb24gd2lsbCBvY2N1ciBpbiBhIG1vbWVudAorCSAgIGFuZCB0aGUgbmV3IGRldmljZSB3aWxsIGJpbmQgdG8gdGhlIHJlYWwgZHJpdmVyICovCisJcmVzcG9uc2UgPSBlenVzYl9zZXRfcmVzZXQoc2VyaWFsLCAwKTsKKworCS8qIHdlIHdhbnQgdGhpcyBkZXZpY2UgdG8gZmFpbCB0byBoYXZlIGEgZHJpdmVyIGFzc2lnbmVkIHRvIGl0LiAqLworCXJldHVybiAoMSk7Cit9CisKK3N0YXRpYyBpbnQga2V5c3Bhbl9wZGFfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKworCXN0cnVjdCBrZXlzcGFuX3BkYV9wcml2YXRlICpwcml2OworCisJLyogYWxsb2NhdGUgdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzIGZvciBhbGwgcG9ydHMuIFdlbGwsIGZvciBhbGwKKwkgICBvbmUgcG9ydHMuICovCisKKwlwcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGtleXNwYW5fcGRhX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAoMSk7IC8qIGVycm9yICovCisJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSwgcHJpdik7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmc2VyaWFsLT5wb3J0WzBdLT53cml0ZV93YWl0KTsKKwlJTklUX1dPUksoJnByaXYtPndha2V1cF93b3JrLCAodm9pZCAqKWtleXNwYW5fcGRhX3dha2V1cF93cml0ZSwKKwkJCSh2b2lkICopKHNlcmlhbC0+cG9ydFswXSkpOworCUlOSVRfV09SSygmcHJpdi0+dW50aHJvdHRsZV93b3JrLAorCQkJKHZvaWQgKilrZXlzcGFuX3BkYV9yZXF1ZXN0X3VudGhyb3R0bGUsCisJCQkodm9pZCAqKShzZXJpYWwpKTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZCBrZXlzcGFuX3BkYV9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKwkKKwlrZnJlZSh1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdKSk7Cit9CisKKyNpZmRlZiBLRVlTUEFOCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUga2V5c3Bhbl9wZGFfZmFrZV9kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiS2V5c3BhbiBQREEgLSAocHJlcmVudW1lcmF0aW9uKSIsCisJLnNob3J0X25hbWUgPQkJImtleXNwYW5fcGRhX3ByZSIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlX2Zha2UsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQlOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19pbiA9CQlOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19vdXQgPQkJTlVNX0RPTlRfQ0FSRSwKKwkubnVtX3BvcnRzID0JCTEsCisJLmF0dGFjaCA9CQlrZXlzcGFuX3BkYV9mYWtlX3N0YXJ0dXAsCit9OworI2VuZGlmCisKKyNpZmRlZiBYSVJDT00KK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSB4aXJjb21fcGdzX2Zha2VfZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIlhpcmNvbSAvIEVudHJlZ3JhIFBHUyAtIChwcmVyZW51bWVyYXRpb24pIiwKKwkuc2hvcnRfbmFtZSA9CQkieGlyY29tX25vX2Zpcm0iLAorCS5pZF90YWJsZSA9CQlpZF90YWJsZV9mYWtlX3hpcmNvbSwKKwkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX2luID0JCU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX291dCA9CQlOVU1fRE9OVF9DQVJFLAorCS5udW1fcG9ydHMgPQkJMSwKKwkuYXR0YWNoID0JCWtleXNwYW5fcGRhX2Zha2Vfc3RhcnR1cCwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGtleXNwYW5fcGRhX2RldmljZSA9IHsKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCSJLZXlzcGFuIFBEQSIsCisJLnNob3J0X25hbWUgPQkJImtleXNwYW5fcGRhIiwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGVfc3RkLAorCS5udW1faW50ZXJydXB0X2luID0JMSwKKwkubnVtX2J1bGtfaW4gPQkJMCwKKwkubnVtX2J1bGtfb3V0ID0JCTEsCisJLm51bV9wb3J0cyA9CQkxLAorCS5vcGVuID0JCQlrZXlzcGFuX3BkYV9vcGVuLAorCS5jbG9zZSA9CQlrZXlzcGFuX3BkYV9jbG9zZSwKKwkud3JpdGUgPQkJa2V5c3Bhbl9wZGFfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJa2V5c3Bhbl9wZGFfd3JpdGVfcm9vbSwKKwkud3JpdGVfYnVsa19jYWxsYmFjayA9IAlrZXlzcGFuX3BkYV93cml0ZV9idWxrX2NhbGxiYWNrLAorCS5yZWFkX2ludF9jYWxsYmFjayA9CWtleXNwYW5fcGRhX3J4X2ludGVycnVwdCwKKwkuY2hhcnNfaW5fYnVmZmVyID0Ja2V5c3Bhbl9wZGFfY2hhcnNfaW5fYnVmZmVyLAorCS50aHJvdHRsZSA9CQlrZXlzcGFuX3BkYV9yeF90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQlrZXlzcGFuX3BkYV9yeF91bnRocm90dGxlLAorCS5pb2N0bCA9CQlrZXlzcGFuX3BkYV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkJa2V5c3Bhbl9wZGFfc2V0X3Rlcm1pb3MsCisJLmJyZWFrX2N0bCA9CQlrZXlzcGFuX3BkYV9icmVha19jdGwsCisJLnRpb2NtZ2V0ID0JCWtleXNwYW5fcGRhX3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9CQlrZXlzcGFuX3BkYV90aW9jbXNldCwKKwkuYXR0YWNoID0JCWtleXNwYW5fcGRhX3N0YXJ0dXAsCisJLnNodXRkb3duID0JCWtleXNwYW5fcGRhX3NodXRkb3duLAorfTsKKworCitzdGF0aWMgaW50IF9faW5pdCBrZXlzcGFuX3BkYV9pbml0ICh2b2lkKQoreworCWludCByZXR2YWw7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3Rlcigma2V5c3Bhbl9wZGFfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF9wZGFfcmVnaXN0ZXI7CisjaWZkZWYgS0VZU1BBTgorCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmtleXNwYW5fcGRhX2Zha2VfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF9wZGFfZmFrZV9yZWdpc3RlcjsKKyNlbmRpZgorI2lmZGVmIFhJUkNPTQorCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJnhpcmNvbV9wZ3NfZmFrZV9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3hpcmNvbV9yZWdpc3RlcjsKKyNlbmRpZgorCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigma2V5c3Bhbl9wZGFfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiAwOworZmFpbGVkX3VzYl9yZWdpc3RlcjoJCisjaWZkZWYgWElSQ09NCisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ4aXJjb21fcGdzX2Zha2VfZGV2aWNlKTsKK2ZhaWxlZF94aXJjb21fcmVnaXN0ZXI6CisjZW5kaWYgLyogWElSQ09NICovCisjaWZkZWYgS0VZU1BBTgorCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigma2V5c3Bhbl9wZGFfZmFrZV9kZXZpY2UpOworI2VuZGlmCisjaWZkZWYgS0VZU1BBTgorZmFpbGVkX3BkYV9mYWtlX3JlZ2lzdGVyOgorI2VuZGlmCisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZrZXlzcGFuX3BkYV9kZXZpY2UpOworZmFpbGVkX3BkYV9yZWdpc3RlcjoKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBrZXlzcGFuX3BkYV9leGl0ICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgma2V5c3Bhbl9wZGFfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZrZXlzcGFuX3BkYV9kZXZpY2UpOworI2lmZGVmIEtFWVNQQU4KKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZrZXlzcGFuX3BkYV9mYWtlX2RldmljZSk7CisjZW5kaWYKKyNpZmRlZiBYSVJDT00KKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZ4aXJjb21fcGdzX2Zha2VfZGV2aWNlKTsKKyNlbmRpZgorfQorCisKK21vZHVsZV9pbml0KGtleXNwYW5fcGRhX2luaXQpOworbW9kdWxlX2V4aXQoa2V5c3Bhbl9wZGFfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhX2Z3LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGFfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjUzYWNjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhX2Z3LmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIFVTQiBLZXlzcGFuIFBEQSBGaXJtd2FyZQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBCcmlhbiBXYXJuZXIJPHdhcm5lckBsb3RoYXIuY29tPgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogR2VuZXJhdGVkIGZyb20ga2V5c3Bhbl9wZGEucyBieSBlenVzYl9jb252ZXJ0LnBsCisgKgorICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCBrZXlzcGFuX3BkYV9maXJtd2FyZVtdID0geworeyAweDAwMDAsCTMsCXsweDAyLCAweDAyLCAweDAwfSB9LAoreyAweDAwMjMsCTQsCXsweDAyLCAweDA1LCAweDVmLCAweDAwfSB9LAoreyAweDAwNDMsCTQsCXsweDAyLCAweDAxLCAweDAwLCAweDAwfSB9LAoreyAweDAwMzAsCTUsCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSB9LAoreyAweDAxMDAsCTE2LAl7MHgwMiwgMHgwMiwgMHg5NiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMH0gfSwKK3sgMHgwMTEwLAkxNiwJezB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDB9IH0sCit7IDB4MDEyMCwJMTYsCXsweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA0LCAweDYxLCAweDAwLCAweDAyLCAweDA0LCAweDg5LCAweDAwfSB9LAoreyAweDAyMDAsCTE2LAl7MHg3NSwgMHg4MSwgMHg1ZSwgMHhlNCwgMHhmNSwgMHgzMiwgMHhmNSwgMHgzMywgMHhmNSwgMHgzMCwgMHhmNSwgMHgzMSwgMHhmNSwgMHgzNCwgMHhjMiwgMHgwMH0gfSwKK3sgMHgwMjEwLAkxNiwJezB4YzIsIDB4MDEsIDB4YTksIDB4MDAsIDB4NzQsIDB4ZmUsIDB4OTAsIDB4MTAsIDB4MDAsIDB4ZjAsIDB4YTMsIDB4ZDksIDB4ZmMsIDB4NzQsIDB4ZmQsIDB4OTB9IH0sCit7IDB4MDIyMCwJMTYsCXsweDExLCAweDAwLCAweGYwLCAweGEzLCAweGQ5LCAweGZjLCAweDc0LCAweDAyLCAweDkwLCAweDdmLCAweDlkLCAweGYwLCAweDc0LCAweDAwLCAweDkwLCAweDdmfSB9LAoreyAweDAyMzAsCTE2LAl7MHg5NywgMHhmMCwgMHg3NCwgMHg4NiwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NSwgMHg3NCwgMHgwMywgMHhmMCwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwMjQwLAkxNiwJezB4YWYsIDB4ZTAsIDB4ZDIsIDB4ZTAsIDB4ZjAsIDB4NzQsIDB4MDEsIDB4OTAsIDB4N2YsIDB4YWIsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWUsIDB4ZjAsIDB4OTB9IH0sCit7IDB4MDI1MCwJMTYsCXsweDdmLCAweGFjLCAweDc0LCAweDA0LCAweGYwLCAweDkwLCAweDdmLCAweGFkLCAweDc0LCAweDA0LCAweGYwLCAweDkwLCAweDdmLCAweGM5LCAweGYwLCAweDc0fSB9LAoreyAweDAyNjAsCTE2LAl7MHg4NCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhmMCwgMHg3NCwgMHgwMCwgMHhmNSwgMHg5OCwgMHg3NSwgMHhjOCwgMHgzMCwgMHg3YiwgMHgwNSwgMHg5MSwgMHgyMH0gfSwKK3sgMHgwMjcwLAkxNiwJezB4ZDIsIDB4Y2EsIDB4NzUsIDB4OTgsIDB4NTAsIDB4ZDIsIDB4ZTgsIDB4ZDIsIDB4YWYsIDB4ZDIsIDB4YWMsIDB4NzQsIDB4MDAsIDB4ZjUsIDB4ODYsIDB4OTB9IH0sCit7IDB4MDI4MCwJMTYsCXsweDdmLCAweGQ2LCAweDc0LCAweDAyLCAweGYwLCAweDc5LCAweDJlLCAweDdhLCAweDAwLCAweDdiLCAweDAwLCAweGRiLCAweGZlLCAweGRhLCAweGZhLCAweGQ5fSB9LAoreyAweDAyOTAsCTE2LAl7MHhmNiwgMHg3NCwgMHgwNiwgMHhmMCwgMHg4MCwgMHhmZSwgMHhjMCwgMHg4NiwgMHhjMCwgMHg4MiwgMHhjMCwgMHg4MywgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NX0gfSwKK3sgMHgwMmEwLAkxNiwJezB4YzAsIDB4ZTAsIDB4ZTUsIDB4OTEsIDB4YzIsIDB4ZTQsIDB4ZjUsIDB4OTEsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MDJiMCwJMTYsCXsweGU4LCAweGUwLCAweGY5LCAweGEzLCAweGUwLCAweGZhLCAweGEzLCAweGUwLCAweGZiLCAweGEzLCAweGUwLCAweGZjLCAweGU5LCAweDU0LCAweDYwLCAweGI0fSB9LAoreyAweDAyYzAsCTE2LAl7MHgwMCwgMHgwMywgMHgwMiwgMHgwMywgMHgzOSwgMHhiNCwgMHg0MCwgMHg2ZSwgMHhiYSwgMHgwMCwgMHgwYiwgMHgxMiwgMHgwNCwgMHgyMCwgMHg0MCwgMHgwM30gfSwKK3sgMHgwMmQwLAkxNiwJezB4MDIsIDB4MDQsIDB4MDIsIDB4MDIsIDB4MDQsIDB4MGEsIDB4YmEsIDB4MDEsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MGEsIDB4YmEsIDB4MDIsIDB4MDMsIDB4MDJ9IH0sCit7IDB4MDJlMCwJMTYsCXsweDA0LCAweDBhLCAweGJhLCAweDAzLCAweDAzLCAweDAyLCAweDA0LCAweDQ0LCAweGJhLCAweDA0LCAweDFlLCAweGJiLCAweDAwLCAweDBhLCAweDkwLCAweDdmfSB9LAoreyAweDAyZjAsCTE2LAl7MHg5NSwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwNCwgMHgwMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHg5MH0gfSwKK3sgMHgwMzAwLAkxNiwJezB4N2YsIDB4OTUsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4MDIsIDB4YmEsIDB4MDUsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MGEsIDB4YmF9IH0sCit7IDB4MDMxMCwJMTYsCXsweDA2LCAweDE5LCAweGJiLCAweDAwLCAweDA4LCAweGU1LCAweDMzLCAweGQzLCAweDk1LCAweDMyLCAweDAyLCAweDAzLCAweGRlLCAweGJiLCAweDAxLCAweDA4fSB9LAoreyAweDAzMjAsCTE2LAl7MHhlNSwgMHgzMiwgMHhjMywgMHg5NSwgMHgzMywgMHgwMiwgMHgwMywgMHhkZSwgMHgwMiwgMHgwNCwgMHgwYSwgMHhiYSwgMHgwNywgMHgwNSwgMHg4YiwgMHgzNH0gfSwKK3sgMHgwMzMwLAkxNiwJezB4MDIsIDB4MDQsIDB4MDIsIDB4MDIsIDB4MDQsIDB4MGEsIDB4MDIsIDB4MDQsIDB4MGEsIDB4YmEsIDB4MDAsIDB4MjAsIDB4YjksIDB4ODAsIDB4MTAsIDB4OTB9IH0sCit7IDB4MDM0MCwJMTYsCXsweDdmLCAweDAwLCAweGU0LCAweGYwLCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDA0LCAweDAyLCAweGI5fSB9LAoreyAweDAzNTAsCTE2LAl7MHg4MiwgMHgwMiwgMHg4MCwgMHhlYiwgMHhiOSwgMHg4MSwgMHgwMiwgMHg4MCwgMHhlNiwgMHgwMiwgMHgwNCwgMHgwYSwgMHhiYSwgMHgwMSwgMHgwZiwgMHhiYn0gfSwKK3sgMHgwMzYwLAkxNiwJezB4MDAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MGEsIDB4YmIsIDB4MDEsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MDIsIDB4MDIsIDB4MDQsIDB4MGEsIDB4YmEsIDB4MDN9IH0sCit7IDB4MDM3MCwJMTYsCXsweDBmLCAweGJiLCAweDAwLCAweDAzLCAweDAyLCAweDA0LCAweDBhLCAweGJiLCAweDAxLCAweDAzLCAweDAyLCAweDA0LCAweDAyLCAweDAyLCAweDA0LCAweDBhfSB9LAoreyAweDAzODAsCTE2LAl7MHhiYSwgMHgwNiwgMHg1NiwgMHhiYywgMHgwMSwgMHgwZiwgMHg5MCwgMHg3ZiwgMHhkNCwgMHg3NCwgMHgwNiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkNSwgMHg3NH0gfSwKK3sgMHgwMzkwLAkxNiwJezB4MTIsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4MDIsIDB4YmMsIDB4MDIsIDB4MTIsIDB4YmIsIDB4MDAsIDB4NmYsIDB4OTAsIDB4N2YsIDB4ZDQsIDB4NzQsIDB4MDZ9IH0sCit7IDB4MDNhMCwJMTYsCXsweGYwLCAweDkwLCAweDdmLCAweGQ1LCAweDc0LCAweDI0LCAweGYwLCAweDAyLCAweDA0LCAweDAyLCAweGJjLCAweDAzLCAweDI5LCAweDc0LCAweDA0LCAweGMzfSB9LAoreyAweDAzYjAsCTE2LAl7MHg5YiwgMHg0MCwgMHg1NywgMHg2MCwgMHg1NSwgMHhlYiwgMHgyYiwgMHg5MCwgMHgwNiwgMHg0NCwgMHgyNSwgMHg4MiwgMHhmNSwgMHg4MiwgMHg3NCwgMHgwMH0gfSwKK3sgMHgwM2MwLAkxNiwJezB4MzUsIDB4ODMsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjksIDB4YTMsIDB4ZTAsIDB4ZmEsIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZTksIDB4ZjAsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MDNkMCwJMTYsCXsweGQ1LCAweGVhLCAweGYwLCAweDAyLCAweDA0LCAweDAyLCAweDAyLCAweDA0LCAweDBhLCAweGJhLCAweDA4LCAweDBmLCAweDc0LCAweDAxLCAweDkwLCAweDdmfSB9LAoreyAweDAzZTAsCTE2LAl7MHgwMCwgMHhmMCwgMHg3NCwgMHgwMSwgMHg5MCwgMHg3ZiwgMHhiNSwgMHhmMCwgMHgwMiwgMHgwNCwgMHgwMiwgMHhiYSwgMHgwOSwgMHgwMywgMHgwMiwgMHgwNH0gfSwKK3sgMHgwM2YwLAkxNiwJezB4MDIsIDB4YmEsIDB4MGEsIDB4MDUsIDB4NzQsIDB4MDAsIDB4MDIsIDB4MDMsIDB4ZGUsIDB4YmEsIDB4MGIsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MDIsIDB4MDJ9IH0sCit7IDB4MDQwMCwJMTYsCXsweDA0LCAweDBhLCAweDkwLCAweDdmLCAweGI0LCAweDc0LCAweDAyLCAweGYwLCAweDgwLCAweDA5LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxfSB9LAoreyAweDA0MTAsCTE2LAl7MHhmMCwgMHg4MCwgMHgwMCwgMHhkMCwgMHhlMCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4MywgMHhkMCwgMHg4MiwgMHhkMCwgMHg4NiwgMHgzMn0gfSwKK3sgMHgwNDIwLAkxNiwJezB4ZWIsIDB4MjAsIDB4ZTcsIDB4MWUsIDB4YzMsIDB4OTQsIDB4MGEsIDB4NTAsIDB4MTksIDB4ZWIsIDB4MjMsIDB4MjQsIDB4ZmUsIDB4ZjUsIDB4ODIsIDB4NzR9IH0sCit7IDB4MDQzMCwJMTYsCXsweDA1LCAweDM0LCAweDAwLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweGNiLCAweGY1LCAweGNkLCAweGEzLCAweGUwLCAweGY1LCAweGNhLCAweGY1LCAweGNjfSB9LAoreyAweDA0NDAsCTE2LAl7MHhjMywgMHgyMiwgMHhkMywgMHgyMiwgMHhiOSwgMHg0MSwgMHgxMSwgMHhlYiwgMHg2NCwgMHhmZiwgMHg1NCwgMHg4NCwgMHhmYiwgMHg5MCwgMHg3ZiwgMHg5OH0gfSwKK3sgMHgwNDUwLAkxNiwJezB4ZTAsIDB4NTQsIDB4N2IsIDB4NGIsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4MDIsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NjQsIDB4ZmYsIDB4MDIsIDB4MDN9IH0sCit7IDB4MDQ2MCwJMTYsCXsweGRlLCAweGMwLCAweDg2LCAweGMwLCAweDgyLCAweGMwLCAweDgzLCAweGMwLCAweDg0LCAweGMwLCAweDg1LCAweGMwLCAweGUwLCAweGU1LCAweDkxLCAweGMyfSB9LAoreyAweDA0NzAsCTE2LAl7MHhlNCwgMHhmNSwgMHg5MSwgMHg5MCwgMHg3ZiwgMHhhOSwgMHg3NCwgMHgwNCwgMHhmMCwgMHgxMiwgMHgwNSwgMHhhMCwgMHhkMCwgMHhlMCwgMHhkMCwgMHg4NX0gfSwKK3sgMHgwNDgwLAkxNiwJezB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODYsIDB4MzIsIDB4YzAsIDB4ODYsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODMsIDB4YzB9IH0sCit7IDB4MDQ5MCwJMTYsCXsweDg0LCAweGMwLCAweDg1LCAweGMwLCAweGUwLCAweGU1LCAweDkxLCAweGMyLCAweGU0LCAweGY1LCAweDkxLCAweDkwLCAweDdmLCAweGFhLCAweDc0LCAweDA0fSB9LAoreyAweDA0YTAsCTE2LAl7MHhmMCwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMCwgMHhmOSwgMHhlNCwgMHhmNSwgMHg4NiwgMHg5MCwgMHg3ZCwgMHhjMCwgMHg3NSwgMHg4NSwgMHgxMCwgMHg4NX0gfSwKK3sgMHgwNGIwLAkxNiwJezB4MzIsIDB4ODQsIDB4ZTAsIDB4MDUsIDB4ODYsIDB4MDUsIDB4ODQsIDB4ZjAsIDB4ZTUsIDB4ODQsIDB4YjUsIDB4MzMsIDB4MDIsIDB4ODAsIDB4MDksIDB4MDV9IH0sCit7IDB4MDRjMCwJMTYsCXsweDMyLCAweDA1LCAweDg2LCAweGEzLCAweGQ5LCAweGVjLCAweDgwLCAweDAwLCAweDkwLCAweDdmLCAweGM5LCAweGYwLCAweGIxLCAweDMxLCAweGQwLCAweGUwfSB9LAoreyAweDA0ZDAsCTE2LAl7MHhkMCwgMHg4NSwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4MywgMHhkMCwgMHg4MiwgMHhkMCwgMHg4NiwgMHgzMiwgMHhlNCwgMHhmNSwgMHg4NiwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwNGUwLAkxNiwJezB4YmMsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4NGIsIDB4OTAsIDB4N2QsIDB4MDAsIDB4ZTUsIDB4MzIsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4MzMsIDB4ZjAsIDB4YTN9IH0sCit7IDB4MDRmMCwJMTYsCXsweGU1LCAweDMwLCAweGYwLCAweGEzLCAweGU1LCAweDMxLCAweGYwLCAweGEzLCAweGU0LCAweDMwLCAweDAwLCAweDAxLCAweDA0LCAweGYwLCAweGEzLCAweDA1fSB9LAoreyAweDA1MDAsCTE2LAl7MHg4NiwgMHg5MCwgMHgxMCwgMHgwMCwgMHg3OSwgMHgxMCwgMHhlMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhmMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhkOSwgMHhmNn0gfSwKK3sgMHgwNTEwLAkxNiwJezB4MDUsIDB4ODYsIDB4NzQsIDB4ZmMsIDB4ZjAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4OTAsIDB4MTEsIDB4MDAsIDB4NzksIDB4MTAsIDB4ZTAsIDB4YTMsIDB4MDV9IH0sCit7IDB4MDUyMCwJMTYsCXsweDg2LCAweGYwLCAweGEzLCAweDA1LCAweDg2LCAweGQ5LCAweGY2LCAweGU0LCAweGY1LCAweDg2LCAweDkwLCAweDdmLCAweGJkLCAweDc0LCAweDI2LCAweGYwfSB9LAoreyAweDA1MzAsCTE2LAl7MHgyMiwgMHgyMCwgMHgwMCwgMHgxMywgMHhlNSwgMHgzMiwgMHhiNSwgMHgzMywgMHgwMSwgMHgyMiwgMHgwNSwgMHgzMywgMHg3NSwgMHg4MywgMHgxMCwgMHg4NX0gfSwKK3sgMHgwNTQwLAkxNiwJezB4MzMsIDB4ODIsIDB4ZTAsIDB4ZjUsIDB4OTksIDB4ZDIsIDB4MDAsIDB4NzQsIDB4MDAsIDB4YjUsIDB4MzQsIDB4MDEsIDB4MjIsIDB4ZTUsIDB4MzMsIDB4ZDN9IH0sCit7IDB4MDU1MCwJMTYsCXsweDk1LCAweDMyLCAweGMzLCAweDk1LCAweDM0LCAweDQwLCAweGY1LCAweDc1LCAweDM0LCAweDAwLCAweGQyLCAweDAxLCAweDAyLCAweDA1LCAweGEwLCAweGMwfSB9LAoreyAweDA1NjAsCTE2LAl7MHg4NiwgMHhjMCwgMHg4MiwgMHhjMCwgMHg4MywgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NSwgMHhjMCwgMHhlMCwgMHgzMCwgMHg5OSwgMHgwNywgMHhjMiwgMHg5OX0gfSwKK3sgMHgwNTcwLAkxNiwJezB4YzIsIDB4MDAsIDB4MTIsIDB4MDUsIDB4MzQsIDB4MzAsIDB4OTgsIDB4MDUsIDB4MTIsIDB4MDUsIDB4OGEsIDB4YzIsIDB4OTgsIDB4ZDAsIDB4ZTAsIDB4ZDB9IH0sCit7IDB4MDU4MCwJMTYsCXsweDg1LCAweGQwLCAweDg0LCAweGQwLCAweDgzLCAweGQwLCAweDgyLCAweGQwLCAweDg2LCAweDMyLCAweDc1LCAweDgzLCAweDExLCAweDg1LCAweDMwLCAweDgyfSB9LAoreyAweDA1OTAsCTE2LAl7MHgwNSwgMHg4MiwgMHhlNSwgMHg5OSwgMHhmMCwgMHhlNSwgMHg4MiwgMHhiNSwgMHgzMSwgMHgwMSwgMHgyMiwgMHgwNSwgMHgzMCwgMHhiMSwgMHhhMCwgMHgyMn0gfSwKK3sgMHgwNWEwLAkxNiwJezB4OTAsIDB4N2YsIDB4YjgsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MzgsIDB4MjAsIDB4MDEsIDB4MzYsIDB4ZTUsIDB4MzAsIDB4YjUsIDB4MzEsIDB4MDEsIDB4MjJ9IH0sCit7IDB4MDViMCwJMTYsCXsweGU0LCAweGY1LCAweDg2LCAweDc1LCAweDgzLCAweDExLCAweDA1LCAweDg2LCAweDkwLCAweDdlLCAweDAwLCAweGYwLCAweGEzLCAweDA1LCAweDg2LCAweDc5fSB9LAoreyAweDA1YzAsCTE2LAl7MHgwMSwgMHhlNSwgMHgzMCwgMHhiNSwgMHgzMSwgMHgwMiwgMHg4MCwgMHgxMCwgMHgwNSwgMHgzMSwgMHg4NSwgMHgzMSwgMHg4MiwgMHhlMCwgMHgwNSwgMHg4Nn0gfSwKK3sgMHgwNWQwLAkxNiwJezB4ZjAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4MDksIDB4YjksIDB4NDAsIDB4ZTksIDB4OTAsIDB4N2YsIDB4YjksIDB4ZTksIDB4NjAsIDB4MDEsIDB4ZjAsIDB4MjJ9IH0sCit7IDB4MDVlMCwJMTYsCXsweGMyLCAweDAxLCAweGU0LCAweGY1LCAweDg2LCAweDkwLCAweDdlLCAweDAwLCAweDc0LCAweDAxLCAweGYwLCAweGEzLCAweDc0LCAweDAyLCAweGYwLCAweDkwfSB9LAoreyAweDA1ZjAsCTE2LAl7MHg3ZiwgMHhiOSwgMHhmMCwgMHgyMiwgMHhjMiwgMHg5OSwgMHhmNSwgMHg5OSwgMHgzMCwgMHg5OSwgMHhmZCwgMHhjMiwgMHg5OSwgMHgyMiwgMHhlNSwgMHg1ZX0gfSwKK3sgMHgwNjAwLAkxNiwJezB4ZjYsIDB4M2MsIDB4ZmQsIDB4OGYsIDB4ZmUsIDB4YzgsIDB4ZmYsIDB4NjQsIDB4ZmYsIDB4YjIsIDB4ZmYsIDB4ZDksIDB4ZmYsIDB4ZWQsIDB4ZmYsIDB4ZjN9IH0sCit7IDB4MDYxMCwJMTYsCXsweGZmLCAweGZhLCAweDEyLCAweDAxLCAweDAwLCAweDAxLCAweGZmLCAweGZmLCAweGZmLCAweDQwLCAweGNkLCAweDA2LCAweDA0LCAweDAxLCAweDg5LCAweGFifSB9LAoreyAweDA2MjAsCTE2LAl7MHgwMSwgMHgwMiwgMHgwMywgMHgwMSwgMHgwOSwgMHgwMiwgMHgyMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwOSwgMHgwNCwgMHgwMH0gfSwKK3sgMHgwNjMwLAkxNiwJezB4MDAsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4MDUsIDB4ODIsIDB4MDMsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4MDJ9IH0sCit7IDB4MDY0MCwJMTYsCXsweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA2LCAweDRjLCAweDA2LCAweDUwLCAweDA2LCAweDcyLCAweDA2LCAweGEwLCAweDA0LCAweDAzLCAweDAwLCAweDAwfSB9LAoreyAweDA2NTAsCTE2LAl7MHgyMiwgMHgwMywgMHg0MSwgMHgwMCwgMHg0MywgMHgwMCwgMHg0ZCwgMHgwMCwgMHg0NSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg3NSwgMHgwMCwgMHg3MywgMHgwMH0gfSwKK3sgMHgwNjYwLAkxNiwJezB4NjIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4NjksIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjcsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzQsIDB4MDB9IH0sCit7IDB4MDY3MCwJMTYsCXsweDczLCAweDAwLCAweDJlLCAweDAzLCAweDQxLCAweDAwLCAweDQzLCAweDAwLCAweDRkLCAweDAwLCAweDQ1LCAweDAwLCAweDIwLCAweDAwLCAweDU1LCAweDAwfSB9LAoreyAweDA2ODAsCTE2LAl7MHg1MywgMHgwMCwgMHg0MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHg3MywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2MSwgMHgwMH0gfSwKK3sgMHgwNjkwLAkxNiwJezB4NmMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4NjksIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjcsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzQsIDB4MDB9IH0sCit7IDB4MDZhMCwJNiwJezB4MDYsIDB4MDMsIDB4MzQsIDB4MDAsIDB4MzcsIDB4MDB9IH0sCit7IDB4ZmZmZiwJMCwJezB4MDB9IH0KK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2ExOHhfZncuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTE4eF9mdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YjNiYzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2ExOHhfZncuaApAQCAtMCwwICsxLDQ0NyBAQAorLyoga2V5c3Bhbl91c2ExOHhfZncuaAorCisJVGhlIGZpcm13YXJlIGNvbnRhaW5lZCBoZXJlaW4gYXMga2V5c3Bhbl91c2ExOHhfZncuaCBpcworCisJCUNvcHlyaWdodCAoQykgMTk5OS0yMDAxCisJCUtleXNwYW4sIEEgZGl2aXNpb24gb2YgSW5ub1N5cyBJbmNvcnBvcmF0ZWQgKCJLZXlzcGFuIikKKwkJCisJYXMgYW4gdW5wdWJsaXNoZWQgd29yay4gVGhpcyBub3RpY2UgZG9lcyBub3QgaW1wbHkgdW5yZXN0cmljdGVkIG9yCisJcHVibGljIGFjY2VzcyB0byB0aGUgc291cmNlIGNvZGUgZnJvbSB3aGljaCB0aGlzIGZpcm13YXJlIGltYWdlIGlzCisJZGVyaXZlZC4gIEV4Y2VwdCBhcyBub3RlZCBiZWxvdyB0aGlzIGZpcm13YXJlIGltYWdlIG1heSBub3QgYmUgCisJcmVwcm9kdWNlZCwgdXNlZCwgc29sZCBvciB0cmFuc2ZlcnJlZCB0byBhbnkgdGhpcmQgcGFydHkgd2l0aG91dCAKKwlLZXlzcGFuJ3MgcHJpb3Igd3JpdHRlbiBjb25zZW50LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworCVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSAKKwlpbWFnZSBhcyBwYXJ0IG9mIGEgTGludXggb3Igb3RoZXIgT3BlbiBTb3VyY2Ugb3BlcmF0aW5nIHN5c3RlbSBrZXJuZWwgCisJaW4gdGV4dCBvciBiaW5hcnkgZm9ybSBhcyByZXF1aXJlZC4gCisKKwlUaGlzIGZpcm13YXJlIG1heSBub3QgYmUgbW9kaWZpZWQgYW5kIG1heSBvbmx5IGJlIHVzZWQgd2l0aCAgCisJS2V5c3BhbiBoYXJkd2FyZS4gIERpc3RyaWJ1dGlvbiBhbmQvb3IgTW9kaWZpY2F0aW9uIG9mIHRoZSAKKwlrZXlzcGFuLmMgZHJpdmVyIHdoaWNoIGluY2x1ZGVzIHRoaXMgZmlybXdhcmUsIGluIHdob2xlIG9yIGluIAorCXBhcnQsIHJlcXVpcmVzIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBzdGF0ZW1lbnQuIgorKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkIGtleXNwYW5fdXNhMTh4X2Zpcm13YXJlW10gPSB7CisgezB4MDAzMywgIDMsIHsgMHgwMiwgMHgxMiwgMHhmN319LAorIHsweDAwMDMsIDE2LCB7IDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4NzQsIDB4MzAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZjB9fSwKKyB7MHgwMDEzLCAxNiwgeyAweDkwLCAweDdmLCAweDk0LCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweDc0LCAweGZmLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk3LCAweGYwLCAweDkwfX0sCisgezB4MDAyMywgMTUsIHsgMHg3ZiwgMHg5NSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHg3NCwgMHgwNywgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhmMCwgMHgyMn19LAorIHsweDAwNDYsIDE2LCB7IDB4MzAsIDB4MDksIDB4MTgsIDB4MTIsIDB4MTMsIDB4MWIsIDB4ZWYsIDB4YzMsIDB4OTUsIDB4M2MsIDB4NDAsIDB4MDMsIDB4MDIsIDB4MDAsIDB4ZDgsIDB4OTB9fSwKKyB7MHgwMDU2LCAxNiwgeyAweDdmLCAweGJmLCAweDc0LCAweDAxLCAweGYwLCAweGMyLCAweDA5LCAweGMyLCAweDAwLCAweDgwLCAweDc3LCAweDMwLCAweDAzLCAweDNiLCAweDkwLCAweDdmfX0sCisgezB4MDA2NiwgMTYsIHsgMHhjNiwgMHhlMCwgMHgyMCwgMHhlMSwgMHg2ZCwgMHgxMiwgMHgxMywgMHgxYiwgMHhlZiwgMHhjMywgMHg5NCwgMHg0MCwgMHg1MCwgMHg2NCwgMHg5MCwgMHg3ZX19LAorIHsweDAwNzYsIDE2LCB7IDB4NDAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MDksIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTAsIDB4MTQsIDB4ZjUsIDB4MTksIDB4MjAsIDB4MDAsIDB4MTEsIDB4NjB9fSwKKyB7MHgwMDg2LCAxNiwgeyAweDBmLCAweGY1LCAweDA4LCAweDdlLCAweDdlLCAweDdmLCAweDQxLCAweDc1LCAweDBjLCAweDdlLCAweDc1LCAweDBkLCAweDQxLCAweDEyLCAweDBjLCAweGJhfX0sCisgezB4MDA5NiwgMTYsIHsgMHhjMiwgMHgwMywgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhmMCwgMHg4MCwgMHgzOSwgMHg5MCwgMHg3ZiwgMHhjOCwgMHhlMCwgMHgyMCwgMHhlMSwgMHgzMn19LAorIHsweDAwYTYsIDE2LCB7IDB4MTIsIDB4MTMsIDB4MWIsIDB4ZWYsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTAsIDB4MjksIDB4OTAsIDB4N2QsIDB4YzAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MDl9fSwKKyB7MHgwMGI2LCAxNiwgeyAweDkwLCAweDdmLCAweGM5LCAweGUwLCAweDE0LCAweGY1LCAweDE5LCAweDIwLCAweDAwLCAweDExLCAweDYwLCAweDBmLCAweGY1LCAweDA4LCAweDdlLCAweDdkfX0sCisgezB4MDBjNiwgMTYsIHsgMHg3ZiwgMHhjMSwgMHg3NSwgMHgwYywgMHg3ZCwgMHg3NSwgMHgwZCwgMHhjMSwgMHgxMiwgMHgwYywgMHhiYSwgMHhkMiwgMHgwMywgMHhlNCwgMHg5MCwgMHg3Zn19LAorIHsweDAwZDYsIDE2LCB7IDB4YzksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjYsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MDEsIDB4NjAsIDB4MTIsIDB4MTEsIDB4ZDYsIDB4OGZ9fSwKKyB7MHgwMGU2LCAxNiwgeyAweDE5LCAweDEyLCAweDEzLCAweDI3LCAweDhmLCAweDM2LCAweGU1LCAweDE5LCAweGMzLCAweDk1LCAweDNhLCAweDUwLCAweDBmLCAweDEyLCAweDEyLCAweGVifX0sCisgezB4MDBmNiwgMTYsIHsgMHhlZiwgMHgzMCwgMHhlMCwgMHgwOCwgMHhlNSwgMHgzNiwgMHgyMCwgMHhlNywgMHgwMywgMHgzMCwgMHgwYiwgMHg1ZSwgMHhjMiwgMHgwYiwgMHhlNSwgMHgxOX19LAorIHsweDAwMzYsIDEyLCB7IDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjJ9fSwKKyB7MHgwMDQzLCAgMywgeyAweDAyLCAweDEzLCAweDAwfX0sCisgezB4MDAwMCwgIDMsIHsgMHgwMiwgMHgwZSwgMHgwMH19LAorIHsweDAxMDYsIDY0LCB7IDB4NjAsIDB4NTgsIDB4YjQsIDB4ODAsIDB4MDMsIDB4NDMsIDB4MzYsIDB4MDIsIDB4ZTUsIDB4MzYsIDB4MzAsIDB4ZTcsIDB4MjYsIDB4ZTUsIDB4MTksIDB4ZDMsIDB4OTQsCisgIDB4MjAsIDB4NDAsIDB4MDMsIDB4NzUsIDB4MTksIDB4MjAsIDB4ODUsIDB4MTksIDB4MDgsIDB4N2UsIDB4N2UsIDB4N2YsIDB4ODAsIDB4NzUsIDB4MGMsIDB4N2UsCisgIDB4NzUsIDB4MGQsIDB4ODAsIDB4YWYsIDB4MzYsIDB4MTIsIDB4MGYsIDB4NGIsIDB4ZTUsIDB4MTksIDB4MjUsIDB4ZTAsIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZjAsCisgIDB4ODAsIDB4MjcsIDB4ZTUsIDB4MTksIDB4ZDMsIDB4OTQsIDB4M2YsIDB4NDAsIDB4MDMsIDB4NzUsIDB4MTksIDB4M2YsIDB4ODUsIDB4MTksIDB4MDh9fSwKKyB7MHgwMTQ2LCA2NCwgeyAweDkwLCAweDdlLCAweDgwLCAweGU1LCAweDM2LCAweGYwLCAweDdlLCAweDdlLCAweDdmLCAweDgxLCAweDc1LCAweDBjLCAweDdlLCAweDc1LCAweDBkLCAweDgxLCAweDEyLAorICAweDBjLCAweGRmLCAweGU1LCAweDE5LCAweDA0LCAweDkwLCAweDdmLCAweGI3LCAweGYwLCAweDkwLCAweDdmLCAweGNlLCAweGUwLCAweDMwLCAweGUxLCAweDA2LAorICAweDIwLCAweDA1LCAweDAzLCAweDAyLCAweDAzLCAweGMxLCAweGMyLCAweDA1LCAweGU0LCAweGY1LCAweDE4LCAweDc0LCAweDQwLCAweDI1LCAweDE4LCAweGY1LAorICAweDgyLCAweGU0LCAweDM0LCAweDdjLCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDE4LCAweDdjLCAweDAwLCAweDdiLCAweDAxLCAweDdhfX0sCisgezB4MDE4NiwgNjQsIHsgMHg3ZSwgMHg3OSwgMHgwMCwgMHgyNCwgMHgwMCwgMHhmOSwgMHhlYywgMHgzNCwgMHg3ZSwgMHhmYSwgMHhlZiwgMHgxMiwgMHgwZSwgMHhkMiwgMHgwNSwgMHgxOCwgMHhlNSwKKyAgMHgxOCwgMHhiNCwgMHgyMCwgMHhkNywgMHg5MCwgMHg3ZSwgMHgwMCwgMHhlMCwgMHg2MCwgMHg2OCwgMHg5MCwgMHg3ZSwgMHgwMywgMHhlMCwgMHg2MCwgMHgyNCwKKyAgMHg3ZiwgMHgwMSwgMHhlNCwgMHhmZCwgMHgxMiwgMHgxMSwgMHhiMSwgMHg3ZiwgMHgwMywgMHg3ZCwgMHhjZCwgMHgxMiwgMHgxMSwgMHhiMSwgMHg0MywgMHg0NiwKKyAgMHg4MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NiwgMHhmMCwgMHhlNCwgMHg5MH19LAorIHsweDAxYzYsIDY0LCB7IDB4N2UsIDB4MTMsIDB4ZjAsIDB4ODAsIDB4MzAsIDB4OTAsIDB4N2UsIDB4MDEsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTAsIDB4MzUsIDB4OTAsIDB4N2UsIDB4MDIsIDB4ZTAsCisgIDB4ZmYsIDB4MTIsIDB4MTAsIDB4NWIsIDB4N2YsIDB4MDEsIDB4OTAsIDB4N2UsIDB4MTEsIDB4ZTAsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4YjEsIDB4N2YsIDB4MDMsCisgIDB4N2QsIDB4MDcsIDB4MTIsIDB4MTEsIDB4YjEsIDB4NDMsIDB4NDYsIDB4ODAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZTUsIDB4NDYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4ZTUsIDB4NDAsIDB4NDQsIDB4MDYsIDB4OTB9fSwKKyB7MHgwMjA2LCA2NCwgeyAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdlLCAweDAzLCAweGUwLCAweDcwLCAweDA2LCAweDkwLCAweDdlLCAweDEzLCAweGUwLCAweDcwLCAweDA4LCAweGU0LCAweDkwLAorICAweDdlLCAweDEzLCAweGYwLCAweDc1LCAweDI1LCAweGZmLCAweDkwLCAweDdlLCAweDA1LCAweGUwLCAweDYwLCAweDEyLCAweGEzLCAweGUwLCAweDU0LCAweDNmLAorICAweGY1LCAweDQ0LCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ0LCAweGYwLCAweDkwLCAweDdlLAorICAweDA3LCAweGUwLCAweDYwLCAweDJiLCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQyLCAweDgwLCAweDgwLCAweDAzLCAweDUzLCAweDQyfX0sCisgezB4MDI0NiwgNjQsIHsgMHg3ZiwgMHg1MywgMHg0MiwgMHhmYywgMHg5MCwgMHg3ZSwgMHgwOSwgMHhlMCwgMHg2MCwgMHgxMSwgMHg0MywgMHg0MiwgMHgwMiwgMHhhMywgMHhlMCwgMHhmZiwgMHgxMiwKKyAgMHgxMCwgMHhhNywgMHg5MCwgMHg3ZSwgMHgwYiwgMHhlMCwgMHhmZiwgMHgxMiwgMHgxMCwgMHhjZCwgMHhhZiwgMHg0MiwgMHgxMiwgMHgxMCwgMHg4MSwgMHg5MCwKKyAgMHg3ZSwgMHgwMywgMHhlMCwgMHg2MCwgMHgwOCwgMHg1MywgMHg0MiwgMHg3ZiwgMHhhZiwgMHg0MiwgMHgxMiwgMHgxMCwgMHg4MSwgMHg5MCwgMHg3ZSwgMHgwYywKKyAgMHhlMCwgMHg2MCwgMHgxOCwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0NiwgMHgwMiwgMHg4MCwgMHgwMywgMHg1MywgMHg0NiwgMHhmZH19LAorIHsweDAyODYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MGUsIDB4ZTAsIDB4NjAsCisgIDB4MTgsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDYsIDB4MDEsIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDYsIDB4ZmUsIDB4OTAsIDB4N2YsIDB4OTgsCisgIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MTIsIDB4ZTAsIDB4ZjUsIDB4M2EsIDB4YTMsCisgIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGQsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4M2MsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDYsIDB4MTB9fSwKKyB7MHgwMmM2LCA2NCwgeyAweDgwLCAweDAzLCAweDUzLCAweDQ2LCAweGVmLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ2LCAweGYwLAorICAweDkwLCAweDdlLCAweDE2LCAweGUwLCAweDYwLCAweDMyLCAweDUzLCAweDQ0LCAweGJmLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LAorICAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDEyLCAweDEyLCAweGRmLAorICAweGVmLCAweDU0LCAweGZlLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDUzLCAweDNlLCAweGZkLCAweGU0LCAweGZmLCAweGFkLCAweDNlLCAweDEyfX0sCisgezB4MDMwNiwgNjQsIHsgMHgxMSwgMHhiMSwgMHhlNCwgMHhmNSwgMHgyYSwgMHhmNSwgMHgyOSwgMHhkMiwgMHgwNywgMHg5MCwgMHg3ZSwgMHgxNywgMHhlMCwgMHg2MCwgMHgwZiwgMHg0MywgMHgzZSwKKyAgMHgwMiwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZSwgMHgxMiwgMHgxMSwgMHhiMSwgMHg3NSwgMHgyOSwgMHgwMSwgMHhkMiwgMHgwNywgMHg5MCwgMHg3ZSwgMHgxOCwKKyAgMHhlMCwgMHg2MCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHhlNSwgMHg0MCwgMHg0NCwgMHgwNCwgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHhmMCwgMHhkMiwgMHgwMCwgMHg5MCwgMHg3ZSwgMHgxOSwgMHhlMCwgMHg2MCwgMHgxMSwgMHg0MywgMHg0NCwgMHg0MCwgMHg5MCwgMHg3ZiwgMHg5OH19LAorIHsweDAzNDYsIDY0LCB7IDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MWEsIDB4ZTAsIDB4NjAsIDB4MGYsCisgIDB4NTMsIDB4M2UsIDB4ZmUsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2UsIDB4MTIsIDB4MTEsIDB4YjEsIDB4NzUsIDB4MmIsIDB4MDEsIDB4ZDIsIDB4MDcsIDB4OTAsCisgIDB4N2UsIDB4MWIsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4NDMsIDB4M2UsIDB4MDEsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2UsIDB4MTIsIDB4MTEsIDB4YjEsIDB4ZTQsCisgIDB4ZjUsIDB4MmIsIDB4ZDIsIDB4MDcsIDB4OTAsIDB4N2UsIDB4MWMsIDB4ZTAsIDB4NjAsIDB4MGUsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTJ9fSwKKyB7MHgwMzg2LCA2NCwgeyAweGYwLCAweGU1LCAweDQwLCAweDQ0LCAweDAyLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdlLCAweDFkLCAweGUwLCAweDYwLCAweDAyLCAweGQyLCAweDBiLAorICAweDkwLCAweDdlLCAweDFlLCAweGUwLCAweDYwLCAweDA4LCAweDc1LCAweDJjLCAweDAxLCAweGU0LCAweGY1LCAweDM4LCAweGQyLCAweDA3LCAweDkwLCAweDdlLAorICAweDFmLCAweGUwLCAweDYwLCAweDExLCAweDkwLCAweDdmLCAweGQ3LCAweDc0LCAweDExLCAweGYwLCAweDc0LCAweDMxLCAweGYwLCAweDc0LCAweDE1LCAweGYwLAorICAweDc0LCAweDM1LCAweGYwLCAweGQyLCAweDAzLCAweGU0LCAweDkwLCAweDdmLCAweGNmLCAweGYwLCAweDMwLCAweDFhLCAweDUyLCAweGU1LCAweDM4fX0sCisgezB4MDNjNiwgNjQsIHsgMHg2MCwgMHgwMiwgMHgxNSwgMHgzOCwgMHgyMCwgMHgxMywgMHg0OSwgMHhlNSwgMHgxMywgMHhkMywgMHg5NCwgMHgwMCwgMHg0MCwgMHgwNCwgMHgxNSwgMHgxMywgMHg4MCwKKyAgMHgzZSwgMHg3NSwgMHgxMywgMHgwYSwgMHgzMCwgMHgxYiwgMHgwMiwgMHhkMiwgMHgxMywgMHgxMiwgMHgxMiwgMHhkZiwgMHhlZiwgMHg1NCwgMHgwMSwgMHhmNSwKKyAgMHgxOSwgMHg2NSwgMHgyYSwgMHg2MCwgMHgwNSwgMHg4NSwgMHgxOSwgMHgyYSwgMHhkMiwgMHgwNywgMHgxMiwgMHgxMywgMHgzMywgMHhlZiwgMHg1NCwgMHg4MCwKKyAgMHhmNSwgMHgxOSwgMHg2NSwgMHgyNiwgMHg2MCwgMHgwNSwgMHg4NSwgMHgxOSwgMHgyNiwgMHhkMiwgMHgwNywgMHgzMCwgMHgwZCwgMHgxMSwgMHgxMn19LAorIHsweDA0MDYsIDY0LCB7IDB4MTMsIDB4MzMsIDB4ZWYsIDB4NTQsIDB4MTAsIDB4ZjUsIDB4MTksIDB4NjUsIDB4MjUsIDB4NjAsIDB4MDUsIDB4ODUsIDB4MTksIDB4MjUsIDB4ZDIsIDB4MDcsIDB4MjAsCisgIDB4MWIsIDB4MDMsIDB4MDIsIDB4MDcsIDB4ZWMsIDB4MzAsIDB4MGEsIDB4MTgsIDB4MTIsIDB4MTMsIDB4NmYsIDB4ZWYsIDB4YzMsIDB4OTUsIDB4M2QsIDB4NDAsCisgIDB4MDMsIDB4MDIsIDB4MDQsIDB4YWUsIDB4OTAsIDB4N2YsIDB4YzEsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4YzIsIDB4MGEsIDB4YzIsIDB4MDAsIDB4ODAsIDB4NzcsCisgIDB4MzAsIDB4MDQsIDB4M2IsIDB4OTAsIDB4N2YsIDB4Y2EsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4NmQsIDB4MTIsIDB4MTMsIDB4NmYsIDB4ZWYsIDB4YzN9fSwKKyB7MHgwNDQ2LCA2NCwgeyAweDk0LCAweDQwLCAweDUwLCAweDY0LCAweDkwLCAweDdkLCAweDQwLCAweGUwLCAweDEzLCAweDkyLCAweDBhLCAweDkwLCAweDdmLCAweGNiLCAweGUwLCAweDE0LCAweGY1LAorICAweDE5LCAweDIwLCAweDAwLCAweDExLCAweDYwLCAweDBmLCAweGY1LCAweDA4LCAweDdlLCAweDdkLCAweDdmLCAweDQxLCAweDc1LCAweDBjLCAweDdkLCAweDc1LAorICAweDBkLCAweDQxLCAweDEyLCAweDBkLCAweDA0LCAweGMyLCAweDA0LCAweGU0LCAweDkwLCAweDdmLCAweGNiLCAweGYwLCAweDgwLCAweDM5LCAweDkwLCAweDdmLAorICAweGNjLCAweGUwLCAweDIwLCAweGUxLCAweDMyLCAweDEyLCAweDEzLCAweDZmLCAweGVmLCAweGMzLCAweDk0LCAweDQwLCAweDUwLCAweDI5LCAweDkwfX0sCisgezB4MDQ4NiwgNjQsIHsgMHg3YywgMHhjMCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhjZCwgMHhlMCwgMHgxNCwgMHhmNSwgMHgxOSwgMHgyMCwgMHgwMCwgMHgxMSwgMHg2MCwKKyAgMHgwZiwgMHhmNSwgMHgwOCwgMHg3ZSwgMHg3YywgMHg3ZiwgMHhjMSwgMHg3NSwgMHgwYywgMHg3YywgMHg3NSwgMHgwZCwgMHhjMSwgMHgxMiwgMHgwZCwgMHgwNCwKKyAgMHhkMiwgMHgwNCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjZCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiYSwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwNSwKKyAgMHgzNiwgMHgxMiwgMHgxMiwgMHgyMCwgMHg4ZiwgMHgxOSwgMHgxMiwgMHgxMywgMHg3YiwgMHg4ZiwgMHgzNywgMHhlNSwgMHgxOSwgMHhjMywgMHg5NX19LAorIHsweDA0YzYsIDY0LCB7IDB4M2IsIDB4NTAsIDB4MGYsIDB4MTIsIDB4MTMsIDB4NTcsIDB4ZWYsIDB4MzAsIDB4ZTAsIDB4MDgsIDB4ZTUsIDB4MzcsIDB4MjAsIDB4ZTcsIDB4MDMsIDB4MzAsIDB4MGMsCisgIDB4NWUsIDB4YzIsIDB4MGMsIDB4ZTUsIDB4MTksIDB4NjAsIDB4NTgsIDB4YjQsIDB4ODAsIDB4MDMsIDB4NDMsIDB4MzcsIDB4MDIsIDB4ZTUsIDB4MzcsIDB4MzAsCisgIDB4ZTcsIDB4MjYsIDB4ZTUsIDB4MTksIDB4ZDMsIDB4OTQsIDB4MjAsIDB4NDAsIDB4MDMsIDB4NzUsIDB4MTksIDB4MjAsIDB4ODUsIDB4MTksIDB4MDgsIDB4N2UsCisgIDB4N2QsIDB4N2YsIDB4ODAsIDB4NzUsIDB4MGMsIDB4N2QsIDB4NzUsIDB4MGQsIDB4ODAsIDB4YWYsIDB4MzcsIDB4MTIsIDB4MGYsIDB4ODQsIDB4ZTV9fSwKKyB7MHgwNTA2LCA2NCwgeyAweDE5LCAweDI1LCAweGUwLCAweDkwLCAweDdmLCAweGJiLCAweGYwLCAweDgwLCAweDI3LCAweGU1LCAweDE5LCAweGQzLCAweDk0LCAweDNmLCAweDQwLCAweDAzLCAweDc1LAorICAweDE5LCAweDNmLCAweDg1LCAweDE5LCAweDA4LCAweDkwLCAweDdkLCAweDgwLCAweGU1LCAweDM3LCAweGYwLCAweDdlLCAweDdkLCAweDdmLCAweDgxLCAweDc1LAorICAweDBjLCAweDdkLCAweDc1LCAweDBkLCAweDgxLCAweDEyLCAweDBkLCAweDI5LCAweGU1LCAweDE5LCAweDA0LCAweDkwLCAweDdmLCAweGJiLCAweGYwLCAweDkwLAorICAweDdmLCAweGQwLCAweGUwLCAweDMwLCAweGUxLCAweDA2LCAweDIwLCAweDA2LCAweDAzLCAweDAyLCAweDA3LCAweDk3LCAweGMyLCAweDA2LCAweGU0fX0sCisgezB4MDU0NiwgNjQsIHsgMHhmNSwgMHgxOCwgMHg3NCwgMHhjMCwgMHgyNSwgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgxOCwKKyAgMHg3YywgMHgwMCwgMHg3YiwgMHgwMSwgMHg3YSwgMHg3ZSwgMHg3OSwgMHgyMCwgMHgyNCwgMHgyMCwgMHhmOSwgMHhlYywgMHgzNCwgMHg3ZSwgMHhmYSwgMHhlZiwKKyAgMHgxMiwgMHgwZSwgMHhkMiwgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgyMCwgMHhkNywgMHg5MCwgMHg3ZSwgMHgyMCwgMHhlMCwgMHg2MCwgMHg2OCwKKyAgMHg5MCwgMHg3ZSwgMHgyMywgMHhlMCwgMHg2MCwgMHgyNCwgMHg3ZiwgMHgwMSwgMHhlNCwgMHhmZCwgMHgxMiwgMHgxMSwgMHhmYiwgMHg3ZiwgMHgwM319LAorIHsweDA1ODYsIDY0LCB7IDB4N2QsIDB4Y2QsIDB4MTIsIDB4MTEsIDB4ZmIsIDB4NDMsIDB4NDcsIDB4ODAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4ZTUsIDB4NDcsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2UsIDB4MzMsIDB4ZjAsIDB4ODAsIDB4MzAsIDB4OTAsIDB4N2UsIDB4MjEsIDB4ZTAsIDB4ZmYsIDB4MTIsCisgIDB4MTEsIDB4MTksIDB4OTAsIDB4N2UsIDB4MjIsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTEsIDB4M2YsIDB4N2YsIDB4MDEsIDB4OTAsIDB4N2UsIDB4MzEsIDB4ZTAsCisgIDB4ZmQsIDB4MTIsIDB4MTEsIDB4ZmIsIDB4N2YsIDB4MDMsIDB4N2QsIDB4MDcsIDB4MTIsIDB4MTEsIDB4ZmIsIDB4NDMsIDB4NDcsIDB4ODAsIDB4OTB9fSwKKyB7MHgwNWM2LCA2NCwgeyAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ3LCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBhLCAweGYwLAorICAweGU1LCAweDQxLCAweDQ0LCAweDA2LCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdlLCAweDIzLCAweGUwLCAweDcwLCAweDA2LCAweDkwLCAweDdlLAorICAweDMzLCAweGUwLCAweDcwLCAweDA4LCAweGU0LCAweDkwLCAweDdlLCAweDMzLCAweGYwLCAweDc1LCAweDJlLCAweGZmLCAweDkwLCAweDdlLCAweDI1LCAweGUwLAorICAweDYwLCAweDEyLCAweGEzLCAweGUwLCAweDU0LCAweDNmLCAweGY1LCAweDQ1LCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweDkwfX0sCisgezB4MDYwNiwgNjQsIHsgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NSwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgyNywgMHhlMCwgMHg2MCwgMHgyYiwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0MywKKyAgMHg4MCwgMHg4MCwgMHgwMywgMHg1MywgMHg0MywgMHg3ZiwgMHg1MywgMHg0MywgMHhmYywgMHg5MCwgMHg3ZSwgMHgyOSwgMHhlMCwgMHg2MCwgMHgxMSwgMHg0MywKKyAgMHg0MywgMHgwMiwgMHhhMywgMHhlMCwgMHhmZiwgMHgxMiwgMHgxMSwgMHg2NSwgMHg5MCwgMHg3ZSwgMHgyYiwgMHhlMCwgMHhmZiwgMHgxMiwgMHgxMSwgMHg4YiwKKyAgMHhhZiwgMHg0MywgMHgxMiwgMHgxMCwgMHhmMywgMHg5MCwgMHg3ZSwgMHgyMywgMHhlMCwgMHg2MCwgMHgwOCwgMHg1MywgMHg0MywgMHg3ZiwgMHhhZn19LAorIHsweDA2NDYsIDY0LCB7IDB4NDMsIDB4MTIsIDB4MTAsIDB4ZjMsIDB4OTAsIDB4N2UsIDB4MmMsIDB4ZTAsIDB4NjAsIDB4MTgsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDcsIDB4MDIsCisgIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDcsIDB4ZmQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDcsCisgIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MmUsIDB4ZTAsIDB4NjAsIDB4MTgsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDcsIDB4MDEsIDB4ODAsIDB4MDMsCisgIDB4NTMsIDB4NDcsIDB4ZmUsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDcsIDB4ZjB9fSwKKyB7MHgwNjg2LCA2NCwgeyAweDkwLCAweDdlLCAweDMyLCAweGUwLCAweGY1LCAweDNiLCAweGEzLCAweGUwLCAweDEzLCAweDkyLCAweDBlLCAweGEzLCAweGUwLCAweGY1LCAweDNkLCAweGEzLCAweGUwLAorICAweDYwLCAweDA1LCAweDQzLCAweDQ3LCAweDEwLCAweDgwLCAweDAzLCAweDUzLCAweDQ3LCAweGVmLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLAorICAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ3LCAweGYwLCAweDkwLCAweDdlLCAweDM2LCAweGUwLCAweDYwLCAweDMyLCAweDUzLCAweDQ1LCAweGJmLCAweDkwLAorICAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdmfX0sCisgezB4MDZjNiwgNjQsIHsgMHg5OCwgMHg3NCwgMHgwOSwgMHhmMCwgMHgxMiwgMHgxMywgMHg0YiwgMHhlZiwgMHg1NCwgMHhmZSwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg1MywgMHgzZiwgMHhmZCwKKyAgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZiwgMHgxMiwgMHgxMSwgMHhmYiwgMHhlNCwgMHhmNSwgMHgzMywgMHhmNSwgMHgzMiwgMHhkMiwgMHgwOCwgMHg5MCwgMHg3ZSwKKyAgMHgzNywgMHhlMCwgMHg2MCwgMHgwZiwgMHg0MywgMHgzZiwgMHgwMiwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZiwgMHgxMiwgMHgxMSwgMHhmYiwgMHg3NSwgMHgzMiwKKyAgMHgwMSwgMHhkMiwgMHgwOCwgMHg5MCwgMHg3ZSwgMHgzOCwgMHhlMCwgMHg2MCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYSwgMHhmMH19LAorIHsweDA3MDYsIDY0LCB7IDB4ZTUsIDB4NDEsIDB4NDQsIDB4MDQsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZDIsIDB4MDAsIDB4OTAsIDB4N2UsIDB4MzksIDB4ZTAsIDB4NjAsIDB4MTEsIDB4NDMsCisgIDB4NDUsIDB4NDAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsCisgIDB4OTAsIDB4N2UsIDB4M2EsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4NTMsIDB4M2YsIDB4ZmUsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2YsIDB4MTIsIDB4MTEsIDB4ZmIsCisgIDB4NzUsIDB4MzQsIDB4MDEsIDB4ZDIsIDB4MDgsIDB4OTAsIDB4N2UsIDB4M2IsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4NDMsIDB4M2YsIDB4MDEsIDB4ZTR9fSwKKyB7MHgwNzQ2LCA2NCwgeyAweGZmLCAweGFkLCAweDNmLCAweDEyLCAweDExLCAweGZiLCAweGU0LCAweGY1LCAweDM0LCAweGQyLCAweDA4LCAweDkwLCAweDdlLCAweDNjLCAweGUwLCAweDYwLCAweDBlLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBhLCAweGYwLCAweGU1LCAweDQxLCAweDQ0LCAweDAyLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdlLAorICAweDNkLCAweGUwLCAweDYwLCAweDAyLCAweGQyLCAweDBjLCAweDkwLCAweDdlLCAweDNlLCAweGUwLCAweDYwLCAweDA4LCAweDc1LCAweDM1LCAweDAxLCAweGU0LAorICAweGY1LCAweDM5LCAweGQyLCAweDA4LCAweDkwLCAweDdlLCAweDNmLCAweGUwLCAweDYwLCAweDExLCAweDkwLCAweDdmLCAweGQ3LCAweDc0LCAweDEzfX0sCisgezB4MDc4NiwgNjQsIHsgMHhmMCwgMHg3NCwgMHgzMywgMHhmMCwgMHg3NCwgMHgxNiwgMHhmMCwgMHg3NCwgMHgzNiwgMHhmMCwgMHhkMiwgMHgwNCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhkMSwgMHhmMCwKKyAgMHgzMCwgMHgxYSwgMHg1MiwgMHhlNSwgMHgzOSwgMHg2MCwgMHgwMiwgMHgxNSwgMHgzOSwgMHgzMCwgMHgxMywgMHg0OSwgMHhlNSwgMHgxMywgMHhkMywgMHg5NCwKKyAgMHgwMCwgMHg0MCwgMHgwNCwgMHgxNSwgMHgxMywgMHg4MCwgMHgzZSwgMHg3NSwgMHgxMywgMHgwYSwgMHgzMCwgMHgxYiwgMHgwMiwgMHhjMiwgMHgxMywgMHgxMiwKKyAgMHgxMywgMHg0YiwgMHhlZiwgMHg1NCwgMHgwMSwgMHhmNSwgMHgxOSwgMHg2NSwgMHgzMywgMHg2MCwgMHgwNSwgMHg4NSwgMHgxOSwgMHgzMywgMHhkMn19LAorIHsweDA3YzYsIDY0LCB7IDB4MDgsIDB4MTIsIDB4MTMsIDB4ODcsIDB4ZWYsIDB4NTQsIDB4ODAsIDB4ZjUsIDB4MTksIDB4NjUsIDB4MmYsIDB4NjAsIDB4MDUsIDB4ODUsIDB4MTksIDB4MmYsIDB4ZDIsCisgIDB4MDgsIDB4MzAsIDB4MGUsIDB4MTEsIDB4MTIsIDB4MTMsIDB4ODcsIDB4ZWYsIDB4NTQsIDB4MTAsIDB4ZjUsIDB4MTksIDB4NjUsIDB4MmUsIDB4NjAsIDB4MDUsCisgIDB4ODUsIDB4MTksIDB4MmUsIDB4ZDIsIDB4MDgsIDB4MzAsIDB4MWEsIDB4MmEsIDB4OTAsIDB4N2YsIDB4ZDIsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MjMsIDB4OTAsCisgIDB4N2IsIDB4NDAsIDB4ZTAsIDB4NjAsIDB4MDksIDB4ZTAsIDB4ZjUsIDB4MTUsIDB4OTAsIDB4N2IsIDB4NDIsIDB4ZTAsIDB4ZjUsIDB4MTYsIDB4OTB9fSwKKyB7MHgwODA2LCA2NCwgeyAweDdiLCAweDQxLCAweGUwLCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweGQ3LCAweDc0LCAweDE3LCAweGYwLCAweDc0LCAweDM3LCAweGYwLCAweGU0LCAweDkwLCAweDdmLAorICAweGQzLCAweGYwLCAweDkwLCAweDdmLCAweGMyLCAweGUwLCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDA5LCAweDIwLCAweGU1LCAweDBhLCAweDcwLCAweDQwLAorICAweDMwLCAweDA3LCAweDM5LCAweGU1LCAweDM4LCAweDcwLCAweDM1LCAweGMyLCAweDA3LCAweGY1LCAweDE4LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LAorICAweDI0LCAweDI1LCAweDE4LCAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhLCAweDEyLCAweDBlLCAweDhjLCAweGZmLCAweDc0LCAweDgwLCAweDI1fX0sCisgezB4MDg0NiwgNjQsIHsgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwOSwgMHhkYiwKKyAgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwOSwgMHhmMCwgMHg3NSwgMHgzOCwgMHgxMCwgMHhlNCwgMHhmNSwgMHgyYywgMHg3NSwgMHgwYSwgMHgwMSwgMHgyMiwKKyAgMHhlNSwgMHgwYSwgMHg2NCwgMHgwMSwgMHg3MCwgMHg0MCwgMHgzMCwgMHgwOCwgMHgzOSwgMHhlNSwgMHgzOSwgMHg3MCwgMHgzNSwgMHhjMiwgMHgwOCwgMHhmNSwKKyAgMHgxOCwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwgMHgyZCwgMHgyNSwgMHgxOCwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMn19LAorIHsweDA4ODYsIDY0LCB7IDB4MGUsIDB4OGMsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjUsIDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsCisgIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MDksIDB4ZGIsIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MDksIDB4ZjAsIDB4NzUsIDB4MzksIDB4MTAsIDB4ZTQsCisgIDB4ZjUsIDB4MzUsIDB4NzUsIDB4MGEsIDB4MDIsIDB4MjIsIDB4ZTUsIDB4MGEsIDB4NjQsIDB4MDIsIDB4NzAsIDB4MzYsIDB4MzAsIDB4MTQsIDB4MmYsIDB4YzIsCisgIDB4MTQsIDB4ZjUsIDB4MTgsIDB4N2UsIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MGUsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDB9fSwKKyB7MHgwOGM2LCA2NCwgeyAweGZhLCAweDEyLCAweDBlLCAweDhjLCAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLAorICAweGYwLCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDA1LCAweGRiLCAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDA1LCAweGYwLCAweDc1LCAweDBhLAorICAweDAzLCAweDIyLCAweGU1LCAweDE1LCAweDYwLCAweDMwLCAweDE1LCAweDE1LCAweGU0LCAweGY1LCAweDE4LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LAorICAweDE0LCAweDI1LCAweDE4LCAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhLCAweDEyLCAweDBlLCAweDhjLCAweGZmLCAweDc0LCAweDgwLCAweDI1fX0sCisgezB4MDkwNiwgNjQsIHsgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwMywgMHhkYiwKKyAgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwMywgMHhmMCwgMHhlNCwgMHhmNSwgMHgwYSwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhlOSwgMHhlMCwgMHgxMiwgMHgwZSwKKyAgMHhlNCwgMHgwYSwgMHgwOCwgMHgwMCwgMHgwYSwgMHg3YywgMHgwMSwgMHgwYSwgMHhlOCwgMHgwMywgMHgwOSwgMHg0NCwgMHgwNiwgMHgwOSwgMHhmYiwgMHgwOCwKKyAgMHgwOSwgMHhmNSwgMHgwOSwgMHgwOSwgMHhkZCwgMHgwYSwgMHgwOSwgMHhlYywgMHgwYiwgMHgwMCwgMHgwMCwgMHgwYiwgMHgzNywgMHg5MCwgMHg3Zn19LAorIHsweDA5NDYsIDY0LCB7IDB4ZWIsIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTksIDB4MTQsIDB4NjAsIDB4NjEsIDB4MjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MDksIDB4ZDMsIDB4NzQsCisgIDB4MTksIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4NzQsIDB4MDAsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsCisgIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MDQsIDB4N2YsIDB4MDIsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDMsIDB4NzUsIDB4ODIsIDB4ODIsIDB4NzUsIDB4ODMsIDB4MTksCisgIDB4ZWYsIDB4ZjAsIDB4NzUsIDB4ODIsIDB4N2IsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4NzUsIDB4ODIsIDB4NzQsIDB4NzUsIDB4ODMsIDB4MTl9fSwKKyB7MHgwOTg2LCA2NCwgeyAweGYwLCAweDc1LCAweDgyLCAweDY2LCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDc1LCAweDgyLCAweDU4LCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDkwLCAweDdmLAorICAweGVhLCAweGUwLCAweDA0LCAweDc1LCAweDgyLCAweDE3LCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDc0LCAweDE5LCAweDkwLCAweDdmLCAweGQ0LCAweGYwLAorICAweDc0LCAweDEyLCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGZmLCAweDEyLCAweDBmLAorICAweDBhLCAweGVhLCAweDQ5LCAweDYwLCAweDBkLCAweGVhLCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweGU5LCAweDkwLCAweDdmLCAweGQ1LCAweGYwfX0sCisgezB4MDljNiwgNjQsIHsgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwKKyAgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhlNSwgMHgwOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwKKyAgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmNSwgMHgwOSwgMHgwMiwgMHgwYiwgMHgzZSwgMHgxMiwgMHgwYiwKKyAgMHg0NiwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHgwMCwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHhmMCwgMHgwMn19LAorIHsweDBhMDYsIDY0LCB7IDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4N2YsIDB4NjAsIDB4MjQsIDB4MTQsIDB4NjAsIDB4MzEsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NWIsCisgIDB4YTIsIDB4MTAsIDB4ZTQsIDB4MzMsIDB4ZmYsIDB4MjUsIDB4ZTAsIDB4ZmYsIDB4YTIsIDB4MTYsIDB4ZTQsIDB4MzMsIDB4NGYsIDB4OTAsIDB4N2YsIDB4MDAsCisgIDB4ZjAsIDB4ZTQsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4ZTQsIDB4OTAsIDB4N2YsCisgIDB4MDAsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwYTQ2LCA2NCwgeyAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LAorICAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZkLCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGU0LAorICAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LAorICAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDFkLCAweDI0LCAweDAyfX0sCisgezB4MGE4NiwgNjQsIHsgMHg2MCwgMHgwMywgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhiNCwgMHgwMSwgMHgwNSwgMHhjMiwgMHgxMCwgMHgwMiwgMHgwYiwgMHgzZSwKKyAgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgzOCwKKyAgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwKKyAgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHg5MCwgMHg3Zn19LAorIHsweDBhYzYsIDY0LCB7IDB4ZWMsIDB4ZTAsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4MTMsIDB4MTMsIDB4MTMsIDB4NTQsIDB4MWYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4OTAsIDB4N2YsCisgIDB4ZDcsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4ODAsIDB4NWYsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsCisgIDB4NTYsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTgsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NGEsIDB4OTAsIDB4N2YsIDB4ZWEsCisgIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDQsIDB4ZDIsIDB4MTAsIDB4ODAsIDB4M2YsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjB9fSwKKyB7MHgwYjA2LCA2NCwgeyAweDgwLCAweDM2LCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDIwLCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LAorICAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLAorICAweGY1LCAweDgzLCAweDc0LCAweDAxLCAweGYwLCAweDgwLCAweDEwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDA3LAorICAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDIyfX0sCisgezB4MGI0NiwgNjQsIHsgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5MywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHg3NCwgMHgzMCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHg5NSwgMHg3NCwgMHhjMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHg3NCwgMHgzZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxOCwKKyAgMHhmMCwgMHhlNCwgMHhmNSwgMHg4ZSwgMHg5MCwgMHg3ZiwgMHhkZiwgMHg3NCwgMHhmZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZSwgMHhmMCwgMHhlNCwgMHhmNSwKKyAgMHgyNCwgMHg3NSwgMHgxOCwgMHgwMSwgMHg3YiwgMHgwMCwgMHg3NCwgMHgyNCwgMHgyNSwgMHgxOCwgMHhmOSwgMHhlNCwgMHgzNCwgMHgwMCwgMHhmYX19LAorIHsweDBiODYsIDY0LCB7IDB4ZTQsIDB4MTIsIDB4MGUsIDB4ZDIsIDB4MDUsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MDksIDB4ZWEsIDB4NzUsIDB4M2EsIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4MzgsCisgIDB4ZjUsIDB4MTMsIDB4ZjUsIDB4MzYsIDB4YzIsIDB4MDcsIDB4YzIsIDB4MGIsIDB4YzIsIDB4MDUsIDB4YzIsIDB4MDAsIDB4YzIsIDB4MDksIDB4YzIsIDB4MTMsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4NzUsIDB4NDQsIDB4MDMsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4N2YsCisgIDB4MGMsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4YjEsIDB4N2YsIDB4MTAsIDB4OGYsIDB4NDIsIDB4MTIsIDB4MTAsIDB4ODEsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwYmM2LCA2NCwgeyAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweDdmLCAweDAxLCAweDhmLCAweDQwLCAweGVmLCAweDQ0LCAweDA2LCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDc1LCAweDQ2LCAweDgwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweDgwLCAweGYwLCAweDBmLCAweGU0LCAweGZkLAorICAweDEyLCAweDExLCAweGIxLCAweGU0LCAweGZmLCAweDdlLCAweGEzLCAweGFkLCAweDA2LCAweDhkLCAweDNlLCAweDEyLCAweDExLCAweGIxLCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU0LCAweGYwLCAweDdmLCAweDA1LCAweDdkLCAweDdmLCAweDEyLCAweDExfX0sCisgezB4MGMwNiwgNjQsIHsgMHhiMSwgMHg3ZiwgMHgwMSwgMHgxMiwgMHgxMiwgMHg2YSwgMHg3ZiwgMHgwMywgMHg3ZCwgMHgwNywgMHgxMiwgMHgxMSwgMHhiMSwgMHgyMCwgMHgxYiwgMHgwMywgMHgwMiwKKyAgMHgwYywgMHhiNywgMHg3NSwgMHgyZCwgMHgwMSwgMHg3NSwgMHgxOCwgMHgwMSwgMHg3YiwgMHgwMCwgMHg3NCwgMHgyZCwgMHgyNSwgMHgxOCwgMHhmOSwgMHhlNCwKKyAgMHgzNCwgMHgwMCwgMHhmYSwgMHhlNCwgMHgxMiwgMHgwZSwgMHhkMiwgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwOSwgMHhlYSwgMHg3NSwgMHgzYiwKKyAgMHgwMSwgMHhlNCwgMHhmNSwgMHgzOSwgMHhmNSwgMHgxMywgMHhmNSwgMHgzNywgMHhjMiwgMHgwOCwgMHhjMiwgMHgwYywgMHhjMiwgMHgwNiwgMHhjMn19LAorIHsweDBjNDYsIDY0LCB7IDB4MDAsIDB4YzIsIDB4MGEsIDB4YzIsIDB4MTMsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4NzUsIDB4NDUsIDB4MDMsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4NzQsIDB4MDMsIDB4ZjAsIDB4N2YsIDB4MGMsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4ZmIsIDB4N2YsIDB4MTAsIDB4OGYsIDB4NDMsIDB4MTIsIDB4MTAsCisgIDB4ZjMsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4N2YsIDB4MDEsIDB4OGYsIDB4NDEsIDB4ZWYsIDB4NDQsIDB4MDYsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4NzUsIDB4NDcsIDB4ODAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzR9fSwKKyB7MHgwYzg2LCA2NCwgeyAweDgwLCAweGYwLCAweDBmLCAweGU0LCAweGZkLCAweDEyLCAweDExLCAweGZiLCAweGU0LCAweGZmLCAweDdlLCAweGEzLCAweGFkLCAweDA2LCAweDhkLCAweDNmLCAweDEyLAorICAweDExLCAweGZiLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDA5LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU0LCAweGYwLCAweDdmLCAweDA1LCAweDdkLAorICAweDdmLCAweDEyLCAweDExLCAweGZiLCAweDdmLCAweDAxLCAweDEyLCAweDEyLCAweDhiLCAweDdmLCAweDAzLCAweDdkLCAweDA3LCAweDEyLCAweDExLCAweGZiLAorICAweGQyLCAweDEyLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweGFmLCAweDA4LCAweGU1LCAweDBkLCAweGY1LCAweDgyfX0sCisgezB4MGNjNiwgNjQsIHsgMHhlNSwgMHgwYywgMHhmNSwgMHg4MywgMHhjMiwgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwgMHhjMCwgMHgwMCwgMHgwNSwgMHg4NiwgMHhlMCwgMHhhMywgMHgwNSwgMHg4NiwKKyAgMHhmMCwgMHgwNSwgMHg4NiwgMHhkZiwgMHhmNywgMHhkMiwgMHhhZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMCwgMHhmMCwgMHhhZiwgMHgwOCwKKyAgMHhlNSwgMHgwZCwgMHhmNSwgMHg4MiwgMHhlNSwgMHgwYywgMHhmNSwgMHg4MywgMHhjMiwgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwKKyAgMHgwNSwgMHg4NiwgMHhmMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhkZiwgMHhmNywgMHgwNSwgMHg4NiwgMHhkMiwgMHhhZiwgMHgyMiwgMHg5MCwgMHg3Zn19LAorIHsweDBkMDYsIDY0LCB7IDB4OTgsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4YWYsIDB4MDgsIDB4ZTUsIDB4MGQsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MGMsIDB4ZjUsIDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsCisgIDB4ODYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4MDUsIDB4ODYsIDB4ZTAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4ZjAsIDB4MDUsIDB4ODYsIDB4ZGYsIDB4ZjcsIDB4ZDIsCisgIDB4YWYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4YWYsIDB4MDgsIDB4ZTUsIDB4MGQsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MGMsCisgIDB4ZjUsIDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsIDB4ODYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4MDUsIDB4ODYsIDB4ZjAsIDB4YTMsIDB4MDV9fSwKKyB7MHgwZDQ2LCA2NCwgeyAweDg2LCAweGRmLCAweGY3LCAweDA1LCAweDg2LCAweGQyLCAweGFmLCAweDIyLCAweDc0LCAweDAwLCAweGY1LCAweDg2LCAweDkwLCAweGZkLCAweGE1LCAweDdjLCAweDA1LAorICAweGEzLCAweGU1LCAweDgyLCAweDQ1LCAweDgzLCAweDcwLCAweGY5LCAweDIyLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweDQzLAorICAweDg3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIyLCAweGQyLCAweDE5LCAweDkwLCAweDdmLCAweDkyLCAweGUwLCAweDQ0LCAweDAyLAorICAweGYwLCAweDkwLCAweDdmLCAweGFlLCAweGUwLCAweGZmLCAweGQzLCAweDkyLCAweDEwLCAweGU0LCAweDMzLCAweGZlLCAweGVmLCAweDRlLCAweGYwfX0sCisgezB4MGQ4NiwgNjQsIHsgMHhkMiwgMHhlOCwgMHg0MywgMHhkOCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhkZSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZiwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHhhYiwgMHg3NCwgMHhmZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYSwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwKKyAgMHg3ZiwgMHhhZiwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZSwgMHhlMCwgMHg0NCwgMHgwZCwgMHhmMCwgMHhkMiwgMHhhZiwgMHhkMiwKKyAgMHgxYSwgMHgxMiwgMHgxMiwgMHg0NSwgMHhjMiwgMHgxMSwgMHhlNCwgMHhmNSwgMHgwYiwgMHhmNSwgMHgxMywgMHhjMiwgMHgxNywgMHhjMiwgMHgxMn19LAorIHsweDBkYzYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4YTEsIDB4MDQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZDgsIDB4ZTAsIDB4NjUsIDB4MTcsIDB4NjAsIDB4MTAsIDB4MzAsIDB4MTIsIDB4MDUsIDB4ZDIsCisgIDB4MWEsIDB4MTIsIDB4MDAsIDB4NDYsIDB4OTAsIDB4N2YsIDB4ZDgsIDB4ZTAsIDB4ZjUsIDB4MTcsIDB4ODAsIDB4MDgsIDB4MzAsIDB4MTIsIDB4MDUsIDB4YzIsCisgIDB4MWEsIDB4MTIsIDB4MDAsIDB4NDYsIDB4MzAsIDB4MTEsIDB4MDcsIDB4YzIsIDB4MTEsIDB4MTIsIDB4MDksIDB4MjEsIDB4ODAsIDB4ZDYsIDB4MzAsIDB4MTgsCisgIDB4ZDMsIDB4YzIsIDB4MTgsIDB4MTIsIDB4MTMsIDB4OTMsIDB4ODAsIDB4Y2MsIDB4MjIsIDB4NzgsIDB4N2YsIDB4ZTQsIDB4ZjYsIDB4ZDgsIDB4ZmR9fSwKKyB7MHgwZTA2LCA2NCwgeyAweDc1LCAweDgxLCAweDQ3LCAweDAyLCAweDBlLCAweDQ3LCAweDAyLCAweDBkLCAweDZmLCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweGU0LCAweDkzLCAweGEzLCAweDQwLAorICAweDAzLCAweGY2LCAweDgwLCAweDAxLCAweGYyLCAweDA4LCAweGRmLCAweGY0LCAweDgwLCAweDI5LCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweDU0LCAweDA3LAorICAweDI0LCAweDBjLCAweGM4LCAweGMzLCAweDMzLCAweGM0LCAweDU0LCAweDBmLCAweDQ0LCAweDIwLCAweGM4LCAweDgzLCAweDQwLCAweDA0LCAweGY0LCAweDU2LAorICAweDgwLCAweDAxLCAweDQ2LCAweGY2LCAweGRmLCAweGU0LCAweDgwLCAweDBiLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwfX0sCisgezB4MGU0NiwgNjQsIHsgMHg4MCwgMHg5MCwgMHgxMiwgMHhhYywgMHhlNCwgMHg3ZSwgMHgwMSwgMHg5MywgMHg2MCwgMHhiYywgMHhhMywgMHhmZiwgMHg1NCwgMHgzZiwgMHgzMCwgMHhlNSwgMHgwOSwKKyAgMHg1NCwgMHgxZiwgMHhmZSwgMHhlNCwgMHg5MywgMHhhMywgMHg2MCwgMHgwMSwgMHgwZSwgMHhjZiwgMHg1NCwgMHhjMCwgMHgyNSwgMHhlMCwgMHg2MCwgMHhhOCwKKyAgMHg0MCwgMHhiOCwgMHhlNCwgMHg5MywgMHhhMywgMHhmYSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwgMHg5MywgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwKKyAgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhmMCwgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYX19LAorIHsweDBlODYsIDY0LCB7IDB4ZGYsIDB4ZTksIDB4ZGUsIDB4ZTcsIDB4ODAsIDB4YmUsIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDIsCisgIDB4ZTcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDIsIDB4ZTMsIDB4MjIsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjIsIDB4YmIsIDB4MDEsCisgIDB4MGMsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDYsIDB4ZTksCisgIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4MjIsIDB4ZTV9fSwKKyB7MHgwZWM2LCA2NCwgeyAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGU0LCAweDkzLCAweDIyLCAweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLAorICAweDhhLCAweDgzLCAweGYwLCAweDIyLCAweDUwLCAweDAyLCAweGY3LCAweDIyLCAweGJiLCAweGZlLCAweDAxLCAweGYzLCAweDIyLCAweGQwLCAweDgzLCAweGQwLAorICAweDgyLCAweGY4LCAweGU0LCAweDkzLCAweDcwLCAweDEyLCAweDc0LCAweDAxLCAweDkzLCAweDcwLCAweDBkLCAweGEzLCAweGEzLCAweDkzLCAweGY4LCAweDc0LAorICAweDAxLCAweDkzLCAweGY1LCAweDgyLCAweDg4LCAweDgzLCAweGU0LCAweDczLCAweDc0LCAweDAyLCAweDkzLCAweDY4LCAweDYwLCAweGVmLCAweGEzfX0sCisgezB4MGYwNiwgNjQsIHsgMHhhMywgMHhhMywgMHg4MCwgMHhkZiwgMHg4ZiwgMHgxOCwgMHhlNCwgMHhmNSwgMHgxOSwgMHg3NSwgMHgxYSwgMHhmZiwgMHg3NSwgMHgxYiwgMHgxOSwgMHg3NSwgMHgxYywKKyAgMHg4NiwgMHhhYiwgMHgxYSwgMHhhYSwgMHgxYiwgMHhhOSwgMHgxYywgMHg5MCwgMHgwMCwgMHgwMSwgMHgxMiwgMHgwZSwgMHhhNSwgMHhiNCwgMHgwMywgMHgxZCwKKyAgMHhhZiwgMHgxOSwgMHgwNSwgMHgxOSwgMHhlZiwgMHhiNSwgMHgxOCwgMHgwMSwgMHgyMiwgMHgxMiwgMHgwZSwgMHg4YywgMHg3ZSwgMHgwMCwgMHgyOSwgMHhmZiwKKyAgMHhlZSwgMHgzYSwgMHhhOSwgMHgwNywgMHg3NSwgMHgxYSwgMHhmZiwgMHhmNSwgMHgxYiwgMHg4OSwgMHgxYywgMHg4MCwgMHhkNCwgMHg3YiwgMHgwMH19LAorIHsweDBmNDYsIDY0LCB7IDB4N2EsIDB4MDAsIDB4NzksIDB4MDAsIDB4MjIsIDB4OGYsIDB4MWEsIDB4MDUsIDB4MGQsIDB4ZTUsIDB4MGQsIDB4YWUsIDB4MGMsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MGMsCisgIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTUsIDB4MWEsIDB4ZjAsIDB4MTIsIDB4MDAsIDB4MzYsIDB4MDUsIDB4MGQsIDB4ZTUsIDB4MGQsIDB4YWMsCisgIDB4MGMsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MGMsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MTUsIDB4MDgsIDB4ZTUsIDB4MDgsCisgIDB4NjAsIDB4MGEsIDB4MTIsIDB4MTMsIDB4MjcsIDB4OGYsIDB4MWEsIDB4ZWYsIDB4NDIsIDB4MzYsIDB4ODAsIDB4Y2EsIDB4MjIsIDB4OGYsIDB4MWF9fSwKKyB7MHgwZjg2LCA2NCwgeyAweDA1LCAweDBkLCAweGU1LCAweDBkLCAweGFlLCAweDBjLCAweDcwLCAweDAyLCAweDA1LCAweDBjLCAweDE0LCAweGY1LCAweDgyLCAweDhlLCAweDgzLCAweGU1LCAweDFhLAorICAweGYwLCAweDEyLCAweDEzLCAweDNmLCAweDA1LCAweDBkLCAweGU1LCAweDBkLCAweGFjLCAweDBjLCAweDcwLCAweDAyLCAweDA1LCAweDBjLCAweDE0LCAweGY1LAorICAweDgyLCAweDhjLCAweDgzLCAweGVmLCAweGYwLCAweDE1LCAweDA4LCAweGU1LCAweDA4LCAweDYwLCAweDBhLCAweDEyLCAweDEzLCAweDdiLCAweDhmLCAweDFhLAorICAweGVmLCAweDQyLCAweDM3LCAweDgwLCAweGNhLCAweDIyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwfX0sCisgezB4MGZjNiwgNjQsIHsgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhjNCwgMHhlNCwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwKKyAgMHg3NCwgMHgwNCwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwKKyAgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhkMiwKKyAgMHgxMSwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMH19LAorIHsweDEwMDYsIDY0LCB7IDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsCisgIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4ZDIsIDB4MTgsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDgsCisgIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTB9fSwKKyB7MHgxMDQ2LCA2NCwgeyAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLAorICAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLAorICAweGYwLCAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzfX0sCisgezB4MTA4NiwgNjQsIHsgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwKKyAgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwKKyAgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHg0NH19LAorIHsweDEwYzYsIDY0LCB7IDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsCisgIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTYsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsCisgIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsCisgIDB4MGIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4OTB9fSwKKyB7MHgxMTA2LCA2NCwgeyAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLAorICAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDA4LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LAorICAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweDkwfX0sCisgezB4MTE0NiwgNjQsIHsgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwKKyAgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3Zn19LAorIHsweDExODYsIDY0LCB7IDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGUsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsCisgIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsCisgIDB4ZTUsIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTcsIDB4ZjAsIDB4OTB9fSwKKyB7MHgxMWM2LCA2NCwgeyAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE1LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVkLCAweGYwLCAweDIyLCAweDEyLAorICAweDEzLCAweDBmLCAweDhmLCAweDFhLCAweDEyLCAweDEzLCAweDBmLCAweDhmLCAweDFiLCAweGU1LCAweDFhLCAweDY1LCAweDFiLCAweDYwLCAweDEyLCAweDEyLAorICAweDEzLCAweDBmLCAweDhmLCAweDFhLCAweGU1LCAweDFhLCAweDY1LCAweDFiLCAweDYwLCAweDA3LCAweDEyLCAweDEzLCAweDBmLCAweDhmLCAweDFiLCAweDgwLAorICAweGU4LCAweGFmLCAweDFhLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwfX0sCisgezB4MTIwNiwgNjQsIHsgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwZiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwKKyAgMHg3NCwgMHgwZCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZCwgMHhmMCwgMHgyMiwgMHgxMiwgMHgxMywgMHg2MywgMHg4ZiwgMHgxYSwgMHgxMiwgMHgxMywKKyAgMHg2MywgMHg4ZiwgMHgxYiwgMHhlNSwgMHgxYSwgMHg2NSwgMHgxYiwgMHg2MCwgMHgxMiwgMHgxMiwgMHgxMywgMHg2MywgMHg4ZiwgMHgxYSwgMHhlNSwgMHgxYSwKKyAgMHg2NSwgMHgxYiwgMHg2MCwgMHgwNywgMHgxMiwgMHgxMywgMHg2MywgMHg4ZiwgMHgxYiwgMHg4MCwgMHhlOCwgMHhhZiwgMHgxYSwgMHgyMiwgMHg5MH19LAorIHsweDEyNDYsIDY0LCB7IDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4MzAsIDB4MWEsIDB4MDQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsCisgIDB4N2YsIDB4ZjQsIDB4N2UsIDB4MDEsIDB4MTIsIDB4MTIsIDB4YzgsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjAsIDB4ZTAsIDB4NDQsCisgIDB4MDQsIDB4ZjAsIDB4MjIsIDB4YWUsIDB4MDcsIDB4ZTQsIDB4ZmYsIDB4ZTUsIDB4M2UsIDB4NTQsIDB4N2YsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4YjEsIDB4OTAsCisgIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWUsIDB4ZjAsIDB4ZTQsIDB4ZTUsIDB4M2UsIDB4NDQsIDB4ODB9fSwKKyB7MHgxMjg2LCA2NCwgeyAweGZkLCAweDEyLCAweDExLCAweGIxLCAweDIyLCAweGFlLCAweDA3LCAweGU0LCAweGZmLCAweGU1LCAweDNmLCAweDU0LCAweDdmLCAweGZkLCAweDEyLCAweDExLCAweGZiLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDA5LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVlLCAweGYwLCAweGU0LCAweGU1LCAweDNmLCAweDQ0LCAweDgwLAorICAweGZkLCAweDEyLCAweDExLCAweGZiLCAweDIyLCAweDA1LCAweDBlLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDE0LCAweDAzLCAweDAwLAorICAweDAwLCAweGMxLCAweDExLCAweGMxLCAweDE4LCAweGMxLCAweDk1LCAweGMxLCAweDEwLCAweGMxLCAweDE2LCAweDAxLCAweDBhLCAweDAwLCAweGMxfX0sCisgezB4MTJjNiwgNjQsIHsgMHgxYiwgMHgwMCwgMHg4ZSwgMHgxOCwgMHg4ZiwgMHgxOSwgMHhlNSwgMHgxOSwgMHgxNSwgMHgxOSwgMHhhZSwgMHgxOCwgMHg3MCwgMHgwMiwgMHgxNSwgMHgxOCwgMHg0ZSwKKyAgMHg2MCwgMHgwNSwgMHgxMiwgMHgwZCwgMHg0ZSwgMHg4MCwgMHhlZSwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwKKyAgMHg1MywgMHhkOCwgMHhlZiwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwZiwgMHhlNywgMHgwMCwgMHgwMiwgMHgxM319LAorIHsweDEzMDYsIDY0LCB7IDB4MDQsIDB4MDAsIDB4MDIsIDB4MGYsIDB4YmQsIDB4MDAsIDB4MDIsIDB4MTAsIDB4MGUsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTUsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsCisgIDB4MTYsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4OTB9fSwKKyB7MHgxMzQ2LCA2NCwgeyAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDA5LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBhLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LAorICAweDBiLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDkwLCAweGMwLAorICAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBkLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmfX0sCisgezB4MTM4NiwgNjQsIHsgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwZSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHgxMiwgMHgwMCwgMHgwMywgMHgxMiwKKyAgMHgwZCwgMHg1ZiwgMHgxMiwgMHgwYiwgMHg0NiwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEzYzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNDA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTQ0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNGM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTUwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNTg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTVjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE2MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNjQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTY4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE2YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNzA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTc0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxN2M2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTgwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxODg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MThjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmZiwgMHgwMH19LAorIHsweDE5MDYsIDY0LCB7IDB4MDAsIDB4NDAsIDB4Y2QsIDB4MDYsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MDksIDB4MDIsIDB4NzQsIDB4MDAsIDB4MDEsCisgIDB4MDEsIDB4MDAsIDB4YTAsIDB4MzIsIDB4MDksIDB4MDQsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDEsCisgIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDMsIDB4MDIsIDB4NDAsCisgIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDQsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDUsIDB4MDIsIDB4NDAsIDB4MDB9fSwKKyB7MHgxOTQ2LCA2NCwgeyAweDAwLCAweDA3LCAweDA1LCAweDA2LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA3LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LAorICAweDgxLCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDgyLCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDgzLCAweDAyLAorICAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDg0LCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDg1LCAweDAyLCAweDQwLCAweDAwLAorICAweDAxLCAweDA3LCAweDA1LCAweDg2LCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDg3LCAweDAyLCAweDQwLCAweDAwLCAweDAxfX0sCisgezB4MTk4NiwgNjQsIHsgMHgwNCwgMHgwMywgMHgwOSwgMHgwNCwgMHg0OCwgMHgwMywgMHg0YiwgMHgwMCwgMHg2NSwgMHgwMCwgMHg3OSwgMHgwMCwgMHg3MywgMHgwMCwgMHg3MCwgMHgwMCwgMHg2MSwKKyAgMHgwMCwgMHg2ZSwgMHgwMCwgMHgyYywgMHgwMCwgMHgyMCwgMHgwMCwgMHg2MSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2OSwgMHgwMCwgMHg3NiwKKyAgMHgwMCwgMHg2OSwgMHgwMCwgMHg3MywgMHgwMCwgMHg2OSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHg2ZSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg2ZiwgMHgwMCwgMHg2NiwKKyAgMHgwMCwgMHgyMCwgMHgwMCwgMHg0OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHg1MywgMHgwMCwgMHg3OSwgMHgwMH19LAorIHsweDE5YzYsIDY0LCB7IDB4NzMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjMsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MzYsIDB4MDMsIDB4NGIsIDB4MDAsIDB4NjUsCisgIDB4MDAsIDB4NzksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NTUsIDB4MDAsIDB4NTMsCisgIDB4MDAsIDB4NDIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzIsIDB4MDAsIDB4NjksIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmMsCisgIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NjUsIDB4MDB9fSwKKyB7MHgxYTA2LCAyMCwgeyAweDcyLCAweDAwLCAweDEwLCAweDAzLCAweDMwLCAweDAwLCAweDMwLCAweDAwLCAweDMwLCAweDAwLCAweDMwLCAweDAwLCAweDMwLCAweDAwLCAweDMwLCAweDAwLCAweDMwLAorICAweDAwLCAweDAwLCAweDAwfX0sCisgezB4ZmZmZiwJMCwJezB4MDB9IH0KK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2ExOV9mdy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMTlfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDIzYzUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMTlfZncuaApAQCAtMCwwICsxLDI4NSBAQAorLyoga2V5c3Bhbl91c2ExOV9mdy5oCisgCisJVGhlIGZpcm13YXJlIGNvbnRhaW5lZCBoZXJlaW4gYXMga2V5c3Bhbl91c2ExOV9mdy5oIGlzCisKKwkJQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEKKwkJS2V5c3BhbiwgQSBkaXZpc2lvbiBvZiBJbm5vU3lzIEluY29ycG9yYXRlZCAoIktleXNwYW4iKQorCQkKKwlhcyBhbiB1bnB1Ymxpc2hlZCB3b3JrLiBUaGlzIG5vdGljZSBkb2VzIG5vdCBpbXBseSB1bnJlc3RyaWN0ZWQgb3IKKwlwdWJsaWMgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29kZSBmcm9tIHdoaWNoIHRoaXMgZmlybXdhcmUgaW1hZ2UgaXMKKwlkZXJpdmVkLiAgRXhjZXB0IGFzIG5vdGVkIGJlbG93IHRoaXMgZmlybXdhcmUgaW1hZ2UgbWF5IG5vdCBiZSAKKwlyZXByb2R1Y2VkLCB1c2VkLCBzb2xkIG9yIHRyYW5zZmVycmVkIHRvIGFueSB0aGlyZCBwYXJ0eSB3aXRob3V0IAorCUtleXNwYW4ncyBwcmlvciB3cml0dGVuIGNvbnNlbnQuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisJUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIAorCWltYWdlIGFzIHBhcnQgb2YgYSBMaW51eCBvciBvdGhlciBPcGVuIFNvdXJjZSBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbCAKKwlpbiB0ZXh0IG9yIGJpbmFyeSBmb3JtIGFzIHJlcXVpcmVkLiAKKworCVRoaXMgZmlybXdhcmUgbWF5IG5vdCBiZSBtb2RpZmllZCBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aXRoICAKKwlLZXlzcGFuIGhhcmR3YXJlLiAgRGlzdHJpYnV0aW9uIGFuZC9vciBNb2RpZmljYXRpb24gb2YgdGhlIAorCWtleXNwYW4uYyBkcml2ZXIgd2hpY2ggaW5jbHVkZXMgdGhpcyBmaXJtd2FyZSwgaW4gd2hvbGUgb3IgaW4gCisJcGFydCwgcmVxdWlyZXMgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHN0YXRlbWVudC4iCisqLworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCBrZXlzcGFuX3VzYTE5X2Zpcm13YXJlW10gPSB7CisgezB4MDAyNiwgMTAsIHsgMHgxMiwgMHgwZCwgMHhiZiwgMHgxMiwgMHgwZiwgMHg0NywgMHgxMiwgMHgwZCwgMHg2YiwgMHgyMn19LAorIHsweDAwMzMsICAzLCB7IDB4MDIsIDB4MDAsIDB4MWF9fSwKKyB7MHgwMDFhLCAgNCwgeyAweDUzLCAweGQ4LCAweGVmLCAweDMyfX0sCisgezB4MDAwMywgMTYsIHsgMHg4ZSwgMHgxMywgMHg4ZiwgMHgxNCwgMHhlNSwgMHgxNCwgMHgxNSwgMHgxNCwgMHhhZSwgMHgxMywgMHg3MCwgMHgwMiwgMHgxNSwgMHgxMywgMHg0ZSwgMHg2MH19LAorIHsweDAwMTMsICA3LCB7IDB4MDUsIDB4MTIsIDB4MGYsIDB4MzYsIDB4ODAsIDB4ZWUsIDB4MjJ9fSwKKyB7MHgwMDIzLCAgMywgeyAweDAyLCAweDAwLCAweDQ2fX0sCisgezB4MDA0NiwgMTYsIHsgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhjMCwgMHhkMCwgMHg3NSwgMHhkMCwgMHgwOH19LAorIHsweDAwNTYsIDE2LCB7IDB4MzAsIDB4OTksIDB4MGUsIDB4MzAsIDB4MDgsIDB4MDcsIDB4YTIsIDB4MGIsIDB4OTIsIDB4OWIsIDB4ODUsIDB4MzUsIDB4OTksIDB4YzIsIDB4OTksIDB4ZDJ9fSwKKyB7MHgwMDY2LCAxNiwgeyAweDBmLCAweDIwLCAweDBmLCAweDAzLCAweDAyLCAweDA0LCAweDMxLCAweGMyLCAweDBmLCAweDIwLCAweDAyLCAweDAzLCAweDAyLCAweDAyLCAweDU2LCAweDIwfX0sCisgezB4MDA3NiwgMTYsIHsgMHgwOCwgMHgwMywgMHgwMiwgMHgwMSwgMHgyNywgMHhlNSwgMHgzNywgMHhjMywgMHg5NSwgMHg1MCwgMHg1MCwgMHgzZSwgMHgyMCwgMHgwOSwgMHgzNiwgMHgyMH19LAorIHsweDAwODYsIDE2LCB7IDB4MDYsIDB4MzMsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MDMsIDB4MjAsIDB4MGUsIDB4MjksIDB4MzAsIDB4MGQsIDB4MTIsIDB4YWZ9fSwKKyB7MHgwMDk2LCAxNiwgeyAweDM3LCAweDA1LCAweDM3LCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyfX0sCisgezB4MDBhNiwgMTYsIHsgMHgwYiwgMHhhZiwgMHgzNywgMHgwNSwgMHgzNywgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMH19LAorIHsweDAwYjYsIDE2LCB7IDB4ZjUsIDB4MzUsIDB4MDIsIDB4MDQsIDB4MmYsIDB4YzIsIDB4MDgsIDB4MDIsIDB4MDQsIDB4MmYsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTQsIDB4ZjAsIDB4YzJ9fSwKKyB7MHgwMGM2LCAxNiwgeyAweDAyLCAweDMwLCAweDBhLCAweDBjLCAweGMyLCAweDBhLCAweDkwLCAweDdmLCAweGJiLCAweDA0LCAweGYwLCAweGMyLCAweDA4LCAweDAyLCAweDA0LCAweDJmfX0sCisgezB4MDBkNiwgMTYsIHsgMHg5MCwgMHg3ZiwgMHhjOCwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNSwgMHhjMiwgMHgwOCwgMHgwMiwgMHgwNCwgMHgyZiwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMH19LAorIHsweDAwZTYsIDE2LCB7IDB4ZjUsIDB4NTAsIDB4OTAsIDB4N2QsIDB4YzAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGEsIDB4MjAsIDB4MDksIDB4MmQsIDB4MjAsIDB4MDYsIDB4MmEsIDB4OTB9fSwKKyB7MHgwMGY2LCAxNiwgeyAweDdmLCAweDliLCAweGUwLCAweDMwLCAweGUzLCAweDAzLCAweDIwLCAweDBlLCAweDIwLCAweDMwLCAweDBkLCAweDExLCAweDkwLCAweDdkLCAweGMxLCAweGUwfX0sCisgezB4MDA0MywgIDMsIHsgMHgwMiwgMHgwZiwgMHgwMH19LAorIHsweDAwMDAsICAzLCB7IDB4MDIsIDB4MGMsIDB4NjF9fSwKKyB7MHgwMTA2LCA2NCwgeyAweDEzLCAweDkyLCAweDBiLCAweGEzLCAweGUwLCAweGY1LCAweDM1LCAweDc1LCAweDM3LCAweDAzLCAweDAyLCAweDA0LCAweDJmLCAweDc1LCAweDM3LCAweDAyLCAweDkwLAorICAweDdkLCAweGMxLCAweGUwLCAweGY1LCAweDM1LCAweDAyLCAweDA0LCAweDJmLCAweDc1LCAweDM3LCAweDAxLCAweGMyLCAweDA4LCAweDAyLCAweDA0LCAweDJmLAorICAweGU1LCAweDM3LCAweGMzLCAweDk1LCAweDUwLCAweDUwLCAweDAzLCAweDAyLCAweDAxLCAweGNmLCAweDkwLCAweDdmLCAweGM2LCAweGUwLCAweDMwLCAweGUxLAorICAweDA3LCAweGMyLCAweDEwLCAweGMyLCAweDAzLCAweDAyLCAweDA0LCAweDJmLCAweDkwLCAweDdmLCAweGM3LCAweGUwLCAweGY1LCAweDUwLCAweDkwfX0sCisgezB4MDE0NiwgNjQsIHsgMHg3ZSwgMHg0MCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwYSwgMHgzMCwgMHgwOSwgMHgwMywgMHgwMiwgMHgwMSwgMHhjNywgMHgyMCwgMHgwNiwgMHg3MiwgMHgyMCwgMHgwMCwKKyAgMHg2ZiwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHgzMCwgMHhlMywgMHgwMywgMHgyMCwgMHgwZSwgMHg2NSwgMHgzMCwgMHgwZCwgMHgxMCwgMHg5MCwgMHg3ZSwKKyAgMHg0MSwgMHhlMCwgMHgxMywgMHg5MiwgMHg5YiwgMHhhMywgMHhlMCwgMHhmNSwgMHg5OSwgMHg3NSwgMHgzNywgMHgwMywgMHg4MCwgMHgwOSwgMHg5MCwgMHg3ZSwKKyAgMHg0MSwgMHhlMCwgMHhmNSwgMHg5OSwgMHg3NSwgMHgzNywgMHgwMiwgMHhlNSwgMHgzNywgMHhjMywgMHg5NSwgMHg1MCwgMHg0MCwgMHgxNywgMHg5MH19LAorIHsweDAxODYsIDY0LCB7IDB4N2YsIDB4YzcsIDB4ZTQsIDB4ZjAsIDB4YzIsIDB4MDIsIDB4MjAsIDB4MGEsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MmYsIDB4YzIsIDB4MGEsIDB4OTAsIDB4N2YsIDB4YmIsCisgIDB4MDQsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4MmYsIDB4MzAsIDB4MGQsIDB4MTIsIDB4YWYsIDB4MzcsIDB4MDUsIDB4MzcsIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGIsIDB4YWYsIDB4MzcsIDB4MDUsIDB4MzcsIDB4NzQsIDB4NDAsCisgIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4MzUsIDB4ZDIsIDB4MDgsIDB4MDIsIDB4MDR9fSwKKyB7MHgwMWM2LCA2NCwgeyAweDJmLCAweDc1LCAweDM3LCAweDAxLCAweGMyLCAweDEwLCAweDAyLCAweDA0LCAweDJmLCAweDMwLCAweDA5LCAweDAzLCAweDAyLCAweDAyLCAweDUxLCAweDIwLCAweDA2LAorICAweDc5LCAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDMwLCAweGUzLCAweDAzLCAweDIwLCAweDBlLCAweDZmLCAweDMwLCAweDBkLCAweDEyLCAweGFmLCAweDM3LAorICAweDA1LCAweDM3LCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDliLAorICAweGFmLCAweDM3LCAweDA1LCAweDM3LCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwfX0sCisgezB4MDIwNiwgNjQsIHsgMHhmNSwgMHg5OSwgMHhlNSwgMHgzNywgMHhjMywgMHg5NSwgMHg1MCwgMHg0MCwgMHgxNywgMHg5MCwgMHg3ZiwgMHhjNywgMHhlNCwgMHhmMCwgMHhjMiwgMHgwMiwgMHgyMCwKKyAgMHgwYSwgMHgwMywgMHgwMiwgMHgwNCwgMHgyZiwgMHhjMiwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhiYiwgMHgwNCwgMHhmMCwgMHgwMiwgMHgwNCwgMHgyZiwgMHgzMCwKKyAgMHgwZCwgMHgxMiwgMHhhZiwgMHgzNywgMHgwNSwgMHgzNywgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywKKyAgMHhlMCwgMHgxMywgMHg5MiwgMHgwYiwgMHhhZiwgMHgzNywgMHgwNSwgMHgzNywgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNH19LAorIHsweDAyNDYsIDY0LCB7IDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4MzUsIDB4ZDIsIDB4MDgsIDB4MDIsIDB4MDQsIDB4MmYsIDB4YzIsIDB4MTAsIDB4MDIsIDB4MDQsIDB4MmYsIDB4MjAsCisgIDB4MDgsIDB4MDMsIDB4MDIsIDB4MDMsIDB4MDgsIDB4ZTUsIDB4MzcsIDB4YzMsIDB4OTUsIDB4NTAsIDB4NTAsIDB4M2UsIDB4MjAsIDB4MDksIDB4MzYsIDB4MjAsCisgIDB4MDYsIDB4MzMsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MDMsIDB4MjAsIDB4MGUsIDB4MjksIDB4MzAsIDB4MGQsIDB4MTIsIDB4YWYsCisgIDB4MzcsIDB4MDUsIDB4MzcsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTN9fSwKKyB7MHgwMjg2LCA2NCwgeyAweDkyLCAweDBiLCAweGFmLCAweDM3LCAweDA1LCAweDM3LCAweDc0LCAweGMwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLAorICAweGY1LCAweDM1LCAweDAyLCAweDA0LCAweDJmLCAweGMyLCAweDA4LCAweDAyLCAweDA0LCAweDJmLCAweDkwLCAweDdmLCAweGM5LCAweGU0LCAweGYwLCAweGQyLAorICAweDAyLCAweDMwLCAweDBhLCAweDBjLCAweGMyLCAweDBhLCAweDkwLCAweDdmLCAweGJiLCAweDA0LCAweGYwLCAweGMyLCAweDA4LCAweDAyLCAweDA0LCAweDJmLAorICAweDkwLCAweDdmLCAweGM2LCAweGUwLCAweDMwLCAweGUxLCAweDA1LCAweGMyLCAweDA4LCAweDAyLCAweDA0LCAweDJmLCAweDkwLCAweDdmLCAweGM3fX0sCisgezB4MDJjNiwgNjQsIHsgMHhlMCwgMHhmNSwgMHg1MCwgMHg5MCwgMHg3ZSwgMHg0MCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwYSwgMHgyMCwgMHgwOSwgMHgyZCwgMHgyMCwgMHgwNiwgMHgyYSwgMHg5MCwKKyAgMHg3ZiwgMHg5YiwgMHhlMCwgMHgzMCwgMHhlMywgMHgwMywgMHgyMCwgMHgwZSwgMHgyMCwgMHgzMCwgMHgwZCwgMHgxMSwgMHg5MCwgMHg3ZSwgMHg0MSwgMHhlMCwKKyAgMHgxMywgMHg5MiwgMHgwYiwgMHhhMywgMHhlMCwgMHhmNSwgMHgzNSwgMHg3NSwgMHgzNywgMHgwMywgMHgwMiwgMHgwNCwgMHgyZiwgMHg3NSwgMHgzNywgMHgwMiwKKyAgMHg5MCwgMHg3ZSwgMHg0MSwgMHhlMCwgMHhmNSwgMHgzNSwgMHgwMiwgMHgwNCwgMHgyZiwgMHg3NSwgMHgzNywgMHgwMSwgMHhjMiwgMHgwOCwgMHgwMn19LAorIHsweDAzMDYsIDY0LCB7IDB4MDQsIDB4MmYsIDB4ZTUsIDB4MzcsIDB4YzMsIDB4OTUsIDB4NTAsIDB4NTAsIDB4MDMsIDB4MDIsIDB4MDMsIDB4YjAsIDB4OTAsIDB4N2YsIDB4YzgsIDB4ZTAsIDB4MzAsCisgIDB4ZTEsIDB4MDcsIDB4YzIsIDB4MTAsIDB4YzIsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MmYsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZTAsIDB4ZjUsIDB4NTAsIDB4OTAsCisgIDB4N2QsIDB4YzAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGEsIDB4MzAsIDB4MDksIDB4MDMsIDB4MDIsIDB4MDMsIDB4YTgsIDB4MjAsIDB4MDYsIDB4NzIsIDB4MjAsCisgIDB4MDAsIDB4NmYsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MDMsIDB4MjAsIDB4MGUsIDB4NjUsIDB4MzAsIDB4MGQsIDB4MTB9fSwKKyB7MHgwMzQ2LCA2NCwgeyAweDkwLCAweDdkLCAweGMxLCAweGUwLCAweDEzLCAweDkyLCAweDliLCAweGEzLCAweGUwLCAweGY1LCAweDk5LCAweDc1LCAweDM3LCAweDAzLCAweDgwLCAweDA5LCAweDkwLAorICAweDdkLCAweGMxLCAweGUwLCAweGY1LCAweDk5LCAweDc1LCAweDM3LCAweDAyLCAweGU1LCAweDM3LCAweGMzLCAweDk1LCAweDUwLCAweDQwLCAweDE3LCAweDkwLAorICAweDdmLCAweGM5LCAweGU0LCAweGYwLCAweGQyLCAweDAyLCAweDIwLCAweDBhLCAweDAzLCAweDAyLCAweDA0LCAweDJmLCAweGMyLCAweDBhLCAweDkwLCAweDdmLAorICAweGJiLCAweDA0LCAweGYwLCAweDAyLCAweDA0LCAweDJmLCAweDMwLCAweDBkLCAweDEyLCAweGFmLCAweDM3LCAweDA1LCAweDM3LCAweDc0LCAweGMwfX0sCisgezB4MDM4NiwgNjQsIHsgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgwYiwgMHhhZiwgMHgzNywgMHgwNSwgMHgzNywgMHg3NCwKKyAgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHgzNSwgMHhkMiwgMHgwOCwgMHgwMiwgMHgwNCwKKyAgMHgyZiwgMHg3NSwgMHgzNywgMHgwMSwgMHhjMiwgMHgxMCwgMHgwMiwgMHgwNCwgMHgyZiwgMHgzMCwgMHgwOSwgMHgwMywgMHgwMiwgMHgwNCwgMHgyZCwgMHgyMCwKKyAgMHgwNiwgMHg3NCwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHgzMCwgMHhlMywgMHgwMywgMHgyMCwgMHgwZSwgMHg2YSwgMHgzMCwgMHgwZCwgMHgxMn19LAorIHsweDAzYzYsIDY0LCB7IDB4YWYsIDB4MzcsIDB4MDUsIDB4MzcsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsCisgIDB4OWIsIDB4YWYsIDB4MzcsIDB4MDUsIDB4MzcsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsCisgIDB4ZjUsIDB4OTksIDB4ZTUsIDB4MzcsIDB4YzMsIDB4OTUsIDB4NTAsIDB4NDAsIDB4MTMsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZTQsIDB4ZjAsIDB4ZDIsIDB4MDIsCisgIDB4MzAsIDB4MGEsIDB4MzUsIDB4YzIsIDB4MGEsIDB4OTAsIDB4N2YsIDB4YmIsIDB4MDQsIDB4ZjAsIDB4ODAsIDB4MmMsIDB4MzAsIDB4MGQsIDB4MTJ9fSwKKyB7MHgwNDA2LCA2NCwgeyAweGFmLCAweDM3LCAweDA1LCAweDM3LCAweDc0LCAweGMwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLAorICAweDBiLCAweGFmLCAweDM3LCAweDA1LCAweDM3LCAweDc0LCAweGMwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLAorICAweGY1LCAweDM1LCAweGQyLCAweDA4LCAweDgwLCAweDAyLCAweGMyLCAweDEwLCAweGQyLCAweDEyLCAweDIwLCAweDk4LCAweDAzLCAweDAyLCAweDA1LCAweDZkLAorICAweGMyLCAweDk4LCAweDIwLCAweDAxLCAweDAzLCAweDAyLCAweDA0LCAweGRhLCAweDIwLCAweDExLCAweDI3LCAweGFmLCAweDM2LCAweDA1LCAweDM2fX0sCisgezB4MDQ0NiwgNjQsIHsgMHg3NCwgMHg4MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg5OSwgMHhmMCwgMHgzMCwgMHgwZCwgMHg0ZCwgMHhhZiwKKyAgMHgzNiwgMHgwNSwgMHgzNiwgMHg3NCwgMHg4MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg5OCwgMHhmMCwKKyAgMHg4MCwgMHgzYSwgMHg4NSwgMHg5OSwgMHgxMCwgMHhlNSwgMHgxMCwgMHhiNSwgMHg0NCwgMHgwNCwgMHhkMiwgMHgwNiwgMHg4MCwgMHgyZSwgMHhlNSwgMHgxMCwKKyAgMHhiNSwgMHg0MywgMHgwNCwgMHhjMiwgMHgwNiwgMHg4MCwgMHgyNSwgMHhhZiwgMHgzNiwgMHgwNSwgMHgzNiwgMHg3NCwgMHg4MCwgMHgyZiwgMHhmNX19LAorIHsweDA0ODYsIDY0LCB7IDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4MTAsIDB4ZjAsIDB4MzAsIDB4MGQsIDB4MTEsIDB4YWYsIDB4MzYsIDB4MDUsIDB4MzYsIDB4NzQsCisgIDB4ODAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4OTgsIDB4ZjAsIDB4ZDIsIDB4MGMsIDB4ZTUsIDB4MzYsCisgIDB4YzMsIDB4OTUsIDB4NDAsIDB4NTAsIDB4MDMsIDB4MDIsIDB4MDUsIDB4NmIsIDB4OTAsIDB4N2YsIDB4YjgsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MTYsIDB4ZTUsCisgIDB4MzYsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTAsIDB4MDMsIDB4MDIsIDB4MDUsIDB4NmIsIDB4MTUsIDB4MzYsIDB4MTUsIDB4MzYsIDB4MDUsIDB4MmJ9fSwKKyB7MHgwNGM2LCA2NCwgeyAweDQzLCAweDMzLCAweDAxLCAweDAyLCAweDA1LCAweDZiLCAweDkwLCAweDdmLCAweGI3LCAweGU1LCAweDM2LCAweGYwLCAweDc1LCAweDM2LCAweDAwLCAweGMyLCAweDAxLAorICAweDAyLCAweDA1LCAweDZiLCAweDIwLCAweDExLCAweDI3LCAweGFmLCAweDM2LCAweDA1LCAweDM2LCAweDc0LCAweDAwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LAorICAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGU1LCAweDk5LCAweGYwLCAweDMwLCAweDBkLCAweDRkLCAweGFmLCAweDM2LCAweDA1LCAweDM2LCAweDc0LCAweDAwLAorICAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGU1LCAweDk4LCAweGYwLCAweDgwLCAweDNhLCAweDg1LCAweDk5fX0sCisgezB4MDUwNiwgNjQsIHsgMHgxMCwgMHhlNSwgMHgxMCwgMHhiNSwgMHg0NCwgMHgwNCwgMHhkMiwgMHgwNiwgMHg4MCwgMHgyZSwgMHhlNSwgMHgxMCwgMHhiNSwgMHg0MywgMHgwNCwgMHhjMiwgMHgwNiwKKyAgMHg4MCwgMHgyNSwgMHhhZiwgMHgzNiwgMHgwNSwgMHgzNiwgMHg3NCwgMHgwMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywKKyAgMHhlNSwgMHgxMCwgMHhmMCwgMHgzMCwgMHgwZCwgMHgxMSwgMHhhZiwgMHgzNiwgMHgwNSwgMHgzNiwgMHg3NCwgMHgwMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwKKyAgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg5OCwgMHhmMCwgMHhkMiwgMHgwYywgMHhlNSwgMHgzNiwgMHhjMywgMHg5NSwgMHg0MCwgMHg0MH19LAorIHsweDA1NDYsIDY0LCB7IDB4MjQsIDB4OTAsIDB4N2YsIDB4YjYsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MTIsIDB4ZTUsIDB4MzYsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NDAsIDB4MTYsIDB4MTUsIDB4MzYsCisgIDB4MTUsIDB4MzYsIDB4MDUsIDB4MmIsIDB4NDMsIDB4MzMsIDB4MDEsIDB4ODAsIDB4MGIsIDB4OTAsIDB4N2YsIDB4YjksIDB4ZTUsIDB4MzYsIDB4ZjAsIDB4NzUsCisgIDB4MzYsIDB4MDAsIDB4ZDIsIDB4MDEsIDB4ZDIsIDB4MTIsIDB4MzAsIDB4MTIsIDB4MDUsIDB4YzIsIDB4MTIsIDB4MDIsIDB4MDAsIDB4NTYsIDB4ZDAsIDB4ZDAsCisgIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4OTAsIDB4N2YsIDB4Y2EsIDB4ZTAsIDB4MzAsIDB4ZTF9fSwKKyB7MHgwNTg2LCA2NCwgeyAweDAzLCAweDAyLCAweDA2LCAweGFiLCAweGU0LCAweGY1LCAweDEzLCAweDc0LCAweDQwLCAweDI1LCAweDEzLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LAorICAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDEzLCAweDdjLCAweDAwLCAweDdiLCAweDAwLCAweDI0LCAweDM4LCAweGY5LCAweGVjLCAweDM0LCAweDAwLCAweGZhLAorICAweGVmLCAweDEyLCAweDBkLCAweDMzLCAweDA1LCAweDEzLCAweGU1LCAweDEzLCAweGI0LCAweDE4LCAweGRiLCAweGU1LCAweDM4LCAweDYwLCAweDBjLCAweDc1LAorICAweGM5LCAweDIwLCAweDc1LCAweGM4LCAweDM0LCAweDg1LCAweDM5LCAweGNhLCAweDg1LCAweDNhLCAweGNiLCAweGU1LCAweDNiLCAweDEzLCAweDkyfX0sCisgezB4MDVjNiwgNjQsIHsgMHgwZCwgMHg5MiwgMHg5ZiwgMHhlNSwgMHgzYywgMHgxMywgMHg5MiwgMHgwZSwgMHhlNSwgMHgzZCwgMHgxMywgMHg5MiwgMHgxMSwgMHhlNSwgMHgzZSwgMHg2MCwgMHgwOSwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHg4MCwgMHgwNywgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwgMHg0NCwgMHgwNCwgMHhmMCwKKyAgMHhlNSwgMHgzZiwgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmMCwgMHg4MCwgMHgwNywgMHg5MCwgMHg3ZiwgMHg5OCwKKyAgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHhlNSwgMHg0NSwgMHg2MCwgMHgwYiwgMHhjMiwgMHgwOSwgMHhjMiwgMHgwNiwgMHg5MCwgMHg3ZiwgMHg5NX19LAorIHsweDA2MDYsIDY0LCB7IDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4NDYsIDB4NjAsIDB4MGMsIDB4ZDIsIDB4MDYsIDB4NDMsIDB4MzMsIDB4MDEsIDB4OTAsIDB4N2YsIDB4OTUsIDB4ZTAsCisgIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4NDcsIDB4NjAsIDB4MGQsIDB4YzIsIDB4YWYsIDB4YzIsIDB4MDgsIDB4ZDIsIDB4MDAsIDB4ZTQsIDB4ZjUsIDB4NTAsCisgIDB4ZjUsIDB4MzcsIDB4ZDIsIDB4YWYsIDB4ZTUsIDB4NDgsIDB4NjAsIDB4MDUsIDB4MzAsIDB4MTEsIDB4MDIsIDB4ZDIsIDB4MDYsIDB4ZTUsIDB4NDksIDB4NjAsCisgIDB4MTUsIDB4OTAsIDB4N2YsIDB4OTUsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjB9fSwKKyB7MHgwNjQ2LCA2NCwgeyAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweGU1LCAweDRhLCAweDYwLCAweDBhLCAweGQyLCAweDljLCAweGMyLCAweDk4LCAweDc1LCAweDJjLAorICAweDAxLCAweDc1LCAweDMxLCAweDFlLCAweGU1LCAweDRiLCAweDYwLCAweDA3LCAweGMyLCAweDljLCAweGU0LCAweGY1LCAweDM2LCAweGY1LCAweDJjLCAweGU1LAorICAweDRjLCAweDYwLCAweDAzLCAweGU0LCAweGY1LCAweDM2LCAweGU1LCAweDRkLCAweDYwLCAweDAyLCAweGQyLCAweDA0LCAweGU1LCAweDRlLCAweDYwLCAweDBhLAorICAweGU1LCAweDRhLCAweDcwLCAweDAyLCAweGY1LCAweDMxLCAweGU1LCAweDRlLCAweDQyLCAweDMzLCAweGU1LCAweDRmLCAweDYwLCAweDFmLCAweDkwfX0sCisgezB4MDY4NiwgNjQsIHsgMHg3ZiwgMHhkNywgMHg3NCwgMHgxMSwgMHhmMCwgMHg3NCwgMHgzMSwgMHhmMCwgMHg3NCwgMHgxMiwgMHhmMCwgMHg3NCwgMHgzMiwgMHhmMCwgMHg3NCwgMHgxMywgMHhmMCwKKyAgMHg3NCwgMHgzMywgMHhmMCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg3NCwgMHgzNCwgMHhmMCwgMHhkMiwgMHgwMiwgMHhkMiwgMHgwMSwgMHhkMiwgMHgwNSwgMHhlNCwKKyAgMHg5MCwgMHg3ZiwgMHhjYiwgMHhmMCwgMHhhMiwgMHgwOSwgMHhlNCwgMHgzMywgMHhmZiwgMHg2NSwgMHgyOSwgMHg2MCwgMHgwNSwgMHg4ZiwgMHgyOSwgMHg0MywKKyAgMHgzMywgMHgwMSwgMHhhMiwgMHgwNiwgMHhlNCwgMHgzMywgMHhmZiwgMHg2NSwgMHgyYSwgMHg2MCwgMHgwNSwgMHg4ZiwgMHgyYSwgMHg0MywgMHgzM319LAorIHsweDA2YzYsIDY0LCB7IDB4MDEsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTQsIDB4MDgsIDB4YjUsIDB4MjUsIDB4MGEsIDB4ZTAsIDB4NTQsIDB4MDgsIDB4NjQsIDB4MDgsIDB4ZjUsIDB4MjUsCisgIDB4NDMsIDB4MzMsIDB4MDEsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTQsIDB4MTAsIDB4YjUsIDB4MjYsIDB4MGEsIDB4ZTAsIDB4NTQsIDB4MTAsIDB4NjQsCisgIDB4MTAsIDB4ZjUsIDB4MjYsIDB4NDMsIDB4MzMsIDB4MDEsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTQsIDB4NDAsIDB4YjUsIDB4MjcsIDB4MGEsIDB4ZTAsCisgIDB4NTQsIDB4NDAsIDB4NjQsIDB4NDAsIDB4ZjUsIDB4MjcsIDB4NDMsIDB4MzMsIDB4MDEsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTQsIDB4MjB9fSwKKyB7MHgwNzA2LCA2NCwgeyAweGI1LCAweDI4LCAweDBhLCAweGUwLCAweDU0LCAweDIwLCAweDY0LCAweDIwLCAweGY1LCAweDI4LCAweDQzLCAweDMzLCAweDAxLCAweDMwLCAweDA0LCAweDM1LCAweGMyLAorICAweGFmLCAweDMwLCAweDAxLCAweDE4LCAweDkwLCAweDdmLCAweGI4LCAweGUwLCAweDIwLCAweGUxLCAweDI3LCAweGU1LCAweDM2LCAweDYwLCAweDA5LCAweDkwLAorICAweDdmLCAweGI3LCAweGYwLCAweGU0LCAweGY1LCAweDM2LCAweGMyLCAweDAxLCAweGMyLCAweDA0LCAweDgwLCAweDE2LCAweDkwLCAweDdmLCAweGI2LCAweGUwLAorICAweDIwLCAweGUxLCAweDBmLCAweGU1LCAweDM2LCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweGI5LCAweGYwLCAweGU0LCAweGY1LCAweDM2LCAweGQyfX0sCisgezB4MDc0NiwgNjQsIHsgMHgwMSwgMHhjMiwgMHgwNCwgMHhkMiwgMHhhZiwgMHgyMCwgMHgwMywgMHgzNywgMHgzMCwgMHgwMiwgMHgxYiwgMHg5MCwgMHg3ZiwgMHhjNiwgMHhlMCwgMHgyMCwgMHhlMSwKKyAgMHgyZCwgMHg5MCwgMHg3ZSwgMHg0MCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwYSwgMHg3NSwgMHgzNywgMHgwMSwgMHg5MCwgMHg3ZiwgMHhjNywgMHhlMCwgMHhmNSwKKyAgMHg1MCwgMHhkMiwgMHgwMywgMHg4MCwgMHgxOSwgMHg5MCwgMHg3ZiwgMHhjOCwgMHhlMCwgMHgyMCwgMHhlMSwgMHgxMiwgMHg5MCwgMHg3ZCwgMHhjMCwgMHhlMCwKKyAgMHgxMywgMHg5MiwgMHgwYSwgMHg3NSwgMHgzNywgMHgwMSwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMCwgMHhmNSwgMHg1MCwgMHhkMiwgMHgwMywgMHgyMH19LAorIHsweDA3ODYsIDY0LCB7IDB4MTAsIDB4MzMsIDB4MjAsIDB4MDAsIDB4MDYsIDB4ZTUsIDB4MzcsIDB4NjUsIDB4NTAsIDB4NzAsIDB4MmEsIDB4MzAsIDB4MDMsIDB4MWEsIDB4MzAsIDB4MDIsIDB4MDksCisgIDB4ZTQsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZjAsIDB4YzIsIDB4MDIsIDB4ODAsIDB4MDcsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZjAsIDB4ZDIsIDB4MDIsCisgIDB4YzIsIDB4MDMsIDB4ZTQsIDB4ZjUsIDB4NTAsIDB4ZjUsIDB4MzcsIDB4MzAsIDB4MGEsIDB4MGEsIDB4YzIsIDB4MGEsIDB4YzIsIDB4MDAsIDB4OTAsIDB4N2YsCisgIDB4YmIsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MzAsIDB4MTAsIDB4MDMsIDB4MDIsIDB4MDgsIDB4YzUsIDB4MjAsIDB4MDMsIDB4MDMsIDB4MDIsIDB4MDh9fSwKKyB7MHgwN2M2LCA2NCwgeyAweGM1LCAweDMwLCAweDBlLCAweDBhLCAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDMwLCAweGUzLCAweDAzLCAweDAyLCAweDA4LCAweGM1LCAweDMwLCAweDA2LCAweDAzLAorICAweDAyLCAweDA4LCAweGM1LCAweDMwLCAweDA5LCAweDAzLCAweDAyLCAweDA4LCAweGM1LCAweDMwLCAweDAyLCAweDYyLCAweDMwLCAweDBkLCAweDEyLCAweGFmLAorICAweDM3LCAweDA1LCAweDM3LCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLAorICAweDE5LCAweGFmLCAweDM3LCAweDA1LCAweDM3LCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzfX0sCisgezB4MDgwNiwgNjQsIHsgMHhlMCwgMHhmNSwgMHgxNCwgMHhlNSwgMHgzNywgMHhjMywgMHg5NSwgMHg1MCwgMHg1MCwgMHgyYSwgMHgzMCwgMHgwZCwgMHgxMiwgMHhhZiwgMHgzNywgMHgwNSwgMHgzNywKKyAgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgwYiwgMHhhZiwgMHgzNywKKyAgMHgwNSwgMHgzNywgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHgzNSwgMHhkMiwKKyAgMHgwOCwgMHg4MCwgMHg2YiwgMHhjMiwgMHgwOCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhmMCwgMHhjMiwgMHgwMiwgMHg4MCwgMHg2MCwgMHgzMH19LAorIHsweDA4NDYsIDY0LCB7IDB4MGQsIDB4MTIsIDB4YWYsIDB4MzcsIDB4MDUsIDB4MzcsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsCisgIDB4MTMsIDB4OTIsIDB4MTksIDB4YWYsIDB4MzcsIDB4MDUsIDB4MzcsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsCisgIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4MTQsIDB4ZTUsIDB4MzcsIDB4YzMsIDB4OTUsIDB4NTAsIDB4NTAsIDB4MmEsIDB4MzAsIDB4MGQsIDB4MTIsIDB4YWYsIDB4MzcsCisgIDB4MDUsIDB4MzcsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTJ9fSwKKyB7MHgwODg2LCA2NCwgeyAweDBiLCAweGFmLCAweDM3LCAweDA1LCAweDM3LCAweDc0LCAweGMwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweGY1LAorICAweDM1LCAweGQyLCAweDA4LCAweDgwLCAweDA5LCAweGMyLCAweDA4LCAweGU0LCAweDkwLCAweDdmLCAweGM5LCAweGYwLCAweGQyLCAweDAyLCAweDMwLCAweDBkLAorICAweDA0LCAweGEyLCAweDE5LCAweDkyLCAweDliLCAweGQyLCAweDEwLCAweGMyLCAweGFmLCAweDg1LCAweDE0LCAweDk5LCAweDIwLCAweDA4LCAweDBkLCAweDMwLAorICAweDBhLCAweDBhLCAweGMyLCAweDBhLCAweGMyLCAweDAwLCAweDkwLCAweDdmLCAweGJiLCAweDc0LCAweDAxLCAweGYwLCAweGQyLCAweGFmLCAweDkwfX0sCisgezB4MDhjNiwgNjQsIHsgMHg3ZiwgMHhiYywgMHhlMCwgMHgyMCwgMHhlMSwgMHg1MSwgMHhlNSwgMHgzMywgMHg2MCwgMHg0ZCwgMHhlNSwgMHgzMSwgMHg3MCwgMHg0OSwgMHhlNSwgMHgzMywgMHgzMCwKKyAgMHhlMSwgMHgwOCwgMHhlNCwgMHhmNSwgMHgyZiwgMHg3NSwgMHgzMywgMHgwMSwgMHg4MCwgMHgwYiwgMHhhMiwgMHgwNSwgMHhlNCwgMHgzMywgMHhmNSwgMHgyZiwKKyAgMHhjMiwgMHgwNSwgMHhlNCwgMHhmNSwgMHgzMywgMHhlNCwgMHhmNSwgMHgxMywgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwgMHgyNCwgMHgyNSwgMHgxMywKKyAgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgwYywgMHhlZCwgMHhmZiwgMHg3NCwgMHgwMCwgMHgyNSwgMHgxMywgMHhmNSwgMHg4Mn19LAorIHsweDA5MDYsIDY0LCB7IDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MTMsIDB4ZTUsIDB4MTMsIDB4YjQsIDB4MGMsIDB4ZGIsIDB4OTAsIDB4N2YsIDB4YmQsCisgIDB4NzQsIDB4MGMsIDB4ZjAsIDB4NzUsIDB4MzEsIDB4MTAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZTksIDB4ZTAsIDB4MTIsIDB4MGQsIDB4NDUsIDB4MGEsIDB4MDMsCisgIDB4MDAsIDB4MGEsIDB4NzcsIDB4MDEsIDB4MGEsIDB4ZTMsIDB4MDMsIDB4MDksIDB4NDEsIDB4MDYsIDB4MDksIDB4ZjQsIDB4MDgsIDB4MDksIDB4ZTgsIDB4MDksCisgIDB4MDksIDB4ZDAsIDB4MGEsIDB4MDksIDB4ZGYsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MzIsIDB4OTAsIDB4N2YsIDB4ZWIsIDB4ZTAsIDB4MjR9fSwKKyB7MHgwOTQ2LCA2NCwgeyAweGZlLCAweDYwLCAweDE2LCAweDE0LCAweDYwLCAweDU3LCAweDI0LCAweDAyLCAweDcwLCAweDc2LCAweDc0LCAweDBmLCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweDc0LAorICAweDY0LCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDBiLCAweDM5LCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDA0LCAweDdmLCAweDAyLAorICAweDgwLCAweDAyLCAweDdmLCAweDAzLCAweDc1LCAweDgyLCAweGI1LCAweDc1LCAweDgzLCAweDBmLCAweGVmLCAweGYwLCAweDc1LCAweDgyLCAweGFlLCAweDc1LAorICAweDgzLCAweDBmLCAweGYwLCAweDc1LCAweDgyLCAweGE3LCAweDc1LCAweDgzLCAweDBmLCAweGYwLCAweDc1LCAweDgyLCAweGEwLCAweDc1LCAweDgzfX0sCisgezB4MDk4NiwgNjQsIHsgMHgwZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHgwNCwgMHg3NSwgMHg4MiwgMHg3YiwgMHg3NSwgMHg4MywgMHgwZiwgMHhmMCwgMHg3NCwgMHgwZiwgMHg5MCwKKyAgMHg3ZiwgMHhkNCwgMHhmMCwgMHg3NCwgMHg3NiwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzOSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwKKyAgMHhmZiwgMHgxMiwgMHgwZSwgMHg0OCwgMHhlYSwgMHg0OSwgMHg2MCwgMHgwZCwgMHhlYSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHhlOSwgMHg5MCwgMHg3ZiwKKyAgMHhkNSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzOSwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzOX19LAorIHsweDA5YzYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4MzksIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4MTksIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4MzksIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MTksIDB4MDIsIDB4MGIsCisgIDB4MzksIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MTgsIDB4MTIsIDB4MGQsIDB4NmIsIDB4MDIsIDB4MGIsIDB4MzksIDB4OTAsIDB4N2YsIDB4MDAsCisgIDB4ZTUsIDB4MTgsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4MzksIDB4OTAsIDB4N2YsIDB4ZTh9fSwKKyB7MHgwYTA2LCA2NCwgeyAweGUwLCAweDI0LCAweDdmLCAweDYwLCAweDI0LCAweDE0LCAweDYwLCAweDMxLCAweDI0LCAweDAyLCAweDcwLCAweDViLCAweGEyLCAweDEzLCAweGU0LCAweDMzLCAweGZmLAorICAweDI1LCAweGUwLCAweGZmLCAweGEyLCAweDE3LCAweGU0LCAweDMzLCAweDRmLCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGU0LCAweGEzLCAweGYwLCAweDkwLAorICAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDBiLCAweDM5LCAweGU0LCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGEzLCAweGYwLCAweDkwLAorICAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDBiLCAweDM5LCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwfX0sCisgezB4MGE0NiwgNjQsIHsgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwKKyAgMHg3ZiwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmZCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwKKyAgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzOSwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzOSwKKyAgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxZCwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwYiwgMHgzOX19LAorIHsweDBhODYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDUsIDB4YzIsIDB4MTMsIDB4MDIsIDB4MGIsIDB4MzksIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsCisgIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4MzksIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MzgsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsCisgIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4NTQsIDB4ODAsIDB4ZmZ9fSwKKyB7MHgwYWM2LCA2NCwgeyAweDEzLCAweDEzLCAweDEzLCAweDU0LCAweDFmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDkwLCAweDdmLCAweGQ3LCAweGYwLCAweGUwLCAweDQ0LCAweDIwLAorICAweGYwLCAweDgwLCAweDVmLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDU2LCAweDkwLCAweDdmLCAweGU4LCAweGUwLAorICAweDI0LCAweGZlLCAweDYwLCAweDE4LCAweDI0LCAweDAyLCAweDcwLCAweDRhLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGI0LCAweDAxLCAweDA0LCAweGQyLAorICAweDEzLCAweDgwLCAweDNmLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDM2LCAweDkwLCAweDdmLCAweGVhfX0sCisgezB4MGIwNiwgNjQsIHsgMHhlMCwgMHg3MCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwKKyAgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHg3NCwgMHgwMSwgMHhmMCwKKyAgMHg4MCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgwNywgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwKKyAgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHgyMiwgMHgyMCwgMHgxNSwgMHgwMywgMHgwMiwgMHgwYn19LAorIHsweDBiNDYsIDY0LCB7IDB4ZDMsIDB4ZTUsIDB4MzEsIDB4NjAsIDB4MDIsIDB4MTUsIDB4MzEsIDB4ZTUsIDB4MzYsIDB4NjAsIDB4NGYsIDB4NjUsIDB4MzQsIDB4NzAsIDB4NDUsIDB4ZTUsIDB4MzIsCisgIDB4ZjQsIDB4NjAsIDB4MDIsIDB4MDUsIDB4MzIsIDB4ZTUsIDB4MzIsIDB4YzMsIDB4OTUsIDB4NDEsIDB4NDAsIDB4M2QsIDB4YzIsIDB4YWYsIDB4MzAsIDB4MDEsCisgIDB4MTgsIDB4OTAsIDB4N2YsIDB4YjgsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MjcsIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZTUsIDB4MzYsIDB4ZjAsIDB4YzIsIDB4MDEsCisgIDB4ZTQsIDB4ZjUsIDB4MzYsIDB4ZjUsIDB4MzIsIDB4ZjUsIDB4MzQsIDB4ODAsIDB4MTYsIDB4OTAsIDB4N2YsIDB4YjYsIDB4ZTAsIDB4MjAsIDB4ZTF9fSwKKyB7MHgwYjg2LCA2NCwgeyAweDBmLCAweDkwLCAweDdmLCAweGI5LCAweGU1LCAweDM2LCAweGYwLCAweGQyLCAweDAxLCAweGU0LCAweGY1LCAweDM2LCAweGY1LCAweDMyLCAweGY1LCAweDM0LCAweGQyLAorICAweGFmLCAweDgwLCAweDA2LCAweDg1LCAweDM2LCAweDM0LCAweGU0LCAweGY1LCAweDMyLCAweGU1LCAweDJjLCAweDYwLCAweDJmLCAweDIwLCAweDBjLCAweDA3LAorICAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDMwLCAweGUwLCAweDBmLCAweGU1LCAweDJkLCAweDYwLCAweDA2LCAweGU0LCAweGY1LCAweDJkLCAweDQzLCAweDMzLAorICAweDAxLCAweGU0LCAweGY1LCAweDMwLCAweDgwLCAweDE0LCAweGU1LCAweDMwLCAweGQzLCAweDk1LCAweDQyLCAweDUwLCAweDBkLCAweGU1LCAweDMwfX0sCisgezB4MGJjNiwgNjQsIHsgMHhiNSwgMHg0MiwgMHgwNiwgMHg3NSwgMHgyZCwgMHgwMSwgMHg0MywgMHgzMywgMHgwMSwgMHgwNSwgMHgzMCwgMHhjMiwgMHgwYywgMHgyMiwgMHg3NSwgMHgxMiwgMHgwMSwKKyAgMHhjMiwgMHgxNCwgMHhjMiwgMHgxOCwgMHhjMiwgMHgxMywgMHhjMiwgMHgxNywgMHhjMiwgMHgxNSwgMHhjMiwgMHgxMiwgMHhkMiwgMHgxNiwgMHhlNCwgMHhmNSwKKyAgMHgxOCwgMHg5MCwgMHg3ZiwgMHg5MiwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZSwgMHhlMCwgMHhmZiwgMHhkMywgMHg5MiwgMHgxMywKKyAgMHhlNCwgMHgzMywgMHhmZSwgMHhlZiwgMHg0ZSwgMHhmMCwgMHhkMiwgMHhlOCwgMHg0MywgMHhkOCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhkZSwgMHg3NH19LAorIHsweDBjMDYsIDY0LCB7IDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YTksIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4YWEsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWYsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWUsCisgIDB4ZTAsIDB4NDQsIDB4MGQsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4ZDIsIDB4YmMsIDB4ZDIsIDB4MTksIDB4MTIsIDB4MGUsIDB4ZGEsIDB4YzIsIDB4MTQsIDB4MzAsCisgIDB4MTUsIDB4MDMsIDB4MTIsIDB4MDUsIDB4ODAsIDB4OTAsIDB4N2YsIDB4ZDgsIDB4ZTAsIDB4NjUsIDB4MTEsIDB4NjAsIDB4MDgsIDB4ZTAsIDB4ZjV9fSwKKyB7MHgwYzQ2LCA2NCwgeyAweDExLCAweDEyLCAweDBiLCAweDQxLCAweDgwLCAweGVhLCAweDMwLCAweDE0LCAweDA3LCAweGMyLCAweDE0LCAweDEyLCAweDA5LCAweDFlLCAweDgwLCAweGUwLCAweDMwLAorICAweDE4LCAweGRkLCAweGMyLCAweDE4LCAweDEyLCAweDAwLCAweDI2LCAweDgwLCAweGQ2LCAweDIyLCAweDc4LCAweDdmLCAweGU0LCAweGY2LCAweGQ4LCAweGZkLAorICAweDc1LCAweDgxLCAweDUwLCAweDAyLCAweDBjLCAweGE4LCAweDAyLCAweDBiLCAweGQ0LCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweGU0LCAweDkzLCAweGEzLAorICAweDQwLCAweDAzLCAweGY2LCAweDgwLCAweDAxLCAweGYyLCAweDA4LCAweGRmLCAweGY0LCAweDgwLCAweDI5LCAweGU0LCAweDkzLCAweGEzLCAweGY4fX0sCisgezB4MGM4NiwgNjQsIHsgMHg1NCwgMHgwNywgMHgyNCwgMHgwYywgMHhjOCwgMHhjMywgMHgzMywgMHhjNCwgMHg1NCwgMHgwZiwgMHg0NCwgMHgyMCwgMHhjOCwgMHg4MywgMHg0MCwgMHgwNCwgMHhmNCwKKyAgMHg1NiwgMHg4MCwgMHgwMSwgMHg0NiwgMHhmNiwgMHhkZiwgMHhlNCwgMHg4MCwgMHgwYiwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwKKyAgMHg4MCwgMHg5MCwgMHgwZSwgMHgwNCwgMHhlNCwgMHg3ZSwgMHgwMSwgMHg5MywgMHg2MCwgMHhiYywgMHhhMywgMHhmZiwgMHg1NCwgMHgzZiwgMHgzMCwgMHhlNSwKKyAgMHgwOSwgMHg1NCwgMHgxZiwgMHhmZSwgMHhlNCwgMHg5MywgMHhhMywgMHg2MCwgMHgwMSwgMHgwZSwgMHhjZiwgMHg1NCwgMHhjMCwgMHgyNSwgMHhlMH19LAorIHsweDBjYzYsIDY0LCB7IDB4NjAsIDB4YTgsIDB4NDAsIDB4YjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZmEsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4YzgsIDB4YzUsCisgIDB4ODIsIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2EsIDB4ZjAsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2EsCisgIDB4ZGYsIDB4ZTksIDB4ZGUsIDB4ZTcsIDB4ODAsIDB4YmUsIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsCisgIDB4MDIsIDB4ZTcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDIsIDB4ZTMsIDB4MjIsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjJ9fSwKKyB7MHgwZDA2LCA2NCwgeyAweGJiLCAweDAxLCAweDBjLCAweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGUwLCAweDIyLCAweDUwLCAweDA2LAorICAweGU5LCAweDI1LCAweDgyLCAweGY4LCAweGU2LCAweDIyLCAweGJiLCAweGZlLCAweDA2LCAweGU5LCAweDI1LCAweDgyLCAweGY4LCAweGUyLCAweDIyLCAweGU1LAorICAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGU0LCAweDkzLCAweDIyLCAweGJiLCAweDAxLCAweDA2LCAweDg5LAorICAweDgyLCAweDhhLCAweDgzLCAweGYwLCAweDIyLCAweDUwLCAweDAyLCAweGY3LCAweDIyLCAweGJiLCAweGZlLCAweDAxLCAweGYzLCAweDIyLCAweGQwfX0sCisgezB4MGQ0NiwgNjQsIHsgMHg4MywgMHhkMCwgMHg4MiwgMHhmOCwgMHhlNCwgMHg5MywgMHg3MCwgMHgxMiwgMHg3NCwgMHgwMSwgMHg5MywgMHg3MCwgMHgwZCwgMHhhMywgMHhhMywgMHg5MywgMHhmOCwKKyAgMHg3NCwgMHgwMSwgMHg5MywgMHhmNSwgMHg4MiwgMHg4OCwgMHg4MywgMHhlNCwgMHg3MywgMHg3NCwgMHgwMiwgMHg5MywgMHg2OCwgMHg2MCwgMHhlZiwgMHhhMywKKyAgMHhhMywgMHhhMywgMHg4MCwgMHhkZiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5MywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHg3NCwgMHgzMCwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHg5NiwgMHg3NCwgMHgxMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NCwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZCwgMHgwNH19LAorIHsweDBkODYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTcsIDB4NzQsIDB4MjAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTUsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsCisgIDB4ODQsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4Y2IsIDB4ZjAsIDB4NzUsIDB4OTgsIDB4NDAsIDB4NDMsIDB4YTgsIDB4MTAsIDB4OTAsIDB4N2YsIDB4ZGUsIDB4NzQsIDB4MWYsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4ZGYsIDB4NzQsIDB4MGYsIDB4ZjAsIDB4ZDIsIDB4MTUsIDB4MjIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTUsIDB4ZjAsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwZGM2LCA2NCwgeyAweDk0LCAweGYwLCAweDkwLCAweDdmLCAweDkzLCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDkwLCAweDdmLCAweDk3LCAweGUwLAorICAweDQ0LCAweDAyLCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LCAweDIwLCAweGYwLAorICAweGU0LCAweDkwLCAweDdmLCAweDk2LCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweGUwLCAweDQ0LCAweGZkLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk3LAorICAweGYwLCAweDkwLCAweDdmLCAweDllLCAweDc0LCAweGZmLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk4LCAweGYwLCAweDIyLCAweDBjLCAweDI0fX0sCisgezB4MGUwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwMSwgMHgzMywKKyAgMHgwMSwgMHgwMSwgMHgzMiwgMHgwMCwgMHgwMSwgMHgzNywgMHgwMCwgMHgwMSwgMHg1MCwgMHgwMCwgMHgwMSwgMHgzNiwgMHgwMCwgMHgwMSwgMHgzNCwgMHgwMCwKKyAgMHhjMSwgMHgwNSwgMHhjMSwgMHgwYywgMHhjMSwgMHgwMywgMHhjMSwgMHgwZiwgMHhjMSwgMHgwNCwgMHhjMSwgMHgwZSwgMHhjMSwgMHgxMSwgMHhjMSwgMHgwYSwKKyAgMHhjMSwgMHgxMCwgMHhjMSwgMHgwOCwgMHhjMSwgMHgwOSwgMHhjMSwgMHgwNiwgMHhjMSwgMHgwMCwgMHhjMSwgMHgwZCwgMHhjMSwgMHg4MSwgMHhjMX19LAorIHsweDBlNDYsIDY0LCB7IDB4ODIsIDB4MDAsIDB4OGYsIDB4MTMsIDB4ZTQsIDB4ZjUsIDB4MTQsIDB4NzUsIDB4MTUsIDB4ZmYsIDB4NzUsIDB4MTYsIDB4MGYsIDB4NzUsIDB4MTcsIDB4YjksIDB4YWIsCisgIDB4MTUsIDB4YWEsIDB4MTYsIDB4YTksIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4MGQsIDB4MDYsIDB4YjQsIDB4MDMsIDB4MWQsIDB4YWYsIDB4MTQsCisgIDB4MDUsIDB4MTQsIDB4ZWYsIDB4YjUsIDB4MTMsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MGMsIDB4ZWQsIDB4N2UsIDB4MDAsIDB4MjksIDB4ZmYsIDB4ZWUsIDB4M2EsCisgIDB4YTksIDB4MDcsIDB4NzUsIDB4MTUsIDB4ZmYsIDB4ZjUsIDB4MTYsIDB4ODksIDB4MTcsIDB4ODAsIDB4ZDQsIDB4N2IsIDB4MDAsIDB4N2EsIDB4MDB9fSwKKyB7MHgwZTg2LCA2NCwgeyAweDc5LCAweDAwLCAweDIyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LAorICAweDAwLCAweDkwLCAweDdmLCAweGM0LCAweGU0LCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA0LCAweGYwLCAweGQwLAorICAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLAorICAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweGQyLCAweDE0LCAweDUzLCAweDkxfX0sCisgezB4MGVjNiwgNjQsIHsgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywKKyAgMHhkMCwgMHhlMCwgMHgzMiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHgzMCwgMHgxOSwKKyAgMHgwNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg3ZiwgMHhmNCwgMHg3ZSwgMHgwMSwgMHgxMiwgMHgwMCwgMHgwMywgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwKKyAgMHg1NCwgMHhmNywgMHhmMCwgMHhlMCwgMHg0NCwgMHgwNCwgMHhmMCwgMHgyMiwgMHgwMCwgMHgwMiwgMHgwZSwgMHhiMywgMHgwMCwgMHgwMiwgMHgwZn19LAorIHsweDBmMDYsIDY0LCB7IDB4MDQsIDB4MDAsIDB4MDIsIDB4MGUsIDB4ODksIDB4MDAsIDB4MDIsIDB4MGYsIDB4MGYsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsCisgIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4ZDIsIDB4MTgsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsCisgIDB4MDgsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4NzQsCisgIDB4MDAsIDB4ZjUsIDB4ODYsIDB4OTAsIDB4ZmQsIDB4YTUsIDB4N2MsIDB4MDUsIDB4YTMsIDB4ZTUsIDB4ODIsIDB4NDUsIDB4ODMsIDB4NzAsIDB4Zjl9fSwKKyB7MHgwZjQ2LCA2NCwgeyAweDIyLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweDQzLCAweDg3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIyLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDEwLAorICAweDAxLCAweGZmLCAweDAwLCAweDAwLCAweDQwLCAweGNkLCAweDA2LCAweDA3LCAweDAxLCAweDAxLCAweDAwLCAweDAxLCAweDAyLCAweDAwLCAweDAyLCAweDA5LAorICAweDAyLCAweDQzLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDA5LCAweDA0LCAweDAwLCAweDAwLCAweDA3LCAweGZmLCAweDAwfX0sCisgezB4MGY4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMSwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywKKyAgMHgwNSwgMHgwMywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHg4MSwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MiwKKyAgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NCwgMHgwMiwgMHg0MCwKKyAgMHgwMCwgMHgwMSwgMHgwNCwgMHgwMywgMHgwOSwgMHgwNCwgMHgxMCwgMHgwMywgMHg0YiwgMHgwMCwgMHg2NSwgMHgwMCwgMHg3OSwgMHgwMCwgMHg3M319LAorIHsweDBmYzYsIDIzLCB7IDB4MDAsIDB4NzAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmUsIDB4MDAsIDB4MGUsIDB4MDMsIDB4NTMsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzIsIDB4MDAsIDB4NjksIDB4MDAsCisgIDB4NjEsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHhmZmZmLAkwLAl7MHgwMH0gfQorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTE5cWlfZncuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTE5cWlfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTI2NDcyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMTlxaV9mdy5oCkBAIC0wLDAgKzEsMjg0IEBACisvKiBrZXlzcGFuX3VzYTE5cWlfZncuaAorIAorCVRoZSBmaXJtd2FyZSBjb250YWluZWQgaGVyZWluIGFzIGtleXNwbl91c2ExOXFpX2Z3LmggaXMKKworCQlDb3B5cmlnaHQgKEMpIDE5OTktMjAwMQorCQlLZXlzcGFuLCBBIGRpdmlzaW9uIG9mIElubm9TeXMgSW5jb3Jwb3JhdGVkICgiS2V5c3BhbiIpCisJCQorCWFzIGFuIHVucHVibGlzaGVkIHdvcmsuIFRoaXMgbm90aWNlIGRvZXMgbm90IGltcGx5IHVucmVzdHJpY3RlZCBvcgorCXB1YmxpYyBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIGZyb20gd2hpY2ggdGhpcyBmaXJtd2FyZSBpbWFnZSBpcworCWRlcml2ZWQuICBFeGNlcHQgYXMgbm90ZWQgYmVsb3cgdGhpcyBmaXJtd2FyZSBpbWFnZSBtYXkgbm90IGJlIAorCXJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQgCisJS2V5c3BhbidzIHByaW9yIHdyaXR0ZW4gY29uc2VudC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKwlQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgCisJaW1hZ2UgYXMgcGFydCBvZiBhIExpbnV4IG9yIG90aGVyIE9wZW4gU291cmNlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIAorCWluIHRleHQgb3IgYmluYXJ5IGZvcm0gYXMgcmVxdWlyZWQuIAorCisJVGhpcyBmaXJtd2FyZSBtYXkgbm90IGJlIG1vZGlmaWVkIGFuZCBtYXkgb25seSBiZSB1c2VkIHdpdGggIAorCUtleXNwYW4gaGFyZHdhcmUuICBEaXN0cmlidXRpb24gYW5kL29yIE1vZGlmaWNhdGlvbiBvZiB0aGUgCisJa2V5c3Bhbi5jIGRyaXZlciB3aGljaCBpbmNsdWRlcyB0aGlzIGZpcm13YXJlLCBpbiB3aG9sZSBvciBpbiAKKwlwYXJ0LCByZXF1aXJlcyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3RhdGVtZW50LiIKKworKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkIGtleXNwYW5fdXNhMTlxaV9maXJtd2FyZVtdID0geworIHsweDAwMzMsICAzLCB7IDB4MDIsIDB4MDAsIDB4MWF9fSwKKyB7MHgwMDFhLCAgNCwgeyAweDUzLCAweGQ4LCAweGVmLCAweDMyfX0sCisgezB4MDAwMywgMTYsIHsgMHg4ZSwgMHgxMSwgMHg4ZiwgMHgxMiwgMHhlNSwgMHgxMiwgMHgxNSwgMHgxMiwgMHhhZSwgMHgxMSwgMHg3MCwgMHgwMiwgMHgxNSwgMHgxMSwgMHg0ZSwgMHg2MH19LAorIHsweDAwMTMsICA3LCB7IDB4MDUsIDB4MTIsIDB4MGYsIDB4ODQsIDB4ODAsIDB4ZWUsIDB4MjJ9fSwKKyB7MHgwMDIzLCAgMywgeyAweDAyLCAweDAwLCAweDQ2fX0sCisgezB4MDA0NiwgMTYsIHsgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhjMCwgMHhkMCwgMHg3NSwgMHhkMCwgMHgwOH19LAorIHsweDAwNTYsIDE2LCB7IDB4MzAsIDB4OTksIDB4MGUsIDB4MzAsIDB4MGIsIDB4MDcsIDB4YTIsIDB4MGUsIDB4OTIsIDB4OWIsIDB4ODUsIDB4MzYsIDB4OTksIDB4YzIsIDB4OTksIDB4ZDJ9fSwKKyB7MHgwMDY2LCAxNiwgeyAweDEyLCAweDIwLCAweDEyLCAweDAzLCAweDAyLCAweDA0LCAweDFlLCAweGMyLCAweDEyLCAweDIwLCAweDAzLCAweDAzLCAweDAyLCAweDAyLCAweDRlLCAweDIwfX0sCisgezB4MDA3NiwgMTYsIHsgMHgwYiwgMHgwMywgMHgwMiwgMHgwMSwgMHgyNiwgMHhlNSwgMHgzYSwgMHhjMywgMHg5NSwgMHg1MywgMHg1MCwgMHgzYywgMHgyMCwgMHgwYywgMHgzNCwgMHgyMH19LAorIHsweDAwODYsIDE2LCB7IDB4MDksIDB4MzEsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTUsIDB4MzgsIDB4NzAsIDB4MjksIDB4MzAsIDB4MTAsIDB4MTIsIDB4YWYsIDB4M2EsIDB4MDV9fSwKKyB7MHgwMDk2LCAxNiwgeyAweDNhLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDBlLCAweGFmfX0sCisgezB4MDBhNiwgMTYsIHsgMHgzYSwgMHgwNSwgMHgzYSwgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHgzNn19LAorIHsweDAwYjYsIDE2LCB7IDB4MDIsIDB4MDQsIDB4MWMsIDB4YzIsIDB4MGIsIDB4MDIsIDB4MDQsIDB4MWMsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTQsIDB4ZjAsIDB4YzIsIDB4MDMsIDB4MzB9fSwKKyB7MHgwMGM2LCAxNiwgeyAweDBkLCAweDBjLCAweGMyLCAweDBkLCAweDkwLCAweDdmLCAweGJiLCAweDA0LCAweGYwLCAweGMyLCAweDBiLCAweDAyLCAweDA0LCAweDFjLCAweDkwLCAweDdmfX0sCisgezB4MDBkNiwgMTYsIHsgMHhjOCwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNSwgMHhjMiwgMHgwYiwgMHgwMiwgMHgwNCwgMHgxYywgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMCwgMHhmNSwgMHg1M319LAorIHsweDAwZTYsIDE2LCB7IDB4OTAsIDB4N2QsIDB4YzAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGQsIDB4NzUsIDB4MTYsIDB4ZmYsIDB4MjAsIDB4MGMsIDB4MmIsIDB4MjAsIDB4MDksIDB4Mjh9fSwKKyB7MHgwMGY2LCAxNiwgeyAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDU1LCAweDM4LCAweDcwLCAweDIwLCAweDMwLCAweDEwLCAweDExLCAweDkwLCAweDdkLCAweGMxLCAweGUwLCAweDEzfX0sCisgezB4MDA0MywgIDMsIHsgMHgwMiwgMHgwZSwgMHgwMH19LAorIHsweDAwMDAsICAzLCB7IDB4MDIsIDB4MDAsIDB4MjZ9fSwKKyB7MHgwMDI2LCAxMiwgeyAweDc4LCAweDdmLCAweGU0LCAweGY2LCAweGQ4LCAweGZkLCAweDc1LCAweDgxLCAweDU0LCAweDAyLCAweDBiLCAweDI4fX0sCisgezB4MDEwNiwgNjQsIHsgMHg5MiwgMHgwZSwgMHhhMywgMHhlMCwgMHhmNSwgMHgzNiwgMHg3NSwgMHgzYSwgMHgwMywgMHgwMiwgMHgwNCwgMHgxYywgMHg3NSwgMHgzYSwgMHgwMiwgMHg5MCwgMHg3ZCwKKyAgMHhjMSwgMHhlMCwgMHhmNSwgMHgzNiwgMHgwMiwgMHgwNCwgMHgxYywgMHg3NSwgMHgzYSwgMHgwMSwgMHhjMiwgMHgwYiwgMHgwMiwgMHgwNCwgMHgxYywgMHhlNSwKKyAgMHgzYSwgMHhjMywgMHg5NSwgMHg1MywgMHg1MCwgMHgwMywgMHgwMiwgMHgwMSwgMHhjOSwgMHg5MCwgMHg3ZiwgMHhjNiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNywKKyAgMHhjMiwgMHgxNCwgMHhjMiwgMHgwNSwgMHgwMiwgMHgwNCwgMHgxYywgMHg5MCwgMHg3ZiwgMHhjNywgMHhlMCwgMHhmNSwgMHg1MywgMHg5MCwgMHg3ZX19LAorIHsweDAxNDYsIDY0LCB7IDB4NDAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGQsIDB4NzUsIDB4MTYsIDB4ZmYsIDB4MjAsIDB4MGMsIDB4NzAsIDB4MjAsIDB4MDksIDB4NmQsIDB4OTAsIDB4N2YsIDB4OWIsCisgIDB4ZTAsIDB4NTUsIDB4MzgsIDB4NzAsIDB4NjUsIDB4MzAsIDB4MTAsIDB4MTAsIDB4OTAsIDB4N2UsIDB4NDEsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4OWIsIDB4YTMsCisgIDB4ZTAsIDB4ZjUsIDB4OTksIDB4NzUsIDB4M2EsIDB4MDMsIDB4ODAsIDB4MDksIDB4OTAsIDB4N2UsIDB4NDEsIDB4ZTAsIDB4ZjUsIDB4OTksIDB4NzUsIDB4M2EsCisgIDB4MDIsIDB4ZTUsIDB4M2EsIDB4YzMsIDB4OTUsIDB4NTMsIDB4NDAsIDB4MTcsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTQsIDB4ZjAsIDB4YzIsIDB4MDN9fSwKKyB7MHgwMTg2LCA2NCwgeyAweDIwLCAweDBkLCAweDAzLCAweDAyLCAweDA0LCAweDFjLCAweGMyLCAweDBkLCAweDkwLCAweDdmLCAweGJiLCAweDA0LCAweGYwLCAweDAyLCAweDA0LCAweDFjLCAweDMwLAorICAweDEwLCAweDEyLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLAorICAweGUwLCAweDEzLCAweDkyLCAweDBlLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLAorICAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDM2LCAweGQyLCAweDBiLCAweDAyLCAweDA0LCAweDFjLCAweDc1LCAweDNhLCAweDAxLCAweGMyLCAweDE0fX0sCisgezB4MDFjNiwgNjQsIHsgMHgwMiwgMHgwNCwgMHgxYywgMHgzMCwgMHgwYywgMHgwMywgMHgwMiwgMHgwMiwgMHg0OSwgMHgyMCwgMHgwOSwgMHg3NywgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHg1NSwKKyAgMHgzOCwgMHg3MCwgMHg2ZiwgMHgzMCwgMHgxMCwgMHgxMiwgMHhhZiwgMHgzYSwgMHgwNSwgMHgzYSwgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwKKyAgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHg5YiwgMHhhZiwgMHgzYSwgMHgwNSwgMHgzYSwgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwKKyAgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHg5OSwgMHhlNSwgMHgzYSwgMHhjMywgMHg5NSwgMHg1MywgMHg0MH19LAorIHsweDAyMDYsIDY0LCB7IDB4MTcsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTQsIDB4ZjAsIDB4YzIsIDB4MDMsIDB4MjAsIDB4MGQsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MWMsIDB4YzIsIDB4MGQsIDB4OTAsCisgIDB4N2YsIDB4YmIsIDB4MDQsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4MWMsIDB4MzAsIDB4MTAsIDB4MTIsIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsIDB4NzQsIDB4NDAsCisgIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGUsIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsCisgIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4MzYsIDB4ZDIsIDB4MGJ9fSwKKyB7MHgwMjQ2LCA2NCwgeyAweDAyLCAweDA0LCAweDFjLCAweGMyLCAweDE0LCAweDAyLCAweDA0LCAweDFjLCAweDIwLCAweDBiLCAweDAzLCAweDAyLCAweDAyLCAweGZmLCAweGU1LCAweDNhLCAweGMzLAorICAweDk1LCAweDUzLCAweDUwLCAweDNjLCAweDIwLCAweDBjLCAweDM0LCAweDIwLCAweDA5LCAweDMxLCAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDU1LCAweDM4LAorICAweDcwLCAweDI5LCAweDMwLCAweDEwLCAweDEyLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweDc0LCAweGMwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LAorICAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDBlLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweDc0LCAweGMwLCAweDJmLCAweGY1fX0sCisgezB4MDI4NiwgNjQsIHsgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHgzNiwgMHgwMiwgMHgwNCwgMHgxYywgMHhjMiwgMHgwYiwgMHgwMiwgMHgwNCwgMHgxYywKKyAgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlNCwgMHhmMCwgMHhkMiwgMHgwMywgMHgzMCwgMHgwZCwgMHgwYywgMHhjMiwgMHgwZCwgMHg5MCwgMHg3ZiwgMHhiYiwgMHgwNCwKKyAgMHhmMCwgMHhjMiwgMHgwYiwgMHgwMiwgMHgwNCwgMHgxYywgMHg5MCwgMHg3ZiwgMHhjNiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNSwgMHhjMiwgMHgwYiwgMHgwMiwKKyAgMHgwNCwgMHgxYywgMHg5MCwgMHg3ZiwgMHhjNywgMHhlMCwgMHhmNSwgMHg1MywgMHg5MCwgMHg3ZSwgMHg0MCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwZH19LAorIHsweDAyYzYsIDY0LCB7IDB4NzUsIDB4MTYsIDB4ZmYsIDB4MjAsIDB4MGMsIDB4MmIsIDB4MjAsIDB4MDksIDB4MjgsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTUsIDB4MzgsIDB4NzAsIDB4MjAsCisgIDB4MzAsIDB4MTAsIDB4MTEsIDB4OTAsIDB4N2UsIDB4NDEsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGUsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4MzYsIDB4NzUsIDB4M2EsCisgIDB4MDMsIDB4MDIsIDB4MDQsIDB4MWMsIDB4NzUsIDB4M2EsIDB4MDIsIDB4OTAsIDB4N2UsIDB4NDEsIDB4ZTAsIDB4ZjUsIDB4MzYsIDB4MDIsIDB4MDQsIDB4MWMsCisgIDB4NzUsIDB4M2EsIDB4MDEsIDB4YzIsIDB4MGIsIDB4MDIsIDB4MDQsIDB4MWMsIDB4ZTUsIDB4M2EsIDB4YzMsIDB4OTUsIDB4NTMsIDB4NTAsIDB4MDN9fSwKKyB7MHgwMzA2LCA2NCwgeyAweDAyLCAweDAzLCAweGEyLCAweDkwLCAweDdmLCAweGM4LCAweGUwLCAweDMwLCAweGUxLCAweDA3LCAweGMyLCAweDE0LCAweGMyLCAweDA1LCAweDAyLCAweDA0LCAweDFjLAorICAweDkwLCAweDdmLCAweGM5LCAweGUwLCAweGY1LCAweDUzLCAweDkwLCAweDdkLCAweGMwLCAweGUwLCAweDEzLCAweDkyLCAweDBkLCAweDc1LCAweDE2LCAweGZmLAorICAweDIwLCAweDBjLCAweDcwLCAweDIwLCAweDA5LCAweDZkLCAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDU1LCAweDM4LCAweDcwLCAweDY1LCAweDMwLCAweDEwLAorICAweDEwLCAweDkwLCAweDdkLCAweGMxLCAweGUwLCAweDEzLCAweDkyLCAweDliLCAweGEzLCAweGUwLCAweGY1LCAweDk5LCAweDc1LCAweDNhLCAweDAzfX0sCisgezB4MDM0NiwgNjQsIHsgMHg4MCwgMHgwOSwgMHg5MCwgMHg3ZCwgMHhjMSwgMHhlMCwgMHhmNSwgMHg5OSwgMHg3NSwgMHgzYSwgMHgwMiwgMHhlNSwgMHgzYSwgMHhjMywgMHg5NSwgMHg1MywgMHg0MCwKKyAgMHgxNywgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlNCwgMHhmMCwgMHhkMiwgMHgwMywgMHgyMCwgMHgwZCwgMHgwMywgMHgwMiwgMHgwNCwgMHgxYywgMHhjMiwgMHgwZCwKKyAgMHg5MCwgMHg3ZiwgMHhiYiwgMHgwNCwgMHhmMCwgMHgwMiwgMHgwNCwgMHgxYywgMHgzMCwgMHgxMCwgMHgxMiwgMHhhZiwgMHgzYSwgMHgwNSwgMHgzYSwgMHg3NCwKKyAgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgwZSwgMHhhZiwgMHgzYX19LAorIHsweDAzODYsIDY0LCB7IDB4MDUsIDB4M2EsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4MzYsIDB4ZDIsIDB4MGIsCisgIDB4MDIsIDB4MDQsIDB4MWMsIDB4NzUsIDB4M2EsIDB4MDEsIDB4YzIsIDB4MTQsIDB4MDIsIDB4MDQsIDB4MWMsIDB4MjAsIDB4MGMsIDB4NzUsIDB4MjAsIDB4MDksCisgIDB4NzIsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTUsIDB4MzgsIDB4NzAsIDB4NmEsIDB4MzAsIDB4MTAsIDB4MTIsIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsCisgIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4OWIsIDB4YWZ9fSwKKyB7MHgwM2M2LCA2NCwgeyAweDNhLCAweDA1LCAweDNhLCAweDc0LCAweGMwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDk5LCAweGU1LAorICAweDNhLCAweGMzLCAweDk1LCAweDUzLCAweDQwLCAweDEzLCAweDkwLCAweDdmLCAweGM5LCAweGU0LCAweGYwLCAweGQyLCAweDAzLCAweDMwLCAweDBkLCAweDM1LAorICAweGMyLCAweDBkLCAweDkwLCAweDdmLCAweGJiLCAweDA0LCAweGYwLCAweDgwLCAweDJjLCAweDMwLCAweDEwLCAweDEyLCAweGFmLCAweDNhLCAweDA1LCAweDNhLAorICAweDc0LCAweGMwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDBlLCAweGFmfX0sCisgezB4MDQwNiwgNjQsIHsgMHgzYSwgMHgwNSwgMHgzYSwgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHgzNiwgMHhkMiwKKyAgMHgwYiwgMHg4MCwgMHgwMiwgMHhjMiwgMHgxNCwgMHhkMiwgMHgwMSwgMHgyMCwgMHg5OCwgMHgwMywgMHgwMiwgMHgwNSwgMHg1YSwgMHhjMiwgMHg5OCwgMHgyMCwKKyAgMHgwMiwgMHgwMywgMHgwMiwgMHgwNCwgMHhjNywgMHgyMCwgMHgxNiwgMHgyNywgMHhhZiwgMHgzOSwgMHgwNSwgMHgzOSwgMHg3NCwgMHg4MCwgMHgyZiwgMHhmNSwKKyAgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg5OSwgMHhmMCwgMHgzMCwgMHgxMCwgMHg0ZCwgMHhhZiwgMHgzOSwgMHgwNX19LAorIHsweDA0NDYsIDY0LCB7IDB4MzksIDB4NzQsIDB4ODAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4OTgsIDB4ZjAsIDB4ODAsIDB4M2EsIDB4ODUsCisgIDB4OTksIDB4MTAsIDB4ZTUsIDB4MTAsIDB4YjUsIDB4NDcsIDB4MDQsIDB4ZDIsIDB4MDksIDB4ODAsIDB4MmUsIDB4ZTUsIDB4MTAsIDB4YjUsIDB4NDYsIDB4MDQsCisgIDB4YzIsIDB4MDksIDB4ODAsIDB4MjUsIDB4YWYsIDB4MzksIDB4MDUsIDB4MzksIDB4NzQsIDB4ODAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsCisgIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4MTAsIDB4ZjAsIDB4MzAsIDB4MTAsIDB4MTEsIDB4YWYsIDB4MzksIDB4MDUsIDB4MzksIDB4NzQsIDB4ODAsIDB4MmZ9fSwKKyB7MHgwNDg2LCA2NCwgeyAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGU1LCAweDk4LCAweGYwLCAweGQyLCAweDBmLCAweGU1LCAweDM5LCAweGMzLCAweDk1LCAweDQzLAorICAweDUwLCAweDAzLCAweDAyLCAweDA1LCAweDU4LCAweDkwLCAweDdmLCAweGI4LCAweGUwLCAweDMwLCAweGUxLCAweDE2LCAweGU1LCAweDM5LCAweGMzLCAweDk0LAorICAweDQwLCAweDUwLCAweDAzLCAweDAyLCAweDA1LCAweDU4LCAweDE1LCAweDM5LCAweDE1LCAweDM5LCAweDA1LCAweDJiLCAweDQzLCAweDM0LCAweDAxLCAweDAyLAorICAweDA1LCAweDU4LCAweDkwLCAweDdmLCAweGI3LCAweGU1LCAweDM5LCAweGYwLCAweDc1LCAweDM5LCAweDAwLCAweGMyLCAweDAyLCAweDAyLCAweDA1fX0sCisgezB4MDRjNiwgNjQsIHsgMHg1OCwgMHgyMCwgMHgxNiwgMHgyNywgMHhhZiwgMHgzOSwgMHgwNSwgMHgzOSwgMHg3NCwgMHgwMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwKKyAgMHg4MywgMHhlNSwgMHg5OSwgMHhmMCwgMHgzMCwgMHgxMCwgMHg0ZCwgMHhhZiwgMHgzOSwgMHgwNSwgMHgzOSwgMHg3NCwgMHgwMCwgMHgyZiwgMHhmNSwgMHg4MiwKKyAgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg5OCwgMHhmMCwgMHg4MCwgMHgzYSwgMHg4NSwgMHg5OSwgMHgxMCwgMHhlNSwgMHgxMCwgMHhiNSwKKyAgMHg0NywgMHgwNCwgMHhkMiwgMHgwOSwgMHg4MCwgMHgyZSwgMHhlNSwgMHgxMCwgMHhiNSwgMHg0NiwgMHgwNCwgMHhjMiwgMHgwOSwgMHg4MCwgMHgyNX19LAorIHsweDA1MDYsIDY0LCB7IDB4YWYsIDB4MzksIDB4MDUsIDB4MzksIDB4NzQsIDB4MDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4MTAsIDB4ZjAsCisgIDB4MzAsIDB4MTAsIDB4MTEsIDB4YWYsIDB4MzksIDB4MDUsIDB4MzksIDB4NzQsIDB4MDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsCisgIDB4ODMsIDB4ZTUsIDB4OTgsIDB4ZjAsIDB4ZDIsIDB4MGYsIDB4ZTUsIDB4MzksIDB4YzMsIDB4OTUsIDB4NDMsIDB4NDAsIDB4MjQsIDB4OTAsIDB4N2YsIDB4YjYsCisgIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MTIsIDB4ZTUsIDB4MzksIDB4YzMsIDB4OTQsIDB4NDAsIDB4NDAsIDB4MTYsIDB4MTUsIDB4MzksIDB4MTUsIDB4Mzl9fSwKKyB7MHgwNTQ2LCA2NCwgeyAweDA1LCAweDJiLCAweDQzLCAweDM0LCAweDAxLCAweDgwLCAweDBiLCAweDkwLCAweDdmLCAweGI5LCAweGU1LCAweDM5LCAweGYwLCAweDc1LCAweDM5LCAweDAwLCAweGQyLAorICAweDAyLCAweGQyLCAweDAxLCAweDMwLCAweDAxLCAweDA1LCAweGMyLCAweDAxLCAweDAyLCAweDAwLCAweDU2LCAweGQwLCAweGQwLCAweGQwLCAweDg2LCAweGQwLAorICAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweDkwLCAweDdmLCAweGJjLCAweGUwLCAweDIwLCAweGUxLCAweDUxLCAweGU1LCAweDM0LCAweDYwLAorICAweDRkLCAweGU1LCAweDMxLCAweDcwLCAweDQ5LCAweGU1LCAweDM0LCAweDMwLCAweGUxLCAweDA4LCAweGU0LCAweGY1LCAweDJmLCAweDc1LCAweDM0fX0sCisgezB4MDU4NiwgNjQsIHsgMHgwMSwgMHg4MCwgMHgwYiwgMHhhMiwgMHgwOCwgMHhlNCwgMHgzMywgMHhmNSwgMHgyZiwgMHhjMiwgMHgwOCwgMHhlNCwgMHhmNSwgMHgzNCwgMHhlNCwgMHhmNSwgMHgxMSwKKyAgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwgMHgyNCwgMHgyNSwgMHgxMSwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgwZCwgMHgwNiwKKyAgMHhmZiwgMHg3NCwgMHgwMCwgMHgyNSwgMHgxMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgxMSwKKyAgMHhlNSwgMHgxMSwgMHhiNCwgMHgwYywgMHhkYiwgMHg5MCwgMHg3ZiwgMHhiZCwgMHg3NCwgMHgwYywgMHhmMCwgMHg3NSwgMHgzMSwgMHgxMCwgMHg5MH19LAorIHsweDA1YzYsIDY0LCB7IDB4N2YsIDB4Y2EsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MDYsIDB4ZjMsIDB4ZTQsIDB4ZjUsIDB4MTEsIDB4NzQsIDB4NDAsIDB4MjUsIDB4MTEsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTEsIDB4N2MsIDB4MDAsIDB4N2IsIDB4MDAsIDB4MjQsIDB4M2IsCisgIDB4ZjksIDB4ZWMsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4ZWYsIDB4MTIsIDB4MGQsIDB4MWYsIDB4MDUsIDB4MTEsIDB4ZTUsIDB4MTEsIDB4YjQsIDB4MTgsIDB4ZGIsCisgIDB4ZTUsIDB4M2IsIDB4NjAsIDB4MTEsIDB4NzUsIDB4YzksIDB4MjAsIDB4NzUsIDB4YzgsIDB4MzYsIDB4ODUsIDB4M2MsIDB4Y2EsIDB4ODUsIDB4M2R9fSwKKyB7MHgwNjA2LCA2NCwgeyAweGNiLCAweGU0LCAweDkwLCAweDdmLCAweDlmLCAweGYwLCAweGU1LCAweDNlLCAweDEzLCAweDkyLCAweDEwLCAweDkyLCAweDlmLCAweDg1LCAweDNmLCAweDM4LCAweGU1LAorICAweDQwLCAweDEzLCAweDkyLCAweDE2LCAweGU1LCAweDQxLCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweDgwLAorICAweDA3LCAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDQ0LCAweDA0LCAweGYwLCAweGU1LCAweDQyLCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweDk4LCAweGUwLAorICAweDU0LCAweDdmLCAweGYwLCAweDgwLCAweDA3LCAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweGU1LCAweDQ4LCAweDYwfX0sCisgezB4MDY0NiwgNjQsIHsgMHgwYiwgMHhjMiwgMHgwYywgMHhjMiwgMHgwOSwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHhlNSwgMHg0OSwgMHg2MCwgMHgwYywgMHhkMiwKKyAgMHgwOSwgMHg0MywgMHgzNCwgMHgwMSwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHhlNSwgMHg0YSwgMHg2MCwgMHgwZCwgMHhjMiwKKyAgMHhhZiwgMHhjMiwgMHgwYiwgMHhkMiwgMHgwMCwgMHhlNCwgMHhmNSwgMHg1MywgMHhmNSwgMHgzYSwgMHhkMiwgMHhhZiwgMHhlNSwgMHg0YiwgMHg2MCwgMHgwNSwKKyAgMHgzMCwgMHgxNiwgMHgwMiwgMHhkMiwgMHgwOSwgMHhlNSwgMHg0YywgMHg2MCwgMHgxNSwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhlMCwgMHg1NCwgMHhmZH19LAorIHsweDA2ODYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4ZTUsIDB4NGQsCisgIDB4NjAsIDB4MGEsIDB4ZDIsIDB4OWMsIDB4YzIsIDB4OTgsIDB4NzUsIDB4MmMsIDB4MDEsIDB4NzUsIDB4MzEsIDB4MWUsIDB4ZTUsIDB4NGUsIDB4NjAsIDB4MDcsCisgIDB4YzIsIDB4OWMsIDB4ZTQsIDB4ZjUsIDB4MzksIDB4ZjUsIDB4MmMsIDB4ZTUsIDB4NGYsIDB4NjAsIDB4MDMsIDB4ZTQsIDB4ZjUsIDB4MzksIDB4ZTUsIDB4NTAsCisgIDB4NjAsIDB4MDIsIDB4ZDIsIDB4MDcsIDB4ZTUsIDB4NTEsIDB4NjAsIDB4MGEsIDB4ZTUsIDB4NGQsIDB4NzAsIDB4MDIsIDB4ZjUsIDB4MzEsIDB4ZTV9fSwKKyB7MHgwNmM2LCA2NCwgeyAweDUxLCAweDQyLCAweDM0LCAweGU1LCAweDUyLCAweDYwLCAweDFmLCAweDkwLCAweDdmLCAweGQ3LCAweDc0LCAweDExLCAweGYwLCAweDc0LCAweDMxLCAweGYwLCAweDc0LAorICAweDEyLCAweGYwLCAweDc0LCAweDMyLCAweGYwLCAweDc0LCAweDEzLCAweGYwLCAweDc0LCAweDMzLCAweGYwLCAweDc0LCAweDE0LCAweGYwLCAweDc0LCAweDM0LAorICAweGYwLCAweGQyLCAweDAzLCAweGQyLCAweDAyLCAweGQyLCAweDA4LCAweGU0LCAweDkwLCAweDdmLCAweGNiLCAweGYwLCAweGEyLCAweDBjLCAweGU0LCAweDMzLAorICAweGZmLCAweDY1LCAweDI5LCAweDYwLCAweDA1LCAweDhmLCAweDI5LCAweDQzLCAweDM0LCAweDAxLCAweGEyLCAweDA5LCAweGU0LCAweDMzLCAweGZmfX0sCisgezB4MDcwNiwgNjQsIHsgMHg2NSwgMHgyYSwgMHg2MCwgMHgwNSwgMHg4ZiwgMHgyYSwgMHg0MywgMHgzNCwgMHgwMSwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHhmZiwgMHg1NCwgMHgwOCwgMHg2NCwKKyAgMHgwOCwgMHhmZSwgMHg2NSwgMHgyNSwgMHg2MCwgMHgwNSwgMHg4ZSwgMHgyNSwgMHg0MywgMHgzNCwgMHgwMSwgMHhlZiwgMHg1NCwgMHgxMCwgMHg2NCwgMHgxMCwKKyAgMHhmZSwgMHg2NSwgMHgyNiwgMHg2MCwgMHgwNSwgMHg4ZSwgMHgyNiwgMHg0MywgMHgzNCwgMHgwMSwgMHhlZiwgMHg1NCwgMHg0MCwgMHg2NCwgMHg0MCwgMHhmZSwKKyAgMHg2NSwgMHgyNywgMHg2MCwgMHgwNSwgMHg4ZSwgMHgyNywgMHg0MywgMHgzNCwgMHgwMSwgMHhlZiwgMHg1NCwgMHgyMCwgMHg2NCwgMHgyMCwgMHhmZX19LAorIHsweDA3NDYsIDY0LCB7IDB4NjUsIDB4MjgsIDB4NjAsIDB4MDUsIDB4OGUsIDB4MjgsIDB4NDMsIDB4MzQsIDB4MDEsIDB4OTAsIDB4N2YsIDB4OWEsIDB4ZTAsIDB4NTQsIDB4NDAsIDB4NjQsIDB4NDAsCisgIDB4ZmUsIDB4NjUsIDB4MmUsIDB4NjAsIDB4MDUsIDB4OGUsIDB4MmUsIDB4NDMsIDB4MzQsIDB4MDEsIDB4MzAsIDB4MDcsIDB4MzUsIDB4YzIsIDB4YWYsIDB4MzAsCisgIDB4MDIsIDB4MTgsIDB4OTAsIDB4N2YsIDB4YjgsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MjcsIDB4ZTUsIDB4MzksIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsIDB4YjcsCisgIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MzksIDB4YzIsIDB4MDIsIDB4YzIsIDB4MDcsIDB4ODAsIDB4MTYsIDB4OTAsIDB4N2YsIDB4YjYsIDB4ZTAsIDB4MjB9fSwKKyB7MHgwNzg2LCA2NCwgeyAweGUxLCAweDBmLCAweGU1LCAweDM5LCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweGI5LCAweGYwLCAweGU0LCAweGY1LCAweDM5LCAweGQyLCAweDAyLCAweGMyLCAweDA3LAorICAweGQyLCAweGFmLCAweDIwLCAweDA1LCAweDNkLCAweDMwLCAweDAzLCAweDFlLCAweDkwLCAweDdmLCAweGM2LCAweGUwLCAweDIwLCAweGUxLCAweDMzLCAweDkwLAorICAweDdlLCAweDQwLCAweGUwLCAweDEzLCAweDkyLCAweDBkLCAweDc1LCAweDNhLCAweDAxLCAweDkwLCAweDdmLCAweGM3LCAweGUwLCAweGY1LCAweDUzLCAweGQyLAorICAweDA1LCAweDc1LCAweDE2LCAweGZmLCAweDgwLCAweDFjLCAweDkwLCAweDdmLCAweGM4LCAweGUwLCAweDIwLCAweGUxLCAweDE1LCAweDkwLCAweDdkfX0sCisgezB4MDdjNiwgNjQsIHsgMHhjMCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwZCwgMHg3NSwgMHgzYSwgMHgwMSwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMCwgMHhmNSwgMHg1MywgMHhkMiwgMHgwNSwgMHg3NSwKKyAgMHgxNiwgMHhmZiwgMHgyMCwgMHgxNCwgMHgzMywgMHgyMCwgMHgwMCwgMHgwNiwgMHhlNSwgMHgzYSwgMHg2NSwgMHg1MywgMHg3MCwgMHgyYSwgMHgzMCwgMHgwNSwKKyAgMHgxYSwgMHgzMCwgMHgwMywgMHgwOSwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhmMCwgMHhjMiwgMHgwMywgMHg4MCwgMHgwNywgMHhlNCwgMHg5MCwgMHg3ZiwKKyAgMHhjOSwgMHhmMCwgMHhkMiwgMHgwMywgMHhjMiwgMHgwNSwgMHhlNCwgMHhmNSwgMHg1MywgMHhmNSwgMHgzYSwgMHgzMCwgMHgwZCwgMHgwYSwgMHhjMn19LAorIHsweDA4MDYsIDY0LCB7IDB4MGQsIDB4YzIsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YmIsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MzAsIDB4MTQsIDB4MDMsIDB4MDIsIDB4MDksIDB4MTQsIDB4MjAsIDB4MDUsCisgIDB4MDMsIDB4MDIsIDB4MDksIDB4MTQsIDB4MzAsIDB4MGMsIDB4MDMsIDB4MDIsIDB4MDksIDB4MTQsIDB4MzAsIDB4MDksIDB4MDMsIDB4MDIsIDB4MDksIDB4MTQsCisgIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTUsIDB4MzgsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MDksIDB4MTQsIDB4MzAsIDB4MDMsIDB4NjEsIDB4MzAsIDB4MTAsCisgIDB4MTIsIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODN9fSwKKyB7MHgwODQ2LCA2NCwgeyAweGUwLCAweDEzLCAweDkyLCAweDFiLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LAorICAweDgzLCAweGUwLCAweGZlLCAweGU1LCAweDNhLCAweGMzLCAweDk1LCAweDUzLCAweDUwLCAweDJhLCAweDMwLCAweDEwLCAweDEyLCAweGFmLCAweDNhLCAweDA1LAorICAweDNhLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDBlLCAweGFmLAorICAweDNhLCAweDA1LCAweDNhLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweGY1fX0sCisgezB4MDg4NiwgNjQsIHsgMHgzNiwgMHhkMiwgMHgwYiwgMHg4MCwgMHg2YSwgMHhjMiwgMHgwYiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhmMCwgMHhjMiwgMHgwMywgMHg4MCwgMHg1ZiwgMHgzMCwKKyAgMHgxMCwgMHgxMiwgMHhhZiwgMHgzYSwgMHgwNSwgMHgzYSwgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywKKyAgMHhlMCwgMHgxMywgMHg5MiwgMHgxYiwgMHhhZiwgMHgzYSwgMHgwNSwgMHgzYSwgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwKKyAgMHhmNSwgMHg4MywgMHhlMCwgMHhmZSwgMHhlNSwgMHgzYSwgMHhjMywgMHg5NSwgMHg1MywgMHg1MCwgMHgyYSwgMHgzMCwgMHgxMCwgMHgxMiwgMHhhZn19LAorIHsweDA4YzYsIDY0LCB7IDB4M2EsIDB4MDUsIDB4M2EsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGUsCisgIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsCisgIDB4MzYsIDB4ZDIsIDB4MGIsIDB4ODAsIDB4MDksIDB4YzIsIDB4MGIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZjAsIDB4ZDIsIDB4MDMsIDB4MzAsIDB4MTAsCisgIDB4MDQsIDB4YTIsIDB4MWIsIDB4OTIsIDB4OWIsIDB4ZDIsIDB4MTQsIDB4YzIsIDB4YWYsIDB4OGUsIDB4OTksIDB4MjAsIDB4MGIsIDB4MGQsIDB4MzB9fSwKKyB7MHgwOTA2LCA2NCwgeyAweDBkLCAweDBhLCAweGMyLCAweDBkLCAweGMyLCAweDAwLCAweDkwLCAweDdmLCAweGJiLCAweDc0LCAweDAxLCAweGYwLCAweGQyLCAweGFmLCAweDIyLCAweDkwLCAweDdmLAorICAweGU5LCAweGUwLCAweDEyLCAweDBkLCAweDMxLCAweDBhLCAweDExLCAweDAwLCAweDBhLCAweDdlLCAweDAxLCAweDBhLCAweGRiLCAweDAzLCAweDA5LCAweDM4LAorICAweDA2LCAweDBhLCAweDAyLCAweDA4LCAweDA5LCAweGY2LCAweDA5LCAweDA5LCAweGRlLCAweDBhLCAweDA5LCAweGVkLCAweDBiLCAweDAwLCAweDAwLCAweDBiLAorICAweDE5LCAweDkwLCAweDdmLCAweGViLCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE5LCAweDE0LCAweDYwLCAweDVhLCAweDI0LCAweDAyLCAweDYwfX0sCisgezB4MDk0NiwgNjQsIHsgMHgwMywgMHgwMiwgMHgwYiwgMHgxOSwgMHg3NCwgMHgwZCwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHg3NCwgMHg4NywgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwKKyAgMHgwYiwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgwNCwgMHg3ZiwgMHgwMiwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMywgMHg3NSwgMHg4MiwKKyAgMHhkOCwgMHg3NSwgMHg4MywgMHgwZCwgMHhlZiwgMHhmMCwgMHg3NSwgMHg4MiwgMHhkMSwgMHg3NSwgMHg4MywgMHgwZCwgMHhmMCwgMHg3NSwgMHg4MiwgMHhjYSwKKyAgMHg3NSwgMHg4MywgMHgwZCwgMHhmMCwgMHg3NSwgMHg4MiwgMHhjMywgMHg3NSwgMHg4MywgMHgwZCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMH19LAorIHsweDA5ODYsIDY0LCB7IDB4MDQsIDB4NzUsIDB4ODIsIDB4OWUsIDB4NzUsIDB4ODMsIDB4MGQsIDB4ZjAsIDB4NzQsIDB4MGQsIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4NzQsIDB4OTksIDB4OTAsCisgIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MGIsIDB4NzUsIDB4MTEsIDB4ZmYsIDB4NzUsCisgIDB4MTIsIDB4MGQsIDB4NzUsIDB4MTMsIDB4ZGMsIDB4ODAsIDB4MWIsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MGIsIDB4NzUsIDB4MTEsCisgIDB4ZmYsIDB4NzUsIDB4MTIsIDB4MGQsIDB4NzUsIDB4MTMsIDB4ZTAsIDB4ODAsIDB4MDksIDB4NzUsIDB4MTEsIDB4ZmYsIDB4NzUsIDB4MTIsIDB4MGR9fSwKKyB7MHgwOWM2LCA2NCwgeyAweDc1LCAweDEzLCAweGYwLCAweGFhLCAweDEyLCAweGE5LCAweDEzLCAweGFlLCAweDAyLCAweGVlLCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweGFmLCAweDAxLCAweGVmLAorICAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDBiLCAweDIwLCAweDkwLCAweDdmLCAweDAwLCAweGU1LCAweDE1LCAweGYwLCAweDkwLCAweDdmLCAweGI1LAorICAweDc0LCAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDIwLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGY1LCAweDE1LCAweDAyLCAweDBiLCAweDIwLCAweDEyLAorICAweDBjLCAweGIxLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGY1LCAweDE0LCAweDAyLCAweDBiLCAweDIwLCAweDkwLCAweDdmLCAweDAwLCAweGU1fX0sCisgezB4MGEwNiwgNjQsIHsgMHgxNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHg3ZiwKKyAgMHg2MCwgMHgyNywgMHgxNCwgMHg2MCwgMHgzNCwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwYiwgMHgxOSwgMHhhMiwgMHgxNywgMHhlNCwgMHgzMywKKyAgMHhmZiwgMHgyNSwgMHhlMCwgMHhmZiwgMHhhMiwgMHgxOSwgMHhlNCwgMHgzMywgMHg0ZiwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwgMHhhMywgMHhmMCwKKyAgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwYiwgMHgyMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhhM319LAorIHsweDBhNDYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsCisgIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsCisgIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4ZTQsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTd9fSwKKyB7MHgwYTg2LCA2NCwgeyAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDBiLCAweDIwLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDY0LCAweDAxLCAweDYwLCAweDAzLCAweDAyLCAweDBiLAorICAweDE5LCAweGMyLCAweDE3LCAweDAyLCAweDBiLCAweDIwLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDc2LCAweDkwLCAweDdmLCAweGVjLCAweGUwLAorICAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LAorICAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweDU0LCAweDgwfX0sCisgezB4MGFjNiwgNjQsIHsgMHhmZiwgMHgxMywgMHgxMywgMHgxMywgMHg1NCwgMHgxZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHg5MCwgMHg3ZiwgMHhkNywgMHhmMCwgMHhlMCwgMHg0NCwKKyAgMHgyMCwgMHhmMCwgMHg4MCwgMHg0NSwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxMCwgMHgyNCwgMHgwMiwgMHg3MCwgMHgzOSwKKyAgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg2NCwgMHgwMSwgMHg3MCwgMHgyYSwgMHhkMiwgMHgxNywgMHg4MCwgMHgyZCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwKKyAgMHg3MCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMH19LAorIHsweDBiMDYsIDY0LCB7IDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDEsIDB4ZjAsCisgIDB4ODAsIDB4MDcsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsCisgIDB4MjIsIDB4YzIsIDB4MTAsIDB4ZTQsIDB4ZjUsIDB4MTQsIDB4ZjUsIDB4MzQsIDB4YzIsIDB4MDksIDB4YzIsIDB4MGMsIDB4YzIsIDB4MGIsIDB4YzIsIDB4MTQsCisgIDB4YzIsIDB4MGQsIDB4YzIsIDB4MTYsIDB4YzIsIDB4MTEsIDB4YzIsIDB4MDcsIDB4YzIsIDB4MTIsIDB4YzIsIDB4MGYsIDB4YzIsIDB4MDgsIDB4ZjV9fSwKKyB7MHgwYjQ2LCA2NCwgeyAweDM1LCAweGY1LCAweDM5LCAweGY1LCAweDUzLCAweGY1LCAweDNhLCAweGY1LCAweDMzLCAweGY1LCAweDMwLCAweGY1LCAweDJmLCAweGY1LCAweDJlLCAweGY1LCAweDJkLAorICAweGY1LCAweDJjLCAweGY1LCAweDJiLCAweGY1LCAweDJhLCAweGY1LCAweDI5LCAweGY1LCAweDI4LCAweGY1LCAweDI3LCAweGY1LCAweDI2LCAweGY1LCAweDI1LAorICAweGY1LCAweDI0LCAweGMyLCAweDA1LCAweGMyLCAweDE4LCAweGMyLCAweDFhLCAweGMyLCAweDE3LCAweGMyLCAweDE5LCAweGMyLCAweDE1LCAweGMyLCAweDA0LAorICAweGQyLCAweDEzLCAweGMyLCAweDA2LCAweGMyLCAweDAxLCAweDkwLCAweDdmLCAweDkyLCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweGQyLCAweGU4fX0sCisgezB4MGI4NiwgNjQsIHsgMHg0MywgMHhkOCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhkZSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwKKyAgMHhmZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYSwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhZiwKKyAgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZSwgMHhlMCwgMHg0NCwgMHgwZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYywgMHg3NCwgMHgwZSwKKyAgMHhmMCwgMHhkMiwgMHhhZiwgMHhkMiwgMHhiYywgMHhkMiwgMHgxYiwgMHgxMiwgMHgwZiwgMHg1ZiwgMHhjMiwgMHgxOCwgMHgzMCwgMHgwNCwgMHgwM319LAorIHsweDBiYzYsIDY0LCB7IDB4MTIsIDB4MDUsIDB4NmQsIDB4MzAsIDB4MDQsIDB4MmEsIDB4MzAsIDB4MDYsIDB4MjcsIDB4YzIsIDB4MDYsIDB4ZTUsIDB4MTYsIDB4NjAsIDB4MTYsIDB4MTUsIDB4MTYsCisgIDB4OTAsIDB4N2YsIDB4ZDgsIDB4ZTAsIDB4MzAsIDB4ZTYsIDB4MDQsIDB4N2YsIDB4MDAsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MjAsIDB4OTAsIDB4N2YsIDB4OTYsCisgIDB4ZWYsIDB4ZjAsIDB4ODAsIDB4MDYsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4MjAsIDB4ZjAsIDB4MTIsIDB4MGMsIDB4MGIsIDB4ODAsIDB4Y2QsIDB4MzAsCisgIDB4MTgsIDB4MDcsIDB4YzIsIDB4MTgsIDB4MTIsIDB4MDksIDB4MTUsIDB4ODAsIDB4YzMsIDB4MzAsIDB4MWEsIDB4YzAsIDB4YzIsIDB4MWEsIDB4MTJ9fSwKKyB7MHgwYzA2LCA2NCwgeyAweDBmLCAweGJiLCAweDgwLCAweGI5LCAweDIyLCAweGU1LCAweDMxLCAweDYwLCAweDAyLCAweDE1LCAweDMxLCAweGU1LCAweDM5LCAweDYwLCAweDU1LCAweDY1LCAweDM1LAorICAweDcwLCAweDRiLCAweGU1LCAweDMzLCAweGY0LCAweDYwLCAweDAyLCAweDA1LCAweDMzLCAweGU1LCAweDMzLCAweGMzLCAweDk1LCAweDQ0LCAweDQwLCAweDQzLAorICAweGMyLCAweGFmLCAweDMwLCAweDAyLCAweDFiLCAweDkwLCAweDdmLCAweGI4LCAweGUwLCAweDIwLCAweGUxLCAweDJkLCAweDkwLCAweDdmLCAweGI3LCAweGU1LAorICAweDM5LCAweGYwLCAweGMyLCAweDAyLCAweGU0LCAweGY1LCAweDM5LCAweGY1LCAweDMzLCAweGY1LCAweDM1LCAweDc1LCAweDE2LCAweGZmLCAweDgwfX0sCisgezB4MGM0NiwgNjQsIHsgMHgxOSwgMHg5MCwgMHg3ZiwgMHhiNiwgMHhlMCwgMHgyMCwgMHhlMSwgMHgxMiwgMHg5MCwgMHg3ZiwgMHhiOSwgMHhlNSwgMHgzOSwgMHhmMCwgMHhkMiwgMHgwMiwgMHhlNCwKKyAgMHhmNSwgMHgzOSwgMHhmNSwgMHgzMywgMHhmNSwgMHgzNSwgMHg3NSwgMHgxNiwgMHhmZiwgMHhkMiwgMHhhZiwgMHg4MCwgMHgwNiwgMHg4NSwgMHgzOSwgMHgzNSwKKyAgMHhlNCwgMHhmNSwgMHgzMywgMHhlNSwgMHgyYywgMHg2MCwgMHgzMCwgMHgyMCwgMHgwZiwgMHgwNywgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHgzMCwgMHhlMCwKKyAgMHgwZiwgMHhlNSwgMHgyZCwgMHg2MCwgMHgwNiwgMHhlNCwgMHhmNSwgMHgyZCwgMHg0MywgMHgzNCwgMHgwMSwgMHhlNCwgMHhmNSwgMHgzMCwgMHg4MH19LAorIHsweDBjODYsIDY0LCB7IDB4MTQsIDB4ZTUsIDB4MzAsIDB4ZDMsIDB4OTUsIDB4NDUsIDB4NTAsIDB4MGQsIDB4ZTUsIDB4MzAsIDB4YjUsIDB4NDUsIDB4MDYsIDB4NzUsIDB4MmQsIDB4MDEsIDB4NDMsCisgIDB4MzQsIDB4MDEsIDB4MDUsIDB4MzAsIDB4YzIsIDB4MGYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZDksIDB4ZTAsIDB4MzAsIDB4ZTIsIDB4MDQsIDB4N2YsIDB4MDAsCisgIDB4ODAsIDB4MDIsIDB4N2YsIDB4MjAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZWYsIDB4ZjAsIDB4MjIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4OWMsIDB4NzQsIDB4MzAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4MjAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTQsIDB4NzR9fSwKKyB7MHgwY2M2LCA2NCwgeyAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk3LCAweDc0LCAweDg2LCAweGYwLCAweDkwLCAweDdmLCAweDk1LAorICAweDc0LCAweDAzLCAweGYwLCAweDkwLCAweDdmLCAweDllLCAweDc0LCAweDg0LCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweGYwLCAweGU0LCAweDkwLCAweDdmLAorICAweGM3LCAweGYwLCAweDkwLCAweDdmLCAweGM5LCAweGYwLCAweDkwLCAweDdmLCAweGNiLCAweGYwLCAweDc1LCAweDk4LCAweDQwLCAweDQzLCAweGE4LCAweDEwLAorICAweDkwLCAweDdmLCAweGRlLCAweDc0LCAweDFmLCAweGYwLCAweDkwLCAweDdmLCAweGRmLCAweDc0LCAweDBmLCAweGYwLCAweGQyLCAweDA0LCAweDIyfX0sCisgezB4MGQwNiwgNjQsIHsgMHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwMiwgMHhlNywgMHgyMiwgMHhiYiwgMHhmZSwgMHgwMiwgMHhlMywKKyAgMHgyMiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMiwgMHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhmMCwKKyAgMHgyMiwgMHg1MCwgMHgwMiwgMHhmNywgMHgyMiwgMHhiYiwgMHhmZSwgMHgwMSwgMHhmMywgMHgyMiwgMHhkMCwgMHg4MywgMHhkMCwgMHg4MiwgMHhmOCwgMHhlNCwKKyAgMHg5MywgMHg3MCwgMHgxMiwgMHg3NCwgMHgwMSwgMHg5MywgMHg3MCwgMHgwZCwgMHhhMywgMHhhMywgMHg5MywgMHhmOCwgMHg3NCwgMHgwMSwgMHg5M319LAorIHsweDBkNDYsIDY0LCB7IDB4ZjUsIDB4ODIsIDB4ODgsIDB4ODMsIDB4ZTQsIDB4NzMsIDB4NzQsIDB4MDIsIDB4OTMsIDB4NjgsIDB4NjAsIDB4ZWYsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ODAsIDB4ZGYsCisgIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4OTAsCisgIDB4N2YsIDB4YzQsIDB4ZTQsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDQsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsCisgIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgwZDg2LCA2NCwgeyAweDAwLCAweDEyLCAweDAxLCAweDEwLCAweDAxLCAweGZmLCAweDAwLCAweDAwLCAweDQwLCAweGNkLCAweDA2LCAweDBjLCAweDAxLCAweDAxLCAweDAwLCAweDAxLCAweDAyLAorICAweDAwLCAweDAyLCAweDA5LCAweDAyLCAweDQzLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDA5LCAweDA0LCAweDAwLCAweDAwLCAweDA3LAorICAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAxLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAyLCAweDAyLCAweDQwLAorICAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAzLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDgxLCAweDAyLCAweDQwLCAweDAwfX0sCisgezB4MGRjNiwgNjQsIHsgMHgwMSwgMHgwNywgMHgwNSwgMHg4MiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwKKyAgMHg4NCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNCwgMHgwMywgMHgwOSwgMHgwNCwgMHgxMCwgMHgwMywgMHg0YiwgMHgwMCwgMHg2NSwgMHgwMCwgMHg3OSwKKyAgMHgwMCwgMHg3MywgMHgwMCwgMHg3MCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHgwZSwgMHgwMywgMHg1MywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3MiwKKyAgMHgwMCwgMHg2OSwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwZSwgMHhhMiwgMHgwMCwgMHgwMiwgMHgwZX19LAorIHsweDBlMDYsIDY0LCB7IDB4N2IsIDB4MDAsIDB4MDIsIDB4MGQsIDB4NTcsIDB4MDAsIDB4MDIsIDB4MGUsIDB4YzksIDB4MDAsIDB4MDIsIDB4MGUsIDB4MTAsIDB4MDAsIDB4MDIsIDB4MGUsIDB4MTQsCisgIDB4MDAsIDB4MDIsIDB4MGUsIDB4MTgsIDB4MDAsIDB4MDIsIDB4MGUsIDB4MWMsIDB4MDAsIDB4MDIsIDB4MGUsIDB4ZjAsIDB4MDAsIDB4MDIsIDB4MGUsIDB4MjQsCisgIDB4MDAsIDB4MDIsIDB4MGYsIDB4MTUsIDB4MDAsIDB4MDIsIDB4MGUsIDB4MmMsIDB4MDAsIDB4MDIsIDB4MGYsIDB4M2EsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTUsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWQsIDB4ZTAsIDB4NDQsIDB4MDJ9fSwKKyB7MHgwZTQ2LCA2NCwgeyAweGYwLCAweDkwLCAweDdmLCAweDk3LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LCAweDEwLCAweGYwLCAweGU0LCAweDkwLCAweDdmLAorICAweDk2LCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweDc0LCAweGZlLCAweGYwLCAweDMwLCAweDE3LCAweDA0LCAweDdmLCAweDgwLCAweDgwLCAweDAyLCAweDdmLAorICAweDAwLCAweDkwLCAweDdmLCAweDk3LCAweGVmLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk1LCAweGYwLCAweDkwLCAweDdmLCAweDllLCAweGYwLCAweDkwLAorICAweDdmLCAweDk4LCAweGYwLCAweDIyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwfX0sCisgezB4MGU4NiwgNjQsIHsgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMiwgMHhmMCwgMHhkMiwgMHgwNiwgMHhkMCwgMHg4NiwKKyAgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwKKyAgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhkMiwgMHgxOCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwKKyAgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4M319LAorIHsweDBlYzYsIDY0LCB7IDB4ZDAsIDB4ZTAsIDB4MzIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsCisgIDB4MDAsIDB4ZDIsIDB4MWEsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsCisgIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsCisgIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YTksIDB4NzR9fSwKKyB7MHgwZjA2LCA2NCwgeyAweDAyLCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweGMwLCAweGUwLAorICAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweDUzLCAweDkxLCAweGVmLAorICAweDkwLCAweDdmLCAweGE5LCAweDc0LCAweDA0LCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLAorICAweGQwLCAweGUwLCAweDMyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2fX0sCisgezB4MGY0NiwgNjQsIHsgMHg3NSwgMHg4NiwgMHgwMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhOSwgMHg3NCwgMHgwOCwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwKKyAgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHhlMCwKKyAgMHg0NCwgMHgwOCwgMHhmMCwgMHgzMCwgMHgxYiwgMHgwNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg3ZiwgMHhmNCwgMHg3ZSwgMHgwMSwgMHgxMiwgMHgwMCwKKyAgMHgwMywgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmNywgMHhmMCwgMHhlMCwgMHg0NCwgMHgwNCwgMHhmMCwgMHgyMiwgMHg3NCwgMHgwMH19LAorIHsweDBmODYsIDY0LCB7IDB4ZjUsIDB4ODYsIDB4OTAsIDB4ZmQsIDB4YTUsIDB4N2MsIDB4MDUsIDB4YTMsIDB4ZTUsIDB4ODIsIDB4NDUsIDB4ODMsIDB4NzAsIDB4ZjksIDB4MjIsIDB4OTAsIDB4N2YsCisgIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4NDMsIDB4ODcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4OTAsIDB4N2YsCisgIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4N2YsIDB4MGQsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDMsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsCisgIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4MjIsIDB4MTIsIDB4MGUsIDB4MzMsIDB4MTIsIDB4MGYsIDB4OTUsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4MzB9fSwKKyB7MHgwZmM2LCAgOSwgeyAweGU3LCAweDAzLCAweDEyLCAweDBmLCAweGE1LCAweDEyLCAweDBjLCAweGIxLCAweDIyfX0sCisgezB4ZmZmZiwJMCwJezB4MDB9fQorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTE5cXdfZncuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTE5cXdfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODAzZjhiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMTlxd19mdy5oCkBAIC0wLDAgKzEsNDQ4IEBACisvKiBrZXlzcGFuX3VzYTE5cXdfZncuaAorCisJVGhlIGZpcm13YXJlIGNvbnRhaW5lZCBoZXJlaW4gYXMga2V5c3Bhbl91c2ExOXdxX2Z3LmggaXMKKworCQlDb3B5cmlnaHQgKEMpIDE5OTktMjAwMQorCQlLZXlzcGFuLCBBIGRpdmlzaW9uIG9mIElubm9TeXMgSW5jb3Jwb3JhdGVkICgiS2V5c3BhbiIpCisJCQorCWFzIGFuIHVucHVibGlzaGVkIHdvcmsuIFRoaXMgbm90aWNlIGRvZXMgbm90IGltcGx5IHVucmVzdHJpY3RlZCBvcgorCXB1YmxpYyBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIGZyb20gd2hpY2ggdGhpcyBmaXJtd2FyZSBpbWFnZSBpcworCWRlcml2ZWQuICBFeGNlcHQgYXMgbm90ZWQgYmVsb3cgdGhpcyBmaXJtd2FyZSBpbWFnZSBtYXkgbm90IGJlIAorCXJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQgCisJS2V5c3BhbidzIHByaW9yIHdyaXR0ZW4gY29uc2VudC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKwlQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgCisJaW1hZ2UgYXMgcGFydCBvZiBhIExpbnV4IG9yIG90aGVyIE9wZW4gU291cmNlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIAorCWluIHRleHQgb3IgYmluYXJ5IGZvcm0gYXMgcmVxdWlyZWQuIAorCisJVGhpcyBmaXJtd2FyZSBtYXkgbm90IGJlIG1vZGlmaWVkIGFuZCBtYXkgb25seSBiZSB1c2VkIHdpdGggIAorCUtleXNwYW4gaGFyZHdhcmUuICBEaXN0cmlidXRpb24gYW5kL29yIE1vZGlmaWNhdGlvbiBvZiB0aGUgCisJa2V5c3Bhbi5jIGRyaXZlciB3aGljaCBpbmNsdWRlcyB0aGlzIGZpcm13YXJlLCBpbiB3aG9sZSBvciBpbiAKKwlwYXJ0LCByZXF1aXJlcyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3RhdGVtZW50LiIKKworKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkIGtleXNwYW5fdXNhMTlxd19maXJtd2FyZVtdID0geworIHsweDAwMzMsICAzLCB7IDB4MDIsIDB4MDAsIDB4MmR9fSwKKyB7MHgwMDJkLCAgNCwgeyAweDUzLCAweGQ4LCAweGVmLCAweDMyfX0sCisgezB4MDA0NiwgMTYsIHsgMHgzMCwgMHgxMCwgMHgxOSwgMHgxMiwgMHgwZSwgMHgwZiwgMHhlZiwgMHhjMywgMHg5NSwgMHgxNCwgMHg0MCwgMHgwMywgMHgwMiwgMHgwMCwgMHhkZiwgMHg5MH19LAorIHsweDAwNTYsIDE2LCB7IDB4N2YsIDB4YmYsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4YzIsIDB4MTAsIDB4YzIsIDB4MGIsIDB4MDIsIDB4MDAsIDB4ZGYsIDB4MzAsIDB4MGQsIDB4M2UsIDB4OTB9fSwKKyB7MHgwMDY2LCAxNiwgeyAweDdmLCAweGM2LCAweGUwLCAweDIwLCAweGUxLCAweDczLCAweDEyLCAweDBlLCAweDBmLCAweGVmLCAweGMzLCAweDk0LCAweDQwLCAweDUwLCAweDZhLCAweDkwfX0sCisgezB4MDA3NiwgMTYsIHsgMHg3ZSwgMHg0MCwgMHhlMCwgMHgxMywgMHg5MiwgMHgxMCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhlMCwgMHgxNCwgMHhmNSwgMHgzNiwgMHgyMCwgMHgwYiwgMHgxMX19LAorIHsweDAwODYsIDE2LCB7IDB4NjAsIDB4MGYsIDB4ZjUsIDB4MjQsIDB4N2UsIDB4N2UsIDB4N2YsIDB4NDEsIDB4NzUsIDB4MjksIDB4N2UsIDB4NzUsIDB4MmEsIDB4NDEsIDB4MTIsIDB4MDl9fSwKKyB7MHgwMDk2LCAxNiwgeyAweDEwLCAweGMyLCAweDBkLCAweGU0LCAweDkwLCAweDdmLCAweGM3LCAweGYwLCAweDc1LCAweDI2LCAweGZmLCAweDgwLCAweDNjLCAweDkwLCAweDdmLCAweGM4fX0sCisgezB4MDBhNiwgMTYsIHsgMHhlMCwgMHgyMCwgMHhlMSwgMHgzNSwgMHgxMiwgMHgwZSwgMHgwZiwgMHhlZiwgMHhjMywgMHg5NCwgMHg0MCwgMHg1MCwgMHgyYywgMHg5MCwgMHg3ZCwgMHhjMH19LAorIHsweDAwYjYsIDE2LCB7IDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTAsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZTAsIDB4MTQsIDB4ZjUsIDB4MzYsIDB4MjAsIDB4MGIsIDB4MTEsIDB4NjAsIDB4MGZ9fSwKKyB7MHgwMGM2LCAxNiwgeyAweGY1LCAweDI0LCAweDdlLCAweDdkLCAweDdmLCAweGMxLCAweDc1LCAweDI5LCAweDdkLCAweDc1LCAweDJhLCAweGMxLCAweDEyLCAweDA5LCAweDEwLCAweGQyfX0sCisgezB4MDBkNiwgMTYsIHsgMHgwZCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhmMCwgMHg3NSwgMHgyNiwgMHhmZiwgMHg5MCwgMHg3ZiwgMHhiNiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwM319LAorIHsweDAwZTYsIDE2LCB7IDB4MDIsIDB4MDEsIDB4NjgsIDB4MTIsIDB4MGMsIDB4ZmYsIDB4OGYsIDB4MzYsIDB4MTIsIDB4MGUsIDB4MWIsIDB4OGYsIDB4MTEsIDB4ZTUsIDB4MzYsIDB4YzN9fSwKKyB7MHgwMGY2LCAxNiwgeyAweDk1LCAweDEzLCAweDUwLCAweDBmLCAweDEyLCAweDBkLCAweGRlLCAweGVmLCAweDMwLCAweGUwLCAweDA4LCAweGU1LCAweDExLCAweDIwLCAweGU3LCAweDAzfX0sCisgezB4MDAzNiwgMTIsIHsgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMn19LAorIHsweDAwNDMsICAzLCB7IDB4MDIsIDB4MGUsIDB4MDB9fSwKKyB7MHgwMDAzLCAxNiwgeyAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweDkwfX0sCisgezB4MDAxMywgMTYsIHsgMHg3ZiwgMHhjNCwgMHhlNCwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwNCwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMH19LAorIHsweDAwMjMsIDEwLCB7IDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9fSwKKyB7MHgwMDAwLCAgMywgeyAweDAyLCAweDA5LCAweGM1fX0sCisgezB4MDEwNiwgNjQsIHsgMHgzMCwgMHgxMywgMHg1ZiwgMHhjMiwgMHgxMywgMHhlNSwgMHgzNiwgMHg2MCwgMHg1OSwgMHhiNCwgMHg4MCwgMHgwMywgMHg0MywgMHgxMSwgMHgwMiwgMHhlNSwgMHgxMSwKKyAgMHgzMCwgMHhlNywgMHgyNCwgMHhlNSwgMHgzNiwgMHhkMywgMHg5NCwgMHgyMCwgMHg0MCwgMHgwMywgMHg3NSwgMHgzNiwgMHgyMCwgMHg4NSwgMHgzNiwgMHgyNCwKKyAgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg4MCwgMHg3NSwgMHgyOSwgMHg3ZSwgMHg3NSwgMHgyYSwgMHg4MCwgMHgxMiwgMHgwYiwgMHg5YSwgMHhlNSwgMHgzNiwgMHgyNSwKKyAgMHhlMCwgMHg5MCwgMHg3ZiwgMHhiNywgMHhmMCwgMHg4MCwgMHgyYSwgMHhlNSwgMHgzNiwgMHhkMywgMHg5NCwgMHgzZiwgMHg0MCwgMHgwMywgMHg3NX19LAorIHsweDAxNDYsIDY0LCB7IDB4MzYsIDB4M2YsIDB4ODUsIDB4MzYsIDB4MjQsIDB4OTAsIDB4N2UsIDB4ODAsIDB4ZTUsIDB4MTEsIDB4ZjAsIDB4N2UsIDB4N2UsIDB4N2YsIDB4ODEsIDB4NzUsIDB4MjksCisgIDB4N2UsIDB4NzUsIDB4MmEsIDB4ODEsIDB4MTIsIDB4MDksIDB4MzUsIDB4ZTUsIDB4MzYsIDB4MDQsIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZjAsIDB4NzUsIDB4MjYsCisgIDB4ZmYsIDB4OTAsIDB4N2YsIDB4Y2UsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDYsIDB4MjAsIDB4MGUsIDB4MDMsIDB4MDIsIDB4MDMsIDB4YzQsIDB4ZTQsIDB4ZjUsCisgIDB4MzUsIDB4NzQsIDB4NDAsIDB4MjUsIDB4MzUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2MsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTV9fSwKKyB7MHgwMTg2LCA2NCwgeyAweDM1LCAweDdjLCAweDAwLCAweDdiLCAweDAxLCAweDdhLCAweDdlLCAweDc5LCAweDAwLCAweDI0LCAweDAwLCAweGY5LCAweGVjLCAweDM0LCAweDdlLCAweGZhLCAweGVmLAorICAweDEyLCAweDBhLCAweDk3LCAweDA1LCAweDM1LCAweGU1LCAweDM1LCAweGI0LCAweDIwLCAweGQ3LCAweDkwLCAweDdlLCAweDAwLCAweGUwLCAweDYwLCAweDZlLAorICAweDdmLCAweDAxLCAweDkwLCAweDdlLCAweDExLCAweGUwLCAweGZkLCAweDEyLCAweDBjLCAweGRhLCAweDkwLCAweDdlLCAweDAxLCAweGUwLCAweGZmLCAweDEyLAorICAweDBjLCAweDFjLCAweDkwLCAweDdlLCAweDAyLCAweGUwLCAweGZmLCAweDEyLCAweDBjLCAweDQyLCAweGQyLCAweDExLCAweGQyLCAweDEyLCAweDc1fX0sCisgezB4MDFjNiwgNjQsIHsgMHgzNiwgMHgwNCwgMHg5MCwgMHg3ZSwgMHgwMywgMHhlMCwgMHg2MCwgMHgwNSwgMHhjMiwgMHgxMiwgMHg0MywgMHgzNiwgMHhjMCwgMHg5MCwgMHg3ZSwgMHgwNCwgMHhlMCwKKyAgMHhiNCwgMHgwMSwgMHgwNywgMHhjMiwgMHgxMiwgMHg0MywgMHgzNiwgMHgwYiwgMHg4MCwgMHgxMCwgMHg5MCwgMHg3ZSwgMHgwNCwgMHhlMCwgMHg2MCwgMHgwNywKKyAgMHhjMiwgMHgxMSwgMHg0MywgMHgzNiwgMHgwOSwgMHg4MCwgMHgwMywgMHg0MywgMHgzNiwgMHgwMiwgMHg3ZiwgMHgwMywgMHhhZCwgMHgzNiwgMHgxMiwgMHgwYywKKyAgMHhkYSwgMHg0MywgMHgxYSwgMHg4MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHgxYX19LAorIHsweDAyMDYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4ZTUsIDB4MTcsIDB4NDQsIDB4MDYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsCisgIDB4MDUsIDB4ZTAsIDB4NjAsIDB4MTIsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4M2YsIDB4ZjUsIDB4MTksIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsCisgIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4MTksIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MDcsIDB4ZTAsIDB4NjAsIDB4NDIsIDB4OTAsIDB4N2UsIDB4MTMsIDB4ZTAsCisgIDB4NjAsIDB4MDUsIDB4NDMsIDB4MTYsIDB4MDQsIDB4ODAsIDB4MDMsIDB4NTMsIDB4MTYsIDB4ZmIsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4MTYsIDB4MTJ9fSwKKyB7MHgwMjQ2LCA2NCwgeyAweDBjLCAweGRhLCAweDkwLCAweDdlLCAweDA4LCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDE4LCAweDgwLCAweDgwLCAweDAzLCAweDUzLCAweDE4LCAweDdmLCAweDUzLAorICAweDE4LCAweGZjLCAweDkwLCAweDdlLCAweDA5LCAweGUwLCAweDYwLCAweDExLCAweDQzLCAweDE4LCAweDAyLCAweGEzLCAweGUwLCAweGZmLCAweDEyLCAweDBjLAorICAweDhlLCAweDkwLCAweDdlLCAweDBiLCAweGUwLCAweGZmLCAweDEyLCAweDBjLCAweGI0LCAweGFmLCAweDE4LCAweDEyLCAweDBjLCAweDY4LCAweDkwLCAweDdlLAorICAweDBlLCAweGUwLCAweDYwLCAweDE4LCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDFhLCAweDAxLCAweDgwLCAweDAzLCAweDUzLCAweDFhfX0sCisgezB4MDI4NiwgNjQsIHsgMHhmZSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHgxYSwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgwYywgMHhlMCwKKyAgMHg2MCwgMHgxOCwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHgxYSwgMHgwMiwgMHg4MCwgMHgwMywgMHg1MywgMHgxYSwgMHhmZCwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHgxYSwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgxMiwgMHhlMCwgMHhmNSwgMHgxMywKKyAgMHhhMywgMHhlMCwgMHgxMywgMHg5MiwgMHgxNCwgMHhhMywgMHhlMCwgMHhmNSwgMHgxNCwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHgxYX19LAorIHsweDAyYzYsIDY0LCB7IDB4MTAsIDB4ODAsIDB4MDMsIDB4NTMsIDB4MWEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4MWEsCisgIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MTYsIDB4ZTAsIDB4NjAsIDB4MzIsIDB4NTMsIDB4MTksIDB4YmYsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsCisgIDB4ZTUsIDB4MTksIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4MTIsIDB4MGQsCisgIDB4ZDIsIDB4ZWYsIDB4NTQsIDB4ZmUsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4NTMsIDB4MTYsIDB4ZmQsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4MTZ9fSwKKyB7MHgwMzA2LCA2NCwgeyAweDEyLCAweDBjLCAweGRhLCAweGU0LCAweGY1LCAweDBlLCAweGY1LCAweDBkLCAweGQyLCAweDBmLCAweDkwLCAweDdlLCAweDE3LCAweGUwLCAweDYwLCAweDBmLCAweDQzLAorICAweDE2LCAweDAyLCAweGU0LCAweGZmLCAweGFkLCAweDE2LCAweDEyLCAweDBjLCAweGRhLCAweDc1LCAweDBkLCAweDAxLCAweGQyLCAweDBmLCAweDkwLCAweDdlLAorICAweDE4LCAweGUwLCAweDYwLCAweDEwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweGU1LCAweDE3LCAweDQ0LCAweDA0LCAweDkwLCAweGMwLAorICAweDAwLCAweGYwLCAweGQyLCAweDBiLCAweDkwLCAweDdlLCAweDE5LCAweGUwLCAweDYwLCAweDExLCAweDQzLCAweDE5LCAweDQwLCAweDkwLCAweDdmfX0sCisgezB4MDM0NiwgNjQsIHsgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHgxOSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgxYSwgMHhlMCwgMHg2MCwKKyAgMHgwZiwgMHg1MywgMHgxNiwgMHhmZSwgMHhlNCwgMHhmZiwgMHhhZCwgMHgxNiwgMHgxMiwgMHgwYywgMHhkYSwgMHg3NSwgMHgwZiwgMHgwMSwgMHhkMiwgMHgwZiwKKyAgMHg5MCwgMHg3ZSwgMHgxYiwgMHhlMCwgMHg2MCwgMHgwZiwgMHg0MywgMHgxNiwgMHgwMSwgMHhlNCwgMHhmZiwgMHhhZCwgMHgxNiwgMHgxMiwgMHgwYywgMHhkYSwKKyAgMHhlNCwgMHhmNSwgMHgwZiwgMHhkMiwgMHgwZiwgMHg5MCwgMHg3ZSwgMHgxYywgMHhlMCwgMHg2MCwgMHgwZSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NH19LAorIHsweDAzODYsIDY0LCB7IDB4MTIsIDB4ZjAsIDB4ZTUsIDB4MTcsIDB4NDQsIDB4MDIsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MWQsIDB4ZTAsIDB4NjAsIDB4MDIsIDB4ZDIsCisgIDB4MTMsIDB4OTAsIDB4N2UsIDB4MWUsIDB4ZTAsIDB4NjAsIDB4MDgsIDB4NzUsIDB4MTAsIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4MTIsIDB4ZDIsIDB4MGYsIDB4OTAsCisgIDB4N2UsIDB4MWYsIDB4ZTAsIDB4NjAsIDB4MTEsIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4NzQsIDB4MzEsIDB4ZjAsIDB4NzQsIDB4MTUsCisgIDB4ZjAsIDB4NzQsIDB4MzUsIDB4ZjAsIDB4ZDIsIDB4MGQsIDB4YzIsIDB4MGUsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4Y2YsIDB4ZjAsIDB4MzAsIDB4MTZ9fSwKKyB7MHgwM2M2LCA2NCwgeyAweDcxLCAweGU1LCAweDEyLCAweDYwLCAweDAyLCAweDE1LCAweDEyLCAweGU1LCAweDMwLCAweGQzLCAweDk0LCAweDAwLCAweDQwLCAweDA0LCAweDE1LCAweDMwLCAweDgwLAorICAweDYwLCAweDc1LCAweDMwLCAweDBhLCAweDEyLCAweDBkLCAweGQyLCAweGVmLCAweDU0LCAweDAxLCAweGY1LCAweDM2LCAweDY1LCAweDBlLCAweDYwLCAweDA3LAorICAweDg1LCAweDM2LCAweDBlLCAweGQyLCAweDBmLCAweDgwLCAweDExLCAweDEyLCAweDBlLCAweDI3LCAweGVmLCAweDU0LCAweDEwLCAweGY1LCAweDM2LCAweDY1LAorICAweDA5LCAweDYwLCAweDA1LCAweDg1LCAweDM2LCAweDA5LCAweGQyLCAweDBmLCAweDEyLCAweDBlLCAweDI3LCAweGVmLCAweDU0LCAweDgwLCAweGY1fX0sCisgezB4MDQwNiwgNjQsIHsgMHgzNiwgMHg2NSwgMHgwYSwgMHg2MCwgMHgwNSwgMHg4NSwgMHgzNiwgMHgwYSwgMHhkMiwgMHgwZiwgMHgxMiwgMHgwZSwgMHgyNywgMHhlZiwgMHg1NCwgMHgyMCwgMHhmNSwKKyAgMHgzNiwgMHg2NSwgMHgwYiwgMHg2MCwgMHgwOCwgMHg4NSwgMHgzNiwgMHgwYiwgMHgzMCwgMHgxMSwgMHgwMiwgMHhkMiwgMHgwZiwgMHgxMiwgMHgwZSwgMHgyNywKKyAgMHhlZiwgMHg1NCwgMHg0MCwgMHhmNSwgMHgzNiwgMHg2NSwgMHgwYywgMHg2MCwgMHgwOCwgMHg4NSwgMHgzNiwgMHgwYywgMHgzMCwgMHgxMiwgMHgwMiwgMHhkMiwKKyAgMHgwZiwgMHgzMCwgMHgxNiwgMHgyYSwgMHg5MCwgMHg3ZiwgMHhkMiwgMHhlMCwgMHgyMCwgMHhlMSwgMHgyMywgMHg5MCwgMHg3YiwgMHg0MCwgMHhlMH19LAorIHsweDA0NDYsIDY0LCB7IDB4NjAsIDB4MDksIDB4ZTAsIDB4ZjUsIDB4MzIsIDB4OTAsIDB4N2IsIDB4NDIsIDB4ZTAsIDB4ZjUsIDB4MzMsIDB4OTAsIDB4N2IsIDB4NDEsIDB4ZTAsIDB4NjAsIDB4MDksCisgIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTcsIDB4ZjAsIDB4NzQsIDB4MzcsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4ZDMsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4YzIsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MDUsIDB4MjksIDB4ZTUsIDB4MjcsIDB4NzAsIDB4NDAsIDB4MzAsIDB4MGYsIDB4MzksIDB4ZTUsCisgIDB4MTIsIDB4NzAsIDB4MzUsIDB4YzIsIDB4MGYsIDB4ZjUsIDB4MzUsIDB4N2UsIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MDgsIDB4MjUsIDB4MzV9fSwKKyB7MHgwNDg2LCA2NCwgeyAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhLCAweDEyLCAweDBhLCAweDUxLCAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDM1LCAweGY1LCAweDgyLCAweGU0LCAweDM0LAorICAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDM1LCAweGU1LCAweDM1LCAweGI0LCAweDA5LCAweGRiLCAweDkwLCAweDdmLCAweGMzLCAweDc0LAorICAweDA5LCAweGYwLCAweDc1LCAweDEyLCAweDEwLCAweGU0LCAweGY1LCAweDEwLCAweDc1LCAweDI3LCAweDAyLCAweDIyLCAweGU1LCAweDI3LCAweDY0LCAweDAyLAorICAweDcwLCAweDM2LCAweDMwLCAweDA1LCAweDJmLCAweGMyLCAweDA1LCAweGY1LCAweDM1LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDJifX0sCisgezB4MDRjNiwgNjQsIHsgMHgyNSwgMHgzNSwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgwYSwgMHg1MSwgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNSwgMHgzNSwgMHhmNSwgMHg4MiwKKyAgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgzNSwgMHhlNSwgMHgzNSwgMHhiNCwgMHgwNSwgMHhkYiwgMHg5MCwgMHg3ZiwKKyAgMHhjMywgMHg3NCwgMHgwNSwgMHhmMCwgMHg3NSwgMHgyNywgMHgwMywgMHgyMiwgMHhlNSwgMHgzMiwgMHg2MCwgMHgzMywgMHg3NSwgMHgzMSwgMHgwMywgMHgxNSwKKyAgMHgzMiwgMHhlNCwgMHhmNSwgMHgzNSwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwgMHgzMSwgMHgyNSwgMHgzNSwgMHhmOSwgMHhlZSwgMHgzNH19LAorIHsweDA1MDYsIDY0LCB7IDB4MDAsIDB4ZmEsIDB4MTIsIDB4MGEsIDB4NTEsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjUsIDB4MzUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsCisgIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MzUsIDB4ZTUsIDB4MzUsIDB4YjQsIDB4MDMsIDB4ZGIsIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTQsCisgIDB4ZjUsIDB4MjcsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZTksIDB4ZTAsIDB4MTIsIDB4MGEsIDB4YTksIDB4MDYsIDB4MDgsIDB4MDAsIDB4MDYsIDB4N2MsIDB4MDEsCisgIDB4MDYsIDB4ZTksIDB4MDMsIDB4MDUsIDB4NGQsIDB4MDYsIDB4MDUsIDB4ZjksIDB4MDgsIDB4MDUsIDB4ZWQsIDB4MDksIDB4MDUsIDB4ZDUsIDB4MGF9fSwKKyB7MHgwNTQ2LCA2NCwgeyAweDA1LCAweGU0LCAweDBiLCAweDAwLCAweDAwLCAweDA3LCAweDM5LCAweDkwLCAweDdmLCAweGViLCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE2LCAweDE0LCAweDYwLAorICAweDUwLCAweDI0LCAweDAyLCAweDcwLCAweDZmLCAweDc0LCAweDE5LCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweDc0LCAweDAwLCAweDkwLCAweDdmLCAweGQ1LAorICAweGYwLCAweDAyLCAweDA3LCAweDQwLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDA0LCAweDdmLCAweDAyLCAweDgwLCAweDAyLCAweDdmLCAweDAzLAorICAweDc1LCAweDgyLCAweDgyLCAweDc1LCAweDgzLCAweDE5LCAweGVmLCAweGYwLCAweDc1LCAweDgyLCAweDc0LCAweDc1LCAweDgzLCAweDE5LCAweGYwfX0sCisgezB4MDU4NiwgNjQsIHsgMHg3NSwgMHg4MiwgMHg1OCwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHgwNCwgMHg3NSwgMHg4MiwgMHgxNywgMHg3NSwgMHg4MywKKyAgMHgxOSwgMHhmMCwgMHg3NCwgMHgxOSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHg3NCwgMHgxMiwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwNywKKyAgMHg0MCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmZiwgMHgxMiwgMHgwYiwgMHgxYywgMHhlYSwgMHg0OSwgMHg2MCwgMHgwZCwgMHhlYSwgMHg5MCwgMHg3ZiwKKyAgMHhkNCwgMHhmMCwgMHhlOSwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwNywgMHg0MCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NH19LAorIHsweDA1YzYsIDY0LCB7IDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDcsIDB4NDAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDcsIDB4NDAsIDB4OTAsIDB4N2YsCisgIDB4MDAsIDB4ZTUsIDB4MjUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDcsIDB4NDAsIDB4OTAsIDB4N2YsIDB4ZWEsCisgIDB4ZTAsIDB4ZjUsIDB4MjUsIDB4MDIsIDB4MDcsIDB4NDAsIDB4MTIsIDB4MDcsIDB4NDgsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MjMsIDB4MDIsCisgIDB4MDcsIDB4NDAsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4MjMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MDJ9fSwKKyB7MHgwNjA2LCA2NCwgeyAweDA3LCAweDQwLCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweDdmLCAweDYwLCAweDI0LCAweDE0LCAweDYwLCAweDMxLCAweDI0LCAweDAyLCAweDcwLCAweDViLAorICAweGEyLCAweDAxLCAweGU0LCAweDMzLCAweGZmLCAweDI1LCAweGUwLCAweGZmLCAweGEyLCAweDA3LCAweGU0LCAweDMzLCAweDRmLCAweDkwLCAweDdmLCAweDAwLAorICAweGYwLCAweGU0LCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDA3LCAweDQwLCAweGU0LCAweDkwLCAweDdmLAorICAweDAwLCAweGYwLCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDA3LCAweDQwLCAweDkwLCAweDdmfX0sCisgezB4MDY0NiwgNjQsIHsgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwKKyAgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmZCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwKKyAgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwNywgMHg0MCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwKKyAgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNywgMHg0MCwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxZSwgMHgyNCwgMHgwMn19LAorIHsweDA2ODYsIDY0LCB7IDB4NjAsIDB4MDMsIDB4MDIsIDB4MDcsIDB4NDAsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDYsIDB4MTIsIDB4MGQsIDB4ZjksIDB4MDIsIDB4MDcsCisgIDB4NDAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDcsIDB4NDAsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsCisgIDB4MzgsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsCisgIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4OTB9fSwKKyB7MHgwNmM2LCA2NCwgeyAweDdmLCAweGVjLCAweGUwLCAweDU0LCAweDgwLCAweGZmLCAweDEzLCAweDEzLCAweDEzLCAweDU0LCAweDFmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDkwLAorICAweDdmLCAweGQ3LCAweGYwLCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAweDgwLCAweDYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLAorICAweDgwLCAweDU3LCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE5LCAweDI0LCAweDAyLCAweDcwLCAweDRiLCAweDkwLCAweDdmLAorICAweGVhLCAweGUwLCAweGI0LCAweDAxLCAweDA1LCAweDEyLCAweDBkLCAweGY2LCAweDgwLCAweDNmLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0fX0sCisgezB4MDcwNiwgNjQsIHsgMHgwMSwgMHhmMCwgMHg4MCwgMHgzNiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwKKyAgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwKKyAgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHg3NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwKKyAgMHg4MCwgMHgwNywgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMn19LAorIHsweDA3NDYsIDY0LCB7IDB4ZjAsIDB4MjIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4NzQsIDB4MzAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsCisgIDB4MjAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTUsIDB4NzQsIDB4YzAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4M2YsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4OGUsIDB4OTAsIDB4N2YsIDB4ZGYsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGUsCisgIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MDgsIDB4N2YsIDB4MDEsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MDgsIDB4MmYsIDB4ZjksIDB4ZTQsIDB4MzQsIDB4MDB9fSwKKyB7MHgwNzg2LCA2NCwgeyAweGZhLCAweGU0LCAweDEyLCAweDBhLCAweDk3LCAweDBmLCAweGJmLCAweDA5LCAweGVlLCAweDc1LCAweDEzLCAweDAxLCAweGU0LCAweGY1LCAweDEyLCAweGY1LCAweDMwLAorICAweGY1LCAweDExLCAweGMyLCAweDBmLCAweGMyLCAweDEzLCAweGMyLCAweDBlLCAweGMyLCAweDBiLCAweGMyLCAweDEwLCAweGMyLCAweDA0LCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDc1LCAweDE5LCAweDAzLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweDAzLCAweGYwLCAweDdmLCAweDBjLCAweGU0LAorICAweGZkLCAweDEyLCAweDBjLCAweGRhLCAweDdmLCAweDEwLCAweDhmLCAweDE4LCAweDEyLCAweDBjLCAweDY4LCAweDkwLCAweDdmLCAweDk4LCAweDc0fX0sCisgezB4MDdjNiwgNjQsIHsgMHgxMiwgMHhmMCwgMHg3ZiwgMHgwMSwgMHg4ZiwgMHgxNywgMHhlZiwgMHg0NCwgMHgwNiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgwZiwgMHhlNCwgMHhmZCwgMHgxMiwKKyAgMHgwYywgMHhkYSwgMHhlNCwgMHhmZiwgMHg3ZSwgMHhhMywgMHhhZCwgMHgwNiwgMHg4ZCwgMHgxNiwgMHgxMiwgMHgwYywgMHhkYSwgMHg5MCwgMHg3ZiwgMHg5OCwKKyAgMHg3NCwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNCwgMHhmMCwgMHg3ZiwgMHgwNSwgMHg3ZCwgMHg3ZiwgMHgxMiwgMHgwYywgMHhkYSwgMHg3ZiwKKyAgMHgwMSwgMHgxMiwgMHgwZCwgMHg2YSwgMHg3ZiwgMHgwMywgMHg3ZCwgMHgwNywgMHgxMiwgMHgwYywgMHhkYSwgMHhlNCwgMHhmZiwgMHhlNSwgMHgxNn19LAorIHsweDA4MDYsIDY0LCB7IDB4NTQsIDB4N2YsIDB4ZmQsIDB4MTIsIDB4MGMsIDB4ZGEsIDB4MTIsIDB4MGUsIDB4MGYsIDB4OGYsIDB4MTUsIDB4ZTQsIDB4ZmYsIDB4ZTUsIDB4MTYsIDB4NDQsIDB4ODAsCisgIDB4ZmQsIDB4MTIsIDB4MGMsIDB4ZGEsIDB4ZTUsIDB4MTUsIDB4MzAsIDB4ZTcsIDB4MDQsIDB4YzIsIDB4MDgsIDB4ODAsIDB4MDIsIDB4ZDIsIDB4MDgsIDB4OTAsCisgIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4NzUsIDB4MWEsIDB4ODAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZDIsIDB4MDMsCisgIDB4MjIsIDB4ZDIsIDB4MTUsIDB4OTAsIDB4N2YsIDB4OTIsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4MTIsIDB4MGQsIDB4ZjksIDB4ZDIsIDB4ZTh9fSwKKyB7MHgwODQ2LCA2NCwgeyAweDQzLCAweGQ4LCAweDIwLCAweDkwLCAweDdmLCAweGRlLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGRmLCAweGYwLCAweDkwLCAweDdmLCAweGFiLCAweDc0LAorICAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweGE5LCAweGYwLCAweDkwLCAweDdmLCAweGFhLCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFmLAorICAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGFlLCAweDc0LCAweDBkLCAweGYwLCAweGQyLCAweGFmLCAweGQyLCAweDE2LCAweDEyLCAweDBkLAorICAweDI0LCAweGMyLCAweDAyLCAweGU0LCAweGY1LCAweDI4LCAweGY1LCAweDMwLCAweGMyLCAweDA5LCAweGY1LCAweDIzLCAweGMyLCAweDAzLCAweDkwfX0sCisgezB4MDg4NiwgNjQsIHsgMHg3ZiwgMHhhMSwgMHgwNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHg2NSwgMHgzNCwgMHg2MCwgMHg0OCwgMHgzMCwgMHgwMywgMHgwNSwgMHhkMiwgMHgxNiwKKyAgMHgxMiwgMHgwMCwgMHg0NiwgMHhlNSwgMHgwZiwgMHg2MCwgMHgyMiwgMHhlNSwgMHgyNiwgMHg2MCwgMHgxNiwgMHgxNSwgMHgyNiwgMHg5MCwgMHg3ZiwgMHhkOCwKKyAgMHhlMCwgMHgzMCwgMHhlNiwgMHgwNCwgMHg3ZiwgMHgyMCwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgzMCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlZiwgMHhmMCwgMHg4MCwKKyAgMHgxYSwgMHg5MCwgMHg3ZiwgMHg5NiwgMHg3NCwgMHgzMCwgMHhmMCwgMHg4MCwgMHgxMiwgMHg5MCwgMHg3ZiwgMHhkOSwgMHhlMCwgMHgzMCwgMHhlMn19LAorIHsweDA4YzYsIDY0LCB7IDB4MDQsIDB4N2YsIDB4MzAsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MjAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZDgsIDB4ZTAsIDB4ZjUsCisgIDB4MzQsIDB4ODAsIDB4MjAsIDB4MzAsIDB4MDMsIDB4MDcsIDB4YzIsIDB4MTYsIDB4MTIsIDB4MDAsIDB4NDYsIDB4ODAsIDB4MTYsIDB4ZTUsIDB4MGYsIDB4NzAsCisgIDB4MTIsIDB4OTAsIDB4N2YsIDB4ZDksIDB4ZTAsIDB4MzAsIDB4ZTIsIDB4MDQsIDB4N2YsIDB4MzAsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MjAsIDB4OTAsIDB4N2YsCisgIDB4OTYsIDB4ZWYsIDB4ZjAsIDB4MzAsIDB4MDIsIDB4MDcsIDB4YzIsIDB4MDIsIDB4MTIsIDB4MDUsIDB4MmEsIDB4ODAsIDB4ODYsIDB4MzAsIDB4MGF9fSwKKyB7MHgwOTA2LCA2NCwgeyAweDgzLCAweGMyLCAweDBhLCAweDEyLCAweDBiLCAweDVkLCAweDAyLCAweDA4LCAweDhhLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweGFmLAorICAweDI0LCAweGU1LCAweDJhLCAweGY1LCAweDgyLCAweGU1LCAweDI5LCAweGY1LCAweDgzLCAweGMyLCAweGFmLCAweDA1LCAweDg2LCAweDkwLCAweGMwLCAweDAwLAorICAweDA1LCAweDg2LCAweGUwLCAweGEzLCAweDA1LCAweDg2LCAweGYwLCAweDA1LCAweDg2LCAweGRmLCAweGY3LCAweGQyLCAweGFmLCAweDIyLCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweGFmLCAweDI0LCAweGU1LCAweDJhLCAweGY1LCAweDgyLCAweGU1LCAweDI5LCAweGY1LCAweDgzLCAweGMyfX0sCisgezB4MDk0NiwgNjQsIHsgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHgwNSwgMHg4NiwgMHhmMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhkZiwgMHhmNywgMHgwNSwgMHg4NiwKKyAgMHhkMiwgMHhhZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOCwgMHhmMCwgMHhhZiwgMHgyNCwgMHhlNSwgMHgyYSwgMHhmNSwgMHg4MiwgMHhlNSwKKyAgMHgyOSwgMHhmNSwgMHg4MywgMHhjMiwgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwgMHhjMCwgMHgwMCwgMHgwNSwgMHg4NiwgMHhlMCwgMHhhMywgMHgwNSwgMHg4NiwKKyAgMHhmMCwgMHgwNSwgMHg4NiwgMHhkZiwgMHhmNywgMHhkMiwgMHhhZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOCwgMHhmMCwgMHhhZn19LAorIHsweDA5ODYsIDY0LCB7IDB4MjQsIDB4ZTUsIDB4MmEsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MjksIDB4ZjUsIDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsIDB4ODYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsCisgIDB4MDUsIDB4ODYsIDB4ZjAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4ZGYsIDB4ZjcsIDB4MDUsIDB4ODYsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4NzQsIDB4MDAsIDB4ZjUsCisgIDB4ODYsIDB4OTAsIDB4ZmQsIDB4YTUsIDB4N2MsIDB4MDUsIDB4YTMsIDB4ZTUsIDB4ODIsIDB4NDUsIDB4ODMsIDB4NzAsIDB4ZjksIDB4MjIsIDB4OTAsIDB4N2YsCisgIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4NDMsIDB4ODcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4Nzh9fSwKKyB7MHgwOWM2LCA2NCwgeyAweDdmLCAweGU0LCAweGY2LCAweGQ4LCAweGZkLCAweDc1LCAweDgxLCAweDM5LCAweDAyLCAweDBhLCAweDBjLCAweDAyLCAweDA4LCAweDM4LCAweGU0LCAweDkzLCAweGEzLAorICAweGY4LCAweGU0LCAweDkzLCAweGEzLCAweDQwLCAweDAzLCAweGY2LCAweDgwLCAweDAxLCAweGYyLCAweDA4LCAweGRmLCAweGY0LCAweDgwLCAweDI5LCAweGU0LAorICAweDkzLCAweGEzLCAweGY4LCAweDU0LCAweDA3LCAweDI0LCAweDBjLCAweGM4LCAweGMzLCAweDMzLCAweGM0LCAweDU0LCAweDBmLCAweDQ0LCAweDIwLCAweGM4LAorICAweDgzLCAweDQwLCAweDA0LCAweGY0LCAweDU2LCAweDgwLCAweDAxLCAweDQ2LCAweGY2LCAweGRmLCAweGU0LCAweDgwLCAweDBiLCAweDAxLCAweDAyfX0sCisgezB4MGEwNiwgNjQsIHsgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHg5MCwgMHgwZCwgMHg4YiwgMHhlNCwgMHg3ZSwgMHgwMSwgMHg5MywgMHg2MCwgMHhiYywgMHhhMywgMHhmZiwKKyAgMHg1NCwgMHgzZiwgMHgzMCwgMHhlNSwgMHgwOSwgMHg1NCwgMHgxZiwgMHhmZSwgMHhlNCwgMHg5MywgMHhhMywgMHg2MCwgMHgwMSwgMHgwZSwgMHhjZiwgMHg1NCwKKyAgMHhjMCwgMHgyNSwgMHhlMCwgMHg2MCwgMHhhOCwgMHg0MCwgMHhiOCwgMHhlNCwgMHg5MywgMHhhMywgMHhmYSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwKKyAgMHg5MywgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhmMCwgMHhhMywgMHhjOCwgMHhjNSwgMHg4Mn19LAorIHsweDBhNDYsIDY0LCB7IDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2EsIDB4ZGYsIDB4ZTksIDB4ZGUsIDB4ZTcsIDB4ODAsIDB4YmUsIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsIDB4OGEsCisgIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDIsIDB4ZTcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDIsIDB4ZTMsIDB4MjIsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsCisgIDB4ZTQsIDB4OTMsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MGMsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsCisgIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDYsIDB4ZTksIDB4MjV9fSwKKyB7MHgwYTg2LCA2NCwgeyAweDgyLCAweGY4LCAweGUyLCAweDIyLCAweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGU0LCAweDkzLCAweDIyLAorICAweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGYwLCAweDIyLCAweDUwLCAweDAyLCAweGY3LCAweDIyLCAweGJiLCAweGZlLCAweDAxLAorICAweGYzLCAweDIyLCAweGQwLCAweDgzLCAweGQwLCAweDgyLCAweGY4LCAweGU0LCAweDkzLCAweDcwLCAweDEyLCAweDc0LCAweDAxLCAweDkzLCAweDcwLCAweDBkLAorICAweGEzLCAweGEzLCAweDkzLCAweGY4LCAweDc0LCAweDAxLCAweDkzLCAweGY1LCAweDgyLCAweDg4LCAweDgzLCAweGU0LCAweDczLCAweDc0LCAweDAyfX0sCisgezB4MGFjNiwgNjQsIHsgMHg5MywgMHg2OCwgMHg2MCwgMHhlZiwgMHhhMywgMHhhMywgMHhhMywgMHg4MCwgMHhkZiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5MywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywKKyAgMHg3NCwgMHgyMCwgMHhmMCwgMHgzMCwgMHgwMSwgMHgwMywgMHhmZiwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlZiwgMHhmMCwKKyAgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZCwgMHg3NCwgMHhmZiwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NywgMHhmMCwKKyAgMHgzMCwgMHgwOCwgMHgxMSwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHg3NCwgMHhmZiwgMHhmMCwgMHg5MCwgMHg3Zn19LAorIHsweDBiMDYsIDY0LCB7IDB4OTgsIDB4NzQsIDB4MjAsIDB4ZjAsIDB4MjIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4ZGYsIDB4ZjAsIDB4ZTQsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZjAsIDB4MjIsIDB4OGYsIDB4MzUsIDB4ZTQsIDB4ZjUsIDB4MzYsIDB4NzUsIDB4MzcsIDB4ZmYsIDB4NzUsIDB4MzgsIDB4MTksCisgIDB4NzUsIDB4MzksIDB4ODYsIDB4YWIsIDB4MzcsIDB4YWEsIDB4MzgsIDB4YTksIDB4MzksIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4MGEsIDB4NmEsIDB4YjQsCisgIDB4MDMsIDB4MWQsIDB4YWYsIDB4MzYsIDB4MDUsIDB4MzYsIDB4ZWYsIDB4YjUsIDB4MzUsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MGEsIDB4NTEsIDB4N2V9fSwKKyB7MHgwYjQ2LCA2NCwgeyAweDAwLCAweDI5LCAweGZmLCAweGVlLCAweDNhLCAweGE5LCAweDA3LCAweDc1LCAweDM3LCAweGZmLCAweGY1LCAweDM4LCAweDg5LCAweDM5LCAweDgwLCAweGQ0LCAweDdiLAorICAweDAwLCAweDdhLCAweDAwLCAweDc5LCAweDAwLCAweDIyLCAweDkwLCAweDdmLCAweGQ4LCAweGUwLCAweGY1LCAweDM1LCAweDEyLCAweDBhLCAweGNmLCAweDIwLAorICAweDA4LCAweDA3LCAweDkwLCAweDdmLCAweDkyLCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLAorICAweDEyLCAweDA5LCAweGI1LCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDMwLCAweGU3LCAweDBlLCAweDMwLCAweDAxLCAweDA1LCAweDEyLCAweDBkfX0sCisgezB4MGI4NiwgNjQsIHsgMHhiYywgMHg4MCwgMHgwNiwgMHgxMiwgMHgwZCwgMHg0OSwgMHhlZiwgMHg2MCwgMHhlMSwgMHg5MCwgMHg3ZiwgMHg5MiwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHgxMiwKKyAgMHgwNywgMHg0OCwgMHgyMiwgMHgwNSwgMHgyYSwgMHhlNSwgMHgyYSwgMHhhZSwgMHgyOSwgMHg3MCwgMHgwMiwgMHgwNSwgMHgyOSwgMHgxNCwgMHhmNSwgMHg4MiwKKyAgMHg4ZSwgMHg4MywgMHhlNSwgMHgxMSwgMHhmMCwgMHgxMiwgMHgwMCwgMHgzNiwgMHgwNSwgMHgyYSwgMHhlNSwgMHgyYSwgMHhhYywgMHgyOSwgMHg3MCwgMHgwMiwKKyAgMHgwNSwgMHgyOSwgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHgxNSwgMHgyNCwgMHhlNSwgMHgyNCwgMHg2MCwgMHgwN319LAorIHsweDBiYzYsIDY0LCB7IDB4MTIsIDB4MGUsIDB4MWIsIDB4OGYsIDB4MTEsIDB4ODAsIDB4Y2QsIDB4MjIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsCisgIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4ZDIsIDB4MDIsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDEsCisgIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4YzAsIDB4ZTAsCisgIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4ZDIsIDB4MGF9fSwKKyB7MHgwYzA2LCA2NCwgeyAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA4LCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLAorICAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLAorICAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LAorICAweDEzLCAweGYwLCAweGU1LCAweDE5LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0fX0sCisgezB4MGM0NiwgNjQsIHsgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHgxOSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwKKyAgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwKKyAgMHg3NCwgMHgxMiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNX19LAorIHsweDBjODYsIDY0LCB7IDB4MTksIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4MTksIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsCisgIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTYsIDB4ZjB9fSwKKyB7MHgwY2M2LCA2NCwgeyAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDE5LCAweDU0LCAweDdmLCAweDkwLCAweGMwLAorICAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDE5LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLAorICAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE3LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LAorICAweDE1LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVkLCAweGYwLCAweDIyLCAweDEyLCAweDBkLCAweGVhLCAweDhmLCAweDM3LCAweDEyLCAweDBkfX0sCisgezB4MGQwNiwgNjQsIHsgMHhlYSwgMHg4ZiwgMHgzOCwgMHhlNSwgMHgzNywgMHg2NSwgMHgzOCwgMHg2MCwgMHgxMiwgMHgxMiwgMHgwZCwgMHhlYSwgMHg4ZiwgMHgzNywgMHhlNSwgMHgzNywgMHg2NSwKKyAgMHgzOCwgMHg2MCwgMHgwNywgMHgxMiwgMHgwZCwgMHhlYSwgMHg4ZiwgMHgzOCwgMHg4MCwgMHhlOCwgMHhhZiwgMHgzNywgMHgyMiwgMHg5MCwgMHg3ZiwgMHhkNiwKKyAgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHgzMCwgMHgxNiwgMHgwNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg3ZiwKKyAgMHhmNCwgMHg3ZSwgMHgwMSwgMHgxMiwgMHgwZCwgMHhhNSwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmNywgMHhmMCwgMHhlMCwgMHg0NH19LAorIHsweDBkNDYsIDY0LCB7IDB4MDQsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZDgsIDB4ZTAsIDB4ZjUsIDB4MzYsIDB4MTIsIDB4MDcsIDB4NDgsIDB4MTIsIDB4MGUsIDB4MjcsIDB4ZWYsIDB4MzAsCisgIDB4ZTYsIDB4MGIsIDB4OTAsIDB4N2YsIDB4ZDgsIDB4ZTAsIDB4NjUsIDB4MzYsIDB4NjAsIDB4ZjEsIDB4N2YsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MGEsIDB4Y2YsCisgIDB4N2YsIDB4MDAsIDB4MjIsIDB4YWUsIDB4MDcsIDB4ZTQsIDB4ZmYsIDB4ZTUsIDB4MTYsIDB4NTQsIDB4N2YsIDB4ZmQsIDB4MTIsIDB4MGMsIDB4ZGEsIDB4OTAsCisgIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWUsIDB4ZjAsIDB4ZTQsIDB4ZTUsIDB4MTYsIDB4NDQsIDB4ODB9fSwKKyB7MHgwZDg2LCA2NCwgeyAweGZkLCAweDEyLCAweDBjLCAweGRhLCAweDIyLCAweDA1LCAweDJiLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDMxLCAweDAzLCAweDAwLCAweDAwLAorICAweGMxLCAweDg2LCAweGMxLCAweDAyLCAweGMxLCAweDBhLCAweGMxLCAweDAxLCAweGMxLCAweDA3LCAweDAxLCAweDI3LCAweDAwLCAweDAwLCAweDhlLCAweDM2LAorICAweDhmLCAweDM3LCAweGU1LCAweDM3LCAweDE1LCAweDM3LCAweGFlLCAweDM2LCAweDcwLCAweDAyLCAweDE1LCAweDM2LCAweDRlLCAweDYwLCAweDA1LCAweDEyLAorICAweDA5LCAweGE0LCAweDgwLCAweGVlLCAweDIyLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDdmLCAweDBkLCAweDdlfX0sCisgezB4MGRjNiwgNjQsIHsgMHgwMCwgMHgxMiwgMHgwZCwgMHhhNSwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMSwKKyAgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHhkMiwKKyAgMHgwMSwgMHgyMiwgMHhjMiwgMHgwMSwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwYiwgMHhjZSwgMHgwMCwgMHgwMiwgMHgwZX19LAorIHsweDBlMDYsIDY0LCB7IDB4MDQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDIsIDB4MGIsIDB4ZjUsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTUsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTYsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgwZTQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MGU4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDBlYzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgwZjA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MGY0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDBmODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgwZmM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTAwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEwNDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMDg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTBjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDExMDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMTQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTE4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDExYzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMjA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTI0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEyODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMmM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTMwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEzNDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMzg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTNjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNDQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTQ4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNTA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTU0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNWM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTYwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE2NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNjg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTZjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNzQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTc4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxODA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTg0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxOGM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDEwLCAweDAxLCAweGZmLCAweDAwfX0sCisgezB4MTkwNiwgNjQsIHsgMHgwMCwgMHg0MCwgMHhjZCwgMHgwNiwgMHgxOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMiwgMHgwOSwgMHgwMiwgMHg3NCwgMHgwMCwgMHgwMSwKKyAgMHgwMSwgMHgwMCwgMHhhMCwgMHgzMiwgMHgwOSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMSwKKyAgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMywgMHgwMiwgMHg0MCwKKyAgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNSwgMHgwMiwgMHg0MCwgMHgwMH19LAorIHsweDE5NDYsIDY0LCB7IDB4MDAsIDB4MDcsIDB4MDUsIDB4MDYsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDcsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsCisgIDB4ODEsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODMsIDB4MDIsCisgIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODQsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODUsIDB4MDIsIDB4NDAsIDB4MDAsCisgIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODYsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODcsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDF9fSwKKyB7MHgxOTg2LCA2NCwgeyAweDA0LCAweDAzLCAweDA5LCAweDA0LCAweDQ4LCAweDAzLCAweDRiLCAweDAwLCAweDY1LCAweDAwLCAweDc5LCAweDAwLCAweDczLCAweDAwLCAweDcwLCAweDAwLCAweDYxLAorICAweDAwLCAweDZlLCAweDAwLCAweDJjLCAweDAwLCAweDIwLCAweDAwLCAweDYxLCAweDAwLCAweDIwLCAweDAwLCAweDY0LCAweDAwLCAweDY5LCAweDAwLCAweDc2LAorICAweDAwLCAweDY5LCAweDAwLCAweDczLCAweDAwLCAweDY5LCAweDAwLCAweDZmLCAweDAwLCAweDZlLCAweDAwLCAweDIwLCAweDAwLCAweDZmLCAweDAwLCAweDY2LAorICAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDZlLCAweDAwLCAweDZmLCAweDAwLCAweDUzLCAweDAwLCAweDc5LCAweDAwfX0sCisgezB4MTljNiwgNjQsIHsgMHg3MywgMHgwMCwgMHgyMCwgMHgwMCwgMHg0OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2MywgMHgwMCwgMHgyZSwgMHgwMCwgMHgzNiwgMHgwMywgMHg0YiwgMHgwMCwgMHg2NSwKKyAgMHgwMCwgMHg3OSwgMHgwMCwgMHg3MywgMHgwMCwgMHg3MCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1NSwgMHgwMCwgMHg1MywKKyAgMHgwMCwgMHg0MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1MywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2YywKKyAgMHgwMCwgMHgyMCwgMHgwMCwgMHg0MSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg3MCwgMHgwMCwgMHg3NCwgMHgwMCwgMHg2NSwgMHgwMH19LAorIHsweDFhMDYsICA0LCB7IDB4NzIsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHhmZmZmLCAwLAl7MHgwMH19Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMTl3X2Z3LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2ExOXdfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWQ2MTkxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMTl3X2Z3LmgKQEAgLTAsMCArMSw0NDYgQEAKKy8qIGtleXNwYW5fdXNhMTl3X2Z3LmgKKworCVRoZSBmaXJtd2FyZSBjb250YWluZWQgaGVyZWluIGFzIGtleXNwYW5fdXNhMTl3X2Z3LmggaXMKKworCQlDb3B5cmlnaHQgKEMpIDE5OTktMjAwMQorCQlLZXlzcGFuLCBBIGRpdmlzaW9uIG9mIElubm9TeXMgSW5jb3Jwb3JhdGVkICgiS2V5c3BhbiIpCisJCQorCWFzIGFuIHVucHVibGlzaGVkIHdvcmsuIFRoaXMgbm90aWNlIGRvZXMgbm90IGltcGx5IHVucmVzdHJpY3RlZCBvcgorCXB1YmxpYyBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIGZyb20gd2hpY2ggdGhpcyBmaXJtd2FyZSBpbWFnZSBpcworCWRlcml2ZWQuICBFeGNlcHQgYXMgbm90ZWQgYmVsb3cgdGhpcyBmaXJtd2FyZSBpbWFnZSBtYXkgbm90IGJlIAorCXJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQgCisJS2V5c3BhbidzIHByaW9yIHdyaXR0ZW4gY29uc2VudC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKwlQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgCisJaW1hZ2UgYXMgcGFydCBvZiBhIExpbnV4IG9yIG90aGVyIE9wZW4gU291cmNlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIAorCWluIHRleHQgb3IgYmluYXJ5IGZvcm0gYXMgcmVxdWlyZWQuIAorCisJVGhpcyBmaXJtd2FyZSBtYXkgbm90IGJlIG1vZGlmaWVkIGFuZCBtYXkgb25seSBiZSB1c2VkIHdpdGggIAorCUtleXNwYW4gaGFyZHdhcmUuICBEaXN0cmlidXRpb24gYW5kL29yIE1vZGlmaWNhdGlvbiBvZiB0aGUgCisJa2V5c3Bhbi5jIGRyaXZlciB3aGljaCBpbmNsdWRlcyB0aGlzIGZpcm13YXJlLCBpbiB3aG9sZSBvciBpbiAKKwlwYXJ0LCByZXF1aXJlcyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3RhdGVtZW50LiIKKyovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCBrZXlzcGFuX3VzYTE5d19maXJtd2FyZVtdID0geworIHsweDAwMzMsICAzLCB7IDB4MDIsIDB4MGQsIDB4NWN9fSwKKyB7MHgwMDAzLCAxNiwgeyAweGU0LCAweDkwLCAweDdmLCAweDkzLCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LCAweDMwLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk2LCAweGYwfX0sCisgezB4MDAxMywgMTYsIHsgMHg5MCwgMHg3ZiwgMHg5NCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZCwgMHg3NCwgMHhmZiwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NywgMHhmMCwgMHg5MH19LAorIHsweDAwMjMsIDE1LCB7IDB4N2YsIDB4OTUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4MTcsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZjAsIDB4MjJ9fSwKKyB7MHgwMDQ2LCAxNiwgeyAweDMwLCAweDBmLCAweDE4LCAweDEyLCAweDBkLCAweDM4LCAweGVmLCAweGMzLCAweDk1LCAweDE0LCAweDQwLCAweDAzLCAweDAyLCAweDAwLCAweGQ4LCAweDkwfX0sCisgezB4MDA1NiwgMTYsIHsgMHg3ZiwgMHhiZiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhjMiwgMHgwZiwgMHhjMiwgMHgwYSwgMHg4MCwgMHg3NywgMHgzMCwgMHgwYywgMHgzYiwgMHg5MCwgMHg3Zn19LAorIHsweDAwNjYsIDE2LCB7IDB4YzYsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4NmQsIDB4MTIsIDB4MGQsIDB4MzgsIDB4ZWYsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTAsIDB4NjQsIDB4OTAsIDB4N2V9fSwKKyB7MHgwMDc2LCAxNiwgeyAweDQwLCAweGUwLCAweDEzLCAweDkyLCAweDBmLCAweDkwLCAweDdmLCAweGM3LCAweGUwLCAweDE0LCAweGY1LCAweDFjLCAweDIwLCAweDBhLCAweDExLCAweDYwfX0sCisgezB4MDA4NiwgMTYsIHsgMHgwZiwgMHhmNSwgMHgyMywgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg0MSwgMHg3NSwgMHgyNywgMHg3ZSwgMHg3NSwgMHgyOCwgMHg0MSwgMHgxMiwgMHgwOCwgMHgwMX19LAorIHsweDAwOTYsIDE2LCB7IDB4YzIsIDB4MGMsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZjAsIDB4ODAsIDB4MzksIDB4OTAsIDB4N2YsIDB4YzgsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MzJ9fSwKKyB7MHgwMGE2LCAxNiwgeyAweDEyLCAweDBkLCAweDM4LCAweGVmLCAweGMzLCAweDk0LCAweDQwLCAweDUwLCAweDI5LCAweDkwLCAweDdkLCAweGMwLCAweGUwLCAweDEzLCAweDkyLCAweDBmfX0sCisgezB4MDBiNiwgMTYsIHsgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMCwgMHgxNCwgMHhmNSwgMHgxYywgMHgyMCwgMHgwYSwgMHgxMSwgMHg2MCwgMHgwZiwgMHhmNSwgMHgyMywgMHg3ZSwgMHg3ZH19LAorIHsweDAwYzYsIDE2LCB7IDB4N2YsIDB4YzEsIDB4NzUsIDB4MjcsIDB4N2QsIDB4NzUsIDB4MjgsIDB4YzEsIDB4MTIsIDB4MDgsIDB4MDEsIDB4ZDIsIDB4MGMsIDB4ZTQsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwMGQ2LCAxNiwgeyAweGM5LCAweGYwLCAweDkwLCAweDdmLCAweGI2LCAweGUwLCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDAxLCAweDVlLCAweDEyLCAweDBjLCAweDQxLCAweDhmfX0sCisgezB4MDBlNiwgMTYsIHsgMHgxYywgMHgxMiwgMHgwZCwgMHg0NCwgMHg4ZiwgMHgxMSwgMHhlNSwgMHgxYywgMHhjMywgMHg5NSwgMHgxMywgMHg1MCwgMHgwZiwgMHgxMiwgMHgwZCwgMHgyMH19LAorIHsweDAwZjYsIDE2LCB7IDB4ZWYsIDB4MzAsIDB4ZTAsIDB4MDgsIDB4ZTUsIDB4MTEsIDB4MjAsIDB4ZTcsIDB4MDMsIDB4MzAsIDB4MTIsIDB4NWMsIDB4YzIsIDB4MTIsIDB4ZTUsIDB4MWN9fSwKKyB7MHgwMDM2LCAxMiwgeyAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyfX0sCisgezB4MDA0MywgIDMsIHsgMHgwMiwgMHgwZSwgMHgwMH19LAorIHsweDAwMDAsICAzLCB7IDB4MDIsIDB4MDgsIDB4YjZ9fSwKKyB7MHgwMTA2LCA2NCwgeyAweDYwLCAweDU2LCAweGI0LCAweDgwLCAweDAzLCAweDQzLCAweDExLCAweDAyLCAweGU1LCAweDExLCAweDMwLCAweGU3LCAweDI0LCAweGU1LCAweDFjLCAweGQzLCAweDk0LAorICAweDIwLCAweDQwLCAweDAzLCAweDc1LCAweDFjLCAweDIwLCAweDg1LCAweDFjLCAweDIzLCAweDdlLCAweDdlLCAweDdmLCAweDgwLCAweDc1LCAweDI3LCAweDdlLAorICAweDc1LCAweDI4LCAweDgwLCAweDEyLCAweDBhLCAweDg2LCAweGU1LCAweDFjLCAweDI1LCAweDFjLCAweDkwLCAweDdmLCAweGI3LCAweGYwLCAweDgwLCAweDI3LAorICAweGU1LCAweDFjLCAweGQzLCAweDk0LCAweDNmLCAweDQwLCAweDAzLCAweDc1LCAweDFjLCAweDNmLCAweDg1LCAweDFjLCAweDIzLCAweDkwLCAweDdlfX0sCisgezB4MDE0NiwgNjQsIHsgMHg4MCwgMHhlNSwgMHgxMSwgMHhmMCwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg4MSwgMHg3NSwgMHgyNywgMHg3ZSwgMHg3NSwgMHgyOCwgMHg4MSwgMHgxMiwgMHgwOCwgMHgyNiwKKyAgMHhlNSwgMHgxYywgMHgwNCwgMHg5MCwgMHg3ZiwgMHhiNywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjZSwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNiwgMHgyMCwgMHgwZCwKKyAgMHgwMywgMHgwMiwgMHgwMywgMHhiYSwgMHhlNCwgMHhmNSwgMHgxYiwgMHg3NCwgMHg0MCwgMHgyNSwgMHgxYiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YywKKyAgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgxYiwgMHg3YywgMHgwMCwgMHg3YiwgMHgwMSwgMHg3YSwgMHg3ZSwgMHg3OSwgMHgwMCwgMHgyNH19LAorIHsweDAxODYsIDY0LCB7IDB4MDAsIDB4ZjksIDB4ZWMsIDB4MzQsIDB4N2UsIDB4ZmEsIDB4ZWYsIDB4MTIsIDB4MGEsIDB4MGQsIDB4MDUsIDB4MWIsIDB4ZTUsIDB4MWIsIDB4YjQsIDB4MjAsIDB4ZDcsCisgIDB4OTAsIDB4N2UsIDB4MDAsIDB4ZTAsIDB4NjAsIDB4NmUsIDB4N2YsIDB4MDEsIDB4OTAsIDB4N2UsIDB4MTEsIDB4ZTAsIDB4ZmQsIDB4MTIsIDB4MGMsIDB4MWMsCisgIDB4OTAsIDB4N2UsIDB4MDEsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MGIsIDB4NWUsIDB4OTAsIDB4N2UsIDB4MDIsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MGIsIDB4ODQsCisgIDB4ZDIsIDB4MTAsIDB4ZDIsIDB4MTEsIDB4NzUsIDB4MWMsIDB4MDQsIDB4OTAsIDB4N2UsIDB4MDMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4YzIsIDB4MTF9fSwKKyB7MHgwMWM2LCA2NCwgeyAweDQzLCAweDFjLCAweGMwLCAweDkwLCAweDdlLCAweDA0LCAweGUwLCAweGI0LCAweDAxLCAweDA3LCAweGMyLCAweDExLCAweDQzLCAweDFjLCAweDBiLCAweDgwLCAweDEwLAorICAweDkwLCAweDdlLCAweDA0LCAweGUwLCAweDYwLCAweDA3LCAweGMyLCAweDEwLCAweDQzLCAweDFjLCAweDA5LCAweDgwLCAweDAzLCAweDQzLCAweDFjLCAweDAyLAorICAweDdmLCAweDAzLCAweGFkLCAweDFjLCAweDEyLCAweDBjLCAweDFjLCAweDQzLCAweDE5LCAweDgwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLAorICAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDE5LCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweGU1LCAweDE2LCAweDQ0fX0sCisgezB4MDIwNiwgNjQsIHsgMHgwNiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgwNSwgMHhlMCwgMHg2MCwgMHgxMiwgMHhhMywgMHhlMCwgMHg1NCwgMHgzZiwgMHhmNSwgMHgxOCwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHgxOCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgwNywgMHhlMCwKKyAgMHg2MCwgMHg0MiwgMHg5MCwgMHg3ZSwgMHgxMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHgxNSwgMHgwNCwgMHg4MCwgMHgwMywgMHg1MywgMHgxNSwgMHhmYiwKKyAgMHhlNCwgMHhmZiwgMHhhZCwgMHgxNSwgMHgxMiwgMHgwYywgMHgxYywgMHg5MCwgMHg3ZSwgMHgwOCwgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHgxN319LAorIHsweDAyNDYsIDY0LCB7IDB4ODAsIDB4ODAsIDB4MDMsIDB4NTMsIDB4MTcsIDB4N2YsIDB4NTMsIDB4MTcsIDB4ZmMsIDB4OTAsIDB4N2UsIDB4MDksIDB4ZTAsIDB4NjAsIDB4MTEsIDB4NDMsIDB4MTcsCisgIDB4MDIsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MGIsIDB4ZDAsIDB4OTAsIDB4N2UsIDB4MGIsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MGIsIDB4ZjYsIDB4YWYsCisgIDB4MTcsIDB4MTIsIDB4MGIsIDB4YWEsIDB4OTAsIDB4N2UsIDB4MGUsIDB4ZTAsIDB4NjAsIDB4MTgsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4MTksCisgIDB4MDEsIDB4ODAsIDB4MDMsIDB4NTMsIDB4MTksIDB4ZmUsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDB9fSwKKyB7MHgwMjg2LCA2NCwgeyAweGU1LCAweDE5LCAweGYwLCAweDkwLCAweDdlLCAweDBjLCAweGUwLCAweDYwLCAweDE4LCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDE5LCAweDAyLCAweDgwLAorICAweDAzLCAweDUzLCAweDE5LCAweGZkLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDE5LCAweGYwLAorICAweDkwLCAweDdlLCAweDEyLCAweGUwLCAweGY1LCAweDEzLCAweGEzLCAweGUwLCAweDEzLCAweDkyLCAweDEzLCAweGEzLCAweGUwLCAweGY1LCAweDE0LCAweGEzLAorICAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDE5LCAweDEwLCAweDgwLCAweDAzLCAweDUzLCAweDE5LCAweGVmLCAweDkwLCAweDdmLCAweDk4LCAweDc0fX0sCisgezB4MDJjNiwgNjQsIHsgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHgxOSwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgxNiwgMHhlMCwgMHg2MCwgMHgzMiwgMHg1MywgMHgxOCwgMHhiZiwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHgxOCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHgxMiwgMHgwZCwgMHgxNCwgMHhlZiwgMHg1NCwgMHhmZSwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg1MywgMHgxNSwKKyAgMHhmZCwgMHhlNCwgMHhmZiwgMHhhZCwgMHgxNSwgMHgxMiwgMHgwYywgMHgxYywgMHhlNCwgMHhmNSwgMHgwZSwgMHhmNSwgMHgwZCwgMHhkMiwgMHgwZX19LAorIHsweDAzMDYsIDY0LCB7IDB4OTAsIDB4N2UsIDB4MTcsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4NDMsIDB4MTUsIDB4MDIsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4MTUsIDB4MTIsIDB4MGMsIDB4MWMsIDB4NzUsCisgIDB4MGQsIDB4MDEsIDB4ZDIsIDB4MGUsIDB4OTAsIDB4N2UsIDB4MTgsIDB4ZTAsIDB4NjAsIDB4MTAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsCisgIDB4ZTUsIDB4MTYsIDB4NDQsIDB4MDQsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZDIsIDB4MGEsIDB4OTAsIDB4N2UsIDB4MTksIDB4ZTAsIDB4NjAsIDB4MTEsCisgIDB4NDMsIDB4MTgsIDB4NDAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4MTgsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzB9fSwKKyB7MHgwMzQ2LCA2NCwgeyAweDAwLCAweGYwLCAweDkwLCAweDdlLCAweDFhLCAweGUwLCAweDYwLCAweDBmLCAweDUzLCAweDE1LCAweGZlLCAweGU0LCAweGZmLCAweGFkLCAweDE1LCAweDEyLCAweDBjLAorICAweDFjLCAweDc1LCAweDBmLCAweDAxLCAweGQyLCAweDBlLCAweDkwLCAweDdlLCAweDFiLCAweGUwLCAweDYwLCAweDBmLCAweDQzLCAweDE1LCAweDAxLCAweGU0LAorICAweGZmLCAweGFkLCAweDE1LCAweDEyLCAweDBjLCAweDFjLCAweGU0LCAweGY1LCAweDBmLCAweGQyLCAweDBlLCAweDkwLCAweDdlLCAweDFjLCAweGUwLCAweDYwLAorICAweDBlLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweGU1LCAweDE2LCAweDQ0LCAweDAyLCAweDkwLCAweGMwLCAweDAwLCAweGYwfX0sCisgezB4MDM4NiwgNjQsIHsgMHg5MCwgMHg3ZSwgMHgxZCwgMHhlMCwgMHg2MCwgMHgwMiwgMHhkMiwgMHgxMiwgMHg5MCwgMHg3ZSwgMHgxZSwgMHhlMCwgMHg2MCwgMHgwOCwgMHg3NSwgMHgxMCwgMHgwMSwKKyAgMHhlNCwgMHhmNSwgMHgxMiwgMHhkMiwgMHgwZSwgMHg5MCwgMHg3ZSwgMHgxZiwgMHhlMCwgMHg2MCwgMHgxMSwgMHg5MCwgMHg3ZiwgMHhkNywgMHg3NCwgMHgxMSwKKyAgMHhmMCwgMHg3NCwgMHgzMSwgMHhmMCwgMHg3NCwgMHgxNSwgMHhmMCwgMHg3NCwgMHgzNSwgMHhmMCwgMHhkMiwgMHgwYywgMHhjMiwgMHgwZCwgMHhlNCwgMHg5MCwKKyAgMHg3ZiwgMHhjZiwgMHhmMCwgMHgzMCwgMHgxNSwgMHg3MSwgMHhlNSwgMHgxMiwgMHg2MCwgMHgwMiwgMHgxNSwgMHgxMiwgMHhlNSwgMHgyZSwgMHhkM319LAorIHsweDAzYzYsIDY0LCB7IDB4OTQsIDB4MDAsIDB4NDAsIDB4MDQsIDB4MTUsIDB4MmUsIDB4ODAsIDB4NjAsIDB4NzUsIDB4MmUsIDB4MGEsIDB4MTIsIDB4MGQsIDB4MTQsIDB4ZWYsIDB4NTQsIDB4MDEsCisgIDB4ZjUsIDB4MWMsIDB4NjUsIDB4MGUsIDB4NjAsIDB4MDcsIDB4ODUsIDB4MWMsIDB4MGUsIDB4ZDIsIDB4MGUsIDB4ODAsIDB4MTEsIDB4MTIsIDB4MGQsIDB4NTAsCisgIDB4ZWYsIDB4NTQsIDB4MTAsIDB4ZjUsIDB4MWMsIDB4NjUsIDB4MDksIDB4NjAsIDB4MDUsIDB4ODUsIDB4MWMsIDB4MDksIDB4ZDIsIDB4MGUsIDB4MTIsIDB4MGQsCisgIDB4NTAsIDB4ZWYsIDB4NTQsIDB4ODAsIDB4ZjUsIDB4MWMsIDB4NjUsIDB4MGEsIDB4NjAsIDB4MDUsIDB4ODUsIDB4MWMsIDB4MGEsIDB4ZDIsIDB4MGV9fSwKKyB7MHgwNDA2LCA2NCwgeyAweDEyLCAweDBkLCAweDUwLCAweGVmLCAweDU0LCAweDIwLCAweGY1LCAweDFjLCAweDY1LCAweDBiLCAweDYwLCAweDA4LCAweDg1LCAweDFjLCAweDBiLCAweDMwLCAweDEwLAorICAweDAyLCAweGQyLCAweDBlLCAweDEyLCAweDBkLCAweDUwLCAweGVmLCAweDU0LCAweDQwLCAweGY1LCAweDFjLCAweDY1LCAweDBjLCAweDYwLCAweDA4LCAweDg1LAorICAweDFjLCAweDBjLCAweDMwLCAweDExLCAweDAyLCAweGQyLCAweDBlLCAweDMwLCAweDE1LCAweDJhLCAweDkwLCAweDdmLCAweGQyLCAweGUwLCAweDIwLCAweGUxLAorICAweDIzLCAweDkwLCAweDdiLCAweDQwLCAweGUwLCAweDYwLCAweDA5LCAweGUwLCAweGY1LCAweDMwLCAweDkwLCAweDdiLCAweDQyLCAweGUwLCAweGY1fX0sCisgezB4MDQ0NiwgNjQsIHsgMHgzMSwgMHg5MCwgMHg3YiwgMHg0MSwgMHhlMCwgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHhkNywgMHg3NCwgMHgxNywgMHhmMCwgMHg3NCwgMHgzNywgMHhmMCwgMHhlNCwKKyAgMHg5MCwgMHg3ZiwgMHhkMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjMiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwNSwgMHgxZiwgMHhlNSwgMHgyNSwKKyAgMHg3MCwgMHg0MCwgMHgzMCwgMHgwZSwgMHgzOSwgMHhlNSwgMHgxMiwgMHg3MCwgMHgzNSwgMHhjMiwgMHgwZSwgMHhmNSwgMHgxYiwgMHg3ZSwgMHgwMCwgMHg3YiwKKyAgMHgwMCwgMHg3NCwgMHgwOCwgMHgyNSwgMHgxYiwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgwOSwgMHhjNywgMHhmZiwgMHg3NH19LAorIHsweDA0ODYsIDY0LCB7IDB4ODAsIDB4MjUsIDB4MWIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MWIsIDB4ZTUsIDB4MWIsIDB4YjQsCisgIDB4MDksIDB4ZGIsIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MDksIDB4ZjAsIDB4NzUsIDB4MTIsIDB4MTAsIDB4ZTQsIDB4ZjUsIDB4MTAsIDB4NzUsIDB4MjUsCisgIDB4MDIsIDB4MjIsIDB4ZTUsIDB4MjUsIDB4NjQsIDB4MDIsIDB4NzAsIDB4MzYsIDB4MzAsIDB4MDUsIDB4MmYsIDB4YzIsIDB4MDUsIDB4ZjUsIDB4MWIsIDB4N2UsCisgIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MjksIDB4MjUsIDB4MWIsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTIsIDB4MDksIDB4Yzd9fSwKKyB7MHgwNGM2LCA2NCwgeyAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDFiLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDFiLCAweGU1LAorICAweDFiLCAweGI0LCAweDA1LCAweGRiLCAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDA1LCAweGYwLCAweDc1LCAweDI1LCAweDAzLCAweDIyLCAweGU1LCAweDMwLAorICAweDYwLCAweDMzLCAweDc1LCAweDJmLCAweDAzLCAweDE1LCAweDMwLCAweGU0LCAweGY1LCAweDFiLCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDJmLAorICAweDI1LCAweDFiLCAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhLCAweDEyLCAweDA5LCAweGM3LCAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDFifX0sCisgezB4MDUwNiwgNjQsIHsgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgxYiwgMHhlNSwgMHgxYiwgMHhiNCwgMHgwMywgMHhkYiwgMHg5MCwKKyAgMHg3ZiwgMHhjMywgMHg3NCwgMHgwMywgMHhmMCwgMHhlNCwgMHhmNSwgMHgyNSwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhlOSwgMHhlMCwgMHgxMiwgMHgwYSwgMHgxZiwKKyAgMHgwNSwgMHhmNiwgMHgwMCwgMHgwNiwgMHg2YSwgMHgwMSwgMHgwNiwgMHhkNywgMHgwMywgMHgwNSwgMHg0MywgMHgwNiwgMHgwNSwgMHhlOSwgMHgwOCwgMHgwNSwKKyAgMHhlMywgMHgwOSwgMHgwNSwgMHhjYiwgMHgwYSwgMHgwNSwgMHhkYSwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwNywgMHgyNywgMHg5MCwgMHg3ZiwgMHhlYn19LAorIHsweDA1NDYsIDY0LCB7IDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTYsIDB4MTQsIDB4NjAsIDB4NTAsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NmYsIDB4NzQsIDB4MTksIDB4OTAsIDB4N2YsIDB4ZDQsCisgIDB4ZjAsIDB4NzQsIDB4MDAsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MDcsIDB4MmUsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MDQsCisgIDB4N2YsIDB4MDIsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDMsIDB4NzUsIDB4ODIsIDB4ODIsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZWYsIDB4ZjAsIDB4NzUsIDB4ODIsCisgIDB4NzQsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4NzUsIDB4ODIsIDB4NTgsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZWF9fSwKKyB7MHgwNTg2LCA2NCwgeyAweGUwLCAweDA0LCAweDc1LCAweDgyLCAweDE3LCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDc0LCAweDE5LCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweDc0LCAweDEyLAorICAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDA3LCAweDJlLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGZmLCAweDEyLCAweDBhLCAweDQ1LCAweGVhLAorICAweDQ5LCAweDYwLCAweDBkLCAweGVhLCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweGU5LCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDA3LCAweDJlLAorICAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDA3LCAweDJlLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0fX0sCisgezB4MDVjNiwgNjQsIHsgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNywgMHgyZSwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhlNSwgMHgyNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwKKyAgMHgwMiwgMHgwNywgMHgyZSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmNSwgMHgyNCwgMHgwMiwgMHgwNywgMHgyZSwgMHgxMiwgMHgwNywgMHgzNiwgMHgwMiwKKyAgMHgwNywgMHgyZSwgMHg5MCwgMHg3ZiwgMHgwMCwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHhmMCwgMHgwMiwgMHgwNywgMHgyZSwgMHg5MCwKKyAgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHg3ZiwgMHg2MCwgMHgyNCwgMHgxNCwgMHg2MCwgMHgzMSwgMHgyNCwgMHgwMiwgMHg3MCwgMHg1YiwgMHhhMn19LAorIHsweDA2MDYsIDY0LCB7IDB4MDEsIDB4ZTQsIDB4MzMsIDB4ZmYsIDB4MjUsIDB4ZTAsIDB4ZmYsIDB4YTIsIDB4MDcsIDB4ZTQsIDB4MzMsIDB4NGYsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4ZTQsCisgIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDcsIDB4MmUsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsCisgIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDcsIDB4MmUsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsCisgIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjR9fSwKKyB7MHgwNjQ2LCA2NCwgeyAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZkLCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGU0LCAweGEzLCAweGYwLAorICAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDA3LCAweDJlLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLAorICAweDAyLCAweDA3LCAweDJlLCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDFlLCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLAorICAweDA3LCAweDJlLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGI0LCAweDAxLCAweDA2LCAweDEyLCAweDBkLCAweDYzLCAweDAyLCAweDA3LCAweDJlfX0sCisgezB4MDY4NiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNywgMHgyZSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgzOCwgMHg5MCwKKyAgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwKKyAgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwKKyAgMHg1NCwgMHg4MCwgMHhmZiwgMHgxMywgMHgxMywgMHgxMywgMHg1NCwgMHgxZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHg5MCwgMHg3Zn19LAorIHsweDA2YzYsIDY0LCB7IDB4ZDcsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4ODAsIDB4NjAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4NTcsCisgIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTksIDB4MjQsIDB4MDIsIDB4NzAsIDB4NGIsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsCisgIDB4YjQsIDB4MDEsIDB4MDUsIDB4MTIsIDB4MGQsIDB4NjAsIDB4ODAsIDB4M2YsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsCisgIDB4MzYsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmZ9fSwKKyB7MHgwNzA2LCA2NCwgeyAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLAorICAweGY1LCAweDgzLCAweDc0LCAweDAxLCAweGYwLCAweDgwLCAweDEwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDA3LAorICAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDIyLCAweGU0LAorICAweDkwLCAweDdmLCAweDkzLCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LCAweDMwLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk2LCAweGYwfX0sCisgezB4MDc0NiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHg5NSwgMHg3NCwgMHhjMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHg3NCwgMHgzZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxOCwKKyAgMHhmMCwgMHhlNCwgMHhmNSwgMHg4ZSwgMHg5MCwgMHg3ZiwgMHhkZiwgMHg3NCwgMHhmZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZSwgMHhmMCwgMHhlNCwgMHhmNSwKKyAgMHgwOCwgMHg3ZiwgMHgwMSwgMHg3YiwgMHgwMCwgMHg3NCwgMHgwOCwgMHgyZiwgMHhmOSwgMHhlNCwgMHgzNCwgMHgwMCwgMHhmYSwgMHhlNCwgMHgxMiwgMHgwYSwKKyAgMHgwZCwgMHgwZiwgMHhiZiwgMHgwOSwgMHhlZSwgMHg3NSwgMHgxMywgMHgwMSwgMHhlNCwgMHhmNSwgMHgxMiwgMHhmNSwgMHgyZSwgMHhmNSwgMHgxMX19LAorIHsweDA3ODYsIDY0LCB7IDB4YzIsIDB4MGUsIDB4YzIsIDB4MTIsIDB4YzIsIDB4MGQsIDB4YzIsIDB4MGEsIDB4YzIsIDB4MGYsIDB4YzIsIDB4MDQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsCisgIDB4ZjAsIDB4NzUsIDB4MTgsIDB4MDMsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4N2YsIDB4MGMsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MGMsCisgIDB4MWMsIDB4N2YsIDB4MTAsIDB4OGYsIDB4MTcsIDB4MTIsIDB4MGIsIDB4YWEsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4N2YsIDB4MDEsCisgIDB4OGYsIDB4MTYsIDB4ZWYsIDB4NDQsIDB4MDYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MGYsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MGMsIDB4MWN9fSwKKyB7MHgwN2M2LCA2NCwgeyAweGU0LCAweGZmLCAweDdlLCAweGEzLCAweGFkLCAweDA2LCAweDhkLCAweDE1LCAweDEyLCAweDBjLCAweDFjLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDExLCAweGYwLAorICAweDkwLCAweGMwLCAweDAwLCAweGU0LCAweGYwLCAweDdmLCAweDA1LCAweDdkLCAweDdmLCAweDEyLCAweDBjLCAweDFjLCAweDdmLCAweDAxLCAweDEyLCAweDBjLAorICAweGFjLCAweDdmLCAweDAzLCAweDdkLCAweDA3LCAweDEyLCAweDBjLCAweDFjLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDc1LCAweDE5LAorICAweDgwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweDgwLCAweGYwLCAweGQyLCAweDAzLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwfX0sCisgezB4MDgwNiwgNjQsIHsgMHhmMCwgMHhhZiwgMHgyMywgMHhlNSwgMHgyOCwgMHhmNSwgMHg4MiwgMHhlNSwgMHgyNywgMHhmNSwgMHg4MywgMHhjMiwgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHgwNSwgMHg4NiwgMHhlMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhmMCwgMHgwNSwgMHg4NiwgMHhkZiwgMHhmNywgMHhkMiwgMHhhZiwgMHgyMiwgMHg5MCwKKyAgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMCwgMHhmMCwgMHhhZiwgMHgyMywgMHhlNSwgMHgyOCwgMHhmNSwgMHg4MiwgMHhlNSwgMHgyNywgMHhmNSwgMHg4MywgMHhjMiwKKyAgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHgwNSwgMHg4NiwgMHhmMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhkZiwgMHhmN319LAorIHsweDA4NDYsIDY0LCB7IDB4MDUsIDB4ODYsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4YWYsIDB4MjMsIDB4ZTUsIDB4MjgsIDB4ZjUsIDB4ODIsCisgIDB4ZTUsIDB4MjcsIDB4ZjUsIDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsIDB4ODYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4MDUsIDB4ODYsIDB4ZTAsIDB4YTMsIDB4MDUsCisgIDB4ODYsIDB4ZjAsIDB4MDUsIDB4ODYsIDB4ZGYsIDB4ZjcsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4YWYsCisgIDB4MjMsIDB4ZTUsIDB4MjgsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MjcsIDB4ZjUsIDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsIDB4ODYsIDB4OTAsIDB4YzB9fSwKKyB7MHgwODg2LCA2NCwgeyAweDAwLCAweGUwLCAweDA1LCAweDg2LCAweGYwLCAweGEzLCAweDA1LCAweDg2LCAweGRmLCAweGY3LCAweDA1LCAweDg2LCAweGQyLCAweGFmLCAweDIyLCAweDc0LCAweDAwLAorICAweGY1LCAweDg2LCAweDkwLCAweGZkLCAweGE1LCAweDdjLCAweDA1LCAweGEzLCAweGU1LCAweDgyLCAweDQ1LCAweDgzLCAweDcwLCAweGY5LCAweDIyLCAweDkwLAorICAweDdmLCAweGQ2LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweDQzLCAweDg3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIyLCAweDc4LAorICAweDdmLCAweGU0LCAweGY2LCAweGQ4LCAweGZkLCAweDc1LCAweDgxLCAweDMxLCAweDAyLCAweDA4LCAweGZkLCAweDAyLCAweDA5LCAweDQyLCAweGU0fX0sCisgezB4MDhjNiwgNjQsIHsgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwgMHg5MywgMHhhMywgMHg0MCwgMHgwMywgMHhmNiwgMHg4MCwgMHgwMSwgMHhmMiwgMHgwOCwgMHhkZiwgMHhmNCwgMHg4MCwgMHgyOSwKKyAgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHg1NCwgMHgwNywgMHgyNCwgMHgwYywgMHhjOCwgMHhjMywgMHgzMywgMHhjNCwgMHg1NCwgMHgwZiwgMHg0NCwgMHgyMCwKKyAgMHhjOCwgMHg4MywgMHg0MCwgMHgwNCwgMHhmNCwgMHg1NiwgMHg4MCwgMHgwMSwgMHg0NiwgMHhmNiwgMHhkZiwgMHhlNCwgMHg4MCwgMHgwYiwgMHgwMSwgMHgwMiwKKyAgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHg5MCwgMHgwYywgMHhjZCwgMHhlNCwgMHg3ZSwgMHgwMSwgMHg5MywgMHg2MCwgMHhiY319LAorIHsweDA5MDYsIDY0LCB7IDB4YTMsIDB4ZmYsIDB4NTQsIDB4M2YsIDB4MzAsIDB4ZTUsIDB4MDksIDB4NTQsIDB4MWYsIDB4ZmUsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NjAsIDB4MDEsIDB4MGUsIDB4Y2YsCisgIDB4NTQsIDB4YzAsIDB4MjUsIDB4ZTAsIDB4NjAsIDB4YTgsIDB4NDAsIDB4YjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZmEsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsCisgIDB4ZTQsIDB4OTMsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2EsIDB4ZjAsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsCisgIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2EsIDB4ZGYsIDB4ZTksIDB4ZGUsIDB4ZTcsIDB4ODAsIDB4YmUsIDB4ZDIsIDB4MTQsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwOTQ2LCA2NCwgeyAweDkyLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDEyLCAweDBkLCAweDYzLCAweGQyLCAweGU4LCAweDQzLCAweGQ4LCAweDIwLCAweDkwLCAweDdmLCAweGRlLCAweDc0LAorICAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGRmLCAweGYwLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweGE5LCAweGYwLAorICAweDkwLCAweDdmLCAweGFhLCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFmLCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLAorICAweGFlLCAweDc0LCAweDBkLCAweGYwLCAweGQyLCAweGFmLCAweGQyLCAweDE1LCAweDEyLCAweDBjLCAweDY2LCAweGMyLCAweDAyLCAweGU0LCAweGY1fX0sCisgezB4MDk4NiwgNjQsIHsgMHgyNiwgMHhmNSwgMHgyZSwgMHhjMiwgMHgwOCwgMHhjMiwgMHgwMywgMHg5MCwgMHg3ZiwgMHhhMSwgMHgwNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHg2NSwKKyAgMHgxYSwgMHg2MCwgMHgxMCwgMHgzMCwgMHgwMywgMHgwNSwgMHhkMiwgMHgxNSwgMHgxMiwgMHgwMCwgMHg0NiwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHhmNSwKKyAgMHgxYSwgMHg4MCwgMHgwOCwgMHgzMCwgMHgwMywgMHgwNSwgMHhjMiwgMHgxNSwgMHgxMiwgMHgwMCwgMHg0NiwgMHgzMCwgMHgwMiwgMHgwNywgMHhjMiwgMHgwMiwKKyAgMHgxMiwgMHgwNSwgMHgyMCwgMHg4MCwgMHhkNiwgMHgzMCwgMHgwOSwgMHhkMywgMHhjMiwgMHgwOSwgMHgxMiwgMHgwYSwgMHhiYSwgMHg4MCwgMHhjY319LAorIHsweDA5YzYsIDY0LCB7IDB4MjIsIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDIsIDB4ZTcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDIsCisgIDB4ZTMsIDB4MjIsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MGMsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsCisgIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTYsIDB4MjIsCisgIDB4YmIsIDB4ZmUsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4MjIsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTV9fSwKKyB7MHgwYTA2LCA2NCwgeyAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGU0LCAweDkzLCAweDIyLCAweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGYwLCAweDIyLCAweDUwLAorICAweDAyLCAweGY3LCAweDIyLCAweGJiLCAweGZlLCAweDAxLCAweGYzLCAweDIyLCAweGQwLCAweDgzLCAweGQwLCAweDgyLCAweGY4LCAweGU0LCAweDkzLCAweDcwLAorICAweDEyLCAweDc0LCAweDAxLCAweDkzLCAweDcwLCAweDBkLCAweGEzLCAweGEzLCAweDkzLCAweGY4LCAweDc0LCAweDAxLCAweDkzLCAweGY1LCAweDgyLCAweDg4LAorICAweDgzLCAweGU0LCAweDczLCAweDc0LCAweDAyLCAweDkzLCAweDY4LCAweDYwLCAweGVmLCAweGEzLCAweGEzLCAweGEzLCAweDgwLCAweGRmLCAweDhmfX0sCisgezB4MGE0NiwgNjQsIHsgMHgxYiwgMHhlNCwgMHhmNSwgMHgxYywgMHg3NSwgMHgxZCwgMHhmZiwgMHg3NSwgMHgxZSwgMHgxOSwgMHg3NSwgMHgxZiwgMHg4NiwgMHhhYiwgMHgxZCwgMHhhYSwgMHgxZSwKKyAgMHhhOSwgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMSwgMHgxMiwgMHgwOSwgMHhlMCwgMHhiNCwgMHgwMywgMHgxZCwgMHhhZiwgMHgxYywgMHgwNSwgMHgxYywgMHhlZiwKKyAgMHhiNSwgMHgxYiwgMHgwMSwgMHgyMiwgMHgxMiwgMHgwOSwgMHhjNywgMHg3ZSwgMHgwMCwgMHgyOSwgMHhmZiwgMHhlZSwgMHgzYSwgMHhhOSwgMHgwNywgMHg3NSwKKyAgMHgxZCwgMHhmZiwgMHhmNSwgMHgxZSwgMHg4OSwgMHgxZiwgMHg4MCwgMHhkNCwgMHg3YiwgMHgwMCwgMHg3YSwgMHgwMCwgMHg3OSwgMHgwMCwgMHgyMn19LAorIHsweDBhODYsIDY0LCB7IDB4MDUsIDB4MjgsIDB4ZTUsIDB4MjgsIDB4YWUsIDB4MjcsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MjcsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTUsIDB4MTEsCisgIDB4ZjAsIDB4MTIsIDB4MDAsIDB4MzYsIDB4MDUsIDB4MjgsIDB4ZTUsIDB4MjgsIDB4YWMsIDB4MjcsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MjcsIDB4MTQsIDB4ZjUsCisgIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MTUsIDB4MjMsIDB4ZTUsIDB4MjMsIDB4NjAsIDB4MDcsIDB4MTIsIDB4MGQsIDB4NDQsIDB4OGYsIDB4MTEsCisgIDB4ODAsIDB4Y2QsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZDgsIDB4ZTAsIDB4ZjUsIDB4MWIsIDB4MTIsIDB4MDAsIDB4MDMsIDB4OTAsIDB4N2YsIDB4ZDZ9fSwKKyB7MHgwYWM2LCA2NCwgeyAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweDEyLCAweDA4LCAweGE2LCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDMwLCAweGU3LCAweDBlLCAweDMwLCAweDAxLCAweDA1LAorICAweDEyLCAweDBjLCAweGZlLCAweDgwLCAweDA2LCAweDEyLCAweDBjLCAweDhiLCAweGVmLCAweDYwLCAweGUxLCAweDEyLCAweDA3LCAweDM2LCAweDIyLCAweGMwLAorICAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweDkwLCAweDdmLAorICAweGM0LCAweGU0LCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA0LCAweGYwLCAweGQwLCAweDg2LCAweGQwfX0sCisgezB4MGIwNiwgNjQsIHsgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwKKyAgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhkMiwgMHgwMiwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwKKyAgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwKKyAgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMH19LAorIHsweDBiNDYsIDY0LCB7IDB4ZDIsIDB4MDksIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsCisgIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4MTgsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwYjg2LCA2NCwgeyAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDkwLAorICAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDE4LCAweDU0LCAweDdmLCAweDkwLCAweGMwLAorICAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLAorICAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzfX0sCisgezB4MGJjNiwgNjQsIHsgMHhmMCwgMHhlNSwgMHgxOCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwKKyAgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHgxOCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwKKyAgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NH19LAorIHsweDBjMDYsIDY0LCB7IDB4MTYsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4MTgsIDB4NTQsIDB4N2YsCisgIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4MTgsIDB4NTQsIDB4N2YsIDB4OTAsCisgIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTcsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTUsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MTIsIDB4MGQsIDB4MmMsIDB4OGYsIDB4MWR9fSwKKyB7MHgwYzQ2LCA2NCwgeyAweDEyLCAweDBkLCAweDJjLCAweDhmLCAweDFlLCAweGU1LCAweDFkLCAweDY1LCAweDFlLCAweDYwLCAweDEyLCAweDEyLCAweDBkLCAweDJjLCAweDhmLCAweDFkLCAweGU1LAorICAweDFkLCAweDY1LCAweDFlLCAweDYwLCAweDA3LCAweDEyLCAweDBkLCAweDJjLCAweDhmLCAweDFlLCAweDgwLCAweGU4LCAweGFmLCAweDFkLCAweDIyLCAweDkwLAorICAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweGUwLCAweDQ0LCAweDA4LCAweGYwLCAweDMwLCAweDE1LCAweDA0LCAweGUwLCAweDQ0LCAweDAyLAorICAweGYwLCAweDdmLCAweGY0LCAweDdlLCAweDAxLCAweDEyLCAweDBjLCAweGU3LCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGY3LCAweGYwfX0sCisgezB4MGM4NiwgNjQsIHsgMHhlMCwgMHg0NCwgMHgwNCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHhmNSwgMHgxYywgMHgxMiwgMHgwNywgMHgzNiwgMHgxMiwgMHgwZCwgMHg1MCwKKyAgMHhlZiwgMHgzMCwgMHhlNiwgMHgwYiwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHg2NSwgMHgxYywgMHg2MCwgMHhmMSwgMHg3ZiwgMHgwMSwgMHgyMiwgMHgxMiwKKyAgMHgwMCwgMHgwMywgMHg3ZiwgMHgwMCwgMHgyMiwgMHhhZSwgMHgwNywgMHhlNCwgMHhmZiwgMHhlNSwgMHgxNSwgMHg1NCwgMHg3ZiwgMHhmZCwgMHgxMiwgMHgwYywKKyAgMHgxYywgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZSwgMHhmMCwgMHhlNCwgMHhlNSwgMHgxNX19LAorIHsweDBjYzYsIDY0LCB7IDB4NDQsIDB4ODAsIDB4ZmQsIDB4MTIsIDB4MGMsIDB4MWMsIDB4MjIsIDB4MDUsIDB4MjksIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MmYsIDB4MDMsCisgIDB4MDAsIDB4MDAsIDB4YzEsIDB4ODYsIDB4YzEsIDB4MDIsIDB4YzEsIDB4MDksIDB4YzEsIDB4MDEsIDB4YzEsIDB4MDcsIDB4MDEsIDB4MjUsIDB4MDAsIDB4MDAsCisgIDB4OGUsIDB4MWMsIDB4OGYsIDB4MWQsIDB4ZTUsIDB4MWQsIDB4MTUsIDB4MWQsIDB4YWUsIDB4MWMsIDB4NzAsIDB4MDIsIDB4MTUsIDB4MWMsIDB4NGUsIDB4NjAsCisgIDB4MDUsIDB4MTIsIDB4MDgsIDB4OTUsIDB4ODAsIDB4ZWUsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4N2Z9fSwKKyB7MHgwZDA2LCA2NCwgeyAweDBkLCAweDdlLCAweDAwLCAweDEyLCAweDBjLCAweGU3LCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LAorICAweDc0LCAweDExLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweDkwLAorICAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLAorICAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmfX0sCisgezB4MGQ0NiwgNjQsIHsgMHg5OCwgMHg3NCwgMHgxNSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNiwgMHhmMCwgMHg5MCwKKyAgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg1MywgMHhkOCwgMHhlZiwgMHgzMiwgMHhkMiwgMHgwMSwgMHgyMiwgMHhjMiwgMHgwMSwgMHgyMiwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDBkODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgwZGM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDBiLCAweDEwLCAweDAwLCAweDAyLCAweDBlfX0sCisgezB4MGUwNiwgNjQsIHsgMHgwNCwgMHgwMCwgMHgwMiwgMHgwYSwgMHhlNiwgMHgwMCwgMHgwMiwgMHgwYiwgMHgzNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDBlNDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgwZTg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MGVjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDBmMDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgwZjQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MGY4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDBmYzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMDA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTA0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEwODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMGM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTEwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDExNDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMTg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTFjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEyMDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMjQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTI4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEyYzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMzA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTM0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEzODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxM2M2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTQwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNDg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTRjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNTQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTU4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNjA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTY0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE2ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNmM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTcwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNzg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTdjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxODQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTg4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZmYsIDB4MDB9fSwKKyB7MHgxOTA2LCA2NCwgeyAweDAwLCAweDQwLCAweGNkLCAweDA2LCAweDA4LCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAyLCAweDAwLCAweDAyLCAweDA5LCAweDAyLCAweDc0LCAweDAwLCAweDAxLAorICAweDAxLCAweDAwLCAweGEwLCAweDMyLCAweDA5LCAweDA0LCAweDAwLCAweDAwLCAweDBlLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAxLAorICAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAyLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAzLCAweDAyLCAweDQwLAorICAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA0LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA1LCAweDAyLCAweDQwLCAweDAwfX0sCisgezB4MTk0NiwgNjQsIHsgMHgwMCwgMHgwNywgMHgwNSwgMHgwNiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwKKyAgMHg4MSwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MywgMHgwMiwKKyAgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NSwgMHgwMiwgMHg0MCwgMHgwMCwKKyAgMHgwMSwgMHgwNywgMHgwNSwgMHg4NiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMX19LAorIHsweDE5ODYsIDY0LCB7IDB4MDQsIDB4MDMsIDB4MDksIDB4MDQsIDB4NDgsIDB4MDMsIDB4NGIsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NjEsCisgIDB4MDAsIDB4NmUsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjksIDB4MDAsIDB4NzYsCisgIDB4MDAsIDB4NjksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NjksIDB4MDAsIDB4NmYsIDB4MDAsIDB4NmUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NjYsCisgIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NzksIDB4MDB9fSwKKyB7MHgxOWM2LCA2NCwgeyAweDczLCAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDYzLCAweDAwLCAweDJlLCAweDAwLCAweDM2LCAweDAzLCAweDRiLCAweDAwLCAweDY1LAorICAweDAwLCAweDc5LCAweDAwLCAweDczLCAweDAwLCAweDcwLCAweDAwLCAweDYxLCAweDAwLCAweDZlLCAweDAwLCAweDIwLCAweDAwLCAweDU1LCAweDAwLCAweDUzLAorICAweDAwLCAweDQyLCAweDAwLCAweDIwLCAweDAwLCAweDUzLCAweDAwLCAweDY1LCAweDAwLCAweDcyLCAweDAwLCAweDY5LCAweDAwLCAweDYxLCAweDAwLCAweDZjLAorICAweDAwLCAweDIwLCAweDAwLCAweDQxLCAweDAwLCAweDY0LCAweDAwLCAweDYxLCAweDAwLCAweDcwLCAweDAwLCAweDc0LCAweDAwLCAweDY1LCAweDAwfX0sCisgezB4MWEwNiwgIDQsIHsgMHg3MiwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweGZmZmYsCTAsCXsweDAwfSB9Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjZtc2cuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTI2bXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgwODcyNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTI2bXNnLmgKQEAgLTAsMCArMSwyNjAgQEAKKy8qCisJdXNhMjZtc2cuaAorCisJQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgSW5ub1N5cyBJbmNvcnBvcmF0ZWQuICBBbGwgUmlnaHRzIFJlc2VydmVkCisJVGhpcyBmaWxlIGlzIGF2YWlsYWJsZSB1bmRlciBhIEJTRC1zdHlsZSBjb3B5cmlnaHQKKworCUtleXNwYW4gVVNCIEFzeW5jIE1lc3NhZ2UgRm9ybWF0cyBmb3IgdGhlIFVTQTI4WAorCisJUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisJbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorCW1ldDoKKworCTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGlzIGxpY2VuY2UgdGV4dAorICAgCXdpdGhvdXQgbW9kaWZpY2F0aW9uLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKKyAgIAlkaXNjbGFpbWVyLiAgVGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgbm90aWNlIG11c3QgYXBwZWFyIGltbWVkaWF0ZWx5IGF0CisgICAJdGhlIGJlZ2lubmluZyBvZiBhbGwgc291cmNlIGZpbGVzOgorCisgICAgICAgIAlDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBJbm5vU3lzIEluY29ycG9yYXRlZC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKworICAgICAgICAJVGhpcyBmaWxlIGlzIGF2YWlsYWJsZSB1bmRlciBhIEJTRC1zdHlsZSBjb3B5cmlnaHQKKworCTIuIFRoZSBuYW1lIG9mIElubm9TeXMgSW5jb3Jwb3JhdGVkIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAgIAlwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KKyAgIAlwZXJtaXNzaW9uLgorCisJVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBJTk5PU1lTIENPUlAuIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKwlJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisJT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKwlOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisJSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisJKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisJU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKwlDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKwlMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisJT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorCVNVQ0ggREFNQUdFLiAgICAKKworCVRoaXJkIHJldmlzaW9uOiBVU0EyOFggdmVyc2lvbiAoYWthIFVTQTI2KQorCisJQnVmZmVyIGZvcm1hdHMgZm9yIFJYL1RYIGRhdGEgbWVzc2FnZXMgYXJlIG5vdCBkZWZpbmVkIGJ5CisJYSBzdHJ1Y3R1cmUsIGJ1dCBhcmUgZGVzY3JpYmVkIGhlcmU6CisKKwlVU0IgT1VUIChob3N0IC0+IFVTQXh4LCB0cmFuc21pdCkgbWVzc2FnZXMgY29udGFpbiBhIAorCVJFUVVFU1RfQUNLIGluZGljYXRvciAoc2V0IHRvIDB4ZmYgdG8gcmVxdWVzdCBhbiBBQ0sgYXQgdGhlIAorCWNvbXBsZXRpb24gb2YgdHJhbnNtaXQ7IDB4MDAgb3RoZXJ3aXNlKSwgZm9sbG93ZWQgYnkgZGF0YToKKworCQlSUVNUQUNLIERBVCBEQVQgREFUIC4uLgorCisJd2l0aCBhIHRvdGFsIGRhdGEgbGVuZ3RoIG9mIDYzLgorCisJVVNCIElOIChVU0F4eCAtPiBob3N0LCByZWNlaXZlKSBtZXNzYWdlcyBiZWdpbiB3aXRoIGEgc3RhdHVzCisJYnl0ZSBpbiB3aGljaCB0aGUgMHg4MCBiaXQgaXMgZWl0aGVyOgorCisJCShhKQkweDgwIGJpdCBjbGVhcgorCQkJaW5kaWNhdGVzIHRoYXQgdGhlIGJ5dGVzIGZvbGxvd2luZyBpdCBhcmUgYWxsIGRhdGEKKwkJCWJ5dGVzOgorCisJCQkJU1RBVCBEQVRBIERBVEEgREFUQSBEQVRBIERBVEEgLi4uCisKKwkJCWZvciBhIHRvdGFsIG9mIHVwIHRvIDYzIERBVEEgYnl0ZXMsCisKKwlvcjoKKworCQkoYikJMHg4MCBiaXQgc2V0CisJCQlpbmRpYXRlcyB0aGF0IHRoZSBieXRlcyBmb2xsb3dpbmcgYWx0ZXJuYXRlIGRhdGEgYW5kCisJCQlzdGF0dXMgYnl0ZXM6CisKKwkJCQlTVEFUIERBVEEgU1RBVCBEQVRBIFNUQVQgREFUQSBTVEFUIERBVEEgLi4uCisKKwkJCWZvciBhIHRvdGFsIG9mIHVwIHRvIDMyIERBVEEgYnl0ZXMuCisKKwlUaGUgdmFsaWQgYml0cyBpbiB0aGUgU1RBVCBieXRlcyBhcmU6CisKKwkJT1ZFUlJVTgkweDAyCisJCVBBUklUWQkweDA0CisJCUZSQU1JTkcJMHgwOAorCQlCUkVBSwkweDEwCisKKwlOb3RlczoKKworCSgxKSBUaGUgT1ZFUlJVTiBiaXQgY2FuIGFwcGVhciBpbiBlaXRoZXIgKGEpIG9yIChiKSBmb3JtYXQKKwkJbWVzc2FnZXMsIGJ1dCB0aGUgYnV0IHRoZSBQQVJJVFkvRlJBTUlORy9CUkVBSyBiaXRzCisJCW9ubHkgYXBwZWFyIGluIChiKSBmb3JtYXQgbWVzc2FnZXMuCisJKDIpIEZvciB0aGUgaG9zdCB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IHBvaW50IGF0IHdoaWNoIHRoZQorCQlvdmVycnVuIG9jY3VycmVkICh0byBpZGVudGlmeSB0aGUgcG9pbnQgaW4gdGhlIGRhdGEKKwkJc3RyZWFtIGF0IHdoaWNoIHRoZSBkYXRhIHdhcyBsb3N0KSwgaXQgbmVlZHMgdG8gY291bnQKKwkJMTI4IGNoYXJhY3RlcnMsIHN0YXJ0aW5nIGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlCisJCW1lc3NhZ2UgaW4gd2hpY2ggT1ZFUlJVTiB3YXMgcmVwb3J0ZWQ7IHRoZSBsb3N0IGNoYXJhY3RlcihzKQorCQl3b3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQgYmV0d2VlbiB0aGUgMTI4dGggYW5kIDEyOXRoCisJCWNoYXJhY3RlcnMuCisJKDMpCUFuIFJYIGRhdGEgbWVzc2FnZSBpbiB3aGljaCB0aGUgZmlyc3QgYnl0ZSBoYXMgMHg4MCBjbGVhcgorCQlzZXJ2ZXMgYXMgYSAiYnJlYWsgb2ZmIiBpbmRpY2F0b3IuCisKKwlyZXZpc2lvbiBoaXN0b3J5OgorCisJMTk5OWZlYjEwCWFkZCByZXBvcnRIc2tpYUNoYW5nZXMgdG8gYWxsb3cgdXMgdG8gaWdub3JlIHRoZW0KKwkxOTk5ZmViMTAJYWRkIHR4QWNrVGhyZXNob2xkIGZvciBmYXN0K2xvb3NlIHRocm91Z2hwdXQgZW5oYW5jZW1lbnQKKwkxOTk5bWFyMzAJYmVlZiB1cCBzdXBwb3J0IGZvciBSWCBlcnJvciByZXBvcnRpbmcKKwkxOTk5YXByMTQJYWRkIHJlc2V0RGF0YVRvZ2dsZSB0byBjb250cm9sIG1lc3NhZ2UKKwkyMDAwamFuMDQJbWVyZ2Ugd2l0aCB1c2ExN21zZy5oCisJMjAwMGp1bjAxCWFkZCBleHRlbmRlZCBCU0Qtc3R5bGUgY29weXJpZ2h0IHRleHQKKwkyMDAxanVsMDUJY2hhbmdlIG1lc3NhZ2UgZm9ybWF0IHRvIGltcHJvdmUgT1ZFUlJVTiBjYXNlCisKKwlOb3RlIG9uIHNoYXJlZCBuYW1lczoKKworCUluIHRoZSBjYXNlIG9mIGZpZWxkcyB3aGljaCBoYXZlIGJlZW4gbWVyZ2VkIGJldHdlZW4gdGhlIFVTQTE3CisJYW5kIFVTQTI2IGRlZmluaXRpb25zLCB0aGUgVVNBMjYgZGVmaW5pdGlvbiBpcyB0aGUgZmlyc3QgcGFydAorCW9mIHRoZSBuYW1lIGFuZCB0aGUgVVNBMTcgZGVmaW5pdGlvbiBpcyB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlCisJbmFtZTsgYm90aCBtZWFuaW5ncyBhcmUgZGVzY3JpYmVkIGJlbG93LgorKi8KKworI2lmbmRlZglfX1VTQTI2TVNHX18KKyNkZWZpbmUJX19VU0EyNk1TR19fCisKKworc3RydWN0IGtleXNwYW5fdXNhMjZfcG9ydENvbnRyb2xNZXNzYWdlCit7CisJLyoKKwkJdGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mICJjb21tYW5kcyIgc2VudCBpbiB0aGUgY29udHJvbCBtZXNzYWdlOgorCisJCTEuCWNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3aGljaCBtdXN0IGJlIHJlcXVlc3RlZCBieSBzZXR0aW5nCisJCQl0aGUgY29ycmVzcG9uZGluZyAic2V0IiBmbGFnIChhbmQgc2hvdWxkIG9ubHkgYmUgcmVxdWVzdGVkCisJCQl3aGVuIG5lY2Vzc2FyeSwgdG8gcmVkdWNlIG92ZXJoZWFkIG9uIHRoZSBVU0EyNik6CisJKi8KKwl1OAlzZXRDbG9ja2luZywJLy8gQk9USDogaG9zdCByZXF1ZXN0cyBiYXVkIHJhdGUgYmUgc2V0CisJCWJhdWRMbywJCS8vIEJPVEg6IGhvc3QgZG9lcyBiYXVkIGRpdmlzb3IgY2FsY3VsYXRpb24KKwkJYmF1ZEhpLAkJLy8gQk9USDogYmF1ZEhpIGlzIG9ubHkgdXNlZCBmb3IgZmlyc3QgcG9ydCAoZ2l2ZXMgbG93ZXIgcmF0ZXMpCisJCWV4dGVybmFsQ2xvY2tfdHhDbG9ja2luZywKKwkJCQkJLy8gVVNBMjY6IDA9aW50ZXJuYWwsIG90aGVyPWV4dGVybmFsCisJCQkJCS8vIFVTQTE3OiAwPWludGVybmFsLCBvdGhlcj1leHRlcm5hbC9SSQorCQlyeENsb2NraW5nLAkJLy8gVVNBMTc6IDA9aW50ZXJuYWwsIDE9ZXh0ZXJuYWwvUkksIG90aGVyPWV4dGVybmFsL0RTUgorCisKKwkJc2V0TGNyLAkJCS8vIEJPVEg6IGhvc3QgcmVxdWVzdHMgbGNyIGJlIHNldAorCQlsY3IsCQkJLy8gQk9USDogdXNlIFBBUklUWSwgU1RPUEJJVFMsIERBVEFCSVRTIGJlbG93CisKKwkJc2V0Rmxvd0NvbnRyb2wsCQkvLyBCT1RIOiBob3N0IHJlcXVlc3RzIGZsb3cgY29udHJvbCBiZSBzZXQKKwkJY3RzRmxvd0NvbnRyb2wsCQkvLyBCT1RIOiAxPXVzZSBDVFMgZmxvdyBjb250cm9sLCAwPWRvbid0CisJCXhvbkZsb3dDb250cm9sLAkJLy8gQk9USDogMT11c2UgWE9OL1hPRkYgZmxvdyBjb250cm9sLCAwPWRvbid0CisJCXhvbkNoYXIsCQkvLyBCT1RIOiBzcGVjaWZpZWQgaW4gY3VycmVudCBjaGFyYWN0ZXIgZm9ybWF0CisJCXhvZmZDaGFyLAkJLy8gQk9USDogc3BlY2lmaWVkIGluIGN1cnJlbnQgY2hhcmFjdGVyIGZvcm1hdAorCisJCXNldFR4VHJpU3RhdGVfc2V0UnRzLAorCQkJCQkvLyBVU0EyNjogaG9zdCByZXF1ZXN0cyBUWCB0cmktc3RhdGUgYmUgc2V0CisJCQkJCS8vIFVTQTE3OiBob3N0IHJlcXVlc3RzIFJUUyBvdXRwdXQgYmUgc2V0CisJCXR4VHJpU3RhdGVfcnRzLAkJLy8gQk9USDogMT1hY3RpdmUgKG5vcm1hbCksIDA9dHJpc3RhdGUgKG9mZikKKworCQlzZXRIc2tvYV9zZXREdHIsCisJCQkJCS8vIFVTQTI2OiBob3N0IHJlcXVlc3RzIEhTS09BIG91dHB1dCBiZSBzZXQKKwkJCQkJLy8gVVNBMTc6IGhvc3QgcmVxdWVzdHMgRFRSIG91dHB1dCBiZSBzZXQKKwkJaHNrb2FfZHRyLAkJLy8gQk9USDogMT1vbiwgMD1vZmYKKworCQlzZXRQcmVzY2FsZXIsCQkvLyBVU0EyNjogaG9zdCByZXF1ZXN0cyBwcmVzY2FsYXIgYmUgc2V0IChkZWZhdWx0OiAxMykKKwkJcHJlc2NhbGVyOwkJLy8gQk9USDogc3BlY2lmaWVkIGFzIE4vODsgdmFsdWVzIDgtZmYgYXJlIHZhbGlkCisJCQkJCS8vIG11c3QgYmUgc2V0IGFueSB0aW1lIGludGVybmFsIGJhdWQgcmF0ZSBpcyBzZXQ7CisJCQkJCS8vIG11c3Qgbm90IGJlIHNldCB3aGVuIGV4dGVybmFsIGNsb2NraW5nIGlzIHVzZWQKKwkJCQkJLy8gbm90ZTogaW4gVVNBMTcsIHByZXNjYWxlciBpcyBhcHBsaWVkIHdoZW5ldmVyCisJCQkJCS8vIHNldENsb2NraW5nIGlzIHJlcXVlc3RlZAorCisJLyoKKwkJMy4JY29uZmlndXJhdGlvbiBkYXRhIHdoaWNoIGlzIHNpbXBseSB1c2VkIGFzIGlzIChubyBvdmVyaGVhZCwKKwkJCWJ1dCBtdXN0IGJlIHNwZWNpZmllZCBjb3JyZWN0bHkgaW4gZXZlcnkgaG9zdCBtZXNzYWdlKS4KKwkqLworCXU4CWZvcndhcmRpbmdMZW5ndGgsICAvLyBCT1RIOiBmb3J3YXJkIHdoZW4gdGhpcyBudW1iZXIgb2YgY2hhcnMgYXZhaWxhYmxlCisJCXJlcG9ydEhza2lhQ2hhbmdlc19kc3JGbG93Q29udHJvbCwKKwkJCQkJCS8vIFVTQTI2OiAxPW5vcm1hbDsgMD1pZ25vcmUgZXh0ZXJuYWwgY2xvY2sKKwkJCQkJCS8vIFVTQTE3OiAxPXVzZSBEU1IgZmxvdyBjb250cm9sLCAwPWRvbid0CisJCXR4QWNrVGhyZXNob2xkLAkvLyBCT1RIOiAwPW5vdCBhbGxvd2VkLCAxPW5vcm1hbCwgMi0yNTUgZGVsaXZlciBBQ0sgZmFzdGVyCisJCWxvb3BiYWNrTW9kZTsJLy8gQk9USDogMD1ubyBsb29wYmFjaywgMT1sb29wYmFjayBlbmFibGVkCisKKwkvKgorCQk0Lgljb21tYW5kcyB3aGljaCBhcmUgZmxhZ3Mgb25seTsgdGhlc2UgYXJlIHByb2Nlc3NlZCBpbiBvcmRlcgorCQkJKHNvIHRoYXQsIGUuZy4sIGlmIGJvdGggX3R4T24gYW5kIF90eE9mZiBmbGFncyBhcmUgc2V0LCB0aGUKKwkJCXBvcnQgZW5kcyBpbiBhIFRYX09GRiBzdGF0ZSk7IGFueSBub24temVybyB2YWx1ZSBpcyByZXNwZWN0ZWQKKwkqLworCXU4CV90eE9uLAkJCS8vIEJPVEg6IGVuYWJsZSB0cmFuc21pdHRpbmcgKGFuZCBjb250aW51ZSBpZiB0aGVyZSdzIGRhdGEpCisJCV90eE9mZiwJCQkvLyBCT1RIOiBzdG9wIHRyYW5zbWl0dGluZworCQl0eEZsdXNoLAkJLy8gQk9USDogdG9zcyBvdXRib3VuZCBkYXRhCisJCXR4QnJlYWssCQkvLyBCT1RIOiB0dXJuIG9uIGJyZWFrIChjbGVhcmVkIGJ5IF90eE9uKQorCQlyeE9uLAkJCS8vIEJPVEg6IHR1cm4gb24gcmVjZWl2ZXIKKwkJcnhPZmYsCQkJLy8gQk9USDogdHVybiBvZmYgcmVjZWl2ZXIKKwkJcnhGbHVzaCwJCS8vIEJPVEg6IHRvc3MgaW5ib3VuZCBkYXRhCisJCXJ4Rm9yd2FyZCwJCS8vIEJPVEg6IGZvcndhcmQgYWxsIGluYm91bmQgZGF0YSwgTk9XIChhcyBpZiBmd2RMZW49PTEpCisJCXJldHVyblN0YXR1cywJLy8gQk9USDogcmV0dXJuIGN1cnJlbnQgc3RhdHVzIChldmVuIGlmIGl0IGhhc24ndCBjaGFuZ2VkKQorCQlyZXNldERhdGFUb2dnbGU7Ly8gQk9USDogcmVzZXQgZGF0YSB0b2dnbGUgc3RhdGUgdG8gREFUQTAKKwkKK307CisKKy8vIGRlZmluZXMgZm9yIGJpdHMgaW4gbGNyCisjZGVmaW5lCVVTQV9EQVRBQklUU181CQkweDAwCisjZGVmaW5lCVVTQV9EQVRBQklUU182CQkweDAxCisjZGVmaW5lCVVTQV9EQVRBQklUU183CQkweDAyCisjZGVmaW5lCVVTQV9EQVRBQklUU184CQkweDAzCisjZGVmaW5lCVNUT1BCSVRTXzU2NzhfMQkweDAwCS8vIDEgc3RvcCBiaXQgZm9yIGFsbCBieXRlIHNpemVzCisjZGVmaW5lCVNUT1BCSVRTXzVfMXA1CTB4MDQJLy8gMS41IHN0b3AgYml0cyBmb3IgNS1iaXQgYnl0ZQorI2RlZmluZQlTVE9QQklUU182NzhfMgkweDA0CS8vIDIgc3RvcCBiaXRzIGZvciA2LzcvOC1iaXQgYnl0ZQorI2RlZmluZQlVU0FfUEFSSVRZX05PTkUJCTB4MDAKKyNkZWZpbmUJVVNBX1BBUklUWV9PREQJCTB4MDgKKyNkZWZpbmUJVVNBX1BBUklUWV9FVkVOCQkweDE4CisjZGVmaW5lCVBBUklUWV8xCQkweDI4CisjZGVmaW5lCVBBUklUWV8wCQkweDM4CisKKy8vIGFsbCB0aGluZ3MgY2FsbGVkICJTdGF0dXNNZXNzYWdlIiBhcmUgc2VudCBvbiB0aGUgc3RhdHVzIGVuZHBvaW50CisKK3N0cnVjdCBrZXlzcGFuX3VzYTI2X3BvcnRTdGF0dXNNZXNzYWdlCS8vIG9uZSBmb3IgZWFjaCBwb3J0Cit7CisJdTgJcG9ydCwJCQkvLyBCT1RIOiAwPWZpcnN0LCAxPXNlY29uZCwgb3RoZXI9c2VlIGJlbG93CisJCWhza2lhX2N0cywJCS8vIFVTQTI2OiByZXBvcnRzIEhTS0lBIHBpbgorCQkJCQkJLy8gVVNBMTc6IHJlcG9ydHMgQ1RTIHBpbgorCQlncGlhX2RjZCwJCS8vIFVTQTI2OiByZXBvcnRzIEdQSUEgcGluCisJCQkJCQkvLyBVU0ExNzogcmVwb3J0cyBEQ0QgcGluCisJCWRzciwJCQkvLyBVU0ExNzogcmVwb3J0cyBEU1IgcGluCisJCXJpLAkJCQkvLyBVU0ExNzogcmVwb3J0cyBSSSBwaW4KKwkJX3R4T2ZmLAkJCS8vIHBvcnQgaGFzIGJlZW4gZGlzYWJsZWQgKGJ5IGhvc3QpCisJCV90eFhvZmYsCQkvLyBwb3J0IGlzIGluIFhPRkYgc3RhdGUgKGVpdGhlciBob3N0IG9yIFJYIFhPRkYpCisJCXJ4RW5hYmxlZCwJCS8vIGFzIGNvbmZpZ3VyZWQgYnkgcnhPbi9yeE9mZiAxPW9uLCAwPW9mZgorCQljb250cm9sUmVzcG9uc2U7Ly8gMT1hIGNvbnRyb2wgbWVzc2FnZSBoYXMgYmVlbiBwcm9jZXNzZWQKK307CisKKy8vIGJpdHMgaW4gUlggZGF0YSBtZXNzYWdlIHdoZW4gU1RBVCBieXRlIGlzIGluY2x1ZGVkCisjZGVmaW5lCVJYRVJST1JfT1ZFUlJVTgkweDAyCisjZGVmaW5lCVJYRVJST1JfUEFSSVRZCTB4MDQKKyNkZWZpbmUJUlhFUlJPUl9GUkFNSU5HCTB4MDgKKyNkZWZpbmUJUlhFUlJPUl9CUkVBSwkweDEwCisKK3N0cnVjdCBrZXlzcGFuX3VzYTI2X2dsb2JhbENvbnRyb2xNZXNzYWdlCit7CisJdTgJc2VuZEdsb2JhbFN0YXR1cywJLy8gMj1yZXF1ZXN0IGZvciB0d28gc3RhdHVzIHJlc3BvbnNlcworCQlyZXNldFN0YXR1c1RvZ2dsZSwJLy8gMT1yZXNldCBnbG9iYWwgc3RhdHVzIHRvZ2dsZQorCQlyZXNldFN0YXR1c0NvdW50OwkvLyBhIGN5Y2xpbmcgdmFsdWUKK307CisKK3N0cnVjdCBrZXlzcGFuX3VzYTI2X2dsb2JhbFN0YXR1c01lc3NhZ2UKK3sKKwl1OAlwb3J0LAkJCQkvLyAzCisJCXNlbmRHbG9iYWxTdGF0dXMsCS8vIGZyb20gcmVxdWVzdCwgZGVjcmVtZW50ZWQKKwkJcmVzZXRTdGF0dXNDb3VudDsJLy8gYXMgaW4gcmVxdWVzdAorfTsKKworc3RydWN0IGtleXNwYW5fdXNhMjZfZ2xvYmFsRGVidWdNZXNzYWdlCit7CisJdTgJcG9ydCwJCQkJLy8gMgorCQlhLAorCQliLAorCQljLAorCQlkOworfTsKKworLy8gaWU6IHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhbiBFWlVTQiBlbmRwb2ludCBidWZmZXIKKyNkZWZpbmUJTUFYX0RBVEFfTEVOCQkJNjQKKworLy8gdXBkYXRlIHN0YXR1cyBhcHByb3guIDYwIHRpbWVzIGEgc2Vjb25kICgxNi42NjY2IG1zKQorI2RlZmluZQlTVEFUVVNfVVBEQVRFX0lOVEVSVkFMCTE2CisKKy8vIHN0YXR1cyByYXRpb25pbmcgdHVuaW5nIHZhbHVlIChlYWNoIHBvcnQgZ2V0cyBjaGVja2VkIGVhY2ggbiBtcykKKyNkZWZpbmUJU1RBVFVTX1JBVElPTgkxMAorCisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2EyOF9mdy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjhfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDhiMGEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjhfZncuaApAQCAtMCwwICsxLDQ2NiBAQAorLyoga2V5c3Bhbl91c2EyOF9mdy5oCisKKwlUaGUgZmlybXdhcmUgY29udGFpbmVkIGhlcmVpbiBhcyBrZXlzcGFuX3VzYTI4X2Z3LmggaXMKKworCQlDb3B5cmlnaHQgKEMpIDE5OTktMjAwMQorCQlLZXlzcGFuLCBBIGRpdmlzaW9uIG9mIElubm9TeXMgSW5jb3Jwb3JhdGVkICgiS2V5c3BhbiIpCisJCQorCWFzIGFuIHVucHVibGlzaGVkIHdvcmsuIFRoaXMgbm90aWNlIGRvZXMgbm90IGltcGx5IHVucmVzdHJpY3RlZCBvcgorCXB1YmxpYyBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIGZyb20gd2hpY2ggdGhpcyBmaXJtd2FyZSBpbWFnZSBpcworCWRlcml2ZWQuICBFeGNlcHQgYXMgbm90ZWQgYmVsb3cgdGhpcyBmaXJtd2FyZSBpbWFnZSBtYXkgbm90IGJlIAorCXJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQgCisJS2V5c3BhbidzIHByaW9yIHdyaXR0ZW4gY29uc2VudC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKwlQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgCisJaW1hZ2UgYXMgcGFydCBvZiBhIExpbnV4IG9yIG90aGVyIE9wZW4gU291cmNlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIAorCWluIHRleHQgb3IgYmluYXJ5IGZvcm0gYXMgcmVxdWlyZWQuIAorCisJVGhpcyBmaXJtd2FyZSBtYXkgbm90IGJlIG1vZGlmaWVkIGFuZCBtYXkgb25seSBiZSB1c2VkIHdpdGggIAorCUtleXNwYW4gaGFyZHdhcmUuICBEaXN0cmlidXRpb24gYW5kL29yIE1vZGlmaWNhdGlvbiBvZiB0aGUgCisJa2V5c3Bhbi5jIGRyaXZlciB3aGljaCBpbmNsdWRlcyB0aGlzIGZpcm13YXJlLCBpbiB3aG9sZSBvciBpbiAKKwlwYXJ0LCByZXF1aXJlcyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3RhdGVtZW50LiIKKworKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkIGtleXNwYW5fdXNhMjhfZmlybXdhcmVbXSA9IHsKKyB7MHgwMDI2LCAxMCwgeyAweDEyLCAweDE3LCAweGRiLCAweDEyLCAweDE4LCAweGI1LCAweDEyLCAweDE0LCAweGMzLCAweDIyfX0sCisgezB4MDAzMywgIDMsIHsgMHgwMiwgMHgwMCwgMHgxZH19LAorIHsweDAwMWQsICA0LCB7IDB4NTMsIDB4ZDgsIDB4ZWYsIDB4MzJ9fSwKKyB7MHgwMDA2LCAxNiwgeyAweDhlLCAweDEyLCAweDhmLCAweDEzLCAweGU1LCAweDEzLCAweDE1LCAweDEzLCAweGFlLCAweDEyLCAweDcwLCAweDAyLCAweDE1LCAweDEyLCAweDRlLCAweDYwfX0sCisgezB4MDAxNiwgIDcsIHsgMHgwNSwgMHgxMiwgMHgxOCwgMHhhNCwgMHg4MCwgMHhlZSwgMHgyMn19LAorIHsweDAwMDMsICAzLCB7IDB4MDIsIDB4MDAsIDB4NDZ9fSwKKyB7MHgwMDQ2LCAxNiwgeyAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweGMwLCAweGQwLCAweDc1LCAweGQwLCAweDA4fX0sCisgezB4MDA1NiwgMTYsIHsgMHgzMCwgMHg5OSwgMHgwZSwgMHgzMCwgMHgxMSwgMHgwNywgMHhhMiwgMHgxNywgMHg5MiwgMHg5YiwgMHg4NSwgMHg0NiwgMHg5OSwgMHhjMiwgMHg5OSwgMHhkMn19LAorIHsweDAwNjYsIDE2LCB7IDB4MWYsIDB4MzAsIDB4YzEsIDB4MGUsIDB4MzAsIDB4MTIsIDB4MDcsIDB4YTIsIDB4MTgsIDB4OTIsIDB4YzMsIDB4ODUsIDB4NDcsIDB4YzEsIDB4YzIsIDB4YzF9fSwKKyB7MHgwMDc2LCAxNiwgeyAweGQyLCAweDIwLCAweDIwLCAweDFmLCAweDAzLCAweDAyLCAweDA0LCAweDQyLCAweGMyLCAweDFmLCAweDIwLCAweDAzLCAweDAzLCAweDAyLCAweDAyLCAweDY3fX0sCisgezB4MDA4NiwgMTYsIHsgMHgyMCwgMHgxMSwgMHgwMywgMHgwMiwgMHgwMSwgMHgzOCwgMHhlNSwgMHg0YSwgMHhjMywgMHg5NSwgMHg3YywgMHg1MCwgMHgzZSwgMHgyMCwgMHgxMywgMHgzNn19LAorIHsweDAwOTYsIDE2LCB7IDB4MjAsIDB4MGIsIDB4MzMsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4MjAsIDB4ZTMsIDB4MDMsIDB4MjAsIDB4MWMsIDB4MjksIDB4MzAsIDB4MWIsIDB4MTJ9fSwKKyB7MHgwMGE2LCAxNiwgeyAweGFlLCAweDRhLCAweDA1LCAweDRhLCAweDc0LCAweDQwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweDEzfX0sCisgezB4MDBiNiwgMTYsIHsgMHg5MiwgMHgxNywgMHhhZSwgMHg0YSwgMHgwNSwgMHg0YSwgMHg3NCwgMHg0MCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4M319LAorIHsweDAwYzYsIDE2LCB7IDB4ZTAsIDB4ZjUsIDB4NDYsIDB4MDIsIDB4MDQsIDB4NDAsIDB4YzIsIDB4MTEsIDB4MDIsIDB4MDQsIDB4NDAsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTQsIDB4ZjB9fSwKKyB7MHgwMGQ2LCAxNiwgeyAweGMyLCAweDAzLCAweDMwLCAweDE1LCAweDBjLCAweGMyLCAweDE1LCAweDkwLCAweDdmLCAweGJmLCAweDA0LCAweGYwLCAweGMyLCAweDExLCAweDAyLCAweDA0fX0sCisgezB4MDBlNiwgMTYsIHsgMHg0MCwgMHg5MCwgMHg3ZiwgMHhjOCwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNSwgMHhjMiwgMHgxMSwgMHgwMiwgMHgwNCwgMHg0MCwgMHg5MCwgMHg3ZiwgMHhjOX19LAorIHsweDAwZjYsIDE2LCB7IDB4ZTAsIDB4ZjUsIDB4N2MsIDB4OTAsIDB4N2QsIDB4YzAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTUsIDB4MjAsIDB4MTMsIDB4MmQsIDB4MjAsIDB4MGIsIDB4MmF9fSwKKyB7MHgwMDQzLCAgMywgeyAweDAyLCAweDFiLCAweDAwfX0sCisgezB4MDAyMywgIDMsIHsgMHgwMiwgMHgwMCwgMHg0Nn19LAorIHsweDAwM2IsICAzLCB7IDB4MDIsIDB4MDAsIDB4NDZ9fSwKKyB7MHgwMDAwLCAgMywgeyAweDAyLCAweDE2LCAweDNkfX0sCisgezB4MDEwNiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHgyMCwgMHhlMywgMHgwMywgMHgyMCwgMHgxYywgMHgyMCwgMHgzMCwgMHgxYiwgMHgxMSwgMHg5MCwgMHg3ZCwgMHhjMSwgMHhlMCwKKyAgMHgxMywgMHg5MiwgMHgxNywgMHhhMywgMHhlMCwgMHhmNSwgMHg0NiwgMHg3NSwgMHg0YSwgMHgwMywgMHgwMiwgMHgwNCwgMHg0MCwgMHg3NSwgMHg0YSwgMHgwMiwKKyAgMHg5MCwgMHg3ZCwgMHhjMSwgMHhlMCwgMHhmNSwgMHg0NiwgMHgwMiwgMHgwNCwgMHg0MCwgMHg3NSwgMHg0YSwgMHgwMSwgMHhjMiwgMHgxMSwgMHgwMiwgMHgwNCwKKyAgMHg0MCwgMHhlNSwgMHg0YSwgMHhjMywgMHg5NSwgMHg3YywgMHg1MCwgMHgwMywgMHgwMiwgMHgwMSwgMHhlMCwgMHg5MCwgMHg3ZiwgMHhjNiwgMHhlMH19LAorIHsweDAxNDYsIDY0LCB7IDB4MzAsIDB4ZTEsIDB4MDcsIDB4YzIsIDB4MjEsIDB4YzIsIDB4MDUsIDB4MDIsIDB4MDQsIDB4NDAsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTAsIDB4ZjUsIDB4N2MsIDB4OTAsCisgIDB4N2UsIDB4NDAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTUsIDB4MzAsIDB4MTMsIDB4MDMsIDB4MDIsIDB4MDEsIDB4ZDgsIDB4MjAsIDB4MGIsIDB4NzIsIDB4MjAsCisgIDB4MDAsIDB4NmYsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4MjAsIDB4ZTMsIDB4MDMsIDB4MjAsIDB4MWMsIDB4NjUsIDB4MzAsIDB4MWIsIDB4MTAsIDB4OTAsCisgIDB4N2UsIDB4NDEsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4OWIsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4OTksIDB4NzUsIDB4NGEsIDB4MDMsIDB4ODAsIDB4MDl9fSwKKyB7MHgwMTg2LCA2NCwgeyAweDkwLCAweDdlLCAweDQxLCAweGUwLCAweGY1LCAweDk5LCAweDc1LCAweDRhLCAweDAyLCAweGU1LCAweDRhLCAweGMzLCAweDk1LCAweDdjLCAweDQwLCAweDE3LCAweDkwLAorICAweDdmLCAweGM3LCAweGU0LCAweGYwLCAweGMyLCAweDAzLCAweDIwLCAweDE1LCAweDAzLCAweDAyLCAweDA0LCAweDQwLCAweGMyLCAweDE1LCAweDkwLCAweDdmLAorICAweGJmLCAweDA0LCAweGYwLCAweDAyLCAweDA0LCAweDQwLCAweDMwLCAweDFiLCAweDEyLCAweGFlLCAweDRhLCAweDA1LCAweDRhLCAweDc0LCAweDQwLCAweDJlLAorICAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDE3LCAweGFlLCAweDRhLCAweDA1LCAweDRhfX0sCisgezB4MDFjNiwgNjQsIHsgMHg3NCwgMHg0MCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHg0NiwgMHhkMiwgMHgxMSwgMHgwMiwgMHgwNCwKKyAgMHg0MCwgMHg3NSwgMHg0YSwgMHgwMSwgMHhjMiwgMHgyMSwgMHgwMiwgMHgwNCwgMHg0MCwgMHgzMCwgMHgxMywgMHgwMywgMHgwMiwgMHgwMiwgMHg2MiwgMHgyMCwKKyAgMHgwYiwgMHg3OSwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHgyMCwgMHhlMywgMHgwMywgMHgyMCwgMHgxYywgMHg2ZiwgMHgzMCwgMHgxYiwgMHgxMiwgMHhhZSwKKyAgMHg0YSwgMHgwNSwgMHg0YSwgMHg3NCwgMHg0MCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMCwgMHgxM319LAorIHsweDAyMDYsIDY0LCB7IDB4OTIsIDB4OWIsIDB4YWUsIDB4NGEsIDB4MDUsIDB4NGEsIDB4NzQsIDB4NDAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsCisgIDB4ZjUsIDB4OTksIDB4ZTUsIDB4NGEsIDB4YzMsIDB4OTUsIDB4N2MsIDB4NDAsIDB4MTcsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTQsIDB4ZjAsIDB4YzIsIDB4MDMsCisgIDB4MjAsIDB4MTUsIDB4MDMsIDB4MDIsIDB4MDQsIDB4NDAsIDB4YzIsIDB4MTUsIDB4OTAsIDB4N2YsIDB4YmYsIDB4MDQsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4NDAsCisgIDB4MzAsIDB4MWIsIDB4MTIsIDB4YWUsIDB4NGEsIDB4MDUsIDB4NGEsIDB4NzQsIDB4NDAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2V9fSwKKyB7MHgwMjQ2LCA2NCwgeyAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDE3LCAweGFlLCAweDRhLCAweDA1LCAweDRhLCAweDc0LCAweDQwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LAorICAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDQ2LCAweGQyLCAweDExLCAweDAyLCAweDA0LCAweDQwLCAweGMyLCAweDIxLCAweDAyLCAweDA0LCAweDQwLAorICAweDIwLCAweDExLCAweDAzLCAweDAyLCAweDAzLCAweDE5LCAweGU1LCAweDRhLCAweGMzLCAweDk1LCAweDdjLCAweDUwLCAweDNlLCAweDIwLCAweDEzLCAweDM2LAorICAweDIwLCAweDBiLCAweDMzLCAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDIwLCAweGUzLCAweDAzLCAweDIwLCAweDFjLCAweDI5LCAweDMwLCAweDFifX0sCisgezB4MDI4NiwgNjQsIHsgMHgxMiwgMHhhZSwgMHg0YSwgMHgwNSwgMHg0YSwgMHg3NCwgMHhjMCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywKKyAgMHg5MiwgMHgxNywgMHhhZSwgMHg0YSwgMHgwNSwgMHg0YSwgMHg3NCwgMHhjMCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywKKyAgMHhlMCwgMHhmNSwgMHg0NiwgMHgwMiwgMHgwNCwgMHg0MCwgMHhjMiwgMHgxMSwgMHgwMiwgMHgwNCwgMHg0MCwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlNCwgMHhmMCwKKyAgMHhkMiwgMHgwMywgMHgzMCwgMHgxNSwgMHgwYywgMHhjMiwgMHgxNSwgMHg5MCwgMHg3ZiwgMHhiZiwgMHgwNCwgMHhmMCwgMHhjMiwgMHgxMSwgMHgwMn19LAorIHsweDAyYzYsIDY0LCB7IDB4MDQsIDB4NDAsIDB4OTAsIDB4N2YsIDB4YzYsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDUsIDB4YzIsIDB4MTEsIDB4MDIsIDB4MDQsIDB4NDAsIDB4OTAsIDB4N2YsIDB4YzcsCisgIDB4ZTAsIDB4ZjUsIDB4N2MsIDB4OTAsIDB4N2UsIDB4NDAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTUsIDB4MjAsIDB4MTMsIDB4MmQsIDB4MjAsIDB4MGIsIDB4MmEsCisgIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4MjAsIDB4ZTMsIDB4MDMsIDB4MjAsIDB4MWMsIDB4MjAsIDB4MzAsIDB4MWIsIDB4MTEsIDB4OTAsIDB4N2UsIDB4NDEsCisgIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTcsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4NDYsIDB4NzUsIDB4NGEsIDB4MDMsIDB4MDIsIDB4MDQsIDB4NDAsIDB4NzV9fSwKKyB7MHgwMzA2LCA2NCwgeyAweDRhLCAweDAyLCAweDkwLCAweDdlLCAweDQxLCAweGUwLCAweGY1LCAweDQ2LCAweDAyLCAweDA0LCAweDQwLCAweDc1LCAweDRhLCAweDAxLCAweGMyLCAweDExLCAweDAyLAorICAweDA0LCAweDQwLCAweGU1LCAweDRhLCAweGMzLCAweDk1LCAweDdjLCAweDUwLCAweDAzLCAweDAyLCAweDAzLCAweGMxLCAweDkwLCAweDdmLCAweGM4LCAweGUwLAorICAweDMwLCAweGUxLCAweDA3LCAweGMyLCAweDIxLCAweGMyLCAweDA1LCAweDAyLCAweDA0LCAweDQwLCAweDkwLCAweDdmLCAweGM5LCAweGUwLCAweGY1LCAweDdjLAorICAweDkwLCAweDdkLCAweGMwLCAweGUwLCAweDEzLCAweDkyLCAweDE1LCAweDMwLCAweDEzLCAweDAzLCAweDAyLCAweDAzLCAweGI5LCAweDIwLCAweDBifX0sCisgezB4MDM0NiwgNjQsIHsgMHg3MiwgMHgyMCwgMHgwMCwgMHg2ZiwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHgyMCwgMHhlMywgMHgwMywgMHgyMCwgMHgxYywgMHg2NSwgMHgzMCwgMHgxYiwgMHgxMCwKKyAgMHg5MCwgMHg3ZCwgMHhjMSwgMHhlMCwgMHgxMywgMHg5MiwgMHg5YiwgMHhhMywgMHhlMCwgMHhmNSwgMHg5OSwgMHg3NSwgMHg0YSwgMHgwMywgMHg4MCwgMHgwOSwKKyAgMHg5MCwgMHg3ZCwgMHhjMSwgMHhlMCwgMHhmNSwgMHg5OSwgMHg3NSwgMHg0YSwgMHgwMiwgMHhlNSwgMHg0YSwgMHhjMywgMHg5NSwgMHg3YywgMHg0MCwgMHgxNywKKyAgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlNCwgMHhmMCwgMHhkMiwgMHgwMywgMHgyMCwgMHgxNSwgMHgwMywgMHgwMiwgMHgwNCwgMHg0MCwgMHhjMiwgMHgxNX19LAorIHsweDAzODYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4YmYsIDB4MDQsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4NDAsIDB4MzAsIDB4MWIsIDB4MTIsIDB4YWUsIDB4NGEsIDB4MDUsIDB4NGEsIDB4NzQsIDB4YzAsCisgIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTcsIDB4YWUsIDB4NGEsIDB4MDUsIDB4NGEsCisgIDB4NzQsIDB4YzAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4NDYsIDB4ZDIsIDB4MTEsIDB4MDIsCisgIDB4MDQsIDB4NDAsIDB4NzUsIDB4NGEsIDB4MDEsIDB4YzIsIDB4MjEsIDB4MDIsIDB4MDQsIDB4NDAsIDB4MzAsIDB4MTMsIDB4MDMsIDB4MDIsIDB4MDR9fSwKKyB7MHgwM2M2LCA2NCwgeyAweDNlLCAweDIwLCAweDBiLCAweDc0LCAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDIwLCAweGUzLCAweDAzLCAweDIwLCAweDFjLCAweDZhLCAweDMwLCAweDFiLCAweDEyLAorICAweGFlLCAweDRhLCAweDA1LCAweDRhLCAweDc0LCAweGMwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweDEzLAorICAweDkyLCAweDliLCAweGFlLCAweDRhLCAweDA1LCAweDRhLCAweDc0LCAweGMwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLAorICAweGUwLCAweGY1LCAweDk5LCAweGU1LCAweDRhLCAweGMzLCAweDk1LCAweDdjLCAweDQwLCAweDEzLCAweDkwLCAweDdmLCAweGM5LCAweGU0LCAweGYwfX0sCisgezB4MDQwNiwgNjQsIHsgMHhkMiwgMHgwMywgMHgzMCwgMHgxNSwgMHgzNSwgMHhjMiwgMHgxNSwgMHg5MCwgMHg3ZiwgMHhiZiwgMHgwNCwgMHhmMCwgMHg4MCwgMHgyYywgMHgzMCwgMHgxYiwgMHgxMiwKKyAgMHhhZSwgMHg0YSwgMHgwNSwgMHg0YSwgMHg3NCwgMHhjMCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywKKyAgMHg5MiwgMHgxNywgMHhhZSwgMHg0YSwgMHgwNSwgMHg0YSwgMHg3NCwgMHhjMCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywKKyAgMHhlMCwgMHhmNSwgMHg0NiwgMHhkMiwgMHgxMSwgMHg4MCwgMHgwMiwgMHhjMiwgMHgyMSwgMHhkMiwgMHgyNSwgMHgyMCwgMHgyMCwgMHgwMywgMHgwMn19LAorIHsweDA0NDYsIDY0LCB7IDB4MDgsIDB4MGMsIDB4YzIsIDB4MjAsIDB4MjAsIDB4MDQsIDB4MDMsIDB4MDIsIDB4MDYsIDB4MzEsIDB4MjAsIDB4MTIsIDB4MDMsIDB4MDIsIDB4MDUsIDB4MDIsIDB4ZTUsCisgIDB4NGIsIDB4YzMsIDB4OTUsIDB4N2QsIDB4NTAsIDB4M2UsIDB4MjAsIDB4MTQsIDB4MzYsIDB4MjAsIDB4MGQsIDB4MzMsIDB4OTAsIDB4N2YsIDB4OWEsIDB4ZTAsCisgIDB4MjAsIDB4ZTUsIDB4MDMsIDB4MjAsIDB4MWUsIDB4MjksIDB4MzAsIDB4MWQsIDB4MTIsIDB4YWUsIDB4NGIsIDB4MDUsIDB4NGIsIDB4NzQsIDB4NDAsIDB4MmUsCisgIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTgsIDB4YWUsIDB4NGIsIDB4MDUsIDB4NGJ9fSwKKyB7MHgwNDg2LCA2NCwgeyAweDc0LCAweDQwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDQ3LCAweDAyLCAweDA4LCAweDBhLCAweGMyLAorICAweDEyLCAweDAyLCAweDA4LCAweDBhLCAweDkwLCAweDdmLCAweGNiLCAweGU0LCAweGYwLCAweGMyLCAweDA0LCAweDMwLCAweDE2LCAweDBjLCAweGMyLCAweDE2LAorICAweDkwLCAweDdmLCAweGMxLCAweDA0LCAweGYwLCAweGMyLCAweDEyLCAweDAyLCAweDA4LCAweDBhLCAweDkwLCAweDdmLCAweGNjLCAweGUwLCAweDMwLCAweGUxLAorICAweDA1LCAweGMyLCAweDEyLCAweDAyLCAweDA4LCAweDBhLCAweDkwLCAweDdmLCAweGNkLCAweGUwLCAweGY1LCAweDdkLCAweDkwLCAweDdjLCAweGMwfX0sCisgezB4MDRjNiwgNjQsIHsgMHhlMCwgMHgxMywgMHg5MiwgMHgxNiwgMHgyMCwgMHgxNCwgMHgyZCwgMHgyMCwgMHgwZCwgMHgyYSwgMHg5MCwgMHg3ZiwgMHg5YSwgMHhlMCwgMHgyMCwgMHhlNSwgMHgwMywKKyAgMHgyMCwgMHgxZSwgMHgyMCwgMHgzMCwgMHgxZCwgMHgxMSwgMHg5MCwgMHg3YywgMHhjMSwgMHhlMCwgMHgxMywgMHg5MiwgMHgxOCwgMHhhMywgMHhlMCwgMHhmNSwKKyAgMHg0NywgMHg3NSwgMHg0YiwgMHgwMywgMHgwMiwgMHgwOCwgMHgwYSwgMHg3NSwgMHg0YiwgMHgwMiwgMHg5MCwgMHg3YywgMHhjMSwgMHhlMCwgMHhmNSwgMHg0NywKKyAgMHgwMiwgMHgwOCwgMHgwYSwgMHg3NSwgMHg0YiwgMHgwMSwgMHhjMiwgMHgxMiwgMHgwMiwgMHgwOCwgMHgwYSwgMHhlNSwgMHg0YiwgMHhjMywgMHg5NX19LAorIHsweDA1MDYsIDY0LCB7IDB4N2QsIDB4NTAsIDB4MDMsIDB4MDIsIDB4MDUsIDB4YWEsIDB4OTAsIDB4N2YsIDB4Y2EsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDcsIDB4YzIsIDB4MjIsIDB4YzIsIDB4MDYsCisgIDB4MDIsIDB4MDgsIDB4MGEsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZTAsIDB4ZjUsIDB4N2QsIDB4OTAsIDB4N2QsIDB4NDAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTYsCisgIDB4MzAsIDB4MTQsIDB4MDMsIDB4MDIsIDB4MDUsIDB4YTIsIDB4MjAsIDB4MGQsIDB4NzIsIDB4MjAsIDB4MDAsIDB4NmYsIDB4OTAsIDB4N2YsIDB4OWEsIDB4ZTAsCisgIDB4MjAsIDB4ZTUsIDB4MDMsIDB4MjAsIDB4MWUsIDB4NjUsIDB4MzAsIDB4MWQsIDB4MTAsIDB4OTAsIDB4N2QsIDB4NDEsIDB4ZTAsIDB4MTMsIDB4OTJ9fSwKKyB7MHgwNTQ2LCA2NCwgeyAweGMzLCAweGEzLCAweGUwLCAweGY1LCAweGMxLCAweDc1LCAweDRiLCAweDAzLCAweDgwLCAweDA5LCAweDkwLCAweDdkLCAweDQxLCAweGUwLCAweGY1LCAweGMxLCAweDc1LAorICAweDRiLCAweDAyLCAweGU1LCAweDRiLCAweGMzLCAweDk1LCAweDdkLCAweDQwLCAweDE3LCAweDkwLCAweDdmLCAweGNiLCAweGU0LCAweGYwLCAweGMyLCAweDA0LAorICAweDIwLCAweDE2LCAweDAzLCAweDAyLCAweDA4LCAweDBhLCAweGMyLCAweDE2LCAweDkwLCAweDdmLCAweGMxLCAweDA0LCAweGYwLCAweDAyLCAweDA4LCAweDBhLAorICAweDMwLCAweDFkLCAweDEyLCAweGFlLCAweDRiLCAweDA1LCAweDRiLCAweDc0LCAweDQwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkfX0sCisgezB4MDU4NiwgNjQsIHsgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgxOCwgMHhhZSwgMHg0YiwgMHgwNSwgMHg0YiwgMHg3NCwgMHg0MCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwKKyAgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHg0NywgMHhkMiwgMHgxMiwgMHgwMiwgMHgwOCwgMHgwYSwgMHg3NSwgMHg0YiwgMHgwMSwgMHhjMiwgMHgyMiwKKyAgMHgwMiwgMHgwOCwgMHgwYSwgMHgzMCwgMHgxNCwgMHgwMywgMHgwMiwgMHgwNiwgMHgyYywgMHgyMCwgMHgwZCwgMHg3OSwgMHg5MCwgMHg3ZiwgMHg5YSwgMHhlMCwKKyAgMHgyMCwgMHhlNSwgMHgwMywgMHgyMCwgMHgxZSwgMHg2ZiwgMHgzMCwgMHgxZCwgMHgxMiwgMHhhZSwgMHg0YiwgMHgwNSwgMHg0YiwgMHg3NCwgMHg0MH19LAorIHsweDA1YzYsIDY0LCB7IDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4YzMsIDB4YWUsIDB4NGIsIDB4MDUsIDB4NGIsIDB4NzQsCisgIDB4NDAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4YzEsIDB4ZTUsIDB4NGIsIDB4YzMsIDB4OTUsCisgIDB4N2QsIDB4NDAsIDB4MTcsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZTQsIDB4ZjAsIDB4YzIsIDB4MDQsIDB4MjAsIDB4MTYsIDB4MDMsIDB4MDIsIDB4MDgsIDB4MGEsCisgIDB4YzIsIDB4MTYsIDB4OTAsIDB4N2YsIDB4YzEsIDB4MDQsIDB4ZjAsIDB4MDIsIDB4MDgsIDB4MGEsIDB4MzAsIDB4MWQsIDB4MTIsIDB4YWUsIDB4NGJ9fSwKKyB7MHgwNjA2LCA2NCwgeyAweDA1LCAweDRiLCAweDc0LCAweDQwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDE4LCAweGFlLAorICAweDRiLCAweDA1LCAweDRiLCAweDc0LCAweDQwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDQ3LAorICAweGQyLCAweDEyLCAweDAyLCAweDA4LCAweDBhLCAweGMyLCAweDIyLCAweDAyLCAweDA4LCAweDBhLCAweDIwLCAweDEyLCAweDAzLCAweDAyLCAweDA2LCAweGUzLAorICAweGU1LCAweDRiLCAweGMzLCAweDk1LCAweDdkLCAweDUwLCAweDNlLCAweDIwLCAweDE0LCAweDM2LCAweDIwLCAweDBkLCAweDMzLCAweDkwLCAweDdmfX0sCisgezB4MDY0NiwgNjQsIHsgMHg5YSwgMHhlMCwgMHgyMCwgMHhlNSwgMHgwMywgMHgyMCwgMHgxZSwgMHgyOSwgMHgzMCwgMHgxZCwgMHgxMiwgMHhhZSwgMHg0YiwgMHgwNSwgMHg0YiwgMHg3NCwgMHhjMCwKKyAgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YywgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgxOCwgMHhhZSwgMHg0YiwgMHgwNSwgMHg0YiwKKyAgMHg3NCwgMHhjMCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YywgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHg0NywgMHgwMiwgMHgwOCwgMHgwYSwKKyAgMHhjMiwgMHgxMiwgMHgwMiwgMHgwOCwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhjZCwgMHhlNCwgMHhmMCwgMHhkMiwgMHgwNCwgMHgzMCwgMHgxNiwgMHgwY319LAorIHsweDA2ODYsIDY0LCB7IDB4YzIsIDB4MTYsIDB4OTAsIDB4N2YsIDB4YzEsIDB4MDQsIDB4ZjAsIDB4YzIsIDB4MTIsIDB4MDIsIDB4MDgsIDB4MGEsIDB4OTAsIDB4N2YsIDB4Y2EsIDB4ZTAsIDB4MzAsCisgIDB4ZTEsIDB4MDUsIDB4YzIsIDB4MTIsIDB4MDIsIDB4MDgsIDB4MGEsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZTAsIDB4ZjUsIDB4N2QsIDB4OTAsIDB4N2QsIDB4NDAsCisgIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTYsIDB4MjAsIDB4MTQsIDB4MmQsIDB4MjAsIDB4MGQsIDB4MmEsIDB4OTAsIDB4N2YsIDB4OWEsIDB4ZTAsIDB4MjAsIDB4ZTUsCisgIDB4MDMsIDB4MjAsIDB4MWUsIDB4MjAsIDB4MzAsIDB4MWQsIDB4MTEsIDB4OTAsIDB4N2QsIDB4NDEsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTgsIDB4YTN9fSwKKyB7MHgwNmM2LCA2NCwgeyAweGUwLCAweGY1LCAweDQ3LCAweDc1LCAweDRiLCAweDAzLCAweDAyLCAweDA4LCAweDBhLCAweDc1LCAweDRiLCAweDAyLCAweDkwLCAweDdkLCAweDQxLCAweGUwLCAweGY1LAorICAweDQ3LCAweDAyLCAweDA4LCAweDBhLCAweDc1LCAweDRiLCAweDAxLCAweGMyLCAweDEyLCAweDAyLCAweDA4LCAweDBhLCAweGU1LCAweDRiLCAweGMzLCAweDk1LAorICAweDdkLCAweDUwLCAweDAzLCAweDAyLCAweDA3LCAweDhiLCAweDkwLCAweDdmLCAweGNjLCAweGUwLCAweDMwLCAweGUxLCAweDA3LCAweGMyLCAweDIyLCAweGMyLAorICAweDA2LCAweDAyLCAweDA4LCAweDBhLCAweDkwLCAweDdmLCAweGNkLCAweGUwLCAweGY1LCAweDdkLCAweDkwLCAweDdjLCAweGMwLCAweGUwLCAweDEzfX0sCisgezB4MDcwNiwgNjQsIHsgMHg5MiwgMHgxNiwgMHgzMCwgMHgxNCwgMHgwMywgMHgwMiwgMHgwNywgMHg4MywgMHgyMCwgMHgwZCwgMHg3MiwgMHgyMCwgMHgwMCwgMHg2ZiwgMHg5MCwgMHg3ZiwgMHg5YSwKKyAgMHhlMCwgMHgyMCwgMHhlNSwgMHgwMywgMHgyMCwgMHgxZSwgMHg2NSwgMHgzMCwgMHgxZCwgMHgxMCwgMHg5MCwgMHg3YywgMHhjMSwgMHhlMCwgMHgxMywgMHg5MiwKKyAgMHhjMywgMHhhMywgMHhlMCwgMHhmNSwgMHhjMSwgMHg3NSwgMHg0YiwgMHgwMywgMHg4MCwgMHgwOSwgMHg5MCwgMHg3YywgMHhjMSwgMHhlMCwgMHhmNSwgMHhjMSwKKyAgMHg3NSwgMHg0YiwgMHgwMiwgMHhlNSwgMHg0YiwgMHhjMywgMHg5NSwgMHg3ZCwgMHg0MCwgMHgxNywgMHg5MCwgMHg3ZiwgMHhjZCwgMHhlNCwgMHhmMH19LAorIHsweDA3NDYsIDY0LCB7IDB4ZDIsIDB4MDQsIDB4MjAsIDB4MTYsIDB4MDMsIDB4MDIsIDB4MDgsIDB4MGEsIDB4YzIsIDB4MTYsIDB4OTAsIDB4N2YsIDB4YzEsIDB4MDQsIDB4ZjAsIDB4MDIsIDB4MDgsCisgIDB4MGEsIDB4MzAsIDB4MWQsIDB4MTIsIDB4YWUsIDB4NGIsIDB4MDUsIDB4NGIsIDB4NzQsIDB4YzAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2MsCisgIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTgsIDB4YWUsIDB4NGIsIDB4MDUsIDB4NGIsIDB4NzQsIDB4YzAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsCisgIDB4MzQsIDB4N2MsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4NDcsIDB4ZDIsIDB4MTIsIDB4MDIsIDB4MDgsIDB4MGEsIDB4NzUsIDB4NGIsIDB4MDF9fSwKKyB7MHgwNzg2LCA2NCwgeyAweGMyLCAweDIyLCAweDAyLCAweDA4LCAweDBhLCAweDMwLCAweDE0LCAweDAzLCAweDAyLCAweDA4LCAweDA4LCAweDIwLCAweDBkLCAweDc0LCAweDkwLCAweDdmLCAweDlhLAorICAweGUwLCAweDIwLCAweGU1LCAweDAzLCAweDIwLCAweDFlLCAweDZhLCAweDMwLCAweDFkLCAweDEyLCAweGFlLCAweDRiLCAweDA1LCAweDRiLCAweDc0LCAweGMwLAorICAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdjLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweGMzLCAweGFlLCAweDRiLCAweDA1LCAweDRiLAorICAweDc0LCAweGMwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdjLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweGMxLCAweGU1LCAweDRifX0sCisgezB4MDdjNiwgNjQsIHsgMHhjMywgMHg5NSwgMHg3ZCwgMHg0MCwgMHgxMywgMHg5MCwgMHg3ZiwgMHhjZCwgMHhlNCwgMHhmMCwgMHhkMiwgMHgwNCwgMHgzMCwgMHgxNiwgMHgzNSwgMHhjMiwgMHgxNiwKKyAgMHg5MCwgMHg3ZiwgMHhjMSwgMHgwNCwgMHhmMCwgMHg4MCwgMHgyYywgMHgzMCwgMHgxZCwgMHgxMiwgMHhhZSwgMHg0YiwgMHgwNSwgMHg0YiwgMHg3NCwgMHhjMCwKKyAgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YywgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgxOCwgMHhhZSwgMHg0YiwgMHgwNSwgMHg0YiwKKyAgMHg3NCwgMHhjMCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YywgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHg0NywgMHhkMiwgMHgxMn19LAorIHsweDA4MDYsIDY0LCB7IDB4ODAsIDB4MDIsIDB4YzIsIDB4MjIsIDB4ZDIsIDB4MjUsIDB4MjAsIDB4OTgsIDB4MDMsIDB4MDIsIDB4MDksIDB4M2UsIDB4YzIsIDB4OTgsIDB4MjAsIDB4MDEsIDB4MDMsCisgIDB4MDIsIDB4MDgsIDB4YjAsIDB4MjAsIDB4MjMsIDB4MjcsIDB4YWUsIDB4NDgsIDB4MDUsIDB4NDgsIDB4NzQsIDB4ODAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsCisgIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4OTksIDB4ZjAsIDB4MzAsIDB4MWIsIDB4NDksIDB4YWUsIDB4NDgsIDB4MDUsIDB4NDgsIDB4NzQsIDB4ODAsCisgIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4OTgsIDB4ZjAsIDB4ODAsIDB4MzYsIDB4YWYsIDB4OTl9fSwKKyB7MHgwODQ2LCA2NCwgeyAweGVmLCAweGI1LCAweDU4LCAweDA0LCAweGQyLCAweDBiLCAweDgwLCAweDJjLCAweGVmLCAweGI1LCAweDU3LCAweDA0LCAweGMyLCAweDBiLCAweDgwLCAweDI0LCAweGFlLAorICAweDQ4LCAweDA1LCAweDQ4LCAweDc0LCAweDgwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDMwLAorICAweDFiLCAweDExLCAweGFlLCAweDQ4LCAweDA1LCAweDQ4LCAweDc0LCAweDgwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLAorICAweGU1LCAweDk4LCAweGYwLCAweGQyLCAweDE5LCAweGU1LCAweDQ4LCAweGMzLCAweDk1LCAweDU0LCAweDUwLCAweDAzLCAweDAyLCAweDA5LCAweDNjfX0sCisgezB4MDg4NiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHhiOCwgMHhlMCwgMHgzMCwgMHhlMSwgMHgxNSwgMHhlNSwgMHg0OCwgMHhjMywgMHg5NCwgMHg0MCwgMHg1MCwgMHgwMywgMHgwMiwgMHgwOSwgMHgzYywKKyAgMHgxNSwgMHg0OCwgMHgxNSwgMHg0OCwgMHgwNSwgMHgyZCwgMHhkMiwgMHgwYywgMHgwMiwgMHgwOSwgMHgzYywgMHg5MCwgMHg3ZiwgMHhiNywgMHhlNSwgMHg0OCwKKyAgMHhmMCwgMHg3NSwgMHg0OCwgMHgwMCwgMHhjMiwgMHgwMSwgMHgwMiwgMHgwOSwgMHgzYywgMHgyMCwgMHgyMywgMHgyNywgMHhhZSwgMHg0OCwgMHgwNSwgMHg0OCwKKyAgMHg3NCwgMHgwMCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg5OSwgMHhmMCwgMHgzMCwgMHgxYn19LAorIHsweDA4YzYsIDY0LCB7IDB4NDksIDB4YWUsIDB4NDgsIDB4MDUsIDB4NDgsIDB4NzQsIDB4MDAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4OTgsCisgIDB4ZjAsIDB4ODAsIDB4MzYsIDB4YWYsIDB4OTksIDB4ZWYsIDB4YjUsIDB4NTgsIDB4MDQsIDB4ZDIsIDB4MGIsIDB4ODAsIDB4MmMsIDB4ZWYsIDB4YjUsIDB4NTcsCisgIDB4MDQsIDB4YzIsIDB4MGIsIDB4ODAsIDB4MjQsIDB4YWUsIDB4NDgsIDB4MDUsIDB4NDgsIDB4NzQsIDB4MDAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsCisgIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MzAsIDB4MWIsIDB4MTEsIDB4YWUsIDB4NDgsIDB4MDUsIDB4NDgsIDB4NzQsIDB4MDAsIDB4MmV9fSwKKyB7MHgwOTA2LCA2NCwgeyAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGU1LCAweDk4LCAweGYwLCAweGQyLCAweDE5LCAweGU1LCAweDQ4LCAweGMzLCAweDk1LCAweDU0LAorICAweDQwLCAweDIzLCAweDkwLCAweDdmLCAweGI2LCAweGUwLCAweDMwLCAweGUxLCAweDExLCAweGU1LCAweDQ4LCAweGMzLCAweDk0LCAweDQwLCAweDQwLCAweDE1LAorICAweDE1LCAweDQ4LCAweDE1LCAweDQ4LCAweDA1LCAweDJkLCAweGQyLCAweDBjLCAweDgwLCAweDBiLCAweDkwLCAweDdmLCAweGI5LCAweGU1LCAweDQ4LCAweGYwLAorICAweDc1LCAweDQ4LCAweDAwLCAweGQyLCAweDAxLCAweGQyLCAweDI1LCAweDIwLCAweGMwLCAweDAzLCAweDAyLCAweDBhLCAweDcwLCAweGMyLCAweGMwfX0sCisgezB4MDk0NiwgNjQsIHsgMHgyMCwgMHgwMiwgMHgwMywgMHgwMiwgMHgwOSwgMHhlMiwgMHgyMCwgMHgyNCwgMHgyNywgMHhhZSwgMHg0OSwgMHgwNSwgMHg0OSwgMHg3NCwgMHg4MCwgMHgyZSwgMHhmNSwKKyAgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlNSwgMHhjMSwgMHhmMCwgMHgzMCwgMHgxZCwgMHg0OSwgMHhhZSwgMHg0OSwgMHgwNSwgMHg0OSwKKyAgMHg3NCwgMHg4MCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlNSwgMHhjMCwgMHhmMCwgMHg4MCwgMHgzNiwgMHhhZiwKKyAgMHhjMSwgMHhlZiwgMHhiNSwgMHg3MCwgMHgwNCwgMHhkMiwgMHgwZCwgMHg4MCwgMHgyYywgMHhlZiwgMHhiNSwgMHg2ZiwgMHgwNCwgMHhjMiwgMHgwZH19LAorIHsweDA5ODYsIDY0LCB7IDB4ODAsIDB4MjQsIDB4YWUsIDB4NDksIDB4MDUsIDB4NDksIDB4NzQsIDB4ODAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZWYsCisgIDB4ZjAsIDB4MzAsIDB4MWQsIDB4MTEsIDB4YWUsIDB4NDksIDB4MDUsIDB4NDksIDB4NzQsIDB4ODAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsCisgIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4YzAsIDB4ZjAsIDB4ZDIsIDB4MWEsIDB4ZTUsIDB4NDksIDB4YzMsIDB4OTUsIDB4NmMsIDB4NTAsIDB4MDMsIDB4MDIsIDB4MGEsCisgIDB4NmUsIDB4OTAsIDB4N2YsIDB4YmMsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MTUsIDB4ZTUsIDB4NDksIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTAsIDB4MDN9fSwKKyB7MHgwOWM2LCA2NCwgeyAweDAyLCAweDBhLCAweDZlLCAweDE1LCAweDQ5LCAweDE1LCAweDQ5LCAweDA1LCAweDM5LCAweGQyLCAweDBlLCAweDAyLCAweDBhLCAweDZlLCAweDkwLCAweDdmLCAweGJiLAorICAweGU1LCAweDQ5LCAweGYwLCAweDc1LCAweDQ5LCAweDAwLCAweGMyLCAweDAyLCAweDAyLCAweDBhLCAweDZlLCAweDIwLCAweDI0LCAweDI3LCAweGFlLCAweDQ5LAorICAweDA1LCAweDQ5LCAweDc0LCAweDAwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGU1LCAweGMxLCAweGYwLCAweDMwLAorICAweDFkLCAweDQ5LCAweGFlLCAweDQ5LCAweDA1LCAweDQ5LCAweDc0LCAweDAwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1fX0sCisgezB4MGEwNiwgNjQsIHsgMHg4MywgMHhlNSwgMHhjMCwgMHhmMCwgMHg4MCwgMHgzNiwgMHhhZiwgMHhjMSwgMHhlZiwgMHhiNSwgMHg3MCwgMHgwNCwgMHhkMiwgMHgwZCwgMHg4MCwgMHgyYywgMHhlZiwKKyAgMHhiNSwgMHg2ZiwgMHgwNCwgMHhjMiwgMHgwZCwgMHg4MCwgMHgyNCwgMHhhZSwgMHg0OSwgMHgwNSwgMHg0OSwgMHg3NCwgMHgwMCwgMHgyZSwgMHhmNSwgMHg4MiwKKyAgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgzMCwgMHgxZCwgMHgxMSwgMHhhZSwgMHg0OSwgMHgwNSwgMHg0OSwgMHg3NCwgMHgwMCwKKyAgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlNSwgMHhjMCwgMHhmMCwgMHhkMiwgMHgxYSwgMHhlNSwgMHg0OX19LAorIHsweDBhNDYsIDY0LCB7IDB4YzMsIDB4OTUsIDB4NmMsIDB4NDAsIDB4MjMsIDB4OTAsIDB4N2YsIDB4YmEsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MTEsIDB4ZTUsIDB4NDksIDB4YzMsIDB4OTQsIDB4NDAsCisgIDB4NDAsIDB4MTUsIDB4MTUsIDB4NDksIDB4MTUsIDB4NDksIDB4MDUsIDB4MzksIDB4ZDIsIDB4MGUsIDB4ODAsIDB4MGIsIDB4OTAsIDB4N2YsIDB4YmQsIDB4ZTUsCisgIDB4NDksIDB4ZjAsIDB4NzUsIDB4NDksIDB4MDAsIDB4ZDIsIDB4MDIsIDB4ZDIsIDB4MjUsIDB4MzAsIDB4MjUsIDB4MDUsIDB4YzIsIDB4MjUsIDB4MDIsIDB4MDAsCisgIDB4NTYsIDB4ZDAsIDB4ZDAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4OTAsIDB4N2YsIDB4Y2V9fSwKKyB7MHgwYTg2LCA2NCwgeyAweGUwLCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDBiLCAweGE1LCAweGU0LCAweGY1LCAweDEyLCAweDc0LCAweDQwLCAweDI1LCAweDEyLCAweGY1LCAweDgyLCAweGU0LAorICAweDM0LCAweDdjLCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDEyLCAweDdjLCAweDAwLCAweDdiLCAweDAwLCAweDI0LCAweDRjLCAweGY5LCAweGVjLAorICAweDM0LCAweDAwLCAweGZhLCAweGVmLCAweDEyLCAweDE1LCAweGNkLCAweDA1LCAweDEyLCAweGU1LCAweDEyLCAweGI0LCAweDE4LCAweGRiLCAweGU1LCAweDRjLAorICAweDYwLCAweDBjLCAweDc1LCAweGM5LCAweDIwLCAweDc1LCAweGM4LCAweDM2LCAweDg1LCAweDRkLCAweGNhLCAweDg1LCAweDRlLCAweGNiLCAweGU1fX0sCisgezB4MGFjNiwgNjQsIHsgMHg0ZiwgMHgxMywgMHg5MiwgMHgxYiwgMHg5MiwgMHg5ZiwgMHhlNSwgMHg1MCwgMHgxMywgMHg5MiwgMHgxYywgMHhlNSwgMHg1MSwgMHgxMywgMHg5MiwgMHgyMywgMHhlNSwKKyAgMHg1MiwgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHg4MCwgMHgwNywgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwKKyAgMHg0NCwgMHgwNCwgMHhmMCwgMHhlNSwgMHg1MywgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmMCwgMHg4MCwgMHgwNywKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHhlNSwgMHg1OSwgMHg2MCwgMHgwYiwgMHhjMiwgMHgxMywgMHhjMiwgMHgwYn19LAorIHsweDBiMDYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4OTUsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4NWEsIDB4NjAsIDB4MGIsIDB4ZDIsIDB4MGIsIDB4ZDIsIDB4MGMsIDB4OTAsIDB4N2YsCisgIDB4OTUsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4NWIsIDB4NjAsIDB4MGQsIDB4YzIsIDB4YWYsIDB4YzIsIDB4MTEsIDB4ZDIsIDB4MDAsIDB4ZTQsCisgIDB4ZjUsIDB4N2MsIDB4ZjUsIDB4NGEsIDB4ZDIsIDB4YWYsIDB4ZTUsIDB4NWMsIDB4NjAsIDB4MDUsIDB4MzAsIDB4MjMsIDB4MDIsIDB4ZDIsIDB4MGIsIDB4ZTUsCisgIDB4NWQsIDB4NjAsIDB4MTUsIDB4OTAsIDB4N2YsIDB4OTUsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4ZTAsIDB4NDR9fSwKKyB7MHgwYjQ2LCA2NCwgeyAweDAyLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweGU1LCAweDVlLCAweDYwLCAweDBhLCAweGQyLCAweDljLCAweGMyLCAweDk4LAorICAweDc1LCAweDJlLCAweDAxLCAweDc1LCAweDQwLCAweDI4LCAweGU1LCAweDVmLCAweDYwLCAweDA3LCAweGMyLCAweDljLCAweGU0LCAweGY1LCAweDQ4LCAweGY1LAorICAweDJlLCAweGU1LCAweDYwLCAweDYwLCAweDAzLCAweGU0LCAweGY1LCAweDQ4LCAweGU1LCAweDYxLCAweDYwLCAweDAyLCAweGQyLCAweDA3LCAweGU1LCAweDYyLAorICAweDYwLCAweDA4LCAweGU1LCAweDVlLCAweDcwLCAweDAyLCAweGY1LCAweDQwLCAweGQyLCAweDBjLCAweGU1LCAweDYzLCAweDYwLCAweDE5LCAweDkwfX0sCisgezB4MGI4NiwgNjQsIHsgMHg3ZiwgMHhkNywgMHg3NCwgMHgxMSwgMHhmMCwgMHg3NCwgMHgzMSwgMHhmMCwgMHg3NCwgMHgxMiwgMHhmMCwgMHg3NCwgMHgzMiwgMHhmMCwgMHg3NCwgMHgxNSwgMHhmMCwKKyAgMHg3NCwgMHgzNSwgMHhmMCwgMHhkMiwgMHgwMywgMHhkMiwgMHgwMSwgMHhkMiwgMHgwOSwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjZiwgMHhmMCwgMHhhMiwgMHgxMywKKyAgMHhlNCwgMHgzMywgMHhmZiwgMHg2NSwgMHgyYiwgMHg2MCwgMHgwNCwgMHg4ZiwgMHgyYiwgMHhkMiwgMHgwYywgMHhhMiwgMHgwYiwgMHhlNCwgMHgzMywgMHhmZiwKKyAgMHg2NSwgMHgyYywgMHg2MCwgMHgwNCwgMHg4ZiwgMHgyYywgMHhkMiwgMHgwYywgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHg1NCwgMHgwOCwgMHg2NX19LAorIHsweDBiYzYsIDY0LCB7IDB4MjcsIDB4NjAsIDB4MDcsIDB4ZTAsIDB4NTQsIDB4MDgsIDB4ZjUsIDB4MjcsIDB4ZDIsIDB4MGMsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTQsIDB4NDAsIDB4YjUsCisgIDB4MjksIDB4MDksIDB4ZTAsIDB4NTQsIDB4NDAsIDB4NjQsIDB4NDAsIDB4ZjUsIDB4MjksIDB4ZDIsIDB4MGMsIDB4MzAsIDB4MDcsIDB4MzUsIDB4YzIsIDB4YWYsCisgIDB4MzAsIDB4MDEsIDB4MTgsIDB4OTAsIDB4N2YsIDB4YjgsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MjcsIDB4ZTUsIDB4NDgsIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsCisgIDB4YjcsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4NDgsIDB4YzIsIDB4MDEsIDB4YzIsIDB4MDcsIDB4ODAsIDB4MTYsIDB4OTAsIDB4N2YsIDB4YjYsIDB4ZTB9fSwKKyB7MHgwYzA2LCA2NCwgeyAweDIwLCAweGUxLCAweDBmLCAweGU1LCAweDQ4LCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweGI5LCAweGYwLCAweGU0LCAweGY1LCAweDQ4LCAweGQyLCAweDAxLCAweGMyLAorICAweDA3LCAweGQyLCAweGFmLCAweDIwLCAweDA1LCAweDM3LCAweDMwLCAweDAzLCAweDFiLCAweDkwLCAweDdmLCAweGM2LCAweGUwLCAweDIwLCAweGUxLCAweDJkLAorICAweDkwLCAweDdlLCAweDQwLCAweGUwLCAweDEzLCAweDkyLCAweDE1LCAweDc1LCAweDRhLCAweDAxLCAweDkwLCAweDdmLCAweGM3LCAweGUwLCAweGY1LCAweDdjLAorICAweGQyLCAweDA1LCAweDgwLCAweDE5LCAweDkwLCAweDdmLCAweGM4LCAweGUwLCAweDIwLCAweGUxLCAweDEyLCAweDkwLCAweDdkLCAweGMwLCAweGUwfX0sCisgezB4MGM0NiwgNjQsIHsgMHgxMywgMHg5MiwgMHgxNSwgMHg3NSwgMHg0YSwgMHgwMSwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMCwgMHhmNSwgMHg3YywgMHhkMiwgMHgwNSwgMHgyMCwgMHgyMSwgMHgzMywKKyAgMHgyMCwgMHgwMCwgMHgwNiwgMHhlNSwgMHg0YSwgMHg2NSwgMHg3YywgMHg3MCwgMHgyYSwgMHgzMCwgMHgwNSwgMHgxYSwgMHgzMCwgMHgwMywgMHgwOSwgMHhlNCwKKyAgMHg5MCwgMHg3ZiwgMHhjNywgMHhmMCwgMHhjMiwgMHgwMywgMHg4MCwgMHgwNywgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhmMCwgMHhkMiwgMHgwMywgMHhjMiwKKyAgMHgwNSwgMHhlNCwgMHhmNSwgMHg3YywgMHhmNSwgMHg0YSwgMHgzMCwgMHgxNSwgMHgwYSwgMHhjMiwgMHgxNSwgMHhjMiwgMHgwMCwgMHg5MCwgMHg3Zn19LAorIHsweDBjODYsIDY0LCB7IDB4YmYsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MzAsIDB4MjEsIDB4MDMsIDB4MDIsIDB4MGQsIDB4OTQsIDB4MjAsIDB4MDUsIDB4MDMsIDB4MDIsIDB4MGQsIDB4OTQsIDB4MzAsCisgIDB4MWMsIDB4MGEsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4MjAsIDB4ZTMsIDB4MDMsIDB4MDIsIDB4MGQsIDB4OTQsIDB4MzAsIDB4MGIsIDB4MDMsIDB4MDIsCisgIDB4MGQsIDB4OTQsIDB4MzAsIDB4MTMsIDB4MDMsIDB4MDIsIDB4MGQsIDB4OTQsIDB4MzAsIDB4MDMsIDB4NjIsIDB4MzAsIDB4MWIsIDB4MTIsIDB4YWYsIDB4NGEsCisgIDB4MDUsIDB4NGEsIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTJ9fSwKKyB7MHgwY2M2LCA2NCwgeyAweDJkLCAweGFmLCAweDRhLCAweDA1LCAweDRhLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweGY1LAorICAweDEzLCAweGU1LCAweDRhLCAweGMzLCAweDk1LCAweDdjLCAweDUwLCAweDJhLCAweDMwLCAweDFiLCAweDEyLCAweGFmLCAweDRhLCAweDA1LCAweDRhLCAweDc0LAorICAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDE3LCAweGFmLCAweDRhLCAweDA1LAorICAweDRhLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDQ2LCAweGQyfX0sCisgezB4MGQwNiwgNjQsIHsgMHgxMSwgMHg4MCwgMHg2YiwgMHhjMiwgMHgxMSwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhmMCwgMHhjMiwgMHgwMywgMHg4MCwgMHg2MCwgMHgzMCwgMHgxYiwgMHgxMiwKKyAgMHhhZiwgMHg0YSwgMHgwNSwgMHg0YSwgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywKKyAgMHg5MiwgMHgyZCwgMHhhZiwgMHg0YSwgMHgwNSwgMHg0YSwgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywKKyAgMHhlMCwgMHhmNSwgMHgxMywgMHhlNSwgMHg0YSwgMHhjMywgMHg5NSwgMHg3YywgMHg1MCwgMHgyYSwgMHgzMCwgMHgxYiwgMHgxMiwgMHhhZiwgMHg0YX19LAorIHsweDBkNDYsIDY0LCB7IDB4MDUsIDB4NGEsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTcsIDB4YWYsCisgIDB4NGEsIDB4MDUsIDB4NGEsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4NDYsCisgIDB4ZDIsIDB4MTEsIDB4ODAsIDB4MDksIDB4YzIsIDB4MTEsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZjAsIDB4ZDIsIDB4MDMsIDB4MzAsIDB4MWIsIDB4MDQsCisgIDB4YTIsIDB4MmQsIDB4OTIsIDB4OWIsIDB4ZDIsIDB4MjEsIDB4YzIsIDB4YWYsIDB4ODUsIDB4MTMsIDB4OTksIDB4MjAsIDB4MTEsIDB4MGQsIDB4MzB9fSwKKyB7MHgwZDg2LCA2NCwgeyAweDE1LCAweDBhLCAweGMyLCAweDE1LCAweGMyLCAweDAwLCAweDkwLCAweDdmLCAweGJmLCAweDc0LCAweDAxLCAweGYwLCAweGQyLCAweGFmLCAweDkwLCAweDdmLCAweGQwLAorICAweGUwLCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDBlLCAweGI1LCAweGU0LCAweGY1LCAweDEyLCAweDc0LCAweGMwLCAweDI1LCAweDEyLCAweGY1LCAweDgyLAorICAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDEyLCAweDdjLCAweDAwLCAweDdiLCAweDAwLCAweDI0LCAweDY0LCAweGY5LAorICAweGVjLCAweDM0LCAweDAwLCAweGZhLCAweGVmLCAweDEyLCAweDE1LCAweGNkLCAweDA1LCAweDEyLCAweGU1LCAweDEyLCAweGI0LCAweDE4LCAweGRifX0sCisgezB4MGRjNiwgNjQsIHsgMHhlNSwgMHg2NCwgMHg2MCwgMHgwYiwgMHg3NSwgMHg4OSwgMHg2MCwgMHg3NSwgMHg4OCwgMHg0MCwgMHhkMiwgMHhkZiwgMHg4NSwgMHg2NSwgMHg4ZCwgMHhlNSwgMHg2NywKKyAgMHgxMywgMHg5MiwgMHgxZCwgMHg5MiwgMHhjNywgMHhlNSwgMHg2OCwgMHgxMywgMHg5MiwgMHgxZSwgMHhlNSwgMHg2OSwgMHgxMywgMHg5MiwgMHgyNCwgMHhlNSwKKyAgMHg2YSwgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHg5NywgMHhlMCwgMHg1NCwgMHhlZiwgMHhmMCwgMHg4MCwgMHgwNywgMHg5MCwgMHg3ZiwgMHg5NywgMHhlMCwKKyAgMHg0NCwgMHgxMCwgMHhmMCwgMHhlNSwgMHg2YiwgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHg5NywgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmMCwgMHg4MH19LAorIHsweDBlMDYsIDY0LCB7IDB4MDcsIDB4OTAsIDB4N2YsIDB4OTcsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ZTUsIDB4NzEsIDB4NjAsIDB4MGIsIDB4YzIsIDB4MTQsIDB4YzIsIDB4MGQsIDB4OTAsCisgIDB4N2YsIDB4OTQsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4ZTUsIDB4NzIsIDB4NjAsIDB4MGIsIDB4ZDIsIDB4MGQsIDB4ZDIsIDB4MGUsIDB4OTAsIDB4N2YsCisgIDB4OTQsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4ZTUsIDB4NzMsIDB4NjAsIDB4MGQsIDB4YzIsIDB4YWYsIDB4YzIsIDB4MTIsIDB4ZDIsIDB4MDAsIDB4ZTQsCisgIDB4ZjUsIDB4N2QsIDB4ZjUsIDB4NGIsIDB4ZDIsIDB4YWYsIDB4ZTUsIDB4NzQsIDB4NjAsIDB4MDUsIDB4MzAsIDB4MjQsIDB4MDIsIDB4ZDIsIDB4MGR9fSwKKyB7MHgwZTQ2LCA2NCwgeyAweGU1LCAweDc1LCAweDYwLCAweDE1LCAweDkwLCAweDdmLCAweDk0LCAweGUwLCAweDU0LCAweGY3LCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweGUwLCAweDQ0LCAweDA4LAorICAweGYwLCAweDkwLCAweDdmLCAweDk3LCAweGUwLCAweDU0LCAweGY3LCAweGYwLCAweGU1LCAweDc2LCAweDYwLCAweDBhLCAweGQyLCAweGM0LCAweGMyLCAweGMwLAorICAweDc1LCAweDNhLCAweDAxLCAweDc1LCAweDQxLCAweDI4LCAweGU1LCAweDc3LCAweDYwLCAweDA3LCAweGMyLCAweGM0LCAweGU0LCAweGY1LCAweDQ5LCAweGY1LAorICAweDNhLCAweGU1LCAweDc4LCAweDYwLCAweDAzLCAweGU0LCAweGY1LCAweDQ5LCAweGU1LCAweDc5LCAweDYwLCAweDAyLCAweGQyLCAweDA4LCAweGU1fX0sCisgezB4MGU4NiwgNjQsIHsgMHg3YSwgMHg2MCwgMHgwOCwgMHhlNSwgMHg3NiwgMHg3MCwgMHgwMiwgMHhmNSwgMHg0MSwgMHhkMiwgMHgwZSwgMHhlNSwgMHg3YiwgMHg2MCwgMHgxOSwgMHg5MCwgMHg3ZiwKKyAgMHhkNywgMHg3NCwgMHgxMywgMHhmMCwgMHg3NCwgMHgzMywgMHhmMCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg3NCwgMHgzNCwgMHhmMCwgMHg3NCwgMHgxNiwgMHhmMCwKKyAgMHg3NCwgMHgzNiwgMHhmMCwgMHhkMiwgMHgwNCwgMHhkMiwgMHgwMiwgMHhkMiwgMHgwYSwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhkMSwgMHhmMCwgMHhhMiwgMHgxNCwKKyAgMHhlNCwgMHgzMywgMHhmZiwgMHg2NSwgMHgzNywgMHg2MCwgMHgwNCwgMHg4ZiwgMHgzNywgMHhkMiwgMHgwZSwgMHhhMiwgMHgwZCwgMHhlNCwgMHgzM319LAorIHsweDBlYzYsIDY0LCB7IDB4ZmYsIDB4NjUsIDB4MzgsIDB4NjAsIDB4MDQsIDB4OGYsIDB4MzgsIDB4ZDIsIDB4MGUsIDB4OTAsIDB4N2YsIDB4OWEsIDB4ZTAsIDB4NTQsIDB4MjAsIDB4NjUsIDB4MzMsCisgIDB4NjAsIDB4MDcsIDB4ZTAsIDB4NTQsIDB4MjAsIDB4ZjUsIDB4MzMsIDB4ZDIsIDB4MGUsIDB4OTAsIDB4N2YsIDB4OWEsIDB4ZTAsIDB4NTQsIDB4NDAsIDB4YjUsCisgIDB4MzUsIDB4MDksIDB4ZTAsIDB4NTQsIDB4NDAsIDB4NjQsIDB4NDAsIDB4ZjUsIDB4MzUsIDB4ZDIsIDB4MGUsIDB4MzAsIDB4MDgsIDB4MzUsIDB4YzIsIDB4YWYsCisgIDB4MzAsIDB4MDIsIDB4MTgsIDB4OTAsIDB4N2YsIDB4YmMsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MjcsIDB4ZTUsIDB4NDksIDB4NjAsIDB4MDksIDB4OTB9fSwKKyB7MHgwZjA2LCA2NCwgeyAweDdmLCAweGJiLCAweGYwLCAweGU0LCAweGY1LCAweDQ5LCAweGMyLCAweDAyLCAweGMyLCAweDA4LCAweDgwLCAweDE2LCAweDkwLCAweDdmLCAweGJhLCAweGUwLCAweDIwLAorICAweGUxLCAweDBmLCAweGU1LCAweDQ5LCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweGJkLCAweGYwLCAweGU0LCAweGY1LCAweDQ5LCAweGQyLCAweDAyLCAweGMyLAorICAweDA4LCAweGQyLCAweGFmLCAweDIwLCAweDA2LCAweDM3LCAweDMwLCAweDA0LCAweDFiLCAweDkwLCAweDdmLCAweGNhLCAweGUwLCAweDIwLCAweGUxLCAweDJkLAorICAweDkwLCAweDdkLCAweDQwLCAweGUwLCAweDEzLCAweDkyLCAweDE2LCAweDc1LCAweDRiLCAweDAxLCAweDkwLCAweDdmLCAweGNiLCAweGUwLCAweGY1fX0sCisgezB4MGY0NiwgNjQsIHsgMHg3ZCwgMHhkMiwgMHgwNiwgMHg4MCwgMHgxOSwgMHg5MCwgMHg3ZiwgMHhjYywgMHhlMCwgMHgyMCwgMHhlMSwgMHgxMiwgMHg5MCwgMHg3YywgMHhjMCwgMHhlMCwgMHgxMywKKyAgMHg5MiwgMHgxNiwgMHg3NSwgMHg0YiwgMHgwMSwgMHg5MCwgMHg3ZiwgMHhjZCwgMHhlMCwgMHhmNSwgMHg3ZCwgMHhkMiwgMHgwNiwgMHgyMCwgMHgyMiwgMHgzMywKKyAgMHgyMCwgMHgwMCwgMHgwNiwgMHhlNSwgMHg0YiwgMHg2NSwgMHg3ZCwgMHg3MCwgMHgyYSwgMHgzMCwgMHgwNiwgMHgxYSwgMHgzMCwgMHgwNCwgMHgwOSwgMHhlNCwKKyAgMHg5MCwgMHg3ZiwgMHhjYiwgMHhmMCwgMHhjMiwgMHgwNCwgMHg4MCwgMHgwNywgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjZCwgMHhmMCwgMHhkMiwgMHgwNH19LAorIHsweDBmODYsIDY0LCB7IDB4YzIsIDB4MDYsIDB4ZTQsIDB4ZjUsIDB4N2QsIDB4ZjUsIDB4NGIsIDB4MzAsIDB4MTYsIDB4MGEsIDB4YzIsIDB4MTYsIDB4YzIsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YzEsCisgIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MzAsIDB4MjIsIDB4MDMsIDB4MDIsIDB4MTAsIDB4YTQsIDB4MjAsIDB4MDYsIDB4MDMsIDB4MDIsIDB4MTAsIDB4YTQsIDB4MzAsCisgIDB4MWUsIDB4MGEsIDB4OTAsIDB4N2YsIDB4OWEsIDB4ZTAsIDB4MjAsIDB4ZTUsIDB4MDMsIDB4MDIsIDB4MTAsIDB4YTQsIDB4MzAsIDB4MGQsIDB4MDMsIDB4MDIsCisgIDB4MTAsIDB4YTQsIDB4MzAsIDB4MTQsIDB4MDMsIDB4MDIsIDB4MTAsIDB4YTQsIDB4MzAsIDB4MDQsIDB4NjIsIDB4MzAsIDB4MWQsIDB4MTIsIDB4YWZ9fSwKKyB7MHgwZmM2LCA2NCwgeyAweDRiLCAweDA1LCAweDRiLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDJkLAorICAweGFmLCAweDRiLCAweDA1LCAweDRiLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweGY1LAorICAweDEzLCAweGU1LCAweDRiLCAweGMzLCAweDk1LCAweDdkLCAweDUwLCAweDJhLCAweDMwLCAweDFkLCAweDEyLCAweGFmLCAweDRiLCAweDA1LCAweDRiLCAweDc0LAorICAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDE4LCAweGFmLCAweDRifX0sCisgezB4MTAwNiwgNjQsIHsgMHgwNSwgMHg0YiwgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHg0NywgMHhkMiwgMHgxMiwKKyAgMHg4MCwgMHg2YiwgMHhjMiwgMHgxMiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjYiwgMHhmMCwgMHhjMiwgMHgwNCwgMHg4MCwgMHg2MCwgMHgzMCwgMHgxZCwgMHgxMiwKKyAgMHhhZiwgMHg0YiwgMHgwNSwgMHg0YiwgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YywgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywKKyAgMHg5MiwgMHgyZCwgMHhhZiwgMHg0YiwgMHgwNSwgMHg0YiwgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YywgMHhmNX19LAorIHsweDEwNDYsIDY0LCB7IDB4ODMsIDB4ZTAsIDB4ZjUsIDB4MTMsIDB4ZTUsIDB4NGIsIDB4YzMsIDB4OTUsIDB4N2QsIDB4NTAsIDB4MmEsIDB4MzAsIDB4MWQsIDB4MTIsIDB4YWYsIDB4NGIsIDB4MDUsCisgIDB4NGIsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2MsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTgsIDB4YWYsCisgIDB4NGIsIDB4MDUsIDB4NGIsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2MsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4NDcsCisgIDB4ZDIsIDB4MTIsIDB4ODAsIDB4MDksIDB4YzIsIDB4MTIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4Y2QsIDB4ZjAsIDB4ZDIsIDB4MDQsIDB4MzAsIDB4MWR9fSwKKyB7MHgxMDg2LCA2NCwgeyAweDA0LCAweGEyLCAweDJkLCAweDkyLCAweGMzLCAweGQyLCAweDIyLCAweGMyLCAweGFmLCAweDg1LCAweDEzLCAweGMxLCAweDIwLCAweDEyLCAweDBkLCAweDMwLCAweDE2LAorICAweDBhLCAweGMyLCAweDE2LCAweGMyLCAweDAwLCAweDkwLCAweDdmLCAweGMxLCAweDc0LCAweDAxLCAweGYwLCAweGQyLCAweGFmLCAweDkwLCAweDdmLCAweGMyLAorICAweGUwLCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDExLCAweDdhLCAweGU1LCAweDFhLCAweDcwLCAweDQ2LCAweDMwLCAweDBjLCAweDNmLCAweGU1LCAweDQwLAorICAweDcwLCAweDNiLCAweGEyLCAweDA5LCAweDMzLCAweGY1LCAweDMxLCAweGMyLCAweDA5LCAweGMyLCAweDBjLCAweGU0LCAweGY1LCAweDEyLCAweDdlfX0sCisgezB4MTBjNiwgNjQsIHsgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwgMHgyNiwgMHgyNSwgMHgxMiwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgxNSwgMHg4NywgMHhmZiwgMHg3NCwKKyAgMHg4MCwgMHgyNSwgMHgxMiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgxMiwgMHhlNSwgMHgxMiwKKyAgMHhiNCwgMHgwYywgMHhkYiwgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwYywgMHhmMCwgMHg3NSwgMHg0MCwgMHgxMCwgMHgyMiwgMHg3NSwgMHgxYSwgMHgwMSwKKyAgMHgyMiwgMHhlNSwgMHgxYSwgMHg2NCwgMHgwMSwgMHg3MCwgMHg0NSwgMHgzMCwgMHgwZSwgMHgzZSwgMHhlNSwgMHg0MSwgMHg3MCwgMHgzYSwgMHhhMn19LAorIHsweDExMDYsIDY0LCB7IDB4MGEsIDB4MzMsIDB4ZjUsIDB4M2QsIDB4YzIsIDB4MGEsIDB4YzIsIDB4MGUsIDB4ZTQsIDB4ZjUsIDB4MTIsIDB4N2UsIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MzIsCisgIDB4MjUsIDB4MTIsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTIsIDB4MTUsIDB4ODcsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjUsIDB4MTIsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MTIsIDB4ZTUsIDB4MTIsIDB4YjQsIDB4MGMsIDB4ZGIsIDB4OTAsCisgIDB4N2YsIDB4YzMsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4NzUsIDB4NDEsIDB4MTAsIDB4NzUsIDB4MWEsIDB4MDIsIDB4MjIsIDB4ZTUsIDB4MWMsIDB4NjB9fSwKKyB7MHgxMTQ2LCA2NCwgeyAweDMwLCAweDE1LCAweDFjLCAweGU0LCAweGY1LCAweDEyLCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDFiLCAweDI1LCAweDEyLCAweGY5LCAweGVlLCAweDM0LAorICAweDAwLCAweGZhLCAweDEyLCAweDE1LCAweDg3LCAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDEyLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LAorICAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDEyLCAweGU1LCAweDEyLCAweGI0LCAweDAzLCAweGRiLCAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDAzLCAweGYwLAorICAweGU0LCAweGY1LCAweDFhLCAweDIyLCAweDkwLCAweDdmLCAweGU5LCAweGUwLCAweDEyLCAweDE2LCAweDE3LCAweDEyLCAweDQwLCAweDAwLCAweDEyfX0sCisgezB4MTE4NiwgNjQsIHsgMHhiNCwgMHgwMSwgMHgxMywgMHgyMCwgMHgwMywgMHgxMSwgMHg5ZSwgMHgwNiwgMHgxMiwgMHgzMywgMHgwOCwgMHgxMiwgMHgyZCwgMHgwOSwgMHgxMiwgMHgyMCwgMHgwYSwKKyAgMHgxMywgMHg3NiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgxMywgMHg2ZiwgMHg5MCwgMHg3ZiwgMHhlYiwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxNiwgMHgxNCwKKyAgMHg2MCwgMHg0MCwgMHgyNCwgMHgwMiwgMHg3MCwgMHg2OSwgMHg3NCwgMHgxOSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHg3NCwgMHgwMCwgMHg5MCwgMHg3ZiwKKyAgMHhkNSwgMHhmMCwgMHgwMiwgMHgxMywgMHg3NiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmZiwgMHgxMiwgMHgxNywgMHg0YiwgMHg4YiwgMHgxMn19LAorIHsweDExYzYsIDY0LCB7IDB4OGEsIDB4MTMsIDB4ODksIDB4MTQsIDB4ZWEsIDB4NDksIDB4NjAsIDB4MTEsIDB4YWUsIDB4MDIsIDB4ZWUsIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4YWYsIDB4MDEsCisgIDB4ZWYsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MTMsIDB4NzYsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsCisgIDB4MTMsIDB4NzYsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTcsIDB4OWEsIDB4OGIsIDB4MTIsIDB4OGEsIDB4MTMsIDB4ODksIDB4MTQsCisgIDB4ZWEsIDB4NDksIDB4NjAsIDB4MTEsIDB4YWUsIDB4MDIsIDB4ZWUsIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4YWYsIDB4MDEsIDB4ZWYsIDB4OTB9fSwKKyB7MHgxMjA2LCA2NCwgeyAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDEzLCAweDc2LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDEzLCAweDc2LCAweDkwLAorICAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDEzLCAweDc2LCAweDkwLCAweDdmLCAweDAwLCAweDc0LCAweDAxLCAweGYwLCAweDkwLAorICAweDdmLCAweGI1LCAweGYwLCAweDAyLCAweDEzLCAweDc2LCAweDEyLCAweDE0LCAweGMzLCAweDAyLCAweDEzLCAweDc2LCAweDkwLCAweDdmLCAweDAwLCAweDc0LAorICAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweGYwLCAweDAyLCAweDEzLCAweDc2LCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweDdmfX0sCisgezB4MTI0NiwgNjQsIHsgMHg2MCwgMHgyNCwgMHgxNCwgMHg2MCwgMHgzMSwgMHgyNCwgMHgwMiwgMHg3MCwgMHg1YiwgMHhhMiwgMHgyNiwgMHhlNCwgMHgzMywgMHhmZiwgMHgyNSwgMHhlMCwgMHhmZiwKKyAgMHhhMiwgMHgyYiwgMHhlNCwgMHgzMywgMHg0ZiwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwKKyAgMHgwMiwgMHhmMCwgMHgwMiwgMHgxMywgMHg3NiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwKKyAgMHgwMiwgMHhmMCwgMHgwMiwgMHgxMywgMHg3NiwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NH19LAorIHsweDEyODYsIDY0LCB7IDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsCisgIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4ZTQsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsCisgIDB4MDIsIDB4MTMsIDB4NzYsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MTMsIDB4NzYsIDB4OTAsIDB4N2YsIDB4ZTgsCisgIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MWQsIDB4MjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTMsIDB4NzYsIDB4OTAsIDB4N2YsIDB4ZWF9fSwKKyB7MHgxMmM2LCA2NCwgeyAweGUwLCAweGI0LCAweDAxLCAweDA1LCAweGMyLCAweDI2LCAweDAyLCAweDEzLCAweDc2LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLAorICAweDEzLCAweDc2LCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDM4LCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLAorICAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LAorICAweDdmLCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweDU0LCAweDgwLCAweGZmLCAweDEzLCAweDEzLCAweDEzfX0sCisgezB4MTMwNiwgNjQsIHsgMHg1NCwgMHgxZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHg5MCwgMHg3ZiwgMHhkNywgMHhmMCwgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHg4MCwgMHg1ZiwKKyAgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHg1NiwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwKKyAgMHgxOCwgMHgyNCwgMHgwMiwgMHg3MCwgMHg0YSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhiNCwgMHgwMSwgMHgwNCwgMHhkMiwgMHgyNiwgMHg4MCwgMHgzZiwKKyAgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgzNiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgyMH19LAorIHsweDEzNDYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsCisgIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MTAsIDB4OTAsCisgIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MDcsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4MjIsIDB4MjAsIDB4MjgsIDB4MDMsIDB4MDIsIDB4MTQsIDB4YzIsIDB4ZTUsIDB4NDB9fSwKKyB7MHgxMzg2LCA2NCwgeyAweDYwLCAweDAyLCAweDE1LCAweDQwLCAweGU1LCAweDQ4LCAweDYwLCAweDRmLCAweDY1LCAweDQ0LCAweDcwLCAweDQ1LCAweGU1LCAweDQyLCAweGY0LCAweDYwLCAweDAyLAorICAweDA1LCAweDQyLCAweGU1LCAweDQyLCAweGMzLCAweDk1LCAweDU1LCAweDQwLCAweDNkLCAweGMyLCAweGFmLCAweDMwLCAweDAxLCAweDE4LCAweDkwLCAweDdmLAorICAweGI4LCAweGUwLCAweDIwLCAweGUxLCAweDI3LCAweDkwLCAweDdmLCAweGI3LCAweGU1LCAweDQ4LCAweGYwLCAweGMyLCAweDAxLCAweGU0LCAweGY1LCAweDQ4LAorICAweGY1LCAweDQyLCAweGY1LCAweDQ0LCAweDgwLCAweDE2LCAweDkwLCAweDdmLCAweGI2LCAweGUwLCAweDIwLCAweGUxLCAweDBmLCAweDkwLCAweDdmfX0sCisgezB4MTNjNiwgNjQsIHsgMHhiOSwgMHhlNSwgMHg0OCwgMHhmMCwgMHhkMiwgMHgwMSwgMHhlNCwgMHhmNSwgMHg0OCwgMHhmNSwgMHg0MiwgMHhmNSwgMHg0NCwgMHhkMiwgMHhhZiwgMHg4MCwgMHgwNiwKKyAgMHg4NSwgMHg0OCwgMHg0NCwgMHhlNCwgMHhmNSwgMHg0MiwgMHhlNSwgMHgyZSwgMHg2MCwgMHgyZCwgMHgyMCwgMHgxOSwgMHgwNywgMHg5MCwgMHg3ZiwgMHg5YiwKKyAgMHhlMCwgMHgzMCwgMHhlMCwgMHgwZSwgMHhlNSwgMHgyZiwgMHg2MCwgMHgwNSwgMHhlNCwgMHhmNSwgMHgyZiwgMHhkMiwgMHgwYywgMHhlNCwgMHhmNSwgMHgzZSwKKyAgMHg4MCwgMHgxMywgMHhlNSwgMHgzZSwgMHhkMywgMHg5NSwgMHg1NiwgMHg1MCwgMHgwYywgMHhlNSwgMHgzZSwgMHhiNSwgMHg1NiwgMHgwNSwgMHg3NX19LAorIHsweDE0MDYsIDY0LCB7IDB4MmYsIDB4MDEsIDB4ZDIsIDB4MGMsIDB4MDUsIDB4M2UsIDB4YzIsIDB4MTksIDB4ZTUsIDB4NDEsIDB4NjAsIDB4MDIsIDB4MTUsIDB4NDEsIDB4ZTUsIDB4NDksIDB4NjAsCisgIDB4NGYsIDB4NjUsIDB4NDUsIDB4NzAsIDB4NDUsIDB4ZTUsIDB4NDMsIDB4ZjQsIDB4NjAsIDB4MDIsIDB4MDUsIDB4NDMsIDB4ZTUsIDB4NDMsIDB4YzMsIDB4OTUsCisgIDB4NmQsIDB4NDAsIDB4M2QsIDB4YzIsIDB4YWYsIDB4MzAsIDB4MDIsIDB4MTgsIDB4OTAsIDB4N2YsIDB4YmMsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MjcsIDB4OTAsCisgIDB4N2YsIDB4YmIsIDB4ZTUsIDB4NDksIDB4ZjAsIDB4YzIsIDB4MDIsIDB4ZTQsIDB4ZjUsIDB4NDksIDB4ZjUsIDB4NDMsIDB4ZjUsIDB4NDUsIDB4ODB9fSwKKyB7MHgxNDQ2LCA2NCwgeyAweDE2LCAweDkwLCAweDdmLCAweGJhLCAweGUwLCAweDIwLCAweGUxLCAweDBmLCAweDkwLCAweDdmLCAweGJkLCAweGU1LCAweDQ5LCAweGYwLCAweGQyLCAweDAyLCAweGU0LAorICAweGY1LCAweDQ5LCAweGY1LCAweDQzLCAweGY1LCAweDQ1LCAweGQyLCAweGFmLCAweDgwLCAweDA2LCAweDg1LCAweDQ5LCAweDQ1LCAweGU0LCAweGY1LCAweDQzLAorICAweGU1LCAweDNhLCAweDYwLCAweDJkLCAweDIwLCAweDFhLCAweDA3LCAweDkwLCAweDdmLCAweDlhLCAweGUwLCAweDMwLCAweGUyLCAweDBlLCAweGU1LCAweDNiLAorICAweDYwLCAweDA1LCAweGU0LCAweGY1LCAweDNiLCAweGQyLCAweDBlLCAweGU0LCAweGY1LCAweDNmLCAweDgwLCAweDEzLCAweGU1LCAweDNmLCAweGQzfX0sCisgezB4MTQ4NiwgNjQsIHsgMHg5NSwgMHg2ZSwgMHg1MCwgMHgwYywgMHhlNSwgMHgzZiwgMHhiNSwgMHg2ZSwgMHgwNSwgMHg3NSwgMHgzYiwgMHgwMSwgMHhkMiwgMHgwZSwgMHgwNSwgMHgzZiwgMHhjMiwKKyAgMHgxYSwgMHg5MCwgMHg3ZiwgMHhkMiwgMHhlMCwgMHgyMCwgMHhlMSwgMHgyMywgMHg5MCwgMHg3YiwgMHg0MCwgMHhlMCwgMHg2MCwgMHgwOSwgMHhlMCwgMHhmNSwKKyAgMHgxYywgMHg5MCwgMHg3YiwgMHg0MiwgMHhlMCwgMHhmNSwgMHgxZCwgMHg5MCwgMHg3YiwgMHg0MSwgMHhlMCwgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHhkNywKKyAgMHg3NCwgMHgxNywgMHhmMCwgMHg3NCwgMHgzNywgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhkMywgMHhmMCwgMHgyMiwgMHhlNCwgMHg5MCwgMHg3Zn19LAorIHsweDE0YzYsIDY0LCB7IDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4NzQsIDB4MzAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4NDQsIDB4MTAsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4OTQsIDB4NzQsIDB4MGQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWQsIDB4NzQsIDB4OWEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTcsIDB4ZTAsIDB4NTQsIDB4ZmQsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTUsIDB4NzQsIDB4MjMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4ODQsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsCisgIDB4YzcsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4Y2YsIDB4ZjAsIDB4NzUsIDB4OTgsIDB4NDAsIDB4NDMsIDB4YTh9fSwKKyB7MHgxNTA2LCA2NCwgeyAweDEwLCAweGMyLCAweDFiLCAweGMyLCAweDA1LCAweGMyLCAweDIxLCAweGMyLCAweDBiLCAweGMyLCAweDEzLCAweGY1LCAweDdjLCAweGY1LCAweDRhLCAweGMyLCAweDExLAorICAweGMyLCAweDE1LCAweGY1LCAweDQyLCAweGMyLCAweDE5LCAweGY1LCAweDQ0LCAweGY1LCAweDQ4LCAweGMyLCAweDIzLCAweGMyLCAweDFjLCAweGY1LCAweDJkLAorICAweGY1LCAweDJmLCAweGMyLCAweDA3LCAweGMyLCAweDAwLCAweGMyLCAweDFmLCAweGY1LCAweDNlLCAweGMyLCAweDA5LCAweGQyLCAweDBjLCAweGY1LCAweDI2LAorICAweDkwLCAweDdmLCAweGNiLCAweGYwLCAweDkwLCAweDdmLCAweGNkLCAweGYwLCAweDkwLCAweDdmLCAweGQxLCAweGYwLCAweDc1LCAweGMwLCAweDQwfX0sCisgezB4MTU0NiwgNjQsIHsgMHg0MywgMHhhOCwgMHg0MCwgMHhjMiwgMHgxZCwgMHhjMiwgMHgwNiwgMHhjMiwgMHgyMiwgMHhjMiwgMHgwZCwgMHhjMiwgMHgxNCwgMHhmNSwgMHg3ZCwgMHhmNSwgMHg0YiwKKyAgMHhjMiwgMHgxMiwgMHhjMiwgMHgxNiwgMHhmNSwgMHg0MywgMHhjMiwgMHgxYSwgMHhmNSwgMHg0NSwgMHhmNSwgMHg0OSwgMHhjMiwgMHgyNCwgMHhjMiwgMHgxZSwKKyAgMHhmNSwgMHgzOSwgMHhmNSwgMHgzYiwgMHhjMiwgMHgwOCwgMHhjMiwgMHgwMCwgMHhjMiwgMHgyMCwgMHhmNSwgMHgzZiwgMHhjMiwgMHgwYSwgMHhkMiwgMHgwZSwKKyAgMHg3NSwgMHgzMiwgMHgwMSwgMHg5MCwgMHg3ZiwgMHhkZiwgMHg3NCwgMHhmZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZSwgMHhmMCwgMHhkMiwgMHgyOH19LAorIHsweDE1ODYsIDY0LCB7IDB4MjIsIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDIsIDB4ZTcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDIsCisgIDB4ZTMsIDB4MjIsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MGMsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsCisgIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTYsIDB4MjIsCisgIDB4YmIsIDB4ZmUsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4MjIsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTV9fSwKKyB7MHgxNWM2LCA2NCwgeyAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGU0LCAweDkzLCAweDIyLCAweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGYwLCAweDIyLCAweDUwLAorICAweDAyLCAweGY3LCAweDIyLCAweGJiLCAweGZlLCAweDAxLCAweGYzLCAweDIyLCAweGJiLCAweDAxLCAweDEwLCAweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLAorICAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweGYwLCAweGEzLCAweGUwLCAweDIyLCAweDUwLCAweDA5LCAweGU5LCAweDI1LCAweDgyLAorICAweGY4LCAweDg2LCAweGYwLCAweDA4LCAweGU2LCAweDIyLCAweGJiLCAweGZlLCAweDBhLCAweGU5LCAweDI1LCAweDgyLCAweGY4LCAweGUyLCAweGY1fX0sCisgezB4MTYwNiwgNjQsIHsgMHhmMCwgMHgwOCwgMHhlMiwgMHgyMiwgMHhlNSwgMHg4MywgMHgyYSwgMHhmNSwgMHg4MywgMHhlOSwgMHg5MywgMHhmNSwgMHhmMCwgMHhhMywgMHhlOSwgMHg5MywgMHgyMiwKKyAgMHhkMCwgMHg4MywgMHhkMCwgMHg4MiwgMHhmOCwgMHhlNCwgMHg5MywgMHg3MCwgMHgxMiwgMHg3NCwgMHgwMSwgMHg5MywgMHg3MCwgMHgwZCwgMHhhMywgMHhhMywKKyAgMHg5MywgMHhmOCwgMHg3NCwgMHgwMSwgMHg5MywgMHhmNSwgMHg4MiwgMHg4OCwgMHg4MywgMHhlNCwgMHg3MywgMHg3NCwgMHgwMiwgMHg5MywgMHg2OCwgMHg2MCwKKyAgMHhlZiwgMHhhMywgMHhhMywgMHhhMywgMHg4MCwgMHhkZiwgMHg3OCwgMHg3ZiwgMHhlNCwgMHhmNiwgMHhkOCwgMHhmZCwgMHg3NSwgMHg4MSwgMHg3ZH19LAorIHsweDE2NDYsIDY0LCB7IDB4MDIsIDB4MTYsIDB4ODQsIDB4MDIsIDB4MTYsIDB4YzksIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NDAsIDB4MDMsIDB4ZjYsIDB4ODAsCisgIDB4MDEsIDB4ZjIsIDB4MDgsIDB4ZGYsIDB4ZjQsIDB4ODAsIDB4MjksIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4NTQsIDB4MDcsIDB4MjQsIDB4MGMsIDB4YzgsCisgIDB4YzMsIDB4MzMsIDB4YzQsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MjAsIDB4YzgsIDB4ODMsIDB4NDAsIDB4MDQsIDB4ZjQsIDB4NTYsIDB4ODAsIDB4MDEsIDB4NDYsCisgIDB4ZjYsIDB4ZGYsIDB4ZTQsIDB4ODAsIDB4MGIsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4OTAsIDB4MTh9fSwKKyB7MHgxNjg2LCA2NCwgeyAweGM1LCAweGU0LCAweDdlLCAweDAxLCAweDkzLCAweDYwLCAweGJjLCAweGEzLCAweGZmLCAweDU0LCAweDNmLCAweDMwLCAweGU1LCAweDA5LCAweDU0LCAweDFmLCAweGZlLAorICAweGU0LCAweDkzLCAweGEzLCAweDYwLCAweDAxLCAweDBlLCAweGNmLCAweDU0LCAweGMwLCAweDI1LCAweGUwLCAweDYwLCAweGE4LCAweDQwLCAweGI4LCAweGU0LAorICAweDkzLCAweGEzLCAweGZhLCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweGU0LCAweDkzLCAweGEzLCAweGM4LCAweGM1LCAweDgyLCAweGM4LCAweGNhLCAweGM1LAorICAweDgzLCAweGNhLCAweGYwLCAweGEzLCAweGM4LCAweGM1LCAweDgyLCAweGM4LCAweGNhLCAweGM1LCAweDgzLCAweGNhLCAweGRmLCAweGU5LCAweGRlfX0sCisgezB4MTZjNiwgNjQsIHsgMHhlNywgMHg4MCwgMHhiZSwgMHg3NSwgMHgxMSwgMHgwMSwgMHg5MCwgMHg3ZiwgMHg5MiwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZSwgMHhlMCwKKyAgMHhmZiwgMHhkMywgMHg5MiwgMHgyNiwgMHhlNCwgMHgzMywgMHhmZSwgMHhlZiwgMHg0ZSwgMHhmMCwgMHhkMiwgMHhlOCwgMHg0MywgMHhkOCwgMHgyMCwgMHg5MCwKKyAgMHg3ZiwgMHhkZSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHhmZiwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHhhOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYSwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhZiwgMHhlMCwgMHg0NH19LAorIHsweDE3MDYsIDY0LCB7IDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWUsIDB4ZTAsIDB4NDQsIDB4MGQsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4ZDIsIDB4YmMsIDB4ZDIsIDB4YmUsIDB4ZDIsIDB4MmQsCisgIDB4MTIsIDB4MTgsIDB4N2YsIDB4YzIsIDB4MjcsIDB4YzIsIDB4MjUsIDB4YzIsIDB4MjgsIDB4MzAsIDB4MjgsIDB4MDMsIDB4MTIsIDB4MGEsIDB4ODMsIDB4OTAsCisgIDB4N2YsIDB4ZDgsIDB4ZTAsIDB4NjUsIDB4MTAsIDB4NjAsIDB4MDgsIDB4ZTAsIDB4ZjUsIDB4MTAsIDB4MTIsIDB4MTMsIDB4N2UsIDB4ODAsIDB4ZWEsIDB4MzAsCisgIDB4MjcsIDB4MDcsIDB4YzIsIDB4MjcsIDB4MTIsIDB4MTEsIDB4N2IsIDB4ODAsIDB4ZTAsIDB4MzAsIDB4MmMsIDB4ZGQsIDB4YzIsIDB4MmMsIDB4MTJ9fSwKKyB7MHgxNzQ2LCA2NCwgeyAweDAwLCAweDI2LCAweDgwLCAweGQ2LCAweDIyLCAweGU0LCAweGZlLCAweDc1LCAweDE3LCAweGZmLCAweDc1LCAweDE4LCAweDE5LCAweDc1LCAweDE5LCAweDEyLCAweGFiLAorICAweDE3LCAweGFhLCAweDE4LCAweGE5LCAweDE5LCAweDkwLCAweDAwLCAweDAxLCAweDEyLCAweDE1LCAweGEwLCAweDY0LCAweDAyLCAweDcwLCAweDJkLCAweGFkLAorICAweDA2LCAweDBlLCAweGVkLCAweGI1LCAweDA3LCAweDAxLCAweDIyLCAweDkwLCAweDAwLCAweDAyLCAweDEyLCAweDE1LCAweGRmLCAweDg1LCAweGYwLCAweDE1LAorICAweGY1LCAweDE2LCAweDYyLCAweDE1LCAweGU1LCAweDE1LCAweDYyLCAweDE2LCAweGU1LCAweDE2LCAweDYyLCAweDE1LCAweDI5LCAweGZkLCAweGU1fX0sCisgezB4MTc4NiwgNjQsIHsgMHgxNSwgMHgzYSwgMHhhOSwgMHgwNSwgMHg3NSwgMHgxNywgMHhmZiwgMHhmNSwgMHgxOCwgMHg4OSwgMHgxOSwgMHg4MCwgMHhjMywgMHg3YiwgMHgwMCwgMHg3YSwgMHgwMCwKKyAgMHg3OSwgMHgwMCwgMHgyMiwgMHg4ZiwgMHgxNSwgMHhlNCwgMHhmNSwgMHgxNiwgMHg3NSwgMHgxNywgMHhmZiwgMHg3NSwgMHgxOCwgMHgxOSwgMHg3NSwgMHgxOSwKKyAgMHg4NiwgMHhhYiwgMHgxNywgMHhhYSwgMHgxOCwgMHhhOSwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMSwgMHgxMiwgMHgxNSwgMHhhMCwgMHhiNCwgMHgwMywgMHgxZCwKKyAgMHhhZiwgMHgxNiwgMHgwNSwgMHgxNiwgMHhlZiwgMHhiNSwgMHgxNSwgMHgwMSwgMHgyMiwgMHgxMiwgMHgxNSwgMHg4NywgMHg3ZSwgMHgwMCwgMHgyOX19LAorIHsweDE3YzYsIDY0LCB7IDB4ZmYsIDB4ZWUsIDB4M2EsIDB4YTksIDB4MDcsIDB4NzUsIDB4MTcsIDB4ZmYsIDB4ZjUsIDB4MTgsIDB4ODksIDB4MTksIDB4ODAsIDB4ZDQsIDB4N2IsIDB4MDAsIDB4N2EsCisgIDB4MDAsIDB4NzksIDB4MDAsIDB4MjIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTQsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWQsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTcsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTUsIDB4ZjAsCisgIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWQsIDB4ZjB9fSwKKyB7MHgxODA2LCA2NCwgeyAweDIyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweDkwLAorICAweDdmLCAweGM0LCAweGU0LCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA0LCAweGYwLCAweGQwLCAweDg2LCAweGQwLAorICAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLAorICAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweGQyLCAweDI3LCAweDUzLCAweDkxLCAweGVmLCAweDkwfX0sCisgezB4MTg0NiwgNjQsIHsgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwKKyAgMHgzMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwKKyAgMHhkMiwgMHgyYywgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwOCwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwKKyAgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMH19LAorIHsweDE4ODYsIDY0LCB7IDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4MzAsIDB4MmQsIDB4MDQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4N2YsIDB4ZjQsIDB4N2UsIDB4MDEsIDB4MTIsIDB4MDAsCisgIDB4MDYsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4MjIsIDB4NzQsIDB4MDAsIDB4ZjUsCisgIDB4ODYsIDB4OTAsIDB4ZmQsIDB4YTUsIDB4N2MsIDB4MDUsIDB4YTMsIDB4ZTUsIDB4ODIsIDB4NDUsIDB4ODMsIDB4NzAsIDB4ZjksIDB4MjIsIDB4OTAsIDB4N2YsCisgIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4NDMsIDB4ODcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4YzF9fSwKKyB7MHgxOGM2LCA2NCwgeyAweGFhLCAweDAxLCAweDFhLCAweDAwLCAweDAzLCAweDFiLCAweDAzLCAweDAwLCAweDAwLCAweGMxLCAweDI3LCAweGMxLCAweDJjLCAweGMxLCAweDI2LCAweGMxLCAweDJiLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDEwLCAweDAxLCAweGZmLCAweDAwfX0sCisgezB4MTkwNiwgNjQsIHsgMHgwMCwgMHg0MCwgMHhjZCwgMHgwNiwgMHgwZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMSwgMHgwOSwgMHgwMiwgMHg3NCwgMHgwMCwgMHgwMSwKKyAgMHgwMSwgMHgwMCwgMHhhMCwgMHgzMiwgMHgwOSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMSwKKyAgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMywgMHgwMiwgMHg0MCwKKyAgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNSwgMHgwMiwgMHg0MCwgMHgwMH19LAorIHsweDE5NDYsIDY0LCB7IDB4MDAsIDB4MDcsIDB4MDUsIDB4MDYsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDcsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsCisgIDB4ODEsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODMsIDB4MDIsCisgIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODQsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODUsIDB4MDIsIDB4NDAsIDB4MDAsCisgIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODYsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODcsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDF9fSwKKyB7MHgxOTg2LCA2NCwgeyAweDA0LCAweDAzLCAweDA5LCAweDA0LCAweDQ4LCAweDAzLCAweDRiLCAweDAwLCAweDY1LCAweDAwLCAweDc5LCAweDAwLCAweDczLCAweDAwLCAweDcwLCAweDAwLCAweDYxLAorICAweDAwLCAweDZlLCAweDAwLCAweDJjLCAweDAwLCAweDIwLCAweDAwLCAweDYxLCAweDAwLCAweDIwLCAweDAwLCAweDY0LCAweDAwLCAweDY5LCAweDAwLCAweDc2LAorICAweDAwLCAweDY5LCAweDAwLCAweDczLCAweDAwLCAweDY5LCAweDAwLCAweDZmLCAweDAwLCAweDZlLCAweDAwLCAweDIwLCAweDAwLCAweDZmLCAweDAwLCAweDY2LAorICAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDZlLCAweDAwLCAweDZmLCAweDAwLCAweDUzLCAweDAwLCAweDc5LCAweDAwfX0sCisgezB4MTljNiwgNjQsIHsgMHg3MywgMHgwMCwgMHgyMCwgMHgwMCwgMHg0OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2MywgMHgwMCwgMHgyZSwgMHgwMCwgMHgzNiwgMHgwMywgMHg0YiwgMHgwMCwgMHg2NSwKKyAgMHgwMCwgMHg3OSwgMHgwMCwgMHg3MywgMHgwMCwgMHg3MCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1NSwgMHgwMCwgMHg1MywKKyAgMHgwMCwgMHg0MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1MywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2YywKKyAgMHgwMCwgMHgyMCwgMHgwMCwgMHg0MSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg3MCwgMHgwMCwgMHg3NCwgMHgwMCwgMHg2NSwgMHgwMH19LAorIHsweDFhMDYsIDY0LCB7IDB4NzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxYTQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MWE4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDFhYzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTgsIDB4MzEsIDB4MDAsIDB4MDIsIDB4MWJ9fSwKKyB7MHgxYjA2LCAgOSwgeyAweDA0LCAweDAwLCAweDAyLCAweDE4LCAweDA3LCAweDAwLCAweDAyLCAweDE4LCAweDU4fX0sCisgezB4ZmZmZiwgIDAsIHsweDAwfX0KK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2EyOG1zZy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjhtc2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWU0NTRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjhtc2cuaApAQCAtMCwwICsxLDIwMSBAQAorLyoKKwl1c2EyOG1zZy5oCisKKwlDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBJbm5vU3lzIEluY29ycG9yYXRlZC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKwlUaGlzIGZpbGUgaXMgYXZhaWxhYmxlIHVuZGVyIGEgQlNELXN0eWxlIGNvcHlyaWdodAorCisJS2V5c3BhbiBVU0IgQXN5bmMgTWVzc2FnZSBGb3JtYXRzIGZvciB0aGUgVVNBMjZYCisKKwlSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKwltb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisJbWV0OgorCisJMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoaXMgbGljZW5jZSB0ZXh0CisgICAJd2l0aG91dCBtb2RpZmljYXRpb24sIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICAgCWRpc2NsYWltZXIuICBUaGUgZm9sbG93aW5nIGNvcHlyaWdodCBub3RpY2UgbXVzdCBhcHBlYXIgaW1tZWRpYXRlbHkgYXQKKyAgIAl0aGUgYmVnaW5uaW5nIG9mIGFsbCBzb3VyY2UgZmlsZXM6CisKKyAgICAgICAgCUNvcHlyaWdodCAoQykgMTk5OC0yMDAwIElubm9TeXMgSW5jb3Jwb3JhdGVkLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorCisgICAgICAgIAlUaGlzIGZpbGUgaXMgYXZhaWxhYmxlIHVuZGVyIGEgQlNELXN0eWxlIGNvcHlyaWdodAorCisJMi4gVGhlIG5hbWUgb2YgSW5ub1N5cyBJbmNvcnBvcmF0ZWQgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgCXByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorICAgCXBlcm1pc3Npb24uCisKKwlUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIElOTk9TWVMgQ09SUC4gYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorCUlNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKwlPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorCU5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKwlJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKwkoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKwlTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorCUNBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorCUxJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKwlPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisJU1VDSCBEQU1BR0UuICAgIAorCisJTm90ZTogdGhlc2UgbWVzc2FnZSBmb3JtYXRzIGFyZSBjb21tb24gdG8gVVNBMTgsIFVTQTE5LCBhbmQgVVNBMjg7CisJKGZvciBVU0EyOFgsIHNlZSB1c2EyNm1zZy5oKQorCisJQnVmZmVyIGZvcm1hdHMgZm9yIFJYL1RYIGRhdGEgbWVzc2FnZXMgYXJlIG5vdCBkZWZpbmVkIGJ5CisJYSBzdHJ1Y3R1cmUsIGJ1dCBhcmUgZGVzY3JpYmVkIGhlcmU6CisKKwlVU0IgT1VUIChob3N0IC0+IFVTQTI4LCB0cmFuc21pdCkgbWVzc2FnZXMgY29udGFpbiBhIAorCVJFUVVFU1RfQUNLIGluZGljYXRvciAoc2V0IHRvIDB4ZmYgdG8gcmVxdWVzdCBhbiBBQ0sgYXQgdGhlIAorCWNvbXBsZXRpb24gb2YgdHJhbnNtaXQ7IDB4MDAgb3RoZXJ3aXNlKSwgZm9sbG93ZWQgYnkgZGF0YS4KKwlJZiB0aGUgcG9ydCBpcyBjb25maWd1cmVkIGZvciBwYXJpdHksIHRoZSBkYXRhIHdpbGwgYmUgYW4gCisJYWx0ZXJuYXRpbmcgc3RyaW5nIG9mIHBhcml0eSBhbmQgZGF0YSBieXRlcywgc28gdGhlIG1lc3NhZ2UKKwlmb3JtYXQgd2lsbCBiZToKKworCQlSUVNUQUNLIFBBUiBEQVQgUEFSIERBVCAuLi4KKworCXNvIHRoZSBtYXhpbXVtIGxlbmd0aCBpcyA2MyBieXRlcyAoMSArIDYyLCBvciAzMSBkYXRhIGJ5dGVzKTsKKwlhbHdheXMgYW4gb2RkIG51bWJlciBmb3IgdGhlIHRvdGFsIG1lc3NhZ2UgbGVuZ3RoLgorCisJSWYgdGhlcmUgaXMgbm8gcGFyaXR5LCB0aGUgZm9ybWF0IGlzIHNpbXBseToKKworCQlSUVNUQUNLIERBVCBEQVQgREFUIC4uLgorCisJd2l0aCBhIHRvdGFsIGRhdGEgbGVuZ3RoIG9mIDYzLgorCisJVVNCIElOIChVU0EyOCAtPiBob3N0LCByZWNlaXZlKSBtZXNzYWdlcyBjb250YWluIGRhdGEgYW5kIHBhcml0eQorCWlmIHBhcml0eSBpcyBjb25maWdyZWQsIHRodXNseToKKwkKKwkJREFUIFBBUiBEQVQgUEFSIERBVCBQQVIgLi4uCisKKwlmb3IgYSB0b3RhbCBvZiAzMiBkYXRhIGJ5dGVzOworCQorCUlmIHBhcml0eSBpcyBub3QgY29uZmlndXJlZCwgdGhlIGZvcm1hdCBpczoKKworCQlEQVQgREFUIERBVCAuLi4KKworCWZvciBhIHRvdGFsIG9mIDY0IGRhdGEgYnl0ZXMuCisKKwlJbiB0aGUgVFggbWVzc2FnZXMgKFVTQiBPVVQpLCB0aGUgMHgwMSBiaXQgb2YgdGhlIFBBUml0eSBieXRlIGlzIAorCXRoZSBwYXJpdHkgYml0LiAgSW4gdGhlIFJYIG1lc3NhZ2VzIChVU0IgSU4pLCB0aGUgUEFSaXR5IGJ5dGUgaXMgCisJdGhlIGNvbnRlbnQgb2YgdGhlIDgwNTEncyBzdGF0dXMgcmVnaXN0ZXI7IHRoZSBwYXJpdHkgYml0IAorCShSWF9QQVJJVFlfQklUKSBpcyB0aGUgMHgwNCBiaXQuCisKKwlyZXZpc2lvbiBoaXN0b3J5OgorCisJMTk5OW1heTA2CWFkZCByZXNldERhdGFUb2dnbGUgdG8gY29udHJvbCBtZXNzYWdlCisJMjAwMG1hcjIxCWFkZCByczIzMmludmFsaWQgdG8gc3RhdHVzIHJlc3BvbnNlIG1lc3NhZ2UKKwkyMDAwYXByMDQJYWRkIDIzMC40S2IgZGVmaW5pdGlvbiB0byBzZXRCYXVkUmF0ZQorCTIwMDBhcHIxMwlhZGQvcmVtb3ZlIGxvb3BiYWNrTW9kZSBzd2l0Y2gKKwkyMDAwYXByMTMJY2hhbmdlIGRlZmluaXRpb24gb2Ygc2V0QmF1ZFJhdGUgdG8gY292ZXIgMTE1LjJLYiwgdG9vCisJMjAwMGp1bjAxCWFkZCBleHRlbmRlZCBCU0Qtc3R5bGUgY29weXJpZ2h0IHRleHQKKyovCisKKyNpZm5kZWYJX19VU0EyOE1TR19fCisjZGVmaW5lCV9fVVNBMjhNU0dfXworCisKK3N0cnVjdCBrZXlzcGFuX3VzYTI4X3BvcnRDb250cm9sTWVzc2FnZQoreworCS8qCisJCXRoZXJlIGFyZSBmb3VyIHR5cGVzIG9mICJjb21tYW5kcyIgc2VudCBpbiB0aGUgY29udHJvbCBtZXNzYWdlOgorCisJCTEuCWNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3aGljaCBtdXN0IGJlIHJlcXVlc3RlZCBieSBzZXR0aW5nCisJCQl0aGUgY29ycmVzcG9uZGluZyAic2V0IiBmbGFnIChhbmQgc2hvdWxkIG9ubHkgYmUgcmVxdWVzdGVkCisJCQl3aGVuIG5lY2Vzc2FyeSwgdG8gcmVkdWNlIG92ZXJoZWFkIG9uIHRoZSBVU0EyOCk6CisJKi8KKwl1OAlzZXRCYXVkUmF0ZSwJLy8gMD1kb24ndCBzZXQsIDE9YmF1ZExvL0hpLCAyPTExNS4ySywgMz0yMzAuNEsKKwkJYmF1ZExvLAkJCS8vIGhvc3QgZG9lcyBiYXVkIGRpdmlzb3IgY2FsY3VsYXRpb24KKwkJYmF1ZEhpOwkJCS8vIGJhdWRIaSBpcyBvbmx5IHVzZWQgZm9yIGZpcnN0IHBvcnQgKGdpdmVzIGxvd2VyIHJhdGVzKQorCisJLyoKKwkJMi4JY29uZmlndXJhdGlvbiBjaGFuZ2VzIHdoaWNoIGFyZSBkb25lIGV2ZXJ5IHRpbWUgKGJlY2F1c2UgaXQncworCQkJaGFyZGx5IG1vcmUgdHJvdWJsZSB0byBkbyB0aGVtIHRoYW4gdG8gY2hlY2sgd2hldGhlciB0byBkbyB0aGVtKToKKwkqLworCXU4CXBhcml0eSwJCQkvLyAxPXVzZSBwYXJpdHksIDA9ZG9uJ3QKKwkJY3RzRmxvd0NvbnRyb2wsCSAgICAgICAgLy8gYWxsIGV4Y2VwdCAxOVE6IDE9dXNlIENUUyBmbG93IGNvbnRyb2wsIDA9ZG9uJ3QKKwkJCQkJLy8gMTlROiAweDA4OkNUU2Zsb3dDb250cm9sIDB4MTA6RFNSZmxvd0NvbnRyb2wKKwkJeG9uRmxvd0NvbnRyb2wsCS8vIDE9dXNlIFhPTi9YT0ZGIGZsb3cgY29udHJvbCwgMD1kb24ndAorCQlydHMsCQkJLy8gMT1vbiwgMD1vZmYKKwkJZHRyOwkJCS8vIDE9b24sIDA9b2ZmCisKKwkvKgorCQkzLgljb25maWd1cmF0aW9uIGRhdGEgd2hpY2ggaXMgc2ltcGx5IHVzZWQgYXMgaXMgKG5vIG92ZXJoZWFkLAorCQkJYnV0IG11c3QgYmUgY29ycmVjdCBpbiBldmVyeSBob3N0IG1lc3NhZ2UpLgorCSovCisJdTgJZm9yd2FyZGluZ0xlbmd0aCwgIC8vIGZvcndhcmQgd2hlbiB0aGlzIG51bWJlciBvZiBjaGFycyBhdmFpbGFibGUKKwkJZm9yd2FyZE1zLAkJLy8gZm9yd2FyZCB0aGlzIG1hbnkgbXMgYWZ0ZXIgbGFzdCByeCBkYXRhCisJCWJyZWFrVGhyZXNob2xkLAkvLyBzcGVjaWZpZWQgaW4gbXMsIDEtMjU1IChzZWUgbm90ZSBiZWxvdykKKwkJeG9uQ2hhciwJCS8vIHNwZWNpZmllZCBpbiBjdXJyZW50IGNoYXJhY3RlciBmb3JtYXQKKwkJeG9mZkNoYXI7CQkvLyBzcGVjaWZpZWQgaW4gY3VycmVudCBjaGFyYWN0ZXIgZm9ybWF0CisKKwkvKgorCQk0Lgljb21tYW5kcyB3aGljaCBhcmUgZmxhZ3Mgb25seTsgdGhlc2UgYXJlIHByb2Nlc3NlZCBpbiBvcmRlcgorCQkJKHNvIHRoYXQsIGUuZy4sIGlmIGJvdGggX3R4T24gYW5kIF90eE9mZiBmbGFncyBhcmUgc2V0LCB0aGUKKwkJCXBvcnQgZW5kcyBpbiBhIFRYX09GRiBzdGF0ZSk7IGFueSBub24temVybyB2YWx1ZSBpcyByZXNwZWN0ZWQKKwkqLworCXU4CV90eE9uLAkJCS8vIGVuYWJsZSB0cmFuc21pdHRpbmcgKGFuZCBjb250aW51ZSBpZiB0aGVyZSdzIGRhdGEpCisJCV90eE9mZiwJCQkvLyBzdG9wIHRyYW5zbWl0dGluZworCQl0eEZsdXNoLAkJLy8gdG9zcyBvdXRib3VuZCBkYXRhCisJCXR4Rm9yY2VYb2ZmLAkvLyBwcmV0ZW5kIHdlJ3ZlIHJlY2VpdmVkIFhPRkYKKwkJdHhCcmVhaywJCS8vIHR1cm4gb24gYnJlYWsgKGxlYXZlIG9uIHVudGlsIHR4T24gY2xlYXJzIGl0KQorCQlyeE9uLAkJCS8vIHR1cm4gb24gcmVjZWl2ZXIKKwkJcnhPZmYsCQkJLy8gdHVybiBvZmYgcmVjZWl2ZXIKKwkJcnhGbHVzaCwJCS8vIHRvc3MgaW5ib3VuZCBkYXRhCisJCXJ4Rm9yd2FyZCwJCS8vIGZvcndhcmQgYWxsIGluYm91bmQgZGF0YSwgTk9XCisJCXJldHVyblN0YXR1cywJLy8gcmV0dXJuIGN1cnJlbnQgc3RhdHVzIG4gdGltZXMgKDEgb3IgMikKKwkJcmVzZXREYXRhVG9nZ2xlOy8vIHJlc2V0IGRhdGEgdG9nZ2xlIHN0YXRlIHRvIERBVEEwCisJCit9OworCitzdHJ1Y3Qga2V5c3Bhbl91c2EyOF9wb3J0U3RhdHVzTWVzc2FnZQoreworCXU4CXBvcnQsCQkJLy8gMD1maXJzdCwgMT1zZWNvbmQsIDI9Z2xvYmFsIChzZWUgYmVsb3cpCisJCWN0cywKKwkJZHNyLAkJCS8vIChub3QgdXNlZCBpbiBhbGwgcHJvZHVjdHMpCisJCWRjZCwKKworCQlyaSwJCQkJLy8gKG5vdCB1c2VkIGluIGFsbCBwcm9kdWN0cykKKwkJX3R4T2ZmLAkJCS8vIHBvcnQgaGFzIGJlZW4gZGlzYWJsZWQgKGJ5IGhvc3QpCisJCV90eFhvZmYsCQkvLyBwb3J0IGlzIGluIFhPRkYgc3RhdGUgKGVpdGhlciBob3N0IG9yIFJYIFhPRkYpCisJCWRhdGFMb3N0LAkJLy8gY291bnQgb2YgbG9zdCBjaGFyczsgd3JhcHM7IG5vdCBndWFyYW50ZWVkIGV4YWN0CisKKwkJcnhFbmFibGVkLAkJLy8gYXMgY29uZmlndXJlZCBieSByeE9uL3J4T2ZmIDE9b24sIDA9b2ZmCisJCXJ4QnJlYWssCQkvLyAxPXdlJ3JlIGluIGJyZWFrIHN0YXRlCisJCXJzMjMyaW52YWxpZCwJLy8gMT1ubyB2YWxpZCBzaWduYWxzIG9uIHJzLTIzMiBpbnB1dHMKKwkJY29udHJvbFJlc3BvbnNlOy8vIDE9YSBjb250cm9sIG1lc3NhZ2VzIGhhcyBiZWVuIHByb2Nlc3NlZAorfTsKKworLy8gYml0IGRlZmluZXMgaW4gdHhTdGF0ZQorI2RlZmluZQlUWF9PRkYJCQkweDAxCS8vIHJlcXVlc3RlZCBieSBob3N0IHR4T2ZmIGNvbW1hbmQKKyNkZWZpbmUJVFhfWE9GRgkJCTB4MDIJLy8gZWl0aGVyIHJlYWwsIG9yIHNpbXVsYXRlZCBieSBob3N0CisKK3N0cnVjdCBrZXlzcGFuX3VzYTI4X2dsb2JhbENvbnRyb2xNZXNzYWdlCit7CisJdTgJc2VuZEdsb2JhbFN0YXR1cywJLy8gMj1yZXF1ZXN0IGZvciB0d28gc3RhdHVzIHJlc3BvbnNlcworCQlyZXNldFN0YXR1c1RvZ2dsZSwJLy8gMT1yZXNldCBnbG9iYWwgc3RhdHVzIHRvZ2dsZQorCQlyZXNldFN0YXR1c0NvdW50OwkvLyBhIGN5Y2xpbmcgdmFsdWUKK307CisKK3N0cnVjdCBrZXlzcGFuX3VzYTI4X2dsb2JhbFN0YXR1c01lc3NhZ2UKK3sKKwl1OAlwb3J0LAkJCQkvLyAzCisJCXNlbmRHbG9iYWxTdGF0dXMsCS8vIGZyb20gcmVxdWVzdCwgZGVjcmVtZW50ZWQKKwkJcmVzZXRTdGF0dXNDb3VudDsJLy8gYXMgaW4gcmVxdWVzdAorfTsKKworc3RydWN0IGtleXNwYW5fdXNhMjhfZ2xvYmFsRGVidWdNZXNzYWdlCit7CisJdTgJcG9ydCwJCQkJLy8gMgorCQluLAkJCQkJLy8gdHlwaWNhbGx5IGEgY291bnQvc3RhdHVzIGJ5dGUKKwkJYjsJCQkJCS8vIHR5cGljYWxseSBhIGRhdGEgYnl0ZQorfTsKKworLy8gaWU6IHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhbiBFWlVTQiBlbmRwb2ludCBidWZmZXIKKyNkZWZpbmUJTUFYX0RBVEFfTEVOCQkJNjQKKworLy8gdGhlIHBhcml0eSBieXRlcyBoYXZlIG9ubHkgb25lIHNpZ25pZmljYW50IGJpdAorI2RlZmluZQlSWF9QQVJJVFlfQklUCQkJMHgwNAorI2RlZmluZQlUWF9QQVJJVFlfQklUCQkJMHgwMQorCisvLyB1cGRhdGUgc3RhdHVzIGFwcHJveC4gNjAgdGltZXMgYSBzZWNvbmQgKDE2LjY2NjYgbXMpCisjZGVmaW5lCVNUQVRVU19VUERBVEVfSU5URVJWQUwJMTYKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTI4eF9mdy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjh4X2Z3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM4N2VkOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTI4eF9mdy5oCkBAIC0wLDAgKzEsNDQ3IEBACisvKiBrZXlzcGFuX3VzYTI4eF9mdy5oCisKKwlUaGUgZmlybXdhcmUgY29udGFpbmVkIGhlcmVpbiBhcyBrZXlzcGFuX3VzYTI4eF9mdy5oIGlzCisKKwkJQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEKKwkJS2V5c3BhbiwgQSBkaXZpc2lvbiBvZiBJbm5vU3lzIEluY29ycG9yYXRlZCAoIktleXNwYW4iKQorCQkKKwlhcyBhbiB1bnB1Ymxpc2hlZCB3b3JrLiBUaGlzIG5vdGljZSBkb2VzIG5vdCBpbXBseSB1bnJlc3RyaWN0ZWQgb3IKKwlwdWJsaWMgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29kZSBmcm9tIHdoaWNoIHRoaXMgZmlybXdhcmUgaW1hZ2UgaXMKKwlkZXJpdmVkLiAgRXhjZXB0IGFzIG5vdGVkIGJlbG93IHRoaXMgZmlybXdhcmUgaW1hZ2UgbWF5IG5vdCBiZSAKKwlyZXByb2R1Y2VkLCB1c2VkLCBzb2xkIG9yIHRyYW5zZmVycmVkIHRvIGFueSB0aGlyZCBwYXJ0eSB3aXRob3V0IAorCUtleXNwYW4ncyBwcmlvciB3cml0dGVuIGNvbnNlbnQuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisJUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIAorCWltYWdlIGFzIHBhcnQgb2YgYSBMaW51eCBvciBvdGhlciBPcGVuIFNvdXJjZSBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbCAKKwlpbiB0ZXh0IG9yIGJpbmFyeSBmb3JtIGFzIHJlcXVpcmVkLiAKKworCVRoaXMgZmlybXdhcmUgbWF5IG5vdCBiZSBtb2RpZmllZCBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aXRoICAKKwlLZXlzcGFuIGhhcmR3YXJlLiAgRGlzdHJpYnV0aW9uIGFuZC9vciBNb2RpZmljYXRpb24gb2YgdGhlIAorCWtleXNwYW4uYyBkcml2ZXIgd2hpY2ggaW5jbHVkZXMgdGhpcyBmaXJtd2FyZSwgaW4gd2hvbGUgb3IgaW4gCisJcGFydCwgcmVxdWlyZXMgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHN0YXRlbWVudC4iCisKKyovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCBrZXlzcGFuX3VzYTI4eF9maXJtd2FyZVtdID0geworIHsweDAwMzMsICAzLCB7IDB4MDIsIDB4MTIsIDB4Zjd9fSwKKyB7MHgwMDAzLCAxNiwgeyAweGU0LCAweDkwLCAweDdmLCAweDkzLCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LCAweDMwLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk2LCAweGYwfX0sCisgezB4MDAxMywgMTYsIHsgMHg5MCwgMHg3ZiwgMHg5NCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZCwgMHg3NCwgMHhmZiwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NywgMHhmMCwgMHg5MH19LAorIHsweDAwMjMsIDE1LCB7IDB4N2YsIDB4OTUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4MDcsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZjAsIDB4MjJ9fSwKKyB7MHgwMDQ2LCAxNiwgeyAweDMwLCAweDA5LCAweDE4LCAweDEyLCAweDEzLCAweDFiLCAweGVmLCAweGMzLCAweDk1LCAweDNjLCAweDQwLCAweDAzLCAweDAyLCAweDAwLCAweGQ4LCAweDkwfX0sCisgezB4MDA1NiwgMTYsIHsgMHg3ZiwgMHhiZiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhjMiwgMHgwOSwgMHhjMiwgMHgwMCwgMHg4MCwgMHg3NywgMHgzMCwgMHgwMywgMHgzYiwgMHg5MCwgMHg3Zn19LAorIHsweDAwNjYsIDE2LCB7IDB4YzYsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4NmQsIDB4MTIsIDB4MTMsIDB4MWIsIDB4ZWYsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTAsIDB4NjQsIDB4OTAsIDB4N2V9fSwKKyB7MHgwMDc2LCAxNiwgeyAweDQwLCAweGUwLCAweDEzLCAweDkyLCAweDA5LCAweDkwLCAweDdmLCAweGM3LCAweGUwLCAweDE0LCAweGY1LCAweDE5LCAweDIwLCAweDAwLCAweDExLCAweDYwfX0sCisgezB4MDA4NiwgMTYsIHsgMHgwZiwgMHhmNSwgMHgwOCwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg0MSwgMHg3NSwgMHgwYywgMHg3ZSwgMHg3NSwgMHgwZCwgMHg0MSwgMHgxMiwgMHgwYywgMHhiYX19LAorIHsweDAwOTYsIDE2LCB7IDB4YzIsIDB4MDMsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZjAsIDB4ODAsIDB4MzksIDB4OTAsIDB4N2YsIDB4YzgsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MzJ9fSwKKyB7MHgwMGE2LCAxNiwgeyAweDEyLCAweDEzLCAweDFiLCAweGVmLCAweGMzLCAweDk0LCAweDQwLCAweDUwLCAweDI5LCAweDkwLCAweDdkLCAweGMwLCAweGUwLCAweDEzLCAweDkyLCAweDA5fX0sCisgezB4MDBiNiwgMTYsIHsgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMCwgMHgxNCwgMHhmNSwgMHgxOSwgMHgyMCwgMHgwMCwgMHgxMSwgMHg2MCwgMHgwZiwgMHhmNSwgMHgwOCwgMHg3ZSwgMHg3ZH19LAorIHsweDAwYzYsIDE2LCB7IDB4N2YsIDB4YzEsIDB4NzUsIDB4MGMsIDB4N2QsIDB4NzUsIDB4MGQsIDB4YzEsIDB4MTIsIDB4MGMsIDB4YmEsIDB4ZDIsIDB4MDMsIDB4ZTQsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwMGQ2LCAxNiwgeyAweGM5LCAweGYwLCAweDkwLCAweDdmLCAweGI2LCAweGUwLCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDAxLCAweDYwLCAweDEyLCAweDExLCAweGQ2LCAweDhmfX0sCisgezB4MDBlNiwgMTYsIHsgMHgxOSwgMHgxMiwgMHgxMywgMHgyNywgMHg4ZiwgMHgzNiwgMHhlNSwgMHgxOSwgMHhjMywgMHg5NSwgMHgzYSwgMHg1MCwgMHgwZiwgMHgxMiwgMHgxMiwgMHhlYn19LAorIHsweDAwZjYsIDE2LCB7IDB4ZWYsIDB4MzAsIDB4ZTAsIDB4MDgsIDB4ZTUsIDB4MzYsIDB4MjAsIDB4ZTcsIDB4MDMsIDB4MzAsIDB4MGIsIDB4NWUsIDB4YzIsIDB4MGIsIDB4ZTUsIDB4MTl9fSwKKyB7MHgwMDM2LCAxMiwgeyAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyfX0sCisgezB4MDA0MywgIDMsIHsgMHgwMiwgMHgxMywgMHgwMH19LAorIHsweDAwMDAsICAzLCB7IDB4MDIsIDB4MGUsIDB4MDB9fSwKKyB7MHgwMTA2LCA2NCwgeyAweDYwLCAweDU4LCAweGI0LCAweDgwLCAweDAzLCAweDQzLCAweDM2LCAweDAyLCAweGU1LCAweDM2LCAweDMwLCAweGU3LCAweDI2LCAweGU1LCAweDE5LCAweGQzLCAweDk0LAorICAweDIwLCAweDQwLCAweDAzLCAweDc1LCAweDE5LCAweDIwLCAweDg1LCAweDE5LCAweDA4LCAweDdlLCAweDdlLCAweDdmLCAweDgwLCAweDc1LCAweDBjLCAweDdlLAorICAweDc1LCAweDBkLCAweDgwLCAweGFmLCAweDM2LCAweDEyLCAweDBmLCAweDRiLCAweGU1LCAweDE5LCAweDI1LCAweGUwLCAweDkwLCAweDdmLCAweGI3LCAweGYwLAorICAweDgwLCAweDI3LCAweGU1LCAweDE5LCAweGQzLCAweDk0LCAweDNmLCAweDQwLCAweDAzLCAweDc1LCAweDE5LCAweDNmLCAweDg1LCAweDE5LCAweDA4fX0sCisgezB4MDE0NiwgNjQsIHsgMHg5MCwgMHg3ZSwgMHg4MCwgMHhlNSwgMHgzNiwgMHhmMCwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg4MSwgMHg3NSwgMHgwYywgMHg3ZSwgMHg3NSwgMHgwZCwgMHg4MSwgMHgxMiwKKyAgMHgwYywgMHhkZiwgMHhlNSwgMHgxOSwgMHgwNCwgMHg5MCwgMHg3ZiwgMHhiNywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjZSwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNiwKKyAgMHgyMCwgMHgwNSwgMHgwMywgMHgwMiwgMHgwMywgMHhjMSwgMHhjMiwgMHgwNSwgMHhlNCwgMHhmNSwgMHgxOCwgMHg3NCwgMHg0MCwgMHgyNSwgMHgxOCwgMHhmNSwKKyAgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YywgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgxOCwgMHg3YywgMHgwMCwgMHg3YiwgMHgwMSwgMHg3YX19LAorIHsweDAxODYsIDY0LCB7IDB4N2UsIDB4NzksIDB4MDAsIDB4MjQsIDB4MDAsIDB4ZjksIDB4ZWMsIDB4MzQsIDB4N2UsIDB4ZmEsIDB4ZWYsIDB4MTIsIDB4MGUsIDB4ZDIsIDB4MDUsIDB4MTgsIDB4ZTUsCisgIDB4MTgsIDB4YjQsIDB4MjAsIDB4ZDcsIDB4OTAsIDB4N2UsIDB4MDAsIDB4ZTAsIDB4NjAsIDB4NjgsIDB4OTAsIDB4N2UsIDB4MDMsIDB4ZTAsIDB4NjAsIDB4MjQsCisgIDB4N2YsIDB4MDEsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4YjEsIDB4N2YsIDB4MDMsIDB4N2QsIDB4Y2QsIDB4MTIsIDB4MTEsIDB4YjEsIDB4NDMsIDB4NDYsCisgIDB4ODAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4ZjAsIDB4ZTQsIDB4OTB9fSwKKyB7MHgwMWM2LCA2NCwgeyAweDdlLCAweDEzLCAweGYwLCAweDgwLCAweDMwLCAweDkwLCAweDdlLCAweDAxLCAweGUwLCAweGZmLCAweDEyLCAweDEwLCAweDM1LCAweDkwLCAweDdlLCAweDAyLCAweGUwLAorICAweGZmLCAweDEyLCAweDEwLCAweDViLCAweDdmLCAweDAxLCAweDkwLCAweDdlLCAweDExLCAweGUwLCAweGZkLCAweDEyLCAweDExLCAweGIxLCAweDdmLCAweDAzLAorICAweDdkLCAweDA3LCAweDEyLCAweDExLCAweGIxLCAweDQzLCAweDQ2LCAweDgwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLAorICAweDAwLCAweGU1LCAweDQ2LCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweGU1LCAweDQwLCAweDQ0LCAweDA2LCAweDkwfX0sCisgezB4MDIwNiwgNjQsIHsgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgwMywgMHhlMCwgMHg3MCwgMHgwNiwgMHg5MCwgMHg3ZSwgMHgxMywgMHhlMCwgMHg3MCwgMHgwOCwgMHhlNCwgMHg5MCwKKyAgMHg3ZSwgMHgxMywgMHhmMCwgMHg3NSwgMHgyNSwgMHhmZiwgMHg5MCwgMHg3ZSwgMHgwNSwgMHhlMCwgMHg2MCwgMHgxMiwgMHhhMywgMHhlMCwgMHg1NCwgMHgzZiwKKyAgMHhmNSwgMHg0NCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NCwgMHhmMCwgMHg5MCwgMHg3ZSwKKyAgMHgwNywgMHhlMCwgMHg2MCwgMHgyYiwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0MiwgMHg4MCwgMHg4MCwgMHgwMywgMHg1MywgMHg0Mn19LAorIHsweDAyNDYsIDY0LCB7IDB4N2YsIDB4NTMsIDB4NDIsIDB4ZmMsIDB4OTAsIDB4N2UsIDB4MDksIDB4ZTAsIDB4NjAsIDB4MTEsIDB4NDMsIDB4NDIsIDB4MDIsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4MTIsCisgIDB4MTAsIDB4YTcsIDB4OTAsIDB4N2UsIDB4MGIsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTAsIDB4Y2QsIDB4YWYsIDB4NDIsIDB4MTIsIDB4MTAsIDB4ODEsIDB4OTAsCisgIDB4N2UsIDB4MDMsIDB4ZTAsIDB4NjAsIDB4MDgsIDB4NTMsIDB4NDIsIDB4N2YsIDB4YWYsIDB4NDIsIDB4MTIsIDB4MTAsIDB4ODEsIDB4OTAsIDB4N2UsIDB4MGMsCisgIDB4ZTAsIDB4NjAsIDB4MTgsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDYsIDB4MDIsIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDYsIDB4ZmR9fSwKKyB7MHgwMjg2LCA2NCwgeyAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ2LCAweGYwLCAweDkwLCAweDdlLCAweDBlLCAweGUwLCAweDYwLAorICAweDE4LCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQ2LCAweDAxLCAweDgwLCAweDAzLCAweDUzLCAweDQ2LCAweGZlLCAweDkwLCAweDdmLCAweDk4LAorICAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ2LCAweGYwLCAweDkwLCAweDdlLCAweDEyLCAweGUwLCAweGY1LCAweDNhLCAweGEzLAorICAweGUwLCAweDEzLCAweDkyLCAweDBkLCAweGEzLCAweGUwLCAweGY1LCAweDNjLCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQ2LCAweDEwfX0sCisgezB4MDJjNiwgNjQsIHsgMHg4MCwgMHgwMywgMHg1MywgMHg0NiwgMHhlZiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NiwgMHhmMCwKKyAgMHg5MCwgMHg3ZSwgMHgxNiwgMHhlMCwgMHg2MCwgMHgzMiwgMHg1MywgMHg0NCwgMHhiZiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwKKyAgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHgxMiwgMHgxMiwgMHhkZiwKKyAgMHhlZiwgMHg1NCwgMHhmZSwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg1MywgMHgzZSwgMHhmZCwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZSwgMHgxMn19LAorIHsweDAzMDYsIDY0LCB7IDB4MTEsIDB4YjEsIDB4ZTQsIDB4ZjUsIDB4MmEsIDB4ZjUsIDB4MjksIDB4ZDIsIDB4MDcsIDB4OTAsIDB4N2UsIDB4MTcsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4NDMsIDB4M2UsCisgIDB4MDIsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2UsIDB4MTIsIDB4MTEsIDB4YjEsIDB4NzUsIDB4MjksIDB4MDEsIDB4ZDIsIDB4MDcsIDB4OTAsIDB4N2UsIDB4MTgsCisgIDB4ZTAsIDB4NjAsIDB4MTAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4ZTUsIDB4NDAsIDB4NDQsIDB4MDQsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4ZjAsIDB4ZDIsIDB4MDAsIDB4OTAsIDB4N2UsIDB4MTksIDB4ZTAsIDB4NjAsIDB4MTEsIDB4NDMsIDB4NDQsIDB4NDAsIDB4OTAsIDB4N2YsIDB4OTh9fSwKKyB7MHgwMzQ2LCA2NCwgeyAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdlLCAweDFhLCAweGUwLCAweDYwLCAweDBmLAorICAweDUzLCAweDNlLCAweGZlLCAweGU0LCAweGZmLCAweGFkLCAweDNlLCAweDEyLCAweDExLCAweGIxLCAweDc1LCAweDJiLCAweDAxLCAweGQyLCAweDA3LCAweDkwLAorICAweDdlLCAweDFiLCAweGUwLCAweDYwLCAweDBmLCAweDQzLCAweDNlLCAweDAxLCAweGU0LCAweGZmLCAweGFkLCAweDNlLCAweDEyLCAweDExLCAweGIxLCAweGU0LAorICAweGY1LCAweDJiLCAweGQyLCAweDA3LCAweDkwLCAweDdlLCAweDFjLCAweGUwLCAweDYwLCAweDBlLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyfX0sCisgezB4MDM4NiwgNjQsIHsgMHhmMCwgMHhlNSwgMHg0MCwgMHg0NCwgMHgwMiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgxZCwgMHhlMCwgMHg2MCwgMHgwMiwgMHhkMiwgMHgwYiwKKyAgMHg5MCwgMHg3ZSwgMHgxZSwgMHhlMCwgMHg2MCwgMHgwOCwgMHg3NSwgMHgyYywgMHgwMSwgMHhlNCwgMHhmNSwgMHgzOCwgMHhkMiwgMHgwNywgMHg5MCwgMHg3ZSwKKyAgMHgxZiwgMHhlMCwgMHg2MCwgMHgxMSwgMHg5MCwgMHg3ZiwgMHhkNywgMHg3NCwgMHgxMSwgMHhmMCwgMHg3NCwgMHgzMSwgMHhmMCwgMHg3NCwgMHgxNSwgMHhmMCwKKyAgMHg3NCwgMHgzNSwgMHhmMCwgMHhkMiwgMHgwMywgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjZiwgMHhmMCwgMHgzMCwgMHgxYSwgMHg1MiwgMHhlNSwgMHgzOH19LAorIHsweDAzYzYsIDY0LCB7IDB4NjAsIDB4MDIsIDB4MTUsIDB4MzgsIDB4MjAsIDB4MTMsIDB4NDksIDB4ZTUsIDB4MTMsIDB4ZDMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDQsIDB4MTUsIDB4MTMsIDB4ODAsCisgIDB4M2UsIDB4NzUsIDB4MTMsIDB4MGEsIDB4MzAsIDB4MWIsIDB4MDIsIDB4ZDIsIDB4MTMsIDB4MTIsIDB4MTIsIDB4ZGYsIDB4ZWYsIDB4NTQsIDB4MDEsIDB4ZjUsCisgIDB4MTksIDB4NjUsIDB4MmEsIDB4NjAsIDB4MDUsIDB4ODUsIDB4MTksIDB4MmEsIDB4ZDIsIDB4MDcsIDB4MTIsIDB4MTMsIDB4MzMsIDB4ZWYsIDB4NTQsIDB4ODAsCisgIDB4ZjUsIDB4MTksIDB4NjUsIDB4MjYsIDB4NjAsIDB4MDUsIDB4ODUsIDB4MTksIDB4MjYsIDB4ZDIsIDB4MDcsIDB4MzAsIDB4MGQsIDB4MTEsIDB4MTJ9fSwKKyB7MHgwNDA2LCA2NCwgeyAweDEzLCAweDMzLCAweGVmLCAweDU0LCAweDEwLCAweGY1LCAweDE5LCAweDY1LCAweDI1LCAweDYwLCAweDA1LCAweDg1LCAweDE5LCAweDI1LCAweGQyLCAweDA3LCAweDIwLAorICAweDFiLCAweDAzLCAweDAyLCAweDA3LCAweGVjLCAweDMwLCAweDBhLCAweDE4LCAweDEyLCAweDEzLCAweDZmLCAweGVmLCAweGMzLCAweDk1LCAweDNkLCAweDQwLAorICAweDAzLCAweDAyLCAweDA0LCAweGFlLCAweDkwLCAweDdmLCAweGMxLCAweDc0LCAweDAxLCAweGYwLCAweGMyLCAweDBhLCAweGMyLCAweDAwLCAweDgwLCAweDc3LAorICAweDMwLCAweDA0LCAweDNiLCAweDkwLCAweDdmLCAweGNhLCAweGUwLCAweDIwLCAweGUxLCAweDZkLCAweDEyLCAweDEzLCAweDZmLCAweGVmLCAweGMzfX0sCisgezB4MDQ0NiwgNjQsIHsgMHg5NCwgMHg0MCwgMHg1MCwgMHg2NCwgMHg5MCwgMHg3ZCwgMHg0MCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhjYiwgMHhlMCwgMHgxNCwgMHhmNSwKKyAgMHgxOSwgMHgyMCwgMHgwMCwgMHgxMSwgMHg2MCwgMHgwZiwgMHhmNSwgMHgwOCwgMHg3ZSwgMHg3ZCwgMHg3ZiwgMHg0MSwgMHg3NSwgMHgwYywgMHg3ZCwgMHg3NSwKKyAgMHgwZCwgMHg0MSwgMHgxMiwgMHgwZCwgMHgwNCwgMHhjMiwgMHgwNCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjYiwgMHhmMCwgMHg4MCwgMHgzOSwgMHg5MCwgMHg3ZiwKKyAgMHhjYywgMHhlMCwgMHgyMCwgMHhlMSwgMHgzMiwgMHgxMiwgMHgxMywgMHg2ZiwgMHhlZiwgMHhjMywgMHg5NCwgMHg0MCwgMHg1MCwgMHgyOSwgMHg5MH19LAorIHsweDA0ODYsIDY0LCB7IDB4N2MsIDB4YzAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGEsIDB4OTAsIDB4N2YsIDB4Y2QsIDB4ZTAsIDB4MTQsIDB4ZjUsIDB4MTksIDB4MjAsIDB4MDAsIDB4MTEsIDB4NjAsCisgIDB4MGYsIDB4ZjUsIDB4MDgsIDB4N2UsIDB4N2MsIDB4N2YsIDB4YzEsIDB4NzUsIDB4MGMsIDB4N2MsIDB4NzUsIDB4MGQsIDB4YzEsIDB4MTIsIDB4MGQsIDB4MDQsCisgIDB4ZDIsIDB4MDQsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4Y2QsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YmEsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MDUsCisgIDB4MzYsIDB4MTIsIDB4MTIsIDB4MjAsIDB4OGYsIDB4MTksIDB4MTIsIDB4MTMsIDB4N2IsIDB4OGYsIDB4MzcsIDB4ZTUsIDB4MTksIDB4YzMsIDB4OTV9fSwKKyB7MHgwNGM2LCA2NCwgeyAweDNiLCAweDUwLCAweDBmLCAweDEyLCAweDEzLCAweDU3LCAweGVmLCAweDMwLCAweGUwLCAweDA4LCAweGU1LCAweDM3LCAweDIwLCAweGU3LCAweDAzLCAweDMwLCAweDBjLAorICAweDVlLCAweGMyLCAweDBjLCAweGU1LCAweDE5LCAweDYwLCAweDU4LCAweGI0LCAweDgwLCAweDAzLCAweDQzLCAweDM3LCAweDAyLCAweGU1LCAweDM3LCAweDMwLAorICAweGU3LCAweDI2LCAweGU1LCAweDE5LCAweGQzLCAweDk0LCAweDIwLCAweDQwLCAweDAzLCAweDc1LCAweDE5LCAweDIwLCAweDg1LCAweDE5LCAweDA4LCAweDdlLAorICAweDdkLCAweDdmLCAweDgwLCAweDc1LCAweDBjLCAweDdkLCAweDc1LCAweDBkLCAweDgwLCAweGFmLCAweDM3LCAweDEyLCAweDBmLCAweDg0LCAweGU1fX0sCisgezB4MDUwNiwgNjQsIHsgMHgxOSwgMHgyNSwgMHhlMCwgMHg5MCwgMHg3ZiwgMHhiYiwgMHhmMCwgMHg4MCwgMHgyNywgMHhlNSwgMHgxOSwgMHhkMywgMHg5NCwgMHgzZiwgMHg0MCwgMHgwMywgMHg3NSwKKyAgMHgxOSwgMHgzZiwgMHg4NSwgMHgxOSwgMHgwOCwgMHg5MCwgMHg3ZCwgMHg4MCwgMHhlNSwgMHgzNywgMHhmMCwgMHg3ZSwgMHg3ZCwgMHg3ZiwgMHg4MSwgMHg3NSwKKyAgMHgwYywgMHg3ZCwgMHg3NSwgMHgwZCwgMHg4MSwgMHgxMiwgMHgwZCwgMHgyOSwgMHhlNSwgMHgxOSwgMHgwNCwgMHg5MCwgMHg3ZiwgMHhiYiwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHhkMCwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNiwgMHgyMCwgMHgwNiwgMHgwMywgMHgwMiwgMHgwNywgMHg5NywgMHhjMiwgMHgwNiwgMHhlNH19LAorIHsweDA1NDYsIDY0LCB7IDB4ZjUsIDB4MTgsIDB4NzQsIDB4YzAsIDB4MjUsIDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTgsCisgIDB4N2MsIDB4MDAsIDB4N2IsIDB4MDEsIDB4N2EsIDB4N2UsIDB4NzksIDB4MjAsIDB4MjQsIDB4MjAsIDB4ZjksIDB4ZWMsIDB4MzQsIDB4N2UsIDB4ZmEsIDB4ZWYsCisgIDB4MTIsIDB4MGUsIDB4ZDIsIDB4MDUsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MjAsIDB4ZDcsIDB4OTAsIDB4N2UsIDB4MjAsIDB4ZTAsIDB4NjAsIDB4NjgsCisgIDB4OTAsIDB4N2UsIDB4MjMsIDB4ZTAsIDB4NjAsIDB4MjQsIDB4N2YsIDB4MDEsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4ZmIsIDB4N2YsIDB4MDN9fSwKKyB7MHgwNTg2LCA2NCwgeyAweDdkLCAweGNkLCAweDEyLCAweDExLCAweGZiLCAweDQzLCAweDQ3LCAweDgwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDkwLCAweGMwLCAweDAwLAorICAweGU1LCAweDQ3LCAweGYwLCAweGU0LCAweDkwLCAweDdlLCAweDMzLCAweGYwLCAweDgwLCAweDMwLCAweDkwLCAweDdlLCAweDIxLCAweGUwLCAweGZmLCAweDEyLAorICAweDExLCAweDE5LCAweDkwLCAweDdlLCAweDIyLCAweGUwLCAweGZmLCAweDEyLCAweDExLCAweDNmLCAweDdmLCAweDAxLCAweDkwLCAweDdlLCAweDMxLCAweGUwLAorICAweGZkLCAweDEyLCAweDExLCAweGZiLCAweDdmLCAweDAzLCAweDdkLCAweDA3LCAweDEyLCAweDExLCAweGZiLCAweDQzLCAweDQ3LCAweDgwLCAweDkwfX0sCisgezB4MDVjNiwgNjQsIHsgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYSwgMHhmMCwKKyAgMHhlNSwgMHg0MSwgMHg0NCwgMHgwNiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgyMywgMHhlMCwgMHg3MCwgMHgwNiwgMHg5MCwgMHg3ZSwKKyAgMHgzMywgMHhlMCwgMHg3MCwgMHgwOCwgMHhlNCwgMHg5MCwgMHg3ZSwgMHgzMywgMHhmMCwgMHg3NSwgMHgyZSwgMHhmZiwgMHg5MCwgMHg3ZSwgMHgyNSwgMHhlMCwKKyAgMHg2MCwgMHgxMiwgMHhhMywgMHhlMCwgMHg1NCwgMHgzZiwgMHhmNSwgMHg0NSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg5MH19LAorIHsweDA2MDYsIDY0LCB7IDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDUsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MjcsIDB4ZTAsIDB4NjAsIDB4MmIsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDMsCisgIDB4ODAsIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDMsIDB4N2YsIDB4NTMsIDB4NDMsIDB4ZmMsIDB4OTAsIDB4N2UsIDB4MjksIDB4ZTAsIDB4NjAsIDB4MTEsIDB4NDMsCisgIDB4NDMsIDB4MDIsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTEsIDB4NjUsIDB4OTAsIDB4N2UsIDB4MmIsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTEsIDB4OGIsCisgIDB4YWYsIDB4NDMsIDB4MTIsIDB4MTAsIDB4ZjMsIDB4OTAsIDB4N2UsIDB4MjMsIDB4ZTAsIDB4NjAsIDB4MDgsIDB4NTMsIDB4NDMsIDB4N2YsIDB4YWZ9fSwKKyB7MHgwNjQ2LCA2NCwgeyAweDQzLCAweDEyLCAweDEwLCAweGYzLCAweDkwLCAweDdlLCAweDJjLCAweGUwLCAweDYwLCAweDE4LCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQ3LCAweDAyLAorICAweDgwLCAweDAzLCAweDUzLCAweDQ3LCAweGZkLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ3LAorICAweGYwLCAweDkwLCAweDdlLCAweDJlLCAweGUwLCAweDYwLCAweDE4LCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQ3LCAweDAxLCAweDgwLCAweDAzLAorICAweDUzLCAweDQ3LCAweGZlLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ3LCAweGYwfX0sCisgezB4MDY4NiwgNjQsIHsgMHg5MCwgMHg3ZSwgMHgzMiwgMHhlMCwgMHhmNSwgMHgzYiwgMHhhMywgMHhlMCwgMHgxMywgMHg5MiwgMHgwZSwgMHhhMywgMHhlMCwgMHhmNSwgMHgzZCwgMHhhMywgMHhlMCwKKyAgMHg2MCwgMHgwNSwgMHg0MywgMHg0NywgMHgxMCwgMHg4MCwgMHgwMywgMHg1MywgMHg0NywgMHhlZiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwKKyAgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NywgMHhmMCwgMHg5MCwgMHg3ZSwgMHgzNiwgMHhlMCwgMHg2MCwgMHgzMiwgMHg1MywgMHg0NSwgMHhiZiwgMHg5MCwKKyAgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3Zn19LAorIHsweDA2YzYsIDY0LCB7IDB4OTgsIDB4NzQsIDB4MDksIDB4ZjAsIDB4MTIsIDB4MTMsIDB4NGIsIDB4ZWYsIDB4NTQsIDB4ZmUsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4NTMsIDB4M2YsIDB4ZmQsCisgIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2YsIDB4MTIsIDB4MTEsIDB4ZmIsIDB4ZTQsIDB4ZjUsIDB4MzMsIDB4ZjUsIDB4MzIsIDB4ZDIsIDB4MDgsIDB4OTAsIDB4N2UsCisgIDB4MzcsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4NDMsIDB4M2YsIDB4MDIsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2YsIDB4MTIsIDB4MTEsIDB4ZmIsIDB4NzUsIDB4MzIsCisgIDB4MDEsIDB4ZDIsIDB4MDgsIDB4OTAsIDB4N2UsIDB4MzgsIDB4ZTAsIDB4NjAsIDB4MTAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjB9fSwKKyB7MHgwNzA2LCA2NCwgeyAweGU1LCAweDQxLCAweDQ0LCAweDA0LCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweGQyLCAweDAwLCAweDkwLCAweDdlLCAweDM5LCAweGUwLCAweDYwLCAweDExLCAweDQzLAorICAweDQ1LCAweDQwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLAorICAweDkwLCAweDdlLCAweDNhLCAweGUwLCAweDYwLCAweDBmLCAweDUzLCAweDNmLCAweGZlLCAweGU0LCAweGZmLCAweGFkLCAweDNmLCAweDEyLCAweDExLCAweGZiLAorICAweDc1LCAweDM0LCAweDAxLCAweGQyLCAweDA4LCAweDkwLCAweDdlLCAweDNiLCAweGUwLCAweDYwLCAweDBmLCAweDQzLCAweDNmLCAweDAxLCAweGU0fX0sCisgezB4MDc0NiwgNjQsIHsgMHhmZiwgMHhhZCwgMHgzZiwgMHgxMiwgMHgxMSwgMHhmYiwgMHhlNCwgMHhmNSwgMHgzNCwgMHhkMiwgMHgwOCwgMHg5MCwgMHg3ZSwgMHgzYywgMHhlMCwgMHg2MCwgMHgwZSwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYSwgMHhmMCwgMHhlNSwgMHg0MSwgMHg0NCwgMHgwMiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwKKyAgMHgzZCwgMHhlMCwgMHg2MCwgMHgwMiwgMHhkMiwgMHgwYywgMHg5MCwgMHg3ZSwgMHgzZSwgMHhlMCwgMHg2MCwgMHgwOCwgMHg3NSwgMHgzNSwgMHgwMSwgMHhlNCwKKyAgMHhmNSwgMHgzOSwgMHhkMiwgMHgwOCwgMHg5MCwgMHg3ZSwgMHgzZiwgMHhlMCwgMHg2MCwgMHgxMSwgMHg5MCwgMHg3ZiwgMHhkNywgMHg3NCwgMHgxM319LAorIHsweDA3ODYsIDY0LCB7IDB4ZjAsIDB4NzQsIDB4MzMsIDB4ZjAsIDB4NzQsIDB4MTYsIDB4ZjAsIDB4NzQsIDB4MzYsIDB4ZjAsIDB4ZDIsIDB4MDQsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4ZDEsIDB4ZjAsCisgIDB4MzAsIDB4MWEsIDB4NTIsIDB4ZTUsIDB4MzksIDB4NjAsIDB4MDIsIDB4MTUsIDB4MzksIDB4MzAsIDB4MTMsIDB4NDksIDB4ZTUsIDB4MTMsIDB4ZDMsIDB4OTQsCisgIDB4MDAsIDB4NDAsIDB4MDQsIDB4MTUsIDB4MTMsIDB4ODAsIDB4M2UsIDB4NzUsIDB4MTMsIDB4MGEsIDB4MzAsIDB4MWIsIDB4MDIsIDB4YzIsIDB4MTMsIDB4MTIsCisgIDB4MTMsIDB4NGIsIDB4ZWYsIDB4NTQsIDB4MDEsIDB4ZjUsIDB4MTksIDB4NjUsIDB4MzMsIDB4NjAsIDB4MDUsIDB4ODUsIDB4MTksIDB4MzMsIDB4ZDJ9fSwKKyB7MHgwN2M2LCA2NCwgeyAweDA4LCAweDEyLCAweDEzLCAweDg3LCAweGVmLCAweDU0LCAweDgwLCAweGY1LCAweDE5LCAweDY1LCAweDJmLCAweDYwLCAweDA1LCAweDg1LCAweDE5LCAweDJmLCAweGQyLAorICAweDA4LCAweDMwLCAweDBlLCAweDExLCAweDEyLCAweDEzLCAweDg3LCAweGVmLCAweDU0LCAweDEwLCAweGY1LCAweDE5LCAweDY1LCAweDJlLCAweDYwLCAweDA1LAorICAweDg1LCAweDE5LCAweDJlLCAweGQyLCAweDA4LCAweDMwLCAweDFhLCAweDJhLCAweDkwLCAweDdmLCAweGQyLCAweGUwLCAweDIwLCAweGUxLCAweDIzLCAweDkwLAorICAweDdiLCAweDQwLCAweGUwLCAweDYwLCAweDA5LCAweGUwLCAweGY1LCAweDE1LCAweDkwLCAweDdiLCAweDQyLCAweGUwLCAweGY1LCAweDE2LCAweDkwfX0sCisgezB4MDgwNiwgNjQsIHsgMHg3YiwgMHg0MSwgMHhlMCwgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHhkNywgMHg3NCwgMHgxNywgMHhmMCwgMHg3NCwgMHgzNywgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwKKyAgMHhkMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjMiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwOSwgMHgyMCwgMHhlNSwgMHgwYSwgMHg3MCwgMHg0MCwKKyAgMHgzMCwgMHgwNywgMHgzOSwgMHhlNSwgMHgzOCwgMHg3MCwgMHgzNSwgMHhjMiwgMHgwNywgMHhmNSwgMHgxOCwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwKKyAgMHgyNCwgMHgyNSwgMHgxOCwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgwZSwgMHg4YywgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNX19LAorIHsweDA4NDYsIDY0LCB7IDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MDksIDB4ZGIsCisgIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MDksIDB4ZjAsIDB4NzUsIDB4MzgsIDB4MTAsIDB4ZTQsIDB4ZjUsIDB4MmMsIDB4NzUsIDB4MGEsIDB4MDEsIDB4MjIsCisgIDB4ZTUsIDB4MGEsIDB4NjQsIDB4MDEsIDB4NzAsIDB4NDAsIDB4MzAsIDB4MDgsIDB4MzksIDB4ZTUsIDB4MzksIDB4NzAsIDB4MzUsIDB4YzIsIDB4MDgsIDB4ZjUsCisgIDB4MTgsIDB4N2UsIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MmQsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTJ9fSwKKyB7MHgwODg2LCA2NCwgeyAweDBlLCAweDhjLCAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LAorICAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDA5LCAweGRiLCAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDA5LCAweGYwLCAweDc1LCAweDM5LCAweDEwLCAweGU0LAorICAweGY1LCAweDM1LCAweDc1LCAweDBhLCAweDAyLCAweDIyLCAweGU1LCAweDBhLCAweDY0LCAweDAyLCAweDcwLCAweDM2LCAweDMwLCAweDE0LCAweDJmLCAweGMyLAorICAweDE0LCAweGY1LCAweDE4LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDBlLCAweDI1LCAweDE4LCAweGY5LCAweGVlLCAweDM0LCAweDAwfX0sCisgezB4MDhjNiwgNjQsIHsgMHhmYSwgMHgxMiwgMHgwZSwgMHg4YywgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNSwgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwKKyAgMHhmMCwgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwNSwgMHhkYiwgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwNSwgMHhmMCwgMHg3NSwgMHgwYSwKKyAgMHgwMywgMHgyMiwgMHhlNSwgMHgxNSwgMHg2MCwgMHgzMCwgMHgxNSwgMHgxNSwgMHhlNCwgMHhmNSwgMHgxOCwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwKKyAgMHgxNCwgMHgyNSwgMHgxOCwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgwZSwgMHg4YywgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNX19LAorIHsweDA5MDYsIDY0LCB7IDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MDMsIDB4ZGIsCisgIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MGEsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZTksIDB4ZTAsIDB4MTIsIDB4MGUsCisgIDB4ZTQsIDB4MGEsIDB4MDgsIDB4MDAsIDB4MGEsIDB4N2MsIDB4MDEsIDB4MGEsIDB4ZTgsIDB4MDMsIDB4MDksIDB4NDQsIDB4MDYsIDB4MDksIDB4ZmIsIDB4MDgsCisgIDB4MDksIDB4ZjUsIDB4MDksIDB4MDksIDB4ZGQsIDB4MGEsIDB4MDksIDB4ZWMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MzcsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwOTQ2LCA2NCwgeyAweGViLCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE5LCAweDE0LCAweDYwLCAweDYxLCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDA5LCAweGQzLCAweDc0LAorICAweDE5LCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweDc0LCAweDAwLCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLAorICAweGVhLCAweGUwLCAweDcwLCAweDA0LCAweDdmLCAweDAyLCAweDgwLCAweDAyLCAweDdmLCAweDAzLCAweDc1LCAweDgyLCAweDgyLCAweDc1LCAweDgzLCAweDE5LAorICAweGVmLCAweGYwLCAweDc1LCAweDgyLCAweDdiLCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDc1LCAweDgyLCAweDc0LCAweDc1LCAweDgzLCAweDE5fX0sCisgezB4MDk4NiwgNjQsIHsgMHhmMCwgMHg3NSwgMHg4MiwgMHg2NiwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg3NSwgMHg4MiwgMHg1OCwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHhlYSwgMHhlMCwgMHgwNCwgMHg3NSwgMHg4MiwgMHgxNywgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg3NCwgMHgxOSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwKKyAgMHg3NCwgMHgxMiwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmZiwgMHgxMiwgMHgwZiwKKyAgMHgwYSwgMHhlYSwgMHg0OSwgMHg2MCwgMHgwZCwgMHhlYSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHhlOSwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMH19LAorIHsweDA5YzYsIDY0LCB7IDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsCisgIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4MDksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsCisgIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MDksIDB4MDIsIDB4MGIsIDB4M2UsIDB4MTIsIDB4MGIsCisgIDB4NDYsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4MDAsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4ZjAsIDB4MDJ9fSwKKyB7MHgwYTA2LCA2NCwgeyAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweDdmLCAweDYwLCAweDI0LCAweDE0LCAweDYwLCAweDMxLCAweDI0LCAweDAyLCAweDcwLCAweDViLAorICAweGEyLCAweDEwLCAweGU0LCAweDMzLCAweGZmLCAweDI1LCAweGUwLCAweGZmLCAweGEyLCAweDE2LCAweGU0LCAweDMzLCAweDRmLCAweDkwLCAweDdmLCAweDAwLAorICAweGYwLCAweGU0LCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweGU0LCAweDkwLCAweDdmLAorICAweDAwLCAweGYwLCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmfX0sCisgezB4MGE0NiwgNjQsIHsgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwKKyAgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmZCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwKKyAgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwKKyAgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxZCwgMHgyNCwgMHgwMn19LAorIHsweDBhODYsIDY0LCB7IDB4NjAsIDB4MDMsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDUsIDB4YzIsIDB4MTAsIDB4MDIsIDB4MGIsIDB4M2UsCisgIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MzgsCisgIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsCisgIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwYWM2LCA2NCwgeyAweGVjLCAweGUwLCAweDU0LCAweDgwLCAweGZmLCAweDEzLCAweDEzLCAweDEzLCAweDU0LCAweDFmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDkwLCAweDdmLAorICAweGQ3LCAweGYwLCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAweDgwLCAweDVmLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLAorICAweDU2LCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE4LCAweDI0LCAweDAyLCAweDcwLCAweDRhLCAweDkwLCAweDdmLCAweGVhLAorICAweGUwLCAweGI0LCAweDAxLCAweDA0LCAweGQyLCAweDEwLCAweDgwLCAweDNmLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwfX0sCisgezB4MGIwNiwgNjQsIHsgMHg4MCwgMHgzNiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwKKyAgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwKKyAgMHhmNSwgMHg4MywgMHg3NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgwNywKKyAgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHgyMn19LAorIHsweDBiNDYsIDY0LCB7IDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4NzQsIDB4MzAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4OTUsIDB4NzQsIDB4YzAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4M2YsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTgsCisgIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4OGUsIDB4OTAsIDB4N2YsIDB4ZGYsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGUsIDB4ZjAsIDB4ZTQsIDB4ZjUsCisgIDB4MjQsIDB4NzUsIDB4MTgsIDB4MDEsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MjQsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZTQsIDB4MzQsIDB4MDAsIDB4ZmF9fSwKKyB7MHgwYjg2LCA2NCwgeyAweGU0LCAweDEyLCAweDBlLCAweGQyLCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDA5LCAweGVhLCAweDc1LCAweDNhLCAweDAxLCAweGU0LCAweGY1LCAweDM4LAorICAweGY1LCAweDEzLCAweGY1LCAweDM2LCAweGMyLCAweDA3LCAweGMyLCAweDBiLCAweGMyLCAweDA1LCAweGMyLCAweDAwLCAweGMyLCAweDA5LCAweGMyLCAweDEzLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDc1LCAweDQ0LCAweDAzLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweDAzLCAweGYwLCAweDdmLAorICAweDBjLCAweGU0LCAweGZkLCAweDEyLCAweDExLCAweGIxLCAweDdmLCAweDEwLCAweDhmLCAweDQyLCAweDEyLCAweDEwLCAweDgxLCAweDkwLCAweDdmfX0sCisgezB4MGJjNiwgNjQsIHsgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHg3ZiwgMHgwMSwgMHg4ZiwgMHg0MCwgMHhlZiwgMHg0NCwgMHgwNiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg3NSwgMHg0NiwgMHg4MCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHg4MCwgMHhmMCwgMHgwZiwgMHhlNCwgMHhmZCwKKyAgMHgxMiwgMHgxMSwgMHhiMSwgMHhlNCwgMHhmZiwgMHg3ZSwgMHhhMywgMHhhZCwgMHgwNiwgMHg4ZCwgMHgzZSwgMHgxMiwgMHgxMSwgMHhiMSwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNCwgMHhmMCwgMHg3ZiwgMHgwNSwgMHg3ZCwgMHg3ZiwgMHgxMiwgMHgxMX19LAorIHsweDBjMDYsIDY0LCB7IDB4YjEsIDB4N2YsIDB4MDEsIDB4MTIsIDB4MTIsIDB4NmEsIDB4N2YsIDB4MDMsIDB4N2QsIDB4MDcsIDB4MTIsIDB4MTEsIDB4YjEsIDB4MjAsIDB4MWIsIDB4MDMsIDB4MDIsCisgIDB4MGMsIDB4YjcsIDB4NzUsIDB4MmQsIDB4MDEsIDB4NzUsIDB4MTgsIDB4MDEsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MmQsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZTQsCisgIDB4MzQsIDB4MDAsIDB4ZmEsIDB4ZTQsIDB4MTIsIDB4MGUsIDB4ZDIsIDB4MDUsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MDksIDB4ZWEsIDB4NzUsIDB4M2IsCisgIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4MzksIDB4ZjUsIDB4MTMsIDB4ZjUsIDB4MzcsIDB4YzIsIDB4MDgsIDB4YzIsIDB4MGMsIDB4YzIsIDB4MDYsIDB4YzJ9fSwKKyB7MHgwYzQ2LCA2NCwgeyAweDAwLCAweGMyLCAweDBhLCAweGMyLCAweDEzLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweDc1LCAweDQ1LCAweDAzLCAweDkwLCAweGMwLCAweDAwLAorICAweDc0LCAweDAzLCAweGYwLCAweDdmLCAweDBjLCAweGU0LCAweGZkLCAweDEyLCAweDExLCAweGZiLCAweDdmLCAweDEwLCAweDhmLCAweDQzLCAweDEyLCAweDEwLAorICAweGYzLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBhLCAweGYwLCAweDdmLCAweDAxLCAweDhmLCAweDQxLCAweGVmLCAweDQ0LCAweDA2LCAweDkwLCAweGMwLAorICAweDAwLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDc1LCAweDQ3LCAweDgwLCAweDkwLCAweGMwLCAweDAwLCAweDc0fX0sCisgezB4MGM4NiwgNjQsIHsgMHg4MCwgMHhmMCwgMHgwZiwgMHhlNCwgMHhmZCwgMHgxMiwgMHgxMSwgMHhmYiwgMHhlNCwgMHhmZiwgMHg3ZSwgMHhhMywgMHhhZCwgMHgwNiwgMHg4ZCwgMHgzZiwgMHgxMiwKKyAgMHgxMSwgMHhmYiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNCwgMHhmMCwgMHg3ZiwgMHgwNSwgMHg3ZCwKKyAgMHg3ZiwgMHgxMiwgMHgxMSwgMHhmYiwgMHg3ZiwgMHgwMSwgMHgxMiwgMHgxMiwgMHg4YiwgMHg3ZiwgMHgwMywgMHg3ZCwgMHgwNywgMHgxMiwgMHgxMSwgMHhmYiwKKyAgMHhkMiwgMHgxMiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMCwgMHhmMCwgMHhhZiwgMHgwOCwgMHhlNSwgMHgwZCwgMHhmNSwgMHg4Mn19LAorIHsweDBjYzYsIDY0LCB7IDB4ZTUsIDB4MGMsIDB4ZjUsIDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsIDB4ODYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4MDUsIDB4ODYsIDB4ZTAsIDB4YTMsIDB4MDUsIDB4ODYsCisgIDB4ZjAsIDB4MDUsIDB4ODYsIDB4ZGYsIDB4ZjcsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4YWYsIDB4MDgsCisgIDB4ZTUsIDB4MGQsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MGMsIDB4ZjUsIDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsIDB4ODYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsCisgIDB4MDUsIDB4ODYsIDB4ZjAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4ZGYsIDB4ZjcsIDB4MDUsIDB4ODYsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwZDA2LCA2NCwgeyAweDk4LCAweDc0LCAweDA4LCAweGYwLCAweGFmLCAweDA4LCAweGU1LCAweDBkLCAweGY1LCAweDgyLCAweGU1LCAweDBjLCAweGY1LCAweDgzLCAweGMyLCAweGFmLCAweDA1LAorICAweDg2LCAweDkwLCAweGMwLCAweDAwLCAweDA1LCAweDg2LCAweGUwLCAweGEzLCAweDA1LCAweDg2LCAweGYwLCAweDA1LCAweDg2LCAweGRmLCAweGY3LCAweGQyLAorICAweGFmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDA4LCAweGYwLCAweGFmLCAweDA4LCAweGU1LCAweDBkLCAweGY1LCAweDgyLCAweGU1LCAweDBjLAorICAweGY1LCAweDgzLCAweGMyLCAweGFmLCAweDA1LCAweDg2LCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweDA1LCAweDg2LCAweGYwLCAweGEzLCAweDA1fX0sCisgezB4MGQ0NiwgNjQsIHsgMHg4NiwgMHhkZiwgMHhmNywgMHgwNSwgMHg4NiwgMHhkMiwgMHhhZiwgMHgyMiwgMHg3NCwgMHgwMCwgMHhmNSwgMHg4NiwgMHg5MCwgMHhmZCwgMHhhNSwgMHg3YywgMHgwNSwKKyAgMHhhMywgMHhlNSwgMHg4MiwgMHg0NSwgMHg4MywgMHg3MCwgMHhmOSwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHg0MywKKyAgMHg4NywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHhkMiwgMHgxOSwgMHg5MCwgMHg3ZiwgMHg5MiwgMHhlMCwgMHg0NCwgMHgwMiwKKyAgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZSwgMHhlMCwgMHhmZiwgMHhkMywgMHg5MiwgMHgxMCwgMHhlNCwgMHgzMywgMHhmZSwgMHhlZiwgMHg0ZSwgMHhmMH19LAorIHsweDBkODYsIDY0LCB7IDB4ZDIsIDB4ZTgsIDB4NDMsIDB4ZDgsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZGUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGYsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4YWIsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YTksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWEsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsCisgIDB4N2YsIDB4YWYsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWUsIDB4ZTAsIDB4NDQsIDB4MGQsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4ZDIsCisgIDB4MWEsIDB4MTIsIDB4MTIsIDB4NDUsIDB4YzIsIDB4MTEsIDB4ZTQsIDB4ZjUsIDB4MGIsIDB4ZjUsIDB4MTMsIDB4YzIsIDB4MTcsIDB4YzIsIDB4MTJ9fSwKKyB7MHgwZGM2LCA2NCwgeyAweDkwLCAweDdmLCAweGExLCAweDA0LCAweGYwLCAweDkwLCAweDdmLCAweGQ4LCAweGUwLCAweDY1LCAweDE3LCAweDYwLCAweDEwLCAweDMwLCAweDEyLCAweDA1LCAweGQyLAorICAweDFhLCAweDEyLCAweDAwLCAweDQ2LCAweDkwLCAweDdmLCAweGQ4LCAweGUwLCAweGY1LCAweDE3LCAweDgwLCAweDA4LCAweDMwLCAweDEyLCAweDA1LCAweGMyLAorICAweDFhLCAweDEyLCAweDAwLCAweDQ2LCAweDMwLCAweDExLCAweDA3LCAweGMyLCAweDExLCAweDEyLCAweDA5LCAweDIxLCAweDgwLCAweGQ2LCAweDMwLCAweDE4LAorICAweGQzLCAweGMyLCAweDE4LCAweDEyLCAweDEzLCAweDkzLCAweDgwLCAweGNjLCAweDIyLCAweDc4LCAweDdmLCAweGU0LCAweGY2LCAweGQ4LCAweGZkfX0sCisgezB4MGUwNiwgNjQsIHsgMHg3NSwgMHg4MSwgMHg0NywgMHgwMiwgMHgwZSwgMHg0NywgMHgwMiwgMHgwZCwgMHg2ZiwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwgMHg5MywgMHhhMywgMHg0MCwKKyAgMHgwMywgMHhmNiwgMHg4MCwgMHgwMSwgMHhmMiwgMHgwOCwgMHhkZiwgMHhmNCwgMHg4MCwgMHgyOSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHg1NCwgMHgwNywKKyAgMHgyNCwgMHgwYywgMHhjOCwgMHhjMywgMHgzMywgMHhjNCwgMHg1NCwgMHgwZiwgMHg0NCwgMHgyMCwgMHhjOCwgMHg4MywgMHg0MCwgMHgwNCwgMHhmNCwgMHg1NiwKKyAgMHg4MCwgMHgwMSwgMHg0NiwgMHhmNiwgMHhkZiwgMHhlNCwgMHg4MCwgMHgwYiwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MH19LAorIHsweDBlNDYsIDY0LCB7IDB4ODAsIDB4OTAsIDB4MTIsIDB4YWMsIDB4ZTQsIDB4N2UsIDB4MDEsIDB4OTMsIDB4NjAsIDB4YmMsIDB4YTMsIDB4ZmYsIDB4NTQsIDB4M2YsIDB4MzAsIDB4ZTUsIDB4MDksCisgIDB4NTQsIDB4MWYsIDB4ZmUsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NjAsIDB4MDEsIDB4MGUsIDB4Y2YsIDB4NTQsIDB4YzAsIDB4MjUsIDB4ZTAsIDB4NjAsIDB4YTgsCisgIDB4NDAsIDB4YjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZmEsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsCisgIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2EsIDB4ZjAsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2F9fSwKKyB7MHgwZTg2LCA2NCwgeyAweGRmLCAweGU5LCAweGRlLCAweGU3LCAweDgwLCAweGJlLCAweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGUwLCAweDIyLCAweDUwLCAweDAyLAorICAweGU3LCAweDIyLCAweGJiLCAweGZlLCAweDAyLCAweGUzLCAweDIyLCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGU0LCAweDkzLCAweDIyLCAweGJiLCAweDAxLAorICAweDBjLCAweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGUwLCAweDIyLCAweDUwLCAweDA2LCAweGU5LAorICAweDI1LCAweDgyLCAweGY4LCAweGU2LCAweDIyLCAweGJiLCAweGZlLCAweDA2LCAweGU5LCAweDI1LCAweDgyLCAweGY4LCAweGUyLCAweDIyLCAweGU1fX0sCisgezB4MGVjNiwgNjQsIHsgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMiwgMHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwKKyAgMHg4YSwgMHg4MywgMHhmMCwgMHgyMiwgMHg1MCwgMHgwMiwgMHhmNywgMHgyMiwgMHhiYiwgMHhmZSwgMHgwMSwgMHhmMywgMHgyMiwgMHhkMCwgMHg4MywgMHhkMCwKKyAgMHg4MiwgMHhmOCwgMHhlNCwgMHg5MywgMHg3MCwgMHgxMiwgMHg3NCwgMHgwMSwgMHg5MywgMHg3MCwgMHgwZCwgMHhhMywgMHhhMywgMHg5MywgMHhmOCwgMHg3NCwKKyAgMHgwMSwgMHg5MywgMHhmNSwgMHg4MiwgMHg4OCwgMHg4MywgMHhlNCwgMHg3MywgMHg3NCwgMHgwMiwgMHg5MywgMHg2OCwgMHg2MCwgMHhlZiwgMHhhM319LAorIHsweDBmMDYsIDY0LCB7IDB4YTMsIDB4YTMsIDB4ODAsIDB4ZGYsIDB4OGYsIDB4MTgsIDB4ZTQsIDB4ZjUsIDB4MTksIDB4NzUsIDB4MWEsIDB4ZmYsIDB4NzUsIDB4MWIsIDB4MTksIDB4NzUsIDB4MWMsCisgIDB4ODYsIDB4YWIsIDB4MWEsIDB4YWEsIDB4MWIsIDB4YTksIDB4MWMsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4MGUsIDB4YTUsIDB4YjQsIDB4MDMsIDB4MWQsCisgIDB4YWYsIDB4MTksIDB4MDUsIDB4MTksIDB4ZWYsIDB4YjUsIDB4MTgsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MGUsIDB4OGMsIDB4N2UsIDB4MDAsIDB4MjksIDB4ZmYsCisgIDB4ZWUsIDB4M2EsIDB4YTksIDB4MDcsIDB4NzUsIDB4MWEsIDB4ZmYsIDB4ZjUsIDB4MWIsIDB4ODksIDB4MWMsIDB4ODAsIDB4ZDQsIDB4N2IsIDB4MDB9fSwKKyB7MHgwZjQ2LCA2NCwgeyAweDdhLCAweDAwLCAweDc5LCAweDAwLCAweDIyLCAweDhmLCAweDFhLCAweDA1LCAweDBkLCAweGU1LCAweDBkLCAweGFlLCAweDBjLCAweDcwLCAweDAyLCAweDA1LCAweDBjLAorICAweDE0LCAweGY1LCAweDgyLCAweDhlLCAweDgzLCAweGU1LCAweDFhLCAweGYwLCAweDEyLCAweDAwLCAweDM2LCAweDA1LCAweDBkLCAweGU1LCAweDBkLCAweGFjLAorICAweDBjLCAweDcwLCAweDAyLCAweDA1LCAweDBjLCAweDE0LCAweGY1LCAweDgyLCAweDhjLCAweDgzLCAweGVmLCAweGYwLCAweDE1LCAweDA4LCAweGU1LCAweDA4LAorICAweDYwLCAweDBhLCAweDEyLCAweDEzLCAweDI3LCAweDhmLCAweDFhLCAweGVmLCAweDQyLCAweDM2LCAweDgwLCAweGNhLCAweDIyLCAweDhmLCAweDFhfX0sCisgezB4MGY4NiwgNjQsIHsgMHgwNSwgMHgwZCwgMHhlNSwgMHgwZCwgMHhhZSwgMHgwYywgMHg3MCwgMHgwMiwgMHgwNSwgMHgwYywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlNSwgMHgxYSwKKyAgMHhmMCwgMHgxMiwgMHgxMywgMHgzZiwgMHgwNSwgMHgwZCwgMHhlNSwgMHgwZCwgMHhhYywgMHgwYywgMHg3MCwgMHgwMiwgMHgwNSwgMHgwYywgMHgxNCwgMHhmNSwKKyAgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHgxNSwgMHgwOCwgMHhlNSwgMHgwOCwgMHg2MCwgMHgwYSwgMHgxMiwgMHgxMywgMHg3YiwgMHg4ZiwgMHgxYSwKKyAgMHhlZiwgMHg0MiwgMHgzNywgMHg4MCwgMHhjYSwgMHgyMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMH19LAorIHsweDBmYzYsIDY0LCB7IDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YzQsIDB4ZTQsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsCisgIDB4NzQsIDB4MDQsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsCisgIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4ZDIsCisgIDB4MTEsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDB9fSwKKyB7MHgxMDA2LCA2NCwgeyAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLAorICAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweGQyLCAweDE4LCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA4LAorICAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwfX0sCisgezB4MTA0NiwgNjQsIHsgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwKKyAgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywKKyAgMHhmMCwgMHhlNSwgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxM319LAorIHsweDEwODYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsCisgIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NDR9fSwKKyB7MHgxMGM2LCA2NCwgeyAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LAorICAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE2LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LAorICAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LAorICAweDBiLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBhLCAweGYwLCAweDkwfX0sCisgezB4MTEwNiwgNjQsIHsgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgwOCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwKKyAgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg5MH19LAorIHsweDExNDYsIDY0LCB7IDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDksIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsCisgIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2Z9fSwKKyB7MHgxMTg2LCA2NCwgeyAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBlLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLAorICAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLAorICAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE3LCAweGYwLCAweDkwfX0sCisgezB4MTFjNiwgNjQsIHsgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZCwgMHhmMCwgMHgyMiwgMHgxMiwKKyAgMHgxMywgMHgwZiwgMHg4ZiwgMHgxYSwgMHgxMiwgMHgxMywgMHgwZiwgMHg4ZiwgMHgxYiwgMHhlNSwgMHgxYSwgMHg2NSwgMHgxYiwgMHg2MCwgMHgxMiwgMHgxMiwKKyAgMHgxMywgMHgwZiwgMHg4ZiwgMHgxYSwgMHhlNSwgMHgxYSwgMHg2NSwgMHgxYiwgMHg2MCwgMHgwNywgMHgxMiwgMHgxMywgMHgwZiwgMHg4ZiwgMHgxYiwgMHg4MCwKKyAgMHhlOCwgMHhhZiwgMHgxYSwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MH19LAorIHsweDEyMDYsIDY0LCB7IDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGYsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsCisgIDB4NzQsIDB4MGQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MTIsIDB4MTMsIDB4NjMsIDB4OGYsIDB4MWEsIDB4MTIsIDB4MTMsCisgIDB4NjMsIDB4OGYsIDB4MWIsIDB4ZTUsIDB4MWEsIDB4NjUsIDB4MWIsIDB4NjAsIDB4MTIsIDB4MTIsIDB4MTMsIDB4NjMsIDB4OGYsIDB4MWEsIDB4ZTUsIDB4MWEsCisgIDB4NjUsIDB4MWIsIDB4NjAsIDB4MDcsIDB4MTIsIDB4MTMsIDB4NjMsIDB4OGYsIDB4MWIsIDB4ODAsIDB4ZTgsIDB4YWYsIDB4MWEsIDB4MjIsIDB4OTB9fSwKKyB7MHgxMjQ2LCA2NCwgeyAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweGUwLCAweDQ0LCAweDA4LCAweGYwLCAweDMwLCAweDFhLCAweDA0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLAorICAweDdmLCAweGY0LCAweDdlLCAweDAxLCAweDEyLCAweDEyLCAweGM4LCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGY3LCAweGYwLCAweGUwLCAweDQ0LAorICAweDA0LCAweGYwLCAweDIyLCAweGFlLCAweDA3LCAweGU0LCAweGZmLCAweGU1LCAweDNlLCAweDU0LCAweDdmLCAweGZkLCAweDEyLCAweDExLCAweGIxLCAweDkwLAorICAweDdmLCAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVlLCAweGYwLCAweGU0LCAweGU1LCAweDNlLCAweDQ0LCAweDgwfX0sCisgezB4MTI4NiwgNjQsIHsgMHhmZCwgMHgxMiwgMHgxMSwgMHhiMSwgMHgyMiwgMHhhZSwgMHgwNywgMHhlNCwgMHhmZiwgMHhlNSwgMHgzZiwgMHg1NCwgMHg3ZiwgMHhmZCwgMHgxMiwgMHgxMSwgMHhmYiwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZSwgMHhmMCwgMHhlNCwgMHhlNSwgMHgzZiwgMHg0NCwgMHg4MCwKKyAgMHhmZCwgMHgxMiwgMHgxMSwgMHhmYiwgMHgyMiwgMHgwNSwgMHgwZSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgxNCwgMHgwMywgMHgwMCwKKyAgMHgwMCwgMHhjMSwgMHgxMSwgMHhjMSwgMHgxOCwgMHhjMSwgMHg5NSwgMHhjMSwgMHgxMCwgMHhjMSwgMHgxNiwgMHgwMSwgMHgwYSwgMHgwMCwgMHhjMX19LAorIHsweDEyYzYsIDY0LCB7IDB4OWIsIDB4MDAsIDB4OGUsIDB4MTgsIDB4OGYsIDB4MTksIDB4ZTUsIDB4MTksIDB4MTUsIDB4MTksIDB4YWUsIDB4MTgsIDB4NzAsIDB4MDIsIDB4MTUsIDB4MTgsIDB4NGUsCisgIDB4NjAsIDB4MDUsIDB4MTIsIDB4MGQsIDB4NGUsIDB4ODAsIDB4ZWUsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsCisgIDB4NTMsIDB4ZDgsIDB4ZWYsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MGYsIDB4ZTcsIDB4MDAsIDB4MDIsIDB4MTN9fSwKKyB7MHgxMzA2LCA2NCwgeyAweDA0LCAweDAwLCAweDAyLCAweDBmLCAweGJkLCAweDAwLCAweDAyLCAweDEwLCAweDBlLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLAorICAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE1LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LAorICAweDE2LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDA4LCAweGYwLCAweDkwfX0sCisgezB4MTM0NiwgNjQsIHsgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwKKyAgMHgwYiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwZCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZn19LAorIHsweDEzODYsIDY0LCB7IDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGUsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4MTIsIDB4MDAsIDB4MDMsIDB4MTIsCisgIDB4MGQsIDB4NWYsIDB4MTIsIDB4MGIsIDB4NDYsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxM2M2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTQwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNDg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTRjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNTQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTU4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNjA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTY0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE2ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNmM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTcwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNzg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTdjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxODQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTg4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZmYsIDB4MDB9fSwKKyB7MHgxOTA2LCA2NCwgeyAweDAwLCAweDQwLCAweGNkLCAweDA2LCAweDEwLCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAyLCAweDAwLCAweDAyLCAweDA5LCAweDAyLCAweDc0LCAweDAwLCAweDAxLAorICAweDAxLCAweDAwLCAweGEwLCAweDMyLCAweDA5LCAweDA0LCAweDAwLCAweDAwLCAweDBlLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAxLAorICAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAyLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAzLCAweDAyLCAweDQwLAorICAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA0LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA1LCAweDAyLCAweDQwLCAweDAwfX0sCisgezB4MTk0NiwgNjQsIHsgMHgwMCwgMHgwNywgMHgwNSwgMHgwNiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwKKyAgMHg4MSwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHg4MywgMHgwMiwKKyAgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NSwgMHgwMiwgMHg0MCwgMHgwMCwKKyAgMHgwMSwgMHgwNywgMHgwNSwgMHg4NiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMX19LAorIHsweDE5ODYsIDY0LCB7IDB4MDQsIDB4MDMsIDB4MDksIDB4MDQsIDB4NDgsIDB4MDMsIDB4NGIsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NjEsCisgIDB4MDAsIDB4NmUsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjksIDB4MDAsIDB4NzYsCisgIDB4MDAsIDB4NjksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NjksIDB4MDAsIDB4NmYsIDB4MDAsIDB4NmUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NjYsCisgIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NzksIDB4MDB9fSwKKyB7MHgxOWM2LCA2NCwgeyAweDczLCAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDYzLCAweDAwLCAweDJlLCAweDAwLCAweDM2LCAweDAzLCAweDRiLCAweDAwLCAweDY1LAorICAweDAwLCAweDc5LCAweDAwLCAweDczLCAweDAwLCAweDcwLCAweDAwLCAweDYxLCAweDAwLCAweDZlLCAweDAwLCAweDIwLCAweDAwLCAweDU1LCAweDAwLCAweDUzLAorICAweDAwLCAweDQyLCAweDAwLCAweDIwLCAweDAwLCAweDUzLCAweDAwLCAweDY1LCAweDAwLCAweDcyLCAweDAwLCAweDY5LCAweDAwLCAweDYxLCAweDAwLCAweDZjLAorICAweDAwLCAweDIwLCAweDAwLCAweDQxLCAweDAwLCAweDY0LCAweDAwLCAweDYxLCAweDAwLCAweDcwLCAweDAwLCAweDc0LCAweDAwLCAweDY1LCAweDAwfX0sCisgezB4MWEwNiwgIDQsIHsgMHg3MiwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweGZmZmYsICAwLCAgezB4MDB9fQorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTI4eGFfZncuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTI4eGFfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjU2Njc4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjh4YV9mdy5oCkBAIC0wLDAgKzEsNDQ5IEBACisvKiBrZXlzcGFuX3VzYTI4eGFfZncuaAorCisJVGhlIGZpcm13YXJlIGNvbnRhaW5lZCBoZXJlaW4gYXMga2V5c3Bhbl91c2EyOHhhLmggaXMKKworCQlDb3B5cmlnaHQgKEMpIDE5OTktMjAwMQorCQlLZXlzcGFuLCBBIGRpdmlzaW9uIG9mIElubm9TeXMgSW5jb3Jwb3JhdGVkICgiS2V5c3BhbiIpCisJCQorCWFzIGFuIHVucHVibGlzaGVkIHdvcmsuIFRoaXMgbm90aWNlIGRvZXMgbm90IGltcGx5IHVucmVzdHJpY3RlZCBvcgorCXB1YmxpYyBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIGZyb20gd2hpY2ggdGhpcyBmaXJtd2FyZSBpbWFnZSBpcworCWRlcml2ZWQuICBFeGNlcHQgYXMgbm90ZWQgYmVsb3cgdGhpcyBmaXJtd2FyZSBpbWFnZSBtYXkgbm90IGJlIAorCXJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQgCisJS2V5c3BhbidzIHByaW9yIHdyaXR0ZW4gY29uc2VudC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKwlQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgCisJaW1hZ2UgYXMgcGFydCBvZiBhIExpbnV4IG9yIG90aGVyIE9wZW4gU291cmNlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIAorCWluIHRleHQgb3IgYmluYXJ5IGZvcm0gYXMgcmVxdWlyZWQuIAorCisJVGhpcyBmaXJtd2FyZSBtYXkgbm90IGJlIG1vZGlmaWVkIGFuZCBtYXkgb25seSBiZSB1c2VkIHdpdGggIAorCUtleXNwYW4gaGFyZHdhcmUuICBEaXN0cmlidXRpb24gYW5kL29yIE1vZGlmaWNhdGlvbiBvZiB0aGUgCisJa2V5c3Bhbi5jIGRyaXZlciB3aGljaCBpbmNsdWRlcyB0aGlzIGZpcm13YXJlLCBpbiB3aG9sZSBvciBpbiAKKwlwYXJ0LCByZXF1aXJlcyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3RhdGVtZW50LiIKKworCisKKyovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCBrZXlzcGFuX3VzYTI4eGFfZmlybXdhcmVbXSA9IHsKKyB7MHgwMDMzLCAgMywgeyAweDAyLCAweDEyLCAweGY5fX0sCisgezB4MDAwMywgMTYsIHsgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5MywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHg3NCwgMHgzMCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhmMH19LAorIHsweDAwMTMsIDE2LCB7IDB4OTAsIDB4N2YsIDB4OTQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWQsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTcsIDB4ZjAsIDB4OTB9fSwKKyB7MHgwMDIzLCAxNSwgeyAweDdmLCAweDk1LCAweGYwLCAweDkwLCAweDdmLCAweDllLCAweDc0LCAweDA3LCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk4LCAweGYwLCAweDIyfX0sCisgezB4MDA0NiwgMTYsIHsgMHgzMCwgMHgwOSwgMHgxOCwgMHgxMiwgMHgxMywgMHgyNywgMHhlZiwgMHhjMywgMHg5NSwgMHgzYywgMHg0MCwgMHgwMywgMHgwMiwgMHgwMCwgMHhkOCwgMHg5MH19LAorIHsweDAwNTYsIDE2LCB7IDB4N2YsIDB4YmYsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4YzIsIDB4MDksIDB4YzIsIDB4MDAsIDB4ODAsIDB4NzcsIDB4MzAsIDB4MDMsIDB4M2IsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwMDY2LCAxNiwgeyAweGM2LCAweGUwLCAweDIwLCAweGUxLCAweDZkLCAweDEyLCAweDEzLCAweDI3LCAweGVmLCAweGMzLCAweDk0LCAweDQwLCAweDUwLCAweDY0LCAweDkwLCAweDdlfX0sCisgezB4MDA3NiwgMTYsIHsgMHg0MCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwOSwgMHg5MCwgMHg3ZiwgMHhjNywgMHhlMCwgMHgxNCwgMHhmNSwgMHgxOSwgMHgyMCwgMHgwMCwgMHgxMSwgMHg2MH19LAorIHsweDAwODYsIDE2LCB7IDB4MGYsIDB4ZjUsIDB4MDgsIDB4N2UsIDB4N2UsIDB4N2YsIDB4NDEsIDB4NzUsIDB4MGMsIDB4N2UsIDB4NzUsIDB4MGQsIDB4NDEsIDB4MTIsIDB4MGMsIDB4Yzh9fSwKKyB7MHgwMDk2LCAxNiwgeyAweGMyLCAweDAzLCAweGU0LCAweDkwLCAweDdmLCAweGM3LCAweGYwLCAweDgwLCAweDM5LCAweDkwLCAweDdmLCAweGM4LCAweGUwLCAweDIwLCAweGUxLCAweDMyfX0sCisgezB4MDBhNiwgMTYsIHsgMHgxMiwgMHgxMywgMHgyNywgMHhlZiwgMHhjMywgMHg5NCwgMHg0MCwgMHg1MCwgMHgyOSwgMHg5MCwgMHg3ZCwgMHhjMCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwOX19LAorIHsweDAwYjYsIDE2LCB7IDB4OTAsIDB4N2YsIDB4YzksIDB4ZTAsIDB4MTQsIDB4ZjUsIDB4MTksIDB4MjAsIDB4MDAsIDB4MTEsIDB4NjAsIDB4MGYsIDB4ZjUsIDB4MDgsIDB4N2UsIDB4N2R9fSwKKyB7MHgwMGM2LCAxNiwgeyAweDdmLCAweGMxLCAweDc1LCAweDBjLCAweDdkLCAweDc1LCAweDBkLCAweGMxLCAweDEyLCAweDBjLCAweGM4LCAweGQyLCAweDAzLCAweGU0LCAweDkwLCAweDdmfX0sCisgezB4MDBkNiwgMTYsIHsgMHhjOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwMSwgMHg2MCwgMHgxMiwgMHgxMSwgMHhlNCwgMHg4Zn19LAorIHsweDAwZTYsIDE2LCB7IDB4MTksIDB4MTIsIDB4MTMsIDB4MzMsIDB4OGYsIDB4MzYsIDB4ZTUsIDB4MTksIDB4YzMsIDB4OTUsIDB4M2EsIDB4NTAsIDB4MGYsIDB4MTIsIDB4MTMsIDB4MGZ9fSwKKyB7MHgwMGY2LCAxNiwgeyAweGVmLCAweDMwLCAweGUwLCAweDA4LCAweGU1LCAweDM2LCAweDIwLCAweGU3LCAweDAzLCAweDMwLCAweDBiLCAweDVlLCAweGMyLCAweDBiLCAweGU1LCAweDE5fX0sCisgezB4MDAzNiwgMTIsIHsgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMn19LAorIHsweDAwNDMsICAzLCB7IDB4MDIsIDB4MTMsIDB4MDB9fSwKKyB7MHgwMDAwLCAgMywgeyAweDAyLCAweDBlLCAweDBlfX0sCisgezB4MDEwNiwgNjQsIHsgMHg2MCwgMHg1OCwgMHhiNCwgMHg4MCwgMHgwMywgMHg0MywgMHgzNiwgMHgwMiwgMHhlNSwgMHgzNiwgMHgzMCwgMHhlNywgMHgyNiwgMHhlNSwgMHgxOSwgMHhkMywgMHg5NCwKKyAgMHgyMCwgMHg0MCwgMHgwMywgMHg3NSwgMHgxOSwgMHgyMCwgMHg4NSwgMHgxOSwgMHgwOCwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg4MCwgMHg3NSwgMHgwYywgMHg3ZSwKKyAgMHg3NSwgMHgwZCwgMHg4MCwgMHhhZiwgMHgzNiwgMHgxMiwgMHgwZiwgMHg1OSwgMHhlNSwgMHgxOSwgMHgyNSwgMHhlMCwgMHg5MCwgMHg3ZiwgMHhiNywgMHhmMCwKKyAgMHg4MCwgMHgyNywgMHhlNSwgMHgxOSwgMHhkMywgMHg5NCwgMHgzZiwgMHg0MCwgMHgwMywgMHg3NSwgMHgxOSwgMHgzZiwgMHg4NSwgMHgxOSwgMHgwOH19LAorIHsweDAxNDYsIDY0LCB7IDB4OTAsIDB4N2UsIDB4ODAsIDB4ZTUsIDB4MzYsIDB4ZjAsIDB4N2UsIDB4N2UsIDB4N2YsIDB4ODEsIDB4NzUsIDB4MGMsIDB4N2UsIDB4NzUsIDB4MGQsIDB4ODEsIDB4MTIsCisgIDB4MGMsIDB4ZWQsIDB4ZTUsIDB4MTksIDB4MDQsIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4Y2UsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDYsCisgIDB4MjAsIDB4MDUsIDB4MDMsIDB4MDIsIDB4MDMsIDB4YzEsIDB4YzIsIDB4MDUsIDB4ZTQsIDB4ZjUsIDB4MTgsIDB4NzQsIDB4NDAsIDB4MjUsIDB4MTgsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2MsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTgsIDB4N2MsIDB4MDAsIDB4N2IsIDB4MDEsIDB4N2F9fSwKKyB7MHgwMTg2LCA2NCwgeyAweDdlLCAweDc5LCAweDAwLCAweDI0LCAweDAwLCAweGY5LCAweGVjLCAweDM0LCAweDdlLCAweGZhLCAweGVmLCAweDEyLCAweDBlLCAweGUwLCAweDA1LCAweDE4LCAweGU1LAorICAweDE4LCAweGI0LCAweDIwLCAweGQ3LCAweDkwLCAweDdlLCAweDAwLCAweGUwLCAweDYwLCAweDY4LCAweDkwLCAweDdlLCAweDAzLCAweGUwLCAweDYwLCAweDI0LAorICAweDdmLCAweDAxLCAweGU0LCAweGZkLCAweDEyLCAweDExLCAweGJmLCAweDdmLCAweDAzLCAweDdkLCAweGNkLCAweDEyLCAweDExLCAweGJmLCAweDQzLCAweDQ2LAorICAweDgwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ2LCAweGYwLCAweGU0LCAweDkwfX0sCisgezB4MDFjNiwgNjQsIHsgMHg3ZSwgMHgxMywgMHhmMCwgMHg4MCwgMHgzMCwgMHg5MCwgMHg3ZSwgMHgwMSwgMHhlMCwgMHhmZiwgMHgxMiwgMHgxMCwgMHg0MywgMHg5MCwgMHg3ZSwgMHgwMiwgMHhlMCwKKyAgMHhmZiwgMHgxMiwgMHgxMCwgMHg2OSwgMHg3ZiwgMHgwMSwgMHg5MCwgMHg3ZSwgMHgxMSwgMHhlMCwgMHhmZCwgMHgxMiwgMHgxMSwgMHhiZiwgMHg3ZiwgMHgwMywKKyAgMHg3ZCwgMHgwNywgMHgxMiwgMHgxMSwgMHhiZiwgMHg0MywgMHg0NiwgMHg4MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhlNSwgMHg0NiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHhlNSwgMHg0MCwgMHg0NCwgMHgwNiwgMHg5MH19LAorIHsweDAyMDYsIDY0LCB7IDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MDMsIDB4ZTAsIDB4NzAsIDB4MDYsIDB4OTAsIDB4N2UsIDB4MTMsIDB4ZTAsIDB4NzAsIDB4MDgsIDB4ZTQsIDB4OTAsCisgIDB4N2UsIDB4MTMsIDB4ZjAsIDB4NzUsIDB4MjUsIDB4ZmYsIDB4OTAsIDB4N2UsIDB4MDUsIDB4ZTAsIDB4NjAsIDB4MTIsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4M2YsCisgIDB4ZjUsIDB4NDQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDQsIDB4ZjAsIDB4OTAsIDB4N2UsCisgIDB4MDcsIDB4ZTAsIDB4NjAsIDB4MmIsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDIsIDB4ODAsIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDJ9fSwKKyB7MHgwMjQ2LCA2NCwgeyAweDdmLCAweDUzLCAweDQyLCAweGZjLCAweDkwLCAweDdlLCAweDA5LCAweGUwLCAweDYwLCAweDExLCAweDQzLCAweDQyLCAweDAyLCAweGEzLCAweGUwLCAweGZmLCAweDEyLAorICAweDEwLCAweGI1LCAweDkwLCAweDdlLCAweDBiLCAweGUwLCAweGZmLCAweDEyLCAweDEwLCAweGRiLCAweGFmLCAweDQyLCAweDEyLCAweDEwLCAweDhmLCAweDkwLAorICAweDdlLCAweDAzLCAweGUwLCAweDYwLCAweDA4LCAweDUzLCAweDQyLCAweDdmLCAweGFmLCAweDQyLCAweDEyLCAweDEwLCAweDhmLCAweDkwLCAweDdlLCAweDBjLAorICAweGUwLCAweDYwLCAweDE4LCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQ2LCAweDAyLCAweDgwLCAweDAzLCAweDUzLCAweDQ2LCAweGZkfX0sCisgezB4MDI4NiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NiwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgwZSwgMHhlMCwgMHg2MCwKKyAgMHgxOCwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0NiwgMHgwMSwgMHg4MCwgMHgwMywgMHg1MywgMHg0NiwgMHhmZSwgMHg5MCwgMHg3ZiwgMHg5OCwKKyAgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NiwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgxMiwgMHhlMCwgMHhmNSwgMHgzYSwgMHhhMywKKyAgMHhlMCwgMHgxMywgMHg5MiwgMHgwZCwgMHhhMywgMHhlMCwgMHhmNSwgMHgzYywgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0NiwgMHgxMH19LAorIHsweDAyYzYsIDY0LCB7IDB4ODAsIDB4MDMsIDB4NTMsIDB4NDYsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4ZjAsCisgIDB4OTAsIDB4N2UsIDB4MTYsIDB4ZTAsIDB4NjAsIDB4MzIsIDB4NTMsIDB4NDQsIDB4YmYsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsCisgIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4MTIsIDB4MTIsIDB4ZWQsCisgIDB4ZWYsIDB4NTQsIDB4ZmUsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4NTMsIDB4M2UsIDB4ZmQsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2UsIDB4MTJ9fSwKKyB7MHgwMzA2LCA2NCwgeyAweDExLCAweGJmLCAweGU0LCAweGY1LCAweDJhLCAweGY1LCAweDI5LCAweGQyLCAweDA3LCAweDkwLCAweDdlLCAweDE3LCAweGUwLCAweDYwLCAweDBmLCAweDQzLCAweDNlLAorICAweDAyLCAweGU0LCAweGZmLCAweGFkLCAweDNlLCAweDEyLCAweDExLCAweGJmLCAweDc1LCAweDI5LCAweDAxLCAweGQyLCAweDA3LCAweDkwLCAweDdlLCAweDE4LAorICAweGUwLCAweDYwLCAweDEwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweGU1LCAweDQwLCAweDQ0LCAweDA0LCAweDkwLCAweGMwLCAweDAwLAorICAweGYwLCAweGQyLCAweDAwLCAweDkwLCAweDdlLCAweDE5LCAweGUwLCAweDYwLCAweDExLCAweDQzLCAweDQ0LCAweDQwLCAweDkwLCAweDdmLCAweDk4fX0sCisgezB4MDM0NiwgNjQsIHsgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgxYSwgMHhlMCwgMHg2MCwgMHgwZiwKKyAgMHg1MywgMHgzZSwgMHhmZSwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZSwgMHgxMiwgMHgxMSwgMHhiZiwgMHg3NSwgMHgyYiwgMHgwMSwgMHhkMiwgMHgwNywgMHg5MCwKKyAgMHg3ZSwgMHgxYiwgMHhlMCwgMHg2MCwgMHgwZiwgMHg0MywgMHgzZSwgMHgwMSwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZSwgMHgxMiwgMHgxMSwgMHhiZiwgMHhlNCwKKyAgMHhmNSwgMHgyYiwgMHhkMiwgMHgwNywgMHg5MCwgMHg3ZSwgMHgxYywgMHhlMCwgMHg2MCwgMHgwZSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMn19LAorIHsweDAzODYsIDY0LCB7IDB4ZjAsIDB4ZTUsIDB4NDAsIDB4NDQsIDB4MDIsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MWQsIDB4ZTAsIDB4NjAsIDB4MDIsIDB4ZDIsIDB4MGIsCisgIDB4OTAsIDB4N2UsIDB4MWUsIDB4ZTAsIDB4NjAsIDB4MDgsIDB4NzUsIDB4MmMsIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4MzgsIDB4ZDIsIDB4MDcsIDB4OTAsIDB4N2UsCisgIDB4MWYsIDB4ZTAsIDB4NjAsIDB4MTEsIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4NzQsIDB4MzEsIDB4ZjAsIDB4NzQsIDB4MTUsIDB4ZjAsCisgIDB4NzQsIDB4MzUsIDB4ZjAsIDB4ZDIsIDB4MDMsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4Y2YsIDB4ZjAsIDB4MzAsIDB4MWEsIDB4NTIsIDB4ZTUsIDB4Mzh9fSwKKyB7MHgwM2M2LCA2NCwgeyAweDYwLCAweDAyLCAweDE1LCAweDM4LCAweDIwLCAweDEzLCAweDQ5LCAweGU1LCAweDEzLCAweGQzLCAweDk0LCAweDAwLCAweDQwLCAweDA0LCAweDE1LCAweDEzLCAweDgwLAorICAweDNlLCAweDc1LCAweDEzLCAweDBhLCAweDMwLCAweDFiLCAweDAyLCAweGQyLCAweDEzLCAweDEyLCAweDEyLCAweGVkLCAweGVmLCAweDU0LCAweDAxLCAweGY1LAorICAweDE5LCAweDY1LCAweDJhLCAweDYwLCAweDA1LCAweDg1LCAweDE5LCAweDJhLCAweGQyLCAweDA3LCAweDEyLCAweDEzLCAweDNmLCAweGVmLCAweDU0LCAweDgwLAorICAweGY1LCAweDE5LCAweDY1LCAweDI2LCAweDYwLCAweDA1LCAweDg1LCAweDE5LCAweDI2LCAweGQyLCAweDA3LCAweDMwLCAweDBkLCAweDExLCAweDEyfX0sCisgezB4MDQwNiwgNjQsIHsgMHgxMywgMHgzZiwgMHhlZiwgMHg1NCwgMHgxMCwgMHhmNSwgMHgxOSwgMHg2NSwgMHgyNSwgMHg2MCwgMHgwNSwgMHg4NSwgMHgxOSwgMHgyNSwgMHhkMiwgMHgwNywgMHgyMCwKKyAgMHgxYiwgMHgwMywgMHgwMiwgMHgwNywgMHhlYywgMHgzMCwgMHgwYSwgMHgxOCwgMHgxMiwgMHgxMywgMHg3YiwgMHhlZiwgMHhjMywgMHg5NSwgMHgzZCwgMHg0MCwKKyAgMHgwMywgMHgwMiwgMHgwNCwgMHhhZSwgMHg5MCwgMHg3ZiwgMHhjMSwgMHg3NCwgMHgwMSwgMHhmMCwgMHhjMiwgMHgwYSwgMHhjMiwgMHgwMCwgMHg4MCwgMHg3NywKKyAgMHgzMCwgMHgwNCwgMHgzYiwgMHg5MCwgMHg3ZiwgMHhjYSwgMHhlMCwgMHgyMCwgMHhlMSwgMHg2ZCwgMHgxMiwgMHgxMywgMHg3YiwgMHhlZiwgMHhjM319LAorIHsweDA0NDYsIDY0LCB7IDB4OTQsIDB4NDAsIDB4NTAsIDB4NjQsIDB4OTAsIDB4N2QsIDB4NDAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGEsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZTAsIDB4MTQsIDB4ZjUsCisgIDB4MTksIDB4MjAsIDB4MDAsIDB4MTEsIDB4NjAsIDB4MGYsIDB4ZjUsIDB4MDgsIDB4N2UsIDB4N2QsIDB4N2YsIDB4NDEsIDB4NzUsIDB4MGMsIDB4N2QsIDB4NzUsCisgIDB4MGQsIDB4NDEsIDB4MTIsIDB4MGQsIDB4MTIsIDB4YzIsIDB4MDQsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZjAsIDB4ODAsIDB4MzksIDB4OTAsIDB4N2YsCisgIDB4Y2MsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MzIsIDB4MTIsIDB4MTMsIDB4N2IsIDB4ZWYsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTAsIDB4MjksIDB4OTB9fSwKKyB7MHgwNDg2LCA2NCwgeyAweDdjLCAweGMwLCAweGUwLCAweDEzLCAweDkyLCAweDBhLCAweDkwLCAweDdmLCAweGNkLCAweGUwLCAweDE0LCAweGY1LCAweDE5LCAweDIwLCAweDAwLCAweDExLCAweDYwLAorICAweDBmLCAweGY1LCAweDA4LCAweDdlLCAweDdjLCAweDdmLCAweGMxLCAweDc1LCAweDBjLCAweDdjLCAweDc1LCAweDBkLCAweGMxLCAweDEyLCAweDBkLCAweDEyLAorICAweGQyLCAweDA0LCAweGU0LCAweDkwLCAweDdmLCAweGNkLCAweGYwLCAweDkwLCAweDdmLCAweGJhLCAweGUwLCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDA1LAorICAweDM2LCAweDEyLCAweDEyLCAweDJlLCAweDhmLCAweDE5LCAweDEyLCAweDEzLCAweDg3LCAweDhmLCAweDM3LCAweGU1LCAweDE5LCAweGMzLCAweDk1fX0sCisgezB4MDRjNiwgNjQsIHsgMHgzYiwgMHg1MCwgMHgwZiwgMHgxMiwgMHgxMywgMHg2MywgMHhlZiwgMHgzMCwgMHhlMCwgMHgwOCwgMHhlNSwgMHgzNywgMHgyMCwgMHhlNywgMHgwMywgMHgzMCwgMHgwYywKKyAgMHg1ZSwgMHhjMiwgMHgwYywgMHhlNSwgMHgxOSwgMHg2MCwgMHg1OCwgMHhiNCwgMHg4MCwgMHgwMywgMHg0MywgMHgzNywgMHgwMiwgMHhlNSwgMHgzNywgMHgzMCwKKyAgMHhlNywgMHgyNiwgMHhlNSwgMHgxOSwgMHhkMywgMHg5NCwgMHgyMCwgMHg0MCwgMHgwMywgMHg3NSwgMHgxOSwgMHgyMCwgMHg4NSwgMHgxOSwgMHgwOCwgMHg3ZSwKKyAgMHg3ZCwgMHg3ZiwgMHg4MCwgMHg3NSwgMHgwYywgMHg3ZCwgMHg3NSwgMHgwZCwgMHg4MCwgMHhhZiwgMHgzNywgMHgxMiwgMHgwZiwgMHg5MiwgMHhlNX19LAorIHsweDA1MDYsIDY0LCB7IDB4MTksIDB4MjUsIDB4ZTAsIDB4OTAsIDB4N2YsIDB4YmIsIDB4ZjAsIDB4ODAsIDB4MjcsIDB4ZTUsIDB4MTksIDB4ZDMsIDB4OTQsIDB4M2YsIDB4NDAsIDB4MDMsIDB4NzUsCisgIDB4MTksIDB4M2YsIDB4ODUsIDB4MTksIDB4MDgsIDB4OTAsIDB4N2QsIDB4ODAsIDB4ZTUsIDB4MzcsIDB4ZjAsIDB4N2UsIDB4N2QsIDB4N2YsIDB4ODEsIDB4NzUsCisgIDB4MGMsIDB4N2QsIDB4NzUsIDB4MGQsIDB4ODEsIDB4MTIsIDB4MGQsIDB4MzcsIDB4ZTUsIDB4MTksIDB4MDQsIDB4OTAsIDB4N2YsIDB4YmIsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4ZDAsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDYsIDB4MjAsIDB4MDYsIDB4MDMsIDB4MDIsIDB4MDcsIDB4OTcsIDB4YzIsIDB4MDYsIDB4ZTR9fSwKKyB7MHgwNTQ2LCA2NCwgeyAweGY1LCAweDE4LCAweDc0LCAweGMwLCAweDI1LCAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDE4LAorICAweDdjLCAweDAwLCAweDdiLCAweDAxLCAweDdhLCAweDdlLCAweDc5LCAweDIwLCAweDI0LCAweDIwLCAweGY5LCAweGVjLCAweDM0LCAweDdlLCAweGZhLCAweGVmLAorICAweDEyLCAweDBlLCAweGUwLCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDIwLCAweGQ3LCAweDkwLCAweDdlLCAweDIwLCAweGUwLCAweDYwLCAweDY4LAorICAweDkwLCAweDdlLCAweDIzLCAweGUwLCAweDYwLCAweDI0LCAweDdmLCAweDAxLCAweGU0LCAweGZkLCAweDEyLCAweDEyLCAweDA5LCAweDdmLCAweDAzfX0sCisgezB4MDU4NiwgNjQsIHsgMHg3ZCwgMHhjZCwgMHgxMiwgMHgxMiwgMHgwOSwgMHg0MywgMHg0NywgMHg4MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHhlNSwgMHg0NywgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZSwgMHgzMywgMHhmMCwgMHg4MCwgMHgzMCwgMHg5MCwgMHg3ZSwgMHgyMSwgMHhlMCwgMHhmZiwgMHgxMiwKKyAgMHgxMSwgMHgyNywgMHg5MCwgMHg3ZSwgMHgyMiwgMHhlMCwgMHhmZiwgMHgxMiwgMHgxMSwgMHg0ZCwgMHg3ZiwgMHgwMSwgMHg5MCwgMHg3ZSwgMHgzMSwgMHhlMCwKKyAgMHhmZCwgMHgxMiwgMHgxMiwgMHgwOSwgMHg3ZiwgMHgwMywgMHg3ZCwgMHgwNywgMHgxMiwgMHgxMiwgMHgwOSwgMHg0MywgMHg0NywgMHg4MCwgMHg5MH19LAorIHsweDA1YzYsIDY0LCB7IDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDcsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjAsCisgIDB4ZTUsIDB4NDEsIDB4NDQsIDB4MDYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MjMsIDB4ZTAsIDB4NzAsIDB4MDYsIDB4OTAsIDB4N2UsCisgIDB4MzMsIDB4ZTAsIDB4NzAsIDB4MDgsIDB4ZTQsIDB4OTAsIDB4N2UsIDB4MzMsIDB4ZjAsIDB4NzUsIDB4MmUsIDB4ZmYsIDB4OTAsIDB4N2UsIDB4MjUsIDB4ZTAsCisgIDB4NjAsIDB4MTIsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4M2YsIDB4ZjUsIDB4NDUsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4OTB9fSwKKyB7MHgwNjA2LCA2NCwgeyAweGMwLCAweDAwLCAweGU1LCAweDQ1LCAweGYwLCAweDkwLCAweDdlLCAweDI3LCAweGUwLCAweDYwLCAweDJiLCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQzLAorICAweDgwLCAweDgwLCAweDAzLCAweDUzLCAweDQzLCAweDdmLCAweDUzLCAweDQzLCAweGZjLCAweDkwLCAweDdlLCAweDI5LCAweGUwLCAweDYwLCAweDExLCAweDQzLAorICAweDQzLCAweDAyLCAweGEzLCAweGUwLCAweGZmLCAweDEyLCAweDExLCAweDczLCAweDkwLCAweDdlLCAweDJiLCAweGUwLCAweGZmLCAweDEyLCAweDExLCAweDk5LAorICAweGFmLCAweDQzLCAweDEyLCAweDExLCAweDAxLCAweDkwLCAweDdlLCAweDIzLCAweGUwLCAweDYwLCAweDA4LCAweDUzLCAweDQzLCAweDdmLCAweGFmfX0sCisgezB4MDY0NiwgNjQsIHsgMHg0MywgMHgxMiwgMHgxMSwgMHgwMSwgMHg5MCwgMHg3ZSwgMHgyYywgMHhlMCwgMHg2MCwgMHgxOCwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0NywgMHgwMiwKKyAgMHg4MCwgMHgwMywgMHg1MywgMHg0NywgMHhmZCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NywKKyAgMHhmMCwgMHg5MCwgMHg3ZSwgMHgyZSwgMHhlMCwgMHg2MCwgMHgxOCwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0NywgMHgwMSwgMHg4MCwgMHgwMywKKyAgMHg1MywgMHg0NywgMHhmZSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NywgMHhmMH19LAorIHsweDA2ODYsIDY0LCB7IDB4OTAsIDB4N2UsIDB4MzIsIDB4ZTAsIDB4ZjUsIDB4M2IsIDB4YTMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGUsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4M2QsIDB4YTMsIDB4ZTAsCisgIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDcsIDB4MTAsIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDcsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsCisgIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDcsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MzYsIDB4ZTAsIDB4NjAsIDB4MzIsIDB4NTMsIDB4NDUsIDB4YmYsIDB4OTAsCisgIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwNmM2LCA2NCwgeyAweDk4LCAweDc0LCAweDA5LCAweGYwLCAweDEyLCAweDEzLCAweDU3LCAweGVmLCAweDU0LCAweGZlLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDUzLCAweDNmLCAweGZkLAorICAweGU0LCAweGZmLCAweGFkLCAweDNmLCAweDEyLCAweDEyLCAweDA5LCAweGU0LCAweGY1LCAweDMzLCAweGY1LCAweDMyLCAweGQyLCAweDA4LCAweDkwLCAweDdlLAorICAweDM3LCAweGUwLCAweDYwLCAweDBmLCAweDQzLCAweDNmLCAweDAyLCAweGU0LCAweGZmLCAweGFkLCAweDNmLCAweDEyLCAweDEyLCAweDA5LCAweDc1LCAweDMyLAorICAweDAxLCAweGQyLCAweDA4LCAweDkwLCAweDdlLCAweDM4LCAweGUwLCAweDYwLCAweDEwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBhLCAweGYwfX0sCisgezB4MDcwNiwgNjQsIHsgMHhlNSwgMHg0MSwgMHg0NCwgMHgwNCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHhkMiwgMHgwMCwgMHg5MCwgMHg3ZSwgMHgzOSwgMHhlMCwgMHg2MCwgMHgxMSwgMHg0MywKKyAgMHg0NSwgMHg0MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwKKyAgMHg5MCwgMHg3ZSwgMHgzYSwgMHhlMCwgMHg2MCwgMHgwZiwgMHg1MywgMHgzZiwgMHhmZSwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZiwgMHgxMiwgMHgxMiwgMHgwOSwKKyAgMHg3NSwgMHgzNCwgMHgwMSwgMHhkMiwgMHgwOCwgMHg5MCwgMHg3ZSwgMHgzYiwgMHhlMCwgMHg2MCwgMHgwZiwgMHg0MywgMHgzZiwgMHgwMSwgMHhlNH19LAorIHsweDA3NDYsIDY0LCB7IDB4ZmYsIDB4YWQsIDB4M2YsIDB4MTIsIDB4MTIsIDB4MDksIDB4ZTQsIDB4ZjUsIDB4MzQsIDB4ZDIsIDB4MDgsIDB4OTAsIDB4N2UsIDB4M2MsIDB4ZTAsIDB4NjAsIDB4MGUsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4ZTUsIDB4NDEsIDB4NDQsIDB4MDIsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsCisgIDB4M2QsIDB4ZTAsIDB4NjAsIDB4MDIsIDB4ZDIsIDB4MGMsIDB4OTAsIDB4N2UsIDB4M2UsIDB4ZTAsIDB4NjAsIDB4MDgsIDB4NzUsIDB4MzUsIDB4MDEsIDB4ZTQsCisgIDB4ZjUsIDB4MzksIDB4ZDIsIDB4MDgsIDB4OTAsIDB4N2UsIDB4M2YsIDB4ZTAsIDB4NjAsIDB4MTEsIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTN9fSwKKyB7MHgwNzg2LCA2NCwgeyAweGYwLCAweDc0LCAweDMzLCAweGYwLCAweDc0LCAweDE2LCAweGYwLCAweDc0LCAweDM2LCAweGYwLCAweGQyLCAweDA0LCAweGU0LCAweDkwLCAweDdmLCAweGQxLCAweGYwLAorICAweDMwLCAweDFhLCAweDUyLCAweGU1LCAweDM5LCAweDYwLCAweDAyLCAweDE1LCAweDM5LCAweDMwLCAweDEzLCAweDQ5LCAweGU1LCAweDEzLCAweGQzLCAweDk0LAorICAweDAwLCAweDQwLCAweDA0LCAweDE1LCAweDEzLCAweDgwLCAweDNlLCAweDc1LCAweDEzLCAweDBhLCAweDMwLCAweDFiLCAweDAyLCAweGMyLCAweDEzLCAweDEyLAorICAweDEzLCAweDU3LCAweGVmLCAweDU0LCAweDAxLCAweGY1LCAweDE5LCAweDY1LCAweDMzLCAweDYwLCAweDA1LCAweDg1LCAweDE5LCAweDMzLCAweGQyfX0sCisgezB4MDdjNiwgNjQsIHsgMHgwOCwgMHgxMiwgMHgxMywgMHg5MywgMHhlZiwgMHg1NCwgMHg4MCwgMHhmNSwgMHgxOSwgMHg2NSwgMHgyZiwgMHg2MCwgMHgwNSwgMHg4NSwgMHgxOSwgMHgyZiwgMHhkMiwKKyAgMHgwOCwgMHgzMCwgMHgwZSwgMHgxMSwgMHgxMiwgMHgxMywgMHg5MywgMHhlZiwgMHg1NCwgMHgxMCwgMHhmNSwgMHgxOSwgMHg2NSwgMHgyZSwgMHg2MCwgMHgwNSwKKyAgMHg4NSwgMHgxOSwgMHgyZSwgMHhkMiwgMHgwOCwgMHgzMCwgMHgxYSwgMHgyYSwgMHg5MCwgMHg3ZiwgMHhkMiwgMHhlMCwgMHgyMCwgMHhlMSwgMHgyMywgMHg5MCwKKyAgMHg3YiwgMHg0MCwgMHhlMCwgMHg2MCwgMHgwOSwgMHhlMCwgMHhmNSwgMHgxNSwgMHg5MCwgMHg3YiwgMHg0MiwgMHhlMCwgMHhmNSwgMHgxNiwgMHg5MH19LAorIHsweDA4MDYsIDY0LCB7IDB4N2IsIDB4NDEsIDB4ZTAsIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTcsIDB4ZjAsIDB4NzQsIDB4MzcsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsCisgIDB4ZDMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YzIsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MDksIDB4MjAsIDB4ZTUsIDB4MGEsIDB4NzAsIDB4NDAsCisgIDB4MzAsIDB4MDcsIDB4MzksIDB4ZTUsIDB4MzgsIDB4NzAsIDB4MzUsIDB4YzIsIDB4MDcsIDB4ZjUsIDB4MTgsIDB4N2UsIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsCisgIDB4MjQsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTIsIDB4MGUsIDB4OWEsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjV9fSwKKyB7MHgwODQ2LCA2NCwgeyAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDA5LCAweGRiLAorICAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDA5LCAweGYwLCAweDc1LCAweDM4LCAweDEwLCAweGU0LCAweGY1LCAweDJjLCAweDc1LCAweDBhLCAweDAxLCAweDIyLAorICAweGU1LCAweDBhLCAweDY0LCAweDAxLCAweDcwLCAweDQwLCAweDMwLCAweDA4LCAweDM5LCAweGU1LCAweDM5LCAweDcwLCAweDM1LCAweGMyLCAweDA4LCAweGY1LAorICAweDE4LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDJkLCAweDI1LCAweDE4LCAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhLCAweDEyfX0sCisgezB4MDg4NiwgNjQsIHsgMHgwZSwgMHg5YSwgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNSwgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwKKyAgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwOSwgMHhkYiwgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwOSwgMHhmMCwgMHg3NSwgMHgzOSwgMHgxMCwgMHhlNCwKKyAgMHhmNSwgMHgzNSwgMHg3NSwgMHgwYSwgMHgwMiwgMHgyMiwgMHhlNSwgMHgwYSwgMHg2NCwgMHgwMiwgMHg3MCwgMHgzNiwgMHgzMCwgMHgxNCwgMHgyZiwgMHhjMiwKKyAgMHgxNCwgMHhmNSwgMHgxOCwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwgMHgwZSwgMHgyNSwgMHgxOCwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMH19LAorIHsweDA4YzYsIDY0LCB7IDB4ZmEsIDB4MTIsIDB4MGUsIDB4OWEsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjUsIDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsCisgIDB4ZjAsIDB4MDUsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MDUsIDB4ZGIsIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MDUsIDB4ZjAsIDB4NzUsIDB4MGEsCisgIDB4MDMsIDB4MjIsIDB4ZTUsIDB4MTUsIDB4NjAsIDB4MzAsIDB4MTUsIDB4MTUsIDB4ZTQsIDB4ZjUsIDB4MTgsIDB4N2UsIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsCisgIDB4MTQsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTIsIDB4MGUsIDB4OWEsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjV9fSwKKyB7MHgwOTA2LCA2NCwgeyAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDAzLCAweGRiLAorICAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDAzLCAweGYwLCAweGU0LCAweGY1LCAweDBhLCAweDIyLCAweDkwLCAweDdmLCAweGU5LCAweGUwLCAweDEyLCAweDBlLAorICAweGYyLCAweDBhLCAweDA4LCAweDAwLCAweDBhLCAweDdjLCAweDAxLCAweDBhLCAweGU4LCAweDAzLCAweDA5LCAweDQ0LCAweDA2LCAweDA5LCAweGZiLCAweDA4LAorICAweDA5LCAweGY1LCAweDA5LCAweDA5LCAweGRkLCAweDBhLCAweDA5LCAweGVjLCAweDBiLCAweDAwLCAweDAwLCAweDBiLCAweDM3LCAweDkwLCAweDdmfX0sCisgezB4MDk0NiwgNjQsIHsgMHhlYiwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxOSwgMHgxNCwgMHg2MCwgMHg2MSwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwOSwgMHhkMywgMHg3NCwKKyAgMHgxOSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHg3NCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwKKyAgMHhlYSwgMHhlMCwgMHg3MCwgMHgwNCwgMHg3ZiwgMHgwMiwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMywgMHg3NSwgMHg4MiwgMHg4MiwgMHg3NSwgMHg4MywgMHgxOSwKKyAgMHhlZiwgMHhmMCwgMHg3NSwgMHg4MiwgMHg3YiwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg3NSwgMHg4MiwgMHg3NCwgMHg3NSwgMHg4MywgMHgxOX19LAorIHsweDA5ODYsIDY0LCB7IDB4ZjAsIDB4NzUsIDB4ODIsIDB4NjYsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4NzUsIDB4ODIsIDB4NTgsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4ZWEsIDB4ZTAsIDB4MDQsIDB4NzUsIDB4ODIsIDB4MTcsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4NzQsIDB4MTksIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsCisgIDB4NzQsIDB4MTIsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MGYsCisgIDB4MTgsIDB4ZWEsIDB4NDksIDB4NjAsIDB4MGQsIDB4ZWEsIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4ZTksIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjB9fSwKKyB7MHgwOWM2LCA2NCwgeyAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGI0LCAweGUwLAorICAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweDAwLCAweGU1LCAweDA5LCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LAorICAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGY1LCAweDA5LCAweDAyLCAweDBiLCAweDNlLCAweDEyLCAweDBiLAorICAweDQ2LCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweDAwLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweGYwLCAweDAyfX0sCisgezB4MGEwNiwgNjQsIHsgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHg3ZiwgMHg2MCwgMHgyNCwgMHgxNCwgMHg2MCwgMHgzMSwgMHgyNCwgMHgwMiwgMHg3MCwgMHg1YiwKKyAgMHhhMiwgMHgxMCwgMHhlNCwgMHgzMywgMHhmZiwgMHgyNSwgMHhlMCwgMHhmZiwgMHhhMiwgMHgxNiwgMHhlNCwgMHgzMywgMHg0ZiwgMHg5MCwgMHg3ZiwgMHgwMCwKKyAgMHhmMCwgMHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHhlNCwgMHg5MCwgMHg3ZiwKKyAgMHgwMCwgMHhmMCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3Zn19LAorIHsweDBhNDYsIDY0LCB7IDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsCisgIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4ZTQsCisgIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsCisgIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MWQsIDB4MjQsIDB4MDJ9fSwKKyB7MHgwYTg2LCA2NCwgeyAweDYwLCAweDAzLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGI0LCAweDAxLCAweDA1LCAweGMyLCAweDEwLCAweDAyLCAweDBiLCAweDNlLAorICAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDM4LAorICAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLAorICAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweDkwLCAweDdmfX0sCisgezB4MGFjNiwgNjQsIHsgMHhlYywgMHhlMCwgMHg1NCwgMHg4MCwgMHhmZiwgMHgxMywgMHgxMywgMHgxMywgMHg1NCwgMHgxZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHg5MCwgMHg3ZiwKKyAgMHhkNywgMHhmMCwgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHg4MCwgMHg1ZiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwKKyAgMHg1NiwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxOCwgMHgyNCwgMHgwMiwgMHg3MCwgMHg0YSwgMHg5MCwgMHg3ZiwgMHhlYSwKKyAgMHhlMCwgMHhiNCwgMHgwMSwgMHgwNCwgMHhkMiwgMHgxMCwgMHg4MCwgMHgzZiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMH19LAorIHsweDBiMDYsIDY0LCB7IDB4ODAsIDB4MzYsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsCisgIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsCisgIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MTAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MDcsCisgIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4MjJ9fSwKKyB7MHgwYjQ2LCA2NCwgeyAweGU0LCAweDkwLCAweDdmLCAweDkzLCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LCAweDMwLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk2LCAweGYwLCAweDkwLAorICAweDdmLCAweDk1LCAweDc0LCAweGMwLCAweGYwLCAweDkwLCAweDdmLCAweDllLCAweDc0LCAweDNmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE4LAorICAweGYwLCAweGU0LCAweGY1LCAweDhlLCAweDkwLCAweDdmLCAweGRmLCAweDc0LCAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweGRlLCAweGYwLCAweGU0LCAweGY1LAorICAweDI0LCAweDc1LCAweDE4LCAweDAxLCAweDdiLCAweDAwLCAweDc0LCAweDI0LCAweDI1LCAweDE4LCAweGY5LCAweGU0LCAweDM0LCAweDAwLCAweGZhfX0sCisgezB4MGI4NiwgNjQsIHsgMHhlNCwgMHgxMiwgMHgwZSwgMHhlMCwgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwOSwgMHhlYSwgMHg3NSwgMHgzYSwgMHgwMSwgMHhlNCwgMHhmNSwgMHgzOCwKKyAgMHhmNSwgMHgxMywgMHhmNSwgMHgzNiwgMHhjMiwgMHgwNywgMHhjMiwgMHgwYiwgMHhjMiwgMHgwNSwgMHhjMiwgMHgwMCwgMHhjMiwgMHgwOSwgMHhjMiwgMHgxMywKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg3NSwgMHg0NCwgMHgwMywgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHgwMywgMHhmMCwgMHg3ZiwKKyAgMHgwYywgMHhlNCwgMHhmZCwgMHgxMiwgMHgxMSwgMHhiZiwgMHg3ZiwgMHgxMCwgMHg4ZiwgMHg0MiwgMHgxMiwgMHgxMCwgMHg4ZiwgMHg5MCwgMHg3Zn19LAorIHsweDBiYzYsIDY0LCB7IDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4N2YsIDB4MDEsIDB4OGYsIDB4NDAsIDB4ZWYsIDB4NDQsIDB4MDYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4NzUsIDB4NDYsIDB4ODAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4MGYsIDB4ZTQsIDB4ZmQsCisgIDB4MTIsIDB4MTEsIDB4YmYsIDB4ZTQsIDB4ZmYsIDB4N2UsIDB4YTMsIDB4YWQsIDB4MDYsIDB4OGQsIDB4M2UsIDB4MTIsIDB4MTEsIDB4YmYsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4N2YsIDB4MDUsIDB4N2QsIDB4N2YsIDB4MTIsIDB4MTF9fSwKKyB7MHgwYzA2LCA2NCwgeyAweGJmLCAweDdmLCAweDAxLCAweDEyLCAweDEyLCAweDc4LCAweDdmLCAweDAzLCAweDdkLCAweDA3LCAweDEyLCAweDExLCAweGJmLCAweDdmLCAweDEzLCAweDdkLCAweDAxLAorICAweDEyLCAweDExLCAweGJmLCAweDIwLCAweDFiLCAweDAzLCAweDAyLCAweDBjLCAweGM1LCAweDc1LCAweDJkLCAweDAxLCAweDc1LCAweDE4LCAweDAxLCAweDdiLAorICAweDAwLCAweDc0LCAweDJkLCAweDI1LCAweDE4LCAweGY5LCAweGU0LCAweDM0LCAweDAwLCAweGZhLCAweGU0LCAweDEyLCAweDBlLCAweGUwLCAweDA1LCAweDE4LAorICAweGU1LCAweDE4LCAweGI0LCAweDA5LCAweGVhLCAweDc1LCAweDNiLCAweDAxLCAweGU0LCAweGY1LCAweDM5LCAweGY1LCAweDEzLCAweGY1LCAweDM3fX0sCisgezB4MGM0NiwgNjQsIHsgMHhjMiwgMHgwOCwgMHhjMiwgMHgwYywgMHhjMiwgMHgwNiwgMHhjMiwgMHgwMCwgMHhjMiwgMHgwYSwgMHhjMiwgMHgxMywgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwKKyAgMHhmMCwgMHg3NSwgMHg0NSwgMHgwMywgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHgwMywgMHhmMCwgMHg3ZiwgMHgwYywgMHhlNCwgMHhmZCwgMHgxMiwgMHgxMiwKKyAgMHgwOSwgMHg3ZiwgMHgxMCwgMHg4ZiwgMHg0MywgMHgxMiwgMHgxMSwgMHgwMSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYSwgMHhmMCwgMHg3ZiwgMHgwMSwKKyAgMHg4ZiwgMHg0MSwgMHhlZiwgMHg0NCwgMHgwNiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMH19LAorIHsweDBjODYsIDY0LCB7IDB4NzUsIDB4NDcsIDB4ODAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4MGYsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTIsIDB4MDksIDB4ZTQsIDB4ZmYsCisgIDB4N2UsIDB4YTMsIDB4YWQsIDB4MDYsIDB4OGQsIDB4M2YsIDB4MTIsIDB4MTIsIDB4MDksIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDksIDB4ZjAsIDB4OTAsCisgIDB4YzAsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4N2YsIDB4MDUsIDB4N2QsIDB4N2YsIDB4MTIsIDB4MTIsIDB4MDksIDB4N2YsIDB4MDEsIDB4MTIsIDB4MTIsIDB4OTksCisgIDB4N2YsIDB4MDMsIDB4N2QsIDB4MDcsIDB4MTIsIDB4MTIsIDB4MDksIDB4N2YsIDB4MTMsIDB4N2QsIDB4MDEsIDB4MTIsIDB4MTIsIDB4MDksIDB4ZDJ9fSwKKyB7MHgwY2M2LCA2NCwgeyAweDEyLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweGFmLCAweDA4LCAweGU1LCAweDBkLCAweGY1LCAweDgyLCAweGU1LCAweDBjLCAweGY1LAorICAweDgzLCAweGMyLCAweGFmLCAweDA1LCAweDg2LCAweDkwLCAweGMwLCAweDAwLCAweDA1LCAweDg2LCAweGUwLCAweGEzLCAweDA1LCAweDg2LCAweGYwLCAweDA1LAorICAweDg2LCAweGRmLCAweGY3LCAweGQyLCAweGFmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweGFmLCAweDA4LCAweGU1LCAweDBkLAorICAweGY1LCAweDgyLCAweGU1LCAweDBjLCAweGY1LCAweDgzLCAweGMyLCAweGFmLCAweDA1LCAweDg2LCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweDA1fX0sCisgezB4MGQwNiwgNjQsIHsgMHg4NiwgMHhmMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhkZiwgMHhmNywgMHgwNSwgMHg4NiwgMHhkMiwgMHhhZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOCwKKyAgMHhmMCwgMHhhZiwgMHgwOCwgMHhlNSwgMHgwZCwgMHhmNSwgMHg4MiwgMHhlNSwgMHgwYywgMHhmNSwgMHg4MywgMHhjMiwgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwKKyAgMHhjMCwgMHgwMCwgMHgwNSwgMHg4NiwgMHhlMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhmMCwgMHgwNSwgMHg4NiwgMHhkZiwgMHhmNywgMHhkMiwgMHhhZiwgMHgyMiwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOCwgMHhmMCwgMHhhZiwgMHgwOCwgMHhlNSwgMHgwZCwgMHhmNSwgMHg4MiwgMHhlNSwgMHgwYywgMHhmNX19LAorIHsweDBkNDYsIDY0LCB7IDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsIDB4ODYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4MDUsIDB4ODYsIDB4ZjAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4ZGYsIDB4ZjcsCisgIDB4MDUsIDB4ODYsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4NzQsIDB4MDAsIDB4ZjUsIDB4ODYsIDB4OTAsIDB4ZmQsIDB4YTUsIDB4N2MsIDB4MDUsIDB4YTMsIDB4ZTUsCisgIDB4ODIsIDB4NDUsIDB4ODMsIDB4NzAsIDB4ZjksIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4NDMsIDB4ODcsIDB4MDEsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ZDIsIDB4MTksIDB4OTAsIDB4N2YsIDB4OTIsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjB9fSwKKyB7MHgwZDg2LCA2NCwgeyAweDkwLCAweDdmLCAweGFlLCAweGUwLCAweGZmLCAweGQzLCAweDkyLCAweDEwLCAweGU0LCAweDMzLCAweGZlLCAweGVmLCAweDRlLCAweGYwLCAweGQyLCAweGU4LCAweDQzLAorICAweGQ4LCAweDIwLCAweDkwLCAweDdmLCAweGRlLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGRmLCAweGYwLCAweDkwLCAweDdmLCAweGFiLCAweDc0LAorICAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweGE5LCAweGYwLCAweDkwLCAweDdmLCAweGFhLCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFmLAorICAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGFlLCAweGUwLCAweDQ0LCAweDBkLCAweGYwLCAweGQyLCAweGFmLCAweGQyLCAweDFhfX0sCisgezB4MGRjNiwgNjQsIHsgMHgxMiwgMHgxMiwgMHg1MywgMHhjMiwgMHgxMSwgMHhlNCwgMHhmNSwgMHgwYiwgMHhmNSwgMHgxMywgMHhjMiwgMHgxNywgMHhjMiwgMHgxMiwgMHg5MCwgMHg3ZiwgMHhhMSwKKyAgMHgwNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHg2NSwgMHgxNywgMHg2MCwgMHgxMCwgMHgzMCwgMHgxMiwgMHgwNSwgMHhkMiwgMHgxYSwgMHgxMiwKKyAgMHgwMCwgMHg0NiwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHhmNSwgMHgxNywgMHg4MCwgMHgwOCwgMHgzMCwgMHgxMiwgMHgwNSwgMHhjMiwgMHgxYSwgMHgxMiwKKyAgMHgwMCwgMHg0NiwgMHgzMCwgMHgxMSwgMHgwNywgMHhjMiwgMHgxMSwgMHgxMiwgMHgwOSwgMHgyMSwgMHg4MCwgMHhkNiwgMHgzMCwgMHgxOCwgMHhkM319LAorIHsweDBlMDYsIDY0LCB7IDB4YzIsIDB4MTgsIDB4MTIsIDB4MTMsIDB4OWYsIDB4ODAsIDB4Y2MsIDB4MjIsIDB4NzgsIDB4N2YsIDB4ZTQsIDB4ZjYsIDB4ZDgsIDB4ZmQsIDB4NzUsIDB4ODEsIDB4NDcsCisgIDB4MDIsIDB4MGUsIDB4NTUsIDB4MDIsIDB4MGQsIDB4N2QsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NDAsIDB4MDMsIDB4ZjYsCisgIDB4ODAsIDB4MDEsIDB4ZjIsIDB4MDgsIDB4ZGYsIDB4ZjQsIDB4ODAsIDB4MjksIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4NTQsIDB4MDcsIDB4MjQsIDB4MGMsCisgIDB4YzgsIDB4YzMsIDB4MzMsIDB4YzQsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MjAsIDB4YzgsIDB4ODMsIDB4NDAsIDB4MDQsIDB4ZjQsIDB4NTYsIDB4ODB9fSwKKyB7MHgwZTQ2LCA2NCwgeyAweDAxLCAweDQ2LCAweGY2LCAweGRmLCAweGU0LCAweDgwLCAweDBiLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDkwLCAweDEyLAorICAweGJhLCAweGU0LCAweDdlLCAweDAxLCAweDkzLCAweDYwLCAweGJjLCAweGEzLCAweGZmLCAweDU0LCAweDNmLCAweDMwLCAweGU1LCAweDA5LCAweDU0LCAweDFmLAorICAweGZlLCAweGU0LCAweDkzLCAweGEzLCAweDYwLCAweDAxLCAweDBlLCAweGNmLCAweDU0LCAweGMwLCAweDI1LCAweGUwLCAweDYwLCAweGE4LCAweDQwLCAweGI4LAorICAweGU0LCAweDkzLCAweGEzLCAweGZhLCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweGU0LCAweDkzLCAweGEzLCAweGM4LCAweGM1LCAweDgyLCAweGM4fX0sCisgezB4MGU4NiwgNjQsIHsgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhmMCwgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhkZiwgMHhlOSwgMHhkZSwKKyAgMHhlNywgMHg4MCwgMHhiZSwgMHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwMiwgMHhlNywgMHgyMiwKKyAgMHhiYiwgMHhmZSwgMHgwMiwgMHhlMywgMHgyMiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMiwgMHhiYiwgMHgwMSwgMHgwYywgMHhlNSwKKyAgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwNiwgMHhlOSwgMHgyNX19LAorIHsweDBlYzYsIDY0LCB7IDB4ODIsIDB4ZjgsIDB4ZTYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4MjIsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsCisgIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsCisgIDB4ZjAsIDB4MjIsIDB4NTAsIDB4MDIsIDB4ZjcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDEsIDB4ZjMsIDB4MjIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIDB4ZjgsCisgIDB4ZTQsIDB4OTMsIDB4NzAsIDB4MTIsIDB4NzQsIDB4MDEsIDB4OTMsIDB4NzAsIDB4MGQsIDB4YTMsIDB4YTMsIDB4OTMsIDB4ZjgsIDB4NzQsIDB4MDF9fSwKKyB7MHgwZjA2LCA2NCwgeyAweDkzLCAweGY1LCAweDgyLCAweDg4LCAweDgzLCAweGU0LCAweDczLCAweDc0LCAweDAyLCAweDkzLCAweDY4LCAweDYwLCAweGVmLCAweGEzLCAweGEzLCAweGEzLCAweDgwLAorICAweGRmLCAweDhmLCAweDE4LCAweGU0LCAweGY1LCAweDE5LCAweDc1LCAweDFhLCAweGZmLCAweDc1LCAweDFiLCAweDE5LCAweDc1LCAweDFjLCAweDg2LCAweGFiLAorICAweDFhLCAweGFhLCAweDFiLCAweGE5LCAweDFjLCAweDkwLCAweDAwLCAweDAxLCAweDEyLCAweDBlLCAweGIzLCAweGI0LCAweDAzLCAweDFkLCAweGFmLCAweDE5LAorICAweDA1LCAweDE5LCAweGVmLCAweGI1LCAweDE4LCAweDAxLCAweDIyLCAweDEyLCAweDBlLCAweDlhLCAweDdlLCAweDAwLCAweDI5LCAweGZmLCAweGVlfX0sCisgezB4MGY0NiwgNjQsIHsgMHgzYSwgMHhhOSwgMHgwNywgMHg3NSwgMHgxYSwgMHhmZiwgMHhmNSwgMHgxYiwgMHg4OSwgMHgxYywgMHg4MCwgMHhkNCwgMHg3YiwgMHgwMCwgMHg3YSwgMHgwMCwgMHg3OSwKKyAgMHgwMCwgMHgyMiwgMHg4ZiwgMHgxYSwgMHgwNSwgMHgwZCwgMHhlNSwgMHgwZCwgMHhhZSwgMHgwYywgMHg3MCwgMHgwMiwgMHgwNSwgMHgwYywgMHgxNCwgMHhmNSwKKyAgMHg4MiwgMHg4ZSwgMHg4MywgMHhlNSwgMHgxYSwgMHhmMCwgMHgxMiwgMHgwMCwgMHgzNiwgMHgwNSwgMHgwZCwgMHhlNSwgMHgwZCwgMHhhYywgMHgwYywgMHg3MCwKKyAgMHgwMiwgMHgwNSwgMHgwYywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHgxNSwgMHgwOCwgMHhlNSwgMHgwOCwgMHg2MH19LAorIHsweDBmODYsIDY0LCB7IDB4MGEsIDB4MTIsIDB4MTMsIDB4MzMsIDB4OGYsIDB4MWEsIDB4ZWYsIDB4NDIsIDB4MzYsIDB4ODAsIDB4Y2EsIDB4MjIsIDB4OGYsIDB4MWEsIDB4MDUsIDB4MGQsIDB4ZTUsCisgIDB4MGQsIDB4YWUsIDB4MGMsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MGMsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTUsIDB4MWEsIDB4ZjAsIDB4MTIsCisgIDB4MTMsIDB4NGIsIDB4MDUsIDB4MGQsIDB4ZTUsIDB4MGQsIDB4YWMsIDB4MGMsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MGMsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsCisgIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MTUsIDB4MDgsIDB4ZTUsIDB4MDgsIDB4NjAsIDB4MGEsIDB4MTIsIDB4MTMsIDB4ODcsIDB4OGYsIDB4MWEsIDB4ZWZ9fSwKKyB7MHgwZmM2LCA2NCwgeyAweDQyLCAweDM3LCAweDgwLCAweGNhLCAweDIyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LAorICAweDc1LCAweDg2LCAweDAwLCAweDkwLCAweDdmLCAweGM0LCAweGU0LCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA0LAorICAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweGMwLCAweGUwLAorICAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweGQyLCAweDExfX0sCisgezB4MTAwNiwgNjQsIHsgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwKKyAgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwKKyAgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhkMiwgMHgxOCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwOCwgMHhmMCwgMHhkMCwKKyAgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHg5MCwgMHg3ZiwgMHg5OH19LAorIHsweDEwNDYsIDY0LCB7IDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjB9fSwKKyB7MHgxMDg2LCA2NCwgeyAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLAorICAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLAorICAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0fX0sCisgezB4MTBjNiwgNjQsIHsgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwKKyAgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywKKyAgMHhmMCwgMHhlNSwgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYn19LAorIHsweDExMDYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsCisgIDB4MDgsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDV9fSwKKyB7MHgxMTQ2LCA2NCwgeyAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LAorICAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDA5LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LAorICAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LAorICAweDBiLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDkwfX0sCisgezB4MTE4NiwgNjQsIHsgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgwZSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwKKyAgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNX19LAorIHsweDExYzYsIDY0LCB7IDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTcsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTUsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MTIsIDB4MTMsIDB4MWIsCisgIDB4OGYsIDB4MWEsIDB4MTIsIDB4MTMsIDB4MWIsIDB4OGYsIDB4MWIsIDB4ZTUsIDB4MWEsIDB4NjUsIDB4MWIsIDB4NjAsIDB4MTIsIDB4MTIsIDB4MTMsIDB4MWIsCisgIDB4OGYsIDB4MWEsIDB4ZTUsIDB4MWEsIDB4NjUsIDB4MWIsIDB4NjAsIDB4MDcsIDB4MTIsIDB4MTMsIDB4MWIsIDB4OGYsIDB4MWIsIDB4ODAsIDB4ZTh9fSwKKyB7MHgxMjA2LCA2NCwgeyAweGFmLCAweDFhLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBmLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBkLAorICAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVkLCAweGYwLCAweDIyLCAweDEyLCAweDEzLCAweDZmLCAweDhmLCAweDFhLCAweDEyLCAweDEzLCAweDZmLCAweDhmLAorICAweDFiLCAweGU1LCAweDFhLCAweDY1LCAweDFiLCAweDYwLCAweDEyLCAweDEyLCAweDEzLCAweDZmLCAweDhmLCAweDFhLCAweGU1LCAweDFhLCAweDY1fX0sCisgezB4MTI0NiwgNjQsIHsgMHgxYiwgMHg2MCwgMHgwNywgMHgxMiwgMHgxMywgMHg2ZiwgMHg4ZiwgMHgxYiwgMHg4MCwgMHhlOCwgMHhhZiwgMHgxYSwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwKKyAgMHg1NCwgMHhmYiwgMHhmMCwgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHgzMCwgMHgxYSwgMHgwNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg3ZiwgMHhmNCwKKyAgMHg3ZSwgMHgwMSwgMHgxMiwgMHgxMiwgMHhkNiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmNywgMHhmMCwgMHhlMCwgMHg0NCwgMHgwNCwgMHhmMCwKKyAgMHgyMiwgMHhhZSwgMHgwNywgMHhlNCwgMHhmZiwgMHhlNSwgMHgzZSwgMHg1NCwgMHg3ZiwgMHhmZCwgMHgxMiwgMHgxMSwgMHhiZiwgMHg5MCwgMHg3Zn19LAorIHsweDEyODYsIDY0LCB7IDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWUsIDB4ZjAsIDB4ZTQsIDB4ZTUsIDB4M2UsIDB4NDQsIDB4ODAsIDB4ZmQsIDB4MTIsIDB4MTEsCisgIDB4YmYsIDB4MjIsIDB4YWUsIDB4MDcsIDB4ZTQsIDB4ZmYsIDB4ZTUsIDB4M2YsIDB4NTQsIDB4N2YsIDB4ZmQsIDB4MTIsIDB4MTIsIDB4MDksIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MDksIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWUsIDB4ZjAsIDB4ZTQsIDB4ZTUsIDB4M2YsIDB4NDQsIDB4ODAsIDB4ZmQsIDB4MTIsCisgIDB4MTIsIDB4MDksIDB4MjIsIDB4MDUsIDB4MGUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MTQsIDB4MDMsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMmM2LCA2NCwgeyAweGMxLCAweDExLCAweGMxLCAweDE4LCAweGMxLCAweDk1LCAweGMxLCAweDEwLCAweGMxLCAweDE2LCAweDAxLCAweDBhLCAweDAwLCAweGMxLCAweDliLCAweDAwLCAweDhlLAorICAweDE4LCAweDhmLCAweDE5LCAweGU1LCAweDE5LCAweDE1LCAweDE5LCAweGFlLCAweDE4LCAweDcwLCAweDAyLCAweDE1LCAweDE4LCAweDRlLCAweDYwLCAweDA1LAorICAweDEyLCAweDBkLCAweDVjLCAweDgwLCAweGVlLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLAorICAweGZmLCAweDIyLCAweDUzLCAweGQ4LCAweGVmLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDBmLCAweGY1LCAweDAwLCAweDAyLCAweDEzfX0sCisgezB4MTMwNiwgNjQsIHsgMHgwNCwgMHgwMCwgMHgwMiwgMHgwZiwgMHhjYiwgMHgwMCwgMHgwMiwgMHgxMCwgMHgxYywgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwKKyAgMHgxNSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNiwgMHhmMCwgMHg5MH19LAorIHsweDEzNDYsIDY0LCB7IDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDksIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsCisgIDB4MGEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmZ9fSwKKyB7MHgxMzg2LCA2NCwgeyAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBkLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LAorICAweDBlLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDEyLCAweDAwLCAweDAzLCAweDEyLCAweDBkLCAweDZkLCAweDEyLCAweDBiLAorICAweDQ2LCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTNjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNDQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTQ4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNTA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTU0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNWM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTYwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE2NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNjg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTZjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNzQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTc4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxODA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTg0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxOGM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDEwLCAweDAxLCAweGZmLCAweDAwfX0sCisgezB4MTkwNiwgNjQsIHsgMHgwMCwgMHg0MCwgMHhjZCwgMHgwNiwgMHgxNSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMiwgMHgwOSwgMHgwMiwgMHg3NCwgMHgwMCwgMHgwMSwKKyAgMHgwMSwgMHgwMCwgMHhhMCwgMHgzMiwgMHgwOSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMSwKKyAgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMywgMHgwMiwgMHg0MCwKKyAgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNSwgMHgwMiwgMHg0MCwgMHgwMH19LAorIHsweDE5NDYsIDY0LCB7IDB4MDAsIDB4MDcsIDB4MDUsIDB4MDYsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDcsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsCisgIDB4ODEsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODMsIDB4MDIsCisgIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODQsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODUsIDB4MDIsIDB4NDAsIDB4MDAsCisgIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODYsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODcsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDF9fSwKKyB7MHgxOTg2LCA2NCwgeyAweDA0LCAweDAzLCAweDA5LCAweDA0LCAweDQ4LCAweDAzLCAweDRiLCAweDAwLCAweDY1LCAweDAwLCAweDc5LCAweDAwLCAweDczLCAweDAwLCAweDcwLCAweDAwLCAweDYxLAorICAweDAwLCAweDZlLCAweDAwLCAweDJjLCAweDAwLCAweDIwLCAweDAwLCAweDYxLCAweDAwLCAweDIwLCAweDAwLCAweDY0LCAweDAwLCAweDY5LCAweDAwLCAweDc2LAorICAweDAwLCAweDY5LCAweDAwLCAweDczLCAweDAwLCAweDY5LCAweDAwLCAweDZmLCAweDAwLCAweDZlLCAweDAwLCAweDIwLCAweDAwLCAweDZmLCAweDAwLCAweDY2LAorICAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDZlLCAweDAwLCAweDZmLCAweDAwLCAweDUzLCAweDAwLCAweDc5LCAweDAwfX0sCisgezB4MTljNiwgNjQsIHsgMHg3MywgMHgwMCwgMHgyMCwgMHgwMCwgMHg0OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2MywgMHgwMCwgMHgyZSwgMHgwMCwgMHgzNiwgMHgwMywgMHg0YiwgMHgwMCwgMHg2NSwKKyAgMHgwMCwgMHg3OSwgMHgwMCwgMHg3MywgMHgwMCwgMHg3MCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1NSwgMHgwMCwgMHg1MywKKyAgMHgwMCwgMHg0MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1MywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2YywKKyAgMHgwMCwgMHgyMCwgMHgwMCwgMHg0MSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg3MCwgMHgwMCwgMHg3NCwgMHgwMCwgMHg2NSwgMHgwMH19LAorIHsweDFhMDYsICA0LCB7IDB4NzIsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHhmZmZmLCAgMCwgezB4MDB9fQorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTI4eGJfZncuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTI4eGJfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWZjYWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjh4Yl9mdy5oCkBAIC0wLDAgKzEsNDQ4IEBACisvKiBrZXlzcGFuX3VzYTI4eGJfZncuaAorCisJVGhlIGZpcm13YXJlIGNvbnRhaW5lZCBoZXJlaW4gYXMga2V5c3Bhbl91c2EyOXhiX2Z3LmggaXMKKworCQlDb3B5cmlnaHQgKEMpIDE5OTktMjAwMQorCQlLZXlzcGFuLCBBIGRpdmlzaW9uIG9mIElubm9TeXMgSW5jb3Jwb3JhdGVkICgiS2V5c3BhbiIpCisJCQorCWFzIGFuIHVucHVibGlzaGVkIHdvcmsuIFRoaXMgbm90aWNlIGRvZXMgbm90IGltcGx5IHVucmVzdHJpY3RlZCBvcgorCXB1YmxpYyBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIGZyb20gd2hpY2ggdGhpcyBmaXJtd2FyZSBpbWFnZSBpcworCWRlcml2ZWQuICBFeGNlcHQgYXMgbm90ZWQgYmVsb3cgdGhpcyBmaXJtd2FyZSBpbWFnZSBtYXkgbm90IGJlIAorCXJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQgCisJS2V5c3BhbidzIHByaW9yIHdyaXR0ZW4gY29uc2VudC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKwlQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgCisJaW1hZ2UgYXMgcGFydCBvZiBhIExpbnV4IG9yIG90aGVyIE9wZW4gU291cmNlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIAorCWluIHRleHQgb3IgYmluYXJ5IGZvcm0gYXMgcmVxdWlyZWQuIAorCisJVGhpcyBmaXJtd2FyZSBtYXkgbm90IGJlIG1vZGlmaWVkIGFuZCBtYXkgb25seSBiZSB1c2VkIHdpdGggIAorCUtleXNwYW4gaGFyZHdhcmUuICBEaXN0cmlidXRpb24gYW5kL29yIE1vZGlmaWNhdGlvbiBvZiB0aGUgCisJa2V5c3Bhbi5jIGRyaXZlciB3aGljaCBpbmNsdWRlcyB0aGlzIGZpcm13YXJlLCBpbiB3aG9sZSBvciBpbiAKKwlwYXJ0LCByZXF1aXJlcyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3RhdGVtZW50LiIKKworKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkIGtleXNwYW5fdXNhMjh4Yl9maXJtd2FyZVtdID0geworIHsweDAwMzMsICAzLCB7IDB4MDIsIDB4MDAsIDB4MmR9fSwKKyB7MHgwMDJkLCAgNCwgeyAweDUzLCAweGQ4LCAweGVmLCAweDMyfX0sCisgezB4MDA0NiwgMTYsIHsgMHgzMCwgMHgwOSwgMHgxOCwgMHgxMiwgMHgxMywgMHgzMywgMHhlZiwgMHhjMywgMHg5NSwgMHgzYywgMHg0MCwgMHgwMywgMHgwMiwgMHgwMCwgMHhkOCwgMHg5MH19LAorIHsweDAwNTYsIDE2LCB7IDB4N2YsIDB4YmYsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4YzIsIDB4MDksIDB4YzIsIDB4MDAsIDB4ODAsIDB4NzcsIDB4MzAsIDB4MDMsIDB4M2IsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwMDY2LCAxNiwgeyAweGM2LCAweGUwLCAweDIwLCAweGUxLCAweDZkLCAweDEyLCAweDEzLCAweDMzLCAweGVmLCAweGMzLCAweDk0LCAweDQwLCAweDUwLCAweDY0LCAweDkwLCAweDdlfX0sCisgezB4MDA3NiwgMTYsIHsgMHg0MCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwOSwgMHg5MCwgMHg3ZiwgMHhjNywgMHhlMCwgMHgxNCwgMHhmNSwgMHgxOSwgMHgyMCwgMHgwMCwgMHgxMSwgMHg2MH19LAorIHsweDAwODYsIDE2LCB7IDB4MGYsIDB4ZjUsIDB4MDgsIDB4N2UsIDB4N2UsIDB4N2YsIDB4NDEsIDB4NzUsIDB4MGMsIDB4N2UsIDB4NzUsIDB4MGQsIDB4NDEsIDB4MTIsIDB4MGMsIDB4Y2N9fSwKKyB7MHgwMDk2LCAxNiwgeyAweGMyLCAweDAzLCAweGU0LCAweDkwLCAweDdmLCAweGM3LCAweGYwLCAweDgwLCAweDM5LCAweDkwLCAweDdmLCAweGM4LCAweGUwLCAweDIwLCAweGUxLCAweDMyfX0sCisgezB4MDBhNiwgMTYsIHsgMHgxMiwgMHgxMywgMHgzMywgMHhlZiwgMHhjMywgMHg5NCwgMHg0MCwgMHg1MCwgMHgyOSwgMHg5MCwgMHg3ZCwgMHhjMCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwOX19LAorIHsweDAwYjYsIDE2LCB7IDB4OTAsIDB4N2YsIDB4YzksIDB4ZTAsIDB4MTQsIDB4ZjUsIDB4MTksIDB4MjAsIDB4MDAsIDB4MTEsIDB4NjAsIDB4MGYsIDB4ZjUsIDB4MDgsIDB4N2UsIDB4N2R9fSwKKyB7MHgwMGM2LCAxNiwgeyAweDdmLCAweGMxLCAweDc1LCAweDBjLCAweDdkLCAweDc1LCAweDBkLCAweGMxLCAweDEyLCAweDBjLCAweGNjLCAweGQyLCAweDAzLCAweGU0LCAweDkwLCAweDdmfX0sCisgezB4MDBkNiwgMTYsIHsgMHhjOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwMSwgMHg2MCwgMHgxMiwgMHgxMSwgMHhmNSwgMHg4Zn19LAorIHsweDAwZTYsIDE2LCB7IDB4MTksIDB4MTIsIDB4MTMsIDB4M2YsIDB4OGYsIDB4MzYsIDB4ZTUsIDB4MTksIDB4YzMsIDB4OTUsIDB4M2EsIDB4NTAsIDB4MGYsIDB4MTIsIDB4MTMsIDB4MWJ9fSwKKyB7MHgwMGY2LCAxNiwgeyAweGVmLCAweDMwLCAweGUwLCAweDA4LCAweGU1LCAweDM2LCAweDIwLCAweGU3LCAweDAzLCAweDMwLCAweDBiLCAweDVlLCAweGMyLCAweDBiLCAweGU1LCAweDE5fX0sCisgezB4MDAzNiwgMTIsIHsgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMn19LAorIHsweDAwNDMsICAzLCB7IDB4MDIsIDB4MTMsIDB4MDB9fSwKKyB7MHgwMDAzLCAxNiwgeyAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweDkwfX0sCisgezB4MDAxMywgMTYsIHsgMHg3ZiwgMHhjNCwgMHhlNCwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwNCwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMH19LAorIHsweDAwMjMsIDEwLCB7IDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9fSwKKyB7MHgwMDAwLCAgMywgeyAweDAyLCAweDBlLCAweDEyfX0sCisgezB4MDEwNiwgNjQsIHsgMHg2MCwgMHg1OCwgMHhiNCwgMHg4MCwgMHgwMywgMHg0MywgMHgzNiwgMHgwMiwgMHhlNSwgMHgzNiwgMHgzMCwgMHhlNywgMHgyNiwgMHhlNSwgMHgxOSwgMHhkMywgMHg5NCwKKyAgMHgyMCwgMHg0MCwgMHgwMywgMHg3NSwgMHgxOSwgMHgyMCwgMHg4NSwgMHgxOSwgMHgwOCwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg4MCwgMHg3NSwgMHgwYywgMHg3ZSwKKyAgMHg3NSwgMHgwZCwgMHg4MCwgMHhhZiwgMHgzNiwgMHgxMiwgMHgwZiwgMHg1ZCwgMHhlNSwgMHgxOSwgMHgyNSwgMHhlMCwgMHg5MCwgMHg3ZiwgMHhiNywgMHhmMCwKKyAgMHg4MCwgMHgyNywgMHhlNSwgMHgxOSwgMHhkMywgMHg5NCwgMHgzZiwgMHg0MCwgMHgwMywgMHg3NSwgMHgxOSwgMHgzZiwgMHg4NSwgMHgxOSwgMHgwOH19LAorIHsweDAxNDYsIDY0LCB7IDB4OTAsIDB4N2UsIDB4ODAsIDB4ZTUsIDB4MzYsIDB4ZjAsIDB4N2UsIDB4N2UsIDB4N2YsIDB4ODEsIDB4NzUsIDB4MGMsIDB4N2UsIDB4NzUsIDB4MGQsIDB4ODEsIDB4MTIsCisgIDB4MGMsIDB4ZjEsIDB4ZTUsIDB4MTksIDB4MDQsIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4Y2UsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDYsCisgIDB4MjAsIDB4MDUsIDB4MDMsIDB4MDIsIDB4MDMsIDB4YzEsIDB4ZTQsIDB4ZjUsIDB4MTgsIDB4NzQsIDB4NDAsIDB4MjUsIDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsCisgIDB4MzQsIDB4N2MsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTgsIDB4N2MsIDB4MDAsIDB4N2IsIDB4MDEsIDB4N2EsIDB4N2UsIDB4Nzl9fSwKKyB7MHgwMTg2LCA2NCwgeyAweDAwLCAweDI0LCAweDAwLCAweGY5LCAweGVjLCAweDM0LCAweDdlLCAweGZhLCAweGVmLCAweDEyLCAweDBlLCAweGU0LCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LAorICAweDIwLCAweGQ3LCAweDkwLCAweDdlLCAweDAwLCAweGUwLCAweDYwLCAweDY4LCAweDkwLCAweDdlLCAweDAzLCAweGUwLCAweDYwLCAweDI0LCAweDdmLCAweDAxLAorICAweGU0LCAweGZkLCAweDEyLCAweDExLCAweGQwLCAweDdmLCAweDAzLCAweDdkLCAweGNkLCAweDEyLCAweDExLCAweGQwLCAweDQzLCAweDQ2LCAweDgwLCAweDkwLAorICAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ2LCAweGYwLCAweGU0LCAweDkwLCAweDdlLCAweDEzfX0sCisgezB4MDFjNiwgNjQsIHsgMHhmMCwgMHg4MCwgMHgzMCwgMHg5MCwgMHg3ZSwgMHgwMSwgMHhlMCwgMHhmZiwgMHgxMiwgMHgxMCwgMHg1NCwgMHg5MCwgMHg3ZSwgMHgwMiwgMHhlMCwgMHhmZiwgMHgxMiwKKyAgMHgxMCwgMHg3YSwgMHg3ZiwgMHgwMSwgMHg5MCwgMHg3ZSwgMHgxMSwgMHhlMCwgMHhmZCwgMHgxMiwgMHgxMSwgMHhkMCwgMHg3ZiwgMHgwMywgMHg3ZCwgMHgwNywKKyAgMHgxMiwgMHgxMSwgMHhkMCwgMHg0MywgMHg0NiwgMHg4MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwKKyAgMHg0NiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHhlNSwgMHg0MCwgMHg0NCwgMHgwNiwgMHg5MCwgMHhjMCwgMHgwMH19LAorIHsweDAyMDYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4N2UsIDB4MDMsIDB4ZTAsIDB4NzAsIDB4MDYsIDB4OTAsIDB4N2UsIDB4MTMsIDB4ZTAsIDB4NzAsIDB4MDgsIDB4ZTQsIDB4OTAsIDB4N2UsIDB4MTMsCisgIDB4ZjAsIDB4NzUsIDB4MjUsIDB4ZmYsIDB4OTAsIDB4N2UsIDB4MDUsIDB4ZTAsIDB4NjAsIDB4MTIsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4M2YsIDB4ZjUsIDB4NDQsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDQsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MDcsIDB4ZTAsCisgIDB4NjAsIDB4MmIsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDIsIDB4ODAsIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDIsIDB4N2YsIDB4NTN9fSwKKyB7MHgwMjQ2LCA2NCwgeyAweDQyLCAweGZjLCAweDkwLCAweDdlLCAweDA5LCAweGUwLCAweDYwLCAweDExLCAweDQzLCAweDQyLCAweDAyLCAweGEzLCAweGUwLCAweGZmLCAweDEyLCAweDEwLCAweGM2LAorICAweDkwLCAweDdlLCAweDBiLCAweGUwLCAweGZmLCAweDEyLCAweDEwLCAweGVjLCAweGFmLCAweDQyLCAweDEyLCAweDEwLCAweGEwLCAweDkwLCAweDdlLCAweDAzLAorICAweGUwLCAweDYwLCAweDA4LCAweDUzLCAweDQyLCAweDdmLCAweGFmLCAweDQyLCAweDEyLCAweDEwLCAweGEwLCAweDkwLCAweDdlLCAweDBjLCAweGUwLCAweDYwLAorICAweDE4LCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQ2LCAweDAyLCAweDgwLCAweDAzLCAweDUzLCAweDQ2LCAweGZkLCAweDkwLCAweDdmfX0sCisgezB4MDI4NiwgNjQsIHsgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NiwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgwZSwgMHhlMCwgMHg2MCwgMHgxOCwgMHhhMywKKyAgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0NiwgMHgwMSwgMHg4MCwgMHgwMywgMHg1MywgMHg0NiwgMHhmZSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwKKyAgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NiwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgxMiwgMHhlMCwgMHhmNSwgMHgzYSwgMHhhMywgMHhlMCwgMHgxMywKKyAgMHg5MiwgMHgwZCwgMHhhMywgMHhlMCwgMHhmNSwgMHgzYywgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0NiwgMHgxMCwgMHg4MCwgMHgwM319LAorIHsweDAyYzYsIDY0LCB7IDB4NTMsIDB4NDYsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4ZjAsIDB4OTAsIDB4N2UsCisgIDB4MTYsIDB4ZTAsIDB4NjAsIDB4MzIsIDB4NTMsIDB4NDQsIDB4YmYsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NDQsIDB4NTQsCisgIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4MTIsIDB4MTMsIDB4MGYsIDB4ZWYsIDB4NTQsCisgIDB4ZmUsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4NTMsIDB4M2UsIDB4ZmQsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2UsIDB4MTIsIDB4MTEsIDB4ZDB9fSwKKyB7MHgwMzA2LCA2NCwgeyAweGU0LCAweGY1LCAweDJhLCAweGY1LCAweDI5LCAweGQyLCAweDA3LCAweDkwLCAweDdlLCAweDE3LCAweGUwLCAweDYwLCAweDBmLCAweDQzLCAweDNlLCAweDAyLCAweGU0LAorICAweGZmLCAweGFkLCAweDNlLCAweDEyLCAweDExLCAweGQwLCAweDc1LCAweDI5LCAweDAxLCAweGQyLCAweDA3LCAweDkwLCAweDdlLCAweDE4LCAweGUwLCAweDYwLAorICAweDEwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweGU1LCAweDQwLCAweDQ0LCAweDA0LCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweGQyLAorICAweDAwLCAweDkwLCAweDdlLCAweDE5LCAweGUwLCAweDYwLCAweDExLCAweDQzLCAweDQ0LCAweDQwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzfX0sCisgezB4MDM0NiwgNjQsIHsgMHhmMCwgMHhlNSwgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgxYSwgMHhlMCwgMHg2MCwgMHgwZiwgMHg1MywgMHgzZSwKKyAgMHhmZSwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZSwgMHgxMiwgMHgxMSwgMHhkMCwgMHg3NSwgMHgyYiwgMHgwMSwgMHhkMiwgMHgwNywgMHg5MCwgMHg3ZSwgMHgxYiwKKyAgMHhlMCwgMHg2MCwgMHgwZiwgMHg0MywgMHgzZSwgMHgwMSwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZSwgMHgxMiwgMHgxMSwgMHhkMCwgMHhlNCwgMHhmNSwgMHgyYiwKKyAgMHhkMiwgMHgwNywgMHg5MCwgMHg3ZSwgMHgxYywgMHhlMCwgMHg2MCwgMHgwZSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHhlNX19LAorIHsweDAzODYsIDY0LCB7IDB4NDAsIDB4NDQsIDB4MDIsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MWQsIDB4ZTAsIDB4NjAsIDB4MDIsIDB4ZDIsIDB4MGIsIDB4OTAsIDB4N2UsCisgIDB4MWUsIDB4ZTAsIDB4NjAsIDB4MDgsIDB4NzUsIDB4MmMsIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4MzgsIDB4ZDIsIDB4MDcsIDB4OTAsIDB4N2UsIDB4MWYsIDB4ZTAsCisgIDB4NjAsIDB4MTEsIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4NzQsIDB4MzEsIDB4ZjAsIDB4NzQsIDB4MTUsIDB4ZjAsIDB4NzQsIDB4MzUsCisgIDB4ZjAsIDB4ZDIsIDB4MDMsIDB4YzIsIDB4MDUsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4Y2YsIDB4ZjAsIDB4MzAsIDB4MWEsIDB4NTQsIDB4ZTUsIDB4Mzh9fSwKKyB7MHgwM2M2LCA2NCwgeyAweDYwLCAweDAyLCAweDE1LCAweDM4LCAweDIwLCAweDEzLCAweDRiLCAweGU1LCAweDEzLCAweGQzLCAweDk0LCAweDAwLCAweDQwLCAweDA0LCAweDE1LCAweDEzLCAweDgwLAorICAweDQwLCAweDc1LCAweDEzLCAweDBhLCAweDMwLCAweDFiLCAweDAyLCAweGQyLCAweDEzLCAweDEyLCAweDEzLCAweDBmLCAweGVmLCAweDU0LCAweDAxLCAweGY1LAorICAweDE5LCAweDY1LCAweDJhLCAweDYwLCAweDA1LCAweDg1LCAweDE5LCAweDJhLCAweGQyLCAweDA3LCAweDEyLCAweDEzLCAweDRiLCAweGVmLCAweDU0LCAweDgwLAorICAweDY0LCAweDgwLCAweGY1LCAweDE5LCAweDY1LCAweDI2LCAweDYwLCAweDA1LCAweDg1LCAweDE5LCAweDI2LCAweGQyLCAweDA3LCAweDMwLCAweDBkfX0sCisgezB4MDQwNiwgNjQsIHsgMHgxMSwgMHgxMiwgMHgxMywgMHg0YiwgMHhlZiwgMHg1NCwgMHgxMCwgMHhmNSwgMHgxOSwgMHg2NSwgMHgyNSwgMHg2MCwgMHgwNSwgMHg4NSwgMHgxOSwgMHgyNSwgMHhkMiwKKyAgMHgwNywgMHgyMCwgMHgxYiwgMHgwMywgMHgwMiwgMHgwNywgMHhmMCwgMHgzMCwgMHgwYSwgMHgxOCwgMHgxMiwgMHgxMywgMHg4NywgMHhlZiwgMHhjMywgMHg5NSwKKyAgMHgzZCwgMHg0MCwgMHgwMywgMHgwMiwgMHgwNCwgMHhiMCwgMHg5MCwgMHg3ZiwgMHhjMSwgMHg3NCwgMHgwMSwgMHhmMCwgMHhjMiwgMHgwYSwgMHhjMiwgMHgwMCwKKyAgMHg4MCwgMHg3NywgMHgzMCwgMHgwNCwgMHgzYiwgMHg5MCwgMHg3ZiwgMHhjYSwgMHhlMCwgMHgyMCwgMHhlMSwgMHg2ZCwgMHgxMiwgMHgxMywgMHg4N319LAorIHsweDA0NDYsIDY0LCB7IDB4ZWYsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTAsIDB4NjQsIDB4OTAsIDB4N2QsIDB4NDAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGEsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZTAsCisgIDB4MTQsIDB4ZjUsIDB4MTksIDB4MjAsIDB4MDAsIDB4MTEsIDB4NjAsIDB4MGYsIDB4ZjUsIDB4MDgsIDB4N2UsIDB4N2QsIDB4N2YsIDB4NDEsIDB4NzUsIDB4MGMsCisgIDB4N2QsIDB4NzUsIDB4MGQsIDB4NDEsIDB4MTIsIDB4MGQsIDB4MTYsIDB4YzIsIDB4MDQsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZjAsIDB4ODAsIDB4MzksCisgIDB4OTAsIDB4N2YsIDB4Y2MsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MzIsIDB4MTIsIDB4MTMsIDB4ODcsIDB4ZWYsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTB9fSwKKyB7MHgwNDg2LCA2NCwgeyAweDI5LCAweDkwLCAweDdjLCAweGMwLCAweGUwLCAweDEzLCAweDkyLCAweDBhLCAweDkwLCAweDdmLCAweGNkLCAweGUwLCAweDE0LCAweGY1LCAweDE5LCAweDIwLCAweDAwLAorICAweDExLCAweDYwLCAweDBmLCAweGY1LCAweDA4LCAweDdlLCAweDdjLCAweDdmLCAweGMxLCAweDc1LCAweDBjLCAweDdjLCAweDc1LCAweDBkLCAweGMxLCAweDEyLAorICAweDBkLCAweDE2LCAweGQyLCAweDA0LCAweGU0LCAweDkwLCAweDdmLCAweGNkLCAweGYwLCAweDkwLCAweDdmLCAweGJhLCAweGUwLCAweDMwLCAweGUxLCAweDAzLAorICAweDAyLCAweDA1LCAweDM4LCAweDEyLCAweDEyLCAweDNmLCAweDhmLCAweDE5LCAweDEyLCAweDEzLCAweDkzLCAweDhmLCAweDM3LCAweGU1LCAweDE5fX0sCisgezB4MDRjNiwgNjQsIHsgMHhjMywgMHg5NSwgMHgzYiwgMHg1MCwgMHgwZiwgMHgxMiwgMHgxMywgMHg2ZiwgMHhlZiwgMHgzMCwgMHhlMCwgMHgwOCwgMHhlNSwgMHgzNywgMHgyMCwgMHhlNywgMHgwMywKKyAgMHgzMCwgMHgwYywgMHg1ZSwgMHhjMiwgMHgwYywgMHhlNSwgMHgxOSwgMHg2MCwgMHg1OCwgMHhiNCwgMHg4MCwgMHgwMywgMHg0MywgMHgzNywgMHgwMiwgMHhlNSwKKyAgMHgzNywgMHgzMCwgMHhlNywgMHgyNiwgMHhlNSwgMHgxOSwgMHhkMywgMHg5NCwgMHgyMCwgMHg0MCwgMHgwMywgMHg3NSwgMHgxOSwgMHgyMCwgMHg4NSwgMHgxOSwKKyAgMHgwOCwgMHg3ZSwgMHg3ZCwgMHg3ZiwgMHg4MCwgMHg3NSwgMHgwYywgMHg3ZCwgMHg3NSwgMHgwZCwgMHg4MCwgMHhhZiwgMHgzNywgMHgxMiwgMHgwZn19LAorIHsweDA1MDYsIDY0LCB7IDB4OTYsIDB4ZTUsIDB4MTksIDB4MjUsIDB4ZTAsIDB4OTAsIDB4N2YsIDB4YmIsIDB4ZjAsIDB4ODAsIDB4MjcsIDB4ZTUsIDB4MTksIDB4ZDMsIDB4OTQsIDB4M2YsIDB4NDAsCisgIDB4MDMsIDB4NzUsIDB4MTksIDB4M2YsIDB4ODUsIDB4MTksIDB4MDgsIDB4OTAsIDB4N2QsIDB4ODAsIDB4ZTUsIDB4MzcsIDB4ZjAsIDB4N2UsIDB4N2QsIDB4N2YsCisgIDB4ODEsIDB4NzUsIDB4MGMsIDB4N2QsIDB4NzUsIDB4MGQsIDB4ODEsIDB4MTIsIDB4MGQsIDB4M2IsIDB4ZTUsIDB4MTksIDB4MDQsIDB4OTAsIDB4N2YsIDB4YmIsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZDAsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDYsIDB4MjAsIDB4MDYsIDB4MDMsIDB4MDIsIDB4MDcsIDB4OTksIDB4ZTR9fSwKKyB7MHgwNTQ2LCA2NCwgeyAweGY1LCAweDE4LCAweDc0LCAweGMwLCAweDI1LCAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDE4LAorICAweDdjLCAweDAwLCAweDdiLCAweDAxLCAweDdhLCAweDdlLCAweDc5LCAweDIwLCAweDI0LCAweDIwLCAweGY5LCAweGVjLCAweDM0LCAweDdlLCAweGZhLCAweGVmLAorICAweDEyLCAweDBlLCAweGU0LCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDIwLCAweGQ3LCAweDkwLCAweDdlLCAweDIwLCAweGUwLCAweDYwLCAweDY4LAorICAweDkwLCAweDdlLCAweDIzLCAweGUwLCAweDYwLCAweDI0LCAweDdmLCAweDAxLCAweGU0LCAweGZkLCAweDEyLCAweDEyLCAweDFhLCAweDdmLCAweDAzfX0sCisgezB4MDU4NiwgNjQsIHsgMHg3ZCwgMHhjZCwgMHgxMiwgMHgxMiwgMHgxYSwgMHg0MywgMHg0NywgMHg4MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHhlNSwgMHg0NywgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZSwgMHgzMywgMHhmMCwgMHg4MCwgMHgzMCwgMHg5MCwgMHg3ZSwgMHgyMSwgMHhlMCwgMHhmZiwgMHgxMiwKKyAgMHgxMSwgMHgzOCwgMHg5MCwgMHg3ZSwgMHgyMiwgMHhlMCwgMHhmZiwgMHgxMiwgMHgxMSwgMHg1ZSwgMHg3ZiwgMHgwMSwgMHg5MCwgMHg3ZSwgMHgzMSwgMHhlMCwKKyAgMHhmZCwgMHgxMiwgMHgxMiwgMHgxYSwgMHg3ZiwgMHgwMywgMHg3ZCwgMHgwNywgMHgxMiwgMHgxMiwgMHgxYSwgMHg0MywgMHg0NywgMHg4MCwgMHg5MH19LAorIHsweDA1YzYsIDY0LCB7IDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDcsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjAsCisgIDB4ZTUsIDB4NDEsIDB4NDQsIDB4MDYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MjMsIDB4ZTAsIDB4NzAsIDB4MDYsIDB4OTAsIDB4N2UsCisgIDB4MzMsIDB4ZTAsIDB4NzAsIDB4MDgsIDB4ZTQsIDB4OTAsIDB4N2UsIDB4MzMsIDB4ZjAsIDB4NzUsIDB4MmUsIDB4ZmYsIDB4OTAsIDB4N2UsIDB4MjUsIDB4ZTAsCisgIDB4NjAsIDB4MTIsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4M2YsIDB4ZjUsIDB4NDUsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4OTB9fSwKKyB7MHgwNjA2LCA2NCwgeyAweGMwLCAweDAwLCAweGU1LCAweDQ1LCAweGYwLCAweDkwLCAweDdlLCAweDI3LCAweGUwLCAweDYwLCAweDJiLCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQzLAorICAweDgwLCAweDgwLCAweDAzLCAweDUzLCAweDQzLCAweDdmLCAweDUzLCAweDQzLCAweGZjLCAweDkwLCAweDdlLCAweDI5LCAweGUwLCAweDYwLCAweDExLCAweDQzLAorICAweDQzLCAweDAyLCAweGEzLCAweGUwLCAweGZmLCAweDEyLCAweDExLCAweDg0LCAweDkwLCAweDdlLCAweDJiLCAweGUwLCAweGZmLCAweDEyLCAweDExLCAweGFhLAorICAweGFmLCAweDQzLCAweDEyLCAweDExLCAweDEyLCAweDkwLCAweDdlLCAweDIzLCAweGUwLCAweDYwLCAweDA4LCAweDUzLCAweDQzLCAweDdmLCAweGFmfX0sCisgezB4MDY0NiwgNjQsIHsgMHg0MywgMHgxMiwgMHgxMSwgMHgxMiwgMHg5MCwgMHg3ZSwgMHgyYywgMHhlMCwgMHg2MCwgMHgxOCwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0NywgMHgwMiwKKyAgMHg4MCwgMHgwMywgMHg1MywgMHg0NywgMHhmZCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NywKKyAgMHhmMCwgMHg5MCwgMHg3ZSwgMHgyZSwgMHhlMCwgMHg2MCwgMHgxOCwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0NywgMHgwMSwgMHg4MCwgMHgwMywKKyAgMHg1MywgMHg0NywgMHhmZSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NywgMHhmMH19LAorIHsweDA2ODYsIDY0LCB7IDB4OTAsIDB4N2UsIDB4MzIsIDB4ZTAsIDB4ZjUsIDB4M2IsIDB4YTMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGUsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4M2QsIDB4YTMsIDB4ZTAsCisgIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDcsIDB4MTAsIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDcsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsCisgIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDcsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MzYsIDB4ZTAsIDB4NjAsIDB4MzIsIDB4NTMsIDB4NDUsIDB4YmYsIDB4OTAsCisgIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwNmM2LCA2NCwgeyAweDk4LCAweDc0LCAweDA5LCAweGYwLCAweDEyLCAweDEzLCAweDYzLCAweGVmLCAweDU0LCAweGZlLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDUzLCAweDNmLCAweGZkLAorICAweGU0LCAweGZmLCAweGFkLCAweDNmLCAweDEyLCAweDEyLCAweDFhLCAweGU0LCAweGY1LCAweDMzLCAweGY1LCAweDMyLCAweGQyLCAweDA4LCAweDkwLCAweDdlLAorICAweDM3LCAweGUwLCAweDYwLCAweDBmLCAweDQzLCAweDNmLCAweDAyLCAweGU0LCAweGZmLCAweGFkLCAweDNmLCAweDEyLCAweDEyLCAweDFhLCAweDc1LCAweDMyLAorICAweDAxLCAweGQyLCAweDA4LCAweDkwLCAweDdlLCAweDM4LCAweGUwLCAweDYwLCAweDEwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBhLCAweGYwfX0sCisgezB4MDcwNiwgNjQsIHsgMHhlNSwgMHg0MSwgMHg0NCwgMHgwNCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHhkMiwgMHgwMCwgMHg5MCwgMHg3ZSwgMHgzOSwgMHhlMCwgMHg2MCwgMHgxMSwgMHg0MywKKyAgMHg0NSwgMHg0MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwKKyAgMHg5MCwgMHg3ZSwgMHgzYSwgMHhlMCwgMHg2MCwgMHgwZiwgMHg1MywgMHgzZiwgMHhmZSwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZiwgMHgxMiwgMHgxMiwgMHgxYSwKKyAgMHg3NSwgMHgzNCwgMHgwMSwgMHhkMiwgMHgwOCwgMHg5MCwgMHg3ZSwgMHgzYiwgMHhlMCwgMHg2MCwgMHgwZiwgMHg0MywgMHgzZiwgMHgwMSwgMHhlNH19LAorIHsweDA3NDYsIDY0LCB7IDB4ZmYsIDB4YWQsIDB4M2YsIDB4MTIsIDB4MTIsIDB4MWEsIDB4ZTQsIDB4ZjUsIDB4MzQsIDB4ZDIsIDB4MDgsIDB4OTAsIDB4N2UsIDB4M2MsIDB4ZTAsIDB4NjAsIDB4MGUsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4ZTUsIDB4NDEsIDB4NDQsIDB4MDIsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsCisgIDB4M2QsIDB4ZTAsIDB4NjAsIDB4MDIsIDB4ZDIsIDB4MGMsIDB4OTAsIDB4N2UsIDB4M2UsIDB4ZTAsIDB4NjAsIDB4MDgsIDB4NzUsIDB4MzUsIDB4MDEsIDB4ZTQsCisgIDB4ZjUsIDB4MzksIDB4ZDIsIDB4MDgsIDB4OTAsIDB4N2UsIDB4M2YsIDB4ZTAsIDB4NjAsIDB4MTEsIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTN9fSwKKyB7MHgwNzg2LCA2NCwgeyAweGYwLCAweDc0LCAweDMzLCAweGYwLCAweDc0LCAweDE2LCAweGYwLCAweDc0LCAweDM2LCAweGYwLCAweGQyLCAweDA0LCAweGMyLCAweDA2LCAweGU0LCAweDkwLCAweDdmLAorICAweGQxLCAweGYwLCAweDMwLCAweDFhLCAweDU0LCAweGU1LCAweDM5LCAweDYwLCAweDAyLCAweDE1LCAweDM5LCAweDMwLCAweDEzLCAweDRiLCAweGU1LCAweDEzLAorICAweGQzLCAweDk0LCAweDAwLCAweDQwLCAweDA0LCAweDE1LCAweDEzLCAweDgwLCAweDQwLCAweDc1LCAweDEzLCAweDBhLCAweDMwLCAweDFiLCAweDAyLCAweGMyLAorICAweDEzLCAweDEyLCAweDEzLCAweDYzLCAweGVmLCAweDU0LCAweDAxLCAweGY1LCAweDE5LCAweDY1LCAweDMzLCAweDYwLCAweDA1LCAweDg1LCAweDE5fX0sCisgezB4MDdjNiwgNjQsIHsgMHgzMywgMHhkMiwgMHgwOCwgMHgxMiwgMHgxMywgMHg5ZiwgMHhlZiwgMHg1NCwgMHg4MCwgMHg2NCwgMHg4MCwgMHhmNSwgMHgxOSwgMHg2NSwgMHgyZiwgMHg2MCwgMHgwNSwKKyAgMHg4NSwgMHgxOSwgMHgyZiwgMHhkMiwgMHgwOCwgMHgzMCwgMHgwZSwgMHgxMSwgMHgxMiwgMHgxMywgMHg5ZiwgMHhlZiwgMHg1NCwgMHgxMCwgMHhmNSwgMHgxOSwKKyAgMHg2NSwgMHgyZSwgMHg2MCwgMHgwNSwgMHg4NSwgMHgxOSwgMHgyZSwgMHhkMiwgMHgwOCwgMHgzMCwgMHgxYSwgMHgyYSwgMHg5MCwgMHg3ZiwgMHhkMiwgMHhlMCwKKyAgMHgyMCwgMHhlMSwgMHgyMywgMHg5MCwgMHg3YiwgMHg0MCwgMHhlMCwgMHg2MCwgMHgwOSwgMHhlMCwgMHhmNSwgMHgxNSwgMHg5MCwgMHg3YiwgMHg0Mn19LAorIHsweDA4MDYsIDY0LCB7IDB4ZTAsIDB4ZjUsIDB4MTYsIDB4OTAsIDB4N2IsIDB4NDEsIDB4ZTAsIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTcsIDB4ZjAsIDB4NzQsIDB4MzcsCisgIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4ZDMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YzIsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MDksIDB4MjQsCisgIDB4ZTUsIDB4MGEsIDB4NzAsIDB4NDAsIDB4MzAsIDB4MDcsIDB4MzksIDB4ZTUsIDB4MzgsIDB4NzAsIDB4MzUsIDB4YzIsIDB4MDcsIDB4ZjUsIDB4MTgsIDB4N2UsCisgIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MjQsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTIsIDB4MGUsIDB4OWV9fSwKKyB7MHgwODQ2LCA2NCwgeyAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDE4LCAweGU1LAorICAweDE4LCAweGI0LCAweDA5LCAweGRiLCAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDA5LCAweGYwLCAweDc1LCAweDM4LCAweDEwLCAweGU0LCAweGY1LCAweDJjLAorICAweDc1LCAweDBhLCAweDAxLCAweDIyLCAweGU1LCAweDBhLCAweDY0LCAweDAxLCAweDcwLCAweDQwLCAweDMwLCAweDA4LCAweDM5LCAweGU1LCAweDM5LCAweDcwLAorICAweDM1LCAweGMyLCAweDA4LCAweGY1LCAweDE4LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDJkLCAweDI1LCAweDE4LCAweGY5LCAweGVlfX0sCisgezB4MDg4NiwgNjQsIHsgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgwZSwgMHg5ZSwgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNSwgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwKKyAgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwOSwgMHhkYiwgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwOSwgMHhmMCwKKyAgMHg3NSwgMHgzOSwgMHgxMCwgMHhlNCwgMHhmNSwgMHgzNSwgMHg3NSwgMHgwYSwgMHgwMiwgMHgyMiwgMHhlNSwgMHgwYSwgMHg2NCwgMHgwMiwgMHg3MCwgMHgzNiwKKyAgMHgzMCwgMHgxNCwgMHgyZiwgMHhjMiwgMHgxNCwgMHhmNSwgMHgxOCwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwgMHgwZSwgMHgyNSwgMHgxOH19LAorIHsweDA4YzYsIDY0LCB7IDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTIsIDB4MGUsIDB4OWUsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjUsIDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsCisgIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MDUsIDB4ZGIsIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsCisgIDB4MDUsIDB4ZjAsIDB4NzUsIDB4MGEsIDB4MDMsIDB4MjIsIDB4ZTUsIDB4MTUsIDB4NjAsIDB4MzAsIDB4MTUsIDB4MTUsIDB4ZTQsIDB4ZjUsIDB4MTgsIDB4N2UsCisgIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MTQsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTIsIDB4MGUsIDB4OWV9fSwKKyB7MHgwOTA2LCA2NCwgeyAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDE4LCAweGU1LAorICAweDE4LCAweGI0LCAweDAzLCAweGRiLCAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDAzLCAweGYwLCAweGU0LCAweGY1LCAweDBhLCAweDIyLCAweDkwLCAweDdmLAorICAweGU5LCAweGUwLCAweDEyLCAweDBlLCAweGY2LCAweDBhLCAweDBjLCAweDAwLCAweDBhLCAweDgwLCAweDAxLCAweDBhLCAweGVjLCAweDAzLCAweDA5LCAweDQ4LAorICAweDA2LCAweDA5LCAweGZmLCAweDA4LCAweDA5LCAweGY5LCAweDA5LCAweDA5LCAweGUxLCAweDBhLCAweDA5LCAweGYwLCAweDBiLCAweDAwLCAweDAwfX0sCisgezB4MDk0NiwgNjQsIHsgMHgwYiwgMHgzYiwgMHg5MCwgMHg3ZiwgMHhlYiwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxOSwgMHgxNCwgMHg2MCwgMHg2MSwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywKKyAgMHgwMiwgMHgwOSwgMHhkNywgMHg3NCwgMHgxOSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHg3NCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwKKyAgMHgwYiwgMHg0MiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgwNCwgMHg3ZiwgMHgwMiwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMywgMHg3NSwgMHg4MiwKKyAgMHg4MiwgMHg3NSwgMHg4MywgMHgxOSwgMHhlZiwgMHhmMCwgMHg3NSwgMHg4MiwgMHg3YiwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg3NSwgMHg4Mn19LAorIHsweDA5ODYsIDY0LCB7IDB4NzQsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4NzUsIDB4ODIsIDB4NjYsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4NzUsIDB4ODIsIDB4NTgsIDB4NzUsIDB4ODMsCisgIDB4MTksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4MDQsIDB4NzUsIDB4ODIsIDB4MTcsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4NzQsIDB4MTksCisgIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4NzQsIDB4MTIsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4NDIsIDB4OTAsIDB4N2YsIDB4ZWEsCisgIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MGYsIDB4MWMsIDB4ZWEsIDB4NDksIDB4NjAsIDB4MGQsIDB4ZWEsIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4ZTl9fSwKKyB7MHgwOWM2LCA2NCwgeyAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDBiLCAweDQyLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDQyLAorICAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDQyLCAweDkwLCAweDdmLCAweDAwLCAweGU1LCAweDA5LCAweGYwLAorICAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDQyLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGY1LCAweDA5LCAweDAyLAorICAweDBiLCAweDQyLCAweDEyLCAweDBiLCAweDRhLCAweDAyLCAweDBiLCAweDQyLCAweDkwLCAweDdmLCAweDAwLCAweDc0LCAweDAxLCAweGYwLCAweDkwfX0sCisgezB4MGEwNiwgNjQsIHsgMHg3ZiwgMHhiNSwgMHhmMCwgMHgwMiwgMHgwYiwgMHg0MiwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHg3ZiwgMHg2MCwgMHgyNCwgMHgxNCwgMHg2MCwgMHgzMSwKKyAgMHgyNCwgMHgwMiwgMHg3MCwgMHg1YiwgMHhhMiwgMHgxMCwgMHhlNCwgMHgzMywgMHhmZiwgMHgyNSwgMHhlMCwgMHhmZiwgMHhhMiwgMHgxNiwgMHhlNCwgMHgzMywKKyAgMHg0ZiwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwYiwKKyAgMHg0MiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMn19LAorIHsweDBhNDYsIDY0LCB7IDB4MGIsIDB4NDIsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsCisgIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4OTAsCisgIDB4N2YsIDB4MDAsIDB4ZjAsIDB4ZTQsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4NDIsIDB4OTAsCisgIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4NDIsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4ZmV9fSwKKyB7MHgwYTg2LCA2NCwgeyAweDYwLCAweDFkLCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDBiLCAweDQyLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGI0LCAweDAxLCAweDA1LCAweGMyLAorICAweDEwLCAweDAyLCAweDBiLCAweDQyLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDQyLCAweDkwLCAweDdmLAorICAweGVhLCAweGUwLCAweDcwLCAweDM4LCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLAorICAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzfX0sCisgezB4MGFjNiwgNjQsIHsgMHhlNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHg1NCwgMHg4MCwgMHhmZiwgMHgxMywgMHgxMywgMHgxMywgMHg1NCwgMHgxZiwgMHhmZiwgMHhlMCwgMHg1NCwKKyAgMHgwNywgMHgyZiwgMHg5MCwgMHg3ZiwgMHhkNywgMHhmMCwgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHg4MCwgMHg1ZiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwKKyAgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHg1NiwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxOCwgMHgyNCwgMHgwMiwgMHg3MCwKKyAgMHg0YSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhiNCwgMHgwMSwgMHgwNCwgMHhkMiwgMHgxMCwgMHg4MCwgMHgzZiwgMHg5MCwgMHg3ZiwgMHhiNH19LAorIHsweDBiMDYsIDY0LCB7IDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MzYsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsCisgIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MTAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsCisgIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MDcsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTB9fSwKKyB7MHgwYjQ2LCA2NCwgeyAweDQ0LCAweDAyLCAweGYwLCAweDIyLCAweGU0LCAweDkwLCAweDdmLCAweDkzLCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LCAweDMwLCAweGYwLCAweGU0LCAweDkwLAorICAweDdmLCAweDk2LCAweGYwLCAweDkwLCAweDdmLCAweDk1LCAweDc0LCAweGMwLCAweGYwLCAweDkwLCAweDdmLCAweDllLCAweDc0LCAweDNmLCAweGYwLCAweDkwLAorICAweDdmLCAweDk4LCAweDc0LCAweDE4LCAweGYwLCAweGU0LCAweGY1LCAweDhlLCAweDkwLCAweDdmLCAweGRmLCAweDc0LCAweGZmLCAweGYwLCAweDkwLCAweDdmLAorICAweGRlLCAweGYwLCAweGU0LCAweGY1LCAweDI0LCAweDc1LCAweDE4LCAweDAxLCAweDdiLCAweDAwLCAweDc0LCAweDI0LCAweDI1LCAweDE4LCAweGY5fX0sCisgezB4MGI4NiwgNjQsIHsgMHhlNCwgMHgzNCwgMHgwMCwgMHhmYSwgMHhlNCwgMHgxMiwgMHgwZSwgMHhlNCwgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwOSwgMHhlYSwgMHg3NSwgMHgzYSwKKyAgMHgwMSwgMHhlNCwgMHhmNSwgMHgzOCwgMHhmNSwgMHgxMywgMHhmNSwgMHgzNiwgMHhjMiwgMHgwNywgMHhjMiwgMHgwYiwgMHhjMiwgMHgwNSwgMHhjMiwgMHgwMCwKKyAgMHhjMiwgMHgwOSwgMHhjMiwgMHgxMywgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg3NSwgMHg0NCwgMHgwMywgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHg3NCwgMHgwMywgMHhmMCwgMHg3ZiwgMHgwYywgMHhlNCwgMHhmZCwgMHgxMiwgMHgxMSwgMHhkMCwgMHg3ZiwgMHgxMCwgMHg4ZiwgMHg0MiwgMHgxMn19LAorIHsweDBiYzYsIDY0LCB7IDB4MTAsIDB4YTAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4N2YsIDB4MDEsIDB4OGYsIDB4NDAsIDB4ZWYsIDB4NDQsIDB4MDYsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4NzUsIDB4NDYsIDB4ODAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4ODAsCisgIDB4ZjAsIDB4MGYsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4ZDAsIDB4ZTQsIDB4ZmYsIDB4N2UsIDB4YTMsIDB4YWQsIDB4MDYsIDB4OGQsIDB4M2UsIDB4MTIsCisgIDB4MTEsIDB4ZDAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4N2YsIDB4MDV9fSwKKyB7MHgwYzA2LCA2NCwgeyAweDdkLCAweDdmLCAweDEyLCAweDExLCAweGQwLCAweDdmLCAweDAxLCAweDEyLCAweDEyLCAweDg5LCAweDdmLCAweDAzLCAweDdkLCAweDA3LCAweDEyLCAweDExLCAweGQwLAorICAweDdmLCAweDEzLCAweDdkLCAweDA5LCAweDEyLCAweDExLCAweGQwLCAweDIwLCAweDFiLCAweDAzLCAweDAyLCAweDBjLCAweGM5LCAweDc1LCAweDJkLCAweDAxLAorICAweDc1LCAweDE4LCAweDAxLCAweDdiLCAweDAwLCAweDc0LCAweDJkLCAweDI1LCAweDE4LCAweGY5LCAweGU0LCAweDM0LCAweDAwLCAweGZhLCAweGU0LCAweDEyLAorICAweDBlLCAweGU0LCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDA5LCAweGVhLCAweDc1LCAweDNiLCAweDAxLCAweGU0LCAweGY1LCAweDM5fX0sCisgezB4MGM0NiwgNjQsIHsgMHhmNSwgMHgxMywgMHhmNSwgMHgzNywgMHhjMiwgMHgwOCwgMHhjMiwgMHgwYywgMHhjMiwgMHgwNiwgMHhjMiwgMHgwMCwgMHhjMiwgMHgwYSwgMHhjMiwgMHgxMywgMHg5MCwKKyAgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg3NSwgMHg0NSwgMHgwMywgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHgwMywgMHhmMCwgMHg3ZiwgMHgwYywKKyAgMHhlNCwgMHhmZCwgMHgxMiwgMHgxMiwgMHgxYSwgMHg3ZiwgMHgxMCwgMHg4ZiwgMHg0MywgMHgxMiwgMHgxMSwgMHgxMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwKKyAgMHgwYSwgMHhmMCwgMHg3ZiwgMHgwMSwgMHg4ZiwgMHg0MSwgMHhlZiwgMHg0NCwgMHgwNiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3Zn19LAorIHsweDBjODYsIDY0LCB7IDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4NzUsIDB4NDcsIDB4ODAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4MGYsIDB4ZTQsIDB4ZmQsIDB4MTIsCisgIDB4MTIsIDB4MWEsIDB4ZTQsIDB4ZmYsIDB4N2UsIDB4YTMsIDB4YWQsIDB4MDYsIDB4OGQsIDB4M2YsIDB4MTIsIDB4MTIsIDB4MWEsIDB4OTAsIDB4N2YsIDB4OTgsCisgIDB4NzQsIDB4MDksIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4N2YsIDB4MDUsIDB4N2QsIDB4N2YsIDB4MTIsIDB4MTIsIDB4MWEsIDB4N2YsCisgIDB4MDEsIDB4MTIsIDB4MTIsIDB4YWEsIDB4N2YsIDB4MDMsIDB4N2QsIDB4MDcsIDB4MTIsIDB4MTIsIDB4MWEsIDB4N2YsIDB4MTMsIDB4N2QsIDB4MDl9fSwKKyB7MHgwY2M2LCA2NCwgeyAweDEyLCAweDEyLCAweDFhLCAweGQyLCAweDEyLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweGFmLCAweDA4LCAweGU1LCAweDBkLCAweGY1LAorICAweDgyLCAweGU1LCAweDBjLCAweGY1LCAweDgzLCAweGMyLCAweGFmLCAweDA1LCAweDg2LCAweDkwLCAweGMwLCAweDAwLCAweDA1LCAweDg2LCAweGUwLCAweGEzLAorICAweDA1LCAweDg2LCAweGYwLCAweDA1LCAweDg2LCAweGRmLCAweGY3LCAweGQyLCAweGFmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLAorICAweGFmLCAweDA4LCAweGU1LCAweDBkLCAweGY1LCAweDgyLCAweGU1LCAweDBjLCAweGY1LCAweDgzLCAweGMyLCAweGFmLCAweDA1LCAweDg2LCAweDkwfX0sCisgezB4MGQwNiwgNjQsIHsgMHhjMCwgMHgwMCwgMHhlMCwgMHgwNSwgMHg4NiwgMHhmMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhkZiwgMHhmNywgMHgwNSwgMHg4NiwgMHhkMiwgMHhhZiwgMHgyMiwgMHg5MCwKKyAgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOCwgMHhmMCwgMHhhZiwgMHgwOCwgMHhlNSwgMHgwZCwgMHhmNSwgMHg4MiwgMHhlNSwgMHgwYywgMHhmNSwgMHg4MywgMHhjMiwKKyAgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwgMHhjMCwgMHgwMCwgMHgwNSwgMHg4NiwgMHhlMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhmMCwgMHgwNSwgMHg4NiwgMHhkZiwKKyAgMHhmNywgMHhkMiwgMHhhZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOCwgMHhmMCwgMHhhZiwgMHgwOCwgMHhlNSwgMHgwZCwgMHhmNX19LAorIHsweDBkNDYsIDY0LCB7IDB4ODIsIDB4ZTUsIDB4MGMsIDB4ZjUsIDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsIDB4ODYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4MDUsIDB4ODYsIDB4ZjAsIDB4YTMsCisgIDB4MDUsIDB4ODYsIDB4ZGYsIDB4ZjcsIDB4MDUsIDB4ODYsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4NzQsIDB4MDAsIDB4ZjUsIDB4ODYsIDB4OTAsIDB4ZmQsIDB4YTUsCisgIDB4N2MsIDB4MDUsIDB4YTMsIDB4ZTUsIDB4ODIsIDB4NDUsIDB4ODMsIDB4NzAsIDB4ZjksIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4ODAsCisgIDB4ZjAsIDB4NDMsIDB4ODcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ZDIsIDB4MTksIDB4OTAsIDB4N2YsIDB4OTJ9fSwKKyB7MHgwZDg2LCA2NCwgeyAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDkwLCAweDdmLCAweGFlLCAweGUwLCAweGZmLCAweGQzLCAweDkyLCAweDEwLCAweGU0LCAweDMzLCAweGZlLCAweGVmLCAweDRlLAorICAweGYwLCAweGQyLCAweGU4LCAweDQzLCAweGQ4LCAweDIwLCAweDkwLCAweDdmLCAweGRlLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGRmLCAweGYwLAorICAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweGE5LCAweGYwLCAweDkwLCAweDdmLCAweGFhLCAweGYwLCAweDUzLCAweDkxLAorICAweGVmLCAweDkwLCAweDdmLCAweGFmLCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGFlLCAweGUwLCAweDQ0LCAweDBkLCAweGYwfX0sCisgezB4MGRjNiwgNjQsIHsgMHhkMiwgMHhhZiwgMHhkMiwgMHgxYSwgMHgxMiwgMHgxMiwgMHg2NCwgMHhjMiwgMHgxMSwgMHhlNCwgMHhmNSwgMHgwYiwgMHhmNSwgMHgxMywgMHhjMiwgMHgxNywgMHhjMiwKKyAgMHgxMiwgMHg5MCwgMHg3ZiwgMHhhMSwgMHgwNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHg2NSwgMHgxNywgMHg2MCwgMHgxMCwgMHgzMCwgMHgxMiwKKyAgMHgwNSwgMHhkMiwgMHgxYSwgMHgxMiwgMHgwMCwgMHg0NiwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHhmNSwgMHgxNywgMHg4MCwgMHgwOCwgMHgzMCwgMHgxMiwKKyAgMHgwNSwgMHhjMiwgMHgxYSwgMHgxMiwgMHgwMCwgMHg0NiwgMHgzMCwgMHgxMSwgMHgwNywgMHhjMiwgMHgxMSwgMHgxMiwgMHgwOSwgMHgyNSwgMHg4MH19LAorIHsweDBlMDYsIDY0LCB7IDB4ZDYsIDB4MzAsIDB4MTgsIDB4ZDMsIDB4YzIsIDB4MTgsIDB4MTIsIDB4MTMsIDB4YWIsIDB4ODAsIDB4Y2MsIDB4MjIsIDB4NzgsIDB4N2YsIDB4ZTQsIDB4ZjYsIDB4ZDgsCisgIDB4ZmQsIDB4NzUsIDB4ODEsIDB4NDcsIDB4MDIsIDB4MGUsIDB4NTksIDB4MDIsIDB4MGQsIDB4ODEsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsCisgIDB4YTMsIDB4NDAsIDB4MDMsIDB4ZjYsIDB4ODAsIDB4MDEsIDB4ZjIsIDB4MDgsIDB4ZGYsIDB4ZjQsIDB4ODAsIDB4MjksIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsCisgIDB4NTQsIDB4MDcsIDB4MjQsIDB4MGMsIDB4YzgsIDB4YzMsIDB4MzMsIDB4YzQsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MjAsIDB4YzgsIDB4ODMsIDB4NDB9fSwKKyB7MHgwZTQ2LCA2NCwgeyAweDA0LCAweGY0LCAweDU2LCAweDgwLCAweDAxLCAweDQ2LCAweGY2LCAweGRmLCAweGU0LCAweDgwLCAweDBiLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLAorICAweDQwLCAweDgwLCAweDkwLCAweDEyLCAweGNiLCAweGU0LCAweDdlLCAweDAxLCAweDkzLCAweDYwLCAweGJjLCAweGEzLCAweGZmLCAweDU0LCAweDNmLCAweDMwLAorICAweGU1LCAweDA5LCAweDU0LCAweDFmLCAweGZlLCAweGU0LCAweDkzLCAweGEzLCAweDYwLCAweDAxLCAweDBlLCAweGNmLCAweDU0LCAweGMwLCAweDI1LCAweGUwLAorICAweDYwLCAweGE4LCAweDQwLCAweGI4LCAweGU0LCAweDkzLCAweGEzLCAweGZhLCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweGU0LCAweDkzLCAweGEzfX0sCisgezB4MGU4NiwgNjQsIHsgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhmMCwgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywKKyAgMHhjYSwgMHhkZiwgMHhlOSwgMHhkZSwgMHhlNywgMHg4MCwgMHhiZSwgMHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHgyMiwKKyAgMHg1MCwgMHgwMiwgMHhlNywgMHgyMiwgMHhiYiwgMHhmZSwgMHgwMiwgMHhlMywgMHgyMiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMiwKKyAgMHhiYiwgMHgwMSwgMHgwYywgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHgyMn19LAorIHsweDBlYzYsIDY0LCB7IDB4NTAsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4MjIsCisgIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MDYsCisgIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZjAsIDB4MjIsIDB4NTAsIDB4MDIsIDB4ZjcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDEsIDB4ZjMsIDB4MjIsIDB4ZDAsCisgIDB4ODMsIDB4ZDAsIDB4ODIsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4NzAsIDB4MTIsIDB4NzQsIDB4MDEsIDB4OTMsIDB4NzAsIDB4MGQsIDB4YTMsIDB4YTN9fSwKKyB7MHgwZjA2LCA2NCwgeyAweDkzLCAweGY4LCAweDc0LCAweDAxLCAweDkzLCAweGY1LCAweDgyLCAweDg4LCAweDgzLCAweGU0LCAweDczLCAweDc0LCAweDAyLCAweDkzLCAweDY4LCAweDYwLCAweGVmLAorICAweGEzLCAweGEzLCAweGEzLCAweDgwLCAweGRmLCAweDhmLCAweDE4LCAweGU0LCAweGY1LCAweDE5LCAweDc1LCAweDFhLCAweGZmLCAweDc1LCAweDFiLCAweDE5LAorICAweDc1LCAweDFjLCAweDg2LCAweGFiLCAweDFhLCAweGFhLCAweDFiLCAweGE5LCAweDFjLCAweDkwLCAweDAwLCAweDAxLCAweDEyLCAweDBlLCAweGI3LCAweGI0LAorICAweDAzLCAweDFkLCAweGFmLCAweDE5LCAweDA1LCAweDE5LCAweGVmLCAweGI1LCAweDE4LCAweDAxLCAweDIyLCAweDEyLCAweDBlLCAweDllLCAweDdlfX0sCisgezB4MGY0NiwgNjQsIHsgMHgwMCwgMHgyOSwgMHhmZiwgMHhlZSwgMHgzYSwgMHhhOSwgMHgwNywgMHg3NSwgMHgxYSwgMHhmZiwgMHhmNSwgMHgxYiwgMHg4OSwgMHgxYywgMHg4MCwgMHhkNCwgMHg3YiwKKyAgMHgwMCwgMHg3YSwgMHgwMCwgMHg3OSwgMHgwMCwgMHgyMiwgMHg4ZiwgMHgxYSwgMHgwNSwgMHgwZCwgMHhlNSwgMHgwZCwgMHhhZSwgMHgwYywgMHg3MCwgMHgwMiwKKyAgMHgwNSwgMHgwYywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlNSwgMHgxYSwgMHhmMCwgMHgxMiwgMHgwMCwgMHgzNiwgMHgwNSwgMHgwZCwgMHhlNSwKKyAgMHgwZCwgMHhhYywgMHgwYywgMHg3MCwgMHgwMiwgMHgwNSwgMHgwYywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHgxNX19LAorIHsweDBmODYsIDY0LCB7IDB4MDgsIDB4ZTUsIDB4MDgsIDB4NjAsIDB4MGEsIDB4MTIsIDB4MTMsIDB4M2YsIDB4OGYsIDB4MWEsIDB4ZWYsIDB4NDIsIDB4MzYsIDB4ODAsIDB4Y2EsIDB4MjIsIDB4OGYsCisgIDB4MWEsIDB4MDUsIDB4MGQsIDB4ZTUsIDB4MGQsIDB4YWUsIDB4MGMsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MGMsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsCisgIDB4ZTUsIDB4MWEsIDB4ZjAsIDB4MTIsIDB4MTMsIDB4NTcsIDB4MDUsIDB4MGQsIDB4ZTUsIDB4MGQsIDB4YWMsIDB4MGMsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MGMsCisgIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MTUsIDB4MDgsIDB4ZTUsIDB4MDgsIDB4NjAsIDB4MGEsIDB4MTIsIDB4MTN9fSwKKyB7MHgwZmM2LCA2NCwgeyAweDkzLCAweDhmLCAweDFhLCAweGVmLCAweDQyLCAweDM3LCAweDgwLCAweGNhLCAweDIyLCAweGU0LCAweDkwLCAweDdmLCAweDkzLCAweGYwLCAweDkwLCAweDdmLCAweDljLAorICAweDc0LCAweDMwLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk2LCAweGYwLCAweDkwLCAweDdmLCAweDk1LCAweGYwLCAweDkwLCAweDdmLCAweDllLCAweDc0LAorICAweDI3LCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDIwLCAweGYwLCAweDkwLCAweDdmLCAweDllLCAweDc0LCAweDA3LCAweGYwLCAweGU0LCAweDkwLAorICAweDdmLCAweDk0LCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweDc0LCAweGZmLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk3LCAweGYwLCAweDIyfX0sCisgezB4MTAwNiwgNjQsIHsgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhkMiwgMHgxMSwKKyAgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwKKyAgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwKKyAgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhkMiwgMHgxOCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwOH19LAorIHsweDEwNDYsIDY0LCB7IDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4OTAsIDB4N2YsIDB4OTgsCisgIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4OTAsCisgIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjB9fSwKKyB7MHgxMDg2LCA2NCwgeyAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLAorICAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLAorICAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyfX0sCisgezB4MTBjNiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwKKyAgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHg0NCwgMHg1NCwgMHg3ZiwKKyAgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwKKyAgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OH19LAorIHsweDExMDYsIDY0LCB7IDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsCisgIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsCisgIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2Z9fSwKKyB7MHgxMTQ2LCA2NCwgeyAweDk4LCAweDc0LCAweDA4LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LAorICAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweDkwLCAweGMwLCAweDAwLAorICAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDA5LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmfX0sCisgezB4MTE4NiwgNjQsIHsgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwKKyAgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwZSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYn19LAorIHsweDExYzYsIDY0LCB7IDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsCisgIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTcsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTUsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MTIsIDB4MTMsCisgIDB4MjcsIDB4OGYsIDB4MWEsIDB4MTIsIDB4MTMsIDB4MjcsIDB4OGYsIDB4MWIsIDB4ZTUsIDB4MWEsIDB4NjUsIDB4MWIsIDB4NjAsIDB4MTIsIDB4MTJ9fSwKKyB7MHgxMjA2LCA2NCwgeyAweDEzLCAweDI3LCAweDhmLCAweDFhLCAweGU1LCAweDFhLCAweDY1LCAweDFiLCAweDYwLCAweDA3LCAweDEyLCAweDEzLCAweDI3LCAweDhmLCAweDFiLCAweDgwLCAweGU4LAorICAweGFmLCAweDFhLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLAorICAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBmLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LAorICAweDBkLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVkLCAweGYwLCAweDIyLCAweDEyLCAweDEzLCAweDdiLCAweDhmLCAweDFhLCAweDEyLCAweDEzfX0sCisgezB4MTI0NiwgNjQsIHsgMHg3YiwgMHg4ZiwgMHgxYiwgMHhlNSwgMHgxYSwgMHg2NSwgMHgxYiwgMHg2MCwgMHgxMiwgMHgxMiwgMHgxMywgMHg3YiwgMHg4ZiwgMHgxYSwgMHhlNSwgMHgxYSwgMHg2NSwKKyAgMHgxYiwgMHg2MCwgMHgwNywgMHgxMiwgMHgxMywgMHg3YiwgMHg4ZiwgMHgxYiwgMHg4MCwgMHhlOCwgMHhhZiwgMHgxYSwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhkNiwKKyAgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHgzMCwgMHgxYSwgMHgwNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg3ZiwKKyAgMHhmNCwgMHg3ZSwgMHgwMSwgMHgxMiwgMHgxMiwgMHhlNywgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmNywgMHhmMCwgMHhlMCwgMHg0NH19LAorIHsweDEyODYsIDY0LCB7IDB4MDQsIDB4ZjAsIDB4MjIsIDB4YWUsIDB4MDcsIDB4ZTQsIDB4ZmYsIDB4ZTUsIDB4M2UsIDB4NTQsIDB4N2YsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4ZDAsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWUsIDB4ZjAsIDB4ZTQsIDB4ZTUsIDB4M2UsIDB4NDQsIDB4ODAsIDB4ZmQsIDB4MTIsCisgIDB4MTEsIDB4ZDAsIDB4MjIsIDB4YWUsIDB4MDcsIDB4ZTQsIDB4ZmYsIDB4ZTUsIDB4M2YsIDB4NTQsIDB4N2YsIDB4ZmQsIDB4MTIsIDB4MTIsIDB4MWEsIDB4OTAsCisgIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDksIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWUsIDB4ZjAsIDB4ZTQsIDB4ZTUsIDB4M2YsIDB4NDQsIDB4ODB9fSwKKyB7MHgxMmM2LCA2NCwgeyAweGZkLCAweDEyLCAweDEyLCAweDFhLCAweDIyLCAweDA1LCAweDBlLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDE0LCAweDAzLCAweDAwLCAweDAwLAorICAweGMxLCAweDExLCAweGMxLCAweDE4LCAweGMxLCAweDk1LCAweGMxLCAweDEwLCAweGMxLCAweDE2LCAweDAxLCAweDBhLCAweDAwLCAweGMxLCAweDliLCAweDAwLAorICAweDhlLCAweDE4LCAweDhmLCAweDE5LCAweGU1LCAweDE5LCAweDE1LCAweDE5LCAweGFlLCAweDE4LCAweDcwLCAweDAyLCAweDE1LCAweDE4LCAweDRlLCAweDYwLAorICAweDA1LCAweDEyLCAweDBkLCAweDYwLCAweDgwLCAweGVlLCAweDIyLCAweDAwLCAweDAwLCAweDAyLCAweDEwLCAweDA2LCAweDAwLCAweDAyLCAweDEzfX0sCisgezB4MTMwNiwgNjQsIHsgMHgwNCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMiwgMHgxMCwgMHgyZCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwKKyAgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNSwgMHhmMCwgMHg5MH19LAorIHsweDEzNDYsIDY0LCB7IDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTYsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsCisgIDB4MDksIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmZ9fSwKKyB7MHgxMzg2LCA2NCwgeyAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LAorICAweDBkLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBlLCAweGYwLCAweDkwLCAweGMwLAorICAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDEyLCAweDBmLCAweGNmLCAweDEyLCAweDBkLCAweDcxLCAweDEyLCAweDBiLCAweDRhLCAweDIyLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTNjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNDQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTQ4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNTA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTU0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNWM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTYwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE2NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNjg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTZjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNzQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTc4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxODA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTg0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxOGM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDEwLCAweDAxLCAweGZmLCAweDAwfX0sCisgezB4MTkwNiwgNjQsIHsgMHgwMCwgMHg0MCwgMHhjZCwgMHgwNiwgMHgxMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMiwgMHgwOSwgMHgwMiwgMHg3NCwgMHgwMCwgMHgwMSwKKyAgMHgwMSwgMHgwMCwgMHhhMCwgMHgzMiwgMHgwOSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMSwKKyAgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMywgMHgwMiwgMHg0MCwKKyAgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNSwgMHgwMiwgMHg0MCwgMHgwMH19LAorIHsweDE5NDYsIDY0LCB7IDB4MDAsIDB4MDcsIDB4MDUsIDB4MDYsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDcsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsCisgIDB4ODEsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4ODMsIDB4MDIsCisgIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODQsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODUsIDB4MDIsIDB4NDAsIDB4MDAsCisgIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODYsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODcsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDF9fSwKKyB7MHgxOTg2LCA2NCwgeyAweDA0LCAweDAzLCAweDA5LCAweDA0LCAweDQ4LCAweDAzLCAweDRiLCAweDAwLCAweDY1LCAweDAwLCAweDc5LCAweDAwLCAweDczLCAweDAwLCAweDcwLCAweDAwLCAweDYxLAorICAweDAwLCAweDZlLCAweDAwLCAweDJjLCAweDAwLCAweDIwLCAweDAwLCAweDYxLCAweDAwLCAweDIwLCAweDAwLCAweDY0LCAweDAwLCAweDY5LCAweDAwLCAweDc2LAorICAweDAwLCAweDY5LCAweDAwLCAweDczLCAweDAwLCAweDY5LCAweDAwLCAweDZmLCAweDAwLCAweDZlLCAweDAwLCAweDIwLCAweDAwLCAweDZmLCAweDAwLCAweDY2LAorICAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDZlLCAweDAwLCAweDZmLCAweDAwLCAweDUzLCAweDAwLCAweDc5LCAweDAwfX0sCisgezB4MTljNiwgNjQsIHsgMHg3MywgMHgwMCwgMHgyMCwgMHgwMCwgMHg0OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2MywgMHgwMCwgMHgyZSwgMHgwMCwgMHgzNiwgMHgwMywgMHg0YiwgMHgwMCwgMHg2NSwKKyAgMHgwMCwgMHg3OSwgMHgwMCwgMHg3MywgMHgwMCwgMHg3MCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1NSwgMHgwMCwgMHg1MywKKyAgMHgwMCwgMHg0MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1MywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2YywKKyAgMHgwMCwgMHgyMCwgMHgwMCwgMHg0MSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg3MCwgMHgwMCwgMHg3NCwgMHgwMCwgMHg2NSwgMHgwMH19LAorIHsweDFhMDYsICA0LCB7IDB4NzIsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHhmZmZmLCAgMCwgezB4MDB9fQorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTQ5bXNnLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2E0OW1zZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2M2IyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2E0OW1zZy5oCkBAIC0wLDAgKzEsMjgyIEBACisvKgorCXVzYTQ5bXNnLmgKKworCUNvcHlyaWdodCAoQykgMTk5OC0yMDAwIElubm9TeXMgSW5jb3Jwb3JhdGVkLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorCVRoaXMgZmlsZSBpcyBhdmFpbGFibGUgdW5kZXIgYSBCU0Qtc3R5bGUgY29weXJpZ2h0CisKKwlLZXlzcGFuIFVTQiBBc3luYyBNZXNzYWdlIEZvcm1hdHMgZm9yIHRoZSBVU0E0OVcKKworCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorCW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKwltZXQ6CisKKwkxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhpcyBsaWNlbmNlIHRleHQKKyAgIAl3aXRob3V0IG1vZGlmaWNhdGlvbiwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgICAJZGlzY2xhaW1lci4gIFRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IG5vdGljZSBtdXN0IGFwcGVhciBpbW1lZGlhdGVseSBhdAorICAgCXRoZSBiZWdpbm5pbmcgb2YgYWxsIHNvdXJjZSBmaWxlczoKKworICAgICAgICAJQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgSW5ub1N5cyBJbmNvcnBvcmF0ZWQuICBBbGwgUmlnaHRzIFJlc2VydmVkCisKKyAgICAgICAgCVRoaXMgZmlsZSBpcyBhdmFpbGFibGUgdW5kZXIgYSBCU0Qtc3R5bGUgY29weXJpZ2h0CisKKwkyLiBUaGUgbmFtZSBvZiBJbm5vU3lzIEluY29ycG9yYXRlZCBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgICAJcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgICAJcGVybWlzc2lvbi4KKworCVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgSU5OT1NZUyBDT1JQLiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisJSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworCU9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCisJTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorCUlORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworCShJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorCVNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisJQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisJTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorCU9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKwlTVUNIIERBTUFHRS4gICAgCisKKwk0dGggcmV2aXNpb246IFVTQTQ5VyB2ZXJzaW9uCisKKwlCdWZmZXIgZm9ybWF0cyBmb3IgUlgvVFggZGF0YSBtZXNzYWdlcyBhcmUgbm90IGRlZmluZWQgYnkKKwlhIHN0cnVjdHVyZSwgYnV0IGFyZSBkZXNjcmliZWQgaGVyZToKKworCVVTQiBPVVQgKGhvc3QgLT4gVVNBeHgsIHRyYW5zbWl0KSBtZXNzYWdlcyBjb250YWluIGEgCisJUkVRVUVTVF9BQ0sgaW5kaWNhdG9yIChzZXQgdG8gMHhmZiB0byByZXF1ZXN0IGFuIEFDSyBhdCB0aGUgCisJY29tcGxldGlvbiBvZiB0cmFuc21pdDsgMHgwMCBvdGhlcndpc2UpLCBmb2xsb3dlZCBieSBkYXRhOgorCisJCVJRU1RBQ0sgREFUIERBVCBEQVQgLi4uCisKKwl3aXRoIGEgdG90YWwgZGF0YSBsZW5ndGggb2YgNjMuCisKKwlVU0IgSU4gKFVTQXh4IC0+IGhvc3QsIHJlY2VpdmUpIG1lc3NhZ2VzIGJlZ2luIHdpdGggYSBzdGF0dXMKKwlieXRlIGluIHdoaWNoIHRoZSAweDgwIGJpdCBpcyBlaXRoZXI6CisJCQkJICAgCQorCQkoYSkJMHg4MCBiaXQgY2xlYXIKKwkJCWluZGljYXRlcyB0aGF0IHRoZSBieXRlcyBmb2xsb3dpbmcgaXQgYXJlIGFsbCBkYXRhCisJCQlieXRlczoKKworCQkJCVNUQVQgREFUQSBEQVRBIERBVEEgREFUQSBEQVRBIC4uLgorCisJCQlmb3IgYSB0b3RhbCBvZiB1cCB0byA2MyBEQVRBIGJ5dGVzLAorCisJb3I6CisKKwkJKGIpCTB4ODAgYml0IHNldAorCQkJaW5kaWF0ZXMgdGhhdCB0aGUgYnl0ZXMgZm9sbG93aW5nIGFsdGVybmF0ZSBkYXRhIGFuZAorCQkJc3RhdHVzIGJ5dGVzOgorCisJCQkJU1RBVCBEQVRBIFNUQVQgREFUQSBTVEFUIERBVEEgU1RBVCBEQVRBIC4uLgorCisJCQlmb3IgYSB0b3RhbCBvZiB1cCB0byAzMiBEQVRBIGJ5dGVzLgorCisJVGhlIHZhbGlkIGJpdHMgaW4gdGhlIFNUQVQgYnl0ZXMgYXJlOgorCisJCU9WRVJSVU4JMHgwMgorCQlQQVJJVFkJMHgwNAorCQlGUkFNSU5HCTB4MDgKKwkJQlJFQUsJMHgxMAorCisJTm90ZXM6CisJCisJKDEpIFRoZSBPVkVSUlVOIGJpdCBjYW4gYXBwZWFyIGluIGVpdGhlciAoYSkgb3IgKGIpIGZvcm1hdAorCQltZXNzYWdlcywgYnV0IHRoZSBidXQgdGhlIFBBUklUWS9GUkFNSU5HL0JSRUFLIGJpdHMKKwkJb25seSBhcHBlYXIgaW4gKGIpIGZvcm1hdCBtZXNzYWdlcy4KKwkoMikgRm9yIHRoZSBob3N0IHRvIGRldGVybWluZSB0aGUgZXhhY3QgcG9pbnQgYXQgd2hpY2ggdGhlCisJCW92ZXJydW4gb2NjdXJyZWQgKHRvIGlkZW50aWZ5IHRoZSBwb2ludCBpbiB0aGUgZGF0YQorCQlzdHJlYW0gYXQgd2hpY2ggdGhlIGRhdGEgd2FzIGxvc3QpLCBpdCBuZWVkcyB0byBjb3VudAorCQkxMjggY2hhcmFjdGVycywgc3RhcnRpbmcgYXQgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUKKwkJbWVzc2FnZSBpbiB3aGljaCBPVkVSUlVOIHdhcyByZXBvcnRlZDsgdGhlIGxvc3QgY2hhcmFjdGVyKHMpCisJCXdvdWxkIGhhdmUgYmVlbiByZWNlaXZlZCBiZXR3ZWVuIHRoZSAxMjh0aCBhbmQgMTI5dGgKKwkJY2hhcmFjdGVycy4KKwkoMykJQW4gUlggZGF0YSBtZXNzYWdlIGluIHdoaWNoIHRoZSBmaXJzdCBieXRlIGhhcyAweDgwIGNsZWFyCisJCXNlcnZlcyBhcyBhICJicmVhayBvZmYiIGluZGljYXRvci4KKwkoNCkJYSBjb250cm9sIG1lc3NhZ2Ugc3BlY2lmeWluZyBkaXNhYmxlUG9ydCB3aWxsIGJlIGFuc3dlcmVkCisJCXdpdGggYSBzdGF0dXMgbWVzc2FnZSwgYnV0IG5vIGZ1cnRoZXIgc3RhdHVzIHdpbGwgYmUgc2VudAorCQl1bnRpbCBhIGNvbnRyb2wgbWVzc2FnZXMgd2l0aCBlbmFibGVQb3J0IGlzIHNlbnQKKworCXJldmlzaW9uIGhpc3Rvcnk6CisKKwkxOTk5ZmViMTAJYWRkIHJlcG9ydEhza2lhQ2hhbmdlcyB0byBhbGxvdyB1cyB0byBpZ25vcmUgdGhlbQorCTE5OTlmZWIxMAlhZGQgdHhBY2tUaHJlc2hvbGQgZm9yIGZhc3QrbG9vc2UgdGhyb3VnaHB1dCBlbmhhbmNlbWVudAorCTE5OTltYXIzMAliZWVmIHVwIHN1cHBvcnQgZm9yIFJYIGVycm9yIHJlcG9ydGluZworCTE5OTlhcHIxNAlhZGQgcmVzZXREYXRhVG9nZ2xlIHRvIGNvbnRyb2wgbWVzc2FnZQorCTIwMDBqYW4wNAltZXJnZSB3aXRoIHVzYTE3bXNnLmgKKwkyMDAwbWFyMDgJY2xvbmUgZnJvbSB1c2EyNm1zZy5oIC0+IHVzYTQ5bXNnLmgKKwkyMDAwbWFyMDkJY2hhbmdlIHRvIHN1cHBvcnQgNCBwb3J0cworCTIwMDBtYXkwMwljaGFuZ2UgZXh0ZXJuYWwgY2xvY2tpbmcgdG8gbWF0Y2ggVVNBLTQ5VyBoYXJkd2FyZQorCTIwMDBqdW4wMQlhZGQgZXh0ZW5kZWQgQlNELXN0eWxlIGNvcHlyaWdodCB0ZXh0CisJMjAwMWp1bDA1CWNoYW5nZSBtZXNzYWdlIGZvcm1hdCB0byBpbXByb3ZlIE9WRVJSVU4gY2FzZQorKi8KKworI2lmbmRlZglfX1VTQTQ5TVNHX18KKyNkZWZpbmUJX19VU0E0OU1TR19fCisKKworLyoKKwlIb3N0LT5kZXZpY2UgbWVzc2FnZXMgc2VudCBvbiB0aGUgZ2xvYmFsIGNvbnRyb2wgZW5kcG9pbnQ6CisKKwlwb3J0TnVtYmVyCW1lc3NhZ2UKKwktLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJMCwxLDIsMwkJcG9ydENvbnRyb2xNZXNzYWdlCisJMHg4MAkJZ2xvYmFsQ29udHJvbE1lc3NhZ2UKKyovCisKK3N0cnVjdCBrZXlzcGFuX3VzYTQ5X3BvcnRDb250cm9sTWVzc2FnZQoreworCS8qCisJCTAuCTAvMS8yLzMgCXBvcnQgY29udHJvbCBtZXNzYWdlIGZvbGxvd3MKKwkJCTB4ODAgc2V0CW5vbi1wb3J0IGNvbnRyb2wgbWVzc2FnZSBmb2xsb3dzCisJKi8KKwl1OAlwb3J0TnVtYmVyLAorCisJLyoKKwkJdGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mICJjb21tYW5kcyIgc2VudCBpbiB0aGUgY29udHJvbCBtZXNzYWdlOgorCisJCTEuCWNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3aGljaCBtdXN0IGJlIHJlcXVlc3RlZCBieSBzZXR0aW5nCisJCQl0aGUgY29ycmVzcG9uZGluZyAic2V0IiBmbGFnIChhbmQgc2hvdWxkIG9ubHkgYmUgcmVxdWVzdGVkCisJCQl3aGVuIG5lY2Vzc2FyeSwgdG8gcmVkdWNlIG92ZXJoZWFkIG9uIHRoZSBVU0EyNik6CisJKi8KKwkJc2V0Q2xvY2tpbmcsCS8vIGhvc3QgcmVxdWVzdHMgYmF1ZCByYXRlIGJlIHNldAorCQliYXVkTG8sCQkJLy8gaG9zdCBkb2VzIGJhdWQgZGl2aXNvciBjYWxjdWxhdGlvbgorCQliYXVkSGksCQkJLy8gYmF1ZEhpIGlzIG9ubHkgdXNlZCBmb3IgZmlyc3QgcG9ydCAoZ2l2ZXMgbG93ZXIgcmF0ZXMpCisJCXByZXNjYWxlciwJCS8vIHNwZWNpZmllZCBhcyBOLzg7IHZhbHVlcyA4LWZmIGFyZSB2YWxpZAorCQkJCQkJLy8gbXVzdCBiZSBzZXQgYW55IHRpbWUgaW50ZXJuYWwgYmF1ZCByYXRlIGlzIHNldDsKKwkJdHhDbG9ja2luZywJCS8vIDA9aW50ZXJuYWwsIDE9ZXh0ZXJuYWwvRFNSCisJCXJ4Q2xvY2tpbmcsCQkvLyAwPWludGVybmFsLCAxPWV4dGVybmFsL0RTUgorCisJCXNldExjciwJCQkvLyBob3N0IHJlcXVlc3RzIGxjciBiZSBzZXQKKwkJbGNyLAkJCS8vIHVzZSBQQVJJVFksIFNUT1BCSVRTLCBEQVRBQklUUyBiZWxvdworCisJCXNldEZsb3dDb250cm9sLAkvLyBob3N0IHJlcXVlc3RzIGZsb3cgY29udHJvbCBiZSBzZXQKKwkJY3RzRmxvd0NvbnRyb2wsCS8vIDE9dXNlIENUUyBmbG93IGNvbnRyb2wsIDA9ZG9uJ3QKKwkJeG9uRmxvd0NvbnRyb2wsCS8vIDE9dXNlIFhPTi9YT0ZGIGZsb3cgY29udHJvbCwgMD1kb24ndAorCQl4b25DaGFyLAkJLy8gc3BlY2lmaWVkIGluIGN1cnJlbnQgY2hhcmFjdGVyIGZvcm1hdAorCQl4b2ZmQ2hhciwJCS8vIHNwZWNpZmllZCBpbiBjdXJyZW50IGNoYXJhY3RlciBmb3JtYXQKKworCQlzZXRSdHMsCQkJLy8gaG9zdCByZXF1ZXN0cyBSVFMgb3V0cHV0IGJlIHNldAorCQlydHMsCQkJLy8gMT1hY3RpdmUsIDA9aW5hY3RpdmUKKworCQlzZXREdHIsCQkJLy8gaG9zdCByZXF1ZXN0cyBEVFIgb3V0cHV0IGJlIHNldAorCQlkdHI7CQkJLy8gMT1vbiwgMD1vZmYKKworCisJLyoKKwkJMy4JY29uZmlndXJhdGlvbiBkYXRhIHdoaWNoIGlzIHNpbXBseSB1c2VkIGFzIGlzIChubyBvdmVyaGVhZCwKKwkJCWJ1dCBtdXN0IGJlIHNwZWNpZmllZCBjb3JyZWN0bHkgaW4gZXZlcnkgaG9zdCBtZXNzYWdlKS4KKwkqLworCXU4CWZvcndhcmRpbmdMZW5ndGgsICAvLyBmb3J3YXJkIHdoZW4gdGhpcyBudW1iZXIgb2YgY2hhcnMgYXZhaWxhYmxlCisJCWRzckZsb3dDb250cm9sLAkvLyAxPXVzZSBEU1IgZmxvdyBjb250cm9sLCAwPWRvbid0CisJCXR4QWNrVGhyZXNob2xkLAkvLyAwPW5vdCBhbGxvd2VkLCAxPW5vcm1hbCwgMi0yNTUgZGVsaXZlciBBQ0sgZmFzdGVyCisJCWxvb3BiYWNrTW9kZTsJLy8gMD1ubyBsb29wYmFjaywgMT1sb29wYmFjayBlbmFibGVkCisKKwkvKgorCQk0Lgljb21tYW5kcyB3aGljaCBhcmUgZmxhZ3Mgb25seTsgdGhlc2UgYXJlIHByb2Nlc3NlZCBpbiBvcmRlcgorCQkJKHNvIHRoYXQsIGUuZy4sIGlmIGJvdGggX3R4T24gYW5kIF90eE9mZiBmbGFncyBhcmUgc2V0LCB0aGUKKwkJCXBvcnQgZW5kcyBpbiBhIFRYX09GRiBzdGF0ZSk7IGFueSBub24temVybyB2YWx1ZSBpcyByZXNwZWN0ZWQKKwkqLworCXU4CV90eE9uLAkJCS8vIGVuYWJsZSB0cmFuc21pdHRpbmcgKGFuZCBjb250aW51ZSBpZiB0aGVyZSdzIGRhdGEpCisJCV90eE9mZiwJCQkvLyBzdG9wIHRyYW5zbWl0dGluZworCQl0eEZsdXNoLAkJLy8gdG9zcyBvdXRib3VuZCBkYXRhCisJCXR4QnJlYWssCQkvLyB0dXJuIG9uIGJyZWFrIChjbGVhcmVkIGJ5IF90eE9uKQorCQlyeE9uLAkJCS8vIHR1cm4gb24gcmVjZWl2ZXIKKwkJcnhPZmYsCQkJLy8gdHVybiBvZmYgcmVjZWl2ZXIKKwkJcnhGbHVzaCwJCS8vIHRvc3MgaW5ib3VuZCBkYXRhCisJCXJ4Rm9yd2FyZCwJCS8vIGZvcndhcmQgYWxsIGluYm91bmQgZGF0YSwgTk9XIChhcyBpZiBmd2RMZW49PTEpCisJCXJldHVyblN0YXR1cywJLy8gcmV0dXJuIGN1cnJlbnQgc3RhdHVzIChldmVuIGlmIGl0IGhhc24ndCBjaGFuZ2VkKQorCQlyZXNldERhdGFUb2dnbGUsLy8gcmVzZXQgZGF0YSB0b2dnbGUgc3RhdGUgdG8gREFUQTAKKwkJZW5hYmxlUG9ydCwJCS8vIHN0YXJ0IHNlcnZpY2luZyBwb3J0IChtb3ZlIGRhdGEsIGNoZWNrIHN0YXR1cykKKwkJZGlzYWJsZVBvcnQ7CS8vIHN0b3Agc2VydmljaW5nIHBvcnQgKGRvZXMgaW1wbGljaXQgdHgvcnggZmx1c2gvb2ZmKQorCQorfTsKKworLy8gZGVmaW5lcyBmb3IgYml0cyBpbiBsY3IKKyNkZWZpbmUJVVNBX0RBVEFCSVRTXzUJCTB4MDAKKyNkZWZpbmUJVVNBX0RBVEFCSVRTXzYJCTB4MDEKKyNkZWZpbmUJVVNBX0RBVEFCSVRTXzcJCTB4MDIKKyNkZWZpbmUJVVNBX0RBVEFCSVRTXzgJCTB4MDMKKyNkZWZpbmUJU1RPUEJJVFNfNTY3OF8xCQkweDAwCS8vIDEgc3RvcCBiaXQgZm9yIGFsbCBieXRlIHNpemVzCisjZGVmaW5lCVNUT1BCSVRTXzVfMXA1CQkweDA0CS8vIDEuNSBzdG9wIGJpdHMgZm9yIDUtYml0IGJ5dGUKKyNkZWZpbmUJU1RPUEJJVFNfNjc4XzIJCTB4MDQJLy8gMiBzdG9wIGJpdHMgZm9yIDYvNy84LWJpdCBieXRlCisjZGVmaW5lCVVTQV9QQVJJVFlfTk9ORQkJMHgwMAorI2RlZmluZQlVU0FfUEFSSVRZX09ERAkJMHgwOAorI2RlZmluZQlVU0FfUEFSSVRZX0VWRU4JCTB4MTgKKyNkZWZpbmUJUEFSSVRZXzEJCQkweDI4CisjZGVmaW5lCVBBUklUWV8wCQkJMHgzOAorCisvKgorCWR1cmluZyBub3JtYWwgb3BlcmF0aW9uLCBzdGF0dXMgbWVzc2FnZXMgYXJlIHJldHVybmVkIAorCXRvIHRoZSBob3N0IHdoZW5ldmVyIHRoZSBib2FyZCBkZXRlY3RzIGNoYW5nZXMuICBJbiBzb21lCisJY2lyY3Vtc3RhbmNlcyAoZS5nLiBXaW5kb3dzKSwgc3RhdHVzIG1lc3NhZ2VzIGZyb20gdGhlCisJZGV2aWNlIGNhdXNlIHByb2JsZW1zOyB0byBzaHV0IHRoZW0gb2ZmLCB0aGUgaG9zdCBpc3N1ZXMKKwlhIGNvbnRyb2wgbWVzc2FnZSB3aXRoIHRoZSBkaXNhYmxlU3RhdHVzTWVzc2FnZXMgZmxhZ3MKKwlzZXQgKHRvIGFueSBub24temVybyB2YWx1ZSkuICBUaGUgZGV2aWNlIHdpbGwgcmVzcG9uZCB0bworCXRoaXMgbWVzc2FnZSwgYW5kIHRoZW4gc3VwcHJlc3MgZnVydGhlciBzdGF0dXMgbWVzc2FnZXM7CisJaXQgd2lsbCByZXN1bWUgc2VuZGluZyBzdGF0dXMgbWVzc2FnZXMgYW55IHRpbWUgdGhlIGhvc3QKKwlzZW5kcyBhbnkgY29udHJvbCBtZXNzYWdlIChlaXRoZXIgZ2xvYmFsIG9yIHBvcnQtc3BlY2lmaWMpLgorKi8KKworc3RydWN0IGtleXNwYW5fdXNhNDlfZ2xvYmFsQ29udHJvbE1lc3NhZ2UKK3sKKwl1OAlwb3J0TnVtYmVyLAkJCS8vIDB4ODAKKwkJc2VuZEdsb2JhbFN0YXR1cywJLy8gMS8yPW51bWJlciBvZiBzdGF0dXMgcmVzcG9uc2VzIHJlcXVlc3RlZAorCQlyZXNldFN0YXR1c1RvZ2dsZSwJLy8gMT1yZXNldCBnbG9iYWwgc3RhdHVzIHRvZ2dsZQorCQlyZXNldFN0YXR1c0NvdW50LAkvLyBhIGN5Y2xpbmcgdmFsdWUKKwkJcmVtb3RlV2FrZXVwRW5hYmxlLAkJLy8gMHgxMD1QMSwgMHgyMD1QMiwgMHg0MD1QMywgMHg4MD1QNAorCQlkaXNhYmxlU3RhdHVzTWVzc2FnZXM7CS8vIDE9c2VuZCBubyBzdGF0dXMgdW50aWwgaG9zdCB0YWxrcworfTsKKworLyoKKwlEZXZpY2UtPmhvc3QgbWVzc2FnZXMgc2VuZCBvbiB0aGUgZ2xvYmFsIHN0YXR1cyBlbmRwb2ludAorCisJcG9ydE51bWJlcgkJCW1lc3NhZ2UKKwktLS0tLS0tLS0tCQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkweDAwLDB4MDEsMHgwMiwweDAzCXBvcnRTdGF0dXNNZXNzYWdlCisJMHg4MAkJCQlnbG9iYWxTdGF0dXNNZXNzYWdlCisJMHg4MQkJCQlnbG9iYWxEZWJ1Z01lc3NhZ2UKKyovCisKK3N0cnVjdCBrZXlzcGFuX3VzYTQ5X3BvcnRTdGF0dXNNZXNzYWdlCS8vIG9uZSBmb3IgZWFjaCBwb3J0Cit7CisJdTgJcG9ydE51bWJlciwJCS8vIDAsMSwyLDMKKwkJY3RzLAkJCS8vIHJlcG9ydHMgQ1RTIHBpbgorCQlkY2QsCQkJLy8gcmVwb3J0cyBEQ0QgcGluCisJCWRzciwJCQkvLyByZXBvcnRzIERTUiBwaW4KKwkJcmksCQkJCS8vIHJlcG9ydHMgUkkgcGluCisJCV90eE9mZiwJCQkvLyB0cmFuc21pdCBoYXMgYmVlbiBkaXNhYmxlZCAoYnkgaG9zdCkKKwkJX3R4WG9mZiwJCS8vIHRyYW5zbWl0IGlzIGluIFhPRkYgc3RhdGUgKGVpdGhlciBob3N0IG9yIFJYIFhPRkYpCisJCXJ4RW5hYmxlZCwJCS8vIGFzIGNvbmZpZ3VyZWQgYnkgcnhPbi9yeE9mZiAxPW9uLCAwPW9mZgorCQljb250cm9sUmVzcG9uc2UsLy8gMT1hIGNvbnRyb2wgbWVzc2FnZSBoYXMgYmVlbiBwcm9jZXNzZWQKKwkJdHhBY2ssCQkJLy8gQUNLIChkYXRhIFRYIGNvbXBsZXRlKQorCQlyczIzMnZhbGlkOwkJLy8gUlMtMjMyIHNpZ25hbCB2YWxpZAorfTsKKworLy8gYml0cyBpbiBSWCBkYXRhIG1lc3NhZ2Ugd2hlbiBTVEFUIGJ5dGUgaXMgaW5jbHVkZWQKKyNkZWZpbmUJUlhFUlJPUl9PVkVSUlVOCTB4MDIKKyNkZWZpbmUJUlhFUlJPUl9QQVJJVFkJMHgwNAorI2RlZmluZQlSWEVSUk9SX0ZSQU1JTkcJMHgwOAorI2RlZmluZQlSWEVSUk9SX0JSRUFLCTB4MTAKKworc3RydWN0IGtleXNwYW5fdXNhNDlfZ2xvYmFsU3RhdHVzTWVzc2FnZQoreworCXU4CXBvcnROdW1iZXIsCQkJLy8gMHg4MD1nbG9iYWxTdGF0dXNNZXNzYWdlCisJCXNlbmRHbG9iYWxTdGF0dXMsCS8vIGZyb20gcmVxdWVzdCwgZGVjcmVtZW50ZWQKKwkJcmVzZXRTdGF0dXNDb3VudDsJLy8gYXMgaW4gcmVxdWVzdAorfTsKKworc3RydWN0IGtleXNwYW5fdXNhNDlfZ2xvYmFsRGVidWdNZXNzYWdlCit7CisJdTgJcG9ydE51bWJlciwJCQkvLyAweDgxPWdsb2JhbERlYnVnTWVzc2FnZQorCQluLAkJCQkJLy8gdHlwaWNhbGx5IGEgY291bnQvc3RhdHVzIGJ5dGUKKwkJYjsJCQkJCS8vIHR5cGljYWxseSBhIGRhdGEgYnl0ZQorfTsKKworLy8gaWU6IHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhbiBFWlVTQiBlbmRwb2ludCBidWZmZXIKKyNkZWZpbmUJTUFYX0RBVEFfTEVOCQkJNjQKKworLy8gdXBkYXRlIHN0YXR1cyBhcHByb3guIDYwIHRpbWVzIGEgc2Vjb25kICgxNi42NjY2IG1zKQorI2RlZmluZQlTVEFUVVNfVVBEQVRFX0lOVEVSVkFMCTE2CisKKy8vIHN0YXR1cyByYXRpb25pbmcgdHVuaW5nIHZhbHVlIChlYWNoIHBvcnQgZ2V0cyBjaGVja2VkIGVhY2ggbiBtcykKKyNkZWZpbmUJU1RBVFVTX1JBVElPTgkxMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTQ5d19mdy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhNDl3X2Z3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMyNGRhY2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2E0OXdfZncuaApAQCAtMCwwICsxLDQ2NCBAQAorLyoga2V5c3Bhbl91c2E0OXdfZncuaAorCisJVGhlIGZpcm13YXJlIGNvbnRhaW5lZCBoZXJlaW4gYXMga2V5c3Bhbl91c2E0OXdfZncuaCBpcworCisJCUNvcHlyaWdodCAoQykgMTk5OS0yMDAxCisJCUtleXNwYW4sIEEgZGl2aXNpb24gb2YgSW5ub1N5cyBJbmNvcnBvcmF0ZWQgKCJLZXlzcGFuIikKKwkJCisJYXMgYW4gdW5wdWJsaXNoZWQgd29yay4gVGhpcyBub3RpY2UgZG9lcyBub3QgaW1wbHkgdW5yZXN0cmljdGVkIG9yCisJcHVibGljIGFjY2VzcyB0byB0aGUgc291cmNlIGNvZGUgZnJvbSB3aGljaCB0aGlzIGZpcm13YXJlIGltYWdlIGlzCisJZGVyaXZlZC4gIEV4Y2VwdCBhcyBub3RlZCBiZWxvdyB0aGlzIGZpcm13YXJlIGltYWdlIG1heSBub3QgYmUgCisJcmVwcm9kdWNlZCwgdXNlZCwgc29sZCBvciB0cmFuc2ZlcnJlZCB0byBhbnkgdGhpcmQgcGFydHkgd2l0aG91dCAKKwlLZXlzcGFuJ3MgcHJpb3Igd3JpdHRlbiBjb25zZW50LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworCVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSAKKwlpbWFnZSBhcyBwYXJ0IG9mIGEgTGludXggb3Igb3RoZXIgT3BlbiBTb3VyY2Ugb3BlcmF0aW5nIHN5c3RlbSBrZXJuZWwgCisJaW4gdGV4dCBvciBiaW5hcnkgZm9ybSBhcyByZXF1aXJlZC4gCisKKwlUaGlzIGZpcm13YXJlIG1heSBub3QgYmUgbW9kaWZpZWQgYW5kIG1heSBvbmx5IGJlIHVzZWQgd2l0aCAgCisJS2V5c3BhbiBoYXJkd2FyZS4gIERpc3RyaWJ1dGlvbiBhbmQvb3IgTW9kaWZpY2F0aW9uIG9mIHRoZSAKKwlrZXlzcGFuLmMgZHJpdmVyIHdoaWNoIGluY2x1ZGVzIHRoaXMgZmlybXdhcmUsIGluIHdob2xlIG9yIGluIAorCXBhcnQsIHJlcXVpcmVzIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBzdGF0ZW1lbnQuIgorCisqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGV6dXNiX2hleF9yZWNvcmQga2V5c3Bhbl91c2E0OXdfZmlybXdhcmVbXSA9IHsKKyB7MHgwMDMzLCAgMywgeyAweDAyLCAweDE4LCAweGZifX0sCisgezB4MDAzNiwgMTIsIHsgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMn19LAorIHsweDAwNDYsIDE2LCB7IDB4ZTQsIDB4ZmYsIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmUsIDB4ZTUsIDB4MTV9fSwKKyB7MHgwMDU2LCAxNiwgeyAweDI0LCAweDA0LCAweGZkLCAweGU0LCAweDM1LCAweDE0LCAweGZhLCAweGE5LCAweDA1LCAweDdiLCAweDAxLCAweGVmLCAweDdjLCAweDAwLCAweDI5LCAweGY5fX0sCisgezB4MDA2NiwgMTYsIHsgMHhlYywgMHgzYSwgMHhmYSwgMHhlZSwgMHgxMiwgMHgxMSwgMHhmMSwgMHgwZiwgMHhiZiwgMHgyMiwgMHhkNywgMHhlNSwgMHgxNSwgMHgyNCwgMHgwNSwgMHhmNX19LAorIHsweDAwNzYsIDE2LCB7IDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDEsIDB4MzQsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MDl9fSwKKyB7MHgwMDg2LCAxNiwgeyAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDcwLCAweDBlLCAweGU1LCAweDE1LCAweDI0LCAweDBhLCAweGY1LCAweDgyfX0sCisgezB4MDA5NiwgMTYsIHsgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgxOCwgMHg3ZiwgMHgwMSwgMHhlNCwgMHhmZCwgMHgxMiwgMHgxNiwgMHg0NywgMHhlNX19LAorIHsweDAwYTYsIDE2LCB7IDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4Y2YsIDB4ZjAsIDB4ODAsIDB4NDF9fSwKKyB7MHgwMGI2LCAxNiwgeyAweGU1LCAweDE1LCAweDI0LCAweDA2LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweDEyLCAweDE2LCAweDc2fX0sCisgezB4MDBjNiwgMTYsIHsgMHhlNSwgMHgxNSwgMHgyNCwgMHgwNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHgxMiwgMHgwMCwgMHgwM319LAorIHsweDAwZDYsIDE2LCB7IDB4N2YsIDB4MDEsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MDgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmQsIDB4MTJ9fSwKKyB7MHgwMGU2LCAxNiwgeyAweDE2LCAweDQ3LCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDMwfX0sCisgezB4MDBmNiwgMTYsIHsgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMH19LAorIHsweDAwMDMsIDE2LCB7IDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzR9fSwKKyB7MHgwMDEzLCAxNiwgeyAweDAxLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDAzLCAweGYwLCAweGU1LCAweDE1LCAweDI0fX0sCisgezB4MDAyMywgMTYsIHsgMHgzNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMn19LAorIHsweDAwNDMsICAzLCB7IDB4MDIsIDB4MWIsIDB4MDB9fSwKKyB7MHgwMDAwLCAgMywgeyAweDAyLCAweDEwLCAweDk1fX0sCisgezB4MDEwNiwgNjQsIHsgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwNCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywKKyAgMHhlMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwMiwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNiwgMHhmNSwKKyAgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwNiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwKKyAgMHgwYiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgzMiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgwY319LAorIHsweDAxNDYsIDY0LCB7IDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4M2YsIDB4ZmYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzcsIDB4ZjUsIDB4ODIsCisgIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsCisgIDB4MzcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsCisgIDB4MGQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDIsIDB4NGYsIDB4ZTV9fSwKKyB7MHgwMTg2LCA2NCwgeyAweDE1LCAweDI0LCAweDE3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDExLCAweGU1LCAweDE1LCAweDI0LCAweDMyLAorICAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDA0LCAweGYwLCAweDgwLCAweDBmLCAweGU1LCAweDE1LCAweDI0LAorICAweDMyLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweGU0LCAweGZmLCAweGU1LCAweDE1LAorICAweDI0LCAweDMyLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZkLCAweDEyLCAweDE2LCAweDQ3LCAweGU1fX0sCisgezB4MDFjNiwgNjQsIHsgMHgxNSwgMHgyNCwgMHgwZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgxMSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMywKKyAgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHg4MCwgMHgwZiwgMHhlNSwgMHgxNSwgMHgyNCwKKyAgMHgzMywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMywKKyAgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmYywgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgwZn19LAorIHsweDAyMDYsIDY0LCB7IDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MmYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzMsIDB4ZjUsIDB4ODIsIDB4ZTQsCisgIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MTAsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsCisgIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTUsIDB4ZTcsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MTEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsCisgIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTYsIDB4MTcsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzMsIDB4ZjUsIDB4ODIsIDB4ZTR9fSwKKyB7MHgwMjQ2LCA2NCwgeyAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweDEyLCAweDE1LCAweGI3LCAweGU1LCAweDE1LCAweDI0LCAweDE0LCAweGY1LCAweDgyLCAweGU0LCAweDM1LAorICAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDQ0LCAweGU1LCAweDE1LCAweDI0LCAweDE1LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LAorICAweDgzLCAweGUwLCAweDYwLCAweDExLCAweGU1LCAweDE1LCAweDI0LCAweDM5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLAorICAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDBmLCAweGU1LCAweDE1LCAweDI0LCAweDM5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1fX0sCisgezB4MDI4NiwgNjQsIHsgMHg4MywgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwNCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOSwgMHhmNSwgMHg4MiwKKyAgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgxMiwgMHhmNSwgMHg4MiwKKyAgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHg0NCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgxMywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwKKyAgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgxMSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNH19LAorIHsweDAyYzYsIDY0LCB7IDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ODAsIDB4MGYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsCisgIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDQsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzksCisgIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MTYsCisgIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzUsIDB4ZjUsIDB4ODJ9fSwKKyB7MHgwMzA2LCA2NCwgeyAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDE3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LAorICAweDgzLCAweGUwLCAweDMwLCAweGUwLCAweDExLCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLAorICAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDgwLCAweDBmLCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LAorICAweDgzLCAweGUwLCAweDU0LCAweGJmLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1fX0sCisgezB4MDM0NiwgNjQsIHsgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzYiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHhlNSwKKyAgMHgxNSwgMHgyNCwgMHgxOSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgxMSwgMHhlNSwgMHgxNSwgMHgyNCwKKyAgMHgzOSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgxMCwgMHhmMCwgMHg4MCwgMHgwZiwgMHhlNSwgMHgxNSwKKyAgMHgyNCwgMHgzOSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3OH19LAorIHsweDAzODYsIDY0LCB7IDB4NDEsIDB4NzQsIDB4MDQsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4OTAsCisgIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MWEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsCisgIDB4NmIsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsCisgIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTR9fSwKKyB7MHgwM2M2LCA2NCwgeyAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDAxLCAweGYwLCAweDEyLCAweDAwLAorICAweDM2LCAweGVmLCAweDU0LCAweGZlLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDMyLCAweGY1LCAweDgyLCAweGU0LCAweDM1LAorICAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZkLCAweGZmLCAweGYwLCAweGZkLCAweGU0LCAweGZmLCAweDEyLCAweDE2LCAweDQ3LCAweGU1LCAweDE1LAorICAweDI0LCAweDJjLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDJifX0sCisgezB4MDQwNiwgNjQsIHsgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwgMHgxMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgxYiwKKyAgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg3MCwgMHgwZSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNSwgMHhmNSwgMHg4MiwKKyAgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgyOCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwKKyAgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwMiwgMHhmZiwgMHhmMCwgMHhmZCwgMHhlNCwgMHhmZiwgMHgxMiwgMHgxNiwgMHg0NywgMHhlNX19LAorIHsweDA0NDYsIDY0LCB7IDB4MTUsIDB4MjQsIDB4MmIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ZTUsIDB4MTYsIDB4NDIsIDB4MTMsCisgIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MWMsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4NzAsIDB4MGUsIDB4ZTUsCisgIDB4MTUsIDB4MjQsIDB4MjUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MmEsIDB4OTAsIDB4NzgsIDB4NDEsCisgIDB4NzQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTB9fSwKKyB7MHgwNDg2LCA2NCwgeyAweDQ0LCAweDA0LCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweGVmLCAweDYwLCAweDBmLCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LAorICAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDA0LCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDFkLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LAorICAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDI3LCAweGU1LCAweDE1LCAweDI0LCAweDM3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLAorICAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDAzLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM3LCAweGY1fX0sCisgezB4MDRjNiwgNjQsIHsgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgxZSwKKyAgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgyOCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMiwgMHhmNSwgMHg4MiwKKyAgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmZSwgMHhmZiwgMHhmMCwgMHhmZCwgMHhlNCwgMHhmZiwgMHgxMiwgMHgxNiwgMHg0NywKKyAgMHhlNSwgMHgxNSwgMHgyNCwgMHgyZCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHg3NCwgMHgwMSwgMHhmMCwgMHhlNX19LAorIHsweDA1MDYsIDY0LCB7IDB4MTYsIDB4NDIsIDB4MTMsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MWYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NzAsIDB4MGUsCisgIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MjcsIDB4ZTUsIDB4MTUsCisgIDB4MjQsIDB4MzIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZmYsIDB4ZjAsIDB4ZmQsIDB4ZTQsCisgIDB4ZmYsIDB4MTIsIDB4MTYsIDB4NDcsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MmQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODN9fSwKKyB7MHgwNTQ2LCA2NCwgeyAweGU0LCAweGYwLCAweGU1LCAweDE2LCAweDQyLCAweDEzLCAweGU1LCAweDE1LCAweDI0LCAweDIwLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLAorICAweGUwLCAweDcwLCAweDBlLCAweGU1LCAweDE1LCAweDI0LCAweDI1LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLAorICAweDE4LCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDAyLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM2LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LAorICAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDAyLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDIxLCAweGY1LCAweDgyfX0sCisgezB4MDU4NiwgNjQsIHsgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgwZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwKKyAgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyMiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwKKyAgMHg4MywgMHhlMCwgMHg2MCwgMHgxZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHg3NCwKKyAgMHgwMSwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzYSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMH19LAorIHsweDA1YzYsIDY0LCB7IDB4ZTUsIDB4MTYsIDB4NDIsIDB4MTMsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjMsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsCisgIDB4MDMsIDB4MTIsIDB4MTgsIDB4ODUsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsCisgIDB4NjAsIDB4MWIsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MDgsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTYsIDB4ZjQsIDB4ZmUsIDB4ZWYsIDB4NWUsIDB4ZjAsIDB4ZTUsIDB4MTV9fSwKKyB7MHgwNjA2LCA2NCwgeyAweDI0LCAweDI1LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDE2LCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LAorICAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGY3LCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDQ1LCAweDE2LAorICAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweGU5LCAweGUwLCAweDEyLCAweDEyLCAweDAzLCAweDA3LCAweDgzLCAweDAwLCAweDA3LCAweGY3LCAweDAxLCAweDA4LAorICAweDYzLCAweDAzLCAweDA2LCAweDRjLCAweDA2LCAweDA3LCAweDc0LCAweDA4LCAweDA3LCAweDY4LCAweDA5LCAweDA3LCAweDUwLCAweDBhLCAweDA3fX0sCisgezB4MDY0NiwgNjQsIHsgMHg1ZiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwOCwgMHhiMiwgMHg5MCwgMHg3ZiwgMHhlYiwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxYywgMHgxNCwgMHg3MCwgMHgwMywKKyAgMHgwMiwgMHgwNiwgMHhmZSwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwNywgMHg0NiwgMHg3NCwgMHgxOSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwKKyAgMHg3NCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwOCwgMHhiOSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHgwNCwgMHg3NSwgMHg4MiwKKyAgMHgxNywgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHgzMCwgMHhlMCwgMHgwNCwgMHg3ZiwgMHgwMywgMHg4MH19LAorIHsweDA2ODYsIDY0LCB7IDB4MDIsIDB4N2YsIDB4MDIsIDB4NzUsIDB4ODIsIDB4ODIsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZWYsIDB4ZjAsIDB4NzUsIDB4ODIsIDB4NmQsIDB4NzUsIDB4ODMsIDB4MTksCisgIDB4ZjAsIDB4NzUsIDB4ODIsIDB4NjYsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4NzUsIDB4ODIsIDB4NWYsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4NzUsCisgIDB4ODIsIDB4NTgsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDQsIDB4N2YsIDB4NjQsIDB4ODAsCisgIDB4MDIsIDB4N2YsIDB4MzIsIDB4NzUsIDB4ODIsIDB4MWEsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZWYsIDB4ZTB9fSwKKyB7MHgwNmM2LCA2NCwgeyAweGZlLCAweDkwLCAweDdmLCAweGVlLCAweGUwLCAweDdjLCAweDAwLCAweDI0LCAweDAwLCAweGY1LCAweDE5LCAweGVjLCAweDNlLCAweGY1LCAweDE4LCAweDc1LCAweDMzLAorICAweDE5LCAweDc1LCAweDM0LCAweDEyLCAweDc1LCAweDgyLCAweDE0LCAweDc1LCAweDgzLCAweDE5LCAweGUwLCAweDc1LCAweDI3LCAweDAwLCAweGY1LCAweDI4LAorICAweGQzLCAweGU1LCAweDI4LCAweDk1LCAweDE5LCAweGU1LCAweDI3LCAweDk1LCAweDE4LCAweDQwLCAweDA2LCAweDg1LCAweDE4LCAweDI3LCAweDg1LCAweDE5LAorICAweDI4LCAweDEyLCAweDEzLCAweDEyLCAweDAyLCAweDA4LCAweGI5LCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGZmLCAweDEyLCAweDE0LCAweDJifX0sCisgezB4MDcwNiwgNjQsIHsgMHhlYSwgMHg0OSwgMHg2MCwgMHgzMiwgMHg5MCwgMHg3ZiwgMHhlZSwgMHhlMCwgMHg3NSwgMHgxOCwgMHgwMCwgMHhmNSwgMHgxOSwgMHhhZSwgMHgwMiwgMHhhZiwgMHgwMSwKKyAgMHg4ZSwgMHgzMywgMHg4ZiwgMHgzNCwgMHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHg4ZSwgMHgyNywgMHhmNSwgMHgyOCwKKyAgMHhkMywgMHg5NSwgMHgxOSwgMHhlNSwgMHgyNywgMHg5NSwgMHgxOCwgMHg0MCwgMHgwNiwgMHg4NSwgMHgxOCwgMHgyNywgMHg4NSwgMHgxOSwgMHgyOCwgMHgxMiwKKyAgMHgxMywgMHgxMiwgMHgwMiwgMHgwOCwgMHhiOSwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwOCwgMHhiOX19LAorIHsweDA3NDYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDgsIDB4YjksIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4MjUsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDgsIDB4YjksIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MjUsIDB4MDIsIDB4MDgsCisgIDB4YjksIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MjIsIDB4MTIsIDB4MGEsIDB4YjgsIDB4MDIsIDB4MDgsIDB4YjksIDB4OTAsIDB4N2YsIDB4MDAsCisgIDB4ZTUsIDB4MjIsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDgsIDB4YjksIDB4OTAsIDB4N2YsIDB4ZTh9fSwKKyB7MHgwNzg2LCA2NCwgeyAweGUwLCAweDI0LCAweDdmLCAweDYwLCAweDI0LCAweDE0LCAweDYwLCAweDMxLCAweDI0LCAweDAyLCAweDcwLCAweDViLCAweGEyLCAweDAwLCAweGU0LCAweDMzLCAweGZmLAorICAweDI1LCAweGUwLCAweGZmLCAweGEyLCAweDA2LCAweGU0LCAweDMzLCAweDRmLCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGU0LCAweGEzLCAweGYwLCAweDkwLAorICAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDA4LCAweGI5LCAweGU0LCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGEzLCAweGYwLCAweDkwLAorICAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDA4LCAweGI5LCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwfX0sCisgezB4MDdjNiwgNjQsIHsgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwKKyAgMHg3ZiwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmZCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwKKyAgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwOCwgMHhiOSwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwOCwgMHhiOSwKKyAgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxZCwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwOCwgMHhiOX19LAorIHsweDA4MDYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDUsIDB4YzIsIDB4MDAsIDB4MDIsIDB4MDgsIDB4YjksIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsCisgIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDgsIDB4YjksIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MzgsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsCisgIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4NTQsIDB4ODAsIDB4ZmZ9fSwKKyB7MHgwODQ2LCA2NCwgeyAweDEzLCAweDEzLCAweDEzLCAweDU0LCAweDFmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDkwLCAweDdmLCAweGQ3LCAweGYwLCAweGUwLCAweDQ0LCAweDIwLAorICAweGYwLCAweDgwLCAweDVmLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDU2LCAweDkwLCAweDdmLCAweGU4LCAweGUwLAorICAweDI0LCAweGZlLCAweDYwLCAweDE4LCAweDI0LCAweDAyLCAweDcwLCAweDRhLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGI0LCAweDAxLCAweDA0LCAweGQyLAorICAweDAwLCAweDgwLCAweDNmLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDM2LCAweDkwLCAweDdmLCAweGVhfX0sCisgezB4MDg4NiwgNjQsIHsgMHhlMCwgMHg3MCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwKKyAgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHg3NCwgMHgwMSwgMHhmMCwKKyAgMHg4MCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgwNywgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwKKyAgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHgyMiwgMHhlNSwgMHgxMSwgMHg1NCwgMHgwZiwgMHg3MH19LAorIHsweDA4YzYsIDY0LCB7IDB4MDMsIDB4MDIsIDB4MDksIDB4YjIsIDB4MTIsIDB4MTYsIDB4YTUsIDB4ZWYsIDB4MjAsIDB4ZTEsIDB4NzUsIDB4MTIsIDB4MTcsIDB4MDMsIDB4ZWYsIDB4MTQsIDB4ZjUsCisgIDB4MTksIDB4MTIsIDB4MTgsIDB4Y2MsIDB4ZWYsIDB4MjUsIDB4MTksIDB4ZmYsIDB4ZTQsIDB4MzMsIDB4ZmUsIDB4YzMsIDB4ZWYsIDB4OTQsIDB4ODAsIDB4ZWUsCisgIDB4NjQsIDB4ODAsIDB4OTQsIDB4ODAsIDB4NTAsIDB4NTksIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsIDB4MTQsIDB4ODMsIDB4ZTAsIDB4ZmUsIDB4YTMsIDB4ZTAsCisgIDB4ZmYsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4MzAsIDB4ZTAsIDB4MTEsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODJ9fSwKKyB7MHgwOTA2LCA2NCwgeyAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweDgwLCAweDBmLCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LAorICAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDIwLCAweGUyLCAweDEyLCAweGU1LCAweDE5LCAweDYwLCAweDBlLCAweGY1LCAweDIzLCAweGVmLCAweDI0LAorICAweDAxLCAweGY1LCAweDJkLCAweGU0LCAweDNlLCAweGY1LCAweDJjLCAweDEyLCAweDE0LCAweGFkLCAweGU0LCAweGZmLCAweDEyLCAweDE0LCAweGUzfX0sCisgezB4MDk0NiwgNjQsIHsgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHgzMCwgMHhlNywgMHg1ZCwgMHgxMiwgMHgxOCwKKyAgMHhjYywgMHhlNSwgMHgxNSwgMHgyNCwgMHgzYiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZSwgMHhlZiwgMHhjMywKKyAgMHg5ZSwgMHg1MCwgMHg0OCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHg3NCwgMHgwMSwKKyAgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHg3Yn19LAorIHsweDA5ODYsIDY0LCB7IDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4M2EsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4ZTUsIDB4MTYsIDB4NDIsCisgIDB4MTMsIDB4OTAsIDB4N2YsIDB4YzIsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MTAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsCisgIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4MjQsIDB4ODAsIDB4MDMsIDB4MTIsIDB4MTIsIDB4YTEsIDB4MTIsIDB4MTYsIDB4ZDQsIDB4ZWYsIDB4MzAsCisgIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MGEsIDB4YjcsIDB4MTIsIDB4MTcsIDB4ZDIsIDB4OGYsIDB4MTksIDB4MTIsIDB4MTgsIDB4ZDgsIDB4ZTUsIDB4MTV9fSwKKyB7MHgwOWM2LCA2NCwgeyAweDI0LCAweDM4LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM1LCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDE5LCAweGMzLCAweDlmLCAweDUwLCAweDI4LCAweDEyLCAweDE4LCAweGI0LAorICAweGVmLCAweDMwLCAweGUwLCAweDIxLCAweGU1LCAweDE1LCAweDI0LCAweDM4LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLAorICAweDIwLCAweGU3LCAweDEyLCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwfX0sCisgezB4MGEwNiwgNjQsIHsgMHgyMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwYSwgMHhiNywgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywKKyAgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHhlNSwgMHgxOSwgMHg3MCwgMHgwMywgMHgwMiwgMHgwYSwgMHhiNywgMHhiNCwgMHg4MCwgMHgwZiwgMHhlNSwgMHgxNSwKKyAgMHgyNCwgMHgzOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwKKyAgMHgzOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHgzMCwgMHhlNywgMHgyOSwgMHhlNSwgMHgxOX19LAorIHsweDBhNDYsIDY0LCB7IDB4ZDMsIDB4OTQsIDB4MjAsIDB4NDAsIDB4MDMsIDB4NzUsIDB4MTksIDB4MjAsIDB4ODUsIDB4MTksIDB4MjMsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsIDB4MTQsIDB4ODMsCisgIDB4YTMsIDB4YTMsIDB4ZTAsIDB4ZmMsIDB4YTMsIDB4ZTAsIDB4OGMsIDB4MmMsIDB4ZjUsIDB4MmQsIDB4MTIsIDB4MTMsIDB4ZGQsIDB4ZTUsIDB4MTksIDB4MjUsCisgIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTUsIDB4MTksIDB4MjIsIDB4ZTUsIDB4MTksIDB4ZDMsIDB4OTQsIDB4M2YsIDB4NDAsIDB4MDMsIDB4NzUsIDB4MTksIDB4M2YsCisgIDB4ODUsIDB4MTksIDB4MjMsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTB9fSwKKyB7MHgwYTg2LCA2NCwgeyAweGZmLCAweDg1LCAweDE1LCAweDgyLCAweDg1LCAweDE0LCAweDgzLCAweGEzLCAweGEzLCAweGUwLCAweGZjLCAweGEzLCAweGUwLCAweGY1LCAweDgyLCAweDhjLCAweDgzLAorICAweGVmLCAweGYwLCAweDg1LCAweDE1LCAweDgyLCAweDg1LCAweDE0LCAweDgzLCAweGEzLCAweGEzLCAweGUwLCAweGZlLCAweGEzLCAweGUwLCAweDI0LCAweDAxLAorICAweGY1LCAweDJkLCAweGU0LCAweDNlLCAweGY1LCAweDJjLCAweDEyLCAweDE0LCAweDZjLCAweGU1LCAweDE5LCAweDA0LCAweGZmLCAweDEyLCAweDE1LCAweDE5LAorICAweDIyLCAweGU0LCAweDkwLCAweDdmLCAweDkzLCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LCAweGYwLCAweGYwLCAweDkwLCAweDdmLCAweDk2fX0sCisgezB4MGFjNiwgNjQsIHsgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NCwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0YSwgMHgwNCwgMHhmMCwgMHhmNSwgMHg4ZSwgMHg5MCwgMHg3ZiwgMHg5NSwgMHg3NCwKKyAgMHhjMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHg3NCwgMHgzZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxZiwgMHhmMCwgMHg5MCwgMHg3OCwKKyAgMHg0MywgMHg3NCwgMHhmZiwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3OCwgMHg0MSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZiwgMHg3NCwgMHg5ZiwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHhkZSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5MiwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg3ZSwgMHg3YiwgMHg3ZiwgMHhjMCwgMHg3NX19LAorIHsweDBiMDYsIDY0LCB7IDB4MTQsIDB4N2IsIDB4NzUsIDB4MTUsIDB4YzAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4ZWYsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDEsIDB4MTIsIDB4MGYsIDB4MTIsCisgIDB4N2UsIDB4N2IsIDB4N2YsIDB4YzAsIDB4NzUsIDB4MTQsIDB4N2IsIDB4NzUsIDB4MTUsIDB4YzAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4ZWYsIDB4ZjAsCisgIDB4NzUsIDB4MTYsIDB4MDEsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsCisgIDB4N2UsIDB4N2UsIDB4N2YsIDB4NDAsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsIDB4MTQsIDB4ODMsIDB4NzQsIDB4N2UsIDB4ZjAsIDB4YTMsIDB4NzR9fSwKKyB7MHgwYjQ2LCA2NCwgeyAweDQwLCAweGYwLCAweDdlLCAweDdlLCAweDdmLCAweDgwLCAweDg1LCAweDE1LCAweDgyLCAweDg1LCAweDE0LCAweDgzLCAweGEzLCAweGEzLCAweDc0LCAweDdlLCAweGYwLAorICAweGEzLCAweDc0LCAweDgwLCAweGYwLCAweDdlLCAweDdjLCAweDdmLCAweDAwLCAweDc1LCAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDAwLCAweDkwLCAweDdmLAorICAweDk2LCAweDc0LCAweGRmLCAweGYwLCAweDc1LCAweDE2LCAweDAyLCAweDEyLCAweDBmLCAweDEyLCAweDdlLCAweDdjLCAweDdmLCAweDAwLCAweDc1LCAweDE0LAorICAweDdjLCAweDc1LCAweDE1LCAweDAwLCAweDkwLCAweDdmLCAweDk2LCAweDc0LCAweGRmLCAweGYwLCAweDc1LCAweDE2LCAweDAyLCAweGU1LCAweDE1fX0sCisgezB4MGI4NiwgNjQsIHsgMHgyNCwgMHgyNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHg3NCwgMHgwMSwgMHhmMCwgMHg3ZSwgMHg3ZCwgMHg3ZiwgMHhjMCwgMHg4NSwKKyAgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwgMHg4MywgMHg3NCwgMHg3ZCwgMHhmMCwgMHhhMywgMHg3NCwgMHhjMCwgMHhmMCwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHgwMCwKKyAgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwgMHg4MywgMHhhMywgMHhhMywgMHg3NCwgMHg3ZSwgMHhmMCwgMHhhMywgMHg3NCwgMHgwMCwgMHhmMCwgMHg3ZSwKKyAgMHg3YywgMHg3ZiwgMHg0MCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNSwgMHg0MCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHg3NCwgMHhiZiwgMHhmMH19LAorIHsweDBiYzYsIDY0LCB7IDB4NzUsIDB4MTYsIDB4MDQsIDB4MTIsIDB4MGYsIDB4MTIsIDB4N2UsIDB4N2MsIDB4N2YsIDB4NDAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4NDAsIDB4OTAsCisgIDB4N2YsIDB4OTYsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDQsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsCisgIDB4MTQsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4N2UsIDB4N2QsIDB4N2YsIDB4NDAsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsIDB4MTQsIDB4ODMsCisgIDB4NzQsIDB4N2QsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4NDAsIDB4ZjAsIDB4N2UsIDB4N2QsIDB4N2YsIDB4ODAsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODV9fSwKKyB7MHgwYzA2LCA2NCwgeyAweDE0LCAweDgzLCAweGEzLCAweGEzLCAweDc0LCAweDdkLCAweGYwLCAweGEzLCAweDc0LCAweDgwLCAweGYwLCAweDdlLCAweDdjLCAweDdmLCAweDgwLCAweDc1LCAweDE0LAorICAweDdjLCAweDc1LCAweDE1LCAweDgwLCAweDkwLCAweDdmLCAweDk2LCAweDc0LCAweDdmLCAweGYwLCAweDc1LCAweDE2LCAweDA4LCAweDEyLCAweDBmLCAweDEyLAorICAweDdlLCAweDdjLCAweDdmLCAweDgwLCAweDc1LCAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDgwLCAweDkwLCAweDdmLCAweDk2LCAweDc0LCAweDdmLCAweGYwLAorICAweDc1LCAweDE2LCAweDA4LCAweGU1LCAweDE1LCAweDI0LCAweDI2LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0fX0sCisgezB4MGM0NiwgNjQsIHsgMHgwMywgMHhmMCwgMHg3ZSwgMHg3YywgMHg3ZiwgMHhjMCwgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwgMHg4MywgMHg3NCwgMHg3YywgMHhmMCwgMHhhMywgMHg3NCwKKyAgMHhjMCwgMHhmMCwgMHg3ZSwgMHg3ZCwgMHg3ZiwgMHgwMCwgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwgMHg4MywgMHhhMywgMHhhMywgMHg3NCwgMHg3ZCwKKyAgMHhmMCwgMHhhMywgMHg3NCwgMHgwMCwgMHhmMCwgMHhjMiwgMHgwYSwgMHhjMiwgMHgwOSwgMHhkMiwgMHgwMiwgMHgyMiwgMHhlNSwgMHgxMCwgMHgwNCwgMHg1NCwKKyAgMHgwMywgMHhmNSwgMHgxMCwgMHgxNCwgMHg2MCwgMHgxZiwgMHgxNCwgMHg2MCwgMHgzMSwgMHgxNCwgMHg2MCwgMHg0MywgMHgyNCwgMHgwMywgMHg3MH19LAorIHsweDBjODYsIDY0LCB7IDB4NTIsIDB4N2UsIDB4N2IsIDB4N2YsIDB4YzAsIDB4NzUsIDB4MTQsIDB4N2IsIDB4NzUsIDB4MTUsIDB4YzAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4ZWYsIDB4ZjAsCisgIDB4NzUsIDB4MTYsIDB4MDEsIDB4ODAsIDB4M2QsIDB4N2UsIDB4N2MsIDB4N2YsIDB4MDAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4MDAsIDB4OTAsCisgIDB4N2YsIDB4OTYsIDB4NzQsIDB4ZGYsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDIsIDB4ODAsIDB4MjgsIDB4N2UsIDB4N2MsIDB4N2YsIDB4NDAsIDB4NzUsIDB4MTQsCisgIDB4N2MsIDB4NzUsIDB4MTUsIDB4NDAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDQsIDB4ODAsIDB4MTN9fSwKKyB7MHgwY2M2LCA2NCwgeyAweDdlLCAweDdjLCAweDdmLCAweDgwLCAweDc1LCAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDgwLCAweDkwLCAweDdmLCAweDk2LCAweDc0LCAweDdmLCAweGYwLCAweDc1LAorICAweDE2LCAweDA4LCAweGU1LCAweDMyLCAweDU1LCAweDE2LCAweDcwLCAweDAzLCAweDAyLCAweDBlLCAweDExLCAweGU1LCAweDE2LCAweGY0LCAweGZmLCAweDUyLAorICAweDMyLCAweGU1LCAweDI2LCAweDU0LCAweDdmLCAweGZlLCAweDcwLCAweDBmLCAweGU1LCAweDJhLCAweDU1LCAweDE2LCAweDYwLCAweDI0LCAweDkwLCAweDdmLAorICAweDk4LCAweGUwLCAweDQ1LCAweDE2LCAweGYwLCAweDgwLCAweDFiLCAweGJlLCAweDIwLCAweDE4LCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1fX0sCisgezB4MGQwNiwgNjQsIHsgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHgzMCwgMHhlMywgMHgwOSwgMHhlNCwgMHhmNSwgMHgyYSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwKKyAgMHg1ZiwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzYSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgwMywKKyAgMHhlMCwgMHgxNCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwKKyAgMHgwMywgMHhlMCwgMHgxNCwgMHhmMCwgMHhlMCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZSwgMHgxMSwgMHg3NCwgMHgwYSwgMHhmMCwgMHgxMiwgMHgwMH19LAorIHsweDBkNDYsIDY0LCB7IDB4MzYsIDB4ZWYsIDB4NTQsIDB4MDEsIDB4ZmYsIDB4ZjUsIDB4MTksIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MmMsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsCisgIDB4ODMsIDB4ZTAsIDB4NmYsIDB4NjAsIDB4MDcsIDB4ZTUsIDB4MTksIDB4ZjAsIDB4ZTUsIDB4MTYsIDB4NDIsIDB4MTMsIDB4MTIsIDB4MTgsIDB4ZTQsIDB4OGYsCisgIDB4MTksIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTksCisgIDB4NTQsIDB4MTAsIDB4ZmUsIDB4NmYsIDB4NjAsIDB4MDYsIDB4ZWUsIDB4ZjAsIDB4ZTUsIDB4MTYsIDB4NDIsIDB4MTMsIDB4ZTUsIDB4MTUsIDB4MjR9fSwKKyB7MHgwZDg2LCA2NCwgeyAweDI4LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDE5LCAweDU0LCAweDgwLCAweGZlLCAweDZmLCAweDYwLAorICAweDA2LCAweGVlLCAweGYwLCAweGU1LCAweDE2LCAweDQyLCAweDEzLCAweGU1LCAweDE1LCAweDI0LCAweDI5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LAorICAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDE5LCAweDU0LCAweDIwLCAweGZlLCAweDZmLCAweDYwLCAweDE1LCAweGVlLCAweGYwLCAweGU1LCAweDE1LAorICAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDMwLCAweGU0LCAweDA0LCAweGU1LCAweDE2fX0sCisgezB4MGRjNiwgNjQsIHsgMHg0MiwgMHgxMywgMHhlNSwgMHgxMiwgMHg1NSwgMHgxNiwgMHhmZiwgMHhmNSwgMHgxOSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyYSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwKKyAgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2ZiwgMHg2MCwgMHgxNiwgMHhlNSwgMHgxOSwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwKKyAgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHgzMCwgMHhlNSwgMHgwNCwgMHhlNSwgMHgxNiwgMHg0MiwgMHgxMywgMHhlNSwgMHgxNywgMHg1NSwKKyAgMHgxNiwgMHhmZiwgMHhmNSwgMHgxOSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4M319LAorIHsweDBlMDYsIDY0LCB7IDB4ZTAsIDB4NmYsIDB4NjAsIDB4MDcsIDB4ZTUsIDB4MTksIDB4ZjAsIDB4ZTUsIDB4MTYsIDB4NDIsIDB4MTMsIDB4MjIsIDB4MzAsIDB4MDksIDB4MDMsIDB4MDIsIDB4MGYsCisgIDB4MTEsIDB4ZTUsIDB4MjQsIDB4MTQsIDB4NjAsIDB4MmEsIDB4MTQsIDB4NjAsIDB4NDEsIDB4MTQsIDB4NjAsIDB4NTgsIDB4MTQsIDB4NjAsIDB4NmYsIDB4MjQsCisgIDB4MDQsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGUsIDB4Y2YsIDB4N2UsIDB4N2IsIDB4N2YsIDB4YzAsIDB4NzUsIDB4MTQsIDB4N2IsIDB4NzUsIDB4MTUsIDB4YzAsCisgIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4ZWYsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDEsIDB4MTIsIDB4MTIsIDB4YTEsIDB4NzUsIDB4MjQsIDB4MDF9fSwKKyB7MHgwZTQ2LCA2NCwgeyAweDIyLCAweDdlLCAweDdjLCAweDdmLCAweDAwLCAweDc1LCAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDAwLCAweDkwLCAweDdmLCAweDk2LCAweDc0LCAweGRmLCAweGYwLAorICAweDc1LCAweDE2LCAweDAyLCAweDEyLCAweDEyLCAweGExLCAweDc1LCAweDI0LCAweDAyLCAweDIyLCAweDdlLCAweDdjLCAweDdmLCAweDQwLCAweDc1LCAweDE0LAorICAweDdjLCAweDc1LCAweDE1LCAweDQwLCAweDkwLCAweDdmLCAweDk2LCAweDc0LCAweGJmLCAweGYwLCAweDc1LCAweDE2LCAweDA0LCAweDEyLCAweDEyLCAweGExLAorICAweDc1LCAweDI0LCAweDAzLCAweDIyLCAweDdlLCAweDdjLCAweDdmLCAweDgwLCAweDc1LCAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDgwLCAweDkwfX0sCisgezB4MGU4NiwgNjQsIHsgMHg3ZiwgMHg5NiwgMHg3NCwgMHg3ZiwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwOCwgMHgxMiwgMHgxMiwgMHhhMSwgMHg3NSwgMHgyNCwgMHgwNCwgMHgyMiwgMHgzMCwgMHgwNCwKKyAgMHgzMywgMHhjMiwgMHgwNCwgMHg1MywgMHgxMywgMHhkZiwgMHhlNCwgMHhmNSwgMHgxOSwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwgMHgyZSwgMHgyNSwKKyAgMHgxOSwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgxMSwgMHhhYiwgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNSwgMHgxOSwgMHhmNSwgMHg4MiwKKyAgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgxOSwgMHhlNSwgMHgxOSwgMHhiNCwgMHgwMywgMHhkYiwgMHg5MH19LAorIHsweDBlYzYsIDY0LCB7IDB4N2YsIDB4YzMsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4NzUsIDB4MjQsIDB4MDUsIDB4MjIsIDB4ZTUsIDB4MzYsIDB4NjAsIDB4M2IsIDB4ZDUsIDB4MzYsIDB4MGEsIDB4NTMsCisgIDB4MTMsIDB4ZWYsIDB4MzAsIDB4MGEsIDB4MDQsIDB4ZDIsIDB4MDksIDB4YzIsIDB4MGEsIDB4ZTQsIDB4ZjUsIDB4MTksIDB4N2UsIDB4MDAsIDB4N2IsIDB4MDAsCisgIDB4NzQsIDB4MzUsIDB4MjUsIDB4MTksIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTIsIDB4MTEsIDB4YWIsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjUsCisgIDB4MTksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MTksIDB4ZTUsIDB4MTksIDB4YjR9fSwKKyB7MHgwZjA2LCA2NCwgeyAweDAzLCAweGRiLCAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDAzLCAweGYwLCAweGU0LCAweGY1LCAweDI0LCAweDIyLCAweGU0LCAweGY1LCAweDFhLCAweDdlLCAweDAwLAorICAweDdiLCAweDAxLCAweGU1LCAweDE1LCAweDI1LCAweDFhLCAweGY5LCAweGVlLCAweDM1LCAweDE0LCAweGZhLCAweGU0LCAweDEyLCAweDExLCAweGYxLCAweDA1LAorICAweDFhLCAweGU1LCAweDFhLCAweGI0LCAweDNjLCAweGU4LCAweGU1LCAweDE1LCAweDI0LCAweDM1LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LAorICAweDgzLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDAzLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM3LCAweGY1fX0sCisgezB4MGY0NiwgNjQsIHsgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHg3NCwgMHgwMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg3ZiwgMHgwYywgMHhlNCwgMHhmZCwKKyAgMHgxMiwgMHgxNiwgMHg0NywgMHg3ZiwgMHgxMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywKKyAgMHhlZiwgMHhmMCwgMHgxMiwgMHgxNSwgMHhiNywgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwMiwgMHhmMCwgMHg3ZiwgMHgwMSwgMHhlNSwgMHgxNSwgMHgyNCwKKyAgMHgzNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHg0NCwgMHgwNiwgMHg5MCwgMHhjMCwgMHgwMH19LAorIHsweDBmODYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDQsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsCisgIDB4ODMsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MGYsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTYsIDB4NDcsIDB4ZTQsIDB4ZmYsCisgIDB4N2UsIDB4YTMsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZWUsIDB4ZjAsIDB4ZmQsCisgIDB4MTIsIDB4MTYsIDB4NDcsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4N2Z9fSwKKyB7MHgwZmM2LCA2NCwgeyAweDA1LCAweDdkLCAweDdmLCAweDEyLCAweDE2LCAweDQ3LCAweDdmLCAweDAxLCAweDEyLCAweDE1LCAweDRmLCAweDdmLCAweDAzLCAweDdkLCAweDA3LCAweDEyLCAweDE2LAorICAweDQ3LCAweDIyLCAweDUzLCAweDEzLCAweDNmLCAweDkwLCAweDdiLCAweGYxLCAweGUwLCAweDMwLCAweGUzLCAweDE2LCAweDdlLCAweDdiLCAweDdmLCAweGMwLAorICAweDc1LCAweDE0LCAweDdiLCAweDc1LCAweDE1LCAweGMwLCAweDkwLCAweDdmLCAweDk2LCAweDc0LCAweGVmLCAweGYwLCAweDc1LCAweDE2LCAweDAxLCAweDEyLAorICAweDA4LCAweGMxLCAweDkwLCAweDdjLCAweDMxLCAweGUwLCAweDMwLCAweGUzLCAweDE2LCAweDdlLCAweDdjLCAweDdmLCAweDAwLCAweDc1LCAweDE0fX0sCisgezB4MTAwNiwgNjQsIHsgMHg3YywgMHg3NSwgMHgxNSwgMHgwMCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHg3NCwgMHhkZiwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwMiwgMHgxMiwgMHgwOCwgMHhjMSwgMHg5MCwKKyAgMHg3YywgMHg3MSwgMHhlMCwgMHgzMCwgMHhlMywgMHgxNiwgMHg3ZSwgMHg3YywgMHg3ZiwgMHg0MCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNSwgMHg0MCwKKyAgMHg5MCwgMHg3ZiwgMHg5NiwgMHg3NCwgMHhiZiwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwNCwgMHgxMiwgMHgwOCwgMHhjMSwgMHg5MCwgMHg3YywgMHhiMSwgMHhlMCwKKyAgMHgzMCwgMHhlMywgMHgxNiwgMHg3ZSwgMHg3YywgMHg3ZiwgMHg4MCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNSwgMHg4MCwgMHg5MCwgMHg3Zn19LAorIHsweDEwNDYsIDY0LCB7IDB4OTYsIDB4NzQsIDB4N2YsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDgsIDB4MTIsIDB4MDgsIDB4YzEsIDB4MDUsIDB4MTEsIDB4ZTUsIDB4MTEsIDB4NTQsIDB4MGYsIDB4ZjUsCisgIDB4MTgsIDB4NzAsIDB4MWYsIDB4OTAsIDB4NzgsIDB4NDEsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTksIDB4ZTAsIDB4ZjUsIDB4MTcsCisgIDB4OTAsIDB4NzgsIDB4NDEsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTksIDB4ZTAsIDB4ZjQsIDB4ZjUsIDB4MTIsIDB4MTIsIDB4MTEsCisgIDB4MjEsIDB4MjIsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MDEsIDB4MDQsIDB4MTIsIDB4MGMsIDB4NzMsIDB4MjIsIDB4OTAsIDB4N2YsIDB4YzIsIDB4ZTB9fSwKKyB7MHgxMDg2LCA2NCwgeyAweDIwLCAweGUxLCAweDA4LCAweGU1LCAweDEzLCAweDYwLCAweDA0LCAweDEyLCAweDBlLCAweDEyLCAweDIyLCAweDEyLCAweDBjLCAweDczLCAweDIyLCAweDc4LCAweDdmLAorICAweGU0LCAweGY2LCAweGQ4LCAweGZkLCAweDc1LCAweDgxLCAweDM3LCAweDAyLCAweDEwLCAweGRjLCAweDAyLCAweDEyLCAweDI5LCAweGU0LCAweDkzLCAweGEzLAorICAweGY4LCAweGU0LCAweDkzLCAweGEzLCAweDQwLCAweDAzLCAweGY2LCAweDgwLCAweDAxLCAweGYyLCAweDA4LCAweGRmLCAweGY0LCAweDgwLCAweDI5LCAweGU0LAorICAweDkzLCAweGEzLCAweGY4LCAweDU0LCAweDA3LCAweDI0LCAweDBjLCAweGM4LCAweGMzLCAweDMzLCAweGM0LCAweDU0LCAweDBmLCAweDQ0LCAweDIwfX0sCisgezB4MTBjNiwgNjQsIHsgMHhjOCwgMHg4MywgMHg0MCwgMHgwNCwgMHhmNCwgMHg1NiwgMHg4MCwgMHgwMSwgMHg0NiwgMHhmNiwgMHhkZiwgMHhlNCwgMHg4MCwgMHgwYiwgMHgwMSwgMHgwMiwgMHgwNCwKKyAgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHg5MCwgMHgxOCwgMHg1MCwgMHhlNCwgMHg3ZSwgMHgwMSwgMHg5MywgMHg2MCwgMHhiYywgMHhhMywgMHhmZiwKKyAgMHg1NCwgMHgzZiwgMHgzMCwgMHhlNSwgMHgwOSwgMHg1NCwgMHgxZiwgMHhmZSwgMHhlNCwgMHg5MywgMHhhMywgMHg2MCwgMHgwMSwgMHgwZSwgMHhjZiwgMHg1NCwKKyAgMHhjMCwgMHgyNSwgMHhlMCwgMHg2MCwgMHhhOCwgMHg0MCwgMHhiOCwgMHhlNCwgMHg5MywgMHhhMywgMHhmYSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOH19LAorIHsweDExMDYsIDY0LCB7IDB4ZTQsIDB4OTMsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2EsIDB4ZjAsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsCisgIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2EsIDB4ZGYsIDB4ZTksIDB4ZGUsIDB4ZTcsIDB4ODAsIDB4YmUsIDB4OTAsIDB4N2YsIDB4ZDIsIDB4ZTAsIDB4MzAsIDB4ZTEsCisgIDB4MDMsIDB4MDIsIDB4MTEsIDB4YWEsIDB4YzIsIDB4MDksIDB4OTAsIDB4N2IsIDB4NDAsIDB4ZTAsIDB4MTQsIDB4NjAsIDB4MjYsIDB4MTQsIDB4NjAsIDB4M2IsCisgIDB4MTQsIDB4NjAsIDB4NTAsIDB4MjQsIDB4ODMsIDB4NjAsIDB4NjQsIDB4MjQsIDB4ODAsIDB4NzAsIDB4NjMsIDB4N2UsIDB4N2IsIDB4N2YsIDB4YzB9fSwKKyB7MHgxMTQ2LCA2NCwgeyAweDc1LCAweDE0LCAweDdiLCAweDc1LCAweDE1LCAweGMwLCAweDkwLCAweDdmLCAweDk2LCAweDc0LCAweGVmLCAweGYwLCAweDc1LCAweDE2LCAweDAxLCAweDEyLCAweDAwLAorICAweDQ2LCAweDgwLCAweDRiLCAweDdlLCAweDdjLCAweDdmLCAweDAwLCAweDc1LCAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDAwLCAweDkwLCAweDdmLCAweDk2LAorICAweDc0LCAweGRmLCAweGYwLCAweDc1LCAweDE2LCAweDAyLCAweDEyLCAweDAwLCAweDQ2LCAweDgwLCAweDMzLCAweDdlLCAweDdjLCAweDdmLCAweDQwLCAweDc1LAorICAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDQwLCAweDkwLCAweDdmLCAweDk2LCAweDc0LCAweGJmLCAweGYwLCAweDc1LCAweDE2LCAweDA0LCAweDEyfX0sCisgezB4MTE4NiwgNjQsIHsgMHgwMCwgMHg0NiwgMHg4MCwgMHgxYiwgMHg3ZSwgMHg3YywgMHg3ZiwgMHg4MCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNSwgMHg4MCwgMHg5MCwgMHg3ZiwgMHg5NiwKKyAgMHg3NCwgMHg3ZiwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwOCwgMHgxMiwgMHgwMCwgMHg0NiwgMHg4MCwgMHgwMywgMHgxMiwgMHgxNywgMHg1YywgMHhlNCwgMHg5MCwKKyAgMHg3ZiwgMHhkMywgMHhmMCwgMHgyMiwgMHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwMiwgMHhlNywKKyAgMHgyMiwgMHhiYiwgMHhmZSwgMHgwMiwgMHhlMywgMHgyMiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMiwgMHhiYiwgMHgwMX19LAorIHsweDExYzYsIDY0LCB7IDB4MGMsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDYsIDB4ZTksIDB4MjUsCisgIDB4ODIsIDB4ZjgsIDB4ZTYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4MjIsIDB4ZTUsIDB4ODIsIDB4MjksCisgIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsIDB4OGEsCisgIDB4ODMsIDB4ZjAsIDB4MjIsIDB4NTAsIDB4MDIsIDB4ZjcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDEsIDB4ZjMsIDB4MjIsIDB4ZDAsIDB4ODMsIDB4ZDB9fSwKKyB7MHgxMjA2LCA2NCwgeyAweDgyLCAweGY4LCAweGU0LCAweDkzLCAweDcwLCAweDEyLCAweDc0LCAweDAxLCAweDkzLCAweDcwLCAweDBkLCAweGEzLCAweGEzLCAweDkzLCAweGY4LCAweDc0LCAweDAxLAorICAweDkzLCAweGY1LCAweDgyLCAweDg4LCAweDgzLCAweGU0LCAweDczLCAweDc0LCAweDAyLCAweDkzLCAweDY4LCAweDYwLCAweGVmLCAweGEzLCAweGEzLCAweGEzLAorICAweDgwLCAweGRmLCAweDkwLCAweDdmLCAweGFlLCAweGUwLCAweGZmLCAweGQzLCAweDkyLCAweDAwLCAweGU0LCAweDMzLCAweGZlLCAweGVmLCAweDRlLCAweGYwLAorICAweGQyLCAweGU4LCAweDQzLCAweGQ4LCAweDIwLCAweDkwLCAweDdmLCAweGRlLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGRmLCAweGYwfX0sCisgezB4MTI0NiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHhmZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYSwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwKKyAgMHg5MCwgMHg3ZiwgMHhhZiwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZSwgMHg3NCwgMHgwZCwgMHhmMCwgMHhkMiwgMHhhZiwgMHhkMiwgMHgwYiwKKyAgMHgxMiwgMHgxOCwgMHgxNCwgMHhjMiwgMHgwMSwgMHhlNCwgMHhmNSwgMHgyYiwgMHhmNSwgMHgzMSwgMHhjMiwgMHgwNywgMHhjMiwgMHgwMiwgMHg3NSwgMHgyOSwKKyAgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHg2NSwgMHgyNiwgMHg2MCwgMHgwNiwgMHg3NSwgMHgzMiwgMHgwZiwgMHhlMCwgMHhmNSwgMHgyNn19LAorIHsweDEyODYsIDY0LCB7IDB4MzAsIDB4MDIsIDB4MDMsIDB4MTIsIDB4MGYsIDB4ZDksIDB4MzAsIDB4MDEsIDB4MDcsIDB4YzIsIDB4MDEsIDB4MTIsIDB4MDYsIDB4MjksIDB4ODAsIDB4ZTIsIDB4MzAsCisgIDB4MDgsIDB4ZGYsIDB4YzIsIDB4MDgsIDB4MTIsIDB4MTgsIDB4MzUsIDB4ODAsIDB4ZDgsIDB4MjIsIDB4ZTUsIDB4MTMsIDB4NTUsIDB4MTYsIDB4NjAsIDB4NmEsCisgIDB4ZTUsIDB4MTUsIDB4MjQsIDB4M2EsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NzAsIDB4NWMsIDB4ZTUsIDB4MTYsCisgIDB4ZjQsIDB4NTIsIDB4MTMsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjYsIDB4ZmYsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZmUsIDB4ZTQsIDB4ZmQsIDB4MGZ9fSwKKyB7MHgxMmM2LCA2NCwgeyAweGVmLCAweGFhLCAweDA2LCAweDcwLCAweDAxLCAweDBlLCAweDE0LCAweGY1LCAweDgyLCAweDhhLCAweDgzLCAweGUwLCAweGZjLCAweDc0LCAweDgwLCAweDJkLCAweGY1LAorICAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVjLCAweGYwLCAweDBkLCAweGJkLCAweDBiLCAweGUyLCAweDkwLCAweDdmLCAweGMzLCAweDc0LAorICAweDBiLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDNhLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LCAweDEwLCAweGYwLAorICAweGU1LCAweDE1LCAweDI0LCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweGU1LCAweDE1fX0sCisgezB4MTMwNiwgNjQsIHsgMHgyNCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHgyMiwgMHhlNSwgMHgyOCwgMHg0NSwgMHgyNywgMHg2MCwKKyAgMHg1NywgMHhhZSwgMHgyNywgMHhhZiwgMHgyOCwgMHhkMywgMHhlZiwgMHg5NCwgMHg0MCwgMHhlZSwgMHg5NCwgMHgwMCwgMHg0MCwgMHgwNCwgMHg3ZSwgMHgwMCwKKyAgMHg3ZiwgMHg0MCwgMHhjMywgMHhlNSwgMHgyOCwgMHg5ZiwgMHhmNSwgMHgyOCwgMHhlNSwgMHgyNywgMHg5ZSwgMHhmNSwgMHgyNywgMHhlNCwgMHhmZCwgMHhlZCwKKyAgMHhjMywgMHg5ZiwgMHhlNCwgMHg5ZSwgMHg1MCwgMHgxZiwgMHg4NSwgMHgzNCwgMHg4MiwgMHg4NSwgMHgzMywgMHg4MywgMHhlMCwgMHhmYywgMHg3NH19LAorIHsweDEzNDYsIDY0LCB7IDB4MDAsIDB4MmQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZWMsIDB4ZjAsIDB4MGQsIDB4MDUsIDB4MzQsIDB4ZTUsIDB4MzQsIDB4NzAsCisgIDB4MDIsIDB4MDUsIDB4MzMsIDB4ODAsIDB4ZGEsIDB4OTAsIDB4N2YsIDB4YTksIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWMsIDB4ZTAsIDB4NDQsCisgIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4ZWYsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4YWMsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4ZTQsCisgIDB4OTAsIDB4N2YsIDB4YjUsIDB4ZjAsIDB4MjIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4NzQsIDB4ZjB9fSwKKyB7MHgxMzg2LCA2NCwgeyAweGYwLCAweDkwLCAweDdmLCAweDk2LCAweGYwLCAweGU0LCAweDkwLCAweDc4LCAweDRhLCAweGYwLCAweDkwLCAweDdmLCAweDk0LCAweGYwLCAweDkwLCAweDdmLCAweDlkLAorICAweDc0LCAweGZmLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk3LCAweGYwLCAweDMwLCAweDAwLCAweDA3LCAweGU1LCAweDI5LCAweDU0LCAweGYwLCAweGZmLAorICAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweGVmLCAweDQ0LCAweDA4LCAweDkwLCAweDc4LCAweDQxLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk4LCAweGYwLAorICAweDkwLCAweDdmLCAweDk1LCAweGYwLCAweDkwLCAweDdmLCAweDllLCAweDc0LCAweGZmLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk4LCAweGYwfX0sCisgezB4MTNjNiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHg5MywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHg3NCwgMHhmMCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5MiwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHgyMiwgMHg4ZiwgMHgxYSwgMHgwNSwgMHgyZCwgMHhlNSwgMHgyZCwgMHhhZSwgMHgyYywgMHg3MCwgMHgwMiwKKyAgMHgwNSwgMHgyYywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlNSwgMHgxYSwgMHhmMCwgMHgxMiwgMHgxOCwgMHhmMCwgMHgwNSwgMHgyZCwgMHhlNSwKKyAgMHgyZCwgMHhhYywgMHgyYywgMHg3MCwgMHgwMiwgMHgwNSwgMHgyYywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHgxNX19LAorIHsweDE0MDYsIDY0LCB7IDB4MjMsIDB4ZTUsIDB4MjMsIDB4NjAsIDB4MWYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4YzAsCisgIDB4ODMsIDB4YzAsIDB4ODIsIDB4ZTAsIDB4ZmUsIDB4MTIsIDB4MTgsIDB4ZDgsIDB4OGYsIDB4MWEsIDB4ZWUsIDB4NGYsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsCisgIDB4ZjAsIDB4ODAsIDB4YjUsIDB4MjIsIDB4OGYsIDB4MWEsIDB4ZTQsIDB4ZjUsIDB4MWIsIDB4NzUsIDB4MWMsIDB4ZmYsIDB4NzUsIDB4MWQsIDB4MTksIDB4NzUsCisgIDB4MWUsIDB4ODYsIDB4YWIsIDB4MWMsIDB4YWEsIDB4MWQsIDB4YTksIDB4MWUsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4MTEsIDB4YzQsIDB4YjR9fSwKKyB7MHgxNDQ2LCA2NCwgeyAweDAzLCAweDFkLCAweGFmLCAweDFiLCAweDA1LCAweDFiLCAweGVmLCAweGI1LCAweDFhLCAweDAxLCAweDIyLCAweDEyLCAweDExLCAweGFiLCAweDdlLCAweDAwLCAweDI5LAorICAweGZmLCAweGVlLCAweDNhLCAweGE5LCAweDA3LCAweDc1LCAweDFjLCAweGZmLCAweGY1LCAweDFkLCAweDg5LCAweDFlLCAweDgwLCAweGQ0LCAweDdiLCAweDAwLAorICAweDdhLCAweDAwLCAweDc5LCAweDAwLCAweDIyLCAweGU0LCAweDkwLCAweDc4LCAweDQxLCAweGYwLCAweDkwLCAweDc4LCAweDRmLCAweDc0LCAweGMwLCAweGYwLAorICAweGU0LCAweDkwLCAweDc4LCAweDUwLCAweGYwLCAweGU1LCAweDJjLCAweDkwLCAweDc4LCAweDUxLCAweGYwLCAweGFlLCAweDJjLCAweGU1LCAweDJkfX0sCisgezB4MTQ4NiwgNjQsIHsgMHg5MCwgMHg3OCwgMHg1MiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg1NCwgMHhlNSwgMHgyMywgMHhmMCwgMHg5MCwgMHg3OCwgMHg1NywgMHg3NCwgMHgwNCwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHhlMiwgMHhlMCwgMHg0NCwgMHgxMCwgMHhmMCwgMHhlMCwgMHg1NCwgMHhmNywgMHhmMCwgMHhlNCwgMHg5MCwgMHg3OCwgMHg1NSwgMHhmMCwgMHg5MCwKKyAgMHg3OCwgMHg1NSwgMHhlMCwgMHg2MCwgMHhmYSwgMHgyMiwgMHhlNCwgMHg5MCwgMHg3OCwgMHg0MSwgMHhmMCwgMHhlNSwgMHgyYywgMHg5MCwgMHg3OCwgMHg0ZiwKKyAgMHhmMCwgMHhhZSwgMHgyYywgMHhlNSwgMHgyZCwgMHg5MCwgMHg3OCwgMHg1MCwgMHhmMCwgMHg5MCwgMHg3OCwgMHg1MSwgMHg3NCwgMHhjMCwgMHhmMH19LAorIHsweDE0YzYsIDY0LCB7IDB4ZTQsIDB4OTAsIDB4NzgsIDB4NTIsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NTQsIDB4ZTUsIDB4MjMsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NTcsIDB4NzQsIDB4MDQsIDB4ZjAsCisgIDB4ZTQsIDB4OTAsIDB4NzgsIDB4NTUsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NTUsIDB4ZTAsIDB4NjAsIDB4ZmEsIDB4MjIsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MDQsCisgIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4NjAsIDB4MGYsIDB4MTQsIDB4NjAsIDB4MTMsIDB4MTQsIDB4NjAsCisgIDB4MTcsIDB4ODAsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZWYsIDB4ZjAsIDB4ODAsIDB4MTMsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZWYsIDB4ZjB9fSwKKyB7MHgxNTA2LCA2NCwgeyAweDgwLCAweDBjLCAweDkwLCAweDdmLCAweGNiLCAweGVmLCAweGYwLCAweDgwLCAweDA1LCAweDkwLCAweDdmLCAweGNkLCAweGVmLCAweGYwLCAweGU1LCAweDE2LCAweDQyLAorICAweDJhLCAweDIyLCAweGU1LCAweDE1LCAweDI0LCAweDA0LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDE0LCAweDYwLAorICAweDBmLCAweDE0LCAweDYwLCAweDEzLCAweDE0LCAweDYwLCAweDE3LCAweDgwLCAweDAwLCAweDkwLCAweDdmLCAweGI3LCAweGVmLCAweGYwLCAweDgwLCAweDEzLAorICAweDkwLCAweDdmLCAweGI5LCAweGVmLCAweGYwLCAweDgwLCAweDBjLCAweDkwLCAweDdmLCAweGJiLCAweGVmLCAweGYwLCAweDgwLCAweDA1LCAweDkwfX0sCisgezB4MTU0NiwgNjQsIHsgMHg3ZiwgMHhiZCwgMHhlZiwgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwgMHgyYSwgMHgyMiwgMHhhZSwgMHgwNywgMHhlNCwgMHhmZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMiwKKyAgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmZCwgMHgxMiwgMHgxNiwgMHg0NywgMHg5MCwgMHg3OCwKKyAgMHg0MSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZSwgMHhmMCwgMHhlNCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMiwgMHhmNSwgMHg4MiwKKyAgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHg4MCwgMHhmZCwgMHgxMiwgMHgxNiwgMHg0NywgMHgyMiwgMHhjMCwgMHhlMH19LAorIHsweDE1ODYsIDY0LCB7IDB4YzAsIDB4ZjAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4YzAsIDB4ZDAsCisgIDB4NzUsIDB4ZDAsIDB4MDgsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YTksIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MTIsIDB4MTMsIDB4MTIsIDB4ZDAsCisgIDB4ZDAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZjAsIDB4ZDAsIDB4ZTAsIDB4MzIsCisgIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDF9fSwKKyB7MHgxNWM2LCA2NCwgeyAweDc0LCAweDAyLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDAzLCAweGYwLCAweGU1LCAweDE1LCAweDI0LAorICAweDM3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLAorICAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDAzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LAorICAweDA0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDAzLCAweGYwLCAweGU1LCAweDE1fX0sCisgezB4MTYwNiwgNjQsIHsgMHgyNCwgMHgzNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwKKyAgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwKKyAgMHgwNiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwMywgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwKKyAgMHgzNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMH19LAorIHsweDE2NDYsIDY0LCB7IDB4MjIsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsCisgIDB4ODMsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDcsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDUsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4OTAsCisgIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzgsIDB4NDF9fSwKKyB7MHgxNjg2LCA2NCwgeyAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDAzLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM3LCAweGY1LAorICAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweGU1LCAweDE1LAorICAweDI0LCAweDA0LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDE0LCAweDYwLCAweDBlLCAweDE0LCAweDYwLCAweDExLAorICAweDE0LCAweDYwLCAweDE0LCAweDgwLCAweDAwLCAweDkwLCAweDdmLCAweGM2LCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweGM4LCAweGUwfX0sCisgezB4MTZjNiwgNjQsIHsgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhjYSwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhjYywgMHhlMCwgMHhmZiwgMHgyMiwgMHhlNSwgMHgxNSwgMHgyNCwKKyAgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxNCwgMHg2MCwgMHgwZSwgMHgxNCwgMHg2MCwgMHgxMSwgMHgxNCwKKyAgMHg2MCwgMHgxNCwgMHg4MCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhiNiwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhiOCwgMHhlMCwgMHhmZiwgMHgyMiwKKyAgMHg5MCwgMHg3ZiwgMHhiYSwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhiYywgMHhlMCwgMHhmZiwgMHgyMiwgMHhlNSwgMHgxNSwgMHgyNH19LAorIHsweDE3MDYsIDY0LCB7IDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4NjAsIDB4MGUsIDB4MTQsIDB4NjAsIDB4MTEsIDB4MTQsIDB4NjAsCisgIDB4MTQsIDB4ODAsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsCisgIDB4N2YsIDB4Y2IsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4Y2QsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsCisgIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YzQsIDB4ZTQsIDB4ZjB9fSwKKyB7MHgxNzQ2LCA2NCwgeyAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA0LCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLAorICAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweDkwLCAweDdiLCAweDQxLCAweGUwLCAweGY1LCAweDM2LCAweDQzLCAweDEzLCAweDEwLCAweGEzLCAweGUwLAorICAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweGQ3LCAweDc0LCAweDE3LCAweGYwLCAweDc0LCAweDM3LCAweGYwLCAweDkwLCAweDdiLCAweDQzLCAweGUwLCAweGY1LAorICAweDM3LCAweGEzLCAweGUwLCAweDU0LCAweGYwLCAweGY1LCAweDI5LCAweGUwLCAweDYwLCAweDAyLCAweGQyLCAweDBhLCAweDIyLCAweGMwLCAweGUwfX0sCisgezB4MTc4NiwgNjQsIHsgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhkMiwgMHgwMSwgMHg1MywgMHg5MSwKKyAgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwKKyAgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwKKyAgMHg3NSwgMHg4NiwgMHgwMCwgMHhkMiwgMHgwOCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwOCwgMHhmMCwgMHhkMH19LAorIHsweDE3YzYsIDY0LCB7IDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4MTIsIDB4MTgsIDB4YzAsIDB4YWUsIDB4MDcsCisgIDB4MTIsIDB4MTgsIDB4YzAsIDB4YWQsIDB4MDcsIDB4ZWUsIDB4NmQsIDB4NjAsIDB4MTAsIDB4MTIsIDB4MTgsIDB4YzAsIDB4YWUsIDB4MDcsIDB4ZWUsIDB4NmQsCisgIDB4NjAsIDB4MDcsIDB4MTIsIDB4MTgsIDB4YzAsIDB4YWQsIDB4MDcsIDB4ODAsIDB4ZWMsIDB4YWYsIDB4MDYsIDB4MjIsIDB4NzQsIDB4MDAsIDB4ZjUsIDB4ODYsCisgIDB4OTAsIDB4ZmQsIDB4YTUsIDB4N2MsIDB4MDUsIDB4YTMsIDB4ZTUsIDB4ODIsIDB4NDUsIDB4ODMsIDB4NzAsIDB4ZjksIDB4MjIsIDB4OTAsIDB4N2Z9fSwKKyB7MHgxODA2LCA2NCwgeyAweGQ2LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweDQzLCAweDg3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIyLCAweDkwLCAweDdmLCAweGQ2LAorICAweGUwLCAweDQ0LCAweDA0LCAweGYwLCAweGUwLCAweDQ0LCAweDA4LCAweGYwLCAweDMwLCAweDBiLCAweDA0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDdmLAorICAweGY0LCAweDdlLCAweDAxLCAweDEyLCAweDE4LCAweDZiLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGY3LCAweGYwLCAweDIyLCAweDEyLCAweDEzLAorICAweDdjLCAweDEyLCAweDE4LCAweDA0LCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDMwLCAweGU3LCAweDBhLCAweDdmLCAweDA1LCAweDdlLCAweDAwfX0sCisgezB4MTg0NiwgNjQsIHsgMHgxMiwgMHgxOCwgMHg2YiwgMHgxMiwgMHgxOCwgMHg5ZSwgMHgxMiwgMHgwYSwgMHhiOCwgMHgyMiwgMHgwMywgMHgzNSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyZSwKKyAgMHg4MSwgMHgwMCwgMHgwMCwgMHhjMSwgMHg4NSwgMHhjMSwgMHg4MSwgMHhjMSwgMHgwOCwgMHhjMSwgMHgwMCwgMHhjMSwgMHgwNiwgMHgwMSwgMHgyMiwgMHgwMCwKKyAgMHgwMSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg4ZSwgMHgxOCwgMHg4ZiwgMHgxOSwgMHhlNSwgMHgxOSwgMHgxNSwgMHgxOSwgMHhhZSwgMHgxOCwgMHg3MCwgMHgwMiwKKyAgMHgxNSwgMHgxOCwgMHg0ZSwgMHg2MCwgMHgwOCwgMHgxMiwgMHgxNywgMHhmMywgMHgxMiwgMHgxNywgMHhmMywgMHg4MCwgMHhlYiwgMHgyMiwgMHhlNX19LAorIHsweDE4ODYsIDY0LCB7IDB4MTUsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MDQsIDB4ZmYsIDB4NDQsIDB4MTAsIDB4OTAsIDB4N2YsCisgIDB4ZDcsIDB4ZjAsIDB4ZWYsIDB4NDQsIDB4MzAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4N2YsIDB4MGQsCisgIDB4N2UsIDB4MDAsIDB4MTIsIDB4MTgsIDB4NmIsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4NzgsIDB4NDEsCisgIDB4NzQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDMsIDB4ZjB9fSwKKyB7MHgxOGM2LCA2NCwgeyAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDA0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLAorICAweDIyLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDA1LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDc4LCAweDQxLAorICAweDc0LCAweDA2LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweGU0LCAweDkwLCAweDc4LCAweDQxLCAweGYwLCAweDkwLCAweGMwLAorICAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDUzLCAweGQ4LCAweGVmLCAweDMyLCAweDAwLCAweDEyLCAweDAxLCAweDEwLCAweDAxLCAweGZmLCAweDAwfX0sCisgezB4MTkwNiwgNjQsIHsgMHgwMCwgMHg0MCwgMHhjZCwgMHgwNiwgMHgwYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwNCwgMHgwOSwgMHgwMiwgMHg3NCwgMHgwMCwgMHgwMSwKKyAgMHgwMSwgMHgwMCwgMHhhMCwgMHgzMiwgMHgwOSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMSwKKyAgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMywgMHgwMiwgMHg0MCwKKyAgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNSwgMHgwMiwgMHg0MCwgMHgwMH19LAorIHsweDE5NDYsIDY0LCB7IDB4MDAsIDB4MDcsIDB4MDUsIDB4MDYsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDcsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsCisgIDB4ODEsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODMsIDB4MDIsCisgIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODQsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODUsIDB4MDIsIDB4NDAsIDB4MDAsCisgIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODYsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODcsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDF9fSwKKyB7MHgxOTg2LCA2NCwgeyAweDA0LCAweDAzLCAweDA5LCAweDA0LCAweDQ4LCAweDAzLCAweDRiLCAweDAwLCAweDY1LCAweDAwLCAweDc5LCAweDAwLCAweDczLCAweDAwLCAweDcwLCAweDAwLCAweDYxLAorICAweDAwLCAweDZlLCAweDAwLCAweDJjLCAweDAwLCAweDIwLCAweDAwLCAweDYxLCAweDAwLCAweDIwLCAweDAwLCAweDY0LCAweDAwLCAweDY5LCAweDAwLCAweDc2LAorICAweDAwLCAweDY5LCAweDAwLCAweDczLCAweDAwLCAweDY5LCAweDAwLCAweDZmLCAweDAwLCAweDZlLCAweDAwLCAweDIwLCAweDAwLCAweDZmLCAweDAwLCAweDY2LAorICAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDZlLCAweDAwLCAweDZmLCAweDAwLCAweDUzLCAweDAwLCAweDc5LCAweDAwfX0sCisgezB4MTljNiwgNjQsIHsgMHg3MywgMHgwMCwgMHgyMCwgMHgwMCwgMHg0OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2MywgMHgwMCwgMHgyZSwgMHgwMCwgMHgzNiwgMHgwMywgMHg1NSwgMHgwMCwgMHg1MywKKyAgMHgwMCwgMHg0MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyZCwgMHgwMCwgMHg3MCwgMHgwMCwgMHg2ZiwgMHgwMCwgMHg3MiwgMHgwMCwgMHg3NCwKKyAgMHgwMCwgMHgyMCwgMHgwMCwgMHg1MywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2YywgMHgwMCwgMHgyMCwKKyAgMHgwMCwgMHg0MSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg3MCwgMHgwMCwgMHg3NCwgMHgwMCwgMHg2NSwgMHgwMCwgMHg3MiwgMHgwMH19LAorIHsweDFhMDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxYTQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MWE4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDFhYzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTcsIDB4ODQsIDB4MDAsIDB4MDIsIDB4MWJ9fSwKKyB7MHgxYjA2LCAyMSwgeyAweDA0LCAweDAwLCAweDAyLCAweDE3LCAweDMyLCAweDAwLCAweDAyLCAweDE3LCAweGFiLCAweDAwLCAweDAyLCAweDFiLCAweDEwLCAweDAwLCAweDAyLCAweDFiLCAweDE0LAorICAweDAwLCAweDAyLCAweDE1LCAweDg0fX0sCisgezB4ZmZmZiwgMCwgezB4MDB9fQorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTQ5d2xjX2Z3LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2E0OXdsY19mdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZjA2YTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2E0OXdsY19mdy5oCkBAIC0wLDAgKzEsNDc2IEBACisvKiBrZXlzcGFuX3VzYTQ5d19mdy5oCisKKwlUaGUgZmlybXdhcmUgY29udGFpbmVkIGhlcmVpbiBhcyBrZXlzcGFuX3VzYTQ5d19mdy5oIGlzCisKKwkJQ29weXJpZ2h0IChDKSAxOTk5LTIwMDMKKwkJS2V5c3BhbiwgQSBkaXZpc2lvbiBvZiBJbm5vU3lzIEluY29ycG9yYXRlZCAoIktleXNwYW4iKQorCQkKKwlhcyBhbiB1bnB1Ymxpc2hlZCB3b3JrLiBUaGlzIG5vdGljZSBkb2VzIG5vdCBpbXBseSB1bnJlc3RyaWN0ZWQgb3IKKwlwdWJsaWMgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29kZSBmcm9tIHdoaWNoIHRoaXMgZmlybXdhcmUgaW1hZ2UgaXMKKwlkZXJpdmVkLiAgRXhjZXB0IGFzIG5vdGVkIGJlbG93IHRoaXMgZmlybXdhcmUgaW1hZ2UgbWF5IG5vdCBiZSAKKwlyZXByb2R1Y2VkLCB1c2VkLCBzb2xkIG9yIHRyYW5zZmVycmVkIHRvIGFueSB0aGlyZCBwYXJ0eSB3aXRob3V0IAorCUtleXNwYW4ncyBwcmlvciB3cml0dGVuIGNvbnNlbnQuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisJUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIAorCWltYWdlIGFzIHBhcnQgb2YgYSBMaW51eCBvciBvdGhlciBPcGVuIFNvdXJjZSBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbCAKKwlpbiB0ZXh0IG9yIGJpbmFyeSBmb3JtIGFzIHJlcXVpcmVkLiAKKworCVRoaXMgZmlybXdhcmUgbWF5IG5vdCBiZSBtb2RpZmllZCBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aXRoICAKKwlLZXlzcGFuIGhhcmR3YXJlLiAgRGlzdHJpYnV0aW9uIGFuZC9vciBNb2RpZmljYXRpb24gb2YgdGhlIAorCWtleXNwYW4uYyBkcml2ZXIgd2hpY2ggaW5jbHVkZXMgdGhpcyBmaXJtd2FyZSwgaW4gd2hvbGUgb3IgaW4gCisJcGFydCwgcmVxdWlyZXMgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHN0YXRlbWVudC4iCisKK3N0YXRpYyBjaGFyIHRoZUZpcm13YXJlRGF0ZTQ5W10gPQorCSIwMi8xNC8yMDAyICAwMjozN3AgICAgICAgICAgICAgIDE5LDM0NyBVU0E0OSI7CisKKworCitzdGF0aWMgY2hhciB0aGVGaXJtd2FyZURhdGU2NVtdID0KKwkiMDEvMzEvMjAwMyAgMDk6MzRhICAgICAgICAgICAgICAxOSwzMzEgVVNBNjUiOworCisKKyovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCBrZXlzcGFuX3VzYTQ5d2xjX2Zpcm13YXJlW10gPSB7CisgezB4N2Y5MiwgIDEsIHsgMHgwMX19LAorIHsweDAwMzMsICAzLCB7IDB4MDIsIDB4MTgsIDB4ZmJ9fSwKKyB7MHgwMDM2LCAxMywgeyAweGU1LCAweDExLCAweDA0LCAweDkwLCAweDc4LCAweDQxLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyfX0sCisgezB4MDA0NiwgMTYsIHsgMHhlNCwgMHhmZiwgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZSwgMHhlNSwgMHgxNX19LAorIHsweDAwNTYsIDE2LCB7IDB4MjQsIDB4MDQsIDB4ZmQsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZmEsIDB4YTksIDB4MDUsIDB4N2IsIDB4MDEsIDB4ZWYsIDB4N2MsIDB4MDAsIDB4MjksIDB4Zjl9fSwKKyB7MHgwMDY2LCAxNiwgeyAweGVjLCAweDNhLCAweGZhLCAweGVlLCAweDEyLCAweDExLCAweGVjLCAweDBmLCAweGJmLCAweDIyLCAweGQ3LCAweGU1LCAweDE1LCAweDI0LCAweDA1LCAweGY1fX0sCisgezB4MDA3NiwgMTYsIHsgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg3MCwgMHgwMywgMHgwMiwgMHgwMSwgMHgzNCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgwOX19LAorIHsweDAwODYsIDE2LCB7IDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NzAsIDB4MGUsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MGEsIDB4ZjUsIDB4ODJ9fSwKKyB7MHgwMDk2LCAxNiwgeyAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDE4LCAweDdmLCAweDAxLCAweGU0LCAweGZkLCAweDEyLCAweDE2LCAweDZiLCAweGU1fX0sCisgezB4MDBhNiwgMTYsIHsgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhjZiwgMHhmMCwgMHg4MCwgMHg0MX19LAorIHsweDAwYjYsIDE2LCB7IDB4ZTUsIDB4MTUsIDB4MjQsIDB4MDYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MDAsIDB4MDN9fSwKKyB7MHgwMGM2LCAxNiwgeyAweGU1LCAweDE1LCAweDI0LCAweDA3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweDEyLCAweDE1LCAweGFifX0sCisgezB4MDBkNiwgMTYsIHsgMHg3ZiwgMHgwMSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgwOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZCwgMHgxMn19LAorIHsweDAwZTYsIDE2LCB7IDB4MTYsIDB4NmIsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MzB9fSwKKyB7MHgwMGY2LCAxNiwgeyAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDgwLCAweGYwfX0sCisgezB4MDAwMywgMTYsIHsgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NH19LAorIHsweDAwMTMsIDE2LCB7IDB4ZjAsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjMsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjR9fSwKKyB7MHgwMDIzLCAxNiwgeyAweDM3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyfX0sCisgezB4MDA0MywgIDMsIHsgMHgwMiwgMHgxYiwgMHgwMH19LAorIHsweDAwMDAsICAzLCB7IDB4MDIsIDB4MTAsIDB4OTB9fSwKKyB7MHgwMTA2LCA2NCwgeyAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGY0LCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLAorICAweGUwLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGYyLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM2LCAweGY1LAorICAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDA2LCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweGU1LCAweDE1LCAweDI0LAorICAweDBiLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDMyLCAweGU1LCAweDE1LCAweDI0LCAweDBjfX0sCisgezB4MDE0NiwgNjQsIHsgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHgzZiwgMHhmZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNywgMHhmNSwgMHg4MiwKKyAgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmMywgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwKKyAgMHgzNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwKKyAgMHgwZCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg3MCwgMHgwMywgMHgwMiwgMHgwMiwgMHg0ZiwgMHhlNX19LAorIHsweDAxODYsIDY0LCB7IDB4MTUsIDB4MjQsIDB4MTcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MTEsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzIsCisgIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4ODAsIDB4MGYsIDB4ZTUsIDB4MTUsIDB4MjQsCisgIDB4MzIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4ZTQsIDB4ZmYsIDB4ZTUsIDB4MTUsCisgIDB4MjQsIDB4MzIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmQsIDB4MTIsIDB4MTYsIDB4NmIsIDB4ZTV9fSwKKyB7MHgwMWM2LCA2NCwgeyAweDE1LCAweDI0LCAweDBlLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDExLCAweGU1LCAweDE1LCAweDI0LCAweDMzLAorICAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweDgwLCAweDBmLCAweGU1LCAweDE1LCAweDI0LAorICAweDMzLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDMzLAorICAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZjLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDBmfX0sCisgezB4MDIwNiwgNjQsIHsgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgyZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMywgMHhmNSwgMHg4MiwgMHhlNCwKKyAgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgxMCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwKKyAgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHgxMiwgMHgxNiwgMHgwYiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgxMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwKKyAgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHgxMiwgMHgxNiwgMHgzYiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMywgMHhmNSwgMHg4MiwgMHhlNH19LAorIHsweDAyNDYsIDY0LCB7IDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTUsIDB4ZGIsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsCisgIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4NDQsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MTUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsCisgIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MTEsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsCisgIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MGYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjV9fSwKKyB7MHgwMjg2LCA2NCwgeyAweDgzLCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGY0LCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM5LCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDEyLCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDQ0LCAweGU1LCAweDE1LCAweDI0LCAweDEzLCAweGY1LCAweDgyLCAweGU0LCAweDM1LAorICAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDExLCAweGU1LCAweDE1LCAweDI0LCAweDM5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0fX0sCisgezB4MDJjNiwgNjQsIHsgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg4MCwgMHgwZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwKKyAgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmNCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOSwKKyAgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgxNiwKKyAgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNSwgMHhmNSwgMHg4Mn19LAorIHsweDAzMDYsIDY0LCB7IDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MTcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsCisgIDB4ODMsIDB4ZTAsIDB4MzAsIDB4ZTAsIDB4MTEsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsCisgIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4ODAsIDB4MGYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsCisgIDB4ODMsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjV9fSwKKyB7MHgwMzQ2LCA2NCwgeyAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDE1LCAweDI0LCAweDNiLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweGU1LAorICAweDE1LCAweDI0LCAweDE5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDExLCAweGU1LCAweDE1LCAweDI0LAorICAweDM5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDEwLCAweGYwLCAweDgwLCAweDBmLCAweGU1LCAweDE1LAorICAweDI0LCAweDM5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGVmLCAweGYwLCAweDkwLCAweDc4fX0sCisgezB4MDM4NiwgNjQsIHsgMHg0MSwgMHg3NCwgMHhmNCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg5MCwKKyAgMHhjMCwgMHgwMCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgxYSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwKKyAgMHg2YiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhiZiwgMHhmMCwKKyAgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmMywgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNH19LAorIHsweDAzYzYsIDY0LCB7IDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjEsIDB4ZjAsIDB4MTIsIDB4MDAsCisgIDB4MzYsIDB4ZWYsIDB4NTQsIDB4ZmUsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsCisgIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZmYsIDB4ZjAsIDB4ZmQsIDB4ZTQsIDB4ZmYsIDB4MTIsIDB4MTYsIDB4NmIsIDB4ZTUsIDB4MTUsCisgIDB4MjQsIDB4MmMsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MmJ9fSwKKyB7MHgwNDA2LCA2NCwgeyAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweGU1LCAweDE2LCAweDQyLCAweDEzLCAweGU1LCAweDE1LCAweDI0LCAweDFiLAorICAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDcwLCAweDBlLCAweGU1LCAweDE1LCAweDI0LCAweDI1LCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDI4LCAweGU1LCAweDE1LCAweDI0LCAweDMyLCAweGY1LCAweDgyLCAweGU0LCAweDM1LAorICAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDAyLCAweGZmLCAweGYwLCAweGZkLCAweGU0LCAweGZmLCAweDEyLCAweDE2LCAweDZiLCAweGU1fX0sCisgezB4MDQ0NiwgNjQsIHsgMHgxNSwgMHgyNCwgMHgyYiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHg3NCwgMHgwMSwgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwgMHgxMywKKyAgMHhlNSwgMHgxNSwgMHgyNCwgMHgxYywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHg3MCwgMHgwZSwgMHhlNSwKKyAgMHgxNSwgMHgyNCwgMHgyNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgyYSwgMHg5MCwgMHg3OCwgMHg0MSwKKyAgMHg3NCwgMHhmMiwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMH19LAorIHsweDA0ODYsIDY0LCB7IDB4NDQsIDB4MDQsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZWYsIDB4NjAsIDB4MGYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsCisgIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MWQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsCisgIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MjcsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsCisgIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjMsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzcsIDB4ZjV9fSwKKyB7MHgwNGM2LCA2NCwgeyAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDFlLAorICAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDI4LCAweGU1LCAweDE1LCAweDI0LCAweDMyLCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZlLCAweGZmLCAweGYwLCAweGZkLCAweGU0LCAweGZmLCAweDEyLCAweDE2LCAweDZiLAorICAweGU1LCAweDE1LCAweDI0LCAweDJkLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LCAweDAxLCAweGYwLCAweGU1fX0sCisgezB4MDUwNiwgNjQsIHsgMHgxNiwgMHg0MiwgMHgxMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgxZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg3MCwgMHgwZSwKKyAgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgyNywgMHhlNSwgMHgxNSwKKyAgMHgyNCwgMHgzMiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwMSwgMHhmZiwgMHhmMCwgMHhmZCwgMHhlNCwKKyAgMHhmZiwgMHgxMiwgMHgxNiwgMHg2YiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyZCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4M319LAorIHsweDA1NDYsIDY0LCB7IDB4ZTQsIDB4ZjAsIDB4ZTUsIDB4MTYsIDB4NDIsIDB4MTMsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjAsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsCisgIDB4ZTAsIDB4NzAsIDB4MGUsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsCisgIDB4MTgsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjIsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsCisgIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjEsIDB4ZjUsIDB4ODJ9fSwKKyB7MHgwNTg2LCA2NCwgeyAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDBmLCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LAorICAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDIyLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LAorICAweDgzLCAweGUwLCAweDYwLCAweDFmLCAweGU1LCAweDE1LCAweDI0LCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LAorICAweDAxLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDNhLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGU0LCAweGYwfX0sCisgezB4MDVjNiwgNjQsIHsgMHhlNSwgMHgxNiwgMHg0MiwgMHgxMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgyMywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwKKyAgMHgwMywgMHgxMiwgMHgxOCwgMHg3YSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwKKyAgMHg2MCwgMHgyMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwOCwKKyAgMHhmMCwgMHhlNSwgMHgxNiwgMHhjNCwgMHg1NCwgMHhmMCwgMHhmZiwgMHg0MiwgMHgxMSwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlMCwgMHg0ZiwgMHhmMH19LAorIHsweDA2MDYsIDY0LCB7IDB4OTAsIDB4NzgsIDB4NDEsIDB4ZTAsIDB4NGYsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsCisgIDB4ZTAsIDB4NjAsIDB4MjQsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsCisgIDB4ZjcsIDB4ZjAsIDB4ZTUsIDB4MTYsIDB4YzQsIDB4NTQsIDB4ZjAsIDB4ZjQsIDB4ZmYsIDB4NTIsIDB4MTEsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4NWYsCisgIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4ZTAsIDB4NWYsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZTksIDB4ZTAsIDB4MTIsIDB4MTEsIDB4ZmV9fSwKKyB7MHgwNjQ2LCA2NCwgeyAweDA3LCAweDk5LCAweDAwLCAweDA4LCAweDBkLCAweDAxLCAweDA4LCAweDc5LCAweDAzLCAweDA2LCAweDYyLCAweDA2LCAweDA3LCAweDhhLCAweDA4LCAweDA3LCAweDdlLAorICAweDA5LCAweDA3LCAweDY2LCAweDBhLCAweDA3LCAweDc1LCAweDBiLCAweDAwLCAweDAwLCAweDA4LCAweGM4LCAweDkwLCAweDdmLCAweGViLCAweGUwLCAweDI0LAorICAweGZlLCAweDYwLCAweDFjLCAweDE0LCAweDcwLCAweDAzLCAweDAyLCAweDA3LCAweDE0LCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDA3LCAweDVjLAorICAweDc0LCAweDE5LCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweDc0LCAweDAwLCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDA4LCAweGNmfX0sCisgezB4MDY4NiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHgwNCwgMHg3NSwgMHg4MiwgMHgxNywgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHgzMCwKKyAgMHhlMCwgMHgwNCwgMHg3ZiwgMHgwMiwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMywgMHg3NSwgMHg4MiwgMHg4MiwgMHg3NSwgMHg4MywgMHgxOSwgMHhlZiwgMHhmMCwKKyAgMHg3NSwgMHg4MiwgMHg2ZCwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg3NSwgMHg4MiwgMHg2NiwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg3NSwgMHg4MiwKKyAgMHg1ZiwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg3NSwgMHg4MiwgMHg1OCwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYX19LAorIHsweDA2YzYsIDY0LCB7IDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDQsIDB4N2YsIDB4NjQsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MzIsIDB4NzUsIDB4ODIsIDB4MWEsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZWYsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZWYsIDB4ZTAsIDB4ZmUsIDB4OTAsIDB4N2YsIDB4ZWUsIDB4ZTAsIDB4N2MsIDB4MDAsIDB4MjQsIDB4MDAsIDB4ZjUsIDB4MTgsCisgIDB4ZWMsIDB4M2UsIDB4ZjUsIDB4MTcsIDB4NzUsIDB4MzMsIDB4MTksIDB4NzUsIDB4MzQsIDB4MTIsIDB4NzUsIDB4ODIsIDB4MTQsIDB4NzUsIDB4ODMsIDB4MTksCisgIDB4ZTAsIDB4NzUsIDB4MjcsIDB4MDAsIDB4ZjUsIDB4MjgsIDB4ZDMsIDB4ZTUsIDB4MjgsIDB4OTUsIDB4MTgsIDB4ZTUsIDB4MjcsIDB4OTUsIDB4MTd9fSwKKyB7MHgwNzA2LCA2NCwgeyAweDQwLCAweDA2LCAweDg1LCAweDE3LCAweDI3LCAweDg1LCAweDE4LCAweDI4LCAweDEyLCAweDEzLCAweDBkLCAweDAyLCAweDA4LCAweGNmLCAweDkwLCAweDdmLCAweGVhLAorICAweGUwLCAweGZmLCAweDEyLCAweDE0LCAweDVmLCAweGVhLCAweDQ5LCAweDYwLCAweDMyLCAweDkwLCAweDdmLCAweGVlLCAweGUwLCAweDc1LCAweDE3LCAweDAwLAorICAweGY1LCAweDE4LCAweGFlLCAweDAyLCAweGFmLCAweDAxLCAweDhlLCAweDMzLCAweDhmLCAweDM0LCAweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGUwLCAweGZlLAorICAweGEzLCAweGUwLCAweDhlLCAweDI3LCAweGY1LCAweDI4LCAweGQzLCAweDk1LCAweDE4LCAweGU1LCAweDI3LCAweDk1LCAweDE3LCAweDQwLCAweDA2fX0sCisgezB4MDc0NiwgNjQsIHsgMHg4NSwgMHgxNywgMHgyNywgMHg4NSwgMHgxOCwgMHgyOCwgMHgxMiwgMHgxMywgMHgwZCwgMHgwMiwgMHgwOCwgMHhjZiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwKKyAgMHgwMSwgMHhmMCwgMHgwMiwgMHgwOCwgMHhjZiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwOCwgMHhjZiwgMHg5MCwKKyAgMHg3ZiwgMHgwMCwgMHhlNSwgMHgyNSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwOCwgMHhjZiwgMHg5MCwgMHg3ZiwKKyAgMHhlYSwgMHhlMCwgMHhmNSwgMHgyNSwgMHgwMiwgMHgwOCwgMHhjZiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmNSwgMHgyMiwgMHgxMiwgMHgwYX19LAorIHsweDA3ODYsIDY0LCB7IDB4Y2UsIDB4MDIsIDB4MDgsIDB4Y2YsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4MjIsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MDIsCisgIDB4MDgsIDB4Y2YsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4N2YsIDB4NjAsIDB4MjQsIDB4MTQsIDB4NjAsIDB4MzEsIDB4MjQsIDB4MDIsIDB4NzAsCisgIDB4NWIsIDB4YTIsIDB4MDAsIDB4ZTQsIDB4MzMsIDB4ZmYsIDB4MjUsIDB4ZTAsIDB4ZmYsIDB4YTIsIDB4MDYsIDB4ZTQsIDB4MzMsIDB4NGYsIDB4OTAsIDB4N2YsCisgIDB4MDAsIDB4ZjAsIDB4ZTQsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDgsIDB4Y2YsIDB4ZTR9fSwKKyB7MHgwN2M2LCA2NCwgeyAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDA4LCAweGNmLCAweDkwLCAweDdmLAorICAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLAorICAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZkLCAweDkwLCAweDdmLCAweDAwLCAweGYwLAorICAweGU0LCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDA4LCAweGNmLCAweDkwLCAweDdmLCAweGI0fX0sCisgezB4MDgwNiwgNjQsIHsgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwOCwgMHhjZiwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxZCwgMHgyNCwgMHgwMiwKKyAgMHg2MCwgMHgwMywgMHgwMiwgMHgwOCwgMHhjZiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhiNCwgMHgwMSwgMHgwNSwgMHhjMiwgMHgwMCwgMHgwMiwgMHgwOCwKKyAgMHhjZiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwOCwgMHhjZiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwKKyAgMHgzOCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NH19LAorIHsweDA4NDYsIDY0LCB7IDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4ZWMsIDB4ZTAsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4MTMsIDB4MTMsIDB4MTMsIDB4NTQsIDB4MWYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4OTAsCisgIDB4N2YsIDB4ZDcsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4ODAsIDB4NWYsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsCisgIDB4ODAsIDB4NTYsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTgsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NGEsIDB4OTB9fSwKKyB7MHgwODg2LCA2NCwgeyAweDdmLCAweGVhLCAweGUwLCAweGI0LCAweDAxLCAweDA0LCAweGQyLCAweDAwLCAweDgwLCAweDNmLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLAorICAweDgwLCAweDM2LCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDIwLCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLAorICAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LAorICAweDdmLCAweGY1LCAweDgzLCAweDc0LCAweDAxLCAweGYwLCAweDgwLCAweDEwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwfX0sCisgezB4MDhjNiwgNjQsIHsgMHg4MCwgMHgwNywgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHgyMiwKKyAgMHhlNSwgMHgxMiwgMHg1NCwgMHgwZiwgMHg3MCwgMHgwMywgMHgwMiwgMHgwOSwgMHhjOCwgMHgxMiwgMHgxNiwgMHg5YSwgMHhlZiwgMHgyMCwgMHhlMSwgMHg3NSwKKyAgMHgxMiwgMHgxNiwgMHhmOCwgMHhlZiwgMHgxNCwgMHhmNSwgMHgxOCwgMHgxMiwgMHgxOCwgMHhjNSwgMHhlZiwgMHgyNSwgMHgxOCwgMHhmZiwgMHhlNCwgMHgzMywKKyAgMHhmZSwgMHhjMywgMHhlZiwgMHg5NCwgMHg4MCwgMHhlZSwgMHg2NCwgMHg4MCwgMHg5NCwgMHg4MCwgMHg1MCwgMHg1OSwgMHg4NSwgMHgxNSwgMHg4Mn19LAorIHsweDA5MDYsIDY0LCB7IDB4ODUsIDB4MTQsIDB4ODMsIDB4ZTAsIDB4ZmUsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4MzAsIDB4ZTAsIDB4MTEsIDB4ZTUsCisgIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ODAsIDB4MGYsCisgIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4ZjAsIDB4ZTUsCisgIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MjAsIDB4ZTIsIDB4MTIsIDB4ZTV9fSwKKyB7MHgwOTQ2LCA2NCwgeyAweDE4LCAweDYwLCAweDBlLCAweGY1LCAweDIzLCAweGVmLCAweDI0LCAweDAxLCAweGY1LCAweDJkLCAweGU0LCAweDNlLCAweGY1LCAweDJjLCAweDEyLCAweDE0LCAweGEwLAorICAweGU0LCAweGZmLCAweDEyLCAweDE0LCAweGQ3LCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLAorICAweGUwLCAweDMwLCAweGU3LCAweDVkLCAweDEyLCAweDE4LCAweGM1LCAweGU1LCAweDE1LCAweDI0LCAweDNiLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LAorICAweGY1LCAweDgzLCAweGUwLCAweGZlLCAweGVmLCAweGMzLCAweDllLCAweDUwLCAweDQ4LCAweGU1LCAweDE1LCAweDI0LCAweDJmLCAweGY1LCAweDgyfX0sCisgezB4MDk4NiwgNjQsIHsgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHg3NCwgMHgwMSwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwKKyAgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHg3YiwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzYSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwKKyAgMHg4MywgMHhlNCwgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwgMHgxMywgMHg5MCwgMHg3ZiwgMHhjMiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgxMCwgMHhlNSwgMHgxNSwKKyAgMHgyNCwgMHgyNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHgyNCwgMHg4MCwgMHgwMywgMHgxMn19LAorIHsweDA5YzYsIDY0LCB7IDB4MTIsIDB4OWMsIDB4MTIsIDB4MTYsIDB4YzksIDB4ZWYsIDB4MzAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MGEsIDB4Y2QsIDB4MTIsIDB4MTcsIDB4YzcsIDB4OGYsIDB4MTgsCisgIDB4MTIsIDB4MTgsIDB4ZDMsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsCisgIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTgsIDB4YzMsCisgIDB4OWYsIDB4NTAsIDB4MjgsIDB4MTIsIDB4MTgsIDB4YTksIDB4ZWYsIDB4MzAsIDB4ZTAsIDB4MjEsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzgsIDB4ZjV9fSwKKyB7MHgwYTA2LCA2NCwgeyAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDIwLCAweGU3LCAweDEyLCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LAorICAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDIwLCAweGUxLCAweDAzLCAweDAyLCAweDBhLCAweGNkLCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LAorICAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweGU1LCAweDE4LCAweDcwLCAweDAzLCAweDAyLCAweDBhLAorICAweGNkLCAweGI0LCAweDgwLCAweDBmLCAweGU1LCAweDE1LCAweDI0LCAweDM4LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzfX0sCisgezB4MGE0NiwgNjQsIHsgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwKKyAgMHgzMCwgMHhlNywgMHgyOSwgMHhlNSwgMHgxOCwgMHhkMywgMHg5NCwgMHgyMCwgMHg0MCwgMHgwMywgMHg3NSwgMHgxOCwgMHgyMCwgMHg4NSwgMHgxOCwgMHgyMywKKyAgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwgMHg4MywgMHhhMywgMHhhMywgMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgMHg4YywgMHgyYywgMHhmNSwgMHgyZCwKKyAgMHgxMiwgMHgxMywgMHhjZiwgMHhlNSwgMHgxOCwgMHgyNSwgMHhlMCwgMHhmZiwgMHgxMiwgMHgxNSwgMHgwZCwgMHgyMiwgMHhlNSwgMHgxOCwgMHhkM319LAorIHsweDBhODYsIDY0LCB7IDB4OTQsIDB4M2YsIDB4NDAsIDB4MDMsIDB4NzUsIDB4MTgsIDB4M2YsIDB4ODUsIDB4MTgsIDB4MjMsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzgsIDB4ZjUsIDB4ODIsIDB4ZTQsCisgIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsIDB4MTQsIDB4ODMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4ZmMsCisgIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsIDB4MTQsIDB4ODMsIDB4YTMsIDB4YTMsCisgIDB4ZTAsIDB4ZmUsIDB4YTMsIDB4ZTAsIDB4MjQsIDB4MDEsIDB4ZjUsIDB4MmQsIDB4ZTQsIDB4M2UsIDB4ZjUsIDB4MmMsIDB4MTIsIDB4MTQsIDB4MWR9fSwKKyB7MHgwYWM2LCA2NCwgeyAweGU1LCAweDE4LCAweDA0LCAweGZmLCAweDEyLCAweDE1LCAweDBkLCAweDIyLCAweGU0LCAweDkwLCAweDdmLCAweDkzLCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LAorICAweGZmLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk2LCAweGYwLCAweDkwLCAweDdmLCAweDk0LCAweGYwLCAweDkwLCAweDc4LCAweDRhLCAweDA0LCAweGYwLAorICAweGY1LCAweDhlLCAweDkwLCAweDdmLCAweDk1LCAweDc0LCAweGMwLCAweGYwLCAweDkwLCAweDdmLCAweDllLCAweDc0LCAweDNmLCAweGYwLCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDJmLCAweGYwLCAweDkwLCAweDc4LCAweDQzLCAweDc0LCAweGY3LCAweGYwLCAweGU0LCAweDkwLCAweDc4LCAweDQxLCAweGYwfX0sCisgezB4MGIwNiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHhkZiwgMHg3NCwgMHg5ZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5MiwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwKKyAgMHg3ZSwgMHg3YiwgMHg3ZiwgMHhjMCwgMHg3NSwgMHgxNCwgMHg3YiwgMHg3NSwgMHgxNSwgMHhjMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyZSwgMHhmMCwKKyAgMHg3NSwgMHgxNiwgMHgwMSwgMHgxMiwgMHgwZiwgMHgyOCwgMHg3ZSwgMHg3YiwgMHg3ZiwgMHhjMCwgMHg3NSwgMHgxNCwgMHg3YiwgMHg3NSwgMHgxNSwgMHhjMCwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyZSwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwMSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNiwgMHhmNSwgMHg4Mn19LAorIHsweDBiNDYsIDY0LCB7IDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4N2UsIDB4N2UsIDB4N2YsIDB4NDAsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsIDB4MTQsIDB4ODMsCisgIDB4NzQsIDB4N2UsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4NDAsIDB4ZjAsIDB4N2UsIDB4N2UsIDB4N2YsIDB4ODAsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsIDB4MTQsCisgIDB4ODMsIDB4YTMsIDB4YTMsIDB4NzQsIDB4N2UsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4N2UsIDB4N2MsIDB4N2YsIDB4MDAsIDB4NzUsIDB4MTQsCisgIDB4N2MsIDB4NzUsIDB4MTUsIDB4MDAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MmQsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDIsIDB4MTIsIDB4MGZ9fSwKKyB7MHgwYjg2LCA2NCwgeyAweDI4LCAweDdlLCAweDdjLCAweDdmLCAweDAwLCAweDc1LCAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDAwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDJkLCAweGYwLAorICAweDc1LCAweDE2LCAweDAyLCAweGU1LCAweDE1LCAweDI0LCAweDI2LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LCAweDAxLAorICAweGYwLCAweDdlLCAweDdkLCAweDdmLCAweGMwLCAweDg1LCAweDE1LCAweDgyLCAweDg1LCAweDE0LCAweDgzLCAweDc0LCAweDdkLCAweGYwLCAweGEzLCAweDc0LAorICAweGMwLCAweGYwLCAweDdlLCAweDdlLCAweDdmLCAweDAwLCAweDg1LCAweDE1LCAweDgyLCAweDg1LCAweDE0LCAweDgzLCAweGEzLCAweGEzLCAweDc0fX0sCisgezB4MGJjNiwgNjQsIHsgMHg3ZSwgMHhmMCwgMHhhMywgMHg3NCwgMHgwMCwgMHhmMCwgMHg3ZSwgMHg3YywgMHg3ZiwgMHg0MCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNSwgMHg0MCwgMHg5MCwKKyAgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyYiwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwNCwgMHgxMiwgMHgwZiwgMHgyOCwgMHg3ZSwgMHg3YywgMHg3ZiwgMHg0MCwgMHg3NSwKKyAgMHgxNCwgMHg3YywgMHg3NSwgMHgxNSwgMHg0MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyYiwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwNCwgMHhlNSwgMHgxNSwKKyAgMHgyNCwgMHgyNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHg3NCwgMHgwMiwgMHhmMCwgMHg3ZSwgMHg3ZCwgMHg3Zn19LAorIHsweDBjMDYsIDY0LCB7IDB4NDAsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsIDB4MTQsIDB4ODMsIDB4NzQsIDB4N2QsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4NDAsIDB4ZjAsIDB4N2UsIDB4N2QsIDB4N2YsCisgIDB4ODAsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsIDB4MTQsIDB4ODMsIDB4YTMsIDB4YTMsIDB4NzQsIDB4N2QsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4ODAsIDB4ZjAsCisgIDB4N2UsIDB4N2MsIDB4N2YsIDB4ODAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4ODAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MjcsIDB4ZjAsCisgIDB4NzUsIDB4MTYsIDB4MDgsIDB4MTIsIDB4MGYsIDB4MjgsIDB4N2UsIDB4N2MsIDB4N2YsIDB4ODAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTV9fSwKKyB7MHgwYzQ2LCA2NCwgeyAweDgwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDI3LCAweGYwLCAweDc1LCAweDE2LCAweDA4LCAweGU1LCAweDE1LCAweDI0LCAweDI2LCAweGY1LCAweDgyLCAweGU0LAorICAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LCAweDAzLCAweGYwLCAweDdlLCAweDdjLCAweDdmLCAweGMwLCAweDg1LCAweDE1LCAweDgyLCAweDg1LCAweDE0LAorICAweDgzLCAweDc0LCAweDdjLCAweGYwLCAweGEzLCAweDc0LCAweGMwLCAweGYwLCAweDdlLCAweDdkLCAweDdmLCAweDAwLCAweDg1LCAweDE1LCAweDgyLCAweDg1LAorICAweDE0LCAweDgzLCAweGEzLCAweGEzLCAweDc0LCAweDdkLCAweGYwLCAweGEzLCAweDc0LCAweDAwLCAweGYwLCAweGMyLCAweDBhLCAweGMyLCAweDA5fX0sCisgezB4MGM4NiwgNjQsIHsgMHhlNCwgMHhmNSwgMHgxMSwgMHhkMiwgMHgwMiwgMHgyMiwgMHhlNSwgMHgxMCwgMHgwNCwgMHg1NCwgMHgwMywgMHhmNSwgMHgxMCwgMHgxNCwgMHg2MCwgMHgxZiwgMHgxNCwKKyAgMHg2MCwgMHgzMSwgMHgxNCwgMHg2MCwgMHg0MywgMHgyNCwgMHgwMywgMHg3MCwgMHg1MiwgMHg3ZSwgMHg3YiwgMHg3ZiwgMHhjMCwgMHg3NSwgMHgxNCwgMHg3YiwKKyAgMHg3NSwgMHgxNSwgMHhjMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyZSwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwMSwgMHg4MCwgMHgzZCwgMHg3ZSwgMHg3YywKKyAgMHg3ZiwgMHgwMCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNSwgMHgwMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyZCwgMHhmMCwgMHg3NX19LAorIHsweDBjYzYsIDY0LCB7IDB4MTYsIDB4MDIsIDB4ODAsIDB4MjgsIDB4N2UsIDB4N2MsIDB4N2YsIDB4NDAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4NDAsIDB4OTAsIDB4N2YsIDB4OTgsCisgIDB4NzQsIDB4MmIsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDQsIDB4ODAsIDB4MTMsIDB4N2UsIDB4N2MsIDB4N2YsIDB4ODAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsCisgIDB4MTUsIDB4ODAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MjcsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDgsIDB4ZTUsIDB4MzIsIDB4NTUsIDB4MTYsIDB4NzAsCisgIDB4MDMsIDB4MDIsIDB4MGUsIDB4MjcsIDB4ZTUsIDB4MTYsIDB4ZjQsIDB4NTIsIDB4MzIsIDB4ZTUsIDB4MjYsIDB4NTQsIDB4N2YsIDB4ZmYsIDB4NzB9fSwKKyB7MHgwZDA2LCA2NCwgeyAweDE3LCAweGU1LCAweDJhLCAweDU1LCAweDE2LCAweDYwLCAweDM0LCAweDkwLCAweDdmLCAweDk2LCAweGUwLCAweGZlLCAweGU1LCAweDE2LCAweGM0LCAweDU0LCAweGYwLAorICAweGY0LCAweGZkLCAweGVlLCAweDVkLCAweGYwLCAweDgwLCAweDIzLCAweGJmLCAweDIwLCAweDIwLCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDMwLCAweGUzLCAweDExLCAweGU0LCAweGY1LCAweDJhLCAweDkwLCAweDdmLCAweDk2LCAweGUwLAorICAweGZmLCAweGU1LCAweDE2LCAweGM0LCAweDU0LCAweGYwLCAweGZlLCAweGVmLCAweDRlLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDNhLCAweGY1fX0sCisgezB4MGQ0NiwgNjQsIHsgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgwMywgMHhlMCwgMHgxNCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNCwgMHhmNSwKKyAgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgwMywgMHhlMCwgMHgxNCwgMHhmMCwgMHhlMCwgMHg2MCwgMHgwMywgMHgwMiwKKyAgMHgwZSwgMHgyNywgMHg3NCwgMHgwYSwgMHhmMCwgMHgxMiwgMHgwMCwgMHgzNiwgMHhlZiwgMHg1NCwgMHgwMSwgMHhmZiwgMHhmNSwgMHgxOCwgMHhlNSwgMHgxNSwKKyAgMHgyNCwgMHgyYywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2ZiwgMHg2MCwgMHgwNywgMHhlNSwgMHgxOH19LAorIHsweDBkODYsIDY0LCB7IDB4ZjAsIDB4ZTUsIDB4MTYsIDB4NDIsIDB4MTMsIDB4MTIsIDB4MTgsIDB4ZTEsIDB4OGYsIDB4MTgsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjcsIDB4ZjUsIDB4ODIsIDB4ZTQsCisgIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTgsIDB4NTQsIDB4MTAsIDB4ZmUsIDB4NmYsIDB4NjAsIDB4MDYsIDB4ZWUsIDB4ZjAsCisgIDB4ZTUsIDB4MTYsIDB4NDIsIDB4MTMsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsCisgIDB4ZmYsIDB4ZTUsIDB4MTgsIDB4NTQsIDB4ODAsIDB4ZmUsIDB4NmYsIDB4NjAsIDB4MDYsIDB4ZWUsIDB4ZjAsIDB4ZTUsIDB4MTYsIDB4NDIsIDB4MTN9fSwKKyB7MHgwZGM2LCA2NCwgeyAweGU1LCAweDE1LCAweDI0LCAweDI5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDE4LCAweDU0LCAweDIwLAorICAweGZlLCAweDZmLCAweDYwLCAweDE1LCAweGVlLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LAorICAweDgzLCAweGUwLCAweDMwLCAweGU0LCAweDA0LCAweGU1LCAweDE2LCAweDQyLCAweDEzLCAweGU1LCAweDE1LCAweDI0LCAweDJhLCAweGY1LCAweDgyLCAweGU0LAorICAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDE4LCAweDU0LCAweDQwLCAweGZlLCAweDZmLCAweDYwLCAweDE1LCAweGVlfX0sCisgezB4MGUwNiwgNjQsIHsgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHgzMCwgMHhlNSwgMHgwNCwgMHhlNSwKKyAgMHgxNiwgMHg0MiwgMHgxMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwKKyAgMHgyMiwgMHgzMCwgMHgwOSwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNywgMHhlNSwgMHgyNCwgMHgxNCwgMHg2MCwgMHgyYSwgMHgxNCwgMHg2MCwgMHg0MSwgMHgxNCwKKyAgMHg2MCwgMHg1OCwgMHgxNCwgMHg2MCwgMHg2ZiwgMHgyNCwgMHgwNCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZSwgMHhlNSwgMHg3ZSwgMHg3YiwgMHg3Zn19LAorIHsweDBlNDYsIDY0LCB7IDB4YzAsIDB4NzUsIDB4MTQsIDB4N2IsIDB4NzUsIDB4MTUsIDB4YzAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MmUsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDEsIDB4MTIsCisgIDB4MTIsIDB4OWMsIDB4NzUsIDB4MjQsIDB4MDEsIDB4MjIsIDB4N2UsIDB4N2MsIDB4N2YsIDB4MDAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4MDAsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MmQsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDIsIDB4MTIsIDB4MTIsIDB4OWMsIDB4NzUsIDB4MjQsIDB4MDIsIDB4MjIsCisgIDB4N2UsIDB4N2MsIDB4N2YsIDB4NDAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4NDAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MmJ9fSwKKyB7MHgwZTg2LCA2NCwgeyAweGYwLCAweDc1LCAweDE2LCAweDA0LCAweDEyLCAweDEyLCAweDljLCAweDc1LCAweDI0LCAweDAzLCAweDIyLCAweDdlLCAweDdjLCAweDdmLCAweDgwLCAweDc1LCAweDE0LAorICAweDdjLCAweDc1LCAweDE1LCAweDgwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDI3LCAweGYwLCAweDc1LCAweDE2LCAweDA4LCAweDEyLCAweDEyLCAweDljLAorICAweDc1LCAweDI0LCAweDA0LCAweDIyLCAweDMwLCAweDA0LCAweDMzLCAweGMyLCAweDA0LCAweDUzLCAweDEzLCAweGRmLCAweGU0LCAweGY1LCAweDE4LCAweDdlLAorICAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDJlLCAweDI1LCAweDE4LCAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhLCAweDEyLCAweDExLCAweGE2fX0sCisgezB4MGVjNiwgNjQsIHsgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNSwgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgxOCwgMHhlNSwKKyAgMHgxOCwgMHhiNCwgMHgwMywgMHhkYiwgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwMywgMHhmMCwgMHg3NSwgMHgyNCwgMHgwNSwgMHgyMiwgMHhlNSwgMHgzNiwKKyAgMHg2MCwgMHgzYiwgMHhkNSwgMHgzNiwgMHgwYSwgMHg1MywgMHgxMywgMHhlZiwgMHgzMCwgMHgwYSwgMHgwNCwgMHhkMiwgMHgwOSwgMHhjMiwgMHgwYSwgMHhlNCwKKyAgMHhmNSwgMHgxOCwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwgMHgzNSwgMHgyNSwgMHgxOCwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYX19LAorIHsweDBmMDYsIDY0LCB7IDB4MTIsIDB4MTEsIDB4YTYsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjUsIDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsCisgIDB4MDUsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MDMsIDB4ZGIsIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MjQsCisgIDB4MjIsIDB4ZTQsIDB4ZjUsIDB4MTksIDB4N2UsIDB4MDAsIDB4N2IsIDB4MDEsIDB4ZTUsIDB4MTUsIDB4MjUsIDB4MTksIDB4ZjksIDB4ZWUsIDB4MzUsIDB4MTQsCisgIDB4ZmEsIDB4ZTQsIDB4MTIsIDB4MTEsIDB4ZWMsIDB4MDUsIDB4MTksIDB4ZTUsIDB4MTksIDB4YjQsIDB4M2MsIDB4ZTgsIDB4ZTUsIDB4MTUsIDB4MjR9fSwKKyB7MHgwZjQ2LCA2NCwgeyAweDM1LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGYzLCAweGYwLAorICAweGU1LCAweDE1LCAweDI0LCAweDM3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LCAweDAzLCAweGYwLCAweDkwLCAweGMwLAorICAweDAwLCAweGYwLCAweDdmLCAweDBjLCAweGU0LCAweGZkLCAweDEyLCAweDE2LCAweDZiLCAweDdmLCAweDEwLCAweGU1LCAweDE1LCAweDI0LCAweDMzLCAweGY1LAorICAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDEyLCAweDE1LCAweGRiLCAweDkwLCAweDc4LCAweDQxLCAweDc0fX0sCisgezB4MGY4NiwgNjQsIHsgMHhmMiwgMHhmMCwgMHg3ZiwgMHgwMSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwKKyAgMHg0NCwgMHgwNiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmNCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOSwKKyAgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHg3NCwgMHg4MCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgwZiwgMHhlNCwKKyAgMHhmZCwgMHgxMiwgMHgxNiwgMHg2YiwgMHhlNCwgMHhmZiwgMHg3ZSwgMHhhMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMiwgMHhmNSwgMHg4MiwgMHhlNH19LAorIHsweDBmYzYsIDY0LCB7IDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZWUsIDB4ZjAsIDB4ZmQsIDB4MTIsIDB4MTYsIDB4NmIsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjEsIDB4ZjAsIDB4OTAsCisgIDB4YzAsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4N2YsIDB4MDUsIDB4N2QsIDB4N2YsIDB4MTIsIDB4MTYsIDB4NmIsIDB4N2YsIDB4MDEsIDB4MTIsIDB4MTUsIDB4NDMsCisgIDB4N2YsIDB4MDMsIDB4N2QsIDB4MDcsIDB4MTIsIDB4MTYsIDB4NmIsIDB4MjIsIDB4NTMsIDB4MTMsIDB4M2YsIDB4OTAsIDB4N2IsIDB4ZjEsIDB4ZTAsIDB4MzAsCisgIDB4ZTMsIDB4MTYsIDB4N2UsIDB4N2IsIDB4N2YsIDB4YzAsIDB4NzUsIDB4MTQsIDB4N2IsIDB4NzUsIDB4MTUsIDB4YzAsIDB4OTAsIDB4N2YsIDB4OTh9fSwKKyB7MHgxMDA2LCA2NCwgeyAweDc0LCAweDJlLCAweGYwLCAweDc1LCAweDE2LCAweDAxLCAweDEyLCAweDA4LCAweGQ3LCAweDkwLCAweDdjLCAweDMxLCAweGUwLCAweDMwLCAweGUzLCAweDE2LCAweDdlLAorICAweDdjLCAweDdmLCAweDAwLCAweDc1LCAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDAwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDJkLCAweGYwLCAweDc1LAorICAweDE2LCAweDAyLCAweDEyLCAweDA4LCAweGQ3LCAweDkwLCAweDdjLCAweDcxLCAweGUwLCAweDMwLCAweGUzLCAweDE2LCAweDdlLCAweDdjLCAweDdmLCAweDQwLAorICAweDc1LCAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDQwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDJiLCAweGYwLCAweDc1LCAweDE2LCAweDA0fX0sCisgezB4MTA0NiwgNjQsIHsgMHgxMiwgMHgwOCwgMHhkNywgMHg5MCwgMHg3YywgMHhiMSwgMHhlMCwgMHgzMCwgMHhlMywgMHgxNiwgMHg3ZSwgMHg3YywgMHg3ZiwgMHg4MCwgMHg3NSwgMHgxNCwgMHg3YywKKyAgMHg3NSwgMHgxNSwgMHg4MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyNywgMHhmMCwgMHg3NSwgMHgxNiwgMHgwOCwgMHgxMiwgMHgwOCwgMHhkNywgMHgwNSwKKyAgMHgxMiwgMHhlNSwgMHgxMiwgMHg1NCwgMHgwZiwgMHhmNSwgMHgxNywgMHg3MCwgMHgwNCwgMHgxMiwgMHgxMSwgMHgxYywgMHgyMiwgMHhlNSwgMHgxNywgMHhiNCwKKyAgMHgwMSwgMHgwNCwgMHgxMiwgMHgwYywgMHg4YywgMHgyMiwgMHg5MCwgMHg3ZiwgMHhjMiwgMHhlMCwgMHgyMCwgMHhlMSwgMHgwOCwgMHhlNSwgMHgxM319LAorIHsweDEwODYsIDY0LCB7IDB4NjAsIDB4MDQsIDB4MTIsIDB4MGUsIDB4MjgsIDB4MjIsIDB4MTIsIDB4MGMsIDB4OGMsIDB4MjIsIDB4NzgsIDB4N2YsIDB4ZTQsIDB4ZjYsIDB4ZDgsIDB4ZmQsIDB4NzUsCisgIDB4ODEsIDB4MzcsIDB4MDIsIDB4MTAsIDB4ZDcsIDB4MDIsIDB4MTIsIDB4MjQsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NDAsCisgIDB4MDMsIDB4ZjYsIDB4ODAsIDB4MDEsIDB4ZjIsIDB4MDgsIDB4ZGYsIDB4ZjQsIDB4ODAsIDB4MjksIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4NTQsIDB4MDcsCisgIDB4MjQsIDB4MGMsIDB4YzgsIDB4YzMsIDB4MzMsIDB4YzQsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MjAsIDB4YzgsIDB4ODMsIDB4NDAsIDB4MDQsIDB4ZjR9fSwKKyB7MHgxMGM2LCA2NCwgeyAweDU2LCAweDgwLCAweDAxLCAweDQ2LCAweGY2LCAweGRmLCAweGU0LCAweDgwLCAweDBiLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLAorICAweDkwLCAweDE4LCAweDQ1LCAweGU0LCAweDdlLCAweDAxLCAweDkzLCAweDYwLCAweGJjLCAweGEzLCAweGZmLCAweDU0LCAweDNmLCAweDMwLCAweGU1LCAweDA5LAorICAweDU0LCAweDFmLCAweGZlLCAweGU0LCAweDkzLCAweGEzLCAweDYwLCAweDAxLCAweDBlLCAweGNmLCAweDU0LCAweGMwLCAweDI1LCAweGUwLCAweDYwLCAweGE4LAorICAweDQwLCAweGI4LCAweGU0LCAweDkzLCAweGEzLCAweGZhLCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweGU0LCAweDkzLCAweGEzLCAweGM4LCAweGM1fX0sCisgezB4MTEwNiwgNjQsIHsgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhmMCwgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhkZiwKKyAgMHhlOSwgMHhkZSwgMHhlNywgMHg4MCwgMHhiZSwgMHg5MCwgMHg3ZiwgMHhkMiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgxMSwgMHhhNSwgMHhjMiwKKyAgMHgwOSwgMHg5MCwgMHg3YiwgMHg0MCwgMHhlMCwgMHgxNCwgMHg2MCwgMHgyNiwgMHgxNCwgMHg2MCwgMHgzYiwgMHgxNCwgMHg2MCwgMHg1MCwgMHgyNCwgMHg4MywKKyAgMHg2MCwgMHg2NCwgMHgyNCwgMHg4MCwgMHg3MCwgMHg2MywgMHg3ZSwgMHg3YiwgMHg3ZiwgMHhjMCwgMHg3NSwgMHgxNCwgMHg3YiwgMHg3NSwgMHgxNX19LAorIHsweDExNDYsIDY0LCB7IDB4YzAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MmUsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDEsIDB4MTIsIDB4MDAsIDB4NDYsIDB4ODAsIDB4NGIsIDB4N2UsIDB4N2MsCisgIDB4N2YsIDB4MDAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4MDAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MmQsIDB4ZjAsIDB4NzUsIDB4MTYsCisgIDB4MDIsIDB4MTIsIDB4MDAsIDB4NDYsIDB4ODAsIDB4MzMsIDB4N2UsIDB4N2MsIDB4N2YsIDB4NDAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4NDAsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MmIsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDQsIDB4MTIsIDB4MDAsIDB4NDYsIDB4ODAsIDB4MWIsIDB4N2V9fSwKKyB7MHgxMTg2LCA2NCwgeyAweDdjLCAweDdmLCAweDgwLCAweDc1LCAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDgwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDI3LCAweGYwLCAweDc1LCAweDE2LAorICAweDA4LCAweDEyLCAweDAwLCAweDQ2LCAweDgwLCAweDAzLCAweDEyLCAweDE3LCAweDUxLCAweGU0LCAweDkwLCAweDdmLCAweGQzLCAweGYwLCAweDIyLCAweGJiLAorICAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGUwLCAweDIyLCAweDUwLCAweDAyLCAweGU3LCAweDIyLCAweGJiLCAweGZlLCAweDAyLCAweGUzLAorICAweDIyLCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGU0LCAweDkzLCAweDIyLCAweGJiLCAweDAxLCAweDBjLCAweGU1LCAweDgyLCAweDI5LCAweGY1fX0sCisgezB4MTFjNiwgNjQsIHsgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwNiwgMHhlOSwgMHgyNSwgMHg4MiwgMHhmOCwgMHhlNiwgMHgyMiwgMHhiYiwKKyAgMHhmZSwgMHgwNiwgMHhlOSwgMHgyNSwgMHg4MiwgMHhmOCwgMHhlMiwgMHgyMiwgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwKKyAgMHhmNSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMiwgMHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhmMCwgMHgyMiwgMHg1MCwgMHgwMiwKKyAgMHhmNywgMHgyMiwgMHhiYiwgMHhmZSwgMHgwMSwgMHhmMywgMHgyMiwgMHhkMCwgMHg4MywgMHhkMCwgMHg4MiwgMHhmOCwgMHhlNCwgMHg5MywgMHg3MH19LAorIHsweDEyMDYsIDY0LCB7IDB4MTIsIDB4NzQsIDB4MDEsIDB4OTMsIDB4NzAsIDB4MGQsIDB4YTMsIDB4YTMsIDB4OTMsIDB4ZjgsIDB4NzQsIDB4MDEsIDB4OTMsIDB4ZjUsIDB4ODIsIDB4ODgsIDB4ODMsCisgIDB4ZTQsIDB4NzMsIDB4NzQsIDB4MDIsIDB4OTMsIDB4NjgsIDB4NjAsIDB4ZWYsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ODAsIDB4ZGYsIDB4OTAsIDB4N2YsIDB4YWUsCisgIDB4ZTAsIDB4ZmYsIDB4ZDMsIDB4OTIsIDB4MDAsIDB4ZTQsIDB4MzMsIDB4ZmUsIDB4ZWYsIDB4NGUsIDB4ZjAsIDB4ZDIsIDB4ZTgsIDB4NDMsIDB4ZDgsIDB4MjAsCisgIDB4OTAsIDB4N2YsIDB4ZGUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4ZmZ9fSwKKyB7MHgxMjQ2LCA2NCwgeyAweGYwLCAweDkwLCAweDdmLCAweGE5LCAweGYwLCAweDkwLCAweDdmLCAweGFhLCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFmLCAweDc0LCAweDAxLAorICAweGYwLCAweDkwLCAweDdmLCAweGFlLCAweDc0LCAweDBkLCAweGYwLCAweGQyLCAweGFmLCAweGQyLCAweDBiLCAweDEyLCAweDE4LCAweDA5LCAweGMyLCAweDAxLAorICAweGU0LCAweGY1LCAweDJiLCAweGY1LCAweDMxLCAweGMyLCAweDA3LCAweGMyLCAweDAyLCAweDc1LCAweDI5LCAweDBmLCAweDkwLCAweDdmLCAweGQ4LCAweGUwLAorICAweDY1LCAweDI2LCAweDYwLCAweDA2LCAweDc1LCAweDMyLCAweDBmLCAweGUwLCAweGY1LCAweDI2LCAweDMwLCAweDAyLCAweDAzLCAweDEyLCAweDBmfX0sCisgezB4MTI4NiwgNjQsIHsgMHhlZiwgMHgzMCwgMHgwMSwgMHgwNywgMHhjMiwgMHgwMSwgMHgxMiwgMHgwNiwgMHgzZiwgMHg4MCwgMHhlMiwgMHgzMCwgMHgwOCwgMHhkZiwgMHhjMiwgMHgwOCwgMHgxMiwKKyAgMHgxOCwgMHgyYSwgMHg4MCwgMHhkOCwgMHgyMiwgMHhlNSwgMHgxMywgMHg1NSwgMHgxNiwgMHg2MCwgMHg2YSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzYSwgMHhmNSwKKyAgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg3MCwgMHg1YywgMHhlNSwgMHgxNiwgMHhmNCwgMHg1MiwgMHgxMywgMHhlNSwgMHgxNSwKKyAgMHgyNCwgMHgyNiwgMHhmZiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmZSwgMHhlNCwgMHhmZCwgMHgwZiwgMHhlZiwgMHhhYSwgMHgwNiwgMHg3MCwgMHgwMX19LAorIHsweDEyYzYsIDY0LCB7IDB4MGUsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTAsIDB4ZmMsIDB4NzQsIDB4ODAsIDB4MmQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsCisgIDB4ODMsIDB4ZWMsIDB4ZjAsIDB4MGQsIDB4YmQsIDB4MGIsIDB4ZTIsIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsCisgIDB4M2EsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MmUsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTR9fSwKKyB7MHgxMzA2LCA2NCwgeyAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweDIyLCAweGU1LCAweDI4LCAweDQ1LCAweDI3LCAweDYwLCAweDU3LCAweGFlLCAweDI3LCAweGFmLCAweDI4LAorICAweGQzLCAweGVmLCAweDk0LCAweDQwLCAweGVlLCAweDk0LCAweDAwLCAweDQwLCAweDA0LCAweDdlLCAweDAwLCAweDdmLCAweDQwLCAweGMzLCAweGU1LCAweDI4LAorICAweDlmLCAweGY1LCAweDI4LCAweGU1LCAweDI3LCAweDllLCAweGY1LCAweDI3LCAweGU0LCAweGZkLCAweGVkLCAweGMzLCAweDlmLCAweGU0LCAweDllLCAweDUwLAorICAweDFmLCAweDg1LCAweDM0LCAweDgyLCAweDg1LCAweDMzLCAweDgzLCAweGUwLCAweGZjLCAweDc0LCAweDAwLCAweDJkLCAweGY1LCAweDgyLCAweGU0fX0sCisgezB4MTM0NiwgNjQsIHsgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlYywgMHhmMCwgMHgwZCwgMHgwNSwgMHgzNCwgMHhlNSwgMHgzNCwgMHg3MCwgMHgwMiwgMHgwNSwgMHgzMywgMHg4MCwgMHhkYSwKKyAgMHg5MCwgMHg3ZiwgMHhhOSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYywgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwKKyAgMHhlZiwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhhYywgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHhmMCwgMHgyMiwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwZiwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3OCwgMHg0YSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NCwgMHhmMH19LAorIHsweDEzODYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4OWQsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTcsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4MzAsIDB4MDAsIDB4MDcsIDB4ZTUsIDB4MjksIDB4NTQsIDB4MGYsIDB4ZmYsCisgIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MWYsIDB4ZjAsIDB4ZTQsCisgIDB4OTAsIDB4N2YsIDB4OTUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4M2YsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4ZGZ9fSwKKyB7MHgxM2M2LCA2NCwgeyAweGYwLCAweDkwLCAweDdmLCAweDkyLCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweDIyLCAweDhmLCAweDE5LCAweDA1LCAweDJkLCAweGU1LCAweDJkLCAweGFlLCAweDJjLAorICAweDcwLCAweDAyLCAweDA1LCAweDJjLCAweDE0LCAweGY1LCAweDgyLCAweDhlLCAweDgzLCAweGU1LCAweDE5LCAweGYwLCAweDEyLCAweDE4LCAweGVmLCAweDA1LAorICAweDJkLCAweGU1LCAweDJkLCAweGFjLCAweDJjLCAweDcwLCAweDAyLCAweDA1LCAweDJjLCAweDE0LCAweGY1LCAweDgyLCAweDhjLCAweDgzLCAweGVmLCAweGYwLAorICAweDE1LCAweDIzLCAweGU1LCAweDIzLCAweDYwLCAweDFmLCAweGU1LCAweDE1LCAweDI0LCAweDM4LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0fX0sCisgezB4MTQwNiwgNjQsIHsgMHhmNSwgMHg4MywgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhlMCwgMHhmZSwgMHgxMiwgMHgxOCwgMHhkMywgMHg4ZiwgMHgxOSwgMHhlZSwgMHg0ZiwgMHhkMCwgMHg4MiwKKyAgMHhkMCwgMHg4MywgMHhmMCwgMHg4MCwgMHhiNSwgMHgyMiwgMHg5MCwgMHg3OCwgMHg0MSwgMHhlNSwgMHgxMSwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0ZiwgMHg3NCwKKyAgMHhjMCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3OCwgMHg1MCwgMHhmMCwgMHhlNSwgMHgyYywgMHg5MCwgMHg3OCwgMHg1MSwgMHhmMCwgMHhhZSwgMHgyYywgMHhlNSwKKyAgMHgyZCwgMHg5MCwgMHg3OCwgMHg1MiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg1NCwgMHhlNSwgMHgyMywgMHhmMCwgMHg5MCwgMHg3OCwgMHg1NywgMHg3NH19LAorIHsweDE0NDYsIDY0LCB7IDB4MDQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZTIsIDB4ZTAsIDB4NDQsIDB4MTAsIDB4ZjAsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzgsIDB4NTUsCisgIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NTUsIDB4ZTAsIDB4NjAsIDB4ZmEsIDB4MjIsIDB4OGYsIDB4MTksIDB4ZTQsIDB4ZjUsIDB4MWEsIDB4NzUsIDB4MWIsIDB4ZmYsCisgIDB4NzUsIDB4MWMsIDB4MTksIDB4NzUsIDB4MWQsIDB4ODYsIDB4YWIsIDB4MWIsIDB4YWEsIDB4MWMsIDB4YTksIDB4MWQsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsCisgIDB4MTEsIDB4YmYsIDB4YjQsIDB4MDMsIDB4MWQsIDB4YWYsIDB4MWEsIDB4MDUsIDB4MWEsIDB4ZWYsIDB4YjUsIDB4MTksIDB4MDEsIDB4MjIsIDB4MTJ9fSwKKyB7MHgxNDg2LCA2NCwgeyAweDExLCAweGE2LCAweDdlLCAweDAwLCAweDI5LCAweGZmLCAweGVlLCAweDNhLCAweGE5LCAweDA3LCAweDc1LCAweDFiLCAweGZmLCAweGY1LCAweDFjLCAweDg5LCAweDFkLAorICAweDgwLCAweGQ0LCAweDdiLCAweDAwLCAweDdhLCAweDAwLCAweDc5LCAweDAwLCAweDIyLCAweDkwLCAweDc4LCAweDQxLCAweGU1LCAweDExLCAweGYwLCAweGU1LAorICAweDJjLCAweDkwLCAweDc4LCAweDRmLCAweGYwLCAweGFlLCAweDJjLCAweGU1LCAweDJkLCAweDkwLCAweDc4LCAweDUwLCAweGYwLCAweDkwLCAweDc4LCAweDUxLAorICAweDc0LCAweGMwLCAweGYwLCAweGU0LCAweDkwLCAweDc4LCAweDUyLCAweGYwLCAweDkwLCAweDc4LCAweDU0LCAweGU1LCAweDIzLCAweGYwLCAweDkwfX0sCisgezB4MTRjNiwgNjQsIHsgMHg3OCwgMHg1NywgMHg3NCwgMHgwNCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3OCwgMHg1NSwgMHhmMCwgMHg5MCwgMHg3OCwgMHg1NSwgMHhlMCwgMHg2MCwgMHhmYSwgMHgyMiwKKyAgMHhlNSwgMHgxNSwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxNCwgMHg2MCwgMHgwZiwgMHgxNCwKKyAgMHg2MCwgMHgxMywgMHgxNCwgMHg2MCwgMHgxNywgMHg4MCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhlZiwgMHhmMCwgMHg4MCwgMHgxMywgMHg5MCwgMHg3ZiwKKyAgMHhjOSwgMHhlZiwgMHhmMCwgMHg4MCwgMHgwYywgMHg5MCwgMHg3ZiwgMHhjYiwgMHhlZiwgMHhmMCwgMHg4MCwgMHgwNSwgMHg5MCwgMHg3ZiwgMHhjZH19LAorIHsweDE1MDYsIDY0LCB7IDB4ZWYsIDB4ZjAsIDB4ZTUsIDB4MTYsIDB4NDIsIDB4MmEsIDB4MjIsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsCisgIDB4ODMsIDB4ZTAsIDB4MTQsIDB4NjAsIDB4MGYsIDB4MTQsIDB4NjAsIDB4MTMsIDB4MTQsIDB4NjAsIDB4MTcsIDB4ODAsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YjcsCisgIDB4ZWYsIDB4ZjAsIDB4ODAsIDB4MTMsIDB4OTAsIDB4N2YsIDB4YjksIDB4ZWYsIDB4ZjAsIDB4ODAsIDB4MGMsIDB4OTAsIDB4N2YsIDB4YmIsIDB4ZWYsIDB4ZjAsCisgIDB4ODAsIDB4MDUsIDB4OTAsIDB4N2YsIDB4YmQsIDB4ZWYsIDB4ZjAsIDB4ZTUsIDB4MTYsIDB4NDIsIDB4MmEsIDB4MjIsIDB4YWUsIDB4MDcsIDB4ZTR9fSwKKyB7MHgxNTQ2LCA2NCwgeyAweGZmLCAweGU1LCAweDE1LCAweDI0LCAweDMyLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweGZkLCAweDEyLAorICAweDE2LCAweDZiLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGYxLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVlLCAweGYwLCAweGU0LCAweGU1LCAweDE1LAorICAweDI0LCAweDMyLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDgwLCAweGZkLCAweDEyLCAweDE2LCAweDZiLAorICAweDIyLCAweGMwLCAweGUwLCAweGMwLCAweGYwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2fX0sCisgezB4MTU4NiwgNjQsIHsgMHg3NSwgMHg4NiwgMHgwMCwgMHhjMCwgMHhkMCwgMHg3NSwgMHhkMCwgMHgwOCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhOSwgMHg3NCwgMHgwMSwgMHhmMCwKKyAgMHgxMiwgMHgxMywgMHgwZCwgMHhkMCwgMHhkMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwKKyAgMHhmMCwgMHhkMCwgMHhlMCwgMHgzMiwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwKKyAgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmMSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NH19LAorIHsweDE1YzYsIDY0LCB7IDB4ZjMsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4OTAsCisgIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsCisgIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjMsCisgIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4N2Z9fSwKKyB7MHgxNjA2LCA2NCwgeyAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGYzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLAorICAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGY0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGYzLAorICAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweDkwLAorICAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGYzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmfX0sCisgezB4MTY0NiwgNjQsIHsgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmNiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmMywKKyAgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHg3ZiwgMHg5MCwKKyAgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmMywgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNywgMHhmNSwgMHg4MiwKKyAgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MX19LAorIHsweDE2ODYsIDY0LCB7IDB4NzQsIDB4ZjcsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjUsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTQsCisgIDB4NjAsIDB4MGUsIDB4MTQsIDB4NjAsIDB4MTEsIDB4MTQsIDB4NjAsIDB4MTQsIDB4ODAsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YzYsIDB4ZTAsIDB4ZmYsIDB4MjIsCisgIDB4OTAsIDB4N2YsIDB4YzgsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4Y2EsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4Y2N9fSwKKyB7MHgxNmM2LCA2NCwgeyAweGUwLCAweGZmLCAweDIyLCAweGU1LCAweDE1LCAweDI0LCAweDA0LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDE0LCAweDYwLAorICAweDBlLCAweDE0LCAweDYwLCAweDExLCAweDE0LCAweDYwLCAweDE0LCAweDgwLCAweDAwLCAweDkwLCAweDdmLCAweGI2LCAweGUwLCAweGZmLCAweDIyLCAweDkwLAorICAweDdmLCAweGI4LCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweGJhLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweGJjLCAweGUwLCAweGZmLAorICAweDIyLCAweGU1LCAweDE1LCAweDI0LCAweDA0LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDE0LCAweDYwfX0sCisgezB4MTcwNiwgNjQsIHsgMHgwZSwgMHgxNCwgMHg2MCwgMHgxMSwgMHgxNCwgMHg2MCwgMHgxNCwgMHg4MCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwKKyAgMHhjOSwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhjYiwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhjZCwgMHhlMCwgMHhmZiwgMHgyMiwKKyAgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHg5MCwKKyAgMHg3ZiwgMHhjNCwgMHhlNCwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwNCwgMHhmMCwgMHhkMCwgMHg4Nn19LAorIHsweDE3NDYsIDY0LCB7IDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4OTAsIDB4N2IsIDB4NDEsIDB4ZTAsIDB4ZjUsIDB4MzYsCisgIDB4NDMsIDB4MTMsIDB4MTAsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTcsIDB4ZjAsIDB4NzQsIDB4MzcsIDB4ZjAsCisgIDB4OTAsIDB4N2IsIDB4NDMsIDB4ZTAsIDB4ZjUsIDB4MzcsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4ZjAsIDB4ZjUsIDB4MjksIDB4ZTAsIDB4NjAsIDB4MDIsIDB4ZDIsCisgIDB4MGEsIDB4MjIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzV9fSwKKyB7MHgxNzg2LCA2NCwgeyAweDg2LCAweDAwLCAweGQyLCAweDAxLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDAxLCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LAorICAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLAorICAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweGQyLCAweDA4LCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLAorICAweDc0LCAweDA4LCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwfX0sCisgezB4MTdjNiwgNjQsIHsgMHgzMiwgMHgxMiwgMHgxOCwgMHhiNywgMHhhZSwgMHgwNywgMHgxMiwgMHgxOCwgMHhiNywgMHhhZCwgMHgwNywgMHhlZSwgMHg2ZCwgMHg2MCwgMHgxMCwgMHgxMiwgMHgxOCwKKyAgMHhiNywgMHhhZSwgMHgwNywgMHhlZSwgMHg2ZCwgMHg2MCwgMHgwNywgMHgxMiwgMHgxOCwgMHhiNywgMHhhZCwgMHgwNywgMHg4MCwgMHhlYywgMHhhZiwgMHgwNiwKKyAgMHgyMiwgMHg3NCwgMHgwMCwgMHhmNSwgMHg4NiwgMHg5MCwgMHhmZCwgMHhhNSwgMHg3YywgMHgwNSwgMHhhMywgMHhlNSwgMHg4MiwgMHg0NSwgMHg4MywgMHg3MCwKKyAgMHhmOSwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHg0MywgMHg4NywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4MzAsIDB4MGIsIDB4MDQsCisgIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4N2YsIDB4ZjQsIDB4N2UsIDB4MDEsIDB4MTIsIDB4MTgsIDB4NjAsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsCisgIDB4ZjcsIDB4ZjAsIDB4MjIsIDB4MTIsIDB4MTMsIDB4NzcsIDB4MTIsIDB4MTcsIDB4ZjksIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4MzAsIDB4ZTcsIDB4MGEsCisgIDB4N2YsIDB4MDUsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MTgsIDB4NjAsIDB4MTIsIDB4MTgsIDB4OTMsIDB4MTIsIDB4MGEsIDB4Y2UsIDB4MjIsIDB4MDN9fSwKKyB7MHgxODQ2LCA2NCwgeyAweDM1LCAweDgwLCAweDAwLCAweDAwLCAweDAzLCAweDJlLCAweDgxLCAweDAwLCAweDAwLCAweGMxLCAweDg1LCAweGMxLCAweDgxLCAweGMxLCAweDA4LCAweGMxLCAweDAwLAorICAweGMxLCAweDA2LCAweDAxLCAweDIyLCAweDAwLCAweDAxLCAweDI0LCAweDAwLCAweDAwLCAweDhlLCAweDE3LCAweDhmLCAweDE4LCAweGU1LCAweDE4LCAweDE1LAorICAweDE4LCAweGFlLCAweDE3LCAweDcwLCAweDAyLCAweDE1LCAweDE3LCAweDRlLCAweDYwLCAweDA4LCAweDEyLCAweDE3LCAweGU4LCAweDEyLCAweDE3LCAweGU4LAorICAweDgwLCAweGViLCAweDIyLCAweGU1LCAweDE1LCAweDI0LCAweDA0LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwfX0sCisgezB4MTg4NiwgNjQsIHsgMHgwNCwgMHhmZiwgMHg0NCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHhkNywgMHhmMCwgMHhlZiwgMHg0NCwgMHgzMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwKKyAgMHg0NCwgMHgwMSwgMHhmMCwgMHg3ZiwgMHgwZCwgMHg3ZSwgMHgwMCwgMHgxMiwgMHgxOCwgMHg2MCwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmZSwKKyAgMHhmMCwgMHgyMiwgMHhlNSwgMHgxMSwgMHgyNCwgMHgwMiwgMHg5MCwgMHg3OCwgMHg0MSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwKKyAgMHhlNSwgMHgxMSwgMHgyNCwgMHgwMywgMHg5MCwgMHg3OCwgMHg0MSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHhlNX19LAorIHsweDE4YzYsIDY0LCB7IDB4MTEsIDB4MjQsIDB4MDQsIDB4OTAsIDB4NzgsIDB4NDEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4ZTUsIDB4MTEsIDB4MjQsIDB4MDUsCisgIDB4OTAsIDB4NzgsIDB4NDEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4ZTUsIDB4MTEsIDB4MjQsIDB4MDYsIDB4OTAsIDB4NzgsCisgIDB4NDEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4NzgsIDB4NDEsIDB4ZTUsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4NTMsIDB4ZDgsIDB4ZWYsIDB4MzIsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZmYsIDB4ZmZ9fSwKKyB7MHgxOTA2LCA2NCwgeyAweGZmLCAweDQwLCAweGNkLCAweDA2LCAweDJhLCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAyLCAweDAwLCAweDA0LCAweDA5LCAweDAyLCAweDc0LCAweDAwLCAweDAxLAorICAweDAxLCAweDAwLCAweGEwLCAweDMyLCAweDA5LCAweDA0LCAweDAwLCAweDAwLCAweDBlLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAxLAorICAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAyLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAzLCAweDAyLCAweDQwLAorICAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA0LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA1LCAweDAyLCAweDQwLCAweDAwfX0sCisgezB4MTk0NiwgNjQsIHsgMHgwMCwgMHgwNywgMHgwNSwgMHgwNiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwKKyAgMHg4MSwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MywgMHgwMiwKKyAgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NSwgMHgwMiwgMHg0MCwgMHgwMCwKKyAgMHgwMSwgMHgwNywgMHgwNSwgMHg4NiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMX19LAorIHsweDE5ODYsIDY0LCB7IDB4MDQsIDB4MDMsIDB4MDksIDB4MDQsIDB4NDgsIDB4MDMsIDB4NGIsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NjEsCisgIDB4MDAsIDB4NmUsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjksIDB4MDAsIDB4NzYsCisgIDB4MDAsIDB4NjksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NjksIDB4MDAsIDB4NmYsIDB4MDAsIDB4NmUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NjYsCisgIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NzksIDB4MDB9fSwKKyB7MHgxOWM2LCA2NCwgeyAweDczLCAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDYzLCAweDAwLCAweDJlLCAweDAwLCAweDI0LCAweDAzLCAweDRiLCAweDAwLCAweDY1LAorICAweDAwLCAweDc5LCAweDAwLCAweDczLCAweDAwLCAweDcwLCAweDAwLCAweDYxLCAweDAwLCAweDZlLCAweDAwLCAweDIwLCAweDAwLCAweDU1LCAweDAwLCAweDUzLAorICAweDAwLCAweDQxLCAweDAwLCAweDJkLCAweDAwLCAweDM0LCAweDAwLCAweDM5LCAweDAwLCAweDU3LCAweDAwLCAweDRjLCAweDAwLCAweDQzLCAweDAwLCAweDIyLAorICAweDAzLCAweDU1LCAweDAwLCAweDUzLCAweDAwLCAweDQxLCAweDAwLCAweDJkLCAweDAwLCAweDM2LCAweDAwLCAweDM1LCAweDAwLCAweDIwLCAweDAwfX0sCisgezB4MWEwNiwgNjQsIHsgMHgzMiwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzMywgMHgwMCwgMHg2YSwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHgzMywgMHgwMCwgMHgzMSwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDFhNDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxYTg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MWFjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxNywgMHg3OSwgMHgwMCwgMHgwMiwgMHgxYn19LAorIHsweDFiMDYsIDIxLCB7IDB4MDQsIDB4MDAsIDB4MDIsIDB4MTcsIDB4MjcsIDB4MDAsIDB4MDIsIDB4MTcsIDB4YTAsIDB4MDAsIDB4MDIsIDB4MWIsIDB4MTAsIDB4MDAsIDB4MDIsIDB4MWIsIDB4MTQsCisgIDB4MDAsIDB4MDIsIDB4MTUsIDB4Nzh9fSwKKyB7MHhmZmZmLCAgMCwgeyAweDAwfX0sCit9OworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTkwbXNnLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2E5MG1zZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkOTM1YjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2E5MG1zZy5oCkBAIC0wLDAgKzEsMTk4IEBACisvKgorCXVzYTkwbXNnLmgKKworCUNvcHlyaWdodCAoYykgMTk5OC0yMDAzIElubm9TeXMgSW5jb3Jwb3JhdGVkLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorCVRoaXMgZmlsZSBpcyBhdmFpbGFibGUgdW5kZXIgYSBCU0Qtc3R5bGUgY29weXJpZ2h0CisKKwlLZXlzcGFuIFVTQiBBc3luYyBNZXNzYWdlIEZvcm1hdHMgZm9yIHRoZSBVU0ExOUhTCisKKwlSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKwltb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisJbWV0OgorCisJMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoaXMgbGljZW5jZSB0ZXh0CisgICAJd2l0aG91dCBtb2RpZmljYXRpb24sIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICAgCWRpc2NsYWltZXIuICBUaGUgZm9sbG93aW5nIGNvcHlyaWdodCBub3RpY2UgbXVzdCBhcHBlYXIgaW1tZWRpYXRlbHkgYXQKKyAgIAl0aGUgYmVnaW5uaW5nIG9mIGFsbCBzb3VyY2UgZmlsZXM6CisKKyAgICAgICAgCUNvcHlyaWdodCAoYykgMTk5OC0yMDAzIElubm9TeXMgSW5jb3Jwb3JhdGVkLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorCisgICAgICAgIAlUaGlzIGZpbGUgaXMgYXZhaWxhYmxlIHVuZGVyIGEgQlNELXN0eWxlIGNvcHlyaWdodAorCisJMi4gVGhlIG5hbWUgb2YgSW5ub1N5cyBJbmNvcnByYXRlZCBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgICAJcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgICAJcGVybWlzc2lvbi4KKworCVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgSU5OT1NZUyBDT1JQLiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisJSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworCU9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCisJTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorCUlORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworCShJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorCVNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisJQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisJTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorCU9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKwlTVUNIIERBTUFHRS4gICAgCisKKwlSZXZpc2lvbnM6CisKKwkyMDAzZmViMTQJCWFkZCBzZXRUeE1vZGUvdHhNb2RlICBhbmQgY2FuY2VsUnhYb2ZmIHRvIHBvcnRDb250cm9sCisJMjAwM21hcjIxCQljaGFuZ2UgbmFtZSBvZiBQQVJJVFlfMC8xIHRvIGFkZCBNQVJLL1NQQUNFCisqLworCisjaWZuZGVmCV9fVVNBOTBNU0dfXworI2RlZmluZQlfX1VTQTkwTVNHX18KKworc3RydWN0IGtleXNwYW5fdXNhOTBfcG9ydENvbnRyb2xNZXNzYWdlCit7CisJLyoKKwkJdGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mICJjb21tYW5kcyIgc2VudCBpbiB0aGUgY29udHJvbCBtZXNzYWdlOgorCisJCTEuCWNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3aGljaCBtdXN0IGJlIHJlcXVlc3RlZCBieSBzZXR0aW5nCisJCQl0aGUgY29ycmVzcG9uZGluZyAic2V0IiBmbGFnIChhbmQgc2hvdWxkIG9ubHkgYmUgcmVxdWVzdGVkCisJCQl3aGVuIG5lY2Vzc2FyeSwgdG8gcmVkdWNlIG92ZXJoZWFkIG9uIHRoZSBkZXZpY2UpOgorCSovCisKKwl1OAlzZXRDbG9ja2luZywJLy8gaG9zdCByZXF1ZXN0cyBiYXVkIHJhdGUgYmUgc2V0CisJCWJhdWRMbywJCQkvLyBob3N0IGRvZXMgYmF1ZCBkaXZpc29yIGNhbGN1bGF0aW9uCisJCWJhdWRIaSwJCQkvLyBob3N0IGRvZXMgYmF1ZCBkaXZpc29yIGNhbGN1bGF0aW9uIAorCQkKKwkJc2V0TGNyLAkJCS8vIGhvc3QgcmVxdWVzdHMgbGNyIGJlIHNldAorCQlsY3IsCQkJLy8gdXNlIFBBUklUWSwgU1RPUEJJVFMsIERBVEFCSVRTIGJlbG93CisJCQorCQlzZXRSeE1vZGUsCQkvLyBzZXQgcmVjZWl2ZSBtb2RlCisJCXJ4TW9kZSwJCQkvLyBSWE1PREVfRE1BIG9yIFJYTU9ERV9CWUhBTkQKKworCQlzZXRUeE1vZGUsCQkvLyBzZXQgdHJhbnNtaXQgbW9kZQorCQl0eE1vZGUsCQkJLy8gVFhNT0RFX0RNQSBvciBUWE1PREVfQllIQU5ECisKKwkJc2V0VHhGbG93Q29udHJvbCwJLy8gaG9zdCByZXF1ZXN0cyB0eCBmbG93IGNvbnRyb2wgYmUgc2V0CisJCXR4Rmxvd0NvbnRyb2wJLAkvLyB1c2UgVFhfRkxPVy4uLiBiaXRzIGJlbG93CisJCXNldFJ4Rmxvd0NvbnRyb2wsCS8vIGhvc3QgcmVxdWVzdHMgcnggZmxvdyBjb250cm9sIGJlIHNldAorCQlyeEZsb3dDb250cm9sLAkvLyB1c2UgUlhfRkxPVy4uLiBiaXRzIGJlbG93CisJCXNlbmRYb2ZmLAkJLy8gaG9zdCByZXF1ZXN0cyBYT0ZGIHRyYW5zbWl0dGVkIGltbWVkaWF0ZWx5CisJCXNlbmRYb24sCQkvLyBob3N0IHJlcXVlc3RzIFhPTiBjaGFyIHRyYW5zbWl0dGVkCisJCXhvbkNoYXIsCQkvLyBzcGVjaWZpZWQgaW4gY3VycmVudCBjaGFyYWN0ZXIgZm9ybWF0CisJCXhvZmZDaGFyLAkJLy8gc3BlY2lmaWVkIGluIGN1cnJlbnQgY2hhcmFjdGVyIGZvcm1hdAorCisJCXNlbmRDaGFyLAkJLy8gaG9zdCByZXF1ZXN0cyBjaGFyIHRyYW5zbWl0dGVkIGltbWVkaWF0ZWx5CisJCXR4Q2hhciwJCQkvLyBjaGFyYWN0ZXIgdG8gc2VuZAorCisJCXNldFJ0cywJCQkvLyBob3N0IHJlcXVlc3RzIFJUUyBvdXRwdXQgYmUgc2V0CisJCXJ0cywJCQkvLyAxPW9uLCAwPW9mZgorCQlzZXREdHIsIAkJLy8gaG9zdCByZXF1ZXN0cyBEVFIgb3V0cHV0IGJlIHNldAorCQlkdHI7CQkJLy8gMT1vbiwgMD1vZmYKKworCQorCS8qCisJCTIuCWNvbmZpZ3VyYXRpb24gZGF0YSB3aGljaCBpcyBzaW1wbHkgdXNlZCBhcyBpcyAKKwkJCWFuZCBtdXN0IGJlIHNwZWNpZmllZCBjb3JyZWN0bHkgaW4gZXZlcnkgaG9zdCBtZXNzYWdlLgorCSovCisKKwl1OAlyeEZvcndhcmRpbmdMZW5ndGgsICAvLyBmb3J3YXJkIHdoZW4gdGhpcyBudW1iZXIgb2YgY2hhcnMgYXZhaWxhYmxlCisJCXJ4Rm9yd2FyZGluZ1RpbWVvdXQsIC8vICgxLTMxIGluIG1zKQorCQl0eEFja1NldHRpbmc7CSAgIC8vIDA9ZG9uJ3QgYWNrLCAxPW5vcm1hbCwgMi0yNTUgVEJELi4uCisJLyoKKwkJMy4JRmlybXdhcmUgc3RhdGVzIHdoaWNoIGNhdXNlIGFjdGlvbnMgaWYgdGhleSBjaGFuZ2UJCQkJCQorCQlhbmQgbXVzdCBiZSBzcGVjaWZpZWQgY29ycmVjdGx5IGluIGV2ZXJ5IGhvc3QgbWVzc2FnZS4KKwkqLworCisJdTgJcG9ydEVuYWJsZWQsCS8vIDA9ZGlzYWJsZWQsIDE9ZW5hYmxlZAorCQl0eEZsdXNoLAkJLy8gMD1ub3JtYWwsIDE9dG9zcyBvdXRib3VuZCBkYXRhCisJCXR4QnJlYWssCQkvLyAwPWJyZWFrIG9mZiwgMT1icmVhayBvbgorCQlsb29wYmFja01vZGU7CS8vIDA9bm8gbG9vcGJhY2ssIDE9bG9vcGJhY2sgZW5hYmxlZAorCisJLyoKKwkJNC4JY29tbWFuZHMgd2hpY2ggYXJlIGZsYWdzIG9ubHk7IHRoZXNlIGFyZSBwcm9jZXNzZWQgaW4gb3JkZXIKKwkJCShzbyB0aGF0LCBlLmcuLCBpZiByeEZsdXNoIGFuZCByeEZvcndhcmQgZmxhZ3MgYXJlIHNldCwgdGhlCisJCQlwb3J0IHdpbGwgaGF2ZSBubyBkYXRhIHRvIGZvcndhcmQpOyBhbnkgbm9uLXplcm8gdmFsdWUgCisJCQlpcyByZXNwZWN0ZWQKKwkqLworCisJdTgJcnhGbHVzaCwJCS8vIHRvc3MgaW5ib3VuZCBkYXRhCisJCXJ4Rm9yd2FyZCwJCS8vIGZvcndhcmQgYWxsIGluYm91bmQgZGF0YSwgTk9XIChhcyBpZiBmd2RMZW49PTEpCisJCWNhbmNlbFJ4WG9mZiwJLy8gY2FuY2VsIGFueSByZWNlaXZlIFhPRkYgc3RhdGUgKF90eFhvZmYpCisJCXJldHVyblN0YXR1czsJLy8gcmV0dXJuIGN1cnJlbnQgc3RhdHVzIE5PVworfTsKKworLy8gZGVmaW5lcyBmb3IgYml0cyBpbiBsY3IKKyNkZWZpbmUJCVVTQV9EQVRBQklUU181CQkweDAwCisjZGVmaW5lCQlVU0FfREFUQUJJVFNfNgkJMHgwMQorI2RlZmluZQkJVVNBX0RBVEFCSVRTXzcJCTB4MDIKKyNkZWZpbmUJCVVTQV9EQVRBQklUU184CQkweDAzCisjZGVmaW5lCQlTVE9QQklUU181Njc4XzEJCTB4MDAJLy8gMSBzdG9wIGJpdCBmb3IgYWxsIGJ5dGUgc2l6ZXMKKyNkZWZpbmUJCVNUT1BCSVRTXzVfMXA1CQkweDA0CS8vIDEuNSBzdG9wIGJpdHMgZm9yIDUtYml0IGJ5dGUKKyNkZWZpbmUJCVNUT1BCSVRTXzY3OF8yCQkweDA0CS8vIDIgc3RvcCBiaXRzIGZvciA2LTggYml0IGJ5dGUKKyNkZWZpbmUJCVVTQV9QQVJJVFlfTk9ORQkJMHgwMAorI2RlZmluZQkJVVNBX1BBUklUWV9PREQJCTB4MDgKKyNkZWZpbmUJCVVTQV9QQVJJVFlfRVZFTgkJMHgxOAorI2RlZmluZQkJUEFSSVRZX01BUktfMSAgCQkweDI4ICAgCS8vIGZvcmNlIHBhcml0eSBNQVJLCisjZGVmaW5lCQlQQVJJVFlfU1BBQ0VfMCAJCTB4MzgJLy8gZm9yY2UgcGFyaXR5IFNQQUNFCisKKyNkZWZpbmUJCVRYRkxPV19DVFMJCQkweDA0CQorI2RlZmluZQkJVFhGTE9XX0RTUgkJCTB4MDgKKyNkZWZpbmUJCVRYRkxPV19YT0ZGCQkJMHgwMQkKKyNkZWZpbmUJCVRYRkxPV19YT0ZGX0FOWQkJMHgwMgkKKyNkZWZpbmUJCVRYRkxPV19YT0ZGX0JJVFMJKFRYRkxPV19YT0ZGIHwgVFhGTE9XX1hPRkZfQU5ZKQorCisjZGVmaW5lCQlSWEZMT1dfWE9GRgkJCTB4MTAJCisjZGVmaW5lCQlSWEZMT1dfUlRTCQkJMHgyMAkKKyNkZWZpbmUJCVJYRkxPV19EVFIJCQkweDQwCisjZGVmaW5lCQlSWEZMT1dfRFNSX1NFTlNJVElWSVRZCTB4ODAKKworI2RlZmluZQkJUlhNT0RFX0JZSEFORAkJMHgwMAkKKyNkZWZpbmUJCVJYTU9ERV9ETUEJCQkweDAyCQorCisjZGVmaW5lCQlUWE1PREVfQllIQU5ECQkweDAwCQorI2RlZmluZQkJVFhNT0RFX0RNQQkJCTB4MDIJCisKKworLy8gYWxsIHRoaW5ncyBjYWxsZWQgIlN0YXR1c01lc3NhZ2UiIGFyZSBzZW50IG9uIHRoZSBzdGF0dXMgZW5kcG9pbnQKKworc3RydWN0IGtleXNwYW5fdXNhOTBfcG9ydFN0YXR1c01lc3NhZ2UJCit7CisJdTgJbXNyLAkJCS8vIHJlcG9ydHMgdGhlIGFjdHVhbCBNU1IgcmVnaXN0ZXIKKwkJY3RzLAkJCS8vIHJlcG9ydHMgQ1RTIHBpbgorCQlkY2QsCQkJLy8gcmVwb3J0cyBEQ0QgcGluCisJCWRzciwJCQkvLyByZXBvcnRzIERTUiBwaW4KKwkJcmksCQkJCS8vIHJlcG9ydHMgUkkgcGluCisJCV90eFhvZmYsCQkvLyBwb3J0IGlzIGluIFhPRkYgc3RhdGUgKHdlIHJlY2VpdmVkIFhPRkYpCisJCXJ4QnJlYWssCQkvLyByZXBvcnRzIGJyZWFrIHN0YXRlCisJCXJ4T3ZlcnJ1biwJCS8vIGNvdW50IG9mIG92ZXJydW4gZXJyb3JzIChzaW5jZSBsYXN0IHJlcG9ydGVkKQorCQlyeFBhcml0eSwJCS8vIGNvdW50IG9mIHBhcml0eSBlcnJvcnMgKHNpbmNlIGxhc3QgcmVwb3J0ZWQpCisJCXJ4RnJhbWUsCQkvLyBjb3VudCBvZiBmcmFtZSBlcnJvcnMgKHNpbmNlIGxhc3QgcmVwb3J0ZWQpCisJCXBvcnRTdGF0ZSwJCS8vIFBPUlRTVEFURV94eHggYml0cyAodXNlZnVsIGZvciBkZWJ1Z2dpbmcpCisJCW1lc3NhZ2VBY2ssCQkvLyBtZXNzYWdlIGFja25vd2xlZGdlbWVudAorCQljaGFyQWNrLAkJLy8gY2hhcmFjdGVyIGFja25vd2xlZGdlbWVudAorCQljb250cm9sUmVzcG9uc2U7CS8vICh2YWx1ZSA9IHJldHVyblN0YXR1cykgYSBjb250cm9sIG1lc3NhZ2UgaGFzIGJlZW4gcHJvY2Vzc2VkIAorfTsKKworLy8gYml0cyBpbiBSWCBkYXRhIG1lc3NhZ2Ugd2hlbiBTVEFUIGJ5dGUgaXMgaW5jbHVkZWQKKworI2RlZmluZQlSWEVSUk9SX09WRVJSVU4JCTB4MDIKKyNkZWZpbmUJUlhFUlJPUl9QQVJJVFkJCTB4MDQKKyNkZWZpbmUJUlhFUlJPUl9GUkFNSU5HCQkweDA4CisjZGVmaW5lCVJYRVJST1JfQlJFQUsJCTB4MTAKKworI2RlZmluZQlQT1JUU1RBVEVfRU5BQkxFRAkweDgwCisjZGVmaW5lCVBPUlRTVEFURV9UWEZMVVNICTB4MDEKKyNkZWZpbmUJUE9SVFNUQVRFX1RYQlJFQUsJMHgwMgorI2RlZmluZQlQT1JUU1RBVEVfTE9PUEJBQ0sgCTB4MDQKKworLy8gTVNSIGJpdHMKKworI2RlZmluZSBVU0FfTVNSX2RDVFMJICAJCTB4MDEJCS8vIENUUyBoYXMgY2hhbmdlZCBzaW5jZSBsYXN0IHJlcG9ydAkKKyNkZWZpbmUgVVNBX01TUl9kRFNSCSAgCQkweDAyCisjZGVmaW5lIFVTQV9NU1JfZFJJCQkJMHgwNAorI2RlZmluZSBVU0FfTVNSX2REQ0QJICAJCTB4MDgKKworI2RlZmluZSBVU0FfTVNSX0NUUwkJCTB4MTAJICAJLy8gY3VycmVudCBzdGF0ZSBvZiBDVFMKKyNkZWZpbmUgVVNBX01TUl9EU1IJCQkweDIwCisjZGVmaW5lIFVTQV9VU0FfTVNSX1JJCQkJMHg0MAorI2RlZmluZSBNU1JfRENECQkJCTB4ODAKKworLy8gaWU6IHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhbiBlbmRwb2ludCBidWZmZXIKKyNkZWZpbmUJCU1BWF9EQVRBX0xFTgkJCTY0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDljNjAyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jCkBAIC0wLDAgKzEsMTAzNCBAQAorLyoKKyAqIEtMU0kgS0w1S1VTQjEwNSBjaGlwIFJTMjMyIGNvbnZlcnRlciBkcml2ZXIKKyAqCisgKiAgIENvcHlyaWdodCAoQykgMjAwMSBVdHotVXdlIEhhdXMgPGhhdXNAdXVoYXVzLmRlPgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBBbGwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRldmljZSB3YXMgYWNxdWlyZWQgdXNpbmcgU25pZmZVU0IgYW5zIHNub29wVVNCCisgKiBvbiBXaW5kb3dzOTguCisgKiBJdCB3YXMgd3JpdHRlbiBvdXQgb2YgZnJ1c3RyYXRpb24gd2l0aCB0aGUgUGFsbUNvbm5lY3QgVVNCIFNlcmlhbCBhZGFwdGVyCisgKiBzb2xkIGJ5IFBhbG0gSW5jLgorICogTmVpdGhlciBQYWxtLCBub3IgdGhlaXIgY29udHJhY3RvciAoTUNDSSkgb3IgdGhlaXIgc3VwcGxpZXIgKEtMU0kpIHByb3ZpZGVkCisgKiBpbmZvcm1hdGlvbiB0aGF0IHdhcyBub3QgYWxyZWFkeSBhdmFpbGFibGUuCisgKgorICogSXQgc2VlbXMgdGhhdCBLTFNJIGJvdWdodCBzb21lIHNpbGljb24tZGVzaWduIGluZm9ybWF0aW9uIGZyb20gU2NhbkxvZ2ljLCAKKyAqIHdob3NlIFNMMTFSIHByb2Nlc3NvciBpcyBhdCB0aGUgY29yZSBvZiB0aGUgS0w1S1VTQiBjaGlwc2V0IGZyb20gS0xTSS4KKyAqIEtMU0kgaGFzIGZpcm13YXJlIGF2YWlsYWJsZSBmb3IgdGhlaXIgZGV2aWNlczsgaXQgaXMgcHJvYmFibGUgdGhhdCB0aGUKKyAqIGZpcm13YXJlIGRpZmZlcnMgZnJvbSB0aGF0IHVzZWQgYnkgS0xTSSBpbiB0aGVpciBwcm9kdWN0cy4gSWYgeW91IGhhdmUgYW4KKyAqIG9yaWdpbmFsIEtMU0kgZGV2aWNlIGFuZCBjYW4gcHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIG9uIGl0LCBJIHdvdWxkIGJlIAorICogbW9zdCBpbnRlcmVzdGVkIGluIGFkZGluZyBzdXBwb3J0IGZvciBpdCBoZXJlLiBJZiB5b3UgaGF2ZSBhbnkgaW5mb3JtYXRpb24gCisgKiBvbiB0aGUgcHJvdG9jb2wgdXNlZCAob3IgZmluZCBlcnJvcnMgaW4gbXkgcmV2ZXJzZS1lbmdpbmVlcmVkIHN0dWZmKSwgcGxlYXNlCisgKiBsZXQgbWUga25vdy4KKyAqCisgKiBUaGUgY29kZSB3YXMgb25seSB0ZXN0ZWQgd2l0aCBhIFBhbG1Db25uZWN0IFVTQiBhZGFwdGVyOyBpZiB5b3UKKyAqIGFyZSBhZHZlbnR1cm91cywgdHJ5IGl0IHdpdGggYW55IEtMU0ktYmFzZWQgZGV2aWNlIGFuZCBsZXQgbWUga25vdyBob3cgaXQKKyAqIGJyZWFrcyBzbyB0aGF0IEkgY2FuIGZpeCBpdCEKKyAqLworCisvKiBUT0RPOgorICoJY2hlY2sgbW9kZW0gbGluZSBzaWduYWxzCisgKglpbXBsZW1lbnQgaGFuZHNoYWtpbmcgb3IgZGVjaWRlIHRoYXQgd2UgZG8gbm90IHN1cHBvcnQgaXQKKyAqLworCisvKiBIaXN0b3J5OgorICogICAwLjNhIC0gaW1wbGVtZW50ZWQgcG9vbHMgb2Ygd3JpdGUgVVJCcworICogICAwLjMgIC0gYWxwaGEgdmVyc2lvbiBmb3IgcHVibGljIHRlc3RpbmcKKyAqICAgMC4yICAtIFRJT0NNR0VUIHdvcmtzLCBzbyBhdXRvcGlsb3QoMSkgY2FuIGJlIHVzZWQhCisgKiAgIDAuMSAgLSBjYW4gYmUgdXNlZCB0byB0byBwaWxvdC14ZmVyIC1wIC9kZXYvdHR5VVNCMCAtbAorICoKKyAqICAgVGhlIGRyaXZlciBza2VsZXRvbiBpcyBtYWlubHkgYmFzZWQgb24gbWN0X3UyMzIuYyBhbmQgdmFyaW91cyBvdGhlciAKKyAqICAgcGllY2VzIG9mIGNvZGUgc2hhbWVsZXNzbHkgY29waWVkIGZyb20gdGhlIGRyaXZlcnMvdXNiL3NlcmlhbC8gZGlyZWN0b3J5LgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKyNpbmNsdWRlICJrbDVrdXNiMTA1LmgiCisKK3N0YXRpYyBpbnQgZGVidWc7CisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjNhIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJVdHotVXdlIEhhdXMgPGhhdXNAdXVoYXVzLmRlPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIktMU0kgS0w1S1VTQjEwNSBjaGlwc2V0IFVTQi0+U2VyaWFsIENvbnZlcnRlciBkcml2ZXIiCisKKworLyoKKyAqIEZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqLworc3RhdGljIGludCAga2xzaV8xMDVfc3RhcnR1cAkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgdm9pZCBrbHNpXzEwNV9zaHV0ZG93bgkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50ICBrbHNpXzEwNV9vcGVuCSAgICAgICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIGtsc2lfMTA1X2Nsb3NlCSAgICAgICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIGtsc2lfMTA1X3dyaXRlCSAgICAgICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCQkJICBpbnQgY291bnQpOworc3RhdGljIHZvaWQga2xzaV8xMDVfd3JpdGVfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgaW50ICBrbHNpXzEwNV9jaGFyc19pbl9idWZmZXIgICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgIGtsc2lfMTA1X3dyaXRlX3Jvb20gICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworCitzdGF0aWMgdm9pZCBrbHNpXzEwNV9yZWFkX2J1bGtfY2FsbGJhY2sgIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIGtsc2lfMTA1X3NldF90ZXJtaW9zICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSAgc3RydWN0IHRlcm1pb3MgKiBvbGQpOworc3RhdGljIGludCAga2xzaV8xMDVfaW9jdGwJICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSAgc3RydWN0IGZpbGUgKiBmaWxlLAorCQkJCQkgIHVuc2lnbmVkIGludCBjbWQsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIHZvaWQga2xzaV8xMDVfdGhyb3R0bGUJCSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBrbHNpXzEwNV91bnRocm90dGxlCQkgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworLyoKK3N0YXRpYyB2b2lkIGtsc2lfMTA1X2JyZWFrX2N0bAkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJICBpbnQgYnJlYWtfc3RhdGUgKTsKKyAqLworc3RhdGljIGludCAga2xzaV8xMDVfdGlvY21nZXQJICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSAgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGludCAga2xzaV8xMDVfdGlvY21zZXQJICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBzZXQsCisJCQkJCSAgdW5zaWduZWQgaW50IGNsZWFyKTsKKworLyoKKyAqIEFsbCBvZiB0aGUgZGV2aWNlIGluZm8gbmVlZGVkIGZvciB0aGUgS0xTSSBjb252ZXJ0ZXJzLgorICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKFBBTE1DT05ORUNUX1ZJRCwgUEFMTUNPTk5FQ1RfUElEKSB9LAorCXsgVVNCX0RFVklDRShLTFNJX1ZJRCwgS0xTSV9LTDVLVVNCMTA1RF9QSUQpIH0sCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBrbDVrdXNiMTA1ZF9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImtsNWt1c2IxMDVkIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGtsNWt1c2IxMDVkX2RldmljZSA9IHsKKwkub3duZXIgPSAgICAgICAgICAgICBUSElTX01PRFVMRSwKKwkubmFtZSA9CQkgICAgICJLTDVLVVNCMTA1RCAvIFBhbG1Db25uZWN0IiwKKwkuc2hvcnRfbmFtZSA9CSAgICAgImtsNWt1c2IxMDVkIiwKKwkuaWRfdGFibGUgPQkgICAgIGlkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luID0gIDEsCisJLm51bV9idWxrX2luID0JICAgICAxLAorCS5udW1fYnVsa19vdXQgPQkgICAgIDEsCisJLm51bV9wb3J0cyA9CSAgICAgMSwKKwkub3BlbiA9CQkgICAgIGtsc2lfMTA1X29wZW4sCisJLmNsb3NlID0JICAgICBrbHNpXzEwNV9jbG9zZSwKKwkud3JpdGUgPQkgICAgIGtsc2lfMTA1X3dyaXRlLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0ga2xzaV8xMDVfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkuY2hhcnNfaW5fYnVmZmVyID0gICBrbHNpXzEwNV9jaGFyc19pbl9idWZmZXIsCisJLndyaXRlX3Jvb20gPSAgICAgICAga2xzaV8xMDVfd3JpdGVfcm9vbSwKKwkucmVhZF9idWxrX2NhbGxiYWNrID1rbHNpXzEwNV9yZWFkX2J1bGtfY2FsbGJhY2ssCisJLmlvY3RsID0JICAgICBrbHNpXzEwNV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkgICAgIGtsc2lfMTA1X3NldF90ZXJtaW9zLAorCS8qLmJyZWFrX2N0bCA9CSAgICAga2xzaV8xMDVfYnJlYWtfY3RsLCovCisJLnRpb2NtZ2V0ID0gICAgICAgICAga2xzaV8xMDVfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0gICAgICAgICAga2xzaV8xMDVfdGlvY21zZXQsCisJLmF0dGFjaCA9CSAgICAga2xzaV8xMDVfc3RhcnR1cCwKKwkuc2h1dGRvd24gPQkgICAgIGtsc2lfMTA1X3NodXRkb3duLAorCS50aHJvdHRsZSA9CSAgICAga2xzaV8xMDVfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUgPQkgICAgIGtsc2lfMTA1X3VudGhyb3R0bGUsCit9OworCitzdHJ1Y3Qga2xzaV8xMDVfcG9ydF9zZXR0aW5ncyB7CisJX191OAlwa3RsZW47CQkvKiBhbHdheXMgNSwgaXQgc2VlbXMgKi8KKwlfX3U4CWJhdWRyYXRlOworCV9fdTgJZGF0YWJpdHM7CisJX191OAl1bmtub3duMTsKKwlfX3U4CXVua25vd24yOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIHdlIGltcGxlbWVudCBhIHBvb2wgb2YgTlVNX1VSQlMgdXJicyBwZXIgdXNiX3NlcmlhbCAqLworI2RlZmluZSBOVU1fVVJCUwkJCTEKKyNkZWZpbmUgVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFCTY0CitzdHJ1Y3Qga2xzaV8xMDVfcHJpdmF0ZSB7CisJc3RydWN0IGtsc2lfMTA1X3BvcnRfc2V0dGluZ3MJY2ZnOworCXN0cnVjdCB0ZXJtaW9zCQkJdGVybWlvczsKKwl1bnNpZ25lZCBsb25nCQkJbGluZV9zdGF0ZTsgLyogbW9kZW0gbGluZSBzZXR0aW5ncyAqLworCS8qIHdyaXRlIHBvb2wgKi8KKwlzdHJ1Y3QgdXJiICoJCQl3cml0ZV91cmJfcG9vbFtOVU1fVVJCU107CisJc3BpbmxvY2tfdAkJCWxvY2s7CisJdW5zaWduZWQgbG9uZwkJCWJ5dGVzX2luOworCXVuc2lnbmVkIGxvbmcJCQlieXRlc19vdXQ7Cit9OworCisKKy8qCisgKiBIYW5kbGUgdmVuZG9yIHNwZWNpZmljIFVTQiByZXF1ZXN0cworICovCisKKworI2RlZmluZSBLTFNJX1RJTUVPVVQJIDUwMDAgLyogZGVmYXVsdCB1cmIgdGltZW91dCAqLworCitzdGF0aWMgaW50IGtsc2lfMTA1X2NoZ19wb3J0X3NldHRpbmdzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJICAgICAgc3RydWN0IGtsc2lfMTA1X3BvcnRfc2V0dGluZ3MgKnNldHRpbmdzKQoreworCWludCByYzsKKworICAgICAgICByYyA9IHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKKwkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICAgS0w1S1VTQjEwNUFfU0lPX1NFVF9EQVRBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkgICAgIDAsIC8qIHZhbHVlICovCisJCQkgICAgIDAsIC8qIGluZGV4ICovCisJCQkgICAgIHNldHRpbmdzLAorCQkJICAgICBzaXplb2Yoc3RydWN0IGtsc2lfMTA1X3BvcnRfc2V0dGluZ3MpLAorCQkJICAgICBLTFNJX1RJTUVPVVQpOworCWlmIChyYyA8IDApCisJCWVycigiQ2hhbmdlIHBvcnQgc2V0dGluZ3MgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJjKTsKKwlpbmZvKCIlcyAtICVkIGJ5dGUgYmxvY2ssIGJhdWRyYXRlICV4LCBkYXRhYml0cyAlZCwgdTEgJWQsIHUyICVkIiwKKwkgICAgX19GVU5DVElPTl9fLAorCSAgICBzZXR0aW5ncy0+cGt0bGVuLAorCSAgICBzZXR0aW5ncy0+YmF1ZHJhdGUsIHNldHRpbmdzLT5kYXRhYml0cywKKwkgICAgc2V0dGluZ3MtPnVua25vd24xLCBzZXR0aW5ncy0+dW5rbm93bjIpOworICAgICAgICByZXR1cm4gcmM7Cit9IC8qIGtsc2lfMTA1X2NoZ19wb3J0X3NldHRpbmdzICovCisKKy8qIHRyYW5zbGF0ZSBhIDE2LWJpdCBzdGF0dXMgdmFsdWUgZnJvbSB0aGUgZGV2aWNlIHRvIGxpbnV4J3MgVElPIGJpdHMgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGtsc2lfMTA1X3N0YXR1czJsaW5lc3RhdGUoY29uc3QgX191MTYgc3RhdHVzKQoreworCXVuc2lnbmVkIGxvbmcgcmVzID0gMDsKKworCXJlcyA9ICAgKChzdGF0dXMgJiBLTDVLVVNCMTA1QV9EU1IpID8gVElPQ01fRFNSIDogMCkKKwkgICAgICB8ICgoc3RhdHVzICYgS0w1S1VTQjEwNUFfQ1RTKSA/IFRJT0NNX0NUUyA6IDApCisJICAgICAgOworCisJcmV0dXJuIHJlczsKK30KKy8qIAorICogUmVhZCBsaW5lIGNvbnRyb2wgdmlhIHZlbmRvciBjb21tYW5kIGFuZCByZXR1cm4gcmVzdWx0IHRocm91Z2gKKyAqICpsaW5lX3N0YXRlX3AgCisgKi8KKy8qIEl0IHNlZW1zIHRoYXQgdGhlIHN0YXR1cyBidWZmZXIgaGFzIGFsd2F5cyBvbmx5IDIgYnl0ZXMgbGVuZ3RoICovCisjZGVmaW5lIEtMU0lfU1RBVFVTQlVGX0xFTgkyCitzdGF0aWMgaW50IGtsc2lfMTA1X2dldF9saW5lX3N0YXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJICAgdW5zaWduZWQgbG9uZyAqbGluZV9zdGF0ZV9wKQoreworCWludCByYzsKKwlfX3U4IHN0YXR1c19idWZbS0xTSV9TVEFUVVNCVUZfTEVOXSA9IHsgLTEsLTF9OworCV9fdTE2IHN0YXR1czsKKworCWluZm8oIiVzIC0gc2VuZGluZyBTSU8gUG9sbCByZXF1ZXN0IiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgcmMgPSB1c2JfY29udHJvbF9tc2cocG9ydC0+c2VyaWFsLT5kZXYsCisJCQkgICAgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCisJCQkgICAgIEtMNUtVU0IxMDVBX1NJT19QT0xMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOLAorCQkJICAgICAwLCAvKiB2YWx1ZSAqLworCQkJICAgICAwLCAvKiBpbmRleCAqLworCQkJICAgICBzdGF0dXNfYnVmLCBLTFNJX1NUQVRVU0JVRl9MRU4sCisJCQkgICAgIDEwMDAwCisJCQkgICAgICk7CisJaWYgKHJjIDwgMCkKKwkJZXJyKCJSZWFkaW5nIGxpbmUgc3RhdHVzIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByYyk7CisJZWxzZSB7CisJCXN0YXR1cyA9IHN0YXR1c19idWZbMF0gKyAoc3RhdHVzX2J1ZlsxXTw8OCk7CisKKwkJaW5mbygiJXMgLSByZWFkIHN0YXR1cyAleCAleCIsIF9fRlVOQ1RJT05fXywKKwkJICAgICBzdGF0dXNfYnVmWzBdLCBzdGF0dXNfYnVmWzFdKTsKKworCQkqbGluZV9zdGF0ZV9wID0ga2xzaV8xMDVfc3RhdHVzMmxpbmVzdGF0ZShzdGF0dXMpOworCX0KKworICAgICAgICByZXR1cm4gcmM7Cit9CisKKworLyoKKyAqIERyaXZlcidzIHR0eSBpbnRlcmZhY2UgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIGludCBrbHNpXzEwNV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBrbHNpXzEwNV9wcml2YXRlICpwcml2OworCWludCBpOworCisJLyogY2hlY2sgaWYgd2Ugc3VwcG9ydCB0aGUgcHJvZHVjdCBpZCAoc2VlIGtleXNwYW4uYykKKwkgKiBGSVhNRQorCSAqLworCisJLyogYWxsb2NhdGUgdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgKi8KKwlmb3IgKGk9MDsgaTxzZXJpYWwtPm51bV9wb3J0czsgaSsrKSB7CisJCWludCBqOworCQlwcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUpLAorCQkJCQkJICAgR0ZQX0tFUk5FTCk7CisJCWlmICghcHJpdikgeworCQkJZGJnKCIlc2ttYWxsb2MgZm9yIGtsc2lfMTA1X3ByaXZhdGUgZmFpbGVkLiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQkvKiBzZXQgaW5pdGlhbCB2YWx1ZXMgZm9yIGNvbnRyb2wgc3RydWN0dXJlcyAqLworCQlwcml2LT5jZmcucGt0bGVuICAgID0gNTsKKwkJcHJpdi0+Y2ZnLmJhdWRyYXRlICA9IGtsNWt1c2IxMDVhX3Npb19iOTYwMDsKKwkJcHJpdi0+Y2ZnLmRhdGFiaXRzICA9IGtsNWt1c2IxMDVhX2R0Yl84OworCQlwcml2LT5jZmcudW5rbm93bjEgID0gMDsKKwkJcHJpdi0+Y2ZnLnVua25vd24yICA9IDE7CisKKwkJcHJpdi0+bGluZV9zdGF0ZSAgICA9IDA7CisKKwkJcHJpdi0+Ynl0ZXNfaW4JICAgID0gMDsKKwkJcHJpdi0+Ynl0ZXNfb3V0CSAgICA9IDA7CisJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIHByaXYpOworCisJCXNwaW5fbG9ja19pbml0ICgmcHJpdi0+bG9jayk7CisJCWZvciAoaj0wOyBqPE5VTV9VUkJTOyBqKyspIHsKKwkJCXN0cnVjdCB1cmIqIHVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisKKwkJCXByaXYtPndyaXRlX3VyYl9wb29sW2pdID0gdXJiOworCQkJaWYgKHVyYiA9PSBOVUxMKSB7CisJCQkJZXJyKCJObyBtb3JlIHVyYnM/Pz8iKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBOVUxMOworCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jIChVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUsCisJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CisJCQkJZXJyKCIlcyAtIG91dCBvZiBtZW1vcnkgZm9yIHVyYiBidWZmZXJzLiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQkvKiBwcml2LT50ZXJtaW9zIGlzIGxlZnQgdW5pbml0YWxpemVkIHVudGlsIHBvcnQgb3BlbmluZyAqLworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZXJpYWwtPnBvcnRbaV0tPndyaXRlX3dhaXQpOworCX0KKwkKKwlyZXR1cm4gKDApOworfSAvKiBrbHNpXzEwNV9zdGFydHVwICovCisKKworc3RhdGljIHZvaWQga2xzaV8xMDVfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IGk7CisJCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBzdG9wIHJlYWRzIGFuZCB3cml0ZXMgb24gYWxsIHBvcnRzICovCisJZm9yIChpPTA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCXN0cnVjdCBrbHNpXzEwNV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSk7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJaWYgKHByaXYpIHsKKwkJCS8qIGtpbGwgb3VyIHdyaXRlIHVyYiBwb29sICovCisJCQlpbnQgajsKKwkJCXN0cnVjdCB1cmIgKip3cml0ZV91cmJzID0gcHJpdi0+d3JpdGVfdXJiX3Bvb2w7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jayxmbGFncyk7CisKKwkJCWZvciAoaiA9IDA7IGogPCBOVU1fVVJCUzsgaisrKSB7CisJCQkJaWYgKHdyaXRlX3VyYnNbal0pIHsKKwkJCQkJLyogRklYTUUgLSB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZworCQkJCQkgKiB1c2Jfa2lsbF91cmIgY2FsbCB3aGVuIHRoZSBob3N0CisJCQkJCSAqIGNvbnRyb2xsZXJzIGdldCBmaXhlZCB0byBzZXQKKwkJCQkJICogdXJiLT5kZXYgPSBOVUxMIGFmdGVyIHRoZSB1cmIgaXMKKwkJCQkJICogZmluaXNoZWQuICBPdGhlcndpc2UgdGhpcyBjYWxsCisJCQkJCSAqIG9vcHNlcy4gKi8KKwkJCQkJLyogdXNiX2tpbGxfdXJiKHdyaXRlX3VyYnNbal0pOyAqLworCQkJCQlpZiAod3JpdGVfdXJic1tqXS0+dHJhbnNmZXJfYnVmZmVyKQorCQkJCQkJICAgIGtmcmVlKHdyaXRlX3VyYnNbal0tPnRyYW5zZmVyX2J1ZmZlcik7CisJCQkJCXVzYl9mcmVlX3VyYiAod3JpdGVfdXJic1tqXSk7CisJCQkJfQorCQkJfQorCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJCQlrZnJlZShwcml2KTsKKwkJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIE5VTEwpOworCQl9CisJfQorfSAvKiBrbHNpXzEwNV9zaHV0ZG93biAqLworCitzdGF0aWMgaW50ICBrbHNpXzEwNV9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3Qga2xzaV8xMDVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgcmM7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBsaW5lX3N0YXRlOworCXN0cnVjdCBrbHNpXzEwNV9wb3J0X3NldHRpbmdzIGNmZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJLyogZm9yY2UgbG93X2xhdGVuY3kgb24gc28gdGhhdCBvdXIgdHR5X3B1c2ggYWN0dWFsbHkgZm9yY2VzCisJICogdGhlIGRhdGEgdGhyb3VnaAorCSAqIHBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAxOyAqLworCisJLyogRG8gYSBkZWZpbmVkIHJlc3RhcnQ6CisJICogU2V0IHVwIHNhbmUgZGVmYXVsdCBiYXVkIHJhdGUgYW5kIHNlbmQgdGhlICdSRUFEX09OJworCSAqIHZlbmRvciBjb21tYW5kLiAKKwkgKiBGSVhNRTogc2V0IG1vZGVtIGxpbmUgY29udHJvbCAoaG93PykKKwkgKiBUaGVuIHJlYWQgdGhlIG1vZGVtIGxpbmUgY29udHJvbCBhbmQgc3RvcmUgdmFsdWVzIGluCisJICogcHJpdi0+bGluZV9zdGF0ZS4KKwkgKi8KKwljZmcucGt0bGVuICAgPSA1OworCWNmZy5iYXVkcmF0ZSA9IGtsNWt1c2IxMDVhX3Npb19iOTYwMDsKKwljZmcuZGF0YWJpdHMgPSBrbDVrdXNiMTA1YV9kdGJfODsKKwljZmcudW5rbm93bjEgPSAwOworCWNmZy51bmtub3duMiA9IDE7CisJa2xzaV8xMDVfY2hnX3BvcnRfc2V0dGluZ3MocG9ydCwgJmNmZyk7CisJCisJLyogc2V0IHVwIHRlcm1pb3Mgc3RydWN0dXJlICovCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJpdi0+dGVybWlvcy5jX2lmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnOworCXByaXYtPnRlcm1pb3MuY19vZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19vZmxhZzsKKwlwcml2LT50ZXJtaW9zLmNfY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJcHJpdi0+dGVybWlvcy5jX2xmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2xmbGFnOworCWZvciAoaT0wOyBpPE5DQ1M7IGkrKykKKwkJcHJpdi0+dGVybWlvcy5jX2NjW2ldID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NjW2ldOworCXByaXYtPmNmZy5wa3RsZW4gICA9IGNmZy5wa3RsZW47CisJcHJpdi0+Y2ZnLmJhdWRyYXRlID0gY2ZnLmJhdWRyYXRlOworCXByaXYtPmNmZy5kYXRhYml0cyA9IGNmZy5kYXRhYml0czsKKwlwcml2LT5jZmcudW5rbm93bjEgPSBjZmcudW5rbm93bjE7CisJcHJpdi0+Y2ZnLnVua25vd24yID0gY2ZnLnVua25vd24yOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkvKiBSRUFEX09OIGFuZCB1cmIgc3VibWlzc2lvbiAqLworCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwgCisJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwKKwkJCQkgICAgICBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCSAgICAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCSAgICAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkgICAgICBrbHNpXzEwNV9yZWFkX2J1bGtfY2FsbGJhY2ssCisJCSAgICAgIHBvcnQpOworCisJcmMgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJjKSB7CisJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJjKTsKKwkJcmV0dmFsID0gcmM7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyYyA9IHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKKwkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LDApLAorCQkJICAgICBLTDVLVVNCMTA1QV9TSU9fQ09ORklHVVJFLAorCQkJICAgICBVU0JfVFlQRV9WRU5ET1J8VVNCX0RJUl9PVVR8VVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCSAgICAgS0w1S1VTQjEwNUFfU0lPX0NPTkZJR1VSRV9SRUFEX09OLAorCQkJICAgICAwLCAvKiBpbmRleCAqLworCQkJICAgICBOVUxMLAorCQkJICAgICAwLAorCQkJICAgICBLTFNJX1RJTUVPVVQpOworCWlmIChyYyA8IDApIHsKKwkJZXJyKCJFbmFibGluZyByZWFkIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByYyk7CisJCXJldHZhbCA9IHJjOworCX0gZWxzZSAKKwkJZGJnKCIlcyAtIGVuYWJsZWQgcmVhZGluZyIsIF9fRlVOQ1RJT05fXyk7CisKKwlyYyA9IGtsc2lfMTA1X2dldF9saW5lX3N0YXRlKHBvcnQsICZsaW5lX3N0YXRlKTsKKwlpZiAocmMgPj0gMCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcHJpdi0+bGluZV9zdGF0ZSA9IGxpbmVfc3RhdGU7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCWRiZygiJXMgLSByZWFkIGxpbmUgc3RhdGUgMHglbHgiLCBfX0ZVTkNUSU9OX18sIGxpbmVfc3RhdGUpOworCQlyZXR2YWwgPSAwOworCX0gZWxzZQorCQlyZXR2YWwgPSByYzsKKworZXhpdDoKKwlyZXR1cm4gcmV0dmFsOworfSAvKiBrbHNpXzEwNV9vcGVuICovCisKKworc3RhdGljIHZvaWQga2xzaV8xMDVfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBrbHNpXzEwNV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludCByYzsKKworCWRiZygiJXMgcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIHNlbmQgUkVBRF9PRkYgKi8KKwlyYyA9IHVzYl9jb250cm9sX21zZyAocG9ydC0+c2VyaWFsLT5kZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJICAgICAgS0w1S1VTQjEwNUFfU0lPX0NPTkZJR1VSRSwKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VULAorCQkJICAgICAgS0w1S1VTQjEwNUFfU0lPX0NPTkZJR1VSRV9SRUFEX09GRiwKKwkJCSAgICAgIDAsIC8qIGluZGV4ICovCisJCQkgICAgICBOVUxMLCAwLAorCQkJICAgICAgS0xTSV9USU1FT1VUKTsKKwlpZiAocmMgPCAwKQorCQkgICAgZXJyKCJEaXNhYmxpbmcgcmVhZCBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmMpOworCisJLyogc2h1dGRvd24gb3VyIGJ1bGsgcmVhZHMgYW5kIHdyaXRlcyAqLworCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisJLyogdW5saW5rIG91ciB3cml0ZSBwb29sICovCisJLyogRklYTUUgKi8KKwkvKiB3Z2cgLSBkbyBJIG5lZWQgdGhpcz8gSSB0aGluayBzby4gKi8KKwl1c2Jfa2lsbF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CisJaW5mbygia2w1a3VzYjEwNSBwb3J0IHN0YXRzOiAlbGQgYnl0ZXMgaW4sICVsZCBieXRlcyBvdXQiLCBwcml2LT5ieXRlc19pbiwgcHJpdi0+Ynl0ZXNfb3V0KTsKK30gLyoga2xzaV8xMDVfY2xvc2UgKi8KKworCisvKiBXZSBuZWVkIHRvIHdyaXRlIGEgY29tcGxldGUgNjQtYnl0ZSBkYXRhIGJsb2NrIGFuZCBlbmNvZGUgdGhlCisgKiBudW1iZXIgYWN0dWFsbHkgc2VudCBpbiB0aGUgZmlyc3QgZG91YmxlLWJ5dGUsIExTQi1vcmRlci4gVGhhdCAKKyAqIGxlYXZlcyBhdCBtb3N0IDYyIGJ5dGVzIG9mIHBheWxvYWQuCisgKi8KKyNkZWZpbmUgS0xTSV8xMDVfREFUQV9PRkZTRVQJMiAgIC8qIGluIHRoZSBidWxrIHVyYiBkYXRhIGJsb2NrICovCisKKworc3RhdGljIGludCBrbHNpXzEwNV93cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXN0cnVjdCBrbHNpXzEwNV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludCByZXN1bHQsIHNpemU7CisJaW50IGJ5dGVzX3NlbnQ9MDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJd2hpbGUgKGNvdW50ID4gMCkgeworCQkvKiB0cnkgdG8gZmluZCBhIGZyZWUgdXJiICh3cml0ZSAwIGJ5dGVzIGlmIG5vbmUpICovCisJCXN0cnVjdCB1cmIgKnVyYiA9IE5VTEw7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCWludCBpOworCQkvKiBzaW5jZSB0aGUgcG9vbCBpcyBwZXItcG9ydCB3ZSBtaWdodCBub3QgbmVlZCB0aGUgc3BpbiBsb2NrICE/ICovCisJCXNwaW5fbG9ja19pcnFzYXZlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlmb3IgKGk9MDsgaTxOVU1fVVJCUzsgaSsrKSB7CisJCQlpZiAocHJpdi0+d3JpdGVfdXJiX3Bvb2xbaV0tPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpIHsKKwkJCQl1cmIgPSBwcml2LT53cml0ZV91cmJfcG9vbFtpXTsKKwkJCQlkYmcoIiVzIC0gdXNpbmcgcG9vbCBVUkIgJWQiLCBfX0ZVTkNUSU9OX18sIGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkJaWYgKHVyYj09TlVMTCkgeworCQkJZGJnKCIlcyAtIG5vIG1vcmUgZnJlZSB1cmJzIiwgX19GVU5DVElPTl9fKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7CisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MgKFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSwgR0ZQX0FUT01JQyk7CisJCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgeworCQkJCWVycigiJXMgLSBubyBtb3JlIGtlcm5lbCBtZW1vcnkuLi4iLCBfX0ZVTkNUSU9OX18pOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJfQorCisJCXNpemUgPSBtaW4gKGNvdW50LCBwb3J0LT5idWxrX291dF9zaXplIC0gS0xTSV8xMDVfREFUQV9PRkZTRVQpOworCQlzaXplID0gbWluIChzaXplLCBVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUgLSBLTFNJXzEwNV9EQVRBX09GRlNFVCk7CisKKwkJbWVtY3B5ICh1cmItPnRyYW5zZmVyX2J1ZmZlciArIEtMU0lfMTA1X0RBVEFfT0ZGU0VULCBidWYsIHNpemUpOworCisJCS8qIHdyaXRlIHBheWxvYWQgc2l6ZSBpbnRvIHRyYW5zZmVyIGJ1ZmZlciAqLworCQkoKF9fdTggKil1cmItPnRyYW5zZmVyX2J1ZmZlcilbMF0gPSAoX191OCkgKHNpemUgJiAweEZGKTsKKwkJKChfX3U4ICopdXJiLT50cmFuc2Zlcl9idWZmZXIpWzFdID0gKF9fdTgpICgoc2l6ZSAmIDB4RkYwMCk+PjgpOworCisJCS8qIHNldCB1cCBvdXIgdXJiICovCisJCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgcG9ydC0+c2VyaWFsLT5kZXYsCisJCQkgICAgICB1c2Jfc25kYnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJCSAgICAgIHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQkgICAgICB1cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCSAgICAgIFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSwKKwkJCSAgICAgIGtsc2lfMTA1X3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJCQkgICAgICBwb3J0KTsKKworCQkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgYnVsayBwb3J0ICovCisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXN1bHQpIHsKKwkJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQkJZ290byBleGl0OworCQl9CisJCWJ1ZiArPSBzaXplOworCQlieXRlc19zZW50ICs9IHNpemU7CisJCWNvdW50IC09IHNpemU7CisJfQorZXhpdDoKKwkvKiBsb2NrbGVzcywgYnV0IGl0J3MgZm9yIGRlYnVnIGluZm8gb25seS4uLiAqLworCXByaXYtPmJ5dGVzX291dCs9Ynl0ZXNfc2VudDsKKworCXJldHVybiBieXRlc19zZW50OwkvKiB0aGF0J3MgaG93IG11Y2ggd2Ugd3JvdGUgKi8KK30gLyoga2xzaV8xMDVfd3JpdGUgKi8KKworc3RhdGljIHZvaWQga2xzaV8xMDVfd3JpdGVfYnVsa19jYWxsYmFjayAoIHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywKKwkJICAgIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGZyb20gZ2VuZXJpY193cml0ZV9idWxrX2NhbGxiYWNrICovCisJc2NoZWR1bGVfd29yaygmcG9ydC0+d29yayk7Cit9IC8qIGtsc2lfMTA1X3dyaXRlX2J1bGtfY29tcGxldGlvbl9jYWxsYmFjayAqLworCisKKy8qIHJldHVybiBudW1iZXIgb2YgY2hhcmFjdGVycyBjdXJyZW50bHkgaW4gdGhlIHdyaXRpbmcgcHJvY2VzcyAqLworc3RhdGljIGludCBrbHNpXzEwNV9jaGFyc19pbl9idWZmZXIgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJaW50IGNoYXJzID0gMDsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBrbHNpXzEwNV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1VSQlM7ICsraSkgeworCQlpZiAocHJpdi0+d3JpdGVfdXJiX3Bvb2xbaV0tPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJCWNoYXJzICs9IFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fRlVOQ1RJT05fXywgY2hhcnMpOworCXJldHVybiAoY2hhcnMpOworfQorCitzdGF0aWMgaW50IGtsc2lfMTA1X3dyaXRlX3Jvb20gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKwlpbnQgcm9vbSA9IDA7CisJc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1VSQlM7ICsraSkgeworCQlpZiAocHJpdi0+d3JpdGVfdXJiX3Bvb2xbaV0tPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpIHsKKwkJCXJvb20gKz0gVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19GVU5DVElPTl9fLCByb29tKTsKKwlyZXR1cm4gKHJvb20pOworfQorCisKKworc3RhdGljIHZvaWQga2xzaV8xMDVfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qga2xzaV8xMDVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgcmM7CisKKyAgICAgICAgZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiBUaGUgdXJiIG1pZ2h0IGhhdmUgYmVlbiBraWxsZWQuICovCisgICAgICAgIGlmICh1cmItPnN0YXR1cykgeworICAgICAgICAgICAgICAgIGRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLAorCQkgICAgdXJiLT5zdGF0dXMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCQorCS8qIFRoZSBkYXRhIHJlY2VpdmVkIGlzIGFnYWluIHByZWNlZGVkIGJ5IGEgbGVuZ3RoIGRvdWJsZS1ieXRlIGluIExTQi0KKwkgKiBmaXJzdCBvcmRlciAoc2VlIGtsc2lfMTA1X3dyaXRlKCkgKQorCSAqLworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPT0gMCkgeworCQkvKiBlbXB0eSB1cmJzIHNlZW0gdG8gaGFwcGVuLCB3ZSBpZ25vcmUgdGhlbSAqLworCQkvKiBkYmcoIiVzIC0gZW10cHkgVVJCIiwgX19GVU5DVElPTl9fKTsgKi8KKwkgICAgICAgOworCX0gZWxzZSBpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDw9IDIpIHsKKwkJZGJnKCIlcyAtIHNpemUgJWQgVVJCIG5vdCB1bmRlcnN0b29kIiwgX19GVU5DVElPTl9fLAorCQkgICAgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sCisJCQkJICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKwl9IGVsc2UgeworCQlpbnQgaTsKKwkJaW50IGJ5dGVzX3NlbnQgPSAoKF9fdTggKikgZGF0YSlbMF0gKworCQkJCSAoKHVuc2lnbmVkIGludCkgKChfX3U4ICopIGRhdGEpWzFdIDw8IDgpOworCQl0dHkgPSBwb3J0LT50dHk7CisJCS8qIHdlIHNob3VsZCBpbW1lZGlhdGVseSByZXN1Ym1pdCB0aGUgVVJCLCBiZWZvcmUgYXR0ZW1wdGluZworCQkgKiB0byBwYXNzIHRoZSBkYXRhIG9uIHRvIHRoZSB0dHkgbGF5ZXIuIEJ1dCB0aGF0IG5lZWRzIGxvY2tpbmcKKwkJICogYWdhaW5zdCByZS1lbnRyeSBhbiB0aGVuIG1peGVkLXVwIGRhdGEgYmVjYXVzZSBvZgorCQkgKiBpbnRlcm1peGVkIHR0eV9mbGlwX2J1ZmZlcl9wdXNoKClzCisJCSAqIEZJWE1FCisJCSAqLyAKKwkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sCisJCQkJICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKworCQlpZiAoYnl0ZXNfc2VudCArIDIgPiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJCWRiZygiJXMgLSB0cnlpbmcgdG8gcmVhZCBtb3JlIGRhdGEgdGhhbiBhdmFpbGFibGUiCisJCQkgICAgIiAoJWQgdnMuICVkKSIsIF9fRlVOQ1RJT05fXywKKwkJCSAgICBieXRlc19zZW50KzIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCQkvKiBjYXAgYXQgaW1wbGllZCBsaW1pdCAqLworCQkJYnl0ZXNfc2VudCA9IHVyYi0+YWN0dWFsX2xlbmd0aCAtIDI7CisJCX0KKworCQlmb3IgKGkgPSAyOyBpIDwgMitieXRlc19zZW50OyBpKyspIHsKKwkJCS8qIGlmIHdlIGluc2VydCBtb3JlIHRoYW4gVFRZX0ZMSVBCVUZfU0laRSBjaGFyYWN0ZXJzLAorCQkJICogd2UgZHJvcCB0aGVtLiAqLworCQkJaWYodHR5LT5mbGlwLmNvdW50ID49IFRUWV9GTElQQlVGX1NJWkUpIHsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJfQorCQkJLyogdGhpcyBkb2Vzbid0IGFjdHVhbGx5IHB1c2ggdGhlIGRhdGEgdGhyb3VnaCB1bmxlc3MgCisJCQkgKiB0dHktPmxvd19sYXRlbmN5IGlzIHNldCAqLworCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCAoKF9fdTgqKSBkYXRhKVtpXSwgMCk7CisJCX0KKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKworCQkvKiBhZ2FpbiBsb2NrbGVzcywgYnV0IGRlYnVnIGluZm8gb25seSAqLworCQlwcml2LT5ieXRlc19pbiArPSBieXRlc19zZW50OworCX0KKwkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgICovCisJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJICAgICAgdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCSAgICAgIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJICAgICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJICAgICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCSAgICAgIGtsc2lfMTA1X3JlYWRfYnVsa19jYWxsYmFjaywKKwkJICAgICAgcG9ydCk7CisJcmMgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJjKQorCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJjKTsKK30gLyoga2xzaV8xMDVfcmVhZF9idWxrX2NhbGxiYWNrICovCisKKworc3RhdGljIHZvaWQga2xzaV8xMDVfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJICBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7CisJc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgaW50IGlmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnOworCXVuc2lnbmVkIGludCBvbGRfaWZsYWcgPSBvbGRfdGVybWlvcy0+Y19pZmxhZzsKKwl1bnNpZ25lZCBpbnQgY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJdW5zaWduZWQgaW50IG9sZF9jZmxhZyA9IG9sZF90ZXJtaW9zLT5jX2NmbGFnOworCXN0cnVjdCBrbHNpXzEwNV9wb3J0X3NldHRpbmdzIGNmZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCQorCS8qIGxvY2sgd2hpbGUgd2UgYXJlIG1vZGlmeWluZyB0aGUgc2V0dGluZ3MgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkKKwkvKgorCSAqIFVwZGF0ZSBiYXVkIHJhdGUKKwkgKi8KKwlpZiggKGNmbGFnICYgQ0JBVUQpICE9IChvbGRfY2ZsYWcgJiBDQkFVRCkgKSB7CisJICAgICAgICAvKiByZWFzc2VydCBEVFIgYW5kIChtYXliZSkgUlRTIG9uIHRyYW5zaXRpb24gZnJvbSBCMCAqLworCQlpZiggKG9sZF9jZmxhZyAmIENCQVVEKSA9PSBCMCApIHsKKwkJCWRiZygiJXM6IGJhdWQgd2FzIEIwIiwgX19GVU5DVElPTl9fKTsKKyNpZiAwCisJCQlwcml2LT5jb250cm9sX3N0YXRlIHw9IFRJT0NNX0RUUjsKKwkJCS8qIGRvbid0IHNldCBSVFMgaWYgdXNpbmcgaGFyZHdhcmUgZmxvdyBjb250cm9sICovCisJCQlpZiAoIShvbGRfY2ZsYWcgJiBDUlRTQ1RTKSkgeworCQkJCXByaXYtPmNvbnRyb2xfc3RhdGUgfD0gVElPQ01fUlRTOworCQkJfQorCQkJbWN0X3UyMzJfc2V0X21vZGVtX2N0cmwoc2VyaWFsLCBwcml2LT5jb250cm9sX3N0YXRlKTsKKyNlbmRpZgorCQl9CisJCQorCQlzd2l0Y2goY2ZsYWcgJiBDQkFVRCkgeworCQljYXNlIEIwOiAvKiBoYW5kbGVkIGJlbG93ICovCisJCQlicmVhazsKKwkJY2FzZSBCMTIwMDogcHJpdi0+Y2ZnLmJhdWRyYXRlID0ga2w1a3VzYjEwNWFfc2lvX2IxMjAwOworCQkJYnJlYWs7CisJCWNhc2UgQjI0MDA6IHByaXYtPmNmZy5iYXVkcmF0ZSA9IGtsNWt1c2IxMDVhX3Npb19iMjQwMDsKKwkJCWJyZWFrOworCQljYXNlIEI0ODAwOiBwcml2LT5jZmcuYmF1ZHJhdGUgPSBrbDVrdXNiMTA1YV9zaW9fYjQ4MDA7CisJCQlicmVhazsKKwkJY2FzZSBCOTYwMDogcHJpdi0+Y2ZnLmJhdWRyYXRlID0ga2w1a3VzYjEwNWFfc2lvX2I5NjAwOworCQkJYnJlYWs7CisJCWNhc2UgQjE5MjAwOiBwcml2LT5jZmcuYmF1ZHJhdGUgPSBrbDVrdXNiMTA1YV9zaW9fYjE5MjAwOworCQkJYnJlYWs7CisJCWNhc2UgQjM4NDAwOiBwcml2LT5jZmcuYmF1ZHJhdGUgPSBrbDVrdXNiMTA1YV9zaW9fYjM4NDAwOworCQkJYnJlYWs7CisJCWNhc2UgQjU3NjAwOiBwcml2LT5jZmcuYmF1ZHJhdGUgPSBrbDVrdXNiMTA1YV9zaW9fYjU3NjAwOworCQkJYnJlYWs7CisJCWNhc2UgQjExNTIwMDogcHJpdi0+Y2ZnLmJhdWRyYXRlID0ga2w1a3VzYjEwNWFfc2lvX2IxMTUyMDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVycigiS0xTSSBVU0ItPlNlcmlhbCBjb252ZXJ0ZXI6IgorCQkJICAgICIgdW5zdXBwb3J0ZWQgYmF1ZHJhdGUgcmVxdWVzdCwgdXNpbmcgZGVmYXVsdCIKKwkJCSAgICAiIG9mIDk2MDAiKTsKKwkJCXByaXYtPmNmZy5iYXVkcmF0ZSA9IGtsNWt1c2IxMDVhX3Npb19iOTYwMDsKKwkJCWJyZWFrOworCQl9CisJCWlmICgoY2ZsYWcgJiBDQkFVRCkgPT0gQjAgKSB7CisJCQlkYmcoIiVzOiBiYXVkIGlzIEIwIiwgX19GVU5DVElPTl9fKTsKKwkJCS8qIERyb3AgUlRTIGFuZCBEVFIgKi8KKwkJCS8qIG1heWJlIHRoaXMgc2hvdWxkIGJlIHNpbXVsYXRlZCBieSBzZW5kaW5nIHJlYWQKKwkJCSAqIGRpc2FibGUgYW5kIHJlYWQgZW5hYmxlIG1lc3NhZ2VzPworCQkJICovCisJCQk7CisjaWYgMAorCQkJcHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+KFRJT0NNX0RUUiB8IFRJT0NNX1JUUyk7CisgICAgICAgIAkJbWN0X3UyMzJfc2V0X21vZGVtX2N0cmwoc2VyaWFsLCBwcml2LT5jb250cm9sX3N0YXRlKTsKKyNlbmRpZgorCQl9CisJfQorCisJaWYgKChjZmxhZyAmIENTSVpFKSAhPSAob2xkX2NmbGFnICYgQ1NJWkUpKSB7CisJCS8qIHNldCB0aGUgbnVtYmVyIG9mIGRhdGEgYml0cyAqLworCQlzd2l0Y2ggKGNmbGFnICYgQ1NJWkUpIHsKKwkJY2FzZSBDUzU6CisJCQlkYmcoIiVzIC0gNSBiaXRzL2J5dGUgbm90IHN1cHBvcnRlZCIsIF9fRlVOQ1RJT05fXyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIDsKKwkJY2FzZSBDUzY6CisJCQlkYmcoIiVzIC0gNiBiaXRzL2J5dGUgbm90IHN1cHBvcnRlZCIsIF9fRlVOQ1RJT05fXyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIDsKKwkJY2FzZSBDUzc6CisJCQlwcml2LT5jZmcuZGF0YWJpdHMgPSBrbDVrdXNiMTA1YV9kdGJfNzsKKwkJCWJyZWFrOworCQljYXNlIENTODoKKwkJCXByaXYtPmNmZy5kYXRhYml0cyA9IGtsNWt1c2IxMDVhX2R0Yl84OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnIoIkNTSVpFIHdhcyBub3QgQ1M1LUNTOCwgdXNpbmcgZGVmYXVsdCBvZiA4Iik7CisJCQlwcml2LT5jZmcuZGF0YWJpdHMgPSBrbDVrdXNiMTA1YV9kdGJfODsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBVcGRhdGUgbGluZSBjb250cm9sIHJlZ2lzdGVyIChMQ1IpCisJICovCisJaWYgKChjZmxhZyAmIChQQVJFTkJ8UEFST0REKSkgIT0gKG9sZF9jZmxhZyAmIChQQVJFTkJ8UEFST0REKSkKKwkgICAgfHwgKGNmbGFnICYgQ1NUT1BCKSAhPSAob2xkX2NmbGFnICYgQ1NUT1BCKSApIHsKKwkJCisjaWYgMAorCQlwcml2LT5sYXN0X2xjciA9IDA7CisKKwkJLyogc2V0IHRoZSBwYXJpdHkgKi8KKwkJaWYgKGNmbGFnICYgUEFSRU5CKQorCQkJcHJpdi0+bGFzdF9sY3IgfD0gKGNmbGFnICYgUEFST0REKSA/CisJCQkJTUNUX1UyMzJfUEFSSVRZX09ERCA6IE1DVF9VMjMyX1BBUklUWV9FVkVOOworCQllbHNlCisJCQlwcml2LT5sYXN0X2xjciB8PSBNQ1RfVTIzMl9QQVJJVFlfTk9ORTsKKworCQkvKiBzZXQgdGhlIG51bWJlciBvZiBzdG9wIGJpdHMgKi8KKwkJcHJpdi0+bGFzdF9sY3IgfD0gKGNmbGFnICYgQ1NUT1BCKSA/CisJCQlNQ1RfVTIzMl9TVE9QX0JJVFNfMiA6IE1DVF9VMjMyX1NUT1BfQklUU18xOworCisJCW1jdF91MjMyX3NldF9saW5lX2N0cmwoc2VyaWFsLCBwcml2LT5sYXN0X2xjcik7CisjZW5kaWYKKwkJOworCX0KKwkKKwkvKgorCSAqIFNldCBmbG93IGNvbnRyb2w6IHdlbGwsIEkgZG8gbm90IHJlYWxseSBub3cgaG93IHRvIGhhbmRsZSBEVFIvUlRTLgorCSAqIEp1c3QgZG8gd2hhdCB3ZSBoYXZlIHNlZW4gd2l0aCBTbmlmZlVTQiBvbiBXaW45OC4KKwkgKi8KKwlpZiggKGlmbGFnICYgSVhPRkYpICE9IChvbGRfaWZsYWcgJiBJWE9GRikKKwkgICAgfHwgKGlmbGFnICYgSVhPTikgIT0gKG9sZF9pZmxhZyAmIElYT04pCisJICAgIHx8ICAoY2ZsYWcgJiBDUlRTQ1RTKSAhPSAob2xkX2NmbGFnICYgQ1JUU0NUUykgKSB7CisJCQorCQkvKiBEcm9wIERUUi9SVFMgaWYgbm8gZmxvdyBjb250cm9sIG90aGVyd2lzZSBhc3NlcnQgKi8KKyNpZiAwCisJCWlmICgoaWZsYWcgJiBJWE9GRikgfHwgKGlmbGFnICYgSVhPTikgfHwgKGNmbGFnICYgQ1JUU0NUUykgKQorCQkJcHJpdi0+Y29udHJvbF9zdGF0ZSB8PSBUSU9DTV9EVFIgfCBUSU9DTV9SVFM7CisJCWVsc2UKKwkJCXByaXYtPmNvbnRyb2xfc3RhdGUgJj0gfihUSU9DTV9EVFIgfCBUSU9DTV9SVFMpOworCQltY3RfdTIzMl9zZXRfbW9kZW1fY3RybChzZXJpYWwsIHByaXYtPmNvbnRyb2xfc3RhdGUpOworI2VuZGlmCisJCTsKKwl9CisJbWVtY3B5ICgmY2ZnLCAmcHJpdi0+Y2ZnLCBzaXplb2YoY2ZnKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkKKwkvKiBub3cgY29tbWl0IGNoYW5nZXMgdG8gZGV2aWNlICovCisJa2xzaV8xMDVfY2hnX3BvcnRfc2V0dGluZ3MocG9ydCwgJmNmZyk7Cit9IC8qIGtsc2lfMTA1X3NldF90ZXJtaW9zICovCisKKworI2lmIDAKK3N0YXRpYyB2b2lkIG1jdF91MjMyX2JyZWFrX2N0bCggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlICkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCBtY3RfdTIzMl9wcml2YXRlICpwcml2ID0gKHN0cnVjdCBtY3RfdTIzMl9wcml2YXRlICopcG9ydC0+cHJpdmF0ZTsKKwl1bnNpZ25lZCBjaGFyIGxjciA9IHByaXYtPmxhc3RfbGNyOworCisJZGJnKCIlc3N0YXRlPSVkIiwgX19GVU5DVElPTl9fLCBicmVha19zdGF0ZSk7CisKKwlpZiAoYnJlYWtfc3RhdGUpCisJCWxjciB8PSBNQ1RfVTIzMl9TRVRfQlJFQUs7CisKKwltY3RfdTIzMl9zZXRfbGluZV9jdHJsKHNlcmlhbCwgbGNyKTsKK30gLyogbWN0X3UyMzJfYnJlYWtfY3RsICovCisjZW5kaWYKKworc3RhdGljIGludCBrbHNpXzEwNV90aW9jbWdldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmM7CisJdW5zaWduZWQgbG9uZyBsaW5lX3N0YXRlOworCWRiZygiJXMgLSByZXF1ZXN0LCBqdXN0IGd1ZXNzaW5nIiwgX19GVU5DVElPTl9fKTsKKworCXJjID0ga2xzaV8xMDVfZ2V0X2xpbmVfc3RhdGUocG9ydCwgJmxpbmVfc3RhdGUpOworCWlmIChyYyA8IDApIHsKKwkJZXJyKCJSZWFkaW5nIGxpbmUgY29udHJvbCBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmMpOworCQkvKiBiZXR0ZXIgcmV0dXJuIHZhbHVlPyBFQUdBSU4/ICovCisJCXJldHVybiByYzsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT5saW5lX3N0YXRlID0gbGluZV9zdGF0ZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWRiZygiJXMgLSByZWFkIGxpbmUgc3RhdGUgMHglbHgiLCBfX0ZVTkNUSU9OX18sIGxpbmVfc3RhdGUpOworCXJldHVybiAoaW50KWxpbmVfc3RhdGU7Cit9CisKK3N0YXRpYyBpbnQga2xzaV8xMDVfdGlvY21zZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCWludCByZXR2YWwgPSAtRUlOVkFMOworCQorCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisvKiBpZiB0aGlzIGV2ZXIgZ2V0cyBpbXBsZW1lbnRlZCwgaXQgc2hvdWxkIGJlIGRvbmUgc29tZXRoaW5nIGxpa2UgdGhpczoKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCBrbHNpXzEwNV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNvbnRyb2w7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoc2V0ICYgVElPQ01fUlRTKQorCQlwcml2LT5jb250cm9sX3N0YXRlIHw9IFRJT0NNX1JUUzsKKwlpZiAoc2V0ICYgVElPQ01fRFRSKQorCQlwcml2LT5jb250cm9sX3N0YXRlIHw9IFRJT0NNX0RUUjsKKwlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpCisJCXByaXYtPmNvbnRyb2xfc3RhdGUgJj0gflRJT0NNX1JUUzsKKwlpZiAoY2xlYXIgJiBUSU9DTV9EVFIpCisJCXByaXYtPmNvbnRyb2xfc3RhdGUgJj0gflRJT0NNX0RUUjsKKwljb250cm9sID0gcHJpdi0+Y29udHJvbF9zdGF0ZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXJldHZhbCA9IG1jdF91MjMyX3NldF9tb2RlbV9jdHJsKHNlcmlhbCwgY29udHJvbCk7CisqLworCXJldHVybiByZXR2YWw7Cit9CisJCQkJCQorc3RhdGljIGludCBrbHNpXzEwNV9pb2N0bCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLAorCQkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdm9pZCBfX3VzZXIgKnVzZXJfYXJnID0gKHZvaWQgX191c2VyICopYXJnOworCQorCWRiZygiJXNjbWQ9MHgleCIsIF9fRlVOQ1RJT05fXywgY21kKTsKKworCS8qIEJhc2VkIG9uIGNvZGUgZnJvbSBhY20uYyBhbmQgb3RoZXJzICovCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFRJT0NNSVdBSVQ6CisJCS8qIHdhaXQgZm9yIGFueSBvZiB0aGUgNCBtb2RlbSBpbnB1dHMgKERDRCxSSSxEU1IsQ1RTKSovCisJCS8qIFRPRE8gKi8KKwkJZGJnKCIlcyAtIFRJT0NNSVdBSVQgbm90IGhhbmRsZWQiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCWNhc2UgVElPQ0dJQ09VTlQ6CisJCS8qIHJldHVybiBjb3VudCBvZiBtb2RlbWxpbmUgdHJhbnNpdGlvbnMgKi8KKwkJLyogVE9ETyAqLworCQlkYmcoIiVzIC0gVElPQ0dJQ09VTlQgbm90IGhhbmRsZWQiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCWNhc2UgVENHRVRTOgorCQkvKiByZXR1cm4gY3VycmVudCBpbmZvIHRvIGNhbGxlciAqLworCQlkYmcoIiVzIC0gVENHRVRTIGRhdGEgZmFrZWQvaW5jb21wbGV0ZSIsIF9fRlVOQ1RJT05fXyk7CisKKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1c2VyX2FyZywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoa2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW9zKChzdHJ1Y3QgdGVybWlvcyBfX3VzZXIgKilhcmcsCisJCQkJCQkgICAmcHJpdi0+dGVybWlvcykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisJY2FzZSBUQ1NFVFM6CisJCS8qIHNldCBwb3J0IHRlcm1pb3MgdG8gdGhlIG9uZSBnaXZlbiBieSB0aGUgdXNlciAqLworCQlkYmcoIiVzIC0gVENTRVRTIG5vdCBoYW5kbGVkIiwgX19GVU5DVElPTl9fKTsKKworCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdXNlcl9hcmcsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvcygmcHJpdi0+dGVybWlvcywKKwkJCQkJCSAgIChzdHJ1Y3QgdGVybWlvcyBfX3VzZXIgKilhcmcpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWtsc2lfMTA1X3NldF90ZXJtaW9zKHBvcnQsICZwcml2LT50ZXJtaW9zKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBUQ1NFVFNXOiB7CisJCS8qIHNldCBwb3J0IHRlcm1pb3MgYW5kIHRyeSB0byB3YWl0IGZvciBjb21wbGV0aW9uIG9mIGxhc3QKKwkJICogd3JpdGUgb3BlcmF0aW9uICovCisJCS8qIFdlIGd1ZXNzIGhlcmUuIElmIHRoZXJlIGFyZSBub3QgdG9vIG1hbnkgd3JpdGUgdXJicworCQkgKiBvdXRzdGFuZGluZywgd2UgbGllLiAqLworCQkvKiB3aGF0IGlzIHRoZSByaWdodCB3YXkgdG8gd2FpdCBoZXJlPyBzY2hlZHVsZSgpID8gKi8KKwkgICAgICAgIC8qCisJCXdoaWxlIChrbHNpXzEwNV9jaGFyc19pbl9idWZmZXIocG9ydCkgPiAoTlVNX1VSQlMgLyA0ICkgKiBVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUpCisJCQkgICAgc2NoZWR1bGUoKTsKKwkJICovCisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJCSAgICAgIH0KKwlkZWZhdWx0OgorCQlkYmcoIiVzOiBhcmcgbm90IHN1cHBvcnRlZCAtIDB4JTA0eCIsIF9fRlVOQ1RJT05fXyxjbWQpOworCQlyZXR1cm4oLUVOT0lPQ1RMQ01EKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfSAvKiBrbHNpXzEwNV9pb2N0bCAqLworCitzdGF0aWMgdm9pZCBrbHNpXzEwNV90aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworfQorCitzdGF0aWMgdm9pZCBrbHNpXzEwNV91bnRocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCkKKwkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywKKwkJICAgIHJlc3VsdCk7Cit9CisKKworCitzdGF0aWMgaW50IF9faW5pdCBrbHNpXzEwNV9pbml0ICh2b2lkKQoreworCWludCByZXR2YWw7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3Rlcigma2w1a3VzYjEwNWRfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigma2w1a3VzYjEwNWRfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisKKwlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIDA7CitmYWlsZWRfdXNiX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigma2w1a3VzYjEwNWRfZGV2aWNlKTsKK2ZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOgorCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IGtsc2lfMTA1X2V4aXQgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIgKCZrbDVrdXNiMTA1ZF9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmtsNWt1c2IxMDVkX2RldmljZSk7Cit9CisKKworbW9kdWxlX2luaXQgKGtsc2lfMTA1X2luaXQpOworbW9kdWxlX2V4aXQgKGtsc2lfMTA1X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7IAorCisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImVuYWJsZSBleHRlbnNpdmUgZGVidWdnaW5nIG1lc3NhZ2VzIik7CisKKy8qIHZpbTogc2V0IHN0cz04IHRzPTggc3c9ODogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMzFkOWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgdGhlIEtMU0kgS0w1S1VTQjEwNSBzZXJpYWwgcG9ydCBhZGFwdGVyCisgKi8KKworLyogdmVuZG9yL3Byb2R1Y3QgcGFpcnMgdGhhdCBhcmUga25vd24gdG8gY29udGFpbiB0aGlzIGNoaXBzZXQgKi8KKyNkZWZpbmUgUEFMTUNPTk5FQ1RfVklECQkweDA4MzAKKyNkZWZpbmUgUEFMTUNPTk5FQ1RfUElECQkweDAwODAKKworI2RlZmluZSBLTFNJX1ZJRAkJMHgwNWU5CisjZGVmaW5lIEtMU0lfS0w1S1VTQjEwNURfUElECTB4MDBjMAorCisvKiBWZW5kb3IgY29tbWFuZHM6ICovCisKKworLyogcG9ydCB0YWJsZSAtLSB0aGUgY2hpcCBzdXBwb3J0cyB1cCB0byA0IGNoYW5uZWxzICovCisKKy8qIGJhdWQgcmF0ZXMgKi8KKworZW51bSB7CisgIGtsNWt1c2IxMDVhX3Npb19iMTE1MjAwID0gMCwKKyAga2w1a3VzYjEwNWFfc2lvX2I1NzYwMCAgPSAxLAorICBrbDVrdXNiMTA1YV9zaW9fYjM4NDAwICA9IDIsCisgIGtsNWt1c2IxMDVhX3Npb19iMTkyMDAgID0gNCwKKyAga2w1a3VzYjEwNWFfc2lvX2IxNDQwMCAgPSA1LAorICBrbDVrdXNiMTA1YV9zaW9fYjk2MDAgICA9IDYsCisgIGtsNWt1c2IxMDVhX3Npb19iNDgwMCAgID0gOCwgICAvKiB1bmNoZWNrZWQgKi8KKyAga2w1a3VzYjEwNWFfc2lvX2IyNDAwICAgPSA5LCAgIC8qIHVuY2hlY2tlZCAqLworICBrbDVrdXNiMTA1YV9zaW9fYjEyMDAgICA9IDB4YSwgIC8qIHVuY2hlY2tlZCAqLworICBrbDVrdXNiMTA1YV9zaW9fYjYwMCAgICA9IDB4YiAgIC8qIHVuY2hlY2tlZCAqLworfTsKKworLyogZGF0YSBiaXRzICovCisjZGVmaW5lIGtsNWt1c2IxMDVhX2R0Yl83ICAgNworI2RlZmluZSBrbDVrdXNiMTA1YV9kdGJfOCAgIDgKKworCisKKy8qIHJlcXVlc3RzOiAqLworI2RlZmluZSBLTDVLVVNCMTA1QV9TSU9fU0VUX0RBVEEgIDEKKyNkZWZpbmUgS0w1S1VTQjEwNUFfU0lPX1BPTEwgICAgICAyCisjZGVmaW5lIEtMNUtVU0IxMDVBX1NJT19DT05GSUdVUkUgICAgICAzCisvKiB2YWx1ZXMgdXNlZCBmb3IgcmVxdWVzdCBLTDVLVVNCMTA1QV9TSU9fQ09ORklHVVJFICovCisjZGVmaW5lIEtMNUtVU0IxMDVBX1NJT19DT05GSUdVUkVfUkVBRF9PTiAgICAgIDMKKyNkZWZpbmUgS0w1S1VTQjEwNUFfU0lPX0NPTkZJR1VSRV9SRUFEX09GRiAgICAgMgorCisvKiBJbnRlcnByZXRhdGlvbiBvZiBtb2RlbSBzdGF0dXMgbGluZXMgKi8KKy8qIFRoZXNlIG5lZWQgc29ydGluZyBvdXQgYnkgaW5kaXZpZHVhbGx5IGNvbm5lY3RpbmcgcGlucyBhbmQgY2hlY2tpbmcKKyAqIHJlc3VsdHMuIEZJWE1FIQorICogV2hlbiBkYXRhIGlzIGJlaW5nIHNlbnQgd2Ugc2VlIDB4MzAgaW4gdGhlIGxvd2VyIGJ5dGU7IHRoaXMgbXVzdAorICogY29udGFpbiBEU1IgYW5kIENUUyAuLi4KKyAqLworI2RlZmluZSBLTDVLVVNCMTA1QV9EU1IJCQkoKDE8PDQpIHwgKDE8PDUpKQorI2RlZmluZSBLTDVLVVNCMTA1QV9DVFMJCQkoKDE8PDUpIHwgKDE8PDQpKQorCisjZGVmaW5lIEtMNUtVU0IxMDVBX1dBTlRTX1RPX1NFTkQJMHgzMAorLy8jZGVmaW5lIEtMNUtVU0IxMDVBX0RUUgkJCS8qIERhdGEgVGVybWluYWwgUmVhZHkgKi8KKy8vI2RlZmluZSBLTDVLVVNCMTA1QV9DVFMJCQkvKiBDbGVhciBUbyBTZW5kICovCisvLyNkZWZpbmUgS0w1S1VTQjEwNUFfQ0QJCQkvKiBDYXJyaWVyIERldGVjdCAqLworLy8jZGVmaW5lIEtMNUtVU0IxMDVBX0RTUgkJCS8qIERhdGEgU2V0IFJlYWR5ICovCisvLyNkZWZpbmUgS0w1S1VTQjEwNUFfUnhECQkJLyogUmVjZWl2ZSBwaW4gKi8KKworLy8jZGVmaW5lIEtMNUtVU0IxMDVBX0xFCisvLyNkZWZpbmUgS0w1S1VTQjEwNUFfUlRTCQkKKy8vI2RlZmluZSBLTDVLVVNCMTA1QV9TVAkJCisvLyNkZWZpbmUgS0w1S1VTQjEwNUFfU1IJCQorLy8jZGVmaW5lIEtMNUtVU0IxMDVBX1JJCQkJLyogUmluZyBJbmRpY2F0b3IgKi8KKworLyogdmltOiBzZXQgdHM9OCBzdHM9ODogKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tvYmlsX3NjdC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tvYmlsX3NjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNGM5OGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMKQEAgLTAsMCArMSw3NzQgQEAKKy8qCisgKiAgS09CSUwgVVNCIFNtYXJ0IENhcmQgVGVybWluYWwgRHJpdmVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMiAgS09CSUwgU3lzdGVtcyBHbWJIIAorICogIEF1dGhvcjogVGhvbWFzIFdhaHJlbmJydWNoCisgKgorICogIENvbnRhY3Q6IGxpbnV4dXNiQGtvYmlsLmRlCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBsYXJnZWx5IGRlcml2ZWQgZnJvbSB3b3JrIGJ5IHRoZSBsaW51eC11c2IgZ3JvdXAKKyAqICBhbmQgYXNzb2NpYXRlZCBzb3VyY2UgZmlsZXMuICBQbGVhc2Ugc2VlIHRoZSB1c2Ivc2VyaWFsIGZpbGVzIGZvcgorICogIGluZGl2aWR1YWwgY3JlZGl0cyBhbmQgY29weXJpZ2h0cy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhhbmtzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pIGZvciBoaXMgaGVscCBhbmQKKyAqICBwYXRpZW5jZS4KKyAqCisgKiBTdXBwb3J0ZWQgcmVhZGVyczogVVNCIFRXSU4sIEtBQU4gU3RhbmRhcmQgUGx1cyBhbmQgU2VjT1ZJRCBSZWFkZXIgUGx1cworICogKEFkYXB0ZXIgSyksIEIxIFByb2Zlc3Npb25hbCBhbmQgS0FBTiBQcm9mZXNzaW9uYWwgKEFkYXB0ZXIgQikKKyAqIAorICogKDIxLzA1LzIwMDQpIHR3CisgKiAgICAgIEZpeCBidWcgd2l0aCBQJ24nUCByZWFkZXJzCisgKgorICogKDI4LzA1LzIwMDMpIHR3CisgKiAgICAgIEFkZCBzdXBwb3J0IGZvciBLQUFOIFNJTQorICoKKyAqICgxMi8wOS8yMDAyKSB0dworICogICAgICBBZGFwdGVkIHRvIDIuNS4KKyAqCisgKiAoMTEvMDgvMjAwMikgdHcKKyAqICAgICAgSW5pdGlhbCB2ZXJzaW9uLgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisjaW5jbHVkZSAia29iaWxfc2N0LmgiCisKK3N0YXRpYyBpbnQgZGVidWc7CisKKy8qIFZlcnNpb24gSW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjIxLzA1LzIwMDQiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIktPQklMIFN5c3RlbXMgR21iSCAtIGh0dHA6Ly93d3cua29iaWwuY29tIgorI2RlZmluZSBEUklWRVJfREVTQyAiS09CSUwgVVNCIFNtYXJ0IENhcmQgVGVybWluYWwgRHJpdmVyIChleHBlcmltZW50YWwpIgorCisjZGVmaW5lIEtPQklMX1ZFTkRPUl9JRAkJCTB4MEQ0NgorI2RlZmluZSBLT0JJTF9BREFQVEVSX0JfUFJPRFVDVF9JRAkweDIwMTEKKyNkZWZpbmUgS09CSUxfQURBUFRFUl9LX1BST0RVQ1RfSUQJMHgyMDEyCisjZGVmaW5lIEtPQklMX1VTQlRXSU5fUFJPRFVDVF9JRAkweDAwNzgKKyNkZWZpbmUgS09CSUxfS0FBTl9TSU1fUFJPRFVDVF9JRCAgICAgICAweDAwODEKKworI2RlZmluZSBLT0JJTF9USU1FT1VUCQk1MDAKKyNkZWZpbmUgS09CSUxfQlVGX0xFTkdUSAkzMDAKKworCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCitzdGF0aWMgaW50ICBrb2JpbF9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIGtvYmlsX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIGtvYmlsX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIGtvYmlsX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50ICBrb2JpbF93cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgCisJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOworc3RhdGljIGludCAga29iaWxfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgIGtvYmlsX2lvY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIGludCAga29iaWxfdGlvY21nZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGludCAga29iaWxfdGlvY21zZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOworc3RhdGljIHZvaWQga29iaWxfcmVhZF9pbnRfY2FsbGJhY2soIHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MgKTsKK3N0YXRpYyB2b2lkIGtvYmlsX3dyaXRlX2NhbGxiYWNrKCBzdHJ1Y3QgdXJiICpwdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyApOworCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoS09CSUxfVkVORE9SX0lELCBLT0JJTF9BREFQVEVSX0JfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoS09CSUxfVkVORE9SX0lELCBLT0JJTF9BREFQVEVSX0tfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoS09CSUxfVkVORE9SX0lELCBLT0JJTF9VU0JUV0lOX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKEtPQklMX1ZFTkRPUl9JRCwgS09CSUxfS0FBTl9TSU1fUFJPRFVDVF9JRCkgfSwKKwl7IH0JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGtvYmlsX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkia29iaWwiLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGUsCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBrb2JpbF9kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiS09CSUwgVVNCIHNtYXJ0IGNhcmQgdGVybWluYWwiLAorCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX2luID0JCTAsCisJLm51bV9idWxrX291dCA9CQkwLAorCS5udW1fcG9ydHMgPQkJMSwKKwkuYXR0YWNoID0JCWtvYmlsX3N0YXJ0dXAsCisJLnNodXRkb3duID0JCWtvYmlsX3NodXRkb3duLAorCS5pb2N0bCA9CQlrb2JpbF9pb2N0bCwKKwkudGlvY21nZXQgPQkJa29iaWxfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0JCWtvYmlsX3Rpb2Ntc2V0LAorCS5vcGVuID0JCQlrb2JpbF9vcGVuLAorCS5jbG9zZSA9CQlrb2JpbF9jbG9zZSwKKwkud3JpdGUgPQkJa29iaWxfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJa29iaWxfd3JpdGVfcm9vbSwKKwkucmVhZF9pbnRfY2FsbGJhY2sgPQlrb2JpbF9yZWFkX2ludF9jYWxsYmFjaywKK307CisKKworc3RydWN0IGtvYmlsX3ByaXZhdGUgeworCWludCB3cml0ZV9pbnRfZW5kcG9pbnRfYWRkcmVzczsKKwlpbnQgcmVhZF9pbnRfZW5kcG9pbnRfYWRkcmVzczsKKwl1bnNpZ25lZCBjaGFyIGJ1ZltLT0JJTF9CVUZfTEVOR1RIXTsgLy8gYnVmZmVyIGZvciB0aGUgQVBEVSB0byBzZW5kCisJaW50IGZpbGxlZDsgIC8vIGluZGV4IG9mIHRoZSBsYXN0IGNoYXIgaW4gYnVmCisJaW50IGN1cl9wb3M7IC8vIGluZGV4IG9mIHRoZSBuZXh0IGNoYXIgdG8gc2VuZCBpbiBidWYKKwlfX3UxNiBkZXZpY2VfdHlwZTsKKwlpbnQgbGluZV9zdGF0ZTsKKwlzdHJ1Y3QgdGVybWlvcyBpbnRlcm5hbF90ZXJtaW9zOworfTsKKworCitzdGF0aWMgaW50IGtvYmlsX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IGk7CisJc3RydWN0IGtvYmlsX3ByaXZhdGUgKnByaXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqYWN0Y29uZmlnOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0c2V0dGluZzsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVuZHBvaW50OworCisJcHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrb2JpbF9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KXsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcHJpdi0+ZmlsbGVkID0gMDsKKwlwcml2LT5jdXJfcG9zID0gMDsKKwlwcml2LT5kZXZpY2VfdHlwZSA9IGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJcHJpdi0+bGluZV9zdGF0ZSA9IDA7CisKKwlzd2l0Y2ggKHByaXYtPmRldmljZV90eXBlKXsKKwljYXNlIEtPQklMX0FEQVBURVJfQl9QUk9EVUNUX0lEOgorCQlwcmludGsoS0VSTl9ERUJVRyAiS09CSUwgQjEgUFJPIC8gS0FBTiBQUk8gZGV0ZWN0ZWRcbiIpOworCQlicmVhazsKKwljYXNlIEtPQklMX0FEQVBURVJfS19QUk9EVUNUX0lEOgorCQlwcmludGsoS0VSTl9ERUJVRyAiS09CSUwgS0FBTiBTdGFuZGFyZCBQbHVzIC8gU2VjT1ZJRCBSZWFkZXIgUGx1cyBkZXRlY3RlZFxuIik7CisJCWJyZWFrOworCWNhc2UgS09CSUxfVVNCVFdJTl9QUk9EVUNUX0lEOgorCQlwcmludGsoS0VSTl9ERUJVRyAiS09CSUwgVVNCVFdJTiBkZXRlY3RlZFxuIik7CisJCWJyZWFrOworCWNhc2UgS09CSUxfS0FBTl9TSU1fUFJPRFVDVF9JRDoKKwkJcHJpbnRrKEtFUk5fREVCVUcgIktPQklMIEtBQU4gU0lNIGRldGVjdGVkXG4iKTsKKwkJYnJlYWs7CisJfQorCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0sIHByaXYpOworCisJLy8gc2VhcmNoIGZvciB0aGUgbmVjZXNzYXJ5IGVuZHBvaW50cworCXBkZXYgPSBzZXJpYWwtPmRldjsKKyAJYWN0Y29uZmlnID0gcGRldi0+YWN0Y29uZmlnOworIAlpbnRlcmZhY2UgPSBhY3Rjb25maWctPmludGVyZmFjZVswXTsKKwlhbHRzZXR0aW5nID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKKyAJZW5kcG9pbnQgPSBhbHRzZXR0aW5nLT5lbmRwb2ludDsKKyAgCisgCWZvciAoaSA9IDA7IGkgPCBhbHRzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHM7IGkrKykgeworCQllbmRwb2ludCA9ICZhbHRzZXR0aW5nLT5lbmRwb2ludFtpXTsKKwkJaWYgKCgoZW5kcG9pbnQtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9PVVQpICYmIAorIAkJICAgICgoZW5kcG9pbnQtPmRlc2MuYm1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkpIHsKKwkJIAlkYmcoIiVzIEZvdW5kIGludGVycnVwdCBvdXQgZW5kcG9pbnQuIEFkZHJlc3M6ICVkIiwgX19GVU5DVElPTl9fLCBlbmRwb2ludC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKKwkJIAlwcml2LT53cml0ZV9pbnRfZW5kcG9pbnRfYWRkcmVzcyA9IGVuZHBvaW50LT5kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisgCQl9CisgCQlpZiAoKChlbmRwb2ludC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKSA9PSBVU0JfRElSX0lOKSAmJiAKKyAJCSAgICAoKGVuZHBvaW50LT5kZXNjLmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpKSB7CisJCSAJZGJnKCIlcyBGb3VuZCBpbnRlcnJ1cHQgaW4gIGVuZHBvaW50LiBBZGRyZXNzOiAlZCIsIF9fRlVOQ1RJT05fXywgZW5kcG9pbnQtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyk7CisJCSAJcHJpdi0+cmVhZF9pbnRfZW5kcG9pbnRfYWRkcmVzcyA9IGVuZHBvaW50LT5kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJIAl9CisJfQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIGtvYmlsX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWludCBpOworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBzZXJpYWwtPnBvcnRbMF0tPm51bWJlcik7CisKKwlmb3IgKGk9MDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJd2hpbGUgKHNlcmlhbC0+cG9ydFtpXS0+b3Blbl9jb3VudCA+IDApIHsKKwkJCWtvYmlsX2Nsb3NlIChzZXJpYWwtPnBvcnRbaV0sIE5VTEwpOworCQl9CisJCWtmcmVlKHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pKTsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CisJfQorfQorCisKK3N0YXRpYyBpbnQga29iaWxfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IGksIHJlc3VsdCA9IDA7CisJc3RydWN0IGtvYmlsX3ByaXZhdGUgKnByaXY7CisJdW5zaWduZWQgY2hhciAqdHJhbnNmZXJfYnVmZmVyOworCWludCB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gODsKKwlpbnQgd3JpdGVfdXJiX3RyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSA4OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlwcml2LT5saW5lX3N0YXRlID0gMDsKKworCS8vIHNvbWVvbmUgc2V0cyB0aGUgZGV2IHRvIDAgaWYgdGhlIGNsb3NlIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQKKwlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKworCisJLyogZm9yY2UgbG93X2xhdGVuY3kgb24gc28gdGhhdCBvdXIgdHR5X3B1c2ggYWN0dWFsbHkgZm9yY2VzCisJICogdGhlIGRhdGEgdGhyb3VnaCwgb3RoZXJ3aXNlIGl0IGlzIHNjaGVkdWxlZCwgYW5kIHdpdGggaGlnaAorCSAqIGRhdGEgcmF0ZXMgKGxpa2Ugd2l0aCBPSENJKSBkYXRhIGNhbiBnZXQgbG9zdC4KKwkgKi8KKwlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gMTsKKworCS8vIHdpdGhvdXQgdGhpcywgZXZlcnkgcHVzaF90dHlfY2hhciBpcyBlY2hvZWQgOi0oICAKKwlwb3J0LT50dHktPnRlcm1pb3MtPmNfbGZsYWcgPSAwOworCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19sZmxhZyAmPSB+KElTSUcgfCBJQ0FOT04gfCBFQ0hPIHwgSUVYVEVOIHwgWENBU0UpOworCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19pZmxhZyA9IElHTkJSSyB8IElHTlBBUiB8IElYT0ZGOworCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19vZmxhZyAmPSB+T05MQ1I7IC8vIGRvIE5PVCB0cmFuc2xhdGUgQ1IgdG8gQ1ItTkwgKDB4MEEgLT4gMHgwQSAweDBEKQorCQorCS8vIHNldCB1cCBpbnRlcm5hbCB0ZXJtaW9zIHN0cnVjdHVyZSAKKwlwcml2LT5pbnRlcm5hbF90ZXJtaW9zLmNfaWZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfaWZsYWc7CisJcHJpdi0+aW50ZXJuYWxfdGVybWlvcy5jX29mbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX29mbGFnOworCXByaXYtPmludGVybmFsX3Rlcm1pb3MuY19jZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwlwcml2LT5pbnRlcm5hbF90ZXJtaW9zLmNfbGZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfbGZsYWc7CisKKwlmb3IgKGk9MDsgaTxOQ0NTOyBpKyspIHsKKwkJcHJpdi0+aW50ZXJuYWxfdGVybWlvcy5jX2NjW2ldID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NjW2ldOworCX0KKwkKKwkvLyBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRyYW5zZmVyIGJ1ZmZlcgorCXRyYW5zZmVyX2J1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIGttYWxsb2ModHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwgR0ZQX0tFUk5FTCk7ICAKKwlpZiAoISB0cmFuc2Zlcl9idWZmZXIpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfSBlbHNlIHsKKwkJbWVtc2V0KHRyYW5zZmVyX2J1ZmZlciwgMCwgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisJfQorCQorCS8vIGFsbG9jYXRlIHdyaXRlX3VyYgorCWlmICghcG9ydC0+d3JpdGVfdXJiKSB7IAorCQlkYmcoIiVzIC0gcG9ydCAlZCAgQWxsb2NhdGluZyBwb3J0LT53cml0ZV91cmIiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCXBvcnQtPndyaXRlX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7ICAKKwkJaWYgKCFwb3J0LT53cml0ZV91cmIpIHsKKwkJCWRiZygiJXMgLSBwb3J0ICVkIHVzYl9hbGxvY191cmIgZmFpbGVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQkJa2ZyZWUodHJhbnNmZXJfYnVmZmVyKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCisJLy8gYWxsb2NhdGUgbWVtb3J5IGZvciB3cml0ZV91cmIgdHJhbnNmZXIgYnVmZmVyCisJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIgPSAodW5zaWduZWQgY2hhciAqKSBrbWFsbG9jKHdyaXRlX3VyYl90cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlpZiAoISBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcikgeworCQlrZnJlZSh0cmFuc2Zlcl9idWZmZXIpOworCQl1c2JfZnJlZV91cmIocG9ydC0+d3JpdGVfdXJiKTsKKwkJcG9ydC0+d3JpdGVfdXJiID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfSAKKworCS8vIGdldCBoYXJkd2FyZSB2ZXJzaW9uCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKCBwb3J0LT5zZXJpYWwtPmRldiwgCisJCQkJICB1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDAgKSwgCisJCQkJICBTVVNCQ1JlcXVlc3RfR2V0TWlzYywKKwkJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCB8IFVTQl9ESVJfSU4sCisJCQkJICBTVVNCQ1JfTVNDX0dldEhXVmVyc2lvbiwKKwkJCQkgIDAsCisJCQkJICB0cmFuc2Zlcl9idWZmZXIsCisJCQkJICB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCSAgS09CSUxfVElNRU9VVAorCQkpOworCWRiZygiJXMgLSBwb3J0ICVkIFNlbmQgZ2V0X0hXX3ZlcnNpb24gVVJCIHJldHVybnM6ICVpIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIHJlc3VsdCk7CisJZGJnKCJIYXJ3YXJlIHZlcnNpb246ICVpLiVpLiVpIiwgdHJhbnNmZXJfYnVmZmVyWzBdLCB0cmFuc2Zlcl9idWZmZXJbMV0sIHRyYW5zZmVyX2J1ZmZlclsyXSApOworCQorCS8vIGdldCBmaXJtd2FyZSB2ZXJzaW9uCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKCBwb3J0LT5zZXJpYWwtPmRldiwgCisJCQkJICB1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDAgKSwgCisJCQkJICBTVVNCQ1JlcXVlc3RfR2V0TWlzYywKKwkJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCB8IFVTQl9ESVJfSU4sCisJCQkJICBTVVNCQ1JfTVNDX0dldEZXVmVyc2lvbiwKKwkJCQkgIDAsCisJCQkJICB0cmFuc2Zlcl9idWZmZXIsCisJCQkJICB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCSAgS09CSUxfVElNRU9VVAorCQkpOworCWRiZygiJXMgLSBwb3J0ICVkIFNlbmQgZ2V0X0ZXX3ZlcnNpb24gVVJCIHJldHVybnM6ICVpIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIHJlc3VsdCk7CisJZGJnKCJGaXJtd2FyZSB2ZXJzaW9uOiAlaS4laS4laSIsIHRyYW5zZmVyX2J1ZmZlclswXSwgdHJhbnNmZXJfYnVmZmVyWzFdLCB0cmFuc2Zlcl9idWZmZXJbMl0gKTsKKworCWlmIChwcml2LT5kZXZpY2VfdHlwZSA9PSBLT0JJTF9BREFQVEVSX0JfUFJPRFVDVF9JRCB8fCBwcml2LT5kZXZpY2VfdHlwZSA9PSBLT0JJTF9BREFQVEVSX0tfUFJPRFVDVF9JRCkgeworCQkvLyBTZXR0aW5nIEJhdWRyYXRlLCBQYXJpdHkgYW5kIFN0b3BiaXRzCisJCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyggcG9ydC0+c2VyaWFsLT5kZXYsIAorCQkJCQkgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCApLCAKKwkJCQkJICBTVVNCQ1JlcXVlc3RfU2V0QmF1ZFJhdGVQYXJpdHlBbmRTdG9wQml0cywKKwkJCQkJICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQgfCBVU0JfRElSX09VVCwKKwkJCQkJICBTVVNCQ1JfU0JSXzk2MDAgfCBTVVNCQ1JfU1BBU0JfRXZlblBhcml0eSB8IFNVU0JDUl9TUEFTQl8xU3RvcEJpdCwKKwkJCQkJICAwLAorCQkJCQkgIHRyYW5zZmVyX2J1ZmZlciwKKwkJCQkJICAwLAorCQkJCQkgIEtPQklMX1RJTUVPVVQKKwkJCSk7CisJCWRiZygiJXMgLSBwb3J0ICVkIFNlbmQgc2V0X2JhdWRyYXRlIFVSQiByZXR1cm5zOiAlaSIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCByZXN1bHQpOworCQkKKwkJLy8gcmVzZXQgYWxsIHF1ZXVlcworCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coIHBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJCQkJICB1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDAgKSwgCisJCQkJCSAgU1VTQkNSZXF1ZXN0X01pc2MsCisJCQkJCSAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UIHwgVVNCX0RJUl9PVVQsCisJCQkJCSAgU1VTQkNSX01TQ19SZXNldEFsbFF1ZXVlcywKKwkJCQkJICAwLAorCQkJCQkgIHRyYW5zZmVyX2J1ZmZlciwKKwkJCQkJICAwLAorCQkJCQkgIEtPQklMX1RJTUVPVVQKKwkJCSk7CisJCWRiZygiJXMgLSBwb3J0ICVkIFNlbmQgcmVzZXRfYWxsX3F1ZXVlcyBVUkIgcmV0dXJuczogJWkiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgcmVzdWx0KTsKKwl9CisJaWYgKHByaXYtPmRldmljZV90eXBlID09IEtPQklMX1VTQlRXSU5fUFJPRFVDVF9JRCB8fCBwcml2LT5kZXZpY2VfdHlwZSA9PSBLT0JJTF9BREFQVEVSX0JfUFJPRFVDVF9JRCB8fAorCSAgICBwcml2LT5kZXZpY2VfdHlwZSA9PSBLT0JJTF9LQUFOX1NJTV9QUk9EVUNUX0lEKSB7CisJCS8vIHN0YXJ0IHJlYWRpbmcgKEFkYXB0ZXIgQiAnY2F1c2UgUE5QIHN0cmluZykKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIoIHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9BVE9NSUMgICk7IAorCQlkYmcoIiVzIC0gcG9ydCAlZCBTZW5kIHJlYWQgVVJCIHJldHVybnM6ICVpIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIHJlc3VsdCk7CisJfQorCisJa2ZyZWUodHJhbnNmZXJfYnVmZmVyKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBrb2JpbF9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAocG9ydC0+d3JpdGVfdXJiKSB7CisJCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOworCQl1c2JfZnJlZV91cmIoIHBvcnQtPndyaXRlX3VyYiApOworCQlwb3J0LT53cml0ZV91cmIgPSBOVUxMOworCX0KKwlpZiAocG9ydC0+aW50ZXJydXB0X2luX3VyYikKKwkJdXNiX2tpbGxfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIpOworfQorCisKK3N0YXRpYyB2b2lkIGtvYmlsX3JlYWRfaW50X2NhbGxiYWNrKCBzdHJ1Y3QgdXJiICpwdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgaTsKKwlpbnQgcmVzdWx0OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSBwdXJiLT5jb250ZXh0OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKy8vCWNoYXIgKmRiZ19kYXRhOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAocHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBwb3J0ICVkIFJlYWQgaW50IHN0YXR1cyBub3QgemVybzogJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgcHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKwkKKwl0dHkgPSBwb3J0LT50dHk7IAorCWlmIChwdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCQorCQkvLyBCRUdJTiBERUJVRworCQkvKgorCQkgIGRiZ19kYXRhID0gKHVuc2lnbmVkIGNoYXIgKikga21hbGxvYygoMyAqICBwdXJiLT5hY3R1YWxfbGVuZ3RoICsgMTApICogc2l6ZW9mKGNoYXIpLCBHRlBfS0VSTkVMKTsKKwkJICBpZiAoISBkYmdfZGF0YSkgeworCQkgIHJldHVybjsKKwkJICB9CisJCSAgbWVtc2V0KGRiZ19kYXRhLCAwLCAoMyAqICBwdXJiLT5hY3R1YWxfbGVuZ3RoICsgMTApKTsKKwkJICBmb3IgKGkgPSAwOyBpIDwgcHVyYi0+YWN0dWFsX2xlbmd0aDsgaSsrKSB7IAorCQkgIHNwcmludGYoZGJnX2RhdGEgKzMqaSwgIiUwMlggIiwgZGF0YVtpXSk7IAorCQkgIH0KKwkJICBkYmcoIiA8LS0gJXMiLCBkYmdfZGF0YSApOworCQkgIGtmcmVlKGRiZ19kYXRhKTsKKwkJKi8KKwkJLy8gRU5EIERFQlVHCisKKwkJZm9yIChpID0gMDsgaSA8IHB1cmItPmFjdHVhbF9sZW5ndGg7ICsraSkgeworCQkJLy8gaWYgd2UgaW5zZXJ0IG1vcmUgdGhhbiBUVFlfRkxJUEJVRl9TSVpFIGNoYXJhY3RlcnMsIHdlIGRyb3AgdGhlbS4KKwkJCWlmKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCX0KKwkJCS8vIHRoaXMgZG9lc24ndCBhY3R1YWxseSBwdXNoIHRoZSBkYXRhIHRocm91Z2ggdW5sZXNzIHR0eS0+bG93X2xhdGVuY3kgaXMgc2V0CisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIDApOworCQl9CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJfQorCisJLy8gc29tZW9uZSBzZXRzIHRoZSBkZXYgdG8gMCBpZiB0aGUgY2xvc2UgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZAorCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIoIHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9BVE9NSUMgKTsgCisJZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCByZWFkIFVSQiByZXR1cm5zOiAlaSIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCByZXN1bHQpOworfQorCisKK3N0YXRpYyB2b2lkIGtvYmlsX3dyaXRlX2NhbGxiYWNrKCBzdHJ1Y3QgdXJiICpwdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyApCit7Cit9CisKKworc3RhdGljIGludCBrb2JpbF93cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlpbnQgbGVuZ3RoID0gMDsKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgdG9kbyA9IDA7CisJc3RydWN0IGtvYmlsX3ByaXZhdGUgKiBwcml2OworCisJaWYgKGNvdW50ID09IDApIHsKKwkJZGJnKCIlcyAtIHBvcnQgJWQgd3JpdGUgcmVxdWVzdCBvZiAwIGJ5dGVzIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJaWYgKGNvdW50ID4gKEtPQklMX0JVRl9MRU5HVEggLSBwcml2LT5maWxsZWQpKSB7CisJCWRiZygiJXMgLSBwb3J0ICVkIEVycm9yOiB3cml0ZSByZXF1ZXN0IGJpZ2dlciB0aGFuIGJ1ZmZlciBzaXplIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvLyBDb3B5IGRhdGEgdG8gYnVmZmVyCisJbWVtY3B5IChwcml2LT5idWYgKyBwcml2LT5maWxsZWQsIGJ1ZiwgY291bnQpOworCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIGNvdW50LCBwcml2LT5idWYgKyBwcml2LT5maWxsZWQpOworCisJcHJpdi0+ZmlsbGVkID0gcHJpdi0+ZmlsbGVkICsgY291bnQ7CisKKworCS8vIG9ubHkgc2VuZCBjb21wbGV0ZSBibG9jay4gVFdJTiwgS0FBTiBTSU0gYW5kIGFkYXB0ZXIgSyB1c2UgdGhlIHNhbWUgcHJvdG9jb2wuCisJaWYgKCAoKHByaXYtPmRldmljZV90eXBlICE9IEtPQklMX0FEQVBURVJfQl9QUk9EVUNUX0lEKSAmJiAocHJpdi0+ZmlsbGVkID4gMikgJiYgKHByaXYtPmZpbGxlZCA+PSAocHJpdi0+YnVmWzFdICsgMykpKSB8fCAKKwkgICAgICgocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfQURBUFRFUl9CX1BST0RVQ1RfSUQpICYmIChwcml2LT5maWxsZWQgPiAzKSAmJiAocHJpdi0+ZmlsbGVkID49IChwcml2LT5idWZbMl0gKyA0KSkpICkgeworCQkKKwkJLy8gc3RvcCByZWFkaW5nIChleGNlcHQgVFdJTiBhbmQgS0FBTiBTSU0pCisJCWlmICggKHByaXYtPmRldmljZV90eXBlID09IEtPQklMX0FEQVBURVJfQl9QUk9EVUNUX0lEKSB8fCAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfQURBUFRFUl9LX1BST0RVQ1RfSUQpICkKKwkJCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKworCQl0b2RvID0gcHJpdi0+ZmlsbGVkIC0gcHJpdi0+Y3VyX3BvczsKKworCQl3aGlsZSh0b2RvID4gMCkgeworCQkJLy8gbWF4IDggYnl0ZSBpbiBvbmUgdXJiIChlbmRwb2ludCBzaXplKQorCQkJbGVuZ3RoID0gKHRvZG8gPCA4KSA/IHRvZG8gOiA4OworCQkJLy8gY29weSBkYXRhIHRvIHRyYW5zZmVyIGJ1ZmZlcgorCQkJbWVtY3B5KHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBwcml2LT5idWYgKyBwcml2LT5jdXJfcG9zLCBsZW5ndGggKTsKKwkJCXVzYl9maWxsX2ludF91cmIoIHBvcnQtPndyaXRlX3VyYiwKKwkJCQkJICBwb3J0LT5zZXJpYWwtPmRldiwKKwkJCQkJICB1c2Jfc25kaW50cGlwZShwb3J0LT5zZXJpYWwtPmRldiwgcHJpdi0+d3JpdGVfaW50X2VuZHBvaW50X2FkZHJlc3MpLAorCQkJCQkgIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJCQkgIGxlbmd0aCwKKwkJCQkJICBrb2JpbF93cml0ZV9jYWxsYmFjaywKKwkJCQkJICBwb3J0LAorCQkJCQkgIDgKKwkJCQkpOworCisJCQlwcml2LT5jdXJfcG9zID0gcHJpdi0+Y3VyX3BvcyArIGxlbmd0aDsKKwkJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKCBwb3J0LT53cml0ZV91cmIsIEdGUF9OT0lPICk7CisJCQlkYmcoIiVzIC0gcG9ydCAlZCBTZW5kIHdyaXRlIFVSQiByZXR1cm5zOiAlaSIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCByZXN1bHQpOworCQkJdG9kbyA9IHByaXYtPmZpbGxlZCAtIHByaXYtPmN1cl9wb3M7CisKKwkJCWlmICh0b2RvID4gMCkgeworCQkJCW1zbGVlcCgyNCk7CisJCQl9CisKKwkJfSAvLyBlbmQgd2hpbGUKKwkJCisJCXByaXYtPmZpbGxlZCA9IDA7CisJCXByaXYtPmN1cl9wb3MgPSAwOworCisJCS8vIHNvbWVvbmUgc2V0cyB0aGUgZGV2IHRvIDAgaWYgdGhlIGNsb3NlIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQKKwkJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJCQorCQkvLyBzdGFydCByZWFkaW5nIChleGNlcHQgVFdJTiBhbmQgS0FBTiBTSU0pCisJCWlmICggKHByaXYtPmRldmljZV90eXBlID09IEtPQklMX0FEQVBURVJfQl9QUk9EVUNUX0lEKSB8fCAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfQURBUFRFUl9LX1BST0RVQ1RfSUQpICkgeworCQkJLy8gc29tZW9uZSBzZXRzIHRoZSBkZXYgdG8gMCBpZiB0aGUgY2xvc2UgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZAorCQkJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJCQkKKwkJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKCBwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfTk9JTyApOyAKKwkJCWRiZygiJXMgLSBwb3J0ICVkIFNlbmQgcmVhZCBVUkIgcmV0dXJuczogJWkiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgcmVzdWx0KTsKKwkJfQorCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKKworc3RhdGljIGludCBrb2JpbF93cml0ZV9yb29tIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCS8vZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJcmV0dXJuIDg7Cit9CisKKworc3RhdGljIGludCBrb2JpbF90aW9jbWdldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qga29iaWxfcHJpdmF0ZSAqIHByaXY7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBjaGFyICp0cmFuc2Zlcl9idWZmZXI7CisJaW50IHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSA4OworCisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpZiAoKHByaXYtPmRldmljZV90eXBlID09IEtPQklMX1VTQlRXSU5fUFJPRFVDVF9JRCkgfHwgKHByaXYtPmRldmljZV90eXBlID09IEtPQklMX0tBQU5fU0lNX1BST0RVQ1RfSUQpKSB7CisJCS8vIFRoaXMgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBpb2N0bCBjYWxscworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvLyBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRyYW5zZmVyIGJ1ZmZlcgorCXRyYW5zZmVyX2J1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIGttYWxsb2ModHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwgR0ZQX0tFUk5FTCk7ICAKKwlpZiAoIXRyYW5zZmVyX2J1ZmZlcikgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KHRyYW5zZmVyX2J1ZmZlciwgMCwgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coIHBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJCQkgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCApLCAKKwkJCQkgIFNVU0JDUmVxdWVzdF9HZXRTdGF0dXNMaW5lU3RhdGUsCisJCQkJICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQgfCBVU0JfRElSX0lOLAorCQkJCSAgMCwKKwkJCQkgIDAsCisJCQkJICB0cmFuc2Zlcl9idWZmZXIsCisJCQkJICB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCSAgS09CSUxfVElNRU9VVCk7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCBTZW5kIGdldF9zdGF0dXNfbGluZV9zdGF0ZSBVUkIgcmV0dXJuczogJWkuIFN0YXR1c2xpbmU6ICUwMngiLCAKKwkgICAgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIHJlc3VsdCwgdHJhbnNmZXJfYnVmZmVyWzBdKTsKKworCWlmICgodHJhbnNmZXJfYnVmZmVyWzBdICYgU1VTQkNSX0dTTF9EU1IpICE9IDApIHsKKwkJcHJpdi0+bGluZV9zdGF0ZSB8PSBUSU9DTV9EU1I7CisJfSBlbHNlIHsKKwkJcHJpdi0+bGluZV9zdGF0ZSAmPSB+VElPQ01fRFNSOyAKKwl9CisKKwlrZnJlZSh0cmFuc2Zlcl9idWZmZXIpOworCXJldHVybiBwcml2LT5saW5lX3N0YXRlOworfQorCitzdGF0aWMgaW50ICBrb2JpbF90aW9jbXNldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlzdHJ1Y3Qga29iaWxfcHJpdmF0ZSAqIHByaXY7CisJaW50IHJlc3VsdDsKKwlpbnQgZHRyID0gMDsKKwlpbnQgcnRzID0gMDsKKwl1bnNpZ25lZCBjaGFyICp0cmFuc2Zlcl9idWZmZXI7CisJaW50IHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSA4OworCisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpZiAoKHByaXYtPmRldmljZV90eXBlID09IEtPQklMX1VTQlRXSU5fUFJPRFVDVF9JRCkgfHwgKHByaXYtPmRldmljZV90eXBlID09IEtPQklMX0tBQU5fU0lNX1BST0RVQ1RfSUQpKSB7CisJCS8vIFRoaXMgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBpb2N0bCBjYWxscworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvLyBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRyYW5zZmVyIGJ1ZmZlcgorCXRyYW5zZmVyX2J1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIGttYWxsb2ModHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKCEgdHJhbnNmZXJfYnVmZmVyKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQodHJhbnNmZXJfYnVmZmVyLCAwLCB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKworCWlmIChzZXQgJiBUSU9DTV9SVFMpCisJCXJ0cyA9IDE7CisJaWYgKHNldCAmIFRJT0NNX0RUUikKKwkJZHRyID0gMTsKKwlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpCisJCXJ0cyA9IDA7CisJaWYgKGNsZWFyICYgVElPQ01fRFRSKQorCQlkdHIgPSAwOworCisJaWYgKHByaXYtPmRldmljZV90eXBlID09IEtPQklMX0FEQVBURVJfQl9QUk9EVUNUX0lEKSB7CisJCWlmIChkdHIgIT0gMCkKKwkJCWRiZygiJXMgLSBwb3J0ICVkIFNldHRpbmcgRFRSIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQllbHNlCisJCQlkYmcoIiVzIC0gcG9ydCAlZCBDbGVhcmluZyBEVFIiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyggcG9ydC0+c2VyaWFsLT5kZXYsIAorCQkJCQkgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCApLCAKKwkJCQkJICBTVVNCQ1JlcXVlc3RfU2V0U3RhdHVzTGluZXNPclF1ZXVlcywKKwkJCQkJICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQgfCBVU0JfRElSX09VVCwKKwkJCQkJICAoKGR0ciAhPSAwKSA/IFNVU0JDUl9TU0xfU0VURFRSIDogU1VTQkNSX1NTTF9DTFJEVFIpLAorCQkJCQkgIDAsCisJCQkJCSAgdHJhbnNmZXJfYnVmZmVyLAorCQkJCQkgIDAsCisJCQkJCSAgS09CSUxfVElNRU9VVCk7CisJfSBlbHNlIHsKKwkJaWYgKHJ0cyAhPSAwKQorCQkJZGJnKCIlcyAtIHBvcnQgJWQgU2V0dGluZyBSVFMiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCWVsc2UKKwkJCWRiZygiJXMgLSBwb3J0ICVkIENsZWFyaW5nIFJUUyIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKCBwb3J0LT5zZXJpYWwtPmRldiwgCisJCQkJCSAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwICksIAorCQkJCQkgIFNVU0JDUmVxdWVzdF9TZXRTdGF0dXNMaW5lc09yUXVldWVzLAorCQkJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCB8IFVTQl9ESVJfT1VULAorCQkJCQkgICgocnRzICE9IDApID8gU1VTQkNSX1NTTF9TRVRSVFMgOiBTVVNCQ1JfU1NMX0NMUlJUUyksCisJCQkJCSAgMCwKKwkJCQkJICB0cmFuc2Zlcl9idWZmZXIsCisJCQkJCSAgMCwKKwkJCQkJICBLT0JJTF9USU1FT1VUKTsKKwl9CisJZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCBzZXRfc3RhdHVzX2xpbmUgVVJCIHJldHVybnM6ICVpIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIHJlc3VsdCk7CisJa2ZyZWUodHJhbnNmZXJfYnVmZmVyKTsKKwlyZXR1cm4gKHJlc3VsdCA8IDApID8gcmVzdWx0IDogMDsKK30KKworCitzdGF0aWMgaW50ICBrb2JpbF9pb2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBrb2JpbF9wcml2YXRlICogcHJpdjsKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIHNob3J0IHVyYl92YWwgPSAwOworCXVuc2lnbmVkIGNoYXIgKnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDg7CisJY2hhciAqc2V0dGluZ3M7CisJdm9pZCBfX3VzZXIgKnVzZXJfYXJnID0gKHZvaWQgX191c2VyICopYXJnOworCisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpZiAoKHByaXYtPmRldmljZV90eXBlID09IEtPQklMX1VTQlRXSU5fUFJPRFVDVF9JRCkgfHwgKHByaXYtPmRldmljZV90eXBlID09IEtPQklMX0tBQU5fU0lNX1BST0RVQ1RfSUQpKSB7CisJCS8vIFRoaXMgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBpb2N0bCBjYWxscworCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVENHRVRTOiAgIC8vIDB4NTQwMQorCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVzZXJfYXJnLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKSkgeworCQkJZGJnKCIlcyAtIHBvcnQgJWQgRXJyb3IgaW4gYWNjZXNzX29rIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJaWYgKGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvcygoc3RydWN0IHRlcm1pb3MgX191c2VyICopYXJnLAorCQkJCQkJICAgJnByaXYtPmludGVybmFsX3Rlcm1pb3MpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCisJY2FzZSBUQ1NFVFM6ICAgLy8gMHg1NDAyCisJCWlmICghKHBvcnQtPnR0eS0+dGVybWlvcykpIHsKKwkJCWRiZygiJXMgLSBwb3J0ICVkIEVycm9yOiBwb3J0LT50dHktPnRlcm1pb3MgaXMgTlVMTCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkJCXJldHVybiAtRU5PVFRZOworCQl9CisJCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB1c2VyX2FyZywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkpIHsKKwkJCWRiZygiJXMgLSBwb3J0ICVkIEVycm9yIGluIGFjY2Vzc19vayIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJCWlmICh1c2VyX3Rlcm1pb3NfdG9fa2VybmVsX3Rlcm1pb3MoJnByaXYtPmludGVybmFsX3Rlcm1pb3MsCisJCQkJCQkgICAoc3RydWN0IHRlcm1pb3MgX191c2VyICopYXJnKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQkKKwkJc2V0dGluZ3MgPSAodW5zaWduZWQgY2hhciAqKSBrbWFsbG9jKDUwLCBHRlBfS0VSTkVMKTsgIAorCQlpZiAoISBzZXR0aW5ncykgeworCQkJcmV0dXJuIC1FTk9CVUZTOworCQl9CisJCW1lbXNldChzZXR0aW5ncywgMCwgNTApOworCisJCXN3aXRjaCAocHJpdi0+aW50ZXJuYWxfdGVybWlvcy5jX2NmbGFnICYgQ0JBVUQpIHsKKwkJY2FzZSBCMTIwMDoKKwkJCXVyYl92YWwgPSBTVVNCQ1JfU0JSXzEyMDA7CisJCQlzdHJjYXQoc2V0dGluZ3MsICIxMjAwICIpOworCQkJYnJlYWs7CisJCWNhc2UgQjk2MDA6CisJCWRlZmF1bHQ6CisJCQl1cmJfdmFsID0gU1VTQkNSX1NCUl85NjAwOworCQkJc3RyY2F0KHNldHRpbmdzLCAiOTYwMCAiKTsKKwkJCWJyZWFrOworCQl9CisKKwkJdXJiX3ZhbCB8PSAocHJpdi0+aW50ZXJuYWxfdGVybWlvcy5jX2NmbGFnICYgQ1NUT1BCKSA/IFNVU0JDUl9TUEFTQl8yU3RvcEJpdHMgOiBTVVNCQ1JfU1BBU0JfMVN0b3BCaXQ7CisJCXN0cmNhdChzZXR0aW5ncywgKHByaXYtPmludGVybmFsX3Rlcm1pb3MuY19jZmxhZyAmIENTVE9QQikgPyAiMiBTdG9wQml0cyAiIDogIjEgU3RvcEJpdCAiKTsKKworCQlpZiAocHJpdi0+aW50ZXJuYWxfdGVybWlvcy5jX2NmbGFnICYgUEFSRU5CKSB7CisJCQlpZiAgKHByaXYtPmludGVybmFsX3Rlcm1pb3MuY19jZmxhZyAmIFBBUk9ERCkgeworCQkJCXVyYl92YWwgfD0gU1VTQkNSX1NQQVNCX09kZFBhcml0eTsKKwkJCQlzdHJjYXQoc2V0dGluZ3MsICJPZGQgUGFyaXR5Iik7CisJCQl9IGVsc2UgeworCQkJCXVyYl92YWwgfD0gU1VTQkNSX1NQQVNCX0V2ZW5QYXJpdHk7CisJCQkJc3RyY2F0KHNldHRpbmdzLCAiRXZlbiBQYXJpdHkiKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXVyYl92YWwgfD0gU1VTQkNSX1NQQVNCX05vUGFyaXR5OworCQkJc3RyY2F0KHNldHRpbmdzLCAiTm8gUGFyaXR5Iik7CisJCX0KKwkJZGJnKCIlcyAtIHBvcnQgJWQgc2V0dGluZyBwb3J0IHRvOiAlcyIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCBzZXR0aW5ncyApOworCisJCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyggcG9ydC0+c2VyaWFsLT5kZXYsIAorCQkJCQkgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCApLCAKKwkJCQkJICBTVVNCQ1JlcXVlc3RfU2V0QmF1ZFJhdGVQYXJpdHlBbmRTdG9wQml0cywKKwkJCQkJICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQgfCBVU0JfRElSX09VVCwKKwkJCQkJICB1cmJfdmFsLAorCQkJCQkgIDAsCisJCQkJCSAgc2V0dGluZ3MsCisJCQkJCSAgMCwKKwkJCQkJICBLT0JJTF9USU1FT1VUCisJCQkpOworCisJCWRiZygiJXMgLSBwb3J0ICVkIFNlbmQgc2V0X2JhdWRyYXRlIFVSQiByZXR1cm5zOiAlaSIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCByZXN1bHQpOworCQlrZnJlZShzZXR0aW5ncyk7CisJCXJldHVybiAwOworCisJY2FzZSBUQ0ZMU0g6ICAgLy8gMHg1NDBCCisJCXRyYW5zZmVyX2J1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIGttYWxsb2ModHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwgR0ZQX0tFUk5FTCk7CisJCWlmICghIHRyYW5zZmVyX2J1ZmZlcikgeworCQkgCXJldHVybiAtRU5PQlVGUzsKKwkJfQorCisJCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyggcG9ydC0+c2VyaWFsLT5kZXYsIAorCQkgCQkJICB1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDAgKSwgCisJCQkJCSAgU1VTQkNSZXF1ZXN0X01pc2MsCisJCQkJCSAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UIHwgVVNCX0RJUl9PVVQsCisJCQkJCSAgU1VTQkNSX01TQ19SZXNldEFsbFF1ZXVlcywKKwkJCQkJICAwLAorCQkJCQkgIE5VTEwsLy90cmFuc2Zlcl9idWZmZXIsCisJCQkJCSAgMCwKKwkJCQkJICBLT0JJTF9USU1FT1VUCisJCQkpOworCQkKKwkJZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCByZXNldF9hbGxfcXVldWVzIChGTFVTSCkgVVJCIHJldHVybnM6ICVpIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIHJlc3VsdCk7CisKKwkJa2ZyZWUodHJhbnNmZXJfYnVmZmVyKTsKKwkJcmV0dXJuICgocmVzdWx0IDwgMCkgPyAtRUZBVUxUIDogMCk7CisKKwl9CisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworCitzdGF0aWMgaW50IF9faW5pdCBrb2JpbF9pbml0ICh2b2lkKQoreworCWludCByZXR2YWw7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3Rlcigma29iaWxfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigma29iaWxfZHJpdmVyKTsKKwlpZiAocmV0dmFsKSAKKwkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOworCisJaW5mbyhEUklWRVJfVkVSU0lPTiAiICIgRFJJVkVSX0FVVEhPUik7CisJaW5mbyhEUklWRVJfREVTQyk7CisKKwlyZXR1cm4gMDsKK2ZhaWxlZF91c2JfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZrb2JpbF9kZXZpY2UpOworZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI6CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQga29iaWxfZXhpdCAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlciAoJmtvYmlsX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgma29iaWxfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQoa29iaWxfaW5pdCk7Cittb2R1bGVfZXhpdChrb2JpbF9leGl0KTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoICJHUEwiICk7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUxZmJiNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuaApAQCAtMCwwICsxLDYwIEBACisjZGVmaW5lIFNVU0JDUmVxdWVzdF9TZXRCYXVkUmF0ZVBhcml0eUFuZFN0b3BCaXRzICAgICAgIDEKKyNkZWZpbmUgU1VTQkNSX1NCUl9NQVNLCQkJCTB4RkYwMAorI2RlZmluZSBTVVNCQ1JfU0JSXzEyMDAJCQkJMHgwMTAwCisjZGVmaW5lIFNVU0JDUl9TQlJfOTYwMAkJCQkweDAyMDAKKyNkZWZpbmUgU1VTQkNSX1NCUl8xOTIwMAkJCTB4MDQwMAorI2RlZmluZSBTVVNCQ1JfU0JSXzI4ODAwCQkJMHgwODAwCisjZGVmaW5lIFNVU0JDUl9TQlJfMzg0MDAJCQkweDEwMDAKKyNkZWZpbmUgU1VTQkNSX1NCUl81NzYwMAkJCTB4MjAwMAorI2RlZmluZSBTVVNCQ1JfU0JSXzExNTIwMAkJCTB4NDAwMAorCisjZGVmaW5lIFNVU0JDUl9TUEFTQl9NQVNLCQkJMHgwMDcwCisjZGVmaW5lIFNVU0JDUl9TUEFTQl9Ob1Bhcml0eQkJCTB4MDAxMAorI2RlZmluZSBTVVNCQ1JfU1BBU0JfT2RkUGFyaXR5CQkJMHgwMDIwCisjZGVmaW5lIFNVU0JDUl9TUEFTQl9FdmVuUGFyaXR5CQkJMHgwMDQwCisKKyNkZWZpbmUgU1VTQkNSX1NQQVNCX1NUUE1BU0sJCQkweDAwMDMKKyNkZWZpbmUgU1VTQkNSX1NQQVNCXzFTdG9wQml0CQkJMHgwMDAxCisjZGVmaW5lIFNVU0JDUl9TUEFTQl8yU3RvcEJpdHMJCQkweDAwMDIKKworI2RlZmluZSBTVVNCQ1JlcXVlc3RfU2V0U3RhdHVzTGluZXNPclF1ZXVlcwkyCisjZGVmaW5lIFNVU0JDUl9TU0xfU0VUUlRTCQkJMHgwMDAxCisjZGVmaW5lIFNVU0JDUl9TU0xfQ0xSUlRTCQkJMHgwMDAyCisjZGVmaW5lIFNVU0JDUl9TU0xfU0VURFRSCQkJMHgwMDA0CisjZGVmaW5lIFNVU0JDUl9TU0xfQ0xSRFRSCQkJMHgwMDEwCisKKyNkZWZpbmUgU1VTQkNSX1NTTF9QVVJHRV9UWEFCT1JUCQkweDAxMDAgIC8vIEtpbGwgdGhlIHBlbmRpbmcvY3VycmVudCB3cml0ZXMgdG8gdGhlIGNvbW0gcG9ydC4KKyNkZWZpbmUgU1VTQkNSX1NTTF9QVVJHRV9SWEFCT1JUCQkweDAyMDAgIC8vIEtpbGwgdGhlIHBlbmRpbmcvY3VycmVudCByZWFkcyB0byB0aGUgY29tbSBwb3J0LgorI2RlZmluZSBTVVNCQ1JfU1NMX1BVUkdFX1RYQ0xFQVIJCTB4MDQwMCAgLy8gS2lsbCB0aGUgdHJhbnNtaXQgcXVldWUgaWYgdGhlcmUuCisjZGVmaW5lIFNVU0JDUl9TU0xfUFVSR0VfUlhDTEVBUgkJMHgwODAwICAvLyBLaWxsIHRoZSB0eXBlYWhlYWQgYnVmZmVyIGlmIHRoZXJlLgorCisjZGVmaW5lIFNVU0JDUmVxdWVzdF9HZXRTdGF0dXNMaW5lU3RhdGUJCTQKKyNkZWZpbmUgU1VTQkNSX0dTTF9SWENIQVIJCQkweDAwMDEgIC8vIEFueSBDaGFyYWN0ZXIgcmVjZWl2ZWQKKyNkZWZpbmUgU1VTQkNSX0dTTF9UWEVNUFRZCQkJMHgwMDA0ICAvLyBUcmFuc21pdHQgUXVldWUgRW1wdHkKKyNkZWZpbmUgU1VTQkNSX0dTTF9DVFMJCQkJMHgwMDA4ICAvLyBDVFMgY2hhbmdlZCBzdGF0ZQorI2RlZmluZSBTVVNCQ1JfR1NMX0RTUgkJCQkweDAwMTAgIC8vIERTUiBjaGFuZ2VkIHN0YXRlCisjZGVmaW5lIFNVU0JDUl9HU0xfUkxTRAkJCQkweDAwMjAgIC8vIFJMU0QgY2hhbmdlZCBzdGF0ZQorI2RlZmluZSBTVVNCQ1JfR1NMX0JSRUFLCQkJMHgwMDQwICAvLyBCUkVBSyByZWNlaXZlZAorI2RlZmluZSBTVVNCQ1JfR1NMX0VSUgkJCQkweDAwODAgIC8vIExpbmUgc3RhdHVzIGVycm9yIG9jY3VycmVkCisjZGVmaW5lIFNVU0JDUl9HU0xfUklORwkJCQkweDAxMDAgIC8vIFJpbmcgc2lnbmFsIGRldGVjdGVkCisKKyNkZWZpbmUgU1VTQkNSZXF1ZXN0X01pc2MJCQk4CisjZGVmaW5lIFNVU0JDUl9NU0NfUmVzZXRSZWFkZXIJCQkweDAwMDEJLy8gdXNlIGEgcHJlZGVmaW5lZCByZXNldCBzZXF1ZW5jZQorI2RlZmluZSBTVVNCQ1JfTVNDX1Jlc2V0QWxsUXVldWVzCQkweDAwMDIJLy8gdXNlIGEgcHJlZGVmaW5lZCBzZXF1ZW5jZSB0byByZXNldCB0aGUgaW50ZXJuYWwgcXVldWVzCisKKyNkZWZpbmUgU1VTQkNSZXF1ZXN0X0dldE1pc2MJCQkweDEwCisjZGVmaW5lIFNVU0JDUl9NU0NfR2V0RldWZXJzaW9uCQkJMHgwMDAxCS8qIGdldCB0aGUgZmlybXdhcmUgdmVyc2lvbiBmcm9tIGRldmljZSwKKwkJCQkJCQkgICBjb2RlZCBsaWtlIHRoaXMgMHhISExMQkJQUAorCQkJCQkJCSAgIHdpdGggSEggPSBGaXJtd2FyZSBWZXJzaW9uIEhpZ2ggQnl0ZQorCQkJCQkJCSAgIExMID0gRmlybXdhcmUgVmVyc2lvbiBMb3cgQnl0ZQorCQkJCQkJCSAgIEJCID0gQnVpbGQgTnVtYmVyCisJCQkJCQkJICAgUFAgPSBGdXJ0aGVyIEF0dHJpYnV0ZXMKKwkJCQkJCQkqLworCisjZGVmaW5lIFNVU0JDUl9NU0NfR2V0SFdWZXJzaW9uCQkJMHgwMDAyCS8qIGdldCB0aGUgaGFyZHdhcmUgdmVyc2lvbiBmcm9tIGRldmljZQorCQkJCQkJCSAgIGNvZGVkIGxpa2UgdGhpcyAweEhITExQUFJSCisJCQkJCQkJICAgd2l0aCBISCA9IFNvZnR3YXJlIFZlcnNpb24gSGlnaCBCeXRlCisJCQkJCQkJICAgTEwgPSBTb2Z0d2FyZSBWZXJzaW9uIExvdyBCeXRlCisJCQkJCQkJICAgUFAgPSBGdXJ0aGVyIEF0dHJpYnV0ZXMKKwkJCQkJCQkgICBSUiA9IFJlc2VydmVkIGZvciB0aGUgaGFyZHdhcmUgSUQgCisJCQkJCQkJKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBiNjM2OTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwpAQCAtMCwwICsxLDc4MSBAQAorLyoKKyAqIE1DVCAoTWFnaWMgQ29udHJvbCBUZWNobm9sb2d5IENvcnAuKSBVU0IgUlMyMzIgQ29udmVydGVyIERyaXZlcgorICoKKyAqICAgQ29weXJpZ2h0IChDKSAyMDAwIFdvbGZnYW5nIEdyYW5kZWdnZXIgKHdvbGZnYW5nQGNlcy5jaCkKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGxhcmdlbHkgZGVyaXZlZCBmcm9tIHRoZSBCZWxraW4gVVNCIFNlcmlhbCBBZGFwdGVyIERyaXZlcgorICogKHNlZSBiZWxraW5fc2EuW2NoXSkuIEFsbCBvZiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRldmljZSB3YXMgYWNxdWlyZWQKKyAqIGJ5IHVzaW5nIFNuaWZmVVNCIG9uIFdpbmRvd3M5OC4gRm9yIHRlY2huaWNhbCBkZXRhaWxzIHNlZSBtY3RfdTIzMi5oLgorICoKKyAqIFdpbGxpYW0gRy4gR3JlYXRob3VzZSBhbmQgR3JlZyBLcm9haC1IYXJ0bWFuIHByb3ZpZGVkIGdyZWF0IGhlbHAgb24gaG93IHRvCisgKiBkbyB0aGUgcmV2ZXJzZSBlbmdpbmVlcmluZyBhbmQgaG93IHRvIHdyaXRlIGEgVVNCIHNlcmlhbCBkZXZpY2UgZHJpdmVyLgorICoKKyAqIFRPIEJFIERPTkUsIFRPIEJFIENIRUNLRUQ6CisgKiAgIERUUi9SVFMgc2lnbmFsIGhhbmRsaW5nIG1heSBiZSBpbmNvbXBsZXRlIG9yIGluY29ycmVjdC4gSSBoYXZlIG1haW5seQorICogICBpbXBsZW1lbnRlZCB3aGF0IEkgaGF2ZSBzZWVuIHdpdGggU25pZmZVU0Igb3IgZm91bmQgaW4gYmVsa2luX3NhLmMuCisgKiAgIEZvciBmdXJ0aGVyIFRPRE9zIGNoZWNrIGFsc28gYmVsa2luX3NhLmMuCisgKgorICogVEVTVCBTVEFUVVM6CisgKiAgIEJhc2ljIHRlc3RzIGhhdmUgYmVlbiBwZXJmb3JtZWQgd2l0aCBtaW5pY29tL3ptb2RlbSB0cmFuc2ZlcnMgYW5kCisgKiAgIG1vZGVtIGRpYWxpbmcgdW5kZXIgTGludXggMi40LjAtdGVzdDEwIChmb3IgbWUgaXQgd29ya3MgZmluZSkuCisgKgorICogMDQtTm92LTIwMDMgQmlsbCBNYXJyIDxtYXJyIGF0IGZsZXggZG90IGNvbT4KKyAqICAgLSBNaW1pYyBXaW5kb3dzIGRyaXZlciBieSBzZW5kaW5nIDIgVVNCICdkZXZpY2UgcmVxdWVzdCcgbWVzc2FnZXMKKyAqICAgICBmb2xsb3dpbmcgbm9ybWFsICdiYXVkIHJhdGUgY2hhbmdlJyBtZXNzYWdlLiAgVGhpcyBhbGxvd3MgZGF0YSB0byBiZQorICogICAgIHRyYW5zbWl0dGVkIHRvIFJTLTIzMiBkZXZpY2VzIHdoaWNoIGRvbid0IGFzc2VydCB0aGUgJ0NUUycgc2lnbmFsLgorICoKKyAqIDEwLU5vdi0yMDAxIFdvbGZnYW5nIEdyYW5kZWdnZXIKKyAqICAgLSBGaXhlZCBhbiBlbmRpYW5lc3MgcHJvYmxlbSB3aXRoIHRoZSBiYXVkcmF0ZSBzZWxlY3Rpb24gZm9yIFBvd2VyUEMuCisgKgorICogMDYtRGVjLTIwMDEgTWFydGluIEhhbWlsdG9uIDxtYXJ0aW5oQGdudS5vcmc+CisgKglBZGRlZCBzdXBwb3J0IGZvciB0aGUgQmVsa2luIEY1VTEwOSBEQjkgYWRhcHRvcgorICoKKyAqIDMwLU1heS0yMDAxIEdyZWcgS3JvYWgtSGFydG1hbgorICoJc3dpdGNoZWQgZnJvbSB1c2luZyBzcGlubG9jayB0byBhIHNlbWFwaG9yZSwgd2hpY2ggZml4ZXMgbG90cyBvZiBwcm9ibGVtcy4KKyAqCisgKiAwNC1NYXktMjAwMSBTdGVsaWFuIFBvcAorICogICAtIFNldCB0aGUgbWF4aW11bSBidWxrIG91dHB1dCBzaXplIGZvciBTaXRlY29tIFUyMzItUDI1IG1vZGVsIHRvIDE2IGJ5dGVzCisgKiAgICAgaW5zdGVhZCBvZiB0aGUgZGV2aWNlIHJlcG9ydGVkIDMyICh1c2luZyAzMiBieXRlcyBjYXVzZXMgbWFueSBkYXRhCisgKiAgICAgbG9zcywgV2luZG93cyBkcml2ZXIgdXNlcyAxNiB0b28pLgorICoKKyAqIDAyLU1heS0yMDAxIFN0ZWxpYW4gUG9wCisgKiAgIC0gRml4ZWQgdGhlIGJhdWQgY2FsY3VsYXRpb24gZm9yIFNpdGVjb20gVTIzMi1QMjUgbW9kZWwKKyAqCisgKiAwOC1BcHItMjAwMSBnYgorICogICAtIElkZW50aWZ5IHZlcnNpb24gb24gbW9kdWxlIGxvYWQuCisgKgorICogMDYtSmFuLTIwMDEgQ29ybmVsIENpb2NpcmxhbiAKKyAqICAgLSBBZGRlZCBzdXBwb3J0IGZvciBTaXRlY29tIFUyMzItUDI1IG1vZGVsIChQcm9kdWN0IElkIDB4MDIzMCkKKyAqICAgLSBBZGRlZCBzdXBwb3J0IGZvciBELUxpbmsgRFUtSDNTUCBVU0IgQkFZIChQcm9kdWN0IElkIDB4MDIwMCkKKyAqCisgKiAyOS1Ob3YtMjAwMCBHcmVnIEtyb2FoLUhhcnRtYW4KKyAqICAgLSBBZGRlZCBkZXZpY2UgaWQgdGFibGUgdG8gZml0IHdpdGggMi40LjAtdGVzdDExIHN0cnVjdHVyZS4KKyAqICAgLSB0b29rIG91dCBERUFMX1dJVEhfVFdPX0lOVF9JTl9FTkRQT0lOVFMgI2RlZmluZSBhcyBpdCdzIG5vdCBuZWVkZWQKKyAqICAgICAobG90cyBvZiB0aGluZ3Mgd2lsbCBjaGFuZ2UgaWYvd2hlbiB0aGUgdXNiLXNlcmlhbCBjb3JlIGNoYW5nZXMgdG8KKyAqICAgICBoYW5kbGUgdGhlc2UgaXNzdWVzLgorICoKKyAqIDI3LU5vdi0yMDAwIFdvbGZnYW5nIEdyYW5kZWdnZXIKKyAqICAgQSB2ZXJzaW9uIGZvciBrZXJuZWwgMi40LjAtdGVzdDEwIHJlbGVhc2VkIHRvIHRoZSBMaW51eCBjb21tdW5pdHkgCisgKiAgICh2aWEgbGludXgtdXNiLWRldmVsKS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisjaW5jbHVkZSAibWN0X3UyMzIuaCIKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiejIuMCIJCS8qIExpbnV4IGluLWtlcm5lbCB2ZXJzaW9uICovCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIldvbGZnYW5nIEdyYW5kZWdnZXIgPHdvbGZnYW5nQGNlcy5jaD4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJNYWdpYyBDb250cm9sIFRlY2hub2xvZ3kgVVNCLVJTMjMyIGNvbnZlcnRlciBkcml2ZXIiCisKK3N0YXRpYyBpbnQgZGVidWc7CisKKy8qCisgKiBGdW5jdGlvbiBwcm90b3R5cGVzCisgKi8KK3N0YXRpYyBpbnQgIG1jdF91MjMyX3N0YXJ0dXAJICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIHZvaWQgbWN0X3UyMzJfc2h1dGRvd24JICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgbWN0X3UyMzJfb3BlbgkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJICBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCBtY3RfdTIzMl9jbG9zZQkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJICBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCBtY3RfdTIzMl9yZWFkX2ludF9jYWxsYmFjayAgIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIG1jdF91MjMyX3NldF90ZXJtaW9zICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSAgc3RydWN0IHRlcm1pb3MgKiBvbGQpOworc3RhdGljIGludCAgbWN0X3UyMzJfaW9jdGwJICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSAgc3RydWN0IGZpbGUgKiBmaWxlLAorCQkJCQkgIHVuc2lnbmVkIGludCBjbWQsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIHZvaWQgbWN0X3UyMzJfYnJlYWtfY3RsCSAgICAgICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgIGludCBicmVha19zdGF0ZSApOworc3RhdGljIGludCAgbWN0X3UyMzJfdGlvY21nZXQJCSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50ICBtY3RfdTIzMl90aW9jbXNldAkJIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgc2V0LAorCQkJCQkgIHVuc2lnbmVkIGludCBjbGVhcik7CisvKgorICogQWxsIG9mIHRoZSBkZXZpY2UgaW5mbyBuZWVkZWQgZm9yIHRoZSBNQ1QgVVNCLVJTMjMyIGNvbnZlcnRlci4KKyAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkIFtdID0geworCXsgVVNCX0RFVklDRShNQ1RfVTIzMl9WSUQsIE1DVF9VMjMyX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTUNUX1UyMzJfVklELCBNQ1RfVTIzMl9TSVRFQ09NX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTUNUX1UyMzJfVklELCBNQ1RfVTIzMl9EVV9IM1NQX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTUNUX1UyMzJfQkVMS0lOX0Y1VTEwOV9WSUQsIE1DVF9VMjMyX0JFTEtJTl9GNVUxMDlfUElEKSB9LAorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGVfY29tYmluZWQpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbWN0X3UyMzJfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJtY3RfdTIzMiIsCisJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZV9jb21iaW5lZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBtY3RfdTIzMl9kZXZpY2UgPSB7CisJLm93bmVyID0JICAgICBUSElTX01PRFVMRSwKKwkubmFtZSA9CQkgICAgICJNQ1QgVTIzMiIsCisJLnNob3J0X25hbWUgPQkgICAgICJtY3RfdTIzMiIsCisJLmlkX3RhYmxlID0JICAgICBpZF90YWJsZV9jb21iaW5lZCwKKwkubnVtX2ludGVycnVwdF9pbiA9ICAyLAorCS5udW1fYnVsa19pbiA9CSAgICAgMCwKKwkubnVtX2J1bGtfb3V0ID0JICAgICAxLAorCS5udW1fcG9ydHMgPQkgICAgIDEsCisJLm9wZW4gPQkJICAgICBtY3RfdTIzMl9vcGVuLAorCS5jbG9zZSA9CSAgICAgbWN0X3UyMzJfY2xvc2UsCisJLnJlYWRfaW50X2NhbGxiYWNrID0gbWN0X3UyMzJfcmVhZF9pbnRfY2FsbGJhY2ssCisJLmlvY3RsID0JICAgICBtY3RfdTIzMl9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkgICAgIG1jdF91MjMyX3NldF90ZXJtaW9zLAorCS5icmVha19jdGwgPQkgICAgIG1jdF91MjMyX2JyZWFrX2N0bCwKKwkudGlvY21nZXQgPQkgICAgIG1jdF91MjMyX3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9CSAgICAgbWN0X3UyMzJfdGlvY21zZXQsCisJLmF0dGFjaCA9CSAgICAgbWN0X3UyMzJfc3RhcnR1cCwKKwkuc2h1dGRvd24gPQkgICAgIG1jdF91MjMyX3NodXRkb3duLAorfTsKKworCitzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSB7CisJc3BpbmxvY2tfdCBsb2NrOworCXVuc2lnbmVkIGludAkgICAgIGNvbnRyb2xfc3RhdGU7IC8qIE1vZGVtIExpbmUgU2V0dGluZyAoVElPQ00pICovCisJdW5zaWduZWQgY2hhciAgICAgICAgbGFzdF9sY3I7ICAgICAgLyogTGluZSBDb250cm9sIFJlZ2lzdGVyICovCisJdW5zaWduZWQgY2hhcgkgICAgIGxhc3RfbHNyOyAgICAgIC8qIExpbmUgU3RhdHVzIFJlZ2lzdGVyICovCisJdW5zaWduZWQgY2hhcgkgICAgIGxhc3RfbXNyOyAgICAgIC8qIE1vZGVtIFN0YXR1cyBSZWdpc3RlciAqLworfTsKKworLyoKKyAqIEhhbmRsZSB2ZW5kb3Igc3BlY2lmaWMgVVNCIHJlcXVlc3RzCisgKi8KKworI2RlZmluZSBXRFJfVElNRU9VVCA1MDAwIC8qIGRlZmF1bHQgdXJiIHRpbWVvdXQgKi8KKworLyoKKyAqIExhdGVyIGRheSAyLjYuMC10ZXN0IGtlcm5lbHMgaGF2ZSBuZXcgYmF1ZCByYXRlcyBsaWtlIEIyMzA0MDAgd2hpY2gKKyAqIHdlIGRvIG5vdCBrbm93IGhvdyB0byBzdXBwb3J0LiBXZSBpZ25vcmUgdGhlbSBmb3IgdGhlIG1vbWVudC4KKyAqIFhYWCBSYXRlLWxpbWl0IHRoZSBlcnJvciBtZXNzYWdlLCBpdCdzIHVzZXIgdHJpZ2dlcmFibGUuCisgKi8KK3N0YXRpYyBpbnQgbWN0X3UyMzJfY2FsY3VsYXRlX2JhdWRfcmF0ZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBpbnQgdmFsdWUpCit7CisJaWYgKGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gTUNUX1UyMzJfU0lURUNPTV9QSUQKKwkgIHx8IGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gTUNUX1UyMzJfQkVMS0lOX0Y1VTEwOV9QSUQpIHsKKwkJc3dpdGNoICh2YWx1ZSkgeworCQljYXNlICAgIEIzMDA6IHJldHVybiAweDAxOworCQljYXNlICAgIEI2MDA6IHJldHVybiAweDAyOyAvKiB0aGlzIG9uZSBub3QgdGVzdGVkICovCisJCWNhc2UgICBCMTIwMDogcmV0dXJuIDB4MDM7CisJCWNhc2UgICBCMjQwMDogcmV0dXJuIDB4MDQ7CisJCWNhc2UgICBCNDgwMDogcmV0dXJuIDB4MDY7CisJCWNhc2UgICBCOTYwMDogcmV0dXJuIDB4MDg7CisJCWNhc2UgIEIxOTIwMDogcmV0dXJuIDB4MDk7CisJCWNhc2UgIEIzODQwMDogcmV0dXJuIDB4MGE7CisJCWNhc2UgIEI1NzYwMDogcmV0dXJuIDB4MGI7CisJCWNhc2UgQjExNTIwMDogcmV0dXJuIDB4MGM7CisJCWRlZmF1bHQ6CisJCQllcnIoIk1DVCBVU0ItUlMyMzI6IHVuc3VwcG9ydGVkIGJhdWRyYXRlIHJlcXVlc3QgMHgleCwiCisJCQkgICAgIiB1c2luZyBkZWZhdWx0IG9mIEI5NjAwIiwgdmFsdWUpOworCQkJcmV0dXJuIDB4MDg7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKHZhbHVlKSB7CisJCWNhc2UgICAgQjMwMDogdmFsdWUgPSAgICAgMzAwOyBicmVhazsKKwkJY2FzZSAgICBCNjAwOiB2YWx1ZSA9ICAgICA2MDA7IGJyZWFrOworCQljYXNlICAgQjEyMDA6IHZhbHVlID0gICAgMTIwMDsgYnJlYWs7CisJCWNhc2UgICBCMjQwMDogdmFsdWUgPSAgICAyNDAwOyBicmVhazsKKwkJY2FzZSAgIEI0ODAwOiB2YWx1ZSA9ICAgIDQ4MDA7IGJyZWFrOworCQljYXNlICAgQjk2MDA6IHZhbHVlID0gICAgOTYwMDsgYnJlYWs7CisJCWNhc2UgIEIxOTIwMDogdmFsdWUgPSAgIDE5MjAwOyBicmVhazsKKwkJY2FzZSAgQjM4NDAwOiB2YWx1ZSA9ICAgMzg0MDA7IGJyZWFrOworCQljYXNlICBCNTc2MDA6IHZhbHVlID0gICA1NzYwMDsgYnJlYWs7CisJCWNhc2UgQjExNTIwMDogdmFsdWUgPSAgMTE1MjAwOyBicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVycigiTUNUIFVTQi1SUzIzMjogdW5zdXBwb3J0ZWQgYmF1ZHJhdGUgcmVxdWVzdCAweCV4LCIKKwkJCSAgICAiIHVzaW5nIGRlZmF1bHQgb2YgQjk2MDAiLCB2YWx1ZSk7CisJCQl2YWx1ZSA9IDk2MDA7CisJCX0KKwkJcmV0dXJuIDExNTIwMC92YWx1ZTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbWN0X3UyMzJfc2V0X2JhdWRfcmF0ZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBpbnQgdmFsdWUpCit7CisJX19sZTMyIGRpdmlzb3I7CisgICAgICAgIGludCByYzsKKyAgICAgICAgdW5zaWduZWQgY2hhciB6ZXJvX2J5dGUgPSAwOworCisJZGl2aXNvciA9IGNwdV90b19sZTMyKG1jdF91MjMyX2NhbGN1bGF0ZV9iYXVkX3JhdGUoc2VyaWFsLCB2YWx1ZSkpOworCisgICAgICAgIHJjID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQ1RfVTIzMl9TRVRfQkFVRF9SQVRFX1JFUVVFU1QsCisJCQkgICAgIE1DVF9VMjMyX1NFVF9SRVFVRVNUX1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsICZkaXZpc29yLCBNQ1RfVTIzMl9TRVRfQkFVRF9SQVRFX1NJWkUsCisJCQkgICAgIFdEUl9USU1FT1VUKTsKKwlpZiAocmMgPCAwKQorCQllcnIoIlNldCBCQVVEIFJBVEUgJWQgZmFpbGVkIChlcnJvciA9ICVkKSIsIHZhbHVlLCByYyk7CisJZGJnKCJzZXRfYmF1ZF9yYXRlOiB2YWx1ZTogMHgleCwgZGl2aXNvcjogMHgleCIsIHZhbHVlLCBkaXZpc29yKTsKKworCS8qIE1pbWljIHRoZSBNQ1Qtc3VwcGxpZWQgV2luZG93cyBkcml2ZXIgKHZlcnNpb24gMS4yMVAuMDEwNCksIHdoaWNoCisJICAgYWx3YXlzIHNlbmRzIHR3byBleHRyYSBVU0IgJ2RldmljZSByZXF1ZXN0JyBtZXNzYWdlcyBhZnRlciB0aGUKKwkgICAnYmF1ZCByYXRlIGNoYW5nZScgbWVzc2FnZS4gIFRoZSBhY3R1YWwgZnVuY3Rpb25hbGl0eSBvZiB0aGUKKwkgICByZXF1ZXN0IGNvZGVzIGluIHRoZXNlIG1lc3NhZ2VzIGlzIG5vdCBmdWxseSB1bmRlcnN0b29kIGJ1dCB0aGVzZQorCSAgIHBhcnRpY3VsYXIgY29kZXMgYXJlIG5ldmVyIHNlZW4gaW4gYW55IG9wZXJhdGlvbiBiZXNpZGVzIGEgYmF1ZAorCSAgIHJhdGUgY2hhbmdlLiAgQm90aCBvZiB0aGVzZSBtZXNzYWdlcyBzZW5kIGEgc2luZ2xlIGJ5dGUgb2YgZGF0YQorCSAgIHdob3NlIHZhbHVlIGlzIGFsd2F5cyB6ZXJvLiAgVGhlIHNlY29uZCBvZiB0aGVzZSB0d28gZXh0cmEgbWVzc2FnZXMKKwkgICBpcyByZXF1aXJlZCBpbiBvcmRlciBmb3IgZGF0YSB0byBiZSBwcm9wZXJseSB3cml0dGVuIHRvIGFuIFJTLTIzMgorCSAgIGRldmljZSB3aGljaCBkb2VzIG5vdCBhc3NlcnQgdGhlICdDVFMnIHNpZ25hbC4gKi8KKworCXJjID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJICAgICBNQ1RfVTIzMl9TRVRfVU5LTk9XTjFfUkVRVUVTVCwgCisJCQkgICAgIE1DVF9VMjMyX1NFVF9SRVFVRVNUX1RZUEUsCisJCQkgICAgIDAsIDAsICZ6ZXJvX2J5dGUsIE1DVF9VMjMyX1NFVF9VTktOT1dOMV9TSVpFLCAKKwkJCSAgICAgV0RSX1RJTUVPVVQpOworCWlmIChyYyA8IDApCisJCWVycigiU2VuZGluZyBVU0IgZGV2aWNlIHJlcXVlc3QgY29kZSAlZCBmYWlsZWQgKGVycm9yID0gJWQpIiwgCisJCSAgICBNQ1RfVTIzMl9TRVRfVU5LTk9XTjFfUkVRVUVTVCwgcmMpOworCisJcmMgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkgICAgIE1DVF9VMjMyX1NFVF9VTktOT1dOMl9SRVFVRVNULCAKKwkJCSAgICAgTUNUX1UyMzJfU0VUX1JFUVVFU1RfVFlQRSwKKwkJCSAgICAgMCwgMCwgJnplcm9fYnl0ZSwgTUNUX1UyMzJfU0VUX1VOS05PV04yX1NJWkUsIAorCQkJICAgICBXRFJfVElNRU9VVCk7CisJaWYgKHJjIDwgMCkKKwkJZXJyKCJTZW5kaW5nIFVTQiBkZXZpY2UgcmVxdWVzdCBjb2RlICVkIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCAKKwkJICAgIE1DVF9VMjMyX1NFVF9VTktOT1dOMl9SRVFVRVNULCByYyk7CisKKyAgICAgICAgcmV0dXJuIHJjOworfSAvKiBtY3RfdTIzMl9zZXRfYmF1ZF9yYXRlICovCisKK3N0YXRpYyBpbnQgbWN0X3UyMzJfc2V0X2xpbmVfY3RybChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCB1bnNpZ25lZCBjaGFyIGxjcikKK3sKKyAgICAgICAgaW50IHJjOworICAgICAgICByYyA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUNUX1UyMzJfU0VUX0xJTkVfQ1RSTF9SRVFVRVNULAorCQkJICAgICBNQ1RfVTIzMl9TRVRfUkVRVUVTVF9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAmbGNyLCBNQ1RfVTIzMl9TRVRfTElORV9DVFJMX1NJWkUsCisJCQkgICAgIFdEUl9USU1FT1VUKTsKKwlpZiAocmMgPCAwKQorCQllcnIoIlNldCBMSU5FIENUUkwgMHgleCBmYWlsZWQgKGVycm9yID0gJWQpIiwgbGNyLCByYyk7CisJZGJnKCJzZXRfbGluZV9jdHJsOiAweCV4IiwgbGNyKTsKKyAgICAgICAgcmV0dXJuIHJjOworfSAvKiBtY3RfdTIzMl9zZXRfbGluZV9jdHJsICovCisKK3N0YXRpYyBpbnQgbWN0X3UyMzJfc2V0X21vZGVtX2N0cmwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgY29udHJvbF9zdGF0ZSkKK3sKKyAgICAgICAgaW50IHJjOworCXVuc2lnbmVkIGNoYXIgbWNyID0gTUNUX1UyMzJfTUNSX05PTkU7CisKKwlpZiAoY29udHJvbF9zdGF0ZSAmIFRJT0NNX0RUUikKKwkJbWNyIHw9IE1DVF9VMjMyX01DUl9EVFI7CisJaWYgKGNvbnRyb2xfc3RhdGUgJiBUSU9DTV9SVFMpCisJCW1jciB8PSBNQ1RfVTIzMl9NQ1JfUlRTOworCisgICAgICAgIHJjID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQ1RfVTIzMl9TRVRfTU9ERU1fQ1RSTF9SRVFVRVNULAorCQkJICAgICBNQ1RfVTIzMl9TRVRfUkVRVUVTVF9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAmbWNyLCBNQ1RfVTIzMl9TRVRfTU9ERU1fQ1RSTF9TSVpFLAorCQkJICAgICBXRFJfVElNRU9VVCk7CisJaWYgKHJjIDwgMCkKKwkJZXJyKCJTZXQgTU9ERU0gQ1RSTCAweCV4IGZhaWxlZCAoZXJyb3IgPSAlZCkiLCBtY3IsIHJjKTsKKwlkYmcoInNldF9tb2RlbV9jdHJsOiBzdGF0ZT0weCV4ID09PiBtY3I9MHgleCIsIGNvbnRyb2xfc3RhdGUsIG1jcik7CisKKyAgICAgICAgcmV0dXJuIHJjOworfSAvKiBtY3RfdTIzMl9zZXRfbW9kZW1fY3RybCAqLworCitzdGF0aWMgaW50IG1jdF91MjMyX2dldF9tb2RlbV9zdGF0KHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIGNoYXIgKm1zcikKK3sKKyAgICAgICAgaW50IHJjOworICAgICAgICByYyA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUNUX1UyMzJfR0VUX01PREVNX1NUQVRfUkVRVUVTVCwKKwkJCSAgICAgTUNUX1UyMzJfR0VUX1JFUVVFU1RfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgbXNyLCBNQ1RfVTIzMl9HRVRfTU9ERU1fU1RBVF9TSVpFLAorCQkJICAgICBXRFJfVElNRU9VVCk7CisJaWYgKHJjIDwgMCkgeworCQllcnIoIkdldCBNT0RFTSBTVEFUdXMgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJjKTsKKwkJKm1zciA9IDA7CisJfQorCWRiZygiZ2V0X21vZGVtX3N0YXQ6IDB4JXgiLCAqbXNyKTsKKyAgICAgICAgcmV0dXJuIHJjOworfSAvKiBtY3RfdTIzMl9nZXRfbW9kZW1fc3RhdCAqLworCitzdGF0aWMgdm9pZCBtY3RfdTIzMl9tc3JfdG9fc3RhdGUodW5zaWduZWQgaW50ICpjb250cm9sX3N0YXRlLCB1bnNpZ25lZCBjaGFyIG1zcikKK3sKKyAJLyogVHJhbnNsYXRlIENvbnRyb2wgTGluZSBzdGF0ZXMgKi8KKwlpZiAobXNyICYgTUNUX1UyMzJfTVNSX0RTUikKKwkJKmNvbnRyb2xfc3RhdGUgfD0gIFRJT0NNX0RTUjsKKwllbHNlCisJCSpjb250cm9sX3N0YXRlICY9IH5USU9DTV9EU1I7CisJaWYgKG1zciAmIE1DVF9VMjMyX01TUl9DVFMpCisJCSpjb250cm9sX3N0YXRlIHw9ICBUSU9DTV9DVFM7CisJZWxzZQorCQkqY29udHJvbF9zdGF0ZSAmPSB+VElPQ01fQ1RTOworCWlmIChtc3IgJiBNQ1RfVTIzMl9NU1JfUkkpCisJCSpjb250cm9sX3N0YXRlIHw9ICBUSU9DTV9SSTsKKwllbHNlCisJCSpjb250cm9sX3N0YXRlICY9IH5USU9DTV9SSTsKKwlpZiAobXNyICYgTUNUX1UyMzJfTVNSX0NEKQorCQkqY29udHJvbF9zdGF0ZSB8PSAgVElPQ01fQ0Q7CisJZWxzZQorCQkqY29udHJvbF9zdGF0ZSAmPSB+VElPQ01fQ0Q7CisgCWRiZygibXNyX3RvX3N0YXRlOiBtc3I9MHgleCA9PT4gc3RhdGU9MHgleCIsIG1zciwgKmNvbnRyb2xfc3RhdGUpOworfSAvKiBtY3RfdTIzMl9tc3JfdG9fc3RhdGUgKi8KKworLyoKKyAqIERyaXZlcidzIHR0eSBpbnRlcmZhY2UgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIGludCBtY3RfdTIzMl9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBtY3RfdTIzMl9wcml2YXRlICpwcml2OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsICpycG9ydDsKKworCXByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KHByaXYsIDAsIHNpemVvZihzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSkpOworCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKwl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdLCBwcml2KTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNlcmlhbC0+cG9ydFswXS0+d3JpdGVfd2FpdCk7CisKKwkvKiBQdWgsIHRoYXQncyBkaXJ0eSAqLworCXBvcnQgPSBzZXJpYWwtPnBvcnRbMF07CisJcnBvcnQgPSBzZXJpYWwtPnBvcnRbMV07CisJaWYgKHBvcnQtPnJlYWRfdXJiKSB7CisJCS8qIE5vIHVubGlua2luZywgaXQgd2Fzbid0IHN1Ym1pdHRlZCB5ZXQuICovCisJCXVzYl9mcmVlX3VyYihwb3J0LT5yZWFkX3VyYik7CisJfQorCXBvcnQtPnJlYWRfdXJiID0gcnBvcnQtPmludGVycnVwdF9pbl91cmI7CisJcnBvcnQtPmludGVycnVwdF9pbl91cmIgPSBOVUxMOworCXBvcnQtPnJlYWRfdXJiLT5jb250ZXh0ID0gcG9ydDsKKworCXJldHVybiAoMCk7Cit9IC8qIG1jdF91MjMyX3N0YXJ0dXAgKi8KKworCitzdGF0aWMgdm9pZCBtY3RfdTIzMl9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSAqcHJpdjsKKwlpbnQgaTsKKwkKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWZvciAoaT0wOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQkvKiBNeSBzcGVjaWFsIGl0ZW1zLCB0aGUgc3RhbmRhcmQgcm91dGluZXMgZnJlZSBteSB1cmJzICovCisJCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldKTsKKwkJaWYgKHByaXYpIHsKKwkJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIE5VTEwpOworCQkJa2ZyZWUocHJpdik7CisJCX0KKwl9Cit9IC8qIG1jdF91MjMyX3NodXRkb3duICovCisKK3N0YXRpYyBpbnQgIG1jdF91MjMyX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IG1jdF91MjMyX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IHJldHZhbCA9IDA7CisJdW5zaWduZWQgaW50IGNvbnRyb2xfc3RhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBjaGFyIGxhc3RfbGNyOworCXVuc2lnbmVkIGNoYXIgbGFzdF9tc3I7CisKKwlkYmcoIiVzIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiBDb21wZW5zYXRlIGZvciBhIGhhcmR3YXJlIGJ1ZzogYWx0aG91Z2ggdGhlIFNpdGVjb20gVTIzMi1QMjUKKwkgKiBkZXZpY2UgcmVwb3J0cyBhIG1heGltdW0gb3V0cHV0IHBhY2tldCBzaXplIG9mIDMyIGJ5dGVzLAorCSAqIGl0IHNlZW1zIHRvIGJlIGFibGUgdG8gYWNjZXB0IG9ubHkgMTYgYnl0ZXMgKGFuZCB0aGF0J3Mgd2hhdAorCSAqIFNuaWZmVVNCIHNheXMgdG9vLi4uKQorCSAqLworCWlmIChsZTE2X3RvX2NwdShzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IE1DVF9VMjMyX1NJVEVDT01fUElEKQorCQlwb3J0LT5idWxrX291dF9zaXplID0gMTY7CisKKwkvKiBEbyBhIGRlZmluZWQgcmVzdGFydDogdGhlIG5vcm1hbCBzZXJpYWwgZGV2aWNlIHNlZW1zIHRvIAorCSAqIGFsd2F5cyB0dXJuIG9uIERUUiBhbmQgUlRTIGhlcmUsIHNvIGRvIHRoZSBzYW1lLiBJJ20gbm90CisJICogc3VyZSBpZiB0aGlzIGlzIHJlYWxseSBuZWNlc3NhcnkuIEJ1dCBpdCBzaG91bGQgbm90IGhhcm0KKwkgKiBlaXRoZXIuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAocG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQpCisJCXByaXYtPmNvbnRyb2xfc3RhdGUgPSBUSU9DTV9EVFIgfCBUSU9DTV9SVFM7CisJZWxzZQorCQlwcml2LT5jb250cm9sX3N0YXRlID0gMDsKKwkKKwlwcml2LT5sYXN0X2xjciA9IChNQ1RfVTIzMl9EQVRBX0JJVFNfOCB8IAorCQkJICBNQ1RfVTIzMl9QQVJJVFlfTk9ORSB8CisJCQkgIE1DVF9VMjMyX1NUT1BfQklUU18xKTsKKwljb250cm9sX3N0YXRlID0gcHJpdi0+Y29udHJvbF9zdGF0ZTsKKwlsYXN0X2xjciA9IHByaXYtPmxhc3RfbGNyOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwltY3RfdTIzMl9zZXRfbW9kZW1fY3RybChzZXJpYWwsIGNvbnRyb2xfc3RhdGUpOworCW1jdF91MjMyX3NldF9saW5lX2N0cmwoc2VyaWFsLCBsYXN0X2xjcik7CisKKwkvKiBSZWFkIG1vZGVtIHN0YXR1cyBhbmQgdXBkYXRlIGNvbnRyb2wgc3RhdGUgKi8KKwltY3RfdTIzMl9nZXRfbW9kZW1fc3RhdChzZXJpYWwsICZsYXN0X21zcik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT5sYXN0X21zciA9IGxhc3RfbXNyOworCW1jdF91MjMyX21zcl90b19zdGF0ZSgmcHJpdi0+Y29udHJvbF9zdGF0ZSwgcHJpdi0+bGFzdF9tc3IpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldHZhbCkgeworCQllcnIoInVzYl9zdWJtaXRfdXJiKHJlYWQgYnVsaykgZmFpbGVkIHBpcGUgMHgleCBlcnIgJWQiLAorCQkgICAgcG9ydC0+cmVhZF91cmItPnBpcGUsIHJldHZhbCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0dmFsKQorCQllcnIoIiB1c2Jfc3VibWl0X3VyYihyZWFkIGludCkgZmFpbGVkIHBpcGUgMHgleCBlcnIgJWQiLAorCQkgICAgcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+cGlwZSwgcmV0dmFsKTsKKworZXhpdDoKKwlyZXR1cm4gMDsKK30gLyogbWN0X3UyMzJfb3BlbiAqLworCisKK3N0YXRpYyB2b2lkIG1jdF91MjMyX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlkYmcoIiVzIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAocG9ydC0+c2VyaWFsLT5kZXYpIHsKKwkJLyogc2h1dGRvd24gb3VyIHVyYnMgKi8KKwkJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisJCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwl9Cit9IC8qIG1jdF91MjMyX2Nsb3NlICovCisKKworc3RhdGljIHZvaWQgbWN0X3UyMzJfcmVhZF9pbnRfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBtY3RfdTIzMl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50IHN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoIXNlcmlhbCkgeworCQlkYmcoIiVzIC0gYmFkIHNlcmlhbCBwb2ludGVyLCBleGl0aW5nIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworICAgICAgICBkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKworCS8qCisJICogV29yay1hLXJvdW5kOiBoYW5kbGUgdGhlICd1c3VhbCcgYnVsay1pbiBwaXBlIGhlcmUKKwkgKi8KKwlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID4gMikgeworCQlpbnQgaTsKKwkJdHR5ID0gcG9ydC0+dHR5OworCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoIDsgKytpKSB7CisJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCAwKTsKKwkJCX0KKwkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCX0KKwkJZ290byBleGl0OworCX0KKwkKKwkvKgorCSAqIFRoZSBpbnRlcnJ1cHQtaW4gcGlwZSBzaWduYWxzIGV4Y2VwdGlvbmFsIGNvbmRpdGlvbnMgKG1vZGVtIGxpbmUKKwkgKiBzaWduYWwgY2hhbmdlcyBhbmQgZXJyb3JzKS4gZGF0YVswXSBob2xkcyBNU1IsIGRhdGFbMV0gaG9sZHMgTFNSLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJpdi0+bGFzdF9tc3IgPSBkYXRhW01DVF9VMjMyX01TUl9JTkRFWF07CisJCisJLyogUmVjb3JkIENvbnRyb2wgTGluZSBzdGF0ZXMgKi8KKwltY3RfdTIzMl9tc3JfdG9fc3RhdGUoJnByaXYtPmNvbnRyb2xfc3RhdGUsIHByaXYtPmxhc3RfbXNyKTsKKworI2lmIDAKKwkvKiBOb3QgeWV0IGhhbmRsZWQuIFNlZSBiZWxpbl9zYS5jIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uICovCisJLyogTm93IHRvIHJlcG9ydCBhbnkgZXJyb3JzICovCisJcHJpdi0+bGFzdF9sc3IgPSBkYXRhW01DVF9VMjMyX0xTUl9JTkRFWF07CisJLyoKKwkgKiBmaWxsIGluIHRoZSBmbGlwIGJ1ZmZlciBoZXJlLCBidXQgSSBkbyBub3Qga25vdyB0aGUgcmVsYXRpb24KKwkgKiB0byB0aGUgY3VycmVudC9uZXh0IHJlY2VpdmUgYnVmZmVyIG9yIGNoYXJhY3RlcnMuICBJIG5lZWQKKwkgKiB0byBsb29rIGluIHRvIHRoaXMgYmVmb3JlIGNvbW1pdHRpbmcgYW55IGNvZGUuCisJICovCisJaWYgKHByaXYtPmxhc3RfbHNyICYgTUNUX1UyMzJfTFNSX0VSUikgeworCQl0dHkgPSBwb3J0LT50dHk7CisJCS8qIE92ZXJydW4gRXJyb3IgKi8KKwkJaWYgKHByaXYtPmxhc3RfbHNyICYgTUNUX1UyMzJfTFNSX09FKSB7CisJCX0KKwkJLyogUGFyaXR5IEVycm9yICovCisJCWlmIChwcml2LT5sYXN0X2xzciAmIE1DVF9VMjMyX0xTUl9QRSkgeworCQl9CisJCS8qIEZyYW1pbmcgRXJyb3IgKi8KKwkJaWYgKHByaXYtPmxhc3RfbHNyICYgTUNUX1UyMzJfTFNSX0ZFKSB7CisJCX0KKwkJLyogQnJlYWsgSW5kaWNhdG9yICovCisJCWlmIChwcml2LT5sYXN0X2xzciAmIE1DVF9VMjMyX0xTUl9CSSkgeworCQl9CisJfQorI2VuZGlmCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworZXhpdDoKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKQorCQllcnIgKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCisJCSAgICAgX19GVU5DVElPTl9fLCBzdGF0dXMpOworfSAvKiBtY3RfdTIzMl9yZWFkX2ludF9jYWxsYmFjayAqLworCitzdGF0aWMgdm9pZCBtY3RfdTIzMl9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkgIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCBtY3RfdTIzMl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGludCBpZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19pZmxhZzsKKwl1bnNpZ25lZCBpbnQgY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJdW5zaWduZWQgaW50IG9sZF9jZmxhZyA9IG9sZF90ZXJtaW9zLT5jX2NmbGFnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGNvbnRyb2xfc3RhdGUsIG5ld19zdGF0ZTsKKwl1bnNpZ25lZCBjaGFyIGxhc3RfbGNyOworCisJLyogZ2V0IGEgbG9jYWwgY29weSBvZiB0aGUgY3VycmVudCBwb3J0IHNldHRpbmdzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwljb250cm9sX3N0YXRlID0gcHJpdi0+Y29udHJvbF9zdGF0ZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJbGFzdF9sY3IgPSAwOworCisJLyoKKwkgKiBVcGRhdGUgYmF1ZCByYXRlLgorCSAqIERvIG5vdCBhdHRlbXB0IHRvIGNhY2hlIG9sZCByYXRlcyBhbmQgc2tpcCBzZXR0aW5ncywKKwkgKiBkaXNjb25uZWN0cyBzY3JldyBzdWNoIHRyaWNrcyB1cCBjb21wbGV0ZWx5LgorCSAqIFByZW1hdHVyZSBvcHRpbWl6YXRpb24gaXMgdGhlIHJvb3Qgb2YgYWxsIGV2aWwuCisJICovCisKKyAgICAgICAgLyogcmVhc3NlcnQgRFRSIGFuZCAobWF5YmUpIFJUUyBvbiB0cmFuc2l0aW9uIGZyb20gQjAgKi8KKwlpZiAoKG9sZF9jZmxhZyAmIENCQVVEKSA9PSBCMCkgeworCQlkYmcoIiVzOiBiYXVkIHdhcyBCMCIsIF9fRlVOQ1RJT05fXyk7CisJCWNvbnRyb2xfc3RhdGUgfD0gVElPQ01fRFRSOworCQkvKiBkb24ndCBzZXQgUlRTIGlmIHVzaW5nIGhhcmR3YXJlIGZsb3cgY29udHJvbCAqLworCQlpZiAoIShvbGRfY2ZsYWcgJiBDUlRTQ1RTKSkgeworCQkJY29udHJvbF9zdGF0ZSB8PSBUSU9DTV9SVFM7CisJCX0KKwkJbWN0X3UyMzJfc2V0X21vZGVtX2N0cmwoc2VyaWFsLCBjb250cm9sX3N0YXRlKTsKKwl9CisKKwltY3RfdTIzMl9zZXRfYmF1ZF9yYXRlKHNlcmlhbCwgY2ZsYWcgJiBDQkFVRCk7CisKKwlpZiAoKGNmbGFnICYgQ0JBVUQpID09IEIwICkgeworCQlkYmcoIiVzOiBiYXVkIGlzIEIwIiwgX19GVU5DVElPTl9fKTsKKwkJLyogRHJvcCBSVFMgYW5kIERUUiAqLworCQljb250cm9sX3N0YXRlICY9IH4oVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKKyAgICAgICAJCW1jdF91MjMyX3NldF9tb2RlbV9jdHJsKHNlcmlhbCwgY29udHJvbF9zdGF0ZSk7CisJfQorCisJLyoKKwkgKiBVcGRhdGUgbGluZSBjb250cm9sIHJlZ2lzdGVyIChMQ1IpCisJICovCisKKwkvKiBzZXQgdGhlIHBhcml0eSAqLworCWlmIChjZmxhZyAmIFBBUkVOQikKKwkJbGFzdF9sY3IgfD0gKGNmbGFnICYgUEFST0REKSA/CisJCQlNQ1RfVTIzMl9QQVJJVFlfT0REIDogTUNUX1UyMzJfUEFSSVRZX0VWRU47CisJZWxzZQorCQlsYXN0X2xjciB8PSBNQ1RfVTIzMl9QQVJJVFlfTk9ORTsKKworCS8qIHNldCB0aGUgbnVtYmVyIG9mIGRhdGEgYml0cyAqLworCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgeworCWNhc2UgQ1M1OgorCQlsYXN0X2xjciB8PSBNQ1RfVTIzMl9EQVRBX0JJVFNfNTsgYnJlYWs7CisJY2FzZSBDUzY6CisJCWxhc3RfbGNyIHw9IE1DVF9VMjMyX0RBVEFfQklUU182OyBicmVhazsKKwljYXNlIENTNzoKKwkJbGFzdF9sY3IgfD0gTUNUX1UyMzJfREFUQV9CSVRTXzc7IGJyZWFrOworCWNhc2UgQ1M4OgorCQlsYXN0X2xjciB8PSBNQ1RfVTIzMl9EQVRBX0JJVFNfODsgYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyKCJDU0laRSB3YXMgbm90IENTNS1DUzgsIHVzaW5nIGRlZmF1bHQgb2YgOCIpOworCQlsYXN0X2xjciB8PSBNQ1RfVTIzMl9EQVRBX0JJVFNfODsKKwkJYnJlYWs7CisJfQorCisJLyogc2V0IHRoZSBudW1iZXIgb2Ygc3RvcCBiaXRzICovCisJbGFzdF9sY3IgfD0gKGNmbGFnICYgQ1NUT1BCKSA/CisJCU1DVF9VMjMyX1NUT1BfQklUU18yIDogTUNUX1UyMzJfU1RPUF9CSVRTXzE7CisKKwltY3RfdTIzMl9zZXRfbGluZV9jdHJsKHNlcmlhbCwgbGFzdF9sY3IpOworCisJLyoKKwkgKiBTZXQgZmxvdyBjb250cm9sOiB3ZWxsLCBJIGRvIG5vdCByZWFsbHkgbm93IGhvdyB0byBoYW5kbGUgRFRSL1JUUy4KKwkgKiBKdXN0IGRvIHdoYXQgd2UgaGF2ZSBzZWVuIHdpdGggU25pZmZVU0Igb24gV2luOTguCisJICovCisJLyogRHJvcCBEVFIvUlRTIGlmIG5vIGZsb3cgY29udHJvbCBvdGhlcndpc2UgYXNzZXJ0ICovCisJbmV3X3N0YXRlID0gY29udHJvbF9zdGF0ZTsKKwlpZiAoKGlmbGFnICYgSVhPRkYpIHx8IChpZmxhZyAmIElYT04pIHx8IChjZmxhZyAmIENSVFNDVFMpKQorCQluZXdfc3RhdGUgfD0gVElPQ01fRFRSIHwgVElPQ01fUlRTOworCWVsc2UKKwkJbmV3X3N0YXRlICY9IH4oVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKKwlpZiAobmV3X3N0YXRlICE9IGNvbnRyb2xfc3RhdGUpIHsKKwkJbWN0X3UyMzJfc2V0X21vZGVtX2N0cmwoc2VyaWFsLCBuZXdfc3RhdGUpOworCQljb250cm9sX3N0YXRlID0gbmV3X3N0YXRlOworCX0KKworCS8qIHNhdmUgb2ZmIHRoZSBtb2RpZmllZCBwb3J0IHNldHRpbmdzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT5jb250cm9sX3N0YXRlID0gY29udHJvbF9zdGF0ZTsKKwlwcml2LT5sYXN0X2xjciA9IGxhc3RfbGNyOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKK30gLyogbWN0X3UyMzJfc2V0X3Rlcm1pb3MgKi8KKworc3RhdGljIHZvaWQgbWN0X3UyMzJfYnJlYWtfY3RsKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUgKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IG1jdF91MjMyX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgY2hhciBsY3I7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXNzdGF0ZT0lZCIsIF9fRlVOQ1RJT05fXywgYnJlYWtfc3RhdGUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlsY3IgPSBwcml2LT5sYXN0X2xjcjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoYnJlYWtfc3RhdGUpCisJCWxjciB8PSBNQ1RfVTIzMl9TRVRfQlJFQUs7CisKKwltY3RfdTIzMl9zZXRfbGluZV9jdHJsKHNlcmlhbCwgbGNyKTsKK30gLyogbWN0X3UyMzJfYnJlYWtfY3RsICovCisKKworc3RhdGljIGludCBtY3RfdTIzMl90aW9jbWdldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IG1jdF91MjMyX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgaW50IGNvbnRyb2xfc3RhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJY29udHJvbF9zdGF0ZSA9IHByaXYtPmNvbnRyb2xfc3RhdGU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGNvbnRyb2xfc3RhdGU7Cit9CisKK3N0YXRpYyBpbnQgbWN0X3UyMzJfdGlvY21zZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IG1jdF91MjMyX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgaW50IGNvbnRyb2xfc3RhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJY29udHJvbF9zdGF0ZSA9IHByaXYtPmNvbnRyb2xfc3RhdGU7CisKKwlpZiAoc2V0ICYgVElPQ01fUlRTKQorCQljb250cm9sX3N0YXRlIHw9IFRJT0NNX1JUUzsKKwlpZiAoc2V0ICYgVElPQ01fRFRSKQorCQljb250cm9sX3N0YXRlIHw9IFRJT0NNX0RUUjsKKwlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpCisJCWNvbnRyb2xfc3RhdGUgJj0gflRJT0NNX1JUUzsKKwlpZiAoY2xlYXIgJiBUSU9DTV9EVFIpCisJCWNvbnRyb2xfc3RhdGUgJj0gflRJT0NNX0RUUjsKKworCXByaXYtPmNvbnRyb2xfc3RhdGUgPSBjb250cm9sX3N0YXRlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gbWN0X3UyMzJfc2V0X21vZGVtX2N0cmwoc2VyaWFsLCBjb250cm9sX3N0YXRlKTsKK30KKworc3RhdGljIGludCBtY3RfdTIzMl9pb2N0bCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLAorCQkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJZGJnKCIlc2NtZD0weCV4IiwgX19GVU5DVElPTl9fLCBjbWQpOworCisJLyogQmFzZWQgb24gY29kZSBmcm9tIGFjbS5jIGFuZCBvdGhlcnMgKi8KKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVElPQ01JV0FJVDoKKwkJLyogd2FpdCBmb3IgYW55IG9mIHRoZSA0IG1vZGVtIGlucHV0cyAoRENELFJJLERTUixDVFMpKi8KKwkJLyogVE9ETyAqLworCQlyZXR1cm4oIDAgKTsKKworCWNhc2UgVElPQ0dJQ09VTlQ6CisJCS8qIHJldHVybiBjb3VudCBvZiBtb2RlbWxpbmUgdHJhbnNpdGlvbnMgKi8KKwkJLyogVE9ETyAqLworCQlyZXR1cm4gMDsKKworCWRlZmF1bHQ6CisJCWRiZygiJXM6IGFyZyBub3Qgc3VwcG9ydGVkIC0gMHglMDR4IiwgX19GVU5DVElPTl9fLGNtZCk7CisJCXJldHVybigtRU5PSU9DVExDTUQpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9IC8qIG1jdF91MjMyX2lvY3RsICovCisKKworc3RhdGljIGludCBfX2luaXQgbWN0X3UyMzJfaW5pdCAodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJm1jdF91MjMyX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJm1jdF91MjMyX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOworCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlyZXR1cm4gMDsKK2ZhaWxlZF91c2JfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZtY3RfdTIzMl9kZXZpY2UpOworZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI6CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgbWN0X3UyMzJfZXhpdCAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlciAoJm1jdF91MjMyX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmbWN0X3UyMzJfZGV2aWNlKTsKK30KKworCittb2R1bGVfaW5pdCAobWN0X3UyMzJfaW5pdCk7Cittb2R1bGVfZXhpdChtY3RfdTIzMl9leGl0KTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2RkMGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmgKQEAgLTAsMCArMSw0NTMgQEAKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgTUNUIChNYWdpYyBDb250cm9sIFRlY2hub2xvZ3kpIFVTQi1SUzIzMiBDb252ZXJ0ZXIgRHJpdmVyCisgKgorICogICBDb3B5cmlnaHQgKEMpIDIwMDAgV29sZmdhbmcgR3JhbmRlZ2dlciAod29sZmdhbmdAY2VzLmNoKQorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBmb3IgdGhlIGRldmljZSBNQ1QgVVNCLVJTMjMyIENvbnZlcnRlciAoMjUgcGluLCBNb2RlbCBOby4KKyAqIFUyMzItUDI1KSBmcm9tIE1hZ2ljIENvbnRyb2wgVGVjaG5vbG9neSBDb3JwLiAodGhlcmUgaXMgYWxzbyBhIDkgcGluCisgKiBNb2RlbCBOby4gVTIzMi1QOSkuIFNlZSBodHRwOi8vd3d3Lm1jdC5jb20udHcvcF91MjMyLmh0bWwgZm9yIGZ1cnRoZXIKKyAqIGluZm9ybWF0aW9uLiBUaGUgcHJvcGVydGllcyBvZiB0aGlzIGRldmljZSBhcmUgbGlzdGVkIGF0IHRoZSBlbmQgb2YgdGhpcworICogZmlsZS4gVGhpcyBkZXZpY2UgaXMgYXZhaWxhYmxlIGZyb20gdmFyaW91cyBkaXN0cmlidXRvcnMuIEkga25vdyBIYW5hLAorICogaHR0cDovL3d3dy5oYW5hLmRlIGFuZCBELUxpbmssIGh0dHA6Ly93d3cuZGxpbmsuY29tL3Byb2R1Y3RzL3VzYi9kc2JzMjUuCisgKgorICogQWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGV2aWNlIHdhcyBhY3F1aXJlZCBieSB1c2luZyBTbmlmZlVTQgorICogb24gV2luZG93czk4LiBUaGUgdGVjaG5pY2FsIGRldGFpbHMgb2YgdGhlIHJldmVyc2UgZW5naW5lZXJpbmcgYXJlCisgKiBzdW1tYXJpemVkIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLgorICovCisKKyNpZm5kZWYgX19MSU5VWF9VU0JfU0VSSUFMX01DVF9VMjMyX0gKKyNkZWZpbmUgX19MSU5VWF9VU0JfU0VSSUFMX01DVF9VMjMyX0gKKworI2RlZmluZSBNQ1RfVTIzMl9WSUQJICAgICAgICAgICAgICAgIDB4MDcxMQkvKiBWZW5kb3IgSWQgKi8KKyNkZWZpbmUgTUNUX1UyMzJfUElECSAgICAgICAgICAgICAgICAweDAyMTAJLyogT3JpZ2luYWwgTUNUIFByb2R1Y3QgSWQgKi8KKworLyogVTIzMi1QMjUsIFNpdGVjb20gKi8KKyNkZWZpbmUgTUNUX1UyMzJfU0lURUNPTV9QSUQJCTB4MDIzMAkvKiBTaXRlY29tIFByb2R1Y3QgSWQgKi8KKworLyogRFUtSDNTUCBVU0IgQkFZIGh1YiAqLworI2RlZmluZSBNQ1RfVTIzMl9EVV9IM1NQX1BJRAkJMHgwMjAwCS8qIEQtTGluayBEVS1IM1NQIFVTQiBCQVkgKi8KKworLyogQmVsa2luIGJhZGdlIHRoZSBNQ1QgVTIzMi1QOSBhcyB0aGUgRjVVMTA5ICovCisjZGVmaW5lIE1DVF9VMjMyX0JFTEtJTl9GNVUxMDlfVklECTB4MDUwZAkvKiBWZW5kb3IgSWQgKi8KKyNkZWZpbmUgTUNUX1UyMzJfQkVMS0lOX0Y1VTEwOV9QSUQJMHgwMTA5CS8qIFByb2R1Y3QgSWQgKi8KKworLyoKKyAqIFZlbmRvciBSZXF1ZXN0IEludGVyZmFjZQorICovCisjZGVmaW5lIE1DVF9VMjMyX1NFVF9SRVFVRVNUX1RZUEUJMHg0MAorI2RlZmluZSBNQ1RfVTIzMl9HRVRfUkVRVUVTVF9UWVBFCTB4YzAKKworI2RlZmluZSBNQ1RfVTIzMl9HRVRfTU9ERU1fU1RBVF9SRVFVRVNUIDIgIC8qIEdldCBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIgKE1TUikgKi8KKyNkZWZpbmUgTUNUX1UyMzJfR0VUX01PREVNX1NUQVRfU0laRSAgICAxCisKKyNkZWZpbmUgTUNUX1UyMzJfR0VUX0xJTkVfQ1RSTF9SRVFVRVNUICA2ICAvKiBHZXQgTGluZSBDb250cm9sIFJlZ2lzdGVyIChMQ1IpICovCisjZGVmaW5lIE1DVF9VMjMyX0dFVF9MSU5FX0NUUkxfU0laRSAgICAgMSAgLyogLi4uIG5vdCB1c2VkIGJ5IHRoaXMgZHJpdmVyICovCisKKyNkZWZpbmUgTUNUX1UyMzJfU0VUX0JBVURfUkFURV9SRVFVRVNUCTUgIC8qIFNldCBCYXVkIFJhdGUgRGl2aXNvciAqLworI2RlZmluZSBNQ1RfVTIzMl9TRVRfQkFVRF9SQVRFX1NJWkUgICAgIDQKKworI2RlZmluZSBNQ1RfVTIzMl9TRVRfTElORV9DVFJMX1JFUVVFU1QJNyAgLyogU2V0IExpbmUgQ29udHJvbCBSZWdpc3RlciAoTENSKSAqLworI2RlZmluZSBNQ1RfVTIzMl9TRVRfTElORV9DVFJMX1NJWkUgICAgIDEKKworI2RlZmluZSBNQ1RfVTIzMl9TRVRfTU9ERU1fQ1RSTF9SRVFVRVNUCTEwIC8qIFNldCBNb2RlbSBDb250cm9sIFJlZ2lzdGVyIChNQ1IpICovCisjZGVmaW5lIE1DVF9VMjMyX1NFVF9NT0RFTV9DVFJMX1NJWkUgICAgMQorCisvKiBUaGlzIFVTQiBkZXZpY2UgcmVxdWVzdCBjb2RlIGlzIG5vdCB3ZWxsIHVuZGVyc3Rvb2QuICBJdCBpcyB0cmFuc21pdHRlZCBieQorICAgdGhlIE1DVC1zdXBwbGllZCBXaW5kb3dzIGRyaXZlciB3aGVuZXZlciB0aGUgYmF1ZCByYXRlIGNoYW5nZXMuIAorKi8KKyNkZWZpbmUgTUNUX1UyMzJfU0VUX1VOS05PV04xX1JFUVVFU1QgICAxMSAgLyogVW5rbm93biBmdW5jdGlvbmFsaXR5ICovCisjZGVmaW5lIE1DVF9VMjMyX1NFVF9VTktOT1dOMV9TSVpFICAgICAgIDEKKworLyogVGhpcyBVU0IgZGV2aWNlIHJlcXVlc3QgY29kZSBpcyBub3Qgd2VsbCB1bmRlcnN0b29kLiAgSXQgaXMgdHJhbnNtaXR0ZWQgYnkKKyAgIHRoZSBNQ1Qtc3VwcGxpZWQgV2luZG93cyBkcml2ZXIgd2hlbmV2ZXIgdGhlIGJhdWQgcmF0ZSBjaGFuZ2VzLiAKKyAgIAorICAgV2l0aG91dCB0aGlzIFVTQiBkZXZpY2UgcmVxdWVzdCwgdGhlIFVTQi9SUy0yMzIgYWRhcHRlciB3aWxsIG5vdCB3cml0ZSB0bworICAgUlMtMjMyIGRldmljZXMgd2hpY2ggZG8gbm90IGFzc2VydCB0aGUgJ0NUUycgc2lnbmFsLgorKi8KKyNkZWZpbmUgTUNUX1UyMzJfU0VUX1VOS05PV04yX1JFUVVFU1QgICAxMiAgLyogVW5rbm93biBmdW5jdGlvbmFsaXR5ICovCisjZGVmaW5lIE1DVF9VMjMyX1NFVF9VTktOT1dOMl9TSVpFICAgICAgIDEKKworLyoKKyAqIEJhdWQgcmF0ZSAoZGl2aXNvcikKKyAqIEFjdHVhbGx5LCB0aGVyZSBhcmUgdHdvIG9mIHRoZW0sIE1DVCB3ZWJzaXRlIGNhbGxzIHRoZW0gIlBoaWxpcHMgc29sdXRpb24iCisgKiBhbmQgIkludGVsIHNvbHV0aW9uIi4gVGhleSBhcmUgdGhlIHJlZ3VsYXIgTUNUIGFuZCAiU2l0ZWNvbSIgZm9yIHVzLgorICogVGhpcyBpcyBwb2ludGxlc3MgdG8gZG9jdW1lbnQgaW4gdGhlIGhlYWRlciwgc2VlIHRoZSBjb2RlIGZvciB0aGUgYml0cy4KKyAqLworc3RhdGljIGludCBtY3RfdTIzMl9jYWxjdWxhdGVfYmF1ZF9yYXRlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGludCB2YWx1ZSk7CisKKy8qCisgKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKExDUikKKyAqLworI2RlZmluZSBNQ1RfVTIzMl9TRVRfQlJFQUsgICAgICAgICAgICAgIDB4NDAKKworI2RlZmluZSBNQ1RfVTIzMl9QQVJJVFlfU1BBQ0UJCTB4MzgKKyNkZWZpbmUgTUNUX1UyMzJfUEFSSVRZX01BUksJCTB4MjgKKyNkZWZpbmUgTUNUX1UyMzJfUEFSSVRZX0VWRU4JCTB4MTgKKyNkZWZpbmUgTUNUX1UyMzJfUEFSSVRZX09ERAkJMHgwOAorI2RlZmluZSBNQ1RfVTIzMl9QQVJJVFlfTk9ORQkJMHgwMAorCisjZGVmaW5lIE1DVF9VMjMyX0RBVEFfQklUU181ICAgICAgICAgICAgMHgwMAorI2RlZmluZSBNQ1RfVTIzMl9EQVRBX0JJVFNfNiAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgTUNUX1UyMzJfREFUQV9CSVRTXzcgICAgICAgICAgICAweDAyCisjZGVmaW5lIE1DVF9VMjMyX0RBVEFfQklUU184ICAgICAgICAgICAgMHgwMworCisjZGVmaW5lIE1DVF9VMjMyX1NUT1BfQklUU18yICAgICAgICAgICAgMHgwNAorI2RlZmluZSBNQ1RfVTIzMl9TVE9QX0JJVFNfMSAgICAgICAgICAgIDB4MDAKKworLyoKKyAqIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIgKE1DUikKKyAqLworI2RlZmluZSBNQ1RfVTIzMl9NQ1JfTk9ORSAgICAgICAgICAgICAgIDB4OCAgICAgLyogRGVhY3RpdmF0ZSBEVFIgYW5kIFJUUyAqLworI2RlZmluZSBNQ1RfVTIzMl9NQ1JfUlRTICAgICAgICAgICAgICAgIDB4YSAgICAgLyogQWN0aXZhdGUgUlRTICovCisjZGVmaW5lIE1DVF9VMjMyX01DUl9EVFIgICAgICAgICAgICAgICAgMHg5ICAgICAvKiBBY3RpdmF0ZSBEVFIgKi8KKworLyoKKyAqIE1vZGVtIFN0YXR1cyBSZWdpc3RlciAoTVNSKQorICovCisjZGVmaW5lIE1DVF9VMjMyX01TUl9JTkRFWCAgICAgICAgICAgICAgMHgwICAgICAvKiBkYXRhW2luZGV4XSAqLworI2RlZmluZSBNQ1RfVTIzMl9NU1JfQ0QgICAgICAgICAgICAgICAgIDB4ODAgICAgLyogQ3VycmVudCBDRCAqLworI2RlZmluZSBNQ1RfVTIzMl9NU1JfUkkgICAgICAgICAgICAgICAgIDB4NDAgICAgLyogQ3VycmVudCBSSSAqLworI2RlZmluZSBNQ1RfVTIzMl9NU1JfRFNSICAgICAgICAgICAgICAgIDB4MjAgICAgLyogQ3VycmVudCBEU1IgKi8KKyNkZWZpbmUgTUNUX1UyMzJfTVNSX0NUUyAgICAgICAgICAgICAgICAweDEwICAgIC8qIEN1cnJlbnQgQ1RTICovCisjZGVmaW5lIE1DVF9VMjMyX01TUl9EQ0QgICAgICAgICAgICAgICAgMHgwOCAgICAvKiBEZWx0YSBDRCAqLworI2RlZmluZSBNQ1RfVTIzMl9NU1JfRFJJICAgICAgICAgICAgICAgIDB4MDQgICAgLyogRGVsdGEgUkkgKi8KKyNkZWZpbmUgTUNUX1UyMzJfTVNSX0REU1IgICAgICAgICAgICAgICAweDAyICAgIC8qIERlbHRhIERTUiAqLworI2RlZmluZSBNQ1RfVTIzMl9NU1JfRENUUyAgICAgICAgICAgICAgIDB4MDEgICAgLyogRGVsdGEgQ1RTICovCisKKy8qCisgKiBMaW5lIFN0YXR1cyBSZWdpc3RlciAoTFNSKQorICovCisjZGVmaW5lIE1DVF9VMjMyX0xTUl9JTkRFWCAgICAgICAgICAgICAgMSAgICAgICAvKiBkYXRhW2luZGV4XSAqLworI2RlZmluZSBNQ1RfVTIzMl9MU1JfRVJSICAgICAgICAgICAgICAgIDB4ODAgICAgLyogT0UgfCBQRSB8IEZFIHwgQkkgKi8KKyNkZWZpbmUgTUNUX1UyMzJfTFNSX1RFTVQgICAgICAgICAgICAgICAweDQwICAgIC8qIHRyYW5zbWl0IHJlZ2lzdGVyIGVtcHR5ICovCisjZGVmaW5lIE1DVF9VMjMyX0xTUl9USFJFICAgICAgICAgICAgICAgMHgyMCAgICAvKiB0cmFuc21pdCBob2xkaW5nIHJlZ2lzdGVyIGVtcHR5ICovCisjZGVmaW5lIE1DVF9VMjMyX0xTUl9CSSAgICAgICAgICAgICAgICAgMHgxMCAgICAvKiBicmVhayBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgTUNUX1UyMzJfTFNSX0ZFICAgICAgICAgICAgICAgICAweDA4ICAgIC8qIGZyYW1pbmcgZXJyb3IgKi8KKyNkZWZpbmUgTUNUX1UyMzJfTFNSX09FICAgICAgICAgICAgICAgICAweDAyICAgIC8qIG92ZXJydW4gZXJyb3IgKi8KKyNkZWZpbmUgTUNUX1UyMzJfTFNSX1BFICAgICAgICAgICAgICAgICAweDA0ICAgIC8qIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBNQ1RfVTIzMl9MU1JfT0UgICAgICAgICAgICAgICAgIDB4MDIgICAgLyogb3ZlcnJ1biBlcnJvciAqLworI2RlZmluZSBNQ1RfVTIzMl9MU1JfRFIgICAgICAgICAgICAgICAgIDB4MDEgICAgLyogcmVjZWl2ZSBkYXRhIHJlYWR5ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRlY2huaWNhbCBTcGVjaWZpY2F0aW9uIHJldmVyc2UgZW5naW5lZXJlZCB3aXRoIFNuaWZmVVNCIG9uIFdpbmRvd3M5OAorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogIFRoZSB0ZWNobmljYWwgZGV0YWlscyBvZiB0aGUgZGV2aWNlIGhhdmUgYmVlbiBhY3F1aXJlZCBiZSB1c2luZyAiU25pZmZVU0IiCisgKiAgYW5kIHRoZSB2ZW5kb3Itc3VwcGxpZWQgZGV2aWNlIGRyaXZlciAodmVyc2lvbiAyLjNBKSB1bmRlciBXaW5kb3dzOTguIFRvCisgKiAgaWRlbnRpZnkgdGhlIFVTQiB2ZW5kb3Itc3BlY2lmaWMgcmVxdWVzdHMgYW5kIHRvIGFzc2lnbiB0aGVtIHRvIHRlcm1pbmFsIAorICogIHNldHRpbmdzIChmbG93IGNvbnRyb2wsIGJhdWQgcmF0ZSwgZXRjLikgdGhlIHByb2dyYW0gIlNlcmlhbFNldHRpbmdzIiBmcm9tCisgKiAgV2lsbGlhbSBHLiBHcmVhdGhvdXNlIGhhcyBiZWVuIHByb3ZlbiB0byBiZSB2ZXJ5IHVzZWZ1bC4gSSBhbHNvIHVzZWQgdGhlCisgKiAgV2luOTggIkh5cGVyVGVybWluYWwiIGFuZCAidXNiLXJvYm90IiBvbiBMaW51eCBmb3IgdGVzdGluZy4gVGhlIHJlc3VsdHMgYW5kIAorICogIG9ic2VydmF0aW9ucyBhcmUgc3VtbWFyaXplZCBiZWxvdzoKKyAqCisgKiAgVGhlIFVTQiByZXF1ZXN0cyBzZWVtIHRvIGJlIGRpcmVjdGx5IG1hcHBlZCB0byB0aGUgcmVnaXN0ZXJzIG9mIGEgODI1MCwKKyAqICAxNjQ1MCBvciAxNjU1MCBVQVJULiBUaGUgRnJlZUJTRCBoYW5kYm9vayAoYXBwZW5kaXggRi40ICJJbnB1dC9PdXRwdXQKKyAqICBkZXZpY2VzIikgY29udGFpbnMgYSBjb21wcmVoZW5zaXZlIGRlc2NyaXB0aW9uIG9mIFVBUlRzIGFuZCBpdHMgcmVnaXN0ZXJzLgorICogIFRoZSBiaXQgZGVzY3JpcHRpb25zIGFyZSBhY3R1YWxseSB0YWtlbiBmcm9tIHRoZXJlLgorICoKKyAqCisgKiBCYXVkIHJhdGUgKGRpdmlzb3IpCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogICBCbVJlcXVlc3RUeXBlOiAgMHg0MCAoMDEwMCAwMDAwQikKKyAqICAgYlJlcXVlc3Q6ICAgICAgIDB4MDUKKyAqICAgd1ZhbHVlOiAgICAgICAgIDB4MDAwMAorICogICB3SW5kZXg6ICAgICAgICAgMHgwMDAwCisgKiAgIHdMZW5ndGg6ICAgICAgICAweDAwMDQKKyAqICAgRGF0YTogICAgICAgICAgIGRpdmlzb3IgPSAxMTUyMDAgLyBiYXVkX3JhdGUKKyAqCisgKiAgIFNuaWZmVVNCIG9ic2VydmF0aW9ucyAoTm92IDIwMDMpOiBDb250cmFyeSB0byB0aGUgJ3dMZW5ndGgnIHZhbHVlIG9mIDQKKyAqICAgc2hvd24gYWJvdmUsIG9ic2VydmF0aW9ucyB3aXRoIGEgQmVsa2luIEY1VTEwOSBhZGFwdGVyLCB1c2luZyB0aGUKKyAqICAgTUNULXN1cHBsaWVkIFdpbmRvd3M5OCBkcml2ZXIgKFUyU1BPUlQuVlhELCAiRmlsZSB2ZXJzaW9uOiAxLjIxUC4wMTA0IGZvcgorICogICBXaW45OC9NZSIpLCBzaG93IHRoaXMgcmVxdWVzdCBoYXMgYSBsZW5ndGggb2YgMSBieXRlLCBwcmVzdW1hYmx5IGJlY2F1c2UKKyAqICAgb2YgdGhlIGZhY3QgdGhhdCB0aGUgQmVsa2luIGFkYXB0ZXIgYW5kIHRoZSAnU2l0ZWNvbSBVMjMyLVAyNScgYWRhcHRlcgorICogICB1c2UgYSBiYXVkLXJhdGUgY29kZSBpbnN0ZWFkIG9mIGEgY29udmVudGlvbmFsIFJTLTIzMiBiYXVkIHJhdGUgZGl2aXNvci4KKyAqICAgVGhlIGN1cnJlbnQgc291cmNlIGNvZGUgZm9yIHRoaXMgZHJpdmVyIGRvZXMgbm90IHJlZmxlY3QgdGhpcyBmYWN0LCBidXQKKyAqICAgdGhlIGRyaXZlciB3b3JrcyBmaW5lIHdpdGggdGhpcyBhZGFwdGVyL2RyaXZlciBjb21iaW5hdGlvbiBub25ldGhlbGVzcy4KKyAqCisgKgorICogTGluZSBDb250cm9sIFJlZ2lzdGVyIChMQ1IpCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgQm1SZXF1ZXN0VHlwZTogIDB4NDAgKDAxMDAgMDAwMEIpICAgIDB4YzAgKDExMDAgMDAwMEIpCisgKiAgYlJlcXVlc3Q6ICAgICAgIDB4MDcgICAgICAgICAgICAgICAgIDB4MDYKKyAqICB3VmFsdWU6ICAgICAgICAgMHgwMDAwCisgKiAgd0luZGV4OiAgICAgICAgIDB4MDAwMAorICogIHdMZW5ndGg6ICAgICAgICAweDAwMDEKKyAqICBEYXRhOiAgICAgICAgICAgTENSIChzZWUgYmVsb3cpCisgKgorICogIEJpdCA3OiBEaXZpc29yIExhdGNoIEFjY2VzcyBCaXQgKERMQUIpLiBXaGVuIHNldCwgYWNjZXNzIHRvIHRoZSBkYXRhCisgKiAgCSAgIHRyYW5zbWl0L3JlY2VpdmUgcmVnaXN0ZXIgKFRIUi9SQlIpIGFuZCB0aGUgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgorICogIAkgICAoSUVSKSBpcyBkaXNhYmxlZC4gQW55IGFjY2VzcyB0byB0aGVzZSBwb3J0cyBpcyBub3cgcmVkaXJlY3RlZCB0byB0aGUKKyAqICAJICAgRGl2aXNvciBMYXRjaCBSZWdpc3RlcnMuIFNldHRpbmcgdGhpcyBiaXQsIGxvYWRpbmcgdGhlIERpdmlzb3IKKyAqICAJICAgUmVnaXN0ZXJzLCBhbmQgY2xlYXJpbmcgRExBQiBzaG91bGQgYmUgZG9uZSB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKiAgQml0IDY6IFNldCBCcmVhay4gV2hlbiBzZXQgdG8gIjEiLCB0aGUgdHJhbnNtaXR0ZXIgYmVnaW5zIHRvIHRyYW5zbWl0CisgKiAgCSAgIGNvbnRpbnVvdXMgU3BhY2luZyB1bnRpbCB0aGlzIGJpdCBpcyBzZXQgdG8gIjAiLiBUaGlzIG92ZXJyaWRlcyBhbnkKKyAqICAJICAgYml0cyBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIGJlaW5nIHRyYW5zbWl0dGVkLgorICogIEJpdCA1OiBTdGljayBQYXJpdHkuIFdoZW4gcGFyaXR5IGlzIGVuYWJsZWQsIHNldHRpbmcgdGhpcyBiaXQgY2F1c2VzIHBhcml0eQorICogIAkgICB0byBhbHdheXMgYmUgIjEiIG9yICIwIiwgYmFzZWQgb24gdGhlIHZhbHVlIG9mIEJpdCA0LgorICogIEJpdCA0OiBFdmVuIFBhcml0eSBTZWxlY3QgKEVQUykuIFdoZW4gcGFyaXR5IGlzIGVuYWJsZWQgYW5kIEJpdCA1IGlzICIwIiwKKyAqICAJICAgc2V0dGluZyB0aGlzIGJpdCBjYXVzZXMgZXZlbiBwYXJpdHkgdG8gYmUgdHJhbnNtaXR0ZWQgYW5kIGV4cGVjdGVkLgorICogIAkgICBPdGhlcndpc2UsIG9kZCBwYXJpdHkgaXMgdXNlZC4KKyAqICBCaXQgMzogUGFyaXR5IEVuYWJsZSAoUEVOKS4gV2hlbiBzZXQgdG8gIjEiLCBhIHBhcml0eSBiaXQgaXMgaW5zZXJ0ZWQKKyAqICAJICAgYmV0d2VlbiB0aGUgbGFzdCBiaXQgb2YgdGhlIGRhdGEgYW5kIHRoZSBTdG9wIEJpdC4gVGhlIFVBUlQgd2lsbCBhbHNvCisgKiAgCSAgIGV4cGVjdCBwYXJpdHkgdG8gYmUgcHJlc2VudCBpbiB0aGUgcmVjZWl2ZWQgZGF0YS4KKyAqICBCaXQgMjogTnVtYmVyIG9mIFN0b3AgQml0cyAoU1RCKS4gSWYgc2V0IHRvICIxIiBhbmQgdXNpbmcgNS1iaXQgZGF0YSB3b3JkcywKKyAqICAJICAgMS41IFN0b3AgQml0cyBhcmUgdHJhbnNtaXR0ZWQgYW5kIGV4cGVjdGVkIGluIGVhY2ggZGF0YSB3b3JkLiBGb3IKKyAqICAJICAgNiwgNyBhbmQgOC1iaXQgZGF0YSB3b3JkcywgMiBTdG9wIEJpdHMgYXJlIHRyYW5zbWl0dGVkIGFuZCBleHBlY3RlZC4KKyAqICAJICAgV2hlbiB0aGlzIGJpdCBpcyBzZXQgdG8gIjAiLCBvbmUgU3RvcCBCaXQgaXMgdXNlZCBvbiBlYWNoIGRhdGEgd29yZC4KKyAqICBCaXQgMTogV29yZCBMZW5ndGggU2VsZWN0IEJpdCAjMSAoV0xTQjEpCisgKiAgQml0IDA6IFdvcmQgTGVuZ3RoIFNlbGVjdCBCaXQgIzAgKFdMU0IwKQorICogIAkgICBUb2dldGhlciB0aGVzZSBiaXRzIHNwZWNpZnkgdGhlIG51bWJlciBvZiBiaXRzIGluIGVhY2ggZGF0YSB3b3JkLgorICogIAkgICAgIDEgMCAgV29yZCBMZW5ndGgKKyAqICAJICAgICAwIDAgIDUgRGF0YSBCaXRzCisgKiAgCSAgICAgMCAxICA2IERhdGEgQml0cworICogIAkgICAgIDEgMCAgNyBEYXRhIEJpdHMKKyAqICAJICAgICAxIDEgIDggRGF0YSBCaXRzCisgKgorICogIFNuaWZmVVNCIG9ic2VydmF0aW9uczogQml0IDcgc2VlbXMgbm90IHRvIGJlIHVzZWQuIFRoZXJlIHNlZW0gdG8gYmUgdHdvIGJ1Z3MKKyAqICBpbiB0aGUgV2luOTggZHJpdmVyOiB0aGUgYnJlYWsgZG9lcyBub3Qgd29yayAoYml0IDYgaXMgbm90IGFzc2VydGVkKSBhbmQgdGhlCisgKiAgc3RpY2sgcGFyaXR5IGJpdCBpcyBub3QgY2xlYXJlZCB3aGVuIHNldCBvbmNlLiBUaGUgTENSIGNhbiBhbHNvIGJlIHJlYWQKKyAqICBiYWNrIHdpdGggVVNCIHJlcXVlc3QgNiBidXQgdGhpcyBoYXMgbmV2ZXIgYmVlbiBvYnNlcnZlZCB3aXRoIFNuaWZmVVNCLgorICoKKyAqCisgKiBNb2RlbSBDb250cm9sIFJlZ2lzdGVyIChNQ1IpCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogIEJtUmVxdWVzdFR5cGU6ICAweDQwICAoMDEwMCAwMDAwQikKKyAqICBiUmVxdWVzdDogICAgICAgMHgwYQorICogIHdWYWx1ZTogICAgICAgICAweDAwMDAKKyAqICB3SW5kZXg6ICAgICAgICAgMHgwMDAwCisgKiAgd0xlbmd0aDogICAgICAgIDB4MDAwMQorICogIERhdGE6ICAgICAgICAgICBNQ1IgKEJpdCA0Li43LCBzZWUgYmVsb3cpCisgKgorICogIEJpdCA3OiBSZXNlcnZlZCwgYWx3YXlzIDAuCisgKiAgQml0IDY6IFJlc2VydmVkLCBhbHdheXMgMC4KKyAqICBCaXQgNTogUmVzZXJ2ZWQsIGFsd2F5cyAwLgorICogIEJpdCA0OiBMb29wLUJhY2sgRW5hYmxlLiBXaGVuIHNldCB0byAiMSIsIHRoZSBVQVJUIHRyYW5zbWl0dGVyIGFuZCByZWNlaXZlcgorICogIAkgICBhcmUgaW50ZXJuYWxseSBjb25uZWN0ZWQgdG9nZXRoZXIgdG8gYWxsb3cgZGlhZ25vc3RpYyBvcGVyYXRpb25zLiBJbgorICogIAkgICBhZGRpdGlvbiwgdGhlIFVBUlQgbW9kZW0gY29udHJvbCBvdXRwdXRzIGFyZSBjb25uZWN0ZWQgdG8gdGhlIFVBUlQKKyAqICAJICAgbW9kZW0gY29udHJvbCBpbnB1dHMuIENUUyBpcyBjb25uZWN0ZWQgdG8gUlRTLCBEVFIgaXMgY29ubmVjdGVkIHRvCisgKiAgCSAgIERTUiwgT1VUMSBpcyBjb25uZWN0ZWQgdG8gUkksIGFuZCBPVVQgMiBpcyBjb25uZWN0ZWQgdG8gRENELgorICogIEJpdCAzOiBPVVQgMi4gQW4gYXV4aWxpYXJ5IG91dHB1dCB0aGF0IHRoZSBob3N0IHByb2Nlc3NvciBtYXkgc2V0IGhpZ2ggb3IKKyAqICAJICAgbG93LiBJbiB0aGUgSUJNIFBDIHNlcmlhbCBhZGFwdGVyIChhbmQgbW9zdCBjbG9uZXMpLCBPVVQgMiBpcyB1c2VkCisgKiAgCSAgIHRvIHRyaS1zdGF0ZSAoZGlzYWJsZSkgdGhlIGludGVycnVwdCBzaWduYWwgZnJvbSB0aGUKKyAqICAJICAgODI1MC8xNjQ1MC8xNjU1MCBVQVJULgorICogIEJpdCAyOiBPVVQgMS4gQW4gYXV4aWxpYXJ5IG91dHB1dCB0aGF0IHRoZSBob3N0IHByb2Nlc3NvciBtYXkgc2V0IGhpZ2ggb3IKKyAqICAJICAgbG93LiBUaGlzIG91dHB1dCBpcyBub3QgdXNlZCBvbiB0aGUgSUJNIFBDIHNlcmlhbCBhZGFwdGVyLgorICogIEJpdCAxOiBSZXF1ZXN0IHRvIFNlbmQgKFJUUykuIFdoZW4gc2V0IHRvICIxIiwgdGhlIG91dHB1dCBvZiB0aGUgVUFSVCAtUlRTCisgKiAgCSAgIGxpbmUgaXMgTG93IChBY3RpdmUpLgorICogIEJpdCAwOiBEYXRhIFRlcm1pbmFsIFJlYWR5IChEVFIpLiBXaGVuIHNldCB0byAiMSIsIHRoZSBvdXRwdXQgb2YgdGhlIFVBUlQKKyAqICAJICAgLURUUiBsaW5lIGlzIExvdyAoQWN0aXZlKS4KKyAqCisgKiAgU25pZmZVU0Igb2JzZXJ2YXRpb25zOiBCaXQgMiBhbmQgNCBzZWVtIG5vdCB0byBiZSB1c2VkIGJ1dCBiaXQgMyBoYXMgYmVlbgorICogIHNlZW4gX2Fsd2F5c18gc2V0LgorICoKKyAqCisgKiBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIgKE1TUikKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqICBCbVJlcXVlc3RUeXBlOiAgMHhjMCAgKDExMDAgMDAwMEIpCisgKiAgYlJlcXVlc3Q6ICAgICAgIDB4MDIKKyAqICB3VmFsdWU6ICAgICAgICAgMHgwMDAwCisgKiAgd0luZGV4OiAgICAgICAgIDB4MDAwMAorICogIHdMZW5ndGg6ICAgICAgICAweDAwMDEKKyAqICBEYXRhOiAgICAgICAgICAgTVNSIChzZWUgYmVsb3cpCisgKgorICogIEJpdCA3OiBEYXRhIENhcnJpZXIgRGV0ZWN0IChDRCkuIFJlZmxlY3RzIHRoZSBzdGF0ZSBvZiB0aGUgRENEIGxpbmUgb24gdGhlCisgKiAgCSAgIFVBUlQuCisgKiAgQml0IDY6IFJpbmcgSW5kaWNhdG9yIChSSSkuIFJlZmxlY3RzIHRoZSBzdGF0ZSBvZiB0aGUgUkkgbGluZSBvbiB0aGUgVUFSVC4KKyAqICBCaXQgNTogRGF0YSBTZXQgUmVhZHkgKERTUikuIFJlZmxlY3RzIHRoZSBzdGF0ZSBvZiB0aGUgRFNSIGxpbmUgb24gdGhlIFVBUlQuCisgKiAgQml0IDQ6IENsZWFyIFRvIFNlbmQgKENUUykuIFJlZmxlY3RzIHRoZSBzdGF0ZSBvZiB0aGUgQ1RTIGxpbmUgb24gdGhlIFVBUlQuCisgKiAgQml0IDM6IERlbHRhIERhdGEgQ2FycmllciBEZXRlY3QgKEREQ0QpLiBTZXQgdG8gIjEiIGlmIHRoZSAtRENEIGxpbmUgaGFzCisgKiAgCSAgIGNoYW5nZWQgc3RhdGUgb25lIG1vcmUgbW9yZSB0aW1lcyBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoZSBNU1Igd2FzCisgKiAgCSAgIHJlYWQgYnkgdGhlIGhvc3QuCisgKiAgQml0IDI6IFRyYWlsaW5nIEVkZ2UgUmluZyBJbmRpY2F0b3IgKFRFUkkpLiBTZXQgdG8gIjEiIGlmIHRoZSAtUkkgbGluZSBoYXMKKyAqICAJICAgaGFkIGEgbG93IHRvIGhpZ2ggdHJhbnNpdGlvbiBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoZSBNU1Igd2FzIHJlYWQgYnkKKyAqICAJICAgdGhlIGhvc3QuCisgKiAgQml0IDE6IERlbHRhIERhdGEgU2V0IFJlYWR5IChERFNSKS4gU2V0IHRvICIxIiBpZiB0aGUgLURTUiBsaW5lIGhhcyBjaGFuZ2VkCisgKiAgCSAgIHN0YXRlIG9uZSBtb3JlIG1vcmUgdGltZXMgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgTVNSIHdhcyByZWFkIGJ5IHRoZQorICogIAkgICBob3N0LgorICogIEJpdCAwOiBEZWx0YSBDbGVhciBUbyBTZW5kIChEQ1RTKS4gU2V0IHRvICIxIiBpZiB0aGUgLUNUUyBsaW5lIGhhcyBjaGFuZ2VkCisgKiAgCSAgIHN0YXRlIG9uZSBtb3JlIHRpbWVzIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlIE1TUiB3YXMgcmVhZCBieSB0aGUKKyAqICAJICAgaG9zdC4KKyAqCisgKiAgU25pZmZVU0Igb2JzZXJ2YXRpb25zOiB0aGUgTVNSIGlzIGFsc28gcmV0dXJuZWQgYXMgZmlyc3QgYnl0ZSBvbiB0aGUKKyAqICBpbnRlcnJ1cHQtaW4gZW5kcG9pbnQgMHg4MyB0byBzaWduYWwgY2hhbmdlcyBvZiBtb2RlbSBzdGF0dXMgbGluZXMuIFRoZSBVU0IKKyAqICByZXF1ZXN0IHRvIHJlYWQgTVNSIGNhbm5vdCBiZSBhcHBsaWVkIGR1cmluZyBub3JtYWwgZGV2aWNlIG9wZXJhdGlvbi4KKyAqCisgKgorICogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKExTUikKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogIEJpdCA3ICAgRXJyb3IgaW4gUmVjZWl2ZXIgRklGTy4gT24gdGhlIDgyNTAvMTY0NTAgVUFSVCwgdGhpcyBiaXQgaXMgemVyby4KKyAqICAJICAgIFRoaXMgYml0IGlzIHNldCB0byAiMSIgd2hlbiBhbnkgb2YgdGhlIGJ5dGVzIGluIHRoZSBGSUZPIGhhdmUgb25lIG9yCisgKiAgCSAgICBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgZXJyb3IgY29uZGl0aW9uczogUEUsIEZFLCBvciBCSS4KKyAqICBCaXQgNiAgIFRyYW5zbWl0dGVyIEVtcHR5IChURU1UKS4gV2hlbiBzZXQgdG8gIjEiLCB0aGVyZSBhcmUgbm8gd29yZHMKKyAqICAJICAgIHJlbWFpbmluZyBpbiB0aGUgdHJhbnNtaXQgRklGTyBvciB0aGUgdHJhbnNtaXQgc2hpZnQgcmVnaXN0ZXIuIFRoZQorICogIAkgICAgdHJhbnNtaXR0ZXIgaXMgY29tcGxldGVseSBpZGxlLgorICogIEJpdCA1ICAgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciBFbXB0eSAoVEhSRSkuIFdoZW4gc2V0IHRvICIxIiwgdGhlIEZJRk8KKyAqICAJICAgIChvciBob2xkaW5nIHJlZ2lzdGVyKSBub3cgaGFzIHJvb20gZm9yIGF0IGxlYXN0IG9uZSBhZGRpdGlvbmFsIHdvcmQKKyAqICAJICAgIHRvIHRyYW5zbWl0LiBUaGUgdHJhbnNtaXR0ZXIgbWF5IHN0aWxsIGJlIHRyYW5zbWl0dGluZyB3aGVuIHRoaXMgYml0CisgKiAgCSAgICBpcyBzZXQgdG8gIjEiLgorICogIEJpdCA0ICAgQnJlYWsgSW50ZXJydXB0IChCSSkuIFRoZSByZWNlaXZlciBoYXMgZGV0ZWN0ZWQgYSBCcmVhayBzaWduYWwuCisgKiAgQml0IDMgICBGcmFtaW5nIEVycm9yIChGRSkuIEEgU3RhcnQgQml0IHdhcyBkZXRlY3RlZCBidXQgdGhlIFN0b3AgQml0IGRpZCBub3QKKyAqICAJICAgIGFwcGVhciBhdCB0aGUgZXhwZWN0ZWQgdGltZS4gVGhlIHJlY2VpdmVkIHdvcmQgaXMgcHJvYmFibHkgZ2FyYmxlZC4KKyAqICBCaXQgMiAgIFBhcml0eSBFcnJvciAoUEUpLiBUaGUgcGFyaXR5IGJpdCB3YXMgaW5jb3JyZWN0IGZvciB0aGUgd29yZCByZWNlaXZlZC4KKyAqICBCaXQgMSAgIE92ZXJydW4gRXJyb3IgKE9FKS4gQSBuZXcgd29yZCB3YXMgcmVjZWl2ZWQgYW5kIHRoZXJlIHdhcyBubyByb29tIGluCisgKiAgCSAgICB0aGUgcmVjZWl2ZSBidWZmZXIuIFRoZSBuZXdseS1hcnJpdmVkIHdvcmQgaW4gdGhlIHNoaWZ0IHJlZ2lzdGVyIGlzCisgKiAgCSAgICBkaXNjYXJkZWQuIE9uIDgyNTAvMTY0NTAgVUFSVHMsIHRoZSB3b3JkIGluIHRoZSBob2xkaW5nIHJlZ2lzdGVyIGlzCisgKiAgCSAgICBkaXNjYXJkZWQgYW5kIHRoZSBuZXdseS0gYXJyaXZlZCB3b3JkIGlzIHB1dCBpbiB0aGUgaG9sZGluZyByZWdpc3Rlci4KKyAqICBCaXQgMCAgIERhdGEgUmVhZHkgKERSKS4gT25lIG9yIG1vcmUgd29yZHMgYXJlIGluIHRoZSByZWNlaXZlIEZJRk8gdGhhdCB0aGUKKyAqICAJICAgIGhvc3QgbWF5IHJlYWQuIEEgd29yZCBtdXN0IGJlIGNvbXBsZXRlbHkgcmVjZWl2ZWQgYW5kIG1vdmVkIGZyb20gdGhlCisgKiAgCSAgICBzaGlmdCByZWdpc3RlciBpbnRvIHRoZSBGSUZPIChvciBob2xkaW5nIHJlZ2lzdGVyIGZvciA4MjUwLzE2NDUwCisgKiAgCSAgICBkZXNpZ25zKSBiZWZvcmUgdGhpcyBiaXQgaXMgc2V0LgorICoKKyAqICBTbmlmZlVTQiBvYnNlcnZhdGlvbnM6IHRoZSBMU1IgaXMgcmV0dXJuZWQgYXMgc2Vjb25kIGJ5dGUgb24gdGhlIGludGVycnVwdC1pbgorICogIGVuZHBvaW50IDB4ODMgdG8gc2lnbmFsIGVycm9yIGNvbmRpdGlvbnMuIFN1Y2ggZXJyb3JzIGhhdmUgYmVlbiBzZWVuIHdpdGgKKyAqICBtaW5pY29tL3ptb2RlbSB0cmFuc2ZlcnMgKENSQyBlcnJvcnMpLgorICoKKyAqCisgKiBVbmtub3duICMxCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogICBCbVJlcXVlc3RUeXBlOiAgMHg0MCAoMDEwMCAwMDAwQikKKyAqICAgYlJlcXVlc3Q6ICAgICAgIDB4MGIKKyAqICAgd1ZhbHVlOiAgICAgICAgIDB4MDAwMAorICogICB3SW5kZXg6ICAgICAgICAgMHgwMDAwCisgKiAgIHdMZW5ndGg6ICAgICAgICAweDAwMDEKKyAqICAgRGF0YTogICAgICAgICAgIDB4MDAKKyAqCisgKiAgIFNuaWZmVVNCIG9ic2VydmF0aW9ucyAoTm92IDIwMDMpOiBXaXRoIHRoZSBNQ1Qtc3VwcGxpZWQgV2luZG93czk4IGRyaXZlcgorICogICAoVTJTUE9SVC5WWEQsICJGaWxlIHZlcnNpb246IDEuMjFQLjAxMDQgZm9yIFdpbjk4L01lIiksIHRoaXMgcmVxdWVzdAorICogICBvY2N1cnMgaW1tZWRpYXRlbHkgYWZ0ZXIgYSAiQmF1ZCByYXRlIChkaXZpc29yKSIgbWVzc2FnZS4gIEl0IHdhcyBub3QKKyAqICAgb2JzZXJ2ZWQgYXQgYW55IG90aGVyIHRpbWUuICBJdCBpcyB1bmNsZWFyIHdoYXQgcHVycG9zZSB0aGlzIG1lc3NhZ2UKKyAqICAgc2VydmVzLgorICoKKyAqCisgKiBVbmtub3duICMyCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogICBCbVJlcXVlc3RUeXBlOiAgMHg0MCAoMDEwMCAwMDAwQikKKyAqICAgYlJlcXVlc3Q6ICAgICAgIDB4MGMKKyAqICAgd1ZhbHVlOiAgICAgICAgIDB4MDAwMAorICogICB3SW5kZXg6ICAgICAgICAgMHgwMDAwCisgKiAgIHdMZW5ndGg6ICAgICAgICAweDAwMDEKKyAqICAgRGF0YTogICAgICAgICAgIDB4MDAKKyAqCisgKiAgIFNuaWZmVVNCIG9ic2VydmF0aW9ucyAoTm92IDIwMDMpOiBXaXRoIHRoZSBNQ1Qtc3VwcGxpZWQgV2luZG93czk4IGRyaXZlcgorICogICAoVTJTUE9SVC5WWEQsICJGaWxlIHZlcnNpb246IDEuMjFQLjAxMDQgZm9yIFdpbjk4L01lIiksIHRoaXMgcmVxdWVzdAorICogICBvY2N1cnMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdVbmtub3duICMxJyBtZXNzYWdlIChzZWUgYWJvdmUpLiAgSXQgd2FzCisgKiAgIG5vdCBvYnNlcnZlZCBhdCBhbnkgb3RoZXIgdGltZS4gIEl0IGlzIHVuY2xlYXIgd2hhdCBvdGhlciBwdXJwb3NlIChpZgorICogICBhbnkpIHRoaXMgbWVzc2FnZSBtaWdodCBzZXJ2ZSwgYnV0IHdpdGhvdXQgaXQsIHRoZSBVU0IvUlMtMjMyIGFkYXB0ZXIKKyAqICAgd2lsbCBub3Qgd3JpdGUgdG8gUlMtMjMyIGRldmljZXMgd2hpY2ggZG8gbm90IGFzc2VydCB0aGUgJ0NUUycgc2lnbmFsLgorICoKKyAqCisgKiBGbG93IGNvbnRyb2wKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqICBTbmlmZlVTQiBvYnNlcnZhdGlvbnM6IG5vIGZsb3cgY29udHJvbCBzcGVjaWZpYyByZXF1ZXN0cyBoYXZlIGJlZW4gcmVhbGl6ZWQKKyAqICBhcGFydCBmcm9tIERUUi9SVFMgc2V0dGluZ3MuIEJvdGggc2lnbmFscyBhcmUgZHJvcHBlZCBmb3Igbm8gZmxvdyBjb250cm9sCisgKiAgYnV0IGFzc2VydGVkIGZvciBoYXJkd2FyZSBvciBzb2Z0d2FyZSBmbG93IGNvbnRyb2wuCisgKgorICoKKyAqIEVuZHBvaW50IHVzYWdlCisgKiAtLS0tLS0tLS0tLS0tLQorICoKKyAqICBTbmlmZlVTQiBvYnNlcnZhdGlvbnM6IHRoZSBidWxrLW91dCBlbmRwb2ludCAweDEgYW5kIGludGVycnVwdC1pbiBlbmRwb2ludAorICogIDB4ODEgaXMgdXNlZCB0byB0cmFuc21pdCBhbmQgcmVjZWl2ZSBjaGFyYWN0ZXJzLiBUaGUgc2Vjb25kIGludGVycnVwdC1pbiAKKyAqICBlbmRwb2ludCAweDgzIHNpZ25hbHMgZXhjZXB0aW9uYWwgY29uZGl0aW9ucyBsaWtlIG1vZGVtIGxpbmUgY2hhbmdlcyBhbmQgCisgKiAgZXJyb3JzLiBUaGUgZmlyc3QgYnl0ZSByZXR1cm5lZCBpcyB0aGUgTVNSIGFuZCB0aGUgc2Vjb25kIGJ5dGUgdGhlIExTUi4KKyAqCisgKgorICogT3RoZXIgb2JzZXJ2YXRpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgUXVldWVkIGJ1bGsgdHJhbnNmZXJzIGxpa2UgdXNlZCBpbiB2aXNvci5jIGRpZCBub3Qgd29yay4gCisgKiAgCisgKgorICogUHJvcGVydGllcyBvZiB0aGUgVVNCIGRldmljZSB1c2VkIChhcyBmb3VuZCBpbiAvdmFyL2xvZy9tZXNzYWdlcykKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogIE1hbnVmYWN0dXJlcjogTUNUIENvcnBvcmF0aW9uLgorICogIFByb2R1Y3Q6IFVTQi0yMzIgSW50ZXJmYWN0IENvbnRyb2xsZXIKKyAqICBTZXJpYWxOdW1iZXI6IFUyUzIyMDUwCisgKgorICogICAgTGVuZ3RoICAgICAgICAgICAgICA9IDE4CisgKiAgICBEZXNjcmlwdG9yVHlwZSAgICAgID0gMDEKKyAqICAgIFVTQiB2ZXJzaW9uICAgICAgICAgPSAxLjAwCisgKiAgICBWZW5kb3I6UHJvZHVjdCAgICAgID0gMDcxMTowMjEwCisgKiAgICBNYXhQYWNrZXRTaXplMCAgICAgID0gOAorICogICAgTnVtQ29uZmlndXJhdGlvbnMgICA9IDEKKyAqICAgIERldmljZSB2ZXJzaW9uICAgICAgPSAxLjAyCisgKiAgICBEZXZpY2UgQ2xhc3M6U3ViQ2xhc3M6UHJvdG9jb2wgPSAwMDowMDowMAorICogICAgICBQZXItaW50ZXJmYWNlIGNsYXNzZXMKKyAqICBDb25maWd1cmF0aW9uOgorICogICAgYkxlbmd0aCAgICAgICAgICAgICA9ICAgIDkKKyAqICAgIGJEZXNjcmlwdG9yVHlwZSAgICAgPSAgIDAyCisgKiAgICB3VG90YWxMZW5ndGggICAgICAgID0gMDAyNworICogICAgYk51bUludGVyZmFjZXMgICAgICA9ICAgMDEKKyAqICAgIGJDb25maWd1cmF0aW9uVmFsdWUgPSAgIDAxCisgKiAgICBpQ29uZmlndXJhdGlvbiAgICAgID0gICAwMAorICogICAgYm1BdHRyaWJ1dGVzICAgICAgICA9ICAgYzAKKyAqICAgIE1heFBvd2VyICAgICAgICAgICAgPSAgMTAwbUEKKyAqCisgKiAgICBJbnRlcmZhY2U6IDAKKyAqICAgIEFsdGVybmF0ZSBTZXR0aW5nOiAgMAorICogICAgICBiTGVuZ3RoICAgICAgICAgICAgID0gICAgOQorICogICAgICBiRGVzY3JpcHRvclR5cGUgICAgID0gICAwNAorICogICAgICBiSW50ZXJmYWNlTnVtYmVyICAgID0gICAwMAorICogICAgICBiQWx0ZXJuYXRlU2V0dGluZyAgID0gICAwMAorICogICAgICBiTnVtRW5kcG9pbnRzICAgICAgID0gICAwMworICogICAgICBiSW50ZXJmYWNlIENsYXNzOlN1YkNsYXNzOlByb3RvY29sID0gICAwMDowMDowMAorICogICAgICBpSW50ZXJmYWNlICAgICAgICAgID0gICAwMAorICogICAgICBFbmRwb2ludDoKKyAqIAkgIGJMZW5ndGggICAgICAgICAgICAgPSAgICA3CisgKiAJICBiRGVzY3JpcHRvclR5cGUgICAgID0gICAwNQorICogCSAgYkVuZHBvaW50QWRkcmVzcyAgICA9ICAgODEgKGluKQorICogCSAgYm1BdHRyaWJ1dGVzICAgICAgICA9ICAgMDMgKEludGVycnVwdCkKKyAqIAkgIHdNYXhQYWNrZXRTaXplICAgICAgPSAwMDQwCisgKiAJICBiSW50ZXJ2YWwgICAgICAgICAgID0gICAwMgorICogICAgICBFbmRwb2ludDoKKyAqIAkgIGJMZW5ndGggICAgICAgICAgICAgPSAgICA3CisgKiAJICBiRGVzY3JpcHRvclR5cGUgICAgID0gICAwNQorICogCSAgYkVuZHBvaW50QWRkcmVzcyAgICA9ICAgMDEgKG91dCkKKyAqIAkgIGJtQXR0cmlidXRlcyAgICAgICAgPSAgIDAyIChCdWxrKQorICogCSAgd01heFBhY2tldFNpemUgICAgICA9IDAwNDAKKyAqIAkgIGJJbnRlcnZhbCAgICAgICAgICAgPSAgIDAwCisgKiAgICAgIEVuZHBvaW50OgorICogCSAgYkxlbmd0aCAgICAgICAgICAgICA9ICAgIDcKKyAqIAkgIGJEZXNjcmlwdG9yVHlwZSAgICAgPSAgIDA1CisgKiAJICBiRW5kcG9pbnRBZGRyZXNzICAgID0gICA4MyAoaW4pCisgKiAJICBibUF0dHJpYnV0ZXMgICAgICAgID0gICAwMyAoSW50ZXJydXB0KQorICogCSAgd01heFBhY2tldFNpemUgICAgICA9IDAwMDIKKyAqIAkgIGJJbnRlcnZhbCAgICAgICAgICAgPSAgIDAyCisgKgorICoKKyAqIEhhcmR3YXJlIGRldGFpbHMgKGFkZGVkIGJ5IE1hcnRpbiBIYW1pbHRvbiwgMjAwMS8xMi8wNikKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogVGhpcyBpbmZvIHdhcyBnbGVhbmVkIGZyb20gb3BlbmluZyBhIEJlbGtpbiBGNVUxMDkgREI5IFVTQiBzZXJpYWwKKyAqIGFkYXB0b3IsIHdoaWNoIHR1cm5zIG91dCB0byBzaW1wbHkgYmUgYSByZS1iYWRnZWQgVTIzMi1QOS4gIFdlCisgKiBrbm93IHRoaXMgYmVjYXVzZSB0aGVyZSBpcyBhIHN0aWNreSBsYWJlbCBvbiB0aGUgY2lyY3VpdCBib2FyZAorICogd2hpY2ggc2F5cyAiVTIzMi1QOSIgOy0pCisgKiAKKyAqIFRoZSBjaXJjdWl0IGJvYXJkIGluc2lkZSB0aGUgYWRhcHRvciBjb250YWlucyBhIFBoaWxpcHMgUERJVVNCRDEyCisgKiBVU0IgZW5kcG9pbnQgY2hpcCBhbmQgYSBQaGlsbGlwcyBQODdDNTJVQkFBIG1pY3JvY29udHJvbGxlciB3aXRoCisgKiBlbWJlZGRlZCBVQVJULiAgRXhoYXVzdGl2ZSBkb2N1bWVudGF0aW9uIGZvciB0aGVzZSBpcyBhdmFpbGFibGUgYXQ6CisgKgorICogICBodHRwOi8vd3d3LnNlbWljb25kdWN0b3JzLnBoaWxpcHMuY29tL3BpcC9wODdjNTJ1YmFhCisgKiAgIGh0dHA6Ly93d3cuc2VtaWNvbmR1Y3RvcnMucGhpbGlwcy5jb20vcGlwL3BkaXVzYmQxMgorICoKKyAqIFRoYW5rcyB0byBKdWxpYW4gSGlnaGZpZWxkIGZvciB0aGUgcG9pbnRlciB0byB0aGUgUGhpbGlwcyBkYXRhYmFzZS4KKyAqIAorICovCisKKyNlbmRpZiAvKiBfX0xJTlVYX1VTQl9TRVJJQUxfTUNUX1UyMzJfSCAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWNiYTRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYwpAQCAtMCwwICsxLDM2MiBAQAorLyoKKyAqIFVTQiBaeVhFTCBvbW5pLm5ldCBMQ0QgUExVUyBkcml2ZXIKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICoKKyAqIFBsZWFzZSByZXBvcnQgYm90aCBzdWNjZXNzZXMgYW5kIHRyb3VibGVzIHRvIHRoZSBhdXRob3IgYXQgb21uaW5ldEBrcm9haC5jb20KKyAqIAorICogKDA1LzMwLzIwMDEpIGdraAorICoJc3dpdGNoZWQgZnJvbSB1c2luZyBzcGlubG9jayB0byBhIHNlbWFwaG9yZSwgd2hpY2ggZml4ZXMgbG90cyBvZiBwcm9ibGVtcy4KKyAqCisgKiAoMDQvMDgvMjAwMSkgZ2IKKyAqCUlkZW50aWZ5IHZlcnNpb24gb24gbW9kdWxlIGxvYWQuCisgKgorICogKDExLzAxLzIwMDApIEFkYW0gSi4gUmljaHRlcgorICoJdXNiX2RldmljZV9pZCB0YWJsZSBzdXBwb3J0CisgKiAKKyAqICgxMC8wNS8yMDAwKSBna2gKKyAqCUZpeGVkIGJ1ZyB3aXRoIHVyYi0+ZGV2IG5vdCBiZWluZyBzZXQgcHJvcGVybHksIG5vdyB0aGF0IHRoZSB1c2IKKyAqCWNvcmUgbmVlZHMgaXQuCisgKiAKKyAqICgwOC8yOC8yMDAwKSBna2gKKyAqCUFkZGVkIGxvY2tzIGZvciBTTVAgc2FmZW5lc3MuCisgKglGaXhlZCBNT0RfSU5DIGFuZCBNT0RfREVDIGxvZ2ljIGFuZCB0aGUgYWJpbGl0eSB0byBvcGVuIGEgcG9ydCBtb3JlIAorICoJdGhhbiBvbmNlLgorICoJRml4ZWQgcG90ZW50aWFsIHJhY2UgaW4gb21uaW5ldF93cml0ZV9idWxrX2NhbGxiYWNrCisgKgorICogKDA3LzE5LzIwMDApIGdraAorICoJQWRkZWQgbW9kdWxlX2luaXQgYW5kIG1vZHVsZV9leGl0IGZ1bmN0aW9ucyB0byBoYW5kbGUgdGhlIGZhY3QgdGhhdCB0aGlzCisgKglkcml2ZXIgaXMgYSBsb2FkYWJsZSBtb2R1bGUgbm93LgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisKK3N0YXRpYyBpbnQgZGVidWc7CisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjEiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkFsZXNzYW5kcm8gWnVtbW8iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgWnlYRUwgb21uaS5uZXQgTENEIFBMVVMgRHJpdmVyIgorCisjZGVmaW5lIFpZWEVMX1ZFTkRPUl9JRAkJMHgwNTg2CisjZGVmaW5lIFpZWEVMX09NTklORVRfSUQJMHgxMDAwCisjZGVmaW5lIEJUX0lHTklUSU9OUFJPX0lECTB4MjAwMCAgLyogVGhpcyBvbmUgc2VlbXMgdG8gYmUgYSByZS1icmFuZGVkIFp5WEVMIGRldmljZSAqLworCisvKiBmdW5jdGlvbiBwcm90b3R5cGVzICovCitzdGF0aWMgaW50ICBvbW5pbmV0X29wZW4JCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCBvbW5pbmV0X2Nsb3NlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQgb21uaW5ldF9yZWFkX2J1bGtfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgb21uaW5ldF93cml0ZV9idWxrX2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyBpbnQgIG9tbmluZXRfd3JpdGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CitzdGF0aWMgaW50ICBvbW5pbmV0X3dyaXRlX3Jvb20JCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIG9tbmluZXRfc2h1dGRvd24JCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShaWVhFTF9WRU5ET1JfSUQsIFpZWEVMX09NTklORVRfSUQpIH0sCisJeyBVU0JfREVWSUNFKFpZWEVMX1ZFTkRPUl9JRCwgQlRfSUdOSVRJT05QUk9fSUQpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgb21uaW5ldF9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJIm9tbmluZXQiLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGUsCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSB6eXhlbF9vbW5pbmV0X2RldmljZSA9IHsKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCSJaeVhFTCAtIG9tbmkubmV0IGxjZCBwbHVzIHVzYiIsCisJLnNob3J0X25hbWUgPQkJIm9tbmluZXQiLAorCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkubnVtX2ludGVycnVwdF9pbiA9CTEsCisJLm51bV9idWxrX2luID0JCTEsCisJLm51bV9idWxrX291dCA9CQkyLAorCS5udW1fcG9ydHMgPQkJMSwKKwkub3BlbiA9CQkJb21uaW5ldF9vcGVuLAorCS5jbG9zZSA9CQlvbW5pbmV0X2Nsb3NlLAorCS53cml0ZSA9CQlvbW5pbmV0X3dyaXRlLAorCS53cml0ZV9yb29tID0JCW9tbmluZXRfd3JpdGVfcm9vbSwKKwkucmVhZF9idWxrX2NhbGxiYWNrID0Jb21uaW5ldF9yZWFkX2J1bGtfY2FsbGJhY2ssCisJLndyaXRlX2J1bGtfY2FsbGJhY2sgPQlvbW5pbmV0X3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJLnNodXRkb3duID0JCW9tbmluZXRfc2h1dGRvd24sCit9OworCisKKy8qIFRoZSBwcm90b2NvbC4KKyAqCisgKiBUaGUgb21uaS5uZXQgYWx3YXlzIGV4Y2hhbmdlIDY0IGJ5dGVzIG9mIGRhdGEgd2l0aCB0aGUgaG9zdC4gVGhlIGZpcnN0CisgKiBmb3VyIGJ5dGVzIGFyZSB0aGUgY29udHJvbCBoZWFkZXIsIHlvdSBjYW4gc2VlIGl0IGluIHRoZSBhYm92ZSBzdHJ1Y3R1cmUuCisgKgorICogb2hfc2VxIGlzIGEgc2VxdWVuY2UgbnVtYmVyLiBEb24ndCBrbm93IGlmL2hvdyBpdCdzIHVzZWQuCisgKiBvaF9sZW4gaXMgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBieXRlcyBpbiB0aGUgcGFja2V0LgorICogb2hfeHh4IEJpdC1tYXBwZWQsIHJlbGF0ZWQgdG8gaGFuZHNoYWtpbmcgYW5kIHN0YXR1cyBpbmZvLgorICoJSSBub3JtYWxseSBzZXQgaXQgdG8gMHgwMyBpbiB0cmFzbWl0dGVkIGZyYW1lcy4KKyAqCTc6IEFjdGl2ZSB3aGVuIHRoZSBUQSBpcyBpbiBhIENPTk5FQ1RlZCBzdGF0ZS4KKyAqCTY6IHVua25vd24KKyAqCTU6IGhhbmRzaGFraW5nLCB1bmtub3duCisgKgk0OiBoYW5kc2hha2luZywgdW5rbm93bgorICoJMzogdW5rbm93biwgdXN1YWxseSAwCisgKgkyOiB1bmtub3duLCB1c3VhbGx5IDAKKyAqCTE6IGhhbmRzaGFraW5nLCB1bmtub3duLCB1c3VhbGx5IHNldCB0byAxIGluIHRyYXNtaXR0ZWQgZnJhbWVzCisgKgkwOiBoYW5kc2hha2luZywgdW5rbm93biwgdXN1YWxseSBzZXQgdG8gMSBpbiB0cmFzbWl0dGVkIGZyYW1lcworICogb2hfcGFkIFByb2JhYmx5IGEgcGFkIGJ5dGUuCisgKgorICogQWZ0ZXIgdGhlIGhlYWRlciB5b3Ugd2lsbCBmaW5kIGRhdGEgYnl0ZXMgaWYgb2hfbGVuIHdhcyBncmVhdGVyIHRoYW4gemVyby4KKyAqCisgKi8KKworc3RydWN0IG9tbmluZXRfaGVhZGVyCit7CisJX191OAlvaF9zZXE7CisJX191OAlvaF9sZW47CisJX191OAlvaF94eHg7CisJX191OAlvaF9wYWQ7Cit9OworCitzdHJ1Y3Qgb21uaW5ldF9kYXRhCit7CisJX191OAlvZF9vdXRzZXE7CS8vIFNlcXVlbmNlIG51bWJlciBmb3IgYnVsa19vdXQgVVJCcworfTsKKworc3RhdGljIGludCBvbW5pbmV0X29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsCSpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkqd3BvcnQ7CisJc3RydWN0IG9tbmluZXRfZGF0YQkqb2Q7CisJaW50CQkJcmVzdWx0ID0gMDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJb2QgPSBrbWFsbG9jKCBzaXplb2Yoc3RydWN0IG9tbmluZXRfZGF0YSksIEdGUF9LRVJORUwgKTsKKwlpZiggIW9kICkgeworCQllcnIoIiVzLSBrbWFsbG9jKCVaZCkgZmFpbGVkLiIsIF9fRlVOQ1RJT05fXywgc2l6ZW9mKHN0cnVjdCBvbW5pbmV0X2RhdGEpKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIG9kKTsKKwl3cG9ydCA9IHNlcmlhbC0+cG9ydFsxXTsKKwl3cG9ydC0+dHR5ID0gcG9ydC0+dHR5OworCisJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KKwl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgc2VyaWFsLT5kZXYsIAorCQkgICAgICB1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJICAgICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCSAgICAgIG9tbmluZXRfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlc3VsdCkKKwkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIG9tbmluZXRfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlscCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAJKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0IAkqd3BvcnQ7CisJc3RydWN0IG9tbmluZXRfZGF0YSAJKm9kOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwl3cG9ydCA9IHNlcmlhbC0+cG9ydFsxXTsKKwl1c2Jfa2lsbF91cmIod3BvcnQtPndyaXRlX3VyYik7CisJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKworCW9kID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWlmIChvZCkKKwkJa2ZyZWUob2QpOworfQorCisKKyNkZWZpbmUgT01OSU5FVF9EQVRBT0ZGU0VUCTB4MDQKKyNkZWZpbmUgT01OSU5FVF9IRUFERVJMRU4Jc2l6ZW9mKHN0cnVjdCBvbW5pbmV0X2hlYWRlcikKKyNkZWZpbmUgT01OSU5FVF9CVUxLT1VUU0laRSAJKDY0IC0gT01OSU5FVF9IRUFERVJMRU4pCisKK3N0YXRpYyB2b2lkIG9tbmluZXRfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgCSpwb3J0IAk9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGNoYXIgCQkqZGF0YSAJPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlzdHJ1Y3Qgb21uaW5ldF9oZWFkZXIgCSpoZWFkZXIgPSAoc3RydWN0IG9tbmluZXRfaGVhZGVyICopICZkYXRhWzBdOworCisJaW50IGk7CisJaW50IHJlc3VsdDsKKworLy8JZGJnKCJvbW5pbmV0X3JlYWRfYnVsa19jYWxsYmFjayIpOworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKGRlYnVnKSAmJiAoaGVhZGVyLT5vaF94eHggIT0gMHgzMCkpIHsKKwkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQkJcHJpbnRrIChLRVJOX0RFQlVHIF9fRklMRV9fICI6IG9tbmluZXRfcmVhZCAlZDogIiwgaGVhZGVyLT5vaF9sZW4pOworCQkJZm9yIChpID0gMDsgaSA8IChoZWFkZXItPm9oX2xlbiArIE9NTklORVRfSEVBREVSTEVOKTsgaSsrKSB7CisJCQkJcHJpbnRrICgiJS4yeCAiLCBkYXRhW2ldKTsKKwkJCX0KKwkJCXByaW50ayAoIlxuIik7CisJCX0KKwl9CisKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoICYmIGhlYWRlci0+b2hfbGVuKSB7CisJCWZvciAoaSA9IDA7IGkgPCBoZWFkZXItPm9oX2xlbjsgaSsrKSB7CisJCQkgdHR5X2luc2VydF9mbGlwX2NoYXIocG9ydC0+dHR5LCBkYXRhW09NTklORVRfREFUQU9GRlNFVCArIGldLCAwKTsKKwkgIAl9CisJICAJdHR5X2ZsaXBfYnVmZmVyX3B1c2gocG9ydC0+dHR5KTsKKwl9CisKKwkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgICovCisJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBwb3J0LT5zZXJpYWwtPmRldiwgCisJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkgICAgICB1cmItPnRyYW5zZmVyX2J1ZmZlciwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkgICAgICBvbW5pbmV0X3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KQorCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgb21uaW5ldF93cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgCSpzZXJpYWwJPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAJKndwb3J0CT0gc2VyaWFsLT5wb3J0WzFdOworCisJc3RydWN0IG9tbmluZXRfZGF0YSAJKm9kIAk9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3Qgb21uaW5ldF9oZWFkZXIJKmhlYWRlciA9IChzdHJ1Y3Qgb21uaW5ldF9oZWFkZXIgKikgd3BvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyOworCisJaW50CQkJcmVzdWx0OworCisvLwlkYmcoIm9tbmluZXRfd3JpdGUgcG9ydCAlZCIsIHBvcnQtPm51bWJlcik7CisKKwlpZiAoY291bnQgPT0gMCkgeworCQlkYmcoIiVzIC0gd3JpdGUgcmVxdWVzdCBvZiAwIGJ5dGVzIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKHdwb3J0LT53cml0ZV91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJZGJnKCIlcyAtIGFscmVhZHkgd3JpdGluZyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAoMCk7CisJfQorCisJY291bnQgPSAoY291bnQgPiBPTU5JTkVUX0JVTEtPVVRTSVpFKSA/IE9NTklORVRfQlVMS09VVFNJWkUgOiBjb3VudDsKKworCW1lbWNweSAod3BvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyICsgT01OSU5FVF9EQVRBT0ZGU0VULCBidWYsIGNvdW50KTsKKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCBjb3VudCwgd3BvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCWhlYWRlci0+b2hfc2VxIAk9IG9kLT5vZF9vdXRzZXErKzsKKwloZWFkZXItPm9oX2xlbiAJPSBjb3VudDsKKwloZWFkZXItPm9oX3h4eCAgPSAweDAzOworCWhlYWRlci0+b2hfcGFkIAk9IDB4MDA7CisKKwkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgYnVsayBwb3J0LCBhbHdheXMgNjQgYnl0ZXMgKi8KKwl3cG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gNjQ7CisKKwl3cG9ydC0+d3JpdGVfdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih3cG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KQorCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwllbHNlCisJCXJlc3VsdCA9IGNvdW50OworCisJcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgaW50IG9tbmluZXRfd3JpdGVfcm9vbSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAJKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0IAkqd3BvcnQgCT0gc2VyaWFsLT5wb3J0WzFdOworCisJaW50IHJvb20gPSAwOyAvLyBEZWZhdWx0OiBubyByb29tCisKKwlpZiAod3BvcnQtPndyaXRlX3VyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykKKwkJcm9vbSA9IHdwb3J0LT5idWxrX291dF9zaXplIC0gT01OSU5FVF9IRUFERVJMRU47CisKKy8vCWRiZygib21uaW5ldF93cml0ZV9yb29tIHJldHVybnMgJWQiLCByb29tKTsKKworCXJldHVybiAocm9vbSk7Cit9CisKK3N0YXRpYyB2b2lkIG9tbmluZXRfd3JpdGVfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKy8qCXN0cnVjdCBvbW5pbmV0X2hlYWRlcgkqaGVhZGVyID0gKHN0cnVjdCBvbW5pbmV0X2hlYWRlciAgKikgdXJiLT50cmFuc2Zlcl9idWZmZXI7ICovCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAJKnBvcnQgICA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHVyYi0+Y29udGV4dDsKKworLy8JZGJnKCJvbW5pbmV0X3dyaXRlX2J1bGtfY2FsbGJhY2ssIHBvcnQgJTB4XG4iLCBwb3J0KTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCXNjaGVkdWxlX3dvcmsoJnBvcnQtPndvcmspOworCisvLwlkYmcoIm9tbmluZXRfd3JpdGVfYnVsa19jYWxsYmFjaywgdHR5ICUweFxuIiwgdHR5KTsKK30KKworCitzdGF0aWMgdm9pZCBvbW5pbmV0X3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKK30KKworCitzdGF0aWMgaW50IF9faW5pdCBvbW5pbmV0X2luaXQgKHZvaWQpCit7CisJaW50IHJldHZhbDsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZ6eXhlbF9vbW5pbmV0X2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJm9tbmluZXRfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXJldHVybiAwOworZmFpbGVkX3VzYl9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnp5eGVsX29tbmluZXRfZGV2aWNlKTsKK2ZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOgorCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IG9tbmluZXRfZXhpdCAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlciAoJm9tbmluZXRfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZ6eXhlbF9vbW5pbmV0X2RldmljZSk7Cit9CisKKworbW9kdWxlX2luaXQob21uaW5ldF9pbml0KTsKK21vZHVsZV9leGl0KG9tbmluZXRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzY4ZDJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCkBAIC0wLDAgKzEsMTIwMCBAQAorLyoKKyAqIFByb2xpZmljIFBMMjMwMyBVU0IgdG8gc2VyaWFsIGFkYXB0b3IgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMyBJQk0gQ29ycC4KKyAqCisgKiBPcmlnaW5hbCBkcml2ZXIgZm9yIDIuMi54IGJ5IGFub255bW91cworICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMgZHJpdmVyCisgKgorICogMjAwMl9NYXJfMjYgZ2toCisgKglhbGxvd2VkIGRyaXZlciB0byB3b3JrIHByb3Blcmx5IGlmIHRoZXJlIGlzIG5vIHR0eSBhc3NpZ25lZCB0byBhIHBvcnQKKyAqCSh0aGlzIGhhcHBlbnMgZm9yIHNlcmlhbCBjb25zb2xlIGRldmljZXMuKQorICoKKyAqIDIwMDFfT2N0XzA2IGdraAorICoJQWRkZWQgUlRTIGFuZCBEVFIgbGluZSBjb250cm9sLiAgVGhhbmtzIHRvIGpvZUBibmRsZy5kZSBmb3IgcGFydHMgb2YgaXQuCisgKgorICogMjAwMV9TZXBfMTkgZ2toCisgKglBZGRlZCBicmVhayBzdXBwb3J0LgorICoKKyAqIDIwMDFfQXVnXzMwIGdraAorICoJZml4ZWQgb29wcyBpbiB3cml0ZV9idWxrX2NhbGxiYWNrLgorICoKKyAqIDIwMDFfQXVnXzI4IGdraAorICoJcmV3b3JrZWQgYnVmZmVyIGxvZ2ljIHRvIGJlIGxpa2Ugb3RoZXIgdXNiLXNlcmlhbCBkcml2ZXJzLiAgSG9wZWZ1bGx5CisgKglyZW1vdmluZyBzb21lIHJlcG9ydGVkIHByb2JsZW1zLgorICoKKyAqIDIwMDFfSnVuXzA2IGdraAorICoJZmluaXNoZWQgcG9ydGluZyB0byAyLjQgZm9ybWF0LgorICogCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisjaW5jbHVkZSAicGwyMzAzLmgiCisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjEyIgorI2RlZmluZSBEUklWRVJfREVTQyAiUHJvbGlmaWMgUEwyMzAzIFVTQiB0byBzZXJpYWwgYWRhcHRvciBkcml2ZXIiCisKK3N0YXRpYyBpbnQgZGVidWc7CisKKyNkZWZpbmUgUEwyMzAzX0NMT1NJTkdfV0FJVAkoMzAqSFopCisKKyNkZWZpbmUgUEwyMzAzX0JVRl9TSVpFCQkxMDI0CisjZGVmaW5lIFBMMjMwM19UTVBfQlVGX1NJWkUJMTAyNAorCitzdGF0aWMgREVDTEFSRV9NVVRFWChwbDIzMDNfdG1wX2J1Zl9zZW0pOworCitzdHJ1Y3QgcGwyMzAzX2J1ZiB7CisJdW5zaWduZWQgaW50CWJ1Zl9zaXplOworCWNoYXIJCSpidWZfYnVmOworCWNoYXIJCSpidWZfZ2V0OworCWNoYXIJCSpidWZfcHV0OworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShQTDIzMDNfVkVORE9SX0lELCBQTDIzMDNfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoUEwyMzAzX1ZFTkRPUl9JRCwgUEwyMzAzX1BST0RVQ1RfSURfUlNBUTIpIH0sCisJeyBVU0JfREVWSUNFKFBMMjMwM19WRU5ET1JfSUQsIFBMMjMwM19QUk9EVUNUX0lEX1JTQVEzKSB9LAorCXsgVVNCX0RFVklDRShQTDIzMDNfVkVORE9SX0lELCBQTDIzMDNfUFJPRFVDVF9JRF9QSEFST1MpIH0sCisJeyBVU0JfREVWSUNFKElPREFUQV9WRU5ET1JfSUQsIElPREFUQV9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShBVEVOX1ZFTkRPUl9JRCwgQVRFTl9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShBVEVOX1ZFTkRPUl9JRDIsIEFURU5fUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRUxDT01fVkVORE9SX0lELCBFTENPTV9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShFTENPTV9WRU5ET1JfSUQsIEVMQ09NX1BST0RVQ1RfSURfVUNTR1QpIH0sCisJeyBVU0JfREVWSUNFKElURUdOT19WRU5ET1JfSUQsIElURUdOT19QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShNQTYyMF9WRU5ET1JfSUQsIE1BNjIwX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKFJBVE9DX1ZFTkRPUl9JRCwgUkFUT0NfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoVFJJUFBfVkVORE9SX0lELCBUUklQUF9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShSQURJT1NIQUNLX1ZFTkRPUl9JRCwgUkFESU9TSEFDS19QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShEQ1UxMF9WRU5ET1JfSUQsIERDVTEwX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKFNJVEVDT01fVkVORE9SX0lELCBTSVRFQ09NX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKEFMQ0FURUxfVkVORE9SX0lELCBBTENBVEVMX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKFNBTVNVTkdfVkVORE9SX0lELCBTQU1TVU5HX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKFNJRU1FTlNfVkVORE9SX0lELCBTSUVNRU5TX1BST0RVQ1RfSURfWDY1KSB9LAorCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcGwyMzAzX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkicGwyMzAzIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorfTsKKworI2RlZmluZSBTRVRfTElORV9SRVFVRVNUX1RZUEUJCTB4MjEKKyNkZWZpbmUgU0VUX0xJTkVfUkVRVUVTVAkJMHgyMAorCisjZGVmaW5lIFNFVF9DT05UUk9MX1JFUVVFU1RfVFlQRQkweDIxCisjZGVmaW5lIFNFVF9DT05UUk9MX1JFUVVFU1QJCTB4MjIKKyNkZWZpbmUgQ09OVFJPTF9EVFIJCQkweDAxCisjZGVmaW5lIENPTlRST0xfUlRTCQkJMHgwMgorCisjZGVmaW5lIEJSRUFLX1JFUVVFU1RfVFlQRQkJMHgyMQorI2RlZmluZSBCUkVBS19SRVFVRVNUCQkJMHgyMwkKKyNkZWZpbmUgQlJFQUtfT04JCQkweGZmZmYKKyNkZWZpbmUgQlJFQUtfT0ZGCQkJMHgwMDAwCisKKyNkZWZpbmUgR0VUX0xJTkVfUkVRVUVTVF9UWVBFCQkweGExCisjZGVmaW5lIEdFVF9MSU5FX1JFUVVFU1QJCTB4MjEKKworI2RlZmluZSBWRU5ET1JfV1JJVEVfUkVRVUVTVF9UWVBFCTB4NDAKKyNkZWZpbmUgVkVORE9SX1dSSVRFX1JFUVVFU1QJCTB4MDEKKworI2RlZmluZSBWRU5ET1JfUkVBRF9SRVFVRVNUX1RZUEUJMHhjMAorI2RlZmluZSBWRU5ET1JfUkVBRF9SRVFVRVNUCQkweDAxCisKKyNkZWZpbmUgVUFSVF9TVEFURQkJCTB4MDgKKyNkZWZpbmUgVUFSVF9TVEFURV9UUkFOU0lFTlRfTUFTSwkweDc0CisjZGVmaW5lIFVBUlRfRENECQkJMHgwMQorI2RlZmluZSBVQVJUX0RTUgkJCTB4MDIKKyNkZWZpbmUgVUFSVF9CUkVBS19FUlJPUgkJMHgwNAorI2RlZmluZSBVQVJUX1JJTkcJCQkweDA4CisjZGVmaW5lIFVBUlRfRlJBTUVfRVJST1IJCTB4MTAKKyNkZWZpbmUgVUFSVF9QQVJJVFlfRVJST1IJCTB4MjAKKyNkZWZpbmUgVUFSVF9PVkVSUlVOX0VSUk9SCQkweDQwCisjZGVmaW5lIFVBUlRfQ1RTCQkJMHg4MAorCisvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBhIFBMMjMwMyBzZXJpYWwgY29udmVydGVyICovCitzdGF0aWMgaW50IHBsMjMwM19vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCBwbDIzMDNfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIHBsMjMwM19zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQlzdHJ1Y3QgdGVybWlvcyAqb2xkKTsKK3N0YXRpYyBpbnQgcGwyMzAzX2lvY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgdm9pZCBwbDIzMDNfcmVhZF9pbnRfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgcGwyMzAzX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBwbDIzMDNfd3JpdGVfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgaW50IHBsMjMwM193cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CitzdGF0aWMgdm9pZCBwbDIzMDNfc2VuZCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50IHBsMjMwM193cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCBwbDIzMDNfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgcGwyMzAzX2JyZWFrX2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LGludCBicmVha19zdGF0ZSk7CitzdGF0aWMgaW50IHBsMjMwM190aW9jbWdldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGludCBwbDIzMDNfdGlvY21zZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CitzdGF0aWMgaW50IHBsMjMwM19zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIHBsMjMwM19zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgc3RydWN0IHBsMjMwM19idWYgKnBsMjMwM19idWZfYWxsb2ModW5zaWduZWQgaW50IHNpemUpOworc3RhdGljIHZvaWQgcGwyMzAzX2J1Zl9mcmVlKHN0cnVjdCBwbDIzMDNfYnVmICpwYik7CitzdGF0aWMgdm9pZCBwbDIzMDNfYnVmX2NsZWFyKHN0cnVjdCBwbDIzMDNfYnVmICpwYik7CitzdGF0aWMgdW5zaWduZWQgaW50IHBsMjMwM19idWZfZGF0YV9hdmFpbChzdHJ1Y3QgcGwyMzAzX2J1ZiAqcGIpOworc3RhdGljIHVuc2lnbmVkIGludCBwbDIzMDNfYnVmX3NwYWNlX2F2YWlsKHN0cnVjdCBwbDIzMDNfYnVmICpwYik7CitzdGF0aWMgdW5zaWduZWQgaW50IHBsMjMwM19idWZfcHV0KHN0cnVjdCBwbDIzMDNfYnVmICpwYiwgY29uc3QgY2hhciAqYnVmLAorCXVuc2lnbmVkIGludCBjb3VudCk7CitzdGF0aWMgdW5zaWduZWQgaW50IHBsMjMwM19idWZfZ2V0KHN0cnVjdCBwbDIzMDNfYnVmICpwYiwgY2hhciAqYnVmLAorCXVuc2lnbmVkIGludCBjb3VudCk7CisKKworLyogQWxsIG9mIHRoZSBkZXZpY2UgaW5mbyBuZWVkZWQgZm9yIHRoZSBQTDIzMDMgU0lPIHNlcmlhbCBjb252ZXJ0ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBwbDIzMDNfZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIlBMLTIzMDMiLAorCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX2luID0JCTEsCisJLm51bV9idWxrX291dCA9CQkxLAorCS5udW1fcG9ydHMgPQkJMSwKKwkub3BlbiA9CQkJcGwyMzAzX29wZW4sCisJLmNsb3NlID0JCXBsMjMwM19jbG9zZSwKKwkud3JpdGUgPQkJcGwyMzAzX3dyaXRlLAorCS5pb2N0bCA9CQlwbDIzMDNfaW9jdGwsCisJLmJyZWFrX2N0bCA9CQlwbDIzMDNfYnJlYWtfY3RsLAorCS5zZXRfdGVybWlvcyA9CQlwbDIzMDNfc2V0X3Rlcm1pb3MsCisJLnRpb2NtZ2V0ID0JCXBsMjMwM190aW9jbWdldCwKKwkudGlvY21zZXQgPQkJcGwyMzAzX3Rpb2Ntc2V0LAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQlwbDIzMDNfcmVhZF9idWxrX2NhbGxiYWNrLAorCS5yZWFkX2ludF9jYWxsYmFjayA9CXBsMjMwM19yZWFkX2ludF9jYWxsYmFjaywKKwkud3JpdGVfYnVsa19jYWxsYmFjayA9CXBsMjMwM193cml0ZV9idWxrX2NhbGxiYWNrLAorCS53cml0ZV9yb29tID0JCXBsMjMwM193cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIgPQlwbDIzMDNfY2hhcnNfaW5fYnVmZmVyLAorCS5hdHRhY2ggPQkJcGwyMzAzX3N0YXJ0dXAsCisJLnNodXRkb3duID0JCXBsMjMwM19zaHV0ZG93biwKK307CisKK2VudW0gcGwyMzAzX3R5cGUgeworCXR5cGVfMCwJCS8qIGRvbid0IGtub3cgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0eXBlIDAgYW5kICovCisJdHlwZV8xLAkJLyogdHlwZSAxLCB1bnRpbCBzb21lb25lIGZyb20gcHJvbGlmaWMgdGVsbHMgdXMuLi4gKi8KKwlIWCwJCS8qIEhYIHZlcnNpb24gb2YgdGhlIHBsMjMwMyBjaGlwICovCit9OworCitzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgeworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgcGwyMzAzX2J1ZiAqYnVmOworCWludCB3cml0ZV91cmJfaW5fdXNlOworCXdhaXRfcXVldWVfaGVhZF90IGRlbHRhX21zcl93YWl0OworCXU4IGxpbmVfY29udHJvbDsKKwl1OCBsaW5lX3N0YXR1czsKKwl1OCB0ZXJtaW9zX2luaXRpYWxpemVkOworCWVudW0gcGwyMzAzX3R5cGUgdHlwZTsKK307CisKKworc3RhdGljIGludCBwbDIzMDNfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXY7CisJZW51bSBwbDIzMDNfdHlwZSB0eXBlID0gdHlwZV8wOworCWludCBpOworCisJaWYgKHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcyA9PSAweDAyKQorCQl0eXBlID0gdHlwZV8wOworCWVsc2UgaWYgKHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmJNYXhQYWNrZXRTaXplMCA9PSAweDQwKQorCQl0eXBlID0gSFg7CisJZWxzZSBpZiAoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzID09IDB4MDApCisJCXR5cGUgPSB0eXBlXzE7CisJZWxzZSBpZiAoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzID09IDB4RkYpCisJCXR5cGUgPSB0eXBlXzE7CisJZGJnKCJkZXZpY2UgdHlwZTogJWQiLCB0eXBlKTsKKworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCXByaXYgPSBrbWFsbG9jIChzaXplb2YgKHN0cnVjdCBwbDIzMDNfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCQlpZiAoIXByaXYpCisJCQlnb3RvIGNsZWFudXA7CisJCW1lbXNldCAocHJpdiwgMHgwMCwgc2l6ZW9mIChzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUpKTsKKwkJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOworCQlwcml2LT5idWYgPSBwbDIzMDNfYnVmX2FsbG9jKFBMMjMwM19CVUZfU0laRSk7CisJCWlmIChwcml2LT5idWYgPT0gTlVMTCkgeworCQkJa2ZyZWUocHJpdik7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworCQlwcml2LT50eXBlID0gdHlwZTsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgcHJpdik7CisJfQorCXJldHVybiAwOworCitjbGVhbnVwOgorCWZvciAoLS1pOyBpPj0wOyAtLWkpIHsKKwkJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pOworCQlwbDIzMDNfYnVmX2ZyZWUocHJpdi0+YnVmKTsKKwkJa2ZyZWUocHJpdik7CisJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIE5VTEwpOworCX0KKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIGludCBzZXRfY29udHJvbF9saW5lcyAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdTggdmFsdWUpCit7CisJaW50IHJldHZhbDsKKwkKKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cgKGRldiwgdXNiX3NuZGN0cmxwaXBlIChkZXYsIDApLAorCQkJCSAgU0VUX0NPTlRST0xfUkVRVUVTVCwgU0VUX0NPTlRST0xfUkVRVUVTVF9UWVBFLAorCQkJCSAgdmFsdWUsIDAsIE5VTEwsIDAsIDEwMCk7CisJZGJnKCIlcyAtIHZhbHVlID0gJWQsIHJldHZhbCA9ICVkIiwgX19GVU5DVElPTl9fLCB2YWx1ZSwgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHBsMjMwM193cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXN0cnVjdCBwbDIzMDNfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQsICVkIGJ5dGVzIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIGNvdW50KTsKKworCWlmICghY291bnQpCisJCXJldHVybiBjb3VudDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJY291bnQgPSBwbDIzMDNfYnVmX3B1dChwcml2LT5idWYsIGJ1ZiwgY291bnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXBsMjMwM19zZW5kKHBvcnQpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdm9pZCBwbDIzMDNfc2VuZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCWludCBjb3VudCwgcmVzdWx0OworCXN0cnVjdCBwbDIzMDNfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJaWYgKHByaXYtPndyaXRlX3VyYl9pbl91c2UpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJY291bnQgPSBwbDIzMDNfYnVmX2dldChwcml2LT5idWYsIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQlwb3J0LT5idWxrX291dF9zaXplKTsKKworCWlmIChjb3VudCA9PSAwKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCXByaXYtPndyaXRlX3VyYl9pbl91c2UgPSAxOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIGNvdW50LCBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcik7CisKKwlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBjb3VudDsKKwlwb3J0LT53cml0ZV91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiIChwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCXByaXYtPndyaXRlX3VyYl9pbl91c2UgPSAwOworCQkvLyBUT0RPOiByZXNjaGVkdWxlIHBsMjMwM19zZW5kCisJfQorCisJc2NoZWR1bGVfd29yaygmcG9ydC0+d29yayk7Cit9CisKK3N0YXRpYyBpbnQgcGwyMzAzX3dyaXRlX3Jvb20oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IHJvb20gPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcm9vbSA9IHBsMjMwM19idWZfc3BhY2VfYXZhaWwocHJpdi0+YnVmKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fRlVOQ1RJT05fXywgcm9vbSk7CisJcmV0dXJuIHJvb207Cit9CisKK3N0YXRpYyBpbnQgcGwyMzAzX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBwbDIzMDNfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgY2hhcnMgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJY2hhcnMgPSBwbDIzMDNfYnVmX2RhdGFfYXZhaWwocHJpdi0+YnVmKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fRlVOQ1RJT05fXywgY2hhcnMpOworCXJldHVybiBjaGFyczsKK30KKworc3RhdGljIHZvaWQgcGwyMzAzX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgY2ZsYWc7CisJdW5zaWduZWQgY2hhciAqYnVmOworCWludCBiYXVkOworCWludCBpOworCXU4IGNvbnRyb2w7CisKKwlkYmcoIiVzIC0gIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoKCFwb3J0LT50dHkpIHx8ICghcG9ydC0+dHR5LT50ZXJtaW9zKSkgeworCQlkYmcoIiVzIC0gbm8gdHR5IHN0cnVjdHVyZXMiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoIXByaXYtPnRlcm1pb3NfaW5pdGlhbGl6ZWQpIHsKKwkJKihwb3J0LT50dHktPnRlcm1pb3MpID0gdHR5X3N0ZF90ZXJtaW9zOworCQlwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgPSBCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7CisJCXByaXYtPnRlcm1pb3NfaW5pdGlhbGl6ZWQgPSAxOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwljZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwkvKiBjaGVjayB0aGF0IHRoZXkgcmVhbGx5IHdhbnQgdXMgdG8gY2hhbmdlIHNvbWV0aGluZyAqLworCWlmIChvbGRfdGVybWlvcykgeworCQlpZiAoKGNmbGFnID09IG9sZF90ZXJtaW9zLT5jX2NmbGFnKSAmJgorCQkgICAgKFJFTEVWQU5UX0lGTEFHKHBvcnQtPnR0eS0+dGVybWlvcy0+Y19pZmxhZykgPT0gUkVMRVZBTlRfSUZMQUcob2xkX3Rlcm1pb3MtPmNfaWZsYWcpKSkgeworCQkgICAgZGJnKCIlcyAtIG5vdGhpbmcgdG8gY2hhbmdlLi4uIiwgX19GVU5DVElPTl9fKTsKKwkJICAgIHJldHVybjsKKwkJfQorCX0KKworCWJ1ZiA9IGttYWxsb2MgKDcsIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJbWVtc2V0IChidWYsIDB4MDAsIDB4MDcpOworCQorCWkgPSB1c2JfY29udHJvbF9tc2cgKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUgKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICAgR0VUX0xJTkVfUkVRVUVTVCwgR0VUX0xJTkVfUkVRVUVTVF9UWVBFLAorCQkJICAgICAwLCAwLCBidWYsIDcsIDEwMCk7CisJZGJnICgiMHhhMToweDIxOjA6MCAgJWQgLSAleCAleCAleCAleCAleCAleCAleCIsIGksCisJICAgICBidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10sIGJ1Zls0XSwgYnVmWzVdLCBidWZbNl0pOworCisKKwlpZiAoY2ZsYWcgJiBDU0laRSkgeworCQlzd2l0Y2ggKGNmbGFnICYgQ1NJWkUpIHsKKwkJCWNhc2UgQ1M1OglidWZbNl0gPSA1OwlicmVhazsKKwkJCWNhc2UgQ1M2OglidWZbNl0gPSA2OwlicmVhazsKKwkJCWNhc2UgQ1M3OglidWZbNl0gPSA3OwlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQljYXNlIENTODoJYnVmWzZdID0gODsJYnJlYWs7CisJCX0KKwkJZGJnKCIlcyAtIGRhdGEgYml0cyA9ICVkIiwgX19GVU5DVElPTl9fLCBidWZbNl0pOworCX0KKworCWJhdWQgPSAwOworCXN3aXRjaCAoY2ZsYWcgJiBDQkFVRCkgeworCQljYXNlIEIwOgliYXVkID0gMDsJYnJlYWs7CisJCWNhc2UgQjc1OgliYXVkID0gNzU7CWJyZWFrOworCQljYXNlIEIxNTA6CWJhdWQgPSAxNTA7CWJyZWFrOworCQljYXNlIEIzMDA6CWJhdWQgPSAzMDA7CWJyZWFrOworCQljYXNlIEI2MDA6CWJhdWQgPSA2MDA7CWJyZWFrOworCQljYXNlIEIxMjAwOgliYXVkID0gMTIwMDsJYnJlYWs7CisJCWNhc2UgQjE4MDA6CWJhdWQgPSAxODAwOwlicmVhazsKKwkJY2FzZSBCMjQwMDoJYmF1ZCA9IDI0MDA7CWJyZWFrOworCQljYXNlIEI0ODAwOgliYXVkID0gNDgwMDsJYnJlYWs7CisJCWNhc2UgQjk2MDA6CWJhdWQgPSA5NjAwOwlicmVhazsKKwkJY2FzZSBCMTkyMDA6CWJhdWQgPSAxOTIwMDsJYnJlYWs7CisJCWNhc2UgQjM4NDAwOgliYXVkID0gMzg0MDA7CWJyZWFrOworCQljYXNlIEI1NzYwMDoJYmF1ZCA9IDU3NjAwOwlicmVhazsKKwkJY2FzZSBCMTE1MjAwOgliYXVkID0gMTE1MjAwOwlicmVhazsKKwkJY2FzZSBCMjMwNDAwOgliYXVkID0gMjMwNDAwOwlicmVhazsKKwkJY2FzZSBCNDYwODAwOgliYXVkID0gNDYwODAwOwlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgInBsMjMwMyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYmF1ZHJhdGUgcmVxdWVzdGVkIChmaXggaXQpXG4iKTsKKwkJCWJyZWFrOworCX0KKwlkYmcoIiVzIC0gYmF1ZCA9ICVkIiwgX19GVU5DVElPTl9fLCBiYXVkKTsKKwlpZiAoYmF1ZCkgeworCQlidWZbMF0gPSBiYXVkICYgMHhmZjsKKwkJYnVmWzFdID0gKGJhdWQgPj4gOCkgJiAweGZmOworCQlidWZbMl0gPSAoYmF1ZCA+PiAxNikgJiAweGZmOworCQlidWZbM10gPSAoYmF1ZCA+PiAyNCkgJiAweGZmOworCX0KKworCS8qIEZvciByZWZlcmVuY2UgYnVmWzRdPTAgaXMgMSBzdG9wIGJpdHMgKi8KKwkvKiBGb3IgcmVmZXJlbmNlIGJ1Zls0XT0xIGlzIDEuNSBzdG9wIGJpdHMgKi8KKwkvKiBGb3IgcmVmZXJlbmNlIGJ1Zls0XT0yIGlzIDIgc3RvcCBiaXRzICovCisJaWYgKGNmbGFnICYgQ1NUT1BCKSB7CisJCWJ1Zls0XSA9IDI7CisJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAyIiwgX19GVU5DVElPTl9fKTsKKwl9IGVsc2UgeworCQlidWZbNF0gPSAwOworCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMSIsIF9fRlVOQ1RJT05fXyk7CisJfQorCisJaWYgKGNmbGFnICYgUEFSRU5CKSB7CisJCS8qIEZvciByZWZlcmVuY2UgYnVmWzVdPTAgaXMgbm9uZSBwYXJpdHkgKi8KKwkJLyogRm9yIHJlZmVyZW5jZSBidWZbNV09MSBpcyBvZGQgcGFyaXR5ICovCisJCS8qIEZvciByZWZlcmVuY2UgYnVmWzVdPTIgaXMgZXZlbiBwYXJpdHkgKi8KKwkJLyogRm9yIHJlZmVyZW5jZSBidWZbNV09MyBpcyBtYXJrIHBhcml0eSAqLworCQkvKiBGb3IgcmVmZXJlbmNlIGJ1Zls1XT00IGlzIHNwYWNlIHBhcml0eSAqLworCQlpZiAoY2ZsYWcgJiBQQVJPREQpIHsKKwkJCWJ1Zls1XSA9IDE7CisJCQlkYmcoIiVzIC0gcGFyaXR5ID0gb2RkIiwgX19GVU5DVElPTl9fKTsKKwkJfSBlbHNlIHsKKwkJCWJ1Zls1XSA9IDI7CisJCQlkYmcoIiVzIC0gcGFyaXR5ID0gZXZlbiIsIF9fRlVOQ1RJT05fXyk7CisJCX0KKwl9IGVsc2UgeworCQlidWZbNV0gPSAwOworCQlkYmcoIiVzIC0gcGFyaXR5ID0gbm9uZSIsIF9fRlVOQ1RJT05fXyk7CisJfQorCisJaSA9IHVzYl9jb250cm9sX21zZyAoc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZSAoc2VyaWFsLT5kZXYsIDApLAorCQkJICAgICBTRVRfTElORV9SRVFVRVNULCBTRVRfTElORV9SRVFVRVNUX1RZUEUsIAorCQkJICAgICAwLCAwLCBidWYsIDcsIDEwMCk7CisJZGJnICgiMHgyMToweDIwOjA6MCAgJWQiLCBpKTsKKworCS8qIGNoYW5nZSBjb250cm9sIGxpbmVzIGlmIHdlIGFyZSBzd2l0Y2hpbmcgdG8gb3IgZnJvbSBCMCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJY29udHJvbCA9IHByaXYtPmxpbmVfY29udHJvbDsKKwlpZiAoKGNmbGFnICYgQ0JBVUQpID09IEIwKQorCQlwcml2LT5saW5lX2NvbnRyb2wgJj0gfihDT05UUk9MX0RUUiB8IENPTlRST0xfUlRTKTsKKwllbHNlCisJCXByaXYtPmxpbmVfY29udHJvbCB8PSAoQ09OVFJPTF9EVFIgfCBDT05UUk9MX1JUUyk7CisJaWYgKGNvbnRyb2wgIT0gcHJpdi0+bGluZV9jb250cm9sKSB7CisJCWNvbnRyb2wgPSBwcml2LT5saW5lX2NvbnRyb2w7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJc2V0X2NvbnRyb2xfbGluZXMoc2VyaWFsLT5kZXYsIGNvbnRyb2wpOworCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwl9CisJCisJYnVmWzBdID0gYnVmWzFdID0gYnVmWzJdID0gYnVmWzNdID0gYnVmWzRdID0gYnVmWzVdID0gYnVmWzZdID0gMDsKKworCWkgPSB1c2JfY29udHJvbF9tc2cgKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUgKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICAgR0VUX0xJTkVfUkVRVUVTVCwgR0VUX0xJTkVfUkVRVUVTVF9UWVBFLAorCQkJICAgICAwLCAwLCBidWYsIDcsIDEwMCk7CisJZGJnICgiMHhhMToweDIxOjA6MCAgJWQgLSAleCAleCAleCAleCAleCAleCAleCIsIGksCisJICAgICBidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10sIGJ1Zls0XSwgYnVmWzVdLCBidWZbNl0pOworCisJaWYgKGNmbGFnICYgQ1JUU0NUUykgeworCQlfX3UxNiBpbmRleDsKKwkJaWYgKHByaXYtPnR5cGUgPT0gSFgpCisJCQlpbmRleCA9IDB4NjE7CisJCWVsc2UKKwkJCWluZGV4ID0gMHg0MTsKKwkJaSA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgCisJCQkJICAgIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkJICAgIFZFTkRPUl9XUklURV9SRVFVRVNULAorCQkJCSAgICBWRU5ET1JfV1JJVEVfUkVRVUVTVF9UWVBFLAorCQkJCSAgICAweDAsIGluZGV4LCBOVUxMLCAwLCAxMDApOworCQlkYmcgKCIweDQwOjB4MToweDA6MHgleCAgJWQiLCBpbmRleCwgaSk7CisJfQorCisJa2ZyZWUgKGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgcGwyMzAzX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCB0ZXJtaW9zIHRtcF90ZXJtaW9zOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwlpbnQgcmVzdWx0OworCisJZGJnKCIlcyAtICBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJdXNiX2NsZWFyX2hhbHQoc2VyaWFsLT5kZXYsIHBvcnQtPndyaXRlX3VyYi0+cGlwZSk7CisJdXNiX2NsZWFyX2hhbHQoc2VyaWFsLT5kZXYsIHBvcnQtPnJlYWRfdXJiLT5waXBlKTsKKworCWJ1ZiA9IGttYWxsb2MoMTAsIEdGUF9LRVJORUwpOworCWlmIChidWY9PU5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisjZGVmaW5lIEZJU0goYSxiLGMsZCkJCQkJCQkJCVwKKwlyZXN1bHQ9dXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsMCksCVwKKwkJCSAgICAgICBiLCBhLCBjLCBkLCBidWYsIDEsIDEwMCk7CQkJXAorCWRiZygiMHgleDoweCV4OjB4JXg6MHgleCAgJWQgLSAleCIsYSxiLGMsZCxyZXN1bHQsYnVmWzBdKTsKKworI2RlZmluZSBTT1VQKGEsYixjLGQpCQkJCQkJCQlcCisJcmVzdWx0PXVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LDApLAlcCisJCQkgICAgICAgYiwgYSwgYywgZCwgTlVMTCwgMCwgMTAwKTsJCQlcCisJZGJnKCIweCV4OjB4JXg6MHgleDoweCV4ICAlZCIsYSxiLGMsZCxyZXN1bHQpOworCisJRklTSCAoVkVORE9SX1JFQURfUkVRVUVTVF9UWVBFLCBWRU5ET1JfUkVBRF9SRVFVRVNULCAweDg0ODQsIDApOworCVNPVVAgKFZFTkRPUl9XUklURV9SRVFVRVNUX1RZUEUsIFZFTkRPUl9XUklURV9SRVFVRVNULCAweDA0MDQsIDApOworCUZJU0ggKFZFTkRPUl9SRUFEX1JFUVVFU1RfVFlQRSwgVkVORE9SX1JFQURfUkVRVUVTVCwgMHg4NDg0LCAwKTsKKwlGSVNIIChWRU5ET1JfUkVBRF9SRVFVRVNUX1RZUEUsIFZFTkRPUl9SRUFEX1JFUVVFU1QsIDB4ODM4MywgMCk7CisJRklTSCAoVkVORE9SX1JFQURfUkVRVUVTVF9UWVBFLCBWRU5ET1JfUkVBRF9SRVFVRVNULCAweDg0ODQsIDApOworCVNPVVAgKFZFTkRPUl9XUklURV9SRVFVRVNUX1RZUEUsIFZFTkRPUl9XUklURV9SRVFVRVNULCAweDA0MDQsIDEpOworCUZJU0ggKFZFTkRPUl9SRUFEX1JFUVVFU1RfVFlQRSwgVkVORE9SX1JFQURfUkVRVUVTVCwgMHg4NDg0LCAwKTsKKwlGSVNIIChWRU5ET1JfUkVBRF9SRVFVRVNUX1RZUEUsIFZFTkRPUl9SRUFEX1JFUVVFU1QsIDB4ODM4MywgMCk7CisJU09VUCAoVkVORE9SX1dSSVRFX1JFUVVFU1RfVFlQRSwgVkVORE9SX1dSSVRFX1JFUVVFU1QsIDAsIDEpOworCVNPVVAgKFZFTkRPUl9XUklURV9SRVFVRVNUX1RZUEUsIFZFTkRPUl9XUklURV9SRVFVRVNULCAxLCAwKTsKKworCWlmIChwcml2LT50eXBlID09IEhYKSB7CisJCS8qIEhYIGNoaXAgKi8KKwkJU09VUCAoVkVORE9SX1dSSVRFX1JFUVVFU1RfVFlQRSwgVkVORE9SX1dSSVRFX1JFUVVFU1QsIDIsIDB4NDQpOworCQkvKiByZXNldCB1cHN0cmVhbSBkYXRhIHBpcGVzICovCisgICAgICAgICAgCVNPVVAgKFZFTkRPUl9XUklURV9SRVFVRVNUX1RZUEUsIFZFTkRPUl9XUklURV9SRVFVRVNULCA4LCAwKTsKKyAgICAgICAgCVNPVVAgKFZFTkRPUl9XUklURV9SRVFVRVNUX1RZUEUsIFZFTkRPUl9XUklURV9SRVFVRVNULCA5LCAwKTsKKwl9IGVsc2UgeworCQlTT1VQIChWRU5ET1JfV1JJVEVfUkVRVUVTVF9UWVBFLCBWRU5ET1JfV1JJVEVfUkVRVUVTVCwgMiwgMHgyNCk7CisJfQorCisJa2ZyZWUoYnVmKTsKKworCS8qIFNldHVwIHRlcm1pb3MgKi8KKwlpZiAocG9ydC0+dHR5KSB7CisJCXBsMjMwM19zZXRfdGVybWlvcyAocG9ydCwgJnRtcF90ZXJtaW9zKTsKKwl9CisKKwkvL0ZJWE1FOiBuZWVkIHRvIGFzc2VydCBSVFMgYW5kIERUUiBpZiBDUlRTQ1RTIG9mZgorCisJZGJnKCIlcyAtIHN1Ym1pdHRpbmcgcmVhZCB1cmIiLCBfX0ZVTkNUSU9OX18pOworCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiAocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXN1bHQpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJcGwyMzAzX2Nsb3NlIChwb3J0LCBOVUxMKTsKKwkJcmV0dXJuIC1FUFJPVE87CisJfQorCisJZGJnKCIlcyAtIHN1Ym1pdHRpbmcgaW50ZXJydXB0IHVyYiIsIF9fRlVOQ1RJT05fXyk7CisJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIgKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXN1bHQpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQlwbDIzMDNfY2xvc2UgKHBvcnQsIE5VTEwpOworCQlyZXR1cm4gLUVQUk9UTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgcGwyMzAzX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgY19jZmxhZzsKKwlpbnQgYnBzOworCWxvbmcgdGltZW91dDsKKwl3YWl0X3F1ZXVlX3Qgd2FpdDsJCQkJCQlcCisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIHdhaXQgZm9yIGRhdGEgdG8gZHJhaW4gZnJvbSB0aGUgYnVmZmVyICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwl0aW1lb3V0ID0gUEwyMzAzX0NMT1NJTkdfV0FJVDsKKwlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7CisJYWRkX3dhaXRfcXVldWUoJnBvcnQtPnR0eS0+d3JpdGVfd2FpdCwgJndhaXQpOworCWZvciAoOzspIHsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJaWYgKHBsMjMwM19idWZfZGF0YV9hdmFpbChwcml2LT5idWYpID09IDAKKwkJfHwgdGltZW91dCA9PSAwIHx8IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpCisJCXx8ICF1c2JfZ2V0X2ludGZkYXRhKHBvcnQtPnNlcmlhbC0+aW50ZXJmYWNlKSkJLyogZGlzY29ubmVjdCAqLworCQkJYnJlYWs7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJfQorCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJnBvcnQtPnR0eS0+d3JpdGVfd2FpdCwgJndhaXQpOworCS8qIGNsZWFyIG91dCBhbnkgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGJ1ZmZlciAqLworCXBsMjMwM19idWZfY2xlYXIocHJpdi0+YnVmKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkvKiB3YWl0IGZvciBjaGFyYWN0ZXJzIHRvIGRyYWluIGZyb20gdGhlIGRldmljZSAqLworCS8qICh0aGlzIGlzIGxvbmcgZW5vdWdoIGZvciB0aGUgZW50aXJlIDI1NiBieXRlICovCisJLyogcGwyMzAzIGhhcmR3YXJlIGJ1ZmZlciB0byBkcmFpbiB3aXRoIG5vIGZsb3cgKi8KKwkvKiBjb250cm9sIGZvciBkYXRhIHJhdGVzIG9mIDEyMDAgYnBzIG9yIG1vcmUsICovCisJLyogZm9yIGxvd2VyIHJhdGVzIHdlIHNob3VsZCByZWFsbHkga25vdyBob3cgbXVjaCAqLworCS8qIGRhdGEgaXMgaW4gdGhlIGJ1ZmZlciB0byBjb21wdXRlIGEgZGVsYXkgKi8KKwkvKiB0aGF0IGlzIG5vdCB1bm5lY2Vzc2FyaWx5IGxvbmcpICovCisJYnBzID0gdHR5X2dldF9iYXVkX3JhdGUocG9ydC0+dHR5KTsKKwlpZiAoYnBzID4gMTIwMCkKKwkJdGltZW91dCA9IG1heCgoSFoqMjU2MCkvYnBzLEhaLzEwKTsKKwllbHNlCisJCXRpbWVvdXQgPSAyKkhaOworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKKworCS8qIHNodXRkb3duIG91ciB1cmJzICovCisJZGJnKCIlcyAtIHNodXR0aW5nIGRvd24gdXJicyIsIF9fRlVOQ1RJT05fXyk7CisJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CisKKwlpZiAocG9ydC0+dHR5KSB7CisJCWNfY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJCWlmIChjX2NmbGFnICYgSFVQQ0wpIHsKKwkJCS8qIGRyb3AgRFRSIGFuZCBSVFMgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQlwcml2LT5saW5lX2NvbnRyb2wgPSAwOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCXNldF9jb250cm9sX2xpbmVzIChwb3J0LT5zZXJpYWwtPmRldiwgMCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgcGwyMzAzX3Rpb2Ntc2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggY29udHJvbDsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChzZXQgJiBUSU9DTV9SVFMpCisJCXByaXYtPmxpbmVfY29udHJvbCB8PSBDT05UUk9MX1JUUzsKKwlpZiAoc2V0ICYgVElPQ01fRFRSKQorCQlwcml2LT5saW5lX2NvbnRyb2wgfD0gQ09OVFJPTF9EVFI7CisJaWYgKGNsZWFyICYgVElPQ01fUlRTKQorCQlwcml2LT5saW5lX2NvbnRyb2wgJj0gfkNPTlRST0xfUlRTOworCWlmIChjbGVhciAmIFRJT0NNX0RUUikKKwkJcHJpdi0+bGluZV9jb250cm9sICY9IH5DT05UUk9MX0RUUjsKKwljb250cm9sID0gcHJpdi0+bGluZV9jb250cm9sOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gc2V0X2NvbnRyb2xfbGluZXMgKHBvcnQtPnNlcmlhbC0+ZGV2LCBjb250cm9sKTsKK30KKworc3RhdGljIGludCBwbDIzMDNfdGlvY21nZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBwbDIzMDNfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBtY3I7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgcmVzdWx0OworCisJZGJnKCIlcyAoJWQpIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisJbWNyID0gcHJpdi0+bGluZV9jb250cm9sOworCXN0YXR1cyA9IHByaXYtPmxpbmVfc3RhdHVzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXN1bHQgPSAoKG1jciAmIENPTlRST0xfRFRSKQkJPyBUSU9DTV9EVFIgOiAwKQorCQkgIHwgKChtY3IgJiBDT05UUk9MX1JUUykJPyBUSU9DTV9SVFMgOiAwKQorCQkgIHwgKChzdGF0dXMgJiBVQVJUX0NUUykJPyBUSU9DTV9DVFMgOiAwKQorCQkgIHwgKChzdGF0dXMgJiBVQVJUX0RTUikJPyBUSU9DTV9EU1IgOiAwKQorCQkgIHwgKChzdGF0dXMgJiBVQVJUX1JJTkcpCT8gVElPQ01fUkkgIDogMCkKKwkJICB8ICgoc3RhdHVzICYgVUFSVF9EQ0QpCT8gVElPQ01fQ0QgIDogMCk7CisKKwlkYmcoIiVzIC0gcmVzdWx0ID0gJXgiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IHdhaXRfbW9kZW1faW5mbyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgYXJnKQoreworCXN0cnVjdCBwbDIzMDNfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBwcmV2c3RhdHVzOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisJdW5zaWduZWQgaW50IGNoYW5nZWQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcmV2c3RhdHVzID0gcHJpdi0+bGluZV9zdGF0dXM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXdoaWxlICgxKSB7CisJCWludGVycnVwdGlibGVfc2xlZXBfb24oJnByaXYtPmRlbHRhX21zcl93YWl0KTsKKwkJLyogc2VlIGlmIGEgc2lnbmFsIGRpZCBpdCAqLworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQkKKwkJc3Bpbl9sb2NrX2lycXNhdmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXN0YXR1cyA9IHByaXYtPmxpbmVfc3RhdHVzOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkKKwkJY2hhbmdlZD1wcmV2c3RhdHVzXnN0YXR1czsKKwkJCisJCWlmICgoKGFyZyAmIFRJT0NNX1JORykgJiYgKGNoYW5nZWQgJiBVQVJUX1JJTkcpKSB8fAorCQkgICAgKChhcmcgJiBUSU9DTV9EU1IpICYmIChjaGFuZ2VkICYgVUFSVF9EU1IpKSB8fAorCQkgICAgKChhcmcgJiBUSU9DTV9DRCkgICYmIChjaGFuZ2VkICYgVUFSVF9EQ0QpKSB8fAorCQkgICAgKChhcmcgJiBUSU9DTV9DVFMpICYmIChjaGFuZ2VkICYgVUFSVF9DVFMpKSApIHsKKwkJCXJldHVybiAwOworCQl9CisJCXByZXZzdGF0dXMgPSBzdGF0dXM7CisJfQorCS8qIE5PVFJFQUNIRUQgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbDIzMDNfaW9jdGwgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlkYmcoIiVzICglZCkgY21kID0gMHglMDR4IiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIGNtZCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCQljYXNlIFRJT0NNSVdBSVQ6CisJCQlkYmcoIiVzICglZCkgVElPQ01JV0FJVCIsIF9fRlVOQ1RJT05fXywgIHBvcnQtPm51bWJlcik7CisJCQlyZXR1cm4gd2FpdF9tb2RlbV9pbmZvKHBvcnQsIGFyZyk7CisKKwkJZGVmYXVsdDoKKwkJCWRiZygiJXMgbm90IHN1cHBvcnRlZCA9IDB4JTA0eCIsIF9fRlVOQ1RJT05fXywgY21kKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKK3N0YXRpYyB2b2lkIHBsMjMwM19icmVha19jdGwgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXUxNiBzdGF0ZTsKKwlpbnQgcmVzdWx0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoYnJlYWtfc3RhdGUgPT0gMCkKKwkJc3RhdGUgPSBCUkVBS19PRkY7CisJZWxzZQorCQlzdGF0ZSA9IEJSRUFLX09OOworCWRiZygiJXMgLSB0dXJuaW5nIGJyZWFrICVzIiwgX19GVU5DVElPTl9fLCBzdGF0ZT09QlJFQUtfT0ZGID8gIm9mZiIgOiAib24iKTsKKworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZSAoc2VyaWFsLT5kZXYsIDApLAorCQkJCSAgQlJFQUtfUkVRVUVTVCwgQlJFQUtfUkVRVUVTVF9UWVBFLCBzdGF0ZSwgCisJCQkJICAwLCBOVUxMLCAwLCAxMDApOworCWlmIChyZXN1bHQpCisJCWRiZygiJXMgLSBlcnJvciBzZW5kaW5nIGJyZWFrID0gJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7Cit9CisKKworc3RhdGljIHZvaWQgcGwyMzAzX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWludCBpOworCXN0cnVjdCBwbDIzMDNfcHJpdmF0ZSAqcHJpdjsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pOworCQlpZiAocHJpdikgeworCQkJcGwyMzAzX2J1Zl9mcmVlKHByaXYtPmJ1Zik7CisJCQlrZnJlZShwcml2KTsKKwkJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIE5VTEwpOworCQl9CisJfQkJCit9CisKKworc3RhdGljIHZvaWQgcGwyMzAzX3JlYWRfaW50X2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzdGF0dXM7CisJdTggdWFydF9zdGF0ZTsKKworCWRiZygiJXMgKCVkKSIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDwgVUFSVF9TVEFURSkKKwkJZ290byBleGl0OworCisJLyogU2F2ZSBvZmYgdGhlIHVhcnQgc3RhdHVzIGZvciBvdGhlcnMgdG8gbG9vayBhdCAqLworCXVhcnRfc3RhdGUgPSBkYXRhW1VBUlRfU1RBVEVdOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJdWFydF9zdGF0ZSB8PSAocHJpdi0+bGluZV9zdGF0dXMgJiBVQVJUX1NUQVRFX1RSQU5TSUVOVF9NQVNLKTsKKwlwcml2LT5saW5lX3N0YXR1cyA9IHVhcnRfc3RhdGU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkKK2V4aXQ6CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cykKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkXG4iLAorCQkJX19GVU5DVElPTl9fLCBzdGF0dXMpOworfQorCisKK3N0YXRpYyB2b2lkIHBsMjMwM19yZWFkX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKwlpbnQgcmVzdWx0OworCXU4IHN0YXR1czsKKwljaGFyIHR0eV9mbGFnOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIHVyYi0+c3RhdHVzID0gJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJCQlkYmcoIiVzIC0gcG9ydCBpcyBjbG9zZWQsIGV4aXRpbmcuIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVQUk9UTykgeworCQkJLyogUEwyMzAzIG15c3RlcmlvdXNseSBmYWlscyB3aXRoIC1FUFJPVE8gcmVzY2hlZHVsZSB0aGUgcmVhZCAqLworCQkJZGJnKCIlcyAtIGNhdWdodCAtRVBST1RPLCByZXN1Ym1pdHRpbmcgdGhlIHVyYiIsIF9fRlVOQ1RJT05fXyk7CisJCQl1cmItPnN0YXR1cyA9IDA7CisJCQl1cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwkJCWlmIChyZXN1bHQpCisJCQkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJCXJldHVybjsKKwkJfQorCQlkYmcoIiVzIC0gdW5hYmxlIHRvIGhhbmRsZSB0aGUgZXJyb3IsIGV4aXRpbmcuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCisJLyogZ2V0IHR0eV9mbGFnIGZyb20gc3RhdHVzICovCisJdHR5X2ZsYWcgPSBUVFlfTk9STUFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzdGF0dXMgPSBwcml2LT5saW5lX3N0YXR1czsKKwlwcml2LT5saW5lX3N0YXR1cyAmPSB+VUFSVF9TVEFURV9UUkFOU0lFTlRfTUFTSzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlICgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworCisJLyogYnJlYWsgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHBhcml0eSwgKi8KKwkvKiB3aGljaCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgZnJhbWluZyBlcnJvcnMgKi8KKwlpZiAoc3RhdHVzICYgVUFSVF9CUkVBS19FUlJPUiApCisJCXR0eV9mbGFnID0gVFRZX0JSRUFLOworCWVsc2UgaWYgKHN0YXR1cyAmIFVBUlRfUEFSSVRZX0VSUk9SKQorCQl0dHlfZmxhZyA9IFRUWV9QQVJJVFk7CisJZWxzZSBpZiAoc3RhdHVzICYgVUFSVF9GUkFNRV9FUlJPUikKKwkJdHR5X2ZsYWcgPSBUVFlfRlJBTUU7CisJZGJnKCIlcyAtIHR0eV9mbGFnID0gJWQiLCBfX0ZVTkNUSU9OX18sIHR0eV9mbGFnKTsKKworCXR0eSA9IHBvcnQtPnR0eTsKKwlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQkvKiBvdmVycnVuIGlzIHNwZWNpYWwsIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBjaGFyICovCisJCWlmIChzdGF0dXMgJiBVQVJUX09WRVJSVU5fRVJST1IpCisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDAsIFRUWV9PVkVSUlVOKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoOyArK2kpIHsKKwkJCWlmICh0dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkgeworCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQl9CisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhciAodHR5LCBkYXRhW2ldLCB0dHlfZmxhZyk7CisJCX0KKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2ggKHR0eSk7CisJfQorCisJLyogU2NoZWR1bGUgdGhlIG5leHQgcmVhZCBfaWZfIHdlIGFyZSBzdGlsbCBvcGVuICovCisJaWYgKHBvcnQtPm9wZW5fY291bnQpIHsKKwkJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJfQorCisJcmV0dXJuOworfQorCisKKworc3RhdGljIHZvaWQgcGwyMzAzX3dyaXRlX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcHJpdi0+d3JpdGVfdXJiX2luX3VzZSA9IDA7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQkvKiBlcnJvciBpbiB0aGUgdXJiLCBzbyB3ZSBoYXZlIHRvIHJlc3VibWl0IGl0ICovCisJCWRiZygiJXMgLSBPdmVyZmxvdyBpbiB3cml0ZSIsIF9fRlVOQ1RJT05fXyk7CisJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAxOworCQlwb3J0LT53cml0ZV91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiAocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQllbHNlCisJCQlyZXR1cm47CisJfQorCisJcHJpdi0+d3JpdGVfdXJiX2luX3VzZSA9IDA7CisKKwkvKiBzZW5kIGFueSBidWZmZXJlZCBkYXRhICovCisJcGwyMzAzX3NlbmQocG9ydCk7Cit9CisKKworLyoKKyAqIHBsMjMwM19idWZfYWxsb2MKKyAqCisgKiBBbGxvY2F0ZSBhIGNpcmN1bGFyIGJ1ZmZlciBhbmQgYWxsIGFzc29jaWF0ZWQgbWVtb3J5LgorICovCisKK3N0YXRpYyBzdHJ1Y3QgcGwyMzAzX2J1ZiAqcGwyMzAzX2J1Zl9hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKworCXN0cnVjdCBwbDIzMDNfYnVmICpwYjsKKworCisJaWYgKHNpemUgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwYiA9IChzdHJ1Y3QgcGwyMzAzX2J1ZiAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwbDIzMDNfYnVmKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBiID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJcGItPmJ1Zl9idWYgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmIChwYi0+YnVmX2J1ZiA9PSBOVUxMKSB7CisJCWtmcmVlKHBiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcGItPmJ1Zl9zaXplID0gc2l6ZTsKKwlwYi0+YnVmX2dldCA9IHBiLT5idWZfcHV0ID0gcGItPmJ1Zl9idWY7CisKKwlyZXR1cm4gcGI7CisKK30KKworCisvKgorICogcGwyMzAzX2J1Zl9mcmVlCisgKgorICogRnJlZSB0aGUgYnVmZmVyIGFuZCBhbGwgYXNzb2NpYXRlZCBtZW1vcnkuCisgKi8KKworc3RhdGljIHZvaWQgcGwyMzAzX2J1Zl9mcmVlKHN0cnVjdCBwbDIzMDNfYnVmICpwYikKK3sKKwlpZiAocGIgIT0gTlVMTCkgeworCQlpZiAocGItPmJ1Zl9idWYgIT0gTlVMTCkKKwkJCWtmcmVlKHBiLT5idWZfYnVmKTsKKwkJa2ZyZWUocGIpOworCX0KK30KKworCisvKgorICogcGwyMzAzX2J1Zl9jbGVhcgorICoKKyAqIENsZWFyIG91dCBhbGwgZGF0YSBpbiB0aGUgY2lyY3VsYXIgYnVmZmVyLgorICovCisKK3N0YXRpYyB2b2lkIHBsMjMwM19idWZfY2xlYXIoc3RydWN0IHBsMjMwM19idWYgKnBiKQoreworCWlmIChwYiAhPSBOVUxMKQorCQlwYi0+YnVmX2dldCA9IHBiLT5idWZfcHV0OworCQkvKiBlcXVpdmFsZW50IHRvIGEgZ2V0IG9mIGFsbCBkYXRhIGF2YWlsYWJsZSAqLworfQorCisKKy8qCisgKiBwbDIzMDNfYnVmX2RhdGFfYXZhaWwKKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBvZiBkYXRhIGF2YWlsYWJsZSBpbiB0aGUgY2lyY3VsYXIKKyAqIGJ1ZmZlci4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IHBsMjMwM19idWZfZGF0YV9hdmFpbChzdHJ1Y3QgcGwyMzAzX2J1ZiAqcGIpCit7CisJaWYgKHBiICE9IE5VTEwpCisJCXJldHVybiAoKHBiLT5idWZfc2l6ZSArIHBiLT5idWZfcHV0IC0gcGItPmJ1Zl9nZXQpICUgcGItPmJ1Zl9zaXplKTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisKKy8qCisgKiBwbDIzMDNfYnVmX3NwYWNlX2F2YWlsCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2Ygc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBjaXJjdWxhcgorICogYnVmZmVyLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGwyMzAzX2J1Zl9zcGFjZV9hdmFpbChzdHJ1Y3QgcGwyMzAzX2J1ZiAqcGIpCit7CisJaWYgKHBiICE9IE5VTEwpCisJCXJldHVybiAoKHBiLT5idWZfc2l6ZSArIHBiLT5idWZfZ2V0IC0gcGItPmJ1Zl9wdXQgLSAxKSAlIHBiLT5idWZfc2l6ZSk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworCisvKgorICogcGwyMzAzX2J1Zl9wdXQKKyAqCisgKiBDb3B5IGRhdGEgZGF0YSBmcm9tIGEgdXNlciBidWZmZXIgYW5kIHB1dCBpdCBpbnRvIHRoZSBjaXJjdWxhciBidWZmZXIuCisgKiBSZXN0cmljdCB0byB0aGUgYW1vdW50IG9mIHNwYWNlIGF2YWlsYWJsZS4KKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBwbDIzMDNfYnVmX3B1dChzdHJ1Y3QgcGwyMzAzX2J1ZiAqcGIsIGNvbnN0IGNoYXIgKmJ1ZiwKKwl1bnNpZ25lZCBpbnQgY291bnQpCit7CisKKwl1bnNpZ25lZCBpbnQgbGVuOworCisKKwlpZiAocGIgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlsZW4gID0gcGwyMzAzX2J1Zl9zcGFjZV9hdmFpbChwYik7CisJaWYgKGNvdW50ID4gbGVuKQorCQljb3VudCA9IGxlbjsKKworCWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IHBiLT5idWZfYnVmICsgcGItPmJ1Zl9zaXplIC0gcGItPmJ1Zl9wdXQ7CisJaWYgKGNvdW50ID4gbGVuKSB7CisJCW1lbWNweShwYi0+YnVmX3B1dCwgYnVmLCBsZW4pOworCQltZW1jcHkocGItPmJ1Zl9idWYsIGJ1ZitsZW4sIGNvdW50IC0gbGVuKTsKKwkJcGItPmJ1Zl9wdXQgPSBwYi0+YnVmX2J1ZiArIGNvdW50IC0gbGVuOworCX0gZWxzZSB7CisJCW1lbWNweShwYi0+YnVmX3B1dCwgYnVmLCBjb3VudCk7CisJCWlmIChjb3VudCA8IGxlbikKKwkJCXBiLT5idWZfcHV0ICs9IGNvdW50OworCQllbHNlIC8qIGNvdW50ID09IGxlbiAqLworCQkJcGItPmJ1Zl9wdXQgPSBwYi0+YnVmX2J1ZjsKKwl9CisKKwlyZXR1cm4gY291bnQ7CisKK30KKworCisvKgorICogcGwyMzAzX2J1Zl9nZXQKKyAqCisgKiBHZXQgZGF0YSBmcm9tIHRoZSBjaXJjdWxhciBidWZmZXIgYW5kIGNvcHkgdG8gdGhlIGdpdmVuIGJ1ZmZlci4KKyAqIFJlc3RyaWN0IHRvIHRoZSBhbW91bnQgb2YgZGF0YSBhdmFpbGFibGUuCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGwyMzAzX2J1Zl9nZXQoc3RydWN0IHBsMjMwM19idWYgKnBiLCBjaGFyICpidWYsCisJdW5zaWduZWQgaW50IGNvdW50KQoreworCisJdW5zaWduZWQgaW50IGxlbjsKKworCisJaWYgKHBiID09IE5VTEwpCisJCXJldHVybiAwOworCisJbGVuID0gcGwyMzAzX2J1Zl9kYXRhX2F2YWlsKHBiKTsKKwlpZiAoY291bnQgPiBsZW4pCisJCWNvdW50ID0gbGVuOworCisJaWYgKGNvdW50ID09IDApCisJCXJldHVybiAwOworCisJbGVuID0gcGItPmJ1Zl9idWYgKyBwYi0+YnVmX3NpemUgLSBwYi0+YnVmX2dldDsKKwlpZiAoY291bnQgPiBsZW4pIHsKKwkJbWVtY3B5KGJ1ZiwgcGItPmJ1Zl9nZXQsIGxlbik7CisJCW1lbWNweShidWYrbGVuLCBwYi0+YnVmX2J1ZiwgY291bnQgLSBsZW4pOworCQlwYi0+YnVmX2dldCA9IHBiLT5idWZfYnVmICsgY291bnQgLSBsZW47CisJfSBlbHNlIHsKKwkJbWVtY3B5KGJ1ZiwgcGItPmJ1Zl9nZXQsIGNvdW50KTsKKwkJaWYgKGNvdW50IDwgbGVuKQorCQkJcGItPmJ1Zl9nZXQgKz0gY291bnQ7CisJCWVsc2UgLyogY291bnQgPT0gbGVuICovCisJCQlwYi0+YnVmX2dldCA9IHBiLT5idWZfYnVmOworCX0KKworCXJldHVybiBjb3VudDsKKworfQorCitzdGF0aWMgaW50IF9faW5pdCBwbDIzMDNfaW5pdCAodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJnBsMjMwM19kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZwbDIzMDNfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiAwOworZmFpbGVkX3VzYl9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnBsMjMwM19kZXZpY2UpOworZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI6CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgcGwyMzAzX2V4aXQgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIgKCZwbDIzMDNfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZwbDIzMDNfZGV2aWNlKTsKK30KKworCittb2R1bGVfaW5pdChwbDIzMDNfaW5pdCk7Cittb2R1bGVfZXhpdChwbDIzMDNfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfVkVSU0lPTihEUklWRVJfVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzFiNDcxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBQcm9saWZpYyBQTDIzMDMgVVNCIHRvIHNlcmlhbCBhZGFwdG9yIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqLworI2RlZmluZSBQTDIzMDNfVkVORE9SX0lECTB4MDY3YgorI2RlZmluZSBQTDIzMDNfUFJPRFVDVF9JRAkweDIzMDMKKyNkZWZpbmUgUEwyMzAzX1BST0RVQ1RfSURfUlNBUTIJCTB4MDRiYgorI2RlZmluZSBQTDIzMDNfUFJPRFVDVF9JRF9QSEFST1MJMHhhYWEwCisjZGVmaW5lIFBMMjMwM19QUk9EVUNUX0lEX1JTQVEzCQkweGFhYTIKKworI2RlZmluZSBBVEVOX1ZFTkRPUl9JRAkJMHgwNTU3CisjZGVmaW5lIEFURU5fVkVORE9SX0lEMgkJMHgwNTQ3CisjZGVmaW5lIEFURU5fUFJPRFVDVF9JRAkJMHgyMDA4CisKKyNkZWZpbmUgSU9EQVRBX1ZFTkRPUl9JRAkweDA0YmIKKyNkZWZpbmUgSU9EQVRBX1BST0RVQ1RfSUQJMHgwYTAzCisKKyNkZWZpbmUgRUxDT01fVkVORE9SX0lECQkweDA1NmUKKyNkZWZpbmUgRUxDT01fUFJPRFVDVF9JRAkweDUwMDMKKyNkZWZpbmUgRUxDT01fUFJPRFVDVF9JRF9VQ1NHVAkweDUwMDQKKworI2RlZmluZSBJVEVHTk9fVkVORE9SX0lECTB4MGViYQorI2RlZmluZSBJVEVHTk9fUFJPRFVDVF9JRAkweDEwODAKKworI2RlZmluZSBNQTYyMF9WRU5ET1JfSUQJCTB4MGRmNworI2RlZmluZSBNQTYyMF9QUk9EVUNUX0lECTB4MDYyMAorCisjZGVmaW5lIFJBVE9DX1ZFTkRPUl9JRAkJMHgwNTg0CisjZGVmaW5lIFJBVE9DX1BST0RVQ1RfSUQJMHhiMDAwCisKKyNkZWZpbmUgVFJJUFBfVkVORE9SX0lECQkweDI0NzgKKyNkZWZpbmUgVFJJUFBfUFJPRFVDVF9JRAkweDIwMDgKKworI2RlZmluZSBSQURJT1NIQUNLX1ZFTkRPUl9JRAkweDE0NTMKKyNkZWZpbmUgUkFESU9TSEFDS19QUk9EVUNUX0lECTB4NDAyNgorCisjZGVmaW5lIERDVTEwX1ZFTkRPUl9JRAkJMHgwNzMxCisjZGVmaW5lIERDVTEwX1BST0RVQ1RfSUQJMHgwNTI4CisKKyNkZWZpbmUgU0lURUNPTV9WRU5ET1JfSUQJMHg2MTg5CisjZGVmaW5lIFNJVEVDT01fUFJPRFVDVF9JRAkweDIwNjgKKworLyogQWxjYXRlbCBPVDUzNS83MzUgVVNCIGNhYmxlICovCisjZGVmaW5lIEFMQ0FURUxfVkVORE9SX0lECTB4MTFmNworI2RlZmluZSBBTENBVEVMX1BST0RVQ1RfSUQJMHgwMmRmCisKKy8qIFNhbXN1bmcgSTMzMCBwaG9uZSBjcmFkbGUgKi8KKyNkZWZpbmUgU0FNU1VOR19WRU5ET1JfSUQJMHgwNGU4CisjZGVmaW5lIFNBTVNVTkdfUFJPRFVDVF9JRAkweDgwMDEKKworI2RlZmluZSBTSUVNRU5TX1ZFTkRPUl9JRAkweDExZjUKKyNkZWZpbmUgU0lFTUVOU19QUk9EVUNUX0lEX1g2NQkweDAwMDMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zYWZlX3NlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NhZmVfc2VyaWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU4NWVkNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zYWZlX3NlcmlhbC5jCkBAIC0wLDAgKzEsNDUxIEBACisvKgorICogU2FmZSBFbmNhcHN1bGF0ZWQgVVNCIFNlcmlhbCBEcml2ZXIKKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMjAwMSBMaW5lbworICogICAgICBDb3B5cmlnaHQgKEMpIDIwMDEgSGV3bGV0dC1QYWNrYXJkCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBCeToKKyAqICAgICAgU3R1YXJ0IEx5bm5lIDxzbEBsaW5lby5jb20+LCBUb20gUnVzaHdvcnRoIDx0YnJAbGluZW8uY29tPgorICovCisKKy8qIAorICogVGhlIGVuY2Fwc3VsdGFpb24gaXMgZGVzaWduZWQgdG8gb3ZlcmNvbWUgZGlmZmljdWx0aWVzIHdpdGggc29tZSBVU0IgaGFyZHdhcmUuCisgKgorICogV2hpbGUgdGhlIFVTQiBwcm90b2NvbCBoYXMgYSBDUkMgb3ZlciB0aGUgZGF0YSB3aGlsZSBpbiB0cmFuc2l0LCBpLmUuIHdoaWxlCisgKiBiZWluZyBjYXJyaWVkIG92ZXIgdGhlIGJ1cywgdGhlcmUgaXMgbm8gZW5kIHRvIGVuZCBwcm90ZWN0aW9uLiBJZiB0aGUgaGFyZHdhcmUKKyAqIGhhcyBhbnkgcHJvYmxlbXMgZ2V0dGluZyB0aGUgZGF0YSBpbnRvIG9yIG91dCBvZiB0aGUgVVNCIHRyYW5zbWl0IGFuZCByZWNlaXZlCisgKiBGSUZPJ3MgdGhlbiBkYXRhIGNhbiBiZSBsb3N0LiAKKyAqCisgKiBUaGlzIHByb3RvY29sIGFkZHMgYSB0d28gYnl0ZSB0cmFpbGVyIHRvIGVhY2ggVVNCIHBhY2tldCB0byBzcGVjaWZ5IHRoZSBudW1iZXIKKyAqIG9mIGJ5dGVzIG9mIHZhbGlkIGRhdGEgYW5kIGEgMTAgYml0IENSQyB0aGF0IHdpbGwgYWxsb3cgdGhlIHJlY2VpdmVyIHRvIHZlcmlmeQorICogdGhhdCB0aGUgZW50aXJlIFVTQiBwYWNrZXQgd2FzIHJlY2VpdmVkIHdpdGhvdXQgZXJyb3IuCisgKgorICogQmVjYXVzZSBpbiB0aGlzIGNhc2UgdGhlIHNlbmRlciBhbmQgcmVjZWl2ZXIgYXJlIHRoZSBjbGFzcyBhbmQgZnVuY3Rpb24gZHJpdmVycworICogdGhlcmUgaXMgbm93IGVuZCB0byBlbmQgcHJvdGVjdGlvbi4KKyAqCisgKiBUaGVyZSBpcyBhbiBhZGRpdGlvbmFsIG9wdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGZvcmNlIGFsbCB0cmFuc21pdHRlZCBwYWNrZXRzCisgKiB0byBiZSBwYWRkZWQgdG8gdGhlIG1heGltdW0gcGFja2V0IHNpemUuIFRoaXMgcHJvdmlkZXMgYSB3b3JrIGFyb3VuZCBmb3Igc29tZQorICogZGV2aWNlcyB3aGljaCBoYXZlIHByb2JsZW1zIHdpdGggc21hbGwgVVNCIHBhY2tldHMuCisgKgorICogQXNzdW1pbmcgYSBwYWNrZXRzaXplIG9mIE46CisgKgorICogICAgICAwLi5OLTIgIGRhdGEgYW5kIG9wdGlvbmFsIHBhZGRpbmcKKyAqCisgKiAgICAgIE4tMiAgICAgYml0cyA3LTIgLSBudW1iZXIgb2YgYnl0ZXMgb2YgdmFsaWQgZGF0YQorICogICAgICAgICAgICAgIGJpdHMgMS0wIHRvcCB0d28gYml0cyBvZiAxMCBiaXQgQ1JDCisgKiAgICAgIE4tMSAgICAgYm90dG9tIDggYml0cyBvZiAxMCBiaXQgQ1JDCisgKgorICoKKyAqICAgICAgfCBEYXRhIExlbmd0aCAgICAgICB8IDEwIGJpdCBDUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgKyA3IC4gNiAuIDUgLiA0IC4gMyAuIDIgLiAxIC4gMCB8IDcgLiA2IC4gNSAuIDQgLiAzIC4gMiAuIDEgLiAwICsKKyAqCisgKiBUaGUgMTAgYml0IENSQyBpcyBjb21wdXRlZCBhY3Jvc3MgdGhlIHNlbnQgZGF0YSwgZm9sbG93ZWQgYnkgdGhlIHRyYWlsZXIgd2l0aAorICogdGhlIGxlbmd0aCBzZXQgYW5kIHRoZSBDUkMgc2V0IHRvIHplcm8uIFRoZSBDUkMgaXMgdGhlbiBPUidkIGludG8gdGhlIHRyYWlsZXIuCisgKgorICogV2hlbiByZWNlaXZlZCBhIDEwIGJpdCBDUkMgaXMgY29tcHV0ZWQgb3ZlciB0aGUgZW50aXJlIGZyYW1lIGluY2x1ZGluZyB0aGUgdHJhaWxlcgorICogYW5kIHNob3VsZCBiZSBlcXVhbCB0byB6ZXJvLgorICoKKyAqIFR3byBtb2R1bGUgcGFyYW1ldGVycyBhcmUgdXNlZCB0byBjb250cm9sIHRoZSBlbmNhcHN1bGF0aW9uLCBpZiBib3RoIGFyZQorICogdHVybmVkIG9mIHRoZSBtb2R1bGUgd29ya3MgYXMgYSBzaW1wbGUgc2VyaWFsIGRldmljZSB3aXRoIE5PCisgKiBlbmNhcHN1bGF0aW9uLgorICoKKyAqIFNlZSBsaW51eC9kcml2ZXJzL3VzYmQvc2VyaWFsX2ZkIGZvciBhIGRldmljZSBmdW5jdGlvbiBkcml2ZXIKKyAqIGltcGxlbWVudGF0aW9uIG9mIHRoaXMuCisgKgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorCisKKyNpZm5kZWYgQ09ORklHX1VTQl9TQUZFX1BBRERFRAorI2RlZmluZSBDT05GSUdfVVNCX1NBRkVfUEFEREVEIDAKKyNlbmRpZgorCitzdGF0aWMgaW50IGRlYnVnOworc3RhdGljIGludCBzYWZlID0gMTsKK3N0YXRpYyBpbnQgcGFkZGVkID0gQ09ORklHX1VTQl9TQUZFX1BBRERFRDsKKworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuMGIiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgInNsQGxpbmVvLmNvbSwgdGJyQGxpbmVvLmNvbSIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBTYWZlIEVuY2Fwc3VsYXRlZCBTZXJpYWwiCisKK01PRFVMRV9BVVRIT1IgKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OIChEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JEX1NBRkVfU0VSSUFMX1ZFTkRPUikgJiYgIWRlZmluZWQoQ09ORklHX1VTQkRfU0FGRV9TRVJJQUxfUFJPRFVDVCkKKyNhYm9ydCAiU0FGRV9TRVJJQUxfVkVORE9SIGRlZmluZWQgd2l0aG91dCBTQUZFX1NFUklBTF9QUk9EVUNUIgorI2VuZGlmCisKKyNpZiAhIGRlZmluZWQoQ09ORklHX1VTQkRfU0FGRV9TRVJJQUxfVkVORE9SKQorc3RhdGljIF9fdTE2IHZlbmRvcjsJCS8vIG5vIGRlZmF1bHQKK3N0YXRpYyBfX3UxNiBwcm9kdWN0OwkJLy8gbm8gZGVmYXVsdAorbW9kdWxlX3BhcmFtKHZlbmRvciwgdXNob3J0LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModmVuZG9yLCAiVXNlciBzcGVjaWZpZWQgVVNCIGlkVmVuZG9yIChyZXF1aXJlZCkiKTsKK21vZHVsZV9wYXJhbShwcm9kdWN0LCB1c2hvcnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhwcm9kdWN0LCAiVXNlciBzcGVjaWZpZWQgVVNCIGlkUHJvZHVjdCAocmVxdWlyZWQpIik7CisjZW5kaWYKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKKworbW9kdWxlX3BhcmFtKHNhZmUsIGJvb2wsIDApOworTU9EVUxFX1BBUk1fREVTQyhzYWZlLCAiVHVybiBTYWZlIEVuY2Fwc3VsYXRpb24gT24vT2ZmIik7CisKK21vZHVsZV9wYXJhbShwYWRkZWQsIGJvb2wsIDApOworTU9EVUxFX1BBUk1fREVTQyhwYWRkZWQsICJQYWQgdG8gZnVsbCB3TWF4UGFja2V0U2l6ZSBPbi9PZmYiKTsKKworI2RlZmluZSBDRENfREVWSUNFX0NMQVNTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMgorCisjZGVmaW5lIENEQ19JTlRFUkZBQ0VfQ0xBU1MgICAgICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIENEQ19JTlRFUkZBQ0VfU1VCQ0xBU1MgICAgICAgICAgICAgICAgICAweDA2CisKKyNkZWZpbmUgTElORU9fSU5URVJGQUNFX0NMQVNTICAgICAgICAgICAgICAgICAgIDB4ZmYKKworI2RlZmluZSBMSU5FT19JTlRFUkZBQ0VfU1VCQ0xBU1NfU0FGRU5FVCAgICAgICAgMHgwMQorI2RlZmluZSBMSU5FT19TQUZFTkVUX0NSQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBMSU5FT19TQUZFTkVUX0NSQ19QQURERUQgICAgICAgICAgICAgICAgMHgwMgorCisjZGVmaW5lIExJTkVPX0lOVEVSRkFDRV9TVUJDTEFTU19TQUZFU0VSSUFMICAgICAweDAyCisjZGVmaW5lIExJTkVPX1NBRkVTRVJJQUxfQ1JDICAgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIExJTkVPX1NBRkVTRVJJQUxfQ1JDX1BBRERFRCAgICAgICAgICAgICAweDAyCisKKworI2RlZmluZSBNWV9VU0JfREVWSUNFKHZlbmQscHJvZCxkYyxpYyxpc2MpIFwKKyAgICAgICAgLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfCBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9DTEFTUyB8IFwKKyAgICAgICAgICAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLCBcCisgICAgICAgIC5pZFZlbmRvciA9ICh2ZW5kKSwgXAorICAgICAgICAuaWRQcm9kdWN0ID0gKHByb2QpLFwKKyAgICAgICAgLmJEZXZpY2VDbGFzcyA9IChkYyksXAorICAgICAgICAuYkludGVyZmFjZUNsYXNzID0gKGljKSwgXAorICAgICAgICAuYkludGVyZmFjZVN1YkNsYXNzID0gKGlzYyksCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0geworCXtNWV9VU0JfREVWSUNFICgweDQ5ZiwgMHhmZmZmLCBDRENfREVWSUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9TVUJDTEFTU19TQUZFU0VSSUFMKX0sCS8vIEl0c3kKKwl7TVlfVVNCX0RFVklDRSAoMHgzZjAsIDB4MjEwMSwgQ0RDX0RFVklDRV9DTEFTUywgTElORU9fSU5URVJGQUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfU1VCQ0xBU1NfU0FGRVNFUklBTCl9LAkvLyBDYWx5cHNvCisJe01ZX1VTQl9ERVZJQ0UgKDB4NGRkLCAweDgwMDEsIENEQ19ERVZJQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9DTEFTUywgTElORU9fSU5URVJGQUNFX1NVQkNMQVNTX1NBRkVTRVJJQUwpfSwJLy8gSXJpcyAKKwl7TVlfVVNCX0RFVklDRSAoMHg0ZGQsIDB4ODAwMiwgQ0RDX0RFVklDRV9DTEFTUywgTElORU9fSU5URVJGQUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfU1VCQ0xBU1NfU0FGRVNFUklBTCl9LAkvLyBDb2xsaWUgCisJe01ZX1VTQl9ERVZJQ0UgKDB4NGRkLCAweDgwMDMsIENEQ19ERVZJQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9DTEFTUywgTElORU9fSU5URVJGQUNFX1NVQkNMQVNTX1NBRkVTRVJJQUwpfSwJLy8gQ29sbGllIAorCXtNWV9VU0JfREVWSUNFICgweDRkZCwgMHg4MDA0LCBDRENfREVWSUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9TVUJDTEFTU19TQUZFU0VSSUFMKX0sCS8vIENvbGxpZSAKKwl7TVlfVVNCX0RFVklDRSAoMHg1ZjksIDB4ZmZmZiwgQ0RDX0RFVklDRV9DTEFTUywgTElORU9fSU5URVJGQUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfU1VCQ0xBU1NfU0FGRVNFUklBTCl9LAkvLyBTaGFycCB0bXAKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfU0FGRV9TRVJJQUxfVkVORE9SKQorCXtNWV9VU0JfREVWSUNFCisJIChDT05GSUdfVVNCX1NBRkVfU0VSSUFMX1ZFTkRPUiwgQ09ORklHX1VTQl9TQUZFX1NFUklBTF9QUk9EVUNULCBDRENfREVWSUNFX0NMQVNTLAorCSAgTElORU9fSU5URVJGQUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfU1VCQ0xBU1NfU0FGRVNFUklBTCl9LAorI2VuZGlmCisJLy8gZXh0cmEgbnVsbCBlbnRyeSBmb3IgbW9kdWxlIAorCS8vIHZlbmRvci9wcm9kdWMgcGFyYW1ldGVycworCXtNWV9VU0JfREVWSUNFICgwLCAwLCBDRENfREVWSUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9TVUJDTEFTU19TQUZFU0VSSUFMKX0sCisJe30JCQkvLyB0ZXJtaW5hdGluZyBlbnRyeSAKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2FmZV9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJInNhZmVfc2VyaWFsIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorfTsKKworc3RhdGljIF9fdTE2IGNyYzEwX3RhYmxlWzI1Nl0gPSB7CisJMHgwMDAsIDB4MjMzLCAweDI1NSwgMHgwNjYsIDB4Mjk5LCAweDBhYSwgMHgwY2MsIDB4MmZmLCAweDMwMSwgMHgxMzIsIDB4MTU0LCAweDM2NywgMHgxOTgsIDB4M2FiLCAweDNjZCwgMHgxZmUsCisJMHgwMzEsIDB4MjAyLCAweDI2NCwgMHgwNTcsIDB4MmE4LCAweDA5YiwgMHgwZmQsIDB4MmNlLCAweDMzMCwgMHgxMDMsIDB4MTY1LCAweDM1NiwgMHgxYTksIDB4MzlhLCAweDNmYywgMHgxY2YsCisJMHgwNjIsIDB4MjUxLCAweDIzNywgMHgwMDQsIDB4MmZiLCAweDBjOCwgMHgwYWUsIDB4MjlkLCAweDM2MywgMHgxNTAsIDB4MTM2LCAweDMwNSwgMHgxZmEsIDB4M2M5LCAweDNhZiwgMHgxOWMsCisJMHgwNTMsIDB4MjYwLCAweDIwNiwgMHgwMzUsIDB4MmNhLCAweDBmOSwgMHgwOWYsIDB4MmFjLCAweDM1MiwgMHgxNjEsIDB4MTA3LCAweDMzNCwgMHgxY2IsIDB4M2Y4LCAweDM5ZSwgMHgxYWQsCisJMHgwYzQsIDB4MmY3LCAweDI5MSwgMHgwYTIsIDB4MjVkLCAweDA2ZSwgMHgwMDgsIDB4MjNiLCAweDNjNSwgMHgxZjYsIDB4MTkwLCAweDNhMywgMHgxNWMsIDB4MzZmLCAweDMwOSwgMHgxM2EsCisJMHgwZjUsIDB4MmM2LCAweDJhMCwgMHgwOTMsIDB4MjZjLCAweDA1ZiwgMHgwMzksIDB4MjBhLCAweDNmNCwgMHgxYzcsIDB4MWExLCAweDM5MiwgMHgxNmQsIDB4MzVlLCAweDMzOCwgMHgxMGIsCisJMHgwYTYsIDB4Mjk1LCAweDJmMywgMHgwYzAsIDB4MjNmLCAweDAwYywgMHgwNmEsIDB4MjU5LCAweDNhNywgMHgxOTQsIDB4MWYyLCAweDNjMSwgMHgxM2UsIDB4MzBkLCAweDM2YiwgMHgxNTgsCisJMHgwOTcsIDB4MmE0LCAweDJjMiwgMHgwZjEsIDB4MjBlLCAweDAzZCwgMHgwNWIsIDB4MjY4LCAweDM5NiwgMHgxYTUsIDB4MWMzLCAweDNmMCwgMHgxMGYsIDB4MzNjLCAweDM1YSwgMHgxNjksCisJMHgxODgsIDB4M2JiLCAweDNkZCwgMHgxZWUsIDB4MzExLCAweDEyMiwgMHgxNDQsIDB4Mzc3LCAweDI4OSwgMHgwYmEsIDB4MGRjLCAweDJlZiwgMHgwMTAsIDB4MjIzLCAweDI0NSwgMHgwNzYsCisJMHgxYjksIDB4MzhhLCAweDNlYywgMHgxZGYsIDB4MzIwLCAweDExMywgMHgxNzUsIDB4MzQ2LCAweDJiOCwgMHgwOGIsIDB4MGVkLCAweDJkZSwgMHgwMjEsIDB4MjEyLCAweDI3NCwgMHgwNDcsCisJMHgxZWEsIDB4M2Q5LCAweDNiZiwgMHgxOGMsIDB4MzczLCAweDE0MCwgMHgxMjYsIDB4MzE1LCAweDJlYiwgMHgwZDgsIDB4MGJlLCAweDI4ZCwgMHgwNzIsIDB4MjQxLCAweDIyNywgMHgwMTQsCisJMHgxZGIsIDB4M2U4LCAweDM4ZSwgMHgxYmQsIDB4MzQyLCAweDE3MSwgMHgxMTcsIDB4MzI0LCAweDJkYSwgMHgwZTksIDB4MDhmLCAweDJiYywgMHgwNDMsIDB4MjcwLCAweDIxNiwgMHgwMjUsCisJMHgxNGMsIDB4MzdmLCAweDMxOSwgMHgxMmEsIDB4M2Q1LCAweDFlNiwgMHgxODAsIDB4M2IzLCAweDI0ZCwgMHgwN2UsIDB4MDE4LCAweDIyYiwgMHgwZDQsIDB4MmU3LCAweDI4MSwgMHgwYjIsCisJMHgxN2QsIDB4MzRlLCAweDMyOCwgMHgxMWIsIDB4M2U0LCAweDFkNywgMHgxYjEsIDB4MzgyLCAweDI3YywgMHgwNGYsIDB4MDI5LCAweDIxYSwgMHgwZTUsIDB4MmQ2LCAweDJiMCwgMHgwODMsCisJMHgxMmUsIDB4MzFkLCAweDM3YiwgMHgxNDgsIDB4M2I3LCAweDE4NCwgMHgxZTIsIDB4M2QxLCAweDIyZiwgMHgwMWMsIDB4MDdhLCAweDI0OSwgMHgwYjYsIDB4Mjg1LCAweDJlMywgMHgwZDAsCisJMHgxMWYsIDB4MzJjLCAweDM0YSwgMHgxNzksIDB4Mzg2LCAweDFiNSwgMHgxZDMsIDB4M2UwLCAweDIxZSwgMHgwMmQsIDB4MDRiLCAweDI3OCwgMHgwODcsIDB4MmI0LCAweDJkMiwgMHgwZTEsCit9OworCisjZGVmaW5lIENSQzEwX0lOSVRGQ1MgICAgIDB4MDAwCS8vIEluaXRpYWwgRkNTIHZhbHVlCisjZGVmaW5lIENSQzEwX0dPT0RGQ1MgICAgIDB4MDAwCS8vIEdvb2QgZmluYWwgRkNTIHZhbHVlCisjZGVmaW5lIENSQzEwX0ZDUyhmY3MsIGMpICggKCgoZmNzKSA8PCA4KSAmIDB4M2ZmKSBeIGNyYzEwX3RhYmxlWygoZmNzKSA+PiAyKSAmIDB4ZmZdIF4gKGMpKQorCisvKiogICAgIAorICogZmNzX2NvbXB1dGUxMCAtIG1lbWNweSBhbmQgY2FsY3VsYXRlIDEwIGJpdCBDUkMgYWNyb3NzIGJ1ZmZlcgorICogQHNwOiBwb2ludGVyIHRvIGJ1ZmZlcgorICogQGxlbjogbnVtYmVyIG9mIGJ5dGVzCisgKiBAZmNzOiBzdGFydGluZyBGQ1MKKyAqCisgKiBQZXJmb3JtIGEgbWVtY3B5IGFuZCBjYWxjdWxhdGUgZmNzIHVzaW5nIHBwcCAxMGJpdCBDUkMgYWxnb3JpdGhtLiBSZXR1cm4KKyAqIG5ldyAxMCBiaXQgRkNTLgorICovCitzdGF0aWMgX191MTYgX19pbmxpbmVfXyBmY3NfY29tcHV0ZTEwICh1bnNpZ25lZCBjaGFyICpzcCwgaW50IGxlbiwgX191MTYgZmNzKQoreworCWZvciAoOyBsZW4tLSA+IDA7IGZjcyA9IENSQzEwX0ZDUyAoZmNzLCAqc3ArKykpOworCXJldHVybiBmY3M7Cit9CisKK3N0YXRpYyB2b2lkIHNhZmVfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgbGVuZ3RoID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCWludCBpOworCWludCByZXN1bHQ7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnICgiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwlkYmcgKCJzYWZlX3JlYWRfYnVsa19jYWxsYmFjayBsZW5ndGg6ICVkIiwgcG9ydC0+cmVhZF91cmItPmFjdHVhbF9sZW5ndGgpOworI2lmZGVmIEVDSE9fUkNWCisJeworCQlpbnQgaTsKKwkJdW5zaWduZWQgY2hhciAqY3AgPSBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyOworCQlmb3IgKGkgPSAwOyBpIDwgcG9ydC0+cmVhZF91cmItPmFjdHVhbF9sZW5ndGg7IGkrKykgeworCQkJaWYgKChpICUgMzIpID09IDApIHsKKwkJCQlwcmludGsgKCJcbnJ1WyUwMnhdICIsIGkpOworCQkJfQorCQkJcHJpbnRrICgiJTAyeCAiLCAqY3ArKyk7CisJCX0KKwkJcHJpbnRrICgiXG4iKTsKKwl9CisjZW5kaWYKKwlpZiAoc2FmZSkgeworCQlfX3UxNiBmY3M7CisJCWlmICghKGZjcyA9IGZjc19jb21wdXRlMTAgKGRhdGEsIGxlbmd0aCwgQ1JDMTBfSU5JVEZDUykpKSB7CisKKwkJCWludCBhY3R1YWxfbGVuZ3RoID0gZGF0YVtsZW5ndGggLSAyXSA+PiAyOworCisJCQlpZiAoYWN0dWFsX2xlbmd0aCA8PSAobGVuZ3RoIC0gMikpIHsKKworCQkJCWluZm8gKCIlcyAtIGFjdHVhbDogJWQiLCBfX0ZVTkNUSU9OX18sIGFjdHVhbF9sZW5ndGgpOworCisJCQkJZm9yIChpID0gMDsgaSA8IGFjdHVhbF9sZW5ndGg7IGkrKykgeworCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhciAocG9ydC0+dHR5LCBkYXRhW2ldLCAwKTsKKwkJCQl9CisJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2ggKHBvcnQtPnR0eSk7CisJCQl9IGVsc2UgeworCQkJCWVyciAoIiVzIC0gaW5jb25zaXN0ZW50IGxlbmd0aHMgJWQ6JWQiLCBfX0ZVTkNUSU9OX18sCisJCQkJICAgICBhY3R1YWxfbGVuZ3RoLCBsZW5ndGgpOworCQkJfQorCQl9IGVsc2UgeworCQkJZXJyICgiJXMgLSBiYWQgQ1JDICV4IiwgX19GVU5DVElPTl9fLCBmY3MpOworCQl9CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhciAocG9ydC0+dHR5LCBkYXRhW2ldLCAwKTsKKwkJfQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaCAocG9ydC0+dHR5KTsKKwl9CisKKwkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgICovCisJdXNiX2ZpbGxfYnVsa191cmIgKHVyYiwgcG9ydC0+c2VyaWFsLT5kZXYsCisJCSAgICAgICB1c2JfcmN2YnVsa3BpcGUgKHBvcnQtPnNlcmlhbC0+ZGV2LCBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCSAgICAgICB1cmItPnRyYW5zZmVyX2J1ZmZlciwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkgICAgICAgc2FmZV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCisJaWYgKChyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKSkpIHsKKwkJZXJyICgiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2FmZV93cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKKwlpbnQgcmVzdWx0OworCWludCBpOworCWludCBwYWNrZXRfbGVuZ3RoOworCisJZGJnICgic2FmZV93cml0ZSBwb3J0OiAlcCAlZCB1cmI6ICVwIGNvdW50OiAlZCIsIHBvcnQsIHBvcnQtPm51bWJlciwgcG9ydC0+d3JpdGVfdXJiLAorCSAgICAgY291bnQpOworCisJaWYgKCFwb3J0LT53cml0ZV91cmIpIHsKKwkJZGJnICgiJXMgLSB3cml0ZSB1cmIgTlVMTCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAoMCk7CisJfQorCisJZGJnICgic2FmZV93cml0ZSB3cml0ZV91cmI6ICVkIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgiLAorCSAgICAgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKworCWlmICghcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSB7CisJCWRiZyAoIiVzIC0gd3JpdGUgdXJiIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggemVybyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAoMCk7CisJfQorCWlmIChjb3VudCA9PSAwKSB7CisJCWRiZyAoIiVzIC0gd3JpdGUgcmVxdWVzdCBvZiAwIGJ5dGVzIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKHBvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQlkYmcgKCIlcyAtIGFscmVhZHkgd3JpdGluZyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAoMCk7CisJfQorCisJcGFja2V0X2xlbmd0aCA9IHBvcnQtPmJ1bGtfb3V0X3NpemU7CS8vIGdldCBtYXggcGFja2V0c2l6ZQorCisJaSA9IHBhY2tldF9sZW5ndGggLSAoc2FmZSA/IDIgOiAwKTsJLy8gZ2V0IGJ5dGVzIHRvIHNlbmQKKwljb3VudCA9IChjb3VudCA+IGkpID8gaSA6IGNvdW50OworCisKKwkvLyBnZXQgdGhlIGRhdGEgaW50byB0aGUgdHJhbnNmZXIgYnVmZmVyCisJZGF0YSA9IHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyOworCW1lbXNldCAoZGF0YSwgJzAnLCBwYWNrZXRfbGVuZ3RoKTsKKworCW1lbWNweSAoZGF0YSwgYnVmLCBjb3VudCk7CisKKwlpZiAoc2FmZSkgeworCQlfX3UxNiBmY3M7CisKKwkJLy8gcGFkIGlmIG5lY2Vzc2FyeQorCQlpZiAoIXBhZGRlZCkgeworCQkJcGFja2V0X2xlbmd0aCA9IGNvdW50ICsgMjsKKwkJfQorCQkvLyBzZXQgY291bnQKKwkJZGF0YVtwYWNrZXRfbGVuZ3RoIC0gMl0gPSBjb3VudCA8PCAyOworCQlkYXRhW3BhY2tldF9sZW5ndGggLSAxXSA9IDA7CisKKwkJLy8gY29tcHV0ZSBmY3MgYW5kIGluc2VydCBpbnRvIHRyYWlsZXIKKwkJZmNzID0gZmNzX2NvbXB1dGUxMCAoZGF0YSwgcGFja2V0X2xlbmd0aCwgQ1JDMTBfSU5JVEZDUyk7CisJCWRhdGFbcGFja2V0X2xlbmd0aCAtIDJdIHw9IGZjcyA+PiA4OworCQlkYXRhW3BhY2tldF9sZW5ndGggLSAxXSB8PSBmY3MgJiAweGZmOworCisJCS8vIHNldCBsZW5ndGggdG8gc2VuZAorCQlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBwYWNrZXRfbGVuZ3RoOworCX0gZWxzZSB7CisJCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGNvdW50OworCX0KKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCBjb3VudCwgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIpOworI2lmZGVmIEVDSE9fVFgKKwl7CisJCWludCBpOworCQl1bnNpZ25lZCBjaGFyICpjcCA9IHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyOworCQlmb3IgKGkgPSAwOyBpIDwgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOyBpKyspIHsKKwkJCWlmICgoaSAlIDMyKSA9PSAwKSB7CisJCQkJcHJpbnRrICgiXG5zdVslMDJ4XSAiLCBpKTsKKwkJCX0KKwkJCXByaW50ayAoIiUwMnggIiwgKmNwKyspOworCQl9CisJCXByaW50ayAoIlxuIik7CisJfQorI2VuZGlmCisJcG9ydC0+d3JpdGVfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlpZiAoKHJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiIChwb3J0LT53cml0ZV91cmIsIEdGUF9LRVJORUwpKSkgeworCQllcnIgKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCXJldHVybiAwOworCX0KKwlkYmcgKCIlcyB1cmI6ICVwIHN1Ym1pdHRlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+d3JpdGVfdXJiKTsKKworCXJldHVybiAoY291bnQpOworfQorCitzdGF0aWMgaW50IHNhZmVfd3JpdGVfcm9vbSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlpbnQgcm9vbSA9IDA7CQkvLyBEZWZhdWx0OiBubyByb29tCisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAocG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKQorCQlyb29tID0gcG9ydC0+YnVsa19vdXRfc2l6ZSAtIChzYWZlID8gMiA6IDApOworCisJaWYgKHJvb20pIHsKKwkJZGJnICgic2FmZV93cml0ZV9yb29tIHJldHVybnMgJWQiLCByb29tKTsKKwl9CisKKwlyZXR1cm4gKHJvb20pOworfQorCitzdGF0aWMgaW50IHNhZmVfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzd2l0Y2ggKHNlcmlhbC0+aW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wpIHsKKwljYXNlIExJTkVPX1NBRkVTRVJJQUxfQ1JDOgorCQlicmVhazsKKwljYXNlIExJTkVPX1NBRkVTRVJJQUxfQ1JDX1BBRERFRDoKKwkJcGFkZGVkID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgc2FmZV9kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiU2FmZSIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luID0JTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfaW4gPQkJTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfb3V0ID0JCU5VTV9ET05UX0NBUkUsCisJLm51bV9wb3J0cyA9CQkxLAorCS53cml0ZSA9CQlzYWZlX3dyaXRlLAorCS53cml0ZV9yb29tID0JCXNhZmVfd3JpdGVfcm9vbSwKKwkucmVhZF9idWxrX2NhbGxiYWNrID0Jc2FmZV9yZWFkX2J1bGtfY2FsbGJhY2ssCisJLmF0dGFjaCA9CQlzYWZlX3N0YXJ0dXAsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzYWZlX2luaXQgKHZvaWQpCit7CisJaW50IGksIHJldHZhbDsKKworCWluZm8gKERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfQVVUSE9SKTsKKwlpbmZvIChEUklWRVJfREVTQyk7CisJaW5mbyAoInZlbmRvcjogJXggcHJvZHVjdDogJXggc2FmZTogJWQgcGFkZGVkOiAlZFxuIiwgdmVuZG9yLCBwcm9kdWN0LCBzYWZlLCBwYWRkZWQpOworCisJLy8gaWYgd2UgaGF2ZSB2ZW5kb3IgLyBwcm9kdWN0IHBhcmFtZXRlcnMgcGF0Y2ggdGhlbSBpbnRvIGlkIGxpc3QKKwlpZiAodmVuZG9yIHx8IHByb2R1Y3QpIHsKKwkJaW5mbyAoInZlbmRvcjogJXggcHJvZHVjdDogJXhcbiIsIHZlbmRvciwgcHJvZHVjdCk7CisKKwkJZm9yIChpID0gMDsgaSA8IChzaXplb2YgKGlkX3RhYmxlKSAvIHNpemVvZiAoc3RydWN0IHVzYl9kZXZpY2VfaWQpKTsgaSsrKSB7CisJCQlpZiAoIWlkX3RhYmxlW2ldLmlkVmVuZG9yICYmICFpZF90YWJsZVtpXS5pZFByb2R1Y3QpIHsKKwkJCQlpZF90YWJsZVtpXS5pZFZlbmRvciA9IHZlbmRvcjsKKwkJCQlpZF90YWJsZVtpXS5pZFByb2R1Y3QgPSBwcm9kdWN0OworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3Rlcigmc2FmZV9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZzYWZlX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOworCisJcmV0dXJuIDA7CitmYWlsZWRfdXNiX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigmc2FmZV9kZXZpY2UpOworZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNhZmVfZXhpdCAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlciAoJnNhZmVfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZzYWZlX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0IChzYWZlX2luaXQpOworbW9kdWxlX2V4aXQgKHNhZmVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfZndfMzQxMC5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL3RpX2Z3XzM0MTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWU4ODU3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3RpX2Z3XzM0MTAuaApAQCAtMCwwICsxLDg4NSBAQAorLyogdmk6IHRzPTggc3c9OAorICoKKyAqIFRJIDM0MTAgVVNCIFNlcmlhbCBEcml2ZXIgRmlybXdhcmUgSGVhZGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFRleGFzIEluc3RydW1lbnRzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9USV9GV18zNDEwX0hfCisjZGVmaW5lIF9USV9GV18zNDEwX0hfCisKKy8qIGZpcm13YXJlIDkvMTAvMDQgRlczNDEwX1NwZWNpYWxfU3RhcnRXZG9nT25TdGFydFBvcnQgKi8KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgdGlfZndfMzQxMFtdID0geworMHhDMiwgMHgzNSwJLyogZmlybXdhcmUgaW1hZ2UgbGVuZ3RoIGV4Y2x1ZGluZyBoZWFkZXIsIGxpdHRsZSBlbmRpYW4gKi8KKzB4MDAsIAkJLyogcGxhY2Vob2xkZXIgZm9yIGNoZWNrc3VtICovCisKKzB4MDIsMHgwMCwweDFlLDB4MDIsMHgxYSwweGRiLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDAyLDB4MzIsMHhjYiwweGZmLDB4ZmYsCisweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHgwMiwweDMzLDB4NzYsMHg3NSwweDgxLAorMHhjZSwweDkwLDB4ZmQsMHhlOCwweDg1LDB4ODMsMHhhMCwweDEyLDB4MzQsMHhlYSwweGVjLDB4NGQsMHg2MCwweDZhLDB4NzgsMHhhYiwKKzB4ODAsMHgwMywweDc2LDB4MDAsMHgxOCwweGI4LDB4OWMsMHhmYSwweDc4LDB4N2YsMHg4MCwweDAzLDB4NzYsMHgwMCwweDE4LDB4YjgsCisweDY1LDB4ZmEsMHg3OCwweDIwLDB4ODAsMHgwMywweDc2LDB4MDAsMHgxOCwweGI4LDB4MjAsMHhmYSwweDkwLDB4ZmQsMHhkZCwweGFlLAorMHg4MywweGFmLDB4ODIsMHg5MCwweGZiLDB4ZjgsMHgxMiwweDAwLDB4YTEsMHg2MCwweDA1LDB4ZTQsMHhmMCwweGEzLDB4ODAsMHhmNiwKKzB4OTAsMHhmZCwweGU4LDB4YTgsMHg4MiwweDkwLDB4ZmQsMHhlOCwweGE5LDB4ODIsMHhlOCwweGMzLDB4OTksMHg1MCwweDA1LDB4NzYsCisweDAwLDB4MDgsMHg4MCwweGY2LDB4OTAsMHgwMCwweGZmLDB4MTIsMHgwMCwweGFhLDB4OTAsMHgwMSwweDAzLDB4MTIsMHgwMCwweGFhLAorMHg5MCwweDAxLDB4MDcsMHgxMiwweDAwLDB4YWEsMHg5MCwweDAxLDB4MGIsMHgxMiwweDAwLDB4YzgsMHg5MCwweDAxLDB4MTEsMHgxMiwKKzB4MDAsMHhjOCwweDkwLDB4MDEsMHgxNywweDEyLDB4MDAsMHhjOCwweDc1LDB4ZDAsMHgwMCwweDEyLDB4MzMsMHhjOCwweDAyLDB4MDEsCisweDFkLDB4ZWYsMHg2NSwweDgyLDB4NzAsMHgwMywweGVlLDB4NjUsMHg4MywweDIyLDB4ZTQsMHg5MywweGY4LDB4NzQsMHgwMSwweDkzLAorMHhmOSwweDc0LDB4MDIsMHg5MywweGZlLDB4NzQsMHgwMywweDkzLDB4ZjUsMHg4MiwweDhlLDB4ODMsMHhlOCwweDY5LDB4NzAsMHgwMSwKKzB4MjIsMHhlNCwweDkzLDB4ZjYsMHhhMywweDA4LDB4ODAsMHhmNCwweGU0LDB4OTMsMHhmYywweDc0LDB4MDEsMHg5MywweGZkLDB4NzQsCisweDAyLDB4OTMsMHhmZSwweDc0LDB4MDMsMHg5MywweGZmLDB4NzQsMHgwNCwweDkzLDB4ZjgsMHg3NCwweDA1LDB4OTMsMHhmNSwweDgyLAorMHg4OCwweDgzLDB4MTIsMHgwMCwweGExLDB4NzAsMHgwMSwweDIyLDB4ZTQsMHg5MywweGEzLDB4YTgsMHg4MywweGE5LDB4ODIsMHg4YywKKzB4ODMsMHg4ZCwweDgyLDB4ZjAsMHhhMywweGFjLDB4ODMsMHhhZCwweDgyLDB4ODgsMHg4MywweDg5LDB4ODIsMHg4MCwweGUzLDB4MjEsCisweDIxLDB4MDQsMHg5MiwweDgwLDB4ODAsMHgwNCwweDkyLDB4YWMsMHhhZSwweDA0LDB4OTIsMHhmZCwweGU4LDB4MDQsMHg5NCwweDA0LAorMHg5NCwweGZiLDB4ZjMsMHgwNCwweDk5LDB4MDQsMHg5NCwweGZiLDB4ZjMsMHgwNCwweGY5LDB4MDQsMHhmOSwweDgwLDB4ZmUsMHhkMCwKKzB4ZjAsMHgzMCwweGYwLDB4MDksMHgyMCwweGYzLDB4MDMsMHhmNiwweDgwLDB4MTAsMHhmNywweDgwLDB4MGQsMHgzMCwweGYxLDB4MDksCisweDIwLDB4ZjMsMHgwMywweGYyLDB4ODAsMHgwNCwweGYzLDB4ODAsMHgwMSwweGYwLDB4MjAsMHhmNCwweDA0LDB4ZmMsMHhkMCwweGUwLAorMHhjYywweDIyLDB4Y2MsMHhjMCwweGUwLDB4MTIsMHgwMSwweDVhLDB4MDIsMHgwMSwweDRiLDB4YmMsMHgwMCwweDA1LDB4ZDAsMHhmMCwKKzB4YWMsMHhmMCwweDIyLDB4YzMsMHgxMywweGRjLDB4ZmMsMHgwMiwweDAxLDB4MjEsMHhiZiwweDAwLDB4MDksMHhlZCwweDI1LDB4ODIsCisweDc1LDB4ZjAsMHgwMSwweGY4LDB4ZTYsMHgyMiwweGJmLDB4MDEsMHgwZiwweGVkLDB4MjUsMHg4MiwweGY1LDB4ODIsMHhlZSwweDM1LAorMHg4MywweGY1LDB4ODMsMHg3NSwweGYwLDB4MDQsMHhlMCwweDIyLDB4ZWQsMHgyNSwweDgyLDB4NzUsMHhmMCwweDAyLDB4ZjgsMHhlMiwKKzB4MjIsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGY1LDB4ZjAsMHhjMywweGU0LDB4OTMsMHhhMywweGM1LDB4ZjAsMHg5NSwweGYwLDB4YzAsCisweGUwLDB4YzMsMHhkMCwweGYwLDB4ZTQsMHg5MywweGEzLDB4OTUsMHhmMCwweDQwLDB4MTIsMHhhMywweGEzLDB4YzMsMHhlNSwweGYwLAorMHgzMywweDUwLDB4MDIsMHgwNSwweDgzLDB4MjUsMHg4MiwweGY1LDB4ODIsMHg1MCwweDAyLDB4MDUsMHg4MywweDc0LDB4MDEsMHg5MywKKzB4YzAsMHhlMCwweGU0LDB4OTMsMHhjMCwweGUwLDB4MjIsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGY1LDB4ZjAsMHhlNCwweDkzLDB4NzAsCisweDA5LDB4NzQsMHgwMSwweDkzLDB4NzAsMHgwNCwweGEzLDB4YTMsMHg4MCwweDBjLDB4NzQsMHgwMiwweDkzLDB4NjUsMHhmMCwweDYwLAorMHgwNSwweGEzLDB4YTMsMHhhMywweDgwLDB4ZTcsMHg3NCwweDAxLDB4OTMsMHhjMCwweGUwLDB4ZTQsMHg5MywweGMwLDB4ZTAsMHgyMiwKKzB4MTIsMHgwMiwweDViLDB4MDIsMHgwMSwweGYyLDB4MTIsMHgwMiwweGFmLDB4MDIsMHgwMSwweGYyLDB4MTIsMHgwMiwweGQzLDB4MDIsCisweDAxLDB4ZjIsMHgzMCwweGUwLDB4MDcsMHgyMCwweGUzLDB4MDIsMHhlNiwweDIyLDB4ZTcsMHgyMiwweDMwLDB4ZTEsMHgwNywweDIwLAorMHhlMywweDAyLDB4ZTIsMHgyMiwweGUzLDB4MjIsMHgzMCwweGUyLDB4MDIsMHhlMCwweDIyLDB4ZTQsMHg5MywweDIyLDB4MTIsMHgwMiwKKzB4ZDMsMHgwMiwweDAyLDB4MWEsMHgxMiwweDAyLDB4YWYsMHgwMiwweDAyLDB4MWEsMHhhYiwweGYwLDB4MTIsMHgwMiwweDI0LDB4Y2IsCisweGM1LDB4ZjAsMHhjYiwweDIyLDB4MzAsMHhlMCwweDEwLDB4MjAsMHhlMywweDA2LDB4ZTYsMHhmNSwweGYwLDB4MDgsMHhlNiwweDIyLAorMHhlNywweGY1LDB4ZjAsMHgwOSwweGU3LDB4MTksMHgyMiwweDMwLDB4ZTEsMHgxMCwweDIwLDB4ZTMsMHgwNiwweGUyLDB4ZjUsMHhmMCwKKzB4MDgsMHhlMiwweDIyLDB4ZTMsMHhmNSwweGYwLDB4MDksMHhlMywweDE5LDB4MjIsMHgzMCwweGUyLDB4MDYsMHhlMCwweGY1LDB4ZjAsCisweGEzLDB4ZTAsMHgyMiwweGU0LDB4OTMsMHhmNSwweGYwLDB4NzQsMHgwMSwweDkzLDB4MjIsMHhiYiwweDAwLDB4MDMsMHg3NCwweDA5LAorMHgyMiwweGJiLDB4MDEsMHgwNywweDg5LDB4ODIsMHg4YSwweDgzLDB4NzQsMHgwNCwweDIyLDB4YmIsMHgwMiwweDA3LDB4ODksMHg4MiwKKzB4OGEsMHg4MywweDc0LDB4MTAsMHgyMiwweDc0LDB4MGEsMHgyMiwweDAyLDB4MDIsMHg3YiwweGJiLDB4MDAsMHgwNywweGU5LDB4MjUsCisweDgyLDB4ZjgsMHg3NCwweDAxLDB4MjIsMHhiYiwweDAxLDB4MGQsMHhlOSwweDI1LDB4ODIsMHhmNSwweDgyLDB4ZWEsMHgzNSwweDgzLAorMHhmNSwweDgzLDB4NzQsMHgwNCwweDIyLDB4YmIsMHgwMiwweDBkLDB4ZTksMHgyNSwweDgyLDB4ZjUsMHg4MiwweGVhLDB4MzUsMHg4MywKKzB4ZjUsMHg4MywweDc0LDB4MTAsMHgyMiwweGU5LDB4MjUsMHg4MiwweGY4LDB4NzQsMHgwMiwweDIyLDB4MDIsMHgwMiwweGFmLDB4YmYsCisweDAwLDB4MDUsMHhlZCwweGY4LDB4NzQsMHgwMSwweDIyLDB4YmYsMHgwMSwweDA3LDB4OGQsMHg4MiwweDhlLDB4ODMsMHg3NCwweDA0LAorMHgyMiwweGJmLDB4MDIsMHgwNywweDhkLDB4ODIsMHg4ZSwweDgzLDB4NzQsMHgxMCwweDIyLDB4ZWQsMHhmOCwweDc0LDB4MDIsMHgyMiwKKzB4MDIsMHgwMiwweGQzLDB4YmYsMHgwMCwweDA3LDB4ZWQsMHgyNSwweDgyLDB4ZjgsMHg3NCwweDAxLDB4MjIsMHhiZiwweDAxLDB4MGQsCisweGVkLDB4MjUsMHg4MiwweGY1LDB4ODIsMHhlZSwweDM1LDB4ODMsMHhmNSwweDgzLDB4NzQsMHgwNCwweDIyLDB4YmYsMHgwMiwweDBkLAorMHhlZCwweDI1LDB4ODIsMHhmNSwweDgyLDB4ZWUsMHgzNSwweDgzLDB4ZjUsMHg4MywweDc0LDB4MTAsMHgyMiwweGVkLDB4MjUsMHg4MiwKKzB4ZjgsMHg3NCwweDAyLDB4MjIsMHgwMiwweDAzLDB4MDcsMHhjMCwweGUwLDB4MTIsMHgwMiwweDViLDB4MDIsMHgwMywweDFmLDB4YzAsCisweGUwLDB4MTIsMHgwMiwweGFmLDB4MDIsMHgwMywweDFmLDB4YzAsMHhlMCwweDEyLDB4MDIsMHhkMywweDAyLDB4MDMsMHgxZiwweDMwLAorMHhlMCwweDBiLDB4MjAsMHhlMywweDA0LDB4ZDAsMHhlMCwweGY2LDB4MjIsMHhkMCwweGUwLDB4ZjcsMHgyMiwweDMwLDB4ZTEsMHgwYiwKKzB4MjAsMHhlMywweDA0LDB4ZDAsMHhlMCwweGYyLDB4MjIsMHhkMCwweGUwLDB4ZjMsMHgyMiwweGQwLDB4ZTAsMHhmMCwweDIyLDB4YzksCisweGNkLDB4YzksMHhjYSwweGNlLDB4Y2EsMHhjYiwweGNmLDB4Y2IsMHgxMiwweDAzLDB4NTIsMHhlZCwweGY5LDB4ZWUsMHhmYSwweGVmLAorMHhmYiwweDIyLDB4YmIsMHgwMCwweDJmLDB4YmYsMHgwMCwweDBhLDB4ZmEsMHhlZCwweGY4LDB4ZTcsMHhmNiwweDA4LDB4MDksMHhkYSwKKzB4ZmEsMHgyMiwweGJmLDB4MDEsMHgxMiwweDhkLDB4ODIsMHg4ZSwweDgzLDB4ZjgsMHgwMiwweDAzLDB4NmYsMHgwOSwweGEzLDB4ZTcsCisweGYwLDB4ZDgsMHhmYSwweDIyLDB4MDIsMHgwMywweDdhLDB4ZmEsMHhlZCwweGY4LDB4ZTcsMHhmMiwweDA4LDB4MDksMHhkYSwweGZhLAorMHgyMiwweDAyLDB4MDMsMHg4NCwweGJiLDB4MDEsMHg0ZCwweGJmLDB4MDAsMHgxNCwweDg5LDB4ODIsMHg4YSwweDgzLDB4ZjksMHhlZCwKKzB4ZjgsMHgwMiwweDAzLDB4OTYsMHgwOCwweGEzLDB4ZTAsMHhmNiwweGQ5LDB4ZmEsMHgyMiwweDAyLDB4MDMsMHhhNywweGJmLDB4MDEsCisweDIyLDB4OGQsMHg4MiwweDhlLDB4ODMsMHhmYiwweDA4LDB4YzksMHhjNSwweDgyLDB4YzksMHhjYSwweGM1LDB4ODMsMHhjYSwweGUwLAorMHhhMywweGM5LDB4YzUsMHg4MiwweGM5LDB4Y2EsMHhjNSwweDgzLDB4Y2EsMHhmMCwweGEzLDB4ZGIsMHhlYSwweGQ4LDB4ZTgsMHgyMiwKKzB4MDIsMHgwMywweGNhLDB4OGQsMHg4MiwweDhlLDB4ODMsMHhmOSwweGVkLDB4ZjgsMHhlMCwweGYyLDB4MDgsMHhhMywweGQ5LDB4ZmEsCisweDIyLDB4MDIsMHgwMywweGQ0LDB4YmIsMHgwMiwweDRkLDB4YmYsMHgwMCwweDEyLDB4ODksMHg4MiwweDhhLDB4ODMsMHhmOSwweGVkLAorMHhmOCwweDAyLDB4MDMsMHhlNiwweDA4LDB4YTMsMHhlNCwweDkzLDB4ZjYsMHhkOSwweGY5LDB4MjIsMHhiZiwweDAxLDB4MjMsMHg4ZCwKKzB4ODIsMHg4ZSwweDgzLDB4ZmIsMHgwOCwweGM5LDB4YzUsMHg4MiwweGM5LDB4Y2EsMHhjNSwweDgzLDB4Y2EsMHhlNCwweDkzLDB4YTMsCisweGM5LDB4YzUsMHg4MiwweGM5LDB4Y2EsMHhjNSwweDgzLDB4Y2EsMHhmMCwweGEzLDB4ZGIsMHhlOSwweGQ4LDB4ZTcsMHgyMiwweDAyLAorMHgwNCwweDE5LDB4ODksMHg4MiwweDhhLDB4ODMsMHhmOSwweGVkLDB4ZjgsMHhlNCwweDkzLDB4ZjIsMHgwOCwweGEzLDB4ZDksMHhmOSwKKzB4MjIsMHgwMiwweDA0LDB4MmEsMHhiZiwweDAwLDB4MGQsMHhmYSwweGVkLDB4ZjgsMHhlMywweGY2LDB4MDgsMHgwOSwweGRhLDB4ZmEsCisweDIyLDB4MDIsMHgwNCwweDM0LDB4YmYsMHgwMSwweDEyLDB4OGQsMHg4MiwweDhlLDB4ODMsMHhmOCwweDAyLDB4MDQsMHg0MSwweDA5LAorMHhhMywweGUzLDB4ZjAsMHhkOCwweGZhLDB4MjIsMHgwMiwweDA0LDB4NGMsMHhmYSwweGVkLDB4ZjgsMHhlMywweGYyLDB4MDgsMHgwOSwKKzB4ZGEsMHhmYSwweDIyLDB4MDIsMHgwNCwweDU2LDB4ZTYsMHhmYiwweDA4LDB4ZTYsMHhmYSwweDA4LDB4ZTYsMHhmOSwweDA0LDB4ZjYsCisweDE4LDB4NzAsMHgwMSwweDA2LDB4MjIsMHhlNiwweGZmLDB4MDgsMHhlNiwweGZlLDB4MDgsMHhlNiwweGZkLDB4MjIsMHhlZiwweGYwLAorMHhhMywweGVlLDB4ZjAsMHhhMywweGVkLDB4ZjAsMHgyMiwweGViLDB4ZjAsMHhhMywweGVhLDB4ZjAsMHhhMywweGU5LDB4ZjAsMHgyMiwKKzB4ZTAsMHhmZiwweGEzLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZCwweDIyLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsCisweGY5LDB4MjIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4ZjksMHgwMCwweDYxLDB4MDUsMHg2OCwweDAwLAorMHgyNiwweDA1LDB4OGYsMHgwMCwweDMzLDB4MGEsMHgwMCwweDAwLDB4NjEsMHgwYSwweDZjLDB4MDAsMHg2NiwweDE1LDB4MWQsMHgwMCwKKzB4NjEsMHgwYywweGYwLDB4MDAsMHg2MSwweDA5LDB4YTAsMHgwMCwweDYxLDB4MDksMHhkNywweDAwLDB4NjEsMHgwZCwweGI3LDB4MDAsCisweDYxLDB4MGIsMHhlOCwweDAwLDB4NjEsMHgwYSwweDEzLDB4MDAsMHg2MSwweDBhLDB4NDgsMHgwMCwweDYxLDB4MTcsMHgxNSwweDAwLAorMHgzMywweDE3LDB4MjgsMHgwMCwweDM0LDB4MWQsMHhmNiwweDAwLDB4NDMsMHgxZSwweGExLDB4MDAsMHg0NCwweDIwLDB4MGUsMHgwMCwKKzB4NDQsMHgxZiwweGZjLDB4MDAsMHg0NywweDFlLDB4YzgsMHgwMCwweDQ3LDB4MWYsMHg2ZCwweDAwLDB4NGQsMHgxZiwweGJlLDB4MDAsCisweDRmLDB4MWUsMHhlYSwweDAwLDB4NTgsMHgzMiwweDU2LDB4MDAsMHg2MSwweDdjLDB4Y2MsMHg3ZCwweGZmLDB4MTIsMHgxYywweGE3LAorMHgyMiwweDkwLDB4ZmYsMHhmYywweGUwLDB4MjAsMHhlNywweDJkLDB4YzIsMHhhZiwweGFlLDB4NTksMHhhZiwweDU4LDB4NzUsMHg1YSwKKzB4MjAsMHhlNSwweDVhLDB4MTQsMHhjNSwweDVhLDB4NjAsMHgxOSwweGU0LDB4ZmUsMHg3ZiwweDA1LDB4ZWUsMHg0ZiwweGNlLDB4MjQsCisweGZmLDB4Y2UsMHhjZiwweDM0LDB4ZmYsMHhjZiwweDYwLDB4MDcsMHhlNCwweDkwLDB4ZmYsMHg5MiwweGYwLDB4ODAsMHhlZCwweDgwLAorMHhlMCwweDhlLDB4NTksMHg4ZiwweDU4LDB4MjIsMHgxMiwweDA1LDB4MDEsMHg3ZCwweDA3LDB4N2MsMHhiNywweDEyLDB4MzIsMHg3MiwKKzB4N2QsMHgwZiwweDdjLDB4NmUsMHgxMiwweDMyLDB4OGMsMHg3OCwweDlkLDB4N2EsMHgwNiwweGU0LDB4ZjYsMHgwOCwweGRhLDB4ZmMsCisweDdhLDB4MDYsMHgxMiwweDA1LDB4YzQsMHg3YywweDAzLDB4MTIsMHgwZSwweDRjLDB4MTIsMHgyMSwweDRhLDB4ZTQsMHhmZSwweGZmLAorMHg3YywweDBmLDB4MTIsMHgzMSwweGZiLDB4ZDIsMHhhOCwweDIyLDB4MTIsMHgzMCwweGU2LDB4ZTQsMHg5MCwweGZjLDB4MzgsMHhmMCwKKzB4OTAsMHhmZiwweGYwLDB4ZTAsMHgzMCwweGU0LDB4MDgsMHg3NCwweDAxLDB4OTAsMHhmYywweDM5LDB4ZjAsMHg4MCwweDA1LDB4ZTQsCisweDkwLDB4ZmMsMHgzOSwweGYwLDB4N2QsMHgwYSwweDdjLDB4MDAsMHgxMiwweDI1LDB4MjYsMHgxMiwweDMxLDB4NjksMHgyMiwweDEyLAorMHgzMCwweGU2LDB4OTAsMHhmYywweDM5LDB4ZTAsMHgxNCwweDcwLDB4MGUsMHg5MCwweGZmLDB4ZjAsMHhlMCwweDQ0LDB4MTAsMHhmMCwKKzB4N2MsMHgwMCwweDEyLDB4MjUsMHhiZiwweDgwLDB4MTksMHg5MCwweGZjLDB4MzksMHhlMCwweDcwLDB4MGUsMHg5MCwweGZmLDB4ZjAsCisweGUwLDB4NTQsMHhlZiwweGYwLDB4N2MsMHgwMCwweDEyLDB4MjUsMHhiZiwweDgwLDB4MDUsMHg3YywweDE3LDB4MTIsMHgyNSwweGJmLAorMHgxMiwweDMxLDB4NjksMHgyMiwweDkwLDB4ZmYsMHhmMCwweGUwLDB4NTQsMHhhYiwweGYwLDB4OTAsMHhmZiwweGYwLDB4ZTAsMHg0NCwKKzB4MjAsMHhmMCwweDIyLDB4OGMsMHgzNywweDhkLDB4MzYsMHg3OCwweDgyLDB4ZWQsMHhmNiwweDA4LDB4ZWMsMHhmNiwweGVkLDB4ZmUsCisweGVjLDB4ZmQsMHg3ZiwweDAxLDB4OTAsMHgwMCwweDA1LDB4MTIsMHgwMSwweGVjLDB4NzgsMHg4MCwweGY2LDB4NzgsMHg4MiwweGU2LAorMHhmZCwweDA4LDB4ZTYsMHhmYywweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwweDkwLDB4MDAsMHgwNCwweDEyLDB4MDEsMHhlYywKKzB4NTQsMHgwZiwweGZjLDB4N2QsMHg4MCwweDEyLDB4MTcsMHg0NiwweDc4LDB4ODAsMHhlNiwweDcwLDB4MGQsMHhhZCwweDNhLDB4YWUsCisweDM5LDB4YWYsMHgzOCwweGU0LDB4MTIsMHgwMywweDBmLDB4N2MsMHgwOCwweDIyLDB4OTAsMHhmZiwweGYwLDB4ZTAsMHg1NCwweGZlLAorMHhmMCwweDkwLDB4ZmYsMHhmMCwweGUwLDB4NTQsMHhmZCwweGYwLDB4ODAsMHgxZSwweDc4LDB4ODIsMHhlNiwweGZkLDB4MDgsMHhlNiwKKzB4ZmMsMHhlZCwweGZlLDB4ZWMsMHhmZCwweDdmLDB4MDEsMHg5MCwweDAwLDB4MDgsMHgxMiwweDAyLDB4MGUsMHgyNSwweGUwLDB4NDQsCisweDAxLDB4OTAsMHhmZiwweGYzLDB4ZjAsMHgwMiwweDA2LDB4ZDAsMHg3OCwweDgyLDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweGVkLAorMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4OTAsMHgwMCwweDA2LDB4MTIsMHgwMiwweDBlLDB4NTQsMHhmZSwweDkwLDB4ZmYsMHhmMywKKzB4ZjAsMHg4MCwweDJiLDB4NzgsMHg4MiwweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsMHhlZCwweGZlLDB4ZWMsMHhmZCwweDdmLDB4MDEsCisweDkwLDB4MDAsMHgwOCwweDEyLDB4MDIsMHgwZSwweGZhLDB4ZWIsMHg5MCwweGZmLDB4ZjEsMHhmMCwweDEyLDB4MDgsMHhiZiwweDQwLAorMHgwZCwweGFkLDB4M2EsMHhhZSwweDM5LDB4YWYsMHgzOCwweGU0LDB4MTIsMHgwMywweDBmLDB4N2MsMHgxOCwweDIyLDB4NzgsMHg4MiwKKzB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwweDkwLDB4MDAsMHgwOCwweDEyLDB4MDIsCisweDBlLDB4OTAsMHhmZiwweGYxLDB4ZjAsMHgxMiwweDA4LDB4YmYsMHg0MCwweDBkLDB4YWQsMHgzYSwweGFlLDB4MzksMHhhZiwweDM4LAorMHhlNCwweDEyLDB4MDMsMHgwZiwweDdjLDB4MTgsMHgyMiwweDc4LDB4ODIsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4ZWQsMHhmZSwKKzB4ZWMsMHhmZCwweDdmLDB4MDEsMHg5MCwweDAwLDB4MDYsMHgxMiwweDAyLDB4MGUsMHg0NCwweDAxLDB4OTAsMHhmZiwweGYzLDB4ZjAsCisweDc4LDB4ODMsMHhlNiwweDI0LDB4MDMsMHhmNiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjYsMHg3OCwweDgwLDB4ZTYsMHgyNCwweGZlLAorMHg1MCwweDA5LDB4OTAsMHhmZiwweGYwLDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHhmZiwweGYwLDB4ZTAsMHg0NCwKKzB4MDIsMHhmMCwweGU0LDB4OTAsMHhmZiwweGYxLDB4ZjAsMHg3OCwweDgxLDB4NzYsMHgwMCwweDc4LDB4ODAsMHhlNiwweDI0LDB4ZmYsCisweGZjLDB4ZTQsMHgzNCwweGZmLDB4ZmQsMHg3OCwweDgxLDB4ZTYsMHg3ZiwweDAwLDB4ZmUsMHhlYywweGQzLDB4OWUsMHhlZiwweDY0LAorMHg4MCwweGNkLDB4NjQsMHg4MCwweDlkLDB4NDAsMHgyZiwweDEyLDB4MDgsMHhhNCwweDQwLDB4MGYsMHg3OCwweDgxLDB4ZTYsMHhhZCwKKzB4M2EsMHhhZSwweDM5LDB4YWYsMHgzOCwweDEyLDB4MDMsMHgwZiwweDdjLDB4MTgsMHgyMiwweDkwLDB4ZmYsMHhmMiwweGUwLDB4ZmMsCisweDc4LDB4ODIsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4ZWMsMHhmMCwweDc4LDB4ODEsMHgwNiwweGEzLDB4NzgsMHg4MiwweGE2LAorMHg4MywweDA4LDB4YTYsMHg4MiwweDgwLDB4YjUsMHgxMiwweDA4LDB4YTQsMHg0MCwweDBmLDB4NzgsMHg4MSwweGU2LDB4YWQsMHgzYSwKKzB4YWUsMHgzOSwweGFmLDB4MzgsMHgxMiwweDAzLDB4MGYsMHg3YywweDE4LDB4MjIsMHg5MCwweGZmLDB4ZjIsMHhlMCwweGZjLDB4NzgsCisweDgyLDB4ODYsMHg4MywweDA4LDB4ODYsMHg4MiwweGVjLDB4ZjAsMHg3OCwweDgwLDB4ZTYsMHhhZCwweDNhLDB4YWUsMHgzOSwweGFmLAorMHgzOCwweDEyLDB4MDMsMHgwZiwweDdjLDB4MDAsMHgyMiwweDhjLDB4MzcsMHg4ZCwweDM2LDB4NzgsMHg4MiwweGVkLDB4ZjYsMHgwOCwKKzB4ZWMsMHhmNiwweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwweDkwLDB4MDAsMHgwNSwweDEyLDB4MDEsMHhlYywweDc4LDB4ODEsCisweGY2LDB4NzgsMHg4MiwweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsMHhlZCwweGZlLDB4ZWMsMHhmZCwweDdmLDB4MDEsMHg5MCwweDAwLAorMHgwNCwweDEyLDB4MDEsMHhlYywweDU0LDB4MGYsMHhmYywweDdkLDB4ODEsMHgxMiwweDE3LDB4NDYsMHg3OCwweDgxLDB4ZTYsMHg3MCwKKzB4MDMsMHg3YywweDA4LDB4MjIsMHg5MCwweGZmLDB4ZjAsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDkwLDB4ZmYsMHhmMCwweGUwLDB4NTQsCisweGZkLDB4ZjAsMHg4MCwweDFiLDB4NzgsMHg4MiwweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsMHhlZCwweGZlLDB4ZWMsMHhmZCwweDdmLAorMHgwMSwweDkwLDB4MDAsMHgwOCwweDEyLDB4MDIsMHgwZSwweDI1LDB4ZTAsMHg5MCwweGZmLDB4ZjMsMHhmMCwweDgwLDB4NWIsMHg3OCwKKzB4ODIsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4ZWQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4OTAsMHgwMCwweDA2LDB4MTIsCisweDAyLDB4MGUsMHg1NCwweGZlLDB4OTAsMHhmZiwweGYzLDB4ZjAsMHg4MCwweDIxLDB4NzgsMHg4MiwweGU2LDB4ZmQsMHgwOCwweGU2LAorMHhmYywweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwweDkwLDB4MDAsMHgwOCwweDEyLDB4MDIsMHgwZSwweGZhLDB4ZWIsMHg5MCwKKzB4ZmYsMHhmMSwweGYwLDB4MTIsMHgwOCwweGJmLDB4NDAsMHgwMywweDdjLDB4MTgsMHgyMiwweDc4LDB4ODIsMHhlNiwweGZkLDB4MDgsCisweGU2LDB4ZmMsMHhlZCwweGZlLDB4ZWMsMHhmZCwweDdmLDB4MDEsMHg5MCwweDAwLDB4MDgsMHgxMiwweDAyLDB4MGUsMHg5MCwweGZmLAorMHhmMSwweGYwLDB4MTIsMHgwOCwweGJmLDB4NDAsMHgwMywweDdjLDB4MTgsMHgyMiwweDc4LDB4ODMsMHhlNiwweDI0LDB4MGEsMHhmNiwKKzB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNiwweDc4LDB4ODAsMHg3NiwweDAwLDB4NzgsMHg4MSwweGU2LDB4MjQsMHhmZiwweGZjLDB4ZTQsCisweDM0LDB4ZmYsMHhmZCwweDc4LDB4ODAsMHhlNiwweDdmLDB4MDAsMHhmZSwweGVjLDB4ZDMsMHg5ZSwweGVmLDB4NjQsMHg4MCwweGNkLAorMHg2NCwweDgwLDB4OWQsMHg0MCwweDIxLDB4NzgsMHg4MiwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlMCwweDkwLDB4ZmYsMHhmMSwKKzB4ZjAsMHgxMiwweDA4LDB4YmYsMHg0MCwweDAzLDB4N2MsMHgxOCwweDIyLDB4NzgsMHg4MCwweDA2LDB4NzgsMHg4MywweDA2LDB4ZTYsCisweDE4LDB4NzAsMHgwMSwweDA2LDB4ODAsMHhjMywweDkwLDB4ZmYsMHhmMCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NzgsMHg4MiwweDg2LAorMHg4MywweDA4LDB4ODYsMHg4MiwweGUwLDB4OTAsMHhmZiwweGYxLDB4ZjAsMHgxMiwweDA4LDB4YmYsMHg0MCwweDAzLDB4N2MsMHgxOCwKKzB4MjIsMHg3YywweDAwLDB4MjIsMHg5MCwweGZmLDB4ZjAsMHhlMCwweDIwLDB4ZTcsMHgxMiwweDkwLDB4ZmYsMHhmMCwweGUwLDB4MzAsCisweGU1LDB4MDksMHg5MCwweGZmLDB4ZjAsMHhlMCwweDQ0LDB4MjAsMHhmMCwweGMzLDB4MjIsMHg4MCwweGU3LDB4ZDMsMHgyMiwweDkwLAorMHhmZiwweGYwLDB4ZTAsMHgyMCwweGUzLDB4MTIsMHg5MCwweGZmLDB4ZjAsMHhlMCwweDMwLDB4ZTUsMHgwOSwweDkwLDB4ZmYsMHhmMCwKKzB4ZTAsMHg0NCwweDIwLDB4ZjAsMHhjMywweDIyLDB4ODAsMHhlNywweGQzLDB4MjIsMHg4YywweDQyLDB4OGQsMHg0MSwweDdjLDB4MDAsCisweGVkLDB4NTQsMHhmMCwweGZkLDB4ZWMsMHg3MCwweDAzLDB4ZWQsMHg2NCwweDMwLDB4NzAsMHgwNSwweDc1LDB4M2UsMHgwMywweDgwLAorMHgwMywweDc1LDB4M2UsMHgwNCwweGFjLDB4M2UsMHgxMiwweDBmLDB4NjksMHg3NSwweDgzLDB4MDAsMHg4NSwweDgzLDB4NDAsMHhlNSwKKzB4NDEsMHg1NCwweDBmLDB4ZjUsMHgzZiwweGU1LDB4NDAsMHg3MCwweDA0LDB4ZTUsMHgzZiwweDY0LDB4MDMsMHg3MCwweDM1LDB4ZTUsCisweDNlLDB4MjQsMHhmZCwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHgwMiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmMsMHhmNSwweDgzLAorMHhlMCwweDMwLDB4ZTYsMHgwNSwweDEyLDB4MTAsMHg0YiwweDgwLDB4MTksMHhlNSwweDNlLDB4MjQsMHg5ZCwweGY4LDB4YzYsMHg1NCwKKzB4ZmIsMHhmNiwweDc4LDB4YTksMHhlNiwweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4NzQsCisweDBmLDB4ZjAsMHg4MCwweDU5LDB4ZTUsMHg0MCwweDcwLDB4MDQsMHhlNSwweDNmLDB4NjQsMHgwNCwweDcwLDB4NDgsMHhlNSwweDNlLAorMHgyNCwweGZkLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweDAyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywweGY1LDB4ODMsMHhlMCwKKzB4MzAsMHhlNSwweDA3LDB4YWMsMHg0MiwweGFkLDB4NDEsMHgxMiwweDFjLDB4M2MsMHhlNSwweDQyLDB4MzAsMHhlMiwweDE1LDB4NzgsCisweGFkLDB4ZTYsMHgzMCwweGUwLDB4MGYsMHg3OCwweGFkLDB4ZTYsMHgzMCwweGUxLDB4MDksMHhlNCwweGZmLDB4MDQsMHhmZSwweDdjLAorMHgwNCwweDEyLDB4MzEsMHhmYiwweDc4LDB4YTksMHhlNiwweDI0LDB4MDYsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwKKzB4ODMsMHg3NCwweDBmLDB4ZjAsMHg4MCwweDA3LDB4ZTQsMHhmYywweDdkLDB4ZWUsMHgxMiwweDFjLDB4M2MsMHhjMiwweDAzLDB4MjIsCisweDEyLDB4MzAsMHhlNiwweDEyLDB4MGYsMHg2OSwweDc4LDB4YTksMHhlNiwweDI0LDB4MDYsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LAorMHgwMCwweGY1LDB4ODMsMHhlMCwweDkwLDB4ZmMsMHgzOCwweGYwLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwKKzB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4OTAsMHhmYywweDM5LDB4ZjAsMHhjMiwweDAzLDB4N2QsMHgwMiwweDdjLDB4MDAsCisweDEyLDB4MjUsMHgyNiwweDEyLDB4MzEsMHg2OSwweDIyLDB4MTIsMHgzMCwweGU2LDB4NzgsMHg5NSwweGVjLDB4ZjYsMHhlYywweDI0LAorMHg5ZCwweGY4LDB4ZTYsMHgzMCwweGUxLDB4MDcsMHg3YywweDEzLDB4MTIsMHgyNSwweGJmLDB4ODAsMHgwZiwweDkwLDB4ZmMsMHgzOSwKKzB4ZTAsMHhmZCwweDc4LDB4OTUsMHhlNiwweGZjLDB4MTIsMHgxMywweGM4LDB4MTIsMHgyNSwweGJmLDB4MTIsMHgzMSwweDY5LDB4MjIsCisweDEyLDB4MzAsMHhlNiwweDc4LDB4OTUsMHhlYywweGY2LDB4N2QsMHgwMCwweDEyLDB4MGYsMHgwOSwweDEyLDB4MjUsMHhiZiwweDEyLAorMHgzMSwweDY5LDB4MjIsMHgxMiwweDMwLDB4ZTYsMHg3OCwweDk1LDB4ZWMsMHhmNiwweGVjLDB4MjQsMHg5ZCwweGY4LDB4ZTYsMHgzMCwKKzB4ZTIsMHgwNywweDdjLDB4MTMsMHgxMiwweDI1LDB4YmYsMHg4MCwweDFiLDB4NzgsMHg5NSwweGU2LDB4MjQsMHg5ZCwweGY4LDB4ZTYsCisweDIwLDB4ZTEsMHgwNywweDdjLDB4MTIsMHgxMiwweDI1LDB4YmYsMHg4MCwweDBhLDB4NzgsMHg5NSwweGU2LDB4ZmMsMHgxMiwweDEzLAorMHhlYywweDEyLDB4MjUsMHhiZiwweDEyLDB4MzEsMHg2OSwweDIyLDB4MTIsMHgzMCwweGU2LDB4NzgsMHg5NSwweGVjLDB4ZjYsMHhlYywKKzB4MjQsMHg5ZCwweGY4LDB4ZTYsMHgyMCwweGUyLDB4MDcsMHg3YywweDExLDB4MTIsMHgyNSwweGJmLDB4ODAsMHgwYSwweDc4LDB4OTUsCisweGU2LDB4ZmMsMHgxMiwweDE0LDB4ZWQsMHgxMiwweDI1LDB4YmYsMHgxMiwweDMxLDB4NjksMHgyMiwweDEyLDB4MzAsMHhlNiwweDc4LAorMHg5NSwweGVjLDB4ZjYsMHgxMiwweDBmLDB4NjksMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA5LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwKKzB4MDAsMHhmNSwweDgzLDB4ZTAsMHg5MCwweGZjLDB4M2YsMHhmMCwweDc4LDB4YTksMHhlNiwweDI0LDB4MGEsMHhmNSwweDgyLDB4MTgsCisweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDkwLDB4ZmMsMHg0MCwweGYwLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwMywweGY1LAorMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4ZmMsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwKKzB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHhmNSwweDYyLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsCisweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4ZjUsMHg2MywweDhjLDB4NjEsMHhlNCwweGVjLDB4MzMsMHgzMywweDU0LAorMHgwMSwweDc4LDB4OTUsMHhmNiwweDYwLDB4MDgsMHhlNSwweDYyLDB4MzAsMHhlMSwweDAzLDB4NzgsMHg5NSwweDA2LDB4NzgsMHg5NSwKKzB4ZTYsMHg5MCwweGZjLDB4NDEsMHhmMCwweDc4LDB4YTcsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsCisweGY1LDB4ODMsMHhlMCwweGZkLDB4YTMsMHhlMCwweDU0LDB4MGMsMHhmYywweGVkLDB4NTQsMHhlNiwweDhjLDB4NjUsMHhmNSwweDY0LAorMHhlNSwweDYxLDB4MzAsMHhlNSwweDAzLDB4NDMsMHg2NSwweDAxLDB4ZTUsMHg2MiwweDIwLDB4ZTUsMHgwZSwweGU1LDB4NjEsMHg1NCwKKzB4N2YsMHg3MCwweDA4LDB4ZTUsMHg2MSwweDIwLDB4ZTcsMHgwMywweDQzLDB4NjUsMHgwMiwweGU1LDB4NjEsMHgzMCwweGUzLDB4MDMsCisweDQzLDB4NjUsMHgxMCwweGU1LDB4NjEsMHgzMCwweGUyLDB4MDMsMHg0MywweDY1LDB4MjAsMHhlNSwweDYxLDB4NTQsMHgwMywweDYwLAorMHgwMywweDQzLDB4NjUsMHg0MCwweGU1LDB4NjEsMHgzMCwweGUxLDB4MDMsMHg0MywweDY1LDB4ODAsMHhlNSwweDYxLDB4MzAsMHhlNCwKKzB4MDMsMHg0MywweDY0LDB4MDEsMHhlNSwweDYxLDB4MzAsMHhlNiwweDAzLDB4NDMsMHg2NCwweDA4LDB4ZTUsMHg2MiwweDIwLDB4ZTQsCisweDBlLDB4ZTUsMHg2MSwweDU0LDB4N2YsMHg3MCwweDA4LDB4ZTUsMHg2MSwweDIwLDB4ZTcsMHgwMywweDQzLDB4NjQsMHgxMCwweDUzLAorMHg2NSwweGZiLDB4NTMsMHg2NCwweDc5LDB4YWQsMHg2NCwweGU1LDB4NjUsMHg5MCwweGZjLDB4M2EsMHhjZCwweGYwLDB4YTMsMHhjZCwKKzB4ZjAsMHhlNSwweDYzLDB4MzAsMHhlMywweDBkLDB4ZTUsMHg2MywweDU0LDB4MzAsMHhjNCwweDU0LDB4MGYsMHg5MCwweGZjLDB4M2QsCisweGYwLDB4ODAsMHgwNSwweGU0LDB4OTAsMHhmYywweDNkLDB4ZjAsMHhlNSwweDYzLDB4NTQsMHgwMywweDkwLDB4ZmMsMHgzYywweGYwLAorMHhlNSwweDYzLDB4NTQsMHgwNCwweGMzLDB4MTMsMHg5MCwweGZjLDB4M2UsMHhmMCwweDkwLDB4ZmMsMHgzYywweGUwLDB4NzAsMHgwZSwKKzB4N2QsMHgzNSwweDdlLDB4ZmMsMHg3ZiwweDAxLDB4NzQsMHgwMSwweDkwLDB4MDAsMHgwOSwweDEyLDB4MDEsMHg0MiwweDc4LDB4YTksCisweGU2LDB4MjQsMHgwOCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDdjLDB4MDAsMHhmZCwweDc4LAorMHhhOSwweGU2LDB4MjQsMHgwNywweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDdmLDB4MDAsMHg0YywKKzB4ZmUsMHhlZiwweDRkLDB4OTAsMHhmYywweDM4LDB4ZjAsMHhhMywweGNlLDB4ZjAsMHhjZSwweGMyLDB4MDMsMHg3ZCwweDBhLDB4N2MsCisweDAwLDB4MTIsMHgyNSwweDI2LDB4MTIsMHgzMSwweDY5LDB4MjIsMHgxMiwweDMwLDB4ZTYsMHg3OCwweDk1LDB4ZWMsMHhmNiwweDc4LAorMHg5YSwweDc2LDB4MDEsMHgwOCwweDc2LDB4ZmMsMHgwOCwweDc2LDB4MzgsMHg3OCwweDk3LDB4NzYsMHgwYywweDc4LDB4OWEsMHgxMiwKKzB4MDQsMHg2NSwweDEyLDB4MDIsMHgxNCwweDc4LDB4OTgsMHhjYiwweGY2LDB4Y2IsMHgwOCwweGY2LDB4N2YsMHgwMCwweGVmLDB4MjQsCisweGVhLDB4NDAsMHgxZiwweGU0LDB4ZWYsMHgyNSwweGUwLDB4OTAsMHgzNSwweDJjLDB4ZmQsMHg5MywweGNkLDB4MDQsMHg5MywweDc4LAorMHg5OSwweDY2LDB4NzAsMHgwMywweGVkLDB4MTgsMHg2NiwweDcwLDB4MDYsMHg3OCwweDk3LDB4NzYsMHgwMCwweDgwLDB4MDMsMHgwZiwKKzB4ODAsMHhkYywweDc4LDB4OTYsMHhlZiwweGY2LDB4NzgsMHg5YSwweDEyLDB4MDQsMHg2NSwweDkwLDB4MDAsMHgwMiwweDEyLDB4MDIsCisweDBlLDB4NzgsMHg5OCwweGNiLDB4ZjYsMHhjYiwweDA4LDB4ZjYsMHg1NCwweDA0LDB4Y2IsMHg1NCwweDg2LDB4NGIsMHg2MCwweDA0LAorMHg3OCwweDk3LDB4NzYsMHgwYiwweDc4LDB4OTksMHhlNiwweDMwLDB4ZTMsMHgxMywweDc4LDB4OWEsMHgxMiwweDA0LDB4NjUsMHg5MCwKKzB4MDAsMHgwNSwweDEyLDB4MDEsMHhlYywweDI0LDB4ZmIsMHg1MCwweDA0LDB4NzgsMHg5NywweDc2LDB4MGQsMHg3OCwweDk5LDB4ZTYsCisweDU0LDB4YzAsMHg3ZCwweDAwLDB4NjQsMHhjMCwweDRkLDB4NzAsMHgwNCwweDc4LDB4OTcsMHg3NiwweDBiLDB4NzgsMHg5YSwweDEyLAorMHgwNCwweDY1LDB4OTAsMHgwMCwweDA0LDB4MTIsMHgwMSwweGVjLDB4MjQsMHhmYywweDUwLDB4MDQsMHg3OCwweDk3LDB4NzYsMHgwZiwKKzB4NzgsMHg5YSwweDEyLDB4MDQsMHg2NSwweDkwLDB4MDAsMHgwNiwweDEyLDB4MDEsMHhlYywweDI0LDB4ZmQsMHg1MCwweDA0LDB4NzgsCisweDk3LDB4NzYsMHgwZSwweDc4LDB4OWEsMHgxMiwweDA0LDB4NjUsMHg5MCwweDAwLDB4MDksMHgxMiwweDAxLDB4ZWMsMHgyNCwweGZkLAorMHg1MCwweDA0LDB4NzgsMHg5NywweDc2LDB4MGEsMHg3OCwweDk3LDB4ZTYsMHg3MCwweDJhLDB4NzgsMHg5NSwweGU2LDB4ZmMsMHgxMiwKKzB4MGYsMHg2OSwweDc4LDB4OWEsMHgxMiwweDA0LDB4NjUsMHg3OCwweGE3LDB4ZTYsMHhmOSwweDc4LDB4YTYsMHhlNiwweGZhLDB4N2IsCisweDAxLDB4NzQsMHgwYSwweDc4LDB4MDAsMHgxMiwweDAzLDB4M2YsMHhjMiwweDAzLDB4NzgsMHg5NSwweGU2LDB4ZmMsMHgxMiwweDExLAorMHgwNywweDc4LDB4OTcsMHhlYywweGY2LDB4NzgsMHg5NywweGU2LDB4ZmMsMHgxMiwweDI1LDB4YmYsMHgxMiwweDMxLDB4NjksMHgyMiwKKzB4MTIsMHgzMCwweGU2LDB4NzgsMHg5NSwweGVjLDB4ZjYsMHgxMiwweDBmLDB4NjksMHg3OCwweDk1LDB4ZTYsMHgyNCwweGZkLDB4NzUsCisweGYwLDB4MGEsMHhhNCwweDI0LDB4MTQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZjLDB4ZjUsMHg4MywweGFjLDB4ODIsMHhhZCwweDgzLAorMHg3OCwweGE2LDB4ODYsMHg4MywweDA4LDB4ODYsMHg4MiwweGVjLDB4ZjksMHhlZCwweGZhLDB4N2IsMHgwYSwweDc4LDB4MDEsMHgxMiwKKzB4MDMsMHhhNywweGMyLDB4MDMsMHg3OCwweDk1LDB4ZTYsMHhmYywweDEyLDB4MTEsMHgwNywweDEyLDB4MzEsMHg2OSwweDIyLDB4OGQsCisweDJiLDB4OGMsMHgyYSwweGVkLDB4NjAsMHg0MCwweDc1LDB4MjcsMHgwMSwweDc1LDB4MjksMHg0OCwweDc1LDB4MjgsMHhmZiwweGU1LAorMHgyYSwweDI0LDB4ZmQsMHhmYywweGU0LDB4MzQsMHhmZiwweGZkLDB4ZWMsMHg3YywweDAzLDB4MjUsMHhlMCwweGNkLDB4MzMsMHhjZCwKKzB4ZGMsMHhmOSwweGZjLDB4ZTUsMHgyOSwweDJjLDB4ZjUsMHgyOSwweGU1LDB4MjgsMHgzZCwweGY1LDB4MjgsMHhhZCwweDI5LDB4YWUsCisweDI4LDB4YWYsMHgyNywweDc0LDB4ODAsMHg5MCwweDAwLDB4MDYsMHgxMiwweDAzLDB4MTcsMHg3NCwweDgwLDB4OTAsMHgwMCwweDAyLAorMHgxMiwweDAzLDB4MTcsMHgxMiwweDBmLDB4YjcsMHhlNSwweDJiLDB4MTQsMHg2MCwweDNiLDB4NzUsMHgyNywweDAxLDB4NzUsMHgyOSwKKzB4MDgsMHg3NSwweDI4LDB4ZmYsMHhlNSwweDJhLDB4MjQsMHhmZCwweGZjLDB4ZTQsMHgzNCwweGZmLDB4ZmQsMHhlYywweDdjLDB4MDMsCisweDI1LDB4ZTAsMHhjZCwweDMzLDB4Y2QsMHhkYywweGY5LDB4ZmMsMHhlNSwweDI5LDB4MmMsMHhmNSwweDI5LDB4ZTUsMHgyOCwweDNkLAorMHhmNSwweDI4LDB4YWQsMHgyOSwweGFlLDB4MjgsMHhhZiwweDI3LDB4ZTQsMHg5MCwweDAwLDB4MDYsMHgxMiwweDAzLDB4MTcsMHhlNCwKKzB4OTAsMHgwMCwweDAyLDB4MTIsMHgwMywweDE3LDB4MjIsMHgxMiwweDMwLDB4ZTYsMHg3OCwweDk1LDB4ZWMsMHhmNiwweGVjLDB4MjQsCisweDlkLDB4ZjgsMHhlNiwweDMwLDB4ZTIsMHgwOSwweDc4LDB4OTUsMHhlNiwweGZjLDB4MTIsMHgxNCwweGVkLDB4ZDIsMHgwMCwweDc4LAorMHg5NSwweGU2LDB4ZmMsMHgxMiwweDBmLDB4NjksMHg3OCwweDk2LDB4NzYsMHgwMCwweDkwLDB4ZmMsMHgzOSwweGUwLDB4MzAsMHhlNywKKzB4MDQsMHg3OCwweDk2LDB4NzYsMHgwMSwweDc4LDB4OTYsMHhlNiwweGZkLDB4NzgsMHg5NSwweGU2LDB4ZmMsMHgxMiwweDBkLDB4MmYsCisweGMyLDB4MDMsMHgzMCwweDAwLDB4MDcsMHg3OCwweDk1LDB4ZTYsMHhmYywweDEyLDB4MTMsMHhlYywweDdjLDB4MDAsMHgxMiwweDI1LAorMHhiZiwweDEyLDB4MzEsMHg2OSwweDIyLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwKKzB4ZjUsMHg4MywweGUwLDB4NDQsMHgwMSwweGYwLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsCisweDAwLDB4ZjUsMHg4MywweGUwLDB4MzAsMHhlMCwweDAyLDB4ODAsMHhlZCwweDc4LDB4YTksMHhlNiwweDI0LDB4MGIsMHhmNSwweDgyLAorMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDU0LDB4ZjgsMHhmMCwweDc4LDB4YTksMHhlNiwweDI0LDB4MDIsMHhmNSwKKzB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDQ0LDB4ODAsMHhmMCwweDIyLDB4YzIsMHgwMywweDhjLDB4NTgsCisweDEyLDB4MGYsMHg2OSwweDc4LDB4YTYsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4NzksMHg1ZCwweDdhLDB4MzUsMHg3YiwweDBhLAorMHg3OCwweDAxLDB4MTIsMHgwMywweGY1LDB4MTIsMHgwZSwweDA1LDB4YWMsMHg1OCwweDdkLDB4MDIsMHgxMiwweDBkLDB4MmYsMHhjMiwKKzB4MDMsMHhhYywweDU4LDB4MTIsMHgxMSwweDA3LDB4MjIsMHg4ZCwweDUzLDB4OGUsMHg1MiwweDhmLDB4NTEsMHg4YywweDUwLDB4MTIsCisweDBmLDB4NjksMHg3NSwweDRmLDB4MDAsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA1LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLAorMHhmNSwweDgzLDB4ZTAsMHgyMCwweGU0LDB4MWYsMHhlNSwweDRmLDB4MjQsMHhmNiwweDQwLDB4MTksMHgwNSwweDRmLDB4YzIsMHgwMywKKzB4N2MsMHgxOCwweDEyLDB4MzIsMHhhOSwweDkwLDB4ZmYsMHg5MywweGUwLDB4NDQsMHgwMSwweGYwLDB4YjIsMHhiMywweGFjLDB4NTAsCisweDEyLDB4MGYsMHg2OSwweDgwLDB4ZDAsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA1LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLAorMHhmNSwweDgzLDB4ZTAsMHgyMCwweGU0LDB4MDUsMHhjMiwweDAzLDB4N2MsMHgwMiwweDIyLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwNSwKKzB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NTQsMHgwZiwweDYwLDB4MTYsMHg3OCwweGE5LDB4ZTYsCisweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg1NCwweDBmLDB4ZjAsMHhjMiwweDAzLAorMHg3YywweDAxLDB4MjIsMHg3OCwweGE4LDB4ODYsMHg4MywweDA4LDB4ODYsMHg4MiwweGUwLDB4YWQsMHg1MywweGFlLDB4NTIsMHhhZiwKKzB4NTEsMHgxMiwweDAzLDB4MGYsMHhjMiwweDAzLDB4N2MsMHgwMCwweDIyLDB4OGQsMHgzMSwweDhjLDB4MzAsMHgxMiwweDE0LDB4ZWQsCisweGU1LDB4MzEsMHg2MCwweDBmLDB4ZTUsMHgzMCwweGI0LDB4MDMsMHgwYSwweDdjLDB4MDEsMHgxMiwweDI0LDB4ZWUsMHg3YywweDgxLAorMHgxMiwweDI0LDB4ZWUsMHhhYywweDMwLDB4MTIsMHgwZiwweDY5LDB4ZTUsMHgzMSwweDYwLDB4MWEsMHg3OCwweGFhLDB4ODYsMHg4MywKKzB4MDgsMHg4NiwweDgyLDB4ZTAsMHg1NCwweGU3LDB4ZjAsMHhhMywweGEzLDB4YTMsMHhhMywweGUwLDB4NTQsMHhlNywweGYwLDB4YWMsCisweDMwLDB4N2QsMHgwMiwweDEyLDB4MGQsMHgyZiwweDc4LDB4YTYsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4NzksMHg2NywweDdhLAorMHgzNSwweDdiLDB4MGEsMHg3OCwweDAxLDB4MTIsMHgwMywweGY1LDB4YzIsMHgwMywweGU1LDB4MzAsMHgyNCwweDlkLDB4ZjgsMHhjNiwKKzB4NTQsMHhmZCwweGY2LDB4YWMsMHgzMCwweDEyLDB4MTEsMHgwNywweDIyLDB4OGMsMHgyNiwweDMwLDB4MDMsMHgwNSwweDEyLDB4MzIsCisweDQ4LDB4ODAsMHhmOCwweDdjLDB4MGEsMHgxMiwweDMxLDB4NWIsMHhkMiwweDAzLDB4ZTUsMHgyNiwweDI0LDB4ZmQsMHg3OCwweGEzLAorMHhmNiwweDcwLDB4MDcsMHg3OCwweGFhLDB4NzYsMHhmZiwweDA4LDB4NzYsMHhlMCwweDc4LDB4YTMsMHhlNiwweDc1LDB4ZjAsMHgxMCwKKzB4YTQsMHhhZCwweGYwLDB4ZmMsMHgyNCwweGEwLDB4NzgsMHhhOSwweGY2LDB4ZWQsMHgzNCwweGZmLDB4MTgsMHhmNiwweDc4LDB4YTMsCisweGU2LDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweDAwLDB4ZmMsMHhlNCwweDM0LDB4ZmMsMHhmZCwweDc4LDB4YTYsMHhlZCwweGY2LAorMHgwOCwweGVjLDB4ZjYsMHgxMiwweDMxLDB4ZjQsMHgyMiwweDc4LDB4YTksMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwKKzB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDMwLDB4ZTcsMHgyMiwweDc4LDB4YTksMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsCisweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDU0LDB4N2YsMHhmMCwweDc4LDB4YTksMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLAorMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDQ0LDB4ODAsMHhmMCwweDIyLDB4NzgsMHhhYSwweDg2LDB4ODMsMHgwOCwKKzB4ODYsMHg4MiwweGUwLDB4NTQsMHg3ZiwweGYwLDB4YWQsMHg4MywweGU1LDB4ODIsMHgyNCwweDA0LDB4ZmMsMHhlNCwweDNkLDB4OGMsCisweDgyLDB4ZjUsMHg4MywweGUwLDB4NTQsMHg3ZiwweGYwLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwYiwweGY1LDB4ODIsMHgxOCwweGU2LAorMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NTQsMHhmOCwweGYwLDB4NzgsMHhhYiwweGU2LDB4MjQsMHgwMSwweGY1LDB4ODIsMHgxOCwKKzB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NDQsMHgwMywweGYwLDB4NzgsMHhhYiwweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsCisweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NDQsMHgwMywweGYwLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwNSwweGY1LAorMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweDc0LDB4MGYsMHhmMCwweDIyLDB4NzgsMHhhYSwweDg2LDB4ODMsMHgwOCwKKzB4ODYsMHg4MiwweGUwLDB4NTQsMHgzZiwweGYwLDB4YWQsMHg4MywweGU1LDB4ODIsMHgyNCwweDA0LDB4ZmMsMHhlNCwweDNkLDB4OGMsCisweDgyLDB4ZjUsMHg4MywweGUwLDB4NTQsMHgzZiwweGYwLDB4NzgsMHhhMywweGU2LDB4MjQsMHhhNCwweGY4LDB4ZTYsMHhmYywweDc4LAorMHhhYiwweGU2LDB4MjQsMHgwMSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywweGYwLDB4NzgsMHhhMywKKzB4ZTYsMHgyNCwweGE0LDB4ZjgsMHhlNiwweGZjLDB4NzgsMHhhYiwweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsCisweDAwLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDBiLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLAorMHhmNSwweDgzLDB4ZTAsMHg1NCwweGZiLDB4NDQsMHgwMiwweGY1LDB4MjYsMHg3OCwweGE3LDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwKKzB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHgzMCwweGU1LDB4MDMsMHg0MywweDI2LDB4MDEsMHg3OCwweGE5LDB4ZTYsCisweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHgzMCwweGUwLDB4MDMsMHgxMiwweDBmLAorMHhiNywweGU1LDB4MjYsMHhmYywweDc4LDB4YTksMHhlNiwweDI0LDB4MGIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwKKzB4ODMsMHhlYywweGYwLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsCisweDc0LDB4MGYsMHhmMCwweDc4LDB4YWEsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4ZTAsMHg0NCwweDgwLDB4ZjAsMHhhMywweGEzLAorMHhhMywweGEzLDB4ZTAsMHg0NCwweDgwLDB4ZjAsMHgyMiwweDhjLDB4MmEsMHgxMiwweDBmLDB4NjksMHg3OCwweGE3LDB4ZTYsMHgyNCwKKzB4MDgsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHhmYywweDc4LDB4YTksMHhlNiwweDI0LDB4MGEsCisweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywweGYwLDB4NzgsMHhhNywweGU2LDB4MjQsMHgwNywweGY1LAorMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4ZmMsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA5LDB4ZjUsMHg4MiwKKzB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDc4LDB4YTYsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4ZTAsCisweGZkLDB4YTMsMHhlMCwweGZjLDB4ZWQsMHhmZSwweDc4LDB4YTksMHhlNiwweDI0LDB4MDgsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LAorMHgwMCwweGY1LDB4ODMsMHhlZSwweGYwLDB4ZWMsMHhmZSwweDc4LDB4YTksMHhlNiwweDI0LDB4MDcsMHhmNSwweDgyLDB4MTgsMHhlNiwKKzB4MzQsMHgwMCwweGY1LDB4ODMsMHhlZSwweGYwLDB4OGMsMHgyOSwweDhkLDB4MjgsMHhjMywweGVjLDB4OTQsMHgwNSwweGVkLDB4OTQsCisweDBjLDB4NDAsMHgwNSwweDc1LDB4MjcsMHg3YywweDgwLDB4MzMsMHhkMywweGU1LDB4MjksMHg5NCwweDAxLDB4ZTUsMHgyOCwweDk0LAorMHgwMywweDQwLDB4MDUsMHg3NSwweDI3LDB4M2MsMHg4MCwweDIzLDB4ZDMsMHhlNSwweDI5LDB4OTQsMHg4MSwweGU1LDB4MjgsMHg5NCwKKzB4MDEsMHg0MCwweDA1LDB4NzUsMHgyNywweDE4LDB4ODAsMHgxMywweGQzLDB4ZTUsMHgyOSwweDk0LDB4NjAsMHhlNSwweDI4LDB4OTQsCisweDAwLDB4NDAsMHgwNSwweDc1LDB4MjcsMHgwYywweDgwLDB4MDMsMHg3NSwweDI3LDB4MDgsMHhhZiwweDI3LDB4ZTQsMHhlZiwweDU0LAorMHg3YywweDQ0LDB4ODMsMHhmZiwweDhmLDB4MjcsMHhlNSwweDI3LDB4ZmMsMHg3OCwweGFiLDB4ZTYsMHgyNCwweDAxLDB4ZjUsMHg4MiwKKzB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZWMsMHhmMCwweGU1LDB4MjcsMHhmYywweDc4LDB4YWIsMHhlNiwweDI0LDB4MDUsCisweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywweGYwLDB4ZTUsMHgyNywweGZjLDB4NzgsMHhhMywweGU2LAorMHgyNCwweGE0LDB4ZjgsMHhlYywweGY2LDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwKKzB4ZjUsMHg4MywweGUwLDB4ZjUsMHgyNywweDc4LDB4YTcsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsCisweGY1LDB4ODMsMHhhMywweGUwLDB4MzAsMHhlMywweDE3LDB4NTMsMHgyNywweGM3LDB4NzgsMHhhNywweGU2LDB4MjQsMHgwNSwweGY1LAorMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4OTAsMHgzNSwweDU4LDB4OTMsMHg0MiwweDI3LDB4NTMsMHgyNywKKzB4ZmIsMHg3OCwweGE3LDB4ZTYsMHgyNCwweDA2LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NjAsCisweDAzLDB4NDMsMHgyNywweDA0LDB4NTMsMHgyNywweGZjLDB4NzgsMHhhNywweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LAorMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NDIsMHgyNywweDQzLDB4MjcsMHg4MCwweGU1LDB4MjcsMHhmYywweDc4LDB4YTksMHhlNiwKKzB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywweGYwLDB4NzgsMHhhOSwweGU2LDB4MjQsCisweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4ZjUsMHgyNywweDc4LDB4YTcsMHhlNiwweDI0LAorMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhhMywweGUwLDB4MzAsMHhlMSwweDA1LDB4NTMsMHgyNywKKzB4ZGYsMHg4MCwweDAzLDB4NDMsMHgyNywweDIwLDB4NzgsMHhhNywweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsCisweDAwLDB4ZjUsMHg4MywweGUwLDB4MzAsMHhlNCwweDA1LDB4NTMsMHgyNywweGVmLDB4ODAsMHgwMywweDQzLDB4MjcsMHgxMCwweDc4LAorMHhhNywweGU2LDB4MjQsMHgwOSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweGI0LDB4MDIsMHgwMywKKzB4NDMsMHgyNywweDAyLDB4ZTUsMHgyNywweGZjLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsCisweDAwLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDAzLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLAorMHhmNSwweDgzLDB4ZTAsMHhmNSwweDI3LDB4NzgsMHhhNywweGU2LDB4MjQsMHgwOSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwKKzB4ZjUsMHg4MywweGUwLDB4NzAsMHgwNSwweDUzLDB4MjcsMHg3ZiwweDgwLDB4MDMsMHg0MywweDI3LDB4ODAsMHg3OCwweGE3LDB4ZTYsCisweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4YTMsMHhlMCwweDMwLDB4ZTAsMHgwNSwweDQzLAorMHgyNywweDIwLDB4ODAsMHgwMywweDUzLDB4MjcsMHhkZiwweDc4LDB4YTcsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwKKzB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDMwLDB4ZTMsMHgwNSwweDQzLDB4MjcsMHg0MCwweDgwLDB4MDMsMHg1MywweDI3LDB4YmYsCisweDc4LDB4YTcsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHgzMCwweGUwLAorMHgwNSwweDQzLDB4MjcsMHgxMCwweDgwLDB4MDMsMHg1MywweDI3LDB4ZWYsMHg3OCwweGE3LDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwKKzB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4YTMsMHhlMCwweDMwLDB4ZTQsMHgwNSwweDQzLDB4MjcsMHgwOCwweDgwLDB4MDMsCisweDUzLDB4MjcsMHhmNywweDc4LDB4YTcsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLAorMHhhMywweGUwLDB4MzAsMHhlNSwweDA1LDB4NDMsMHgyNywweDA0LDB4ODAsMHgwMywweDUzLDB4MjcsMHhmYiwweDc4LDB4YTcsMHhlNiwKKzB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhhMywweGUwLDB4MzAsMHhlNiwweDA1LDB4NDMsCisweDI3LDB4MDEsMHg4MCwweDAzLDB4NTMsMHgyNywweGZlLDB4NzgsMHhhNywweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LAorMHgzNCwweDAwLDB4ZjUsMHg4MywweGEzLDB4ZTAsMHgzMCwweGU3LDB4MDUsMHg0MywweDI3LDB4MDIsMHg4MCwweDAzLDB4NTMsMHgyNywKKzB4ZmQsMHhlNSwweDI3LDB4ZmMsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDAzLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsCisweDgzLDB4ZWMsMHhmMCwweGMyLDB4MDMsMHg3YywweDAwLDB4MjIsMHg4ZCwweDI3LDB4OGMsMHgyNiwweGVkLDB4NTQsMHgwMywweDE0LAorMHg2MCwweDAzLDB4N2MsMHgxMCwweDIyLDB4ZTUsMHgyNywweDU0LDB4N2MsMHgyNCwweGZjLDB4NDAsMHgwMywweDdjLDB4MGIsMHgyMiwKKzB4ZTUsMHgyNiwweDI0LDB4OWQsMHhmOCwweGM2LDB4NDQsMHgwMiwweGY2LDB4N2MsMHgwMCwweDIyLDB4OGMsMHgzMCwweDEyLDB4MGYsCisweDY5LDB4ZTUsMHgzMCwweDI0LDB4OWQsMHhmOCwweGU2LDB4MjAsMHhlMiwweDRmLDB4YWMsMHgzMCwweDdkLDB4MDIsMHgxMiwweDBkLAorMHgyZiwweGU1LDB4MzAsMHgyNCwweGZlLDB4NDQsMHgyOCwweGZjLDB4NzgsMHhhYSwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlYywKKzB4ZjAsMHhhZiwweDgzLDB4ZTUsMHg4MiwweDI0LDB4MDQsMHhmZSwweGU0LDB4M2YsMHhmZiwweGVjLDB4OGUsMHg4MiwweDhmLDB4ODMsCisweGYwLDB4N2MsMHgwMywweDhjLDB4MmMsMHhlNSwweDJjLDB4ZmMsMHg3OCwweGFiLDB4ZTYsMHgyNCwweDAxLDB4ZjUsMHg4MiwweDE4LAorMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZWMsMHhmMCwweGU1LDB4MmMsMHhmYywweDc4LDB4YWIsMHhlNiwweDI0LDB4MDUsMHhmNSwKKzB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywweGYwLDB4NzUsMHgyZCwweDAxLDB4NzUsMHgyZiwweDQ4LDB4NzUsCisweDJlLDB4ZmYsMHhlNSwweDMwLDB4MjQsMHhmZCwweGZjLDB4ZTQsMHgzNCwweGZmLDB4ZmQsMHhlYywweDdjLDB4MDMsMHgyNSwweGUwLAorMHhjZCwweDMzLDB4Y2QsMHhkYywweGY5LDB4ZmMsMHhlNSwweDJmLDB4MmMsMHhmNSwweDJmLDB4ZTUsMHgyZSwweDNkLDB4ZjUsMHgyZSwKKzB4NzgsMHhhYiwweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDU0LDB4ZTcsCisweGY1LDB4MmMsMHhhZCwweDJmLDB4YWUsMHgyZSwweGFmLDB4MmQsMHhlNCwweDkwLDB4MDAsMHgwMiwweDEyLDB4MDMsMHgxNywweGU0LAorMHg5MCwweDAwLDB4MDYsMHgxMiwweDAzLDB4MTcsMHgxMiwweDAxLDB4ZTYsMHgzMCwweGU1LDB4MDMsMHg0MywweDJjLDB4MTAsMHhlNSwKKzB4MmMsMHhmYywweDc4LDB4YWIsMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZWMsCisweGYwLDB4MTIsMHgxMCwweDRiLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwNiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LAorMHg4MywweGUwLDB4YzIsMHgwMywweGZjLDB4ZTUsMHgzMCwweDI0LDB4OWQsMHhmOCwweGM2LDB4NDQsMHgwNCwweGY2LDB4OGMsMHgyYywKKzB4ZTUsMHgzMCwweDU0LDB4MGYsMHhjNCwweDU0LDB4ZjAsMHg3ZSwweDAwLDB4ZmYsMHhlZSwweGVmLDB4NDQsMHgwNCwweDdkLDB4MDAsCisweGZmLDB4ZWMsMHg0ZSwweGZjLDB4ZWQsMHg0ZiwweGZkLDB4MTIsMHgxYywweGE3LDB4N2MsMHgwMCwweDIyLDB4OGMsMHgyZiwweDEyLAorMHgwZiwweDY5LDB4MTIsMHgwZiwweGViLDB4NzgsMHhhYSwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlMCwweDU0LDB4MDgsMHhmMCwKKzB4YTMsMHhhMywweGEzLDB4YTMsMHhlMCwweDU0LDB4MDgsMHhmMCwweGFjLDB4MmYsMHg3ZCwweDAyLDB4MTIsMHgwZCwweDJmLDB4YzIsCisweDAzLDB4ZTUsMHgyZiwweDI0LDB4OWQsMHhmOCwweGM2LDB4NTQsMHhmYiwweGY2LDB4N2MsMHgwMCwweDIyLDB4MTIsMHgzMCwweGU2LAorMHg3OCwweDk2LDB4ZWMsMHhmNiwweGVjLDB4MjQsMHg5ZCwweGY4LDB4ZTYsMHgzMCwweGUxLDB4MGEsMHg3ZCwweDAwLDB4N2MsMHgxMywKKzB4MTIsMHgyNSwweDI2LDB4MTIsMHgzMSwweDY5LDB4NzgsMHg5NiwweGU2LDB4MjQsMHg5ZCwweGY4LDB4YzYsMHg0NCwweDAxLDB4ZjYsCisweDc4LDB4OTYsMHhlNiwweGZjLDB4MTIsMHgwZiwweDY5LDB4NzgsMHg5NiwweGU2LDB4MjQsMHhmZCwweDc1LDB4ZjAsMHgwYSwweGE0LAorMHgyNCwweDE0LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywweGY1LDB4ODMsMHg3OCwweGE2LDB4ZTYsMHhmYSwweDA4LDB4ZTYsMHhmOSwKKzB4N2IsMHgwYSwweDc4LDB4MDEsMHgxMiwweDAzLDB4YTcsMHg3OCwweGE2LDB4ODYsMHg4MywweDA4LDB4ODYsMHg4MiwweDc5LDB4NjcsCisweDdhLDB4MzUsMHg3YiwweDBhLDB4NzgsMHgwMSwweDEyLDB4MDMsMHhmNSwweDEyLDB4MGYsMHhiNywweGMyLDB4MDMsMHg3OCwweDk2LAorMHhlNiwweGZjLDB4MTIsMHgxMSwweDA3LDB4NzgsMHg5NSwweGVjLDB4ZjYsMHhlYywweDYwLDB4MGEsMHg3ZCwweDAwLDB4N2MsMHgwOCwKKzB4MTIsMHgyNSwweDI2LDB4MTIsMHgzMSwweDY5LDB4NzgsMHg5NiwweGU2LDB4ZmMsMHgxMiwweDBmLDB4NjksMHg3OCwweGE5LDB4ZTYsCisweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg0NCwweDEwLDB4NTQsMHhkZiwweGZjLAorMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHg3OCwKKzB4OTUsMHhlYywweGY2LDB4YzIsMHgwMywweDdjLDB4YzgsMHgxMiwweDMyLDB4YTksMHg3OCwweDk2LDB4ZTYsMHhmYywweDEyLDB4MGYsCisweDY5LDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDU0LAorMHhlZiwweGYwLDB4YzIsMHgwMywweDdjLDB4YzgsMHgxMiwweDMyLDB4YTksMHg3OCwweDk2LDB4ZTYsMHhmYywweDEyLDB4MGYsMHg2OSwKKzB4NzgsMHhhOSwweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDQ0LDB4MTAsCisweGYwLDB4YzIsMHgwMywweDdjLDB4YzgsMHgxMiwweDMyLDB4YTksMHg3OCwweDk2LDB4ZTYsMHhmYywweDEyLDB4MGYsMHg2OSwweDc4LAorMHhhOSwweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDQ0LDB4MjAsMHhmMCwKKzB4YzIsMHgwMywweDdjLDB4ZjAsMHgxMiwweDMyLDB4YTksMHg3OCwweDk2LDB4ZTYsMHhmYywweDEyLDB4MGYsMHg2OSwweDc4LDB4YTksCisweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDMwLDB4ZTQsMHgxNSwweGMyLAorMHgwMywweDc4LDB4OTYsMHhlNiwweDQ0LDB4MTAsMHg3ZiwweDAwLDB4ZmUsMHg3YywweDA3LDB4MTIsMHgzMSwweGZiLDB4MTIsMHgzMSwKKzB4NjksMHgwMiwweDE3LDB4MTQsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsCisweDgzLDB4ZTAsMHg1NCwweGNmLDB4ZjAsMHhjMiwweDAzLDB4N2MsMHhjOCwweDEyLDB4MzIsMHhhOSwweDc4LDB4OTYsMHhlNiwweGZjLAorMHgxMiwweDBmLDB4NjksMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywKKzB4ZTAsMHg0NCwweDMwLDB4ZjAsMHhjMiwweDAzLDB4N2MsMHhmMCwweDEyLDB4MzIsMHhhOSwweDc4LDB4OTYsMHhlNiwweGZjLDB4MTIsCisweDBmLDB4NjksMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA1LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLAorMHgzMCwweGU0LDB4MTQsMHhjMiwweDAzLDB4NzgsMHg5NiwweGU2LDB4NDQsMHgxMCwweDdmLDB4MDAsMHhmZSwweDdjLDB4MDcsMHgxMiwKKzB4MzEsMHhmYiwweDEyLDB4MzEsMHg2OSwweDgwLDB4NWQsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsCisweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg1NCwweGVmLDB4ZjAsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LAorMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg1NCwweGRmLDB4ZjAsMHg3OCwweDk2LDB4ZTYsMHgyNCwweGZkLDB4NzUsMHhmMCwKKzB4MGEsMHhhNCwweDI0LDB4MTQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZjLDB4ZjUsMHg4MywweGFjLDB4ODIsMHhhZCwweDgzLDB4NzgsCisweGE2LDB4ODYsMHg4MywweDA4LDB4ODYsMHg4MiwweGVjLDB4ZjksMHhlZCwweGZhLDB4N2IsMHgwYSwweDc4LDB4MDEsMHgxMiwweDAzLAorMHhhNywweGMyLDB4MDMsMHg3OCwweDk2LDB4ZTYsMHhmYywweDEyLDB4MTEsMHgwNywweDdkLDB4MDAsMHg3YywweDBiLDB4MTIsMHgyNSwKKzB4MjYsMHgxMiwweDMxLDB4NjksMHgyMiwweDEyLDB4MzAsMHhlNiwweGU0LDB4OTAsMHhmYywweDM5LDB4ZjAsMHg3ZCwweDAyLDB4N2MsCisweDAwLDB4MTIsMHgyNSwweDI2LDB4MTIsMHgzMSwweDY5LDB4MjIsMHgxMiwweDMwLDB4ZTYsMHg3YywweDAwLDB4MTIsMHgyNSwweGJmLAorMHgxMiwweDMxLDB4NjksMHgyMiwweDc0LDB4M2MsMHg5MCwweGZiLDB4ZTAsMHhmMCwweDc0LDB4M2UsMHg5MCwweGZiLDB4ZTAsMHhmMCwKKzB4ZTQsMHg5MCwweGZjLDB4MjgsMHhmMCwweDIyLDB4OGQsMHgzNSwweDhjLDB4MzQsMHhlYywweGI0LDB4MDEsMHgwMiwweDgwLDB4MDMsCisweGQzLDB4NDAsMHgwMiwweDgwLDB4MjgsMHhiNCwweDAyLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDA4LDB4YTgsMHgzNSwweGM2LAorMHgyNSwweGUwLDB4ZjYsMHg4MCwweDE4LDB4YjQsMHgwNCwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgwYSwweGE4LDB4MzUsMHhjNiwKKzB4MjUsMHhlMCwweDI1LDB4ZTAsMHhmNiwweDgwLDB4MDYsMHhhOCwweDM1LDB4NzYsMHgwMCwweDgwLDB4MDAsMHgyMiwweDhjLDB4M2MsCisweDhkLDB4M2IsMHhlZCwweGZlLDB4ZWMsMHhmZCwweDdmLDB4MDEsMHg3NSwweDY2LDB4MDYsMHg3NSwweDY3LDB4MDAsMHg5MCwweGZjLAorMHgyOSwweDEyLDB4MDQsMHg2ZSwweDEyLDB4MDEsMHhlNiwweGI0LDB4ODAsMHgwMiwweDgwLDB4MDYsMHhkMywweDUwLDB4MDMsMHgwMiwKKzB4MTgsMHg0NywweDkwLDB4ZmMsMHgyOSwweDEyLDB4MDQsMHg4MCwweDkwLDB4MDAsMHgwMywweDEyLDB4MDEsMHhlYywweDU0LDB4ZjAsCisweGI0LDB4MzAsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4NWYsMHg5MCwweGZjLDB4MjksMHgxMiwweDA0LDB4ODAsMHg5MCwweDAwLAorMHgwOCwweDEyLDB4MDIsMHgwZSwweGZhLDB4ZmQsMHhlYiwweGZlLDB4N2YsMHgwMSwweDkwLDB4ZmMsMHgyYywweDEyLDB4MDQsMHg2ZSwKKzB4ZWUsMHhjZCwweDkwLDB4MzUsMHg3MSwweGZjLDB4ZTQsMHg5MywweGZmLDB4NzQsMHgwMSwweDkzLDB4ZmUsMHhmOSwweGVmLDB4ZmEsCisweDdiLDB4MDEsMHhlYSwweGZmLDB4ZTksMHhmZSwweGVjLDB4YzMsMHg5ZSwweGVkLDB4OWYsMHg0MCwweDI1LDB4OTAsMHgzNSwweDczLAorMHhlNCwweDkzLDB4ZmQsMHg3NCwweDAxLDB4OTMsMHhmYywweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwweGVlLDB4Y2QsMHhmYywKKzB4OTAsMHhmYywweDJlLDB4ZTAsMHhkMywweDljLDB4OTAsMHhmYywweDJkLDB4ZTAsMHg5ZCwweDUwLDB4MDUsMHg3NSwweDY2LDB4ODAsCisweDgwLDB4MzMsMHgxMiwweDE5LDB4NjUsMHg4MCwweDJlLDB4YjQsMHg2MCwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgwYiwweGFjLAorMHgzYywweGFkLDB4M2IsMHgxMiwweDA3LDB4NzcsMHg4YywweDY2LDB4ODAsMHgxYiwweGI0LDB4MTAsMHgwMywweGIzLDB4NDAsMHgxMCwKKzB4YzMsMHhiNCwweDIwLDB4MDMsMHhiMywweDQwLDB4MDksMHhjMywweGI0LDB4NDAsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MDAsCisweDc1LDB4NjYsMHg4MSwweDgwLDB4MDAsMHg4MCwweDc1LDB4YjQsMHg4MSwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHg2YiwweDkwLAorMHhmYywweDI5LDB4MTIsMHgwNCwweDgwLDB4OTAsMHgwMCwweDAzLDB4MTIsMHgwMSwweGVjLDB4NTQsMHhmMCwweGI0LDB4MzAsMHgwMiwKKzB4ODAsMHgwMywweGQzLDB4NDAsMHgxZCwweDkwLDB4ZmMsMHgyOSwweDEyLDB4MDQsMHg4MCwweDkwLDB4MDAsMHgwOCwweDEyLDB4MDIsCisweDBlLDB4ZmEsMHhmZCwweGViLDB4ZmUsMHg3ZiwweDAxLDB4OTAsMHhmYywweDJmLDB4MTIsMHgwNCwweDZlLDB4MTIsMHgxOCwweGNmLAorMHg4MCwweDM2LDB4YjQsMHg2MCwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgxMywweDc1LDB4M2EsMHg2NywweGU0LDB4ZjUsMHgzOSwKKzB4ZjUsMHgzOCwweGFjLDB4M2MsMHhhZCwweDNiLDB4MTIsMHgwNSwweGQzLDB4OGMsMHg2NiwweDgwLDB4MWIsMHhiNCwweDEwLDB4MDMsCisweGIzLDB4NDAsMHgxMCwweGMzLDB4YjQsMHgyMCwweDAzLDB4YjMsMHg0MCwweDA5LDB4YzMsMHhiNCwweDQwLDB4MDIsMHg4MCwweDAzLAorMHhkMywweDQwLDB4MDAsMHg3NSwweDY2LDB4ODEsMHg4MCwweDAwLDB4ODAsMHgwMiwweDgwLDB4MDAsMHhlNSwweDY2LDB4ZmMsMHg5MCwKKzB4ZmMsMHgyOSwweDEyLDB4MDQsMHg4MCwweGVjLDB4OTAsMHgwMCwweDAyLDB4MTIsMHgwMywweDE3LDB4YWMsMHg2NywweDIyLDB4OTAsCisweGZjLDB4MjksMHgxMiwweDA0LDB4ODAsMHg5MCwweDAwLDB4MDQsMHgxMiwweDAxLDB4ZWMsMHg2MCwweDA0LDB4NzQsMHgwMSwweDgwLAorMHgwMSwweGU0LDB4YTIsMHhlMCwweDkyLDB4MDEsMHg5MCwweGZjLDB4MjksMHgxMiwweDA0LDB4ODAsMHhlZCwweDI0LDB4MDMsMHhmZCwKKzB4NTAsMHgwMSwweDBlLDB4OTAsMHhmYywweDJjLDB4MTIsMHgwNCwweDZlLDB4OTAsMHhmYywweDI5LDB4MTIsMHgwNCwweDgwLDB4OTAsCisweDAwLDB4MDUsMHgxMiwweDAxLDB4ZWMsMHhmNSwweDY3LDB4OTAsMHgwMCwweDA0LDB4MTIsMHgwMSwweGVjLDB4NTQsMHgwZiwweGZjLAorMHg3ZCwweDY3LDB4MTIsMHgxNywweDQ2LDB4ZTUsMHg2NywweDcwLDB4MDQsMHg3NSwweDY2LDB4MDgsMHgyMiwweDc1LDB4NjYsMHgwMCwKKzB4NzgsMHg4NCwweDc2LDB4MDAsMHg3OCwweDg0LDB4ZTYsMHhjMywweDk1LDB4NjcsMHg1MCwweDM4LDB4OTAsMHhmYywweDJmLDB4MTIsCisweDA0LDB4ODAsMHgxMiwweDAxLDB4ZTYsMHhmYywweDkwLDB4ZmMsMHgyYywweDEyLDB4MDQsMHg4MCwweGVjLDB4MTIsMHgwMywweDBmLAorMHgzMCwweDAxLDB4MGUsMHg5MCwweGZjLDB4MzEsMHhlMCwweDA0LDB4ZjAsMHg5MCwweGZjLDB4MzAsMHg3MCwweDAzLDB4ZTAsMHgwNCwKKzB4ZjAsMHg3OCwweDg0LDB4MDYsMHg5MCwweGZjLDB4MmUsMHhlMCwweDA0LDB4ZjAsMHg5MCwweGZjLDB4MmQsMHg3MCwweDAzLDB4ZTAsCisweDA0LDB4ZjAsMHg4MCwweGMwLDB4MjIsMHg5MCwweGZjLDB4MmEsMHhlMCwweGZkLDB4YTMsMHhlMCwweGZjLDB4ZWQsMHhmZSwweGVjLAorMHhmZCwweDdmLDB4MDEsMHhlZCwweDI0LDB4MGEsMHhmZCwweDUwLDB4MDEsMHgwZSwweDkwLDB4ZmMsMHgzMiwweDEyLDB4MDQsMHg2ZSwKKzB4OTAsMHhmYywweDI5LDB4MTIsMHgwNCwweDgwLDB4OTAsMHgwMCwweDA0LDB4MTIsMHgwMSwweGVjLDB4NTQsMHgwZiwweGI0LDB4MDEsCisweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgxNywweDkwLDB4ZmMsMHgzMiwweDEyLDB4MDQsMHg4MCwweDBkLDB4ZWQsMHg3MCwweDAxLAorMHgwZSwweDkwLDB4ZmMsMHgyZiwweDEyLDB4MDQsMHg2ZSwweDc4LDB4ODgsMHg3NiwweDAxLDB4ODAsMHg0ZSwweGI0LDB4MDIsMHgwMiwKKzB4ODAsMHgwMywweGQzLDB4NDAsMHgxOSwweDkwLDB4ZmMsMHgzMiwweDEyLDB4MDQsMHg4MCwweGVkLDB4MjQsMHgwMiwweGZkLDB4NTAsCisweDAxLDB4MGUsMHg5MCwweGZjLDB4MmYsMHgxMiwweDA0LDB4NmUsMHg3OCwweDg4LDB4NzYsMHgwMiwweDgwLDB4MmQsMHhiNCwweDA0LAorMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MTksMHg5MCwweGZjLDB4MzIsMHgxMiwweDA0LDB4ODAsMHhlZCwweDI0LDB4MDQsMHhmZCwKKzB4NTAsMHgwMSwweDBlLDB4OTAsMHhmYywweDJmLDB4MTIsMHgwNCwweDZlLDB4NzgsMHg4OCwweDc2LDB4MDQsMHg4MCwweDBjLDB4YjQsCisweDAwLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDAwLDB4NzUsMHg2NiwweDA4LDB4MjIsMHg5MCwweGZjLDB4MjksMHgxMiwweDA0LAorMHg4MCwweDkwLDB4MDAsMHgwNSwweDEyLDB4MDEsMHhlYywweGY1LDB4NjcsMHg3OCwweDg1LDB4NzYsMHgwMCwweDc4LDB4ODUsMHhlNiwKKzB4YzMsMHg5NSwweDY3LDB4NDAsMHgwMywweDAyLDB4MWEsMHhjZCwweDc4LDB4ODYsMHg3NiwweDAwLDB4NzgsMHg4NiwweGU2LDB4YzMsCisweDc4LDB4ODgsMHg5NiwweDUwLDB4NzYsMHg5MCwweGZjLDB4MmMsMHgxMiwweDA0LDB4ODAsMHgxMiwweDAxLDB4ZTYsMHhmYywweDkwLAorMHhmYywweDMyLDB4MTIsMHgwNCwweDg5LDB4MTIsMHgwMSwweGUwLDB4ZjQsMHg1YywweGZjLDB4MTIsMHgwMSwweGUwLDB4ZjgsMHg5MCwKKzB4ZmMsMHgyZiwweDEyLDB4MDQsMHg4MCwweGU4LDB4YzAsMHhlMCwweDEyLDB4MDEsMHhlNiwweGM4LDB4ZDAsMHhlMCwweGM4LDB4NTgsCisweDRjLDB4ZmMsMHg5MCwweGZjLDB4MmMsMHgxMiwweDA0LDB4ODAsMHhlYywweDEyLDB4MDMsMHgwZiwweDc4LDB4ODcsMHhlYywweGY2LAorMHg5MCwweGZjLDB4MzEsMHhlMCwweDA0LDB4ZjAsMHg5MCwweGZjLDB4MzAsMHg3MCwweDAzLDB4ZTAsMHgwNCwweGYwLDB4MDksMHhlOSwKKzB4NzAsMHgwMSwweDBhLDB4OTAsMHhmYywweDMyLDB4MTIsMHgwNCwweDc3LDB4OTAsMHhmYywweDI5LDB4MTIsMHgwNCwweDgwLDB4OTAsCisweDAwLDB4MDQsMHgxMiwweDAxLDB4ZWMsMHgzMCwweGU0LDB4MGUsMHg5MCwweGZjLDB4MmUsMHhlMCwweDA0LDB4ZjAsMHg5MCwweGZjLAorMHgyZCwweDcwLDB4MDMsMHhlMCwweDA0LDB4ZjAsMHg3OCwweDg2LDB4MDYsMHg4MCwweDgxLDB4NzgsMHg4OCwweGU2LDB4ZmQsMHhlNCwKKzB4ZmUsMHhmZiwweGVlLDB4Y2QsMHhmYywweDkwLDB4ZmMsMHgzMSwweGUwLDB4MmMsMHhmMCwweDkwLDB4ZmMsMHgzMCwweGUwLDB4M2QsCisweGYwLDB4NzgsMHg4OCwweGU2LDB4ZmQsMHhlNCwweGZlLDB4ZmYsMHhlZSwweGNkLDB4ZmMsMHg5MCwweGZjLDB4MzQsMHhlMCwweDJjLAorMHhmMCwweDkwLDB4ZmMsMHgzMywweGUwLDB4M2QsMHhmMCwweDc4LDB4ODUsMHgwNiwweDAyLDB4MWEsMHgwZCwweDc1LDB4NjYsMHgwMCwKKzB4MjIsMHhlNSwweDNkLDB4MDUsMHgzZCwweDA0LDB4NzAsMHgwMiwweGIyLDB4YjAsMHgyMiwweGMwLDB4ZTAsMHhjMCwweGYwLDB4YzAsCisweDgyLDB4YzAsMHg4MywweGMwLDB4ZDAsMHhlOCwweGMwLDB4ZTAsMHhlOSwweGMwLDB4ZTAsMHhlYSwweGMwLDB4ZTAsMHhlYiwweGMwLAorMHhlMCwweGVjLDB4YzAsMHhlMCwweGVkLDB4YzAsMHhlMCwweGVlLDB4YzAsMHhlMCwweGVmLDB4YzAsMHhlMCwweDkwLDB4ZmYsMHg5MiwKKzB4ZTAsMHgxMiwweDAxLDB4YjcsMHgxYiwweDI5LDB4MzAsMHgxYiwweDI5LDB4MzIsMHgxYiwweDM4LDB4MzgsMHgxYiwweDRhLDB4M2EsCisweDFiLDB4NWMsMHgzZSwweDFiLDB4NzQsMHg0NCwweDFiLDB4NjgsMHg0NiwweDFiLDB4ODAsMHg1MCwweDFiLDB4YzIsMHg1MiwweDFiLAorMHhhMSwweDU0LDB4MWIsMHhlMywweDU2LDB4MDAsMHgwMCwweDFjLDB4MDQsMHg5MCwweGZmLDB4OTIsMHhlMCwweDdmLDB4MDAsMHhmZSwKKzB4N2MsMHgwMSwweDEyLDB4MzEsMHhmYiwweDAyLDB4MWMsMHgxNCwweGU0LDB4ZmYsMHgwNCwweGZlLDB4N2MsMHgwMywweDEyLDB4MzEsCisweGZiLDB4NzQsMHgyMCwweDkwLDB4ZmYsMHhmZSwweGYwLDB4MDIsMHgxYywweDE0LDB4ZTQsMHhmZiwweDA0LDB4ZmUsMHg3YywweDAyLAorMHgxMiwweDMxLDB4ZmIsMHg3NCwweDQwLDB4OTAsMHhmZiwweGZlLDB4ZjAsMHgwMiwweDFjLDB4MTQsMHhlNCwweGZmLDB4MDQsMHhmZSwKKzB4N2MsMHgwNCwweDEyLDB4MzEsMHhmYiwweDAyLDB4MWMsMHgxNCwweGU0LDB4ZmYsMHgwNCwweGZlLDB4N2MsMHgwNSwweDEyLDB4MzEsCisweGZiLDB4MDIsMHgxYywweDE0LDB4ZTQsMHhmZiwweDA0LDB4ZmUsMHg3YywweDA2LDB4MTIsMHgzMSwweGZiLDB4MDIsMHgxYywweDE0LAorMHg5MCwweGZmLDB4YTUsMHhlMCwweDdkLDB4MDAsMHg5MCwweGZiLDB4ZjgsMHhjZCwweGYwLDB4YTMsMHhjZCwweGYwLDB4OTAsMHhmYiwKKzB4ZjksMHhlMCwweGZjLDB4ZjUsMHg4MywweDkwLDB4ZmIsMHhmOCwweGUwLDB4NDQsMHgzMywweGZkLDB4MTIsMHgxYywweGE3LDB4ODAsCisweDczLDB4OTAsMHhmZiwweGI1LDB4ZTAsMHg3ZCwweDAwLDB4OTAsMHhmYiwweGZhLDB4Y2QsMHhmMCwweGEzLDB4Y2QsMHhmMCwweDkwLAorMHhmYiwweGZiLDB4ZTAsMHhmYywweGY1LDB4ODMsMHg5MCwweGZiLDB4ZmEsMHhlMCwweDQ0LDB4NDMsMHhmZCwweDEyLDB4MWMsMHhhNywKKzB4ODAsMHg1MiwweDkwLDB4ZmYsMHhhNiwweGUwLDB4N2QsMHgwMCwweDkwLDB4ZmIsMHhmYywweGNkLDB4ZjAsMHhhMywweGNkLDB4ZjAsCisweDkwLDB4ZmIsMHhmZCwweGUwLDB4ZmMsMHhmNSwweDgzLDB4OTAsMHhmYiwweGZjLDB4ZTAsMHg0NCwweDM0LDB4ZmQsMHgxMiwweDFjLAorMHhhNywweDgwLDB4MzEsMHg5MCwweGZmLDB4YjYsMHhlMCwweDdkLDB4MDAsMHg5MCwweGZiLDB4ZmUsMHhjZCwweGYwLDB4YTMsMHhjZCwKKzB4ZjAsMHg5MCwweGZiLDB4ZmYsMHhlMCwweGZjLDB4ZjUsMHg4MywweDkwLDB4ZmIsMHhmZSwweGUwLDB4NDQsMHg0NCwweGZkLDB4MTIsCisweDFjLDB4YTcsMHg4MCwweDEwLDB4OTAsMHhmZiwweDkyLDB4ZTAsMHg3ZCwweDAwLDB4ZmMsMHhlZCwweDQ0LDB4YWEsMHhmZCwweDEyLAorMHgxYywweGE3LDB4ODAsMHgwMCwweGU0LDB4OTAsMHhmZiwweDkyLDB4ZjAsMHhkMCwweGUwLDB4ZmYsMHhkMCwweGUwLDB4ZmUsMHhkMCwKKzB4ZTAsMHhmZCwweGQwLDB4ZTAsMHhmYywweGQwLDB4ZTAsMHhmYiwweGQwLDB4ZTAsMHhmYSwweGQwLDB4ZTAsMHhmOSwweGQwLDB4ZTAsCisweGY4LDB4ZDAsMHhkMCwweGQwLDB4ODMsMHhkMCwweDgyLDB4ZDAsMHhmMCwweGQwLDB4ZTAsMHgzMiwweDA1LDB4ODEsMHgwNSwweDgxLAorMHgwNSwweDgxLDB4MDUsMHg4MSwweGE4LDB4ODEsMHgxOCwweDE4LDB4MTgsMHhlZCwweGY2LDB4MDgsMHhlYywweGY2LDB4OTAsMHhmZiwKKzB4NWEsMHhlMCwweDIwLDB4ZTcsMHgwMiwweDgwLDB4ZjcsMHg5MCwweGZmLDB4NTksMHhlMCwweDdkLDB4MDAsMHhhOCwweDgxLDB4MTgsCisweGNkLDB4ZjYsMHhjZCwweDA4LDB4ZjYsMHg3ZCwweDAzLDB4YTgsMHg4MSwweGU2LDB4MTgsMHhmYywweGU2LDB4Y2MsMHgyNSwweGUwLAorMHhjYywweDMzLDB4Y2MsMHhkZCwweGY5LDB4Y2MsMHhmNiwweGNjLDB4MDgsMHhmNiwweGE4LDB4ODEsMHgxOCwweGU2LDB4NDQsMHhmOCwKKzB4ZjYsMHhhOCwweDgxLDB4MTgsMHgxOCwweDE4LDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweGE4LDB4ODEsMHgxOCwweDg2LDB4ODMsCisweDA4LDB4ODYsMHg4MiwweGVkLDB4ZjAsMHhhMywweGVjLDB4ZjAsMHg3NCwweDAyLDB4OTAsMHhmZiwweDVhLDB4ZjAsMHgxNSwweDgxLAorMHgxNSwweDgxLDB4MTUsMHg4MSwweDE1LDB4ODEsMHgyMiwweGU1LDB4ODEsMHgyNCwweDA1LDB4ZjUsMHg4MSwweGU0LDB4YTgsMHg4MSwKKzB4MTgsMHhmNiwweGE4LDB4ODEsMHgxOCwweDE4LDB4MTgsMHgxOCwweGVkLDB4ZjYsMHgwOCwweGVjLDB4ZjYsMHg5MCwweGZiLDB4ZjUsCisweGUwLDB4MjQsMHhmOCwweDUwLDB4MDMsMHgwMiwweDFkLDB4YzgsMHhlNCwweGE4LDB4ODEsMHgxOCwweDE4LDB4ZjYsMHhhOCwweDgxLAorMHgxOCwweGU2LDB4ZmUsMHhhOCwweDgxLDB4MTgsMHgxOCwweDE4LDB4MTgsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4N2YsMHgwMCwKKzB4ZWYsMHgyNCwweGY4LDB4NDAsMHg0ZCwweGU0LDB4ZWYsMHgyNSwweGUwLDB4MjQsMHg3ZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmMsCisweGY1LDB4ODMsMHhlMCwweGZiLDB4YTMsMHhlMCwweDZjLDB4NzAsMHgwMywweGZhLDB4ZWIsMHg2ZCwweDcwLDB4MDksMHg3NCwweDAxLAorMHhhOCwweDgxLDB4MTgsMHgxOCwweGY2LDB4ODAsMHgyYiwweGU0LDB4ZWYsMHgyNSwweGUwLDB4MjQsMHg3ZCwweGY1LDB4ODIsMHhlNCwKKzB4MzQsMHhmYywweGY1LDB4ODMsMHg3YSwweDAwLDB4ZTAsMHg1NCwweGYwLDB4Y2MsMHhmOCwweGNjLDB4Y2QsMHhmOSwweGNkLDB4ZmIsCisweDc4LDB4MDAsMHhlOSwweDU0LDB4ZjAsMHhmOSwweGVhLDB4NjgsMHg3MCwweDAyLDB4ZWIsMHg2OSwweDcwLDB4MDEsMHgwZSwweDBmLAorMHg4MCwweGFlLDB4YTgsMHg4MSwweDE4LDB4ZWUsMHhmNiwweGE4LDB4ODEsMHgxOCwweDE4LDB4MTgsMHgxOCwweGVkLDB4ZjYsMHgwOCwKKzB4ZWMsMHhmNiwweGE4LDB4ODEsMHhlZiwweGY2LDB4YTgsMHg4MSwweDE4LDB4MTgsMHhlNiwweDcwLDB4NzksMHhhOCwweDgxLDB4MTgsCisweGU2LDB4MjQsMHhmNywweDQwLDB4NzEsMHhhOCwweDgxLDB4MTgsMHgxOCwweDE4LDB4MTgsMHhlNiwweDU0LDB4MGYsMHhhOCwweDgxLAorMHhmNiwweDY0LDB4MDQsMHg2MCwweDE3LDB4YTgsMHg4MSwweGU2LDB4NjQsMHgwMywweDYwLDB4MTAsMHhhOCwweDgxLDB4MTgsMHgxOCwKKzB4MTgsMHgxOCwweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsMHgxMiwweDFjLDB4M2MsMHg4MCwweDRhLDB4N2MsMHgwYSwweDEyLDB4MzEsCisweDViLDB4YTgsMHg4MSwweDE4LDB4MTgsMHgxOCwweDE4LDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweDkwLDB4ZmIsMHhmNCwweGUwLAorMHgyNSwweGUwLDB4MjQsMHg3ZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmMsMHhmNSwweDgzLDB4ZWQsMHhmMCwweGEzLDB4ZWMsMHhmMCwKKzB4OTAsMHhmYiwweGY0LDB4ZTAsMHhmZiwweGU0LDB4ZWYsMHgwNCwweDU0LDB4MDcsMHhmZiwweDkwLDB4ZmIsMHhmNCwweGYwLDB4OTAsCisweGZiLDB4ZjUsMHhlMCwweDA0LDB4ZjAsMHgxMiwweDMxLDB4ZjQsMHg5MCwweGZiLDB4ZjYsMHhlMCwweDcwLDB4MDgsMHhlNCwweGZlLAorMHhmZiwweDdjLDB4MGYsMHgxMiwweDMxLDB4ZmIsMHg4MCwweDI3LDB4OTAsMHhmYiwweGY3LDB4ZTAsMHgwNCwweGYwLDB4NTQsMHgzZiwKKzB4NzAsMHgxZCwweDkwLDB4ZmIsMHhmNywweGUwLDB4NDQsMHhmZSwweDdkLDB4MDAsMHhmYywweDkwLDB4ZmIsMHhmNCwweGUwLDB4MjUsCisweGUwLDB4MjQsMHg3ZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmMsMHhmNSwweDgzLDB4ZWQsMHhmMCwweGEzLDB4ZWMsMHhmMCwweGU1LAorMHg4MSwweDI0LDB4ZmIsMHhmNSwweDgxLDB4MjIsMHg3OCwweDhiLDB4NzYsMHgwMCwweDc4LDB4OGMsMHg3NiwweDAwLDB4NzQsMHgwMSwKKzB4OTAsMHhmYiwweGY2LDB4ZjAsMHgxMiwweDMwLDB4ZTYsMHg5MCwweGZiLDB4ZjUsMHhlMCwweDYwLDB4NTcsMHg3YywweDBhLDB4MTIsCisweDMxLDB4NWIsMHg5MCwweGZiLDB4ZjMsMHhlMCwweDI1LDB4ZTAsMHgyNCwweDdkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywweGY1LAorMHg4MywweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmMsMHg5MCwweGZiLDB4ZjMsMHhlMCwweDI1LDB4ZTAsMHgyNCwweDdkLDB4ZjUsMHg4MiwKKzB4ZTQsMHgzNCwweGZjLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHhhMywweGYwLDB4OTAsMHhmYiwweGYzLDB4ZTAsMHhmZiwweGU0LDB4ZWYsCisweDA0LDB4NTQsMHgwNywweGZmLDB4OTAsMHhmYiwweGYzLDB4ZjAsMHg5MCwweGZiLDB4ZjUsMHhlMCwweDE0LDB4ZjAsMHg3OCwweDg5LAorMHhlZCwweGY2LDB4MDgsMHhlYywweGY2LDB4MTIsMHgzMSwweGY0LDB4NzgsMHg4OSwweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsMHgxMiwKKzB4MDgsMHhkYSwweDgwLDB4YTMsMHgxMiwweDMyLDB4NDgsMHg5MCwweGZmLDB4OTMsMHhlMCwweDQ0LDB4MDEsMHhmMCwweGIyLDB4YjMsCisweDc4LDB4OGIsMHgwNiwweGI2LDB4MDAsMHgxMSwweDc4LDB4OGIsMHg3NiwweDAwLDB4NzgsMHg4YywweGU2LDB4ZjQsMHgwNCwweDA0LAorMHhhMiwweGUwLDB4OTIsMHhiNCwweDc4LDB4OGMsMHhmNiwweDAyLDB4MWUsMHgwNywweGU0LDB4OTAsMHhmYiwweGY2LDB4ZjAsMHg5MCwKKzB4ZmIsMHhmNSwweGUwLDB4N2QsMHgwMCwweGZjLDB4ZWQsMHg0NCwweGNmLDB4ZmQsMHgxMiwweDFjLDB4M2MsMHgxMiwweDMxLDB4NjksCisweDIyLDB4MTIsMHgzMCwweGU2LDB4ZTUsMHg3MCwweDY0LDB4NDksMHg0NSwweDZmLDB4NjAsMHgxNSwweDkwLDB4ZmYsMHg4MywweGUwLAorMHg1NCwweDBmLDB4N2QsMHgwMCwweGQzLDB4OTUsMHg3MCwweGVkLDB4OTUsMHg2ZiwweDUwLDB4MDUsMHgxMiwweDJmLDB4MmYsMHg4MCwKKzB4MDMsMHgxMiwweDJmLDB4ZmYsMHgxMiwweDMxLDB4NjksMHgyMiwweDEyLDB4MzAsMHhlNiwweGU1LDB4NzAsMHg2NCwweDQ5LDB4NDUsCisweDZmLDB4NjAsMHgwNSwweDEyLDB4MzAsMHgzOSwweDgwLDB4MGUsMHg5MCwweGZmLDB4ODAsMHhlMCwweDQ0LDB4MDgsMHhmMCwweDkwLAorMHhmZiwweDgzLDB4ZTAsMHg1NCwweDdmLDB4ZjAsMHgxMiwweDMxLDB4NjksMHgyMiwweDEyLDB4MzAsMHhlNiwweDhjLDB4NTQsMHhlYywKKzB4NTQsMHhmMCwweGI0LDB4MTAsMHgxNSwweDc1LDB4NmEsMHgzNSwweDc1LDB4NjksMHhmYywweDc1LDB4NjgsMHgwMSwweGU1LDB4NmEsCisweDI0LDB4MDMsMHhmNSwweDZhLDB4ZTUsMHg2OSwweDM0LDB4MDAsMHhmNSwweDY5LDB4ZTQsMHhmNSwweDU3LDB4ZjUsMHg1NiwweGU1LAorMHg1NiwweGMzLDB4OTQsMHgwMSwweDUwLDB4MjcsMHhlNSwweDU0LDB4NTQsMHgwZiwweGZjLDB4YWQsMHg2YSwweGFlLDB4NjksMHhhZiwKKzB4NjgsMHgxMiwweDBlLDB4NzcsMHg4YywweDU1LDB4ZWMsMHg2MCwweDAyLDB4ODAsMHgxMiwweDA1LDB4NmEsMHhlNSwweDZhLDB4NzAsCisweDAyLDB4MDUsMHg2OSwweDA1LDB4NTcsMHhlNSwweDU3LDB4NzAsMHgwMiwweDA1LDB4NTYsMHg4MCwweGQyLDB4ZTUsMHg1NCwweDU0LAorMHgwZiwweDI0LDB4OWQsMHhmOCwweGM2LDB4NTQsMHhmZSwweGY2LDB4ZTUsMHg1NCwweDU0LDB4MGYsMHg3ZiwweDAwLDB4ZmUsMHg3YywKKzB4MTIsMHgxMiwweDMxLDB4ZmIsMHhlNSwweDU1LDB4MTQsMHg3MCwweDA5LDB4N2QsMHgwMCwweDdjLDB4MDksMHgxMiwweDI1LDB4MjYsCisweDgwLDB4MDcsMHhhZCwweDU3LDB4N2MsMHgwMCwweDEyLDB4MjUsMHgyNiwweDEyLDB4MzEsMHg2OSwweDIyLDB4MTIsMHgzMCwweGU2LAorMHg5MCwweGZmLDB4ZmMsMHhlMCwweDQ0LDB4MDIsMHhmMCwweDkwLDB4ZmYsMHgwMCwweGUwLDB4MzAsMHhlNywweDEzLDB4OTAsMHhmZiwKKzB4ODMsMHhlMCwweDQ0LDB4ODAsMHhmMCwweDQzLDB4NmQsMHg4MCwweDkwLDB4ZmYsMHhmYywweGUwLDB4NDQsMHgwMSwweGYwLDB4ODAsCisweDExLDB4OTAsMHhmZiwweDgyLDB4ZTAsMHg0NCwweDA4LDB4ZjAsMHg1MywweDZkLDB4N2YsMHg5MCwweGZmLDB4ZmMsMHhlMCwweDU0LAorMHhmZSwweGYwLDB4OTAsMHhmZiwweDgxLDB4ZTAsMHg0NCwweDgwLDB4ZjAsMHgxMiwweDI1LDB4ZDksMHg5MCwweGZmLDB4ZmUsMHhlMCwKKzB4NDQsMHgwNSwweGYwLDB4OTAsMHhmZiwweGZjLDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHgxMiwweDMxLDB4NjksMHgyMiwweDEyLDB4MzAsCisweGU2LDB4N2MsMHgwMSwweDEyLDB4MzIsMHhhOSwweDc4LDB4YWQsMHhlNiwweDQ0LDB4MDIsMHhmNiwweDc0LDB4ZmUsMHhmYywweDA0LAorMHhmZCwweDEyLDB4MWMsMHhhNywweDkwLDB4ZmYsMHg1YSwweGUwLDB4MzAsMHhlNywweDAyLDB4ODAsMHhmNywweGU0LDB4ZjUsMHg0ZSwKKzB4NzUsMHg0ZCwweDEwLDB4YWMsMHg0ZSwweGFkLDB4NGQsMHhlNSwweDRlLDB4MTUsMHg0ZSwweDcwLDB4MDIsMHgxNSwweDRkLDB4ZWMsCisweDRkLDB4NjAsMHgwMiwweDgwLDB4ZWUsMHg0MywweDg3LDB4MDEsMHgxMiwweDMxLDB4NjksMHgyMiwweDEyLDB4MzAsMHhlNiwweDdjLAorMHgwMiwweDEyLDB4MzEsMHg3NSwweDc4LDB4YWQsMHhlNiwweDU0LDB4ZmQsMHhmNiwweDEyLDB4MzEsMHg2OSwweDIyLDB4MTIsMHgzMCwKKzB4ZTYsMHg3OCwweGFkLDB4ZTYsMHgzMCwweGUwLDB4MmMsMHg3OCwweGFkLDB4ZTYsMHgzMCwweGUxLDB4MjYsMHg3OCwweGFkLDB4ZTYsCisweGZjLDB4ZjUsMHg4MywweDE4LDB4ZTYsMHg0NCwweGYwLDB4ZmQsMHgxMiwweDFjLDB4M2MsMHg5MCwweGZmLDB4ZmMsMHhlMCwweDQ0LAorMHgyMCwweGYwLDB4N2MsMHgwMiwweDEyLDB4MzIsMHhhOSwweDc4LDB4YWQsMHhlNiwweDU0LDB4ZmQsMHhmNiwweDc0LDB4MWEsMHg5MCwKKzB4ZmYsMHhmZSwweGYwLDB4NzgsMHhhZCwweGU2LDB4ZmMsMHhmNSwweDgzLDB4MTgsMHhlNiwweDQ0LDB4ZjEsMHhmZCwweDEyLDB4MWMsCisweDNjLDB4MTIsMHgzMSwweDY5LDB4MjIsMHg3NSwweDZkLDB4MDAsMHg5MCwweGZmLDB4ZmYsMHhlMCwweDYwLDB4MDMsMHg0MywweDZkLAorMHgwMSwweDc1LDB4NmUsMHgwMCwweGU0LDB4ZjUsMHg2YywweGY1LDB4NmIsMHhlNCwweGY1LDB4NmYsMHg3NSwweDcwLDB4NDksMHg3NCwKKzB4ODQsMHg5MCwweGZmLDB4ODIsMHhmMCwweDc0LDB4ODQsMHg5MCwweGZmLDB4ODAsMHhmMCwweDc0LDB4ODAsMHg5MCwweGZmLDB4NTgsCisweGYwLDB4NzQsMHg4MCwweDkwLDB4ZmYsMHg1YSwweGYwLDB4YWQsMHg0NiwweGFmLDB4NDUsMHg3ZSwweDAwLDB4ZWUsMHgyNCwweGZlLAorMHg1MCwweDAzLDB4MDIsMHgyMSwweDI0LDB4ZTQsMHhlZSwweDc1LDB4ZjAsMHgwNywweGE0LDB4MjQsMHg3ZiwweGY1LDB4ODIsMHhlNCwKKzB4MzQsMHhmOCwweGY1LDB4ODMsMHhlMCwweGZmLDB4ZTQsMHhlZiwweDU0LDB4ODAsMHhmZCwweGU0LDB4ZWYsMHg1NCwweDBmLDB4MTQsCisweGZmLDB4ZWQsMHg2MCwweDM4LDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0OCwweGY1LDB4ODIsMHhlNCwweDM0LAorMHhmZiwweGY1LDB4ODMsMHg3NCwweDkwLDB4ZjAsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDRhLDB4ZjUsMHg4MiwKKzB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweDc0LDB4ODAsMHhmMCwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NGUsCisweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4NzQsMHg4MCwweGYwLDB4ODAsMHgzNCwweGU0LDB4ZWYsMHg3NSwweGYwLAorMHgwOCwweGE0LDB4MjQsMHgwOCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4NzQsMHg5MCwweGYwLDB4ZTQsMHhlZiwKKzB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDBhLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4ZTQsCisweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDBlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlNCwweGYwLAorMHgwZSwweDAyLDB4MjAsMHg4ZCwweDhkLDB4NDYsMHg4ZSwweDQ0LDB4OGYsMHg0NSwweDc0LDB4N2YsMHg5MCwweGZmLDB4ZmQsMHhmMCwKKzB4NzQsMHg5MCwweDkwLDB4ZmYsMHhmYywweGYwLDB4MjIsMHg4YywweDU4LDB4ZWMsMHgyNCwweGY2LDB4NTAsMHgwNiwweGU1LDB4NTgsCisweDI0LDB4MzcsMHhmYywweDIyLDB4ZTUsMHg1OCwweDI0LDB4MzAsMHhmYywweDIyLDB4MTIsMHgyNSwweDIzLDB4ZWMsMHg3MCwweDAzLAorMHgwMiwweDIyLDB4NWUsMHg3NSwweDVjLDB4MDMsMHhhZSwweDViLDB4N2YsMHgwMCwweGU1LDB4NWMsMHgxNSwweDVjLDB4NjQsMHg4MCwKKzB4MjQsMHg3ZiwweDUwLDB4MzUsMHhlZiwweDI0LDB4MDAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZiLDB4ZjUsMHg4MywweGUwLDB4ZmUsCisweDI0LDB4ZmUsMHg1MCwweDFlLDB4ZWYsMHg3ZCwweDAwLDB4ZmMsMHhlNCwweGZiLDB4NzQsMHg3NCwweGMzLDB4OWMsMHhmYSwweGViLAorMHg5ZCwweGZiLDB4ZWUsMHg3ZCwweDAwLDB4ZmMsMHhlYSwweGMzLDB4OWMsMHhlZCwweDY0LDB4ODAsMHhjYiwweDY0LDB4ODAsMHg5YiwKKzB4NTAsMHgwMiwweDgwLDB4MDUsMHhlZiwweDJlLDB4ZmYsMHg4MCwweGMxLDB4OGUsMHg1YiwweDhmLDB4NWEsMHhlNSwweDVjLDB4NjQsCisweDgwLDB4MjQsMHg3ZiwweDUwLDB4MDMsMHgwMiwweDIyLDB4NWUsMHhlNSwweDVhLDB4MjQsMHg4ZSwweDUwLDB4MDMsMHgwMiwweDIyLAorMHg1ZSwweDg1LDB4NWEsMHg1ZCwweDc1LDB4NWIsMHgwMCwweGFlLDB4NWEsMHhhZiwweDViLDB4OTAsMHgzNSwweDljLDB4ZTQsMHg5MywKKzB4ZjUsMHg1YywweGU1LDB4NWMsMHgxNSwweDVjLDB4NjQsMHg4MCwweDI0LDB4N2YsMHg1MCwweDE4LDB4ZWUsMHgyNCwweDAwLDB4ZjUsCisweDgyLDB4ZTQsMHgzNCwweGZiLDB4ZjUsMHg4MywweGUwLDB4ZmMsMHhlZiwweDkwLDB4MzUsMHg5YywweDkzLDB4NmMsMHg3MCwweDA0LAorMHgwZSwweDBmLDB4ODAsMHhkZSwweDhlLDB4NWEsMHg4ZiwweDViLDB4ZTUsMHg1YywweDY0LDB4ODAsMHgyNCwweDdmLDB4NDAsMHg2ZSwKKzB4NzUsMHg1ZSwweDAxLDB4NzUsMHg2MCwweGU4LDB4NzUsMHg1ZiwweGZmLDB4ZTUsMHg1ZCwweDI0LDB4MDIsMHhmNSwweDVhLDB4NzUsCisweDVjLDB4MDcsMHhlNSwweDVjLDB4MzMsMHg0MCwweDU3LDB4YWQsMHg2MCwweGFlLDB4NWYsMHhhZiwweDVlLDB4ZTUsMHg1YywweGY1LAorMHg4MiwweDMzLDB4OTUsMHhlMCwweGY1LDB4ODMsMHgxMiwweDAxLDB4ZWMsMHhjNCwweDU0LDB4MGYsMHhmYywweDEyLDB4MjEsMHgzNywKKzB4ZTUsMHg1YSwweDI0LDB4MDAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZiLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHgwNSwweDVhLDB4MDUsCisweDVhLDB4YWQsMHg2MCwweGFlLDB4NWYsMHhhZiwweDVlLDB4ZTUsMHg1YywweGY1LDB4ODIsMHgzMywweDk1LDB4ZTAsMHhmNSwweDgzLAorMHgxMiwweDAxLDB4ZWMsMHg1NCwweDBmLDB4ZmMsMHgxMiwweDIxLDB4MzcsMHhlNSwweDVhLDB4MjQsMHgwMCwweGY1LDB4ODIsMHhlNCwKKzB4MzQsMHhmYiwweGY1LDB4ODMsMHhlYywweGYwLDB4MDUsMHg1YSwweDA1LDB4NWEsMHgxNSwweDVjLDB4ODAsMHhhNCwweDc0LDB4MDIsCisweDkwLDB4ZjgsMHg1MSwweGYwLDB4OTAsMHhmOCwweDZiLDB4NzksMHg3NSwweDdhLDB4MzUsMHg3YiwweDI3LDB4NzgsMHgwMSwweDEyLAorMHgwMywweGY1LDB4NzUsMHg2YSwweDM1LDB4NzUsMHg2OSwweGZjLDB4NzUsMHg2OCwweDAxLDB4ZTQsMHg5MCwweGZmLDB4ODMsMHhmMCwKKzB4NzQsMHg4MCwweDkwLDB4ZmYsMHg4MSwweGYwLDB4NzUsMHg1OSwweDAyLDB4ZTUsMHg1OSwweDc1LDB4ZjAsMHgwNywweGE0LDB4MjQsCisweDdmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmOCwweGY1LDB4ODMsMHhlMCwweDc4LDB4OGYsMHhmNiwweGZjLDB4NTQsMHgwZiwweDE0LAorMHhmYywweDc4LDB4OGYsMHhlYywweGY2LDB4ZTUsMHg1OSwweDc1LDB4ZjAsMHgwNywweGE0LDB4MjQsMHg4MSwweGY1LDB4ODIsMHhlNCwKKzB4MzQsMHhmOCwweGY1LDB4ODMsMHhlMCwweDc4LDB4OTIsMHg3NiwweGZkLDB4MDgsMHg3NiwweGU4LDB4ZmMsMHg3OCwweDhmLDB4ZTYsCisweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0OCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDc4LAorMHg4ZiwweGU2LDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDRmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlYywKKzB4ZjAsMHg3OCwweDkyLDB4ZTYsMHhmZiwweDA4LDB4ZTYsMHg3ZSwweDAzLDB4Y2YsMHhjMywweDEzLDB4Y2YsMHgxMywweGRlLDB4ZjksCisweGZlLDB4NzgsMHg4ZiwweGU2LDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDQ5LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LAorMHg4MywweGVlLDB4ZjAsMHg3OCwweDhmLDB4ZTYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NGEsMHhmNSwweDgyLDB4ZTQsMHgzNCwKKzB4ZmYsMHhmNSwweDgzLDB4NzQsMHg4MCwweGYwLDB4NzgsMHg5MCwweGVjLDB4ZjYsMHg3ZCwweDAwLDB4NzgsMHg5MywweGU2LDB4MmMsCisweGY2LDB4MTgsMHhlNiwweDNkLDB4ZjYsMHg3OCwweDkyLDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHg3YywweDAzLDB4Y2QsMHhjMywweDEzLAorMHhjZCwweDEzLDB4ZGMsMHhmOSwweGZjLDB4NzgsMHg4ZiwweGU2LDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDRkLDB4ZjUsMHg4MiwKKzB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHg3OCwweDhmLDB4ZTYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NGUsCisweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDc4LDB4OTIsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLAorMHg3OCwweDhmLDB4ZTYsMHhmZiwweDdlLDB4MDAsMHhlZSwweDI0LDB4ZmUsMHg1MCwweDAzLDB4MDIsMHgyNCwweGRkLDB4ZTQsMHhlZSwKKzB4NzUsMHhmMCwweDA3LDB4YTQsMHgyNCwweDdmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmOCwweGY1LDB4ODMsMHhlMCwweGZmLDB4ZTQsCisweGVmLDB4NTQsMHg4MCwweGZhLDB4ZTQsMHhlZiwweDU0LDB4MGYsMHgxNCwweGZmLDB4ZTQsMHhlZSwweDc1LDB4ZjAsMHgwNywweGE0LAorMHgyNCwweDgxLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmOCwweGY1LDB4ODMsMHhlMCwweDc4LDB4OTAsMHhmNiwweGU0LDB4ZWUsMHgxMywKKzB4MTMsMHg1NCwweDgwLDB4MjQsMHhmMCwweGY4LDB4ZTQsMHgzNCwweGZkLDB4ZjksMHhlOCwweGZjLDB4ZTksMHhmZCwweDhhLDB4NWEsCisweGVhLDB4NzAsMHgwMywweDAyLDB4MjQsMHg0YSwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NDgsMHhmNSwweDgyLAorMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDc4LDB4OTAsMHhlNiwweGZhLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwKKzB4YTQsMHgyNCwweDRmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlYSwweGYwLDB4ZWQsMHhmYiwweGVjLDB4N2EsCisweDAzLDB4Y2IsMHhjMywweDEzLDB4Y2IsMHgxMywweGRhLDB4ZjksMHhmYSwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LAorMHg0OSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZWEsMHhmMCwweDc4LDB4OTAsMHhlNiwweDdiLDB4MDAsMHhmYSwKKzB4ZWMsMHgyYSwweGZjLDB4ZWQsMHgzYiwweGZkLDB4ZmIsMHhlYywweDdhLDB4MDMsMHhjYiwweGMzLDB4MTMsMHhjYiwweDEzLDB4ZGEsCisweGY5LDB4ZmEsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDRkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LAorMHg4MywweGVhLDB4ZjAsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDRhLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwKKzB4ZjUsMHg4MywweDc0LDB4ODAsMHhmMCwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NGUsMHhmNSwweDgyLDB4ZTQsCisweDM0LDB4ZmYsMHhmNSwweDgzLDB4NzQsMHg4MCwweGYwLDB4MDIsMHgyNCwweGQ5LDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LAorMHgyNCwweDA4LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4NzgsMHg5MCwweGU2LDB4ZmEsMHhlNCwKKzB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4MGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGVhLDB4ZjAsCisweGVkLDB4ZmIsMHhlYywweDdhLDB4MDMsMHhjYiwweGMzLDB4MTMsMHhjYiwweDEzLDB4ZGEsMHhmOSwweGZhLDB4ZTQsMHhlZiwweDc1LAorMHhmMCwweDA4LDB4YTQsMHgyNCwweDA5LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlYSwweGYwLDB4NzgsMHg5MCwKKzB4ZTYsMHg3YiwweDAwLDB4ZmEsMHhlYywweDJhLDB4ZmMsMHhlZCwweDNiLDB4ZmQsMHhmYiwweGVjLDB4N2EsMHgwMywweGNiLDB4YzMsCisweDEzLDB4Y2IsMHgxMywweGRhLDB4ZjksMHhmYSwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4MGQsMHhmNSwweDgyLAorMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZWEsMHhmMCwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4MGEsMHhmNSwKKzB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZTQsMHhmMCwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4MGUsCisweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDBlLDB4MDIsMHgyMywweDY2LDB4OGUsMHg1OSwweDc4LAorMHg5MiwweGVkLDB4ZjYsMHgwOCwweGVjLDB4ZjYsMHg3OCwweDhmLDB4ZWYsMHhmNiwweDEyLDB4MjAsMHg1NSwweDIyLDB4OGMsMHgyNiwKKzB4ZWMsMHgzMCwweGU3LDB4MTgsMHhlNSwweDI2LDB4NTQsMHgwZiwweDE0LDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDQ4LDB4ZjUsCisweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGUwLDB4NTQsMHhkZiwweGYwLDB4ODAsMHgxNiwweGU1LDB4MjYsMHg1NCwweDBmLAorMHgxNCwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHgwOCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZTAsMHg1NCwKKzB4ZGYsMHhmMCwweDIyLDB4N2MsMHgwMCwweDIyLDB4ZWMsMHg5MCwweGZjLDB4MzcsMHhmMCwweDhjLDB4MjQsMHhlZCwweDI0LDB4MDMsCisweGY1LDB4MjUsMHg3ZCwweDAwLDB4ZDMsMHg5NSwweDcyLDB4ZWQsMHg5NSwweDcxLDB4NDAsMHgwMywweDg1LDB4NzIsMHgyNSwweGU1LAorMHgyNSwweDI0LDB4YjcsMHg1MCwweDA5LDB4NzUsMHgyNSwweDAzLDB4NzQsMHgwMiwweDkwLDB4ZmMsMHgzNywweGYwLDB4YWMsMHgyNSwKKzB4MTIsMHgzMCwweDI0LDB4MjIsMHhlNCwweGY1LDB4NmMsMHhmNSwweDZiLDB4MTIsMHgyNSwweDVkLDB4MjIsMHg5MCwweGZjLDB4MzUsCisweGUwLDB4NjUsMHg3MywweDYwLDB4MGUsMHg3NCwweDA0LDB4OTAsMHhmYywweDM3LDB4ZjAsMHhlNCwweGY1LDB4NmIsMHg3NSwweDZjLAorMHgwMywweDgwLDB4NDYsMHg3ZCwweDczLDB4ZTQsMHhmZSwweGZmLDB4NzksMHgzNSwweDdhLDB4ZmMsMHg3YiwweDAxLDB4NzQsMHgwNSwKKzB4NzgsMHgwMCwweDEyLDB4MDMsMHgzZiwweGU1LDB4NmMsMHgyNCwweDAzLDB4ZjUsMHg2YywweGU1LDB4NmIsMHgzNCwweDAwLDB4ZjUsCisweDZiLDB4ZTUsMHg2YywweGQzLDB4OTUsMHg3MiwweGU1LDB4NmIsMHg5NSwweDcxLDB4NDAsMHgwNiwweDg1LDB4NzIsMHg2YywweDg1LAorMHg3MSwweDZiLDB4ZDMsMHhlNSwweDZjLDB4OTQsMHg0OCwweGU1LDB4NmIsMHg5NCwweDAwLDB4NDAsMHgwYywweDc0LDB4MDIsMHg5MCwKKzB4ZmMsMHgzNywweGYwLDB4ZTQsMHhmNSwweDZiLDB4NzUsMHg2YywweDAzLDB4YWMsMHg2YywweDEyLDB4MzAsMHgyNCwweDIyLDB4ZWMsCisweDkwLDB4ZmMsMHgzNywweGYwLDB4ZTQsMHhmNSwweDZjLDB4ZjUsMHg2YiwweDhjLDB4MzIsMHhlYywweDYwLDB4MDUsMHgxMiwweDMwLAorMHgxNSwweDgwLDB4MDUsMHg3YywweDAwLDB4MTIsMHgzMCwweDI0LDB4MjIsMHg5MCwweGZmLDB4OTMsMHhlMCwweDQ0LDB4MDEsMHhmMCwKKzB4YjIsMHhiMywweDkwLDB4ZmYsMHgwNCwweGUwLDB4ZjUsMHg0YSwweDkwLDB4ZmYsMHgwNiwweGUwLDB4ZmQsMHhhMywweGUwLDB4ZWQsCisweDdkLDB4MDAsMHhmYywweDdkLDB4MDAsMHhmYywweDkwLDB4ZmYsMHgwNiwweGUwLDB4ZmYsMHhhMywweGUwLDB4N2UsMHgwMCwweGZmLAorMHhlNCwweGZlLDB4ZWMsMHg0ZSwweGZjLDB4ZWQsMHg0ZiwweGZkLDB4YzMsMHhlYywweDk0LDB4NDgsMHhlZCwweDk0LDB4MDAsMHg1MCwKKzB4MjIsMHg5MCwweGZmLDB4MDYsMHhlMCwweGZkLDB4YTMsMHhlMCwweGVkLDB4N2QsMHgwMCwweGZjLDB4N2QsMHgwMCwweGZjLDB4OTAsCisweGZmLDB4MDYsMHhlMCwweGZmLDB4YTMsMHhlMCwweDdlLDB4MDAsMHhmZiwweGU0LDB4ZmUsMHhlYywweDRlLDB4ZmMsMHhlZCwweDRmLAorMHhmZCwweDgwLDB4MDQsMHhlNCwweGZkLDB4N2MsMHg0OCwweDhjLDB4NzIsMHg4ZCwweDcxLDB4OTAsMHhmZiwweDAyLDB4ZTAsMHhmZCwKKzB4YTMsMHhlMCwweGVkLDB4N2QsMHgwMCwweGZjLDB4N2QsMHgwMCwweGZjLDB4OTAsMHhmZiwweDAyLDB4ZTAsMHhmZiwweGEzLDB4ZTAsCisweDdlLDB4MDAsMHhmZiwweGU0LDB4ZmUsMHhlYywweDRlLDB4ZjUsMHg0YywweGVkLDB4NGYsMHhmNSwweDRiLDB4NzUsMHg2YSwweDM1LAorMHg3NSwweDY5LDB4ZmMsMHg3NSwweDY4LDB4MDEsMHg3ZCwweDM1LDB4N2UsMHhmYywweDdmLDB4MDEsMHg3OSwweDczLDB4ZTQsMHhmYSwKKzB4ZmIsMHg3NCwweDA1LDB4NzgsMHgwMCwweDEyLDB4MDMsMHgzZiwweDc1LDB4NDksMHgwMCwweGU1LDB4NDksMHgyNCwweGZlLDB4NDAsCisweDE5LDB4YWQsMHg2YSwweGFlLDB4NjksMHhhZiwweDY4LDB4ZTQsMHgxMiwweDAzLDB4MGYsMHgwNSwweDQ5LDB4MGQsMHhlZCwweDcwLAorMHgwMSwweDBlLDB4OGQsMHg2YSwweDhlLDB4NjksMHg4ZiwweDY4LDB4ODAsMHhlMSwweDc1LDB4NmEsMHgzNSwweDc1LDB4NjksMHhmYywKKzB4NzUsMHg2OCwweDAxLDB4OTAsMHhmZiwweDAwLDB4ZTAsMHg1NCwweDYwLDB4YjQsMHgwMCwweDAyLDB4ODAsMHgwNiwweGQzLDB4NTAsCisweDAzLDB4MDIsMHgyYywweDZkLDB4ZTUsMHg0YSwweDU0LDB4MGYsMHhmNSwweDQ5LDB4ZTUsMHg0YSwweDU0LDB4ODAsMHhhMiwweGUwLAorMHg5MiwweDAyLDB4OTAsMHhmZiwweDAxLDB4ZTAsMHgxMiwweDAxLDB4ODEsMHgwMCwweDBiLDB4MmMsMHg2OCwweDI2LDB4ZTUsMHgyOCwKKzB4MDMsMHgyYywweDY4LDB4MjksMHgwZiwweDJjLDB4NjgsMHgyOSwweGYyLDB4MmEsMHgyNiwweDJiLDB4OGQsMHgyYiwweDkwLDB4MmIsCisweGQwLDB4MmMsMHgxMSwweDJjLDB4M2YsMHhlNSwweDZkLDB4MzAsMHhlNywweDBlLDB4ZTUsMHg0YywweDQ1LDB4NGIsMHg3MCwweDA4LAorMHhlNSwweDcyLDB4NjQsMHgwMiwweDQ1LDB4NzEsMHg2MCwweDAzLDB4MDIsMHgyYywweDZhLDB4OTAsMHhmZiwweDAwLDB4ZTAsMHg1NCwKKzB4MWYsMHhiNCwweDAwLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDI5LDB4ZTUsMHg0YSwweDYwLDB4MDMsMHgwMiwweDI4LDB4MDAsCisweGFkLDB4NmEsMHhhZSwweDY5LDB4YWYsMHg2OCwweDc0LDB4MDEsMHgxMiwweDAzLDB4MGYsMHg3OCwweGFkLDB4ZTYsMHgzMCwweGUwLAorMHgwYiwweGFkLDB4NmEsMHhhZSwweDY5LDB4YWYsMHg2OCwweDc0LDB4MDIsMHgxMiwweDAzLDB4MGYsMHg3YywweDAyLDB4MTIsMHgzMCwKKzB4MjQsMHgyMiwweGI0LDB4MDEsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MWIsMHhlNSwweDZkLDB4MjAsMHhlMSwweDA3LDB4ZTUsCisweDRhLDB4NjAsMHgwMywweDAyLDB4MjgsMHgwMCwweGU1LDB4NGEsMHgyNCwweGZlLDB4NTAsMHgwMywweDAyLDB4MjgsMHgwMCwweDdjLAorMHgwMiwweDEyLDB4MzAsMHgyNCwweDIyLDB4YjQsMHgwMiwweDAyLDB4ODAsMHgwNiwweGQzLDB4NTAsMHgwMywweDAyLDB4MjcsMHhmZSwKKzB4ZTUsMHg2ZCwweDIwLDB4ZTEsMHgwZCwweGU1LDB4NGEsMHg2MCwweDA5LDB4ZTUsMHg0YSwweDY0LDB4ODAsMHg2MCwweDAzLDB4MDIsCisweDI4LDB4MDAsMHhhYywweDRhLDB4MTIsMHgzMCwweGFiLDB4NDAsMHgwMywweDAyLDB4MjgsMHgwMCwweGU1LDB4NDksMHg3MCwweDI1LAorMHgzMCwweDAyLDB4MTEsMHg5MCwweGZmLDB4ODAsMHhlMCwweDU0LDB4MDgsMHhhZCwweDZhLDB4YWUsMHg2OSwweGFmLDB4NjgsMHgxMiwKKzB4MDMsMHgwZiwweDgwLDB4MGYsMHg5MCwweGZmLDB4ODIsMHhlMCwweDU0LDB4MDgsMHhhZCwweDZhLDB4YWUsMHg2OSwweGFmLDB4NjgsCisweDEyLDB4MDMsMHgwZiwweDgwLDB4M2QsMHgxNSwweDQ5LDB4MzAsMHgwMiwweDFkLDB4ZTUsMHg0OSwweDc1LDB4ZjAsMHgwOCwweGE0LAorMHgyNCwweDQ4LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlMCwweDU0LDB4MDgsMHhhZCwweDZhLDB4YWUsMHg2OSwKKzB4YWYsMHg2OCwweDEyLDB4MDMsMHgwZiwweDgwLDB4MWIsMHhlNSwweDQ5LDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDA4LDB4ZjUsCisweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGUwLDB4NTQsMHgwOCwweGFkLDB4NmEsMHhhZSwweDY5LDB4YWYsMHg2OCwweDEyLAorMHgwMywweDBmLDB4YWQsMHg2YSwweGFlLDB4NjksMHhhZiwweDY4LDB4MTIsMHgwMSwweGU2LDB4NjAsMHgwYiwweGFkLDB4NmEsMHhhZSwKKzB4NjksMHhhZiwweDY4LDB4NzQsMHgwMSwweDEyLDB4MDMsMHgwZiwweDdjLDB4MDIsMHgxMiwweDMwLDB4MjQsMHgyMiwweDgwLDB4MDAsCisweDAyLDB4MmMsMHg2YSwweGU1LDB4NmQsMHgyMCwweGU3LDB4MDYsMHhlNSwweDcyLDB4NDUsMHg3MSwweDYwLDB4MDMsMHgwMiwweDJjLAorMHg2YSwweDkwLDB4ZmYsMHgwMCwweGUwLDB4NTQsMHgxZiwweGI0LDB4MDAsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MWEsMHhlNSwKKzB4NGMsMHgxNCwweDQ1LDB4NGIsMHg3MCwweDA0LDB4ZTUsMHg0YSwweDYwLDB4MDMsMHgwMiwweDI5LDB4MGMsMHg3OCwweGFkLDB4ZTYsCisweDU0LDB4ZmUsMHhmNiwweDdjLDB4MDAsMHgxMiwweDMwLDB4MjQsMHgyMiwweGI0LDB4MDEsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLAorMHgyYSwweGU1LDB4NmQsMHgyMCwweGUxLDB4MDgsMHhlNSwweDZkLDB4MjAsMHhlMCwweDAzLDB4MDIsMHgyOSwweDBjLDB4ZTUsMHg2ZCwKKzB4MzAsMHhlMCwweDA0LDB4ZTUsMHg0YSwweDcwLDB4MGIsMHhlNSwweDZkLDB4MzAsMHhlMSwweDA5LDB4ZTUsMHg0YSwweDI0LDB4ZmUsCisweDUwLDB4MDMsMHgwMiwweDI5LDB4MGMsMHg3YywweDAwLDB4MTIsMHgzMCwweDI0LDB4MjIsMHhiNCwweDAyLDB4MDIsMHg4MCwweDA2LAorMHhkMywweDUwLDB4MDMsMHgwMiwweDI5LDB4MGEsMHhlNSwweDRjLDB4NDUsMHg0YiwweDYwLDB4MDMsMHgwMiwweDI5LDB4MGMsMHhhYywKKzB4NGEsMHgxMiwweDMwLDB4YWIsMHg0MCwweDAzLDB4MDIsMHgyOSwweDBjLDB4ZTUsMHg2ZCwweDIwLDB4ZTEsMHgwNywweGU1LDB4NmQsCisweDIwLDB4ZTAsMHgwMiwweDgwLDB4NzcsMHhlNSwweDZkLDB4MzAsMHhlMCwweDA2LDB4ZTUsMHg0OSwweDYwLDB4MDIsMHg4MCwweDZjLAorMHhlNSwweDQ5LDB4NzAsMHgwZiwweDkwLDB4ZmYsMHg4MiwweGUwLDB4NTQsMHhmNywweGYwLDB4OTAsMHhmZiwweDgwLDB4ZTAsMHg1NCwKKzB4ZjcsMHhmMCwweDIyLDB4ZTUsMHg0OSwweGI0LDB4MDEsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MDksMHg3ZCwweDAxLDB4N2MsCisweDAzLDB4MTIsMHgwZiwweDA5LDB4ODAsMHgxMSwweGI0LDB4MDIsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MDksMHg3ZCwweDAxLAorMHg3YywweDA0LDB4MTIsMHgwZiwweDA5LDB4ODAsMHgwMCwweDE1LDB4NDksMHgzMCwweDAyLDB4MTUsMHhlNSwweDQ5LDB4NzUsMHhmMCwKKzB4MDgsMHhhNCwweDI0LDB4NDgsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGUwLDB4NTQsMHhmNywweGYwLDB4ODAsCisweDEzLDB4ZTUsMHg0OSwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHgwOCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLAorMHhlMCwweDU0LDB4ZjcsMHhmMCwweDdjLDB4MDAsMHgxMiwweDMwLDB4MjQsMHgyMiwweDgwLDB4MDAsMHgwMiwweDJjLDB4NmEsMHhlNSwKKzB4NmQsMHgyMCwweGU3LDB4MDYsMHhlNSwweDcyLDB4NDUsMHg3MSwweDYwLDB4MDMsMHgwMiwweDJjLDB4NmEsMHg5MCwweGZmLDB4MDAsCisweGUwLDB4NTQsMHgxZiwweGI0LDB4MDAsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MWEsMHhlNSwweDRjLDB4MTQsMHg0NSwweDRiLAorMHg3MCwweDA0LDB4ZTUsMHg0YSwweDYwLDB4MDMsMHgwMiwweDI5LDB4ZWYsMHg3OCwweGFkLDB4ZTYsMHg0NCwweDAxLDB4ZjYsMHg3YywKKzB4MDAsMHgxMiwweDMwLDB4MjQsMHgyMiwweGI0LDB4MDEsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MjksMHhlNSwweDZkLDB4MjAsCisweGUxLDB4MDgsMHhlNSwweDZkLDB4MjAsMHhlMCwweDAzLDB4MDIsMHgyOSwweGVmLDB4ZTUsMHg2ZCwweDMwLDB4ZTAsMHgwNCwweGU1LAorMHg0OSwweDcwLDB4MGIsMHhlNSwweDZkLDB4MzAsMHhlMSwweDA4LDB4ZTUsMHg0OSwweDI0LDB4ZmUsMHg1MCwweDAyLDB4ODAsMHg3ZiwKKzB4N2MsMHgwMCwweDEyLDB4MzAsMHgyNCwweDIyLDB4YjQsMHgwMiwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHg2ZiwweGU1LDB4NGMsCisweDQ1LDB4NGIsMHg2MCwweDAyLDB4ODAsMHg2OSwweGFjLDB4NGEsMHgxMiwweDMwLDB4YWIsMHg0MCwweDAyLDB4ODAsMHg2MCwweGU1LAorMHg2ZCwweDIwLDB4ZTEsMHgwNywweGU1LDB4NmQsMHgyMCwweGUwLDB4MDIsMHg4MCwweDU0LDB4ZTUsMHg0OSwweDcwLDB4MTQsMHgzMCwKKzB4MDIsMHgwOSwweDkwLDB4ZmYsMHg4MCwweGUwLDB4NDQsMHgwOCwweGYwLDB4ODAsMHgwNywweDkwLDB4ZmYsMHg4MiwweGUwLDB4NDQsCisweDA4LDB4ZjAsMHgyMiwweGU1LDB4NmQsMHgzMCwweGUxLDB4MzMsMHgxNSwweDQ5LDB4MzAsMHgwMiwweDE1LDB4ZTUsMHg0OSwweDc1LAorMHhmMCwweDA4LDB4YTQsMHgyNCwweDQ4LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlMCwweDQ0LDB4MDgsMHhmMCwKKzB4ODAsMHgxMywweGU1LDB4NDksMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4MDgsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsCisweDgzLDB4ZTAsMHg0NCwweDA4LDB4ZjAsMHg3YywweDAwLDB4MTIsMHgzMCwweDI0LDB4MjIsMHg4MCwweDAyLDB4ODAsMHgwMCwweDAyLAorMHgyYywweDZhLDB4ZTUsMHg2ZCwweDIwLDB4ZTcsMHgxMiwweGU1LDB4NzIsMHg0NSwweDcxLDB4NzAsMHgwYywweGU1LDB4NGEsMHg3MCwKKzB4MDgsMHg5MCwweGZmLDB4MDAsMHhlMCwweDU0LDB4MWYsMHg2MCwweDAzLDB4MDIsMHgyYywweDZhLDB4ZTUsMHg0YywweDkwLDB4ZmYsCisweGZmLDB4ZjAsMHg5MCwweGZmLDB4ZmYsMHhlMCwweDYwLDB4MDUsMHg0MywweDZkLDB4MDEsMHg4MCwweDAzLDB4NTMsMHg2ZCwweGZlLAorMHg3YywweDAwLDB4MTIsMHgzMCwweDI0LDB4MjIsMHhlNSwweDZkLDB4MzAsMHhlNywweDBlLDB4ZTUsMHg3MiwweDQ1LDB4NzEsMHg2MCwKKzB4MDgsMHg5MCwweGZmLDB4MDAsMHhlMCwweDU0LDB4MWYsMHg2MCwweDAzLDB4MDIsMHgyYywweDZhLDB4YWQsMHg0YiwweGU1LDB4NGMsCisweGVkLDB4N2QsMHgwMCwweGZjLDB4N2QsMHgwMCwweGZjLDB4YmQsMHgwMCwweDAyLDB4ODAsMHgwMywweDAyLDB4MmIsMHg4OCwweGI0LAorMHgwMSwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgzMiwweGU1LDB4NGEsMHg3MCwweDA1LDB4ZTUsMHg0YywweGZjLDB4NjAsMHgwMywKKzB4MDIsMHgyYiwweDhhLDB4NzUsMHg2YSwweDQwLDB4NzUsMHg2OSwweGY4LDB4NzUsMHg2OCwweDAxLDB4ZDMsMHhlNSwweDcyLDB4OTQsCisweDEyLDB4ZTUsMHg3MSwweDk0LDB4MDAsMHg0MCwweDA2LDB4ZTQsMHhmZCwweDdjLDB4MTIsMHg4MCwweDA0LDB4YWMsMHg3MiwweGFkLAorMHg3MSwweDhjLDB4NzAsMHg4ZCwweDZmLDB4MTIsMHgzMCwweDM5LDB4MjIsMHhiNCwweDAyLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwKKzB4NTksMHhlNSwweDRhLDB4NjAsMHgwMywweDAyLDB4MmIsMHg4YSwweGU1LDB4NGMsMHhmYywweDcwLDB4MjcsMHg3NSwweDZhLDB4NTIsCisweDc1LDB4NjksMHhmOCwweDc1LDB4NjgsMHgwMSwweGQzLDB4ZTUsMHg3MiwweDk0LDB4MTksMHhlNSwweDcxLDB4OTQsMHgwMCwweDQwLAorMHgwNiwweGU0LDB4ZmQsMHg3YywweDE5LDB4ODAsMHgwNCwweGFjLDB4NzIsMHhhZCwweDcxLDB4OGMsMHg3MCwweDhkLDB4NmYsMHgxMiwKKzB4MzAsMHgzOSwweDgwLDB4MjUsMHg3NSwweDZhLDB4NmIsMHg3NSwweDY5LDB4ZjgsMHg3NSwweDY4LDB4MDEsMHhkMywweGU1LDB4NzIsCisweDk0LDB4MjcsMHhlNSwweDcxLDB4OTQsMHgwMCwweDQwLDB4MDYsMHhlNCwweGZkLDB4N2MsMHgyNywweDgwLDB4MDQsMHhhYywweDcyLAorMHhhZCwweDcxLDB4OGMsMHg3MCwweDhkLDB4NmYsMHgxMiwweDMwLDB4MzksMHgyMiwweGI0LDB4MDMsMHgwMiwweDgwLDB4MDYsMHhkMywKKzB4NTAsMHgwMywweDAyLDB4MmIsMHg4OCwweGU1LDB4NGMsMHhmNSwweDQ5LDB4NzAsMHgwZiwweDkwLDB4ZmYsMHgwNCwweGUwLDB4ZmQsCisweGEzLDB4ZTAsMHg0ZCwweDYwLDB4MDMsMHgwMiwweDJiLDB4OGEsMHg4MCwweDE4LDB4OTAsMHhmYiwweDAyLDB4ZTAsMHhmZCwweGEzLAorMHhlMCwweGZjLDB4OTAsMHhmZiwweDA1LDB4ZTAsMHg2YywweDcwLDB4MDcsMHg5MCwweGZmLDB4MDQsMHhlMCwweDZkLDB4NjAsMHgwMiwKKzB4ODAsMHg2OCwweGU0LDB4ZjUsMHg3MCwweGY1LDB4NmYsMHg3ZiwweDAwLDB4ZTUsMHg0OSwweDE0LDB4YzUsMHg0OSwweDYwLDB4MGYsCisweGVmLDB4MjQsMHgwMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmIsMHhmNSwweDgzLDB4ZTAsMHgyZiwweGZmLDB4ODAsMHhlYSwweDhmLAorMHg0YSwweGU1LDB4NGEsMHgyNCwweDAwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYiwweGY1LDB4ODMsMHhlMCwweDdkLDB4MDAsMHhkMywKKzB4OTUsMHg3MiwweGVkLDB4OTUsMHg3MSwweDQwLDB4MDYsMHhhYywweDcyLDB4YWQsMHg3MSwweDgwLDB4MGYsMHhlNSwweDRhLDB4MjQsCisweDAwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYiwweGY1LDB4ODMsMHhlMCwweDdkLDB4MDAsMHhmYywweDhjLDB4NzAsMHg4ZCwweDZmLAorMHhlNSwweDRhLDB4MjQsMHgwMCwweGZjLDB4ZTQsMHgzNCwweGZiLDB4ZmQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4OGQsMHg2YSwKKzB4OGUsMHg2OSwweDhmLDB4NjgsMHgxMiwweDMwLDB4MzksMHgyMiwweDgwLDB4MDAsMHgwMiwweDJjLDB4NmEsMHgwMiwweDJjLDB4NmEsCisweGU1LDB4NmQsMHgzMCwweGU3LDB4MTksMHhlNSwweDcyLDB4MTQsMHg0NSwweDcxLDB4NzAsMHgxMiwweGU1LDB4NGEsMHg3MCwweDBlLAorMHhlNSwweDRjLDB4NDUsMHg0YiwweDcwLDB4MDgsMHg5MCwweGZmLDB4MDAsMHhlMCwweDU0LDB4MWYsMHg2MCwweDAzLDB4MDIsMHgyYywKKzB4NmEsMHhlNSwweDZkLDB4MjAsMHhlMCwweDA4LDB4ZTUsMHg2ZCwweDIwLDB4ZTEsMHgwMywweDAyLDB4MmMsMHg2YSwweDc1LDB4NmEsCisweDZlLDB4ZTQsMHhmNSwweDY5LDB4ZjUsMHg2OCwweGU0LDB4ZjUsMHg2ZiwweDA0LDB4ZjUsMHg3MCwweDEyLDB4MzAsMHgzOSwweDIyLAorMHhlNSwweDZkLDB4MjAsMHhlNywweDEyLDB4ZTUsMHg3MiwweDQ1LDB4NzEsMHg3MCwweDBjLDB4ZTUsMHg0YSwweDcwLDB4MDgsMHg5MCwKKzB4ZmYsMHgwMCwweGUwLDB4NTQsMHgxZiwweDYwLDB4MDMsMHgwMiwweDJjLDB4NmEsMHhlNSwweDZkLDB4MjAsMHhlMCwweDA3LDB4ZTUsCisweDZkLDB4MjAsMHhlMSwweDAyLDB4ODAsMHg3NCwweDg1LDB4NGMsMHg2ZSwweGU1LDB4NmUsMHg3MCwweDA4LDB4NDMsMHg2ZCwweDAxLAorMHg1MywweDZkLDB4ZmQsMHg4MCwweDA2LDB4NTMsMHg2ZCwweGZlLDB4NDMsMHg2ZCwweDAyLDB4N2MsMHgwMCwweDEyLDB4MzAsMHgyNCwKKzB4MjIsMHhlNSwweDZkLDB4MzAsMHhlNywweDFhLDB4ZTUsMHg3MiwweDE0LDB4NDUsMHg3MSwweDcwLDB4MTMsMHhlNSwweDRhLDB4NzAsCisweDBmLDB4ZTUsMHg0YywweDQ1LDB4NGIsMHg3MCwweDA5LDB4OTAsMHhmZiwweDAwLDB4ZTAsMHg1NCwweDFmLDB4MTQsMHg2MCwweDAyLAorMHg4MCwweDM4LDB4ZTUsMHg2ZCwweDIwLDB4ZTEsMHgwMiwweDgwLDB4MzEsMHg3YywweDAxLDB4MTIsMHgzMCwweDI0LDB4MjIsMHhlNSwKKzB4NmQsMHgyMCwweGU3LDB4MTUsMHhlNSwweDcyLDB4NDUsMHg3MSwweDcwLDB4MGYsMHhlNSwweDRjLDB4NDUsMHg0YiwweDcwLDB4MDksCisweDkwLDB4ZmYsMHgwMCwweGUwLDB4NTQsMHgxZiwweDE0LDB4NjAsMHgwMiwweDgwLDB4MGYsMHhlNSwweDZkLDB4MjAsMHhlMSwweDAyLAorMHg4MCwweDA4LDB4N2MsMHgwMCwweDEyLDB4MzAsMHgyNCwweDIyLDB4ODAsMHgwMCwweDAyLDB4MmYsMHgyYiwweGI0LDB4NDAsMHgwMiwKKzB4ODAsMHgwNiwweGQzLDB4NTAsMHgwMywweDAyLDB4MmYsMHgyMSwweDkwLDB4ZmYsMHgwMSwweGUwLDB4OTAsMHhmYywweDM1LDB4ZjAsCisweGU1LDB4NGEsMHg5MCwweGZjLDB4MzYsMHhmMCwweGU0LDB4OTAsMHhmYywweDM3LDB4ZjAsMHhlNSwweDZhLDB4MjQsMHgwMywweGY1LAorMHg2YSwweGU1LDB4NjksMHgzNCwweDAwLDB4ZjUsMHg2OSwweGFkLDB4NGIsMHhlNSwweDRjLDB4ODUsMHg2YSwweDgyLDB4ODUsMHg2OSwKKzB4ODMsMHhjZCwweGYwLDB4YTMsMHhjZCwweGYwLDB4OTAsMHhmZiwweDAxLDB4ZTAsMHgxMiwweDAxLDB4YjcsMHgyYywweGQ4LDB4MDEsCisweDJjLDB4ZmUsMHgwMiwweDJkLDB4MjgsMHgwMywweDJkLDB4NTIsMHgwNCwweDJkLDB4YTAsMHgwNSwweDJkLDB4ZGQsMHgwNiwweDJlLAorMHgwMywweDA3LDB4MmUsMHgyOSwweDA4LDB4MmUsMHg1NSwweDA5LDB4MmUsMHg3YiwweDBiLDB4MmUsMHhhMSwweDBjLDB4MmUsMHhiMCwKKzB4ODAsMHgyZSwweGIwLDB4ODEsMHgwMCwweDAwLDB4MmYsMHgwZSwweGU1LDB4NmQsMHgyMCwweGU3LDB4MDYsMHg3YywweDA1LDB4MTIsCisweDI1LDB4YmYsMHgyMiwweDdkLDB4MjQsMHg3ZSwweDM1LDB4N2YsMHgwMiwweDc5LDB4MzgsMHg3YSwweGZjLDB4N2IsMHgwMSwweDc0LAorMHgwOCwweDc4LDB4MDAsMHgxMiwweDAzLDB4M2YsMHg3ZCwweDA4LDB4N2MsMHgwMCwweDEyLDB4MjUsMHgyNiwweDIyLDB4ZTUsMHg2ZCwKKzB4MjAsMHhlNywweDA2LDB4N2MsMHgwNSwweDEyLDB4MjUsMHhiZiwweDIyLDB4ZTUsMHg0YSwweGI0LDB4MDMsMHgwMCwweDQwLDB4MTAsCisweGI0LDB4MDUsMHgwMCwweDUwLDB4MGIsMHhlNSwweDRhLDB4N2YsMHgwMCwweGZlLDB4N2MsMHgxMCwweDEyLDB4MzEsMHhmYiwweDIyLAorMHg3ZCwweDAwLDB4N2MsMHgwNywweDEyLDB4MjUsMHgyNiwweDIyLDB4ZTUsMHg2ZCwweDIwLDB4ZTcsMHgwNiwweDdjLDB4MDUsMHgxMiwKKzB4MjUsMHhiZiwweDIyLDB4ZTUsMHg0YSwweGI0LDB4MDMsMHgwMCwweDQwLDB4MTAsMHhiNCwweDA1LDB4MDAsMHg1MCwweDBiLDB4ZTUsCisweDRhLDB4N2YsMHgwMCwweGZlLDB4N2MsMHgxMSwweDEyLDB4MzEsMHhmYiwweDIyLDB4N2QsMHgwMCwweDdjLDB4MDcsMHgxMiwweDI1LAorMHgyNiwweDIyLDB4ZTUsMHg2ZCwweDIwLDB4ZTcsMHgwNiwweDdjLDB4MDUsMHgxMiwweDI1LDB4YmYsMHgyMiwweGU1LDB4NGEsMHhiNCwKKzB4MDUsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MGEsMHhlNCwweGZmLDB4MDQsMHhmZSwweDdjLDB4MGEsMHgxMiwweDMxLDB4ZmIsCisweDIyLDB4YjQsMHgwMSwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgwYSwweGU0LDB4ZmYsMHgwNCwweGZlLDB4N2MsMHgwOCwweDEyLAorMHgzMSwweGZiLDB4MjIsMHhiNCwweDAzLDB4MDAsMHg0MCwweDEwLDB4YjQsMHgwNSwweDAwLDB4NTAsMHgwYiwweGU1LDB4NGEsMHg3ZiwKKzB4MDAsMHhmZSwweDdjLDB4MTMsMHgxMiwweDMxLDB4ZmIsMHgyMiwweDdkLDB4MDAsMHg3YywweDA3LDB4MTIsMHgyNSwweDI2LDB4MjIsCisweGU1LDB4NmQsMHgyMCwweGU3LDB4MzQsMHhkMywweGU1LDB4NzIsMHg5NCwweDQ4LDB4ZTUsMHg3MSwweDk0LDB4MDAsMHg1MCwweDA2LAorMHhlNSwweDcyLDB4NDUsMHg3MSwweDcwLDB4MDYsMHg3YywweDAyLDB4MTIsMHgyNSwweGJmLDB4MjIsMHhlNSwweDRhLDB4YjQsMHgwMSwKKzB4MDMsMHhiMywweDQwLDB4MGIsMHhjMywweGI0LDB4MDMsMHgwMCwweDQwLDB4MDksMHhiNCwweDA2LDB4MDAsMHg1MCwweDA0LDB4MTIsCisweDMwLDB4ZDEsMHgyMiwweDdjLDB4MDcsMHgxMiwweDI1LDB4YmYsMHgyMiwweDEyLDB4MjUsMHg1ZCwweDIyLDB4ZTUsMHg2ZCwweDIwLAorMHhlNywweDFkLDB4ZTUsMHg0YSwweGI0LDB4MDMsMHgwMCwweDQwLDB4MTAsMHhiNCwweDA1LDB4MDAsMHg1MCwweDBiLDB4ZTUsMHg0YSwKKzB4N2YsMHgwMCwweGZlLDB4N2MsMHgxNiwweDEyLDB4MzEsMHhmYiwweDIyLDB4N2MsMHgwNywweDEyLDB4MjUsMHhiZiwweDIyLDB4MTIsCisweDI1LDB4NWQsMHgyMiwweGU1LDB4NmQsMHgyMCwweGU3LDB4MWQsMHhlNSwweDRhLDB4YjQsMHgwMywweDAwLDB4NDAsMHgxMCwweGI0LAorMHgwNSwweDAwLDB4NTAsMHgwYiwweGU1LDB4NGEsMHg3ZiwweDAwLDB4ZmUsMHg3YywweDE5LDB4MTIsMHgzMSwweGZiLDB4MjIsMHg3YywKKzB4MDcsMHgxMiwweDI1LDB4YmYsMHgyMiwweDEyLDB4MjUsMHg1ZCwweDIyLDB4ZTUsMHg2ZCwweDIwLDB4ZTcsMHgyMywweDc0LDB4ODEsCisweDkwLDB4ZmYsMHg5MywweGYwLDB4ZTUsMHg0YSwweGI0LDB4MDMsMHgwMCwweDQwLDB4MTAsMHhiNCwweDA1LDB4MDAsMHg1MCwweDBiLAorMHhlNSwweDRhLDB4N2YsMHgwMCwweGZlLDB4N2MsMHgxNywweDEyLDB4MzEsMHhmYiwweDIyLDB4N2MsMHgwNywweDEyLDB4MjUsMHhiZiwKKzB4MjIsMHgxMiwweDI1LDB4NWQsMHgyMiwweGU1LDB4NmQsMHgyMCwweGU3LDB4MWQsMHhlNSwweDRhLDB4YjQsMHgwMywweDAwLDB4NDAsCisweDEwLDB4YjQsMHgwNSwweDAwLDB4NTAsMHgwYiwweGU1LDB4NGEsMHg3ZiwweDAwLDB4ZmUsMHg3YywweDE4LDB4MTIsMHgzMSwweGZiLAorMHgyMiwweDdjLDB4MDcsMHgxMiwweDI1LDB4YmYsMHgyMiwweDEyLDB4MjUsMHg1ZCwweDIyLDB4ZTUsMHg2ZCwweDIwLDB4ZTcsMHgxZCwKKzB4ZTUsMHg0YSwweGI0LDB4MDMsMHgwMCwweDQwLDB4MTAsMHhiNCwweDA1LDB4MDAsMHg1MCwweDBiLDB4ZTUsMHg0YSwweDdmLDB4MDAsCisweGZlLDB4N2MsMHgxNSwweDEyLDB4MzEsMHhmYiwweDIyLDB4N2MsMHgwNywweDEyLDB4MjUsMHhiZiwweDIyLDB4MTIsMHgyNSwweDVkLAorMHgyMiwweGU1LDB4NmQsMHgyMCwweGU3LDB4MDYsMHg3YywweDA3LDB4MTIsMHgyNSwweGJmLDB4MjIsMHgxMiwweDI1LDB4NWQsMHgyMiwKKzB4ZTUsMHg2ZCwweDMwLDB4ZTcsMHgyMCwweDkwLDB4ZmYsMHgwMCwweGUwLDB4NTQsMHgxZiwweDcwLDB4MTAsMHg5MCwweGZmLDB4MDEsCisweGUwLDB4YjQsMHg4MCwweDA1LDB4MTIsMHgyNSwweDU0LDB4ODAsMHgwMywweDEyLDB4MjUsMHg1ZCwweDIyLDB4N2QsMHgwMCwweDdjLAorMHgwNSwweDEyLDB4MjUsMHgyNiwweDIyLDB4OTAsMHhmZiwweDAwLDB4ZTAsMHg1NCwweDFmLDB4NjAsMHgwNiwweDdjLDB4MDUsMHgxMiwKKzB4MjUsMHhiZiwweDIyLDB4ZDMsMHhlNSwweDcyLDB4OTQsMHg0OCwweGU1LDB4NzEsMHg5NCwweDAwLDB4NTAsMHgwYiwweGMzLDB4ZTUsCisweDcyLDB4OTQsMHgwNywweGU1LDB4NzEsMHg5NCwweDAwLDB4NTAsMHgwNiwweDdjLDB4MDMsMHgxMiwweDI1LDB4YmYsMHgyMiwweGU1LAorMHg0YSwweGI0LDB4MDUsMHgwNCwweDEyLDB4MzAsMHhkMSwweDIyLDB4N2MsMHgwNywweDEyLDB4MjUsMHhiZiwweDIyLDB4ZTUsMHg2ZCwKKzB4MzAsMHhlNywweDA4LDB4N2QsMHgwMCwweDdjLDB4MDUsMHgxMiwweDI1LDB4MjYsMHgyMiwweDdjLDB4MDUsMHgxMiwweDI1LDB4YmYsCisweDIyLDB4YjQsMHgyMCwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgwMCwweDgwLDB4MDAsMHgxMiwweDJmLDB4ZmYsMHgyMiwweDc1LAorMHg0MywweDAwLDB4OTAsMHhmZiwweDgzLDB4ZTAsMHg1NCwweDBmLDB4ZDMsMHg5NSwweDQzLDB4NDAsMHgyNCwweGU1LDB4NDMsMHgyNCwKKzB4ZjAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZlLDB4ZjUsMHg4MywweGUwLDB4YWQsMHg2YSwweGFlLDB4NjksMHhhZiwweDY4LDB4MTIsCisweDAzLDB4MGYsMHgwNSwweDQzLDB4MGQsMHhlZCwweDcwLDB4MDEsMHgwZSwweDhkLDB4NmEsMHg4ZSwweDY5LDB4OGYsMHg2OCwweDgwLAorMHhkMSwweGU1LDB4NDMsMHg3ZCwweDAwLDB4ZmMsMHhjMywweGU1LDB4NzAsMHg5YywweGY1LDB4NzAsMHhlNSwweDZmLDB4OWQsMHhmNSwKKzB4NmYsMHhlNSwweDcwLDB4NDUsMHg2ZiwweDYwLDB4MDYsMHhlNCwweDkwLDB4ZmYsMHg4MywweGYwLDB4MjIsMHg5MCwweGZmLDB4ODIsCisweGUwLDB4NDQsMHgwOCwweGYwLDB4ZTQsMHhmNSwweDZmLDB4NzUsMHg3MCwweDQ5LDB4OTAsMHhmYywweDM1LDB4ZTAsMHhiNCwweDA1LAorMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4NDAsMHg5MCwweGZjLDB4MzYsMHhlMCwweGY1LDB4NDMsMHhiNCwweDA1LDB4MDIsMHg4MCwKKzB4MDMsMHhkMywweDQwLDB4MGEsMHhlNCwweGZmLDB4MDQsMHhmZSwweDdjLDB4MGIsMHgxMiwweDMxLDB4ZmIsMHgyMiwweGI0LDB4MDEsCisweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgwYSwweGU0LDB4ZmYsMHgwNCwweGZlLDB4N2MsMHgwOSwweDEyLDB4MzEsMHhmYiwweDIyLAorMHhiNCwweDAzLDB4MDAsMHg0MCwweDEwLDB4YjQsMHgwNSwweDAwLDB4NTAsMHgwYiwweGU1LDB4NDMsMHg3ZiwweDAwLDB4ZmUsMHg3YywKKzB4MTQsMHgxMiwweDMxLDB4ZmIsMHgyMiwweDIyLDB4YjQsMHg4MCwweDAwLDB4NDAsMHgyMywweGI0LDB4ODIsMHgwMCwweDUwLDB4MWUsCisweDdjLDB4MzUsMHg3ZCwweGZjLDB4MTIsMHgxNywweDdlLDB4N2QsMHgwMCwweDhjLDB4NmMsMHg4ZCwweDZiLDB4OTAsMHhmYywweDM3LAorMHhlMCwweDYwLDB4MDUsMHgxMiwweDJmLDB4ZmYsMHg4MCwweDA1LDB4N2MsMHgwMCwweDEyLDB4MzAsMHgyNCwweDIyLDB4MjIsMHg5MCwKKzB4ZmYsMHg4MywweGUwLDB4NTQsMHg3ZiwweGYwLDB4OTAsMHhmZiwweDgyLDB4ZTAsMHg0NCwweDA4LDB4ZjAsMHg5MCwweGZmLDB4ODAsCisweGUwLDB4NDQsMHgwOCwweGYwLDB4MjIsMHg5MCwweGZmLDB4ODIsMHhlMCwweDQ0LDB4MDgsMHhmMCwweDkwLDB4ZmYsMHg4MCwweGUwLAorMHg0NCwweDA4LDB4ZjAsMHgyMiwweDhjLDB4MjMsMHg3ZCwweDAwLDB4OGMsMHg3MCwweDhkLDB4NmYsMHg3NSwweDZhLDB4MzUsMHg3NSwKKzB4NjksMHhmYywweDc1LDB4NjgsMHgwMSwweDEyLDB4MzAsMHgzOSwweDIyLDB4OTAsMHhmZiwweDgzLDB4ZTAsMHg1NCwweDdmLDB4ZjAsCisweGU1LDB4NzAsMHg2NCwweDQ5LDB4NDUsMHg2ZiwweDcwLDB4MDEsMHgyMiwweGMzLDB4ZTUsMHg3MCwweDk0LDB4MDgsMHhlNSwweDZmLAorMHg5NCwweDAwLDB4NDAsMHgxNSwweDc1LDB4MjEsMHgwOCwweGU1LDB4MjEsMHg3ZCwweDAwLDB4ZmMsMHhjMywweGU1LDB4NzAsMHg5YywKKzB4ZjUsMHg3MCwweGU1LDB4NmYsMHg5ZCwweGY1LDB4NmYsMHg4MCwweDA5LDB4ODUsMHg3MCwweDIxLDB4ZTQsMHhmNSwweDZmLDB4NzUsCisweDcwLDB4NDksMHg3NSwweDIyLDB4MDAsMHhlNSwweDIyLDB4YzMsMHg5NSwweDIxLDB4NTAsMHgyNiwweGFkLDB4NmEsMHhhZSwweDY5LAorMHhhZiwweDY4LDB4MTIsMHgwMSwweGU2LDB4ZmMsMHhlNSwweDIyLDB4MjQsMHhmOCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmUsMHhmNSwKKzB4ODMsMHhlYywweGYwLDB4MDUsMHgyMiwweDBkLDB4ZWQsMHg3MCwweDAxLDB4MGUsMHg4ZCwweDZhLDB4OGUsMHg2OSwweDhmLDB4NjgsCisweDgwLDB4ZDMsMHhlNSwweDIxLDB4NTQsMHg3ZiwweDkwLDB4ZmYsMHg4MSwweGYwLDB4MjIsMHg4YywweDQ4LDB4N2YsMHgwMCwweGVmLAorMHgyNCwweGZkLDB4NDAsMHgxOSwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDcsMHhhNCwweDI0LDB4N2YsMHhmNSwweDgyLDB4ZTQsMHgzNCwKKzB4ZjgsMHhmNSwweDgzLDB4ZTAsMHg2NSwweDQ4LDB4NzAsMHgwMiwweGQzLDB4MjIsMHgwZiwweDgwLDB4ZTIsMHg4ZiwweDQ3LDB4YzMsCisweDIyLDB4ODUsMHg3MiwweDcwLDB4ODUsMHg3MSwweDZmLDB4OTAsMHhmZiwweDgyLDB4ZTAsMHg1NCwweGY3LDB4ZjAsMHg5MCwweGZmLAorMHg4MywweGUwLDB4NTQsMHg3ZiwweGYwLDB4MjIsMHhjMCwweDAwLDB4YzAsMHgwMSwweGMwLDB4MDIsMHhjMCwweDA2LDB4YzAsMHgwNywKKzB4ZTUsMHg3OCwweDI0LDB4MDgsMHhmOCwweDg2LDB4MDYsMHg1MywweDA2LDB4N2YsMHg3YywweGZmLDB4MTIsMHgzMSwweDViLDB4N2MsCisweDAwLDB4N2QsMHgwMCwweGU1LDB4N2IsMHg2MCwweDQ2LDB4ZmYsMHg5MCwweGZkLDB4OTUsMHhlMCwweDU0LDB4N2YsMHg2ZSwweDcwLAorMHgwZiwweGMwLDB4ODMsMHhjMCwweDgyLDB4YTMsMHhlMCwweGZkLDB4YTMsMHhlMCwweGZjLDB4YTMsMHgxNSwweDdiLDB4ODAsMHgwNywKKzB4YTMsMHhhMywweGEzLDB4ZGYsMHhlNiwweDgwLDB4MjYsMHhkZiwweDA2LDB4ZDAsMHg4MiwweGQwLDB4ODMsMHg4MCwweDFlLDB4ZTAsCisweGY4LDB4YTMsMHhlMCwweGY5LDB4YTMsMHhlMCwweGZhLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhlOCwweGYwLDB4YTMsMHhlOSwweGYwLAorMHhhMywweGVhLDB4ZjAsMHhhMywweGMwLDB4ODMsMHhjMCwweDgyLDB4YTMsMHhhMywweGEzLDB4ODAsMHhkYSwweDEyLDB4MzEsMHhmNCwKKzB4ZDAsMHgwNywweGQwLDB4MDYsMHhkMCwweDAyLDB4ZDAsMHgwMSwweGQwLDB4MDAsMHgyMiwweDg1LDB4YTgsMHg3YSwweDc1LDB4YTgsCisweDg4LDB4ZWMsMHg3MCwweDAyLDB4N2MsMHgzZiwweDhjLDB4NzksMHgyMiwweGU1LDB4NzgsMHgyNCwweDA4LDB4ZjgsMHg3NiwweDAwLAorMHgxMiwweDMyLDB4NDgsMHg4MCwweGZiLDB4YzAsMHgwMCwweGMwLDB4MDEsMHhjMCwweDAyLDB4YzAsMHgwNiwweGMwLDB4MDcsMHhhZSwKKzB4MDQsMHg3YywweGZmLDB4MTIsMHgzMSwweDViLDB4ZTUsMHg3YiwweDYwLDB4NDIsMHhmZiwweDkwLDB4ZmQsMHg5NSwweGUwLDB4NTQsCisweDdmLDB4NmUsMHg3MCwweDBiLDB4YzAsMHg4MywweGMwLDB4ODIsMHhhMywweGEzLDB4YTMsMHgxNSwweDdiLDB4ODAsMHgwNywweGEzLAorMHhhMywweGEzLDB4ZGYsMHhlYSwweDgwLDB4MjYsMHhkZiwweDA2LDB4ZDAsMHg4MiwweGQwLDB4ODMsMHg4MCwweGQ4LDB4ZTAsMHhmOCwKKzB4YTMsMHhlMCwweGY5LDB4YTMsMHhlMCwweGZhLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhlOCwweGYwLDB4YTMsMHhlOSwweGYwLDB4YTMsCisweGVhLDB4ZjAsMHhhMywweGMwLDB4ODMsMHhjMCwweDgyLDB4YTMsMHhhMywweGEzLDB4ODAsMHhkYSwweDc4LDB4MDgsMHgwOCwweDc5LAorMHgxOCwweDA5LDB4N2MsMHgwMSwweGU2LDB4NTQsMHg3ZiwweDZlLDB4NzAsMHgwNiwweDc2LDB4MDAsMHg3NywweDAwLDB4ODAsMHgwNiwKKzB4MDgsMHgwOSwweDBjLDB4YmMsMHgwOCwweGVlLDB4MTIsMHgzMSwweGY0LDB4ZDAsMHgwNywweGQwLDB4MDYsMHhkMCwweDAyLDB4ZDAsCisweDAxLDB4ZDAsMHgwMCwweDIyLDB4NzUsMHg3OSwweDAwLDB4ODUsMHg3YSwweGE4LDB4MjIsMHhjMCwweGYwLDB4YzAsMHg4MiwweGMwLAorMHg4MywweGMzLDB4ZTUsMHg3YiwweDI0LDB4ZTgsMHg1MCwweDA1LDB4MTIsMHgzMiwweDQ4LDB4ODAsMHhmNCwweGVjLDB4NjAsMHgzMSwKKzB4OTAsMHgzNSwweDIzLDB4ZTQsMHg5MywweGMzLDB4OWMsMHg0MCwweDI4LDB4YzAsMHgwNCwweDdjLDB4ZmYsMHgxMiwweDMxLDB4NWIsCisweGQwLDB4MDQsMHg0MywweDA0LDB4ODAsMHhlNSwweDdiLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDk1LDB4ZjUsMHg4MiwweGU0LAorMHgzNCwweGZkLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHhlZiwweGEzLDB4ZjAsMHhlZSwweGEzLDB4ZjAsMHgwNSwweDdiLDB4MTIsMHgzMSwKKzB4ZjQsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZjAsMHgyMiwweGMwLDB4MDQsMHg3YywweDIwLDB4ZDIsMHg4YywweGQyLDB4OGQsCisweGQ1LDB4MDQsMHhmZCwweGQwLDB4MDQsMHgyMiwweDc1LDB4YTgsMHgwMCwweDc1LDB4ODgsMHgwMCwweDc1LDB4YjgsMHgwMCwweDc1LAorMHhmMCwweDAwLDB4NzUsMHhkMCwweDAwLDB4ZTQsMHhmOCwweDkwLDB4MDAsMHgwMCwweGY2LDB4MDgsMHhiOCwweDAwLDB4ZmIsMHgwMiwKKzB4MDAsMHgwMCwweGMzLDB4ZWQsMHg5NCwweDAyLDB4NTAsMHgwNCwweDdkLDB4MDMsMHg3YywweGU4LDB4ZWMsMHhmNCwweGZjLDB4ZWQsCisweGY0LDB4ZmQsMHgwYywweGJjLDB4MDAsMHgwMSwweDBkLDB4OGMsMHg3ZiwweDhkLDB4N2UsMHgyMiwweGMzLDB4ZWMsMHg5NCwweGJjLAorMHhlZCwweDk0LDB4MDIsMHg1MCwweDA0LDB4N2QsMHgwNywweDdjLDB4ZDAsMHhlYywweGY0LDB4ZmMsMHhlZCwweGY0LDB4ZmQsMHgwYywKKzB4YmMsMHgwMCwweDAxLDB4MGQsMHg4YywweDdkLDB4OGQsMHg3YywweDIyLDB4ZWMsMHg3MCwweDAxLDB4MjIsMHhjMCwweDAwLDB4ZTUsCisweDc4LDB4MjQsMHgxOCwweGY4LDB4YTYsMHgwNCwweGU1LDB4NzgsMHgyNCwweDA4LDB4ZjgsMHhjNiwweDU0LDB4N2YsMHhmNiwweGU2LAorMHgzMCwweGU3LDB4MDMsMHhkMCwweDAwLDB4MjIsMHgxMiwweDMyLDB4NDgsMHg4MCwweGY0LDB4YzIsMHg4YywweDg1LDB4N2MsMHg4YywKKzB4ODUsMHg3ZCwweDhhLDB4ZDIsMHg4YywweGMwLDB4ZTAsMHhjMCwweGQwLDB4YzAsMHhmMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsCisweDAwLDB4YzAsMHgwMSwweGMwLDB4MDIsMHhjMCwweDAzLDB4YzAsMHgwNCwweGMwLDB4MDUsMHhjMCwweDA2LDB4YzAsMHgwNywweDEyLAorMHgxYSwweGQxLDB4ZTUsMHg3OCwweDI0LDB4MDgsMHhmOCwweGU2LDB4NjAsMHgyNCwweGU1LDB4NzgsMHgyNCwweDEwLDB4ZjgsMHhhNiwKKzB4ODEsMHhlNSwweDc4LDB4NzUsMHhmMCwweDIxLDB4YTQsMHgyNCwweDhkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywweGY1LDB4ODMsCisweDc4LDB4YWUsMHhlNSwweDgxLDB4MDQsMHhjMywweDk4LDB4ZjksMHhlNiwweGYwLDB4MDgsMHhhMywweGQ5LDB4ZmEsMHg3NCwweDA4LAorMHgyNSwweDc4LDB4ZjgsMHgwNSwweDc4LDB4MDgsMHhlNiwweDU0LDB4ODAsMHg3MCwweDBjLDB4ZTUsMHg3OCwweGI0LDB4MDcsMHhmMywKKzB4NzgsMHgwOCwweDc1LDB4NzgsMHgwMCwweDgwLDB4ZWYsMHhlNSwweDc4LDB4MjQsMHgxMCwweGY4LDB4ODYsMHg4MSwweGU1LDB4NzgsCisweDc1LDB4ZjAsMHgyMSwweGE0LDB4MjQsMHg4ZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmMsMHhmNSwweDgzLDB4NzgsMHhhZSwweGU1LAorMHg4MSwweDA0LDB4YzMsMHg5OCwweGY5LDB4ZTAsMHhmNiwweDA4LDB4YTMsMHhkOSwweGZhLDB4ZDAsMHgwNywweGQwLDB4MDYsMHhkMCwKKzB4MDUsMHhkMCwweDA0LDB4ZDAsMHgwMywweGQwLDB4MDIsMHhkMCwweDAxLDB4ZDAsMHgwMCwweGQwLDB4ODMsMHhkMCwweDgyLDB4ZDAsCisweGYwLDB4ZDAsMHhkMCwweGQwLDB4ZTAsMHgzMiwweGMwLDB4ZTAsMHhjMCwweGQwLDB4YzAsMHgwMCwweGMwLDB4MDEsMHhjMCwweDAyLAorMHhjMiwweDhlLDB4ODUsMHg3ZSwweDhkLDB4ODUsMHg3ZiwweDhiLDB4ZDIsMHg4ZSwweDc4LDB4MTksMHg3OSwweDA5LDB4N2EsMHgwNywKKzB4ZTcsMHg3MCwweDA0LDB4YTYsMHgwMCwweDgwLDB4MGIsMHhlNiwweDYwLDB4MDgsMHgxNiwweGU2LDB4NzAsMHgwNCwweGU3LDB4NDQsCisweDgwLDB4ZjcsMHgwOCwweDA5LDB4ZGEsMHhlYSwweGU1LDB4NzksMHg2MCwweDEzLDB4MTQsMHhmNSwweDc5LDB4NzAsMHgwZSwweGU1LAorMHg3OCwweDI0LDB4MDgsMHhmOCwweDc2LDB4MDAsMHgxMiwweDMxLDB4ZjQsMHhkMiwweDhjLDB4ZDIsMHg4ZCwweGQwLDB4MDIsMHhkMCwKKzB4MDEsMHhkMCwweDAwLDB4ZDAsMHhkMCwweGQwLDB4ZTAsMHgzMiwweDc1LDB4ODEsMHhhZCwweDc0LDB4MmEsMHg5MCwweGZmLDB4OTMsCisweGYwLDB4NzUsMHg3ZiwweDMwLDB4NzUsMHg3ZSwweGY4LDB4NzUsMHg3ZCwweDYwLDB4NzUsMHg3YywweGYwLDB4MTIsMHgwNSwweDM2LAorMHgxMiwweDM0LDB4N2MsMHgxMiwweDE3LDB4MzQsMHg5MCwweGZmLDB4OTMsMHhlMCwweDQ0LDB4MDEsMHhmMCwweGIyLDB4YjMsMHgxMiwKKzB4MzQsMHhhNiwweDEyLDB4MzIsMHg1NiwweDgwLDB4ZGEsMHgyMiwweGMwLDB4MDAsMHg3YywweDAxLDB4ZWMsMHgyNCwweDA4LDB4ZjgsCisweGU2LDB4NjAsMHgwOSwweDBjLDB4YmMsMHgwOCwweGY1LDB4MTIsMHgzMiwweDQ4LDB4ODAsMHhlZSwweGQwLDB4MDAsMHgyMiwweGMwLAorMHhmMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHgwMCwweGMwLDB4MDYsMHhjMCwweDA3LDB4ZWQsMHgyNCwweDEwLDB4ZjgsMHg3NiwKKzB4YmMsMHhlZCwweDc1LDB4ZjAsMHgyMSwweGE0LDB4MjQsMHg4ZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmMsMHhmNSwweDgzLDB4YzAsCisweDgyLDB4YzAsMHg4MywweGEzLDB4YTMsMHhlNCwweDc4LDB4MGQsMHhmMCwweGEzLDB4ZDgsMHhmYywweGVjLDB4NTQsMHg3ZiwweDc1LAorMHhmMCwweDAyLDB4YTQsMHgyNCwweGVmLDB4ZjUsMHg4MiwweGU1LDB4ZjAsMHgzNCwweDM0LDB4ZjUsMHg4MywweGU0LDB4OTMsMHhmZSwKKzB4NzQsMHgwMSwweDkzLDB4ZjUsMHg4MiwweDhlLDB4ODMsMHhlNCwweDkzLDB4ZmUsMHg3NCwweDAxLDB4OTMsMHhmZiwweGQwLDB4ODMsCisweGQwLDB4ODIsMHhlZiwweGYwLDB4YTMsMHhlZSwweGYwLDB4ZWQsMHgyNCwweDA4LDB4ZjgsMHhlYywweDQ0LDB4ODAsMHhmNiwweGQwLAorMHgwNywweGQwLDB4MDYsMHhkMCwweDAwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGYwLDB4MjIsMHg3NSwweDc4LDB4MDAsMHg3NSwKKzB4N2IsMHgwMCwweDdhLDB4MDgsMHg3OSwweDE4LDB4NzgsMHgwOCwweDc2LDB4MDAsMHg3NywweDAwLDB4MDgsMHgwOSwweGRhLDB4ZjgsCisweGU0LDB4NzgsMHgwOCwweDc0LDB4ODAsMHg0NCwweDdmLDB4ZjYsMHg3NCwweDAxLDB4NDQsMHgxMCwweGY1LDB4ODksMHg3NSwweGI4LAorMHgwOCwweGQyLDB4YWIsMHhkMiwweGE5LDB4MjIsMHg3NSwweDgxLDB4YWQsMHhkMiwweDhlLDB4ZDIsMHg4YywweGQyLDB4YWYsMHhlNSwKKzB4N2IsMHg2MCwweDMyLDB4ZmYsMHg5MCwweGZkLDB4OTUsMHhlMCwweDU0LDB4ODAsMHg2MCwweDI0LDB4NzgsMHgwOCwweDc5LDB4MDgsCisweGUwLDB4NTQsMHg3ZiwweGZhLDB4N2IsMHgwMCwweGU2LDB4NTQsMHg3ZiwweGI1LDB4MDIsMHgwMiwweDdiLDB4ZmYsMHgwOCwweGQ5LAorMHhmNSwweGViLDB4NzAsMHgwYywweGVhLDB4ZjAsMHgxMiwweDMzLDB4ZjgsMHhhZCwweDA0LDB4YWMsMHgwMiwweDEyLDB4MzQsMHgwZiwKKzB4YTMsMHhhMywweGEzLDB4ZGYsMHhkMiwweDEyLDB4MzIsMHg0OCwweDgwLDB4YzUsMHg3YywweDAxLDB4N2QsMHgwMCwweDIyLDB4MDQsCisweGY1LDB4MDQsMHhlOSwweDA0LDB4ZWQsMHgwNCwweGUxLDB4MDQsMHhkZCwweDA0LDB4ZDksMHgwNCwweGU1LDB4MDQsMHhmMSwweDA0LAorMHg5ZCwweDA0LDB4YTEsMHgwNCwweGNkLDB4MDQsMHhkMSwweDA0LDB4OTksMHgwNCwweDk5LDB4MDQsMHg5OSwweDA0LDB4ZDUsMHgwNCwKKzB4YjUsMHgwNCwweGFkLDB4MDQsMHhiMSwweDA0LDB4YTksMHgwNCwweGMxLDB4MDQsMHhiZCwweDA0LDB4YjksMHgwNCwweGM1LDB4MDQsCisweGM5LDB4MDQsMHhhNSwweDE5LDB4MDEsMHgwMywweDAwLDB4MjIsMHgwMCwweDQ4LDB4MDIsMHgwMCwweDQ4LDB4MGUsMHgzMCwweDE0LAorMHgyMCwweGM4LDB4MWEsMHhkMCwweDE4LDB4MGEsMHgwYywweDA1LDB4MDYsMHgwMiwweDAzLDB4MDEsMHgwMiwweDAwLDB4MDEsMHhjZSwKKzB4MDEsMHg4MSwweDAxLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg4MCwweDAwLDB4NjAsMHgwMCwweDMwLDB4MDAsMHgxOCwweDAwLDB4MTAsCisweDAwLDB4MDgsMHgwMCwweDA0LDB4MDAsMHgwMiwweDAwLDB4MDEsMHgwMCwweDA4LDB4MTgsMHgzOCwweDI4LDB4MGMsMHgwNSwweDEwLAorMHgwYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzLDB4MDEsMHgxMCwweDBhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwKKzB4MDAsMHhmYiwweGUwLDB4ZmIsMHhmMiwweDA5LDB4MDIsMHgyNywweDAwLDB4MDEsMHgwMiwweDAwLDB4YTAsMHgzMiwweDA5LDB4MDQsCisweDAwLDB4MDAsMHgwMywweGZmLDB4MDAsMHgwMCwweDAwLDB4MDcsMHgwNSwweDgxLDB4MDIsMHg0MCwweDAwLDB4MDAsMHgwNywweDA1LAorMHgwMSwweDAyLDB4NDAsMHgwMCwweDAwLDB4MDcsMHgwNSwweDgzLDB4MDMsMHgwMiwweDAwLDB4MDEsMHgyMiwweDAzLDB4NTQsMHgwMCwKKzB4NTUsMHgwMCwweDUzLDB4MDAsMHg0MiwweDAwLDB4MzMsMHgwMCwweDM0LDB4MDAsMHgzMSwweDAwLDB4MzAsMHgwMCwweDIwLDB4MDAsCisweDIwLDB4MDAsMHgyMCwweDAwLDB4MjAsMHgwMCwweDIwLDB4MDAsMHgyMCwweDAwLDB4MjAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLAorMHgwMCwweDAwLAorfTsKKworI2VuZGlmIC8qIGlmbmRlZiBfVElfRldfMzQxMF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3RpX2Z3XzUwNTIuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC90aV9md181MDUyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNjZjQwYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC90aV9md181MDUyLmgKQEAgLTAsMCArMSw4ODUgQEAKKy8qIHZpOiB0cz04IHN3PTgKKyAqCisgKiBUSSA1MDUyIFVTQiBTZXJpYWwgRHJpdmVyIEZpcm13YXJlIEhlYWRlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfVElfRldfNTA1Ml9IXworI2RlZmluZSBfVElfRldfNTA1Ml9IXworCisvKiBmaXJtd2FyZSA5LzE4LzA0ICovCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHRpX2Z3XzUwNTJbXSA9IHsKKzB4QzEsIDB4MzUsCS8qIGZpcm13YXJlIGltYWdlIGxlbmd0aCBleGNsdWRpbmcgaGVhZGVyLCBsaXR0bGUgZW5kaWFuICovCisweDAwLCAJCS8qIHBsYWNlaG9sZGVyIGZvciBjaGVja3N1bSAqLworCisweDAyLDB4MDAsMHgxZSwweDAyLDB4MWIsMHgzMiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHgwMiwweDMyLDB4NmEsMHhmZiwweGZmLAorMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4MDIsMHgzMywweDE1LDB4NzUsMHg4MSwKKzB4YzgsMHg5MCwweGZlLDB4ZjAsMHg4NSwweDgzLDB4YTAsMHgxMiwweDM0LDB4N2QsMHhlYywweDRkLDB4NjAsMHg2YSwweDc4LDB4YTUsCisweDgwLDB4MDMsMHg3NiwweDAwLDB4MTgsMHhiOCwweDk2LDB4ZmEsMHg3OCwweDc5LDB4ODAsMHgwMywweDc2LDB4MDAsMHgxOCwweGI4LAorMHg1ZiwweGZhLDB4NzgsMHgyMCwweDgwLDB4MDMsMHg3NiwweDAwLDB4MTgsMHhiOCwweDIwLDB4ZmEsMHg5MCwweGZlLDB4ZTUsMHhhZSwKKzB4ODMsMHhhZiwweDgyLDB4OTAsMHhmZCwweDAwLDB4MTIsMHgwMCwweGExLDB4NjAsMHgwNSwweGU0LDB4ZjAsMHhhMywweDgwLDB4ZjYsCisweDkwLDB4ZmUsMHhmMCwweGE4LDB4ODIsMHg5MCwweGZlLDB4ZjAsMHhhOSwweDgyLDB4ZTgsMHhjMywweDk5LDB4NTAsMHgwNSwweDc2LAorMHgwMCwweDA4LDB4ODAsMHhmNiwweDkwLDB4MDAsMHhmZiwweDEyLDB4MDAsMHhhYSwweDkwLDB4MDEsMHgwMywweDEyLDB4MDAsMHhhYSwKKzB4OTAsMHgwMSwweDA3LDB4MTIsMHgwMCwweGFhLDB4OTAsMHgwMSwweDBiLDB4MTIsMHgwMCwweGM4LDB4OTAsMHgwMSwweDExLDB4MTIsCisweDAwLDB4YzgsMHg5MCwweDAxLDB4MTcsMHgxMiwweDAwLDB4YzgsMHg3NSwweGQwLDB4MDAsMHgxMiwweDMzLDB4NjcsMHgwMiwweDAxLAorMHgxZCwweGVmLDB4NjUsMHg4MiwweDcwLDB4MDMsMHhlZSwweDY1LDB4ODMsMHgyMiwweGU0LDB4OTMsMHhmOCwweDc0LDB4MDEsMHg5MywKKzB4ZjksMHg3NCwweDAyLDB4OTMsMHhmZSwweDc0LDB4MDMsMHg5MywweGY1LDB4ODIsMHg4ZSwweDgzLDB4ZTgsMHg2OSwweDcwLDB4MDEsCisweDIyLDB4ZTQsMHg5MywweGY2LDB4YTMsMHgwOCwweDgwLDB4ZjQsMHhlNCwweDkzLDB4ZmMsMHg3NCwweDAxLDB4OTMsMHhmZCwweDc0LAorMHgwMiwweDkzLDB4ZmUsMHg3NCwweDAzLDB4OTMsMHhmZiwweDc0LDB4MDQsMHg5MywweGY4LDB4NzQsMHgwNSwweDkzLDB4ZjUsMHg4MiwKKzB4ODgsMHg4MywweDEyLDB4MDAsMHhhMSwweDcwLDB4MDEsMHgyMiwweGU0LDB4OTMsMHhhMywweGE4LDB4ODMsMHhhOSwweDgyLDB4OGMsCisweDgzLDB4OGQsMHg4MiwweGYwLDB4YTMsMHhhYywweDgzLDB4YWQsMHg4MiwweDg4LDB4ODMsMHg4OSwweDgyLDB4ODAsMHhlMywweDIxLAorMHgyMSwweDA0LDB4OTIsMHg3YSwweDdhLDB4MDQsMHg5MiwweGE2LDB4YTgsMHgwNCwweDkyLDB4ZmUsMHhmMCwweDA0LDB4OTQsMHgwNCwKKzB4OTQsMHhmYiwweGZiLDB4MDQsMHg5OSwweDA0LDB4OTQsMHhmYiwweGZiLDB4MDQsMHhmOSwweDA0LDB4ZjksMHg4MCwweGZlLDB4ZDAsCisweGYwLDB4MzAsMHhmMCwweDA5LDB4MjAsMHhmMywweDAzLDB4ZjYsMHg4MCwweDEwLDB4ZjcsMHg4MCwweDBkLDB4MzAsMHhmMSwweDA5LAorMHgyMCwweGYzLDB4MDMsMHhmMiwweDgwLDB4MDQsMHhmMywweDgwLDB4MDEsMHhmMCwweDIwLDB4ZjQsMHgwNCwweGZjLDB4ZDAsMHhlMCwKKzB4Y2MsMHgyMiwweGNjLDB4YzAsMHhlMCwweDEyLDB4MDEsMHg1YSwweDAyLDB4MDEsMHg0YiwweGJjLDB4MDAsMHgwNSwweGQwLDB4ZjAsCisweGFjLDB4ZjAsMHgyMiwweGMzLDB4MTMsMHhkYywweGZjLDB4MDIsMHgwMSwweDIxLDB4YmYsMHgwMCwweDA5LDB4ZWQsMHgyNSwweDgyLAorMHg3NSwweGYwLDB4MDEsMHhmOCwweGU2LDB4MjIsMHhiZiwweDAxLDB4MGYsMHhlZCwweDI1LDB4ODIsMHhmNSwweDgyLDB4ZWUsMHgzNSwKKzB4ODMsMHhmNSwweDgzLDB4NzUsMHhmMCwweDA0LDB4ZTAsMHgyMiwweGVkLDB4MjUsMHg4MiwweDc1LDB4ZjAsMHgwMiwweGY4LDB4ZTIsCisweDIyLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhmNSwweGYwLDB4YzMsMHhlNCwweDkzLDB4YTMsMHhjNSwweGYwLDB4OTUsMHhmMCwweGMwLAorMHhlMCwweGMzLDB4ZDAsMHhmMCwweGU0LDB4OTMsMHhhMywweDk1LDB4ZjAsMHg0MCwweDEyLDB4YTMsMHhhMywweGMzLDB4ZTUsMHhmMCwKKzB4MzMsMHg1MCwweDAyLDB4MDUsMHg4MywweDI1LDB4ODIsMHhmNSwweDgyLDB4NTAsMHgwMiwweDA1LDB4ODMsMHg3NCwweDAxLDB4OTMsCisweGMwLDB4ZTAsMHhlNCwweDkzLDB4YzAsMHhlMCwweDIyLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhmNSwweGYwLDB4ZTQsMHg5MywweDcwLAorMHgwOSwweDc0LDB4MDEsMHg5MywweDcwLDB4MDQsMHhhMywweGEzLDB4ODAsMHgwYywweDc0LDB4MDIsMHg5MywweDY1LDB4ZjAsMHg2MCwKKzB4MDUsMHhhMywweGEzLDB4YTMsMHg4MCwweGU3LDB4NzQsMHgwMSwweDkzLDB4YzAsMHhlMCwweGU0LDB4OTMsMHhjMCwweGUwLDB4MjIsCisweDEyLDB4MDIsMHg1YiwweDAyLDB4MDEsMHhmMiwweDEyLDB4MDIsMHhhZiwweDAyLDB4MDEsMHhmMiwweDEyLDB4MDIsMHhkMywweDAyLAorMHgwMSwweGYyLDB4MzAsMHhlMCwweDA3LDB4MjAsMHhlMywweDAyLDB4ZTYsMHgyMiwweGU3LDB4MjIsMHgzMCwweGUxLDB4MDcsMHgyMCwKKzB4ZTMsMHgwMiwweGUyLDB4MjIsMHhlMywweDIyLDB4MzAsMHhlMiwweDAyLDB4ZTAsMHgyMiwweGU0LDB4OTMsMHgyMiwweDEyLDB4MDIsCisweGQzLDB4MDIsMHgwMiwweDFhLDB4MTIsMHgwMiwweGFmLDB4MDIsMHgwMiwweDFhLDB4YWIsMHhmMCwweDEyLDB4MDIsMHgyNCwweGNiLAorMHhjNSwweGYwLDB4Y2IsMHgyMiwweDMwLDB4ZTAsMHgxMCwweDIwLDB4ZTMsMHgwNiwweGU2LDB4ZjUsMHhmMCwweDA4LDB4ZTYsMHgyMiwKKzB4ZTcsMHhmNSwweGYwLDB4MDksMHhlNywweDE5LDB4MjIsMHgzMCwweGUxLDB4MTAsMHgyMCwweGUzLDB4MDYsMHhlMiwweGY1LDB4ZjAsCisweDA4LDB4ZTIsMHgyMiwweGUzLDB4ZjUsMHhmMCwweDA5LDB4ZTMsMHgxOSwweDIyLDB4MzAsMHhlMiwweDA2LDB4ZTAsMHhmNSwweGYwLAorMHhhMywweGUwLDB4MjIsMHhlNCwweDkzLDB4ZjUsMHhmMCwweDc0LDB4MDEsMHg5MywweDIyLDB4YmIsMHgwMCwweDAzLDB4NzQsMHgwOSwKKzB4MjIsMHhiYiwweDAxLDB4MDcsMHg4OSwweDgyLDB4OGEsMHg4MywweDc0LDB4MDQsMHgyMiwweGJiLDB4MDIsMHgwNywweDg5LDB4ODIsCisweDhhLDB4ODMsMHg3NCwweDEwLDB4MjIsMHg3NCwweDBhLDB4MjIsMHgwMiwweDAyLDB4N2IsMHhiYiwweDAwLDB4MDcsMHhlOSwweDI1LAorMHg4MiwweGY4LDB4NzQsMHgwMSwweDIyLDB4YmIsMHgwMSwweDBkLDB4ZTksMHgyNSwweDgyLDB4ZjUsMHg4MiwweGVhLDB4MzUsMHg4MywKKzB4ZjUsMHg4MywweDc0LDB4MDQsMHgyMiwweGJiLDB4MDIsMHgwZCwweGU5LDB4MjUsMHg4MiwweGY1LDB4ODIsMHhlYSwweDM1LDB4ODMsCisweGY1LDB4ODMsMHg3NCwweDEwLDB4MjIsMHhlOSwweDI1LDB4ODIsMHhmOCwweDc0LDB4MDIsMHgyMiwweDAyLDB4MDIsMHhhZiwweGJmLAorMHgwMCwweDA1LDB4ZWQsMHhmOCwweDc0LDB4MDEsMHgyMiwweGJmLDB4MDEsMHgwNywweDhkLDB4ODIsMHg4ZSwweDgzLDB4NzQsMHgwNCwKKzB4MjIsMHhiZiwweDAyLDB4MDcsMHg4ZCwweDgyLDB4OGUsMHg4MywweDc0LDB4MTAsMHgyMiwweGVkLDB4ZjgsMHg3NCwweDAyLDB4MjIsCisweDAyLDB4MDIsMHhkMywweGJmLDB4MDAsMHgwNywweGVkLDB4MjUsMHg4MiwweGY4LDB4NzQsMHgwMSwweDIyLDB4YmYsMHgwMSwweDBkLAorMHhlZCwweDI1LDB4ODIsMHhmNSwweDgyLDB4ZWUsMHgzNSwweDgzLDB4ZjUsMHg4MywweDc0LDB4MDQsMHgyMiwweGJmLDB4MDIsMHgwZCwKKzB4ZWQsMHgyNSwweDgyLDB4ZjUsMHg4MiwweGVlLDB4MzUsMHg4MywweGY1LDB4ODMsMHg3NCwweDEwLDB4MjIsMHhlZCwweDI1LDB4ODIsCisweGY4LDB4NzQsMHgwMiwweDIyLDB4MDIsMHgwMywweDA3LDB4YzAsMHhlMCwweDEyLDB4MDIsMHg1YiwweDAyLDB4MDMsMHgxZiwweGMwLAorMHhlMCwweDEyLDB4MDIsMHhhZiwweDAyLDB4MDMsMHgxZiwweGMwLDB4ZTAsMHgxMiwweDAyLDB4ZDMsMHgwMiwweDAzLDB4MWYsMHgzMCwKKzB4ZTAsMHgwYiwweDIwLDB4ZTMsMHgwNCwweGQwLDB4ZTAsMHhmNiwweDIyLDB4ZDAsMHhlMCwweGY3LDB4MjIsMHgzMCwweGUxLDB4MGIsCisweDIwLDB4ZTMsMHgwNCwweGQwLDB4ZTAsMHhmMiwweDIyLDB4ZDAsMHhlMCwweGYzLDB4MjIsMHhkMCwweGUwLDB4ZjAsMHgyMiwweGM5LAorMHhjZCwweGM5LDB4Y2EsMHhjZSwweGNhLDB4Y2IsMHhjZiwweGNiLDB4MTIsMHgwMywweDUyLDB4ZWQsMHhmOSwweGVlLDB4ZmEsMHhlZiwKKzB4ZmIsMHgyMiwweGJiLDB4MDAsMHgyZiwweGJmLDB4MDAsMHgwYSwweGZhLDB4ZWQsMHhmOCwweGU3LDB4ZjYsMHgwOCwweDA5LDB4ZGEsCisweGZhLDB4MjIsMHhiZiwweDAxLDB4MTIsMHg4ZCwweDgyLDB4OGUsMHg4MywweGY4LDB4MDIsMHgwMywweDZmLDB4MDksMHhhMywweGU3LAorMHhmMCwweGQ4LDB4ZmEsMHgyMiwweDAyLDB4MDMsMHg3YSwweGZhLDB4ZWQsMHhmOCwweGU3LDB4ZjIsMHgwOCwweDA5LDB4ZGEsMHhmYSwKKzB4MjIsMHgwMiwweDAzLDB4ODQsMHhiYiwweDAxLDB4NGQsMHhiZiwweDAwLDB4MTQsMHg4OSwweDgyLDB4OGEsMHg4MywweGY5LDB4ZWQsCisweGY4LDB4MDIsMHgwMywweDk2LDB4MDgsMHhhMywweGUwLDB4ZjYsMHhkOSwweGZhLDB4MjIsMHgwMiwweDAzLDB4YTcsMHhiZiwweDAxLAorMHgyMiwweDhkLDB4ODIsMHg4ZSwweDgzLDB4ZmIsMHgwOCwweGM5LDB4YzUsMHg4MiwweGM5LDB4Y2EsMHhjNSwweDgzLDB4Y2EsMHhlMCwKKzB4YTMsMHhjOSwweGM1LDB4ODIsMHhjOSwweGNhLDB4YzUsMHg4MywweGNhLDB4ZjAsMHhhMywweGRiLDB4ZWEsMHhkOCwweGU4LDB4MjIsCisweDAyLDB4MDMsMHhjYSwweDhkLDB4ODIsMHg4ZSwweDgzLDB4ZjksMHhlZCwweGY4LDB4ZTAsMHhmMiwweDA4LDB4YTMsMHhkOSwweGZhLAorMHgyMiwweDAyLDB4MDMsMHhkNCwweGJiLDB4MDIsMHg0ZCwweGJmLDB4MDAsMHgxMiwweDg5LDB4ODIsMHg4YSwweDgzLDB4ZjksMHhlZCwKKzB4ZjgsMHgwMiwweDAzLDB4ZTYsMHgwOCwweGEzLDB4ZTQsMHg5MywweGY2LDB4ZDksMHhmOSwweDIyLDB4YmYsMHgwMSwweDIzLDB4OGQsCisweDgyLDB4OGUsMHg4MywweGZiLDB4MDgsMHhjOSwweGM1LDB4ODIsMHhjOSwweGNhLDB4YzUsMHg4MywweGNhLDB4ZTQsMHg5MywweGEzLAorMHhjOSwweGM1LDB4ODIsMHhjOSwweGNhLDB4YzUsMHg4MywweGNhLDB4ZjAsMHhhMywweGRiLDB4ZTksMHhkOCwweGU3LDB4MjIsMHgwMiwKKzB4MDQsMHgxOSwweDg5LDB4ODIsMHg4YSwweDgzLDB4ZjksMHhlZCwweGY4LDB4ZTQsMHg5MywweGYyLDB4MDgsMHhhMywweGQ5LDB4ZjksCisweDIyLDB4MDIsMHgwNCwweDJhLDB4YmYsMHgwMCwweDBkLDB4ZmEsMHhlZCwweGY4LDB4ZTMsMHhmNiwweDA4LDB4MDksMHhkYSwweGZhLAorMHgyMiwweDAyLDB4MDQsMHgzNCwweGJmLDB4MDEsMHgxMiwweDhkLDB4ODIsMHg4ZSwweDgzLDB4ZjgsMHgwMiwweDA0LDB4NDEsMHgwOSwKKzB4YTMsMHhlMywweGYwLDB4ZDgsMHhmYSwweDIyLDB4MDIsMHgwNCwweDRjLDB4ZmEsMHhlZCwweGY4LDB4ZTMsMHhmMiwweDA4LDB4MDksCisweGRhLDB4ZmEsMHgyMiwweDAyLDB4MDQsMHg1NiwweGU2LDB4ZmIsMHgwOCwweGU2LDB4ZmEsMHgwOCwweGU2LDB4ZjksMHgwNCwweGY2LAorMHgxOCwweDcwLDB4MDEsMHgwNiwweDIyLDB4ZTYsMHhmZiwweDA4LDB4ZTYsMHhmZSwweDA4LDB4ZTYsMHhmZCwweDIyLDB4ZWYsMHhmMCwKKzB4YTMsMHhlZSwweGYwLDB4YTMsMHhlZCwweGYwLDB4MjIsMHhlYiwweGYwLDB4YTMsMHhlYSwweGYwLDB4YTMsMHhlOSwweGYwLDB4MjIsCisweGUwLDB4ZmYsMHhhMywweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmQsMHgyMiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLAorMHhmOSwweDIyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweGY5LDB4MDAsMHg1YiwweDA1LDB4NzMsMHgwMCwKKzB4MjYsMHgwNSwweDlhLDB4MDAsMHgzMywweDBhLDB4MGIsMHgwMCwweDViLDB4MGEsMHg3NywweDAwLDB4NjAsMHgxNSwweDUyLDB4MDAsCisweDViLDB4MGMsMHhmYiwweDAwLDB4NWIsMHgwOSwweGFiLDB4MDAsMHg1YiwweDA5LDB4ZTIsMHgwMCwweDViLDB4MGQsMHhjMiwweDAwLAorMHg1YiwweDBiLDB4ZjMsMHgwMCwweDViLDB4MGEsMHgxZSwweDAwLDB4NWIsMHgwYSwweDUzLDB4MDAsMHg1YiwweDE3LDB4NGEsMHgwMCwKKzB4MzMsMHgxNywweDYwLDB4MDAsMHgzNCwweDFlLDB4NGQsMHgwMCwweDQzLDB4MWUsMHhmMCwweDAwLDB4NDQsMHgyMCwweDVkLDB4MDAsCisweDQ0LDB4MjAsMHg0YiwweDAwLDB4NDcsMHgxZiwweDE3LDB4MDAsMHg0NywweDFmLDB4YmMsMHgwMCwweDRkLDB4MjAsMHgwZCwweDAwLAorMHg0ZiwweDFmLDB4MzksMHgwMCwweDU4LDB4MzEsMHhmNSwweDAwLDB4NWIsMHg3YywweGNjLDB4N2QsMHhmZiwweDEyLDB4MWMsMHhmZSwKKzB4MjIsMHg3NCwweDkwLDB4OTAsMHhmZiwweDkxLDB4ZjAsMHg5MCwweGZmLDB4ZmMsMHhlMCwweDIwLDB4ZTcsMHgyZCwweGMyLDB4YWYsCisweGFlLDB4NTksMHhhZiwweDU4LDB4NzUsMHg1YSwweDIwLDB4ZTUsMHg1YSwweDE0LDB4YzUsMHg1YSwweDYwLDB4MTksMHhlNCwweGZlLAorMHg3ZiwweDA1LDB4ZWUsMHg0ZiwweGNlLDB4MjQsMHhmZiwweGNlLDB4Y2YsMHgzNCwweGZmLDB4Y2YsMHg2MCwweDA3LDB4ZTQsMHg5MCwKKzB4ZmYsMHg5MiwweGYwLDB4ODAsMHhlZCwweDgwLDB4ZTAsMHg4ZSwweDU5LDB4OGYsMHg1OCwweDIyLDB4MTIsMHgwNSwweDAxLDB4N2QsCisweDA3LDB4N2MsMHhiNywweDEyLDB4MzIsMHgxMSwweDdkLDB4MGYsMHg3YywweDZlLDB4MTIsMHgzMiwweDJiLDB4NzgsMHg5NywweDdhLAorMHgwNiwweGU0LDB4ZjYsMHgwOCwweGRhLDB4ZmMsMHg3YSwweDA2LDB4MTIsMHgwNSwweGNmLDB4N2MsMHgwMywweDEyLDB4MGUsMHg1NywKKzB4N2MsMHgwNCwweDEyLDB4MGUsMHg1NywweDEyLDB4MjEsMHg4YiwweGU0LDB4ZmUsMHhmZiwweDdjLDB4MGYsMHgxMiwweDMxLDB4OWEsCisweGQyLDB4YTgsMHgyMiwweDEyLDB4MzAsMHg4NSwweGU0LDB4OTAsMHhmZCwweDQwLDB4ZjAsMHg5MCwweGZmLDB4ZjAsMHhlMCwweDMwLAorMHhlNCwweDA4LDB4NzQsMHgwMSwweDkwLDB4ZmQsMHg0MSwweGYwLDB4ODAsMHgwNSwweGU0LDB4OTAsMHhmZCwweDQxLDB4ZjAsMHg3ZCwKKzB4MGEsMHg3YywweDAwLDB4MTIsMHgyNCwweGIxLDB4MTIsMHgzMSwweDA4LDB4MjIsMHgxMiwweDMwLDB4ODUsMHg5MCwweGZkLDB4NDEsCisweGUwLDB4MTQsMHg3MCwweDBlLDB4OTAsMHhmZiwweGYwLDB4ZTAsMHg0NCwweDEwLDB4ZjAsMHg3YywweDAwLDB4MTIsMHgyNSwweDRhLAorMHg4MCwweDE5LDB4OTAsMHhmZCwweDQxLDB4ZTAsMHg3MCwweDBlLDB4OTAsMHhmZiwweGYwLDB4ZTAsMHg1NCwweGVmLDB4ZjAsMHg3YywKKzB4MDAsMHgxMiwweDI1LDB4NGEsMHg4MCwweDA1LDB4N2MsMHgxNywweDEyLDB4MjUsMHg0YSwweDEyLDB4MzEsMHgwOCwweDIyLDB4OTAsCisweGZmLDB4ZjAsMHhlMCwweDU0LDB4YWIsMHhmMCwweDkwLDB4ZmYsMHhmMCwweGUwLDB4NDQsMHgyMCwweGYwLDB4MjIsMHg4YywweDM3LAorMHg4ZCwweDM2LDB4NzgsMHg3YywweGVkLDB4ZjYsMHgwOCwweGVjLDB4ZjYsMHhlZCwweGZlLDB4ZWMsMHhmZCwweDdmLDB4MDEsMHg5MCwKKzB4MDAsMHgwNSwweDEyLDB4MDEsMHhlYywweDc4LDB4N2EsMHhmNiwweDc4LDB4N2MsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4ZWQsCisweGZlLDB4ZWMsMHhmZCwweDdmLDB4MDEsMHg5MCwweDAwLDB4MDQsMHgxMiwweDAxLDB4ZWMsMHg1NCwweDBmLDB4ZmMsMHg3ZCwweDdhLAorMHgxMiwweDE3LDB4OWQsMHg3OCwweDdhLDB4ZTYsMHg3MCwweDBkLDB4YWQsMHgzYSwweGFlLDB4MzksMHhhZiwweDM4LDB4ZTQsMHgxMiwKKzB4MDMsMHgwZiwweDdjLDB4MDgsMHgyMiwweDkwLDB4ZmYsMHhmMCwweGUwLDB4NTQsMHhmZSwweGYwLDB4OTAsMHhmZiwweGYwLDB4ZTAsCisweDU0LDB4ZmQsMHhmMCwweDgwLDB4MWUsMHg3OCwweDdjLDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweGVkLDB4ZmUsMHhlYywweGZkLAorMHg3ZiwweDAxLDB4OTAsMHgwMCwweDA4LDB4MTIsMHgwMiwweDBlLDB4MjUsMHhlMCwweDQ0LDB4MDEsMHg5MCwweGZmLDB4ZjMsMHhmMCwKKzB4MDIsMHgwNiwweGRiLDB4NzgsMHg3YywweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsMHhlZCwweGZlLDB4ZWMsMHhmZCwweDdmLDB4MDEsCisweDkwLDB4MDAsMHgwNiwweDEyLDB4MDIsMHgwZSwweDU0LDB4ZmUsMHg5MCwweGZmLDB4ZjMsMHhmMCwweDgwLDB4MmIsMHg3OCwweDdjLAorMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4ZWQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4OTAsMHgwMCwweDA4LDB4MTIsMHgwMiwKKzB4MGUsMHhmYSwweGViLDB4OTAsMHhmZiwweGYxLDB4ZjAsMHgxMiwweDA4LDB4Y2EsMHg0MCwweDBkLDB4YWQsMHgzYSwweGFlLDB4MzksCisweGFmLDB4MzgsMHhlNCwweDEyLDB4MDMsMHgwZiwweDdjLDB4MTgsMHgyMiwweDc4LDB4N2MsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLAorMHhlZCwweGZlLDB4ZWMsMHhmZCwweDdmLDB4MDEsMHg5MCwweDAwLDB4MDgsMHgxMiwweDAyLDB4MGUsMHg5MCwweGZmLDB4ZjEsMHhmMCwKKzB4MTIsMHgwOCwweGNhLDB4NDAsMHgwZCwweGFkLDB4M2EsMHhhZSwweDM5LDB4YWYsMHgzOCwweGU0LDB4MTIsMHgwMywweDBmLDB4N2MsCisweDE4LDB4MjIsMHg3OCwweDdjLDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwweDkwLAorMHgwMCwweDA2LDB4MTIsMHgwMiwweDBlLDB4NDQsMHgwMSwweDkwLDB4ZmYsMHhmMywweGYwLDB4NzgsMHg3ZCwweGU2LDB4MjQsMHgwMywKKzB4ZjYsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY2LDB4NzgsMHg3YSwweGU2LDB4MjQsMHhmZSwweDUwLDB4MDksMHg5MCwweGZmLDB4ZjAsCisweGUwLDB4NTQsMHhmZCwweGYwLDB4ODAsMHgwNywweDkwLDB4ZmYsMHhmMCwweGUwLDB4NDQsMHgwMiwweGYwLDB4ZTQsMHg5MCwweGZmLAorMHhmMSwweGYwLDB4NzgsMHg3YiwweDc2LDB4MDAsMHg3OCwweDdhLDB4ZTYsMHgyNCwweGZmLDB4ZmMsMHhlNCwweDM0LDB4ZmYsMHhmZCwKKzB4NzgsMHg3YiwweGU2LDB4N2YsMHgwMCwweGZlLDB4ZWMsMHhkMywweDllLDB4ZWYsMHg2NCwweDgwLDB4Y2QsMHg2NCwweDgwLDB4OWQsCisweDQwLDB4MmYsMHgxMiwweDA4LDB4YWYsMHg0MCwweDBmLDB4NzgsMHg3YiwweGU2LDB4YWQsMHgzYSwweGFlLDB4MzksMHhhZiwweDM4LAorMHgxMiwweDAzLDB4MGYsMHg3YywweDE4LDB4MjIsMHg5MCwweGZmLDB4ZjIsMHhlMCwweGZjLDB4NzgsMHg3YywweDg2LDB4ODMsMHgwOCwKKzB4ODYsMHg4MiwweGVjLDB4ZjAsMHg3OCwweDdiLDB4MDYsMHhhMywweDc4LDB4N2MsMHhhNiwweDgzLDB4MDgsMHhhNiwweDgyLDB4ODAsCisweGI1LDB4MTIsMHgwOCwweGFmLDB4NDAsMHgwZiwweDc4LDB4N2IsMHhlNiwweGFkLDB4M2EsMHhhZSwweDM5LDB4YWYsMHgzOCwweDEyLAorMHgwMywweDBmLDB4N2MsMHgxOCwweDIyLDB4OTAsMHhmZiwweGYyLDB4ZTAsMHhmYywweDc4LDB4N2MsMHg4NiwweDgzLDB4MDgsMHg4NiwKKzB4ODIsMHhlYywweGYwLDB4NzgsMHg3YSwweGU2LDB4YWQsMHgzYSwweGFlLDB4MzksMHhhZiwweDM4LDB4MTIsMHgwMywweDBmLDB4N2MsCisweDAwLDB4MjIsMHg4YywweDM3LDB4OGQsMHgzNiwweDc4LDB4N2MsMHhlZCwweGY2LDB4MDgsMHhlYywweGY2LDB4ZWQsMHhmZSwweGVjLAorMHhmZCwweDdmLDB4MDEsMHg5MCwweDAwLDB4MDUsMHgxMiwweDAxLDB4ZWMsMHg3OCwweDdiLDB4ZjYsMHg3OCwweDdjLDB4ZTYsMHhmZCwKKzB4MDgsMHhlNiwweGZjLDB4ZWQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4OTAsMHgwMCwweDA0LDB4MTIsMHgwMSwweGVjLDB4NTQsCisweDBmLDB4ZmMsMHg3ZCwweDdiLDB4MTIsMHgxNywweDlkLDB4NzgsMHg3YiwweGU2LDB4NzAsMHgwMywweDdjLDB4MDgsMHgyMiwweDkwLAorMHhmZiwweGYwLDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg5MCwweGZmLDB4ZjAsMHhlMCwweDU0LDB4ZmQsMHhmMCwweDgwLDB4MWIsMHg3OCwKKzB4N2MsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4ZWQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4OTAsMHgwMCwweDA4LDB4MTIsCisweDAyLDB4MGUsMHgyNSwweGUwLDB4OTAsMHhmZiwweGYzLDB4ZjAsMHg4MCwweDViLDB4NzgsMHg3YywweGU2LDB4ZmQsMHgwOCwweGU2LAorMHhmYywweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwweDkwLDB4MDAsMHgwNiwweDEyLDB4MDIsMHgwZSwweDU0LDB4ZmUsMHg5MCwKKzB4ZmYsMHhmMywweGYwLDB4ODAsMHgyMSwweDc4LDB4N2MsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4ZWQsMHhmZSwweGVjLDB4ZmQsCisweDdmLDB4MDEsMHg5MCwweDAwLDB4MDgsMHgxMiwweDAyLDB4MGUsMHhmYSwweGViLDB4OTAsMHhmZiwweGYxLDB4ZjAsMHgxMiwweDA4LAorMHhjYSwweDQwLDB4MDMsMHg3YywweDE4LDB4MjIsMHg3OCwweDdjLDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweGVkLDB4ZmUsMHhlYywKKzB4ZmQsMHg3ZiwweDAxLDB4OTAsMHgwMCwweDA4LDB4MTIsMHgwMiwweDBlLDB4OTAsMHhmZiwweGYxLDB4ZjAsMHgxMiwweDA4LDB4Y2EsCisweDQwLDB4MDMsMHg3YywweDE4LDB4MjIsMHg3OCwweDdkLDB4ZTYsMHgyNCwweDBhLDB4ZjYsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY2LAorMHg3OCwweDdhLDB4NzYsMHgwMCwweDc4LDB4N2IsMHhlNiwweDI0LDB4ZmYsMHhmYywweGU0LDB4MzQsMHhmZiwweGZkLDB4NzgsMHg3YSwKKzB4ZTYsMHg3ZiwweDAwLDB4ZmUsMHhlYywweGQzLDB4OWUsMHhlZiwweDY0LDB4ODAsMHhjZCwweDY0LDB4ODAsMHg5ZCwweDQwLDB4MjEsCisweDc4LDB4N2MsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4ZTAsMHg5MCwweGZmLDB4ZjEsMHhmMCwweDEyLDB4MDgsMHhjYSwweDQwLAorMHgwMywweDdjLDB4MTgsMHgyMiwweDc4LDB4N2EsMHgwNiwweDc4LDB4N2QsMHgwNiwweGU2LDB4MTgsMHg3MCwweDAxLDB4MDYsMHg4MCwKKzB4YzMsMHg5MCwweGZmLDB4ZjAsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDc4LDB4N2MsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4ZTAsCisweDkwLDB4ZmYsMHhmMSwweGYwLDB4MTIsMHgwOCwweGNhLDB4NDAsMHgwMywweDdjLDB4MTgsMHgyMiwweDdjLDB4MDAsMHgyMiwweDkwLAorMHhmZiwweGYwLDB4ZTAsMHgyMCwweGU3LDB4MTIsMHg5MCwweGZmLDB4ZjAsMHhlMCwweDMwLDB4ZTUsMHgwOSwweDkwLDB4ZmYsMHhmMCwKKzB4ZTAsMHg0NCwweDIwLDB4ZjAsMHhjMywweDIyLDB4ODAsMHhlNywweGQzLDB4MjIsMHg5MCwweGZmLDB4ZjAsMHhlMCwweDIwLDB4ZTMsCisweDEyLDB4OTAsMHhmZiwweGYwLDB4ZTAsMHgzMCwweGU1LDB4MDksMHg5MCwweGZmLDB4ZjAsMHhlMCwweDQ0LDB4MjAsMHhmMCwweGMzLAorMHgyMiwweDgwLDB4ZTcsMHhkMywweDIyLDB4OGMsMHg0MiwweDhkLDB4NDEsMHg3YywweDAwLDB4ZWQsMHg1NCwweGYwLDB4ZmQsMHhlYywKKzB4NzAsMHgwMywweGVkLDB4NjQsMHgzMCwweDcwLDB4MDUsMHg3NSwweDNlLDB4MDMsMHg4MCwweDAzLDB4NzUsMHgzZSwweDA0LDB4YWMsCisweDNlLDB4MTIsMHgwZiwweDdjLDB4NzUsMHg4MywweDAwLDB4ODUsMHg4MywweDQwLDB4ZTUsMHg0MSwweDU0LDB4MGYsMHhmNSwweDNmLAorMHhlNSwweDQwLDB4NzAsMHgwNCwweGU1LDB4M2YsMHg2NCwweDAzLDB4NzAsMHgzNSwweGU1LDB4M2UsMHgyNCwweGZkLDB4NzUsMHhmMCwKKzB4MGEsMHhhNCwweDI0LDB4MGEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZkLDB4ZjUsMHg4MywweGUwLDB4MzAsMHhlNiwweDA1LDB4MTIsCisweDEwLDB4NjcsMHg4MCwweDE5LDB4ZTUsMHgzZSwweDI0LDB4OTcsMHhmOCwweGM2LDB4NTQsMHhmYiwweGY2LDB4NzgsMHhhMywweGU2LAorMHgyNCwweDA1LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweDc0LDB4MGYsMHhmMCwweDgwLDB4NTksMHhlNSwKKzB4NDAsMHg3MCwweDA0LDB4ZTUsMHgzZiwweDY0LDB4MDQsMHg3MCwweDQ4LDB4ZTUsMHgzZSwweDI0LDB4ZmQsMHg3NSwweGYwLDB4MGEsCisweGE0LDB4MjQsMHgwYSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmQsMHhmNSwweDgzLDB4ZTAsMHgzMCwweGU1LDB4MDcsMHhhYywweDQyLAorMHhhZCwweDQxLDB4MTIsMHgxYywweDkzLDB4ZTUsMHg0MiwweDMwLDB4ZTIsMHgxNSwweDc4LDB4YTcsMHhlNiwweDMwLDB4ZTAsMHgwZiwKKzB4NzgsMHhhNywweGU2LDB4MzAsMHhlMSwweDA5LDB4ZTQsMHhmZiwweDA0LDB4ZmUsMHg3YywweDA0LDB4MTIsMHgzMSwweDlhLDB4NzgsCisweGEzLDB4ZTYsMHgyNCwweDA2LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweDc0LDB4MGYsMHhmMCwweDgwLAorMHgwNywweGU0LDB4ZmMsMHg3ZCwweGVlLDB4MTIsMHgxYywweDkzLDB4YzIsMHgwMywweDIyLDB4MTIsMHgzMCwweDg1LDB4MTIsMHgwZiwKKzB4N2MsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDA2LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4OTAsCisweGZkLDB4NDAsMHhmMCwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLAorMHhlMCwweDkwLDB4ZmQsMHg0MSwweGYwLDB4YzIsMHgwMywweDdkLDB4MDIsMHg3YywweDAwLDB4MTIsMHgyNCwweGIxLDB4MTIsMHgzMSwKKzB4MDgsMHgyMiwweDEyLDB4MzAsMHg4NSwweDc4LDB4OGYsMHhlYywweGY2LDB4ZWMsMHgyNCwweDk3LDB4ZjgsMHhlNiwweDMwLDB4ZTEsCisweDA3LDB4N2MsMHgxMywweDEyLDB4MjUsMHg0YSwweDgwLDB4MGYsMHg5MCwweGZkLDB4NDEsMHhlMCwweGZkLDB4NzgsMHg4ZiwweGU2LAorMHhmYywweDEyLDB4MTMsMHhmZCwweDEyLDB4MjUsMHg0YSwweDEyLDB4MzEsMHgwOCwweDIyLDB4MTIsMHgzMCwweDg1LDB4NzgsMHg4ZiwKKzB4ZWMsMHhmNiwweDdkLDB4MDAsMHgxMiwweDBmLDB4MGIsMHgxMiwweDI1LDB4NGEsMHgxMiwweDMxLDB4MDgsMHgyMiwweDEyLDB4MzAsCisweDg1LDB4NzgsMHg4ZiwweGVjLDB4ZjYsMHhlYywweDI0LDB4OTcsMHhmOCwweGU2LDB4MzAsMHhlMiwweDA3LDB4N2MsMHgxMywweDEyLAorMHgyNSwweDRhLDB4ODAsMHgxYiwweDc4LDB4OGYsMHhlNiwweDI0LDB4OTcsMHhmOCwweGU2LDB4MjAsMHhlMSwweDA3LDB4N2MsMHgxMiwKKzB4MTIsMHgyNSwweDRhLDB4ODAsMHgwYSwweDc4LDB4OGYsMHhlNiwweGZjLDB4MTIsMHgxNCwweDIxLDB4MTIsMHgyNSwweDRhLDB4MTIsCisweDMxLDB4MDgsMHgyMiwweDEyLDB4MzAsMHg4NSwweDc4LDB4OGYsMHhlYywweGY2LDB4ZWMsMHgyNCwweDk3LDB4ZjgsMHhlNiwweDIwLAorMHhlMiwweDA3LDB4N2MsMHgxMSwweDEyLDB4MjUsMHg0YSwweDgwLDB4MGEsMHg3OCwweDhmLDB4ZTYsMHhmYywweDEyLDB4MTUsMHgyMiwKKzB4MTIsMHgyNSwweDRhLDB4MTIsMHgzMSwweDA4LDB4MjIsMHgxMiwweDMwLDB4ODUsMHg3OCwweDhmLDB4ZWMsMHhmNiwweDEyLDB4MGYsCisweDdjLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwOSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDkwLAorMHhmZCwweDQ3LDB4ZjAsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDBhLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywKKzB4ZTAsMHg5MCwweGZkLDB4NDgsMHhmMCwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDMsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsCisweGY1LDB4ODMsMHhlMCwweGZjLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LAorMHg4MywweGUwLDB4ZjUsMHg1YywweDc4LDB4YTMsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwKKzB4ODMsMHhlMCwweGY1LDB4NWQsMHg4YywweDViLDB4ZTQsMHhlYywweDMzLDB4MzMsMHg1NCwweDAxLDB4NzgsMHg4ZiwweGY2LDB4NjAsCisweDA4LDB4ZTUsMHg1YywweDMwLDB4ZTEsMHgwMywweDc4LDB4OGYsMHgwNiwweDc4LDB4OGYsMHhlNiwweDkwLDB4ZmQsMHg0OSwweGYwLAorMHg3OCwweGExLDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4ZmQsMHhhMywKKzB4ZTAsMHg1NCwweDBjLDB4ZmMsMHhlZCwweDU0LDB4ZTYsMHg4YywweDVmLDB4ZjUsMHg1ZSwweGU1LDB4NWIsMHgzMCwweGU1LDB4MDMsCisweDQzLDB4NWYsMHgwMSwweGU1LDB4NWMsMHgyMCwweGU1LDB4MGUsMHhlNSwweDViLDB4NTQsMHg3ZiwweDcwLDB4MDgsMHhlNSwweDViLAorMHgyMCwweGU3LDB4MDMsMHg0MywweDVmLDB4MDIsMHhlNSwweDViLDB4MzAsMHhlMywweDAzLDB4NDMsMHg1ZiwweDEwLDB4ZTUsMHg1YiwKKzB4MzAsMHhlMiwweDAzLDB4NDMsMHg1ZiwweDIwLDB4ZTUsMHg1YiwweDU0LDB4MDMsMHg2MCwweDAzLDB4NDMsMHg1ZiwweDQwLDB4ZTUsCisweDViLDB4MzAsMHhlMSwweDAzLDB4NDMsMHg1ZiwweDgwLDB4ZTUsMHg1YiwweDMwLDB4ZTQsMHgwMywweDQzLDB4NWUsMHgwMSwweGU1LAorMHg1YiwweDMwLDB4ZTYsMHgwMywweDQzLDB4NWUsMHgwOCwweGU1LDB4NWMsMHgyMCwweGU0LDB4MGUsMHhlNSwweDViLDB4NTQsMHg3ZiwKKzB4NzAsMHgwOCwweGU1LDB4NWIsMHgyMCwweGU3LDB4MDMsMHg0MywweDVlLDB4MTAsMHg1MywweDVmLDB4ZmIsMHg1MywweDVlLDB4ZjksCisweGFkLDB4NWUsMHhlNSwweDVmLDB4OTAsMHhmZCwweDQyLDB4Y2QsMHhmMCwweGEzLDB4Y2QsMHhmMCwweGU1LDB4NWQsMHgzMCwweGUzLAorMHgwZCwweGU1LDB4NWQsMHg1NCwweDMwLDB4YzQsMHg1NCwweDBmLDB4OTAsMHhmZCwweDQ1LDB4ZjAsMHg4MCwweDA1LDB4ZTQsMHg5MCwKKzB4ZmQsMHg0NSwweGYwLDB4ZTUsMHg1ZCwweDU0LDB4MDMsMHg5MCwweGZkLDB4NDQsMHhmMCwweGU1LDB4NWQsMHg1NCwweDA0LDB4YzMsCisweDEzLDB4OTAsMHhmZCwweDQ2LDB4ZjAsMHg5MCwweGZkLDB4NDQsMHhlMCwweDcwLDB4MGUsMHg3ZCwweDNkLDB4N2UsMHhmZCwweDdmLAorMHgwMSwweDc0LDB4MDEsMHg5MCwweDAwLDB4MDksMHgxMiwweDAxLDB4NDIsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDA4LDB4ZjUsMHg4MiwKKzB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg3YywweDAwLDB4ZmQsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDA3LDB4ZjUsCisweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg3ZiwweDAwLDB4NGMsMHhmZSwweGVmLDB4NGQsMHg5MCwweGZkLAorMHg0MCwweGYwLDB4YTMsMHhjZSwweGYwLDB4Y2UsMHhjMiwweDAzLDB4N2QsMHgwYSwweDdjLDB4MDAsMHgxMiwweDI0LDB4YjEsMHgxMiwKKzB4MzEsMHgwOCwweDIyLDB4MTIsMHgzMCwweDg1LDB4NzgsMHg4ZiwweGVjLDB4ZjYsMHg3OCwweDk0LDB4NzYsMHgwMSwweDA4LDB4NzYsCisweGZkLDB4MDgsMHg3NiwweDQwLDB4NzgsMHg5MSwweDc2LDB4MGMsMHg3OCwweDk0LDB4MTIsMHgwNCwweDY1LDB4MTIsMHgwMiwweDE0LAorMHg3OCwweDkyLDB4Y2IsMHhmNiwweGNiLDB4MDgsMHhmNiwweDdmLDB4MDAsMHhlZiwweDI0LDB4ZWIsMHg0MCwweDFmLDB4ZTQsMHhlZiwKKzB4MjUsMHhlMCwweDkwLDB4MzQsMHhiZiwweGZkLDB4OTMsMHhjZCwweDA0LDB4OTMsMHg3OCwweDkzLDB4NjYsMHg3MCwweDAzLDB4ZWQsCisweDE4LDB4NjYsMHg3MCwweDA2LDB4NzgsMHg5MSwweDc2LDB4MDAsMHg4MCwweDAzLDB4MGYsMHg4MCwweGRjLDB4NzgsMHg5MCwweGVmLAorMHhmNiwweDc4LDB4OTQsMHgxMiwweDA0LDB4NjUsMHg5MCwweDAwLDB4MDIsMHgxMiwweDAyLDB4MGUsMHg3OCwweDkyLDB4Y2IsMHhmNiwKKzB4Y2IsMHgwOCwweGY2LDB4NTQsMHgwNCwweGNiLDB4NTQsMHgwNiwweDRiLDB4NjAsMHgwNCwweDc4LDB4OTEsMHg3NiwweDBiLDB4NzgsCisweDkzLDB4ZTYsMHgzMCwweGUzLDB4MTMsMHg3OCwweDk0LDB4MTIsMHgwNCwweDY1LDB4OTAsMHgwMCwweDA1LDB4MTIsMHgwMSwweGVjLAorMHgyNCwweGZiLDB4NTAsMHgwNCwweDc4LDB4OTEsMHg3NiwweDBkLDB4NzgsMHg5MywweGU2LDB4NTQsMHhjMCwweDdkLDB4MDAsMHg2NCwKKzB4YzAsMHg0ZCwweDcwLDB4MDQsMHg3OCwweDkxLDB4NzYsMHgwYiwweDc4LDB4OTQsMHgxMiwweDA0LDB4NjUsMHg5MCwweDAwLDB4MDQsCisweDEyLDB4MDEsMHhlYywweDI0LDB4ZmMsMHg1MCwweDA0LDB4NzgsMHg5MSwweDc2LDB4MGYsMHg3OCwweDk0LDB4MTIsMHgwNCwweDY1LAorMHg5MCwweDAwLDB4MDYsMHgxMiwweDAxLDB4ZWMsMHgyNCwweGZkLDB4NTAsMHgwNCwweDc4LDB4OTEsMHg3NiwweDBlLDB4NzgsMHg5NCwKKzB4MTIsMHgwNCwweDY1LDB4OTAsMHgwMCwweDA5LDB4MTIsMHgwMSwweGVjLDB4MjQsMHhmZCwweDUwLDB4MDQsMHg3OCwweDkxLDB4NzYsCisweDBhLDB4NzgsMHg5MSwweGU2LDB4NzAsMHgyYSwweDc4LDB4OGYsMHhlNiwweGZjLDB4MTIsMHgwZiwweDdjLDB4NzgsMHg5NCwweDEyLAorMHgwNCwweDY1LDB4NzgsMHhhMSwweGU2LDB4ZjksMHg3OCwweGEwLDB4ZTYsMHhmYSwweDdiLDB4MDEsMHg3NCwweDBhLDB4NzgsMHgwMCwKKzB4MTIsMHgwMywweDNmLDB4YzIsMHgwMywweDc4LDB4OGYsMHhlNiwweGZjLDB4MTIsMHgxMSwweDIzLDB4NzgsMHg5MSwweGVjLDB4ZjYsCisweDc4LDB4OTEsMHhlNiwweGZjLDB4MTIsMHgyNSwweDRhLDB4MTIsMHgzMSwweDA4LDB4MjIsMHgxMiwweDMwLDB4ODUsMHg3OCwweDhmLAorMHhlYywweGY2LDB4MTIsMHgwZiwweDdjLDB4NzgsMHg4ZiwweGU2LDB4MjQsMHhmZCwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHgxYywKKzB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZCwweGY1LDB4ODMsMHhhYywweDgyLDB4YWQsMHg4MywweDc4LDB4YTAsMHg4NiwweDgzLDB4MDgsCisweDg2LDB4ODIsMHhlYywweGY5LDB4ZWQsMHhmYSwweDdiLDB4MGEsMHg3OCwweDAxLDB4MTIsMHgwMywweGE3LDB4YzIsMHgwMywweDc4LAorMHg4ZiwweGU2LDB4ZmMsMHgxMiwweDExLDB4MjMsMHgxMiwweDMxLDB4MDgsMHgyMiwweDhkLDB4MmIsMHg4YywweDJhLDB4ZWQsMHg2MCwKKzB4NDAsMHg3NSwweDI3LDB4MDEsMHg3NSwweDI5LDB4NDgsMHg3NSwweDI4LDB4ZmYsMHhlNSwweDJhLDB4MjQsMHhmZCwweGZjLDB4ZTQsCisweDM0LDB4ZmYsMHhmZCwweGVjLDB4N2MsMHgwMywweDI1LDB4ZTAsMHhjZCwweDMzLDB4Y2QsMHhkYywweGY5LDB4ZmMsMHhlNSwweDI5LAorMHgyYywweGY1LDB4MjksMHhlNSwweDI4LDB4M2QsMHhmNSwweDI4LDB4YWQsMHgyOSwweGFlLDB4MjgsMHhhZiwweDI3LDB4NzQsMHg4MCwKKzB4OTAsMHgwMCwweDA2LDB4MTIsMHgwMywweDE3LDB4NzQsMHg4MCwweDkwLDB4MDAsMHgwMiwweDEyLDB4MDMsMHgxNywweDEyLDB4MGYsCisweGQzLDB4ZTUsMHgyYiwweDE0LDB4NjAsMHgzYiwweDc1LDB4MjcsMHgwMSwweDc1LDB4MjksMHgwOCwweDc1LDB4MjgsMHhmZiwweGU1LAorMHgyYSwweDI0LDB4ZmQsMHhmYywweGU0LDB4MzQsMHhmZiwweGZkLDB4ZWMsMHg3YywweDAzLDB4MjUsMHhlMCwweGNkLDB4MzMsMHhjZCwKKzB4ZGMsMHhmOSwweGZjLDB4ZTUsMHgyOSwweDJjLDB4ZjUsMHgyOSwweGU1LDB4MjgsMHgzZCwweGY1LDB4MjgsMHhhZCwweDI5LDB4YWUsCisweDI4LDB4YWYsMHgyNywweGU0LDB4OTAsMHgwMCwweDA2LDB4MTIsMHgwMywweDE3LDB4ZTQsMHg5MCwweDAwLDB4MDIsMHgxMiwweDAzLAorMHgxNywweDIyLDB4MTIsMHgzMCwweDg1LDB4NzgsMHg4ZiwweGVjLDB4ZjYsMHhlYywweDI0LDB4OTcsMHhmOCwweGU2LDB4MzAsMHhlMiwKKzB4MDksMHg3OCwweDhmLDB4ZTYsMHhmYywweDEyLDB4MTUsMHgyMiwweGQyLDB4MDAsMHg3OCwweDhmLDB4ZTYsMHhmYywweDEyLDB4MGYsCisweDdjLDB4NzgsMHg5MCwweDc2LDB4MDAsMHg5MCwweGZkLDB4NDEsMHhlMCwweDMwLDB4ZTcsMHgwNCwweDc4LDB4OTAsMHg3NiwweDAxLAorMHg3OCwweDkwLDB4ZTYsMHhmZCwweDc4LDB4OGYsMHhlNiwweGZjLDB4MTIsMHgwZCwweDNhLDB4YzIsMHgwMywweDMwLDB4MDAsMHgwNywKKzB4NzgsMHg4ZiwweGU2LDB4ZmMsMHgxMiwweDE0LDB4MjEsMHg3YywweDAwLDB4MTIsMHgyNSwweDRhLDB4MTIsMHgzMSwweDA4LDB4MjIsCisweDc4LDB4YTMsMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg0NCwweDAxLAorMHhmMCwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHgzMCwKKzB4ZTAsMHgwMiwweDgwLDB4ZWQsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDBiLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsCisweDgzLDB4ZTAsMHg1NCwweGY4LDB4ZjAsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLAorMHhmNSwweDgzLDB4ZTAsMHg0NCwweDgwLDB4ZjAsMHgyMiwweGMyLDB4MDMsMHg4YywweDU4LDB4MTIsMHgwZiwweDdjLDB4NzgsMHhhMCwKKzB4ODYsMHg4MywweDA4LDB4ODYsMHg4MiwweDc5LDB4ZWUsMHg3YSwweDM0LDB4N2IsMHgwYSwweDc4LDB4MDEsMHgxMiwweDAzLDB4ZjUsCisweDEyLDB4MGUsMHgxMCwweGFjLDB4NTgsMHg3ZCwweDAyLDB4MTIsMHgwZCwweDNhLDB4YzIsMHgwMywweGFjLDB4NTgsMHgxMiwweDExLAorMHgyMywweDIyLDB4OGQsMHg1MywweDhlLDB4NTIsMHg4ZiwweDUxLDB4OGMsMHg1MCwweDEyLDB4MGYsMHg3YywweDc1LDB4NGYsMHgwMCwKKzB4NzgsMHhhMywweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDIwLDB4ZTQsCisweDE2LDB4ZTUsMHg0ZiwweDI0LDB4ZjYsMHg0MCwweDEwLDB4MDUsMHg0ZiwweGMyLDB4MDMsMHg3YywweDE4LDB4MTIsMHgzMiwweDQ4LAorMHhhYywweDUwLDB4MTIsMHgwZiwweDdjLDB4ODAsMHhkOSwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwKKzB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDIwLDB4ZTQsMHgwNSwweGMyLDB4MDMsMHg3YywweDAyLDB4MjIsMHg3OCwweGEzLDB4ZTYsCisweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg1NCwweDBmLDB4NjAsMHgxNiwweDc4LAorMHhhMywweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDU0LDB4MGYsMHhmMCwKKzB4YzIsMHgwMywweDdjLDB4MDEsMHgyMiwweDc4LDB4YTIsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4ZTAsMHhhZCwweDUzLDB4YWUsCisweDUyLDB4YWYsMHg1MSwweDEyLDB4MDMsMHgwZiwweGMyLDB4MDMsMHg3YywweDAwLDB4MjIsMHg4ZCwweDMxLDB4OGMsMHgzMCwweDEyLAorMHgxNSwweDIyLDB4ZTUsMHgzMSwweDYwLDB4MjAsMHhlNSwweDMwLDB4YjQsMHgwMywweDBjLDB4N2MsMHgwMSwweDEyLDB4MjQsMHg3YywKKzB4N2MsMHg4MSwweDEyLDB4MjQsMHg3YywweDgwLDB4MGYsMHhlNSwweDMwLDB4YjQsMHgwNCwweDBhLDB4N2MsMHgwMiwweDEyLDB4MjQsCisweDdjLDB4N2MsMHg4MiwweDEyLDB4MjQsMHg3YywweGFjLDB4MzAsMHgxMiwweDBmLDB4N2MsMHhlNSwweDMxLDB4NjAsMHgxYSwweDc4LAorMHhhNCwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlMCwweDU0LDB4ZTcsMHhmMCwweGEzLDB4YTMsMHhhMywweGEzLDB4ZTAsMHg1NCwKKzB4ZTcsMHhmMCwweGFjLDB4MzAsMHg3ZCwweDAyLDB4MTIsMHgwZCwweDNhLDB4NzgsMHhhMCwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsCisweDc5LDB4ZjgsMHg3YSwweDM0LDB4N2IsMHgwYSwweDc4LDB4MDEsMHgxMiwweDAzLDB4ZjUsMHhjMiwweDAzLDB4ZTUsMHgzMCwweDI0LAorMHg5NywweGY4LDB4YzYsMHg1NCwweGZkLDB4ZjYsMHhhYywweDMwLDB4MTIsMHgxMSwweDIzLDB4MjIsMHg4YywweDI2LDB4MzAsMHgwMywKKzB4MDUsMHgxMiwweDMxLDB4ZTcsMHg4MCwweGY4LDB4N2MsMHgwYSwweDEyLDB4MzAsMHhmYSwweGQyLDB4MDMsMHhlNSwweDI2LDB4MjQsCisweGZkLDB4NzgsMHg5ZCwweGY2LDB4NzAsMHgwOSwweDc4LDB4YTQsMHg3NiwweGZmLDB4MDgsMHg3NiwweGUwLDB4ODAsMHgwNywweDc4LAorMHhhNCwweDc2LDB4ZmYsMHgwOCwweDc2LDB4ZTIsMHg3OCwweDlkLDB4ZTYsMHg3NSwweGYwLDB4MTAsMHhhNCwweGFkLDB4ZjAsMHhmYywKKzB4MjQsMHhhMCwweDc4LDB4YTMsMHhmNiwweGVkLDB4MzQsMHhmZiwweDE4LDB4ZjYsMHg3OCwweDlkLDB4ZTYsMHg3NSwweGYwLDB4MGEsCisweGE0LDB4MjQsMHgwOCwweGZjLDB4ZTQsMHgzNCwweGZkLDB4ZmQsMHg3OCwweGEwLDB4ZWQsMHhmNiwweDA4LDB4ZWMsMHhmNiwweDEyLAorMHgzMSwweDkzLDB4MjIsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywKKzB4ZTAsMHgzMCwweGU3LDB4MjIsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsCisweDgzLDB4ZTAsMHg1NCwweDdmLDB4ZjAsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLAorMHhmNSwweDgzLDB4ZTAsMHg0NCwweDgwLDB4ZjAsMHgyMiwweDc4LDB4YTQsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4ZTAsMHg1NCwKKzB4N2YsMHhmMCwweGFkLDB4ODMsMHhlNSwweDgyLDB4MjQsMHgwNCwweGZjLDB4ZTQsMHgzZCwweDhjLDB4ODIsMHhmNSwweDgzLDB4ZTAsCisweDU0LDB4N2YsMHhmMCwweDc4LDB4YTMsMHhlNiwweDI0LDB4MGIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLAorMHhlMCwweDU0LDB4ZjgsMHhmMCwweDc4LDB4YTUsMHhlNiwweDI0LDB4MDEsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwKKzB4ODMsMHhlMCwweDQ0LDB4MDMsMHhmMCwweDc4LDB4YTUsMHhlNiwweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsCisweGY1LDB4ODMsMHhlMCwweDQ0LDB4MDMsMHhmMCwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LAorMHgwMCwweGY1LDB4ODMsMHg3NCwweDBmLDB4ZjAsMHgyMiwweDc4LDB4YTQsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4ZTAsMHg1NCwKKzB4M2YsMHhmMCwweGFkLDB4ODMsMHhlNSwweDgyLDB4MjQsMHgwNCwweGZjLDB4ZTQsMHgzZCwweDhjLDB4ODIsMHhmNSwweDgzLDB4ZTAsCisweDU0LDB4M2YsMHhmMCwweDc4LDB4OWQsMHhlNiwweDI0LDB4OWUsMHhmOCwweGU2LDB4ZmMsMHg3OCwweGE1LDB4ZTYsMHgyNCwweDAxLAorMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDc4LDB4OWQsMHhlNiwweDI0LDB4OWUsMHhmOCwKKzB4ZTYsMHhmYywweDc4LDB4YTUsMHhlNiwweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZWMsCisweGYwLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwYiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDU0LAorMHhmYiwweDQ0LDB4MDIsMHhmNSwweDI2LDB4NzgsMHhhMSwweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwKKzB4ZjUsMHg4MywweGUwLDB4MzAsMHhlNSwweDAzLDB4NDMsMHgyNiwweDAxLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsCisweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4MzAsMHhlMCwweDAzLDB4MTIsMHgwZiwweGQzLDB4ZTUsMHgyNiwweGZjLAorMHg3OCwweGEzLDB4ZTYsMHgyNCwweDBiLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHg3OCwKKzB4YTMsMHhlNiwweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4NzQsMHgwZiwweGYwLDB4NzgsCisweGE0LDB4ODYsMHg4MywweDA4LDB4ODYsMHg4MiwweGUwLDB4NDQsMHg4MCwweGYwLDB4YTMsMHhhMywweGEzLDB4YTMsMHhlMCwweDQ0LAorMHg4MCwweGYwLDB4MjIsMHg4YywweDJhLDB4MTIsMHgwZiwweDdjLDB4NzgsMHhhMSwweGU2LDB4MjQsMHgwOCwweGY1LDB4ODIsMHgxOCwKKzB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4ZmMsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDBhLDB4ZjUsMHg4MiwweDE4LDB4ZTYsCisweDM0LDB4MDAsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDc4LDB4YTEsMHhlNiwweDI0LDB4MDcsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LAorMHgwMCwweGY1LDB4ODMsMHhlMCwweGZjLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwOSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwKKzB4ZjUsMHg4MywweGVjLDB4ZjAsMHg3OCwweGEwLDB4ODYsMHg4MywweDA4LDB4ODYsMHg4MiwweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmMsCisweGVkLDB4ZmUsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDA4LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGVlLAorMHhmMCwweGVjLDB4ZmUsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDA3LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywKKzB4ZWUsMHhmMCwweDhjLDB4MjksMHg4ZCwweDI4LDB4YzMsMHhlYywweDk0LDB4MDIsMHhlZCwweDk0LDB4MDYsMHg0MCwweDA1LDB4NzUsCisweDI3LDB4N2MsMHg4MCwweDMzLDB4ZDMsMHhlNSwweDI5LDB4OTQsMHg4MSwweGU1LDB4MjgsMHg5NCwweDAxLDB4NDAsMHgwNSwweDc1LAorMHgyNywweDNjLDB4ODAsMHgyMywweGQzLDB4ZTUsMHgyOSwweDk0LDB4YzAsMHhlNSwweDI4LDB4OTQsMHgwMCwweDQwLDB4MDUsMHg3NSwKKzB4MjcsMHgxOCwweDgwLDB4MTMsMHhkMywweGU1LDB4MjksMHg5NCwweDMwLDB4ZTUsMHgyOCwweDk0LDB4MDAsMHg0MCwweDA1LDB4NzUsCisweDI3LDB4MGMsMHg4MCwweDAzLDB4NzUsMHgyNywweDA4LDB4YWYsMHgyNywweGU0LDB4ZWYsMHg1NCwweDdjLDB4NDQsMHg4MywweGZmLAorMHg4ZiwweDI3LDB4ZTUsMHgyNywweGZjLDB4NzgsMHhhNSwweGU2LDB4MjQsMHgwMSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwKKzB4ZjUsMHg4MywweGVjLDB4ZjAsMHhlNSwweDI3LDB4ZmMsMHg3OCwweGE1LDB4ZTYsMHgyNCwweDA1LDB4ZjUsMHg4MiwweDE4LDB4ZTYsCisweDM0LDB4MDAsMHhmNSwweDgzLDB4ZWMsMHhmMCwweGU1LDB4MjcsMHhmYywweDc4LDB4OWQsMHhlNiwweDI0LDB4OWUsMHhmOCwweGVjLAorMHhmNiwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHhmNSwKKzB4MjcsMHg3OCwweGExLDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGEzLDB4ZTAsCisweDMwLDB4ZTMsMHgxNywweDUzLDB4MjcsMHhjNywweDc4LDB4YTEsMHhlNiwweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LAorMHgwMCwweGY1LDB4ODMsMHhlMCwweDkwLDB4MzQsMHhlOSwweDkzLDB4NDIsMHgyNywweDc4LDB4YTEsMHhlNiwweDI0LDB4MDIsMHhmNSwKKzB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDMwLDB4ZTcsMHgwNSwweDQzLDB4MjcsMHg0MCwweDgwLDB4MDMsCisweDUzLDB4MjcsMHhiZiwweDUzLDB4MjcsMHhmYiwweDc4LDB4YTEsMHhlNiwweDI0LDB4MDYsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LAorMHgwMCwweGY1LDB4ODMsMHhlMCwweDYwLDB4MDMsMHg0MywweDI3LDB4MDQsMHg1MywweDI3LDB4ZmMsMHg3OCwweGExLDB4ZTYsMHgyNCwKKzB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg0MiwweDI3LDB4NDMsMHgyNywweDgwLDB4ZTUsCisweDI3LDB4ZmMsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGVjLAorMHhmMCwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHhmNSwKKzB4MjcsMHg3OCwweGExLDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGEzLDB4ZTAsCisweDMwLDB4ZTEsMHgwNSwweDUzLDB4MjcsMHhkZiwweDgwLDB4MDMsMHg0MywweDI3LDB4MjAsMHg3OCwweGExLDB4ZTYsMHgyNCwweDAyLAorMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHgzMCwweGU0LDB4MDUsMHg1MywweDI3LDB4ZWYsMHg4MCwKKzB4MDMsMHg0MywweDI3LDB4MTAsMHg3OCwweGExLDB4ZTYsMHgyNCwweDA5LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsCisweDgzLDB4ZTAsMHhiNCwweDAyLDB4MDMsMHg0MywweDI3LDB4MDIsMHhlNSwweDI3LDB4ZmMsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDA0LAorMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDMsMHhmNSwKKzB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweGY1LDB4MjcsMHg3OCwweGExLDB4ZTYsMHgyNCwweDA5LDB4ZjUsCisweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg3MCwweDA1LDB4NTMsMHgyNywweDdmLDB4ODAsMHgwMywweDQzLAorMHgyNywweDgwLDB4NzgsMHhhMSwweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhhMywKKzB4ZTAsMHgzMCwweGUwLDB4MDUsMHg0MywweDI3LDB4MjAsMHg4MCwweDAzLDB4NTMsMHgyNywweGRmLDB4NzgsMHhhMSwweGU2LDB4MjQsCisweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4MzAsMHhlMywweDA1LDB4NDMsMHgyNywweDQwLAorMHg4MCwweDAzLDB4NTMsMHgyNywweGJmLDB4NzgsMHhhMSwweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwKKzB4ZjUsMHg4MywweGUwLDB4MzAsMHhlMCwweDA1LDB4NDMsMHgyNywweDEwLDB4ODAsMHgwMywweDUzLDB4MjcsMHhlZiwweDc4LDB4YTEsCisweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhhMywweGUwLDB4MzAsMHhlNCwweDA1LAorMHg0MywweDI3LDB4MDgsMHg4MCwweDAzLDB4NTMsMHgyNywweGY3LDB4NzgsMHhhMSwweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwKKzB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGEzLDB4ZTAsMHgzMCwweGU1LDB4MDUsMHg0MywweDI3LDB4MDQsMHg4MCwweDAzLDB4NTMsCisweDI3LDB4ZmIsMHg3OCwweGExLDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGEzLAorMHhlMCwweDMwLDB4ZTYsMHgwNSwweDQzLDB4MjcsMHgwMSwweDgwLDB4MDMsMHg1MywweDI3LDB4ZmUsMHg3OCwweGExLDB4ZTYsMHgyNCwKKzB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4YTMsMHhlMCwweDMwLDB4ZTcsMHgwNSwweDQzLDB4MjcsCisweDAyLDB4ODAsMHgwMywweDUzLDB4MjcsMHhmZCwweGU1LDB4MjcsMHhmYywweDc4LDB4YTMsMHhlNiwweDI0LDB4MDMsMHhmNSwweDgyLAorMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywweGYwLDB4YzIsMHgwMywweDdjLDB4MDAsMHgyMiwweDhkLDB4MjcsMHg4YywKKzB4MjYsMHhlZCwweDU0LDB4MDMsMHgxNCwweDYwLDB4MDMsMHg3YywweDEwLDB4MjIsMHhlNSwweDI3LDB4NTQsMHg3YywweDI0LDB4ZmMsCisweDQwLDB4MDMsMHg3YywweDBiLDB4MjIsMHhlNSwweDI2LDB4MjQsMHg5NywweGY4LDB4YzYsMHg0NCwweDAyLDB4ZjYsMHg3YywweDAwLAorMHgyMiwweDhjLDB4MzAsMHgxMiwweDBmLDB4N2MsMHhlNSwweDMwLDB4MjQsMHg5NywweGY4LDB4ZTYsMHgyMCwweGUyLDB4NGYsMHhhYywKKzB4MzAsMHg3ZCwweDAyLDB4MTIsMHgwZCwweDNhLDB4ZTUsMHgzMCwweDI0LDB4ZmUsMHg0NCwweDI4LDB4ZmMsMHg3OCwweGE0LDB4ODYsCisweDgzLDB4MDgsMHg4NiwweDgyLDB4ZWMsMHhmMCwweGFmLDB4ODMsMHhlNSwweDgyLDB4MjQsMHgwNCwweGZlLDB4ZTQsMHgzZiwweGZmLAorMHhlYywweDhlLDB4ODIsMHg4ZiwweDgzLDB4ZjAsMHg3YywweDAzLDB4OGMsMHgyYywweGU1LDB4MmMsMHhmYywweDc4LDB4YTUsMHhlNiwKKzB4MjQsMHgwMSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywweGYwLDB4ZTUsMHgyYywweGZjLDB4NzgsCisweGE1LDB4ZTYsMHgyNCwweDA1LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHg3NSwweDJkLAorMHgwMSwweDc1LDB4MmYsMHg0OCwweDc1LDB4MmUsMHhmZiwweGU1LDB4MzAsMHgyNCwweGZkLDB4ZmMsMHhlNCwweDM0LDB4ZmYsMHhmZCwKKzB4ZWMsMHg3YywweDAzLDB4MjUsMHhlMCwweGNkLDB4MzMsMHhjZCwweGRjLDB4ZjksMHhmYywweGU1LDB4MmYsMHgyYywweGY1LDB4MmYsCisweGU1LDB4MmUsMHgzZCwweGY1LDB4MmUsMHg3OCwweGE1LDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLAorMHhmNSwweDgzLDB4ZTAsMHg1NCwweGU3LDB4ZjUsMHgyYywweGFkLDB4MmYsMHhhZSwweDJlLDB4YWYsMHgyZCwweGU0LDB4OTAsMHgwMCwKKzB4MDIsMHgxMiwweDAzLDB4MTcsMHhlNCwweDkwLDB4MDAsMHgwNiwweDEyLDB4MDMsMHgxNywweDEyLDB4MDEsMHhlNiwweDMwLDB4ZTUsCisweDAzLDB4NDMsMHgyYywweDEwLDB4ZTUsMHgyYywweGZjLDB4NzgsMHhhNSwweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LAorMHgzNCwweDAwLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHgxMiwweDEwLDB4NjcsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDA2LDB4ZjUsMHg4MiwKKzB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHhjMiwweDAzLDB4ZmMsMHhlNSwweDMwLDB4MjQsMHg5NywweGY4LDB4YzYsCisweDQ0LDB4MDQsMHhmNiwweDhjLDB4MmMsMHhlNSwweDMwLDB4NTQsMHgwZiwweGM0LDB4NTQsMHhmMCwweDdlLDB4MDAsMHhmZiwweGVlLAorMHhlZiwweDQ0LDB4MDQsMHg3ZCwweDAwLDB4ZmYsMHhlYywweDRlLDB4ZmMsMHhlZCwweDRmLDB4ZmQsMHgxMiwweDFjLDB4ZmUsMHg3YywKKzB4MDAsMHgyMiwweDhjLDB4MmYsMHgxMiwweDBmLDB4N2MsMHgxMiwweDEwLDB4MDcsMHg3OCwweGE0LDB4ODYsMHg4MywweDA4LDB4ODYsCisweDgyLDB4ZTAsMHg1NCwweDA4LDB4ZjAsMHhhMywweGEzLDB4YTMsMHhhMywweGUwLDB4NTQsMHgwOCwweGYwLDB4YWMsMHgyZiwweDdkLAorMHgwMiwweDEyLDB4MGQsMHgzYSwweGMyLDB4MDMsMHhlNSwweDJmLDB4MjQsMHg5NywweGY4LDB4YzYsMHg1NCwweGZiLDB4ZjYsMHg3YywKKzB4MDAsMHgyMiwweDEyLDB4MzAsMHg4NSwweDc4LDB4OTAsMHhlYywweGY2LDB4ZWMsMHgyNCwweDk3LDB4ZjgsMHhlNiwweDMwLDB4ZTEsCisweDBhLDB4N2QsMHgwMCwweDdjLDB4MTMsMHgxMiwweDI0LDB4YjEsMHgxMiwweDMxLDB4MDgsMHg3OCwweDkwLDB4ZTYsMHgyNCwweDk3LAorMHhmOCwweGM2LDB4NDQsMHgwMSwweGY2LDB4NzgsMHg5MCwweGU2LDB4ZmMsMHgxMiwweDBmLDB4N2MsMHg3OCwweDkwLDB4ZTYsMHgyNCwKKzB4ZmQsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4MWMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZkLDB4ZjUsMHg4MywweDc4LDB4YTAsCisweGU2LDB4ZmEsMHgwOCwweGU2LDB4ZjksMHg3YiwweDBhLDB4NzgsMHgwMSwweDEyLDB4MDMsMHhhNywweDc4LDB4YTAsMHg4NiwweDgzLAorMHgwOCwweDg2LDB4ODIsMHg3OSwweGY4LDB4N2EsMHgzNCwweDdiLDB4MGEsMHg3OCwweDAxLDB4MTIsMHgwMywweGY1LDB4MTIsMHgwZiwKKzB4ZDMsMHhjMiwweDAzLDB4NzgsMHg5MCwweGU2LDB4ZmMsMHgxMiwweDExLDB4MjMsMHg3OCwweDhmLDB4ZWMsMHhmNiwweGVjLDB4NjAsCisweDBhLDB4N2QsMHgwMCwweDdjLDB4MDgsMHgxMiwweDI0LDB4YjEsMHgxMiwweDMxLDB4MDgsMHg3OCwweDkwLDB4ZTYsMHhmYywweDEyLAorMHgwZiwweDdjLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwKKzB4NDQsMHgxMCwweDU0LDB4ZGYsMHhmYywweDc4LDB4YTMsMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsCisweGY1LDB4ODMsMHhlYywweGYwLDB4NzgsMHg4ZiwweGVjLDB4ZjYsMHhjMiwweDAzLDB4N2MsMHhjOCwweDEyLDB4MzIsMHg0OCwweDc4LAorMHg5MCwweGU2LDB4ZmMsMHgxMiwweDBmLDB4N2MsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwKKzB4MDAsMHhmNSwweDgzLDB4ZTAsMHg1NCwweGVmLDB4ZjAsMHhjMiwweDAzLDB4N2MsMHhjOCwweDEyLDB4MzIsMHg0OCwweDc4LDB4OTAsCisweGU2LDB4ZmMsMHgxMiwweDBmLDB4N2MsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLAorMHhmNSwweDgzLDB4ZTAsMHg0NCwweDEwLDB4ZjAsMHhjMiwweDAzLDB4N2MsMHhjOCwweDEyLDB4MzIsMHg0OCwweDc4LDB4OTAsMHhlNiwKKzB4ZmMsMHgxMiwweDBmLDB4N2MsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsCisweDgzLDB4ZTAsMHg0NCwweDIwLDB4ZjAsMHhjMiwweDAzLDB4N2MsMHhmMCwweDEyLDB4MzIsMHg0OCwweDc4LDB4OTAsMHhlNiwweGZjLAorMHgxMiwweDBmLDB4N2MsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDA1LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywKKzB4ZTAsMHgzMCwweGU0LDB4MTUsMHhjMiwweDAzLDB4NzgsMHg5MCwweGU2LDB4NDQsMHgxMCwweDdmLDB4MDAsMHhmZSwweDdjLDB4MDcsCisweDEyLDB4MzEsMHg5YSwweDEyLDB4MzEsMHgwOCwweDAyLDB4MTcsMHg0OSwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLAorMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDU0LDB4Y2YsMHhmMCwweGMyLDB4MDMsMHg3YywweGM4LDB4MTIsMHgzMiwKKzB4NDgsMHg3OCwweDkwLDB4ZTYsMHhmYywweDEyLDB4MGYsMHg3YywweDc4LDB4YTMsMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsCisweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDQ0LDB4MzAsMHhmMCwweGMyLDB4MDMsMHg3YywweGYwLDB4MTIsMHgzMiwweDQ4LAorMHg3OCwweDkwLDB4ZTYsMHhmYywweDEyLDB4MGYsMHg3YywweDc4LDB4YTMsMHhlNiwweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwKKzB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDMwLDB4ZTQsMHgxNCwweGMyLDB4MDMsMHg3OCwweDkwLDB4ZTYsMHg0NCwweDEwLDB4N2YsCisweDAwLDB4ZmUsMHg3YywweDA3LDB4MTIsMHgzMSwweDlhLDB4MTIsMHgzMSwweDA4LDB4ODAsMHg1ZCwweDc4LDB4YTMsMHhlNiwweDI0LAorMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDU0LDB4ZWYsMHhmMCwweDc4LDB4YTMsMHhlNiwKKzB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDU0LDB4ZGYsMHhmMCwweDc4LDB4OTAsCisweGU2LDB4MjQsMHhmZCwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHgxYywweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmQsMHhmNSwweDgzLAorMHhhYywweDgyLDB4YWQsMHg4MywweDc4LDB4YTAsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4ZWMsMHhmOSwweGVkLDB4ZmEsMHg3YiwKKzB4MGEsMHg3OCwweDAxLDB4MTIsMHgwMywweGE3LDB4YzIsMHgwMywweDc4LDB4OTAsMHhlNiwweGZjLDB4MTIsMHgxMSwweDIzLDB4N2QsCisweDAwLDB4N2MsMHgwYiwweDEyLDB4MjQsMHhiMSwweDEyLDB4MzEsMHgwOCwweDIyLDB4MTIsMHgzMCwweDg1LDB4OTAsMHhmZiwweDkxLAorMHhlMCwweDkwLDB4ZmQsMHg0MSwweGYwLDB4N2QsMHgwMiwweDdjLDB4MDAsMHgxMiwweDI0LDB4YjEsMHgxMiwweDMxLDB4MDgsMHgyMiwKKzB4MTIsMHgzMCwweDg1LDB4OTAsMHhmZCwweDQwLDB4ZTAsMHhmNCwweGZjLDB4OTAsMHhmZiwweDkxLDB4ZTAsMHg1YywweGY1LDB4MzMsCisweDkwLDB4ZmQsMHg0MSwweGUwLDB4ZmMsMHg5MCwweGZkLDB4NDAsMHhlMCwweDVjLDB4NDIsMHgzMywweGU1LDB4MzMsMHg5MCwweGZmLAorMHg5MSwweGYwLDB4N2MsMHgwMCwweDEyLDB4MjUsMHg0YSwweDEyLDB4MzEsMHgwOCwweDIyLDB4NzQsMHgzYywweDkwLDB4ZmIsMHhlOCwKKzB4ZjAsMHg3NCwweDNlLDB4OTAsMHhmYiwweGU4LDB4ZjAsMHhlNCwweDkwLDB4ZmQsMHgzMCwweGYwLDB4MjIsMHg4ZCwweDM1LDB4OGMsCisweDM0LDB4ZWMsMHhiNCwweDAxLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDAyLDB4ODAsMHgyOCwweGI0LDB4MDIsMHgwMiwweDgwLAorMHgwMywweGQzLDB4NDAsMHgwOCwweGE4LDB4MzUsMHhjNiwweDI1LDB4ZTAsMHhmNiwweDgwLDB4MTgsMHhiNCwweDA0LDB4MDIsMHg4MCwKKzB4MDMsMHhkMywweDQwLDB4MGEsMHhhOCwweDM1LDB4YzYsMHgyNSwweGUwLDB4MjUsMHhlMCwweGY2LDB4ODAsMHgwNiwweGE4LDB4MzUsCisweDc2LDB4MDAsMHg4MCwweDAwLDB4MjIsMHg4YywweDNjLDB4OGQsMHgzYiwweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwweDc1LAorMHg2MCwweDA2LDB4NzUsMHg2MSwweDAwLDB4OTAsMHhmZCwweDMxLDB4MTIsMHgwNCwweDZlLDB4MTIsMHgwMSwweGU2LDB4YjQsMHg4MCwKKzB4MDIsMHg4MCwweDA2LDB4ZDMsMHg1MCwweDAzLDB4MDIsMHgxOCwweDllLDB4OTAsMHhmZCwweDMxLDB4MTIsMHgwNCwweDgwLDB4OTAsCisweDAwLDB4MDMsMHgxMiwweDAxLDB4ZWMsMHg1NCwweGYwLDB4YjQsMHgzMCwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHg1ZiwweDkwLAorMHhmZCwweDMxLDB4MTIsMHgwNCwweDgwLDB4OTAsMHgwMCwweDA4LDB4MTIsMHgwMiwweDBlLDB4ZmEsMHhmZCwweGViLDB4ZmUsMHg3ZiwKKzB4MDEsMHg5MCwweGZkLDB4MzQsMHgxMiwweDA0LDB4NmUsMHhlZSwweGNkLDB4OTAsMHgzNSwweDAyLDB4ZmMsMHhlNCwweDkzLDB4ZmYsCisweDc0LDB4MDEsMHg5MywweGZlLDB4ZjksMHhlZiwweGZhLDB4N2IsMHgwMSwweGVhLDB4ZmYsMHhlOSwweGZlLDB4ZWMsMHhjMywweDllLAorMHhlZCwweDlmLDB4NDAsMHgyNSwweDkwLDB4MzUsMHgwNCwweGU0LDB4OTMsMHhmZCwweDc0LDB4MDEsMHg5MywweGZjLDB4ZWQsMHhmZSwKKzB4ZWMsMHhmZCwweDdmLDB4MDEsMHhlZSwweGNkLDB4ZmMsMHg5MCwweGZkLDB4MzYsMHhlMCwweGQzLDB4OWMsMHg5MCwweGZkLDB4MzUsCisweGUwLDB4OWQsMHg1MCwweDA1LDB4NzUsMHg2MCwweDgwLDB4ODAsMHgzMywweDEyLDB4MTksMHhiYywweDgwLDB4MmUsMHhiNCwweDYwLAorMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MGIsMHhhYywweDNjLDB4YWQsMHgzYiwweDEyLDB4MDcsMHg4MiwweDhjLDB4NjAsMHg4MCwKKzB4MWIsMHhiNCwweDEwLDB4MDMsMHhiMywweDQwLDB4MTAsMHhjMywweGI0LDB4MjAsMHgwMywweGIzLDB4NDAsMHgwOSwweGMzLDB4YjQsCisweDQwLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDAwLDB4NzUsMHg2MCwweDgxLDB4ODAsMHgwMCwweDgwLDB4NzUsMHhiNCwweDgxLAorMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4NmIsMHg5MCwweGZkLDB4MzEsMHgxMiwweDA0LDB4ODAsMHg5MCwweDAwLDB4MDMsMHgxMiwKKzB4MDEsMHhlYywweDU0LDB4ZjAsMHhiNCwweDMwLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDFkLDB4OTAsMHhmZCwweDMxLDB4MTIsCisweDA0LDB4ODAsMHg5MCwweDAwLDB4MDgsMHgxMiwweDAyLDB4MGUsMHhmYSwweGZkLDB4ZWIsMHhmZSwweDdmLDB4MDEsMHg5MCwweGZkLAorMHgzNywweDEyLDB4MDQsMHg2ZSwweDEyLDB4MTksMHgyNiwweDgwLDB4MzYsMHhiNCwweDYwLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwKKzB4MTMsMHg3NSwweDNhLDB4NjEsMHhlNCwweGY1LDB4MzksMHhmNSwweDM4LDB4YWMsMHgzYywweGFkLDB4M2IsMHgxMiwweDA1LDB4ZGUsCisweDhjLDB4NjAsMHg4MCwweDFiLDB4YjQsMHgxMCwweDAzLDB4YjMsMHg0MCwweDEwLDB4YzMsMHhiNCwweDIwLDB4MDMsMHhiMywweDQwLAorMHgwOSwweGMzLDB4YjQsMHg0MCwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgwMCwweDc1LDB4NjAsMHg4MSwweDgwLDB4MDAsMHg4MCwKKzB4MDIsMHg4MCwweDAwLDB4ZTUsMHg2MCwweGZjLDB4OTAsMHhmZCwweDMxLDB4MTIsMHgwNCwweDgwLDB4ZWMsMHg5MCwweDAwLDB4MDIsCisweDEyLDB4MDMsMHgxNywweGFjLDB4NjEsMHgyMiwweDkwLDB4ZmQsMHgzMSwweDEyLDB4MDQsMHg4MCwweDkwLDB4MDAsMHgwNCwweDEyLAorMHgwMSwweGVjLDB4NjAsMHgwNCwweDc0LDB4MDEsMHg4MCwweDAxLDB4ZTQsMHhhMiwweGUwLDB4OTIsMHgwMSwweDkwLDB4ZmQsMHgzMSwKKzB4MTIsMHgwNCwweDgwLDB4ZWQsMHgyNCwweDAzLDB4ZmQsMHg1MCwweDAxLDB4MGUsMHg5MCwweGZkLDB4MzQsMHgxMiwweDA0LDB4NmUsCisweDkwLDB4ZmQsMHgzMSwweDEyLDB4MDQsMHg4MCwweDkwLDB4MDAsMHgwNSwweDEyLDB4MDEsMHhlYywweGY1LDB4NjEsMHg5MCwweDAwLAorMHgwNCwweDEyLDB4MDEsMHhlYywweDU0LDB4MGYsMHhmYywweDdkLDB4NjEsMHgxMiwweDE3LDB4OWQsMHhlNSwweDYxLDB4NzAsMHgwNCwKKzB4NzUsMHg2MCwweDA4LDB4MjIsMHg3NSwweDYwLDB4MDAsMHg3OCwweDdlLDB4NzYsMHgwMCwweDc4LDB4N2UsMHhlNiwweGMzLDB4OTUsCisweDYxLDB4NTAsMHgzOCwweDkwLDB4ZmQsMHgzNywweDEyLDB4MDQsMHg4MCwweDEyLDB4MDEsMHhlNiwweGZjLDB4OTAsMHhmZCwweDM0LAorMHgxMiwweDA0LDB4ODAsMHhlYywweDEyLDB4MDMsMHgwZiwweDMwLDB4MDEsMHgwZSwweDkwLDB4ZmQsMHgzOSwweGUwLDB4MDQsMHhmMCwKKzB4OTAsMHhmZCwweDM4LDB4NzAsMHgwMywweGUwLDB4MDQsMHhmMCwweDc4LDB4N2UsMHgwNiwweDkwLDB4ZmQsMHgzNiwweGUwLDB4MDQsCisweGYwLDB4OTAsMHhmZCwweDM1LDB4NzAsMHgwMywweGUwLDB4MDQsMHhmMCwweDgwLDB4YzAsMHgyMiwweDkwLDB4ZmQsMHgzMiwweGUwLAorMHhmZCwweGEzLDB4ZTAsMHhmYywweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwweGVkLDB4MjQsMHgwYSwweGZkLDB4NTAsMHgwMSwKKzB4MGUsMHg5MCwweGZkLDB4M2EsMHgxMiwweDA0LDB4NmUsMHg5MCwweGZkLDB4MzEsMHgxMiwweDA0LDB4ODAsMHg5MCwweDAwLDB4MDQsCisweDEyLDB4MDEsMHhlYywweDU0LDB4MGYsMHhiNCwweDAxLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDE3LDB4OTAsMHhmZCwweDNhLAorMHgxMiwweDA0LDB4ODAsMHgwZCwweGVkLDB4NzAsMHgwMSwweDBlLDB4OTAsMHhmZCwweDM3LDB4MTIsMHgwNCwweDZlLDB4NzgsMHg4MiwKKzB4NzYsMHgwMSwweDgwLDB4NGUsMHhiNCwweDAyLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDE5LDB4OTAsMHhmZCwweDNhLDB4MTIsCisweDA0LDB4ODAsMHhlZCwweDI0LDB4MDIsMHhmZCwweDUwLDB4MDEsMHgwZSwweDkwLDB4ZmQsMHgzNywweDEyLDB4MDQsMHg2ZSwweDc4LAorMHg4MiwweDc2LDB4MDIsMHg4MCwweDJkLDB4YjQsMHgwNCwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgxOSwweDkwLDB4ZmQsMHgzYSwKKzB4MTIsMHgwNCwweDgwLDB4ZWQsMHgyNCwweDA0LDB4ZmQsMHg1MCwweDAxLDB4MGUsMHg5MCwweGZkLDB4MzcsMHgxMiwweDA0LDB4NmUsCisweDc4LDB4ODIsMHg3NiwweDA0LDB4ODAsMHgwYywweGI0LDB4MDAsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MDAsMHg3NSwweDYwLAorMHgwOCwweDIyLDB4OTAsMHhmZCwweDMxLDB4MTIsMHgwNCwweDgwLDB4OTAsMHgwMCwweDA1LDB4MTIsMHgwMSwweGVjLDB4ZjUsMHg2MSwKKzB4NzgsMHg3ZiwweDc2LDB4MDAsMHg3OCwweDdmLDB4ZTYsMHhjMywweDk1LDB4NjEsMHg0MCwweDAzLDB4MDIsMHgxYiwweDI0LDB4NzgsCisweDgwLDB4NzYsMHgwMCwweDc4LDB4ODAsMHhlNiwweGMzLDB4NzgsMHg4MiwweDk2LDB4NTAsMHg3NiwweDkwLDB4ZmQsMHgzNCwweDEyLAorMHgwNCwweDgwLDB4MTIsMHgwMSwweGU2LDB4ZmMsMHg5MCwweGZkLDB4M2EsMHgxMiwweDA0LDB4ODksMHgxMiwweDAxLDB4ZTAsMHhmNCwKKzB4NWMsMHhmYywweDEyLDB4MDEsMHhlMCwweGY4LDB4OTAsMHhmZCwweDM3LDB4MTIsMHgwNCwweDgwLDB4ZTgsMHhjMCwweGUwLDB4MTIsCisweDAxLDB4ZTYsMHhjOCwweGQwLDB4ZTAsMHhjOCwweDU4LDB4NGMsMHhmYywweDkwLDB4ZmQsMHgzNCwweDEyLDB4MDQsMHg4MCwweGVjLAorMHgxMiwweDAzLDB4MGYsMHg3OCwweDgxLDB4ZWMsMHhmNiwweDkwLDB4ZmQsMHgzOSwweGUwLDB4MDQsMHhmMCwweDkwLDB4ZmQsMHgzOCwKKzB4NzAsMHgwMywweGUwLDB4MDQsMHhmMCwweDA5LDB4ZTksMHg3MCwweDAxLDB4MGEsMHg5MCwweGZkLDB4M2EsMHgxMiwweDA0LDB4NzcsCisweDkwLDB4ZmQsMHgzMSwweDEyLDB4MDQsMHg4MCwweDkwLDB4MDAsMHgwNCwweDEyLDB4MDEsMHhlYywweDMwLDB4ZTQsMHgwZSwweDkwLAorMHhmZCwweDM2LDB4ZTAsMHgwNCwweGYwLDB4OTAsMHhmZCwweDM1LDB4NzAsMHgwMywweGUwLDB4MDQsMHhmMCwweDc4LDB4ODAsMHgwNiwKKzB4ODAsMHg4MSwweDc4LDB4ODIsMHhlNiwweGZkLDB4ZTQsMHhmZSwweGZmLDB4ZWUsMHhjZCwweGZjLDB4OTAsMHhmZCwweDM5LDB4ZTAsCisweDJjLDB4ZjAsMHg5MCwweGZkLDB4MzgsMHhlMCwweDNkLDB4ZjAsMHg3OCwweDgyLDB4ZTYsMHhmZCwweGU0LDB4ZmUsMHhmZiwweGVlLAorMHhjZCwweGZjLDB4OTAsMHhmZCwweDNjLDB4ZTAsMHgyYywweGYwLDB4OTAsMHhmZCwweDNiLDB4ZTAsMHgzZCwweGYwLDB4NzgsMHg3ZiwKKzB4MDYsMHgwMiwweDFhLDB4NjQsMHg3NSwweDYwLDB4MDAsMHgyMiwweGU1LDB4M2QsMHgwNSwweDNkLDB4MDQsMHg3MCwweDAyLDB4YjIsCisweGIwLDB4MjIsMHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHhkMCwweGU4LDB4YzAsMHhlMCwweGU5LAorMHhjMCwweGUwLDB4ZWEsMHhjMCwweGUwLDB4ZWIsMHhjMCwweGUwLDB4ZWMsMHhjMCwweGUwLDB4ZWQsMHhjMCwweGUwLDB4ZWUsMHhjMCwKKzB4ZTAsMHhlZiwweGMwLDB4ZTAsMHg5MCwweGZmLDB4OTIsMHhlMCwweDEyLDB4MDEsMHhiNywweDFiLDB4ODAsMHgzMCwweDFiLDB4ODAsCisweDMyLDB4MWIsMHg4ZiwweDM4LDB4MWIsMHhhMSwweDNhLDB4MWIsMHhiMywweDNlLDB4MWIsMHhjYiwweDQ0LDB4MWIsMHhiZiwweDQ2LAorMHgxYiwweGQ3LDB4NTAsMHgxYywweDE5LDB4NTIsMHgxYiwweGY4LDB4NTQsMHgxYywweDNhLDB4NTYsMHgwMCwweDAwLDB4MWMsMHg1YiwKKzB4OTAsMHhmZiwweDkyLDB4ZTAsMHg3ZiwweDAwLDB4ZmUsMHg3YywweDAxLDB4MTIsMHgzMSwweDlhLDB4MDIsMHgxYywweDZiLDB4ZTQsCisweGZmLDB4MDQsMHhmZSwweDdjLDB4MDMsMHgxMiwweDMxLDB4OWEsMHg3NCwweDIwLDB4OTAsMHhmZiwweGZlLDB4ZjAsMHgwMiwweDFjLAorMHg2YiwweGU0LDB4ZmYsMHgwNCwweGZlLDB4N2MsMHgwMiwweDEyLDB4MzEsMHg5YSwweDc0LDB4NDAsMHg5MCwweGZmLDB4ZmUsMHhmMCwKKzB4MDIsMHgxYywweDZiLDB4ZTQsMHhmZiwweDA0LDB4ZmUsMHg3YywweDA0LDB4MTIsMHgzMSwweDlhLDB4MDIsMHgxYywweDZiLDB4ZTQsCisweGZmLDB4MDQsMHhmZSwweDdjLDB4MDUsMHgxMiwweDMxLDB4OWEsMHgwMiwweDFjLDB4NmIsMHhlNCwweGZmLDB4MDQsMHhmZSwweDdjLAorMHgwNiwweDEyLDB4MzEsMHg5YSwweDAyLDB4MWMsMHg2YiwweDkwLDB4ZmYsMHhhNSwweGUwLDB4N2QsMHgwMCwweDkwLDB4ZmQsMHgwMCwKKzB4Y2QsMHhmMCwweGEzLDB4Y2QsMHhmMCwweDkwLDB4ZmQsMHgwMSwweGUwLDB4ZmMsMHhmNSwweDgzLDB4OTAsMHhmZCwweDAwLDB4ZTAsCisweDQ0LDB4MzMsMHhmZCwweDEyLDB4MWMsMHhmZSwweDgwLDB4NzMsMHg5MCwweGZmLDB4YjUsMHhlMCwweDdkLDB4MDAsMHg5MCwweGZkLAorMHgwMiwweGNkLDB4ZjAsMHhhMywweGNkLDB4ZjAsMHg5MCwweGZkLDB4MDMsMHhlMCwweGZjLDB4ZjUsMHg4MywweDkwLDB4ZmQsMHgwMiwKKzB4ZTAsMHg0NCwweDQzLDB4ZmQsMHgxMiwweDFjLDB4ZmUsMHg4MCwweDUyLDB4OTAsMHhmZiwweGE2LDB4ZTAsMHg3ZCwweDAwLDB4OTAsCisweGZkLDB4MDQsMHhjZCwweGYwLDB4YTMsMHhjZCwweGYwLDB4OTAsMHhmZCwweDA1LDB4ZTAsMHhmYywweGY1LDB4ODMsMHg5MCwweGZkLAorMHgwNCwweGUwLDB4NDQsMHgzNCwweGZkLDB4MTIsMHgxYywweGZlLDB4ODAsMHgzMSwweDkwLDB4ZmYsMHhiNiwweGUwLDB4N2QsMHgwMCwKKzB4OTAsMHhmZCwweDA2LDB4Y2QsMHhmMCwweGEzLDB4Y2QsMHhmMCwweDkwLDB4ZmQsMHgwNywweGUwLDB4ZmMsMHhmNSwweDgzLDB4OTAsCisweGZkLDB4MDYsMHhlMCwweDQ0LDB4NDQsMHhmZCwweDEyLDB4MWMsMHhmZSwweDgwLDB4MTAsMHg5MCwweGZmLDB4OTIsMHhlMCwweDdkLAorMHgwMCwweGZjLDB4ZWQsMHg0NCwweGFhLDB4ZmQsMHgxMiwweDFjLDB4ZmUsMHg4MCwweDAwLDB4ZTQsMHg5MCwweGZmLDB4OTIsMHhmMCwKKzB4ZDAsMHhlMCwweGZmLDB4ZDAsMHhlMCwweGZlLDB4ZDAsMHhlMCwweGZkLDB4ZDAsMHhlMCwweGZjLDB4ZDAsMHhlMCwweGZiLDB4ZDAsCisweGUwLDB4ZmEsMHhkMCwweGUwLDB4ZjksMHhkMCwweGUwLDB4ZjgsMHhkMCwweGQwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGYwLAorMHhkMCwweGUwLDB4MzIsMHgwNSwweDgxLDB4MDUsMHg4MSwweDA1LDB4ODEsMHgwNSwweDgxLDB4YTgsMHg4MSwweDE4LDB4MTgsMHgxOCwKKzB4ZWQsMHhmNiwweDA4LDB4ZWMsMHhmNiwweDkwLDB4ZmYsMHg2YSwweGUwLDB4MjAsMHhlNywweDAyLDB4ODAsMHhmNywweDkwLDB4ZmYsCisweDY5LDB4ZTAsMHg3ZCwweDAwLDB4YTgsMHg4MSwweDE4LDB4Y2QsMHhmNiwweGNkLDB4MDgsMHhmNiwweDdkLDB4MDMsMHhhOCwweDgxLAorMHhlNiwweDE4LDB4ZmMsMHhlNiwweGNjLDB4MjUsMHhlMCwweGNjLDB4MzMsMHhjYywweGRkLDB4ZjksMHhjYywweGY2LDB4Y2MsMHgwOCwKKzB4ZjYsMHhhOCwweDgxLDB4MTgsMHhlNiwweDQ0LDB4ZjgsMHhmNiwweGE4LDB4ODEsMHgxOCwweDE4LDB4MTgsMHhlNiwweGZkLDB4MDgsCisweGU2LDB4ZmMsMHhhOCwweDgxLDB4MTgsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4ZWQsMHhmMCwweGEzLDB4ZWMsMHhmMCwweDc0LAorMHgwMiwweDkwLDB4ZmYsMHg2YSwweGYwLDB4MTUsMHg4MSwweDE1LDB4ODEsMHgxNSwweDgxLDB4MTUsMHg4MSwweDIyLDB4ZTUsMHg4MSwKKzB4MjQsMHgwNSwweGY1LDB4ODEsMHhlNCwweGE4LDB4ODEsMHgxOCwweGY2LDB4YTgsMHg4MSwweDE4LDB4MTgsMHgxOCwweDE4LDB4ZWQsCisweGY2LDB4MDgsMHhlYywweGY2LDB4OTAsMHhmYiwweGZkLDB4ZTAsMHgyNCwweGY4LDB4NTAsMHgwMywweDAyLDB4MWUsMHgxZiwweGU0LAorMHhhOCwweDgxLDB4MTgsMHgxOCwweGY2LDB4YTgsMHg4MSwweDE4LDB4ZTYsMHhmZSwweGE4LDB4ODEsMHgxOCwweDE4LDB4MTgsMHgxOCwKKzB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweDdmLDB4MDAsMHhlZiwweDI0LDB4ZjgsMHg0MCwweDRkLDB4ZTQsMHhlZiwweDI1LDB4ZTAsCisweDI0LDB4ODUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZkLDB4ZjUsMHg4MywweGUwLDB4ZmIsMHhhMywweGUwLDB4NmMsMHg3MCwweDAzLAorMHhmYSwweGViLDB4NmQsMHg3MCwweDA5LDB4NzQsMHgwMSwweGE4LDB4ODEsMHgxOCwweDE4LDB4ZjYsMHg4MCwweDJiLDB4ZTQsMHhlZiwKKzB4MjUsMHhlMCwweDI0LDB4ODUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZkLDB4ZjUsMHg4MywweDdhLDB4MDAsMHhlMCwweDU0LDB4ZjAsCisweGNjLDB4ZjgsMHhjYywweGNkLDB4ZjksMHhjZCwweGZiLDB4NzgsMHgwMCwweGU5LDB4NTQsMHhmMCwweGY5LDB4ZWEsMHg2OCwweDcwLAorMHgwMiwweGViLDB4NjksMHg3MCwweDAxLDB4MGUsMHgwZiwweDgwLDB4YWUsMHhhOCwweDgxLDB4MTgsMHhlZSwweGY2LDB4YTgsMHg4MSwKKzB4MTgsMHgxOCwweDE4LDB4MTgsMHhlZCwweGY2LDB4MDgsMHhlYywweGY2LDB4YTgsMHg4MSwweGVmLDB4ZjYsMHhhOCwweDgxLDB4MTgsCisweDE4LDB4ZTYsMHg3MCwweDc5LDB4YTgsMHg4MSwweDE4LDB4ZTYsMHgyNCwweGY3LDB4NDAsMHg3MSwweGE4LDB4ODEsMHgxOCwweDE4LAorMHgxOCwweDE4LDB4ZTYsMHg1NCwweDBmLDB4YTgsMHg4MSwweGY2LDB4NjQsMHgwNCwweDYwLDB4MTcsMHhhOCwweDgxLDB4ZTYsMHg2NCwKKzB4MDMsMHg2MCwweDEwLDB4YTgsMHg4MSwweDE4LDB4MTgsMHgxOCwweDE4LDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweDEyLDB4MWMsCisweDkzLDB4ODAsMHg0YSwweDdjLDB4MGEsMHgxMiwweDMwLDB4ZmEsMHhhOCwweDgxLDB4MTgsMHgxOCwweDE4LDB4MTgsMHhlNiwweGZkLAorMHgwOCwweGU2LDB4ZmMsMHg5MCwweGZiLDB4ZmMsMHhlMCwweDI1LDB4ZTAsMHgyNCwweDg1LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZCwKKzB4ZjUsMHg4MywweGVkLDB4ZjAsMHhhMywweGVjLDB4ZjAsMHg5MCwweGZiLDB4ZmMsMHhlMCwweGZmLDB4ZTQsMHhlZiwweDA0LDB4NTQsCisweDA3LDB4ZmYsMHg5MCwweGZiLDB4ZmMsMHhmMCwweDkwLDB4ZmIsMHhmZCwweGUwLDB4MDQsMHhmMCwweDEyLDB4MzEsMHg5MywweDkwLAorMHhmYiwweGZlLDB4ZTAsMHg3MCwweDA4LDB4ZTQsMHhmZSwweGZmLDB4N2MsMHgwZiwweDEyLDB4MzEsMHg5YSwweDgwLDB4MjcsMHg5MCwKKzB4ZmIsMHhmZiwweGUwLDB4MDQsMHhmMCwweDU0LDB4M2YsMHg3MCwweDFkLDB4OTAsMHhmYiwweGZmLDB4ZTAsMHg0NCwweGZlLDB4N2QsCisweDAwLDB4ZmMsMHg5MCwweGZiLDB4ZmMsMHhlMCwweDI1LDB4ZTAsMHgyNCwweDg1LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZCwweGY1LAorMHg4MywweGVkLDB4ZjAsMHhhMywweGVjLDB4ZjAsMHhlNSwweDgxLDB4MjQsMHhmYiwweGY1LDB4ODEsMHgyMiwweDc4LDB4ODUsMHg3NiwKKzB4MDAsMHg3OCwweDg2LDB4NzYsMHgwMCwweDc0LDB4MDEsMHg5MCwweGZiLDB4ZmUsMHhmMCwweDEyLDB4MzAsMHg4NSwweDkwLDB4ZmIsCisweGZkLDB4ZTAsMHg2MCwweDU5LDB4N2MsMHgwYSwweDEyLDB4MzAsMHhmYSwweDkwLDB4ZmIsMHhmYiwweGUwLDB4MjUsMHhlMCwweDI0LAorMHg4NSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmQsMHhmNSwweDgzLDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmYywweDkwLDB4ZmIsMHhmYiwKKzB4ZTAsMHgyNSwweGUwLDB4MjQsMHg4NSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmQsMHhmNSwweDgzLDB4ZTQsMHhmMCwweGEzLDB4ZjAsCisweDkwLDB4ZmIsMHhmYiwweGUwLDB4ZmYsMHhlNCwweGVmLDB4MDQsMHg1NCwweDA3LDB4ZmYsMHg5MCwweGZiLDB4ZmIsMHhmMCwweDkwLAorMHhmYiwweGZkLDB4ZTAsMHgxNCwweGYwLDB4NzgsMHg4MywweGVkLDB4ZjYsMHgwOCwweGVjLDB4ZjYsMHgxMiwweDMxLDB4OTMsMHhiMiwKKzB4YjMsMHg3OCwweDgzLDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweDEyLDB4MDgsMHhlNSwweDgwLDB4YTEsMHgxMiwweDMxLDB4ZTcsCisweDc4LDB4ODUsMHgwNiwweGI2LDB4MDAsMHgxMSwweDc4LDB4ODUsMHg3NiwweDAwLDB4NzgsMHg4NiwweGU2LDB4ZjQsMHgwNCwweDA0LAorMHhhMiwweGUwLDB4OTIsMHhiNCwweDc4LDB4ODYsMHhmNiwweDgwLDB4ODUsMHhlNCwweDkwLDB4ZmIsMHhmZSwweGYwLDB4OTAsMHhmYiwKKzB4ZmQsMHhlMCwweDdkLDB4MDAsMHhmYywweGVkLDB4NDQsMHhjZiwweGZkLDB4MTIsMHgxYywweDkzLDB4MTIsMHgzMSwweDA4LDB4MjIsCisweDEyLDB4MzAsMHg4NSwweGU1LDB4NmEsMHg2NCwweDQ5LDB4NDUsMHg2OSwweDYwLDB4MTUsMHg5MCwweGZmLDB4ODMsMHhlMCwweDU0LAorMHgwZiwweDdkLDB4MDAsMHhkMywweDk1LDB4NmEsMHhlZCwweDk1LDB4NjksMHg1MCwweDA1LDB4MTIsMHgyZSwweGNlLDB4ODAsMHgwMywKKzB4MTIsMHgyZiwweDllLDB4MTIsMHgzMSwweDA4LDB4MjIsMHgxMiwweDMwLDB4ODUsMHhlNSwweDZhLDB4NjQsMHg0OSwweDQ1LDB4NjksCisweDYwLDB4MDUsMHgxMiwweDJmLDB4ZDgsMHg4MCwweDBlLDB4OTAsMHhmZiwweDgwLDB4ZTAsMHg0NCwweDA4LDB4ZjAsMHg5MCwweGZmLAorMHg4MywweGUwLDB4NTQsMHg3ZiwweGYwLDB4MTIsMHgzMSwweDA4LDB4MjIsMHgxMiwweDMwLDB4ODUsMHg4YywweDU0LDB4ZWMsMHg1NCwKKzB4ZjAsMHhiNCwweDEwLDB4MTUsMHg3NSwweDY0LDB4M2QsMHg3NSwweDYzLDB4ZmQsMHg3NSwweDYyLDB4MDEsMHhlNSwweDY0LDB4MjQsCisweDAzLDB4ZjUsMHg2NCwweGU1LDB4NjMsMHgzNCwweDAwLDB4ZjUsMHg2MywweGU0LDB4ZjUsMHg1NywweGY1LDB4NTYsMHhlNSwweDU2LAorMHhjMywweDk0LDB4MDEsMHg1MCwweDI3LDB4ZTUsMHg1NCwweDU0LDB4MGYsMHhmYywweGFkLDB4NjQsMHhhZSwweDYzLDB4YWYsMHg2MiwKKzB4MTIsMHgwZSwweDgyLDB4OGMsMHg1NSwweGVjLDB4NjAsMHgwMiwweDgwLDB4MTIsMHgwNSwweDY0LDB4ZTUsMHg2NCwweDcwLDB4MDIsCisweDA1LDB4NjMsMHgwNSwweDU3LDB4ZTUsMHg1NywweDcwLDB4MDIsMHgwNSwweDU2LDB4ODAsMHhkMiwweGU1LDB4NTQsMHg1NCwweDBmLAorMHgyNCwweDk3LDB4ZjgsMHhjNiwweDU0LDB4ZmUsMHhmNiwweGU1LDB4NTQsMHg1NCwweDBmLDB4N2YsMHgwMCwweGZlLDB4N2MsMHgxMiwKKzB4MTIsMHgzMSwweDlhLDB4ZTUsMHg1NSwweDE0LDB4NzAsMHgwOSwweDdkLDB4MDAsMHg3YywweDA5LDB4MTIsMHgyNCwweGIxLDB4ODAsCisweDA3LDB4YWQsMHg1NywweDdjLDB4MDAsMHgxMiwweDI0LDB4YjEsMHgxMiwweDMxLDB4MDgsMHgyMiwweDEyLDB4MzAsMHg4NSwweDkwLAorMHhmZiwweGZjLDB4ZTAsMHg0NCwweDAyLDB4ZjAsMHg5MCwweGZmLDB4MDAsMHhlMCwweDMwLDB4ZTcsMHgxMywweDkwLDB4ZmYsMHg4MywKKzB4ZTAsMHg0NCwweDgwLDB4ZjAsMHg0MywweDY3LDB4ODAsMHg5MCwweGZmLDB4ZmMsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDgwLDB4MTEsCisweDkwLDB4ZmYsMHg4MiwweGUwLDB4NDQsMHgwOCwweGYwLDB4NTMsMHg2NywweDdmLDB4OTAsMHhmZiwweGZjLDB4ZTAsMHg1NCwweGZlLAorMHhmMCwweDkwLDB4ZmYsMHg4MSwweGUwLDB4NDQsMHg4MCwweGYwLDB4MTIsMHgyNSwweDY0LDB4OTAsMHhmZiwweGZlLDB4ZTAsMHg0NCwKKzB4MDUsMHhmMCwweDkwLDB4ZmYsMHhmYywweGUwLDB4NTQsMHhmZCwweGYwLDB4MTIsMHgzMSwweDA4LDB4MjIsMHgxMiwweDMwLDB4ODUsCisweDdjLDB4MDEsMHgxMiwweDMyLDB4NDgsMHg3OCwweGE3LDB4ZTYsMHg0NCwweDAyLDB4ZjYsMHg3NCwweGZlLDB4ZmMsMHgwNCwweGZkLAorMHgxMiwweDFjLDB4ZmUsMHg5MCwweGZmLDB4NmEsMHhlMCwweDMwLDB4ZTcsMHgwMiwweDgwLDB4ZjcsMHhlNCwweGY1LDB4NGUsMHg3NSwKKzB4NGQsMHgxMCwweGFjLDB4NGUsMHhhZCwweDRkLDB4ZTUsMHg0ZSwweDE1LDB4NGUsMHg3MCwweDAyLDB4MTUsMHg0ZCwweGVjLDB4NGQsCisweDYwLDB4MDIsMHg4MCwweGVlLDB4NDMsMHg4NywweDAxLDB4MTIsMHgzMSwweDA4LDB4MjIsMHgxMiwweDMwLDB4ODUsMHg3YywweDAyLAorMHgxMiwweDMxLDB4MTQsMHg3OCwweGE3LDB4ZTYsMHg1NCwweGZkLDB4ZjYsMHgxMiwweDMxLDB4MDgsMHgyMiwweDEyLDB4MzAsMHg4NSwKKzB4NzgsMHhhNywweGU2LDB4MzAsMHhlMCwweDJjLDB4NzgsMHhhNywweGU2LDB4MzAsMHhlMSwweDI2LDB4NzgsMHhhNywweGU2LDB4ZmMsCisweGY1LDB4ODMsMHgxOCwweGU2LDB4NDQsMHhmMCwweGZkLDB4MTIsMHgxYywweDkzLDB4OTAsMHhmZiwweGZjLDB4ZTAsMHg0NCwweDIwLAorMHhmMCwweDdjLDB4MDIsMHgxMiwweDMyLDB4NDgsMHg3OCwweGE3LDB4ZTYsMHg1NCwweGZkLDB4ZjYsMHg3NCwweDFhLDB4OTAsMHhmZiwKKzB4ZmUsMHhmMCwweDc4LDB4YTcsMHhlNiwweGZjLDB4ZjUsMHg4MywweDE4LDB4ZTYsMHg0NCwweGYxLDB4ZmQsMHgxMiwweDFjLDB4OTMsCisweDEyLDB4MzEsMHgwOCwweDIyLDB4NzUsMHg2NywweDAwLDB4NzUsMHg2OCwweDAwLDB4ZTQsMHhmNSwweDY2LDB4ZjUsMHg2NSwweGU0LAorMHhmNSwweDY5LDB4NzUsMHg2YSwweDQ5LDB4NzQsMHg4NCwweDkwLDB4ZmYsMHg4MiwweGYwLDB4NzQsMHg4NCwweDkwLDB4ZmYsMHg4MCwKKzB4ZjAsMHg3NCwweDgwLDB4OTAsMHhmZiwweDY4LDB4ZjAsMHg3NCwweDgwLDB4OTAsMHhmZiwweDZhLDB4ZjAsMHhhZCwweDQ2LDB4YWYsCisweDQ1LDB4N2UsMHgwMCwweGVlLDB4MjQsMHhmYywweDUwLDB4MDMsMHgwMiwweDIxLDB4NmEsMHhlNCwweGVlLDB4NzUsMHhmMCwweDA3LAorMHhhNCwweDI0LDB4M2YsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZjLDB4ZjUsMHg4MywweGUwLDB4ZmYsMHhlNCwweGVmLDB4NTQsMHg4MCwKKzB4ZmQsMHhlNCwweGVmLDB4NTQsMHgwZiwweDE0LDB4ZmYsMHhlZCwweDYwLDB4MzgsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsCisweDI0LDB4NDgsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweDc0LDB4OTAsMHhmMCwweGU0LDB4ZWYsMHg3NSwweGYwLAorMHgwOCwweGE0LDB4MjQsMHg0YSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4NzQsMHg4MCwweGYwLDB4ZTQsMHhlZiwKKzB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDRlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHg3NCwweDgwLDB4ZjAsCisweDgwLDB4MzQsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDA4LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LAorMHg4MywweDc0LDB4OTAsMHhmMCwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4MGEsMHhmNSwweDgyLDB4ZTQsMHgzNCwKKzB4ZmYsMHhmNSwweDgzLDB4ZTQsMHhmMCwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4MGUsMHhmNSwweDgyLDB4ZTQsCisweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDBlLDB4MDIsMHgyMCwweGQzLDB4OGQsMHg0NiwweDhlLDB4NDQsMHg4ZiwweDQ1LAorMHg3NCwweDdmLDB4OTAsMHhmZiwweGZkLDB4ZjAsMHg3NCwweDkwLDB4OTAsMHhmZiwweGZjLDB4ZjAsMHg5MCwweGZjLDB4MTksMHhlMCwKKzB4MzAsMHhlNiwweDA3LDB4OTAsMHhmZiwweGZjLDB4ZTAsMHg0NCwweDA0LDB4ZjAsMHgyMiwweDkwLDB4ZmMsMHgwZCwweGUwLDB4MTQsCisweDcwLDB4MDQsMHg5MCwweGZjLDB4MGMsMHhlMCwweDcwLDB4MzksMHg5MCwweGZjLDB4MDAsMHg3OSwweDA2LDB4N2EsMHgzNSwweDdiLAorMHgxMiwweDc4LDB4MDEsMHgxMiwweDAzLDB4ZjUsMHg3ZiwweDAwLDB4ZWYsMHgzMywweDQwLDB4MTUsMHhlZiwweDkwLDB4MzUsMHg0ZCwKKzB4OTMsMHhmYywweGVmLDB4MjQsMHg4MCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmMsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDBmLDB4ODAsCisweGU3LDB4OGYsMHg1OSwweDkwLDB4ZmMsMHgyYiwweDc5LDB4MTgsMHg3YSwweDM1LDB4N2IsMHgzNSwweDc4LDB4MDEsMHgxMiwweDAzLAorMHhmNSwweGU0LDB4OTAsMHhmZiwweGZmLDB4ZjAsMHg3NCwweDUxLDB4OTAsMHhmZiwweGZhLDB4ZjAsMHg3NCwweDA0LDB4OTAsMHhmZiwKKzB4ZmIsMHhmMCwweDc0LDB4NTMsMHg5MCwweGZmLDB4ZjgsMHhmMCwweDc0LDB4NTEsMHg5MCwweGZmLDB4ZjksMHhmMCwweDc0LDB4NTUsCisweDkwLDB4ZmYsMHhmNywweGYwLDB4NzQsMHg5MywweDkwLDB4ZmYsMHhmNiwweGYwLDB4NzQsMHgzMiwweDkwLDB4ZmYsMHhmNSwweGYwLAorMHg3NSwweDY0LDB4M2QsMHg3NSwweDYzLDB4ZmQsMHg3NSwweDYyLDB4MDEsMHhlNCwweDkwLDB4ZmYsMHg4MywweGYwLDB4NzQsMHg4MCwKKzB4OTAsMHhmZiwweDgxLDB4ZjAsMHg3NSwweDU4LDB4MDQsMHhlNSwweDU4LDB4NzUsMHhmMCwweDA3LDB4YTQsMHgyNCwweDNmLDB4ZjUsCisweDgyLDB4ZTQsMHgzNCwweGZjLDB4ZjUsMHg4MywweGUwLDB4NzgsMHg4OSwweGY2LDB4ZmMsMHg1NCwweDBmLDB4MTQsMHhmYywweDc4LAorMHg4OSwweGVjLDB4ZjYsMHhlNSwweDU4LDB4NzUsMHhmMCwweDA3LDB4YTQsMHgyNCwweDQxLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywKKzB4ZjUsMHg4MywweGUwLDB4NzgsMHg4YywweDc2LDB4ZjgsMHgwOCwweDc2LDB4MDAsMHhmYywweDc4LDB4ODksMHhlNiwweDc1LDB4ZjAsCisweDA4LDB4YTQsMHgyNCwweDQ4LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4NzgsMHg4OSwweGU2LAorMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHg3OCwKKzB4OGMsMHhlNiwweGZmLDB4MDgsMHhlNiwweDdlLDB4MDMsMHhjZiwweGMzLDB4MTMsMHhjZiwweDEzLDB4ZGUsMHhmOSwweGZlLDB4NzgsCisweDg5LDB4ZTYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NDksMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGVlLAorMHhmMCwweDc4LDB4ODksMHhlNiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0YSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwKKzB4ODMsMHg3NCwweDgwLDB4ZjAsMHg3OCwweDhhLDB4ZWMsMHhmNiwweDdkLDB4MDAsMHg3OCwweDhkLDB4ZTYsMHgyYywweGY2LDB4MTgsCisweGU2LDB4M2QsMHhmNiwweDc4LDB4OGMsMHhlNiwweGZkLDB4MDgsMHhlNiwweDdjLDB4MDMsMHhjZCwweGMzLDB4MTMsMHhjZCwweDEzLAorMHhkYywweGY5LDB4ZmMsMHg3OCwweDg5LDB4ZTYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NGQsMHhmNSwweDgyLDB4ZTQsMHgzNCwKKzB4ZmYsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDc4LDB4ODksMHhlNiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0ZSwweGY1LDB4ODIsCisweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4NzgsMHg4YywweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsMHg3OCwweDg5LAorMHhlNiwweGZmLDB4N2UsMHgwMCwweGVlLDB4MjQsMHhmYywweDUwLDB4MDMsMHgwMiwweDI0LDB4NmIsMHhlNCwweGVlLDB4NzUsMHhmMCwKKzB4MDcsMHhhNCwweDI0LDB4M2YsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZjLDB4ZjUsMHg4MywweGUwLDB4ZmYsMHhlNCwweGVmLDB4NTQsCisweDgwLDB4ZmEsMHhlNCwweGVmLDB4NTQsMHgwZiwweDE0LDB4ZmYsMHhlNCwweGVlLDB4NzUsMHhmMCwweDA3LDB4YTQsMHgyNCwweDQxLAorMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZjLDB4ZjUsMHg4MywweGUwLDB4NzgsMHg4YSwweGY2LDB4ZWUsMHg3NSwweGYwLDB4ODAsMHhhNCwKKzB4MjQsMHgwOCwweGY4LDB4ZTUsMHhmMCwweDM0LDB4ZjgsMHhmOSwweGU4LDB4ZmMsMHhlOSwweGZkLDB4OGEsMHg1OSwweGVhLDB4NzAsCisweDAzLDB4MDIsMHgyMywweGQ4LDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0OCwweGY1LDB4ODIsMHhlNCwweDM0LAorMHhmZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4NzgsMHg4YSwweGU2LDB4ZmEsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwKKzB4NGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGVhLDB4ZjAsMHhlZCwweGZiLDB4ZWMsMHg3YSwweDAzLDB4Y2IsCisweGMzLDB4MTMsMHhjYiwweDEzLDB4ZGEsMHhmOSwweGZhLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0OSwweGY1LAorMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlYSwweGYwLDB4NzgsMHg4YSwweGU2LDB4N2IsMHgwMCwweGZhLDB4ZWMsMHgyYSwKKzB4ZmMsMHhlZCwweDNiLDB4ZmQsMHhmYiwweGVjLDB4N2EsMHgwMywweGNiLDB4YzMsMHgxMywweGNiLDB4MTMsMHhkYSwweGY5LDB4ZmEsCisweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NGQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGVhLAorMHhmMCwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NGEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywKKzB4NzQsMHg4MCwweGYwLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0ZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsCisweGY1LDB4ODMsMHg3NCwweDgwLDB4ZjAsMHgwMiwweDI0LDB4NjcsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDA4LAorMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg3OCwweDhhLDB4ZTYsMHhmYSwweGU0LDB4ZWYsMHg3NSwKKzB4ZjAsMHgwOCwweGE0LDB4MjQsMHgwZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZWEsMHhmMCwweGVkLDB4ZmIsCisweGVjLDB4N2EsMHgwMywweGNiLDB4YzMsMHgxMywweGNiLDB4MTMsMHhkYSwweGY5LDB4ZmEsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LAorMHhhNCwweDI0LDB4MDksMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGVhLDB4ZjAsMHg3OCwweDhhLDB4ZTYsMHg3YiwKKzB4MDAsMHhmYSwweGVjLDB4MmEsMHhmYywweGVkLDB4M2IsMHhmZCwweGZiLDB4ZWMsMHg3YSwweDAzLDB4Y2IsMHhjMywweDEzLDB4Y2IsCisweDEzLDB4ZGEsMHhmOSwweGZhLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHgwZCwweGY1LDB4ODIsMHhlNCwweDM0LAorMHhmZiwweGY1LDB4ODMsMHhlYSwweGYwLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHgwYSwweGY1LDB4ODIsMHhlNCwKKzB4MzQsMHhmZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHgwZSwweGY1LDB4ODIsCisweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4MGUsMHgwMiwweDIyLDB4ZjQsMHg4ZSwweDU4LDB4NzgsMHg4YywweGVkLAorMHhmNiwweDA4LDB4ZWMsMHhmNiwweDc4LDB4ODksMHhlZiwweGY2LDB4MTIsMHgyMCwweGE0LDB4MjIsMHg4YywweDI2LDB4ZWMsMHgzMCwKKzB4ZTcsMHgxOCwweGU1LDB4MjYsMHg1NCwweDBmLDB4MTQsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NDgsMHhmNSwweDgyLDB4ZTQsCisweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZTAsMHg1NCwweGRmLDB4ZjAsMHg4MCwweDE2LDB4ZTUsMHgyNiwweDU0LDB4MGYsMHgxNCwweDc1LAorMHhmMCwweDA4LDB4YTQsMHgyNCwweDA4LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlMCwweDU0LDB4ZGYsMHhmMCwKKzB4MjIsMHhlYywweDkwLDB4ZmQsMHgzZiwweGYwLDB4OGMsMHgyNCwweGVkLDB4MjQsMHgwMywweGY1LDB4MjUsMHg3ZCwweDAwLDB4ZDMsCisweDk1LDB4NmMsMHhlZCwweDk1LDB4NmIsMHg0MCwweDAzLDB4ODUsMHg2YywweDI1LDB4ZTUsMHgyNSwweDI0LDB4YjcsMHg1MCwweDA5LAorMHg3NSwweDI1LDB4MDMsMHg3NCwweDAyLDB4OTAsMHhmZCwweDNmLDB4ZjAsMHhhYywweDI1LDB4MTIsMHgyZiwweGMzLDB4MjIsMHhlNCwKKzB4ZjUsMHg2NiwweGY1LDB4NjUsMHgxMiwweDI0LDB4ZTgsMHgyMiwweDkwLDB4ZmQsMHgzZCwweGUwLDB4NjUsMHg2ZCwweDYwLDB4MGUsCisweDc0LDB4MDQsMHg5MCwweGZkLDB4M2YsMHhmMCwweGU0LDB4ZjUsMHg2NSwweDc1LDB4NjYsMHgwMywweDgwLDB4NDYsMHg3ZCwweDZkLAorMHhlNCwweGZlLDB4ZmYsMHg3OSwweDNkLDB4N2EsMHhmZCwweDdiLDB4MDEsMHg3NCwweDA1LDB4NzgsMHgwMCwweDEyLDB4MDMsMHgzZiwKKzB4ZTUsMHg2NiwweDI0LDB4MDMsMHhmNSwweDY2LDB4ZTUsMHg2NSwweDM0LDB4MDAsMHhmNSwweDY1LDB4ZTUsMHg2NiwweGQzLDB4OTUsCisweDZjLDB4ZTUsMHg2NSwweDk1LDB4NmIsMHg0MCwweDA2LDB4ODUsMHg2YywweDY2LDB4ODUsMHg2YiwweDY1LDB4ZDMsMHhlNSwweDY2LAorMHg5NCwweDQ4LDB4ZTUsMHg2NSwweDk0LDB4MDAsMHg0MCwweDBjLDB4NzQsMHgwMiwweDkwLDB4ZmQsMHgzZiwweGYwLDB4ZTQsMHhmNSwKKzB4NjUsMHg3NSwweDY2LDB4MDMsMHhhYywweDY2LDB4MTIsMHgyZiwweGMzLDB4MjIsMHhlYywweDkwLDB4ZmQsMHgzZiwweGYwLDB4ZTQsCisweGY1LDB4NjYsMHhmNSwweDY1LDB4OGMsMHgzMiwweGVjLDB4NjAsMHgwNSwweDEyLDB4MmYsMHhiNCwweDgwLDB4MDUsMHg3YywweDAwLAorMHgxMiwweDJmLDB4YzMsMHgyMiwweDkwLDB4ZmYsMHgwNCwweGUwLDB4ZjUsMHg0YSwweDkwLDB4ZmYsMHgwNiwweGUwLDB4ZmQsMHhhMywKKzB4ZTAsMHhlZCwweDdkLDB4MDAsMHhmYywweDdkLDB4MDAsMHhmYywweDkwLDB4ZmYsMHgwNiwweGUwLDB4ZmYsMHhhMywweGUwLDB4N2UsCisweDAwLDB4ZmYsMHhlNCwweGZlLDB4ZWMsMHg0ZSwweGZjLDB4ZWQsMHg0ZiwweGZkLDB4YzMsMHhlYywweDk0LDB4NDgsMHhlZCwweDk0LAorMHgwMCwweDUwLDB4MjIsMHg5MCwweGZmLDB4MDYsMHhlMCwweGZkLDB4YTMsMHhlMCwweGVkLDB4N2QsMHgwMCwweGZjLDB4N2QsMHgwMCwKKzB4ZmMsMHg5MCwweGZmLDB4MDYsMHhlMCwweGZmLDB4YTMsMHhlMCwweDdlLDB4MDAsMHhmZiwweGU0LDB4ZmUsMHhlYywweDRlLDB4ZmMsCisweGVkLDB4NGYsMHhmZCwweDgwLDB4MDQsMHhlNCwweGZkLDB4N2MsMHg0OCwweDhjLDB4NmMsMHg4ZCwweDZiLDB4OTAsMHhmZiwweDAyLAorMHhlMCwweGZkLDB4YTMsMHhlMCwweGVkLDB4N2QsMHgwMCwweGZjLDB4N2QsMHgwMCwweGZjLDB4OTAsMHhmZiwweDAyLDB4ZTAsMHhmZiwKKzB4YTMsMHhlMCwweDdlLDB4MDAsMHhmZiwweGU0LDB4ZmUsMHhlYywweDRlLDB4ZjUsMHg0YywweGVkLDB4NGYsMHhmNSwweDRiLDB4NzUsCisweDY0LDB4M2QsMHg3NSwweDYzLDB4ZmQsMHg3NSwweDYyLDB4MDEsMHg3ZCwweDNkLDB4N2UsMHhmZCwweDdmLDB4MDEsMHg3OSwweDZkLAorMHhlNCwweGZhLDB4ZmIsMHg3NCwweDA1LDB4NzgsMHgwMCwweDEyLDB4MDMsMHgzZiwweDc1LDB4NDksMHgwMCwweGU1LDB4NDksMHgyNCwKKzB4ZmUsMHg0MCwweDE5LDB4YWQsMHg2NCwweGFlLDB4NjMsMHhhZiwweDYyLDB4ZTQsMHgxMiwweDAzLDB4MGYsMHgwNSwweDQ5LDB4MGQsCisweGVkLDB4NzAsMHgwMSwweDBlLDB4OGQsMHg2NCwweDhlLDB4NjMsMHg4ZiwweDYyLDB4ODAsMHhlMSwweDc1LDB4NjQsMHgzZCwweDc1LAorMHg2MywweGZkLDB4NzUsMHg2MiwweDAxLDB4OTAsMHhmZiwweDAwLDB4ZTAsMHg1NCwweDYwLDB4YjQsMHgwMCwweDAyLDB4ODAsMHgwNiwKKzB4ZDMsMHg1MCwweDAzLDB4MDIsMHgyYywweDEyLDB4ZTUsMHg0YSwweDU0LDB4MGYsMHhmNSwweDQ5LDB4ZTUsMHg0YSwweDU0LDB4ODAsCisweGEyLDB4ZTAsMHg5MiwweDAyLDB4OTAsMHhmZiwweDAxLDB4ZTAsMHgxMiwweDAxLDB4ODEsMHgwMCwweDBiLDB4MmMsMHgwZCwweDI2LAorMHg2NywweDI3LDB4ODUsMHgyYywweDBkLDB4MjgsMHg5MSwweDJjLDB4MGQsMHgyOSwweDc0LDB4MjksMHhhOCwweDJiLDB4MGYsMHgyYiwKKzB4MTIsMHgyYiwweDUyLDB4MmIsMHhiNiwweDJiLDB4ZTQsMHhlNSwweDY3LDB4MzAsMHhlNywweDBlLDB4ZTUsMHg0YywweDQ1LDB4NGIsCisweDcwLDB4MDgsMHhlNSwweDZjLDB4NjQsMHgwMiwweDQ1LDB4NmIsMHg2MCwweDAzLDB4MDIsMHgyYywweDBmLDB4OTAsMHhmZiwweDAwLAorMHhlMCwweDU0LDB4MWYsMHhiNCwweDAwLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDI5LDB4ZTUsMHg0YSwweDYwLDB4MDMsMHgwMiwKKzB4MjcsMHg4MiwweGFkLDB4NjQsMHhhZSwweDYzLDB4YWYsMHg2MiwweDc0LDB4MDEsMHgxMiwweDAzLDB4MGYsMHg3OCwweGE3LDB4ZTYsCisweDMwLDB4ZTAsMHgwYiwweGFkLDB4NjQsMHhhZSwweDYzLDB4YWYsMHg2MiwweDc0LDB4MDIsMHgxMiwweDAzLDB4MGYsMHg3YywweDAyLAorMHgxMiwweDJmLDB4YzMsMHgyMiwweGI0LDB4MDEsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MWIsMHhlNSwweDY3LDB4MjAsMHhlMSwKKzB4MDcsMHhlNSwweDRhLDB4NjAsMHgwMywweDAyLDB4MjcsMHg4MiwweGU1LDB4NGEsMHgyNCwweGZlLDB4NTAsMHgwMywweDAyLDB4MjcsCisweDgyLDB4N2MsMHgwMiwweDEyLDB4MmYsMHhjMywweDIyLDB4YjQsMHgwMiwweDAyLDB4ODAsMHgwNiwweGQzLDB4NTAsMHgwMywweDAyLAorMHgyNywweDgwLDB4ZTUsMHg2NywweDIwLDB4ZTEsMHgwZCwweGU1LDB4NGEsMHg2MCwweDA5LDB4ZTUsMHg0YSwweDY0LDB4ODAsMHg2MCwKKzB4MDMsMHgwMiwweDI3LDB4ODIsMHhhYywweDRhLDB4MTIsMHgzMCwweDRhLDB4NDAsMHgwMywweDAyLDB4MjcsMHg4MiwweGU1LDB4NDksCisweDcwLDB4MjUsMHgzMCwweDAyLDB4MTEsMHg5MCwweGZmLDB4ODAsMHhlMCwweDU0LDB4MDgsMHhhZCwweDY0LDB4YWUsMHg2MywweGFmLAorMHg2MiwweDEyLDB4MDMsMHgwZiwweDgwLDB4MGYsMHg5MCwweGZmLDB4ODIsMHhlMCwweDU0LDB4MDgsMHhhZCwweDY0LDB4YWUsMHg2MywKKzB4YWYsMHg2MiwweDEyLDB4MDMsMHgwZiwweDgwLDB4M2QsMHgxNSwweDQ5LDB4MzAsMHgwMiwweDFkLDB4ZTUsMHg0OSwweDc1LDB4ZjAsCisweDA4LDB4YTQsMHgyNCwweDQ4LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlMCwweDU0LDB4MDgsMHhhZCwweDY0LAorMHhhZSwweDYzLDB4YWYsMHg2MiwweDEyLDB4MDMsMHgwZiwweDgwLDB4MWIsMHhlNSwweDQ5LDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwKKzB4MDgsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGUwLDB4NTQsMHgwOCwweGFkLDB4NjQsMHhhZSwweDYzLDB4YWYsCisweDYyLDB4MTIsMHgwMywweDBmLDB4YWQsMHg2NCwweGFlLDB4NjMsMHhhZiwweDYyLDB4MTIsMHgwMSwweGU2LDB4NjAsMHgwYiwweGFkLAorMHg2NCwweGFlLDB4NjMsMHhhZiwweDYyLDB4NzQsMHgwMSwweDEyLDB4MDMsMHgwZiwweDdjLDB4MDIsMHgxMiwweDJmLDB4YzMsMHgyMiwKKzB4ODAsMHgwMCwweDAyLDB4MmMsMHgwZiwweGU1LDB4NjcsMHgyMCwweGU3LDB4MDYsMHhlNSwweDZjLDB4NDUsMHg2YiwweDYwLDB4MDMsCisweDAyLDB4MmMsMHgwZiwweDkwLDB4ZmYsMHgwMCwweGUwLDB4NTQsMHgxZiwweGI0LDB4MDAsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLAorMHgxYSwweGU1LDB4NGMsMHgxNCwweDQ1LDB4NGIsMHg3MCwweDA0LDB4ZTUsMHg0YSwweDYwLDB4MDMsMHgwMiwweDI4LDB4OGUsMHg3OCwKKzB4YTcsMHhlNiwweDU0LDB4ZmUsMHhmNiwweDdjLDB4MDAsMHgxMiwweDJmLDB4YzMsMHgyMiwweGI0LDB4MDEsMHgwMiwweDgwLDB4MDMsCisweGQzLDB4NDAsMHgyYSwweGU1LDB4NjcsMHgyMCwweGUxLDB4MDgsMHhlNSwweDY3LDB4MjAsMHhlMCwweDAzLDB4MDIsMHgyOCwweDhlLAorMHhlNSwweDY3LDB4MzAsMHhlMCwweDA0LDB4ZTUsMHg0YSwweDcwLDB4MGIsMHhlNSwweDY3LDB4MzAsMHhlMSwweDA5LDB4ZTUsMHg0YSwKKzB4MjQsMHhmZSwweDUwLDB4MDMsMHgwMiwweDI4LDB4OGUsMHg3YywweDAwLDB4MTIsMHgyZiwweGMzLDB4MjIsMHhiNCwweDAyLDB4MDIsCisweDgwLDB4MDYsMHhkMywweDUwLDB4MDMsMHgwMiwweDI4LDB4OGMsMHhlNSwweDRjLDB4NDUsMHg0YiwweDYwLDB4MDMsMHgwMiwweDI4LAorMHg4ZSwweGFjLDB4NGEsMHgxMiwweDMwLDB4NGEsMHg0MCwweDAzLDB4MDIsMHgyOCwweDhlLDB4ZTUsMHg2NywweDIwLDB4ZTEsMHgwNywKKzB4ZTUsMHg2NywweDIwLDB4ZTAsMHgwMiwweDgwLDB4NzcsMHhlNSwweDY3LDB4MzAsMHhlMCwweDA2LDB4ZTUsMHg0OSwweDYwLDB4MDIsCisweDgwLDB4NmMsMHhlNSwweDQ5LDB4NzAsMHgwZiwweDkwLDB4ZmYsMHg4MiwweGUwLDB4NTQsMHhmNywweGYwLDB4OTAsMHhmZiwweDgwLAorMHhlMCwweDU0LDB4ZjcsMHhmMCwweDIyLDB4ZTUsMHg0OSwweGI0LDB4MDEsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MDksMHg3ZCwKKzB4MDEsMHg3YywweDAzLDB4MTIsMHgwZiwweDBiLDB4ODAsMHgxMSwweGI0LDB4MDIsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MDksCisweDdkLDB4MDEsMHg3YywweDA0LDB4MTIsMHgwZiwweDBiLDB4ODAsMHgwMCwweDE1LDB4NDksMHgzMCwweDAyLDB4MTUsMHhlNSwweDQ5LAorMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NDgsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGUwLDB4NTQsMHhmNywKKzB4ZjAsMHg4MCwweDEzLDB4ZTUsMHg0OSwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHgwOCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsCisweGY1LDB4ODMsMHhlMCwweDU0LDB4ZjcsMHhmMCwweDdjLDB4MDAsMHgxMiwweDJmLDB4YzMsMHgyMiwweDgwLDB4MDAsMHgwMiwweDJjLAorMHgwZiwweGU1LDB4NjcsMHgyMCwweGU3LDB4MDYsMHhlNSwweDZjLDB4NDUsMHg2YiwweDYwLDB4MDMsMHgwMiwweDJjLDB4MGYsMHg5MCwKKzB4ZmYsMHgwMCwweGUwLDB4NTQsMHgxZiwweGI0LDB4MDAsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MWEsMHhlNSwweDRjLDB4MTQsCisweDQ1LDB4NGIsMHg3MCwweDA0LDB4ZTUsMHg0YSwweDYwLDB4MDMsMHgwMiwweDI5LDB4NzEsMHg3OCwweGE3LDB4ZTYsMHg0NCwweDAxLAorMHhmNiwweDdjLDB4MDAsMHgxMiwweDJmLDB4YzMsMHgyMiwweGI0LDB4MDEsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MjksMHhlNSwKKzB4NjcsMHgyMCwweGUxLDB4MDgsMHhlNSwweDY3LDB4MjAsMHhlMCwweDAzLDB4MDIsMHgyOSwweDcxLDB4ZTUsMHg2NywweDMwLDB4ZTAsCisweDA0LDB4ZTUsMHg0OSwweDcwLDB4MGIsMHhlNSwweDY3LDB4MzAsMHhlMSwweDA4LDB4ZTUsMHg0OSwweDI0LDB4ZmUsMHg1MCwweDAyLAorMHg4MCwweDdmLDB4N2MsMHgwMCwweDEyLDB4MmYsMHhjMywweDIyLDB4YjQsMHgwMiwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHg2ZiwKKzB4ZTUsMHg0YywweDQ1LDB4NGIsMHg2MCwweDAyLDB4ODAsMHg2OSwweGFjLDB4NGEsMHgxMiwweDMwLDB4NGEsMHg0MCwweDAyLDB4ODAsCisweDYwLDB4ZTUsMHg2NywweDIwLDB4ZTEsMHgwNywweGU1LDB4NjcsMHgyMCwweGUwLDB4MDIsMHg4MCwweDU0LDB4ZTUsMHg0OSwweDcwLAorMHgxNCwweDMwLDB4MDIsMHgwOSwweDkwLDB4ZmYsMHg4MCwweGUwLDB4NDQsMHgwOCwweGYwLDB4ODAsMHgwNywweDkwLDB4ZmYsMHg4MiwKKzB4ZTAsMHg0NCwweDA4LDB4ZjAsMHgyMiwweGU1LDB4NjcsMHgzMCwweGUxLDB4MzMsMHgxNSwweDQ5LDB4MzAsMHgwMiwweDE1LDB4ZTUsCisweDQ5LDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDQ4LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlMCwweDQ0LAorMHgwOCwweGYwLDB4ODAsMHgxMywweGU1LDB4NDksMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4MDgsMHhmNSwweDgyLDB4ZTQsMHgzNCwKKzB4ZmYsMHhmNSwweDgzLDB4ZTAsMHg0NCwweDA4LDB4ZjAsMHg3YywweDAwLDB4MTIsMHgyZiwweGMzLDB4MjIsMHg4MCwweDAyLDB4ODAsCisweDAwLDB4MDIsMHgyYywweDBmLDB4ZTUsMHg2NywweDIwLDB4ZTcsMHgxMiwweGU1LDB4NmMsMHg0NSwweDZiLDB4NzAsMHgwYywweGU1LAorMHg0YSwweDcwLDB4MDgsMHg5MCwweGZmLDB4MDAsMHhlMCwweDU0LDB4MWYsMHg2MCwweDAzLDB4MDIsMHgyYywweDBmLDB4ZTUsMHg0YywKKzB4OTAsMHhmZiwweGZmLDB4ZjAsMHg5MCwweGZmLDB4ZmYsMHhlMCwweDYwLDB4MDUsMHg0MywweDY3LDB4MDEsMHg4MCwweDAzLDB4NTMsCisweDY3LDB4ZmUsMHg3YywweDAwLDB4MTIsMHgyZiwweGMzLDB4MjIsMHhlNSwweDY3LDB4MzAsMHhlNywweDBlLDB4ZTUsMHg2YywweDQ1LAorMHg2YiwweDYwLDB4MDgsMHg5MCwweGZmLDB4MDAsMHhlMCwweDU0LDB4MWYsMHg2MCwweDAzLDB4MDIsMHgyYywweDBmLDB4YWQsMHg0YiwKKzB4ZTUsMHg0YywweGVkLDB4N2QsMHgwMCwweGZjLDB4N2QsMHgwMCwweGZjLDB4YmQsMHgwMCwweDAyLDB4ODAsMHgwMywweDAyLDB4MmIsCisweDBhLDB4YjQsMHgwMSwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgzMiwweGU1LDB4NGEsMHg3MCwweDA1LDB4ZTUsMHg0YywweGZjLAorMHg2MCwweDAzLDB4MDIsMHgyYiwweDBjLDB4NzUsMHg2NCwweDAwLDB4NzUsMHg2MywweGZjLDB4NzUsMHg2MiwweDAxLDB4ZDMsMHhlNSwKKzB4NmMsMHg5NCwweDEyLDB4ZTUsMHg2YiwweDk0LDB4MDAsMHg0MCwweDA2LDB4ZTQsMHhmZCwweDdjLDB4MTIsMHg4MCwweDA0LDB4YWMsCisweDZjLDB4YWQsMHg2YiwweDhjLDB4NmEsMHg4ZCwweDY5LDB4MTIsMHgyZiwweGQ4LDB4MjIsMHhiNCwweDAyLDB4MDIsMHg4MCwweDAzLAorMHhkMywweDQwLDB4NTksMHhlNSwweDRhLDB4NjAsMHgwMywweDAyLDB4MmIsMHgwYywweGU1LDB4NGMsMHhmYywweDcwLDB4MjcsMHg3NSwKKzB4NjQsMHgxMiwweDc1LDB4NjMsMHhmYywweDc1LDB4NjIsMHgwMSwweGQzLDB4ZTUsMHg2YywweDk0LDB4MTksMHhlNSwweDZiLDB4OTQsCisweDAwLDB4NDAsMHgwNiwweGU0LDB4ZmQsMHg3YywweDE5LDB4ODAsMHgwNCwweGFjLDB4NmMsMHhhZCwweDZiLDB4OGMsMHg2YSwweDhkLAorMHg2OSwweDEyLDB4MmYsMHhkOCwweDgwLDB4MjUsMHg3NSwweDY0LDB4MmIsMHg3NSwweDYzLDB4ZmMsMHg3NSwweDYyLDB4MDEsMHhkMywKKzB4ZTUsMHg2YywweDk0LDB4MzUsMHhlNSwweDZiLDB4OTQsMHgwMCwweDQwLDB4MDYsMHhlNCwweGZkLDB4N2MsMHgzNSwweDgwLDB4MDQsCisweGFjLDB4NmMsMHhhZCwweDZiLDB4OGMsMHg2YSwweDhkLDB4NjksMHgxMiwweDJmLDB4ZDgsMHgyMiwweGI0LDB4MDMsMHgwMiwweDgwLAorMHgwNiwweGQzLDB4NTAsMHgwMywweDAyLDB4MmIsMHgwYSwweGU1LDB4NGMsMHhmNSwweDQ5LDB4NzAsMHgwZiwweDkwLDB4ZmYsMHgwNCwKKzB4ZTAsMHhmZCwweGEzLDB4ZTAsMHg0ZCwweDYwLDB4MDMsMHgwMiwweDJiLDB4MGMsMHg4MCwweDE4LDB4OTAsMHhmYywweDgyLDB4ZTAsCisweGZkLDB4YTMsMHhlMCwweGZjLDB4OTAsMHhmZiwweDA1LDB4ZTAsMHg2YywweDcwLDB4MDcsMHg5MCwweGZmLDB4MDQsMHhlMCwweDZkLAorMHg2MCwweDAyLDB4ODAsMHg2OCwweGU0LDB4ZjUsMHg2YSwweGY1LDB4NjksMHg3ZiwweDAwLDB4ZTUsMHg0OSwweDE0LDB4YzUsMHg0OSwKKzB4NjAsMHgwZiwweGVmLDB4MjQsMHg4MCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmMsMHhmNSwweDgzLDB4ZTAsMHgyZiwweGZmLDB4ODAsCisweGVhLDB4OGYsMHg0YSwweGU1LDB4NGEsMHgyNCwweDgwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywweGY1LDB4ODMsMHhlMCwweDdkLAorMHgwMCwweGQzLDB4OTUsMHg2YywweGVkLDB4OTUsMHg2YiwweDQwLDB4MDYsMHhhYywweDZjLDB4YWQsMHg2YiwweDgwLDB4MGYsMHhlNSwKKzB4NGEsMHgyNCwweDgwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywweGY1LDB4ODMsMHhlMCwweDdkLDB4MDAsMHhmYywweDhjLDB4NmEsCisweDhkLDB4NjksMHhlNSwweDRhLDB4MjQsMHg4MCwweGZjLDB4ZTQsMHgzNCwweGZjLDB4ZmQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLAorMHg4ZCwweDY0LDB4OGUsMHg2MywweDhmLDB4NjIsMHgxMiwweDJmLDB4ZDgsMHgyMiwweDgwLDB4MDAsMHgwMiwweDJjLDB4MGYsMHgwMiwKKzB4MmMsMHgwZiwweGU1LDB4NjcsMHgzMCwweGU3LDB4MTksMHhlNSwweDZjLDB4MTQsMHg0NSwweDZiLDB4NzAsMHgxMiwweGU1LDB4NGEsCisweDcwLDB4MGUsMHhlNSwweDRjLDB4NDUsMHg0YiwweDcwLDB4MDgsMHg5MCwweGZmLDB4MDAsMHhlMCwweDU0LDB4MWYsMHg2MCwweDAzLAorMHgwMiwweDJjLDB4MGYsMHhlNSwweDY3LDB4MjAsMHhlMCwweDA4LDB4ZTUsMHg2NywweDIwLDB4ZTEsMHgwMywweDAyLDB4MmMsMHgwZiwKKzB4NzUsMHg2NCwweDY4LDB4ZTQsMHhmNSwweDYzLDB4ZjUsMHg2MiwweGU0LDB4ZjUsMHg2OSwweDA0LDB4ZjUsMHg2YSwweDEyLDB4MmYsCisweGQ4LDB4MjIsMHhlNSwweDY3LDB4MjAsMHhlNywweDI3LDB4ZTUsMHg2YywweDQ1LDB4NmIsMHg3MCwweDIxLDB4ZTUsMHg0YSwweDcwLAorMHgxZCwweGU1LDB4NGMsMHg2NCwweDAyLDB4NDUsMHg0YiwweDYwLDB4MGQsMHhlNSwweDRjLDB4MTQsMHg0NSwweDRiLDB4NjAsMHgwNiwKKzB4ZTUsMHg0YywweDQ1LDB4NGIsMHg3MCwweDA4LDB4OTAsMHhmZiwweDAwLDB4ZTAsMHg1NCwweDFmLDB4NjAsMHgwMywweDAyLDB4MmMsCisweDBmLDB4ZTUsMHg2NywweDIwLDB4ZTAsMHgwOCwweGU1LDB4NjcsMHgyMCwweGUxLDB4MDMsMHgwMiwweDJjLDB4MGYsMHg4NSwweDRjLAorMHg2OCwweGU1LDB4NjgsMHg3MCwweDA4LDB4NDMsMHg2NywweDAxLDB4NTMsMHg2NywweGZkLDB4ODAsMHgxMywweGU1LDB4NjgsMHg2NCwKKzB4MDIsMHg2MCwweDA3LDB4ZTUsMHg2OCwweDE0LDB4NjAsMHgwMiwweDgwLDB4NjUsMHg1MywweDY3LDB4ZmUsMHg0MywweDY3LDB4MDIsCisweDdjLDB4MDAsMHgxMiwweDJmLDB4YzMsMHgyMiwweGU1LDB4NjcsMHgzMCwweGU3LDB4MWEsMHhlNSwweDZjLDB4MTQsMHg0NSwweDZiLAorMHg3MCwweDEzLDB4ZTUsMHg0YSwweDcwLDB4MGYsMHhlNSwweDRjLDB4NDUsMHg0YiwweDcwLDB4MDksMHg5MCwweGZmLDB4MDAsMHhlMCwKKzB4NTQsMHgxZiwweDE0LDB4NjAsMHgwMiwweDgwLDB4MzgsMHhlNSwweDY3LDB4MjAsMHhlMSwweDAyLDB4ODAsMHgzMSwweDdjLDB4MDEsCisweDEyLDB4MmYsMHhjMywweDIyLDB4ZTUsMHg2NywweDIwLDB4ZTcsMHgxNSwweGU1LDB4NmMsMHg0NSwweDZiLDB4NzAsMHgwZiwweGU1LAorMHg0YywweDQ1LDB4NGIsMHg3MCwweDA5LDB4OTAsMHhmZiwweDAwLDB4ZTAsMHg1NCwweDFmLDB4MTQsMHg2MCwweDAyLDB4ODAsMHgwZiwKKzB4ZTUsMHg2NywweDIwLDB4ZTEsMHgwMiwweDgwLDB4MDgsMHg3YywweDAwLDB4MTIsMHgyZiwweGMzLDB4MjIsMHg4MCwweDAwLDB4MDIsCisweDJlLDB4Y2EsMHhiNCwweDQwLDB4MDIsMHg4MCwweDA2LDB4ZDMsMHg1MCwweDAzLDB4MDIsMHgyZSwweGMwLDB4OTAsMHhmZiwweDAxLAorMHhlMCwweDkwLDB4ZmQsMHgzZCwweGYwLDB4ZTUsMHg0YSwweDkwLDB4ZmQsMHgzZSwweGYwLDB4ZTQsMHg5MCwweGZkLDB4M2YsMHhmMCwKKzB4ZTUsMHg2NCwweDI0LDB4MDMsMHhmNSwweDY0LDB4ZTUsMHg2MywweDM0LDB4MDAsMHhmNSwweDYzLDB4YWQsMHg0YiwweGU1LDB4NGMsCisweDg1LDB4NjQsMHg4MiwweDg1LDB4NjMsMHg4MywweGNkLDB4ZjAsMHhhMywweGNkLDB4ZjAsMHg5MCwweGZmLDB4MDEsMHhlMCwweDEyLAorMHgwMSwweGI3LDB4MmMsMHg3ZCwweDAxLDB4MmMsMHhhMywweDAyLDB4MmMsMHhjZCwweDAzLDB4MmMsMHhmNywweDA0LDB4MmQsMHg0NSwKKzB4MDUsMHgyZCwweDgyLDB4MDYsMHgyZCwweGE4LDB4MDcsMHgyZCwweGNlLDB4MDgsMHgyZCwweGY0LDB4MDksMHgyZSwweDFhLDB4MGIsCisweDJlLDB4NDAsMHgwYywweDJlLDB4NGYsMHg4MCwweDJlLDB4NGYsMHg4MSwweDAwLDB4MDAsMHgyZSwweGFkLDB4ZTUsMHg2NywweDIwLAorMHhlNywweDA2LDB4N2MsMHgwNSwweDEyLDB4MjUsMHg0YSwweDIyLDB4N2QsMHhiNywweDdlLDB4MzQsMHg3ZiwweDAyLDB4NzksMHg0MCwKKzB4N2EsMHhmZCwweDdiLDB4MDEsMHg3NCwweDA4LDB4NzgsMHgwMCwweDEyLDB4MDMsMHgzZiwweDdkLDB4MDgsMHg3YywweDAwLDB4MTIsCisweDI0LDB4YjEsMHgyMiwweGU1LDB4NjcsMHgyMCwweGU3LDB4MDYsMHg3YywweDA1LDB4MTIsMHgyNSwweDRhLDB4MjIsMHhlNSwweDRhLAorMHhiNCwweDAzLDB4MDAsMHg0MCwweDEwLDB4YjQsMHgwNSwweDAwLDB4NTAsMHgwYiwweGU1LDB4NGEsMHg3ZiwweDAwLDB4ZmUsMHg3YywKKzB4MTAsMHgxMiwweDMxLDB4OWEsMHgyMiwweDdkLDB4MDAsMHg3YywweDA3LDB4MTIsMHgyNCwweGIxLDB4MjIsMHhlNSwweDY3LDB4MjAsCisweGU3LDB4MDYsMHg3YywweDA1LDB4MTIsMHgyNSwweDRhLDB4MjIsMHhlNSwweDRhLDB4YjQsMHgwMywweDAwLDB4NDAsMHgxMCwweGI0LAorMHgwNSwweDAwLDB4NTAsMHgwYiwweGU1LDB4NGEsMHg3ZiwweDAwLDB4ZmUsMHg3YywweDExLDB4MTIsMHgzMSwweDlhLDB4MjIsMHg3ZCwKKzB4MDAsMHg3YywweDA3LDB4MTIsMHgyNCwweGIxLDB4MjIsMHhlNSwweDY3LDB4MjAsMHhlNywweDA2LDB4N2MsMHgwNSwweDEyLDB4MjUsCisweDRhLDB4MjIsMHhlNSwweDRhLDB4YjQsMHgwNSwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgwYSwweGU0LDB4ZmYsMHgwNCwweGZlLAorMHg3YywweDBhLDB4MTIsMHgzMSwweDlhLDB4MjIsMHhiNCwweDAxLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDBhLDB4ZTQsMHhmZiwKKzB4MDQsMHhmZSwweDdjLDB4MDgsMHgxMiwweDMxLDB4OWEsMHgyMiwweGI0LDB4MDMsMHgwMCwweDQwLDB4MTAsMHhiNCwweDA1LDB4MDAsCisweDUwLDB4MGIsMHhlNSwweDRhLDB4N2YsMHgwMCwweGZlLDB4N2MsMHgxMywweDEyLDB4MzEsMHg5YSwweDIyLDB4N2QsMHgwMCwweDdjLAorMHgwNywweDEyLDB4MjQsMHhiMSwweDIyLDB4ZTUsMHg2NywweDIwLDB4ZTcsMHgzNCwweGQzLDB4ZTUsMHg2YywweDk0LDB4NDgsMHhlNSwKKzB4NmIsMHg5NCwweDAwLDB4NTAsMHgwNiwweGU1LDB4NmMsMHg0NSwweDZiLDB4NzAsMHgwNiwweDdjLDB4MDIsMHgxMiwweDI1LDB4NGEsCisweDIyLDB4ZTUsMHg0YSwweGI0LDB4MDEsMHgwMywweGIzLDB4NDAsMHgwYiwweGMzLDB4YjQsMHgwMywweDAwLDB4NDAsMHgwOSwweGI0LAorMHgwNiwweDAwLDB4NTAsMHgwNCwweDEyLDB4MzAsMHg3MCwweDIyLDB4N2MsMHgwNywweDEyLDB4MjUsMHg0YSwweDIyLDB4MTIsMHgyNCwKKzB4ZTgsMHgyMiwweGU1LDB4NjcsMHgyMCwweGU3LDB4MWQsMHhlNSwweDRhLDB4YjQsMHgwMywweDAwLDB4NDAsMHgxMCwweGI0LDB4MDUsCisweDAwLDB4NTAsMHgwYiwweGU1LDB4NGEsMHg3ZiwweDAwLDB4ZmUsMHg3YywweDE2LDB4MTIsMHgzMSwweDlhLDB4MjIsMHg3YywweDA3LAorMHgxMiwweDI1LDB4NGEsMHgyMiwweDEyLDB4MjQsMHhlOCwweDIyLDB4ZTUsMHg2NywweDIwLDB4ZTcsMHgxZCwweGU1LDB4NGEsMHhiNCwKKzB4MDMsMHgwMCwweDQwLDB4MTAsMHhiNCwweDA1LDB4MDAsMHg1MCwweDBiLDB4ZTUsMHg0YSwweDdmLDB4MDAsMHhmZSwweDdjLDB4MTksCisweDEyLDB4MzEsMHg5YSwweDIyLDB4N2MsMHgwNywweDEyLDB4MjUsMHg0YSwweDIyLDB4MTIsMHgyNCwweGU4LDB4MjIsMHhlNSwweDY3LAorMHgyMCwweGU3LDB4MWQsMHhlNSwweDRhLDB4YjQsMHgwMywweDAwLDB4NDAsMHgxMCwweGI0LDB4MDUsMHgwMCwweDUwLDB4MGIsMHhlNSwKKzB4NGEsMHg3ZiwweDAwLDB4ZmUsMHg3YywweDE3LDB4MTIsMHgzMSwweDlhLDB4MjIsMHg3YywweDA3LDB4MTIsMHgyNSwweDRhLDB4MjIsCisweDEyLDB4MjQsMHhlOCwweDIyLDB4ZTUsMHg2NywweDIwLDB4ZTcsMHgxZCwweGU1LDB4NGEsMHhiNCwweDAzLDB4MDAsMHg0MCwweDEwLAorMHhiNCwweDA1LDB4MDAsMHg1MCwweDBiLDB4ZTUsMHg0YSwweDdmLDB4MDAsMHhmZSwweDdjLDB4MTgsMHgxMiwweDMxLDB4OWEsMHgyMiwKKzB4N2MsMHgwNywweDEyLDB4MjUsMHg0YSwweDIyLDB4MTIsMHgyNCwweGU4LDB4MjIsMHhlNSwweDY3LDB4MjAsMHhlNywweDFkLDB4ZTUsCisweDRhLDB4YjQsMHgwMywweDAwLDB4NDAsMHgxMCwweGI0LDB4MDUsMHgwMCwweDUwLDB4MGIsMHhlNSwweDRhLDB4N2YsMHgwMCwweGZlLAorMHg3YywweDE1LDB4MTIsMHgzMSwweDlhLDB4MjIsMHg3YywweDA3LDB4MTIsMHgyNSwweDRhLDB4MjIsMHgxMiwweDI0LDB4ZTgsMHgyMiwKKzB4ZTUsMHg2NywweDIwLDB4ZTcsMHgwNiwweDdjLDB4MDcsMHgxMiwweDI1LDB4NGEsMHgyMiwweDEyLDB4MjQsMHhlOCwweDIyLDB4ZTUsCisweDY3LDB4MzAsMHhlNywweDIwLDB4OTAsMHhmZiwweDAwLDB4ZTAsMHg1NCwweDFmLDB4NzAsMHgxMCwweDkwLDB4ZmYsMHgwMSwweGUwLAorMHhiNCwweDgwLDB4MDUsMHgxMiwweDI0LDB4ZGYsMHg4MCwweDAzLDB4MTIsMHgyNCwweGU4LDB4MjIsMHg3ZCwweDAwLDB4N2MsMHgwNSwKKzB4MTIsMHgyNCwweGIxLDB4MjIsMHg5MCwweGZmLDB4MDAsMHhlMCwweDU0LDB4MWYsMHg2MCwweDA2LDB4N2MsMHgwNSwweDEyLDB4MjUsCisweDRhLDB4MjIsMHhkMywweGU1LDB4NmMsMHg5NCwweDQ4LDB4ZTUsMHg2YiwweDk0LDB4MDAsMHg1MCwweDBiLDB4YzMsMHhlNSwweDZjLAorMHg5NCwweDA3LDB4ZTUsMHg2YiwweDk0LDB4MDAsMHg1MCwweDA2LDB4N2MsMHgwMywweDEyLDB4MjUsMHg0YSwweDIyLDB4ZTUsMHg0YSwKKzB4YjQsMHgwNSwweDA0LDB4MTIsMHgzMCwweDcwLDB4MjIsMHg3YywweDA3LDB4MTIsMHgyNSwweDRhLDB4MjIsMHhlNSwweDY3LDB4MzAsCisweGU3LDB4MDgsMHg3ZCwweDAwLDB4N2MsMHgwNSwweDEyLDB4MjQsMHhiMSwweDIyLDB4N2MsMHgwNSwweDEyLDB4MjUsMHg0YSwweDIyLAorMHhiNCwweDIwLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDAwLDB4ODAsMHgwMCwweDEyLDB4MmYsMHg5ZSwweDIyLDB4NzUsMHg0MywKKzB4MDAsMHg5MCwweGZmLDB4ODMsMHhlMCwweDU0LDB4MGYsMHhkMywweDk1LDB4NDMsMHg0MCwweDI0LDB4ZTUsMHg0MywweDI0LDB4ZjAsCisweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmUsMHhmNSwweDgzLDB4ZTAsMHhhZCwweDY0LDB4YWUsMHg2MywweGFmLDB4NjIsMHgxMiwweDAzLAorMHgwZiwweDA1LDB4NDMsMHgwZCwweGVkLDB4NzAsMHgwMSwweDBlLDB4OGQsMHg2NCwweDhlLDB4NjMsMHg4ZiwweDYyLDB4ODAsMHhkMSwKKzB4ZTUsMHg0MywweDdkLDB4MDAsMHhmYywweGMzLDB4ZTUsMHg2YSwweDljLDB4ZjUsMHg2YSwweGU1LDB4NjksMHg5ZCwweGY1LDB4NjksCisweGU1LDB4NmEsMHg0NSwweDY5LDB4NjAsMHgwNiwweGU0LDB4OTAsMHhmZiwweDgzLDB4ZjAsMHgyMiwweDkwLDB4ZmYsMHg4MiwweGUwLAorMHg0NCwweDA4LDB4ZjAsMHhlNCwweGY1LDB4NjksMHg3NSwweDZhLDB4NDksMHg5MCwweGZkLDB4M2QsMHhlMCwweGI0LDB4MDUsMHgwMiwKKzB4ODAsMHgwMywweGQzLDB4NDAsMHg0MCwweDkwLDB4ZmQsMHgzZSwweGUwLDB4ZjUsMHg0MywweGI0LDB4MDUsMHgwMiwweDgwLDB4MDMsCisweGQzLDB4NDAsMHgwYSwweGU0LDB4ZmYsMHgwNCwweGZlLDB4N2MsMHgwYiwweDEyLDB4MzEsMHg5YSwweDIyLDB4YjQsMHgwMSwweDAyLAorMHg4MCwweDAzLDB4ZDMsMHg0MCwweDBhLDB4ZTQsMHhmZiwweDA0LDB4ZmUsMHg3YywweDA5LDB4MTIsMHgzMSwweDlhLDB4MjIsMHhiNCwKKzB4MDMsMHgwMCwweDQwLDB4MTAsMHhiNCwweDA1LDB4MDAsMHg1MCwweDBiLDB4ZTUsMHg0MywweDdmLDB4MDAsMHhmZSwweDdjLDB4MTQsCisweDEyLDB4MzEsMHg5YSwweDIyLDB4MjIsMHhiNCwweDgwLDB4MDAsMHg0MCwweDIzLDB4YjQsMHg4MiwweDAwLDB4NTAsMHgxZSwweDdjLAorMHgzZCwweDdkLDB4ZmQsMHgxMiwweDE3LDB4ZDUsMHg3ZCwweDAwLDB4OGMsMHg2NiwweDhkLDB4NjUsMHg5MCwweGZkLDB4M2YsMHhlMCwKKzB4NjAsMHgwNSwweDEyLDB4MmYsMHg5ZSwweDgwLDB4MDUsMHg3YywweDAwLDB4MTIsMHgyZiwweGMzLDB4MjIsMHgyMiwweDkwLDB4ZmYsCisweDgzLDB4ZTAsMHg1NCwweDdmLDB4ZjAsMHg5MCwweGZmLDB4ODIsMHhlMCwweDQ0LDB4MDgsMHhmMCwweDkwLDB4ZmYsMHg4MCwweGUwLAorMHg0NCwweDA4LDB4ZjAsMHgyMiwweDkwLDB4ZmYsMHg4MiwweGUwLDB4NDQsMHgwOCwweGYwLDB4OTAsMHhmZiwweDgwLDB4ZTAsMHg0NCwKKzB4MDgsMHhmMCwweDIyLDB4OGMsMHgyMywweDdkLDB4MDAsMHg4YywweDZhLDB4OGQsMHg2OSwweDc1LDB4NjQsMHgzZCwweDc1LDB4NjMsCisweGZkLDB4NzUsMHg2MiwweDAxLDB4MTIsMHgyZiwweGQ4LDB4MjIsMHg5MCwweGZmLDB4ODMsMHhlMCwweDU0LDB4N2YsMHhmMCwweGU1LAorMHg2YSwweDY0LDB4NDksMHg0NSwweDY5LDB4NzAsMHgwMSwweDIyLDB4YzMsMHhlNSwweDZhLDB4OTQsMHgwOCwweGU1LDB4NjksMHg5NCwKKzB4MDAsMHg0MCwweDE1LDB4NzUsMHgyMSwweDA4LDB4ZTUsMHgyMSwweDdkLDB4MDAsMHhmYywweGMzLDB4ZTUsMHg2YSwweDljLDB4ZjUsCisweDZhLDB4ZTUsMHg2OSwweDlkLDB4ZjUsMHg2OSwweDgwLDB4MDksMHg4NSwweDZhLDB4MjEsMHhlNCwweGY1LDB4NjksMHg3NSwweDZhLAorMHg0OSwweDc1LDB4MjIsMHgwMCwweGU1LDB4MjIsMHhjMywweDk1LDB4MjEsMHg1MCwweDI2LDB4YWQsMHg2NCwweGFlLDB4NjMsMHhhZiwKKzB4NjIsMHgxMiwweDAxLDB4ZTYsMHhmYywweGU1LDB4MjIsMHgyNCwweGY4LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZSwweGY1LDB4ODMsCisweGVjLDB4ZjAsMHgwNSwweDIyLDB4MGQsMHhlZCwweDcwLDB4MDEsMHgwZSwweDhkLDB4NjQsMHg4ZSwweDYzLDB4OGYsMHg2MiwweDgwLAorMHhkMywweGU1LDB4MjEsMHg1NCwweDdmLDB4OTAsMHhmZiwweDgxLDB4ZjAsMHgyMiwweDhjLDB4NDgsMHg3ZiwweDAwLDB4ZWYsMHgyNCwKKzB4ZmIsMHg0MCwweDE5LDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwNywweGE0LDB4MjQsMHgzZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmMsCisweGY1LDB4ODMsMHhlMCwweDY1LDB4NDgsMHg3MCwweDAyLDB4ZDMsMHgyMiwweDBmLDB4ODAsMHhlMiwweDhmLDB4NDcsMHhjMywweDIyLAorMHg4NSwweDZjLDB4NmEsMHg4NSwweDZiLDB4NjksMHg5MCwweGZmLDB4ODIsMHhlMCwweDU0LDB4ZjcsMHhmMCwweDkwLDB4ZmYsMHg4MywKKzB4ZTAsMHg1NCwweDdmLDB4ZjAsMHgyMiwweGMwLDB4MDAsMHhjMCwweDAxLDB4YzAsMHgwMiwweGMwLDB4MDYsMHhjMCwweDA3LDB4ZTUsCisweDcyLDB4MjQsMHgwOCwweGY4LDB4ODYsMHgwNiwweDUzLDB4MDYsMHg3ZiwweDdjLDB4ZmYsMHgxMiwweDMwLDB4ZmEsMHg3YywweDAwLAorMHg3ZCwweDAwLDB4ZTUsMHg3NSwweDYwLDB4NDYsMHhmZiwweDkwLDB4ZmUsMHg5ZCwweGUwLDB4NTQsMHg3ZiwweDZlLDB4NzAsMHgwZiwKKzB4YzAsMHg4MywweGMwLDB4ODIsMHhhMywweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmMsMHhhMywweDE1LDB4NzUsMHg4MCwweDA3LDB4YTMsCisweGEzLDB4YTMsMHhkZiwweGU2LDB4ODAsMHgyNiwweGRmLDB4MDYsMHhkMCwweDgyLDB4ZDAsMHg4MywweDgwLDB4MWUsMHhlMCwweGY4LAorMHhhMywweGUwLDB4ZjksMHhhMywweGUwLDB4ZmEsMHhkMCwweDgyLDB4ZDAsMHg4MywweGU4LDB4ZjAsMHhhMywweGU5LDB4ZjAsMHhhMywKKzB4ZWEsMHhmMCwweGEzLDB4YzAsMHg4MywweGMwLDB4ODIsMHhhMywweGEzLDB4YTMsMHg4MCwweGRhLDB4MTIsMHgzMSwweDkzLDB4ZDAsCisweDA3LDB4ZDAsMHgwNiwweGQwLDB4MDIsMHhkMCwweDAxLDB4ZDAsMHgwMCwweDIyLDB4ODUsMHhhOCwweDc0LDB4NzUsMHhhOCwweDg4LAorMHhlYywweDcwLDB4MDIsMHg3YywweDNmLDB4OGMsMHg3MywweDIyLDB4ZTUsMHg3MiwweDI0LDB4MDgsMHhmOCwweDc2LDB4MDAsMHgxMiwKKzB4MzEsMHhlNywweDgwLDB4ZmIsMHhjMCwweDAwLDB4YzAsMHgwMSwweGMwLDB4MDIsMHhjMCwweDA2LDB4YzAsMHgwNywweGFlLDB4MDQsCisweDdjLDB4ZmYsMHgxMiwweDMwLDB4ZmEsMHhlNSwweDc1LDB4NjAsMHg0MiwweGZmLDB4OTAsMHhmZSwweDlkLDB4ZTAsMHg1NCwweDdmLAorMHg2ZSwweDcwLDB4MGIsMHhjMCwweDgzLDB4YzAsMHg4MiwweGEzLDB4YTMsMHhhMywweDE1LDB4NzUsMHg4MCwweDA3LDB4YTMsMHhhMywKKzB4YTMsMHhkZiwweGVhLDB4ODAsMHgyNiwweGRmLDB4MDYsMHhkMCwweDgyLDB4ZDAsMHg4MywweDgwLDB4ZDgsMHhlMCwweGY4LDB4YTMsCisweGUwLDB4ZjksMHhhMywweGUwLDB4ZmEsMHhkMCwweDgyLDB4ZDAsMHg4MywweGU4LDB4ZjAsMHhhMywweGU5LDB4ZjAsMHhhMywweGVhLAorMHhmMCwweGEzLDB4YzAsMHg4MywweGMwLDB4ODIsMHhhMywweGEzLDB4YTMsMHg4MCwweGRhLDB4NzgsMHgwOCwweDA4LDB4NzksMHgxOCwKKzB4MDksMHg3YywweDAxLDB4ZTYsMHg1NCwweDdmLDB4NmUsMHg3MCwweDA2LDB4NzYsMHgwMCwweDc3LDB4MDAsMHg4MCwweDA2LDB4MDgsCisweDA5LDB4MGMsMHhiYywweDA4LDB4ZWUsMHgxMiwweDMxLDB4OTMsMHhkMCwweDA3LDB4ZDAsMHgwNiwweGQwLDB4MDIsMHhkMCwweDAxLAorMHhkMCwweDAwLDB4MjIsMHg3NSwweDczLDB4MDAsMHg4NSwweDc0LDB4YTgsMHgyMiwweGMwLDB4ZjAsMHhjMCwweDgyLDB4YzAsMHg4MywKKzB4YzMsMHhlNSwweDc1LDB4MjQsMHhlOCwweDUwLDB4MDUsMHgxMiwweDMxLDB4ZTcsMHg4MCwweGY0LDB4ZWMsMHg2MCwweDMxLDB4OTAsCisweDM0LDB4YjYsMHhlNCwweDkzLDB4YzMsMHg5YywweDQwLDB4MjgsMHhjMCwweDA0LDB4N2MsMHhmZiwweDEyLDB4MzAsMHhmYSwweGQwLAorMHgwNCwweDQzLDB4MDQsMHg4MCwweGU1LDB4NzUsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4OWQsMHhmNSwweDgyLDB4ZTQsMHgzNCwKKzB4ZmUsMHhmNSwweDgzLDB4ZWMsMHhmMCwweGVmLDB4YTMsMHhmMCwweGVlLDB4YTMsMHhmMCwweDA1LDB4NzUsMHgxMiwweDMxLDB4OTMsCisweGQwLDB4ODMsMHhkMCwweDgyLDB4ZDAsMHhmMCwweDIyLDB4YzAsMHgwNCwweDdjLDB4MjAsMHhkMiwweDhjLDB4ZDIsMHg4ZCwweGQ1LAorMHgwNCwweGZkLDB4ZDAsMHgwNCwweDIyLDB4NzUsMHhhOCwweDAwLDB4NzUsMHg4OCwweDAwLDB4NzUsMHhiOCwweDAwLDB4NzUsMHhmMCwKKzB4MDAsMHg3NSwweGQwLDB4MDAsMHhlNCwweGY4LDB4OTAsMHgwMCwweDAwLDB4ZjYsMHgwOCwweGI4LDB4MDAsMHhmYiwweDAyLDB4MDAsCisweDAwLDB4YzMsMHhlZCwweDk0LDB4MDIsMHg1MCwweDA0LDB4N2QsMHgwMywweDdjLDB4ZTgsMHhlYywweGY0LDB4ZmMsMHhlZCwweGY0LAorMHhmZCwweDBjLDB4YmMsMHgwMCwweDAxLDB4MGQsMHg4YywweDc5LDB4OGQsMHg3OCwweDIyLDB4YzMsMHhlYywweDk0LDB4YmMsMHhlZCwKKzB4OTQsMHgwMiwweDUwLDB4MDQsMHg3ZCwweDA3LDB4N2MsMHhkMCwweGVjLDB4ZjQsMHhmYywweGVkLDB4ZjQsMHhmZCwweDBjLDB4YmMsCisweDAwLDB4MDEsMHgwZCwweDhjLDB4NzcsMHg4ZCwweDc2LDB4MjIsMHhlYywweDcwLDB4MDEsMHgyMiwweGMwLDB4MDAsMHhlNSwweDcyLAorMHgyNCwweDE4LDB4ZjgsMHhhNiwweDA0LDB4ZTUsMHg3MiwweDI0LDB4MDgsMHhmOCwweGM2LDB4NTQsMHg3ZiwweGY2LDB4ZTYsMHgzMCwKKzB4ZTcsMHgwMywweGQwLDB4MDAsMHgyMiwweDEyLDB4MzEsMHhlNywweDgwLDB4ZjQsMHhjMiwweDhjLDB4ODUsMHg3NiwweDhjLDB4ODUsCisweDc3LDB4OGEsMHhkMiwweDhjLDB4YzAsMHhlMCwweGMwLDB4ZDAsMHhjMCwweGYwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwweDAwLAorMHhjMCwweDAxLDB4YzAsMHgwMiwweGMwLDB4MDMsMHhjMCwweDA0LDB4YzAsMHgwNSwweGMwLDB4MDYsMHhjMCwweDA3LDB4MTIsMHgxYiwKKzB4MjgsMHhlNSwweDcyLDB4MjQsMHgwOCwweGY4LDB4ZTYsMHg2MCwweDI0LDB4ZTUsMHg3MiwweDI0LDB4MTAsMHhmOCwweGE2LDB4ODEsCisweGU1LDB4NzIsMHg3NSwweGYwLDB4MjEsMHhhNCwweDI0LDB4OTUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZkLDB4ZjUsMHg4MywweDc4LAorMHhhOCwweGU1LDB4ODEsMHgwNCwweGMzLDB4OTgsMHhmOSwweGU2LDB4ZjAsMHgwOCwweGEzLDB4ZDksMHhmYSwweDc0LDB4MDgsMHgyNSwKKzB4NzIsMHhmOCwweDA1LDB4NzIsMHgwOCwweGU2LDB4NTQsMHg4MCwweDcwLDB4MGMsMHhlNSwweDcyLDB4YjQsMHgwNywweGYzLDB4NzgsCisweDA4LDB4NzUsMHg3MiwweDAwLDB4ODAsMHhlZiwweGU1LDB4NzIsMHgyNCwweDEwLDB4ZjgsMHg4NiwweDgxLDB4ZTUsMHg3MiwweDc1LAorMHhmMCwweDIxLDB4YTQsMHgyNCwweDk1LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZCwweGY1LDB4ODMsMHg3OCwweGE4LDB4ZTUsMHg4MSwKKzB4MDQsMHhjMywweDk4LDB4ZjksMHhlMCwweGY2LDB4MDgsMHhhMywweGQ5LDB4ZmEsMHhkMCwweDA3LDB4ZDAsMHgwNiwweGQwLDB4MDUsCisweGQwLDB4MDQsMHhkMCwweDAzLDB4ZDAsMHgwMiwweGQwLDB4MDEsMHhkMCwweDAwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGYwLAorMHhkMCwweGQwLDB4ZDAsMHhlMCwweDMyLDB4YzAsMHhlMCwweGMwLDB4ZDAsMHhjMCwweDAwLDB4YzAsMHgwMSwweGMwLDB4MDIsMHhjMiwKKzB4OGUsMHg4NSwweDc4LDB4OGQsMHg4NSwweDc5LDB4OGIsMHhkMiwweDhlLDB4NzgsMHgxOSwweDc5LDB4MDksMHg3YSwweDA3LDB4ZTcsCisweDcwLDB4MDQsMHhhNiwweDAwLDB4ODAsMHgwYiwweGU2LDB4NjAsMHgwOCwweDE2LDB4ZTYsMHg3MCwweDA0LDB4ZTcsMHg0NCwweDgwLAorMHhmNywweDA4LDB4MDksMHhkYSwweGVhLDB4ZTUsMHg3MywweDYwLDB4MTMsMHgxNCwweGY1LDB4NzMsMHg3MCwweDBlLDB4ZTUsMHg3MiwKKzB4MjQsMHgwOCwweGY4LDB4NzYsMHgwMCwweDEyLDB4MzEsMHg5MywweGQyLDB4OGMsMHhkMiwweDhkLDB4ZDAsMHgwMiwweGQwLDB4MDEsCisweGQwLDB4MDAsMHhkMCwweGQwLDB4ZDAsMHhlMCwweDMyLDB4NzUsMHg4MSwweGE3LDB4NzUsMHg5MCwweDAwLDB4NzUsMHg3OSwweDMwLAorMHg3NSwweDc4LDB4ZjgsMHg3NSwweDc3LDB4NjAsMHg3NSwweDc2LDB4ZjAsMHgxMiwweDA1LDB4M2MsMHgxMiwweDM0LDB4MGYsMHgxMiwKKzB4MTcsMHg4YiwweDEyLDB4MzQsMHgzOSwweDEyLDB4MzEsMHhmNSwweDgwLDB4ZTMsMHgyMiwweGMwLDB4MDAsMHg3YywweDAxLDB4ZWMsCisweDI0LDB4MDgsMHhmOCwweGU2LDB4NjAsMHgwOSwweDBjLDB4YmMsMHgwOCwweGY1LDB4MTIsMHgzMSwweGU3LDB4ODAsMHhlZSwweGQwLAorMHgwMCwweDIyLDB4YzAsMHhmMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHgwMCwweGMwLDB4MDYsMHhjMCwweDA3LDB4ZWQsMHgyNCwKKzB4MTAsMHhmOCwweDc2LDB4YjYsMHhlZCwweDc1LDB4ZjAsMHgyMSwweGE0LDB4MjQsMHg5NSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmQsCisweGY1LDB4ODMsMHhjMCwweDgyLDB4YzAsMHg4MywweGEzLDB4YTMsMHhlNCwweDc4LDB4MGQsMHhmMCwweGEzLDB4ZDgsMHhmYywweGVjLAorMHg1NCwweDdmLDB4NzUsMHhmMCwweDAyLDB4YTQsMHgyNCwweDgyLDB4ZjUsMHg4MiwweGU1LDB4ZjAsMHgzNCwweDM0LDB4ZjUsMHg4MywKKzB4ZTQsMHg5MywweGZlLDB4NzQsMHgwMSwweDkzLDB4ZjUsMHg4MiwweDhlLDB4ODMsMHhlNCwweDkzLDB4ZmUsMHg3NCwweDAxLDB4OTMsCisweGZmLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhlZiwweGYwLDB4YTMsMHhlZSwweGYwLDB4ZWQsMHgyNCwweDA4LDB4ZjgsMHhlYywweDQ0LAorMHg4MCwweGY2LDB4ZDAsMHgwNywweGQwLDB4MDYsMHhkMCwweDAwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGYwLDB4MjIsMHg3NSwKKzB4NzIsMHgwMCwweDc1LDB4NzUsMHgwMCwweDdhLDB4MDgsMHg3OSwweDE4LDB4NzgsMHgwOCwweDc2LDB4MDAsMHg3NywweDAwLDB4MDgsCisweDA5LDB4ZGEsMHhmOCwweGU0LDB4NzgsMHgwOCwweDc0LDB4ODAsMHg0NCwweDdmLDB4ZjYsMHg3NCwweDAxLDB4NDQsMHgxMCwweGY1LAorMHg4OSwweDc1LDB4YjgsMHgwOCwweGQyLDB4YWIsMHhkMiwweGE5LDB4MjIsMHg3NSwweDgxLDB4YTcsMHhkMiwweDhlLDB4ZDIsMHg4YywKKzB4ZDIsMHhhZiwweGU1LDB4NzUsMHg2MCwweDMyLDB4ZmYsMHg5MCwweGZlLDB4OWQsMHhlMCwweDU0LDB4ODAsMHg2MCwweDI0LDB4NzgsCisweDA4LDB4NzksMHgwOCwweGUwLDB4NTQsMHg3ZiwweGZhLDB4N2IsMHgwMCwweGU2LDB4NTQsMHg3ZiwweGI1LDB4MDIsMHgwMiwweDdiLAorMHhmZiwweDA4LDB4ZDksMHhmNSwweGViLDB4NzAsMHgwYywweGVhLDB4ZjAsMHgxMiwweDMzLDB4OGIsMHhhZCwweDA0LDB4YWMsMHgwMiwKKzB4MTIsMHgzMywweGEyLDB4YTMsMHhhMywweGEzLDB4ZGYsMHhkMiwweDEyLDB4MzEsMHhlNywweDgwLDB4YzUsMHg3YywweDAxLDB4N2QsCisweDAwLDB4MjIsMHgwNCwweGY1LDB4MDQsMHhlOSwweDA0LDB4ZWQsMHgwNCwweGUxLDB4MDQsMHhkZCwweDA0LDB4ZDksMHgwNCwweGU1LAorMHgwNCwweGYxLDB4MDQsMHg5ZCwweDA0LDB4YTEsMHgwNCwweGNkLDB4MDQsMHhkMSwweDA0LDB4OTksMHgwNCwweDk5LDB4MDQsMHg5OSwKKzB4MDQsMHhkNSwweDA0LDB4YjUsMHgwNCwweGFkLDB4MDQsMHhiMSwweDA0LDB4YTksMHgwNCwweGMxLDB4MDQsMHhiZCwweDA0LDB4YjksCisweDA0LDB4YzUsMHgwNCwweGM5LDB4MDQsMHhhNSwweDE5LDB4MDEsMHgwMywweDAwLDB4MjIsMHgwMCwweDQ4LDB4MDIsMHgwMCwweDI0LAorMHgwZiwweDE4LDB4MGEsMHgxMCwweDY0LDB4MGQsMHg2OCwweDBjLDB4MDUsMHgwNiwweDAyLDB4MDMsMHgwMSwweDAxLDB4ODEsMHgwMSwKKzB4MDAsMHgwMCwweGU3LDB4MDAsMHhjMCwweDAwLDB4ODAsMHgwMCwweDYwLDB4MDAsMHg0MCwweDAwLDB4MzAsMHgwMCwweDE4LDB4MDAsCisweDBjLDB4MDAsMHgwOCwweDAwLDB4MDQsMHgwMCwweDAyLDB4MDAsMHgwMSwweDAwLDB4MDgsMHgxOCwweDM4LDB4MjgsMHgwNiwweDAyLAorMHgxMCwweDBhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHg4MSwweDEwLDB4MGEsMHgwMiwweDAwLDB4MDAsMHgwMCwKKzB4MDAsMHgwMCwweGZiLDB4ZTgsMHhmYiwweGZhLDB4MTIsMHgwMSwweDEwLDB4MDEsMHhmZiwweDAwLDB4MDAsMHgwOCwweDUxLDB4MDQsCisweDVmLDB4NTAsMHgxNiwweDAxLDB4MDEsMHgwMiwweDAwLDB4MDIsMHgwOSwweDAyLDB4MzUsMHgwMCwweDAxLDB4MDIsMHgwMCwweGUwLAorMHgwMCwweDA5LDB4MDQsMHgwMCwweDAwLDB4MDUsMHhmZiwweDAwLDB4MDAsMHgwMCwweDA3LDB4MDUsMHg4MSwweDAyLDB4NDAsMHgwMCwKKzB4MDAsMHgwNywweDA1LDB4MDEsMHgwMiwweDQwLDB4MDAsMHgwMCwweDA3LDB4MDUsMHg4MiwweDAyLDB4NDAsMHgwMCwweDAwLDB4MDcsCisweDA1LDB4MDIsMHgwMiwweDQwLDB4MDAsMHgwMCwweDA3LDB4MDUsMHg4NSwweDAzLDB4MDIsMHgwMCwweDAxLDB4MDQsMHgwMywweDA5LAorMHgwNCwweDI0LDB4MDMsMHg1NCwweDAwLDB4NjUsMHgwMCwweDc4LDB4MDAsMHg2MSwweDAwLDB4NzMsMHgwMCwweDIwLDB4MDAsMHg0OSwKKzB4MDAsMHg2ZSwweDAwLDB4NzMsMHgwMCwweDc0LDB4MDAsMHg3MiwweDAwLDB4NzUsMHgwMCwweDZkLDB4MDAsMHg2NSwweDAwLDB4NmUsCisweDAwLDB4NzQsMHgwMCwweDczLDB4MDAsMHgyYSwweDAzLDB4NTQsMHgwMCwweDU1LDB4MDAsMHg1MywweDAwLDB4NDIsMHgwMCwweDM1LAorMHgwMCwweDMwLDB4MDAsMHgzNSwweDAwLDB4MzIsMHgwMCwweDIwLDB4MDAsMHg1MywweDAwLDB4NjUsMHgwMCwweDcyLDB4MDAsMHg2OSwKKzB4MDAsMHg2MSwweDAwLDB4NmMsMHgwMCwweDIwLDB4MDAsMHg1MCwweDAwLDB4NmYsMHgwMCwweDcyLDB4MDAsMHg3NCwweDAwLDB4MjIsCisweDAzLDB4NTQsMHgwMCwweDU1LDB4MDAsMHg1MywweDAwLDB4NDIsMHgwMCwweDM1LDB4MDAsMHgzMCwweDAwLDB4MzUsMHgwMCwweDMyLAorMHgwMCwweDIwLDB4MDAsMHgyMCwweDAwLDB4MjAsMHgwMCwweDIwLDB4MDAsMHgyMCwweDAwLDB4MjAsMHgwMCwweDIwLDB4MDAsMHgyMCwKKzB4MDAsCit9OworCisjZW5kaWYgLyogaWZuZGVmIF9USV9GV181MDUyX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODA1NDg3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYwpAQCAtMCwwICsxLDE4NDIgQEAKKy8qIHZpOiB0cz04IHN3PTgKKyAqCisgKiBUSSAzNDEwLzUwNTIgVVNCIFNlcmlhbCBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgTGludXggaW9fdGkgZHJpdmVyLCB3aGljaCBpcworICogICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBJbnNpZGUgT3V0IE5ldHdvcmtzCisgKiAgIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEdyZWcgS3JvYWgtSGFydG1hbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRm9yIHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBjb250YWN0IFRleGFzIEluc3RydW1lbnRzCisgKiB0ZWNobmljYWwgc3VwcG9ydCwgb3IgQWwgQm9yY2hlcnMgPGFsYm9yY2hlcnNAc3RlaW5lcnBvaW50LmNvbT4sIG9yCisgKiBQZXRlciBCZXJnZXIgPHBiZXJnZXJAYnJpbXNvbi5jb20+LgorICogCisgKiBUaGlzIGRyaXZlciBuZWVkcyB0aGlzIGhvdHBsdWcgc2NyaXB0IGluIC9ldGMvaG90cGx1Zy91c2IvdGlfdXNiXzM0MTBfNTA1MgorICogb3IgaW4gL2V0Yy9ob3RwbHVnLmQvdXNiL3RpX3VzYl8zNDEwXzUwNTIuaG90cGx1ZyB0byBzZXQgdGhlIGRldmljZQorICogY29uZmlndXJhdGlvbi4KKyAqCisgKiAjIS9iaW4vYmFzaAorICoKKyAqIEJPT1RfQ09ORklHPTEKKyAqIEFDVElWRV9DT05GSUc9MgorICoKKyAqIGlmIFtbICIkQUNUSU9OIiAhPSAiYWRkIiBdXQorICogdGhlbgorICogCWV4aXQKKyAqIGZpCisgKgorICogQ09ORklHX1BBVEg9L3N5cyR7REVWUEFUSCUvPyp9L2JDb25maWd1cmF0aW9uVmFsdWUKKyAqCisgKiBpZiBbWyAwYGNhdCAkQ09ORklHX1BBVEhgIC1uZSAkQk9PVF9DT05GSUcgXV0KKyAqIHRoZW4KKyAqIAlleGl0CisgKiBmaQorICoKKyAqIFBST0RVQ1Q9JHtQUk9EVUNUJS8/Kn0JCSMgZGVsZXRlIHZlcnNpb24KKyAqIFZFTkRPUl9JRD1gcHJpbnRmICIlZCIgMHgke1BST0RVQ1QlLz8qfWAKKyAqIFBST0RVQ1RfSUQ9YHByaW50ZiAiJWQiIDB4JHtQUk9EVUNUIyo/L31gCisgKgorICogUEFSQU1fUEFUSD0vc3lzL21vZHVsZS90aV91c2JfMzQxMF81MDUyL3BhcmFtZXRlcnMKKyAqCisgKiBmdW5jdGlvbiBzY2FuKCkgeworICogCXM9JDEKKyAqIAlzaGlmdAorICogCWZvciBpCisgKiAJZG8KKyAqIAkJaWYgW1sgJHMgLWVxICRpIF1dCisgKiAJCXRoZW4KKyAqIAkJCXJldHVybiAwCisgKiAJCWZpCisgKiAJZG9uZQorICogCXJldHVybiAxCisgKiB9CisgKgorICogSUZTPSRJRlMsCisgKgorICogaWYgKHNjYW4gJFZFTkRPUl9JRCAxMTA1IGBjYXQgJFBBUkFNX1BBVEgvdmVuZG9yXzM0MTBgICYmCisgKiBzY2FuICRQUk9EVUNUX0lEIDEzMzI4IGBjYXQgJFBBUkFNX1BBVEgvcHJvZHVjdF8zNDEwYCkgfHwKKyAqIChzY2FuICRWRU5ET1JfSUQgMTEwNSBgY2F0ICRQQVJBTV9QQVRIL3ZlbmRvcl81MDUyYCAmJgorICogc2NhbiAkUFJPRFVDVF9JRCAyMDU2MiAyMDgxOCAyMDU3MCAyMDU3NSBgY2F0ICRQQVJBTV9QQVRIL3Byb2R1Y3RfNTA1MmApCisgKiB0aGVuCisgKiAJZWNobyAkQUNUSVZFX0NPTkZJRyA+ICRDT05GSUdfUEFUSAorICogZmkKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jaXJjX2J1Zi5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorI2luY2x1ZGUgInRpX3VzYl8zNDEwXzUwNTIuaCIKKyNpbmNsdWRlICJ0aV9md18zNDEwLmgiCQkvKiBmaXJtd2FyZSBpbWFnZSBmb3IgMzQxMCAqLworI2luY2x1ZGUgInRpX2Z3XzUwNTIuaCIJCS8qIGZpcm13YXJlIGltYWdlIGZvciA1MDUyICovCisKKworLyogRGVmaW5lcyAqLworCisjZGVmaW5lIFRJX0RSSVZFUl9WRVJTSU9OCSJ2MC45IgorI2RlZmluZSBUSV9EUklWRVJfQVVUSE9SCSJBbCBCb3JjaGVycyA8YWxib3JjaGVyc0BzdGVpbmVycG9pbnQuY29tPiIKKyNkZWZpbmUgVElfRFJJVkVSX0RFU0MJCSJUSSBVU0IgMzQxMC81MDUyIFNlcmlhbCBEcml2ZXIiCisKKyNkZWZpbmUgVElfRklSTVdBUkVfQlVGX1NJWkUJMTYyODQKKworI2RlZmluZSBUSV9XUklURV9CVUZfU0laRQkxMDI0CisKKyNkZWZpbmUgVElfVFJBTlNGRVJfVElNRU9VVAkyCisKKyNkZWZpbmUgVElfREVGQVVMVF9MT1dfTEFURU5DWQkwCisjZGVmaW5lIFRJX0RFRkFVTFRfQ0xPU0lOR19XQUlUCTQwMDAJCS8qIGluIC4wMSBzZWNzICovCisKKy8qIHN1cHBvcnRlZCBzZXRzZXJpYWwgZmxhZ3MgKi8KKyNkZWZpbmUgVElfU0VUX1NFUklBTF9GTEFHUwkoQVNZTkNfTE9XX0xBVEVOQ1kpCisKKy8qIHJlYWQgdXJiIHN0YXRlcyAqLworI2RlZmluZSBUSV9SRUFEX1VSQl9SVU5OSU5HCTAKKyNkZWZpbmUgVElfUkVBRF9VUkJfU1RPUFBJTkcJMQorI2RlZmluZSBUSV9SRUFEX1VSQl9TVE9QUEVECTIKKworI2RlZmluZSBUSV9FWFRSQV9WSURfUElEX0NPVU5UCTUKKworCisvKiBTdHJ1Y3R1cmVzICovCisKK3N0cnVjdCB0aV9wb3J0IHsKKwlpbnQJCQl0cF9pc19vcGVuOworCV9fdTgJCQl0cF9tc3I7CisJX191OAkJCXRwX2xzcjsKKwlfX3U4CQkJdHBfc2hhZG93X21jcjsKKwlfX3U4CQkJdHBfdWFydF9tb2RlOwkvKiAyMzIgb3IgNDg1IG1vZGVzICovCisJdW5zaWduZWQgaW50CQl0cF91YXJ0X2Jhc2VfYWRkcjsKKwlpbnQJCQl0cF9mbGFnczsKKwlpbnQJCQl0cF9jbG9zaW5nX3dhaXQ7LyogaW4gLjAxIHNlY3MgKi8KKwlzdHJ1Y3QgYXN5bmNfaWNvdW50CXRwX2ljb3VudDsKKwl3YWl0X3F1ZXVlX2hlYWRfdAl0cF9tc3Jfd2FpdDsJLyogd2FpdCBmb3IgbXNyIGNoYW5nZSAqLworCXdhaXRfcXVldWVfaGVhZF90CXRwX3dyaXRlX3dhaXQ7CisJc3RydWN0IHRpX2RldmljZQkqdHBfdGRldjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CSp0cF9wb3J0OworCXNwaW5sb2NrX3QJCXRwX2xvY2s7CisJaW50CQkJdHBfcmVhZF91cmJfc3RhdGU7CisJaW50CQkJdHBfd3JpdGVfdXJiX2luX3VzZTsKKwlzdHJ1Y3QgY2lyY19idWYJCSp0cF93cml0ZV9idWY7Cit9OworCitzdHJ1Y3QgdGlfZGV2aWNlIHsKKwlzdHJ1Y3Qgc2VtYXBob3JlCXRkX29wZW5fY2xvc2Vfc2VtOworCWludAkJCXRkX29wZW5fcG9ydF9jb3VudDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbAkqdGRfc2VyaWFsOworCWludAkJCXRkX2lzXzM0MTA7CisJaW50CQkJdGRfdXJiX2Vycm9yOworfTsKKworCisvKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworc3RhdGljIGludCB0aV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIHZvaWQgdGlfc2h1dGRvd24oc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50IHRpX29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIHZvaWQgdGlfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGludCB0aV93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorCWludCBjb3VudCk7CitzdGF0aWMgaW50IHRpX3dyaXRlX3Jvb20oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50IHRpX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIHRpX3Rocm90dGxlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgdGlfdW50aHJvdHRsZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgdGlfaW9jdGwoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyB2b2lkIHRpX3NldF90ZXJtaW9zKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKTsKK3N0YXRpYyBpbnQgdGlfdGlvY21nZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGludCB0aV90aW9jbXNldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOworc3RhdGljIHZvaWQgdGlfYnJlYWsoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlKTsKK3N0YXRpYyB2b2lkIHRpX2ludGVycnVwdF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIHRpX2J1bGtfaW5fY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCB0aV9idWxrX291dF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworc3RhdGljIHZvaWQgdGlfcmVjdihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbmd0aCk7CitzdGF0aWMgdm9pZCB0aV9zZW5kKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCk7CitzdGF0aWMgaW50IHRpX3NldF9tY3Ioc3RydWN0IHRpX3BvcnQgKnRwb3J0LCB1bnNpZ25lZCBpbnQgbWNyKTsKK3N0YXRpYyBpbnQgdGlfZ2V0X2xzcihzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQpOworc3RhdGljIGludCB0aV9nZXRfc2VyaWFsX2luZm8oc3RydWN0IHRpX3BvcnQgKnRwb3J0LAorCXN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqcmV0X2FyZyk7CitzdGF0aWMgaW50IHRpX3NldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQsCisJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpuZXdfYXJnKTsKK3N0YXRpYyB2b2lkIHRpX2hhbmRsZV9uZXdfbXNyKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCwgX191OCBtc3IpOworCitzdGF0aWMgdm9pZCB0aV9kcmFpbihzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQsIHVuc2lnbmVkIGxvbmcgdGltZW91dCwgaW50IGZsdXNoKTsKKworc3RhdGljIHZvaWQgdGlfc3RvcF9yZWFkKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgaW50IHRpX3Jlc3RhcnRfcmVhZChzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworCitzdGF0aWMgaW50IHRpX2NvbW1hbmRfb3V0X3N5bmMoc3RydWN0IHRpX2RldmljZSAqdGRldiwgX191OCBjb21tYW5kLAorCV9fdTE2IG1vZHVsZWlkLCBfX3UxNiB2YWx1ZSwgX191OCAqZGF0YSwgaW50IHNpemUpOworc3RhdGljIGludCB0aV9jb21tYW5kX2luX3N5bmMoc3RydWN0IHRpX2RldmljZSAqdGRldiwgX191OCBjb21tYW5kLAorCV9fdTE2IG1vZHVsZWlkLCBfX3UxNiB2YWx1ZSwgX191OCAqZGF0YSwgaW50IHNpemUpOworCitzdGF0aWMgaW50IHRpX3dyaXRlX2J5dGUoc3RydWN0IHRpX2RldmljZSAqdGRldiwgdW5zaWduZWQgbG9uZyBhZGRyLAorCV9fdTggbWFzaywgX191OCBieXRlKTsKKworc3RhdGljIGludCB0aV9kb3dubG9hZF9maXJtd2FyZShzdHJ1Y3QgdGlfZGV2aWNlICp0ZGV2LAorCXVuc2lnbmVkIGNoYXIgKmZpcm13YXJlLCB1bnNpZ25lZCBpbnQgZmlybXdhcmVfc2l6ZSk7CisKKy8qIGNpcmN1bGFyIGJ1ZmZlciAqLworc3RhdGljIHN0cnVjdCBjaXJjX2J1ZiAqdGlfYnVmX2FsbG9jKHZvaWQpOworc3RhdGljIHZvaWQgdGlfYnVmX2ZyZWUoc3RydWN0IGNpcmNfYnVmICpjYik7CitzdGF0aWMgdm9pZCB0aV9idWZfY2xlYXIoc3RydWN0IGNpcmNfYnVmICpjYik7CitzdGF0aWMgaW50IHRpX2J1Zl9kYXRhX2F2YWlsKHN0cnVjdCBjaXJjX2J1ZiAqY2IpOworc3RhdGljIGludCB0aV9idWZfc3BhY2VfYXZhaWwoc3RydWN0IGNpcmNfYnVmICpjYik7CitzdGF0aWMgaW50IHRpX2J1Zl9wdXQoc3RydWN0IGNpcmNfYnVmICpjYiwgY29uc3QgY2hhciAqYnVmLCBpbnQgY291bnQpOworc3RhdGljIGludCB0aV9idWZfZ2V0KHN0cnVjdCBjaXJjX2J1ZiAqY2IsIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKKworCisvKiBEYXRhICovCisKKy8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCitzdGF0aWMgaW50IGRlYnVnOworc3RhdGljIGludCBsb3dfbGF0ZW5jeSA9IFRJX0RFRkFVTFRfTE9XX0xBVEVOQ1k7CitzdGF0aWMgaW50IGNsb3Npbmdfd2FpdCA9IFRJX0RFRkFVTFRfQ0xPU0lOR19XQUlUOworc3RhdGljIHVzaG9ydCB2ZW5kb3JfMzQxMFtUSV9FWFRSQV9WSURfUElEX0NPVU5UXTsKK3N0YXRpYyBpbnQgdmVuZG9yXzM0MTBfY291bnQ7CitzdGF0aWMgdXNob3J0IHByb2R1Y3RfMzQxMFtUSV9FWFRSQV9WSURfUElEX0NPVU5UXTsKK3N0YXRpYyBpbnQgcHJvZHVjdF8zNDEwX2NvdW50Oworc3RhdGljIHVzaG9ydCB2ZW5kb3JfNTA1MltUSV9FWFRSQV9WSURfUElEX0NPVU5UXTsKK3N0YXRpYyBpbnQgdmVuZG9yXzUwNTJfY291bnQ7CitzdGF0aWMgdXNob3J0IHByb2R1Y3RfNTA1MltUSV9FWFRSQV9WSURfUElEX0NPVU5UXTsKK3N0YXRpYyBpbnQgcHJvZHVjdF81MDUyX2NvdW50OworCisvKiBzdXBwb3J0ZWQgZGV2aWNlcyAqLworLyogdGhlIGFycmF5IGRpbWVuc2lvbiBpcyB0aGUgbnVtYmVyIG9mIGRlZmF1bHQgZW50cmllcyBwbHVzICovCisvKiBUSV9FWFRSQV9WSURfUElEX0NPVU5UIHVzZXIgZGVmaW5lZCBlbnRyaWVzIHBsdXMgMSB0ZXJtaW5hdGluZyAqLworLyogbnVsbCBlbnRyeSAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHRpX2lkX3RhYmxlXzM0MTBbMStUSV9FWFRSQV9WSURfUElEX0NPVU5UKzFdID0geworCXsgVVNCX0RFVklDRShUSV9WRU5ET1JfSUQsIFRJXzM0MTBfUFJPRFVDVF9JRCkgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB0aV9pZF90YWJsZV81MDUyWzQrVElfRVhUUkFfVklEX1BJRF9DT1VOVCsxXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVElfVkVORE9SX0lELCBUSV81MDUyX0JPT1RfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoVElfVkVORE9SX0lELCBUSV81MTUyX0JPT1RfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoVElfVkVORE9SX0lELCBUSV81MDUyX0VFUFJPTV9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShUSV9WRU5ET1JfSUQsIFRJXzUwNTJfRklSTVdBUkVfUFJPRFVDVF9JRCkgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB0aV9pZF90YWJsZV9jb21iaW5lZFtdID0geworCXsgVVNCX0RFVklDRShUSV9WRU5ET1JfSUQsIFRJXzM0MTBfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoVElfVkVORE9SX0lELCBUSV81MDUyX0JPT1RfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoVElfVkVORE9SX0lELCBUSV81MTUyX0JPT1RfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoVElfVkVORE9SX0lELCBUSV81MDUyX0VFUFJPTV9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShUSV9WRU5ET1JfSUQsIFRJXzUwNTJfRklSTVdBUkVfUFJPRFVDVF9JRCkgfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB0aV91c2JfZHJpdmVyID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCQk9ICJ0aV91c2JfMzQxMF81MDUyIiwKKwkucHJvYmUJCQk9IHVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QJCT0gdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZQkJPSB0aV9pZF90YWJsZV9jb21iaW5lZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSB0aV8xcG9ydF9kZXZpY2UgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJCT0gIlRJIFVTQiAzNDEwIDEgcG9ydCBhZGFwdGVyIiwKKwkuaWRfdGFibGUJCT0gdGlfaWRfdGFibGVfMzQxMCwKKwkubnVtX2ludGVycnVwdF9pbgk9IDEsCisJLm51bV9idWxrX2luCQk9IDEsCisJLm51bV9idWxrX291dAkJPSAxLAorCS5udW1fcG9ydHMJCT0gMSwKKwkuYXR0YWNoCQkJPSB0aV9zdGFydHVwLAorCS5zaHV0ZG93bgkJPSB0aV9zaHV0ZG93biwKKwkub3BlbgkJCT0gdGlfb3BlbiwKKwkuY2xvc2UJCQk9IHRpX2Nsb3NlLAorCS53cml0ZQkJCT0gdGlfd3JpdGUsCisJLndyaXRlX3Jvb20JCT0gdGlfd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyCT0gdGlfY2hhcnNfaW5fYnVmZmVyLAorCS50aHJvdHRsZQkJPSB0aV90aHJvdHRsZSwKKwkudW50aHJvdHRsZQkJPSB0aV91bnRocm90dGxlLAorCS5pb2N0bAkJCT0gdGlfaW9jdGwsCisJLnNldF90ZXJtaW9zCQk9IHRpX3NldF90ZXJtaW9zLAorCS50aW9jbWdldAkJPSB0aV90aW9jbWdldCwKKwkudGlvY21zZXQJCT0gdGlfdGlvY21zZXQsCisJLmJyZWFrX2N0bAkJPSB0aV9icmVhaywKKwkucmVhZF9pbnRfY2FsbGJhY2sJPSB0aV9pbnRlcnJ1cHRfY2FsbGJhY2ssCisJLnJlYWRfYnVsa19jYWxsYmFjawk9IHRpX2J1bGtfaW5fY2FsbGJhY2ssCisJLndyaXRlX2J1bGtfY2FsbGJhY2sJPSB0aV9idWxrX291dF9jYWxsYmFjaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSB0aV8ycG9ydF9kZXZpY2UgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJCT0gIlRJIFVTQiA1MDUyIDIgcG9ydCBhZGFwdGVyIiwKKwkuaWRfdGFibGUJCT0gdGlfaWRfdGFibGVfNTA1MiwKKwkubnVtX2ludGVycnVwdF9pbgk9IDEsCisJLm51bV9idWxrX2luCQk9IDIsCisJLm51bV9idWxrX291dAkJPSAyLAorCS5udW1fcG9ydHMJCT0gMiwKKwkuYXR0YWNoCQkJPSB0aV9zdGFydHVwLAorCS5zaHV0ZG93bgkJPSB0aV9zaHV0ZG93biwKKwkub3BlbgkJCT0gdGlfb3BlbiwKKwkuY2xvc2UJCQk9IHRpX2Nsb3NlLAorCS53cml0ZQkJCT0gdGlfd3JpdGUsCisJLndyaXRlX3Jvb20JCT0gdGlfd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyCT0gdGlfY2hhcnNfaW5fYnVmZmVyLAorCS50aHJvdHRsZQkJPSB0aV90aHJvdHRsZSwKKwkudW50aHJvdHRsZQkJPSB0aV91bnRocm90dGxlLAorCS5pb2N0bAkJCT0gdGlfaW9jdGwsCisJLnNldF90ZXJtaW9zCQk9IHRpX3NldF90ZXJtaW9zLAorCS50aW9jbWdldAkJPSB0aV90aW9jbWdldCwKKwkudGlvY21zZXQJCT0gdGlfdGlvY21zZXQsCisJLmJyZWFrX2N0bAkJPSB0aV9icmVhaywKKwkucmVhZF9pbnRfY2FsbGJhY2sJPSB0aV9pbnRlcnJ1cHRfY2FsbGJhY2ssCisJLnJlYWRfYnVsa19jYWxsYmFjawk9IHRpX2J1bGtfaW5fY2FsbGJhY2ssCisJLndyaXRlX2J1bGtfY2FsbGJhY2sJPSB0aV9idWxrX291dF9jYWxsYmFjaywKK307CisKKworLyogTW9kdWxlICovCisKK01PRFVMRV9BVVRIT1IoVElfRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oVElfRFJJVkVSX0RFU0MpOworTU9EVUxFX1ZFUlNJT04oVElfRFJJVkVSX1ZFUlNJT04pOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgZGVidWdnaW5nLCAwPW5vLCAxPXllcyIpOworCittb2R1bGVfcGFyYW0obG93X2xhdGVuY3ksIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MobG93X2xhdGVuY3ksICJUVFkgbG93X2xhdGVuY3kgZmxhZywgMD1vZmYsIDE9b24sIGRlZmF1bHQgaXMgb2ZmIik7CisKK21vZHVsZV9wYXJhbShjbG9zaW5nX3dhaXQsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhjbG9zaW5nX3dhaXQsICJNYXhpbXVtIHdhaXQgZm9yIGRhdGEgdG8gZHJhaW4gaW4gY2xvc2UsIGluIC4wMSBzZWNzLCBkZWZhdWx0IGlzIDQwMDAiKTsKKworbW9kdWxlX3BhcmFtX2FycmF5KHZlbmRvcl8zNDEwLCB1c2hvcnQsICZ2ZW5kb3JfMzQxMF9jb3VudCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHZlbmRvcl8zNDEwLCAiVmVuZG9yIGlkcyBmb3IgMzQxMCBiYXNlZCBkZXZpY2VzLCAxLTUgc2hvcnQgaW50ZWdlcnMiKTsKK21vZHVsZV9wYXJhbV9hcnJheShwcm9kdWN0XzM0MTAsIHVzaG9ydCwgJnByb2R1Y3RfMzQxMF9jb3VudCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHByb2R1Y3RfMzQxMCwgIlByb2R1Y3QgaWRzIGZvciAzNDEwIGJhc2VkIGRldmljZXMsIDEtNSBzaG9ydCBpbnRlZ2VycyIpOworbW9kdWxlX3BhcmFtX2FycmF5KHZlbmRvcl81MDUyLCB1c2hvcnQsICZ2ZW5kb3JfNTA1Ml9jb3VudCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHZlbmRvcl81MDUyLCAiVmVuZG9yIGlkcyBmb3IgNTA1MiBiYXNlZCBkZXZpY2VzLCAxLTUgc2hvcnQgaW50ZWdlcnMiKTsKK21vZHVsZV9wYXJhbV9hcnJheShwcm9kdWN0XzUwNTIsIHVzaG9ydCwgJnByb2R1Y3RfNTA1Ml9jb3VudCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHByb2R1Y3RfNTA1MiwgIlByb2R1Y3QgaWRzIGZvciA1MDUyIGJhc2VkIGRldmljZXMsIDEtNSBzaG9ydCBpbnRlZ2VycyIpOworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgdGlfaWRfdGFibGVfY29tYmluZWQpOworCisKKy8qIEZ1bmN0aW9ucyAqLworCitzdGF0aWMgaW50IF9faW5pdCB0aV9pbml0KHZvaWQpCit7CisJaW50IGksajsKKwlpbnQgcmV0OworCisKKwkvKiBpbnNlcnQgZXh0cmEgdmVuZG9yIGFuZCBwcm9kdWN0IGlkcyAqLworCWogPSBzaXplb2YodGlfaWRfdGFibGVfMzQxMCkvc2l6ZW9mKHN0cnVjdCB1c2JfZGV2aWNlX2lkKQorCQktIFRJX0VYVFJBX1ZJRF9QSURfQ09VTlQgLSAxOworCWZvciAoaT0wOyBpPG1pbih2ZW5kb3JfMzQxMF9jb3VudCxwcm9kdWN0XzM0MTBfY291bnQpOyBpKyssaisrKSB7CisJCXRpX2lkX3RhYmxlXzM0MTBbal0uaWRWZW5kb3IgPSB2ZW5kb3JfMzQxMFtpXTsKKwkJdGlfaWRfdGFibGVfMzQxMFtqXS5pZFByb2R1Y3QgPSBwcm9kdWN0XzM0MTBbaV07CisJCXRpX2lkX3RhYmxlXzM0MTBbal0ubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRTsKKwl9CisJaiA9IHNpemVvZih0aV9pZF90YWJsZV81MDUyKS9zaXplb2Yoc3RydWN0IHVzYl9kZXZpY2VfaWQpCisJCS0gVElfRVhUUkFfVklEX1BJRF9DT1VOVCAtIDE7CisJZm9yIChpPTA7IGk8bWluKHZlbmRvcl81MDUyX2NvdW50LHByb2R1Y3RfNTA1Ml9jb3VudCk7IGkrKyxqKyspIHsKKwkJdGlfaWRfdGFibGVfNTA1MltqXS5pZFZlbmRvciA9IHZlbmRvcl81MDUyW2ldOworCQl0aV9pZF90YWJsZV81MDUyW2pdLmlkUHJvZHVjdCA9IHByb2R1Y3RfNTA1MltpXTsKKwkJdGlfaWRfdGFibGVfNTA1MltqXS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFOworCX0KKworCXJldCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJnRpXzFwb3J0X2RldmljZSk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWRfMXBvcnQ7CisJcmV0ID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmdGlfMnBvcnRfZGV2aWNlKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZF8ycG9ydDsKKworCXJldCA9IHVzYl9yZWdpc3RlcigmdGlfdXNiX2RyaXZlcik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWRfdXNiOworCisJaW5mbyhUSV9EUklWRVJfREVTQyAiICIgVElfRFJJVkVSX1ZFUlNJT04pOworCisJcmV0dXJuIDA7CisKK2ZhaWxlZF91c2I6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ0aV8ycG9ydF9kZXZpY2UpOworZmFpbGVkXzJwb3J0OgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmdGlfMXBvcnRfZGV2aWNlKTsKK2ZhaWxlZF8xcG9ydDoKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0aV9leGl0KHZvaWQpCit7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ0aV8xcG9ydF9kZXZpY2UpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmdGlfMnBvcnRfZGV2aWNlKTsKKwl1c2JfZGVyZWdpc3RlcigmdGlfdXNiX2RyaXZlcik7Cit9CisKKworbW9kdWxlX2luaXQodGlfaW5pdCk7Cittb2R1bGVfZXhpdCh0aV9leGl0KTsKKworCitzdGF0aWMgaW50IHRpX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgdGlfZGV2aWNlICp0ZGV2OworCXN0cnVjdCB0aV9wb3J0ICp0cG9ydDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gc2VyaWFsLT5kZXY7CisJaW50IHN0YXR1czsKKwlpbnQgaTsKKworCisJZGJnKCIlcyAtIHByb2R1Y3QgMHglNFgsIG51bSBjb25maWd1cmF0aW9ucyAlZCwgY29uZmlndXJhdGlvbiB2YWx1ZSAlZCIsCisJICAgIF9fRlVOQ1RJT05fXywgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCksCisJICAgIGRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMsCisJICAgIGRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUpOworCisJLyogY3JlYXRlIGRldmljZSBzdHJ1Y3R1cmUgKi8KKwl0ZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHRpX2RldmljZSksIEdGUF9LRVJORUwpOworCWlmICh0ZGV2ID09IE5VTEwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQodGRldiwgMCwgc2l6ZW9mKHN0cnVjdCB0aV9kZXZpY2UpKTsKKwlzZW1hX2luaXQoJnRkZXYtPnRkX29wZW5fY2xvc2Vfc2VtLCAxKTsKKwl0ZGV2LT50ZF9zZXJpYWwgPSBzZXJpYWw7CisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIHRkZXYpOworCisJLyogZGV0ZXJtaW5lIGRldmljZSB0eXBlICovCisJaWYgKHVzYl9tYXRjaF9pZChzZXJpYWwtPmludGVyZmFjZSwgdGlfaWRfdGFibGVfMzQxMCkpCisJCXRkZXYtPnRkX2lzXzM0MTAgPSAxOworCWRiZygiJXMgLSBkZXZpY2UgdHlwZSBpcyAlcyIsIF9fRlVOQ1RJT05fXywgdGRldi0+dGRfaXNfMzQxMCA/ICIzNDEwIiA6ICI1MDUyIik7CisKKwkvKiBpZiB3ZSBoYXZlIG9ubHkgMSBjb25maWd1cmF0aW9uLCBkb3dubG9hZCBmaXJtd2FyZSAqLworCWlmIChkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zID09IDEpIHsKKworCQlpZiAodGRldi0+dGRfaXNfMzQxMCkKKwkJCXN0YXR1cyA9IHRpX2Rvd25sb2FkX2Zpcm13YXJlKHRkZXYsIHRpX2Z3XzM0MTAsCisJCQkJc2l6ZW9mKHRpX2Z3XzM0MTApKTsKKwkJZWxzZQorCQkJc3RhdHVzID0gdGlfZG93bmxvYWRfZmlybXdhcmUodGRldiwgdGlfZndfNTA1MiwKKwkJCQlzaXplb2YodGlfZndfNTA1MikpOworCQlpZiAoc3RhdHVzKQorCQkJZ290byBmcmVlX3RkZXY7CisKKwkJLyogMzQxMCBtdXN0IGJlIHJlc2V0LCA1MDUyIHJlc2V0cyBpdHNlbGYgKi8KKwkJaWYgKHRkZXYtPnRkX2lzXzM0MTApIHsKKwkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMCk7CisJCQl1c2JfcmVzZXRfZGV2aWNlKGRldik7CisJCX0KKworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZyZWVfdGRldjsKKwl9IAorCisJLyogdGhlIHNlY29uZCBjb25maWd1cmF0aW9uIG11c3QgYmUgc2V0IChpbiBzeXNmcyBieSBob3RwbHVnIHNjcmlwdCkgKi8KKwlpZiAoZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9PSBUSV9CT09UX0NPTkZJRykgeworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZyZWVfdGRldjsKKwl9CisKKwkvKiBzZXQgdXAgcG9ydCBzdHJ1Y3R1cmVzICovCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJdHBvcnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGlfcG9ydCksIEdGUF9LRVJORUwpOworCQlpZiAodHBvcnQgPT0gTlVMTCkgeworCQkJZGV2X2VycigmZGV2LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJZ290byBmcmVlX3Rwb3J0czsKKwkJfQorCQltZW1zZXQodHBvcnQsIDAsIHNpemVvZihzdHJ1Y3QgdGlfcG9ydCkpOworCQlzcGluX2xvY2tfaW5pdCgmdHBvcnQtPnRwX2xvY2spOworCQl0cG9ydC0+dHBfdWFydF9iYXNlX2FkZHIgPSAoaSA9PSAwID8gVElfVUFSVDFfQkFTRV9BRERSIDogVElfVUFSVDJfQkFTRV9BRERSKTsKKwkJdHBvcnQtPnRwX2ZsYWdzID0gbG93X2xhdGVuY3kgPyBBU1lOQ19MT1dfTEFURU5DWSA6IDA7CisJCXRwb3J0LT50cF9jbG9zaW5nX3dhaXQgPSBjbG9zaW5nX3dhaXQ7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnRwb3J0LT50cF9tc3Jfd2FpdCk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnRwb3J0LT50cF93cml0ZV93YWl0KTsKKwkJdHBvcnQtPnRwX3dyaXRlX2J1ZiA9IHRpX2J1Zl9hbGxvYygpOworCQlpZiAodHBvcnQtPnRwX3dyaXRlX2J1ZiA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCWtmcmVlKHRwb3J0KTsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGZyZWVfdHBvcnRzOworCQl9CisJCXRwb3J0LT50cF9wb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQl0cG9ydC0+dHBfdGRldiA9IHRkZXY7CisJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIHRwb3J0KTsKKwkJdHBvcnQtPnRwX3VhcnRfbW9kZSA9IDA7CS8qIGRlZmF1bHQgaXMgUlMyMzIgKi8KKwl9CisJCisJcmV0dXJuIDA7CisKK2ZyZWVfdHBvcnRzOgorCWZvciAoLS1pOyBpPj0wOyAtLWkpIHsKKwkJdHBvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldKTsKKwkJdGlfYnVmX2ZyZWUodHBvcnQtPnRwX3dyaXRlX2J1Zik7CisJCWtmcmVlKHRwb3J0KTsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CisJfQorZnJlZV90ZGV2OgorCWtmcmVlKHRkZXYpOworCXVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCBOVUxMKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisKK3N0YXRpYyB2b2lkIHRpX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IGk7CisJc3RydWN0IHRpX2RldmljZSAqdGRldiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKwlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQ7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWZvciAoaT0wOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQl0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pOworCQlpZiAodHBvcnQpIHsKKwkJCXRpX2J1Zl9mcmVlKHRwb3J0LT50cF93cml0ZV9idWYpOworCQkJa2ZyZWUodHBvcnQpOworCQkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CisJCX0KKwl9CisKKwlpZiAodGRldikKKwkJa2ZyZWUodGRldik7CisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIE5VTEwpOworfQorCisKK3N0YXRpYyBpbnQgdGlfb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHRpX2RldmljZSAqdGRldjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgcG9ydF9udW1iZXI7CisJaW50IHN0YXR1czsKKwlfX3UxNiBvcGVuX3NldHRpbmdzID0gKF9fdTgpKFRJX1BJUEVfTU9ERV9DT05USU5PVVMgfCAKKwkJCSAgICAgVElfUElQRV9USU1FT1VUX0VOQUJMRSB8IAorCQkJICAgICAoVElfVFJBTlNGRVJfVElNRU9VVCA8PCAyKSk7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICh0cG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXRkZXYgPSB0cG9ydC0+dHBfdGRldjsKKworCS8qIG9ubHkgb25lIG9wZW4gb24gYW55IHBvcnQgb24gYSBkZXZpY2UgYXQgYSB0aW1lICovCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmdGRldi0+dGRfb3Blbl9jbG9zZV9zZW0pKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJaWYgKHBvcnQtPnR0eSkKKwkJcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IAorCQkJKHRwb3J0LT50cF9mbGFncyAmIEFTWU5DX0xPV19MQVRFTkNZKSA/IDEgOiAwOworCisJcG9ydF9udW1iZXIgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yOworCisJbWVtc2V0KCYodHBvcnQtPnRwX2ljb3VudCksIDB4MDAsIHNpemVvZih0cG9ydC0+dHBfaWNvdW50KSk7CisKKwl0cG9ydC0+dHBfbXNyID0gMDsKKwl0cG9ydC0+dHBfc2hhZG93X21jciB8PSAoVElfTUNSX1JUUyB8IFRJX01DUl9EVFIpOworCisJLyogc3RhcnQgaW50ZXJydXB0IHVyYiB0aGUgZmlyc3QgdGltZSBhIHBvcnQgaXMgb3BlbmVkIG9uIHRoaXMgZGV2aWNlICovCisJaWYgKHRkZXYtPnRkX29wZW5fcG9ydF9jb3VudCA9PSAwKSB7CisJCWRiZygiJXMgLSBzdGFydCBpbnRlcnJ1cHQgaW4gdXJiIiwgX19GVU5DVElPTl9fKTsKKwkJdXJiID0gdGRldi0+dGRfc2VyaWFsLT5wb3J0WzBdLT5pbnRlcnJ1cHRfaW5fdXJiOworCQlpZiAoIXVyYikgeworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBubyBpbnRlcnJ1cHQgdXJiXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJCWdvdG8gdXBfc2VtOworCQl9CisJCXVyYi0+Y29tcGxldGUgPSB0aV9pbnRlcnJ1cHRfY2FsbGJhY2s7CisJCXVyYi0+Y29udGV4dCA9IHRkZXY7CisJCXVyYi0+ZGV2ID0gZGV2OworCQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworCQlpZiAoc3RhdHVzKSB7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIHN1Ym1pdCBpbnRlcnJ1cHQgdXJiIGZhaWxlZCwgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJCWdvdG8gdXBfc2VtOworCQl9CisJfQorCisJdGlfc2V0X3Rlcm1pb3MocG9ydCwgTlVMTCk7CisKKwlkYmcoIiVzIC0gc2VuZGluZyBUSV9PUEVOX1BPUlQiLCBfX0ZVTkNUSU9OX18pOworCXN0YXR1cyA9IHRpX2NvbW1hbmRfb3V0X3N5bmModGRldiwgVElfT1BFTl9QT1JULAorCQkoX191OCkoVElfVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwgb3Blbl9zZXR0aW5ncywgTlVMTCwgMCk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGNhbm5vdCBzZW5kIG9wZW4gY29tbWFuZCwgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJZ290byB1bmxpbmtfaW50X3VyYjsKKwl9CisKKwlkYmcoIiVzIC0gc2VuZGluZyBUSV9TVEFSVF9QT1JUIiwgX19GVU5DVElPTl9fKTsKKwlzdGF0dXMgPSB0aV9jb21tYW5kX291dF9zeW5jKHRkZXYsIFRJX1NUQVJUX1BPUlQsCisJCShfX3U4KShUSV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLCAwLCBOVUxMLCAwKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gY2Fubm90IHNlbmQgc3RhcnQgY29tbWFuZCwgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJZ290byB1bmxpbmtfaW50X3VyYjsKKwl9CisKKwlkYmcoIiVzIC0gc2VuZGluZyBUSV9QVVJHRV9QT1JUIiwgX19GVU5DVElPTl9fKTsKKwlzdGF0dXMgPSB0aV9jb21tYW5kX291dF9zeW5jKHRkZXYsIFRJX1BVUkdFX1BPUlQsCisJCShfX3U4KShUSV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLCBUSV9QVVJHRV9JTlBVVCwgTlVMTCwgMCk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGNhbm5vdCBjbGVhciBpbnB1dCBidWZmZXJzLCAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQlnb3RvIHVubGlua19pbnRfdXJiOworCX0KKwlzdGF0dXMgPSB0aV9jb21tYW5kX291dF9zeW5jKHRkZXYsIFRJX1BVUkdFX1BPUlQsCisJCShfX3U4KShUSV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLCBUSV9QVVJHRV9PVVRQVVQsIE5VTEwsIDApOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBjYW5ub3QgY2xlYXIgb3V0cHV0IGJ1ZmZlcnMsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCWdvdG8gdW5saW5rX2ludF91cmI7CisJfQorCisJLyogcmVzZXQgdGhlIGRhdGEgdG9nZ2xlIG9uIHRoZSBidWxrIGVuZHBvaW50cyB0byB3b3JrIGFyb3VuZCBidWcgaW4KKwkgKiBob3N0IGNvbnRyb2xsZXJzIHdoZXJlIHRoaW5ncyBnZXQgb3V0IG9mIHN5bmMgc29tZSB0aW1lcyAqLworCXVzYl9jbGVhcl9oYWx0KGRldiwgcG9ydC0+d3JpdGVfdXJiLT5waXBlKTsKKwl1c2JfY2xlYXJfaGFsdChkZXYsIHBvcnQtPnJlYWRfdXJiLT5waXBlKTsKKworCXRpX3NldF90ZXJtaW9zKHBvcnQsIE5VTEwpOworCisJZGJnKCIlcyAtIHNlbmRpbmcgVElfT1BFTl9QT1JUICgyKSIsIF9fRlVOQ1RJT05fXyk7CisJc3RhdHVzID0gdGlfY29tbWFuZF9vdXRfc3luYyh0ZGV2LCBUSV9PUEVOX1BPUlQsCisJCShfX3U4KShUSV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLCBvcGVuX3NldHRpbmdzLCBOVUxMLCAwKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gY2Fubm90IHNlbmQgb3BlbiBjb21tYW5kICgyKSwgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJZ290byB1bmxpbmtfaW50X3VyYjsKKwl9CisKKwlkYmcoIiVzIC0gc2VuZGluZyBUSV9TVEFSVF9QT1JUICgyKSIsIF9fRlVOQ1RJT05fXyk7CisJc3RhdHVzID0gdGlfY29tbWFuZF9vdXRfc3luYyh0ZGV2LCBUSV9TVEFSVF9QT1JULAorCQkoX191OCkoVElfVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwgMCwgTlVMTCwgMCk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGNhbm5vdCBzZW5kIHN0YXJ0IGNvbW1hbmQgKDIpLCAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQlnb3RvIHVubGlua19pbnRfdXJiOworCX0KKworCS8qIHN0YXJ0IHJlYWQgdXJiICovCisJZGJnKCIlcyAtIHN0YXJ0IHJlYWQgdXJiIiwgX19GVU5DVElPTl9fKTsKKwl1cmIgPSBwb3J0LT5yZWFkX3VyYjsKKwlpZiAoIXVyYikgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIG5vIHJlYWQgdXJiXG4iLCBfX0ZVTkNUSU9OX18pOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIHVubGlua19pbnRfdXJiOworCX0KKwl0cG9ydC0+dHBfcmVhZF91cmJfc3RhdGUgPSBUSV9SRUFEX1VSQl9SVU5OSU5HOworCXVyYi0+Y29tcGxldGUgPSB0aV9idWxrX2luX2NhbGxiYWNrOworCXVyYi0+Y29udGV4dCA9IHRwb3J0OworCXVyYi0+ZGV2ID0gZGV2OworCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIHN1Ym1pdCByZWFkIHVyYiBmYWlsZWQsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCWdvdG8gdW5saW5rX2ludF91cmI7CisJfQorCisJdHBvcnQtPnRwX2lzX29wZW4gPSAxOworCSsrdGRldi0+dGRfb3Blbl9wb3J0X2NvdW50OworCisJZ290byB1cF9zZW07CisKK3VubGlua19pbnRfdXJiOgorCWlmICh0ZGV2LT50ZF9vcGVuX3BvcnRfY291bnQgPT0gMCkKKwkJdXNiX2tpbGxfdXJiKHBvcnQtPnNlcmlhbC0+cG9ydFswXS0+aW50ZXJydXB0X2luX3VyYik7Cit1cF9zZW06CisJdXAoJnRkZXYtPnRkX29wZW5fY2xvc2Vfc2VtKTsKKwlkYmcoIiVzIC0gZXhpdCAlZCIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisKK3N0YXRpYyB2b2lkIHRpX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB0aV9kZXZpY2UgKnRkZXY7CisJc3RydWN0IHRpX3BvcnQgKnRwb3J0OworCWludCBwb3J0X251bWJlcjsKKwlpbnQgc3RhdHVzOworCWludCBkb191cDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQkJIAorCXRkZXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CisJdHBvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaWYgKHRkZXYgPT0gTlVMTCB8fCB0cG9ydCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl0cG9ydC0+dHBfaXNfb3BlbiA9IDA7CisKKwl0aV9kcmFpbih0cG9ydCwgKHRwb3J0LT50cF9jbG9zaW5nX3dhaXQqSFopLzEwMCwgMSk7CisKKwl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOworCXRwb3J0LT50cF93cml0ZV91cmJfaW5fdXNlID0gMDsKKworCXBvcnRfbnVtYmVyID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vcjsKKworCWRiZygiJXMgLSBzZW5kaW5nIFRJX0NMT1NFX1BPUlQiLCBfX0ZVTkNUSU9OX18pOworCXN0YXR1cyA9IHRpX2NvbW1hbmRfb3V0X3N5bmModGRldiwgVElfQ0xPU0VfUE9SVCwKKwkJICAgICAoX191OCkoVElfVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwgMCwgTlVMTCwgMCk7CisJaWYgKHN0YXR1cykKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBjYW5ub3Qgc2VuZCBjbG9zZSBwb3J0IGNvbW1hbmQsICVkXG4iICwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCisJLyogaWYgZG93biBpcyBpbnRlcnJ1cHRlZCwgY29udGludWUgYW55d2F5ICovCisJZG9fdXAgPSAhZG93bl9pbnRlcnJ1cHRpYmxlKCZ0ZGV2LT50ZF9vcGVuX2Nsb3NlX3NlbSk7CisJLS10cG9ydC0+dHBfdGRldi0+dGRfb3Blbl9wb3J0X2NvdW50OworCWlmICh0cG9ydC0+dHBfdGRldi0+dGRfb3Blbl9wb3J0X2NvdW50IDw9IDApIHsKKwkJLyogbGFzdCBwb3J0IGlzIGNsb3NlZCwgc2h1dCBkb3duIGludGVycnVwdCB1cmIgKi8KKwkJdXNiX2tpbGxfdXJiKHBvcnQtPnNlcmlhbC0+cG9ydFswXS0+aW50ZXJydXB0X2luX3VyYik7CisJCXRwb3J0LT50cF90ZGV2LT50ZF9vcGVuX3BvcnRfY291bnQgPSAwOworCX0KKwlpZiAoZG9fdXApCisJCXVwKCZ0ZGV2LT50ZF9vcGVuX2Nsb3NlX3NlbSk7CisKKwlkYmcoIiVzIC0gZXhpdCIsIF9fRlVOQ1RJT05fXyk7Cit9CisKKworc3RhdGljIGludCB0aV93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorCWludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKGNvdW50ID09IDApIHsKKwkJZGJnKCIlcyAtIHdyaXRlIHJlcXVlc3Qgb2YgMCBieXRlcyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAwOworCX0KKworCWlmICh0cG9ydCA9PSBOVUxMIHx8ICF0cG9ydC0+dHBfaXNfb3BlbikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKwljb3VudCA9IHRpX2J1Zl9wdXQodHBvcnQtPnRwX3dyaXRlX2J1ZiwgZGF0YSwgY291bnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwb3J0LT50cF9sb2NrLCBmbGFncyk7CisKKwl0aV9zZW5kKHRwb3J0KTsKKworCXJldHVybiBjb3VudDsKK30KKworCitzdGF0aWMgaW50IHRpX3dyaXRlX3Jvb20oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IHJvb20gPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICh0cG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKwkKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKwlyb29tID0gdGlfYnVmX3NwYWNlX2F2YWlsKHRwb3J0LT50cF93cml0ZV9idWYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwb3J0LT50cF9sb2NrLCBmbGFncyk7CisKKwlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fRlVOQ1RJT05fXywgcm9vbSk7CisJcmV0dXJuIHJvb207Cit9CisKKworc3RhdGljIGludCB0aV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IGNoYXJzID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAodHBvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKwljaGFycyA9IHRpX2J1Zl9kYXRhX2F2YWlsKHRwb3J0LT50cF93cml0ZV9idWYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwb3J0LT50cF9sb2NrLCBmbGFncyk7CisKKwlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fRlVOQ1RJT05fXywgY2hhcnMpOworCXJldHVybiBjaGFyczsKK30KKworCitzdGF0aWMgdm9pZCB0aV90aHJvdHRsZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB0aV9wb3J0ICp0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAodHBvcnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICghdHR5KSB7CisJCWRiZygiJXMgLSBubyB0dHkiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKElfSVhPRkYodHR5KSB8fCBDX0NSVFNDVFModHR5KSkKKwkJdGlfc3RvcF9yZWFkKHRwb3J0LCB0dHkpOworCit9CisKKworc3RhdGljIHZvaWQgdGlfdW50aHJvdHRsZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB0aV9wb3J0ICp0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCWludCBzdGF0dXM7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICh0cG9ydCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl0dHkgPSBwb3J0LT50dHk7CisJaWYgKCF0dHkpIHsKKwkJZGJnKCIlcyAtIG5vIHR0eSIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoSV9JWE9GRih0dHkpIHx8IENfQ1JUU0NUUyh0dHkpKSB7CisJCXN0YXR1cyA9IHRpX3Jlc3RhcnRfcmVhZCh0cG9ydCwgdHR5KTsKKwkJaWYgKHN0YXR1cykKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gY2Fubm90IHJlc3RhcnQgcmVhZCwgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwl9Cit9CisKKworc3RhdGljIGludCB0aV9pb2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IGFzeW5jX2ljb3VudCBjbm93OworCXN0cnVjdCBhc3luY19pY291bnQgY3ByZXY7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCwgY21kID0gMHglMDRYIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIGNtZCk7CisKKwlpZiAodHBvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzd2l0Y2ggKGNtZCkgeworCQljYXNlIFRJT0NHU0VSSUFMOgorCQkJZGJnKCIlcyAtICglZCkgVElPQ0dTRVJJQUwiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCQlyZXR1cm4gdGlfZ2V0X3NlcmlhbF9pbmZvKHRwb3J0LCAoc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICopYXJnKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVElPQ1NTRVJJQUw6CisJCQlkYmcoIiVzIC0gKCVkKSBUSU9DU1NFUklBTCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkJCXJldHVybiB0aV9zZXRfc2VyaWFsX2luZm8odHBvcnQsIChzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKilhcmcpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUSU9DTUlXQUlUOgorCQkJZGJnKCIlcyAtICglZCkgVElPQ01JV0FJVCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkJCWNwcmV2ID0gdHBvcnQtPnRwX2ljb3VudDsKKwkJCXdoaWxlICgxKSB7CisJCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmdHBvcnQtPnRwX21zcl93YWl0KTsKKwkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCQkJY25vdyA9IHRwb3J0LT50cF9pY291bnQ7CisJCQkJaWYgKGNub3cucm5nID09IGNwcmV2LnJuZyAmJiBjbm93LmRzciA9PSBjcHJldi5kc3IgJiYKKwkJCQkgICAgY25vdy5kY2QgPT0gY3ByZXYuZGNkICYmIGNub3cuY3RzID09IGNwcmV2LmN0cykKKwkJCQkJcmV0dXJuIC1FSU87IC8qIG5vIGNoYW5nZSA9PiBlcnJvciAqLworCQkJCWlmICgoKGFyZyAmIFRJT0NNX1JORykgJiYgKGNub3cucm5nICE9IGNwcmV2LnJuZykpIHx8CisJCQkJICAgICgoYXJnICYgVElPQ01fRFNSKSAmJiAoY25vdy5kc3IgIT0gY3ByZXYuZHNyKSkgfHwKKwkJCQkgICAgKChhcmcgJiBUSU9DTV9DRCkgICYmIChjbm93LmRjZCAhPSBjcHJldi5kY2QpKSB8fAorCQkJCSAgICAoKGFyZyAmIFRJT0NNX0NUUykgJiYgKGNub3cuY3RzICE9IGNwcmV2LmN0cykpICkgeworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQkJY3ByZXYgPSBjbm93OworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBUSU9DR0lDT1VOVDoKKwkJCWRiZygiJXMgLSAoJWQpIFRJT0NHSUNPVU5UIFJYPSVkLCBUWD0lZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCB0cG9ydC0+dHBfaWNvdW50LnJ4LCB0cG9ydC0+dHBfaWNvdW50LnR4KTsKKwkJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmdHBvcnQtPnRwX2ljb3VudCwgc2l6ZW9mKHRwb3J0LT50cF9pY291bnQpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKKworc3RhdGljIHZvaWQgdGlfc2V0X3Rlcm1pb3Moc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwlzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7CisJc3RydWN0IHRpX3BvcnQgKnRwb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CisJc3RydWN0IHRpX3VhcnRfY29uZmlnICpjb25maWc7CisJdGNmbGFnX3QgY2ZsYWcsaWZsYWc7CisJaW50IGJhdWQ7CisJaW50IHN0YXR1czsKKwlpbnQgcG9ydF9udW1iZXIgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yOworCXVuc2lnbmVkIGludCBtY3I7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICghdHR5IHx8ICF0dHktPnRlcm1pb3MpIHsKKwkJZGJnKCIlcyAtIG5vIHR0eSBvciB0ZXJtaW9zIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCWlmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2lmbGFnOworCisJaWYgKG9sZF90ZXJtaW9zICYmIGNmbGFnID09IG9sZF90ZXJtaW9zLT5jX2NmbGFnCisJJiYgaWZsYWcgPT0gb2xkX3Rlcm1pb3MtPmNfaWZsYWcpIHsKKwkJZGJnKCIlcyAtIG5vdGhpbmcgdG8gY2hhbmdlIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWRiZygiJXMgLSBjbGZhZyAlMDh4LCBpZmxhZyAlMDh4IiwgX19GVU5DVElPTl9fLCBjZmxhZywgaWZsYWcpOworCisJaWYgKG9sZF90ZXJtaW9zKQorCQlkYmcoIiVzIC0gb2xkIGNsZmFnICUwOHgsIG9sZCBpZmxhZyAlMDh4IiwgX19GVU5DVElPTl9fLCBvbGRfdGVybWlvcy0+Y19jZmxhZywgb2xkX3Rlcm1pb3MtPmNfaWZsYWcpOworCisJaWYgKHRwb3J0ID09IE5VTEwpCisJCXJldHVybjsKKworCWNvbmZpZyA9IGttYWxsb2Moc2l6ZW9mKCpjb25maWcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvbmZpZykgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwljb25maWctPndGbGFncyA9IDA7CisKKwkvKiB0aGVzZSBmbGFncyBtdXN0IGJlIHNldCAqLworCWNvbmZpZy0+d0ZsYWdzIHw9IFRJX1VBUlRfRU5BQkxFX01TX0lOVFM7CisJY29uZmlnLT53RmxhZ3MgfD0gVElfVUFSVF9FTkFCTEVfQVVUT19TVEFSVF9ETUE7CisJY29uZmlnLT5iVWFydE1vZGUgPSAoX191OCkodHBvcnQtPnRwX3VhcnRfbW9kZSk7CisKKwlzd2l0Y2ggKGNmbGFnICYgQ1NJWkUpIHsKKwkJY2FzZSBDUzU6CisJCQkgICAgY29uZmlnLT5iRGF0YUJpdHMgPSBUSV9VQVJUXzVfREFUQV9CSVRTOworCQkJICAgIGJyZWFrOworCQljYXNlIENTNjoKKwkJCSAgICBjb25maWctPmJEYXRhQml0cyA9IFRJX1VBUlRfNl9EQVRBX0JJVFM7CisJCQkgICAgYnJlYWs7CisJCWNhc2UgQ1M3OgorCQkJICAgIGNvbmZpZy0+YkRhdGFCaXRzID0gVElfVUFSVF83X0RBVEFfQklUUzsKKwkJCSAgICBicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSBDUzg6CisJCQkgICAgY29uZmlnLT5iRGF0YUJpdHMgPSBUSV9VQVJUXzhfREFUQV9CSVRTOworCQkJICAgIGJyZWFrOworCX0KKworCWlmIChjZmxhZyAmIFBBUkVOQikgeworCQlpZiAoY2ZsYWcgJiBQQVJPREQpIHsKKwkJCWNvbmZpZy0+d0ZsYWdzIHw9IFRJX1VBUlRfRU5BQkxFX1BBUklUWV9DSEVDS0lORzsKKwkJCWNvbmZpZy0+YlBhcml0eSA9IFRJX1VBUlRfT0REX1BBUklUWTsKKwkJfSBlbHNlIHsKKwkJCWNvbmZpZy0+d0ZsYWdzIHw9IFRJX1VBUlRfRU5BQkxFX1BBUklUWV9DSEVDS0lORzsKKwkJCWNvbmZpZy0+YlBhcml0eSA9IFRJX1VBUlRfRVZFTl9QQVJJVFk7CisJCX0KKwl9IGVsc2UgeworCQljb25maWctPndGbGFncyAmPSB+VElfVUFSVF9FTkFCTEVfUEFSSVRZX0NIRUNLSU5HOworCQljb25maWctPmJQYXJpdHkgPSBUSV9VQVJUX05PX1BBUklUWTsgCQorCX0KKworCWlmIChjZmxhZyAmIENTVE9QQikKKwkJY29uZmlnLT5iU3RvcEJpdHMgPSBUSV9VQVJUXzJfU1RPUF9CSVRTOworCWVsc2UKKwkJY29uZmlnLT5iU3RvcEJpdHMgPSBUSV9VQVJUXzFfU1RPUF9CSVRTOworCisJaWYgKGNmbGFnICYgQ1JUU0NUUykgeworCQkvKiBSVFMgZmxvdyBjb250cm9sIG11c3QgYmUgb2ZmIHRvIGRyb3AgUlRTIGZvciBiYXVkIHJhdGUgQjAgKi8KKwkJaWYgKChjZmxhZyAmIENCQVVEKSAhPSBCMCkKKwkJCWNvbmZpZy0+d0ZsYWdzIHw9IFRJX1VBUlRfRU5BQkxFX1JUU19JTjsKKwkJY29uZmlnLT53RmxhZ3MgfD0gVElfVUFSVF9FTkFCTEVfQ1RTX09VVDsKKwl9IGVsc2UgeworCQl0dHktPmh3X3N0b3BwZWQgPSAwOworCQl0aV9yZXN0YXJ0X3JlYWQodHBvcnQsIHR0eSk7CisJfQorCisJaWYgKElfSVhPRkYodHR5KSB8fCBJX0lYT04odHR5KSkgeworCQljb25maWctPmNYb24gID0gU1RBUlRfQ0hBUih0dHkpOworCQljb25maWctPmNYb2ZmID0gU1RPUF9DSEFSKHR0eSk7CisKKwkJaWYgKElfSVhPRkYodHR5KSkKKwkJCWNvbmZpZy0+d0ZsYWdzIHw9IFRJX1VBUlRfRU5BQkxFX1hfSU47CisJCWVsc2UKKwkJCXRpX3Jlc3RhcnRfcmVhZCh0cG9ydCwgdHR5KTsKKworCQlpZiAoSV9JWE9OKHR0eSkpCisJCQljb25maWctPndGbGFncyB8PSBUSV9VQVJUX0VOQUJMRV9YX09VVDsKKwl9CisKKwliYXVkID0gdHR5X2dldF9iYXVkX3JhdGUodHR5KTsKKwlpZiAoIWJhdWQpIGJhdWQgPSA5NjAwOworCWlmICh0cG9ydC0+dHBfdGRldi0+dGRfaXNfMzQxMCkKKwkJY29uZmlnLT53QmF1ZFJhdGUgPSAoX191MTYpKCg5MjMwNzcgKyBiYXVkLzIpIC8gYmF1ZCk7CisJZWxzZQorCQljb25maWctPndCYXVkUmF0ZSA9IChfX3UxNikoKDQ2MTUzOCArIGJhdWQvMikgLyBiYXVkKTsKKworCWRiZygiJXMgLSBCYXVkUmF0ZT0lZCwgd0JhdWRSYXRlPSVkLCB3RmxhZ3M9MHglMDRYLCBiRGF0YUJpdHM9JWQsIGJQYXJpdHk9JWQsIGJTdG9wQml0cz0lZCwgY1hvbj0lZCwgY1hvZmY9JWQsIGJVYXJ0TW9kZT0lZCIsCisJX19GVU5DVElPTl9fLCBiYXVkLCBjb25maWctPndCYXVkUmF0ZSwgY29uZmlnLT53RmxhZ3MsIGNvbmZpZy0+YkRhdGFCaXRzLCBjb25maWctPmJQYXJpdHksIGNvbmZpZy0+YlN0b3BCaXRzLCBjb25maWctPmNYb24sIGNvbmZpZy0+Y1hvZmYsIGNvbmZpZy0+YlVhcnRNb2RlKTsKKworCWNwdV90b19iZTE2cygmY29uZmlnLT53QmF1ZFJhdGUpOworCWNwdV90b19iZTE2cygmY29uZmlnLT53RmxhZ3MpOworCisJc3RhdHVzID0gdGlfY29tbWFuZF9vdXRfc3luYyh0cG9ydC0+dHBfdGRldiwgVElfU0VUX0NPTkZJRywKKwkJKF9fdTgpKFRJX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksIDAsIChfX3U4ICopY29uZmlnLAorCQlzaXplb2YoKmNvbmZpZykpOworCWlmIChzdGF0dXMpCisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gY2Fubm90IHNldCBjb25maWcgb24gcG9ydCAlZCwgJWRcbiIsIF9fRlVOQ1RJT05fXywgcG9ydF9udW1iZXIsIHN0YXR1cyk7CisKKwkvKiBTRVRfQ09ORklHIGFzc2VydHMgUlRTIGFuZCBEVFIsIHJlc2V0IHRoZW0gY29ycmVjdGx5ICovCisJbWNyID0gdHBvcnQtPnRwX3NoYWRvd19tY3I7CisJLyogaWYgYmF1ZCByYXRlIGlzIEIwLCBjbGVhciBSVFMgYW5kIERUUiAqLworCWlmICgoY2ZsYWcgJiBDQkFVRCkgPT0gQjApCisJCW1jciAmPSB+KFRJX01DUl9EVFIgfCBUSV9NQ1JfUlRTKTsKKwlzdGF0dXMgPSB0aV9zZXRfbWNyKHRwb3J0LCBtY3IpOworCWlmIChzdGF0dXMpCisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gY2Fubm90IHNldCBtb2RlbSBjb250cm9sIG9uIHBvcnQgJWQsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHBvcnRfbnVtYmVyLCBzdGF0dXMpOworCisJa2ZyZWUoY29uZmlnKTsKK30KKworCitzdGF0aWMgaW50IHRpX3Rpb2NtZ2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB0aV9wb3J0ICp0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBpbnQgcmVzdWx0OworCXVuc2lnbmVkIGludCBtc3I7CisJdW5zaWduZWQgaW50IG1jcjsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHRwb3J0ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJbXNyID0gdHBvcnQtPnRwX21zcjsKKwltY3IgPSB0cG9ydC0+dHBfc2hhZG93X21jcjsKKworCXJlc3VsdCA9ICgobWNyICYgVElfTUNSX0RUUikgPyBUSU9DTV9EVFIgOiAwKQorCQl8ICgobWNyICYgVElfTUNSX1JUUykgPyBUSU9DTV9SVFMgOiAwKQorCQl8ICgobWNyICYgVElfTUNSX0xPT1ApID8gVElPQ01fTE9PUCA6IDApCisJCXwgKChtc3IgJiBUSV9NU1JfQ1RTKSA/IFRJT0NNX0NUUyA6IDApCisJCXwgKChtc3IgJiBUSV9NU1JfQ0QpID8gVElPQ01fQ0FSIDogMCkKKwkJfCAoKG1zciAmIFRJX01TUl9SSSkgPyBUSU9DTV9SSSA6IDApCisJCXwgKChtc3IgJiBUSV9NU1JfRFNSKSA/IFRJT0NNX0RTUiA6IDApOworCisJZGJnKCIlcyAtIDB4JTA0WCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIGludCB0aV90aW9jbXNldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJc3RydWN0IHRpX3BvcnQgKnRwb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGludCBtY3I7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICh0cG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW1jciA9IHRwb3J0LT50cF9zaGFkb3dfbWNyOworCisJaWYgKHNldCAmIFRJT0NNX1JUUykKKwkJbWNyIHw9IFRJX01DUl9SVFM7CisJaWYgKHNldCAmIFRJT0NNX0RUUikKKwkJbWNyIHw9IFRJX01DUl9EVFI7CisJaWYgKHNldCAmIFRJT0NNX0xPT1ApCisJCW1jciB8PSBUSV9NQ1JfTE9PUDsKKworCWlmIChjbGVhciAmIFRJT0NNX1JUUykKKwkJbWNyICY9IH5USV9NQ1JfUlRTOworCWlmIChjbGVhciAmIFRJT0NNX0RUUikKKwkJbWNyICY9IH5USV9NQ1JfRFRSOworCWlmIChjbGVhciAmIFRJT0NNX0xPT1ApCisJCW1jciAmPSB+VElfTUNSX0xPT1A7CisKKwlyZXR1cm4gdGlfc2V0X21jcih0cG9ydCwgbWNyKTsKK30KKworCitzdGF0aWMgdm9pZCB0aV9icmVhayhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpCit7CisJc3RydWN0IHRpX3BvcnQgKnRwb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludCBzdGF0dXM7CisKKwlkYmcoIiVzIC0gc3RhdGUgPSAlZCIsIF9fRlVOQ1RJT05fXywgYnJlYWtfc3RhdGUpOworCisJaWYgKHRwb3J0ID09IE5VTEwpCisJCXJldHVybjsKKworCXRpX2RyYWluKHRwb3J0LCAodHBvcnQtPnRwX2Nsb3Npbmdfd2FpdCpIWikvMTAwLCAwKTsKKworCXN0YXR1cyA9IHRpX3dyaXRlX2J5dGUodHBvcnQtPnRwX3RkZXYsCisJCXRwb3J0LT50cF91YXJ0X2Jhc2VfYWRkciArIFRJX1VBUlRfT0ZGU0VUX0xDUiwKKwkJVElfTENSX0JSRUFLLCBicmVha19zdGF0ZSA9PSAtMSA/IFRJX0xDUl9CUkVBSyA6IDApOworCisJaWYgKHN0YXR1cykKKwkJZGJnKCIlcyAtIGVycm9yIHNldHRpbmcgYnJlYWssICVkIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworfQorCisKK3N0YXRpYyB2b2lkIHRpX2ludGVycnVwdF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB0aV9kZXZpY2UgKnRkZXYgPSAoc3RydWN0IHRpX2RldmljZSAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSB0ZGV2LT50ZF9zZXJpYWw7CisJc3RydWN0IHRpX3BvcnQgKnRwb3J0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1cmItPmRldi0+ZGV2OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgbGVuZ3RoID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCWludCBwb3J0X251bWJlcjsKKwlpbnQgZnVuY3Rpb247CisJaW50IHN0YXR1czsKKwlfX3U4IG1zcjsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24sICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXRkZXYtPnRkX3VyYl9lcnJvciA9IDE7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzLCAlZFxuIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXRkZXYtPnRkX3VyYl9lcnJvciA9IDE7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAobGVuZ3RoICE9IDIpIHsKKwkJZGJnKCIlcyAtIGJhZCBwYWNrZXQgc2l6ZSwgJWQiLCBfX0ZVTkNUSU9OX18sIGxlbmd0aCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoZGF0YVswXSA9PSBUSV9DT0RFX0hBUkRXQVJFX0VSUk9SKSB7CisJCWRldl9lcnIoZGV2LCAiJXMgLSBoYXJkd2FyZSBlcnJvciwgJWRcbiIsIF9fRlVOQ1RJT05fXywgZGF0YVsxXSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlwb3J0X251bWJlciA9IFRJX0dFVF9QT1JUX0ZST01fQ09ERShkYXRhWzBdKTsKKwlmdW5jdGlvbiA9IFRJX0dFVF9GVU5DX0ZST01fQ09ERShkYXRhWzBdKTsKKworCWRiZygiJXMgLSBwb3J0X251bWJlciAlZCwgZnVuY3Rpb24gJWQsIGRhdGEgMHglMDJYIiwgX19GVU5DVElPTl9fLCBwb3J0X251bWJlciwgZnVuY3Rpb24sIGRhdGFbMV0pOworCisJaWYgKHBvcnRfbnVtYmVyID49IHNlcmlhbC0+bnVtX3BvcnRzKSB7CisJCWRldl9lcnIoZGV2LCAiJXMgLSBiYWQgcG9ydCBudW1iZXIsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHBvcnRfbnVtYmVyKTsKKwkJZ290byBleGl0OworCX0KKworCXBvcnQgPSBzZXJpYWwtPnBvcnRbcG9ydF9udW1iZXJdOworCisJdHBvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaWYgKCF0cG9ydCkKKwkJZ290byBleGl0OworCisJc3dpdGNoIChmdW5jdGlvbikgeworCWNhc2UgVElfQ09ERV9EQVRBX0VSUk9SOgorCQlkZXZfZXJyKGRldiwgIiVzIC0gREFUQSBFUlJPUiwgcG9ydCAlZCwgZGF0YSAweCUwMlhcbiIsIF9fRlVOQ1RJT05fXywgcG9ydF9udW1iZXIsIGRhdGFbMV0pOworCQlicmVhazsKKworCWNhc2UgVElfQ09ERV9NT0RFTV9TVEFUVVM6CisJCW1zciA9IGRhdGFbMV07CisJCWRiZygiJXMgLSBwb3J0ICVkLCBtc3IgMHglMDJYIiwgX19GVU5DVElPTl9fLCBwb3J0X251bWJlciwgbXNyKTsKKwkJdGlfaGFuZGxlX25ld19tc3IodHBvcnQsIG1zcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYsICIlcyAtIHVua25vd24gaW50ZXJydXB0IGNvZGUsIDB4JTAyWFxuIiwgX19GVU5DVElPTl9fLCBkYXRhWzFdKTsKKwkJYnJlYWs7CisJfQorCitleGl0OgorCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cykKKwkJZGV2X2VycihkZXYsICIlcyAtIHJlc3VibWl0IGludGVycnVwdCB1cmIgZmFpbGVkLCAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworfQorCisKK3N0YXRpYyB2b2lkIHRpX2J1bGtfaW5fY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQgPSAoc3RydWN0IHRpX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHRwb3J0LT50cF9wb3J0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1cmItPmRldi0+ZGV2OworCWludCBzdGF0dXMgPSAwOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biwgJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJdHBvcnQtPnRwX3RkZXYtPnRkX3VyYl9lcnJvciA9IDE7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHBvcnQtPnRwX3dyaXRlX3dhaXQpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYsICIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cywgJWRcbiIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMgKTsKKwkJdHBvcnQtPnRwX3RkZXYtPnRkX3VyYl9lcnJvciA9IDE7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHBvcnQtPnRwX3dyaXRlX3dhaXQpOworCX0KKworCWlmICh1cmItPnN0YXR1cyA9PSAtRVBJUEUpCisJCWdvdG8gZXhpdDsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkZXZfZXJyKGRldiwgIiVzIC0gc3RvcHBpbmcgcmVhZCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAocG9ydC0+dHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsIGRldiwgX19GVU5DVElPTl9fLAorCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisKKwkJaWYgKCF0cG9ydC0+dHBfaXNfb3BlbikKKwkJCWRiZygiJXMgLSBwb3J0IGNsb3NlZCwgZHJvcHBpbmcgZGF0YSIsIF9fRlVOQ1RJT05fXyk7CisJCWVsc2UKKwkJCXRpX3JlY3YoJnVyYi0+ZGV2LT5kZXYsIHBvcnQtPnR0eSwgdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKworCQlzcGluX2xvY2soJnRwb3J0LT50cF9sb2NrKTsKKwkJdHBvcnQtPnRwX2ljb3VudC5yeCArPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJCXNwaW5fdW5sb2NrKCZ0cG9ydC0+dHBfbG9jayk7CisJfQorCitleGl0OgorCS8qIGNvbnRpbnVlIHRvIHJlYWQgdW5sZXNzIHN0b3BwaW5nICovCisJc3Bpbl9sb2NrKCZ0cG9ydC0+dHBfbG9jayk7CisJaWYgKHRwb3J0LT50cF9yZWFkX3VyYl9zdGF0ZSA9PSBUSV9SRUFEX1VSQl9SVU5OSU5HKSB7CisJCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJfSBlbHNlIGlmICh0cG9ydC0+dHBfcmVhZF91cmJfc3RhdGUgPT0gVElfUkVBRF9VUkJfU1RPUFBJTkcpIHsKKwkJdHBvcnQtPnRwX3JlYWRfdXJiX3N0YXRlID0gVElfUkVBRF9VUkJfU1RPUFBFRDsKKwl9CisJc3Bpbl91bmxvY2soJnRwb3J0LT50cF9sb2NrKTsKKwlpZiAoc3RhdHVzKQorCQlkZXZfZXJyKGRldiwgIiVzIC0gcmVzdWJtaXQgcmVhZCB1cmIgZmFpbGVkLCAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworfQorCisKK3N0YXRpYyB2b2lkIHRpX2J1bGtfb3V0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHRpX3BvcnQgKnRwb3J0ID0gKHN0cnVjdCB0aV9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0cG9ydC0+dHBfcG9ydDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmdXJiLT5kZXYtPmRldjsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJdHBvcnQtPnRwX3dyaXRlX3VyYl9pbl91c2UgPSAwOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24sICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXRwb3J0LT50cF90ZGV2LT50ZF91cmJfZXJyb3IgPSAxOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnRwb3J0LT50cF93cml0ZV93YWl0KTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LCAiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJdHBvcnQtPnRwX3RkZXYtPnRkX3VyYl9lcnJvciA9IDE7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHBvcnQtPnRwX3dyaXRlX3dhaXQpOworCX0KKworCS8qIHNlbmQgYW55IGJ1ZmZlcmVkIGRhdGEgKi8KKwl0aV9zZW5kKHRwb3J0KTsKK30KKworCitzdGF0aWMgdm9pZCB0aV9yZWN2KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwl1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuZ3RoKQoreworCWludCBjbnQ7CisKKwlkbyB7CisJCWlmICh0dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkgeworCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCWlmICh0dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkgeworCQkJCWRldl9lcnIoZGV2LCAiJXMgLSBkcm9wcGluZyBkYXRhLCAlZCBieXRlcyBsb3N0XG4iLCBfX0ZVTkNUSU9OX18sIGxlbmd0aCk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJCWNudCA9IG1pbihsZW5ndGgsIFRUWV9GTElQQlVGX1NJWkUgLSB0dHktPmZsaXAuY291bnQpOworCQltZW1jcHkodHR5LT5mbGlwLmNoYXJfYnVmX3B0ciwgZGF0YSwgY250KTsKKwkJbWVtc2V0KHR0eS0+ZmxpcC5mbGFnX2J1Zl9wdHIsIDAsIGNudCk7CisJCXR0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIgKz0gY250OworCQl0dHktPmZsaXAuZmxhZ19idWZfcHRyICs9IGNudDsKKwkJdHR5LT5mbGlwLmNvdW50ICs9IGNudDsKKwkJZGF0YSArPSBjbnQ7CisJCWxlbmd0aCAtPSBjbnQ7CisJfSB3aGlsZSAobGVuZ3RoID4gMCk7CisKKwl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworfQorCisKK3N0YXRpYyB2b2lkIHRpX3NlbmQoc3RydWN0IHRpX3BvcnQgKnRwb3J0KQoreworCWludCBjb3VudCwgcmVzdWx0OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0cG9ydC0+dHBfcG9ydDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRwb3J0LT50cF9sb2NrLCBmbGFncyk7CisKKwlpZiAodHBvcnQtPnRwX3dyaXRlX3VyYl9pbl91c2UpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCWNvdW50ID0gdGlfYnVmX2dldCh0cG9ydC0+dHBfd3JpdGVfYnVmLAorCQkJCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJCXBvcnQtPmJ1bGtfb3V0X3NpemUpOworCisJaWYgKGNvdW50ID09IDApIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCXRwb3J0LT50cF93cml0ZV91cmJfaW5fdXNlID0gMTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwb3J0LT50cF9sb2NrLCBmbGFncyk7CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgY291bnQsIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPndyaXRlX3VyYiwgcG9ydC0+c2VyaWFsLT5kZXYsCisJCQkgICB1c2Jfc25kYnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJCSAgICBwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAorCQkJICAgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIGNvdW50LAorCQkJICAgdGlfYnVsa19vdXRfY2FsbGJhY2ssIHRwb3J0KTsKKworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIHN1Ym1pdCB3cml0ZSB1cmIgZmFpbGVkLCAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQl0cG9ydC0+dHBfd3JpdGVfdXJiX2luX3VzZSA9IDA7IAorCQkvKiBUT0RPOiByZXNjaGVkdWxlIHRpX3NlbmQgKi8KKwl9IGVsc2UgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKwkJdHBvcnQtPnRwX2ljb3VudC50eCArPSBjb3VudDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKwl9CisKKwkvKiBtb3JlIHJvb20gaW4gdGhlIGJ1ZmZlciBmb3IgbmV3IHdyaXRlcywgd2FrZXVwICovCisJaWYgKHR0eSkKKwkJdHR5X3dha2V1cCh0dHkpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHBvcnQtPnRwX3dyaXRlX3dhaXQpOworfQorCisKK3N0YXRpYyBpbnQgdGlfc2V0X21jcihzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQsIHVuc2lnbmVkIGludCBtY3IpCit7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IHRpX3dyaXRlX2J5dGUodHBvcnQtPnRwX3RkZXYsCisJCXRwb3J0LT50cF91YXJ0X2Jhc2VfYWRkciArIFRJX1VBUlRfT0ZGU0VUX01DUiwKKwkJVElfTUNSX1JUUyB8IFRJX01DUl9EVFIgfCBUSV9NQ1JfTE9PUCwgbWNyKTsKKworCWlmICghc3RhdHVzKQorCQl0cG9ydC0+dHBfc2hhZG93X21jciA9IG1jcjsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKworc3RhdGljIGludCB0aV9nZXRfbHNyKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCkKK3sKKwlpbnQgc2l6ZSxzdGF0dXM7CisJc3RydWN0IHRpX2RldmljZSAqdGRldiA9IHRwb3J0LT50cF90ZGV2OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0cG9ydC0+dHBfcG9ydDsKKwlpbnQgcG9ydF9udW1iZXIgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yOworCXN0cnVjdCB0aV9wb3J0X3N0YXR1cyAqZGF0YTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdGlfcG9ydF9zdGF0dXMpOworCWRhdGEgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXN0YXR1cyA9IHRpX2NvbW1hbmRfaW5fc3luYyh0ZGV2LCBUSV9HRVRfUE9SVF9TVEFUVVMsCisJCShfX3U4KShUSV9VQVJUMV9QT1JUK3BvcnRfbnVtYmVyKSwgMCwgKF9fdTggKilkYXRhLCBzaXplKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZ2V0IHBvcnQgc3RhdHVzIGNvbW1hbmQgZmFpbGVkLCAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQlnb3RvIGZyZWVfZGF0YTsKKwl9CisKKwlkYmcoIiVzIC0gbHNyIDB4JTAyWCIsIF9fRlVOQ1RJT05fXywgZGF0YS0+YkxTUik7CisKKwl0cG9ydC0+dHBfbHNyID0gZGF0YS0+YkxTUjsKKworZnJlZV9kYXRhOgorCWtmcmVlKGRhdGEpOworCXJldHVybiBzdGF0dXM7Cit9CisKKworc3RhdGljIGludCB0aV9nZXRfc2VyaWFsX2luZm8oc3RydWN0IHRpX3BvcnQgKnRwb3J0LAorCXN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqcmV0X2FyZykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHBvcnQtPnRwX3BvcnQ7CisJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgcmV0X3NlcmlhbDsKKworCWlmICghcmV0X2FyZykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwltZW1zZXQoJnJldF9zZXJpYWwsIDAsIHNpemVvZihyZXRfc2VyaWFsKSk7CisKKwlyZXRfc2VyaWFsLnR5cGUgPSBQT1JUXzE2NTUwQTsKKwlyZXRfc2VyaWFsLmxpbmUgPSBwb3J0LT5zZXJpYWwtPm1pbm9yOworCXJldF9zZXJpYWwucG9ydCA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3I7CisJcmV0X3NlcmlhbC5mbGFncyA9IHRwb3J0LT50cF9mbGFnczsKKwlyZXRfc2VyaWFsLnhtaXRfZmlmb19zaXplID0gVElfV1JJVEVfQlVGX1NJWkU7CisJcmV0X3NlcmlhbC5iYXVkX2Jhc2UgPSB0cG9ydC0+dHBfdGRldi0+dGRfaXNfMzQxMCA/IDkyMTYwMCA6IDQ2MDgwMDsKKwlyZXRfc2VyaWFsLmNsb3Npbmdfd2FpdCA9IHRwb3J0LT50cF9jbG9zaW5nX3dhaXQ7CisKKwlpZiAoY29weV90b191c2VyKHJldF9hcmcsICZyZXRfc2VyaWFsLCBzaXplb2YoKnJldF9hcmcpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHRpX3NldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQsCisJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpuZXdfYXJnKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0cG9ydC0+dHBfcG9ydDsKKwlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBuZXdfc2VyaWFsOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZuZXdfc2VyaWFsLCBuZXdfYXJnLCBzaXplb2YobmV3X3NlcmlhbCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXRwb3J0LT50cF9mbGFncyA9IG5ld19zZXJpYWwuZmxhZ3MgJiBUSV9TRVRfU0VSSUFMX0ZMQUdTOworCWlmIChwb3J0LT50dHkpCisJCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPQorCQkJKHRwb3J0LT50cF9mbGFncyAmIEFTWU5DX0xPV19MQVRFTkNZKSA/IDEgOiAwOworCXRwb3J0LT50cF9jbG9zaW5nX3dhaXQgPSBuZXdfc2VyaWFsLmNsb3Npbmdfd2FpdDsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHRpX2hhbmRsZV9uZXdfbXNyKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCwgX191OCBtc3IpCit7CisJc3RydWN0IGFzeW5jX2ljb3VudCAqaWNvdW50OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBtc3IgMHglMDJYIiwgX19GVU5DVElPTl9fLCBtc3IpOworCisJaWYgKG1zciAmIFRJX01TUl9ERUxUQV9NQVNLKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOworCQlpY291bnQgPSAmdHBvcnQtPnRwX2ljb3VudDsKKwkJaWYgKG1zciAmIFRJX01TUl9ERUxUQV9DVFMpCisJCQlpY291bnQtPmN0cysrOworCQlpZiAobXNyICYgVElfTVNSX0RFTFRBX0RTUikKKwkJCWljb3VudC0+ZHNyKys7CisJCWlmIChtc3IgJiBUSV9NU1JfREVMVEFfQ0QpCisJCQlpY291bnQtPmRjZCsrOworCQlpZiAobXNyICYgVElfTVNSX0RFTFRBX1JJKQorCQkJaWNvdW50LT5ybmcrKzsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0cG9ydC0+dHBfbXNyX3dhaXQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOworCX0KKworCXRwb3J0LT50cF9tc3IgPSBtc3IgJiBUSV9NU1JfTUFTSzsKKworCS8qIGhhbmRsZSBDVFMgZmxvdyBjb250cm9sICovCisJdHR5ID0gdHBvcnQtPnRwX3BvcnQtPnR0eTsKKwlpZiAodHR5ICYmIENfQ1JUU0NUUyh0dHkpKSB7CisJCWlmIChtc3IgJiBUSV9NU1JfQ1RTKSB7CisJCQl0dHktPmh3X3N0b3BwZWQgPSAwOworCQkJdHR5X3dha2V1cCh0dHkpOworCQl9IGVsc2UgeworCQkJdHR5LT5od19zdG9wcGVkID0gMTsKKwkJfQorCX0KK30KKworCitzdGF0aWMgdm9pZCB0aV9kcmFpbihzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQsIHVuc2lnbmVkIGxvbmcgdGltZW91dCwgaW50IGZsdXNoKQoreworCXN0cnVjdCB0aV9kZXZpY2UgKnRkZXYgPSB0cG9ydC0+dHBfdGRldjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHBvcnQtPnRwX3BvcnQ7CisJd2FpdF9xdWV1ZV90IHdhaXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRwb3J0LT50cF9sb2NrLCBmbGFncyk7CisKKwkvKiB3YWl0IGZvciBkYXRhIHRvIGRyYWluIGZyb20gdGhlIGJ1ZmZlciAqLworCXRkZXYtPnRkX3VyYl9lcnJvciA9IDA7CisJaW5pdF93YWl0cXVldWVfZW50cnkoJndhaXQsIGN1cnJlbnQpOworCWFkZF93YWl0X3F1ZXVlKCZ0cG9ydC0+dHBfd3JpdGVfd2FpdCwgJndhaXQpOworCWZvciAoOzspIHsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJaWYgKHRpX2J1Zl9kYXRhX2F2YWlsKHRwb3J0LT50cF93cml0ZV9idWYpID09IDAKKwkJfHwgdGltZW91dCA9PSAwIHx8IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpCisJCXx8IHRkZXYtPnRkX3VyYl9lcnJvcgorCQl8fCAhdXNiX2dldF9pbnRmZGF0YShwb3J0LT5zZXJpYWwtPmludGVyZmFjZSkpICAvKiBkaXNjb25uZWN0ICovCisJCQlicmVhazsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKwkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOworCX0KKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZ0cG9ydC0+dHBfd3JpdGVfd2FpdCwgJndhaXQpOworCisJLyogZmx1c2ggYW55IHJlbWFpbmluZyBkYXRhIGluIHRoZSBidWZmZXIgKi8KKwlpZiAoZmx1c2gpCisJCXRpX2J1Zl9jbGVhcih0cG9ydC0+dHBfd3JpdGVfYnVmKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwb3J0LT50cF9sb2NrLCBmbGFncyk7CisKKwkvKiB3YWl0IGZvciBkYXRhIHRvIGRyYWluIGZyb20gdGhlIGRldmljZSAqLworCS8qIHdhaXQgZm9yIGVtcHR5IHR4IHJlZ2lzdGVyLCBwbHVzIDIwIG1zICovCisJdGltZW91dCArPSBqaWZmaWVzOworCXRwb3J0LT50cF9sc3IgJj0gflRJX0xTUl9UWF9FTVBUWTsKKwl3aGlsZSAoKGxvbmcpKGppZmZpZXMgLSB0aW1lb3V0KSA8IDAgJiYgIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpCisJJiYgISh0cG9ydC0+dHBfbHNyJlRJX0xTUl9UWF9FTVBUWSkgJiYgIXRkZXYtPnRkX3VyYl9lcnJvcgorCSYmIHVzYl9nZXRfaW50ZmRhdGEocG9ydC0+c2VyaWFsLT5pbnRlcmZhY2UpKSB7ICAvKiBub3QgZGlzY29ubmVjdGVkICovCisJCWlmICh0aV9nZXRfbHNyKHRwb3J0KSkKKwkJCWJyZWFrOworCQltc2xlZXBfaW50ZXJydXB0aWJsZSgyMCk7CisJfQorfQorCisKK3N0YXRpYyB2b2lkIHRpX3N0b3BfcmVhZChzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOworCisJaWYgKHRwb3J0LT50cF9yZWFkX3VyYl9zdGF0ZSA9PSBUSV9SRUFEX1VSQl9SVU5OSU5HKQorCQl0cG9ydC0+dHBfcmVhZF91cmJfc3RhdGUgPSBUSV9SRUFEX1VSQl9TVE9QUElORzsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwb3J0LT50cF9sb2NrLCBmbGFncyk7Cit9CisKKworc3RhdGljIGludCB0aV9yZXN0YXJ0X3JlYWQoc3RydWN0IHRpX3BvcnQgKnRwb3J0LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgc3RhdHVzID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRwb3J0LT50cF9sb2NrLCBmbGFncyk7CisKKwlpZiAodHBvcnQtPnRwX3JlYWRfdXJiX3N0YXRlID09IFRJX1JFQURfVVJCX1NUT1BQRUQpIHsKKwkJdXJiID0gdHBvcnQtPnRwX3BvcnQtPnJlYWRfdXJiOworCQl1cmItPmNvbXBsZXRlID0gdGlfYnVsa19pbl9jYWxsYmFjazsKKwkJdXJiLT5jb250ZXh0ID0gdHBvcnQ7CisJCXVyYi0+ZGV2ID0gdHBvcnQtPnRwX3BvcnQtPnNlcmlhbC0+ZGV2OworCQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworCX0KKwl0cG9ydC0+dHBfcmVhZF91cmJfc3RhdGUgPSBUSV9SRUFEX1VSQl9SVU5OSU5HOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKworc3RhdGljIGludCB0aV9jb21tYW5kX291dF9zeW5jKHN0cnVjdCB0aV9kZXZpY2UgKnRkZXYsIF9fdTggY29tbWFuZCwKKwlfX3UxNiBtb2R1bGVpZCwgX191MTYgdmFsdWUsIF9fdTggKmRhdGEsIGludCBzaXplKQoreworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSB1c2JfY29udHJvbF9tc2codGRldi0+dGRfc2VyaWFsLT5kZXYsCisJCXVzYl9zbmRjdHJscGlwZSh0ZGV2LT50ZF9zZXJpYWwtPmRldiwgMCksIGNvbW1hbmQsCisJCShVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9PVVQpLAorCQl2YWx1ZSwgbW9kdWxlaWQsIGRhdGEsIHNpemUsIDEwMDApOworCisJaWYgKHN0YXR1cyA9PSBzaXplKQorCQlzdGF0dXMgPSAwOworCisJaWYgKHN0YXR1cyA+IDApCisJCXN0YXR1cyA9IC1FQ09NTTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKworc3RhdGljIGludCB0aV9jb21tYW5kX2luX3N5bmMoc3RydWN0IHRpX2RldmljZSAqdGRldiwgX191OCBjb21tYW5kLAorCV9fdTE2IG1vZHVsZWlkLCBfX3UxNiB2YWx1ZSwgX191OCAqZGF0YSwgaW50IHNpemUpCit7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyh0ZGV2LT50ZF9zZXJpYWwtPmRldiwKKwkJdXNiX3JjdmN0cmxwaXBlKHRkZXYtPnRkX3NlcmlhbC0+ZGV2LCAwKSwgY29tbWFuZCwKKwkJKFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX0lOKSwKKwkJdmFsdWUsIG1vZHVsZWlkLCBkYXRhLCBzaXplLCAxMDAwKTsKKworCWlmIChzdGF0dXMgPT0gc2l6ZSkKKwkJc3RhdHVzID0gMDsKKworCWlmIChzdGF0dXMgPiAwKQorCQlzdGF0dXMgPSAtRUNPTU07CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisKK3N0YXRpYyBpbnQgdGlfd3JpdGVfYnl0ZShzdHJ1Y3QgdGlfZGV2aWNlICp0ZGV2LCB1bnNpZ25lZCBsb25nIGFkZHIsCisJX191OCBtYXNrLCBfX3U4IGJ5dGUpCit7CisJaW50IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwlzdHJ1Y3QgdGlfd3JpdGVfZGF0YV9ieXRlcyAqZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmdGRldi0+dGRfc2VyaWFsLT5kZXYtPmRldjsKKworCWRiZygiJXMgLSBhZGRyIDB4JTA4bFgsIG1hc2sgMHglMDJYLCBieXRlIDB4JTAyWCIsIF9fRlVOQ1RJT05fXywgYWRkciwgbWFzaywgYnl0ZSk7CisKKwlzaXplID0gc2l6ZW9mKHN0cnVjdCB0aV93cml0ZV9kYXRhX2J5dGVzKSArIDI7CisJZGF0YSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKSB7CisJCWRldl9lcnIoZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkYXRhLT5iQWRkclR5cGUgPSBUSV9SV19EQVRBX0FERFJfWERBVEE7CisJZGF0YS0+YkRhdGFUeXBlID0gVElfUldfREFUQV9CWVRFOworCWRhdGEtPmJEYXRhQ291bnRlciA9IDE7CisJZGF0YS0+d0Jhc2VBZGRySGkgPSBjcHVfdG9fYmUxNihhZGRyPj4xNik7CisJZGF0YS0+d0Jhc2VBZGRyTG8gPSBjcHVfdG9fYmUxNihhZGRyKTsKKwlkYXRhLT5iRGF0YVswXSA9IG1hc2s7CisJZGF0YS0+YkRhdGFbMV0gPSBieXRlOworCisJc3RhdHVzID0gdGlfY29tbWFuZF9vdXRfc3luYyh0ZGV2LCBUSV9XUklURV9EQVRBLCBUSV9SQU1fUE9SVCwgMCwKKwkJKF9fdTggKilkYXRhLCBzaXplKTsKKworCWlmIChzdGF0dXMgPCAwKQorCQlkZXZfZXJyKGRldiwgIiVzIC0gZmFpbGVkLCAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCisJa2ZyZWUoZGF0YSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisKK3N0YXRpYyBpbnQgdGlfZG93bmxvYWRfZmlybXdhcmUoc3RydWN0IHRpX2RldmljZSAqdGRldiwKKwl1bnNpZ25lZCBjaGFyICpmaXJtd2FyZSwgdW5zaWduZWQgaW50IGZpcm13YXJlX3NpemUpCit7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IGJ1ZmZlcl9zaXplOworCWludCBwb3M7CisJaW50IGxlbjsKKwlpbnQgZG9uZTsKKwlfX3U4IGNzID0gMDsKKwlfX3U4ICpidWZmZXI7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHRkZXYtPnRkX3NlcmlhbC0+ZGV2OworCXN0cnVjdCB0aV9maXJtd2FyZV9oZWFkZXIgKmhlYWRlcjsKKwl1bnNpZ25lZCBpbnQgcGlwZSA9IHVzYl9zbmRidWxrcGlwZShkZXYsCisJCXRkZXYtPnRkX3NlcmlhbC0+cG9ydFswXS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKTsKKworCisJYnVmZmVyX3NpemUgPSBUSV9GSVJNV0FSRV9CVUZfU0laRSArIHNpemVvZihzdHJ1Y3QgdGlfZmlybXdhcmVfaGVhZGVyKTsKKwlidWZmZXIgPSBrbWFsbG9jKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtY3B5KGJ1ZmZlciwgZmlybXdhcmUsIGZpcm13YXJlX3NpemUpOworCW1lbXNldChidWZmZXIrZmlybXdhcmVfc2l6ZSwgMHhmZiwgYnVmZmVyX3NpemUtZmlybXdhcmVfc2l6ZSk7CisKKwlmb3IocG9zID0gc2l6ZW9mKHN0cnVjdCB0aV9maXJtd2FyZV9oZWFkZXIpOyBwb3MgPCBidWZmZXJfc2l6ZTsgcG9zKyspCisJCWNzID0gKF9fdTgpKGNzICsgYnVmZmVyW3Bvc10pOworCisJaGVhZGVyID0gKHN0cnVjdCB0aV9maXJtd2FyZV9oZWFkZXIgKilidWZmZXI7CisJaGVhZGVyLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYoKF9fdTE2KShidWZmZXJfc2l6ZSAtIHNpemVvZihzdHJ1Y3QgdGlfZmlybXdhcmVfaGVhZGVyKSkpOworCWhlYWRlci0+YkNoZWNrU3VtID0gY3M7CisKKwlkYmcoIiVzIC0gZG93bmxvYWRpbmcgZmlybXdhcmUiLCBfX0ZVTkNUSU9OX18pOworCWZvciAocG9zID0gMDsgcG9zIDwgYnVmZmVyX3NpemU7IHBvcyArPSBkb25lKSB7CisJCWxlbiA9IG1pbihidWZmZXJfc2l6ZSAtIHBvcywgVElfRE9XTkxPQURfTUFYX1BBQ0tFVF9TSVpFKTsKKwkJc3RhdHVzID0gdXNiX2J1bGtfbXNnKGRldiwgcGlwZSwgYnVmZmVyK3BvcywgbGVuLCAmZG9uZSwgMTAwMCk7CisJCWlmIChzdGF0dXMpCisJCQlicmVhazsKKwl9CisKKwlrZnJlZShidWZmZXIpOworCisJaWYgKHN0YXR1cykgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzIC0gZXJyb3IgZG93bmxvYWRpbmcgZmlybXdhcmUsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJZGJnKCIlcyAtIGRvd25sb2FkIHN1Y2Nlc3NmdWwiLCBfX0ZVTkNUSU9OX18pOworCisJcmV0dXJuIDA7Cit9CisKKworLyogQ2lyY3VsYXIgQnVmZmVyIEZ1bmN0aW9ucyAqLworCisvKgorICogdGlfYnVmX2FsbG9jCisgKgorICogQWxsb2NhdGUgYSBjaXJjdWxhciBidWZmZXIgYW5kIGFsbCBhc3NvY2lhdGVkIG1lbW9yeS4KKyAqLworCitzdGF0aWMgc3RydWN0IGNpcmNfYnVmICp0aV9idWZfYWxsb2Modm9pZCkKK3sKKwlzdHJ1Y3QgY2lyY19idWYgKmNiOworCisJY2IgPSAoc3RydWN0IGNpcmNfYnVmICopa21hbGxvYyhzaXplb2Yoc3RydWN0IGNpcmNfYnVmKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNiID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJY2ItPmJ1ZiA9IGttYWxsb2MoVElfV1JJVEVfQlVGX1NJWkUsIEdGUF9LRVJORUwpOworCWlmIChjYi0+YnVmID09IE5VTEwpIHsKKwkJa2ZyZWUoY2IpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwl0aV9idWZfY2xlYXIoY2IpOworCisJcmV0dXJuIGNiOworfQorCisKKy8qCisgKiB0aV9idWZfZnJlZQorICoKKyAqIEZyZWUgdGhlIGJ1ZmZlciBhbmQgYWxsIGFzc29jaWF0ZWQgbWVtb3J5LgorICovCisKK3N0YXRpYyB2b2lkIHRpX2J1Zl9mcmVlKHN0cnVjdCBjaXJjX2J1ZiAqY2IpCit7CisJa2ZyZWUoY2ItPmJ1Zik7CisJa2ZyZWUoY2IpOworfQorCisKKy8qCisgKiB0aV9idWZfY2xlYXIKKyAqCisgKiBDbGVhciBvdXQgYWxsIGRhdGEgaW4gdGhlIGNpcmN1bGFyIGJ1ZmZlci4KKyAqLworCitzdGF0aWMgdm9pZCB0aV9idWZfY2xlYXIoc3RydWN0IGNpcmNfYnVmICpjYikKK3sKKwljYi0+aGVhZCA9IGNiLT50YWlsID0gMDsKK30KKworCisvKgorICogdGlfYnVmX2RhdGFfYXZhaWwKKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBvZiBkYXRhIGF2YWlsYWJsZSBpbiB0aGUgY2lyY3VsYXIKKyAqIGJ1ZmZlci4KKyAqLworCitzdGF0aWMgaW50IHRpX2J1Zl9kYXRhX2F2YWlsKHN0cnVjdCBjaXJjX2J1ZiAqY2IpCit7CisJcmV0dXJuIENJUkNfQ05UKGNiLT5oZWFkLGNiLT50YWlsLFRJX1dSSVRFX0JVRl9TSVpFKTsKK30KKworCisvKgorICogdGlfYnVmX3NwYWNlX2F2YWlsCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2Ygc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBjaXJjdWxhcgorICogYnVmZmVyLgorICovCisKK3N0YXRpYyBpbnQgdGlfYnVmX3NwYWNlX2F2YWlsKHN0cnVjdCBjaXJjX2J1ZiAqY2IpCit7CisJcmV0dXJuIENJUkNfU1BBQ0UoY2ItPmhlYWQsY2ItPnRhaWwsVElfV1JJVEVfQlVGX1NJWkUpOworfQorCisKKy8qCisgKiB0aV9idWZfcHV0CisgKgorICogQ29weSBkYXRhIGRhdGEgZnJvbSBhIHVzZXIgYnVmZmVyIGFuZCBwdXQgaXQgaW50byB0aGUgY2lyY3VsYXIgYnVmZmVyLgorICogUmVzdHJpY3QgdG8gdGhlIGFtb3VudCBvZiBzcGFjZSBhdmFpbGFibGUuCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLgorICovCisKK3N0YXRpYyBpbnQgdGlfYnVmX3B1dChzdHJ1Y3QgY2lyY19idWYgKmNiLCBjb25zdCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlpbnQgYywgcmV0ID0gMDsKKworCXdoaWxlICgxKSB7CisJCWMgPSBDSVJDX1NQQUNFX1RPX0VORChjYi0+aGVhZCwgY2ItPnRhaWwsIFRJX1dSSVRFX0JVRl9TSVpFKTsKKwkJaWYgKGNvdW50IDwgYykKKwkJCWMgPSBjb3VudDsKKwkJaWYgKGMgPD0gMCkKKwkJCWJyZWFrOworCQltZW1jcHkoY2ItPmJ1ZiArIGNiLT5oZWFkLCBidWYsIGMpOworCQljYi0+aGVhZCA9IChjYi0+aGVhZCArIGMpICYgKFRJX1dSSVRFX0JVRl9TSVpFLTEpOworCQlidWYgKz0gYzsKKwkJY291bnQgLT0gYzsKKwkJcmV0ICs9IGM7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworCisvKgorICogdGlfYnVmX2dldAorICoKKyAqIEdldCBkYXRhIGZyb20gdGhlIGNpcmN1bGFyIGJ1ZmZlciBhbmQgY29weSB0byB0aGUgZ2l2ZW4gYnVmZmVyLgorICogUmVzdHJpY3QgdG8gdGhlIGFtb3VudCBvZiBkYXRhIGF2YWlsYWJsZS4KKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuCisgKi8KKworc3RhdGljIGludCB0aV9idWZfZ2V0KHN0cnVjdCBjaXJjX2J1ZiAqY2IsIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCWludCBjLCByZXQgPSAwOworCisJd2hpbGUgKDEpIHsKKwkJYyA9IENJUkNfQ05UX1RPX0VORChjYi0+aGVhZCwgY2ItPnRhaWwsIFRJX1dSSVRFX0JVRl9TSVpFKTsKKwkJaWYgKGNvdW50IDwgYykKKwkJCWMgPSBjb3VudDsKKwkJaWYgKGMgPD0gMCkKKwkJCWJyZWFrOworCQltZW1jcHkoYnVmLCBjYi0+YnVmICsgY2ItPnRhaWwsIGMpOworCQljYi0+dGFpbCA9IChjYi0+dGFpbCArIGMpICYgKFRJX1dSSVRFX0JVRl9TSVpFLTEpOworCQlidWYgKz0gYzsKKwkJY291bnQgLT0gYzsKKwkJcmV0ICs9IGM7CisJfQorCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzFhZWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5oCkBAIC0wLDAgKzEsMjI0IEBACisvKiB2aTogdHM9OCBzdz04CisgKgorICogVEkgMzQxMC81MDUyIFVTQiBTZXJpYWwgRHJpdmVyIEhlYWRlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSBMaW51eCBpb190aSBkcml2ZXIsIHdoaWNoIGlzCisgKiAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIEluc2lkZSBPdXQgTmV0d29ya3MKKyAqICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgR3JlZyBLcm9haC1IYXJ0bWFuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGb3IgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIGNvbnRhY3QgVGV4YXMgSW5zdHJ1bWVudHMKKyAqIHRlY2huaWNhbCBzdXBwb3J0LCBvciBBbCBCb3JjaGVycyA8YWxib3JjaGVyc0BzdGVpbmVycG9pbnQuY29tPiwgb3IKKyAqIFBldGVyIEJlcmdlciA8cGJlcmdlckBicmltc29uLmNvbT4uCisgKi8KKworI2lmbmRlZiBfVElfMzQxMF81MDUyX0hfCisjZGVmaW5lIF9USV8zNDEwXzUwNTJfSF8KKworLyogQ29uZmlndXJhdGlvbiBpZHMgKi8KKyNkZWZpbmUgVElfQk9PVF9DT05GSUcJCQkxCisjZGVmaW5lIFRJX0FDVElWRV9DT05GSUcJCTIKKworLyogVmVuZG9yIGFuZCBwcm9kdWN0IGlkcyAqLworI2RlZmluZSBUSV9WRU5ET1JfSUQJCQkweDA0NTEKKyNkZWZpbmUgVElfMzQxMF9QUk9EVUNUX0lECQkweDM0MTAKKyNkZWZpbmUgVElfNTA1Ml9CT09UX1BST0RVQ1RfSUQJCTB4NTA1MgkvKiBubyBFRVBST00sIG5vIGZpcm13YXJlICovCisjZGVmaW5lIFRJXzUxNTJfQk9PVF9QUk9EVUNUX0lECQkweDUxNTIJLyogbm8gRUVQUk9NLCBubyBmaXJtd2FyZSAqLworI2RlZmluZSBUSV81MDUyX0VFUFJPTV9QUk9EVUNUX0lECTB4NTA1QQkvKiBFRVBST00sIG5vIGZpcm13YXJlICovCisjZGVmaW5lIFRJXzUwNTJfRklSTVdBUkVfUFJPRFVDVF9JRAkweDUwNUYJLyogZmlybXdhcmUgaXMgcnVubmluZyAqLworCisvKiBDb21tYW5kcyAqLworI2RlZmluZSBUSV9HRVRfVkVSU0lPTgkJCTB4MDEKKyNkZWZpbmUgVElfR0VUX1BPUlRfU1RBVFVTCQkweDAyCisjZGVmaW5lIFRJX0dFVF9QT1JUX0RFVl9JTkZPCQkweDAzCisjZGVmaW5lIFRJX0dFVF9DT05GSUcJCQkweDA0CisjZGVmaW5lIFRJX1NFVF9DT05GSUcJCQkweDA1CisjZGVmaW5lIFRJX09QRU5fUE9SVAkJCTB4MDYKKyNkZWZpbmUgVElfQ0xPU0VfUE9SVAkJCTB4MDcKKyNkZWZpbmUgVElfU1RBUlRfUE9SVAkJCTB4MDgKKyNkZWZpbmUgVElfU1RPUF9QT1JUCQkJMHgwOQorI2RlZmluZSBUSV9URVNUX1BPUlQJCQkweDBBCisjZGVmaW5lIFRJX1BVUkdFX1BPUlQJCQkweDBCCisjZGVmaW5lIFRJX1JFU0VUX0VYVF9ERVZJQ0UJCTB4MEMKKyNkZWZpbmUgVElfV1JJVEVfREFUQQkJCTB4ODAKKyNkZWZpbmUgVElfUkVBRF9EQVRBCQkJMHg4MQorI2RlZmluZSBUSV9SRVFfVFlQRV9DTEFTUwkJMHg4MgorCisvKiBNb2R1bGUgaWRlbnRpZmllcnMgKi8KKyNkZWZpbmUgVElfSTJDX1BPUlQJCQkweDAxCisjZGVmaW5lIFRJX0lFRUUxMjg0X1BPUlQJCTB4MDIKKyNkZWZpbmUgVElfVUFSVDFfUE9SVAkJCTB4MDMKKyNkZWZpbmUgVElfVUFSVDJfUE9SVAkJCTB4MDQKKyNkZWZpbmUgVElfUkFNX1BPUlQJCQkweDA1CisKKy8qIE1vZGVtIHN0YXR1cyAqLworI2RlZmluZSBUSV9NU1JfREVMVEFfQ1RTCQkweDAxCisjZGVmaW5lIFRJX01TUl9ERUxUQV9EU1IJCTB4MDIKKyNkZWZpbmUgVElfTVNSX0RFTFRBX1JJCQkJMHgwNAorI2RlZmluZSBUSV9NU1JfREVMVEFfQ0QJCQkweDA4CisjZGVmaW5lIFRJX01TUl9DVFMJCQkweDEwCisjZGVmaW5lIFRJX01TUl9EU1IJCQkweDIwCisjZGVmaW5lIFRJX01TUl9SSQkJCTB4NDAKKyNkZWZpbmUgVElfTVNSX0NECQkJMHg4MAorI2RlZmluZSBUSV9NU1JfREVMVEFfTUFTSwkJMHgwRgorI2RlZmluZSBUSV9NU1JfTUFTSwkJCTB4RjAKKworLyogTGluZSBzdGF0dXMgKi8KKyNkZWZpbmUgVElfTFNSX09WRVJSVU5fRVJST1IJCTB4MDEKKyNkZWZpbmUgVElfTFNSX1BBUklUWV9FUlJPUgkJMHgwMgorI2RlZmluZSBUSV9MU1JfRlJBTUlOR19FUlJPUgkJMHgwNAorI2RlZmluZSBUSV9MU1JfQlJFQUsJCQkweDA4CisjZGVmaW5lIFRJX0xTUl9FUlJPUgkJCTB4MEYKKyNkZWZpbmUgVElfTFNSX1JYX0ZVTEwJCQkweDEwCisjZGVmaW5lIFRJX0xTUl9UWF9FTVBUWQkJCTB4MjAKKworLyogTGluZSBjb250cm9sICovCisjZGVmaW5lIFRJX0xDUl9CUkVBSwkJCTB4NDAKKworLyogTW9kZW0gY29udHJvbCAqLworI2RlZmluZSBUSV9NQ1JfTE9PUAkJCTB4MDQKKyNkZWZpbmUgVElfTUNSX0RUUgkJCTB4MTAKKyNkZWZpbmUgVElfTUNSX1JUUwkJCTB4MjAKKworLyogTWFzayBzZXR0aW5ncyAqLworI2RlZmluZSBUSV9VQVJUX0VOQUJMRV9SVFNfSU4JCTB4MDAwMQorI2RlZmluZSBUSV9VQVJUX0RJU0FCTEVfUlRTCQkweDAwMDIKKyNkZWZpbmUgVElfVUFSVF9FTkFCTEVfUEFSSVRZX0NIRUNLSU5HCTB4MDAwOAorI2RlZmluZSBUSV9VQVJUX0VOQUJMRV9EU1JfT1VUCQkweDAwMTAKKyNkZWZpbmUgVElfVUFSVF9FTkFCTEVfQ1RTX09VVAkJMHgwMDIwCisjZGVmaW5lIFRJX1VBUlRfRU5BQkxFX1hfT1VUCQkweDAwNDAKKyNkZWZpbmUgVElfVUFSVF9FTkFCTEVfWEFfT1VUCQkweDAwODAKKyNkZWZpbmUgVElfVUFSVF9FTkFCTEVfWF9JTgkJMHgwMTAwCisjZGVmaW5lIFRJX1VBUlRfRU5BQkxFX0RUUl9JTgkJMHgwODAwCisjZGVmaW5lIFRJX1VBUlRfRElTQUJMRV9EVFIJCTB4MTAwMAorI2RlZmluZSBUSV9VQVJUX0VOQUJMRV9NU19JTlRTCQkweDIwMDAKKyNkZWZpbmUgVElfVUFSVF9FTkFCTEVfQVVUT19TVEFSVF9ETUEJMHg0MDAwCisKKy8qIFBhcml0eSAqLworI2RlZmluZSBUSV9VQVJUX05PX1BBUklUWQkJMHgwMAorI2RlZmluZSBUSV9VQVJUX09ERF9QQVJJVFkJCTB4MDEKKyNkZWZpbmUgVElfVUFSVF9FVkVOX1BBUklUWQkJMHgwMgorI2RlZmluZSBUSV9VQVJUX01BUktfUEFSSVRZCQkweDAzCisjZGVmaW5lIFRJX1VBUlRfU1BBQ0VfUEFSSVRZCQkweDA0CisKKy8qIFN0b3AgYml0cyAqLworI2RlZmluZSBUSV9VQVJUXzFfU1RPUF9CSVRTCQkweDAwCisjZGVmaW5lIFRJX1VBUlRfMV81X1NUT1BfQklUUwkJMHgwMQorI2RlZmluZSBUSV9VQVJUXzJfU1RPUF9CSVRTCQkweDAyCisKKy8qIEJpdHMgcGVyIGNoYXJhY3RlciAqLworI2RlZmluZSBUSV9VQVJUXzVfREFUQV9CSVRTCQkweDAwCisjZGVmaW5lIFRJX1VBUlRfNl9EQVRBX0JJVFMJCTB4MDEKKyNkZWZpbmUgVElfVUFSVF83X0RBVEFfQklUUwkJMHgwMgorI2RlZmluZSBUSV9VQVJUXzhfREFUQV9CSVRTCQkweDAzCisKKy8qIDIzMi80ODUgbW9kZXMgKi8KKyNkZWZpbmUgVElfVUFSVF8yMzIJCQkweDAwCisjZGVmaW5lIFRJX1VBUlRfNDg1X1JFQ0VJVkVSX0RJU0FCTEVECTB4MDEKKyNkZWZpbmUgVElfVUFSVF80ODVfUkVDRUlWRVJfRU5BQkxFRAkweDAyCisKKy8qIFBpcGUgdHJhbnNmZXIgbW9kZSBhbmQgdGltZW91dCAqLworI2RlZmluZSBUSV9QSVBFX01PREVfQ09OVElOT1VTCQkweDAxCisjZGVmaW5lIFRJX1BJUEVfTU9ERV9NQVNLCQkweDAzCisjZGVmaW5lIFRJX1BJUEVfVElNRU9VVF9NQVNLCQkweDdDCisjZGVmaW5lIFRJX1BJUEVfVElNRU9VVF9FTkFCTEUJCTB4ODAKKworLyogQ29uZmlnIHN0cnVjdCAqLworc3RydWN0IHRpX3VhcnRfY29uZmlnIHsKKwlfX3UxNgl3QmF1ZFJhdGU7CisJX191MTYJd0ZsYWdzOworCV9fdTgJYkRhdGFCaXRzOworCV9fdTgJYlBhcml0eTsKKwlfX3U4CWJTdG9wQml0czsKKwljaGFyCWNYb247CisJY2hhcgljWG9mZjsKKwlfX3U4CWJVYXJ0TW9kZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIEdldCBwb3J0IHN0YXR1cyAqLworc3RydWN0IHRpX3BvcnRfc3RhdHVzIHsKKwlfX3U4CWJDbWRDb2RlOworCV9fdTgJYk1vZHVsZUlkOworCV9fdTgJYkVycm9yQ29kZTsKKwlfX3U4CWJNU1I7CisJX191OAliTFNSOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogUHVyZ2UgbW9kZXMgKi8KKyNkZWZpbmUgVElfUFVSR0VfT1VUUFVUCQkJMHgwMAorI2RlZmluZSBUSV9QVVJHRV9JTlBVVAkJCTB4ODAKKworLyogUmVhZC9Xcml0ZSBkYXRhICovCisjZGVmaW5lIFRJX1JXX0RBVEFfQUREUl9TRlIJCTB4MTAKKyNkZWZpbmUgVElfUldfREFUQV9BRERSX0lEQVRBCQkweDIwCisjZGVmaW5lIFRJX1JXX0RBVEFfQUREUl9YREFUQQkJMHgzMAorI2RlZmluZSBUSV9SV19EQVRBX0FERFJfQ09ERQkJMHg0MAorI2RlZmluZSBUSV9SV19EQVRBX0FERFJfR1BJTwkJMHg1MAorI2RlZmluZSBUSV9SV19EQVRBX0FERFJfSTJDCQkweDYwCisjZGVmaW5lIFRJX1JXX0RBVEFfQUREUl9GTEFTSAkJMHg3MAorI2RlZmluZSBUSV9SV19EQVRBX0FERFJfRFNQCQkweDgwCisKKyNkZWZpbmUgVElfUldfREFUQV9VTlNQRUNJRklFRAkJMHgwMAorI2RlZmluZSBUSV9SV19EQVRBX0JZVEUJCQkweDAxCisjZGVmaW5lIFRJX1JXX0RBVEFfV09SRAkJCTB4MDIKKyNkZWZpbmUgVElfUldfREFUQV9ET1VCTEVfV09SRAkJMHgwNAorCitzdHJ1Y3QgdGlfd3JpdGVfZGF0YV9ieXRlcyB7CisJX191OAliQWRkclR5cGU7CisJX191OAliRGF0YVR5cGU7CisJX191OAliRGF0YUNvdW50ZXI7CisJX19iZTE2CXdCYXNlQWRkckhpOworCV9fYmUxNgl3QmFzZUFkZHJMbzsKKwlfX3U4CWJEYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHRpX3JlYWRfZGF0YV9yZXF1ZXN0IHsKKwlfX3U4CWJBZGRyVHlwZTsKKwlfX3U4CWJEYXRhVHlwZTsKKwlfX3U4CWJEYXRhQ291bnRlcjsKKwlfX2JlMTYJd0Jhc2VBZGRySGk7CisJX19iZTE2CXdCYXNlQWRkckxvOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHRpX3JlYWRfZGF0YV9ieXRlcyB7CisJX191OAliQ21kQ29kZTsKKwlfX3U4CWJNb2R1bGVJZDsKKwlfX3U4CWJFcnJvckNvZGU7CisJX191OAliRGF0YVswXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIEludGVycnVwdCBzdHJ1Y3QgKi8KK3N0cnVjdCB0aV9pbnRlcnJ1cHQgeworCV9fdTgJYklDb2RlOworCV9fdTgJYklJbmZvOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogSW50ZXJydXB0IGNvZGVzICovCisjZGVmaW5lIFRJX0dFVF9QT1JUX0ZST01fQ09ERShjKQkoKChjKSA+PiA0KSAtIDMpCisjZGVmaW5lIFRJX0dFVF9GVU5DX0ZST01fQ09ERShjKQkoKGMpICYgMHgwZikKKyNkZWZpbmUgVElfQ09ERV9IQVJEV0FSRV9FUlJPUgkJMHhGRgorI2RlZmluZSBUSV9DT0RFX0RBVEFfRVJST1IJCTB4MDMKKyNkZWZpbmUgVElfQ09ERV9NT0RFTV9TVEFUVVMJCTB4MDQKKworLyogRG93bmxvYWQgZmlybXdhcmUgbWF4IHBhY2tldCBzaXplICovCisjZGVmaW5lIFRJX0RPV05MT0FEX01BWF9QQUNLRVRfU0laRQk2NAorCisvKiBGaXJtd2FyZSBpbWFnZSBoZWFkZXIgKi8KK3N0cnVjdCB0aV9maXJtd2FyZV9oZWFkZXIgeworCV9fbGUxNgl3TGVuZ3RoOworCV9fdTgJYkNoZWNrU3VtOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogVUFSVCBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgVElfVUFSVDFfQkFTRV9BRERSCQkweEZGQTAJLyogVUFSVCAxIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBUSV9VQVJUMl9CQVNFX0FERFIJCTB4RkZCMAkvKiBVQVJUIDIgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFRJX1VBUlRfT0ZGU0VUX0xDUgkJMHgwMDAyCS8qIFVBUlQgTUNSIHJlZ2lzdGVyIG9mZnNldCAqLworI2RlZmluZSBUSV9VQVJUX09GRlNFVF9NQ1IJCTB4MDAwNAkvKiBVQVJUIE1DUiByZWdpc3RlciBvZmZzZXQgKi8KKworI2VuZGlmIC8qIF9USV8zNDEwXzUwNTJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MzZmNjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCkBAIC0wLDAgKzEsMTQzNSBAQAorLyoKKyAqIFVTQiBTZXJpYWwgQ29udmVydGVyIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSAtIDIwMDQgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBCZXJnZXIgKHBiZXJnZXJAYnJpbXNvbi5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgQWwgQm9yY2hlcnMgKGJvcmNoZXJzQHN0ZWluZXJwb2ludC5jb20pCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICoJMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIGRyaXZlciB3YXMgb3JpZ2luYWxseSBiYXNlZCBvbiB0aGUgQUNNIGRyaXZlciBieSBBcm1pbiBGdWVyc3QgKHdoaWNoIHdhcyAKKyAqIGJhc2VkIG9uIGEgZHJpdmVyIGJ5IEJyYWQgS2VyeWFuKQorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICoKKyAqICgxMi8xMC8yMDAyKSBna2gKKyAqCVNwbGl0IHRoZSBwb3J0cyBvZmYgaW50byB0aGVpciBvd24gc3RydWN0IGRldmljZSwgYW5kIGFkZGVkIGEKKyAqCXVzYi1zZXJpYWwgYnVzIGRyaXZlci4KKyAqCisgKiAoMTEvMTkvMjAwMikgZ2toCisgKglyZW1vdmVkIGEgZmV3ICNpZmRlZnMgZm9yIHRoZSBnZW5lcmljIGNvZGUgYW5kIGNsZWFuZWQgdXAgdGhlIGZhaWx1cmUKKyAqCWxvZ2ljIGluIGluaXRpYWxpemF0aW9uLgorICoKKyAqICgxMC8wMi8yMDAyKSBna2gKKyAqCW1vdmVkIHRoZSBjb25zb2xlIGNvZGUgdG8gY29uc29sZS5jIGFuZCBvdXQgb2YgdGhpcyBmaWxlLgorICoKKyAqICgwNi8wNS8yMDAyKSBna2gKKyAqCW1vdmVkIGxvY2F0aW9uIG9mIHN0YXJ0dXAoKSBjYWxsIGluIHNlcmlhbF9wcm9iZSgpIHVudGlsIGFmdGVyIGFsbAorICoJb2YgdGhlIHBvcnQgaW5mb3JtYXRpb24gYW5kIGVuZHBvaW50cyBhcmUgaW5pdGlhbGl6ZWQuICBUaGlzIG1ha2VzCisgKgl0aGluZ3MgZWFzaWVyIGZvciBzb21lIGRyaXZlcnMuCisgKgorICogKDA0LzEwLzIwMDIpIGdraAorICoJYWRkZWQgc2VyaWFsX3JlYWRfcHJvYyBmdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEKKyAqCS9wcm9jL3R0eS9kcml2ZXIvdXNiLXNlcmlhbCBmaWxlLgorICoKKyAqICgwMy8yNy8yMDAyKSBna2gKKyAqCUdvdCBVU0Igc2VyaWFsIGNvbnNvbGUgY29kZSB3b3JraW5nIHByb3Blcmx5IGFuZCBtZXJnZWQgaW50byB0aGUgbWFpbgorICoJdmVyc2lvbiBvZiB0aGUgdHJlZS4gIFRoYW5rcyB0byBSYW5keSBEdW5sYXAgZm9yIHRoZSBpbml0aWFsIHZlcnNpb24KKyAqCW9mIHRoaXMgY29kZSwgYW5kIGZvciBwdXNoaW5nIG1lIHRvIGZpbmlzaCBpdCB1cC4KKyAqCVRoZSBVU0Igc2VyaWFsIGNvbnNvbGUgd29ya3Mgd2l0aCBhbnkgdXNiIHNlcmlhbCBkcml2ZXIgZGV2aWNlLgorICoKKyAqICgwMy8yMS8yMDAyKSBna2gKKyAqCU1vdmVkIGFsbCBtYW5pcHVsYXRpb24gb2YgcG9ydC0+b3Blbl9jb3VudCBpbnRvIHRoZSBjb3JlLiAgTm93IHRoZQorICoJaW5kaXZpZHVhbCBkcml2ZXIncyBvcGVuIGFuZCBjbG9zZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBvbmx5IHdoZW4gdGhlCisgKglmaXJzdCBvcGVuKCkgYW5kIGxhc3QgY2xvc2UoKSBpcyBjYWxsZWQuICBNYWtpbmcgdGhlIGRyaXZlcnMgYSBiaXQKKyAqCXNtYWxsZXIgYW5kIHNpbXBsZXIuCisgKglGaXhlZCBhIGJ1ZyBpZiBhIGRyaXZlciBkaWRuJ3QgaGF2ZSB0aGUgb3duZXIgZmllbGQgc2V0LgorICoKKyAqICgwMi8yNi8yMDAyKSBna2gKKyAqCU1vdmVkIGFsbCBsb2NraW5nIGludG8gdGhlIG1haW4gc2VyaWFsXyogZnVuY3Rpb25zLCBpbnN0ZWFkIG9mIGhhdmluZyAKKyAqCXRoZSBpbmRpdmlkdWFsIGRyaXZlcnMgaGF2ZSB0byBncmFiIHRoZSBwb3J0IHNlbWFwaG9yZS4gIFRoaXMgc2hvdWxkCisgKglyZWR1Y2UgcmFjZXMuCisgKglSZXdvcmtlZCB0aGUgTU9EX0lOQyBsb2dpYyBhIGJpdCB0byBhbHdheXMgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQsIGV2ZW4KKyAqCWlmIHRoZSBnZW5lcmljIGRyaXZlciBpcyBiZWluZyB1c2VkLgorICoKKyAqICgxMC8xMC8yMDAxKSBna2gKKyAqCXVzYl9zZXJpYWxfZGlzY29ubmVjdCgpIG5vdyBzZXRzIHRoZSBzZXJpYWwtPmRldiBwb2ludGVyIGlzIHRvIE5VTEwgdG8KKyAqCWhlbHAgcHJldmVudCBjaGlsZCBkcml2ZXJzIGZyb20gYWNjZXNzaW5nIHRoZSBkZXZpY2Ugc2luY2UgaXQgaXMgbm93CisgKglnb25lLgorICoKKyAqICgwOS8xMy8yMDAxKSBna2gKKyAqCU1vdmVkIGdlbmVyaWMgZHJpdmVyIGluaXRpYWxpemUgYWZ0ZXIgd2UgaGF2ZSByZWdpc3RlcmVkIHdpdGggdGhlIFVTQgorICoJY29yZS4gIFRoYW5rcyB0byBSYW5keSBEdW5sYXAgZm9yIHBvaW50aW5nIHRoaXMgcHJvYmxlbSBvdXQuCisgKgorICogKDA3LzAzLzIwMDEpIGdraAorICoJRml4ZWQgbW9kdWxlIHBhcmFtYXRlciBzaXplLiAgVGhhbmtzIHRvIEpvaG4gQnJvY2ttZXllciBmb3IgdGhlIHBvaW50ZXIuCisgKglGaXhlZCB2ZW5kb3IgYW5kIHByb2R1Y3QgZ2V0dGluZyBkZWZpbmVkIHRocm91Z2ggdGhlIE1PRFVMRV9QQVJNIG1hY3JvCisgKglpZiB0aGUgR2VuZXJpYyBkcml2ZXIgd2Fzbid0IGNvbXBpbGVkIGluLgorICoJRml4ZWQgcHJvYmxlbSB3aXRoIGdlbmVyaWNfc2h1dGRvd24oKSBub3QgYmVpbmcgY2FsbGVkIGZvciBkcml2ZXJzIHRoYXQKKyAqCWRvbid0IGhhdmUgYSBzaHV0ZG93bigpIGZ1bmN0aW9uLgorICoKKyAqICgwNi8wNi8yMDAxKSBna2gKKyAqCWFkZGVkIGV2aWwgaGFjayB0aGF0IGlzIG5lZWRlZCBmb3IgdGhlIHByb2xpZmljIHBsMjMwMyBkZXZpY2UgZHVlIHRvIHRoZQorICoJY3Jhenkgd2F5IGl0cyBlbmRwb2ludHMgYXJlIHNldCB1cC4KKyAqCisgKiAoMDUvMzAvMjAwMSkgZ2toCisgKglzd2l0Y2hlZCBmcm9tIHVzaW5nIHNwaW5sb2NrIHRvIGEgc2VtYXBob3JlLCB3aGljaCBmaXhlcyBsb3RzIG9mIHByb2JsZW1zLgorICoKKyAqICgwNC8wOC8yMDAxKSBnYgorICoJSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZC4KKyAqCisgKiAyMDAxXzAyXzA1IGdraAorICoJRml4ZWQgYnVmZmVyIG92ZXJmbG93cyBidWcgd2l0aCB0aGUgZ2VuZXJpYyBzZXJpYWwgZHJpdmVyLiAgVGhhbmtzIHRvCisgKglUb2RkIFNxdWlyZXMgPHNxdWlyZXN0QGN0MC5jb20+IGZvciBmaXhpbmcgdGhpcy4KKyAqCisgKiAoMDEvMTAvMjAwMSkgZ2toCisgKglGaXhlZCBidWcgd2hlcmUgdGhlIGdlbmVyaWMgc2VyaWFsIGFkYXB0b3IgZ3JhYmJlZCBfYW55XyBkZXZpY2UgdGhhdCB3YXMKKyAqCW9mZmVyZWQgdG8gaXQuCisgKgorICogKDEyLzEyLzIwMDApIGdraAorICoJUmVtb3ZlZCBNT0RfSU5DIGFuZCBNT0RfREVDIGZyb20gcG9sbCBhbmQgZGlzY29ubmVjdCBmdW5jdGlvbnMsIGFuZAorICoJbW92ZWQgdGhlbSB0byB0aGUgc2VyaWFsX29wZW4gYW5kIHNlcmlhbF9jbG9zZSBmdW5jdGlvbnMuCisgKglBbHNvIGZpeGVkIGJ1ZyB3aXRoIHRoZXJlIG5vdCBiZWluZyBhIE1PRF9ERUMgZm9yIHRoZSBnZW5lcmljIGRyaXZlcgorICoJKHRoYW5rcyB0byBHYXJ5IEJydWJha2VyIGZvciBmaW5kaW5nIHRoaXMuKQorICoKKyAqICgxMS8yOS8yMDAwKSBna2gKKyAqCVNtYWxsIE5VTEwgcG9pbnRlciBpbml0aWFsaXphdGlvbiBjbGVhbnVwIHdoaWNoIHNhdmVzIGEgYml0IG9mIGRpc2sgaW1hZ2UKKyAqCisgKiAoMTEvMDEvMjAwMCkgQWRhbSBKLiBSaWNodGVyCisgKglpbnN0ZWFkIG9mIHVzaW5nIGlkVmVuZG9yL2lkUHJvZHVjdCBwYWlycywgdXNiIHNlcmlhbCBkcml2ZXJzCisgKglub3cgaWRlbnRpZnkgdGhlaXIgaGFyZHdhcmUgaW50ZXJlc3Qgd2l0aCB1c2JfZGV2aWNlX2lkIHRhYmxlcywKKyAqCXdoaWNoIHRoZXkgdXN1YWxseSBoYXZlIGFueWhvdyBmb3IgdXNlIHdpdGggTU9EVUxFX0RFVklDRV9UQUJMRS4KKyAqCisgKiAoMTAvMDUvMjAwMCkgZ2toCisgKglGaXhlZCBidWcgd2l0aCB1cmItPmRldiBub3QgYmVpbmcgc2V0IHByb3Blcmx5LCBub3cgdGhhdCB0aGUgdXNiCisgKgljb3JlIG5lZWRzIGl0LgorICogCisgKiAoMDkvMTEvMjAwMCkgZ2toCisgKglSZW1vdmVkIERFQlVHICNpZmRlZnMgd2l0aCBjYWxsIHRvIHVzYl9zZXJpYWxfZGVidWdfZGF0YQorICoKKyAqICgwOC8yOC8yMDAwKSBna2gKKyAqCUFkZGVkIHBvcnRfbG9jayB0byBwb3J0IHN0cnVjdHVyZS4KKyAqCUFkZGVkIGxvY2tzIGZvciBTTVAgc2FmZW5lc3MgdG8gZ2VuZXJpYyBkcml2ZXIKKyAqCUZpeGVkIHRoZSBhYmlsaXR5IHRvIG9wZW4gYSBnZW5lcmljIGRldmljZSdzIHBvcnQgbW9yZSB0aGFuIG9uY2UuCisgKgorICogKDA3LzIzLzIwMDApIGdraAorICoJQWRkZWQgYnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzIHRvIHBvcnQgc3RydWN0dXJlLgorICoKKyAqICgwNy8xOS8yMDAwKSBna2gsIHBiZXJnZXIsIGFuZCBib3JjaGVycworICoJTW9kaWZpY2F0aW9ucyB0byBhbGxvdyB1c2Itc2VyaWFsIGRyaXZlcnMgdG8gYmUgbW9kdWxlcy4KKyAqCisgKiAoMDcvMDMvMjAwMCkgZ2toCisgKglBZGRlZCBtb3JlIGRlYnVnZ2luZyB0byBzZXJpYWxfaW9jdGwgY2FsbAorICogCisgKiAoMDYvMjUvMjAwMCkgZ2toCisgKglDaGFuZ2VkIGdlbmVyaWNfd3JpdGVfYnVsa19jYWxsYmFjayB0byBub3QgY2FsbCB3YWtlX3VwX2ludGVycnVwdGlibGUKKyAqCWRpcmVjdGx5LCBidXQgdG8gaGF2ZSBwb3J0X3NvZnRpbnQgZG8gaXQgYXQgYSBzYWZlciB0aW1lLgorICoKKyAqICgwNi8yMy8yMDAwKSBna2gKKyAqCUNsZWFuZWQgdXAgZGVidWdnaW5nIHN0YXRlbWVudHMgaW4gYSBxdWVzdCB0byBmaW5kIFVIQ0kgdGltZW91dCBidWcuCisgKgorICogKDA1LzIyLzIwMDApIGdraAorICoJQ2hhbmdlZCB0aGUgbWFrZWZpbGUsIGVuYWJsaW5nIHRoZSBiaWcgQ09ORklHX1VTQl9TRVJJQUxfU09NVEhJTkcgdG8gYmUgCisgKglyZW1vdmVkIGZyb20gdGhlIGluZGl2aWR1YWwgZGV2aWNlIHNvdXJjZSBmaWxlcy4KKyAqCisgKiAoMDUvMDMvMjAwMCkgZ2toCisgKglBZGRlZCB0aGUgRGlnaSBBY2NlbGVwb3J0IGRyaXZlciBmcm9tIEFsIEJvcmNoZXJzIGFuZCBQZXRlciBCZXJnZXIuCisgKiAKKyAqICgwNS8wMi8yMDAwKSBna2gKKyAqCUNoYW5nZWQgZGV2ZnMgYW5kIHR0eSByZWdpc3RlciBjb2RlIHRvIHdvcmsgcHJvcGVybHkgbm93LiBUaGlzIHdhcyBiYXNlZCBvbgorICoJdGhlIEFDTSBkcml2ZXIgY2hhbmdlcyBieSBWb2p0ZWNoIFBhdmxpay4KKyAqCisgKiAoMDQvMjcvMjAwMCkgUnlhbiBWYW5kZXJCaWpsCisgKiAJUHV0IGNhbGxzIHRvICpfcGFyYW5vaWFfY2hlY2tzIGludG8gb25lIGZ1bmN0aW9uLgorICogCisgKiAoMDQvMjMvMjAwMCkgZ2toCisgKglGaXhlZCBidWcgdGhhdCBSYW5keSBEdW5sYXAgZm91bmQgZm9yIEdlbmVyaWMgZGV2aWNlcyB3aXRoIG5vIGJ1bGsgb3V0IHBvcnRzLgorICoJTW92ZWQgd2hlbiB0aGUgc3RhcnR1cCBjb2RlIHByaW50ZWQgb3V0IHRoZSBkZXZpY2VzIHRoYXQgYXJlIHN1cHBvcnRlZC4KKyAqCisgKiAoMDQvMTkvMjAwMCkgZ2toCisgKglBZGRlZCBkcml2ZXIgZm9yIFp5WEVMIG9tbmkubmV0IGxjZCBwbHVzIElTRE4gVEEKKyAqCU1hZGUgc3RhcnR1cCBpbmZvIG1lc3NhZ2Ugc3BlY2lmeSB3aGljaCBkcml2ZXJzIHdlcmUgY29tcGlsZWQgaW4uCisgKgorICogKDA0LzAzLzIwMDApIGdraAorICoJQ2hhbmdlZCB0aGUgcHJvYmUgcHJvY2VzcyB0byByZW1vdmUgdGhlIG1vZHVsZSB1bmxvYWQgcmFjZXMuCisgKglDaGFuZ2VkIHdoZXJlIHRoZSB0dHkgbGF5ZXIgZ2V0cyBpbml0aWFsaXplZCB0byBoYXZlIGRldmZzIHdvcmsgbmljZXIuCisgKglBZGRlZCBpbml0aWFsIGRldmZzIHN1cHBvcnQuCisgKgorICogKDAzLzI2LzIwMDApIGdraAorICoJU3BsaXQgZHJpdmVyIHVwIGludG8gZGV2aWNlIHNwZWNpZmljIHBpZWNlcy4KKyAqIAorICogKDAzLzE5LzIwMDApIGdraAorICoJRml4ZWQgb29wcyB0aGF0IGNvdWxkIGhhcHBlbiB3aGVuIGRldmljZSB3YXMgcmVtb3ZlZCB3aGlsZSBhIHByb2dyYW0KKyAqCXdhcyB0YWxraW5nIHRvIHRoZSBkZXZpY2UuCisgKglSZW1vdmVkIHRoZSBzdGF0aWMgdXJicyBhbmQgbm93IGFsbCB1cmJzIGFyZSBjcmVhdGVkIGFuZCBkZXN0cm95ZWQKKyAqCWR5bmFtaWNhbGx5LgorICoJUmV3b3JrZWQgdGhlIGludGVybmFsIGludGVyZmFjZS4gTm93IGV2ZXJ5dGhpbmcgaXMgYmFzZWQgb24gdGhlIAorICoJdXNiX3NlcmlhbF9wb3J0IHN0cnVjdHVyZSBpbnN0ZWFkIG9mIHRoZSBsYXJnZXIgdXNiX3NlcmlhbCBzdHJ1Y3R1cmUuCisgKglUaGlzIGZpeGVzIHRoZSBidWcgdGhhdCBhIG11bHRpcG9ydCBkZXZpY2UgY291bGQgbm90IGhhdmUgbW9yZSB0aGFuCisgKglvbmUgcG9ydCBvcGVuIGF0IG9uZSB0aW1lLgorICoKKyAqICgwMy8xNy8yMDAwKSBna2gKKyAqCUFkZGVkIGNvbmZpZyBvcHRpb24gZm9yIGRlYnVnZ2luZyBtZXNzYWdlcy4KKyAqCUFkZGVkIHBhdGNoIGZvciBrZXlzcGFuIHBkYSBmcm9tIEJyaWFuIFdhcm5lci4KKyAqCisgKiAoMDMvMDYvMjAwMCkgZ2toCisgKglBZGRlZCB0aGUga2V5c3BhbiBwZGEgY29kZSBmcm9tIEJyaWFuIFdhcm5lciA8d2FybmVyQGxvdGhhci5jb20+CisgKglNb3ZlZCBhIGJ1bmNoIG9mIHRoZSBwb3J0IHNwZWNpZmljIHN0dWZmIGludG8gaXRzIG93biBzdHJ1Y3R1cmUuIFRoaXMKKyAqCWlzIGluIGFudGljaXBhdGlvbiBvZiB0aGUgdHJ1ZSBtdWx0aXBvcnQgZGV2aWNlcyAodGhlcmUncyBhIGJ1ZyBpZiB5b3UKKyAqCXRyeSB0byBhY2Nlc3MgbW9yZSB0aGFuIG9uZSBwb3J0IG9mIGFueSBtdWx0aXBvcnQgZGV2aWNlIHJpZ2h0IG5vdykKKyAqCisgKiAoMDIvMjEvMjAwMCkgZ2toCisgKglNYWRlIGl0IHNvIHRoYXQgYW55IHNlcmlhbCBkZXZpY2VzIG9ubHkgaGF2ZSB0byBzcGVjaWZ5IHdoaWNoIGZ1bmN0aW9ucworICoJdGhleSB3YW50IHRvIG92ZXJsb2FkIGZyb20gdGhlIGdlbmVyaWMgZnVuY3Rpb24gY2FsbHMgKGdyZWF0LCAKKyAqCWluaGVyaXRhbmNlIGluIEMsIGluIGEgZHJpdmVyLCBqdXN0IHdoYXQgSSB3YW50ZWQuLi4pCisgKglBZGRlZCBzdXBwb3J0IGZvciBzZXRfdGVybWlvcyBhbmQgaW9jdGwgZnVuY3Rpb24gY2FsbHMuIE5vIGRyaXZlcnMgdGFrZQorICoJYWR2YW50YWdlIG9mIHRoaXMgeWV0LgorICoJUmVtb3ZlZCB0aGUgI2lmZGVmIE1PRFVMRSwgbm93IHRoZXJlIGlzIG5vIG1vZHVsZSBzcGVjaWZpYyBjb2RlLgorICoJQ2xlYW5lZCB1cCBhIGZldyBjb21tZW50cyBpbiB1c2Itc2VyaWFsLmggdGhhdCB3ZXJlIHdyb25nICh0aGFua3MgYWdhaW4KKyAqCXRvIE1pbGVzIExvdHQpLgorICoJU21hbGwgZml4IHRvIGdldF9mcmVlX3NlcmlhbC4KKyAqCisgKiAoMDIvMTQvMjAwMCkgZ2toCisgKglSZW1vdmVkIHRoZSBCZWxraW4gYW5kIFBlcmFjb20gZnVuY3Rpb25hbGl0eSBmcm9tIHRoZSBkcml2ZXIgZHVlIHRvCisgKgl0aGUgbGFjayBvZiBzdXBwb3J0IGZyb20gdGhlIHZlbmRvciwgYW5kIG1lIG5vdCB3YW50aW5nIHBlb3BsZSB0byAKKyAqCWFjY2lkZW5hdGx5IGJ1eSB0aGUgZGV2aWNlLCBleHBlY3RpbmcgaXQgdG8gd29yayB3aXRoIExpbnV4LgorICoJQWRkZWQgcmVhZF9idWxrX2NhbGxiYWNrIGFuZCB3cml0ZV9idWxrX2NhbGxiYWNrIHRvIHRoZSB0eXBlIHN0cnVjdHVyZQorICoJZm9yIHRoZSBuZWVkcyBvZiB0aGUgRlRESSBhbmQgV2hpdGVIRUFUIGRyaXZlci4KKyAqCUNoYW5nZWQgYWxsIHJldmVyZW5jZXMgdG8gRlRESSB0byBGVERJX1NJTyBhdCB0aGUgcmVxdWVzdCBvZiBCaWxsCisgKglSeWRlci4KKyAqCUNoYW5nZWQgdGhlIG91dHB1dCB1cmIgc2l6ZSBiYWNrIHRvIHRoZSBtYXggZW5kcG9pbnQgc2l6ZSB0byBtYWtlCisgKgl0aGUgZnRkaV9zaW8gZHJpdmVyIGhhdmUgaXQgZWFzaWVyLCBhbmQgZHVlIHRvIHRoZSBmYWN0IHRoYXQgaXQgZGlkbid0CisgKglyZWFsbHkgaW5jcmVhc2UgdGhlIHNwZWVkIGFueS4KKyAqCisgKiAoMDIvMTEvMjAwMCkgZ2toCisgKglBZGRlZCBWSVNPUl9GVU5DVElPTl9DT05TT0xFIHRvIHRoZSB2aXNvciBzdGFydHVwIGZ1bmN0aW9uLiBUaGlzIHdhcyBhCisgKglwYXRjaCBmcm9tIE1pbGVzIExvdHQgKG1pbG9zQGluc3luYy5uZXQpLgorICoJRml4ZWQgYnVnIHdpdGggbm90IHJlc3RvcmluZyB0aGUgbWlub3IgcmFuZ2UgdGhhdCBhIGRldmljZSBncmFicywgaWYKKyAqCXRoZSBzdGFydHVwIGZ1bmN0aW9uIGZhaWxzICh0aGFua3MgTWlsZXMgZm9yIGZpbmRpbmcgdGhpcykuCisgKgorICogKDAyLzA1LzIwMDApIGdraAorICoJQWRkZWQgaW5pdGlhbCBmcmFtZXdvcmsgZm9yIHRoZSBLZXlzcGFuIFBEQSBzZXJpYWwgY29udmVydGVyIHNvIHRoYXQKKyAqCUJyaWFuIFdhcm5lciBoYXMgYSBwbGFjZSB0byBwdXQgaGlzIGNvZGUuCisgKglNYWRlIHRoZSBlenVzYiBzcGVjaWZpYyBmdW5jdGlvbnMgZ2VuZXJpYyBlbm91Z2ggdGhhdCBkaWZmZXJlbnQKKyAqCWRldmljZXMgY2FuIHVzZSB0aGVtICh3aGl0ZWhlYXQgYW5kIGtleXNwYW5fcGRhIGJvdGggbmVlZCB0aGVtKS4KKyAqCVNwbGl0IG91dCBhIHdob2xlIGJ1bmNoIG9mIHN0cnVjdHVyZSBhbmQgb3RoZXIgc3R1ZmYgdG8gYSBzZXBhcmF0ZQorICoJdXNiLXNlcmlhbC5oIGZpbGUuCisgKglNYWRlIHRoZSBWaXNvciBjb25uZWN0aW9uIG1lc3NhZ2VzIGEgbGl0dGxlIG1vcmUgdW5kZXJzdGFuZGFibGUsIG5vdworICoJdGhhdCBNaWxlcyBMb3R0IChtaWxvc0BpbnN5bmMubmV0KSBoYXMgZ290dGVuIHRoZSBHZW5lcmljIGNoYW5uZWwgdG8KKyAqCXdvcmsuIEFsc28gbWFkZSB0aGVtIGFsd2F5cyBzaG93IHVwIGluIHRoZSBsb2cgZmlsZS4KKyAqIAorICogKDAxLzI1LzIwMDApIGdraAorICoJQWRkZWQgaW5pdGlhbCBmcmFtZXdvcmsgZm9yIEZUREkgc2VyaWFsIGNvbnZlcnRlciBzbyB0aGF0IEJpbGwgUnlkZXIKKyAqCWhhcyBhIHBsYWNlIHRvIHB1dCBoaXMgY29kZS4KKyAqCUFkZGVkIHRoZSB2ZW5kb3Igc3BlY2lmaWMgaW5mbyBmcm9tIEhhbmRzcHJpbmcuIE5vdyB3ZSBjYW4gcHJpbnQgb3V0CisgKglpbmZvcm1hdGlvbmFsIGRlYnVnIG1lc3NhZ2VzIGFzIHdlbGwgYXMgdW5kZXJzdGFuZCB3aGF0IGlzIGhhcHBlbmluZy4KKyAqCisgKiAoMDEvMjMvMjAwMCkgZ2toCisgKglGaXhlZCBwcm9ibGVtIG9mIGNyYXNoIHdoZW4gdHJ5aW5nIHRvIG9wZW4gYSBwb3J0IHRoYXQgZGlkbid0IGhhdmUgYQorICoJZGV2aWNlIGFzc2lnbmVkIHRvIGl0LiBNYWRlIHRoZSBtaW5vciBub2RlIGZpbmRpbmcgYSBsaXR0bGUgc21hcnRlciwKKyAqCW5vdyBpdCBsb29rcyB0byBmaW5kIGEgY29udGludW91cyBzcGFjZSBmb3IgdGhlIG5ldyBkZXZpY2UuCisgKgorICogKDAxLzIxLzIwMDApIGdraAorICoJRml4ZWQgYnVnIGluIHZpc29yX3N0YXJ0dXAgd2l0aCBwYXRjaCBmcm9tIE1pbGVzIExvdHQgKG1pbG9zQGluc3luYy5uZXQpCisgKglGaXhlZCBnZXRfc2VyaWFsX2J5X21pbm9yIHdoaWNoIHdhcyBhbGwgbWVzc2VkIHVwIGZvciBtdWx0aSBwb3J0IAorICoJZGV2aWNlcy4gRml4ZWQgbXVsdGkgcG9ydCBwcm9ibGVtIGZvciBnZW5lcmljIGRldmljZXMuIE5vdyB0aGUgbnVtYmVyCisgKglvZiBwb3J0cyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBudW1iZXIgb2YgYnVsayBvdXQgZW5kcG9pbnRzIGZvciB0aGUKKyAqCWdlbmVyaWMgZGV2aWNlLgorICoKKyAqICgwMS8xOS8yMDAwKSBna2gKKyAqCVJlbW92ZWQgbG90cyBvZiBjcnVmdCB0aGF0IHdhcyBhcm91bmQgZnJvbSB0aGUgb2xkIChwcmUgdXJiKSBkcml2ZXIgCisgKglpbnRlcmZhY2UuCisgKglNYWRlIHRoZSBzZXJpYWxfdGFibGUgZHluYW1pYy4gVGhpcyBzaG91bGQgc2F2ZSBsb3RzIG9mIG1lbW9yeSB3aGVuCisgKgl0aGUgbnVtYmVyIG9mIG1pbm9yIG5vZGVzIGdvZXMgdXAgdG8gMjU2LgorICoJQWRkZWQgaW5pdGlhbCBzdXBwb3J0IGZvciBkZXZpY2VzIHRoYXQgaGF2ZSBtb3JlIHRoYW4gb25lIHBvcnQuIAorICoJQWRkZWQgbW9yZSBkZWJ1Z2dpbmcgY29tbWVudHMgZm9yIHRoZSBWaXNvciwgYW5kIGFkZGVkIGEgbmVlZGVkIAorICoJc2V0X2NvbmZpZ3VyYXRpb24gY2FsbC4KKyAqCisgKiAoMDEvMTcvMjAwMCkgZ2toCisgKglGaXhlZCB0aGUgV2hpdGVIRUFUIGZpcm13YXJlIChteSBwcm9jZXNzaW5nIHRvb2wgaGFkIGEgYnVnKQorICoJYW5kIGFkZGVkIG5ldyBkZWJ1ZyBsb2FkZXIgZmlybXdhcmUgZm9yIGl0LgorICoJUmVtb3ZlZCB0aGUgcHV0X2NoYXIgZnVuY3Rpb24gYXMgaXQgaXNuJ3QgcmVhbGx5IG5lZWRlZC4KKyAqCUFkZGVkIHZpc29yIHN0YXJ0dXAgY29tbWFuZHMgYXMgZm91bmQgYnkgdGhlIFdpbjk4IGR1bXAuCisgKiAKKyAqICgwMS8xMy8yMDAwKSBna2gKKyAqCUZpeGVkIHRoZSB2ZW5kb3IgaWQgZm9yIHRoZSBnZW5lcmljIGRyaXZlciB0byB0aGUgb25lIEkgbWVhbnQgaXQgdG8gYmUuCisgKgorICogKDAxLzEyLzIwMDApIGdraAorICoJRm9yZ2V0IHRoZSB2ZXJzaW9uIG51bWJlcmluZy4uLnRoYXQncyBwcmV0dHkgdXNlbGVzcy4uLgorICoJTWFkZSB0aGUgZHJpdmVyIGFibGUgdG8gYmUgY29tcGlsZWQgc28gdGhhdCB0aGUgdXNlciBjYW4gc2VsZWN0IHdoaWNoCisgKgljb252ZXJ0ZXIgdGhleSB3YW50IHRvIHVzZS4gVGhpcyBhbGxvd3MgcGVvcGxlIHdobyBvbmx5IHdhbnQgdGhlIFZpc29yCisgKglzdXBwb3J0IHRvIG5vdCBwYXkgdGhlIG1lbW9yeSBzaXplIHByaWNlIG9mIHRoZSBXaGl0ZUhFQVQuCisgKglGaXhlZCBidWcgd2hlcmUgdGhlIGdlbmVyaWMgZHJpdmVyIChpZFZlbmRvcj0wMDAwIGFuZCBpZFByb2R1Y3Q9MDAwMCkKKyAqCWdyYWJiZWQgdGhlIHJvb3QgaHViLiBOb3QgZ29vZC4KKyAqIAorICogdmVyc2lvbiAwLjQuMCAoMDEvMTAvMjAwMCkgZ2toCisgKglBZGRlZCB3aGl0ZWhlYXQuaCBjb250YWluaW5nIHRoZSBmaXJtd2FyZSBmb3IgdGhlIENvbm5lY3RUZWNoIFdoaXRlSEVBVAorICoJZGV2aWNlLiBBZGRlZCBzdGFydHVwIGZ1bmN0aW9uIHRvIGFsbG93IGZpcm13YXJlIHRvIGJlIGRvd25sb2FkZWQgdG8KKyAqCWEgZGV2aWNlIGlmIGl0IG5lZWRzIHRvIGJlLgorICoJQWRkZWQgZmlybXdhcmUgZG93bmxvYWQgbG9naWMgdG8gdGhlIFdoaXRlSEVBVCBkZXZpY2UuCisgKglTdGFydGVkIHRvIGFkZCAjZGVmaW5lcyB0byBzcGxpdCB1cCB0aGUgZGlmZmVyZW50IGRyaXZlcnMgZm9yIHBvdGVudGlhbAorICoJY29uZmlndXJhdGlvbiBvcHRpb24uCisgKgkKKyAqIHZlcnNpb24gMC4zLjEgKDEyLzMwLzk5KSBna2gKKyAqICAgICAgRml4ZWQgcHJvYmxlbXMgd2l0aCB1cmIgZm9yIGJ1bGsgb3V0LgorICogICAgICBBZGRlZCBpbml0aWFsIHN1cHBvcnQgZm9yIG11bHRpcGxlIHNldHMgb2YgZW5kcG9pbnRzLiBUaGlzIGVuYWJsZXMKKyAqICAgICAgdGhlIEhhbmRzcHJpbmcgVmlzb3IgdG8gYmUgYXR0YWNoZWQgc3VjY2Vzc2Z1bGx5LiBPbmx5IHRoZSBmaXJzdAorICogICAgICBidWxrIGluIC8gYnVsayBvdXQgZW5kcG9pbnQgcGFpciBpcyBiZWluZyB1c2VkIHJpZ2h0IG5vdy4KKyAqCisgKiB2ZXJzaW9uIDAuMy4wICgxMi8yNy85OSkgZ2toCisgKglBZGRlZCBpbml0aWFsIHN1cHBvcnQgZm9yIHRoZSBIYW5kc3ByaW5nIFZpc29yIGJhc2VkIG9uIGEgcGF0Y2ggZnJvbQorICoJTWlsZXMgTG90dCAobWlsb3NAc25lZXR5Lmluc3luYy5uZXQpCisgKglDbGVhbmVkIHVwIHRoZSBjb2RlIGEgYnVuY2ggYW5kIGNvbnZlcnRlZCBvdmVyIHRvIHVzaW5nIHVyYnMgb25seS4KKyAqCisgKiB2ZXJzaW9uIDAuMi4zICgxMi8yMS85OSkgZ2toCisgKglBZGRlZCBpbml0aWFsIHN1cHBvcnQgZm9yIHRoZSBDb25uZWN0IFRlY2ggV2hpdGVIRUFUIGNvbnZlcnRlci4KKyAqCUluY3JlbWVudGVkIHRoZSBudW1iZXIgb2YgcG9ydHMgaW4gZXhwZWN0YXRpb24gb2YgZ2V0dGluZyB0aGUKKyAqCVdoaXRlSEVBVCB0byB3b3JrIHByb3Blcmx5ICg0IHBvcnRzIHBlciBjb25uZWN0aW9uKS4KKyAqCUFkZGVkIG5vdGlmaWNhdGlvbiBvbiBpbnNlcnRpb24gYW5kIHJlbW92YWwgb2Ygd2hhdCBwb3J0IHRoZQorICoJZGV2aWNlIGlzL3dhcyBjb25uZWN0ZWQgdG8gKGFuZCB3aGF0IGtpbmQgb2YgZGV2aWNlIGl0IHdhcykuCisgKgorICogdmVyc2lvbiAwLjIuMiAoMTIvMTYvOTkpIGdraAorICoJQ2hhbmdlZCBtYWpvciBudW1iZXIgdG8gdGhlIG5ldyBhbGxvY2F0ZWQgbnVtYmVyLiBXZSdyZSBsZWdhbCBub3chCisgKgorICogdmVyc2lvbiAwLjIuMSAoMTIvMTQvOTkpIGdraAorICoJRml4ZWQgYnVnIHRoYXQgaGFwcGVucyB3aGVuIGRldmljZSBub2RlIGlzIG9wZW5lZCB3aGVuIHRoZXJlIGlzbid0IGEKKyAqCWRldmljZSBhdHRhY2hlZCB0byBpdC4gVGhhbmtzIHRvIG1hcmVrQHdlYmRlc2lnbi5ubyBmb3Igbm90aWNpbmcgdGhpcy4KKyAqCisgKiB2ZXJzaW9uIDAuMi4wICgxMS8xMC85OSkgZ2toCisgKglTcGxpdCB1cCBpbnRlcm5hbHMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gYWRkIGRpZmZlcmVudCB0eXBlcyBvZiBzZXJpYWwgCisgKgljb252ZXJ0ZXJzIHRvIHRoZSBjb2RlLgorICoJQWRkZWQgYSAiZ2VuZXJpYyIgZHJpdmVyIHRoYXQgZ2V0cyBpdCdzIHZlbmRvciBhbmQgcHJvZHVjdCBpZAorICoJZnJvbSB3aGVuIHRoZSBtb2R1bGUgaXMgbG9hZGVkLiBUaGFua3MgdG8gRGF2aWQgRS4gTmVsc29uIChkbmVsc29uQGp1bXAubmV0KQorICoJZm9yIHRoZSBpZGVhIGFuZCBzYW1wbGUgY29kZSAoZnJvbSB0aGUgdXNiIHNjYW5uZXIgZHJpdmVyLikKKyAqCUNsZWFyZWQgdXAgYW55IGxpY2Vuc2luZyBxdWVzdGlvbnMgYnkgcmVsZWFzaW5nIGl0IHVuZGVyIHRoZSBHTlUgR1BMLgorICoKKyAqIHZlcnNpb24gMC4xLjIgKDEwLzI1Lzk5KSBna2gKKyAqIAlGaXhlZCBidWcgaW4gZGV0ZWN0aW5nIGRldmljZS4KKyAqCisgKiB2ZXJzaW9uIDAuMS4xICgxMC8wNS85OSkgZ2toCisgKiAJQ2hhbmdlZCB0aGUgbWFqb3IgbnVtYmVyIHRvIG5vdCBjb25mbGljdCB3aXRoIGFueXRoaW5nIGVsc2UuCisgKgorICogdmVyc2lvbiAwLjEgKDA5LzI4Lzk5KSBna2gKKyAqIAlDYW4gcmVjb2duaXplIHRoZSB0d28gZGlmZmVyZW50IGRldmljZXMgYW5kIHN0YXJ0IHVwIGEgcmVhZCBmcm9tCisgKglkZXZpY2Ugd2hlbiBhc2tlZCB0by4gV3JpdGVzIGFsc28gd29yay4gTm8gY29udHJvbCBzaWduYWxzIHlldCwgdGhpcworICoJYWxsIGlzIHZlbmRvciBzcGVjaWZpYyBkYXRhIChpLmUuIG5vIHNwZWMpLCBhbHNvIG5vIGNvbnRyb2wgZm9yCisgKglkaWZmZXJlbnQgYmF1ZCByYXRlcyBvciBvdGhlciBiaXQgc2V0dGluZ3MuCisgKglDdXJyZW50bHkgd2UgYXJlIHVzaW5nIHRoZSBzYW1lIGRldmlkIGFzIHRoZSBhY20gZHJpdmVyLiBUaGlzIG5lZWRzCisgKgl0byBjaGFuZ2UuCisgKiAKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKyNpbmNsdWRlICJwbDIzMDMuaCIKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjIuMCIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiR3JlZyBLcm9haC1IYXJ0bWFuLCBncmVnQGtyb2FoLmNvbSwgaHR0cDovL3d3dy5rcm9haC5jb20vbGludXgvIgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIFNlcmlhbCBEcml2ZXIgY29yZSIKKworLyogRHJpdmVyIHN0cnVjdHVyZSB3ZSByZWdpc3RlciB3aXRoIHRoZSBVU0IgY29yZSAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9zZXJpYWxfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJ1c2JzZXJpYWwiLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCit9OworCisvKiBUaGVyZSBpcyBubyBNT0RVTEVfREVWSUNFX1RBQkxFIGZvciB1c2JzZXJpYWwuYy4gIEluc3RlYWQKKyAgIHRoZSBNT0RVTEVfREVWSUNFX1RBQkxFIGRlY2xhcmF0aW9ucyBpbiBlYWNoIHNlcmlhbCBkcml2ZXIKKyAgIGNhdXNlIHRoZSAiaG90cGx1ZyIgcHJvZ3JhbSB0byBwdWxsIGluIHdoYXRldmVyIG1vZHVsZSBpcyBuZWNlc3NhcnkKKyAgIHZpYSBtb2Rwcm9iZSwgYW5kIG1vZHByb2JlIHdpbGwgbG9hZCB1c2JzZXJpYWwgYmVjYXVzZSB0aGUgc2VyaWFsCisgICBkcml2ZXJzIGRlcGVuZCBvbiBpdC4KKyovCisKK3N0YXRpYyBpbnQgZGVidWc7CitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbF90YWJsZVtTRVJJQUxfVFRZX01JTk9SU107CS8qIGluaXRpYWxseSBhbGwgTlVMTCAqLworc3RhdGljIExJU1RfSEVBRCh1c2Jfc2VyaWFsX2RyaXZlcl9saXN0KTsKKworc3RydWN0IHVzYl9zZXJpYWwgKnVzYl9zZXJpYWxfZ2V0X2J5X2luZGV4KHVuc2lnbmVkIGluZGV4KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBzZXJpYWxfdGFibGVbaW5kZXhdOworCisJaWYgKHNlcmlhbCkKKwkJa3JlZl9nZXQoJnNlcmlhbC0+a3JlZik7CisJcmV0dXJuIHNlcmlhbDsKK30KKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsICpnZXRfZnJlZV9zZXJpYWwgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGludCBudW1fcG9ydHMsIHVuc2lnbmVkIGludCAqbWlub3IpCit7CisJdW5zaWduZWQgaW50IGksIGo7CisJaW50IGdvb2Rfc3BvdDsKKworCWRiZygiJXMgJWQiLCBfX0ZVTkNUSU9OX18sIG51bV9wb3J0cyk7CisKKwkqbWlub3IgPSAwOworCWZvciAoaSA9IDA7IGkgPCBTRVJJQUxfVFRZX01JTk9SUzsgKytpKSB7CisJCWlmIChzZXJpYWxfdGFibGVbaV0pCisJCQljb250aW51ZTsKKworCQlnb29kX3Nwb3QgPSAxOworCQlmb3IgKGogPSAxOyBqIDw9IG51bV9wb3J0cy0xOyArK2opCisJCQlpZiAoKGkraiA+PSBTRVJJQUxfVFRZX01JTk9SUykgfHwgKHNlcmlhbF90YWJsZVtpK2pdKSkgeworCQkJCWdvb2Rfc3BvdCA9IDA7CisJCQkJaSArPSBqOworCQkJCWJyZWFrOworCQkJfQorCQlpZiAoZ29vZF9zcG90ID09IDApCisJCQljb250aW51ZTsKKworCQkqbWlub3IgPSBpOworCQlkYmcoIiVzIC0gbWlub3IgYmFzZSA9ICVkIiwgX19GVU5DVElPTl9fLCAqbWlub3IpOworCQlmb3IgKGkgPSAqbWlub3I7IChpIDwgKCptaW5vciArIG51bV9wb3J0cykpICYmIChpIDwgU0VSSUFMX1RUWV9NSU5PUlMpOyArK2kpCisJCQlzZXJpYWxfdGFibGVbaV0gPSBzZXJpYWw7CisJCXJldHVybiBzZXJpYWw7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCByZXR1cm5fc2VyaWFsKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IGk7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmIChzZXJpYWwgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJc2VyaWFsX3RhYmxlW3NlcmlhbC0+bWlub3IgKyBpXSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCBkZXN0cm95X3NlcmlhbChzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJaW50IGk7CisKKwlzZXJpYWwgPSB0b191c2Jfc2VyaWFsKGtyZWYpOworCisJZGJnICgiJXMgLSAlcyIsIF9fRlVOQ1RJT05fXywgc2VyaWFsLT50eXBlLT5uYW1lKTsKKworCXNlcmlhbC0+dHlwZS0+c2h1dGRvd24oc2VyaWFsKTsKKworCS8qIHJldHVybiB0aGUgbWlub3IgcmFuZ2UgdGhhdCB0aGlzIGRldmljZSBoYWQgKi8KKwlyZXR1cm5fc2VyaWFsKHNlcmlhbCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkKKwkJc2VyaWFsLT5wb3J0W2ldLT5vcGVuX2NvdW50ID0gMDsKKworCS8qIHRoZSBwb3J0cyBhcmUgY2xlYW5lZCB1cCBhbmQgcmVsZWFzZWQgaW4gcG9ydF9yZWxlYXNlKCkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkKKwkJaWYgKHNlcmlhbC0+cG9ydFtpXS0+ZGV2LnBhcmVudCAhPSBOVUxMKSB7CisJCQlkZXZpY2VfdW5yZWdpc3Rlcigmc2VyaWFsLT5wb3J0W2ldLT5kZXYpOworCQkJc2VyaWFsLT5wb3J0W2ldID0gTlVMTDsKKwkJfQorCisJLyogSWYgdGhpcyBpcyBhICJmYWtlIiBwb3J0LCB3ZSBoYXZlIHRvIGNsZWFuIGl0IHVwIGhlcmUsIGFzIGl0IHdpbGwKKwkgKiBub3QgZ2V0IGNsZWFuZWQgdXAgaW4gcG9ydF9yZWxlYXNlKCkgYXMgaXQgd2FzIG5ldmVyIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHRoZSBkcml2ZXIgY29yZSAqLworCWlmIChzZXJpYWwtPm51bV9wb3J0cyA8IHNlcmlhbC0+bnVtX3BvcnRfcG9pbnRlcnMpIHsKKwkJZm9yIChpID0gc2VyaWFsLT5udW1fcG9ydHM7IGkgPCBzZXJpYWwtPm51bV9wb3J0X3BvaW50ZXJzOyArK2kpIHsKKwkJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCQlpZiAoIXBvcnQpCisJCQkJY29udGludWU7CisJCQl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworCQkJdXNiX2ZyZWVfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwkJCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOworCQkJdXNiX2ZyZWVfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJCQl1c2Jfa2lsbF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CisJCQl1c2JfZnJlZV91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CisJCQl1c2Jfa2lsbF91cmIocG9ydC0+aW50ZXJydXB0X291dF91cmIpOworCQkJdXNiX2ZyZWVfdXJiKHBvcnQtPmludGVycnVwdF9vdXRfdXJiKTsKKwkJCWtmcmVlKHBvcnQtPmJ1bGtfaW5fYnVmZmVyKTsKKwkJCWtmcmVlKHBvcnQtPmJ1bGtfb3V0X2J1ZmZlcik7CisJCQlrZnJlZShwb3J0LT5pbnRlcnJ1cHRfaW5fYnVmZmVyKTsKKwkJCWtmcmVlKHBvcnQtPmludGVycnVwdF9vdXRfYnVmZmVyKTsKKwkJfQorCX0KKworCXVzYl9wdXRfZGV2KHNlcmlhbC0+ZGV2KTsKKworCS8qIGZyZWUgdXAgYW55IG1lbW9yeSB0aGF0IHdlIGFsbG9jYXRlZCAqLworCWtmcmVlIChzZXJpYWwpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERyaXZlciB0dHkgaW50ZXJmYWNlIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBzZXJpYWxfb3BlbiAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwl1bnNpZ25lZCBpbnQgcG9ydE51bWJlcjsKKwlpbnQgcmV0dmFsOworCQorCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJLyogZ2V0IHRoZSBzZXJpYWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHR0eSBwb2ludGVyICovCisJc2VyaWFsID0gdXNiX3NlcmlhbF9nZXRfYnlfaW5kZXgodHR5LT5pbmRleCk7CisJaWYgKCFzZXJpYWwpIHsKKwkJdHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBvcnROdW1iZXIgPSB0dHktPmluZGV4IC0gc2VyaWFsLT5taW5vcjsKKwlwb3J0ID0gc2VyaWFsLT5wb3J0W3BvcnROdW1iZXJdOworCSAKKwkrK3BvcnQtPm9wZW5fY291bnQ7CisKKwlpZiAocG9ydC0+b3Blbl9jb3VudCA9PSAxKSB7CisKKwkJLyogc2V0IHVwIG91ciBwb3J0IHN0cnVjdHVyZSBtYWtpbmcgdGhlIHR0eSBkcml2ZXIKKwkJICogcmVtZW1iZXIgb3VyIHBvcnQgb2JqZWN0LCBhbmQgdXMgaXQgKi8KKwkJdHR5LT5kcml2ZXJfZGF0YSA9IHBvcnQ7CisJCXBvcnQtPnR0eSA9IHR0eTsKKworCQkvKiBsb2NrIHRoaXMgbW9kdWxlIGJlZm9yZSB3ZSBjYWxsIGl0CisJCSAqIHRoaXMgbWF5IGZhaWwsIHdoaWNoIG1lYW5zIHdlIG11c3QgYmFpbCBvdXQsCisJCSAqIHNhZmUgYmVjYXVzZSB3ZSBhcmUgY2FsbGVkIHdpdGggQktMIGhlbGQgKi8KKwkJaWYgKCF0cnlfbW9kdWxlX2dldChzZXJpYWwtPnR5cGUtPm93bmVyKSkgeworCQkJcmV0dmFsID0gLUVOT0RFVjsKKwkJCWdvdG8gYmFpbG91dF9rcmVmX3B1dDsKKwkJfQorCisJCS8qIG9ubHkgY2FsbCB0aGUgZGV2aWNlIHNwZWNpZmljIG9wZW4gaWYgdGhpcyAKKwkJICogaXMgdGhlIGZpcnN0IHRpbWUgdGhlIHBvcnQgaXMgb3BlbmVkICovCisJCXJldHZhbCA9IHNlcmlhbC0+dHlwZS0+b3Blbihwb3J0LCBmaWxwKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gYmFpbG91dF9tb2R1bGVfcHV0OworCX0KKworCXJldHVybiAwOworCitiYWlsb3V0X21vZHVsZV9wdXQ6CisJbW9kdWxlX3B1dChzZXJpYWwtPnR5cGUtPm93bmVyKTsKK2JhaWxvdXRfa3JlZl9wdXQ6CisJa3JlZl9wdXQoJnNlcmlhbC0+a3JlZiwgZGVzdHJveV9zZXJpYWwpOworCXBvcnQtPm9wZW5fY291bnQgPSAwOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHNlcmlhbF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHR0eS0+ZHJpdmVyX2RhdGE7CisKKwlpZiAoIXBvcnQpCisJCXJldHVybjsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHBvcnQtPm9wZW5fY291bnQgPT0gMCkKKwkJcmV0dXJuOworCisJLS1wb3J0LT5vcGVuX2NvdW50OworCWlmIChwb3J0LT5vcGVuX2NvdW50ID09IDApIHsKKwkJLyogb25seSBjYWxsIHRoZSBkZXZpY2Ugc3BlY2lmaWMgY2xvc2UgaWYgdGhpcyAKKwkJICogcG9ydCBpcyBiZWluZyBjbG9zZWQgYnkgdGhlIGxhc3Qgb3duZXIgKi8KKwkJcG9ydC0+c2VyaWFsLT50eXBlLT5jbG9zZShwb3J0LCBmaWxwKTsKKworCQlpZiAocG9ydC0+dHR5KSB7CisJCQlpZiAocG9ydC0+dHR5LT5kcml2ZXJfZGF0YSkKKwkJCQlwb3J0LT50dHktPmRyaXZlcl9kYXRhID0gTlVMTDsKKwkJCXBvcnQtPnR0eSA9IE5VTEw7CisJCX0KKworCQltb2R1bGVfcHV0KHBvcnQtPnNlcmlhbC0+dHlwZS0+b3duZXIpOworCX0KKworCWtyZWZfcHV0KCZwb3J0LT5zZXJpYWwtPmtyZWYsIGRlc3Ryb3lfc2VyaWFsKTsKK30KKworc3RhdGljIGludCBzZXJpYWxfd3JpdGUgKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdHR5LT5kcml2ZXJfZGF0YTsKKwlpbnQgcmV0dmFsID0gLUVJTlZBTDsKKworCWRiZygiJXMgLSBwb3J0ICVkLCAlZCBieXRlKHMpIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIGNvdW50KTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIHBhc3Mgb24gdG8gdGhlIGRyaXZlciBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gKi8KKwlyZXR2YWwgPSBwb3J0LT5zZXJpYWwtPnR5cGUtPndyaXRlKHBvcnQsIGJ1ZiwgY291bnQpOworCitleGl0OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsX3dyaXRlX3Jvb20gKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpIAoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB0dHktPmRyaXZlcl9kYXRhOworCWludCByZXR2YWwgPSAtRUlOVkFMOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKKwkJZGJnKCIlcyAtIHBvcnQgbm90IG9wZW4iLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogcGFzcyBvbiB0byB0aGUgZHJpdmVyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiAqLworCXJldHZhbCA9IHBvcnQtPnNlcmlhbC0+dHlwZS0+d3JpdGVfcm9vbShwb3J0KTsKKworZXhpdDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHNlcmlhbF9jaGFyc19pbl9idWZmZXIgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpIAoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB0dHktPmRyaXZlcl9kYXRhOworCWludCByZXR2YWwgPSAtRUlOVkFMOworCisJZGJnKCIlcyA9IHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKKwkJZGJnKCIlcyAtIHBvcnQgbm90IG9wZW4iLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogcGFzcyBvbiB0byB0aGUgZHJpdmVyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiAqLworCXJldHZhbCA9IHBvcnQtPnNlcmlhbC0+dHlwZS0+Y2hhcnNfaW5fYnVmZmVyKHBvcnQpOworCitleGl0OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHNlcmlhbF90aHJvdHRsZSAoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHR0eS0+ZHJpdmVyX2RhdGE7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlkYmcgKCIlcyAtIHBvcnQgbm90IG9wZW4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJLyogcGFzcyBvbiB0byB0aGUgZHJpdmVyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiAqLworCWlmIChwb3J0LT5zZXJpYWwtPnR5cGUtPnRocm90dGxlKQorCQlwb3J0LT5zZXJpYWwtPnR5cGUtPnRocm90dGxlKHBvcnQpOworfQorCitzdGF0aWMgdm9pZCBzZXJpYWxfdW50aHJvdHRsZSAoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHR0eS0+ZHJpdmVyX2RhdGE7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBwYXNzIG9uIHRvIHRoZSBkcml2ZXIgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uICovCisJaWYgKHBvcnQtPnNlcmlhbC0+dHlwZS0+dW50aHJvdHRsZSkKKwkJcG9ydC0+c2VyaWFsLT50eXBlLT51bnRocm90dGxlKHBvcnQpOworfQorCitzdGF0aWMgaW50IHNlcmlhbF9pb2N0bCAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdHR5LT5kcml2ZXJfZGF0YTsKKwlpbnQgcmV0dmFsID0gLUVOT0RFVjsKKworCWRiZygiJXMgLSBwb3J0ICVkLCBjbWQgMHglLjR4IiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIGNtZCk7CisKKwlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKKwkJZGJnICgiJXMgLSBwb3J0IG5vdCBvcGVuIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIHBhc3Mgb24gdG8gdGhlIGRyaXZlciBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gaWYgaXQgaXMgYXZhaWxhYmxlICovCisJaWYgKHBvcnQtPnNlcmlhbC0+dHlwZS0+aW9jdGwpCisJCXJldHZhbCA9IHBvcnQtPnNlcmlhbC0+dHlwZS0+aW9jdGwocG9ydCwgZmlsZSwgY21kLCBhcmcpOworCWVsc2UKKwkJcmV0dmFsID0gLUVOT0lPQ1RMQ01EOworCitleGl0OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHNlcmlhbF9zZXRfdGVybWlvcyAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKiBvbGQpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHR0eS0+ZHJpdmVyX2RhdGE7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBwYXNzIG9uIHRvIHRoZSBkcml2ZXIgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uIGlmIGl0IGlzIGF2YWlsYWJsZSAqLworCWlmIChwb3J0LT5zZXJpYWwtPnR5cGUtPnNldF90ZXJtaW9zKQorCQlwb3J0LT5zZXJpYWwtPnR5cGUtPnNldF90ZXJtaW9zKHBvcnQsIG9sZCk7Cit9CisKK3N0YXRpYyB2b2lkIHNlcmlhbF9icmVhayAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB0dHktPmRyaXZlcl9kYXRhOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKKwkJZGJnKCIlcyAtIHBvcnQgbm90IG9wZW4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJLyogcGFzcyBvbiB0byB0aGUgZHJpdmVyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiBpZiBpdCBpcyBhdmFpbGFibGUgKi8KKwlpZiAocG9ydC0+c2VyaWFsLT50eXBlLT5icmVha19jdGwpCisJCXBvcnQtPnNlcmlhbC0+dHlwZS0+YnJlYWtfY3RsKHBvcnQsIGJyZWFrX3N0YXRlKTsKK30KKworc3RhdGljIGludCBzZXJpYWxfcmVhZF9wcm9jIChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCWludCBsZW5ndGggPSAwOworCWludCBpOworCW9mZl90IGJlZ2luID0gMDsKKwljaGFyIHRtcFs0MF07CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKwlsZW5ndGggKz0gc3ByaW50ZiAocGFnZSwgInVzYnNlcmluZm86MS4wIGRyaXZlcjolc1xuIiwgRFJJVkVSX1ZFUlNJT04pOworCWZvciAoaSA9IDA7IGkgPCBTRVJJQUxfVFRZX01JTk9SUyAmJiBsZW5ndGggPCBQQUdFX1NJWkU7ICsraSkgeworCQlzZXJpYWwgPSB1c2Jfc2VyaWFsX2dldF9ieV9pbmRleChpKTsKKwkJaWYgKHNlcmlhbCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJbGVuZ3RoICs9IHNwcmludGYgKHBhZ2UrbGVuZ3RoLCAiJWQ6IiwgaSk7CisJCWlmIChzZXJpYWwtPnR5cGUtPm93bmVyKQorCQkJbGVuZ3RoICs9IHNwcmludGYgKHBhZ2UrbGVuZ3RoLCAiIG1vZHVsZTolcyIsIG1vZHVsZV9uYW1lKHNlcmlhbC0+dHlwZS0+b3duZXIpKTsKKwkJbGVuZ3RoICs9IHNwcmludGYgKHBhZ2UrbGVuZ3RoLCAiIG5hbWU6XCIlc1wiIiwgc2VyaWFsLT50eXBlLT5uYW1lKTsKKwkJbGVuZ3RoICs9IHNwcmludGYgKHBhZ2UrbGVuZ3RoLCAiIHZlbmRvcjolMDR4IHByb2R1Y3Q6JTA0eCIsIAorCQkJCSAgIGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwgCisJCQkJICAgbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisJCWxlbmd0aCArPSBzcHJpbnRmIChwYWdlK2xlbmd0aCwgIiBudW1fcG9ydHM6JWQiLCBzZXJpYWwtPm51bV9wb3J0cyk7CisJCWxlbmd0aCArPSBzcHJpbnRmIChwYWdlK2xlbmd0aCwgIiBwb3J0OiVkIiwgaSAtIHNlcmlhbC0+bWlub3IgKyAxKTsKKworCQl1c2JfbWFrZV9wYXRoKHNlcmlhbC0+ZGV2LCB0bXAsIHNpemVvZih0bXApKTsKKwkJbGVuZ3RoICs9IHNwcmludGYgKHBhZ2UrbGVuZ3RoLCAiIHBhdGg6JXMiLCB0bXApOworCQkJCisJCWxlbmd0aCArPSBzcHJpbnRmIChwYWdlK2xlbmd0aCwgIlxuIik7CisJCWlmICgobGVuZ3RoICsgYmVnaW4pID4gKG9mZiArIGNvdW50KSkKKwkJCWdvdG8gZG9uZTsKKwkJaWYgKChsZW5ndGggKyBiZWdpbikgPCBvZmYpIHsKKwkJCWJlZ2luICs9IGxlbmd0aDsKKwkJCWxlbmd0aCA9IDA7CisJCX0KKwkJa3JlZl9wdXQoJnNlcmlhbC0+a3JlZiwgZGVzdHJveV9zZXJpYWwpOworCX0KKwkqZW9mID0gMTsKK2RvbmU6CisJaWYgKG9mZiA+PSAobGVuZ3RoICsgYmVnaW4pKQorCQlyZXR1cm4gMDsKKwkqc3RhcnQgPSBwYWdlICsgKG9mZi1iZWdpbik7CisJcmV0dXJuICgoY291bnQgPCBiZWdpbitsZW5ndGgtb2ZmKSA/IGNvdW50IDogYmVnaW4rbGVuZ3RoLW9mZik7Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsX3Rpb2NtZ2V0IChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdHR5LT5kcml2ZXJfZGF0YTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJCWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChwb3J0LT5zZXJpYWwtPnR5cGUtPnRpb2NtZ2V0KQorCQlyZXR1cm4gcG9ydC0+c2VyaWFsLT50eXBlLT50aW9jbWdldChwb3J0LCBmaWxlKTsKKworZXhpdDoKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBzZXJpYWxfdGlvY21zZXQgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdHR5LT5kcml2ZXJfZGF0YTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJCWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChwb3J0LT5zZXJpYWwtPnR5cGUtPnRpb2Ntc2V0KQorCQlyZXR1cm4gcG9ydC0+c2VyaWFsLT50eXBlLT50aW9jbXNldChwb3J0LCBmaWxlLCBzZXQsIGNsZWFyKTsKKworZXhpdDoKKwlyZXR1cm4gLUVJTlZBTDsKK30KKwordm9pZCB1c2Jfc2VyaWFsX3BvcnRfc29mdGludCh2b2lkICpwcml2YXRlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXByaXZhdGU7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQorCWlmICghcG9ydCkKKwkJcmV0dXJuOworCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICghdHR5KQorCQlyZXR1cm47CisKKwl0dHlfd2FrZXVwKHR0eSk7Cit9CisKK3N0YXRpYyB2b2lkIHBvcnRfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHRvX3VzYl9zZXJpYWxfcG9ydChkZXYpOworCisJZGJnICgiJXMgLSAlcyIsIF9fRlVOQ1RJT05fXywgZGV2LT5idXNfaWQpOworCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisJdXNiX2ZyZWVfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+d3JpdGVfdXJiKTsKKwl1c2JfZnJlZV91cmIocG9ydC0+d3JpdGVfdXJiKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CisJdXNiX2ZyZWVfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYik7CisJdXNiX2ZyZWVfdXJiKHBvcnQtPmludGVycnVwdF9vdXRfdXJiKTsKKwlrZnJlZShwb3J0LT5idWxrX2luX2J1ZmZlcik7CisJa2ZyZWUocG9ydC0+YnVsa19vdXRfYnVmZmVyKTsKKwlrZnJlZShwb3J0LT5pbnRlcnJ1cHRfaW5fYnVmZmVyKTsKKwlrZnJlZShwb3J0LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlcik7CisJa2ZyZWUocG9ydCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbCAqIGNyZWF0ZV9zZXJpYWwgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIAorCQkJCQkgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkJCSAgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKnR5cGUpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKworCXNlcmlhbCA9IGttYWxsb2MgKHNpemVvZiAoKnNlcmlhbCksIEdGUF9LRVJORUwpOworCWlmICghc2VyaWFsKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gTlVMTDsKKwl9CisJbWVtc2V0IChzZXJpYWwsIDAsIHNpemVvZigqc2VyaWFsKSk7CisJc2VyaWFsLT5kZXYgPSB1c2JfZ2V0X2RldihkZXYpOworCXNlcmlhbC0+dHlwZSA9IHR5cGU7CisJc2VyaWFsLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisJa3JlZl9pbml0KCZzZXJpYWwtPmtyZWYpOworCisJcmV0dXJuIHNlcmlhbDsKK30KKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlICpzZWFyY2hfc2VyaWFsX2RldmljZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKwljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQ7CisJc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKnQ7CisKKwkvKiBMaXN0IHRyb3VnaCBrbm93IGRldmljZXMgYW5kIHNlZSBpZiB0aGUgdXNiIGlkIG1hdGNoZXMgKi8KKwlsaXN0X2Zvcl9lYWNoKHAsICZ1c2Jfc2VyaWFsX2RyaXZlcl9saXN0KSB7CisJCXQgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlLCBkcml2ZXJfbGlzdCk7CisJCWlkID0gdXNiX21hdGNoX2lkKGlmYWNlLCB0LT5pZF90YWJsZSk7CisJCWlmIChpZCAhPSBOVUxMKSB7CisJCQlkYmcoImRlc2NyaXB0b3IgbWF0Y2hlcyIpOworCQkJcmV0dXJuIHQ7CisJCX0KKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IHVzYl9zZXJpYWxfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGVyZmFjZSk7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IE5VTEw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICppbnRlcnJ1cHRfaW5fZW5kcG9pbnRbTUFYX05VTV9QT1JUU107CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICppbnRlcnJ1cHRfb3V0X2VuZHBvaW50W01BWF9OVU1fUE9SVFNdOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqYnVsa19pbl9lbmRwb2ludFtNQVhfTlVNX1BPUlRTXTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmJ1bGtfb3V0X2VuZHBvaW50W01BWF9OVU1fUE9SVFNdOworCXN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlICp0eXBlID0gTlVMTDsKKwlpbnQgcmV0dmFsOworCWludCBtaW5vcjsKKwlpbnQgYnVmZmVyX3NpemU7CisJaW50IGk7CisJaW50IG51bV9pbnRlcnJ1cHRfaW4gPSAwOworCWludCBudW1faW50ZXJydXB0X291dCA9IDA7CisJaW50IG51bV9idWxrX2luID0gMDsKKwlpbnQgbnVtX2J1bGtfb3V0ID0gMDsKKwlpbnQgbnVtX3BvcnRzID0gMDsKKwlpbnQgbWF4X2VuZHBvaW50czsKKworCXR5cGUgPSBzZWFyY2hfc2VyaWFsX2RldmljZShpbnRlcmZhY2UpOworCWlmICghdHlwZSkgeworCQlkYmcoIm5vbmUgbWF0Y2hlZCIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzZXJpYWwgPSBjcmVhdGVfc2VyaWFsIChkZXYsIGludGVyZmFjZSwgdHlwZSk7CisJaWYgKCFzZXJpYWwpIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIGlmIHRoaXMgZGV2aWNlIHR5cGUgaGFzIGEgcHJvYmUgZnVuY3Rpb24sIGNhbGwgaXQgKi8KKwlpZiAodHlwZS0+cHJvYmUpIHsKKwkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkOworCisJCWlmICghdHJ5X21vZHVsZV9nZXQodHlwZS0+b3duZXIpKSB7CisJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIm1vZHVsZSBnZXQgZmFpbGVkLCBleGl0aW5nXG4iKTsKKwkJCWtmcmVlIChzZXJpYWwpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlpZCA9IHVzYl9tYXRjaF9pZChpbnRlcmZhY2UsIHR5cGUtPmlkX3RhYmxlKTsKKwkJcmV0dmFsID0gdHlwZS0+cHJvYmUoc2VyaWFsLCBpZCk7CisJCW1vZHVsZV9wdXQodHlwZS0+b3duZXIpOworCisJCWlmIChyZXR2YWwpIHsKKwkJCWRiZyAoInN1YiBkcml2ZXIgcmVqZWN0ZWQgZGV2aWNlIik7CisJCQlrZnJlZSAoc2VyaWFsKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwl9CisKKwkvKiBkZXNjcmlwdG9yIG1hdGNoZXMsIGxldCdzIGZpbmQgdGhlIGVuZHBvaW50cyBuZWVkZWQgKi8KKwkvKiBjaGVjayBvdXQgdGhlIGVuZHBvaW50cyAqLworCWlmYWNlX2Rlc2MgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOworCWZvciAoaSA9IDA7IGkgPCBpZmFjZV9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHM7ICsraSkgeworCQllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjOworCQkKKwkJaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApICYmCisJCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAyKSkgeworCQkJLyogd2UgZm91bmQgYSBidWxrIGluIGVuZHBvaW50ICovCisJCQlkYmcoImZvdW5kIGJ1bGsgaW4gb24gZW5kcG9pbnQgJWQiLCBpKTsKKwkJCWJ1bGtfaW5fZW5kcG9pbnRbbnVtX2J1bGtfaW5dID0gZW5kcG9pbnQ7CisJCQkrK251bV9idWxrX2luOworCQl9CisKKwkJaWYgKCgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSA9PSAweDAwKSAmJgorCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMikpIHsKKwkJCS8qIHdlIGZvdW5kIGEgYnVsayBvdXQgZW5kcG9pbnQgKi8KKwkJCWRiZygiZm91bmQgYnVsayBvdXQgb24gZW5kcG9pbnQgJWQiLCBpKTsKKwkJCWJ1bGtfb3V0X2VuZHBvaW50W251bV9idWxrX291dF0gPSBlbmRwb2ludDsKKwkJCSsrbnVtX2J1bGtfb3V0OworCQl9CisJCQorCQlpZiAoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkgJiYKKwkJICAgICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIDMpID09IDB4MDMpKSB7CisJCQkvKiB3ZSBmb3VuZCBhIGludGVycnVwdCBpbiBlbmRwb2ludCAqLworCQkJZGJnKCJmb3VuZCBpbnRlcnJ1cHQgaW4gb24gZW5kcG9pbnQgJWQiLCBpKTsKKwkJCWludGVycnVwdF9pbl9lbmRwb2ludFtudW1faW50ZXJydXB0X2luXSA9IGVuZHBvaW50OworCQkJKytudW1faW50ZXJydXB0X2luOworCQl9CisKKwkJaWYgKCgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSA9PSAweDAwKSAmJgorCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMykpIHsKKwkJCS8qIHdlIGZvdW5kIGFuIGludGVycnVwdCBvdXQgZW5kcG9pbnQgKi8KKwkJCWRiZygiZm91bmQgaW50ZXJydXB0IG91dCBvbiBlbmRwb2ludCAlZCIsIGkpOworCQkJaW50ZXJydXB0X291dF9lbmRwb2ludFtudW1faW50ZXJydXB0X291dF0gPSBlbmRwb2ludDsKKwkJCSsrbnVtX2ludGVycnVwdF9vdXQ7CisJCX0KKwl9CisKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMykgfHwgZGVmaW5lZChDT05GSUdfVVNCX1NFUklBTF9QTDIzMDNfTU9EVUxFKQorCS8qIEJFR0lOIEhPUlJJQkxFIEhBQ0sgRk9SIFBMMjMwMyAqLyAKKwkvKiB0aGlzIGlzIG5lZWRlZCBkdWUgdG8gdGhlIGxvb25leSB3YXkgaXRzIGVuZHBvaW50cyBhcmUgc2V0IHVwICovCisJaWYgKCgobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBQTDIzMDNfVkVORE9SX0lEKSAmJgorCSAgICAgKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IFBMMjMwM19QUk9EVUNUX0lEKSkgfHwKKwkgICAgKChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IEFURU5fVkVORE9SX0lEKSAmJgorCSAgICAgKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IEFURU5fUFJPRFVDVF9JRCkpKSB7CisJCWlmIChpbnRlcmZhY2UgIT0gZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVswXSkgeworCQkJLyogY2hlY2sgb3V0IHRoZSBlbmRwb2ludHMgb2YgdGhlIG90aGVyIGludGVyZmFjZSovCisJCQlpZmFjZV9kZXNjID0gZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVswXS0+Y3VyX2FsdHNldHRpbmc7CisJCQlmb3IgKGkgPSAwOyBpIDwgaWZhY2VfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyArK2kpIHsKKwkJCQllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjOworCQkJCWlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSAmJgorCQkJCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAzKSkgeworCQkJCQkvKiB3ZSBmb3VuZCBhIGludGVycnVwdCBpbiBlbmRwb2ludCAqLworCQkJCQlkYmcoImZvdW5kIGludGVycnVwdCBpbiBmb3IgUHJvbGlmaWMgZGV2aWNlIG9uIHNlcGFyYXRlIGludGVyZmFjZSIpOworCQkJCQlpbnRlcnJ1cHRfaW5fZW5kcG9pbnRbbnVtX2ludGVycnVwdF9pbl0gPSBlbmRwb2ludDsKKwkJCQkJKytudW1faW50ZXJydXB0X2luOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qIE5vdyBtYWtlIHN1cmUgdGhlIFBMLTIzMDMgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkuCisJCSAqIElmIG5vdCwgZ2l2ZSB1cCBub3cgYW5kIGhvcGUgdGhpcyBoYWNrIHdpbGwgd29yaworCQkgKiBwcm9wZXJseSBkdXJpbmcgYSBsYXRlciBpbnZvY2F0aW9uIG9mIHVzYl9zZXJpYWxfcHJvYmUKKwkJICovCisJCWlmIChudW1fYnVsa19pbiA9PSAwIHx8IG51bV9idWxrX291dCA9PSAwKSB7CisJCQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJQTC0yMzAzIGhhY2s6IGRlc2NyaXB0b3JzIG1hdGNoZWQgYnV0IGVuZHBvaW50cyBkaWQgbm90XG4iKTsKKwkJCWtmcmVlIChzZXJpYWwpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CisJLyogRU5EIEhPUlJJQkxFIEhBQ0sgRk9SIFBMMjMwMyAqLworI2VuZGlmCisKKwkvKiBmb3VuZCBhbGwgdGhhdCB3ZSBuZWVkICovCisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiJXMgY29udmVydGVyIGRldGVjdGVkXG4iLCB0eXBlLT5uYW1lKTsKKworI2lmZGVmIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUMKKwlpZiAodHlwZSA9PSAmdXNiX3NlcmlhbF9nZW5lcmljX2RldmljZSkgeworCQludW1fcG9ydHMgPSBudW1fYnVsa19vdXQ7CisJCWlmIChudW1fcG9ydHMgPT0gMCkgeworCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJHZW5lcmljIGRldmljZSB3aXRoIG5vIGJ1bGsgb3V0LCBub3QgYWxsb3dlZC5cbiIpOworCQkJa2ZyZWUgKHNlcmlhbCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKyNlbmRpZgorCWlmICghbnVtX3BvcnRzKSB7CisJCS8qIGlmIHRoaXMgZGV2aWNlIHR5cGUgaGFzIGEgY2FsY19udW1fcG9ydHMgZnVuY3Rpb24sIGNhbGwgaXQgKi8KKwkJaWYgKHR5cGUtPmNhbGNfbnVtX3BvcnRzKSB7CisJCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHR5cGUtPm93bmVyKSkgeworCQkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAibW9kdWxlIGdldCBmYWlsZWQsIGV4aXRpbmdcbiIpOworCQkJCWtmcmVlIChzZXJpYWwpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQkJbnVtX3BvcnRzID0gdHlwZS0+Y2FsY19udW1fcG9ydHMgKHNlcmlhbCk7CisJCQltb2R1bGVfcHV0KHR5cGUtPm93bmVyKTsKKwkJfQorCQlpZiAoIW51bV9wb3J0cykKKwkJCW51bV9wb3J0cyA9IHR5cGUtPm51bV9wb3J0czsKKwl9CisKKwlpZiAoZ2V0X2ZyZWVfc2VyaWFsIChzZXJpYWwsIG51bV9wb3J0cywgJm1pbm9yKSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiTm8gbW9yZSBmcmVlIHNlcmlhbCBkZXZpY2VzXG4iKTsKKwkJa2ZyZWUgKHNlcmlhbCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNlcmlhbC0+bWlub3IgPSBtaW5vcjsKKwlzZXJpYWwtPm51bV9wb3J0cyA9IG51bV9wb3J0czsKKwlzZXJpYWwtPm51bV9idWxrX2luID0gbnVtX2J1bGtfaW47CisJc2VyaWFsLT5udW1fYnVsa19vdXQgPSBudW1fYnVsa19vdXQ7CisJc2VyaWFsLT5udW1faW50ZXJydXB0X2luID0gbnVtX2ludGVycnVwdF9pbjsKKwlzZXJpYWwtPm51bV9pbnRlcnJ1cHRfb3V0ID0gbnVtX2ludGVycnVwdF9vdXQ7CisKKwkvKiBjcmVhdGUgb3VyIHBvcnRzLCB3ZSBuZWVkIGFzIG1hbnkgYXMgdGhlIG1heCBlbmRwb2ludHMgKi8KKwkvKiB3ZSBkb24ndCB1c2UgbnVtX3BvcnRzIGhlcmUgY2F1eiBzb21lIGRldmljZXMgaGF2ZSBtb3JlIGVuZHBvaW50IHBhaXJzIHRoYW4gcG9ydHMgKi8KKwltYXhfZW5kcG9pbnRzID0gbWF4KG51bV9idWxrX2luLCBudW1fYnVsa19vdXQpOworCW1heF9lbmRwb2ludHMgPSBtYXgobWF4X2VuZHBvaW50cywgbnVtX2ludGVycnVwdF9pbik7CisJbWF4X2VuZHBvaW50cyA9IG1heChtYXhfZW5kcG9pbnRzLCBudW1faW50ZXJydXB0X291dCk7CisJbWF4X2VuZHBvaW50cyA9IG1heChtYXhfZW5kcG9pbnRzLCAoaW50KXNlcmlhbC0+bnVtX3BvcnRzKTsKKwlzZXJpYWwtPm51bV9wb3J0X3BvaW50ZXJzID0gbWF4X2VuZHBvaW50czsKKwlkYmcoIiVzIC0gc2V0dGluZyB1cCAlZCBwb3J0IHN0cnVjdHVyZXMgZm9yIHRoaXMgZGV2aWNlIiwgX19GVU5DVElPTl9fLCBtYXhfZW5kcG9pbnRzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2VuZHBvaW50czsgKytpKSB7CisJCXBvcnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcG9ydCkKKwkJCWdvdG8gcHJvYmVfZXJyb3I7CisJCW1lbXNldChwb3J0LCAweDAwLCBzaXplb2Yoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCkpOworCQlwb3J0LT5udW1iZXIgPSBpICsgc2VyaWFsLT5taW5vcjsKKwkJcG9ydC0+c2VyaWFsID0gc2VyaWFsOworCQlJTklUX1dPUksoJnBvcnQtPndvcmssIHVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50LCBwb3J0KTsKKwkJc2VyaWFsLT5wb3J0W2ldID0gcG9ydDsKKwl9CisKKwkvKiBzZXQgdXAgdGhlIGVuZHBvaW50IGluZm9ybWF0aW9uICovCisJZm9yIChpID0gMDsgaSA8IG51bV9idWxrX2luOyArK2kpIHsKKwkJZW5kcG9pbnQgPSBidWxrX2luX2VuZHBvaW50W2ldOworCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQlwb3J0LT5yZWFkX3VyYiA9IHVzYl9hbGxvY191cmIgKDAsIEdGUF9LRVJORUwpOworCQlpZiAoIXBvcnQtPnJlYWRfdXJiKSB7CisJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk5vIGZyZWUgdXJicyBhdmFpbGFibGVcbiIpOworCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJfQorCQlidWZmZXJfc2l6ZSA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSk7CisJCXBvcnQtPmJ1bGtfaW5fc2l6ZSA9IGJ1ZmZlcl9zaXplOworCQlwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCQlwb3J0LT5idWxrX2luX2J1ZmZlciA9IGttYWxsb2MgKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwb3J0LT5idWxrX2luX2J1ZmZlcikgeworCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSBidWxrX2luX2J1ZmZlclxuIik7CisJCQlnb3RvIHByb2JlX2Vycm9yOworCQl9CisJCXVzYl9maWxsX2J1bGtfdXJiIChwb3J0LT5yZWFkX3VyYiwgZGV2LAorCQkJCSAgIHVzYl9yY3ZidWxrcGlwZSAoZGV2LAorCQkJCQkgICAJICAgIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkgICBwb3J0LT5idWxrX2luX2J1ZmZlciwgYnVmZmVyX3NpemUsCisJCQkJICAgc2VyaWFsLT50eXBlLT5yZWFkX2J1bGtfY2FsbGJhY2ssCisJCQkJICAgcG9ydCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG51bV9idWxrX291dDsgKytpKSB7CisJCWVuZHBvaW50ID0gYnVsa19vdXRfZW5kcG9pbnRbaV07CisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCXBvcnQtPndyaXRlX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCWlmICghcG9ydC0+d3JpdGVfdXJiKSB7CisJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk5vIGZyZWUgdXJicyBhdmFpbGFibGVcbiIpOworCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJfQorCQlidWZmZXJfc2l6ZSA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSk7CisJCXBvcnQtPmJ1bGtfb3V0X3NpemUgPSBidWZmZXJfc2l6ZTsKKwkJcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCXBvcnQtPmJ1bGtfb3V0X2J1ZmZlciA9IGttYWxsb2MgKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwb3J0LT5idWxrX291dF9idWZmZXIpIHsKKwkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgYnVsa19vdXRfYnVmZmVyXG4iKTsKKwkJCWdvdG8gcHJvYmVfZXJyb3I7CisJCX0KKwkJdXNiX2ZpbGxfYnVsa191cmIgKHBvcnQtPndyaXRlX3VyYiwgZGV2LAorCQkJCSAgIHVzYl9zbmRidWxrcGlwZSAoZGV2LAorCQkJCQkJICAgIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkgICBwb3J0LT5idWxrX291dF9idWZmZXIsIGJ1ZmZlcl9zaXplLCAKKwkJCQkgICBzZXJpYWwtPnR5cGUtPndyaXRlX2J1bGtfY2FsbGJhY2ssCisJCQkJICAgcG9ydCk7CisJfQorCisJaWYgKHNlcmlhbC0+dHlwZS0+cmVhZF9pbnRfY2FsbGJhY2spIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9pbnRlcnJ1cHRfaW47ICsraSkgeworCQkJZW5kcG9pbnQgPSBpbnRlcnJ1cHRfaW5fZW5kcG9pbnRbaV07CisJCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQkJcG9ydC0+aW50ZXJydXB0X2luX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXBvcnQtPmludGVycnVwdF9pbl91cmIpIHsKKwkJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk5vIGZyZWUgdXJicyBhdmFpbGFibGVcbiIpOworCQkJCWdvdG8gcHJvYmVfZXJyb3I7CisJCQl9CisJCQlidWZmZXJfc2l6ZSA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSk7CisJCQlwb3J0LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCQlwb3J0LT5pbnRlcnJ1cHRfaW5fYnVmZmVyID0ga21hbGxvYyAoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCQkJaWYgKCFwb3J0LT5pbnRlcnJ1cHRfaW5fYnVmZmVyKSB7CisJCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSBpbnRlcnJ1cHRfaW5fYnVmZmVyXG4iKTsKKwkJCQlnb3RvIHByb2JlX2Vycm9yOworCQkJfQorCQkJdXNiX2ZpbGxfaW50X3VyYiAocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgZGV2LCAKKwkJCQkJICB1c2JfcmN2aW50cGlwZSAoZGV2LAorCQkJCQkJCSAgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJCQkgIHBvcnQtPmludGVycnVwdF9pbl9idWZmZXIsIGJ1ZmZlcl9zaXplLCAKKwkJCQkJICBzZXJpYWwtPnR5cGUtPnJlYWRfaW50X2NhbGxiYWNrLCBwb3J0LCAKKwkJCQkJICBlbmRwb2ludC0+YkludGVydmFsKTsKKwkJfQorCX0gZWxzZSBpZiAobnVtX2ludGVycnVwdF9pbikgeworCQlkYmcoInRoZSBkZXZpY2UgY2xhaW1zIHRvIHN1cHBvcnQgaW50ZXJydXB0IGluIHRyYW5zZmVycywgYnV0IHJlYWRfaW50X2NhbGxiYWNrIGlzIG5vdCBkZWZpbmVkIik7CisJfQorCQorCWlmIChzZXJpYWwtPnR5cGUtPndyaXRlX2ludF9jYWxsYmFjaykgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2ludGVycnVwdF9vdXQ7ICsraSkgeworCQkJZW5kcG9pbnQgPSBpbnRlcnJ1cHRfb3V0X2VuZHBvaW50W2ldOworCQkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJCXBvcnQtPmludGVycnVwdF9vdXRfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghcG9ydC0+aW50ZXJydXB0X291dF91cmIpIHsKKwkJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk5vIGZyZWUgdXJicyBhdmFpbGFibGVcbiIpOworCQkJCWdvdG8gcHJvYmVfZXJyb3I7CisJCQl9CisJCQlidWZmZXJfc2l6ZSA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSk7CisJCQlwb3J0LT5pbnRlcnJ1cHRfb3V0X3NpemUgPSBidWZmZXJfc2l6ZTsKKwkJCXBvcnQtPmludGVycnVwdF9vdXRfZW5kcG9pbnRBZGRyZXNzID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCQlwb3J0LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlciA9IGttYWxsb2MgKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghcG9ydC0+aW50ZXJydXB0X291dF9idWZmZXIpIHsKKwkJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkNvdWxkbid0IGFsbG9jYXRlIGludGVycnVwdF9vdXRfYnVmZmVyXG4iKTsKKwkJCQlnb3RvIHByb2JlX2Vycm9yOworCQkJfQorCQkJdXNiX2ZpbGxfaW50X3VyYiAocG9ydC0+aW50ZXJydXB0X291dF91cmIsIGRldiwKKwkJCQkJICB1c2Jfc25kaW50cGlwZSAoZGV2LAorCQkJCQkJCSAgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJCQkgIHBvcnQtPmludGVycnVwdF9vdXRfYnVmZmVyLCBidWZmZXJfc2l6ZSwKKwkJCQkJICBzZXJpYWwtPnR5cGUtPndyaXRlX2ludF9jYWxsYmFjaywgcG9ydCwKKwkJCQkJICBlbmRwb2ludC0+YkludGVydmFsKTsKKwkJfQorCX0gZWxzZSBpZiAobnVtX2ludGVycnVwdF9vdXQpIHsKKwkJZGJnKCJ0aGUgZGV2aWNlIGNsYWltcyB0byBzdXBwb3J0IGludGVycnVwdCBvdXQgdHJhbnNmZXJzLCBidXQgd3JpdGVfaW50X2NhbGxiYWNrIGlzIG5vdCBkZWZpbmVkIik7CisJfQorCQorCS8qIGlmIHRoaXMgZGV2aWNlIHR5cGUgaGFzIGFuIGF0dGFjaCBmdW5jdGlvbiwgY2FsbCBpdCAqLworCWlmICh0eXBlLT5hdHRhY2gpIHsKKwkJaWYgKCF0cnlfbW9kdWxlX2dldCh0eXBlLT5vd25lcikpIHsKKwkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAibW9kdWxlIGdldCBmYWlsZWQsIGV4aXRpbmdcbiIpOworCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJfQorCQlyZXR2YWwgPSB0eXBlLT5hdHRhY2ggKHNlcmlhbCk7CisJCW1vZHVsZV9wdXQodHlwZS0+b3duZXIpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCWdvdG8gcHJvYmVfZXJyb3I7CisJCWlmIChyZXR2YWwgPiAwKSB7CisJCQkvKiBxdWlldGx5IGFjY2VwdCB0aGlzIGRldmljZSwgYnV0IGRvbid0IGJpbmQgdG8gYSBzZXJpYWwgcG9ydAorCQkJICogYXMgaXQncyBhYm91dCB0byBkaXNhcHBlYXIgKi8KKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKworCS8qIHJlZ2lzdGVyIGFsbCBvZiB0aGUgaW5kaXZpZHVhbCBwb3J0cyB3aXRoIHRoZSBkcml2ZXIgY29yZSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fcG9ydHM7ICsraSkgeworCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQlwb3J0LT5kZXYucGFyZW50ID0gJmludGVyZmFjZS0+ZGV2OworCQlwb3J0LT5kZXYuZHJpdmVyID0gTlVMTDsKKwkJcG9ydC0+ZGV2LmJ1cyA9ICZ1c2Jfc2VyaWFsX2J1c190eXBlOworCQlwb3J0LT5kZXYucmVsZWFzZSA9ICZwb3J0X3JlbGVhc2U7CisKKwkJc25wcmludGYgKCZwb3J0LT5kZXYuYnVzX2lkWzBdLCBzaXplb2YocG9ydC0+ZGV2LmJ1c19pZCksICJ0dHlVU0IlZCIsIHBvcnQtPm51bWJlcik7CisJCWRiZyAoIiVzIC0gcmVnaXN0ZXJpbmcgJXMiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPmRldi5idXNfaWQpOworCQlkZXZpY2VfcmVnaXN0ZXIgKCZwb3J0LT5kZXYpOworCX0KKworCXVzYl9zZXJpYWxfY29uc29sZV9pbml0IChkZWJ1ZywgbWlub3IpOworCitleGl0OgorCS8qIHN1Y2Nlc3MgKi8KKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRlcmZhY2UsIHNlcmlhbCk7CisJcmV0dXJuIDA7CisKK3Byb2JlX2Vycm9yOgorCWZvciAoaSA9IDA7IGkgPCBudW1fYnVsa19pbjsgKytpKSB7CisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCWlmICghcG9ydCkKKwkJCWNvbnRpbnVlOworCQlpZiAocG9ydC0+cmVhZF91cmIpCisJCQl1c2JfZnJlZV91cmIgKHBvcnQtPnJlYWRfdXJiKTsKKwkJa2ZyZWUocG9ydC0+YnVsa19pbl9idWZmZXIpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1bGtfb3V0OyArK2kpIHsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJaWYgKCFwb3J0KQorCQkJY29udGludWU7CisJCWlmIChwb3J0LT53cml0ZV91cmIpCisJCQl1c2JfZnJlZV91cmIgKHBvcnQtPndyaXRlX3VyYik7CisJCWtmcmVlKHBvcnQtPmJ1bGtfb3V0X2J1ZmZlcik7CisJfQorCWZvciAoaSA9IDA7IGkgPCBudW1faW50ZXJydXB0X2luOyArK2kpIHsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJaWYgKCFwb3J0KQorCQkJY29udGludWU7CisJCWlmIChwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKQorCQkJdXNiX2ZyZWVfdXJiIChwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwkJa2ZyZWUocG9ydC0+aW50ZXJydXB0X2luX2J1ZmZlcik7CisJfQorCWZvciAoaSA9IDA7IGkgPCBudW1faW50ZXJydXB0X291dDsgKytpKSB7CisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCWlmICghcG9ydCkKKwkJCWNvbnRpbnVlOworCQlpZiAocG9ydC0+aW50ZXJydXB0X291dF91cmIpCisJCQl1c2JfZnJlZV91cmIgKHBvcnQtPmludGVycnVwdF9vdXRfdXJiKTsKKwkJa2ZyZWUocG9ydC0+aW50ZXJydXB0X291dF9idWZmZXIpOworCX0KKworCS8qIHJldHVybiB0aGUgbWlub3IgcmFuZ2UgdGhhdCB0aGlzIGRldmljZSBoYWQgKi8KKwlyZXR1cm5fc2VyaWFsIChzZXJpYWwpOworCisJLyogZnJlZSB1cCBhbnkgbWVtb3J5IHRoYXQgd2UgYWxsb2NhdGVkICovCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRfcG9pbnRlcnM7ICsraSkKKwkJa2ZyZWUoc2VyaWFsLT5wb3J0W2ldKTsKKwlrZnJlZSAoc2VyaWFsKTsKKwlyZXR1cm4gLUVJTzsKK30KKwordm9pZCB1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gdXNiX2dldF9pbnRmZGF0YSAoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaW50ZXJmYWNlLT5kZXY7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGVyZmFjZSwgTlVMTCk7CisJaWYgKHNlcmlhbCkgeworCQlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJCWlmIChwb3J0ICYmIHBvcnQtPnR0eSkKKwkJCQl0dHlfaGFuZ3VwKHBvcnQtPnR0eSk7CisJCX0KKwkJLyogbGV0IHRoZSBsYXN0IGhvbGRlciBvZiB0aGlzIG9iamVjdCAKKwkJICogY2F1c2UgaXQgdG8gYmUgY2xlYW5lZCB1cCAqLworCQlrcmVmX3B1dCgmc2VyaWFsLT5rcmVmLCBkZXN0cm95X3NlcmlhbCk7CisJfQorCWRldl9pbmZvKGRldiwgImRldmljZSBkaXNjb25uZWN0ZWRcbiIpOworfQorCitzdGF0aWMgc3RydWN0IHR0eV9vcGVyYXRpb25zIHNlcmlhbF9vcHMgPSB7CisJLm9wZW4gPQkJCXNlcmlhbF9vcGVuLAorCS5jbG9zZSA9CQlzZXJpYWxfY2xvc2UsCisJLndyaXRlID0JCXNlcmlhbF93cml0ZSwKKwkud3JpdGVfcm9vbSA9CQlzZXJpYWxfd3JpdGVfcm9vbSwKKwkuaW9jdGwgPQkJc2VyaWFsX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQlzZXJpYWxfc2V0X3Rlcm1pb3MsCisJLnRocm90dGxlID0JCXNlcmlhbF90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQlzZXJpYWxfdW50aHJvdHRsZSwKKwkuYnJlYWtfY3RsID0JCXNlcmlhbF9icmVhaywKKwkuY2hhcnNfaW5fYnVmZmVyID0Jc2VyaWFsX2NoYXJzX2luX2J1ZmZlciwKKwkucmVhZF9wcm9jID0JCXNlcmlhbF9yZWFkX3Byb2MsCisJLnRpb2NtZ2V0ID0JCXNlcmlhbF90aW9jbWdldCwKKwkudGlvY21zZXQgPQkJc2VyaWFsX3Rpb2Ntc2V0LAorfTsKKworc3RydWN0IHR0eV9kcml2ZXIgKnVzYl9zZXJpYWxfdHR5X2RyaXZlcjsKKworc3RhdGljIGludCBfX2luaXQgdXNiX3NlcmlhbF9pbml0KHZvaWQpCit7CisJaW50IGk7CisJaW50IHJlc3VsdDsKKworCXVzYl9zZXJpYWxfdHR5X2RyaXZlciA9IGFsbG9jX3R0eV9kcml2ZXIoU0VSSUFMX1RUWV9NSU5PUlMpOworCWlmICghdXNiX3NlcmlhbF90dHlfZHJpdmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIEluaXRpYWxpemUgb3VyIGdsb2JhbCBkYXRhICovCisJZm9yIChpID0gMDsgaSA8IFNFUklBTF9UVFlfTUlOT1JTOyArK2kpIHsKKwkJc2VyaWFsX3RhYmxlW2ldID0gTlVMTDsKKwl9CisKKwlyZXN1bHQgPSBidXNfcmVnaXN0ZXIoJnVzYl9zZXJpYWxfYnVzX3R5cGUpOworCWlmIChyZXN1bHQpIHsKKwkJZXJyKCIlcyAtIHJlZ2lzdGVyaW5nIGJ1cyBkcml2ZXIgZmFpbGVkIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0X2J1czsKKwl9CisKKwkvKiByZWdpc3RlciB0aGUgZ2VuZXJpYyBkcml2ZXIsIGlmIHdlIHNob3VsZCAqLworCXJlc3VsdCA9IHVzYl9zZXJpYWxfZ2VuZXJpY19yZWdpc3RlcihkZWJ1Zyk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZXJyKCIlcyAtIHJlZ2lzdGVyaW5nIGdlbmVyaWMgZHJpdmVyIGZhaWxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXhpdF9nZW5lcmljOworCX0KKworCXVzYl9zZXJpYWxfdHR5X2RyaXZlci0+b3duZXIgPSBUSElTX01PRFVMRTsKKwl1c2Jfc2VyaWFsX3R0eV9kcml2ZXItPmRyaXZlcl9uYW1lID0gInVzYnNlcmlhbCI7CisJdXNiX3NlcmlhbF90dHlfZHJpdmVyLT5kZXZmc19uYW1lID0gInVzYi90dHMvIjsKKwl1c2Jfc2VyaWFsX3R0eV9kcml2ZXItPm5hbWUgPSAJInR0eVVTQiI7CisJdXNiX3NlcmlhbF90dHlfZHJpdmVyLT5tYWpvciA9IFNFUklBTF9UVFlfTUFKT1I7CisJdXNiX3NlcmlhbF90dHlfZHJpdmVyLT5taW5vcl9zdGFydCA9IDA7CisJdXNiX3NlcmlhbF90dHlfZHJpdmVyLT50eXBlID0gVFRZX0RSSVZFUl9UWVBFX1NFUklBTDsKKwl1c2Jfc2VyaWFsX3R0eV9kcml2ZXItPnN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUw7CisJdXNiX3NlcmlhbF90dHlfZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX05PX0RFVkZTOworCXVzYl9zZXJpYWxfdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOworCXVzYl9zZXJpYWxfdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcgPSBCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7CisJdHR5X3NldF9vcGVyYXRpb25zKHVzYl9zZXJpYWxfdHR5X2RyaXZlciwgJnNlcmlhbF9vcHMpOworCXJlc3VsdCA9IHR0eV9yZWdpc3Rlcl9kcml2ZXIodXNiX3NlcmlhbF90dHlfZHJpdmVyKTsKKwlpZiAocmVzdWx0KSB7CisJCWVycigiJXMgLSB0dHlfcmVnaXN0ZXJfZHJpdmVyIGZhaWxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXhpdF9yZWdfZHJpdmVyOworCX0KKworCS8qIHJlZ2lzdGVyIHRoZSBVU0IgZHJpdmVyICovCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZ1c2Jfc2VyaWFsX2RyaXZlcik7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZXJyKCIlcyAtIHVzYl9yZWdpc3RlciBmYWlsZWQiLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGV4aXRfdHR5OworCX0KKworCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKworCXJldHVybiByZXN1bHQ7CisKK2V4aXRfdHR5OgorCXR0eV91bnJlZ2lzdGVyX2RyaXZlcih1c2Jfc2VyaWFsX3R0eV9kcml2ZXIpOworCitleGl0X3JlZ19kcml2ZXI6CisJdXNiX3NlcmlhbF9nZW5lcmljX2RlcmVnaXN0ZXIoKTsKKworZXhpdF9nZW5lcmljOgorCWJ1c191bnJlZ2lzdGVyKCZ1c2Jfc2VyaWFsX2J1c190eXBlKTsKKworZXhpdF9idXM6CisJZXJyICgiJXMgLSByZXR1cm5pbmcgd2l0aCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwlwdXRfdHR5X2RyaXZlcih1c2Jfc2VyaWFsX3R0eV9kcml2ZXIpOworCXJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IHVzYl9zZXJpYWxfZXhpdCh2b2lkKQoreworCXVzYl9zZXJpYWxfY29uc29sZV9leGl0KCk7CisKKwl1c2Jfc2VyaWFsX2dlbmVyaWNfZGVyZWdpc3RlcigpOworCisJdXNiX2RlcmVnaXN0ZXIoJnVzYl9zZXJpYWxfZHJpdmVyKTsKKwl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIodXNiX3NlcmlhbF90dHlfZHJpdmVyKTsKKwlwdXRfdHR5X2RyaXZlcih1c2Jfc2VyaWFsX3R0eV9kcml2ZXIpOworCWJ1c191bnJlZ2lzdGVyKCZ1c2Jfc2VyaWFsX2J1c190eXBlKTsKK30KKworCittb2R1bGVfaW5pdCh1c2Jfc2VyaWFsX2luaXQpOworbW9kdWxlX2V4aXQodXNiX3NlcmlhbF9leGl0KTsKKworI2RlZmluZSBzZXRfdG9fZ2VuZXJpY19pZl9udWxsKHR5cGUsIGZ1bmN0aW9uKQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAoIXR5cGUtPmZ1bmN0aW9uKSB7CQkJCQlcCisJCQl0eXBlLT5mdW5jdGlvbiA9IHVzYl9zZXJpYWxfZ2VuZXJpY18jI2Z1bmN0aW9uOwlcCisJCQlkYmcoIkhhZCB0byBvdmVycmlkZSB0aGUgIiAjZnVuY3Rpb24JCVwKKwkJCQkgIiB1c2Igc2VyaWFsIG9wZXJhdGlvbiB3aXRoIHRoZSBnZW5lcmljIG9uZS4iKTtcCisJCQl9CQkJCQkJXAorCX0gd2hpbGUgKDApCisKK3N0YXRpYyB2b2lkIGZpeHVwX2dlbmVyaWMoc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKmRldmljZSkKK3sKKwlzZXRfdG9fZ2VuZXJpY19pZl9udWxsKGRldmljZSwgb3Blbik7CisJc2V0X3RvX2dlbmVyaWNfaWZfbnVsbChkZXZpY2UsIHdyaXRlKTsKKwlzZXRfdG9fZ2VuZXJpY19pZl9udWxsKGRldmljZSwgY2xvc2UpOworCXNldF90b19nZW5lcmljX2lmX251bGwoZGV2aWNlLCB3cml0ZV9yb29tKTsKKwlzZXRfdG9fZ2VuZXJpY19pZl9udWxsKGRldmljZSwgY2hhcnNfaW5fYnVmZmVyKTsKKwlzZXRfdG9fZ2VuZXJpY19pZl9udWxsKGRldmljZSwgcmVhZF9idWxrX2NhbGxiYWNrKTsKKwlzZXRfdG9fZ2VuZXJpY19pZl9udWxsKGRldmljZSwgd3JpdGVfYnVsa19jYWxsYmFjayk7CisJc2V0X3RvX2dlbmVyaWNfaWZfbnVsbChkZXZpY2UsIHNodXRkb3duKTsKK30KKworaW50IHVzYl9zZXJpYWxfcmVnaXN0ZXIoc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKm5ld19kZXZpY2UpCit7CisJaW50IHJldHZhbDsKKworCWZpeHVwX2dlbmVyaWMobmV3X2RldmljZSk7CisKKwkvKiBBZGQgdGhpcyBkZXZpY2UgdG8gb3VyIGxpc3Qgb2YgZGV2aWNlcyAqLworCWxpc3RfYWRkKCZuZXdfZGV2aWNlLT5kcml2ZXJfbGlzdCwgJnVzYl9zZXJpYWxfZHJpdmVyX2xpc3QpOworCisJcmV0dmFsID0gdXNiX3NlcmlhbF9idXNfcmVnaXN0ZXIobmV3X2RldmljZSk7CisJaWYgKHJldHZhbCkgeworCQllcnIoInByb2JsZW0gJWQgd2hlbiByZWdpc3RlcmluZyBkcml2ZXIgJXMiLCByZXR2YWwsIG5ld19kZXZpY2UtPm5hbWUpOworCQlsaXN0X2RlbCgmbmV3X2RldmljZS0+ZHJpdmVyX2xpc3QpOworCX0KKwllbHNlCisJCWluZm8oIlVTQiBTZXJpYWwgc3VwcG9ydCByZWdpc3RlcmVkIGZvciAlcyIsIG5ld19kZXZpY2UtPm5hbWUpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworCit2b2lkIHVzYl9zZXJpYWxfZGVyZWdpc3RlcihzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqZGV2aWNlKQoreworCWluZm8oIlVTQiBTZXJpYWwgZGVyZWdpc3RlcmluZyBkcml2ZXIgJXMiLCBkZXZpY2UtPm5hbWUpOworCWxpc3RfZGVsKCZkZXZpY2UtPmRyaXZlcl9saXN0KTsKKwl1c2Jfc2VyaWFsX2J1c19kZXJlZ2lzdGVyKGRldmljZSk7Cit9CisKKworCisvKiBJZiB0aGUgdXNiLXNlcmlhbCBjb3JlIGlzIGJ1aWx0IGludG8gdGhlIGNvcmUsIHRoZSB1c2Itc2VyaWFsIGRyaXZlcnMKKyAgIG5lZWQgdGhlc2Ugc3ltYm9scyB0byBsb2FkIHByb3Blcmx5IGFzIG1vZHVsZXMuICovCitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2VyaWFsX3JlZ2lzdGVyKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfZGVyZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2VyaWFsX3Byb2JlKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfZGlzY29ubmVjdCk7CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2VyaWFsX3BvcnRfc29mdGludCk7CisKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfVkVSU0lPTiggRFJJVkVSX1ZFUlNJT04gKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZjBjNDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5oCkBAIC0wLDAgKzEsMzMyIEBACisvKgorICogVVNCIFNlcmlhbCBDb252ZXJ0ZXIgZHJpdmVyCisgKgorICoJQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAwNAorICoJICAgIEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcyBkcml2ZXIKKyAqCisgKiAoMDMvMjYvMjAwMikgZ2toCisgKglyZW1vdmVkIHRoZSBwb3J0LT50dHkgY2hlY2sgZnJvbSBwb3J0X3BhcmFub2lhX2NoZWNrKCkgZHVlIHRvIHNlcmlhbAorICoJY29uc29sZXMgbm90IGhhdmluZyBhIHR0eSBkZXZpY2UgYXNzaWduZWQgdG8gdGhlbS4KKyAqCisgKiAoMTIvMDMvMjAwMSkgZ2toCisgKglyZW1vdmVkIGFjdGl2ZSBmcm9tIHRoZSBwb3J0IHN0cnVjdHVyZS4KKyAqCWFkZGVkIGRvY3VtZW50YXRpb24gdG8gdGhlIHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgc3RydWN0dXJlCisgKgorICogKDEwLzEwLzIwMDEpIGdraAorICoJYWRkZWQgdmVuZG9yIGFuZCBwcm9kdWN0IHRvIHNlcmlhbCBzdHJ1Y3R1cmUuICBOZWVkZWQgdG8gZGV0ZXJtaW5lIGRldmljZQorICoJb3duZXIgd2hlbiB0aGUgZGV2aWNlIGlzIGRpc2Nvbm5lY3RlZC4KKyAqCisgKiAoMDUvMzAvMjAwMSkgZ2toCisgKglhZGRlZCBzZW0gdG8gcG9ydCBzdHJ1Y3R1cmUgYW5kIHJlbW92ZWQgcG9ydF9sb2NrCisgKgorICogKDEwLzA1LzIwMDApIGdraAorICoJQWRkZWQgaW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzcyBhbmQgYnVsa19pbl9lbmRwb2ludEFkZHJlc3MgdG8gaGVscAorICoJZml4IGJ1ZyB3aXRoIHVyYi0+ZGV2IG5vdCBiZWluZyBzZXQgcHJvcGVybHksIG5vdyB0aGF0IHRoZSB1c2IgY29yZQorICoJbmVlZHMgaXQuCisgKiAKKyAqICgwOS8xMS8yMDAwKSBna2gKKyAqCUFkZGVkIHVzYl9zZXJpYWxfZGVidWdfZGF0YSBmdW5jdGlvbiB0byBoZWxwIGdldCByaWQgb2YgI0RFQlVHIGluIHRoZQorICoJZHJpdmVycy4KKyAqCisgKiAoMDgvMjgvMjAwMCkgZ2toCisgKglBZGRlZCBwb3J0X2xvY2sgdG8gcG9ydCBzdHJ1Y3R1cmUuCisgKgorICogKDA4LzA4LzIwMDApIGdraAorICoJQWRkZWQgb3Blbl9jb3VudCB0byBwb3J0IHN0cnVjdHVyZS4KKyAqCisgKiAoMDcvMjMvMjAwMCkgZ2toCisgKglBZGRlZCBidWxrX291dF9lbmRwb2ludEFkZHJlc3MgdG8gcG9ydCBzdHJ1Y3R1cmUuCisgKgorICogKDA3LzE5LzIwMDApIGdraCwgcGJlcmdlciwgYW5kIGJvcmNoZXJzCisgKglNb2RpZmljYXRpb25zIHRvIGFsbG93IHVzYi1zZXJpYWwgZHJpdmVycyB0byBiZSBtb2R1bGVzLgorICoKKyAqIAorICovCisKKworI2lmbmRlZiBfX0xJTlVYX1VTQl9TRVJJQUxfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9TRVJJQUxfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorCisjZGVmaW5lIFNFUklBTF9UVFlfTUFKT1IJMTg4CS8qIE5pY2UgbGVnYWwgbnVtYmVyIG5vdyAqLworI2RlZmluZSBTRVJJQUxfVFRZX01JTk9SUwkyNTUJLyogbG9hZHMgb2YgZGV2aWNlcyA6KSAqLworCisjZGVmaW5lIE1BWF9OVU1fUE9SVFMJCTgJLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIHBvcnRzIG9uZSBkZXZpY2UgY2FuIGdyYWIgYXQgb25jZSAqLworCisvKiBwYXJpdHkgY2hlY2sgZmxhZyAqLworI2RlZmluZSBSRUxFVkFOVF9JRkxBRyhpZmxhZykJKGlmbGFnICYgKElHTkJSS3xCUktJTlR8SUdOUEFSfFBBUk1SS3xJTlBDSykpCisKKy8qKgorICogdXNiX3NlcmlhbF9wb3J0OiBzdHJ1Y3R1cmUgZm9yIHRoZSBzcGVjaWZpYyBwb3J0cyBvZiBhIGRldmljZS4KKyAqIEBzZXJpYWw6IHBvaW50ZXIgYmFjayB0byB0aGUgc3RydWN0IHVzYl9zZXJpYWwgb3duZXIgb2YgdGhpcyBwb3J0LgorICogQHR0eTogcG9pbnRlciB0byB0aGUgY29ycmVzcG9uZGluZyB0dHkgZm9yIHRoaXMgcG9ydC4KKyAqIEBudW1iZXI6IHRoZSBudW1iZXIgb2YgdGhlIHBvcnQgKHRoZSBtaW5vciBudW1iZXIpLgorICogQGludGVycnVwdF9pbl9idWZmZXI6IHBvaW50ZXIgdG8gdGhlIGludGVycnVwdCBpbiBidWZmZXIgZm9yIHRoaXMgcG9ydC4KKyAqIEBpbnRlcnJ1cHRfaW5fdXJiOiBwb2ludGVyIHRvIHRoZSBpbnRlcnJ1cHQgaW4gc3RydWN0IHVyYiBmb3IgdGhpcyBwb3J0LgorICogQGludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3M6IGVuZHBvaW50IGFkZHJlc3MgZm9yIHRoZSBpbnRlcnJ1cHQgaW4gcGlwZQorICoJZm9yIHRoaXMgcG9ydC4KKyAqIEBpbnRlcnJ1cHRfb3V0X2J1ZmZlcjogcG9pbnRlciB0byB0aGUgaW50ZXJydXB0IG91dCBidWZmZXIgZm9yIHRoaXMgcG9ydC4KKyAqIEBpbnRlcnJ1cHRfb3V0X3NpemU6IHRoZSBzaXplIG9mIHRoZSBpbnRlcnJ1cHRfb3V0X2J1ZmZlciwgaW4gYnl0ZXMuCisgKiBAaW50ZXJydXB0X291dF91cmI6IHBvaW50ZXIgdG8gdGhlIGludGVycnVwdCBvdXQgc3RydWN0IHVyYiBmb3IgdGhpcyBwb3J0LgorICogQGludGVycnVwdF9vdXRfZW5kcG9pbnRBZGRyZXNzOiBlbmRwb2ludCBhZGRyZXNzIGZvciB0aGUgaW50ZXJydXB0IG91dCBwaXBlCisgKiAJZm9yIHRoaXMgcG9ydC4KKyAqIEBidWxrX2luX2J1ZmZlcjogcG9pbnRlciB0byB0aGUgYnVsayBpbiBidWZmZXIgZm9yIHRoaXMgcG9ydC4KKyAqIEByZWFkX3VyYjogcG9pbnRlciB0byB0aGUgYnVsayBpbiBzdHJ1Y3QgdXJiIGZvciB0aGlzIHBvcnQuCisgKiBAYnVsa19pbl9lbmRwb2ludEFkZHJlc3M6IGVuZHBvaW50IGFkZHJlc3MgZm9yIHRoZSBidWxrIGluIHBpcGUgZm9yIHRoaXMKKyAqCXBvcnQuCisgKiBAYnVsa19vdXRfYnVmZmVyOiBwb2ludGVyIHRvIHRoZSBidWxrIG91dCBidWZmZXIgZm9yIHRoaXMgcG9ydC4KKyAqIEBidWxrX291dF9zaXplOiB0aGUgc2l6ZSBvZiB0aGUgYnVsa19vdXRfYnVmZmVyLCBpbiBieXRlcy4KKyAqIEB3cml0ZV91cmI6IHBvaW50ZXIgdG8gdGhlIGJ1bGsgb3V0IHN0cnVjdCB1cmIgZm9yIHRoaXMgcG9ydC4KKyAqIEBidWxrX291dF9lbmRwb2ludEFkZHJlc3M6IGVuZHBvaW50IGFkZHJlc3MgZm9yIHRoZSBidWxrIG91dCBwaXBlIGZvciB0aGlzCisgKglwb3J0LgorICogQHdyaXRlX3dhaXQ6IGEgd2FpdF9xdWV1ZV9oZWFkX3QgdXNlZCBieSB0aGUgcG9ydC4KKyAqIEB3b3JrOiB3b3JrIHF1ZXVlIGVudHJ5IGZvciB0aGUgbGluZSBkaXNjaXBsaW5lIHdha2luZyB1cC4KKyAqIEBvcGVuX2NvdW50OiBudW1iZXIgb2YgdGltZXMgdGhpcyBwb3J0IGhhcyBiZWVuIG9wZW5lZC4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGJ5IHRoZSB1c2Itc2VyaWFsIGNvcmUgYW5kIGRyaXZlcnMgZm9yIHRoZSBzcGVjaWZpYworICogcG9ydHMgb2YgYSBkZXZpY2UuCisgKi8KK3N0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgeworCXN0cnVjdCB1c2Jfc2VyaWFsICoJc2VyaWFsOworCXN0cnVjdCB0dHlfc3RydWN0ICoJdHR5OworCXVuc2lnbmVkIGNoYXIJCW51bWJlcjsKKworCXVuc2lnbmVkIGNoYXIgKgkJaW50ZXJydXB0X2luX2J1ZmZlcjsKKwlzdHJ1Y3QgdXJiICoJCWludGVycnVwdF9pbl91cmI7CisJX191OAkJCWludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3M7CisKKwl1bnNpZ25lZCBjaGFyICoJCWludGVycnVwdF9vdXRfYnVmZmVyOworCWludAkJCWludGVycnVwdF9vdXRfc2l6ZTsKKwlzdHJ1Y3QgdXJiICoJCWludGVycnVwdF9vdXRfdXJiOworCV9fdTgJCQlpbnRlcnJ1cHRfb3V0X2VuZHBvaW50QWRkcmVzczsKKworCXVuc2lnbmVkIGNoYXIgKgkJYnVsa19pbl9idWZmZXI7CisJaW50CQkJYnVsa19pbl9zaXplOworCXN0cnVjdCB1cmIgKgkJcmVhZF91cmI7CisJX191OAkJCWJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzOworCisJdW5zaWduZWQgY2hhciAqCQlidWxrX291dF9idWZmZXI7CisJaW50CQkJYnVsa19vdXRfc2l6ZTsKKwlzdHJ1Y3QgdXJiICoJCXdyaXRlX3VyYjsKKwlfX3U4CQkJYnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzOworCisJd2FpdF9xdWV1ZV9oZWFkX3QJd3JpdGVfd2FpdDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKKwlpbnQJCQlvcGVuX2NvdW50OworCXN0cnVjdCBkZXZpY2UJCWRldjsKK307CisjZGVmaW5lIHRvX3VzYl9zZXJpYWxfcG9ydChkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCwgZGV2KQorCisvKiBnZXQgYW5kIHNldCB0aGUgcG9ydCBwcml2YXRlIGRhdGEgcG9pbnRlciBoZWxwZXIgZnVuY3Rpb25zICovCitzdGF0aWMgaW5saW5lIHZvaWQgKnVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlyZXR1cm4gZGV2X2dldF9kcnZkYXRhKCZwb3J0LT5kZXYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCB2b2lkICpkYXRhKQoreworCWRldl9zZXRfZHJ2ZGF0YSgmcG9ydC0+ZGV2LCBkYXRhKTsKK30KKworLyoqCisgKiB1c2Jfc2VyaWFsIC0gc3RydWN0dXJlIHVzZWQgYnkgdGhlIHVzYi1zZXJpYWwgY29yZSBmb3IgYSBkZXZpY2UKKyAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIHN0cnVjdCB1c2JfZGV2aWNlIGZvciB0aGlzIGRldmljZQorICogQHR5cGU6IHBvaW50ZXIgdG8gdGhlIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGZvciB0aGlzIGRldmljZQorICogQGludGVyZmFjZTogcG9pbnRlciB0byB0aGUgc3RydWN0IHVzYl9pbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlCisgKiBAbWlub3I6IHRoZSBzdGFydGluZyBtaW5vciBudW1iZXIgZm9yIHRoaXMgZGV2aWNlCisgKiBAbnVtX3BvcnRzOiB0aGUgbnVtYmVyIG9mIHBvcnRzIHRoaXMgZGV2aWNlIGhhcworICogQG51bV9pbnRlcnJ1cHRfaW46IG51bWJlciBvZiBpbnRlcnJ1cHQgaW4gZW5kcG9pbnRzIHdlIGhhdmUKKyAqIEBudW1faW50ZXJydXB0X291dDogbnVtYmVyIG9mIGludGVycnVwdCBvdXQgZW5kcG9pbnRzIHdlIGhhdmUKKyAqIEBudW1fYnVsa19pbjogbnVtYmVyIG9mIGJ1bGsgaW4gZW5kcG9pbnRzIHdlIGhhdmUKKyAqIEBudW1fYnVsa19vdXQ6IG51bWJlciBvZiBidWxrIG91dCBlbmRwb2ludHMgd2UgaGF2ZQorICogQHBvcnQ6IGFycmF5IG9mIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgc3RydWN0dXJlcyBmb3IgdGhlIGRpZmZlcmVudCBwb3J0cy4KKyAqIEBwcml2YXRlOiBwbGFjZSB0byBwdXQgYW55IGRyaXZlciBzcGVjaWZpYyBpbmZvcm1hdGlvbiB0aGF0IGlzIG5lZWRlZC4gIFRoZQorICoJdXNiLXNlcmlhbCBkcml2ZXIgaXMgcmVxdWlyZWQgdG8gbWFuYWdlIHRoaXMgZGF0YSwgdGhlIHVzYi1zZXJpYWwgY29yZQorICoJd2lsbCBub3QgdG91Y2ggdGhpcy4gIFVzZSB1c2JfZ2V0X3NlcmlhbF9kYXRhKCkgYW5kCisgKgl1c2Jfc2V0X3NlcmlhbF9kYXRhKCkgdG8gYWNjZXNzIHRoaXMuCisgKi8KK3N0cnVjdCB1c2Jfc2VyaWFsIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqCQlkZXY7CisJc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKgl0eXBlOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICoJCWludGVyZmFjZTsKKwl1bnNpZ25lZCBjaGFyCQkJbWlub3I7CisJdW5zaWduZWQgY2hhcgkJCW51bV9wb3J0czsKKwl1bnNpZ25lZCBjaGFyCQkJbnVtX3BvcnRfcG9pbnRlcnM7CisJY2hhcgkJCQludW1faW50ZXJydXB0X2luOworCWNoYXIJCQkJbnVtX2ludGVycnVwdF9vdXQ7CisJY2hhcgkJCQludW1fYnVsa19pbjsKKwljaGFyCQkJCW51bV9idWxrX291dDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICoJcG9ydFtNQVhfTlVNX1BPUlRTXTsKKwlzdHJ1Y3Qga3JlZgkJCWtyZWY7CisJdm9pZCAqCQkJCXByaXZhdGU7Cit9OworI2RlZmluZSB0b191c2Jfc2VyaWFsKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgdXNiX3NlcmlhbCwga3JlZikKKworI2RlZmluZSBOVU1fRE9OVF9DQVJFCSgtMSkKKworLyogZ2V0IGFuZCBzZXQgdGhlIHNlcmlhbCBwcml2YXRlIGRhdGEgcG9pbnRlciBoZWxwZXIgZnVuY3Rpb25zICovCitzdGF0aWMgaW5saW5lIHZvaWQgKnVzYl9nZXRfc2VyaWFsX2RhdGEgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJcmV0dXJuIHNlcmlhbC0+cHJpdmF0ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVzYl9zZXRfc2VyaWFsX2RhdGEgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHZvaWQgKmRhdGEpCit7CisJc2VyaWFsLT5wcml2YXRlID0gZGF0YTsKK30KKworLyoqCisgKiB1c2Jfc2VyaWFsX2RldmljZV90eXBlIC0gYSBzdHJ1Y3R1cmUgdGhhdCBkZWZpbmVzIGEgdXNiIHNlcmlhbCBkZXZpY2UKKyAqIEBvd25lcjogcG9pbnRlciB0byB0aGUgbW9kdWxlIHRoYXQgb3ducyB0aGlzIGRldmljZS4KKyAqIEBuYW1lOiBwb2ludGVyIHRvIGEgc3RyaW5nIHRoYXQgZGVzY3JpYmVzIHRoaXMgZGV2aWNlLiAgVGhpcyBzdHJpbmcgdXNlZAorICoJaW4gdGhlIHN5c2xvZyBtZXNzYWdlcyB3aGVuIGEgZGV2aWNlIGlzIGluc2VydGVkIG9yIHJlbW92ZWQuCisgKiBAc2hvcnRfbmFtZTogYSBwb2ludGVyIHRvIGEgc3RyaW5nIHRoYXQgZGVzY3JpYmVzIHRoaXMgZGV2aWNlIGluCisgKglLT0JKX05BTUVfTEVOIGNoYXJhY3RlcnMgb3IgbGVzcy4gIFRoaXMgaXMgdXNlZCBmb3IgdGhlIHN5c2ZzIGludGVyZmFjZQorICoJdG8gZGVzY3JpYmUgdGhlIGRyaXZlci4KKyAqIEBpZF90YWJsZTogcG9pbnRlciB0byBhIGxpc3Qgb2YgdXNiX2RldmljZV9pZCBzdHJ1Y3R1cmVzIHRoYXQgZGVmaW5lIGFsbAorICoJb2YgdGhlIGRldmljZXMgdGhpcyBzdHJ1Y3R1cmUgY2FuIHN1cHBvcnQuCisgKiBAbnVtX2ludGVycnVwdF9pbjogdGhlIG51bWJlciBvZiBpbnRlcnJ1cHQgaW4gZW5kcG9pbnRzIHRoaXMgZGV2aWNlIHdpbGwKKyAqCWhhdmUuCisgKiBAbnVtX2ludGVycnVwdF9vdXQ6IHRoZSBudW1iZXIgb2YgaW50ZXJydXB0IG91dCBlbmRwb2ludHMgdGhpcyBkZXZpY2Ugd2lsbAorICoJaGF2ZS4KKyAqIEBudW1fYnVsa19pbjogdGhlIG51bWJlciBvZiBidWxrIGluIGVuZHBvaW50cyB0aGlzIGRldmljZSB3aWxsIGhhdmUuCisgKiBAbnVtX2J1bGtfb3V0OiB0aGUgbnVtYmVyIG9mIGJ1bGsgb3V0IGVuZHBvaW50cyB0aGlzIGRldmljZSB3aWxsIGhhdmUuCisgKiBAbnVtX3BvcnRzOiB0aGUgbnVtYmVyIG9mIGRpZmZlcmVudCBwb3J0cyB0aGlzIGRldmljZSB3aWxsIGhhdmUuCisgKiBAY2FsY19udW1fcG9ydHM6IHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaG93IG1hbnkgcG9ydHMgdGhpcworICoJZGV2aWNlIGhhcyBkeW5hbWljYWxseS4gIEl0IHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBwcm9iZSgpCisgKgljYWxsYmFjayBpcyBjYWxsZWQsIGJ1dCBiZWZvcmUgYXR0YWNoKCkKKyAqIEBwcm9iZTogcG9pbnRlciB0byB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24uCisgKglUaGlzIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIGRldmljZSBpcyBpbnNlcnRlZCBpbnRvIHRoZSBzeXN0ZW0sCisgKglidXQgYmVmb3JlIHRoZSBkZXZpY2UgaGFzIGJlZW4gZnVsbHkgaW5pdGlhbGl6ZWQgYnkgdGhlIHVzYl9zZXJpYWwKKyAqCXN1YnN5c3RlbS4gIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGRvd25sb2FkIGFueSBmaXJtd2FyZSB0byB0aGUgZGV2aWNlLAorICoJb3IgYW55IG90aGVyIGVhcmx5IGluaXRpYWxpemF0aW9uIHRoYXQgbWlnaHQgYmUgbmVlZGVkLgorICoJUmV0dXJuIDAgdG8gY29udGludWUgb24gd2l0aCB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuICBBbnl0aGluZyAKKyAqCWVsc2Ugd2lsbCBhYm9ydCBpdC4KKyAqIEBhdHRhY2g6IHBvaW50ZXIgdG8gdGhlIGRyaXZlcidzIGF0dGFjaCBmdW5jdGlvbi4KKyAqCVRoaXMgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgc3RydWN0IHVzYl9zZXJpYWwgc3RydWN0dXJlIGlzIGZ1bGx5IHNldAorICoJc2V0IHVwLiAgRG8gYW55IGxvY2FsIGluaXRpYWxpemF0aW9uIG9mIHRoZSBkZXZpY2UsIG9yIGFueSBwcml2YXRlCisgKgltZW1vcnkgc3RydWN0dXJlIGFsbG9jYXRpb24gYXQgdGhpcyBwb2ludCBpbiB0aW1lLgorICogQHNodXRkb3duOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIncyBzaHV0ZG93biBmdW5jdGlvbi4gIFRoaXMgd2lsbCBiZQorICoJY2FsbGVkIHdoZW4gdGhlIGRldmljZSBpcyByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpcyBkZWZpbmVzIGEgVVNCIFNlcmlhbCBkZXZpY2UuICBJdCBwcm92aWRlcyBhbGwgb2YKKyAqIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHRoZSBVU0Igc2VyaWFsIGNvcmUgY29kZSBuZWVkcy4gIElmIHRoZSBmdW5jdGlvbgorICogcG9pbnRlcnMgYXJlIGRlZmluZWQsIHRoZW4gdGhlIFVTQiBzZXJpYWwgY29yZSBjb2RlIHdpbGwgY2FsbCB0aGVtIHdoZW4KKyAqIHRoZSBjb3JyZXNwb25kaW5nIHR0eSBwb3J0IGZ1bmN0aW9ucyBhcmUgY2FsbGVkLiAgSWYgdGhleSBhcmUgbm90CisgKiBjYWxsZWQsIHRoZSBnZW5lcmljIHNlcmlhbCBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KKyAqLworc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgeworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworCWNoYXIJKm5hbWU7CisJY2hhcgkqc2hvcnRfbmFtZTsKKwljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWRfdGFibGU7CisJY2hhcgludW1faW50ZXJydXB0X2luOworCWNoYXIJbnVtX2ludGVycnVwdF9vdXQ7CisJY2hhcgludW1fYnVsa19pbjsKKwljaGFyCW51bV9idWxrX291dDsKKwljaGFyCW51bV9wb3J0czsKKworCXN0cnVjdCBsaXN0X2hlYWQJZHJpdmVyX2xpc3Q7CisJc3RydWN0IGRldmljZV9kcml2ZXIJZHJpdmVyOworCisJaW50ICgqcHJvYmUpIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworCWludCAoKmF0dGFjaCkgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworCWludCAoKmNhbGNfbnVtX3BvcnRzKSAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CisKKwl2b2lkICgqc2h1dGRvd24pIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKKworCWludCAoKnBvcnRfcHJvYmUpIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKKwlpbnQgKCpwb3J0X3JlbW92ZSkgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworCisJLyogc2VyaWFsIGZ1bmN0aW9uIGNhbGxzICovCisJaW50ICAoKm9wZW4pCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxwKTsKKwl2b2lkICgqY2xvc2UpCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxwKTsKKwlpbnQgICgqd3JpdGUpCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOworCWludCAgKCp3cml0ZV9yb29tKQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CisJaW50ICAoKmlvY3RsKQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworCXZvaWQgKCpzZXRfdGVybWlvcykJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICogb2xkKTsKKwl2b2lkICgqYnJlYWtfY3RsKQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlKTsKKwlpbnQgICgqY2hhcnNfaW5fYnVmZmVyKQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CisJdm9pZCAoKnRocm90dGxlKQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CisJdm9pZCAoKnVudGhyb3R0bGUpCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKKwlpbnQgICgqdGlvY21nZXQpCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CisJaW50ICAoKnRpb2Ntc2V0KQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CisKKwl2b2lkICgqcmVhZF9pbnRfY2FsbGJhY2spKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCXZvaWQgKCp3cml0ZV9pbnRfY2FsbGJhY2spKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCXZvaWQgKCpyZWFkX2J1bGtfY2FsbGJhY2spKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCXZvaWQgKCp3cml0ZV9idWxrX2NhbGxiYWNrKShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK307CisjZGVmaW5lIHRvX3VzYl9zZXJpYWxfZHJpdmVyKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSwgZHJpdmVyKQorCitleHRlcm4gaW50ICB1c2Jfc2VyaWFsX3JlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlICpuZXdfZGV2aWNlKTsKK2V4dGVybiB2b2lkIHVzYl9zZXJpYWxfZGVyZWdpc3RlcihzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqZGV2aWNlKTsKK2V4dGVybiB2b2lkIHVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50KHZvaWQgKnByaXZhdGUpOworCitleHRlcm4gaW50IHVzYl9zZXJpYWxfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworZXh0ZXJuIHZvaWQgdXNiX3NlcmlhbF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSk7CisKK2V4dGVybiBpbnQgZXp1c2Jfd3JpdGVtZW1vcnkgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGludCBhZGRyZXNzLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuZ3RoLCBfX3U4IGJSZXF1ZXN0KTsKK2V4dGVybiBpbnQgZXp1c2Jfc2V0X3Jlc2V0IChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCB1bnNpZ25lZCBjaGFyIHJlc2V0X2JpdCk7CisKKy8qIFVTQiBTZXJpYWwgY29uc29sZSBmdW5jdGlvbnMgKi8KKyNpZmRlZiBDT05GSUdfVVNCX1NFUklBTF9DT05TT0xFCitleHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2NvbnNvbGVfaW5pdCAoaW50IGRlYnVnLCBpbnQgbWlub3IpOworZXh0ZXJuIHZvaWQgdXNiX3NlcmlhbF9jb25zb2xlX2V4aXQgKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jfc2VyaWFsX2NvbnNvbGVfaW5pdCAoaW50IGRlYnVnLCBpbnQgbWlub3IpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHVzYl9zZXJpYWxfY29uc29sZV9leGl0ICh2b2lkKSB7IH0KKyNlbmRpZgorCisvKiBGdW5jdGlvbnMgbmVlZGVkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSB1c2JzZXJpYWwgY29yZSAqLworZXh0ZXJuIHN0cnVjdCB1c2Jfc2VyaWFsICp1c2Jfc2VyaWFsX2dldF9ieV9pbmRleCAodW5zaWduZWQgaW50IG1pbm9yKTsKK2V4dGVybiBpbnQgdXNiX3NlcmlhbF9nZW5lcmljX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK2V4dGVybiBpbnQgdXNiX3NlcmlhbF9nZW5lcmljX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CitleHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK2V4dGVybiBpbnQgdXNiX3NlcmlhbF9nZW5lcmljX3dyaXRlX3Jvb20gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworZXh0ZXJuIGludCB1c2Jfc2VyaWFsX2dlbmVyaWNfY2hhcnNfaW5fYnVmZmVyIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK2V4dGVybiB2b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY19yZWFkX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgdXNiX3NlcmlhbF9nZW5lcmljX3dyaXRlX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgdXNiX3NlcmlhbF9nZW5lcmljX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK2V4dGVybiBpbnQgdXNiX3NlcmlhbF9nZW5lcmljX3JlZ2lzdGVyIChpbnQgZGVidWcpOworZXh0ZXJuIHZvaWQgdXNiX3NlcmlhbF9nZW5lcmljX2RlcmVnaXN0ZXIgKHZvaWQpOworCitleHRlcm4gaW50IHVzYl9zZXJpYWxfYnVzX3JlZ2lzdGVyIChzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqZGV2aWNlKTsKK2V4dGVybiB2b2lkIHVzYl9zZXJpYWxfYnVzX2RlcmVnaXN0ZXIgKHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlICpkZXZpY2UpOworCitleHRlcm4gc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgdXNiX3NlcmlhbF9nZW5lcmljX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgdXNiX3NlcmlhbF9idXNfdHlwZTsKK2V4dGVybiBzdHJ1Y3QgdHR5X2RyaXZlciAqdXNiX3NlcmlhbF90dHlfZHJpdmVyOworCitzdGF0aWMgaW5saW5lIHZvaWQgdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGludCBkZWJ1ZywKKwkJCQkJIHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBpbnQgc2l6ZSwKKwkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisJaW50IGk7CisKKwlpZiAoZGVidWcpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsICIlcyAtIGxlbmd0aCA9ICVkLCBkYXRhID0gIiwgZnVuY3Rpb24sIHNpemUpOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorCQkJcHJpbnRrICgiJS4yeCAiLCBkYXRhW2ldKTsKKwkJcHJpbnRrICgiXG4iKTsKKwl9Cit9CisKKy8qIFVzZSBvdXIgb3duIGRiZyBtYWNybyAqLworI3VuZGVmIGRiZworI2RlZmluZSBkYmcoZm9ybWF0LCBhcmcuLi4pIGRvIHsgaWYgKGRlYnVnKSBwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm9ybWF0ICJcbiIgLCBfX0ZJTEVfXyAsICMjIGFyZyk7IH0gd2hpbGUgKDApCisKKworCisjZW5kaWYJLyogaWZkZWYgX19MSU5VWF9VU0JfU0VSSUFMX0ggKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWQzMTNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKQEAgLTAsMCArMSwxMTYxIEBACisvKgorICogVVNCIEhhbmRTcHJpbmcgVmlzb3IsIFBhbG0gbTUweCwgYW5kIFNvbnkgQ2xpZSBkcml2ZXIKKyAqIChzdXBwb3J0cyBhbGwgb2YgdGhlIFBhbG0gT1MgVVNCIGRldmljZXMpCisgKgorICoJQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAwNAorICoJICAgIEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcyBkcml2ZXIKKyAqCisgKiAoMDYvMDMvMjAwMykgSnVkZCBNb250Z29tZXJ5IDxqdWRkIGF0IGpwaWxvdC5vcmc+CisgKiAgICAgQWRkZWQgc3VwcG9ydCBmb3IgbW9kdWxlIHBhcmFtZXRlciBvcHRpb25zIGZvciB1bnRlc3RlZC91bmtub3duCisgKiAgICAgZGV2aWNlcy4KKyAqCisgKiAoMDMvMDkvMjAwMykgZ2toCisgKglBZGRlZCBzdXBwb3J0IGZvciB0aGUgU29ueSBDbGllIE5aOTBWIGRldmljZS4gIFRoYW5rcyB0byBNYXJ0aW4gQnJhY2h0bAorICoJPGJyYWNodGxAcmVkZ3JlcC5jej4gZm9yIHRoZSBpbmZvcm1hdGlvbi4KKyAqCisgKiAoMDMvMDUvMjAwMykgZ2toCisgKglUaGluayBUcmVvIHN1cHBvcnQgaXMgbm93IHdvcmtpbmcuCisgKgorICogKDA0LzAzLzIwMDIpIGdraAorICoJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIFNvbnkgT1MgNC4xIGRldmljZXMuICBUaGFua3MgdG8gSGlyb3l1a2kgQVJBS0kKKyAqCTxoaXJvQHpvYi5uZS5qcD4gZm9yIHRoZSBpbmZvcm1hdGlvbi4KKyAqCisgKiAoMDMvMjcvMjAwMikgZ2toCisgKglSZW1vdmVkIGFzc3VtcHRpb25zIHRoYXQgcG9ydC0+dHR5IHdhcyBhbHdheXMgdmFsaWQgKGlzIG5vdCB0cnVlCisgKglmb3IgdXNiIHNlcmlhbCBjb25zb2xlIGRldmljZXMuKQorICoKKyAqICgwMy8yMy8yMDAyKSBna2gKKyAqCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBQYWxtIGk3MDUgZGV2aWNlLCB0aGFua3MgdG8gVGhvbWFzIFJpZW1lcgorICoJPHRvbUBuZXRtZWNoLmNvbT4gZm9yIHRoZSBpbmZvcm1hdGlvbi4KKyAqCisgKiAoMDMvMjEvMjAwMikgZ2toCisgKglBZGRlZCBzdXBwb3J0IGZvciB0aGUgUGFsbSBtMTMwIGRldmljZSwgdGhhbmtzIHRvIFVkbyBFaXNlbmJhcnRoCisgKgk8dWRvLmVpc2VuYmFydGhAd2ViLmRlPiBmb3IgdGhlIGluZm9ybWF0aW9uLgorICoKKyAqICgwMi8yNy8yMDAyKSBna2gKKyAqCVJld29ya2VkIHRoZSB1cmIgaGFuZGxpbmcgbG9naWMuICBXZSBoYXZlIG5vIG1vcmUgcG9vbCwgYnV0IGR5bmFtaWNhbGx5CisgKglhbGxvY2F0ZSB0aGUgdXJiIGFuZCB0aGUgdHJhbnNmZXIgYnVmZmVyIG9uIHRoZSBmbHkuICBJbiB0ZXN0aW5nIHRoaXMKKyAqCWRvZXMgbm90IGluY3VyZSBhbnkgbWVhc3VyYWJsZSBvdmVyaGVhZC4gIFRoaXMgYWxzbyByZWxpZXMgb24gdGhlIGZhY3QKKyAqCXRoYXQgd2UgaGF2ZSBwcm9wZXIgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljIGZvciB1cmJzLgorICoKKyAqICgwMi8yMS8yMDAyKSBTaWxhUworICogIEFkZGVkIGluaXRpYWwgc3VwcG9ydCBmb3IgdGhlIFBhbG0gbTUxNSBkZXZpY2VzLgorICoKKyAqICgwMi8xNC8yMDAyKSBna2gKKyAqCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBDbGllIFMtMzYwIGRldmljZS4KKyAqCisgKiAoMTIvMTgvMjAwMSkgZ2toCisgKglBZGRlZCBiZXR0ZXIgQ2xpZSBzdXBwb3J0IGZvciAzLjUgZGV2aWNlcy4gIFRoYW5rcyB0byBHZW9mZnJleSBMZXZhbmQKKyAqCWZvciB0aGUgcGF0Y2guCisgKgorICogKDExLzExLzIwMDEpIGdraAorICoJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIG0xMjUgZGV2aWNlcywgYW5kIGFkZGVkIGNoZWNrIHRvIHByZXZlbnQgb29wc2VzCisgKglmb3IgQ2xp6SBkZXZpY2VzIHRoYXQgbGllIGFib3V0IHRoZSBudW1iZXIgb2YgcG9ydHMgdGhleSBoYXZlLgorICoKKyAqICgwOC8zMC8yMDAxKSBna2gKKyAqCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBDbGllIGRldmljZXMsIGJvdGggdGhlIDMuNSBhbmQgNC4wIG9zIHZlcnNpb25zLgorICoJTWFueSB0aGFua3MgdG8gRGFuaWVsIEJ1cmtlLCBhbmQgQnJ5YW4gUGF5bmUgZm9yIGhlbHBpbmcgd2l0aCB0aGlzLgorICoKKyAqICgwOC8yMy8yMDAxKSBna2gKKyAqCWZpeGVkIGEgZmV3IHBvdGVudGlhbCBidWdzIHBvaW50ZWQgb3V0IGJ5IE9saXZlciBOZXVrdW0uCisgKgorICogKDA1LzMwLzIwMDEpIGdraAorICoJc3dpdGNoZWQgZnJvbSB1c2luZyBzcGlubG9jayB0byBhIHNlbWFwaG9yZSwgd2hpY2ggZml4ZXMgbG90cyBvZiBwcm9ibGVtcy4KKyAqCisgKiAoMDUvMjgvMjAwMCkgZ2toCisgKglBZGRlZCBpbml0aWFsIHN1cHBvcnQgZm9yIHRoZSBQYWxtIG01MDAgYW5kIFBhbG0gbTUwNSBkZXZpY2VzLgorICoKKyAqICgwNC8wOC8yMDAxKSBnYgorICoJSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZC4KKyAqCisgKiAoMDEvMjEvMjAwMCkgZ2toCisgKglBZGRlZCB3cml0ZV9yb29tIGFuZCBjaGFyc19pbl9idWZmZXIsIGFzIHRoZXkgd2VyZSBwcmV2aW91c2x5IHVzaW5nIHRoZQorICoJZ2VuZXJpYyBkcml2ZXIgdmVyc2lvbnMgd2hpY2ggaXMgYWxsIHdyb25nIG5vdyB0aGF0IHdlIGFyZSB1c2luZyBhbiB1cmIKKyAqCXBvb2wuICBUaGFua3MgdG8gV29sZmdhbmcgR3JhbmRlZ2dlciBmb3IgcG9pbnRpbmcgdGhpcyBvdXQgdG8gbWUuCisgKglSZW1vdmVkIGNvdW50IGFzc2lnbm1lbnQgaW4gdGhlIHdyaXRlIGZ1bmN0aW9uLCB3aGljaCB3YXMgbm90IG5lZWRlZCBhbnltb3JlCisgKgllaXRoZXIuICBUaGFua3MgdG8gQWwgQm9yY2hlcnMgZm9yIHBvaW50aW5nIHRoaXMgb3V0LgorICoKKyAqICgxMi8xMi8yMDAwKSBna2gKKyAqCU1vdmVkIE1PRF9ERUMgdG8gZW5kIG9mIHZpc29yX2Nsb3NlIHRvIGJlIG5pY2VyLCBhcyB0aGUgZmluYWwgd3JpdGUgCisgKgltZXNzYWdlIGNhbiBzbGVlcC4KKyAqIAorICogKDExLzEyLzIwMDApIGdraAorICoJRml4ZWQgYnVnIHdpdGggZGF0YSBiZWluZyBkcm9wcGVkIG9uIHRoZSBmbG9vciBieSBmb3JjaW5nIHR0eS0+bG93X2xhdGVuY3kKKyAqCXRvIGJlIG9uLiAgSG9wZWZ1bGx5IHRoaXMgZml4ZXMgdGhlIE9IQ0kgaXNzdWUhCisgKgorICogKDExLzAxLzIwMDApIEFkYW0gSi4gUmljaHRlcgorICoJdXNiX2RldmljZV9pZCB0YWJsZSBzdXBwb3J0CisgKiAKKyAqICgxMC8wNS8yMDAwKSBna2gKKyAqCUZpeGVkIGJ1ZyB3aXRoIHVyYi0+ZGV2IG5vdCBiZWluZyBzZXQgcHJvcGVybHksIG5vdyB0aGF0IHRoZSB1c2IKKyAqCWNvcmUgbmVlZHMgaXQuCisgKiAKKyAqICgwOS8xMS8yMDAwKSBna2gKKyAqCUdvdCByaWQgb2YgYWx3YXlzIGNhbGxpbmcga21hbGxvYyBmb3IgZXZlcnkgdXJiIHdlIHdyb3RlIG91dCB0byB0aGUKKyAqCWRldmljZS4KKyAqCUFkZGVkIHZpc29yX3JlYWRfY2FsbGJhY2sgc28gd2UgY2FuIGtlZXAgdHJhY2sgb2YgYnl0ZXMgaW4gYW5kIG91dCBmb3IKKyAqCXRob3NlIHBlb3BsZSB3aG8gbGlrZSB0byBrbm93IHRoZSBzcGVlZCBvZiB0aGVpciBkZXZpY2UuCisgKglSZW1vdmVkIERFQlVHICNpZmRlZnMgd2l0aCBjYWxsIHRvIHVzYl9zZXJpYWxfZGVidWdfZGF0YQorICoKKyAqICgwOS8wNi8yMDAwKSBna2gKKyAqCUZpeGVkIG9vcHMgaW4gdmlzb3JfZXhpdC4gIE5lZWQgdG8gdW5jb21tZW50IHVzYl91bmxpbmtfdXJiIGNhbGwgX2FmdGVyXworICoJdGhlIGhvc3QgY29udHJvbGxlciBkcml2ZXJzIHNldCB1cmItPmRldiA9IE5VTEwgd2hlbiB0aGUgdXJiIGlzIGZpbmlzaGVkLgorICoKKyAqICgwOC8yOC8yMDAwKSBna2gKKyAqCUFkZGVkIGxvY2tzIGZvciBTTVAgc2FmZW5lc3MuCisgKgorICogKDA4LzA4LzIwMDApIGdraAorICoJRml4ZWQgZW5kaWFuIHByb2JsZW0gaW4gdmlzb3Jfc3RhcnR1cC4KKyAqCUZpeGVkIE1PRF9JTkMgYW5kIE1PRF9ERUMgbG9naWMgYW5kIHRoZSBhYmlsaXR5IHRvIG9wZW4gYSBwb3J0IG1vcmUgCisgKgl0aGFuIG9uY2UuCisgKiAKKyAqICgwNy8yMy8yMDAwKSBna2gKKyAqCUFkZGVkIHBvb2wgb2Ygd3JpdGUgdXJicyB0byBzcGVlZCB1cCB0cmFuc2ZlcnMgdG8gdGhlIHZpc29yLgorICogCisgKiAoMDcvMTkvMjAwMCkgZ2toCisgKglBZGRlZCBtb2R1bGVfaW5pdCBhbmQgbW9kdWxlX2V4aXQgZnVuY3Rpb25zIHRvIGhhbmRsZSB0aGUgZmFjdCB0aGF0IHRoaXMKKyAqCWRyaXZlciBpcyBhIGxvYWRhYmxlIG1vZHVsZSBub3cuCisgKgorICogKDA3LzAzLzIwMDApIGdraAorICoJQWRkZWQgdmlzb3Jfc2V0X2lvY3RsIGFuZCB2aXNvcl9zZXRfdGVybWlvcyBmdW5jdGlvbnMgKHRoZXkgZG9uJ3QgZG8gbXVjaAorICoJb2YgYW55dGhpbmcsIGJ1dCBhcmUgZ29vZCBmb3IgZGVidWdnaW5nLikKKyAqIAorICogKDA2LzI1LzIwMDApIGdraAorICoJRml4ZWQgYnVnIGluIHZpc29yX3VudGhyb3R0bGUgdGhhdCBzaG91bGQgaGVscCB3aXRoIHRoZSBkaXNjb25uZWN0IGluIFBQUAorICoJYnVnIHRoYXQgcGVvcGxlIGhhdmUgYmVlbiByZXBvcnRpbmcuCisgKgorICogKDA2LzIzLzIwMDApIGdraAorICoJQ2xlYW5lZCB1cCBkZWJ1Z2dpbmcgc3RhdGVtZW50cyBpbiBhIHF1ZXN0IHRvIGZpbmQgVUhDSSB0aW1lb3V0IGJ1Zy4KKyAqCisgKiAoMDQvMjcvMjAwMCkgUnlhbiBWYW5kZXJCaWpsCisgKiAJRml4ZWQgbWVtb3J5IGxlYWsgaW4gdmlzb3JfY2xvc2UKKyAqCisgKiAoMDMvMjYvMjAwMCkgZ2toCisgKglTcGxpdCBkcml2ZXIgdXAgaW50byBkZXZpY2Ugc3BlY2lmaWMgcGllY2VzLgorICogCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisjaW5jbHVkZSAidmlzb3IuaCIKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjIuMSIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgSGFuZFNwcmluZyBWaXNvciAvIFBhbG0gT1MgZHJpdmVyIgorCisvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBhIGhhbmRzcHJpbmcgdmlzb3IgKi8KK3N0YXRpYyBpbnQgIHZpc29yX29wZW4JCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCB2aXNvcl9jbG9zZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIHZpc29yX3dyaXRlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOworc3RhdGljIGludCAgdmlzb3Jfd3JpdGVfcm9vbQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCAgdmlzb3JfY2hhcnNfaW5fYnVmZmVyCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIHZpc29yX3Rocm90dGxlCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIHZpc29yX3VudGhyb3R0bGUJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCAgdmlzb3JfcHJvYmUJCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIGludCAgdmlzb3JfY2FsY19udW1fcG9ydHMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgdm9pZCB2aXNvcl9zaHV0ZG93bgkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50ICB2aXNvcl9pb2N0bAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIHZvaWQgdmlzb3Jfc2V0X3Rlcm1pb3MJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcyk7CitzdGF0aWMgdm9pZCB2aXNvcl93cml0ZV9idWxrX2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIHZpc29yX3JlYWRfYnVsa19jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCB2aXNvcl9yZWFkX2ludF9jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgaW50ICBjbGllXzNfNV9zdGFydHVwCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIHRyZW9fYXR0YWNoCQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50IGNsaWVfNV9hdHRhY2ggKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCBwYWxtX29zXzNfcHJvYmUgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgaW50IHBhbG1fb3NfNF9wcm9iZSAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKKworLyogUGFyYW1ldGVycyB0aGF0IG1heSBiZSBwYXNzZWQgaW50byB0aGUgbW9kdWxlLiAqLworc3RhdGljIGludCBkZWJ1ZzsKK3N0YXRpYyBfX3UxNiB2ZW5kb3I7CitzdGF0aWMgX191MTYgcHJvZHVjdDsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShIQU5EU1BSSU5HX1ZFTkRPUl9JRCwgSEFORFNQUklOR19WSVNPUl9JRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc18zX3Byb2JlIH0sCisJeyBVU0JfREVWSUNFKEhBTkRTUFJJTkdfVkVORE9SX0lELCBIQU5EU1BSSU5HX1RSRU9fSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShIQU5EU1BSSU5HX1ZFTkRPUl9JRCwgSEFORFNQUklOR19UUkVPNjAwX0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKKwl7IFVTQl9ERVZJQ0UoUEFMTV9WRU5ET1JfSUQsIFBBTE1fTTUwMF9JRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyBVU0JfREVWSUNFKFBBTE1fVkVORE9SX0lELCBQQUxNX001MDVfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9NNTE1X0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKKwl7IFVTQl9ERVZJQ0UoUEFMTV9WRU5ET1JfSUQsIFBBTE1fSTcwNV9JRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyBVU0JfREVWSUNFKFBBTE1fVkVORE9SX0lELCBQQUxNX00xMDBfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9NMTI1X0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKKwl7IFVTQl9ERVZJQ0UoUEFMTV9WRU5ET1JfSUQsIFBBTE1fTTEzMF9JRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyBVU0JfREVWSUNFKFBBTE1fVkVORE9SX0lELCBQQUxNX1RVTkdTVEVOX1RfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9UVU5HU1RFTl9aX0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKKwl7IFVTQl9ERVZJQ0UoUEFMTV9WRU5ET1JfSUQsIFBBTE1fWklSRTMxX0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKKwl7IFVTQl9ERVZJQ0UoUEFMTV9WRU5ET1JfSUQsIFBBTE1fWklSRV9JRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyBVU0JfREVWSUNFKFNPTllfVkVORE9SX0lELCBTT05ZX0NMSUVfNF8wX0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKKwl7IFVTQl9ERVZJQ0UoU09OWV9WRU5ET1JfSUQsIFNPTllfQ0xJRV9TMzYwX0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKKwl7IFVTQl9ERVZJQ0UoU09OWV9WRU5ET1JfSUQsIFNPTllfQ0xJRV80XzFfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShTT05ZX1ZFTkRPUl9JRCwgU09OWV9DTElFX05YNjBfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShTT05ZX1ZFTkRPUl9JRCwgU09OWV9DTElFX05aOTBWX0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKKwl7IFVTQl9ERVZJQ0UoU09OWV9WRU5ET1JfSUQsIFNPTllfQ0xJRV9USjI1X0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKKwl7IFVTQl9ERVZJQ0UoU0FNU1VOR19WRU5ET1JfSUQsIFNBTVNVTkdfU0NIX0kzMzBfSUQpLCAKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKKwl7IFVTQl9ERVZJQ0UoU0FNU1VOR19WRU5ET1JfSUQsIFNBTVNVTkdfU1BIX0k1MDBfSUQpLCAKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKKwl7IFVTQl9ERVZJQ0UoR0FSTUlOX1ZFTkRPUl9JRCwgR0FSTUlOX0lRVUVfMzYwMF9JRCksIAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShBQ0VFQ0FfVkVORE9SX0lELCBBQ0VFQ0FfTUVaMTAwMF9JRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyBVU0JfREVWSUNFKEtZT0NFUkFfVkVORE9SX0lELCBLWU9DRVJBXzcxMzVfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShGT1NTSUxfVkVORE9SX0lELCBGT1NTSUxfQUJBQ1VTX0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKKwl7IH0sCQkJCQkvKiBvcHRpb25hbCBwYXJhbWV0ZXIgZW50cnkgKi8KKwl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgY2xpZV9pZF81X3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShTT05ZX1ZFTkRPUl9JRCwgU09OWV9DTElFX1VYNTBfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgfSwJCQkJCS8qIG9wdGlvbmFsIHBhcmFtZXRlciBlbnRyeSAqLworCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBjbGllX2lkXzNfNV90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoU09OWV9WRU5ET1JfSUQsIFNPTllfQ0xJRV8zXzVfSUQpIH0sCisJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkIFtdID0geworCXsgVVNCX0RFVklDRShIQU5EU1BSSU5HX1ZFTkRPUl9JRCwgSEFORFNQUklOR19WSVNPUl9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSEFORFNQUklOR19WRU5ET1JfSUQsIEhBTkRTUFJJTkdfVFJFT19JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSEFORFNQUklOR19WRU5ET1JfSUQsIEhBTkRTUFJJTkdfVFJFTzYwMF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoUEFMTV9WRU5ET1JfSUQsIFBBTE1fTTUwMF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoUEFMTV9WRU5ET1JfSUQsIFBBTE1fTTUwNV9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoUEFMTV9WRU5ET1JfSUQsIFBBTE1fTTUxNV9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoUEFMTV9WRU5ET1JfSUQsIFBBTE1fSTcwNV9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoUEFMTV9WRU5ET1JfSUQsIFBBTE1fTTEwMF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoUEFMTV9WRU5ET1JfSUQsIFBBTE1fTTEyNV9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoUEFMTV9WRU5ET1JfSUQsIFBBTE1fTTEzMF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoUEFMTV9WRU5ET1JfSUQsIFBBTE1fVFVOR1NURU5fVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoUEFMTV9WRU5ET1JfSUQsIFBBTE1fVFVOR1NURU5fWl9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoUEFMTV9WRU5ET1JfSUQsIFBBTE1fWklSRTMxX0lEKSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9aSVJFX0lEKSB9LAorCXsgVVNCX0RFVklDRShTT05ZX1ZFTkRPUl9JRCwgU09OWV9DTElFXzNfNV9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU09OWV9WRU5ET1JfSUQsIFNPTllfQ0xJRV80XzBfSUQpIH0sCisJeyBVU0JfREVWSUNFKFNPTllfVkVORE9SX0lELCBTT05ZX0NMSUVfUzM2MF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU09OWV9WRU5ET1JfSUQsIFNPTllfQ0xJRV80XzFfSUQpIH0sCisJeyBVU0JfREVWSUNFKFNPTllfVkVORE9SX0lELCBTT05ZX0NMSUVfTlg2MF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU09OWV9WRU5ET1JfSUQsIFNPTllfQ0xJRV9OWjkwVl9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU09OWV9WRU5ET1JfSUQsIFNPTllfQ0xJRV9VWDUwX0lEKSB9LAorCXsgVVNCX0RFVklDRShTT05ZX1ZFTkRPUl9JRCwgU09OWV9DTElFX1RKMjVfSUQpIH0sCisJeyBVU0JfREVWSUNFKFNBTVNVTkdfVkVORE9SX0lELCBTQU1TVU5HX1NDSF9JMzMwX0lEKSB9LAorCXsgVVNCX0RFVklDRShTQU1TVU5HX1ZFTkRPUl9JRCwgU0FNU1VOR19TUEhfSTUwMF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoR0FSTUlOX1ZFTkRPUl9JRCwgR0FSTUlOX0lRVUVfMzYwMF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoQUNFRUNBX1ZFTkRPUl9JRCwgQUNFRUNBX01FWjEwMDBfSUQpIH0sCisJeyBVU0JfREVWSUNFKEtZT0NFUkFfVkVORE9SX0lELCBLWU9DRVJBXzcxMzVfSUQpIH0sCisJeyBVU0JfREVWSUNFKEZPU1NJTF9WRU5ET1JfSUQsIEZPU1NJTF9BQkFDVVNfSUQpIH0sCisJeyB9LAkJCQkJLyogb3B0aW9uYWwgcGFyYW1ldGVyIGVudHJ5ICovCisJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZV9jb21iaW5lZCk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB2aXNvcl9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJInZpc29yIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlX2NvbWJpbmVkLAorfTsKKworLyogQWxsIG9mIHRoZSBkZXZpY2UgaW5mbyBuZWVkZWQgZm9yIHRoZSBIYW5kc3ByaW5nIFZpc29yLCBhbmQgUGFsbSA0LjAgZGV2aWNlcyAqLworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGhhbmRzcHJpbmdfZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIkhhbmRzcHJpbmcgVmlzb3IgLyBQYWxtIE9TIiwKKwkuc2hvcnRfbmFtZSA9CQkidmlzb3IiLAorCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX2luID0JCTIsCisJLm51bV9idWxrX291dCA9CQkyLAorCS5udW1fcG9ydHMgPQkJMiwKKwkub3BlbiA9CQkJdmlzb3Jfb3BlbiwKKwkuY2xvc2UgPQkJdmlzb3JfY2xvc2UsCisJLnRocm90dGxlID0JCXZpc29yX3Rocm90dGxlLAorCS51bnRocm90dGxlID0JCXZpc29yX3VudGhyb3R0bGUsCisJLmF0dGFjaCA9CQl0cmVvX2F0dGFjaCwKKwkucHJvYmUgPQkJdmlzb3JfcHJvYmUsCisJLmNhbGNfbnVtX3BvcnRzID0Jdmlzb3JfY2FsY19udW1fcG9ydHMsCisJLnNodXRkb3duID0JCXZpc29yX3NodXRkb3duLAorCS5pb2N0bCA9CQl2aXNvcl9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkJdmlzb3Jfc2V0X3Rlcm1pb3MsCisJLndyaXRlID0JCXZpc29yX3dyaXRlLAorCS53cml0ZV9yb29tID0JCXZpc29yX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlciA9CXZpc29yX2NoYXJzX2luX2J1ZmZlciwKKwkud3JpdGVfYnVsa19jYWxsYmFjayA9CXZpc29yX3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJLnJlYWRfYnVsa19jYWxsYmFjayA9CXZpc29yX3JlYWRfYnVsa19jYWxsYmFjaywKKwkucmVhZF9pbnRfY2FsbGJhY2sgPQl2aXNvcl9yZWFkX2ludF9jYWxsYmFjaywKK307CisKKy8qIEFsbCBvZiB0aGUgZGV2aWNlIGluZm8gbmVlZGVkIGZvciB0aGUgQ2xpZSBVWDUwLCBUSDU1IFBhbG0gNS4wIGRldmljZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBjbGllXzVfZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIlNvbnkgQ2xpZSA1LjAiLAorCS5zaG9ydF9uYW1lID0JCSJjbGllXzUiLAorCS5pZF90YWJsZSA9CQljbGllX2lkXzVfdGFibGUsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQlOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19pbiA9CQkyLAorCS5udW1fYnVsa19vdXQgPQkJMiwKKwkubnVtX3BvcnRzID0JCTIsCisJLm9wZW4gPQkJCXZpc29yX29wZW4sCisJLmNsb3NlID0JCXZpc29yX2Nsb3NlLAorCS50aHJvdHRsZSA9CQl2aXNvcl90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQl2aXNvcl91bnRocm90dGxlLAorCS5hdHRhY2ggPQkJY2xpZV81X2F0dGFjaCwKKwkucHJvYmUgPQkJdmlzb3JfcHJvYmUsCisJLmNhbGNfbnVtX3BvcnRzID0Jdmlzb3JfY2FsY19udW1fcG9ydHMsCisJLnNodXRkb3duID0JCXZpc29yX3NodXRkb3duLAorCS5pb2N0bCA9CQl2aXNvcl9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkJdmlzb3Jfc2V0X3Rlcm1pb3MsCisJLndyaXRlID0JCXZpc29yX3dyaXRlLAorCS53cml0ZV9yb29tID0JCXZpc29yX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlciA9CXZpc29yX2NoYXJzX2luX2J1ZmZlciwKKwkud3JpdGVfYnVsa19jYWxsYmFjayA9CXZpc29yX3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJLnJlYWRfYnVsa19jYWxsYmFjayA9CXZpc29yX3JlYWRfYnVsa19jYWxsYmFjaywKKwkucmVhZF9pbnRfY2FsbGJhY2sgPQl2aXNvcl9yZWFkX2ludF9jYWxsYmFjaywKK307CisKKy8qIGRldmljZSBpbmZvIGZvciB0aGUgU29ueSBDbGllIE9TIHZlcnNpb24gMy41ICovCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgY2xpZV8zXzVfZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIlNvbnkgQ2xpZSAzLjUiLAorCS5zaG9ydF9uYW1lID0JCSJjbGllXzMuNSIsCisJLmlkX3RhYmxlID0JCWNsaWVfaWRfM181X3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luID0JMCwKKwkubnVtX2J1bGtfaW4gPQkJMSwKKwkubnVtX2J1bGtfb3V0ID0JCTEsCisJLm51bV9wb3J0cyA9CQkxLAorCS5vcGVuID0JCQl2aXNvcl9vcGVuLAorCS5jbG9zZSA9CQl2aXNvcl9jbG9zZSwKKwkudGhyb3R0bGUgPQkJdmlzb3JfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUgPQkJdmlzb3JfdW50aHJvdHRsZSwKKwkuYXR0YWNoID0JCWNsaWVfM181X3N0YXJ0dXAsCisJLmlvY3RsID0JCXZpc29yX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQl2aXNvcl9zZXRfdGVybWlvcywKKwkud3JpdGUgPQkJdmlzb3Jfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJdmlzb3Jfd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyID0Jdmlzb3JfY2hhcnNfaW5fYnVmZmVyLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0Jdmlzb3Jfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkucmVhZF9idWxrX2NhbGxiYWNrID0Jdmlzb3JfcmVhZF9idWxrX2NhbGxiYWNrLAorfTsKKworc3RydWN0IHZpc29yX3ByaXZhdGUgeworCXNwaW5sb2NrX3QgbG9jazsKKwlpbnQgYnl0ZXNfaW47CisJaW50IGJ5dGVzX291dDsKKwlpbnQgb3V0c3RhbmRpbmdfdXJiczsKKwlpbnQgdGhyb3R0bGVkOworfTsKKworLyogbnVtYmVyIG9mIG91dHN0YW5kaW5nIHVyYnMgdG8gcHJldmVudCB1c2Vyc3BhY2UgRG9TIGZyb20gaGFwcGVuaW5nICovCisjZGVmaW5lIFVSQl9VUFBFUl9MSU1JVAk0MgorCitzdGF0aWMgaW50IHN0YXRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBIYW5kc3ByaW5nIFZpc29yIHNwZWNpZmljIGRyaXZlciBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHZpc29yX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IHZpc29yX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzdWx0ID0gMDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCFwb3J0LT5yZWFkX3VyYikgeworCQkvKiB0aGlzIGlzIG5lZWRlZCBmb3Igc29tZSBicmFpbiBkZWFkIFNvbnkgZGV2aWNlcyAqLworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJEZXZpY2UgbGllZCBhYm91dCBudW1iZXIgb2YgcG9ydHMsIHBsZWFzZSB1c2UgYSBsb3dlciBvbmUuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT5ieXRlc19pbiA9IDA7CisJcHJpdi0+Ynl0ZXNfb3V0ID0gMDsKKwlwcml2LT5vdXRzdGFuZGluZ191cmJzID0gMDsKKwlwcml2LT50aHJvdHRsZWQgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogRm9yY2UgbG93X2xhdGVuY3kgb24gc28gdGhhdCBvdXIgdHR5X3B1c2ggYWN0dWFsbHkgZm9yY2VzIHRoZSBkYXRhCisJICogdGhyb3VnaCwgb3RoZXJ3aXNlIGl0IGlzIHNjaGVkdWxlZCwgYW5kIHdpdGggaGlnaCBkYXRhIHJhdGVzIChsaWtlCisJICogd2l0aCBPSENJKSBkYXRhIGNhbiBnZXQgbG9zdC4KKwkgKi8KKwlpZiAocG9ydC0+dHR5KQorCQlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gMTsKKworCS8qIFN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCisJdXNiX2ZpbGxfYnVsa191cmIgKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwKKwkJCSAgIHVzYl9yY3ZidWxrcGlwZSAoc2VyaWFsLT5kZXYsIAorCQkJCQkgICAgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCSAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJICAgdmlzb3JfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJZ290byBleGl0OworCX0KKwkKKwlpZiAocG9ydC0+aW50ZXJydXB0X2luX3VyYikgeworCQlkYmcoIiVzIC0gYWRkaW5nIGludGVycnVwdCBpbnB1dCBmb3IgdHJlbyIsIF9fRlVOQ1RJT05fXyk7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmVzdWx0KQorCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJfQorZXhpdDoJCisJcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgdm9pZCB2aXNvcl9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxwKQoreworCXN0cnVjdCB2aXNvcl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGNoYXIgKnRyYW5zZmVyX2J1ZmZlcjsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQkJIAorCS8qIHNodXRkb3duIG91ciB1cmJzICovCisJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwlpZiAocG9ydC0+aW50ZXJydXB0X2luX3VyYikKKwkJdXNiX2tpbGxfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIpOworCisJLyogVHJ5IHRvIHNlbmQgc2h1dGRvd24gbWVzc2FnZSwgaWYgdGhlIGRldmljZSBpcyBnb25lLCB0aGlzIHdpbGwganVzdCBmYWlsLiAqLworCXRyYW5zZmVyX2J1ZmZlciA9ICBrbWFsbG9jICgweDEyLCBHRlBfS0VSTkVMKTsKKwlpZiAodHJhbnNmZXJfYnVmZmVyKSB7CisJCXVzYl9jb250cm9sX21zZyAocG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCisJCQkJIFZJU09SX0NMT1NFX05PVElGSUNBVElPTiwgMHhjMiwKKwkJCQkgMHgwMDAwLCAweDAwMDAsIAorCQkJCSB0cmFuc2Zlcl9idWZmZXIsIDB4MTIsIDMwMCk7CisJCWtmcmVlICh0cmFuc2Zlcl9idWZmZXIpOworCX0KKworCWlmIChzdGF0cykKKwkJZGV2X2luZm8oJnBvcnQtPmRldiwgIkJ5dGVzIEluID0gJWQgIEJ5dGVzIE91dCA9ICVkXG4iLAorCQkJIHByaXYtPmJ5dGVzX2luLCBwcml2LT5ieXRlc19vdXQpOworfQorCisKK3N0YXRpYyBpbnQgdmlzb3Jfd3JpdGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXN0cnVjdCB2aXNvcl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IHVyYiAqdXJiOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzdGF0dXM7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKHByaXYtPm91dHN0YW5kaW5nX3VyYnMgPiBVUkJfVVBQRVJfTElNSVQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlkYmcoIiVzIC0gd3JpdGUgbGltaXQgaGl0XG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJYnVmZmVyID0ga21hbGxvYyAoY291bnQsIEdGUF9BVE9NSUMpOworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOworCWlmICghdXJiKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIm5vIG1vcmUgZnJlZSB1cmJzXG4iKTsKKwkJa2ZyZWUgKGJ1ZmZlcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbWNweSAoYnVmZmVyLCBidWYsIGNvdW50KTsKKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCBjb3VudCwgYnVmZmVyKTsKKworCXVzYl9maWxsX2J1bGtfdXJiICh1cmIsIHNlcmlhbC0+ZGV2LAorCQkJICAgdXNiX3NuZGJ1bGtwaXBlIChzZXJpYWwtPmRldiwKKwkJCQkJICAgIHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQkgICBidWZmZXIsIGNvdW50LCAKKwkJCSAgIHZpc29yX3dyaXRlX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCisJLyogc2VuZCBpdCBkb3duIHRoZSBwaXBlICovCisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkIHdpdGggc3RhdHVzID0gJWRcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCWNvdW50ID0gc3RhdHVzOworCQlrZnJlZSAoYnVmZmVyKTsKKwl9IGVsc2UgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkrK3ByaXYtPm91dHN0YW5kaW5nX3VyYnM7CisJCXByaXYtPmJ5dGVzX291dCArPSBjb3VudDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCX0KKworCS8qIHdlIGFyZSBkb25lIHdpdGggdGhpcyB1cmIsIHNvIGxldCB0aGUgaG9zdCBkcml2ZXIKKwkgKiByZWFsbHkgZnJlZSBpdCB3aGVuIGl0IGlzIGZpbmlzaGVkIHdpdGggaXQgKi8KKwl1c2JfZnJlZV91cmIgKHVyYik7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKworc3RhdGljIGludCB2aXNvcl93cml0ZV9yb29tIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJLyoKKwkgKiBXZSByZWFsbHkgY2FuIHRha2UgYW55dGhpbmcgdGhlIHVzZXIgdGhyb3dzIGF0IHVzCisJICogYnV0IGxldCdzIHBpY2sgYSBuaWNlIGJpZyBudW1iZXIgdG8gdGVsbCB0aGUgdHR5CisJICogbGF5ZXIgdGhhdCB3ZSBoYXZlIGxvdHMgb2YgZnJlZSBzcGFjZQorCSAqLworCXJldHVybiAyMDQ4OworfQorCisKK3N0YXRpYyBpbnQgdmlzb3JfY2hhcnNfaW5fYnVmZmVyIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJLyogCisJICogV2UgY2FuJ3QgcmVhbGx5IGFjY291bnQgZm9yIGhvdyBtdWNoIGRhdGEgd2UKKwkgKiBoYXZlIHNlbnQgb3V0LCBidXQgaGFzbid0IG1hZGUgaXQgdGhyb3VnaCB0byB0aGUKKwkgKiBkZXZpY2UsIHNvIGp1c3QgdGVsbCB0aGUgdHR5IGxheWVyIHRoYXQgZXZlcnl0aGluZworCSAqIGlzIGZsdXNoZWQuCisJICovCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgdmlzb3Jfd3JpdGVfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHZpc29yX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIGZyZWUgdXAgdGhlIHRyYW5zZmVyIGJ1ZmZlciwgYXMgdXNiX2ZyZWVfdXJiKCkgZG9lcyBub3QgZG8gdGhpcyAqLworCWtmcmVlICh1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkKKwlpZiAodXJiLT5zdGF0dXMpCisJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJLS1wcml2LT5vdXRzdGFuZGluZ191cmJzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXNjaGVkdWxlX3dvcmsoJnBvcnQtPndvcmspOworfQorCisKK3N0YXRpYyB2b2lkIHZpc29yX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHZpc29yX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKwlpbnQgdGhyb3R0bGVkOworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CisKKwl0dHkgPSBwb3J0LT50dHk7CisJaWYgKHR0eSAmJiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJZm9yIChpID0gMDsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aCA7ICsraSkgeworCQkJLyogaWYgd2UgaW5zZXJ0IG1vcmUgdGhhbiBUVFlfRkxJUEJVRl9TSVpFIGNoYXJhY3RlcnMsIHdlIGRyb3AgdGhlbS4gKi8KKwkJCWlmKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCX0KKwkJCS8qIHRoaXMgZG9lc24ndCBhY3R1YWxseSBwdXNoIHRoZSBkYXRhIHRocm91Z2ggdW5sZXNzIHR0eS0+bG93X2xhdGVuY3kgaXMgc2V0ICovCisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIDApOworCQl9CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJfQorCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJpdi0+Ynl0ZXNfaW4gKz0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCXRocm90dGxlZCA9IHByaXYtPnRocm90dGxlZDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgaWYgd2Ugc2hvdWxkICovCisJaWYgKCF0aHJvdHRsZWQpIHsKKwkJdXNiX2ZpbGxfYnVsa191cmIgKHBvcnQtPnJlYWRfdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwKKwkJCQkgICB1c2JfcmN2YnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJCQkgICBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQkJICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQkgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQkgICB2aXNvcl9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXN1bHQpCisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgdmlzb3JfcmVhZF9pbnRfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCWludCByZXN1bHQ7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyoKKwkgKiBUaGlzIGluZm9ybWF0aW9uIGlzIHN0aWxsIHVua25vd24gd2hhdCBpdCBjYW4gYmUgdXNlZCBmb3IuCisJICogSWYgYW55b25lIGhhcyBhbiBpZGVhLCBwbGVhc2UgbGV0IHRoZSBhdXRob3Iga25vdy4uLgorCSAqCisJICogUnVtb3IgaGFzIGl0IHRoaXMgZW5kcG9pbnQgaXMgdXNlZCB0byBub3RpZnkgd2hlbiBkYXRhCisJICogaXMgcmVhZHkgdG8gYmUgcmVhZCBmcm9tIHRoZSBidWxrIG9uZXMuCisJICovCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sCisJCQkgICAgICB1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworZXhpdDoKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KQorCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBFcnJvciAlZCBzdWJtaXR0aW5nIGludGVycnVwdCB1cmJcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHJlc3VsdCk7Cit9CisKK3N0YXRpYyB2b2lkIHZpc29yX3Rocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB2aXNvcl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPnRocm90dGxlZCA9IDE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworfQorCisKK3N0YXRpYyB2b2lkIHZpc29yX3VudGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHZpc29yX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzdWx0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT50aHJvdHRsZWQgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKK30KKworc3RhdGljIGludCBwYWxtX29zXzNfcHJvYmUgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc2VyaWFsLT5kZXYtPmRldjsKKwlzdHJ1Y3Qgdmlzb3JfY29ubmVjdGlvbl9pbmZvICpjb25uZWN0aW9uX2luZm87CisJdW5zaWduZWQgY2hhciAqdHJhbnNmZXJfYnVmZmVyOworCWNoYXIgKnN0cmluZzsKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgaTsKKwlpbnQgbnVtX3BvcnRzID0gMDsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJdHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyAoc2l6ZW9mICgqY29ubmVjdGlvbl9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cmFuc2Zlcl9idWZmZXIpIHsKKwkJZGV2X2VycihkZXYsICIlcyAtIGttYWxsb2MoJVpkKSBmYWlsZWQuXG4iLCBfX0ZVTkNUSU9OX18sCisJCQlzaXplb2YoKmNvbm5lY3Rpb25faW5mbykpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBzZW5kIGEgZ2V0IGNvbm5lY3Rpb24gaW5mbyByZXF1ZXN0ICovCisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnIChzZXJpYWwtPmRldiwKKwkJCQkgIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkJICBWSVNPUl9HRVRfQ09OTkVDVElPTl9JTkZPUk1BVElPTiwKKwkJCQkgIDB4YzIsIDB4MDAwMCwgMHgwMDAwLCB0cmFuc2Zlcl9idWZmZXIsCisJCQkJICBzaXplb2YoKmNvbm5lY3Rpb25faW5mbyksIDMwMCk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJZGV2X2VycihkZXYsICIlcyAtIGVycm9yICVkIGdldHRpbmcgY29ubmVjdGlvbiBpbmZvcm1hdGlvblxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChyZXR2YWwgPT0gc2l6ZW9mKCpjb25uZWN0aW9uX2luZm8pKSB7CisJICAgICAgICBjb25uZWN0aW9uX2luZm8gPSAoc3RydWN0IHZpc29yX2Nvbm5lY3Rpb25faW5mbyAqKXRyYW5zZmVyX2J1ZmZlcjsKKworCQludW1fcG9ydHMgPSBsZTE2X3RvX2NwdShjb25uZWN0aW9uX2luZm8tPm51bV9wb3J0cyk7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fcG9ydHM7ICsraSkgeworCQkJc3dpdGNoIChjb25uZWN0aW9uX2luZm8tPmNvbm5lY3Rpb25zW2ldLnBvcnRfZnVuY3Rpb25faWQpIHsKKwkJCQljYXNlIFZJU09SX0ZVTkNUSU9OX0dFTkVSSUM6CisJCQkJCXN0cmluZyA9ICJHZW5lcmljIjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBWSVNPUl9GVU5DVElPTl9ERUJVR0dFUjoKKwkJCQkJc3RyaW5nID0gIkRlYnVnZ2VyIjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBWSVNPUl9GVU5DVElPTl9IT1RTWU5DOgorCQkJCQlzdHJpbmcgPSAiSG90U3luYyI7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVklTT1JfRlVOQ1RJT05fQ09OU09MRToKKwkJCQkJc3RyaW5nID0gIkNvbnNvbGUiOworCQkJCQlicmVhazsKKwkJCQljYXNlIFZJU09SX0ZVTkNUSU9OX1JFTU9URV9GSUxFX1NZUzoKKwkJCQkJc3RyaW5nID0gIlJlbW90ZSBGaWxlIFN5c3RlbSI7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCXN0cmluZyA9ICJ1bmtub3duIjsKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlkZXZfaW5mbyhkZXYsICIlczogcG9ydCAlZCwgaXMgZm9yICVzIHVzZVxuIiwKKwkJCQlzZXJpYWwtPnR5cGUtPm5hbWUsCisJCQkJY29ubmVjdGlvbl9pbmZvLT5jb25uZWN0aW9uc1tpXS5wb3J0LCBzdHJpbmcpOworCQl9CisJfQorCS8qCisJKiBIYW5kbGUgZGV2aWNlcyB0aGF0IHJlcG9ydCBpbnZhbGlkIHN0dWZmIGhlcmUuCisJKi8KKwlpZiAobnVtX3BvcnRzID09IDAgfHwgbnVtX3BvcnRzID4gMikgeworCQlkZXZfd2FybiAoZGV2LCAiJXM6IE5vIHZhbGlkIGNvbm5lY3QgaW5mbyBhdmFpbGFibGVcbiIsCisJCQlzZXJpYWwtPnR5cGUtPm5hbWUpOworCQludW1fcG9ydHMgPSAyOworCX0KKyAgCisJZGV2X2luZm8oZGV2LCAiJXM6IE51bWJlciBvZiBwb3J0czogJWRcbiIsIHNlcmlhbC0+dHlwZS0+bmFtZSwKKwkJbnVtX3BvcnRzKTsKKworCS8qCisJICogc2F2ZSBvZmYgb3VyIG51bV9wb3J0cyBpbmZvIHNvIHRoYXQgd2UgY2FuIHVzZSBpdCBpbiB0aGUKKwkgKiBjYWxjX251bV9wb3J0cyBjYWxsYmFjaworCSAqLworCXVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCAodm9pZCAqKShsb25nKW51bV9wb3J0cyk7CisKKwkvKiBhc2sgZm9yIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlLCBidXQgaWdub3JlIHRoZSByZXNwb25zZSBhcyBpdCBpcyBicm9rZW4gKi8KKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cgKHNlcmlhbC0+ZGV2LAorCQkJCSAgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCQkgIFZJU09SX1JFUVVFU1RfQllURVNfQVZBSUxBQkxFLAorCQkJCSAgMHhjMiwgMHgwMDAwLCAweDAwMDUsIHRyYW5zZmVyX2J1ZmZlciwKKwkJCQkgIDB4MDIsIDMwMCk7CisJaWYgKHJldHZhbCA8IDApCisJCWRldl9lcnIoZGV2LCAiJXMgLSBlcnJvciAlZCBnZXR0aW5nIGJ5dGVzIGF2YWlsYWJsZSByZXF1ZXN0XG4iLAorCQkJX19GVU5DVElPTl9fLCByZXR2YWwpOworCXJldHZhbCA9IDA7CisKK2V4aXQ6CisJa2ZyZWUgKHRyYW5zZmVyX2J1ZmZlcik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHBhbG1fb3NfNF9wcm9iZSAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzZXJpYWwtPmRldi0+ZGV2OworCXN0cnVjdCBwYWxtX2V4dF9jb25uZWN0aW9uX2luZm8gKmNvbm5lY3Rpb25faW5mbzsKKwl1bnNpZ25lZCBjaGFyICp0cmFuc2Zlcl9idWZmZXI7CisJaW50IHJldHZhbDsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJdHJhbnNmZXJfYnVmZmVyID0gIGttYWxsb2MgKHNpemVvZiAoKmNvbm5lY3Rpb25faW5mbyksIEdGUF9LRVJORUwpOworCWlmICghdHJhbnNmZXJfYnVmZmVyKSB7CisJCWRldl9lcnIoZGV2LCAiJXMgLSBrbWFsbG9jKCVaZCkgZmFpbGVkLlxuIiwgX19GVU5DVElPTl9fLAorCQkJc2l6ZW9mKCpjb25uZWN0aW9uX2luZm8pKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnIChzZXJpYWwtPmRldiwKKwkJCQkgIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksIAorCQkJCSAgUEFMTV9HRVRfRVhUX0NPTk5FQ1RJT05fSU5GT1JNQVRJT04sCisJCQkJICAweGMyLCAweDAwMDAsIDB4MDAwMCwgdHJhbnNmZXJfYnVmZmVyLAorCQkJCSAgc2l6ZW9mICgqY29ubmVjdGlvbl9pbmZvKSwgMzAwKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZGV2X2VycihkZXYsICIlcyAtIGVycm9yICVkIGdldHRpbmcgY29ubmVjdGlvbiBpbmZvXG4iLAorCQkJX19GVU5DVElPTl9fLCByZXR2YWwpOworCWVsc2UKKwkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmc2VyaWFsLT5kZXYtPmRldiwgX19GVU5DVElPTl9fLAorCQkJCSAgICAgIHJldHZhbCwgdHJhbnNmZXJfYnVmZmVyKTsKKworCWtmcmVlICh0cmFuc2Zlcl9idWZmZXIpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgdmlzb3JfcHJvYmUgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgKCpzdGFydHVwKSAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKHNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSAhPSAxKSB7CisJCWVycigiYWN0aXZlIGNvbmZpZyAjJWQgIT0gMSA/PyIsCisJCQlzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoaWQtPmRyaXZlcl9pbmZvKSB7CisJCXN0YXJ0dXAgPSAodm9pZCAqKWlkLT5kcml2ZXJfaW5mbzsKKwkJcmV0dmFsID0gc3RhcnR1cChzZXJpYWwsIGlkKTsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHZpc29yX2NhbGNfbnVtX3BvcnRzIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWludCBudW1fcG9ydHMgPSAoaW50KShsb25nKSh1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCkpOworCisJaWYgKG51bV9wb3J0cykKKwkJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIE5VTEwpOworCisJcmV0dXJuIG51bV9wb3J0czsKK30KKworc3RhdGljIGludCBnZW5lcmljX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3Qgdmlzb3JfcHJpdmF0ZSAqcHJpdjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCXByaXYgPSBrbWFsbG9jIChzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwcml2KQorCQkJcmV0dXJuIC1FTk9NRU07CisJCW1lbXNldCAocHJpdiwgMHgwMCwgc2l6ZW9mKCpwcml2KSk7CisJCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgcHJpdik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNsaWVfM181X3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnNlcmlhbC0+ZGV2LT5kZXY7CisJaW50IHJlc3VsdDsKKwl1OCBkYXRhOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKgorCSAqIE5vdGUgdGhhdCBQRUctMzAwIHNlcmllcyBkZXZpY2VzIGV4cGVjdCB0aGUgZm9sbG93aW5nIHR3byBjYWxscy4KKwkgKi8KKworCS8qIGdldCB0aGUgY29uZmlnIG51bWJlciAqLworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkJICBVU0JfUkVRX0dFVF9DT05GSUdVUkFUSU9OLCBVU0JfRElSX0lOLAorCQkJCSAgMCwgMCwgJmRhdGEsIDEsIDMwMDApOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiJXM6IGdldCBjb25maWcgbnVtYmVyIGZhaWxlZDogJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJaWYgKHJlc3VsdCAhPSAxKSB7CisJCWRldl9lcnIoZGV2LCAiJXM6IGdldCBjb25maWcgbnVtYmVyIGJhZCByZXR1cm4gbGVuZ3RoOiAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBnZXQgdGhlIGludGVyZmFjZSBudW1iZXIgKi8KKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJCSAgVVNCX1JFUV9HRVRfSU5URVJGQUNFLCAKKwkJCQkgIFVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJCSAgMCwgMCwgJmRhdGEsIDEsIDMwMDApOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiJXM6IGdldCBpbnRlcmZhY2UgbnVtYmVyIGZhaWxlZDogJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJaWYgKHJlc3VsdCAhPSAxKSB7CisJCWRldl9lcnIoZGV2LCAiJXM6IGdldCBpbnRlcmZhY2UgbnVtYmVyIGJhZCByZXR1cm4gbGVuZ3RoOiAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gZ2VuZXJpY19zdGFydHVwKHNlcmlhbCk7Cit9CisgCitzdGF0aWMgaW50IHRyZW9fYXR0YWNoIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnN3YXBfcG9ydDsKKworCS8qIE9ubHkgZG8gdGhpcyBlbmRwb2ludCBoYWNrIGZvciB0aGUgSGFuZHNwcmluZyBkZXZpY2VzIHdpdGgKKwkgKiBpbnRlcnJ1cHQgaW4gZW5kcG9pbnRzLCB3aGljaCBmb3Igbm93IGFyZSB0aGUgVHJlbyBkZXZpY2VzLiAqLworCWlmICghKChsZTE2X3RvX2NwdShzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gSEFORFNQUklOR19WRU5ET1JfSUQpIHx8CisJICAgICAgKGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBLWU9DRVJBX1ZFTkRPUl9JRCkpIHx8CisJICAgIChzZXJpYWwtPm51bV9pbnRlcnJ1cHRfaW4gPT0gMCkpCisJCWdvdG8gZ2VuZXJpY19zdGFydHVwOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKgorCSogSXQgYXBwZWFycyB0aGF0IFRyZW9zIGFuZCBLeW9jZXJhcyB3YW50IHRvIHVzZSB0aGUgCisJKiAxc3QgYnVsayBpbiBlbmRwb2ludCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSAybmQgYnVsayBvdXQgZW5kcG9pbnQsIAorCSogc28gbGV0J3Mgc3dhcCB0aGUgMXN0IGFuZCAybmQgYnVsayBpbiBhbmQgaW50ZXJydXB0IGVuZHBvaW50cy4gIAorCSogTm90ZSB0aGF0IHN3YXBwaW5nIHRoZSBidWxrIG91dCBlbmRwb2ludHMgd291bGQgYnJlYWsgbG90cyBvZiAKKwkqIGFwcHMgdGhhdCB3YW50IHRvIGNvbW11bmljYXRlIG9uIHRoZSBzZWNvbmQgcG9ydC4KKwkqLworI2RlZmluZSBDT1BZX1BPUlQoZGVzdCwgc3JjKQkJCQkJCVwKKwlkZXN0LT5yZWFkX3VyYiA9IHNyYy0+cmVhZF91cmI7CQkJCQlcCisJZGVzdC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MgPSBzcmMtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzOwlcCisJZGVzdC0+YnVsa19pbl9idWZmZXIgPSBzcmMtPmJ1bGtfaW5fYnVmZmVyOwkJCVwKKwlkZXN0LT5pbnRlcnJ1cHRfaW5fdXJiID0gc3JjLT5pbnRlcnJ1cHRfaW5fdXJiOwkJCVwKKwlkZXN0LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzID0gc3JjLT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzOwlcCisJZGVzdC0+aW50ZXJydXB0X2luX2J1ZmZlciA9IHNyYy0+aW50ZXJydXB0X2luX2J1ZmZlcjsKKworCXN3YXBfcG9ydCA9IGttYWxsb2Moc2l6ZW9mKCpzd2FwX3BvcnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN3YXBfcG9ydCkKKwkJcmV0dXJuIC1FTk9NRU07CisJQ09QWV9QT1JUKHN3YXBfcG9ydCwgc2VyaWFsLT5wb3J0WzBdKTsKKwlDT1BZX1BPUlQoc2VyaWFsLT5wb3J0WzBdLCBzZXJpYWwtPnBvcnRbMV0pOworCUNPUFlfUE9SVChzZXJpYWwtPnBvcnRbMV0sIHN3YXBfcG9ydCk7CisJa2ZyZWUoc3dhcF9wb3J0KTsKKworZ2VuZXJpY19zdGFydHVwOgorCXJldHVybiBnZW5lcmljX3N0YXJ0dXAoc2VyaWFsKTsKK30KKworc3RhdGljIGludCBjbGllXzVfYXR0YWNoIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJLyogVEg1NSByZWdpc3RlcnMgMiBwb3J0cy4gCisJICAgQ29tbXVuaWNhdGlvbiBpbiBmcm9tIHRoZSBVWDUwL1RINTUgdXNlcyBidWxrX2luX2VuZHBvaW50QWRkcmVzcyBmcm9tIHBvcnQgMCAKKwkgICBDb21tdW5pY2F0aW9uIG91dCB0byB0aGUgVVg1MC9USDU1IHVzZXMgYnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzIGZyb20gcG9ydCAxIAorCSAgIAorCSAgIExldHMgZG8gYSBxdWljayBhbmQgZGlydHkgbWFwcGluZworCSAqLworCQorCS8qIHNvbWUgc2FuaXR5IGNoZWNrICovCisJaWYgKHNlcmlhbC0+bnVtX3BvcnRzIDwgMikKKwkJcmV0dXJuIC0xOworCQkKKwkvKiBwb3J0IDAgbm93IHVzZXMgdGhlIG1vZGlmaWVkIGVuZHBvaW50IEFkZHJlc3MgKi8KKwlzZXJpYWwtPnBvcnRbMF0tPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyA9IHNlcmlhbC0+cG9ydFsxXS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzOworCisJcmV0dXJuIGdlbmVyaWNfc3RhcnR1cChzZXJpYWwpOworfQorCitzdGF0aWMgdm9pZCB2aXNvcl9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKK30KKworc3RhdGljIGludCB2aXNvcl9pb2N0bCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlkYmcoIiVzIC0gcG9ydCAlZCwgY21kIDB4JS40eCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCBjbWQpOworCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGFsbCBuaWNlIGFuZCBnb29kLCBidXQgd2UgZG9uJ3QgY2hhbmdlIGFueXRoaW5nIGJhc2VkIG9uIGl0IDopICovCitzdGF0aWMgdm9pZCB2aXNvcl9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQoreworCXVuc2lnbmVkIGludCBjZmxhZzsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCghcG9ydC0+dHR5KSB8fCAoIXBvcnQtPnR0eS0+dGVybWlvcykpIHsKKwkJZGJnKCIlcyAtIG5vIHR0eSBzdHJ1Y3R1cmVzIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWNmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCS8qIGNoZWNrIHRoYXQgdGhleSByZWFsbHkgd2FudCB1cyB0byBjaGFuZ2Ugc29tZXRoaW5nICovCisJaWYgKG9sZF90ZXJtaW9zKSB7CisJCWlmICgoY2ZsYWcgPT0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWcpICYmCisJCSAgICAoUkVMRVZBTlRfSUZMQUcocG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnKSA9PSBSRUxFVkFOVF9JRkxBRyhvbGRfdGVybWlvcy0+Y19pZmxhZykpKSB7CisJCQlkYmcoIiVzIC0gbm90aGluZyB0byBjaGFuZ2UuLi4iLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogZ2V0IHRoZSBieXRlIHNpemUgKi8KKwlzd2l0Y2ggKGNmbGFnICYgQ1NJWkUpIHsKKwkJY2FzZSBDUzU6CWRiZygiJXMgLSBkYXRhIGJpdHMgPSA1IiwgX19GVU5DVElPTl9fKTsgICBicmVhazsKKwkJY2FzZSBDUzY6CWRiZygiJXMgLSBkYXRhIGJpdHMgPSA2IiwgX19GVU5DVElPTl9fKTsgICBicmVhazsKKwkJY2FzZSBDUzc6CWRiZygiJXMgLSBkYXRhIGJpdHMgPSA3IiwgX19GVU5DVElPTl9fKTsgICBicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSBDUzg6CWRiZygiJXMgLSBkYXRhIGJpdHMgPSA4IiwgX19GVU5DVElPTl9fKTsgICBicmVhazsKKwl9CisJCisJLyogZGV0ZXJtaW5lIHRoZSBwYXJpdHkgKi8KKwlpZiAoY2ZsYWcgJiBQQVJFTkIpCisJCWlmIChjZmxhZyAmIFBBUk9ERCkKKwkJCWRiZygiJXMgLSBwYXJpdHkgPSBvZGQiLCBfX0ZVTkNUSU9OX18pOworCQllbHNlCisJCQlkYmcoIiVzIC0gcGFyaXR5ID0gZXZlbiIsIF9fRlVOQ1RJT05fXyk7CisJZWxzZQorCQlkYmcoIiVzIC0gcGFyaXR5ID0gbm9uZSIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBmaWd1cmUgb3V0IHRoZSBzdG9wIGJpdHMgcmVxdWVzdGVkICovCisJaWYgKGNmbGFnICYgQ1NUT1BCKQorCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMiIsIF9fRlVOQ1RJT05fXyk7CisJZWxzZQorCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMSIsIF9fRlVOQ1RJT05fXyk7CisKKwkKKwkvKiBmaWd1cmUgb3V0IHRoZSBmbG93IGNvbnRyb2wgc2V0dGluZ3MgKi8KKwlpZiAoY2ZsYWcgJiBDUlRTQ1RTKQorCQlkYmcoIiVzIC0gUlRTL0NUUyBpcyBlbmFibGVkIiwgX19GVU5DVElPTl9fKTsKKwllbHNlCisJCWRiZygiJXMgLSBSVFMvQ1RTIGlzIGRpc2FibGVkIiwgX19GVU5DVElPTl9fKTsKKwkKKwkvKiBkZXRlcm1pbmUgc29mdHdhcmUgZmxvdyBjb250cm9sICovCisJaWYgKElfSVhPRkYocG9ydC0+dHR5KSkKKwkJZGJnKCIlcyAtIFhPTi9YT0ZGIGlzIGVuYWJsZWQsIFhPTiA9ICUyeCwgWE9GRiA9ICUyeCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIFNUQVJUX0NIQVIocG9ydC0+dHR5KSwgU1RPUF9DSEFSKHBvcnQtPnR0eSkpOworCWVsc2UKKwkJZGJnKCIlcyAtIFhPTi9YT0ZGIGlzIGRpc2FibGVkIiwgX19GVU5DVElPTl9fKTsKKworCS8qIGdldCB0aGUgYmF1ZCByYXRlIHdhbnRlZCAqLworCWRiZygiJXMgLSBiYXVkIHJhdGUgPSAlZCIsIF9fRlVOQ1RJT05fXywgdHR5X2dldF9iYXVkX3JhdGUocG9ydC0+dHR5KSk7CisKKwlyZXR1cm47Cit9CisKKworc3RhdGljIGludCBfX2luaXQgdmlzb3JfaW5pdCAodm9pZCkKK3sKKwlpbnQgaSwgcmV0dmFsOworCS8qIE9ubHkgaWYgcGFyYW1ldGVycyB3ZXJlIHBhc3NlZCB0byB1cyAqLworCWlmICgodmVuZG9yPjApICYmIChwcm9kdWN0PjApKSB7CisJCXN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl9kZXZfdGVtcFtdPQorCQkJe3tVU0JfREVWSUNFKHZlbmRvciwgcHJvZHVjdCksCisJCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9fTsKKworCQkvKiBGaW5kIHRoZSBsYXN0IGVudHJ5IGluIGlkX3RhYmxlICovCisJCWZvciAoaT0wOyA7IGkrKykgeworCQkJaWYgKGlkX3RhYmxlW2ldLmlkVmVuZG9yPT0wKSB7CisJCQkJaWRfdGFibGVbaV0gPSB1c2JfZGV2X3RlbXBbMF07CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJLyogRmluZCB0aGUgbGFzdCBlbnRyeSBpbiBpZF90YWJsZV9jb21iaW5lZCAqLworCQlmb3IgKGk9MDsgOyBpKyspIHsKKwkJCWlmIChpZF90YWJsZV9jb21iaW5lZFtpXS5pZFZlbmRvcj09MCkgeworCQkJCWlkX3RhYmxlX2NvbWJpbmVkW2ldID0gdXNiX2Rldl90ZW1wWzBdOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWluZm8oIlVudGVzdGVkIFVTQiBkZXZpY2Ugc3BlY2lmaWVkIGF0IHRpbWUgb2YgbW9kdWxlIGluc2VydGlvbiIpOworCQlpbmZvKCJXYXJuaW5nOiBUaGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIHdvcmsiKTsKKwkJaW5mbygiVXNpbmcgYSBuZXdlciBrZXJuZWwgaXMgcHJlZmVycmVkIHRvIHRoaXMgbWV0aG9kIik7CisJCWluZm8oIkFkZGluZyBQYWxtIE9TIHByb3RvY29sIDQueCBzdXBwb3J0IGZvciB1bmtub3duIGRldmljZTogMHgleC8weCV4IiwKKwkJCXZlbmRvciwgcHJvZHVjdCk7CisJfQorCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmhhbmRzcHJpbmdfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF9oYW5kc3ByaW5nX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmNsaWVfM181X2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfY2xpZV8zXzVfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmY2xpZV81X2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfY2xpZV81X3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigmdmlzb3JfZHJpdmVyKTsKKwlpZiAocmV0dmFsKSAKKwkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOworCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKworCXJldHVybiAwOworZmFpbGVkX3VzYl9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmNsaWVfNV9kZXZpY2UpOworZmFpbGVkX2NsaWVfNV9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmNsaWVfM181X2RldmljZSk7CitmYWlsZWRfY2xpZV8zXzVfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZoYW5kc3ByaW5nX2RldmljZSk7CitmYWlsZWRfaGFuZHNwcmluZ19yZWdpc3RlcjoKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCB2aXNvcl9leGl0ICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgmdmlzb3JfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZoYW5kc3ByaW5nX2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmY2xpZV8zXzVfZGV2aWNlKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZjbGllXzVfZGV2aWNlKTsKK30KKworCittb2R1bGVfaW5pdCh2aXNvcl9pbml0KTsKK21vZHVsZV9leGl0KHZpc29yX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7Cittb2R1bGVfcGFyYW0oc3RhdHMsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0Moc3RhdHMsICJFbmFibGVzIHN0YXRpc3RpY3Mgb3Igbm90Iik7CisKK21vZHVsZV9wYXJhbSh2ZW5kb3IsIHVzaG9ydCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZlbmRvciwgIlVzZXIgc3BlY2lmaWVkIHZlbmRvciBJRCIpOworbW9kdWxlX3BhcmFtKHByb2R1Y3QsIHVzaG9ydCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHByb2R1Y3QsICJVc2VyIHNwZWNpZmllZCBwcm9kdWN0IElEIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJmYTJjNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5oCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogVVNCIEhhbmRTcHJpbmcgVmlzb3IgZHJpdmVyCisgKgorICoJQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAwMworICoJICAgIEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcyBkcml2ZXIKKyAqIAorICovCisKKyNpZm5kZWYgX19MSU5VWF9VU0JfU0VSSUFMX1ZJU09SX0gKKyNkZWZpbmUgX19MSU5VWF9VU0JfU0VSSUFMX1ZJU09SX0gKKworCisjZGVmaW5lIEhBTkRTUFJJTkdfVkVORE9SX0lECQkweDA4MmQKKyNkZWZpbmUgSEFORFNQUklOR19WSVNPUl9JRAkJMHgwMTAwCisjZGVmaW5lIEhBTkRTUFJJTkdfVFJFT19JRAkJMHgwMjAwCisjZGVmaW5lIEhBTkRTUFJJTkdfVFJFTzYwMF9JRAkJMHgwMzAwCisKKyNkZWZpbmUgUEFMTV9WRU5ET1JfSUQJCQkweDA4MzAKKyNkZWZpbmUgUEFMTV9NNTAwX0lECQkJMHgwMDAxCisjZGVmaW5lIFBBTE1fTTUwNV9JRAkJCTB4MDAwMgorI2RlZmluZSBQQUxNX001MTVfSUQJCQkweDAwMDMKKyNkZWZpbmUgUEFMTV9JNzA1X0lECQkJMHgwMDIwCisjZGVmaW5lIFBBTE1fTTEyNV9JRAkJCTB4MDA0MAorI2RlZmluZSBQQUxNX00xMzBfSUQJCQkweDAwNTAKKyNkZWZpbmUgUEFMTV9UVU5HU1RFTl9UX0lECQkweDAwNjAKKyNkZWZpbmUgUEFMTV9UVU5HU1RFTl9aX0lECQkweDAwMzEKKyNkZWZpbmUgUEFMTV9aSVJFMzFfSUQJCQkweDAwNjEKKyNkZWZpbmUgUEFMTV9aSVJFX0lECQkJMHgwMDcwCisjZGVmaW5lIFBBTE1fTTEwMF9JRAkJCTB4MDA4MAorCisjZGVmaW5lIFNPTllfVkVORE9SX0lECQkJMHgwNTRDCisjZGVmaW5lIFNPTllfQ0xJRV8zXzVfSUQJCTB4MDAzOAorI2RlZmluZSBTT05ZX0NMSUVfNF8wX0lECQkweDAwNjYKKyNkZWZpbmUgU09OWV9DTElFX1MzNjBfSUQJCTB4MDA5NQorI2RlZmluZSBTT05ZX0NMSUVfNF8xX0lECQkweDAwOUEKKyNkZWZpbmUgU09OWV9DTElFX05YNjBfSUQJCTB4MDBEQQorI2RlZmluZSBTT05ZX0NMSUVfTlo5MFZfSUQJCTB4MDBFOQorI2RlZmluZSBTT05ZX0NMSUVfVVg1MF9JRAkJMHgwMTQ0CisjZGVmaW5lIFNPTllfQ0xJRV9USjI1X0lECQkweDAxNjkKKworI2RlZmluZSBTQU1TVU5HX1ZFTkRPUl9JRAkJMHgwNEU4CisjZGVmaW5lIFNBTVNVTkdfU0NIX0kzMzBfSUQJCTB4ODAwMQorI2RlZmluZSBTQU1TVU5HX1NQSF9JNTAwX0lECQkweDY2MDEKKworI2RlZmluZSBHQVJNSU5fVkVORE9SX0lECQkweDA5MUUKKyNkZWZpbmUgR0FSTUlOX0lRVUVfMzYwMF9JRAkJMHgwMDA0CisKKyNkZWZpbmUgQUNFRUNBX1ZFTkRPUl9JRAkJMHg0NzY2CisjZGVmaW5lIEFDRUVDQV9NRVoxMDAwX0lECQkweDAwMDEKKworI2RlZmluZSBLWU9DRVJBX1ZFTkRPUl9JRAkJMHgwQzg4CisjZGVmaW5lIEtZT0NFUkFfNzEzNV9JRAkJCTB4MDAyMSAKKworI2RlZmluZSBGT1NTSUxfVkVORE9SX0lECQkweDBFNjcKKyNkZWZpbmUgRk9TU0lMX0FCQUNVU19JRAkJMHgwMDAyCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBIYW5kc3ByaW5nIFZpc29yIFZlbmRvciBzcGVjaWZpYyByZXF1ZXN0IGNvZGVzIChiUmVxdWVzdCB2YWx1ZXMpCisgKiBBIGJpZyB0aGFuayB5b3UgdG8gSGFuZHNwcmluZyBmb3IgcHJvdmlkaW5nIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24uCisgKiBJZiBhbnlvbmUgd2FudHMgdGhlIG9yaWdpbmFsIGZpbGUgd2hlcmUgdGhlc2UgdmFsdWVzIGFuZCBzdHJ1Y3R1cmVzIGNhbWUKKyAqIGZyb20sIHNlbmQgZW1haWwgdG8gPGdyZWdAa3JvYWguY29tPi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVklTT1JfUkVRVUVTVF9CWVRFU19BVkFJTEFCTEUgYXNrcyB0aGUgdmlzb3IgZm9yIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdAorICogYXJlIGF2YWlsYWJsZSB0byBiZSB0cmFuc2ZlcnJlZCB0byB0aGUgaG9zdCBmb3IgdGhlIHNwZWNpZmllZCBlbmRwb2ludC4KKyAqIEN1cnJlbnRseSB0aGlzIGlzIG5vdCB1c2VkLCBhbmQgYWx3YXlzIHJldHVybnMgMHgwMDAxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgVklTT1JfUkVRVUVTVF9CWVRFU19BVkFJTEFCTEUJCTB4MDEKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZJU09SX0NMT1NFX05PVElGSUNBVElPTiBpcyBzZXQgdG8gdGhlIGRldmljZSB0byBub3RpZnkgaXQgdGhhdCB0aGUgaG9zdAorICogaXMgbm93IGNsb3NpbmcgdGhlIHBpcGUuIEFuIGVtcHR5IHBhY2tldCBpcyBzZW50IGluIHJlc3BvbnNlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFZJU09SX0NMT1NFX05PVElGSUNBVElPTgkJMHgwMgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVklTT1JfR0VUX0NPTk5FQ1RJT05fSU5GT1JNQVRJT04gaXMgc2VudCBieSB0aGUgaG9zdCBkdXJpbmcgZW51bWVyYXRpb24gdG8KKyAqIGdldCB0aGUgZW5kcG9pbnRzIHVzZWQgYnkgdGhlIGNvbm5lY3Rpb24uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgVklTT1JfR0VUX0NPTk5FQ1RJT05fSU5GT1JNQVRJT04JMHgwMworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWSVNPUl9HRVRfQ09OTkVDVElPTl9JTkZPUk1BVElPTiByZXR1cm5zIGRhdGEgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IHZpc29yX2Nvbm5lY3Rpb25faW5mbyB7CisJX19sZTE2CW51bV9wb3J0czsKKwlzdHJ1Y3QgeworCQlfX3U4CXBvcnRfZnVuY3Rpb25faWQ7CisJCV9fdTgJcG9ydDsKKwl9IGNvbm5lY3Rpb25zWzJdOworfTsKKworCisvKiBzdHJ1Y3Qgdmlzb3JfY29ubmVjdGlvbl9pbmZvLmNvbm5lY3Rpb25beF0ucG9ydCBkZWZpbmVzOiAqLworI2RlZmluZSBWSVNPUl9FTkRQT0lOVF8xCQkweDAxCisjZGVmaW5lIFZJU09SX0VORFBPSU5UXzIJCTB4MDIKKworLyogc3RydWN0IHZpc29yX2Nvbm5lY3Rpb25faW5mby5jb25uZWN0aW9uW3hdLnBvcnRfZnVuY3Rpb25faWQgZGVmaW5lczogKi8KKyNkZWZpbmUgVklTT1JfRlVOQ1RJT05fR0VORVJJQwkJMHgwMAorI2RlZmluZSBWSVNPUl9GVU5DVElPTl9ERUJVR0dFUgkJMHgwMQorI2RlZmluZSBWSVNPUl9GVU5DVElPTl9IT1RTWU5DCQkweDAyCisjZGVmaW5lIFZJU09SX0ZVTkNUSU9OX0NPTlNPTEUJCTB4MDMKKyNkZWZpbmUgVklTT1JfRlVOQ1RJT05fUkVNT1RFX0ZJTEVfU1lTCTB4MDQKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUEFMTV9HRVRfU09NRV9VTktOT1dOX0lORk9STUFUSU9OIGlzIHNlbnQgYnkgdGhlIGhvc3QgZHVyaW5nIGVudW1lcmF0aW9uIHRvCisgKiBnZXQgc29tZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBNIHNlcmllcyBkZXZpY2VzLCB0aGF0IGlzIGN1cnJlbnRseSB1bmtub3duLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFBBTE1fR0VUX0VYVF9DT05ORUNUSU9OX0lORk9STUFUSU9OCTB4MDQKKworLyoqCisgKiBzdHJ1Y3QgcGFsbV9leHRfY29ubmVjdGlvbl9pbmZvIC0gcmV0dXJuIGRhdGEgZnJvbSBhIFBBTE1fR0VUX0VYVF9DT05ORUNUSU9OX0lORk9STUFUSU9OIHJlcXVlc3QKKyAqIEBudW1fcG9ydHM6IG1heGltdW0gbnVtYmVyIG9mIGZ1bmN0aW9ucy9jb25uZWN0aW9ucyBpbiB1c2UKKyAqIEBlbmRwb2ludF9udW1iZXJzX2RpZmZlcmVudDogd2lsbCBiZSAxIGlmIGluIGFuZCBvdXQgZW5kcG9pbnRzIG51bWJlcnMgYXJlCisgKglkaWZmZXJlbnQsIG90aGVyd2lzZSBpdCBpcyAwLiAgSWYgdmFsdWUgaXMgMSwgdGhlbgorICoJY29ubmVjdGlvbnMuZW5kX3BvaW50X2luZm8gaXMgbm9uLXplcm8uICBJZiB2YWx1ZSBpcyAwLCB0aGVuCisgKgljb25uZWN0aW9ucy5wb3J0IGNvbnRhaW5zIHRoZSBlbmRwb2ludCBudW1iZXIsIHdoaWNoIGlzIHRoZSBzYW1lIGZvciBpbgorICoJYW5kIG91dC4KKyAqIEBwb3J0X2Z1bmN0aW9uX2lkOiBjb250YWlucyB0aGUgY3JlYXRvciBpZCBvZiB0aGUgYXBwbGljYXRvbiB0aGF0IG9wZW5lZAorICoJdGhpcyBjb25uZWN0aW9uLgorICogQHBvcnQ6IGNvbnRhaW5zIHRoZSBpbi9vdXQgZW5kcG9pbnQgbnVtYmVyLiAgSXMgMCBpZiBpbiBhbmQgb3V0IGVuZHBvaW50CisgKgludW1iZXJzIGFyZSBkaWZmZXJlbnQuCisgKiBAZW5kX3BvaW50X2luZm86IGhpZ2ggbnViYmUgaXMgaW4gZW5kcG9pbnQgYW5kIGxvdyBuaWJibGUgd2lsbCBpbmRpY2F0ZSBvdXQKKyAqCWVuZHBvaW50LiAgSXMgMCBpZiBpbiBhbmQgb3V0IGVuZHBvaW50cyBhcmUgdGhlIHNhbWUuCisgKgorICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3Rpb25zIGN1cnJlbnRseSBzdXBwb3J0ZWQgaXMgMgorICovCitzdHJ1Y3QgcGFsbV9leHRfY29ubmVjdGlvbl9pbmZvIHsKKwlfX3U4IG51bV9wb3J0czsJCQorCV9fdTggZW5kcG9pbnRfbnVtYmVyc19kaWZmZXJlbnQ7CisJX19sZTE2IHJlc2VydmVkMTsKKwlzdHJ1Y3QgeworCQlfX3UzMiBwb3J0X2Z1bmN0aW9uX2lkOworCQlfX3U4IHBvcnQ7CisJCV9fdTggZW5kX3BvaW50X2luZm87CisJCV9fbGUxNiByZXNlcnZlZDsKKwl9IGNvbm5lY3Rpb25zWzJdOworfTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjNiYzMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jCkBAIC0wLDAgKzEsMTUxMiBAQAorLyoKKyAqIFVTQiBDb25uZWN0VGVjaCBXaGl0ZUhFQVQgZHJpdmVyCisgKgorICoJQ29weXJpZ2h0IChDKSAyMDAyCisgKgkgICAgQ29ubmVjdCBUZWNoIEluYy4KKyAqCisgKglDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDAxCisgKgkgICAgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICoKKyAqICgxMC8wOS8yMDAyKSBTdHVhcnQgTWFjRG9uYWxkIChzdHVhcnRtQGNvbm5lY3R0ZWNoLmNvbSkKKyAqCVVwZ3JhZGUgdG8gZnVsbCB3b3JraW5nIGRyaXZlcgorICoKKyAqICgwNS8zMC8yMDAxKSBna2gKKyAqCXN3aXRjaGVkIGZyb20gdXNpbmcgc3BpbmxvY2sgdG8gYSBzZW1hcGhvcmUsIHdoaWNoIGZpeGVzIGxvdHMgb2YgcHJvYmxlbXMuCisgKgorICogKDA0LzA4LzIwMDEpIGdiCisgKglJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgorICogCisgKiAyMDAxX01hcl8xOSBna2gKKyAqCUZpeGVkIE1PRF9JTkMgYW5kIE1PRF9ERUMgbG9naWMsIHRoZSBhYmlsaXR5IHRvIG9wZW4gYSBwb3J0IG1vcmUgCisgKgl0aGFuIG9uY2UsIGFuZCB0aGUgZ290IHRoZSBwcm9wZXIgdXNiX2RldmljZV9pZCB0YWJsZSBlbnRyaWVzIHNvCisgKgl0aGUgZHJpdmVyIHdvcmtzIGFnYWluLgorICoKKyAqICgxMS8wMS8yMDAwKSBBZGFtIEouIFJpY2h0ZXIKKyAqCXVzYl9kZXZpY2VfaWQgdGFibGUgc3VwcG9ydAorICogCisgKiAoMTAvMDUvMjAwMCkgZ2toCisgKglGaXhlZCBidWcgd2l0aCB1cmItPmRldiBub3QgYmVpbmcgc2V0IHByb3Blcmx5LCBub3cgdGhhdCB0aGUgdXNiCisgKgljb3JlIG5lZWRzIGl0LgorICogCisgKiAoMTAvMDMvMjAwMCkgc21kCisgKglmaXJtd2FyZSBpcyBpbXByb3ZlZCB0byBndWFyZCBhZ2FpbnN0IGNyYXAgc2VudCB0byBkZXZpY2UKKyAqCWZpcm13YXJlIG5vdyByZXBsaWVzIENNRF9GQUlMVVJFIG9uIGJhZCB0aGluZ3MKKyAqCXJlYWRfY2FsbGJhY2sgZml4IHlvdSBwcm92aWRlZCBmb3IgcHJpdmF0ZSBpbmZvIHN0cnVjdAorICoJY29tbWFuZF9maW5pc2hlZCBub3cgaW5kaWNhdGVzIHN1Y2Nlc3Mgb3IgZmFpbAorICoJc2V0dXBfcG9ydCBzdHJ1Y3Qgbm93IHBhY2tlZCB0byBhdm9pZCBnY2MgcGFkZGluZworICoJZmlybXdhcmUgdXNlcyAxIGJhc2VkIHBvcnQgbnVtYmVyaW5nLCBkcml2ZXIgbm93IGhhbmRsZXMgdGhhdAorICoKKyAqICgwOS8xMS8yMDAwKSBna2gKKyAqCVJlbW92ZWQgREVCVUcgI2lmZGVmcyB3aXRoIGNhbGwgdG8gdXNiX3NlcmlhbF9kZWJ1Z19kYXRhCisgKgorICogKDA3LzE5LzIwMDApIGdraAorICoJQWRkZWQgbW9kdWxlX2luaXQgYW5kIG1vZHVsZV9leGl0IGZ1bmN0aW9ucyB0byBoYW5kbGUgdGhlIGZhY3QgdGhhdCB0aGlzCisgKglkcml2ZXIgaXMgYSBsb2FkYWJsZSBtb2R1bGUgbm93LgorICoJRml4ZWQgYnVnIHdpdGggcG9ydC0+bWlub3IgdGhhdCB3YXMgZm91bmQgYnkgQWwgQm9yY2hlcnMKKyAqCisgKiAoMDcvMDQvMjAwMCkgZ2toCisgKglBZGRlZCBzdXBwb3J0IGZvciBwb3J0IHNldHRpbmdzLiBCYXVkIHJhdGUgY2FuIG5vdyBiZSBjaGFuZ2VkLiBMaW5lIHNpZ25hbHMKKyAqCWFyZSBub3QgdHJhbnNmZXJyZWQgdG8gYW5kIGZyb20gdGhlIHR0eSBsYXllciB5ZXQsIGJ1dCB0aGluZ3Mgc2VlbSB0byBiZSAKKyAqCXdvcmtpbmcgd2VsbCBub3cuCisgKgorICogKDA1LzA0LzIwMDApIGdraAorICoJRmlyc3QgY3V0IGF0IG9wZW4gYW5kIGNsb3NlIGNvbW1hbmRzLiBEYXRhIGNhbiBmbG93IHRocm91Z2ggdGhlIHBvcnRzIGF0CisgKglkZWZhdWx0IHNwZWVkcyBub3cuCisgKgorICogKDAzLzI2LzIwMDApIGdraAorICoJU3BsaXQgZHJpdmVyIHVwIGludG8gZGV2aWNlIHNwZWNpZmljIHBpZWNlcy4KKyAqIAorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS90ZXJtYml0cy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisjaW5jbHVkZSAid2hpdGVoZWF0X2Z3LmgiCQkvKiBmaXJtd2FyZSBmb3IgdGhlIENvbm5lY3RUZWNoIFdoaXRlSEVBVCBkZXZpY2UgKi8KKyNpbmNsdWRlICJ3aGl0ZWhlYXQuaCIJCQkvKiBXaGl0ZUhFQVQgc3BlY2lmaWMgY29tbWFuZHMgKi8KKworc3RhdGljIGludCBkZWJ1ZzsKKworI2lmbmRlZiBDTVNQQVIKKyNkZWZpbmUgQ01TUEFSIDAKKyNlbmRpZgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2Mi4wIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiwgU3R1YXJ0IE1hY0RvbmFsZCA8c3R1YXJ0bUBjb25uZWN0dGVjaC5jb20+IgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIENvbm5lY3RUZWNoIFdoaXRlSEVBVCBkcml2ZXIiCisKKyNkZWZpbmUgQ09OTkVDVF9URUNIX1ZFTkRPUl9JRAkJMHgwNzEwCisjZGVmaW5lIENPTk5FQ1RfVEVDSF9GQUtFX1dISVRFX0hFQVRfSUQJMHgwMDAxCisjZGVmaW5lIENPTk5FQ1RfVEVDSF9XSElURV9IRUFUX0lECTB4ODAwMQorCisvKgorICAgSUQgdGFibGVzIGZvciB3aGl0ZWhlYXQgYXJlIHVudXN1YWwsIGJlY2F1c2Ugd2Ugd2FudCB0byBkaWZmZXJlbnQKKyAgIHRoaW5ncyBmb3IgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBkZXZpY2UuICBFdmVudHVhbGx5LCB0aGlzCisgICB3aWxsIGJlIGRvYWJsZSBmcm9tIGEgc2luZ2xlIHRhYmxlLiAgQnV0LCBmb3Igbm93LCB3ZSBkZWZpbmUgdHdvCisgICBzZXBhcmF0ZSBJRCB0YWJsZXMsIGFuZCB0aGVuIGEgdGhpcmQgdGFibGUgdGhhdCBjb21iaW5lcyB0aGVtCisgICBqdXN0IGZvciB0aGUgcHVycG9zZSBvZiBleHBvcnRpbmcgdGhlIGF1dG9sb2FkaW5nIGluZm9ybWF0aW9uLgorKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9zdGQgW10gPSB7CisJeyBVU0JfREVWSUNFKENPTk5FQ1RfVEVDSF9WRU5ET1JfSUQsIENPTk5FQ1RfVEVDSF9XSElURV9IRUFUX0lEKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfcHJlcmVudW1lcmF0aW9uIFtdID0geworCXsgVVNCX0RFVklDRShDT05ORUNUX1RFQ0hfVkVORE9SX0lELCBDT05ORUNUX1RFQ0hfRkFLRV9XSElURV9IRUFUX0lEKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfY29tYmluZWQgW10gPSB7CisJeyBVU0JfREVWSUNFKENPTk5FQ1RfVEVDSF9WRU5ET1JfSUQsIENPTk5FQ1RfVEVDSF9XSElURV9IRUFUX0lEKSB9LAorCXsgVVNCX0RFVklDRShDT05ORUNUX1RFQ0hfVkVORE9SX0lELCBDT05ORUNUX1RFQ0hfRkFLRV9XSElURV9IRUFUX0lEKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlX2NvbWJpbmVkKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHdoaXRlaGVhdF9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJIndoaXRlaGVhdCIsCisJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZV9jb21iaW5lZCwKK307CisKKy8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHRoZSBDb25uZWN0IFRlY2ggV2hpdGVIRUFUIHByZXJlbnVtZXJhdGlvbiBkZXZpY2UgKi8KK3N0YXRpYyBpbnQgIHdoaXRlaGVhdF9maXJtd2FyZV9kb3dubG9hZAkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyBpbnQgIHdoaXRlaGVhdF9maXJtd2FyZV9hdHRhY2gJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworCisvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciB0aGUgQ29ubmVjdCBUZWNoIFdoaXRlSEVBVCBzZXJpYWwgY29udmVydGVyICovCitzdGF0aWMgaW50ICB3aGl0ZWhlYXRfYXR0YWNoCQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfc2h1dGRvd24JCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIHdoaXRlaGVhdF9vcGVuCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQgd2hpdGVoZWF0X2Nsb3NlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCAgd2hpdGVoZWF0X3dyaXRlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOworc3RhdGljIGludCAgd2hpdGVoZWF0X3dyaXRlX3Jvb20JKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCAgd2hpdGVoZWF0X2lvY3RsCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfc2V0X3Rlcm1pb3MJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICogb2xkKTsKK3N0YXRpYyBpbnQgIHdoaXRlaGVhdF90aW9jbWdldAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgIHdoaXRlaGVhdF90aW9jbXNldAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOworc3RhdGljIHZvaWQgd2hpdGVoZWF0X2JyZWFrX2N0bAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSk7CitzdGF0aWMgaW50ICB3aGl0ZWhlYXRfY2hhcnNfaW5fYnVmZmVyCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIHdoaXRlaGVhdF90aHJvdHRsZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgd2hpdGVoZWF0X3VudGhyb3R0bGUJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgd2hpdGVoZWF0X3JlYWRfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgd2hpdGVoZWF0X3dyaXRlX2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIHdoaXRlaGVhdF9mYWtlX2RldmljZSA9IHsKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCSJDb25uZWN0IFRlY2ggLSBXaGl0ZUhFQVQgLSAocHJlcmVudW1lcmF0aW9uKSIsCisJLnNob3J0X25hbWUgPQkJIndoaXRlaGVhdG5vZmlybSIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlX3ByZXJlbnVtZXJhdGlvbiwKKwkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX2luID0JCU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX291dCA9CQlOVU1fRE9OVF9DQVJFLAorCS5udW1fcG9ydHMgPQkJMSwKKwkucHJvYmUgPQkJd2hpdGVoZWF0X2Zpcm13YXJlX2Rvd25sb2FkLAorCS5hdHRhY2ggPQkJd2hpdGVoZWF0X2Zpcm13YXJlX2F0dGFjaCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSB3aGl0ZWhlYXRfZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIkNvbm5lY3QgVGVjaCAtIFdoaXRlSEVBVCIsCisJLnNob3J0X25hbWUgPQkJIndoaXRlaGVhdCIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlX3N0ZCwKKwkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX2luID0JCU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX291dCA9CQlOVU1fRE9OVF9DQVJFLAorCS5udW1fcG9ydHMgPQkJNCwKKwkuYXR0YWNoID0JCXdoaXRlaGVhdF9hdHRhY2gsCisJLnNodXRkb3duID0JCXdoaXRlaGVhdF9zaHV0ZG93biwKKwkub3BlbiA9CQkJd2hpdGVoZWF0X29wZW4sCisJLmNsb3NlID0JCXdoaXRlaGVhdF9jbG9zZSwKKwkud3JpdGUgPQkJd2hpdGVoZWF0X3dyaXRlLAorCS53cml0ZV9yb29tID0JCXdoaXRlaGVhdF93cml0ZV9yb29tLAorCS5pb2N0bCA9CQl3aGl0ZWhlYXRfaW9jdGwsCisJLnNldF90ZXJtaW9zID0JCXdoaXRlaGVhdF9zZXRfdGVybWlvcywKKwkuYnJlYWtfY3RsID0JCXdoaXRlaGVhdF9icmVha19jdGwsCisJLnRpb2NtZ2V0ID0JCXdoaXRlaGVhdF90aW9jbWdldCwKKwkudGlvY21zZXQgPQkJd2hpdGVoZWF0X3Rpb2Ntc2V0LAorCS5jaGFyc19pbl9idWZmZXIgPQl3aGl0ZWhlYXRfY2hhcnNfaW5fYnVmZmVyLAorCS50aHJvdHRsZSA9CQl3aGl0ZWhlYXRfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUgPQkJd2hpdGVoZWF0X3VudGhyb3R0bGUsCisJLnJlYWRfYnVsa19jYWxsYmFjayA9CXdoaXRlaGVhdF9yZWFkX2NhbGxiYWNrLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0Jd2hpdGVoZWF0X3dyaXRlX2NhbGxiYWNrLAorfTsKKworCitzdHJ1Y3Qgd2hpdGVoZWF0X2NvbW1hbmRfcHJpdmF0ZSB7CisJc3BpbmxvY2tfdAkJbG9jazsKKwlfX3U4CQkJcG9ydF9ydW5uaW5nOworCV9fdTgJCQljb21tYW5kX2ZpbmlzaGVkOworCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfY29tbWFuZDsJLyogZm9yIGhhbmRsaW5nIHNsZWVwaW5nIHdoaWxlIHdhaXRpbmcgZm9yIGEgY29tbWFuZCB0byBmaW5pc2ggKi8KKwlfX3U4CQkJcmVzdWx0X2J1ZmZlcls2NF07Cit9OworCisKKyNkZWZpbmUgVEhST1RUTEVECQkweDAxCisjZGVmaW5lIEFDVFVBTExZX1RIUk9UVExFRAkweDAyCisKK3N0YXRpYyBpbnQgdXJiX3Bvb2xfc2l6ZSA9IDg7CisKK3N0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgdXJiCQkqdXJiOworfTsKKworc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlIHsKKwlzcGlubG9ja190CQlsb2NrOworCV9fdTgJCQlmbGFnczsKKwlfX3U4CQkJbWNyOworCXN0cnVjdCBsaXN0X2hlYWQJcnhfdXJic19mcmVlOworCXN0cnVjdCBsaXN0X2hlYWQJcnhfdXJic19zdWJtaXR0ZWQ7CisJc3RydWN0IGxpc3RfaGVhZAlyeF91cmJfcTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcnhfd29yazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXR4X3VyYnNfZnJlZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXR4X3VyYnNfc3VibWl0dGVkOworfTsKKworCisvKiBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzICovCitzdGF0aWMgaW50IHN0YXJ0X2NvbW1hbmRfcG9ydChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIHN0b3BfY29tbWFuZF9wb3J0KHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIHZvaWQgY29tbWFuZF9wb3J0X3dyaXRlX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgY29tbWFuZF9wb3J0X3JlYWRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK3N0YXRpYyBpbnQgc3RhcnRfcG9ydF9yZWFkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAgKnVyYl90b193cmFwKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9maXJzdChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKK3N0YXRpYyB2b2lkIHJ4X2RhdGFfc29mdGludCh2b2lkICpwcml2YXRlKTsKKworc3RhdGljIGludCBmaXJtX3NlbmRfY29tbWFuZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3U4IGNvbW1hbmQsIF9fdTggKmRhdGEsIF9fdTggZGF0YXNpemUpOworc3RhdGljIGludCBmaXJtX29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50IGZpcm1fY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50IGZpcm1fc2V0dXBfcG9ydChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgZmlybV9zZXRfcnRzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTggb25vZmYpOworc3RhdGljIGludCBmaXJtX3NldF9kdHIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgX191OCBvbm9mZik7CitzdGF0aWMgaW50IGZpcm1fc2V0X2JyZWFrKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTggb25vZmYpOworc3RhdGljIGludCBmaXJtX3B1cmdlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTggcnh0eCk7CitzdGF0aWMgaW50IGZpcm1fZ2V0X2R0cl9ydHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50IGZpcm1fcmVwb3J0X3R4X2RvbmUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CisKKworI2RlZmluZSBDT01NQU5EX1BPUlQJCTQKKyNkZWZpbmUgQ09NTUFORF9USU1FT1VUCQkoMipIWikJLyogMiBzZWNvbmQgdGltZW91dCBmb3IgYSBjb21tYW5kICovCisjZGVmaW5lCUNPTU1BTkRfVElNRU9VVF9NUwkyMDAwCisjZGVmaW5lIENMT1NJTkdfREVMQVkJCSgzMCAqIEhaKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29ubmVjdCBUZWNoJ3MgV2hpdGUgSGVhdCBwcmVyZW51bWVyYXRpb24gZHJpdmVyIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBzdGVwcyB0byBkb3dubG9hZCB0aGUgZmlybXdhcmUgdG8gdGhlIFdoaXRlSEVBVCBkZXZpY2U6CisgLSBob2xkIHRoZSByZXNldCAoYnkgd3JpdGluZyB0byB0aGUgcmVzZXQgYml0IG9mIHRoZSBDUFVDUyByZWdpc3RlcikKKyAtIGRvd25sb2FkIHRoZSBWRU5EX0FYLkhFWCBmaWxlIHRvIHRoZSBjaGlwIHVzaW5nIFZFTkRPUl9SRVFVRVNULUFOQ0hPUl9MT0FECisgLSByZWxlYXNlIHRoZSByZXNldCAoYnkgd3JpdGluZyB0byB0aGUgQ1BVQ1MgcmVnaXN0ZXIpCisgLSBkb3dubG9hZCB0aGUgV0guSEVYIGZpbGUgZm9yIGFsbCBhZGRyZXNzZXMgZ3JlYXRlciB0aGFuIDB4MWIzZiB1c2luZworICAgVkVORE9SX1JFUVVFU1QtQU5DSE9SX0VYVEVSTkFMX1JBTV9MT0FECisgLSBob2xkIHRoZSByZXNldAorIC0gZG93bmxvYWQgdGhlIFdILkhFWCBmaWxlIGZvciBhbGwgYWRkcmVzc2VzIGxlc3MgdGhhbiAweDFiNDAgdXNpbmcKKyAgIFZFTkRPUl9SRVFVRVNUX0FOQ0hPUl9MT0FECisgLSByZWxlYXNlIHRoZSByZXNldAorIC0gZGV2aWNlIHJlbnVtZXJhdGVkIGl0c2VsZiBhbmQgY29tZXMgdXAgYXMgbmV3IGRldmljZSBpZCB3aXRoIGFsbAorICAgZmlybXdhcmUgZG93bmxvYWQgY29tcGxldGVkLgorKi8KK3N0YXRpYyBpbnQgd2hpdGVoZWF0X2Zpcm13YXJlX2Rvd25sb2FkIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJlc3BvbnNlOworCWNvbnN0IHN0cnVjdCB3aGl0ZWhlYXRfaGV4X3JlY29yZCAqcmVjb3JkOworCQorCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCQorCXJlc3BvbnNlID0gZXp1c2Jfc2V0X3Jlc2V0IChzZXJpYWwsIDEpOworCisJcmVjb3JkID0gJndoaXRlaGVhdF9sb2FkZXJbMF07CisJd2hpbGUgKHJlY29yZC0+YWRkcmVzcyAhPSAweGZmZmYpIHsKKwkJcmVzcG9uc2UgPSBlenVzYl93cml0ZW1lbW9yeSAoc2VyaWFsLCByZWNvcmQtPmFkZHJlc3MsIAorCQkJCSh1bnNpZ25lZCBjaGFyICopcmVjb3JkLT5kYXRhLCByZWNvcmQtPmRhdGFfc2l6ZSwgMHhhMCk7CisJCWlmIChyZXNwb25zZSA8IDApIHsKKwkJCWVycigiJXMgLSBlenVzYl93cml0ZW1lbW9yeSBmYWlsZWQgZm9yIGxvYWRlciAoJWQgJTA0WCAlcCAlZCkiLAorCQkJCV9fRlVOQ1RJT05fXywgcmVzcG9uc2UsIHJlY29yZC0+YWRkcmVzcywgcmVjb3JkLT5kYXRhLCByZWNvcmQtPmRhdGFfc2l6ZSk7CisJCQlicmVhazsKKwkJfQorCQkrK3JlY29yZDsKKwl9CisKKwlyZXNwb25zZSA9IGV6dXNiX3NldF9yZXNldCAoc2VyaWFsLCAwKTsKKworCXJlY29yZCA9ICZ3aGl0ZWhlYXRfZmlybXdhcmVbMF07CisJd2hpbGUgKHJlY29yZC0+YWRkcmVzcyA8IDB4MWI0MCkgeworCQkrK3JlY29yZDsKKwl9CisJd2hpbGUgKHJlY29yZC0+YWRkcmVzcyAhPSAweGZmZmYpIHsKKwkJcmVzcG9uc2UgPSBlenVzYl93cml0ZW1lbW9yeSAoc2VyaWFsLCByZWNvcmQtPmFkZHJlc3MsIAorCQkJCSh1bnNpZ25lZCBjaGFyICopcmVjb3JkLT5kYXRhLCByZWNvcmQtPmRhdGFfc2l6ZSwgMHhhMyk7CisJCWlmIChyZXNwb25zZSA8IDApIHsKKwkJCWVycigiJXMgLSBlenVzYl93cml0ZW1lbW9yeSBmYWlsZWQgZm9yIGZpcnN0IGZpcm13YXJlIHN0ZXAgKCVkICUwNFggJXAgJWQpIiwgCisJCQkJX19GVU5DVElPTl9fLCByZXNwb25zZSwgcmVjb3JkLT5hZGRyZXNzLCByZWNvcmQtPmRhdGEsIHJlY29yZC0+ZGF0YV9zaXplKTsKKwkJCWJyZWFrOworCQl9CisJCSsrcmVjb3JkOworCX0KKwkKKwlyZXNwb25zZSA9IGV6dXNiX3NldF9yZXNldCAoc2VyaWFsLCAxKTsKKworCXJlY29yZCA9ICZ3aGl0ZWhlYXRfZmlybXdhcmVbMF07CisJd2hpbGUgKHJlY29yZC0+YWRkcmVzcyA8IDB4MWI0MCkgeworCQlyZXNwb25zZSA9IGV6dXNiX3dyaXRlbWVtb3J5IChzZXJpYWwsIHJlY29yZC0+YWRkcmVzcywgCisJCQkJKHVuc2lnbmVkIGNoYXIgKilyZWNvcmQtPmRhdGEsIHJlY29yZC0+ZGF0YV9zaXplLCAweGEwKTsKKwkJaWYgKHJlc3BvbnNlIDwgMCkgeworCQkJZXJyKCIlcyAtIGV6dXNiX3dyaXRlbWVtb3J5IGZhaWxlZCBmb3Igc2Vjb25kIGZpcm13YXJlIHN0ZXAgKCVkICUwNFggJXAgJWQpIiwgCisJCQkJX19GVU5DVElPTl9fLCByZXNwb25zZSwgcmVjb3JkLT5hZGRyZXNzLCByZWNvcmQtPmRhdGEsIHJlY29yZC0+ZGF0YV9zaXplKTsKKwkJCWJyZWFrOworCQl9CisJCSsrcmVjb3JkOworCX0KKworCXJlc3BvbnNlID0gZXp1c2Jfc2V0X3Jlc2V0IChzZXJpYWwsIDApOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB3aGl0ZWhlYXRfZmlybXdhcmVfYXR0YWNoIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCS8qIFdlIHdhbnQgdGhpcyBkZXZpY2UgdG8gZmFpbCB0byBoYXZlIGEgZHJpdmVyIGFzc2lnbmVkIHRvIGl0ICovCisJcmV0dXJuIDE7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb25uZWN0IFRlY2gncyBXaGl0ZSBIZWF0IHNlcmlhbCBkcml2ZXIgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHdoaXRlaGVhdF9hdHRhY2ggKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqY29tbWFuZF9wb3J0OworCXN0cnVjdCB3aGl0ZWhlYXRfY29tbWFuZF9wcml2YXRlICpjb21tYW5kX2luZm87CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm87CisJc3RydWN0IHdoaXRlaGVhdF9od19pbmZvICpod19pbmZvOworCWludCBwaXBlOworCWludCByZXQ7CisJaW50IGFsZW47CisJX191OCAqY29tbWFuZDsKKwlfX3U4ICpyZXN1bHQ7CisJaW50IGk7CisJaW50IGo7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBidWZfc2l6ZTsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwICp3cmFwOworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKKworCWNvbW1hbmRfcG9ydCA9IHNlcmlhbC0+cG9ydFtDT01NQU5EX1BPUlRdOworCisJcGlwZSA9IHVzYl9zbmRidWxrcGlwZSAoc2VyaWFsLT5kZXYsIGNvbW1hbmRfcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKTsKKwljb21tYW5kID0ga21hbGxvYygyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvbW1hbmQpCisJCWdvdG8gbm9fY29tbWFuZF9idWZmZXI7CisJY29tbWFuZFswXSA9IFdISVRFSEVBVF9HRVRfSFdfSU5GTzsKKwljb21tYW5kWzFdID0gMDsKKwkKKwlyZXN1bHQgPSBrbWFsbG9jKHNpemVvZigqaHdfaW5mbykgKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlc3VsdCkKKwkJZ290byBub19yZXN1bHRfYnVmZmVyOworCS8qCisJICogV2hlbiB0aGUgbW9kdWxlIGlzIHJlbG9hZGVkIHRoZSBmaXJtd2FyZSBpcyBzdGlsbCB0aGVyZSBhbmQKKwkgKiB0aGUgZW5kcG9pbnRzIGFyZSBzdGlsbCBpbiB0aGUgdXNiIGNvcmUgdW5jaGFuZ2VkLiBUaGlzIGlzIHRoZQorICAgICAgICAgKiB1bmxpbmtpbmcgYnVnIGluIGRpc2d1aXNlLiBTYW1lIGZvciB0aGUgY2FsbCBiZWxvdy4KKyAgICAgICAgICovCisJdXNiX2NsZWFyX2hhbHQoc2VyaWFsLT5kZXYsIHBpcGUpOworCXJldCA9IHVzYl9idWxrX21zZyAoc2VyaWFsLT5kZXYsIHBpcGUsIGNvbW1hbmQsIDIsICZhbGVuLCBDT01NQU5EX1RJTUVPVVRfTVMpOworCWlmIChyZXQpIHsKKwkJZXJyKCIlczogQ291bGRuJ3Qgc2VuZCBjb21tYW5kIFslZF0iLCBzZXJpYWwtPnR5cGUtPm5hbWUsIHJldCk7CisJCWdvdG8gbm9fZmlybXdhcmU7CisJfSBlbHNlIGlmIChhbGVuICE9IHNpemVvZihjb21tYW5kKSkgeworCQllcnIoIiVzOiBTZW5kIGNvbW1hbmQgaW5jb21wbGV0ZSBbJWRdIiwgc2VyaWFsLT50eXBlLT5uYW1lLCBhbGVuKTsKKwkJZ290byBub19maXJtd2FyZTsKKwl9CisKKwlwaXBlID0gdXNiX3JjdmJ1bGtwaXBlIChzZXJpYWwtPmRldiwgY29tbWFuZF9wb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyk7CisJLyogU2VlIHRoZSBjb21tZW50IG9uIHRoZSB1c2JfY2xlYXJfaGFsdCgpIGFib3ZlICovCisJdXNiX2NsZWFyX2hhbHQoc2VyaWFsLT5kZXYsIHBpcGUpOworCXJldCA9IHVzYl9idWxrX21zZyAoc2VyaWFsLT5kZXYsIHBpcGUsIHJlc3VsdCwgc2l6ZW9mKCpod19pbmZvKSArIDEsICZhbGVuLCBDT01NQU5EX1RJTUVPVVRfTVMpOworCWlmIChyZXQpIHsKKwkJZXJyKCIlczogQ291bGRuJ3QgZ2V0IHJlc3VsdHMgWyVkXSIsIHNlcmlhbC0+dHlwZS0+bmFtZSwgcmV0KTsKKwkJZ290byBub19maXJtd2FyZTsKKwl9IGVsc2UgaWYgKGFsZW4gIT0gc2l6ZW9mKHJlc3VsdCkpIHsKKwkJZXJyKCIlczogR2V0IHJlc3VsdHMgaW5jb21wbGV0ZSBbJWRdIiwgc2VyaWFsLT50eXBlLT5uYW1lLCBhbGVuKTsKKwkJZ290byBub19maXJtd2FyZTsKKwl9IGVsc2UgaWYgKHJlc3VsdFswXSAhPSBjb21tYW5kWzBdKSB7CisJCWVycigiJXM6IENvbW1hbmQgZmFpbGVkIFslZF0iLCBzZXJpYWwtPnR5cGUtPm5hbWUsIHJlc3VsdFswXSk7CisJCWdvdG8gbm9fZmlybXdhcmU7CisJfQorCisJaHdfaW5mbyA9IChzdHJ1Y3Qgd2hpdGVoZWF0X2h3X2luZm8gKikmcmVzdWx0WzFdOworCisJaW5mbygiJXM6IERyaXZlciAlczogRmlybXdhcmUgdiVkLiUwMmQiLCBzZXJpYWwtPnR5cGUtPm5hbWUsCisJICAgICBEUklWRVJfVkVSU0lPTiwgaHdfaW5mby0+c3dfbWFqb3JfcmV2LCBod19pbmZvLT5zd19taW5vcl9yZXYpOworCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKworCQlpbmZvID0gKHN0cnVjdCB3aGl0ZWhlYXRfcHJpdmF0ZSAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3aGl0ZWhlYXRfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCQlpZiAoaW5mbyA9PSBOVUxMKSB7CisJCQllcnIoIiVzOiBPdXQgb2YgbWVtb3J5IGZvciBwb3J0IHN0cnVjdHVyZXNcbiIsIHNlcmlhbC0+dHlwZS0+bmFtZSk7CisJCQlnb3RvIG5vX3ByaXZhdGU7CisJCX0KKworCQlzcGluX2xvY2tfaW5pdCgmaW5mby0+bG9jayk7CisJCWluZm8tPmZsYWdzID0gMDsKKwkJaW5mby0+bWNyID0gMDsKKwkJSU5JVF9XT1JLKCZpbmZvLT5yeF93b3JrLCByeF9kYXRhX3NvZnRpbnQsIHBvcnQpOworCisJCUlOSVRfTElTVF9IRUFEKCZpbmZvLT5yeF91cmJzX2ZyZWUpOworCQlJTklUX0xJU1RfSEVBRCgmaW5mby0+cnhfdXJic19zdWJtaXR0ZWQpOworCQlJTklUX0xJU1RfSEVBRCgmaW5mby0+cnhfdXJiX3EpOworCQlJTklUX0xJU1RfSEVBRCgmaW5mby0+dHhfdXJic19mcmVlKTsKKwkJSU5JVF9MSVNUX0hFQUQoJmluZm8tPnR4X3VyYnNfc3VibWl0dGVkKTsKKworCQlmb3IgKGogPSAwOyBqIDwgdXJiX3Bvb2xfc2l6ZTsgaisrKSB7CisJCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQkJaWYgKCF1cmIpIHsKKwkJCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKKwkJCQlnb3RvIG5vX3J4X3VyYjsKKwkJCX0KKwkJCWJ1Zl9zaXplID0gcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoYnVmX3NpemUsIEdGUF9LRVJORUwpOworCQkJaWYgKCF1cmItPnRyYW5zZmVyX2J1ZmZlcikgeworCQkJCWVycigiQ291bGRuJ3QgYWxsb2NhdGUgdXJiIGJ1ZmZlciIpOworCQkJCWdvdG8gbm9fcnhfYnVmOworCQkJfQorCQkJd3JhcCA9IGttYWxsb2Moc2l6ZW9mKCp3cmFwKSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXdyYXApIHsKKwkJCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIHVyYiB3cmFwcGVyIik7CisJCQkJZ290byBub19yeF93cmFwOworCQkJfQorCQkJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBzZXJpYWwtPmRldiwKKwkJCQkJdXNiX3JjdmJ1bGtwaXBlKHNlcmlhbC0+ZGV2LAorCQkJCQkJcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciwgYnVmX3NpemUsCisJCQkJCXdoaXRlaGVhdF9yZWFkX2NhbGxiYWNrLCBwb3J0KTsKKwkJCXdyYXAtPnVyYiA9IHVyYjsKKwkJCWxpc3RfYWRkKCZ3cmFwLT5saXN0LCAmaW5mby0+cnhfdXJic19mcmVlKTsKKworCQkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghdXJiKSB7CisJCQkJZXJyKCJObyBmcmVlIHVyYnMgYXZhaWxhYmxlIik7CisJCQkJZ290byBub190eF91cmI7CisJCQl9CisJCQlidWZfc2l6ZSA9IHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyhidWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CisJCQkJZXJyKCJDb3VsZG4ndCBhbGxvY2F0ZSB1cmIgYnVmZmVyIik7CisJCQkJZ290byBub190eF9idWY7CisJCQl9CisJCQl3cmFwID0ga21hbGxvYyhzaXplb2YoKndyYXApLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghd3JhcCkgeworCQkJCWVycigiQ291bGRuJ3QgYWxsb2NhdGUgdXJiIHdyYXBwZXIiKTsKKwkJCQlnb3RvIG5vX3R4X3dyYXA7CisJCQl9CisJCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHNlcmlhbC0+ZGV2LAorCQkJCQl1c2Jfc25kYnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQkJCQlwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAorCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciwgYnVmX3NpemUsCisJCQkJCXdoaXRlaGVhdF93cml0ZV9jYWxsYmFjaywgcG9ydCk7CisJCQl3cmFwLT51cmIgPSB1cmI7CisJCQlsaXN0X2FkZCgmd3JhcC0+bGlzdCwgJmluZm8tPnR4X3VyYnNfZnJlZSk7CisJCX0KKworCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgaW5mbyk7CisJfQorCisJY29tbWFuZF9pbmZvID0gKHN0cnVjdCB3aGl0ZWhlYXRfY29tbWFuZF9wcml2YXRlICopa21hbGxvYyhzaXplb2Yoc3RydWN0IHdoaXRlaGVhdF9jb21tYW5kX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY29tbWFuZF9pbmZvID09IE5VTEwpIHsKKwkJZXJyKCIlczogT3V0IG9mIG1lbW9yeSBmb3IgcG9ydCBzdHJ1Y3R1cmVzXG4iLCBzZXJpYWwtPnR5cGUtPm5hbWUpOworCQlnb3RvIG5vX2NvbW1hbmRfcHJpdmF0ZTsKKwl9CisKKwlzcGluX2xvY2tfaW5pdCgmY29tbWFuZF9pbmZvLT5sb2NrKTsKKwljb21tYW5kX2luZm8tPnBvcnRfcnVubmluZyA9IDA7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmY29tbWFuZF9pbmZvLT53YWl0X2NvbW1hbmQpOworCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShjb21tYW5kX3BvcnQsIGNvbW1hbmRfaW5mbyk7CisJY29tbWFuZF9wb3J0LT53cml0ZV91cmItPmNvbXBsZXRlID0gY29tbWFuZF9wb3J0X3dyaXRlX2NhbGxiYWNrOworCWNvbW1hbmRfcG9ydC0+cmVhZF91cmItPmNvbXBsZXRlID0gY29tbWFuZF9wb3J0X3JlYWRfY2FsbGJhY2s7CisJa2ZyZWUocmVzdWx0KTsKKwlrZnJlZShjb21tYW5kKTsKKworCXJldHVybiAwOworCitub19maXJtd2FyZToKKwkvKiBGaXJtd2FyZSBsaWtlbHkgbm90IHJ1bm5pbmcgKi8KKwllcnIoIiVzOiBVbmFibGUgdG8gcmV0cmlldmUgZmlybXdhcmUgdmVyc2lvbiwgdHJ5IHJlcGx1Z2dpbmdcbiIsIHNlcmlhbC0+dHlwZS0+bmFtZSk7CisJZXJyKCIlczogSWYgdGhlIGZpcm13YXJlIGlzIG5vdCBydW5uaW5nIChzdGF0dXMgbGVkIG5vdCBibGlua2luZylcbiIsIHNlcmlhbC0+dHlwZS0+bmFtZSk7CisJZXJyKCIlczogcGxlYXNlIGNvbnRhY3Qgc3VwcG9ydEBjb25uZWN0dGVjaC5jb21cbiIsIHNlcmlhbC0+dHlwZS0+bmFtZSk7CisJcmV0dXJuIC1FTk9ERVY7CisKK25vX2NvbW1hbmRfcHJpdmF0ZToKKwlmb3IgKGkgPSBzZXJpYWwtPm51bV9wb3J0cyAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCWluZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJCWZvciAoaiA9IHVyYl9wb29sX3NpemUgLSAxOyBqID49IDA7IGotLSkgeworCQkJdG1wID0gbGlzdF9maXJzdCgmaW5mby0+dHhfdXJic19mcmVlKTsKKwkJCWxpc3RfZGVsKHRtcCk7CisJCQl3cmFwID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAsIGxpc3QpOworCQkJdXJiID0gd3JhcC0+dXJiOworCQkJa2ZyZWUod3JhcCk7Citub190eF93cmFwOgorCQkJa2ZyZWUodXJiLT50cmFuc2Zlcl9idWZmZXIpOworbm9fdHhfYnVmOgorCQkJdXNiX2ZyZWVfdXJiKHVyYik7Citub190eF91cmI6CisJCQl0bXAgPSBsaXN0X2ZpcnN0KCZpbmZvLT5yeF91cmJzX2ZyZWUpOworCQkJbGlzdF9kZWwodG1wKTsKKwkJCXdyYXAgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCwgbGlzdCk7CisJCQl1cmIgPSB3cmFwLT51cmI7CisJCQlrZnJlZSh3cmFwKTsKK25vX3J4X3dyYXA6CisJCQlrZnJlZSh1cmItPnRyYW5zZmVyX2J1ZmZlcik7Citub19yeF9idWY6CisJCQl1c2JfZnJlZV91cmIodXJiKTsKK25vX3J4X3VyYjoKKwkJCTsKKwkJfQorCQlrZnJlZShpbmZvKTsKK25vX3ByaXZhdGU6CisJCTsKKwl9CisJa2ZyZWUocmVzdWx0KTsKK25vX3Jlc3VsdF9idWZmZXI6CisJa2ZyZWUoY29tbWFuZCk7Citub19jb21tYW5kX2J1ZmZlcjoKKwlyZXR1cm4gLUVOT01FTTsKK30KKworCitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqY29tbWFuZF9wb3J0OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvOworCXN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAgKndyYXA7CisJc3RydWN0IHVyYiAqdXJiOworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXAyOworCWludCBpOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBmcmVlIHVwIG91ciBwcml2YXRlIGRhdGEgZm9yIG91ciBjb21tYW5kIHBvcnQgKi8KKwljb21tYW5kX3BvcnQgPSBzZXJpYWwtPnBvcnRbQ09NTUFORF9QT1JUXTsKKwlrZnJlZSAodXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKGNvbW1hbmRfcG9ydCkpOworCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJaW5mbyA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkJbGlzdF9mb3JfZWFjaF9zYWZlKHRtcCwgdG1wMiwgJmluZm8tPnJ4X3VyYnNfZnJlZSkgeworCQkJbGlzdF9kZWwodG1wKTsKKwkJCXdyYXAgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCwgbGlzdCk7CisJCQl1cmIgPSB3cmFwLT51cmI7CisJCQlrZnJlZSh3cmFwKTsKKwkJCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJCXVzYl9mcmVlX3VyYih1cmIpOworCQl9CisJCWxpc3RfZm9yX2VhY2hfc2FmZSh0bXAsIHRtcDIsICZpbmZvLT50eF91cmJzX2ZyZWUpIHsKKwkJCWxpc3RfZGVsKHRtcCk7CisJCQl3cmFwID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAsIGxpc3QpOworCQkJdXJiID0gd3JhcC0+dXJiOworCQkJa2ZyZWUod3JhcCk7CisJCQlrZnJlZSh1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCQl1c2JfZnJlZV91cmIodXJiKTsKKwkJfQorCQlrZnJlZShpbmZvKTsKKwl9CisKKwlyZXR1cm47Cit9CisKKworc3RhdGljIGludCB3aGl0ZWhlYXRfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50CQlyZXR2YWwgPSAwOworCXN0cnVjdCB0ZXJtaW9zCW9sZF90ZXJtOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlyZXR2YWwgPSBzdGFydF9jb21tYW5kX3BvcnQocG9ydC0+c2VyaWFsKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGV4aXQ7CisKKwlpZiAocG9ydC0+dHR5KQorCQlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gMTsKKworCS8qIHNlbmQgYW4gb3BlbiBwb3J0IGNvbW1hbmQgKi8KKwlyZXR2YWwgPSBmaXJtX29wZW4ocG9ydCk7CisJaWYgKHJldHZhbCkgeworCQlzdG9wX2NvbW1hbmRfcG9ydChwb3J0LT5zZXJpYWwpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcmV0dmFsID0gZmlybV9wdXJnZShwb3J0LCBXSElURUhFQVRfUFVSR0VfUlggfCBXSElURUhFQVRfUFVSR0VfVFgpOworCWlmIChyZXR2YWwpIHsKKwkJZmlybV9jbG9zZShwb3J0KTsKKwkJc3RvcF9jb21tYW5kX3BvcnQocG9ydC0+c2VyaWFsKTsKKwkJZ290byBleGl0OworCX0KKworCW9sZF90ZXJtLmNfY2ZsYWcgPSB+cG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCW9sZF90ZXJtLmNfaWZsYWcgPSB+cG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnOworCXdoaXRlaGVhdF9zZXRfdGVybWlvcyhwb3J0LCAmb2xkX3Rlcm0pOworCisJLyogV29yayBhcm91bmQgSENEIGJ1Z3MgKi8KKwl1c2JfY2xlYXJfaGFsdChwb3J0LT5zZXJpYWwtPmRldiwgcG9ydC0+cmVhZF91cmItPnBpcGUpOworCXVzYl9jbGVhcl9oYWx0KHBvcnQtPnNlcmlhbC0+ZGV2LCBwb3J0LT53cml0ZV91cmItPnBpcGUpOworCisJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KKwlyZXR2YWwgPSBzdGFydF9wb3J0X3JlYWQocG9ydCk7CisJaWYgKHJldHZhbCkgeworCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXR2YWwpOworCQlmaXJtX2Nsb3NlKHBvcnQpOworCQlzdG9wX2NvbW1hbmRfcG9ydChwb3J0LT5zZXJpYWwpOworCQlnb3RvIGV4aXQ7CisJfQorCitleGl0OgorCWRiZygiJXMgLSBleGl0LCByZXR2YWwgPSAlZCIsIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyB2b2lkIHdoaXRlaGVhdF9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit7CisJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAgKndyYXA7CisJc3RydWN0IHVyYiAqdXJiOworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXAyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkKKwkvKiBmaWxwIGlzIE5VTEwgd2hlbiBjYWxsZWQgZnJvbSB1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QgKi8KKwlpZiAoZmlscCAmJiAodHR5X2h1bmdfdXBfcChmaWxwKSkpIHsKKwkJcmV0dXJuOworCX0KKworCXBvcnQtPnR0eS0+Y2xvc2luZyA9IDE7CisKKy8qCisgKiBOb3QgY3VycmVudGx5IGluIHVzZTsgdHR5X3dhaXRfdW50aWxfc2VudCgpIGNhbGxzCisgKiBzZXJpYWxfY2hhcnNfaW5fYnVmZmVyKCkgd2hpY2ggZGVhZGxvY2tzIG9uIHRoZSBzZWNvbmQgc2VtYXBob3JlCisgKiBhY3F1aXNpdGlvbi4gVGhpcyBzaG91bGQgYmUgZml4ZWQgYXQgc29tZSBwb2ludC4gR3JlZydzIGJlZW4KKyAqIG5vdGlmaWVkLgorCWlmICgoZmlscC0+Zl9mbGFncyAmIChPX05ERUxBWSB8IE9fTk9OQkxPQ0spKSA9PSAwKSB7CisJCXR0eV93YWl0X3VudGlsX3NlbnQocG9ydC0+dHR5LCBDTE9TSU5HX0RFTEFZKTsKKwl9CisqLworCisJaWYgKHBvcnQtPnR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIpCisJCXBvcnQtPnR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIocG9ydC0+dHR5KTsKKwl0dHlfbGRpc2NfZmx1c2gocG9ydC0+dHR5KTsKKworCWZpcm1fcmVwb3J0X3R4X2RvbmUocG9ydCk7CisKKwlmaXJtX2Nsb3NlKHBvcnQpOworCisJLyogc2h1dGRvd24gb3VyIGJ1bGsgcmVhZHMgYW5kIHdyaXRlcyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9zYWZlKHRtcCwgdG1wMiwgJmluZm8tPnJ4X3VyYnNfc3VibWl0dGVkKSB7CisJCXdyYXAgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCwgbGlzdCk7CisJCXVyYiA9IHdyYXAtPnVyYjsKKwkJdXNiX2tpbGxfdXJiKHVyYik7CisJCWxpc3RfZGVsKHRtcCk7CisJCWxpc3RfYWRkKHRtcCwgJmluZm8tPnJ4X3VyYnNfZnJlZSk7CisJfQorCWxpc3RfZm9yX2VhY2hfc2FmZSh0bXAsIHRtcDIsICZpbmZvLT5yeF91cmJfcSkgeworCQlsaXN0X2RlbCh0bXApOworCQlsaXN0X2FkZCh0bXAsICZpbmZvLT5yeF91cmJzX2ZyZWUpOworCX0KKwlsaXN0X2Zvcl9lYWNoX3NhZmUodG1wLCB0bXAyLCAmaW5mby0+dHhfdXJic19zdWJtaXR0ZWQpIHsKKwkJd3JhcCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwLCBsaXN0KTsKKwkJdXJiID0gd3JhcC0+dXJiOworCQl1c2Jfa2lsbF91cmIodXJiKTsKKwkJbGlzdF9kZWwodG1wKTsKKwkJbGlzdF9hZGQodG1wLCAmaW5mby0+dHhfdXJic19mcmVlKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCisJc3RvcF9jb21tYW5kX3BvcnQocG9ydC0+c2VyaWFsKTsKKworCXBvcnQtPnR0eS0+Y2xvc2luZyA9IDA7Cit9CisKKworc3RhdGljIGludCB3aGl0ZWhlYXRfd3JpdGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCAqd3JhcDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IHJlc3VsdDsKKwlpbnQgYnl0ZXM7CisJaW50IHNlbnQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoY291bnQgPT0gMCkgeworCQlkYmcoIiVzIC0gd3JpdGUgcmVxdWVzdCBvZiAwIGJ5dGVzIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwl3aGlsZSAoY291bnQpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwkJaWYgKGxpc3RfZW1wdHkoJmluZm8tPnR4X3VyYnNfZnJlZSkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwkJCWJyZWFrOworCQl9CisJCXRtcCA9IGxpc3RfZmlyc3QoJmluZm8tPnR4X3VyYnNfZnJlZSk7CisJCWxpc3RfZGVsKHRtcCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKworCQl3cmFwID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAsIGxpc3QpOworCQl1cmIgPSB3cmFwLT51cmI7CisJCWJ5dGVzID0gKGNvdW50ID4gcG9ydC0+YnVsa19vdXRfc2l6ZSkgPyBwb3J0LT5idWxrX291dF9zaXplIDogY291bnQ7CisJCW1lbWNweSAodXJiLT50cmFuc2Zlcl9idWZmZXIsIGJ1ZiArIHNlbnQsIGJ5dGVzKTsKKworCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgYnl0ZXMsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCQl1cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBieXRlczsKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJlc3VsdCkgeworCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCQlzZW50ID0gcmVzdWx0OworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwkJCWxpc3RfYWRkKHRtcCwgJmluZm8tPnR4X3VyYnNfZnJlZSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCXNlbnQgKz0gYnl0ZXM7CisJCQljb3VudCAtPSBieXRlczsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisJCQlsaXN0X2FkZCh0bXAsICZpbmZvLT50eF91cmJzX3N1Ym1pdHRlZCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisJCX0KKwl9CisKKwlyZXR1cm4gc2VudDsKK30KKworCitzdGF0aWMgaW50IHdoaXRlaGVhdF93cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKKwlpbnQgcm9vbSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQorCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaCh0bXAsICZpbmZvLT50eF91cmJzX2ZyZWUpCisJCXJvb20rKzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisJcm9vbSAqPSBwb3J0LT5idWxrX291dF9zaXplOworCisJZGJnKCIlcyAtIHJldHVybnMgJWQiLCBfX0ZVTkNUSU9OX18sIHJvb20pOworCXJldHVybiAocm9vbSk7Cit9CisKKworc3RhdGljIGludCB3aGl0ZWhlYXRfdGlvY21nZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB3aGl0ZWhlYXRfcHJpdmF0ZSAqaW5mbyA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBpbnQgbW9kZW1fc2lnbmFscyA9IDA7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWZpcm1fZ2V0X2R0cl9ydHMocG9ydCk7CisJaWYgKGluZm8tPm1jciAmIFVBUlRfTUNSX0RUUikKKwkJbW9kZW1fc2lnbmFscyB8PSBUSU9DTV9EVFI7CisJaWYgKGluZm8tPm1jciAmIFVBUlRfTUNSX1JUUykKKwkJbW9kZW1fc2lnbmFscyB8PSBUSU9DTV9SVFM7CisKKwlyZXR1cm4gbW9kZW1fc2lnbmFsczsKK30KKworCitzdGF0aWMgaW50IHdoaXRlaGVhdF90aW9jbXNldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCXN0cnVjdCB3aGl0ZWhlYXRfcHJpdmF0ZSAqaW5mbyA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHNldCAmIFRJT0NNX1JUUykKKwkJaW5mby0+bWNyIHw9IFVBUlRfTUNSX1JUUzsKKwlpZiAoc2V0ICYgVElPQ01fRFRSKQorCQlpbmZvLT5tY3IgfD0gVUFSVF9NQ1JfRFRSOworCisJaWYgKGNsZWFyICYgVElPQ01fUlRTKQorCQlpbmZvLT5tY3IgJj0gflVBUlRfTUNSX1JUUzsKKwlpZiAoY2xlYXIgJiBUSU9DTV9EVFIpCisJCWluZm8tPm1jciAmPSB+VUFSVF9NQ1JfRFRSOworCisJZmlybV9zZXRfZHRyKHBvcnQsIGluZm8tPm1jciAmIFVBUlRfTUNSX0RUUik7CisJZmlybV9zZXRfcnRzKHBvcnQsIGluZm8tPm1jciAmIFVBUlRfTUNSX1JUUyk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB3aGl0ZWhlYXRfaW9jdGwgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHNlcmlhbF9zdHJ1Y3Qgc2Vyc3RydWN0OworCXZvaWQgX191c2VyICp1c2VyX2FyZyA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKworCWRiZygiJXMgLSBwb3J0ICVkLCBjbWQgMHglLjR4IiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIGNtZCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCQljYXNlIFRJT0NHU0VSSUFMOgorCQkJbWVtc2V0KCZzZXJzdHJ1Y3QsIDAsIHNpemVvZihzZXJzdHJ1Y3QpKTsKKwkJCXNlcnN0cnVjdC50eXBlID0gUE9SVF8xNjY1NDsKKwkJCXNlcnN0cnVjdC5saW5lID0gcG9ydC0+c2VyaWFsLT5taW5vcjsKKwkJCXNlcnN0cnVjdC5wb3J0ID0gcG9ydC0+bnVtYmVyOworCQkJc2Vyc3RydWN0LmZsYWdzID0gQVNZTkNfU0tJUF9URVNUIHwgQVNZTkNfQVVUT19JUlE7CisJCQlzZXJzdHJ1Y3QueG1pdF9maWZvX3NpemUgPSBwb3J0LT5idWxrX291dF9zaXplOworCQkJc2Vyc3RydWN0LmN1c3RvbV9kaXZpc29yID0gMDsKKwkJCXNlcnN0cnVjdC5iYXVkX2Jhc2UgPSA0NjA4MDA7CisJCQlzZXJzdHJ1Y3QuY2xvc2VfZGVsYXkgPSBDTE9TSU5HX0RFTEFZOworCQkJc2Vyc3RydWN0LmNsb3Npbmdfd2FpdCA9IENMT1NJTkdfREVMQVk7CisKKwkJCWlmIChjb3B5X3RvX3VzZXIodXNlcl9hcmcsICZzZXJzdHJ1Y3QsIHNpemVvZihzZXJzdHJ1Y3QpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJYnJlYWs7CisKKwkJY2FzZSBUSU9DU1NFUklBTDoKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmc2Vyc3RydWN0LCB1c2VyX2FyZywgc2l6ZW9mKHNlcnN0cnVjdCkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCisJCQkvKgorCQkJICogRm9yIG5vdyB0aGlzIGlzIGlnbm9yZWQuIGRpcCBzZXRzIHRoZSBBU1lOQ19bVl1ISSBmbGFncworCQkJICogYnV0IHRoaXMgaXNuJ3QgdXNlZCBieSB1cyBhdCBhbGwuIE1heWJlIHNvbWVvbmUgc29tZXdoZXJlCisJCQkgKiB3aWxsIG5lZWQgdGhlIGN1c3RvbV9kaXZpc29yIHNldHRpbmcuCisJCQkgKi8KKworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKKworc3RhdGljIHZvaWQgd2hpdGVoZWF0X3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7CisJZGJnKCIlcyAtcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICgoIXBvcnQtPnR0eSkgfHwgKCFwb3J0LT50dHktPnRlcm1pb3MpKSB7CisJCWRiZygiJXMgLSBubyB0dHkgc3RydWN0dXJlcyIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXhpdDsKKwl9CisJCisJLyogY2hlY2sgdGhhdCB0aGV5IHJlYWxseSB3YW50IHVzIHRvIGNoYW5nZSBzb21ldGhpbmcgKi8KKwlpZiAob2xkX3Rlcm1pb3MpIHsKKwkJaWYgKChwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgPT0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWcpICYmCisJCSAgICAocG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnID09IG9sZF90ZXJtaW9zLT5jX2lmbGFnKSkgeworCQkJZGJnKCIlcyAtIG5vdGhpbmcgdG8gY2hhbmdlLi4uIiwgX19GVU5DVElPTl9fKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKworCWZpcm1fc2V0dXBfcG9ydChwb3J0KTsKKworZXhpdDoKKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQgd2hpdGVoZWF0X2JyZWFrX2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpIHsKKwlmaXJtX3NldF9icmVhayhwb3J0LCBicmVha19zdGF0ZSk7Cit9CisKKworc3RhdGljIGludCB3aGl0ZWhlYXRfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwICp3cmFwOworCWludCBjaGFycyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoKHRtcCwgJmluZm8tPnR4X3VyYnNfc3VibWl0dGVkKSB7CisJCXdyYXAgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCwgbGlzdCk7CisJCWNoYXJzICs9IHdyYXAtPnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCisJZGJnICgiJXMgLSByZXR1cm5zICVkIiwgX19GVU5DVElPTl9fLCBjaGFycyk7CisJcmV0dXJuIChjaGFycyk7Cit9CisKKworc3RhdGljIHZvaWQgd2hpdGVoZWF0X3Rocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB3aGl0ZWhlYXRfcHJpdmF0ZSAqaW5mbyA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCWluZm8tPmZsYWdzIHw9IFRIUk9UVExFRDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQgd2hpdGVoZWF0X3VudGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludCBhY3R1YWxseV90aHJvdHRsZWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwlhY3R1YWxseV90aHJvdHRsZWQgPSBpbmZvLT5mbGFncyAmIEFDVFVBTExZX1RIUk9UVExFRDsKKwlpbmZvLT5mbGFncyAmPSB+KFRIUk9UVExFRCB8IEFDVFVBTExZX1RIUk9UVExFRCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCisJaWYgKGFjdHVhbGx5X3Rocm90dGxlZCkKKwkJcnhfZGF0YV9zb2Z0aW50KHBvcnQpOworCisJcmV0dXJuOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29ubmVjdCBUZWNoJ3MgV2hpdGUgSGVhdCBjYWxsYmFjayByb3V0aW5lcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgY29tbWFuZF9wb3J0X3dyaXRlX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZyAoIm5vbnplcm8gdXJiIHN0YXR1czogJWQiLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgY29tbWFuZF9wb3J0X3JlYWRfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqY29tbWFuZF9wb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHdoaXRlaGVhdF9jb21tYW5kX3ByaXZhdGUgKmNvbW1hbmRfaW5mbzsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJmNvbW1hbmRfcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CisKKwljb21tYW5kX2luZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoY29tbWFuZF9wb3J0KTsKKwlpZiAoIWNvbW1hbmRfaW5mbykgeworCQlkYmcgKCIlcyAtIGNvbW1hbmRfaW5mbyBpcyBOVUxMLCBleGl0aW5nLiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbW1hbmRfaW5mby0+bG9jaywgZmxhZ3MpOworCisJaWYgKGRhdGFbMF0gPT0gV0hJVEVIRUFUX0NNRF9DT01QTEVURSkgeworCQljb21tYW5kX2luZm8tPmNvbW1hbmRfZmluaXNoZWQgPSBXSElURUhFQVRfQ01EX0NPTVBMRVRFOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNvbW1hbmRfaW5mby0+d2FpdF9jb21tYW5kKTsKKwl9IGVsc2UgaWYgKGRhdGFbMF0gPT0gV0hJVEVIRUFUX0NNRF9GQUlMVVJFKSB7CisJCWNvbW1hbmRfaW5mby0+Y29tbWFuZF9maW5pc2hlZCA9IFdISVRFSEVBVF9DTURfRkFJTFVSRTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjb21tYW5kX2luZm8tPndhaXRfY29tbWFuZCk7CisJfSBlbHNlIGlmIChkYXRhWzBdID09IFdISVRFSEVBVF9FVkVOVCkgeworCQkvKiBUaGVzZSBhcmUgdW5zb2xpY2l0ZWQgcmVwb3J0cyBmcm9tIHRoZSBmaXJtd2FyZSwgaGVuY2Ugbm8gd2FpdGluZyBjb21tYW5kIHRvIHdha2V1cCAqLworCQlkYmcoIiVzIC0gZXZlbnQgcmVjZWl2ZWQiLCBfX0ZVTkNUSU9OX18pOworCX0gZWxzZSBpZiAoZGF0YVswXSA9PSBXSElURUhFQVRfR0VUX0RUUl9SVFMpIHsKKwkJbWVtY3B5KGNvbW1hbmRfaW5mby0+cmVzdWx0X2J1ZmZlciwgJmRhdGFbMV0sIHVyYi0+YWN0dWFsX2xlbmd0aCAtIDEpOworCQljb21tYW5kX2luZm8tPmNvbW1hbmRfZmluaXNoZWQgPSBXSElURUhFQVRfQ01EX0NPTVBMRVRFOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNvbW1hbmRfaW5mby0+d2FpdF9jb21tYW5kKTsKKwl9IGVsc2UgeworCQlkYmcoIiVzIC0gYmFkIHJlcGx5IGZyb20gZmlybXdhcmUiLCBfX0ZVTkNUSU9OX18pOworCX0KKwkKKwkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgKi8KKwljb21tYW5kX3BvcnQtPnJlYWRfdXJiLT5kZXYgPSBjb21tYW5kX3BvcnQtPnNlcmlhbC0+ZGV2OworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKGNvbW1hbmRfcG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbW1hbmRfaW5mby0+bG9jaywgZmxhZ3MpOworCWlmIChyZXN1bHQpCisJCWRiZygiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKK30KKworCitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfcmVhZF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwICp3cmFwOworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9jaygmaW5mby0+bG9jayk7CisJd3JhcCA9IHVyYl90b193cmFwKHVyYiwgJmluZm8tPnJ4X3VyYnNfc3VibWl0dGVkKTsKKwlpZiAoIXdyYXApIHsKKwkJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworCQllcnIoIiVzIC0gTm90IG15IHVyYiEiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCWxpc3RfZGVsKCZ3cmFwLT5saXN0KTsKKwlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKKwkJbGlzdF9hZGQoJndyYXAtPmxpc3QsICZpbmZvLT5yeF91cmJzX2ZyZWUpOworCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJCXJldHVybjsKKwl9CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKworCXNwaW5fbG9jaygmaW5mby0+bG9jayk7CisJbGlzdF9hZGRfdGFpbCgmd3JhcC0+bGlzdCwgJmluZm8tPnJ4X3VyYl9xKTsKKwlpZiAoaW5mby0+ZmxhZ3MgJiBUSFJPVFRMRUQpIHsKKwkJaW5mby0+ZmxhZ3MgfD0gQUNUVUFMTFlfVEhST1RUTEVEOworCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJCXJldHVybjsKKwl9CisJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworCisJc2NoZWR1bGVfd29yaygmaW5mby0+cnhfd29yayk7Cit9CisKKworc3RhdGljIHZvaWQgd2hpdGVoZWF0X3dyaXRlX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB3aGl0ZWhlYXRfcHJpdmF0ZSAqaW5mbyA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwICp3cmFwOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2soJmluZm8tPmxvY2spOworCXdyYXAgPSB1cmJfdG9fd3JhcCh1cmIsICZpbmZvLT50eF91cmJzX3N1Ym1pdHRlZCk7CisJaWYgKCF3cmFwKSB7CisJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwkJZXJyKCIlcyAtIE5vdCBteSB1cmIhIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKwlsaXN0X2RlbCgmd3JhcC0+bGlzdCk7CisJbGlzdF9hZGQoJndyYXAtPmxpc3QsICZpbmZvLT50eF91cmJzX2ZyZWUpOworCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCXVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50KCh2b2lkICopcG9ydCk7CisKKwlzY2hlZHVsZV93b3JrKCZwb3J0LT53b3JrKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvbm5lY3QgVGVjaCdzIFdoaXRlIEhlYXQgZmlybXdhcmUgaW50ZXJmYWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGZpcm1fc2VuZF9jb21tYW5kIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3U4IGNvbW1hbmQsIF9fdTggKmRhdGEsIF9fdTggZGF0YXNpemUpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqY29tbWFuZF9wb3J0OworCXN0cnVjdCB3aGl0ZWhlYXRfY29tbWFuZF9wcml2YXRlICpjb21tYW5kX2luZm87CisJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvOworCV9fdTggKnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgcmV0dmFsID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIGNvbW1hbmQgJWQiLCBfX0ZVTkNUSU9OX18sIGNvbW1hbmQpOworCisJY29tbWFuZF9wb3J0ID0gcG9ydC0+c2VyaWFsLT5wb3J0W0NPTU1BTkRfUE9SVF07CisJY29tbWFuZF9pbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKGNvbW1hbmRfcG9ydCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbW1hbmRfaW5mby0+bG9jaywgZmxhZ3MpOworCWNvbW1hbmRfaW5mby0+Y29tbWFuZF9maW5pc2hlZCA9IEZBTFNFOworCQorCXRyYW5zZmVyX2J1ZmZlciA9IChfX3U4ICopY29tbWFuZF9wb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwl0cmFuc2Zlcl9idWZmZXJbMF0gPSBjb21tYW5kOworCW1lbWNweSAoJnRyYW5zZmVyX2J1ZmZlclsxXSwgZGF0YSwgZGF0YXNpemUpOworCWNvbW1hbmRfcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gZGF0YXNpemUgKyAxOworCWNvbW1hbmRfcG9ydC0+d3JpdGVfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAoY29tbWFuZF9wb3J0LT53cml0ZV91cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXR2YWwpIHsKKwkJZGJnKCIlcyAtIHN1Ym1pdCB1cmIgZmFpbGVkIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0OworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb21tYW5kX2luZm8tPmxvY2ssIGZsYWdzKTsKKworCS8qIHdhaXQgZm9yIHRoZSBjb21tYW5kIHRvIGNvbXBsZXRlICovCisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoY29tbWFuZF9pbmZvLT53YWl0X2NvbW1hbmQsIAorCQkoY29tbWFuZF9pbmZvLT5jb21tYW5kX2ZpbmlzaGVkICE9IEZBTFNFKSwgQ09NTUFORF9USU1FT1VUKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjb21tYW5kX2luZm8tPmxvY2ssIGZsYWdzKTsKKworCWlmIChjb21tYW5kX2luZm8tPmNvbW1hbmRfZmluaXNoZWQgPT0gRkFMU0UpIHsKKwkJZGJnKCIlcyAtIGNvbW1hbmQgdGltZWQgb3V0LiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHZhbCA9IC1FVElNRURPVVQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoY29tbWFuZF9pbmZvLT5jb21tYW5kX2ZpbmlzaGVkID09IFdISVRFSEVBVF9DTURfRkFJTFVSRSkgeworCQlkYmcoIiVzIC0gY29tbWFuZCBmYWlsZWQuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dmFsID0gLUVJTzsKKwkJZ290byBleGl0OworCX0KKworCWlmIChjb21tYW5kX2luZm8tPmNvbW1hbmRfZmluaXNoZWQgPT0gV0hJVEVIRUFUX0NNRF9DT01QTEVURSkgeworCQlkYmcoIiVzIC0gY29tbWFuZCBjb21wbGV0ZWQuIiwgX19GVU5DVElPTl9fKTsKKwkJc3dpdGNoIChjb21tYW5kKSB7CisJCQljYXNlIFdISVRFSEVBVF9HRVRfRFRSX1JUUzoKKwkJCQlpbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQkJCW1lbWNweSgmaW5mby0+bWNyLCBjb21tYW5kX2luZm8tPnJlc3VsdF9idWZmZXIsIHNpemVvZihzdHJ1Y3Qgd2hpdGVoZWF0X2RyX2luZm8pKTsKKwkJCQlicmVhazsKKwkJfQorCX0KKworZXhpdDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb21tYW5kX2luZm8tPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyBpbnQgZmlybV9vcGVuKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpIHsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3NpbXBsZSBvcGVuX2NvbW1hbmQ7CisKKwlvcGVuX2NvbW1hbmQucG9ydCA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3IgKyAxOworCXJldHVybiBmaXJtX3NlbmRfY29tbWFuZChwb3J0LCBXSElURUhFQVRfT1BFTiwgKF9fdTggKikmb3Blbl9jb21tYW5kLCBzaXplb2Yob3Blbl9jb21tYW5kKSk7Cit9CisKKworc3RhdGljIGludCBmaXJtX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpIHsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3NpbXBsZSBjbG9zZV9jb21tYW5kOworCisJY2xvc2VfY29tbWFuZC5wb3J0ID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vciArIDE7CisJcmV0dXJuIGZpcm1fc2VuZF9jb21tYW5kKHBvcnQsIFdISVRFSEVBVF9DTE9TRSwgKF9fdTggKikmY2xvc2VfY29tbWFuZCwgc2l6ZW9mKGNsb3NlX2NvbW1hbmQpKTsKK30KKworCitzdGF0aWMgaW50IGZpcm1fc2V0dXBfcG9ydChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KSB7CisJc3RydWN0IHdoaXRlaGVhdF9wb3J0X3NldHRpbmdzIHBvcnRfc2V0dGluZ3M7CisJdW5zaWduZWQgaW50IGNmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCisJcG9ydF9zZXR0aW5ncy5wb3J0ID0gcG9ydC0+bnVtYmVyICsgMTsKKworCS8qIGdldCB0aGUgYnl0ZSBzaXplICovCisJc3dpdGNoIChjZmxhZyAmIENTSVpFKSB7CisJCWNhc2UgQ1M1Oglwb3J0X3NldHRpbmdzLmJpdHMgPSA1OyAgIGJyZWFrOworCQljYXNlIENTNjoJcG9ydF9zZXR0aW5ncy5iaXRzID0gNjsgICBicmVhazsKKwkJY2FzZSBDUzc6CXBvcnRfc2V0dGluZ3MuYml0cyA9IDc7ICAgYnJlYWs7CisJCWRlZmF1bHQ6CisJCWNhc2UgQ1M4Oglwb3J0X3NldHRpbmdzLmJpdHMgPSA4OyAgIGJyZWFrOworCX0KKwlkYmcoIiVzIC0gZGF0YSBiaXRzID0gJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnRfc2V0dGluZ3MuYml0cyk7CisJCisJLyogZGV0ZXJtaW5lIHRoZSBwYXJpdHkgKi8KKwlpZiAoY2ZsYWcgJiBQQVJFTkIpCisJCWlmIChjZmxhZyAmIENNU1BBUikKKwkJCWlmIChjZmxhZyAmIFBBUk9ERCkKKwkJCQlwb3J0X3NldHRpbmdzLnBhcml0eSA9IFdISVRFSEVBVF9QQVJfTUFSSzsKKwkJCWVsc2UKKwkJCQlwb3J0X3NldHRpbmdzLnBhcml0eSA9IFdISVRFSEVBVF9QQVJfU1BBQ0U7CisJCWVsc2UKKwkJCWlmIChjZmxhZyAmIFBBUk9ERCkKKwkJCQlwb3J0X3NldHRpbmdzLnBhcml0eSA9IFdISVRFSEVBVF9QQVJfT0REOworCQkJZWxzZQorCQkJCXBvcnRfc2V0dGluZ3MucGFyaXR5ID0gV0hJVEVIRUFUX1BBUl9FVkVOOworCWVsc2UKKwkJcG9ydF9zZXR0aW5ncy5wYXJpdHkgPSBXSElURUhFQVRfUEFSX05PTkU7CisJZGJnKCIlcyAtIHBhcml0eSA9ICVjIiwgX19GVU5DVElPTl9fLCBwb3J0X3NldHRpbmdzLnBhcml0eSk7CisKKwkvKiBmaWd1cmUgb3V0IHRoZSBzdG9wIGJpdHMgcmVxdWVzdGVkICovCisJaWYgKGNmbGFnICYgQ1NUT1BCKQorCQlwb3J0X3NldHRpbmdzLnN0b3AgPSAyOworCWVsc2UKKwkJcG9ydF9zZXR0aW5ncy5zdG9wID0gMTsKKwlkYmcoIiVzIC0gc3RvcCBiaXRzID0gJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnRfc2V0dGluZ3Muc3RvcCk7CisKKwkvKiBmaWd1cmUgb3V0IHRoZSBmbG93IGNvbnRyb2wgc2V0dGluZ3MgKi8KKwlpZiAoY2ZsYWcgJiBDUlRTQ1RTKQorCQlwb3J0X3NldHRpbmdzLmhmbG93ID0gKFdISVRFSEVBVF9IRkxPV19DVFMgfCBXSElURUhFQVRfSEZMT1dfUlRTKTsKKwllbHNlCisJCXBvcnRfc2V0dGluZ3MuaGZsb3cgPSBXSElURUhFQVRfSEZMT1dfTk9ORTsKKwlkYmcoIiVzIC0gaGFyZHdhcmUgZmxvdyBjb250cm9sID0gJXMgJXMgJXMgJXMiLCBfX0ZVTkNUSU9OX18sCisJICAgIChwb3J0X3NldHRpbmdzLmhmbG93ICYgV0hJVEVIRUFUX0hGTE9XX0NUUykgPyAiQ1RTIiA6ICIiLAorCSAgICAocG9ydF9zZXR0aW5ncy5oZmxvdyAmIFdISVRFSEVBVF9IRkxPV19SVFMpID8gIlJUUyIgOiAiIiwKKwkgICAgKHBvcnRfc2V0dGluZ3MuaGZsb3cgJiBXSElURUhFQVRfSEZMT1dfRFNSKSA/ICJEU1IiIDogIiIsCisJICAgIChwb3J0X3NldHRpbmdzLmhmbG93ICYgV0hJVEVIRUFUX0hGTE9XX0RUUikgPyAiRFRSIiA6ICIiKTsKKwkKKwkvKiBkZXRlcm1pbmUgc29mdHdhcmUgZmxvdyBjb250cm9sICovCisJaWYgKElfSVhPRkYocG9ydC0+dHR5KSkKKwkJcG9ydF9zZXR0aW5ncy5zZmxvdyA9IFdISVRFSEVBVF9TRkxPV19SWFRYOworCWVsc2UKKwkJcG9ydF9zZXR0aW5ncy5zZmxvdyA9IFdISVRFSEVBVF9TRkxPV19OT05FOworCWRiZygiJXMgLSBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgPSAlYyIsIF9fRlVOQ1RJT05fXywgcG9ydF9zZXR0aW5ncy5zZmxvdyk7CisJCisJcG9ydF9zZXR0aW5ncy54b24gPSBTVEFSVF9DSEFSKHBvcnQtPnR0eSk7CisJcG9ydF9zZXR0aW5ncy54b2ZmID0gU1RPUF9DSEFSKHBvcnQtPnR0eSk7CisJZGJnKCIlcyAtIFhPTiA9ICUyeCwgWE9GRiA9ICUyeCIsIF9fRlVOQ1RJT05fXywgcG9ydF9zZXR0aW5ncy54b24sIHBvcnRfc2V0dGluZ3MueG9mZik7CisKKwkvKiBnZXQgdGhlIGJhdWQgcmF0ZSB3YW50ZWQgKi8KKwlwb3J0X3NldHRpbmdzLmJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZShwb3J0LT50dHkpOworCWRiZygiJXMgLSBiYXVkIHJhdGUgPSAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydF9zZXR0aW5ncy5iYXVkKTsKKworCS8qIGhhbmRsZSBhbnkgc2V0dGluZ3MgdGhhdCBhcmVuJ3Qgc3BlY2lmaWVkIGluIHRoZSB0dHkgc3RydWN0dXJlICovCisJcG9ydF9zZXR0aW5ncy5sbG9vcCA9IDA7CisJCisJLyogbm93IHNlbmQgdGhlIG1lc3NhZ2UgdG8gdGhlIGRldmljZSAqLworCXJldHVybiBmaXJtX3NlbmRfY29tbWFuZChwb3J0LCBXSElURUhFQVRfU0VUVVBfUE9SVCwgKF9fdTggKikmcG9ydF9zZXR0aW5ncywgc2l6ZW9mKHBvcnRfc2V0dGluZ3MpKTsKK30KKworCitzdGF0aWMgaW50IGZpcm1fc2V0X3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3U4IG9ub2ZmKSB7CisJc3RydWN0IHdoaXRlaGVhdF9zZXRfcmRiIHJ0c19jb21tYW5kOworCisJcnRzX2NvbW1hbmQucG9ydCA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3IgKyAxOworCXJ0c19jb21tYW5kLnN0YXRlID0gb25vZmY7CisJcmV0dXJuIGZpcm1fc2VuZF9jb21tYW5kKHBvcnQsIFdISVRFSEVBVF9TRVRfUlRTLCAoX191OCAqKSZydHNfY29tbWFuZCwgc2l6ZW9mKHJ0c19jb21tYW5kKSk7Cit9CisKKworc3RhdGljIGludCBmaXJtX3NldF9kdHIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgX191OCBvbm9mZikgeworCXN0cnVjdCB3aGl0ZWhlYXRfc2V0X3JkYiBkdHJfY29tbWFuZDsKKworCWR0cl9jb21tYW5kLnBvcnQgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yICsgMTsKKwlkdHJfY29tbWFuZC5zdGF0ZSA9IG9ub2ZmOworCXJldHVybiBmaXJtX3NlbmRfY29tbWFuZChwb3J0LCBXSElURUhFQVRfU0VUX1JUUywgKF9fdTggKikmZHRyX2NvbW1hbmQsIHNpemVvZihkdHJfY29tbWFuZCkpOworfQorCisKK3N0YXRpYyBpbnQgZmlybV9zZXRfYnJlYWsoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgX191OCBvbm9mZikgeworCXN0cnVjdCB3aGl0ZWhlYXRfc2V0X3JkYiBicmVha19jb21tYW5kOworCisJYnJlYWtfY29tbWFuZC5wb3J0ID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vciArIDE7CisJYnJlYWtfY29tbWFuZC5zdGF0ZSA9IG9ub2ZmOworCXJldHVybiBmaXJtX3NlbmRfY29tbWFuZChwb3J0LCBXSElURUhFQVRfU0VUX1JUUywgKF9fdTggKikmYnJlYWtfY29tbWFuZCwgc2l6ZW9mKGJyZWFrX2NvbW1hbmQpKTsKK30KKworCitzdGF0aWMgaW50IGZpcm1fcHVyZ2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgX191OCByeHR4KSB7CisJc3RydWN0IHdoaXRlaGVhdF9wdXJnZSBwdXJnZV9jb21tYW5kOworCisJcHVyZ2VfY29tbWFuZC5wb3J0ID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vciArIDE7CisJcHVyZ2VfY29tbWFuZC53aGF0ID0gcnh0eDsKKwlyZXR1cm4gZmlybV9zZW5kX2NvbW1hbmQocG9ydCwgV0hJVEVIRUFUX1BVUkdFLCAoX191OCAqKSZwdXJnZV9jb21tYW5kLCBzaXplb2YocHVyZ2VfY29tbWFuZCkpOworfQorCisKK3N0YXRpYyBpbnQgZmlybV9nZXRfZHRyX3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KSB7CisJc3RydWN0IHdoaXRlaGVhdF9zaW1wbGUgZ2V0X2RyX2NvbW1hbmQ7CisKKwlnZXRfZHJfY29tbWFuZC5wb3J0ID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vciArIDE7CisJcmV0dXJuIGZpcm1fc2VuZF9jb21tYW5kKHBvcnQsIFdISVRFSEVBVF9HRVRfRFRSX1JUUywgKF9fdTggKikmZ2V0X2RyX2NvbW1hbmQsIHNpemVvZihnZXRfZHJfY29tbWFuZCkpOworfQorCisKK3N0YXRpYyBpbnQgZmlybV9yZXBvcnRfdHhfZG9uZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KSB7CisJc3RydWN0IHdoaXRlaGVhdF9zaW1wbGUgY2xvc2VfY29tbWFuZDsKKworCWNsb3NlX2NvbW1hbmQucG9ydCA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3IgKyAxOworCXJldHVybiBmaXJtX3NlbmRfY29tbWFuZChwb3J0LCBXSElURUhFQVRfUkVQT1JUX1RYX0RPTkUsIChfX3U4ICopJmNsb3NlX2NvbW1hbmQsIHNpemVvZihjbG9zZV9jb21tYW5kKSk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb25uZWN0IFRlY2gncyBXaGl0ZSBIZWF0IHV0aWxpdHkgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHN0YXJ0X2NvbW1hbmRfcG9ydChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKmNvbW1hbmRfcG9ydDsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X2NvbW1hbmRfcHJpdmF0ZSAqY29tbWFuZF9pbmZvOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldHZhbCA9IDA7CisJCisJY29tbWFuZF9wb3J0ID0gc2VyaWFsLT5wb3J0W0NPTU1BTkRfUE9SVF07CisJY29tbWFuZF9pbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKGNvbW1hbmRfcG9ydCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbW1hbmRfaW5mby0+bG9jaywgZmxhZ3MpOworCWlmICghY29tbWFuZF9pbmZvLT5wb3J0X3J1bm5pbmcpIHsKKwkJLyogV29yayBhcm91bmQgSENEIGJ1Z3MgKi8KKwkJdXNiX2NsZWFyX2hhbHQoc2VyaWFsLT5kZXYsIGNvbW1hbmRfcG9ydC0+cmVhZF91cmItPnBpcGUpOworCisJCWNvbW1hbmRfcG9ydC0+cmVhZF91cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCQlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihjb21tYW5kX3BvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJldHZhbCkgeworCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKwljb21tYW5kX2luZm8tPnBvcnRfcnVubmluZysrOworCitleGl0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbW1hbmRfaW5mby0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIHZvaWQgc3RvcF9jb21tYW5kX3BvcnQoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpjb21tYW5kX3BvcnQ7CisJc3RydWN0IHdoaXRlaGVhdF9jb21tYW5kX3ByaXZhdGUgKmNvbW1hbmRfaW5mbzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tbWFuZF9wb3J0ID0gc2VyaWFsLT5wb3J0W0NPTU1BTkRfUE9SVF07CisJY29tbWFuZF9pbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKGNvbW1hbmRfcG9ydCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbW1hbmRfaW5mby0+bG9jaywgZmxhZ3MpOworCWNvbW1hbmRfaW5mby0+cG9ydF9ydW5uaW5nLS07CisJaWYgKCFjb21tYW5kX2luZm8tPnBvcnRfcnVubmluZykKKwkJdXNiX2tpbGxfdXJiKGNvbW1hbmRfcG9ydC0+cmVhZF91cmIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbW1hbmRfaW5mby0+bG9jaywgZmxhZ3MpOworfQorCisKK3N0YXRpYyBpbnQgc3RhcnRfcG9ydF9yZWFkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAgKndyYXA7CisJc3RydWN0IHVyYiAqdXJiOworCWludCByZXR2YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHRtcCwgdG1wMiwgJmluZm8tPnJ4X3VyYnNfZnJlZSkgeworCQlsaXN0X2RlbCh0bXApOworCQl3cmFwID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAsIGxpc3QpOworCQl1cmIgPSB3cmFwLT51cmI7CisJCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWxpc3RfYWRkKHRtcCwgJmluZm8tPnJ4X3VyYnNfZnJlZSk7CisJCQlsaXN0X2Zvcl9lYWNoX3NhZmUodG1wLCB0bXAyLCAmaW5mby0+cnhfdXJic19zdWJtaXR0ZWQpIHsKKwkJCQl3cmFwID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAsIGxpc3QpOworCQkJCXVyYiA9IHdyYXAtPnVyYjsKKwkJCQl1c2Jfa2lsbF91cmIodXJiKTsKKwkJCQlsaXN0X2RlbCh0bXApOworCQkJCWxpc3RfYWRkKHRtcCwgJmluZm8tPnJ4X3VyYnNfZnJlZSk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQlsaXN0X2FkZCh0bXAsICZpbmZvLT5yeF91cmJzX3N1Ym1pdHRlZCk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCAqdXJiX3RvX3dyYXAoc3RydWN0IHVyYiogdXJiLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAgKndyYXA7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCisJbGlzdF9mb3JfZWFjaCh0bXAsIGhlYWQpIHsKKwkJd3JhcCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwLCBsaXN0KTsKKwkJaWYgKHdyYXAtPnVyYiA9PSB1cmIpCisJCQlyZXR1cm4gd3JhcDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9maXJzdChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXJldHVybiBoZWFkLT5uZXh0OworfQorCisKK3N0YXRpYyB2b2lkIHJ4X2RhdGFfc29mdGludCh2b2lkICpwcml2YXRlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXByaXZhdGU7CisJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CisJc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCAqd3JhcDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wMjsKKwlpbnQgcmVzdWx0OworCWludCBzZW50ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisJaWYgKGluZm8tPmZsYWdzICYgVEhST1RUTEVEKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCWxpc3RfZm9yX2VhY2hfc2FmZSh0bXAsIHRtcDIsICZpbmZvLT5yeF91cmJfcSkgeworCQlsaXN0X2RlbCh0bXApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisKKwkJd3JhcCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwLCBsaXN0KTsKKwkJdXJiID0gd3JhcC0+dXJiOworCisJCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID4gVFRZX0ZMSVBCVUZfU0laRSAtIHR0eS0+ZmxpcC5jb3VudCkgeworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisJCQkJbGlzdF9hZGQodG1wLCAmaW5mby0+cnhfdXJiX3EpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJCXNjaGVkdWxlX3dvcmsoJmluZm8tPnJ4X3dvcmspOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJbWVtY3B5KHR0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJdHR5LT5mbGlwLmNoYXJfYnVmX3B0ciArPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJCQl0dHktPmZsaXAuY291bnQgKz0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCQkJc2VudCArPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJCX0KKworCQl1cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0KSB7CisJCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCQkJbGlzdF9hZGQodG1wLCAmaW5mby0+cnhfdXJic19mcmVlKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwkJbGlzdF9hZGQodG1wLCAmaW5mby0+cnhfdXJic19zdWJtaXR0ZWQpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoc2VudCkKKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvbm5lY3QgVGVjaCdzIFdoaXRlIEhlYXQgbW9kdWxlIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBfX2luaXQgd2hpdGVoZWF0X2luaXQgKHZvaWQpCit7CisJaW50IHJldHZhbDsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZ3aGl0ZWhlYXRfZmFrZV9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX2Zha2VfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3Rlcigmd2hpdGVoZWF0X2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfZGV2aWNlX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigmd2hpdGVoZWF0X2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOworCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlyZXR1cm4gMDsKK2ZhaWxlZF91c2JfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ3aGl0ZWhlYXRfZGV2aWNlKTsKK2ZhaWxlZF9kZXZpY2VfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ3aGl0ZWhlYXRfZmFrZV9kZXZpY2UpOworZmFpbGVkX2Zha2VfcmVnaXN0ZXI6CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgd2hpdGVoZWF0X2V4aXQgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIgKCZ3aGl0ZWhlYXRfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZ3aGl0ZWhlYXRfZmFrZV9kZXZpY2UpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJndoaXRlaGVhdF9kZXZpY2UpOworfQorCisKK21vZHVsZV9pbml0KHdoaXRlaGVhdF9pbml0KTsKK21vZHVsZV9leGl0KHdoaXRlaGVhdF9leGl0KTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0odXJiX3Bvb2xfc2l6ZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModXJiX3Bvb2xfc2l6ZSwgIk51bWJlciBvZiB1cmJzIHRvIHVzZSBmb3IgYnVmZmVyaW5nIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcxNGVmZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuaApAQCAtMCwwICsxLDI4MiBAQAorLyoKKyAqIFVTQiBDb25uZWN0VGVjaCBXaGl0ZUhFQVQgZHJpdmVyCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDIwMDIKKyAqICAgICAgICAgIENvbm5lY3QgVGVjaCBJbmMuCQorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwCisgKiAgICAgICAgICBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICoKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcyBkcml2ZXIKKyAqCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1VTQl9TRVJJQUxfV0hJVEVIRUFUX0gKKyNkZWZpbmUgX19MSU5VWF9VU0JfU0VSSUFMX1dISVRFSEVBVF9ICisKKworI2RlZmluZSBGQUxTRQkwCisjZGVmaW5lIFRSVUUJMQorCisKKy8qIFdoaXRlSEVBVCBjb21tYW5kcyAqLworI2RlZmluZSBXSElURUhFQVRfT1BFTgkJCTEJLyogb3BlbiB0aGUgcG9ydCAqLworI2RlZmluZSBXSElURUhFQVRfQ0xPU0UJCQkyCS8qIGNsb3NlIHRoZSBwb3J0ICovCisjZGVmaW5lIFdISVRFSEVBVF9TRVRVUF9QT1JUCQkzCS8qIGNoYW5nZSBwb3J0IHNldHRpbmdzICovCisjZGVmaW5lIFdISVRFSEVBVF9TRVRfUlRTCQk0CS8qIHR1cm4gUlRTIG9uIG9yIG9mZiAqLworI2RlZmluZSBXSElURUhFQVRfU0VUX0RUUgkJNQkvKiB0dXJuIERUUiBvbiBvciBvZmYgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1NFVF9CUkVBSwkJNgkvKiB0dXJuIEJSRUFLIG9uIG9yIG9mZiAqLworI2RlZmluZSBXSElURUhFQVRfRFVNUAkJCTcJLyogZHVtcCBtZW1vcnkgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1NUQVRVUwkJOAkvKiBnZXQgc3RhdHVzICovCisjZGVmaW5lIFdISVRFSEVBVF9QVVJHRQkJCTkJLyogY2xlYXIgdGhlIFVBUlQgZmlmb3MgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0dFVF9EVFJfUlRTCQkxMAkvKiBnZXQgdGhlIHN0YXRlIG9mIERUUiBhbmQgUlRTIGZvciBhIHBvcnQgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0dFVF9IV19JTkZPCQkxMQkvKiBnZXQgRUVQUk9NIGluZm8gYW5kIGhhcmR3YXJlIElEICovCisjZGVmaW5lIFdISVRFSEVBVF9SRVBPUlRfVFhfRE9ORQkxMgkvKiBnZXQgdGhlIG5leHQgVFggZG9uZSAqLworI2RlZmluZSBXSElURUhFQVRfRVZFTlQJCQkxMwkvKiB1bnNvbGljaXRlZCBzdGF0dXMgZXZlbnRzICovCisjZGVmaW5lIFdISVRFSEVBVF9FQ0hPCQkJMTQJLyogc2VuZCBkYXRhIHRvIHRoZSBpbmRpY2F0ZWQgSU4gZW5kcG9pbnQgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0RPX1RFU1QJCTE1CS8qIHBlcmZvcm0gdGhlIHNwZWNpZmllZCB0ZXN0ICovCisjZGVmaW5lIFdISVRFSEVBVF9DTURfQ09NUExFVEUJCTE2CS8qIHJlcGx5IGZvciBjZXJ0YWluIGNvbW1hbmRzICovCisjZGVmaW5lIFdISVRFSEVBVF9DTURfRkFJTFVSRQkJMTcJLyogcmVwbHkgZm9yIGZhaWxlZCBjb21tYW5kcyAqLworCisKKy8qCisgKiBDb21tYW5kcyB0byB0aGUgZmlybXdhcmUKKyAqLworCisKKy8qCisgKiBXSElURUhFQVRfT1BFTgorICogV0hJVEVIRUFUX0NMT1NFCisgKiBXSElURUhFQVRfU1RBVFVTCisgKiBXSElURUhFQVRfR0VUX0RUUl9SVFMKKyAqIFdISVRFSEVBVF9SRVBPUlRfVFhfRE9ORQorKi8KK3N0cnVjdCB3aGl0ZWhlYXRfc2ltcGxlIHsKKwlfX3U4CXBvcnQ7CS8qIHBvcnQgbnVtYmVyICgxIHRvIE4pICovCit9OworCisKKy8qCisgKiBXSElURUhFQVRfU0VUVVBfUE9SVAorICovCisjZGVmaW5lIFdISVRFSEVBVF9QQVJfTk9ORQknbicJLyogbm8gcGFyaXR5ICovCisjZGVmaW5lIFdISVRFSEVBVF9QQVJfRVZFTgknZScJLyogZXZlbiBwYXJpdHkgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1BBUl9PREQJJ28nCS8qIG9kZCBwYXJpdHkgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1BBUl9TUEFDRQknMCcJLyogc3BhY2UgKGZvcmNlIDApIHBhcml0eSAqLworI2RlZmluZSBXSElURUhFQVRfUEFSX01BUksJJzEnCS8qIG1hcmsgKGZvcmNlIDEpIHBhcml0eSAqLworCisjZGVmaW5lIFdISVRFSEVBVF9TRkxPV19OT05FCSduJwkvKiBubyBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1NGTE9XX1JYCSdyJwkvKiBYT0ZGL09OIGlzIHNlbnQgd2hlbiBSWCBmaWxscy9lbXB0aWVzICovCisjZGVmaW5lIFdISVRFSEVBVF9TRkxPV19UWAkndCcJLyogd2hlbiByZWNlaXZlZCBYT0ZGL09OIHdpbGwgc3RvcC9zdGFydCBUWCAqLworI2RlZmluZSBXSElURUhFQVRfU0ZMT1dfUlhUWAknYicJLyogYm90aCBTRkxPV19SWCBhbmQgU0ZMT1dfVFggKi8KKworI2RlZmluZSBXSElURUhFQVRfSEZMT1dfTk9ORQkJMHgwMAkvKiBubyBoYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0hGTE9XX1JUU19UT0dHTEUJMHgwMQkvKiBSVFMgaXMgb24gZHVyaW5nIHRyYW5zbWl0LCBvZmYgb3RoZXJ3aXNlICovCisjZGVmaW5lIFdISVRFSEVBVF9IRkxPV19EVFIJCTB4MDIJLyogRFRSIGlzIG9mZi9vbiB3aGVuIFJYIGZpbGxzL2VtcHRpZXMgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0hGTE9XX0NUUwkJMHgwOAkvKiB3aGVuIHJlY2VpdmVkIENUUyBvZmYvb24gd2lsbCBzdG9wL3N0YXJ0IFRYICovCisjZGVmaW5lIFdISVRFSEVBVF9IRkxPV19EU1IJCTB4MTAJLyogd2hlbiByZWNlaXZlZCBEU1Igb2ZmL29uIHdpbGwgc3RvcC9zdGFydCBUWCAqLworI2RlZmluZSBXSElURUhFQVRfSEZMT1dfUlRTCQkweDgwCS8qIFJUUyBpcyBvZmYvb24gd2hlbiBSWCBmaWxscy9lbXB0aWVzICovCisKK3N0cnVjdCB3aGl0ZWhlYXRfcG9ydF9zZXR0aW5ncyB7CisJX191OAlwb3J0OwkJLyogcG9ydCBudW1iZXIgKDEgdG8gTikgKi8KKwlfX3UzMgliYXVkOwkJLyogYW55IHZhbHVlIDcgLSA0NjA4MDAsIGZpcm13YXJlIGNhbGN1bGF0ZXMgYmVzdCBmaXQ7IGFycml2ZXMgbGl0dGxlIGVuZGlhbiAqLworCV9fdTgJYml0czsJCS8qIDUsIDYsIDcsIG9yIDggKi8KKwlfX3U4CXN0b3A7CQkvKiAxIG9yIDIsIGRlZmF1bHQgMSAoMiA9IDEuNSBpZiBiaXRzID0gNSkgKi8KKwlfX3U4CXBhcml0eTsJCS8qIHNlZSBXSElURUhFQVRfUEFSXyogYWJvdmUgKi8KKwlfX3U4CXNmbG93OwkJLyogc2VlIFdISVRFSEVBVF9TRkxPV18qIGFib3ZlICovCisJX191OAl4b2ZmOwkJLyogWE9GRiBieXRlIHZhbHVlICovCisJX191OAl4b247CQkvKiBYT04gYnl0ZSB2YWx1ZSAqLworCV9fdTgJaGZsb3c7CQkvKiBzZWUgV0hJVEVIRUFUX0hGTE9XXyogYWJvdmUgKi8KKwlfX3U4CWxsb29wOwkJLyogMC8xIHR1cm5zIGxvY2FsIGxvb3BiYWNrIG1vZGUgb2ZmL29uICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKgorICogV0hJVEVIRUFUX1NFVF9SVFMKKyAqIFdISVRFSEVBVF9TRVRfRFRSCisgKiBXSElURUhFQVRfU0VUX0JSRUFLCisgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1JUU19PRkYJMHgwMAorI2RlZmluZSBXSElURUhFQVRfUlRTX09OCTB4MDEKKyNkZWZpbmUgV0hJVEVIRUFUX0RUUl9PRkYJMHgwMAorI2RlZmluZSBXSElURUhFQVRfRFRSX09OCTB4MDEKKyNkZWZpbmUgV0hJVEVIRUFUX0JSRUFLX09GRgkweDAwCisjZGVmaW5lIFdISVRFSEVBVF9CUkVBS19PTgkweDAxCisKK3N0cnVjdCB3aGl0ZWhlYXRfc2V0X3JkYiB7CisJX191OAlwb3J0OwkJLyogcG9ydCBudW1iZXIgKDEgdG8gTikgKi8KKwlfX3U4CXN0YXRlOwkJLyogMC8xIHR1cm5zIHNpZ25hbCBvZmYvb24gKi8KK307CisKKworLyoKKyAqIFdISVRFSEVBVF9EVU1QCisgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0RVTVBfTUVNX0RBVEEJCSdkJyAgLyogZGF0YSAqLworI2RlZmluZSBXSElURUhFQVRfRFVNUF9NRU1fSURBVEEJJ2knICAvKiBpZGF0YSAqLworI2RlZmluZSBXSElURUhFQVRfRFVNUF9NRU1fQkRBVEEJJ2InICAvKiBiZGF0YSAqLworI2RlZmluZSBXSElURUhFQVRfRFVNUF9NRU1fWERBVEEJJ3gnICAvKiB4ZGF0YSAqLworCisvKgorICogQWxsb3dhYmxlIGFkZHJlc3MgcmFuZ2VzIChmaXJtd2FyZSBjaGVja3MgYWRkcmVzcyk6CisgKiBUeXBlIERBVEE6ICAweDAwIC0gMHhmZgorICogVHlwZSBJREFUQTogMHg4MCAtIDB4ZmYKKyAqIFR5cGUgQkRBVEE6IDB4MjAgLSAweDJmCisgKiBUeXBlIFhEQVRBOiAweDAwMDAgLSAweGZmZmYKKyAqCisgKiBCL0kvREFUQSBhbGwgcmVhZCB0aGUgbG9jYWwgbWVtb3J5IHNwYWNlCisgKiBYREFUQSByZWFkcyB0aGUgZXh0ZXJuYWwgbWVtb3J5IHNwYWNlCisgKiBCREFUQSByZXR1cm5zIGJpdHMgYXMgYnl0ZXMKKyAqCisgKiBOT1RFOiAweDgwIC0gMHhmZiAobG9jYWwgc3BhY2UpIGFyZSB0aGUgU3BlY2lhbCBGdW5jdGlvbiBSZWdpc3RlcnMKKyAqICAgICAgIG9mIHRoZSA4MDUxLCBhbmQgc29tZSBoYXZlIG9uLXJlYWQgc2lkZS1lZmZlY3RzLgorICovCisKK3N0cnVjdCB3aGl0ZWhlYXRfZHVtcCB7CisJX191OAltZW1fdHlwZTsJLyogc2VlIFdISVRFSEVBVF9EVU1QXyogYWJvdmUgKi8KKwlfX3UxNglhZGRyOwkJLyogYWRkcmVzcywgc2VlIHJlc3RyaWN0aW9ucyBhYm92ZSAqLworCV9fdTE2CWxlbmd0aDsJCS8qIG51bWJlciBvZiBieXRlcyB0byBkdW1wLCBtYXggNjMgYnl0ZXMgKi8KK307CisKKworLyoKKyAqIFdISVRFSEVBVF9QVVJHRQorICovCisjZGVmaW5lIFdISVRFSEVBVF9QVVJHRV9SWAkweDAxCS8qIHB1cmdlIHJ4IGZpZm9zICovCisjZGVmaW5lIFdISVRFSEVBVF9QVVJHRV9UWAkweDAyCS8qIHB1cmdlIHR4IGZpZm9zICovCisKK3N0cnVjdCB3aGl0ZWhlYXRfcHVyZ2UgeworCV9fdTgJcG9ydDsJCS8qIHBvcnQgbnVtYmVyICgxIHRvIE4pICovCisJX191OAl3aGF0OwkJLyogYml0IHBhdHRlcm4gb2Ygd2hhdCB0byBwdXJnZSAqLworfTsKKworCisvKgorICogV0hJVEVIRUFUX0VDSE8KKyAqLworc3RydWN0IHdoaXRlaGVhdF9lY2hvIHsKKwlfX3U4CXBvcnQ7CQkvKiBwb3J0IG51bWJlciAoMSB0byBOKSAqLworCV9fdTgJbGVuZ3RoOwkJLyogbGVuZ3RoIG9mIG1lc3NhZ2UgdG8gZWNobywgbWF4IDYxIGJ5dGVzICovCisJX191OAllY2hvX2RhdGFbNjFdOwkvKiBkYXRhIHRvIGVjaG8gKi8KK307CisKKworLyoKKyAqIFdISVRFSEVBVF9ET19URVNUCisgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1RFU1RfVUFSVF9SVwkJMHgwMSAgLyogcmVhZC93cml0ZSB1YXJ0IHJlZ2lzdGVycyAqLworI2RlZmluZSBXSElURUhFQVRfVEVTVF9VQVJUX0lOVFIJMHgwMiAgLyogdWFydCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1RFU1RfU0VUVVBfQ09OVAkweDAzICAvKiBzZXR1cCBmb3IgUE9SVF9DT05UL1BPUlRfRElTQ09OVCAqLworI2RlZmluZSBXSElURUhFQVRfVEVTVF9QT1JUX0NPTlQJMHgwNCAgLyogcG9ydCBjb25uZWN0ICovCisjZGVmaW5lIFdISVRFSEVBVF9URVNUX1BPUlRfRElTQ09OVAkweDA1ICAvKiBwb3J0IGRpc2Nvbm5lY3QgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1RFU1RfVUFSVF9DTEtfU1RBUlQJMHgwNiAgLyogdWFydCBjbG9jayB0ZXN0IHN0YXJ0ICovCisjZGVmaW5lIFdISVRFSEVBVF9URVNUX1VBUlRfQ0xLX1NUT1AJMHgwNyAgLyogdWFydCBjbG9jayB0ZXN0IHN0b3AgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1RFU1RfTU9ERU1fRlQJCTB4MDggIC8qIG1vZGVtIHNpZ25hbHMsIHJlcXVpcmVzIGEgbG9vcGJhY2sgY2FibGUvY29ubmVjdG9yICovCisjZGVmaW5lIFdISVRFSEVBVF9URVNUX0VSQVNFX0VFUFJPTQkweDA5ICAvKiBlcmFzZSBlZXByb20gKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1RFU1RfUkVBRF9FRVBST00JMHgwYSAgLyogcmVhZCBlZXByb20gKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1RFU1RfUFJPR1JBTV9FRVBST00JMHgwYiAgLyogcHJvZ3JhbSBlZXByb20gKi8KKworc3RydWN0IHdoaXRlaGVhdF90ZXN0IHsKKwlfX3U4CXBvcnQ7CQkvKiBwb3J0IG51bWJlciAoMSB0byBuKSAqLworCV9fdTgJdGVzdDsJCS8qIHNlZSBXSElURUhFQVRfVEVTVF8qIGFib3ZlKi8KKwlfX3U4CWluZm9bMzJdOwkvKiBhZGRpdGlvbmFsIGluZm8gKi8KK307CisKKworLyoKKyAqIFJlcGxpZXMgZnJvbSB0aGUgZmlybXdhcmUKKyAqLworCisKKy8qCisgKiBXSElURUhFQVRfU1RBVFVTCisgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0VWRU5UX01PREVNCQkweDAxCS8qIG1vZGVtIGZpZWxkIGlzIHZhbGlkICovCisjZGVmaW5lIFdISVRFSEVBVF9FVkVOVF9FUlJPUgkJMHgwMgkvKiBlcnJvciBmaWVsZCBpcyB2YWxpZCAqLworI2RlZmluZSBXSElURUhFQVRfRVZFTlRfRkxPVwkJMHgwNAkvKiBmbG93IGZpZWxkIGlzIHZhbGlkICovCisjZGVmaW5lIFdISVRFSEVBVF9FVkVOVF9DT05ORUNUCQkweDA4CS8qIGNvbm5lY3QgZmllbGQgaXMgdmFsaWQgKi8KKworI2RlZmluZSBXSElURUhFQVRfRkxPV19OT05FCQkweDAwCS8qIG5vIGZsb3cgY29udHJvbCBhY3RpdmUgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0ZMT1dfSEFSRF9PVVQJCTB4MDEJLyogVFggaXMgc3RvcHBlZCBieSBDVFMgKHdhaXRpbmcgZm9yIENUUyB0byBnbyBvbikgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0ZMT1dfSEFSRF9JTgkJMHgwMgkvKiByZW1vdGUgVFggaXMgc3RvcHBlZCBieSBSVFMgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0ZMT1dfU09GVF9PVVQJCTB4MDQJLyogVFggaXMgc3RvcHBlZCBieSBYT0ZGIHJlY2VpdmVkICh3YWl0aW5nIGZvciBYT04pICovCisjZGVmaW5lIFdISVRFSEVBVF9GTE9XX1NPRlRfSU4JCTB4MDgJLyogcmVtb3RlIFRYIGlzIHN0b3BwZWQgYnkgWE9GRiB0cmFuc21pdHRlZCAqLworI2RlZmluZSBXSElURUhFQVRfRkxPV19UWF9ET05FCQkweDgwCS8qIFRYIGhhcyBjb21wbGV0ZWQgKi8KKworc3RydWN0IHdoaXRlaGVhdF9zdGF0dXNfaW5mbyB7CisJX191OAlwb3J0OwkJLyogcG9ydCBudW1iZXIgKDEgdG8gTikgKi8KKwlfX3U4CWV2ZW50OwkJLyogaW5kaWNhdGVzIHdoYXQgdGhlIGN1cnJlbnQgZXZlbnQgaXMsIHNlZSBXSElURUhFQVRfRVZFTlRfKiBhYm92ZSAqLworCV9fdTgJbW9kZW07CQkvKiBtb2RlbSBzaWduYWwgc3RhdHVzIChjb3B5IG9mIHVhcnQncyBNU1IgcmVnaXN0ZXIpICovCisJX191OAllcnJvcjsJCS8qIGxpbmUgc3RhdHVzIChjb3B5IG9mIHVhcnQncyBMU1IgcmVnaXN0ZXIpICovCisJX191OAlmbG93OwkJLyogZmxvdyBjb250cm9sIHN0YXRlLCBzZWUgV0hJVEVIRUFUX0ZMT1dfKiBhYm92ZSAqLworCV9fdTgJY29ubmVjdDsJLyogMCBtZWFucyBub3QgY29ubmVjdGVkLCBub24temVybyBtZWFucyBjb25uZWN0ZWQgKi8KK307CisKKworLyoKKyAqIFdISVRFSEVBVF9HRVRfRFRSX1JUUworICovCitzdHJ1Y3Qgd2hpdGVoZWF0X2RyX2luZm8geworCV9fdTgJbWNyOwkJLyogY29weSBvZiB1YXJ0J3MgTUNSIHJlZ2lzdGVyICovCit9OworCisKKy8qCisgKiBXSElURUhFQVRfR0VUX0hXX0lORk8KKyAqLworc3RydWN0IHdoaXRlaGVhdF9od19pbmZvIHsKKwlfX3U4CWh3X2lkOwkJLyogaGFyZHdhcmUgaWQgbnVtYmVyLCBXaGl0ZUhFQVQgPSAwICovCisJX191OAlzd19tYWpvcl9yZXY7CS8qIG1ham9yIHZlcnNpb24gbnVtYmVyICovCisJX191OAlzd19taW5vcl9yZXY7CS8qIG1pbm9yIHZlcnNpb24gbnVtYmVyICovCisJc3RydWN0IHdoaXRlaGVhdF9od19lZXByb21faW5mbyB7CisJCV9fdTgJYjA7CQkJLyogQjAgKi8KKwkJX191OAl2ZW5kb3JfaWRfbG93OwkJLyogdmVuZG9yIGlkIChsb3cgYnl0ZSkgKi8KKwkJX191OAl2ZW5kb3JfaWRfaGlnaDsJCS8qIHZlbmRvciBpZCAoaGlnaCBieXRlKSAqLworCQlfX3U4CXByb2R1Y3RfaWRfbG93OwkJLyogcHJvZHVjdCBpZCAobG93IGJ5dGUpICovCisJCV9fdTgJcHJvZHVjdF9pZF9oaWdoOwkvKiBwcm9kdWN0IGlkIChoaWdoIGJ5dGUpICovCisJCV9fdTgJZGV2aWNlX2lkX2xvdzsJCS8qIGRldmljZSBpZCAobG93IGJ5dGUpICovCisJCV9fdTgJZGV2aWNlX2lkX2hpZ2g7CQkvKiBkZXZpY2UgaWQgKGhpZ2ggYnl0ZSkgKi8KKwkJX191OAlub3RfdXNlZF8xOworCQlfX3U4CXNlcmlhbF9udW1iZXJfMDsJLyogc2VyaWFsIG51bWJlciAobG93IGJ5dGUpICovCisJCV9fdTgJc2VyaWFsX251bWJlcl8xOwkvKiBzZXJpYWwgbnVtYmVyICovCisJCV9fdTgJc2VyaWFsX251bWJlcl8yOwkvKiBzZXJpYWwgbnVtYmVyICovCisJCV9fdTgJc2VyaWFsX251bWJlcl8zOwkvKiBzZXJpYWwgbnVtYmVyIChoaWdoIGJ5dGUpICovCisJCV9fdTgJbm90X3VzZWRfMjsKKwkJX191OAlub3RfdXNlZF8zOworCQlfX3U4CWNoZWNrc3VtX2xvdzsJCS8qIGNoZWNrc3VtIChsb3cgYnl0ZSkgKi8KKwkJX191OAljaGVja3N1bV9oaWdoOwkJLyogY2hlY2tzdW0gKGhpZ2ggYnl0ZSAqLworCX0gaHdfZWVwcm9tX2luZm87CS8qIEVFUFJPTSBjb250ZW50cyAqLworfTsKKworCisvKgorICogV0hJVEVIRUFUX0VWRU5UCisgKi8KK3N0cnVjdCB3aGl0ZWhlYXRfZXZlbnRfaW5mbyB7CisJX191OAlwb3J0OwkJLyogcG9ydCBudW1iZXIgKDEgdG8gTikgKi8KKwlfX3U4CWV2ZW50OwkJLyogc2VlIHdoaXRlaGVhdF9zdGF0dXNfaW5mby5ldmVudCAqLworCV9fdTgJaW5mbzsJCS8qIHNlZSB3aGl0ZWhlYXRfc3RhdHVzX2luZm8ubW9kZW0sIC5lcnJvciwgLmZsb3csIC5jb25uZWN0ICovCit9OworCisKKy8qCisgKiBXSElURUhFQVRfRE9fVEVTVAorICovCisjZGVmaW5lIFdISVRFSEVBVF9URVNUX0ZBSUwJMHgwMCAgLyogdGVzdCBmYWlsZWQgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1RFU1RfVU5LTk9XTgkweDAxICAvKiB1bmtub3duIHRlc3QgcmVxdWVzdGVkICovCisjZGVmaW5lIFdISVRFSEVBVF9URVNUX1BBU1MJMHhmZiAgLyogdGVzdCBwYXNzZWQgKi8KKworc3RydWN0IHdoaXRlaGVhdF90ZXN0X2luZm8geworCV9fdTgJcG9ydDsJCS8qIHBvcnQgbnVtYmVyICgxIHRvIE4pICovCisJX191OAl0ZXN0OwkJLyogaW5kaWNhdGVzIHdoaWNoIHRlc3QgdGhpcyBpcyBhIHJlc3BvbnNlIGZvciwgc2VlIFdISVRFSEVBVF9ET19URVNUIGFib3ZlICovCisJX191OAlzdGF0dXM7CQkvKiBzZWUgV0hJVEVIRUFUX1RFU1RfKiBhYm92ZSAqLworCV9fdTgJcmVzdWx0c1szMl07CS8qIHRlc3QtZGVwZW5kZW50IHJlc3VsdHMgKi8KK307CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0X2Z3LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0X2Z3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUwYmRjNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXRfZncuaApAQCAtMCwwICsxLDE2NjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICAgICAgd2hpdGVoZWF0LmggIC0tICBDb25uZWN0VGVjaCBXaGl0ZUhFQVQgRmlybXdhcmUuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiAgQ29ubmVjdFRlY2ggSW5jIChodHRwOi8vd3d3LmNvbm5lY3R0ZWNoLmNvbS8pCisgKgorICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqICgxMC8wOS8yMDAyKSBTdHVhcnQgTWFjRG9uYWxkCisgKglGaXJtd2FyZSA0LjA2CisgKgorICogKDA0LzA5LzIwMDApIGdraAorICoJVXBkYXRlZCB0aGUgZmlybXdhcmUgd2l0aCB0aGUgbGF0ZXN0IHByb3ZpZGVkIGJ5IENvbm5lY3RUZWNoLgorICoKKyAqICgwMS8xNi8yMDAwKSBna2gKKyAqCUZpeGVkIG15IGludGVsIGhleCBwcm9jZXNzaW5nIHRvb2wsIHNvIG5vdyB0aGUgZmlybXdhcmUgYWN0dWFsbHkKKyAqCW1hdGNoZXMgdGhlIG9yaWdpbmFsIGZpbGUgKHRoaXMgd2FzIGNhdXNpbmcgYSBmZXcgcHJvYmxlbXMuLi4pCisgKgorICogKDAxLzE1LzIwMDApIGdraAorICoJQWRkZWQgZGVidWcgbG9hZGVyIGZpcm13YXJlIGlmIERFQlVHIGlzICNkZWZpbmVkOgorICoJCVBvcnQgMSBMRUQgZmxhc2hlcyB3aGVuIHRoZSB2ZW5kX2F4IHByb2dyYW0gaXMgcnVubmluZworICoJCVBvcnQgMiBMRUQgZmxhc2hlcyB3aGVuIGFueSBTRVRVUCBjb21tYW5kIGFycml2ZXMKKyAqCQlQb3J0IDMgTEVEIGZsYXNoZXMgd2hlbiBhbnkgdmFsaWQgVkVORE9SIHJlcXVlc3Qgb2NjdXJzCisgKgkJUG9ydCA0IExFRCBmbGFzaGVzIHdoZW4gdGhlIEVYVEVSTkFMIFJBTSBET1dOTE9BRCByZXF1ZXN0IG9jY3VycworICoKKyAqIHZlcnNpb24gMS4wICgwMS8wOS8yMDAwKSBna2gKKyAqCU9yaWdpbmFsIGZpcm13YXJlIGZyb20gQ29ubmVjdFRlY2ggbWFzc2FnZWQgYSBsaXR0bGUgdG8gYmUgcHJvZ3JhbQorICoJcmVhZGFibGUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIHdoaXRlaGVhdF9EQVRFICIyMDAwMDEwNiIKKworc3RydWN0IHdoaXRlaGVhdF9oZXhfcmVjb3JkIHsKKwlfX3UxNglhZGRyZXNzOworCV9fdTgJZGF0YV9zaXplOworCV9fdTgJZGF0YVsxNl07Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHdoaXRlaGVhdF9oZXhfcmVjb3JkIHdoaXRlaGVhdF9maXJtd2FyZVtdID0geworeyAweDAwMDAsCTMsCXsweDAyLCAweDk3LCAweGUzfSB9LAoreyAweDAwMDMsCTMsCXsweDAyLCAweDEzLCAweDEyfSB9LAoreyAweDAwMGIsCTMsCXsweDAyLCAweDBiLCAweGI1fSB9LAoreyAweDAwMzMsCTMsCXsweDAyLCAweDA4LCAweDFjfSB9LAoreyAweDAwNDMsCTMsCXsweDAyLCAweDBhLCAweDAwfSB9LAoreyAweDAwNWIsCTMsCXsweDAyLCAweDgzLCAweDNifSB9LAoreyAweDAzNzAsCTE2LAl7MHg5MCwgMHg3ZiwgMHhlOSwgMHhlMCwgMHg3MCwgMHgwMywgMHgwMiwgMHgwNCwgMHg3MywgMHgxNCwgMHg3MCwgMHgwMywgMHgwMiwgMHgwNCwgMHhlNywgMHgyNH0gfSwKK3sgMHgwMzgwLAkxNiwJezB4ZmUsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDUsIDB4NGYsIDB4MjQsIDB4ZmIsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4NjQsIDB4MTQsIDB4NzAsIDB4MDN9IH0sCit7IDB4MDM5MCwJMTYsCXsweDAyLCAweDA0LCAweDUyLCAweDE0LCAweDcwLCAweDAzLCAweDAyLCAweDA0LCAweDNhLCAweDE0LCAweDcwLCAweDAzLCAweDAyLCAweDA0LCAweDQ5LCAweDI0fSB9LAoreyAweDAzYTAsCTE2LAl7MHgwNSwgMHg2MCwgMHgwMywgMHgwMiwgMHgwNSwgMHg5ZSwgMHg5MCwgMHg3ZiwgMHhlYiwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxNiwgMHgxNCwgMHg2MH0gfSwKK3sgMHgwM2IwLAkxNiwJezB4MzYsIDB4MjQsIDB4MDIsIDB4NzAsIDB4N2IsIDB4NzQsIDB4MTIsIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4NzQsIDB4MDAsIDB4OTAsIDB4N2YsIDB4ZDV9IH0sCit7IDB4MDNjMCwJMTYsCXsweGYwLCAweDAyLCAweDA1LCAweGE1LCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGZmLCAweDEyLCAweDBhLCAweDk5LCAweGVhLCAweDQ5LCAweDYwLCAweDBkfSB9LAoreyAweDAzZDAsCTE2LAl7MHhlYSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHhlOSwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhNSwgMHg5MCwgMHg3ZiwgMHhiNH0gfSwKK3sgMHgwM2UwLAkxNiwJezB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YTUsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MGEsIDB4NTgsIDB4ZWF9IH0sCit7IDB4MDNmMCwJMTYsCXsweDQ5LCAweDYwLCAweDMzLCAweDEyLCAweGEyLCAweDNiLCAweGY1LCAweDRlLCAweDkwLCAweDdmLCAweGVlLCAweGUwLCAweGZmLCAweGU1LCAweDRlLCAweGQzfSB9LAoreyAweDA0MDAsCTE2LAl7MHg5ZiwgMHg0MCwgMHgwMywgMHhlMCwgMHhmNSwgMHg0ZSwgMHhlNSwgMHg0ZSwgMHhkMywgMHg5NCwgMHg0MCwgMHg0MCwgMHgwMywgMHg3NSwgMHg0ZSwgMHg0MH0gfSwKK3sgMHgwNDEwLAkxNiwJezB4YWUsIDB4MDIsIDB4YWYsIDB4MDEsIDB4N2MsIDB4N2YsIDB4N2QsIDB4MDAsIDB4YWIsIDB4NGUsIDB4MTIsIDB4OTEsIDB4MzcsIDB4OTAsIDB4N2YsIDB4YjV9IH0sCit7IDB4MDQyMCwJMTYsCXsweGU1LCAweDRlLCAweGYwLCAweDAyLCAweDA1LCAweGE1LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDA1LCAweGE1fSB9LAoreyAweDA0MzAsCTE2LAl7MHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhNSwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhlNSwgMHgyMSwgMHhmMH0gfSwKK3sgMHgwNDQwLAkxNiwJezB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YTUsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MjEsIDB4MDJ9IH0sCit7IDB4MDQ1MCwJMTYsCXsweDA1LCAweGE1LCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGY1LCAweDM1LCAweGQyLCAweDAyLCAweDQzLCAweDg4LCAweDEwLCAweGQyLCAweGViLCAweGQyfSB9LAoreyAweDA0NjAsCTE2LAl7MHhhOCwgMHgwMiwgMHgwNSwgMHhhNSwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhlNSwgMHgzNSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMH0gfSwKK3sgMHgwNDcwLAkxNiwJezB4MDIsIDB4MDUsIDB4YTUsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4N2YsIDB4NjAsIDB4MjQsIDB4MTQsIDB4NjAsIDB4MzEsIDB4MjQsIDB4MDJ9IH0sCit7IDB4MDQ4MCwJMTYsCXsweDcwLCAweDViLCAweGEyLCAweDAwLCAweGU0LCAweDMzLCAweGZmLCAweDI1LCAweGUwLCAweGZmLCAweGEyLCAweDA1LCAweGU0LCAweDMzLCAweDRmLCAweDkwfSB9LAoreyAweDA0OTAsCTE2LAl7MHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhNSwgMHhlNH0gfSwKK3sgMHgwNGEwLAkxNiwJezB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YTUsIDB4OTB9IH0sCit7IDB4MDRiMCwJMTYsCXsweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1fSB9LAoreyAweDA0YzAsCTE2LAl7MHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHgwMSwgMHg5MCwgMHg3ZiwgMHgwMH0gfSwKK3sgMHgwNGQwLAkxNiwJezB4ZjAsIDB4ZTQsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YTUsIDB4OTAsIDB4N2YsIDB4YjR9IH0sCit7IDB4MDRlMCwJMTYsCXsweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDA1LCAweGE1LCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDFkLCAweDI0fSB9LAoreyAweDA0ZjAsCTE2LAl7MHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwNSwgMHhhNSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhiNCwgMHgwMSwgMHgwNSwgMHhjMiwgMHgwMCwgMHgwMn0gfSwKK3sgMHgwNTAwLAkxNiwJezB4MDUsIDB4YTUsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YTUsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTB9IH0sCit7IDB4MDUxMCwJMTYsCXsweDcwLCAweDM0LCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGZmLCAweDU0LCAweDA3LCAweGZlLCAweGY1LCAweDRlLCAweGVmLCAweDMwLCAweGU3LCAweDAzfSB9LAoreyAweDA1MjAsCTE2LAl7MHg0MywgMHg0ZSwgMHgxMCwgMHg5MCwgMHg3ZiwgMHhkNywgMHhlNSwgMHg0ZSwgMHhmMCwgMHhlNSwgMHg0ZSwgMHg0NCwgMHgyMCwgMHhmMCwgMHhlZiwgMHhmNH0gfSwKK3sgMHgwNTMwLAkxNiwJezB4NTQsIDB4ODAsIDB4ZmQsIDB4YzQsIDB4NTQsIDB4MGYsIDB4MmUsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2Z9IH0sCit7IDB4MDU0MCwJMTYsCXsweGY1LCAweDgzLCAweGU0LCAweGYwLCAweDgwLCAweDVmLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDU2LCAweDkwfSB9LAoreyAweDA1NTAsCTE2LAl7MHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxOCwgMHgyNCwgMHgwMiwgMHg3MCwgMHg0YSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhiNH0gfSwKK3sgMHgwNTYwLAkxNiwJezB4MDEsIDB4MDQsIDB4ZDIsIDB4MDAsIDB4ODAsIDB4M2YsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MzYsIDB4OTB9IH0sCit7IDB4MDU3MCwJMTYsCXsweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDIwLCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmfSB9LAoreyAweDA1ODAsCTE2LAl7MHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4M30gfSwKK3sgMHgwNTkwLAkxNiwJezB4NzQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MTAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MDcsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MDVhMCwJMTIsCXsweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwfSB9LAoreyAweDA1YWMsCTEsCXsweDIyfSB9LAoreyAweDA1YWQsCTE2LAl7MHg3NSwgMHg0YSwgMHhmZiwgMHg3NSwgMHg0OSwgMHhmZiwgMHg3NSwgMHg0OCwgMHgwZiwgMHg3NSwgMHg0NywgMHgwMCwgMHhkMiwgMHgwMywgMHhjMiwgMHgwNn0gfSwKK3sgMHgwNWJkLAkxNiwJezB4YzIsIDB4MDIsIDB4YzIsIDB4MDAsIDB4YzIsIDB4MDUsIDB4YzIsIDB4MDEsIDB4OTAsIDB4MDMsIDB4MDAsIDB4NzQsIDB4MTksIDB4ZjAsIDB4ZTQsIDB4OTB9IH0sCit7IDB4MDVjZCwJMTYsCXsweDAxLCAweGJjLCAweGYwLCAweGMyLCAweDA0LCAweDkwLCAweDAxLCAweGMwLCAweGYwLCAweGEzLCAweGYwLCAweGMyLCAweGFmLCAweGMyLCAweGE4LCAweDEyfSB9LAoreyAweDA1ZGQsCTE2LAl7MHgwYywgMHgyMiwgMHhlNCwgMHg5MCwgMHgwMiwgMHhhZiwgMHhmMCwgMHg5MCwgMHgwMSwgMHhiZCwgMHhmMCwgMHg5MCwgMHgwMSwgMHgwMCwgMHhmMCwgMHhhM30gfSwKK3sgMHgwNWVkLAkxNiwJezB4ZjAsIDB4YTMsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4YTN9IH0sCit7IDB4MDVmZCwJMTYsCXsweDc0LCAweDA4LCAweGYwLCAweDdlLCAweDAxLCAweDdmLCAweDAwLCAweDEyLCAweDE5LCAweGMxLCAweDc1LCAweDRjLCAweDEyLCAweDc1LCAweDRkLCAweDBhfSB9LAoreyAweDA2MGQsCTE2LAl7MHg5MCwgMHgwMSwgMHgwYiwgMHhlMCwgMHhmZiwgMHgwNSwgMHg0ZCwgMHhlNSwgMHg0ZCwgMHhhYywgMHg0YywgMHg3MCwgMHgwMiwgMHgwNSwgMHg0YywgMHgxNH0gfSwKK3sgMHgwNjFkLAkxNiwJezB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4MGMsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZmYsIDB4MDUsIDB4NGQsIDB4ZTV9IH0sCit7IDB4MDYyZCwJMTYsCXsweDRkLCAweGFjLCAweDRjLCAweDcwLCAweDAyLCAweDA1LCAweDRjLCAweDE0LCAweGY1LCAweDgyLCAweDhjLCAweDgzLCAweGVmLCAweGYwLCAweDkwLCAweDAxfSB9LAoreyAweDA2M2QsCTE2LAl7MHgwZCwgMHhlMCwgMHhmZiwgMHgwNSwgMHg0ZCwgMHhlNSwgMHg0ZCwgMHhhYywgMHg0YywgMHg3MCwgMHgwMiwgMHgwNSwgMHg0YywgMHgxNCwgMHhmNSwgMHg4Mn0gfSwKK3sgMHgwNjRkLAkxNiwJezB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4MGUsIDB4ZTAsIDB4ZmYsIDB4MDUsIDB4NGQsIDB4ZTUsIDB4NGQsIDB4YWMsIDB4NGMsIDB4NzB9IH0sCit7IDB4MDY1ZCwJMTYsCXsweDAyLCAweDA1LCAweDRjLCAweDE0LCAweGY1LCAweDgyLCAweDhjLCAweDgzLCAweGVmLCAweGYwLCAweDkwLCAweDEyLCAweDBhLCAweGU0LCAweDkzLCAweGZmfSB9LAoreyAweDA2NmQsCTE2LAl7MHg3NCwgMHgwMSwgMHg5MywgMHg5MCwgMHgwMSwgMHgxYywgMHhjZiwgMHhmMCwgMHhhMywgMHhlZiwgMHhmMCwgMHg5MCwgMHgwMSwgMHgxYywgMHhlMCwgMHhmZn0gfSwKK3sgMHgwNjdkLAkxNiwJezB4YTMsIDB4ZTAsIDB4ZmUsIDB4ZWYsIDB4NmUsIDB4ZmYsIDB4OTAsIDB4MDEsIDB4MWMsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NmYsIDB4ZmYsIDB4ZjAsIDB4OTB9IH0sCit7IDB4MDY4ZCwJMTYsCXsweDAxLCAweDFjLCAweGUwLCAweDZmLCAweGYwLCAweGUwLCAweGZlLCAweGEzLCAweGUwLCAweGZmLCAweGU0LCAweGZjLCAweGZkLCAweDc1LCAweDUyLCAweDEwfSB9LAoreyAweDA2OWQsCTE2LAl7MHg3NSwgMHg1MywgMHgwMiwgMHg3NSwgMHg1NCwgMHgxMiwgMHg3NSwgMHg1NSwgMHhhYywgMHgxMiwgMHg5NCwgMHgyNiwgMHg3NSwgMHg0YywgMHgxMiwgMHg3NX0gfSwKK3sgMHgwNmFkLAkxNiwJezB4NGQsIDB4YjIsIDB4OTAsIDB4MDEsIDB4MGQsIDB4ZTAsIDB4ZmYsIDB4MDUsIDB4NGQsIDB4ZTUsIDB4NGQsIDB4YWMsIDB4NGMsIDB4NzAsIDB4MDIsIDB4MDV9IH0sCit7IDB4MDZiZCwJMTYsCXsweDRjLCAweDE0LCAweGY1LCAweDgyLCAweDhjLCAweDgzLCAweGVmLCAweGYwLCAweDkwLCAweDAxLCAweDBlLCAweGUwLCAweGZmLCAweDA1LCAweDRkLCAweGU1fSB9LAoreyAweDA2Y2QsCTE2LAl7MHg0ZCwgMHhhYywgMHg0YywgMHg3MCwgMHgwMiwgMHgwNSwgMHg0YywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwNmRkLAkxNiwJezB4OTIsIDB4ZTAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4MjQsIDB4NDEsIDB4ZmYsIDB4MDUsIDB4NGQsIDB4ZTUsIDB4NGQsIDB4YWMsIDB4NGMsIDB4NzB9IH0sCit7IDB4MDZlZCwJMTYsCXsweDAyLCAweDA1LCAweDRjLCAweDE0LCAweGY1LCAweDgyLCAweDhjLCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDRkLCAweGU1LCAweDRkLCAweGFlLCAweDRjfSB9LAoreyAweDA2ZmQsCTE2LAl7MHg3MCwgMHgwMiwgMHgwNSwgMHg0YywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlNCwgMHhmMCwgMHg3NSwgMHg4MiwgMHgxMCwgMHg3NSwgMHg4M30gfSwKK3sgMHgwNzBkLAkxNiwJezB4MDEsIDB4ZTAsIDB4ZmMsIDB4YTMsIDB4ZTAsIDB4ZmQsIDB4YTMsIDB4ZTAsIDB4ZmUsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4OTAsIDB4MDEsIDB4MTgsIDB4MTJ9IH0sCit7IDB4MDcxZCwJMTYsCXsweGEzLCAweGVlLCAweDdlLCAweDAxLCAweDdmLCAweDE4LCAweDEyLCAweDg2LCAweGJlLCAweDkwLCAweDAxLCAweDE4LCAweGUwLCAweGZjLCAweGEzLCAweGUwfSB9LAoreyAweDA3MmQsCTE2LAl7MHhmZCwgMHhhMywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHhmZiwgMHg3NSwgMHg1MiwgMHgwYSwgMHg3NSwgMHg1MywgMHgwNiwgMHg3NSwgMHg1NCwgMHgxMn0gfSwKK3sgMHgwNzNkLAkxNiwJezB4NzUsIDB4NTUsIDB4YjgsIDB4MTIsIDB4OTQsIDB4MjYsIDB4ZDIsIDB4ZTgsIDB4NDMsIDB4ZDgsIDB4MjAsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4ZmZ9IH0sCit7IDB4MDc0ZCwJMTYsCXsweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFmLCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGFlLCAweGUwLCAweDQ0fSB9LAoreyAweDA3NWQsCTE2LAl7MHgxZiwgMHhmMCwgMHhkMiwgMHhhZiwgMHgyMCwgMHgwMSwgMHgyZSwgMHgyMCwgMHgwMSwgMHgyYiwgMHhhMiwgMHgwMywgMHg5MiwgMHgwNywgMHgxMiwgMHgwOX0gfSwKK3sgMHgwNzZkLAkxNiwJezB4YzUsIDB4NzUsIDB4NDYsIDB4NTAsIDB4NzUsIDB4NDUsIDB4NmQsIDB4NzUsIDB4NDQsIDB4MzMsIDB4NzUsIDB4NDMsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZTR9IH0sCit7IDB4MDc3ZCwJMTYsCXsweDdmLCAweGZmLCAweDdlLCAweGZmLCAweDdkLCAweGZmLCAweDdjLCAweGZmLCAweDc4LCAweDQzLCAweDEyLCAweGEzLCAweGQ3LCAweGVjLCAweDRkLCAweDRlfSB9LAoreyAweDA3OGQsCTE2LAl7MHg0ZiwgMHg2MCwgMHhkMSwgMHg4MCwgMHhlOCwgMHgzMCwgMHgwMSwgMHgwNSwgMHgxMiwgMHgwMywgMHg3MCwgMHhjMiwgMHgwMSwgMHgzMCwgMHgwNiwgMHgwYX0gfSwKK3sgMHgwNzlkLAkxNiwJezB4MTIsIDB4MDksIDB4ZmIsIDB4NTAsIDB4MDMsIDB4MTIsIDB4MGEsIDB4ZTgsIDB4YzIsIDB4MDYsIDB4MTIsIDB4OTYsIDB4NWUsIDB4OTAsIDB4MDEsIDB4YmR9IH0sCit7IDB4MDdhZCwJMTYsCXsweGUwLCAweDYwLCAweDBjLCAweDEyLCAweDkyLCAweDAxLCAweGU0LCAweDkwLCAweDAxLCAweGJkLCAweGYwLCAweDkwLCAweDdmLCAweGQzLCAweGYwLCAweDkwfSB9LAoreyAweDA3YmQsCTE2LAl7MHgwMiwgMHhhZiwgMHhlMCwgMHhiNCwgMHgwZiwgMHgwMywgMHgxMiwgMHg5OSwgMHhiOSwgMHgxMiwgMHhhMCwgMHg5NSwgMHhlNCwgMHhmZiwgMHg3NCwgMHgwMX0gfSwKK3sgMHgwN2NkLAkxNiwJezB4YTgsIDB4MDcsIDB4MDgsIDB4ODAsIDB4MDIsIDB4YzMsIDB4MzMsIDB4ZDgsIDB4ZmMsIDB4ZmUsIDB4OTAsIDB4MDEsIDB4YmMsIDB4ZTAsIDB4NWUsIDB4NjB9IH0sCit7IDB4MDdkZCwJMTYsCXsweDE0LCAweDc0LCAweDI4LCAweDJmLCAweGY4LCAweGU2LCAweGQzLCAweDk0LCAweDBhLCAweDQwLCAweDA0LCAweDdlLCAweDAxLCAweDgwLCAweDAyLCAweDdlfSB9LAoreyAweDA3ZWQsCTE2LAl7MHgwMCwgMHg4ZSwgMHg0YiwgMHg4MCwgMHgwMywgMHg3NSwgMHg0YiwgMHgwMSwgMHg3NCwgMHg2OCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgyMH0gfSwKK3sgMHgwN2ZkLAkxNiwJezB4ZjUsIDB4ODMsIDB4ZTUsIDB4NGIsIDB4ZjAsIDB4MGYsIDB4YmYsIDB4MDQsIDB4YzUsIDB4ZTUsIDB4MmMsIDB4ZDMsIDB4OTQsIDB4MGEsIDB4NDAsIDB4MDR9IH0sCit7IDB4MDgwZCwJMTQsCXsweDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweDkwLCAweDIwLCAweDZjLCAweGVmLCAweGYwLCAweDAyLCAweDA3LCAweDkyfSB9LAoreyAweDA4MWIsCTEsCXsweDIyfSB9LAoreyAweDA4MWMsCTQsCXsweDUzLCAweGQ4LCAweGVmLCAweDMyfSB9LAoreyAweDA4MjAsCTE2LAl7MHhlNSwgMHgzMywgMHhjMywgMHg5NCwgMHgwMSwgMHg0MCwgMHgwZSwgMHg5MCwgMHg3ZiwgMHg5MywgMHhlMCwgMHg0NCwgMHgzMCwgMHhmMCwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwODMwLAkxNiwJezB4OTUsIDB4ZTAsIDB4NDQsIDB4YzAsIDB4ZjAsIDB4N2YsIDB4ZjQsIDB4N2UsIDB4MDEsIDB4MTIsIDB4MDksIDB4YWUsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTB9IH0sCit7IDB4MDg0MCwJMTYsCXsweDU0LCAweGZlLCAweGYwLCAweDdmLCAweDBhLCAweDdlLCAweDAwLCAweDEyLCAweDA5LCAweGFlLCAweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDQ0LCAweDA4fSB9LAoreyAweDA4NTAsCTE2LAl7MHhmMCwgMHg3ZiwgMHgwNSwgMHg3ZSwgMHgwMCwgMHgxMiwgMHgwOSwgMHhhZSwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHg3Zn0gfSwKK3sgMHgwODYwLAkxNiwJezB4MDUsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDksIDB4YWUsIDB4ZTUsIDB4MzMsIDB4YzMsIDB4OTQsIDB4MDEsIDB4NTAsIDB4MGUsIDB4N2YsIDB4MDIsIDB4N2R9IH0sCit7IDB4MDg3MCwJMTYsCXsweGZmLCAweDEyLCAweDgyLCAweGVhLCAweDdmLCAweDA1LCAweDdlLCAweDAwLCAweDEyLCAweDA5LCAweGFlLCAweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDQ0fSB9LAoreyAweDA4ODAsCTE2LAl7MHgwMiwgMHhmMCwgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmMCwgMHg3ZiwgMHgwNSwgMHg3ZSwgMHgwMCwgMHgxMiwgMHgwOSwgMHhhZSwgMHg5MCwgMHg3ZiwgMHg5Nn0gfSwKK3sgMHgwODkwLAkxNiwJezB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4N2YsIDB4MDUsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDksIDB4YWUsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4NTR9IH0sCit7IDB4MDhhMCwJMTYsCXsweGJmLCAweGYwLCAweDdmLCAweDMyLCAweDdlLCAweDAwLCAweDEyLCAweDA5LCAweGFlLCAweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDQ0LCAweDQwLCAweGYwfSB9LAoreyAweDA4YjAsCTgsCXsweDdmLCAweDMyLCAweDdlLCAweDAwLCAweDEyLCAweDA5LCAweGFlLCAweDIyfSB9LAoreyAweDA4YjgsCTE2LAl7MHg5MCwgMHg3ZiwgMHg5NiwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHg3ZiwgMHgwYSwgMHg3ZSwgMHgwMCwgMHgxMn0gfSwKK3sgMHgwOGM4LAkxNiwJezB4MDksIDB4YWUsIDB4ZTUsIDB4MzMsIDB4YzMsIDB4OTQsIDB4MDEsIDB4NTAsIDB4MGUsIDB4N2YsIDB4MDIsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4ODIsIDB4ZWF9IH0sCit7IDB4MDhkOCwJMTYsCXsweDdmLCAweDA1LCAweDdlLCAweDAwLCAweDEyLCAweDA5LCAweGFlLCAweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDU0LCAweGJmLCAweGYwLCAweDdmLCAweDA1fSB9LAoreyAweDA4ZTgsCTE2LAl7MHg3ZSwgMHgwMCwgMHgxMiwgMHgwOSwgMHhhZSwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlMCwgMHg0NCwgMHgwNCwgMHhmMCwgMHg3ZiwgMHgwNSwgMHg3ZSwgMHgwMH0gfSwKK3sgMHgwOGY4LAkxNiwJezB4MTIsIDB4MDksIDB4YWUsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjAsIDB4N2YsIDB4MDUsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDl9IH0sCit7IDB4MDkwOCwJMTYsCXsweGFlLCAweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDdmLCAweDA1LCAweDdlLCAweDAwLCAweDEyLCAweDA5LCAweGFlLCAweGU1fSB9LAoreyAweDA5MTgsCTE2LAl7MHgzMywgMHhjMywgMHg5NCwgMHgwMSwgMHg0MCwgMHgwZSwgMHg5MCwgMHg3ZiwgMHg5MywgMHhlMCwgMHg1NCwgMHhjZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NX0gfSwKK3sgMHgwOTI4LAk4LAl7MHhlMCwgMHg1NCwgMHgzZiwgMHhmMCwgMHgxMiwgMHgwYiwgMHgwMCwgMHgyMn0gfSwKK3sgMHgwOTMwLAkxNiwJezB4OTAsIDB4MGEsIDB4ZjQsIDB4ZTQsIDB4OTMsIDB4NzAsIDB4NzYsIDB4OTAsIDB4N2YsIDB4OTMsIDB4NzQsIDB4MzAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTR9IH0sCit7IDB4MDk0MCwJMTYsCXsweDc0LCAweDNjLCAweGYwLCAweDkwLCAweDdmLCAweDk1LCAweDc0LCAweGM2LCAweGYwLCAweDdmLCAweDBhLCAweDdlLCAweDAwLCAweDEyLCAweDA5LCAweGFlfSB9LAoreyAweDA5NTAsCTE2LAl7MHhlNCwgMHg5MCwgMHg3ZiwgMHg5YywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHg3NCwgMHgwOCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHg3NCwgMHhjZn0gfSwKK3sgMHgwOTYwLAkxNiwJezB4ZjAsIDB4N2YsIDB4MGEsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDksIDB4YWUsIDB4OTAsIDB4MjAsIDB4NzAsIDB4ZTAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGZ9IH0sCit7IDB4MDk3MCwJMTYsCXsweGY1LCAweDMzLCAweGMzLCAweDk0LCAweDAxLCAweDUwLCAweDA3LCAweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweGU0LCAweDkwfSB9LAoreyAweDA5ODAsCTE2LAl7MHg3ZiwgMHg5NywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZCwgMHg3NCwgMHgwMiwgMHhmMCwgMHhlNSwgMHgzMywgMHhjMywgMHg5NCwgMHgwMSwgMHg0MCwgMHgwYn0gfSwKK3sgMHgwOTkwLAkxNiwJezB4ZTQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4YzAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZTIsIDB4NzQsIDB4MTJ9IH0sCit7IDB4MDlhMCwJMTQsCXsweGYwLCAweDEyLCAweDA4LCAweDIwLCAweDc1LCAweDgyLCAweGY0LCAweDc1LCAweDgzLCAweDBhLCAweDc0LCAweGZmLCAweGYwLCAweDIyfSB9LAoreyAweDA5YWUsCTE2LAl7MHg4ZSwgMHg1ZCwgMHg4ZiwgMHg1ZSwgMHhlNSwgMHg1ZSwgMHgxNSwgMHg1ZSwgMHhhZSwgMHg1ZCwgMHg3MCwgMHgwMiwgMHgxNSwgMHg1ZCwgMHg0ZSwgMHg2MH0gfSwKK3sgMHgwOWJlLAk3LAl7MHgwNSwgMHgxMiwgMHgwOSwgMHhlYSwgMHg4MCwgMHhlZSwgMHgyMn0gfSwKK3sgMHgwOWM1LAkxNiwJezB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4MzAsIDB4MDcsIDB4MDQsIDB4ZTAsIDB4NDR9IH0sCit7IDB4MDlkNSwJMTYsCXsweDAyLCAweGYwLCAweDdmLCAweGQwLCAweDdlLCAweDA3LCAweDEyLCAweDA5LCAweGFlLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGY3LCAweGYwfSB9LAoreyAweDA5ZTUsCTUsCXsweGUwLCAweDQ0LCAweDA0LCAweGYwLCAweDIyfSB9LAoreyAweDA5ZWEsCTE2LAl7MHg3NCwgMHgwMCwgMHhmNSwgMHg4NiwgMHg5MCwgMHhmZCwgMHhhNSwgMHg3YywgMHgwNSwgMHhhMywgMHhlNSwgMHg4MiwgMHg0NSwgMHg4MywgMHg3MCwgMHhmOX0gfSwKK3sgMHgwOWZhLAkxLAl7MHgyMn0gfSwKK3sgMHgwOWZiLAk1LAl7MHgxMiwgMHgwOCwgMHhiOCwgMHhkMywgMHgyMn0gfSwKK3sgMHgwYTAwLAkxNiwJezB4MDIsIDB4MGMsIDB4NGUsIDB4MDAsIDB4MDIsIDB4MGMsIDB4ODEsIDB4MDAsIDB4MDIsIDB4MGMsIDB4NjYsIDB4MDAsIDB4MDIsIDB4MGMsIDB4YzAsIDB4MDB9IH0sCit7IDB4MGExMCwJMTYsCXsweDAyLCAweDBjLCAweGFhLCAweDAwLCAweDAyLCAweDBhLCAweGVkLCAweDAwLCAweDAyLCAweDBhLCAweGVlLCAweDAwLCAweDAyLCAweDBhLCAweGVmLCAweDAwfSB9LAoreyAweDBhMjAsCTE2LAl7MHgwMiwgMHgwYywgMHhkYiwgMHgwMCwgMHgwMiwgMHgwZCwgMHhjYiwgMHgwMCwgMHgwMiwgMHgwZCwgMHgxNywgMHgwMCwgMHgwMiwgMHgwZSwgMHgyYiwgMHgwMH0gfSwKK3sgMHgwYTMwLAkxNiwJezB4MDIsIDB4MGQsIDB4NTMsIDB4MDAsIDB4MDIsIDB4MGUsIDB4OGIsIDB4MDAsIDB4MDIsIDB4MGQsIDB4OGYsIDB4MDAsIDB4MDIsIDB4MGUsIDB4ZWIsIDB4MDB9IH0sCit7IDB4MGE0MCwJMTYsCXsweDAyLCAweDBhLCAweGYwLCAweDAwLCAweDAyLCAweDBhLCAweGYyLCAweDAwLCAweDAyLCAweDBhLCAweGYxLCAweDAwLCAweDAyLCAweDBhLCAweGYzLCAweDAwfSB9LAoreyAweDBhNTAsCTgsCXsweDAyLCAweDBmLCAweDRiLCAweDAwLCAweDAyLCAweDBmLCAweDYxLCAweDAwfSB9LAoreyAweDBhNTgsCTIsCXsweDhmLCAweDRmfSB9LAoreyAweDBhNWEsCTE2LAl7MHhlNCwgMHhmNSwgMHg1MCwgMHg3NSwgMHg1MSwgMHhmZiwgMHg3NSwgMHg1MiwgMHgxMiwgMHg3NSwgMHg1MywgMHg2YSwgMHhhYiwgMHg1MSwgMHhhYSwgMHg1Mn0gfSwKK3sgMHgwYTZhLAkxNiwJezB4YTksIDB4NTMsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4YTIsIDB4NTQsIDB4YjQsIDB4MDMsIDB4MWQsIDB4YWYsIDB4NTAsIDB4MDUsIDB4NTAsIDB4ZWZ9IH0sCit7IDB4MGE3YSwJMTYsCXsweGI1LCAweDRmLCAweDAxLCAweDIyLCAweDEyLCAweGEyLCAweDNiLCAweDdlLCAweDAwLCAweDI5LCAweGZmLCAweGVlLCAweDNhLCAweGE5LCAweDA3LCAweDc1fSB9LAoreyAweDBhOGEsCTE0LAl7MHg1MSwgMHhmZiwgMHhmNSwgMHg1MiwgMHg4OSwgMHg1MywgMHg4MCwgMHhkNCwgMHg3YiwgMHgwMCwgMHg3YSwgMHgwMCwgMHg3OSwgMHgwMH0gfSwKK3sgMHgwYTk4LAkxLAl7MHgyMn0gfSwKK3sgMHgwYTk5LAkxNiwJezB4ZTQsIDB4ZmUsIDB4NzUsIDB4NTEsIDB4ZmYsIDB4NzUsIDB4NTIsIDB4MTIsIDB4NzUsIDB4NTMsIDB4MTIsIDB4YWIsIDB4NTEsIDB4YWEsIDB4NTIsIDB4YTl9IH0sCit7IDB4MGFhOSwJMTYsCXsweDUzLCAweDkwLCAweDAwLCAweDAxLCAweDEyLCAweGEyLCAweDU0LCAweDY0LCAweDAyLCAweDcwLCAweDJkLCAweGFkLCAweDA2LCAweDBlLCAweGVkLCAweGI1fSB9LAoreyAweDBhYjksCTE2LAl7MHgwNywgMHgwMSwgMHgyMiwgMHg5MCwgMHgwMCwgMHgwMiwgMHgxMiwgMHhhMiwgMHhhZCwgMHg4NSwgMHhmMCwgMHg0ZiwgMHhmNSwgMHg1MCwgMHg2MiwgMHg0Zn0gfSwKK3sgMHgwYWM5LAkxNiwJezB4ZTUsIDB4NGYsIDB4NjIsIDB4NTAsIDB4ZTUsIDB4NTAsIDB4NjIsIDB4NGYsIDB4MjksIDB4ZmQsIDB4ZTUsIDB4NGYsIDB4M2EsIDB4YTksIDB4MDUsIDB4NzV9IH0sCit7IDB4MGFkOSwJMTQsCXsweDUxLCAweGZmLCAweGY1LCAweDUyLCAweDg5LCAweDUzLCAweDgwLCAweGMzLCAweDdiLCAweDAwLCAweDdhLCAweDAwLCAweDc5LCAweDAwfSB9LAoreyAweDBhZTcsCTEsCXsweDIyfSB9LAoreyAweDBhZTgsCTUsCXsweDEyLCAweDA4LCAweDIwLCAweGQzLCAweDIyfSB9LAoreyAweDBhZWQsCTEsCXsweDMyfSB9LAoreyAweDBhZWUsCTEsCXsweDMyfSB9LAoreyAweDBhZWYsCTEsCXsweDMyfSB9LAoreyAweDBhZjAsCTEsCXsweDMyfSB9LAoreyAweDBhZjEsCTEsCXsweDMyfSB9LAoreyAweDBhZjIsCTEsCXsweDMyfSB9LAoreyAweDBhZjMsCTEsCXsweDMyfSB9LAoreyAweDBhZjQsCTMsCXsweDAwLCAweDA0LCAweDA3fSB9LAoreyAweDBiMDAsCTksCXsweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweDgwLCAweDc0fSB9LAoreyAweDBiN2QsCTE2LAl7MHg0MywgMHg4NywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMn0gfSwKK3sgMHgwYjhkLAkxNiwJezB4NTMsIDB4OGUsIDB4ZjcsIDB4ZTUsIDB4ODksIDB4NTQsIDB4ZjEsIDB4NDQsIDB4MDEsIDB4ZjUsIDB4ODksIDB4NzUsIDB4OGMsIDB4YjEsIDB4ZDIsIDB4YTl9IH0sCit7IDB4MGI5ZCwJMTYsCXsweDc1LCAweDk4LCAweDQwLCAweDc1LCAweGNiLCAweGZmLCAweDc1LCAweGNhLCAweGYzLCAweDc1LCAweGM4LCAweDM0LCAweGU0LCAweGZmLCAweDdmLCAweDA1fSB9LAoreyAweDBiYWQsCTcsCXsweDc4LCAweDI4LCAweGU0LCAweGY2LCAweDA4LCAweGRmLCAweGZjfSB9LAoreyAweDBiYjQsCTEsCXsweDIyfSB9LAoreyAweDBiYjUsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHhkMCwgMHg3NSwgMHhkMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHhjMCwgMHgwNiwgMHhjMH0gfSwKK3sgMHgwYmM1LAkxLAl7MHgwN30gfSwKK3sgMHgwYmM2LAkxNiwJezB4MzAsIDB4MDQsIDB4MTYsIDB4NzUsIDB4OGMsIDB4ZjgsIDB4NzUsIDB4OGEsIDB4MzAsIDB4N2YsIDB4MmYsIDB4YWUsIDB4MDcsIDB4MWYsIDB4ZWUsIDB4NjB9IH0sCit7IDB4MGJkNiwJMTYsCXsweDNjLCAweDkwLCAweDIwLCAweDAwLCAweDc0LCAweDU1LCAweGYwLCAweDgwLCAweGYyLCAweDc1LCAweDhjLCAweGIxLCAweDdmLCAweDI4LCAweGVmLCAweGQzfSB9LAoreyAweDBiZTYsCTE2LAl7MHg5NCwgMHgyYywgMHg1MCwgMHgwOSwgMHhhOCwgMHgwNywgMHhlNiwgMHg2MCwgMHgwMSwgMHgxNiwgMHgwZiwgMHg4MCwgMHhmMSwgMHg5MCwgMHgwMywgMHgwMH0gfSwKK3sgMHgwYmY2LAkxNiwJezB4ZTAsIDB4NjAsIDB4MDIsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4YzAsIDB4ZTAsIDB4NzAsIDB4MDIsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MGUsIDB4OTB9IH0sCit7IDB4MGMwNiwJMTMsCXsweDAxLCAweGMxLCAweGUwLCAweDI0LCAweGZmLCAweGYwLCAweDkwLCAweDAxLCAweGMwLCAweGUwLCAweDM0LCAweGZmLCAweGYwfSB9LAoreyAweDBjMTMsCTE1LAl7MHhkMCwgMHgwNywgMHhkMCwgMHgwNiwgMHhkMCwgMHgwMCwgMHhkMCwgMHhkMCwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwYzIyLAkxNiwJezB4ZDIsIDB4MDAsIDB4NzUsIDB4OGUsIDB4MTAsIDB4MTIsIDB4MDksIDB4MzAsIDB4ZTUsIDB4MzMsIDB4YzMsIDB4OTQsIDB4MDEsIDB4NDAsIDB4MDgsIDB4OTB9IH0sCit7IDB4MGMzMiwJMTYsCXsweDdmLCAweDkyLCAweDc0LCAweDAyLCAweGYwLCAweDgwLCAweDA1LCAweGU0LCAweDkwLCAweDdmLCAweDkyLCAweGYwLCAweDEyLCAweDgwLCAweDAwLCAweDEyfSB9LAoreyAweDBjNDIsCTEyLAl7MHgwZiwgMHg3ZCwgMHgxMiwgMHg5NCwgMHhmNywgMHgxMiwgMHgxYiwgMHgwYywgMHgxMiwgMHgwYiwgMHg4ZCwgMHgyMn0gfSwKK3sgMHgwYzRlLAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4ZDIsIDB4MDEsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDF9IH0sCit7IDB4MGM1ZSwJOCwJezB4ZjAsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9IH0sCit7IDB4MGM2NiwJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweDkwLCAweDdmLCAweGM0LCAweGU0LCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmfSB9LAoreyAweDBjNzYsCTExLAl7MHhhYiwgMHg3NCwgMHgwNCwgMHhmMCwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwYzgxLAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4OTB9IH0sCit7IDB4MGM5MSwJMTYsCXsweDdmLCAweGQ4LCAweGUwLCAweDcwLCAweDBkLCAweDkwLCAweDdmLCAweGQ5LCAweGUwLCAweDcwLCAweDA3LCAweGU1LCAweDJjLCAweDcwLCAweDAzLCAweDc1fSB9LAoreyAweDBjYTEsCTksCXsweDJjLCAweDE0LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBjYWEsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgxMCwgMHhmMCwgMHhkMH0gfSwKK3sgMHgwY2JhLAk2LAl7MHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwY2MwLAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4MzAsIDB4MDIsIDB4MDIsIDB4ZDIsIDB4MDYsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MGNkMCwJMTEsCXsweGFiLCAweDc0LCAweDA4LCAweGYwLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBjZGIsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHhkMCwgMHg3NSwgMHhkMCwgMHgxMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwY2ViLAkxNiwJezB4YTksIDB4NzQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4MzQsIDB4MzAsIDB4ZTAsIDB4MTMsIDB4ZTUsIDB4MzIsIDB4MzAsIDB4ZTAsIDB4MDcsIDB4OTAsIDB4MjB9IH0sCit7IDB4MGNmYiwJMTYsCXsweDA0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDIwLCAweDAxLCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweGU1LCAweDJjLCAweDcwLCAweDAzfSB9LAoreyAweDBkMGIsCTEyLAl7MHg3NSwgMHgyYywgMHgxNCwgMHhkMCwgMHhkMCwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwZDE3LAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ZDAsIDB4NzUsIDB4ZDAsIDB4MTAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MGQyNywJMTYsCXsweGE5LCAweDc0LCAweDA0LCAweGYwLCAweGU1LCAweDM0LCAweDMwLCAweGUxLCAweDEzLCAweGU1LCAweDMyLCAweDMwLCAweGUxLCAweDA3LCAweDkwLCAweDIwfSB9LAoreyAweDBkMzcsCTE2LAl7MHgwYywgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHgyMCwgMHgwOSwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHhlNSwgMHgyYywgMHg3MCwgMHgwM30gfSwKK3sgMHgwZDQ3LAkxMiwJezB4NzUsIDB4MmMsIDB4MTQsIDB4ZDAsIDB4ZDAsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9IH0sCit7IDB4MGQ1MywJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweGQwLCAweDc1LCAweGQwLCAweDEwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmfSB9LAoreyAweDBkNjMsCTE2LAl7MHhhOSwgMHg3NCwgMHgwOCwgMHhmMCwgMHhlNSwgMHgzNCwgMHgzMCwgMHhlMiwgMHgxMywgMHhlNSwgMHgzMiwgMHgzMCwgMHhlMiwgMHgwNywgMHg5MCwgMHgyMH0gfSwKK3sgMHgwZDczLAkxNiwJezB4MTQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4MTEsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ZTUsIDB4MmMsIDB4NzAsIDB4MDN9IH0sCit7IDB4MGQ4MywJMTIsCXsweDc1LCAweDJjLCAweDE0LCAweGQwLCAweGQwLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBkOGYsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHhkMCwgMHg3NSwgMHhkMCwgMHgxMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwZDlmLAkxNiwJezB4YTksIDB4NzQsIDB4MTAsIDB4ZjAsIDB4ZTUsIDB4MzQsIDB4MzAsIDB4ZTMsIDB4MTMsIDB4ZTUsIDB4MzIsIDB4MzAsIDB4ZTMsIDB4MDcsIDB4OTAsIDB4MjB9IH0sCit7IDB4MGRhZiwJMTYsCXsweDFjLCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDIwLCAweDE5LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweGU1LCAweDJjLCAweDcwLCAweDAzfSB9LAoreyAweDBkYmYsCTEyLAl7MHg3NSwgMHgyYywgMHgxNCwgMHhkMCwgMHhkMCwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwZGNiLAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4YzB9IH0sCit7IDB4MGRkYiwJMTYsCXsweGQwLCAweDc1LCAweGQwLCAweDEwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFhLCAweDc0LCAweDAyLCAweGYwLCAweGU1LCAweDM0LCAweDIwfSB9LAoreyAweDBkZWIsCTE2LAl7MHhlMCwgMHgwNiwgMHg5MCwgMHg3ZiwgMHhjNywgMHhmMCwgMHg4MCwgMHgyMiwgMHhlNSwgMHgzMSwgMHgzMCwgMHhlMCwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhjN30gfSwKK3sgMHgwZGZiLAkxNiwJezB4ZTAsIDB4OTAsIDB4MDIsIDB4ZjgsIDB4ZjAsIDB4ODAsIDB4MTMsIDB4ZTUsIDB4MjIsIDB4MzAsIDB4ZTAsIDB4MDcsIDB4OTAsIDB4MjAsIDB4MDQsIDB4ZTB9IH0sCit7IDB4MGUwYiwJMTYsCXsweDQ0LCAweDAyLCAweGYwLCAweDkwLCAweDIwLCAweDAxLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGU1LCAweDJjLCAweDcwLCAweDAzLCAweDc1LCAweDJjfSB9LAoreyAweDBlMWIsCTE2LAl7MHgxNCwgMHhkMCwgMHhkMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwZTJiLAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4YzB9IH0sCit7IDB4MGUzYiwJMTYsCXsweGQwLCAweDc1LCAweGQwLCAweDEwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFhLCAweDc0LCAweDA0LCAweGYwLCAweGU1LCAweDM0LCAweDIwfSB9LAoreyAweDBlNGIsCTE2LAl7MHhlMSwgMHgwNiwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhmMCwgMHg4MCwgMHgyMiwgMHhlNSwgMHgzMSwgMHgzMCwgMHhlMSwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhjOX0gfSwKK3sgMHgwZTViLAkxNiwJezB4ZTAsIDB4OTAsIDB4MDIsIDB4ZjksIDB4ZjAsIDB4ODAsIDB4MTMsIDB4ZTUsIDB4MjIsIDB4MzAsIDB4ZTEsIDB4MDcsIDB4OTAsIDB4MjAsIDB4MGMsIDB4ZTB9IH0sCit7IDB4MGU2YiwJMTYsCXsweDQ0LCAweDAyLCAweGYwLCAweDkwLCAweDIwLCAweDA5LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGU1LCAweDJjLCAweDcwLCAweDAzLCAweDc1LCAweDJjfSB9LAoreyAweDBlN2IsCTE2LAl7MHgxNCwgMHhkMCwgMHhkMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwZThiLAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4YzB9IH0sCit7IDB4MGU5YiwJMTYsCXsweGQwLCAweDc1LCAweGQwLCAweDEwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFhLCAweDc0LCAweDA4LCAweGYwLCAweGU1LCAweDM0LCAweDIwfSB9LAoreyAweDBlYWIsCTE2LAl7MHhlMiwgMHgwNiwgMHg5MCwgMHg3ZiwgMHhjYiwgMHhmMCwgMHg4MCwgMHgyMiwgMHhlNSwgMHgzMSwgMHgzMCwgMHhlMiwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhjYn0gfSwKK3sgMHgwZWJiLAkxNiwJezB4ZTAsIDB4OTAsIDB4MDIsIDB4ZmEsIDB4ZjAsIDB4ODAsIDB4MTMsIDB4ZTUsIDB4MjIsIDB4MzAsIDB4ZTIsIDB4MDcsIDB4OTAsIDB4MjAsIDB4MTQsIDB4ZTB9IH0sCit7IDB4MGVjYiwJMTYsCXsweDQ0LCAweDAyLCAweGYwLCAweDkwLCAweDIwLCAweDExLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGU1LCAweDJjLCAweDcwLCAweDAzLCAweDc1LCAweDJjfSB9LAoreyAweDBlZGIsCTE2LAl7MHgxNCwgMHhkMCwgMHhkMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwZWViLAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4YzB9IH0sCit7IDB4MGVmYiwJMTYsCXsweGQwLCAweDc1LCAweGQwLCAweDEwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFhLCAweDc0LCAweDEwLCAweGYwLCAweGU1LCAweDM0LCAweDIwfSB9LAoreyAweDBmMGIsCTE2LAl7MHhlMywgMHgwNiwgMHg5MCwgMHg3ZiwgMHhjZCwgMHhmMCwgMHg4MCwgMHgyMiwgMHhlNSwgMHgzMSwgMHgzMCwgMHhlMywgMHgwYSwgMHg5MCwgMHg3ZiwgMHhjZH0gfSwKK3sgMHgwZjFiLAkxNiwJezB4ZTAsIDB4OTAsIDB4MDIsIDB4ZmIsIDB4ZjAsIDB4ODAsIDB4MTMsIDB4ZTUsIDB4MjIsIDB4MzAsIDB4ZTMsIDB4MDcsIDB4OTAsIDB4MjAsIDB4MWMsIDB4ZTB9IH0sCit7IDB4MGYyYiwJMTYsCXsweDQ0LCAweDAyLCAweGYwLCAweDkwLCAweDIwLCAweDE5LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGU1LCAweDJjLCAweDcwLCAweDAzLCAweDc1LCAweDJjfSB9LAoreyAweDBmM2IsCTE2LAl7MHgxNCwgMHhkMCwgMHhkMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwZjRiLAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YTksIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZDB9IH0sCit7IDB4MGY1YiwJNiwJezB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9IH0sCit7IDB4MGY2MSwJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFhLCAweDc0LCAweDgwLCAweGYwLCAweDkwfSB9LAoreyAweDBmNzEsCTEyLAl7MHgwMSwgMHhiZCwgMHg3NCwgMHhmZiwgMHhmMCwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwZjdkLAkxNiwJezB4OTAsIDB4MDEsIDB4MjAsIDB4MTIsIDB4YTMsIDB4ZmEsIDB4MDAsIDB4MDAsIDB4MjUsIDB4ODAsIDB4OTAsIDB4MDEsIDB4MjQsIDB4NzQsIDB4MDgsIDB4ZjB9IH0sCit7IDB4MGY4ZCwJMTYsCXsweGEzLCAweDc0LCAweDAxLCAweGYwLCAweGEzLCAweDc0LCAweDZlLCAweGYwLCAweGEzLCAweGYwLCAweGEzLCAweDc0LCAweDEzLCAweGYwLCAweGEzLCAweDc0fSB9LAoreyAweDBmOWQsCTE2LAl7MHgxMSwgMHhmMCwgMHhlNCwgMHhhMywgMHhmMCwgMHhhMywgMHhmMCwgMHg5MCwgMHgwMSwgMHgxZSwgMHhmMCwgMHg5MCwgMHgwMSwgMHgxZSwgMHhlMCwgMHhmZn0gfSwKK3sgMHgwZmFkLAkxNiwJezB4MDQsIDB4YTMsIDB4ZjAsIDB4ZWYsIDB4NzUsIDB4ZjAsIDB4MGQsIDB4YTQsIDB4MjQsIDB4MDEsIDB4ZjksIDB4NzQsIDB4MDMsIDB4MzUsIDB4ZjAsIDB4YTh9IH0sCit7IDB4MGZiZCwJMTYsCXsweDAxLCAweGZjLCAweDdkLCAweDAxLCAweDdiLCAweDAxLCAweDdhLCAweDAxLCAweDc5LCAweDFmLCAweDdlLCAweDAwLCAweDdmLCAweDBkLCAweDEyLCAweGEyfSB9LAoreyAweDBmY2QsCTE2LAl7MHgxMiwgMHg3ZSwgMHgwMSwgMHg3ZiwgMHgxZiwgMHgxMiwgMHg4NywgMHhhNiwgMHg5MCwgMHgwMSwgMHgxZSwgMHhlMCwgMHgwNCwgMHhmMCwgMHhlMCwgMHhjM30gfSwKK3sgMHgwZmRkLAkxNiwJezB4OTQsIDB4MDQsIDB4NDAsIDB4YzcsIDB4ZTQsIDB4ZjUsIDB4MjcsIDB4OTAsIDB4MDEsIDB4MWUsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4MWUsIDB4ZTAsIDB4ZmZ9IH0sCit7IDB4MGZlZCwJMTYsCXsweGMzLCAweDk0LCAweDA0LCAweDUwLCAweDFhLCAweDc0LCAweGY4LCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDAyLCAweGY1LCAweDgzLCAweGU0fSB9LAoreyAweDBmZmQsCTE2LAl7MHhmMCwgMHg3NCwgMHgyMywgMHgyZiwgMHhmOCwgMHhlNCwgMHhmNiwgMHg5MCwgMHgwMSwgMHgxZSwgMHhlMCwgMHgwNCwgMHhmMCwgMHg4MCwgMHhkYywgMHhlNH0gfSwKK3sgMHgxMDBkLAkxNiwJezB4ZjUsIDB4MzQsIDB4ZTUsIDB4YzAsIDB4NjAsIDB4MmYsIDB4OTAsIDB4MDEsIDB4MWUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4MWUsIDB4ZTB9IH0sCit7IDB4MTAxZCwJMTYsCXsweGZmLCAweGQzLCAweDk0LCAweDA0LCAweDUwLCAweDFmLCAweGVmLCAweDE0LCAweGZmLCAweDc0LCAweDAxLCAweGE4LCAweDA3LCAweDA4LCAweDgwLCAweDAyfSB9LAoreyAweDEwMmQsCTE2LAl7MHhjMywgMHgzMywgMHhkOCwgMHhmYywgMHg0MiwgMHgzNCwgMHg3ZSwgMHgwMSwgMHg3ZiwgMHgxZSwgMHgxMiwgMHg4NCwgMHg0MSwgMHg5MCwgMHgwMSwgMHgxZX0gfSwKK3sgMHgxMDNkLAkxNiwJezB4ZTAsIDB4MDQsIDB4ZjAsIDB4ODAsIDB4ZDcsIDB4ZTQsIDB4ZjUsIDB4M2UsIDB4ZjUsIDB4MjIsIDB4ZjUsIDB4MzEsIDB4ZjUsIDB4MzIsIDB4OTAsIDB4MDF9IH0sCit7IDB4MTA0ZCwJMTYsCXsweDFlLCAweGYwLCAweDkwLCAweDAxLCAweDFlLCAweGUwLCAweGZmLCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDA2LCAweGY1LCAweDgyLCAweGU0fSB9LAoreyAweDEwNWQsCTE2LAl7MHgzNCwgMHgyMCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmMCwgMHhmZSwgMHg3NCwgMHhjNSwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwMX0gfSwKK3sgMHgxMDZkLAkxNiwJezB4ZjUsIDB4ODMsIDB4ZWUsIDB4ZjAsIDB4NzQsIDB4M2EsIDB4MmYsIDB4ZjgsIDB4YTYsIDB4MDYsIDB4NzQsIDB4MzYsIDB4MmYsIDB4ZjgsIDB4ZTQsIDB4ZjZ9IH0sCit7IDB4MTA3ZCwJMTYsCXsweDc0LCAweDJkLCAweDJmLCAweGY4LCAweGU0LCAweGY2LCAweDc0LCAweGZjLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDAyLCAweGY1LCAweDgzfSB9LAoreyAweDEwOGQsCTE2LAl7MHhlNCwgMHhmMCwgMHg5MCwgMHgwMSwgMHgxZSwgMHhlMCwgMHgwNCwgMHhmMCwgMHhlMCwgMHhiNCwgMHgwNCwgMHhiNiwgMHg5MCwgMHgyMCwgMHg2MCwgMHhlMH0gfSwKK3sgMHgxMDlkLAk0LAl7MHg1NCwgMHgwZiwgMHhmNSwgMHg0ZX0gfSwKK3sgMHgxMGExLAkxNiwJezB4NzAsIDB4MDMsIDB4MDIsIDB4MTEsIDB4MjYsIDB4ZTQsIDB4OTAsIDB4MDEsIDB4MWUsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4MWUsIDB4ZTAsIDB4ZmYsIDB4YzN9IH0sCit7IDB4MTBiMSwJMTYsCXsweDk0LCAweDA0LCAweDUwLCAweGU0LCAweDc0LCAweDAxLCAweGE4LCAweDA3LCAweDA4LCAweDgwLCAweDAyLCAweGMzLCAweDMzLCAweGQ4LCAweGZjLCAweDU1fSB9LAoreyAweDEwYzEsCTE2LAl7MHg0ZSwgMHg2MCwgMHg1YSwgMHg5MCwgMHgwMSwgMHgxZSwgMHhlMCwgMHhmZSwgMHg3NSwgMHhmMCwgMHgwOCwgMHhhNCwgMHgyNCwgMHgwMiwgMHhmNSwgMHg4Mn0gfSwKK3sgMHgxMGQxLAkxNiwJezB4ZTQsIDB4MzQsIDB4MjAsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZWUsIDB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDUsIDB4ZjUsIDB4ODJ9IH0sCit7IDB4MTBlMSwJMTYsCXsweGU0LCAweDM0LCAweDIwLCAweGY1LCAweDgzLCAweGUwLCAweGVlLCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDA2LCAweGY1LCAweDgyLCAweGU0fSB9LAoreyAweDEwZjEsCTE2LAl7MHgzNCwgMHgyMCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhhZiwgMHgwNiwgMHhlZSwgMHg3NSwgMHhmMCwgMHgwZCwgMHhhNCwgMHgyNCwgMHgwMiwgMHhmNX0gfSwKK3sgMHgxMTAxLAkxNiwJezB4ODIsIDB4ZTQsIDB4MzQsIDB4MDMsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmMsIDB4YTMsIDB4ZTAsIDB4ZmQsIDB4YTMsIDB4ZTAsIDB4ZmUsIDB4YTMsIDB4ZTB9IH0sCit7IDB4MTExMSwJMTYsCXsweGY1LCAweDY2LCAweDhlLCAweDY1LCAweDhkLCAweDY0LCAweDhjLCAweDYzLCAweDdkLCAweDA2LCAweDEyLCAweDgzLCAweGRmLCAweDkwLCAweDAxLCAweDFlfSB9LAoreyAweDExMjEsCTYsCXsweGUwLCAweDA0LCAweGYwLCAweDgwLCAweDg1LCAweDIyfSB9LAoreyAweDExMjcsCTIsCXsweGFjLCAweDA3fSB9LAoreyAweDExMjksCTE2LAl7MHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHhlYywgMHgyNSwgMHhlMCwgMHg0NCwgMHg0MSwgMHg5MCwgMHg3ZiwgMHhhNiwgMHhmMH0gfSwKK3sgMHgxMTM5LAkxNiwJezB4N2IsIDB4M2MsIDB4YWYsIDB4MDMsIDB4MWIsIDB4ZWYsIDB4NzAsIDB4MTYsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4OTB9IH0sCit7IDB4MTE0OSwJMTYsCXsweDdmLCAweGE2LCAweGUwLCAweGZkLCAweDdkLCAweDMyLCAweGFmLCAweDA1LCAweDFkLCAweGVmLCAweDYwLCAweGQ0LCAweDgwLCAweGY4LCAweDkwLCAweDdmfSB9LAoreyAweDExNTksCTE2LAl7MHhhNSwgMHhlMCwgMHhmZCwgMHgzMCwgMHhlMCwgMHhkYywgMHgyMCwgMHhlMSwgMHgwOSwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg3ZSwgMHhmZiwgMHg3Zn0gfSwKK3sgMHgxMTY5LAkxNiwJezB4ZjksIDB4MjIsIDB4ZWQsIDB4MzAsIDB4ZTIsIDB4MGMsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4N2UsIDB4ZmYsIDB4N2Z9IH0sCit7IDB4MTE3OSwJMTYsCXsweGZhLCAweDIyLCAweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAweDkwLCAweDdmLCAweGE2LCAweGUwLCAweGZkLCAweDdiLCAweDFlfSB9LAoreyAweDExODksCTE2LAl7MHhhZiwgMHgwMywgMHgxYiwgMHhlZiwgMHg3MCwgMHgxNiwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhNn0gfSwKK3sgMHgxMTk5LAkxNiwJezB4ZTAsIDB4ZmQsIDB4N2QsIDB4MzIsIDB4YWYsIDB4MDUsIDB4MWQsIDB4ZWYsIDB4NjAsIDB4ODYsIDB4ODAsIDB4ZjgsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTB9IH0sCit7IDB4MTFhOSwJMTYsCXsweGZkLCAweDIwLCAweGUwLCAweGRjLCAweDdiLCAweDNjLCAweGFmLCAweDAzLCAweDFiLCAweGVmLCAweDcwLCAweDE5LCAweDkwLCAweDdmLCAweGE1LCAweGUwfSB9LAoreyAweDExYjksCTE2LAl7MHg0NCwgMHg0MCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhNiwgMHhlMCwgMHhmZCwgMHg3ZCwgMHgzMiwgMHhhZiwgMHgwNSwgMHgxZCwgMHhlZiwgMHg3MCwgMHgwM30gfSwKK3sgMHgxMWM5LAkxNiwJezB4MDIsIDB4MTEsIDB4MjksIDB4ODAsIDB4ZjUsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4ZmQsIDB4MzAsIDB4ZTAsIDB4ZDksIDB4MzAsIDB4ZTIsIDB4MDl9IH0sCit7IDB4MTFkOSwJMTYsCXsweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDdlLCAweGZmLCAweDdmLCAweGZhLCAweDIyLCAweGMyLCAweGFmLCAweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0fSB9LAoreyAweDExZTksCTEyLAl7MHg0MCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhNiwgMHhlMCwgMHhmZCwgMHhkMiwgMHhhZiwgMHhmZiwgMHg3ZSwgMHgwMH0gfSwKK3sgMHgxMWY1LAkxLAl7MHgyMn0gfSwKK3sgMHgxMjAwLAkxNiwJezB4MTIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NDAsIDB4MTAsIDB4MDcsIDB4MDEsIDB4ODAsIDB4NDIsIDB4MDAsIDB4MDEsIDB4MDJ9IH0sCit7IDB4MTIxMCwJMTYsCXsweDAzLCAweDAxLCAweDA5LCAweDAyLCAweDU4LCAweDAwLCAweDAxLCAweDAxLCAweDA0LCAweDgwLCAweDNjLCAweDA5LCAweDA0LCAweDAwLCAweDAwLCAweDBhfSB9LAoreyAweDEyMjAsCTE2LAl7MHhmZiwgMHhmZiwgMHhmZiwgMHgwNSwgMHgwNywgMHgwNSwgMHg4MSwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMSwgMHgwMiwgMHg0MH0gfSwKK3sgMHgxMjMwLAkxNiwJezB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4ODIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDB9IH0sCit7IDB4MTI0MCwJMTYsCXsweDA3LCAweDA1LCAweDgzLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAzLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1fSB9LAoreyAweDEyNTAsCTE2LAl7MHg4NCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHg4NywgMHgwMn0gfSwKK3sgMHgxMjYwLAkxNiwJezB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDcsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDMsIDB4MDksIDB4MDQsIDB4MjQsIDB4MDN9IH0sCit7IDB4MTI3MCwJMTYsCXsweDQzLCAweDAwLCAweDZmLCAweDAwLCAweDZlLCAweDAwLCAweDZlLCAweDAwLCAweDY1LCAweDAwLCAweDYzLCAweDAwLCAweDc0LCAweDAwLCAweDIwLCAweDAwfSB9LAoreyAweDEyODAsCTE2LAl7MHg1NCwgMHgwMCwgMHg2NSwgMHgwMCwgMHg2MywgMHgwMCwgMHg2OCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg0OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2MywgMHgwMH0gfSwKK3sgMHgxMjkwLAkxNiwJezB4MmUsIDB4MDAsIDB4MTgsIDB4MDMsIDB4NTcsIDB4MDAsIDB4NjgsIDB4MDAsIDB4NjksIDB4MDAsIDB4NzQsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NDgsIDB4MDB9IH0sCit7IDB4MTJhMCwJMTYsCXsweDQ1LCAweDAwLCAweDQxLCAweDAwLCAweDU0LCAweDAwLCAweDJkLCAweDAwLCAweDM0LCAweDAwLCAweDFhLCAweDAzLCAweDU4LCAweDAwLCAweDU4LCAweDAwfSB9LAoreyAweDEyYjAsCTE2LAl7MHgyZCwgMHgwMCwgMHg1OCwgMHgwMCwgMHg1OCwgMHgwMCwgMHgyZCwgMHgwMCwgMHg1OCwgMHgwMCwgMHg1OCwgMHgwMCwgMHg1OCwgMHgwMCwgMHg1OCwgMHgwMH0gfSwKK3sgMHgxMmMwLAkxNiwJezB4NTgsIDB4MDAsIDB4NTgsIDB4MDAsIDB4MmEsIDB4MDMsIDB4NDMsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjYsIDB4MDAsIDB4NjksIDB4MDB9IH0sCit7IDB4MTJkMCwJMTYsCXsweDY3LCAweDAwLCAweDc1LCAweDAwLCAweDcyLCAweDAwLCAweDYxLCAweDAwLCAweDc0LCAweDAwLCAweDY5LCAweDAwLCAweDZmLCAweDAwLCAweDZlLCAweDAwfSB9LAoreyAweDEyZTAsCTE2LAl7MHgyMCwgMHgwMCwgMHg1MywgMHgwMCwgMHg3NCwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2NywgMHgwMCwgMHgyMiwgMHgwM30gfSwKK3sgMHgxMmYwLAkxNiwJezB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzIsIDB4MDAsIDB4NjYsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NjMsIDB4MDB9IH0sCit7IDB4MTMwMCwJMTYsCXsweDY1LCAweDAwLCAweDIwLCAweDAwLCAweDUzLCAweDAwLCAweDc0LCAweDAwLCAweDcyLCAweDAwLCAweDY5LCAweDAwLCAweDZlLCAweDAwLCAweDY3LCAweDAwfSB9LAoreyAweDEzMTAsCTIsCXsweDAwLCAweDAwfSB9LAoreyAweDEzMTIsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHhmMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHhjMCwgMHhkMH0gfSwKK3sgMHgxMzIyLAkxNiwJezB4NzUsIDB4ODYsIDB4MDAsIDB4NzUsIDB4ZDAsIDB4MTgsIDB4OTAsIDB4MjAsIDB4NjAsIDB4ZTAsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4ZjAsIDB4NzAsIDB4MTF9IH0sCit7IDB4MTMzMiwJMTYsCXsweGQwLCAweGQwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGYwLCAweGQwLCAweGUwfSB9LAoreyAweDEzNDIsCTE2LAl7MHgzMiwgMHg3NSwgMHg4NiwgMHgwMCwgMHgxMCwgMHhmMCwgMHgwYiwgMHgxMCwgMHhmMSwgMHgxMiwgMHgxMCwgMHhmMiwgMHgxOSwgMHgxMCwgMHhmMywgMHgyMH0gfSwKK3sgMHgxMzUyLAkxNiwJezB4ODAsIDB4ZDQsIDB4ZTUsIDB4MjgsIDB4NzAsIDB4MDMsIDB4NzUsIDB4MjgsIDB4MTQsIDB4MDIsIDB4MTMsIDB4N2MsIDB4ZTUsIDB4MjksIDB4NzAsIDB4MDN9IH0sCit7IDB4MTM2MiwJMTYsCXsweDc1LCAweDI5LCAweDE0LCAweDAyLCAweDE1LCAweDBkLCAweGU1LCAweDJhLCAweDcwLCAweDAzLCAweDc1LCAweDJhLCAweDE0LCAweDAyLCAweDE2LCAweDllfSB9LAoreyAweDEzNzIsCTE2LAl7MHhlNSwgMHgyYiwgMHg3MCwgMHgwMywgMHg3NSwgMHgyYiwgMHgxNCwgMHgwMiwgMHgxOCwgMHgyZiwgMHg5MCwgMHgyMCwgMHgwMiwgMHhlMCwgMHg1NCwgMHgzZn0gfSwKK3sgMHgxMzgyLAkxNiwJezB4MjAsIDB4ZTIsIDB4M2EsIDB4MjAsIDB4ZTEsIDB4MGIsIDB4MjAsIDB4ZTQsIDB4MGIsIDB4MjAsIDB4ZTUsIDB4MTQsIDB4NjAsIDB4MDksIDB4MDIsIDB4MTN9IH0sCit7IDB4MTM5MiwJMTYsCXsweDQzLCAweDAyLCAweDE0LCAweDY1LCAweDAyLCAweDEzLCAweDQzLCAweDQzLCAweDgyLCAweDA0LCAweGUwLCAweGY1LCAweDNhLCAweDAyLCAweDEzLCAweDQzfSB9LAoreyAweDEzYTIsCTE2LAl7MHg0MywgMHg4MiwgMHgwNCwgMHhlMCwgMHg0MywgMHgyZCwgMHgwMSwgMHgwMiwgMHgxMywgMHg0MywgMHg1MywgMHg4MiwgMHhmOCwgMHg0MywgMHg4MiwgMHgwNX0gfSwKK3sgMHgxM2IyLAkxNiwJezB4ZTAsIDB4NDIsIDB4MzYsIDB4NTMsIDB4ODIsIDB4ZmIsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4MDIsIDB4MTMsIDB4NDMsIDB4MzAsIDB4ZTEsIDB4MDJ9IH0sCit7IDB4MTNjMiwJMTYsCXsweDgwLCAweGU4LCAweGY1LCAweDg1LCAweGU1LCAweDMyLCAweDMwLCAweGUwLCAweDBhLCAweDUzLCAweDgyLCAweGY4LCAweDQzLCAweDgyLCAweDA0LCAweGUwfSB9LAoreyAweDEzZDIsCTE2LAl7MHg1NCwgMHhmZSwgMHhmMCwgMHhlNSwgMHg4NSwgMHgyMCwgMHhlMywgMHg1NiwgMHg5MCwgMHgyMCwgMHg1MCwgMHg3NCwgMHgwMCwgMHhmMCwgMHg5MCwgMHgyMH0gfSwKK3sgMHgxM2UyLAkxNiwJezB4NTgsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZTIsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZTMsIDB4MDUsIDB4ODZ9IH0sCit7IDB4MTNmMiwJMTYsCXsweDkwLCAweDdlLCAweDgwLCAweDA1LCAweDg2LCAweGU1LCAweDg1LCAweGYwLCAweGEzLCAweGU1LCAweDg0LCAweGYwLCAweDA1LCAweDg2LCAweDkwLCAweDdmfSB9LAoreyAweDE0MDIsCTE2LAl7MHhlNSwgMHhlNSwgMHgzZiwgMHhmZCwgMHgwMywgMHgwMywgMHgwMywgMHhmZSwgMHhmMCwgMHhmMCwgMHhmMCwgMHhmMCwgMHhmMCwgMHhmMCwgMHhmMCwgMHhmMH0gfSwKK3sgMHgxNDEyLAkxNiwJezB4ZGUsIDB4ZjYsIDB4OTAsIDB4N2YsIDB4ZTIsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4NTgsIDB4NzQsIDB4MDAsIDB4ZjAsIDB4OTB9IH0sCit7IDB4MTQyMiwJMTYsCXsweDdmLCAweGI3LCAweGVkLCAweGYwLCAweDkwLCAweDIwLCAweDAxLCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweDAyLCAweDEzLCAweDQzLCAweDdmLCAweDQwfSB9LAoreyAweDE0MzIsCTE2LAl7MHg5MCwgMHg3ZSwgMHg4MCwgMHgwNSwgMHg4NiwgMHg5MCwgMHgyMCwgMHgwMCwgMHhlNSwgMHg4NCwgMHhmZSwgMHgyNCwgMHgwNSwgMHhmZCwgMHg4ZCwgMHg4NH0gfSwKK3sgMHgxNDQyLAkxNiwJezB4ZTAsIDB4OGUsIDB4ODQsIDB4MzAsIDB4ZTAsIDB4MDksIDB4ZTAsIDB4MDUsIDB4ODYsIDB4ZjAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4ZGYsIDB4ZWYsIDB4MDV9IH0sCit7IDB4MTQ1MiwJMTYsCXsweDg2LCAweGMzLCAweDc0LCAweDQwLCAweDlmLCAweDkwLCAweDdmLCAweGI3LCAweGYwLCAweDA1LCAweDg2LCAweGEzLCAweGUwLCAweDU0LCAweGZlLCAweGYwfSB9LAoreyAweDE0NjIsCTE2LAl7MHgwMiwgMHgxMywgMHg0MywgMHg1MywgMHgyZCwgMHhmYSwgMHhlNSwgMHgyMywgMHg2MCwgMHgwOCwgMHg3NSwgMHgyMywgMHgwMCwgMHhkMiwgMHhlNywgMHhmZX0gfSwKK3sgMHgxNDcyLAkxNiwJezB4ODAsIDB4MGEsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTAsIDB4ZmUsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTQsIDB4ZmYsIDB4OTAsIDB4MjAsIDB4NTAsIDB4NzR9IH0sCit7IDB4MTQ4MiwJMTYsCXsweDAwLCAweGYwLCAweDkwLCAweDIwLCAweDU4LCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGUyLCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDkwfSB9LAoreyAweDE0OTIsCTE2LAl7MHg3ZiwgMHhlMywgMHgwNSwgMHg4NiwgMHg5MCwgMHg3ZSwgMHg0MCwgMHgwNSwgMHg4NiwgMHhlNSwgMHg4NSwgMHhmMCwgMHhhMywgMHhlNSwgMHg4NCwgMHhmMH0gfSwKK3sgMHgxNGEyLAkxNiwJezB4MDUsIDB4ODYsIDB4OTAsIDB4N2YsIDB4ZTUsIDB4ZWUsIDB4MzAsIDB4ZTcsIDB4MDgsIDB4MDUsIDB4ODYsIDB4ZTAsIDB4MjQsIDB4MzgsIDB4ZjAsIDB4MDV9IH0sCit7IDB4MTRiMiwJMTYsCXsweDg2LCAweGVlLCAweDU0LCAweDdmLCAweGZlLCAweDU0LCAweDA3LCAweGZiLCAweGVlLCAweDU0LCAweDc4LCAweDYwLCAweDMwLCAweDAzLCAweDAzLCAweDAzfSB9LAoreyAweDE0YzIsCTE2LAl7MHgzMCwgMHhlMywgMHgwNCwgMHg3NCwgMHgwNywgMHg3YiwgMHgwOCwgMHhmZCwgMHhmYywgMHhlMCwgMHhlMCwgMHhlMCwgMHhlMCwgMHhlMCwgMHhlMCwgMHhlMH0gfSwKK3sgMHgxNGQyLAkxNiwJezB4ZTAsIDB4ZGQsIDB4ZjYsIDB4ZWIsIDB4ZmUsIDB4NjAsIDB4MTksIDB4ZWMsIDB4NjQsIDB4MDcsIDB4NzAsIDB4MTEsIDB4OGIsIDB4MjMsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MTRlMiwJMTYsCXsweGUyLCAweGUwLCAweDU0LCAweGJmLCAweGYwLCAweDkwLCAweDIwLCAweDU4LCAweDc0LCAweDAwLCAweGYwLCAweDgwLCAweDFiLCAweGUwLCAweGRlLCAweGZkfSB9LAoreyAweDE0ZjIsCTE2LAl7MHg5MCwgMHg3ZiwgMHhlMiwgMHhlMCwgMHg1NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHgyMCwgMHg1OCwgMHg3NCwgMHgwMCwgMHhmMCwgMHg5MCwgMHgyMCwgMHgwMX0gfSwKK3sgMHgxNTAyLAkxNiwJezB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZjAsIDB4MDIsIDB4MTMsIDB4NDMsIDB4OTAsIDB4MjAsIDB4MGEsIDB4ZTAsIDB4NTR9IH0sCit7IDB4MTUxMiwJMTYsCXsweDNmLCAweDIwLCAweGUyLCAweDNhLCAweDIwLCAweGUxLCAweDBiLCAweDIwLCAweGU0LCAweDBiLCAweDIwLCAweGU1LCAweDE0LCAweDYwLCAweDA5LCAweDAyfSB9LAoreyAweDE1MjIsCTE2LAl7MHgxMywgMHg0MywgMHgwMiwgMHgxNSwgMHhmNiwgMHgwMiwgMHgxMywgMHg0MywgMHg0MywgMHg4MiwgMHgwNCwgMHhlMCwgMHhmNSwgMHgzYiwgMHgwMiwgMHgxM30gfSwKK3sgMHgxNTMyLAkxNiwJezB4NDMsIDB4NDMsIDB4ODIsIDB4MDQsIDB4ZTAsIDB4NDMsIDB4MmUsIDB4MDEsIDB4MDIsIDB4MTMsIDB4NDMsIDB4NTMsIDB4ODIsIDB4ZjgsIDB4NDMsIDB4ODJ9IH0sCit7IDB4MTU0MiwJMTYsCXsweDA1LCAweGUwLCAweDQyLCAweDM3LCAweDUzLCAweDgyLCAweGZiLCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweDAyLCAweDEzLCAweDQzLCAweDMwLCAweGUxfSB9LAoreyAweDE1NTIsCTE2LAl7MHgwMiwgMHg4MCwgMHhlOCwgMHhmNSwgMHg4NSwgMHhlNSwgMHgzMiwgMHgzMCwgMHhlMSwgMHgwYSwgMHg1MywgMHg4MiwgMHhmOCwgMHg0MywgMHg4MiwgMHgwNH0gfSwKK3sgMHgxNTYyLAkxNiwJezB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4ZTUsIDB4ODUsIDB4MjAsIDB4ZTMsIDB4NTYsIDB4OTAsIDB4MjAsIDB4NTAsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTB9IH0sCit7IDB4MTU3MiwJMTYsCXsweDIwLCAweDU4LCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGUyLCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDkwLCAweDdmLCAweGUzLCAweDA1fSB9LAoreyAweDE1ODIsCTE2LAl7MHg4NiwgMHg5MCwgMHg3ZSwgMHgwMCwgMHgwNSwgMHg4NiwgMHhlNSwgMHg4NSwgMHhmMCwgMHhhMywgMHhlNSwgMHg4NCwgMHhmMCwgMHgwNSwgMHg4NiwgMHg5MH0gfSwKK3sgMHgxNTkyLAkxNiwJezB4N2YsIDB4ZTUsIDB4ZTUsIDB4NDAsIDB4ZmQsIDB4MDMsIDB4MDMsIDB4MDMsIDB4ZmUsIDB4ZjAsIDB4ZjAsIDB4ZjAsIDB4ZjAsIDB4ZjAsIDB4ZjAsIDB4ZjB9IH0sCit7IDB4MTVhMiwJMTYsCXsweGYwLCAweGRlLCAweGY2LCAweDkwLCAweDdmLCAweGUyLCAweGUwLCAweDU0LCAweGJmLCAweGYwLCAweDkwLCAweDIwLCAweDU4LCAweDc0LCAweDAwLCAweGYwfSB9LAoreyAweDE1YjIsCTE2LAl7MHg5MCwgMHg3ZiwgMHhiOSwgMHhlZCwgMHhmMCwgMHg5MCwgMHgyMCwgMHgwOSwgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHgwMiwgMHgxMywgMHg0MywgMHg3Zn0gfSwKK3sgMHgxNWMyLAkxNiwJezB4NDAsIDB4OTAsIDB4N2UsIDB4MDAsIDB4MDUsIDB4ODYsIDB4OTAsIDB4MjAsIDB4MDgsIDB4ZTUsIDB4ODQsIDB4ZmUsIDB4MjQsIDB4MDUsIDB4ZmQsIDB4OGR9IH0sCit7IDB4MTVkMiwJMTYsCXsweDg0LCAweGUwLCAweDhlLCAweDg0LCAweDMwLCAweGUwLCAweDA5LCAweGUwLCAweDA1LCAweDg2LCAweGYwLCAweGEzLCAweDA1LCAweDg2LCAweGRmLCAweGVmfSB9LAoreyAweDE1ZTIsCTE2LAl7MHgwNSwgMHg4NiwgMHhjMywgMHg3NCwgMHg0MCwgMHg5ZiwgMHg5MCwgMHg3ZiwgMHhiOSwgMHhmMCwgMHgwNSwgMHg4NiwgMHhhMywgMHhlMCwgMHg1NCwgMHhmZX0gfSwKK3sgMHgxNWYyLAkxNiwJezB4ZjAsIDB4MDIsIDB4MTMsIDB4NDMsIDB4NTMsIDB4MmUsIDB4ZmEsIDB4ZTUsIDB4MjQsIDB4NjAsIDB4MDgsIDB4NzUsIDB4MjQsIDB4MDAsIDB4ZDIsIDB4ZTd9IH0sCit7IDB4MTYwMiwJMTYsCXsweGZlLCAweDgwLCAweDBhLCAweDkwLCAweDdmLCAweGM5LCAweGUwLCAweGZlLCAweDcwLCAweDAzLCAweDAyLCAweDE2LCAweDkwLCAweDkwLCAweDIwLCAweDUwfSB9LAoreyAweDE2MTIsCTE2LAl7MHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHgyMCwgMHg1OCwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlMiwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMH0gfSwKK3sgMHgxNjIyLAkxNiwJezB4OTAsIDB4N2YsIDB4ZTMsIDB4MDUsIDB4ODYsIDB4OTAsIDB4N2QsIDB4YzAsIDB4MDUsIDB4ODYsIDB4ZTUsIDB4ODUsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4ODR9IH0sCit7IDB4MTYzMiwJMTYsCXsweGYwLCAweDA1LCAweDg2LCAweDkwLCAweDdmLCAweGU1LCAweGVlLCAweDMwLCAweGU3LCAweDA4LCAweDA1LCAweDg2LCAweGUwLCAweDI0LCAweDM4LCAweGYwfSB9LAoreyAweDE2NDIsCTE2LAl7MHgwNSwgMHg4NiwgMHhlZSwgMHg1NCwgMHg3ZiwgMHhmZSwgMHg1NCwgMHgwNywgMHhmYiwgMHhlZSwgMHg1NCwgMHg3OCwgMHg2MCwgMHgzMCwgMHgwMywgMHgwM30gfSwKK3sgMHgxNjUyLAkxNiwJezB4MDMsIDB4MzAsIDB4ZTMsIDB4MDQsIDB4NzQsIDB4MDcsIDB4N2IsIDB4MDgsIDB4ZmQsIDB4ZmMsIDB4ZTAsIDB4ZTAsIDB4ZTAsIDB4ZTAsIDB4ZTAsIDB4ZTB9IH0sCit7IDB4MTY2MiwJMTYsCXsweGUwLCAweGUwLCAweGRkLCAweGY2LCAweGViLCAweGZlLCAweDYwLCAweDE5LCAweGVjLCAweDY0LCAweDA3LCAweDcwLCAweDExLCAweDhiLCAweDI0LCAweDkwfSB9LAoreyAweDE2NzIsCTE2LAl7MHg3ZiwgMHhlMiwgMHhlMCwgMHg1NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHgyMCwgMHg1OCwgMHg3NCwgMHgwMCwgMHhmMCwgMHg4MCwgMHgxYiwgMHhlMCwgMHhkZX0gfSwKK3sgMHgxNjgyLAkxNCwJezB4ZmQsIDB4OTAsIDB4N2YsIDB4ZTIsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4NTgsIDB4NzQsIDB4MDAsIDB4ZjB9IH0sCit7IDB4MTY5MCwJMTYsCXsweDkwLCAweDIwLCAweDA5LCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweDkwLCAweDdmLCAweGM5LCAweGYwLCAweDAyLCAweDEzLCAweDQzLCAweDkwLCAweDIwfSB9LAoreyAweDE2YTAsCTE2LAl7MHgxMiwgMHhlMCwgMHg1NCwgMHgzZiwgMHgyMCwgMHhlMiwgMHgzYSwgMHgyMCwgMHhlMSwgMHgwYiwgMHgyMCwgMHhlNCwgMHgwYiwgMHgyMCwgMHhlNSwgMHgxNH0gfSwKK3sgMHgxNmIwLAkxNiwJezB4NjAsIDB4MDksIDB4MDIsIDB4MTMsIDB4NDMsIDB4MDIsIDB4MTcsIDB4ODcsIDB4MDIsIDB4MTMsIDB4NDMsIDB4NDMsIDB4ODIsIDB4MDQsIDB4ZTAsIDB4ZjV9IH0sCit7IDB4MTZjMCwJMTYsCXsweDNjLCAweDAyLCAweDEzLCAweDQzLCAweDQzLCAweDgyLCAweDA0LCAweGUwLCAweDQzLCAweDJmLCAweDAxLCAweDAyLCAweDEzLCAweDQzLCAweDUzLCAweDgyfSB9LAoreyAweDE2ZDAsCTE2LAl7MHhmOCwgMHg0MywgMHg4MiwgMHgwNSwgMHhlMCwgMHg0MiwgMHgzOCwgMHg1MywgMHg4MiwgMHhmYiwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHgwMiwgMHgxM30gfSwKK3sgMHgxNmUwLAkxNiwJezB4NDMsIDB4MzAsIDB4ZTEsIDB4MDIsIDB4ODAsIDB4ZTgsIDB4ZjUsIDB4ODUsIDB4ZTUsIDB4MzIsIDB4MzAsIDB4ZTIsIDB4MGEsIDB4NTMsIDB4ODIsIDB4Zjh9IH0sCit7IDB4MTZmMCwJMTYsCXsweDQzLCAweDgyLCAweDA0LCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweGU1LCAweDg1LCAweDIwLCAweGUzLCAweDU2LCAweDkwLCAweDIwLCAweDUwLCAweDc0fSB9LAoreyAweDE3MDAsCTE2LAl7MHgwMiwgMHhmMCwgMHg5MCwgMHgyMCwgMHg1OCwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlMiwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg5MH0gfSwKK3sgMHgxNzEwLAkxNiwJezB4N2YsIDB4ZTMsIDB4MDUsIDB4ODYsIDB4OTAsIDB4N2QsIDB4ODAsIDB4MDUsIDB4ODYsIDB4ZTUsIDB4ODUsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4ODQsIDB4ZjB9IH0sCit7IDB4MTcyMCwJMTYsCXsweDA1LCAweDg2LCAweDkwLCAweDdmLCAweGU1LCAweGU1LCAweDQxLCAweGZkLCAweDAzLCAweDAzLCAweDAzLCAweGZlLCAweGYwLCAweGYwLCAweGYwLCAweGYwfSB9LAoreyAweDE3MzAsCTE2LAl7MHhmMCwgMHhmMCwgMHhmMCwgMHhmMCwgMHhkZSwgMHhmNiwgMHg5MCwgMHg3ZiwgMHhlMiwgMHhlMCwgMHg1NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHgyMCwgMHg1OH0gfSwKK3sgMHgxNzQwLAkxNiwJezB4NzQsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YmIsIDB4ZWQsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4MTEsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4MDJ9IH0sCit7IDB4MTc1MCwJMTYsCXsweDEzLCAweDQzLCAweDdmLCAweDQwLCAweDkwLCAweDdkLCAweDgwLCAweDA1LCAweDg2LCAweDkwLCAweDIwLCAweDEwLCAweGU1LCAweDg0LCAweGZlLCAweDI0fSB9LAoreyAweDE3NjAsCTE2LAl7MHgwNSwgMHhmZCwgMHg4ZCwgMHg4NCwgMHhlMCwgMHg4ZSwgMHg4NCwgMHgzMCwgMHhlMCwgMHgwOSwgMHhlMCwgMHgwNSwgMHg4NiwgMHhmMCwgMHhhMywgMHgwNX0gfSwKK3sgMHgxNzcwLAkxNiwJezB4ODYsIDB4ZGYsIDB4ZWYsIDB4MDUsIDB4ODYsIDB4YzMsIDB4NzQsIDB4NDAsIDB4OWYsIDB4OTAsIDB4N2YsIDB4YmIsIDB4ZjAsIDB4MDUsIDB4ODYsIDB4YTN9IH0sCit7IDB4MTc4MCwJMTYsCXsweGUwLCAweDU0LCAweGZlLCAweGYwLCAweDAyLCAweDEzLCAweDQzLCAweDUzLCAweDJmLCAweGZhLCAweGU1LCAweDI1LCAweDYwLCAweDA4LCAweDc1LCAweDI1fSB9LAoreyAweDE3OTAsCTE2LAl7MHgwMCwgMHhkMiwgMHhlNywgMHhmZSwgMHg4MCwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhjYiwgMHhlMCwgMHhmZSwgMHg3MCwgMHgwMywgMHgwMiwgMHgxOCwgMHgyMX0gfSwKK3sgMHgxN2EwLAkxNiwJezB4OTAsIDB4MjAsIDB4NTAsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4NTgsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZTIsIDB4ZTB9IH0sCit7IDB4MTdiMCwJMTYsCXsweDQ0LCAweDQwLCAweGYwLCAweDkwLCAweDdmLCAweGUzLCAweDA1LCAweDg2LCAweDkwLCAweDdkLCAweDQwLCAweDA1LCAweDg2LCAweGU1LCAweDg1LCAweGYwfSB9LAoreyAweDE3YzAsCTE2LAl7MHhhMywgMHhlNSwgMHg4NCwgMHhmMCwgMHgwNSwgMHg4NiwgMHg5MCwgMHg3ZiwgMHhlNSwgMHhlZSwgMHgzMCwgMHhlNywgMHgwOCwgMHgwNSwgMHg4NiwgMHhlMH0gfSwKK3sgMHgxN2QwLAkxNiwJezB4MjQsIDB4MzgsIDB4ZjAsIDB4MDUsIDB4ODYsIDB4ZWUsIDB4NTQsIDB4N2YsIDB4ZmUsIDB4NTQsIDB4MDcsIDB4ZmIsIDB4ZWUsIDB4NTQsIDB4NzgsIDB4NjB9IH0sCit7IDB4MTdlMCwJMTYsCXsweDMwLCAweDAzLCAweDAzLCAweDAzLCAweDMwLCAweGUzLCAweDA0LCAweDc0LCAweDA3LCAweDdiLCAweDA4LCAweGZkLCAweGZjLCAweGUwLCAweGUwLCAweGUwfSB9LAoreyAweDE3ZjAsCTE2LAl7MHhlMCwgMHhlMCwgMHhlMCwgMHhlMCwgMHhlMCwgMHhkZCwgMHhmNiwgMHhlYiwgMHhmZSwgMHg2MCwgMHgxOSwgMHhlYywgMHg2NCwgMHgwNywgMHg3MCwgMHgxMX0gfSwKK3sgMHgxODAwLAkxNiwJezB4OGIsIDB4MjUsIDB4OTAsIDB4N2YsIDB4ZTIsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4NTgsIDB4NzQsIDB4MDAsIDB4ZjAsIDB4ODB9IH0sCit7IDB4MTgxMCwJMTYsCXsweDFiLCAweGUwLCAweGRlLCAweGZkLCAweDkwLCAweDdmLCAweGUyLCAweGUwLCAweDU0LCAweGJmLCAweGYwLCAweDkwLCAweDIwLCAweDU4LCAweDc0LCAweDAwfSB9LAoreyAweDE4MjAsCTE2LAl7MHhmMCwgMHg5MCwgMHgyMCwgMHgxMSwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjYiwgMHhmMCwgMHgwMiwgMHgxMywgMHg0MywgMHg5MH0gfSwKK3sgMHgxODMwLAkxNiwJezB4MjAsIDB4MWEsIDB4ZTAsIDB4NTQsIDB4M2YsIDB4MjAsIDB4ZTIsIDB4M2EsIDB4MjAsIDB4ZTEsIDB4MGIsIDB4MjAsIDB4ZTQsIDB4MGIsIDB4MjAsIDB4ZTV9IH0sCit7IDB4MTg0MCwJMTYsCXsweDE0LCAweDYwLCAweDA5LCAweDAyLCAweDEzLCAweDQzLCAweDAyLCAweDE5LCAweDE4LCAweDAyLCAweDEzLCAweDQzLCAweDQzLCAweDgyLCAweDA0LCAweGUwfSB9LAoreyAweDE4NTAsCTE2LAl7MHhmNSwgMHgzZCwgMHgwMiwgMHgxMywgMHg0MywgMHg0MywgMHg4MiwgMHgwNCwgMHhlMCwgMHg0MywgMHgzMCwgMHgwMSwgMHgwMiwgMHgxMywgMHg0MywgMHg1M30gfSwKK3sgMHgxODYwLAkxNiwJezB4ODIsIDB4ZjgsIDB4NDMsIDB4ODIsIDB4MDUsIDB4ZTAsIDB4NDIsIDB4MzksIDB4NTMsIDB4ODIsIDB4ZmIsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4MDJ9IH0sCit7IDB4MTg3MCwJMTYsCXsweDEzLCAweDQzLCAweDMwLCAweGUxLCAweDAyLCAweDgwLCAweGU4LCAweGY1LCAweDg1LCAweGU1LCAweDMyLCAweDMwLCAweGUzLCAweDBhLCAweDUzLCAweDgyfSB9LAoreyAweDE4ODAsCTE2LAl7MHhmOCwgMHg0MywgMHg4MiwgMHgwNCwgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHhlNSwgMHg4NSwgMHgyMCwgMHhlMywgMHg1NiwgMHg5MCwgMHgyMCwgMHg1MH0gfSwKK3sgMHgxODkwLAkxNiwJezB4NzQsIDB4MDMsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4NTgsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZTIsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjB9IH0sCit7IDB4MThhMCwJMTYsCXsweDkwLCAweDdmLCAweGUzLCAweDA1LCAweDg2LCAweDkwLCAweDdkLCAweDAwLCAweDA1LCAweDg2LCAweGU1LCAweDg1LCAweGYwLCAweGEzLCAweGU1LCAweDg0fSB9LAoreyAweDE4YjAsCTE2LAl7MHhmMCwgMHgwNSwgMHg4NiwgMHg5MCwgMHg3ZiwgMHhlNSwgMHhlNSwgMHg0MiwgMHhmZCwgMHgwMywgMHgwMywgMHgwMywgMHhmZSwgMHhmMCwgMHhmMCwgMHhmMH0gfSwKK3sgMHgxOGMwLAkxNiwJezB4ZjAsIDB4ZjAsIDB4ZjAsIDB4ZjAsIDB4ZjAsIDB4ZGUsIDB4ZjYsIDB4OTAsIDB4N2YsIDB4ZTIsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4MjB9IH0sCit7IDB4MThkMCwJMTYsCXsweDU4LCAweDc0LCAweDAwLCAweGYwLCAweDkwLCAweDdmLCAweGJkLCAweGVkLCAweGYwLCAweDkwLCAweDIwLCAweDE5LCAweGUwLCAweDU0LCAweGZlLCAweGYwfSB9LAoreyAweDE4ZTAsCTE2LAl7MHgwMiwgMHgxMywgMHg0MywgMHg3ZiwgMHg0MCwgMHg5MCwgMHg3ZCwgMHgwMCwgMHgwNSwgMHg4NiwgMHg5MCwgMHgyMCwgMHgxOCwgMHhlNSwgMHg4NCwgMHhmZX0gfSwKK3sgMHgxOGYwLAkxNiwJezB4MjQsIDB4MDUsIDB4ZmQsIDB4OGQsIDB4ODQsIDB4ZTAsIDB4OGUsIDB4ODQsIDB4MzAsIDB4ZTAsIDB4MDksIDB4ZTAsIDB4MDUsIDB4ODYsIDB4ZjAsIDB4YTN9IH0sCit7IDB4MTkwMCwJMTYsCXsweDA1LCAweDg2LCAweGRmLCAweGVmLCAweDA1LCAweDg2LCAweGMzLCAweDc0LCAweDQwLCAweDlmLCAweDkwLCAweDdmLCAweGJkLCAweGYwLCAweDA1LCAweDg2fSB9LAoreyAweDE5MTAsCTE2LAl7MHhhMywgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHgwMiwgMHgxMywgMHg0MywgMHg1MywgMHgzMCwgMHhmYSwgMHhlNSwgMHgyNiwgMHg2MCwgMHgwOCwgMHg3NX0gfSwKK3sgMHgxOTIwLAkxNiwJezB4MjYsIDB4MDAsIDB4ZDIsIDB4ZTcsIDB4ZmUsIDB4ODAsIDB4MGEsIDB4OTAsIDB4N2YsIDB4Y2QsIDB4ZTAsIDB4ZmUsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTl9IH0sCit7IDB4MTkzMCwJMTYsCXsweGIyLCAweDkwLCAweDIwLCAweDUwLCAweDc0LCAweDAzLCAweGYwLCAweDkwLCAweDIwLCAweDU4LCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGUyfSB9LAoreyAweDE5NDAsCTE2LAl7MHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlMywgMHgwNSwgMHg4NiwgMHg5MCwgMHg3YywgMHhjMCwgMHgwNSwgMHg4NiwgMHhlNSwgMHg4NX0gfSwKK3sgMHgxOTUwLAkxNiwJezB4ZjAsIDB4YTMsIDB4ZTUsIDB4ODQsIDB4ZjAsIDB4MDUsIDB4ODYsIDB4OTAsIDB4N2YsIDB4ZTUsIDB4ZWUsIDB4MzAsIDB4ZTcsIDB4MDgsIDB4MDUsIDB4ODZ9IH0sCit7IDB4MTk2MCwJMTYsCXsweGUwLCAweDI0LCAweDM4LCAweGYwLCAweDA1LCAweDg2LCAweGVlLCAweDU0LCAweDdmLCAweGZlLCAweDU0LCAweDA3LCAweGZiLCAweGVlLCAweDU0LCAweDc4fSB9LAoreyAweDE5NzAsCTE2LAl7MHg2MCwgMHgzMCwgMHgwMywgMHgwMywgMHgwMywgMHgzMCwgMHhlMywgMHgwNCwgMHg3NCwgMHgwNywgMHg3YiwgMHgwOCwgMHhmZCwgMHhmYywgMHhlMCwgMHhlMH0gfSwKK3sgMHgxOTgwLAkxNiwJezB4ZTAsIDB4ZTAsIDB4ZTAsIDB4ZTAsIDB4ZTAsIDB4ZTAsIDB4ZGQsIDB4ZjYsIDB4ZWIsIDB4ZmUsIDB4NjAsIDB4MTksIDB4ZWMsIDB4NjQsIDB4MDcsIDB4NzB9IH0sCit7IDB4MTk5MCwJMTYsCXsweDExLCAweDhiLCAweDI2LCAweDkwLCAweDdmLCAweGUyLCAweGUwLCAweDU0LCAweGJmLCAweGYwLCAweDkwLCAweDIwLCAweDU4LCAweDc0LCAweDAwLCAweGYwfSB9LAoreyAweDE5YTAsCTE2LAl7MHg4MCwgMHgxYiwgMHhlMCwgMHhkZSwgMHhmZCwgMHg5MCwgMHg3ZiwgMHhlMiwgMHhlMCwgMHg1NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHgyMCwgMHg1OCwgMHg3NH0gfSwKK3sgMHgxOWIwLAkxNiwJezB4MDAsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4MTksIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4Y2QsIDB4ZjAsIDB4MDIsIDB4MTMsIDB4NDN9IH0sCit7IDB4MTljMCwJMSwJezB4MzJ9IH0sCit7IDB4MTljMSwJNCwJezB4YWQsIDB4MDcsIDB4YWMsIDB4MDZ9IH0sCit7IDB4MTljNSwJMTYsCXsweDc5LCAweDA2LCAweGVkLCAweDI0LCAweDA0LCAweGY1LCAweDgyLCAweGU0LCAweDNjLCAweGY1LCAweDgzLCAweGUwLCAweGZhLCAweGEzLCAweGUwLCAweGZifSB9LAoreyAweDE5ZDUsCTE2LAl7MHg0YSwgMHg3MCwgMHgwMywgMHgwMiwgMHgxYiwgMHgwOSwgMHhlOSwgMHhiNCwgMHgwNywgMHgwMCwgMHg0MCwgMHgwMywgMHgwMiwgMHgxYSwgMHhkYiwgMHg5MH0gfSwKK3sgMHgxOWU1LAkxNiwJezB4MTksIDB4ZWIsIDB4ZjgsIDB4MjgsIDB4MjgsIDB4NzMsIDB4MDIsIDB4MWEsIDB4YjksIDB4MDIsIDB4MWEsIDB4NzEsIDB4MDIsIDB4MWEsIDB4NWEsIDB4MDJ9IH0sCit7IDB4MTlmNSwJMTYsCXsweDFhLCAweDQwLCAweDAyLCAweDFhLCAweDJmLCAweDAyLCAweDFhLCAweDFhLCAweDAyLCAweDFhLCAweDAwLCAweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0fSB9LAoreyAweDFhMDUsCTE2LAl7MHg4MCwgMHhmMCwgMHg4ZCwgMHg4MiwgMHg4YywgMHg4MywgMHhhMywgMHhlMCwgMHhmZiwgMHgyNSwgMHhlMCwgMHg0NCwgMHhhMCwgMHg5MCwgMHg3ZiwgMHhhNn0gfSwKK3sgMHgxYTE1LAkxNiwJezB4ZjAsIDB4MTksIDB4MDIsIDB4MWEsIDB4ZGIsIDB4MTksIDB4OGQsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZTAsIDB4YzMsIDB4OTQsIDB4MjAsIDB4NDAsIDB4MGF9IH0sCit7IDB4MWEyNSwJMTYsCXsweGEzLCAweGEzLCAweGUwLCAweDkwLCAweDdmLCAweGE2LCAweGYwLCAweDAyLCAweDFhLCAweGRiLCAweDhkLCAweDgyLCAweDhjLCAweDgzLCAweGEzLCAweGEzfSB9LAoreyAweDFhMzUsCTE2LAl7MHhlMCwgMHhhMywgMHhlMCwgMHg5MCwgMHg3ZiwgMHhhNiwgMHhmMCwgMHgxOSwgMHgwMiwgMHgxYSwgMHhkYiwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NH0gfSwKK3sgMHgxYTQ1LAkxNiwJezB4ODAsIDB4ZjAsIDB4OGQsIDB4ODIsIDB4OGMsIDB4ODMsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4MjUsIDB4ZTAsIDB4NDQsIDB4YTEsIDB4OTAsIDB4N2YsIDB4YTZ9IH0sCit7IDB4MWE1NSwJMTYsCXsweGYwLCAweDE5LCAweDAyLCAweDFhLCAweGRiLCAweGViLCAweDY0LCAweDAxLCAweDRhLCAweDcwLCAweDA4LCAweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0fSB9LAoreyAweDFhNjUsCTE2LAl7MHgyMCwgMHhmMCwgMHgxOSwgMHg5MCwgMHg3ZiwgMHhhNiwgMHhlMCwgMHhmNSwgMHg1OSwgMHgxOSwgMHg4MCwgMHg2YSwgMHhlZCwgMHgyNCwgMHgwNCwgMHhmNX0gfSwKK3sgMHgxYTc1LAkxNiwJezB4ODIsIDB4ZTQsIDB4M2MsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmUsIDB4YTMsIDB4ZTAsIDB4NjQsIDB4MDIsIDB4NGUsIDB4NzAsIDB4MDgsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MWE4NSwJMTYsCXsweGE1LCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAweDE5LCAweDkwLCAweDdmLCAweGE2LCAweGUwLCAweGZmLCAweGVkLCAweDI0LCAweDA2LCAweGY1LCAweDgyfSB9LAoreyAweDFhOTUsCTE2LAl7MHhlNCwgMHgzYywgMHhmNSwgMHg4MywgMHhlNCwgMHg3NSwgMHhmMCwgMHgwMSwgMHgxMiwgMHhhMiwgMHg5NywgMHg4NSwgMHhmMCwgMHg4MiwgMHhmNSwgMHg4M30gfSwKK3sgMHgxYWE1LAkxNiwJezB4ZWYsIDB4ZjAsIDB4ZWQsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4M2MsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4ZmYsIDB4ZjUsIDB4ZjAsIDB4MTJ9IH0sCit7IDB4MWFiNSwJMTYsCXsweGEyLCAweDgxLCAweDgwLCAweDIyLCAweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDkwLCAweDdmLCAweGE2LCAweGUwLCAweGZmfSB9LAoreyAweDFhYzUsCTE2LAl7MHhlZCwgMHgyNCwgMHgwNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzYywgMHhmNSwgMHg4MywgMHhlMCwgMHhmYSwgMHhhMywgMHhlMCwgMHhmNSwgMHg4MiwgMHg4YX0gfSwKK3sgMHgxYWQ1LAkxNiwJezB4ODMsIDB4ZWYsIDB4ZjAsIDB4N2YsIDB4MDgsIDB4MjIsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4ZjUsIDB4NTksIDB4MzAsIDB4ZTAsIDB4ZjcsIDB4MzB9IH0sCit7IDB4MWFlNSwJMTYsCXsweGUyLCAweDA3LCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDdmLCAweDA2LCAweDIyLCAweGU5LCAweGQzLCAweDk0LCAweDAyLCAweDUwLCAweDAzLCAweDAyfSB9LAoreyAweDFhZjUsCTE2LAl7MHgxOSwgMHhjNywgMHhlNSwgMHg1OSwgMHgzMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgxOSwgMHhjNywgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NCwgMHg0MH0gfSwKK3sgMHgxYjA1LAk2LAl7MHhmMCwgMHg3ZiwgMHgwNywgMHgyMiwgMHg3ZiwgMHgwOH0gfSwKK3sgMHgxYjBiLAkxLAl7MHgyMn0gfSwKK3sgMHgxYjBjLAkxNiwJezB4ZTUsIDB4MzMsIDB4YzMsIDB4OTQsIDB4MDEsIDB4NTAsIDB4MWMsIDB4N2YsIDB4MDUsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDksIDB4YWUsIDB4N2YsIDB4MDJ9IH0sCit7IDB4MWIxYywJMTYsCXsweDdkLCAweGZmLCAweDEyLCAweDgyLCAweGVhLCAweDdmLCAweDA1LCAweDdlLCAweDAwLCAweDEyLCAweDA5LCAweGFlLCAweDdmLCAweDAzLCAweDdkLCAweGZmfSB9LAoreyAweDFiMmMsCTQsCXsweDEyLCAweDgyLCAweGVhLCAweDIyfSB9LAoreyAweDgwMDAsCTE2LAl7MHg3YiwgMHhmZiwgMHg3YSwgMHgxMiwgMHg3OSwgMHgxYiwgMHg5MCwgMHgwMCwgMHgwNCwgMHgxMiwgMHhhMiwgMHg1NCwgMHhmZCwgMHg4YiwgMHg1MCwgMHg3NX0gfSwKK3sgMHg4MDEwLAkxNiwJezB4NTEsIDB4MTIsIDB4NzUsIDB4NTIsIDB4MjQsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4ZTEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZTAsIDB4ZjAsIDB4ZjUsIDB4NGV9IH0sCit7IDB4ODAyMCwJMTYsCXsweGY1LCAweDRmLCAweDkwLCAweDAyLCAweGFlLCAweGYwLCAweDkwLCAweDdmLCAweGRmLCAweGYwLCAweDkwLCAweDdmLCAweGRlLCAweGYwLCAweDkwLCAweDdmfSB9LAoreyAweDgwMzAsCTE2LAl7MHhhOSwgMHg3NCwgMHhmZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYSwgMHhmMCwgMHhlNCwgMHhmYywgMHhlYywgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNX0gfSwKK3sgMHg4MDQwLAkxNiwJezB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4MGMsIDB4YmMsIDB4MTAsIDB4ZWUsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4ZGR9IH0sCit7IDB4ODA1MCwJMTYsCXsweGYwLCAweGFmLCAweDA1LCAweDFkLCAweGVmLCAweDcwLCAweDAzLCAweDAyLCAweDgxLCAweGM2LCAweGFiLCAweDUwLCAweGFhLCAweDUxLCAweGE5LCAweDUyfSB9LAoreyAweDgwNjAsCTE2LAl7MHg5MCwgMHgwMCwgMHgwMSwgMHgxMiwgMHhhMiwgMHg1NCwgMHg2NCwgMHgwNSwgMHg2MCwgMHgwMywgMHgwMiwgMHg4MSwgMHhiNSwgMHg5MCwgMHgwMCwgMHgwM30gfSwKK3sgMHg4MDcwLAkxNiwJezB4MTIsIDB4YTIsIDB4NTQsIDB4NjQsIDB4MDEsIDB4NjAsIDB4MDMsIDB4MDIsIDB4ODEsIDB4M2MsIDB4OTAsIDB4MDAsIDB4MDIsIDB4MTIsIDB4YTIsIDB4NTR9IH0sCit7IDB4ODA4MCwJMTYsCXsweGZmLCAweDU0LCAweDdmLCAweGZjLCAweGQzLCAweDk0LCAweDA3LCAweDUwLCAweDAzLCAweDAyLCAweDgxLCAweDE2LCAweGVjLCAweGMzLCAweDk0LCAweDEwfSB9LAoreyAweDgwOTAsCTE2LAl7MHg0MCwgMHgwMywgMHgwMiwgMHg4MSwgMHgxNiwgMHhlZiwgMHgzMCwgMHhlNywgMHg0MiwgMHhlNSwgMHg0ZiwgMHhhZSwgMHg0ZSwgMHg3OCwgMHgwMiwgMHhjZX0gfSwKK3sgMHg4MGEwLAkxNiwJezB4YzMsIDB4MTMsIDB4Y2UsIDB4MTMsIDB4ZDgsIDB4ZjksIDB4ZmYsIDB4NzQsIDB4ZjAsIDB4MmMsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjV9IH0sCit7IDB4ODBiMCwJMTYsCXsweDgzLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweGUwLCAweGUwLCAweGZmLCAweGVjLCAweDI0LCAweGY4LCAweGZlLCAweDc0LCAweDAxLCAweGE4LCAweDA2fSB9LAoreyAweDgwYzAsCTE2LAl7MHgwOCwgMHg4MCwgMHgwMiwgMHhjMywgMHgzMywgMHhkOCwgMHhmYywgMHg0ZiwgMHg5MCwgMHg3ZiwgMHhlMCwgMHhmMCwgMHg5MCwgMHgwMiwgMHhhZSwgMHhlMH0gfSwKK3sgMHg4MGQwLAkxNiwJezB4MDQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGQsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ODAsIDB4M2UsIDB4ZTUsIDB4NGYsIDB4YWUsIDB4NGUsIDB4Nzh9IH0sCit7IDB4ODBlMCwJMTYsCXsweDAyLCAweGNlLCAweGMzLCAweDEzLCAweGNlLCAweDEzLCAweGQ4LCAweGY5LCAweGZmLCAweDc0LCAweGU4LCAweDJjLCAweGY1LCAweDgyLCAweGU0LCAweDM0fSB9LAoreyAweDgwZjAsCTE2LAl7MHg3ZiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlMSwgMHhlMCwgMHhmZiwgMHhlYywgMHgyNCwgMHhmOCwgMHhmZSwgMHg3NCwgMHgwMX0gfSwKK3sgMHg4MTAwLAkxNiwJezB4YTgsIDB4MDYsIDB4MDgsIDB4ODAsIDB4MDIsIDB4YzMsIDB4MzMsIDB4ZDgsIDB4ZmMsIDB4NGYsIDB4OTAsIDB4N2YsIDB4ZTEsIDB4ZjAsIDB4OTAsIDB4MDJ9IH0sCit7IDB4ODExMCwJMTYsCXsweGFlLCAweGUwLCAweDA0LCAweGYwLCAweDgwLCAweDAzLCAweDdmLCAweGZmLCAweDIyLCAweDkwLCAweDAwLCAweDA0LCAweDEyLCAweGEyLCAweDU0LCAweDI1fSB9LAoreyAweDgxMjAsCTE2LAl7MHg0ZiwgMHhmNSwgMHg0ZiwgMHhlNCwgMHgzNSwgMHg0ZSwgMHhmNSwgMHg0ZSwgMHg5MCwgMHgwMCwgMHgwNSwgMHgxMiwgMHhhMiwgMHg1NCwgMHhmZSwgMHhlNH0gfSwKK3sgMHg4MTMwLAkxNiwJezB4MjUsIDB4NGYsIDB4ZjUsIDB4NGYsIDB4ZWUsIDB4MzUsIDB4NGUsIDB4ZjUsIDB4NGUsIDB4MDIsIDB4ODEsIDB4YjgsIDB4YWIsIDB4NTAsIDB4YWEsIDB4NTF9IH0sCit7IDB4ODE0MCwJMTYsCXsweGE5LCAweDUyLCAweDkwLCAweDAwLCAweDAzLCAweDEyLCAweGEyLCAweDU0LCAweGZmLCAweDY0LCAweDAyLCAweDYwLCAweDA1LCAweGVmLCAweDY0LCAweDAzfSB9LAoreyAweDgxNTAsCTE2LAl7MHg3MCwgMHg2MCwgMHg5MCwgMHgwMCwgMHgwMiwgMHgxMiwgMHhhMiwgMHg1NCwgMHhmZiwgMHg1NCwgMHg3ZiwgMHhmYywgMHhkMywgMHg5NCwgMHgwNywgMHg1MH0gfSwKK3sgMHg4MTYwLAkxNiwJezB4NGUsIDB4ZWYsIDB4MzAsIDB4ZTcsIDB4MWUsIDB4OTAsIDB4N2YsIDB4ZGUsIDB4ZTAsIDB4ZmYsIDB4NzQsIDB4MDEsIDB4YTgsIDB4MDQsIDB4MDgsIDB4ODB9IH0sCit7IDB4ODE3MCwJMTYsCXsweDAyLCAweGMzLCAweDMzLCAweGQ4LCAweGZjLCAweGZlLCAweDRmLCAweDkwLCAweDdmLCAweGRlLCAweGYwLCAweDkwLCAweDdmLCAweGFjLCAweGUwLCAweDRlfSB9LAoreyAweDgxODAsCTE2LAl7MHhmMCwgMHg4MCwgMHgzNSwgMHg5MCwgMHg3ZiwgMHhkZiwgMHhlMCwgMHhmZiwgMHg3NCwgMHgwMSwgMHhhOCwgMHgwNCwgMHgwOCwgMHg4MCwgMHgwMiwgMHhjM30gfSwKK3sgMHg4MTkwLAkxNiwJezB4MzMsIDB4ZDgsIDB4ZmMsIDB4ZmUsIDB4NGYsIDB4OTAsIDB4N2YsIDB4ZGYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWQsIDB4ZTAsIDB4NGUsIDB4ZjAsIDB4ZWN9IH0sCit7IDB4ODFhMCwJMTYsCXsweDI1LCAweGUwLCAweDI0LCAweGM1LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGVjLCAweGYwLCAweDgwLCAweDA5LCAweDdmfSB9LAoreyAweDgxYjAsCTE2LAl7MHhmZiwgMHgyMiwgMHg3ZiwgMHhmZiwgMHgyMiwgMHg3ZiwgMHhmZiwgMHgyMiwgMHg3NCwgMHgwNywgMHgyNSwgMHg1MiwgMHhmNSwgMHg1MiwgMHhlNCwgMHgzNX0gfSwKK3sgMHg4MWMwLAkxNiwJezB4NTEsIDB4ZjUsIDB4NTEsIDB4MDIsIDB4ODAsIDB4NTEsIDB4MjAsIDB4MDMsIDB4MGQsIDB4OTAsIDB4MDIsIDB4YWUsIDB4ZTAsIDB4NjAsIDB4MDcsIDB4OTB9IH0sCit7IDB4ODFkMCwJOCwJezB4N2YsIDB4YWUsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4N2YsIDB4MDB9IH0sCit7IDB4ODFkOCwJMSwJezB4MjJ9IH0sCit7IDB4ODFkOSwJNCwJezB4OGUsIDB4NTksIDB4OGYsIDB4NWF9IH0sCit7IDB4ODFkZCwJMTYsCXsweDc1LCAweDViLCAweDAzLCAweGU1LCAweDVhLCAweDI0LCAweDA0LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDU5LCAweGY1LCAweDgzLCAweGUwLCAweGZlfSB9LAoreyAweDgxZWQsCTE2LAl7MHhhMywgMHhlMCwgMHg0ZSwgMHg3MCwgMHgwMywgMHgwMiwgMHg4MiwgMHhlNywgMHhlNSwgMHg1YiwgMHg2MCwgMHg0ZSwgMHgxNCwgMHg2MCwgMHgzOCwgMHgxNH0gfSwKK3sgMHg4MWZkLAkxNiwJezB4NjAsIDB4MjAsIDB4MTQsIDB4NjAsIDB4MDMsIDB4MDIsIDB4ODIsIDB4OGIsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ODV9IH0sCit7IDB4ODIwZCwJMTYsCXsweDVhLCAweDgyLCAweDg1LCAweDU5LCAweDgzLCAweGEzLCAweGUwLCAweGZmLCAweDI1LCAweGUwLCAweDQ0LCAweGEwLCAweDkwLCAweDdmLCAweGE2LCAweGYwfSB9LAoreyAweDgyMWQsCTE2LAl7MHg4MCwgMHg2YywgMHg4NSwgMHg1YSwgMHg4MiwgMHg4NSwgMHg1OSwgMHg4MywgMHhlMCwgMHhjMywgMHg5NCwgMHgyMCwgMHg0MCwgMHgwOSwgMHhhMywgMHhhM30gfSwKK3sgMHg4MjJkLAkxNiwJezB4ZTAsIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZjAsIDB4ODAsIDB4NTcsIDB4MTUsIDB4NWIsIDB4ODUsIDB4NWEsIDB4ODIsIDB4ODUsIDB4NTksIDB4ODMsIDB4YTN9IH0sCit7IDB4ODIzZCwJMTYsCXsweGEzLCAweGUwLCAweGEzLCAweGUwLCAweDkwLCAweDdmLCAweGE2LCAweGYwLCAweDgwLCAweDQ0LCAweGU1LCAweDVhLCAweDI0LCAweDA2LCAweGY1LCAweDgyfSB9LAoreyAweDgyNGQsCTE2LAl7MHhlNCwgMHgzNSwgMHg1OSwgMHhmNSwgMHg4MywgMHhlNCwgMHg3NSwgMHhmMCwgMHgwMSwgMHgxMiwgMHhhMiwgMHg5NywgMHg4NSwgMHhmMCwgMHg4MiwgMHhmNX0gfSwKK3sgMHg4MjVkLAkxNiwJezB4ODMsIDB4ZTAsIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4ZTUsIDB4NWEsIDB4MjR9IH0sCit7IDB4ODI2ZCwJMTYsCXsweDA0LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDU5LCAweGY1LCAweDgzLCAweDc0LCAweGZmLCAweGY1LCAweGYwLCAweDEyLCAweGEyLCAweDgxLCAweDg1fSB9LAoreyAweDgyN2QsCTE2LAl7MHg1YSwgMHg4MiwgMHg4NSwgMHg1OSwgMHg4MywgMHhhMywgMHhhMywgMHhlNCwgMHg3NSwgMHhmMCwgMHgwMSwgMHgxMiwgMHhhMiwgMHg4MSwgMHg5MCwgMHg3Zn0gfSwKK3sgMHg4MjhkLAkxNiwJezB4YTUsIDB4ZTAsIDB4ZjUsIDB4NWMsIDB4MzAsIDB4ZTAsIDB4ZjcsIDB4MzAsIDB4ZTIsIDB4MDcsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4N2YsIDB4MDZ9IH0sCit7IDB4ODI5ZCwJMTYsCXsweDIyLCAweGU1LCAweDVjLCAweDIwLCAweGUxLCAweDBhLCAweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDdmLCAweDA3LCAweDIyfSB9LAoreyAweDgyYWQsCTE2LAl7MHhlNSwgMHg1YiwgMHg3MCwgMHgzMSwgMHg3ZiwgMHgwMSwgMHg3ZSwgMHgwMCwgMHgxMiwgMHgwOSwgMHhhZSwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NH0gfSwKK3sgMHg4MmJkLAkxNiwJezB4ODAsIDB4ZjAsIDB4ODUsIDB4NWEsIDB4ODIsIDB4ODUsIDB4NTksIDB4ODMsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4MjUsIDB4ZTAsIDB4NDQsIDB4YTAsIDB4OTB9IH0sCit7IDB4ODJjZCwJMTYsCXsweDdmLCAweGE2LCAweGYwLCAweDkwLCAweDdmLCAweGE1LCAweGUwLCAweGY1LCAweDVjLCAweDMwLCAweGUwLCAweGY3LCAweDMwLCAweGUxLCAweGQ1LCAweDc1fSB9LAoreyAweDgyZGQsCTEyLAl7MHg1YiwgMHgwMywgMHgwMiwgMHg4MSwgMHhlMCwgMHgxNSwgMHg1YiwgMHgwMiwgMHg4MSwgMHhlMCwgMHg3ZiwgMHgwOH0gfSwKK3sgMHg4MmU5LAkxLAl7MHgyMn0gfSwKK3sgMHg4MmVhLAkyLAl7MHhhZSwgMHgwN30gfSwKK3sgMHg4MmVjLAkxNiwJezB4N2MsIDB4MDIsIDB4ZWMsIDB4MTQsIDB4NjAsIDB4MTUsIDB4MTQsIDB4NzAsIDB4MWUsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjB9IH0sCit7IDB4ODJmYywJMTYsCXsweGVlLCAweDI1LCAweGUwLCAweDQ0LCAweDQwLCAweDkwLCAweDdmLCAweGE2LCAweGYwLCAweDgwLCAweDBjLCAweDkwLCAweDdmLCAweGE2LCAweGVkLCAweGYwfSB9LAoreyAweDgzMGMsCTE2LAl7MHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHhmYiwgMHgzMCwgMHhlMCwgMHhmOCwgMHhiY30gfSwKK3sgMHg4MzFjLAkxNiwJezB4MDIsIDB4MGEsIDB4MjAsIDB4ZTEsIDB4MDcsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4N2YsIDB4MDcsIDB4MjIsIDB4ZWIsIDB4MzAsIDB4ZTIsIDB4MGF9IH0sCit7IDB4ODMyYywJMTQsCXsweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDdmLCAweDA2LCAweDIyLCAweGRjLCAweGI2LCAweDdmLCAweDA4fSB9LAoreyAweDgzM2EsCTEsCXsweDIyfSB9LAoreyAweDgzM2IsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMiwgMHhhOSwgMHg5MCwgMHgwMywgMHgwMCwgMHg3NCwgMHgxOSwgMHhmMCwgMHhkMiwgMHhhOX0gfSwKK3sgMHg4MzRiLAkxNSwJezB4NTMsIDB4OTEsIDB4N2YsIDB4OTAsIDB4MDEsIDB4YzQsIDB4ZTQsIDB4ZjAsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9IH0sCit7IDB4ODM1YSwJMTYsCXsweGVmLCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAwLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDIwLCAweGFiLCAweDgyLCAweGZhLCAweGY1fSB9LAoreyAweDgzNmEsCTE2LAl7MHg4MywgMHhhMywgMHhlNCwgMHhmMCwgMHg4YiwgMHg4MiwgMHg4YSwgMHg4MywgMHhhMywgMHhhMywgMHhhMywgMHhlMCwgMHhmNSwgMHg2MSwgMHg3NCwgMHhiZn0gfSwKK3sgMHg4MzdhLAkxNiwJezB4ZjAsIDB4OGIsIDB4ODIsIDB4OGEsIDB4ODMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4MTAsIDB4ZjAsIDB4OGIsIDB4ODIsIDB4OGEsIDB4ODMsIDB4YTN9IH0sCit7IDB4ODM4YSwJMTYsCXsweGEzLCAweGEzLCAweGU0LCAweGYwLCAweDhiLCAweDgyLCAweDhhLCAweDgzLCAweGEzLCAweGYwLCAweGY5LCAweGVkLCAweDYwLCAweDFkLCAweDc0LCAweDAxfSB9LAoreyAweDgzOWEsCTE2LAl7MHg3ZSwgMHgwMCwgMHhhOCwgMHgwNywgMHgwOCwgMHg4MCwgMHgwNSwgMHhjMywgMHgzMywgMHhjZSwgMHgzMywgMHhjZSwgMHhkOCwgMHhmOSwgMHhmZiwgMHhlNH0gfSwKK3sgMHg4M2FhLAkxNiwJezB4ZWYsIDB4NTUsIDB4MzEsIDB4NjAsIDB4MDQsIDB4NzksIDB4MDksIDB4ODAsIDB4MDIsIDB4NzksIDB4MGQsIDB4OGIsIDB4ODIsIDB4OGEsIDB4ODMsIDB4YTN9IH0sCit7IDB4ODNiYSwJMTYsCXsweGEzLCAweGEzLCAweDc0LCAweGJmLCAweGYwLCAweDhiLCAweDgyLCAweDhhLCAweDgzLCAweGEzLCAweGEzLCAweGUwLCAweDU0LCAweGVmLCAweGYwLCAweDhifSB9LAoreyAweDgzY2EsCTE2LAl7MHg4MiwgMHg4YSwgMHg4MywgMHhhMywgMHhhMywgMHhhMywgMHhlNSwgMHg2MSwgMHhmMCwgMHhhZSwgMHgwMiwgMHhhZiwgMHgwMywgMHg4ZiwgMHg4MiwgMHg4ZX0gfSwKK3sgMHg4M2RhLAk0LAl7MHg4MywgMHhhMywgMHhlOSwgMHhmMH0gfSwKK3sgMHg4M2RlLAkxLAl7MHgyMn0gfSwKK3sgMHg4M2RmLAk0LAl7MHg4ZiwgMHg2MSwgMHg4ZCwgMHg2Mn0gfSwKK3sgMHg4M2UzLAkxNiwJezB4ZTQsIDB4ZjUsIDB4NjcsIDB4NzQsIDB4M2YsIDB4MmYsIDB4ZjgsIDB4NzYsIDB4MDgsIDB4N2YsIDB4ODAsIDB4N2UsIDB4MjUsIDB4N2QsIDB4MDAsIDB4N2N9IH0sCit7IDB4ODNmMywJMTYsCXsweDAwLCAweGFiLCAweDY2LCAweGFhLCAweDY1LCAweGE5LCAweDY0LCAweGE4LCAweDYzLCAweGQzLCAweDEyLCAweGEzLCAweGIzLCAweDQwLCAweDI2LCAweDdmfSB9LAoreyAweDg0MDMsCTE2LAl7MHgwMCwgMHg3ZSwgMHg5NiwgMHg3ZCwgMHgwMCwgMHg3YywgMHgwMCwgMHhhOCwgMHg2MywgMHhkMywgMHgxMiwgMHhhMywgMHhiMywgMHg1MCwgMHgwYywgMHg3NX0gfSwKK3sgMHg4NDEzLAkxNiwJezB4NjcsIDB4NDAsIDB4NzQsIDB4M2YsIDB4MjUsIDB4NjEsIDB4ZjgsIDB4NzYsIDB4MTAsIDB4ODAsIDB4MGEsIDB4NzUsIDB4NjcsIDB4ODAsIDB4NzQsIDB4M2Z9IH0sCit7IDB4ODQyMywJMTYsCXsweDI1LCAweDYxLCAweGY4LCAweDc2LCAweDM4LCAweGU1LCAweDY3LCAweDQ1LCAweDYyLCAweDQ0LCAweDAxLCAweGZmLCAweGU1LCAweDYxLCAweDc1LCAweGYwfSB9LAoreyAweDg0MzMsCTEzLAl7MHgwOCwgMHhhNCwgMHgyNCwgMHgwMiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgyMCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMH0gfSwKK3sgMHg4NDQwLAkxLAl7MHgyMn0gfSwKK3sgMHg4NDQxLAkxNiwJezB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4ZjUsIDB4NTcsIDB4YzMsIDB4OTQsIDB4MDQsIDB4NDAsIDB4MDMsIDB4N2YsIDB4ZmYsIDB4MjJ9IH0sCit7IDB4ODQ1MSwJMTYsCXsweGU1LCAweDU3LCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAwLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDIwLCAweGFmLCAweDgyLCAweGY1fSB9LAoreyAweDg0NjEsCTE2LAl7MHg1OCwgMHg4ZiwgMHg1OSwgMHhlNSwgMHg1NywgMHgyNSwgMHhlMCwgMHgyNCwgMHhjNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4M30gfSwKK3sgMHg4NDcxLAkxNiwJezB4ZTAsIDB4MjAsIDB4ZTEsIDB4MGYsIDB4ZTUsIDB4NTcsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YzcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjV9IH0sCit7IDB4ODQ4MSwJMTYsCXsweDgzLCAweGU0LCAweGYwLCAweDc0LCAweDIzLCAweDI1LCAweDU3LCAweGY4LCAweGU0LCAweGY2LCAweGU1LCAweDU5LCAweDI0LCAweDA0LCAweGY1LCAweDgyfSB9LAoreyAweDg0OTEsCTE2LAl7MHhlNCwgMHgzNSwgMHg1OCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwMywgMHhmMCwgMHhlNSwgMHg1NywgMHg3NSwgMHhmMCwgMHgwZCwgMHhhNCwgMHgyNH0gfSwKK3sgMHg4NGExLAkxNiwJezB4MDIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDMsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmMsIDB4YTMsIDB4ZTAsIDB4ZmQsIDB4YTMsIDB4ZTAsIDB4ZmV9IH0sCit7IDB4ODRiMSwJMTYsCXsweGEzLCAweGUwLCAweGY1LCAweDY2LCAweDhlLCAweDY1LCAweDhkLCAweDY0LCAweDhjLCAweDYzLCAweDdkLCAweDA2LCAweGFmLCAweDU3LCAweDEyLCAweDgzfSB9LAoreyAweDg0YzEsCTE2LAl7MHhkZiwgMHhhZiwgMHg1NywgMHg3ZCwgMHgwMSwgMHgxMiwgMHg4MywgMHg1YSwgMHg4NSwgMHg1OSwgMHg4MiwgMHg4NSwgMHg1OCwgMHg4MywgMHhhMywgMHhhM30gfSwKK3sgMHg4NGQxLAkxNiwJezB4ZTAsIDB4MjAsIDB4ZTAsIDB4NDMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4NTksIDB4MjQsIDB4MDUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTgsIDB4ZjV9IH0sCit7IDB4ODRlMSwJMTYsCXsweDgzLCAweGUwLCAweGU1LCAweDU5LCAweDI0LCAweDA2LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDU4LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1fSB9LAoreyAweDg0ZjEsCTE2LAl7MHg1NywgMHg3NSwgMHhmMCwgMHgwZCwgMHhhNCwgMHgyNCwgMHgwMiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwMywgMHhmNSwgMHg4MywgMHhlMCwgMHhmY30gfSwKK3sgMHg4NTAxLAkxNiwJezB4YTMsIDB4ZTAsIDB4ZmQsIDB4YTMsIDB4ZTAsIDB4ZmUsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4NjYsIDB4OGUsIDB4NjUsIDB4OGQsIDB4NjQsIDB4OGMsIDB4NjN9IH0sCit7IDB4ODUxMSwJMTYsCXsweDdkLCAweDA2LCAweGFmLCAweDU3LCAweDEyLCAweDgzLCAweGRmLCAweDc0LCAweGY4LCAweDI1LCAweDU3LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDAyfSB9LAoreyAweDg1MjEsCTE2LAl7MHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHhlNSwgMHg1NywgMHgyNSwgMHhlMCwgMHhmZiwgMHhjMywgMHg3NCwgMHgwYywgMHg5ZiwgMHg3NSwgMHhmMCwgMHg0MH0gfSwKK3sgMHg4NTMxLAkxNiwJezB4YTQsIDB4MjQsIDB4NDAsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4ZjAsIDB4MzQsIDB4N2IsIDB4YWYsIDB4ODIsIDB4ZmUsIDB4ZTUsIDB4NTcsIDB4MjUsIDB4ZTB9IH0sCit7IDB4ODU0MSwJMTYsCXsweDI0LCAweGVmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDAyLCAweGY1LCAweDgzLCAweGVlLCAweGYwLCAweGEzLCAweGVmLCAweGYwLCAweGFmLCAweDU3fSB9LAoreyAweDg1NTEsCTE1LAl7MHg3NCwgMHgwMSwgMHhhOCwgMHgwNywgMHgwOCwgMHg4MCwgMHgwMiwgMHhjMywgMHgzMywgMHhkOCwgMHhmYywgMHg0MiwgMHgzNCwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg4NTYwLAkxLAl7MHgyMn0gfSwKK3sgMHg4NTYxLAkxNiwJezB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4ZjUsIDB4NTcsIDB4YzMsIDB4OTQsIDB4MDQsIDB4NDAsIDB4MDMsIDB4N2YsIDB4ZmYsIDB4MjJ9IH0sCit7IDB4ODU3MSwJMTYsCXsweGFmLCAweDU3LCAweGU0LCAweGZkLCAweDEyLCAweDgzLCAweDVhLCAweDc0LCAweGY4LCAweDI1LCAweDU3LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDAyfSB9LAoreyAweDg1ODEsCTE2LAl7MHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHhlNSwgMHg1NywgMHg3NSwgMHhmMCwgMHgwOCwgMHhhNCwgMHgyNCwgMHgwMCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNH0gfSwKK3sgMHg4NTkxLAkxNiwJezB4MjAsIDB4YWYsIDB4ODIsIDB4ZjUsIDB4NTksIDB4OGYsIDB4NWEsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4ODIsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTR9IH0sCit7IDB4ODVhMSwJMTYsCXsweDM1LCAweDgzLCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZjLCAweGYwLCAweGU1LCAweDU3LCAweDc1LCAweGYwLCAweDBkLCAweGE0LCAweDI0LCAweDBjfSB9LAoreyAweDg1YjEsCTE2LAl7MHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwMywgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHhlNSwgMHg1NywgMHg3NSwgMHhmMCwgMHgwZCwgMHhhNCwgMHgyNH0gfSwKK3sgMHg4NWMxLAkxNiwJezB4MDIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDMsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmMsIDB4YTMsIDB4ZTAsIDB4ZmQsIDB4YTMsIDB4ZTAsIDB4ZmV9IH0sCit7IDB4ODVkMSwJMTYsCXsweGEzLCAweGUwLCAweGY1LCAweDY2LCAweDhlLCAweDY1LCAweDhkLCAweDY0LCAweDhjLCAweDYzLCAweDdkLCAweDA2LCAweGFmLCAweDU3LCAweDEyLCAweDgzfSB9LAoreyAweDg1ZTEsCTE2LAl7MHhkZiwgMHhlNSwgMHg1YSwgMHgyNCwgMHgwNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1OSwgMHhmNSwgMHg4MywgMHhlMCwgMHgzMCwgMHhlMCwgMHgwOX0gfSwKK3sgMHg4NWYxLAkxNiwJezB4ODUsIDB4NWEsIDB4ODIsIDB4ODUsIDB4NTksIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4NTgsIDB4YWYsIDB4NTcsIDB4NzQsIDB4MDEsIDB4YTgsIDB4MDcsIDB4MDh9IH0sCit7IDB4ODYwMSwJMTYsCXsweDgwLCAweDAyLCAweGMzLCAweDMzLCAweGQ4LCAweGZjLCAweGY0LCAweDUyLCAweDM0LCAweGU1LCAweDU3LCAweDI1LCAweGUwLCAweDI0LCAweGM2LCAweGY1fSB9LAoreyAweDg2MTEsCTE2LAl7MHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlMCwgMHgyMCwgMHhlMSwgMHgwZiwgMHhlNSwgMHg1NywgMHgyNSwgMHhlMCwgMHgyNCwgMHhjN30gfSwKK3sgMHg4NjIxLAkxMSwJezB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4N2YsIDB4MDB9IH0sCit7IDB4ODYyYywJMSwJezB4MjJ9IH0sCit7IDB4ODYyZCwJNCwJezB4OGUsIDB4NTcsIDB4OGYsIDB4NTh9IH0sCit7IDB4ODYzMSwJMTYsCXsweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGUwLCAweDE0LCAweGY1LCAweDU5LCAweGMzLCAweDk0LCAweDA0LCAweDQwLCAweDAzLCAweDdmLCAweGZmLCAweDIyfSB9LAoreyAweDg2NDEsCTE2LAl7MHhlNSwgMHg1OSwgMHg3NSwgMHhmMCwgMHgwOCwgMHhhNCwgMHgyNCwgMHgwMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgyMCwgMHhmNSwgMHg4MywgMHhlMH0gfSwKK3sgMHg4NjUxLAkxNiwJezB4NTQsIDB4MDMsIDB4NzAsIDB4NjYsIDB4ODUsIDB4NTgsIDB4ODIsIDB4ODUsIDB4NTcsIDB4ODMsIDB4YTMsIDB4ZTAsIDB4MzAsIDB4ZTAsIDB4MjgsIDB4ZTV9IH0sCit7IDB4ODY2MSwJMTYsCXsweDU5LCAweDc1LCAweGYwLCAweDBkLCAweGE0LCAweDI0LCAweDAyLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDAzLCAweGY1LCAweDgzLCAweGUwLCAweGZjfSB9LAoreyAweDg2NzEsCTE2LAl7MHhhMywgMHhlMCwgMHhmZCwgMHhhMywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHhmNSwgMHg2NiwgMHg4ZSwgMHg2NSwgMHg4ZCwgMHg2NCwgMHg4YywgMHg2M30gfSwKK3sgMHg4NjgxLAkxNiwJezB4N2QsIDB4MDIsIDB4YWYsIDB4NTksIDB4MTIsIDB4ODMsIDB4ZGYsIDB4ODUsIDB4NTgsIDB4ODIsIDB4ODUsIDB4NTcsIDB4ODMsIDB4YTMsIDB4ZTAsIDB4MzB9IH0sCit7IDB4ODY5MSwJMTYsCXsweGUxLCAweDI4LCAweGU1LCAweDU5LCAweDc1LCAweGYwLCAweDBkLCAweGE0LCAweDI0LCAweDAyLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDAzLCAweGY1fSB9LAoreyAweDg2YTEsCTE2LAl7MHg4MywgMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgMHhmZCwgMHhhMywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHhmNSwgMHg2NiwgMHg4ZSwgMHg2NSwgMHg4ZH0gfSwKK3sgMHg4NmIxLAkxMiwJezB4NjQsIDB4OGMsIDB4NjMsIDB4N2QsIDB4MDQsIDB4YWYsIDB4NTksIDB4MTIsIDB4ODMsIDB4ZGYsIDB4N2YsIDB4MDB9IH0sCit7IDB4ODZiZCwJMSwJezB4MjJ9IH0sCit7IDB4ODZiZSwJMTYsCXsweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGUwLCAweGZkLCAweGEzLCAweGEzLCAweGEzLCAweGUwLCAweGZjLCAweGVkfSB9LAoreyAweDg2Y2UsCTE2LAl7MHg2YywgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhmMCwgMHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhhMywgMHhhMywgMHhhMywgMHhjMCwgMHg4MywgMHhjMH0gfSwKK3sgMHg4NmRlLAkxNiwJezB4ODIsIDB4ZTAsIDB4ZmQsIDB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4ZmMsIDB4ZWQsIDB4NmMsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZjB9IH0sCit7IDB4ODZlZSwJMTYsCXsweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGEzLCAweGEzLCAweGEzLCAweGUwLCAweGZkLCAweGVjLCAweDZkLCAweGQwfSB9LAoreyAweDg2ZmUsCTE2LAl7MHg4MiwgMHhkMCwgMHg4MywgMHhmMCwgMHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhhMywgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhlMCwgMHhmZCwgMHg4Zn0gfSwKK3sgMHg4NzBlLAkxNiwJezB4ODIsIDB4OGUsIDB4ODMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4ZmMsIDB4ZWQsIDB4NmMsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZjAsIDB4OGYsIDB4ODJ9IH0sCit7IDB4ODcxZSwJMTYsCXsweDhlLCAweDgzLCAweGEzLCAweGEzLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGUwLCAweGZkLCAweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGEzLCAweGUwfSB9LAoreyAweDg3MmUsCTE2LAl7MHhmYywgMHhlZCwgMHg2YywgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhmMCwgMHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhhMywgMHhjMCwgMHg4MywgMHhjMH0gfSwKK3sgMHg4NzNlLAkxNiwJezB4ODIsIDB4ZTAsIDB4ZmQsIDB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4ZWQsIDB4NmYsIDB4ZDAsIDB4ODIsIDB4ZDB9IH0sCit7IDB4ODc0ZSwJMywJezB4ODMsIDB4ZjAsIDB4MjJ9IH0sCit7IDB4ODc1MSwJNCwJezB4YWQsIDB4MDcsIDB4YWMsIDB4MDZ9IH0sCit7IDB4ODc1NSwJMTYsCXsweDc5LCAweDBkLCAweDhkLCAweDgyLCAweDhjLCAweDgzLCAweGUwLCAweDE0LCAweGZlLCAweGMzLCAweDk0LCAweDA0LCAweDQwLCAweDAzLCAweDdmLCAweGZmfSB9LAoreyAweDg3NjUsCTE2LAl7MHgyMiwgMHg4YywgMHg1NywgMHg4ZCwgMHg1OCwgMHhlZSwgMHg3NSwgMHhmMCwgMHgwZCwgMHhhNCwgMHgyNCwgMHgwMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNH0gfSwKK3sgMHg4Nzc1LAkxNiwJezB4MDMsIDB4YWYsIDB4ODIsIDB4ZmUsIDB4YWQsIDB4MDEsIDB4MTksIDB4ZWQsIDB4NjAsIDB4MjQsIDB4MGYsIDB4ZWYsIDB4YWMsIDB4MDYsIDB4NzAsIDB4MDF9IH0sCit7IDB4ODc4NSwJMTYsCXsweDBlLCAweDE0LCAweGY1LCAweDgyLCAweDhjLCAweDgzLCAweGUwLCAweGZkLCAweDA1LCAweDU4LCAweGU1LCAweDU4LCAweGFhLCAweDU3LCAweDcwLCAweDAyfSB9LAoreyAweDg3OTUsCTE2LAl7MHgwNSwgMHg1NywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHg2ZCwgMHg2MCwgMHhkOSwgMHg3ZiwgMHgwMSwgMHgyMiwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg4N2E1LAkxLAl7MHgyMn0gfSwKK3sgMHg4N2E2LAk0LAl7MHg4ZSwgMHg1NywgMHg4ZiwgMHg1OH0gfSwKK3sgMHg4N2FhLAkxNiwJezB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4ZjUsIDB4NWUsIDB4YzMsIDB4OTQsIDB4MDQsIDB4NDAsIDB4MDMsIDB4N2YsIDB4ZmYsIDB4MjJ9IH0sCit7IDB4ODdiYSwJMTYsCXsweGU1LCAweDVlLCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAwLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDIwLCAweGFmLCAweDgyLCAweGY1fSB9LAoreyAweDg3Y2EsCTE2LAl7MHg1ZiwgMHg4ZiwgMHg2MCwgMHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4MywgMHhhMywgMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgMHhmZCwgMHhhM30gfSwKK3sgMHg4N2RhLAkxNiwJezB4ZTAsIDB4ZmUsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4N2IsIDB4MDgsIDB4N2EsIDB4MDAsIDB4NzksIDB4MDAsIDB4NzgsIDB4MDAsIDB4ZDMsIDB4MTIsIDB4YTN9IH0sCit7IDB4ODdlYSwJMTYsCXsweGIzLCAweDQwLCAweDEwLCAweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGEzLCAweDEyLCAweGEzLCAweGZhLCAweDAwLCAweDAwLCAweDAwfSB9LAoreyAweDg3ZmEsCTE2LAl7MHgwOCwgMHg4MCwgMHgyZSwgMHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4MywgMHhhMywgMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgMHhmZCwgMHhhM30gfSwKK3sgMHg4ODBhLAkxNiwJezB4ZTAsIDB4ZmUsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4N2IsIDB4MDAsIDB4N2EsIDB4MDgsIDB4NzksIDB4MDcsIDB4NzgsIDB4MDAsIDB4YzMsIDB4MTIsIDB4YTN9IH0sCit7IDB4ODgxYSwJMTYsCXsweGIzLCAweDUwLCAweDBlLCAweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGEzLCAweDEyLCAweGEzLCAweGZhLCAweDAwLCAweDA3LCAweDA4fSB9LAoreyAweDg4MmEsCTE2LAl7MHgwMCwgMHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4MywgMHhhMywgMHhlMCwgMHhmOCwgMHhhMywgMHhlMCwgMHhmOSwgMHhhMywgMHhlMCwgMHhmYX0gfSwKK3sgMHg4ODNhLAkxNiwJezB4YTMsIDB4ZTAsIDB4ZmIsIDB4N2YsIDB4MDAsIDB4N2UsIDB4NTAsIDB4N2QsIDB4NDYsIDB4N2MsIDB4MDAsIDB4MTIsIDB4YTMsIDB4MjEsIDB4OGYsIDB4NWN9IH0sCit7IDB4ODg0YSwJMTYsCXsweDhlLCAweDViLCAweDhkLCAweDVhLCAweDhjLCAweDU5LCAweDdiLCAweDBhLCAweDdhLCAweDAwLCAweDc5LCAweDAwLCAweDc4LCAweDAwLCAweDEyLCAweGEzfSB9LAoreyAweDg4NWEsCTE2LAl7MHgyMSwgMHhhZiwgMHgwMywgMHg4ZiwgMHg1ZCwgMHhhZiwgMHg1YywgMHhhZSwgMHg1YiwgMHhhZCwgMHg1YSwgMHhhYywgMHg1OSwgMHg3YiwgMHgwYSwgMHg3YX0gfSwKK3sgMHg4ODZhLAkxNiwJezB4MDAsIDB4NzksIDB4MDAsIDB4NzgsIDB4MDAsIDB4MTIsIDB4YTMsIDB4MjEsIDB4OGYsIDB4NWMsIDB4OGUsIDB4NWIsIDB4OGQsIDB4NWEsIDB4OGMsIDB4NTl9IH0sCit7IDB4ODg3YSwJMTYsCXsweGU1LCAweDVkLCAweGMzLCAweDk0LCAweDA1LCAweDQwLCAweDE1LCAweGU1LCAweDVjLCAweDI0LCAweDAxLCAweGY1LCAweDVjLCAweGU0LCAweDM1LCAweDVifSB9LAoreyAweDg4OGEsCTE2LAl7MHhmNSwgMHg1YiwgMHhlNCwgMHgzNSwgMHg1YSwgMHhmNSwgMHg1YSwgMHhlNCwgMHgzNSwgMHg1OSwgMHhmNSwgMHg1OSwgMHg4NSwgMHg2MCwgMHg4MiwgMHg4NX0gfSwKK3sgMHg4ODlhLAkxNiwJezB4NWYsIDB4ODMsIDB4YTMsIDB4ZTQsIDB4ZjAsIDB4ODUsIDB4NjAsIDB4ODIsIDB4ODUsIDB4NWYsIDB4ODMsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4NDR9IH0sCit7IDB4ODhhYSwJMTYsCXsweDgwLCAweGYwLCAweDg1LCAweDYwLCAweDgyLCAweDg1LCAweDVmLCAweDgzLCAweGU1LCAweDVjLCAweGYwLCAweGFmLCAweDVjLCAweGFlLCAweDViLCAweGFkfSB9LAoreyAweDg4YmEsCTE2LAl7MHg1YSwgMHhhYywgMHg1OSwgMHg3OCwgMHgwOCwgMHgxMiwgMHhhMywgMHhjNCwgMHg4NSwgMHg2MCwgMHg4MiwgMHg4NSwgMHg1ZiwgMHg4MywgMHhhMywgMHhlZn0gfSwKK3sgMHg4OGNhLAkxNiwJezB4ZjAsIDB4ODUsIDB4NjAsIDB4ODIsIDB4ODUsIDB4NWYsIDB4ODMsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4ZjAsIDB4ZTQsIDB4ZjV9IH0sCit7IDB4ODhkYSwJMTYsCXsweDVkLCAweGU1LCAweDU4LCAweDI0LCAweDBiLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDU3LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweDMwLCAweGUwfSB9LAoreyAweDg4ZWEsCTE2LAl7MHgyMywgMHg1NCwgMHgwMSwgMHhmMCwgMHhlNSwgMHg2MCwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1ZiwgMHhmNSwgMHg4MywgMHhlMH0gfSwKK3sgMHg4OGZhLAkxNiwJezB4NTQsIDB4ZmQsIDB4ZjAsIDB4YWYsIDB4NWUsIDB4NzQsIDB4MDEsIDB4YTgsIDB4MDcsIDB4MDgsIDB4ODAsIDB4MDIsIDB4YzMsIDB4MzMsIDB4ZDgsIDB4ZmN9IH0sCit7IDB4ODkwYSwJMTYsCXsweDQyLCAweDIyLCAweDgwLCAweDM2LCAweDc0LCAweDAxLCAweDdlLCAweDAwLCAweGE4LCAweDVlLCAweDA4LCAweDgwLCAweDA1LCAweGMzLCAweDMzLCAweGNlfSB9LAoreyAweDg5MWEsCTE2LAl7MHgzMywgMHhjZSwgMHhkOCwgMHhmOSwgMHhmZiwgMHhlNCwgMHhlZiwgMHg1NSwgMHgyMiwgMHg2MCwgMHgxZiwgMHhlNSwgMHg2MCwgMHgyNCwgMHgwNCwgMHhmNX0gfSwKK3sgMHg4OTJhLAkxNiwJezB4ODIsIDB4ZTQsIDB4MzUsIDB4NWYsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4YWYsIDB4NWUsIDB4NzQsIDB4MDEsIDB4YTgsIDB4MDd9IH0sCit7IDB4ODkzYSwJMTYsCXsweDA4LCAweDgwLCAweDAyLCAweGMzLCAweDMzLCAweGQ4LCAweGZjLCAweGY0LCAweDUyLCAweDIyLCAweGU1LCAweDU4LCAweDI0LCAweDA4LCAweGY1LCAweDgyfSB9LAoreyAweDg5NGEsCTE2LAl7MHhlNCwgMHgzNSwgMHg1NywgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhiNCwgMHg2MiwgMHgwNSwgMHg0MywgMHg1ZCwgMHgwYSwgMHg4MCwgMHgxYSwgMHhlZn0gfSwKK3sgMHg4OTVhLAkxNiwJezB4YjQsIDB4NzIsIDB4MDUsIDB4NDMsIDB4NWQsIDB4MDgsIDB4ODAsIDB4MTEsIDB4ZWYsIDB4YjQsIDB4NzQsIDB4MDUsIDB4NDMsIDB4NWQsIDB4MDIsIDB4ODB9IH0sCit7IDB4ODk2YSwJMTYsCXsweDA4LCAweGVmLCAweDY0LCAweDZlLCAweDYwLCAweDAzLCAweDdmLCAweGZmLCAweDIyLCAweGU1LCAweDU4LCAweDI0LCAweDBiLCAweGY1LCAweDgyLCAweGU0fSB9LAoreyAweDg5N2EsCTE2LAl7MHgzNSwgMHg1NywgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHgzMCwgMHhlMywgMHgwMywgMHg0MywgMHg1ZCwgMHg4MCwgMHhlZiwgMHgzMCwgMHhlNywgMHgxMn0gfSwKK3sgMHg4OThhLAkxNiwJezB4NDMsIDB4NWQsIDB4NDAsIDB4ZTUsIDB4NjAsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NWYsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDR9IH0sCit7IDB4ODk5YSwJMTYsCXsweDAyLCAweGYwLCAweGU1LCAweDU4LCAweDI0LCAweDBiLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDU3LCAweGY1LCAweDgzLCAweGUwLCAweDMwLCAweGUxfSB9LAoreyAweDg5YWEsCTE2LAl7MHgyMCwgMHhhZiwgMHg1ZSwgMHg3NCwgMHgwMSwgMHhhOCwgMHgwNywgMHgwOCwgMHg4MCwgMHgwMiwgMHhjMywgMHgzMywgMHhkOCwgMHhmYywgMHg0MiwgMHgzMn0gfSwKK3sgMHg4OWJhLAkxNiwJezB4ZTUsIDB4NjAsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NWYsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODB9IH0sCit7IDB4ODljYSwJMTYsCXsweDEwLCAweGFmLCAweDVlLCAweDc0LCAweDAxLCAweGE4LCAweDA3LCAweDA4LCAweDgwLCAweDAyLCAweGMzLCAweDMzLCAweGQ4LCAweGZjLCAweGY0LCAweDUyfSB9LAoreyAweDg5ZGEsCTE2LAl7MHgzMiwgMHhlNSwgMHg1OCwgMHgyNCwgMHgwYiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1NywgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHgzMCwgMHhlNH0gfSwKK3sgMHg4OWVhLAkxNiwJezB4MTEsIDB4YWUsIDB4NWUsIDB4NzQsIDB4MDEsIDB4YTgsIDB4MDYsIDB4MDgsIDB4ODAsIDB4MDIsIDB4YzMsIDB4MzMsIDB4ZDgsIDB4ZmMsIDB4NDIsIDB4MzF9IH0sCit7IDB4ODlmYSwJMTYsCXsweDgwLCAweDEwLCAweGFlLCAweDVlLCAweDc0LCAweDAxLCAweGE4LCAweDA2LCAweDA4LCAweDgwLCAweDAyLCAweGMzLCAweDMzLCAweGQ4LCAweGZjLCAweGY0fSB9LAoreyAweDhhMGEsCTE2LAl7MHg1MiwgMHgzMSwgMHhlZiwgMHgyMCwgMHhlMSwgMHgwMywgMHgzMCwgMHhlNCwgMHgwMywgMHhlNCwgMHhmNSwgMHg1ZCwgMHg4NSwgMHg2MCwgMHg4MiwgMHg4NX0gfSwKK3sgMHg4YTFhLAkxNiwJezB4NWYsIDB4ODMsIDB4YTMsIDB4YTMsIDB4YTMsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4ODUsIDB4NjAsIDB4ODIsIDB4ODUsIDB4NWYsIDB4ODMsIDB4YTMsIDB4YTN9IH0sCit7IDB4OGEyYSwJMTYsCXsweGU0LCAweGYwLCAweGU1LCAweDVkLCAweGYwLCAweGU1LCAweDU4LCAweDI0LCAweDBhLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDU3LCAweGY1LCAweDgzfSB9LAoreyAweDhhM2EsCTE2LAl7MHhlMCwgMHhmZiwgMHhlNSwgMHg2MCwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1ZiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHhlNX0gfSwKK3sgMHg4YTRhLAkxNiwJezB4NTgsIDB4MjQsIDB4MGEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTcsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4NjAsIDB4MjQsIDB4MDV9IH0sCit7IDB4OGE1YSwJMTYsCXsweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDVmLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweGU1LCAweDU4LCAweDI0LCAweDA5LCAweGY1LCAweDgyLCAweGU0fSB9LAoreyAweDhhNmEsCTE2LAl7MHgzNSwgMHg1NywgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHg2MCwgMHgyNCwgMHgwNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1ZiwgMHhmNX0gfSwKK3sgMHg4YTdhLAkxNiwJezB4ODMsIDB4ZWYsIDB4ZjAsIDB4ZTUsIDB4NTgsIDB4MjQsIDB4MDksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTcsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmZ9IH0sCit7IDB4OGE4YSwJMTYsCXsweGU1LCAweDYwLCAweDI0LCAweDA3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDVmLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDg1LCAweDYwLCAweDgyfSB9LAoreyAweDhhOWEsCTE2LAl7MHg4NSwgMHg1ZiwgMHg4MywgMHhhMywgMHhhMywgMHhhMywgMHhlNCwgMHhmMCwgMHg4NSwgMHg2MCwgMHg4MiwgMHg4NSwgMHg1ZiwgMHg4MywgMHhhMywgMHhhM30gfSwKK3sgMHg4YWFhLAkxNiwJezB4ZjAsIDB4ODUsIDB4NTgsIDB4ODIsIDB4ODUsIDB4NTcsIDB4ODMsIDB4YTMsIDB4ZTAsIDB4ZmMsIDB4YTMsIDB4ZTAsIDB4ZmQsIDB4YTMsIDB4ZTAsIDB4ZmV9IH0sCit7IDB4OGFiYSwJMTYsCXsweGEzLCAweGUwLCAweGY1LCAweDY2LCAweDhlLCAweDY1LCAweDhkLCAweDY0LCAweDhjLCAweDYzLCAweDdkLCAweDA2LCAweGFmLCAweDVlLCAweDEyLCAweDgzfSB9LAoreyAweDhhY2EsCTE2LAl7MHhkZiwgMHg3NSwgMHg1ZCwgMHgwOCwgMHhlNSwgMHg1OCwgMHgyNCwgMHgwYywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1NywgMHhmNSwgMHg4MywgMHhlMH0gfSwKK3sgMHg4YWRhLAkxNiwJezB4NjAsIDB4MDMsIDB4NDMsIDB4NWQsIDB4MTAsIDB4ZTUsIDB4NjAsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NWYsIDB4ZjUsIDB4ODN9IH0sCit7IDB4OGFlYSwJMTYsCXsweGUwLCAweDU0LCAweDAzLCAweDQ1LCAweDVkLCAweGYwLCAweGU1LCAweDU4LCAweDI0LCAweDA1LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDU3LCAweGY1fSB9LAoreyAweDhhZmEsCTE2LAl7MHg4MywgMHhlMCwgMHhmZSwgMHhjMywgMHg5NCwgMHgwNSwgMHg0MCwgMHgwNiwgMHhlZSwgMHhkMywgMHg5NCwgMHgwOCwgMHg0MCwgMHgwMywgMHg3ZiwgMHhmZn0gfSwKK3sgMHg4YjBhLAkxNiwJezB4MjIsIDB4ZTUsIDB4NTgsIDB4MjQsIDB4MDYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTcsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmQsIDB4YzMsIDB4OTR9IH0sCit7IDB4OGIxYSwJMTYsCXsweDAxLCAweDQwLCAweDA2LCAweGVkLCAweGQzLCAweDk0LCAweDAyLCAweDQwLCAweDAzLCAweDdmLCAweGZmLCAweDIyLCAweGVkLCAweDE0LCAweGZmLCAweDI1fSB9LAoreyAweDhiMmEsCTE2LAl7MHhlMCwgMHgyNSwgMHhlMCwgMHhmZiwgMHhlZSwgMHgyNCwgMHhmYiwgMHg0ZiwgMHhmNSwgMHg1ZCwgMHhlNSwgMHg1OCwgMHgyNCwgMHgwNywgMHhmNSwgMHg4Mn0gfSwKK3sgMHg4YjNhLAkxNiwJezB4ZTQsIDB4MzUsIDB4NTcsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MjQsIDB4ZDAsIDB4NjAsIDB4MTgsIDB4MTQsIDB4NjAsIDB4MWEsIDB4MjQsIDB4YzMsIDB4NjB9IH0sCit7IDB4OGI0YSwJMTYsCXsweDFlLCAweDE0LCAweDYwLCAweDA5LCAweDI0LCAweDBhLCAweDcwLCAweDE0LCAweDQzLCAweDVkLCAweDE4LCAweDgwLCAweDEyLCAweDQzLCAweDVkLCAweDA4fSB9LAoreyAweDhiNWEsCTE2LAl7MHg4MCwgMHgwZCwgMHg0MywgMHg1ZCwgMHgzOCwgMHg4MCwgMHgwOCwgMHg0MywgMHg1ZCwgMHgyOCwgMHg4MCwgMHgwMywgMHg3ZiwgMHhmZiwgMHgyMiwgMHg4NX0gfSwKK3sgMHg4YjZhLAkxNiwJezB4NjAsIDB4ODIsIDB4ODUsIDB4NWYsIDB4ODMsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ZTUsIDB4NWQsIDB4ZjAsIDB4NzQsIDB4MDEsIDB4N2UsIDB4MDAsIDB4YTh9IH0sCit7IDB4OGI3YSwJMTYsCXsweDVlLCAweDA4LCAweDgwLCAweDA1LCAweGMzLCAweDMzLCAweGNlLCAweDMzLCAweGNlLCAweGQ4LCAweGY5LCAweGZmLCAweGU0LCAweGVmLCAweDU1LCAweDM0fSB9LAoreyAweDhiOGEsCTE2LAl7MHg2MCwgMHgwNywgMHhhZiwgMHg1ZSwgMHg3ZCwgMHgwMSwgMHgxMiwgMHg4MywgMHg1YSwgMHhhYSwgMHg1NywgMHhhOSwgMHg1OCwgMHg3YiwgMHgwMSwgMHhjMH0gfSwKK3sgMHg4YjlhLAkxNiwJezB4MDMsIDB4YzAsIDB4MDEsIDB4ZTUsIDB4NWUsIDB4NzUsIDB4ZjAsIDB4MGQsIDB4YTQsIDB4MjQsIDB4MDEsIDB4ZjksIDB4NzQsIDB4MDMsIDB4MzUsIDB4ZjB9IH0sCit7IDB4OGJhYSwJMTYsCXsweGE4LCAweDAxLCAweGZjLCAweGFkLCAweDAzLCAweGQwLCAweDAxLCAweGQwLCAweDAzLCAweDdlLCAweDAwLCAweDdmLCAweDBkLCAweDEyLCAweGEyLCAweDEyfSB9LAoreyAweDhiYmEsCTIsCXsweDdmLCAweDAwfSB9LAoreyAweDhiYmMsCTEsCXsweDIyfSB9LAoreyAweDhiYmQsCTE2LAl7MHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHgxNCwgMHhmZSwgMHhjMywgMHg5NCwgMHgwNCwgMHg0MCwgMHgwMywgMHg3ZiwgMHhmZiwgMHgyMiwgMHhlZX0gfSwKK3sgMHg4YmNkLAkxNiwJezB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MjAsIDB4YWQsIDB4ODIsIDB4ZmMsIDB4OTAsIDB4MDF9IH0sCit7IDB4OGJkZCwJMTYsCXsweDJjLCAweDc0LCAweDA4LCAweGYwLCAweGVlLCAweDA0LCAweGEzLCAweGYwLCAweGU0LCAweGEzLCAweGYwLCAweDhkLCAweDgyLCAweDhjLCAweDgzLCAweGU1fSB9LAoreyAweDhiZWQsCTE2LAl7MHg4MiwgMHgyNCwgMHgwNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg4MywgMHhmNSwgMHg4MywgMHhlMCwgMHg5MCwgMHgwMSwgMHgyZiwgMHhmMCwgMHg4ZH0gfSwKK3sgMHg4YmZkLAkxNiwJezB4ODIsIDB4OGMsIDB4ODMsIDB4ZTUsIDB4ODIsIDB4MjQsIDB4MDUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4ODMsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTR9IH0sCit7IDB4OGMwZCwJMTYsCXsweDFlLCAweDkwLCAweDAxLCAweDMwLCAweGYwLCAweDc0LCAweDJkLCAweDJlLCAweGY4LCAweGU2LCAweGEzLCAweGYwLCAweGFmLCAweDA2LCAweDc0LCAweDAxfSB9LAoreyAweDhjMWQsCTE2LAl7MHhhOCwgMHgwNywgMHgwOCwgMHg4MCwgMHgwMiwgMHhjMywgMHgzMywgMHhkOCwgMHhmYywgMHhmNSwgMHg1NywgMHhlNSwgMHgzMywgMHhjMywgMHg5NCwgMHgwMX0gfSwKK3sgMHg4YzJkLAkxNiwJezB4NDAsIDB4MGQsIDB4OTAsIDB4MjAsIDB4NzgsIDB4ZTAsIDB4NTQsIDB4MGYsIDB4NzUsIDB4NTgsIDB4MDAsIDB4ZjUsIDB4NTksIDB4ODAsIDB4MDksIDB4N2Z9IH0sCit7IDB4OGMzZCwJMTYsCXsweDAyLCAweDEyLCAweDExLCAweDI3LCAweDhlLCAweDU4LCAweDhmLCAweDU5LCAweGMzLCAweGU1LCAweDU4LCAweDY0LCAweDgwLCAweDk0LCAweDgwLCAweDQwfSB9LAoreyAweDhjNGQsCTE2LAl7MHhkYSwgMHhlNSwgMHg1NywgMHg1NSwgMHg1OSwgMHg5MCwgMHgwMSwgMHgzMiwgMHhmMCwgMHg3ZSwgMHgwMSwgMHg3ZiwgMHgyYywgMHg3ZCwgMHgwNywgMHgxMn0gfSwKK3sgMHg4YzVkLAk0LAl7MHg5MSwgMHg2YSwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg4YzYxLAkxLAl7MHgyMn0gfSwKK3sgMHg4YzYyLAkxNiwJezB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4ZmUsIDB4YzMsIDB4OTQsIDB4MDQsIDB4NDAsIDB4MDMsIDB4N2YsIDB4ZmYsIDB4MjIsIDB4ZWV9IH0sCit7IDB4OGM3MiwJMTYsCXsweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAwLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDIwLCAweGFmLCAweDgyLCAweGZlLCAweDkwLCAweDAxfSB9LAoreyAweDhjODIsCTE2LAl7MHgzMywgMHg3NCwgMHgwYSwgMHhmMCwgMHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlNSwgMHg4MiwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNX0gfSwKK3sgMHg4YzkyLAkxNiwJezB4ODMsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4OTAsIDB4MDEsIDB4MzQsIDB4ZjAsIDB4N2UsIDB4MDEsIDB4N2YsIDB4MzMsIDB4N2QsIDB4MDIsIDB4MTIsIDB4OTF9IH0sCit7IDB4OGNhMiwJMywJezB4NmEsIDB4N2YsIDB4MDB9IH0sCit7IDB4OGNhNSwJMSwJezB4MjJ9IH0sCit7IDB4OGNhNiwJNCwJezB4OGUsIDB4NTcsIDB4OGYsIDB4NTh9IH0sCit7IDB4OGNhYSwJMTYsCXsweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGUwLCAweDE0LCAweGZlLCAweGMzLCAweDk0LCAweDA0LCAweDQwLCAweDAzLCAweDdmLCAweGZmLCAweDIyLCAweGVlfSB9LAoreyAweDhjYmEsCTE2LAl7MHg3NSwgMHhmMCwgMHgwOCwgMHhhNCwgMHgyNCwgMHgwMCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgyMCwgMHhhZCwgMHg4MiwgMHhmYywgMHg4NSwgMHg1OH0gfSwKK3sgMHg4Y2NhLAkxNiwJezB4ODIsIDB4ODUsIDB4NTcsIDB4ODMsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4ZWQsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4M2MsIDB4ZjV9IH0sCit7IDB4OGNkYSwJMTYsCXsweDgzLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDgwLCAweDQzLCAweGVlLCAweDc1LCAweGYwLCAweDBkLCAweGE0LCAweDI0LCAweDBjLCAweGY1LCAweDgyfSB9LAoreyAweDhjZWEsCTE2LAl7MHhlNCwgMHgzNCwgMHgwMywgMHhmNSwgMHg4MywgMHhlMCwgMHgzMCwgMHhlMCwgMHgyMCwgMHhlZSwgMHgyNSwgMHhlMCwgMHgyNCwgMHhjNiwgMHhmNSwgMHg4Mn0gfSwKK3sgMHg4Y2ZhLAkxNiwJezB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4ZjAsIDB4N2YsIDB4NjAsIDB4ZWQsIDB4MjQsIDB4MDUsIDB4ZjUsIDB4ODJ9IH0sCit7IDB4OGQwYSwJMTYsCXsweGU0LCAweDNjLCAweGY1LCAweDgzLCAweGUwLCAweDVmLCAweGI1LCAweDA3LCAweGYyLCAweGFlLCAweDA0LCAweGFmLCAweDA1LCAweGVmLCAweDI0LCAweDA0fSB9LAoreyAweDhkMWEsCTEyLAl7MHhmNSwgMHg4MiwgMHhlNCwgMHgzZSwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg4ZDI2LAkxLAl7MHgyMn0gfSwKK3sgMHg4ZDI3LAk0LAl7MHhhZCwgMHgwNywgMHhhYywgMHgwNn0gfSwKK3sgMHg4ZDJiLAkxNiwJezB4OGQsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4ZmUsIDB4YzMsIDB4OTQsIDB4MDQsIDB4NDAsIDB4MDMsIDB4N2YsIDB4ZmYsIDB4MjIsIDB4ZWV9IH0sCit7IDB4OGQzYiwJMTYsCXsweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAwLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDIwLCAweGFmLCAweDgyLCAweGZlLCAweDhkLCAweDgyfSB9LAoreyAweDhkNGIsCTE2LAl7MHg4YywgMHg4MywgMHhhMywgMHhlMCwgMHg2MCwgMHgwZiwgMHhlZiwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzZSwgMHhmNSwgMHg4MywgMHhlMH0gfSwKK3sgMHg4ZDViLAkxNiwJezB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MGQsIDB4ZWYsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4M2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTR9IH0sCit7IDB4OGQ2YiwJNCwJezB4ZmUsIDB4ZjAsIDB4N2YsIDB4MDB9IH0sCit7IDB4OGQ2ZiwJMSwJezB4MjJ9IH0sCit7IDB4OGQ3MCwJNCwJezB4YWQsIDB4MDcsIDB4YWMsIDB4MDZ9IH0sCit7IDB4OGQ3NCwJMTYsCXsweDhkLCAweDgyLCAweDhjLCAweDgzLCAweGUwLCAweDE0LCAweGZlLCAweGMzLCAweDk0LCAweDA0LCAweDQwLCAweDAzLCAweDdmLCAweGZmLCAweDIyLCAweGVlfSB9LAoreyAweDhkODQsCTE2LAl7MHg3NSwgMHhmMCwgMHgwOCwgMHhhNCwgMHgyNCwgMHgwMCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgyMCwgMHhhZiwgMHg4MiwgMHhmZSwgMHg4ZCwgMHg4Mn0gfSwKK3sgMHg4ZDk0LAkxNiwJezB4OGMsIDB4ODMsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MGQsIDB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4NDB9IH0sCit7IDB4OGRhNCwJMTYsCXsweGYwLCAweDgwLCAweDBiLCAweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGEzLCAweGEzLCAweGEzLCAweGUwLCAweDU0LCAweGJmLCAweGYwLCAweDdmLCAweDAwfSB9LAoreyAweDhkYjQsCTEsCXsweDIyfSB9LAoreyAweDhkYjUsCTE2LAl7MHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHgxNCwgMHhmZSwgMHhjMywgMHg5NCwgMHgwNCwgMHg0MCwgMHgwMywgMHg3ZiwgMHhmZiwgMHgyMiwgMHhhZn0gfSwKK3sgMHg4ZGM1LAkxNiwJezB4MDYsIDB4NzQsIDB4MDEsIDB4YTgsIDB4MDcsIDB4MDgsIDB4ODAsIDB4MDIsIDB4YzMsIDB4MzMsIDB4ZDgsIDB4ZmMsIDB4NDIsIDB4M2UsIDB4N2YsIDB4MDB9IH0sCit7IDB4OGRkNSwJMSwJezB4MjJ9IH0sCit7IDB4OGRkNiwJNCwJezB4OGUsIDB4NTcsIDB4OGYsIDB4NTh9IH0sCit7IDB4OGRkYSwJMTYsCXsweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGEzLCAweGUwLCAweGY1LCAweDVjLCAweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGUwLCAweGY1LCAweDU5LCAweGQzfSB9LAoreyAweDhkZWEsCTE2LAl7MHg5NCwgMHgwNCwgMHg0MCwgMHgwMywgMHg3ZiwgMHhmZiwgMHgyMiwgMHhlNSwgMHg1OSwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxNiwgMHgxNCwgMHg2MCwgMHgxZn0gfSwKK3sgMHg4ZGZhLAkxNiwJezB4MTQsIDB4NjAsIDB4MjgsIDB4MjQsIDB4MDMsIDB4NzAsIDB4MmUsIDB4N2UsIDB4N2UsIDB4N2YsIDB4ODAsIDB4NzUsIDB4NWEsIDB4N2UsIDB4NzUsIDB4NWJ9IH0sCit7IDB4OGUwYSwJMTYsCXsweDgwLCAweDgwLCAweDIyLCAweDdlLCAweDdlLCAweDdmLCAweDAwLCAweDc1LCAweDVhLCAweDdlLCAweDc1LCAweDViLCAweDAwLCAweDgwLCAweDE2LCAweDdlfSB9LAoreyAweDhlMWEsCTE2LAl7MHg3ZCwgMHg3ZiwgMHg4MCwgMHg3NSwgMHg1YSwgMHg3ZCwgMHg3NSwgMHg1YiwgMHg4MCwgMHg4MCwgMHgwYSwgMHg3ZSwgMHg3ZCwgMHg3ZiwgMHgwMCwgMHg3NX0gfSwKK3sgMHg4ZTJhLAkxNiwJezB4NWEsIDB4N2QsIDB4NzUsIDB4NWIsIDB4MDAsIDB4ZTUsIDB4NWMsIDB4NzAsIDB4MWIsIDB4ODUsIDB4NWIsIDB4ODIsIDB4ODUsIDB4NWEsIDB4ODMsIDB4NzR9IH0sCit7IDB4OGUzYSwJMTYsCXsweGZmLCAweGYwLCAweGU1LCAweDU5LCAweDI1LCAweGUwLCAweDI0LCAweGI1LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweDc0fSB9LAoreyAweDhlNGEsCTE2LAl7MHgwMSwgMHhmMCwgMHg4MCwgMHg0OCwgMHhlNSwgMHg1OCwgMHgyNCwgMHgwMiwgMHhmZiwgMHhlNCwgMHgzNSwgMHg1NywgMHhmZSwgMHhlNSwgMHg1YywgMHg2MH0gfSwKK3sgMHg4ZTVhLAkxNiwJezB4MjMsIDB4MGYsIDB4ZWYsIDB4YWMsIDB4MDYsIDB4NzAsIDB4MDEsIDB4MGUsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZTAsIDB4ZmQsIDB4MDV9IH0sCit7IDB4OGU2YSwJMTYsCXsweDViLCAweGU1LCAweDViLCAweGFhLCAweDVhLCAweDcwLCAweDAyLCAweDA1LCAweDVhLCAweDE0LCAweGY1LCAweDgyLCAweDhhLCAweDgzLCAweGVkLCAweGYwfSB9LAoreyAweDhlN2EsCTE2LAl7MHgxNSwgMHg1YywgMHg4MCwgMHhkOSwgMHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4MywgMHhhMywgMHhlMCwgMHhmZiwgMHhlNSwgMHg1OSwgMHgyNX0gfSwKK3sgMHg4ZThhLAkxNCwJezB4ZTAsIDB4MjQsIDB4YjUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4N2YsIDB4MDB9IH0sCit7IDB4OGU5OCwJMSwJezB4MjJ9IH0sCit7IDB4OGU5OSwJMTYsCXsweGVmLCAweDI0LCAweDA1LCAweGY1LCAweDU4LCAweGU0LCAweDNlLCAweGY1LCAweDU3LCAweDkwLCAweDAxLCAweDM1LCAweDc0LCAweDA3LCAweGYwLCAweDkwfSB9LAoreyAweDhlYTksCTE2LAl7MHgwMSwgMHg3YSwgMHg3NCwgMHgwMSwgMHhmMCwgMHhhMywgMHg3NCwgMHgzNiwgMHhmMCwgMHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4MywgMHhhM30gfSwKK3sgMHg4ZWI5LAkxNiwJezB4YTMsIDB4YTMsIDB4ZTAsIDB4ZmUsIDB4YTMsIDB4ZTAsIDB4OGUsIDB4NTksIDB4ZjUsIDB4NWEsIDB4ODUsIDB4NTgsIDB4ODIsIDB4ODUsIDB4NTcsIDB4ODN9IH0sCit7IDB4OGVjOSwJMTYsCXsweGUwLCAweDI0LCAweDllLCAweDYwLCAweDYxLCAweDI0LCAweGY5LCAweDYwLCAweDBlLCAweDI0LCAweGYxLCAweDcwLCAweDAzLCAweDAyLCAweDhmLCAweDdhfSB9LAoreyAweDhlZDksCTE2LAl7MHgyNCwgMHgxNCwgMHg2MCwgMHgwMywgMHgwMiwgMHg4ZiwgMHhjOCwgMHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4MywgMHhhMywgMHhlMCwgMHhmZX0gfSwKK3sgMHg4ZWU5LAkxNiwJezB4YTMsIDB4ZTAsIDB4ZmYsIDB4YzMsIDB4ZTQsIDB4OWYsIDB4ZjUsIDB4NWMsIDB4NzQsIDB4MDEsIDB4OWUsIDB4ZjUsIDB4NWIsIDB4ZDMsIDB4ZTUsIDB4NWN9IH0sCit7IDB4OGVmOSwJMTYsCXsweDk0LCAweDNmLCAweGU1LCAweDViLCAweDk0LCAweDAwLCAweDQwLCAweDA2LCAweDc1LCAweDViLCAweDAwLCAweDc1LCAweDVjLCAweDNmLCAweGQzLCAweGU1fSB9LAoreyAweDhmMDksCTE2LAl7MHg1YSwgMHg5NSwgMHg1YywgMHhlNSwgMHg1OSwgMHg5NSwgMHg1YiwgMHg1MCwgMHgwMywgMHgwMiwgMHg4ZiwgMHhjYiwgMHhhZSwgMHg1YiwgMHhhZiwgMHg1Y30gfSwKK3sgMHg4ZjE5LAkxNiwJezB4ODUsIDB4NTgsIDB4ODIsIDB4ODUsIDB4NTcsIDB4ODMsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ZWUsIDB4ZjAsIDB4ZmUsIDB4YTMsIDB4ZWYsIDB4ZjAsIDB4OGV9IH0sCit7IDB4OGYyOSwJMTYsCXsweDU5LCAweGY1LCAweDVhLCAweDAyLCAweDhmLCAweGNiLCAweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGEzLCAweGUwLCAweGZlLCAweGEzfSB9LAoreyAweDhmMzksCTE2LAl7MHhlMCwgMHhmZiwgMHhjMywgMHg3NCwgMHgzMCwgMHg5ZiwgMHhmNSwgMHg1YywgMHhlNCwgMHg5ZSwgMHhmNSwgMHg1YiwgMHhkMywgMHhlNSwgMHg1YywgMHg5NH0gfSwKK3sgMHg4ZjQ5LAkxNiwJezB4MTAsIDB4ZTUsIDB4NWIsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDYsIDB4NzUsIDB4NWIsIDB4MDAsIDB4NzUsIDB4NWMsIDB4MTAsIDB4ZDMsIDB4ZTUsIDB4NWF9IH0sCit7IDB4OGY1OSwJMTYsCXsweDk1LCAweDVjLCAweGU1LCAweDU5LCAweDk1LCAweDViLCAweDQwLCAweDZhLCAweGFlLCAweDViLCAweGFmLCAweDVjLCAweDg1LCAweDU4LCAweDgyLCAweDg1fSB9LAoreyAweDhmNjksCTE2LAl7MHg1NywgMHg4MywgMHhhMywgMHhhMywgMHhhMywgMHhlZSwgMHhmMCwgMHhmZSwgMHhhMywgMHhlZiwgMHhmMCwgMHg4ZSwgMHg1OSwgMHhmNSwgMHg1YSwgMHg4MH0gfSwKK3sgMHg4Zjc5LAkxNiwJezB4NTEsIDB4ODUsIDB4NTgsIDB4ODIsIDB4ODUsIDB4NTcsIDB4ODMsIDB4YTMsIDB4ZTAsIDB4ZmUsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4YzMsIDB4ZTQsIDB4OWZ9IH0sCit7IDB4OGY4OSwJMTYsCXsweGY1LCAweDVjLCAweGU0LCAweDllLCAweGY1LCAweDViLCAweDQ1LCAweDVjLCAweDYwLCAweDBiLCAweGQzLCAweGU1LCAweDVjLCAweDk0LCAweDNmLCAweGU1fSB9LAoreyAweDhmOTksCTE2LAl7MHg1YiwgMHg5NCwgMHgwMCwgMHg0MCwgMHgwNiwgMHg3NSwgMHg1YiwgMHgwMCwgMHg3NSwgMHg1YywgMHgzZiwgMHhkMywgMHhlNSwgMHg1YSwgMHg5NSwgMHg1Y30gfSwKK3sgMHg4ZmE5LAkxNiwJezB4ZTUsIDB4NTksIDB4OTUsIDB4NWIsIDB4NDAsIDB4MWMsIDB4YWUsIDB4NWIsIDB4YWYsIDB4NWMsIDB4ODUsIDB4NTgsIDB4ODIsIDB4ODUsIDB4NTcsIDB4ODN9IH0sCit7IDB4OGZiOSwJMTYsCXsweGEzLCAweGEzLCAweGEzLCAweGVlLCAweGYwLCAweGZlLCAweGEzLCAweGVmLCAweGYwLCAweDhlLCAweDU5LCAweGY1LCAweDVhLCAweDgwLCAweDAzLCAweDdmfSB9LAoreyAweDhmYzksCTE2LAl7MHgwMSwgMHgyMiwgMHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4MywgMHhlMCwgMHgyNCwgMHg5ZSwgMHg3MCwgMHgwMywgMHgwMiwgMHg5MCwgMHg4Yn0gfSwKK3sgMHg4ZmQ5LAkxNiwJezB4MjQsIDB4ZjksIDB4NjAsIDB4NTgsIDB4MjQsIDB4ZjEsIDB4NzAsIDB4MDMsIDB4MDIsIDB4OTAsIDB4ZGIsIDB4MjQsIDB4MTQsIDB4NjAsIDB4MDMsIDB4MDJ9IH0sCit7IDB4OGZlOSwJMTYsCXsweDkxLCAweDFmLCAweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGEzLCAweGUwLCAweGZlLCAweGEzLCAweGUwLCAweGZmLCAweGQzLCAweDk0fSB9LAoreyAweDhmZjksCTE2LAl7MHhmZiwgMHhlZSwgMHg5NCwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMiwgMHg5MSwgMHgxZiwgMHg5MCwgMHgwMSwgMHg3NSwgMHhlZiwgMHhmMCwgMHhlNSwgMHg1YX0gfSwKK3sgMHg5MDA5LAkxNiwJezB4MTUsIDB4NWEsIDB4YWUsIDB4NTksIDB4NzAsIDB4MDIsIDB4MTUsIDB4NTksIDB4NGUsIDB4NzAsIDB4MDMsIDB4MDIsIDB4OTEsIDB4MWYsIDB4OTAsIDB4MDF9IH0sCit7IDB4OTAxOSwJMTYsCXsweDc1LCAweGUwLCAweGZmLCAweDA0LCAweGYwLCAweGE4LCAweDA3LCAweGU2LCAweGZmLCAweDkwLCAweDAxLCAweDdhLCAweGU0LCAweDc1LCAweGYwLCAweDAxfSB9LAoreyAweDkwMjksCTE2LAl7MHgxMiwgMHhhMiwgMHg5NywgMHg4NSwgMHhmMCwgMHg4MiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHg4MCwgMHhkMiwgMHg4NSwgMHg1OCwgMHg4MiwgMHg4NX0gfSwKK3sgMHg5MDM5LAkxNiwJezB4NTcsIDB4ODMsIDB4YTMsIDB4ZTAsIDB4ZmUsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4YzMsIDB4OTQsIDB4ODAsIDB4ZWUsIDB4OTQsIDB4MDAsIDB4NTAsIDB4MDN9IH0sCit7IDB4OTA0OSwJMTYsCXsweDAyLCAweDkxLCAweDFmLCAweGQzLCAweGVmLCAweDk0LCAweGZmLCAweGVlLCAweDk0LCAweDAwLCAweDQwLCAweDAzLCAweDAyLCAweDkxLCAweDFmLCAweDkwfSB9LAoreyAweDkwNTksCTE2LAl7MHgwMSwgMHg3NiwgMHhlZiwgMHhmMCwgMHhlNSwgMHg1YSwgMHgxNSwgMHg1YSwgMHhhZSwgMHg1OSwgMHg3MCwgMHgwMiwgMHgxNSwgMHg1OSwgMHg0ZSwgMHg3MH0gfSwKK3sgMHg5MDY5LAkxNiwJezB4MDMsIDB4MDIsIDB4OTEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4NzYsIDB4ZTAsIDB4ZmYsIDB4MDQsIDB4ZjAsIDB4YTgsIDB4MDcsIDB4ZTYsIDB4ZmYsIDB4OTB9IH0sCit7IDB4OTA3OSwJMTYsCXsweDAxLCAweDdhLCAweGU0LCAweDc1LCAweGYwLCAweDAxLCAweDEyLCAweGEyLCAweDk3LCAweDg1LCAweGYwLCAweDgyLCAweGY1LCAweDgzLCAweGVmLCAweGYwfSB9LAoreyAweDkwODksCTE2LAl7MHg4MCwgMHhkMiwgMHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4MywgMHhhMywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHhmZiwgMHhjMywgMHg5NH0gfSwKK3sgMHg5MDk5LAkxNiwJezB4MjAsIDB4ZWUsIDB4OTQsIDB4MDAsIDB4NTAsIDB4MDMsIDB4MDIsIDB4OTEsIDB4MWYsIDB4ZDMsIDB4ZWYsIDB4OTQsIDB4MmYsIDB4ZWUsIDB4OTQsIDB4MDB9IH0sCit7IDB4OTBhOSwJMTYsCXsweDUwLCAweDc0LCAweDkwLCAweDAxLCAweDc3LCAweGVmLCAweGYwLCAweGU1LCAweDVhLCAweDE1LCAweDVhLCAweGFlLCAweDU5LCAweDcwLCAweDAyLCAweDE1fSB9LAoreyAweDkwYjksCTE2LAl7MHg1OSwgMHg0ZSwgMHg2MCwgMHg2MiwgMHg5MCwgMHgwMSwgMHg3NywgMHhlMCwgMHhmZiwgMHgwNCwgMHhmMCwgMHhhOCwgMHgwNywgMHhlNiwgMHhmZiwgMHg5MH0gfSwKK3sgMHg5MGM5LAkxNiwJezB4MDEsIDB4N2EsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDEsIDB4MTIsIDB4YTIsIDB4OTcsIDB4ODUsIDB4ZjAsIDB4ODIsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjB9IH0sCit7IDB4OTBkOSwJMTYsCXsweDgwLCAweGQ1LCAweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGEzLCAweGUwLCAweGZmLCAweGEzLCAweGUwLCAweDkwLCAweDAxLCAweDc4fSB9LAoreyAweDkwZTksCTE2LAl7MHhjZiwgMHhmMCwgMHhhMywgMHhlZiwgMHhmMCwgMHhlNSwgMHg1YSwgMHgxNSwgMHg1YSwgMHhhZSwgMHg1OSwgMHg3MCwgMHgwMiwgMHgxNSwgMHg1OSwgMHg0ZX0gfSwKK3sgMHg5MGY5LAkxNiwJezB4NjAsIDB4MjQsIDB4OTAsIDB4MDEsIDB4NzgsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDEsIDB4MTIsIDB4YTIsIDB4OTcsIDB4ODUsIDB4ZjAsIDB4ODIsIDB4ZjV9IH0sCit7IDB4OTEwOSwJMTYsCXsweDgzLCAweGUwLCAweGZmLCAweDkwLCAweDAxLCAweDdhLCAweGU0LCAweDc1LCAweGYwLCAweDAxLCAweDEyLCAweGEyLCAweDk3LCAweDg1LCAweGYwLCAweDgyfSB9LAoreyAweDkxMTksCTE2LAl7MHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHg4MCwgMHhjZiwgMHg3ZSwgMHgwMSwgMHg3ZiwgMHgzNSwgMHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4M30gfSwKK3sgMHg5MTI5LAkxMywJezB4YTMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4MDQsIDB4ZmQsIDB4MTIsIDB4OTEsIDB4NmEsIDB4N2YsIDB4MDB9IH0sCit7IDB4OTEzNiwJMSwJezB4MjJ9IH0sCit7IDB4OTEzNywJMTYsCXsweDhlLCAweDYyLCAweDhmLCAweDYzLCAweDhjLCAweDY0LCAweDhkLCAweDY1LCAweGFmLCAweDAzLCAweDFiLCAweGVmLCAweDYwLCAweDI0LCAweDA1LCAweDYzfSB9LAoreyAweDkxNDcsCTE2LAl7MHhlNSwgMHg2MywgMHhhZSwgMHg2MiwgMHg3MCwgMHgwMiwgMHgwNSwgMHg2MiwgMHgxNCwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHhmZiwgMHgwNX0gfSwKK3sgMHg5MTU3LAkxNiwJezB4NjUsIDB4ZTUsIDB4NjUsIDB4YWMsIDB4NjQsIDB4NzAsIDB4MDIsIDB4MDUsIDB4NjQsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjB9IH0sCit7IDB4OTE2NywJMywJezB4ODAsIDB4ZDYsIDB4MjJ9IH0sCit7IDB4OTE2YSwJNiwJezB4OGQsIDB4NWQsIDB4YWIsIDB4MDcsIDB4YWEsIDB4MDZ9IH0sCit7IDB4OTE3MCwJMTYsCXsweDc1LCAweDYxLCAweDQwLCAweDc1LCAweDYwLCAweDBkLCAweDc1LCAweDVmLCAweDAzLCAweDc1LCAweDVlLCAweDAwLCAweDkwLCAweDdmLCAweGMyLCAweGUwfSB9LAoreyAweDkxODAsCTE2LAl7MHgyMCwgMHhlMSwgMHhmOSwgMHhhZiwgMHg2MSwgMHhhZSwgMHg2MCwgMHhhZCwgMHg1ZiwgMHhhYywgMHg1ZSwgMHhlYywgMHg0ZCwgMHg0ZSwgMHg0ZiwgMHg3MH0gfSwKK3sgMHg5MTkwLAkxNiwJezB4MDgsIDB4OTAsIDB4N2YsIDB4YzIsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4ODAsIDB4ZDcsIDB4OTAsIDB4N2YsIDB4YzIsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MTZ9IH0sCit7IDB4OTFhMCwJMTYsCXsweGFmLCAweDAzLCAweGFlLCAweDAyLCAweDdjLCAweDdiLCAweDdkLCAweDgwLCAweGFiLCAweDVkLCAweDEyLCAweDkxLCAweDM3LCAweDkwLCAweDdmLCAweGMzfSB9LAoreyAweDkxYjAsCTgsCXsweGU1LCAweDVkLCAweGYwLCAweDdmLCAweDAxLCAweDIyLCAweDdmLCAweDAwfSB9LAoreyAweDkxYjgsCTEsCXsweDIyfSB9LAoreyAweDkxYjksCTE2LAl7MHg5MCwgMHgwMSwgMHg4NCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhhMywgMHhlNSwgMHgzMywgMHhmMCwgMHg5MCwgMHgwYSwgMHhmNSwgMHhlNCwgMHg5MywgMHg5MH0gfSwKK3sgMHg5MWM5LAkxNiwJezB4MDEsIDB4ODYsIDB4ZjAsIDB4OTAsIDB4MGEsIDB4ZjYsIDB4ZTQsIDB4OTMsIDB4OTAsIDB4MDEsIDB4ODcsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4MDEsIDB4N2N9IH0sCit7IDB4OTFkOSwJMTYsCXsweGYwLCAweGEzLCAweGYwLCAweGEzLCAweGYwLCAweGEzLCAweGYwLCAweGEzLCAweGYwLCAweGEzLCAweDc0LCAweDEwLCAweGYwLCAweGEzLCAweDc0LCAweDAxfSB9LAoreyAweDkxZTksCTE2LAl7MHhmMCwgMHhhMywgMHg3NCwgMHg4OCwgMHhmMCwgMHg3ZSwgMHgwMSwgMHg3ZiwgMHg3YywgMHgxMiwgMHgxOSwgMHhjMSwgMHg3ZSwgMHgwMSwgMHg3ZiwgMHg4NH0gfSwKK3sgMHg5MWY5LAk3LAl7MHg3ZCwgMHgxNCwgMHgxMiwgMHg5MSwgMHg2YSwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg5MjAwLAkxLAl7MHgyMn0gfSwKK3sgMHg5MjAxLAkxNiwJezB4N2UsIDB4N2IsIDB4N2YsIDB4NDAsIDB4NzUsIDB4NGUsIDB4N2IsIDB4NzUsIDB4NGYsIDB4NDAsIDB4OTAsIDB4N2YsIDB4ZDMsIDB4ZTAsIDB4ZmYsIDB4ODV9IH0sCit7IDB4OTIxMSwJMTYsCXsweDRlLCAweDUxLCAweDg1LCAweDRmLCAweDUyLCAweGU1LCAweDUyLCAweDI0LCAweDAxLCAweGY1LCAweDU2LCAweGU0LCAweDM1LCAweDUxLCAweGY1LCAweDU1fSB9LAoreyAweDkyMjEsCTE2LAl7MHhlNCwgMHhmNSwgMHg1MCwgMHg4NSwgMHg1MiwgMHg4MiwgMHg4NSwgMHg1MSwgMHg4MywgMHhlMCwgMHhmZSwgMHgxNCwgMHhiNCwgMHgwYywgMHgwMCwgMHg1MH0gfSwKK3sgMHg5MjMxLAkxNiwJezB4NWIsIDB4OTAsIDB4OTIsIDB4MzksIDB4ZjgsIDB4MjgsIDB4MjgsIDB4NzMsIDB4MDIsIDB4OTIsIDB4NWQsIDB4MDIsIDB4OTIsIDB4NWQsIDB4MDIsIDB4OTJ9IH0sCit7IDB4OTI0MSwJMTYsCXsweDY3LCAweDAyLCAweDkyLCAweDcxLCAweDAyLCAweDkyLCAweDcxLCAweDAyLCAweDkyLCAweDcxLCAweDAyLCAweDkyLCAweDg1LCAweDAyLCAweDkyLCAweDVkfSB9LAoreyAweDkyNTEsCTE2LAl7MHgwMiwgMHg5MiwgMHg3YiwgMHgwMiwgMHg5MiwgMHg1ZCwgMHgwMiwgMHg5MiwgMHg4ZCwgMHgwMiwgMHg5MiwgMHg1ZCwgMHhlZiwgMHg2NCwgMHgwMiwgMHg2MH0gfSwKK3sgMHg5MjYxLAkxNiwJezB4MmIsIDB4NzUsIDB4NTAsIDB4ZmYsIDB4ODAsIDB4MjYsIDB4ZWYsIDB4NjQsIDB4MGUsIDB4NjAsIDB4MjEsIDB4NzUsIDB4NTAsIDB4ZmYsIDB4ODAsIDB4MWN9IH0sCit7IDB4OTI3MSwJMTYsCXsweGVmLCAweDY0LCAweDAzLCAweDYwLCAweDE3LCAweDc1LCAweDUwLCAweGZmLCAweDgwLCAweDEyLCAweGVmLCAweDY0LCAweDAzLCAweDYwLCAweDBkLCAweDc1fSB9LAoreyAweDkyODEsCTE2LAl7MHg1MCwgMHhmZiwgMHg4MCwgMHgwOCwgMHhlZiwgMHg2NCwgMHgwNiwgMHg2MCwgMHgwMywgMHg3NSwgMHg1MCwgMHhmZiwgMHhlNSwgMHg1MCwgMHg2MCwgMHgxNX0gfSwKK3sgMHg5MjkxLAkxNiwJezB4OTAsIDB4MDEsIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4YTMsIDB4ZWUsIDB4ZjAsIDB4N2UsIDB4MDEsIDB4N2YsIDB4OTgsIDB4N2QsIDB4MDIsIDB4MTJ9IH0sCit7IDB4OTJhMSwJMTYsCXsweDkxLCAweDZhLCAweGFmLCAweDUwLCAweDIyLCAweGU0LCAweGY1LCAweDUwLCAweDg1LCAweDUyLCAweDgyLCAweDg1LCAweDUxLCAweDgzLCAweGUwLCAweDE0fSB9LAoreyAweDkyYjEsCTE2LAl7MHhiNCwgMHgwZiwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMiwgMHg5MywgMHhjZiwgMHg5MCwgMHg5MiwgMHhjMCwgMHhmOCwgMHgyOCwgMHgyOCwgMHg3MywgMHgwMn0gfSwKK3sgMHg5MmMxLAkxNiwJezB4OTIsIDB4ZWQsIDB4MDIsIDB4OTIsIDB4ZjksIDB4MDIsIDB4OTMsIDB4MDUsIDB4MDIsIDB4OTMsIDB4NTMsIDB4MDIsIDB4OTMsIDB4NWUsIDB4MDIsIDB4OTN9IH0sCit7IDB4OTJkMSwJMTYsCXsweDY5LCAweDAyLCAweDkzLCAweDc0LCAweDAyLCAweDkzLCAweDdmLCAweDAyLCAweDkzLCAweDhhLCAweDAyLCAweDkzLCAweDk1LCAweDAyLCAweDkzLCAweGEwfSB9LAoreyAweDkyZTEsCTE2LAl7MHgwMiwgMHg5MywgMHhhNywgMHgwMiwgMHg5MywgMHhjZiwgMHgwMiwgMHg5MywgMHhiMiwgMHgwMiwgMHg5MywgMHhiZCwgMHhhZiwgMHg1NiwgMHhhZSwgMHg1NX0gfSwKK3sgMHg5MmYxLAkxNiwJezB4MTIsIDB4ODQsIDB4NDEsIDB4OGYsIDB4NTAsIDB4MDIsIDB4OTMsIDB4ZDIsIDB4YWYsIDB4NTYsIDB4YWUsIDB4NTUsIDB4MTIsIDB4ODUsIDB4NjEsIDB4OGZ9IH0sCit7IDB4OTMwMSwJMTYsCXsweDUwLCAweDAyLCAweDkzLCAweGQyLCAweDg1LCAweDU1LCAweDUzLCAweDg1LCAweDU2LCAweDU0LCAweGU1LCAweDU0LCAweDI0LCAweDAxLCAweGZmLCAweGU0fSB9LAoreyAweDkzMTEsCTE2LAl7MHgzNSwgMHg1MywgMHhmZSwgMHgxMiwgMHg4NiwgMHhiZSwgMHhhZiwgMHg1NCwgMHhhZSwgMHg1MywgMHgxMiwgMHg4NywgMHg1MSwgMHg4ZiwgMHg1MCwgMHhlZn0gfSwKK3sgMHg5MzIxLAkxNiwJezB4NjQsIDB4MDEsIDB4NjAsIDB4MDMsIDB4MDIsIDB4OTMsIDB4ZDIsIDB4YWYsIDB4NTQsIDB4YWUsIDB4NTMsIDB4MTIsIDB4ODcsIDB4YTYsIDB4OGYsIDB4NTB9IH0sCit7IDB4OTMzMSwJMTYsCXsweGU1LCAweDUwLCAweDcwLCAweDAzLCAweDAyLCAweDkzLCAweGQyLCAweDg1LCAweDU0LCAweDgyLCAweDg1LCAweDUzLCAweDgzLCAweGUwLCAweDc1LCAweGYwfSB9LAoreyAweDkzNDEsCTE2LAl7MHgwZCwgMHhhNCwgMHgyNCwgMHhmNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwMiwgMHhhZiwgMHg4MiwgMHhmZSwgMHgxMiwgMHg4NywgMHhhNiwgMHgwMn0gfSwKK3sgMHg5MzUxLAkxNiwJezB4OTMsIDB4ZDIsIDB4YWYsIDB4NTYsIDB4YWUsIDB4NTUsIDB4MTIsIDB4OGMsIDB4YTYsIDB4OGYsIDB4NTAsIDB4ODAsIDB4NzQsIDB4YWYsIDB4NTYsIDB4YWV9IH0sCit7IDB4OTM2MSwJMTYsCXsweDU1LCAweDEyLCAweDhkLCAweDI3LCAweDhmLCAweDUwLCAweDgwLCAweDY5LCAweGFmLCAweDU2LCAweGFlLCAweDU1LCAweDEyLCAweDhkLCAweDcwLCAweDhmfSB9LAoreyAweDkzNzEsCTE2LAl7MHg1MCwgMHg4MCwgMHg1ZSwgMHhhZiwgMHg0ZiwgMHhhZSwgMHg0ZSwgMHgxMiwgMHg4ZSwgMHg5OSwgMHg4ZiwgMHg1MCwgMHg4MCwgMHg1MywgMHhhZiwgMHg1Nn0gfSwKK3sgMHg5MzgxLAkxNiwJezB4YWUsIDB4NTUsIDB4MTIsIDB4OGIsIDB4YmQsIDB4OGYsIDB4NTAsIDB4ODAsIDB4NDgsIDB4YWYsIDB4NTYsIDB4YWUsIDB4NTUsIDB4MTIsIDB4ODYsIDB4MmR9IH0sCit7IDB4OTM5MSwJMTYsCXsweDhmLCAweDUwLCAweDgwLCAweDNkLCAweGFmLCAweDU2LCAweGFlLCAweDU1LCAweDEyLCAweDhjLCAweDYyLCAweDhmLCAweDUwLCAweDgwLCAweDMyLCAweDEyfSB9LAoreyAweDkzYTEsCTE2LAl7MHg5MSwgMHhiOSwgMHg4ZiwgMHg1MCwgMHg4MCwgMHgyYiwgMHhhZiwgMHg1NiwgMHhhZSwgMHg1NSwgMHgxMiwgMHg4ZCwgMHhiNSwgMHg4ZiwgMHg1MCwgMHg4MH0gfSwKK3sgMHg5M2IxLAkxNiwJezB4MjAsIDB4YWYsIDB4NTYsIDB4YWUsIDB4NTUsIDB4MTIsIDB4OGQsIDB4ZDYsIDB4OGYsIDB4NTAsIDB4ODAsIDB4MTUsIDB4YWYsIDB4NGYsIDB4YWUsIDB4NGV9IH0sCit7IDB4OTNjMSwJMTYsCXsweDdjLCAweDAyLCAweDdkLCAweGFmLCAweDdiLCAweDQwLCAweDEyLCAweDkxLCAweDM3LCAweGU0LCAweGY1LCAweDUwLCAweDgwLCAweDAzLCAweDc1LCAweDUwfSB9LAoreyAweDkzZDEsCTE2LAl7MHhmZiwgMHhlNSwgMHg1MCwgMHg2MCwgMHgxZCwgMHg5MCwgMHgwMSwgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHg4NSwgMHg1MiwgMHg4MiwgMHg4NSwgMHg1MX0gfSwKK3sgMHg5M2UxLAkxNiwJezB4ODMsIDB4ZTAsIDB4OTAsIDB4MDEsIDB4OTksIDB4ZjAsIDB4N2UsIDB4MDEsIDB4N2YsIDB4OTgsIDB4N2QsIDB4MDIsIDB4MTIsIDB4OTEsIDB4NmEsIDB4YWZ9IH0sCit7IDB4OTNmMSwJMTYsCXsweDUwLCAweDIyLCAweDg1LCAweDUyLCAweDgyLCAweDg1LCAweDUxLCAweDgzLCAweGUwLCAweGZmLCAweDE0LCAweDI0LCAweGZhLCAweDUwLCAweDA0LCAweDI0fSB9LAoreyAweDk0MDEsCTE2LAl7MHhmZSwgMHg3MCwgMHgxZiwgMHg5MCwgMHgwMSwgMHg5OCwgMHg3NCwgMHgxMCwgMHhmMCwgMHhhMywgMHhlZiwgMHhmMCwgMHg4NSwgMHg1NiwgMHg4MiwgMHg4NX0gfSwKK3sgMHg5NDExLAkxNiwJezB4NTUsIDB4ODMsIDB4ZTAsIDB4OTAsIDB4MDEsIDB4OWEsIDB4ZjAsIDB4N2UsIDB4MDEsIDB4N2YsIDB4OTgsIDB4N2QsIDB4MDMsIDB4MTIsIDB4OTEsIDB4NmF9IH0sCit7IDB4OTQyMSwJNCwJezB4OGYsIDB4NTAsIDB4YWYsIDB4NTB9IH0sCit7IDB4OTQyNSwJMSwJezB4MjJ9IH0sCit7IDB4OTQyNiwJOCwJezB4OGYsIDB4NTEsIDB4OGUsIDB4NTAsIDB4OGQsIDB4NGYsIDB4OGMsIDB4NGV9IH0sCit7IDB4OTQyZSwJMTYsCXsweDc1LCAweDU4LCAweDAxLCAweDc1LCAweDU5LCAweDljLCAweGU0LCAweGY1LCAweDU3LCAweGFmLCAweDUzLCAweDE1LCAweDUzLCAweGVmLCAweDcwLCAweDAzfSB9LAoreyAweDk0M2UsCTE2LAl7MHgwMiwgMHg5NCwgMHhjNCwgMHhhZiwgMHg1MiwgMHhlNCwgMHhmYywgMHhmZCwgMHhmZSwgMHhmOCwgMHhmOSwgMHhmYSwgMHhhYiwgMHgwNywgMHhhZiwgMHg1MX0gfSwKK3sgMHg5NDRlLAkxNiwJezB4YWUsIDB4NTAsIDB4YWQsIDB4NGYsIDB4YWMsIDB4NGUsIDB4MTIsIDB4YTMsIDB4MjEsIDB4YWYsIDB4MDMsIDB4OGYsIDB4NTYsIDB4YWYsIDB4NTEsIDB4YWV9IH0sCit7IDB4OTQ1ZSwJMTYsCXsweDUwLCAweGFkLCAweDRmLCAweGFjLCAweDRlLCAweGMwLCAweDA0LCAweGMwLCAweDA1LCAweGMwLCAweDA2LCAweGMwLCAweDA3LCAweGFmLCAweDUyLCAweGU0fSB9LAoreyAweDk0NmUsCTE2LAl7MHhmYywgMHhmZCwgMHhmZSwgMHhmOCwgMHhmOSwgMHhmYSwgMHhhYiwgMHgwNywgMHhkMCwgMHgwNywgMHhkMCwgMHgwNiwgMHhkMCwgMHgwNSwgMHhkMCwgMHgwNH0gfSwKK3sgMHg5NDdlLAkxNiwJezB4MTIsIDB4YTMsIDB4MjEsIDB4OGYsIDB4NTEsIDB4OGUsIDB4NTAsIDB4OGQsIDB4NGYsIDB4OGMsIDB4NGUsIDB4ZTUsIDB4NTYsIDB4MjQsIDB4MzAsIDB4ZjV9IH0sCit7IDB4OTQ4ZSwJMTYsCXsweDU2LCAweGQzLCAweDk0LCAweDM5LCAweDQwLCAweDA2LCAweDc0LCAweDA3LCAweDI1LCAweDU2LCAweGY1LCAweDU2LCAweDA1LCAweDU5LCAweGU1LCAweDU5fSB9LAoreyAweDk0OWUsCTE2LAl7MHhhZSwgMHg1OCwgMHg3MCwgMHgwMiwgMHgwNSwgMHg1OCwgMHgxNCwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlNCwgMHhmMCwgMHgwNSwgMHg1OSwgMHhlNX0gfSwKK3sgMHg5NGFlLAkxNiwJezB4NTksIDB4YWUsIDB4NTgsIDB4NzAsIDB4MDIsIDB4MDUsIDB4NTgsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTUsIDB4NTYsIDB4ZjAsIDB4MDV9IH0sCit7IDB4OTRiZSwJMTYsCXsweDU3LCAweDA1LCAweDU3LCAweDAyLCAweDk0LCAweDM3LCAweGU1LCAweDU5LCAweDE1LCAweDU5LCAweDcwLCAweDAyLCAweDE1LCAweDU4LCAweGFmLCAweDU3fSB9LAoreyAweDk0Y2UsCTE2LAl7MHgxNSwgMHg1NywgMHhlZiwgMHg2MCwgMHgyMywgMHhlNSwgMHg1OSwgMHgxNSwgMHg1OSwgMHhhZSwgMHg1OCwgMHg3MCwgMHgwMiwgMHgxNSwgMHg1OCwgMHhmNX0gfSwKK3sgMHg5NGRlLAkxNiwJezB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4MDUsIDB4NTUsIDB4ZTUsIDB4NTUsIDB4YWMsIDB4NTQsIDB4NzAsIDB4MDIsIDB4MDUsIDB4NTQsIDB4MTR9IH0sCit7IDB4OTRlZSwJOCwJezB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4ODAsIDB4ZDZ9IH0sCit7IDB4OTRmNiwJMSwJezB4MjJ9IH0sCit7IDB4OTRmNywJMTYsCXsweGU0LCAweDkwLCAweDAxLCAweGM5LCAweGYwLCAweDdlLCAweDAxLCAweDdmLCAweGNhLCAweDkwLCAweDAxLCAweGJlLCAweGVlLCAweGYwLCAweGEzLCAweGVmfSB9LAoreyAweDk1MDcsCTEwLAl7MHhmMCwgMHg5MCwgMHgwMSwgMHhjMiwgMHhlZSwgMHhmMCwgMHhhMywgMHhlZiwgMHhmMCwgMHgyMn0gfSwKK3sgMHg5NTExLAkxNiwJezB4YWEsIDB4MDcsIDB4YTksIDB4MDUsIDB4OTAsIDB4MDEsIDB4YzksIDB4ZTAsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTAsIDB4NjEsIDB4YWMsIDB4MDIsIDB4NzR9IH0sCit7IDB4OTUyMSwJMTYsCXsweDAxLCAweDdlLCAweDAwLCAweGE4LCAweDA0LCAweDA4LCAweDgwLCAweDA1LCAweGMzLCAweDMzLCAweGNlLCAweDMzLCAweGNlLCAweGQ4LCAweGY5LCAweGZmfSB9LAoreyAweDk1MzEsCTE2LAl7MHhlNCwgMHhlZiwgMHg1NSwgMHgzNCwgMHg2MCwgMHg0NSwgMHhlYSwgMHgwNCwgMHhmZiwgMHg5MCwgMHgwMSwgMHhjMiwgMHhlMCwgMHhmYywgMHhhMywgMHhlMH0gfSwKK3sgMHg5NTQxLAkxNiwJezB4ZmQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4YTMsIDB4ZTksIDB4ZjAsIDB4OGQsIDB4ODIsIDB4OGMsIDB4ODMsIDB4YTMsIDB4YTN9IH0sCit7IDB4OTU1MSwJMTYsCXsweGViLCAweGYwLCAweDkwLCAweDAxLCAweGMyLCAweGU0LCAweDc1LCAweGYwLCAweDAzLCAweDEyLCAweGEyLCAweDgxLCAweGZjLCAweGQzLCAweGU1LCAweGYwfSB9LAoreyAweDk1NjEsCTE2LAl7MHg5NCwgMHg4NywgMHhlYywgMHg5NCwgMHgwMiwgMHg0MCwgMHgwYSwgMHg5MCwgMHgwMSwgMHhjMiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhhMywgMHg3NCwgMHhjYX0gfSwKK3sgMHg5NTcxLAkxNiwJezB4ZjAsIDB4YzIsIDB4YWYsIDB4OTAsIDB4MDEsIDB4YzksIDB4ZTAsIDB4MDQsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4N2YsIDB4MDEsIDB4MjIsIDB4N2YsIDB4MDB9IH0sCit7IDB4OTU4MSwJMSwJezB4MjJ9IH0sCit7IDB4OTU4MiwJMTYsCXsweDkwLCAweDAxLCAweGM5LCAweGUwLCAweGQzLCAweDk0LCAweDAwLCAweDQwLCAweDU1LCAweDkwLCAweDAxLCAweGJlLCAweGUwLCAweGZjLCAweGEzLCAweGUwfSB9LAoreyAweDk1OTIsCTE2LAl7MHhhYSwgMHgwNCwgMHhmOSwgMHg3YiwgMHgwMSwgMHhjMCwgMHgwMywgMHhjMCwgMHgwMiwgMHhjMCwgMHgwMSwgMHhhYSwgMHgwNiwgMHhhOSwgMHgwNywgMHhhOH0gfSwKK3sgMHg5NWEyLAkxNiwJezB4MDEsIDB4YWMsIDB4MDIsIDB4YWQsIDB4MDMsIDB4ZDAsIDB4MDEsIDB4ZDAsIDB4MDIsIDB4ZDAsIDB4MDMsIDB4N2UsIDB4MDAsIDB4N2YsIDB4MDMsIDB4MTJ9IH0sCit7IDB4OTViMiwJMTYsCXsweGEyLCAweDEyLCAweDkwLCAweDAxLCAweGJlLCAweGU0LCAweDc1LCAweGYwLCAweDAzLCAweDEyLCAweGEyLCAweDgxLCAweGZjLCAweGQzLCAweGU1LCAweGYwfSB9LAoreyAweDk1YzIsCTE2LAl7MHg5NCwgMHg4NywgMHhlYywgMHg5NCwgMHgwMiwgMHg0MCwgMHgwYSwgMHg5MCwgMHgwMSwgMHhiZSwgMHg3NCwgMHgwMSwgMHhmMCwgMHhhMywgMHg3NCwgMHhjYX0gfSwKK3sgMHg5NWQyLAkxNiwJezB4ZjAsIDB4YzIsIDB4YWYsIDB4OTAsIDB4MDEsIDB4YzksIDB4ZTAsIDB4MTQsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4N2YsIDB4MDEsIDB4MjIsIDB4N2YsIDB4MDB9IH0sCit7IDB4OTVlMiwJMSwJezB4MjJ9IH0sCit7IDB4OTVlMywJMTYsCXsweDkwLCAweDdmLCAweGMyLCAweGUwLCAweDIwLCAweGUxLCAweDczLCAweDdlLCAweDdiLCAweDdmLCAweDgwLCAweDc1LCAweDUzLCAweDdiLCAweDc1LCAweDU0fSB9LAoreyAweDk1ZjMsCTE2LAl7MHg4MCwgMHhlNSwgMHg1NCwgMHgyNCwgMHgwMSwgMHhmZiwgMHhlNCwgMHgzNSwgMHg1MywgMHhhOSwgMHgwNywgMHg3YiwgMHgwMSwgMHg4YiwgMHg1NSwgMHhmNX0gfSwKK3sgMHg5NjAzLAkxNiwJezB4NTYsIDB4ODksIDB4NTcsIDB4ZmUsIDB4MTIsIDB4OTUsIDB4ODIsIDB4ZWYsIDB4NjAsIDB4NTAsIDB4YWIsIDB4NTUsIDB4YWEsIDB4NTYsIDB4YTksIDB4NTd9IH0sCit7IDB4OTYxMywJMTYsCXsweDEyLCAweGEyLCAweDNiLCAweDE0LCAweGZmLCAweDkwLCAweDAwLCAweDAxLCAweDEyLCAweGEyLCAweDU0LCAweGI0LCAweDAyLCAweDE2LCAweGMyLCAweGFmfSB9LAoreyAweDk2MjMsCTE2LAl7MHhlZiwgMHg3NSwgMHhmMCwgMHgwOCwgMHhhNCwgMHgyNCwgMHgwMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgyMCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NH0gfSwKK3sgMHg5NjMzLAkxNiwJezB4MDQsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4NzQsIDB4MDEsIDB4N2UsIDB4MDAsIDB4YTgsIDB4MDcsIDB4MDgsIDB4ODAsIDB4MDUsIDB4YzMsIDB4MzMsIDB4Y2V9IH0sCit7IDB4OTY0MywJMTYsCXsweDMzLCAweGNlLCAweGQ4LCAweGY5LCAweGZmLCAweGU0LCAweGVmLCAweDU1LCAweDM0LCAweDYwLCAweDBmLCAweDg1LCAweDU0LCAweDgyLCAweDg1LCAweDUzfSB9LAoreyAweDk2NTMsCTEwLAl7MHg4MywgMHg3NCwgMHgwZCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwNCwgMHhmMH0gfSwKK3sgMHg5NjVkLAkxLAl7MHgyMn0gfSwKK3sgMHg5NjVlLAkxNiwJezB4MTIsIDB4OTUsIDB4ZTMsIDB4ZTQsIDB4ZjUsIDB4NGUsIDB4NzQsIDB4M2EsIDB4MjUsIDB4NGUsIDB4ZjgsIDB4ZTYsIDB4NTQsIDB4ZjAsIDB4ZjUsIDB4NGZ9IH0sCit7IDB4OTY2ZSwJMTYsCXsweDc0LCAweGM1LCAweDI1LCAweDRlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDAxLCAweGY1LCAweDgzLCAweGUwLCAweDY1LCAweDRmLCAweGZmLCAweGM0fSB9LAoreyAweDk2N2UsCTE2LAl7MHg1NCwgMHgwZiwgMHhmNSwgMHg1MCwgMHg2MCwgMHgyMiwgMHg3NCwgMHhjNSwgMHgyNSwgMHg0ZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwMSwgMHhmNX0gfSwKK3sgMHg5NjhlLAkxNiwJezB4ODMsIDB4ZTUsIDB4NGYsIDB4ZjAsIDB4YWYsIDB4NGUsIDB4N2QsIDB4MDEsIDB4ZTUsIDB4NGYsIDB4NDUsIDB4NTAsIDB4ZmIsIDB4MTIsIDB4OTUsIDB4MTF9IH0sCit7IDB4OTY5ZSwJMTYsCXsweGVmLCAweDcwLCAweDA1LCAweDEyLCAweDk1LCAweGUzLCAweDgwLCAweGVjLCAweDA1LCAweDRlLCAweGU1LCAweDRlLCAweGMzLCAweDk0LCAweDA0LCAweDQwfSB9LAoreyAweDk2YWUsCTE2LAl7MHhiNSwgMHgxMiwgMHg5NSwgMHhlMywgMHhlNSwgMHgzZSwgMHg2MCwgMHg0OCwgMHhlNCwgMHhmNSwgMHg0ZSwgMHhhZiwgMHg0ZSwgMHg3NCwgMHgwMSwgMHhhOH0gfSwKK3sgMHg5NmJlLAkxNiwJezB4MDcsIDB4MDgsIDB4ODAsIDB4MDIsIDB4YzMsIDB4MzMsIDB4ZDgsIDB4ZmMsIDB4ZjUsIDB4NGYsIDB4NTUsIDB4M2UsIDB4NjAsIDB4MjksIDB4ZTUsIDB4NGV9IH0sCit7IDB4OTZjZSwJMTYsCXsweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDA1LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDIwLCAweGY1LCAweDgzLCAweGUwLCAweDMwLCAweGU2fSB9LAoreyAweDk2ZGUsCTE2LAl7MHgxNiwgMHhhZiwgMHg0ZSwgMHg3ZCwgMHgwNCwgMHg3YiwgMHg4MCwgMHgxMiwgMHg5NSwgMHgxMSwgMHhlZiwgMHg3MCwgMHgwNSwgMHgxMiwgMHg5NSwgMHhlM30gfSwKK3sgMHg5NmVlLAkxNiwJezB4ODAsIDB4ZWYsIDB4ZTUsIDB4NGYsIDB4ZjQsIDB4NTIsIDB4M2UsIDB4MDUsIDB4NGUsIDB4ZTUsIDB4NGUsIDB4YzMsIDB4OTQsIDB4MDQsIDB4NDAsIDB4YmJ9IH0sCit7IDB4OTZmZSwJMTYsCXsweDkwLCAweDAzLCAweDAwLCAweGUwLCAweDYwLCAweDAzLCAweDAyLCAweDk3LCAweGRmLCAweDc0LCAweDE5LCAweGYwLCAweGU1LCAweDMzLCAweGMzLCAweDk0fSB9LAoreyAweDk3MGUsCTE2LAl7MHgwMSwgMHg0MCwgMHgwZCwgMHg5MCwgMHgyMCwgMHg3OCwgMHhlMCwgMHg1NCwgMHgwZiwgMHg3NSwgMHg1MSwgMHgwMCwgMHhmNSwgMHg1MiwgMHg4MCwgMHgwOX0gfSwKK3sgMHg5NzFlLAkxNiwJezB4N2YsIDB4MDIsIDB4MTIsIDB4MTEsIDB4MjcsIDB4OGUsIDB4NTEsIDB4OGYsIDB4NTIsIDB4YzMsIDB4ZTUsIDB4NTEsIDB4NjQsIDB4ODAsIDB4OTQsIDB4ODB9IH0sCit7IDB4OTcyZSwJMTYsCXsweDQwLCAweGRhLCAweDkwLCAweDAxLCAweGJjLCAweGUwLCAweDY1LCAweDUyLCAweGYwLCAweDYwLCAweDM3LCAweGU0LCAweGY1LCAweDRlLCAweGFmLCAweDRlfSB9LAoreyAweDk3M2UsCTE2LAl7MHg3NCwgMHgwMSwgMHhhOCwgMHgwNywgMHgwOCwgMHg4MCwgMHgwMiwgMHhjMywgMHgzMywgMHhkOCwgMHhmYywgMHhmNSwgMHg0ZiwgMHg5MCwgMHgwMSwgMHhiY30gfSwKK3sgMHg5NzRlLAkxNiwJezB4ZTAsIDB4NTUsIDB4NGYsIDB4NjAsIDB4MTQsIDB4YWYsIDB4NGUsIDB4N2QsIDB4MDgsIDB4ZTUsIDB4NGYsIDB4NTUsIDB4NTIsIDB4ZmIsIDB4MTIsIDB4OTV9IH0sCit7IDB4OTc1ZSwJMTYsCXsweDExLCAweGVmLCAweDcwLCAweDA1LCAweDEyLCAweDk1LCAweGUzLCAweDgwLCAweGVjLCAweDA1LCAweDRlLCAweGU1LCAweDRlLCAweGMzLCAweDk0LCAweDA0fSB9LAoreyAweDk3NmUsCTE2LAl7MHg0MCwgMHhjYywgMHg5MCwgMHgwMSwgMHhiYywgMHhlNSwgMHg1MiwgMHhmMCwgMHhlNCwgMHhmNSwgMHg0ZSwgMHhjMiwgMHhhZiwgMHg3NCwgMHgzNiwgMHgyNX0gfSwKK3sgMHg5NzdlLAkxNiwJezB4NGUsIDB4ZjgsIDB4ZTYsIDB4ZjUsIDB4NGYsIDB4ZTQsIDB4ZjYsIDB4ZDIsIDB4YWYsIDB4NTMsIDB4NGYsIDB4MWUsIDB4ZTUsIDB4NGYsIDB4NjAsIDB4MTF9IH0sCit7IDB4OTc4ZSwJMTYsCXsweGFmLCAweDRlLCAweDdkLCAweDAyLCAweGFiLCAweDRmLCAweDEyLCAweDk1LCAweDExLCAweGVmLCAweDcwLCAweDA1LCAweDEyLCAweDk1LCAweGUzLCAweDgwfSB9LAoreyAweDk3OWUsCTE2LAl7MHhlZiwgMHg3NCwgMHgyZCwgMHgyNSwgMHg0ZSwgMHhmOCwgMHhlNiwgMHhmNSwgMHg0ZiwgMHg3NCwgMHhmYywgMHgyNSwgMHg0ZSwgMHhmNSwgMHg4MiwgMHhlNH0gfSwKK3sgMHg5N2FlLAkxNiwJezB4MzQsIDB4MDIsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjUsIDB4NGYsIDB4NjAsIDB4MTEsIDB4YWYsIDB4NGUsIDB4N2QsIDB4MDQsIDB4YWIsIDB4NGYsIDB4MTJ9IH0sCit7IDB4OTdiZSwJMTYsCXsweDk1LCAweDExLCAweGVmLCAweDcwLCAweDA1LCAweDEyLCAweDk1LCAweGUzLCAweDgwLCAweGVmLCAweDc0LCAweGZjLCAweDI1LCAweDRlLCAweGY1LCAweDgyfSB9LAoreyAweDk3Y2UsCTE2LAl7MHhlNCwgMHgzNCwgMHgwMiwgMHhmNSwgMHg4MywgMHhlNSwgMHg0ZiwgMHhmMCwgMHgwNSwgMHg0ZSwgMHhlNSwgMHg0ZSwgMHhjMywgMHg5NCwgMHgwNCwgMHg0MH0gfSwKK3sgMHg5N2RlLAk0LAl7MHg5YSwgMHgxMiwgMHg5NSwgMHhlM30gfSwKK3sgMHg5N2UyLAkxLAl7MHgyMn0gfSwKK3sgMHg5N2UzLAkxMiwJezB4NzgsIDB4N2YsIDB4ZTQsIDB4ZjYsIDB4ZDgsIDB4ZmQsIDB4NzUsIDB4ODEsIDB4NjcsIDB4MDIsIDB4OTgsIDB4MmF9IH0sCit7IDB4OTdlZiwJMTYsCXsweDAyLCAweDA1LCAweGFkLCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweGU0LCAweDkzLCAweGEzLCAweDQwLCAweDAzLCAweGY2LCAweDgwLCAweDAxLCAweGYyfSB9LAoreyAweDk3ZmYsCTE2LAl7MHgwOCwgMHhkZiwgMHhmNCwgMHg4MCwgMHgyOSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHg1NCwgMHgwNywgMHgyNCwgMHgwYywgMHhjOCwgMHhjMywgMHgzM30gfSwKK3sgMHg5ODBmLAkxNiwJezB4YzQsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MjAsIDB4YzgsIDB4ODMsIDB4NDAsIDB4MDQsIDB4ZjQsIDB4NTYsIDB4ODAsIDB4MDEsIDB4NDYsIDB4ZjYsIDB4ZGZ9IH0sCit7IDB4OTgxZiwJMTYsCXsweGU0LCAweDgwLCAweDBiLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDkwLCAweDk4LCAweDZmLCAweGU0LCAweDdlfSB9LAoreyAweDk4MmYsCTE2LAl7MHgwMSwgMHg5MywgMHg2MCwgMHhiYywgMHhhMywgMHhmZiwgMHg1NCwgMHgzZiwgMHgzMCwgMHhlNSwgMHgwOSwgMHg1NCwgMHgxZiwgMHhmZSwgMHhlNCwgMHg5M30gfSwKK3sgMHg5ODNmLAkxNiwJezB4YTMsIDB4NjAsIDB4MDEsIDB4MGUsIDB4Y2YsIDB4NTQsIDB4YzAsIDB4MjUsIDB4ZTAsIDB4NjAsIDB4YTgsIDB4NDAsIDB4YjgsIDB4ZTQsIDB4OTMsIDB4YTN9IH0sCit7IDB4OTg0ZiwJMTYsCXsweGZhLCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweGU0LCAweDkzLCAweGEzLCAweGM4LCAweGM1LCAweDgyLCAweGM4LCAweGNhLCAweGM1LCAweDgzLCAweGNhfSB9LAoreyAweDk4NWYsCTE2LAl7MHhmMCwgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhkZiwgMHhlOSwgMHhkZSwgMHhlNywgMHg4MCwgMHhiZX0gfSwKK3sgMHg5ODZmLAkxNiwJezB4NjAsIDB4MjQsIDB4MDIsIDB4OGEsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4ODEsIDB4ODIsIDB4ODQsIDB4ODh9IH0sCit7IDB4OTg3ZiwJMTYsCXsweDkwLCAweGEwLCAweGMwLCAweGMxLCAweGMyLCAweGM0LCAweGM4LCAweGQwLCAweGUwLCAweGUxLCAweGUyLCAweGU0LCAweGU4LCAweGYwLCAweGYxLCAweGYyfSB9LAoreyAweDk4OGYsCTgsCXsweGY0LCAweGY4LCAweGY5LCAweGZhLCAweGZjLCAweGZkLCAweGZlLCAweGZmfSB9LAoreyAweDk4OTcsCTEsCXsweDAwfSB9LAoreyAweDk4OTgsCTgsCXsweDhiLCAweDU5LCAweDhhLCAweDVhLCAweDg5LCAweDViLCAweDhkLCAweDVjfSB9LAoreyAweDk4YTAsCTE2LAl7MHhlNCwgMHhmNSwgMHg1ZCwgMHhmNSwgMHg1ZSwgMHhhZiwgMHg1YywgMHgxNSwgMHg1YywgMHhlZiwgMHg2MCwgMHgzNiwgMHhhYiwgMHg1OSwgMHgwNSwgMHg1Yn0gfSwKK3sgMHg5OGIwLAkxNiwJezB4ZTUsIDB4NWIsIDB4YWEsIDB4NWEsIDB4NzAsIDB4MDIsIDB4MDUsIDB4NWEsIDB4MTQsIDB4ZjksIDB4MTIsIDB4YTIsIDB4M2IsIDB4ZmYsIDB4ZTUsIDB4NWR9IH0sCit7IDB4OThjMCwJMTYsCXsweGU1LCAweDVlLCAweDZmLCAweDI1LCAweGUwLCAweGZmLCAweGU0LCAweDMzLCAweGZlLCAweDc0LCAweDk1LCAweDJmLCAweGY1LCAweDgyLCAweGVlLCAweDM0fSB9LAoreyAweDk4ZDAsCTE2LAl7MHg5ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg1ZCwgMHhmZiwgMHhlNCwgMHg5MywgMHhmNSwgMHg1ZCwgMHg3NCwgMHgwMSwgMHg5MywgMHg2ZiwgMHhmNSwgMHg1ZX0gfSwKK3sgMHg5OGUwLAk2LAl7MHg4MCwgMHhjMywgMHhhZSwgMHg1ZCwgMHhhZiwgMHg1ZX0gfSwKK3sgMHg5OGU2LAkxLAl7MHgyMn0gfSwKK3sgMHg5OGU3LAkxMSwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ZDAsIDB4NzUsIDB4ZDAsIDB4MTh9IH0sCit7IDB4OThmMiwJMTYsCXsweDkwLCAweDIwLCAweDYwLCAweGUwLCAweDU0LCAweDBmLCAweGZlLCAweDMwLCAweGUwLCAweDA1LCAweDkwLCAweDIwLCAweDAyLCAweGUwLCAweGZmLCAweGVlfSB9LAoreyAweDk5MDIsCTE2LAl7MHgzMCwgMHhlMSwgMHgwNSwgMHg5MCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhmZiwgMHhlZSwgMHgzMCwgMHhlMiwgMHgwNSwgMHg5MCwgMHgyMCwgMHgxMiwgMHhlMH0gfSwKK3sgMHg5OTEyLAkxNiwJezB4ZmYsIDB4ZWUsIDB4MzAsIDB4ZTMsIDB4MDUsIDB4OTAsIDB4MjAsIDB4MWEsIDB4ZTAsIDB4ZmYsIDB4OTAsIDB4MDEsIDB4YzQsIDB4ZTAsIDB4YjUsIDB4MWV9IH0sCit7IDB4OTkyMiwJMTAsCXsweDA0LCAweGU0LCAweGYwLCAweDgwLCAweDA1LCAweDkwLCAweDAxLCAweGM0LCAweGVlLCAweGYwfSB9LAoreyAweDk5MmMsCTksCXsweGQwLCAweGQwLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDk5MzUsCTIsCXsweGE5LCAweDAzfSB9LAoreyAweDk5MzcsCTE2LAl7MHhlZiwgMHg3NSwgMHhmMCwgMHgwOCwgMHhhNCwgMHgyNCwgMHgwMCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgyMCwgMHhhYiwgMHg4MiwgMHhmYSwgMHhlNX0gfSwKK3sgMHg5OTQ3LAkxNiwJezB4NWMsIDB4NDUsIDB4NWQsIDB4ZjUsIDB4NWUsIDB4ZTksIDB4NjAsIDB4MTQsIDB4OGEsIDB4ODMsIDB4ZTUsIDB4ODIsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODJ9IH0sCit7IDB4OTk1NywJMTYsCXsweGU0LCAweDM1LCAweDgzLCAweGY1LCAweDgzLCAweGUwLCAweDRkLCAweGYwLCAweGU0LCAweGZlLCAweDgwLCAweDEzLCAweGViLCAweDI0LCAweDA0LCAweGY1fSB9LAoreyAweDk5NjcsCTE2LAl7MHg4MiwgMHhlNCwgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlZCwgMHhmNCwgMHhmYywgMHhlZiwgMHg1YywgMHhmMCwgMHhhZSwgMHg1ZSwgMHhlYn0gfSwKK3sgMHg5OTc3LAkxNiwJezB4MjQsIDB4MDYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTUsIDB4NWUsIDB4ZmMsIDB4YjUsIDB4MDYsIDB4MDMsIDB4YWZ9IH0sCit7IDB4OTk4NywJMTYsCXsweDA1LCAweDIyLCAweGU1LCAweDVjLCAweDVjLCAweGZlLCAweGU1LCAweDVkLCAweDVjLCAweGZkLCAweGU5LCAweDYwLCAweDE2LCAweGVlLCAweDcwLCAweDA0fSB9LAoreyAweDk5OTcsCTE2LAl7MHg3ZiwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHhhZSwgMHgwNywgMHhlZCwgMHg3MCwgMHgwNCwgMHg3ZiwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3Zn0gfSwKK3sgMHg5OWE3LAkxNiwJezB4MDAsIDB4YWQsIDB4MDcsIDB4ZWUsIDB4NjAsIDB4MDMsIDB4YWYsIDB4NWMsIDB4MjIsIDB4ZWQsIDB4NjAsIDB4MDMsIDB4YWYsIDB4NWQsIDB4MjIsIDB4N2Z9IH0sCit7IDB4OTliNywJMSwJezB4MDB9IH0sCit7IDB4OTliOCwJMSwJezB4MjJ9IH0sCit7IDB4OTliOSwJMTYsCXsweDc1LCAweDU1LCAweDAyLCAweDc1LCAweDU2LCAweGIwLCAweDkwLCAweDAzLCAweDM1LCAweDc0LCAweDBmLCAweGYwLCAweDg1LCAweDU2LCAweDgyLCAweDg1fSB9LAoreyAweDk5YzksCTE2LAl7MHg1NSwgMHg4MywgMHhhMywgMHhlMCwgMHhmZiwgMHg5MCwgMHgwMywgMHgzNywgMHhmMCwgMHg4NSwgMHg1NiwgMHg4MiwgMHg4NSwgMHg1NSwgMHg4MywgMHhlMH0gfSwKK3sgMHg5OWQ5LAkxNiwJezB4OTAsIDB4MDMsIDB4MzYsIDB4ZjAsIDB4OTAsIDB4MDMsIDB4MzgsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4NzUsIDB4NTcsIDB4MDMsIDB4NzUsIDB4NTgsIDB4Mzl9IH0sCit7IDB4OTllOSwJMTYsCXsweGVmLCAweDE0LCAweGI0LCAweDBiLCAweDAwLCAweDQwLCAweDAzLCAweDAyLCAweDllLCAweDVkLCAweDkwLCAweDk5LCAweGZhLCAweGY4LCAweDI4LCAweDI4fSB9LAoreyAweDk5ZjksCTE2LAl7MHg3MywgMHgwMiwgMHg5YSwgMHgxYiwgMHgwMiwgMHg5YSwgMHhiYSwgMHgwMiwgMHg5YiwgMHhiZiwgMHgwMiwgMHg5YiwgMHhkZSwgMHgwMiwgMHg5YiwgMHhkZX0gfSwKK3sgMHg5YTA5LAkxNiwJezB4MDIsIDB4OWMsIDB4OTQsIDB4MDIsIDB4OWMsIDB4Y2YsIDB4MDIsIDB4OWMsIDB4ZjQsIDB4MDIsIDB4OWQsIDB4YjIsIDB4MDIsIDB4OWQsIDB4ZTIsIDB4MDJ9IH0sCit7IDB4OWExOSwJMTYsCXsweDllLCAweDBlLCAweGU0LCAweGY1LCAweDRlLCAweGU1LCAweDRlLCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAwLCAweGY1LCAweDgyLCAweGU0fSB9LAoreyAweDlhMjksCTE2LAl7MHgzNCwgMHgyMCwgMHhhZiwgMHg4MiwgMHhmNSwgMHg1MywgMHg4ZiwgMHg1NCwgMHhlNCwgMHhmZiwgMHhlNCwgMHhmZSwgMHhlZiwgMHg2MCwgMHgxMCwgMHg3NH0gfSwKK3sgMHg5YTM5LAkxNiwJezB4OGEsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDIsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjQsIDB4ZjUsIDB4NGYsIDB4ODAsIDB4MGQsIDB4NzR9IH0sCit7IDB4OWE0OSwJMTYsCXsweDhhLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDAyLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDRmLCAweGU1LCAweDU0LCAweDI0LCAweDA3fSB9LAoreyAweDlhNTksCTE2LAl7MHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1MywgMHhmNSwgMHg4MywgMHhlNSwgMHg0ZiwgMHhmMCwgMHhlMCwgMHhmNSwgMHg1MCwgMHg2NSwgMHg0ZiwgMHg2MH0gfSwKK3sgMHg5YTY5LAkxNiwJezB4MzgsIDB4ZTQsIDB4OTAsIDB4MDMsIDB4MzgsIDB4ZjAsIDB4ZTUsIDB4NGUsIDB4MDQsIDB4ZmQsIDB4MDUsIDB4NTgsIDB4ZTUsIDB4NTgsIDB4YWEsIDB4NTd9IH0sCit7IDB4OWE3OSwJMTYsCXsweDcwLCAweDAyLCAweDA1LCAweDU3LCAweDE0LCAweGY1LCAweDgyLCAweDhhLCAweDgzLCAweGVkLCAweGYwLCAweDA1LCAweDU4LCAweGU1LCAweDU4LCAweGFjfSB9LAoreyAweDlhODksCTE2LAl7MHg1NywgMHg3MCwgMHgwMiwgMHgwNSwgMHg1NywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlNSwgMHg0ZiwgMHhmMCwgMHg4NSwgMHg1OCwgMHg4Mn0gfSwKK3sgMHg5YTk5LAkxNiwJezB4ODUsIDB4NTcsIDB4ODMsIDB4ZTUsIDB4NTAsIDB4ZjAsIDB4MDIsIDB4OWUsIDB4NjMsIDB4MGUsIDB4YmUsIDB4MjQsIDB4OGYsIDB4MGYsIDB4ZWYsIDB4NjR9IH0sCit7IDB4OWFhOSwJMTYsCXsweDAyLCAweDcwLCAweDg3LCAweDA1LCAweDRlLCAweGU1LCAweDRlLCAweDY0LCAweDA0LCAweDYwLCAweDAzLCAweDAyLCAweDlhLCAweDFlLCAweDAyLCAweDllfSB9LAoreyAweDlhYjksCTE2LAl7MHg2MywgMHhlNCwgMHhmNSwgMHg0ZSwgMHhhZiwgMHg0ZSwgMHhlNCwgMHhmZCwgMHgxMiwgMHg4MywgMHg1YSwgMHgwNSwgMHg0ZSwgMHhlNSwgMHg0ZSwgMHhkM30gfSwKK3sgMHg5YWM5LAkxNiwJezB4OTQsIDB4MDMsIDB4NDAsIDB4ZjAsIDB4OTAsIDB4MDAsIDB4MDQsIDB4NzQsIDB4OTgsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4ZTcsIDB4ZjAsIDB4ZTQsIDB4ZjV9IH0sCit7IDB4OWFkOSwJMTYsCXsweDUwLCAweDdlLCAweDIwLCAweDdmLCAweDAwLCAweDc1LCAweDUzLCAweDIwLCAweDc1LCAweDU0LCAweDAwLCAweGY1LCAweDRlLCAweGFmLCAweDRlLCAweDc0fSB9LAoreyAweDlhZTksCTE2LAl7MHgwMSwgMHhhOCwgMHgwNywgMHgwOCwgMHg4MCwgMHgwMiwgMHhjMywgMHgzMywgMHhkOCwgMHhmYywgMHhmNSwgMHg0ZiwgMHg5MCwgMHgwMSwgMHhjNCwgMHhmMH0gfSwKK3sgMHg5YWY5LAkxNiwJezB4OTAsIDB4MDEsIDB4YzAsIDB4ZTQsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4ODUsIDB4NTQsIDB4ODIsIDB4ODUsIDB4NTMsIDB4ODMsIDB4YTN9IH0sCit7IDB4OWIwOSwJMTYsCXsweDc0LCAweDAyLCAweGYwLCAweDkwLCAweDAxLCAweGM0LCAweGUwLCAweGI1LCAweDRmLCAweDM0LCAweDkwLCAweDAxLCAweGMwLCAweGUwLCAweDcwLCAweDAyfSB9LAoreyAweDliMTksCTE2LAl7MHhhMywgMHhlMCwgMHg3MCwgMHhlZiwgMHg5MCwgMHgwMywgMHgzOCwgMHhmMCwgMHhlNSwgMHg0ZSwgMHgwNCwgMHhmZiwgMHgwNSwgMHg1OCwgMHhlNSwgMHg1OH0gfSwKK3sgMHg5YjI5LAkxNiwJezB4YWMsIDB4NTcsIDB4NzAsIDB4MDIsIDB4MDUsIDB4NTcsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4ODUsIDB4NTgsIDB4ODJ9IH0sCit7IDB4OWIzOSwJMTYsCXsweDg1LCAweDU3LCAweDgzLCAweDc0LCAweGZmLCAweGYwLCAweGU0LCAweDkwLCAweDAxLCAweGM0LCAweGYwLCAweDc1LCAweDUwLCAweGZmLCAweDkwLCAweDAxfSB9LAoreyAweDliNDksCTE2LAl7MHhjNCwgMHhlMCwgMHhmZiwgMHg2MCwgMHgzNywgMHhlNCwgMHg5MCwgMHgwMywgMHgzOCwgMHhmMCwgMHhlNSwgMHg0ZSwgMHgwNCwgMHhmZSwgMHgwNSwgMHg1OH0gfSwKK3sgMHg5YjU5LAkxNiwJezB4ZTUsIDB4NTgsIDB4YWMsIDB4NTcsIDB4NzAsIDB4MDIsIDB4MDUsIDB4NTcsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWUsIDB4ZjAsIDB4MDV9IH0sCit7IDB4OWI2OSwJMTYsCXsweDU4LCAweGU1LCAweDU4LCAweGFjLCAweDU3LCAweDcwLCAweDAyLCAweDA1LCAweDU3LCAweDE0LCAweGY1LCAweDgyLCAweDhjLCAweDgzLCAweGVmLCAweGYwfSB9LAoreyAweDliNzksCTE2LAl7MHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4MywgMHhlNSwgMHg0ZiwgMHhmMCwgMHg3NSwgMHg1MCwgMHhmZiwgMHhlNSwgMHg1MCwgMHg3MCwgMHgxNn0gfSwKK3sgMHg5Yjg5LAkxNiwJezB4NzQsIDB4MDgsIDB4MjUsIDB4NTQsIDB4ZjUsIDB4NTQsIDB4ZTQsIDB4MzUsIDB4NTMsIDB4ZjUsIDB4NTMsIDB4MDUsIDB4NGUsIDB4ZTUsIDB4NGUsIDB4NjR9IH0sCit7IDB4OWI5OSwJMTYsCXsweDA0LCAweDYwLCAweDAzLCAweDAyLCAweDlhLCAweGU2LCAweGU0LCAweGY1LCAweDRlLCAweGFmLCAweDRlLCAweDdkLCAweDAxLCAweDEyLCAweDgzLCAweDVhfSB9LAoreyAweDliYTksCTE2LAl7MHgwNSwgMHg0ZSwgMHhlNSwgMHg0ZSwgMHhkMywgMHg5NCwgMHgwMywgMHg0MCwgMHhmMCwgMHg5MCwgMHgwMCwgMHgwNCwgMHg3NCwgMHgxMywgMHhmMCwgMHhhM30gfSwKK3sgMHg5YmI5LAkxNiwJezB4NzQsIDB4MTIsIDB4ZjAsIDB4MDIsIDB4OWUsIDB4NjMsIDB4ODUsIDB4NTYsIDB4ODIsIDB4ODUsIDB4NTUsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4ZmYsIDB4NzR9IH0sCit7IDB4OWJjOSwJMTYsCXsweDAxLCAweGE4LCAweDA3LCAweDA4LCAweDgwLCAweDAyLCAweGMzLCAweDMzLCAweGQ4LCAweGZjLCAweDkwLCAweDAyLCAweGY3LCAweGYwLCAweDkwLCAweDAxfSB9LAoreyAweDliZDksCTE2LAl7MHhjNCwgMHhmMCwgMHgwMiwgMHg5ZSwgMHg2MywgMHg5MCwgMHgwMSwgMHhjMCwgMHg3NCwgMHgwMywgMHhmMCwgMHhhMywgMHg3NCwgMHhlOCwgMHhmMCwgMHhlNH0gfSwKK3sgMHg5YmU5LAkxNiwJezB4ZjUsIDB4NTAsIDB4OTAsIDB4MDIsIDB4ZjcsIDB4ZTAsIDB4ZmYsIDB4OTAsIDB4MDEsIDB4YzQsIDB4ZTAsIDB4YjUsIDB4MDcsIDB4MTksIDB4OTAsIDB4MDF9IH0sCit7IDB4OWJmOSwJMTYsCXsweGMwLCAweGUwLCAweDcwLCAweDAyLCAweGEzLCAweGUwLCAweDcwLCAweGVhLCAweDkwLCAweDAzLCAweDM4LCAweGYwLCAweDg1LCAweDU4LCAweDgyLCAweDg1fSB9LAoreyAweDljMDksCTE2LAl7MHg1NywgMHg4MywgMHg3NCwgMHhmZiwgMHhmMCwgMHhmNSwgMHg1MCwgMHhlNSwgMHg1MCwgMHg2MCwgMHgwMywgMHgwMiwgMHg5ZSwgMHg2MywgMHg5MCwgMHgwMX0gfSwKK3sgMHg5YzE5LAkxNiwJezB4YzAsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4OTYsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4YzAsIDB4ZTAsIDB4NzAsIDB4MDIsIDB4YTMsIDB4ZTAsIDB4NzAsIDB4ZjZ9IH0sCit7IDB4OWMyOSwJMTYsCXsweGU1LCAweDMzLCAweGMzLCAweDk0LCAweDAxLCAweDQwLCAweDBkLCAweDkwLCAweDIwLCAweDc4LCAweGUwLCAweDU0LCAweDBmLCAweDc1LCAweDUxLCAweDAwfSB9LAoreyAweDljMzksCTE2LAl7MHhmNSwgMHg1MiwgMHg4MCwgMHgwOSwgMHg3ZiwgMHgwMiwgMHgxMiwgMHgxMSwgMHgyNywgMHg4ZSwgMHg1MSwgMHg4ZiwgMHg1MiwgMHhjMywgMHhlNSwgMHg1MX0gfSwKK3sgMHg5YzQ5LAkxNiwJezB4NjQsIDB4ODAsIDB4OTQsIDB4ODAsIDB4NDAsIDB4ZGEsIDB4ZTUsIDB4NTIsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NTAsIDB4OTAsIDB4MDIsIDB4ZjcsIDB4ZTB9IH0sCit7IDB4OWM1OSwJMTYsCXsweDU1LCAweDUwLCAweDcwLCAweDA0LCAweDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweDhmLCAweDRmLCAweDg1LCAweDU2LCAweDgyLCAweDg1fSB9LAoreyAweDljNjksCTE2LAl7MHg1NSwgMHg4MywgMHhhMywgMHhlMCwgMHhiNCwgMHgwNSwgMHgwYywgMHhlNSwgMHg0ZiwgMHg3MCwgMHgwNCwgMHg3ZiwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3Zn0gfSwKK3sgMHg5Yzc5LAkxNiwJezB4MDAsIDB4OGYsIDB4NGYsIDB4ZTUsIDB4NGYsIDB4NzAsIDB4MDMsIDB4MDIsIDB4OWUsIDB4NjMsIDB4ZTQsIDB4OTAsIDB4MDMsIDB4MzgsIDB4ZjAsIDB4ODV9IH0sCit7IDB4OWM4OSwJMTYsCXsweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGU1LCAweDUwLCAweGYwLCAweDAyLCAweDllLCAweDYzLCAweGU0LCAweGZmLCAweGZkLCAweDEyLCAweDgzfSB9LAoreyAweDljOTksCTE2LAl7MHg1YSwgMHg3ZSwgMHgyMCwgMHg3ZiwgMHgwMCwgMHg3NSwgMHg1MywgMHgyMCwgMHg3NSwgMHg1NCwgMHgwMCwgMHg4NSwgMHg1NCwgMHg4MiwgMHg4NSwgMHg1M30gfSwKK3sgMHg5Y2E5LAkxNiwJezB4ODMsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ODUsIDB4NTQsIDB4ODIsIDB4ODUsIDB4NTMsIDB4ODMsIDB4NzQsIDB4MDF9IH0sCit7IDB4OWNiOSwJMTYsCXsweGYwLCAweGEzLCAweGU0LCAweGYwLCAweDg1LCAweDU0LCAweDgyLCAweDg1LCAweDUzLCAweDgzLCAweGEzLCAweGEzLCAweGEzLCAweGUwLCAweDU0LCAweDdmfSB9LAoreyAweDljYzksCTE2LAl7MHhmMCwgMHhkMiwgMHgwNCwgMHgwMiwgMHg5ZSwgMHg2MywgMHhjMiwgMHgwNCwgMHg3ZSwgMHgyMCwgMHg3ZiwgMHgwMCwgMHg3NSwgMHg1MywgMHgyMCwgMHg3NX0gfSwKK3sgMHg5Y2Q5LAkxNiwJezB4NTQsIDB4MDAsIDB4ZTUsIDB4NTQsIDB4MjQsIDB4MDUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTMsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MzAsIDB4ZTZ9IH0sCit7IDB4OWNlOSwJMTYsCXsweGYxLCAweGU0LCAweGZmLCAweDdkLCAweDAxLCAweDEyLCAweDgzLCAweDVhLCAweDAyLCAweDllLCAweDYzLCAweGU0LCAweGY1LCAweDUwLCAweGY1LCAweDRlfSB9LAoreyAweDljZjksCTE2LAl7MHhhZiwgMHg0ZSwgMHhlNCwgMHhmZCwgMHgxMiwgMHg4MywgMHg1YSwgMHhlNSwgMHg0ZSwgMHg3NSwgMHhmMCwgMHgwOCwgMHhhNCwgMHgyNCwgMHgwMCwgMHhmNX0gfSwKK3sgMHg5ZDA5LAkxNiwJezB4ODIsIDB4ZTQsIDB4MzQsIDB4MjAsIDB4YWYsIDB4ODIsIDB4ZjUsIDB4NTMsIDB4OGYsIDB4NTQsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4ODIsIDB4MjQsIDB4MDR9IH0sCit7IDB4OWQxOSwJMTYsCXsweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDgzLCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZjLCAweGYwLCAweGFmLCAweDRlLCAweDdkLCAweDAxLCAweDdifSB9LAoreyAweDlkMjksCTE2LAl7MHgwMSwgMHg3NSwgMHg1YywgMHg4MCwgMHg3NSwgMHg1ZCwgMHg0MCwgMHgxMiwgMHg5OSwgMHgzNSwgMHg4ZiwgMHg1MCwgMHhlNSwgMHg1MCwgMHg3MCwgMHgxMX0gfSwKK3sgMHg5ZDM5LAkxNiwJezB4YWYsIDB4NGUsIDB4N2QsIDB4MDIsIDB4N2IsIDB4MDEsIDB4NzUsIDB4NWMsIDB4MTAsIDB4NzUsIDB4NWQsIDB4MjAsIDB4MTIsIDB4OTksIDB4MzUsIDB4OGZ9IH0sCit7IDB4OWQ0OSwJMTYsCXsweDUwLCAweGU1LCAweDUwLCAweDcwLCAweDEwLCAweGFmLCAweDRlLCAweDdkLCAweDAxLCAweGZiLCAweDc1LCAweDVjLCAweDgwLCAweDc1LCAweDVkLCAweDQwfSB9LAoreyAweDlkNTksCTE2LAl7MHgxMiwgMHg5OSwgMHgzNSwgMHg4ZiwgMHg1MCwgMHhlNSwgMHg1MCwgMHg3MCwgMHgxMCwgMHhhZiwgMHg0ZSwgMHg3ZCwgMHgwMiwgMHhmYiwgMHg3NSwgMHg1Y30gfSwKK3sgMHg5ZDY5LAkxNiwJezB4MTAsIDB4NzUsIDB4NWQsIDB4MjAsIDB4MTIsIDB4OTksIDB4MzUsIDB4OGYsIDB4NTAsIDB4YWYsIDB4NGUsIDB4N2QsIDB4MDEsIDB4MTIsIDB4ODMsIDB4NWF9IH0sCit7IDB4OWQ3OSwJMTYsCXsweGU1LCAweDUwLCAweDYwLCAweDI2LCAweGU0LCAweDkwLCAweDAzLCAweDM4LCAweGYwLCAweGU1LCAweDRlLCAweDA0LCAweGZmLCAweDA1LCAweDU4LCAweGU1fSB9LAoreyAweDlkODksCTE2LAl7MHg1OCwgMHhhYywgMHg1NywgMHg3MCwgMHgwMiwgMHgwNSwgMHg1NywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHg4NSwgMHg1OH0gfSwKK3sgMHg5ZDk5LAkxNiwJezB4ODIsIDB4ODUsIDB4NTcsIDB4ODMsIDB4ZTUsIDB4NTAsIDB4ZjAsIDB4MDIsIDB4OWUsIDB4NjMsIDB4MDUsIDB4NGUsIDB4ZTUsIDB4NGUsIDB4ZDMsIDB4OTR9IH0sCit7IDB4OWRhOSwJMTYsCXsweDAzLCAweDUwLCAweDAzLCAweDAyLCAweDljLCAweGY5LCAweDAyLCAweDllLCAweDYzLCAweGU0LCAweDkwLCAweDAzLCAweDU5LCAweGYwLCAweGEzLCAweGYwfSB9LAoreyAweDlkYjksCTE2LAl7MHhhMywgMHhmMCwgMHhhMywgMHhmMCwgMHhhMywgMHhmMCwgMHhhMywgMHg3NCwgMHgxMCwgMHhmMCwgMHhhMywgMHg3NCwgMHg5ZSwgMHhmMCwgMHhhMywgMHg3NH0gfSwKK3sgMHg5ZGM5LAkxNiwJezB4ODUsIDB4ZjAsIDB4N2UsIDB4MDMsIDB4N2YsIDB4NTksIDB4MTIsIDB4ODEsIDB4ZDksIDB4ZWYsIDB4NjQsIDB4MDgsIDB4NzAsIDB4MDMsIDB4MDIsIDB4OWV9IH0sCit7IDB4OWRkOSwJMTYsCXsweDYzLCAweGU0LCAweDkwLCAweDAzLCAweDM4LCAweGYwLCAweDAyLCAweDllLCAweDYzLCAweGU0LCAweDkwLCAweDAzLCAweDU5LCAweGYwLCAweGEzLCAweGYwfSB9LAoreyAweDlkZTksCTE2LAl7MHhhMywgMHhmMCwgMHhhMywgMHhmMCwgMHhhMywgMHhmMCwgMHhhMywgMHg3NCwgMHgxMCwgMHhmMCwgMHhhMywgMHhlNSwgMHg1NywgMHhmMCwgMHhhMywgMHhlNX0gfSwKK3sgMHg5ZGY5LAkxNiwJezB4NTgsIDB4ZjAsIDB4N2UsIDB4MDMsIDB4N2YsIDB4NTksIDB4MTIsIDB4MTksIDB4YzEsIDB4ZWYsIDB4NjQsIDB4MDgsIDB4NjAsIDB4NWMsIDB4ZTQsIDB4OTB9IH0sCit7IDB4OWUwOSwJMTYsCXsweDAzLCAweDM4LCAweGYwLCAweDgwLCAweDU1LCAweGU1LCAweDU2LCAweDI0LCAweDAyLCAweGZmLCAweGU0LCAweDM1LCAweDU1LCAweGZhLCAweGE5LCAweDA3fSB9LAoreyAweDllMTksCTE2LAl7MHg3YiwgMHgwMSwgMHg3ZCwgMHgxMCwgMHgxMiwgMHg5OCwgMHg5OCwgMHhlZiwgMHg0ZSwgMHg3MCwgMHgzMiwgMHg5MCwgMHgwMywgMHg1OSwgMHhmMCwgMHhhM30gfSwKK3sgMHg5ZTI5LAkxNiwJezB4ZjAsIDB4YTMsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4MjQsIDB4MDIsIDB4OTB9IH0sCit7IDB4OWUzOSwJMTYsCXsweDAzLCAweDYwLCAweGYwLCAweGU0LCAweDM1LCAweDU1LCAweDkwLCAweDAzLCAweDVmLCAweGYwLCAweDdlLCAweDAzLCAweDdmLCAweDU5LCAweDEyLCAweDgxfSB9LAoreyAweDllNDksCTE2LAl7MHhkOSwgMHhlZiwgMHg2NCwgMHgwOCwgMHg2MCwgMHgxNCwgMHhlNCwgMHg5MCwgMHgwMywgMHgzOCwgMHhmMCwgMHg4MCwgMHgwZCwgMHhlNCwgMHg5MCwgMHgwM30gfSwKK3sgMHg5ZTU5LAkxNiwJezB4MzgsIDB4ZjAsIDB4ODAsIDB4MDYsIDB4OTAsIDB4MDMsIDB4MzgsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4YzAsIDB4ZTQsIDB4ZjAsIDB4YTN9IH0sCit7IDB4OWU2OSwJMTYsCXsweDc0LCAweDBhLCAweGYwLCAweDkwLCAweDAxLCAweGMwLCAweGUwLCAweDcwLCAweDAyLCAweGEzLCAweGUwLCAweDcwLCAweGY2LCAweDdlLCAweDAzLCAweDdmfSB9LAoreyAweDllNzksCTExLAl7MHgzNSwgMHg3ZCwgMHgyNCwgMHgxMiwgMHg5MSwgMHg2YSwgMHhlNCwgMHg5MCwgMHgwMiwgMHhhZiwgMHhmMH0gfSwKK3sgMHg5ZTg0LAkxLAl7MHgyMn0gfSwKK3sgMHg5ZTg1LAkxNiwJezB4ZmYsIDB4ZmUsIDB4ZmMsIDB4ZjgsIDB4ZjAsIDB4ZTAsIDB4YzAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDMsIDB4MDcsIDB4MGYsIDB4MWYsIDB4M2YsIDB4N2Z9IH0sCit7IDB4OWU5NSwJMTYsCXsweDAwLCAweDAwLCAweGMwLCAweGMxLCAweGMxLCAweDgxLCAweDAxLCAweDQwLCAweGMzLCAweDAxLCAweDAzLCAweGMwLCAweDAyLCAweDgwLCAweGMyLCAweDQxfSB9LAoreyAweDllYTUsCTE2LAl7MHhjNiwgMHgwMSwgMHgwNiwgMHhjMCwgMHgwNywgMHg4MCwgMHhjNywgMHg0MSwgMHgwNSwgMHgwMCwgMHhjNSwgMHhjMSwgMHhjNCwgMHg4MSwgMHgwNCwgMHg0MH0gfSwKK3sgMHg5ZWI1LAkxNiwJezB4Y2MsIDB4MDEsIDB4MGMsIDB4YzAsIDB4MGQsIDB4ODAsIDB4Y2QsIDB4NDEsIDB4MGYsIDB4MDAsIDB4Y2YsIDB4YzEsIDB4Y2UsIDB4ODEsIDB4MGUsIDB4NDB9IH0sCit7IDB4OWVjNSwJMTYsCXsweDBhLCAweDAwLCAweGNhLCAweGMxLCAweGNiLCAweDgxLCAweDBiLCAweDQwLCAweGM5LCAweDAxLCAweDA5LCAweGMwLCAweDA4LCAweDgwLCAweGM4LCAweDQxfSB9LAoreyAweDllZDUsCTE2LAl7MHhkOCwgMHgwMSwgMHgxOCwgMHhjMCwgMHgxOSwgMHg4MCwgMHhkOSwgMHg0MSwgMHgxYiwgMHgwMCwgMHhkYiwgMHhjMSwgMHhkYSwgMHg4MSwgMHgxYSwgMHg0MH0gfSwKK3sgMHg5ZWU1LAkxNiwJezB4MWUsIDB4MDAsIDB4ZGUsIDB4YzEsIDB4ZGYsIDB4ODEsIDB4MWYsIDB4NDAsIDB4ZGQsIDB4MDEsIDB4MWQsIDB4YzAsIDB4MWMsIDB4ODAsIDB4ZGMsIDB4NDF9IH0sCit7IDB4OWVmNSwJMTYsCXsweDE0LCAweDAwLCAweGQ0LCAweGMxLCAweGQ1LCAweDgxLCAweDE1LCAweDQwLCAweGQ3LCAweDAxLCAweDE3LCAweGMwLCAweDE2LCAweDgwLCAweGQ2LCAweDQxfSB9LAoreyAweDlmMDUsCTE2LAl7MHhkMiwgMHgwMSwgMHgxMiwgMHhjMCwgMHgxMywgMHg4MCwgMHhkMywgMHg0MSwgMHgxMSwgMHgwMCwgMHhkMSwgMHhjMSwgMHhkMCwgMHg4MSwgMHgxMCwgMHg0MH0gfSwKK3sgMHg5ZjE1LAkxNiwJezB4ZjAsIDB4MDEsIDB4MzAsIDB4YzAsIDB4MzEsIDB4ODAsIDB4ZjEsIDB4NDEsIDB4MzMsIDB4MDAsIDB4ZjMsIDB4YzEsIDB4ZjIsIDB4ODEsIDB4MzIsIDB4NDB9IH0sCit7IDB4OWYyNSwJMTYsCXsweDM2LCAweDAwLCAweGY2LCAweGMxLCAweGY3LCAweDgxLCAweDM3LCAweDQwLCAweGY1LCAweDAxLCAweDM1LCAweGMwLCAweDM0LCAweDgwLCAweGY0LCAweDQxfSB9LAoreyAweDlmMzUsCTE2LAl7MHgzYywgMHgwMCwgMHhmYywgMHhjMSwgMHhmZCwgMHg4MSwgMHgzZCwgMHg0MCwgMHhmZiwgMHgwMSwgMHgzZiwgMHhjMCwgMHgzZSwgMHg4MCwgMHhmZSwgMHg0MX0gfSwKK3sgMHg5ZjQ1LAkxNiwJezB4ZmEsIDB4MDEsIDB4M2EsIDB4YzAsIDB4M2IsIDB4ODAsIDB4ZmIsIDB4NDEsIDB4MzksIDB4MDAsIDB4ZjksIDB4YzEsIDB4ZjgsIDB4ODEsIDB4MzgsIDB4NDB9IH0sCit7IDB4OWY1NSwJMTYsCXsweDI4LCAweDAwLCAweGU4LCAweGMxLCAweGU5LCAweDgxLCAweDI5LCAweDQwLCAweGViLCAweDAxLCAweDJiLCAweGMwLCAweDJhLCAweDgwLCAweGVhLCAweDQxfSB9LAoreyAweDlmNjUsCTE2LAl7MHhlZSwgMHgwMSwgMHgyZSwgMHhjMCwgMHgyZiwgMHg4MCwgMHhlZiwgMHg0MSwgMHgyZCwgMHgwMCwgMHhlZCwgMHhjMSwgMHhlYywgMHg4MSwgMHgyYywgMHg0MH0gfSwKK3sgMHg5Zjc1LAkxNiwJezB4ZTQsIDB4MDEsIDB4MjQsIDB4YzAsIDB4MjUsIDB4ODAsIDB4ZTUsIDB4NDEsIDB4MjcsIDB4MDAsIDB4ZTcsIDB4YzEsIDB4ZTYsIDB4ODEsIDB4MjYsIDB4NDB9IH0sCit7IDB4OWY4NSwJMTYsCXsweDIyLCAweDAwLCAweGUyLCAweGMxLCAweGUzLCAweDgxLCAweDIzLCAweDQwLCAweGUxLCAweDAxLCAweDIxLCAweGMwLCAweDIwLCAweDgwLCAweGUwLCAweDQxfSB9LAoreyAweDlmOTUsCTE2LAl7MHhhMCwgMHgwMSwgMHg2MCwgMHhjMCwgMHg2MSwgMHg4MCwgMHhhMSwgMHg0MSwgMHg2MywgMHgwMCwgMHhhMywgMHhjMSwgMHhhMiwgMHg4MSwgMHg2MiwgMHg0MH0gfSwKK3sgMHg5ZmE1LAkxNiwJezB4NjYsIDB4MDAsIDB4YTYsIDB4YzEsIDB4YTcsIDB4ODEsIDB4NjcsIDB4NDAsIDB4YTUsIDB4MDEsIDB4NjUsIDB4YzAsIDB4NjQsIDB4ODAsIDB4YTQsIDB4NDF9IH0sCit7IDB4OWZiNSwJMTYsCXsweDZjLCAweDAwLCAweGFjLCAweGMxLCAweGFkLCAweDgxLCAweDZkLCAweDQwLCAweGFmLCAweDAxLCAweDZmLCAweGMwLCAweDZlLCAweDgwLCAweGFlLCAweDQxfSB9LAoreyAweDlmYzUsCTE2LAl7MHhhYSwgMHgwMSwgMHg2YSwgMHhjMCwgMHg2YiwgMHg4MCwgMHhhYiwgMHg0MSwgMHg2OSwgMHgwMCwgMHhhOSwgMHhjMSwgMHhhOCwgMHg4MSwgMHg2OCwgMHg0MH0gfSwKK3sgMHg5ZmQ1LAkxNiwJezB4NzgsIDB4MDAsIDB4YjgsIDB4YzEsIDB4YjksIDB4ODEsIDB4NzksIDB4NDAsIDB4YmIsIDB4MDEsIDB4N2IsIDB4YzAsIDB4N2EsIDB4ODAsIDB4YmEsIDB4NDF9IH0sCit7IDB4OWZlNSwJMTYsCXsweGJlLCAweDAxLCAweDdlLCAweGMwLCAweDdmLCAweDgwLCAweGJmLCAweDQxLCAweDdkLCAweDAwLCAweGJkLCAweGMxLCAweGJjLCAweDgxLCAweDdjLCAweDQwfSB9LAoreyAweDlmZjUsCTE2LAl7MHhiNCwgMHgwMSwgMHg3NCwgMHhjMCwgMHg3NSwgMHg4MCwgMHhiNSwgMHg0MSwgMHg3NywgMHgwMCwgMHhiNywgMHhjMSwgMHhiNiwgMHg4MSwgMHg3NiwgMHg0MH0gfSwKK3sgMHhhMDA1LAkxNiwJezB4NzIsIDB4MDAsIDB4YjIsIDB4YzEsIDB4YjMsIDB4ODEsIDB4NzMsIDB4NDAsIDB4YjEsIDB4MDEsIDB4NzEsIDB4YzAsIDB4NzAsIDB4ODAsIDB4YjAsIDB4NDF9IH0sCit7IDB4YTAxNSwJMTYsCXsweDUwLCAweDAwLCAweDkwLCAweGMxLCAweDkxLCAweDgxLCAweDUxLCAweDQwLCAweDkzLCAweDAxLCAweDUzLCAweGMwLCAweDUyLCAweDgwLCAweDkyLCAweDQxfSB9LAoreyAweGEwMjUsCTE2LAl7MHg5NiwgMHgwMSwgMHg1NiwgMHhjMCwgMHg1NywgMHg4MCwgMHg5NywgMHg0MSwgMHg1NSwgMHgwMCwgMHg5NSwgMHhjMSwgMHg5NCwgMHg4MSwgMHg1NCwgMHg0MH0gfSwKK3sgMHhhMDM1LAkxNiwJezB4OWMsIDB4MDEsIDB4NWMsIDB4YzAsIDB4NWQsIDB4ODAsIDB4OWQsIDB4NDEsIDB4NWYsIDB4MDAsIDB4OWYsIDB4YzEsIDB4OWUsIDB4ODEsIDB4NWUsIDB4NDB9IH0sCit7IDB4YTA0NSwJMTYsCXsweDVhLCAweDAwLCAweDlhLCAweGMxLCAweDliLCAweDgxLCAweDViLCAweDQwLCAweDk5LCAweDAxLCAweDU5LCAweGMwLCAweDU4LCAweDgwLCAweDk4LCAweDQxfSB9LAoreyAweGEwNTUsCTE2LAl7MHg4OCwgMHgwMSwgMHg0OCwgMHhjMCwgMHg0OSwgMHg4MCwgMHg4OSwgMHg0MSwgMHg0YiwgMHgwMCwgMHg4YiwgMHhjMSwgMHg4YSwgMHg4MSwgMHg0YSwgMHg0MH0gfSwKK3sgMHhhMDY1LAkxNiwJezB4NGUsIDB4MDAsIDB4OGUsIDB4YzEsIDB4OGYsIDB4ODEsIDB4NGYsIDB4NDAsIDB4OGQsIDB4MDEsIDB4NGQsIDB4YzAsIDB4NGMsIDB4ODAsIDB4OGMsIDB4NDF9IH0sCit7IDB4YTA3NSwJMTYsCXsweDQ0LCAweDAwLCAweDg0LCAweGMxLCAweDg1LCAweDgxLCAweDQ1LCAweDQwLCAweDg3LCAweDAxLCAweDQ3LCAweGMwLCAweDQ2LCAweDgwLCAweDg2LCAweDQxfSB9LAoreyAweGEwODUsCTE2LAl7MHg4MiwgMHgwMSwgMHg0MiwgMHhjMCwgMHg0MywgMHg4MCwgMHg4MywgMHg0MSwgMHg0MSwgMHgwMCwgMHg4MSwgMHhjMSwgMHg4MCwgMHg4MSwgMHg0MCwgMHg0MH0gfSwKK3sgMHhhMDk1LAkxNiwJezB4ZTQsIDB4ZmYsIDB4NzQsIDB4ZjgsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDIsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NzAsIDB4MDMsIDB4MDJ9IH0sCit7IDB4YTBhNSwJMTYsCXsweGExLCAweDM4LCAweDc0LCAweDNhLCAweDJmLCAweGY4LCAweGU2LCAweDIwLCAweGU1LCAweDAzLCAweDAyLCAweGExLCAweDM4LCAweGVmLCAweDc1LCAweGYwfSB9LAoreyAweGEwYjUsCTE2LAl7MHgwOCwgMHhhNCwgMHgyNCwgMHgwMCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgyMCwgMHhhZCwgMHg4MiwgMHhmYywgMHhmNSwgMHg4MywgMHhlNSwgMHg4Mn0gfSwKK3sgMHhhMGM1LAkxNiwJezB4MjQsIDB4MDUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4ODMsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4NjAsIDB4NjQsIDB4NjAsIDB4NzAsIDB4NjN9IH0sCit7IDB4YTBkNSwJMTYsCXsweGVmLCAweDI1LCAweGUwLCAweDI0LCAweGVmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDAyLCAweGY1LCAweDgzLCAweGU0LCAweDc1LCAweGYwLCAweDAxfSB9LAoreyAweGEwZTUsCTE2LAl7MHgxMiwgMHhhMiwgMHg5NywgMHg4NSwgMHhmMCwgMHg4MiwgMHhmNSwgMHg4MywgMHhlMCwgMHg4ZCwgMHg4MiwgMHg4YywgMHg4MywgMHhmMCwgMHg3NCwgMHhmOH0gfSwKK3sgMHhhMGY1LAkxNiwJezB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDIsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4ZjAsIDB4NzAsIDB4MzYsIDB4ZWYsIDB4MjUsIDB4ZTB9IH0sCit7IDB4YTEwNSwJMTYsCXsweDI0LCAweGM3LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweGVmLCAweDI1LCAweGUwLCAweGZlLCAweGMzfSB9LAoreyAweGExMTUsCTE2LAl7MHg3NCwgMHgwYywgMHg5ZSwgMHg3NSwgMHhmMCwgMHg0MCwgMHhhNCwgMHgyNCwgMHg0MCwgMHhmNSwgMHg4MiwgMHhlNSwgMHhmMCwgMHgzNCwgMHg3YiwgMHhhZH0gfSwKK3sgMHhhMTI1LAkxNiwJezB4ODIsIDB4ZmMsIDB4ZWYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4ZWYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDIsIDB4ZjUsIDB4ODMsIDB4ZWMsIDB4ZjB9IH0sCit7IDB4YTEzNSwJMTIsCXsweGEzLCAweGVkLCAweGYwLCAweDBmLCAweGVmLCAweDY0LCAweDA0LCAweDYwLCAweDAzLCAweDAyLCAweGEwLCAweDk3fSB9LAoreyAweGExNDEsCTEsCXsweDIyfSB9LAoreyAweGExNDIsCTE2LAl7MHhlNywgMHgwOSwgMHhmNiwgMHgwOCwgMHhkZiwgMHhmYSwgMHg4MCwgMHg0NiwgMHhlNywgMHgwOSwgMHhmMiwgMHgwOCwgMHhkZiwgMHhmYSwgMHg4MCwgMHgzZX0gfSwKK3sgMHhhMTUyLAkxNiwJezB4ODgsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZTcsIDB4MDksIDB4ZjAsIDB4YTMsIDB4ZGYsIDB4ZmEsIDB4ODAsIDB4MzIsIDB4ZTMsIDB4MDksIDB4ZjYsIDB4MDh9IH0sCit7IDB4YTE2MiwJMTYsCXsweGRmLCAweGZhLCAweDgwLCAweDc4LCAweGUzLCAweDA5LCAweGYyLCAweDA4LCAweGRmLCAweGZhLCAweDgwLCAweDcwLCAweDg4LCAweDgyLCAweDhjLCAweDgzfSB9LAoreyAweGExNzIsCTE2LAl7MHhlMywgMHgwOSwgMHhmMCwgMHhhMywgMHhkZiwgMHhmYSwgMHg4MCwgMHg2NCwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHhhMywgMHhmNiwgMHgwOH0gfSwKK3sgMHhhMTgyLAkxNiwJezB4ZGYsIDB4ZmEsIDB4ODAsIDB4NTgsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTAsIDB4YTMsIDB4ZjIsIDB4MDgsIDB4ZGYsIDB4ZmEsIDB4ODAsIDB4NGN9IH0sCit7IDB4YTE5MiwJMTYsCXsweDgwLCAweGQyLCAweDgwLCAweGZhLCAweDgwLCAweGM2LCAweDgwLCAweGQ0LCAweDgwLCAweDY5LCAweDgwLCAweGYyLCAweDgwLCAweDMzLCAweDgwLCAweDEwfSB9LAoreyAweGExYTIsCTE2LAl7MHg4MCwgMHhhNiwgMHg4MCwgMHhlYSwgMHg4MCwgMHg5YSwgMHg4MCwgMHhhOCwgMHg4MCwgMHhkYSwgMHg4MCwgMHhlMiwgMHg4MCwgMHhjYSwgMHg4MCwgMHgzM30gfSwKK3sgMHhhMWIyLAkxNiwJezB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZWMsIDB4ZmEsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2MsIDB4YzUsIDB4ODN9IH0sCit7IDB4YTFjMiwJMTYsCXsweGNjLCAweGYwLCAweGEzLCAweGM4LCAweGM1LCAweDgyLCAweGM4LCAweGNjLCAweGM1LCAweDgzLCAweGNjLCAweGRmLCAweGU5LCAweGRlLCAweGU3LCAweDgwfSB9LAoreyAweGExZDIsCTE2LAl7MHgwZCwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlNCwgMHg5MywgMHhhMywgMHhmNiwgMHgwOCwgMHhkZiwgMHhmOSwgMHhlYywgMHhmYSwgMHhhOSwgMHhmMH0gfSwKK3sgMHhhMWUyLAkxNiwJezB4ZWQsIDB4ZmIsIDB4MjIsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZWMsIDB4ZmEsIDB4ZTAsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2N9IH0sCit7IDB4YTFmMiwJMTYsCXsweGM1LCAweDgzLCAweGNjLCAweGYwLCAweGEzLCAweGM4LCAweGM1LCAweDgyLCAweGM4LCAweGNjLCAweGM1LCAweDgzLCAweGNjLCAweGRmLCAweGVhLCAweGRlfSB9LAoreyAweGEyMDIsCTE2LAl7MHhlOCwgMHg4MCwgMHhkYiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlNCwgMHg5MywgMHhhMywgMHhmMiwgMHgwOCwgMHhkZiwgMHhmOSwgMHg4MCwgMHhjY30gfSwKK3sgMHhhMjEyLAkxNiwJezB4ODgsIDB4ZjAsIDB4ZWQsIDB4MjQsIDB4MDIsIDB4YjQsIDB4MDQsIDB4MDAsIDB4NTAsIDB4YzIsIDB4ZjUsIDB4ODIsIDB4ZWIsIDB4MjQsIDB4MDIsIDB4YjR9IH0sCit7IDB4YTIyMiwJMTYsCXsweDA0LCAweDAwLCAweDUwLCAweGI4LCAweDIzLCAweDIzLCAweDQ1LCAweDgyLCAweGY1LCAweDgyLCAweGVmLCAweDRlLCAweDYwLCAweGFlLCAweGVmLCAweDYwfSB9LAoreyAweGEyMzIsCTksCXsweDAxLCAweDBlLCAweGU1LCAweDgyLCAweDIzLCAweDkwLCAweGExLCAweDkyLCAweDczfSB9LAoreyAweGEyM2IsCTE2LAl7MHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwMiwgMHhlNywgMHgyMiwgMHhiYiwgMHhmZSwgMHgwMn0gfSwKK3sgMHhhMjRiLAk5LAl7MHhlMywgMHgyMiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMn0gfSwKK3sgMHhhMjU0LAkxNiwJezB4YmIsIDB4MDEsIDB4MGMsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTB9IH0sCit7IDB4YTI2NCwJMTYsCXsweDA2LCAweGU5LCAweDI1LCAweDgyLCAweGY4LCAweGU2LCAweDIyLCAweGJiLCAweGZlLCAweDA2LCAweGU5LCAweDI1LCAweDgyLCAweGY4LCAweGUyLCAweDIyfSB9LAoreyAweGEyNzQsCTEzLAl7MHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMn0gfSwKK3sgMHhhMjgxLAkxNiwJezB4YzUsIDB4ZjAsIDB4ZjgsIDB4YTMsIDB4ZTAsIDB4MjgsIDB4ZjAsIDB4YzUsIDB4ZjAsIDB4ZjgsIDB4ZTUsIDB4ODIsIDB4MTUsIDB4ODIsIDB4NzAsIDB4MDJ9IH0sCit7IDB4YTI5MSwJNiwJezB4MTUsIDB4ODMsIDB4ZTAsIDB4MzgsIDB4ZjAsIDB4MjJ9IH0sCit7IDB4YTI5NywJMTYsCXsweGEzLCAweGY4LCAweGUwLCAweGM1LCAweGYwLCAweDI1LCAweGYwLCAweGYwLCAweGU1LCAweDgyLCAweDE1LCAweDgyLCAweDcwLCAweDAyLCAweDE1LCAweDgzfSB9LAoreyAweGEyYTcsCTYsCXsweGUwLCAweGM4LCAweDM4LCAweGYwLCAweGU4LCAweDIyfSB9LAoreyAweGEyYWQsCTE2LAl7MHhiYiwgMHgwMSwgMHgxMCwgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHhmMH0gfSwKK3sgMHhhMmJkLAkxNiwJezB4YTMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDksIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ODYsIDB4ZjAsIDB4MDgsIDB4ZTYsIDB4MjIsIDB4YmIsIDB4ZmV9IH0sCit7IDB4YTJjZCwJMTYsCXsweDBhLCAweGU5LCAweDI1LCAweDgyLCAweGY4LCAweGUyLCAweGY1LCAweGYwLCAweDA4LCAweGUyLCAweDIyLCAweGU1LCAweDgzLCAweDJhLCAweGY1LCAweDgzfSB9LAoreyAweGEyZGQsCTgsCXsweGU5LCAweDkzLCAweGY1LCAweGYwLCAweGEzLCAweGU5LCAweDkzLCAweDIyfSB9LAoreyAweGEyZTUsCTE2LAl7MHg3NSwgMHhmMCwgMHgwOCwgMHg3NSwgMHg4MiwgMHgwMCwgMHhlZiwgMHgyZiwgMHhmZiwgMHhlZSwgMHgzMywgMHhmZSwgMHhjZCwgMHgzMywgMHhjZCwgMHhjY30gfSwKK3sgMHhhMmY1LAkxNiwJezB4MzMsIDB4Y2MsIDB4YzUsIDB4ODIsIDB4MzMsIDB4YzUsIDB4ODIsIDB4OWIsIDB4ZWQsIDB4OWEsIDB4ZWMsIDB4OTksIDB4ZTUsIDB4ODIsIDB4OTgsIDB4NDB9IH0sCit7IDB4YTMwNSwJMTYsCXsweDBjLCAweGY1LCAweDgyLCAweGVlLCAweDliLCAweGZlLCAweGVkLCAweDlhLCAweGZkLCAweGVjLCAweDk5LCAweGZjLCAweDBmLCAweGQ1LCAweGYwLCAweGQ2fSB9LAoreyAweGEzMTUsCTE2LAl7MHhlNCwgMHhjZSwgMHhmYiwgMHhlNCwgMHhjZCwgMHhmYSwgMHhlNCwgMHhjYywgMHhmOSwgMHhhOCwgMHg4MiwgMHgyMiwgMHhiOCwgMHgwMCwgMHhjMSwgMHhiOX0gfSwKK3sgMHhhMzI1LAkxNiwJezB4MDAsIDB4NTksIDB4YmEsIDB4MDAsIDB4MmQsIDB4ZWMsIDB4OGIsIDB4ZjAsIDB4ODQsIDB4Y2YsIDB4Y2UsIDB4Y2QsIDB4ZmMsIDB4ZTUsIDB4ZjAsIDB4Y2J9IH0sCit7IDB4YTMzNSwJMTYsCXsweGY5LCAweDc4LCAweDE4LCAweGVmLCAweDJmLCAweGZmLCAweGVlLCAweDMzLCAweGZlLCAweGVkLCAweDMzLCAweGZkLCAweGVjLCAweDMzLCAweGZjLCAweGVifSB9LAoreyAweGEzNDUsCTE2LAl7MHgzMywgMHhmYiwgMHgxMCwgMHhkNywgMHgwMywgMHg5OSwgMHg0MCwgMHgwNCwgMHhlYiwgMHg5OSwgMHhmYiwgMHgwZiwgMHhkOCwgMHhlNSwgMHhlNCwgMHhmOX0gfSwKK3sgMHhhMzU1LAkxNiwJezB4ZmEsIDB4MjIsIDB4NzgsIDB4MTgsIDB4ZWYsIDB4MmYsIDB4ZmYsIDB4ZWUsIDB4MzMsIDB4ZmUsIDB4ZWQsIDB4MzMsIDB4ZmQsIDB4ZWMsIDB4MzMsIDB4ZmN9IH0sCit7IDB4YTM2NSwJMTYsCXsweGM5LCAweDMzLCAweGM5LCAweDEwLCAweGQ3LCAweDA1LCAweDliLCAweGU5LCAweDlhLCAweDQwLCAweDA3LCAweGVjLCAweDliLCAweGZjLCAweGU5LCAweDlhfSB9LAoreyAweGEzNzUsCTE2LAl7MHhmOSwgMHgwZiwgMHhkOCwgMHhlMCwgMHhlNCwgMHhjOSwgMHhmYSwgMHhlNCwgMHhjYywgMHhmYiwgMHgyMiwgMHg3NSwgMHhmMCwgMHgxMCwgMHhlZiwgMHgyZn0gfSwKK3sgMHhhMzg1LAkxNiwJezB4ZmYsIDB4ZWUsIDB4MzMsIDB4ZmUsIDB4ZWQsIDB4MzMsIDB4ZmQsIDB4Y2MsIDB4MzMsIDB4Y2MsIDB4YzgsIDB4MzMsIDB4YzgsIDB4MTAsIDB4ZDcsIDB4MDd9IH0sCit7IDB4YTM5NSwJMTYsCXsweDliLCAweGVjLCAweDlhLCAweGU4LCAweDk5LCAweDQwLCAweDBhLCAweGVkLCAweDliLCAweGZkLCAweGVjLCAweDlhLCAweGZjLCAweGU4LCAweDk5LCAweGY4fSB9LAoreyAweGEzYTUsCTE0LAl7MHgwZiwgMHhkNSwgMHhmMCwgMHhkYSwgMHhlNCwgMHhjZCwgMHhmYiwgMHhlNCwgMHhjYywgMHhmYSwgMHhlNCwgMHhjOCwgMHhmOSwgMHgyMn0gfSwKK3sgMHhhM2IzLAkxNiwJezB4ZWIsIDB4OWYsIDB4ZjUsIDB4ZjAsIDB4ZWEsIDB4OWUsIDB4NDIsIDB4ZjAsIDB4ZTksIDB4OWQsIDB4NDIsIDB4ZjAsIDB4ZTgsIDB4OWMsIDB4NDUsIDB4ZjB9IH0sCit7IDB4YTNjMywJMSwJezB4MjJ9IH0sCit7IDB4YTNjNCwJMTYsCXsweGU4LCAweDYwLCAweDBmLCAweGVjLCAweGMzLCAweDEzLCAweGZjLCAweGVkLCAweDEzLCAweGZkLCAweGVlLCAweDEzLCAweGZlLCAweGVmLCAweDEzLCAweGZmfSB9LAoreyAweGEzZDQsCTMsCXsweGQ4LCAweGYxLCAweDIyfSB9LAoreyAweGEzZDcsCTE2LAl7MHgwOCwgMHgwOCwgMHgwOCwgMHhlNiwgMHhjZiwgMHgyZiwgMHhmNiwgMHgxOCwgMHhlNiwgMHhjZSwgMHgzZSwgMHhmNiwgMHgxOCwgMHhlNiwgMHhjZCwgMHgzZH0gfSwKK3sgMHhhM2U3LAk3LAl7MHhmNiwgMHgxOCwgMHhlNiwgMHhjYywgMHgzYywgMHhmNiwgMHgyMn0gfSwKK3sgMHhhM2VlLAkxMiwJezB4ZWMsIDB4ZjAsIDB4YTMsIDB4ZWQsIDB4ZjAsIDB4YTMsIDB4ZWUsIDB4ZjAsIDB4YTMsIDB4ZWYsIDB4ZjAsIDB4MjJ9IH0sCit7IDB4YTNmYSwJMTYsCXsweGE4LCAweDgyLCAweDg1LCAweDgzLCAweGYwLCAweGQwLCAweDgzLCAweGQwLCAweDgyLCAweDEyLCAweGE0LCAweDExLCAweDEyLCAweGE0LCAweDExLCAweDEyfSB9LAoreyAweGE0MGEsCTE2LAl7MHhhNCwgMHgxMSwgMHgxMiwgMHhhNCwgMHgxMSwgMHhlNCwgMHg3MywgMHhlNCwgMHg5MywgMHhhMywgMHhjNSwgMHg4MywgMHhjNSwgMHhmMCwgMHhjNSwgMHg4M30gfSwKK3sgMHhhNDFhLAkxNiwJezB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4ZjAsIDB4YTMsIDB4YzUsIDB4ODMsIDB4YzUsIDB4ZjAsIDB4YzUsIDB4ODMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4Yzh9IH0sCit7IDB4YTQyYSwJMSwJezB4MjJ9IH0sCit7IDB4ZmZmZiwJMCwJezB4MDB9IH0KK307CisKKyNpZmRlZiBERUJVRworc3RhdGljIGNvbnN0IHN0cnVjdCB3aGl0ZWhlYXRfaGV4X3JlY29yZCB3aGl0ZWhlYXRfbG9hZGVyW10gPSB7Cit7IDB4MDAwMCwJMywJezB4MDIsIDB4MDksIDB4OGR9IH0sCit7IDB4MDAzMywJMywJezB4MDIsIDB4MGUsIDB4NzB9IH0sCit7IDB4MDA0MywJMywJezB4MDIsIDB4MGIsIDB4MDB9IH0sCit7IDB4MDA0YiwJMywJezB4MDIsIDB4MDUsIDB4YjN9IH0sCit7IDB4MDEwMCwJMTYsCXsweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDU0LCAweDEwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweDQ0LCAweDUwLCAweGY1LCAweDBmLCAweDEzLCAweGU0fSB9LAoreyAweDAxMTAsCTE2LAl7MHgzMywgMHhmNSwgMHgxMSwgMHg5MCwgMHg3ZiwgMHhlOSwgMHhlMCwgMHgyNCwgMHg1ZSwgMHhiNCwgMHgwNywgMHgwMCwgMHg0MCwgMHgwMywgMHgwMiwgMHgwM30gfSwKK3sgMHgwMTIwLAkxNiwJezB4N2MsIDB4OTAsIDB4MDEsIDB4MjgsIDB4ZjgsIDB4MjgsIDB4MjgsIDB4NzMsIDB4MDIsIDB4MDEsIDB4YmMsIDB4MDIsIDB4MDEsIDB4YmMsIDB4MDIsIDB4MDF9IH0sCit7IDB4MDEzMCwJMTYsCXsweDkxLCAweDAyLCAweDAxLCAweDNkLCAweDAyLCAweDAxLCAweDUzLCAweDAyLCAweDAxLCAweDZmLCAweDAyLCAweDAxLCAweDlhLCAweDkwLCAweDdmLCAweDAwfSB9LAoreyAweDAxNDAsCTE2LAl7MHhlNSwgMHgxMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMH0gfSwKK3sgMHgwMTUwLAkxNiwJezB4MDIsIDB4MDMsIDB4N2MsIDB4OTAsIDB4N2YsIDB4OTIsIDB4ZTAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4OTB9IH0sCit7IDB4MDE2MCwJMTYsCXsweDdmLCAweGI1LCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDAyLCAweDAzLCAweDdjLCAweDEyfSB9LAoreyAweDAxNzAsCTE2LAl7MHgwYSwgMHg4OSwgMHg1MCwgMHgwNywgMHhlNCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHg4MCwgMHgwNiwgMHg5MCwgMHg3ZiwgMHgwMCwgMHg3NCwgMHgwZn0gfSwKK3sgMHgwMTgwLAkxNiwJezB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDN9IH0sCit7IDB4MDE5MCwJMTYsCXsweDdjLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGY1LCAweDBmLCAweDAyLCAweDAzLCAweDdjLCAweDkwLCAweDdmLCAweDAwLCAweDc0LCAweDA3LCAweGYwfSB9LAoreyAweDAxYTAsCTE2LAl7MHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg3ZiwgMHhlOCwgMHg3ZX0gfSwKK3sgMHgwMWIwLAkxNiwJezB4MDMsIDB4MTIsIDB4MGQsIDB4ZDUsIDB4ZDIsIDB4MDYsIDB4MTIsIDB4MGQsIDB4MGQsIDB4MDIsIDB4MDMsIDB4N2MsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTB9IH0sCit7IDB4MDFjMCwJMTYsCXsweDc1LCAweDI5LCAweDAwLCAweGY1LCAweDJhLCAweGEzLCAweGUwLCAweGZlLCAweGU0LCAweGVlLCAweDQyLCAweDI5LCAweDkwLCAweDdmLCAweGVlLCAweGUwfSB9LAoreyAweDAxZDAsCTE2LAl7MHg3NSwgMHgyYiwgMHgwMCwgMHhmNSwgMHgyYywgMHhhMywgMHhlMCwgMHhmZSwgMHhlNCwgMHhlZSwgMHg0MiwgMHgyYiwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMH0gfSwKK3sgMHgwMWUwLAkxNiwJezB4NjQsIDB4YzAsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MDIsIDB4YzksIDB4ZTUsIDB4MmMsIDB4NDUsIDB4MmIsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDMsIDB4N2N9IH0sCit7IDB4MDFmMCwJMTYsCXsweGMzLCAweGU1LCAweDJjLCAweDk0LCAweDQwLCAweGU1LCAweDJiLCAweDk0LCAweDAwLCAweDUwLCAweDA4LCAweDg1LCAweDJiLCAweDJkLCAweDg1LCAweDJjfSB9LAoreyAweDAyMDAsCTE2LAl7MHgyZSwgMHg4MCwgMHgwNiwgMHg3NSwgMHgyZCwgMHgwMCwgMHg3NSwgMHgyZSwgMHg0MCwgMHg5MCwgMHg3ZiwgMHhlOSwgMHhlMCwgMHg2NCwgMHhhMywgMHg3MH0gfSwKK3sgMHgwMjEwLAkxNiwJezB4MzQsIDB4ZjUsIDB4MzEsIDB4ZjUsIDB4MzIsIDB4YzMsIDB4ZTUsIDB4MzIsIDB4OTUsIDB4MmUsIDB4ZTUsIDB4MzEsIDB4OTUsIDB4MmQsIDB4NTAsIDB4NWN9IH0sCit7IDB4MDIyMCwJMTYsCXsweGU1LCAweDJhLCAweDI1LCAweDMyLCAweGY1LCAweDgyLCAweGU1LCAweDMxLCAweDM1LCAweDI5LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweDc0LCAweDAwfSB9LAoreyAweDAyMzAsCTE2LAl7MHgyNSwgMHgzMiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgzMiwgMHhlNSwgMHgzMiwgMHg3MH0gfSwKK3sgMHgwMjQwLAkxNiwJezB4MDIsIDB4MDUsIDB4MzEsIDB4ODAsIDB4ZDAsIDB4ZTQsIDB4ZjUsIDB4MzEsIDB4ZjUsIDB4MzIsIDB4YzMsIDB4ZTUsIDB4MzIsIDB4OTUsIDB4MmUsIDB4ZTV9IH0sCit7IDB4MDI1MCwJMTYsCXsweDMxLCAweDk1LCAweDJkLCAweDUwLCAweDE4LCAweDc0LCAweDAwLCAweDI1LCAweDMyLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzfSB9LAoreyAweDAyNjAsCTE2LAl7MHg3NCwgMHhjZCwgMHhmMCwgMHgwNSwgMHgzMiwgMHhlNSwgMHgzMiwgMHg3MCwgMHgwMiwgMHgwNSwgMHgzMSwgMHg4MCwgMHhkZCwgMHhhZiwgMHgyYSwgMHhhZX0gfSwKK3sgMHgwMjcwLAkxNiwJezB4MjksIDB4YWQsIDB4MmUsIDB4N2EsIDB4N2YsIDB4NzksIDB4MDAsIDB4N2IsIDB4MDAsIDB4MTIsIDB4MGIsIDB4ZjQsIDB4OTAsIDB4N2YsIDB4YjUsIDB4ZTV9IH0sCit7IDB4MDI4MCwJMTYsCXsweDJlLCAweGYwLCAweGU1LCAweDJlLCAweDI1LCAweDJhLCAweGY1LCAweDJhLCAweGU1LCAweDJkLCAweDM1LCAweDI5LCAweGY1LCAweDI5LCAweGMzLCAweGU1fSB9LAoreyAweDAyOTAsCTE2LAl7MHgyYywgMHg5NSwgMHgyZSwgMHhmNSwgMHgyYywgMHhlNSwgMHgyYiwgMHg5NSwgMHgyZCwgMHhmNSwgMHgyYiwgMHg5MCwgMHg3ZiwgMHg5MiwgMHhlMCwgMHhmZn0gfSwKK3sgMHgwMmEwLAkxNiwJezB4YzQsIDB4NTQsIDB4MGYsIDB4NzUsIDB4MmYsIDB4MDAsIDB4ZjUsIDB4MzAsIDB4ZDMsIDB4OTQsIDB4MDAsIDB4ZTUsIDB4MmYsIDB4OTQsIDB4MDAsIDB4NTB9IH0sCit7IDB4MDJiMCwJMTYsCXsweDBjLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDIwLCAweGUxLCAweDAzLCAweDAyLCAweDAxLCAweGU3LCAweDgwLCAweGY0LCAweDkwLCAweDdmLCAweGI0fSB9LAoreyAweDAyYzAsCTE2LAl7MHhlMCwgMHgyMCwgMHhlMiwgMHgwMywgMHgwMiwgMHgwMSwgMHhlNywgMHg4MCwgMHhmNCwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHg2NCwgMHg0MCwgMHg2MH0gfSwKK3sgMHgwMmQwLAkxNiwJezB4MDMsIDB4MDIsIDB4MDMsIDB4N2MsIDB4ZTUsIDB4MmMsIDB4NDUsIDB4MmIsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDMsIDB4N2MsIDB4ZTQsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MDJlMCwJMTYsCXsweGM1LCAweGYwLCAweDkwLCAweDdmLCAweDkyLCAweGUwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweDc1LCAweDJmLCAweDAwLCAweGY1LCAweDMwLCAweGQzfSB9LAoreyAweDAyZjAsCTE2LAl7MHg5NCwgMHgwMCwgMHhlNSwgMHgyZiwgMHg5NCwgMHgwMCwgMHg1MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHhjNCwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwOSwgMHg4MH0gfSwKK3sgMHgwMzAwLAkxNiwJezB4ZjcsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4MjAsIDB4ZTMsIDB4ZjksIDB4OTAsIDB4N2YsIDB4YzUsIDB4ZTAsIDB4NzUsIDB4MmQsIDB4MDAsIDB4ZjV9IH0sCit7IDB4MDMxMCwJMTYsCXsweDJlLCAweDkwLCAweDdmLCAweGU5LCAweGUwLCAweDY0LCAweGEzLCAweDcwLCAweDM4LCAweDkwLCAweDIwLCAweDZiLCAweGYwLCAweGY1LCAweDMxLCAweGY1fSB9LAoreyAweDAzMjAsCTE2LAl7MHgzMiwgMHhjMywgMHhlNSwgMHgzMiwgMHg5NSwgMHgyZSwgMHhlNSwgMHgzMSwgMHg5NSwgMHgyZCwgMHg1MCwgMHgzNCwgMHg3NCwgMHhjMCwgMHgyNSwgMHgzMn0gfSwKK3sgMHgwMzMwLAkxNiwJezB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MmEsIDB4MjUsIDB4MzIsIDB4ZjUsIDB4ODIsIDB4ZTV9IH0sCit7IDB4MDM0MCwJMTYsCXsweDMxLCAweDM1LCAweDI5LCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDMyLCAweGU1LCAweDMyLCAweDcwLCAweDAyLCAweDA1LCAweDMxLCAweDgwfSB9LAoreyAweDAzNTAsCTE2LAl7MHhkMCwgMHhhZiwgMHgyYSwgMHhhZSwgMHgyOSwgMHhhZCwgMHgyZSwgMHg3YSwgMHg3ZSwgMHg3OSwgMHhjMCwgMHg3YiwgMHhjMCwgMHgxMiwgMHgwYywgMHg4MH0gfSwKK3sgMHgwMzYwLAkxNiwJezB4ZTUsIDB4MmUsIDB4MjUsIDB4MmEsIDB4ZjUsIDB4MmEsIDB4ZTUsIDB4MmQsIDB4MzUsIDB4MjksIDB4ZjUsIDB4MjksIDB4YzMsIDB4ZTUsIDB4MmMsIDB4OTV9IH0sCit7IDB4MDM3MCwJMTMsCXsweDJlLCAweGY1LCAweDJjLCAweGU1LCAweDJiLCAweDk1LCAweDJkLCAweGY1LCAweDJiLCAweDAyLCAweDAyLCAweGQ0LCAweGMzfSB9LAoreyAweDAzN2QsCTEsCXsweDIyfSB9LAoreyAweDAzN2UsCTE2LAl7MHg5MCwgMHg3ZiwgMHhlOSwgMHhlMCwgMHg3MCwgMHgwMywgMHgwMiwgMHgwNCwgMHg1NiwgMHgxNCwgMHg3MCwgMHgwMywgMHgwMiwgMHgwNCwgMHhkMiwgMHgyNH0gfSwKK3sgMHgwMzhlLAkxNiwJezB4ZmUsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDUsIDB4NDYsIDB4MjQsIDB4ZmIsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4NTAsIDB4MTQsIDB4NzAsIDB4MDN9IH0sCit7IDB4MDM5ZSwJMTYsCXsweDAyLCAweDA0LCAweDRhLCAweDE0LCAweDcwLCAweDAzLCAweDAyLCAweDA0LCAweDNlLCAweDE0LCAweDcwLCAweDAzLCAweDAyLCAweDA0LCAweDQ0LCAweDI0fSB9LAoreyAweDAzYWUsCTE2LAl7MHgwNSwgMHg2MCwgMHgwMywgMHgwMiwgMHgwNSwgMHg5YSwgMHgxMiwgMHgwZSwgMHg3YiwgMHg0MCwgMHgwMywgMHgwMiwgMHgwNSwgMHhhYiwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwM2JlLAkxNiwJezB4ZWIsIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTYsIDB4MTQsIDB4NjAsIDB4NDAsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NjksIDB4NzQsIDB4MTEsIDB4OTB9IH0sCit7IDB4MDNjZSwJMTYsCXsweDdmLCAweGQ0LCAweGYwLCAweDc0LCAweDAwLCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDA1LCAweGFiLCAweDkwLCAweDdmLCAweGVhLCAweGUwfSB9LAoreyAweDAzZGUsCTE2LAl7MHhmZiwgMHgxMiwgMHgwYiwgMHg1OCwgMHg4YiwgMHgyNiwgMHg4YSwgMHgyNywgMHg4OSwgMHgyOCwgMHhlYSwgMHg0OSwgMHg2MCwgMHgxMSwgMHhhZSwgMHgwMn0gfSwKK3sgMHgwM2VlLAkxNiwJezB4ZWUsIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4YWYsIDB4MDEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YWIsIDB4OTB9IH0sCit7IDB4MDNmZSwJMTYsCXsweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDA1LCAweGFiLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGZmLCAweDEyLCAweDBjfSB9LAoreyAweDA0MGUsCTE2LAl7MHgzZiwgMHg4YiwgMHgyNiwgMHg4YSwgMHgyNywgMHg4OSwgMHgyOCwgMHhlYSwgMHg0OSwgMHg2MCwgMHgxMSwgMHhhZSwgMHgwMiwgMHhlZSwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwNDFlLAkxNiwJezB4ZDQsIDB4ZjAsIDB4YWYsIDB4MDEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YWIsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTB9IH0sCit7IDB4MDQyZSwJMTYsCXsweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDA1LCAweGFiLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDA1LCAweGFifSB9LAoreyAweDA0M2UsCTE2LAl7MHgxMiwgMHgwZSwgMHg1MiwgMHgwMiwgMHgwNSwgMHhhYiwgMHgxMiwgMHgwZSwgMHg2MCwgMHgwMiwgMHgwNSwgMHhhYiwgMHgxMiwgMHgwYSwgMHhmNywgMHgwMn0gfSwKK3sgMHgwNDRlLAkxNiwJezB4MDUsIDB4YWIsIDB4MTIsIDB4MDgsIDB4ZjEsIDB4MDIsIDB4MDUsIDB4YWIsIDB4MTIsIDB4MGUsIDB4N2QsIDB4NDAsIDB4MDMsIDB4MDIsIDB4MDUsIDB4YWJ9IH0sCit7IDB4MDQ1ZSwJMTYsCXsweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweDdmLCAweDYwLCAweDI0LCAweDE0LCAweDYwLCAweDMxLCAweDI0LCAweDAyLCAweDcwLCAweDViLCAweGEyfSB9LAoreyAweDA0NmUsCTE2LAl7MHgwMCwgMHhlNCwgMHgzMywgMHhmZiwgMHgyNSwgMHhlMCwgMHhmZiwgMHhhMiwgMHgwMiwgMHhlNCwgMHgzMywgMHg0ZiwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMH0gfSwKK3sgMHgwNDdlLAkxNiwJezB4ZTQsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YWIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4MDB9IH0sCit7IDB4MDQ4ZSwJMTYsCXsweGYwLCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDA1LCAweGFiLCAweDkwLCAweDdmLCAweGVjLCAweGUwfSB9LAoreyAweDA0OWUsCTE2LAl7MHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNH0gfSwKK3sgMHgwNGFlLAkxNiwJezB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4ZTQsIDB4YTN9IH0sCit7IDB4MDRiZSwJMTYsCXsweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDA1LCAweGFiLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxfSB9LAoreyAweDA0Y2UsCTE2LAl7MHhmMCwgMHgwMiwgMHgwNSwgMHhhYiwgMHgxMiwgMHgwZSwgMHg3ZiwgMHg0MCwgMHgwMywgMHgwMiwgMHgwNSwgMHhhYiwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMH0gfSwKK3sgMHgwNGRlLAkxNiwJezB4MjQsIDB4ZmUsIDB4NjAsIDB4MWQsIDB4MjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MDUsIDB4YWIsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjR9IH0sCit7IDB4MDRlZSwJMTYsCXsweDAxLCAweDA1LCAweGMyLCAweDAwLCAweDAyLCAweDA1LCAweGFiLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDA1fSB9LAoreyAweDA0ZmUsCTE2LAl7MHhhYiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgzOCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNH0gfSwKK3sgMHgwNTBlLAkxNiwJezB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2Z9IH0sCit7IDB4MDUxZSwJMTYsCXsweGY1LCAweDgzLCAweGU0LCAweGYwLCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweDU0LCAweDgwLCAweGZmLCAweDEzLCAweDEzLCAweDEzLCAweDU0LCAweDFmfSB9LAoreyAweDA1MmUsCTE2LAl7MHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHg5MCwgMHg3ZiwgMHhkNywgMHhmMCwgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHg4MCwgMHg2ZSwgMHg5MH0gfSwKK3sgMHgwNTNlLAkxNiwJezB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4NjUsIDB4MTIsIDB4MGUsIDB4ODEsIDB4NTAsIDB4NjAsIDB4OTAsIDB4N2YsIDB4ZTh9IH0sCit7IDB4MDU0ZSwJMTYsCXsweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE4LCAweDI0LCAweDAyLCAweDcwLCAweDU0LCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGI0LCAweDAxLCAweDA0fSB9LAoreyAweDA1NWUsCTE2LAl7MHhkMiwgMHgwMCwgMHg4MCwgMHg0OSwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHg0MCwgMHg5MCwgMHg3ZiwgMHhlYX0gfSwKK3sgMHgwNTZlLAkxNiwJezB4ZTAsIDB4NzAsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTB9IH0sCit7IDB4MDU3ZSwJMTYsCXsweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweDc0LCAweDAxfSB9LAoreyAweDA1OGUsCTE2LAl7MHhmMCwgMHg4MCwgMHgxYSwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgxMSwgMHhlNCwgMHg5MCwgMHgyMCwgMHg2YX0gfSwKK3sgMHgwNTllLAkxNiwJezB4ZjAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDcsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjR9IH0sCit7IDB4MDVhZSwJNCwJezB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjB9IH0sCit7IDB4MDViMiwJMSwJezB4MjJ9IH0sCit7IDB4MDViMywJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweGMwfSB9LAoreyAweDA1YzMsCTE2LAl7MHhkMCwgMHhjMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHhjMCwgMHgwMiwgMHhjMCwgMHgwMywgMHhjMCwgMHgwNiwgMHhjMCwgMHgwNywgMHg5MCwgMHg3ZiwgMHhhNX0gfSwKK3sgMHgwNWQzLAkxNiwJezB4ZTAsIDB4MzAsIDB4ZTIsIDB4MDYsIDB4NzUsIDB4MGQsIDB4MDYsIDB4MDIsIDB4MDYsIDB4N2YsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4MjAsIDB4ZTF9IH0sCit7IDB4MDVlMywJMTYsCXsweDBjLCAweGU1LCAweDBkLCAweDY0LCAweDAyLCAweDYwLCAweDA2LCAweDc1LCAweDBkLCAweDA3LCAweDAyLCAweDA2LCAweDdmLCAweGFmLCAweDBkLCAweGVmfSB9LAoreyAweDA1ZjMsCTE2LAl7MHgyNCwgMHhmZSwgMHg2MCwgMHg0OCwgMHgxNCwgMHg2MCwgMHgyYywgMHgyNCwgMHhmZSwgMHg2MCwgMHg3NywgMHgyNCwgMHgwNCwgMHg2MCwgMHgwMywgMHgwMn0gfSwKK3sgMHgwNjAzLAkxNiwJezB4MDYsIDB4N2YsIDB4YWIsIDB4MDksIDB4YWEsIDB4MGEsIDB4YTksIDB4MGIsIDB4YWYsIDB4MGMsIDB4MDUsIDB4MGMsIDB4OGYsIDB4ODIsIDB4NzUsIDB4ODN9IH0sCit7IDB4MDYxMywJMTYsCXsweDAwLCAweDEyLCAweDA3LCAweDg1LCAweDkwLCAweDdmLCAweGE2LCAweGYwLCAweGU1LCAweDBjLCAweDY1LCAweDA4LCAweDcwLCAweDVlLCAweDc1LCAweDBkfSB9LAoreyAweDA2MjMsCTE2LAl7MHgwNSwgMHg4MCwgMHg1OSwgMHg5MCwgMHg3ZiwgMHhhNiwgMHhlMCwgMHhhYiwgMHgwOSwgMHhhYSwgMHgwYSwgMHhhOSwgMHgwYiwgMHhhZSwgMHgwYywgMHg4ZX0gfSwKK3sgMHgwNjMzLAkxNiwJezB4ODIsIDB4NzUsIDB4ODMsIDB4MDAsIDB4MTIsIDB4MDcsIDB4YjIsIDB4NzUsIDB4MGQsIDB4MDIsIDB4ODAsIDB4NDAsIDB4ZTUsIDB4MDgsIDB4MjQsIDB4ZmV9IH0sCit7IDB4MDY0MywJMTYsCXsweGI1LCAweDBjLCAweDA3LCAweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAweGU1LCAweDA4LCAweDE0LCAweGI1LCAweDBjLCAweDBhfSB9LAoreyAweDA2NTMsCTE2LAl7MHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHhlNCwgMHhmNSwgMHgwZCwgMHg5MCwgMHg3ZiwgMHhhNiwgMHhlMCwgMHhhYiwgMHgwOX0gfSwKK3sgMHgwNjYzLAkxNiwJezB4YWEsIDB4MGEsIDB4YTksIDB4MGIsIDB4YWUsIDB4MGMsIDB4OGUsIDB4ODIsIDB4NzUsIDB4ODMsIDB4MDAsIDB4MTIsIDB4MDcsIDB4YjIsIDB4MDUsIDB4MGN9IH0sCit7IDB4MDY3MywJMTYsCXsweDgwLCAweDBhLCAweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweGU0LCAweGY1LCAweDBkLCAweDUzLCAweDkxLCAweGRmLCAweGQwfSB9LAoreyAweDA2ODMsCTE2LAl7MHgwNywgMHhkMCwgMHgwNiwgMHhkMCwgMHgwMywgMHhkMCwgMHgwMiwgMHhkMCwgMHgwMSwgMHhkMCwgMHgwMCwgMHhkMCwgMHhkMCwgMHhkMCwgMHg4NiwgMHhkMH0gfSwKK3sgMHgwNjkzLAkxMCwJezB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9IH0sCit7IDB4MDY5ZCwJMTYsCXsweGMyLCAweDA0LCAweGQyLCAweDA1LCAweGU0LCAweGY1LCAweDI1LCAweGMyLCAweDAzLCAweGMyLCAweDAwLCAweGMyLCAweDAyLCAweGMyLCAweDAxLCAweDEyfSB9LAoreyAweDA2YWQsCTE2LAl7MHgwZSwgMHg3NCwgMHhkMiwgMHhlOCwgMHg0MywgMHhkOCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHhmZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhOX0gfSwKK3sgMHgwNmJkLAkxNiwJezB4ZjAsIDB4OTAsIDB4N2YsIDB4YWEsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4OTUsIDB4ZTAsIDB4NDQsIDB4YzAsIDB4ZjAsIDB4OTB9IH0sCit7IDB4MDZjZCwJMTYsCXsweDdmLCAweDkzLCAweDc0LCAweDMwLCAweGYwLCAweDEyLCAweDBhLCAweDE5LCAweDc1LCAweDI0LCAweDQ4LCAweDc1LCAweDIzLCAweDkyLCAweDc1LCAweDIyfSB9LAoreyAweDA2ZGQsCTE2LAl7MHgwMCwgMHg3NSwgMHgyMSwgMHgwMCwgMHhlNCwgMHhmZiwgMHhmZSwgMHg3ZSwgMHgwNSwgMHg5MCwgMHgyMCwgMHg2OCwgMHg3NCwgMHgwMSwgMHhmMCwgMHhhM30gfSwKK3sgMHgwNmVkLAkxNiwJezB4ZGUsIDB4ZmMsIDB4N2UsIDB4MDAsIDB4N2YsIDB4MDUsIDB4OTAsIDB4N2YsIDB4YWYsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWV9IH0sCit7IDB4MDZmZCwJMTYsCXsweGUwLCAweDQ0LCAweDBkLCAweGYwLCAweGQyLCAweGFmLCAweDEyLCAweDBlLCAweDY4LCAweDMwLCAweDAxLCAweDBhLCAweGU0LCAweDkwLCAweDIwLCAweDY5fSB9LAoreyAweDA3MGQsCTE2LAl7MHhmMCwgMHgxMiwgMHgwMywgMHg3ZSwgMHhjMiwgMHgwMSwgMHgzMCwgMHgwNCwgMHgxYSwgMHgxMiwgMHgwZSwgMHg3NywgMHg1MCwgMHgxMywgMHgxMiwgMHgwOX0gfSwKK3sgMHgwNzFkLAkxNiwJezB4MDAsIDB4MzAsIDB4MDAsIDB4MDcsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4MzAsIDB4ZTcsIDB4ZjMsIDB4MTIsIDB4MGQsIDB4OGIsIDB4MTIsIDB4MGV9IH0sCit7IDB4MDcyZCwJMTYsCXsweDc5LCAweGMyLCAweDAzLCAweDdmLCAweGZmLCAweDdlLCAweGZmLCAweDdkLCAweGZmLCAweDdjLCAweGZmLCAweDc4LCAweDIxLCAweDEyLCAweDA4LCAweDFkfSB9LAoreyAweDA3M2QsCTE2LAl7MHg3YiwgMHgwMCwgMHg3YSwgMHgwMCwgMHg3OSwgMHgwMCwgMHg3OCwgMHgwMCwgMHhjMywgMHgxMiwgMHgwOCwgMHgwYywgMHg3MCwgMHgxYiwgMHg3NSwgMHgyNH0gfSwKK3sgMHgwNzRkLAkxNiwJezB4NDgsIDB4NzUsIDB4MjMsIDB4OTIsIDB4ZjUsIDB4MjIsIDB4ZjUsIDB4MjEsIDB4NjMsIDB4MjUsIDB4ZmYsIDB4OTAsIDB4MjAsIDB4NjgsIDB4ZTUsIDB4MjV9IH0sCit7IDB4MDc1ZCwJMTQsCXsweGYwLCAweGEzLCAweDc0LCAweDAxLCAweGYwLCAweGEzLCAweGYwLCAweGEzLCAweGYwLCAweDEyLCAweDA4LCAweGZmLCAweDgwLCAweDlifSB9LAoreyAweDA3NmIsCTEsCXsweDIyfSB9LAoreyAweDA3NmMsCTE2LAl7MHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwMiwgMHhlNywgMHgyMiwgMHhiYiwgMHhmZSwgMHgwMn0gfSwKK3sgMHgwNzdjLAk5LAl7MHhlMywgMHgyMiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMn0gfSwKK3sgMHgwNzg1LAkxNiwJezB4YmIsIDB4MDEsIDB4MGMsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTB9IH0sCit7IDB4MDc5NSwJMTYsCXsweDA2LCAweGU5LCAweDI1LCAweDgyLCAweGY4LCAweGU2LCAweDIyLCAweGJiLCAweGZlLCAweDA2LCAweGU5LCAweDI1LCAweDgyLCAweGY4LCAweGUyLCAweDIyfSB9LAoreyAweDA3YTUsCTEzLAl7MHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMn0gfSwKK3sgMHgwN2IyLAkxNiwJezB4ZjgsIDB4YmIsIDB4MDEsIDB4MGQsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTgsIDB4ZjB9IH0sCit7IDB4MDdjMiwJMTYsCXsweDIyLCAweDUwLCAweDA2LCAweGU5LCAweDI1LCAweDgyLCAweGM4LCAweGY2LCAweDIyLCAweGJiLCAweGZlLCAweDA1LCAweGU5LCAweDI1LCAweDgyLCAweGM4fSB9LAoreyAweDA3ZDIsCTIsCXsweGYyLCAweDIyfSB9LAoreyAweDA3ZDQsCTE2LAl7MHhiYiwgMHgwMSwgMHgxMCwgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHhmMH0gfSwKK3sgMHgwN2U0LAkxNiwJezB4YTMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDksIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ODYsIDB4ZjAsIDB4MDgsIDB4ZTYsIDB4MjIsIDB4YmIsIDB4ZmV9IH0sCit7IDB4MDdmNCwJMTYsCXsweDBhLCAweGU5LCAweDI1LCAweDgyLCAweGY4LCAweGUyLCAweGY1LCAweGYwLCAweDA4LCAweGUyLCAweDIyLCAweGU1LCAweDgzLCAweDJhLCAweGY1LCAweDgzfSB9LAoreyAweDA4MDQsCTgsCXsweGU5LCAweDkzLCAweGY1LCAweGYwLCAweGEzLCAweGU5LCAweDkzLCAweDIyfSB9LAoreyAweDA4MGMsCTE2LAl7MHhlYiwgMHg5ZiwgMHhmNSwgMHhmMCwgMHhlYSwgMHg5ZSwgMHg0MiwgMHhmMCwgMHhlOSwgMHg5ZCwgMHg0MiwgMHhmMCwgMHhlOCwgMHg5YywgMHg0NSwgMHhmMH0gfSwKK3sgMHgwODFjLAkxLAl7MHgyMn0gfSwKK3sgMHgwODFkLAkxNiwJezB4MDgsIDB4MDgsIDB4MDgsIDB4ZTYsIDB4MmYsIDB4ZmYsIDB4ZjYsIDB4MTgsIDB4ZTYsIDB4M2UsIDB4ZmUsIDB4ZjYsIDB4MTgsIDB4ZTYsIDB4M2QsIDB4ZmR9IH0sCit7IDB4MDgyZCwJNywJezB4ZjYsIDB4MTgsIDB4ZTYsIDB4M2MsIDB4ZmMsIDB4ZjYsIDB4MjJ9IH0sCit7IDB4MDgzNCwJNCwJezB4OGMsIDB4MzQsIDB4OGQsIDB4MzV9IH0sCit7IDB4MDgzOCwJMTYsCXsweDkwLCAweDdmLCAweDk1LCAweGUwLCAweDQ0LCAweGMwLCAweGYwLCAweGU0LCAweGY1LCAweDM2LCAweGY1LCAweDM3LCAweGMzLCAweGU1LCAweDM3LCAweDk1fSB9LAoreyAweDA4NDgsCTE2LAl7MHgzNSwgMHhlNSwgMHgzNiwgMHg5NSwgMHgzNCwgMHg1MCwgMHg2OSwgMHhlZiwgMHgyNSwgMHgzNywgMHhmNSwgMHg4MiwgMHhlNSwgMHgzNiwgMHgzZSwgMHhmNX0gfSwKK3sgMHgwODU4LAkxNiwJezB4ODMsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4ZjQsIDB4NjAsIDB4MDIsIDB4YzMsIDB4MjIsIDB4ZWYsIDB4MjUsIDB4MzcsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MzZ9IH0sCit7IDB4MDg2OCwJMTYsCXsweDNlLCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweDYwLCAweDAyLCAweGMzLCAweDIyLCAweGVmLCAweDI1LCAweDM3LCAweGY1LCAweDgyLCAweGU1LCAweDM2fSB9LAoreyAweDA4NzgsCTE2LAl7MHgzZSwgMHhmNSwgMHg4MywgMHg3NCwgMHhhYSwgMHhmMCwgMHg2NCwgMHhhYSwgMHg2MCwgMHgwMiwgMHhjMywgMHgyMiwgMHhlZiwgMHgyNSwgMHgzNywgMHhmNX0gfSwKK3sgMHgwODg4LAkxNiwJezB4ODIsIDB4ZTUsIDB4MzYsIDB4M2UsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4NTUsIDB4ZjAsIDB4NjQsIDB4NTUsIDB4NjAsIDB4MDIsIDB4YzMsIDB4MjIsIDB4YWR9IH0sCit7IDB4MDg5OCwJMTYsCXsweDM3LCAweGU1LCAweDM3LCAweDJmLCAweGY1LCAweDgyLCAweGU1LCAweDM2LCAweDNlLCAweGY1LCAweDgzLCAweGVkLCAweGYwLCAweGZjLCAweGFjLCAweDA1fSB9LAoreyAweDA4YTgsCTE2LAl7MHhlZCwgMHg2YywgMHg2MCwgMHgwMiwgMHhjMywgMHgyMiwgMHgwNSwgMHgzNywgMHhlNSwgMHgzNywgMHg3MCwgMHgwMiwgMHgwNSwgMHgzNiwgMHg4MCwgMHg4Y30gfSwKK3sgMHgwOGI4LAkxNiwJezB4ZTQsIDB4ZjUsIDB4MzYsIDB4ZjUsIDB4MzcsIDB4YzMsIDB4ZTUsIDB4MzcsIDB4OTUsIDB4MzUsIDB4ZTUsIDB4MzYsIDB4OTUsIDB4MzQsIDB4NTAsIDB4Mjd9IH0sCit7IDB4MDhjOCwJMTYsCXsweGVmLCAweDI1LCAweDM3LCAweGY1LCAweDgyLCAweGU1LCAweDM2LCAweDNlLCAweGY1LCAweDgzLCAweGUwLCAweDY1LCAweDM3LCAweDYwLCAweDAyLCAweGMzfSB9LAoreyAweDA4ZDgsCTE2LAl7MHgyMiwgMHhlZiwgMHgyNSwgMHgzNywgMHhmNSwgMHg4MiwgMHhlNSwgMHgzNiwgMHgzZSwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHgwNSwgMHgzNywgMHhlNX0gfSwKK3sgMHgwOGU4LAk4LAl7MHgzNywgMHg3MCwgMHgwMiwgMHgwNSwgMHgzNiwgMHg4MCwgMHhjZSwgMHhkM30gfSwKK3sgMHgwOGYwLAkxLAl7MHgyMn0gfSwKK3sgMHgwOGYxLAkxNCwJezB4OTAsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4MTAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ZDMsIDB4MjJ9IH0sCit7IDB4MDhmZiwJMSwJezB4MjJ9IH0sCit7IDB4MDkwMCwJOSwJezB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ODAsIDB4NzR9IH0sCit7IDB4MDk3ZCwJMTYsCXsweDQzLCAweDg3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIyfSB9LAoreyAweDA5OGQsCTEyLAl7MHg3OCwgMHg3ZiwgMHhlNCwgMHhmNiwgMHhkOCwgMHhmZCwgMHg3NSwgMHg4MSwgMHgzYSwgMHgwMiwgMHgwOSwgMHhkNH0gfSwKK3sgMHgwOTk5LAkxNiwJezB4MDIsIDB4MDYsIDB4OWQsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NDAsIDB4MDMsIDB4ZjYsIDB4ODAsIDB4MDEsIDB4ZjJ9IH0sCit7IDB4MDlhOSwJMTYsCXsweDA4LCAweGRmLCAweGY0LCAweDgwLCAweDI5LCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweDU0LCAweDA3LCAweDI0LCAweDBjLCAweGM4LCAweGMzLCAweDMzfSB9LAoreyAweDA5YjksCTE2LAl7MHhjNCwgMHg1NCwgMHgwZiwgMHg0NCwgMHgyMCwgMHhjOCwgMHg4MywgMHg0MCwgMHgwNCwgMHhmNCwgMHg1NiwgMHg4MCwgMHgwMSwgMHg0NiwgMHhmNiwgMHhkZn0gfSwKK3sgMHgwOWM5LAkxNiwJezB4ZTQsIDB4ODAsIDB4MGIsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4OTAsIDB4MGUsIDB4MmQsIDB4ZTQsIDB4N2V9IH0sCit7IDB4MDlkOSwJMTYsCXsweDAxLCAweDkzLCAweDYwLCAweGJjLCAweGEzLCAweGZmLCAweDU0LCAweDNmLCAweDMwLCAweGU1LCAweDA5LCAweDU0LCAweDFmLCAweGZlLCAweGU0LCAweDkzfSB9LAoreyAweDA5ZTksCTE2LAl7MHhhMywgMHg2MCwgMHgwMSwgMHgwZSwgMHhjZiwgMHg1NCwgMHhjMCwgMHgyNSwgMHhlMCwgMHg2MCwgMHhhOCwgMHg0MCwgMHhiOCwgMHhlNCwgMHg5MywgMHhhM30gfSwKK3sgMHgwOWY5LAkxNiwJezB4ZmEsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2F9IH0sCit7IDB4MGEwOSwJMTYsCXsweGYwLCAweGEzLCAweGM4LCAweGM1LCAweDgyLCAweGM4LCAweGNhLCAweGM1LCAweDgzLCAweGNhLCAweGRmLCAweGU5LCAweGRlLCAweGU3LCAweDgwLCAweGJlfSB9LAoreyAweDBhMTksCTE2LAl7MHhlNCwgMHg5MCwgMHg3ZiwgMHg5YywgMHhmMCwgMHg3ZiwgMHgwYSwgMHhmZSwgMHgxMiwgMHgwZCwgMHhkNSwgMHg5MCwgMHg3ZiwgMHg5NiwgMHg3NCwgMHg4OX0gfSwKK3sgMHgwYTI5LAkxNiwJezB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4NzQsIDB4Y2YsIDB4ZjAsIDB4N2YsIDB4ZjQsIDB4N2UsIDB4MDEsIDB4MTIsIDB4MGQsIDB4ZDUsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MGEzOSwJMTYsCXsweDk2LCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweDdmLCAweDBhLCAweDdlLCAweDAwLCAweDEyLCAweDBkLCAweGQ1LCAweDdmLCAweDA1LCAweDdlLCAweDAwfSB9LAoreyAweDBhNDksCTE2LAl7MHgxMiwgMHgwZCwgMHhkNSwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmMCwgMHg3ZiwgMHgwNX0gfSwKK3sgMHgwYTU5LAkxNiwJezB4N2UsIDB4MDAsIDB4MTIsIDB4MGQsIDB4ZDUsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4N2YsIDB4MDUsIDB4N2UsIDB4MDB9IH0sCit7IDB4MGE2OSwJMTYsCXsweDEyLCAweDBkLCAweGQ1LCAweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDU0LCAweGJmLCAweGYwLCAweDdmLCAweDMyLCAweDdlLCAweDAwLCAweDEyLCAweDBkfSB9LAoreyAweDBhNzksCTE2LAl7MHhkNSwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg3ZiwgMHgzMiwgMHg3ZSwgMHgwMCwgMHgxMiwgMHgwZCwgMHhkNSwgMHgyMn0gfSwKK3sgMHgwYTg5LAkxNiwJezB4NzUsIDB4MzMsIDB4MDEsIDB4ZTUsIDB4MzMsIDB4NjAsIDB4MWIsIDB4N2YsIDB4MDEsIDB4MTIsIDB4MGUsIDB4MTgsIDB4N2YsIDB4MDAsIDB4N2UsIDB4MGV9IH0sCit7IDB4MGE5OSwJMTYsCXsweDdkLCAweDAwLCAweDdjLCAweDAxLCAweDEyLCAweDA4LCAweDM0LCAweGU0LCAweDMzLCAweGY1LCAweDMzLCAweDcwLCAweDA1LCAweDdmLCAweDBmLCAweDEyfSB9LAoreyAweDBhYTksCTE2LAl7MHgwZSwgMHgxOCwgMHhlNSwgMHgzMywgMHg2MCwgMHgxYiwgMHg3ZiwgMHgwMiwgMHgxMiwgMHgwZSwgMHgxOCwgMHg3ZiwgMHgwMCwgMHg3ZSwgMHg4MCwgMHg3ZH0gfSwKK3sgMHgwYWI5LAkxNiwJezB4MDAsIDB4N2MsIDB4ODAsIDB4MTIsIDB4MDgsIDB4MzQsIDB4ZTQsIDB4MzMsIDB4ZjUsIDB4MzMsIDB4NzAsIDB4MDUsIDB4N2YsIDB4MGYsIDB4MTIsIDB4MGV9IH0sCit7IDB4MGFjOSwJMTYsCXsweDE4LCAweGU1LCAweDMzLCAweDYwLCAweDFiLCAweDdmLCAweDAzLCAweDEyLCAweDBlLCAweDE4LCAweDdmLCAweDAwLCAweDdlLCAweDIwLCAweDdkLCAweDQwfSB9LAoreyAweDBhZDksCTE2LAl7MHg3YywgMHg1YiwgMHgxMiwgMHgwOCwgMHgzNCwgMHhlNCwgMHgzMywgMHhmNSwgMHgzMywgMHg3MCwgMHgwNSwgMHg3ZiwgMHgwZiwgMHgxMiwgMHgwZSwgMHgxOH0gfSwKK3sgMHgwYWU5LAkxMywJezB4ZTUsIDB4MzMsIDB4NjAsIDB4MDUsIDB4ZTQsIDB4ZmYsIDB4MTIsIDB4MGUsIDB4MTgsIDB4ZTUsIDB4MzMsIDB4MjQsIDB4ZmZ9IH0sCit7IDB4MGFmNiwJMSwJezB4MjJ9IH0sCit7IDB4MGFmNywJOCwJezB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MTAsIDB4ZDMsIDB4MjJ9IH0sCit7IDB4MGFmZiwJMSwJezB4MzJ9IH0sCit7IDB4MGIwMCwJMTYsCXsweDAyLCAweDBkLCAweGE1LCAweDAwLCAweDAyLCAweDBkLCAweGVjLCAweDAwLCAweDAyLCAweDBkLCAweDcwLCAweDAwLCAweDAyLCAweDBkLCAweGJkLCAweDAwfSB9LAoreyAweDBiMTAsCTE2LAl7MHgwMiwgMHgwZSwgMHgwMiwgMHgwMCwgMHgwMiwgMHgwYSwgMHhmZiwgMHgwMCwgMHgwMiwgMHgwZSwgMHg4MywgMHgwMCwgMHgwMiwgMHgwZSwgMHg4NCwgMHgwMH0gfSwKK3sgMHgwYjIwLAkxNiwJezB4MDIsIDB4MGUsIDB4ODUsIDB4MDAsIDB4MDIsIDB4MGUsIDB4ODYsIDB4MDAsIDB4MDIsIDB4MGUsIDB4ODcsIDB4MDAsIDB4MDIsIDB4MGUsIDB4ODgsIDB4MDB9IH0sCit7IDB4MGIzMCwJMTYsCXsweDAyLCAweDBlLCAweDg5LCAweDAwLCAweDAyLCAweDBlLCAweDhhLCAweDAwLCAweDAyLCAweDBlLCAweDhiLCAweDAwLCAweDAyLCAweDBlLCAweDhjLCAweDAwfSB9LAoreyAweDBiNDAsCTE2LAl7MHgwMiwgMHgwZSwgMHg4ZCwgMHgwMCwgMHgwMiwgMHgwZSwgMHg4ZSwgMHgwMCwgMHgwMiwgMHgwZSwgMHg4ZiwgMHgwMCwgMHgwMiwgMHgwZSwgMHg5MCwgMHgwMH0gfSwKK3sgMHgwYjUwLAk4LAl7MHgwMiwgMHgwZSwgMHg5MSwgMHgwMCwgMHgwMiwgMHgwZSwgMHg5MiwgMHgwMH0gfSwKK3sgMHgwYjU4LAkxNiwJezB4ZTQsIDB4ZmUsIDB4NzUsIDB4MmIsIDB4ZmYsIDB4NzUsIDB4MmMsIDB4MTEsIDB4NzUsIDB4MmQsIDB4MTIsIDB4YWIsIDB4MmIsIDB4YWEsIDB4MmMsIDB4YTl9IH0sCit7IDB4MGI2OCwJMTYsCXsweDJkLCAweDkwLCAweDAwLCAweDAxLCAweDEyLCAweDA3LCAweDg1LCAweDY0LCAweDAyLCAweDcwLCAweDJkLCAweGFkLCAweDA2LCAweDBlLCAweGVkLCAweGI1fSB9LAoreyAweDBiNzgsCTE2LAl7MHgwNywgMHgwMSwgMHgyMiwgMHg5MCwgMHgwMCwgMHgwMiwgMHgxMiwgMHgwNywgMHhkNCwgMHg4NSwgMHhmMCwgMHgyOSwgMHhmNSwgMHgyYSwgMHg2MiwgMHgyOX0gfSwKK3sgMHgwYjg4LAkxNiwJezB4ZTUsIDB4MjksIDB4NjIsIDB4MmEsIDB4ZTUsIDB4MmEsIDB4NjIsIDB4MjksIDB4MjksIDB4ZmQsIDB4ZTUsIDB4MjksIDB4M2EsIDB4YTksIDB4MDUsIDB4NzV9IH0sCit7IDB4MGI5OCwJMTQsCXsweDJiLCAweGZmLCAweGY1LCAweDJjLCAweDg5LCAweDJkLCAweDgwLCAweGMzLCAweDdiLCAweDAwLCAweDdhLCAweDAwLCAweDc5LCAweDAwfSB9LAoreyAweDBiYTYsCTEsCXsweDIyfSB9LAoreyAweDBiYTcsCTYsCXsweGFiLCAweDA3LCAweGFhLCAweDA2LCAweGFjLCAweDA1fSB9LAoreyAweDBiYWQsCTE2LAl7MHhlNCwgMHhmZCwgMHhlNSwgMHgxMSwgMHg2MCwgMHgxMSwgMHhlYSwgMHhmZiwgMHhhZSwgMHgwNSwgMHgwZCwgMHhlZSwgMHgyNCwgMHgxMCwgMHhmNSwgMHg4Mn0gfSwKK3sgMHgwYmJkLAkxNiwJezB4ZTQsIDB4MzQsIDB4MGYsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4ZWIsIDB4YWUsIDB4MDUsIDB4MGQsIDB4NzQsIDB4MTAsIDB4MmUsIDB4ZjUsIDB4ODJ9IH0sCit7IDB4MGJjZCwJMTYsCXsweGU0LCAweDM0LCAweDBmLCAweGY1LCAweDgzLCAweGViLCAweGYwLCAweGFmLCAweDA1LCAweDBkLCAweDc0LCAweDEwLCAweDJmLCAweGY1LCAweDgyLCAweGU0fSB9LAoreyAweDBiZGQsCTE2LAl7MHgzNCwgMHgwZiwgMHhmNSwgMHg4MywgMHhlYywgMHhmMCwgMHhhZiwgMHgwZiwgMHg3YSwgMHgwZiwgMHg3YiwgMHgxMCwgMHgxMiwgMHgwZCwgMHg1MSwgMHg3Zn0gfSwKK3sgMHgwYmVkLAk2LAl7MHgwYSwgMHg3ZSwgMHgwMCwgMHgxMiwgMHgwZCwgMHhkNX0gfSwKK3sgMHgwYmYzLAkxLAl7MHgyMn0gfSwKK3sgMHgwYmY0LAkxMCwJezB4OGUsIDB4MzMsIDB4OGYsIDB4MzQsIDB4OGQsIDB4MzUsIDB4OGEsIDB4MzYsIDB4OGIsIDB4Mzd9IH0sCit7IDB4MGJmZSwJMTYsCXsweGU0LCAweGZkLCAweGY1LCAweDM4LCAweGU1LCAweDExLCAweDYwLCAweDEyLCAweGU1LCAweDMzLCAweGZmLCAweGFlLCAweDA1LCAweDBkLCAweGVlLCAweDI0fSB9LAoreyAweDBjMGUsCTE2LAl7MHgxMywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwZiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHhlNSwgMHgzNCwgMHhhZSwgMHgwNSwgMHgwZCwgMHg3NH0gfSwKK3sgMHgwYzFlLAkxNiwJezB4MTMsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MGYsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4MzQsIDB4ZjAsIDB4YWYsIDB4MGYsIDB4N2EsIDB4MGZ9IH0sCit7IDB4MGMyZSwJMTYsCXsweDdiLCAweDEzLCAweDEyLCAweDBkLCAweDUxLCAweGFmLCAweDBmLCAweGFkLCAweDM1LCAweGFiLCAweDM3LCAweGFhLCAweDM2LCAweDEyLCAweDBkLCAweDMyfSB9LAoreyAweDBjM2UsCTEsCXsweDIyfSB9LAoreyAweDBjM2YsCTIsCXsweDhmLCAweDI5fSB9LAoreyAweDBjNDEsCTE2LAl7MHhlNCwgMHhmNSwgMHgyYSwgMHg3NSwgMHgyYiwgMHhmZiwgMHg3NSwgMHgyYywgMHgxMSwgMHg3NSwgMHgyZCwgMHgzMiwgMHhhYiwgMHgyYiwgMHhhYSwgMHgyY30gfSwKK3sgMHgwYzUxLAkxNiwJezB4YTksIDB4MmQsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4MDcsIDB4ODUsIDB4YjQsIDB4MDMsIDB4MWQsIDB4YWYsIDB4MmEsIDB4MDUsIDB4MmEsIDB4ZWZ9IH0sCit7IDB4MGM2MSwJMTYsCXsweGI1LCAweDI5LCAweDAxLCAweDIyLCAweDEyLCAweDA3LCAweDZjLCAweDdlLCAweDAwLCAweDI5LCAweGZmLCAweGVlLCAweDNhLCAweGE5LCAweDA3LCAweDc1fSB9LAoreyAweDBjNzEsCTE0LAl7MHgyYiwgMHhmZiwgMHhmNSwgMHgyYywgMHg4OSwgMHgyZCwgMHg4MCwgMHhkNCwgMHg3YiwgMHgwMCwgMHg3YSwgMHgwMCwgMHg3OSwgMHgwMH0gfSwKK3sgMHgwYzdmLAkxLAl7MHgyMn0gfSwKK3sgMHgwYzgwLAkxMCwJezB4OGUsIDB4MzMsIDB4OGYsIDB4MzQsIDB4OGQsIDB4MzUsIDB4OGEsIDB4MzYsIDB4OGIsIDB4Mzd9IH0sCit7IDB4MGM4YSwJMTYsCXsweGU0LCAweGY1LCAweDM4LCAweGU1LCAweDM4LCAweGMzLCAweDk1LCAweDM1LCAweDUwLCAweDIwLCAweDA1LCAweDM0LCAweGU1LCAweDM0LCAweGFlLCAweDMzfSB9LAoreyAweDBjOWEsCTE2LAl7MHg3MCwgMHgwMiwgMHgwNSwgMHgzMywgMHgxNCwgMHhmZiwgMHhlNSwgMHgzNywgMHgyNSwgMHgzOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgzNiwgMHhmNX0gfSwKK3sgMHgwY2FhLAkxMCwJezB4ODMsIDB4ZTAsIDB4ZmQsIDB4MTIsIDB4MGIsIDB4YTcsIDB4MDUsIDB4MzgsIDB4ODAsIDB4ZDl9IH0sCit7IDB4MGNiNCwJMSwJezB4MjJ9IH0sCit7IDB4MGNiNSwJMTYsCXsweGE5LCAweDA3LCAweGU1LCAweDBkLCAweDcwLCAweDI1LCAweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweGU5LCAweDI1LCAweGUwfSB9LAoreyAweDBjYzUsCTE2LAl7MHg0NCwgMHgwMSwgMHg5MCwgMHg3ZiwgMHhhNiwgMHhmMCwgMHg4ZCwgMHgwOCwgMHhhZiwgMHgwMywgMHhhOSwgMHgwNywgMHg3NSwgMHgwOSwgMHgwMSwgMHg4YX0gfSwKK3sgMHgwY2Q1LAkxMywJezB4MGEsIDB4ODksIDB4MGIsIDB4ZTQsIDB4ZjUsIDB4MGMsIDB4NzUsIDB4MGQsIDB4MDMsIDB4ZDMsIDB4MjIsIDB4YzMsIDB4MjJ9IH0sCit7IDB4MGNlMiwJMTYsCXsweGE5LCAweDA3LCAweGU1LCAweDBkLCAweDcwLCAweDIzLCAweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweGU5LCAweDI1LCAweGUwfSB9LAoreyAweDBjZjIsCTE2LAl7MHg5MCwgMHg3ZiwgMHhhNiwgMHhmMCwgMHg4ZCwgMHgwOCwgMHhhZiwgMHgwMywgMHhhOSwgMHgwNywgMHg3NSwgMHgwOSwgMHgwMSwgMHg4YSwgMHgwYSwgMHg4OX0gfSwKK3sgMHgwZDAyLAkxMSwJezB4MGIsIDB4ZTQsIDB4ZjUsIDB4MGMsIDB4NzUsIDB4MGQsIDB4MDEsIDB4ZDMsIDB4MjIsIDB4YzMsIDB4MjJ9IH0sCit7IDB4MGQwZCwJMTYsCXsweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweGUwLCAweDQ0LCAweDA4LCAweGYwLCAweDMwLCAweDA2LCAweDA0LCAweGUwLCAweDQ0fSB9LAoreyAweDBkMWQsCTE2LAl7MHgwMiwgMHhmMCwgMHg3ZiwgMHhkMCwgMHg3ZSwgMHgwNywgMHgxMiwgMHgwZCwgMHhkNSwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmNywgMHhmMH0gfSwKK3sgMHgwZDJkLAk1LAl7MHhlMCwgMHg0NCwgMHgwNCwgMHhmMCwgMHgyMn0gfSwKK3sgMHgwZDMyLAkxNiwJezB4MTIsIDB4MGMsIDB4YjUsIDB4ZTUsIDB4MGQsIDB4MjQsIDB4ZmEsIDB4NjAsIDB4MTAsIDB4MTQsIDB4NjAsIDB4MDcsIDB4MjQsIDB4MDcsIDB4NzAsIDB4ZjN9IH0sCit7IDB4MGQ0MiwJMTUsCXsweDdmLCAweDA4LCAweDIyLCAweGU0LCAweGY1LCAweDBkLCAweDdmLCAweDA3LCAweDIyLCAweGU0LCAweGY1LCAweDBkLCAweDdmLCAweDA2LCAweDIyfSB9LAoreyAweDBkNTEsCTE2LAl7MHgxMiwgMHgwYywgMHhlMiwgMHhlNSwgMHgwZCwgMHgyNCwgMHhmYSwgMHg2MCwgMHgxMCwgMHgxNCwgMHg2MCwgMHgwNywgMHgyNCwgMHgwNywgMHg3MCwgMHhmM30gfSwKK3sgMHgwZDYxLAkxNSwJezB4N2YsIDB4MDgsIDB4MjIsIDB4ZTQsIDB4ZjUsIDB4MGQsIDB4N2YsIDB4MDcsIDB4MjIsIDB4ZTQsIDB4ZjUsIDB4MGQsIDB4N2YsIDB4MDYsIDB4MjJ9IH0sCit7IDB4MGQ3MCwJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweDkwLCAweDdmLCAweGM0LCAweGU0LCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmfSB9LAoreyAweDBkODAsCTExLAl7MHhhYiwgMHg3NCwgMHgwNCwgMHhmMCwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwZDhiLAkxNiwJezB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4MzAsIDB4ZTcsIDB4MTIsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4N2YsIDB4MTQsIDB4N2UsIDB4MDAsIDB4MTJ9IH0sCit7IDB4MGQ5YiwJMTAsCXsweDBkLCAweGQ1LCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweDIyfSB9LAoreyAweDBkYTUsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhkMiwgMHgwMSwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMX0gfSwKK3sgMHgwZGI1LAk4LAl7MHhmMCwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwZGJkLAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4ZDIsIDB4MDMsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDh9IH0sCit7IDB4MGRjZCwJOCwJezB4ZjAsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9IH0sCit7IDB4MGRkNSwJMTYsCXsweDhlLCAweDM5LCAweDhmLCAweDNhLCAweGU1LCAweDNhLCAweDE1LCAweDNhLCAweGFlLCAweDM5LCAweDcwLCAweDAyLCAweDE1LCAweDM5LCAweDRlLCAweDYwfSB9LAoreyAweDBkZTUsCTcsCXsweDA1LCAweDEyLCAweDBlLCAweDQxLCAweDgwLCAweGVlLCAweDIyfSB9LAoreyAweDBkZWMsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMiwgMHhmMCwgMHhkMH0gfSwKK3sgMHgwZGZjLAk2LAl7MHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwZTAyLAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4ZDB9IH0sCit7IDB4MGUxMiwJNiwJezB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9IH0sCit7IDB4MGUxOCwJMTYsCXsweGFlLCAweDA3LCAweDdmLCAweDIxLCAweDdkLCAweDAxLCAweDc0LCAweDAwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDBmLCAweGFiLCAweDgyfSB9LAoreyAweDBlMjgsCTUsCXsweGZhLCAweDEyLCAweDBkLCAweDUxLCAweDIyfSB9LAoreyAweDBlMmQsCTE2LAl7MHg1MCwgMHgwZiwgMHgwMCwgMHhjMCwgMHhmOSwgMHhhNCwgMHhiMCwgMHg5OSwgMHg5MiwgMHg4MiwgMHhmOCwgMHg4MCwgMHg5OCwgMHg4OCwgMHg4MywgMHhjNn0gfSwKK3sgMHgwZTNkLAkzLAl7MHhhMSwgMHg4NiwgMHg4ZX0gfSwKK3sgMHgwZTQwLAkxLAl7MHgwMH0gfSwKK3sgMHgwZTQxLAkxNiwJezB4NzQsIDB4MDAsIDB4ZjUsIDB4ODYsIDB4OTAsIDB4ZmQsIDB4YTUsIDB4N2MsIDB4MDUsIDB4YTMsIDB4ZTUsIDB4ODIsIDB4NDUsIDB4ODMsIDB4NzAsIDB4Zjl9IH0sCit7IDB4MGU1MSwJMSwJezB4MjJ9IH0sCit7IDB4MGU1MiwJMTQsCXsweDkwLCAweDdmLCAweDAwLCAweGU1LCAweDBlLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAxLCAweGYwLCAweGQzLCAweDIyfSB9LAoreyAweDBlNjAsCTgsCXsweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGY1LCAweDBlLCAweGQzLCAweDIyfSB9LAoreyAweDBlNjgsCTgsCXsweGU0LCAweGY1LCAweDBkLCAweGQyLCAweGU5LCAweGQyLCAweGFmLCAweDIyfSB9LAoreyAweDBlNzAsCTQsCXsweDUzLCAweGQ4LCAweGVmLCAweDMyfSB9LAoreyAweDBlNzQsCTMsCXsweGQyLCAweDAwLCAweDIyfSB9LAoreyAweDBlNzcsCTIsCXsweGQzLCAweDIyfSB9LAoreyAweDBlNzksCTIsCXsweGQzLCAweDIyfSB9LAoreyAweDBlN2IsCTIsCXsweGQzLCAweDIyfSB9LAoreyAweDBlN2QsCTIsCXsweGQzLCAweDIyfSB9LAoreyAweDBlN2YsCTIsCXsweGQzLCAweDIyfSB9LAoreyAweDBlODEsCTIsCXsweGQzLCAweDIyfSB9LAoreyAweDBlODMsCTEsCXsweDMyfSB9LAoreyAweDBlODQsCTEsCXsweDMyfSB9LAoreyAweDBlODUsCTEsCXsweDMyfSB9LAoreyAweDBlODYsCTEsCXsweDMyfSB9LAoreyAweDBlODcsCTEsCXsweDMyfSB9LAoreyAweDBlODgsCTEsCXsweDMyfSB9LAoreyAweDBlODksCTEsCXsweDMyfSB9LAoreyAweDBlOGEsCTEsCXsweDMyfSB9LAoreyAweDBlOGIsCTEsCXsweDMyfSB9LAoreyAweDBlOGMsCTEsCXsweDMyfSB9LAoreyAweDBlOGQsCTEsCXsweDMyfSB9LAoreyAweDBlOGUsCTEsCXsweDMyfSB9LAoreyAweDBlOGYsCTEsCXsweDMyfSB9LAoreyAweDBlOTAsCTEsCXsweDMyfSB9LAoreyAweDBlOTEsCTEsCXsweDMyfSB9LAoreyAweDBlOTIsCTEsCXsweDMyfSB9LAoreyAweDExMDAsCTE2LAl7MHgxMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHgwNSwgMHgxMCwgMHgyNywgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMn0gfSwKK3sgMHgxMTEwLAkxNiwJezB4MDAsIDB4MDEsIDB4MDksIDB4MDIsIDB4MjAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDMsIDB4YTAsIDB4MDAsIDB4MDksIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDJ9IH0sCit7IDB4MTEyMCwJMTYsCXsweGZmLCAweDAwLCAweDAwLCAweDA0LCAweDA3LCAweDA1LCAweDgyLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAyLCAweDAyLCAweDQwfSB9LAoreyAweDExMzAsCTE2LAl7MHgwMCwgMHgwMCwgMHgwNCwgMHgwMywgMHgwOSwgMHgwNCwgMHgyNiwgMHgwMywgMHg0MSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2MywgMHgwMCwgMHg2OCwgMHgwMH0gfSwKK3sgMHgxMTQwLAkxNiwJezB4NmYsIDB4MDAsIDB4NzIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MDAsIDB4NjksIDB4MDAsIDB4NzAsIDB4MDAsIDB4NzMsIDB4MDB9IH0sCit7IDB4MTE1MCwJMTYsCXsweDJjLCAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDYzLCAweDAwLCAweDJlLCAweDAwLCAweDI4LCAweDAzLCAweDQ2LCAweDAwfSB9LAoreyAweDExNjAsCTE2LAl7MHg2OSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2ZCwgMHgwMCwgMHg3NywgMHgwMCwgMHg2MSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2NSwgMHgwMCwgMHgyMCwgMHgwMH0gfSwKK3sgMHgxMTcwLAkxNiwJezB4NDYsIDB4MDAsIDB4NzIsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmQsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NTcsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NzIsIDB4MDB9IH0sCit7IDB4MTE4MCwJMTYsCXsweDZiLCAweDAwLCAweDczLCAweDAwLCAweDJhLCAweDAzLCAweDQzLCAweDAwLCAweDZmLCAweDAwLCAweDZlLCAweDAwLCAweDY2LCAweDAwLCAweDY5LCAweDAwfSB9LAoreyAweDExOTAsCTE2LAl7MHg2NywgMHgwMCwgMHg3NSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2MSwgMHgwMCwgMHg3NCwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHg2ZSwgMHgwMH0gfSwKK3sgMHgxMWEwLAkxNiwJezB4MjAsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NzIsIDB4MDAsIDB4NjksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjcsIDB4MDAsIDB4MjIsIDB4MDN9IH0sCit7IDB4MTFiMCwJMTYsCXsweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDc0LCAweDAwLCAweDY1LCAweDAwLCAweDcyLCAweDAwLCAweDY2LCAweDAwLCAweDYxLCAweDAwLCAweDYzLCAweDAwfSB9LAoreyAweDExYzAsCTE2LAl7MHg2NSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1MywgMHgwMCwgMHg3NCwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2NywgMHgwMH0gfSwKK3sgMHgxMWQwLAkyLAl7MHgwMCwgMHgwMH0gfSwKK3sgMHhmZmZmLAkwLAl7MHgwMH0gfQorfTsKKworI2Vsc2UKKworc3RhdGljIGNvbnN0IHN0cnVjdCB3aGl0ZWhlYXRfaGV4X3JlY29yZCB3aGl0ZWhlYXRfbG9hZGVyW10gPSB7Cit7IDB4MDAwMCwJMywJezB4MDIsIDB4MDksIDB4OGR9IH0sCit7IDB4MDAzMywJMywJezB4MDIsIDB4MDgsIDB4ZmJ9IH0sCit7IDB4MDA0MywJMywJezB4MDIsIDB4MGIsIDB4MDB9IH0sCit7IDB4MDA0YiwJMywJezB4MDIsIDB4MDUsIDB4YWF9IH0sCit7IDB4MDEwMCwJMTYsCXsweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDU0LCAweDEwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweDQ0LCAweDUwLCAweGY1LCAweDBmLCAweDEzLCAweGU0fSB9LAoreyAweDAxMTAsCTE2LAl7MHgzMywgMHhmNSwgMHgxMSwgMHg5MCwgMHg3ZiwgMHhlOSwgMHhlMCwgMHgyNCwgMHg1ZSwgMHhiNCwgMHgwNywgMHgwMCwgMHg0MCwgMHgwMywgMHgwMiwgMHgwM30gfSwKK3sgMHgwMTIwLAkxNiwJezB4NzgsIDB4OTAsIDB4MDEsIDB4MjgsIDB4ZjgsIDB4MjgsIDB4MjgsIDB4NzMsIDB4MDIsIDB4MDEsIDB4YmMsIDB4MDIsIDB4MDEsIDB4YmMsIDB4MDIsIDB4MDF9IH0sCit7IDB4MDEzMCwJMTYsCXsweDkxLCAweDAyLCAweDAxLCAweDNkLCAweDAyLCAweDAxLCAweDUzLCAweDAyLCAweDAxLCAweDZmLCAweDAyLCAweDAxLCAweDlhLCAweDkwLCAweDdmLCAweDAwfSB9LAoreyAweDAxNDAsCTE2LAl7MHhlNSwgMHgxMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMH0gfSwKK3sgMHgwMTUwLAkxNiwJezB4MDIsIDB4MDMsIDB4NzgsIDB4OTAsIDB4N2YsIDB4OTIsIDB4ZTAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4OTB9IH0sCit7IDB4MDE2MCwJMTYsCXsweDdmLCAweGI1LCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDAyLCAweDAzLCAweDc4LCAweDEyfSB9LAoreyAweDAxNzAsCTE2LAl7MHgwYSwgMHg4OSwgMHg1MCwgMHgwNywgMHhlNCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHg4MCwgMHgwNiwgMHg5MCwgMHg3ZiwgMHgwMCwgMHg3NCwgMHgwZn0gfSwKK3sgMHgwMTgwLAkxNiwJezB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDN9IH0sCit7IDB4MDE5MCwJMTYsCXsweDc4LCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGY1LCAweDBmLCAweDAyLCAweDAzLCAweDc4LCAweDkwLCAweDdmLCAweDAwLCAweDc0LCAweDA3LCAweGYwfSB9LAoreyAweDAxYTAsCTE2LAl7MHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg3ZiwgMHhlOCwgMHg3ZX0gfSwKK3sgMHgwMWIwLAkxNiwJezB4MDMsIDB4MTIsIDB4MGQsIDB4OTQsIDB4ZDIsIDB4MDYsIDB4MTIsIDB4MGMsIDB4Y2MsIDB4MDIsIDB4MDMsIDB4NzgsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTB9IH0sCit7IDB4MDFjMCwJMTYsCXsweDc1LCAweDI4LCAweDAwLCAweGY1LCAweDI5LCAweGEzLCAweGUwLCAweGZlLCAweGU0LCAweGVlLCAweDQyLCAweDI4LCAweDkwLCAweDdmLCAweGVlLCAweGUwfSB9LAoreyAweDAxZDAsCTE2LAl7MHg3NSwgMHgyYSwgMHgwMCwgMHhmNSwgMHgyYiwgMHhhMywgMHhlMCwgMHhmZSwgMHhlNCwgMHhlZSwgMHg0MiwgMHgyYSwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMH0gfSwKK3sgMHgwMWUwLAkxNiwJezB4NjQsIDB4YzAsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MDIsIDB4YzksIDB4ZTUsIDB4MmIsIDB4NDUsIDB4MmEsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDMsIDB4Nzh9IH0sCit7IDB4MDFmMCwJMTYsCXsweGMzLCAweGU1LCAweDJiLCAweDk0LCAweDQwLCAweGU1LCAweDJhLCAweDk0LCAweDAwLCAweDUwLCAweDA4LCAweDg1LCAweDJhLCAweDJjLCAweDg1LCAweDJifSB9LAoreyAweDAyMDAsCTE2LAl7MHgyZCwgMHg4MCwgMHgwNiwgMHg3NSwgMHgyYywgMHgwMCwgMHg3NSwgMHgyZCwgMHg0MCwgMHg5MCwgMHg3ZiwgMHhlOSwgMHhlMCwgMHg2NCwgMHhhMywgMHg3MH0gfSwKK3sgMHgwMjEwLAkxNiwJezB4MzQsIDB4ZjUsIDB4MzAsIDB4ZjUsIDB4MzEsIDB4YzMsIDB4ZTUsIDB4MzEsIDB4OTUsIDB4MmQsIDB4ZTUsIDB4MzAsIDB4OTUsIDB4MmMsIDB4NTAsIDB4NWN9IH0sCit7IDB4MDIyMCwJMTYsCXsweGU1LCAweDI5LCAweDI1LCAweDMxLCAweGY1LCAweDgyLCAweGU1LCAweDMwLCAweDM1LCAweDI4LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweDc0LCAweDAwfSB9LAoreyAweDAyMzAsCTE2LAl7MHgyNSwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgzMSwgMHhlNSwgMHgzMSwgMHg3MH0gfSwKK3sgMHgwMjQwLAkxNiwJezB4MDIsIDB4MDUsIDB4MzAsIDB4ODAsIDB4ZDAsIDB4ZTQsIDB4ZjUsIDB4MzAsIDB4ZjUsIDB4MzEsIDB4YzMsIDB4ZTUsIDB4MzEsIDB4OTUsIDB4MmQsIDB4ZTV9IH0sCit7IDB4MDI1MCwJMTYsCXsweDMwLCAweDk1LCAweDJjLCAweDUwLCAweDE4LCAweDc0LCAweDAwLCAweDI1LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzfSB9LAoreyAweDAyNjAsCTE2LAl7MHg3NCwgMHhjZCwgMHhmMCwgMHgwNSwgMHgzMSwgMHhlNSwgMHgzMSwgMHg3MCwgMHgwMiwgMHgwNSwgMHgzMCwgMHg4MCwgMHhkZCwgMHhhZiwgMHgyOSwgMHhhZX0gfSwKK3sgMHgwMjcwLAkxNiwJezB4MjgsIDB4YWQsIDB4MmQsIDB4N2EsIDB4N2YsIDB4NzksIDB4MDAsIDB4N2IsIDB4MDAsIDB4MTIsIDB4MGIsIDB4ZjQsIDB4OTAsIDB4N2YsIDB4YjUsIDB4ZTV9IH0sCit7IDB4MDI4MCwJMTYsCXsweDJkLCAweGYwLCAweGU1LCAweDJkLCAweDI1LCAweDI5LCAweGY1LCAweDI5LCAweGU1LCAweDJjLCAweDM1LCAweDI4LCAweGY1LCAweDI4LCAweGMzLCAweGU1fSB9LAoreyAweDAyOTAsCTE2LAl7MHgyYiwgMHg5NSwgMHgyZCwgMHhmNSwgMHgyYiwgMHhlNSwgMHgyYSwgMHg5NSwgMHgyYywgMHhmNSwgMHgyYSwgMHg5MCwgMHg3ZiwgMHg5MiwgMHhlMCwgMHhmZn0gfSwKK3sgMHgwMmEwLAkxNiwJezB4YzQsIDB4NTQsIDB4MGYsIDB4NzUsIDB4MmUsIDB4MDAsIDB4ZjUsIDB4MmYsIDB4ZDMsIDB4OTQsIDB4MDAsIDB4ZTUsIDB4MmUsIDB4OTQsIDB4MDAsIDB4NTB9IH0sCit7IDB4MDJiMCwJMTYsCXsweDBjLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDIwLCAweGUxLCAweDAzLCAweDAyLCAweDAxLCAweGU3LCAweDgwLCAweGY0LCAweDkwLCAweDdmLCAweGI0fSB9LAoreyAweDAyYzAsCTE2LAl7MHhlMCwgMHgyMCwgMHhlMiwgMHgwMywgMHgwMiwgMHgwMSwgMHhlNywgMHg4MCwgMHhmNCwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHg2NCwgMHg0MCwgMHg2MH0gfSwKK3sgMHgwMmQwLAkxNiwJezB4MDMsIDB4MDIsIDB4MDMsIDB4NzgsIDB4ZTUsIDB4MmIsIDB4NDUsIDB4MmEsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDMsIDB4NzgsIDB4ZTQsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MDJlMCwJMTYsCXsweGM1LCAweGYwLCAweDkwLCAweDdmLCAweDkyLCAweGUwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweDc1LCAweDJlLCAweDAwLCAweGY1LCAweDJmLCAweGQzfSB9LAoreyAweDAyZjAsCTE2LAl7MHg5NCwgMHgwMCwgMHhlNSwgMHgyZSwgMHg5NCwgMHgwMCwgMHg1MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHhjNCwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwOSwgMHg4MH0gfSwKK3sgMHgwMzAwLAkxNiwJezB4ZjcsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4MjAsIDB4ZTMsIDB4ZjksIDB4OTAsIDB4N2YsIDB4YzUsIDB4ZTAsIDB4NzUsIDB4MmMsIDB4MDAsIDB4ZjV9IH0sCit7IDB4MDMxMCwJMTYsCXsweDJkLCAweDkwLCAweDdmLCAweGU5LCAweGUwLCAweDY0LCAweGEzLCAweDcwLCAweDM0LCAweGY1LCAweDMwLCAweGY1LCAweDMxLCAweGMzLCAweGU1LCAweDMxfSB9LAoreyAweDAzMjAsCTE2LAl7MHg5NSwgMHgyZCwgMHhlNSwgMHgzMCwgMHg5NSwgMHgyYywgMHg1MCwgMHgzNCwgMHg3NCwgMHhjMCwgMHgyNSwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNH0gfSwKK3sgMHgwMzMwLAkxLAl7MHg3ZX0gfSwKK3sgMHgwMzMxLAkxNiwJezB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MjksIDB4MjUsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MzAsIDB4MzUsIDB4MjgsIDB4ZjUsIDB4ODN9IH0sCit7IDB4MDM0MSwJMTYsCXsweGVmLCAweGYwLCAweDA1LCAweDMxLCAweGU1LCAweDMxLCAweDcwLCAweDAyLCAweDA1LCAweDMwLCAweDgwLCAweGQwLCAweGFmLCAweDI5LCAweGFlLCAweDI4fSB9LAoreyAweDAzNTEsCTE2LAl7MHhhZCwgMHgyZCwgMHg3YSwgMHg3ZSwgMHg3OSwgMHhjMCwgMHg3YiwgMHhjMCwgMHgxMiwgMHgwYywgMHgzZiwgMHhlNSwgMHgyZCwgMHgyNSwgMHgyOSwgMHhmNX0gfSwKK3sgMHgwMzYxLAkxNiwJezB4MjksIDB4ZTUsIDB4MmMsIDB4MzUsIDB4MjgsIDB4ZjUsIDB4MjgsIDB4YzMsIDB4ZTUsIDB4MmIsIDB4OTUsIDB4MmQsIDB4ZjUsIDB4MmIsIDB4ZTUsIDB4MmF9IH0sCit7IDB4MDM3MSwJOSwJezB4OTUsIDB4MmMsIDB4ZjUsIDB4MmEsIDB4MDIsIDB4MDIsIDB4ZDQsIDB4YzMsIDB4MjJ9IH0sCit7IDB4MDM3YSwJMTYsCXsweDkwLCAweDdmLCAweGU5LCAweGUwLCAweDcwLCAweDAzLCAweDAyLCAweDA0LCAweDUyLCAweDE0LCAweDcwLCAweDAzLCAweDAyLCAweDA0LCAweGNlLCAweDI0fSB9LAoreyAweDAzOGEsCTE2LAl7MHhmZSwgMHg3MCwgMHgwMywgMHgwMiwgMHgwNSwgMHg0MiwgMHgyNCwgMHhmYiwgMHg3MCwgMHgwMywgMHgwMiwgMHgwNCwgMHg0YywgMHgxNCwgMHg3MCwgMHgwM30gfSwKK3sgMHgwMzlhLAkxNiwJezB4MDIsIDB4MDQsIDB4NDYsIDB4MTQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4M2EsIDB4MTQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4NDAsIDB4MjR9IH0sCit7IDB4MDNhYSwJMTYsCXsweDA1LCAweDYwLCAweDAzLCAweDAyLCAweDA1LCAweDk2LCAweDEyLCAweDBlLCAweDQ0LCAweDQwLCAweDAzLCAweDAyLCAweDA1LCAweGEyLCAweDkwLCAweDdmfSB9LAoreyAweDAzYmEsCTE2LAl7MHhlYiwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxNiwgMHgxNCwgMHg2MCwgMHg0MCwgMHgyNCwgMHgwMiwgMHg3MCwgMHg2OSwgMHg3NCwgMHgxMSwgMHg5MH0gfSwKK3sgMHgwM2NhLAkxNiwJezB4N2YsIDB4ZDQsIDB4ZjAsIDB4NzQsIDB4MDAsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YTIsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTB9IH0sCit7IDB4MDNkYSwJMTYsCXsweGZmLCAweDEyLCAweDBiLCAweDU4LCAweDhiLCAweDI1LCAweDhhLCAweDI2LCAweDg5LCAweDI3LCAweGVhLCAweDQ5LCAweDYwLCAweDExLCAweGFlLCAweDAyfSB9LAoreyAweDAzZWEsCTE2LAl7MHhlZSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHhhZiwgMHgwMSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhMiwgMHg5MH0gfSwKK3sgMHgwM2ZhLAkxNiwJezB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YTIsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MDh9IH0sCit7IDB4MDQwYSwJMTYsCXsweGJhLCAweDhiLCAweDI1LCAweDhhLCAweDI2LCAweDg5LCAweDI3LCAweGVhLCAweDQ5LCAweDYwLCAweDExLCAweGFlLCAweDAyLCAweGVlLCAweDkwLCAweDdmfSB9LAoreyAweDA0MWEsCTE2LAl7MHhkNCwgMHhmMCwgMHhhZiwgMHgwMSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhMiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMH0gfSwKK3sgMHgwNDJhLAkxNiwJezB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YTIsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YTJ9IH0sCit7IDB4MDQzYSwJMTYsCXsweDEyLCAweDBlLCAweDFmLCAweDAyLCAweDA1LCAweGEyLCAweDEyLCAweDBlLCAweDJkLCAweDAyLCAweDA1LCAweGEyLCAweDEyLCAweDBhLCAweGY3LCAweDAyfSB9LAoreyAweDA0NGEsCTE2LAl7MHgwNSwgMHhhMiwgMHgxMiwgMHgwZSwgMHgxMSwgMHgwMiwgMHgwNSwgMHhhMiwgMHgxMiwgMHgwZSwgMHg0NiwgMHg0MCwgMHgwMywgMHgwMiwgMHgwNSwgMHhhMn0gfSwKK3sgMHgwNDVhLAkxNiwJezB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4N2YsIDB4NjAsIDB4MjQsIDB4MTQsIDB4NjAsIDB4MzEsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NWIsIDB4YTJ9IH0sCit7IDB4MDQ2YSwJMTYsCXsweDAwLCAweGU0LCAweDMzLCAweGZmLCAweDI1LCAweGUwLCAweGZmLCAweGEyLCAweDAyLCAweGU0LCAweDMzLCAweDRmLCAweDkwLCAweDdmLCAweDAwLCAweGYwfSB9LAoreyAweDA0N2EsCTE2LAl7MHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhMiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHgwMH0gfSwKK3sgMHgwNDhhLAkxNiwJezB4ZjAsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YTIsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTB9IH0sCit7IDB4MDQ5YSwJMTYsCXsweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0fSB9LAoreyAweDA0YWEsCTE2LAl7MHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmZCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwgMHhhM30gfSwKK3sgMHgwNGJhLAkxNiwJezB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YTIsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDF9IH0sCit7IDB4MDRjYSwJMTYsCXsweGYwLCAweDAyLCAweDA1LCAweGEyLCAweDEyLCAweDBlLCAweDQ4LCAweDQwLCAweDAzLCAweDAyLCAweDA1LCAweGEyLCAweDkwLCAweDdmLCAweGU4LCAweGUwfSB9LAoreyAweDA0ZGEsCTE2LAl7MHgyNCwgMHhmZSwgMHg2MCwgMHgxZCwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwNSwgMHhhMiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhiNH0gfSwKK3sgMHgwNGVhLAkxNiwJezB4MDEsIDB4MDUsIDB4YzIsIDB4MDAsIDB4MDIsIDB4MDUsIDB4YTIsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDV9IH0sCit7IDB4MDRmYSwJMTYsCXsweGEyLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDM4LCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0fSB9LAoreyAweDA1MGEsCTE2LAl7MHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3Zn0gfSwKK3sgMHgwNTFhLAkxNiwJezB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4MTMsIDB4MTMsIDB4MTMsIDB4NTQsIDB4MWZ9IH0sCit7IDB4MDUyYSwJMTYsCXsweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDkwLCAweDdmLCAweGQ3LCAweGYwLCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAweDgwLCAweDY5LCAweDkwfSB9LAoreyAweDA1M2EsCTE2LAl7MHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHg2MCwgMHgxMiwgMHgwZSwgMHg0YSwgMHg1MCwgMHg1YiwgMHg5MCwgMHg3ZiwgMHhlOH0gfSwKK3sgMHgwNTRhLAkxNiwJezB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTgsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NGYsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDR9IH0sCit7IDB4MDU1YSwJMTYsCXsweGQyLCAweDAwLCAweDgwLCAweDQ0LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDNiLCAweDkwLCAweDdmLCAweGVhfSB9LAoreyAweDA1NmEsCTE2LAl7MHhlMCwgMHg3MCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMH0gfSwKK3sgMHgwNTdhLAkxNiwJezB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDF9IH0sCit7IDB4MDU4YSwJMTYsCXsweGYwLCAweDgwLCAweDE1LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDBjLCAweDEyLCAweDAxLCAweDAwLCAweDUwfSB9LAoreyAweDA1OWEsCTE2LAl7MHgwNywgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHgyMn0gfSwKK3sgMHgwNWFhLAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4YzB9IH0sCit7IDB4MDViYSwJMTYsCXsweGQwLCAweGMwLCAweDAwLCAweGMwLCAweDAxLCAweGMwLCAweDAyLCAweGMwLCAweDAzLCAweGMwLCAweDA2LCAweGMwLCAweDA3LCAweDkwLCAweDdmLCAweGE1fSB9LAoreyAweDA1Y2EsCTE2LAl7MHhlMCwgMHgzMCwgMHhlMiwgMHgwNiwgMHg3NSwgMHgwZCwgMHgwNiwgMHgwMiwgMHgwNiwgMHg3NiwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHgyMCwgMHhlMX0gfSwKK3sgMHgwNWRhLAkxNiwJezB4MGMsIDB4ZTUsIDB4MGQsIDB4NjQsIDB4MDIsIDB4NjAsIDB4MDYsIDB4NzUsIDB4MGQsIDB4MDcsIDB4MDIsIDB4MDYsIDB4NzYsIDB4YWYsIDB4MGQsIDB4ZWZ9IH0sCit7IDB4MDVlYSwJMTYsCXsweDI0LCAweGZlLCAweDYwLCAweDQ4LCAweDE0LCAweDYwLCAweDJjLCAweDI0LCAweGZlLCAweDYwLCAweDc3LCAweDI0LCAweDA0LCAweDYwLCAweDAzLCAweDAyfSB9LAoreyAweDA1ZmEsCTE2LAl7MHgwNiwgMHg3NiwgMHhhYiwgMHgwOSwgMHhhYSwgMHgwYSwgMHhhOSwgMHgwYiwgMHhhZiwgMHgwYywgMHgwNSwgMHgwYywgMHg4ZiwgMHg4MiwgMHg3NSwgMHg4M30gfSwKK3sgMHgwNjBhLAkxNiwJezB4MDAsIDB4MTIsIDB4MDgsIDB4MjIsIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZjAsIDB4ZTUsIDB4MGMsIDB4NjUsIDB4MDgsIDB4NzAsIDB4NWUsIDB4NzUsIDB4MGR9IH0sCit7IDB4MDYxYSwJMTYsCXsweDA1LCAweDgwLCAweDU5LCAweDkwLCAweDdmLCAweGE2LCAweGUwLCAweGFiLCAweDA5LCAweGFhLCAweDBhLCAweGE5LCAweDBiLCAweGFlLCAweDBjLCAweDhlfSB9LAoreyAweDA2MmEsCTE2LAl7MHg4MiwgMHg3NSwgMHg4MywgMHgwMCwgMHgxMiwgMHgwOCwgMHg0ZiwgMHg3NSwgMHgwZCwgMHgwMiwgMHg4MCwgMHg0MCwgMHhlNSwgMHgwOCwgMHgyNCwgMHhmZX0gfSwKK3sgMHgwNjNhLAkxNiwJezB4YjUsIDB4MGMsIDB4MDcsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4ZTUsIDB4MDgsIDB4MTQsIDB4YjUsIDB4MGMsIDB4MGF9IH0sCit7IDB4MDY0YSwJMTYsCXsweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweGU0LCAweGY1LCAweDBkLCAweDkwLCAweDdmLCAweGE2LCAweGUwLCAweGFiLCAweDA5fSB9LAoreyAweDA2NWEsCTE2LAl7MHhhYSwgMHgwYSwgMHhhOSwgMHgwYiwgMHhhZSwgMHgwYywgMHg4ZSwgMHg4MiwgMHg3NSwgMHg4MywgMHgwMCwgMHgxMiwgMHgwOCwgMHg0ZiwgMHgwNSwgMHgwY30gfSwKK3sgMHgwNjZhLAkxNiwJezB4ODAsIDB4MGEsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MGQsIDB4NTMsIDB4OTEsIDB4ZGYsIDB4ZDB9IH0sCit7IDB4MDY3YSwJMTYsCXsweDA3LCAweGQwLCAweDA2LCAweGQwLCAweDAzLCAweGQwLCAweDAyLCAweGQwLCAweDAxLCAweGQwLCAweDAwLCAweGQwLCAweGQwLCAweGQwLCAweDg2LCAweGQwfSB9LAoreyAweDA2OGEsCTEwLAl7MHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwNjk0LAkxNiwJezB4OGMsIDB4MzMsIDB4OGQsIDB4MzQsIDB4OTAsIDB4N2YsIDB4OTUsIDB4ZTAsIDB4NDQsIDB4YzAsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MzUsIDB4ZjUsIDB4MzZ9IH0sCit7IDB4MDZhNCwJMTYsCXsweGMzLCAweGU1LCAweDM2LCAweDk1LCAweDM0LCAweGU1LCAweDM1LCAweDk1LCAweDMzLCAweDUwLCAweDY5LCAweGVmLCAweDI1LCAweDM2LCAweGY1LCAweDgyfSB9LAoreyAweDA2YjQsCTE2LAl7MHhlNSwgMHgzNSwgMHgzZSwgMHhmNSwgMHg4MywgMHg3NCwgMHhmZiwgMHhmMCwgMHhmNCwgMHg2MCwgMHgwMiwgMHhjMywgMHgyMiwgMHhlZiwgMHgyNSwgMHgzNn0gfSwKK3sgMHgwNmM0LAkxNiwJezB4ZjUsIDB4ODIsIDB4ZTUsIDB4MzUsIDB4M2UsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4NjAsIDB4MDIsIDB4YzMsIDB4MjIsIDB4ZWYsIDB4MjUsIDB4MzZ9IH0sCit7IDB4MDZkNCwJMTYsCXsweGY1LCAweDgyLCAweGU1LCAweDM1LCAweDNlLCAweGY1LCAweDgzLCAweDc0LCAweGFhLCAweGYwLCAweDY0LCAweGFhLCAweDYwLCAweDAyLCAweGMzLCAweDIyfSB9LAoreyAweDA2ZTQsCTE2LAl7MHhlZiwgMHgyNSwgMHgzNiwgMHhmNSwgMHg4MiwgMHhlNSwgMHgzNSwgMHgzZSwgMHhmNSwgMHg4MywgMHg3NCwgMHg1NSwgMHhmMCwgMHg2NCwgMHg1NSwgMHg2MH0gfSwKK3sgMHgwNmY0LAkxNiwJezB4MDIsIDB4YzMsIDB4MjIsIDB4YWQsIDB4MzYsIDB4ZTUsIDB4MzYsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MzUsIDB4M2UsIDB4ZjUsIDB4ODMsIDB4ZWR9IH0sCit7IDB4MDcwNCwJMTYsCXsweGYwLCAweGZjLCAweGFjLCAweDA1LCAweGVkLCAweDZjLCAweDYwLCAweDAyLCAweGMzLCAweDIyLCAweDA1LCAweDM2LCAweGU1LCAweDM2LCAweDcwLCAweDAyfSB9LAoreyAweDA3MTQsCTE2LAl7MHgwNSwgMHgzNSwgMHg4MCwgMHg4YywgMHhlNCwgMHhmNSwgMHgzNSwgMHhmNSwgMHgzNiwgMHhjMywgMHhlNSwgMHgzNiwgMHg5NSwgMHgzNCwgMHhlNSwgMHgzNX0gfSwKK3sgMHgwNzI0LAkxNiwJezB4OTUsIDB4MzMsIDB4NTAsIDB4MjcsIDB4ZWYsIDB4MjUsIDB4MzYsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MzUsIDB4M2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjV9IH0sCit7IDB4MDczNCwJMTYsCXsweDM2LCAweDYwLCAweDAyLCAweGMzLCAweDIyLCAweGVmLCAweDI1LCAweDM2LCAweGY1LCAweDgyLCAweGU1LCAweDM1LCAweDNlLCAweGY1LCAweDgzLCAweGU0fSB9LAoreyAweDA3NDQsCTEzLAl7MHhmMCwgMHgwNSwgMHgzNiwgMHhlNSwgMHgzNiwgMHg3MCwgMHgwMiwgMHgwNSwgMHgzNSwgMHg4MCwgMHhjZSwgMHhkMywgMHgyMn0gfSwKK3sgMHgwNzUxLAkxNiwJezB4YzIsIDB4MDQsIDB4ZDIsIDB4MDUsIDB4YzIsIDB4MDMsIDB4YzIsIDB4MDAsIDB4YzIsIDB4MDIsIDB4YzIsIDB4MDEsIDB4MTIsIDB4MGUsIDB4M2QsIDB4ZDJ9IH0sCit7IDB4MDc2MSwJMTYsCXsweGU4LCAweDQzLCAweGQ4LCAweDIwLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweGE5LCAweGYwLCAweDkwLCAweDdmfSB9LAoreyAweDA3NzEsCTE2LAl7MHhhYSwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhlMCwgMHg0NCwgMHhjMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5MywgMHg3NH0gfSwKK3sgMHgwNzgxLAkxNiwJezB4MzAsIDB4ZjAsIDB4MTIsIDB4MGEsIDB4MTksIDB4OTAsIDB4N2YsIDB4YWYsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWUsIDB4ZTB9IH0sCit7IDB4MDc5MSwJMTYsCXsweDQ0LCAweDBkLCAweGYwLCAweGQyLCAweGFmLCAweDEyLCAweDBlLCAweDM1LCAweDIwLCAweDAxLCAweDQyLCAweDc1LCAweDI0LCAweDAwLCAweDc1LCAweDIzfSB9LAoreyAweDA3YTEsCTE2LAl7MHgwMCwgMHg3NSwgMHgyMiwgMHgwMCwgMHg3NSwgMHgyMSwgMHgwMCwgMHg3ZiwgMHg0OCwgMHg3ZSwgMHg5MiwgMHg3ZCwgMHgwMCwgMHg3YywgMHgwMCwgMHhhYn0gfSwKK3sgMHgwN2IxLAkxNiwJezB4MjQsIDB4YWEsIDB4MjMsIDB4YTksIDB4MjIsIDB4YTgsIDB4MjEsIDB4YzMsIDB4MTIsIDB4MDgsIDB4YTksIDB4NTAsIDB4ZGIsIDB4MjAsIDB4MDEsIDB4ZDh9IH0sCit7IDB4MDdjMSwJMTYsCXsweDdhLCAweDAwLCAweDc5LCAweDAwLCAweDc4LCAweDAwLCAweGU1LCAweDI0LCAweDI0LCAweDAxLCAweGY1LCAweDI0LCAweGVhLCAweDM1LCAweDIzLCAweGY1fSB9LAoreyAweDA3ZDEsCTE2LAl7MHgyMywgMHhlOSwgMHgzNSwgMHgyMiwgMHhmNSwgMHgyMiwgMHhlOCwgMHgzNSwgMHgyMSwgMHhmNSwgMHgyMSwgMHg4MCwgMHhjYSwgMHgzMCwgMHgwMSwgMHgwNX0gfSwKK3sgMHgwN2UxLAkxNiwJezB4MTIsIDB4MDMsIDB4N2EsIDB4YzIsIDB4MDEsIDB4MzAsIDB4MDQsIDB4MWEsIDB4MTIsIDB4MGUsIDB4NDAsIDB4NTAsIDB4MTMsIDB4MTIsIDB4MDksIDB4MDB9IH0sCit7IDB4MDdmMSwJMTYsCXsweDMwLCAweDAwLCAweDA3LCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDMwLCAweGU3LCAweGYzLCAweDEyLCAweDBkLCAweDRhLCAweDEyLCAweDBlLCAweDQyfSB9LAoreyAweDA4MDEsCTgsCXsweGMyLCAweDAzLCAweDEyLCAweDA4LCAweGZmLCAweDgwLCAweGQ2LCAweDIyfSB9LAoreyAweDA4MDksCTE2LAl7MHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwMiwgMHhlNywgMHgyMiwgMHhiYiwgMHhmZSwgMHgwMn0gfSwKK3sgMHgwODE5LAk5LAl7MHhlMywgMHgyMiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMn0gfSwKK3sgMHgwODIyLAkxNiwJezB4YmIsIDB4MDEsIDB4MGMsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTB9IH0sCit7IDB4MDgzMiwJMTYsCXsweDA2LCAweGU5LCAweDI1LCAweDgyLCAweGY4LCAweGU2LCAweDIyLCAweGJiLCAweGZlLCAweDA2LCAweGU5LCAweDI1LCAweDgyLCAweGY4LCAweGUyLCAweDIyfSB9LAoreyAweDA4NDIsCTEzLAl7MHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMn0gfSwKK3sgMHgwODRmLAkxNiwJezB4ZjgsIDB4YmIsIDB4MDEsIDB4MGQsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTgsIDB4ZjB9IH0sCit7IDB4MDg1ZiwJMTYsCXsweDIyLCAweDUwLCAweDA2LCAweGU5LCAweDI1LCAweDgyLCAweGM4LCAweGY2LCAweDIyLCAweGJiLCAweGZlLCAweDA1LCAweGU5LCAweDI1LCAweDgyLCAweGM4fSB9LAoreyAweDA4NmYsCTIsCXsweGYyLCAweDIyfSB9LAoreyAweDA4NzEsCTE2LAl7MHhiYiwgMHgwMSwgMHgxMCwgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHhmMH0gfSwKK3sgMHgwODgxLAkxNiwJezB4YTMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDksIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ODYsIDB4ZjAsIDB4MDgsIDB4ZTYsIDB4MjIsIDB4YmIsIDB4ZmV9IH0sCit7IDB4MDg5MSwJMTYsCXsweDBhLCAweGU5LCAweDI1LCAweDgyLCAweGY4LCAweGUyLCAweGY1LCAweGYwLCAweDA4LCAweGUyLCAweDIyLCAweGU1LCAweDgzLCAweDJhLCAweGY1LCAweDgzfSB9LAoreyAweDA4YTEsCTgsCXsweGU5LCAweDkzLCAweGY1LCAweGYwLCAweGEzLCAweGU5LCAweDkzLCAweDIyfSB9LAoreyAweDA4YTksCTE2LAl7MHhlYiwgMHg5ZiwgMHhmNSwgMHhmMCwgMHhlYSwgMHg5ZSwgMHg0MiwgMHhmMCwgMHhlOSwgMHg5ZCwgMHg0MiwgMHhmMCwgMHhlOCwgMHg5YywgMHg0NSwgMHhmMH0gfSwKK3sgMHgwOGI5LAkxLAl7MHgyMn0gfSwKK3sgMHgwOGJhLAkyLAl7MHg4ZiwgMHgyOH0gfSwKK3sgMHgwOGJjLAkxNiwJezB4ZTQsIDB4ZjUsIDB4MjksIDB4NzUsIDB4MmEsIDB4ZmYsIDB4NzUsIDB4MmIsIDB4MTEsIDB4NzUsIDB4MmMsIDB4MzIsIDB4YWIsIDB4MmEsIDB4YWEsIDB4MmJ9IH0sCit7IDB4MDhjYywJMTYsCXsweGE5LCAweDJjLCAweDkwLCAweDAwLCAweDAxLCAweDEyLCAweDA4LCAweDIyLCAweGI0LCAweDAzLCAweDFkLCAweGFmLCAweDI5LCAweDA1LCAweDI5LCAweGVmfSB9LAoreyAweDA4ZGMsCTE2LAl7MHhiNSwgMHgyOCwgMHgwMSwgMHgyMiwgMHgxMiwgMHgwOCwgMHgwOSwgMHg3ZSwgMHgwMCwgMHgyOSwgMHhmZiwgMHhlZSwgMHgzYSwgMHhhOSwgMHgwNywgMHg3NX0gfSwKK3sgMHgwOGVjLAkxNCwJezB4MmEsIDB4ZmYsIDB4ZjUsIDB4MmIsIDB4ODksIDB4MmMsIDB4ODAsIDB4ZDQsIDB4N2IsIDB4MDAsIDB4N2EsIDB4MDAsIDB4NzksIDB4MDB9IH0sCit7IDB4MDhmYSwJMSwJezB4MjJ9IH0sCit7IDB4MDhmYiwJNCwJezB4NTMsIDB4ZDgsIDB4ZWYsIDB4MzJ9IH0sCit7IDB4MDhmZiwJMSwJezB4MjJ9IH0sCit7IDB4MDkwMCwJOSwJezB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ODAsIDB4NzR9IH0sCit7IDB4MDk3ZCwJMTYsCXsweDQzLCAweDg3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIyfSB9LAoreyAweDA5OGQsCTEyLAl7MHg3OCwgMHg3ZiwgMHhlNCwgMHhmNiwgMHhkOCwgMHhmZCwgMHg3NSwgMHg4MSwgMHgzOSwgMHgwMiwgMHgwOSwgMHhkNH0gfSwKK3sgMHgwOTk5LAkxNiwJezB4MDIsIDB4MDcsIDB4NTEsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NDAsIDB4MDMsIDB4ZjYsIDB4ODAsIDB4MDEsIDB4ZjJ9IH0sCit7IDB4MDlhOSwJMTYsCXsweDA4LCAweGRmLCAweGY0LCAweDgwLCAweDI5LCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweDU0LCAweDA3LCAweDI0LCAweDBjLCAweGM4LCAweGMzLCAweDMzfSB9LAoreyAweDA5YjksCTE2LAl7MHhjNCwgMHg1NCwgMHgwZiwgMHg0NCwgMHgyMCwgMHhjOCwgMHg4MywgMHg0MCwgMHgwNCwgMHhmNCwgMHg1NiwgMHg4MCwgMHgwMSwgMHg0NiwgMHhmNiwgMHhkZn0gfSwKK3sgMHgwOWM5LAkxNiwJezB4ZTQsIDB4ODAsIDB4MGIsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4OTAsIDB4MGQsIDB4ZWMsIDB4ZTQsIDB4N2V9IH0sCit7IDB4MDlkOSwJMTYsCXsweDAxLCAweDkzLCAweDYwLCAweGJjLCAweGEzLCAweGZmLCAweDU0LCAweDNmLCAweDMwLCAweGU1LCAweDA5LCAweDU0LCAweDFmLCAweGZlLCAweGU0LCAweDkzfSB9LAoreyAweDA5ZTksCTE2LAl7MHhhMywgMHg2MCwgMHgwMSwgMHgwZSwgMHhjZiwgMHg1NCwgMHhjMCwgMHgyNSwgMHhlMCwgMHg2MCwgMHhhOCwgMHg0MCwgMHhiOCwgMHhlNCwgMHg5MywgMHhhM30gfSwKK3sgMHgwOWY5LAkxNiwJezB4ZmEsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2F9IH0sCit7IDB4MGEwOSwJMTYsCXsweGYwLCAweGEzLCAweGM4LCAweGM1LCAweDgyLCAweGM4LCAweGNhLCAweGM1LCAweDgzLCAweGNhLCAweGRmLCAweGU5LCAweGRlLCAweGU3LCAweDgwLCAweGJlfSB9LAoreyAweDBhMTksCTE2LAl7MHhlNCwgMHg5MCwgMHg3ZiwgMHg5YywgMHhmMCwgMHg3ZiwgMHgwYSwgMHhmZSwgMHgxMiwgMHgwZCwgMHg5NCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHg3NCwgMHg4OX0gfSwKK3sgMHgwYTI5LAkxNiwJezB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4NzQsIDB4Y2YsIDB4ZjAsIDB4N2YsIDB4ZjQsIDB4N2UsIDB4MDEsIDB4MTIsIDB4MGQsIDB4OTQsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MGEzOSwJMTYsCXsweDk2LCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweDdmLCAweDBhLCAweDdlLCAweDAwLCAweDEyLCAweDBkLCAweDk0LCAweDdmLCAweDA1LCAweDdlLCAweDAwfSB9LAoreyAweDBhNDksCTE2LAl7MHgxMiwgMHgwZCwgMHg5NCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmMCwgMHg3ZiwgMHgwNX0gfSwKK3sgMHgwYTU5LAkxNiwJezB4N2UsIDB4MDAsIDB4MTIsIDB4MGQsIDB4OTQsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4N2YsIDB4MDUsIDB4N2UsIDB4MDB9IH0sCit7IDB4MGE2OSwJMTYsCXsweDEyLCAweDBkLCAweDk0LCAweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDU0LCAweGJmLCAweGYwLCAweDdmLCAweDMyLCAweDdlLCAweDAwLCAweDEyLCAweDBkfSB9LAoreyAweDBhNzksCTE2LAl7MHg5NCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg3ZiwgMHgzMiwgMHg3ZSwgMHgwMCwgMHgxMiwgMHgwZCwgMHg5NCwgMHgyMn0gfSwKK3sgMHgwYTg5LAkxNiwJezB4NzUsIDB4MzIsIDB4MDEsIDB4ZTUsIDB4MzIsIDB4NjAsIDB4MWIsIDB4N2YsIDB4MDEsIDB4MTIsIDB4MGQsIDB4ZDcsIDB4N2YsIDB4MDAsIDB4N2UsIDB4MGV9IH0sCit7IDB4MGE5OSwJMTYsCXsweDdkLCAweDAwLCAweDdjLCAweDAxLCAweDEyLCAweDA2LCAweDk0LCAweGU0LCAweDMzLCAweGY1LCAweDMyLCAweDcwLCAweDA1LCAweDdmLCAweDBmLCAweDEyfSB9LAoreyAweDBhYTksCTE2LAl7MHgwZCwgMHhkNywgMHhlNSwgMHgzMiwgMHg2MCwgMHgxYiwgMHg3ZiwgMHgwMiwgMHgxMiwgMHgwZCwgMHhkNywgMHg3ZiwgMHgwMCwgMHg3ZSwgMHg4MCwgMHg3ZH0gfSwKK3sgMHgwYWI5LAkxNiwJezB4MDAsIDB4N2MsIDB4ODAsIDB4MTIsIDB4MDYsIDB4OTQsIDB4ZTQsIDB4MzMsIDB4ZjUsIDB4MzIsIDB4NzAsIDB4MDUsIDB4N2YsIDB4MGYsIDB4MTIsIDB4MGR9IH0sCit7IDB4MGFjOSwJMTYsCXsweGQ3LCAweGU1LCAweDMyLCAweDYwLCAweDFiLCAweDdmLCAweDAzLCAweDEyLCAweDBkLCAweGQ3LCAweDdmLCAweDAwLCAweDdlLCAweDIwLCAweDdkLCAweDQwfSB9LAoreyAweDBhZDksCTE2LAl7MHg3YywgMHg1YiwgMHgxMiwgMHgwNiwgMHg5NCwgMHhlNCwgMHgzMywgMHhmNSwgMHgzMiwgMHg3MCwgMHgwNSwgMHg3ZiwgMHgwZiwgMHgxMiwgMHgwZCwgMHhkN30gfSwKK3sgMHgwYWU5LAkxNCwJezB4ZTUsIDB4MzIsIDB4NjAsIDB4MDUsIDB4ZTQsIDB4ZmYsIDB4MTIsIDB4MGQsIDB4ZDcsIDB4ZTUsIDB4MzIsIDB4MjQsIDB4ZmYsIDB4MjJ9IH0sCit7IDB4MGFmNywJOCwJezB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MTAsIDB4ZDMsIDB4MjJ9IH0sCit7IDB4MGFmZiwJMSwJezB4MzJ9IH0sCit7IDB4MGIwMCwJMTYsCXsweDAyLCAweDBkLCAweDY0LCAweDAwLCAweDAyLCAweDBkLCAweGFiLCAweDAwLCAweDAyLCAweDBkLCAweDJmLCAweDAwLCAweDAyLCAweDBkLCAweDdjLCAweDAwfSB9LAoreyAweDBiMTAsCTE2LAl7MHgwMiwgMHgwZCwgMHhjMSwgMHgwMCwgMHgwMiwgMHgwYSwgMHhmZiwgMHgwMCwgMHgwMiwgMHgwZSwgMHg0YywgMHgwMCwgMHgwMiwgMHgwZSwgMHg0ZCwgMHgwMH0gfSwKK3sgMHgwYjIwLAkxNiwJezB4MDIsIDB4MGUsIDB4NGUsIDB4MDAsIDB4MDIsIDB4MGUsIDB4NGYsIDB4MDAsIDB4MDIsIDB4MGUsIDB4NTAsIDB4MDAsIDB4MDIsIDB4MGUsIDB4NTEsIDB4MDB9IH0sCit7IDB4MGIzMCwJMTYsCXsweDAyLCAweDBlLCAweDUyLCAweDAwLCAweDAyLCAweDBlLCAweDUzLCAweDAwLCAweDAyLCAweDBlLCAweDU0LCAweDAwLCAweDAyLCAweDBlLCAweDU1LCAweDAwfSB9LAoreyAweDBiNDAsCTE2LAl7MHgwMiwgMHgwZSwgMHg1NiwgMHgwMCwgMHgwMiwgMHgwZSwgMHg1NywgMHgwMCwgMHgwMiwgMHgwZSwgMHg1OCwgMHgwMCwgMHgwMiwgMHgwZSwgMHg1OSwgMHgwMH0gfSwKK3sgMHgwYjUwLAk4LAl7MHgwMiwgMHgwZSwgMHg1YSwgMHgwMCwgMHgwMiwgMHgwZSwgMHg1YiwgMHgwMH0gfSwKK3sgMHgwYjU4LAkxNiwJezB4ZTQsIDB4ZmUsIDB4NzUsIDB4MmEsIDB4ZmYsIDB4NzUsIDB4MmIsIDB4MTEsIDB4NzUsIDB4MmMsIDB4MTIsIDB4YWIsIDB4MmEsIDB4YWEsIDB4MmIsIDB4YTl9IH0sCit7IDB4MGI2OCwJMTYsCXsweDJjLCAweDkwLCAweDAwLCAweDAxLCAweDEyLCAweDA4LCAweDIyLCAweDY0LCAweDAyLCAweDcwLCAweDJkLCAweGFkLCAweDA2LCAweDBlLCAweGVkLCAweGI1fSB9LAoreyAweDBiNzgsCTE2LAl7MHgwNywgMHgwMSwgMHgyMiwgMHg5MCwgMHgwMCwgMHgwMiwgMHgxMiwgMHgwOCwgMHg3MSwgMHg4NSwgMHhmMCwgMHgyOCwgMHhmNSwgMHgyOSwgMHg2MiwgMHgyOH0gfSwKK3sgMHgwYjg4LAkxNiwJezB4ZTUsIDB4MjgsIDB4NjIsIDB4MjksIDB4ZTUsIDB4MjksIDB4NjIsIDB4MjgsIDB4MjksIDB4ZmQsIDB4ZTUsIDB4MjgsIDB4M2EsIDB4YTksIDB4MDUsIDB4NzV9IH0sCit7IDB4MGI5OCwJMTQsCXsweDJhLCAweGZmLCAweGY1LCAweDJiLCAweDg5LCAweDJjLCAweDgwLCAweGMzLCAweDdiLCAweDAwLCAweDdhLCAweDAwLCAweDc5LCAweDAwfSB9LAoreyAweDBiYTYsCTEsCXsweDIyfSB9LAoreyAweDBiYTcsCTE2LAl7MHhhYiwgMHgwNywgMHhhYSwgMHgwNiwgMHhhYywgMHgwNSwgMHhlNCwgMHhmZCwgMHhlNSwgMHgxMSwgMHg2MCwgMHgxMSwgMHhlYSwgMHhmZiwgMHhhZSwgMHgwNX0gfSwKK3sgMHgwYmI3LAkxNiwJezB4MGQsIDB4ZWUsIDB4MjQsIDB4MTAsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MGYsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4ZWIsIDB4YWUsIDB4MDV9IH0sCit7IDB4MGJjNywJMTYsCXsweDBkLCAweDc0LCAweDEwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDBmLCAweGY1LCAweDgzLCAweGViLCAweGYwLCAweGFmLCAweDA1LCAweDBkfSB9LAoreyAweDBiZDcsCTE2LAl7MHg3NCwgMHgxMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwZiwgMHhmNSwgMHg4MywgMHhlYywgMHhmMCwgMHhhZiwgMHgwZiwgMHg3YSwgMHgwZn0gfSwKK3sgMHgwYmU3LAkxMywJezB4N2IsIDB4MTAsIDB4MTIsIDB4MGQsIDB4MTAsIDB4N2YsIDB4MGEsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MGQsIDB4OTQsIDB4MjJ9IH0sCit7IDB4MGJmNCwJMTYsCXsweDhlLCAweDMyLCAweDhmLCAweDMzLCAweDhkLCAweDM0LCAweDhhLCAweDM1LCAweDhiLCAweDM2LCAweGU0LCAweGZkLCAweGY1LCAweDM3LCAweGU1LCAweDExfSB9LAoreyAweDBjMDQsCTE2LAl7MHg2MCwgMHgxMiwgMHhlNSwgMHgzMiwgMHhmZiwgMHhhZSwgMHgwNSwgMHgwZCwgMHhlZSwgMHgyNCwgMHgxMywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwZn0gfSwKK3sgMHgwYzE0LAkxNiwJezB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4ZTUsIDB4MzMsIDB4YWUsIDB4MDUsIDB4MGQsIDB4NzQsIDB4MTMsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzR9IH0sCit7IDB4MGMyNCwJMTYsCXsweDBmLCAweGY1LCAweDgzLCAweGU1LCAweDMzLCAweGYwLCAweGFmLCAweDBmLCAweDdhLCAweDBmLCAweDdiLCAweDEzLCAweDEyLCAweDBkLCAweDEwLCAweGFmfSB9LAoreyAweDBjMzQsCTExLAl7MHgwZiwgMHhhZCwgMHgzNCwgMHhhYiwgMHgzNiwgMHhhYSwgMHgzNSwgMHgxMiwgMHgwYywgMHhmMSwgMHgyMn0gfSwKK3sgMHgwYzNmLAkxNiwJezB4OGUsIDB4MzIsIDB4OGYsIDB4MzMsIDB4OGQsIDB4MzQsIDB4OGEsIDB4MzUsIDB4OGIsIDB4MzYsIDB4ZTQsIDB4ZjUsIDB4MzcsIDB4ZTUsIDB4MzcsIDB4YzN9IH0sCit7IDB4MGM0ZiwJMTYsCXsweDk1LCAweDM0LCAweDUwLCAweDIwLCAweDA1LCAweDMzLCAweGU1LCAweDMzLCAweGFlLCAweDMyLCAweDcwLCAweDAyLCAweDA1LCAweDMyLCAweDE0LCAweGZmfSB9LAoreyAweDBjNWYsCTE2LAl7MHhlNSwgMHgzNiwgMHgyNSwgMHgzNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgzNSwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZCwgMHgxMiwgMHgwYiwgMHhhN30gfSwKK3sgMHgwYzZmLAk1LAl7MHgwNSwgMHgzNywgMHg4MCwgMHhkOSwgMHgyMn0gfSwKK3sgMHgwYzc0LAkxNiwJezB4YTksIDB4MDcsIDB4ZTUsIDB4MGQsIDB4NzAsIDB4MjUsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ZTksIDB4MjUsIDB4ZTB9IH0sCit7IDB4MGM4NCwJMTYsCXsweDQ0LCAweDAxLCAweDkwLCAweDdmLCAweGE2LCAweGYwLCAweDhkLCAweDA4LCAweGFmLCAweDAzLCAweGE5LCAweDA3LCAweDc1LCAweDA5LCAweDAxLCAweDhhfSB9LAoreyAweDBjOTQsCTEzLAl7MHgwYSwgMHg4OSwgMHgwYiwgMHhlNCwgMHhmNSwgMHgwYywgMHg3NSwgMHgwZCwgMHgwMywgMHhkMywgMHgyMiwgMHhjMywgMHgyMn0gfSwKK3sgMHgwY2ExLAkxNiwJezB4YTksIDB4MDcsIDB4ZTUsIDB4MGQsIDB4NzAsIDB4MjMsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ZTksIDB4MjUsIDB4ZTB9IH0sCit7IDB4MGNiMSwJMTYsCXsweDkwLCAweDdmLCAweGE2LCAweGYwLCAweDhkLCAweDA4LCAweGFmLCAweDAzLCAweGE5LCAweDA3LCAweDc1LCAweDA5LCAweDAxLCAweDhhLCAweDBhLCAweDg5fSB9LAoreyAweDBjYzEsCTExLAl7MHgwYiwgMHhlNCwgMHhmNSwgMHgwYywgMHg3NSwgMHgwZCwgMHgwMSwgMHhkMywgMHgyMiwgMHhjMywgMHgyMn0gfSwKK3sgMHgwY2NjLAkxNiwJezB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4MzAsIDB4MDYsIDB4MDQsIDB4ZTAsIDB4NDR9IH0sCit7IDB4MGNkYywJMTYsCXsweDAyLCAweGYwLCAweDdmLCAweGQwLCAweDdlLCAweDA3LCAweDEyLCAweDBkLCAweDk0LCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGY3LCAweGYwfSB9LAoreyAweDBjZWMsCTUsCXsweGUwLCAweDQ0LCAweDA0LCAweGYwLCAweDIyfSB9LAoreyAweDBjZjEsCTE2LAl7MHgxMiwgMHgwYywgMHg3NCwgMHhlNSwgMHgwZCwgMHgyNCwgMHhmYSwgMHg2MCwgMHgxMCwgMHgxNCwgMHg2MCwgMHgwNywgMHgyNCwgMHgwNywgMHg3MCwgMHhmM30gfSwKK3sgMHgwZDAxLAkxNSwJezB4N2YsIDB4MDgsIDB4MjIsIDB4ZTQsIDB4ZjUsIDB4MGQsIDB4N2YsIDB4MDcsIDB4MjIsIDB4ZTQsIDB4ZjUsIDB4MGQsIDB4N2YsIDB4MDYsIDB4MjJ9IH0sCit7IDB4MGQxMCwJMTYsCXsweDEyLCAweDBjLCAweGExLCAweGU1LCAweDBkLCAweDI0LCAweGZhLCAweDYwLCAweDEwLCAweDE0LCAweDYwLCAweDA3LCAweDI0LCAweDA3LCAweDcwLCAweGYzfSB9LAoreyAweDBkMjAsCTE1LAl7MHg3ZiwgMHgwOCwgMHgyMiwgMHhlNCwgMHhmNSwgMHgwZCwgMHg3ZiwgMHgwNywgMHgyMiwgMHhlNCwgMHhmNSwgMHgwZCwgMHg3ZiwgMHgwNiwgMHgyMn0gfSwKK3sgMHgwZDJmLAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4OTAsIDB4N2YsIDB4YzQsIDB4ZTQsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MGQzZiwJMTEsCXsweGFiLCAweDc0LCAweDA0LCAweGYwLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBkNGEsCTE2LAl7MHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHgzMCwgMHhlNywgMHgxMiwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg3ZiwgMHgxNCwgMHg3ZSwgMHgwMCwgMHgxMn0gfSwKK3sgMHgwZDVhLAkxMCwJezB4MGQsIDB4OTQsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4MjJ9IH0sCit7IDB4MGQ2NCwJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGQyLCAweDAxLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDAxfSB9LAoreyAweDBkNzQsCTgsCXsweGYwLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBkN2MsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhkMiwgMHgwMywgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwOH0gfSwKK3sgMHgwZDhjLAk4LAl7MHhmMCwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwZDk0LAkxNiwJezB4OGUsIDB4MzgsIDB4OGYsIDB4MzksIDB4ZTUsIDB4MzksIDB4MTUsIDB4MzksIDB4YWUsIDB4MzgsIDB4NzAsIDB4MDIsIDB4MTUsIDB4MzgsIDB4NGUsIDB4NjB9IH0sCit7IDB4MGRhNCwJNywJezB4MDUsIDB4MTIsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZWUsIDB4MjJ9IH0sCit7IDB4MGRhYiwJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDAyLCAweGYwLCAweGQwfSB9LAoreyAweDBkYmIsCTYsCXsweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBkYzEsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgxMCwgMHhmMCwgMHhkMH0gfSwKK3sgMHgwZGQxLAk2LAl7MHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwZGQ3LAkxNiwJezB4YWUsIDB4MDcsIDB4N2YsIDB4MjEsIDB4N2QsIDB4MDEsIDB4NzQsIDB4MDAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MGYsIDB4YWIsIDB4ODJ9IH0sCit7IDB4MGRlNywJNSwJezB4ZmEsIDB4MTIsIDB4MGQsIDB4MTAsIDB4MjJ9IH0sCit7IDB4MGRlYywJMTYsCXsweDUwLCAweDBmLCAweDAwLCAweGMwLCAweGY5LCAweGE0LCAweGIwLCAweDk5LCAweDkyLCAweDgyLCAweGY4LCAweDgwLCAweDk4LCAweDg4LCAweDgzLCAweGM2fSB9LAoreyAweDBkZmMsCTMsCXsweGExLCAweDg2LCAweDhlfSB9LAoreyAweDBkZmYsCTEsCXsweDAwfSB9LAoreyAweDBlMDAsCTE2LAl7MHg3NCwgMHgwMCwgMHhmNSwgMHg4NiwgMHg5MCwgMHhmZCwgMHhhNSwgMHg3YywgMHgwNSwgMHhhMywgMHhlNSwgMHg4MiwgMHg0NSwgMHg4MywgMHg3MCwgMHhmOX0gfSwKK3sgMHgwZTEwLAkxLAl7MHgyMn0gfSwKK3sgMHgwZTExLAkxNCwJezB4OTAsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4MTAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ZDMsIDB4MjJ9IH0sCit7IDB4MGUxZiwJMTQsCXsweDkwLCAweDdmLCAweDAwLCAweGU1LCAweDBlLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAxLCAweGYwLCAweGQzLCAweDIyfSB9LAoreyAweDBlMmQsCTgsCXsweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGY1LCAweDBlLCAweGQzLCAweDIyfSB9LAoreyAweDBlMzUsCTgsCXsweGU0LCAweGY1LCAweDBkLCAweGQyLCAweGU5LCAweGQyLCAweGFmLCAweDIyfSB9LAoreyAweDBlM2QsCTMsCXsweGQyLCAweDAwLCAweDIyfSB9LAoreyAweDBlNDAsCTIsCXsweGQzLCAweDIyfSB9LAoreyAweDBlNDIsCTIsCXsweGQzLCAweDIyfSB9LAoreyAweDBlNDQsCTIsCXsweGQzLCAweDIyfSB9LAoreyAweDBlNDYsCTIsCXsweGQzLCAweDIyfSB9LAoreyAweDBlNDgsCTIsCXsweGQzLCAweDIyfSB9LAoreyAweDBlNGEsCTIsCXsweGQzLCAweDIyfSB9LAoreyAweDBlNGMsCTEsCXsweDMyfSB9LAoreyAweDBlNGQsCTEsCXsweDMyfSB9LAoreyAweDBlNGUsCTEsCXsweDMyfSB9LAoreyAweDBlNGYsCTEsCXsweDMyfSB9LAoreyAweDBlNTAsCTEsCXsweDMyfSB9LAoreyAweDBlNTEsCTEsCXsweDMyfSB9LAoreyAweDBlNTIsCTEsCXsweDMyfSB9LAoreyAweDBlNTMsCTEsCXsweDMyfSB9LAoreyAweDBlNTQsCTEsCXsweDMyfSB9LAoreyAweDBlNTUsCTEsCXsweDMyfSB9LAoreyAweDBlNTYsCTEsCXsweDMyfSB9LAoreyAweDBlNTcsCTEsCXsweDMyfSB9LAoreyAweDBlNTgsCTEsCXsweDMyfSB9LAoreyAweDBlNTksCTEsCXsweDMyfSB9LAoreyAweDBlNWEsCTEsCXsweDMyfSB9LAoreyAweDBlNWIsCTEsCXsweDMyfSB9LAoreyAweDExMDAsCTE2LAl7MHgxMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHgwNSwgMHgxMCwgMHgyNywgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMn0gfSwKK3sgMHgxMTEwLAkxNiwJezB4MDAsIDB4MDEsIDB4MDksIDB4MDIsIDB4MjAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDMsIDB4YTAsIDB4MDAsIDB4MDksIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDJ9IH0sCit7IDB4MTEyMCwJMTYsCXsweGZmLCAweDAwLCAweDAwLCAweDA0LCAweDA3LCAweDA1LCAweDgyLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAyLCAweDAyLCAweDQwfSB9LAoreyAweDExMzAsCTE2LAl7MHgwMCwgMHgwMCwgMHgwNCwgMHgwMywgMHgwOSwgMHgwNCwgMHgyNiwgMHgwMywgMHg0MSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2MywgMHgwMCwgMHg2OCwgMHgwMH0gfSwKK3sgMHgxMTQwLAkxNiwJezB4NmYsIDB4MDAsIDB4NzIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MDAsIDB4NjksIDB4MDAsIDB4NzAsIDB4MDAsIDB4NzMsIDB4MDB9IH0sCit7IDB4MTE1MCwJMTYsCXsweDJjLCAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDYzLCAweDAwLCAweDJlLCAweDAwLCAweDI4LCAweDAzLCAweDQ2LCAweDAwfSB9LAoreyAweDExNjAsCTE2LAl7MHg2OSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2ZCwgMHgwMCwgMHg3NywgMHgwMCwgMHg2MSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2NSwgMHgwMCwgMHgyMCwgMHgwMH0gfSwKK3sgMHgxMTcwLAkxNiwJezB4NDYsIDB4MDAsIDB4NzIsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmQsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NTcsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NzIsIDB4MDB9IH0sCit7IDB4MTE4MCwJMTYsCXsweDZiLCAweDAwLCAweDczLCAweDAwLCAweDJhLCAweDAzLCAweDQzLCAweDAwLCAweDZmLCAweDAwLCAweDZlLCAweDAwLCAweDY2LCAweDAwLCAweDY5LCAweDAwfSB9LAoreyAweDExOTAsCTE2LAl7MHg2NywgMHgwMCwgMHg3NSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2MSwgMHgwMCwgMHg3NCwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHg2ZSwgMHgwMH0gfSwKK3sgMHgxMWEwLAkxNiwJezB4MjAsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NzIsIDB4MDAsIDB4NjksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjcsIDB4MDAsIDB4MjIsIDB4MDN9IH0sCit7IDB4MTFiMCwJMTYsCXsweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDc0LCAweDAwLCAweDY1LCAweDAwLCAweDcyLCAweDAwLCAweDY2LCAweDAwLCAweDYxLCAweDAwLCAweDYzLCAweDAwfSB9LAoreyAweDExYzAsCTE2LAl7MHg2NSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1MywgMHgwMCwgMHg3NCwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2NywgMHgwMH0gfSwKK3sgMHgxMWQwLAkyLAl7MHgwMCwgMHgwMH0gfSwKK3sgMHhmZmZmLAkwLAl7MHgwMH0gfQorfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3hpcmNvbV9wZ3MuUyBiL2RyaXZlcnMvdXNiL3NlcmlhbC94aXJjb21fcGdzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVkOTlkZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC94aXJjb21fcGdzLlMKQEAgLTAsMCArMSwxMTkyIEBACisvKiAgJElkOiBsb29wLnMsdiAxLjIzIDIwMDAvMDMvMjAgMDk6NDk6MDYgd2FybmVyIEV4cCAkCisgKiAKKyAqICBGaXJtd2FyZSBmb3IgdGhlIEtleXNwYW4gUERBIFNlcmlhbCBBZGFwdGVyLCBhIFVTQiBzZXJpYWwgcG9ydCBiYXNlZCBvbgorICogIHRoZSBFelVTQiBtaWNyb2NvbnRyb2xsZXIuCisgKiAKKyAqICAoQykgQ29weXJpZ2h0IDIwMDAgQnJpYW4gV2FybmVyIDx3YXJuZXJAbG90aGFyLmNvbT4KKyAqIAorICogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIAl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqICAiS2V5c3BhbiBQREEgU2VyaWFsIEFkYXB0ZXIiIGlzIHByb2JhYmx5IGEgY29weXJpZ2h0IG9mIEtleXNwYW4sIHRoZQorICogIGNvbXBhbnkuCisgKiAKKyAqICBUaGlzIHNlcmlhbCBhZGFwdGVyIGlzIGJhc2ljYWxseSBhbiBFelVTQiBjaGlwIGFuZCBhbiBSUy0yMzIgbGluZSBkcml2ZXIKKyAqICBpbiBhIGxpdHRsZSB3aWRnZXQgdGhhdCBoYXMgYSBEQi05IG9uIG9uZSBlbmQgYW5kIGEgVVNCIHBsdWcgb24gdGhlIG90aGVyLgorICogIEl0IHVzZXMgdGhlIEV6VVNCJ3MgaW50ZXJuYWwgVUFSVDAgKHVzaW5nIHRoZSBwaW5zIGZyb20gUG9ydCBDKSBhbmQgdGltZXIyCisgKiAgYXMgYSBiYXVkLXJhdGUgZ2VuZXJhdG9yLiBUaGUgd2lyaW5nIGlzOgorICogICBQQzAvUnhEMCA8LSByeGQgKERCOSBwaW4gMikgICAgICAgICBQQzQgPC0gZHNyIHBpbiA2CisgKiAgIFBDMS9UeEQwIC0+IHR4ZCBwaW4gMyAgICAgICAgICAgICAgIFBDNSA8LSByaSAgcGluIDkKKyAqICAgUEMyICAgICAgLT4gcnRzIHBpbiA3ICAgICAgICAgICAgICAgUEM2IDwtIGRjZCBwaW4gMQorICogICBQQzMgICAgICA8LSBjdHMgcGluIDggICAgICAgICAgICAgICBQQzcgLT4gZHRyIHBpbiA0CisgKiAgIFBCMSAtPiBsaW5lIGRyaXZlciBzdGFuZGJ5CisgKgorICogIFRoZSBFelVTQiByZWdpc3RlciBjb25zdGFudHMgYmVsb3cgY29tZSBmcm9tIHRoZWlyIGV4Y2VsbGVudCBkb2N1bWVudGF0aW9uCisgKiAgYW5kIHNhbXBsZSBjb2RlICh3aGljaCB1c2VkIHRvIGJlIGF2YWlsYWJsZSBhdCB3d3cuYW5jaG9yY2hpcHMuY29tLCBidXQKKyAqICB0aGF0IGhhcyBub3cgYmVlbiBhYnNvcmJlZCBpbnRvIEN5cHJlc3MnIHNpdGUgYW5kIHRoZSBDRC1ST00gY29udGVudHMKKyAqICBkb24ndCBhcHBlYXIgdG8gYmUgYXZhaWxhYmxlIG9ubGluZSBhbnltb3JlKS4gSWYgd2UgZ2V0IG11bHRpcGxlCisgKiAgRXpVU0ItYmFzZWQgZHJpdmVycyBpbnRvIHRoZSBrZXJuZWwsIGl0IG1pZ2h0IGJlIHVzZWZ1bCB0byBwdWxsIHRoZW0gb3V0CisgKiAgaW50byBhIHNlcGFyYXRlIC5oIGZpbGUuCisgKiAKKyAqIFRIRU9SWSBPRiBPUEVSQVRJT046CisgKgorICogICBUaGVyZSBhcmUgdHdvIDI1Ni1ieXRlIHJpbmcgYnVmZmVycywgb25lIGZvciB0eCwgb25lIGZvciByeC4KKyAqCisgKiAgIEVQMm91dCBpcyBwdXJlIHR4IGRhdGEuIFdoZW4gaXQgYXBwZWFycywgdGhlIGRhdGEgaXMgY29waWVkIGludG8gdGhlIHR4CisgKiAgIHJpbmcgYW5kIHNlcmlhbCB0cmFuc21pc3Npb24gaXMgc3RhcnRlZCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBydW5uaW5nLiBUaGUKKyAqICAgInR4IGJ1ZmZlciBlbXB0eSIgaW50ZXJydXB0IG1heSBraWNrIG9mZiBhbm90aGVyIGNoYXJhY3RlciBpZiB0aGUgcmluZworICogICBzdGlsbCBoYXMgZGF0YS4gSWYgdGhlIGhvc3QgaXMgdHgtYmxvY2tlZCBiZWNhdXNlIHRoZSByaW5nIGZpbGxlZCB1cCwKKyAqICAgaXQgd2lsbCByZXF1ZXN0IGEgInR4IHVudGhyb3R0bGUiIGludGVycnVwdC4gSWYgc2VuZGluZyBhIHNlcmlhbCBjaGFyYWN0ZXIKKyAqICAgZW1wdGllcyB0aGUgcmluZyBiZWxvdyB0aGUgZGVzaXJlZCB0aHJlc2hvbGQsIHdlIHNldCBhIGJpdCB0aGF0IHdpbGwgc2VuZAorICogICB1cCB0aGUgdHggdW50aHJvdHRsZSBtZXNzYWdlIGFzIHNvb24gYXMgdGhlIHJ4IGJ1ZmZlciBiZWNvbWVzIGZyZWUuCisgKgorICogICBFUDJpbiAoaW50ZXJydXB0KSBpcyB1c2VkIHRvIHNlbmQgYm90aCByeCBjaGFycyBhbmQgcnggc3RhdHVzIG1lc3NhZ2VzCisgKiAgIChvbmx5ICJ0eCB1bnRocm90dGxlIiBhdCB0aGlzIHRpbWUpIGJhY2sgdXAgdG8gdGhlIGhvc3QuIFRoZSBmaXJzdCBieXRlCisgKiAgIG9mIHRoZSByeCBtZXNzYWdlIGluZGljYXRlcyBkYXRhICgwKSBvciBzdGF0dXMgbXNnICgxKS4gU3RhdHVzIG1lc3NhZ2VzCisgKiAgIGFyZSBzZW50IGJlZm9yZSBhbnkgZGF0YS4KKyAqCisgKiAgIEluY29taW5nIHNlcmlhbCBjaGFyYWN0ZXJzIGFyZSBwdXQgaW50byB0aGUgcnggcmluZyBieSB0aGUgc2VyaWFsCisgKiAgIGludGVycnVwdCwgYW5kIHRoZSBFUDJpbiBidWZmZXIgc2VudCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBpbiB0cmFuc2l0LgorICogICBXaGVuIHRoZSBFUDJpbiBidWZmZXIgcmV0dXJucywgdGhlIGludGVycnVwdCBwcm9tcHRzIHVzIHRvIHNlbmQgbW9yZQorICogICByeCBjaGFycyAob3Igc3RhdHVzIG1lc3NhZ2VzKSBpZiB0aGV5IGFyZSBwZW5kaW5nLgorICoKKyAqICAgRGV2aWNlIGNvbnRyb2wgaGFwcGVucyB0aHJvdWdoICJ2ZW5kb3Igc3BlY2lmaWMiIGNvbnRyb2wgbWVzc2FnZXMgb24gRVAwLgorICogICBBbGwgbWVzc2FnZXMgYXJlIGRlc3RpbmVkIGZvciB0aGUgIkludGVyZmFjZSIgKHdpdGggdGhlIGluZGV4IGFsd2F5cyAwLAorICogICBzbyB0aGF0IGlmIHRoZWlyIHR3by1wb3J0IGRldmljZSBtaWdodCBzb21lZGF5IHVzZSBzaW1pbGFyIGZpcm13YXJlLCB3ZQorICogICBjYW4gdXNlIGluZGV4PTEgdG8gcmVmZXIgdG8gdGhlIHNlY29uZCBwb3J0KS4gVGhlIG1lc3NhZ2VzIGRlZmluZWQgYXJlOgorICoKKyAqICAgIGJSZXF1ZXN0ID0gMCA6IHNldCBiYXVkL2JpdHMvcGFyaXR5CisgKiAgICAgICAgICAgICAgIDEgOiB1bnVzZWQKKyAqICAgICAgICAgICAgICAgMiA6IHJlc2VydmVkIGZvciBzZXR0aW5nIEhXIGZsb3cgY29udHJvbCAoQ1RTUlRTKQorICogICAgICAgICAgICAgICAzIDogZ2V0L3NldCAibW9kZW0gaW5mbyIgKHBpbiBzdGF0ZXM6IERUUiwgUlRTLCBEQ0QsIFJJLCBldGMpCisgKiAgICAgICAgICAgICAgIDQgOiBzZXQgYnJlYWsgKG9uL29mZikKKyAqICAgICAgICAgICAgICAgNSA6IHJlc2VydmVkIGZvciByZXF1ZXN0aW5nIGludGVycnVwdHMgb24gcGluIHN0YXRlIGNoYW5nZQorICogICAgICAgICAgICAgICA2IDogcXVlcnkgYnVmZmVyIHJvb20gb3IgY2hhcnMgaW4gdHggYnVmZmVyCisgKiAgICAgICAgICAgICAgIDcgOiByZXF1ZXN0IHR4IHVudGhyb3R0bGUgaW50ZXJydXB0CisgKgorICogIFRoZSBob3N0LXNpZGUgZHJpdmVyIGlzIHNldCB0byByZWNvZ25pemUgdGhlIGRldmljZSBJRCB2YWx1ZXMgc3Rhc2hlZCBpbgorICogIHNlcmlhbCBFRVBST00gKDB4MDZjZCwgMHgwMTAzKSwgcHJvZ3JhbSB0aGlzIGZpcm13YXJlIGludG8gcGxhY2UsIHRoZW4KKyAqICBzdGFydCBpdCBydW5uaW5nLiBUaGlzIGZpcm13YXJlIHdpbGwgdXNlIEV6VVNCJ3MgInJlbnVtZXJhdGlvbiIgdHJpY2sgYnkKKyAqICBzaW11bGF0aW5nIGEgYnVzIGRpc2Nvbm5lY3QsIHRoZW4gcmVjb25uZWN0IHdpdGggYSBkaWZmZXJlbnQgZGV2aWNlIElECisgKiAgKGVuY29kZWQgaW4gdGhlIGRlc2NfZGV2aWNlIGRlc2NyaXB0b3IgYmVsb3cpLiBUaGUgaG9zdCBkcml2ZXIgdGhlbgorICogIHJlY29nbml6ZXMgdGhlIG5ldyBkZXZpY2UgSUQgYW5kIGdsdWVzIGl0IHRvIHRoZSByZWFsIHNlcmlhbCBkcml2ZXIgY29kZS4KKyAqCisgKiBVU0VGVUwgRE9DUzoKKyAqICBFelVTQiBUZWNobmljYWwgUmVmZXJlbmNlIE1hbnVhbDogPGh0dHA6Ly93d3cuYW5jaG9yY2hpcHMuY29tPgorICogIDgwNTEgbWFudWFsczogZXZlcnl3aGVyZSwgYnV0IHRyeSB3d3cuZGFsc2VtaS5jb20gYmVjYXVzZSB0aGUgRXpVU0IgaXMKKyAqICAgYmFzaWNhbGx5IHRoZSBEYWxsYXMgZW5oYW5jZWQgODA1MSBjb2RlLiBSZW1lbWJlciB0aGF0IHRoZSBFelVTQiBJTyBwb3J0cworICogICB1c2UgdG90YWxseSBkaWZmZXJlbnQgcmVnaXN0ZXJzIQorICogIFVTQiAxLjEgc3BlYzogd3d3LnVzYi5vcmcKKyAqCisgKiBIT1cgVE8gQlVJTEQ6CisgKiAgZ2NjIC14IGFzc2VtYmxlci13aXRoLWNwcCAtUCAtRSAtbyBrZXlzcGFuX3BkYS5hc20ga2V5c3Bhbl9wZGEucworICogIGFzMzEgLWwga2V5c3Bhbl9wZGEuYXNtCisgKiAgbXYga2V5c3Bhbl9wZGEub2JqIGtleXNwYW5fcGRhLmhleAorICogIHBlcmwgZXp1c2JfY29udmVydC5wbCBrZXlzcGFuX3BkYSA8IGtleXNwYW5fcGRhLmhleCA+IGtleXNwYW5fcGRhX2Z3LmgKKyAqIEdldCBhczMxIGZyb20gPGh0dHA6Ly93d3cucGpyYy5jb20vdGVjaC84MDUxL2luZGV4Lmh0bWw+LCBhbmQgaGFjayBvbiBpdAorICogYSBiaXQgdG8gbWFrZSBpdCBidWlsZC4KKyAqCisgKiBUSEFOS1M6CisgKiAgR3JlZyBLcm9haC1IYXJ0bWFuLCBmb3IgY29vcmRpbmF0aW5nIHRoZSB3aG9sZSB1c2Itc2VyaWFsIHRoaW5nLgorICogIEFuY2hvckNoaXBzLCBmb3IgbWFraW5nIHN1Y2ggYW4gaW5jcmVkaWJseSB1c2VmdWwgbGl0dGxlIG1pY3JvY29udHJvbGxlci4KKyAqICBLZXlTcGFuLCBmb3IgbWFraW5nIGEgaGFuZHksIGNoZWFwICgkNDApIHdpZGdldCB0aGF0IHdhcyBzbyBlYXN5IHRvIHRha2UKKyAqICAgICAgICAgICBhcGFydCBhbmQgdHJhY2Ugd2l0aCBhbiBvaG1tZXRlci4KKyAqCisgKiBUT0RPOgorICogIGxvdHMuIGdyZXAgZm9yIFRPRE8uIEludGVycnVwdCBzYWZldHkgbmVlZHMgc3RyZXNzLXRlc3RpbmcuIEJldHRlciBmbG93CisgKiAgY29udHJvbC4gSW50ZXJydXB0aW5nIGhvc3QgdXBvbiBjaGFuZ2UgaW4gRENELCBldGMsIGNvdW50aW5nIHRyYW5zaXRpb25zLgorICogIE5lZWQgdG8gZmluZCBhIHNhZmUgZGV2aWNlIGlkIHRvIHVzZSAodGhlIG9uZSB1c2VkIGJ5IHRoZSBLZXlzcGFuIGZpcm13YXJlCisgKiAgdW5kZXIgV2luZG93cyB3b3VsZCBiZSBpZGVhbC4uIGNhbiBhbnlvbmUgZmlndXJlIG91dCB3aGF0IGl0IGlzPykuIFBhcml0eS4KKyAqICBNb3JlIGJhdWQgcmF0ZXMuIE9oLCBhbmQgdGhlIHN0cmluZy1kZXNjcmlwdG9yLWxlbmd0aCBzaWxpY29uIGJ1ZworICogIHdvcmthcm91bmQgc2hvdWxkIGJlIGltcGxlbWVudGVkLCBidXQgSSdtIGxhenksIGFuZCB0aGUgY29uc2VxdWVuY2UgaXMKKyAqICB0aGF0IHRoZSBkZXZpY2UgbmFtZSBzdHJpbmdzIHRoYXQgc2hvdyB1cCBpbiB5b3VyIGtlcm5lbCBsb2cgd2lsbCBoYXZlCisgKiAgbG90cyBvZiB0cmFpbGluZyBiaW5hcnkgZ2FyYmFnZSBpbiB0aGVtIChhcHBlYXJzIGFzID8/Pz8pLiBEZXZpY2Ugc3RyaW5ncworICogIHNob3VsZCBiZSBtYWRlIG1vcmUgYWNjdXJhdGUuCisgKgorICogUXVlc3Rpb25zLCBidWdzLCBwYXRjaGVzIHRvIEJyaWFuLgorICoKKyAqICAtQnJpYW4gV2FybmVyIDx3YXJuZXJAbG90aGFyLmNvbT4KKyAqCisgKi8KKwkKKyNkZWZpbmUgSElHSCh4KSAoKCh4KSAmIDB4ZmYwMCkgLyAyNTYpCisjZGVmaW5lIExPVyh4KSAoKHgpICYgMHhmZikKKworI2RlZmluZSBkcGwxIDB4ODQKKyNkZWZpbmUgZHBoMSAweDg1CisjZGVmaW5lIGRwcyAweDg2CisKKzs7OyBvdXIgYml0IGFzc2lnbm1lbnRzCisjZGVmaW5lIFRYX1JVTk5JTkcgMAorI2RlZmluZSBET19UWF9VTlRIUk9UVExFIDEKKwkKKwk7OyBzdGFjayBmcm9tIDB4NjAgdG8gMHg3Zjogc2hvdWxkIHJlYWxseSBzZXQgU1AgdG8gMHg2MC0xLCBub3QgMHg2MAorI2RlZmluZSBTVEFDSyAjMHg2MC0xCisKKyNkZWZpbmUgRVhJRiAweDkxCisjZGVmaW5lIEVJRSAweGU4CisJLmZsYWcgRVVTQiwgRUlFLjAKKwkuZmxhZyBFUzAsIElFLjQKKworI2RlZmluZSBFUDBDUyAjMHg3ZmI0CisjZGVmaW5lIEVQMFNUQUxMYml0ICMweDAxCisjZGVmaW5lIElOMEJVRiAjMHg3ZjAwCisjZGVmaW5lIElOMEJDICMweDdmYjUKKyNkZWZpbmUgT1VUMEJVRiAjMHg3ZWMwCisjZGVmaW5lIE9VVDBCQyAjMHg3ZmM1CQkKKyNkZWZpbmUgSU4yQlVGICMweDdlMDAKKyNkZWZpbmUgSU4yQkMgIzB4N2ZiOQorI2RlZmluZSBJTjJDUyAjMHg3ZmI4CisjZGVmaW5lIE9VVDJCQyAjMHg3ZmM5CisjZGVmaW5lIE9VVDJDUyAjMHg3ZmM4CisjZGVmaW5lIE9VVDJCVUYgIzB4N2RjMAorI2RlZmluZSBJTjRCVUYgIzB4N2QwMAorI2RlZmluZSBJTjRCQyAjMHg3ZmJkCisjZGVmaW5lIElONENTICMweDdmYmMKKyNkZWZpbmUgT0VCICMweDdmOWQKKyNkZWZpbmUgT1VUQiAjMHg3Zjk3CisjZGVmaW5lIE9FQyAjMHg3ZjllCisjZGVmaW5lIE9VVEMgIzB4N2Y5OAorI2RlZmluZSBQSU5TQyAjMHg3ZjliCisjZGVmaW5lIFBPUlRCQ0ZHICMweDdmOTQKKyNkZWZpbmUgUE9SVENDRkcgIzB4N2Y5NQorI2RlZmluZSBPRUEJIzB4N2Y5YworI2RlZmluZSBJTjA3SVJRICMweDdmYTkKKyNkZWZpbmUgT1VUMDdJUlEgIzB4N2ZhYQorI2RlZmluZSBJTjA3SUVOICMweDdmYWMKKyNkZWZpbmUgT1VUMDdJRU4gIzB4N2ZhZAorI2RlZmluZSBVU0JJUlEgIzB4N2ZhYgorI2RlZmluZSBVU0JJRU4gIzB4N2ZhZQorI2RlZmluZSBVU0JCQVYgIzB4N2ZhZgorI2RlZmluZSBVU0JDUyAjMHg3ZmQ2CisjZGVmaW5lIFNVRFBUUkggIzB4N2ZkNAorI2RlZmluZSBTVURQVFJMICMweDdmZDUKKyNkZWZpbmUgU0VUVVBEQVQgIzB4N2ZlOAorCQkKKwk7OyB1c2IgaW50ZXJydXB0IDogZW5hYmxlIGlzIEVJRS4wICgweGU4KSwgZmxhZyBpcyBFWElGLjQgKDB4OTEpCisKKwkub3JnIDAKKwlsam1wIHN0YXJ0CisJOzsgaW50ZXJydXB0IHZlY3RvcnMKKwkub3JnIDIzSAorCWxqbXAgc2VyaWFsX2ludAorCS5ieXRlIDAKKwkKKwkub3JnIDQzSAorCWxqbXAgVVNCX0p1bXBfVGFibGUKKwkuYnl0ZSAwCQkJOyBmaWxsZWQgaW4gYnkgdGhlIFVTQiBjb3JlCisKKzs7OyBsb2NhbCB2YXJpYWJsZXMuIFRoZXNlIGFyZSBub3QgaW5pdGlhbGl6ZWQgcHJvcGVybHk6IGRvIGl0IGJ5IGhhbmQuCisJLm9yZyAzMEgKK3J4X3JpbmdfaW46CS5ieXRlIDAKK3J4X3Jpbmdfb3V0OgkuYnl0ZSAwCit0eF9yaW5nX2luOgkuYnl0ZSAwCit0eF9yaW5nX291dDoJLmJ5dGUgMAordHhfdW50aHJvdHRsZV90aHJlc2hvbGQ6CS5ieXRlIDAKKwkJCisJLm9yZyAweDEwMEgJCTsgd2FudHMgdG8gYmUgb24gYSBwYWdlIGJvdW5kYXJ5CitVU0JfSnVtcF9UYWJsZToKKwlsam1wCUlTUl9TdWRhdgk7IFNldHVwIERhdGEgQXZhaWxhYmxlCisJLmJ5dGUgMAorCWxqbXAJMAkJOyBTdGFydCBvZiBGcmFtZQorCS5ieXRlIDAKKwlsam1wCTAJCTsgU2V0dXAgRGF0YSBMb2FkaW5nCisJLmJ5dGUgMAorCWxqbXAJMAkJOyBHbG9iYWwgU3VzcGVuZAorCS5ieXRlIAkwCisJbGptcAkwCQk7IFVTQiBSZXNldCAgCQorCS5ieXRlCTAKKwlsam1wCTAJCTsgUmVzZXJ2ZWQKKwkuYnl0ZQkwCisJbGptcAkwCQk7IEVuZCBQb2ludCAwIEluCisJLmJ5dGUJMAorCWxqbXAJMAkJOyBFbmQgUG9pbnQgMCBPdXQKKwkuYnl0ZQkwCisJbGptcAkwCQk7IEVuZCBQb2ludCAxIEluCisJLmJ5dGUJMAorCWxqbXAJMAkJOyBFbmQgUG9pbnQgMSBPdXQKKwkuYnl0ZQkwCisJbGptcAlJU1JfRXAyaW4KKwkuYnl0ZQkwCisJbGptcAlJU1JfRXAyb3V0CisJLmJ5dGUJMAorCisKKwkub3JnIDB4MjAwCisJCQorc3RhcnQ6CW1vdiBTUCxTVEFDSy0xIDsgc2V0IHN0YWNrCisJOzsgY2xlYXIgbG9jYWwgdmFyaWFibGVzCisJY2xyIGEKKwltb3YgdHhfcmluZ19pbiwgYQorCW1vdiB0eF9yaW5nX291dCwgYQorCW1vdiByeF9yaW5nX2luLCBhCisJbW92IHJ4X3Jpbmdfb3V0LCBhCisJbW92IHR4X3VudGhyb3R0bGVfdGhyZXNob2xkLCBhCisJY2xyIFRYX1JVTk5JTkcKKwljbHIgRE9fVFhfVU5USFJPVFRMRQorCQorCTs7IGNsZWFyIGZpZm8gd2l0aCAiZmUiCisJbW92IHIxLCAwCisJbW92IGEsICMweGZlCisJbW92IGRwdHIsICN0eF9yaW5nCitjbGVhcl90eF9yaW5nX2xvb3A6CisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJZGpueiByMSwgY2xlYXJfdHhfcmluZ19sb29wCisKKwltb3YgYSwgIzB4ZmQKKwltb3YgZHB0ciwgI3J4X3JpbmcKK2NsZWFyX3J4X3JpbmdfbG9vcDoKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwlkam56IHIxLCBjbGVhcl9yeF9yaW5nX2xvb3AKKworOzs7IHR1cm4gb24gdGhlIFJTLTIzMiBkcml2ZXIgY2hpcCAoYnJpbmcgdGhlIFNUQU5EQlkgcGluIGxvdykKKzs7OyBvbiBYaXJjb20gdGhlIFNUQU5EQlkgaXMgd2lyZWQgdG8gUEI2IGFuZCBQQzQgCisJbW92IGRwdHIsIFBPUlRCQ0ZHCisgICAgICAgIG1vdiBhLCAjMHhCZgorICAgICAgICBtb3Z4IEBkcHRyLCBhCisJbW92IGRwdHIsIFBPUlRDQ0ZHCisgICAgICAgIG1vdiBhLCAjMHhlZgorICAgICAgICBtb3Z4IEBkcHRyLCBhCisJCisJOzsgc2V0IE9FQy40CisgICAgICAgIG1vdiBhLCAjMHgxMAorICAgICAgICBtb3YgZHB0cixPRUMKKyAgICAgICAgbW92eCBAZHB0cixhCisKKyAgICAgICAgOzsgY2xlYXIgUEM0CisgICAgICAgIG1vdiBhLCAjMHgwMAorICAgICAgICBtb3YgZHB0cixPVVRDCisgICAgICAgIG1vdnggQGRwdHIsYQorCisJOzsgc2V0IE9FQi42CisJbW92IGEsICMweDQwCisJbW92IGRwdHIsT0VCCisJbW92eCBAZHB0cixhCisKKwk7OyBjbGVhciBQQjYKKwltb3YgYSwgIzB4MDAKKwltb3YgZHB0cixPVVRCCisJbW92eCBAZHB0cixhCisKKwk7OyBzZXQgT0VDLlsxN10KKwltb3YgYSwgIzB4ODIKKwltb3YgZHB0cixPRUMKKwltb3Z4IEBkcHRyLGEKKworCisJOzsgc2V0IFBPUlRDQ0ZHLlswMV0gdG8gcm91dGUgVHhEMCxSeEQwIHRvIHNlcmlhbCBwb3J0CisJbW92IGRwdHIsIFBPUlRDQ0ZHCisJbW92IGEsICMweDAzCisJbW92eCBAZHB0ciwgYQorCQorCTs7IHNldCB1cCBpbnRlcnJ1cHRzLCBhdXRvdmVjdG9yaW5nCisJOzsgc2V0IEJLUFQKKwltb3YgZHB0ciwgVVNCQkFWCisJbW92eCBhLEBkcHRyCisJc2V0YiBhY2MuMAkJOyBBVkVOIGJpdCB0byAwCisJbW92eCBAZHB0ciwgYQorCisJbW92IGEsIzB4MDEJCTsgZW5hYmxlIFNVREFWOglzZXR1cCBkYXRhIGF2YWlsYWJsZSAoZm9yIGVwMCkKKwltb3YgZHB0ciwgVVNCSVJRCisJbW92eCBAZHB0ciwgYQkJOyBjbGVhciBTVURBVkkKKwltb3YgZHB0ciwgVVNCSUVOCisJbW92eCBAZHB0ciwgYQorCQorCW1vdiBkcHRyLCBJTjA3SUVOCisJbW92IGEsIzB4MDQJCTsgZW5hYmxlIElOMiBpbnQKKwltb3Z4IEBkcHRyLCBhCisJCisJbW92IGRwdHIsIE9VVDA3SUVOCisJbW92IGEsIzB4MDQJCTsgZW5hYmxlIE9VVDIgaW50CisJbW92eCBAZHB0ciwgYQorCW1vdiBkcHRyLCBPVVQyQkMKKwltb3Z4IEBkcHRyLCBhCQk7IGFybSBPVVQyCisKKzs7CW1vdiBhLCAjMHg4NAkJOyB0dXJuIG9uIFJUUywgRFRSCis7Owltb3YgZHB0cixPVVRDCis7Owltb3Z4IEBkcHRyLCBhCisKKwltb3YgYSwgIzB4NyAgICAgICAgICAgICA7IHR1cm4gb24gIERUUgorICAgICAgICBtb3YgZHB0cixVU0JCQVYKKyAgICAgICAgbW92eCBAZHB0ciwgYQorCisJbW92IGEsICMweDIwICAgICAgICAgICAgIDsgdHVybiBvbiB0aGUgUkVEIGxlZCAKKyAgICAgICAgbW92IGRwdHIsT0VBCisgICAgICAgIG1vdnggQGRwdHIsIGEKKworCW1vdiBhLCAjMHg4MCAgICAgICAgICAgIDsgdHVybiBvbiAgUlRTCisgICAgICAgIG1vdiBkcHRyLE9VVEMKKyAgICAgICAgbW92eCBAZHB0ciwgYQorCisJOzsgc2V0dXAgdGhlIHNlcmlhbCBwb3J0LiA5NjAwIDhOMS4KKwltb3YgYSwjMHg1MwkJOyBtb2RlIDEsIGVuYWJsZSByeCwgY2xlYXIgaW50CisJbW92IFNDT04sIGEKKwk7OyAgdXNpbmcgdGltZXIyLCBpbiAxNi1iaXQgYmF1ZC1yYXRlLWdlbmVyYXRvciBtb2RlCisJOzsgICAoeHRhbCAxMk1IeiwgaW50ZXJuYWwgZm9zYyAyNE1IeikKKwk7OyAgUkNBUDJILFJDQVAyTCA9IDY1NTM2IC0gZm9zYy8oMzIqYmF1ZCkKKwk7OyAgNTc2MDA6IDB4RkZGMi5GLCBzYXkgMHhGRkYzCisJOzsgICA5NjAwOiAweEZGQjEuRSwgc2F5IDB4RkZCMgorCTs7ICAgIDMwMDogMHhGNjNDCisjZGVmaW5lIEJBVUQgOTYwMAorI2RlZmluZSBCQVVEX1RJTUVPVVQocmF0ZSkgKDY1NTM2IC0gKDI0ICogMTAwMCAqIDEwMDApIC8gKDMyICogcmF0ZSkpCisjZGVmaW5lIEJBVURfSElHSChyYXRlKSBISUdIKEJBVURfVElNRU9VVChyYXRlKSkKKyNkZWZpbmUgQkFVRF9MT1cocmF0ZSkgTE9XKEJBVURfVElNRU9VVChyYXRlKSkKKwkJCisJbW92IFQyQ09OLCAjMDMwaAk7IHJjbGs9MSx0Y2xrPTEsY3A9MCx0cjI9MChlbmFibGUgbGF0ZXIpCisJbW92IHIzLCAjNQorCWFjYWxsIHNldF9iYXVkCisJc2V0YiBUUjIKKwltb3YgU0NPTiwgIzA1MGgKKwkKKyNpZiAwCisJbW92IHIxLCAjMHg0MAorCW1vdiBhLCAjMHg0MQorc2VuZDoJCisJbW92IFNCVUYsIGEKKwlpbmMgYQorCWFubCBhLCAjMHgzRgorCW9ybCBhLCAjMHg0MAorOwl4cmwgYSwgIzB4MDIKK3dhaXQxOgkKKwlqbmIgVEksIHdhaXQxCisJY2xyIFRJCisJZGpueiByMSwgc2VuZAorO2RvbmU6CXNqbXAgZG9uZQorCisjZW5kaWYKKwkKKwlzZXRiIEVVU0IKKwlzZXRiIEVBCisJc2V0YiBFUzAKKwk7YWNhbGwgZHVtcF9zdGF0CisKKwk7OyBoZXksIHdoYXQgc2F5IHdlIFJFTlVNRVJBVEUhIChUUk0gcC42MikKKwltb3YgYSwgIzAKKwltb3YgZHBzLCBhCisJbW92IGRwdHIsIFVTQkNTCisJbW92IGEsICMweDAyCQk7IERJU0NPTj0wLCBESVNDT0U9MCwgUkVOVU09MQorCW1vdnggQGRwdHIsIGEKKwk7OyBub3cgcHJlc2VuY2UgcGluIGlzIGZsb2F0aW5nLCBzaW11bGF0aW5nIGRpc2Nvbm5lY3QuIHdhaXQgMC41cworCW1vdiByMSwgIzQ2CityZW51bV93YWl0MToKKwltb3YgcjIsICMwCityZW51bV93YWl0MjoKKwltb3YgcjMsICMwCityZW51bV93YWl0MzoKKwlkam56IHIzLCByZW51bV93YWl0MworCWRqbnogcjIsIHJlbnVtX3dhaXQyCisJZGpueiByMSwgcmVudW1fd2FpdDEJOyB3YWl0IGFib3V0IG4qKDI1Nl4yKSA2TUh6IGNsb2NrcworCW1vdiBhLCAjMHgwNgkJOyBESVNDT049MCwgRElTQ09FPTEsIFJFTlVNPTEKKwltb3Z4IEBkcHRyLCBhCisJOzsgd2UgYXJlIGJhY2sgb25saW5lLiB0aGUgaG9zdCBkZXZpY2Ugd2lsbCBub3cgcmUtcXVlcnkgdXMKKwkKKwkKK21haW46CXNqbXAgbWFpbgorCisJCisKK0lTUl9TdWRhdjoKKwlwdXNoIGRwcworCXB1c2ggZHBsCisJcHVzaCBkcGgKKwlwdXNoIGRwbDEKKwlwdXNoIGRwaDEKKwlwdXNoIGFjYworCW1vdiBhLEVYSUYKKwljbHIgYWNjLjQKKwltb3YgRVhJRixhCQk7IGNsZWFyIElOVDIgZmlyc3QKKwltb3YgZHB0ciwgVVNCSVJRCTsgY2xlYXIgVVNCIGludAorCW1vdiBhLCMwMWgKKwltb3Z4IEBkcHRyLGEKKworCTs7IGdldCByZXF1ZXN0IHR5cGUKKwltb3YgZHB0ciwgU0VUVVBEQVQKKwltb3Z4IGEsIEBkcHRyCisJbW92IHIxLCBhCQk7IHIxID0gYm1SZXF1ZXN0VHlwZQorCWluYyBkcHRyCisJbW92eCBhLCBAZHB0cgorCW1vdiByMiwgYQkJOyByMiA9IGJSZXF1ZXN0CisJaW5jIGRwdHIKKwltb3Z4IGEsIEBkcHRyCisJbW92IHIzLCBhCQk7IHIzID0gd1ZhbHVlTAorCWluYyBkcHRyCisJbW92eCBhLCBAZHB0cgorCW1vdiByNCwgYQkJOyByNCA9IHdWYWx1ZUgKKworCTs7IG1haW4gc3dpdGNoIG9uIGJtUmVxdWVzdC50eXBlOiBzdGFuZGFyZCBvciB2ZW5kb3IKKwltb3YgYSwgcjEKKwlhbmwgYSwgIzB4NjAKKwljam5lIGEsICMweDAwLCBzZXR1cF9ibXJlcV90eXBlX25vdF9zdGFuZGFyZAorCTs7IHN0YW5kYXJkIHJlcXVlc3Q6IG5vdyBtYWluIHN3aXRjaCBpcyBvbiBiUmVxdWVzdAorCWxqbXAgc2V0dXBfYm1yZXFfaXNfc3RhbmRhcmQKKwkKK3NldHVwX2JtcmVxX3R5cGVfbm90X3N0YW5kYXJkOgkKKwk7OyBhIHN0aWxsIGhhcyBibXJlcSYweDYwCisJY2puZSBhLCAjMHg0MCwgc2V0dXBfYm1yZXFfdHlwZV9ub3RfdmVuZG9yCisJOzsgQW5jaG9yIHJlc2VydmVzIGJSZXF1ZXN0IDB4YTAtMHhhZiwgd2UgdXNlIHNtYWxsIG9uZXMKKwk7OyBzd2l0Y2ggb24gYlJlcXVlc3QuIGJtUmVxdWVzdCB3aWxsIGFsd2F5cyBiZSAweDQxIG9yIDB4YzEKKwljam5lIHIyLCAjMHgwMCwgc2V0dXBfY3RybF9ub3RfMDAKKwk7OyAwMCBpcyBzZXQgYmF1ZCwgd1ZhbHVlWzBdIGhhcyBiYXVkIHJhdGUgaW5kZXgKKwlsY2FsbCBzZXRfYmF1ZAkJOyBpbmRleCBpbiByMywgY2Fycnkgc2V0IGlmIGVycm9yCisJamMgc2V0dXBfYm1yZXFfdHlwZV9ub3Rfc3RhbmRhcmRfX2RvX3N0YWxsCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfYm1yZXFfdHlwZV9ub3Rfc3RhbmRhcmRfX2RvX3N0YWxsOgorCWxqbXAgc2V0dXBfc3RhbGwKK3NldHVwX2N0cmxfbm90XzAwOgorCWNqbmUgcjIsICMweDAxLCBzZXR1cF9jdHJsX25vdF8wMQorCTs7IDAxIGlzIHJlc2VydmVkIGZvciBzZXQgYml0cyAocGFyaXR5KS4gVE9ETworCWxqbXAgc2V0dXBfc3RhbGwKK3NldHVwX2N0cmxfbm90XzAxOgorCWNqbmUgcjIsICMweDAyLCBzZXR1cF9jdHJsX25vdF8wMgorCTs7IDAyIGlzIHNldCBIVyBmbG93IGNvbnRyb2wuIFRPRE8KKwlsam1wIHNldHVwX3N0YWxsCitzZXR1cF9jdHJsX25vdF8wMjoKKwljam5lIHIyLCAjMHgwMywgc2V0dXBfY3RybF9ub3RfMDMKKwk7OyAwMyBpcyBjb250cm9sIHBpbnMgKFJUUywgRFRSKS4KKwlsam1wIGNvbnRyb2xfcGlucwk7IHdpbGwganVtcCB0byBzZXR1cF9kb25lX2FjaywKKwkJCQk7ICBvciBzZXR1cF9yZXR1cm5fb25lX2J5dGUKK3NldHVwX2N0cmxfbm90XzAzOgorCWNqbmUgcjIsICMweDA0LCBzZXR1cF9jdHJsX25vdF8wNAorCTs7IDA0IGlzIHNlbmQgYnJlYWsgKHJlYWxseSAidHVybiBicmVhayBvbi9vZmYiKS4gVE9ETworCWNqbmUgcjMsICMweDAwLCBzZXR1cF9jdHJsX2RvX2JyZWFrX29uCisJOzsgZG8gYnJlYWsgb2ZmOiByZXN0b3JlIFBPUlRDQ0ZHLjEgdG8gcmVjb25uZWN0IFR4RDAgdG8gc2VyaWFsIHBvcnQKKwltb3YgZHB0ciwgUE9SVENDRkcKKwltb3Z4IGEsIEBkcHRyCisJb3JsIGEsICMweDAyCisJbW92eCBAZHB0ciwgYQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX2N0cmxfZG9fYnJlYWtfb246CisJOzsgZG8gYnJlYWsgb246IGNsZWFyIFBPUlRDQ0ZHLjAsIHNldCBUeEQgaGlnaCg/KSAoYjEgbG93KQorCW1vdiBkcHRyLCBPVVRDCisJbW92eCBhLCBAZHB0cgorCWFubCBhLCAjMHhmZAkJOyB+MHgwMgorCW1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgUE9SVENDRkcKKwltb3Z4IGEsIEBkcHRyCisJYW5sIGEsICMweGZkCQk7IH4weDAyCisJbW92eCBAZHB0ciwgYQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX2N0cmxfbm90XzA0OgorCWNqbmUgcjIsICMweDA1LCBzZXR1cF9jdHJsX25vdF8wNQorCTs7IDA1IGlzIHNldCBkZXNpcmVkIGludGVycnVwdCBiaXRtYXAuIFRPRE8KKwlsam1wIHNldHVwX3N0YWxsCitzZXR1cF9jdHJsX25vdF8wNToKKwljam5lIHIyLCAjMHgwNiwgc2V0dXBfY3RybF9ub3RfMDYKKwk7OyAwNiBpcyBxdWVyeSByb29tCisJY2puZSByMywgIzB4MDAsIHNldHVwX2N0cmxfMDZfbm90XzAwCisJOzsgMDYsIHdWYWx1ZVswXT0wIGlzIHF1ZXJ5IHdyaXRlX3Jvb20KKwltb3YgYSwgdHhfcmluZ19vdXQKKwlzZXRiIGMKKwlzdWJiIGEsIHR4X3JpbmdfaW4JOyBvdXQtMS1pbiA9IDI1NSAtIChpbi1vdXQpCisJbGptcCBzZXR1cF9yZXR1cm5fb25lX2J5dGUKK3NldHVwX2N0cmxfMDZfbm90XzAwOgorCWNqbmUgcjMsICMweDAxLCBzZXR1cF9jdHJsXzA2X25vdF8wMQorCTs7IDA2LCB3VmFsdWVbMF09MSBpcyBxdWVyeSBjaGFyc19pbl9idWZmZXIKKwltb3YgYSwgdHhfcmluZ19pbgorCWNsciBjCisJc3ViYiBhLCB0eF9yaW5nX291dAk7IGluLW91dAorCWxqbXAgc2V0dXBfcmV0dXJuX29uZV9ieXRlCitzZXR1cF9jdHJsXzA2X25vdF8wMToJCisJbGptcCBzZXR1cF9zdGFsbAorc2V0dXBfY3RybF9ub3RfMDY6CisJY2puZSByMiwgIzB4MDcsIHNldHVwX2N0cmxfbm90XzA3CisJOzsgMDcgaXMgcmVxdWVzdCB0eCB1bnRocm90dGxlIGludGVycnVwdAorCW1vdiB0eF91bnRocm90dGxlX3RocmVzaG9sZCwgcjM7IHdWYWx1ZVswXSBpcyB0aHJlc2hvbGQgdmFsdWUKKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9jdHJsX25vdF8wNzoKKwlsam1wIHNldHVwX3N0YWxsCisJCitzZXR1cF9ibXJlcV90eXBlX25vdF92ZW5kb3I6CisJbGptcCBzZXR1cF9zdGFsbAorCisKK3NldHVwX2JtcmVxX2lzX3N0YW5kYXJkOgkKKwljam5lIHIyLCAjMHgwMCwgc2V0dXBfYnJlcV9ub3RfMDAKKwk7OyAwMDoJR2V0X1N0YXR1cyAoc3ViLXN3aXRjaCBvbiBibVJlcXVlc3RUeXBlOiBkZXZpY2UsIGVwLCBpbnQpCisJY2puZSByMSwgIzB4ODAsIHNldHVwX0dldF9TdGF0dXNfbm90X2RldmljZQorCTs7IEdldF9TdGF0dXMoZGV2aWNlKQorCTs7ICBhcmUgd2Ugc2VsZi1wb3dlcmVkPyBuby4gY2FuIHdlIGRvIHJlbW90ZSB3YWtldXA/IG5vCisJOzsgICBzbyByZXR1cm4gdHdvIHplcm8gYnl0ZXMuIFRoaXMgaXMgcmV1c2FibGUKK3NldHVwX3JldHVybl90d29femVyb19ieXRlczoKKwltb3YgZHB0ciwgSU4wQlVGCisJY2xyIGEKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwltb3Z4IEBkcHRyLCBhCisJbW92IGRwdHIsIElOMEJDCisJbW92IGEsICMyCisJbW92eCBAZHB0ciwgYQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX0dldF9TdGF0dXNfbm90X2RldmljZToKKwljam5lIHIxLCAjMHg4Miwgc2V0dXBfR2V0X1N0YXR1c19ub3RfZW5kcG9pbnQKKwk7OyBHZXRfU3RhdHVzKGVuZHBvaW50KQorCTs7ICBtdXN0IGdldCBzdGFsbCBiaXQgZm9yIGVwW3dJbmRleExdLCByZXR1cm4gdHdvIGJ5dGVzLCBiaXQgaW4gbHNiIDAKKwk7OyBmb3Igbm93OiBjaGVhdC4gVE9ETworCXNqbXAgc2V0dXBfcmV0dXJuX3R3b196ZXJvX2J5dGVzCitzZXR1cF9HZXRfU3RhdHVzX25vdF9lbmRwb2ludDoKKwljam5lIHIxLCAjMHg4MSwgc2V0dXBfR2V0X1N0YXR1c19ub3RfaW50ZXJmYWNlCisJOzsgR2V0X1N0YXR1cyhpbnRlcmZhY2UpOiByZXR1cm4gdHdvIHplcm9zCisJc2ptcCBzZXR1cF9yZXR1cm5fdHdvX3plcm9fYnl0ZXMKK3NldHVwX0dldF9TdGF0dXNfbm90X2ludGVyZmFjZToJCisJbGptcCBzZXR1cF9zdGFsbAorCQorc2V0dXBfYnJlcV9ub3RfMDA6CisJY2puZSByMiwgIzB4MDEsIHNldHVwX2JyZXFfbm90XzAxCisJOzsgMDE6CUNsZWFyX0ZlYXR1cmUgKHN1Yi1zd2l0Y2ggb24gd1ZhbHVlTDogc3RhbGwsIHJlbW90ZSB3YWtldXApCisJY2puZSByMywgIzB4MDAsIHNldHVwX0NsZWFyX0ZlYXR1cmVfbm90X3N0YWxsCisJOzsgQ2xlYXJfRmVhdHVyZShzdGFsbCkuIHNob3VsZCBjbGVhciBhIHN0YWxsIGJpdC4gVE9ETworCWxqbXAgc2V0dXBfc3RhbGwKK3NldHVwX0NsZWFyX0ZlYXR1cmVfbm90X3N0YWxsOgorCWNqbmUgcjMsICMweDAxLCBzZXR1cF9DbGVhcl9GZWF0dXJlX25vdF9yd2FrZQorCTs7IENsZWFyX0ZlYXR1cmUocmVtb3RlIHdha2V1cCkuIGlnbm9yZWQuCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfQ2xlYXJfRmVhdHVyZV9ub3Rfcndha2U6CisJbGptcCBzZXR1cF9zdGFsbAorCQorc2V0dXBfYnJlcV9ub3RfMDE6CisJY2puZSByMiwgIzB4MDMsIHNldHVwX2JyZXFfbm90XzAzCisJOzsgMDM6CVNldF9GZWF0dXJlIChzdWItc3dpdGNoIG9uIHdWYWx1ZUw6IHN0YWxsLCByZW1vdGUgd2FrZXVwKQorCWNqbmUgcjMsICMweDAwLCBzZXR1cF9TZXRfRmVhdHVyZV9ub3Rfc3RhbGwKKwk7OyBTZXRfRmVhdHVyZShzdGFsbCkuIFNob3VsZCBzZXQgYSBzdGFsbCBiaXQuIFRPRE8KKwlsam1wIHNldHVwX3N0YWxsCitzZXR1cF9TZXRfRmVhdHVyZV9ub3Rfc3RhbGw6CisJY2puZSByMywgIzB4MDEsIHNldHVwX1NldF9GZWF0dXJlX25vdF9yd2FrZQorCTs7IFNldF9GZWF0dXJlKHJlbW90ZSB3YWtldXApLiBpZ25vcmVkLgorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX1NldF9GZWF0dXJlX25vdF9yd2FrZToKKwlsam1wIHNldHVwX3N0YWxsCisJCitzZXR1cF9icmVxX25vdF8wMzoJCisJY2puZSByMiwgIzB4MDYsIHNldHVwX2JyZXFfbm90XzA2CisJOzsgMDY6CUdldF9EZXNjcmlwdG9yIChzLXN3aXRjaCBvbiB3VmFsdWVIOiBkZXYsIGNvbmZpZ1tuXSwgc3RyaW5nW25dKQorCWNqbmUgcjQsICMweDAxLCBzZXR1cF9HZXRfRGVzY3JpcHRvcl9ub3RfZGV2aWNlCisJOzsgR2V0X0Rlc2NyaXB0b3IoZGV2aWNlKQorCW1vdiBkcHRyLCBTVURQVFJICisJbW92IGEsICNISUdIKGRlc2NfZGV2aWNlKQorCW1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgU1VEUFRSTAorCW1vdiBhLCAjTE9XKGRlc2NfZGV2aWNlKQorCW1vdnggQGRwdHIsIGEKKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9HZXRfRGVzY3JpcHRvcl9ub3RfZGV2aWNlOgorCWNqbmUgcjQsICMweDAyLCBzZXR1cF9HZXRfRGVzY3JpcHRvcl9ub3RfY29uZmlnCisJOzsgR2V0X0Rlc2NyaXB0b3IoY29uZmlnW25dKQorCWNqbmUgcjMsICMweDAwLCBzZXR1cF9zdGFsbDsgb25seSBoYW5kbGUgbj09MAorCTs7IEdldF9EZXNjcmlwdG9yKGNvbmZpZ1swXSkKKwltb3YgZHB0ciwgU1VEUFRSSAorCW1vdiBhLCAjSElHSChkZXNjX2NvbmZpZzEpCisJbW92eCBAZHB0ciwgYQorCW1vdiBkcHRyLCBTVURQVFJMCisJbW92IGEsICNMT1coZGVzY19jb25maWcxKQorCW1vdnggQGRwdHIsIGEKKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9HZXRfRGVzY3JpcHRvcl9ub3RfY29uZmlnOgorCWNqbmUgcjQsICMweDAzLCBzZXR1cF9HZXRfRGVzY3JpcHRvcl9ub3Rfc3RyaW5nCisJOzsgR2V0X0Rlc2NyaXB0b3Ioc3RyaW5nW3dWYWx1ZUxdKQorCTs7ICBpZiAod1ZhbHVlTCA+PSBtYXhzdHJpbmdzKSBzdGFsbAorCW1vdiBhLCAjKChkZXNjX3N0cmluZ3NfZW5kLWRlc2Nfc3RyaW5ncykvMikKKwljbHIgYworCXN1YmIgYSxyMwkJOyBhPTQsIHIzID0gMC4uMyAuIGlmIGE8PTAgdGhlbiBzdGFsbAorCWpjICBzZXR1cF9zdGFsbAorCWp6ICBzZXR1cF9zdGFsbAorCW1vdiBhLCByMworCWFkZCBhLCByMwkJOyBhID0gMip3VmFsdWVMCisJbW92IGRwdHIsICNkZXNjX3N0cmluZ3MKKwlhZGQgYSwgZHBsCisJbW92IGRwbCwgYQorCW1vdiBhLCAjMAorCWFkZGMgYSwgZHBoCisJbW92IGRwaCwgYQkJOyBkcGggPSBkZXNjX3N0cmluZ3NbYV0uIGJpZyBlbmRpYW4hIChoYW5keSkKKwk7OyBpdCBsb29rcyBsaWtlIG15IGFkYXB0ZXIgdXNlcyBhIHJldmlzaW9uIG9mIHRoZSBFWlVTQiB0aGF0CisJOzsgY29udGFpbnMgInJldiBEIGVycmF0YSBudW1iZXIgOCIsIGFzIGhpbnRlZCBpbiB0aGUgRXpVU0IgZXhhbXBsZQorCTs7IGNvZGUuIEkgY2Fubm90IGZpbmQgYW4gYWN0dWFsIGVycmF0YSBkZXNjcmlwdGlvbiBvbiB0aGUgQ3lwcmVzcworCTs7IHdlYiBzaXRlLCBidXQgZnJvbSB0aGUgZXhhbXBsZSBjb2RlIGl0IGxvb2tzIGxpa2UgdGhpcyBidWcgY2F1c2VzCisJOzsgdGhlIGxlbmd0aCBvZiBzdHJpbmcgZGVzY3JpcHRvcnMgdG8gYmUgcmVhZCBpbmNvcnJlY3RseSwgcG9zc2libHkKKwk7OyBzZW5kaW5nIGJhY2sgbW9yZSBjaGFyYWN0ZXJzIHRoYW4gdGhlIGRlc2NyaXB0b3IgaGFzLiBUaGUgd29ya2Fyb3VuZAorCTs7IGlzIHRvIG1hbnVhbGx5IHNlbmQgb3V0IGFsbCBvZiB0aGUgZGF0YS4gVGhlIGNvbnNlcXVlbmNlIG9mIG5vdAorCTs7IHVzaW5nIHRoZSB3b3JrYXJvdW5kIGlzIHRoYXQgdGhlIHN0cmluZ3MgZ2F0aGVyZWQgYnkgdGhlIGtlcm5lbAorCTs7IGRyaXZlciBhcmUgdG9vIGxvbmcgYW5kIGFyZSBmaWxsZWQgd2l0aCB0cmFpbGluZyBnYXJiYWdlIChpbmNsdWRpbmcKKwk7OyBsZWZ0b3ZlciBzdHJpbmdzKS4gV3JpdGluZyB0aGlzIG91dCBieSBoYW5kIGlzIGEgbnVpc2FuY2UsIHNvIGZvcgorCTs7IG5vdyBJIHdpbGwganVzdCBsaXZlIHdpdGggdGhlIGJ1Zy4KKwltb3Z4IGEsIEBkcHRyCisJbW92IHIxLCBhCisJaW5jIGRwdHIKKwltb3Z4IGEsIEBkcHRyCisJbW92IHIyLCBhCisJbW92IGRwdHIsIFNVRFBUUkgKKwltb3YgYSwgcjEKKwltb3Z4IEBkcHRyLCBhCisJbW92IGRwdHIsIFNVRFBUUkwKKwltb3YgYSwgcjIKKwltb3Z4IEBkcHRyLCBhCisJOzsgZG9uZQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKKwkKK3NldHVwX0dldF9EZXNjcmlwdG9yX25vdF9zdHJpbmc6CisJbGptcCBzZXR1cF9zdGFsbAorCQorc2V0dXBfYnJlcV9ub3RfMDY6CisJY2puZSByMiwgIzB4MDgsIHNldHVwX2JyZXFfbm90XzA4CisJOzsgR2V0X0NvbmZpZ3VyYXRpb24uIGFsd2F5cyAxLiByZXR1cm4gb25lIGJ5dGUuCisJOzsgdGhpcyBpcyByZXVzYWJsZQorCW1vdiBhLCAjMQorc2V0dXBfcmV0dXJuX29uZV9ieXRlOgkKKwltb3YgZHB0ciwgSU4wQlVGCisJbW92eCBAZHB0ciwgYQorCW1vdiBhLCAjMQorCW1vdiBkcHRyLCBJTjBCQworCW1vdnggQGRwdHIsIGEKKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9icmVxX25vdF8wODoKKwljam5lIHIyLCAjMHgwOSwgc2V0dXBfYnJlcV9ub3RfMDkKKwk7OyAwOTogU2V0X0NvbmZpZ3VyYXRpb24uIGlnbm9yZWQuCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfYnJlcV9ub3RfMDk6CisJY2puZSByMiwgIzB4MGEsIHNldHVwX2JyZXFfbm90XzBhCisJOzsgMGE6IEdldF9JbnRlcmZhY2UuIGdldCB0aGUgY3VycmVudCBhbHRzZXR0aW5nIGZvciBpbnRbd0luZGV4TF0KKwk7OyAgc2luY2Ugd2Ugb25seSBoYXZlIG9uZSBpbnRlcmZhY2UsIGlnbm9yZSB3SW5kZXhMLCByZXR1cm4gYSAwCisJbW92IGEsICMwCisJbGptcCBzZXR1cF9yZXR1cm5fb25lX2J5dGUKK3NldHVwX2JyZXFfbm90XzBhOgorCWNqbmUgcjIsICMweDBiLCBzZXR1cF9icmVxX25vdF8wYgorCTs7IDBiOiBTZXRfSW50ZXJmYWNlLiBzZXQgYWx0c2V0dGluZyBmb3IgaW50ZXJmYWNlW3dJbmRleExdLiBpZ25vcmVkCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfYnJlcV9ub3RfMGI6CisJbGptcCBzZXR1cF9zdGFsbAorCisJCQorc2V0dXBfZG9uZV9hY2s6CQorCTs7IG5vdyBjbGVhciBIU05BSworCW1vdiBkcHRyLCBFUDBDUworCW1vdiBhLCAjMHgwMgorCW1vdnggQGRwdHIsIGEKKwlzam1wIHNldHVwX2RvbmUKK3NldHVwX3N0YWxsOgkKKwk7OyB1bmhhbmRsZWQuIFNUQUxMCisJO0VQMENTIHw9IGJtRVBTVEFMTAorCW1vdiBkcHRyLCBFUDBDUworCW1vdnggYSwgQGRwdHIKKwlvcmwgYSwgRVAwU1RBTExiaXQKKwltb3Z4IEBkcHRyLCBhCisJc2ptcCBzZXR1cF9kb25lCisJCitzZXR1cF9kb25lOgkKKwlwb3AgYWNjCisJcG9wIGRwaDEKKwlwb3AgZHBsMQorCXBvcCBkcGgKKwlwb3AgZHBsCisJcG9wIGRwcworCXJldGkKKworOzs7ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCitzZXRfYmF1ZDoJCQk7IGJhdWQgaW5kZXggaW4gcjMKKwk7OyB2ZXJpZnkgYSA8IDEwCisJbW92IGEsIHIzCisJamIgQUNDLjcsIHNldF9iYXVkX19iYWRiYXVkCisJY2xyIGMKKwlzdWJiIGEsICMxMAorCWpuYyBzZXRfYmF1ZF9fYmFkYmF1ZAorCW1vdiBhLCByMworCXJsIGEJCQk7IGEgPSBpbmRleCoyCisJYWRkIGEsICNMT1coYmF1ZF90YWJsZSkKKwltb3YgZHBsLCBhCisJbW92IGEsICNISUdIKGJhdWRfdGFibGUpCisJYWRkYyBhLCAjMAorCW1vdiBkcGgsIGEKKwk7OyBUT0RPOiBzaHV0IGRvd24geG1pdC9yZWNlaXZlCisJOzsgVE9ETzogd2FpdCBmb3IgY3VycmVudCB4bWl0IGNoYXIgdG8gbGVhdmUKKwk7OyBUT0RPOiBzaHV0IGRvd24gdGltZXIgdG8gYXZvaWQgcGFydGlhbC1jaGFyIGdsaXRjaAorCW1vdnggYSxAZHB0cgkJOyBCQVVEX0hJR0gKKwltb3YgUkNBUDJILCBhCisJbW92IFRIMiwgYQorCWluYyBkcHRyCisJbW92eCBhLEBkcHRyCQk7IEJBVURfTE9XCisJbW92IFJDQVAyTCwgYQorCW1vdiBUTDIsIGEKKwk7OyBUT0RPOiByZXN0YXJ0IHhtaXQvcmVjZWl2ZQorCTs7IFRPRE86IHJlZW5hYmxlIGludGVycnVwdHMsIHJlc3VtZSB0eCBpZiBwZW5kaW5nCisJY2xyIGMJCQk7IGM9MDogc3VjY2VzcworCXJldAorc2V0X2JhdWRfX2JhZGJhdWQ6CisJc2V0YiBjCQkJOyBjPTE6IGZhaWx1cmUKKwlyZXQKKwkKKzs7OyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorY29udHJvbF9waW5zOgorCWNqbmUgcjEsICMweDQxLCBjb250cm9sX3BpbnNfaW4KK2NvbnRyb2xfcGluc19vdXQ6CisJCTtUT0RPIEJLUFQgaXMgRFRSCisJbW92IGEsIHIzIDsgd1ZhbHVlWzBdIGhvbGRzIG5ldyBiaXRzOgliNyBpcyBuZXcgUlRTCisJeHJsIGEsICMweGZmCQk7IDEgbWVhbnMgYWN0aXZlLCAwViwgKzEyViA/CisJYW5sIGEsICMweDgwCisJbW92IHIzLCBhCisJbW92IGRwdHIsIE9VVEMKKwltb3Z4IGEsIEBkcHRyCQk7IG9ubHkgY2hhbmdlIGJpdCA3IAorCWFubCBhLCAjMHg3RgkJOyB+MHg4NAorCW9ybCBhLCByMworCW1vdnggQGRwdHIsIGEJCTsgb3RoZXIgcGlucyBhcmUgaW5wdXRzLCBiaXRzIGlnbm9yZWQKKwlsam1wIHNldHVwX2RvbmVfYWNrCitjb250cm9sX3BpbnNfaW46CisJbW92IGRwdHIsIFBJTlNDCisJbW92eCBhLCBAZHB0cgorCXhybCBhLCAjMHhmZgorCWxqbXAgc2V0dXBfcmV0dXJuX29uZV9ieXRlCisKKzs7OyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCitJU1JfRXAyaW46CisJcHVzaCBkcHMKKwlwdXNoIGRwbAorCXB1c2ggZHBoCisJcHVzaCBkcGwxCisJcHVzaCBkcGgxCisJcHVzaCBhY2MKKwltb3YgYSxFWElGCisJY2xyIGFjYy40CisJbW92IEVYSUYsYQkJOyBjbGVhciBJTlQyIGZpcnN0CisJbW92IGRwdHIsIElOMDdJUlEJOyBjbGVhciBVU0IgaW50CisJbW92IGEsIzA0aAorCW1vdnggQGRwdHIsYQorCisJbW92IGEsICMweDIwICAgICAgICAgICAgIDsgVHVybiBvZmYgdGhlIGdyZWVuIExFRAorICAgICAgICBtb3YgZHB0cixPRUEKKyAgICAgICAgbW92eCBAZHB0ciwgYQorCisKKwk7OyBkbyBzdHVmZgorCWxjYWxsIHN0YXJ0X2luCisKKwltb3YgYSwgIzB4MjAgICAgICAgICAgICAgOyBUdXJuIG9mZiB0aGUgZ3JlZW4gTEVECisgICAgICAgIG1vdiBkcHRyLE9FQQorICAgICAgICBtb3Z4IEBkcHRyLCBhCisKKworCQorCXBvcCBhY2MKKwlwb3AgZHBoMQorCXBvcCBkcGwxCisJcG9wIGRwaAorCXBvcCBkcGwKKwlwb3AgZHBzCisJcmV0aQorCitJU1JfRXAyb3V0OgorCXB1c2ggZHBzCisJcHVzaCBkcGwKKwlwdXNoIGRwaAorCXB1c2ggZHBsMQorCXB1c2ggZHBoMQorCXB1c2ggYWNjCisKKyAgICAgICAgbW92IGEsICMweDEwICAgICAgICAgICAgIDsgVHVybiB0aGUgZ3JlZW4gTEVECisgICAgICAgIG1vdiBkcHRyLE9FQQorICAgICAgICBtb3Z4IEBkcHRyLCBhCisKKworCisJbW92IGEsRVhJRgorCWNsciBhY2MuNAorCW1vdiBFWElGLGEJCTsgY2xlYXIgSU5UMiBmaXJzdAorCW1vdiBkcHRyLCBPVVQwN0lSUQk7IGNsZWFyIFVTQiBpbnQKKwltb3YgYSwjMDRoCisJbW92eCBAZHB0cixhCisKKwk7OyBkbyBzdHVmZgorCisJOzsgY29weSBkYXRhIGludG8gYnVmZmVyLiBmb3Igbm93LCBhc3N1bWUgd2Ugd2lsbCBoYXZlIGVub3VnaCBzcGFjZQorCW1vdiBkcHRyLCBPVVQyQkMJOyBnZXQgYnl0ZSBjb3VudAorCW1vdnggYSxAZHB0cgorCW1vdiByMSwgYQorCWNsciBhCisJbW92IGRwcywgYQorCW1vdiBkcHRyLCBPVVQyQlVGCTsgbG9hZCBEUFRSMCB3aXRoIHNvdXJjZQorCW1vdiBkcGgxLCAjSElHSCh0eF9yaW5nKQk7IGxvYWQgRFBUUjEgd2l0aCB0YXJnZXQKKwltb3YgZHBsMSwgdHhfcmluZ19pbgorT1VUX2xvb3A6CisJbW92eCBhLEBkcHRyCQk7IHJlYWQKKwlpbmMgZHBzCQkJOyBzd2l0Y2ggdG8gRFBUUjE6IHRhcmdldAorCWluYyBkcGwxCQk7IHRhcmdldCA9IHR4X3JpbmdfaW4rMQorCW1vdnggQGRwdHIsYQkJOyBzdG9yZQorCW1vdiBhLGRwbDEKKwljam5lIGEsIHR4X3Jpbmdfb3V0LCBPVVRfbm9fb3ZlcmZsb3cKKwlzam1wIE9VVF9vdmVyZmxvdworT1VUX25vX292ZXJmbG93OgkKKwlpbmMgdHhfcmluZ19pbgkJOyB0eF9yaW5nX2luKysKKwlpbmMgZHBzCQkJOyBzd2l0Y2ggdG8gRFBUUjA6IHNvdXJjZQorCWluYyBkcHRyCisJZGpueiByMSwgT1VUX2xvb3AKKwlzam1wIE9VVF9kb25lCitPVVRfb3ZlcmZsb3c6CisJOzsgc2lnbmFsIG92ZXJmbG93CisJOzsgZmFsbCB0aHJvdWdoCitPVVRfZG9uZToJCisJOzsgYWNrCisJbW92IGRwdHIsT1VUMkJDCisJbW92eCBAZHB0cixhCisKKwk7OyBzdGFydCB0eAorCWFjYWxsIG1heWJlX3N0YXJ0X3R4CisJO2FjYWxsIGR1bXBfc3RhdAorCisgICAgICAgIG1vdiBhLCAjMHgyMCAgICAgICAgICAgICA7IFR1cm4gb2ZmIHRoZSBncmVlbiBMRUQKKyAgICAgICAgbW92IGRwdHIsT0VBCisgICAgICAgIG1vdnggQGRwdHIsIGEKKwkKKwlwb3AgYWNjCisJcG9wIGRwaDEKKwlwb3AgZHBsMQorCXBvcCBkcGgKKwlwb3AgZHBsCisJcG9wIGRwcworCXJldGkKKworZHVtcF9zdGF0OgorCTs7IGZpbGwgaW4gRVA0aW4gd2l0aCBhIGRlYnVnZ2luZyBtZXNzYWdlOgorCTs7ICAgdHhfcmluZ19pbiwgdHhfcmluZ19vdXQsIHJ4X3JpbmdfaW4sIHJ4X3Jpbmdfb3V0CisJOzsgICB0eF9hY3RpdmUKKwk7OyAgIHR4X3JpbmdbMC4uMTVdCisJOzsgICAweGZjCisJOzsgICByeF9yaW5nWzAuLjE1XQorCWNsciBhCisJbW92IGRwcywgYQorCQorCW1vdiBkcHRyLCBJTjRDUworCW1vdnggYSwgQGRwdHIKKwlqYiBhY2MuMSwgZHVtcF9zdGF0X19kb25lOyBidXN5OiBjYW5ub3QgZHVtcCwgb2xkIG9uZSBzdGlsbCBwZW5kaW5nCisJbW92IGRwdHIsIElONEJVRgorCQorCW1vdiBhLCB0eF9yaW5nX2luCisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJbW92IGEsIHR4X3Jpbmdfb3V0CisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisKKwltb3YgYSwgcnhfcmluZ19pbgorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCW1vdiBhLCByeF9yaW5nX291dAorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCQorCWNsciBhCisJam5iIFRYX1JVTk5JTkcsIGR1bXBfc3RhdF9fbm9fdHhfcnVubmluZworCWluYyBhCitkdW1wX3N0YXRfX25vX3R4X3J1bm5pbmc6CisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJOzsgdHhfcmluZ1swLi4xNV0KKwlpbmMgZHBzCisJbW92IGRwdHIsICN0eF9yaW5nCTsgRFBUUjE6IHNvdXJjZQorCW1vdiByMSwgIzE2CitkdW1wX3N0YXRfX3R4X3JpbmdfbG9vcDoKKwltb3Z4IGEsIEBkcHRyCisJaW5jIGRwdHIKKwlpbmMgZHBzCisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJaW5jIGRwcworCWRqbnogcjEsIGR1bXBfc3RhdF9fdHhfcmluZ19sb29wCisJaW5jIGRwcworCQorCW1vdiBhLCAjMHhmYworCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCQorCTs7IHJ4X3JpbmdbMC4uMTVdCisJaW5jIGRwcworCW1vdiBkcHRyLCAjcnhfcmluZwk7IERQVFIxOiBzb3VyY2UKKwltb3YgcjEsICMxNgorZHVtcF9zdGF0X19yeF9yaW5nX2xvb3A6CisJbW92eCBhLCBAZHB0cgorCWluYyBkcHRyCisJaW5jIGRwcworCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCWluYyBkcHMKKwlkam56IHIxLCBkdW1wX3N0YXRfX3J4X3JpbmdfbG9vcAorCQorCTs7IG5vdyBzZW5kIGl0CisJY2xyIGEKKwltb3YgZHBzLCBhCisJbW92IGRwdHIsIElONEJDCisJbW92IGEsICMzOAorCW1vdnggQGRwdHIsIGEKK2R1bXBfc3RhdF9fZG9uZToJCisJcmV0CisJCQorOzs7ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQorbWF5YmVfc3RhcnRfdHg6CisJOzsgbWFrZSBzdXJlIHRoZSB0eCBwcm9jZXNzIGlzIHJ1bm5pbmcuCisJamIgVFhfUlVOTklORywgc3RhcnRfdHhfZG9uZQorc3RhcnRfdHg6CisJOzsgaXMgdGhlcmUgd29yayB0byBiZSBkb25lPworCW1vdiBhLCB0eF9yaW5nX2luCisJY2puZSBhLHR4X3Jpbmdfb3V0LCBzdGFydF90eF9fd29yaworCXJldAkJCTsgbm8gd29yaworc3RhcnRfdHhfX3dvcms6CQorCTs7IHR4IHdhcyBub3QgcnVubmluZy4gc2VuZCB0aGUgZmlyc3QgY2hhcmFjdGVyLCBzZXR1cCB0aGUgVEkgaW50CisJaW5jIHR4X3Jpbmdfb3V0CQk7IFsrK3R4X3Jpbmdfb3V0XQorCW1vdiBkcGgsICNISUdIKHR4X3JpbmcpCisJbW92IGRwbCwgdHhfcmluZ19vdXQKKwltb3Z4IGEsIEBkcHRyCisJbW92IHNidWYsIGEKKwlzZXRiIFRYX1JVTk5JTkcKK3N0YXJ0X3R4X2RvbmU6CisJOzsgY2FuIHdlIHVudGhyb3R0bGUgdGhlIGhvc3QgdHggcHJvY2Vzcz8KKwk7OyAgc3RlcCAxOiBkbyB3ZSBjYXJlPworCW1vdiBhLCAjMAorCWNqbmUgYSwgdHhfdW50aHJvdHRsZV90aHJlc2hvbGQsIHN0YXJ0X3R4X19tYXliZV91bnRocm90dGxlX3R4CisJOzsgbm9wZQorc3RhcnRfdHhfcmVhbGx5X2RvbmU6CisJcmV0CitzdGFydF90eF9fbWF5YmVfdW50aHJvdHRsZV90eDoKKwk7OyAgc3RlcCAyOiBpcyB0aGVyZSBub3cgcm9vbT8KKwltb3YgYSwgdHhfcmluZ19vdXQKKwlzZXRiIGMKKwlzdWJiIGEsIHR4X3JpbmdfaW4KKwk7OyBhIGlzIG5vdyB3cml0ZV9yb29tLiBJZiB0aHJlc2ggPj0gYSwgd2UgY2FuIHVudGhyb3R0bGUKKwljbHIgYworCXN1YmIgYSwgdHhfdW50aHJvdHRsZV90aHJlc2hvbGQKKwlqYyBzdGFydF90eF9yZWFsbHlfZG9uZQk7IG5vcGUKKwk7OyB5ZXMsIHdlIGNhbiB1bnRocm90dGxlLiByZW1vdmUgdGhlIHRocmVzaG9sZCBhbmQgbWFyayBhIHJlcXVlc3QKKwltb3YgdHhfdW50aHJvdHRsZV90aHJlc2hvbGQsICMwCisJc2V0YiBET19UWF9VTlRIUk9UVExFCisJOzsgcHJvZCByeCwgd2hpY2ggd2lsbCBhY3R1YWxseSBzZW5kIHRoZSBtZXNzYWdlIHdoZW4gaW4yIGJlY29tZXMgZnJlZQorCWxqbXAgc3RhcnRfaW4KKwkKKworc2VyaWFsX2ludDoKKwlwdXNoIGRwcworCXB1c2ggZHBsCisJcHVzaCBkcGgKKwlwdXNoIGRwbDEKKwlwdXNoIGRwaDEKKwlwdXNoIGFjYworCWpuYiBUSSwgc2VyaWFsX2ludF9fbm90X3R4CisJOzsgdHggZmluaXNoZWQuIHNlbmQgYW5vdGhlciBjaGFyYWN0ZXIgaWYgd2UgaGF2ZSBvbmUKKwljbHIgVEkJCQk7IGNsZWFyIGludAorCWNsciBUWF9SVU5OSU5HCisJbGNhbGwgc3RhcnRfdHgKK3NlcmlhbF9pbnRfX25vdF90eDoKKwlqbmIgUkksIHNlcmlhbF9pbnRfX25vdF9yeAorCWxjYWxsIGdldF9yeF9jaGFyCisJY2xyIFJJCQkJOyBjbGVhciBpbnQKK3NlcmlhbF9pbnRfX25vdF9yeDoJCisJOzsgcmV0dXJuCisJcG9wIGFjYworCXBvcCBkcGgxCisJcG9wIGRwbDEKKwlwb3AgZHBoCisJcG9wIGRwbAorCXBvcCBkcHMKKwlyZXRpCisKK2dldF9yeF9jaGFyOgorCW1vdiBkcGgsICNISUdIKHJ4X3JpbmcpCisJbW92IGRwbCwgcnhfcmluZ19pbgorCWluYyBkcGwJCQk7IHRhcmdldCA9IHJ4X3JpbmdfaW4rMQorCW1vdiBhLCBzYnVmCisJbW92eCBAZHB0ciwgYQorCTs7IGNoZWNrIGZvciBvdmVyZmxvdyBiZWZvcmUgaW5jcmVtZW50aW5nIHJ4X3JpbmdfaW4KKwltb3YgYSwgZHBsCisJY2puZSBhLCByeF9yaW5nX291dCwgZ2V0X3J4X2NoYXJfX25vX292ZXJmbG93CisJOzsgc2lnbmFsIG92ZXJmbG93CisJcmV0CitnZXRfcnhfY2hhcl9fbm9fb3ZlcmZsb3c6CQorCWluYyByeF9yaW5nX2luCisJOzsga2ljayBvZmYgVVNCIElOcGlwZQorCWFjYWxsIHN0YXJ0X2luCisJcmV0CisKK3N0YXJ0X2luOgorCTs7IGNoZWNrIGlmIHRoZSBpbnBpcGUgaXMgYWxyZWFkeSBydW5uaW5nLgorCW1vdiAgYSwjMHgxMAorCW1vdiBkcHRyLCBPRUEKKwltb3Z4IEBkcHRyLGEKKworCW1vdiBkcHRyLCBJTjJDUworCW1vdnggYSwgQGRwdHIKKwlqYiBhY2MuMSwgc3RhcnRfaW5fX2RvbmU7IGludCB3aWxsIGhhbmRsZSBpdAorCWpiIERPX1RYX1VOVEhST1RUTEUsIHN0YXJ0X2luX19kb190eF91bnRocm90dGxlCisJOzsgc2VlIGlmIHRoZXJlIGlzIGFueSB3b3JrIHRvIGRvLiBhIHNlcmlhbCBpbnRlcnJ1cHQgbWlnaHQgb2NjdXIKKwk7OyBkdXJpbmcgdGhpcyBzZXF1ZW5jZT8KKwltb3YgYSwgcnhfcmluZ19pbgorCWNqbmUgYSwgcnhfcmluZ19vdXQsIHN0YXJ0X2luX19oYXZlX3dvcmsKKwlyZXQJCQk7IG5vcGUKK3N0YXJ0X2luX19oYXZlX3dvcms6CQorCTs7IG5vdyBjb3B5IGFzIG11Y2ggZGF0YSBhcyBwb3NzaWJsZSBpbnRvIHRoZSBwaXBlLiA2MyBieXRlcyBtYXguCisJY2xyIGEKKwltb3YgZHBzLCBhCisJbW92IGRwaCwgI0hJR0gocnhfcmluZykJOyBsb2FkIERQVFIwIHdpdGggc291cmNlCisJaW5jIGRwcworCW1vdiBkcHRyLCBJTjJCVUYJOyBsb2FkIERQVFIxIHdpdGggdGFyZ2V0CisJbW92eCBAZHB0ciwgYQkJOyBpblswXSBzaWduYWxzIHRoYXQgcmVzdCBvZiBJTiBpcyByeCBkYXRhCisJaW5jIGRwdHIKKwlpbmMgZHBzCisJOzsgbG9vcCB1bnRpbCB3ZSBydW4gb3V0IG9mIGRhdGEsIG9yIHdlIGhhdmUgY29waWVkIDY0IGJ5dGVzCisJbW92IHIxLCAjMQkJOyBJTmJ1ZiBzaXplIGNvdW50ZXIKK3N0YXJ0X2luX19sb29wOgorCW1vdiBhLCByeF9yaW5nX2luCisJY2puZSBhLCByeF9yaW5nX291dCwgc3RhcnRfaW5sb2NhbF9pcnFfZW5hYmxlbGxfY29weWluZworCXNqbXAgc3RhcnRfaW5fX2tpY2sKK3N0YXJ0X2lubG9jYWxfaXJxX2VuYWJsZWxsX2NvcHlpbmc6CisJaW5jIHJ4X3Jpbmdfb3V0CisJbW92IGRwbCwgcnhfcmluZ19vdXQKKwltb3Z4IGEsIEBkcHRyCisJaW5jIGRwcworCW1vdnggQGRwdHIsIGEJCTsgd3JpdGUgaW50byBJTiBidWZmZXIKKwlpbmMgZHB0cgorCWluYyBkcHMKKwlpbmMgcjEKKwljam5lIHIxLCAjNjQsIHN0YXJ0X2luX19sb29wOyBsb29wCitzdGFydF9pbl9fa2ljazoKKwk7OyBlaXRoZXIgd2UgcmFuIG91dCBvZiBkYXRhLCBvciB3ZSBjb3BpZWQgNjQgYnl0ZXMuIHIxIGhhcyBieXRlIGNvdW50CisJOzsga2ljayBvZmYgSU4KKwltb3YgYSwgIzB4MTAgICAgICAgICAgICAgOyBUdXJuIHRoZSBncmVlbiBMRUQKKyAgICAgICAgbW92IGRwdHIsT0VBCisgICAgICAgIG1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgSU4yQkMKKwltb3YgYSwgcjEKKwlqeiBzdGFydF9pbl9fZG9uZQorCW1vdnggQGRwdHIsIGEKKwk7OyBkb25lCitzdGFydF9pbl9fZG9uZToKKwk7YWNhbGwgZHVtcF9zdGF0CisJcmV0CitzdGFydF9pbl9fZG9fdHhfdW50aHJvdHRsZToKKwk7OyBzcGVjaWFsIHNlcXVlbmNlOiBzZW5kIGEgdHggdW50aHJvdHRsZSBtZXNzYWdlCisJY2xyIERPX1RYX1VOVEhST1RUTEUKKwljbHIgYQorCW1vdiBkcHMsIGEKKwltb3YgZHB0ciwgSU4yQlVGCisJbW92IGEsICMxCisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJbW92IGEsICMyCisJbW92eCBAZHB0ciwgYQorCW1vdiBkcHRyLCBJTjJCQworCW1vdnggQGRwdHIsIGEKKwlyZXQKKwkKK3B1dGNoYXI6CisJY2xyIFRJCisJbW92IFNCVUYsIGEKK3B1dGNoYXJfd2FpdDoKKwlqbmIgVEksIHB1dGNoYXJfd2FpdAorCWNsciBUSQorCXJldAorCisJCitiYXVkX3RhYmxlOgkJCTsgYmF1ZF9oaWdoLCB0aGVuIGJhdWRfbG93CisJOzsgYmF1ZFswXTogMTEwCisJLmJ5dGUgQkFVRF9ISUdIKDExMCkKKwkuYnl0ZSBCQVVEX0xPVygxMTApCisJOzsgYmF1ZFsxXTogMzAwCisJLmJ5dGUgQkFVRF9ISUdIKDMwMCkKKwkuYnl0ZSBCQVVEX0xPVygzMDApCisJOzsgYmF1ZFsyXTogMTIwMAorCS5ieXRlIEJBVURfSElHSCgxMjAwKQorCS5ieXRlIEJBVURfTE9XKDEyMDApCisJOzsgYmF1ZFszXTogMjQwMAorCS5ieXRlIEJBVURfSElHSCgyNDAwKQorCS5ieXRlIEJBVURfTE9XKDI0MDApCisJOzsgYmF1ZFs0XTogNDgwMAorCS5ieXRlIEJBVURfSElHSCg0ODAwKQorCS5ieXRlIEJBVURfTE9XKDQ4MDApCisJOzsgYmF1ZFs1XTogOTYwMAorCS5ieXRlIEJBVURfSElHSCg5NjAwKQorCS5ieXRlIEJBVURfTE9XKDk2MDApCisJOzsgYmF1ZFs2XTogMTkyMDAKKwkuYnl0ZSBCQVVEX0hJR0goMTkyMDApCisJLmJ5dGUgQkFVRF9MT1coMTkyMDApCisJOzsgYmF1ZFs3XTogMzg0MDAKKwkuYnl0ZSBCQVVEX0hJR0goMzg0MDApCisJLmJ5dGUgQkFVRF9MT1coMzg0MDApCisJOzsgYmF1ZFs4XTogNTc2MDAKKwkuYnl0ZSBCQVVEX0hJR0goNTc2MDApCisJLmJ5dGUgQkFVRF9MT1coNTc2MDApCisJOzsgYmF1ZFs5XTogMTE1MjAwCisJLmJ5dGUgQkFVRF9ISUdIKDExNTIwMCkKKwkuYnl0ZSBCQVVEX0xPVygxMTUyMDApCisKK2Rlc2NfZGV2aWNlOgorCS5ieXRlIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NDAKKwkuYnl0ZSAweGNkLCAweDA2LCAweDA0LCAweDAxLCAweDg5LCAweGFiLCAxLCAyLCAzLCAweDAxCis7OzsgVGhlICJyZWFsIiBkZXZpY2UgaWQsIHdoaWNoIG11c3QgbWF0Y2ggdGhlIGhvc3QgZHJpdmVyLCBpcyB0aGF0Cis7OzsgIjB4Y2QgMHgwNiAweDA0IDB4MDEiIHNlcXVlbmNlLCB3aGljaCBpcyAweDA2Y2QsIDB4MDEwNAorCQorZGVzY19jb25maWcxOgorCS5ieXRlIDB4MDksIDB4MDIsIDB4MjAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIKKwkuYnl0ZSAweDA5LCAweDA0LCAweDAwLCAweDAwLCAweDAyLCAweGZmLCAweGZmLCAweGZmLCAweDAwCisJLmJ5dGUgMHgwNywgMHgwNSwgMHg4MiwgMHgwMywgMHg0MCwgMHgwMCwgMHgwMQorCS5ieXRlIDB4MDcsIDB4MDUsIDB4MDIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAKKworZGVzY19zdHJpbmdzOgorCS53b3JkIHN0cmluZ19sYW5naWRzLCBzdHJpbmdfbWZnLCBzdHJpbmdfcHJvZHVjdCwgc3RyaW5nX3NlcmlhbAorZGVzY19zdHJpbmdzX2VuZDoKKworc3RyaW5nX2xhbmdpZHM6CS5ieXRlIHN0cmluZ19sYW5naWRzX2VuZC1zdHJpbmdfbGFuZ2lkcworCS5ieXRlIDMKKwkud29yZCAwCitzdHJpbmdfbGFuZ2lkc19lbmQ6CisKKwk7OyBzaWdoLiBUaGVzZSBzdHJpbmdzIGFyZSBVbmljb2RlLCBtZWFuaW5nIFVURjE2PyAyIGJ5dGVzIGVhY2guIE5vdworCTs7ICp0aGF0KiBpcyBhIHBhaW4gaW4gdGhlIGFzcyB0byBlbmNvZGUuIEFuZCB0aGV5IGFyZSBsaXR0bGUtZW5kaWFuCisJOzsgdG9vLiBVc2UgdGhpcyBwZXJsIHNuaXBwZXQgdG8gZ2V0IHRoZSBieXRlY29kZXM6CisJLyogd2hpbGUgKDw+KSB7CisJICAgIEBjID0gc3BsaXQoLy8pOworCSAgICBmb3JlYWNoICRjIChAYykgeworCSAgICAgcHJpbnRmKCIweCUwMngsIDB4MDAsICIsIG9yZCgkYykpOworCSAgICB9CisJICAgfQorCSovCisKK3N0cmluZ19tZmc6CS5ieXRlIHN0cmluZ19tZmdfZW5kLXN0cmluZ19tZmcKKwkuYnl0ZSAzCis7CS5ieXRlICJBQ01FIHVzYiB3aWRnZXRzIgorCS5ieXRlIDB4NDEsIDB4MDAsIDB4NDMsIDB4MDAsIDB4NGQsIDB4MDAsIDB4NDUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NzUsIDB4MDAsIDB4NzMsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4NjksIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjcsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NzMsIDB4MDAKK3N0cmluZ19tZmdfZW5kOgorCQorc3RyaW5nX3Byb2R1Y3Q6CS5ieXRlIHN0cmluZ19wcm9kdWN0X2VuZC1zdHJpbmdfcHJvZHVjdAorCS5ieXRlIDMKKzsJLmJ5dGUgIkFDTUUgVVNCIHNlcmlhbCB3aWRnZXQiCisJLmJ5dGUgMHg0MSwgMHgwMCwgMHg0MywgMHgwMCwgMHg0ZCwgMHgwMCwgMHg0NSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1NSwgMHgwMCwgMHg1MywgMHgwMCwgMHg0MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHg3MywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2YywgMHgwMCwgMHgyMCwgMHgwMCwgMHg3NywgMHgwMCwgMHg2OSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2NywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3NCwgMHgwMAorc3RyaW5nX3Byb2R1Y3RfZW5kOgorCQorc3RyaW5nX3NlcmlhbDoJLmJ5dGUgc3RyaW5nX3NlcmlhbF9lbmQtc3RyaW5nX3NlcmlhbAorCS5ieXRlIDMKKzsJLmJ5dGUgIjQ3IgorCS5ieXRlIDB4MzQsIDB4MDAsIDB4MzcsIDB4MDAKK3N0cmluZ19zZXJpYWxfZW5kOgorCQkKKzs7OyByaW5nIGJ1ZmZlciBtZW1vcnkKKwk7OyB0eF9yaW5nX2luKzEgaXMgd2hlcmUgdGhlIG5leHQgaW5wdXQgYnl0ZSB3aWxsIGdvCisJOzsgW3R4X3Jpbmdfb3V0XSBoYXMgYmVlbiBzZW50CisJOzsgaWYgdHhfcmluZ19pbiA9PSB0eF9yaW5nX291dCwgdGhlcmVzIG5vIHdvcmsgdG8gZG8KKwk7OyB0aGVyZSBhcmUgKHR4X3JpbmdfaW4gLSB0eF9yaW5nX291dCkgY2hhcnMgdG8gYmUgd3JpdHRlbgorCTs7IGRvbnQgbGV0IF9pbiBsYXAgX291dAorCTs7ICAgY2Fubm90IGluYyBpZiB0eF9yaW5nX2luKzEgPT0gdHhfcmluZ19vdXQKKwk7OyAgd3JpdGUgW3R4X3JpbmdfaW4rMV0gdGhlbiB0eF9yaW5nX2luKysKKwk7OyAgIGlmICh0eF9yaW5nX2luKzEgPT0gdHhfcmluZ19vdXQpLCBvdmVyZmxvdworCTs7ICAgZWxzZSB0eF9yaW5nX2luKysKKwk7OyAgcmVhZC9zZW5kIFt0eF9yaW5nX291dCsxXSwgdGhlbiB0eF9yaW5nX291dCsrCisKKwk7OyByeF9yaW5nX2luIHdvcmtzIHRoZSBzYW1lIHdheQorCQorCS5vcmcgMHgxMDAwCit0eF9yaW5nOgorCS5za2lwIDB4MTAwCQk7IDI1NiBieXRlcworcnhfcmluZzoKKwkuc2tpcCAweDEwMAkJOyAyNTYgYnl0ZXMKKwkKKwkKKwkuRU5ECisJCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwveGlyY29tX3Bnc19mdy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL3hpcmNvbV9wZ3NfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmY3NGE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3hpcmNvbV9wZ3NfZncuaApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIFVTQiBYaXJjb20gUEdTIEZpcm13YXJlCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIEJyaWFuIFdhcm5lciAgICAgICAgPHdhcm5lckBsb3RoYXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDAxIENyaXN0aWFuIE0uIENyYWNpdW5lc2N1CTxjcmlzdGlAZG50LnJvPgorICoKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBHZW5lcmF0ZWQgZnJvbSB4aXJjb21fcGdzLlMgYnkgZXp1c2JfY29udmVydF94LnBsCisgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkIHhpcmNvbV9wZ3NfZmlybXdhcmVbXSA9IHsKK3sgMHgwMDAwLAkzLAl7MHgwMiwgMHgwMiwgMHgwMH0gfSwKK3sgMHgwMDIzLAk0LAl7MHgwMiwgMHgwNSwgMHg5YiwgMHgwMH0gfSwKK3sgMHgwMDMwLAk1LAl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0gfSwKK3sgMHgwMDQzLAk0LAl7MHgwMiwgMHgwMSwgMHgwMCwgMHgwMH0gfSwKK3sgMHgwMTAwLAkxNiwJezB4MDIsIDB4MDIsIDB4YmEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDB9IH0sCit7IDB4MDExMCwJMTYsCXsweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwfSB9LAoreyAweDAxMjAsCTE2LAl7MHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwNCwgMHg4NSwgMHgwMCwgMHgwMiwgMHgwNCwgMHhiOSwgMHgwMH0gfSwKK3sgMHgwMjAwLAkxNiwJezB4NzUsIDB4ODEsIDB4NWUsIDB4ZTQsIDB4ZjUsIDB4MzIsIDB4ZjUsIDB4MzMsIDB4ZjUsIDB4MzAsIDB4ZjUsIDB4MzEsIDB4ZjUsIDB4MzQsIDB4YzIsIDB4MDB9IH0sCit7IDB4MDIxMCwJMTYsCXsweGMyLCAweDAxLCAweGE5LCAweDAwLCAweDc0LCAweGZlLCAweDkwLCAweDEwLCAweDAwLCAweGYwLCAweGEzLCAweGQ5LCAweGZjLCAweDc0LCAweGZkLCAweDkwfSB9LAoreyAweDAyMjAsCTE2LAl7MHgxMSwgMHgwMCwgMHhmMCwgMHhhMywgMHhkOSwgMHhmYywgMHg5MCwgMHg3ZiwgMHg5NCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NSwgMHg3NH0gfSwKK3sgMHgwMjMwLAkxNiwJezB4ZWYsIDB4ZjAsIDB4NzQsIDB4MTAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4ZjAsIDB4NzQsIDB4MDAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZjAsIDB4NzQsIDB4NDB9IH0sCit7IDB4MDI0MCwJMTYsCXsweDkwLCAweDdmLCAweDlkLCAweGYwLCAweDc0LCAweDAwLCAweDkwLCAweDdmLCAweDk3LCAweGYwLCAweDc0LCAweDgyLCAweDkwLCAweDdmLCAweDllLCAweGYwfSB9LAoreyAweDAyNTAsCTE2LAl7MHg5MCwgMHg3ZiwgMHg5NSwgMHg3NCwgMHgwMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZiwgMHhlMCwgMHhkMiwgMHhlMCwgMHhmMCwgMHg3NCwgMHgwMSwgMHg5MH0gfSwKK3sgMHgwMjYwLAkxNiwJezB4N2YsIDB4YWIsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWMsIDB4NzQsIDB4MDQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWR9IH0sCit7IDB4MDI3MCwJMTYsCXsweDc0LCAweDA0LCAweGYwLCAweDkwLCAweDdmLCAweGM5LCAweGYwLCAweDc0LCAweDA3LCAweDkwLCAweDdmLCAweGFmLCAweGYwLCAweDc0LCAweDIwLCAweDkwfSB9LAoreyAweDAyODAsCTE2LAl7MHg3ZiwgMHg5YywgMHhmMCwgMHg3NCwgMHg4MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhmMCwgMHg3NCwgMHg1MywgMHhmNSwgMHg5OCwgMHg3NSwgMHhjOCwgMHgzMH0gfSwKK3sgMHgwMjkwLAkxNiwJezB4N2IsIDB4MDUsIDB4OTEsIDB4NDQsIDB4ZDIsIDB4Y2EsIDB4NzUsIDB4OTgsIDB4NTAsIDB4ZDIsIDB4ZTgsIDB4ZDIsIDB4YWYsIDB4ZDIsIDB4YWMsIDB4NzR9IH0sCit7IDB4MDJhMCwJMTYsCXsweDAwLCAweGY1LCAweDg2LCAweDkwLCAweDdmLCAweGQ2LCAweDc0LCAweDAyLCAweGYwLCAweDc5LCAweDJlLCAweDdhLCAweDAwLCAweDdiLCAweDAwLCAweGRifSB9LAoreyAweDAyYjAsCTE2LAl7MHhmZSwgMHhkYSwgMHhmYSwgMHhkOSwgMHhmNiwgMHg3NCwgMHgwNiwgMHhmMCwgMHg4MCwgMHhmZSwgMHhjMCwgMHg4NiwgMHhjMCwgMHg4MiwgMHhjMCwgMHg4M30gfSwKK3sgMHgwMmMwLAkxNiwJezB4YzAsIDB4ODQsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ZTAsIDB4ZTUsIDB4OTEsIDB4YzIsIDB4ZTQsIDB4ZjUsIDB4OTEsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzR9IH0sCit7IDB4MDJkMCwJMTYsCXsweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweGY5LCAweGEzLCAweGUwLCAweGZhLCAweGEzLCAweGUwLCAweGZiLCAweGEzLCAweGUwLCAweGZjfSB9LAoreyAweDAyZTAsCTE2LAl7MHhlOSwgMHg1NCwgMHg2MCwgMHhiNCwgMHgwMCwgMHgwMywgMHgwMiwgMHgwMywgMHg1ZCwgMHhiNCwgMHg0MCwgMHg2ZSwgMHhiYSwgMHgwMCwgMHgwYiwgMHgxMn0gfSwKK3sgMHgwMmYwLAkxNiwJezB4MDQsIDB4NDQsIDB4NDAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MjYsIDB4MDIsIDB4MDQsIDB4MmUsIDB4YmEsIDB4MDEsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MmV9IH0sCit7IDB4MDMwMCwJMTYsCXsweGJhLCAweDAyLCAweDAzLCAweDAyLCAweDA0LCAweDJlLCAweGJhLCAweDAzLCAweDAzLCAweDAyLCAweDA0LCAweDY4LCAweGJhLCAweDA0LCAweDFlLCAweGJifSB9LAoreyAweDAzMTAsCTE2LAl7MHgwMCwgMHgwYSwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwNCwgMHgyNiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMH0gfSwKK3sgMHgwMzIwLAkxNiwJezB4NTQsIDB4ZmQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTUsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4MjYsIDB4YmEsIDB4MDUsIDB4MDN9IH0sCit7IDB4MDMzMCwJMTYsCXsweDAyLCAweDA0LCAweDJlLCAweGJhLCAweDA2LCAweDE5LCAweGJiLCAweDAwLCAweDA4LCAweGU1LCAweDMzLCAweGQzLCAweDk1LCAweDMyLCAweDAyLCAweDA0fSB9LAoreyAweDAzNDAsCTE2LAl7MHgwMiwgMHhiYiwgMHgwMSwgMHgwOCwgMHhlNSwgMHgzMiwgMHhjMywgMHg5NSwgMHgzMywgMHgwMiwgMHgwNCwgMHgwMiwgMHgwMiwgMHgwNCwgMHgyZSwgMHhiYX0gfSwKK3sgMHgwMzUwLAkxNiwJezB4MDcsIDB4MDUsIDB4OGIsIDB4MzQsIDB4MDIsIDB4MDQsIDB4MjYsIDB4MDIsIDB4MDQsIDB4MmUsIDB4MDIsIDB4MDQsIDB4MmUsIDB4YmEsIDB4MDAsIDB4MjB9IH0sCit7IDB4MDM2MCwJMTYsCXsweGI5LCAweDgwLCAweDEwLCAweDkwLCAweDdmLCAweDAwLCAweGU0LCAweGYwLCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwfSB9LAoreyAweDAzNzAsCTE2LAl7MHgwMiwgMHgwNCwgMHgyNiwgMHhiOSwgMHg4MiwgMHgwMiwgMHg4MCwgMHhlYiwgMHhiOSwgMHg4MSwgMHgwMiwgMHg4MCwgMHhlNiwgMHgwMiwgMHgwNCwgMHgyZX0gfSwKK3sgMHgwMzgwLAkxNiwJezB4YmEsIDB4MDEsIDB4MGYsIDB4YmIsIDB4MDAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MmUsIDB4YmIsIDB4MDEsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MjYsIDB4MDJ9IH0sCit7IDB4MDM5MCwJMTYsCXsweDA0LCAweDJlLCAweGJhLCAweDAzLCAweDBmLCAweGJiLCAweDAwLCAweDAzLCAweDAyLCAweDA0LCAweDJlLCAweGJiLCAweDAxLCAweDAzLCAweDAyLCAweDA0fSB9LAoreyAweDAzYTAsCTE2LAl7MHgyNiwgMHgwMiwgMHgwNCwgMHgyZSwgMHhiYSwgMHgwNiwgMHg1NiwgMHhiYywgMHgwMSwgMHgwZiwgMHg5MCwgMHg3ZiwgMHhkNCwgMHg3NCwgMHgwNiwgMHhmMH0gfSwKK3sgMHgwM2IwLAkxNiwJezB4OTAsIDB4N2YsIDB4ZDUsIDB4NzQsIDB4NWEsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4MjYsIDB4YmMsIDB4MDIsIDB4MTIsIDB4YmIsIDB4MDAsIDB4NmYsIDB4OTB9IH0sCit7IDB4MDNjMCwJMTYsCXsweDdmLCAweGQ0LCAweDc0LCAweDA2LCAweGYwLCAweDkwLCAweDdmLCAweGQ1LCAweDc0LCAweDZjLCAweGYwLCAweDAyLCAweDA0LCAweDI2LCAweGJjLCAweDAzfSB9LAoreyAweDAzZDAsCTE2LAl7MHgyOSwgMHg3NCwgMHgwNCwgMHhjMywgMHg5YiwgMHg0MCwgMHg1NywgMHg2MCwgMHg1NSwgMHhlYiwgMHgyYiwgMHg5MCwgMHgwNiwgMHg4YywgMHgyNSwgMHg4Mn0gfSwKK3sgMHgwM2UwLAkxNiwJezB4ZjUsIDB4ODIsIDB4NzQsIDB4MDAsIDB4MzUsIDB4ODMsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjksIDB4YTMsIDB4ZTAsIDB4ZmEsIDB4OTAsIDB4N2YsIDB4ZDR9IH0sCit7IDB4MDNmMCwJMTYsCXsweGU5LCAweGYwLCAweDkwLCAweDdmLCAweGQ1LCAweGVhLCAweGYwLCAweDAyLCAweDA0LCAweDI2LCAweDAyLCAweDA0LCAweDJlLCAweGJhLCAweDA4LCAweDBmfSB9LAoreyAweDA0MDAsCTE2LAl7MHg3NCwgMHgwMSwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHg3NCwgMHgwMSwgMHg5MCwgMHg3ZiwgMHhiNSwgMHhmMCwgMHgwMiwgMHgwNCwgMHgyNiwgMHhiYX0gfSwKK3sgMHgwNDEwLAkxNiwJezB4MDksIDB4MDMsIDB4MDIsIDB4MDQsIDB4MjYsIDB4YmEsIDB4MGEsIDB4MDUsIDB4NzQsIDB4MDAsIDB4MDIsIDB4MDQsIDB4MDIsIDB4YmEsIDB4MGIsIDB4MDN9IH0sCit7IDB4MDQyMCwJMTYsCXsweDAyLCAweDA0LCAweDI2LCAweDAyLCAweDA0LCAweDJlLCAweDkwLCAweDdmLCAweGI0LCAweDc0LCAweDAyLCAweGYwLCAweDgwLCAweDA5LCAweDkwLCAweDdmfSB9LAoreyAweDA0MzAsCTE2LAl7MHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgwMCwgMHhkMCwgMHhlMCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4MywgMHhkMH0gfSwKK3sgMHgwNDQwLAkxNiwJezB4ODIsIDB4ZDAsIDB4ODYsIDB4MzIsIDB4ZWIsIDB4MjAsIDB4ZTcsIDB4MWUsIDB4YzMsIDB4OTQsIDB4MGEsIDB4NTAsIDB4MTksIDB4ZWIsIDB4MjMsIDB4MjR9IH0sCit7IDB4MDQ1MCwJMTYsCXsweDQ2LCAweGY1LCAweDgyLCAweDc0LCAweDA2LCAweDM0LCAweDAwLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweGNiLCAweGY1LCAweGNkLCAweGEzLCAweGUwfSB9LAoreyAweDA0NjAsCTE2LAl7MHhmNSwgMHhjYSwgMHhmNSwgMHhjYywgMHhjMywgMHgyMiwgMHhkMywgMHgyMiwgMHhiOSwgMHg0MSwgMHgxMSwgMHhlYiwgMHg2NCwgMHhmZiwgMHg1NCwgMHg4MH0gfSwKK3sgMHgwNDcwLAkxNiwJezB4ZmIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4NGIsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4MjYsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTB9IH0sCit7IDB4MDQ4MCwJMTYsCXsweDY0LCAweGZmLCAweDAyLCAweDA0LCAweDAyLCAweGMwLCAweDg2LCAweGMwLCAweDgyLCAweGMwLCAweDgzLCAweGMwLCAweDg0LCAweGMwLCAweDg1LCAweGMwfSB9LAoreyAweDA0OTAsCTE2LAl7MHhlMCwgMHhlNSwgMHg5MSwgMHhjMiwgMHhlNCwgMHhmNSwgMHg5MSwgMHg5MCwgMHg3ZiwgMHhhOSwgMHg3NCwgMHgwNCwgMHhmMCwgMHg3NCwgMHgyMCwgMHg5MH0gfSwKK3sgMHgwNGEwLAkxNiwJezB4N2YsIDB4OWMsIDB4ZjAsIDB4MTIsIDB4MDUsIDB4ZGMsIDB4NzQsIDB4MjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4ZjAsIDB4ZDAsIDB4ZTAsIDB4ZDAsIDB4ODV9IH0sCit7IDB4MDRiMCwJMTYsCXsweGQwLCAweDg0LCAweGQwLCAweDgzLCAweGQwLCAweDgyLCAweGQwLCAweDg2LCAweDMyLCAweGMwLCAweDg2LCAweGMwLCAweDgyLCAweGMwLCAweDgzLCAweGMwfSB9LAoreyAweDA0YzAsCTE2LAl7MHg4NCwgMHhjMCwgMHg4NSwgMHhjMCwgMHhlMCwgMHg3NCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHhmMCwgMHhlNSwgMHg5MSwgMHhjMiwgMHhlNCwgMHhmNX0gfSwKK3sgMHgwNGQwLAkxNiwJezB4OTEsIDB4OTAsIDB4N2YsIDB4YWEsIDB4NzQsIDB4MDQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZTAsIDB4ZjksIDB4ZTQsIDB4ZjUsIDB4ODYsIDB4OTB9IH0sCit7IDB4MDRlMCwJMTYsCXsweDdkLCAweGMwLCAweDc1LCAweDg1LCAweDEwLCAweDg1LCAweDMyLCAweDg0LCAweGUwLCAweDA1LCAweDg2LCAweDA1LCAweDg0LCAweGYwLCAweGU1LCAweDg0fSB9LAoreyAweDA0ZjAsCTE2LAl7MHhiNSwgMHgzMywgMHgwMiwgMHg4MCwgMHgwOSwgMHgwNSwgMHgzMiwgMHgwNSwgMHg4NiwgMHhhMywgMHhkOSwgMHhlYywgMHg4MCwgMHgwMCwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwNTAwLAkxNiwJezB4YzksIDB4ZjAsIDB4YjEsIDB4NmQsIDB4NzQsIDB4MjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4ZjAsIDB4ZDAsIDB4ZTAsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODR9IH0sCit7IDB4MDUxMCwJMTYsCXsweGQwLCAweDgzLCAweGQwLCAweDgyLCAweGQwLCAweDg2LCAweDMyLCAweGU0LCAweGY1LCAweDg2LCAweDkwLCAweDdmLCAweGJjLCAweGUwLCAweDIwLCAweGUxfSB9LAoreyAweDA1MjAsCTE2LAl7MHg0YiwgMHg5MCwgMHg3ZCwgMHgwMCwgMHhlNSwgMHgzMiwgMHhmMCwgMHhhMywgMHhlNSwgMHgzMywgMHhmMCwgMHhhMywgMHhlNSwgMHgzMCwgMHhmMCwgMHhhM30gfSwKK3sgMHgwNTMwLAkxNiwJezB4ZTUsIDB4MzEsIDB4ZjAsIDB4YTMsIDB4ZTQsIDB4MzAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4ZjAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4OTAsIDB4MTAsIDB4MDB9IH0sCit7IDB4MDU0MCwJMTYsCXsweDc5LCAweDEwLCAweGUwLCAweGEzLCAweDA1LCAweDg2LCAweGYwLCAweGEzLCAweDA1LCAweDg2LCAweGQ5LCAweGY2LCAweDA1LCAweDg2LCAweDc0LCAweGZjfSB9LAoreyAweDA1NTAsCTE2LAl7MHhmMCwgMHhhMywgMHgwNSwgMHg4NiwgMHg5MCwgMHgxMSwgMHgwMCwgMHg3OSwgMHgxMCwgMHhlMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhmMCwgMHhhMywgMHgwNX0gfSwKK3sgMHgwNTYwLAkxNiwJezB4ODYsIDB4ZDksIDB4ZjYsIDB4ZTQsIDB4ZjUsIDB4ODYsIDB4OTAsIDB4N2YsIDB4YmQsIDB4NzQsIDB4MjYsIDB4ZjAsIDB4MjIsIDB4MjAsIDB4MDAsIDB4MTN9IH0sCit7IDB4MDU3MCwJMTYsCXsweGU1LCAweDMyLCAweGI1LCAweDMzLCAweDAxLCAweDIyLCAweDA1LCAweDMzLCAweDc1LCAweDgzLCAweDEwLCAweDg1LCAweDMzLCAweDgyLCAweGUwLCAweGY1fSB9LAoreyAweDA1ODAsCTE2LAl7MHg5OSwgMHhkMiwgMHgwMCwgMHg3NCwgMHgwMCwgMHhiNSwgMHgzNCwgMHgwMSwgMHgyMiwgMHhlNSwgMHgzMywgMHhkMywgMHg5NSwgMHgzMiwgMHhjMywgMHg5NX0gfSwKK3sgMHgwNTkwLAkxNiwJezB4MzQsIDB4NDAsIDB4ZjUsIDB4NzUsIDB4MzQsIDB4MDAsIDB4ZDIsIDB4MDEsIDB4MDIsIDB4MDUsIDB4ZGMsIDB4YzAsIDB4ODYsIDB4YzAsIDB4ODIsIDB4YzB9IH0sCit7IDB4MDVhMCwJMTYsCXsweDgzLCAweGMwLCAweDg0LCAweGMwLCAweDg1LCAweGMwLCAweGUwLCAweDMwLCAweDk5LCAweDA3LCAweGMyLCAweDk5LCAweGMyLCAweDAwLCAweDEyLCAweDA1fSB9LAoreyAweDA1YjAsCTE2LAl7MHg3MCwgMHgzMCwgMHg5OCwgMHgwNSwgMHgxMiwgMHgwNSwgMHhjNiwgMHhjMiwgMHg5OCwgMHhkMCwgMHhlMCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4NCwgMHhkMH0gfSwKK3sgMHgwNWMwLAkxNiwJezB4ODMsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODYsIDB4MzIsIDB4NzUsIDB4ODMsIDB4MTEsIDB4ODUsIDB4MzAsIDB4ODIsIDB4MDUsIDB4ODIsIDB4ZTUsIDB4OTl9IH0sCit7IDB4MDVkMCwJMTYsCXsweGYwLCAweGU1LCAweDgyLCAweGI1LCAweDMxLCAweDAxLCAweDIyLCAweDA1LCAweDMwLCAweGIxLCAweGRjLCAweDIyLCAweDc0LCAweDEwLCAweDkwLCAweDdmfSB9LAoreyAweDA1ZTAsCTE2LAl7MHg5YywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiOCwgMHhlMCwgMHgyMCwgMHhlMSwgMHgzZSwgMHgyMCwgMHgwMSwgMHgzYywgMHhlNSwgMHgzMCwgMHhiNSwgMHgzMX0gfSwKK3sgMHgwNWYwLAkxNiwJezB4MDEsIDB4MjIsIDB4ZTQsIDB4ZjUsIDB4ODYsIDB4NzUsIDB4ODMsIDB4MTEsIDB4MDUsIDB4ODYsIDB4OTAsIDB4N2UsIDB4MDAsIDB4ZjAsIDB4YTMsIDB4MDV9IH0sCit7IDB4MDYwMCwJMTYsCXsweDg2LCAweDc5LCAweDAxLCAweGU1LCAweDMwLCAweGI1LCAweDMxLCAweDAyLCAweDgwLCAweDEwLCAweDA1LCAweDMxLCAweDg1LCAweDMxLCAweDgyLCAweGUwfSB9LAoreyAweDA2MTAsCTE2LAl7MHgwNSwgMHg4NiwgMHhmMCwgMHhhMywgMHgwNSwgMHg4NiwgMHgwOSwgMHhiOSwgMHg0MCwgMHhlOSwgMHg3NCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHhmMH0gfSwKK3sgMHgwNjIwLAkxNiwJezB4OTAsIDB4N2YsIDB4YjksIDB4ZTksIDB4NjAsIDB4MDEsIDB4ZjAsIDB4MjIsIDB4YzIsIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4ODYsIDB4OTAsIDB4N2UsIDB4MDB9IH0sCit7IDB4MDYzMCwJMTYsCXsweDc0LCAweDAxLCAweGYwLCAweGEzLCAweDc0LCAweDAyLCAweGYwLCAweDkwLCAweDdmLCAweGI5LCAweGYwLCAweDIyLCAweGMyLCAweDk5LCAweGY1LCAweDk5fSB9LAoreyAweDA2NDAsCTE2LAl7MHgzMCwgMHg5OSwgMHhmZCwgMHhjMiwgMHg5OSwgMHgyMiwgMHhlNSwgMHg1ZSwgMHhmNiwgMHgzYywgMHhmZCwgMHg4ZiwgMHhmZSwgMHhjOCwgMHhmZiwgMHg2NH0gfSwKK3sgMHgwNjUwLAkxNiwJezB4ZmYsIDB4YjIsIDB4ZmYsIDB4ZDksIDB4ZmYsIDB4ZWQsIDB4ZmYsIDB4ZjMsIDB4ZmYsIDB4ZmEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ZmYsIDB4ZmZ9IH0sCit7IDB4MDY2MCwJMTYsCXsweGZmLCAweDQwLCAweGNkLCAweDA2LCAweDA0LCAweDAxLCAweDg5LCAweGFiLCAweDAxLCAweDAyLCAweDAzLCAweDAxLCAweDA5LCAweDAyLCAweDIwLCAweDAwfSB9LAoreyAweDA2NzAsCTE2LAl7MHgwMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwOSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwNywgMHgwNX0gfSwKK3sgMHgwNjgwLAkxNiwJezB4ODIsIDB4MDMsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4MDIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4OTQsIDB4MDYsIDB4OTh9IH0sCit7IDB4MDY5MCwJMTYsCXsweDA2LCAweGJhLCAweDA2LCAweGU4LCAweDA0LCAweDAzLCAweDAwLCAweDAwLCAweDIyLCAweDAzLCAweDQxLCAweDAwLCAweDQzLCAweDAwLCAweDRkLCAweDAwfSB9LAoreyAweDA2YTAsCTE2LAl7MHg0NSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg3NSwgMHgwMCwgMHg3MywgMHgwMCwgMHg2MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHg3NywgMHgwMCwgMHg2OSwgMHgwMH0gfSwKK3sgMHgwNmIwLAkxNiwJezB4NjQsIDB4MDAsIDB4NjcsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NzMsIDB4MDAsIDB4MmUsIDB4MDMsIDB4NDEsIDB4MDAsIDB4NDMsIDB4MDB9IH0sCit7IDB4MDZjMCwJMTYsCXsweDRkLCAweDAwLCAweDQ1LCAweDAwLCAweDIwLCAweDAwLCAweDU1LCAweDAwLCAweDUzLCAweDAwLCAweDQyLCAweDAwLCAweDIwLCAweDAwLCAweDczLCAweDAwfSB9LAoreyAweDA2ZDAsCTE2LAl7MHg2NSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2YywgMHgwMCwgMHgyMCwgMHgwMCwgMHg3NywgMHgwMCwgMHg2OSwgMHgwMH0gfSwKK3sgMHgwNmUwLAkxNCwJezB4NjQsIDB4MDAsIDB4NjcsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MDYsIDB4MDMsIDB4MzQsIDB4MDAsIDB4MzcsIDB4MDB9IH0sCit7IDB4ZmZmZiwJMCwJezB4MDB9IH0KK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFmMWMwNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZwpAQCAtMCwwICsxLDExMyBAQAorIworIyBVU0IgU3RvcmFnZSBkcml2ZXIgY29uZmlndXJhdGlvbgorIworCitjb21tZW50ICJOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24iCisJZGVwZW5kcyBvbiBVU0IKKworY29uZmlnIFVTQl9TVE9SQUdFCisJdHJpc3RhdGUgIlVTQiBNYXNzIFN0b3JhZ2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQgorCXNlbGVjdCBTQ1NJCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IFVTQiBtYXNzIHN0b3JhZ2UgZGV2aWNlcyB0byB5b3VyCisJICBjb21wdXRlcidzIFVTQiBwb3J0LiBUaGlzIGlzIHRoZSBkcml2ZXIgeW91IG5lZWQgZm9yIFVTQgorCSAgZmxvcHB5IGRyaXZlcywgVVNCIGhhcmQgZGlza3MsIFVTQiB0YXBlIGRyaXZlcywgVVNCIENELVJPTXMsCisJICBVU0IgZmxhc2ggZGV2aWNlcywgYW5kIG1lbW9yeSBzdGlja3MsIGFsb25nIHdpdGgKKwkgIHNpbWlsYXIgZGV2aWNlcy4gVGhpcyBkcml2ZXIgbWF5IGFsc28gYmUgdXNlZCBmb3Igc29tZSBjYW1lcmFzCisJICBhbmQgY2FyZCByZWFkZXJzLgorCisJICBUaGlzIG9wdGlvbiAnc2VsZWN0cycgKHR1cm5zIG9uLCBlbmFibGVzKSAnU0NTSScsIGJ1dCB5b3UKKwkgIHByb2JhYmx5IGFsc28gbmVlZCAnU0NTSSBkZXZpY2Ugc3VwcG9ydDogU0NTSSBkaXNrIHN1cHBvcnQnCisJICAoQkxLX0RFVl9TRCkgZm9yIG1vc3QgVVNCIHN0b3JhZ2UgZGV2aWNlcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNiLXN0b3JhZ2UuCisKK2NvbmZpZyBVU0JfU1RPUkFHRV9ERUJVRworCWJvb2wgIlVTQiBNYXNzIFN0b3JhZ2UgdmVyYm9zZSBkZWJ1ZyIKKwlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCisJaGVscAorCSAgU2F5IFkgaGVyZSBpbiBvcmRlciB0byBoYXZlIHRoZSBVU0IgTWFzcyBTdG9yYWdlIGNvZGUgZ2VuZXJhdGUKKwkgIHZlcmJvc2UgZGVidWdnaW5nIG1lc3NhZ2VzLgorCitjb25maWcgVVNCX1NUT1JBR0VfREFUQUZBQgorCWJvb2wgIkRhdGFmYWIgQ29tcGFjdCBGbGFzaCBSZWFkZXIgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIGNlcnRhaW4gRGF0YWZhYiBDb21wYWN0Rmxhc2ggcmVhZGVycy4KKwkgIERhdGFmYWIgaGFzIGEgd2ViIHBhZ2UgYXQgPGh0dHA6Ly93d3cuZGF0YWZhYnVzYS5jb20vPi4KKworY29uZmlnIFVTQl9TVE9SQUdFX0ZSRUVDT00KKwlib29sICJGcmVlY29tIFVTQi9BVEFQSSBCcmlkZ2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCisJaGVscAorCSAgU3VwcG9ydCBmb3IgdGhlIEZyZWVjb20gVVNCIHRvIElERS9BVEFQSSBhZGFwdG9yLgorCSAgRnJlZWNvbSBoYXMgYSB3ZWIgcGFnZSBhdCA8aHR0cDovL3d3dy5mcmVlY29tLmRlLz4uCisKK2NvbmZpZyBVU0JfU1RPUkFHRV9JU0QyMDAKKwlib29sICJJU0QtMjAwIFVTQi9BVEEgQnJpZGdlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRSAmJiBCTEtfREVWX0lERQorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIFVTQiBNYXNzIFN0b3JlIGRldmljZXMgYmFzZWQKKwkgIG9uIHRoZSBJbi1TeXN0ZW1zIERlc2lnbiBJU0QtMjAwIFVTQi9BVEEgYnJpZGdlLgorCisJICBTb21lIG9mIHRoZSBwcm9kdWN0cyB0aGF0IHVzZSB0aGlzIGNoaXAgYXJlOgorCisJICAtIEFyY2hvcyBKdWtlYm94IDYwMDAKKwkgIC0gSVNEIFNtYXJ0Q2FibGUgZm9yIFN0b3JhZ2UKKwkgIC0gVGFpd2FuIFNreW1hc3RlciBDRDUzMFUvREVMLTAyNDEgSURFIGJyaWRnZQorCSAgLSBTb255IENSWDEwVSBDRC1SL1JXIGRyaXZlCisJICAtIEN5USd2ZSBDUTgwNjBBIENEUlcgZHJpdmUKKwkgIC0gUGxhbmV4IGVYdHJlbWUgRHJpdmUgUlgtMjVIVSBVU0ItSURFIGNhYmxlIChub3QgbW9kZWwgUlgtMjVVKQorCitjb25maWcgVVNCX1NUT1JBR0VfRFBDTQorCWJvb2wgIk1pY3JvdGVjaC9aaU8hIENvbXBhY3RGbGFzaC9TbWFydE1lZGlhIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRQorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgTWljcm90ZWNoL1ppTyEgQ29tcGFjdEZsYXNoIHJlYWRlci4KKwkgIFRoZXJlIGlzIGEgd2ViIHBhZ2UgYXQgPGh0dHA6Ly93d3cuemlvY29ycC5jb20vcHJvZHVjdHMvPi4KKworY29uZmlnIFVTQl9TVE9SQUdFX1VTQkFUCisJYm9vbCAiVVNCQVQvVVNCQVQwMi1iYXNlZCBzdG9yYWdlIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRSAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgc3RvcmFnZSBkZXZpY2VzCisJICBiYXNlZCBvbiB0aGUgU0NNL1NodXR0bGUgVVNCQVQvVVNCQVQwMiBwcm9jZXNzb3JzLgorCisJICBEZXZpY2VzIHJlcG9ydGVkIHRvIHdvcmsgd2l0aCB0aGlzIGRyaXZlciBpbmNsdWRlOgorCSAgLSBDb21wYWN0Rmxhc2ggcmVhZGVyIGluY2x1ZGVkIHdpdGggS29kYWsgREMzODAwIGNhbWVyYQorCSAgLSBEYW5lLUVsZWMgWm1hdGUgQ29tcGFjdEZsYXNoIHJlYWRlcgorCSAgLSBEZWxraW4gRWZpbG0gcmVhZGVyMgorCSAgLSBIUCA4MjAwZS84MjEwZS84MjMwZSBDRC1Xcml0ZXIgUGx1cyBkcml2ZXMKKwkgIC0gSS1KQU0gSlMtNTBVCisJICAtIEplc3NvcHMgQ29tcGFjdEZsYXNoIEpFU0RDRlJVIEJMQUNLCisJICAtIEtpbmdzdG9uIFRlY2hub2xvZ3kgUENSRUFELVVTQi9DRgorCSAgLSBNYXhlbGwgVUE0IENvbXBhY3RGbGFzaCByZWFkZXIKKwkgIC0gTWVtb3JleCBVQ0YtMTAwCisJICAtIE1pY3JvdGVjaCBaaU8hIElDUy00NSBDRjIKKwkgIC0gUkNBIExZUkEgTVAzIHBvcnRhYmxlCisJICAtIFNhbmRpc2sgSW1hZ2VNYXRlIFNERFItMDViCisKK2NvbmZpZyBVU0JfU1RPUkFHRV9TRERSMDkKKwlib29sICJTYW5EaXNrIFNERFItMDkgKGFuZCBvdGhlciBTbWFydE1lZGlhKSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBTYW5kaXNrIFNERFItMDkKKwkgIFNtYXJ0TWVkaWEgcmVhZGVyIGluIHRoZSBVU0IgTWFzcyBTdG9yYWdlIGRyaXZlci4KKwkgIEFsc28gd29ya3MgZm9yIHRoZSBNaWNyb3RlY2ggWmlvISBTbWFydE1lZGlhIHJlYWRlci4KKworY29uZmlnIFVTQl9TVE9SQUdFX1NERFI1NQorCWJvb2wgIlNhbkRpc2sgU0REUi01NSBTbWFydE1lZGlhIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRSAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgdGhlIFNhbmRpc2sgU0REUi01NQorCSAgU21hcnRNZWRpYSByZWFkZXIgaW4gdGhlIFVTQiBNYXNzIFN0b3JhZ2UgZHJpdmVyLgorCitjb25maWcgVVNCX1NUT1JBR0VfSlVNUFNIT1QKKwlib29sICJMZXhhciBKdW1wc2hvdCBDb21wYWN0IEZsYXNoIFJlYWRlciAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCB0aGUgTGV4YXIgSnVtcHNob3QKKwkgIFVTQiBDb21wYWN0Rmxhc2ggcmVhZGVyLgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjY1MmNjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZQpAQCAtMCwwICsxLDIzIEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgVVNCIE1hc3MgU3RvcmFnZSBkZXZpY2UgZHJpdmVycy4KKyMKKyMgMTUgQXVnIDIwMDAsIENocmlzdG9waCBIZWxsd2lnIDxoY2hAaW5mcmFkZWFkLm9yZz4KKyMgUmV3cml0dGVuIHRvIHVzZSBsaXN0cyBpbnN0ZWFkIG9mIGlmLXN0YXRlbWVudHMuCisjCisKK0VYVFJBX0NGTEFHUwk6PSAtSWRyaXZlcnMvc2NzaQorCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0UpCSs9IHVzYi1zdG9yYWdlLm8KKwordXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHKQkrPSBkZWJ1Zy5vCit1c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQpCSs9IHNodXR0bGVfdXNiYXQubwordXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSkJKz0gc2RkcjA5Lm8KK3VzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUpCSs9IHNkZHI1NS5vCit1c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSkJKz0gZnJlZWNvbS5vCit1c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSkJKz0gZHBjbS5vCit1c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwKQkrPSBpc2QyMDAubwordXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIpCSs9IGRhdGFmYWIubwordXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UKQkrPSBqdW1wc2hvdC5vCisKK3VzYi1zdG9yYWdlLW9ianMgOj0Jc2NzaWdsdWUubyBwcm90b2NvbC5vIHRyYW5zcG9ydC5vIHVzYi5vIFwKKwkJCWluaXRpYWxpemVycy5vICQodXNiLXN0b3JhZ2Utb2JqLXkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RhdGFmYWIuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZTNlNmM3ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2RhdGFmYWIuYwpAQCAtMCwwICsxLDY2OSBAQAorLyogRHJpdmVyIGZvciBEYXRhZmFiIFVTQiBDb21wYWN0IEZsYXNoIHJlYWRlcgorICoKKyAqICRJZDogZGF0YWZhYi5jLHYgMS43IDIwMDIvMDIvMjUgMDA6NDA6MTMgbWRoYXJtIEV4cCAkCisgKgorICogZGF0YWZhYiBkcml2ZXIgdjAuMToKKyAqCisgKiBGaXJzdCByZWxlYXNlCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAyMDAwIEppbW1pZSBNYXlmaWVsZCAobWF5ZmllbGQrZGF0YWZhYkBzYWNraGVhZHMub3JnKQorICoKKyAqICAgTWFueSB0aGFua3MgdG8gUm9iZXJ0IEJhcnVjaCBmb3IgdGhlIFNhbkRpc2sgU21hcnRNZWRpYSByZWFkZXIgZHJpdmVyCisgKiAgIHdoaWNoIEkgdXNlZCBhcyBhIHRlbXBsYXRlIGZvciB0aGlzIGRyaXZlci4KKyAqCisgKiAgIFNvbWUgYnVnZml4ZXMgYW5kIHNjYXR0ZXItZ2F0aGVyIGNvZGUgYnkgR3JlZ29yeSBQLiBTbWl0aCAKKyAqICAgKGdyZWctdXNiQGVsZWN0cmljcmFpbi5jb20pCisgKgorICogICBGaXggZm9yIG1lZGlhIGNoYW5nZSBieSBKb2VyZyBTY2huZWlkZXIgKGpzQGpvZXJnc2NobmVpZGVyLmNvbSkKKyAqCisgKiBPdGhlciBjb250cmlidXRvcnM6CisgKiAgIChjKSAyMDAyIEFsYW4gU3Rlcm4gPHN0ZXJuQHJvd2xhbmQub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qCisgKiBUaGlzIGRyaXZlciBhdHRlbXB0cyB0byBzdXBwb3J0IFVTQiBDb21wYWN0Rmxhc2ggcmVhZGVyL3dyaXRlciBkZXZpY2VzCisgKiBiYXNlZCBvbiBEYXRhZmFiIFVTQi10by1BVEEgY2hpcHMuICBJdCB3YXMgc3BlY2lmaWNhbGx5IGRldmVsb3BlZCBmb3IgdGhlIAorICogRGF0YWZhYiBNRENGRS1CIFVTQiBDb21wYWN0Rmxhc2ggcmVhZGVyIGJ1dCBoYXMgc2luY2UgYmVlbiBmb3VuZCB0byB3b3JrIAorICogd2l0aCBhIHZhcmlldHkgb2YgRGF0YWZhYi1iYXNlZCBkZXZpY2VzIGZyb20gYSBudW1iZXIgb2YgbWFudWZhY3R1cmVycy4KKyAqIEkndmUgcmVjZWl2ZWQgYSByZXBvcnQgb2YgdGhpcyBkcml2ZXIgd29ya2luZyB3aXRoIGEgRGF0YWZhYi1iYXNlZAorICogU21hcnRNZWRpYSBkZXZpY2UgdGhvdWdoIHBsZWFzZSBiZSBhd2FyZSB0aGF0IEknbSBwZXJzb25hbGx5IHVuYWJsZSB0bworICogdGVzdCBTbWFydE1lZGlhIHN1cHBvcnQuCisgKgorICogVGhpcyBkcml2ZXIgc3VwcG9ydHMgcmVhZGluZyBhbmQgd3JpdGluZy4gIElmIHlvdSdyZSB0cnVseSBwYXJhbm9pZCwKKyAqIGhvd2V2ZXIsIHlvdSBjYW4gZm9yY2UgdGhlIGRyaXZlciBpbnRvIGEgd3JpdGUtcHJvdGVjdGVkIHN0YXRlIGJ5IHNldHRpbmcKKyAqIHRoZSBXUCBlbmFibGUgYml0cyBpbiBkYXRhZmFiX2hhbmRsZV9tb2RlX3NlbnNlKCkuICBTZWUgdGhlIGNvbW1lbnRzCisgKiBpbiB0aGF0IHJvdXRpbmUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorCisjaW5jbHVkZSAidXNiLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgImRhdGFmYWIuaCIKKworc3RhdGljIGludCBkYXRhZmFiX2RldGVybWluZV9sdW4oc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJCSBzdHJ1Y3QgZGF0YWZhYl9pbmZvICppbmZvKTsKKworCitzdGF0aWMgaW5saW5lIGludAorZGF0YWZhYl9idWxrX3JlYWQoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKSB7CisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9HT09EOworCisJVVNfREVCVUdQKCJkYXRhZmFiX2J1bGtfcmVhZDogIGxlbiA9ICVkXG4iLCBsZW4pOworCXJldHVybiB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnJlY3ZfYnVsa19waXBlLAorCQkJZGF0YSwgbGVuLCBOVUxMKTsKK30KKworCitzdGF0aWMgaW5saW5lIGludAorZGF0YWZhYl9idWxrX3dyaXRlKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikgeworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIFVTQl9TVE9SX1hGRVJfR09PRDsKKworCVVTX0RFQlVHUCgiZGF0YWZhYl9idWxrX3dyaXRlOiAgbGVuID0gJWRcbiIsIGxlbik7CisJcmV0dXJuIHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCB1cy0+c2VuZF9idWxrX3BpcGUsCisJCQlkYXRhLCBsZW4sIE5VTEwpOworfQorCisKK3N0YXRpYyBpbnQgZGF0YWZhYl9yZWFkX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJICAgICBzdHJ1Y3QgZGF0YWZhYl9pbmZvICppbmZvLAorCQkJICAgICB1MzIgc2VjdG9yLAorCQkJICAgICB1MzIgc2VjdG9ycykKK3sKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBjaGFyICB0aGlzdGltZTsKKwl1bnNpZ25lZCBpbnQgdG90YWxsZW4sIGFsbG9jbGVuOworCWludCBsZW4sIHJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgc2dfaWR4ID0gMCwgc2dfb2Zmc2V0ID0gMDsKKworCS8vIHdlJ3JlIHdvcmtpbmcgaW4gTEJBIG1vZGUuICBhY2NvcmRpbmcgdG8gdGhlIEFUQSBzcGVjLCAKKwkvLyB3ZSBjYW4gc3VwcG9ydCB1cCB0byAyOC1iaXQgYWRkcmVzc2luZy4gIEkgZG9uJ3Qga25vdyBpZiBEYXRhZmFiCisJLy8gc3VwcG9ydHMgYmV5b25kIDI0LWJpdCBhZGRyZXNzaW5nLiAgSXQncyBraW5kIG9mIGhhcmQgdG8gdGVzdCAKKwkvLyBzaW5jZSBpdCByZXF1aXJlcyA+IDhHQiBDRiBjYXJkLgorCS8vCisJaWYgKHNlY3RvcnMgPiAweDBGRkZGRkZGKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJaWYgKGluZm8tPmx1biA9PSAtMSkgeworCQlyZXN1bHQgPSBkYXRhZmFiX2RldGVybWluZV9sdW4odXMsIGluZm8pOworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwl0b3RhbGxlbiA9IHNlY3RvcnMgKiBpbmZvLT5zc2l6ZTsKKworCS8vIFNpbmNlIHdlIGRvbid0IHJlYWQgbW9yZSB0aGFuIDY0IEtCIGF0IGEgdGltZSwgd2UgaGF2ZSB0byBjcmVhdGUKKwkvLyBhIGJvdW5jZSBidWZmZXIgYW5kIG1vdmUgdGhlIGRhdGEgYSBwaWVjZSBhdCBhIHRpbWUgYmV0d2VlbiB0aGUKKwkvLyBib3VuY2UgYnVmZmVyIGFuZCB0aGUgYWN0dWFsIHRyYW5zZmVyIGJ1ZmZlci4KKworCWFsbG9jbGVuID0gbWluKHRvdGFsbGVuLCA2NTUzNnUpOworCWJ1ZmZlciA9IGttYWxsb2MoYWxsb2NsZW4sIEdGUF9OT0lPKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlkbyB7CisJCS8vIGxvb3AsIG5ldmVyIGFsbG9jYXRlIG9yIHRyYW5zZmVyIG1vcmUgdGhhbiA2NGsgYXQgb25jZQorCQkvLyAobWluKDEyOGssIDI1NSppbmZvLT5zc2l6ZSkgaXMgdGhlIHJlYWwgbGltaXQpCisKKwkJbGVuID0gbWluKHRvdGFsbGVuLCBhbGxvY2xlbik7CisJCXRoaXN0aW1lID0gKGxlbiAvIGluZm8tPnNzaXplKSAmIDB4ZmY7CisKKwkJY29tbWFuZFswXSA9IDA7CisJCWNvbW1hbmRbMV0gPSB0aGlzdGltZTsKKwkJY29tbWFuZFsyXSA9IHNlY3RvciAmIDB4RkY7CisJCWNvbW1hbmRbM10gPSAoc2VjdG9yID4+IDgpICYgMHhGRjsKKwkJY29tbWFuZFs0XSA9IChzZWN0b3IgPj4gMTYpICYgMHhGRjsKKworCQljb21tYW5kWzVdID0gMHhFMCArIChpbmZvLT5sdW4gPDwgNCk7CisJCWNvbW1hbmRbNV0gfD0gKHNlY3RvciA+PiAyNCkgJiAweDBGOworCQljb21tYW5kWzZdID0gMHgyMDsKKwkJY29tbWFuZFs3XSA9IDB4MDE7CisKKwkJLy8gc2VuZCB0aGUgcmVhZCBjb21tYW5kCisJCXJlc3VsdCA9IGRhdGFmYWJfYnVsa193cml0ZSh1cywgY29tbWFuZCwgOCk7CisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJZ290byBsZWF2ZTsKKworCQkvLyByZWFkIHRoZSByZXN1bHQKKwkJcmVzdWx0ID0gZGF0YWZhYl9idWxrX3JlYWQodXMsIGJ1ZmZlciwgbGVuKTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlnb3RvIGxlYXZlOworCisJCS8vIFN0b3JlIHRoZSBkYXRhIGluIHRoZSB0cmFuc2ZlciBidWZmZXIKKwkJdXNiX3N0b3JfYWNjZXNzX3hmZXJfYnVmKGJ1ZmZlciwgbGVuLCB1cy0+c3JiLAorCQkJCSAmc2dfaWR4LCAmc2dfb2Zmc2V0LCBUT19YRkVSX0JVRik7CisKKwkJc2VjdG9yICs9IHRoaXN0aW1lOworCQl0b3RhbGxlbiAtPSBsZW47CisJfSB3aGlsZSAodG90YWxsZW4gPiAwKTsKKworCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCisgbGVhdmU6CisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworfQorCisKK3N0YXRpYyBpbnQgZGF0YWZhYl93cml0ZV9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCSAgICAgIHN0cnVjdCBkYXRhZmFiX2luZm8gKmluZm8sCisJCQkgICAgICB1MzIgc2VjdG9yLAorCQkJICAgICAgdTMyIHNlY3RvcnMpCit7CisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKwl1bnNpZ25lZCBjaGFyICpyZXBseSA9IHVzLT5pb2J1ZjsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJdW5zaWduZWQgY2hhciB0aGlzdGltZTsKKwl1bnNpZ25lZCBpbnQgdG90YWxsZW4sIGFsbG9jbGVuOworCWludCBsZW4sIHJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgc2dfaWR4ID0gMCwgc2dfb2Zmc2V0ID0gMDsKKworCS8vIHdlJ3JlIHdvcmtpbmcgaW4gTEJBIG1vZGUuICBhY2NvcmRpbmcgdG8gdGhlIEFUQSBzcGVjLCAKKwkvLyB3ZSBjYW4gc3VwcG9ydCB1cCB0byAyOC1iaXQgYWRkcmVzc2luZy4gIEkgZG9uJ3Qga25vdyBpZiBEYXRhZmFiCisJLy8gc3VwcG9ydHMgYmV5b25kIDI0LWJpdCBhZGRyZXNzaW5nLiAgSXQncyBraW5kIG9mIGhhcmQgdG8gdGVzdCAKKwkvLyBzaW5jZSBpdCByZXF1aXJlcyA+IDhHQiBDRiBjYXJkLgorCS8vCisJaWYgKHNlY3RvcnMgPiAweDBGRkZGRkZGKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJaWYgKGluZm8tPmx1biA9PSAtMSkgeworCQlyZXN1bHQgPSBkYXRhZmFiX2RldGVybWluZV9sdW4odXMsIGluZm8pOworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwl0b3RhbGxlbiA9IHNlY3RvcnMgKiBpbmZvLT5zc2l6ZTsKKworCS8vIFNpbmNlIHdlIGRvbid0IHdyaXRlIG1vcmUgdGhhbiA2NCBLQiBhdCBhIHRpbWUsIHdlIGhhdmUgdG8gY3JlYXRlCisJLy8gYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2UgYXQgYSB0aW1lIGJldHdlZW4gdGhlCisJLy8gYm91bmNlIGJ1ZmZlciBhbmQgdGhlIGFjdHVhbCB0cmFuc2ZlciBidWZmZXIuCisKKwlhbGxvY2xlbiA9IG1pbih0b3RhbGxlbiwgNjU1MzZ1KTsKKwlidWZmZXIgPSBrbWFsbG9jKGFsbG9jbGVuLCBHRlBfTk9JTyk7CisJaWYgKGJ1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJZG8geworCQkvLyBsb29wLCBuZXZlciBhbGxvY2F0ZSBvciB0cmFuc2ZlciBtb3JlIHRoYW4gNjRrIGF0IG9uY2UKKwkJLy8gKG1pbigxMjhrLCAyNTUqaW5mby0+c3NpemUpIGlzIHRoZSByZWFsIGxpbWl0KQorCisJCWxlbiA9IG1pbih0b3RhbGxlbiwgYWxsb2NsZW4pOworCQl0aGlzdGltZSA9IChsZW4gLyBpbmZvLT5zc2l6ZSkgJiAweGZmOworCisJCS8vIEdldCB0aGUgZGF0YSBmcm9tIHRoZSB0cmFuc2ZlciBidWZmZXIKKwkJdXNiX3N0b3JfYWNjZXNzX3hmZXJfYnVmKGJ1ZmZlciwgbGVuLCB1cy0+c3JiLAorCQkJCSZzZ19pZHgsICZzZ19vZmZzZXQsIEZST01fWEZFUl9CVUYpOworCisJCWNvbW1hbmRbMF0gPSAwOworCQljb21tYW5kWzFdID0gdGhpc3RpbWU7CisJCWNvbW1hbmRbMl0gPSBzZWN0b3IgJiAweEZGOworCQljb21tYW5kWzNdID0gKHNlY3RvciA+PiA4KSAmIDB4RkY7CisJCWNvbW1hbmRbNF0gPSAoc2VjdG9yID4+IDE2KSAmIDB4RkY7CisKKwkJY29tbWFuZFs1XSA9IDB4RTAgKyAoaW5mby0+bHVuIDw8IDQpOworCQljb21tYW5kWzVdIHw9IChzZWN0b3IgPj4gMjQpICYgMHgwRjsKKwkJY29tbWFuZFs2XSA9IDB4MzA7CisJCWNvbW1hbmRbN10gPSAweDAyOworCisJCS8vIHNlbmQgdGhlIGNvbW1hbmQKKwkJcmVzdWx0ID0gZGF0YWZhYl9idWxrX3dyaXRlKHVzLCBjb21tYW5kLCA4KTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlnb3RvIGxlYXZlOworCisJCS8vIHNlbmQgdGhlIGRhdGEKKwkJcmVzdWx0ID0gZGF0YWZhYl9idWxrX3dyaXRlKHVzLCBidWZmZXIsIGxlbik7CisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJZ290byBsZWF2ZTsKKworCQkvLyByZWFkIHRoZSByZXN1bHQKKwkJcmVzdWx0ID0gZGF0YWZhYl9idWxrX3JlYWQodXMsIHJlcGx5LCAyKTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlnb3RvIGxlYXZlOworCisJCWlmIChyZXBseVswXSAhPSAweDUwICYmIHJlcGx5WzFdICE9IDApIHsKKwkJCVVTX0RFQlVHUCgiZGF0YWZhYl93cml0ZV9kYXRhOiAgR2FoISAiCisJCQkJICAid3JpdGUgcmV0dXJuIGNvZGU6ICUwMnggJTAyeFxuIiwKKwkJCQkgIHJlcGx5WzBdLCByZXBseVsxXSk7CisJCQlyZXN1bHQgPSBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCQlnb3RvIGxlYXZlOworCQl9CisKKwkJc2VjdG9yICs9IHRoaXN0aW1lOworCQl0b3RhbGxlbiAtPSBsZW47CisJfSB3aGlsZSAodG90YWxsZW4gPiAwKTsKKworCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCisgbGVhdmU6CisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworfQorCisKK3N0YXRpYyBpbnQgZGF0YWZhYl9kZXRlcm1pbmVfbHVuKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCQkgc3RydWN0IGRhdGFmYWJfaW5mbyAqaW5mbykKK3sKKwkvLyBEdWFsLXNsb3QgcmVhZGVycyBjYW4gYmUgdGhvdWdodCBvZiBhcyBkdWFsLUxVTiBkZXZpY2VzLgorCS8vIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGNhcmQgc2xvdCBpcyBiZWluZyB1c2VkLgorCS8vIFdlJ2xsIHNlbmQgYW4gSURFTlRJRlkgREVWSUNFIGNvbW1hbmQgYW5kIHNlZSB3aGljaCBMVU4gcmVzcG9uZHMuLi4KKwkvLworCS8vIFRoZXJlIG1pZ2h0IGJlIGEgYmV0dGVyIHdheSBvZiBkb2luZyB0aGlzPworCisJc3RhdGljIHVuc2lnbmVkIGNoYXIgc2NvbW1hbmRbOF0gPSB7IDAsIDEsIDAsIDAsIDAsIDB4YTAsIDB4ZWMsIDEgfTsKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwlpbnQgY291bnQgPSAwLCByYzsKKworCWlmICghdXMgfHwgIWluZm8pCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwltZW1jcHkoY29tbWFuZCwgc2NvbW1hbmQsIDgpOworCWJ1ZiA9IGttYWxsb2MoNTEyLCBHRlBfTk9JTyk7CisJaWYgKCFidWYpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlVU19ERUJVR1AoImRhdGFmYWJfZGV0ZXJtaW5lX2x1bjogIGxvY2F0aW5nLi4uXG4iKTsKKworCS8vIHdlJ2xsIHRyeSAzIHRpbWVzIGJlZm9yZSBnaXZpbmcgdXAuLi4KKwkvLworCXdoaWxlIChjb3VudCsrIDwgMykgeworCQljb21tYW5kWzVdID0gMHhhMDsKKworCQlyYyA9IGRhdGFmYWJfYnVsa193cml0ZSh1cywgY29tbWFuZCwgOCk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJCXJjID0gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQkJZ290byBsZWF2ZTsKKwkJfQorCisJCXJjID0gZGF0YWZhYl9idWxrX3JlYWQodXMsIGJ1ZiwgNTEyKTsKKwkJaWYgKHJjID09IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQkJaW5mby0+bHVuID0gMDsKKwkJCXJjID0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJCQlnb3RvIGxlYXZlOworCQl9CisKKwkJY29tbWFuZFs1XSA9IDB4YjA7CisKKwkJcmMgPSBkYXRhZmFiX2J1bGtfd3JpdGUodXMsIGNvbW1hbmQsIDgpOworCQlpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCQlyYyA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJCWdvdG8gbGVhdmU7CisJCX0KKworCQlyYyA9IGRhdGFmYWJfYnVsa19yZWFkKHVzLCBidWYsIDUxMik7CisJCWlmIChyYyA9PSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJCWluZm8tPmx1biA9IDE7CisJCQlyYyA9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCQkJZ290byBsZWF2ZTsKKwkJfQorCisJCW1zbGVlcCgyMCk7CisJfQorCisJcmMgPSBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKyBsZWF2ZToKKwlrZnJlZShidWYpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBkYXRhZmFiX2lkX2RldmljZShzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkgICAgIHN0cnVjdCBkYXRhZmFiX2luZm8gKmluZm8pCit7CisJLy8gdGhpcyBpcyBhIHZhcmlhdGlvbiBvZiB0aGUgQVRBICJJREVOVElGWSBERVZJQ0UiIGNvbW1hbmQuLi5hY2NvcmRpbmcKKwkvLyB0byB0aGUgQVRBIHNwZWMsICdTZWN0b3IgQ291bnQnIGlzbid0IHVzZWQgYnV0IHRoZSBXaW5kb3dzIGRyaXZlcgorCS8vIHNldHMgdGhpcyBiaXQgc28gd2UgZG8gdG9vLi4uCisJLy8KKwlzdGF0aWMgdW5zaWduZWQgY2hhciBzY29tbWFuZFs4XSA9IHsgMCwgMSwgMCwgMCwgMCwgMHhhMCwgMHhlYywgMSB9OworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJdW5zaWduZWQgY2hhciAqcmVwbHk7CisJaW50IHJjOworCisJaWYgKCF1cyB8fCAhaW5mbykKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCWlmIChpbmZvLT5sdW4gPT0gLTEpIHsKKwkJcmMgPSBkYXRhZmFiX2RldGVybWluZV9sdW4odXMsIGluZm8pOworCQlpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCQlyZXR1cm4gcmM7CisJfQorCisJbWVtY3B5KGNvbW1hbmQsIHNjb21tYW5kLCA4KTsKKwlyZXBseSA9IGttYWxsb2MoNTEyLCBHRlBfTk9JTyk7CisJaWYgKCFyZXBseSkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCWNvbW1hbmRbNV0gKz0gKGluZm8tPmx1biA8PCA0KTsKKworCXJjID0gZGF0YWZhYl9idWxrX3dyaXRlKHVzLCBjb21tYW5kLCA4KTsKKwlpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCXJjID0gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQlnb3RvIGxlYXZlOworCX0KKworCS8vIHdlJ2xsIGdvIGFoZWFkIGFuZCBleHRyYWN0IHRoZSBtZWRpYSBjYXBhY2l0eSB3aGlsZSB3ZSdyZSBoZXJlLi4uCisJLy8KKwlyYyA9IGRhdGFmYWJfYnVsa19yZWFkKHVzLCByZXBseSwgNTEyKTsKKwlpZiAocmMgPT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCS8vIGNhcGFjaXR5IGlzIGF0IHdvcmQgb2Zmc2V0IDU3LTU4CisJCS8vCisJCWluZm8tPnNlY3RvcnMgPSAoKHUzMikocmVwbHlbMTE3XSkgPDwgMjQpIHwgCisJCQkJKCh1MzIpKHJlcGx5WzExNl0pIDw8IDE2KSB8CisJCQkJKCh1MzIpKHJlcGx5WzExNV0pIDw8ICA4KSB8IAorCQkJCSgodTMyKShyZXBseVsxMTRdKSAgICAgICk7CisJCXJjID0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJCWdvdG8gbGVhdmU7CisJfQorCisJcmMgPSBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKyBsZWF2ZToKKwlrZnJlZShyZXBseSk7CisJcmV0dXJuIHJjOworfQorCisKK3N0YXRpYyBpbnQgZGF0YWZhYl9oYW5kbGVfbW9kZV9zZW5zZShzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkJICAgICBzdHJ1Y3Qgc2NzaV9jbW5kICogc3JiLCAKKwkJCQkgICAgIGludCBzZW5zZV82KQoreworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIHJ3X2Vycl9wYWdlWzEyXSA9IHsKKwkJMHgxLCAweEEsIDB4MjEsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAKKwl9OworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGNhY2hlX3BhZ2VbMTJdID0geworCQkweDgsIDB4QSwgMHgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCisJfTsKKwlzdGF0aWMgdW5zaWduZWQgY2hhciByYmFjX3BhZ2VbMTJdID0geworCQkweDFCLCAweEEsIDAsIDB4ODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKKwl9OworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIHRpbWVyX3BhZ2VbOF0gPSB7CisJCTB4MUMsIDB4NiwgMCwgMCwgMCwgMAorCX07CisJdW5zaWduZWQgY2hhciBwYywgcGFnZV9jb2RlOworCXVuc2lnbmVkIGludCBpID0gMDsKKwlzdHJ1Y3QgZGF0YWZhYl9pbmZvICppbmZvID0gKHN0cnVjdCBkYXRhZmFiX2luZm8gKikgKHVzLT5leHRyYSk7CisJdW5zaWduZWQgY2hhciAqcHRyID0gdXMtPmlvYnVmOworCisJLy8gbW9zdCBvZiB0aGlzIHN0dWZmIGlzIGp1c3QgYSBoYWNrIHRvIGdldCB0aGluZ3Mgd29ya2luZy4gIHRoZQorCS8vIGRhdGFmYWIgcmVhZGVyIGRvZXNuJ3QgcHJlc2VudCBhIFNDU0kgaW50ZXJmYWNlIHNvIHdlCisJLy8gZnVkZ2UgdGhlIFNDU0kgY29tbWFuZHMuLi4KKwkvLworCisJcGMgPSBzcmItPmNtbmRbMl0gPj4gNjsKKwlwYWdlX2NvZGUgPSBzcmItPmNtbmRbMl0gJiAweDNGOworCisJc3dpdGNoIChwYykgeworCSAgIGNhc2UgMHgwOgorCQlVU19ERUJVR1AoImRhdGFmYWJfaGFuZGxlX21vZGVfc2Vuc2U6ICBDdXJyZW50IHZhbHVlc1xuIik7CisJCWJyZWFrOworCSAgIGNhc2UgMHgxOgorCQlVU19ERUJVR1AoImRhdGFmYWJfaGFuZGxlX21vZGVfc2Vuc2U6ICBDaGFuZ2VhYmxlIHZhbHVlc1xuIik7CisJCWJyZWFrOworCSAgIGNhc2UgMHgyOgorCQlVU19ERUJVR1AoImRhdGFmYWJfaGFuZGxlX21vZGVfc2Vuc2U6ICBEZWZhdWx0IHZhbHVlc1xuIik7CisJCWJyZWFrOworCSAgIGNhc2UgMHgzOgorCQlVU19ERUJVR1AoImRhdGFmYWJfaGFuZGxlX21vZGVfc2Vuc2U6ICBTYXZlcyB2YWx1ZXNcbiIpOworCQlicmVhazsKKwl9CisKKwltZW1zZXQocHRyLCAwLCA4KTsKKwlpZiAoc2Vuc2VfNikgeworCQlwdHJbMl0gPSAweDAwOwkJLy8gV1AgZW5hYmxlOiAweDgwCisJCWkgPSA0OworCX0gZWxzZSB7CisJCXB0clszXSA9IDB4MDA7CQkvLyBXUCBlbmFibGU6IDB4ODAKKwkJaSA9IDg7CisJfQorCisJc3dpdGNoIChwYWdlX2NvZGUpIHsKKwkgICBkZWZhdWx0OgorCQkvLyB2ZW5kb3Itc3BlY2lmaWMgbW9kZQorCQlpbmZvLT5zZW5zZV9rZXkgPSAweDA1OworCQlpbmZvLT5zZW5zZV9hc2MgPSAweDI0OworCQlpbmZvLT5zZW5zZV9hc2NxID0gMHgwMDsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisKKwkgICBjYXNlIDB4MToKKwkJbWVtY3B5KHB0ciArIGksIHJ3X2Vycl9wYWdlLCBzaXplb2YocndfZXJyX3BhZ2UpKTsKKwkJaSArPSBzaXplb2YocndfZXJyX3BhZ2UpOworCQlicmVhazsKKworCSAgIGNhc2UgMHg4OgorCQltZW1jcHkocHRyICsgaSwgY2FjaGVfcGFnZSwgc2l6ZW9mKGNhY2hlX3BhZ2UpKTsKKwkJaSArPSBzaXplb2YoY2FjaGVfcGFnZSk7CisJCWJyZWFrOworCisJICAgY2FzZSAweDFCOgorCQltZW1jcHkocHRyICsgaSwgcmJhY19wYWdlLCBzaXplb2YocmJhY19wYWdlKSk7CisJCWkgKz0gc2l6ZW9mKHJiYWNfcGFnZSk7CisJCWJyZWFrOworCisJICAgY2FzZSAweDFDOgorCQltZW1jcHkocHRyICsgaSwgdGltZXJfcGFnZSwgc2l6ZW9mKHRpbWVyX3BhZ2UpKTsKKwkJaSArPSBzaXplb2YodGltZXJfcGFnZSk7CisJCWJyZWFrOworCisJICAgY2FzZSAweDNGOgkJLy8gcmV0cmlldmUgYWxsIHBhZ2VzCisJCW1lbWNweShwdHIgKyBpLCB0aW1lcl9wYWdlLCBzaXplb2YodGltZXJfcGFnZSkpOworCQlpICs9IHNpemVvZih0aW1lcl9wYWdlKTsKKwkJbWVtY3B5KHB0ciArIGksIHJiYWNfcGFnZSwgc2l6ZW9mKHJiYWNfcGFnZSkpOworCQlpICs9IHNpemVvZihyYmFjX3BhZ2UpOworCQltZW1jcHkocHRyICsgaSwgY2FjaGVfcGFnZSwgc2l6ZW9mKGNhY2hlX3BhZ2UpKTsKKwkJaSArPSBzaXplb2YoY2FjaGVfcGFnZSk7CisJCW1lbWNweShwdHIgKyBpLCByd19lcnJfcGFnZSwgc2l6ZW9mKHJ3X2Vycl9wYWdlKSk7CisJCWkgKz0gc2l6ZW9mKHJ3X2Vycl9wYWdlKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHNlbnNlXzYpCisJCXB0clswXSA9IGkgLSAxOworCWVsc2UKKwkJKChfX2JlMTYgKikgcHRyKVswXSA9IGNwdV90b19iZTE2KGkgLSAyKTsKKwl1c2Jfc3Rvcl9zZXRfeGZlcl9idWYocHRyLCBpLCBzcmIpOworCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCitzdGF0aWMgdm9pZCBkYXRhZmFiX2luZm9fZGVzdHJ1Y3Rvcih2b2lkICpleHRyYSkKK3sKKwkvLyB0aGlzIHJvdXRpbmUgaXMgYSBwbGFjZWhvbGRlci4uLgorCS8vIGN1cnJlbnRseSwgd2UgZG9uJ3QgYWxsb2NhdGUgYW55IGV4dHJhIG1lbW9yeSBzbyB3ZSdyZSBva2F5Cit9CisKKworLy8gVHJhbnNwb3J0IGZvciB0aGUgRGF0YWZhYiBNRENGRS1CCisvLworaW50IGRhdGFmYWJfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKiBzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlzdHJ1Y3QgZGF0YWZhYl9pbmZvICppbmZvOworCWludCByYzsKKwl1bnNpZ25lZCBsb25nIGJsb2NrLCBibG9ja3M7CisJdW5zaWduZWQgY2hhciAqcHRyID0gdXMtPmlvYnVmOworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGlucXVpcnlfcmVwbHlbOF0gPSB7CisJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MUYsIDB4MDAsIDB4MDAsIDB4MDAKKwl9OworCisJaWYgKCF1cy0+ZXh0cmEpIHsKKwkJdXMtPmV4dHJhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRhdGFmYWJfaW5mbyksIEdGUF9OT0lPKTsKKwkJaWYgKCF1cy0+ZXh0cmEpIHsKKwkJCVVTX0RFQlVHUCgiZGF0YWZhYl90cmFuc3BvcnQ6ICBHYWghICIKKwkJCQkgICJDYW4ndCBhbGxvY2F0ZSBzdG9yYWdlIGZvciBEYXRhZmFiIGluZm8gc3RydWN0IVxuIik7CisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQl9CisJCW1lbXNldCh1cy0+ZXh0cmEsIDAsIHNpemVvZihzdHJ1Y3QgZGF0YWZhYl9pbmZvKSk7CisJCXVzLT5leHRyYV9kZXN0cnVjdG9yID0gZGF0YWZhYl9pbmZvX2Rlc3RydWN0b3I7CisgIAkJKChzdHJ1Y3QgZGF0YWZhYl9pbmZvICopdXMtPmV4dHJhKS0+bHVuID0gLTE7CisJfQorCisJaW5mbyA9IChzdHJ1Y3QgZGF0YWZhYl9pbmZvICopICh1cy0+ZXh0cmEpOworCisJaWYgKHNyYi0+Y21uZFswXSA9PSBJTlFVSVJZKSB7CisJCVVTX0RFQlVHUCgiZGF0YWZhYl90cmFuc3BvcnQ6ICBJTlFVSVJZLiAgUmV0dXJuaW5nIGJvZ3VzIHJlc3BvbnNlIik7CisJCW1lbWNweShwdHIsIGlucXVpcnlfcmVwbHksIHNpemVvZihpbnF1aXJ5X3JlcGx5KSk7CisJCWZpbGxfaW5xdWlyeV9yZXNwb25zZSh1cywgcHRyLCAzNik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFJFQURfQ0FQQUNJVFkpIHsKKwkJaW5mby0+c3NpemUgPSAweDIwMDsgIC8vIGhhcmQgY29kZWQgNTEyIGJ5dGUgc2VjdG9ycyBhcyBwZXIgQVRBIHNwZWMKKwkJcmMgPSBkYXRhZmFiX2lkX2RldmljZSh1cywgaW5mbyk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCXJldHVybiByYzsKKworCQlVU19ERUJVR1AoImRhdGFmYWJfdHJhbnNwb3J0OiAgUkVBRF9DQVBBQ0lUWTogICVsZCBzZWN0b3JzLCAlbGQgYnl0ZXMgcGVyIHNlY3RvclxuIiwKKwkJCSAgaW5mby0+c2VjdG9ycywgaW5mby0+c3NpemUpOworCisJCS8vIGJ1aWxkIHRoZSByZXBseQorCQkvLyB3ZSBuZWVkIHRoZSBsYXN0IHNlY3Rvciwgbm90IHRoZSBudW1iZXIgb2Ygc2VjdG9ycworCQkoKF9fYmUzMiAqKSBwdHIpWzBdID0gY3B1X3RvX2JlMzIoaW5mby0+c2VjdG9ycyAtIDEpOworCQkoKF9fYmUzMiAqKSBwdHIpWzFdID0gY3B1X3RvX2JlMzIoaW5mby0+c3NpemUpOworCQl1c2Jfc3Rvcl9zZXRfeGZlcl9idWYocHRyLCA4LCBzcmIpOworCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IE1PREVfU0VMRUNUXzEwKSB7CisJCVVTX0RFQlVHUCgiZGF0YWZhYl90cmFuc3BvcnQ6ICBHYWghIE1PREVfU0VMRUNUXzEwLlxuIik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJLy8gZG9uJ3QgYm90aGVyIGltcGxlbWVudGluZyBSRUFEXzYgb3IgV1JJVEVfNi4KKwkvLworCWlmIChzcmItPmNtbmRbMF0gPT0gUkVBRF8xMCkgeworCQlibG9jayA9ICgodTMyKShzcmItPmNtbmRbMl0pIDw8IDI0KSB8ICgodTMyKShzcmItPmNtbmRbM10pIDw8IDE2KSB8CisJCQkoKHUzMikoc3JiLT5jbW5kWzRdKSA8PCAgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzVdKSk7CisKKwkJYmxvY2tzID0gKCh1MzIpKHNyYi0+Y21uZFs3XSkgPDwgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzhdKSk7CisKKwkJVVNfREVCVUdQKCJkYXRhZmFiX3RyYW5zcG9ydDogIFJFQURfMTA6IHJlYWQgYmxvY2sgMHglMDRseCAgY291bnQgJWxkXG4iLCBibG9jaywgYmxvY2tzKTsKKwkJcmV0dXJuIGRhdGFmYWJfcmVhZF9kYXRhKHVzLCBpbmZvLCBibG9jaywgYmxvY2tzKTsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFJFQURfMTIpIHsKKwkJLy8gd2UnbGwgcHJvYmFibHkgbmV2ZXIgc2VlIGEgUkVBRF8xMiBidXQgd2UnbGwgZG8gaXQgYW55d2F5Li4uCisJCS8vCisJCWJsb2NrID0gKCh1MzIpKHNyYi0+Y21uZFsyXSkgPDwgMjQpIHwgKCh1MzIpKHNyYi0+Y21uZFszXSkgPDwgMTYpIHwKKwkJCSgodTMyKShzcmItPmNtbmRbNF0pIDw8ICA4KSB8ICgodTMyKShzcmItPmNtbmRbNV0pKTsKKworCQlibG9ja3MgPSAoKHUzMikoc3JiLT5jbW5kWzZdKSA8PCAyNCkgfCAoKHUzMikoc3JiLT5jbW5kWzddKSA8PCAxNikgfAorCQkJICgodTMyKShzcmItPmNtbmRbOF0pIDw8ICA4KSB8ICgodTMyKShzcmItPmNtbmRbOV0pKTsKKworCQlVU19ERUJVR1AoImRhdGFmYWJfdHJhbnNwb3J0OiAgUkVBRF8xMjogcmVhZCBibG9jayAweCUwNGx4ICBjb3VudCAlbGRcbiIsIGJsb2NrLCBibG9ja3MpOworCQlyZXR1cm4gZGF0YWZhYl9yZWFkX2RhdGEodXMsIGluZm8sIGJsb2NrLCBibG9ja3MpOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gV1JJVEVfMTApIHsKKwkJYmxvY2sgPSAoKHUzMikoc3JiLT5jbW5kWzJdKSA8PCAyNCkgfCAoKHUzMikoc3JiLT5jbW5kWzNdKSA8PCAxNikgfAorCQkJKCh1MzIpKHNyYi0+Y21uZFs0XSkgPDwgIDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs1XSkpOworCisJCWJsb2NrcyA9ICgodTMyKShzcmItPmNtbmRbN10pIDw8IDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs4XSkpOworCisJCVVTX0RFQlVHUCgiZGF0YWZhYl90cmFuc3BvcnQ6ICBXUklURV8xMDogd3JpdGUgYmxvY2sgMHglMDRseCAgY291bnQgJWxkXG4iLCBibG9jaywgYmxvY2tzKTsKKwkJcmV0dXJuIGRhdGFmYWJfd3JpdGVfZGF0YSh1cywgaW5mbywgYmxvY2ssIGJsb2Nrcyk7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBXUklURV8xMikgeworCQkvLyB3ZSdsbCBwcm9iYWJseSBuZXZlciBzZWUgYSBXUklURV8xMiBidXQgd2UnbGwgZG8gaXQgYW55d2F5Li4uCisJCS8vCisJCWJsb2NrID0gKCh1MzIpKHNyYi0+Y21uZFsyXSkgPDwgMjQpIHwgKCh1MzIpKHNyYi0+Y21uZFszXSkgPDwgMTYpIHwKKwkJCSgodTMyKShzcmItPmNtbmRbNF0pIDw8ICA4KSB8ICgodTMyKShzcmItPmNtbmRbNV0pKTsKKworCQlibG9ja3MgPSAoKHUzMikoc3JiLT5jbW5kWzZdKSA8PCAyNCkgfCAoKHUzMikoc3JiLT5jbW5kWzddKSA8PCAxNikgfAorCQkJICgodTMyKShzcmItPmNtbmRbOF0pIDw8ICA4KSB8ICgodTMyKShzcmItPmNtbmRbOV0pKTsKKworCQlVU19ERUJVR1AoImRhdGFmYWJfdHJhbnNwb3J0OiAgV1JJVEVfMTI6IHdyaXRlIGJsb2NrIDB4JTA0bHggIGNvdW50ICVsZFxuIiwgYmxvY2ssIGJsb2Nrcyk7CisJCXJldHVybiBkYXRhZmFiX3dyaXRlX2RhdGEodXMsIGluZm8sIGJsb2NrLCBibG9ja3MpOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gVEVTVF9VTklUX1JFQURZKSB7CisJCVVTX0RFQlVHUCgiZGF0YWZhYl90cmFuc3BvcnQ6ICBURVNUX1VOSVRfUkVBRFkuXG4iKTsKKwkJcmV0dXJuIGRhdGFmYWJfaWRfZGV2aWNlKHVzLCBpbmZvKTsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UpIHsKKwkJVVNfREVCVUdQKCJkYXRhZmFiX3RyYW5zcG9ydDogIFJFUVVFU1RfU0VOU0UuICBSZXR1cm5pbmcgZmFrZWQgcmVzcG9uc2VcbiIpOworCisJCS8vIHRoaXMgcmVzcG9uc2UgaXMgcHJldHR5IGJvZ3VzIHJpZ2h0IG5vdy4gIGV2ZW50dWFsbHkgaWYgbmVjZXNzYXJ5CisJCS8vIHdlIGNhbiBzZXQgdGhlIGNvcnJlY3Qgc2Vuc2UgZGF0YS4gIHNvIGZhciB0aG91Z2ggaXQgaGFzbid0IGJlZW4KKwkJLy8gbmVjZXNzYXJ5CisJCS8vCisJCW1lbXNldChwdHIsIDAsIDE4KTsKKwkJcHRyWzBdID0gMHhGMDsKKwkJcHRyWzJdID0gaW5mby0+c2Vuc2Vfa2V5OworCQlwdHJbN10gPSAxMTsKKwkJcHRyWzEyXSA9IGluZm8tPnNlbnNlX2FzYzsKKwkJcHRyWzEzXSA9IGluZm8tPnNlbnNlX2FzY3E7CisJCXVzYl9zdG9yX3NldF94ZmVyX2J1ZihwdHIsIDE4LCBzcmIpOworCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IE1PREVfU0VOU0UpIHsKKwkJVVNfREVCVUdQKCJkYXRhZmFiX3RyYW5zcG9ydDogIE1PREVfU0VOU0VfNiBkZXRlY3RlZFxuIik7CisJCXJldHVybiBkYXRhZmFiX2hhbmRsZV9tb2RlX3NlbnNlKHVzLCBzcmIsIDEpOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gTU9ERV9TRU5TRV8xMCkgeworCQlVU19ERUJVR1AoImRhdGFmYWJfdHJhbnNwb3J0OiAgTU9ERV9TRU5TRV8xMCBkZXRlY3RlZFxuIik7CisJCXJldHVybiBkYXRhZmFiX2hhbmRsZV9tb2RlX3NlbnNlKHVzLCBzcmIsIDApOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gQUxMT1dfTUVESVVNX1JFTU9WQUwpIHsKKwkJLy8gc3VyZS4gIHdoYXRldmVyLiAgbm90IGxpa2Ugd2UgY2FuIHN0b3AgdGhlIHVzZXIgZnJvbQorCQkvLyBwb3BwaW5nIHRoZSBtZWRpYSBvdXQgb2YgdGhlIGRldmljZSAobm8gbG9ja2luZyBkb29ycywgZXRjKQorCQkvLworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBTVEFSVF9TVE9QKSB7CisJCS8qIHRoaXMgaXMgdXNlZCBieSBzZC5jJ2NoZWNrX3Njc2lkaXNrX21lZGlhX2NoYW5nZSB0byBkZXRlY3QKKwkJICAgbWVkaWEgY2hhbmdlICovCisJCVVTX0RFQlVHUCgiZGF0YWZhYl90cmFuc3BvcnQ6ICBTVEFSVF9TVE9QLlxuIik7CisJCS8qIHRoZSBmaXJzdCBkYXRhZmFiX2lkX2RldmljZSBhZnRlciBhIG1lZGlhIGNoYW5nZSByZXR1cm5zCisJCSAgIGFuIGVycm9yIChkZXRlcm1pbmVkIGV4cGVyaW1lbnRhbGx5KSAqLworCQlyYyA9IGRhdGFmYWJfaWRfZGV2aWNlKHVzLCBpbmZvKTsKKwkJaWYgKHJjID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSB7CisJCQlpbmZvLT5zZW5zZV9rZXkgPSBOT19TRU5TRTsKKwkJCXNyYi0+cmVzdWx0ID0gU1VDQ0VTUzsKKwkJfSBlbHNlIHsKKwkJCWluZm8tPnNlbnNlX2tleSA9IFVOSVRfQVRURU5USU9OOworCQkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CisJCX0KKwkJcmV0dXJuIHJjOworCX0KKworCVVTX0RFQlVHUCgiZGF0YWZhYl90cmFuc3BvcnQ6ICBHYWghIFVua25vd24gY29tbWFuZDogJWQgKDB4JXgpXG4iLAorCQkgIHNyYi0+Y21uZFswXSwgc3JiLT5jbW5kWzBdKTsKKwlpbmZvLT5zZW5zZV9rZXkgPSAweDA1OworCWluZm8tPnNlbnNlX2FzYyA9IDB4MjA7CisJaW5mby0+c2Vuc2VfYXNjcSA9IDB4MDA7CisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RhdGFmYWIuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZTNmMjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2RhdGFmYWIuaApAQCAtMCwwICsxLDQwIEBACisvKiBEcml2ZXIgZm9yIERhdGFmYWIgTURDRkUtQiBVU0IgQ29tcGFjdCBGbGFzaCByZWFkZXIKKyAqIEhlYWRlciBGaWxlCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAyMDAwIEppbW1pZSBNYXlmaWVsZCAobWF5ZmllbGQrZGF0YWZhYkBzYWNraGVhZHMub3JnKQorICoKKyAqIFNlZSBkYXRhZmFiLmMgZm9yIG1vcmUgZXhwbGFuYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9VU0JfREFUQUZBQl9NRENGRV9CX0gKKyNkZWZpbmUgX1VTQl9EQVRBRkFCX01EQ0ZFX0JfSAorCitleHRlcm4gaW50IGRhdGFmYWJfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKKworc3RydWN0IGRhdGFmYWJfaW5mbyB7CisJdW5zaWduZWQgbG9uZyAgIHNlY3RvcnM7CS8vIHRvdGFsIHNlY3RvciBjb3VudAorCXVuc2lnbmVkIGxvbmcgICBzc2l6ZTsJCS8vIHNlY3RvciBzaXplIGluIGJ5dGVzCisJc2lnbmVkIGNoYXIJbHVuOwkJLy8gdXNlZCBmb3IgZHVhbC1zbG90IHJlYWRlcnMKKwkKKwkvLyB0aGUgZm9sbG93aW5nIGFyZW4ndCB1c2VkIHlldAorCXVuc2lnbmVkIGNoYXIgICBzZW5zZV9rZXk7CisJdW5zaWduZWQgbG9uZyAgIHNlbnNlX2FzYzsJLy8gYWRkaXRpb25hbCBzZW5zZSBjb2RlCisJdW5zaWduZWQgbG9uZyAgIHNlbnNlX2FzY3E7CS8vIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9kZWJ1Zy5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NjQ4MzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2RlYnVnLmMKQEAgLTAsMCArMSwxNzcgQEAKKy8qIERyaXZlciBmb3IgVVNCIE1hc3MgU3RvcmFnZSBjb21wbGlhbnQgZGV2aWNlcworICogRGVidWdnaW5nIEZ1bmN0aW9ucyBTb3VyY2UgQ29kZSBGaWxlCisgKgorICogJElkOiBkZWJ1Zy5jLHYgMS45IDIwMDIvMDQvMjIgMDM6Mzk6NDMgbWRoYXJtIEV4cCAkCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAxOTk5LTIwMDIgTWF0dGhldyBEaGFybSAobWRoYXJtLXVzYkBvbmUtZXllZC1hbGllbi5uZXQpCisgKgorICogRGV2ZWxvcGVkIHdpdGggdGhlIGFzc2lzdGFuY2Ugb2Y6CisgKiAgIChjKSAyMDAyIEFsYW4gU3Rlcm4gPHN0ZXJuQHJvd2xhbmQub3JnPgorICoKKyAqIEluaXRpYWwgd29yayBieToKKyAqICAgKGMpIDE5OTkgTWljaGFlbCBHZWUgKG1pY2hhZWxAbGludXhzcGVjaWZpYy5jb20pCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlICdVU0IgTWFzcyBTdG9yYWdlIENsYXNzJyBkb2N1bWVudC4gVGhpcworICogZGVzY3JpYmVzIGluIGRldGFpbCB0aGUgcHJvdG9jb2wgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHN1Y2gKKyAqIGRldmljZXMuICBDbGVhcmx5LCB0aGUgZGVzaWduZXJzIGhhZCBTQ1NJIGFuZCBBVEFQSSBjb21tYW5kcyBpbgorICogbWluZCB3aGVuIHRoZXkgY3JlYXRlZCB0aGlzIGRvY3VtZW50LiAgVGhlIGNvbW1hbmRzIGFyZSBhbGwgdmVyeQorICogc2ltaWxhciB0byBjb21tYW5kcyBpbiB0aGUgU0NTSS1JSSBhbmQgQVRBUEkgc3BlY2lmaWNhdGlvbnMuCisgKgorICogSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBpbiBhIG51bWJlciBvZiBjYXNlcyB0aGlzIGNsYXNzCisgKiBleGhpYml0cyBjbGFzcy1zcGVjaWZpYyBleGVtcHRpb25zIGZyb20gdGhlIFVTQiBzcGVjaWZpY2F0aW9uLgorICogTm90YWJseSB0aGUgdXNhZ2Ugb2YgTkFLLCBTVEFMTCBhbmQgQUNLIGRpZmZlcnMgZnJvbSB0aGUgbm9ybSwgaW4KKyAqIHRoYXQgdGhleSBhcmUgdXNlZCB0byBjb21tdW5pY2F0ZSB3YWl0LCBmYWlsZWQgYW5kIE9LIG9uIGNvbW1hbmRzLgorICoKKyAqIEFsc28sIGZvciBjZXJ0YWluIGRldmljZXMsIHRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQgaXMgdXNlZCB0byBjb252ZXkKKyAqIHN0YXR1cyBvZiBhIGNvbW1hbmQuCisgKgorICogUGxlYXNlIHNlZSBodHRwOi8vd3d3Lm9uZS1leWVkLWFsaWVuLm5ldC9+bWRoYXJtL2xpbnV4LXVzYiBmb3IgbW9yZQorICogaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBkcml2ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nkcm9tLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKworI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAic2NzaS5oIgorCisKK3ZvaWQgdXNiX3N0b3Jfc2hvd19jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKnNyYikKK3sKKwljaGFyICp3aGF0ID0gTlVMTDsKKwlpbnQgaTsKKworCXN3aXRjaCAoc3JiLT5jbW5kWzBdKSB7CisJY2FzZSBURVNUX1VOSVRfUkVBRFk6IHdoYXQgPSAiVEVTVF9VTklUX1JFQURZIjsgYnJlYWs7CisJY2FzZSBSRVpFUk9fVU5JVDogd2hhdCA9ICJSRVpFUk9fVU5JVCI7IGJyZWFrOworCWNhc2UgUkVRVUVTVF9TRU5TRTogd2hhdCA9ICJSRVFVRVNUX1NFTlNFIjsgYnJlYWs7CisJY2FzZSBGT1JNQVRfVU5JVDogd2hhdCA9ICJGT1JNQVRfVU5JVCI7IGJyZWFrOworCWNhc2UgUkVBRF9CTE9DS19MSU1JVFM6IHdoYXQgPSAiUkVBRF9CTE9DS19MSU1JVFMiOyBicmVhazsKKwljYXNlIFJFQVNTSUdOX0JMT0NLUzogd2hhdCA9ICJSRUFTU0lHTl9CTE9DS1MiOyBicmVhazsKKwljYXNlIFJFQURfNjogd2hhdCA9ICJSRUFEXzYiOyBicmVhazsKKwljYXNlIFdSSVRFXzY6IHdoYXQgPSAiV1JJVEVfNiI7IGJyZWFrOworCWNhc2UgU0VFS182OiB3aGF0ID0gIlNFRUtfNiI7IGJyZWFrOworCWNhc2UgUkVBRF9SRVZFUlNFOiB3aGF0ID0gIlJFQURfUkVWRVJTRSI7IGJyZWFrOworCWNhc2UgV1JJVEVfRklMRU1BUktTOiB3aGF0ID0gIldSSVRFX0ZJTEVNQVJLUyI7IGJyZWFrOworCWNhc2UgU1BBQ0U6IHdoYXQgPSAiU1BBQ0UiOyBicmVhazsKKwljYXNlIElOUVVJUlk6IHdoYXQgPSAiSU5RVUlSWSI7IGJyZWFrOworCWNhc2UgUkVDT1ZFUl9CVUZGRVJFRF9EQVRBOiB3aGF0ID0gIlJFQ09WRVJfQlVGRkVSRURfREFUQSI7IGJyZWFrOworCWNhc2UgTU9ERV9TRUxFQ1Q6IHdoYXQgPSAiTU9ERV9TRUxFQ1QiOyBicmVhazsKKwljYXNlIFJFU0VSVkU6IHdoYXQgPSAiUkVTRVJWRSI7IGJyZWFrOworCWNhc2UgUkVMRUFTRTogd2hhdCA9ICJSRUxFQVNFIjsgYnJlYWs7CisJY2FzZSBDT1BZOiB3aGF0ID0gIkNPUFkiOyBicmVhazsKKwljYXNlIEVSQVNFOiB3aGF0ID0gIkVSQVNFIjsgYnJlYWs7CisJY2FzZSBNT0RFX1NFTlNFOiB3aGF0ID0gIk1PREVfU0VOU0UiOyBicmVhazsKKwljYXNlIFNUQVJUX1NUT1A6IHdoYXQgPSAiU1RBUlRfU1RPUCI7IGJyZWFrOworCWNhc2UgUkVDRUlWRV9ESUFHTk9TVElDOiB3aGF0ID0gIlJFQ0VJVkVfRElBR05PU1RJQyI7IGJyZWFrOworCWNhc2UgU0VORF9ESUFHTk9TVElDOiB3aGF0ID0gIlNFTkRfRElBR05PU1RJQyI7IGJyZWFrOworCWNhc2UgQUxMT1dfTUVESVVNX1JFTU9WQUw6IHdoYXQgPSAiQUxMT1dfTUVESVVNX1JFTU9WQUwiOyBicmVhazsKKwljYXNlIFNFVF9XSU5ET1c6IHdoYXQgPSAiU0VUX1dJTkRPVyI7IGJyZWFrOworCWNhc2UgUkVBRF9DQVBBQ0lUWTogd2hhdCA9ICJSRUFEX0NBUEFDSVRZIjsgYnJlYWs7CisJY2FzZSBSRUFEXzEwOiB3aGF0ID0gIlJFQURfMTAiOyBicmVhazsKKwljYXNlIFdSSVRFXzEwOiB3aGF0ID0gIldSSVRFXzEwIjsgYnJlYWs7CisJY2FzZSBTRUVLXzEwOiB3aGF0ID0gIlNFRUtfMTAiOyBicmVhazsKKwljYXNlIFdSSVRFX1ZFUklGWTogd2hhdCA9ICJXUklURV9WRVJJRlkiOyBicmVhazsKKwljYXNlIFZFUklGWTogd2hhdCA9ICJWRVJJRlkiOyBicmVhazsKKwljYXNlIFNFQVJDSF9ISUdIOiB3aGF0ID0gIlNFQVJDSF9ISUdIIjsgYnJlYWs7CisJY2FzZSBTRUFSQ0hfRVFVQUw6IHdoYXQgPSAiU0VBUkNIX0VRVUFMIjsgYnJlYWs7CisJY2FzZSBTRUFSQ0hfTE9XOiB3aGF0ID0gIlNFQVJDSF9MT1ciOyBicmVhazsKKwljYXNlIFNFVF9MSU1JVFM6IHdoYXQgPSAiU0VUX0xJTUlUUyI7IGJyZWFrOworCWNhc2UgUkVBRF9QT1NJVElPTjogd2hhdCA9ICJSRUFEX1BPU0lUSU9OIjsgYnJlYWs7CisJY2FzZSBTWU5DSFJPTklaRV9DQUNIRTogd2hhdCA9ICJTWU5DSFJPTklaRV9DQUNIRSI7IGJyZWFrOworCWNhc2UgTE9DS19VTkxPQ0tfQ0FDSEU6IHdoYXQgPSAiTE9DS19VTkxPQ0tfQ0FDSEUiOyBicmVhazsKKwljYXNlIFJFQURfREVGRUNUX0RBVEE6IHdoYXQgPSAiUkVBRF9ERUZFQ1RfREFUQSI7IGJyZWFrOworCWNhc2UgTUVESVVNX1NDQU46IHdoYXQgPSAiTUVESVVNX1NDQU4iOyBicmVhazsKKwljYXNlIENPTVBBUkU6IHdoYXQgPSAiQ09NUEFSRSI7IGJyZWFrOworCWNhc2UgQ09QWV9WRVJJRlk6IHdoYXQgPSAiQ09QWV9WRVJJRlkiOyBicmVhazsKKwljYXNlIFdSSVRFX0JVRkZFUjogd2hhdCA9ICJXUklURV9CVUZGRVIiOyBicmVhazsKKwljYXNlIFJFQURfQlVGRkVSOiB3aGF0ID0gIlJFQURfQlVGRkVSIjsgYnJlYWs7CisJY2FzZSBVUERBVEVfQkxPQ0s6IHdoYXQgPSAiVVBEQVRFX0JMT0NLIjsgYnJlYWs7CisJY2FzZSBSRUFEX0xPTkc6IHdoYXQgPSAiUkVBRF9MT05HIjsgYnJlYWs7CisJY2FzZSBXUklURV9MT05HOiB3aGF0ID0gIldSSVRFX0xPTkciOyBicmVhazsKKwljYXNlIENIQU5HRV9ERUZJTklUSU9OOiB3aGF0ID0gIkNIQU5HRV9ERUZJTklUSU9OIjsgYnJlYWs7CisJY2FzZSBXUklURV9TQU1FOiB3aGF0ID0gIldSSVRFX1NBTUUiOyBicmVhazsKKwljYXNlIEdQQ01EX1JFQURfU1VCQ0hBTk5FTDogd2hhdCA9ICJSRUFEIFNVQkNIQU5ORUwiOyBicmVhazsKKwljYXNlIFJFQURfVE9DOiB3aGF0ID0gIlJFQURfVE9DIjsgYnJlYWs7CisJY2FzZSBHUENNRF9SRUFEX0hFQURFUjogd2hhdCA9ICJSRUFEIEhFQURFUiI7IGJyZWFrOworCWNhc2UgR1BDTURfUExBWV9BVURJT18xMDogd2hhdCA9ICJQTEFZIEFVRElPICgxMCkiOyBicmVhazsKKwljYXNlIEdQQ01EX1BMQVlfQVVESU9fTVNGOiB3aGF0ID0gIlBMQVkgQVVESU8gTVNGIjsgYnJlYWs7CisJY2FzZSBHUENNRF9HRVRfRVZFTlRfU1RBVFVTX05PVElGSUNBVElPTjoKKwkJd2hhdCA9ICJHRVQgRVZFTlQvU1RBVFVTIE5PVElGSUNBVElPTiI7IGJyZWFrOworCWNhc2UgR1BDTURfUEFVU0VfUkVTVU1FOiB3aGF0ID0gIlBBVVNFL1JFU1VNRSI7IGJyZWFrOworCWNhc2UgTE9HX1NFTEVDVDogd2hhdCA9ICJMT0dfU0VMRUNUIjsgYnJlYWs7CisJY2FzZSBMT0dfU0VOU0U6IHdoYXQgPSAiTE9HX1NFTlNFIjsgYnJlYWs7CisJY2FzZSBHUENNRF9TVE9QX1BMQVlfU0NBTjogd2hhdCA9ICJTVE9QIFBMQVkvU0NBTiI7IGJyZWFrOworCWNhc2UgR1BDTURfUkVBRF9ESVNDX0lORk86IHdoYXQgPSAiUkVBRCBESVNDIElORk9STUFUSU9OIjsgYnJlYWs7CisJY2FzZSBHUENNRF9SRUFEX1RSQUNLX1JaT05FX0lORk86CisJCXdoYXQgPSAiUkVBRCBUUkFDSyBJTkZPUk1BVElPTiI7IGJyZWFrOworCWNhc2UgR1BDTURfUkVTRVJWRV9SWk9ORV9UUkFDSzogd2hhdCA9ICJSRVNFUlZFIFRSQUNLIjsgYnJlYWs7CisJY2FzZSBHUENNRF9TRU5EX09QQzogd2hhdCA9ICJTRU5EIE9QQyI7IGJyZWFrOworCWNhc2UgTU9ERV9TRUxFQ1RfMTA6IHdoYXQgPSAiTU9ERV9TRUxFQ1RfMTAiOyBicmVhazsKKwljYXNlIEdQQ01EX1JFUEFJUl9SWk9ORV9UUkFDSzogd2hhdCA9ICJSRVBBSVIgVFJBQ0siOyBicmVhazsKKwljYXNlIDB4NTk6IHdoYXQgPSAiUkVBRCBNQVNURVIgQ1VFIjsgYnJlYWs7CisJY2FzZSBNT0RFX1NFTlNFXzEwOiB3aGF0ID0gIk1PREVfU0VOU0VfMTAiOyBicmVhazsKKwljYXNlIEdQQ01EX0NMT1NFX1RSQUNLOiB3aGF0ID0gIkNMT1NFIFRSQUNLL1NFU1NJT04iOyBicmVhazsKKwljYXNlIDB4NUM6IHdoYXQgPSAiUkVBRCBCVUZGRVIgQ0FQQUNJVFkiOyBicmVhazsKKwljYXNlIDB4NUQ6IHdoYXQgPSAiU0VORCBDVUUgU0hFRVQiOyBicmVhazsKKwljYXNlIEdQQ01EX0JMQU5LOiB3aGF0ID0gIkJMQU5LIjsgYnJlYWs7CisJY2FzZSBNT1ZFX01FRElVTTogd2hhdCA9ICJNT1ZFX01FRElVTSBvciBQTEFZIEFVRElPICgxMikiOyBicmVhazsKKwljYXNlIFJFQURfMTI6IHdoYXQgPSAiUkVBRF8xMiI7IGJyZWFrOworCWNhc2UgV1JJVEVfMTI6IHdoYXQgPSAiV1JJVEVfMTIiOyBicmVhazsKKwljYXNlIFdSSVRFX1ZFUklGWV8xMjogd2hhdCA9ICJXUklURV9WRVJJRllfMTIiOyBicmVhazsKKwljYXNlIFNFQVJDSF9ISUdIXzEyOiB3aGF0ID0gIlNFQVJDSF9ISUdIXzEyIjsgYnJlYWs7CisJY2FzZSBTRUFSQ0hfRVFVQUxfMTI6IHdoYXQgPSAiU0VBUkNIX0VRVUFMXzEyIjsgYnJlYWs7CisJY2FzZSBTRUFSQ0hfTE9XXzEyOiB3aGF0ID0gIlNFQVJDSF9MT1dfMTIiOyBicmVhazsKKwljYXNlIFNFTkRfVk9MVU1FX1RBRzogd2hhdCA9ICJTRU5EX1ZPTFVNRV9UQUciOyBicmVhazsKKwljYXNlIFJFQURfRUxFTUVOVF9TVEFUVVM6IHdoYXQgPSAiUkVBRF9FTEVNRU5UX1NUQVRVUyI7IGJyZWFrOworCWNhc2UgR1BDTURfUkVBRF9DRF9NU0Y6IHdoYXQgPSAiUkVBRCBDRCBNU0YiOyBicmVhazsKKwljYXNlIEdQQ01EX1NDQU46IHdoYXQgPSAiU0NBTiI7IGJyZWFrOworCWNhc2UgR1BDTURfU0VUX1NQRUVEOiB3aGF0ID0gIlNFVCBDRCBTUEVFRCI7IGJyZWFrOworCWNhc2UgR1BDTURfTUVDSEFOSVNNX1NUQVRVUzogd2hhdCA9ICJNRUNIQU5JU00gU1RBVFVTIjsgYnJlYWs7CisJY2FzZSBHUENNRF9SRUFEX0NEOiB3aGF0ID0gIlJFQUQgQ0QiOyBicmVhazsKKwljYXNlIDB4RTE6IHdoYXQgPSAiV1JJVEUgQ09OVElOVUUiOyBicmVhazsKKwljYXNlIFdSSVRFX0xPTkdfMjogd2hhdCA9ICJXUklURV9MT05HXzIiOyBicmVhazsKKwlkZWZhdWx0OiB3aGF0ID0gIih1bmtub3duIGNvbW1hbmQpIjsgYnJlYWs7CisJfQorCVVTX0RFQlVHUCgiQ29tbWFuZCAlcyAoJWQgYnl0ZXMpXG4iLCB3aGF0LCBzcmItPmNtZF9sZW4pOworCVVTX0RFQlVHUCgiIik7CisJZm9yIChpID0gMDsgaSA8IHNyYi0+Y21kX2xlbiAmJiBpIDwgMTY7IGkrKykKKwkJVVNfREVCVUdQWCgiICUwMngiLCBzcmItPmNtbmRbaV0pOworCVVTX0RFQlVHUFgoIlxuIik7Cit9CisKK3ZvaWQgdXNiX3N0b3Jfc2hvd19zZW5zZSgKKwkJdW5zaWduZWQgY2hhciBrZXksCisJCXVuc2lnbmVkIGNoYXIgYXNjLAorCQl1bnNpZ25lZCBjaGFyIGFzY3EpIHsKKworCWNvbnN0IGNoYXIgKndoYXQsICprZXlzdHI7CisKKwlrZXlzdHIgPSBzY3NpX3NlbnNlX2tleV9zdHJpbmcoa2V5KTsKKwl3aGF0ID0gc2NzaV9leHRkX3NlbnNlX2Zvcm1hdChhc2MsIGFzY3EpOworCisJaWYgKGtleXN0ciA9PSBOVUxMKQorCQlrZXlzdHIgPSAiKFVua25vd24gS2V5KSI7CisJaWYgKHdoYXQgPT0gTlVMTCkKKwkJd2hhdCA9ICIodW5rbm93biBBU0MvQVNDUSkiOworCisJVVNfREVCVUdQKCIlczogIiwga2V5c3RyKTsKKwlVU19ERUJVR1BYKHdoYXQsIGFzY3EpOworCVVTX0RFQlVHUFgoIlxuIik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RlYnVnLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QyMDk2YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGVidWcuaApAQCAtMCwwICsxLDY1IEBACisvKiBEcml2ZXIgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgY29tcGxpYW50IGRldmljZXMKKyAqIERlYnVnZ2luZyBGdW5jdGlvbnMgSGVhZGVyIEZpbGUKKyAqCisgKiAkSWQ6IGRlYnVnLmgsdiAxLjYgMjAwMS8wMS8xMiAyMzo1MTowNCBtZGhhcm0gRXhwICQKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDE5OTktMjAwMiBNYXR0aGV3IERoYXJtIChtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldCkKKyAqCisgKiBJbml0aWFsIHdvcmsgYnk6CisgKiAgIChjKSAxOTk5IE1pY2hhZWwgR2VlIChtaWNoYWVsQGxpbnV4c3BlY2lmaWMuY29tKQorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSAnVVNCIE1hc3MgU3RvcmFnZSBDbGFzcycgZG9jdW1lbnQuIFRoaXMKKyAqIGRlc2NyaWJlcyBpbiBkZXRhaWwgdGhlIHByb3RvY29sIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBzdWNoCisgKiBkZXZpY2VzLiAgQ2xlYXJseSwgdGhlIGRlc2lnbmVycyBoYWQgU0NTSSBhbmQgQVRBUEkgY29tbWFuZHMgaW4KKyAqIG1pbmQgd2hlbiB0aGV5IGNyZWF0ZWQgdGhpcyBkb2N1bWVudC4gIFRoZSBjb21tYW5kcyBhcmUgYWxsIHZlcnkKKyAqIHNpbWlsYXIgdG8gY29tbWFuZHMgaW4gdGhlIFNDU0ktSUkgYW5kIEFUQVBJIHNwZWNpZmljYXRpb25zLgorICoKKyAqIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgaW4gYSBudW1iZXIgb2YgY2FzZXMgdGhpcyBjbGFzcworICogZXhoaWJpdHMgY2xhc3Mtc3BlY2lmaWMgZXhlbXB0aW9ucyBmcm9tIHRoZSBVU0Igc3BlY2lmaWNhdGlvbi4KKyAqIE5vdGFibHkgdGhlIHVzYWdlIG9mIE5BSywgU1RBTEwgYW5kIEFDSyBkaWZmZXJzIGZyb20gdGhlIG5vcm0sIGluCisgKiB0aGF0IHRoZXkgYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2FpdCwgZmFpbGVkIGFuZCBPSyBvbiBjb21tYW5kcy4KKyAqCisgKiBBbHNvLCBmb3IgY2VydGFpbiBkZXZpY2VzLCB0aGUgaW50ZXJydXB0IGVuZHBvaW50IGlzIHVzZWQgdG8gY29udmV5CisgKiBzdGF0dXMgb2YgYSBjb21tYW5kLgorICoKKyAqIFBsZWFzZSBzZWUgaHR0cDovL3d3dy5vbmUtZXllZC1hbGllbi5uZXQvfm1kaGFybS9saW51eC11c2IgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX0RFQlVHX0hfCisjZGVmaW5lIF9ERUJVR19IXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNkZWZpbmUgVVNCX1NUT1JBR0UgInVzYi1zdG9yYWdlOiAiCisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcKK3ZvaWQgdXNiX3N0b3Jfc2hvd19jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKnNyYik7Cit2b2lkIHVzYl9zdG9yX3Nob3dfc2Vuc2UoIHVuc2lnbmVkIGNoYXIga2V5LAorCQl1bnNpZ25lZCBjaGFyIGFzYywgdW5zaWduZWQgY2hhciBhc2NxICk7CisjZGVmaW5lIFVTX0RFQlVHUCh4Li4uKSBwcmludGsoIEtFUk5fREVCVUcgVVNCX1NUT1JBR0UgeCApCisjZGVmaW5lIFVTX0RFQlVHUFgoeC4uLikgcHJpbnRrKCB4ICkKKyNkZWZpbmUgVVNfREVCVUcoeCkgeCAKKyNlbHNlCisjZGVmaW5lIFVTX0RFQlVHUCh4Li4uKQorI2RlZmluZSBVU19ERUJVR1BYKHguLi4pCisjZGVmaW5lIFVTX0RFQlVHKHgpCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RwY20uYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZHBjbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYjY5ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2RwY20uYwpAQCAtMCwwICsxLDg5IEBACisvKiBEcml2ZXIgZm9yIE1pY3JvdGVjaCBEUENNLVVTQiBDb21wYWN0Rmxhc2gvU21hcnRNZWRpYSByZWFkZXIKKyAqCisgKiAkSWQ6IGRwY20uYyx2IDEuNCAyMDAxLzA2LzExIDAyOjU0OjI1IG1kaGFybSBFeHAgJAorICoKKyAqIERQQ00gZHJpdmVyIHYwLjE6CisgKgorICogRmlyc3QgcmVsZWFzZQorICoKKyAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgorICogICAoYykgMjAwMCBCcmlhbiBXZWJiICh3ZWJiYkBlYXJ0aGxpbmsubmV0KQorICoKKyAqIFRoaXMgZGV2aWNlIGNvbnRhaW5zIGJvdGggYSBDb21wYWN0Rmxhc2ggY2FyZCByZWFkZXIsIHdoaWNoCisgKiB1c2VzIHRoZSBDb250cm9sL0J1bGsgdy9vIEludGVycnVwdCBwcm90b2NvbCBhbmQKKyAqIGEgU21hcnRNZWRpYSBjYXJkIHJlYWRlciB0aGF0IHVzZXMgdGhlIHNhbWUgcHJvdG9jb2wKKyAqIGFzIHRoZSBTRERSMDkuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorCisjaW5jbHVkZSAidXNiLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgImRwY20uaCIKKyNpbmNsdWRlICJzZGRyMDkuaCIKKworLyoKKyAqIFRyYW5zcG9ydCBmb3IgdGhlIE1pY3JvdGVjaCBEUENNLVVTQgorICoKKyAqLworaW50IGRwY21fdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQoreworICBpbnQgcmV0OworCisgIGlmKHNyYiA9PSBOVUxMKQorICAgIHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKyAgVVNfREVCVUdQKCJkcGNtX3RyYW5zcG9ydDogTFVOPSVkXG4iLCBzcmItPmRldmljZS0+bHVuKTsKKworICBzd2l0Y2goc3JiLT5kZXZpY2UtPmx1bikgeworICBjYXNlIDA6CisKKyAgICAvKgorICAgICAqIExVTiAwIGNvcnJlc3BvbmRzIHRvIHRoZSBDb21wYWN0Rmxhc2ggY2FyZCByZWFkZXIuCisgICAgICovCisgICAgcmV0ID0gdXNiX3N0b3JfQ0JfdHJhbnNwb3J0KHNyYiwgdXMpOworICAgIGJyZWFrOworCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQorICBjYXNlIDE6CisKKyAgICAvKgorICAgICAqIExVTiAxIGNvcnJlc3BvbmRzIHRvIHRoZSBTbWFydE1lZGlhIGNhcmQgcmVhZGVyLgorICAgICAqLworCisgICAgLyoKKyAgICAgKiBTZXQgdGhlIExVTiB0byAwIChqdXN0IGluIGNhc2UpLgorICAgICAqLworICAgIHNyYi0+ZGV2aWNlLT5sdW4gPSAwOyB1cy0+c3JiLT5kZXZpY2UtPmx1biA9IDA7CisgICAgcmV0ID0gc2RkcjA5X3RyYW5zcG9ydChzcmIsIHVzKTsKKyAgICBzcmItPmRldmljZS0+bHVuID0gMTsgdXMtPnNyYi0+ZGV2aWNlLT5sdW4gPSAxOworICAgIGJyZWFrOworCisjZW5kaWYKKworICBkZWZhdWx0OgorICAgIFVTX0RFQlVHUCgiZHBjbV90cmFuc3BvcnQ6IEludmFsaWQgTFVOICVkXG4iLCBzcmItPmRldmljZS0+bHVuKTsKKyAgICByZXQgPSBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisgICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZHBjbS5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kcGNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiNDY0YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZHBjbS5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qIERyaXZlciBmb3IgTWljcm90ZWNoIERQQ00tVVNCIENvbXBhY3RGbGFzaC9TbWFydE1lZGlhIHJlYWRlcgorICoKKyAqICRJZDogZHBjbS5oLHYgMS4yIDIwMDAvMDgvMjUgMDA6MTM6NTEgbWRoYXJtIEV4cCAkCisgKgorICogRFBDTSBkcml2ZXIgdjAuMToKKyAqCisgKiBGaXJzdCByZWxlYXNlCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAyMDAwIEJyaWFuIFdlYmIgKHdlYmJiQGVhcnRobGluay5uZXQpCisgKgorICogU2VlIGRwY20uYyBmb3IgbW9yZSBleHBsYW5hdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX01JQ1JPVEVDSF9EUENNX1VTQl9ICisjZGVmaW5lIF9NSUNST1RFQ0hfRFBDTV9VU0JfSAorCitleHRlcm4gaW50IGRwY21fdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZTk2MDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uYwpAQCAtMCwwICsxLDQ4OCBAQAorLyogRHJpdmVyIGZvciBGcmVlY29tIFVTQi9JREUgYWRhcHRvcgorICoKKyAqICRJZDogZnJlZWNvbS5jLHYgMS4yMiAyMDAyLzA0LzIyIDAzOjM5OjQzIG1kaGFybSBFeHAgJAorICoKKyAqIEZyZWVjb20gdjAuMToKKyAqCisgKiBGaXJzdCByZWxlYXNlCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChDKSAyMDAwIERhdmlkIEJyb3duIDx1c2Itc3RvcmFnZUBkYXZpZGIub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIFRoaXMgZHJpdmVyIHdhcyBkZXZlbG9wZWQgd2l0aCBpbmZvcm1hdGlvbiBwcm92aWRlZCBpbiBGUkVFQ09NJ3MgVVNCCisgKiBQcm9ncmFtbWVycyBSZWZlcmVuY2UgR3VpZGUuICBGb3IgZnVydGhlciBpbmZvcm1hdGlvbiBjb250YWN0IEZyZWVjb20KKyAqIChodHRwOi8vd3d3LmZyZWVjb20uZGUvKQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgorCisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKworI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInByb3RvY29sLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJmcmVlY29tLmgiCisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcKK3N0YXRpYyB2b2lkIHBkdW1wICh2b2lkICosIGludCk7CisjZW5kaWYKKworLyogQml0cyBvZiBIRF9TVEFUVVMgKi8KKyNkZWZpbmUgRVJSX1NUQVQJCTB4MDEKKyNkZWZpbmUgRFJRX1NUQVQJCTB4MDgKKworLyogQWxsIG9mIHRoZSBvdXRnb2luZyBwYWNrZXRzIGFyZSA2NCBieXRlcyBsb25nLiAqLworc3RydWN0IGZyZWVjb21fY2Jfd3JhcCB7CisJdTggICAgVHlwZTsJCS8qIENvbW1hbmQgdHlwZS4gKi8KKwl1OCAgICBUaW1lb3V0OwkJLyogVGltZW91dCBpbiBzZWNvbmRzLiAqLworCXU4ICAgIEF0YXBpWzEyXTsJLyogQW4gQVRBUEkgcGFja2V0LiAqLworCXU4ICAgIEZpbGxlcls1MF07CS8qIFBhZGRpbmcgRGF0YS4gKi8KK307CisKK3N0cnVjdCBmcmVlY29tX3hmZXJfd3JhcCB7CisJdTggICAgVHlwZTsJCS8qIENvbW1hbmQgdHlwZS4gKi8KKwl1OCAgICBUaW1lb3V0OwkJLyogVGltZW91dCBpbiBzZWNvbmRzLiAqLworCV9fbGUzMiAgIENvdW50OwkJLyogTnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyLiAqLworCXU4ICAgIFBhZFs1OF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGZyZWVjb21faWRlX291dCB7CisJdTggICAgVHlwZTsJCS8qIFR5cGUgKyBJREUgcmVnaXN0ZXIuICovCisJdTggICAgUGFkOworCV9fbGUxNiAgIFZhbHVlOwkJLyogVmFsdWUgdG8gd3JpdGUuICovCisJdTggICAgUGFkMls2MF07Cit9OworCitzdHJ1Y3QgZnJlZWNvbV9pZGVfaW4geworCXU4ICAgIFR5cGU7CQkvKiBUeXBlIHwgSURFIHJlZ2lzdGVyLiAqLworCXU4ICAgIFBhZFs2M107Cit9OworCitzdHJ1Y3QgZnJlZWNvbV9zdGF0dXMgeworCXU4ICAgIFN0YXR1czsKKwl1OCAgICBSZWFzb247CisJX19sZTE2ICAgQ291bnQ7CisJdTggICAgUGFkWzYwXTsKK307CisKKy8qIEZyZWVjb20gc3R1ZmZzIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIGluIHRoZSBJTkRFWF9TVEFUIGJpdCBvZiB0aGUgaWRlCisgKiByZWdpc3Rlci4gKi8KKyNkZWZpbmUgRkNNX0lOVF9TVEFUVVMJCTB4MDIgLyogSU5ERVhfU1RBVCAqLworI2RlZmluZSBGQ01fU1RBVFVTX0JVU1kJCTB4ODAKKworLyogVGhlc2UgYXJlIHRoZSBwYWNrZXQgdHlwZXMuICBUaGUgbG93IGJpdCBpbmRpY2F0ZXMgdGhhdCB0aGlzIGNvbW1hbmQKKyAqIHNob3VsZCB3YWl0IGZvciBhbiBpbnRlcnJ1cHQuICovCisjZGVmaW5lIEZDTV9QQUNLRVRfQVRBUEkJMHgyMQorI2RlZmluZSBGQ01fUEFDS0VUX1NUQVRVUwkweDIwCisKKy8qIFJlY2VpdmUgZGF0YSBmcm9tIHRoZSBJREUgaW50ZXJmYWNlLiAgVGhlIEFUQVBJIHBhY2tldCBoYXMgYWxyZWFkeQorICogd2FpdGVkLCBzbyB0aGUgZGF0YSBzaG91bGQgYmUgaW1tZWRpYXRlbHkgYXZhaWxhYmxlLiAqLworI2RlZmluZSBGQ01fUEFDS0VUX0lOUFVUCTB4ODEKKworLyogU2VuZCBkYXRhIHRvIHRoZSBJREUgaW50ZXJmYWNlLiAqLworI2RlZmluZSBGQ01fUEFDS0VUX09VVFBVVAkweDAxCisKKy8qIFdyaXRlIGEgdmFsdWUgdG8gYW4gaWRlIHJlZ2lzdGVyLiAgT3IgdGhlIGlkZSByZWdpc3RlciB0byB3cml0ZSBhZnRlcgorICogbXVuZ2luZyB0aGUgYWRkcmVzcyBhIGJpdC4gKi8KKyNkZWZpbmUgRkNNX1BBQ0tFVF9JREVfV1JJVEUJMHg0MAorI2RlZmluZSBGQ01fUEFDS0VUX0lERV9SRUFECTB4QzAKKworLyogQWxsIHBhY2tldHMgKGV4Y2VwdCBmb3Igc3RhdHVzKSBhcmUgNjQgYnl0ZXMgbG9uZy4gKi8KKyNkZWZpbmUgRkNNX1BBQ0tFVF9MRU5HVEgJCTY0CisjZGVmaW5lIEZDTV9TVEFUVVNfUEFDS0VUX0xFTkdUSAk0CisKK3N0YXRpYyBpbnQKK2ZyZWVjb21fcmVhZGRhdGEgKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzLAorCQl1bnNpZ25lZCBpbnQgaXBpcGUsIHVuc2lnbmVkIGludCBvcGlwZSwgaW50IGNvdW50KQoreworCXN0cnVjdCBmcmVlY29tX3hmZXJfd3JhcCAqZnhmciA9CisJCShzdHJ1Y3QgZnJlZWNvbV94ZmVyX3dyYXAgKikgdXMtPmlvYnVmOworCWludCByZXN1bHQ7CisKKwlmeGZyLT5UeXBlID0gRkNNX1BBQ0tFVF9JTlBVVCB8IDB4MDA7CisJZnhmci0+VGltZW91dCA9IDA7ICAgIC8qIFNob3J0IHRpbWVvdXQgZm9yIGRlYnVnZ2luZy4gKi8KKwlmeGZyLT5Db3VudCA9IGNwdV90b19sZTMyIChjb3VudCk7CisJbWVtc2V0IChmeGZyLT5QYWQsIDAsIHNpemVvZiAoZnhmci0+UGFkKSk7CisKKwlVU19ERUJVR1AoIlJlYWQgZGF0YSBGcmVlY29tISAoYz0lZClcbiIsIGNvdW50KTsKKworCS8qIElzc3VlIHRoZSB0cmFuc2ZlciBjb21tYW5kLiAqLworCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmICh1cywgb3BpcGUsIGZ4ZnIsCisJCQlGQ01fUEFDS0VUX0xFTkdUSCwgTlVMTCk7CisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJVVNfREVCVUdQICgiRnJlZWNvbSByZWFkZGF0YSB0cmFuc3BvcnQgZXJyb3JcbiIpOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKworCS8qIE5vdyB0cmFuc2ZlciBhbGwgb2Ygb3VyIGJsb2Nrcy4gKi8KKwlVU19ERUJVR1AoIlN0YXJ0IG9mIHJlYWRcbiIpOworCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2codXMsIGlwaXBlLCBzcmItPnJlcXVlc3RfYnVmZmVyLAorCQkJY291bnQsIHNyYi0+dXNlX3NnLCAmc3JiLT5yZXNpZCk7CisJVVNfREVCVUdQKCJmcmVlY29tX3JlYWRkYXRhIGRvbmUhXG4iKTsKKworCWlmIChyZXN1bHQgPiBVU0JfU1RPUl9YRkVSX1NIT1JUKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKK30KKworc3RhdGljIGludAorZnJlZWNvbV93cml0ZWRhdGEgKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzLAorCQlpbnQgdW5zaWduZWQgaXBpcGUsIHVuc2lnbmVkIGludCBvcGlwZSwgaW50IGNvdW50KQoreworCXN0cnVjdCBmcmVlY29tX3hmZXJfd3JhcCAqZnhmciA9CisJCShzdHJ1Y3QgZnJlZWNvbV94ZmVyX3dyYXAgKikgdXMtPmlvYnVmOworCWludCByZXN1bHQ7CisKKwlmeGZyLT5UeXBlID0gRkNNX1BBQ0tFVF9PVVRQVVQgfCAweDAwOworCWZ4ZnItPlRpbWVvdXQgPSAwOyAgICAvKiBTaG9ydCB0aW1lb3V0IGZvciBkZWJ1Z2dpbmcuICovCisJZnhmci0+Q291bnQgPSBjcHVfdG9fbGUzMiAoY291bnQpOworCW1lbXNldCAoZnhmci0+UGFkLCAwLCBzaXplb2YgKGZ4ZnItPlBhZCkpOworCisJVVNfREVCVUdQKCJXcml0ZSBkYXRhIEZyZWVjb20hIChjPSVkKVxuIiwgY291bnQpOworCisJLyogSXNzdWUgdGhlIHRyYW5zZmVyIGNvbW1hbmQuICovCisJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYgKHVzLCBvcGlwZSwgZnhmciwKKwkJCUZDTV9QQUNLRVRfTEVOR1RILCBOVUxMKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQlVU19ERUJVR1AgKCJGcmVlY29tIHdyaXRlZGF0YSB0cmFuc3BvcnQgZXJyb3JcbiIpOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKworCS8qIE5vdyB0cmFuc2ZlciBhbGwgb2Ygb3VyIGJsb2Nrcy4gKi8KKwlVU19ERUJVR1AoIlN0YXJ0IG9mIHdyaXRlXG4iKTsKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX3NnKHVzLCBvcGlwZSwgc3JiLT5yZXF1ZXN0X2J1ZmZlciwKKwkJCWNvdW50LCBzcmItPnVzZV9zZywgJnNyYi0+cmVzaWQpOworCisJVVNfREVCVUdQKCJmcmVlY29tX3dyaXRlZGF0YSBkb25lIVxuIik7CisJaWYgKHJlc3VsdCA+IFVTQl9TVE9SX1hGRVJfU0hPUlQpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCisvKgorICogVHJhbnNwb3J0IGZvciB0aGUgRnJlZWNvbSBVU0IvSURFIGFkYXB0b3IuCisgKgorICovCitpbnQgZnJlZWNvbV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJc3RydWN0IGZyZWVjb21fY2Jfd3JhcCAqZmNiOworCXN0cnVjdCBmcmVlY29tX3N0YXR1cyAgKmZzdDsKKwl1bnNpZ25lZCBpbnQgaXBpcGUsIG9waXBlOwkJLyogV2UgbmVlZCBib3RoIHBpcGVzLiAqLworCWludCByZXN1bHQ7CisJdW5zaWduZWQgaW50IHBhcnRpYWw7CisJaW50IGxlbmd0aDsKKworCWZjYiA9IChzdHJ1Y3QgZnJlZWNvbV9jYl93cmFwICopIHVzLT5pb2J1ZjsKKwlmc3QgPSAoc3RydWN0IGZyZWVjb21fc3RhdHVzICopIHVzLT5pb2J1ZjsKKworCVVTX0RFQlVHUCgiRnJlZWNvbSBUUkFOU1BPUlQgU1RBUlRFRFxuIik7CisKKwkvKiBHZXQgaGFuZGxlcyBmb3IgYm90aCB0cmFuc3BvcnRzLiAqLworCW9waXBlID0gdXMtPnNlbmRfYnVsa19waXBlOworCWlwaXBlID0gdXMtPnJlY3ZfYnVsa19waXBlOworCisJLyogVGhlIEFUQVBJIENvbW1hbmQgYWx3YXlzIGdvZXMgb3V0IGZpcnN0LiAqLworCWZjYi0+VHlwZSA9IEZDTV9QQUNLRVRfQVRBUEkgfCAweDAwOworCWZjYi0+VGltZW91dCA9IDA7CisJbWVtY3B5IChmY2ItPkF0YXBpLCBzcmItPmNtbmQsIDEyKTsKKwltZW1zZXQgKGZjYi0+RmlsbGVyLCAwLCBzaXplb2YgKGZjYi0+RmlsbGVyKSk7CisKKwlVU19ERUJVRyhwZHVtcCAoc3JiLT5jbW5kLCAxMikpOworCisJLyogU2VuZCBpdCBvdXQuICovCisJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYgKHVzLCBvcGlwZSwgZmNiLAorCQkJRkNNX1BBQ0tFVF9MRU5HVEgsIE5VTEwpOworCisJLyogVGhlIEZyZWVjb20gZGV2aWNlIHdpbGwgb25seSBmYWlsIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB3cm9uZyBpbgorCSAqIFVTQiBsYW5kLiAgSXQgcmV0dXJucyB0aGUgc3RhdHVzIGluIGl0cyBvd24gcmVnaXN0ZXJzLCB3aGljaAorCSAqIGNvbWUgYmFjayBpbiB0aGUgYnVsayBwaXBlLiAqLworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCVVTX0RFQlVHUCAoImZyZWVjb20gdHJhbnNwb3J0IGVycm9yXG4iKTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwkvKiBUaGVyZSBhcmUgdGltZXMgd2UgY2FuIG9wdGltaXplIG91dCB0aGlzIHN0YXR1cyByZWFkLCBidXQgaXQKKwkgKiBkb2Vzbid0IGh1cnQgdXMgdG8gYWx3YXlzIGRvIGl0IG5vdy4gKi8KKwlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1ZiAodXMsIGlwaXBlLCBmc3QsCisJCQlGQ01fU1RBVFVTX1BBQ0tFVF9MRU5HVEgsICZwYXJ0aWFsKTsKKwlVU19ERUJVR1AoImZvbyBTdGF0dXMgcmVzdWx0ICVkICV1XG4iLCByZXN1bHQsIHBhcnRpYWwpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJVVNfREVCVUcocGR1bXAgKCh2b2lkICopIGZzdCwgcGFydGlhbCkpOworCisJLyogVGhlIGZpcm13YXJlIHdpbGwgdGltZS1vdXQgY29tbWFuZHMgYWZ0ZXIgMjAgc2Vjb25kcy4gU29tZSBjb21tYW5kcworCSAqIGNhbiBsZWdpdGltYXRlbHkgdGFrZSBsb25nZXIgdGhhbiB0aGlzLCBzbyB3ZSB1c2UgYSBkaWZmZXJlbnQKKwkgKiBjb21tYW5kIHRoYXQgb25seSB3YWl0cyBmb3IgdGhlIGludGVycnVwdCBhbmQgdGhlbiBzZW5kcyBzdGF0dXMsCisJICogd2l0aG91dCBoYXZpbmcgdG8gc2VuZCBhIG5ldyBBVEFQSSBjb21tYW5kIHRvIHRoZSBkZXZpY2UuIAorCSAqCisJICogTk9URTogVGhlcmUgaXMgc29tZSBpbmRpY2F0aW9uIHRoYXQgYSBkYXRhIHRyYW5zZmVyIGFmdGVyIGEgdGltZW91dAorCSAqIG1heSBub3Qgd29yaywgYnV0IHRoYXQgaXMgYSBjb25kaXRpb24gdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLgorCSAqLworCXdoaWxlIChmc3QtPlN0YXR1cyAmIEZDTV9TVEFUVVNfQlVTWSkgeworCQlVU19ERUJVR1AoIjIwIHNlY29uZCBVU0IvQVRBUEkgYnJpZGdlIFRJTUVPVVQgb2NjdXJyZWQhXG4iKTsKKwkJVVNfREVCVUdQKCJmc3QtPlN0YXR1cyBpcyAleFxuIiwgZnN0LT5TdGF0dXMpOworCisJCS8qIEdldCB0aGUgc3RhdHVzIGFnYWluICovCisJCWZjYi0+VHlwZSA9IEZDTV9QQUNLRVRfU1RBVFVTOworCQlmY2ItPlRpbWVvdXQgPSAwOworCQltZW1zZXQgKGZjYi0+QXRhcGksIDAsIHNpemVvZihmY2ItPkF0YXBpKSk7CisJCW1lbXNldCAoZmNiLT5GaWxsZXIsIDAsIHNpemVvZiAoZmNiLT5GaWxsZXIpKTsKKworCQkvKiBTZW5kIGl0IG91dC4gKi8KKwkJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYgKHVzLCBvcGlwZSwgZmNiLAorCQkJCUZDTV9QQUNLRVRfTEVOR1RILCBOVUxMKTsKKworCQkvKiBUaGUgRnJlZWNvbSBkZXZpY2Ugd2lsbCBvbmx5IGZhaWwgaWYgdGhlcmUgaXMgc29tZXRoaW5nCisJCSAqIHdyb25nIGluIFVTQiBsYW5kLiAgSXQgcmV0dXJucyB0aGUgc3RhdHVzIGluIGl0cyBvd24KKwkJICogcmVnaXN0ZXJzLCB3aGljaCBjb21lIGJhY2sgaW4gdGhlIGJ1bGsgcGlwZS4KKwkJICovCisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCQlVU19ERUJVR1AgKCJmcmVlY29tIHRyYW5zcG9ydCBlcnJvclxuIik7CisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQl9CisKKwkJLyogZ2V0IHRoZSBkYXRhICovCisJCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmICh1cywgaXBpcGUsIGZzdCwKKwkJCQlGQ01fU1RBVFVTX1BBQ0tFVF9MRU5HVEgsICZwYXJ0aWFsKTsKKworCQlVU19ERUJVR1AoImJhciBTdGF0dXMgcmVzdWx0ICVkICV1XG4iLCByZXN1bHQsIHBhcnRpYWwpOworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkJVVNfREVCVUcocGR1bXAgKCh2b2lkICopIGZzdCwgcGFydGlhbCkpOworCX0KKworCWlmIChwYXJ0aWFsICE9IDQpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJaWYgKChmc3QtPlN0YXR1cyAmIDEpICE9IDApIHsKKwkJVVNfREVCVUdQKCJvcGVyYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJfQorCisJLyogVGhlIGRldmljZSBtaWdodCBub3QgaGF2ZSBhcyBtdWNoIGRhdGEgYXZhaWxhYmxlIGFzIHdlCisJICogcmVxdWVzdGVkLiAgSWYgeW91IGFzayBmb3IgbW9yZSB0aGFuIHRoZSBkZXZpY2UgaGFzLCB0aGlzIHJlYWRzCisJICogYW5kIHN1Y2ggd2lsbCBoYW5nLiAqLworCVVTX0RFQlVHUCgiRGV2aWNlIGluZGljYXRlcyB0aGF0IGl0IGhhcyAlZCBieXRlcyBhdmFpbGFibGVcbiIsCisJCQlsZTE2X3RvX2NwdSAoZnN0LT5Db3VudCkpOworCVVTX0RFQlVHUCgiU0NTSSByZXF1ZXN0ZWQgJWRcbiIsIHNyYi0+cmVxdWVzdF9idWZmbGVuKTsKKworCS8qIEZpbmQgdGhlIGxlbmd0aCB3ZSBkZXNpcmUgdG8gcmVhZC4gKi8KKwlzd2l0Y2ggKHNyYi0+Y21uZFswXSkgeworCQljYXNlIElOUVVJUlk6CisJCWNhc2UgUkVRVUVTVF9TRU5TRToJCS8qIDE2IG9yIDE4IGJ5dGVzPyBzcGVjIHNheXMgMTgsIGxvdHMgb2YgZGV2aWNlcyBvbmx5IGhhdmUgMTYgKi8KKwkJY2FzZSBNT0RFX1NFTlNFOgorCQljYXNlIE1PREVfU0VOU0VfMTA6CisJCQlsZW5ndGggPSBsZTE2X3RvX2NwdShmc3QtPkNvdW50KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorIAkJCWxlbmd0aCA9IHNyYi0+cmVxdWVzdF9idWZmbGVuOworCX0KKworCS8qIHZlcmlmeSB0aGF0IHRoaXMgYW1vdW50IGlzIGxlZ2FsICovCisJaWYgKGxlbmd0aCA+IHNyYi0+cmVxdWVzdF9idWZmbGVuKSB7CisJCWxlbmd0aCA9IHNyYi0+cmVxdWVzdF9idWZmbGVuOworCQlVU19ERUJVR1AoIlRydW5jYXRpbmcgcmVxdWVzdCB0byBtYXRjaCBidWZmZXIgbGVuZ3RoOiAlZFxuIiwgbGVuZ3RoKTsKKwl9CisKKwkvKiBXaGF0IHdlIGRvIG5vdyBkZXBlbmRzIG9uIHdoYXQgZGlyZWN0aW9uIHRoZSBkYXRhIGlzIHN1cHBvc2VkIHRvCisJICogbW92ZSBpbi4gKi8KKworCXN3aXRjaCAodXMtPnNyYi0+c2NfZGF0YV9kaXJlY3Rpb24pIHsKKwljYXNlIERNQV9GUk9NX0RFVklDRToKKwkJLyogY2F0Y2ggYm9ndXMgInJlYWQgMCBsZW5ndGgiIGNhc2UgKi8KKwkJaWYgKCFsZW5ndGgpCisJCQlicmVhazsKKwkJLyogTWFrZSBzdXJlIHRoYXQgdGhlIHN0YXR1cyBpbmRpY2F0ZXMgdGhhdCB0aGUgZGV2aWNlCisJCSAqIHdhbnRzIGRhdGEgYXMgd2VsbC4gKi8KKwkJaWYgKChmc3QtPlN0YXR1cyAmIERSUV9TVEFUKSA9PSAwIHx8IChmc3QtPlJlYXNvbiAmIDMpICE9IDIpIHsKKwkJCVVTX0RFQlVHUCgiU0NTSSB3YW50cyBkYXRhLCBkcml2ZSBkb2Vzbid0IGhhdmUgYW55XG4iKTsKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCQl9CisJCXJlc3VsdCA9IGZyZWVjb21fcmVhZGRhdGEgKHNyYiwgdXMsIGlwaXBlLCBvcGlwZSwgbGVuZ3RoKTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCXJldHVybiByZXN1bHQ7CisKKwkJVVNfREVCVUdQKCJGQ006IFdhaXRpbmcgZm9yIHN0YXR1c1xuIik7CisJCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmICh1cywgaXBpcGUsIGZzdCwKKwkJCQlGQ01fUEFDS0VUX0xFTkdUSCwgJnBhcnRpYWwpOworCQlVU19ERUJVRyhwZHVtcCAoKHZvaWQgKikgZnN0LCBwYXJ0aWFsKSk7CisKKwkJaWYgKHBhcnRpYWwgIT0gNCB8fCByZXN1bHQgPiBVU0JfU1RPUl9YRkVSX1NIT1JUKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJaWYgKChmc3QtPlN0YXR1cyAmIEVSUl9TVEFUKSAhPSAwKSB7CisJCQlVU19ERUJVR1AoIm9wZXJhdGlvbiBmYWlsZWRcbiIpOworCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCX0KKwkJaWYgKChmc3QtPlJlYXNvbiAmIDMpICE9IDMpIHsKKwkJCVVTX0RFQlVHUCgiRHJpdmUgc2VlbXMgc3RpbGwgaHVuZ3J5XG4iKTsKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCQl9CisJCVVTX0RFQlVHUCgiVHJhbnNmZXIgaGFwcHlcbiIpOworCQlicmVhazsKKworCWNhc2UgRE1BX1RPX0RFVklDRToKKwkJLyogY2F0Y2ggYm9ndXMgIndyaXRlIDAgbGVuZ3RoIiBjYXNlICovCisJCWlmICghbGVuZ3RoKQorCQkJYnJlYWs7CisJCS8qIE1ha2Ugc3VyZSB0aGUgc3RhdHVzIGluZGljYXRlcyB0aGF0IHRoZSBkZXZpY2Ugd2FudHMgdG8KKwkJICogc2VuZCB1cyBkYXRhLiAqLworCQkvKiAhIUlNUExFTUVOVCEhICovCisJCXJlc3VsdCA9IGZyZWVjb21fd3JpdGVkYXRhIChzcmIsIHVzLCBpcGlwZSwgb3BpcGUsIGxlbmd0aCk7CisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCQlyZXR1cm4gcmVzdWx0OworCisJCVVTX0RFQlVHUCgiRkNNOiBXYWl0aW5nIGZvciBzdGF0dXNcbiIpOworCQlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1ZiAodXMsIGlwaXBlLCBmc3QsCisJCQkJRkNNX1BBQ0tFVF9MRU5HVEgsICZwYXJ0aWFsKTsKKworCQlpZiAocGFydGlhbCAhPSA0IHx8IHJlc3VsdCA+IFVTQl9TVE9SX1hGRVJfU0hPUlQpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQlpZiAoKGZzdC0+U3RhdHVzICYgRVJSX1NUQVQpICE9IDApIHsKKwkJCVVTX0RFQlVHUCgib3BlcmF0aW9uIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkJfQorCQlpZiAoKGZzdC0+UmVhc29uICYgMykgIT0gMykgeworCQkJVVNfREVCVUdQKCJEcml2ZSBzZWVtcyBzdGlsbCBodW5ncnlcbiIpOworCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCX0KKworCQlVU19ERUJVR1AoIlRyYW5zZmVyIGhhcHB5XG4iKTsKKwkJYnJlYWs7CisKKworCWNhc2UgRE1BX05PTkU6CisJCS8qIEVhc3ksIGRvIG5vdGhpbmcuICovCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyogc2hvdWxkIG5ldmVyIGhpdCBoZXJlIC0tIGZpbHRlcmVkIGluIHVzYi5jICovCisJCVVTX0RFQlVHUCAoImZyZWVjb20gdW5pbXBsZW1lbnRlZCBkaXJlY3Rpb246ICVkXG4iLAorCQkJCXVzLT5zcmItPnNjX2RhdGFfZGlyZWN0aW9uKTsKKwkJLy8gUmV0dXJuIGZhaWwsIFNDU0kgc2VlbXMgdG8gaGFuZGxlIHRoaXMgYmV0dGVyLgorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCitpbnQKK2ZyZWVjb21faW5pdCAoc3RydWN0IHVzX2RhdGEgKnVzKQoreworCWludCByZXN1bHQ7CisJY2hhciAqYnVmZmVyID0gdXMtPmlvYnVmOworCisJLyogVGhlIERNQS1tYXBwZWQgSS9PIGJ1ZmZlciBpcyA2NCBieXRlcyBsb25nLCBqdXN0IHJpZ2h0IGZvcgorCSAqIGFsbCBvdXIgcGFja2V0cy4gIE5vIG5lZWQgdG8gYWxsb2NhdGUgYW55IGV4dHJhIGJ1ZmZlciBzcGFjZS4KKwkgKi8KKworCXJlc3VsdCA9IHVzYl9zdG9yX2NvbnRyb2xfbXNnKHVzLCB1cy0+cmVjdl9jdHJsX3BpcGUsCisJCQkweDRjLCAweGMwLCAweDQzNDYsIDB4MCwgYnVmZmVyLCAweDIwLCAzKkhaKTsKKwlidWZmZXJbMzJdID0gJ1wwJzsKKwlVU19ERUJVR1AoIlN0cmluZyByZXR1cm5lZCBmcm9tIEZDIGluaXQgaXM6ICVzXG4iLCBidWZmZXIpOworCisJLyogU3BlY2lhbCB0aGFua3MgdG8gdGhlIHBlb3BsZSBhdCBGcmVlY29tIGZvciBwcm92aWRpbmcgbWUgd2l0aAorCSAqIHRoaXMgIm1hZ2ljIHNlcXVlbmNlIiwgd2hpY2ggdGhleSB1c2UgaW4gdGhlaXIgV2luZG93cyBhbmQgTWFjT1MKKwkgKiBkcml2ZXJzIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCB0aGUgYXR0YWNoZWQgcGVyaGlwZXJhbHMgYXJlCisJICogcHJvcGVybHkgcmVzZXQuCisJICovCisKKwkvKiBzZW5kIHJlc2V0ICovCisJcmVzdWx0ID0gdXNiX3N0b3JfY29udHJvbF9tc2codXMsIHVzLT5zZW5kX2N0cmxfcGlwZSwKKwkJCTB4NGQsIDB4NDAsIDB4MjRkOCwgMHgwLCBOVUxMLCAweDAsIDMqSFopOworCVVTX0RFQlVHUCgicmVzdWx0IGZyb20gYWN0aXZhdGUgcmVzZXQgaXMgJWRcbiIsIHJlc3VsdCk7CisKKwkvKiB3YWl0IDI1MG1zICovCisJbWRlbGF5KDI1MCk7CisKKwkvKiBjbGVhciByZXNldCAqLworCXJlc3VsdCA9IHVzYl9zdG9yX2NvbnRyb2xfbXNnKHVzLCB1cy0+c2VuZF9jdHJsX3BpcGUsCisJCQkweDRkLCAweDQwLCAweDI0ZjgsIDB4MCwgTlVMTCwgMHgwLCAzKkhaKTsKKwlVU19ERUJVR1AoInJlc3VsdCBmcm9tIGNsZWFyIHJlc2V0IGlzICVkXG4iLCByZXN1bHQpOworCisJLyogd2FpdCAzIHNlY29uZHMgKi8KKwltZGVsYXkoMyAqIDEwMDApOworCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCitpbnQgdXNiX3N0b3JfZnJlZWNvbV9yZXNldChzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJcHJpbnRrIChLRVJOX0NSSVQgImZyZWVjb20gcmVzZXQgY2FsbGVkXG4iKTsKKworCS8qIFdlIGRvbid0IHJlYWxseSBoYXZlIHRoaXMgZmVhdHVyZS4gKi8KKwlyZXR1cm4gRkFJTEVEOworfQorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHCitzdGF0aWMgdm9pZCBwZHVtcCAodm9pZCAqaWJ1ZmZlciwgaW50IGxlbmd0aCkKK3sKKwlzdGF0aWMgY2hhciBsaW5lWzgwXTsKKwlpbnQgb2Zmc2V0ID0gMDsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXIgPSAodW5zaWduZWQgY2hhciAqKSBpYnVmZmVyOworCWludCBpLCBqOworCWludCBmcm9tLCBiYXNlOworCisJb2Zmc2V0ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKwkJaWYgKChpICYgMTUpID09IDApIHsKKwkJCWlmIChpID4gMCkgeworCQkJCW9mZnNldCArPSBzcHJpbnRmIChsaW5lK29mZnNldCwgIiAtICIpOworCQkJCWZvciAoaiA9IGkgLSAxNjsgaiA8IGk7IGorKykgeworCQkJCQlpZiAoYnVmZmVyW2pdID49IDMyICYmIGJ1ZmZlcltqXSA8PSAxMjYpCisJCQkJCQlsaW5lW29mZnNldCsrXSA9IGJ1ZmZlcltqXTsKKwkJCQkJZWxzZQorCQkJCQkJbGluZVtvZmZzZXQrK10gPSAnLic7CisJCQkJfQorCQkJCWxpbmVbb2Zmc2V0XSA9IDA7CisJCQkJVVNfREVCVUdQKCIlc1xuIiwgbGluZSk7CisJCQkJb2Zmc2V0ID0gMDsKKwkJCX0KKwkJCW9mZnNldCArPSBzcHJpbnRmIChsaW5lK29mZnNldCwgIiUwOHg6IiwgaSk7CisJCX0KKwkJZWxzZSBpZiAoKGkgJiA3KSA9PSAwKSB7CisJCQlvZmZzZXQgKz0gc3ByaW50ZiAobGluZStvZmZzZXQsICIgLSIpOworCQl9CisJCW9mZnNldCArPSBzcHJpbnRmIChsaW5lK29mZnNldCwgIiAlMDJ4IiwgYnVmZmVyW2ldICYgMHhmZik7CisJfQorCisJLyogQWRkIHRoZSBsYXN0ICJjaHVuayIgb2YgZGF0YS4gKi8KKwlmcm9tID0gKGxlbmd0aCAtIDEpICUgMTY7CisJYmFzZSA9ICgobGVuZ3RoIC0gMSkgLyAxNikgKiAxNjsKKworCWZvciAoaSA9IGZyb20gKyAxOyBpIDwgMTY7IGkrKykKKwkJb2Zmc2V0ICs9IHNwcmludGYgKGxpbmUrb2Zmc2V0LCAiICAgIik7CisJaWYgKGZyb20gPCA4KQorCQlvZmZzZXQgKz0gc3ByaW50ZiAobGluZStvZmZzZXQsICIgICIpOworCW9mZnNldCArPSBzcHJpbnRmIChsaW5lK29mZnNldCwgIiAtICIpOworCisJZm9yIChpID0gMDsgaSA8PSBmcm9tOyBpKyspIHsKKwkJaWYgKGJ1ZmZlcltiYXNlK2ldID49IDMyICYmIGJ1ZmZlcltiYXNlK2ldIDw9IDEyNikKKwkJCWxpbmVbb2Zmc2V0KytdID0gYnVmZmVyW2Jhc2UraV07CisJCWVsc2UKKwkJCWxpbmVbb2Zmc2V0KytdID0gJy4nOworCX0KKwlsaW5lW29mZnNldF0gPSAwOworCVVTX0RFQlVHUCgiJXNcbiIsIGxpbmUpOworCW9mZnNldCA9IDA7Cit9CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9mcmVlY29tLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjAxMmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9mcmVlY29tLmgKQEAgLTAsMCArMSwzNiBAQAorLyogRHJpdmVyIGZvciBGcmVlY29tIFVTQi9JREUgYWRhcHRvcgorICoKKyAqICRJZDogZnJlZWNvbS5oLHYgMS40IDIwMDAvMDgvMjkgMTQ6NDk6MTUgZGxicm93biBFeHAgJAorICoKKyAqIEZyZWVjb20gdjAuMToKKyAqCisgKiBGaXJzdCByZWxlYXNlCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAyMDAwIERhdmlkIEJyb3duIDx1c2Itc3RvcmFnZUBkYXZpZGIub3JnPgorICoKKyAqIFNlZSBmcmVlY29tLmMgZm9yIG1vcmUgZXhwbGFuYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9GUkVFQ09NX1VTQl9ICisjZGVmaW5lIF9GUkVFQ09NX1VTQl9ICisKK2V4dGVybiBpbnQgZnJlZWNvbV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOworZXh0ZXJuIGludCB1c2Jfc3Rvcl9mcmVlY29tX3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cyk7CitleHRlcm4gaW50IGZyZWVjb21faW5pdCAoc3RydWN0IHVzX2RhdGEgKnVzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pbml0aWFsaXplcnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjA2ZjkyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pbml0aWFsaXplcnMuYwpAQCAtMCwwICsxLDkzIEBACisvKiBTcGVjaWFsIEluaXRpYWxpemVycyBmb3IgY2VydGFpbiBVU0IgTWFzcyBTdG9yYWdlIGRldmljZXMKKyAqCisgKiAkSWQ6IGluaXRpYWxpemVycy5jLHYgMS4yIDIwMDAvMDkvMDYgMjI6MzU6NTcgbWRoYXJtIEV4cCAkCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAxOTk5LCAyMDAwIE1hdHRoZXcgRGhhcm0gKG1kaGFybS11c2JAb25lLWV5ZWQtYWxpZW4ubmV0KQorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSAnVVNCIE1hc3MgU3RvcmFnZSBDbGFzcycgZG9jdW1lbnQuIFRoaXMKKyAqIGRlc2NyaWJlcyBpbiBkZXRhaWwgdGhlIHByb3RvY29sIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBzdWNoCisgKiBkZXZpY2VzLiAgQ2xlYXJseSwgdGhlIGRlc2lnbmVycyBoYWQgU0NTSSBhbmQgQVRBUEkgY29tbWFuZHMgaW4KKyAqIG1pbmQgd2hlbiB0aGV5IGNyZWF0ZWQgdGhpcyBkb2N1bWVudC4gIFRoZSBjb21tYW5kcyBhcmUgYWxsIHZlcnkKKyAqIHNpbWlsYXIgdG8gY29tbWFuZHMgaW4gdGhlIFNDU0ktSUkgYW5kIEFUQVBJIHNwZWNpZmljYXRpb25zLgorICoKKyAqIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgaW4gYSBudW1iZXIgb2YgY2FzZXMgdGhpcyBjbGFzcworICogZXhoaWJpdHMgY2xhc3Mtc3BlY2lmaWMgZXhlbXB0aW9ucyBmcm9tIHRoZSBVU0Igc3BlY2lmaWNhdGlvbi4KKyAqIE5vdGFibHkgdGhlIHVzYWdlIG9mIE5BSywgU1RBTEwgYW5kIEFDSyBkaWZmZXJzIGZyb20gdGhlIG5vcm0sIGluCisgKiB0aGF0IHRoZXkgYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2FpdCwgZmFpbGVkIGFuZCBPSyBvbiBjb21tYW5kcy4KKyAqCisgKiBBbHNvLCBmb3IgY2VydGFpbiBkZXZpY2VzLCB0aGUgaW50ZXJydXB0IGVuZHBvaW50IGlzIHVzZWQgdG8gY29udmV5CisgKiBzdGF0dXMgb2YgYSBjb21tYW5kLgorICoKKyAqIFBsZWFzZSBzZWUgaHR0cDovL3d3dy5vbmUtZXllZC1hbGllbi5uZXQvfm1kaGFybS9saW51eC11c2IgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKyNpbmNsdWRlICJ1c2IuaCIKKyNpbmNsdWRlICJpbml0aWFsaXplcnMuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorCisvKiBUaGlzIHBsYWNlcyB0aGUgU2h1dHRsZS9TQ00gVVNCPC0+U0NTSSBicmlkZ2UgZGV2aWNlcyBpbiBtdWx0aS10YXJnZXQKKyAqIG1vZGUgKi8KK2ludCB1c2Jfc3Rvcl9ldXNjc2lfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJaW50IHJlc3VsdDsKKworCVVTX0RFQlVHUCgiQXR0ZW1wdGluZyB0byBpbml0IGVVU0NTSSBicmlkZ2UuLi5cbiIpOworCXVzLT5pb2J1ZlswXSA9IDB4MTsKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9jb250cm9sX21zZyh1cywgdXMtPnNlbmRfY3RybF9waXBlLAorCQkJMHgwQywgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX1ZFTkRPUiwKKwkJCTB4MDEsIDB4MCwgdXMtPmlvYnVmLCAweDEsIDUqSFopOworCVVTX0RFQlVHUCgiLS0gcmVzdWx0IGlzICVkXG4iLCByZXN1bHQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQgdG8gYWN0aXZhdGUgYWxsIGZvdXIgc2xvdHMgb24gdGhlIFVDUi02MVMyQgorICogZmxhc2ggcmVhZGVyICovCitpbnQgdXNiX3N0b3JfdWNyNjFzMmJfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJc3RydWN0IGJ1bGtfY2Jfd3JhcCAqYmNiID0gKHN0cnVjdCBidWxrX2NiX3dyYXAqKSB1cy0+aW9idWY7CisJc3RydWN0IGJ1bGtfY3Nfd3JhcCAqYmNzID0gKHN0cnVjdCBidWxrX2NzX3dyYXAqKSB1cy0+aW9idWY7CisJaW50IHJlcywgcGFydGlhbDsKKwlzdGF0aWMgY2hhciBpbml0X3N0cmluZ1tdID0gIlx4ZWNceDBhXHgwNlx4MDAkUENDSElQUyI7CisKKwlVU19ERUJVR1AoIlNlbmRpbmcgVUNSLTYxUzJCIGluaXRpYWxpemF0aW9uIHBhY2tldC4uLlxuIik7CisKKwliY2ItPlNpZ25hdHVyZSA9IGNwdV90b19sZTMyKFVTX0JVTEtfQ0JfU0lHTik7CisJYmNiLT5UYWcgPSAwOworCWJjYi0+RGF0YVRyYW5zZmVyTGVuZ3RoID0gY3B1X3RvX2xlMzIoMCk7CisJYmNiLT5GbGFncyA9IGJjYi0+THVuID0gMDsKKwliY2ItPkxlbmd0aCA9IHNpemVvZihpbml0X3N0cmluZykgLSAxOworCW1lbXNldChiY2ItPkNEQiwgMCwgc2l6ZW9mKGJjYi0+Q0RCKSk7CisJbWVtY3B5KGJjYi0+Q0RCLCBpbml0X3N0cmluZywgc2l6ZW9mKGluaXRfc3RyaW5nKSAtIDEpOworCisJcmVzID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5zZW5kX2J1bGtfcGlwZSwgYmNiLAorCQkJVVNfQlVMS19DQl9XUkFQX0xFTiwgJnBhcnRpYWwpOworCWlmKHJlcykKKwkJcmV0dXJuIHJlczsKKworCVVTX0RFQlVHUCgiR2V0dGluZyBzdGF0dXMgcGFja2V0Li4uXG4iKTsKKwlyZXMgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnJlY3ZfYnVsa19waXBlLCBiY3MsCisJCQlVU19CVUxLX0NTX1dSQVBfTEVOLCAmcGFydGlhbCk7CisKKwlyZXR1cm4gKHJlcyA/IC0xIDogMCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pbml0aWFsaXplcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzcyMzg2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pbml0aWFsaXplcnMuaApAQCAtMCwwICsxLDU0IEBACisvKiBIZWFkZXIgZmlsZSBmb3IgU3BlY2lhbCBJbml0aWFsaXplcnMgZm9yIGNlcnRhaW4gVVNCIE1hc3MgU3RvcmFnZSBkZXZpY2VzCisgKgorICogJElkOiBpbml0aWFsaXplcnMuaCx2IDEuMSAyMDAwLzA4LzI5IDIzOjA3OjAyIG1kaGFybSBFeHAgJAorICoKKyAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgorICogICAoYykgMTk5OSwgMjAwMCBNYXR0aGV3IERoYXJtIChtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldCkKKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgJ1VTQiBNYXNzIFN0b3JhZ2UgQ2xhc3MnIGRvY3VtZW50LiBUaGlzCisgKiBkZXNjcmliZXMgaW4gZGV0YWlsIHRoZSBwcm90b2NvbCB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggc3VjaAorICogZGV2aWNlcy4gIENsZWFybHksIHRoZSBkZXNpZ25lcnMgaGFkIFNDU0kgYW5kIEFUQVBJIGNvbW1hbmRzIGluCisgKiBtaW5kIHdoZW4gdGhleSBjcmVhdGVkIHRoaXMgZG9jdW1lbnQuICBUaGUgY29tbWFuZHMgYXJlIGFsbCB2ZXJ5CisgKiBzaW1pbGFyIHRvIGNvbW1hbmRzIGluIHRoZSBTQ1NJLUlJIGFuZCBBVEFQSSBzcGVjaWZpY2F0aW9ucy4KKyAqCisgKiBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IGluIGEgbnVtYmVyIG9mIGNhc2VzIHRoaXMgY2xhc3MKKyAqIGV4aGliaXRzIGNsYXNzLXNwZWNpZmljIGV4ZW1wdGlvbnMgZnJvbSB0aGUgVVNCIHNwZWNpZmljYXRpb24uCisgKiBOb3RhYmx5IHRoZSB1c2FnZSBvZiBOQUssIFNUQUxMIGFuZCBBQ0sgZGlmZmVycyBmcm9tIHRoZSBub3JtLCBpbgorICogdGhhdCB0aGV5IGFyZSB1c2VkIHRvIGNvbW11bmljYXRlIHdhaXQsIGZhaWxlZCBhbmQgT0sgb24gY29tbWFuZHMuCisgKgorICogQWxzbywgZm9yIGNlcnRhaW4gZGV2aWNlcywgdGhlIGludGVycnVwdCBlbmRwb2ludCBpcyB1c2VkIHRvIGNvbnZleQorICogc3RhdHVzIG9mIGEgY29tbWFuZC4KKyAqCisgKiBQbGVhc2Ugc2VlIGh0dHA6Ly93d3cub25lLWV5ZWQtYWxpZW4ubmV0L35tZGhhcm0vbGludXgtdXNiIGZvciBtb3JlCisgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRyaXZlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSAidXNiLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisKKy8qIFRoaXMgcGxhY2VzIHRoZSBTaHV0dGxlL1NDTSBVU0I8LT5TQ1NJIGJyaWRnZSBkZXZpY2VzIGluIG11bHRpLXRhcmdldAorICogbW9kZSAqLworaW50IHVzYl9zdG9yX2V1c2NzaV9pbml0KHN0cnVjdCB1c19kYXRhICp1cyk7CisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5CitpbnQgc2RkcjA5X2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKKyNlbmRpZgorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIHJlcXVpcmVkIHRvIGFjdGl2YXRlIGFsbCBmb3VyIHNsb3RzIG9uIHRoZSBVQ1ItNjFTMkIKKyAqIGZsYXNoIHJlYWRlciAqLworaW50IHVzYl9zdG9yX3VjcjYxczJiX2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjYjMyOGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jCkBAIC0wLDAgKzEsMTQ0MiBAQAorLyogVHJhbnNwb3J0ICYgUHJvdG9jb2wgRHJpdmVyIGZvciBJbi1TeXN0ZW0gRGVzaWduLCBJbmMuIElTRDIwMCBBU0lDCisgKgorICogJElkOiBpc2QyMDAuYyx2IDEuMTYgMjAwMi8wNC8yMiAwMzozOTo0MyBtZGhhcm0gRXhwICQKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZToKKyAqICAgKEMpIDIwMDEtMjAwMiBCavZybiBTdGVuYmVyZyAoYmpvcm5AaGF4eC5zZSkKKyAqCisgKiBEZXZlbG9wZWQgd2l0aCB0aGUgYXNzaXN0YW5jZSBvZjoKKyAqICAgKEMpIDIwMDIgQWxhbiBTdGVybiA8c3Rlcm5Acm93bGFuZC5vcmc+CisgKgorICogSW5pdGlhbCB3b3JrOgorICogICAoQykgMjAwMCBJbi1TeXN0ZW0gRGVzaWduLCBJbmMuIChzdXBwb3J0QGluLXN5c3RlbS5jb20pCisgKgorICogVGhlIElTRDIwMCBBU0lDIGRvZXMgbm90IG5hdGl2ZWx5IHN1cHBvcnQgQVRBIGRldmljZXMuICBUaGUgY2hpcAorICogZG9lcyBpbXBsZW1lbnQgYW4gaW50ZXJmYWNlLCB0aGUgQVRBIENvbW1hbmQgQmxvY2sgKEFUQUNCKSB3aGljaCBwcm92aWRlcworICogYSBtZWFucyBvZiBwYXNzaW5nIEFUQSBjb21tYW5kcyBhbmQgQVRBIHJlZ2lzdGVyIGFjY2Vzc2VzIHRvIGEgZGV2aWNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIEhpc3Rvcnk6CisgKgorICogIDIwMDItMTAtMTk6IFJlbW92ZWQgdGhlIHNwZWNpYWxpemVkIHRyYW5zZmVyIHJvdXRpbmVzLgorICoJCShBbGFuIFN0ZXJuIDxzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1PikKKyAqICAyMDAxLTAyLTI0OiBSZW1vdmVkIGxvdHMgb2YgZHVwbGljYXRlIGNvZGUgYW5kIHNpbXBsaWZpZWQgdGhlIHN0cnVjdHVyZS4KKyAqCSAgICAgIChiam9ybkBoYXh4LnNlKQorICogIDIwMDItMDEtMTY6IEZpeGVkIGVuZGlhbm5lc3MgYnVnIHNvIGl0IHdvcmtzIG9uIHRoZSBwcGMgYXJjaC4KKyAqCSAgICAgIChMdWMgU2FpbGxhcmQgPGx1Y0BzYWlsbGFyZC5vcmc+KQorICogIDIwMDItMDEtMTc6IEFsbCBiaXRmaWVsZHMgcmVtb3ZlZC4KKyAqCSAgICAgIChiam9ybkBoYXh4LnNlKQorICovCisKKworLyogSW5jbHVkZSBmaWxlcyAqLworCisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CisjaW5jbHVkZSA8bGludXgvaWRlLmg+CisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKworI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInByb3RvY29sLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJzY3NpZ2x1ZS5oIgorI2luY2x1ZGUgImlzZDIwMC5oIgorCisKKy8qIFRpbWVvdXQgZGVmaW5lcyAoaW4gU2Vjb25kcykgKi8KKworI2RlZmluZSBJU0QyMDBfRU5VTV9CU1lfVElNRU9VVAkJMzUKKyNkZWZpbmUgSVNEMjAwX0VOVU1fREVURUNUX1RJTUVPVVQgICAgICAzMAorI2RlZmluZSBJU0QyMDBfREVGQVVMVF9USU1FT1VUCQkzMAorCisvKiBkZXZpY2UgZmxhZ3MgKi8KKyNkZWZpbmUgREZfQVRBX0RFVklDRQkJMHgwMDAxCisjZGVmaW5lIERGX01FRElBX1NUQVRVU19FTkFCTEVECTB4MDAwMgorI2RlZmluZSBERl9SRU1PVkFCTEVfTUVESUEJMHgwMDA0CisKKy8qIGNhcGFiaWxpdHkgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIENBUEFCSUxJVFlfRE1BCQkweDAxCisjZGVmaW5lIENBUEFCSUxJVFlfTEJBCQkweDAyCisKKy8qIGNvbW1hbmRfc2V0WCBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ09NTUFORFNFVF9SRU1PVkFCTEUJMHgwMgorI2RlZmluZSBDT01NQU5EU0VUX01FRElBX1NUQVRVUyAweDEwCisKKy8qIEFUQSBWZW5kb3IgU3BlY2lmaWMgZGVmaW5lcyAqLworI2RlZmluZSBBVEFfQUREUkVTU19ERVZIRUFEX1NURCAgICAgIDB4YTAKKyNkZWZpbmUgQVRBX0FERFJFU1NfREVWSEVBRF9MQkFfTU9ERSAweDQwICAgIAorI2RlZmluZSBBVEFfQUREUkVTU19ERVZIRUFEX1NMQVZFICAgIDB4MTAKKworLyogQWN0aW9uIFNlbGVjdCBiaXRzICovCisjZGVmaW5lIEFDVElPTl9TRUxFQ1RfMAkgICAgIDB4MDEKKyNkZWZpbmUgQUNUSU9OX1NFTEVDVF8xCSAgICAgMHgwMgorI2RlZmluZSBBQ1RJT05fU0VMRUNUXzIJICAgICAweDA0CisjZGVmaW5lIEFDVElPTl9TRUxFQ1RfMwkgICAgIDB4MDgKKyNkZWZpbmUgQUNUSU9OX1NFTEVDVF80CSAgICAgMHgxMAorI2RlZmluZSBBQ1RJT05fU0VMRUNUXzUJICAgICAweDIwCisjZGVmaW5lIEFDVElPTl9TRUxFQ1RfNgkgICAgIDB4NDAKKyNkZWZpbmUgQUNUSU9OX1NFTEVDVF83CSAgICAgMHg4MAorCisvKiBSZWdpc3RlciBTZWxlY3QgYml0cyAqLworI2RlZmluZSBSRUdfQUxURVJOQVRFX1NUQVRVUwkweDAxCisjZGVmaW5lIFJFR19ERVZJQ0VfQ09OVFJPTAkweDAxCisjZGVmaW5lIFJFR19FUlJPUgkJMHgwMgorI2RlZmluZSBSRUdfRkVBVFVSRVMJCTB4MDIKKyNkZWZpbmUgUkVHX1NFQ1RPUl9DT1VOVAkweDA0CisjZGVmaW5lIFJFR19TRUNUT1JfTlVNQkVSCTB4MDgKKyNkZWZpbmUgUkVHX0NZTElOREVSX0xPVwkweDEwCisjZGVmaW5lIFJFR19DWUxJTkRFUl9ISUdICTB4MjAKKyNkZWZpbmUgUkVHX0RFVklDRV9IRUFECQkweDQwCisjZGVmaW5lIFJFR19TVEFUVVMJCTB4ODAKKyNkZWZpbmUgUkVHX0NPTU1BTkQJCTB4ODAKKworLyogQVRBIGVycm9yIGRlZmluaXRpb25zIG5vdCBpbiA8bGludXgvaGRyZWcuaD4gKi8KKyNkZWZpbmUgQVRBX0VSUk9SX01FRElBX0NIQU5HRQkJMHgyMAorCisvKiBBVEEgY29tbWFuZCBkZWZpbml0aW9ucyBub3QgaW4gPGxpbnV4L2hkcmVnLmg+ICovCisjZGVmaW5lIEFUQV9DT01NQU5EX0dFVF9NRURJQV9TVEFUVVMJMHhEQQorI2RlZmluZSBBVEFfQ09NTUFORF9NRURJQV9FSkVDVAkJMHhFRAorCisvKiBBVEEgZHJpdmUgY29udHJvbCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBBVEFfRENfRElTQUJMRV9JTlRFUlJVUFRTCTB4MDIKKyNkZWZpbmUgQVRBX0RDX1JFU0VUX0NPTlRST0xMRVIJCTB4MDQKKyNkZWZpbmUgQVRBX0RDX1JFRU5BQkxFX0NPTlRST0xMRVIJMHgwMAorCisvKgorICogIEdlbmVyYWwgcHVycG9zZSByZXR1cm4gY29kZXMKKyAqLyAKKworI2RlZmluZSBJU0QyMDBfRVJST1IJCS0xCisjZGVmaW5lIElTRDIwMF9HT09ECQkgMAorCisvKgorICogVHJhbnNwb3J0IHJldHVybiBjb2RlcworICovCisKKyNkZWZpbmUgSVNEMjAwX1RSQU5TUE9SVF9HT09EICAgICAgIDAgICAvKiBUcmFuc3BvcnQgZ29vZCwgY29tbWFuZCBnb29kICAgICAqLworI2RlZmluZSBJU0QyMDBfVFJBTlNQT1JUX0ZBSUxFRCAgICAgMSAgIC8qIFRyYW5zcG9ydCBnb29kLCBjb21tYW5kIGZhaWxlZCAgICovCisjZGVmaW5lIElTRDIwMF9UUkFOU1BPUlRfRVJST1IgICAgICAyICAgLyogVHJhbnNwb3J0IGJhZCAoaS5lLiBkZXZpY2UgZGVhZCkgKi8KKworLyogZHJpdmVyIGFjdGlvbiBjb2RlcyAqLworI2RlZmluZQlBQ1RJT05fUkVBRF9TVEFUVVMJMAorI2RlZmluZQlBQ1RJT05fUkVTRVQJCTEKKyNkZWZpbmUJQUNUSU9OX1JFRU5BQkxFCQkyCisjZGVmaW5lCUFDVElPTl9TT0ZUX1JFU0VUCTMKKyNkZWZpbmUJQUNUSU9OX0VOVU0JCTQKKyNkZWZpbmUJQUNUSU9OX0lERU5USUZZCQk1CisKKworLyoKKyAqIGF0YV9jZGIgc3RydWN0CisgKi8KKworCit1bmlvbiBhdGFfY2RiIHsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBjaGFyIFNpZ25hdHVyZUJ5dGUwOworCQl1bnNpZ25lZCBjaGFyIFNpZ25hdHVyZUJ5dGUxOworCQl1bnNpZ25lZCBjaGFyIEFjdGlvblNlbGVjdDsKKwkJdW5zaWduZWQgY2hhciBSZWdpc3RlclNlbGVjdDsKKwkJdW5zaWduZWQgY2hhciBUcmFuc2ZlckJsb2NrU2l6ZTsKKwkJdW5zaWduZWQgY2hhciBXcml0ZURhdGEzRjY7CisJCXVuc2lnbmVkIGNoYXIgV3JpdGVEYXRhMUYxOworCQl1bnNpZ25lZCBjaGFyIFdyaXRlRGF0YTFGMjsKKwkJdW5zaWduZWQgY2hhciBXcml0ZURhdGExRjM7CisJCXVuc2lnbmVkIGNoYXIgV3JpdGVEYXRhMUY0OworCQl1bnNpZ25lZCBjaGFyIFdyaXRlRGF0YTFGNTsKKwkJdW5zaWduZWQgY2hhciBXcml0ZURhdGExRjY7CisJCXVuc2lnbmVkIGNoYXIgV3JpdGVEYXRhMUY3OworCQl1bnNpZ25lZCBjaGFyIFJlc2VydmVkWzNdOworCX0gZ2VuZXJpYzsKKworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgU2lnbmF0dXJlQnl0ZTA7CisJCXVuc2lnbmVkIGNoYXIgU2lnbmF0dXJlQnl0ZTE7CisJCXVuc2lnbmVkIGNoYXIgQWN0aW9uU2VsZWN0OworCQl1bnNpZ25lZCBjaGFyIFJlZ2lzdGVyU2VsZWN0OworCQl1bnNpZ25lZCBjaGFyIFRyYW5zZmVyQmxvY2tTaXplOworCQl1bnNpZ25lZCBjaGFyIEFsdGVybmF0ZVN0YXR1c0J5dGU7CisJCXVuc2lnbmVkIGNoYXIgRXJyb3JCeXRlOworCQl1bnNpZ25lZCBjaGFyIFNlY3RvckNvdW50Qnl0ZTsKKwkJdW5zaWduZWQgY2hhciBTZWN0b3JOdW1iZXJCeXRlOworCQl1bnNpZ25lZCBjaGFyIEN5bGluZGVyTG93Qnl0ZTsKKwkJdW5zaWduZWQgY2hhciBDeWxpbmRlckhpZ2hCeXRlOworCQl1bnNpZ25lZCBjaGFyIERldmljZUhlYWRCeXRlOworCQl1bnNpZ25lZCBjaGFyIFN0YXR1c0J5dGU7CisJCXVuc2lnbmVkIGNoYXIgUmVzZXJ2ZWRbM107CisJfSByZWFkOworCisJc3RydWN0IHsKKwkJdW5zaWduZWQgY2hhciBTaWduYXR1cmVCeXRlMDsKKwkJdW5zaWduZWQgY2hhciBTaWduYXR1cmVCeXRlMTsKKwkJdW5zaWduZWQgY2hhciBBY3Rpb25TZWxlY3Q7CisJCXVuc2lnbmVkIGNoYXIgUmVnaXN0ZXJTZWxlY3Q7CisJCXVuc2lnbmVkIGNoYXIgVHJhbnNmZXJCbG9ja1NpemU7CisJCXVuc2lnbmVkIGNoYXIgRGV2aWNlQ29udHJvbEJ5dGU7CisJCXVuc2lnbmVkIGNoYXIgRmVhdHVyZXNCeXRlOworCQl1bnNpZ25lZCBjaGFyIFNlY3RvckNvdW50Qnl0ZTsKKwkJdW5zaWduZWQgY2hhciBTZWN0b3JOdW1iZXJCeXRlOworCQl1bnNpZ25lZCBjaGFyIEN5bGluZGVyTG93Qnl0ZTsKKwkJdW5zaWduZWQgY2hhciBDeWxpbmRlckhpZ2hCeXRlOworCQl1bnNpZ25lZCBjaGFyIERldmljZUhlYWRCeXRlOworCQl1bnNpZ25lZCBjaGFyIENvbW1hbmRCeXRlOworCQl1bnNpZ25lZCBjaGFyIFJlc2VydmVkWzNdOworCX0gd3JpdGU7Cit9OworCisKKy8qCisgKiBJbnF1aXJ5IGRhdGEgc3RydWN0dXJlLiBUaGlzIGlzIHRoZSBkYXRhIHJldHVybmVkIGZyb20gdGhlIHRhcmdldAorICogYWZ0ZXIgaXQgcmVjZWl2ZXMgYW4gaW5xdWlyeS4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBtYXkgYmUgZXh0ZW5kZWQgYnkgdGhlIG51bWJlciBvZiBieXRlcyBzcGVjaWZpZWQKKyAqIGluIHRoZSBmaWVsZCBBZGRpdGlvbmFsTGVuZ3RoLiBUaGUgZGVmaW5lZCBzaXplIGNvbnN0YW50IG9ubHkKKyAqIGluY2x1ZGVzIGZpZWxkcyB0aHJvdWdoIFByb2R1Y3RSZXZpc2lvbkxldmVsLgorICovCisKKy8qCisgKiBEZXZpY2VUeXBlIGZpZWxkCisgKi8KKyNkZWZpbmUgRElSRUNUX0FDQ0VTU19ERVZJQ0UJICAgIDB4MDAgICAgLyogZGlza3MgKi8KKyNkZWZpbmUgREVWSUNFX1JFTU9WQUJMRQkJMHg4MAorCitzdHJ1Y3QgaW5xdWlyeV9kYXRhIHsKKyAgIAl1bnNpZ25lZCBjaGFyIERldmljZVR5cGU7CisJdW5zaWduZWQgY2hhciBEZXZpY2VUeXBlTW9kaWZpZXI7CisJdW5zaWduZWQgY2hhciBWZXJzaW9uczsKKwl1bnNpZ25lZCBjaGFyIEZvcm1hdDsgCisJdW5zaWduZWQgY2hhciBBZGRpdGlvbmFsTGVuZ3RoOworCXVuc2lnbmVkIGNoYXIgUmVzZXJ2ZWRbMl07CisJdW5zaWduZWQgY2hhciBDYXBhYmlsaXR5OworCXVuc2lnbmVkIGNoYXIgVmVuZG9ySWRbOF07CisJdW5zaWduZWQgY2hhciBQcm9kdWN0SWRbMTZdOworCXVuc2lnbmVkIGNoYXIgUHJvZHVjdFJldmlzaW9uTGV2ZWxbNF07CisJdW5zaWduZWQgY2hhciBWZW5kb3JTcGVjaWZpY1syMF07CisJdW5zaWduZWQgY2hhciBSZXNlcnZlZDNbNDBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBJTlFVSVJZIGRhdGEgYnVmZmVyIHNpemUKKyAqLworCisjZGVmaW5lIElOUVVJUllEQVRBQlVGRkVSU0laRSAzNgorCisKKy8qCisgKiBJU0QyMDAgQ09ORklHIGRhdGEgc3RydWN0CisgKi8KKworI2RlZmluZSBBVEFDRkdfVElNSU5HCSAgMHgwZgorI2RlZmluZSBBVEFDRkdfQVRBUElfUkVTRVQgICAgIDB4MTAKKyNkZWZpbmUgQVRBQ0ZHX01BU1RFUgkgIDB4MjAKKyNkZWZpbmUgQVRBQ0ZHX0JMT0NLU0laRSAgICAgICAweGEwCisKKyNkZWZpbmUgQVRBQ0ZHRV9MQVNUX0xVTiAgICAgICAweDA3CisjZGVmaW5lIEFUQUNGR0VfREVTQ19PVkVSUklERSAgMHgwOAorI2RlZmluZSBBVEFDRkdFX1NUQVRFX1NVU1BFTkQgIDB4MTAKKyNkZWZpbmUgQVRBQ0ZHRV9TS0lQX0JPT1QgICAgICAweDIwCisjZGVmaW5lIEFUQUNGR0VfQ09ORl9ERVNDMiAgICAgMHg0MAorI2RlZmluZSBBVEFDRkdFX0lOSVRfU1RBVFVTICAgIDB4ODAKKworI2RlZmluZSBDRkdfQ0FQQUJJTElUWV9TUlNUICAgIDB4MDEKKworc3RydWN0IGlzZDIwMF9jb25maWcgeworCXVuc2lnbmVkIGNoYXIgRXZlbnROb3RpZmljYXRpb247CisJdW5zaWduZWQgY2hhciBFeHRlcm5hbENsb2NrOworCXVuc2lnbmVkIGNoYXIgQVRBSW5pdFRpbWVvdXQ7CisJdW5zaWduZWQgY2hhciBBVEFDb25maWc7CisJdW5zaWduZWQgY2hhciBBVEFNYWpvckNvbW1hbmQ7CisJdW5zaWduZWQgY2hhciBBVEFNaW5vckNvbW1hbmQ7CisJdW5zaWduZWQgY2hhciBBVEFFeHRyYUNvbmZpZzsKKwl1bnNpZ25lZCBjaGFyIENhcGFiaWxpdHk7Cit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKy8qCisgKiBJU0QyMDAgZHJpdmVyIGluZm9ybWF0aW9uIHN0cnVjdAorICovCisKK3N0cnVjdCBpc2QyMDBfaW5mbyB7CisJc3RydWN0IGlucXVpcnlfZGF0YSBJbnF1aXJ5RGF0YTsKKwlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQ7CisJc3RydWN0IGlzZDIwMF9jb25maWcgQ29uZmlnRGF0YTsKKwl1bnNpZ25lZCBjaGFyICpSZWdzQnVmOworCXVuc2lnbmVkIGNoYXIgQVRBUmVnc1s4XTsKKwl1bnNpZ25lZCBjaGFyIERldmljZUhlYWQ7CisJdW5zaWduZWQgY2hhciBEZXZpY2VGbGFnczsKKworCS8qIG1heGltdW0gbnVtYmVyIG9mIExVTnMgc3VwcG9ydGVkICovCisJdW5zaWduZWQgY2hhciBNYXhMVU5zOworCXN0cnVjdCBzY3NpX2NtbmQgc3JiOworfTsKKworCisvKgorICogUmVhZCBDYXBhY2l0eSBEYXRhIC0gcmV0dXJuZWQgaW4gQmlnIEVuZGlhbiBmb3JtYXQKKyAqLworCitzdHJ1Y3QgcmVhZF9jYXBhY2l0eV9kYXRhIHsKKwlfX2JlMzIgTG9naWNhbEJsb2NrQWRkcmVzczsKKwlfX2JlMzIgQnl0ZXNQZXJCbG9jazsKK307CisKKy8qCisgKiBSZWFkIEJsb2NrIExpbWl0cyBEYXRhIC0gcmV0dXJuZWQgaW4gQmlnIEVuZGlhbiBmb3JtYXQKKyAqIFRoaXMgc3RydWN0dXJlIHJldHVybnMgdGhlIG1heGltdW0gYW5kIG1pbmltdW0gYmxvY2sKKyAqIHNpemUgZm9yIGEgVEFQRSBkZXZpY2UuCisgKi8KKworc3RydWN0IHJlYWRfYmxvY2tfbGltaXRzIHsKKwl1bnNpZ25lZCBjaGFyIFJlc2VydmVkOworCXVuc2lnbmVkIGNoYXIgQmxvY2tNYXhpbXVtU2l6ZVszXTsKKwl1bnNpZ25lZCBjaGFyIEJsb2NrTWluaW11bVNpemVbMl07Cit9OworCisKKy8qCisgKiBTZW5zZSBEYXRhIEZvcm1hdAorICovCisKKyNkZWZpbmUgU0VOU0VfRVJSQ09ERQkgICAweDdmCisjZGVmaW5lIFNFTlNFX0VSUkNPREVfVkFMSUQgICAgIDB4ODAKKyNkZWZpbmUgU0VOU0VfRkxBR19TRU5TRV9LRVkgICAgMHgwZgorI2RlZmluZSBTRU5TRV9GTEFHX0JBRF9MRU5HVEggICAweDIwCisjZGVmaW5lIFNFTlNFX0ZMQUdfRU5EX09GX01FRElBIDB4NDAKKyNkZWZpbmUgU0VOU0VfRkxBR19GSUxFX01BUksgICAgMHg4MAorc3RydWN0IHNlbnNlX2RhdGEgeworCXVuc2lnbmVkIGNoYXIgRXJyb3JDb2RlOworCXVuc2lnbmVkIGNoYXIgU2VnbWVudE51bWJlcjsKKwl1bnNpZ25lZCBjaGFyIEZsYWdzOworCXVuc2lnbmVkIGNoYXIgSW5mb3JtYXRpb25bNF07CisJdW5zaWduZWQgY2hhciBBZGRpdGlvbmFsU2Vuc2VMZW5ndGg7CisJdW5zaWduZWQgY2hhciBDb21tYW5kU3BlY2lmaWNJbmZvcm1hdGlvbls0XTsKKwl1bnNpZ25lZCBjaGFyIEFkZGl0aW9uYWxTZW5zZUNvZGU7CisJdW5zaWduZWQgY2hhciBBZGRpdGlvbmFsU2Vuc2VDb2RlUXVhbGlmaWVyOworCXVuc2lnbmVkIGNoYXIgRmllbGRSZXBsYWNlYWJsZVVuaXRDb2RlOworCXVuc2lnbmVkIGNoYXIgU2Vuc2VLZXlTcGVjaWZpY1szXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogRGVmYXVsdCByZXF1ZXN0IHNlbnNlIGJ1ZmZlciBzaXplCisgKi8KKworI2RlZmluZSBTRU5TRV9CVUZGRVJfU0laRSAxOAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEhlbHBlciByb3V0aW5lcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlzZDIwMF9idWlsZF9zZW5zZQorICoJCQkJCQkJCQkgCisgKiAgQnVpbGRzIGFuIGFydGlmaWNpYWwgc2Vuc2UgYnVmZmVyIHRvIHJlcG9ydCB0aGUgcmVzdWx0cyBvZiBhIAorICogIGZhaWxlZCBjb21tYW5kLgorICoJCQkJCQkJCSAgICAgICAKKyAqIFJFVFVSTlM6CisgKiAgICB2b2lkCisgKi8KK3N0YXRpYyB2b2lkIGlzZDIwMF9idWlsZF9zZW5zZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHN0cnVjdCBzY3NpX2NtbmQgKnNyYikKK3sKKwlzdHJ1Y3QgaXNkMjAwX2luZm8gKmluZm8gPSAoc3RydWN0IGlzZDIwMF9pbmZvICopdXMtPmV4dHJhOworCXN0cnVjdCBzZW5zZV9kYXRhICpidWYgPSAoc3RydWN0IHNlbnNlX2RhdGEgKikgJnNyYi0+c2Vuc2VfYnVmZmVyWzBdOworCXVuc2lnbmVkIGNoYXIgZXJyb3IgPSBpbmZvLT5BVEFSZWdzW0lERV9FUlJPUl9PRkZTRVRdOworCisJaWYoZXJyb3IgJiBBVEFfRVJST1JfTUVESUFfQ0hBTkdFKSB7CisJCWJ1Zi0+RXJyb3JDb2RlID0gMHg3MCB8IFNFTlNFX0VSUkNPREVfVkFMSUQ7CisJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlTGVuZ3RoID0gMHhiOworCQlidWYtPkZsYWdzID0gVU5JVF9BVFRFTlRJT047CisJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlQ29kZSA9IDA7CisJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlQ29kZVF1YWxpZmllciA9IDA7CisJfSBlbHNlIGlmKGVycm9yICYgTUNSX0VSUikgeworCQlidWYtPkVycm9yQ29kZSA9IDB4NzAgfCBTRU5TRV9FUlJDT0RFX1ZBTElEOworCQlidWYtPkFkZGl0aW9uYWxTZW5zZUxlbmd0aCA9IDB4YjsKKwkJYnVmLT5GbGFncyA9ICBVTklUX0FUVEVOVElPTjsKKwkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VDb2RlID0gMDsKKwkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VDb2RlUXVhbGlmaWVyID0gMDsKKwl9IGVsc2UgaWYoZXJyb3IgJiBUUkswX0VSUikgeworCQlidWYtPkVycm9yQ29kZSA9IDB4NzAgfCBTRU5TRV9FUlJDT0RFX1ZBTElEOworCQlidWYtPkFkZGl0aW9uYWxTZW5zZUxlbmd0aCA9IDB4YjsKKwkJYnVmLT5GbGFncyA9ICBOT1RfUkVBRFk7CisJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlQ29kZSA9IDA7CisJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlQ29kZVF1YWxpZmllciA9IDA7CisJfSBlbHNlIGlmKGVycm9yICYgRUNDX0VSUikgeworCQlidWYtPkVycm9yQ29kZSA9IDB4NzAgfCBTRU5TRV9FUlJDT0RFX1ZBTElEOworCQlidWYtPkFkZGl0aW9uYWxTZW5zZUxlbmd0aCA9IDB4YjsKKwkJYnVmLT5GbGFncyA9ICBEQVRBX1BST1RFQ1Q7CisJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlQ29kZSA9IDA7CisJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlQ29kZVF1YWxpZmllciA9IDA7CisJfSBlbHNlIHsKKwkJYnVmLT5FcnJvckNvZGUgPSAwOworCQlidWYtPkFkZGl0aW9uYWxTZW5zZUxlbmd0aCA9IDA7CisJCWJ1Zi0+RmxhZ3MgPSAgMDsKKwkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VDb2RlID0gMDsKKwkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VDb2RlUXVhbGlmaWVyID0gMDsKKwl9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUcmFuc3BvcnQgcm91dGluZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBpc2QyMDBfYWN0aW9uCisgKgorICogUm91dGluZSBmb3Igc2VuZGluZyBjb21tYW5kcyB0byB0aGUgaXNkMjAwCisgKgorICogUkVUVVJOUzoKKyAqICAgIElTRCBzdGF0dXMgY29kZQorICovCitzdGF0aWMgaW50IGlzZDIwMF9hY3Rpb24oIHN0cnVjdCB1c19kYXRhICp1cywgaW50IGFjdGlvbiwgCisJCQkgIHZvaWQqIHBvaW50ZXIsIGludCB2YWx1ZSApCit7CisJdW5pb24gYXRhX2NkYiBhdGE7CisJc3RydWN0IHNjc2lfZGV2aWNlIHNyYl9kZXY7CisJc3RydWN0IGlzZDIwMF9pbmZvICppbmZvID0gKHN0cnVjdCBpc2QyMDBfaW5mbyAqKXVzLT5leHRyYTsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIgPSAmaW5mby0+c3JiOworCWludCBzdGF0dXM7CisKKwltZW1zZXQoJmF0YSwgMCwgc2l6ZW9mKGF0YSkpOworCW1lbXNldCgmc3JiX2RldiwgMCwgc2l6ZW9mKHNyYl9kZXYpKTsKKwlzcmItPmRldmljZSA9ICZzcmJfZGV2OworCSsrc3JiLT5zZXJpYWxfbnVtYmVyOworCisJYXRhLmdlbmVyaWMuU2lnbmF0dXJlQnl0ZTAgPSBpbmZvLT5Db25maWdEYXRhLkFUQU1ham9yQ29tbWFuZDsKKwlhdGEuZ2VuZXJpYy5TaWduYXR1cmVCeXRlMSA9IGluZm8tPkNvbmZpZ0RhdGEuQVRBTWlub3JDb21tYW5kOworCWF0YS5nZW5lcmljLlRyYW5zZmVyQmxvY2tTaXplID0gMTsKKworCXN3aXRjaCAoIGFjdGlvbiApIHsKKwljYXNlIEFDVElPTl9SRUFEX1NUQVRVUzoKKwkJVVNfREVCVUdQKCIgICBpc2QyMDBfYWN0aW9uKFJFQURfU1RBVFVTKVxuIik7CisJCWF0YS5nZW5lcmljLkFjdGlvblNlbGVjdCA9IEFDVElPTl9TRUxFQ1RfMHxBQ1RJT05fU0VMRUNUXzI7CisJCWF0YS5nZW5lcmljLlJlZ2lzdGVyU2VsZWN0ID0KKwkJICBSRUdfQ1lMSU5ERVJfTE9XIHwgUkVHX0NZTElOREVSX0hJR0ggfAorCQkgIFJFR19TVEFUVVMgfCBSRUdfRVJST1I7CisJCXNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPSBETUFfRlJPTV9ERVZJQ0U7CisJCXNyYi0+cmVxdWVzdF9idWZmZXIgPSBwb2ludGVyOworCQlzcmItPnJlcXVlc3RfYnVmZmxlbiA9IHZhbHVlOworCQlicmVhazsKKworCWNhc2UgQUNUSU9OX0VOVU06CisJCVVTX0RFQlVHUCgiICAgaXNkMjAwX2FjdGlvbihFTlVNLDB4JTAyeClcbiIsdmFsdWUpOworCQlhdGEuZ2VuZXJpYy5BY3Rpb25TZWxlY3QgPSBBQ1RJT05fU0VMRUNUXzF8QUNUSU9OX1NFTEVDVF8yfAorCQkJCQkgICBBQ1RJT05fU0VMRUNUXzN8QUNUSU9OX1NFTEVDVF80fAorCQkJCQkgICBBQ1RJT05fU0VMRUNUXzU7CisJCWF0YS5nZW5lcmljLlJlZ2lzdGVyU2VsZWN0ID0gUkVHX0RFVklDRV9IRUFEOworCQlhdGEud3JpdGUuRGV2aWNlSGVhZEJ5dGUgPSB2YWx1ZTsKKwkJc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9IERNQV9OT05FOworCQlicmVhazsKKworCWNhc2UgQUNUSU9OX1JFU0VUOgorCQlVU19ERUJVR1AoIiAgIGlzZDIwMF9hY3Rpb24oUkVTRVQpXG4iKTsKKwkJYXRhLmdlbmVyaWMuQWN0aW9uU2VsZWN0ID0gQUNUSU9OX1NFTEVDVF8xfEFDVElPTl9TRUxFQ1RfMnwKKwkJCQkJICAgQUNUSU9OX1NFTEVDVF8zfEFDVElPTl9TRUxFQ1RfNDsKKwkJYXRhLmdlbmVyaWMuUmVnaXN0ZXJTZWxlY3QgPSBSRUdfREVWSUNFX0NPTlRST0w7CisJCWF0YS53cml0ZS5EZXZpY2VDb250cm9sQnl0ZSA9IEFUQV9EQ19SRVNFVF9DT05UUk9MTEVSOworCQlzcmItPnNjX2RhdGFfZGlyZWN0aW9uID0gRE1BX05PTkU7CisJCWJyZWFrOworCisJY2FzZSBBQ1RJT05fUkVFTkFCTEU6CisJCVVTX0RFQlVHUCgiICAgaXNkMjAwX2FjdGlvbihSRUVOQUJMRSlcbiIpOworCQlhdGEuZ2VuZXJpYy5BY3Rpb25TZWxlY3QgPSBBQ1RJT05fU0VMRUNUXzF8QUNUSU9OX1NFTEVDVF8yfAorCQkJCQkgICBBQ1RJT05fU0VMRUNUXzN8QUNUSU9OX1NFTEVDVF80OworCQlhdGEuZ2VuZXJpYy5SZWdpc3RlclNlbGVjdCA9IFJFR19ERVZJQ0VfQ09OVFJPTDsKKwkJYXRhLndyaXRlLkRldmljZUNvbnRyb2xCeXRlID0gQVRBX0RDX1JFRU5BQkxFX0NPTlRST0xMRVI7CisJCXNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPSBETUFfTk9ORTsKKwkJYnJlYWs7CisKKwljYXNlIEFDVElPTl9TT0ZUX1JFU0VUOgorCQlVU19ERUJVR1AoIiAgIGlzZDIwMF9hY3Rpb24oU09GVF9SRVNFVClcbiIpOworCQlhdGEuZ2VuZXJpYy5BY3Rpb25TZWxlY3QgPSBBQ1RJT05fU0VMRUNUXzF8QUNUSU9OX1NFTEVDVF81OworCQlhdGEuZ2VuZXJpYy5SZWdpc3RlclNlbGVjdCA9IFJFR19ERVZJQ0VfSEVBRCB8IFJFR19DT01NQU5EOworCQlhdGEud3JpdGUuRGV2aWNlSGVhZEJ5dGUgPSBpbmZvLT5EZXZpY2VIZWFkOworCQlhdGEud3JpdGUuQ29tbWFuZEJ5dGUgPSBXSU5fU1JTVDsKKwkJc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9IERNQV9OT05FOworCQlicmVhazsKKworCWNhc2UgQUNUSU9OX0lERU5USUZZOgorCQlVU19ERUJVR1AoIiAgIGlzZDIwMF9hY3Rpb24oSURFTlRJRlkpXG4iKTsKKwkJYXRhLmdlbmVyaWMuUmVnaXN0ZXJTZWxlY3QgPSBSRUdfQ09NTUFORDsKKwkJYXRhLndyaXRlLkNvbW1hbmRCeXRlID0gV0lOX0lERU5USUZZOworCQlzcmItPnNjX2RhdGFfZGlyZWN0aW9uID0gRE1BX0ZST01fREVWSUNFOworCQlzcmItPnJlcXVlc3RfYnVmZmVyID0gKHZvaWQgKikgaW5mby0+aWQ7CisJCXNyYi0+cmVxdWVzdF9idWZmbGVuID0gc2l6ZW9mKHN0cnVjdCBoZF9kcml2ZWlkKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlVU19ERUJVR1AoIkVycm9yOiBVbmRlZmluZWQgYWN0aW9uICVkXG4iLGFjdGlvbik7CisJCWJyZWFrOworCX0KKworCW1lbWNweShzcmItPmNtbmQsICZhdGEsIHNpemVvZihhdGEuZ2VuZXJpYykpOworCXNyYi0+Y21kX2xlbiA9IHNpemVvZihhdGEuZ2VuZXJpYyk7CisJc3RhdHVzID0gdXNiX3N0b3JfQnVsa190cmFuc3BvcnQoc3JiLCB1cyk7CisJaWYgKHN0YXR1cyA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJc3RhdHVzID0gSVNEMjAwX0dPT0Q7CisJZWxzZSB7CisJCVVTX0RFQlVHUCgiICAgaXNkMjAwX2FjdGlvbigweCUwMngpIGVycm9yOiAlZFxuIixhY3Rpb24sc3RhdHVzKTsKKwkJc3RhdHVzID0gSVNEMjAwX0VSUk9SOworCQkvKiBuZWVkIHRvIHJlc2V0IGRldmljZSBoZXJlICovCisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpc2QyMDBfcmVhZF9yZWdzCisgKgkJCQkJCQkJCSAKKyAqIFJlYWQgQVRBIFJlZ2lzdGVycworICoKKyAqIFJFVFVSTlM6CisgKiAgICBJU0Qgc3RhdHVzIGNvZGUKKyAqLworc3RhdGljIGludCBpc2QyMDBfcmVhZF9yZWdzKCBzdHJ1Y3QgdXNfZGF0YSAqdXMgKQoreworCXN0cnVjdCBpc2QyMDBfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgaXNkMjAwX2luZm8gKil1cy0+ZXh0cmE7CisJaW50IHJldFN0YXR1cyA9IElTRDIwMF9HT09EOworCWludCB0cmFuc2ZlclN0YXR1czsKKworCVVTX0RFQlVHUCgiRW50ZXJpbmcgaXNkMjAwX0lzc3VlQVRBUmVhZFJlZ3NcbiIpOworCisJdHJhbnNmZXJTdGF0dXMgPSBpc2QyMDBfYWN0aW9uKCB1cywgQUNUSU9OX1JFQURfU1RBVFVTLAorCQkJCSAgICBpbmZvLT5SZWdzQnVmLCBzaXplb2YoaW5mby0+QVRBUmVncykgKTsKKwlpZiAodHJhbnNmZXJTdGF0dXMgIT0gSVNEMjAwX1RSQU5TUE9SVF9HT09EKSB7CisJCVVTX0RFQlVHUCgiICAgRXJyb3IgcmVhZGluZyBBVEEgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0U3RhdHVzID0gSVNEMjAwX0VSUk9SOworCX0gZWxzZSB7CisJCW1lbWNweShpbmZvLT5BVEFSZWdzLCBpbmZvLT5SZWdzQnVmLCBzaXplb2YoaW5mby0+QVRBUmVncykpOworCQlVU19ERUJVR1AoIiAgIEdvdCBBVEEgUmVnaXN0ZXJbSURFX0VSUk9SX09GRlNFVF0gPSAweCV4XG4iLCAKKwkJCSAgaW5mby0+QVRBUmVnc1tJREVfRVJST1JfT0ZGU0VUXSk7CisJfQorCisJcmV0dXJuIHJldFN0YXR1czsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEludm9rZSB0aGUgdHJhbnNwb3J0IGFuZCBiYXNpYyBlcnJvci1oYW5kbGluZy9yZWNvdmVyeSBtZXRob2RzCisgKgorICogVGhpcyBpcyB1c2VkIGJ5IHRoZSBwcm90b2NvbCBsYXllcnMgdG8gYWN0dWFsbHkgc2VuZCB0aGUgbWVzc2FnZSB0bworICogdGhlIGRldmljZSBhbmQgcmVjZWl2ZSB0aGUgcmVzcG9uc2UuCisgKi8KK3N0YXRpYyB2b2lkIGlzZDIwMF9pbnZva2VfdHJhbnNwb3J0KCBzdHJ1Y3QgdXNfZGF0YSAqdXMsIAorCQkJICAgICAgc3RydWN0IHNjc2lfY21uZCAqc3JiLCAKKwkJCSAgICAgIHVuaW9uIGF0YV9jZGIgKmF0YUNkYiApCit7CisJaW50IG5lZWRfYXV0b19zZW5zZSA9IDA7CisJaW50IHRyYW5zZmVyU3RhdHVzOworCWludCByZXN1bHQ7CisKKwkvKiBzZW5kIHRoZSBjb21tYW5kIHRvIHRoZSB0cmFuc3BvcnQgbGF5ZXIgKi8KKwltZW1jcHkoc3JiLT5jbW5kLCBhdGFDZGIsIHNpemVvZihhdGFDZGItPmdlbmVyaWMpKTsKKwlzcmItPmNtZF9sZW4gPSBzaXplb2YoYXRhQ2RiLT5nZW5lcmljKTsKKwl0cmFuc2ZlclN0YXR1cyA9IHVzYl9zdG9yX0J1bGtfdHJhbnNwb3J0KHNyYiwgdXMpOworCisJLyogaWYgdGhlIGNvbW1hbmQgZ2V0cyBhYm9ydGVkIGJ5IHRoZSBoaWdoZXIgbGF5ZXJzLCB3ZSBuZWVkIHRvCisJICogc2hvcnQtY2lyY3VpdCBhbGwgb3RoZXIgcHJvY2Vzc2luZworCSAqLworCWlmICh0ZXN0X2JpdChVU19GTElEWF9USU1FRF9PVVQsICZ1cy0+ZmxhZ3MpKSB7CisJCVVTX0RFQlVHUCgiLS0gY29tbWFuZCB3YXMgYWJvcnRlZFxuIik7CisJCWdvdG8gSGFuZGxlX0Fib3J0OworCX0KKworCXN3aXRjaCAodHJhbnNmZXJTdGF0dXMpIHsKKworCWNhc2UgVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q6CisJCS8qIEluZGljYXRlIGEgZ29vZCByZXN1bHQgKi8KKwkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9HT09EOworCQlicmVhazsKKworCWNhc2UgVVNCX1NUT1JfVFJBTlNQT1JUX05PX1NFTlNFOgorCQlVU19ERUJVR1AoIi0tIHRyYW5zcG9ydCBpbmRpY2F0ZXMgcHJvdG9jb2wgZmFpbHVyZVxuIik7CisJCXNyYi0+cmVzdWx0ID0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOworCQlyZXR1cm47CisKKwljYXNlIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ6CisJCVVTX0RFQlVHUCgiLS0gdHJhbnNwb3J0IGluZGljYXRlcyBjb21tYW5kIGZhaWx1cmVcbiIpOworCQluZWVkX2F1dG9fc2Vuc2UgPSAxOworCQlicmVhazsKKworCWNhc2UgVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOgorCQlVU19ERUJVR1AoIi0tIHRyYW5zcG9ydCBpbmRpY2F0ZXMgdHJhbnNwb3J0IGVycm9yXG4iKTsKKwkJc3JiLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CisJCS8qIE5lZWQgcmVzZXQgaGVyZSAqLworCQlyZXR1cm47CisgICAgCisJZGVmYXVsdDoKKwkJVVNfREVCVUdQKCItLSB0cmFuc3BvcnQgaW5kaWNhdGVzIHVua25vd24gZXJyb3JcbiIpOyAgIAorCQlzcmItPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJLyogTmVlZCByZXNldCBoZXJlICovCisJCXJldHVybjsKKwl9CisKKwlpZiAoKHNyYi0+cmVzaWQgPiAwKSAmJgorCSAgICAhKChzcmItPmNtbmRbMF0gPT0gUkVRVUVTVF9TRU5TRSkgfHwKKwkgICAgICAoc3JiLT5jbW5kWzBdID09IElOUVVJUlkpIHx8CisJICAgICAgKHNyYi0+Y21uZFswXSA9PSBNT0RFX1NFTlNFKSB8fAorCSAgICAgIChzcmItPmNtbmRbMF0gPT0gTE9HX1NFTlNFKSB8fAorCSAgICAgIChzcmItPmNtbmRbMF0gPT0gTU9ERV9TRU5TRV8xMCkpKSB7CisJCVVTX0RFQlVHUCgiLS0gdW5leHBlY3RlZGx5IHNob3J0IHRyYW5zZmVyXG4iKTsKKwkJbmVlZF9hdXRvX3NlbnNlID0gMTsKKwl9CisKKwlpZiAobmVlZF9hdXRvX3NlbnNlKSB7CisJCXJlc3VsdCA9IGlzZDIwMF9yZWFkX3JlZ3ModXMpOworCQlpZiAodGVzdF9iaXQoVVNfRkxJRFhfVElNRURfT1VULCAmdXMtPmZsYWdzKSkgeworCQkJVVNfREVCVUdQKCItLSBhdXRvLXNlbnNlIGFib3J0ZWRcbiIpOworCQkJZ290byBIYW5kbGVfQWJvcnQ7CisJCX0KKwkJaWYgKHJlc3VsdCA9PSBJU0QyMDBfR09PRCkgeworCQkJaXNkMjAwX2J1aWxkX3NlbnNlKHVzLCBzcmIpOworCQkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CisKKwkJCS8qIElmIHRoaW5ncyBhcmUgcmVhbGx5IG9rYXksIHRoZW4gbGV0J3Mgc2hvdyB0aGF0ICovCisJCQlpZiAoKHNyYi0+c2Vuc2VfYnVmZmVyWzJdICYgMHhmKSA9PSAweDApCisJCQkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9HT09EOworCQl9IGVsc2UgeworCQkJc3JiLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CisJCQkvKiBOZWVkIHJlc2V0IGhlcmUgKi8KKwkJfQorCX0KKworCS8qIFJlZ2FyZGxlc3Mgb2YgYXV0by1zZW5zZSwgaWYgd2UgX2tub3dfIHdlIGhhdmUgYW4gZXJyb3IKKwkgKiBjb25kaXRpb24sIHNob3cgdGhhdCBpbiB0aGUgcmVzdWx0IGNvZGUKKwkgKi8KKwlpZiAodHJhbnNmZXJTdGF0dXMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRCkKKwkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CisJcmV0dXJuOworCisJLyogYWJvcnQgcHJvY2Vzc2luZzogdGhlIGJ1bGstb25seSB0cmFuc3BvcnQgcmVxdWlyZXMgYSByZXNldAorCSAqIGZvbGxvd2luZyBhbiBhYm9ydCAqLworCUhhbmRsZV9BYm9ydDoKKwlzcmItPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKKworCS8qIHBlcm1pdCB0aGUgcmVzZXQgdHJhbnNmZXIgdG8gdGFrZSBwbGFjZSAqLworCWNsZWFyX2JpdChVU19GTElEWF9BQk9SVElORywgJnVzLT5mbGFncyk7CisJLyogTmVlZCByZXNldCBoZXJlICovCit9CisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcKK3N0YXRpYyB2b2lkIGlzZDIwMF9sb2dfY29uZmlnKCBzdHJ1Y3QgaXNkMjAwX2luZm8qIGluZm8gKQoreworCVVTX0RFQlVHUCgiICAgICAgRXZlbnQgTm90aWZpY2F0aW9uOiAweCV4XG4iLCAKKwkJICBpbmZvLT5Db25maWdEYXRhLkV2ZW50Tm90aWZpY2F0aW9uKTsKKwlVU19ERUJVR1AoIiAgICAgIEV4dGVybmFsIENsb2NrOiAweCV4XG4iLCAKKwkJICBpbmZvLT5Db25maWdEYXRhLkV4dGVybmFsQ2xvY2spOworCVVTX0RFQlVHUCgiICAgICAgQVRBIEluaXQgVGltZW91dDogMHgleFxuIiwgCisJCSAgaW5mby0+Q29uZmlnRGF0YS5BVEFJbml0VGltZW91dCk7CisJVVNfREVCVUdQKCIgICAgICBBVEFQSSBDb21tYW5kIEJsb2NrIFNpemU6IDB4JXhcbiIsIAorCQkgIChpbmZvLT5Db25maWdEYXRhLkFUQUNvbmZpZyAmIEFUQUNGR19CTE9DS1NJWkUpID4+IDYpOworCVVTX0RFQlVHUCgiICAgICAgTWFzdGVyL1NsYXZlIFNlbGVjdGlvbjogMHgleFxuIiwgCisJCSAgaW5mby0+Q29uZmlnRGF0YS5BVEFDb25maWcgJiBBVEFDRkdfTUFTVEVSKTsKKwlVU19ERUJVR1AoIiAgICAgIEFUQVBJIFJlc2V0OiAweCV4XG4iLAorCQkgIGluZm8tPkNvbmZpZ0RhdGEuQVRBQ29uZmlnICYgQVRBQ0ZHX0FUQVBJX1JFU0VUKTsKKwlVU19ERUJVR1AoIiAgICAgIEFUQSBUaW1pbmc6IDB4JXhcbiIsCisJCSAgaW5mby0+Q29uZmlnRGF0YS5BVEFDb25maWcgJiBBVEFDRkdfVElNSU5HKTsKKwlVU19ERUJVR1AoIiAgICAgIEFUQSBNYWpvciBDb21tYW5kOiAweCV4XG4iLCAKKwkJICBpbmZvLT5Db25maWdEYXRhLkFUQU1ham9yQ29tbWFuZCk7CisJVVNfREVCVUdQKCIgICAgICBBVEEgTWlub3IgQ29tbWFuZDogMHgleFxuIiwgCisJCSAgaW5mby0+Q29uZmlnRGF0YS5BVEFNaW5vckNvbW1hbmQpOworCVVTX0RFQlVHUCgiICAgICAgSW5pdCBTdGF0dXM6IDB4JXhcbiIsIAorCQkgIGluZm8tPkNvbmZpZ0RhdGEuQVRBRXh0cmFDb25maWcgJiBBVEFDRkdFX0lOSVRfU1RBVFVTKTsKKwlVU19ERUJVR1AoIiAgICAgIENvbmZpZyBEZXNjcmlwdG9yIDI6IDB4JXhcbiIsIAorCQkgIGluZm8tPkNvbmZpZ0RhdGEuQVRBRXh0cmFDb25maWcgJiBBVEFDRkdFX0NPTkZfREVTQzIpOworCVVTX0RFQlVHUCgiICAgICAgU2tpcCBEZXZpY2UgQm9vdDogMHgleFxuIiwKKwkJICBpbmZvLT5Db25maWdEYXRhLkFUQUV4dHJhQ29uZmlnICYgQVRBQ0ZHRV9TS0lQX0JPT1QpOworCVVTX0RFQlVHUCgiICAgICAgQVRBIDMgU3RhdGUgU3Vwc2VuZDogMHgleFxuIiwKKwkJICBpbmZvLT5Db25maWdEYXRhLkFUQUV4dHJhQ29uZmlnICYgQVRBQ0ZHRV9TVEFURV9TVVNQRU5EKTsKKwlVU19ERUJVR1AoIiAgICAgIERlc2NyaXB0b3IgT3ZlcnJpZGU6IDB4JXhcbiIsIAorCQkgIGluZm8tPkNvbmZpZ0RhdGEuQVRBRXh0cmFDb25maWcgJiBBVEFDRkdFX0RFU0NfT1ZFUlJJREUpOworCVVTX0RFQlVHUCgiICAgICAgTGFzdCBMVU4gSWRlbnRpZmllcjogMHgleFxuIiwKKwkJICBpbmZvLT5Db25maWdEYXRhLkFUQUV4dHJhQ29uZmlnICYgQVRBQ0ZHRV9MQVNUX0xVTik7CisJVVNfREVCVUdQKCIgICAgICBTUlNUIEVuYWJsZTogMHgleFxuIiwgCisJCSAgaW5mby0+Q29uZmlnRGF0YS5BVEFFeHRyYUNvbmZpZyAmIENGR19DQVBBQklMSVRZX1NSU1QpOworfQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaXNkMjAwX3dyaXRlX2NvbmZpZworICoJCQkJCQkJCQkgCisgKiBXcml0ZSB0aGUgSVNEMjAwIENvbmZpZ3VyYXRpb24gZGF0YQorICoKKyAqIFJFVFVSTlM6CisgKiAgICBJU0Qgc3RhdHVzIGNvZGUKKyAqLworc3RhdGljIGludCBpc2QyMDBfd3JpdGVfY29uZmlnKCBzdHJ1Y3QgdXNfZGF0YSAqdXMgKSAKK3sKKwlzdHJ1Y3QgaXNkMjAwX2luZm8gKmluZm8gPSAoc3RydWN0IGlzZDIwMF9pbmZvICopdXMtPmV4dHJhOworCWludCByZXRTdGF0dXMgPSBJU0QyMDBfR09PRDsKKwlpbnQgcmVzdWx0OworCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHCisJVVNfREVCVUdQKCJFbnRlcmluZyBpc2QyMDBfd3JpdGVfY29uZmlnXG4iKTsKKwlVU19ERUJVR1AoIiAgIFdyaXRpbmcgdGhlIGZvbGxvd2luZyBJU0QyMDAgQ29uZmlnIERhdGE6XG4iKTsKKwlpc2QyMDBfbG9nX2NvbmZpZyhpbmZvKTsKKyNlbmRpZgorCisJLyogbGV0J3Mgc2VuZCB0aGUgY29tbWFuZCB2aWEgdGhlIGNvbnRyb2wgcGlwZSAqLworCXJlc3VsdCA9IHVzYl9zdG9yX2N0cmxfdHJhbnNmZXIoCisJCXVzLCAKKwkJdXMtPnNlbmRfY3RybF9waXBlLAorCQkweDAxLCAKKwkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfT1VULAorCQkweDAwMDAsIAorCQkweDAwMDIsIAorCQkodm9pZCAqKSAmaW5mby0+Q29uZmlnRGF0YSwgCisJCXNpemVvZihpbmZvLT5Db25maWdEYXRhKSk7CisKKwlpZiAocmVzdWx0ID49IDApIHsKKwkJVVNfREVCVUdQKCIgICBJU0QyMDAgQ29uZmlnIERhdGEgd2FzIHdyaXR0ZW4gc3VjY2Vzc2Z1bGx5XG4iKTsKKwl9IGVsc2UgeworCQlVU19ERUJVR1AoIiAgIFJlcXVlc3QgdG8gd3JpdGUgSVNEMjAwIENvbmZpZyBEYXRhIGZhaWxlZCFcbiIpOworCQlyZXRTdGF0dXMgPSBJU0QyMDBfRVJST1I7CisJfQorCisJVVNfREVCVUdQKCJMZWF2aW5nIGlzZDIwMF93cml0ZV9jb25maWcgJTA4WFxuIiwgcmV0U3RhdHVzKTsKKwlyZXR1cm4gcmV0U3RhdHVzOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaXNkMjAwX3JlYWRfY29uZmlnCisgKgkJCQkJCQkJCSAKKyAqIFJlYWRzIHRoZSBJU0QyMDAgQ29uZmlndXJhdGlvbiBkYXRhCisgKgorICogUkVUVVJOUzoKKyAqICAgIElTRCBzdGF0dXMgY29kZQorICovCitzdGF0aWMgaW50IGlzZDIwMF9yZWFkX2NvbmZpZyggc3RydWN0IHVzX2RhdGEgKnVzICkgCit7CisJc3RydWN0IGlzZDIwMF9pbmZvICppbmZvID0gKHN0cnVjdCBpc2QyMDBfaW5mbyAqKXVzLT5leHRyYTsKKwlpbnQgcmV0U3RhdHVzID0gSVNEMjAwX0dPT0Q7CisJaW50IHJlc3VsdDsKKworCVVTX0RFQlVHUCgiRW50ZXJpbmcgaXNkMjAwX3JlYWRfY29uZmlnXG4iKTsKKworCS8qIHJlYWQgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZnJvbSBJU0QyMDAuICBVc2UgdGhpcyB0byAqLworCS8qIGRldGVybWluZSB3aGF0IHRoZSBzcGVjaWFsIEFUQSBDREIgYnl0ZXMgYXJlLgkJKi8KKworCXJlc3VsdCA9IHVzYl9zdG9yX2N0cmxfdHJhbnNmZXIoCisJCXVzLCAKKwkJdXMtPnJlY3ZfY3RybF9waXBlLAorCQkweDAyLCAKKwkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCisJCTB4MDAwMCwgCisJCTB4MDAwMiwgCisJCSh2b2lkICopICZpbmZvLT5Db25maWdEYXRhLCAKKwkJc2l6ZW9mKGluZm8tPkNvbmZpZ0RhdGEpKTsKKworCisJaWYgKHJlc3VsdCA+PSAwKSB7CisJCVVTX0RFQlVHUCgiICAgUmV0cmlldmVkIHRoZSBmb2xsb3dpbmcgSVNEMjAwIENvbmZpZyBEYXRhOlxuIik7CisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHCisJCWlzZDIwMF9sb2dfY29uZmlnKGluZm8pOworI2VuZGlmCisJfSBlbHNlIHsKKwkJVVNfREVCVUdQKCIgICBSZXF1ZXN0IHRvIGdldCBJU0QyMDAgQ29uZmlnIERhdGEgZmFpbGVkIVxuIik7CisJCXJldFN0YXR1cyA9IElTRDIwMF9FUlJPUjsKKwl9CisKKwlVU19ERUJVR1AoIkxlYXZpbmcgaXNkMjAwX3JlYWRfY29uZmlnICUwOFhcbiIsIHJldFN0YXR1cyk7CisJcmV0dXJuIHJldFN0YXR1czsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlzZDIwMF9hdGFwaV9zb2Z0X3Jlc2V0CisgKgkJCQkJCQkJCSAKKyAqIFBlcmZvcm0gYW4gQXRhcGkgU29mdCBSZXNldCBvbiB0aGUgZGV2aWNlCisgKgorICogUkVUVVJOUzoKKyAqICAgIE5UIHN0YXR1cyBjb2RlCisgKi8KK3N0YXRpYyBpbnQgaXNkMjAwX2F0YXBpX3NvZnRfcmVzZXQoIHN0cnVjdCB1c19kYXRhICp1cyApIAoreworCWludCByZXRTdGF0dXMgPSBJU0QyMDBfR09PRDsKKwlpbnQgdHJhbnNmZXJTdGF0dXM7CisKKwlVU19ERUJVR1AoIkVudGVyaW5nIGlzZDIwMF9hdGFwaV9zb2Z0X3Jlc2V0XG4iKTsKKworCXRyYW5zZmVyU3RhdHVzID0gaXNkMjAwX2FjdGlvbiggdXMsIEFDVElPTl9TT0ZUX1JFU0VULCBOVUxMLCAwICk7CisJaWYgKHRyYW5zZmVyU3RhdHVzICE9IElTRDIwMF9UUkFOU1BPUlRfR09PRCkgeworCQlVU19ERUJVR1AoIiAgIEVycm9yIGlzc3VpbmcgQXRhcGkgU29mdCBSZXNldFxuIik7CisJCXJldFN0YXR1cyA9IElTRDIwMF9FUlJPUjsKKwl9CisKKwlVU19ERUJVR1AoIkxlYXZpbmcgaXNkMjAwX2F0YXBpX3NvZnRfcmVzZXQgJTA4WFxuIiwgcmV0U3RhdHVzKTsKKwlyZXR1cm4gcmV0U3RhdHVzOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaXNkMjAwX3Nyc3QKKyAqCQkJCQkJCQkJIAorICogUGVyZm9ybSBhbiBTUlNUIG9uIHRoZSBkZXZpY2UKKyAqCisgKiBSRVRVUk5TOgorICogICAgSVNEIHN0YXR1cyBjb2RlCisgKi8KK3N0YXRpYyBpbnQgaXNkMjAwX3Nyc3QoIHN0cnVjdCB1c19kYXRhICp1cyApIAoreworCWludCByZXRTdGF0dXMgPSBJU0QyMDBfR09PRDsKKwlpbnQgdHJhbnNmZXJTdGF0dXM7CisKKwlVU19ERUJVR1AoIkVudGVyaW5nIGlzZDIwMF9TUlNUXG4iKTsKKworCXRyYW5zZmVyU3RhdHVzID0gaXNkMjAwX2FjdGlvbiggdXMsIEFDVElPTl9SRVNFVCwgTlVMTCwgMCApOworCisJLyogY2hlY2sgdG8gc2VlIGlmIHRoaXMgcmVxdWVzdCBmYWlsZWQgKi8KKwlpZiAodHJhbnNmZXJTdGF0dXMgIT0gSVNEMjAwX1RSQU5TUE9SVF9HT09EKSB7CisJCVVTX0RFQlVHUCgiICAgRXJyb3IgaXNzdWluZyBTUlNUXG4iKTsKKwkJcmV0U3RhdHVzID0gSVNEMjAwX0VSUk9SOworCX0gZWxzZSB7CisJCS8qIGRlbGF5IDEwbXMgdG8gZ2l2ZSB0aGUgZHJpdmUgYSBjaGFuY2UgdG8gc2VlIGl0ICovCisJCW1zbGVlcCgxMCk7CisKKwkJdHJhbnNmZXJTdGF0dXMgPSBpc2QyMDBfYWN0aW9uKCB1cywgQUNUSU9OX1JFRU5BQkxFLCBOVUxMLCAwICk7CisJCWlmICh0cmFuc2ZlclN0YXR1cyAhPSBJU0QyMDBfVFJBTlNQT1JUX0dPT0QpIHsKKwkJCVVTX0RFQlVHUCgiICAgRXJyb3IgdGFraW5nIGRyaXZlIG91dCBvZiByZXNldFxuIik7CisJCQlyZXRTdGF0dXMgPSBJU0QyMDBfRVJST1I7CisJCX0gZWxzZSB7CisJCQkvKiBkZWxheSA1MG1zIHRvIGdpdmUgdGhlIGRyaXZlIGEgY2hhbmNlIHRvIHJlY292ZXIgYWZ0ZXIgU1JTVCAqLworCQkJbXNsZWVwKDUwKTsKKwkJfQorCX0KKworCVVTX0RFQlVHUCgiTGVhdmluZyBpc2QyMDBfc3JzdCAlMDhYXG4iLCByZXRTdGF0dXMpOworCXJldHVybiByZXRTdGF0dXM7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpc2QyMDBfdHJ5X2VudW0KKyAqCQkJCQkJCQkJIAorICogSGVscGVyIGZ1bmN0aW9uIGZvciBpc2QyMDBfbWFudWFsX2VudW0oKS4gRG9lcyBFTlVNIGFuZCBSRUFEX1NUQVRVUworICogYW5kIHRyaWVzIHRvIGFuYWx5emUgdGhlIHN0YXR1cyByZWdpc3RlcnMKKyAqCisgKiBSRVRVUk5TOgorICogICAgSVNEIHN0YXR1cyBjb2RlCisgKi8KK3N0YXRpYyBpbnQgaXNkMjAwX3RyeV9lbnVtKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgY2hhciBtYXN0ZXJfc2xhdmUsCisJCQkgICBpbnQgZGV0ZWN0ICkKK3sKKwlpbnQgc3RhdHVzID0gSVNEMjAwX0dPT0Q7CisJdW5zaWduZWQgbG9uZyBlbmRUaW1lOworCXN0cnVjdCBpc2QyMDBfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgaXNkMjAwX2luZm8gKil1cy0+ZXh0cmE7CisJdW5zaWduZWQgY2hhciAqcmVncyA9IGluZm8tPlJlZ3NCdWY7CisJaW50IHJlY2hlY2tBc01hc3RlciA9IDA7CisKKwlpZiAoIGRldGVjdCApCisJCWVuZFRpbWUgPSBqaWZmaWVzICsgSVNEMjAwX0VOVU1fREVURUNUX1RJTUVPVVQgKiBIWjsKKwllbHNlCisJCWVuZFRpbWUgPSBqaWZmaWVzICsgSVNEMjAwX0VOVU1fQlNZX1RJTUVPVVQgKiBIWjsKKworCS8qIGxvb3AgdW50aWwgd2UgZGV0ZWN0ICFCU1kgb3IgdGltZW91dCAqLworCXdoaWxlKDEpIHsKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcKKwkJY2hhciogbXN0ciA9IG1hc3Rlcl9zbGF2ZSA9PSBBVEFfQUREUkVTU19ERVZIRUFEX1NURCA/CisJCQkiTWFzdGVyIiA6ICJTbGF2ZSI7CisjZW5kaWYKKworCQlzdGF0dXMgPSBpc2QyMDBfYWN0aW9uKCB1cywgQUNUSU9OX0VOVU0sIE5VTEwsIG1hc3Rlcl9zbGF2ZSApOworCQlpZiAoIHN0YXR1cyAhPSBJU0QyMDBfR09PRCApCisJCQlicmVhazsKKworCQlzdGF0dXMgPSBpc2QyMDBfYWN0aW9uKCB1cywgQUNUSU9OX1JFQURfU1RBVFVTLCAKKwkJCQkJcmVncywgOCApOworCQlpZiAoIHN0YXR1cyAhPSBJU0QyMDBfR09PRCApCisJCQlicmVhazsKKworCQlpZiAoIWRldGVjdCkgeworCQkJaWYgKHJlZ3NbSURFX1NUQVRVU19PRkZTRVRdICYgQlVTWV9TVEFUICkgeworCQkJCVVTX0RFQlVHUCgiICAgJXMgc3RhdHVzIGlzIHN0aWxsIEJTWSwgdHJ5IGFnYWluLi4uXG4iLG1zdHIpOworCQkJfSBlbHNlIHsKKwkJCQlVU19ERUJVR1AoIiAgICVzIHN0YXR1cyAhQlNZLCBjb250aW51ZSB3aXRoIG5leHQgb3BlcmF0aW9uXG4iLG1zdHIpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCS8qIGNoZWNrIGZvciBCVVNZX1NUQVQgYW5kICovCisJCS8qIFdSRVJSX1NUQVQgKHdvcmthcm91bmQgQVRBIFppcCBkcml2ZSkgYW5kICovIAorCQkvKiBFUlJfU1RBVCAod29ya2Fyb3VuZCBmb3IgQXJjaG9zIENELVJPTSkgKi8KKwkJZWxzZSBpZiAocmVnc1tJREVfU1RBVFVTX09GRlNFVF0gJiAKKwkJCSAoQlVTWV9TVEFUIHwgV1JFUlJfU1RBVCB8IEVSUl9TVEFUICkpIHsKKwkJCVVTX0RFQlVHUCgiICAgU3RhdHVzIGluZGljYXRlcyBpdCBpcyBub3QgcmVhZHksIHRyeSBhZ2Fpbi4uLlxuIik7CisJCX0KKwkJLyogY2hlY2sgZm9yIERSRFksIEFUQSBkZXZpY2VzIHNldCBEUkRZIGFmdGVyIFNSU1QgKi8KKwkJZWxzZSBpZiAocmVnc1tJREVfU1RBVFVTX09GRlNFVF0gJiBSRUFEWV9TVEFUKSB7CisJCQlVU19ERUJVR1AoIiAgIElkZW50aWZpZWQgQVRBIGRldmljZVxuIik7CisJCQlpbmZvLT5EZXZpY2VGbGFncyB8PSBERl9BVEFfREVWSUNFOworCQkJaW5mby0+RGV2aWNlSGVhZCA9IG1hc3Rlcl9zbGF2ZTsKKwkJCWJyZWFrOworCQl9IAorCQkvKiBjaGVjayBDeWxpbmRlciBIaWdoL0xvdyB0bworCQkgICBkZXRlcm1pbmUgaWYgaXQgaXMgYW4gQVRBUEkgZGV2aWNlCisJCSovCisJCWVsc2UgaWYgKChyZWdzW0lERV9IQ1lMX09GRlNFVF0gPT0gMHhFQikgJiYKKwkJCSAocmVnc1tJREVfTENZTF9PRkZTRVRdID09IDB4MTQpKSB7CisJCQkvKiBJdCBzZWVtcyB0aGF0IHRoZSBSSUNPSCAKKwkJCSAgIE1QNjIwMEEgQ0QvUlcgZHJpdmUgd2lsbCAKKwkJCSAgIHJlcG9ydCBpdHNlbGYgb2theSBhcyBhCisJCQkgICBzbGF2ZSB3aGVuIGl0IGlzIHJlYWxseSBhCisJCQkgICBtYXN0ZXIuIFNvIHRoaXMgY2hlY2sgYWdhaW4KKwkJCSAgIGFzIGEgbWFzdGVyIGRldmljZSBqdXN0IHRvCisJCQkgICBtYWtlIHN1cmUgaXQgZG9lc24ndCByZXBvcnQKKwkJCSAgIGl0c2VsZiBva2F5IGFzIGEgbWFzdGVyIGFsc28KKwkJCSovCisJCQlpZiAoKG1hc3Rlcl9zbGF2ZSAmIEFUQV9BRERSRVNTX0RFVkhFQURfU0xBVkUpICYmCisJCQkgICAgIXJlY2hlY2tBc01hc3RlcikgeworCQkJCVVTX0RFQlVHUCgiICAgSWRlbnRpZmllZCBBVEFQSSBkZXZpY2UgYXMgc2xhdmUuICBSZWNoZWNraW5nIGFnYWluIGFzIG1hc3RlclxuIik7CisJCQkJcmVjaGVja0FzTWFzdGVyID0gMTsKKwkJCQltYXN0ZXJfc2xhdmUgPSBBVEFfQUREUkVTU19ERVZIRUFEX1NURDsKKwkJCX0gZWxzZSB7CisJCQkJVVNfREVCVUdQKCIgICBJZGVudGlmaWVkIEFUQVBJIGRldmljZVxuIik7CisJCQkJaW5mby0+RGV2aWNlSGVhZCA9IG1hc3Rlcl9zbGF2ZTsKKwkJCSAgICAgIAorCQkJCXN0YXR1cyA9IGlzZDIwMF9hdGFwaV9zb2Z0X3Jlc2V0KHVzKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKyAJCQlVU19ERUJVR1AoIiAgIE5vdCBBVEEsIG5vdCBBVEFQSS4gV2VpcmQuXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogY2hlY2sgZm9yIHRpbWVvdXQgb24gdGhpcyByZXF1ZXN0ICovCisJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIGVuZFRpbWUpKSB7CisJCQlpZiAoIWRldGVjdCkKKwkJCQlVU19ERUJVR1AoIiAgIEJTWSBjaGVjayB0aW1lb3V0LCBqdXN0IGNvbnRpbnVlIHdpdGggbmV4dCBvcGVyYXRpb24uLi5cbiIpOworCQkJZWxzZQorCQkJCVVTX0RFQlVHUCgiICAgRGV2aWNlIGRldGVjdCB0aW1lb3V0IVxuIik7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaXNkMjAwX21hbnVhbF9lbnVtCisgKgkJCQkJCQkJCSAKKyAqIERldGVybWluZXMgaWYgdGhlIGRyaXZlIGF0dGFjaGVkIGlzIGFuIEFUQSBvciBBVEFQSSBhbmQgaWYgaXQgaXMgYQorICogbWFzdGVyIG9yIHNsYXZlLgorICoKKyAqIFJFVFVSTlM6CisgKiAgICBJU0Qgc3RhdHVzIGNvZGUKKyAqLworc3RhdGljIGludCBpc2QyMDBfbWFudWFsX2VudW0oc3RydWN0IHVzX2RhdGEgKnVzKQoreworCXN0cnVjdCBpc2QyMDBfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgaXNkMjAwX2luZm8gKil1cy0+ZXh0cmE7CisJaW50IHJldFN0YXR1cyA9IElTRDIwMF9HT09EOworCisJVVNfREVCVUdQKCJFbnRlcmluZyBpc2QyMDBfbWFudWFsX2VudW1cbiIpOworCisJcmV0U3RhdHVzID0gaXNkMjAwX3JlYWRfY29uZmlnKHVzKTsKKwlpZiAocmV0U3RhdHVzID09IElTRDIwMF9HT09EKSB7CisJCWludCBpc3NsYXZlOworCQkvKiBtYXN0ZXIgb3Igc2xhdmU/ICovCisJCXJldFN0YXR1cyA9IGlzZDIwMF90cnlfZW51bSggdXMsIEFUQV9BRERSRVNTX0RFVkhFQURfU1RELCAwKTsKKwkJaWYgKHJldFN0YXR1cyA9PSBJU0QyMDBfR09PRCkKKwkJCXJldFN0YXR1cyA9IGlzZDIwMF90cnlfZW51bSggdXMsIEFUQV9BRERSRVNTX0RFVkhFQURfU0xBVkUsIDApOworCisJCWlmIChyZXRTdGF0dXMgPT0gSVNEMjAwX0dPT0QpIHsKKwkJCXJldFN0YXR1cyA9IGlzZDIwMF9zcnN0KHVzKTsKKwkJCWlmIChyZXRTdGF0dXMgPT0gSVNEMjAwX0dPT0QpCisJCQkJLyogYXRhIG9yIGF0YXBpPyAqLworCQkJCXJldFN0YXR1cyA9IGlzZDIwMF90cnlfZW51bSggdXMsIEFUQV9BRERSRVNTX0RFVkhFQURfU1RELCAxKTsKKwkJfQorCisJCWlzc2xhdmUgPSAoaW5mby0+RGV2aWNlSGVhZCAmIEFUQV9BRERSRVNTX0RFVkhFQURfU0xBVkUpID8gMSA6IDA7CisJCWlmICghKGluZm8tPkNvbmZpZ0RhdGEuQVRBQ29uZmlnICYgQVRBQ0ZHX01BU1RFUikpIHsKKwkJCVVTX0RFQlVHUCgiICAgU2V0dGluZyBNYXN0ZXIvU2xhdmUgc2VsZWN0aW9uIHRvICVkXG4iLCBpc3NsYXZlKTsKKwkJCWluZm8tPkNvbmZpZ0RhdGEuQVRBQ29uZmlnICY9IDB4M2Y7CisJCQlpbmZvLT5Db25maWdEYXRhLkFUQUNvbmZpZyB8PSAoaXNzbGF2ZTw8Nik7CisJCQlyZXRTdGF0dXMgPSBpc2QyMDBfd3JpdGVfY29uZmlnKHVzKTsKKwkJfQorCX0KKworCVVTX0RFQlVHUCgiTGVhdmluZyBpc2QyMDBfbWFudWFsX2VudW0gJTA4WFxuIiwgcmV0U3RhdHVzKTsKKwlyZXR1cm4ocmV0U3RhdHVzKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlzZDIwMF9nZXRfaW5xdWlyeV9kYXRhCisgKgorICogR2V0IGlucXVpcnkgZGF0YQorICoKKyAqIFJFVFVSTlM6CisgKiAgICBJU0Qgc3RhdHVzIGNvZGUKKyAqLworc3RhdGljIGludCBpc2QyMDBfZ2V0X2lucXVpcnlfZGF0YSggc3RydWN0IHVzX2RhdGEgKnVzICkKK3sKKwlzdHJ1Y3QgaXNkMjAwX2luZm8gKmluZm8gPSAoc3RydWN0IGlzZDIwMF9pbmZvICopdXMtPmV4dHJhOworCWludCByZXRTdGF0dXMgPSBJU0QyMDBfR09PRDsKKwlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQgPSBpbmZvLT5pZDsKKworCVVTX0RFQlVHUCgiRW50ZXJpbmcgaXNkMjAwX2dldF9pbnF1aXJ5X2RhdGFcbiIpOworCisJLyogc2V0IGRlZmF1bHQgdG8gTWFzdGVyICovCisJaW5mby0+RGV2aWNlSGVhZCA9IEFUQV9BRERSRVNTX0RFVkhFQURfU1REOworCisJLyogYXR0ZW1wdCB0byBtYW51YWxseSBlbnVtZXJhdGUgdGhpcyBkZXZpY2UgKi8KKwlyZXRTdGF0dXMgPSBpc2QyMDBfbWFudWFsX2VudW0odXMpOworCWlmIChyZXRTdGF0dXMgPT0gSVNEMjAwX0dPT0QpIHsKKwkJaW50IHRyYW5zZmVyU3RhdHVzOworCisJCS8qIGNoZWNrIGZvciBhbiBBVEEgZGV2aWNlICovCisJCWlmIChpbmZvLT5EZXZpY2VGbGFncyAmIERGX0FUQV9ERVZJQ0UpIHsKKwkJCS8qIHRoaXMgbXVzdCBiZSBhbiBBVEEgZGV2aWNlICovCisJCQkvKiBwZXJmb3JtIGFuIEFUQSBDb21tYW5kIElkZW50aWZ5ICovCisJCQl0cmFuc2ZlclN0YXR1cyA9IGlzZDIwMF9hY3Rpb24oIHVzLCBBQ1RJT05fSURFTlRJRlksCisJCQkJCQkJaWQsIAorCQkJCQkJCXNpemVvZihzdHJ1Y3QgaGRfZHJpdmVpZCkgKTsKKwkJCWlmICh0cmFuc2ZlclN0YXR1cyAhPSBJU0QyMDBfVFJBTlNQT1JUX0dPT0QpIHsKKwkJCQkvKiBFcnJvciBpc3N1aW5nIEFUQSBDb21tYW5kIElkZW50aWZ5ICovCisJCQkJVVNfREVCVUdQKCIgICBFcnJvciBpc3N1aW5nIEFUQSBDb21tYW5kIElkZW50aWZ5XG4iKTsKKwkJCQlyZXRTdGF0dXMgPSBJU0QyMDBfRVJST1I7CisJCQl9IGVsc2UgeworCQkJCS8qIEFUQSBDb21tYW5kIElkZW50aWZ5IHN1Y2Nlc3NmdWwgKi8KKwkJCQlpbnQgaTsKKwkJCQlfX2JlMTYgKnNyYzsKKwkJCQlfX3UxNiAqZGVzdDsKKwkJCQlpZGVfZml4X2RyaXZlaWQoaWQpOworCisJCQkJVVNfREVCVUdQKCIgICBJZGVudGlmeSBEYXRhIFN0cnVjdHVyZTpcbiIpOworCQkJCVVTX0RFQlVHUCgiICAgICAgY29uZmlnID0gMHgleFxuIiwgaWQtPmNvbmZpZyk7CisJCQkJVVNfREVCVUdQKCIgICAgICBjeWxzID0gMHgleFxuIiwgaWQtPmN5bHMpOworCQkJCVVTX0RFQlVHUCgiICAgICAgaGVhZHMgPSAweCV4XG4iLCBpZC0+aGVhZHMpOworCQkJCVVTX0RFQlVHUCgiICAgICAgdHJhY2tfYnl0ZXMgPSAweCV4XG4iLCBpZC0+dHJhY2tfYnl0ZXMpOworCQkJCVVTX0RFQlVHUCgiICAgICAgc2VjdG9yX2J5dGVzID0gMHgleFxuIiwgaWQtPnNlY3Rvcl9ieXRlcyk7CisJCQkJVVNfREVCVUdQKCIgICAgICBzZWN0b3JzID0gMHgleFxuIiwgaWQtPnNlY3RvcnMpOworCQkJCVVTX0RFQlVHUCgiICAgICAgc2VyaWFsX25vWzBdID0gMHgleFxuIiwgaWQtPnNlcmlhbF9ub1swXSk7CisJCQkJVVNfREVCVUdQKCIgICAgICBidWZfdHlwZSA9IDB4JXhcbiIsIGlkLT5idWZfdHlwZSk7CisJCQkJVVNfREVCVUdQKCIgICAgICBidWZfc2l6ZSA9IDB4JXhcbiIsIGlkLT5idWZfc2l6ZSk7CisJCQkJVVNfREVCVUdQKCIgICAgICBlY2NfYnl0ZXMgPSAweCV4XG4iLCBpZC0+ZWNjX2J5dGVzKTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIGZ3X3JldlswXSA9IDB4JXhcbiIsIGlkLT5md19yZXZbMF0pOworCQkJCVVTX0RFQlVHUCgiICAgICAgbW9kZWxbMF0gPSAweCV4XG4iLCBpZC0+bW9kZWxbMF0pOworCQkJCVVTX0RFQlVHUCgiICAgICAgbWF4X211bHRzZWN0ID0gMHgleFxuIiwgaWQtPm1heF9tdWx0c2VjdCk7CisJCQkJVVNfREVCVUdQKCIgICAgICBkd29yZF9pbyA9IDB4JXhcbiIsIGlkLT5kd29yZF9pbyk7CisJCQkJVVNfREVCVUdQKCIgICAgICBjYXBhYmlsaXR5ID0gMHgleFxuIiwgaWQtPmNhcGFiaWxpdHkpOworCQkJCVVTX0RFQlVHUCgiICAgICAgdFBJTyA9IDB4JXhcbiIsIGlkLT50UElPKTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIHRETUEgPSAweCV4XG4iLCBpZC0+dERNQSk7CisJCQkJVVNfREVCVUdQKCIgICAgICBmaWVsZF92YWxpZCA9IDB4JXhcbiIsIGlkLT5maWVsZF92YWxpZCk7CisJCQkJVVNfREVCVUdQKCIgICAgICBjdXJfY3lscyA9IDB4JXhcbiIsIGlkLT5jdXJfY3lscyk7CisJCQkJVVNfREVCVUdQKCIgICAgICBjdXJfaGVhZHMgPSAweCV4XG4iLCBpZC0+Y3VyX2hlYWRzKTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIGN1cl9zZWN0b3JzID0gMHgleFxuIiwgaWQtPmN1cl9zZWN0b3JzKTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIGN1cl9jYXBhY2l0eSA9IDB4JXhcbiIsIChpZC0+Y3VyX2NhcGFjaXR5MSA8PCAxNikgKyBpZC0+Y3VyX2NhcGFjaXR5MCApOworCQkJCVVTX0RFQlVHUCgiICAgICAgbXVsdHNlY3QgPSAweCV4XG4iLCBpZC0+bXVsdHNlY3QpOworCQkJCVVTX0RFQlVHUCgiICAgICAgbGJhX2NhcGFjaXR5ID0gMHgleFxuIiwgaWQtPmxiYV9jYXBhY2l0eSk7CisJCQkJVVNfREVCVUdQKCIgICAgICBjb21tYW5kX3NldF8xID0gMHgleFxuIiwgaWQtPmNvbW1hbmRfc2V0XzEpOworCQkJCVVTX0RFQlVHUCgiICAgICAgY29tbWFuZF9zZXRfMiA9IDB4JXhcbiIsIGlkLT5jb21tYW5kX3NldF8yKTsKKworCQkJCW1lbXNldCgmaW5mby0+SW5xdWlyeURhdGEsIDAsIHNpemVvZihpbmZvLT5JbnF1aXJ5RGF0YSkpOworCisJCQkJLyogU3RhbmRhcmQgSURFIGludGVyZmFjZSBvbmx5IHN1cHBvcnRzIGRpc2tzICovCisJCQkJaW5mby0+SW5xdWlyeURhdGEuRGV2aWNlVHlwZSA9IERJUkVDVF9BQ0NFU1NfREVWSUNFOworCisJCQkJLyogVGhlIGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0IDM2ICg1ICsgMzEpICovCisJCQkJaW5mby0+SW5xdWlyeURhdGEuQWRkaXRpb25hbExlbmd0aCA9IDB4MUY7CisKKwkJCQlpZiAoaWQtPmNvbW1hbmRfc2V0XzEgJiBDT01NQU5EU0VUX01FRElBX1NUQVRVUykgeworCQkJCQkvKiBzZXQgdGhlIHJlbW92YWJsZSBiaXQgKi8KKwkJCQkJaW5mby0+SW5xdWlyeURhdGEuRGV2aWNlVHlwZU1vZGlmaWVyID0gREVWSUNFX1JFTU9WQUJMRTsKKwkJCQkJaW5mby0+RGV2aWNlRmxhZ3MgfD0gREZfUkVNT1ZBQkxFX01FRElBOworCQkJCX0KKworCQkJCS8qIEZpbGwgaW4gdmVuZG9yIGlkZW50aWZpY2F0aW9uIGZpZWxkcyAqLworCQkJCXNyYyA9IChfX2JlMTYqKWlkLT5tb2RlbDsKKwkJCQlkZXN0ID0gKF9fdTE2KilpbmZvLT5JbnF1aXJ5RGF0YS5WZW5kb3JJZDsKKwkJCQlmb3IgKGk9MDtpPDQ7aSsrKQorCQkJCQlkZXN0W2ldID0gYmUxNl90b19jcHUoc3JjW2ldKTsKKworCQkJCXNyYyA9IChfX2JlMTYqKShpZC0+bW9kZWwrOCk7CisJCQkJZGVzdCA9IChfX3UxNiopaW5mby0+SW5xdWlyeURhdGEuUHJvZHVjdElkOworCQkJCWZvciAoaT0wO2k8ODtpKyspCisJCQkJCWRlc3RbaV0gPSBiZTE2X3RvX2NwdShzcmNbaV0pOworCisJCQkJc3JjID0gKF9fYmUxNiopaWQtPmZ3X3JldjsKKwkJCQlkZXN0ID0gKF9fdTE2KilpbmZvLT5JbnF1aXJ5RGF0YS5Qcm9kdWN0UmV2aXNpb25MZXZlbDsKKwkJCQlmb3IgKGk9MDtpPDI7aSsrKQorCQkJCQlkZXN0W2ldID0gYmUxNl90b19jcHUoc3JjW2ldKTsKKworCQkJCS8qIGRldGVybWluZSBpZiBpdCBzdXBwb3J0cyBNZWRpYSBTdGF0dXMgTm90aWZpY2F0aW9uICovCisJCQkJaWYgKGlkLT5jb21tYW5kX3NldF8yICYgQ09NTUFORFNFVF9NRURJQV9TVEFUVVMpIHsKKwkJCQkJVVNfREVCVUdQKCIgICBEZXZpY2Ugc3VwcG9ydHMgTWVkaWEgU3RhdHVzIE5vdGlmaWNhdGlvblxuIik7CisKKwkJCQkJLyogSW5kaWNhdGUgdGhhdCBpdCBpcyBlbmFibGVkLCBldmVuIHRob3VnaCBpdCBpcyBub3QKKwkJCQkJICogVGhpcyBhbGxvd3MgdGhlIGxvY2svdW5sb2NrIG9mIHRoZSBtZWRpYSB0byB3b3JrCisJCQkJCSAqIGNvcnJlY3RseS4KKwkJCQkJICovCisJCQkJCWluZm8tPkRldmljZUZsYWdzIHw9IERGX01FRElBX1NUQVRVU19FTkFCTEVEOworCQkJCX0KKwkJCQllbHNlCisJCQkJCWluZm8tPkRldmljZUZsYWdzICY9IH5ERl9NRURJQV9TVEFUVVNfRU5BQkxFRDsKKworCQkJfQorCQl9IGVsc2UgeworCQkJLyogCisJCQkgKiB0aGlzIG11c3QgYmUgYW4gQVRBUEkgZGV2aWNlIAorCQkJICogdXNlIGFuIEFUQVBJIHByb3RvY29sIChUcmFuc3BhcmVudCBTQ1NJKQorCQkJICovCisJCQl1cy0+cHJvdG9jb2xfbmFtZSA9ICJUcmFuc3BhcmVudCBTQ1NJIjsKKwkJCXVzLT5wcm90b19oYW5kbGVyID0gdXNiX3N0b3JfdHJhbnNwYXJlbnRfc2NzaV9jb21tYW5kOworCisJCQlVU19ERUJVR1AoIlByb3RvY29sIGNoYW5nZWQgdG86ICVzXG4iLCB1cy0+cHJvdG9jb2xfbmFtZSk7CisJICAgIAorCQkJLyogRnJlZSBkcml2ZXIgc3RydWN0dXJlICovCSAgICAKKwkJCXVzLT5leHRyYV9kZXN0cnVjdG9yKGluZm8pOworCQkJdXMtPmV4dHJhID0gTlVMTDsKKwkJCXVzLT5leHRyYV9kZXN0cnVjdG9yID0gTlVMTDsKKwkJfQorCX0KKworCVVTX0RFQlVHUCgiTGVhdmluZyBpc2QyMDBfZ2V0X2lucXVpcnlfZGF0YSAlMDhYXG4iLCByZXRTdGF0dXMpOworCisJcmV0dXJuKHJldFN0YXR1cyk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpc2QyMDBfc2NzaV90b19hdGEKKyAqCQkJCQkJCQkJIAorICogVHJhbnNsYXRlIFNDU0kgY29tbWFuZHMgdG8gQVRBIGNvbW1hbmRzLgorICoKKyAqIFJFVFVSTlM6CisgKiAgICAxIGlmIHRoZSBjb21tYW5kIG5lZWRzIHRvIGJlIHNlbnQgdG8gdGhlIHRyYW5zcG9ydCBsYXllcgorICogICAgMCBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBpc2QyMDBfc2NzaV90b19hdGEoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkgICAgICB1bmlvbiBhdGFfY2RiICogYXRhQ2RiKQoreworCXN0cnVjdCBpc2QyMDBfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgaXNkMjAwX2luZm8gKil1cy0+ZXh0cmE7CisJc3RydWN0IGhkX2RyaXZlaWQgKmlkID0gaW5mby0+aWQ7CisJaW50IHNlbmRUb1RyYW5zcG9ydCA9IDE7CisJdW5zaWduZWQgY2hhciBzZWN0bnVtLCBoZWFkOworCXVuc2lnbmVkIHNob3J0IGN5bGluZGVyOworCXVuc2lnbmVkIGxvbmcgbGJhOworCXVuc2lnbmVkIGxvbmcgYmxvY2tDb3VudDsKKwl1bnNpZ25lZCBjaGFyIHNlbnNlRGF0YVs4XSA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OworCisJbWVtc2V0KGF0YUNkYiwgMCwgc2l6ZW9mKHVuaW9uIGF0YV9jZGIpKTsKKworCS8qIFNDU0kgQ29tbWFuZCAqLworCXN3aXRjaCAoc3JiLT5jbW5kWzBdKSB7CisJY2FzZSBJTlFVSVJZOgorCQlVU19ERUJVR1AoIiAgIEFUQSBPVVQgLSBJTlFVSVJZXG4iKTsKKworCQkvKiBjb3B5IElucXVpcnlEYXRhICovCisJCXVzYl9zdG9yX3NldF94ZmVyX2J1ZigodW5zaWduZWQgY2hhciAqKSAmaW5mby0+SW5xdWlyeURhdGEsCisJCQkJc2l6ZW9mKGluZm8tPklucXVpcnlEYXRhKSwgc3JiKTsKKwkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9HT09EOworCQlzZW5kVG9UcmFuc3BvcnQgPSAwOworCQlicmVhazsKKworCWNhc2UgTU9ERV9TRU5TRToKKwkJVVNfREVCVUdQKCIgICBBVEEgT1VUIC0gU0NTSU9QX01PREVfU0VOU0VcbiIpOworCisJCS8qIEluaXRpYWxpemUgdGhlIHJldHVybiBidWZmZXIgKi8KKwkJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHNlbnNlRGF0YSwgc2l6ZW9mKHNlbnNlRGF0YSksIHNyYik7CisKKwkJaWYgKGluZm8tPkRldmljZUZsYWdzICYgREZfTUVESUFfU1RBVFVTX0VOQUJMRUQpCisJCXsKKwkJCWF0YUNkYi0+Z2VuZXJpYy5TaWduYXR1cmVCeXRlMCA9IGluZm8tPkNvbmZpZ0RhdGEuQVRBTWFqb3JDb21tYW5kOworCQkJYXRhQ2RiLT5nZW5lcmljLlNpZ25hdHVyZUJ5dGUxID0gaW5mby0+Q29uZmlnRGF0YS5BVEFNaW5vckNvbW1hbmQ7CisJCQlhdGFDZGItPmdlbmVyaWMuVHJhbnNmZXJCbG9ja1NpemUgPSAxOworCQkJYXRhQ2RiLT5nZW5lcmljLlJlZ2lzdGVyU2VsZWN0ID0gUkVHX0NPTU1BTkQ7CisJCQlhdGFDZGItPndyaXRlLkNvbW1hbmRCeXRlID0gQVRBX0NPTU1BTkRfR0VUX01FRElBX1NUQVRVUzsKKwkJCXNyYi0+cmVxdWVzdF9idWZmbGVuID0gMDsKKwkJfSBlbHNlIHsKKwkJCVVTX0RFQlVHUCgiICAgTWVkaWEgU3RhdHVzIG5vdCBzdXBwb3J0ZWQsIGp1c3QgcmVwb3J0IG9rYXlcbiIpOworCQkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9HT09EOworCQkJc2VuZFRvVHJhbnNwb3J0ID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgVEVTVF9VTklUX1JFQURZOgorCQlVU19ERUJVR1AoIiAgIEFUQSBPVVQgLSBTQ1NJT1BfVEVTVF9VTklUX1JFQURZXG4iKTsKKworCQlpZiAoaW5mby0+RGV2aWNlRmxhZ3MgJiBERl9NRURJQV9TVEFUVVNfRU5BQkxFRCkKKwkJeworCQkJYXRhQ2RiLT5nZW5lcmljLlNpZ25hdHVyZUJ5dGUwID0gaW5mby0+Q29uZmlnRGF0YS5BVEFNYWpvckNvbW1hbmQ7CisJCQlhdGFDZGItPmdlbmVyaWMuU2lnbmF0dXJlQnl0ZTEgPSBpbmZvLT5Db25maWdEYXRhLkFUQU1pbm9yQ29tbWFuZDsKKwkJCWF0YUNkYi0+Z2VuZXJpYy5UcmFuc2ZlckJsb2NrU2l6ZSA9IDE7CisJCQlhdGFDZGItPmdlbmVyaWMuUmVnaXN0ZXJTZWxlY3QgPSBSRUdfQ09NTUFORDsKKwkJCWF0YUNkYi0+d3JpdGUuQ29tbWFuZEJ5dGUgPSBBVEFfQ09NTUFORF9HRVRfTUVESUFfU1RBVFVTOworCQkJc3JiLT5yZXF1ZXN0X2J1ZmZsZW4gPSAwOworCQl9IGVsc2UgeworCQkJVVNfREVCVUdQKCIgICBNZWRpYSBTdGF0dXMgbm90IHN1cHBvcnRlZCwganVzdCByZXBvcnQgb2theVxuIik7CisJCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7CisJCQlzZW5kVG9UcmFuc3BvcnQgPSAwOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSRUFEX0NBUEFDSVRZOgorCXsKKwkJdW5zaWduZWQgbG9uZyBjYXBhY2l0eTsKKwkJc3RydWN0IHJlYWRfY2FwYWNpdHlfZGF0YSByZWFkQ2FwYWNpdHlEYXRhOworCisJCVVTX0RFQlVHUCgiICAgQVRBIE9VVCAtIFNDU0lPUF9SRUFEX0NBUEFDSVRZXG4iKTsKKworCQlpZiAoaWQtPmNhcGFiaWxpdHkgJiBDQVBBQklMSVRZX0xCQSApIHsKKwkJCWNhcGFjaXR5ID0gaWQtPmxiYV9jYXBhY2l0eSAtIDE7CisJCX0gZWxzZSB7CisJCQljYXBhY2l0eSA9IChpZC0+aGVhZHMgKgorCQkJCSAgICBpZC0+Y3lscyAqCisJCQkJICAgIGlkLT5zZWN0b3JzKSAtIDE7CisJCX0KKwkJcmVhZENhcGFjaXR5RGF0YS5Mb2dpY2FsQmxvY2tBZGRyZXNzID0gY3B1X3RvX2JlMzIoY2FwYWNpdHkpOworCQlyZWFkQ2FwYWNpdHlEYXRhLkJ5dGVzUGVyQmxvY2sgPSBjcHVfdG9fYmUzMigweDIwMCk7CisKKwkJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKCh1bnNpZ25lZCBjaGFyICopICZyZWFkQ2FwYWNpdHlEYXRhLAorCQkJCXNpemVvZihyZWFkQ2FwYWNpdHlEYXRhKSwgc3JiKTsKKwkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9HT09EOworCQlzZW5kVG9UcmFuc3BvcnQgPSAwOworCX0KKwlicmVhazsKKworCWNhc2UgUkVBRF8xMDoKKwkJVVNfREVCVUdQKCIgICBBVEEgT1VUIC0gU0NTSU9QX1JFQURcbiIpOworCisJCWxiYSA9IGJlMzJfdG9fY3B1KCooX19iZTMyICopJnNyYi0+Y21uZFsyXSk7CisJCWJsb2NrQ291bnQgPSAodW5zaWduZWQgbG9uZylzcmItPmNtbmRbN108PDggfCAodW5zaWduZWQgbG9uZylzcmItPmNtbmRbOF07CisKKwkJaWYgKGlkLT5jYXBhYmlsaXR5ICYgQ0FQQUJJTElUWV9MQkEpIHsKKwkJCXNlY3RudW0gPSAodW5zaWduZWQgY2hhcikobGJhKTsKKwkJCWN5bGluZGVyID0gKHVuc2lnbmVkIHNob3J0KShsYmE+PjgpOworCQkJaGVhZCA9IEFUQV9BRERSRVNTX0RFVkhFQURfTEJBX01PREUgfCAodW5zaWduZWQgY2hhcikobGJhPj4yNCAmIDB4MEYpOworCQl9IGVsc2UgeworCQkJc2VjdG51bSA9ICh1bnNpZ25lZCBjaGFyKSgobGJhICUgaWQtPnNlY3RvcnMpICsgMSk7CisJCQljeWxpbmRlciA9ICh1bnNpZ25lZCBzaG9ydCkobGJhIC8gKGlkLT5zZWN0b3JzICoKKwkJCQkJCQkgICBpZC0+aGVhZHMpKTsKKwkJCWhlYWQgPSAodW5zaWduZWQgY2hhcikoKGxiYSAvIGlkLT5zZWN0b3JzKSAlCisJCQkJCSAgICAgICBpZC0+aGVhZHMpOworCQl9CisJCWF0YUNkYi0+Z2VuZXJpYy5TaWduYXR1cmVCeXRlMCA9IGluZm8tPkNvbmZpZ0RhdGEuQVRBTWFqb3JDb21tYW5kOworCQlhdGFDZGItPmdlbmVyaWMuU2lnbmF0dXJlQnl0ZTEgPSBpbmZvLT5Db25maWdEYXRhLkFUQU1pbm9yQ29tbWFuZDsKKwkJYXRhQ2RiLT5nZW5lcmljLlRyYW5zZmVyQmxvY2tTaXplID0gMTsKKwkJYXRhQ2RiLT5nZW5lcmljLlJlZ2lzdGVyU2VsZWN0ID0KKwkJICBSRUdfU0VDVE9SX0NPVU5UIHwgUkVHX1NFQ1RPUl9OVU1CRVIgfAorCQkgIFJFR19DWUxJTkRFUl9MT1cgfCBSRUdfQ1lMSU5ERVJfSElHSCB8CisJCSAgUkVHX0RFVklDRV9IRUFEICB8IFJFR19DT01NQU5EOworCQlhdGFDZGItPndyaXRlLlNlY3RvckNvdW50Qnl0ZSA9ICh1bnNpZ25lZCBjaGFyKWJsb2NrQ291bnQ7CisJCWF0YUNkYi0+d3JpdGUuU2VjdG9yTnVtYmVyQnl0ZSA9IHNlY3RudW07CisJCWF0YUNkYi0+d3JpdGUuQ3lsaW5kZXJIaWdoQnl0ZSA9ICh1bnNpZ25lZCBjaGFyKShjeWxpbmRlcj4+OCk7CisJCWF0YUNkYi0+d3JpdGUuQ3lsaW5kZXJMb3dCeXRlID0gKHVuc2lnbmVkIGNoYXIpY3lsaW5kZXI7CisJCWF0YUNkYi0+d3JpdGUuRGV2aWNlSGVhZEJ5dGUgPSAoaGVhZCB8IEFUQV9BRERSRVNTX0RFVkhFQURfU1REKTsKKwkJYXRhQ2RiLT53cml0ZS5Db21tYW5kQnl0ZSA9IFdJTl9SRUFEOworCQlicmVhazsKKworCWNhc2UgV1JJVEVfMTA6CisJCVVTX0RFQlVHUCgiICAgQVRBIE9VVCAtIFNDU0lPUF9XUklURVxuIik7CisKKwkJbGJhID0gYmUzMl90b19jcHUoKihfX2JlMzIgKikmc3JiLT5jbW5kWzJdKTsKKwkJYmxvY2tDb3VudCA9ICh1bnNpZ25lZCBsb25nKXNyYi0+Y21uZFs3XTw8OCB8ICh1bnNpZ25lZCBsb25nKXNyYi0+Y21uZFs4XTsKKworCQlpZiAoaWQtPmNhcGFiaWxpdHkgJiBDQVBBQklMSVRZX0xCQSkgeworCQkJc2VjdG51bSA9ICh1bnNpZ25lZCBjaGFyKShsYmEpOworCQkJY3lsaW5kZXIgPSAodW5zaWduZWQgc2hvcnQpKGxiYT4+OCk7CisJCQloZWFkID0gQVRBX0FERFJFU1NfREVWSEVBRF9MQkFfTU9ERSB8ICh1bnNpZ25lZCBjaGFyKShsYmE+PjI0ICYgMHgwRik7CisJCX0gZWxzZSB7CisJCQlzZWN0bnVtID0gKHVuc2lnbmVkIGNoYXIpKChsYmEgJSBpZC0+c2VjdG9ycykgKyAxKTsKKwkJCWN5bGluZGVyID0gKHVuc2lnbmVkIHNob3J0KShsYmEgLyAoaWQtPnNlY3RvcnMgKiBpZC0+aGVhZHMpKTsKKwkJCWhlYWQgPSAodW5zaWduZWQgY2hhcikoKGxiYSAvIGlkLT5zZWN0b3JzKSAlIGlkLT5oZWFkcyk7CisJCX0KKwkJYXRhQ2RiLT5nZW5lcmljLlNpZ25hdHVyZUJ5dGUwID0gaW5mby0+Q29uZmlnRGF0YS5BVEFNYWpvckNvbW1hbmQ7CisJCWF0YUNkYi0+Z2VuZXJpYy5TaWduYXR1cmVCeXRlMSA9IGluZm8tPkNvbmZpZ0RhdGEuQVRBTWlub3JDb21tYW5kOworCQlhdGFDZGItPmdlbmVyaWMuVHJhbnNmZXJCbG9ja1NpemUgPSAxOworCQlhdGFDZGItPmdlbmVyaWMuUmVnaXN0ZXJTZWxlY3QgPQorCQkgIFJFR19TRUNUT1JfQ09VTlQgfCBSRUdfU0VDVE9SX05VTUJFUiB8CisJCSAgUkVHX0NZTElOREVSX0xPVyB8IFJFR19DWUxJTkRFUl9ISUdIIHwKKwkJICBSRUdfREVWSUNFX0hFQUQgIHwgUkVHX0NPTU1BTkQ7CisJCWF0YUNkYi0+d3JpdGUuU2VjdG9yQ291bnRCeXRlID0gKHVuc2lnbmVkIGNoYXIpYmxvY2tDb3VudDsKKwkJYXRhQ2RiLT53cml0ZS5TZWN0b3JOdW1iZXJCeXRlID0gc2VjdG51bTsKKwkJYXRhQ2RiLT53cml0ZS5DeWxpbmRlckhpZ2hCeXRlID0gKHVuc2lnbmVkIGNoYXIpKGN5bGluZGVyPj44KTsKKwkJYXRhQ2RiLT53cml0ZS5DeWxpbmRlckxvd0J5dGUgPSAodW5zaWduZWQgY2hhciljeWxpbmRlcjsKKwkJYXRhQ2RiLT53cml0ZS5EZXZpY2VIZWFkQnl0ZSA9IChoZWFkIHwgQVRBX0FERFJFU1NfREVWSEVBRF9TVEQpOworCQlhdGFDZGItPndyaXRlLkNvbW1hbmRCeXRlID0gV0lOX1dSSVRFOworCQlicmVhazsKKworCWNhc2UgQUxMT1dfTUVESVVNX1JFTU9WQUw6CisJCVVTX0RFQlVHUCgiICAgQVRBIE9VVCAtIFNDU0lPUF9NRURJVU1fUkVNT1ZBTFxuIik7CisKKwkJaWYgKGluZm8tPkRldmljZUZsYWdzICYgREZfUkVNT1ZBQkxFX01FRElBKSB7CisJCQlVU19ERUJVR1AoIiAgIHNyYi0+Y21uZFs0XSA9IDB4JVhcbiIsIHNyYi0+Y21uZFs0XSk7CisJICAgIAorCQkJYXRhQ2RiLT5nZW5lcmljLlNpZ25hdHVyZUJ5dGUwID0gaW5mby0+Q29uZmlnRGF0YS5BVEFNYWpvckNvbW1hbmQ7CisJCQlhdGFDZGItPmdlbmVyaWMuU2lnbmF0dXJlQnl0ZTEgPSBpbmZvLT5Db25maWdEYXRhLkFUQU1pbm9yQ29tbWFuZDsKKwkJCWF0YUNkYi0+Z2VuZXJpYy5UcmFuc2ZlckJsb2NrU2l6ZSA9IDE7CisJCQlhdGFDZGItPmdlbmVyaWMuUmVnaXN0ZXJTZWxlY3QgPSBSRUdfQ09NTUFORDsKKwkJCWF0YUNkYi0+d3JpdGUuQ29tbWFuZEJ5dGUgPSAoc3JiLT5jbW5kWzRdICYgMHgxKSA/CisJCQkJV0lOX0RPT1JMT0NLIDogV0lOX0RPT1JVTkxPQ0s7CisJCQlzcmItPnJlcXVlc3RfYnVmZmxlbiA9IDA7CisJCX0gZWxzZSB7CisJCQlVU19ERUJVR1AoIiAgIE5vdCByZW1vdmVhYmxlIG1lZGlhLCBqdXN0IHJlcG9ydCBva2F5XG4iKTsKKwkJCXNyYi0+cmVzdWx0ID0gU0FNX1NUQVRfR09PRDsKKwkJCXNlbmRUb1RyYW5zcG9ydCA9IDA7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFNUQVJUX1NUT1A6ICAgIAorCQlVU19ERUJVR1AoIiAgIEFUQSBPVVQgLSBTQ1NJT1BfU1RBUlRfU1RPUF9VTklUXG4iKTsKKwkJVVNfREVCVUdQKCIgICBzcmItPmNtbmRbNF0gPSAweCVYXG4iLCBzcmItPmNtbmRbNF0pOworCisJCWlmICgoc3JiLT5jbW5kWzRdICYgMHgzKSA9PSAweDIpIHsKKwkJCVVTX0RFQlVHUCgiICAgTWVkaWEgRWplY3RcbiIpOworCQkJYXRhQ2RiLT5nZW5lcmljLlNpZ25hdHVyZUJ5dGUwID0gaW5mby0+Q29uZmlnRGF0YS5BVEFNYWpvckNvbW1hbmQ7CisJCQlhdGFDZGItPmdlbmVyaWMuU2lnbmF0dXJlQnl0ZTEgPSBpbmZvLT5Db25maWdEYXRhLkFUQU1pbm9yQ29tbWFuZDsKKwkJCWF0YUNkYi0+Z2VuZXJpYy5UcmFuc2ZlckJsb2NrU2l6ZSA9IDA7CisJCQlhdGFDZGItPmdlbmVyaWMuUmVnaXN0ZXJTZWxlY3QgPSBSRUdfQ09NTUFORDsKKwkJCWF0YUNkYi0+d3JpdGUuQ29tbWFuZEJ5dGUgPSBBVEFfQ09NTUFORF9NRURJQV9FSkVDVDsKKwkJfSBlbHNlIGlmICgoc3JiLT5jbW5kWzRdICYgMHgzKSA9PSAweDEpIHsKKwkJCVVTX0RFQlVHUCgiICAgR2V0IE1lZGlhIFN0YXR1c1xuIik7CisJCQlhdGFDZGItPmdlbmVyaWMuU2lnbmF0dXJlQnl0ZTAgPSBpbmZvLT5Db25maWdEYXRhLkFUQU1ham9yQ29tbWFuZDsKKwkJCWF0YUNkYi0+Z2VuZXJpYy5TaWduYXR1cmVCeXRlMSA9IGluZm8tPkNvbmZpZ0RhdGEuQVRBTWlub3JDb21tYW5kOworCQkJYXRhQ2RiLT5nZW5lcmljLlRyYW5zZmVyQmxvY2tTaXplID0gMTsKKwkJCWF0YUNkYi0+Z2VuZXJpYy5SZWdpc3RlclNlbGVjdCA9IFJFR19DT01NQU5EOworCQkJYXRhQ2RiLT53cml0ZS5Db21tYW5kQnl0ZSA9IEFUQV9DT01NQU5EX0dFVF9NRURJQV9TVEFUVVM7CisJCQlzcmItPnJlcXVlc3RfYnVmZmxlbiA9IDA7CisJCX0gZWxzZSB7CisJCQlVU19ERUJVR1AoIiAgIE5vdGhpbmcgdG8gZG8sIGp1c3QgcmVwb3J0IG9rYXlcbiIpOworCQkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9HT09EOworCQkJc2VuZFRvVHJhbnNwb3J0ID0gMDsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCVVTX0RFQlVHUCgiVW5zdXBwb3J0ZWQgU0NTSSBjb21tYW5kIC0gMHglWFxuIiwgc3JiLT5jbW5kWzBdKTsKKwkJc3JiLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CisJCXNlbmRUb1RyYW5zcG9ydCA9IDA7CisJCWJyZWFrOworCX0KKworCXJldHVybihzZW5kVG9UcmFuc3BvcnQpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaXNkMjAwX2ZyZWVfaW5mbworICoKKyAqIEZyZWVzIHRoZSBkcml2ZXIgc3RydWN0dXJlLgorICovCitzdGF0aWMgdm9pZCBpc2QyMDBfZnJlZV9pbmZvX3B0cnModm9pZCAqaW5mb18pCit7CisJc3RydWN0IGlzZDIwMF9pbmZvICppbmZvID0gKHN0cnVjdCBpc2QyMDBfaW5mbyAqKSBpbmZvXzsKKworCWlmIChpbmZvKSB7CisJCWtmcmVlKGluZm8tPmlkKTsKKwkJa2ZyZWUoaW5mby0+UmVnc0J1Zik7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlzZDIwMF9pbml0X2luZm8KKyAqCQkJCQkJCQkJIAorICogQWxsb2NhdGVzIChpZiBuZWNlc3NhcnkpIGFuZCBpbml0aWFsaXplcyB0aGUgZHJpdmVyIHN0cnVjdHVyZS4KKyAqCisgKiBSRVRVUk5TOgorICogICAgSVNEIHN0YXR1cyBjb2RlCisgKi8KK3N0YXRpYyBpbnQgaXNkMjAwX2luaXRfaW5mbyhzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJaW50IHJldFN0YXR1cyA9IElTRDIwMF9HT09EOworCXN0cnVjdCBpc2QyMDBfaW5mbyAqaW5mbzsKKworCWluZm8gPSAoc3RydWN0IGlzZDIwMF9pbmZvICopCisJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXNkMjAwX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluZm8pCisJCXJldFN0YXR1cyA9IElTRDIwMF9FUlJPUjsKKwllbHNlIHsKKwkJbWVtc2V0KGluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaXNkMjAwX2luZm8pKTsKKwkJaW5mby0+aWQgPSAoc3RydWN0IGhkX2RyaXZlaWQgKikKKwkJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGRfZHJpdmVpZCksIEdGUF9LRVJORUwpOworCQlpbmZvLT5SZWdzQnVmID0gKHVuc2lnbmVkIGNoYXIgKikKKwkJCQlrbWFsbG9jKHNpemVvZihpbmZvLT5BVEFSZWdzKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghaW5mby0+aWQgfHwgIWluZm8tPlJlZ3NCdWYpIHsKKwkJCWlzZDIwMF9mcmVlX2luZm9fcHRycyhpbmZvKTsKKwkJCWtmcmVlKGluZm8pOworCQkJcmV0U3RhdHVzID0gSVNEMjAwX0VSUk9SOworCQl9IGVsc2UKKwkJCW1lbXNldChpbmZvLT5pZCwgMCwgc2l6ZW9mKHN0cnVjdCBoZF9kcml2ZWlkKSk7CisJfQorCisJaWYgKHJldFN0YXR1cyA9PSBJU0QyMDBfR09PRCkgeworCQl1cy0+ZXh0cmEgPSBpbmZvOworCQl1cy0+ZXh0cmFfZGVzdHJ1Y3RvciA9IGlzZDIwMF9mcmVlX2luZm9fcHRyczsKKwl9IGVsc2UKKwkJVVNfREVCVUdQKCJFUlJPUiAtIGttYWxsb2MgZmFpbHVyZVxuIik7CisKKwlyZXR1cm4ocmV0U3RhdHVzKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJbml0aWFsaXphdGlvbiBmb3IgdGhlIElTRDIwMCAKKyAqLworCitpbnQgaXNkMjAwX0luaXRpYWxpemF0aW9uKHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlVU19ERUJVR1AoIklTRDIwMCBJbml0aWFsaXphdGlvbi4uLlxuIik7CisKKwkvKiBJbml0aWFsaXplIElTRDIwMCBpbmZvIHN0cnVjdCAqLworCisJaWYgKGlzZDIwMF9pbml0X2luZm8odXMpID09IElTRDIwMF9FUlJPUikgeworCQlVU19ERUJVR1AoIkVSUk9SIEluaXRpYWxpemluZyBJU0QyMDAgSW5mbyBzdHJ1Y3RcbiIpOworCX0gZWxzZSB7CisJCS8qIEdldCBkZXZpY2Ugc3BlY2lmaWMgZGF0YSAqLworCisJCWlmIChpc2QyMDBfZ2V0X2lucXVpcnlfZGF0YSh1cykgIT0gSVNEMjAwX0dPT0QpCisJCQlVU19ERUJVR1AoIklTRDIwMCBJbml0aWFsaXphdGlvbiBGYWlsdXJlXG4iKTsKKwkJZWxzZQorCQkJVVNfREVCVUdQKCJJU0QyMDAgSW5pdGlhbGl6YXRpb24gY29tcGxldGVcbiIpOworCX0KKworCXJldHVybiAwOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvdG9jb2wgYW5kIFRyYW5zcG9ydCBmb3IgdGhlIElTRDIwMCBBU0lDCisgKgorICogVGhpcyBwcm90b2NvbCBhbmQgdHJhbnNwb3J0IGFyZSBmb3IgQVRBIGRldmljZXMgY29ubmVjdGVkIHRvIGFuIElTRDIwMAorICogQVNJQy4gIEFuIEFUQVBJIGRldmljZSB0aGF0IGlzIGNvbmVjdGVkIGFzIGEgc2xhdmUgZGV2aWNlIHdpbGwgYmUKKyAqIGRldGVjdGVkIGluIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gYW5kIHRoZSBwcm90b2NvbCB3aWxsCisgKiBiZSBjaGFuZ2VkIHRvIGFuIEFUQVBJIHByb3RvY29sIChUcmFuc3BhcmVudCBTQ1NJKS4KKyAqCisgKi8KKwordm9pZCBpc2QyMDBfYXRhX2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJaW50IHNlbmRUb1RyYW5zcG9ydCA9IDE7CisJdW5pb24gYXRhX2NkYiBhdGFDZGI7CisKKwkvKiBNYWtlIHN1cmUgZHJpdmVyIHdhcyBpbml0aWFsaXplZCAqLworCisJaWYgKHVzLT5leHRyYSA9PSBOVUxMKQorCQlVU19ERUJVR1AoIkVSUk9SIERyaXZlciBub3QgaW5pdGlhbGl6ZWRcbiIpOworCisJLyogQ29udmVydCBjb21tYW5kICovCisJc3JiLT5yZXNpZCA9IDA7CisJc2VuZFRvVHJhbnNwb3J0ID0gaXNkMjAwX3Njc2lfdG9fYXRhKHNyYiwgdXMsICZhdGFDZGIpOworCisJLyogc2VuZCB0aGUgY29tbWFuZCB0byB0aGUgdHJhbnNwb3J0IGxheWVyICovCisJaWYgKHNlbmRUb1RyYW5zcG9ydCkKKwkJaXNkMjAwX2ludm9rZV90cmFuc3BvcnQodXMsIHNyYiwgJmF0YUNkYik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTM1ZjRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuaApAQCAtMCwwICsxLDMxIEBACisvKiBIZWFkZXIgRmlsZSBmb3IgSW4tU3lzdGVtIERlc2lnbiwgSW5jLiBJU0QyMDAgQVNJQworICoKKyAqIEZpcnN0IHJlbGVhc2UKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDIwMDAgSW4tU3lzdGVtIERlc2lnbiwgSW5jLiAoc3VwcG9ydEBpbi1zeXN0ZW0uY29tKQorICoKKyAqIFNlZSBpc2QyMDAuYyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9VU0JfSVNEMjAwX0gKKyNkZWZpbmUgX1VTQl9JU0QyMDBfSAorCitleHRlcm4gdm9pZCBpc2QyMDBfYXRhX2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOworZXh0ZXJuIGludCBpc2QyMDBfSW5pdGlhbGl6YXRpb24oc3RydWN0IHVzX2RhdGEgKnVzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZmOWQ1MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuYwpAQCAtMCwwICsxLDU5NiBAQAorLyogRHJpdmVyIGZvciBMZXhhciAiSnVtcHNob3QiIENvbXBhY3QgRmxhc2ggcmVhZGVyCisgKgorICogJElkOiBqdW1wc2hvdC5jLHYgMS43IDIwMDIvMDIvMjUgMDA6NDA6MTMgbWRoYXJtIEV4cCAkCisgKgorICoganVtcHNob3QgZHJpdmVyIHYwLjE6CisgKgorICogRmlyc3QgcmVsZWFzZQorICoKKyAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgorICogICAoYykgMjAwMCBKaW1taWUgTWF5ZmllbGQgKG1heWZpZWxkK3VzYkBzYWNraGVhZHMub3JnKQorICoKKyAqICAgTWFueSB0aGFua3MgdG8gUm9iZXJ0IEJhcnVjaCBmb3IgdGhlIFNhbkRpc2sgU21hcnRNZWRpYSByZWFkZXIgZHJpdmVyCisgKiAgIHdoaWNoIEkgdXNlZCBhcyBhIHRlbXBsYXRlIGZvciB0aGlzIGRyaXZlci4KKyAqCisgKiAgIFNvbWUgYnVnZml4ZXMgYW5kIHNjYXR0ZXItZ2F0aGVyIGNvZGUgYnkgR3JlZ29yeSBQLiBTbWl0aCAKKyAqICAgKGdyZWctdXNiQGVsZWN0cmljcmFpbi5jb20pCisgKgorICogICBGaXggZm9yIG1lZGlhIGNoYW5nZSBieSBKb2VyZyBTY2huZWlkZXIgKGpzQGpvZXJnc2NobmVpZGVyLmNvbSkKKyAqCisgKiBEZXZlbG9wZWQgd2l0aCB0aGUgYXNzaXN0YW5jZSBvZjoKKyAqCisgKiAgIChDKSAyMDAyIEFsYW4gU3Rlcm4gPHN0ZXJuQHJvd2xhbmQub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisgCisgLyoKKyAgKiBUaGlzIGRyaXZlciBhdHRlbXB0cyB0byBzdXBwb3J0IHRoZSBMZXhhciBKdW1wc2hvdCBVU0IgQ29tcGFjdEZsYXNoIAorICAqIHJlYWRlci4gIExpa2UgbWFueSBvdGhlciBVU0IgQ29tcGFjdEZsYXNoIHJlYWRlcnMsIHRoZSBKdW1wc2hvdCBjb250YWlucworICAqIGEgVVNCLXRvLUFUQSBjaGlwLiAKKyAgKgorICAqIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHJlYWRpbmcgYW5kIHdyaXRpbmcuICBJZiB5b3UncmUgdHJ1bHkgcGFyYW5vaWQsCisgICogaG93ZXZlciwgeW91IGNhbiBmb3JjZSB0aGUgZHJpdmVyIGludG8gYSB3cml0ZS1wcm90ZWN0ZWQgc3RhdGUgYnkgc2V0dGluZworICAqIHRoZSBXUCBlbmFibGUgYml0cyBpbiBqdW1wc2hvdF9oYW5kbGVfbW9kZV9zZW5zZS4gIFNlZSB0aGUgY29tbWVudHMKKyAgKiBpbiB0aGF0IHJvdXRpbmUuCisgICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKworI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInByb3RvY29sLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJqdW1wc2hvdC5oIgorCisKK3N0YXRpYyBpbmxpbmUgaW50IGp1bXBzaG90X2J1bGtfcmVhZChzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkJICAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCAKKwkJCQkgICAgIHVuc2lnbmVkIGludCBsZW4pCit7CisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9HT09EOworCisJVVNfREVCVUdQKCJqdW1wc2hvdF9idWxrX3JlYWQ6ICBsZW4gPSAlZFxuIiwgbGVuKTsKKwlyZXR1cm4gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5yZWN2X2J1bGtfcGlwZSwKKwkJCWRhdGEsIGxlbiwgTlVMTCk7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQganVtcHNob3RfYnVsa193cml0ZShzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkJICAgICAgdW5zaWduZWQgY2hhciAqZGF0YSwgCisJCQkJICAgICAgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpZiAobGVuID09IDApCisJCXJldHVybiBVU0JfU1RPUl9YRkVSX0dPT0Q7CisKKwlVU19ERUJVR1AoImp1bXBzaG90X2J1bGtfd3JpdGU6ICBsZW4gPSAlZFxuIiwgbGVuKTsKKwlyZXR1cm4gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5zZW5kX2J1bGtfcGlwZSwKKwkJCWRhdGEsIGxlbiwgTlVMTCk7Cit9CisKKworc3RhdGljIGludCBqdW1wc2hvdF9nZXRfc3RhdHVzKHN0cnVjdCB1c19kYXRhICAqdXMpCit7CisJaW50IHJjOworCisJaWYgKCF1cykKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCS8vIHNlbmQgdGhlIHNldHVwCisJcmMgPSB1c2Jfc3Rvcl9jdHJsX3RyYW5zZmVyKHVzLCB1cy0+cmVjdl9jdHJsX3BpcGUsCisJCQkJICAgMCwgMHhBMCwgMCwgNywgdXMtPmlvYnVmLCAxKTsKKworCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlpZiAodXMtPmlvYnVmWzBdICE9IDB4NTApIHsKKwkJVVNfREVCVUdQKCJqdW1wc2hvdF9nZXRfc3RhdHVzOiAgMHglMnhcbiIsCisJCQkgIHVzLT5pb2J1ZlswXSk7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCitzdGF0aWMgaW50IGp1bXBzaG90X3JlYWRfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkgICAgICBzdHJ1Y3QganVtcHNob3RfaW5mbyAqaW5mbywKKwkJCSAgICAgIHUzMiBzZWN0b3IsCisJCQkgICAgICB1MzIgc2VjdG9ycykKK3sKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBjaGFyICB0aGlzdGltZTsKKwl1bnNpZ25lZCBpbnQgdG90YWxsZW4sIGFsbG9jbGVuOworCWludCBsZW4sIHJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgc2dfaWR4ID0gMCwgc2dfb2Zmc2V0ID0gMDsKKworCS8vIHdlJ3JlIHdvcmtpbmcgaW4gTEJBIG1vZGUuICBhY2NvcmRpbmcgdG8gdGhlIEFUQSBzcGVjLCAKKwkvLyB3ZSBjYW4gc3VwcG9ydCB1cCB0byAyOC1iaXQgYWRkcmVzc2luZy4gIEkgZG9uJ3Qga25vdyBpZiBKdW1wc2hvdAorCS8vIHN1cHBvcnRzIGJleW9uZCAyNC1iaXQgYWRkcmVzc2luZy4gIEl0J3Mga2luZCBvZiBoYXJkIHRvIHRlc3QgCisJLy8gc2luY2UgaXQgcmVxdWlyZXMgPiA4R0IgQ0YgY2FyZC4KKworCWlmIChzZWN0b3IgPiAweDBGRkZGRkZGKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJdG90YWxsZW4gPSBzZWN0b3JzICogaW5mby0+c3NpemU7CisKKwkvLyBTaW5jZSB3ZSBkb24ndCByZWFkIG1vcmUgdGhhbiA2NCBLQiBhdCBhIHRpbWUsIHdlIGhhdmUgdG8gY3JlYXRlCisJLy8gYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2UgYXQgYSB0aW1lIGJldHdlZW4gdGhlCisJLy8gYm91bmNlIGJ1ZmZlciBhbmQgdGhlIGFjdHVhbCB0cmFuc2ZlciBidWZmZXIuCisKKwlhbGxvY2xlbiA9IG1pbih0b3RhbGxlbiwgNjU1MzZ1KTsKKwlidWZmZXIgPSBrbWFsbG9jKGFsbG9jbGVuLCBHRlBfTk9JTyk7CisJaWYgKGJ1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJZG8geworCQkvLyBsb29wLCBuZXZlciBhbGxvY2F0ZSBvciB0cmFuc2ZlciBtb3JlIHRoYW4gNjRrIGF0IG9uY2UKKwkJLy8gKG1pbigxMjhrLCAyNTUqaW5mby0+c3NpemUpIGlzIHRoZSByZWFsIGxpbWl0KQorCQlsZW4gPSBtaW4odG90YWxsZW4sIGFsbG9jbGVuKTsKKwkJdGhpc3RpbWUgPSAobGVuIC8gaW5mby0+c3NpemUpICYgMHhmZjsKKworCQljb21tYW5kWzBdID0gMDsKKwkJY29tbWFuZFsxXSA9IHRoaXN0aW1lOworCQljb21tYW5kWzJdID0gc2VjdG9yICYgMHhGRjsKKwkJY29tbWFuZFszXSA9IChzZWN0b3IgPj4gIDgpICYgMHhGRjsKKwkJY29tbWFuZFs0XSA9IChzZWN0b3IgPj4gMTYpICYgMHhGRjsKKworCQljb21tYW5kWzVdID0gMHhFMCB8ICgoc2VjdG9yID4+IDI0KSAmIDB4MEYpOworCQljb21tYW5kWzZdID0gMHgyMDsKKworCQkvLyBzZW5kIHRoZSBzZXR1cCArIGNvbW1hbmQKKwkJcmVzdWx0ID0gdXNiX3N0b3JfY3RybF90cmFuc2Zlcih1cywgdXMtPnNlbmRfY3RybF9waXBlLAorCQkJCQkgICAgICAgMCwgMHgyMCwgMCwgMSwgY29tbWFuZCwgNyk7CisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJZ290byBsZWF2ZTsKKworCQkvLyByZWFkIHRoZSByZXN1bHQKKwkJcmVzdWx0ID0ganVtcHNob3RfYnVsa19yZWFkKHVzLCBidWZmZXIsIGxlbik7CisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJZ290byBsZWF2ZTsKKworCQlVU19ERUJVR1AoImp1bXBzaG90X3JlYWRfZGF0YTogICVkIGJ5dGVzXG4iLCBsZW4pOworCisJCS8vIFN0b3JlIHRoZSBkYXRhIGluIHRoZSB0cmFuc2ZlciBidWZmZXIKKwkJdXNiX3N0b3JfYWNjZXNzX3hmZXJfYnVmKGJ1ZmZlciwgbGVuLCB1cy0+c3JiLAorCQkJCSAmc2dfaWR4LCAmc2dfb2Zmc2V0LCBUT19YRkVSX0JVRik7CisKKwkJc2VjdG9yICs9IHRoaXN0aW1lOworCQl0b3RhbGxlbiAtPSBsZW47CisJfSB3aGlsZSAodG90YWxsZW4gPiAwKTsKKworCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCisgbGVhdmU6CisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworfQorCisKK3N0YXRpYyBpbnQganVtcHNob3Rfd3JpdGVfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkgICAgICAgc3RydWN0IGp1bXBzaG90X2luZm8gKmluZm8sCisJCQkgICAgICAgdTMyIHNlY3RvciwKKwkJCSAgICAgICB1MzIgc2VjdG9ycykKK3sKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBjaGFyICB0aGlzdGltZTsKKwl1bnNpZ25lZCBpbnQgdG90YWxsZW4sIGFsbG9jbGVuOworCWludCBsZW4sIHJlc3VsdCwgd2FpdGNvdW50OworCXVuc2lnbmVkIGludCBzZ19pZHggPSAwLCBzZ19vZmZzZXQgPSAwOworCisJLy8gd2UncmUgd29ya2luZyBpbiBMQkEgbW9kZS4gIGFjY29yZGluZyB0byB0aGUgQVRBIHNwZWMsIAorCS8vIHdlIGNhbiBzdXBwb3J0IHVwIHRvIDI4LWJpdCBhZGRyZXNzaW5nLiAgSSBkb24ndCBrbm93IGlmIEp1bXBzaG90CisJLy8gc3VwcG9ydHMgYmV5b25kIDI0LWJpdCBhZGRyZXNzaW5nLiAgSXQncyBraW5kIG9mIGhhcmQgdG8gdGVzdCAKKwkvLyBzaW5jZSBpdCByZXF1aXJlcyA+IDhHQiBDRiBjYXJkLgorCS8vCisJaWYgKHNlY3RvciA+IDB4MEZGRkZGRkYpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwl0b3RhbGxlbiA9IHNlY3RvcnMgKiBpbmZvLT5zc2l6ZTsKKworCS8vIFNpbmNlIHdlIGRvbid0IHdyaXRlIG1vcmUgdGhhbiA2NCBLQiBhdCBhIHRpbWUsIHdlIGhhdmUgdG8gY3JlYXRlCisJLy8gYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2UgYXQgYSB0aW1lIGJldHdlZW4gdGhlCisJLy8gYm91bmNlIGJ1ZmZlciBhbmQgdGhlIGFjdHVhbCB0cmFuc2ZlciBidWZmZXIuCisKKwlhbGxvY2xlbiA9IG1pbih0b3RhbGxlbiwgNjU1MzZ1KTsKKwlidWZmZXIgPSBrbWFsbG9jKGFsbG9jbGVuLCBHRlBfTk9JTyk7CisJaWYgKGJ1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJZG8geworCQkvLyBsb29wLCBuZXZlciBhbGxvY2F0ZSBvciB0cmFuc2ZlciBtb3JlIHRoYW4gNjRrIGF0IG9uY2UKKwkJLy8gKG1pbigxMjhrLCAyNTUqaW5mby0+c3NpemUpIGlzIHRoZSByZWFsIGxpbWl0KQorCisJCWxlbiA9IG1pbih0b3RhbGxlbiwgYWxsb2NsZW4pOworCQl0aGlzdGltZSA9IChsZW4gLyBpbmZvLT5zc2l6ZSkgJiAweGZmOworCisJCS8vIEdldCB0aGUgZGF0YSBmcm9tIHRoZSB0cmFuc2ZlciBidWZmZXIKKwkJdXNiX3N0b3JfYWNjZXNzX3hmZXJfYnVmKGJ1ZmZlciwgbGVuLCB1cy0+c3JiLAorCQkJCSZzZ19pZHgsICZzZ19vZmZzZXQsIEZST01fWEZFUl9CVUYpOworCisJCWNvbW1hbmRbMF0gPSAwOworCQljb21tYW5kWzFdID0gdGhpc3RpbWU7CisJCWNvbW1hbmRbMl0gPSBzZWN0b3IgJiAweEZGOworCQljb21tYW5kWzNdID0gKHNlY3RvciA+PiAgOCkgJiAweEZGOworCQljb21tYW5kWzRdID0gKHNlY3RvciA+PiAxNikgJiAweEZGOworCisJCWNvbW1hbmRbNV0gPSAweEUwIHwgKChzZWN0b3IgPj4gMjQpICYgMHgwRik7CisJCWNvbW1hbmRbNl0gPSAweDMwOworCisJCS8vIHNlbmQgdGhlIHNldHVwICsgY29tbWFuZAorCQlyZXN1bHQgPSB1c2Jfc3Rvcl9jdHJsX3RyYW5zZmVyKHVzLCB1cy0+c2VuZF9jdHJsX3BpcGUsCisJCQkwLCAweDIwLCAwLCAxLCBjb21tYW5kLCA3KTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlnb3RvIGxlYXZlOworCisJCS8vIHNlbmQgdGhlIGRhdGEKKwkJcmVzdWx0ID0ganVtcHNob3RfYnVsa193cml0ZSh1cywgYnVmZmVyLCBsZW4pOworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCWdvdG8gbGVhdmU7CisKKwkJLy8gcmVhZCB0aGUgcmVzdWx0LiAgYXBwYXJlbnRseSB0aGUgYnVsayB3cml0ZSBjYW4gY29tcGxldGUKKwkJLy8gYmVmb3JlIHRoZSBqdW1wc2hvdCBkcml2ZSBpcyBmaW5pc2hlZCB3cml0aW5nLiAgc28gd2UgbG9vcAorCQkvLyBoZXJlIHVudGlsIHdlIGdldCBhIGdvb2QgcmV0dXJuIGNvZGUKKwkJd2FpdGNvdW50ID0gMDsKKwkJZG8geworCQkJcmVzdWx0ID0ganVtcHNob3RfZ2V0X3N0YXR1cyh1cyk7CisJCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSB7CisJCQkJLy8gSSBoYXZlIG5vdCBleHBlcmltZW50ZWQgdG8gZmluZCB0aGUgc21hbGxlc3QgdmFsdWUuCisJCQkJLy8KKwkJCQltc2xlZXAoNTApOyAKKwkJCX0KKwkJfSB3aGlsZSAoKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgJiYgKHdhaXRjb3VudCA8IDEwKSk7CisKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCVVTX0RFQlVHUCgianVtcHNob3Rfd3JpdGVfZGF0YTogIEdhaCEgIFdhaXRjb3VudCA9IDEwLiAgQmFkIHdyaXRlIT9cbiIpOworCisJCXNlY3RvciArPSB0aGlzdGltZTsKKwkJdG90YWxsZW4gLT0gbGVuOworCX0gd2hpbGUgKHRvdGFsbGVuID4gMCk7CisKKwlrZnJlZShidWZmZXIpOworCXJldHVybiByZXN1bHQ7CisKKyBsZWF2ZToKKwlrZnJlZShidWZmZXIpOworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7Cit9CisKK3N0YXRpYyBpbnQganVtcHNob3RfaWRfZGV2aWNlKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCSAgICAgIHN0cnVjdCBqdW1wc2hvdF9pbmZvICppbmZvKQoreworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJdW5zaWduZWQgY2hhciAqcmVwbHk7CisJaW50IAkgcmM7CisKKwlpZiAoIXVzIHx8ICFpbmZvKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJY29tbWFuZFswXSA9IDB4RTA7CisJY29tbWFuZFsxXSA9IDB4RUM7CisJcmVwbHkgPSBrbWFsbG9jKDUxMiwgR0ZQX05PSU8pOworCWlmICghcmVwbHkpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkvLyBzZW5kIHRoZSBzZXR1cAorCXJjID0gdXNiX3N0b3JfY3RybF90cmFuc2Zlcih1cywgdXMtPnNlbmRfY3RybF9waXBlLAorCQkJCSAgIDAsIDB4MjAsIDAsIDYsIGNvbW1hbmQsIDIpOworCisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQlVU19ERUJVR1AoImp1bXBzaG90X2lkX2RldmljZTogIEdhaCEgIgorCQkJICAic2VuZF9jb250cm9sIGZvciByZWFkX2NhcGFjaXR5IGZhaWxlZFxuIik7CisJCXJjID0gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQlnb3RvIGxlYXZlOworCX0KKworCS8vIHJlYWQgdGhlIHJlcGx5CisJcmMgPSBqdW1wc2hvdF9idWxrX3JlYWQodXMsIHJlcGx5LCA1MTIpOworCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJcmMgPSBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCWdvdG8gbGVhdmU7CisJfQorCisJaW5mby0+c2VjdG9ycyA9ICgodTMyKShyZXBseVsxMTddKSA8PCAyNCkgfAorCQkJKCh1MzIpKHJlcGx5WzExNl0pIDw8IDE2KSB8CisJCQkoKHUzMikocmVwbHlbMTE1XSkgPDwgIDgpIHwKKwkJCSgodTMyKShyZXBseVsxMTRdKSAgICAgICk7CisKKwlyYyA9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCisgbGVhdmU6CisJa2ZyZWUocmVwbHkpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBqdW1wc2hvdF9oYW5kbGVfbW9kZV9zZW5zZShzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkJICAgICAgc3RydWN0IHNjc2lfY21uZCAqIHNyYiwgCisJCQkJICAgICAgaW50IHNlbnNlXzYpCit7CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgcndfZXJyX3BhZ2VbMTJdID0geworCQkweDEsIDB4QSwgMHgyMSwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMAorCX07CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgY2FjaGVfcGFnZVsxMl0gPSB7CisJCTB4OCwgMHhBLCAweDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKKwl9OworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIHJiYWNfcGFnZVsxMl0gPSB7CisJCTB4MUIsIDB4QSwgMCwgMHg4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAorCX07CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgdGltZXJfcGFnZVs4XSA9IHsKKwkJMHgxQywgMHg2LCAwLCAwLCAwLCAwCisJfTsKKwl1bnNpZ25lZCBjaGFyIHBjLCBwYWdlX2NvZGU7CisJdW5zaWduZWQgaW50IGkgPSAwOworCXN0cnVjdCBqdW1wc2hvdF9pbmZvICppbmZvID0gKHN0cnVjdCBqdW1wc2hvdF9pbmZvICopICh1cy0+ZXh0cmEpOworCXVuc2lnbmVkIGNoYXIgKnB0ciA9IHVzLT5pb2J1ZjsKKworCXBjID0gc3JiLT5jbW5kWzJdID4+IDY7CisJcGFnZV9jb2RlID0gc3JiLT5jbW5kWzJdICYgMHgzRjsKKworCXN3aXRjaCAocGMpIHsKKwkgICBjYXNlIDB4MDoKKwkJVVNfREVCVUdQKCJqdW1wc2hvdF9oYW5kbGVfbW9kZV9zZW5zZTogIEN1cnJlbnQgdmFsdWVzXG4iKTsKKwkJYnJlYWs7CisJICAgY2FzZSAweDE6CisJCVVTX0RFQlVHUCgianVtcHNob3RfaGFuZGxlX21vZGVfc2Vuc2U6ICBDaGFuZ2VhYmxlIHZhbHVlc1xuIik7CisJCWJyZWFrOworCSAgIGNhc2UgMHgyOgorCQlVU19ERUJVR1AoImp1bXBzaG90X2hhbmRsZV9tb2RlX3NlbnNlOiAgRGVmYXVsdCB2YWx1ZXNcbiIpOworCQlicmVhazsKKwkgICBjYXNlIDB4MzoKKwkJVVNfREVCVUdQKCJqdW1wc2hvdF9oYW5kbGVfbW9kZV9zZW5zZTogIFNhdmVzIHZhbHVlc1xuIik7CisJCWJyZWFrOworCX0KKworCW1lbXNldChwdHIsIDAsIDgpOworCWlmIChzZW5zZV82KSB7CisJCXB0clsyXSA9IDB4MDA7CQkvLyBXUCBlbmFibGU6IDB4ODAKKwkJaSA9IDQ7CisJfSBlbHNlIHsKKwkJcHRyWzNdID0gMHgwMDsJCS8vIFdQIGVuYWJsZTogMHg4MAorCQlpID0gODsKKwl9CisKKwlzd2l0Y2ggKHBhZ2VfY29kZSkgeworCSAgIGNhc2UgMHgwOgorCQkvLyB2ZW5kb3Itc3BlY2lmaWMgbW9kZQorCQlpbmZvLT5zZW5zZV9rZXkgPSAweDA1OworCQlpbmZvLT5zZW5zZV9hc2MgPSAweDI0OworCQlpbmZvLT5zZW5zZV9hc2NxID0gMHgwMDsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisKKwkgICBjYXNlIDB4MToKKwkJbWVtY3B5KHB0ciArIGksIHJ3X2Vycl9wYWdlLCBzaXplb2YocndfZXJyX3BhZ2UpKTsKKwkJaSArPSBzaXplb2YocndfZXJyX3BhZ2UpOworCQlicmVhazsKKworCSAgIGNhc2UgMHg4OgorCQltZW1jcHkocHRyICsgaSwgY2FjaGVfcGFnZSwgc2l6ZW9mKGNhY2hlX3BhZ2UpKTsKKwkJaSArPSBzaXplb2YoY2FjaGVfcGFnZSk7CisJCWJyZWFrOworCisJICAgY2FzZSAweDFCOgorCQltZW1jcHkocHRyICsgaSwgcmJhY19wYWdlLCBzaXplb2YocmJhY19wYWdlKSk7CisJCWkgKz0gc2l6ZW9mKHJiYWNfcGFnZSk7CisJCWJyZWFrOworCisJICAgY2FzZSAweDFDOgorCQltZW1jcHkocHRyICsgaSwgdGltZXJfcGFnZSwgc2l6ZW9mKHRpbWVyX3BhZ2UpKTsKKwkJaSArPSBzaXplb2YodGltZXJfcGFnZSk7CisJCWJyZWFrOworCisJICAgY2FzZSAweDNGOgorCQltZW1jcHkocHRyICsgaSwgdGltZXJfcGFnZSwgc2l6ZW9mKHRpbWVyX3BhZ2UpKTsKKwkJaSArPSBzaXplb2YodGltZXJfcGFnZSk7CisJCW1lbWNweShwdHIgKyBpLCByYmFjX3BhZ2UsIHNpemVvZihyYmFjX3BhZ2UpKTsKKwkJaSArPSBzaXplb2YocmJhY19wYWdlKTsKKwkJbWVtY3B5KHB0ciArIGksIGNhY2hlX3BhZ2UsIHNpemVvZihjYWNoZV9wYWdlKSk7CisJCWkgKz0gc2l6ZW9mKGNhY2hlX3BhZ2UpOworCQltZW1jcHkocHRyICsgaSwgcndfZXJyX3BhZ2UsIHNpemVvZihyd19lcnJfcGFnZSkpOworCQlpICs9IHNpemVvZihyd19lcnJfcGFnZSk7CisJCWJyZWFrOworCX0KKworCWlmIChzZW5zZV82KQorCQlwdHJbMF0gPSBpIC0gMTsKKwllbHNlCisJCSgoX19iZTE2ICopIHB0cilbMF0gPSBjcHVfdG9fYmUxNihpIC0gMik7CisJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHB0ciwgaSwgc3JiKTsKKworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKK30KKworCitzdGF0aWMgdm9pZCBqdW1wc2hvdF9pbmZvX2Rlc3RydWN0b3Iodm9pZCAqZXh0cmEpCit7CisJLy8gdGhpcyByb3V0aW5lIGlzIGEgcGxhY2Vob2xkZXIuLi4KKwkvLyBjdXJyZW50bHksIHdlIGRvbid0IGFsbG9jYXRlIGFueSBleHRyYSBibG9ja3Mgc28gd2UncmUgb2theQorfQorCisKKworLy8gVHJhbnNwb3J0IGZvciB0aGUgTGV4YXIgJ0p1bXBzaG90JworLy8KK2ludCBqdW1wc2hvdF90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqIHNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQoreworCXN0cnVjdCBqdW1wc2hvdF9pbmZvICppbmZvOworCWludCByYzsKKwl1bnNpZ25lZCBsb25nIGJsb2NrLCBibG9ja3M7CisJdW5zaWduZWQgY2hhciAqcHRyID0gdXMtPmlvYnVmOworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGlucXVpcnlfcmVzcG9uc2VbOF0gPSB7CisJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MUYsIDB4MDAsIDB4MDAsIDB4MDAKKwl9OworCisJaWYgKCF1cy0+ZXh0cmEpIHsKKwkJdXMtPmV4dHJhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGp1bXBzaG90X2luZm8pLCBHRlBfTk9JTyk7CisJCWlmICghdXMtPmV4dHJhKSB7CisJCQlVU19ERUJVR1AoImp1bXBzaG90X3RyYW5zcG9ydDogIEdhaCEgQ2FuJ3QgYWxsb2NhdGUgc3RvcmFnZSBmb3IganVtcHNob3QgaW5mbyBzdHJ1Y3QhXG4iKTsKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCX0KKwkJbWVtc2V0KHVzLT5leHRyYSwgMCwgc2l6ZW9mKHN0cnVjdCBqdW1wc2hvdF9pbmZvKSk7CisJCXVzLT5leHRyYV9kZXN0cnVjdG9yID0ganVtcHNob3RfaW5mb19kZXN0cnVjdG9yOworCX0KKworCWluZm8gPSAoc3RydWN0IGp1bXBzaG90X2luZm8gKikgKHVzLT5leHRyYSk7CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IElOUVVJUlkpIHsKKwkJVVNfREVCVUdQKCJqdW1wc2hvdF90cmFuc3BvcnQ6ICBJTlFVSVJZLiAgUmV0dXJuaW5nIGJvZ3VzIHJlc3BvbnNlLlxuIik7CisJCW1lbWNweShwdHIsIGlucXVpcnlfcmVzcG9uc2UsIHNpemVvZihpbnF1aXJ5X3Jlc3BvbnNlKSk7CisJCWZpbGxfaW5xdWlyeV9yZXNwb25zZSh1cywgcHRyLCAzNik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFJFQURfQ0FQQUNJVFkpIHsKKwkJaW5mby0+c3NpemUgPSAweDIwMDsgIC8vIGhhcmQgY29kZWQgNTEyIGJ5dGUgc2VjdG9ycyBhcyBwZXIgQVRBIHNwZWMKKworCQlyYyA9IGp1bXBzaG90X2dldF9zdGF0dXModXMpOworCQlpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCQlyZXR1cm4gcmM7CisKKwkJcmMgPSBqdW1wc2hvdF9pZF9kZXZpY2UodXMsIGluZm8pOworCQlpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCQlyZXR1cm4gcmM7CisKKwkJVVNfREVCVUdQKCJqdW1wc2hvdF90cmFuc3BvcnQ6ICBSRUFEX0NBUEFDSVRZOiAgJWxkIHNlY3RvcnMsICVsZCBieXRlcyBwZXIgc2VjdG9yXG4iLAorCQkJICBpbmZvLT5zZWN0b3JzLCBpbmZvLT5zc2l6ZSk7CisKKwkJLy8gYnVpbGQgdGhlIHJlcGx5CisJCS8vCisJCSgoX19iZTMyICopIHB0cilbMF0gPSBjcHVfdG9fYmUzMihpbmZvLT5zZWN0b3JzIC0gMSk7CisJCSgoX19iZTMyICopIHB0cilbMV0gPSBjcHVfdG9fYmUzMihpbmZvLT5zc2l6ZSk7CisJCXVzYl9zdG9yX3NldF94ZmVyX2J1ZihwdHIsIDgsIHNyYik7CisKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gTU9ERV9TRUxFQ1RfMTApIHsKKwkJVVNfREVCVUdQKCJqdW1wc2hvdF90cmFuc3BvcnQ6ICBHYWghIE1PREVfU0VMRUNUXzEwLlxuIik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBSRUFEXzEwKSB7CisJCWJsb2NrID0gKCh1MzIpKHNyYi0+Y21uZFsyXSkgPDwgMjQpIHwgKCh1MzIpKHNyYi0+Y21uZFszXSkgPDwgMTYpIHwKKwkJCSgodTMyKShzcmItPmNtbmRbNF0pIDw8ICA4KSB8ICgodTMyKShzcmItPmNtbmRbNV0pKTsKKworCQlibG9ja3MgPSAoKHUzMikoc3JiLT5jbW5kWzddKSA8PCA4KSB8ICgodTMyKShzcmItPmNtbmRbOF0pKTsKKworCQlVU19ERUJVR1AoImp1bXBzaG90X3RyYW5zcG9ydDogIFJFQURfMTA6IHJlYWQgYmxvY2sgMHglMDRseCAgY291bnQgJWxkXG4iLCBibG9jaywgYmxvY2tzKTsKKwkJcmV0dXJuIGp1bXBzaG90X3JlYWRfZGF0YSh1cywgaW5mbywgYmxvY2ssIGJsb2Nrcyk7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBSRUFEXzEyKSB7CisJCS8vIEkgZG9uJ3QgdGhpbmsgd2UnbGwgZXZlciBzZWUgYSBSRUFEXzEyIGJ1dCBzdXBwb3J0IGl0IGFueXdheS4uLgorCQkvLworCQlibG9jayA9ICgodTMyKShzcmItPmNtbmRbMl0pIDw8IDI0KSB8ICgodTMyKShzcmItPmNtbmRbM10pIDw8IDE2KSB8CisJCQkoKHUzMikoc3JiLT5jbW5kWzRdKSA8PCAgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzVdKSk7CisKKwkJYmxvY2tzID0gKCh1MzIpKHNyYi0+Y21uZFs2XSkgPDwgMjQpIHwgKCh1MzIpKHNyYi0+Y21uZFs3XSkgPDwgMTYpIHwKKwkJCSAoKHUzMikoc3JiLT5jbW5kWzhdKSA8PCAgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzldKSk7CisKKwkJVVNfREVCVUdQKCJqdW1wc2hvdF90cmFuc3BvcnQ6ICBSRUFEXzEyOiByZWFkIGJsb2NrIDB4JTA0bHggIGNvdW50ICVsZFxuIiwgYmxvY2ssIGJsb2Nrcyk7CisJCXJldHVybiBqdW1wc2hvdF9yZWFkX2RhdGEodXMsIGluZm8sIGJsb2NrLCBibG9ja3MpOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gV1JJVEVfMTApIHsKKwkJYmxvY2sgPSAoKHUzMikoc3JiLT5jbW5kWzJdKSA8PCAyNCkgfCAoKHUzMikoc3JiLT5jbW5kWzNdKSA8PCAxNikgfAorCQkJKCh1MzIpKHNyYi0+Y21uZFs0XSkgPDwgIDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs1XSkpOworCisJCWJsb2NrcyA9ICgodTMyKShzcmItPmNtbmRbN10pIDw8IDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs4XSkpOworCisJCVVTX0RFQlVHUCgianVtcHNob3RfdHJhbnNwb3J0OiAgV1JJVEVfMTA6IHdyaXRlIGJsb2NrIDB4JTA0bHggIGNvdW50ICVsZFxuIiwgYmxvY2ssIGJsb2Nrcyk7CisJCXJldHVybiBqdW1wc2hvdF93cml0ZV9kYXRhKHVzLCBpbmZvLCBibG9jaywgYmxvY2tzKTsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFdSSVRFXzEyKSB7CisJCS8vIEkgZG9uJ3QgdGhpbmsgd2UnbGwgZXZlciBzZWUgYSBXUklURV8xMiBidXQgc3VwcG9ydCBpdCBhbnl3YXkuLi4KKwkJLy8KKwkJYmxvY2sgPSAoKHUzMikoc3JiLT5jbW5kWzJdKSA8PCAyNCkgfCAoKHUzMikoc3JiLT5jbW5kWzNdKSA8PCAxNikgfAorCQkJKCh1MzIpKHNyYi0+Y21uZFs0XSkgPDwgIDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs1XSkpOworCisJCWJsb2NrcyA9ICgodTMyKShzcmItPmNtbmRbNl0pIDw8IDI0KSB8ICgodTMyKShzcmItPmNtbmRbN10pIDw8IDE2KSB8CisJCQkgKCh1MzIpKHNyYi0+Y21uZFs4XSkgPDwgIDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs5XSkpOworCisJCVVTX0RFQlVHUCgianVtcHNob3RfdHJhbnNwb3J0OiAgV1JJVEVfMTI6IHdyaXRlIGJsb2NrIDB4JTA0bHggIGNvdW50ICVsZFxuIiwgYmxvY2ssIGJsb2Nrcyk7CisJCXJldHVybiBqdW1wc2hvdF93cml0ZV9kYXRhKHVzLCBpbmZvLCBibG9jaywgYmxvY2tzKTsKKwl9CisKKworCWlmIChzcmItPmNtbmRbMF0gPT0gVEVTVF9VTklUX1JFQURZKSB7CisJCVVTX0RFQlVHUCgianVtcHNob3RfdHJhbnNwb3J0OiAgVEVTVF9VTklUX1JFQURZLlxuIik7CisJCXJldHVybiBqdW1wc2hvdF9nZXRfc3RhdHVzKHVzKTsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UpIHsKKwkJVVNfREVCVUdQKCJqdW1wc2hvdF90cmFuc3BvcnQ6ICBSRVFVRVNUX1NFTlNFLlxuIik7CisKKwkJbWVtc2V0KHB0ciwgMCwgMTgpOworCQlwdHJbMF0gPSAweEYwOworCQlwdHJbMl0gPSBpbmZvLT5zZW5zZV9rZXk7CisJCXB0cls3XSA9IDExOworCQlwdHJbMTJdID0gaW5mby0+c2Vuc2VfYXNjOworCQlwdHJbMTNdID0gaW5mby0+c2Vuc2VfYXNjcTsKKwkJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHB0ciwgMTgsIHNyYik7CisKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gTU9ERV9TRU5TRSkgeworCQlVU19ERUJVR1AoImp1bXBzaG90X3RyYW5zcG9ydDogIE1PREVfU0VOU0VfNiBkZXRlY3RlZFxuIik7CisJCXJldHVybiBqdW1wc2hvdF9oYW5kbGVfbW9kZV9zZW5zZSh1cywgc3JiLCAxKTsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IE1PREVfU0VOU0VfMTApIHsKKwkJVVNfREVCVUdQKCJqdW1wc2hvdF90cmFuc3BvcnQ6ICBNT0RFX1NFTlNFXzEwIGRldGVjdGVkXG4iKTsKKwkJcmV0dXJuIGp1bXBzaG90X2hhbmRsZV9tb2RlX3NlbnNlKHVzLCBzcmIsIDApOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gQUxMT1dfTUVESVVNX1JFTU9WQUwpIHsKKwkJLy8gc3VyZS4gIHdoYXRldmVyLiAgbm90IGxpa2Ugd2UgY2FuIHN0b3AgdGhlIHVzZXIgZnJvbSBwb3BwaW5nCisJCS8vIHRoZSBtZWRpYSBvdXQgb2YgdGhlIGRldmljZSAobm8gbG9ja2luZyBkb29ycywgZXRjKQorCQkvLworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBTVEFSVF9TVE9QKSB7CisJCS8qIHRoaXMgaXMgdXNlZCBieSBzZC5jJ2NoZWNrX3Njc2lkaXNrX21lZGlhX2NoYW5nZSB0byBkZXRlY3QKKwkJICAgbWVkaWEgY2hhbmdlICovCisJCVVTX0RFQlVHUCgianVtcHNob3RfdHJhbnNwb3J0OiAgU1RBUlRfU1RPUC5cbiIpOworCQkvKiB0aGUgZmlyc3QganVtcHNob3RfaWRfZGV2aWNlIGFmdGVyIGEgbWVkaWEgY2hhbmdlIHJldHVybnMKKwkJICAgYW4gZXJyb3IgKGRldGVybWluZWQgZXhwZXJpbWVudGFsbHkpICovCisJCXJjID0ganVtcHNob3RfaWRfZGV2aWNlKHVzLCBpbmZvKTsKKwkJaWYgKHJjID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSB7CisJCQlpbmZvLT5zZW5zZV9rZXkgPSBOT19TRU5TRTsKKwkJCXNyYi0+cmVzdWx0ID0gU1VDQ0VTUzsKKwkJfSBlbHNlIHsKKwkJCWluZm8tPnNlbnNlX2tleSA9IFVOSVRfQVRURU5USU9OOworCQkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CisJCX0KKwkJcmV0dXJuIHJjOworCX0KKworCVVTX0RFQlVHUCgianVtcHNob3RfdHJhbnNwb3J0OiAgR2FoISBVbmtub3duIGNvbW1hbmQ6ICVkICgweCV4KVxuIiwKKwkJICBzcmItPmNtbmRbMF0sIHNyYi0+Y21uZFswXSk7CisJaW5mby0+c2Vuc2Vfa2V5ID0gMHgwNTsKKwlpbmZvLT5zZW5zZV9hc2MgPSAweDIwOworCWluZm8tPnNlbnNlX2FzY3EgPSAweDAwOworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YmFjOWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmgKQEAgLTAsMCArMSwzOSBAQAorLyogRHJpdmVyIGZvciBMZXhhciAiSnVtcHNob3QiIFVTQiBDb21wYWN0IEZsYXNoIHJlYWRlcgorICogSGVhZGVyIEZpbGUKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDIwMDAgSmltbWllIE1heWZpZWxkIChtYXlmaWVsZCt1c2JAc2Fja2hlYWRzLm9yZykKKyAqCisgKiBTZWUganVtcHNob3QuYyBmb3IgbW9yZSBleHBsYW5hdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX1VTQl9KVU1QU0hPVF9ICisjZGVmaW5lIF9VU0JfSlVNUFNIT1RfSAorCitleHRlcm4gaW50IGp1bXBzaG90X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7CisKK3N0cnVjdCBqdW1wc2hvdF9pbmZvIHsKKyAgIHVuc2lnbmVkIGxvbmcgICBzZWN0b3JzOyAgICAgLy8gdG90YWwgc2VjdG9yIGNvdW50CisgICB1bnNpZ25lZCBsb25nICAgc3NpemU7ICAgICAgIC8vIHNlY3RvciBzaXplIGluIGJ5dGVzCisgCisgICAvLyB0aGUgZm9sbG93aW5nIGFyZW4ndCB1c2VkIHlldAorICAgdW5zaWduZWQgY2hhciAgIHNlbnNlX2tleTsKKyAgIHVuc2lnbmVkIGxvbmcgICBzZW5zZV9hc2M7ICAgLy8gYWRkaXRpb25hbCBzZW5zZSBjb2RlCisgICB1bnNpZ25lZCBsb25nICAgc2Vuc2VfYXNjcTsgIC8vIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9wcm90b2NvbC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9wcm90b2NvbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZDMwNDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmMKQEAgLTAsMCArMSwyNTQgQEAKKy8qIERyaXZlciBmb3IgVVNCIE1hc3MgU3RvcmFnZSBjb21wbGlhbnQgZGV2aWNlcworICoKKyAqICRJZDogcHJvdG9jb2wuYyx2IDEuMTQgMjAwMi8wNC8yMiAwMzozOTo0MyBtZGhhcm0gRXhwICQKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDE5OTktMjAwMiBNYXR0aGV3IERoYXJtIChtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldCkKKyAqCisgKiBEZXZlbG9wZWQgd2l0aCB0aGUgYXNzaXN0YW5jZSBvZjoKKyAqICAgKGMpIDIwMDAgRGF2aWQgTC4gQnJvd24sIEpyLiAodXNiLXN0b3JhZ2VAZGF2aWRiLm9yZykKKyAqICAgKGMpIDIwMDIgQWxhbiBTdGVybiAoc3Rlcm5Acm93bGFuZC5vcmcpCisgKgorICogSW5pdGlhbCB3b3JrIGJ5OgorICogICAoYykgMTk5OSBNaWNoYWVsIEdlZSAobWljaGFlbEBsaW51eHNwZWNpZmljLmNvbSkKKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgJ1VTQiBNYXNzIFN0b3JhZ2UgQ2xhc3MnIGRvY3VtZW50LiBUaGlzCisgKiBkZXNjcmliZXMgaW4gZGV0YWlsIHRoZSBwcm90b2NvbCB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggc3VjaAorICogZGV2aWNlcy4gIENsZWFybHksIHRoZSBkZXNpZ25lcnMgaGFkIFNDU0kgYW5kIEFUQVBJIGNvbW1hbmRzIGluCisgKiBtaW5kIHdoZW4gdGhleSBjcmVhdGVkIHRoaXMgZG9jdW1lbnQuICBUaGUgY29tbWFuZHMgYXJlIGFsbCB2ZXJ5CisgKiBzaW1pbGFyIHRvIGNvbW1hbmRzIGluIHRoZSBTQ1NJLUlJIGFuZCBBVEFQSSBzcGVjaWZpY2F0aW9ucy4KKyAqCisgKiBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IGluIGEgbnVtYmVyIG9mIGNhc2VzIHRoaXMgY2xhc3MKKyAqIGV4aGliaXRzIGNsYXNzLXNwZWNpZmljIGV4ZW1wdGlvbnMgZnJvbSB0aGUgVVNCIHNwZWNpZmljYXRpb24uCisgKiBOb3RhYmx5IHRoZSB1c2FnZSBvZiBOQUssIFNUQUxMIGFuZCBBQ0sgZGlmZmVycyBmcm9tIHRoZSBub3JtLCBpbgorICogdGhhdCB0aGV5IGFyZSB1c2VkIHRvIGNvbW11bmljYXRlIHdhaXQsIGZhaWxlZCBhbmQgT0sgb24gY29tbWFuZHMuCisgKgorICogQWxzbywgZm9yIGNlcnRhaW4gZGV2aWNlcywgdGhlIGludGVycnVwdCBlbmRwb2ludCBpcyB1c2VkIHRvIGNvbnZleQorICogc3RhdHVzIG9mIGEgY29tbWFuZC4KKyAqCisgKiBQbGVhc2Ugc2VlIGh0dHA6Ly93d3cub25lLWV5ZWQtYWxpZW4ubmV0L35tZGhhcm0vbGludXgtdXNiIGZvciBtb3JlCisgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRyaXZlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisKKyNpbmNsdWRlICJ1c2IuaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAic2NzaWdsdWUuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b2NvbCByb3V0aW5lcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIHVzYl9zdG9yX3FpYzE1N19jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQoreworCS8qIFBhZCB0aGUgQVRBUEkgY29tbWFuZCB3aXRoIHplcm9zIAorCSAqCisJICogTk9URTogVGhpcyBvbmx5IHdvcmtzIGJlY2F1c2UgYSBzY3NpX2NtbmQgc3RydWN0IGZpZWxkIGNvbnRhaW5zCisJICogYSB1bnNpZ25lZCBjaGFyIGNtbmRbMTZdLCBzbyB3ZSBrbm93IHdlIGhhdmUgc3RvcmFnZSBhdmFpbGFibGUKKwkgKi8KKwlmb3IgKDsgc3JiLT5jbWRfbGVuPDEyOyBzcmItPmNtZF9sZW4rKykKKwkJc3JiLT5jbW5kW3NyYi0+Y21kX2xlbl0gPSAwOworCisJLyogc2V0IGNvbW1hbmQgbGVuZ3RoIHRvIDEyIGJ5dGVzICovCisJc3JiLT5jbWRfbGVuID0gMTI7CisKKwkvKiBzZW5kIHRoZSBjb21tYW5kIHRvIHRoZSB0cmFuc3BvcnQgbGF5ZXIgKi8KKwl1c2Jfc3Rvcl9pbnZva2VfdHJhbnNwb3J0KHNyYiwgdXMpOworfQorCit2b2lkIHVzYl9zdG9yX0FUQVBJX2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJLyogUGFkIHRoZSBBVEFQSSBjb21tYW5kIHdpdGggemVyb3MgCisJICoKKwkgKiBOT1RFOiBUaGlzIG9ubHkgd29ya3MgYmVjYXVzZSBhIHNjc2lfY21uZCBzdHJ1Y3QgZmllbGQgY29udGFpbnMKKwkgKiBhIHVuc2lnbmVkIGNoYXIgY21uZFsxNl0sIHNvIHdlIGtub3cgd2UgaGF2ZSBzdG9yYWdlIGF2YWlsYWJsZQorCSAqLworCisJLyogUGFkIHRoZSBBVEFQSSBjb21tYW5kIHdpdGggemVyb3MgKi8KKwlmb3IgKDsgc3JiLT5jbWRfbGVuPDEyOyBzcmItPmNtZF9sZW4rKykKKwkJc3JiLT5jbW5kW3NyYi0+Y21kX2xlbl0gPSAwOworCisJLyogc2V0IGNvbW1hbmQgbGVuZ3RoIHRvIDEyIGJ5dGVzICovCisJc3JiLT5jbWRfbGVuID0gMTI7CisKKwkvKiBzZW5kIHRoZSBjb21tYW5kIHRvIHRoZSB0cmFuc3BvcnQgbGF5ZXIgKi8KKwl1c2Jfc3Rvcl9pbnZva2VfdHJhbnNwb3J0KHNyYiwgdXMpOworfQorCisKK3ZvaWQgdXNiX3N0b3JfdWZpX2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJLyogZml4IHNvbWUgY29tbWFuZHMgLS0gdGhpcyBpcyBhIGZvcm0gb2YgbW9kZSB0cmFuc2xhdGlvbgorCSAqIFVGSSBkZXZpY2VzIG9ubHkgYWNjZXB0IDEyIGJ5dGUgbG9uZyBjb21tYW5kcyAKKwkgKgorCSAqIE5PVEU6IFRoaXMgb25seSB3b3JrcyBiZWNhdXNlIGEgc2NzaV9jbW5kIHN0cnVjdCBmaWVsZCBjb250YWlucworCSAqIGEgdW5zaWduZWQgY2hhciBjbW5kWzE2XSwgc28gd2Uga25vdyB3ZSBoYXZlIHN0b3JhZ2UgYXZhaWxhYmxlCisJICovCisKKwkvKiBQYWQgdGhlIEFUQVBJIGNvbW1hbmQgd2l0aCB6ZXJvcyAqLworCWZvciAoOyBzcmItPmNtZF9sZW48MTI7IHNyYi0+Y21kX2xlbisrKQorCQlzcmItPmNtbmRbc3JiLT5jbWRfbGVuXSA9IDA7CisKKwkvKiBzZXQgY29tbWFuZCBsZW5ndGggdG8gMTIgYnl0ZXMgKHRoaXMgYWZmZWN0cyB0aGUgdHJhbnNwb3J0IGxheWVyKSAqLworCXNyYi0+Y21kX2xlbiA9IDEyOworCisJLyogWFhYIFdlIHNob3VsZCBiZSBjb25zdGFudGx5IHJlLWV2YWx1YXRpbmcgdGhlIG5lZWQgZm9yIHRoZXNlICovCisKKwkvKiBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgZGF0YSBsZW5ndGggZm9yIHRoZXNlIGNvbW1hbmRzICovCisJc3dpdGNoIChzcmItPmNtbmRbMF0pIHsKKworCQkvKiBmb3IgSU5RVUlSWSwgVUZJIGRldmljZXMgb25seSBldmVyIHJldHVybiAzNiBieXRlcyAqLworCWNhc2UgSU5RVUlSWToKKwkJc3JiLT5jbW5kWzRdID0gMzY7CisJCWJyZWFrOworCisJCS8qIGFnYWluLCBmb3IgTU9ERV9TRU5TRV8xMCwgd2UgZ2V0IHRoZSBtaW5pbXVtICg4KSAqLworCWNhc2UgTU9ERV9TRU5TRV8xMDoKKwkJc3JiLT5jbW5kWzddID0gMDsKKwkJc3JiLT5jbW5kWzhdID0gODsKKwkJYnJlYWs7CisKKwkJLyogZm9yIFJFUVVFU1RfU0VOU0UsIFVGSSBkZXZpY2VzIG9ubHkgZXZlciByZXR1cm4gMTggYnl0ZXMgKi8KKwljYXNlIFJFUVVFU1RfU0VOU0U6CisJCXNyYi0+Y21uZFs0XSA9IDE4OworCQlicmVhazsKKwl9IC8qIGVuZCBzd2l0Y2ggb24gY21uZFswXSAqLworCisJLyogc2VuZCB0aGUgY29tbWFuZCB0byB0aGUgdHJhbnNwb3J0IGxheWVyICovCisJdXNiX3N0b3JfaW52b2tlX3RyYW5zcG9ydChzcmIsIHVzKTsKK30KKwordm9pZCB1c2Jfc3Rvcl90cmFuc3BhcmVudF9zY3NpX2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc3JiLAorCQkJCSAgICAgICBzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJLyogc2VuZCB0aGUgY29tbWFuZCB0byB0aGUgdHJhbnNwb3J0IGxheWVyICovCisJdXNiX3N0b3JfaW52b2tlX3RyYW5zcG9ydChzcmIsIHVzKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTY2F0dGVyLWdhdGhlciB0cmFuc2ZlciBidWZmZXIgYWNjZXNzIHJvdXRpbmVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIENvcHkgYSBidWZmZXIgb2YgbGVuZ3RoIGJ1ZmxlbiB0by9mcm9tIHRoZSBzcmIncyB0cmFuc2ZlciBidWZmZXIuCisgKiAoTm90ZTogZm9yIHNjYXR0ZXItZ2F0aGVyIHRyYW5zZmVycyAoc3JiLT51c2Vfc2cgPiAwKSwgc3JiLT5yZXF1ZXN0X2J1ZmZlcgorICogcG9pbnRzIHRvIGEgbGlzdCBvZiBzLWcgZW50cmllcyBhbmQgd2UgaWdub3JlIHNyYi0+cmVxdWVzdF9idWZmbGVuLgorICogRm9yIG5vbi1zY2F0dGVyLWdhdGhlciB0cmFuc2ZlcnMsIHNyYi0+cmVxdWVzdF9idWZmZXIgcG9pbnRzIHRvIHRoZQorICogdHJhbnNmZXIgYnVmZmVyIGl0c2VsZiBhbmQgc3JiLT5yZXF1ZXN0X2J1ZmZsZW4gaXMgdGhlIGJ1ZmZlcidzIGxlbmd0aC4pCisgKiBVcGRhdGUgdGhlICppbmRleCBhbmQgKm9mZnNldCB2YXJpYWJsZXMgc28gdGhhdCB0aGUgbmV4dCBjb3B5IHdpbGwKKyAqIHBpY2sgdXAgZnJvbSB3aGVyZSB0aGlzIG9uZSBsZWZ0IG9mZi4gKi8KKwordW5zaWduZWQgaW50IHVzYl9zdG9yX2FjY2Vzc194ZmVyX2J1Zih1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJdW5zaWduZWQgaW50IGJ1Zmxlbiwgc3RydWN0IHNjc2lfY21uZCAqc3JiLCB1bnNpZ25lZCBpbnQgKmluZGV4LAorCXVuc2lnbmVkIGludCAqb2Zmc2V0LCBlbnVtIHhmZXJfYnVmX2RpciBkaXIpCit7CisJdW5zaWduZWQgaW50IGNudDsKKworCS8qIElmIG5vdCB1c2luZyBzY2F0dGVyLWdhdGhlciwganVzdCB0cmFuc2ZlciB0aGUgZGF0YSBkaXJlY3RseS4KKwkgKiBNYWtlIGNlcnRhaW4gaXQgd2lsbCBmaXQgaW4gdGhlIGF2YWlsYWJsZSBidWZmZXIgc3BhY2UuICovCisJaWYgKHNyYi0+dXNlX3NnID09IDApIHsKKwkJaWYgKCpvZmZzZXQgPj0gc3JiLT5yZXF1ZXN0X2J1ZmZsZW4pCisJCQlyZXR1cm4gMDsKKwkJY250ID0gbWluKGJ1Zmxlbiwgc3JiLT5yZXF1ZXN0X2J1ZmZsZW4gLSAqb2Zmc2V0KTsKKwkJaWYgKGRpciA9PSBUT19YRkVSX0JVRikKKwkJCW1lbWNweSgodW5zaWduZWQgY2hhciAqKSBzcmItPnJlcXVlc3RfYnVmZmVyICsgKm9mZnNldCwKKwkJCQkJYnVmZmVyLCBjbnQpOworCQllbHNlCisJCQltZW1jcHkoYnVmZmVyLCAodW5zaWduZWQgY2hhciAqKSBzcmItPnJlcXVlc3RfYnVmZmVyICsKKwkJCQkJKm9mZnNldCwgY250KTsKKwkJKm9mZnNldCArPSBjbnQ7CisKKwkvKiBVc2luZyBzY2F0dGVyLWdhdGhlci4gIFdlIGhhdmUgdG8gZ28gdGhyb3VnaCB0aGUgbGlzdCBvbmUgZW50cnkKKwkgKiBhdCBhIHRpbWUuICBFYWNoIHMtZyBlbnRyeSBjb250YWlucyBzb21lIG51bWJlciBvZiBwYWdlcywgYW5kCisJICogZWFjaCBwYWdlIGhhcyB0byBiZSBrbWFwKCknZWQgc2VwYXJhdGVseS4gIElmIHRoZSBwYWdlIGlzIGFscmVhZHkKKwkgKiBpbiBrZXJuZWwtYWRkcmVzc2FibGUgbWVtb3J5IHRoZW4ga21hcCgpIHdpbGwgcmV0dXJuIGl0cyBhZGRyZXNzLgorCSAqIElmIHRoZSBwYWdlIGlzIG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxlIC0tIHN1Y2ggYXMgYSB1c2VyIGJ1ZmZlcgorCSAqIGxvY2F0ZWQgaW4gaGlnaCBtZW1vcnkgLS0gdGhlbiBrbWFwKCkgd2lsbCBtYXAgaXQgdG8gYSB0ZW1wb3JhcnkKKwkgKiBwb3NpdGlvbiBpbiB0aGUga2VybmVsJ3MgdmlydHVhbCBhZGRyZXNzIHNwYWNlLiAqLworCX0gZWxzZSB7CisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPQorCQkJCShzdHJ1Y3Qgc2NhdHRlcmxpc3QgKikgc3JiLT5yZXF1ZXN0X2J1ZmZlcgorCQkJCSsgKmluZGV4OworCisJCS8qIFRoaXMgbG9vcCBoYW5kbGVzIGEgc2luZ2xlIHMtZyBsaXN0IGVudHJ5LCB3aGljaCBtYXkKKwkJICogaW5jbHVkZSBtdWx0aXBsZSBwYWdlcy4gIEZpbmQgdGhlIGluaXRpYWwgcGFnZSBzdHJ1Y3R1cmUKKwkJICogYW5kIHRoZSBzdGFydGluZyBvZmZzZXQgd2l0aGluIHRoZSBwYWdlLCBhbmQgdXBkYXRlCisJCSAqIHRoZSAqb2Zmc2V0IGFuZCAqaW5kZXggdmFsdWVzIGZvciB0aGUgbmV4dCBsb29wLiAqLworCQljbnQgPSAwOworCQl3aGlsZSAoY250IDwgYnVmbGVuICYmICppbmRleCA8IHNyYi0+dXNlX3NnKSB7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNnLT5wYWdlICsKKwkJCQkJKChzZy0+b2Zmc2V0ICsgKm9mZnNldCkgPj4gUEFHRV9TSElGVCk7CisJCQl1bnNpZ25lZCBpbnQgcG9mZiA9CisJCQkJCShzZy0+b2Zmc2V0ICsgKm9mZnNldCkgJiAoUEFHRV9TSVpFLTEpOworCQkJdW5zaWduZWQgaW50IHNnbGVuID0gc2ctPmxlbmd0aCAtICpvZmZzZXQ7CisKKwkJCWlmIChzZ2xlbiA+IGJ1ZmxlbiAtIGNudCkgeworCisJCQkJLyogVHJhbnNmZXIgZW5kcyB3aXRoaW4gdGhpcyBzLWcgZW50cnkgKi8KKwkJCQlzZ2xlbiA9IGJ1ZmxlbiAtIGNudDsKKwkJCQkqb2Zmc2V0ICs9IHNnbGVuOworCQkJfSBlbHNlIHsKKworCQkJCS8qIFRyYW5zZmVyIGNvbnRpbnVlcyB0byBuZXh0IHMtZyBlbnRyeSAqLworCQkJCSpvZmZzZXQgPSAwOworCQkJCSsrKmluZGV4OworCQkJCSsrc2c7CisJCQl9CisKKwkJCS8qIFRyYW5zZmVyIHRoZSBkYXRhIGZvciBhbGwgdGhlIHBhZ2VzIGluIHRoaXMKKwkJCSAqIHMtZyBlbnRyeS4gIEZvciBlYWNoIHBhZ2U6IGNhbGwga21hcCgpLCBkbyB0aGUKKwkJCSAqIHRyYW5zZmVyLCBhbmQgY2FsbCBrdW5tYXAoKSBpbW1lZGlhdGVseSBhZnRlci4gKi8KKwkJCXdoaWxlIChzZ2xlbiA+IDApIHsKKwkJCQl1bnNpZ25lZCBpbnQgcGxlbiA9IG1pbihzZ2xlbiwgKHVuc2lnbmVkIGludCkKKwkJCQkJCVBBR0VfU0laRSAtIHBvZmYpOworCQkJCXVuc2lnbmVkIGNoYXIgKnB0ciA9IGttYXAocGFnZSk7CisKKwkJCQlpZiAoZGlyID09IFRPX1hGRVJfQlVGKQorCQkJCQltZW1jcHkocHRyICsgcG9mZiwgYnVmZmVyICsgY250LCBwbGVuKTsKKwkJCQllbHNlCisJCQkJCW1lbWNweShidWZmZXIgKyBjbnQsIHB0ciArIHBvZmYsIHBsZW4pOworCQkJCWt1bm1hcChwYWdlKTsKKworCQkJCS8qIFN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgcGFnZSAqLworCQkJCXBvZmYgPSAwOworCQkJCSsrcGFnZTsKKwkJCQljbnQgKz0gcGxlbjsKKwkJCQlzZ2xlbiAtPSBwbGVuOworCQkJfQorCQl9CisJfQorCisJLyogUmV0dXJuIHRoZSBhbW91bnQgYWN0dWFsbHkgdHJhbnNmZXJyZWQgKi8KKwlyZXR1cm4gY250OworfQorCisvKiBTdG9yZSB0aGUgY29udGVudHMgb2YgYnVmZmVyIGludG8gc3JiJ3MgdHJhbnNmZXIgYnVmZmVyIGFuZCBzZXQgdGhlCisgKiBTQ1NJIHJlc2lkdWUuICovCit2b2lkIHVzYl9zdG9yX3NldF94ZmVyX2J1Zih1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJdW5zaWduZWQgaW50IGJ1Zmxlbiwgc3RydWN0IHNjc2lfY21uZCAqc3JiKQoreworCXVuc2lnbmVkIGludCBpbmRleCA9IDAsIG9mZnNldCA9IDA7CisKKwl1c2Jfc3Rvcl9hY2Nlc3NfeGZlcl9idWYoYnVmZmVyLCBidWZsZW4sIHNyYiwgJmluZGV4LCAmb2Zmc2V0LAorCQkJVE9fWEZFUl9CVUYpOworCWlmIChidWZsZW4gPCBzcmItPnJlcXVlc3RfYnVmZmxlbikKKwkJc3JiLT5yZXNpZCA9IHNyYi0+cmVxdWVzdF9idWZmbGVuIC0gYnVmbGVuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9wcm90b2NvbC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9wcm90b2NvbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYmZmMDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmgKQEAgLTAsMCArMSw3NCBAQAorLyogRHJpdmVyIGZvciBVU0IgTWFzcyBTdG9yYWdlIGNvbXBsaWFudCBkZXZpY2VzCisgKiBQcm90b2NvbCBGdW5jdGlvbnMgSGVhZGVyIEZpbGUKKyAqCisgKiAkSWQ6IHByb3RvY29sLmgsdiAxLjQgMjAwMS8wMi8xMyAwNzoxMDowMyBtZGhhcm0gRXhwICQKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDE5OTksIDIwMDAgTWF0dGhldyBEaGFybSAobWRoYXJtLXVzYkBvbmUtZXllZC1hbGllbi5uZXQpCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlICdVU0IgTWFzcyBTdG9yYWdlIENsYXNzJyBkb2N1bWVudC4gVGhpcworICogZGVzY3JpYmVzIGluIGRldGFpbCB0aGUgcHJvdG9jb2wgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHN1Y2gKKyAqIGRldmljZXMuICBDbGVhcmx5LCB0aGUgZGVzaWduZXJzIGhhZCBTQ1NJIGFuZCBBVEFQSSBjb21tYW5kcyBpbgorICogbWluZCB3aGVuIHRoZXkgY3JlYXRlZCB0aGlzIGRvY3VtZW50LiAgVGhlIGNvbW1hbmRzIGFyZSBhbGwgdmVyeQorICogc2ltaWxhciB0byBjb21tYW5kcyBpbiB0aGUgU0NTSS1JSSBhbmQgQVRBUEkgc3BlY2lmaWNhdGlvbnMuCisgKgorICogSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBpbiBhIG51bWJlciBvZiBjYXNlcyB0aGlzIGNsYXNzCisgKiBleGhpYml0cyBjbGFzcy1zcGVjaWZpYyBleGVtcHRpb25zIGZyb20gdGhlIFVTQiBzcGVjaWZpY2F0aW9uLgorICogTm90YWJseSB0aGUgdXNhZ2Ugb2YgTkFLLCBTVEFMTCBhbmQgQUNLIGRpZmZlcnMgZnJvbSB0aGUgbm9ybSwgaW4KKyAqIHRoYXQgdGhleSBhcmUgdXNlZCB0byBjb21tdW5pY2F0ZSB3YWl0LCBmYWlsZWQgYW5kIE9LIG9uIGNvbW1hbmRzLgorICoKKyAqIEFsc28sIGZvciBjZXJ0YWluIGRldmljZXMsIHRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQgaXMgdXNlZCB0byBjb252ZXkKKyAqIHN0YXR1cyBvZiBhIGNvbW1hbmQuCisgKgorICogUGxlYXNlIHNlZSBodHRwOi8vd3d3Lm9uZS1leWVkLWFsaWVuLm5ldC9+bWRoYXJtL2xpbnV4LXVzYiBmb3IgbW9yZQorICogaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBkcml2ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfUFJPVE9DT0xfSF8KKyNkZWZpbmUgX1BST1RPQ09MX0hfCisKKy8qIFN1YiBDbGFzc2VzICovCisKKyNkZWZpbmUgVVNfU0NfUkJDCTB4MDEJCS8qIFR5cGljYWxseSwgZmxhc2ggZGV2aWNlcyAqLworI2RlZmluZSBVU19TQ184MDIwCTB4MDIJCS8qIENELVJPTSAqLworI2RlZmluZSBVU19TQ19RSUMJMHgwMwkJLyogUUlDLTE1NyBUYXBlcyAqLworI2RlZmluZSBVU19TQ19VRkkJMHgwNAkJLyogRmxvcHB5ICovCisjZGVmaW5lIFVTX1NDXzgwNzAJMHgwNQkJLyogUmVtb3ZhYmxlIG1lZGlhICovCisjZGVmaW5lIFVTX1NDX1NDU0kJMHgwNgkJLyogVHJhbnNwYXJlbnQgKi8KKyNkZWZpbmUgVVNfU0NfSVNEMjAwICAgIDB4MDcJCS8qIElTRDIwMCBBVEEgKi8KKyNkZWZpbmUgVVNfU0NfTUlOCVVTX1NDX1JCQworI2RlZmluZSBVU19TQ19NQVgJVVNfU0NfSVNEMjAwCisKKyNkZWZpbmUgVVNfU0NfREVWSUNFCTB4ZmYJCS8qIFVzZSBkZXZpY2UncyB2YWx1ZSAqLworCisvKiBQcm90b2NvbCBoYW5kbGluZyByb3V0aW5lcyAqLworZXh0ZXJuIHZvaWQgdXNiX3N0b3JfQVRBUElfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kKiwgc3RydWN0IHVzX2RhdGEqKTsKK2V4dGVybiB2b2lkIHVzYl9zdG9yX3FpYzE1N19jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQqLCBzdHJ1Y3QgdXNfZGF0YSopOworZXh0ZXJuIHZvaWQgdXNiX3N0b3JfdWZpX2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCosIHN0cnVjdCB1c19kYXRhKik7CitleHRlcm4gdm9pZCB1c2Jfc3Rvcl90cmFuc3BhcmVudF9zY3NpX2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCosCisJCXN0cnVjdCB1c19kYXRhKik7CisKKy8qIHN0cnVjdCBzY3NpX2NtbmQgdHJhbnNmZXIgYnVmZmVyIGFjY2VzcyB1dGlsaXRpZXMgKi8KK2VudW0geGZlcl9idWZfZGlyCXtUT19YRkVSX0JVRiwgRlJPTV9YRkVSX0JVRn07CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgdXNiX3N0b3JfYWNjZXNzX3hmZXJfYnVmKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKKwl1bnNpZ25lZCBpbnQgYnVmbGVuLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHVuc2lnbmVkIGludCAqaW5kZXgsCisJdW5zaWduZWQgaW50ICpvZmZzZXQsIGVudW0geGZlcl9idWZfZGlyIGRpcik7CisKK2V4dGVybiB2b2lkIHVzYl9zdG9yX3NldF94ZmVyX2J1Zih1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJdW5zaWduZWQgaW50IGJ1Zmxlbiwgc3RydWN0IHNjc2lfY21uZCAqc3JiKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZTQ4YTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMKQEAgLTAsMCArMSw1MDAgQEAKKy8qIERyaXZlciBmb3IgVVNCIE1hc3MgU3RvcmFnZSBjb21wbGlhbnQgZGV2aWNlcworICogU0NTSSBsYXllciBnbHVlIGNvZGUKKyAqCisgKiAkSWQ6IHNjc2lnbHVlLmMsdiAxLjI2IDIwMDIvMDQvMjIgMDM6Mzk6NDMgbWRoYXJtIEV4cCAkCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAxOTk5LTIwMDIgTWF0dGhldyBEaGFybSAobWRoYXJtLXVzYkBvbmUtZXllZC1hbGllbi5uZXQpCisgKgorICogRGV2ZWxvcGVkIHdpdGggdGhlIGFzc2lzdGFuY2Ugb2Y6CisgKiAgIChjKSAyMDAwIERhdmlkIEwuIEJyb3duLCBKci4gKHVzYi1zdG9yYWdlQGRhdmlkYi5vcmcpCisgKiAgIChjKSAyMDAwIFN0ZXBoZW4gSi4gR293ZHkgKFNHb3dkeUBsYmwuZ292KQorICoKKyAqIEluaXRpYWwgd29yayBieToKKyAqICAgKGMpIDE5OTkgTWljaGFlbCBHZWUgKG1pY2hhZWxAbGludXhzcGVjaWZpYy5jb20pCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlICdVU0IgTWFzcyBTdG9yYWdlIENsYXNzJyBkb2N1bWVudC4gVGhpcworICogZGVzY3JpYmVzIGluIGRldGFpbCB0aGUgcHJvdG9jb2wgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHN1Y2gKKyAqIGRldmljZXMuICBDbGVhcmx5LCB0aGUgZGVzaWduZXJzIGhhZCBTQ1NJIGFuZCBBVEFQSSBjb21tYW5kcyBpbgorICogbWluZCB3aGVuIHRoZXkgY3JlYXRlZCB0aGlzIGRvY3VtZW50LiAgVGhlIGNvbW1hbmRzIGFyZSBhbGwgdmVyeQorICogc2ltaWxhciB0byBjb21tYW5kcyBpbiB0aGUgU0NTSS1JSSBhbmQgQVRBUEkgc3BlY2lmaWNhdGlvbnMuCisgKgorICogSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBpbiBhIG51bWJlciBvZiBjYXNlcyB0aGlzIGNsYXNzCisgKiBleGhpYml0cyBjbGFzcy1zcGVjaWZpYyBleGVtcHRpb25zIGZyb20gdGhlIFVTQiBzcGVjaWZpY2F0aW9uLgorICogTm90YWJseSB0aGUgdXNhZ2Ugb2YgTkFLLCBTVEFMTCBhbmQgQUNLIGRpZmZlcnMgZnJvbSB0aGUgbm9ybSwgaW4KKyAqIHRoYXQgdGhleSBhcmUgdXNlZCB0byBjb21tdW5pY2F0ZSB3YWl0LCBmYWlsZWQgYW5kIE9LIG9uIGNvbW1hbmRzLgorICoKKyAqIEFsc28sIGZvciBjZXJ0YWluIGRldmljZXMsIHRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQgaXMgdXNlZCB0byBjb252ZXkKKyAqIHN0YXR1cyBvZiBhIGNvbW1hbmQuCisgKgorICogUGxlYXNlIHNlZSBodHRwOi8vd3d3Lm9uZS1leWVkLWFsaWVuLm5ldC9+bWRoYXJtL2xpbnV4LXVzYiBmb3IgbW9yZQorICogaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBkcml2ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmluZm8uaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2VoLmg+CisKKyNpbmNsdWRlICJ1c2IuaCIKKyNpbmNsdWRlICJzY3NpZ2x1ZS5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBIb3N0IGZ1bmN0aW9ucyAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGNvbnN0IGNoYXIqIGhvc3RfaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KQoreworCXJldHVybiAiU0NTSSBlbXVsYXRpb24gZm9yIFVTQiBNYXNzIFN0b3JhZ2UgZGV2aWNlcyI7Cit9CisKK3N0YXRpYyBpbnQgc2xhdmVfYWxsb2MgKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwkvKgorCSAqIFNldCB0aGUgSU5RVUlSWSB0cmFuc2ZlciBsZW5ndGggdG8gMzYuICBXZSBkb24ndCB1c2UgYW55IG9mCisJICogdGhlIGV4dHJhIGRhdGEgYW5kIG1hbnkgZGV2aWNlcyBjaG9rZSBpZiBhc2tlZCBmb3IgbW9yZSBvcgorCSAqIGxlc3MgdGhhbiAzNiBieXRlcy4KKwkgKi8KKwlzZGV2LT5pbnF1aXJ5X2xlbiA9IDM2OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzID0gaG9zdF90b191cyhzZGV2LT5ob3N0KTsKKworCS8qIFNjYXR0ZXItZ2F0aGVyIGJ1ZmZlcnMgKGFsbCBidXQgdGhlIGxhc3QpIG11c3QgaGF2ZSBhIGxlbmd0aAorCSAqIGRpdmlzaWJsZSBieSB0aGUgYnVsayBtYXhwYWNrZXQgc2l6ZS4gIE90aGVyd2lzZSBhIGRhdGEgcGFja2V0CisJICogd291bGQgZW5kIHVwIGJlaW5nIHNob3J0LCBjYXVzaW5nIGEgcHJlbWF0dXJlIGVuZCB0byB0aGUgZGF0YQorCSAqIHRyYW5zZmVyLiAgU2luY2UgaGlnaC1zcGVlZCBidWxrIHBpcGVzIGhhdmUgYSBtYXhwYWNrZXQgc2l6ZQorCSAqIG9mIDUxMiwgd2UnbGwgdXNlIHRoYXQgYXMgdGhlIHNjc2kgZGV2aWNlIHF1ZXVlJ3MgRE1BIGFsaWdubWVudAorCSAqIG1hc2suICBHdWFyYW50ZWVpbmcgcHJvcGVyIGFsaWdubWVudCBvZiB0aGUgZmlyc3QgYnVmZmVyIHdpbGwKKwkgKiBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCBiZWNhdXNlLCBleGNlcHQgYXQgdGhlIGJlZ2lubmluZyBhbmQKKwkgKiB0aGUgZW5kLCBzY2F0dGVyLWdhdGhlciBidWZmZXJzIGZvbGxvdyBwYWdlIGJvdW5kYXJpZXMuICovCisJYmxrX3F1ZXVlX2RtYV9hbGlnbm1lbnQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgKDUxMiAtIDEpKTsKKworCS8qIFNldCB0aGUgU0NTSSBsZXZlbCB0byBhdCBsZWFzdCAyLiAgV2UnbGwgbGVhdmUgaXQgYXQgMyBpZiB0aGF0J3MKKwkgKiB3aGF0IGlzIG9yaWdpbmFsbHkgcmVwb3J0ZWQuICBXZSBuZWVkIHRoaXMgdG8gYXZvaWQgY29uZnVzaW5nCisJICogdGhlIFNDU0kgbGF5ZXIgd2l0aCBkZXZpY2VzIHRoYXQgcmVwb3J0IDAgb3IgMSwgYnV0IG5lZWQgMTAtYnl0ZQorCSAqIGNvbW1hbmRzIChhbGEgQVRBUEkgZGV2aWNlcyBiZWhpbmQgY2VydGFpbiBicmlkZ2VzLCBvciBkZXZpY2VzCisJICogd2hpY2ggc2ltcGx5IGhhdmUgYnJva2VuIElOUVVJUlkgZGF0YSkuCisJICoKKwkgKiBOT1RFOiBUaGlzIG1lYW5zIC9kZXYvc2cgcHJvZ3JhbXMgKGFsYSBjZHJlY29yZCkgd2lsbCBnZXQgdGhlCisJICogYWN0dWFsIGluZm9ybWF0aW9uLiAgVGhpcyBzZWVtcyB0byBiZSB0aGUgcHJlZmVyZW5jZSBmb3IKKwkgKiBwcm9ncmFtcyBsaWtlIHRoYXQuCisJICoKKwkgKiBOT1RFOiBUaGlzIGFsc28gbWVhbnMgdGhhdCAvcHJvYy9zY3NpL3Njc2kgYW5kIHN5c2ZzIG1heSByZXBvcnQKKwkgKiB0aGUgYWN0dWFsIHZhbHVlIG9yIHRoZSBtb2RpZmllZCBvbmUsIGRlcGVuZGluZyBvbiB3aGVyZSB0aGUKKwkgKiBkYXRhIGNvbWVzIGZyb20uCisJICovCisJaWYgKHNkZXYtPnNjc2lfbGV2ZWwgPCBTQ1NJXzIpCisJCXNkZXYtPnNjc2lfbGV2ZWwgPSBTQ1NJXzI7CisKKwkvKiBBY2NvcmRpbmcgdG8gdGhlIHRlY2huaWNhbCBzdXBwb3J0IHBlb3BsZSBhdCBHZW5lc3lzIExvZ2ljLAorCSAqIGRldmljZXMgdXNpbmcgdGhlaXIgY2hpcHMgaGF2ZSBwcm9ibGVtcyB0cmFuc2ZlcnJpbmcgbW9yZSB0aGFuCisJICogMzIgS0IgYXQgYSB0aW1lLiAgSW4gcHJhY3RpY2UgcGVvcGxlIGhhdmUgZm91bmQgdGhhdCA2NCBLQgorCSAqIHdvcmtzIG9rYXkgYW5kIHRoYXQncyB3aGF0IFdpbmRvd3MgZG9lcy4gIEJ1dCB3ZSdsbCBiZQorCSAqIGNvbnNlcnZhdGl2ZTsgcGVvcGxlIGNhbiBhbHdheXMgdXNlIHRoZSBzeXNmcyBpbnRlcmZhY2UgdG8KKwkgKiBpbmNyZWFzZSBtYXhfc2VjdG9ycy4gKi8KKwlpZiAobGUxNl90b19jcHUodXMtPnB1c2JfZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBVU0JfVkVORE9SX0lEX0dFTkVTWVMgJiYKKwkJCXNkZXYtPnJlcXVlc3RfcXVldWUtPm1heF9zZWN0b3JzID4gNjQpCisJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCA2NCk7CisKKwkvKiBXZSBjYW4ndCBwdXQgdGhlc2Ugc2V0dGluZ3MgaW4gc2xhdmVfYWxsb2MoKSBiZWNhdXNlIHRoYXQgZ2V0cworCSAqIGNhbGxlZCBiZWZvcmUgdGhlIGRldmljZSB0eXBlIGlzIGtub3duLiAgQ29uc2VxdWVudGx5IHRoZXNlCisJICogc2V0dGluZ3MgY2FuJ3QgYmUgb3ZlcnJpZGRlbiB2aWEgdGhlIHNjc2kgZGV2aW5mbyBtZWNoYW5pc20uICovCisJaWYgKHNkZXYtPnR5cGUgPT0gVFlQRV9ESVNLKSB7CisKKwkJLyogRGlzay10eXBlIGRldmljZXMgdXNlIE1PREUgU0VOU0UoNikgaWYgdGhlIHByb3RvY29sCisJCSAqIChTdWJDbGFzcykgaXMgVHJhbnNwYXJlbnQgU0NTSSwgb3RoZXJ3aXNlIHRoZXkgdXNlCisJCSAqIE1PREUgU0VOU0UoMTApLiAqLworCQlpZiAodXMtPnN1YmNsYXNzICE9IFVTX1NDX1NDU0kpCisJCQlzZGV2LT51c2VfMTBfZm9yX21zID0gMTsKKworCQkvKiBNYW55IGRpc2tzIG9ubHkgYWNjZXB0IE1PREUgU0VOU0UgdHJhbnNmZXIgbGVuZ3RocyBvZgorCQkgKiAxOTIgYnl0ZXMgKHRoYXQncyB3aGF0IFdpbmRvd3MgdXNlcykuICovCisJCXNkZXYtPnVzZV8xOTJfYnl0ZXNfZm9yXzNmID0gMTsKKworCQkvKiBTb21lIGRldmljZXMgZG9uJ3QgbGlrZSBNT0RFIFNFTlNFIHdpdGggcGFnZT0weDNmLAorCQkgKiB3aGljaCBpcyB0aGUgY29tbWFuZCB1c2VkIGZvciBjaGVja2luZyBpZiBhIGRldmljZQorCQkgKiBpcyB3cml0ZS1wcm90ZWN0ZWQuICBOb3cgdGhhdCB3ZSB0ZWxsIHRoZSBzZCBkcml2ZXIKKwkJICogdG8gZG8gYSAxOTItYnl0ZSB0cmFuc2ZlciB3aXRoIHRoaXMgY29tbWFuZCB0aGUKKwkJICogbWFqb3JpdHkgb2YgZGV2aWNlcyB3b3JrIGZpbmUsIGJ1dCBhIGZldyBzdGlsbCBjYW4ndAorCQkgKiBoYW5kbGUgaXQuICBUaGUgc2QgZHJpdmVyIHdpbGwgc2ltcGx5IGFzc3VtZSB0aG9zZQorCQkgKiBkZXZpY2VzIGFyZSB3cml0ZS1lbmFibGVkLiAqLworCQlpZiAodXMtPmZsYWdzICYgVVNfRkxfTk9fV1BfREVURUNUKQorCQkJc2Rldi0+c2tpcF9tc19wYWdlXzNmID0gMTsKKworCQkvKiBBIG51bWJlciBvZiBkZXZpY2VzIGhhdmUgcHJvYmxlbXMgd2l0aCBNT0RFIFNFTlNFIGZvcgorCQkgKiBwYWdlIHgwOCwgc28gd2Ugd2lsbCBza2lwIGl0LiAqLworCQlzZGV2LT5za2lwX21zX3BhZ2VfOCA9IDE7CisKKwkJLyogU29tZSBkaXNrcyByZXR1cm4gdGhlIHRvdGFsIG51bWJlciBvZiBibG9ja3MgaW4gcmVzcG9uc2UKKwkJICogdG8gUkVBRCBDQVBBQ0lUWSByYXRoZXIgdGhhbiB0aGUgaGlnaGVzdCBibG9jayBudW1iZXIuCisJCSAqIElmIHRoaXMgZGV2aWNlIG1ha2VzIHRoYXQgbWlzdGFrZSwgdGVsbCB0aGUgc2QgZHJpdmVyLiAqLworCQlpZiAodXMtPmZsYWdzICYgVVNfRkxfRklYX0NBUEFDSVRZKQorCQkJc2Rldi0+Zml4X2NhcGFjaXR5ID0gMTsKKwl9IGVsc2UgeworCisJCS8qIE5vbi1kaXNrLXR5cGUgZGV2aWNlcyBkb24ndCBuZWVkIHRvIGJsYWNrbGlzdCBhbnkgcGFnZXMKKwkJICogb3IgdG8gZm9yY2UgMTkyLWJ5dGUgdHJhbnNmZXIgbGVuZ3RocyBmb3IgTU9ERSBTRU5TRS4KKwkJICogQnV0IHRoZXkgZG8gbmVlZCB0byB1c2UgTU9ERSBTRU5TRSgxMCkuICovCisJCXNkZXYtPnVzZV8xMF9mb3JfbXMgPSAxOworCX0KKworCS8qIFNvbWUgZGV2aWNlcyBjaG9rZSB3aGVuIHRoZXkgcmVjZWl2ZSBhIFBSRVZFTlQtQUxMT1cgTUVESVVNCisJICogUkVNT1ZBTCBjb21tYW5kLCBzbyBzdXBwcmVzcyB0aG9zZSBjb21tYW5kcy4gKi8KKwlpZiAodXMtPmZsYWdzICYgVVNfRkxfTk9UX0xPQ0tBQkxFKQorCQlzZGV2LT5sb2NrYWJsZSA9IDA7CisKKwkvKiB0aGlzIGlzIHRvIHNhdGlzZnkgdGhlIGNvbXBpbGVyLCB0aG8gSSBkb24ndCB0aGluayB0aGUgCisJICogcmV0dXJuIGNvZGUgaXMgZXZlciBjaGVja2VkIGFueXdoZXJlLiAqLworCXJldHVybiAwOworfQorCisvKiBxdWV1ZSBhIGNvbW1hbmQgKi8KKy8qIFRoaXMgaXMgYWx3YXlzIGNhbGxlZCB3aXRoIHNjc2lfbG9jayhob3N0KSBoZWxkICovCitzdGF0aWMgaW50IHF1ZXVlY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsCisJCQl2b2lkICgqZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKSkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSBob3N0X3RvX3VzKHNyYi0+ZGV2aWNlLT5ob3N0KTsKKworCVVTX0RFQlVHUCgiJXMgY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCisJLyogY2hlY2sgZm9yIHN0YXRlLXRyYW5zaXRpb24gZXJyb3JzICovCisJaWYgKHVzLT5zcmIgIT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgVVNCX1NUT1JBR0UgIkVycm9yIGluICVzOiB1cy0+c3JiID0gJXBcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHVzLT5zcmIpOworCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKwl9CisKKwkvKiBmYWlsIHRoZSBjb21tYW5kIGlmIHdlIGFyZSBkaXNjb25uZWN0aW5nICovCisJaWYgKHRlc3RfYml0KFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcsICZ1cy0+ZmxhZ3MpKSB7CisJCVVTX0RFQlVHUCgiRmFpbCBjb21tYW5kIGR1cmluZyBkaXNjb25uZWN0XG4iKTsKKwkJc3JiLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKKwkJZG9uZShzcmIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBlbnF1ZXVlIHRoZSBjb21tYW5kIGFuZCB3YWtlIHVwIHRoZSBjb250cm9sIHRocmVhZCAqLworCXNyYi0+c2NzaV9kb25lID0gZG9uZTsKKwl1cy0+c3JiID0gc3JiOworCXVwKCYodXMtPnNlbWEpKTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVycm9yIGhhbmRsaW5nIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBDb21tYW5kIHRpbWVvdXQgYW5kIGFib3J0ICovCisvKiBUaGlzIGlzIGFsd2F5cyBjYWxsZWQgd2l0aCBzY3NpX2xvY2soaG9zdCkgaGVsZCAqLworc3RhdGljIGludCBjb21tYW5kX2Fib3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYikKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSBob3N0X3RvX3VzKHNyYi0+ZGV2aWNlLT5ob3N0KTsKKworCVVTX0RFQlVHUCgiJXMgY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCisJLyogSXMgdGhpcyBjb21tYW5kIHN0aWxsIGFjdGl2ZT8gKi8KKwlpZiAodXMtPnNyYiAhPSBzcmIpIHsKKwkJVVNfREVCVUdQICgiLS0gbm90aGluZyB0byBhYm9ydFxuIik7CisJCXJldHVybiBGQUlMRUQ7CisJfQorCisJLyogU2V0IHRoZSBUSU1FRF9PVVQgYml0LiAgQWxzbyBzZXQgdGhlIEFCT1JUSU5HIGJpdCwgYnV0IG9ubHkgaWYKKwkgKiBhIGRldmljZSByZXNldCBpc24ndCBhbHJlYWR5IGluIHByb2dyZXNzICh0byBhdm9pZCBpbnRlcmZlcmluZworCSAqIHdpdGggdGhlIHJlc2V0KS4gIFRvIHByZXZlbnQgcmFjZXMgd2l0aCBhdXRvLXJlc2V0LCB3ZSBtdXN0CisJICogc3RvcCBhbnkgb25nb2luZyBVU0IgdHJhbnNmZXJzIHdoaWxlIHN0aWxsIGhvbGRpbmcgdGhlIGhvc3QKKwkgKiBsb2NrLiAqLworCXNldF9iaXQoVVNfRkxJRFhfVElNRURfT1VULCAmdXMtPmZsYWdzKTsKKwlpZiAoIXRlc3RfYml0KFVTX0ZMSURYX1JFU0VUVElORywgJnVzLT5mbGFncykpIHsKKwkJc2V0X2JpdChVU19GTElEWF9BQk9SVElORywgJnVzLT5mbGFncyk7CisJCXVzYl9zdG9yX3N0b3BfdHJhbnNwb3J0KHVzKTsKKwl9CisJc2NzaV91bmxvY2sodXNfdG9faG9zdCh1cykpOworCisJLyogV2FpdCBmb3IgdGhlIGFib3J0ZWQgY29tbWFuZCB0byBmaW5pc2ggKi8KKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ1cy0+bm90aWZ5KTsKKworCS8qIFJlYWNxdWlyZSB0aGUgbG9jayBhbmQgYWxsb3cgVVNCIHRyYW5zZmVycyB0byByZXN1bWUgKi8KKwlzY3NpX2xvY2sodXNfdG9faG9zdCh1cykpOworCWNsZWFyX2JpdChVU19GTElEWF9BQk9SVElORywgJnVzLT5mbGFncyk7CisJY2xlYXJfYml0KFVTX0ZMSURYX1RJTUVEX09VVCwgJnVzLT5mbGFncyk7CisJcmV0dXJuIFNVQ0NFU1M7Cit9CisKKy8qIFRoaXMgaW52b2tlcyB0aGUgdHJhbnNwb3J0IHJlc2V0IG1lY2hhbmlzbSB0byByZXNldCB0aGUgc3RhdGUgb2YgdGhlCisgKiBkZXZpY2UgKi8KKy8qIFRoaXMgaXMgYWx3YXlzIGNhbGxlZCB3aXRoIHNjc2lfbG9jayhob3N0KSBoZWxkICovCitzdGF0aWMgaW50IGRldmljZV9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzID0gaG9zdF90b191cyhzcmItPmRldmljZS0+aG9zdCk7CisJaW50IHJlc3VsdDsKKworCVVTX0RFQlVHUCgiJXMgY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCisJc2NzaV91bmxvY2sodXNfdG9faG9zdCh1cykpOworCisJLyogbG9jayB0aGUgZGV2aWNlIHBvaW50ZXJzIGFuZCBkbyB0aGUgcmVzZXQgKi8KKwlkb3duKCYodXMtPmRldl9zZW1hcGhvcmUpKTsKKwlpZiAodGVzdF9iaXQoVVNfRkxJRFhfRElTQ09OTkVDVElORywgJnVzLT5mbGFncykpIHsKKwkJcmVzdWx0ID0gRkFJTEVEOworCQlVU19ERUJVR1AoIk5vIHJlc2V0IGR1cmluZyBkaXNjb25uZWN0XG4iKTsKKwl9IGVsc2UKKwkJcmVzdWx0ID0gdXMtPnRyYW5zcG9ydF9yZXNldCh1cyk7CisJdXAoJih1cy0+ZGV2X3NlbWFwaG9yZSkpOworCisJLyogbG9jayB0aGUgaG9zdCBmb3IgdGhlIHJldHVybiAqLworCXNjc2lfbG9jayh1c190b19ob3N0KHVzKSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogVGhpcyByZXNldHMgdGhlIGRldmljZSdzIFVTQiBwb3J0LiAqLworLyogSXQgcmVmdXNlcyB0byB3b3JrIGlmIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSBpbnRlcmZhY2UgaW4KKyAqIHRoZSBkZXZpY2UsIHNvIHRoYXQgb3RoZXIgdXNlcnMgYXJlIG5vdCBhZmZlY3RlZC4gKi8KKy8qIFRoaXMgaXMgYWx3YXlzIGNhbGxlZCB3aXRoIHNjc2lfbG9jayhob3N0KSBoZWxkICovCitzdGF0aWMgaW50IGJ1c19yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzID0gaG9zdF90b191cyhzcmItPmRldmljZS0+aG9zdCk7CisJaW50IHJlc3VsdCwgcmM7CisKKwlVU19ERUJVR1AoIiVzIGNhbGxlZFxuIiwgX19GVU5DVElPTl9fKTsKKworCXNjc2lfdW5sb2NrKHVzX3RvX2hvc3QodXMpKTsKKworCS8qIFRoZSBVU0Igc3Vic3lzdGVtIGRvZXNuJ3QgaGFuZGxlIHN5bmNocm9uaXNhdGlvbiBiZXR3ZWVuCisJICogYSBkZXZpY2UncyBzZXZlcmFsIGRyaXZlcnMuIFRoZXJlZm9yZSB3ZSByZXNldCBvbmx5IGRldmljZXMKKwkgKiB3aXRoIGp1c3Qgb25lIGludGVyZmFjZSwgd2hpY2ggd2Ugb2YgY291cnNlIG93bi4gKi8KKworCWRvd24oJih1cy0+ZGV2X3NlbWFwaG9yZSkpOworCWlmICh0ZXN0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmZsYWdzKSkgeworCQlyZXN1bHQgPSAtRUlPOworCQlVU19ERUJVR1AoIk5vIHJlc2V0IGR1cmluZyBkaXNjb25uZWN0XG4iKTsKKwl9IGVsc2UgaWYgKHVzLT5wdXNiX2Rldi0+YWN0Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzICE9IDEpIHsKKwkJcmVzdWx0ID0gLUVCVVNZOworCQlVU19ERUJVR1AoIlJlZnVzaW5nIHRvIHJlc2V0IGEgbXVsdGktaW50ZXJmYWNlIGRldmljZVxuIik7CisJfSBlbHNlIHsKKwkJcmMgPSB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KHVzLT5wdXNiX2RldiwgdXMtPnB1c2JfaW50Zik7CisJCWlmIChyYyA8IDApIHsKKwkJCVVTX0RFQlVHUCgidW5hYmxlIHRvIGxvY2sgZGV2aWNlIGZvciByZXNldDogJWRcbiIsIHJjKTsKKwkJCXJlc3VsdCA9IHJjOworCQl9IGVsc2UgeworCQkJcmVzdWx0ID0gdXNiX3Jlc2V0X2RldmljZSh1cy0+cHVzYl9kZXYpOworCQkJaWYgKHJjKQorCQkJCXVzYl91bmxvY2tfZGV2aWNlKHVzLT5wdXNiX2Rldik7CisJCQlVU19ERUJVR1AoInVzYl9yZXNldF9kZXZpY2UgcmV0dXJucyAlZFxuIiwgcmVzdWx0KTsKKwkJfQorCX0KKwl1cCgmKHVzLT5kZXZfc2VtYXBob3JlKSk7CisKKwkvKiBsb2NrIHRoZSBob3N0IGZvciB0aGUgcmV0dXJuICovCisJc2NzaV9sb2NrKHVzX3RvX2hvc3QodXMpKTsKKwlyZXR1cm4gcmVzdWx0IDwgMCA/IEZBSUxFRCA6IFNVQ0NFU1M7Cit9CisKKy8qIFJlcG9ydCBhIGRyaXZlci1pbml0aWF0ZWQgZGV2aWNlIHJlc2V0IHRvIHRoZSBTQ1NJIGxheWVyLgorICogQ2FsbGluZyB0aGlzIGZvciBhIFNDU0ktaW5pdGlhdGVkIHJlc2V0IGlzIHVubmVjZXNzYXJ5IGJ1dCBoYXJtbGVzcy4KKyAqIFRoZSBjYWxsZXIgbXVzdCBvd24gdGhlIFNDU0kgaG9zdCBsb2NrLiAqLwordm9pZCB1c2Jfc3Rvcl9yZXBvcnRfZGV2aWNlX3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gdXNfdG9faG9zdCh1cyk7CisKKwlzY3NpX3JlcG9ydF9kZXZpY2VfcmVzZXQoaG9zdCwgMCwgMCk7CisJaWYgKHVzLT5mbGFncyAmIFVTX0ZMX1NDTV9NVUxUX1RBUkcpIHsKKwkJZm9yIChpID0gMTsgaSA8IGhvc3QtPm1heF9pZDsgKytpKQorCQkJc2NzaV9yZXBvcnRfZGV2aWNlX3Jlc2V0KGhvc3QsIDAsIGkpOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAvcHJvYy9zY3NpLyBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogd2UgdXNlIHRoaXMgbWFjcm8gdG8gaGVscCB1cyB3cml0ZSBpbnRvIHRoZSBidWZmZXIgKi8KKyN1bmRlZiBTUFJJTlRGCisjZGVmaW5lIFNQUklOVEYoYXJncy4uLikgXAorCWRvIHsgaWYgKHBvcyA8IGJ1ZmZlcitsZW5ndGgpIHBvcyArPSBzcHJpbnRmKHBvcywgIyMgYXJncyk7IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbnQgcHJvY19pbmZvIChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBjaGFyICpidWZmZXIsCisJCWNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgbGVuZ3RoLCBpbnQgaW5vdXQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzID0gaG9zdF90b191cyhob3N0KTsKKwljaGFyICpwb3MgPSBidWZmZXI7CisJY29uc3QgY2hhciAqc3RyaW5nOworCisJLyogaWYgc29tZW9uZSBpcyBzZW5kaW5nIHVzIGRhdGEsIGp1c3QgdGhyb3cgaXQgYXdheSAqLworCWlmIChpbm91dCkKKwkJcmV0dXJuIGxlbmd0aDsKKworCS8qIHByaW50IHRoZSBjb250cm9sbGVyIG5hbWUgKi8KKwlTUFJJTlRGKCIgICBIb3N0IHNjc2klZDogdXNiLXN0b3JhZ2VcbiIsIGhvc3QtPmhvc3Rfbm8pOworCisJLyogcHJpbnQgcHJvZHVjdCwgdmVuZG9yLCBhbmQgc2VyaWFsIG51bWJlciBzdHJpbmdzICovCisJaWYgKHVzLT5wdXNiX2Rldi0+bWFudWZhY3R1cmVyKQorCQlzdHJpbmcgPSB1cy0+cHVzYl9kZXYtPm1hbnVmYWN0dXJlcjsKKwllbHNlIGlmICh1cy0+dW51c3VhbF9kZXYtPnZlbmRvck5hbWUpCisJCXN0cmluZyA9IHVzLT51bnVzdWFsX2Rldi0+dmVuZG9yTmFtZTsKKwllbHNlCisJCXN0cmluZyA9ICJVbmtub3duIjsKKwlTUFJJTlRGKCIgICAgICAgVmVuZG9yOiAlc1xuIiwgc3RyaW5nKTsKKwlpZiAodXMtPnB1c2JfZGV2LT5wcm9kdWN0KQorCQlzdHJpbmcgPSB1cy0+cHVzYl9kZXYtPnByb2R1Y3Q7CisJZWxzZSBpZiAodXMtPnVudXN1YWxfZGV2LT5wcm9kdWN0TmFtZSkKKwkJc3RyaW5nID0gdXMtPnVudXN1YWxfZGV2LT5wcm9kdWN0TmFtZTsKKwllbHNlCisJCXN0cmluZyA9ICJVbmtub3duIjsKKwlTUFJJTlRGKCIgICAgICBQcm9kdWN0OiAlc1xuIiwgc3RyaW5nKTsKKwlpZiAodXMtPnB1c2JfZGV2LT5zZXJpYWwpCisJCXN0cmluZyA9IHVzLT5wdXNiX2Rldi0+c2VyaWFsOworCWVsc2UKKwkJc3RyaW5nID0gIk5vbmUiOworCVNQUklOVEYoIlNlcmlhbCBOdW1iZXI6ICVzXG4iLCBzdHJpbmcpOworCisJLyogc2hvdyB0aGUgcHJvdG9jb2wgYW5kIHRyYW5zcG9ydCAqLworCVNQUklOVEYoIiAgICAgUHJvdG9jb2w6ICVzXG4iLCB1cy0+cHJvdG9jb2xfbmFtZSk7CisJU1BSSU5URigiICAgIFRyYW5zcG9ydDogJXNcbiIsIHVzLT50cmFuc3BvcnRfbmFtZSk7CisKKwkvKiBzaG93IHRoZSBkZXZpY2UgZmxhZ3MgKi8KKwlpZiAocG9zIDwgYnVmZmVyICsgbGVuZ3RoKSB7CisJCXBvcyArPSBzcHJpbnRmKHBvcywgIiAgICAgICBRdWlya3M6Iik7CisKKyNkZWZpbmUgVVNfRkxBRyhuYW1lLCB2YWx1ZSkgXAorCWlmICh1cy0+ZmxhZ3MgJiB2YWx1ZSkgcG9zICs9IHNwcmludGYocG9zLCAiICIgI25hbWUpOworVVNfRE9fQUxMX0ZMQUdTCisjdW5kZWYgVVNfRkxBRworCisJCSoocG9zKyspID0gJ1xuJzsKKwl9CisKKwkvKgorCSAqIENhbGN1bGF0ZSBzdGFydCBvZiBuZXh0IGJ1ZmZlciwgYW5kIHJldHVybiB2YWx1ZS4KKwkgKi8KKwkqc3RhcnQgPSBidWZmZXIgKyBvZmZzZXQ7CisKKwlpZiAoKHBvcyAtIGJ1ZmZlcikgPCBvZmZzZXQpCisJCXJldHVybiAoMCk7CisJZWxzZSBpZiAoKHBvcyAtIGJ1ZmZlciAtIG9mZnNldCkgPCBsZW5ndGgpCisJCXJldHVybiAocG9zIC0gYnVmZmVyIC0gb2Zmc2V0KTsKKwllbHNlCisJCXJldHVybiAobGVuZ3RoKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTeXNmcyBpbnRlcmZhY2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogT3V0cHV0IHJvdXRpbmUgZm9yIHRoZSBzeXNmcyBtYXhfc2VjdG9ycyBmaWxlICovCitzdGF0aWMgc3NpemVfdCBzaG93X21heF9zZWN0b3JzKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgc2Rldi0+cmVxdWVzdF9xdWV1ZS0+bWF4X3NlY3RvcnMpOworfQorCisvKiBJbnB1dCByb3V0aW5lIGZvciB0aGUgc3lzZnMgbWF4X3NlY3RvcnMgZmlsZSAqLworc3RhdGljIHNzaXplX3Qgc3RvcmVfbWF4X3NlY3RvcnMoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsCisJCXNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShkZXYpOworCXVuc2lnbmVkIHNob3J0IG1zOworCisJaWYgKHNzY2FuZihidWYsICIlaHUiLCAmbXMpID4gMCAmJiBtcyA8PSBTQ1NJX0RFRkFVTFRfTUFYX1NFQ1RPUlMpIHsKKwkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsIG1zKTsKKwkJcmV0dXJuIHN0cmxlbihidWYpOworCX0KKwlyZXR1cm4gLUVJTlZBTDsJCit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihtYXhfc2VjdG9ycywgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfbWF4X3NlY3RvcnMsCisJCXN0b3JlX21heF9zZWN0b3JzKTsKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpzeXNmc19kZXZpY2VfYXR0cl9saXN0W10gPSB7CisJCSZkZXZfYXR0cl9tYXhfc2VjdG9ycywKKwkJTlVMTCwKKwkJfTsKKworLyoKKyAqIHRoaXMgZGVmaW5lcyBvdXIgaG9zdCB0ZW1wbGF0ZSwgd2l0aCB3aGljaCB3ZSdsbCBhbGxvY2F0ZSBob3N0cworICovCisKK3N0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgdXNiX3N0b3JfaG9zdF90ZW1wbGF0ZSA9IHsKKwkvKiBiYXNpYyB1c2VybGFuZCBpbnRlcmZhY2Ugc3R1ZmYgKi8KKwkubmFtZSA9CQkJCSJ1c2Itc3RvcmFnZSIsCisJLnByb2NfbmFtZSA9CQkJInVzYi1zdG9yYWdlIiwKKwkucHJvY19pbmZvID0JCQlwcm9jX2luZm8sCisJLmluZm8gPQkJCQlob3N0X2luZm8sCisKKwkvKiBjb21tYW5kIGludGVyZmFjZSAtLSBxdWV1ZWQgb25seSAqLworCS5xdWV1ZWNvbW1hbmQgPQkJCXF1ZXVlY29tbWFuZCwKKworCS8qIGVycm9yIGFuZCBhYm9ydCBoYW5kbGVycyAqLworCS5laF9hYm9ydF9oYW5kbGVyID0JCWNvbW1hbmRfYWJvcnQsCisJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyID0JZGV2aWNlX3Jlc2V0LAorCS5laF9idXNfcmVzZXRfaGFuZGxlciA9CQlidXNfcmVzZXQsCisKKwkvKiBxdWV1ZSBjb21tYW5kcyBvbmx5LCBvbmx5IG9uZSBjb21tYW5kIHBlciBMVU4gKi8KKwkuY2FuX3F1ZXVlID0JCQkxLAorCS5jbWRfcGVyX2x1biA9CQkJMSwKKworCS8qIHVua25vd24gaW5pdGlhdG9yIGlkICovCisJLnRoaXNfaWQgPQkJCS0xLAorCisJLnNsYXZlX2FsbG9jID0JCQlzbGF2ZV9hbGxvYywKKwkuc2xhdmVfY29uZmlndXJlID0JCXNsYXZlX2NvbmZpZ3VyZSwKKworCS8qIGxvdHMgb2Ygc2cgc2VnbWVudHMgY2FuIGJlIGhhbmRsZWQgKi8KKwkuc2dfdGFibGVzaXplID0JCQlTR19BTEwsCisKKwkvKiBsaW1pdCB0aGUgdG90YWwgc2l6ZSBvZiBhIHRyYW5zZmVyIHRvIDEyMCBLQiAqLworCS5tYXhfc2VjdG9ycyA9ICAgICAgICAgICAgICAgICAgMjQwLAorCisJLyogbWVyZ2UgY29tbWFuZHMuLi4gdGhpcyBzZWVtcyB0byBoZWxwIHBlcmZvcm1hbmNlLCBidXQKKwkgKiBwZXJpb2RpY2FsbHkgc29tZW9uZSBzaG91bGQgdGVzdCB0byBzZWUgd2hpY2ggc2V0dGluZyBpcyBtb3JlCisJICogb3B0aW1hbC4KKwkgKi8KKwkudXNlX2NsdXN0ZXJpbmcgPQkJMSwKKworCS8qIGVtdWxhdGVkIEhCQSAqLworCS5lbXVsYXRlZCA9CQkJMSwKKworCS8qIHdlIGRvIG91ciBvd24gZGVsYXkgYWZ0ZXIgYSBkZXZpY2Ugb3IgYnVzIHJlc2V0ICovCisJLnNraXBfc2V0dGxlX2RlbGF5ID0JCTEsCisKKwkvKiBzeXNmcyBkZXZpY2UgYXR0cmlidXRlcyAqLworCS5zZGV2X2F0dHJzID0JCQlzeXNmc19kZXZpY2VfYXR0cl9saXN0LAorCisJLyogbW9kdWxlIG1hbmFnZW1lbnQgKi8KKwkubW9kdWxlID0JCQlUSElTX01PRFVMRQorfTsKKworLyogVG8gUmVwb3J0ICJJbGxlZ2FsIFJlcXVlc3Q6IEludmFsaWQgRmllbGQgaW4gQ0RCICovCit1bnNpZ25lZCBjaGFyIHVzYl9zdG9yX3NlbnNlX2ludmFsaWRDREJbMThdID0geworCVswXQk9IDB4NzAsCQkJICAgIC8qIGN1cnJlbnQgZXJyb3IgKi8KKwlbMl0JPSBJTExFR0FMX1JFUVVFU1QsCSAgICAvKiBJbGxlZ2FsIFJlcXVlc3QgPSAweDA1ICovCisJWzddCT0gMHgwYSwJCQkgICAgLyogYWRkaXRpb25hbCBsZW5ndGggKi8KKwlbMTJdCT0gMHgyNAkJCSAgICAvKiBJbnZhbGlkIEZpZWxkIGluIENEQiAqLworfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYTQ5YWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmgKQEAgLTAsMCArMSw0OSBAQAorLyogRHJpdmVyIGZvciBVU0IgTWFzcyBTdG9yYWdlIGNvbXBsaWFudCBkZXZpY2VzCisgKiBTQ1NJIENvbm5lY3RpbmcgR2x1ZSBIZWFkZXIgRmlsZQorICoKKyAqICRJZDogc2NzaWdsdWUuaCx2IDEuNCAyMDAwLzA4LzI1IDAwOjEzOjUxIG1kaGFybSBFeHAgJAorICoKKyAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgorICogICAoYykgMTk5OSwgMjAwMCBNYXR0aGV3IERoYXJtIChtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldCkKKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgJ1VTQiBNYXNzIFN0b3JhZ2UgQ2xhc3MnIGRvY3VtZW50LiBUaGlzCisgKiBkZXNjcmliZXMgaW4gZGV0YWlsIHRoZSBwcm90b2NvbCB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggc3VjaAorICogZGV2aWNlcy4gIENsZWFybHksIHRoZSBkZXNpZ25lcnMgaGFkIFNDU0kgYW5kIEFUQVBJIGNvbW1hbmRzIGluCisgKiBtaW5kIHdoZW4gdGhleSBjcmVhdGVkIHRoaXMgZG9jdW1lbnQuICBUaGUgY29tbWFuZHMgYXJlIGFsbCB2ZXJ5CisgKiBzaW1pbGFyIHRvIGNvbW1hbmRzIGluIHRoZSBTQ1NJLUlJIGFuZCBBVEFQSSBzcGVjaWZpY2F0aW9ucy4KKyAqCisgKiBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IGluIGEgbnVtYmVyIG9mIGNhc2VzIHRoaXMgY2xhc3MKKyAqIGV4aGliaXRzIGNsYXNzLXNwZWNpZmljIGV4ZW1wdGlvbnMgZnJvbSB0aGUgVVNCIHNwZWNpZmljYXRpb24uCisgKiBOb3RhYmx5IHRoZSB1c2FnZSBvZiBOQUssIFNUQUxMIGFuZCBBQ0sgZGlmZmVycyBmcm9tIHRoZSBub3JtLCBpbgorICogdGhhdCB0aGV5IGFyZSB1c2VkIHRvIGNvbW11bmljYXRlIHdhaXQsIGZhaWxlZCBhbmQgT0sgb24gY29tbWFuZHMuCisgKgorICogQWxzbywgZm9yIGNlcnRhaW4gZGV2aWNlcywgdGhlIGludGVycnVwdCBlbmRwb2ludCBpcyB1c2VkIHRvIGNvbnZleQorICogc3RhdHVzIG9mIGEgY29tbWFuZC4KKyAqCisgKiBQbGVhc2Ugc2VlIGh0dHA6Ly93d3cub25lLWV5ZWQtYWxpZW4ubmV0L35tZGhhcm0vbGludXgtdXNiIGZvciBtb3JlCisgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRyaXZlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9TQ1NJR0xVRV9IXworI2RlZmluZSBfU0NTSUdMVUVfSF8KKworZXh0ZXJuIHZvaWQgdXNiX3N0b3JfcmVwb3J0X2RldmljZV9yZXNldChzdHJ1Y3QgdXNfZGF0YSAqdXMpOworCitleHRlcm4gdW5zaWduZWQgY2hhciB1c2Jfc3Rvcl9zZW5zZV9pbnZhbGlkQ0RCWzE4XTsKK2V4dGVybiBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHVzYl9zdG9yX2hvc3RfdGVtcGxhdGU7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjA5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVhMmY1YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjA5LmMKQEAgLTAsMCArMSwxNjA4IEBACisvKiBEcml2ZXIgZm9yIFNhbkRpc2sgU0REUi0wOSBTbWFydE1lZGlhIHJlYWRlcgorICoKKyAqICRJZDogc2RkcjA5LmMsdiAxLjI0IDIwMDIvMDQvMjIgMDM6Mzk6NDMgbWRoYXJtIEV4cCAkCisgKiAgIChjKSAyMDAwLCAyMDAxIFJvYmVydCBCYXJ1Y2ggKGF1dG9waGlsZUBzdGFyYmFuZC5uZXQpCisgKiAgIChjKSAyMDAyIEFuZHJpZXMgQnJvdXdlciAoYWViQGN3aS5ubCkKKyAqIERldmVsb3BlZCB3aXRoIHRoZSBhc3Npc3RhbmNlIG9mOgorICogICAoYykgMjAwMiBBbGFuIFN0ZXJuIDxzdGVybkByb3dsYW5kLm9yZz4KKyAqCisgKiBUaGUgU2FuRGlzayBTRERSLTA5IFNtYXJ0TWVkaWEgcmVhZGVyIHVzZXMgdGhlIFNodXR0bGUgRVVTQi0wMSBjaGlwLgorICogVGhpcyBjaGlwIGlzIGEgcHJvZ3JhbW1hYmxlIFVTQiBjb250cm9sbGVyLiBJbiB0aGUgU0REUi0wOSwgaXQgaGFzCisgKiBiZWVuIHByb2dyYW1tZWQgdG8gb2JleSBhIGNlcnRhaW4gbGltaXRlZCBzZXQgb2YgU0NTSSBjb21tYW5kcy4KKyAqIFRoaXMgZHJpdmVyIHRyYW5zbGF0ZXMgdGhlICJyZWFsIiBTQ1NJIGNvbW1hbmRzIHRvIHRoZSBTRERSLTA5IFNDU0kKKyAqIGNvbW1hbmRzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qCisgKiBLbm93biB2ZW5kb3IgY29tbWFuZHM6IDEyIGJ5dGVzLCBmaXJzdCBieXRlIGlzIG9wY29kZQorICoKKyAqIEU3OiByZWFkIHNjYXR0ZXIgZ2F0aGVyCisgKiBFODogcmVhZAorICogRTk6IHdyaXRlCisgKiBFQTogZXJhc2UKKyAqIEVCOiByZXNldAorICogRUM6IHJlYWQgc3RhdHVzCisgKiBFRDogcmVhZCBJRAorICogRUU6IHdyaXRlIENJUyAoPykKKyAqIEVGOiBjb21wdXRlIGNoZWNrc3VtICg/KQorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKworI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInByb3RvY29sLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJzZGRyMDkuaCIKKworCisjZGVmaW5lIHNob3J0X3BhY2sobHNiLG1zYikgKCAoKHUxNikobHNiKSkgfCAoICgodTE2KShtc2IpKTw8OCApICkKKyNkZWZpbmUgTFNCX29mKHMpICgocykmMHhGRikKKyNkZWZpbmUgTVNCX29mKHMpICgocyk+PjgpCisKKy8qICNkZWZpbmUgVVNfREVCVUdQIHByaW50ayAqLworCisvKgorICogRmlyc3Qgc29tZSBzdHVmZiB0aGF0IGRvZXMgbm90IGJlbG9uZyBoZXJlOgorICogZGF0YSBvbiBTbWFydE1lZGlhIGFuZCBvdGhlciBjYXJkcywgY29tcGxldGVseQorICogdW5yZWxhdGVkIHRvIHRoaXMgZHJpdmVyLgorICogU2ltaWxhciBzdHVmZiBvY2N1cnMgaW4gPGxpbnV4L210ZC9uYW5kX2lkcy5oPi4KKyAqLworCitzdHJ1Y3QgbmFuZF9mbGFzaF9kZXYgeworCWludCBtb2RlbF9pZDsKKwlpbnQgY2hpcHNoaWZ0OwkJLyogMTw8Y3MgYnl0ZXMgdG90YWwgY2FwYWNpdHkgKi8KKwljaGFyIHBhZ2VzaGlmdDsJCS8qIDE8PHBzIGJ5dGVzIGluIGEgcGFnZSAqLworCWNoYXIgYmxvY2tzaGlmdDsJLyogMTw8YnMgcGFnZXMgaW4gYW4gZXJhc2UgYmxvY2sgKi8KKwljaGFyIHpvbmVzaGlmdDsJCS8qIDE8PHpzIGJsb2NrcyBpbiBhIHpvbmUgKi8KKwkJCQkvKiAjIG9mIGxvZ2ljYWwgYmxvY2tzIGlzIDEyNS8xMjggb2YgdGhpcyAqLworCWNoYXIgcGFnZWFkcmxlbjsJLyogbGVuZ3RoIG9mIGFuIGFkZHJlc3MgaW4gYnl0ZXMgLSAxICovCit9OworCisvKgorICogTkFORCBGbGFzaCBNYW51ZmFjdHVyZXIgSUQgQ29kZXMKKyAqLworI2RlZmluZSBOQU5EX01GUl9BTUQJCTB4MDEKKyNkZWZpbmUgTkFORF9NRlJfTkFUU0VNSQkweDhmCisjZGVmaW5lIE5BTkRfTUZSX1RPU0hJQkEJMHg5OAorI2RlZmluZSBOQU5EX01GUl9TQU1TVU5HCTB4ZWMKKworc3RhdGljIGlubGluZSBjaGFyICpuYW5kX2ZsYXNoX21hbnVmYWN0dXJlcihpbnQgbWFudWZfaWQpIHsKKwlzd2l0Y2gobWFudWZfaWQpIHsKKwljYXNlIE5BTkRfTUZSX0FNRDoKKwkJcmV0dXJuICJBTUQiOworCWNhc2UgTkFORF9NRlJfTkFUU0VNSToKKwkJcmV0dXJuICJOQVRTRU1JIjsKKwljYXNlIE5BTkRfTUZSX1RPU0hJQkE6CisJCXJldHVybiAiVG9zaGliYSI7CisJY2FzZSBOQU5EX01GUl9TQU1TVU5HOgorCQlyZXR1cm4gIlNhbXN1bmciOworCWRlZmF1bHQ6CisJCXJldHVybiAidW5rbm93biI7CisJfQorfQorCisvKgorICogSXQgbG9va3MgbGlrZSBpdCBpcyB1bm5lY2Vzc2FyeSB0byBhdHRhY2ggbWFudWZhY3R1cmVyIHRvIHRoZQorICogcmVtYWluaW5nIGRhdGE6IFNTRkRDIHByZXNjcmliZXMgbWFudWZhY3R1cmVyLWluZGVwZW5kZW50IGlkIGNvZGVzLgorICoKKyAqIDI1NiBNQiBOQU5EIGZsYXNoIGhhcyBhIDUtYnl0ZSBJRCB3aXRoIDJuZCBieXRlIDB4YWEsIDB4YmEsIDB4Y2Egb3IgMHhkYS4KKyAqLworCitzdGF0aWMgc3RydWN0IG5hbmRfZmxhc2hfZGV2IG5hbmRfZmxhc2hfaWRzW10gPSB7CisJLyogTkFORCBmbGFzaCAqLworCXsgMHg2ZSwgMjAsIDgsIDQsIDgsIDJ9LAkvKiAxIE1CICovCisJeyAweGU4LCAyMCwgOCwgNCwgOCwgMn0sCS8qIDEgTUIgKi8KKwl7IDB4ZWMsIDIwLCA4LCA0LCA4LCAyfSwJLyogMSBNQiAqLworCXsgMHg2NCwgMjEsIDgsIDQsIDksIDJ9LCAJLyogMiBNQiAqLworCXsgMHhlYSwgMjEsIDgsIDQsIDksIDJ9LAkvKiAyIE1CICovCisJeyAweDZiLCAyMiwgOSwgNCwgOSwgMn0sCS8qIDQgTUIgKi8KKwl7IDB4ZTMsIDIyLCA5LCA0LCA5LCAyfSwJLyogNCBNQiAqLworCXsgMHhlNSwgMjIsIDksIDQsIDksIDJ9LAkvKiA0IE1CICovCisJeyAweGU2LCAyMywgOSwgNCwgMTAsIDJ9LAkvKiA4IE1CICovCisJeyAweDczLCAyNCwgOSwgNSwgMTAsIDJ9LAkvKiAxNiBNQiAqLworCXsgMHg3NSwgMjUsIDksIDUsIDEwLCAyfSwJLyogMzIgTUIgKi8KKwl7IDB4NzYsIDI2LCA5LCA1LCAxMCwgM30sCS8qIDY0IE1CICovCisJeyAweDc5LCAyNywgOSwgNSwgMTAsIDN9LAkvKiAxMjggTUIgKi8KKworCS8qIE1BU0sgUk9NICovCisJeyAweDVkLCAyMSwgOSwgNCwgOCwgMn0sCS8qIDIgTUIgKi8KKwl7IDB4ZDUsIDIyLCA5LCA0LCA5LCAyfSwJLyogNCBNQiAqLworCXsgMHhkNiwgMjMsIDksIDQsIDEwLCAyfSwJLyogOCBNQiAqLworCXsgMHg1NywgMjQsIDksIDQsIDExLCAyfSwJLyogMTYgTUIgKi8KKwl7IDB4NTgsIDI1LCA5LCA0LCAxMiwgMn0sCS8qIDMyIE1CICovCisJeyAwLH0KK307CisKKyNkZWZpbmUgU0laRShhKQkoc2l6ZW9mKGEpL3NpemVvZigoYSlbMF0pKQorCitzdGF0aWMgc3RydWN0IG5hbmRfZmxhc2hfZGV2ICoKK25hbmRfZmluZF9pZCh1bnNpZ25lZCBjaGFyIGlkKSB7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgU0laRShuYW5kX2ZsYXNoX2lkcyk7IGkrKykKKwkJaWYgKG5hbmRfZmxhc2hfaWRzW2ldLm1vZGVsX2lkID09IGlkKQorCQkJcmV0dXJuICYobmFuZF9mbGFzaF9pZHNbaV0pOworCXJldHVybiBOVUxMOworfQorCisvKgorICogRUNDIGNvbXB1dGF0aW9uLgorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBwYXJpdHlbMjU2XTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGVjYzJbMjU2XTsKKworc3RhdGljIHZvaWQgbmFuZF9pbml0X2VjYyh2b2lkKSB7CisJaW50IGksIGosIGE7CisKKwlwYXJpdHlbMF0gPSAwOworCWZvciAoaSA9IDE7IGkgPCAyNTY7IGkrKykKKwkJcGFyaXR5W2ldID0gKHBhcml0eVtpJihpLTEpXSBeIDEpOworCisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCWEgPSAwOworCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7CisJCQlpZiAoaSAmICgxPDxqKSkgeworCQkJCWlmICgoaiAmIDEpID09IDApCisJCQkJCWEgXj0gMHgwNDsKKwkJCQlpZiAoKGogJiAyKSA9PSAwKQorCQkJCQlhIF49IDB4MTA7CisJCQkJaWYgKChqICYgNCkgPT0gMCkKKwkJCQkJYSBePSAweDQwOworCQkJfQorCQl9CisJCWVjYzJbaV0gPSB+KGEgXiAoYTw8MSkgXiAocGFyaXR5W2ldID8gMHhhOCA6IDApKTsKKwl9Cit9CisKKy8qIGNvbXB1dGUgMy1ieXRlIGVjYyBvbiAyNTYgYnl0ZXMgKi8KK3N0YXRpYyB2b2lkIG5hbmRfY29tcHV0ZV9lY2ModW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgY2hhciAqZWNjKSB7CisJaW50IGksIGosIGE7CisJdW5zaWduZWQgY2hhciBwYXIsIGJpdCwgYml0c1s4XTsKKworCXBhciA9IDA7CisJZm9yIChqID0gMDsgaiA8IDg7IGorKykKKwkJYml0c1tqXSA9IDA7CisKKwkvKiBjb2xsZWN0IDE2IGNoZWNrc3VtIGJpdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJcGFyIF49IGRhdGFbaV07CisJCWJpdCA9IHBhcml0eVtkYXRhW2ldXTsKKwkJZm9yIChqID0gMDsgaiA8IDg7IGorKykKKwkJCWlmICgoaSAmICgxPDxqKSkgPT0gMCkKKwkJCQliaXRzW2pdIF49IGJpdDsKKwl9CisKKwkvKiBwdXQgNCs0KzQgPSAxMiBiaXRzIGluIHRoZSBlY2MgKi8KKwlhID0gKGJpdHNbM10gPDwgNikgKyAoYml0c1syXSA8PCA0KSArIChiaXRzWzFdIDw8IDIpICsgYml0c1swXTsKKwllY2NbMF0gPSB+KGEgXiAoYTw8MSkgXiAocGFyaXR5W3Bhcl0gPyAweGFhIDogMCkpOworCisJYSA9IChiaXRzWzddIDw8IDYpICsgKGJpdHNbNl0gPDwgNCkgKyAoYml0c1s1XSA8PCAyKSArIGJpdHNbNF07CisJZWNjWzFdID0gfihhIF4gKGE8PDEpIF4gKHBhcml0eVtwYXJdID8gMHhhYSA6IDApKTsKKworCWVjY1syXSA9IGVjYzJbcGFyXTsKK30KKworc3RhdGljIGludCBuYW5kX2NvbXBhcmVfZWNjKHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKmVjYykgeworCXJldHVybiAoZGF0YVswXSA9PSBlY2NbMF0gJiYgZGF0YVsxXSA9PSBlY2NbMV0gJiYgZGF0YVsyXSA9PSBlY2NbMl0pOworfQorCitzdGF0aWMgdm9pZCBuYW5kX3N0b3JlX2VjYyh1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBjaGFyICplY2MpIHsKKwltZW1jcHkoZGF0YSwgZWNjLCAzKTsKK30KKworLyoKKyAqIFRoZSBhY3R1YWwgZHJpdmVyIHN0YXJ0cyBoZXJlLgorICovCisKKy8qCisgKiBPbiBteSAxNk1CIGNhcmQsIGNvbnRyb2wgYmxvY2tzIGhhdmUgc2l6ZSA2NCAoMTYgcmVhbCBjb250cm9sIGJ5dGVzLAorICogYW5kIDQ4IGp1bmsgYnl0ZXMpLiBJbiByZWFsaXR5IG9mIGNvdXJzZSB0aGUgY2FyZCB1c2VzIDE2IGNvbnRyb2wgYnl0ZXMsCisgKiBzbyB0aGUgcmVhZGVyIG1ha2VzIHVwIHRoZSByZW1haW5pbmcgNDguIERvbid0IGtub3cgd2hldGhlciB0aGVzZSBudW1iZXJzCisgKiBkZXBlbmQgb24gdGhlIGNhcmQuIEZvciBub3cgYSBjb25zdGFudC4KKyAqLworI2RlZmluZSBDT05UUk9MX1NISUZUIDYKKworLyoKKyAqIE9uIG15IENvbWJvIENGL1NNIHJlYWRlciwgdGhlIFNNIHJlYWRlciBoYXMgTFVOIDEuCisgKiAoYW5kIHRoaW5ncyBmYWlsIHdpdGggTFVOIDApLgorICogSXQgc2VlbXMgTFVOIGlzIGlycmVsZXZhbnQgZm9yIG90aGVycy4KKyAqLworI2RlZmluZSBMVU4JMQorI2RlZmluZQlMVU5CSVRTCShMVU4gPDwgNSkKKworLyoKKyAqIExCQSBhbmQgUEJBIGFyZSB1bnNpZ25lZCBpbnRzLiBTcGVjaWFsIHZhbHVlcy4KKyAqLworI2RlZmluZSBVTkRFRiAgICAweGZmZmZmZmZmCisjZGVmaW5lIFNQQVJFICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgVU5VU0FCTEUgMHhmZmZmZmZmZAorCitzdGF0aWMgaW50IGVyYXNlX2JhZF9sYmFfZW50cmllcyA9IDA7CisKKy8qIHNlbmQgdmVuZG9yIGludGVyZmFjZSBjb21tYW5kICgweDQxKSAqLworLyogY2FsbGVkIGZvciByZXF1ZXN0cyAwLCAxLCA4ICovCitzdGF0aWMgaW50CitzZGRyMDlfc2VuZF9jb21tYW5kKHN0cnVjdCB1c19kYXRhICp1cywKKwkJICAgIHVuc2lnbmVkIGNoYXIgcmVxdWVzdCwKKwkJICAgIHVuc2lnbmVkIGNoYXIgZGlyZWN0aW9uLAorCQkgICAgdW5zaWduZWQgY2hhciAqeGZlcl9kYXRhLAorCQkgICAgdW5zaWduZWQgaW50IHhmZXJfbGVuKSB7CisJdW5zaWduZWQgaW50IHBpcGU7CisJdW5zaWduZWQgY2hhciByZXF1ZXN0dHlwZSA9ICgweDQxIHwgZGlyZWN0aW9uKTsKKwlpbnQgcmM7CisKKwkvLyBHZXQgdGhlIHJlY2VpdmUgb3Igc2VuZCBjb250cm9sIHBpcGUgbnVtYmVyCisKKwlpZiAoZGlyZWN0aW9uID09IFVTQl9ESVJfSU4pCisJCXBpcGUgPSB1cy0+cmVjdl9jdHJsX3BpcGU7CisJZWxzZQorCQlwaXBlID0gdXMtPnNlbmRfY3RybF9waXBlOworCisJcmMgPSB1c2Jfc3Rvcl9jdHJsX3RyYW5zZmVyKHVzLCBwaXBlLCByZXF1ZXN0LCByZXF1ZXN0dHlwZSwKKwkJCQkgICAwLCAwLCB4ZmVyX2RhdGEsIHhmZXJfbGVuKTsKKwlyZXR1cm4gKHJjID09IFVTQl9TVE9SX1hGRVJfR09PRCA/IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EIDoKKwkJCVVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUik7Cit9CisKK3N0YXRpYyBpbnQKK3NkZHIwOV9zZW5kX3Njc2lfY29tbWFuZChzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkgdW5zaWduZWQgY2hhciAqY29tbWFuZCwKKwkJCSB1bnNpZ25lZCBpbnQgY29tbWFuZF9sZW4pIHsKKwlyZXR1cm4gc2RkcjA5X3NlbmRfY29tbWFuZCh1cywgMCwgVVNCX0RJUl9PVVQsIGNvbW1hbmQsIGNvbW1hbmRfbGVuKTsKK30KKworI2lmIDAKKy8qCisgKiBUZXN0IFVuaXQgUmVhZHkgQ29tbWFuZDogMTIgYnl0ZXMuCisgKiBieXRlIDA6IG9wY29kZTogMDAKKyAqLworc3RhdGljIGludAorc2RkcjA5X3Rlc3RfdW5pdF9yZWFkeShzdHJ1Y3QgdXNfZGF0YSAqdXMpIHsKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCWludCByZXN1bHQ7CisKKwltZW1zZXQoY29tbWFuZCwgMCwgNik7CisJY29tbWFuZFsxXSA9IExVTkJJVFM7CisKKwlyZXN1bHQgPSBzZGRyMDlfc2VuZF9zY3NpX2NvbW1hbmQodXMsIGNvbW1hbmQsIDYpOworCisJVVNfREVCVUdQKCJzZGRyMDlfdGVzdF91bml0X3JlYWR5IHJldHVybnMgJWRcbiIsIHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKKy8qCisgKiBSZXF1ZXN0IFNlbnNlIENvbW1hbmQ6IDEyIGJ5dGVzLgorICogYnl0ZSAwOiBvcGNvZGU6IDAzCisgKiBieXRlIDQ6IGRhdGEgbGVuZ3RoCisgKi8KK3N0YXRpYyBpbnQKK3NkZHIwOV9yZXF1ZXN0X3NlbnNlKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgY2hhciAqc2Vuc2VidWYsIGludCBidWZsZW4pIHsKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCWludCByZXN1bHQ7CisKKwltZW1zZXQoY29tbWFuZCwgMCwgMTIpOworCWNvbW1hbmRbMF0gPSAweDAzOworCWNvbW1hbmRbMV0gPSBMVU5CSVRTOworCWNvbW1hbmRbNF0gPSBidWZsZW47CisKKwlyZXN1bHQgPSBzZGRyMDlfc2VuZF9zY3NpX2NvbW1hbmQodXMsIGNvbW1hbmQsIDEyKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSB7CisJCVVTX0RFQlVHUCgicmVxdWVzdCBzZW5zZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCB1cy0+cmVjdl9idWxrX3BpcGUsCisJCQlzZW5zZWJ1ZiwgYnVmbGVuLCBOVUxMKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQlVU19ERUJVR1AoInJlcXVlc3Qgc2Vuc2UgYnVsayBpbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0gZWxzZSB7CisJCVVTX0RFQlVHUCgicmVxdWVzdCBzZW5zZSB3b3JrZWRcbiIpOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJfQorfQorCisvKgorICogUmVhZCBDb21tYW5kOiAxMiBieXRlcy4KKyAqIGJ5dGUgMDogb3Bjb2RlOiBFOAorICogYnl0ZSAxOiBsYXN0IHR3byBiaXRzOiAwMDogcmVhZCBkYXRhLCAwMTogcmVhZCBibG9ja3dpc2UgY29udHJvbCwKKyAqCQkJMTA6IHJlYWQgYm90aCwgMTE6IHJlYWQgcGFnZXdpc2UgY29udHJvbC4KKyAqCSBJdCB0dXJucyBvdXQgd2UgbmVlZCB2YWx1ZXMgMjAsIDIxLCAyMiwgMjMgaGVyZSAoTFVOIDEpLgorICogYnl0ZXMgMi01OiBhZGRyZXNzIChpbnRlcnByZXRhdGlvbiBkZXBlbmRzIG9uIGJ5dGUgMSwgc2VlIGJlbG93KQorICogYnl0ZXMgMTAtMTE6IGNvdW50IChpZGVtKQorICoKKyAqIEEgcGFnZSBoYXMgNTEyIGRhdGEgYnl0ZXMgYW5kIDY0IGNvbnRyb2wgYnl0ZXMgKDE2IGNvbnRyb2wgYW5kIDQ4IGp1bmspLgorICogQSByZWFkIGRhdGEgY29tbWFuZCBnZXRzIGRhdGEgaW4gNTEyLWJ5dGUgcGFnZXMuCisgKiBBIHJlYWQgY29udHJvbCBjb21tYW5kIGdldHMgY29udHJvbCBpbiA2NC1ieXRlIGNodW5rcy4KKyAqIEEgcmVhZCBib3RoIGNvbW1hbmQgZ2V0cyBkYXRhK2NvbnRyb2wgaW4gNTc2LWJ5dGUgY2h1bmtzLgorICoKKyAqIEJsb2NrcyBhcmUgZ3JvdXBzIG9mIDMyIHBhZ2VzLCBhbmQgcmVhZCBibG9ja3dpc2UgY29udHJvbCBqdW1wcyB0byB0aGUKKyAqIG5leHQgYmxvY2ssIHdoaWxlIHJlYWQgcGFnZXdpc2UgY29udHJvbCBqdW1wcyB0byB0aGUgbmV4dCBwYWdlIGFmdGVyCisgKiByZWFkaW5nIGEgZ3JvdXAgb2YgNjQgY29udHJvbCBieXRlcy4KKyAqIFtIZXJlIDUxMiA9IDE8PHBhZ2VzaGlmdCwgMzIgPSAxPDxibG9ja3NoaWZ0LCA2NCBpcyBjb25zdGFudD9dCisgKgorICogKDEgTUIgYW5kIDIgTUIgY2FyZHMgYXJlIGEgYml0IGRpZmZlcmVudCwgYnV0IEkgaGF2ZSBvbmx5IGEgMTYgTUIgY2FyZC4pCisgKi8KKworc3RhdGljIGludAorc2RkcjA5X3JlYWRYKHN0cnVjdCB1c19kYXRhICp1cywgaW50IHgsIHVuc2lnbmVkIGxvbmcgZnJvbWFkZHJlc3MsCisJICAgICBpbnQgbnJfb2ZfcGFnZXMsIGludCBidWxrbGVuLCB1bnNpZ25lZCBjaGFyICpidWYsCisJICAgICBpbnQgdXNlX3NnKSB7CisKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCWludCByZXN1bHQ7CisKKwljb21tYW5kWzBdID0gMHhFODsKKwljb21tYW5kWzFdID0gTFVOQklUUyB8IHg7CisJY29tbWFuZFsyXSA9IE1TQl9vZihmcm9tYWRkcmVzcz4+MTYpOworCWNvbW1hbmRbM10gPSBMU0Jfb2YoZnJvbWFkZHJlc3M+PjE2KTsgCisJY29tbWFuZFs0XSA9IE1TQl9vZihmcm9tYWRkcmVzcyAmIDB4RkZGRik7CisJY29tbWFuZFs1XSA9IExTQl9vZihmcm9tYWRkcmVzcyAmIDB4RkZGRik7IAorCWNvbW1hbmRbNl0gPSAwOworCWNvbW1hbmRbN10gPSAwOworCWNvbW1hbmRbOF0gPSAwOworCWNvbW1hbmRbOV0gPSAwOworCWNvbW1hbmRbMTBdID0gTVNCX29mKG5yX29mX3BhZ2VzKTsKKwljb21tYW5kWzExXSA9IExTQl9vZihucl9vZl9wYWdlcyk7CisKKwlyZXN1bHQgPSBzZGRyMDlfc2VuZF9zY3NpX2NvbW1hbmQodXMsIGNvbW1hbmQsIDEyKTsKKworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJVVNfREVCVUdQKCJSZXN1bHQgZm9yIHNlbmRfY29udHJvbCBpbiBzZGRyMDlfcmVhZDIlZCAlZFxuIiwKKwkJCSAgeCwgcmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX3NnKHVzLCB1cy0+cmVjdl9idWxrX3BpcGUsCisJCQkJICAgICAgIGJ1ZiwgYnVsa2xlbiwgdXNlX3NnLCBOVUxMKTsKKworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCVVTX0RFQlVHUCgiUmVzdWx0IGZvciBidWxrX3RyYW5zZmVyIGluIHNkZHIwOV9yZWFkMiVkICVkXG4iLAorCQkJICB4LCByZXN1bHQpOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKy8qCisgKiBSZWFkIERhdGEKKyAqCisgKiBmcm9tYWRkcmVzcyBjb3VudHMgZGF0YSBzaG9ydHM6CisgKiBpbmNyZWFzaW5nIGl0IGJ5IDI1NiBzaGlmdHMgdGhlIGJ5dGVzdHJlYW0gYnkgNTEyIGJ5dGVzOworICogdGhlIGxhc3QgOCBiaXRzIGFyZSBpZ25vcmVkLgorICoKKyAqIG5yX29mX3BhZ2VzIGNvdW50cyBwYWdlcyBvZiBzaXplICgxIDw8IHBhZ2VzaGlmdCkuCisgKi8KK3N0YXRpYyBpbnQKK3NkZHIwOV9yZWFkMjAoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGZyb21hZGRyZXNzLAorCSAgICAgIGludCBucl9vZl9wYWdlcywgaW50IHBhZ2VzaGlmdCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgdXNlX3NnKSB7CisJaW50IGJ1bGtsZW4gPSBucl9vZl9wYWdlcyA8PCBwYWdlc2hpZnQ7CisKKwkvKiBUaGUgbGFzdCA4IGJpdHMgb2YgZnJvbWFkZHJlc3MgYXJlIGlnbm9yZWQuICovCisJcmV0dXJuIHNkZHIwOV9yZWFkWCh1cywgMCwgZnJvbWFkZHJlc3MsIG5yX29mX3BhZ2VzLCBidWxrbGVuLAorCQkJICAgIGJ1ZiwgdXNlX3NnKTsKK30KKworLyoKKyAqIFJlYWQgQmxvY2t3aXNlIENvbnRyb2wKKyAqCisgKiBmcm9tYWRkcmVzcyBnaXZlcyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gKGFzIGluIHJlYWQgZGF0YTsKKyAqIHRoZSBsYXN0IDggYml0cyBhcmUgaWdub3JlZCk7IGluY3JlYXNpbmcgaXQgYnkgMzIqMjU2IHNoaWZ0cworICogdGhlIG91dHB1dCBzdHJlYW0gYnkgNjQgYnl0ZXMuCisgKgorICogY291bnQgY291bnRzIGNvbnRyb2wgZ3JvdXBzIG9mIHNpemUgKDEgPDwgY29udHJvbHNoaWZ0KS4KKyAqIEZvciBtZSwgY29udHJvbHNoaWZ0ID0gNi4gSXMgdGhpcyBjb25zdGFudD8KKyAqCisgKiBBZnRlciBnZXR0aW5nIG9uZSBjb250cm9sIGdyb3VwLCBqdW1wIHRvIHRoZSBuZXh0IGJsb2NrCisgKiAoZnJvbWFkZHJlc3MgKz0gODE5MikuCisgKi8KK3N0YXRpYyBpbnQKK3NkZHIwOV9yZWFkMjEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGZyb21hZGRyZXNzLAorCSAgICAgIGludCBjb3VudCwgaW50IGNvbnRyb2xzaGlmdCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgdXNlX3NnKSB7CisKKwlpbnQgYnVsa2xlbiA9IChjb3VudCA8PCBjb250cm9sc2hpZnQpOworCXJldHVybiBzZGRyMDlfcmVhZFgodXMsIDEsIGZyb21hZGRyZXNzLCBjb3VudCwgYnVsa2xlbiwKKwkJCSAgICBidWYsIHVzZV9zZyk7Cit9CisKKy8qCisgKiBSZWFkIGJvdGggRGF0YSBhbmQgQ29udHJvbAorICoKKyAqIGZyb21hZGRyZXNzIGNvdW50cyBkYXRhIHNob3J0cywgaWdub3JpbmcgY29udHJvbDoKKyAqIGluY3JlYXNpbmcgaXQgYnkgMjU2IHNoaWZ0cyB0aGUgYnl0ZXN0cmVhbSBieSA1NzYgPSA1MTIrNjQgYnl0ZXM7CisgKiB0aGUgbGFzdCA4IGJpdHMgYXJlIGlnbm9yZWQuCisgKgorICogbnJfb2ZfcGFnZXMgY291bnRzIHBhZ2VzIG9mIHNpemUgKDEgPDwgcGFnZXNoaWZ0KSArICgxIDw8IGNvbnRyb2xzaGlmdCkuCisgKi8KK3N0YXRpYyBpbnQKK3NkZHIwOV9yZWFkMjIoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGZyb21hZGRyZXNzLAorCSAgICAgIGludCBucl9vZl9wYWdlcywgaW50IHBhZ2VzaGlmdCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgdXNlX3NnKSB7CisKKwlpbnQgYnVsa2xlbiA9IChucl9vZl9wYWdlcyA8PCBwYWdlc2hpZnQpICsgKG5yX29mX3BhZ2VzIDw8IENPTlRST0xfU0hJRlQpOworCVVTX0RFQlVHUCgic2RkcjA5X3JlYWQyMjogcmVhZGluZyAlZCBwYWdlcywgJWQgYnl0ZXNcbiIsCisJCSAgbnJfb2ZfcGFnZXMsIGJ1bGtsZW4pOworCXJldHVybiBzZGRyMDlfcmVhZFgodXMsIDIsIGZyb21hZGRyZXNzLCBucl9vZl9wYWdlcywgYnVsa2xlbiwKKwkJCSAgICBidWYsIHVzZV9zZyk7Cit9CisKKyNpZiAwCisvKgorICogUmVhZCBQYWdld2lzZSBDb250cm9sCisgKgorICogZnJvbWFkZHJlc3MgZ2l2ZXMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIChhcyBpbiByZWFkIGRhdGE7CisgKiB0aGUgbGFzdCA4IGJpdHMgYXJlIGlnbm9yZWQpOyBpbmNyZWFzaW5nIGl0IGJ5IDI1NiBzaGlmdHMKKyAqIHRoZSBvdXRwdXQgc3RyZWFtIGJ5IDY0IGJ5dGVzLgorICoKKyAqIGNvdW50IGNvdW50cyBjb250cm9sIGdyb3VwcyBvZiBzaXplICgxIDw8IGNvbnRyb2xzaGlmdCkuCisgKiBGb3IgbWUsIGNvbnRyb2xzaGlmdCA9IDYuIElzIHRoaXMgY29uc3RhbnQ/CisgKgorICogQWZ0ZXIgZ2V0dGluZyBvbmUgY29udHJvbCBncm91cCwganVtcCB0byB0aGUgbmV4dCBwYWdlCisgKiAoZnJvbWFkZHJlc3MgKz0gMjU2KS4KKyAqLworc3RhdGljIGludAorc2RkcjA5X3JlYWQyMyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgZnJvbWFkZHJlc3MsCisJICAgICAgaW50IGNvdW50LCBpbnQgY29udHJvbHNoaWZ0LCB1bnNpZ25lZCBjaGFyICpidWYsIGludCB1c2Vfc2cpIHsKKworCWludCBidWxrbGVuID0gKGNvdW50IDw8IGNvbnRyb2xzaGlmdCk7CisJcmV0dXJuIHNkZHIwOV9yZWFkWCh1cywgMywgZnJvbWFkZHJlc3MsIGNvdW50LCBidWxrbGVuLAorCQkJICAgIGJ1ZiwgdXNlX3NnKTsKK30KKyNlbmRpZgorCisvKgorICogRXJhc2UgQ29tbWFuZDogMTIgYnl0ZXMuCisgKiBieXRlIDA6IG9wY29kZTogRUEKKyAqIGJ5dGVzIDYtOTogZXJhc2UgYWRkcmVzcyAoYmlnLWVuZGlhbiwgY291bnRpbmcgc2hvcnRzLCBzZWN0b3IgYWxpZ25lZCkuCisgKiAKKyAqIEFsd2F5cyBwcmVjaXNlbHkgb25lIGJsb2NrIGlzIGVyYXNlZDsgYnl0ZXMgMi01IGFuZCAxMC0xMSBhcmUgaWdub3JlZC4KKyAqIFRoZSBieXRlIGFkZHJlc3MgYmVpbmcgZXJhc2VkIGlzIDIqRWFkZHJlc3MuCisgKiBUaGUgQ0lTIGNhbm5vdCBiZSBlcmFzZWQuCisgKi8KK3N0YXRpYyBpbnQKK3NkZHIwOV9lcmFzZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgRWFkZHJlc3MpIHsKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCWludCByZXN1bHQ7CisKKwlVU19ERUJVR1AoInNkZHIwOV9lcmFzZTogZXJhc2UgYWRkcmVzcyAlbHVcbiIsIEVhZGRyZXNzKTsKKworCW1lbXNldChjb21tYW5kLCAwLCAxMik7CisJY29tbWFuZFswXSA9IDB4RUE7CisJY29tbWFuZFsxXSA9IExVTkJJVFM7CisJY29tbWFuZFs2XSA9IE1TQl9vZihFYWRkcmVzcz4+MTYpOworCWNvbW1hbmRbN10gPSBMU0Jfb2YoRWFkZHJlc3M+PjE2KTsKKwljb21tYW5kWzhdID0gTVNCX29mKEVhZGRyZXNzICYgMHhGRkZGKTsKKwljb21tYW5kWzldID0gTFNCX29mKEVhZGRyZXNzICYgMHhGRkZGKTsKKworCXJlc3VsdCA9IHNkZHIwOV9zZW5kX3Njc2lfY29tbWFuZCh1cywgY29tbWFuZCwgMTIpOworCisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJVVNfREVCVUdQKCJSZXN1bHQgZm9yIHNlbmRfY29udHJvbCBpbiBzZGRyMDlfZXJhc2UgJWRcbiIsCisJCQkgIHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogV3JpdGUgQ0lTIENvbW1hbmQ6IDEyIGJ5dGVzLgorICogYnl0ZSAwOiBvcGNvZGU6IEVFCisgKiBieXRlcyAyLTU6IHdyaXRlIGFkZHJlc3MgaW4gc2hvcnRzCisgKiBieXRlcyAxMC0xMTogc2VjdG9yIGNvdW50CisgKgorICogVGhpcyB3cml0ZXMgYXQgdGhlIGluZGljYXRlZCBhZGRyZXNzLiBEb24ndCBrbm93IGhvdyBpdCBkaWZmZXJzCisgKiBmcm9tIEU5LiBNYXliZSBpdCBkb2VzIG5vdCBlcmFzZT8gSG93ZXZlciwgaXQgd2lsbCBhbHNvIHdyaXRlIHRvCisgKiB0aGUgQ0lTLgorICoKKyAqIFdoZW4gdHdvIHN1Y2ggY29tbWFuZHMgb24gdGhlIHNhbWUgcGFnZSBmb2xsb3cgZWFjaCBvdGhlciBkaXJlY3RseSwKKyAqIHRoZSBzZWNvbmQgb25lIGlzIG5vdCBkb25lLgorICovCisKKy8qCisgKiBXcml0ZSBDb21tYW5kOiAxMiBieXRlcy4KKyAqIGJ5dGUgMDogb3Bjb2RlOiBFOQorICogYnl0ZXMgMi01OiB3cml0ZSBhZGRyZXNzIChiaWctZW5kaWFuLCBjb3VudGluZyBzaG9ydHMsIHNlY3RvciBhbGlnbmVkKS4KKyAqIGJ5dGVzIDYtOTogZXJhc2UgYWRkcmVzcyAoYmlnLWVuZGlhbiwgY291bnRpbmcgc2hvcnRzLCBzZWN0b3IgYWxpZ25lZCkuCisgKiBieXRlcyAxMC0xMTogc2VjdG9yIGNvdW50IChiaWctZW5kaWFuLCBpbiA1MTItYnl0ZSBzZWN0b3JzKS4KKyAqCisgKiBJZiB3cml0ZSBhZGRyZXNzIGVxdWFscyBlcmFzZSBhZGRyZXNzLCB0aGUgZXJhc2UgaXMgZG9uZSBmaXJzdCwKKyAqIG90aGVyd2lzZSB0aGUgd3JpdGUgaXMgZG9uZSBmaXJzdC4gV2hlbiBlcmFzZSBhZGRyZXNzIGVxdWFscyB6ZXJvCisgKiBubyBlcmFzZSBpcyBkb25lPworICovCitzdGF0aWMgaW50CitzZGRyMDlfd3JpdGVYKHN0cnVjdCB1c19kYXRhICp1cywKKwkgICAgICB1bnNpZ25lZCBsb25nIFdhZGRyZXNzLCB1bnNpZ25lZCBsb25nIEVhZGRyZXNzLAorCSAgICAgIGludCBucl9vZl9wYWdlcywgaW50IGJ1bGtsZW4sIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IHVzZV9zZykgeworCisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKwlpbnQgcmVzdWx0OworCisJY29tbWFuZFswXSA9IDB4RTk7CisJY29tbWFuZFsxXSA9IExVTkJJVFM7CisKKwljb21tYW5kWzJdID0gTVNCX29mKFdhZGRyZXNzPj4xNik7CisJY29tbWFuZFszXSA9IExTQl9vZihXYWRkcmVzcz4+MTYpOworCWNvbW1hbmRbNF0gPSBNU0Jfb2YoV2FkZHJlc3MgJiAweEZGRkYpOworCWNvbW1hbmRbNV0gPSBMU0Jfb2YoV2FkZHJlc3MgJiAweEZGRkYpOworCisJY29tbWFuZFs2XSA9IE1TQl9vZihFYWRkcmVzcz4+MTYpOworCWNvbW1hbmRbN10gPSBMU0Jfb2YoRWFkZHJlc3M+PjE2KTsKKwljb21tYW5kWzhdID0gTVNCX29mKEVhZGRyZXNzICYgMHhGRkZGKTsKKwljb21tYW5kWzldID0gTFNCX29mKEVhZGRyZXNzICYgMHhGRkZGKTsKKworCWNvbW1hbmRbMTBdID0gTVNCX29mKG5yX29mX3BhZ2VzKTsKKwljb21tYW5kWzExXSA9IExTQl9vZihucl9vZl9wYWdlcyk7CisKKwlyZXN1bHQgPSBzZGRyMDlfc2VuZF9zY3NpX2NvbW1hbmQodXMsIGNvbW1hbmQsIDEyKTsKKworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJVVNfREVCVUdQKCJSZXN1bHQgZm9yIHNlbmRfY29udHJvbCBpbiBzZGRyMDlfd3JpdGVYICVkXG4iLAorCQkJICByZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2codXMsIHVzLT5zZW5kX2J1bGtfcGlwZSwKKwkJCQkgICAgICAgYnVmLCBidWxrbGVuLCB1c2Vfc2csIE5VTEwpOworCisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJVVNfREVCVUdQKCJSZXN1bHQgZm9yIGJ1bGtfdHJhbnNmZXIgaW4gc2RkcjA5X3dyaXRlWCAlZFxuIiwKKwkJCSAgcmVzdWx0KTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCisvKiBlcmFzZSBhZGRyZXNzLCB3cml0ZSBzYW1lIGFkZHJlc3MgKi8KK3N0YXRpYyBpbnQKK3NkZHIwOV93cml0ZV9pbnBsYWNlKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkgICAgIGludCBucl9vZl9wYWdlcywgaW50IHBhZ2VzaGlmdCwgdW5zaWduZWQgY2hhciAqYnVmLAorCQkgICAgIGludCB1c2Vfc2cpIHsKKwlpbnQgYnVsa2xlbiA9IChucl9vZl9wYWdlcyA8PCBwYWdlc2hpZnQpICsgKG5yX29mX3BhZ2VzIDw8IENPTlRST0xfU0hJRlQpOworCXJldHVybiBzZGRyMDlfd3JpdGVYKHVzLCBhZGRyZXNzLCBhZGRyZXNzLCBucl9vZl9wYWdlcywgYnVsa2xlbiwKKwkJCSAgICAgYnVmLCB1c2Vfc2cpOworfQorCisjaWYgMAorLyoKKyAqIFJlYWQgU2NhdHRlciBHYXRoZXIgQ29tbWFuZDogMys0biBieXRlcy4KKyAqIGJ5dGUgMDogb3Bjb2RlIEU3CisgKiBieXRlIDI6IG4KKyAqIGJ5dGVzIDRpLTEsNGksNGkrMTogcGFnZSBhZGRyZXNzCisgKiBieXRlIDRpKzI6IHBhZ2UgY291bnQKKyAqIChpPTEuLm4pCisgKgorICogVGhpcyByZWFkcyBzZXZlcmFsIHBhZ2VzIGZyb20gdGhlIGNhcmQgdG8gYSBzaW5nbGUgbWVtb3J5IGJ1ZmZlci4KKyAqIFRoZSBsYXN0IHR3byBiaXRzIG9mIGJ5dGUgMSBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIEU4LgorICovCitzdGF0aWMgaW50CitzZGRyMDlfcmVhZF9zZ190ZXN0X29ubHkoc3RydWN0IHVzX2RhdGEgKnVzKSB7CisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKwlpbnQgcmVzdWx0LCBidWxrbGVuLCBuc2csIGN0OworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisKKwluc2cgPSBidWxrbGVuID0gMDsKKwljb21tYW5kWzBdID0gMHhFNzsKKwljb21tYW5kWzFdID0gTFVOQklUUzsKKwljb21tYW5kWzJdID0gMDsKKwlhZGRyZXNzID0gMDQwMDAwOyBjdCA9IDE7CisJbnNnKys7CisJYnVsa2xlbiArPSAoY3QgPDwgOSk7CisJY29tbWFuZFs0Km5zZysyXSA9IGN0OworCWNvbW1hbmRbNCpuc2crMV0gPSAoKGFkZHJlc3MgPj4gOSkgJiAweEZGKTsKKwljb21tYW5kWzQqbnNnKzBdID0gKChhZGRyZXNzID4+IDE3KSAmIDB4RkYpOworCWNvbW1hbmRbNCpuc2ctMV0gPSAoKGFkZHJlc3MgPj4gMjUpICYgMHhGRik7CisKKwlhZGRyZXNzID0gMDM0MDAwMDsgY3QgPSAxOworCW5zZysrOworCWJ1bGtsZW4gKz0gKGN0IDw8IDkpOworCWNvbW1hbmRbNCpuc2crMl0gPSBjdDsKKwljb21tYW5kWzQqbnNnKzFdID0gKChhZGRyZXNzID4+IDkpICYgMHhGRik7CisJY29tbWFuZFs0Km5zZyswXSA9ICgoYWRkcmVzcyA+PiAxNykgJiAweEZGKTsKKwljb21tYW5kWzQqbnNnLTFdID0gKChhZGRyZXNzID4+IDI1KSAmIDB4RkYpOworCisJYWRkcmVzcyA9IDAxMDAwMDAwOyBjdCA9IDI7CisJbnNnKys7CisJYnVsa2xlbiArPSAoY3QgPDwgOSk7CisJY29tbWFuZFs0Km5zZysyXSA9IGN0OworCWNvbW1hbmRbNCpuc2crMV0gPSAoKGFkZHJlc3MgPj4gOSkgJiAweEZGKTsKKwljb21tYW5kWzQqbnNnKzBdID0gKChhZGRyZXNzID4+IDE3KSAmIDB4RkYpOworCWNvbW1hbmRbNCpuc2ctMV0gPSAoKGFkZHJlc3MgPj4gMjUpICYgMHhGRik7CisKKwljb21tYW5kWzJdID0gbnNnOworCisJcmVzdWx0ID0gc2RkcjA5X3NlbmRfc2NzaV9jb21tYW5kKHVzLCBjb21tYW5kLCA0Km5zZyszKTsKKworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJVVNfREVCVUdQKCJSZXN1bHQgZm9yIHNlbmRfY29udHJvbCBpbiBzZGRyMDlfcmVhZF9zZyAlZFxuIiwKKwkJCSAgcmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwlidWYgPSAodW5zaWduZWQgY2hhciAqKSBrbWFsbG9jKGJ1bGtsZW4sIEdGUF9OT0lPKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCB1cy0+cmVjdl9idWxrX3BpcGUsCisJCQkJICAgICAgIGJ1ZiwgYnVsa2xlbiwgTlVMTCk7CisJa2ZyZWUoYnVmKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQlVU19ERUJVR1AoIlJlc3VsdCBmb3IgYnVsa190cmFuc2ZlciBpbiBzZGRyMDlfcmVhZF9zZyAlZFxuIiwKKwkJCSAgcmVzdWx0KTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisjZW5kaWYKKworLyoKKyAqIFJlYWQgU3RhdHVzIENvbW1hbmQ6IDEyIGJ5dGVzLgorICogYnl0ZSAwOiBvcGNvZGU6IEVDCisgKgorICogUmV0dXJucyA2NCBieXRlcywgYWxsIHplcm8gZXhjZXB0IGZvciB0aGUgZmlyc3QuCisgKiBiaXQgMDogMTogRXJyb3IKKyAqIGJpdCA1OiAxOiBTdXNwZW5kZWQKKyAqIGJpdCA2OiAxOiBSZWFkeQorICogYml0IDc6IDE6IE5vdCB3cml0ZS1wcm90ZWN0ZWQKKyAqLworCitzdGF0aWMgaW50CitzZGRyMDlfcmVhZF9zdGF0dXMoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBjaGFyICpzdGF0dXMpIHsKKworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVzLT5pb2J1ZjsKKwlpbnQgcmVzdWx0OworCisJVVNfREVCVUdQKCJSZWFkaW5nIHN0YXR1cy4uLlxuIik7CisKKwltZW1zZXQoY29tbWFuZCwgMCwgMTIpOworCWNvbW1hbmRbMF0gPSAweEVDOworCWNvbW1hbmRbMV0gPSBMVU5CSVRTOworCisJcmVzdWx0ID0gc2RkcjA5X3NlbmRfc2NzaV9jb21tYW5kKHVzLCBjb21tYW5kLCAxMik7CisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCB1cy0+cmVjdl9idWxrX3BpcGUsCisJCQkJICAgICAgIGRhdGEsIDY0LCBOVUxMKTsKKwkqc3RhdHVzID0gZGF0YVswXTsKKwlyZXR1cm4gKHJlc3VsdCA9PSBVU0JfU1RPUl9YRkVSX0dPT0QgPworCQkJVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QgOiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1IpOworfQorCitzdGF0aWMgaW50CitzZGRyMDlfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywKKwkJIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJIHVuc2lnbmVkIGludCBzZWN0b3JzKSB7CisKKwlzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyAqKSB1cy0+ZXh0cmE7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGludCBsYmEsIG1heGxiYSwgcGJhOworCXVuc2lnbmVkIGludCBwYWdlLCBwYWdlczsKKwl1bnNpZ25lZCBpbnQgbGVuLCBpbmRleCwgb2Zmc2V0OworCWludCByZXN1bHQ7CisKKwkvLyBTaW5jZSB3ZSBvbmx5IHJlYWQgaW4gb25lIGJsb2NrIGF0IGEgdGltZSwgd2UgaGF2ZSB0byBjcmVhdGUKKwkvLyBhIGJvdW5jZSBidWZmZXIgYW5kIG1vdmUgdGhlIGRhdGEgYSBwaWVjZSBhdCBhIHRpbWUgYmV0d2VlbiB0aGUKKwkvLyBib3VuY2UgYnVmZmVyIGFuZCB0aGUgYWN0dWFsIHRyYW5zZmVyIGJ1ZmZlci4KKworCWxlbiA9IG1pbihzZWN0b3JzLCAodW5zaWduZWQgaW50KSBpbmZvLT5ibG9ja3NpemUpICogaW5mby0+cGFnZXNpemU7CisJYnVmZmVyID0ga21hbGxvYyhsZW4sIEdGUF9OT0lPKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpIHsKKwkJcHJpbnRrKCJzZGRyMDlfcmVhZF9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwkvLyBGaWd1cmUgb3V0IHRoZSBpbml0aWFsIExCQSBhbmQgcGFnZQorCWxiYSA9IGFkZHJlc3MgPj4gaW5mby0+YmxvY2tzaGlmdDsKKwlwYWdlID0gKGFkZHJlc3MgJiBpbmZvLT5ibG9ja21hc2spOworCW1heGxiYSA9IGluZm8tPmNhcGFjaXR5ID4+IChpbmZvLT5wYWdlc2hpZnQgKyBpbmZvLT5ibG9ja3NoaWZ0KTsKKworCS8vIFRoaXMgY291bGQgYmUgbWFkZSBtdWNoIG1vcmUgZWZmaWNpZW50IGJ5IGNoZWNraW5nIGZvcgorCS8vIGNvbnRpZ3VvdXMgTEJBJ3MuIEFub3RoZXIgZXhlcmNpc2UgbGVmdCB0byB0aGUgc3R1ZGVudC4KKworCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCWluZGV4ID0gb2Zmc2V0ID0gMDsKKworCXdoaWxlIChzZWN0b3JzID4gMCkgeworCisJCS8qIEZpbmQgbnVtYmVyIG9mIHBhZ2VzIHdlIGNhbiByZWFkIGluIHRoaXMgYmxvY2sgKi8KKwkJcGFnZXMgPSBtaW4oc2VjdG9ycywgaW5mby0+YmxvY2tzaXplIC0gcGFnZSk7CisJCWxlbiA9IHBhZ2VzIDw8IGluZm8tPnBhZ2VzaGlmdDsKKworCQkvKiBOb3Qgb3ZlcmZsb3dpbmcgY2FwYWNpdHk/ICovCisJCWlmIChsYmEgPj0gbWF4bGJhKSB7CisJCQlVU19ERUJVR1AoIkVycm9yOiBSZXF1ZXN0ZWQgbGJhICV1IGV4Y2VlZHMgIgorCQkJCSAgIm1heGltdW0gJXVcbiIsIGxiYSwgbWF4bGJhKTsKKwkJCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogRmluZCB3aGVyZSB0aGlzIGxiYSBsaXZlcyBvbiBkaXNrICovCisJCXBiYSA9IGluZm8tPmxiYV90b19wYmFbbGJhXTsKKworCQlpZiAocGJhID09IFVOREVGKSB7CS8qIHRoaXMgbGJhIHdhcyBuZXZlciB3cml0dGVuICovCisKKwkJCVVTX0RFQlVHUCgiUmVhZCAlZCB6ZXJvIHBhZ2VzIChMQkEgJWQpIHBhZ2UgJWRcbiIsCisJCQkJICBwYWdlcywgbGJhLCBwYWdlKTsKKworCQkJLyogVGhpcyBpcyBub3QgcmVhbGx5IGFuIGVycm9yLiBJdCBqdXN0IG1lYW5zCisJCQkgICB0aGF0IHRoZSBibG9jayBoYXMgbmV2ZXIgYmVlbiB3cml0dGVuLgorCQkJICAgSW5zdGVhZCBvZiByZXR1cm5pbmcgVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SCisJCQkgICBpdCBpcyBiZXR0ZXIgdG8gcmV0dXJuIGFsbCB6ZXJvIGRhdGEuICovCisKKwkJCW1lbXNldChidWZmZXIsIDAsIGxlbik7CisKKwkJfSBlbHNlIHsKKwkJCVVTX0RFQlVHUCgiUmVhZCAlZCBwYWdlcywgZnJvbSBQQkEgJWQiCisJCQkJICAiIChMQkEgJWQpIHBhZ2UgJWRcbiIsCisJCQkJICBwYWdlcywgcGJhLCBsYmEsIHBhZ2UpOworCisJCQlhZGRyZXNzID0gKChwYmEgPDwgaW5mby0+YmxvY2tzaGlmdCkgKyBwYWdlKSA8PCAKKwkJCQlpbmZvLT5wYWdlc2hpZnQ7CisKKwkJCXJlc3VsdCA9IHNkZHIwOV9yZWFkMjAodXMsIGFkZHJlc3M+PjEsCisJCQkJCXBhZ2VzLCBpbmZvLT5wYWdlc2hpZnQsIGJ1ZmZlciwgMCk7CisJCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQkJCWJyZWFrOworCQl9CisKKwkJLy8gU3RvcmUgdGhlIGRhdGEgaW4gdGhlIHRyYW5zZmVyIGJ1ZmZlcgorCQl1c2Jfc3Rvcl9hY2Nlc3NfeGZlcl9idWYoYnVmZmVyLCBsZW4sIHVzLT5zcmIsCisJCQkJJmluZGV4LCAmb2Zmc2V0LCBUT19YRkVSX0JVRik7CisKKwkJcGFnZSA9IDA7CisJCWxiYSsrOworCQlzZWN0b3JzIC09IHBhZ2VzOworCX0KKworCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorc2RkcjA5X2ZpbmRfdW51c2VkX3BiYShzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IGxiYSkgeworCXN0YXRpYyB1bnNpZ25lZCBpbnQgbGFzdHBiYSA9IDE7CisJaW50IHpvbmVzdGFydCwgZW5kLCBpOworCisJem9uZXN0YXJ0ID0gKGxiYS8xMDAwKSA8PCAxMDsKKwllbmQgPSBpbmZvLT5jYXBhY2l0eSA+PiAoaW5mby0+YmxvY2tzaGlmdCArIGluZm8tPnBhZ2VzaGlmdCk7CisJZW5kIC09IHpvbmVzdGFydDsKKwlpZiAoZW5kID4gMTAyNCkKKwkJZW5kID0gMTAyNDsKKworCWZvciAoaSA9IGxhc3RwYmErMTsgaSA8IGVuZDsgaSsrKSB7CisJCWlmIChpbmZvLT5wYmFfdG9fbGJhW3pvbmVzdGFydCtpXSA9PSBVTkRFRikgeworCQkJbGFzdHBiYSA9IGk7CisJCQlyZXR1cm4gem9uZXN0YXJ0K2k7CisJCX0KKwl9CisJZm9yIChpID0gMDsgaSA8PSBsYXN0cGJhOyBpKyspIHsKKwkJaWYgKGluZm8tPnBiYV90b19sYmFbem9uZXN0YXJ0K2ldID09IFVOREVGKSB7CisJCQlsYXN0cGJhID0gaTsKKwkJCXJldHVybiB6b25lc3RhcnQraTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc2RkcjA5X3dyaXRlX2xiYShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCBsYmEsCisJCSB1bnNpZ25lZCBpbnQgcGFnZSwgdW5zaWduZWQgaW50IHBhZ2VzLAorCQkgdW5zaWduZWQgY2hhciAqcHRyLCB1bnNpZ25lZCBjaGFyICpibG9ja2J1ZmZlcikgeworCisJc3RydWN0IHNkZHIwOV9jYXJkX2luZm8gKmluZm8gPSAoc3RydWN0IHNkZHIwOV9jYXJkX2luZm8gKikgdXMtPmV4dHJhOworCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKKwl1bnNpZ25lZCBpbnQgcGJhLCBsYmFwOworCXVuc2lnbmVkIGludCBwYWdlbGVuOworCXVuc2lnbmVkIGNoYXIgKmJwdHIsICpjcHRyLCAqeHB0cjsKKwl1bnNpZ25lZCBjaGFyIGVjY1szXTsKKwlpbnQgaSwgcmVzdWx0LCBpc25ldzsKKworCWxiYXAgPSAoKGxiYSAlIDEwMDApIDw8IDEpIHwgMHgxMDAwOworCWlmIChwYXJpdHlbTVNCX29mKGxiYXApIF4gTFNCX29mKGxiYXApXSkKKwkJbGJhcCBePSAxOworCXBiYSA9IGluZm8tPmxiYV90b19wYmFbbGJhXTsKKwlpc25ldyA9IDA7CisKKwlpZiAocGJhID09IFVOREVGKSB7CisJCXBiYSA9IHNkZHIwOV9maW5kX3VudXNlZF9wYmEoaW5mbywgbGJhKTsKKwkJaWYgKCFwYmEpIHsKKwkJCXByaW50aygic2RkcjA5X3dyaXRlX2xiYTogT3V0IG9mIHVudXNlZCBibG9ja3NcbiIpOworCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJfQorCQlpbmZvLT5wYmFfdG9fbGJhW3BiYV0gPSBsYmE7CisJCWluZm8tPmxiYV90b19wYmFbbGJhXSA9IHBiYTsKKwkJaXNuZXcgPSAxOworCX0KKworCWlmIChwYmEgPT0gMSkgeworCQkvKiBNYXliZSBpdCBpcyBpbXBvc3NpYmxlIHRvIHdyaXRlIHRvIFBCQSAxLgorCQkgICBGYWtlIHN1Y2Nlc3MsIGJ1dCBkb24ndCBkbyBhbnl0aGluZy4gKi8KKwkJcHJpbnRrKCJzZGRyMDk6IGF2b2lkIHdyaXRpbmcgdG8gcGJhIDFcbiIpOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJfQorCisJcGFnZWxlbiA9ICgxIDw8IGluZm8tPnBhZ2VzaGlmdCkgKyAoMSA8PCBDT05UUk9MX1NISUZUKTsKKworCS8qIHJlYWQgb2xkIGNvbnRlbnRzICovCisJYWRkcmVzcyA9IChwYmEgPDwgKGluZm8tPnBhZ2VzaGlmdCArIGluZm8tPmJsb2Nrc2hpZnQpKTsKKwlyZXN1bHQgPSBzZGRyMDlfcmVhZDIyKHVzLCBhZGRyZXNzPj4xLCBpbmZvLT5ibG9ja3NpemUsCisJCQkgICAgICAgaW5mby0+cGFnZXNoaWZ0LCBibG9ja2J1ZmZlciwgMCk7CisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCS8qIGNoZWNrIG9sZCBjb250ZW50cyBhbmQgZmlsbCBsYmEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+YmxvY2tzaXplOyBpKyspIHsKKwkJYnB0ciA9IGJsb2NrYnVmZmVyICsgaSpwYWdlbGVuOworCQljcHRyID0gYnB0ciArIGluZm8tPnBhZ2VzaXplOworCQluYW5kX2NvbXB1dGVfZWNjKGJwdHIsIGVjYyk7CisJCWlmICghbmFuZF9jb21wYXJlX2VjYyhjcHRyKzEzLCBlY2MpKSB7CisJCQlVU19ERUJVR1AoIldhcm5pbmc6IGJhZCBlY2MgaW4gcGFnZSAlZC0gb2YgcGJhICVkXG4iLAorCQkJCSAgaSwgcGJhKTsKKwkJCW5hbmRfc3RvcmVfZWNjKGNwdHIrMTMsIGVjYyk7CisJCX0KKwkJbmFuZF9jb21wdXRlX2VjYyhicHRyKyhpbmZvLT5wYWdlc2l6ZSAvIDIpLCBlY2MpOworCQlpZiAoIW5hbmRfY29tcGFyZV9lY2MoY3B0cis4LCBlY2MpKSB7CisJCQlVU19ERUJVR1AoIldhcm5pbmc6IGJhZCBlY2MgaW4gcGFnZSAlZCsgb2YgcGJhICVkXG4iLAorCQkJCSAgaSwgcGJhKTsKKwkJCW5hbmRfc3RvcmVfZWNjKGNwdHIrOCwgZWNjKTsKKwkJfQorCQljcHRyWzZdID0gY3B0clsxMV0gPSBNU0Jfb2YobGJhcCk7CisJCWNwdHJbN10gPSBjcHRyWzEyXSA9IExTQl9vZihsYmFwKTsKKwl9CisKKwkvKiBjb3B5IGluIG5ldyBzdHVmZiBhbmQgY29tcHV0ZSBFQ0MgKi8KKwl4cHRyID0gcHRyOworCWZvciAoaSA9IHBhZ2U7IGkgPCBwYWdlK3BhZ2VzOyBpKyspIHsKKwkJYnB0ciA9IGJsb2NrYnVmZmVyICsgaSpwYWdlbGVuOworCQljcHRyID0gYnB0ciArIGluZm8tPnBhZ2VzaXplOworCQltZW1jcHkoYnB0ciwgeHB0ciwgaW5mby0+cGFnZXNpemUpOworCQl4cHRyICs9IGluZm8tPnBhZ2VzaXplOworCQluYW5kX2NvbXB1dGVfZWNjKGJwdHIsIGVjYyk7CisJCW5hbmRfc3RvcmVfZWNjKGNwdHIrMTMsIGVjYyk7CisJCW5hbmRfY29tcHV0ZV9lY2MoYnB0cisoaW5mby0+cGFnZXNpemUgLyAyKSwgZWNjKTsKKwkJbmFuZF9zdG9yZV9lY2MoY3B0cis4LCBlY2MpOworCX0KKworCVVTX0RFQlVHUCgiUmV3cml0ZSBQQkEgJWQgKExCQSAlZClcbiIsIHBiYSwgbGJhKTsKKworCXJlc3VsdCA9IHNkZHIwOV93cml0ZV9pbnBsYWNlKHVzLCBhZGRyZXNzPj4xLCBpbmZvLT5ibG9ja3NpemUsCisJCQkJICAgICAgaW5mby0+cGFnZXNoaWZ0LCBibG9ja2J1ZmZlciwgMCk7CisKKwlVU19ERUJVR1AoInNkZHIwOV93cml0ZV9pbnBsYWNlIHJldHVybnMgJWRcbiIsIHJlc3VsdCk7CisKKyNpZiAwCisJeworCQl1bnNpZ25lZCBjaGFyIHN0YXR1cyA9IDA7CisJCWludCByZXN1bHQyID0gc2RkcjA5X3JlYWRfc3RhdHVzKHVzLCAmc3RhdHVzKTsKKwkJaWYgKHJlc3VsdDIgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCQlVU19ERUJVR1AoInNkZHIwOV93cml0ZV9pbnBsYWNlOiBjYW5ub3QgcmVhZCBzdGF0dXNcbiIpOworCQllbHNlIGlmIChzdGF0dXMgIT0gMHhjMCkKKwkJCVVTX0RFQlVHUCgic2RkcjA5X3dyaXRlX2lucGxhY2U6IHN0YXR1cyBhZnRlciB3cml0ZTogMHgleFxuIiwKKwkJCQkgIHN0YXR1cyk7CisJfQorI2VuZGlmCisKKyNpZiAwCisJeworCQlpbnQgcmVzdWx0MiA9IHNkZHIwOV90ZXN0X3VuaXRfcmVhZHkodXMpOworCX0KKyNlbmRpZgorCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludAorc2RkcjA5X3dyaXRlX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJICB1bnNpZ25lZCBpbnQgc2VjdG9ycykgeworCisJc3RydWN0IHNkZHIwOV9jYXJkX2luZm8gKmluZm8gPSAoc3RydWN0IHNkZHIwOV9jYXJkX2luZm8gKikgdXMtPmV4dHJhOworCXVuc2lnbmVkIGludCBsYmEsIHBhZ2UsIHBhZ2VzOworCXVuc2lnbmVkIGludCBwYWdlbGVuLCBibG9ja2xlbjsKKwl1bnNpZ25lZCBjaGFyICpibG9ja2J1ZmZlcjsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJdW5zaWduZWQgaW50IGxlbiwgaW5kZXgsIG9mZnNldDsKKwlpbnQgcmVzdWx0OworCisJLy8gYmxvY2tidWZmZXIgaXMgdXNlZCBmb3IgcmVhZGluZyBpbiB0aGUgb2xkIGRhdGEsIG92ZXJ3cml0aW5nCisJLy8gd2l0aCB0aGUgbmV3IGRhdGEsIGFuZCBwZXJmb3JtaW5nIEVDQyBjYWxjdWxhdGlvbnMKKworCS8qIFRPRE86IGluc3RlYWQgb2YgZG9pbmcga21hbGxvYy9rZnJlZSBmb3IgZWFjaCB3cml0ZSwKKwkgICBhZGQgYSBidWZmZXJwb2ludGVyIHRvIHRoZSBpbmZvIHN0cnVjdHVyZSAqLworCisJcGFnZWxlbiA9ICgxIDw8IGluZm8tPnBhZ2VzaGlmdCkgKyAoMSA8PCBDT05UUk9MX1NISUZUKTsKKwlibG9ja2xlbiA9IChwYWdlbGVuIDw8IGluZm8tPmJsb2Nrc2hpZnQpOworCWJsb2NrYnVmZmVyID0ga21hbGxvYyhibG9ja2xlbiwgR0ZQX05PSU8pOworCWlmICghYmxvY2tidWZmZXIpIHsKKwkJcHJpbnRrKCJzZGRyMDlfd3JpdGVfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJLy8gU2luY2Ugd2UgZG9uJ3Qgd3JpdGUgdGhlIHVzZXIgZGF0YSBkaXJlY3RseSB0byB0aGUgZGV2aWNlLAorCS8vIHdlIGhhdmUgdG8gY3JlYXRlIGEgYm91bmNlIGJ1ZmZlciBhbmQgbW92ZSB0aGUgZGF0YSBhIHBpZWNlCisJLy8gYXQgYSB0aW1lIGJldHdlZW4gdGhlIGJvdW5jZSBidWZmZXIgYW5kIHRoZSBhY3R1YWwgdHJhbnNmZXIgYnVmZmVyLgorCisJbGVuID0gbWluKHNlY3RvcnMsICh1bnNpZ25lZCBpbnQpIGluZm8tPmJsb2Nrc2l6ZSkgKiBpbmZvLT5wYWdlc2l6ZTsKKwlidWZmZXIgPSBrbWFsbG9jKGxlbiwgR0ZQX05PSU8pOworCWlmIChidWZmZXIgPT0gTlVMTCkgeworCQlwcmludGsoInNkZHIwOV93cml0ZV9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJa2ZyZWUoYmxvY2tidWZmZXIpOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKworCS8vIEZpZ3VyZSBvdXQgdGhlIGluaXRpYWwgTEJBIGFuZCBwYWdlCisJbGJhID0gYWRkcmVzcyA+PiBpbmZvLT5ibG9ja3NoaWZ0OworCXBhZ2UgPSAoYWRkcmVzcyAmIGluZm8tPmJsb2NrbWFzayk7CisKKwlyZXN1bHQgPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwlpbmRleCA9IG9mZnNldCA9IDA7CisKKwl3aGlsZSAoc2VjdG9ycyA+IDApIHsKKworCQkvLyBXcml0ZSBhcyBtYW55IHNlY3RvcnMgYXMgcG9zc2libGUgaW4gdGhpcyBibG9jaworCisJCXBhZ2VzID0gbWluKHNlY3RvcnMsIGluZm8tPmJsb2Nrc2l6ZSAtIHBhZ2UpOworCQlsZW4gPSAocGFnZXMgPDwgaW5mby0+cGFnZXNoaWZ0KTsKKworCQkvLyBHZXQgdGhlIGRhdGEgZnJvbSB0aGUgdHJhbnNmZXIgYnVmZmVyCisJCXVzYl9zdG9yX2FjY2Vzc194ZmVyX2J1ZihidWZmZXIsIGxlbiwgdXMtPnNyYiwKKwkJCQkmaW5kZXgsICZvZmZzZXQsIEZST01fWEZFUl9CVUYpOworCisJCXJlc3VsdCA9IHNkZHIwOV93cml0ZV9sYmEodXMsIGxiYSwgcGFnZSwgcGFnZXMsCisJCQkJYnVmZmVyLCBibG9ja2J1ZmZlcik7CisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCQlicmVhazsKKworCQlwYWdlID0gMDsKKwkJbGJhKys7CisJCXNlY3RvcnMgLT0gcGFnZXM7CisJfQorCisJa2ZyZWUoYnVmZmVyKTsKKwlrZnJlZShibG9ja2J1ZmZlcik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50CitzZGRyMDlfcmVhZF9jb250cm9sKHN0cnVjdCB1c19kYXRhICp1cywKKwkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQl1bnNpZ25lZCBpbnQgYmxvY2tzLAorCQl1bnNpZ25lZCBjaGFyICpjb250ZW50LAorCQlpbnQgdXNlX3NnKSB7CisKKwlVU19ERUJVR1AoIlJlYWQgY29udHJvbCBhZGRyZXNzICVsdSwgYmxvY2tzICVkXG4iLAorCQlhZGRyZXNzLCBibG9ja3MpOworCisJcmV0dXJuIHNkZHIwOV9yZWFkMjEodXMsIGFkZHJlc3MsIGJsb2NrcywKKwkJCSAgICAgQ09OVFJPTF9TSElGVCwgY29udGVudCwgdXNlX3NnKTsKK30KKworLyoKKyAqIFJlYWQgRGV2aWNlIElEIENvbW1hbmQ6IDEyIGJ5dGVzLgorICogYnl0ZSAwOiBvcGNvZGU6IEVECisgKgorICogUmV0dXJucyAyIGJ5dGVzOiBNYW51ZmFjdHVyZXIgSUQgYW5kIERldmljZSBJRC4KKyAqIE9uIG1vcmUgcmVjZW50IGNhcmRzIDMgYnl0ZXM6IHRoZSB0aGlyZCBieXRlIGlzIGFuIG9wdGlvbiBjb2RlIEE1CisgKiBzaWduaWZ5aW5nIHRoYXQgdGhlIHNlY3JldCBjb21tYW5kIHRvIHJlYWQgYW4gMTI4LWJpdCBJRCBpcyBhdmFpbGFibGUuCisgKiBPbiBzdGlsbCBtb3JlIHJlY2VudCBjYXJkcyA0IGJ5dGVzOiB0aGUgZm91cnRoIGJ5dGUgQzAgbWVhbnMgdGhhdAorICogYSBzZWNvbmQgcmVhZCBJRCBjbWQgaXMgYXZhaWxhYmxlLgorICovCitzdGF0aWMgaW50CitzZGRyMDlfcmVhZF9kZXZpY2VJRChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGNoYXIgKmRldmljZUlEKSB7CisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKwl1bnNpZ25lZCBjaGFyICpjb250ZW50ID0gdXMtPmlvYnVmOworCWludCByZXN1bHQsIGk7CisKKwltZW1zZXQoY29tbWFuZCwgMCwgMTIpOworCWNvbW1hbmRbMF0gPSAweEVEOworCWNvbW1hbmRbMV0gPSBMVU5CSVRTOworCisJcmVzdWx0ID0gc2RkcjA5X3NlbmRfc2NzaV9jb21tYW5kKHVzLCBjb21tYW5kLCAxMik7CisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCB1cy0+cmVjdl9idWxrX3BpcGUsCisJCQljb250ZW50LCA2NCwgTlVMTCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlkZXZpY2VJRFtpXSA9IGNvbnRlbnRbaV07CisKKwlyZXR1cm4gKHJlc3VsdCA9PSBVU0JfU1RPUl9YRkVSX0dPT0QgPworCQkJVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QgOiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1IpOworfQorCitzdGF0aWMgaW50CitzZGRyMDlfZ2V0X3dwKHN0cnVjdCB1c19kYXRhICp1cywgc3RydWN0IHNkZHIwOV9jYXJkX2luZm8gKmluZm8pIHsKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIgc3RhdHVzOworCisJcmVzdWx0ID0gc2RkcjA5X3JlYWRfc3RhdHVzKHVzLCAmc3RhdHVzKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSB7CisJCVVTX0RFQlVHUCgic2RkcjA5X2dldF93cDogcmVhZF9zdGF0dXMgZmFpbHNcbiIpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwlVU19ERUJVR1AoInNkZHIwOV9nZXRfd3A6IHN0YXR1cyAweCUwMlgiLCBzdGF0dXMpOworCWlmICgoc3RhdHVzICYgMHg4MCkgPT0gMCkgeworCQlpbmZvLT5mbGFncyB8PSBTRERSMDlfV1A7CS8qIHdyaXRlIHByb3RlY3RlZCAqLworCQlVU19ERUJVR1AoIiBXUCIpOworCX0KKwlpZiAoc3RhdHVzICYgMHg0MCkKKwkJVVNfREVCVUdQKCIgUmVhZHkiKTsKKwlpZiAoc3RhdHVzICYgTFVOQklUUykKKwkJVVNfREVCVUdQKCIgU3VzcGVuZGVkIik7CisJaWYgKHN0YXR1cyAmIDB4MSkKKwkJVVNfREVCVUdQKCIgRXJyb3IiKTsKKwlVU19ERUJVR1AoIlxuIik7CisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCisjaWYgMAorLyoKKyAqIFJlc2V0IENvbW1hbmQ6IDEyIGJ5dGVzLgorICogYnl0ZSAwOiBvcGNvZGU6IEVCCisgKi8KK3N0YXRpYyBpbnQKK3NkZHIwOV9yZXNldChzdHJ1Y3QgdXNfZGF0YSAqdXMpIHsKKworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisKKwltZW1zZXQoY29tbWFuZCwgMCwgMTIpOworCWNvbW1hbmRbMF0gPSAweEVCOworCWNvbW1hbmRbMV0gPSBMVU5CSVRTOworCisJcmV0dXJuIHNkZHIwOV9zZW5kX3Njc2lfY29tbWFuZCh1cywgY29tbWFuZCwgMTIpOworfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9mbGFzaF9kZXYgKgorc2RkcjA5X2dldF9jYXJkaW5mbyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGNoYXIgZmxhZ3MpIHsKKwlzdHJ1Y3QgbmFuZF9mbGFzaF9kZXYgKmNhcmRpbmZvOworCXVuc2lnbmVkIGNoYXIgZGV2aWNlSURbNF07CisJY2hhciBibHVyYnR4dFsyNTZdOworCWludCByZXN1bHQ7CisKKwlVU19ERUJVR1AoIlJlYWRpbmcgY2FwYWNpdHkuLi5cbiIpOworCisJcmVzdWx0ID0gc2RkcjA5X3JlYWRfZGV2aWNlSUQodXMsIGRldmljZUlEKTsKKworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJVVNfREVCVUdQKCJSZXN1bHQgb2YgcmVhZF9kZXZpY2VJRCBpcyAlZFxuIiwgcmVzdWx0KTsKKwkJcHJpbnRrKCJzZGRyMDk6IGNvdWxkIG5vdCByZWFkIGNhcmQgaW5mb1xuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCXNwcmludGYoYmx1cmJ0eHQsICJzZGRyMDk6IEZvdW5kIEZsYXNoIGNhcmQsIElEID0gJTAyWCAlMDJYICUwMlggJTAyWCIsCisJCWRldmljZUlEWzBdLCBkZXZpY2VJRFsxXSwgZGV2aWNlSURbMl0sIGRldmljZUlEWzNdKTsKKworCS8qIEJ5dGUgMCBpcyB0aGUgbWFudWZhY3R1cmVyICovCisJc3ByaW50ZihibHVyYnR4dCArIHN0cmxlbihibHVyYnR4dCksCisJCSI6IE1hbnVmLiAlcyIsCisJCW5hbmRfZmxhc2hfbWFudWZhY3R1cmVyKGRldmljZUlEWzBdKSk7CisKKwkvKiBCeXRlIDEgaXMgdGhlIGRldmljZSB0eXBlICovCisJY2FyZGluZm8gPSBuYW5kX2ZpbmRfaWQoZGV2aWNlSURbMV0pOworCWlmIChjYXJkaW5mbykgeworCQkvKiBNQiBvciBNaUI/IEl0IGlzIG5laXRoZXIuIEEgMTYgTUIgY2FyZCBoYXMKKwkJICAgMTczMDE1MDQgcmF3IGJ5dGVzLCBvZiB3aGljaCAxNjM4NDAwMCBhcmUKKwkJICAgdXNhYmxlIGZvciB1c2VyIGRhdGEuICovCisJCXNwcmludGYoYmx1cmJ0eHQgKyBzdHJsZW4oYmx1cmJ0eHQpLAorCQkJIiwgJWQgTUIiLCAxPDwoY2FyZGluZm8tPmNoaXBzaGlmdCAtIDIwKSk7CisJfSBlbHNlIHsKKwkJc3ByaW50ZihibHVyYnR4dCArIHN0cmxlbihibHVyYnR4dCksCisJCQkiLCB0eXBlIHVucmVjb2duaXplZCIpOworCX0KKworCS8qIEJ5dGUgMiBpcyBjb2RlIHRvIHNpZ25hbCBhdmFpbGFiaWxpdHkgb2YgMTI4LWJpdCBJRCAqLworCWlmIChkZXZpY2VJRFsyXSA9PSAweGE1KSB7CisJCXNwcmludGYoYmx1cmJ0eHQgKyBzdHJsZW4oYmx1cmJ0eHQpLAorCQkJIiwgMTI4LWJpdCBJRCIpOworCX0KKworCS8qIEJ5dGUgMyBhbm5vdW5jZXMgdGhlIGF2YWlsYWJpbGl0eSBvZiBhbm90aGVyIHJlYWQgSUQgY29tbWFuZCAqLworCWlmIChkZXZpY2VJRFszXSA9PSAweGMwKSB7CisJCXNwcmludGYoYmx1cmJ0eHQgKyBzdHJsZW4oYmx1cmJ0eHQpLAorCQkJIiwgZXh0cmEgY21kIik7CisJfQorCisJaWYgKGZsYWdzICYgU0REUjA5X1dQKQorCQlzcHJpbnRmKGJsdXJidHh0ICsgc3RybGVuKGJsdXJidHh0KSwKKwkJCSIsIFdQIik7CisKKwlwcmludGsoIiVzXG4iLCBibHVyYnR4dCk7CisKKwlyZXR1cm4gY2FyZGluZm87Cit9CisKK3N0YXRpYyBpbnQKK3NkZHIwOV9yZWFkX21hcChzdHJ1Y3QgdXNfZGF0YSAqdXMpIHsKKworCXN0cnVjdCBzZGRyMDlfY2FyZF9pbmZvICppbmZvID0gKHN0cnVjdCBzZGRyMDlfY2FyZF9pbmZvICopIHVzLT5leHRyYTsKKwlpbnQgbnVtYmxvY2tzLCBhbGxvY19sZW4sIGFsbG9jX2Jsb2NrczsKKwlpbnQgaSwgaiwgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgKmJ1ZmZlcl9lbmQsICpwdHI7CisJdW5zaWduZWQgaW50IGxiYSwgbGJhY3Q7CisKKwlpZiAoIWluZm8tPmNhcGFjaXR5KQorCQlyZXR1cm4gLTE7CisKKwkvLyBzaXplIG9mIGEgYmxvY2sgaXMgMSA8PCAoYmxvY2tzaGlmdCArIHBhZ2VzaGlmdCkgYnl0ZXMKKwkvLyBkaXZpZGUgaW50byB0aGUgdG90YWwgY2FwYWNpdHkgdG8gZ2V0IHRoZSBudW1iZXIgb2YgYmxvY2tzCisKKwludW1ibG9ja3MgPSBpbmZvLT5jYXBhY2l0eSA+PiAoaW5mby0+YmxvY2tzaGlmdCArIGluZm8tPnBhZ2VzaGlmdCk7CisKKwkvLyByZWFkIDY0IGJ5dGVzIGZvciBldmVyeSBibG9jayAoYWN0dWFsbHkgMSA8PCBDT05UUk9MX1NISUZUKQorCS8vIGJ1dCBvbmx5IHVzZSBhIDY0IEtCIGJ1ZmZlcgorCS8vIGJ1ZmZlciBzaXplIHVzZWQgbXVzdCBiZSBhIG11bHRpcGxlIG9mICgxIDw8IENPTlRST0xfU0hJRlQpCisjZGVmaW5lIFNERFIwOV9SRUFEX01BUF9CVUZTWiA2NTUzNgorCisJYWxsb2NfYmxvY2tzID0gbWluKG51bWJsb2NrcywgU0REUjA5X1JFQURfTUFQX0JVRlNaID4+IENPTlRST0xfU0hJRlQpOworCWFsbG9jX2xlbiA9IChhbGxvY19ibG9ja3MgPDwgQ09OVFJPTF9TSElGVCk7CisJYnVmZmVyID0ga21hbGxvYyhhbGxvY19sZW4sIEdGUF9OT0lPKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpIHsKKwkJcHJpbnRrKCJzZGRyMDlfcmVhZF9tYXA6IG91dCBvZiBtZW1vcnlcbiIpOworCQlyZXN1bHQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKwlidWZmZXJfZW5kID0gYnVmZmVyICsgYWxsb2NfbGVuOworCisjdW5kZWYgU0REUjA5X1JFQURfTUFQX0JVRlNaCisKKwlrZnJlZShpbmZvLT5sYmFfdG9fcGJhKTsKKwlrZnJlZShpbmZvLT5wYmFfdG9fbGJhKTsKKwlpbmZvLT5sYmFfdG9fcGJhID0ga21hbGxvYyhudW1ibG9ja3Mqc2l6ZW9mKGludCksIEdGUF9OT0lPKTsKKwlpbmZvLT5wYmFfdG9fbGJhID0ga21hbGxvYyhudW1ibG9ja3Mqc2l6ZW9mKGludCksIEdGUF9OT0lPKTsKKworCWlmIChpbmZvLT5sYmFfdG9fcGJhID09IE5VTEwgfHwgaW5mby0+cGJhX3RvX2xiYSA9PSBOVUxMKSB7CisJCXByaW50aygic2RkcjA5X3JlYWRfbWFwOiBvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmVzdWx0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtYmxvY2tzOyBpKyspCisJCWluZm8tPmxiYV90b19wYmFbaV0gPSBpbmZvLT5wYmFfdG9fbGJhW2ldID0gVU5ERUY7CisKKwkvKgorCSAqIERlZmluZSBsYmEtcGJhIHRyYW5zbGF0aW9uIHRhYmxlCisJICovCisKKwlwdHIgPSBidWZmZXJfZW5kOworCWZvciAoaSA9IDA7IGkgPCBudW1ibG9ja3M7IGkrKykgeworCQlwdHIgKz0gKDEgPDwgQ09OVFJPTF9TSElGVCk7CisJCWlmIChwdHIgPj0gYnVmZmVyX2VuZCkgeworCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzOworCisJCQlhZGRyZXNzID0gaSA8PCAoaW5mby0+cGFnZXNoaWZ0ICsgaW5mby0+YmxvY2tzaGlmdCk7CisJCQlyZXN1bHQgPSBzZGRyMDlfcmVhZF9jb250cm9sKAorCQkJCXVzLCBhZGRyZXNzPj4xLAorCQkJCW1pbihhbGxvY19ibG9ja3MsIG51bWJsb2NrcyAtIGkpLAorCQkJCWJ1ZmZlciwgMCk7CisJCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSB7CisJCQkJcmVzdWx0ID0gLTE7CisJCQkJZ290byBkb25lOworCQkJfQorCQkJcHRyID0gYnVmZmVyOworCQl9CisKKwkJaWYgKGkgPT0gMCB8fCBpID09IDEpIHsKKwkJCWluZm8tPnBiYV90b19sYmFbaV0gPSBVTlVTQUJMRTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogc3BlY2lhbCBQQkFzIGhhdmUgY29udHJvbCBmaWVsZCAwXjE2ICovCisJCWZvciAoaiA9IDA7IGogPCAxNjsgaisrKQorCQkJaWYgKHB0cltqXSAhPSAwKQorCQkJCWdvdG8gbm9uejsKKwkJaW5mby0+cGJhX3RvX2xiYVtpXSA9IFVOVVNBQkxFOworCQlwcmludGsoInNkZHIwOTogUEJBICVkIGhhcyBubyBsb2dpY2FsIG1hcHBpbmdcbiIsIGkpOworCQljb250aW51ZTsKKworCW5vbno6CisJCS8qIHVud3JpdHRlbiBQQkFzIGhhdmUgY29udHJvbCBmaWVsZCBGRl4xNiAqLworCQlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykKKwkJCWlmIChwdHJbal0gIT0gMHhmZikKKwkJCQlnb3RvIG5vbmZmOworCQljb250aW51ZTsKKworCW5vbmZmOgorCQkvKiBub3JtYWwgUEJBcyBzdGFydCB3aXRoIHNpeCBGRnMgKi8KKwkJaWYgKGogPCA2KSB7CisJCQlwcmludGsoInNkZHIwOTogUEJBICVkIGhhcyBubyBsb2dpY2FsIG1hcHBpbmc6ICIKKwkJCSAgICAgICAicmVzZXJ2ZWQgYXJlYSA9ICUwMlglMDJYJTAyWCUwMlggIgorCQkJICAgICAgICJkYXRhIHN0YXR1cyAlMDJYIGJsb2NrIHN0YXR1cyAlMDJYXG4iLAorCQkJICAgICAgIGksIHB0clswXSwgcHRyWzFdLCBwdHJbMl0sIHB0clszXSwKKwkJCSAgICAgICBwdHJbNF0sIHB0cls1XSk7CisJCQlpbmZvLT5wYmFfdG9fbGJhW2ldID0gVU5VU0FCTEU7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICgocHRyWzZdID4+IDQpICE9IDB4MDEpIHsKKwkJCXByaW50aygic2RkcjA5OiBQQkEgJWQgaGFzIGludmFsaWQgYWRkcmVzcyBmaWVsZCAiCisJCQkgICAgICAgIiUwMlglMDJYLyUwMlglMDJYXG4iLAorCQkJICAgICAgIGksIHB0cls2XSwgcHRyWzddLCBwdHJbMTFdLCBwdHJbMTJdKTsKKwkJCWluZm8tPnBiYV90b19sYmFbaV0gPSBVTlVTQUJMRTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogY2hlY2sgZXZlbiBwYXJpdHkgKi8KKwkJaWYgKHBhcml0eVtwdHJbNl0gXiBwdHJbN11dKSB7CisJCQlwcmludGsoInNkZHIwOTogQmFkIHBhcml0eSBpbiBMQkEgZm9yIGJsb2NrICVkIgorCQkJICAgICAgICIgKCUwMlggJTAyWClcbiIsIGksIHB0cls2XSwgcHRyWzddKTsKKwkJCWluZm8tPnBiYV90b19sYmFbaV0gPSBVTlVTQUJMRTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbGJhID0gc2hvcnRfcGFjayhwdHJbN10sIHB0cls2XSk7CisJCWxiYSA9IChsYmEgJiAweDA3RkYpID4+IDE7CisKKwkJLyoKKwkJICogRXZlcnkgMTAyNCBwaHlzaWNhbCBibG9ja3MgKCJ6b25lIiksIHRoZSBMQkEgbnVtYmVycworCQkgKiBnbyBiYWNrIHRvIHplcm8sIGJ1dCBhcmUgd2l0aGluIGEgaGlnaGVyIGJsb2NrIG9mIExCQSdzLgorCQkgKiBBbHNvLCB0aGVyZSBpcyBhIG1heGltdW0gb2YgMTAwMCBMQkEncyBwZXIgem9uZS4KKwkJICogSW4gb3RoZXIgd29yZHMsIGluIFBCQSAxMDI0LTIwNDcgeW91IHdpbGwgZmluZCBMQkEgMC05OTkKKwkJICogd2hpY2ggYXJlIHJlYWxseSBMQkEgMTAwMC0xOTk5LiBUaGlzIGFsbG93cyBmb3IgMjQgYmFkCisJCSAqIG9yIHNwZWNpYWwgcGh5c2ljYWwgYmxvY2tzIHBlciB6b25lLgorCQkgKi8KKworCQlpZiAobGJhID49IDEwMDApIHsKKwkJCXByaW50aygic2RkcjA5OiBCYWQgbG93IExCQSAlZCBmb3IgYmxvY2sgJWRcbiIsCisJCQkgICAgICAgbGJhLCBpKTsKKwkJCWdvdG8gcG9zc2libHlfZXJhc2U7CisJCX0KKworCQlsYmEgKz0gMTAwMCooaS8weDQwMCk7CisKKwkJaWYgKGluZm8tPmxiYV90b19wYmFbbGJhXSAhPSBVTkRFRikgeworCQkJcHJpbnRrKCJzZGRyMDk6IExCQSAlZCBzZWVuIGZvciBQQkEgJWQgYW5kICVkXG4iLAorCQkJICAgICAgIGxiYSwgaW5mby0+bGJhX3RvX3BiYVtsYmFdLCBpKTsKKwkJCWdvdG8gcG9zc2libHlfZXJhc2U7CisJCX0KKworCQlpbmZvLT5wYmFfdG9fbGJhW2ldID0gbGJhOworCQlpbmZvLT5sYmFfdG9fcGJhW2xiYV0gPSBpOworCQljb250aW51ZTsKKworCXBvc3NpYmx5X2VyYXNlOgorCQlpZiAoZXJhc2VfYmFkX2xiYV9lbnRyaWVzKSB7CisJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisKKwkJCWFkZHJlc3MgPSAoaSA8PCAoaW5mby0+cGFnZXNoaWZ0ICsgaW5mby0+YmxvY2tzaGlmdCkpOworCQkJc2RkcjA5X2VyYXNlKHVzLCBhZGRyZXNzPj4xKTsKKwkJCWluZm8tPnBiYV90b19sYmFbaV0gPSBVTkRFRjsKKwkJfSBlbHNlCisJCQlpbmZvLT5wYmFfdG9fbGJhW2ldID0gVU5VU0FCTEU7CisJfQorCisJLyoKKwkgKiBBcHByb3hpbWF0ZSBjYXBhY2l0eS4gVGhpcyBpcyBub3QgZW50aXJlbHkgY29ycmVjdCB5ZXQsCisJICogc2luY2UgYSB6b25lIHdpdGggbGVzcyB0aGFuIDEwMDAgdXNhYmxlIHBhZ2VzIGxlYWRzIHRvCisJICogbWlzc2luZyBMQkFzLiBFc3BlY2lhbGx5IGlmIGl0IGlzIHRoZSBsYXN0IHpvbmUsIHNvbWUKKwkgKiBMQkFzIGNhbiBiZSBwYXN0IGNhcGFjaXR5LgorCSAqLworCWxiYWN0ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtYmxvY2tzOyBpICs9IDEwMjQpIHsKKwkJaW50IGN0ID0gMDsKKworCQlmb3IgKGogPSAwOyBqIDwgMTAyNCAmJiBpK2ogPCBudW1ibG9ja3M7IGorKykgeworCQkJaWYgKGluZm8tPnBiYV90b19sYmFbaStqXSAhPSBVTlVTQUJMRSkgeworCQkJCWlmIChjdCA+PSAxMDAwKQorCQkJCQlpbmZvLT5wYmFfdG9fbGJhW2kral0gPSBTUEFSRTsKKwkJCQllbHNlCisJCQkJCWN0Kys7CisJCQl9CisJCX0KKwkJbGJhY3QgKz0gY3Q7CisJfQorCWluZm8tPmxiYWN0ID0gbGJhY3Q7CisJVVNfREVCVUdQKCJGb3VuZCAlZCBMQkEnc1xuIiwgbGJhY3QpOworCXJlc3VsdCA9IDA7CisKKyBkb25lOgorCWlmIChyZXN1bHQgIT0gMCkgeworCQlrZnJlZShpbmZvLT5sYmFfdG9fcGJhKTsKKwkJa2ZyZWUoaW5mby0+cGJhX3RvX2xiYSk7CisJCWluZm8tPmxiYV90b19wYmEgPSBOVUxMOworCQlpbmZvLT5wYmFfdG9fbGJhID0gTlVMTDsKKwl9CisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorc2RkcjA5X2NhcmRfaW5mb19kZXN0cnVjdG9yKHZvaWQgKmV4dHJhKSB7CisJc3RydWN0IHNkZHIwOV9jYXJkX2luZm8gKmluZm8gPSAoc3RydWN0IHNkZHIwOV9jYXJkX2luZm8gKilleHRyYTsKKworCWlmICghaW5mbykKKwkJcmV0dXJuOworCisJa2ZyZWUoaW5mby0+bGJhX3RvX3BiYSk7CisJa2ZyZWUoaW5mby0+cGJhX3RvX2xiYSk7Cit9CisKK3N0YXRpYyB2b2lkCitzZGRyMDlfaW5pdF9jYXJkX2luZm8oc3RydWN0IHVzX2RhdGEgKnVzKSB7CisJaWYgKCF1cy0+ZXh0cmEpIHsKKwkJdXMtPmV4dHJhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNkZHIwOV9jYXJkX2luZm8pLCBHRlBfTk9JTyk7CisJCWlmICh1cy0+ZXh0cmEpIHsKKwkJCW1lbXNldCh1cy0+ZXh0cmEsIDAsIHNpemVvZihzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbykpOworCQkJdXMtPmV4dHJhX2Rlc3RydWN0b3IgPSBzZGRyMDlfY2FyZF9pbmZvX2Rlc3RydWN0b3I7CisJCX0KKwl9Cit9CisKKy8qCisgKiBUaGlzIGlzIG5lZWRlZCBhdCBhIHZlcnkgZWFybHkgc3RhZ2UuIElmIHRoaXMgaXMgbm90IGxpc3RlZCBpbiB0aGUKKyAqIHVudXN1YWwgZGV2aWNlcyBsaXN0IGJ1dCBjYWxsZWQgZnJvbSBoZXJlIHRoZW4gTFVOIDAgb2YgdGhlIGNvbWJvIHJlYWRlcgorICogaXMgbm90IHJlY29nbml6ZWQuIEJ1dCBJIGRvIG5vdCBrbm93IHdoYXQgcHJlY2lzZWx5IHRoZXNlIGNhbGxzIGRvLgorICovCitpbnQKK3NkZHIwOV9pbml0KHN0cnVjdCB1c19kYXRhICp1cykgeworCWludCByZXN1bHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVzLT5pb2J1ZjsKKworCXJlc3VsdCA9IHNkZHIwOV9zZW5kX2NvbW1hbmQodXMsIDB4MDEsIFVTQl9ESVJfSU4sIGRhdGEsIDIpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJVVNfREVCVUdQKCJzZGRyMDlfaW5pdDogc2VuZF9jb21tYW5kIGZhaWxzXG4iKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwlVU19ERUJVR1AoIlNERFIwOWluaXQ6ICUwMlggJTAyWFxuIiwgZGF0YVswXSwgZGF0YVsxXSk7CisJLy8gZ2V0IDA3IDAyCisKKwlyZXN1bHQgPSBzZGRyMDlfc2VuZF9jb21tYW5kKHVzLCAweDA4LCBVU0JfRElSX0lOLCBkYXRhLCAyKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSB7CisJCVVTX0RFQlVHUCgic2RkcjA5X2luaXQ6IDJuZCBzZW5kX2NvbW1hbmQgZmFpbHNcbiIpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCVVTX0RFQlVHUCgiU0REUjA5aW5pdDogJTAyWCAlMDJYXG4iLCBkYXRhWzBdLCBkYXRhWzFdKTsKKwkvLyBnZXQgMDcgMDAKKworCXJlc3VsdCA9IHNkZHIwOV9yZXF1ZXN0X3NlbnNlKHVzLCBkYXRhLCAxOCk7CisJaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCAmJiBkYXRhWzJdICE9IDApIHsKKwkJaW50IGo7CisJCWZvciAoaj0wOyBqPDE4OyBqKyspCisJCQlwcmludGsoIiAlMDJYIiwgZGF0YVtqXSk7CisJCXByaW50aygiXG4iKTsKKwkJLy8gZ2V0IDcwIDAwIDAwIDAwIDAwIDAwIDAwICogMDAgMDAgMDAgMDAgMDAgMDAKKwkJLy8gNzA6IGN1cnJlbnQgY29tbWFuZAorCQkvLyBzZW5zZSBrZXkgMCwgc2Vuc2UgY29kZSAwLCBleHRkIHNlbnNlIGNvZGUgMAorCQkvLyBhZGRpdGlvbmFsIHRyYW5zZmVyIGxlbmd0aCAqID0gc2l6ZW9mKGRhdGEpIC0gNworCQkvLyBPcjogNzAgMDAgMDYgMDAgMDAgMDAgMDAgMGIgMDAgMDAgMDAgMDAgMjggMDAgMDAgMDAgMDAgMDAKKwkJLy8gc2Vuc2Uga2V5IDA2LCBzZW5zZSBjb2RlIDI4OiB1bml0IGF0dGVudGlvbiwKKwkJLy8gbm90IHJlYWR5IHRvIHJlYWR5IHRyYW5zaXRpb24KKwl9CisKKwkvLyB0ZXN0IHVuaXQgcmVhZHkKKworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsJCS8qIG5vdCByZXN1bHQgKi8KK30KKworLyoKKyAqIFRyYW5zcG9ydCBmb3IgdGhlIFNhbmRpc2sgU0REUi0wOQorICovCitpbnQgc2RkcjA5X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBzZW5zZWtleSA9IDAsIHNlbnNlY29kZSA9IDA7CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgaGF2ZWZha2VzZW5zZSA9IDA7CisJaW50IHJlc3VsdCwgaTsKKwl1bnNpZ25lZCBjaGFyICpwdHIgPSB1cy0+aW9idWY7CisJdW5zaWduZWQgbG9uZyBjYXBhY2l0eTsKKwl1bnNpZ25lZCBpbnQgcGFnZSwgcGFnZXM7CisKKwlzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyAqaW5mbzsKKworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGlucXVpcnlfcmVzcG9uc2VbOF0gPSB7CisJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDIsIDB4MUYsIDB4MDAsIDB4MDAsIDB4MDAKKwl9OworCisJLyogbm90ZTogbm8gYmxvY2sgZGVzY3JpcHRvciBzdXBwb3J0ICovCisJc3RhdGljIHVuc2lnbmVkIGNoYXIgbW9kZV9wYWdlXzAxWzE5XSA9IHsKKwkJMHgwMCwgMHgwRiwgMHgwMCwgMHgwLCAweDAsIDB4MCwgMHgwMCwKKwkJMHgwMSwgMHgwQSwKKwkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorCX07CisKKwlpbmZvID0gKHN0cnVjdCBzZGRyMDlfY2FyZF9pbmZvICopdXMtPmV4dHJhOworCWlmICghaW5mbykgeworCQluYW5kX2luaXRfZWNjKCk7CisJCXNkZHIwOV9pbml0X2NhcmRfaW5mbyh1cyk7CisJCWluZm8gPSAoc3RydWN0IHNkZHIwOV9jYXJkX2luZm8gKil1cy0+ZXh0cmE7CisJCWlmICghaW5mbykKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBSRVFVRVNUX1NFTlNFICYmIGhhdmVmYWtlc2Vuc2UpIHsKKwkJLyogZm9yIGEgZmFrZWQgY29tbWFuZCwgd2UgaGF2ZSB0byBmb2xsb3cgd2l0aCBhIGZha2VkIHNlbnNlICovCisJCW1lbXNldChwdHIsIDAsIDE4KTsKKwkJcHRyWzBdID0gMHg3MDsKKwkJcHRyWzJdID0gc2Vuc2VrZXk7CisJCXB0cls3XSA9IDExOworCQlwdHJbMTJdID0gc2Vuc2Vjb2RlOworCQl1c2Jfc3Rvcl9zZXRfeGZlcl9idWYocHRyLCAxOCwgc3JiKTsKKwkJc2Vuc2VrZXkgPSBzZW5zZWNvZGUgPSBoYXZlZmFrZXNlbnNlID0gMDsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCX0KKworCWhhdmVmYWtlc2Vuc2UgPSAxOworCisJLyogRHVtbXkgdXAgYSByZXNwb25zZSBmb3IgSU5RVUlSWSBzaW5jZSBTRERSMDkgZG9lc24ndAorCSAgIHJlc3BvbmQgdG8gSU5RVUlSWSBjb21tYW5kcyAqLworCisJaWYgKHNyYi0+Y21uZFswXSA9PSBJTlFVSVJZKSB7CisJCW1lbWNweShwdHIsIGlucXVpcnlfcmVzcG9uc2UsIDgpOworCQlmaWxsX2lucXVpcnlfcmVzcG9uc2UodXMsIHB0ciwgMzYpOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBSRUFEX0NBUEFDSVRZKSB7CisJCXN0cnVjdCBuYW5kX2ZsYXNoX2RldiAqY2FyZGluZm87CisKKwkJc2RkcjA5X2dldF93cCh1cywgaW5mbyk7CS8qIHJlYWQgV1AgYml0ICovCisKKwkJY2FyZGluZm8gPSBzZGRyMDlfZ2V0X2NhcmRpbmZvKHVzLCBpbmZvLT5mbGFncyk7CisJCWlmICghY2FyZGluZm8pIHsKKwkJCS8qIHByb2JhYmx5IG5vIG1lZGlhICovCisJCWluaXRfZXJyb3I6CisJCQlzZW5zZWtleSA9IDB4MDI7CS8qIG5vdCByZWFkeSAqLworCQkJc2Vuc2Vjb2RlID0gMHgzYTsJLyogbWVkaXVtIG5vdCBwcmVzZW50ICovCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkJfQorCisJCWluZm8tPmNhcGFjaXR5ID0gKDEgPDwgY2FyZGluZm8tPmNoaXBzaGlmdCk7CisJCWluZm8tPnBhZ2VzaGlmdCA9IGNhcmRpbmZvLT5wYWdlc2hpZnQ7CisJCWluZm8tPnBhZ2VzaXplID0gKDEgPDwgaW5mby0+cGFnZXNoaWZ0KTsKKwkJaW5mby0+YmxvY2tzaGlmdCA9IGNhcmRpbmZvLT5ibG9ja3NoaWZ0OworCQlpbmZvLT5ibG9ja3NpemUgPSAoMSA8PCBpbmZvLT5ibG9ja3NoaWZ0KTsKKwkJaW5mby0+YmxvY2ttYXNrID0gaW5mby0+YmxvY2tzaXplIC0gMTsKKworCQkvLyBtYXAgaW5pdGlhbGl6YXRpb24sIG11c3QgZm9sbG93IGdldF9jYXJkaW5mbygpCisJCWlmIChzZGRyMDlfcmVhZF9tYXAodXMpKSB7CisJCQkvKiBwcm9iYWJseSBvdXQgb2YgbWVtb3J5ICovCisJCQlnb3RvIGluaXRfZXJyb3I7CisJCX0KKworCQkvLyBSZXBvcnQgY2FwYWNpdHkKKworCQljYXBhY2l0eSA9IChpbmZvLT5sYmFjdCA8PCBpbmZvLT5ibG9ja3NoaWZ0KSAtIDE7CisKKwkJKChfX2JlMzIgKikgcHRyKVswXSA9IGNwdV90b19iZTMyKGNhcGFjaXR5KTsKKworCQkvLyBSZXBvcnQgcGFnZSBzaXplCisKKwkJKChfX2JlMzIgKikgcHRyKVsxXSA9IGNwdV90b19iZTMyKGluZm8tPnBhZ2VzaXplKTsKKwkJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHB0ciwgOCwgc3JiKTsKKworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBNT0RFX1NFTlNFXzEwKSB7CisJCWludCBtb2RlcGFnZSA9IChzcmItPmNtbmRbMl0gJiAweDNGKTsKKworCQkvKiBUaGV5IGFzayBmb3IgdGhlIFJlYWQvV3JpdGUgZXJyb3IgcmVjb3ZlcnkgcGFnZSwKKwkJICAgb3IgZm9yIGFsbCBwYWdlcy4gKi8KKwkJLyogJSUgV2Ugc2hvdWxkIGNoZWNrIERCRCAlJSAqLworCQlpZiAobW9kZXBhZ2UgPT0gMHgwMSB8fCBtb2RlcGFnZSA9PSAweDNGKSB7CisJCQlVU19ERUJVR1AoIlNERFIwOTogRHVtbXkgdXAgcmVxdWVzdCBmb3IgIgorCQkJCSAgIm1vZGUgcGFnZSAweCV4XG4iLCBtb2RlcGFnZSk7CisKKwkJCW1lbWNweShwdHIsIG1vZGVfcGFnZV8wMSwgc2l6ZW9mKG1vZGVfcGFnZV8wMSkpOworCQkJKChfX2JlMTYqKXB0cilbMF0gPSBjcHVfdG9fYmUxNihzaXplb2YobW9kZV9wYWdlXzAxKSAtIDIpOworCQkJcHRyWzNdID0gKGluZm8tPmZsYWdzICYgU0REUjA5X1dQKSA/IDB4ODAgOiAwOworCQkJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHB0ciwgc2l6ZW9mKG1vZGVfcGFnZV8wMSksIHNyYik7CisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJCX0KKworCQlzZW5zZWtleSA9IDB4MDU7CS8qIGlsbGVnYWwgcmVxdWVzdCAqLworCQlzZW5zZWNvZGUgPSAweDI0OwkvKiBpbnZhbGlkIGZpZWxkIGluIENEQiAqLworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IEFMTE9XX01FRElVTV9SRU1PVkFMKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisKKwloYXZlZmFrZXNlbnNlID0gMDsKKworCWlmIChzcmItPmNtbmRbMF0gPT0gUkVBRF8xMCkgeworCisJCXBhZ2UgPSBzaG9ydF9wYWNrKHNyYi0+Y21uZFszXSwgc3JiLT5jbW5kWzJdKTsKKwkJcGFnZSA8PD0gMTY7CisJCXBhZ2UgfD0gc2hvcnRfcGFjayhzcmItPmNtbmRbNV0sIHNyYi0+Y21uZFs0XSk7CisJCXBhZ2VzID0gc2hvcnRfcGFjayhzcmItPmNtbmRbOF0sIHNyYi0+Y21uZFs3XSk7CisKKwkJVVNfREVCVUdQKCJSRUFEXzEwOiByZWFkIHBhZ2UgJWQgcGFnZWN0ICVkXG4iLAorCQkJICBwYWdlLCBwYWdlcyk7CisKKwkJcmV0dXJuIHNkZHIwOV9yZWFkX2RhdGEodXMsIHBhZ2UsIHBhZ2VzKTsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFdSSVRFXzEwKSB7CisKKwkJcGFnZSA9IHNob3J0X3BhY2soc3JiLT5jbW5kWzNdLCBzcmItPmNtbmRbMl0pOworCQlwYWdlIDw8PSAxNjsKKwkJcGFnZSB8PSBzaG9ydF9wYWNrKHNyYi0+Y21uZFs1XSwgc3JiLT5jbW5kWzRdKTsKKwkJcGFnZXMgPSBzaG9ydF9wYWNrKHNyYi0+Y21uZFs4XSwgc3JiLT5jbW5kWzddKTsKKworCQlVU19ERUJVR1AoIldSSVRFXzEwOiB3cml0ZSBwYWdlICVkIHBhZ2VjdCAlZFxuIiwKKwkJCSAgcGFnZSwgcGFnZXMpOworCisJCXJldHVybiBzZGRyMDlfd3JpdGVfZGF0YSh1cywgcGFnZSwgcGFnZXMpOworCX0KKworCS8qIGNhdGNoLWFsbCBmb3IgYWxsIG90aGVyIGNvbW1hbmRzLCBleGNlcHQKKwkgKiBwYXNzIFRFU1RfVU5JVF9SRUFEWSBhbmQgUkVRVUVTVF9TRU5TRSB0aHJvdWdoCisJICovCisJaWYgKHNyYi0+Y21uZFswXSAhPSBURVNUX1VOSVRfUkVBRFkgJiYKKwkgICAgc3JiLT5jbW5kWzBdICE9IFJFUVVFU1RfU0VOU0UpIHsKKwkJc2Vuc2VrZXkgPSAweDA1OwkvKiBpbGxlZ2FsIHJlcXVlc3QgKi8KKwkJc2Vuc2Vjb2RlID0gMHgyMDsJLyogaW52YWxpZCBjb21tYW5kICovCisJCWhhdmVmYWtlc2Vuc2UgPSAxOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwl9CisKKwlmb3IgKDsgc3JiLT5jbWRfbGVuPDEyOyBzcmItPmNtZF9sZW4rKykKKwkJc3JiLT5jbW5kW3NyYi0+Y21kX2xlbl0gPSAwOworCisJc3JiLT5jbW5kWzFdID0gTFVOQklUUzsKKworCXB0clswXSA9IDA7CisJZm9yIChpPTA7IGk8MTI7IGkrKykKKwkJc3ByaW50ZihwdHIrc3RybGVuKHB0ciksICIlMDJYICIsIHNyYi0+Y21uZFtpXSk7CisKKwlVU19ERUJVR1AoIlNERFIwOTogU2VuZCBjb250cm9sIGZvciBjb21tYW5kICVzXG4iLCBwdHIpOworCisJcmVzdWx0ID0gc2RkcjA5X3NlbmRfc2NzaV9jb21tYW5kKHVzLCBzcmItPmNtbmQsIDEyKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSB7CisJCVVTX0RFQlVHUCgic2RkcjA5X3RyYW5zcG9ydDogc2RkcjA5X3NlbmRfc2NzaV9jb21tYW5kICIKKwkJCSAgInJldHVybnMgJWRcbiIsIHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJaWYgKHNyYi0+cmVxdWVzdF9idWZmbGVuID09IDApCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKworCWlmIChzcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UgfHwKKwkgICAgc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpIHsKKwkJdW5zaWduZWQgaW50IHBpcGUgPSAoc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQorCQkJCT8gdXMtPnNlbmRfYnVsa19waXBlIDogdXMtPnJlY3ZfYnVsa19waXBlOworCisJCVVTX0RFQlVHUCgiU0REUjA5OiAlcyAlZCBieXRlc1xuIiwKKwkJCSAgKHNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkgPworCQkJICAic2VuZGluZyIgOiAicmVjZWl2aW5nIiwKKwkJCSAgc3JiLT5yZXF1ZXN0X2J1ZmZsZW4pOworCisJCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2codXMsIHBpcGUsCisJCQkJCXNyYi0+cmVxdWVzdF9idWZmZXIsCisJCQkJCXNyYi0+cmVxdWVzdF9idWZmbGVuLAorCQkJCQlzcmItPnVzZV9zZywgJnNyYi0+cmVzaWQpOworCisJCXJldHVybiAocmVzdWx0ID09IFVTQl9TVE9SX1hGRVJfR09PRCA/CisJCQlVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCA6IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUik7CisJfSAKKworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjA5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlkNzhkNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjA5LmgKQEAgLTAsMCArMSw0OCBAQAorLyogRHJpdmVyIGZvciBTYW5EaXNrIFNERFItMDkgU21hcnRNZWRpYSByZWFkZXIKKyAqIEhlYWRlciBGaWxlCisgKgorICogJElkOiBzZGRyMDkuaCx2IDEuNSAyMDAwLzA4LzI1IDAwOjEzOjUxIG1kaGFybSBFeHAgJAorICoKKyAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgorICogICAoYykgMjAwMCBSb2JlcnQgQmFydWNoIChhdXRvcGhpbGVAZG9sLm5ldCkKKyAqICAgKGMpIDIwMDIgQW5kcmllcyBCcm91d2VyIChhZWJAY3dpLm5sKQorICoKKyAqIFNlZSBzZGRyMDkuYyBmb3IgbW9yZSBleHBsYW5hdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX1VTQl9TSFVUVExFX0VVU0JfU0REUjA5X0gKKyNkZWZpbmUgX1VTQl9TSFVUVExFX0VVU0JfU0REUjA5X0gKKworLyogU2FuZGlzayBTRERSLTA5IHN0dWZmICovCisKK2V4dGVybiBpbnQgc2RkcjA5X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7CisKK3N0cnVjdCBzZGRyMDlfY2FyZF9pbmZvIHsKKwl1bnNpZ25lZCBsb25nCWNhcGFjaXR5OwkvKiBTaXplIG9mIGNhcmQgaW4gYnl0ZXMgKi8KKwlpbnQJCXBhZ2VzaXplOwkvKiBTaXplIG9mIHBhZ2UgaW4gYnl0ZXMgKi8KKwlpbnQJCXBhZ2VzaGlmdDsJLyogbG9nMiBvZiBwYWdlc2l6ZSAqLworCWludAkJYmxvY2tzaXplOwkvKiBTaXplIG9mIGJsb2NrIGluIHBhZ2VzICovCisJaW50CQlibG9ja3NoaWZ0OwkvKiBsb2cyIG9mIGJsb2Nrc2l6ZSAqLworCWludAkJYmxvY2ttYXNrOwkvKiAyXmJsb2Nrc2hpZnQgLSAxICovCisJaW50CQkqbGJhX3RvX3BiYTsJLyogbG9naWNhbCB0byBwaHlzaWNhbCBtYXAgKi8KKwlpbnQJCSpwYmFfdG9fbGJhOwkvKiBwaHlzaWNhbCB0byBsb2dpY2FsIG1hcCAqLworCWludAkJbGJhY3Q7CQkvKiBudW1iZXIgb2YgYXZhaWxhYmxlIHBhZ2VzICovCisJaW50CQlmbGFnczsKKyNkZWZpbmUJU0REUjA5X1dQCTEJCS8qIHdyaXRlIHByb3RlY3RlZCAqLworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjljYTE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuYwpAQCAtMCwwICsxLDkzOCBAQAorLyogRHJpdmVyIGZvciBTYW5EaXNrIFNERFItNTUgU21hcnRNZWRpYSByZWFkZXIKKyAqCisgKiAkSWQ6JAorICoKKyAqIFNERFI1NSBkcml2ZXIgdjAuMToKKyAqCisgKiBGaXJzdCByZWxlYXNlCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAyMDAyIFNpbW9uIE11bnRvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorCisjaW5jbHVkZSAidXNiLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgInNkZHI1NS5oIgorCisKKyNkZWZpbmUgc2hvcnRfcGFjayhsc2IsbXNiKSAoICgodTE2KShsc2IpKSB8ICggKCh1MTYpKG1zYikpPDw4ICkgKQorI2RlZmluZSBMU0Jfb2YocykgKChzKSYweEZGKQorI2RlZmluZSBNU0Jfb2YocykgKChzKT4+OCkKKyNkZWZpbmUgUEFHRVNJWkUgIDUxMgorCisjZGVmaW5lIHNldF9zZW5zZV9pbmZvKHNrLCBhc2MsIGFzY3EpCVwKKyAgICBkbyB7CQkJCVwKKwlpbmZvLT5zZW5zZV9kYXRhWzJdID0gc2s7CVwKKwlpbmZvLT5zZW5zZV9kYXRhWzEyXSA9IGFzYzsJXAorCWluZm8tPnNlbnNlX2RhdGFbMTNdID0gYXNjcTsJXAorCX0gd2hpbGUgKDApCisKKworc3RydWN0IHNkZHI1NV9jYXJkX2luZm8geworCXVuc2lnbmVkIGxvbmcJY2FwYWNpdHk7CS8qIFNpemUgb2YgY2FyZCBpbiBieXRlcyAqLworCWludAkJbWF4X2xvZ19ibGtzOwkvKiBtYXhpbXVtIG51bWJlciBvZiBsb2dpY2FsIGJsb2NrcyAqLworCWludAkJcGFnZXNoaWZ0OwkvKiBsb2cyIG9mIHBhZ2VzaXplICovCisJaW50CQlzbWFsbHBhZ2VzaGlmdDsJLyogMSBpZiBwYWdlc2l6ZSA9PSAyNTYgKi8KKwlpbnQJCWJsb2Nrc2l6ZTsJLyogU2l6ZSBvZiBibG9jayBpbiBwYWdlcyAqLworCWludAkJYmxvY2tzaGlmdDsJLyogbG9nMiBvZiBibG9ja3NpemUgKi8KKwlpbnQJCWJsb2NrbWFzazsJLyogMl5ibG9ja3NoaWZ0IC0gMSAqLworCWludAkJcmVhZF9vbmx5OwkvKiBub24gemVybyBpZiBjYXJkIGlzIHdyaXRlIHByb3RlY3RlZCAqLworCWludAkJZm9yY2VfcmVhZF9vbmx5OwkvKiBub24gemVybyBpZiB3ZSBmaW5kIGEgbWFwIGVycm9yKi8KKwlpbnQJCSpsYmFfdG9fcGJhOwkvKiBsb2dpY2FsIHRvIHBoeXNpY2FsIG1hcCAqLworCWludAkJKnBiYV90b19sYmE7CS8qIHBoeXNpY2FsIHRvIGxvZ2ljYWwgbWFwICovCisJaW50CQlmYXRhbF9lcnJvcjsJLyogc2V0IGlmIHdlIGRldGVjdCBzb21ldGhpbmcgbmFzdHkgKi8KKwl1bnNpZ25lZCBsb25nIAlsYXN0X2FjY2VzczsJLyogbnVtYmVyIG9mIGppZmZpZXMgc2luY2Ugd2UgbGFzdCB0YWxrZWQgdG8gZGV2aWNlICovCisJdW5zaWduZWQgY2hhciAgIHNlbnNlX2RhdGFbMThdOworfTsKKworCisjZGVmaW5lIE5PVF9BTExPQ0FURUQJCTB4ZmZmZmZmZmYKKyNkZWZpbmUgQkFEX0JMT0NLCQkweGZmZmYKKyNkZWZpbmUgQ0lTX0JMT0NLCQkweDQwMAorI2RlZmluZSBVTlVTRURfQkxPQ0sJCTB4M2ZmCisKK3N0YXRpYyBpbnQKK3NkZHI1NV9idWxrX3RyYW5zcG9ydChzdHJ1Y3QgdXNfZGF0YSAqdXMsIGludCBkaXJlY3Rpb24sCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pIHsKKwlzdHJ1Y3Qgc2RkcjU1X2NhcmRfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc2RkcjU1X2NhcmRfaW5mbyAqKXVzLT5leHRyYTsKKwl1bnNpZ25lZCBpbnQgcGlwZSA9IChkaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKSA/CisJCQl1cy0+cmVjdl9idWxrX3BpcGUgOiB1cy0+c2VuZF9idWxrX3BpcGU7CisKKwlpZiAoIWxlbikKKwkJcmV0dXJuIFVTQl9TVE9SX1hGRVJfR09PRDsKKwlpbmZvLT5sYXN0X2FjY2VzcyA9IGppZmZpZXM7CisJcmV0dXJuIHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCBwaXBlLCBkYXRhLCBsZW4sIE5VTEwpOworfQorCisvKiBjaGVjayBpZiBjYXJkIGluc2VydGVkLCBpZiB0aGVyZSBpcywgdXBkYXRlIHJlYWRfb25seSBzdGF0dXMKKyAqIHJldHVybiBub24gemVybyBpZiBubyBjYXJkCisgKi8KKworc3RhdGljIGludCBzZGRyNTVfc3RhdHVzKHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJdW5zaWduZWQgY2hhciAqc3RhdHVzID0gdXMtPmlvYnVmOworCXN0cnVjdCBzZGRyNTVfY2FyZF9pbmZvICppbmZvID0gKHN0cnVjdCBzZGRyNTVfY2FyZF9pbmZvICopdXMtPmV4dHJhOworCisJLyogc2VuZCBjb21tYW5kICovCisJbWVtc2V0KGNvbW1hbmQsIDAsIDgpOworCWNvbW1hbmRbNV0gPSAweEIwOworCWNvbW1hbmRbN10gPSAweDgwOworCXJlc3VsdCA9IHNkZHI1NV9idWxrX3RyYW5zcG9ydCh1cywKKwkJRE1BX1RPX0RFVklDRSwgY29tbWFuZCwgOCk7CisKKwlVU19ERUJVR1AoIlJlc3VsdCBmb3Igc2VuZF9jb21tYW5kIGluIHN0YXR1cyAlZFxuIiwKKwkJcmVzdWx0KTsKKworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCXNldF9zZW5zZV9pbmZvICg0LCAwLCAwKTsJLyogaGFyZHdhcmUgZXJyb3IgKi8KKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwlyZXN1bHQgPSBzZGRyNTVfYnVsa190cmFuc3BvcnQodXMsCisJCURNQV9GUk9NX0RFVklDRSwgc3RhdHVzLAk0KTsKKworCS8qIGV4cGVjdCB0byBnZXQgc2hvcnQgdHJhbnNmZXIgaWYgbm8gY2FyZCBmaXR0ZWQgKi8KKwlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1hGRVJfU0hPUlQgfHwgcmVzdWx0ID09IFVTQl9TVE9SX1hGRVJfU1RBTExFRCkgeworCQkvKiBoYWQgYSBzaG9ydCB0cmFuc2Zlciwgbm8gY2FyZCBpbnNlcnRlZCwgZnJlZSBtYXAgbWVtb3J5ICovCisJCWlmIChpbmZvLT5sYmFfdG9fcGJhKQorCQkJa2ZyZWUoaW5mby0+bGJhX3RvX3BiYSk7CisJCWlmIChpbmZvLT5wYmFfdG9fbGJhKQorCQkJa2ZyZWUoaW5mby0+cGJhX3RvX2xiYSk7CisJCWluZm8tPmxiYV90b19wYmEgPSBOVUxMOworCQlpbmZvLT5wYmFfdG9fbGJhID0gTlVMTDsKKworCQlpbmZvLT5mYXRhbF9lcnJvciA9IDA7CisJCWluZm8tPmZvcmNlX3JlYWRfb25seSA9IDA7CisKKwkJc2V0X3NlbnNlX2luZm8gKDIsIDB4M2EsIDApOwkvKiBub3QgcmVhZHksIG1lZGl1bSBub3QgcHJlc2VudCAqLworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwl9CisKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQlzZXRfc2Vuc2VfaW5mbyAoNCwgMCwgMCk7CS8qIGhhcmR3YXJlIGVycm9yICovCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCX0KKwkKKwkvKiBjaGVjayB3cml0ZSBwcm90ZWN0IHN0YXR1cyAqLworCWluZm8tPnJlYWRfb25seSA9IChzdGF0dXNbMF0gJiAweDIwKTsKKworCS8qIG5vdyByZWFkIHN0YXR1cyAqLworCXJlc3VsdCA9IHNkZHI1NV9idWxrX3RyYW5zcG9ydCh1cywKKwkJRE1BX0ZST01fREVWSUNFLCBzdGF0dXMsCTIpOworCisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJc2V0X3NlbnNlX2luZm8gKDQsIDAsIDApOwkvKiBoYXJkd2FyZSBlcnJvciAqLworCX0KKworCXJldHVybiAocmVzdWx0ID09IFVTQl9TVE9SX1hGRVJfR09PRCA/CisJCQlVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCA6IFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQpOworfQorCisKK3N0YXRpYyBpbnQgc2RkcjU1X3JlYWRfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCXVuc2lnbmVkIGludCBsYmEsCisJCXVuc2lnbmVkIGludCBwYWdlLAorCQl1bnNpZ25lZCBzaG9ydCBzZWN0b3JzKSB7CisKKwlpbnQgcmVzdWx0ID0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKwl1bnNpZ25lZCBjaGFyICpzdGF0dXMgPSB1cy0+aW9idWY7CisJc3RydWN0IHNkZHI1NV9jYXJkX2luZm8gKmluZm8gPSAoc3RydWN0IHNkZHI1NV9jYXJkX2luZm8gKil1cy0+ZXh0cmE7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCisJdW5zaWduZWQgaW50IHBiYTsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisKKwl1bnNpZ25lZCBzaG9ydCBwYWdlczsKKwl1bnNpZ25lZCBpbnQgbGVuLCBpbmRleCwgb2Zmc2V0OworCisJLy8gU2luY2Ugd2Ugb25seSByZWFkIGluIG9uZSBibG9jayBhdCBhIHRpbWUsIHdlIGhhdmUgdG8gY3JlYXRlCisJLy8gYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2UgYXQgYSB0aW1lIGJldHdlZW4gdGhlCisJLy8gYm91bmNlIGJ1ZmZlciBhbmQgdGhlIGFjdHVhbCB0cmFuc2ZlciBidWZmZXIuCisKKwlsZW4gPSBtaW4oKHVuc2lnbmVkIGludCkgc2VjdG9ycywgKHVuc2lnbmVkIGludCkgaW5mby0+YmxvY2tzaXplID4+CisJCQlpbmZvLT5zbWFsbHBhZ2VzaGlmdCkgKiBQQUdFU0laRTsKKwlidWZmZXIgPSBrbWFsbG9jKGxlbiwgR0ZQX05PSU8pOworCWlmIChidWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsgLyogb3V0IG9mIG1lbW9yeSAqLworCWluZGV4ID0gb2Zmc2V0ID0gMDsKKworCXdoaWxlIChzZWN0b3JzPjApIHsKKworCQkvKiBoYXZlIHdlIGdvdCB0byBlbmQ/ICovCisJCWlmIChsYmEgPj0gaW5mby0+bWF4X2xvZ19ibGtzKQorCQkJYnJlYWs7CisKKwkJcGJhID0gaW5mby0+bGJhX3RvX3BiYVtsYmFdOworCisJCS8vIFJlYWQgYXMgbWFueSBzZWN0b3JzIGFzIHBvc3NpYmxlIGluIHRoaXMgYmxvY2sKKworCQlwYWdlcyA9IG1pbigodW5zaWduZWQgaW50KSBzZWN0b3JzIDw8IGluZm8tPnNtYWxscGFnZXNoaWZ0LAorCQkJCWluZm8tPmJsb2Nrc2l6ZSAtIHBhZ2UpOworCQlsZW4gPSBwYWdlcyA8PCBpbmZvLT5wYWdlc2hpZnQ7CisKKwkJVVNfREVCVUdQKCJSZWFkICUwMlggcGFnZXMsIGZyb20gUEJBICUwNFgiCisJCQkiIChMQkEgJTA0WCkgcGFnZSAlMDJYXG4iLAorCQkJcGFnZXMsIHBiYSwgbGJhLCBwYWdlKTsKKworCQlpZiAocGJhID09IE5PVF9BTExPQ0FURUQpIHsKKwkJCS8qIG5vIHBiYSBmb3IgdGhpcyBsYmEsIGZpbGwgd2l0aCB6ZXJvZXMgKi8KKwkJCW1lbXNldCAoYnVmZmVyLCAwLCBsZW4pOworCQl9IGVsc2UgeworCisJCQlhZGRyZXNzID0gKHBiYSA8PCBpbmZvLT5ibG9ja3NoaWZ0KSArIHBhZ2U7CisKKwkJCWNvbW1hbmRbMF0gPSAwOworCQkJY29tbWFuZFsxXSA9IExTQl9vZihhZGRyZXNzPj4xNik7CisJCQljb21tYW5kWzJdID0gTFNCX29mKGFkZHJlc3M+PjgpOworCQkJY29tbWFuZFszXSA9IExTQl9vZihhZGRyZXNzKTsKKworCQkJY29tbWFuZFs0XSA9IDA7CisJCQljb21tYW5kWzVdID0gMHhCMDsKKwkJCWNvbW1hbmRbNl0gPSBMU0Jfb2YocGFnZXMgPDwgKDEgLSBpbmZvLT5zbWFsbHBhZ2VzaGlmdCkpOworCQkJY29tbWFuZFs3XSA9IDB4ODU7CisKKwkJCS8qIHNlbmQgY29tbWFuZCAqLworCQkJcmVzdWx0ID0gc2RkcjU1X2J1bGtfdHJhbnNwb3J0KHVzLAorCQkJCURNQV9UT19ERVZJQ0UsIGNvbW1hbmQsIDgpOworCisJCQlVU19ERUJVR1AoIlJlc3VsdCBmb3Igc2VuZF9jb21tYW5kIGluIHJlYWRfZGF0YSAlZFxuIiwKKwkJCQlyZXN1bHQpOworCisJCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQkJCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJCQlnb3RvIGxlYXZlOworCQkJfQorCisJCQkvKiByZWFkIGRhdGEgKi8KKwkJCXJlc3VsdCA9IHNkZHI1NV9idWxrX3RyYW5zcG9ydCh1cywKKwkJCQlETUFfRlJPTV9ERVZJQ0UsIGJ1ZmZlciwgbGVuKTsKKworCQkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJCQlyZXN1bHQgPSBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCQkJZ290byBsZWF2ZTsKKwkJCX0KKworCQkJLyogbm93IHJlYWQgc3RhdHVzICovCisJCQlyZXN1bHQgPSBzZGRyNTVfYnVsa190cmFuc3BvcnQodXMsCisJCQkJRE1BX0ZST01fREVWSUNFLCBzdGF0dXMsIDIpOworCisJCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQkJCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJCQlnb3RvIGxlYXZlOworCQkJfQorCisJCQkvKiBjaGVjayBzdGF0dXMgZm9yIGVycm9yICovCisJCQlpZiAoc3RhdHVzWzBdID09IDB4ZmYgJiYgc3RhdHVzWzFdID09IDB4NCkgeworCQkJCXNldF9zZW5zZV9pbmZvICgzLCAweDExLCAwKTsKKwkJCQlyZXN1bHQgPSBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCQkJCWdvdG8gbGVhdmU7CisJCQl9CisJCX0KKworCQkvLyBTdG9yZSB0aGUgZGF0YSBpbiB0aGUgdHJhbnNmZXIgYnVmZmVyCisJCXVzYl9zdG9yX2FjY2Vzc194ZmVyX2J1ZihidWZmZXIsIGxlbiwgdXMtPnNyYiwKKwkJCQkmaW5kZXgsICZvZmZzZXQsIFRPX1hGRVJfQlVGKTsKKworCQlwYWdlID0gMDsKKwkJbGJhKys7CisJCXNlY3RvcnMgLT0gcGFnZXMgPj4gaW5mby0+c21hbGxwYWdlc2hpZnQ7CisJfQorCisJcmVzdWx0ID0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisKK2xlYXZlOgorCWtmcmVlKGJ1ZmZlcik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IHNkZHI1NV93cml0ZV9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywKKwkJdW5zaWduZWQgaW50IGxiYSwKKwkJdW5zaWduZWQgaW50IHBhZ2UsCisJCXVuc2lnbmVkIHNob3J0IHNlY3RvcnMpIHsKKworCWludCByZXN1bHQgPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCXVuc2lnbmVkIGNoYXIgKnN0YXR1cyA9IHVzLT5pb2J1ZjsKKwlzdHJ1Y3Qgc2RkcjU1X2NhcmRfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc2RkcjU1X2NhcmRfaW5mbyAqKXVzLT5leHRyYTsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisKKwl1bnNpZ25lZCBpbnQgcGJhOworCXVuc2lnbmVkIGludCBuZXdfcGJhOworCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKKworCXVuc2lnbmVkIHNob3J0IHBhZ2VzOworCWludCBpOworCXVuc2lnbmVkIGludCBsZW4sIGluZGV4LCBvZmZzZXQ7CisKKwkvKiBjaGVjayBpZiB3ZSBhcmUgYWxsb3dlZCB0byB3cml0ZSAqLworCWlmIChpbmZvLT5yZWFkX29ubHkgfHwgaW5mby0+Zm9yY2VfcmVhZF9vbmx5KSB7CisJCXNldF9zZW5zZV9pbmZvICg3LCAweDI3LCAwKTsJLyogcmVhZCBvbmx5ICovCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCX0KKworCS8vIFNpbmNlIHdlIG9ubHkgd3JpdGUgb25lIGJsb2NrIGF0IGEgdGltZSwgd2UgaGF2ZSB0byBjcmVhdGUKKwkvLyBhIGJvdW5jZSBidWZmZXIgYW5kIG1vdmUgdGhlIGRhdGEgYSBwaWVjZSBhdCBhIHRpbWUgYmV0d2VlbiB0aGUKKwkvLyBib3VuY2UgYnVmZmVyIGFuZCB0aGUgYWN0dWFsIHRyYW5zZmVyIGJ1ZmZlci4KKworCWxlbiA9IG1pbigodW5zaWduZWQgaW50KSBzZWN0b3JzLCAodW5zaWduZWQgaW50KSBpbmZvLT5ibG9ja3NpemUgPj4KKwkJCWluZm8tPnNtYWxscGFnZXNoaWZ0KSAqIFBBR0VTSVpFOworCWJ1ZmZlciA9IGttYWxsb2MobGVuLCBHRlBfTk9JTyk7CisJaWYgKGJ1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCWluZGV4ID0gb2Zmc2V0ID0gMDsKKworCXdoaWxlIChzZWN0b3JzID4gMCkgeworCisJCS8qIGhhdmUgd2UgZ290IHRvIGVuZD8gKi8KKwkJaWYgKGxiYSA+PSBpbmZvLT5tYXhfbG9nX2Jsa3MpCisJCQlicmVhazsKKworCQlwYmEgPSBpbmZvLT5sYmFfdG9fcGJhW2xiYV07CisKKwkJLy8gV3JpdGUgYXMgbWFueSBzZWN0b3JzIGFzIHBvc3NpYmxlIGluIHRoaXMgYmxvY2sKKworCQlwYWdlcyA9IG1pbigodW5zaWduZWQgaW50KSBzZWN0b3JzIDw8IGluZm8tPnNtYWxscGFnZXNoaWZ0LAorCQkJCWluZm8tPmJsb2Nrc2l6ZSAtIHBhZ2UpOworCQlsZW4gPSBwYWdlcyA8PCBpbmZvLT5wYWdlc2hpZnQ7CisKKwkJLy8gR2V0IHRoZSBkYXRhIGZyb20gdGhlIHRyYW5zZmVyIGJ1ZmZlcgorCQl1c2Jfc3Rvcl9hY2Nlc3NfeGZlcl9idWYoYnVmZmVyLCBsZW4sIHVzLT5zcmIsCisJCQkJJmluZGV4LCAmb2Zmc2V0LCBGUk9NX1hGRVJfQlVGKTsKKworCQlVU19ERUJVR1AoIldyaXRlICUwMlggcGFnZXMsIHRvIFBCQSAlMDRYIgorCQkJIiAoTEJBICUwNFgpIHBhZ2UgJTAyWFxuIiwKKwkJCXBhZ2VzLCBwYmEsIGxiYSwgcGFnZSk7CisJCQkKKwkJY29tbWFuZFs0XSA9IDA7CisKKwkJaWYgKHBiYSA9PSBOT1RfQUxMT0NBVEVEKSB7CisJCQkvKiBubyBwYmEgYWxsb2NhdGVkIGZvciB0aGlzIGxiYSwgZmluZCBhIGZyZWUgcGJhIHRvIHVzZSAqLworCisJCQlpbnQgbWF4X3BiYSA9IChpbmZvLT5tYXhfbG9nX2Jsa3MgLyAyNTAgKSAqIDI1NjsKKwkJCWludCBmb3VuZF9jb3VudCA9IDA7CisJCQlpbnQgZm91bmRfcGJhID0gLTE7CisKKwkJCS8qIHNldCBwYmEgdG8gZmlyc3QgYmxvY2sgaW4gem9uZSBsYmEgaXMgaW4gKi8KKwkJCXBiYSA9IChsYmEgLyAxMDAwKSAqIDEwMjQ7CisKKwkJCVVTX0RFQlVHUCgiTm8gUEJBIGZvciBMQkEgJTA0WFxuIixsYmEpOworCisJCQlpZiAobWF4X3BiYSA+IDEwMjQpCisJCQkJbWF4X3BiYSA9IDEwMjQ7CisKKwkJCS8qCisJCQkgKiBTY2FuIHRocm91Z2ggdGhlIG1hcCBsb29raW5nIGZvciBhbiB1bnVzZWQgYmxvY2sKKwkJCSAqIGxlYXZlIDE2IHVudXNlZCBibG9ja3MgYXQgc3RhcnQgKG9yIGFzIG1hbnkgYXMKKwkJCSAqIHBvc3NpYmxlKSBzaW5jZSB0aGUgc2RkcjU1IHNlZW1zIHRvIHJldXNlIGEgdXNlZAorCQkJICogYmxvY2sgd2hlbiBpdCBzaG91bGRuJ3QgaWYgd2UgZG9uJ3QgbGVhdmUgc3BhY2UuCisJCQkgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBtYXhfcGJhOyBpKyssIHBiYSsrKSB7CisJCQkJaWYgKGluZm8tPnBiYV90b19sYmFbcGJhXSA9PSBVTlVTRURfQkxPQ0spIHsKKwkJCQkJZm91bmRfcGJhID0gcGJhOworCQkJCQlpZiAoZm91bmRfY291bnQrKyA+IDE2KQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlwYmEgPSBmb3VuZF9wYmE7CisKKwkJCWlmIChwYmEgPT0gLTEpIHsKKwkJCQkvKiBvaCBkZWFyICovCisJCQkJVVNfREVCVUdQKCJDb3VsZG4ndCBmaW5kIHVuYWxsb2NhdGVkIGJsb2NrXG4iKTsKKworCQkJCXNldF9zZW5zZV9pbmZvICgzLCAweDMxLCAwKTsJLyogbWVkaXVtIGVycm9yICovCisJCQkJcmVzdWx0ID0gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkJCQlnb3RvIGxlYXZlOworCQkJfQorCisJCQlVU19ERUJVR1AoIkFsbG9jYXRpbmcgUEJBICUwNFggZm9yIExCQSAlMDRYXG4iLCBwYmEsIGxiYSk7CisKKwkJCS8qIHNldCB3cml0aW5nIHRvIHVuYWxsb2NhdGVkIGJsb2NrIGZsYWcgKi8KKwkJCWNvbW1hbmRbNF0gPSAweDQwOworCQl9CisKKwkJYWRkcmVzcyA9IChwYmEgPDwgaW5mby0+YmxvY2tzaGlmdCkgKyBwYWdlOworCisJCWNvbW1hbmRbMV0gPSBMU0Jfb2YoYWRkcmVzcz4+MTYpOworCQljb21tYW5kWzJdID0gTFNCX29mKGFkZHJlc3M+PjgpOyAKKwkJY29tbWFuZFszXSA9IExTQl9vZihhZGRyZXNzKTsKKworCQkvKiBzZXQgdGhlIGxiYSBpbnRvIHRoZSBjb21tYW5kLCBtb2R1bG8gMTAwMCAqLworCQljb21tYW5kWzBdID0gTFNCX29mKGxiYSAlIDEwMDApOworCQljb21tYW5kWzZdID0gTVNCX29mKGxiYSAlIDEwMDApOworCisJCWNvbW1hbmRbNF0gfD0gTFNCX29mKHBhZ2VzID4+IGluZm8tPnNtYWxscGFnZXNoaWZ0KTsKKwkJY29tbWFuZFs1XSA9IDB4QjA7CisJCWNvbW1hbmRbN10gPSAweDg2OworCisJCS8qIHNlbmQgY29tbWFuZCAqLworCQlyZXN1bHQgPSBzZGRyNTVfYnVsa190cmFuc3BvcnQodXMsCisJCQlETUFfVE9fREVWSUNFLCBjb21tYW5kLCA4KTsKKworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQkJVVNfREVCVUdQKCJSZXN1bHQgZm9yIHNlbmRfY29tbWFuZCBpbiB3cml0ZV9kYXRhICVkXG4iLAorCQkJcmVzdWx0KTsKKworCQkJLyogc2V0X3NlbnNlX2luZm8gaXMgc3VwZXJmbHVvdXMgaGVyZT8gKi8KKwkJCXNldF9zZW5zZV9pbmZvICgzLCAweDMsIDApOy8qIHBlcmlwaGVyYWwgd3JpdGUgZXJyb3IgKi8KKwkJCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCQlnb3RvIGxlYXZlOworCQl9CisKKwkJLyogc2VuZCB0aGUgZGF0YSAqLworCQlyZXN1bHQgPSBzZGRyNTVfYnVsa190cmFuc3BvcnQodXMsCisJCQlETUFfVE9fREVWSUNFLCBidWZmZXIsIGxlbik7CisKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJCVVTX0RFQlVHUCgiUmVzdWx0IGZvciBzZW5kX2RhdGEgaW4gd3JpdGVfZGF0YSAlZFxuIiwKKwkJCQkgIHJlc3VsdCk7CisKKwkJCS8qIHNldF9zZW5zZV9pbmZvIGlzIHN1cGVyZmx1b3VzIGhlcmU/ICovCisJCQlzZXRfc2Vuc2VfaW5mbyAoMywgMHgzLCAwKTsvKiBwZXJpcGhlcmFsIHdyaXRlIGVycm9yICovCisJCQlyZXN1bHQgPSBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCQkJZ290byBsZWF2ZTsKKwkJfQorCisJCS8qIG5vdyByZWFkIHN0YXR1cyAqLworCQlyZXN1bHQgPSBzZGRyNTVfYnVsa190cmFuc3BvcnQodXMsIERNQV9GUk9NX0RFVklDRSwgc3RhdHVzLCA2KTsKKworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQkJVVNfREVCVUdQKCJSZXN1bHQgZm9yIGdldF9zdGF0dXMgaW4gd3JpdGVfZGF0YSAlZFxuIiwKKwkJCQkgIHJlc3VsdCk7CisKKwkJCS8qIHNldF9zZW5zZV9pbmZvIGlzIHN1cGVyZmx1b3VzIGhlcmU/ICovCisJCQlzZXRfc2Vuc2VfaW5mbyAoMywgMHgzLCAwKTsvKiBwZXJpcGhlcmFsIHdyaXRlIGVycm9yICovCisJCQlyZXN1bHQgPSBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCQkJZ290byBsZWF2ZTsKKwkJfQorCisJCW5ld19wYmEgPSAoc3RhdHVzWzNdICsgKHN0YXR1c1s0XSA8PCA4KSArIChzdGF0dXNbNV0gPDwgMTYpKQorCQkJCQkJICA+PiBpbmZvLT5ibG9ja3NoaWZ0OworCisJCS8qIGNoZWNrIHN0YXR1cyBmb3IgZXJyb3IgKi8KKwkJaWYgKHN0YXR1c1swXSA9PSAweGZmICYmIHN0YXR1c1sxXSA9PSAweDQpIHsKKwkJCWluZm8tPnBiYV90b19sYmFbbmV3X3BiYV0gPSBCQURfQkxPQ0s7CisKKwkJCXNldF9zZW5zZV9pbmZvICgzLCAweDBjLCAwKTsKKwkJCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCQlnb3RvIGxlYXZlOworCQl9CisKKwkJVVNfREVCVUdQKCJVcGRhdGluZyBtYXBzIGZvciBMQkEgJTA0WDogb2xkIFBCQSAlMDRYLCBuZXcgUEJBICUwNFhcbiIsCisJCQlsYmEsIHBiYSwgbmV3X3BiYSk7CisKKwkJLyogdXBkYXRlIHRoZSBsYmE8LT5wYmEgbWFwcywgbm90ZSBuZXdfcGJhIG1pZ2h0IGJlIHRoZSBzYW1lIGFzIHBiYSAqLworCQlpbmZvLT5sYmFfdG9fcGJhW2xiYV0gPSBuZXdfcGJhOworCQlpbmZvLT5wYmFfdG9fbGJhW3BiYV0gPSBVTlVTRURfQkxPQ0s7CisKKwkJLyogY2hlY2sgdGhhdCBuZXdfcGJhIHdhc24ndCBhbHJlYWR5IGJlaW5nIHVzZWQgKi8KKwkJaWYgKGluZm8tPnBiYV90b19sYmFbbmV3X3BiYV0gIT0gVU5VU0VEX0JMT0NLKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInNkZHI1NSBlcnJvcjogbmV3IFBCQSAlMDRYIGFscmVhZHkgaW4gdXNlIGZvciBMQkEgJTA0WFxuIiwKKwkJCQluZXdfcGJhLCBpbmZvLT5wYmFfdG9fbGJhW25ld19wYmFdKTsKKwkJCWluZm8tPmZhdGFsX2Vycm9yID0gMTsKKwkJCXNldF9zZW5zZV9pbmZvICgzLCAweDMxLCAwKTsKKwkJCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCQlnb3RvIGxlYXZlOworCQl9CisKKwkJLyogdXBkYXRlIHRoZSBwYmE8LT5sYmEgbWFwcyBmb3IgbmV3X3BiYSAqLworCQlpbmZvLT5wYmFfdG9fbGJhW25ld19wYmFdID0gbGJhICUgMTAwMDsKKworCQlwYWdlID0gMDsKKwkJbGJhKys7CisJCXNlY3RvcnMgLT0gcGFnZXMgPj4gaW5mby0+c21hbGxwYWdlc2hpZnQ7CisJfQorCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCisgbGVhdmU6CisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IHNkZHI1NV9yZWFkX2RldmljZUlEKHN0cnVjdCB1c19kYXRhICp1cywKKwkJdW5zaWduZWQgY2hhciAqbWFudWZhY3R1cmVySUQsCisJCXVuc2lnbmVkIGNoYXIgKmRldmljZUlEKSB7CisKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJdW5zaWduZWQgY2hhciAqY29udGVudCA9IHVzLT5pb2J1ZjsKKworCW1lbXNldChjb21tYW5kLCAwLCA4KTsKKwljb21tYW5kWzVdID0gMHhCMDsKKwljb21tYW5kWzddID0gMHg4NDsKKwlyZXN1bHQgPSBzZGRyNTVfYnVsa190cmFuc3BvcnQodXMsIERNQV9UT19ERVZJQ0UsIGNvbW1hbmQsIDgpOworCisJVVNfREVCVUdQKCJSZXN1bHQgb2Ygc2VuZF9jb250cm9sIGZvciBkZXZpY2UgSUQgaXMgJWRcbiIsCisJCXJlc3VsdCk7CisKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCXJlc3VsdCA9IHNkZHI1NV9idWxrX3RyYW5zcG9ydCh1cywKKwkJRE1BX0ZST01fREVWSUNFLCBjb250ZW50LCA0KTsKKworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJKm1hbnVmYWN0dXJlcklEID0gY29udGVudFswXTsKKwkqZGV2aWNlSUQgPSBjb250ZW50WzFdOworCisJaWYgKGNvbnRlbnRbMF0gIT0gMHhmZikJeworICAgIAkJcmVzdWx0ID0gc2RkcjU1X2J1bGtfdHJhbnNwb3J0KHVzLAorCQkJRE1BX0ZST01fREVWSUNFLCBjb250ZW50LCAyKTsKKwl9CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKworaW50IHNkZHI1NV9yZXNldChzdHJ1Y3QgdXNfZGF0YSAqdXMpIHsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzZGRyNTVfZ2V0X2NhcGFjaXR5KHN0cnVjdCB1c19kYXRhICp1cykgeworCisJdW5zaWduZWQgY2hhciBtYW51ZmFjdHVyZXJJRDsKKwl1bnNpZ25lZCBjaGFyIGRldmljZUlEOworCWludCByZXN1bHQ7CisJc3RydWN0IHNkZHI1NV9jYXJkX2luZm8gKmluZm8gPSAoc3RydWN0IHNkZHI1NV9jYXJkX2luZm8gKil1cy0+ZXh0cmE7CisKKwlVU19ERUJVR1AoIlJlYWRpbmcgY2FwYWNpdHkuLi5cbiIpOworCisJcmVzdWx0ID0gc2RkcjU1X3JlYWRfZGV2aWNlSUQodXMsCisJCSZtYW51ZmFjdHVyZXJJRCwKKwkJJmRldmljZUlEKTsKKworCVVTX0RFQlVHUCgiUmVzdWx0IG9mIHJlYWRfZGV2aWNlSUQgaXMgJWRcbiIsCisJCXJlc3VsdCk7CisKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIDA7CisKKwlVU19ERUJVR1AoIkRldmljZSBJRCA9ICUwMlhcbiIsIGRldmljZUlEKTsKKwlVU19ERUJVR1AoIk1hbnVmICBJRCA9ICUwMlhcbiIsIG1hbnVmYWN0dXJlcklEKTsKKworCWluZm8tPnBhZ2VzaGlmdCA9IDk7CisJaW5mby0+c21hbGxwYWdlc2hpZnQgPSAwOworCWluZm8tPmJsb2Nrc2l6ZSA9IDE2OworCWluZm8tPmJsb2Nrc2hpZnQgPSA0OworCWluZm8tPmJsb2NrbWFzayA9IDE1OworCisJc3dpdGNoIChkZXZpY2VJRCkgeworCisJY2FzZSAweDZlOiAvLyAxTUIKKwljYXNlIDB4ZTg6CisJY2FzZSAweGVjOgorCQlpbmZvLT5wYWdlc2hpZnQgPSA4OworCQlpbmZvLT5zbWFsbHBhZ2VzaGlmdCA9IDE7CisJCXJldHVybiAweDAwMTAwMDAwOworCisJY2FzZSAweGVhOiAvLyAyTUIKKwljYXNlIDB4NjQ6CisJCWluZm8tPnBhZ2VzaGlmdCA9IDg7CisJCWluZm8tPnNtYWxscGFnZXNoaWZ0ID0gMTsKKwljYXNlIDB4NWQ6IC8vIDVkIGlzIGEgUk9NIGNhcmQgd2l0aCBwYWdlc2l6ZSA1MTIuCisJCXJldHVybiAweDAwMjAwMDAwOworCisJY2FzZSAweGUzOiAvLyA0TUIKKwljYXNlIDB4ZTU6CisJY2FzZSAweDZiOgorCWNhc2UgMHhkNToKKwkJcmV0dXJuIDB4MDA0MDAwMDA7CisKKwljYXNlIDB4ZTY6IC8vIDhNQgorCWNhc2UgMHhkNjoKKwkJcmV0dXJuIDB4MDA4MDAwMDA7CisKKwljYXNlIDB4NzM6IC8vIDE2TUIKKwkJaW5mby0+YmxvY2tzaXplID0gMzI7CisJCWluZm8tPmJsb2Nrc2hpZnQgPSA1OworCQlpbmZvLT5ibG9ja21hc2sgPSAzMTsKKwkJcmV0dXJuIDB4MDEwMDAwMDA7CisKKwljYXNlIDB4NzU6IC8vIDMyTUIKKwkJaW5mby0+YmxvY2tzaXplID0gMzI7CisJCWluZm8tPmJsb2Nrc2hpZnQgPSA1OworCQlpbmZvLT5ibG9ja21hc2sgPSAzMTsKKwkJcmV0dXJuIDB4MDIwMDAwMDA7CisKKwljYXNlIDB4NzY6IC8vIDY0TUIKKwkJaW5mby0+YmxvY2tzaXplID0gMzI7CisJCWluZm8tPmJsb2Nrc2hpZnQgPSA1OworCQlpbmZvLT5ibG9ja21hc2sgPSAzMTsKKwkJcmV0dXJuIDB4MDQwMDAwMDA7CisKKwljYXNlIDB4Nzk6IC8vIDEyOE1CCisJCWluZm8tPmJsb2Nrc2l6ZSA9IDMyOworCQlpbmZvLT5ibG9ja3NoaWZ0ID0gNTsKKwkJaW5mby0+YmxvY2ttYXNrID0gMzE7CisJCXJldHVybiAweDA4MDAwMDAwOworCisJZGVmYXVsdDogLy8gdW5rbm93bgorCQlyZXR1cm4gMDsKKworCX0KK30KKworc3RhdGljIGludCBzZGRyNTVfcmVhZF9tYXAoc3RydWN0IHVzX2RhdGEgKnVzKSB7CisKKwlzdHJ1Y3Qgc2RkcjU1X2NhcmRfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc2RkcjU1X2NhcmRfaW5mbyAqKSh1cy0+ZXh0cmEpOworCWludCBudW1ibG9ja3M7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJaW50IGk7CisJdW5zaWduZWQgc2hvcnQgbGJhOworCXVuc2lnbmVkIHNob3J0IG1heF9sYmE7CisJaW50IHJlc3VsdDsKKworCWlmICghaW5mby0+Y2FwYWNpdHkpCisJCXJldHVybiAtMTsKKworCW51bWJsb2NrcyA9IGluZm8tPmNhcGFjaXR5ID4+IChpbmZvLT5ibG9ja3NoaWZ0ICsgaW5mby0+cGFnZXNoaWZ0KTsKKwkKKwlidWZmZXIgPSBrbWFsbG9jKCBudW1ibG9ja3MgKiAyLCBHRlBfTk9JTyApOworCQorCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLTE7CisKKwltZW1zZXQoY29tbWFuZCwgMCwgOCk7CisJY29tbWFuZFs1XSA9IDB4QjA7CisJY29tbWFuZFs2XSA9IG51bWJsb2NrcyAqIDIgLyAyNTY7CisJY29tbWFuZFs3XSA9IDB4OEE7CisKKwlyZXN1bHQgPSBzZGRyNTVfYnVsa190cmFuc3BvcnQodXMsIERNQV9UT19ERVZJQ0UsIGNvbW1hbmQsIDgpOworCisJaWYgKCByZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCWtmcmVlIChidWZmZXIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmVzdWx0ID0gc2RkcjU1X2J1bGtfdHJhbnNwb3J0KHVzLCBETUFfRlJPTV9ERVZJQ0UsIGJ1ZmZlciwgbnVtYmxvY2tzICogMik7CisKKwlpZiAoIHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJa2ZyZWUgKGJ1ZmZlcik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXN1bHQgPSBzZGRyNTVfYnVsa190cmFuc3BvcnQodXMsIERNQV9GUk9NX0RFVklDRSwgY29tbWFuZCwgMik7CisKKwlpZiAoIHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJa2ZyZWUgKGJ1ZmZlcik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoaW5mby0+bGJhX3RvX3BiYSkKKwkJa2ZyZWUoaW5mby0+bGJhX3RvX3BiYSk7CisJaWYgKGluZm8tPnBiYV90b19sYmEpCisJCWtmcmVlKGluZm8tPnBiYV90b19sYmEpOworCWluZm8tPmxiYV90b19wYmEgPSBrbWFsbG9jKG51bWJsb2NrcypzaXplb2YoaW50KSwgR0ZQX05PSU8pOworCWluZm8tPnBiYV90b19sYmEgPSBrbWFsbG9jKG51bWJsb2NrcypzaXplb2YoaW50KSwgR0ZQX05PSU8pOworCisJaWYgKGluZm8tPmxiYV90b19wYmEgPT0gTlVMTCB8fCBpbmZvLT5wYmFfdG9fbGJhID09IE5VTEwpIHsKKwkJaWYgKGluZm8tPmxiYV90b19wYmEgIT0gTlVMTCkKKwkJCWtmcmVlKGluZm8tPmxiYV90b19wYmEpOworCQlpZiAoaW5mby0+cGJhX3RvX2xiYSAhPSBOVUxMKQorCQkJa2ZyZWUoaW5mby0+cGJhX3RvX2xiYSk7CisJCWluZm8tPmxiYV90b19wYmEgPSBOVUxMOworCQlpbmZvLT5wYmFfdG9fbGJhID0gTlVMTDsKKwkJa2ZyZWUoYnVmZmVyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1lbXNldChpbmZvLT5sYmFfdG9fcGJhLCAweGZmLCBudW1ibG9ja3Mqc2l6ZW9mKGludCkpOworCW1lbXNldChpbmZvLT5wYmFfdG9fbGJhLCAweGZmLCBudW1ibG9ja3Mqc2l6ZW9mKGludCkpOworCisJLyogc2V0IG1heGltdW0gbGJhICovCisJbWF4X2xiYSA9IGluZm8tPm1heF9sb2dfYmxrczsKKwlpZiAobWF4X2xiYSA+IDEwMDApCisJCW1heF9sYmEgPSAxMDAwOworCisJLy8gRWFjaCBibG9jayBpcyA2NCBieXRlcyBvZiBjb250cm9sIGRhdGEsIHNvIGJsb2NrIGkgaXMgbG9jYXRlZCBpbgorCS8vIHNjYXR0ZXJsaXN0IGJsb2NrIGkqNjQvMTI4ayA9IGkqKDJeNikqKDJeLTE3KSA9IGkqKDJeLTExKQorCisJZm9yIChpPTA7IGk8bnVtYmxvY2tzOyBpKyspIHsKKwkJaW50IHpvbmUgPSBpIC8gMTAyNDsKKworCQlsYmEgPSBzaG9ydF9wYWNrKGJ1ZmZlcltpICogMl0sIGJ1ZmZlcltpICogMiArIDFdKTsKKworCQkJLyogRXZlcnkgMTAyNCBwaHlzaWNhbCBibG9ja3MgKCJ6b25lIiksIHRoZSBMQkEgbnVtYmVycworCQkJICogZ28gYmFjayB0byB6ZXJvLCBidXQgYXJlIHdpdGhpbiBhIGhpZ2hlcgorCQkJICogYmxvY2sgb2YgTEJBJ3MuIEFsc28sIHRoZXJlIGlzIGEgbWF4aW11bSBvZgorCQkJICogMTAwMCBMQkEncyBwZXIgem9uZS4gSW4gb3RoZXIgd29yZHMsIGluIFBCQQorCQkJICogMTAyNC0yMDQ3IHlvdSB3aWxsIGZpbmQgTEJBIDAtOTk5IHdoaWNoIGFyZQorCQkJICogcmVhbGx5IExCQSAxMDAwLTE5OTkuIFllcywgdGhpcyB3YXN0ZXMgMjQKKwkJCSAqIHBoeXNpY2FsIGJsb2NrcyBwZXIgem9uZS4gR28gZmlndXJlLiAKKwkJCSAqIFRoZXNlIGRldmljZXMgY2FuIGhhdmUgYmxvY2tzIGdvIGJhZCwgc28gdGhlcmUKKwkJCSAqIGFyZSAyNCBzcGFyZSBibG9ja3MgdG8gdXNlIHdoZW4gYmxvY2tzIGRvIGdvIGJhZC4KKwkJCSAqLworCisJCQkvKiBTRERSNTUgcmV0dXJucyAweGZmZmYgZm9yIGEgYmFkIGJsb2NrLCBhbmQgMHg0MDAgZm9yIHRoZSAKKwkJCSAqIENJUyBibG9jay4gKElzIHRoaXMgdHJ1ZSBmb3IgY2FyZHMgOE1CIG9yIGxlc3M/PykKKwkJCSAqIFJlY29yZCB0aGVzZSBpbiB0aGUgcGh5c2ljYWwgdG8gbG9naWNhbCBtYXAKKwkJCSAqLyAKKworCQlpbmZvLT5wYmFfdG9fbGJhW2ldID0gbGJhOworCisJCWlmIChsYmEgPj0gbWF4X2xiYSkgeworCQkJY29udGludWU7CisJCX0KKwkJCisJCWlmIChpbmZvLT5sYmFfdG9fcGJhW2xiYSArIHpvbmUgKiAxMDAwXSAhPSBOT1RfQUxMT0NBVEVEICYmCisJCSAgICAhaW5mby0+Zm9yY2VfcmVhZF9vbmx5KSB7CisJCQlwcmludGsoInNkZHI1NTogbWFwIGluY29uc2lzdGVuY3kgYXQgTEJBICUwNFhcbiIsIGxiYSArIHpvbmUgKiAxMDAwKTsKKwkJCWluZm8tPmZvcmNlX3JlYWRfb25seSA9IDE7CisJCX0KKworCQlpZiAobGJhPDB4MTAgfHwgKGxiYT49MHgzRTAgJiYgbGJhPDB4M0VGKSkKKwkJCVVTX0RFQlVHUCgiTEJBICUwNFggPC0+IFBCQSAlMDRYXG4iLCBsYmEsIGkpOworCisJCWluZm8tPmxiYV90b19wYmFbbGJhICsgem9uZSAqIDEwMDBdID0gaTsKKwl9CisKKwlrZnJlZShidWZmZXIpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHNkZHI1NV9jYXJkX2luZm9fZGVzdHJ1Y3Rvcih2b2lkICpleHRyYSkgeworCXN0cnVjdCBzZGRyNTVfY2FyZF9pbmZvICppbmZvID0gKHN0cnVjdCBzZGRyNTVfY2FyZF9pbmZvICopZXh0cmE7CisKKwlpZiAoIWV4dHJhKQorCQlyZXR1cm47CisKKwlpZiAoaW5mby0+bGJhX3RvX3BiYSkKKwkJa2ZyZWUoaW5mby0+bGJhX3RvX3BiYSk7CisJaWYgKGluZm8tPnBiYV90b19sYmEpCisJCWtmcmVlKGluZm8tPnBiYV90b19sYmEpOworfQorCisKKy8qCisgKiBUcmFuc3BvcnQgZm9yIHRoZSBTYW5kaXNrIFNERFItNTUKKyAqLworaW50IHNkZHI1NV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJaW50IHJlc3VsdDsKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBpbnF1aXJ5X3Jlc3BvbnNlWzhdID0geworCQkweDAwLCAweDgwLCAweDAwLCAweDAyLCAweDFGLCAweDAwLCAweDAwLCAweDAwCisJfTsKKyAJLy8gd3JpdGUtcHJvdGVjdGVkIGZvciBub3csIG5vIGJsb2NrIGRlc2NyaXB0b3Igc3VwcG9ydAorCXN0YXRpYyB1bnNpZ25lZCBjaGFyIG1vZGVfcGFnZV8wMVsyMF0gPSB7CisJCTB4MCwgMHgxMiwgMHgwMCwgMHg4MCwgMHgwLCAweDAsIDB4MCwgMHgwLAorCQkweDAxLCAweDBBLAorCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCisJfTsKKwl1bnNpZ25lZCBjaGFyICpwdHIgPSB1cy0+aW9idWY7CisJdW5zaWduZWQgbG9uZyBjYXBhY2l0eTsKKwl1bnNpZ25lZCBpbnQgbGJhOworCXVuc2lnbmVkIGludCBwYmE7CisJdW5zaWduZWQgaW50IHBhZ2U7CisJdW5zaWduZWQgc2hvcnQgcGFnZXM7CisJc3RydWN0IHNkZHI1NV9jYXJkX2luZm8gKmluZm87CisKKwlpZiAoIXVzLT5leHRyYSkgeworCQl1cy0+ZXh0cmEgPSBrbWFsbG9jKAorCQkJc2l6ZW9mKHN0cnVjdCBzZGRyNTVfY2FyZF9pbmZvKSwgR0ZQX05PSU8pOworCQlpZiAoIXVzLT5leHRyYSkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCW1lbXNldCh1cy0+ZXh0cmEsIDAsIHNpemVvZihzdHJ1Y3Qgc2RkcjU1X2NhcmRfaW5mbykpOworCQl1cy0+ZXh0cmFfZGVzdHJ1Y3RvciA9IHNkZHI1NV9jYXJkX2luZm9fZGVzdHJ1Y3RvcjsKKwl9CisKKwlpbmZvID0gKHN0cnVjdCBzZGRyNTVfY2FyZF9pbmZvICopKHVzLT5leHRyYSk7CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UpIHsKKwkJVVNfREVCVUdQKCJTRERSNTU6IHJlcXVlc3Qgc2Vuc2UgJTAyeC8lMDJ4LyUwMnhcbiIsIGluZm8tPnNlbnNlX2RhdGFbMl0sIGluZm8tPnNlbnNlX2RhdGFbMTJdLCBpbmZvLT5zZW5zZV9kYXRhWzEzXSk7CisKKwkJbWVtY3B5IChwdHIsIGluZm8tPnNlbnNlX2RhdGEsIHNpemVvZiBpbmZvLT5zZW5zZV9kYXRhKTsKKwkJcHRyWzBdID0gMHg3MDsKKwkJcHRyWzddID0gMTE7CisJCXVzYl9zdG9yX3NldF94ZmVyX2J1ZiAocHRyLCBzaXplb2YgaW5mby0+c2Vuc2VfZGF0YSwgc3JiKTsKKwkJbWVtc2V0IChpbmZvLT5zZW5zZV9kYXRhLCAwLCBzaXplb2YgaW5mby0+c2Vuc2VfZGF0YSk7CisKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCX0KKworCW1lbXNldCAoaW5mby0+c2Vuc2VfZGF0YSwgMCwgc2l6ZW9mIGluZm8tPnNlbnNlX2RhdGEpOworCisJLyogRHVtbXkgdXAgYSByZXNwb25zZSBmb3IgSU5RVUlSWSBzaW5jZSBTRERSNTUgZG9lc24ndAorCSAgIHJlc3BvbmQgdG8gSU5RVUlSWSBjb21tYW5kcyAqLworCisJaWYgKHNyYi0+Y21uZFswXSA9PSBJTlFVSVJZKSB7CisJCW1lbWNweShwdHIsIGlucXVpcnlfcmVzcG9uc2UsIDgpOworCQlmaWxsX2lucXVpcnlfcmVzcG9uc2UodXMsIHB0ciwgMzYpOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJfQorCisJLyogb25seSBjaGVjayBjYXJkIHN0YXR1cyBpZiB0aGUgbWFwIGlzbid0IGFsbG9jYXRlZCwgaWUgbm8gY2FyZCBzZWVuIHlldAorCSAqIG9yIGlmIGl0J3MgYmVlbiBvdmVyIGhhbGYgYSBzZWNvbmQgc2luY2Ugd2UgbGFzdCBhY2Nlc3NlZCBpdAorCSAqLworCWlmIChpbmZvLT5sYmFfdG9fcGJhID09IE5VTEwgfHwgdGltZV9hZnRlcihqaWZmaWVzLCBpbmZvLT5sYXN0X2FjY2VzcyArIEhaLzIpKSB7CisKKwkJLyogY2hlY2sgdG8gc2VlIGlmIGEgY2FyZCBpcyBmaXR0ZWQgKi8KKwkJcmVzdWx0ID0gc2RkcjU1X3N0YXR1cyAodXMpOworCQlpZiAocmVzdWx0KSB7CisJCQlyZXN1bHQgPSBzZGRyNTVfc3RhdHVzICh1cyk7CisJCQlpZiAoIXJlc3VsdCkgeworCQkJc2V0X3NlbnNlX2luZm8gKDYsIDB4MjgsIDApOwkvKiBuZXcgbWVkaWEsIHNldCB1bml0IGF0dGVudGlvbiwgbm90IHJlYWR5IHRvIHJlYWR5ICovCisJCQl9CisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkJfQorCX0KKworCS8qIGlmIHdlIGRldGVjdGVkIGEgcHJvYmxlbSB3aXRoIHRoZSBtYXAgd2hlbiB3cml0aW5nLAorCSAgIGRvbid0IGFsbG93IGFueSBtb3JlIGFjY2VzcyAqLworCWlmIChpbmZvLT5mYXRhbF9lcnJvcikgeworCisJCXNldF9zZW5zZV9pbmZvICgzLCAweDMxLCAwKTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBSRUFEX0NBUEFDSVRZKSB7CisKKwkJY2FwYWNpdHkgPSBzZGRyNTVfZ2V0X2NhcGFjaXR5KHVzKTsKKworCQlpZiAoIWNhcGFjaXR5KSB7CisJCQlzZXRfc2Vuc2VfaW5mbyAoMywgMHgzMCwgMCk7IC8qIGluY29tcGF0aWJsZSBtZWRpdW0gKi8KKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCQl9CisKKwkJaW5mby0+Y2FwYWNpdHkgPSBjYXBhY2l0eTsKKworCQkvKiBmaWd1cmUgb3V0IHRoZSBtYXhpbXVtIGxvZ2ljYWwgYmxvY2sgbnVtYmVyLCBhbGxvd2luZyBmb3IKKwkJICogdGhlIGZhY3QgdGhhdCBvbmx5IDI1MCBvdXQgb2YgZXZlcnkgMjU2IGFyZSB1c2VkICovCisJCWluZm8tPm1heF9sb2dfYmxrcyA9ICgoaW5mby0+Y2FwYWNpdHkgPj4gKGluZm8tPnBhZ2VzaGlmdCArIGluZm8tPmJsb2Nrc2hpZnQpKSAvIDI1NikgKiAyNTA7CisKKwkJLyogTGFzdCBwYWdlIGluIHRoZSBjYXJkLCBhZGp1c3QgYXMgd2Ugb25seSB1c2UgMjUwIG91dCBvZgorCQkgKiBldmVyeSAyNTYgcGFnZXMgKi8KKwkJY2FwYWNpdHkgPSAoY2FwYWNpdHkgLyAyNTYpICogMjUwOworCisJCWNhcGFjaXR5IC89IFBBR0VTSVpFOworCQljYXBhY2l0eS0tOworCisJCSgoX19iZTMyICopIHB0cilbMF0gPSBjcHVfdG9fYmUzMihjYXBhY2l0eSk7CisJCSgoX19iZTMyICopIHB0cilbMV0gPSBjcHVfdG9fYmUzMihQQUdFU0laRSk7CisJCXVzYl9zdG9yX3NldF94ZmVyX2J1ZihwdHIsIDgsIHNyYik7CisKKwkJc2RkcjU1X3JlYWRfbWFwKHVzKTsKKworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBNT0RFX1NFTlNFXzEwKSB7CisKKwkJbWVtY3B5KHB0ciwgbW9kZV9wYWdlXzAxLCBzaXplb2YgbW9kZV9wYWdlXzAxKTsKKwkJcHRyWzNdID0gKGluZm8tPnJlYWRfb25seSB8fCBpbmZvLT5mb3JjZV9yZWFkX29ubHkpID8gMHg4MCA6IDA7CisJCXVzYl9zdG9yX3NldF94ZmVyX2J1ZihwdHIsIHNpemVvZihtb2RlX3BhZ2VfMDEpLCBzcmIpOworCisJCWlmICggKHNyYi0+Y21uZFsyXSAmIDB4M0YpID09IDB4MDEgKSB7CisJCQlVU19ERUJVR1AoCisJCQkgICJTRERSNTU6IER1bW15IHVwIHJlcXVlc3QgZm9yIG1vZGUgcGFnZSAxXG4iKTsKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKworCQl9IGVsc2UgaWYgKCAoc3JiLT5jbW5kWzJdICYgMHgzRikgPT0gMHgzRiApIHsKKwkJCVVTX0RFQlVHUCgKKwkJCSAgIlNERFI1NTogRHVtbXkgdXAgcmVxdWVzdCBmb3IgYWxsIG1vZGUgcGFnZXNcbiIpOworCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCQl9CisKKwkJc2V0X3NlbnNlX2luZm8gKDUsIDB4MjQsIDApOwkvKiBpbnZhbGlkIGZpZWxkIGluIGNvbW1hbmQgKi8KKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBBTExPV19NRURJVU1fUkVNT1ZBTCkgeworCisJCVVTX0RFQlVHUCgKKwkJICAiU0REUjU1OiAlcyBtZWRpdW0gcmVtb3ZhbC4gTm90IHRoYXQgSSBjYW4gZG8iCisJCSAgIiBhbnl0aGluZyBhYm91dCBpdC4uLlxuIiwKKwkJICAoc3JiLT5jbW5kWzRdJjB4MDMpID8gIlByZXZlbnQiIDogIkFsbG93Iik7CisKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBSRUFEXzEwIHx8IHNyYi0+Y21uZFswXSA9PSBXUklURV8xMCkgeworCisJCXBhZ2UgPSBzaG9ydF9wYWNrKHNyYi0+Y21uZFszXSwgc3JiLT5jbW5kWzJdKTsKKwkJcGFnZSA8PD0gMTY7CisJCXBhZ2UgfD0gc2hvcnRfcGFjayhzcmItPmNtbmRbNV0sIHNyYi0+Y21uZFs0XSk7CisJCXBhZ2VzID0gc2hvcnRfcGFjayhzcmItPmNtbmRbOF0sIHNyYi0+Y21uZFs3XSk7CisKKwkJcGFnZSA8PD0gaW5mby0+c21hbGxwYWdlc2hpZnQ7CisKKwkJLy8gY29udmVydCBwYWdlIHRvIGJsb2NrIGFuZCBwYWdlLXdpdGhpbi1ibG9jaworCisJCWxiYSA9IHBhZ2UgPj4gaW5mby0+YmxvY2tzaGlmdDsKKwkJcGFnZSA9IHBhZ2UgJiBpbmZvLT5ibG9ja21hc2s7CisKKwkJLy8gbG9jYXRlIHBoeXNpY2FsIGJsb2NrIGNvcnJlc3BvbmRpbmcgdG8gbG9naWNhbCBibG9jaworCisJCWlmIChsYmEgPj0gaW5mby0+bWF4X2xvZ19ibGtzKSB7CisKKwkJCVVTX0RFQlVHUCgiRXJyb3I6IFJlcXVlc3RlZCBMQkEgJTA0WCBleGNlZWRzIG1heGltdW0gIgorCQkJICAiYmxvY2sgJTA0WFxuIiwgbGJhLCBpbmZvLT5tYXhfbG9nX2Jsa3MtMSk7CisKKwkJCXNldF9zZW5zZV9pbmZvICg1LCAweDI0LCAwKTsJLyogaW52YWxpZCBmaWVsZCBpbiBjb21tYW5kICovCisKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCQl9CisKKwkJcGJhID0gaW5mby0+bGJhX3RvX3BiYVtsYmFdOworCisJCWlmIChzcmItPmNtbmRbMF0gPT0gV1JJVEVfMTApIHsKKwkJCVVTX0RFQlVHUCgiV1JJVEVfMTA6IHdyaXRlIGJsb2NrICUwNFggKExCQSAlMDRYKSBwYWdlICUwMVgiCisJCQkJIiBwYWdlcyAlZFxuIiwKKwkJCQlwYmEsIGxiYSwgcGFnZSwgcGFnZXMpOworCisJCQlyZXR1cm4gc2RkcjU1X3dyaXRlX2RhdGEodXMsIGxiYSwgcGFnZSwgcGFnZXMpOworCQl9IGVsc2UgeworCQkJVVNfREVCVUdQKCJSRUFEXzEwOiByZWFkIGJsb2NrICUwNFggKExCQSAlMDRYKSBwYWdlICUwMVgiCisJCQkJIiBwYWdlcyAlZFxuIiwKKwkJCQlwYmEsIGxiYSwgcGFnZSwgcGFnZXMpOworCisJCQlyZXR1cm4gc2RkcjU1X3JlYWRfZGF0YSh1cywgbGJhLCBwYWdlLCBwYWdlcyk7CisJCX0KKwl9CisKKworCWlmIChzcmItPmNtbmRbMF0gPT0gVEVTVF9VTklUX1JFQURZKSB7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFNUQVJUX1NUT1ApIHsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCX0KKworCXNldF9zZW5zZV9pbmZvICg1LCAweDIwLCAwKTsJLyogaWxsZWdhbCBjb21tYW5kICovCisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsgLy8gRklYTUU6IHNlbnNlIGJ1ZmZlcj8KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjU1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZiZDMyZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjU1LmgKQEAgLTAsMCArMSwzNCBAQAorLyogRHJpdmVyIGZvciBTYW5EaXNrIFNERFItNTUgU21hcnRNZWRpYSByZWFkZXIKKyAqIEhlYWRlciBGaWxlCisgKgorICogJElkOiQKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDIwMDIgU2ltb24gTXVudG9uCisgKgorICogU2VlIHNkZHI1NS5jIGZvciBtb3JlIGV4cGxhbmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfVVNCX1NIVVRUTEVfRVVTQl9TRERSNTVfSAorI2RlZmluZSBfVVNCX1NIVVRUTEVfRVVTQl9TRERSNTVfSAorCisvKiBTYW5kaXNrIFNERFItNTUgc3R1ZmYgKi8KKworZXh0ZXJuIGludCBzZGRyNTVfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKK2V4dGVybiBpbnQgc2RkcjU1X3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWZmMDNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmMKQEAgLTAsMCArMSwxNzEyIEBACisvKiBEcml2ZXIgZm9yIFNDTSBNaWNyb3N5c3RlbXMgVVNCLUFUQVBJIGNhYmxlCisgKgorICogJElkOiBzaHV0dGxlX3VzYmF0LmMsdiAxLjE3IDIwMDIvMDQvMjIgMDM6Mzk6NDMgbWRoYXJtIEV4cCAkCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAyMDAwLCAyMDAxIFJvYmVydCBCYXJ1Y2ggKGF1dG9waGlsZUBzdGFyYmFuZC5uZXQpCisgKiAgIChjKSAyMDA0LCAyMDA1IERhbmllbCBEcmFrZSA8ZHNkQGdlbnRvby5vcmc+CisgKgorICogRGV2ZWxvcGVkIHdpdGggdGhlIGFzc2lzdGFuY2Ugb2Y6CisgKiAgIChjKSAyMDAyIEFsYW4gU3Rlcm4gPHN0ZXJuQHJvd2xhbmQub3JnPgorICoKKyAqIEZsYXNoIHN1cHBvcnQgYmFzZWQgb24gZWFybGllciB3b3JrIGJ5OgorICogICAoYykgMjAwMiBUaG9tYXMgS3JlaWxpbmcgPHVzYmRldkBzbTA0LmRlPgorICoKKyAqIE1hbnkgb3JpZ2luYWxseSBBVEFQSSBkZXZpY2VzIHdlcmUgc2xpZ2h0bHkgbW9kaWZpZWQgdG8gbWVldCB0aGUgVVNCCisgKiBtYXJrZXQgYnkgdXNpbmcgc29tZSBraW5kIG9mIHRyYW5zbGF0aW9uIGZyb20gQVRBUEkgdG8gVVNCIG9uIHRoZSBob3N0LAorICogYW5kIHRoZSBwZXJpcGhlcmFsIHdvdWxkIHRyYW5zbGF0ZSBmcm9tIFVTQiBiYWNrIHRvIEFUQVBJLgorICoKKyAqIFNDTSBNaWNyb3N5c3RlbXMgKHd3dy5zY21taWNyby5jb20pIG1ha2VzIGEgZGV2aWNlLCBzb2xkIHRvIE9FTSdzIG9ubHksIAorICogd2hpY2ggZG9lcyB0aGUgVVNCLXRvLUFUQVBJIGNvbnZlcnNpb24uICBCeSBvYnRhaW5pbmcgdGhlIGRhdGEgc2hlZXQgb24KKyAqIHRoZWlyIGRldmljZSB1bmRlciBub25kaXNjbG9zdXJlIGFncmVlbWVudCwgSSBoYXZlIGJlZW4gYWJsZSB0byB3cml0ZQorICogdGhpcyBkcml2ZXIgZm9yIExpbnV4LgorICoKKyAqIFRoZSBjaGlwIHVzZWQgaW4gdGhlIGRldmljZSBjYW4gYWxzbyBiZSB1c2VkIGZvciBFUFAgYW5kIElTQSB0cmFuc2xhdGlvbgorICogYXMgd2VsbC4gVGhpcyBkcml2ZXIgaXMgb25seSBndWFyYW50ZWVkIHRvIHdvcmsgd2l0aCB0aGUgQVRBUEkKKyAqIHRyYW5zbGF0aW9uLgorICoKKyAqIFNlZSB0aGUgS2NvbmZpZyBoZWxwIHRleHQgZm9yIGEgbGlzdCBvZiBkZXZpY2VzIGtub3duIHRvIGJlIHN1cHBvcnRlZCBieQorICogdGhpcyBkcml2ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KKworI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisKKyNpbmNsdWRlICJ1c2IuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAic2h1dHRsZV91c2JhdC5oIgorCisjZGVmaW5lIHNob3J0X3BhY2soTFNCLE1TQikgKCAoKHUxNikoTFNCKSkgfCAoICgodTE2KShNU0IpKTw8OCApICkKKyNkZWZpbmUgTFNCX29mKHMpICgocykmMHhGRikKKyNkZWZpbmUgTVNCX29mKHMpICgocyk+PjgpCisKK3N0YXRpYyBpbnQgdHJhbnNmZXJyZWQgPSAwOworCitzdGF0aWMgaW50IHVzYmF0X2ZsYXNoX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICogc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOworc3RhdGljIGludCB1c2JhdF9ocDgyMDBlX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7CisKKy8qCisgKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBwcm9kdWNlIGFuIEFUQVBJIHJlYWQvd3JpdGUgc2VjdG9ycyBjb21tYW5kCisgKiBVc2UgY21kPTB4MjAgZm9yIHJlYWQsIGNtZD0weDMwIGZvciB3cml0ZQorICovCitzdGF0aWMgdm9pZCB1c2JhdF9wYWNrX2F0YXBpX3NlY3Rvcl9jbWQodW5zaWduZWQgY2hhciAqYnVmLAorCQkJCQl1bnNpZ25lZCBjaGFyIHRoaXN0aW1lLAorCQkJCQl1MzIgc2VjdG9yLCB1bnNpZ25lZCBjaGFyIGNtZCkKK3sKKwlidWZbMF0gPSAwOworCWJ1ZlsxXSA9IHRoaXN0aW1lOworCWJ1ZlsyXSA9IHNlY3RvciAmIDB4RkY7CisJYnVmWzNdID0gKHNlY3RvciA+PiAgOCkgJiAweEZGOworCWJ1Zls0XSA9IChzZWN0b3IgPj4gMTYpICYgMHhGRjsKKwlidWZbNV0gPSAweEUwIHwgKChzZWN0b3IgPj4gMjQpICYgMHgwRik7CisJYnVmWzZdID0gY21kOworfQorCisvKgorICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gZ2V0IHRoZSBkZXZpY2UgdHlwZSAoZmxhc2ggb3IgaHA4MjAwKQorICovCitzdGF0aWMgaW50IHVzYmF0X2dldF9kZXZpY2VfdHlwZShzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJcmV0dXJuICgoc3RydWN0IHVzYmF0X2luZm8qKXVzLT5leHRyYSktPmRldmljZXR5cGU7Cit9CisKKy8qCisgKiBSZWFkIGEgcmVnaXN0ZXIgZnJvbSB0aGUgZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfcmVhZChzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgYWNjZXNzLAorCQkgICAgICB1bnNpZ25lZCBjaGFyIHJlZywKKwkJICAgICAgdW5zaWduZWQgY2hhciAqY29udGVudCkKK3sKKwlyZXR1cm4gdXNiX3N0b3JfY3RybF90cmFuc2Zlcih1cywKKwkJdXMtPnJlY3ZfY3RybF9waXBlLAorCQlhY2Nlc3MgfCBVU0JBVF9DTURfUkVBRF9SRUcsCisJCTB4QzAsCisJCSh1MTYpcmVnLAorCQkwLAorCQljb250ZW50LAorCQkxKTsKK30KKworLyoKKyAqIFdyaXRlIHRvIGEgcmVnaXN0ZXIgb24gdGhlIGRldmljZQorICovCitzdGF0aWMgaW50IHVzYmF0X3dyaXRlKHN0cnVjdCB1c19kYXRhICp1cywKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgYWNjZXNzLAorCQkgICAgICAgdW5zaWduZWQgY2hhciByZWcsCisJCSAgICAgICB1bnNpZ25lZCBjaGFyIGNvbnRlbnQpCit7CisJcmV0dXJuIHVzYl9zdG9yX2N0cmxfdHJhbnNmZXIodXMsCisJCXVzLT5zZW5kX2N0cmxfcGlwZSwKKwkJYWNjZXNzIHwgVVNCQVRfQ01EX1dSSVRFX1JFRywKKwkJMHg0MCwKKwkJc2hvcnRfcGFjayhyZWcsIGNvbnRlbnQpLAorCQkwLAorCQlOVUxMLAorCQkwKTsKK30KKworLyoKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHBlcmZvcm0gYSBidWxrIHJlYWQKKyAqLworc3RhdGljIGludCB1c2JhdF9idWxrX3JlYWQoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJCQkJCSB1bnNpZ25lZCBjaGFyICpkYXRhLAorCQkJCQkJCSB1bnNpZ25lZCBpbnQgbGVuKQoreworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIFVTQl9TVE9SX1hGRVJfR09PRDsKKworCVVTX0RFQlVHUCgidXNiYXRfYnVsa19yZWFkOiBsZW4gPSAlZFxuIiwgbGVuKTsKKwlyZXR1cm4gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5yZWN2X2J1bGtfcGlwZSwgZGF0YSwgbGVuLCBOVUxMKTsKK30KKworLyoKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHBlcmZvcm0gYSBidWxrIHdyaXRlCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfYnVsa193cml0ZShzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkJCQkJdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJCQkJCQl1bnNpZ25lZCBpbnQgbGVuKQoreworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIFVTQl9TVE9SX1hGRVJfR09PRDsKKworCVVTX0RFQlVHUCgidXNiYXRfYnVsa193cml0ZTogIGxlbiA9ICVkXG4iLCBsZW4pOworCXJldHVybiB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnNlbmRfYnVsa19waXBlLCBkYXRhLCBsZW4sIE5VTEwpOworfQorCisvKgorICogU29tZSBVU0JBVC1zcGVjaWZpYyBjb21tYW5kcyBjYW4gb25seSBiZSBleGVjdXRlZCBvdmVyIGEgY29tbWFuZCB0cmFuc3BvcnQKKyAqIFRoaXMgdHJhbnNwb3J0IGFsbG93cyBvbmUgKGxlbj04KSBvciB0d28gKGxlbj0xNikgdmVuZG9yLXNwZWNpZmljIGNvbW1hbmRzCisgKiB0byBiZSBleGVjdXRlZC4KKyAqLworc3RhdGljIGludCB1c2JhdF9leGVjdXRlX2NvbW1hbmQoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJCQkJCQkgdW5zaWduZWQgY2hhciAqY29tbWFuZHMsCisJCQkJCQkJCSB1bnNpZ25lZCBpbnQgbGVuKQoreworCXJldHVybiB1c2Jfc3Rvcl9jdHJsX3RyYW5zZmVyKHVzLCB1cy0+c2VuZF9jdHJsX3BpcGUsCisJCQkJCQkJCSAgVVNCQVRfQ01EX0VYRUNfQ01ELCAweDQwLCAwLCAwLAorCQkJCQkJCQkgIGNvbW1hbmRzLCBsZW4pOworfQorCisvKgorICogUmVhZCB0aGUgc3RhdHVzIHJlZ2lzdGVyCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfZ2V0X3N0YXR1cyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGNoYXIgKnN0YXR1cykKK3sKKwlpbnQgcmM7CisJcmMgPSB1c2JhdF9yZWFkKHVzLCBVU0JBVF9BVEEsIFVTQkFUX0FUQV9TVEFUVVMsIHN0YXR1cyk7CisKKwlVU19ERUJVR1AoInVzYmF0X2dldF9zdGF0dXM6IDB4JTAyWFxuIiwgKHVuc2lnbmVkIHNob3J0KSAoKnN0YXR1cykpOworCXJldHVybiByYzsKK30KKworLyoKKyAqIENoZWNrIHRoZSBkZXZpY2Ugc3RhdHVzCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfY2hlY2tfc3RhdHVzKHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwl1bnNpZ25lZCBjaGFyICpyZXBseSA9IHVzLT5pb2J1ZjsKKwlpbnQgcmM7CisKKwlpZiAoIXVzKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJcmMgPSB1c2JhdF9nZXRfc3RhdHVzKHVzLCByZXBseSk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisKKwlpZiAoKnJlcGx5ICYgMHgwMSAmJiAqcmVwbHkgIT0gMHg1MSkgLy8gZXJyb3IvY2hlY2sgY29uZGl0aW9uICgweDUxIGlzIG9rKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKworCWlmICgqcmVwbHkgJiAweDIwKSAvLyBkZXZpY2UgZmF1bHQKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKy8qCisgKiBTdG9yZXMgY3JpdGljYWwgaW5mb3JtYXRpb24gaW4gaW50ZXJuYWwgcmVnaXN0ZXJzIGluIHByZXBhcnRpb24gZm9yIHRoZSBleGVjdXRpb24KKyAqIG9mIGEgY29uZGl0aW9uYWwgdXNiYXRfcmVhZF9ibG9ja3Mgb3IgdXNiYXRfd3JpdGVfYmxvY2tzIGNhbGwuCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfc2V0X3NodXR0bGVfZmVhdHVyZXMoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgZXh0ZXJuYWxfdHJpZ2dlciwKKwkJCQkgICAgICB1bnNpZ25lZCBjaGFyIGVwcF9jb250cm9sLAorCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgbWFza19ieXRlLAorCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgdGVzdF9wYXR0ZXJuLAorCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgc3ViY291bnRILAorCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgc3ViY291bnRMKQoreworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisKKwljb21tYW5kWzBdID0gMHg0MDsKKwljb21tYW5kWzFdID0gVVNCQVRfQ01EX1NFVF9GRUFUOworCisJLy8gVGhlIG9ubHkgYml0IHJlbGV2YW50IHRvIEFUQSBhY2Nlc3MgaXMgYml0IDYKKwkvLyB3aGljaCBkZWZpbmVzIDggYml0IGRhdGEgYWNjZXNzIChzZXQpIG9yIDE2IGJpdCAodW5zZXQpCisJY29tbWFuZFsyXSA9IGVwcF9jb250cm9sOworCisJLy8gSWYgRkNRIGlzIHNldCBpbiB0aGUgcXVhbGlmaWVyIChkZWZpbmVkIGluIFIvVyBjbWQpLCB0aGVuIGJpdHMgVTAsIFUxLAorCS8vIEVUMSBhbmQgRVQyIGRlZmluZSBhbiBleHRlcm5hbCBldmVudCB0byBiZSBjaGVja2VkIGZvciBvbiBldmVudCBvZiBhCisJLy8gX3JlYWRfYmxvY2tzIG9yIF93cml0ZV9ibG9ja3Mgb3BlcmF0aW9uLiBUaGUgcmVhZC93cml0ZSB3aWxsIG5vdCB0YWtlCisJLy8gcGxhY2UgdW5sZXNzIHRoZSBkZWZpbmVkIHRyaWdnZXIgc2lnbmFsIGlzIGFjdGl2ZS4KKwljb21tYW5kWzNdID0gZXh0ZXJuYWxfdHJpZ2dlcjsKKworCS8vIFRoZSByZXN1bHRhbnQgYnl0ZSBvZiB0aGUgbWFzayBvcGVyYXRpb24gKHNlZSBtYXNrX2J5dGUpIGlzIGNvbXBhcmVkIGZvcgorCS8vIGVxdWl2YWxlbmNlIHdpdGggdGhpcyB0ZXN0IHBhdHRlcm4uIElmIGVxdWFsLCB0aGUgcmVhZC93cml0ZSB3aWxsIHRha2UKKwkvLyBwbGFjZS4KKwljb21tYW5kWzRdID0gdGVzdF9wYXR0ZXJuOworCisJLy8gVGhpcyB2YWx1ZSBpcyBsb2dpY2FsbHkgQU5EZWQgd2l0aCB0aGUgc3RhdHVzIHJlZ2lzdGVyIGZpZWxkIHNwZWNpZmllZAorCS8vIGluIHRoZSByZWFkL3dyaXRlIGNvbW1hbmQuCisJY29tbWFuZFs1XSA9IG1hc2tfYnl0ZTsKKworCS8vIElmIEFMUSBpcyBzZXQgaW4gdGhlIHF1YWxpZmllciwgdGhpcyBmaWVsZCBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUKKwkvLyByZWdpc3RlcnMgd2hlcmUgdGhlIGJ5dGUgY291bnQgc2hvdWxkIGJlIHJlYWQgZm9yIHRyYW5zZmVycmluZyB0aGUgZGF0YS4KKwkvLyBJZiBBTFEgaXMgbm90IHNldCwgdGhlbiB0aGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYmUKKwkvLyB0cmFuc2ZlcnJlZC4KKwljb21tYW5kWzZdID0gc3ViY291bnRMOworCWNvbW1hbmRbN10gPSBzdWJjb3VudEg7CisKKwlyZXR1cm4gdXNiYXRfZXhlY3V0ZV9jb21tYW5kKHVzLCBjb21tYW5kLCA4KTsKK30KKworLyoKKyAqIEJsb2NrLCB3YWl0aW5nIGZvciBhbiBBVEEgZGV2aWNlIHRvIGJlY29tZSBub3QgYnVzeSBvciB0byByZXBvcnQKKyAqIGFuIGVycm9yIGNvbmRpdGlvbi4KKyAqLworc3RhdGljIGludCB1c2JhdF93YWl0X25vdF9idXN5KHN0cnVjdCB1c19kYXRhICp1cywgaW50IG1pbnV0ZXMpCit7CisJaW50IGk7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBjaGFyICpzdGF0dXMgPSB1cy0+aW9idWY7CisKKwkvKiBTeW5jaHJvbml6aW5nIGNhY2hlIG9uIGEgQ0RSIGNvdWxkIHRha2UgYSBoZWNrIG9mIGEgbG9uZyB0aW1lLAorCSAqIGJ1dCBwcm9iYWJseSBub3QgbW9yZSB0aGFuIDEwIG1pbnV0ZXMgb3Igc28uIE9uIHRoZSBvdGhlciBoYW5kLAorCSAqIGRvaW5nIGEgZnVsbCBibGFuayBvbiBhIENEUlcgYXQgc3BlZWQgMSB3aWxsIHRha2UgYWJvdXQgNzUKKwkgKiBtaW51dGVzIQorCSAqLworCisJZm9yIChpPTA7IGk8MTIwMCttaW51dGVzKjYwOyBpKyspIHsKKworIAkJcmVzdWx0ID0gdXNiYXRfZ2V0X3N0YXR1cyh1cywgc3RhdHVzKTsKKworCQlpZiAocmVzdWx0IT1VU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQlpZiAoKnN0YXR1cyAmIDB4MDEpIHsgLy8gY2hlY2sgY29uZGl0aW9uCisJCQlyZXN1bHQgPSB1c2JhdF9yZWFkKHVzLCBVU0JBVF9BVEEsIDB4MTAsIHN0YXR1cyk7CisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkJfQorCQlpZiAoKnN0YXR1cyAmIDB4MjApIC8vIGRldmljZSBmYXVsdAorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisKKwkJaWYgKCgqc3RhdHVzICYgMHg4MCk9PTB4MDApIHsgLy8gbm90IGJ1c3kKKwkJCVVTX0RFQlVHUCgiV2FpdGVkIG5vdCBidXN5IGZvciAlZCBzdGVwc1xuIiwgaSk7CisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJCX0KKworCQlpZiAoaTw1MDApCisJCQltc2xlZXAoMTApOyAvLyA1IHNlY29uZHMKKwkJZWxzZSBpZiAoaTw3MDApCisJCQltc2xlZXAoNTApOyAvLyAxMCBzZWNvbmRzCisJCWVsc2UgaWYgKGk8MTIwMCkKKwkJCW1zbGVlcCgxMDApOyAvLyA1MCBzZWNvbmRzCisJCWVsc2UKKwkJCW1zbGVlcCgxMDAwKTsgLy8gWCBtaW51dGVzCisJfQorCisJVVNfREVCVUdQKCJXYWl0ZWQgbm90IGJ1c3kgZm9yICVkIG1pbnV0ZXMsIHRpbWluZyBvdXQuXG4iLAorCQltaW51dGVzKTsKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKK30KKworLyoKKyAqIFJlYWQgYmxvY2sgZGF0YSBmcm9tIHRoZSBkYXRhIHJlZ2lzdGVyCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfcmVhZF9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkgICAgdW5zaWduZWQgY2hhciAqY29udGVudCwKKwkJCSAgICB1bnNpZ25lZCBzaG9ydCBsZW4pCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCisJaWYgKCFsZW4pCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKworCWNvbW1hbmRbMF0gPSAweEMwOworCWNvbW1hbmRbMV0gPSBVU0JBVF9BVEEgfCBVU0JBVF9DTURfUkVBRF9CTE9DSzsKKwljb21tYW5kWzJdID0gVVNCQVRfQVRBX0RBVEE7CisJY29tbWFuZFszXSA9IDA7CisJY29tbWFuZFs0XSA9IDA7CisJY29tbWFuZFs1XSA9IDA7CisJY29tbWFuZFs2XSA9IExTQl9vZihsZW4pOworCWNvbW1hbmRbN10gPSBNU0Jfb2YobGVuKTsKKworCXJlc3VsdCA9IHVzYmF0X2V4ZWN1dGVfY29tbWFuZCh1cywgY29tbWFuZCwgOCk7CisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlyZXN1bHQgPSB1c2JhdF9idWxrX3JlYWQodXMsIGNvbnRlbnQsIGxlbik7CisJcmV0dXJuIChyZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9HT09EID8KKwkJCVVTQl9TVE9SX1RSQU5TUE9SVF9HT09EIDogVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SKTsKK30KKworLyoKKyAqIFdyaXRlIGJsb2NrIGRhdGEgdmlhIHRoZSBkYXRhIHJlZ2lzdGVyCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfd3JpdGVfYmxvY2soc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJICAgICB1bnNpZ25lZCBjaGFyIGFjY2VzcywKKwkJCSAgICAgdW5zaWduZWQgY2hhciAqY29udGVudCwKKwkJCSAgICAgdW5zaWduZWQgc2hvcnQgbGVuLAorCQkJICAgICBpbnQgbWludXRlcykKK3sKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisKKwlpZiAoIWxlbikKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCisJY29tbWFuZFswXSA9IDB4NDA7CisJY29tbWFuZFsxXSA9IGFjY2VzcyB8IFVTQkFUX0NNRF9XUklURV9CTE9DSzsKKwljb21tYW5kWzJdID0gVVNCQVRfQVRBX0RBVEE7CisJY29tbWFuZFszXSA9IDA7CisJY29tbWFuZFs0XSA9IDA7CisJY29tbWFuZFs1XSA9IDA7CisJY29tbWFuZFs2XSA9IExTQl9vZihsZW4pOworCWNvbW1hbmRbN10gPSBNU0Jfb2YobGVuKTsKKworCXJlc3VsdCA9IHVzYmF0X2V4ZWN1dGVfY29tbWFuZCh1cywgY29tbWFuZCwgOCk7CisKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCXJlc3VsdCA9IHVzYmF0X2J1bGtfd3JpdGUodXMsIGNvbnRlbnQsIGxlbik7CisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlyZXR1cm4gdXNiYXRfd2FpdF9ub3RfYnVzeSh1cywgbWludXRlcyk7Cit9CisKKy8qCisgKiBQcm9jZXNzIHJlYWQgYW5kIHdyaXRlIHJlcXVlc3RzCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfaHA4MjAwZV9yd19ibG9ja190ZXN0KHN0cnVjdCB1c19kYXRhICp1cywKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciBhY2Nlc3MsCisJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKnJlZ2lzdGVycywKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciAqZGF0YV9vdXQsCisJCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IG51bV9yZWdpc3RlcnMsCisJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgZGF0YV9yZWcsCisJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgc3RhdHVzX3JlZywKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciB0aW1lb3V0LAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyIHF1YWxpZmllciwKKwkJCQkgICAgICAgaW50IGRpcmVjdGlvbiwKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciAqY29udGVudCwKKwkJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgbGVuLAorCQkJCSAgICAgICBpbnQgdXNlX3NnLAorCQkJCSAgICAgICBpbnQgbWludXRlcykKK3sKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGludCBwaXBlID0gKGRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpID8KKwkJCXVzLT5yZWN2X2J1bGtfcGlwZSA6IHVzLT5zZW5kX2J1bGtfcGlwZTsKKworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJaW50IGksIGo7CisJaW50IGNtZGxlbjsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXMtPmlvYnVmOworCXVuc2lnbmVkIGNoYXIgKnN0YXR1cyA9IHVzLT5pb2J1ZjsKKworCUJVR19PTihudW1fcmVnaXN0ZXJzID4gVVNfSU9CVUZfU0laRS8yKTsKKworCWZvciAoaT0wOyBpPDIwOyBpKyspIHsKKworCQkvKgorCQkgKiBUaGUgZmlyc3QgdGltZSB3ZSBzZW5kIHRoZSBmdWxsIGNvbW1hbmQsIHdoaWNoIGNvbnNpc3RzCisJCSAqIG9mIGRvd25sb2FkaW5nIHRoZSBTQ1NJIGNvbW1hbmQgZm9sbG93ZWQgYnkgZG93bmxvYWRpbmcKKwkJICogdGhlIGRhdGEgdmlhIGEgd3JpdGUtYW5kLXRlc3QuICBBbnkgb3RoZXIgdGltZSB3ZSBvbmx5CisJCSAqIHNlbmQgdGhlIGNvbW1hbmQgdG8gZG93bmxvYWQgdGhlIGRhdGEgLS0gdGhlIFNDU0kgY29tbWFuZAorCQkgKiBpcyBzdGlsbCAnYWN0aXZlJyBpbiBzb21lIHNlbnNlIGluIHRoZSBkZXZpY2UuCisJCSAqIAorCQkgKiBXZSdyZSBvbmx5IGdvaW5nIHRvIHRyeSBzZW5kaW5nIHRoZSBkYXRhIDEwIHRpbWVzLiBBZnRlcgorCQkgKiB0aGF0LCB3ZSBqdXN0IHJldHVybiBhIGZhaWx1cmUuCisJCSAqLworCisJCWlmIChpPT0wKSB7CisJCQljbWRsZW4gPSAxNjsKKwkJCS8vIFdyaXRlIHRvIG11bHRpcGxlIHJlZ2lzdGVycworCQkJLy8gTm90IHJlYWxseSBzdXJlIHRoZSAweDA3LCAweDE3LCAweGZjLCAweGU3IGlzIG5lY2Vzc2FyeSBoZXJlLAorCQkJLy8gYnV0IHRoYXQncyB3aGF0IGNhbWUgb3V0IG9mIHRoZSB0cmFjZSBldmVyeSBzaW5nbGUgdGltZS4KKwkJCWNvbW1hbmRbMF0gPSAweDQwOworCQkJY29tbWFuZFsxXSA9IGFjY2VzcyB8IFVTQkFUX0NNRF9XUklURV9SRUdTOworCQkJY29tbWFuZFsyXSA9IDB4MDc7CisJCQljb21tYW5kWzNdID0gMHgxNzsKKwkJCWNvbW1hbmRbNF0gPSAweEZDOworCQkJY29tbWFuZFs1XSA9IDB4RTc7CisJCQljb21tYW5kWzZdID0gTFNCX29mKG51bV9yZWdpc3RlcnMqMik7CisJCQljb21tYW5kWzddID0gTVNCX29mKG51bV9yZWdpc3RlcnMqMik7CisJCX0gZWxzZQorCQkJY21kbGVuID0gODsKKworCQkvLyBDb25kaXRpb25hbGx5IHJlYWQgb3Igd3JpdGUgYmxvY2tzCisJCWNvbW1hbmRbY21kbGVuLThdID0gKGRpcmVjdGlvbj09RE1BX1RPX0RFVklDRSA/IDB4NDAgOiAweEMwKTsKKwkJY29tbWFuZFtjbWRsZW4tN10gPSBhY2Nlc3MgfAorCQkJCShkaXJlY3Rpb249PURNQV9UT19ERVZJQ0UgPworCQkJCSBVU0JBVF9DTURfQ09ORF9XUklURV9CTE9DSyA6IFVTQkFUX0NNRF9DT05EX1JFQURfQkxPQ0spOworCQljb21tYW5kW2NtZGxlbi02XSA9IGRhdGFfcmVnOworCQljb21tYW5kW2NtZGxlbi01XSA9IHN0YXR1c19yZWc7CisJCWNvbW1hbmRbY21kbGVuLTRdID0gdGltZW91dDsKKwkJY29tbWFuZFtjbWRsZW4tM10gPSBxdWFsaWZpZXI7CisJCWNvbW1hbmRbY21kbGVuLTJdID0gTFNCX29mKGxlbik7CisJCWNvbW1hbmRbY21kbGVuLTFdID0gTVNCX29mKGxlbik7CisKKwkJcmVzdWx0ID0gdXNiYXRfZXhlY3V0ZV9jb21tYW5kKHVzLCBjb21tYW5kLCBjbWRsZW4pOworCisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCQlpZiAoaT09MCkgeworCisJCQlmb3IgKGo9MDsgajxudW1fcmVnaXN0ZXJzOyBqKyspIHsKKwkJCQlkYXRhW2o8PDFdID0gcmVnaXN0ZXJzW2pdOworCQkJCWRhdGFbMSsoajw8MSldID0gZGF0YV9vdXRbal07CisJCQl9CisKKwkJCXJlc3VsdCA9IHVzYmF0X2J1bGtfd3JpdGUodXMsIGRhdGEsIG51bV9yZWdpc3RlcnMqMik7CisJCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJCX0KKworCisJCS8vVVNfREVCVUdQKCJUcmFuc2ZlciAlcyAlZCBieXRlcywgc2cgYnVmZmVycyAlZFxuIiwKKwkJLy8JZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UgPyAib3V0IiA6ICJpbiIsCisJCS8vCWxlbiwgdXNlX3NnKTsKKworCQlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX3NnKHVzLAorCQkJcGlwZSwgY29udGVudCwgbGVuLCB1c2Vfc2csIE5VTEwpOworCisJCS8qCisJCSAqIElmIHdlIGdldCBhIHN0YWxsIG9uIHRoZSBidWxrIGRvd25sb2FkLCB3ZSdsbCByZXRyeQorCQkgKiB0aGUgYnVsayBkb3dubG9hZCAtLSBidXQgbm90IHRoZSBTQ1NJIGNvbW1hbmQgYmVjYXVzZQorCQkgKiBpbiBzb21lIHNlbnNlIHRoZSBTQ1NJIGNvbW1hbmQgaXMgc3RpbGwgJ2FjdGl2ZScgYW5kCisJCSAqIHdhaXRpbmcgZm9yIHRoZSBkYXRhLiBEb24ndCBhc2sgbWUgd2h5IHRoaXMgc2hvdWxkIGJlOworCQkgKiBJJ20gb25seSBmb2xsb3dpbmcgd2hhdCB0aGUgV2luZG96ZSBkcml2ZXIgZGlkLgorCQkgKgorCQkgKiBOb3RlIHRoYXQgYSBzdGFsbCBmb3IgdGhlIHRlc3QtYW5kLXJlYWQvd3JpdGUgY29tbWFuZCBtZWFucworCQkgKiB0aGF0IHRoZSB0ZXN0IGZhaWxlZC4gSW4gdGhpcyBjYXNlIHdlJ3JlIHRlc3RpbmcgdG8gbWFrZQorCQkgKiBzdXJlIHRoYXQgdGhlIGRldmljZSBpcyBlcnJvci1mcmVlCisJCSAqIChpLmUuIGJpdCAwIC0tIENISyAtLSBvZiBzdGF0dXMgaXMgMCkuIFRoZSBtb3N0IGxpa2VseQorCQkgKiBoeXBvdGhlc2lzIGlzIHRoYXQgdGhlIFVTQkFUIGNoaXAgc29tZWhvdyBrbm93cyB3aGF0CisJCSAqIHRoZSBkZXZpY2Ugd2lsbCBhY2NlcHQsIGJ1dCBkb2Vzbid0IGdpdmUgdGhlIGRldmljZSBhbnkKKwkJICogZGF0YSB1bnRpbCBhbGwgZGF0YSBpcyByZWNlaXZlZC4gVGh1cywgdGhlIGRldmljZSB3b3VsZAorCQkgKiBzdGlsbCBiZSB3YWl0aW5nIGZvciB0aGUgZmlyc3QgYnl0ZSBvZiBkYXRhIGlmIGEgc3RhbGwKKwkJICogb2NjdXJzLCBldmVuIGlmIHRoZSBzdGFsbCBpbXBsaWVzIHRoYXQgc29tZSBkYXRhIHdhcworCQkgKiB0cmFuc2ZlcnJlZC4KKwkJICovCisKKwkJaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9YRkVSX1NIT1JUIHx8CisJCQkJcmVzdWx0ID09IFVTQl9TVE9SX1hGRVJfU1RBTExFRCkgeworCisJCQkvKgorCQkJICogSWYgd2UncmUgcmVhZGluZyBhbmQgd2Ugc3RhbGxlZCwgdGhlbiBjbGVhcgorCQkJICogdGhlIGJ1bGsgb3V0cHV0IHBpcGUgb25seSB0aGUgZmlyc3QgdGltZS4KKwkJCSAqLworCisJCQlpZiAoZGlyZWN0aW9uPT1ETUFfRlJPTV9ERVZJQ0UgJiYgaT09MCkgeworCQkJCWlmICh1c2Jfc3Rvcl9jbGVhcl9oYWx0KHVzLAorCQkJCQkJdXMtPnNlbmRfYnVsa19waXBlKSA8IDApCisJCQkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCQl9CisKKwkJCS8qCisJCQkgKiBSZWFkIHN0YXR1czogaXMgdGhlIGRldmljZSBhbmdyeSwgb3IganVzdCBidXN5PworCQkJICovCisKKyAJCQlyZXN1bHQgPSB1c2JhdF9yZWFkKHVzLCBVU0JBVF9BVEEsIAorCQkJCWRpcmVjdGlvbj09RE1BX1RPX0RFVklDRSA/CisJCQkJCVVTQkFUX0FUQV9TVEFUVVMgOiBVU0JBVF9BVEFfQUxUU1RBVFVTLAorCQkJCXN0YXR1cyk7CisKKwkJCWlmIChyZXN1bHQhPVVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQkJaWYgKCpzdGF0dXMgJiAweDAxKSAvLyBjaGVjayBjb25kaXRpb24KKwkJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkJCWlmICgqc3RhdHVzICYgMHgyMCkgLy8gZGV2aWNlIGZhdWx0CisJCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisKKwkJCVVTX0RFQlVHUCgiUmVkb2luZyAlc1xuIiwKKwkJCSAgZGlyZWN0aW9uPT1ETUFfVE9fREVWSUNFID8gIndyaXRlIiA6ICJyZWFkIik7CisKKwkJfSBlbHNlIGlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJZWxzZQorCQkJcmV0dXJuIHVzYmF0X3dhaXRfbm90X2J1c3kodXMsIG1pbnV0ZXMpOworCisJfQorCisJVVNfREVCVUdQKCJCdW1tZXIhICVzIGJ1bGsgZGF0YSAyMCB0aW1lcyBmYWlsZWQuXG4iLAorCQlkaXJlY3Rpb249PURNQV9UT19ERVZJQ0UgPyAiV3JpdGluZyIgOiAiUmVhZGluZyIpOworCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7Cit9CisKKy8qCisgKiBXcml0ZSB0byBtdWx0aXBsZSByZWdpc3RlcnM6CisgKiBBbGxvd3MgdXMgdG8gd3JpdGUgc3BlY2lmaWMgZGF0YSB0byBhbnkgcmVnaXN0ZXJzLiBUaGUgZGF0YSB0byBiZSB3cml0dGVuCisgKiBnZXRzIHBhY2tlZCBpbiB0aGlzIHNlcXVlbmNlOiByZWcwLCBkYXRhMCwgcmVnMSwgZGF0YTEsIC4uLiwgcmVnTiwgZGF0YU4KKyAqIHdoaWNoIGdldHMgc2VudCB0aHJvdWdoIGJ1bGsgb3V0LgorICogTm90IGRlc2lnbmVkIGZvciBsYXJnZSB0cmFuc2ZlcnMgb2YgZGF0YSEKKyAqLworc3RhdGljIGludCB1c2JhdF9tdWx0aXBsZV93cml0ZShzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkJdW5zaWduZWQgY2hhciAqcmVnaXN0ZXJzLAorCQkJCXVuc2lnbmVkIGNoYXIgKmRhdGFfb3V0LAorCQkJCXVuc2lnbmVkIHNob3J0IG51bV9yZWdpc3RlcnMpCit7CisJaW50IGksIHJlc3VsdDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXMtPmlvYnVmOworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisKKwlCVUdfT04obnVtX3JlZ2lzdGVycyA+IFVTX0lPQlVGX1NJWkUvMik7CisKKwkvLyBXcml0ZSB0byBtdWx0aXBsZSByZWdpc3RlcnMsIEFUQSBhY2Nlc3MKKwljb21tYW5kWzBdID0gMHg0MDsKKwljb21tYW5kWzFdID0gVVNCQVRfQVRBIHwgVVNCQVRfQ01EX1dSSVRFX1JFR1M7CisKKwkvLyBObyByZWxldmFuY2UKKwljb21tYW5kWzJdID0gMDsKKwljb21tYW5kWzNdID0gMDsKKwljb21tYW5kWzRdID0gMDsKKwljb21tYW5kWzVdID0gMDsKKworCS8vIE51bWJlciBvZiBieXRlcyB0byBiZSB0cmFuc2ZlcnJlZCAoaW5jbC4gYWRkcmVzc2VzIGFuZCBkYXRhKQorCWNvbW1hbmRbNl0gPSBMU0Jfb2YobnVtX3JlZ2lzdGVycyoyKTsKKwljb21tYW5kWzddID0gTVNCX29mKG51bV9yZWdpc3RlcnMqMik7CisKKwkvLyBUaGUgc2V0dXAgY29tbWFuZAorCXJlc3VsdCA9IHVzYmF0X2V4ZWN1dGVfY29tbWFuZCh1cywgY29tbWFuZCwgOCk7CisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkvLyBDcmVhdGUgdGhlIHJlZy9kYXRhLCByZWcvZGF0YSBzZXF1ZW5jZQorCWZvciAoaT0wOyBpPG51bV9yZWdpc3RlcnM7IGkrKykgeworCQlkYXRhW2k8PDFdID0gcmVnaXN0ZXJzW2ldOworCQlkYXRhWzErKGk8PDEpXSA9IGRhdGFfb3V0W2ldOworCX0KKworCS8vIFNlbmQgdGhlIGRhdGEKKwlyZXN1bHQgPSB1c2JhdF9idWxrX3dyaXRlKHVzLCBkYXRhLCBudW1fcmVnaXN0ZXJzKjIpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJaWYgKHVzYmF0X2dldF9kZXZpY2VfdHlwZSh1cykgPT0gVVNCQVRfREVWX0hQODIwMCkKKwkJcmV0dXJuIHVzYmF0X3dhaXRfbm90X2J1c3kodXMsIDApOworCWVsc2UKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCisvKgorICogQ29uZGl0aW9uYWxseSByZWFkIGJsb2NrcyBmcm9tIGRldmljZToKKyAqIEFsbG93cyB1cyB0byByZWFkIGJsb2NrcyBmcm9tIGEgc3BlY2lmaWMgZGF0YSByZWdpc3RlciwgYmFzZWQgdXBvbiB0aGUKKyAqIGNvbmRpdGlvbiB0aGF0IGEgc3RhdHVzIHJlZ2lzdGVyIGNhbiBiZSBzdWNjZXNzZnVsbHkgbWFza2VkIHdpdGggYSBzdGF0dXMKKyAqIHF1YWxpZmllci4gSWYgdGhpcyBjb25kaXRpb24gaXMgbm90IGluaXRpYWxseSBtZXQsIHRoZSByZWFkIHdpbGwgd2FpdAorICogdXAgdW50aWwgYSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lIGhhcyBlbGFwc2VkLCBhcyBzcGVjaWZpZWQgYnkgdGltZW91dC4KKyAqIFRoZSByZWFkIHdpbGwgc3RhcnQgd2hlbiB0aGUgY29uZGl0aW9uIGlzIG1ldCwgb3RoZXJ3aXNlIHRoZSBjb21tYW5kIGFib3J0cy4KKyAqCisgKiBUaGUgcXVhbGlmaWVyIGRlZmluZWQgaGVyZSBpcyBub3QgdGhlIHZhbHVlIHRoYXQgaXMgbWFza2VkLCBpdCBkZWZpbmVzCisgKiBjb25kaXRpb25zIGZvciB0aGUgd3JpdGUgdG8gdGFrZSBwbGFjZS4gVGhlIGFjdHVhbCBtYXNrZWQgcXVhbGlmaWVyIChhbmQKKyAqIG90aGVyIHJlbGF0ZWQgZGV0YWlscykgYXJlIGRlZmluZWQgYmVmb3JlaGFuZCB3aXRoIF9zZXRfc2h1dHRsZV9mZWF0dXJlcygpLgorICovCitzdGF0aWMgaW50IHVzYmF0X3JlYWRfYmxvY2tzKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCQkJCQkgdW5zaWduZWQgY2hhciAqYnVmZmVyLAorCQkJCQkJCSBpbnQgbGVuKQoreworCWludCByZXN1bHQ7CisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKworCWNvbW1hbmRbMF0gPSAweEMwOworCWNvbW1hbmRbMV0gPSBVU0JBVF9BVEEgfCBVU0JBVF9DTURfQ09ORF9SRUFEX0JMT0NLOworCWNvbW1hbmRbMl0gPSBVU0JBVF9BVEFfREFUQTsKKwljb21tYW5kWzNdID0gVVNCQVRfQVRBX1NUQVRVUzsKKwljb21tYW5kWzRdID0gMHhGRDsgLy8gVGltZW91dCAobXMpOworCWNvbW1hbmRbNV0gPSBVU0JBVF9RVUFMX0ZDUTsKKwljb21tYW5kWzZdID0gTFNCX29mKGxlbik7CisJY29tbWFuZFs3XSA9IE1TQl9vZihsZW4pOworCisJLy8gTXVsdGlwbGUgYmxvY2sgcmVhZCBzZXR1cCBjb21tYW5kCisJcmVzdWx0ID0gdXNiYXRfZXhlY3V0ZV9jb21tYW5kKHVzLCBjb21tYW5kLCA4KTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCisJLy8gUmVhZCB0aGUgYmxvY2tzIHdlIGp1c3QgYXNrZWQgZm9yCisJcmVzdWx0ID0gdXNiYXRfYnVsa19yZWFkKHVzLCBidWZmZXIsIGxlbik7CisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCisvKgorICogQ29uZGl0aW9uYWxseSB3cml0ZSBibG9ja3MgdG8gZGV2aWNlOgorICogQWxsb3dzIHVzIHRvIHdyaXRlIGJsb2NrcyB0byBhIHNwZWNpZmljIGRhdGEgcmVnaXN0ZXIsIGJhc2VkIHVwb24gdGhlCisgKiBjb25kaXRpb24gdGhhdCBhIHN0YXR1cyByZWdpc3RlciBjYW4gYmUgc3VjY2Vzc2Z1bGx5IG1hc2tlZCB3aXRoIGEgc3RhdHVzCisgKiBxdWFsaWZpZXIuIElmIHRoaXMgY29uZGl0aW9uIGlzIG5vdCBpbml0aWFsbHkgbWV0LCB0aGUgd3JpdGUgd2lsbCB3YWl0CisgKiB1cCB1bnRpbCBhIG1heGltdW0gYW1vdW50IG9mIHRpbWUgaGFzIGVsYXBzZWQsIGFzIHNwZWNpZmllZCBieSB0aW1lb3V0LgorICogVGhlIHJlYWQgd2lsbCBzdGFydCB3aGVuIHRoZSBjb25kaXRpb24gaXMgbWV0LCBvdGhlcndpc2UgdGhlIGNvbW1hbmQgYWJvcnRzLgorICoKKyAqIFRoZSBxdWFsaWZpZXIgZGVmaW5lZCBoZXJlIGlzIG5vdCB0aGUgdmFsdWUgdGhhdCBpcyBtYXNrZWQsIGl0IGRlZmluZXMKKyAqIGNvbmRpdGlvbnMgZm9yIHRoZSB3cml0ZSB0byB0YWtlIHBsYWNlLiBUaGUgYWN0dWFsIG1hc2tlZCBxdWFsaWZpZXIgKGFuZAorICogb3RoZXIgcmVsYXRlZCBkZXRhaWxzKSBhcmUgZGVmaW5lZCBiZWZvcmVoYW5kIHdpdGggX3NldF9zaHV0dGxlX2ZlYXR1cmVzKCkuCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfd3JpdGVfYmxvY2tzKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCQkJCQkgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKKwkJCQkJCQkgIGludCBsZW4pCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCisJY29tbWFuZFswXSA9IDB4NDA7CisJY29tbWFuZFsxXSA9IFVTQkFUX0FUQSB8IFVTQkFUX0NNRF9DT05EX1dSSVRFX0JMT0NLOworCWNvbW1hbmRbMl0gPSBVU0JBVF9BVEFfREFUQTsKKwljb21tYW5kWzNdID0gVVNCQVRfQVRBX1NUQVRVUzsKKwljb21tYW5kWzRdID0gMHhGRDsgLy8gVGltZW91dCAobXMpCisJY29tbWFuZFs1XSA9IFVTQkFUX1FVQUxfRkNROworCWNvbW1hbmRbNl0gPSBMU0Jfb2YobGVuKTsKKwljb21tYW5kWzddID0gTVNCX29mKGxlbik7CisKKwkvLyBNdWx0aXBsZSBibG9jayB3cml0ZSBzZXR1cCBjb21tYW5kCisJcmVzdWx0ID0gdXNiYXRfZXhlY3V0ZV9jb21tYW5kKHVzLCBjb21tYW5kLCA4KTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCisJLy8gV3JpdGUgdGhlIGRhdGEKKwlyZXN1bHQgPSB1c2JhdF9idWxrX3dyaXRlKHVzLCBidWZmZXIsIGxlbik7CisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCisvKgorICogUmVhZCB0aGUgVXNlciBJTyByZWdpc3RlcgorICovCitzdGF0aWMgaW50IHVzYmF0X3JlYWRfdXNlcl9pbyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGNoYXIgKmRhdGFfZmxhZ3MpCit7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX2N0cmxfdHJhbnNmZXIodXMsCisJCXVzLT5yZWN2X2N0cmxfcGlwZSwKKwkJVVNCQVRfQ01EX1VJTywKKwkJMHhDMCwKKwkJMCwKKwkJMCwKKwkJZGF0YV9mbGFncywKKwkJVVNCQVRfVUlPX1JFQUQpOworCisJVVNfREVCVUdQKCJ1c2JhdF9yZWFkX3VzZXJfaW86IFVJTyByZWdpc3RlciByZWFkcyAlMDJYXG4iLCAodW5zaWduZWQgc2hvcnQpICgqZGF0YV9mbGFncykpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFdyaXRlIHRvIHRoZSBVc2VyIElPIHJlZ2lzdGVyCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfd3JpdGVfdXNlcl9pbyhzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkgICAgICAgdW5zaWduZWQgY2hhciBlbmFibGVfZmxhZ3MsCisJCQkgICAgICAgdW5zaWduZWQgY2hhciBkYXRhX2ZsYWdzKQoreworCXJldHVybiB1c2Jfc3Rvcl9jdHJsX3RyYW5zZmVyKHVzLAorCQl1cy0+c2VuZF9jdHJsX3BpcGUsCisJCVVTQkFUX0NNRF9VSU8sCisJCTB4NDAsCisJCXNob3J0X3BhY2soZW5hYmxlX2ZsYWdzLCBkYXRhX2ZsYWdzKSwKKwkJMCwKKwkJTlVMTCwKKwkJVVNCQVRfVUlPX1dSSVRFKTsKK30KKworLyoKKyAqIFJlc2V0IHRoZSBkZXZpY2UKKyAqIE9mdGVuIG5lZWRlZCBvbiBtZWRpYSBjaGFuZ2UuCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfZGV2aWNlX3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlpbnQgcmM7CisKKwkvLyBSZXNldCBwZXJpcGhlcmFsLCBlbmFibGUgcGVyaXBoZXJhbCBjb250cm9sIHNpZ25hbHMKKwkvLyAoYnJpbmcgcmVzZXQgc2lnbmFsIHVwKQorCXJjID0gdXNiYXRfd3JpdGVfdXNlcl9pbyh1cywKKwkJCQkJCQkgVVNCQVRfVUlPX0RSVlJTVCB8IFVTQkFUX1VJT19PRTEgfCBVU0JBVF9VSU9fT0UwLAorCQkJCQkJCSBVU0JBVF9VSU9fRVBBRCB8IFVTQkFUX1VJT18xKTsKKwlpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQkJCisJLy8gRW5hYmxlIHBlcmlwaGVyYWwgY29udHJvbCBzaWduYWxzCisJLy8gKGJyaW5nIHJlc2V0IHNpZ25hbCBkb3duKQorCXJjID0gdXNiYXRfd3JpdGVfdXNlcl9pbyh1cywKKwkJCQkJCQkgVVNCQVRfVUlPX09FMSAgfCBVU0JBVF9VSU9fT0UwLAorCQkJCQkJCSBVU0JBVF9VSU9fRVBBRCB8IFVTQkFUX1VJT18xKTsKKwlpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCisvKgorICogRW5hYmxlIGNhcmQgZGV0ZWN0CisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfZGV2aWNlX2VuYWJsZV9jZHQoc3RydWN0IHVzX2RhdGEgKnVzKQoreworCWludCByYzsKKworCS8vIEVuYWJsZSBwZXJpcGhlcmFsIGNvbnRyb2wgc2lnbmFscyBhbmQgY2FyZCBkZXRlY3QKKwlyYyA9IHVzYmF0X3dyaXRlX3VzZXJfaW8odXMsCisJCQkJCQkJIFVTQkFUX1VJT19BQ0tEIHwgVVNCQVRfVUlPX09FMSAgfCBVU0JBVF9VSU9fT0UwLAorCQkJCQkJCSBVU0JBVF9VSU9fRVBBRCB8IFVTQkFUX1VJT18xKTsKKwlpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCisvKgorICogRGV0ZXJtaW5lIGlmIG1lZGlhIGlzIHByZXNlbnQuCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfZmxhc2hfY2hlY2tfbWVkaWFfcHJlc2VudCh1bnNpZ25lZCBjaGFyICp1aW8pCit7CisJaWYgKCp1aW8gJiBVU0JBVF9VSU9fVUkwKSB7CisJCVVTX0RFQlVHUCgidXNiYXRfZmxhc2hfY2hlY2tfbWVkaWFfcHJlc2VudDogbm8gbWVkaWEgZGV0ZWN0ZWRcbiIpOworCQlyZXR1cm4gVVNCQVRfRkxBU0hfTUVESUFfTk9ORTsKKwl9CisKKwlyZXR1cm4gVVNCQVRfRkxBU0hfTUVESUFfQ0Y7Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgaWYgbWVkaWEgaGFzIGNoYW5nZWQgc2luY2UgbGFzdCBvcGVyYXRpb24KKyAqLworc3RhdGljIGludCB1c2JhdF9mbGFzaF9jaGVja19tZWRpYV9jaGFuZ2VkKHVuc2lnbmVkIGNoYXIgKnVpbykKK3sKKwlpZiAoKnVpbyAmIFVTQkFUX1VJT18wKSB7CisJCVVTX0RFQlVHUCgidXNiYXRfZmxhc2hfY2hlY2tfbWVkaWFfY2hhbmdlZDogbWVkaWEgY2hhbmdlIGRldGVjdGVkXG4iKTsKKwkJcmV0dXJuIFVTQkFUX0ZMQVNIX01FRElBX0NIQU5HRUQ7CisJfQorCisJcmV0dXJuIFVTQkFUX0ZMQVNIX01FRElBX1NBTUU7Cit9CisKKy8qCisgKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlIC8gbm8gbWVkaWEgYW5kIGhhbmRsZSB0aGUgc2l0dWF0aW9uIGFwcHJvcHJpYXRlbHkKKyAqLworc3RhdGljIGludCB1c2JhdF9mbGFzaF9jaGVja19tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkJICAgc3RydWN0IHVzYmF0X2luZm8gKmluZm8pCit7CisJaW50IHJjOworCXVuc2lnbmVkIGNoYXIgKnVpbyA9IHVzLT5pb2J1ZjsKKworCXJjID0gdXNiYXRfcmVhZF91c2VyX2lvKHVzLCB1aW8pOworCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkvLyBDaGVjayBmb3IgbWVkaWEgZXhpc3RhbmNlCisJcmMgPSB1c2JhdF9mbGFzaF9jaGVja19tZWRpYV9wcmVzZW50KHVpbyk7CisJaWYgKHJjID09IFVTQkFUX0ZMQVNIX01FRElBX05PTkUpIHsKKwkJaW5mby0+c2Vuc2Vfa2V5ID0gMHgwMjsKKwkJaW5mby0+c2Vuc2VfYXNjID0gMHgzQTsKKwkJaW5mby0+c2Vuc2VfYXNjcSA9IDB4MDA7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCX0KKworCS8vIENoZWNrIGZvciBtZWRpYSBjaGFuZ2UKKwlyYyA9IHVzYmF0X2ZsYXNoX2NoZWNrX21lZGlhX2NoYW5nZWQodWlvKTsKKwlpZiAocmMgPT0gVVNCQVRfRkxBU0hfTUVESUFfQ0hBTkdFRCkgeworCisJCS8vIFJlc2V0IGFuZCByZS1lbmFibGUgY2FyZCBkZXRlY3QKKwkJcmMgPSB1c2JhdF9kZXZpY2VfcmVzZXQodXMpOworCQlpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCQlyZXR1cm4gcmM7CisJCXJjID0gdXNiYXRfZGV2aWNlX2VuYWJsZV9jZHQodXMpOworCQlpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCQlyZXR1cm4gcmM7CisKKwkJbXNsZWVwKDUwKTsKKworCQlyYyA9IHVzYmF0X3JlYWRfdXNlcl9pbyh1cywgdWlvKTsKKwkJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCQorCQlpbmZvLT5zZW5zZV9rZXkgPSBVTklUX0FUVEVOVElPTjsKKwkJaW5mby0+c2Vuc2VfYXNjID0gMHgyODsKKwkJaW5mby0+c2Vuc2VfYXNjcSA9IDB4MDA7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCX0KKworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKK30KKworLyoKKyAqIERldGVybWluZSB3aGV0aGVyIHdlIGFyZSBjb250cm9sbGluZyBhIGZsYXNoLWJhc2VkIHJlYWRlci93cml0ZXIsCisgKiBvciBhIEhQODIwMC1iYXNlZCBDRCBkcml2ZS4KKyAqIFNldHMgdHJhbnNwb3J0IGZ1bmN0aW9ucyBhcyBhcHByb3ByaWF0ZS4KKyAqLworc3RhdGljIGludCB1c2JhdF9pZGVudGlmeV9kZXZpY2Uoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJCSBzdHJ1Y3QgdXNiYXRfaW5mbyAqaW5mbykKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgY2hhciBzdGF0dXM7CisKKwlpZiAoIXVzIHx8ICFpbmZvKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJcmMgPSB1c2JhdF9kZXZpY2VfcmVzZXQodXMpOworCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJcmV0dXJuIHJjOworCisJLyoKKwkgKiBCeSBleGFtaW5pbmcgdGhlIGRldmljZSBzaWduYXR1cmUgYWZ0ZXIgYSByZXNldCwgd2UgY2FuIGlkZW50aWZ5CisJICogd2hldGhlciB0aGUgZGV2aWNlIHN1cHBvcnRzIHRoZSBBVEFQSSBwYWNrZXQgaW50ZXJmYWNlLgorCSAqIFRoZSBmbGFzaC1kZXZpY2VzIGRvIG5vdCBzdXBwb3J0IHRoaXMsIHdoZXJlYXMgdGhlIEhQIENEUlcncyBvYnZpb3VzbHkKKwkgKiBkby4KKwkgKgorCSAqIFRoaXMgbWV0aG9kIGlzIG5vdCBpZGVhbCwgYnV0IHdvcmtzIGJlY2F1c2Ugbm8gb3RoZXIgZGV2aWNlcyBoYXZlIGJlZW4KKwkgKiBwcm9kdWNlZCBiYXNlZCBvbiB0aGUgVVNCQVQvVVNCQVQwMi4KKwkgKgorCSAqIFNlY3Rpb24gOS4xIG9mIHRoZSBBVEFQSS00IHNwZWMgc3RhdGVzIChhbW9uZ3N0IG90aGVyIHRoaW5ncykgdGhhdAorCSAqIGFmdGVyIGEgZGV2aWNlIHJlc2V0LCBhIEN5bGluZGVyIGxvdyBvZiAweDE0IGluZGljYXRlcyB0aGF0IHRoZSBkZXZpY2UKKwkgKiBkb2VzIHN1cHBvcnQgcGFja2V0IGNvbW1hbmRzLgorCSAqLworCXJjID0gdXNiYXRfcmVhZCh1cywgVVNCQVRfQVRBLCBVU0JBVF9BVEFfTEJBX01FLCAmc3RhdHVzKTsKKwlpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJVVNfREVCVUdQKCJ1c2JhdF9pZGVudGlmeV9kZXZpY2U6IEN5bGluZGVyIGxvdyBpcyAlMDJYXG4iLCBzdGF0dXMpOworCisJaWYgKHN0YXR1cyA9PSAweDE0KSB7CisJCS8vIERldmljZSBpcyBIUCA4MjAwCisJCVVTX0RFQlVHUCgidXNiYXRfaWRlbnRpZnlfZGV2aWNlOiBEZXRlY3RlZCBIUDgyMDAgQ0RSV1xuIik7CisJCWluZm8tPmRldmljZXR5cGUgPSBVU0JBVF9ERVZfSFA4MjAwOworCX0gZWxzZSB7CisJCS8vIERldmljZSBpcyBhIENvbXBhY3RGbGFzaCByZWFkZXIvd3JpdGVyCisJCVVTX0RFQlVHUCgidXNiYXRfaWRlbnRpZnlfZGV2aWNlOiBEZXRlY3RlZCBGbGFzaCByZWFkZXIvd3JpdGVyXG4iKTsKKwkJaW5mby0+ZGV2aWNldHlwZSA9IFVTQkFUX0RFVl9GTEFTSDsKKwl9CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKy8qCisgKiBTZXQgdGhlIHRyYW5zcG9ydCBmdW5jdGlvbiBiYXNlZCBvbiB0aGUgZGV2aWNlIHR5cGUKKyAqLworc3RhdGljIGludCB1c2JhdF9zZXRfdHJhbnNwb3J0KHN0cnVjdCB1c19kYXRhICp1cywKKwkJCSAgICAgICBzdHJ1Y3QgdXNiYXRfaW5mbyAqaW5mbykKK3sKKwlpbnQgcmM7CisKKwlpZiAoIWluZm8tPmRldmljZXR5cGUpIHsKKwkJcmMgPSB1c2JhdF9pZGVudGlmeV9kZXZpY2UodXMsIGluZm8pOworCQlpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJCVVTX0RFQlVHUCgidXNiYXRfc2V0X3RyYW5zcG9ydDogQ291bGQgbm90IGlkZW50aWZ5IGRldmljZVxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCWlmICh1c2JhdF9nZXRfZGV2aWNlX3R5cGUodXMpID09IFVTQkFUX0RFVl9IUDgyMDApCisJCXVzLT50cmFuc3BvcnQgPSB1c2JhdF9ocDgyMDBlX3RyYW5zcG9ydDsKKwllbHNlIGlmICh1c2JhdF9nZXRfZGV2aWNlX3R5cGUodXMpID09IFVTQkFUX0RFVl9GTEFTSCkKKwkJdXMtPnRyYW5zcG9ydCA9IHVzYmF0X2ZsYXNoX3RyYW5zcG9ydDsKKworCXJldHVybiAwOworfQorCisvKgorICogUmVhZCB0aGUgbWVkaWEgY2FwYWNpdHkKKyAqLworc3RhdGljIGludCB1c2JhdF9mbGFzaF9nZXRfc2VjdG9yX2NvdW50KHN0cnVjdCB1c19kYXRhICp1cywKKwkJCQkJc3RydWN0IHVzYmF0X2luZm8gKmluZm8pCit7CisJdW5zaWduZWQgY2hhciByZWdpc3RlcnNbM10gPSB7CisJCVVTQkFUX0FUQV9TRUNDTlQsCisJCVVTQkFUX0FUQV9ERVZJQ0UsCisJCVVTQkFUX0FUQV9DTUQsCisJfTsKKwl1bnNpZ25lZCBjaGFyICBjb21tYW5kWzNdID0geyAweDAxLCAweEEwLCAweEVDIH07CisJdW5zaWduZWQgY2hhciAqcmVwbHk7CisJdW5zaWduZWQgY2hhciBzdGF0dXM7CisJaW50IHJjOworCisJaWYgKCF1cyB8fCAhaW5mbykKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCXJlcGx5ID0ga21hbGxvYyg1MTIsIEdGUF9OT0lPKTsKKwlpZiAoIXJlcGx5KQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJLy8gQVRBUEkgY29tbWFuZCA6IElERU5USUZZIERFVklDRQorCXJjID0gdXNiYXRfbXVsdGlwbGVfd3JpdGUodXMsIHJlZ2lzdGVycywgY29tbWFuZCwgMyk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQlVU19ERUJVR1AoInVzYmF0X2ZsYXNoX2dldF9zZWN0b3JfY291bnQ6IEdhaCEgaWRlbnRpZnlfZGV2aWNlIGZhaWxlZFxuIik7CisJCXJjID0gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQlnb3RvIGxlYXZlOworCX0KKworCS8vIFJlYWQgZGV2aWNlIHN0YXR1cworCWlmICh1c2JhdF9nZXRfc3RhdHVzKHVzLCAmc3RhdHVzKSAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJcmMgPSBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCWdvdG8gbGVhdmU7CisJfQorCisJbXNsZWVwKDEwMCk7CisKKwkvLyBSZWFkIHRoZSBkZXZpY2UgaWRlbnRpZmljYXRpb24gZGF0YQorCXJjID0gdXNiYXRfcmVhZF9ibG9jayh1cywgcmVwbHksIDUxMik7CisJaWYgKHJjICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQlnb3RvIGxlYXZlOworCisJaW5mby0+c2VjdG9ycyA9ICgodTMyKShyZXBseVsxMTddKSA8PCAyNCkgfAorCQkoKHUzMikocmVwbHlbMTE2XSkgPDwgMTYpIHwKKwkJKCh1MzIpKHJlcGx5WzExNV0pIDw8ICA4KSB8CisJCSgodTMyKShyZXBseVsxMTRdKSAgICAgICk7CisKKwlyYyA9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCisgbGVhdmU6CisJa2ZyZWUocmVwbHkpOworCXJldHVybiByYzsKK30KKworLyoKKyAqIFJlYWQgZGF0YSBmcm9tIGRldmljZQorICovCitzdGF0aWMgaW50IHVzYmF0X2ZsYXNoX3JlYWRfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkJCQkJCSBzdHJ1Y3QgdXNiYXRfaW5mbyAqaW5mbywKKwkJCQkJCQkJIHUzMiBzZWN0b3IsCisJCQkJCQkJCSB1MzIgc2VjdG9ycykKK3sKKwl1bnNpZ25lZCBjaGFyIHJlZ2lzdGVyc1s3XSA9IHsKKwkJVVNCQVRfQVRBX0ZFQVRVUkVTLAorCQlVU0JBVF9BVEFfU0VDQ05ULAorCQlVU0JBVF9BVEFfU0VDTlVNLAorCQlVU0JBVF9BVEFfTEJBX01FLAorCQlVU0JBVF9BVEFfTEJBX0hJLAorCQlVU0JBVF9BVEFfREVWSUNFLAorCQlVU0JBVF9BVEFfU1RBVFVTLAorCX07CisJdW5zaWduZWQgY2hhciBjb21tYW5kWzddOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBjaGFyICB0aGlzdGltZTsKKwl1bnNpZ25lZCBpbnQgdG90YWxsZW4sIGFsbG9jbGVuOworCWludCBsZW4sIHJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgc2dfaWR4ID0gMCwgc2dfb2Zmc2V0ID0gMDsKKworCXJlc3VsdCA9IHVzYmF0X2ZsYXNoX2NoZWNrX21lZGlhKHVzLCBpbmZvKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQlyZXR1cm4gcmVzdWx0OworCisJLy8gd2UncmUgd29ya2luZyBpbiBMQkEgbW9kZS4gIGFjY29yZGluZyB0byB0aGUgQVRBIHNwZWMsCisJLy8gd2UgY2FuIHN1cHBvcnQgdXAgdG8gMjgtYml0IGFkZHJlc3NpbmcuICBJIGRvbid0IGtub3cgaWYgSnVtcHNob3QKKwkvLyBzdXBwb3J0cyBiZXlvbmQgMjQtYml0IGFkZHJlc3NpbmcuICBJdCdzIGtpbmQgb2YgaGFyZCB0byB0ZXN0CisJLy8gc2luY2UgaXQgcmVxdWlyZXMgPiA4R0IgQ0YgY2FyZC4KKworCWlmIChzZWN0b3IgPiAweDBGRkZGRkZGKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJdG90YWxsZW4gPSBzZWN0b3JzICogaW5mby0+c3NpemU7CisKKwkvLyBTaW5jZSB3ZSBkb24ndCByZWFkIG1vcmUgdGhhbiA2NCBLQiBhdCBhIHRpbWUsIHdlIGhhdmUgdG8gY3JlYXRlCisJLy8gYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2UgYXQgYSB0aW1lIGJldHdlZW4gdGhlCisJLy8gYm91bmNlIGJ1ZmZlciBhbmQgdGhlIGFjdHVhbCB0cmFuc2ZlciBidWZmZXIuCisKKwlhbGxvY2xlbiA9IG1pbih0b3RhbGxlbiwgNjU1MzZ1KTsKKwlidWZmZXIgPSBrbWFsbG9jKGFsbG9jbGVuLCBHRlBfTk9JTyk7CisJaWYgKGJ1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJZG8geworCQkvLyBsb29wLCBuZXZlciBhbGxvY2F0ZSBvciB0cmFuc2ZlciBtb3JlIHRoYW4gNjRrIGF0IG9uY2UKKwkJLy8gKG1pbigxMjhrLCAyNTUqaW5mby0+c3NpemUpIGlzIHRoZSByZWFsIGxpbWl0KQorCQlsZW4gPSBtaW4odG90YWxsZW4sIGFsbG9jbGVuKTsKKwkJdGhpc3RpbWUgPSAobGVuIC8gaW5mby0+c3NpemUpICYgMHhmZjsKKyAKKwkJLy8gQVRBUEkgY29tbWFuZCAweDIwIChSRUFEIFNFQ1RPUlMpCisJCXVzYmF0X3BhY2tfYXRhcGlfc2VjdG9yX2NtZChjb21tYW5kLCB0aGlzdGltZSwgc2VjdG9yLCAweDIwKTsKKworCQkvLyBXcml0ZS9leGVjdXRlIEFUQVBJIHJlYWQgY29tbWFuZAorCQlyZXN1bHQgPSB1c2JhdF9tdWx0aXBsZV93cml0ZSh1cywgcmVnaXN0ZXJzLCBjb21tYW5kLCA3KTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCWdvdG8gbGVhdmU7CisKKwkJLy8gUmVhZCB0aGUgZGF0YSB3ZSBqdXN0IHJlcXVlc3RlZAorCQlyZXN1bHQgPSB1c2JhdF9yZWFkX2Jsb2Nrcyh1cywgYnVmZmVyLCBsZW4pOworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQkJZ290byBsZWF2ZTsKKyAgCSAKKwkJVVNfREVCVUdQKCJ1c2JhdF9mbGFzaF9yZWFkX2RhdGE6ICAlZCBieXRlc1xuIiwgbGVuKTsKKwkKKwkJLy8gU3RvcmUgdGhlIGRhdGEgaW4gdGhlIHRyYW5zZmVyIGJ1ZmZlcgorCQl1c2Jfc3Rvcl9hY2Nlc3NfeGZlcl9idWYoYnVmZmVyLCBsZW4sIHVzLT5zcmIsCisJCQkJCSAmc2dfaWR4LCAmc2dfb2Zmc2V0LCBUT19YRkVSX0JVRik7CisKKwkJc2VjdG9yICs9IHRoaXN0aW1lOworCQl0b3RhbGxlbiAtPSBsZW47CisJfSB3aGlsZSAodG90YWxsZW4gPiAwKTsKKworCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCitsZWF2ZToKKwlrZnJlZShidWZmZXIpOworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7Cit9CisKKy8qCisgKiBXcml0ZSBkYXRhIHRvIGRldmljZQorICovCitzdGF0aWMgaW50IHVzYmF0X2ZsYXNoX3dyaXRlX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJCQkJCQkgIHN0cnVjdCB1c2JhdF9pbmZvICppbmZvLAorCQkJCQkJCQkgIHUzMiBzZWN0b3IsCisJCQkJCQkJCSAgdTMyIHNlY3RvcnMpCit7CisJdW5zaWduZWQgY2hhciByZWdpc3RlcnNbN10gPSB7CisJCVVTQkFUX0FUQV9GRUFUVVJFUywKKwkJVVNCQVRfQVRBX1NFQ0NOVCwKKwkJVVNCQVRfQVRBX1NFQ05VTSwKKwkJVVNCQVRfQVRBX0xCQV9NRSwKKwkJVVNCQVRfQVRBX0xCQV9ISSwKKwkJVVNCQVRfQVRBX0RFVklDRSwKKwkJVVNCQVRfQVRBX1NUQVRVUywKKwl9OworCXVuc2lnbmVkIGNoYXIgY29tbWFuZFs3XTsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJdW5zaWduZWQgY2hhciAgdGhpc3RpbWU7CisJdW5zaWduZWQgaW50IHRvdGFsbGVuLCBhbGxvY2xlbjsKKwlpbnQgbGVuLCByZXN1bHQ7CisJdW5zaWduZWQgaW50IHNnX2lkeCA9IDAsIHNnX29mZnNldCA9IDA7CisKKwlyZXN1bHQgPSB1c2JhdF9mbGFzaF9jaGVja19tZWRpYSh1cywgaW5mbyk7CisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCS8vIHdlJ3JlIHdvcmtpbmcgaW4gTEJBIG1vZGUuICBhY2NvcmRpbmcgdG8gdGhlIEFUQSBzcGVjLAorCS8vIHdlIGNhbiBzdXBwb3J0IHVwIHRvIDI4LWJpdCBhZGRyZXNzaW5nLiAgSSBkb24ndCBrbm93IGlmIEp1bXBzaG90CisJLy8gc3VwcG9ydHMgYmV5b25kIDI0LWJpdCBhZGRyZXNzaW5nLiAgSXQncyBraW5kIG9mIGhhcmQgdG8gdGVzdAorCS8vIHNpbmNlIGl0IHJlcXVpcmVzID4gOEdCIENGIGNhcmQuCisKKwlpZiAoc2VjdG9yID4gMHgwRkZGRkZGRikKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCXRvdGFsbGVuID0gc2VjdG9ycyAqIGluZm8tPnNzaXplOworCisJLy8gU2luY2Ugd2UgZG9uJ3Qgd3JpdGUgbW9yZSB0aGFuIDY0IEtCIGF0IGEgdGltZSwgd2UgaGF2ZSB0byBjcmVhdGUKKwkvLyBhIGJvdW5jZSBidWZmZXIgYW5kIG1vdmUgdGhlIGRhdGEgYSBwaWVjZSBhdCBhIHRpbWUgYmV0d2VlbiB0aGUKKwkvLyBib3VuY2UgYnVmZmVyIGFuZCB0aGUgYWN0dWFsIHRyYW5zZmVyIGJ1ZmZlci4KKworCWFsbG9jbGVuID0gbWluKHRvdGFsbGVuLCA2NTUzNnUpOworCWJ1ZmZlciA9IGttYWxsb2MoYWxsb2NsZW4sIEdGUF9OT0lPKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlkbyB7CisJCS8vIGxvb3AsIG5ldmVyIGFsbG9jYXRlIG9yIHRyYW5zZmVyIG1vcmUgdGhhbiA2NGsgYXQgb25jZQorCQkvLyAobWluKDEyOGssIDI1NSppbmZvLT5zc2l6ZSkgaXMgdGhlIHJlYWwgbGltaXQpCisJCWxlbiA9IG1pbih0b3RhbGxlbiwgYWxsb2NsZW4pOworCQl0aGlzdGltZSA9IChsZW4gLyBpbmZvLT5zc2l6ZSkgJiAweGZmOworCisJCS8vIEdldCB0aGUgZGF0YSBmcm9tIHRoZSB0cmFuc2ZlciBidWZmZXIKKwkJdXNiX3N0b3JfYWNjZXNzX3hmZXJfYnVmKGJ1ZmZlciwgbGVuLCB1cy0+c3JiLAorCQkJCQkgJnNnX2lkeCwgJnNnX29mZnNldCwgRlJPTV9YRkVSX0JVRik7CisKKwkJLy8gQVRBUEkgY29tbWFuZCAweDMwIChXUklURSBTRUNUT1JTKQorCQl1c2JhdF9wYWNrX2F0YXBpX3NlY3Rvcl9jbWQoY29tbWFuZCwgdGhpc3RpbWUsIHNlY3RvciwgMHgzMCk7CQkKKworCQkvLyBXcml0ZS9leGVjdXRlIEFUQVBJIHdyaXRlIGNvbW1hbmQKKwkJcmVzdWx0ID0gdXNiYXRfbXVsdGlwbGVfd3JpdGUodXMsIHJlZ2lzdGVycywgY29tbWFuZCwgNyk7CisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCQlnb3RvIGxlYXZlOworCisJCS8vIFdyaXRlIHRoZSBkYXRhCisJCXJlc3VsdCA9IHVzYmF0X3dyaXRlX2Jsb2Nrcyh1cywgYnVmZmVyLCBsZW4pOworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQkJZ290byBsZWF2ZTsKKworCQlzZWN0b3IgKz0gdGhpc3RpbWU7CisJCXRvdGFsbGVuIC09IGxlbjsKKwl9IHdoaWxlICh0b3RhbGxlbiA+IDApOworCisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcmVzdWx0OworCitsZWF2ZToKKwlrZnJlZShidWZmZXIpOworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7Cit9CisKKy8qCisgKiBTcXVlZXplIGEgcG90ZW50aWFsbHkgaHVnZSAoPiA2NTUzNSBieXRlKSByZWFkMTAgY29tbWFuZCBpbnRvCisgKiBhIGxpdHRsZSAoIDw9IDY1NTM1IGJ5dGUpIEFUQVBJIHBpcGUKKyAqLworc3RhdGljIGludCB1c2JhdF9ocDgyMDBlX2hhbmRsZV9yZWFkMTAoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpyZWdpc3RlcnMsCisJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsCisJCQkJICAgICAgIHN0cnVjdCBzY3NpX2NtbmQgKnNyYikKK3sKKwlpbnQgcmVzdWx0ID0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGludCBsZW47CisJdW5zaWduZWQgaW50IHNlY3RvcjsKKwl1bnNpZ25lZCBpbnQgc2dfc2VnbWVudCA9IDA7CisJdW5zaWduZWQgaW50IHNnX29mZnNldCA9IDA7CisKKwlVU19ERUJVR1AoImhhbmRsZV9yZWFkMTA6IHRyYW5zZmVyc2l6ZSAlZFxuIiwKKwkJc3JiLT50cmFuc2ZlcnNpemUpOworCisJaWYgKHNyYi0+cmVxdWVzdF9idWZmbGVuIDwgMHgxMDAwMCkgeworCisJCXJlc3VsdCA9IHVzYmF0X2hwODIwMGVfcndfYmxvY2tfdGVzdCh1cywgVVNCQVRfQVRBLCAKKwkJCXJlZ2lzdGVycywgZGF0YSwgMTksCisJCQlVU0JBVF9BVEFfREFUQSwgVVNCQVRfQVRBX1NUQVRVUywgMHhGRCwKKwkJCShVU0JBVF9RVUFMX0ZDUSB8IFVTQkFUX1FVQUxfQUxRKSwKKwkJCURNQV9GUk9NX0RFVklDRSwKKwkJCXNyYi0+cmVxdWVzdF9idWZmZXIsIAorCQkJc3JiLT5yZXF1ZXN0X2J1ZmZsZW4sIHNyYi0+dXNlX3NnLCAxKTsKKworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qCisJICogU2luY2Ugd2UncmUgcmVxdWVzdGluZyBtb3JlIGRhdGEgdGhhbiB3ZSBjYW4gaGFuZGxlIGluCisJICogYSBzaW5nbGUgcmVhZCBjb21tYW5kIChtYXggaXMgNjRrLTEpLCB3ZSB3aWxsIHBlcmZvcm0KKwkgKiBtdWx0aXBsZSByZWFkcywgYnV0IGVhY2ggcmVhZCBtdXN0IGJlIGluIG11bHRpcGxlcyBvZgorCSAqIGEgc2VjdG9yLiAgTHVja2lseSB0aGUgc2VjdG9yIHNpemUgaXMgaW4gc3JiLT50cmFuc2ZlcnNpemUKKwkgKiAoc2VlIGxpbnV4L2RyaXZlcnMvc2NzaS9zci5jKS4KKwkgKi8KKworCWlmIChkYXRhWzcrMF0gPT0gR1BDTURfUkVBRF9DRCkgeworCQlsZW4gPSBzaG9ydF9wYWNrKGRhdGFbNys5XSwgZGF0YVs3KzhdKTsKKwkJbGVuIDw8PSAxNjsKKwkJbGVuIHw9IGRhdGFbNys3XTsKKwkJVVNfREVCVUdQKCJoYW5kbGVfcmVhZDEwOiBHUENNRF9SRUFEX0NEOiBsZW4gJWRcbiIsIGxlbik7CisJCXNyYi0+dHJhbnNmZXJzaXplID0gc3JiLT5yZXF1ZXN0X2J1ZmZsZW4vbGVuOworCX0KKworCWlmICghc3JiLT50cmFuc2ZlcnNpemUpICB7CisJCXNyYi0+dHJhbnNmZXJzaXplID0gMjA0ODsgLyogQSBndWVzcyAqLworCQlVU19ERUJVR1AoImhhbmRsZV9yZWFkMTA6IHRyYW5zZmVyc2l6ZSAwLCBmb3JjaW5nICVkXG4iLAorCQkJc3JiLT50cmFuc2ZlcnNpemUpOworCX0KKworCS8vIFNpbmNlIHdlIG9ubHkgcmVhZCBpbiBvbmUgYmxvY2sgYXQgYSB0aW1lLCB3ZSBoYXZlIHRvIGNyZWF0ZQorCS8vIGEgYm91bmNlIGJ1ZmZlciBhbmQgbW92ZSB0aGUgZGF0YSBhIHBpZWNlIGF0IGEgdGltZSBiZXR3ZWVuIHRoZQorCS8vIGJvdW5jZSBidWZmZXIgYW5kIHRoZSBhY3R1YWwgdHJhbnNmZXIgYnVmZmVyLgorCisJbGVuID0gKDY1NTM1L3NyYi0+dHJhbnNmZXJzaXplKSAqIHNyYi0+dHJhbnNmZXJzaXplOworCVVTX0RFQlVHUCgiTWF4IHJlYWQgaXMgJWQgYnl0ZXNcbiIsIGxlbik7CisJbGVuID0gbWluKGxlbiwgc3JiLT5yZXF1ZXN0X2J1ZmZsZW4pOworCWJ1ZmZlciA9IGttYWxsb2MobGVuLCBHRlBfTk9JTyk7CisJaWYgKGJ1ZmZlciA9PSBOVUxMKSAvLyBibG9vZHkgaGVsbCEKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJc2VjdG9yID0gc2hvcnRfcGFjayhkYXRhWzcrM10sIGRhdGFbNysyXSk7CisJc2VjdG9yIDw8PSAxNjsKKwlzZWN0b3IgfD0gc2hvcnRfcGFjayhkYXRhWzcrNV0sIGRhdGFbNys0XSk7CisJdHJhbnNmZXJyZWQgPSAwOworCisJc2dfc2VnbWVudCA9IDA7IC8vIGZvciBrZWVwaW5nIHRyYWNrIG9mIHdoZXJlIHdlIGFyZSBpbgorCXNnX29mZnNldCA9IDA7ICAvLyB0aGUgc2NhdHRlci9nYXRoZXIgbGlzdAorCisJd2hpbGUgKHRyYW5zZmVycmVkICE9IHNyYi0+cmVxdWVzdF9idWZmbGVuKSB7CisKKwkJaWYgKGxlbiA+IHNyYi0+cmVxdWVzdF9idWZmbGVuIC0gdHJhbnNmZXJyZWQpCisJCQlsZW4gPSBzcmItPnJlcXVlc3RfYnVmZmxlbiAtIHRyYW5zZmVycmVkOworCisJCWRhdGFbM10gPSBsZW4mMHhGRjsgCSAgLy8gKGN5bEwpID0gZXhwZWN0ZWQgbGVuZ3RoIChMKQorCQlkYXRhWzRdID0gKGxlbj4+OCkmMHhGRjsgIC8vIChjeWxIKSA9IGV4cGVjdGVkIGxlbmd0aCAoSCkKKworCQkvLyBGaXggdXAgdGhlIFNDU0kgY29tbWFuZCBzZWN0b3IgYW5kIG51bSBzZWN0b3JzCisKKwkJZGF0YVs3KzJdID0gTVNCX29mKHNlY3Rvcj4+MTYpOyAvLyBTQ1NJIGNvbW1hbmQgc2VjdG9yCisJCWRhdGFbNyszXSA9IExTQl9vZihzZWN0b3I+PjE2KTsKKwkJZGF0YVs3KzRdID0gTVNCX29mKHNlY3RvciYweEZGRkYpOworCQlkYXRhWzcrNV0gPSBMU0Jfb2Yoc2VjdG9yJjB4RkZGRik7CisJCWlmIChkYXRhWzcrMF0gPT0gR1BDTURfUkVBRF9DRCkKKwkJCWRhdGFbNys2XSA9IDA7CisJCWRhdGFbNys3XSA9IE1TQl9vZihsZW4gLyBzcmItPnRyYW5zZmVyc2l6ZSk7IC8vIFNDU0kgY29tbWFuZAorCQlkYXRhWzcrOF0gPSBMU0Jfb2YobGVuIC8gc3JiLT50cmFuc2ZlcnNpemUpOyAvLyBudW0gc2VjdG9ycworCisJCXJlc3VsdCA9IHVzYmF0X2hwODIwMGVfcndfYmxvY2tfdGVzdCh1cywgVVNCQVRfQVRBLCAKKwkJCXJlZ2lzdGVycywgZGF0YSwgMTksCisJCQlVU0JBVF9BVEFfREFUQSwgVVNCQVRfQVRBX1NUQVRVUywgMHhGRCwgCisJCQkoVVNCQVRfUVVBTF9GQ1EgfCBVU0JBVF9RVUFMX0FMUSksCisJCQlETUFfRlJPTV9ERVZJQ0UsCisJCQlidWZmZXIsCisJCQlsZW4sIDAsIDEpOworCisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCQlicmVhazsKKworCQkvLyBTdG9yZSB0aGUgZGF0YSBpbiB0aGUgdHJhbnNmZXIgYnVmZmVyCisJCXVzYl9zdG9yX2FjY2Vzc194ZmVyX2J1ZihidWZmZXIsIGxlbiwgc3JiLAorCQkJCSAmc2dfc2VnbWVudCwgJnNnX29mZnNldCwgVE9fWEZFUl9CVUYpOworCisJCS8vIFVwZGF0ZSB0aGUgYW1vdW50IHRyYW5zZmVycmVkIGFuZCB0aGUgc2VjdG9yIG51bWJlcgorCisJCXRyYW5zZmVycmVkICs9IGxlbjsKKwkJc2VjdG9yICs9IGxlbiAvIHNyYi0+dHJhbnNmZXJzaXplOworCisJfSAvLyB3aGlsZSB0cmFuc2ZlcnJlZCAhPSBzcmItPnJlcXVlc3RfYnVmZmxlbgorCisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IHVzYmF0X3NlbGVjdF9hbmRfdGVzdF9yZWdpc3RlcnMoc3RydWN0IHVzX2RhdGEgKnVzKQoreworCWludCBzZWxlY3RvcjsKKwl1bnNpZ25lZCBjaGFyICpzdGF0dXMgPSB1cy0+aW9idWY7CisJdW5zaWduZWQgY2hhciBtYXhfc2VsZWN0b3IgPSAweEIwOworCWlmICh1c2JhdF9nZXRfZGV2aWNlX3R5cGUodXMpID09IFVTQkFUX0RFVl9GTEFTSCkKKwkJbWF4X3NlbGVjdG9yID0gMHhBMDsKKworCS8vIHRyeSBkZXZpY2UgPSBtYXN0ZXIsIHRoZW4gZGV2aWNlID0gc2xhdmUuCisKKwlmb3IgKHNlbGVjdG9yID0gMHhBMDsgc2VsZWN0b3IgPD0gbWF4X3NlbGVjdG9yOyBzZWxlY3RvciArPSAweDEwKSB7CisKKwkJaWYgKHVzYmF0X2dldF9kZXZpY2VfdHlwZSh1cykgPT0gVVNCQVRfREVWX0hQODIwMCAmJgorCQkJdXNiYXRfd3JpdGUodXMsIFVTQkFUX0FUQSwgVVNCQVRfQVRBX0RFVklDRSwgc2VsZWN0b3IpICE9IAorCQkJCVVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkJaWYgKHVzYmF0X3JlYWQodXMsIFVTQkFUX0FUQSwgVVNCQVRfQVRBX1NUQVRVUywgc3RhdHVzKSAhPSAKKwkJCQlVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJCWlmICh1c2JhdF9yZWFkKHVzLCBVU0JBVF9BVEEsIFVTQkFUX0FUQV9ERVZJQ0UsIHN0YXR1cykgIT0gCisJCQkJVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCQlpZiAodXNiYXRfcmVhZCh1cywgVVNCQVRfQVRBLCBVU0JBVF9BVEFfTEJBX01FLCBzdGF0dXMpICE9IAorCQkJCVVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkJaWYgKHVzYmF0X3JlYWQodXMsIFVTQkFUX0FUQSwgVVNCQVRfQVRBX0xCQV9ISSwgc3RhdHVzKSAhPSAKKwkJCQlVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJCWlmICh1c2JhdF93cml0ZSh1cywgVVNCQVRfQVRBLCBVU0JBVF9BVEFfTEJBX01FLCAweDU1KSAhPSAKKwkJCQlVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJCWlmICh1c2JhdF93cml0ZSh1cywgVVNCQVRfQVRBLCBVU0JBVF9BVEFfTEJBX0hJLCAweEFBKSAhPSAKKwkJCQlVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJCWlmICh1c2JhdF9yZWFkKHVzLCBVU0JBVF9BVEEsIFVTQkFUX0FUQV9MQkFfTUUsIHN0YXR1cykgIT0gCisJCQkJVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCQlpZiAodXNiYXRfcmVhZCh1cywgVVNCQVRfQVRBLCBVU0JBVF9BVEFfTEJBX01FLCBzdGF0dXMpICE9IAorCQkJCVVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgVVNCQVQgcHJvY2Vzc29yIGFuZCB0aGUgc3RvcmFnZSBkZXZpY2UKKyAqLworaW50IGluaXRfdXNiYXQoc3RydWN0IHVzX2RhdGEgKnVzKQoreworCWludCByYzsKKwlzdHJ1Y3QgdXNiYXRfaW5mbyAqaW5mbzsKKwl1bnNpZ25lZCBjaGFyIHN1YmNvdW50SCA9IFVTQkFUX0FUQV9MQkFfSEk7CisJdW5zaWduZWQgY2hhciBzdWJjb3VudEwgPSBVU0JBVF9BVEFfTEJBX01FOworCXVuc2lnbmVkIGNoYXIgKnN0YXR1cyA9IHVzLT5pb2J1ZjsKKworCXVzLT5leHRyYSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JhdF9pbmZvKSwgR0ZQX05PSU8pOworCWlmICghdXMtPmV4dHJhKSB7CisJCVVTX0RFQlVHUCgiaW5pdF91c2JhdDogR2FoISBDYW4ndCBhbGxvY2F0ZSBzdG9yYWdlIGZvciB1c2JhdCBpbmZvIHN0cnVjdCFcbiIpOworCQlyZXR1cm4gMTsKKwl9CisJbWVtc2V0KHVzLT5leHRyYSwgMCwgc2l6ZW9mKHN0cnVjdCB1c2JhdF9pbmZvKSk7CisJaW5mbyA9IChzdHJ1Y3QgdXNiYXRfaW5mbyAqKSAodXMtPmV4dHJhKTsKKworCS8vIEVuYWJsZSBwZXJpcGhlcmFsIGNvbnRyb2wgc2lnbmFscworCXJjID0gdXNiYXRfd3JpdGVfdXNlcl9pbyh1cywKKwkJCQkgVVNCQVRfVUlPX09FMSB8IFVTQkFUX1VJT19PRTAsCisJCQkJIFVTQkFUX1VJT19FUEFEIHwgVVNCQVRfVUlPXzEpOworCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlVU19ERUJVR1AoIklOSVQgMVxuIik7CisKKwltc2xlZXAoMjAwMCk7CisKKwlyYyA9IHVzYmF0X3JlYWRfdXNlcl9pbyh1cywgc3RhdHVzKTsKKwlpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCXJldHVybiByYzsKKworCVVTX0RFQlVHUCgiSU5JVCAyXG4iKTsKKworCXJjID0gdXNiYXRfcmVhZF91c2VyX2lvKHVzLCBzdGF0dXMpOworCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlyYyA9IHVzYmF0X3JlYWRfdXNlcl9pbyh1cywgc3RhdHVzKTsKKwlpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJVVNfREVCVUdQKCJJTklUIDNcbiIpOworCisJLy8gQXQgdGhpcyBwb2ludCwgd2UgbmVlZCB0byBkZXRlY3Qgd2hpY2ggZGV2aWNlIHdlIGFyZSB1c2luZworCWlmICh1c2JhdF9zZXRfdHJhbnNwb3J0KHVzLCBpbmZvKSkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCVVTX0RFQlVHUCgiSU5JVCA0XG4iKTsKKworCWlmICh1c2JhdF9nZXRfZGV2aWNlX3R5cGUodXMpID09IFVTQkFUX0RFVl9IUDgyMDApIHsKKwkJbXNsZWVwKDI1MCk7CisKKwkJLy8gV3JpdGUgMHg4MCB0byBJU0EgcG9ydCAweDNGCisJCXJjID0gdXNiYXRfd3JpdGUodXMsIFVTQkFUX0lTQSwgMHgzRiwgMHg4MCk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJCVVTX0RFQlVHUCgiSU5JVCA1XG4iKTsKKworCQkvLyBSZWFkIElTQSBwb3J0IDB4MjcKKwkJcmMgPSB1c2JhdF9yZWFkKHVzLCBVU0JBVF9JU0EsIDB4MjcsIHN0YXR1cyk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJCVVTX0RFQlVHUCgiSU5JVCA2XG4iKTsKKworCQlyYyA9IHVzYmF0X3JlYWRfdXNlcl9pbyh1cywgc3RhdHVzKTsKKwkJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkJVVNfREVCVUdQKCJJTklUIDdcbiIpOworCX0KKworCXJjID0gdXNiYXRfc2VsZWN0X2FuZF90ZXN0X3JlZ2lzdGVycyh1cyk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQlyZXR1cm4gcmM7CisKKwlVU19ERUJVR1AoIklOSVQgOFxuIik7CisKKwlyYyA9IHVzYmF0X3JlYWRfdXNlcl9pbyh1cywgc3RhdHVzKTsKKwlpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJVVNfREVCVUdQKCJJTklUIDlcbiIpOworCisJLy8gRW5hYmxlIHBlcmlwaGVyYWwgY29udHJvbCBzaWduYWxzIGFuZCBjYXJkIGRldGVjdAorCXJjID0gdXNiYXRfZGV2aWNlX2VuYWJsZV9jZHQodXMpOworCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJcmV0dXJuIHJjOworCisJVVNfREVCVUdQKCJJTklUIDEwXG4iKTsKKworCXJjID0gdXNiYXRfcmVhZF91c2VyX2lvKHVzLCBzdGF0dXMpOworCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlVU19ERUJVR1AoIklOSVQgMTFcbiIpOworCisJbXNsZWVwKDE0MDApOworCisJcmMgPSB1c2JhdF9yZWFkX3VzZXJfaW8odXMsIHN0YXR1cyk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCVVTX0RFQlVHUCgiSU5JVCAxMlxuIik7CisKKwlyYyA9IHVzYmF0X3NlbGVjdF9hbmRfdGVzdF9yZWdpc3RlcnModXMpOworCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJcmV0dXJuIHJjOworCisJVVNfREVCVUdQKCJJTklUIDEzXG4iKTsKKworCWlmICh1c2JhdF9nZXRfZGV2aWNlX3R5cGUodXMpID09IFVTQkFUX0RFVl9GTEFTSCkgeyAKKwkJc3ViY291bnRIID0gMHgwMjsKKwkJc3ViY291bnRMID0gMHgwMDsKKwl9CisJcmMgPSB1c2JhdF9zZXRfc2h1dHRsZV9mZWF0dXJlcyh1cywgKFVTQkFUX0ZFQVRfRVRFTiB8IFVTQkFUX0ZFQVRfRVQyIHwgVVNCQVRfRkVBVF9FVDEpLAorCQkJCQkJCQkJMHgwMCwgMHg4OCwgMHgwOCwgc3ViY291bnRILCBzdWJjb3VudEwpOworCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlVU19ERUJVR1AoIklOSVQgMTRcbiIpOworCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCisvKgorICogVHJhbnNwb3J0IGZvciB0aGUgSFAgODIwMGUKKyAqLworc3RhdGljIGludCB1c2JhdF9ocDgyMDBlX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIgKnN0YXR1cyA9IHVzLT5pb2J1ZjsKKwl1bnNpZ25lZCBjaGFyIHJlZ2lzdGVyc1szMl07CisJdW5zaWduZWQgY2hhciBkYXRhWzMyXTsKKwl1bnNpZ25lZCBpbnQgbGVuOworCWludCBpOworCWNoYXIgc3RyaW5nWzY0XTsKKworCWxlbiA9IHNyYi0+cmVxdWVzdF9idWZmbGVuOworCisJLyogU2VuZCBBMCAoQVRBIFBBQ0tFVCBDT01NQU5EKS4KKwkgICBOb3RlOiBJIGd1ZXNzIHdlJ3JlIG5ldmVyIGdvaW5nIHRvIGdldCBhbnkgb2YgdGhlIEFUQQorCSAgIGNvbW1hbmRzLi4uIGp1c3QgQVRBIFBhY2tldCBDb21tYW5kcy4KKyAJICovCisKKwlyZWdpc3RlcnNbMF0gPSBVU0JBVF9BVEFfRkVBVFVSRVM7CisJcmVnaXN0ZXJzWzFdID0gVVNCQVRfQVRBX1NFQ0NOVDsKKwlyZWdpc3RlcnNbMl0gPSBVU0JBVF9BVEFfU0VDTlVNOworCXJlZ2lzdGVyc1szXSA9IFVTQkFUX0FUQV9MQkFfTUU7CisJcmVnaXN0ZXJzWzRdID0gVVNCQVRfQVRBX0xCQV9ISTsKKwlyZWdpc3RlcnNbNV0gPSBVU0JBVF9BVEFfREVWSUNFOworCXJlZ2lzdGVyc1s2XSA9IFVTQkFUX0FUQV9DTUQ7CisJZGF0YVswXSA9IDB4MDA7CisJZGF0YVsxXSA9IDB4MDA7CisJZGF0YVsyXSA9IDB4MDA7CisJZGF0YVszXSA9IGxlbiYweEZGOyAJCS8vIChjeWxMKSA9IGV4cGVjdGVkIGxlbmd0aCAoTCkKKwlkYXRhWzRdID0gKGxlbj4+OCkmMHhGRjsgCS8vIChjeWxIKSA9IGV4cGVjdGVkIGxlbmd0aCAoSCkKKwlkYXRhWzVdID0gMHhCMDsgCQkvLyAoZGV2aWNlIHNlbCkgPSBzbGF2ZQorCWRhdGFbNl0gPSAweEEwOyAJCS8vIChjb21tYW5kKSA9IEFUQSBQQUNLRVQgQ09NTUFORAorCisJZm9yIChpPTc7IGk8MTk7IGkrKykgeworCQlyZWdpc3RlcnNbaV0gPSAweDEwOworCQlkYXRhW2ldID0gKGktNyA+PSBzcmItPmNtZF9sZW4pID8gMCA6IHNyYi0+Y21uZFtpLTddOworCX0KKworCXJlc3VsdCA9IHVzYmF0X2dldF9zdGF0dXModXMsIHN0YXR1cyk7CisJVVNfREVCVUdQKCJTdGF0dXMgPSAlMDJYXG4iLCAqc3RhdHVzKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwlpZiAoc3JiLT5jbW5kWzBdID09IFRFU1RfVU5JVF9SRUFEWSkKKwkJdHJhbnNmZXJyZWQgPSAwOworCisJaWYgKHNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkgeworCisJCXJlc3VsdCA9IHVzYmF0X2hwODIwMGVfcndfYmxvY2tfdGVzdCh1cywgVVNCQVRfQVRBLCAKKwkJCXJlZ2lzdGVycywgZGF0YSwgMTksCisJCQlVU0JBVF9BVEFfREFUQSwgVVNCQVRfQVRBX1NUQVRVUywgMHhGRCwKKwkJCShVU0JBVF9RVUFMX0ZDUSB8IFVTQkFUX1FVQUxfQUxRKSwKKwkJCURNQV9UT19ERVZJQ0UsCisJCQlzcmItPnJlcXVlc3RfYnVmZmVyLCAKKwkJCWxlbiwgc3JiLT51c2Vfc2csIDEwKTsKKworCQlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSB7CisJCQl0cmFuc2ZlcnJlZCArPSBsZW47CisJCQlVU19ERUJVR1AoIldyb3RlICUwOFggYnl0ZXNcbiIsIHRyYW5zZmVycmVkKTsKKwkJfQorCisJCXJldHVybiByZXN1bHQ7CisKKwl9IGVsc2UgaWYgKHNyYi0+Y21uZFswXSA9PSBSRUFEXzEwIHx8CisJCSAgIHNyYi0+Y21uZFswXSA9PSBHUENNRF9SRUFEX0NEKSB7CisKKwkJcmV0dXJuIHVzYmF0X2hwODIwMGVfaGFuZGxlX3JlYWQxMCh1cywgcmVnaXN0ZXJzLCBkYXRhLCBzcmIpOworCisJfQorCisJaWYgKGxlbiA+IDB4RkZGRikgeworCQlVU19ERUJVR1AoIkVycm9yOiBsZW4gPSAlMDhYLi4uIHdoYXQgZG8gSSBkbyBub3c/XG4iLAorCQkJbGVuKTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwlpZiAoIChyZXN1bHQgPSB1c2JhdF9tdWx0aXBsZV93cml0ZSh1cywgCisJCQlyZWdpc3RlcnMsIGRhdGEsIDcpKSAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgeworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8vIFdyaXRlIHRoZSAxMi1ieXRlIGNvbW1hbmQgaGVhZGVyLgorCisJLy8gSWYgdGhlIGNvbW1hbmQgaXMgQkxBTksgdGhlbiBzZXQgdGhlIHRpbWVyIGZvciA3NSBtaW51dGVzLgorCS8vIE90aGVyd2lzZSBzZXQgaXQgZm9yIDEwIG1pbnV0ZXMuCisKKwkvLyBOT1RFOiBUSEUgODIwMCBET0NVTUVOVEFUSU9OIFNUQVRFUyBUSEFUIEJMQU5LSU5HIEEgQ0RSVworCS8vIEFUIFNQRUVEIDQgSVMgVU5SRUxJQUJMRSEhIQorCisJaWYgKCAocmVzdWx0ID0gdXNiYXRfd3JpdGVfYmxvY2sodXMsIAorCQkJVVNCQVRfQVRBLCBzcmItPmNtbmQsIDEyLAorCQkJc3JiLT5jbW5kWzBdPT1HUENNRF9CTEFOSyA/IDc1IDogMTApKSAhPQorCQkJCVVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSB7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLy8gSWYgdGhlcmUgaXMgcmVzcG9uc2UgZGF0YSB0byBiZSByZWFkIGluIAorCS8vIHRoZW4gZG8gaXQgaGVyZS4KKworCWlmIChsZW4gIT0gMCAmJiAoc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpKSB7CisKKwkJLy8gSG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBpbj8gQ2hlY2sgY3lsTCByZWdpc3RlcgorCisJCWlmICh1c2JhdF9yZWFkKHVzLCBVU0JBVF9BVEEsIFVTQkFUX0FUQV9MQkFfTUUsIHN0YXR1cykgIT0gCisJCSAgICAJVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQl9CisKKwkJaWYgKGxlbiA+IDB4RkYpIHsgLy8gbmVlZCB0byByZWFkIGN5bEggYWxzbworCQkJbGVuID0gKnN0YXR1czsKKwkJCWlmICh1c2JhdF9yZWFkKHVzLCBVU0JBVF9BVEEsIFVTQkFUX0FUQV9MQkFfSEksIHN0YXR1cykgIT0KKwkJCQkgICAgVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJCX0KKwkJCWxlbiArPSAoKHVuc2lnbmVkIGludCkgKnN0YXR1cyk8PDg7CisJCX0KKwkJZWxzZQorCQkJbGVuID0gKnN0YXR1czsKKworCisJCXJlc3VsdCA9IHVzYmF0X3JlYWRfYmxvY2sodXMsIHNyYi0+cmVxdWVzdF9idWZmZXIsIGxlbik7CisKKwkJLyogRGVidWctcHJpbnQgdGhlIGZpcnN0IDMyIGJ5dGVzIG9mIHRoZSB0cmFuc2ZlciAqLworCisJCWlmICghc3JiLT51c2Vfc2cpIHsKKwkJCXN0cmluZ1swXSA9IDA7CisJCQlmb3IgKGk9MDsgaTxsZW4gJiYgaTwzMjsgaSsrKSB7CisJCQkJc3ByaW50ZihzdHJpbmcrc3RybGVuKHN0cmluZyksICIlMDJYICIsCisJCQkJICAoKHVuc2lnbmVkIGNoYXIgKilzcmItPnJlcXVlc3RfYnVmZmVyKVtpXSk7CisJCQkJaWYgKChpJTE2KT09MTUpIHsKKwkJCQkJVVNfREVCVUdQKCIlc1xuIiwgc3RyaW5nKTsKKwkJCQkJc3RyaW5nWzBdID0gMDsKKwkJCQl9CisJCQl9CisJCQlpZiAoc3RyaW5nWzBdIT0wKQorCQkJCVVTX0RFQlVHUCgiJXNcbiIsIHN0cmluZyk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogVHJhbnNwb3J0IGZvciBVU0JBVDAyLWJhc2VkIENvbXBhY3RGbGFzaCBhbmQgc2ltaWxhciBzdG9yYWdlIGRldmljZXMKKyAqLworc3RhdGljIGludCB1c2JhdF9mbGFzaF90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqIHNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQoreworCWludCByYzsKKwlzdHJ1Y3QgdXNiYXRfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgdXNiYXRfaW5mbyAqKSAodXMtPmV4dHJhKTsKKwl1bnNpZ25lZCBsb25nIGJsb2NrLCBibG9ja3M7CisJdW5zaWduZWQgY2hhciAqcHRyID0gdXMtPmlvYnVmOworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGlucXVpcnlfcmVzcG9uc2VbMzZdID0geworCQkweDAwLCAweDgwLCAweDAwLCAweDAxLCAweDFGLCAweDAwLCAweDAwLCAweDAwCisJfTsKKworCWlmIChzcmItPmNtbmRbMF0gPT0gSU5RVUlSWSkgeworCQlVU19ERUJVR1AoInVzYmF0X2ZsYXNoX3RyYW5zcG9ydDogSU5RVUlSWS4gUmV0dXJuaW5nIGJvZ3VzIHJlc3BvbnNlLlxuIik7CisJCW1lbWNweShwdHIsIGlucXVpcnlfcmVzcG9uc2UsIHNpemVvZihpbnF1aXJ5X3Jlc3BvbnNlKSk7CisJCWZpbGxfaW5xdWlyeV9yZXNwb25zZSh1cywgcHRyLCAzNik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFJFQURfQ0FQQUNJVFkpIHsKKwkJcmMgPSB1c2JhdF9mbGFzaF9jaGVja19tZWRpYSh1cywgaW5mbyk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCXJldHVybiByYzsKKworCQlyYyA9IHVzYmF0X2ZsYXNoX2dldF9zZWN0b3JfY291bnQodXMsIGluZm8pOworCQlpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCQlyZXR1cm4gcmM7CisKKwkJaW5mby0+c3NpemUgPSAweDIwMDsgIC8vIGhhcmQgY29kZWQgNTEyIGJ5dGUgc2VjdG9ycyBhcyBwZXIgQVRBIHNwZWMKKwkJVVNfREVCVUdQKCJ1c2JhdF9mbGFzaF90cmFuc3BvcnQ6IFJFQURfQ0FQQUNJVFk6ICVsZCBzZWN0b3JzLCAlbGQgYnl0ZXMgcGVyIHNlY3RvclxuIiwKKwkJCSAgaW5mby0+c2VjdG9ycywgaW5mby0+c3NpemUpOworCisJCS8vIGJ1aWxkIHRoZSByZXBseQorCQkvLyBub3RlOiBtdXN0IHJldHVybiB0aGUgc2VjdG9yIG51bWJlciBvZiB0aGUgbGFzdCBzZWN0b3IsCisJCS8vICpub3QqIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2VjdG9ycworCQkoKF9fYmUzMiAqKSBwdHIpWzBdID0gY3B1X3RvX2JlMzIoaW5mby0+c2VjdG9ycyAtIDEpOworCQkoKF9fYmUzMiAqKSBwdHIpWzFdID0gY3B1X3RvX2JlMzIoaW5mby0+c3NpemUpOworCQl1c2Jfc3Rvcl9zZXRfeGZlcl9idWYocHRyLCA4LCBzcmIpOworCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IE1PREVfU0VMRUNUXzEwKSB7CisJCVVTX0RFQlVHUCgidXNiYXRfZmxhc2hfdHJhbnNwb3J0OiAgR2FoISBNT0RFX1NFTEVDVF8xMC5cbiIpOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gUkVBRF8xMCkgeworCQlibG9jayA9ICgodTMyKShzcmItPmNtbmRbMl0pIDw8IDI0KSB8ICgodTMyKShzcmItPmNtbmRbM10pIDw8IDE2KSB8CisJCQkJKCh1MzIpKHNyYi0+Y21uZFs0XSkgPDwgIDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs1XSkpOworCisJCWJsb2NrcyA9ICgodTMyKShzcmItPmNtbmRbN10pIDw8IDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs4XSkpOworCisJCVVTX0RFQlVHUCgidXNiYXRfZmxhc2hfdHJhbnNwb3J0OiAgUkVBRF8xMDogcmVhZCBibG9jayAweCUwNGx4ICBjb3VudCAlbGRcbiIsIGJsb2NrLCBibG9ja3MpOworCQlyZXR1cm4gdXNiYXRfZmxhc2hfcmVhZF9kYXRhKHVzLCBpbmZvLCBibG9jaywgYmxvY2tzKTsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFJFQURfMTIpIHsKKwkJLy8gSSBkb24ndCB0aGluayB3ZSdsbCBldmVyIHNlZSBhIFJFQURfMTIgYnV0IHN1cHBvcnQgaXQgYW55d2F5Li4uCisJCWJsb2NrID0gKCh1MzIpKHNyYi0+Y21uZFsyXSkgPDwgMjQpIHwgKCh1MzIpKHNyYi0+Y21uZFszXSkgPDwgMTYpIHwKKwkJICAgICAgICAoKHUzMikoc3JiLT5jbW5kWzRdKSA8PCAgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzVdKSk7CisKKwkJYmxvY2tzID0gKCh1MzIpKHNyYi0+Y21uZFs2XSkgPDwgMjQpIHwgKCh1MzIpKHNyYi0+Y21uZFs3XSkgPDwgMTYpIHwKKwkJICAgICAgICAgKCh1MzIpKHNyYi0+Y21uZFs4XSkgPDwgIDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs5XSkpOworCisJCVVTX0RFQlVHUCgidXNiYXRfZmxhc2hfdHJhbnNwb3J0OiBSRUFEXzEyOiByZWFkIGJsb2NrIDB4JTA0bHggIGNvdW50ICVsZFxuIiwgYmxvY2ssIGJsb2Nrcyk7CisJCXJldHVybiB1c2JhdF9mbGFzaF9yZWFkX2RhdGEodXMsIGluZm8sIGJsb2NrLCBibG9ja3MpOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gV1JJVEVfMTApIHsKKwkJYmxvY2sgPSAoKHUzMikoc3JiLT5jbW5kWzJdKSA8PCAyNCkgfCAoKHUzMikoc3JiLT5jbW5kWzNdKSA8PCAxNikgfAorCQkgICAgICAgICgodTMyKShzcmItPmNtbmRbNF0pIDw8ICA4KSB8ICgodTMyKShzcmItPmNtbmRbNV0pKTsKKworCQlibG9ja3MgPSAoKHUzMikoc3JiLT5jbW5kWzddKSA8PCA4KSB8ICgodTMyKShzcmItPmNtbmRbOF0pKTsKKworCQlVU19ERUJVR1AoInVzYmF0X2ZsYXNoX3RyYW5zcG9ydDogV1JJVEVfMTA6IHdyaXRlIGJsb2NrIDB4JTA0bHggIGNvdW50ICVsZFxuIiwgYmxvY2ssIGJsb2Nrcyk7CisJCXJldHVybiB1c2JhdF9mbGFzaF93cml0ZV9kYXRhKHVzLCBpbmZvLCBibG9jaywgYmxvY2tzKTsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFdSSVRFXzEyKSB7CisJCS8vIEkgZG9uJ3QgdGhpbmsgd2UnbGwgZXZlciBzZWUgYSBXUklURV8xMiBidXQgc3VwcG9ydCBpdCBhbnl3YXkuLi4KKwkJYmxvY2sgPSAoKHUzMikoc3JiLT5jbW5kWzJdKSA8PCAyNCkgfCAoKHUzMikoc3JiLT5jbW5kWzNdKSA8PCAxNikgfAorCQkgICAgICAgICgodTMyKShzcmItPmNtbmRbNF0pIDw8ICA4KSB8ICgodTMyKShzcmItPmNtbmRbNV0pKTsKKworCQlibG9ja3MgPSAoKHUzMikoc3JiLT5jbW5kWzZdKSA8PCAyNCkgfCAoKHUzMikoc3JiLT5jbW5kWzddKSA8PCAxNikgfAorCQkgICAgICAgICAoKHUzMikoc3JiLT5jbW5kWzhdKSA8PCAgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzldKSk7CisKKwkJVVNfREVCVUdQKCJ1c2JhdF9mbGFzaF90cmFuc3BvcnQ6IFdSSVRFXzEyOiB3cml0ZSBibG9jayAweCUwNGx4ICBjb3VudCAlbGRcbiIsIGJsb2NrLCBibG9ja3MpOworCQlyZXR1cm4gdXNiYXRfZmxhc2hfd3JpdGVfZGF0YSh1cywgaW5mbywgYmxvY2ssIGJsb2Nrcyk7CisJfQorCisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFRFU1RfVU5JVF9SRUFEWSkgeworCQlVU19ERUJVR1AoInVzYmF0X2ZsYXNoX3RyYW5zcG9ydDogVEVTVF9VTklUX1JFQURZLlxuIik7CisKKwkJcmMgPSB1c2JhdF9mbGFzaF9jaGVja19tZWRpYSh1cywgaW5mbyk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCXJldHVybiByYzsKKworCQlyZXR1cm4gdXNiYXRfY2hlY2tfc3RhdHVzKHVzKTsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UpIHsKKwkJVVNfREVCVUdQKCJ1c2JhdF9mbGFzaF90cmFuc3BvcnQ6IFJFUVVFU1RfU0VOU0UuXG4iKTsKKworCQltZW1zZXQocHRyLCAwLCAxOCk7CisJCXB0clswXSA9IDB4RjA7CisJCXB0clsyXSA9IGluZm8tPnNlbnNlX2tleTsKKwkJcHRyWzddID0gMTE7CisJCXB0clsxMl0gPSBpbmZvLT5zZW5zZV9hc2M7CisJCXB0clsxM10gPSBpbmZvLT5zZW5zZV9hc2NxOworCQl1c2Jfc3Rvcl9zZXRfeGZlcl9idWYocHRyLCAxOCwgc3JiKTsKKworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBBTExPV19NRURJVU1fUkVNT1ZBTCkgeworCQkvLyBzdXJlLiAgd2hhdGV2ZXIuICBub3QgbGlrZSB3ZSBjYW4gc3RvcCB0aGUgdXNlciBmcm9tIHBvcHBpbmcKKwkJLy8gdGhlIG1lZGlhIG91dCBvZiB0aGUgZGV2aWNlIChubyBsb2NraW5nIGRvb3JzLCBldGMpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlVU19ERUJVR1AoInVzYmF0X2ZsYXNoX3RyYW5zcG9ydDogR2FoISBVbmtub3duIGNvbW1hbmQ6ICVkICgweCV4KVxuIiwKKwkJCSAgc3JiLT5jbW5kWzBdLCBzcmItPmNtbmRbMF0pOworCWluZm8tPnNlbnNlX2tleSA9IDB4MDU7CisJaW5mby0+c2Vuc2VfYXNjID0gMHgyMDsKKwlpbmZvLT5zZW5zZV9hc2NxID0gMHgwMDsKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKK30KKworLyoKKyAqIERlZmF1bHQgdHJhbnNwb3J0IGZ1bmN0aW9uLiBBdHRlbXB0cyB0byBkZXRlY3Qgd2hpY2ggdHJhbnNwb3J0IGZ1bmN0aW9uCisgKiBzaG91bGQgYmUgY2FsbGVkLCBtYWtlcyBpdCB0aGUgbmV3IGRlZmF1bHQsIGFuZCBjYWxscyBpdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBuZXZlciBiZSBjYWxsZWQuIE91ciB1c2JhdF9pbml0KCkgZnVuY3Rpb24gZGV0ZWN0cyB0aGUKKyAqIGRldmljZSB0eXBlIGFuZCBjaGFuZ2VzIHRoZSB1cy0+dHJhbnNwb3J0IHB0ciB0byB0aGUgdHJhbnNwb3J0IGZ1bmN0aW9uCisgKiByZWxldmFudCB0byB0aGUgZGV2aWNlLgorICogSG93ZXZlciwgd2UnbGwgc3VwcG9ydCB0aGlzIGltcG9zc2libGUoPykgY2FzZSBhbnl3YXkuCisgKi8KK2ludCB1c2JhdF90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJc3RydWN0IHVzYmF0X2luZm8gKmluZm8gPSAoc3RydWN0IHVzYmF0X2luZm8qKSAodXMtPmV4dHJhKTsKKworCWlmICh1c2JhdF9zZXRfdHJhbnNwb3J0KHVzLCBpbmZvKSkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCXJldHVybiB1cy0+dHJhbnNwb3J0KHNyYiwgdXMpOwkKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjhlODY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qIERyaXZlciBmb3IgU0NNIE1pY3Jvc3lzdGVtcyBVU0ItQVRBUEkgY2FibGUKKyAqIEhlYWRlciBGaWxlCisgKgorICogJElkOiBzaHV0dGxlX3VzYmF0LmgsdiAxLjUgMjAwMC8wOS8xNyAxNDo0NDo1MiBncm9vdnlqYXZhIEV4cCAkCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAyMDAwIFJvYmVydCBCYXJ1Y2ggKGF1dG9waGlsZUBkb2wubmV0KQorICogICAoYykgMjAwNCwgMjAwNSBEYW5pZWwgRHJha2UgPGRzZEBnZW50b28ub3JnPgorICoKKyAqIFNlZSBzaHV0dGxlX3VzYmF0LmMgZm9yIG1vcmUgZXhwbGFuYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9VU0JfU0hVVFRMRV9VU0JBVF9ICisjZGVmaW5lIF9VU0JfU0hVVFRMRV9VU0JBVF9ICisKKy8qIFN1cHBvcnRlZCBkZXZpY2UgdHlwZXMgKi8KKyNkZWZpbmUgVVNCQVRfREVWX0hQODIwMAkweDAxCisjZGVmaW5lIFVTQkFUX0RFVl9GTEFTSAkJMHgwMgorCisjZGVmaW5lIFVTQkFUX0VQUF9QT1JUCQkweDEwCisjZGVmaW5lIFVTQkFUX0VQUF9SRUdJU1RFUgkweDMwCisjZGVmaW5lIFVTQkFUX0FUQQkJMHg0MAorI2RlZmluZSBVU0JBVF9JU0EJCTB4NTAKKworLyogQ29tbWFuZHMgKG5lZWQgdG8gYmUgbG9naWNhbGx5IE9SJ2Qgd2l0aCBhbiBhY2Nlc3MgdHlwZSAqLworI2RlZmluZSBVU0JBVF9DTURfUkVBRF9SRUcJCTB4MDAKKyNkZWZpbmUgVVNCQVRfQ01EX1dSSVRFX1JFRwkJMHgwMQorI2RlZmluZSBVU0JBVF9DTURfUkVBRF9CTE9DSwkweDAyCisjZGVmaW5lIFVTQkFUX0NNRF9XUklURV9CTE9DSwkweDAzCisjZGVmaW5lIFVTQkFUX0NNRF9DT05EX1JFQURfQkxPQ0sJMHgwNAorI2RlZmluZSBVU0JBVF9DTURfQ09ORF9XUklURV9CTE9DSwkweDA1CisjZGVmaW5lIFVTQkFUX0NNRF9XUklURV9SRUdTCTB4MDcKKworLyogQ29tbWFuZHMgKHRoZXNlIGRvbid0IG5lZWQgYW4gYWNjZXNzIHR5cGUpICovCisjZGVmaW5lIFVTQkFUX0NNRF9FWEVDX0NNRAkweDgwCisjZGVmaW5lIFVTQkFUX0NNRF9TRVRfRkVBVAkweDgxCisjZGVmaW5lIFVTQkFUX0NNRF9VSU8JCTB4ODIKKworLyogTWV0aG9kcyBvZiBhY2Nlc3NpbmcgVUlPIHJlZ2lzdGVyICovCisjZGVmaW5lIFVTQkFUX1VJT19SRUFECTEKKyNkZWZpbmUgVVNCQVRfVUlPX1dSSVRFCTAKKworLyogUXVhbGlmaWVyIGJpdHMgKi8KKyNkZWZpbmUgVVNCQVRfUVVBTF9GQ1EJMHgyMCAvLyBmdWxsIGNvbXBhcmUKKyNkZWZpbmUgVVNCQVRfUVVBTF9BTFEJMHgxMCAvLyBhdXRvIGxvYWQgc3ViY291bnQKKworLyogVVNCQVQgRmxhc2ggTWVkaWEgc3RhdHVzIHR5cGVzICovCisjZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX05PTkUJMAorI2RlZmluZSBVU0JBVF9GTEFTSF9NRURJQV9DRgkxCisKKy8qIFVTQkFUIEZsYXNoIE1lZGlhIGNoYW5nZSB0eXBlcyAqLworI2RlZmluZSBVU0JBVF9GTEFTSF9NRURJQV9TQU1FCTAKKyNkZWZpbmUgVVNCQVRfRkxBU0hfTUVESUFfQ0hBTkdFRAkxCisKKy8qIFVTQkFUIEFUQSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX0RBVEEgICAgICAweDEwICAvLyByZWFkL3dyaXRlIGRhdGEgKFIvVykKKyNkZWZpbmUgVVNCQVRfQVRBX0ZFQVRVUkVTICAweDExICAvLyBzZXQgZmVhdHVyZXMgKFcpCisjZGVmaW5lIFVTQkFUX0FUQV9FUlJPUiAgICAgMHgxMSAgLy8gZXJyb3IgKFIpCisjZGVmaW5lIFVTQkFUX0FUQV9TRUNDTlQgICAgMHgxMiAgLy8gc2VjdG9yIGNvdW50IChSL1cpCisjZGVmaW5lIFVTQkFUX0FUQV9TRUNOVU0gICAgMHgxMyAgLy8gc2VjdG9yIG51bWJlciAoUi9XKQorI2RlZmluZSBVU0JBVF9BVEFfTEJBX01FICAgIDB4MTQgIC8vIGN5bGluZGVyIGxvdyAoUi9XKQorI2RlZmluZSBVU0JBVF9BVEFfTEJBX0hJICAgIDB4MTUgIC8vIGN5bGluZGVyIGhpZ2ggKFIvVykKKyNkZWZpbmUgVVNCQVRfQVRBX0RFVklDRSAgICAweDE2ICAvLyBoZWFkL2RldmljZSBzZWxlY3Rpb24gKFIvVykKKyNkZWZpbmUgVVNCQVRfQVRBX1NUQVRVUyAgICAweDE3ICAvLyBkZXZpY2Ugc3RhdHVzIChSKQorI2RlZmluZSBVU0JBVF9BVEFfQ01EICAgICAgIDB4MTcgIC8vIGRldmljZSBjb21tYW5kIChXKQorI2RlZmluZSBVU0JBVF9BVEFfQUxUU1RBVFVTIDB4MEUgIC8vIHN0YXR1cyAobm8gY2xlYXIgSVJRKSAoUikKKworLyogVVNCQVQgVXNlciBJL08gRGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX0VQQUQJCTB4ODAgLy8gRW5hYmxlIFBlcmlwaGVyYWwgQ29udHJvbCBTaWduYWxzCisjZGVmaW5lIFVTQkFUX1VJT19DRFQJCTB4NDAgLy8gQ2FyZCBEZXRlY3QgKFJlYWQgT25seSkKKwkJCQkgICAgIC8vIENEVCA9IEFDS0QgJiAhVUkxICYgIVVJMAorI2RlZmluZSBVU0JBVF9VSU9fMQkJMHgyMCAvLyBJL08gMQorI2RlZmluZSBVU0JBVF9VSU9fMAkJMHgxMCAvLyBJL08gMAorI2RlZmluZSBVU0JBVF9VSU9fRVBQX0FUQQkweDA4IC8vIDE9RVBQIG1vZGUsIDA9QVRBIG1vZGUKKyNkZWZpbmUgVVNCQVRfVUlPX1VJMQkJMHgwNCAvLyBJbnB1dCAxCisjZGVmaW5lIFVTQkFUX1VJT19VSTAJCTB4MDIgLy8gSW5wdXQgMAorI2RlZmluZSBVU0JBVF9VSU9fSU5UUl9BQ0sJMHgwMSAvLyBJbnRlcnJ1cHQgKEFUQSAmIElTQSkvQWNrbm93bGVkZ2UgKEVQUCkKKworLyogVVNCQVQgVXNlciBJL08gRW5hYmxlIHJlZ2lzdGVycyAqLworI2RlZmluZSBVU0JBVF9VSU9fRFJWUlNUCTB4ODAgLy8gUmVzZXQgUGVyaXBoZXJhbAorI2RlZmluZSBVU0JBVF9VSU9fQUNLRAkJMHg0MCAvLyBFbmFibGUgQ2FyZCBEZXRlY3QKKyNkZWZpbmUgVVNCQVRfVUlPX09FMQkJMHgyMCAvLyBJL08gMSBzZXQ9b3V0cHV0L2Nscj1pbnB1dAorCQkJCSAgICAgLy8gSWYgQUNLRD0xLCBzZXQgT0UxIHRvIDEgYWxzby4KKyNkZWZpbmUgVVNCQVRfVUlPX09FMAkJMHgxMCAvLyBJL08gMCBzZXQ9b3V0cHV0L2Nscj1pbnB1dAorI2RlZmluZSBVU0JBVF9VSU9fQURQUlNUCTB4MDEgLy8gUmVzZXQgU0NNIGNoaXAKKworLyogVVNCQVQgRmVhdHVyZXMgKi8KKyNkZWZpbmUgVVNCQVRfRkVBVF9FVEVOCTB4ODAgLy8gRXh0ZXJuYWwgdHJpZ2dlciBlbmFibGUKKyNkZWZpbmUgVVNCQVRfRkVBVF9VMQkweDA4CisjZGVmaW5lIFVTQkFUX0ZFQVRfVTAJMHgwNAorI2RlZmluZSBVU0JBVF9GRUFUX0VUMQkweDAyCisjZGVmaW5lIFVTQkFUX0ZFQVRfRVQyCTB4MDEKKworZXh0ZXJuIGludCB1c2JhdF90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOworZXh0ZXJuIGludCBpbml0X3VzYmF0KHN0cnVjdCB1c19kYXRhICp1cyk7CisKK3N0cnVjdCB1c2JhdF9pbmZvIHsKKwlpbnQgZGV2aWNldHlwZTsKKworCS8qIFVzZWQgZm9yIEZsYXNoIHJlYWRlcnMgb25seSAqLworCXVuc2lnbmVkIGxvbmcgc2VjdG9yczsgICAgIC8vIHRvdGFsIHNlY3RvciBjb3VudAorCXVuc2lnbmVkIGxvbmcgc3NpemU7ICAgICAgIC8vIHNlY3RvciBzaXplIGluIGJ5dGVzCisKKwl1bnNpZ25lZCBjaGFyIHNlbnNlX2tleTsKKwl1bnNpZ25lZCBsb25nIHNlbnNlX2FzYzsgICAvLyBhZGRpdGlvbmFsIHNlbnNlIGNvZGUKKwl1bnNpZ25lZCBsb25nIHNlbnNlX2FzY3E7ICAvLyBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYzNkMmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCkBAIC0wLDAgKzEsMTIxNSBAQAorLyogRHJpdmVyIGZvciBVU0IgTWFzcyBTdG9yYWdlIGNvbXBsaWFudCBkZXZpY2VzCisgKgorICogJElkOiB0cmFuc3BvcnQuYyx2IDEuNDcgMjAwMi8wNC8yMiAwMzozOTo0MyBtZGhhcm0gRXhwICQKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDE5OTktMjAwMiBNYXR0aGV3IERoYXJtIChtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldCkKKyAqCisgKiBEZXZlbG9wZWQgd2l0aCB0aGUgYXNzaXN0YW5jZSBvZjoKKyAqICAgKGMpIDIwMDAgRGF2aWQgTC4gQnJvd24sIEpyLiAodXNiLXN0b3JhZ2VAZGF2aWRiLm9yZykKKyAqICAgKGMpIDIwMDAgU3RlcGhlbiBKLiBHb3dkeSAoU0dvd2R5QGxibC5nb3YpCisgKiAgIChjKSAyMDAyIEFsYW4gU3Rlcm4gPHN0ZXJuQHJvd2xhbmQub3JnPgorICoKKyAqIEluaXRpYWwgd29yayBieToKKyAqICAgKGMpIDE5OTkgTWljaGFlbCBHZWUgKG1pY2hhZWxAbGludXhzcGVjaWZpYy5jb20pCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlICdVU0IgTWFzcyBTdG9yYWdlIENsYXNzJyBkb2N1bWVudC4gVGhpcworICogZGVzY3JpYmVzIGluIGRldGFpbCB0aGUgcHJvdG9jb2wgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHN1Y2gKKyAqIGRldmljZXMuICBDbGVhcmx5LCB0aGUgZGVzaWduZXJzIGhhZCBTQ1NJIGFuZCBBVEFQSSBjb21tYW5kcyBpbgorICogbWluZCB3aGVuIHRoZXkgY3JlYXRlZCB0aGlzIGRvY3VtZW50LiAgVGhlIGNvbW1hbmRzIGFyZSBhbGwgdmVyeQorICogc2ltaWxhciB0byBjb21tYW5kcyBpbiB0aGUgU0NTSS1JSSBhbmQgQVRBUEkgc3BlY2lmaWNhdGlvbnMuCisgKgorICogSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBpbiBhIG51bWJlciBvZiBjYXNlcyB0aGlzIGNsYXNzCisgKiBleGhpYml0cyBjbGFzcy1zcGVjaWZpYyBleGVtcHRpb25zIGZyb20gdGhlIFVTQiBzcGVjaWZpY2F0aW9uLgorICogTm90YWJseSB0aGUgdXNhZ2Ugb2YgTkFLLCBTVEFMTCBhbmQgQUNLIGRpZmZlcnMgZnJvbSB0aGUgbm9ybSwgaW4KKyAqIHRoYXQgdGhleSBhcmUgdXNlZCB0byBjb21tdW5pY2F0ZSB3YWl0LCBmYWlsZWQgYW5kIE9LIG9uIGNvbW1hbmRzLgorICoKKyAqIEFsc28sIGZvciBjZXJ0YWluIGRldmljZXMsIHRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQgaXMgdXNlZCB0byBjb252ZXkKKyAqIHN0YXR1cyBvZiBhIGNvbW1hbmQuCisgKgorICogUGxlYXNlIHNlZSBodHRwOi8vd3d3Lm9uZS1leWVkLWFsaWVuLm5ldC9+bWRoYXJtL2xpbnV4LXVzYiBmb3IgbW9yZQorICogaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBkcml2ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKworI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInByb3RvY29sLmgiCisjaW5jbHVkZSAic2NzaWdsdWUuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGF0YSB0cmFuc2ZlciByb3V0aW5lcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogVGhpcyBpcyBzdWJ0bGUsIHNvIHBheSBhdHRlbnRpb246CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFdlJ3JlIHZlcnkgY29uY2VybmVkIGFib3V0IHJhY2VzIHdpdGggYSBjb21tYW5kIGFib3J0LiAgSGFuZ2luZyB0aGlzIGNvZGUKKyAqIGlzIGEgc3VyZSBmaXJlIHdheSB0byBoYW5nIHRoZSBrZXJuZWwuICAoTm90ZSB0aGF0IHRoaXMgZGlzY3Vzc2lvbiBhcHBsaWVzCisgKiBvbmx5IHRvIHRyYW5zYWN0aW9ucyByZXN1bHRpbmcgZnJvbSBhIHNjc2kgcXVldWVkLWNvbW1hbmQsIHNpbmNlIG9ubHkKKyAqIHRoZXNlIHRyYW5zYWN0aW9ucyBhcmUgc3ViamVjdCB0byBhIHNjc2kgYWJvcnQuICBPdGhlciB0cmFuc2FjdGlvbnMsIHN1Y2gKKyAqIGFzIHRob3NlIG9jY3VycmluZyBkdXJpbmcgZGV2aWNlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uLCBtdXN0IGJlIGhhbmRsZWQKKyAqIGJ5IGEgc2VwYXJhdGUgY29kZSBwYXRoLikKKyAqCisgKiBUaGUgYWJvcnQgZnVuY3Rpb24gKHVzYl9zdG9yYWdlX2NvbW1hbmRfYWJvcnQoKSBpbiBzY3NpZ2x1ZS5jKSBmaXJzdAorICogc2V0cyB0aGUgbWFjaGluZSBzdGF0ZSBhbmQgdGhlIEFCT1JUSU5HIGJpdCBpbiB1cy0+ZmxhZ3MgdG8gcHJldmVudAorICogbmV3IFVSQnMgZnJvbSBiZWluZyBzdWJtaXR0ZWQuICBJdCB0aGVuIGNhbGxzIHVzYl9zdG9yX3N0b3BfdHJhbnNwb3J0KCkKKyAqIGJlbG93LCB3aGljaCBhdG9taWNhbGx5IHRlc3RzLWFuZC1jbGVhcnMgdGhlIFVSQl9BQ1RJVkUgYml0IGluIHVzLT5mbGFncworICogdG8gc2VlIGlmIHRoZSBjdXJyZW50X3VyYiBuZWVkcyB0byBiZSBzdG9wcGVkLiAgTGlrZXdpc2UsIHRoZSBTR19BQ1RJVkUKKyAqIGJpdCBpcyB0ZXN0ZWQgdG8gc2VlIGlmIHRoZSBjdXJyZW50X3NnIHNjYXR0ZXItZ2F0aGVyIHJlcXVlc3QgbmVlZHMgdG8gYmUKKyAqIHN0b3BwZWQuICBUaGUgdGltZW91dCBjYWxsYmFjayByb3V0aW5lIGRvZXMgbXVjaCB0aGUgc2FtZSB0aGluZy4KKyAqCisgKiBXaGVuIGEgZGlzY29ubmVjdCBvY2N1cnMsIHRoZSBESVNDT05ORUNUSU5HIGJpdCBpbiB1cy0+ZmxhZ3MgaXMgc2V0IHRvCisgKiBwcmV2ZW50IG5ldyBVUkJzIGZyb20gYmVpbmcgc3VibWl0dGVkLCBhbmQgdXNiX3N0b3Jfc3RvcF90cmFuc3BvcnQoKSBpcworICogY2FsbGVkIHRvIHN0b3AgYW55IG9uZ29pbmcgcmVxdWVzdHMuCisgKgorICogVGhlIHN1Ym1pdCBmdW5jdGlvbiBmaXJzdCB2ZXJpZmllcyB0aGF0IHRoZSBzdWJtaXR0aW5nIGlzIGFsbG93ZWQKKyAqIChuZWl0aGVyIEFCT1JUSU5HIG5vciBESVNDT05ORUNUSU5HIGJpdHMgYXJlIHNldCkgYW5kIHRoYXQgdGhlIHN1Ym1pdAorICogY29tcGxldGVzIHdpdGhvdXQgZXJyb3JzLCBhbmQgb25seSB0aGVuIHNldHMgdGhlIFVSQl9BQ1RJVkUgYml0LiAgVGhpcworICogcHJldmVudHMgdGhlIHN0b3BfdHJhbnNwb3J0KCkgZnVuY3Rpb24gZnJvbSB0cnlpbmcgdG8gY2FuY2VsIHRoZSBVUkIKKyAqIHdoaWxlIHRoZSBzdWJtaXQgY2FsbCBpcyB1bmRlcndheS4gIE5leHQsIHRoZSBzdWJtaXQgZnVuY3Rpb24gbXVzdCB0ZXN0CisgKiB0aGUgZmxhZ3MgdG8gc2VlIGlmIGFuIGFib3J0IG9yIGRpc2Nvbm5lY3Qgb2NjdXJyZWQgZHVyaW5nIHRoZSBzdWJtaXNzaW9uCisgKiBvciBiZWZvcmUgdGhlIFVSQl9BQ1RJVkUgYml0IHdhcyBzZXQuICBJZiBzbywgaXQncyBlc3NlbnRpYWwgdG8gY2FuY2VsCisgKiB0aGUgVVJCIGlmIGl0IGhhc24ndCBiZWVuIGNhbmNlbGxlZCBhbHJlYWR5IChpLmUuLCBpZiB0aGUgVVJCX0FDVElWRSBiaXQKKyAqIGlzIHN0aWxsIHNldCkuICBFaXRoZXIgd2F5LCB0aGUgZnVuY3Rpb24gbXVzdCB0aGVuIHdhaXQgZm9yIHRoZSBVUkIgdG8KKyAqIGZpbmlzaC4gIE5vdGUgdGhhdCBiZWNhdXNlIHRoZSBVUkJfQVNZTkNfVU5MSU5LIGZsYWcgaXMgc2V0LCB0aGUgVVJCIGNhbgorICogc3RpbGwgYmUgaW4gcHJvZ3Jlc3MgZXZlbiBhZnRlciBhIGNhbGwgdG8gdXNiX3VubGlua191cmIoKSByZXR1cm5zLgorICoKKyAqIFRoZSBpZGVhIGlzIHRoYXQgKDEpIG9uY2UgdGhlIEFCT1JUSU5HIG9yIERJU0NPTk5FQ1RJTkcgYml0IGlzIHNldCwKKyAqIGVpdGhlciB0aGUgc3RvcF90cmFuc3BvcnQoKSBmdW5jdGlvbiBvciB0aGUgc3VibWl0dGluZyBmdW5jdGlvbgorICogaXMgZ3VhcmFudGVlZCB0byBjYWxsIHVzYl91bmxpbmtfdXJiKCkgZm9yIGFuIGFjdGl2ZSBVUkIsCisgKiBhbmQgKDIpIHRlc3RfYW5kX2NsZWFyX2JpdCgpIHByZXZlbnRzIHVzYl91bmxpbmtfdXJiKCkgZnJvbSBiZWluZworICogY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9yIGZyb20gYmVpbmcgY2FsbGVkIGR1cmluZyB1c2Jfc3VibWl0X3VyYigpLgorICovCisKKy8qIFRoaXMgaXMgdGhlIGNvbXBsZXRpb24gaGFuZGxlciB3aGljaCB3aWxsIHdha2UgdXMgdXAgd2hlbiBhbiBVUkIKKyAqIGNvbXBsZXRlcy4KKyAqLworc3RhdGljIHZvaWQgdXNiX3N0b3JfYmxvY2tpbmdfY29tcGxldGlvbihzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBjb21wbGV0aW9uICp1cmJfZG9uZV9wdHIgPSAoc3RydWN0IGNvbXBsZXRpb24gKil1cmItPmNvbnRleHQ7CisKKwljb21wbGV0ZSh1cmJfZG9uZV9wdHIpOworfQorIAorLyogVGhpcyBpcyB0aGUgdGltZW91dCBoYW5kbGVyIHdoaWNoIHdpbGwgY2FuY2VsIGFuIFVSQiB3aGVuIGl0cyB0aW1lb3V0CisgKiBleHBpcmVzLgorICovCitzdGF0aWMgdm9pZCB0aW1lb3V0X2hhbmRsZXIodW5zaWduZWQgbG9uZyB1c18pCit7CisJc3RydWN0IHVzX2RhdGEgKnVzID0gKHN0cnVjdCB1c19kYXRhICopIHVzXzsKKworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVVNfRkxJRFhfVVJCX0FDVElWRSwgJnVzLT5mbGFncykpIHsKKwkJVVNfREVCVUdQKCJUaW1lb3V0IC0tIGNhbmNlbGxpbmcgVVJCXG4iKTsKKwkJdXNiX3VubGlua191cmIodXMtPmN1cnJlbnRfdXJiKTsKKwl9Cit9CisKKy8qIFRoaXMgaXMgdGhlIGNvbW1vbiBwYXJ0IG9mIHRoZSBVUkIgbWVzc2FnZSBzdWJtaXNzaW9uIGNvZGUKKyAqCisgKiBBbGwgVVJCcyBmcm9tIHRoZSB1c2Itc3RvcmFnZSBkcml2ZXIgaW52b2x2ZWQgaW4gaGFuZGxpbmcgYSBxdWV1ZWQgc2NzaQorICogY29tbWFuZCBfbXVzdF8gcGFzcyB0aHJvdWdoIHRoaXMgZnVuY3Rpb24gKG9yIHNvbWV0aGluZyBsaWtlIGl0KSBmb3IgdGhlCisgKiBhYm9ydCBtZWNoYW5pc21zIHRvIHdvcmsgcHJvcGVybHkuCisgKi8KK3N0YXRpYyBpbnQgdXNiX3N0b3JfbXNnX2NvbW1vbihzdHJ1Y3QgdXNfZGF0YSAqdXMsIGludCB0aW1lb3V0KQoreworCXN0cnVjdCBjb21wbGV0aW9uIHVyYl9kb25lOworCXN0cnVjdCB0aW1lcl9saXN0IHRvX3RpbWVyOworCWludCBzdGF0dXM7CisKKwkvKiBkb24ndCBzdWJtaXQgVVJCcyBkdXJpbmcgYWJvcnQvZGlzY29ubmVjdCBwcm9jZXNzaW5nICovCisJaWYgKHVzLT5mbGFncyAmIEFCT1JUSU5HX09SX0RJU0NPTk5FQ1RJTkcpCisJCXJldHVybiAtRUlPOworCisJLyogc2V0IHVwIGRhdGEgc3RydWN0dXJlcyBmb3IgdGhlIHdha2V1cCBzeXN0ZW0gKi8KKwlpbml0X2NvbXBsZXRpb24oJnVyYl9kb25lKTsKKworCS8qIGZpbGwgdGhlIGNvbW1vbiBmaWVsZHMgaW4gdGhlIFVSQiAqLworCXVzLT5jdXJyZW50X3VyYi0+Y29udGV4dCA9ICZ1cmJfZG9uZTsKKwl1cy0+Y3VycmVudF91cmItPmFjdHVhbF9sZW5ndGggPSAwOworCXVzLT5jdXJyZW50X3VyYi0+ZXJyb3JfY291bnQgPSAwOworCXVzLT5jdXJyZW50X3VyYi0+c3RhdHVzID0gMDsKKworCS8qIHdlIGFzc3VtZSB0aGF0IGlmIHRyYW5zZmVyX2J1ZmZlciBpc24ndCB1cy0+aW9idWYgdGhlbiBpdAorCSAqIGhhc24ndCBiZWVuIG1hcHBlZCBmb3IgRE1BLiAgWWVzLCB0aGlzIGlzIGNsdW5reSwgYnV0IGl0J3MKKwkgKiBlYXNpZXIgdGhhbiBhbHdheXMgaGF2aW5nIHRoZSBjYWxsZXIgdGVsbCB1cyB3aGV0aGVyIHRoZQorCSAqIHRyYW5zZmVyIGJ1ZmZlciBoYXMgYWxyZWFkeSBiZWVuIG1hcHBlZC4gKi8KKwl1cy0+Y3VycmVudF91cmItPnRyYW5zZmVyX2ZsYWdzID0KKwkJCVVSQl9BU1lOQ19VTkxJTksgfCBVUkJfTk9fU0VUVVBfRE1BX01BUDsKKwlpZiAodXMtPmN1cnJlbnRfdXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gdXMtPmlvYnVmKQorCQl1cy0+Y3VycmVudF91cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCXVzLT5jdXJyZW50X3VyYi0+dHJhbnNmZXJfZG1hID0gdXMtPmlvYnVmX2RtYTsKKwl1cy0+Y3VycmVudF91cmItPnNldHVwX2RtYSA9IHVzLT5jcl9kbWE7CisKKwkvKiBzdWJtaXQgdGhlIFVSQiAqLworCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVzLT5jdXJyZW50X3VyYiwgR0ZQX05PSU8pOworCWlmIChzdGF0dXMpIHsKKwkJLyogc29tZXRoaW5nIHdlbnQgd3JvbmcgKi8KKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwkvKiBzaW5jZSB0aGUgVVJCIGhhcyBiZWVuIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHksIGl0J3Mgbm93IG9rYXkKKwkgKiB0byBjYW5jZWwgaXQgKi8KKwlzZXRfYml0KFVTX0ZMSURYX1VSQl9BQ1RJVkUsICZ1cy0+ZmxhZ3MpOworCisJLyogZGlkIGFuIGFib3J0L2Rpc2Nvbm5lY3Qgb2NjdXIgZHVyaW5nIHRoZSBzdWJtaXNzaW9uPyAqLworCWlmICh1cy0+ZmxhZ3MgJiBBQk9SVElOR19PUl9ESVNDT05ORUNUSU5HKSB7CisKKwkJLyogY2FuY2VsIHRoZSBVUkIsIGlmIGl0IGhhc24ndCBiZWVuIGNhbmNlbGxlZCBhbHJlYWR5ICovCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVVNfRkxJRFhfVVJCX0FDVElWRSwgJnVzLT5mbGFncykpIHsKKwkJCVVTX0RFQlVHUCgiLS0gY2FuY2VsbGluZyBVUkJcbiIpOworCQkJdXNiX3VubGlua191cmIodXMtPmN1cnJlbnRfdXJiKTsKKwkJfQorCX0KKyAKKwkvKiBzdWJtaXQgdGhlIHRpbWVvdXQgdGltZXIsIGlmIGEgdGltZW91dCB3YXMgcmVxdWVzdGVkICovCisJaWYgKHRpbWVvdXQgPiAwKSB7CisJCWluaXRfdGltZXIoJnRvX3RpbWVyKTsKKwkJdG9fdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyB0aW1lb3V0OworCQl0b190aW1lci5mdW5jdGlvbiA9IHRpbWVvdXRfaGFuZGxlcjsKKwkJdG9fdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSB1czsKKwkJYWRkX3RpbWVyKCZ0b190aW1lcik7CisJfQorCisJLyogd2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIFVSQiAqLworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnVyYl9kb25lKTsKKwljbGVhcl9iaXQoVVNfRkxJRFhfVVJCX0FDVElWRSwgJnVzLT5mbGFncyk7CisgCisJLyogY2xlYW4gdXAgdGhlIHRpbWVvdXQgdGltZXIgKi8KKwlpZiAodGltZW91dCA+IDApCisJCWRlbF90aW1lcl9zeW5jKCZ0b190aW1lcik7CisKKwkvKiByZXR1cm4gdGhlIFVSQiBzdGF0dXMgKi8KKwlyZXR1cm4gdXMtPmN1cnJlbnRfdXJiLT5zdGF0dXM7Cit9CisKKy8qCisgKiBUcmFuc2ZlciBvbmUgY29udHJvbCBtZXNzYWdlLCB3aXRoIHRpbWVvdXRzLCBhbmQgYWxsb3dpbmcgZWFybHkKKyAqIHRlcm1pbmF0aW9uLiAgUmV0dXJuIGNvZGVzIGFyZSB1c3VhbCAtRXh4eCwgKm5vdCogVVNCX1NUT1JfWEZFUl94eHguCisgKi8KK2ludCB1c2Jfc3Rvcl9jb250cm9sX21zZyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCBwaXBlLAorCQkgdTggcmVxdWVzdCwgdTggcmVxdWVzdHR5cGUsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCAKKwkJIHZvaWQgKmRhdGEsIHUxNiBzaXplLCBpbnQgdGltZW91dCkKK3sKKwlpbnQgc3RhdHVzOworCisJVVNfREVCVUdQKCIlczogcnE9JTAyeCBycXR5cGU9JTAyeCB2YWx1ZT0lMDR4IGluZGV4PSUwMnggbGVuPSV1XG4iLAorCQkJX19GVU5DVElPTl9fLCByZXF1ZXN0LCByZXF1ZXN0dHlwZSwKKwkJCXZhbHVlLCBpbmRleCwgc2l6ZSk7CisKKwkvKiBmaWxsIGluIHRoZSBkZXZyZXF1ZXN0IHN0cnVjdHVyZSAqLworCXVzLT5jci0+YlJlcXVlc3RUeXBlID0gcmVxdWVzdHR5cGU7CisJdXMtPmNyLT5iUmVxdWVzdCA9IHJlcXVlc3Q7CisJdXMtPmNyLT53VmFsdWUgPSBjcHVfdG9fbGUxNih2YWx1ZSk7CisJdXMtPmNyLT53SW5kZXggPSBjcHVfdG9fbGUxNihpbmRleCk7CisJdXMtPmNyLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZSk7CisKKwkvKiBmaWxsIGFuZCBzdWJtaXQgdGhlIFVSQiAqLworCXVzYl9maWxsX2NvbnRyb2xfdXJiKHVzLT5jdXJyZW50X3VyYiwgdXMtPnB1c2JfZGV2LCBwaXBlLCAKKwkJCSAodW5zaWduZWQgY2hhciopIHVzLT5jciwgZGF0YSwgc2l6ZSwgCisJCQkgdXNiX3N0b3JfYmxvY2tpbmdfY29tcGxldGlvbiwgTlVMTCk7CisJc3RhdHVzID0gdXNiX3N0b3JfbXNnX2NvbW1vbih1cywgdGltZW91dCk7CisKKwkvKiByZXR1cm4gdGhlIGFjdHVhbCBsZW5ndGggb2YgdGhlIGRhdGEgdHJhbnNmZXJyZWQgaWYgbm8gZXJyb3IgKi8KKwlpZiAoc3RhdHVzID09IDApCisJCXN0YXR1cyA9IHVzLT5jdXJyZW50X3VyYi0+YWN0dWFsX2xlbmd0aDsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBUaGlzIGlzIGEgdmVyc2lvbiBvZiB1c2JfY2xlYXJfaGFsdCgpIHRoYXQgYWxsb3dzIGVhcmx5IHRlcm1pbmF0aW9uIGFuZAorICogZG9lc24ndCByZWFkIHRoZSBzdGF0dXMgZnJvbSB0aGUgZGV2aWNlIC0tIHRoaXMgaXMgYmVjYXVzZSBzb21lIGRldmljZXMKKyAqIGNyYXNoIHRoZWlyIGludGVybmFsIGZpcm13YXJlIHdoZW4gdGhlIHN0YXR1cyBpcyByZXF1ZXN0ZWQgYWZ0ZXIgYSBoYWx0LgorICoKKyAqIEEgZGVmaW5pdGl2ZSBsaXN0IG9mIHRoZXNlICdiYWQnIGRldmljZXMgaXMgdG9vIGRpZmZpY3VsdCB0byBtYWludGFpbiBvcgorICogbWFrZSBjb21wbGV0ZSBlbm91Z2ggdG8gYmUgdXNlZnVsLiAgVGhpcyBwcm9ibGVtIHdhcyBmaXJzdCBvYnNlcnZlZCBvbiB0aGUKKyAqIEhhZ2l3YXJhIEZsYXNoR2F0ZSBEVUFMIHVuaXQuICBIb3dldmVyLCBidXMgdHJhY2VzIHJldmVhbCB0aGF0IG5laXRoZXIKKyAqIE1hY09TIG5vciBXaW5kb3dzIGNoZWNrcyB0aGUgc3RhdHVzIGFmdGVyIGNsZWFyaW5nIGEgaGFsdC4KKyAqCisgKiBTaW5jZSBtYW55IHZlbmRvcnMgaW4gdGhpcyBzcGFjZSBsaW1pdCB0aGVpciB0ZXN0aW5nIHRvIGludGVyb3BlcmFiaWxpdHkKKyAqIHdpdGggdGhlc2UgdHdvIE9TZXMsIHNwZWNpZmljYXRpb24gdmlvbGF0aW9ucyBsaWtlIHRoaXMgb25lIGFyZSBjb21tb24uCisgKi8KK2ludCB1c2Jfc3Rvcl9jbGVhcl9oYWx0KHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHBpcGUpCit7CisJaW50IHJlc3VsdDsKKwlpbnQgZW5kcCA9IHVzYl9waXBlZW5kcG9pbnQocGlwZSk7CisKKwlpZiAodXNiX3BpcGVpbiAocGlwZSkpCisJCWVuZHAgfD0gVVNCX0RJUl9JTjsKKworCXJlc3VsdCA9IHVzYl9zdG9yX2NvbnRyb2xfbXNnKHVzLCB1cy0+c2VuZF9jdHJsX3BpcGUsCisJCVVTQl9SRVFfQ0xFQVJfRkVBVFVSRSwgVVNCX1JFQ0lQX0VORFBPSU5ULAorCQlVU0JfRU5EUE9JTlRfSEFMVCwgZW5kcCwKKwkJTlVMTCwgMCwgMypIWik7CisKKwkvKiByZXNldCB0aGUgZW5kcG9pbnQgdG9nZ2xlICovCisJdXNiX3NldHRvZ2dsZSh1cy0+cHVzYl9kZXYsIHVzYl9waXBlZW5kcG9pbnQocGlwZSksCisJCXVzYl9waXBlb3V0KHBpcGUpLCAwKTsKKworCVVTX0RFQlVHUCgiJXM6IHJlc3VsdCA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKgorICogSW50ZXJwcmV0IHRoZSByZXN1bHRzIG9mIGEgVVJCIHRyYW5zZmVyCisgKgorICogVGhpcyBmdW5jdGlvbiBwcmludHMgYXBwcm9wcmlhdGUgZGVidWdnaW5nIG1lc3NhZ2VzLCBjbGVhcnMgaGFsdHMgb24KKyAqIG5vbi1jb250cm9sIGVuZHBvaW50cywgYW5kIHRyYW5zbGF0ZXMgdGhlIHN0YXR1cyB0byB0aGUgY29ycmVzcG9uZGluZworICogVVNCX1NUT1JfWEZFUl94eHggcmV0dXJuIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgaW50ZXJwcmV0X3VyYl9yZXN1bHQoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgcGlwZSwKKwkJdW5zaWduZWQgaW50IGxlbmd0aCwgaW50IHJlc3VsdCwgdW5zaWduZWQgaW50IHBhcnRpYWwpCit7CisJVVNfREVCVUdQKCJTdGF0dXMgY29kZSAlZDsgdHJhbnNmZXJyZWQgJXUvJXVcbiIsCisJCQlyZXN1bHQsIHBhcnRpYWwsIGxlbmd0aCk7CisJc3dpdGNoIChyZXN1bHQpIHsKKworCS8qIG5vIGVycm9yIGNvZGU7IGRpZCB3ZSBzZW5kIGFsbCB0aGUgZGF0YT8gKi8KKwljYXNlIDA6CisJCWlmIChwYXJ0aWFsICE9IGxlbmd0aCkgeworCQkJVVNfREVCVUdQKCItLSBzaG9ydCB0cmFuc2ZlclxuIik7CisJCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9TSE9SVDsKKwkJfQorCisJCVVTX0RFQlVHUCgiLS0gdHJhbnNmZXIgY29tcGxldGVcbiIpOworCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9HT09EOworCisJLyogc3RhbGxlZCAqLworCWNhc2UgLUVQSVBFOgorCQkvKiBmb3IgY29udHJvbCBlbmRwb2ludHMsICh1c2VkIGJ5IENCW0ldKSBhIHN0YWxsIGluZGljYXRlcworCQkgKiBhIGZhaWxlZCBjb21tYW5kICovCisJCWlmICh1c2JfcGlwZWNvbnRyb2wocGlwZSkpIHsKKwkJCVVTX0RFQlVHUCgiLS0gc3RhbGwgb24gY29udHJvbCBwaXBlXG4iKTsKKwkJCXJldHVybiBVU0JfU1RPUl9YRkVSX1NUQUxMRUQ7CisJCX0KKworCQkvKiBmb3Igb3RoZXIgc29ydHMgb2YgZW5kcG9pbnQsIGNsZWFyIHRoZSBzdGFsbCAqLworCQlVU19ERUJVR1AoImNsZWFyaW5nIGVuZHBvaW50IGhhbHQgZm9yIHBpcGUgMHgleFxuIiwgcGlwZSk7CisJCWlmICh1c2Jfc3Rvcl9jbGVhcl9oYWx0KHVzLCBwaXBlKSA8IDApCisJCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9FUlJPUjsKKwkJcmV0dXJuIFVTQl9TVE9SX1hGRVJfU1RBTExFRDsKKworCS8qIHRpbWVvdXQgb3IgZXhjZXNzaXZlbHkgbG9uZyBOQUsgKi8KKwljYXNlIC1FVElNRURPVVQ6CisJCVVTX0RFQlVHUCgiLS0gdGltZW91dCBvciBOQUtcbiIpOworCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9FUlJPUjsKKworCS8qIGJhYmJsZSAtIHRoZSBkZXZpY2UgdHJpZWQgdG8gc2VuZCBtb3JlIHRoYW4gd2Ugd2FudGVkIHRvIHJlYWQgKi8KKwljYXNlIC1FT1ZFUkZMT1c6CisJCVVTX0RFQlVHUCgiLS0gYmFiYmxlXG4iKTsKKwkJcmV0dXJuIFVTQl9TVE9SX1hGRVJfTE9ORzsKKworCS8qIHRoZSB0cmFuc2ZlciB3YXMgY2FuY2VsbGVkIGJ5IGFib3J0LCBkaXNjb25uZWN0LCBvciB0aW1lb3V0ICovCisJY2FzZSAtRUNPTk5SRVNFVDoKKwkJVVNfREVCVUdQKCItLSB0cmFuc2ZlciBjYW5jZWxsZWRcbiIpOworCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9FUlJPUjsKKworCS8qIHNob3J0IHNjYXR0ZXItZ2F0aGVyIHJlYWQgdHJhbnNmZXIgKi8KKwljYXNlIC1FUkVNT1RFSU86CisJCVVTX0RFQlVHUCgiLS0gc2hvcnQgcmVhZCB0cmFuc2ZlclxuIik7CisJCXJldHVybiBVU0JfU1RPUl9YRkVSX1NIT1JUOworCisJLyogYWJvcnQgb3IgZGlzY29ubmVjdCBpbiBwcm9ncmVzcyAqLworCWNhc2UgLUVJTzoKKwkJVVNfREVCVUdQKCItLSBhYm9ydCBvciBkaXNjb25uZWN0IGluIHByb2dyZXNzXG4iKTsKKwkJcmV0dXJuIFVTQl9TVE9SX1hGRVJfRVJST1I7CisKKwkvKiB0aGUgY2F0Y2gtYWxsIGVycm9yIGNhc2UgKi8KKwlkZWZhdWx0OgorCQlVU19ERUJVR1AoIi0tIHVua25vd24gZXJyb3JcbiIpOworCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9FUlJPUjsKKwl9Cit9CisKKy8qCisgKiBUcmFuc2ZlciBvbmUgY29udHJvbCBtZXNzYWdlLCB3aXRob3V0IHRpbWVvdXRzLCBidXQgYWxsb3dpbmcgZWFybHkKKyAqIHRlcm1pbmF0aW9uLiAgUmV0dXJuIGNvZGVzIGFyZSBVU0JfU1RPUl9YRkVSX3h4eC4KKyAqLworaW50IHVzYl9zdG9yX2N0cmxfdHJhbnNmZXIoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgcGlwZSwKKwkJdTggcmVxdWVzdCwgdTggcmVxdWVzdHR5cGUsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAorCQl2b2lkICpkYXRhLCB1MTYgc2l6ZSkKK3sKKwlpbnQgcmVzdWx0OworCisJVVNfREVCVUdQKCIlczogcnE9JTAyeCBycXR5cGU9JTAyeCB2YWx1ZT0lMDR4IGluZGV4PSUwMnggbGVuPSV1XG4iLAorCQkJX19GVU5DVElPTl9fLCByZXF1ZXN0LCByZXF1ZXN0dHlwZSwKKwkJCXZhbHVlLCBpbmRleCwgc2l6ZSk7CisKKwkvKiBmaWxsIGluIHRoZSBkZXZyZXF1ZXN0IHN0cnVjdHVyZSAqLworCXVzLT5jci0+YlJlcXVlc3RUeXBlID0gcmVxdWVzdHR5cGU7CisJdXMtPmNyLT5iUmVxdWVzdCA9IHJlcXVlc3Q7CisJdXMtPmNyLT53VmFsdWUgPSBjcHVfdG9fbGUxNih2YWx1ZSk7CisJdXMtPmNyLT53SW5kZXggPSBjcHVfdG9fbGUxNihpbmRleCk7CisJdXMtPmNyLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZSk7CisKKwkvKiBmaWxsIGFuZCBzdWJtaXQgdGhlIFVSQiAqLworCXVzYl9maWxsX2NvbnRyb2xfdXJiKHVzLT5jdXJyZW50X3VyYiwgdXMtPnB1c2JfZGV2LCBwaXBlLCAKKwkJCSAodW5zaWduZWQgY2hhciopIHVzLT5jciwgZGF0YSwgc2l6ZSwgCisJCQkgdXNiX3N0b3JfYmxvY2tpbmdfY29tcGxldGlvbiwgTlVMTCk7CisJcmVzdWx0ID0gdXNiX3N0b3JfbXNnX2NvbW1vbih1cywgMCk7CisKKwlyZXR1cm4gaW50ZXJwcmV0X3VyYl9yZXN1bHQodXMsIHBpcGUsIHNpemUsIHJlc3VsdCwKKwkJCXVzLT5jdXJyZW50X3VyYi0+YWN0dWFsX2xlbmd0aCk7Cit9CisKKy8qCisgKiBSZWNlaXZlIG9uZSBpbnRlcnJ1cHQgYnVmZmVyLCB3aXRob3V0IHRpbWVvdXRzLCBidXQgYWxsb3dpbmcgZWFybHkKKyAqIHRlcm1pbmF0aW9uLiAgUmV0dXJuIGNvZGVzIGFyZSBVU0JfU1RPUl9YRkVSX3h4eC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgYWx3YXlzIHVzZXMgdXMtPnJlY3ZfaW50cl9waXBlIGFzIHRoZSBwaXBlIGFuZAorICogdXMtPmVwX2JJbnRlcnZhbCBhcyB0aGUgaW50ZXJydXB0IGludGVydmFsLgorICovCitzdGF0aWMgaW50IHVzYl9zdG9yX2ludHJfdHJhbnNmZXIoc3RydWN0IHVzX2RhdGEgKnVzLCB2b2lkICpidWYsCisJCQkJICB1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworCWludCByZXN1bHQ7CisJdW5zaWduZWQgaW50IHBpcGUgPSB1cy0+cmVjdl9pbnRyX3BpcGU7CisJdW5zaWduZWQgaW50IG1heHA7CisKKwlVU19ERUJVR1AoIiVzOiB4ZmVyICV1IGJ5dGVzXG4iLCBfX0ZVTkNUSU9OX18sIGxlbmd0aCk7CisKKwkvKiBjYWxjdWxhdGUgdGhlIG1heCBwYWNrZXQgc2l6ZSAqLworCW1heHAgPSB1c2JfbWF4cGFja2V0KHVzLT5wdXNiX2RldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOworCWlmIChtYXhwID4gbGVuZ3RoKQorCQltYXhwID0gbGVuZ3RoOworCisJLyogZmlsbCBhbmQgc3VibWl0IHRoZSBVUkIgKi8KKwl1c2JfZmlsbF9pbnRfdXJiKHVzLT5jdXJyZW50X3VyYiwgdXMtPnB1c2JfZGV2LCBwaXBlLCBidWYsCisJCQltYXhwLCB1c2Jfc3Rvcl9ibG9ja2luZ19jb21wbGV0aW9uLCBOVUxMLAorCQkJdXMtPmVwX2JJbnRlcnZhbCk7CisJcmVzdWx0ID0gdXNiX3N0b3JfbXNnX2NvbW1vbih1cywgMCk7CisKKwlyZXR1cm4gaW50ZXJwcmV0X3VyYl9yZXN1bHQodXMsIHBpcGUsIGxlbmd0aCwgcmVzdWx0LAorCQkJdXMtPmN1cnJlbnRfdXJiLT5hY3R1YWxfbGVuZ3RoKTsKK30KKworLyoKKyAqIFRyYW5zZmVyIG9uZSBidWZmZXIgdmlhIGJ1bGsgcGlwZSwgd2l0aG91dCB0aW1lb3V0cywgYnV0IGFsbG93aW5nIGVhcmx5CisgKiB0ZXJtaW5hdGlvbi4gIFJldHVybiBjb2RlcyBhcmUgVVNCX1NUT1JfWEZFUl94eHguICBJZiB0aGUgYnVsayBwaXBlCisgKiBzdGFsbHMgZHVyaW5nIHRoZSB0cmFuc2ZlciwgdGhlIGhhbHQgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkLgorICovCitpbnQgdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgcGlwZSwKKwl2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW5ndGgsIHVuc2lnbmVkIGludCAqYWN0X2xlbikKK3sKKwlpbnQgcmVzdWx0OworCisJVVNfREVCVUdQKCIlczogeGZlciAldSBieXRlc1xuIiwgX19GVU5DVElPTl9fLCBsZW5ndGgpOworCisJLyogZmlsbCBhbmQgc3VibWl0IHRoZSBVUkIgKi8KKwl1c2JfZmlsbF9idWxrX3VyYih1cy0+Y3VycmVudF91cmIsIHVzLT5wdXNiX2RldiwgcGlwZSwgYnVmLCBsZW5ndGgsCisJCSAgICAgIHVzYl9zdG9yX2Jsb2NraW5nX2NvbXBsZXRpb24sIE5VTEwpOworCXJlc3VsdCA9IHVzYl9zdG9yX21zZ19jb21tb24odXMsIDApOworCisJLyogc3RvcmUgdGhlIGFjdHVhbCBsZW5ndGggb2YgdGhlIGRhdGEgdHJhbnNmZXJyZWQgKi8KKwlpZiAoYWN0X2xlbikKKwkJKmFjdF9sZW4gPSB1cy0+Y3VycmVudF91cmItPmFjdHVhbF9sZW5ndGg7CisJcmV0dXJuIGludGVycHJldF91cmJfcmVzdWx0KHVzLCBwaXBlLCBsZW5ndGgsIHJlc3VsdCwgCisJCQl1cy0+Y3VycmVudF91cmItPmFjdHVhbF9sZW5ndGgpOworfQorCisvKgorICogVHJhbnNmZXIgYSBzY2F0dGVyLWdhdGhlciBsaXN0IHZpYSBidWxrIHRyYW5zZmVyCisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIGJhc2ljYWxseSB0aGUgc2FtZSB0aGluZyBhcyB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1ZigpCisgKiBhYm92ZSwgYnV0IGl0IHVzZXMgdGhlIHVzYmNvcmUgc2NhdHRlci1nYXRoZXIgbGlicmFyeS4KKyAqLworc3RhdGljIGludCB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX3NnbGlzdChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCBwaXBlLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbnVtX3NnLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLAorCQl1bnNpZ25lZCBpbnQgKmFjdF9sZW4pCit7CisJaW50IHJlc3VsdDsKKworCS8qIGRvbid0IHN1Ym1pdCBzLWcgcmVxdWVzdHMgZHVyaW5nIGFib3J0L2Rpc2Nvbm5lY3QgcHJvY2Vzc2luZyAqLworCWlmICh1cy0+ZmxhZ3MgJiBBQk9SVElOR19PUl9ESVNDT05ORUNUSU5HKQorCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9FUlJPUjsKKworCS8qIGluaXRpYWxpemUgdGhlIHNjYXR0ZXItZ2F0aGVyIHJlcXVlc3QgYmxvY2sgKi8KKwlVU19ERUJVR1AoIiVzOiB4ZmVyICV1IGJ5dGVzLCAlZCBlbnRyaWVzXG4iLCBfX0ZVTkNUSU9OX18sCisJCQlsZW5ndGgsIG51bV9zZyk7CisJcmVzdWx0ID0gdXNiX3NnX2luaXQoJnVzLT5jdXJyZW50X3NnLCB1cy0+cHVzYl9kZXYsIHBpcGUsIDAsCisJCQlzZywgbnVtX3NnLCBsZW5ndGgsIFNMQUJfTk9JTyk7CisJaWYgKHJlc3VsdCkgeworCQlVU19ERUJVR1AoInVzYl9zZ19pbml0IHJldHVybmVkICVkXG4iLCByZXN1bHQpOworCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9FUlJPUjsKKwl9CisKKwkvKiBzaW5jZSB0aGUgYmxvY2sgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LCBpdCdzIG5vdworCSAqIG9rYXkgdG8gY2FuY2VsIGl0ICovCisJc2V0X2JpdChVU19GTElEWF9TR19BQ1RJVkUsICZ1cy0+ZmxhZ3MpOworCisJLyogZGlkIGFuIGFib3J0L2Rpc2Nvbm5lY3Qgb2NjdXIgZHVyaW5nIHRoZSBzdWJtaXNzaW9uPyAqLworCWlmICh1cy0+ZmxhZ3MgJiBBQk9SVElOR19PUl9ESVNDT05ORUNUSU5HKSB7CisKKwkJLyogY2FuY2VsIHRoZSByZXF1ZXN0LCBpZiBpdCBoYXNuJ3QgYmVlbiBjYW5jZWxsZWQgYWxyZWFkeSAqLworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFVTX0ZMSURYX1NHX0FDVElWRSwgJnVzLT5mbGFncykpIHsKKwkJCVVTX0RFQlVHUCgiLS0gY2FuY2VsbGluZyBzZyByZXF1ZXN0XG4iKTsKKwkJCXVzYl9zZ19jYW5jZWwoJnVzLT5jdXJyZW50X3NnKTsKKwkJfQorCX0KKworCS8qIHdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZSB0cmFuc2ZlciAqLworCXVzYl9zZ193YWl0KCZ1cy0+Y3VycmVudF9zZyk7CisJY2xlYXJfYml0KFVTX0ZMSURYX1NHX0FDVElWRSwgJnVzLT5mbGFncyk7CisKKwlyZXN1bHQgPSB1cy0+Y3VycmVudF9zZy5zdGF0dXM7CisJaWYgKGFjdF9sZW4pCisJCSphY3RfbGVuID0gdXMtPmN1cnJlbnRfc2cuYnl0ZXM7CisJcmV0dXJuIGludGVycHJldF91cmJfcmVzdWx0KHVzLCBwaXBlLCBsZW5ndGgsIHJlc3VsdCwKKwkJCXVzLT5jdXJyZW50X3NnLmJ5dGVzKTsKK30KKworLyoKKyAqIFRyYW5zZmVyIGFuIGVudGlyZSBTQ1NJIGNvbW1hbmQncyB3b3J0aCBvZiBkYXRhIHBheWxvYWQgb3ZlciB0aGUgYnVsaworICogcGlwZS4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyB1c2VzIHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKCkgYW5kCisgKiB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX3NnbGlzdCgpIHRvIGFjaGlldmUgaXRzIGdvYWxzIC0tCisgKiB0aGlzIGZ1bmN0aW9uIHNpbXBseSBkZXRlcm1pbmVzIHdoZXRoZXIgd2UncmUgZ29pbmcgdG8gdXNlCisgKiBzY2F0dGVyLWdhdGhlciBvciBub3QsIGFuZCBhY3RzIGFwcHJvcHJpYXRlbHkuCisgKi8KK2ludCB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX3NnKHN0cnVjdCB1c19kYXRhKiB1cywgdW5zaWduZWQgaW50IHBpcGUsCisJCXZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbmd0aF9sZWZ0LCBpbnQgdXNlX3NnLCBpbnQgKnJlc2lkdWFsKQoreworCWludCByZXN1bHQ7CisJdW5zaWduZWQgaW50IHBhcnRpYWw7CisKKwkvKiBhcmUgd2Ugc2NhdHRlci1nYXRoZXJpbmc/ICovCisJaWYgKHVzZV9zZykgeworCQkvKiB1c2UgdGhlIHVzYiBjb3JlIHNjYXR0ZXItZ2F0aGVyIHByaW1pdGl2ZXMgKi8KKwkJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9zZ2xpc3QodXMsIHBpcGUsCisJCQkJKHN0cnVjdCBzY2F0dGVybGlzdCAqKSBidWYsIHVzZV9zZywKKwkJCQlsZW5ndGhfbGVmdCwgJnBhcnRpYWwpOworCQlsZW5ndGhfbGVmdCAtPSBwYXJ0aWFsOworCX0gZWxzZSB7CisJCS8qIG5vIHNjYXR0ZXItZ2F0aGVyLCBqdXN0IG1ha2UgdGhlIHJlcXVlc3QgKi8KKwkJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHBpcGUsIGJ1ZiwgCisJCQkJbGVuZ3RoX2xlZnQsICZwYXJ0aWFsKTsKKwkJbGVuZ3RoX2xlZnQgLT0gcGFydGlhbDsKKwl9CisKKwkvKiBzdG9yZSB0aGUgcmVzaWR1YWwgYW5kIHJldHVybiB0aGUgZXJyb3IgY29kZSAqLworCWlmIChyZXNpZHVhbCkKKwkJKnJlc2lkdWFsID0gbGVuZ3RoX2xlZnQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUcmFuc3BvcnQgcm91dGluZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogSW52b2tlIHRoZSB0cmFuc3BvcnQgYW5kIGJhc2ljIGVycm9yLWhhbmRsaW5nL3JlY292ZXJ5IG1ldGhvZHMKKyAqCisgKiBUaGlzIGlzIHVzZWQgYnkgdGhlIHByb3RvY29sIGxheWVycyB0byBhY3R1YWxseSBzZW5kIHRoZSBtZXNzYWdlIHRvCisgKiB0aGUgZGV2aWNlIGFuZCByZWNlaXZlIHRoZSByZXNwb25zZS4KKyAqLwordm9pZCB1c2Jfc3Rvcl9pbnZva2VfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQoreworCWludCBuZWVkX2F1dG9fc2Vuc2U7CisJaW50IHJlc3VsdDsKKworCS8qIHNlbmQgdGhlIGNvbW1hbmQgdG8gdGhlIHRyYW5zcG9ydCBsYXllciAqLworCXNyYi0+cmVzaWQgPSAwOworCXJlc3VsdCA9IHVzLT50cmFuc3BvcnQoc3JiLCB1cyk7CisKKwkvKiBpZiB0aGUgY29tbWFuZCBnZXRzIGFib3J0ZWQgYnkgdGhlIGhpZ2hlciBsYXllcnMsIHdlIG5lZWQgdG8KKwkgKiBzaG9ydC1jaXJjdWl0IGFsbCBvdGhlciBwcm9jZXNzaW5nCisJICovCisJaWYgKHRlc3RfYml0KFVTX0ZMSURYX1RJTUVEX09VVCwgJnVzLT5mbGFncykpIHsKKwkJVVNfREVCVUdQKCItLSBjb21tYW5kIHdhcyBhYm9ydGVkXG4iKTsKKwkJZ290byBIYW5kbGVfQWJvcnQ7CisJfQorCisJLyogaWYgdGhlcmUgaXMgYSB0cmFuc3BvcnQgZXJyb3IsIHJlc2V0IGFuZCBkb24ndCBhdXRvLXNlbnNlICovCisJaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1IpIHsKKwkJVVNfREVCVUdQKCItLSB0cmFuc3BvcnQgaW5kaWNhdGVzIGVycm9yLCByZXNldHRpbmdcbiIpOworCQl1cy0+dHJhbnNwb3J0X3Jlc2V0KHVzKTsKKwkJc3JiLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CisJCXJldHVybjsKKwl9CisKKwkvKiBpZiB0aGUgdHJhbnNwb3J0IHByb3ZpZGVkIGl0cyBvd24gc2Vuc2UgZGF0YSwgZG9uJ3QgYXV0by1zZW5zZSAqLworCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX05PX1NFTlNFKSB7CisJCXNyYi0+cmVzdWx0ID0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOworCQlyZXR1cm47CisJfQorCisJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9HT09EOworCisJLyogRGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gYXV0by1zZW5zZQorCSAqCisJICogSSBub3JtYWxseSBkb24ndCB1c2UgYSBmbGFnIGxpa2UgdGhpcywgYnV0IGl0J3MgYWxtb3N0IGltcG9zc2libGUKKwkgKiB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiBoZXJlIGlmIEkgZG9uJ3QuCisJICovCisJbmVlZF9hdXRvX3NlbnNlID0gMDsKKworCS8qCisJICogSWYgd2UncmUgcnVubmluZyB0aGUgQ0IgdHJhbnNwb3J0LCB3aGljaCBpcyBpbmNhcGFibGUKKwkgKiBvZiBkZXRlcm1pbmluZyBzdGF0dXMgb24gaXRzIG93biwgd2Ugd2lsbCBhdXRvLXNlbnNlCisJICogdW5sZXNzIHRoZSBvcGVyYXRpb24gaW52b2x2ZWQgYSBkYXRhLWluIHRyYW5zZmVyLiAgRGV2aWNlcworCSAqIGNhbiBzaWduYWwgbW9zdCBkYXRhLWluIGVycm9ycyBieSBzdGFsbGluZyB0aGUgYnVsay1pbiBwaXBlLgorCSAqLworCWlmICgodXMtPnByb3RvY29sID09IFVTX1BSX0NCIHx8IHVzLT5wcm90b2NvbCA9PSBVU19QUl9EUENNX1VTQikgJiYKKwkJCXNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gIT0gRE1BX0ZST01fREVWSUNFKSB7CisJCVVTX0RFQlVHUCgiLS0gQ0IgdHJhbnNwb3J0IGRldmljZSByZXF1aXJpbmcgYXV0by1zZW5zZVxuIik7CisJCW5lZWRfYXV0b19zZW5zZSA9IDE7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBoYXZlIGEgZmFpbHVyZSwgd2UncmUgZ29pbmcgdG8gZG8gYSBSRVFVRVNUX1NFTlNFIAorCSAqIGF1dG9tYXRpY2FsbHkuICBOb3RlIHRoYXQgd2UgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGEgY29tbWFuZAorCSAqICJmYWlsdXJlIiBhbmQgYW4gImVycm9yIiBpbiB0aGUgdHJhbnNwb3J0IG1lY2hhbmlzbS4KKwkgKi8KKwlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQpIHsKKwkJVVNfREVCVUdQKCItLSB0cmFuc3BvcnQgaW5kaWNhdGVzIGNvbW1hbmQgZmFpbHVyZVxuIik7CisJCW5lZWRfYXV0b19zZW5zZSA9IDE7CisJfQorCisJLyoKKwkgKiBBIHNob3J0IHRyYW5zZmVyIG9uIGEgY29tbWFuZCB3aGVyZSB3ZSBkb24ndCBleHBlY3QgaXQKKwkgKiBpcyB1bnVzdWFsLCBidXQgaXQgZG9lc24ndCBtZWFuIHdlIG5lZWQgdG8gYXV0by1zZW5zZS4KKwkgKi8KKwlpZiAoKHNyYi0+cmVzaWQgPiAwKSAmJgorCSAgICAhKChzcmItPmNtbmRbMF0gPT0gUkVRVUVTVF9TRU5TRSkgfHwKKwkgICAgICAoc3JiLT5jbW5kWzBdID09IElOUVVJUlkpIHx8CisJICAgICAgKHNyYi0+Y21uZFswXSA9PSBNT0RFX1NFTlNFKSB8fAorCSAgICAgIChzcmItPmNtbmRbMF0gPT0gTE9HX1NFTlNFKSB8fAorCSAgICAgIChzcmItPmNtbmRbMF0gPT0gTU9ERV9TRU5TRV8xMCkpKSB7CisJCVVTX0RFQlVHUCgiLS0gdW5leHBlY3RlZGx5IHNob3J0IHRyYW5zZmVyXG4iKTsKKwl9CisKKwkvKiBOb3csIGlmIHdlIG5lZWQgdG8gZG8gdGhlIGF1dG8tc2Vuc2UsIGxldCdzIGRvIGl0ICovCisJaWYgKG5lZWRfYXV0b19zZW5zZSkgeworCQlpbnQgdGVtcF9yZXN1bHQ7CisJCXZvaWQqIG9sZF9yZXF1ZXN0X2J1ZmZlcjsKKwkJdW5zaWduZWQgc2hvcnQgb2xkX3NnOworCQl1bnNpZ25lZCBvbGRfcmVxdWVzdF9idWZmbGVuOworCQl1bnNpZ25lZCBjaGFyIG9sZF9zY19kYXRhX2RpcmVjdGlvbjsKKwkJdW5zaWduZWQgY2hhciBvbGRfY21kX2xlbjsKKwkJdW5zaWduZWQgY2hhciBvbGRfY21uZFtNQVhfQ09NTUFORF9TSVpFXTsKKwkJdW5zaWduZWQgbG9uZyBvbGRfc2VyaWFsX251bWJlcjsKKwkJaW50IG9sZF9yZXNpZDsKKworCQlVU19ERUJVR1AoIklzc3VpbmcgYXV0by1SRVFVRVNUX1NFTlNFXG4iKTsKKworCQkvKiBzYXZlIHRoZSBvbGQgY29tbWFuZCAqLworCQltZW1jcHkob2xkX2NtbmQsIHNyYi0+Y21uZCwgTUFYX0NPTU1BTkRfU0laRSk7CisJCW9sZF9jbWRfbGVuID0gc3JiLT5jbWRfbGVuOworCisJCS8qIHNldCB0aGUgY29tbWFuZCBhbmQgdGhlIExVTiAqLworCQltZW1zZXQoc3JiLT5jbW5kLCAwLCBNQVhfQ09NTUFORF9TSVpFKTsKKwkJc3JiLT5jbW5kWzBdID0gUkVRVUVTVF9TRU5TRTsKKwkJc3JiLT5jbW5kWzFdID0gb2xkX2NtbmRbMV0gJiAweEUwOworCQlzcmItPmNtbmRbNF0gPSAxODsKKworCQkvKiBGSVhNRTogd2UgbXVzdCBkbyB0aGUgcHJvdG9jb2wgdHJhbnNsYXRpb24gaGVyZSAqLworCQlpZiAodXMtPnN1YmNsYXNzID09IFVTX1NDX1JCQyB8fCB1cy0+c3ViY2xhc3MgPT0gVVNfU0NfU0NTSSkKKwkJCXNyYi0+Y21kX2xlbiA9IDY7CisJCWVsc2UKKwkJCXNyYi0+Y21kX2xlbiA9IDEyOworCisJCS8qIHNldCB0aGUgdHJhbnNmZXIgZGlyZWN0aW9uICovCisJCW9sZF9zY19kYXRhX2RpcmVjdGlvbiA9IHNyYi0+c2NfZGF0YV9kaXJlY3Rpb247CisJCXNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPSBETUFfRlJPTV9ERVZJQ0U7CisKKwkJLyogdXNlIHRoZSBuZXcgYnVmZmVyIHdlIGhhdmUgKi8KKwkJb2xkX3JlcXVlc3RfYnVmZmVyID0gc3JiLT5yZXF1ZXN0X2J1ZmZlcjsKKwkJc3JiLT5yZXF1ZXN0X2J1ZmZlciA9IHNyYi0+c2Vuc2VfYnVmZmVyOworCisJCS8qIHNldCB0aGUgYnVmZmVyIGxlbmd0aCBmb3IgdHJhbnNmZXIgKi8KKwkJb2xkX3JlcXVlc3RfYnVmZmxlbiA9IHNyYi0+cmVxdWVzdF9idWZmbGVuOworCQlzcmItPnJlcXVlc3RfYnVmZmxlbiA9IDE4OworCisJCS8qIHNldCB1cCBmb3Igbm8gc2NhdHRlci1nYXRoZXIgdXNlICovCisJCW9sZF9zZyA9IHNyYi0+dXNlX3NnOworCQlzcmItPnVzZV9zZyA9IDA7CisKKwkJLyogY2hhbmdlIHRoZSBzZXJpYWwgbnVtYmVyIC0tIHRvZ2dsZSB0aGUgaGlnaCBiaXQqLworCQlvbGRfc2VyaWFsX251bWJlciA9IHNyYi0+c2VyaWFsX251bWJlcjsKKwkJc3JiLT5zZXJpYWxfbnVtYmVyIF49IDB4ODAwMDAwMDA7CisKKwkJLyogaXNzdWUgdGhlIGF1dG8tc2Vuc2UgY29tbWFuZCAqLworCQlvbGRfcmVzaWQgPSBzcmItPnJlc2lkOworCQlzcmItPnJlc2lkID0gMDsKKwkJdGVtcF9yZXN1bHQgPSB1cy0+dHJhbnNwb3J0KHVzLT5zcmIsIHVzKTsKKworCQkvKiBsZXQncyBjbGVhbiB1cCByaWdodCBhd2F5ICovCisJCXNyYi0+cmVzaWQgPSBvbGRfcmVzaWQ7CisJCXNyYi0+cmVxdWVzdF9idWZmZXIgPSBvbGRfcmVxdWVzdF9idWZmZXI7CisJCXNyYi0+cmVxdWVzdF9idWZmbGVuID0gb2xkX3JlcXVlc3RfYnVmZmxlbjsKKwkJc3JiLT51c2Vfc2cgPSBvbGRfc2c7CisJCXNyYi0+c2VyaWFsX251bWJlciA9IG9sZF9zZXJpYWxfbnVtYmVyOworCQlzcmItPnNjX2RhdGFfZGlyZWN0aW9uID0gb2xkX3NjX2RhdGFfZGlyZWN0aW9uOworCQlzcmItPmNtZF9sZW4gPSBvbGRfY21kX2xlbjsKKwkJbWVtY3B5KHNyYi0+Y21uZCwgb2xkX2NtbmQsIE1BWF9DT01NQU5EX1NJWkUpOworCisJCWlmICh0ZXN0X2JpdChVU19GTElEWF9USU1FRF9PVVQsICZ1cy0+ZmxhZ3MpKSB7CisJCQlVU19ERUJVR1AoIi0tIGF1dG8tc2Vuc2UgYWJvcnRlZFxuIik7CisJCQlnb3RvIEhhbmRsZV9BYm9ydDsKKwkJfQorCQlpZiAodGVtcF9yZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJCVVTX0RFQlVHUCgiLS0gYXV0by1zZW5zZSBmYWlsdXJlXG4iKTsKKworCQkJLyogd2Ugc2tpcCB0aGUgcmVzZXQgaWYgdGhpcyBoYXBwZW5zIHRvIGJlIGEKKwkJCSAqIG11bHRpLXRhcmdldCBkZXZpY2UsIHNpbmNlIGZhaWx1cmUgb2YgYW4KKwkJCSAqIGF1dG8tc2Vuc2UgaXMgcGVyZmVjdGx5IHZhbGlkCisJCQkgKi8KKwkJCWlmICghKHVzLT5mbGFncyAmIFVTX0ZMX1NDTV9NVUxUX1RBUkcpKQorCQkJCXVzLT50cmFuc3BvcnRfcmVzZXQodXMpOworCQkJc3JiLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CisJCQlyZXR1cm47CisJCX0KKworCQlVU19ERUJVR1AoIi0tIFJlc3VsdCBmcm9tIGF1dG8tc2Vuc2UgaXMgJWRcbiIsIHRlbXBfcmVzdWx0KTsKKwkJVVNfREVCVUdQKCItLSBjb2RlOiAweCV4LCBrZXk6IDB4JXgsIEFTQzogMHgleCwgQVNDUTogMHgleFxuIiwKKwkJCSAgc3JiLT5zZW5zZV9idWZmZXJbMF0sCisJCQkgIHNyYi0+c2Vuc2VfYnVmZmVyWzJdICYgMHhmLAorCQkJICBzcmItPnNlbnNlX2J1ZmZlclsxMl0sIAorCQkJICBzcmItPnNlbnNlX2J1ZmZlclsxM10pOworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRworCQl1c2Jfc3Rvcl9zaG93X3NlbnNlKAorCQkJICBzcmItPnNlbnNlX2J1ZmZlclsyXSAmIDB4ZiwKKwkJCSAgc3JiLT5zZW5zZV9idWZmZXJbMTJdLCAKKwkJCSAgc3JiLT5zZW5zZV9idWZmZXJbMTNdKTsKKyNlbmRpZgorCisJCS8qIHNldCB0aGUgcmVzdWx0IHNvIHRoZSBoaWdoZXIgbGF5ZXJzIGV4cGVjdCB0aGlzIGRhdGEgKi8KKwkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CisKKwkJLyogSWYgdGhpbmdzIGFyZSByZWFsbHkgb2theSwgdGhlbiBsZXQncyBzaG93IHRoYXQuICBaZXJvCisJCSAqIG91dCB0aGUgc2Vuc2UgYnVmZmVyIHNvIHRoZSBoaWdoZXIgbGF5ZXJzIHdvbid0IHJlYWxpemUKKwkJICogd2UgZGlkIGFuIHVuc29saWNpdGVkIGF1dG8tc2Vuc2UuICovCisJCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QgJiYKKwkJCS8qIEZpbGVtYXJrIDAsIGlnbm9yZSBFT00sIElMSSAwLCBubyBzZW5zZSAqLworCQkJCShzcmItPnNlbnNlX2J1ZmZlclsyXSAmIDB4YWYpID09IDAgJiYKKwkJCS8qIE5vIEFTQyBvciBBU0NRICovCisJCQkJc3JiLT5zZW5zZV9idWZmZXJbMTJdID09IDAgJiYKKwkJCQlzcmItPnNlbnNlX2J1ZmZlclsxM10gPT0gMCkgeworCQkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9HT09EOworCQkJc3JiLT5zZW5zZV9idWZmZXJbMF0gPSAweDA7CisJCX0KKwl9CisKKwkvKiBEaWQgd2UgdHJhbnNmZXIgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIGFtb3VudCByZXF1aXJlZD8gKi8KKwlpZiAoc3JiLT5yZXN1bHQgPT0gU0FNX1NUQVRfR09PRCAmJgorCQkJc3JiLT5yZXF1ZXN0X2J1ZmZsZW4gLSBzcmItPnJlc2lkIDwgc3JiLT51bmRlcmZsb3cpCisJCXNyYi0+cmVzdWx0ID0gKERJRF9FUlJPUiA8PCAxNikgfCAoU1VHR0VTVF9SRVRSWSA8PCAyNCk7CisKKwlyZXR1cm47CisKKwkvKiBhYm9ydCBwcm9jZXNzaW5nOiB0aGUgYnVsay1vbmx5IHRyYW5zcG9ydCByZXF1aXJlcyBhIHJlc2V0CisJICogZm9sbG93aW5nIGFuIGFib3J0ICovCisgIEhhbmRsZV9BYm9ydDoKKwlzcmItPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKKwlpZiAodXMtPnByb3RvY29sID09IFVTX1BSX0JVTEspCisJCXVzLT50cmFuc3BvcnRfcmVzZXQodXMpOworfQorCisvKiBTdG9wIHRoZSBjdXJyZW50IFVSQiB0cmFuc2ZlciAqLwordm9pZCB1c2Jfc3Rvcl9zdG9wX3RyYW5zcG9ydChzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJVVNfREVCVUdQKCIlcyBjYWxsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBJZiB0aGUgc3RhdGUgbWFjaGluZSBpcyBibG9ja2VkIHdhaXRpbmcgZm9yIGFuIFVSQiwKKwkgKiBsZXQncyB3YWtlIGl0IHVwLiAgVGhlIHRlc3RfYW5kX2NsZWFyX2JpdCgpIGNhbGwKKwkgKiBndWFyYW50ZWVzIHRoYXQgaWYgYSBVUkIgaGFzIGp1c3QgYmVlbiBzdWJtaXR0ZWQsCisJICogaXQgd29uJ3QgYmUgY2FuY2VsbGVkIG1vcmUgdGhhbiBvbmNlLiAqLworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVVNfRkxJRFhfVVJCX0FDVElWRSwgJnVzLT5mbGFncykpIHsKKwkJVVNfREVCVUdQKCItLSBjYW5jZWxsaW5nIFVSQlxuIik7CisJCXVzYl91bmxpbmtfdXJiKHVzLT5jdXJyZW50X3VyYik7CisJfQorCisJLyogSWYgd2UgYXJlIHdhaXRpbmcgZm9yIGEgc2NhdHRlci1nYXRoZXIgb3BlcmF0aW9uLCBjYW5jZWwgaXQuICovCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChVU19GTElEWF9TR19BQ1RJVkUsICZ1cy0+ZmxhZ3MpKSB7CisJCVVTX0RFQlVHUCgiLS0gY2FuY2VsbGluZyBzZyByZXF1ZXN0XG4iKTsKKwkJdXNiX3NnX2NhbmNlbCgmdXMtPmN1cnJlbnRfc2cpOworCX0KK30KKworLyoKKyAqIENvbnRyb2wvQnVsay9JbnRlcnJ1cHQgdHJhbnNwb3J0CisgKi8KKworaW50IHVzYl9zdG9yX0NCSV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJdW5zaWduZWQgaW50IHRyYW5zZmVyX2xlbmd0aCA9IHNyYi0+cmVxdWVzdF9idWZmbGVuOworCXVuc2lnbmVkIGludCBwaXBlID0gMDsKKwlpbnQgcmVzdWx0OworCisJLyogQ09NTUFORCBTVEFHRSAqLworCS8qIGxldCdzIHNlbmQgdGhlIGNvbW1hbmQgdmlhIHRoZSBjb250cm9sIHBpcGUgKi8KKwlyZXN1bHQgPSB1c2Jfc3Rvcl9jdHJsX3RyYW5zZmVyKHVzLCB1cy0+c2VuZF9jdHJsX3BpcGUsCisJCQkJICAgICAgVVNfQ0JJX0FEU0MsIAorCQkJCSAgICAgIFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgMCwgCisJCQkJICAgICAgdXMtPmlmbnVtLCBzcmItPmNtbmQsIHNyYi0+Y21kX2xlbik7CisKKwkvKiBjaGVjayB0aGUgcmV0dXJuIGNvZGUgZm9yIHRoZSBjb21tYW5kICovCisJVVNfREVCVUdQKCJDYWxsIHRvIHVzYl9zdG9yX2N0cmxfdHJhbnNmZXIoKSByZXR1cm5lZCAlZFxuIiwgcmVzdWx0KTsKKworCS8qIGlmIHdlIHN0YWxsZWQgdGhlIGNvbW1hbmQsIGl0IG1lYW5zIGNvbW1hbmQgZmFpbGVkICovCisJaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9YRkVSX1NUQUxMRUQpIHsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJfQorCisJLyogVWggb2guLi4gc2VyaW91cyBwcm9ibGVtIGhlcmUgKi8KKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKworCS8qIERBVEEgU1RBR0UgKi8KKwkvKiB0cmFuc2ZlciB0aGUgZGF0YSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQsIGlmIG9uZSBleGlzdHMqLworCWlmICh0cmFuc2Zlcl9sZW5ndGgpIHsKKwkJcGlwZSA9IHNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFID8gCisJCQkJdXMtPnJlY3ZfYnVsa19waXBlIDogdXMtPnNlbmRfYnVsa19waXBlOworCQlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX3NnKHVzLCBwaXBlLAorCQkJCQlzcmItPnJlcXVlc3RfYnVmZmVyLCB0cmFuc2Zlcl9sZW5ndGgsCisJCQkJCXNyYi0+dXNlX3NnLCAmc3JiLT5yZXNpZCk7CisJCVVTX0RFQlVHUCgiQ0JJIGRhdGEgc3RhZ2UgcmVzdWx0IGlzIDB4JXhcbiIsIHJlc3VsdCk7CisKKwkJLyogaWYgd2Ugc3RhbGxlZCB0aGUgZGF0YSB0cmFuc2ZlciBpdCBtZWFucyBjb21tYW5kIGZhaWxlZCAqLworCQlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1hGRVJfU1RBTExFRCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCQlpZiAocmVzdWx0ID4gVVNCX1NUT1JfWEZFUl9TVEFMTEVEKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwkvKiBTVEFUVVMgU1RBR0UgKi8KKwlyZXN1bHQgPSB1c2Jfc3Rvcl9pbnRyX3RyYW5zZmVyKHVzLCB1cy0+aW9idWYsIDIpOworCVVTX0RFQlVHUCgiR290IGludGVycnVwdCBkYXRhICgweCV4LCAweCV4KVxuIiwgCisJCQl1cy0+aW9idWZbMF0sIHVzLT5pb2J1ZlsxXSk7CisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkvKiBVRkkgZ2l2ZXMgdXMgQVNDIGFuZCBBU0NRLCBsaWtlIGEgcmVxdWVzdCBzZW5zZQorCSAqCisJICogUkVRVUVTVF9TRU5TRSBhbmQgSU5RVUlSWSBkb24ndCBhZmZlY3QgdGhlIHNlbnNlIGRhdGEgb24gVUZJCisJICogZGV2aWNlcywgc28gd2UgaWdub3JlIHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhvc2UgY29tbWFuZHMuICBOb3RlCisJICogdGhhdCB0aGlzIG1lYW5zIHdlIGNvdWxkIGJlIGlnbm9yaW5nIGEgcmVhbCBlcnJvciBvbiB0aGVzZQorCSAqIGNvbW1hbmRzLCBidXQgdGhhdCBjYW4ndCBiZSBoZWxwZWQuCisJICovCisJaWYgKHVzLT5zdWJjbGFzcyA9PSBVU19TQ19VRkkpIHsKKwkJaWYgKHNyYi0+Y21uZFswXSA9PSBSRVFVRVNUX1NFTlNFIHx8CisJCSAgICBzcmItPmNtbmRbMF0gPT0gSU5RVUlSWSkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwkJaWYgKHVzLT5pb2J1ZlswXSkKKwkJCWdvdG8gRmFpbGVkOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJfQorCisJLyogSWYgbm90IFVGSSwgd2UgaW50ZXJwcmV0IHRoZSBkYXRhIGFzIGEgcmVzdWx0IGNvZGUgCisJICogVGhlIGZpcnN0IGJ5dGUgc2hvdWxkIGFsd2F5cyBiZSBhIDB4MC4KKwkgKgorCSAqIFNvbWUgYm9ndXMgZGV2aWNlcyBkb24ndCBmb2xsb3cgdGhhdCBydWxlLiAgVGhleSBzdHVmZiB0aGUgQVNDCisJICogaW50byB0aGUgZmlyc3QgYnl0ZSAtLSBzbyBpZiBpdCdzIG5vbi16ZXJvLCBjYWxsIGl0IGEgZmFpbHVyZS4KKwkgKi8KKwlpZiAodXMtPmlvYnVmWzBdKSB7CisJCVVTX0RFQlVHUCgiQ0JJIElSUSBkYXRhIHNob3dlZCByZXNlcnZlZCBiVHlwZSAweCV4XG4iLAorCQkJCXVzLT5pb2J1ZlswXSk7CisJCWdvdG8gRmFpbGVkOworCisJfQorCisJLyogVGhlIHNlY29uZCBieXRlICYgMHgwRiBzaG91bGQgYmUgMHgwIGZvciBnb29kLCBvdGhlcndpc2UgZXJyb3IgKi8KKwlzd2l0Y2ggKHVzLT5pb2J1ZlsxXSAmIDB4MEYpIHsKKwkJY2FzZSAweDAwOiAKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwkJY2FzZSAweDAxOiAKKwkJCWdvdG8gRmFpbGVkOworCX0KKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJLyogdGhlIENCSSBzcGVjIHJlcXVpcmVzIHRoYXQgdGhlIGJ1bGsgcGlwZSBtdXN0IGJlIGNsZWFyZWQKKwkgKiBmb2xsb3dpbmcgYW55IGRhdGEtaW4vb3V0IGNvbW1hbmQgZmFpbHVyZSAoc2VjdGlvbiAyLjQuMy4xLjMpCisJICovCisgIEZhaWxlZDoKKwlpZiAocGlwZSkKKwkJdXNiX3N0b3JfY2xlYXJfaGFsdCh1cywgcGlwZSk7CisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7Cit9CisKKy8qCisgKiBDb250cm9sL0J1bGsgdHJhbnNwb3J0CisgKi8KK2ludCB1c2Jfc3Rvcl9DQl90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJdW5zaWduZWQgaW50IHRyYW5zZmVyX2xlbmd0aCA9IHNyYi0+cmVxdWVzdF9idWZmbGVuOworCWludCByZXN1bHQ7CisKKwkvKiBDT01NQU5EIFNUQUdFICovCisJLyogbGV0J3Mgc2VuZCB0aGUgY29tbWFuZCB2aWEgdGhlIGNvbnRyb2wgcGlwZSAqLworCXJlc3VsdCA9IHVzYl9zdG9yX2N0cmxfdHJhbnNmZXIodXMsIHVzLT5zZW5kX2N0cmxfcGlwZSwKKwkJCQkgICAgICBVU19DQklfQURTQywgCisJCQkJICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLCAwLCAKKwkJCQkgICAgICB1cy0+aWZudW0sIHNyYi0+Y21uZCwgc3JiLT5jbWRfbGVuKTsKKworCS8qIGNoZWNrIHRoZSByZXR1cm4gY29kZSBmb3IgdGhlIGNvbW1hbmQgKi8KKwlVU19ERUJVR1AoIkNhbGwgdG8gdXNiX3N0b3JfY3RybF90cmFuc2ZlcigpIHJldHVybmVkICVkXG4iLCByZXN1bHQpOworCisJLyogaWYgd2Ugc3RhbGxlZCB0aGUgY29tbWFuZCwgaXQgbWVhbnMgY29tbWFuZCBmYWlsZWQgKi8KKwlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1hGRVJfU1RBTExFRCkgeworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwl9CisKKwkvKiBVaCBvaC4uLiBzZXJpb3VzIHByb2JsZW0gaGVyZSAqLworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJLyogREFUQSBTVEFHRSAqLworCS8qIHRyYW5zZmVyIHRoZSBkYXRhIHBheWxvYWQgZm9yIHRoaXMgY29tbWFuZCwgaWYgb25lIGV4aXN0cyovCisJaWYgKHRyYW5zZmVyX2xlbmd0aCkgeworCQl1bnNpZ25lZCBpbnQgcGlwZSA9IHNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFID8gCisJCQkJdXMtPnJlY3ZfYnVsa19waXBlIDogdXMtPnNlbmRfYnVsa19waXBlOworCQlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX3NnKHVzLCBwaXBlLAorCQkJCQlzcmItPnJlcXVlc3RfYnVmZmVyLCB0cmFuc2Zlcl9sZW5ndGgsCisJCQkJCXNyYi0+dXNlX3NnLCAmc3JiLT5yZXNpZCk7CisJCVVTX0RFQlVHUCgiQ0IgZGF0YSBzdGFnZSByZXN1bHQgaXMgMHgleFxuIiwgcmVzdWx0KTsKKworCQkvKiBpZiB3ZSBzdGFsbGVkIHRoZSBkYXRhIHRyYW5zZmVyIGl0IG1lYW5zIGNvbW1hbmQgZmFpbGVkICovCisJCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9TVEFMTEVEKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCWlmIChyZXN1bHQgPiBVU0JfU1RPUl9YRkVSX1NUQUxMRUQpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKworCS8qIFNUQVRVUyBTVEFHRSAqLworCS8qIE5PVEU6IENCIGRvZXMgbm90IGhhdmUgYSBzdGF0dXMgc3RhZ2UuICBTaWxseSwgSSBrbm93LiAgU28KKwkgKiB3ZSBoYXZlIHRvIGNhdGNoIHRoaXMgYXQgYSBoaWdoZXIgbGV2ZWwuCisJICovCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCisvKgorICogQnVsayBvbmx5IHRyYW5zcG9ydAorICovCisKKy8qIERldGVybWluZSB3aGF0IHRoZSBtYXhpbXVtIExVTiBzdXBwb3J0ZWQgaXMgKi8KK2ludCB1c2Jfc3Rvcl9CdWxrX21heF9sdW4oc3RydWN0IHVzX2RhdGEgKnVzKQoreworCWludCByZXN1bHQ7CisKKwkvKiBpc3N1ZSB0aGUgY29tbWFuZCAqLworCXJlc3VsdCA9IHVzYl9zdG9yX2NvbnRyb2xfbXNnKHVzLCB1cy0+cmVjdl9jdHJsX3BpcGUsCisJCQkJIFVTX0JVTEtfR0VUX01BWF9MVU4sIAorCQkJCSBVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCAKKwkJCQkgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCQkgMCwgdXMtPmlmbnVtLCB1cy0+aW9idWYsIDEsIEhaKTsKKworCVVTX0RFQlVHUCgiR2V0TWF4TFVOIGNvbW1hbmQgcmVzdWx0IGlzICVkLCBkYXRhIGlzICVkXG4iLCAKKwkJICByZXN1bHQsIHVzLT5pb2J1ZlswXSk7CisKKwkvKiBpZiB3ZSBoYXZlIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0LCByZXR1cm4gdGhlIHJlc3VsdCAqLworCWlmIChyZXN1bHQgPiAwKQorCQlyZXR1cm4gdXMtPmlvYnVmWzBdOworCisJLyogCisJICogU29tZSBkZXZpY2VzIChpLmUuIElvbWVnYSBaaXAxMDApIG5lZWQgdGhpcyAtLSBhcHBhcmVudGx5CisJICogdGhlIGJ1bGsgcGlwZXMgZ2V0IFNUQUxMZWQgd2hlbiB0aGUgR2V0TWF4TFVOIHJlcXVlc3QgaXMKKwkgKiBwcm9jZXNzZWQuICAgVGhpcyBpcywgaW4gdGhlb3J5LCBoYXJtbGVzcyB0byBhbGwgb3RoZXIgZGV2aWNlcworCSAqIChyZWdhcmRsZXNzIG9mIGlmIHRoZXkgc3RhbGwgb3Igbm90KS4KKwkgKi8KKwlpZiAocmVzdWx0ID09IC1FUElQRSkgeworCQl1c2Jfc3Rvcl9jbGVhcl9oYWx0KHVzLCB1cy0+cmVjdl9idWxrX3BpcGUpOworCQl1c2Jfc3Rvcl9jbGVhcl9oYWx0KHVzLCB1cy0+c2VuZF9idWxrX3BpcGUpOworCX0KKworCS8qCisJICogU29tZSBkZXZpY2VzIGRvbid0IGxpa2UgR2V0TWF4TFVOLiAgVGhleSBtYXkgU1RBTEwgdGhlIGNvbnRyb2wKKwkgKiBwaXBlLCB0aGV5IG1heSByZXR1cm4gYSB6ZXJvLWxlbmd0aCByZXN1bHQsIHRoZXkgbWF5IGRvIG5vdGhpbmcgYXQKKwkgKiBhbGwgYW5kIHRpbWVvdXQsIG9yIHRoZXkgbWF5IGZhaWwgaW4gZXZlbiBtb3JlIGJpemFycmVseSBjcmVhdGl2ZQorCSAqIHdheXMuICBJbiB0aGVzZSBjYXNlcyB0aGUgYmVzdCBhcHByb2FjaCBpcyB0byB1c2UgdGhlIGRlZmF1bHQKKwkgKiB2YWx1ZTogb25seSBvbmUgTFVOLgorCSAqLworCXJldHVybiAwOworfQorCitpbnQgdXNiX3N0b3JfQnVsa190cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJc3RydWN0IGJ1bGtfY2Jfd3JhcCAqYmNiID0gKHN0cnVjdCBidWxrX2NiX3dyYXAgKikgdXMtPmlvYnVmOworCXN0cnVjdCBidWxrX2NzX3dyYXAgKmJjcyA9IChzdHJ1Y3QgYnVsa19jc193cmFwICopIHVzLT5pb2J1ZjsKKwl1bnNpZ25lZCBpbnQgdHJhbnNmZXJfbGVuZ3RoID0gc3JiLT5yZXF1ZXN0X2J1ZmZsZW47CisJdW5zaWduZWQgaW50IHJlc2lkdWU7CisJaW50IHJlc3VsdDsKKwlpbnQgZmFrZV9zZW5zZSA9IDA7CisJdW5zaWduZWQgaW50IGNzd2xlbjsKKwl1bnNpZ25lZCBpbnQgY2J3bGVuID0gVVNfQlVMS19DQl9XUkFQX0xFTjsKKworCS8qIFRha2UgY2FyZSBvZiBCVUxLMzIgZGV2aWNlczsgc2V0IGV4dHJhIGJ5dGUgdG8gMCAqLworCWlmICggdW5saWtlbHkodXMtPmZsYWdzICYgVVNfRkxfQlVMSzMyKSkgeworCQljYndsZW4gPSAzMjsKKwkJdXMtPmlvYnVmWzMxXSA9IDA7CisJfQorCisJLyogc2V0IHVwIHRoZSBjb21tYW5kIHdyYXBwZXIgKi8KKwliY2ItPlNpZ25hdHVyZSA9IGNwdV90b19sZTMyKFVTX0JVTEtfQ0JfU0lHTik7CisJYmNiLT5EYXRhVHJhbnNmZXJMZW5ndGggPSBjcHVfdG9fbGUzMih0cmFuc2Zlcl9sZW5ndGgpOworCWJjYi0+RmxhZ3MgPSBzcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSA/IDEgPDwgNyA6IDA7CisJYmNiLT5UYWcgPSBzcmItPnNlcmlhbF9udW1iZXI7CisJYmNiLT5MdW4gPSBzcmItPmRldmljZS0+bHVuOworCWlmICh1cy0+ZmxhZ3MgJiBVU19GTF9TQ01fTVVMVF9UQVJHKQorCQliY2ItPkx1biB8PSBzcmItPmRldmljZS0+aWQgPDwgNDsKKwliY2ItPkxlbmd0aCA9IHNyYi0+Y21kX2xlbjsKKworCS8qIGNvcHkgdGhlIGNvbW1hbmQgcGF5bG9hZCAqLworCW1lbXNldChiY2ItPkNEQiwgMCwgc2l6ZW9mKGJjYi0+Q0RCKSk7CisJbWVtY3B5KGJjYi0+Q0RCLCBzcmItPmNtbmQsIGJjYi0+TGVuZ3RoKTsKKworCS8qIHNlbmQgaXQgdG8gb3V0IGVuZHBvaW50ICovCisJVVNfREVCVUdQKCJCdWxrIENvbW1hbmQgUyAweCV4IFQgMHgleCBMICVkIEYgJWQgVHJnICVkIExVTiAlZCBDTCAlZFxuIiwKKwkJCWxlMzJfdG9fY3B1KGJjYi0+U2lnbmF0dXJlKSwgYmNiLT5UYWcsCisJCQlsZTMyX3RvX2NwdShiY2ItPkRhdGFUcmFuc2Zlckxlbmd0aCksIGJjYi0+RmxhZ3MsCisJCQkoYmNiLT5MdW4gPj4gNCksIChiY2ItPkx1biAmIDB4MEYpLCAKKwkJCWJjYi0+TGVuZ3RoKTsKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnNlbmRfYnVsa19waXBlLAorCQkJCWJjYiwgY2J3bGVuLCBOVUxMKTsKKwlVU19ERUJVR1AoIkJ1bGsgY29tbWFuZCB0cmFuc2ZlciByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkvKiBEQVRBIFNUQUdFICovCisJLyogc2VuZC9yZWNlaXZlIGRhdGEgcGF5bG9hZCwgaWYgdGhlcmUgaXMgYW55ICovCisKKwkvKiBTb21lIFVTQi1JREUgY29udmVydGVyIGNoaXBzIG5lZWQgYSAxMDB1cyBkZWxheSBiZXR3ZWVuIHRoZQorCSAqIGNvbW1hbmQgcGhhc2UgYW5kIHRoZSBkYXRhIHBoYXNlLiAgU29tZSBkZXZpY2VzIG5lZWQgYSBsaXR0bGUKKwkgKiBtb3JlIHRoYW4gdGhhdCwgcHJvYmFibHkgYmVjYXVzZSBvZiBjbG9jayByYXRlIGluYWNjdXJhY2llcy4gKi8KKwlpZiAodW5saWtlbHkodXMtPmZsYWdzICYgVVNfRkxfR09fU0xPVykpCisJCXVkZWxheSgxMTApOworCisJaWYgKHRyYW5zZmVyX2xlbmd0aCkgeworCQl1bnNpZ25lZCBpbnQgcGlwZSA9IHNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFID8gCisJCQkJdXMtPnJlY3ZfYnVsa19waXBlIDogdXMtPnNlbmRfYnVsa19waXBlOworCQlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX3NnKHVzLCBwaXBlLAorCQkJCQlzcmItPnJlcXVlc3RfYnVmZmVyLCB0cmFuc2Zlcl9sZW5ndGgsCisJCQkJCXNyYi0+dXNlX3NnLCAmc3JiLT5yZXNpZCk7CisJCVVTX0RFQlVHUCgiQnVsayBkYXRhIHRyYW5zZmVyIHJlc3VsdCAweCV4XG4iLCByZXN1bHQpOworCQlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1hGRVJfRVJST1IpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJCS8qIElmIHRoZSBkZXZpY2UgdHJpZWQgdG8gc2VuZCBiYWNrIG1vcmUgZGF0YSB0aGFuIHRoZQorCQkgKiBhbW91bnQgcmVxdWVzdGVkLCB0aGUgc3BlYyByZXF1aXJlcyB1cyB0byB0cmFuc2ZlcgorCQkgKiB0aGUgQ1NXIGFueXdheS4gIFNpbmNlIHRoZXJlJ3Mgbm8gcG9pbnQgcmV0cnlpbmcgdGhlCisJCSAqIHRoZSBjb21tYW5kLCB3ZSdsbCByZXR1cm4gZmFrZSBzZW5zZSBkYXRhIGluZGljYXRpbmcKKwkJICogSWxsZWdhbCBSZXF1ZXN0LCBJbnZhbGlkIEZpZWxkIGluIENEQi4KKwkJICovCisJCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9MT05HKQorCQkJZmFrZV9zZW5zZSA9IDE7CisJfQorCisJLyogU2VlIGZsb3cgY2hhcnQgb24gcGcgMTUgb2YgdGhlIEJ1bGsgT25seSBUcmFuc3BvcnQgc3BlYyBmb3IKKwkgKiBhbiBleHBsYW5hdGlvbiBvZiBob3cgdGhpcyBjb2RlIHdvcmtzLgorCSAqLworCisJLyogZ2V0IENTVyBmb3IgZGV2aWNlIHN0YXR1cyAqLworCVVTX0RFQlVHUCgiQXR0ZW1wdGluZyB0byBnZXQgQ1NXLi4uXG4iKTsKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnJlY3ZfYnVsa19waXBlLAorCQkJCWJjcywgVVNfQlVMS19DU19XUkFQX0xFTiwgJmNzd2xlbik7CisKKwkvKiBTb21lIGJyb2tlbiBkZXZpY2VzIGFkZCB1bm5lY2Vzc2FyeSB6ZXJvLWxlbmd0aCBwYWNrZXRzIHRvIHRoZQorCSAqIGVuZCBvZiB0aGVpciBkYXRhIHRyYW5zZmVycy4gIFN1Y2ggcGFja2V0cyBzaG93IHVwIGFzIDAtbGVuZ3RoCisJICogQ1NXcy4gIElmIHdlIGVuY291bnRlciBzdWNoIGEgdGhpbmcsIHRyeSB0byByZWFkIHRoZSBDU1cgYWdhaW4uCisJICovCisJaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9YRkVSX1NIT1JUICYmIGNzd2xlbiA9PSAwKSB7CisJCVVTX0RFQlVHUCgiUmVjZWl2ZWQgMC1sZW5ndGggQ1NXOyByZXRyeWluZy4uLlxuIik7CisJCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCB1cy0+cmVjdl9idWxrX3BpcGUsCisJCQkJYmNzLCBVU19CVUxLX0NTX1dSQVBfTEVOLCAmY3N3bGVuKTsKKwl9CisKKwkvKiBkaWQgdGhlIGF0dGVtcHQgdG8gcmVhZCB0aGUgQ1NXIGZhaWw/ICovCisJaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9YRkVSX1NUQUxMRUQpIHsKKworCQkvKiBnZXQgdGhlIHN0YXR1cyBhZ2FpbiAqLworCQlVU19ERUJVR1AoIkF0dGVtcHRpbmcgdG8gZ2V0IENTVyAoMm5kIHRyeSkuLi5cbiIpOworCQlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnJlY3ZfYnVsa19waXBlLAorCQkJCWJjcywgVVNfQlVMS19DU19XUkFQX0xFTiwgTlVMTCk7CisJfQorCisJLyogaWYgd2Ugc3RpbGwgaGF2ZSBhIGZhaWx1cmUgYXQgdGhpcyBwb2ludCwgd2UncmUgaW4gdHJvdWJsZSAqLworCVVTX0RFQlVHUCgiQnVsayBzdGF0dXMgcmVzdWx0ID0gJWRcbiIsIHJlc3VsdCk7CisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkvKiBjaGVjayBidWxrIHN0YXR1cyAqLworCXJlc2lkdWUgPSBsZTMyX3RvX2NwdShiY3MtPlJlc2lkdWUpOworCVVTX0RFQlVHUCgiQnVsayBTdGF0dXMgUyAweCV4IFQgMHgleCBSICV1IFN0YXQgMHgleFxuIiwKKwkJCWxlMzJfdG9fY3B1KGJjcy0+U2lnbmF0dXJlKSwgYmNzLT5UYWcsIAorCQkJcmVzaWR1ZSwgYmNzLT5TdGF0dXMpOworCWlmIChiY3MtPlRhZyAhPSBzcmItPnNlcmlhbF9udW1iZXIgfHwgYmNzLT5TdGF0dXMgPiBVU19CVUxLX1NUQVRfUEhBU0UpIHsKKwkJVVNfREVCVUdQKCJCdWxrIGxvZ2ljYWwgZXJyb3JcbiIpOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKworCS8qIFNvbWUgYnJva2VuIGRldmljZXMgcmVwb3J0IG9kZCBzaWduYXR1cmVzLCBzbyB3ZSBkbyBub3QgY2hlY2sgdGhlbQorCSAqIGZvciB2YWxpZGl0eSBhZ2FpbnN0IHRoZSBzcGVjLiBXZSBzdG9yZSB0aGUgZmlyc3Qgb25lIHdlIHNlZSwKKwkgKiBhbmQgY2hlY2sgc3Vic2VxdWVudCB0cmFuc2ZlcnMgZm9yIHZhbGlkaXR5IGFnYWluc3QgdGhpcyBzaWduYXR1cmUuCisJICovCisJaWYgKCF1cy0+YmNzX3NpZ25hdHVyZSkgeworCQl1cy0+YmNzX3NpZ25hdHVyZSA9IGJjcy0+U2lnbmF0dXJlOworCQlpZiAodXMtPmJjc19zaWduYXR1cmUgIT0gY3B1X3RvX2xlMzIoVVNfQlVMS19DU19TSUdOKSkKKwkJCVVTX0RFQlVHUCgiTGVhcm50IEJDUyBzaWduYXR1cmUgMHglMDhYXG4iLAorCQkJCQlsZTMyX3RvX2NwdSh1cy0+YmNzX3NpZ25hdHVyZSkpOworCX0gZWxzZSBpZiAoYmNzLT5TaWduYXR1cmUgIT0gdXMtPmJjc19zaWduYXR1cmUpIHsKKwkJVVNfREVCVUdQKCJTaWduYXR1cmUgbWlzbWF0Y2g6IGdvdCAlMDhYLCBleHBlY3RpbmcgJTA4WFxuIiwKKwkJCSAgbGUzMl90b19jcHUoYmNzLT5TaWduYXR1cmUpLAorCQkJICBsZTMyX3RvX2NwdSh1cy0+YmNzX3NpZ25hdHVyZSkpOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKworCS8qIHRyeSB0byBjb21wdXRlIHRoZSBhY3R1YWwgcmVzaWR1ZSwgYmFzZWQgb24gaG93IG11Y2ggZGF0YQorCSAqIHdhcyByZWFsbHkgdHJhbnNmZXJyZWQgYW5kIHdoYXQgdGhlIGRldmljZSB0ZWxscyB1cyAqLworCWlmIChyZXNpZHVlKSB7CisJCWlmICghKHVzLT5mbGFncyAmIFVTX0ZMX0lHTk9SRV9SRVNJRFVFKSkgeworCQkJcmVzaWR1ZSA9IG1pbihyZXNpZHVlLCB0cmFuc2Zlcl9sZW5ndGgpOworCQkJc3JiLT5yZXNpZCA9IG1heChzcmItPnJlc2lkLCAoaW50KSByZXNpZHVlKTsKKwkJfQorCX0KKworCS8qIGJhc2VkIG9uIHRoZSBzdGF0dXMgY29kZSwgd2UgcmVwb3J0IGdvb2Qgb3IgYmFkICovCisJc3dpdGNoIChiY3MtPlN0YXR1cykgeworCQljYXNlIFVTX0JVTEtfU1RBVF9PSzoKKwkJCS8qIGRldmljZSBiYWJibGVkIC0tIHJldHVybiBmYWtlIHNlbnNlIGRhdGEgKi8KKwkJCWlmIChmYWtlX3NlbnNlKSB7CisJCQkJbWVtY3B5KHNyYi0+c2Vuc2VfYnVmZmVyLCAKKwkJCQkgICAgICAgdXNiX3N0b3Jfc2Vuc2VfaW52YWxpZENEQiwgCisJCQkJICAgICAgIHNpemVvZih1c2Jfc3Rvcl9zZW5zZV9pbnZhbGlkQ0RCKSk7CisJCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9OT19TRU5TRTsKKwkJCX0KKworCQkJLyogY29tbWFuZCBnb29kIC0tIG5vdGUgdGhhdCBkYXRhIGNvdWxkIGJlIHNob3J0ICovCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisKKwkJY2FzZSBVU19CVUxLX1NUQVRfRkFJTDoKKwkJCS8qIGNvbW1hbmQgZmFpbGVkICovCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKworCQljYXNlIFVTX0JVTEtfU1RBVF9QSEFTRToKKwkJCS8qIHBoYXNlIGVycm9yIC0tIG5vdGUgdGhhdCBhIHRyYW5zcG9ydCByZXNldCB3aWxsIGJlCisJCQkgKiBpbnZva2VkIGJ5IHRoZSBpbnZva2VfdHJhbnNwb3J0KCkgZnVuY3Rpb24KKwkJCSAqLworCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwkvKiB3ZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUsIGJ1dCBpZiB3ZSBkbywgd2UncmUgaW4gdHJvdWJsZSAqLworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmVzZXQgcm91dGluZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBpcyB0aGUgY29tbW9uIHBhcnQgb2YgdGhlIGRldmljZSByZXNldCBjb2RlLgorICoKKyAqIEl0J3MgaGFuZHkgdGhhdCBldmVyeSB0cmFuc3BvcnQgbWVjaGFuaXNtIHVzZXMgdGhlIGNvbnRyb2wgZW5kcG9pbnQgZm9yCisgKiByZXNldHMuCisgKgorICogQmFzaWNhbGx5LCB3ZSBzZW5kIGEgcmVzZXQgd2l0aCBhIDIwLXNlY29uZCB0aW1lb3V0LCBzbyB3ZSBkb24ndCBnZXQKKyAqIGphbW1lZCBhdHRlbXB0aW5nIHRvIGRvIHRoZSByZXNldC4KKyAqLworc3RhdGljIGludCB1c2Jfc3Rvcl9yZXNldF9jb21tb24oc3RydWN0IHVzX2RhdGEgKnVzLAorCQl1OCByZXF1ZXN0LCB1OCByZXF1ZXN0dHlwZSwKKwkJdTE2IHZhbHVlLCB1MTYgaW5kZXgsIHZvaWQgKmRhdGEsIHUxNiBzaXplKQoreworCWludCByZXN1bHQ7CisJaW50IHJlc3VsdDI7CisJaW50IHJjID0gRkFJTEVEOworCisJLyogTGV0IHRoZSBTQ1NJIGxheWVyIGtub3cgd2UgYXJlIGRvaW5nIGEgcmVzZXQsIHNldCB0aGUKKwkgKiBSRVNFVFRJTkcgYml0LCBhbmQgY2xlYXIgdGhlIEFCT1JUSU5HIGJpdCBzbyB0aGF0IHRoZSByZXNldAorCSAqIG1heSBwcm9jZWVkLgorCSAqLworCXNjc2lfbG9jayh1c190b19ob3N0KHVzKSk7CisJdXNiX3N0b3JfcmVwb3J0X2RldmljZV9yZXNldCh1cyk7CisJc2V0X2JpdChVU19GTElEWF9SRVNFVFRJTkcsICZ1cy0+ZmxhZ3MpOworCWNsZWFyX2JpdChVU19GTElEWF9BQk9SVElORywgJnVzLT5mbGFncyk7CisJc2NzaV91bmxvY2sodXNfdG9faG9zdCh1cykpOworCisJLyogQSAyMC1zZWNvbmQgdGltZW91dCBtYXkgc2VlbSByYXRoZXIgbG9uZywgYnV0IGEgTGFDaWUKKwkgKiBTdHVkaW9Ecml2ZSBVU0IyIGRldmljZSB0YWtlcyAxNisgc2Vjb25kcyB0byBnZXQgZ29pbmcKKwkgKiBmb2xsb3dpbmcgYSBwb3dlcnVwIG9yIFVTQiBhdHRhY2ggZXZlbnQuCisJICovCisJcmVzdWx0ID0gdXNiX3N0b3JfY29udHJvbF9tc2codXMsIHVzLT5zZW5kX2N0cmxfcGlwZSwKKwkJCXJlcXVlc3QsIHJlcXVlc3R0eXBlLCB2YWx1ZSwgaW5kZXgsIGRhdGEsIHNpemUsCisJCQkyMCpIWik7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJVVNfREVCVUdQKCJTb2Z0IHJlc2V0IGZhaWxlZDogJWRcbiIsIHJlc3VsdCk7CisJCWdvdG8gRG9uZTsKKwl9CisKKyAJLyogR2l2ZSB0aGUgZGV2aWNlIHNvbWUgdGltZSB0byByZWNvdmVyIGZyb20gdGhlIHJlc2V0LAorIAkgKiBidXQgZG9uJ3QgZGVsYXkgZGlzY29ubmVjdCBwcm9jZXNzaW5nLiAqLworIAl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh1cy0+ZGVsYXlfd2FpdCwKKyAJCQl0ZXN0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmZsYWdzKSwKKyAJCQlIWio2KTsKKwlpZiAodGVzdF9iaXQoVVNfRkxJRFhfRElTQ09OTkVDVElORywgJnVzLT5mbGFncykpIHsKKwkJVVNfREVCVUdQKCJSZXNldCBpbnRlcnJ1cHRlZCBieSBkaXNjb25uZWN0XG4iKTsKKwkJZ290byBEb25lOworCX0KKworCVVTX0RFQlVHUCgiU29mdCByZXNldDogY2xlYXJpbmcgYnVsay1pbiBlbmRwb2ludCBoYWx0XG4iKTsKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9jbGVhcl9oYWx0KHVzLCB1cy0+cmVjdl9idWxrX3BpcGUpOworCisJVVNfREVCVUdQKCJTb2Z0IHJlc2V0OiBjbGVhcmluZyBidWxrLW91dCBlbmRwb2ludCBoYWx0XG4iKTsKKwlyZXN1bHQyID0gdXNiX3N0b3JfY2xlYXJfaGFsdCh1cywgdXMtPnNlbmRfYnVsa19waXBlKTsKKworCS8qIHJldHVybiBhIHJlc3VsdCBjb2RlIGJhc2VkIG9uIHRoZSByZXN1bHQgb2YgdGhlIGNvbnRyb2wgbWVzc2FnZSAqLworCWlmIChyZXN1bHQgPCAwIHx8IHJlc3VsdDIgPCAwKSB7CisJCVVTX0RFQlVHUCgiU29mdCByZXNldCBmYWlsZWRcbiIpOworCQlnb3RvIERvbmU7CisJfQorCVVTX0RFQlVHUCgiU29mdCByZXNldCBkb25lXG4iKTsKKwlyYyA9IFNVQ0NFU1M7CisKKyAgRG9uZToKKwljbGVhcl9iaXQoVVNfRkxJRFhfUkVTRVRUSU5HLCAmdXMtPmZsYWdzKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qIFRoaXMgaXNzdWVzIGEgQ0JbSV0gUmVzZXQgdG8gdGhlIGRldmljZSBpbiBxdWVzdGlvbgorICovCisjZGVmaW5lIENCX1JFU0VUX0NNRF9TSVpFCTEyCisKK2ludCB1c2Jfc3Rvcl9DQl9yZXNldChzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJVVNfREVCVUdQKCIlcyBjYWxsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwltZW1zZXQodXMtPmlvYnVmLCAweEZGLCBDQl9SRVNFVF9DTURfU0laRSk7CisJdXMtPmlvYnVmWzBdID0gU0VORF9ESUFHTk9TVElDOworCXVzLT5pb2J1ZlsxXSA9IDQ7CisJcmV0dXJuIHVzYl9zdG9yX3Jlc2V0X2NvbW1vbih1cywgVVNfQ0JJX0FEU0MsIAorCQkJCSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkJIDAsIHVzLT5pZm51bSwgdXMtPmlvYnVmLCBDQl9SRVNFVF9DTURfU0laRSk7Cit9CisKKy8qIFRoaXMgaXNzdWVzIGEgQnVsay1vbmx5IFJlc2V0IHRvIHRoZSBkZXZpY2UgaW4gcXVlc3Rpb24sIGluY2x1ZGluZworICogY2xlYXJpbmcgdGhlIHN1YnNlcXVlbnQgZW5kcG9pbnQgaGFsdHMgdGhhdCBtYXkgb2NjdXIuCisgKi8KK2ludCB1c2Jfc3Rvcl9CdWxrX3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlVU19ERUJVR1AoIiVzIGNhbGxlZFxuIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiB1c2Jfc3Rvcl9yZXNldF9jb21tb24odXMsIFVTX0JVTEtfUkVTRVRfUkVRVUVTVCwgCisJCQkJIFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCQkgMCwgdXMtPmlmbnVtLCBOVUxMLCAwKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNWY4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5oCkBAIC0wLDAgKzEsMTc0IEBACisvKiBEcml2ZXIgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgY29tcGxpYW50IGRldmljZXMKKyAqIFRyYW5zcG9ydCBGdW5jdGlvbnMgSGVhZGVyIEZpbGUKKyAqCisgKiAkSWQ6IHRyYW5zcG9ydC5oLHYgMS4xOCAyMDAyLzA0LzIxIDAyOjU3OjU5IG1kaGFybSBFeHAgJAorICoKKyAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgorICogICAoYykgMTk5OSwgMjAwMCBNYXR0aGV3IERoYXJtIChtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldCkKKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgJ1VTQiBNYXNzIFN0b3JhZ2UgQ2xhc3MnIGRvY3VtZW50LiBUaGlzCisgKiBkZXNjcmliZXMgaW4gZGV0YWlsIHRoZSBwcm90b2NvbCB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggc3VjaAorICogZGV2aWNlcy4gIENsZWFybHksIHRoZSBkZXNpZ25lcnMgaGFkIFNDU0kgYW5kIEFUQVBJIGNvbW1hbmRzIGluCisgKiBtaW5kIHdoZW4gdGhleSBjcmVhdGVkIHRoaXMgZG9jdW1lbnQuICBUaGUgY29tbWFuZHMgYXJlIGFsbCB2ZXJ5CisgKiBzaW1pbGFyIHRvIGNvbW1hbmRzIGluIHRoZSBTQ1NJLUlJIGFuZCBBVEFQSSBzcGVjaWZpY2F0aW9ucy4KKyAqCisgKiBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IGluIGEgbnVtYmVyIG9mIGNhc2VzIHRoaXMgY2xhc3MKKyAqIGV4aGliaXRzIGNsYXNzLXNwZWNpZmljIGV4ZW1wdGlvbnMgZnJvbSB0aGUgVVNCIHNwZWNpZmljYXRpb24uCisgKiBOb3RhYmx5IHRoZSB1c2FnZSBvZiBOQUssIFNUQUxMIGFuZCBBQ0sgZGlmZmVycyBmcm9tIHRoZSBub3JtLCBpbgorICogdGhhdCB0aGV5IGFyZSB1c2VkIHRvIGNvbW11bmljYXRlIHdhaXQsIGZhaWxlZCBhbmQgT0sgb24gY29tbWFuZHMuCisgKgorICogQWxzbywgZm9yIGNlcnRhaW4gZGV2aWNlcywgdGhlIGludGVycnVwdCBlbmRwb2ludCBpcyB1c2VkIHRvIGNvbnZleQorICogc3RhdHVzIG9mIGEgY29tbWFuZC4KKyAqCisgKiBQbGVhc2Ugc2VlIGh0dHA6Ly93d3cub25lLWV5ZWQtYWxpZW4ubmV0L35tZGhhcm0vbGludXgtdXNiIGZvciBtb3JlCisgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRyaXZlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9UUkFOU1BPUlRfSF8KKyNkZWZpbmUgX1RSQU5TUE9SVF9IXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisKKy8qIFByb3RvY29scyAqLworCisjZGVmaW5lIFVTX1BSX0NCSQkweDAwCQkvKiBDb250cm9sL0J1bGsvSW50ZXJydXB0ICovCisjZGVmaW5lIFVTX1BSX0NCCTB4MDEJCS8qIENvbnRyb2wvQnVsayB3L28gaW50ZXJydXB0ICovCisjZGVmaW5lIFVTX1BSX0JVTEsJMHg1MAkJLyogYnVsayBvbmx5ICovCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCisjZGVmaW5lIFVTX1BSX1NDTV9BVEFQSQkweDgwCQkvKiBTQ00tQVRBUEkgYnJpZGdlICovCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5CisjZGVmaW5lIFVTX1BSX0VVU0JfU0REUjA5CTB4ODEJLyogU0NNLVNDU0kgYnJpZGdlIGZvciBTRERSLTA5ICovCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1CisjZGVmaW5lIFVTX1BSX1NERFI1NQkweDgyCQkvKiBTRERSLTU1IChtYWRlIHVwKSAqLworI2VuZGlmCisjZGVmaW5lIFVTX1BSX0RQQ01fVVNCICAweGYwCQkvKiBDb21iaW5hdGlvbiBDQi9TRERSMDkgKi8KKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NCisjZGVmaW5lIFVTX1BSX0ZSRUVDT00gICAweGYxCQkvKiBGcmVlY29tICovCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCCisjZGVmaW5lIFVTX1BSX0RBVEFGQUIgICAweGYyCQkvKiBEYXRhZmFiIGNoaXBzZXRzICovCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVAorI2RlZmluZSBVU19QUl9KVU1QU0hPVCAgMHhmMwkJLyogTGV4YXIgSnVtcHNob3QgKi8KKyNlbmRpZgorCisjZGVmaW5lIFVTX1BSX0RFVklDRQkweGZmCQkvKiBVc2UgZGV2aWNlJ3MgdmFsdWUgKi8KKworLyoKKyAqIEJ1bGsgb25seSBkYXRhIHN0cnVjdHVyZXMKKyAqLworCisvKiBjb21tYW5kIGJsb2NrIHdyYXBwZXIgKi8KK3N0cnVjdCBidWxrX2NiX3dyYXAgeworCV9fbGUzMglTaWduYXR1cmU7CQkvKiBjb250YWlucyAnVVNCQycgKi8KKwlfX3UzMglUYWc7CQkJLyogdW5pcXVlIHBlciBjb21tYW5kIGlkICovCisJX19sZTMyCURhdGFUcmFuc2Zlckxlbmd0aDsJLyogc2l6ZSBvZiBkYXRhICovCisJX191OAlGbGFnczsJCQkvKiBkaXJlY3Rpb24gaW4gYml0IDAgKi8KKwlfX3U4CUx1bjsJCQkvKiBMVU4gbm9ybWFsbHkgMCAqLworCV9fdTgJTGVuZ3RoOwkJCS8qIG9mIG9mIHRoZSBDREIgKi8KKwlfX3U4CUNEQlsxNl07CQkvKiBtYXggY29tbWFuZCAqLworfTsKKworI2RlZmluZSBVU19CVUxLX0NCX1dSQVBfTEVOCTMxCisjZGVmaW5lIFVTX0JVTEtfQ0JfU0lHTgkJMHg0MzQyNTM1NQkvKnNwZWxscyBvdXQgVVNCQyAqLworI2RlZmluZSBVU19CVUxLX0ZMQUdfSU4JCTEKKyNkZWZpbmUgVVNfQlVMS19GTEFHX09VVAkwCisKKy8qIGNvbW1hbmQgc3RhdHVzIHdyYXBwZXIgKi8KK3N0cnVjdCBidWxrX2NzX3dyYXAgeworCV9fbGUzMglTaWduYXR1cmU7CQkvKiBzaG91bGQgPSAnVVNCUycgKi8KKwlfX3UzMglUYWc7CQkJLyogc2FtZSBhcyBvcmlnaW5hbCBjb21tYW5kICovCisJX19sZTMyCVJlc2lkdWU7CQkvKiBhbW91bnQgbm90IHRyYW5zZmVycmVkICovCisJX191OAlTdGF0dXM7CQkJLyogc2VlIGJlbG93ICovCisJX191OAlGaWxsZXJbMThdOworfTsKKworI2RlZmluZSBVU19CVUxLX0NTX1dSQVBfTEVOCTEzCisjZGVmaW5lIFVTX0JVTEtfQ1NfU0lHTgkJMHg1MzQyNTM1NQkvKiBzcGVsbHMgb3V0ICdVU0JTJyAqLworI2RlZmluZSBVU19CVUxLX1NUQVRfT0sJCTAKKyNkZWZpbmUgVVNfQlVMS19TVEFUX0ZBSUwJMQorI2RlZmluZSBVU19CVUxLX1NUQVRfUEhBU0UJMgorCisvKiBidWxrLW9ubHkgY2xhc3Mgc3BlY2lmaWMgcmVxdWVzdHMgKi8KKyNkZWZpbmUgVVNfQlVMS19SRVNFVF9SRVFVRVNUCTB4ZmYKKyNkZWZpbmUgVVNfQlVMS19HRVRfTUFYX0xVTgkweGZlCisKKy8qCisgKiB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX3h4eCgpIHJldHVybiBjb2RlcywgaW4gb3JkZXIgb2Ygc2V2ZXJpdHkKKyAqLworCisjZGVmaW5lIFVTQl9TVE9SX1hGRVJfR09PRAkwCS8qIGdvb2QgdHJhbnNmZXIgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVTQl9TVE9SX1hGRVJfU0hPUlQJMQkvKiB0cmFuc2ZlcnJlZCBsZXNzIHRoYW4gZXhwZWN0ZWQgKi8KKyNkZWZpbmUgVVNCX1NUT1JfWEZFUl9TVEFMTEVECTIJLyogZW5kcG9pbnQgc3RhbGxlZCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1NUT1JfWEZFUl9MT05HCTMJLyogZGV2aWNlIHRyaWVkIHRvIHNlbmQgdG9vIG11Y2ggKi8KKyNkZWZpbmUgVVNCX1NUT1JfWEZFUl9FUlJPUgk0CS8qIHRyYW5zZmVyIGRpZWQgaW4gdGhlIG1pZGRsZSAgICovCisKKy8qCisgKiBUcmFuc3BvcnQgcmV0dXJuIGNvZGVzCisgKi8KKworI2RlZmluZSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRAkgICAwICAgLyogVHJhbnNwb3J0IGdvb2QsIGNvbW1hbmQgZ29vZAkgICAqLworI2RlZmluZSBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEICAxICAgLyogVHJhbnNwb3J0IGdvb2QsIGNvbW1hbmQgZmFpbGVkICAgKi8KKyNkZWZpbmUgVVNCX1NUT1JfVFJBTlNQT1JUX05PX1NFTlNFIDIgIC8qIENvbW1hbmQgZmFpbGVkLCBubyBhdXRvLXNlbnNlICAgICovCisjZGVmaW5lIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUiAgIDMgICAvKiBUcmFuc3BvcnQgYmFkIChpLmUuIGRldmljZSBkZWFkKSAqLworCisvKgorICogV2UgdXNlZCB0byBoYXZlIFVTQl9TVE9SX1hGRVJfQUJPUlRFRCBhbmQgVVNCX1NUT1JfVFJBTlNQT1JUX0FCT1JURUQKKyAqIHJldHVybiBjb2Rlcy4gIEJ1dCBub3cgdGhlIHRyYW5zcG9ydCBhbmQgbG93LWxldmVsIHRyYW5zZmVyIHJvdXRpbmVzCisgKiB0cmVhdCBhbiBhYm9ydCBhcyBqdXN0IGFub3RoZXIgZXJyb3IgKC1FTk9FTlQgZm9yIGEgY2FuY2VsbGVkIFVSQikuCisgKiBJdCBpcyB1cCB0byB0aGUgaW52b2tlX3RyYW5zcG9ydCgpIGZ1bmN0aW9uIHRvIHRlc3QgZm9yIGFib3J0cyBhbmQKKyAqIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSBnZW51aW5lIGNvbW11bmljYXRpb24gZXJyb3JzLgorICovCisKKy8qCisgKiBDQkkgYWNjZXB0IGRldmljZSBzcGVjaWZpYyBjb21tYW5kCisgKi8KKworI2RlZmluZSBVU19DQklfQURTQwkJMAorCitleHRlcm4gaW50IHVzYl9zdG9yX0NCSV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3QgdXNfZGF0YSopOworCitleHRlcm4gaW50IHVzYl9zdG9yX0NCX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCB1c19kYXRhKik7CitleHRlcm4gaW50IHVzYl9zdG9yX0NCX3Jlc2V0KHN0cnVjdCB1c19kYXRhKik7CisKK2V4dGVybiBpbnQgdXNiX3N0b3JfQnVsa190cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3QgdXNfZGF0YSopOworZXh0ZXJuIGludCB1c2Jfc3Rvcl9CdWxrX21heF9sdW4oc3RydWN0IHVzX2RhdGEqKTsKK2V4dGVybiBpbnQgdXNiX3N0b3JfQnVsa19yZXNldChzdHJ1Y3QgdXNfZGF0YSopOworCitleHRlcm4gdm9pZCB1c2Jfc3Rvcl9pbnZva2VfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHVzX2RhdGEqKTsKK2V4dGVybiB2b2lkIHVzYl9zdG9yX3N0b3BfdHJhbnNwb3J0KHN0cnVjdCB1c19kYXRhKik7CisKK2V4dGVybiBpbnQgdXNiX3N0b3JfY29udHJvbF9tc2coc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgcGlwZSwKKwkJdTggcmVxdWVzdCwgdTggcmVxdWVzdHR5cGUsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAorCQl2b2lkICpkYXRhLCB1MTYgc2l6ZSwgaW50IHRpbWVvdXQpOworZXh0ZXJuIGludCB1c2Jfc3Rvcl9jbGVhcl9oYWx0KHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHBpcGUpOworCitleHRlcm4gaW50IHVzYl9zdG9yX2N0cmxfdHJhbnNmZXIoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgcGlwZSwKKwkJdTggcmVxdWVzdCwgdTggcmVxdWVzdHR5cGUsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAorCQl2b2lkICpkYXRhLCB1MTYgc2l6ZSk7CitleHRlcm4gaW50IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHBpcGUsCisJCXZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbmd0aCwgdW5zaWduZWQgaW50ICphY3RfbGVuKTsKK2V4dGVybiBpbnQgdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9zZyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCBwaXBlLAorCQl2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW5ndGgsIGludCB1c2Vfc2csIGludCAqcmVzaWR1YWwpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1M2Y3NzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCkBAIC0wLDAgKzEsOTg2IEBACisvKiBEcml2ZXIgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgY29tcGxpYW50IGRldmljZXMKKyAqIFVudW5zdWFsIERldmljZXMgRmlsZQorICoKKyAqICRJZDogdW51c3VhbF9kZXZzLmgsdiAxLjMyIDIwMDIvMDIvMjUgMDI6NDE6MjQgbWRoYXJtIEV4cCAkCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAyMDAwLTIwMDIgTWF0dGhldyBEaGFybSAobWRoYXJtLXVzYkBvbmUtZXllZC1hbGllbi5uZXQpCisgKgorICogSW5pdGlhbCB3b3JrIGJ5OgorICogICAoYykgMjAwMCBBZGFtIEouIFJpY2h0ZXIgKGFkYW1AeWdnZHJhc2lsLmNvbSksIFlnZ2RyYXNpbCBDb21wdXRpbmcsIEluYy4KKyAqCisgKiBQbGVhc2Ugc2VlIGh0dHA6Ly93d3cub25lLWV5ZWQtYWxpZW4ubmV0L35tZGhhcm0vbGludXgtdXNiIGZvciBtb3JlCisgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRyaXZlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKiBJTVBPUlRBTlQgTk9URTogVGhpcyBmaWxlIG11c3QgYmUgaW5jbHVkZWQgaW4gYW5vdGhlciBmaWxlIHdoaWNoIGRvZXMKKyAqIHRoZSBmb2xsb3dpbmcgdGhpbmcgZm9yIGl0IHRvIHdvcms6CisgKiBUaGUgbWFjcm8gVU5VU1VBTF9ERVYoKSBtdXN0IGJlIGRlZmluZWQgYmVmb3JlIHRoaXMgZmlsZSBpcyBpbmNsdWRlZAorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qIElmIHlvdSBlZGl0IHRoaXMgZmlsZSwgcGxlYXNlIHRyeSB0byBrZWVwIGl0IHNvcnRlZCBmaXJzdCBieSBWZW5kb3JJRCwKKyAqIHRoZW4gYnkgUHJvZHVjdElELgorICoKKyAqIElmIHlvdSB3YW50IHRvIGFkZCBhbiBlbnRyeSBmb3IgdGhpcyBmaWxlLCBiZSBzdXJlIHRvIGluY2x1ZGUgdGhlCisgKiBmb2xsb3dpbmcgaW5mb3JtYXRpb246CisgKgktIGEgcGF0Y2ggdGhhdCBhZGRzIHRoZSBlbnRyeSBmb3IgeW91ciBkZXZpY2UsIGluY2x1ZGluZyB5b3VyCisgKgkgIGVtYWlsIGFkZHJlc3MgcmlnaHQgYWJvdmUgdGhlIGVudHJ5IChwbHVzIG1heWJlIGEgYnJpZWYKKyAqCSAgZXhwbGFuYXRpb24gb2YgdGhlIHJlYXNvbiBmb3IgdGhlIGVudHJ5KSwKKyAqCS0gYSBjb3B5IG9mIC9wcm9jL2J1cy91c2IvZGV2aWNlcyB3aXRoIHlvdXIgZGV2aWNlIHBsdWdnZWQgaW4KKyAqCSAgcnVubmluZyB3aXRoIHRoaXMgcGF0Y2guCisgKiBTZW5kIHlvdXIgc3VibWlzc2lvbiB0byBlaXRoZXIgUGhpbCBEaWJvd2l0eiA8cGhpbEBpcG9tLmNvbT4gb3IKKyAqIEFsYW4gU3Rlcm4gPHN0ZXJuQHJvd2xhbmQuaGFydmFyZC5lZHU+LCBhbmQgZG9uJ3QgZm9yZ2V0IHRvIENDOiB0aGUKKyAqIFVTQiBkZXZlbG9wbWVudCBsaXN0IDxsaW51eC11c2ItZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0Pi4KKyAqLworCitVTlVTVUFMX0RFViggIDB4MDNlZSwgMHg2OTAxLCAweDAwMDAsIDB4MDEwMCwKKwkJIk1pdHN1bWkiLAorCQkiVVNCIEZERCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOICksCisKK1VOVVNVQUxfREVWKCAgMHgwM2YwLCAweDAxMDcsIDB4MDIwMCwgMHgwMjAwLCAKKwkJIkhQIiwKKwkJIkNELVdyaXRlcisiLAorCQlVU19TQ184MDcwLCBVU19QUl9DQiwgTlVMTCwgMCksIAorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCitVTlVTVUFMX0RFViggIDB4MDNmMCwgMHgwMjA3LCAweDAwMDEsIDB4MDAwMSwgCisJCSJIUCIsCisJCSJDRC1Xcml0ZXIrIDgyMDBlIiwKKwkJVVNfU0NfODA3MCwgVVNfUFJfU0NNX0FUQVBJLCBpbml0X3VzYmF0LCAwKSwgCisKK1VOVVNVQUxfREVWKCAgMHgwM2YwLCAweDAzMDcsIDB4MDAwMSwgMHgwMDAxLCAKKwkJIkhQIiwKKwkJIkNELVdyaXRlcisgQ0QtNGUiLAorCQlVU19TQ184MDcwLCBVU19QUl9TQ01fQVRBUEksIGluaXRfdXNiYXQsIDApLCAKKyNlbmRpZgorCisvKiBEZWR1Y2VkIGJ5IEpvbmF0aGFuIFdvaXRoZSA8andvaXRoZUBwaHlzaWNzLmFkZWxhaWRlLmVkdS5hdT4KKyAqIEVudHJ5IG5lZWRlZCBmb3IgZmxhZ3M6IFVTX0ZMX0ZJWF9JTlFVSVJZIGJlY2F1c2UgaW5pdGlhbCBpbnF1aXJ5IG1lc3NhZ2UKKyAqIGFsd2F5cyBmYWlscyBhbmQgY29uZnVzZXMgZHJpdmUuCisgKi8KK1VOVVNVQUxfREVWKCAgMHgwNDExLCAweDAwMWMsIDB4MDExMywgMHgwMTEzLAorCQkiQnVmZmFsbyIsCisJCSJEVUItUDQwRyBIREQiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfRklYX0lOUVVJUlkgKSwKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9EUENNCitVTlVTVUFMX0RFViggIDB4MDQzNiwgMHgwMDA1LCAweDAxMDAsIDB4MDEwMCwKKwkJIk1pY3JvdGVjaCIsCisJCSJDYW1lcmFNYXRlIChEUENNX1VTQikiLAorIAkJVVNfU0NfU0NTSSwgVVNfUFJfRFBDTV9VU0IsIE5VTEwsIDAgKSwKKyNlbmRpZgorCisvKiBQYXRjaCBzdWJtaXR0ZWQgYnkgUGhpbGlwcCBGcmllZHJpY2ggPHBoaWxpcHBAdm9pZC5hdD4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNDgyLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLAorCQkiS3lvY2VyYSIsCisJCSJGaW5lY2FtIFMzeCIsCisJCVVTX1NDXzgwNzAsIFVTX1BSX0NCLCBOVUxMLCBVU19GTF9GSVhfSU5RVUlSWSksCisKKy8qIFBhdGNoIHN1Ym1pdHRlZCBieSBQaGlsaXBwIEZyaWVkcmljaCA8cGhpbGlwcEB2b2lkLmF0PiAqLworVU5VU1VBTF9ERVYoICAweDA0ODIsIDB4MDEwMSwgMHgwMTAwLCAweDAxMDAsCisJCSJLeW9jZXJhIiwKKwkJIkZpbmVjYW0gUzQiLAorCQlVU19TQ184MDcwLCBVU19QUl9DQiwgTlVMTCwgVVNfRkxfRklYX0lOUVVJUlkpLAorCisvKiBQYXRjaCBzdWJtaXR0ZWQgYnkgU3RlcGhhbmUgR2FsbGVzIDxzdGVwaGFuZS5nYWxsZXNAZnJlZS5mcj4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNDgyLCAweDAxMDMsIDB4MDEwMCwgMHgwMTAwLAorCQkiS3lvY2VyYSIsCisJCSJGaW5lY2FtIFM1IiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsIFVTX0ZMX0ZJWF9JTlFVSVJZKSwKKworLyogUGF0Y2ggZm9yIEt5b2NlcmEgRmluZWNhbSBMMworICogU3VibWl0dGVkIGJ5IE1pY2hhZWwgS3JhdXRoIDxtaWNoYWVsLmtyYXV0aEB3ZWIuZGU+CisgKiBhbmQgQWxlc3NhbmRybyBGcmFjY2hldHRpIDxhbC5mcmFjY2hldHRpQHRpbi5pdD4KKyAqLworVU5VU1VBTF9ERVYoICAweDA0ODIsIDB4MDEwNSwgMHgwMTAwLCAweDAxMDAsCisJCSJLeW9jZXJhIiwKKwkJIkZpbmVjYW0gTDMiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9CVUxLLCBOVUxMLAorCQlVU19GTF9GSVhfSU5RVUlSWSksCisKKy8qIFJlcG9ydGVkIGJ5IFBhdWwgU3Rld2FydCA8c3Rld2FydEB3ZXRsb2dpYy5uZXQ+CisgKiBUaGlzIGVudHJ5IGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBkZXZpY2UgcmVwb3J0cyBTdWI9ZmYgKi8KK1VOVVNVQUxfREVWKCAgMHgwNGE0LCAweDAwMDQsIDB4MDAwMSwgMHgwMDAxLAorCQkiSGl0YWNoaSIsCisJCSJEVkQtQ0FNIERaLU1WMTAwQSBDYW1jb3JkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9DQiwgTlVMTCwgVVNfRkxfU0lOR0xFX0xVTiksCisKKy8qIFJlcG9ydGVkIGJ5IEFuZHJlYXMgQm9ja2hvbGQgPGFuZHJlYXNAYm9ja2lvbmxpbmUuZGU+ICovCitVTlVTVUFMX0RFViggIDB4MDRiMCwgMHgwNDA1LCAweDAxMDAsIDB4MDEwMCwKKwkJIk5JS09OIiwKKwkJIk5JS09OIERTQyBENzAiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfRklYX0NBUEFDSVRZKSwKKworLyogQkVOUSBEQzUzMzAKKyAqIFJlcG9ydGVkIGJ5IE1hbnVlbCBGb21idWVuYSA8bWZvbWJ1ZW5hQHlhLmNvbT4gYW5kCisgKiBGcmFuayBDb3BlbGFuZCA8ZmpjQHRoaW5neS5hcGFuYS5vcmcuYXU+ICovCitVTlVTVUFMX0RFViggIDB4MDRhNSwgMHgzMDEwLCAweDAxMDAsIDB4MDEwMCwKKwkJIlRla29tIFRlY2hub2xvZ2llcywgSW5jIiwKKwkJIjMwMF9DQU1FUkEiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgKSwKKworLyogUmVwb3J0ZWQgYnkgU2ltb24gTGV2aXR0IDxzaW1vbkB3aGF0dGYuY29tPgorICogVGhpcyBlbnRyeSBuZWVkcyBTdWIgYW5kIFByb3RvIGZpZWxkcyAqLworVU5VU1VBTF9ERVYoICAweDA0YjgsIDB4MDYwMSwgMHgwMTAwLCAweDAxMDAsCisJCSJFcHNvbiIsCisJCSI4NzVEQyBTdG9yYWdlIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfQ0IsIE5VTEwsIFVTX0ZMX0ZJWF9JTlFVSVJZKSwKKworLyogUmVwb3J0ZWQgYnkgS2hhbGlkIEF6aXogPGtoYWxpZEBnb25laGlraW5nLm9yZz4KKyAqIFRoaXMgZW50cnkgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGRldmljZSByZXBvcnRzIFN1Yj1mZiAqLworVU5VU1VBTF9ERVYoICAweDA0YjgsIDB4MDYwMiwgMHgwMTEwLCAweDAxMTAsCisJCSJFcHNvbiIsCisJCSI3ODVFUFggU3RvcmFnZSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0JVTEssIE5VTEwsIFVTX0ZMX1NJTkdMRV9MVU4pLAorCisvKiBOb3Qgc3VyZSB3aG8gcmVwb3J0ZWQgdGhpcyBvcmlnaW5hbGx5IGJ1dAorICogUGF2ZWwgTWFjaGVrIDxwYXZlbEB1Y3cuY3o+IHJlcG9ydGVkIHRoYXQgdGhlIGV4dHJhIFVTX0ZMX1NJTkdMRV9MVU4KKyAqIGZsYWcgYmUgYWRkZWQgKi8KK1VOVVNVQUxfREVWKCAgMHgwNGNiLCAweDAxMDAsIDB4MDAwMCwgMHgyMjEwLAorCQkiRnVqaWZpbG0iLAorCQkiRmluZVBpeCAxNDAwWm9vbSIsCisJCVVTX1NDX1VGSSwgVVNfUFJfREVWSUNFLCBOVUxMLCBVU19GTF9GSVhfSU5RVUlSWSB8IFVTX0ZMX1NJTkdMRV9MVU4pLAorCisvKiBSZXBvcnRlZCBieSBQZXRlciBX5GNodGxlciA8cHdhZWNodGxlckBsb2V3ZS1rb21wLmRlPgorICogVGhlIGRldmljZSBuZWVkcyB0aGUgZmxhZ3Mgb25seS4KKyAqLworVU5VU1VBTF9ERVYoICAweDA0Y2UsIDB4MDAwMiwgMHgwMDc0LCAweDAwNzQsCisJCSJTY2FuTG9naWMiLAorCQkiU0wxMVItSURFIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9JTlFVSVJZKSwKKworLyogUmVwb3J0ZWQgYnkgS3Jpc3RvbiBGaW5jaGVyIDxrcmlzdG9uQGFpcm1haWwubmV0PgorICogUGF0Y2ggc3VibWl0dGVkIGJ5IFNlYW4gTWlsbGljaGFtcCA8c2VhbkBicnVlbm9yLm9yZz4KKyAqIFRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgUGFuYXNvbmljIFBhbG1DYW0gUFYtU0Q0MDkwCisgKiBUaGlzIGVudHJ5IGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBkZXZpY2UgcmVwb3J0cyBTdWI9ZmYgCisgKi8KK1VOVVNVQUxfREVWKCAgMHgwNGRhLCAweDA5MDEsIDB4MDEwMCwgMHgwMjAwLAorCQkiUGFuYXNvbmljIiwKKwkJIkxTLTEyMCBDYW1lcmEiLAorCQlVU19TQ19VRkksIFVTX1BSX0RFVklDRSwgTlVMTCwgMCksCisKKy8qIEZyb20gWXVraWhpcm8gTmFrYWksIHZpYSB6YWl0Y2V2QHlhaG9vLmNvbS4KKyAqIFRoaXMgaXMgbmVlZGVkIGZvciBDQiBpbnN0ZWFkIG9mIENCSSAqLworVU5VU1VBTF9ERVYoICAweDA0ZGEsIDB4MGQwNSwgMHgwMDAwLCAweDAwMDAsCisJCSJTaGFycCBDRS1DVzA1IiwKKwkJIkNELVIvUlcgRHJpdmUiLAorCQlVU19TQ184MDcwLCBVU19QUl9DQiwgTlVMTCwgMCksCisKKy8qIFJlcG9ydGVkIGJ5IEFkcmlhYW4gUGVubmluZyA8YS5wZW5uaW5nQGx1b24ubmV0PiAqLworVU5VU1VBTF9ERVYoICAweDA0ZGEsIDB4MjM3MiwgMHgwMDAwLCAweDk5OTksCisJCSJQYW5hc29uaWMiLAorCQkiRE1DLUxDeCBDYW1lcmEiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfRklYX0NBUEFDSVRZIHwgVVNfRkxfTk9UX0xPQ0tBQkxFICksCisKKy8qIE1vc3Qgb2YgdGhlIGZvbGxvd2luZyBlbnRyaWVzIHdlcmUgZGV2ZWxvcGVkIHdpdGggdGhlIGhlbHAgb2YKKyAqIFNodXR0bGUvU0NNIGRpcmVjdGx5LgorICovCitVTlVTVUFMX0RFViggIDB4MDRlNiwgMHgwMDAxLCAweDAyMDAsIDB4MDIwMCwgCisJCSJNYXRzaGl0YSIsCisJCSJMUy0xMjAiLAorCQlVU19TQ184MDIwLCBVU19QUl9DQiwgTlVMTCwgMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMDIsIDB4MDEwMCwgMHgwMTAwLCAKKwkJIlNodXR0bGUiLAorCQkiZVVTQ1NJIEJyaWRnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9ldXNjc2lfaW5pdCwgCisJCVVTX0ZMX1NDTV9NVUxUX1RBUkcgKSwgCisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5CitVTlVTVUFMX0RFViggIDB4MDRlNiwgMHgwMDAzLCAweDAwMDAsIDB4OTk5OSwgCisJCSJTYW5kaXNrIiwKKwkJIkltYWdlTWF0ZSBTRERSMDkiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9FVVNCX1NERFIwOSwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiApLAorCisvKiBUaGlzIGVudHJ5IGlzIGZyb20gQW5kcmllcy5Ccm91d2VyQGN3aS5ubCAqLworVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwNSwgMHgwMTAwLCAweDAyMDgsCisJCSJTQ00gTWljcm9zeXN0ZW1zIiwKKwkJImVVU0IgU21hcnRNZWRpYSAvIENvbXBhY3RGbGFzaCBBZGFwdGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfRFBDTV9VU0IsIHNkZHIwOV9pbml0LCAKKwkJMCksIAorI2VuZGlmCisKKy8qIFJlcG9ydGVkIGJ5IE1hcmt1cyBEZW1sZWl0bmVyIDxtc2RlbWxlaUBjbC51bmktaGVpZGVsYmVyZy5kZT4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMDYsIDB4MDEwMCwgMHgwMTAwLCAKKwkJIlNDTSBNaWNyb3N5c3RlbXMgSW5jLiIsCisJCSJlVVNCIE1NQyBBZGFwdGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfQ0IsIE5VTEwsIAorCQlVU19GTF9TSU5HTEVfTFVOKSwgCisKKy8qIFJlcG9ydGVkIGJ5IERhbmllbCBOb3VyaSA8ZHB1bmt0bnB1bmt0QHdlYi5kZT4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMDYsIDB4MDIwNSwgMHgwMjA1LCAKKwkJIlNodXR0bGUiLAorCQkiZVVTQiBNTUMgQWRhcHRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RFVklDRSwgTlVMTCwgCisJCVVTX0ZMX1NJTkdMRV9MVU4pLCAKKworVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwNywgMHgwMTAwLCAweDAyMDAsIAorCQkiU29ueSIsCisJCSJIaWZkIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfQ0IsIE5VTEwsIAorCQlVU19GTF9TSU5HTEVfTFVOKSwgCisKK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMDksIDB4MDIwMCwgMHgwMjAwLCAKKwkJIlNodXR0bGUiLAorCQkiZVVTQiBBVEEvQVRBUEkgQWRhcHRlciIsCisJCVVTX1NDXzgwMjAsIFVTX1BSX0NCLCBOVUxMLCAwKSwKKworVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwYSwgMHgwMjAwLCAweDAyMDAsIAorCQkiU2h1dHRsZSIsCisJCSJlVVNCIENvbXBhY3RGbGFzaCBBZGFwdGVyIiwKKwkJVVNfU0NfODAyMCwgVVNfUFJfQ0IsIE5VTEwsIDApLAorCitVTlVTVUFMX0RFViggIDB4MDRlNiwgMHgwMDBCLCAweDAxMDAsIDB4MDEwMCwgCisJCSJTaHV0dGxlIiwKKwkJImVVU0NTSSBCcmlkZ2UiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9CVUxLLCB1c2Jfc3Rvcl9ldXNjc2lfaW5pdCwgCisJCVVTX0ZMX1NDTV9NVUxUX1RBUkcgKSwgCisKK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMEMsIDB4MDEwMCwgMHgwMTAwLCAKKwkJIlNodXR0bGUiLAorCQkiZVVTQ1NJIEJyaWRnZSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0JVTEssIHVzYl9zdG9yX2V1c2NzaV9pbml0LCAKKwkJVVNfRkxfU0NNX01VTFRfVEFSRyApLCAKKworVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDEwMSwgMHgwMjAwLCAweDAyMDAsIAorCQkiU2h1dHRsZSIsCisJCSJDRC1SVyBEZXZpY2UiLAorCQlVU19TQ184MDIwLCBVU19QUl9DQiwgTlVMTCwgMCksCisKKy8qIEVudHJ5IGFuZCBzdXBwb3J0aW5nIHBhdGNoIGJ5IFRoZW9kb3JlIEtpbGdvcmUgPGtpbGdvdGFAYXVidXJuLmVkdT4uCisgKiBEZXZpY2UgdXNlcyBzdGFuZGFyZHMtdmlvbGF0aW5nIDMyLWJ5dGUgQnVsayBDb21tYW5kIEJsb2NrIFdyYXBwZXJzIGFuZAorICogcmVwb3J0cyBpdHNlbGYgYXMgIlByb3ByaWV0YXJ5IFNDU0kgQnVsay4iIENmLiBkZXZpY2UgZW50cnkgMHgwODRkOjB4MDAxMS4KKyAqLworCitVTlVTVUFMX0RFViggIDB4MDRmYywgMHg4MGMyLCAweDAxMDAsIDB4MDEwMCwKKwkJIktvYmlhbiBNZXJjdXJ5IiwKKwkJIkJpbm9jYW0gRENCLTEzMiIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9CVUxLMzIpLAorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCitVTlVTVUFMX0RFViggIDB4MDRlNiwgMHgxMDEwLCAweDAwMDAsIDB4OTk5OSwKKwkJIlNDTSIsCisJCSJTQ00gVVNCQVQtMDIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9TQ01fQVRBUEksIGluaXRfdXNiYXQsCisJCVVTX0ZMX1NJTkdMRV9MVU4pLAorI2VuZGlmCisKKy8qIFJlcG9ydGVkIGJ5IEJvYiBTYXNzIDxybHNAdmVjdG9yZGIuY29tPiAtLSBvbmx5IHJldiAxLjMzIHRlc3RlZCAqLworVU5VU1VBTF9ERVYoICAweDA1MGQsIDB4MDExNSwgMHgwMTMzLCAweDAxMzMsCisJCSJCZWxraW4iLAorCQkiVVNCIFNDU0kgQWRhcHRvciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0JVTEssIHVzYl9zdG9yX2V1c2NzaV9pbml0LAorCQlVU19GTF9TQ01fTVVMVF9UQVJHICksCisKKy8qIElvbWVnYSBDbGlrISBEcml2ZSAKKyAqIFJlcG9ydGVkIGJ5IERhdmlkIENoYXRlbmF5IDxkY2hhdGVuYXlAaG90bWFpbC5jb20+CisgKiBUaGUgcmVhc29uIHRoaXMgaXMgbmVlZGVkIGlzIG5vdCBmdWxseSBrbm93bi4KKyAqLworVU5VU1VBTF9ERVYoICAweDA1MjUsIDB4YTE0MCwgMHgwMTAwLCAweDAxMDAsCisJCSJJb21lZ2EiLAorCQkiVVNCIENsaWshIDQwIiwKKwkJVVNfU0NfODA3MCwgVVNfUFJfQlVMSywgTlVMTCwKKwkJVVNfRkxfRklYX0lOUVVJUlkgKSwKKworLyogWWFrdW1vIE1lZ2EgSW1hZ2UgMzcKKyAqIFN1Ym1pdHRlZCBieSBTdGVwaGFuIEZ1aHJtYW5uIDxhdG9tZW5lcmdpZUB0LW9ubGluZS5kZT4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNTJiLCAweDE4MDEsIDB4MDEwMCwgMHgwMTAwLAorCQkiVGVrb20gVGVjaG5vbG9naWVzLCBJbmMiLAorCQkiMzAwX0NBTUVSQSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JR05PUkVfUkVTSURVRSApLAorCisvKiBBbm90aGVyIFlha3VtbyBjYW1lcmEuCisgKiBSZXBvcnRlZCBieSBNaWNoZWxlIEFsemV0dGEgPG1pY2hlbGUuYWx6ZXR0YUBhbGljZXBvc3RhLml0PiAqLworVU5VU1VBTF9ERVYoICAweDA1MmIsIDB4MTgwNCwgMHgwMTAwLCAweDAxMDAsCisJCSJUZWtvbSBUZWNobm9sb2dpZXMsIEluYyIsCisJCSIzMDBfQ0FNRVJBIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCisKKy8qIFJlcG9ydGVkIGJ5IElhY29wbyBTcGFsbGV0dGkgPGF2dmlzaUBzcGFsbGV0dGkuaXQ+ICovCitVTlVTVUFMX0RFViggIDB4MDUyYiwgMHgxODA3LCAweDAxMDAsIDB4MDEwMCwKKwkJIlRla29tIFRlY2hub2xvZ2llcywgSW5jIiwKKwkJIjMwMF9DQU1FUkEiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgKSwKKworLyogWWFrdW1vIE1lZ2EgSW1hZ2UgNDcKKyAqIFJlcG9ydGVkIGJ5IEJqb2VybiBQYWV0emVsIDxrb2xyYWJpQGtvbHJhYmkuZGU+ICovCitVTlVTVUFMX0RFViggIDB4MDUyYiwgMHgxOTA1LCAweDAxMDAsIDB4MDEwMCwKKwkJIlRla29tIFRlY2hub2xvZ2llcywgSW5jIiwKKwkJIjQwMF9DQU1FUkEiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgKSwKKworLyogUmVwb3J0ZWQgYnkgUGF1bCBPcnR5bCA8b3J0eWxwQDNtaWFzdG8ubmV0PgorICogTm90ZSB0aGF0IGl0J3Mgc2ltaWxhciB0byB0aGUgZGV2aWNlIGFib3ZlLCBvbmx5IGRpZmZlcmVudCBwcm9kSUQgKi8KK1VOVVNVQUxfREVWKCAgMHgwNTJiLCAweDE5MTEsIDB4MDEwMCwgMHgwMTAwLAorCQkiVGVrb20gVGVjaG5vbG9naWVzLCBJbmMiLAorCQkiNDAwX0NBTUVSQSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JR05PUkVfUkVTSURVRSApLAorCitVTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDEwLCAweDAxMDYsIDB4MDQ1MCwgCisJCSJTb255IiwKKwkJIkRTQy1TMzAvUzcwL1M3NS81MDVWL0Y1MDUvRjcwNy9GNzE3L1A4IiwgCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiB8IFVTX0ZMX05PVF9MT0NLQUJMRSB8IFVTX0ZMX05PX1dQX0RFVEVDVCApLAorCisvKiBUaGlzIGVudHJ5IGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBkZXZpY2UgcmVwb3J0cyBTdWI9ZmYgKi8KK1VOVVNVQUxfREVWKCAgMHgwNTRjLCAweDAwMTAsIDB4MDUwMCwgMHgwNTAwLCAKKyAgICAgICAgICAgICAgICJTb255IiwKKyAgICAgICAgICAgICAgICJEU0MtVDEiLCAKKyAgICAgICAgICAgICAgIFVTX1NDXzgwNzAsIFVTX1BSX0RFVklDRSwgTlVMTCwKKyAgICAgICAgICAgICAgIFVTX0ZMX1NJTkdMRV9MVU4gKSwKKworCisvKiBSZXBvcnRlZCBieSB3aW1AZ2Vla3MubmwgKi8KK1VOVVNVQUxfREVWKCAgMHgwNTRjLCAweDAwMjUsIDB4MDEwMCwgMHgwMTAwLCAKKwkJIlNvbnkiLAorCQkiTWVtb3J5c3RpY2sgTlctTVM3IiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAKK1VOVVNVQUxfREVWKCAgMHgwNTRjLCAweDAwMmIsIDB4MDEwMCwgMHgwMTEwLAorCQkiU29ueSIsCisJCSJQb3J0YWJsZSBVU0IgSGFyZGRyaXZlIFYyIiwKKwkJVVNfU0NfSVNEMjAwLCBVU19QUl9CVUxLLCBpc2QyMDBfSW5pdGlhbGl6YXRpb24sCisJCTAgKSwKKyNlbmRpZgorCisvKiBTdWJtaXR0ZWQgYnkgT2xhZiBIZXJpbmcsIDxvbGhAc3VzZS5kZT4gU3VTRSBCdWd6aWxsYSAjNDkwNDkgKi8KK1VOVVNVQUxfREVWKCAgMHgwNTRjLCAweDAwMmMsIDB4MDUwMSwgMHgwNTAxLAorCQkiU29ueSIsCisJCSJVU0IgRmxvcHB5IERyaXZlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKKworVU5VU1VBTF9ERVYoICAweDA1NGMsIDB4MDAyZCwgMHgwMTAwLCAweDAxMDAsIAorCQkiU29ueSIsCisJCSJNZW1vcnlzdGljayBNU0FDLVVTMSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOICksCisKKy8qIFN1Ym1pdHRlZCBieSBLbGF1cyBNdWVsbGVyIDxrLm11ZWxsZXJAaW50ZXJzaG9wLmRlPiAqLworVU5VU1VBTF9ERVYoICAweDA1NGMsIDB4MDAyZSwgMHgwMTA2LCAweDAzMTAsIAorCQkiU29ueSIsCisJCSJIYW5keWNhbSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiApLAorCisvKiBTdWJtaXR0ZWQgYnkgUmFqZXNoIEt1bWJsZSBOYXlhayA8bmF5YWtAb2JzLW5pY2UuZnI+ICovCitVTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDJlLCAweDA1MDAsIDB4MDUwMCwgCisJCSJTb255IiwKKwkJIkhhbmR5Y2FtIEhDLTg1IiwKKwkJVVNfU0NfVUZJLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKKworVU5VU1VBTF9ERVYoICAweDA1NGMsIDB4MDAzMiwgMHgwMDAwLCAweDk5OTksCisJCSJTb255IiwKKwkJIk1lbW9yeXN0aWNrIE1TQy1VMDFOIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKKworLyogU3VibWl0dGVkIGJ5IE1pY2hhbCBNbG90ZWsgPG1sb3Rla0Bmb29iYXIucGw+ICovCitVTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDU4LCAweDAwMDAsIDB4OTk5OSwKKwkJIlNvbnkiLAorCQkiUEVHIE43NjBjIE1lbW9yeXN0aWNrIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9JTlFVSVJZICksCisJCQorVU5VU1VBTF9ERVYoICAweDA1NGMsIDB4MDA2OSwgMHgwMDAwLCAweDk5OTksCisJCSJTb255IiwKKwkJIk1lbW9yeXN0aWNrIE1TQy1VMDMiLAorCQlVU19TQ19VRkksIFVTX1BSX0NCLCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOICksCisKKy8qIFN1Ym1pdHRlZCBieSBOYXRoYW4gQmFiYiA8bmF0aGFuQGxleGkuY29tPiAqLworVU5VU1VBTF9ERVYoICAweDA1NGMsIDB4MDA2ZCwgMHgwMDAwLCAweDk5OTksCisJCSJTb255IiwKKwkJIlBFRyBNYXNzIFN0b3JhZ2UiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfRklYX0lOUVVJUlkgKSwKKworLyogU3VibWl0dGVkIGJ5IE1pa2UgQWxib3JuIDxtYWxib3JuQGRlYW5kcmEuaG9tZWlwLm5ldD4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNTRjLCAweDAxNmEsIDB4MDAwMCwgMHg5OTk5LAorCQkiU29ueSIsCisJCSJQRUcgTWFzcyBTdG9yYWdlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9JTlFVSVJZICksCisJCQorLyogU3VibWl0dGVkIGJ5IEZyYW5rIEVuZ2VsIDxmcmFua2llQGNzZS51bnN3LmVkdS5hdT4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNTRjLCAweDAwOTksIDB4MDAwMCwgMHg5OTk5LAorICAgICAgICAgICAgICAgICJTb255IiwKKyAgICAgICAgICAgICAgICAiUEVHIE1hc3MgU3RvcmFnZSIsCisgICAgICAgICAgICAgICAgVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisgICAgICAgICAgICAgICAgVVNfRkxfRklYX0lOUVVJUlkgKSwKKworCQkKK1VOVVNVQUxfREVWKCAgMHgwNTdiLCAweDAwMDAsIDB4MDAwMCwgMHgwMjk5LCAKKwkJIlktRSBEYXRhIiwKKwkJIkZsYXNoYnVzdGVyLVUiLAorCQlVU19TQ19ERVZJQ0UsICBVU19QUl9DQiwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiksCisKK1VOVVNVQUxfREVWKCAgMHgwNTdiLCAweDAwMDAsIDB4MDMwMCwgMHg5OTk5LCAKKwkJIlktRSBEYXRhIiwKKwkJIkZsYXNoYnVzdGVyLVUiLAorCQlVU19TQ19ERVZJQ0UsICBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX1NJTkdMRV9MVU4pLAorCisvKiBSZXBvcnRlZCBieSBKb2hhbm4gQ2FyZG9uIDxqb2hhbm4uY2FyZG9uQGZyZWUuZnI+CisgKiBUaGlzIGVudHJ5IGlzIG5lZWRlZCBvbmx5IGJlY2F1c2UgdGhlIGRldmljZSByZXBvcnRzCisgKiBiSW50ZXJmYWNlQ2xhc3MgPSAweGZmICh2ZW5kb3Itc3BlY2lmaWMpCisgKi8KK1VOVVNVQUxfREVWKCAgMHgwNTdiLCAweDAwMjIsIDB4MDAwMCwgMHg5OTk5LCAKKwkJIlktRSBEYXRhIiwKKwkJIlNpbGljb24gTWVkaWEgUi9XIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsIDApLAorCisvKiBGYWJyaXppbyBGZWxsaW5pIDxmZWxsb0BsaWJlcm8uaXQ+ICovCitVTlVTVUFMX0RFViggIDB4MDU5NSwgMHg0MzQzLCAweDAwMDAsIDB4MjIxMCwKKwkJIkZ1amlmaWxtIiwKKwkJIkRpZ2l0YWwgQ2FtZXJhIEVYLTIwIERTQyIsCisJCVVTX1NDXzgwNzAsIFVTX1BSX0RFVklDRSwgTlVMTCwgMCApLAorCisvKiBUaGUgZW50cnkgd2FzIGhlcmUgYmVmb3JlIEkgdG9vayBvdmVyLCBhbmQgaGFkIFVTX1NDX1JCQy4gSXQgdHVybnMKKyAqIG91dCB0aGF0IGlzbid0IG5lZWRlZC4gQWRkaXRpb25hbGx5LCBUb3JzdGVuIEVyaWtzc29uCisgKiA8VG9yc3Rlbi5Fcmlrc3NvbkBiZXJnaWFuc2thLnNlPiBpcyBhYmxlIHRvIHVzZSBoaXMgZGV2aWNlIGZpbmUKKyAqIHdpdGhvdXQgdGhpcyBlbnRyeSBhdCBhbGwgLSBidXQgSSBkb24ndCBzdXNwZWN0IHRoYXQgd2lsbCBiZSB0cnVlCisgKiBmb3IgYWxsIHVzZXJzICh0aGUgcHJvdG9jb2wgaXMgbGlrZWx5IG5lZWRlZCksIHNvIGlzIHN0YXlpbmcgYXQKKyAqIHRoaXMgdGltZS4gLSBQaGlsIERpYm93aXR6IDxwaGlsQGlwb20uY29tPgorICovCitVTlVTVUFMX0RFViggIDB4MDU5ZiwgMHhhNjAxLCAweDAyMDAsIDB4MDIwMCwgCisJCSJMYUNpZSIsCisJCSJVU0IgSGFyZCBEaXNrIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9DQiwgTlVMTCwgMCApLAorCisvKiBTdWJtaXR0ZWQgYnkgSm9lbCBCb3VycXVhcmQgPG51bWxvY2tAZnJlZXN1cmYuY2g+CisgKiBTb21lIHZlcnNpb25zIG9mIHRoaXMgZGV2aWNlIG5lZWQgdGhlIFN1YkNsYXNzIGFuZCBQcm90b2NvbCBvdmVycmlkZXMKKyAqIHdoaWxlIG90aGVycyBkb24ndC4KKyAqLworVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4MDA2MCwgMHgxMTA0LCAweDExMTAsCisJCSJJbi1TeXN0ZW0iLAorCQkiUHlyb0dhdGUgRXh0ZXJuYWwgQ0QtUk9NIEVuY2xvc3VyZSAoRkNELTUyMykiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9CVUxLLCBOVUxMLAorCQlVU19GTF9ORUVEX09WRVJSSURFICksCisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwCitVTlVTVUFMX0RFViggIDB4MDVhYiwgMHgwMDMxLCAweDAxMDAsIDB4MDExMCwKKwkJIkluLVN5c3RlbSIsCisJCSJVU0IvSURFIEJyaWRnZSAoQVRBL0FUQVBJKSIsCisJCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAorCQkwICksCisKK1VOVVNVQUxfREVWKCAgMHgwNWFiLCAweDAzMDEsIDB4MDEwMCwgMHgwMTEwLAorCQkiSW4tU3lzdGVtIiwKKwkJIlBvcnRhYmxlIFVTQiBIYXJkZHJpdmUgVjIiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCApLAorCitVTlVTVUFMX0RFViggIDB4MDVhYiwgMHgwMzUxLCAweDAxMDAsIDB4MDExMCwKKwkJIkluLVN5c3RlbSIsCisJCSJQb3J0YWJsZSBVU0IgSGFyZGRyaXZlIFYyIiwKKwkJVVNfU0NfSVNEMjAwLCBVU19QUl9CVUxLLCBpc2QyMDBfSW5pdGlhbGl6YXRpb24sCisJCTAgKSwKKworVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4NTcwMSwgMHgwMTAwLCAweDAxMTAsCisJCSJJbi1TeXN0ZW0iLAorCQkiVVNCIFN0b3JhZ2UgQWRhcHRlciBWMiIsCisJCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAorCQkwICksCisjZW5kaWYKKworLyogUmVwb3J0ZWQgYnkgQXZpIEtpdml0eSA8YXZpQGFyZ28uY28uaWw+ICovCitVTlVTVUFMX0RFViggMHgwNWFjLCAweDEyMDMsIDB4MDAwMSwgMHgwMDAxLAorCQkiQXBwbGUiLAorCQkiaVBvZCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfQ0FQQUNJVFkgKSwKKworVU5VU1VBTF9ERVYoIDB4MDVhYywgMHgxMjA1LCAweDAwMDEsIDB4MDAwMSwKKwkJIkFwcGxlIiwKKwkJImlQb2QiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfRklYX0NBUEFDSVRZICksCisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QKK1VOVVNVQUxfREVWKCAgMHgwNWRjLCAweDAwMDEsIDB4MDAwMCwgMHgwMDAxLAorCQkiTGV4YXIiLAorCQkiSnVtcHNob3QgVVNCIENGIFJlYWRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0pVTVBTSE9ULCBOVUxMLAorCQlVU19GTF9ORUVEX09WRVJSSURFICksCisjZW5kaWYKKworLyogUmVwb3J0ZWQgYnkgQmxha2UgTWF0aGVueSA8Ym1hdGhlbnlAcHVyZHVlLmVkdT4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNWRjLCAweGIwMDIsIDB4MDAwMCwgMHgwMTEzLAorCQkiTGV4YXIiLAorCQkiVVNCIENGIFJlYWRlciIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfSU5RVUlSWSApLAorCisvKiBUaGUgZm9sbG93aW5nIHR3byBlbnRyaWVzIGFyZSBmb3IgYSBHZW5lc3lzIFVTQiB0byBJREUKKyAqIGNvbnZlcnRlciBjaGlwLCBidXQgaXQgY2hhbmdlcyBpdHMgUHJvZHVjdElkIGRlcGVuZGluZworICogb24gd2hldGhlciBvciBub3QgYSBkaXNrIG9yIGFuIG9wdGljYWwgZGV2aWNlIGlzIGVuY2xvc2VkCisgKiBUaGV5IHdlcmUgb3JpZ2luYWxseSByZXBvcnRlZCBieSBBbGV4YW5kZXIgT2x0dQorICogPGFsZXhhbmRlckBhbGwtMi5jb20+IGFuZCBQZXRlciBNYXJrcyA8cGV0ZXIubWFya3NAdHVybmVyLmNvbT4KKyAqIHJlc3BlY3RpdmVseS4KKyAqLworVU5VU1VBTF9ERVYoICAweDA1ZTMsIDB4MDcwMSwgMHgwMDAwLCAweGZmZmYsCisJCSJHZW5lc3lzIExvZ2ljIiwKKwkJIlVTQiB0byBJREUgT3B0aWNhbCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9HT19TTE9XICksCisKK1VOVVNVQUxfREVWKCAgMHgwNWUzLCAweDA3MDIsIDB4MDAwMCwgMHhmZmZmLAorCQkiR2VuZXN5cyBMb2dpYyIsCisJCSJVU0IgdG8gSURFIERpc2siLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfR09fU0xPVyApLAorCisvKiBSZXBvcnRlZCBieSBIYW5ubyBCb2VjayA8aGFubm9AZ214LmRlPgorICogVGFrZW4gZnJvbSB0aGUgTHljb3JpcyBLZXJuZWwgKi8KK1VOVVNVQUxfREVWKCAgMHgwNjM2LCAweDAwMDMsIDB4MDAwMCwgMHg5OTk5LAorCQkiVml2aXRhciIsCisJCSJWaXZpY2FtIDM1WHgiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9CVUxLLCBOVUxMLAorCQlVU19GTF9GSVhfSU5RVUlSWSApLAorCitVTlVTVUFMX0RFViggIDB4MDY0NCwgMHgwMDAwLCAweDAxMDAsIDB4MDEwMCwgCisJCSJURUFDIiwKKwkJIkZsb3BweSBEcml2ZSIsCisJCVVTX1NDX1VGSSwgVVNfUFJfQ0IsIE5VTEwsIDAgKSwgCisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5CitVTlVTVUFMX0RFViggIDB4MDY2YiwgMHgwMTA1LCAweDAxMDAsIDB4MDEwMCwgCisJCSJPbHltcHVzIiwKKwkJIkNhbWVkaWEgTUFVU0ItMiIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOICksCisjZW5kaWYKKworLyogUmVwb3J0ZWQgYnkgRGFyc2VuIEx1IDxkYXJzZW5AbWljcm8uZWUubnRodS5lZHUudHc+ICovCitVTlVTVUFMX0RFViggMHgwNjZmLCAweDgwMDAsIDB4MDAwMSwgMHgwMDAxLAorCQkiU2lnbWFUZWwiLAorCQkiVVNCTVNDIEF1ZGlvIFBsYXllciIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfQ0FQQUNJVFkgKSwKKworLyogUmVwb3J0ZWQgYnkgUmljaGFyZCAtPVtdPS0gPG1pY3JvX2ZseWVyQGhvdG1haWwuY29tPiAqLworVU5VU1VBTF9ERVYoIDB4MDY3YiwgMHgyNTA3LCAweDAxMDAsIDB4MDEwMCwKKwkJIlByb2xpZmljIFRlY2hub2xvZ3kgSW5jLiIsCisJCSJNYXNzIFN0b3JhZ2UgRGV2aWNlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSB8IFVTX0ZMX0dPX1NMT1cgKSwKKworLyogUmVwb3J0ZWQgYnkgQWxleCBCdXRjaGVyIDxhbGV4LmJ1dGNoZXJAYXNzdXJzeXMuY28udWs+ICovCitVTlVTVUFMX0RFViggMHgwNjdiLCAweDM1MDcsIDB4MDAwMSwgMHgwMDAxLAorCQkiUHJvbGlmaWMgVGVjaG5vbG9neSBJbmMuIiwKKwkJIkFUQVBJLTYgQnJpZGdlIENvbnRyb2xsZXIiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfRklYX0NBUEFDSVRZIHwgVVNfRkxfR09fU0xPVyApLAorCisvKiBTdWJtaXR0ZWQgYnkgQmVubnkgU2pvc3RyYW5kIDxiZW5ueUBob3N0bW9iaWxpdHkuY29tPiAqLworVU5VU1VBTF9ERVYoIDB4MDY4NiwgMHg0MDExLCAweDAwMDEsIDB4MDAwMSwKKwkJIk1pbm9sdGEiLAorCQkiRGltYWdlIEYzMDAiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9CVUxLLCBOVUxMLCAwICksCisKKy8qIFJlcG9ydGVkIGJ5IE1pZ3VlbCBBLiBGb3NhcyA8YW1uM3MxYUBvbm8uY29tPiAqLworVU5VU1VBTF9ERVYoICAweDA2ODYsIDB4NDAxNywgMHgwMDAxLCAweDAwMDEsCisgICAgICAgICAgICAgICAgIk1pbm9sdGEiLAorICAgICAgICAgICAgICAgICJESU1BR0UgRTIyMyIsCisgICAgICAgICAgICAgICAgVVNfU0NfU0NTSSwgVVNfUFJfREVWSUNFLCBOVUxMLCAwICksCisKK1VOVVNVQUxfREVWKCAgMHgwNjkzLCAweDAwMDIsIDB4MDEwMCwgMHgwMTAwLCAKKwkJIkhhZ2l3YXJhIiwKKwkJIkZsYXNoR2F0ZSBTbWFydE1lZGlhIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfQlVMSywgTlVMTCwgMCApLAorCitVTlVTVUFMX0RFViggIDB4MDY5MywgMHgwMDA1LCAweDAxMDAsIDB4MDEwMCwKKwkJIkhhZ2l3YXJhIiwKKwkJIkZsYXNoZ2F0ZSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0JVTEssIE5VTEwsIDAgKSwgCisKK1VOVVNVQUxfREVWKCAgMHgwNzgxLCAweDAwMDEsIDB4MDIwMCwgMHgwMjAwLCAKKwkJIlNhbmRpc2siLAorCQkiSW1hZ2VNYXRlIFNERFItMDVhIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfQ0IsIE5VTEwsCisJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKKworVU5VU1VBTF9ERVYoICAweDA3ODEsIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsCisJCSJTYW5kaXNrIiwKKwkJIkltYWdlTWF0ZSBTRERSLTEyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfQ0IsIE5VTEwsCisJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKK1VOVVNVQUxfREVWKCAgMHgwNzgxLCAweDAyMDAsIDB4MDAwMCwgMHg5OTk5LCAKKwkJIlNhbmRpc2siLAorCQkiSW1hZ2VNYXRlIFNERFItMDkiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9FVVNCX1NERFIwOSwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiApLAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTQorVU5VU1VBTF9ERVYoICAweDA3YWIsIDB4ZmMwMSwgMHgwMDAwLCAweDk5OTksCisJCSJGcmVlY29tIiwKKwkJIlVTQi1JREUiLAorCQlVU19TQ19RSUMsIFVTX1BSX0ZSRUVDT00sIGZyZWVjb21faW5pdCwgMCksCisjZW5kaWYKKworLyogUmVwb3J0ZWQgYnkgRWVybyBWb2xvdGluZW4gPGVlcm9AcGluZy12aWluaS5vcmc+ICovCitVTlVTVUFMX0RFViggIDB4MDdhYiwgMHhmY2NkLCAweDA0MDYsIDB4MDQwNiwKKwkJIkZyZWVjb20gVGVjaG5vbG9naWVzIiwKKwkJIkZIRC1DbGFzc2ljIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSksCisKK1VOVVNVQUxfREVWKCAgMHgwN2FmLCAweDAwMDQsIDB4MDEwMCwgMHgwMTMzLCAKKwkJIk1pY3JvdGVjaCIsCisJCSJVU0ItU0NTSS1EQjI1IiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfQlVMSywgdXNiX3N0b3JfZXVzY3NpX2luaXQsCisJCVVTX0ZMX1NDTV9NVUxUX1RBUkcgKSwgCisKK1VOVVNVQUxfREVWKCAgMHgwN2FmLCAweDAwMDUsIDB4MDEwMCwgMHgwMTAwLCAKKwkJIk1pY3JvdGVjaCIsCisJCSJVU0ItU0NTSS1IRDUwIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfQlVMSywgdXNiX3N0b3JfZXVzY3NpX2luaXQsCisJCVVTX0ZMX1NDTV9NVUxUX1RBUkcgKSwgCisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTQorVU5VU1VBTF9ERVYoICAweDA3YWYsIDB4MDAwNiwgMHgwMTAwLCAweDAxMDAsCisJCSJNaWNyb3RlY2giLAorCQkiQ2FtZXJhTWF0ZSAoRFBDTV9VU0IpIiwKKyAJCVVTX1NDX1NDU0ksIFVTX1BSX0RQQ01fVVNCLCBOVUxMLCAwICksCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCCitVTlVTVUFMX0RFViggIDB4MDdjNCwgMHhhMDAwLCAweDAwMDAsIDB4MDAxNSwKKwkJIkRhdGFmYWIiLAorCQkiTURDRkUtQiBVU0IgQ0YgUmVhZGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCApLAorCisvKgorICogVGhlIGZvbGxvd2luZyBEYXRhZmFiLWJhc2VkIGRldmljZXMgbWF5IG9yIG1heSBub3Qgd29yaworICogdXNpbmcgdGhlIGN1cnJlbnQgZHJpdmVyLi4udGhlIDB4ZmZmZiBpcyBhcmJpdHJhcnkgc2luY2UgSQorICogZG9uJ3Qga25vdyB3aGF0IGRldmljZSB2ZXJzaW9ucyBleGlzdCBmb3IgdGhlc2UgZ3V5cy4KKyAqCisgKiBUaGUgMHhhMDAzIGFuZCAweGEwMDQgZGV2aWNlcyBpbiBwYXJ0aWN1bGFyIEknbSBjdXJpb3VzIGFib3V0LgorICogSSdtIHRvbGQgdGhleSBleGlzdCBidXQgc28gZmFyIG5vYm9keSBoYXMgY29tZSBmb3J3YXJkIHRvIHNheSB0aGF0CisgKiB0aGV5IHdvcmsgd2l0aCB0aGlzIGRyaXZlci4gIEdpdmVuIHRoZSBzdWNjZXNzIHdlJ3ZlIGhhZCBnZXR0aW5nCisgKiBvdGhlciBEYXRhZmFiLWJhc2VkIGNhcmRzIG9wZXJhdGlvbmFsIHdpdGggdGhpcyBkcml2ZXIsIEkndmUgZGVjaWRlZAorICogdG8gbGVhdmUgdGhlc2UgdHdvIGRldmljZXMgaW4gdGhlIGxpc3QuCisgKi8KK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwMSwgMHgwMDAwLCAweGZmZmYsCisJCSJTSUlHL0RhdGFmYWIiLAorCQkiU0lJRy9EYXRhZmFiIE1lbW9yeSBTdGljaytDRiBSZWFkZXIvV3JpdGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCApLAorCisvKiBSZXBvcnRlZCBieSBKb3NlZiBSZWlzaW5nZXIgPGpvc2VmLnJlaXNpbmdlckBuZXRjb2xvZ25lLmRlPiAqLworVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDAyLCAweDAwMDAsIDB4ZmZmZiwKKwkJIkRhdGFmYWIvVW5rbm93biIsCisJCSJNRDIvTUQzIERpc2sgZW5jbG9zdXJlIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiApLAorCitVTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDMsIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYi9Vbmtub3duIiwKKwkJIkRhdGFmYWItYmFzZWQgUmVhZGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCApLAorCitVTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDQsIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYi9Vbmtub3duIiwKKwkJIkRhdGFmYWItYmFzZWQgUmVhZGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCApLAorCitVTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDUsIDB4MDAwMCwgMHhmZmZmLAorCQkiUE5ZL0RhdGFmYWIiLAorCQkiUE5ZL0RhdGFmYWIgQ0YrU00gUmVhZGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCApLAorCitVTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDYsIDB4MDAwMCwgMHhmZmZmLAorCQkiU2ltcGxlIFRlY2gvRGF0YWZhYiIsCisJCSJTaW1wbGUgVGVjaC9EYXRhZmFiIENGK1NNIFJlYWRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCTAgKSwKKyNlbmRpZgorCQkKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1CisvKiBDb250cmlidXRlZCBieSBQZXRlciBXYWVjaHRsZXIgKi8KK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTEwMywgMHgwMDAwLCAweDk5OTksCisJCSJEYXRhZmFiIiwKKwkJIk1EU00tQiByZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9TRERSNTUsIE5VTEwsCisJCVVTX0ZMX0ZJWF9JTlFVSVJZICksCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCCisvKiBTdWJtaXR0ZWQgYnkgT2xhZiBIZXJpbmcgPG9saEBzdXNlLmRlPiAqLworVU5VU1VBTF9ERVYoICAweDA3YzQsIDB4YTEwOSwgMHgwMDAwLCAweGZmZmYsCisJCSJEYXRhZmFiIFN5c3RlbXMsIEluYy4iLAorCQkiVVNCIHRvIENGICsgU00gQ29tYm8gKExDMSkiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwICksCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1CisvKiBTTSBwYXJ0IC0gYWViIDxBbmRyaWVzLkJyb3V3ZXJAY3dpLm5sPiAqLworVU5VU1VBTF9ERVYoICAweDA3YzQsIDB4YTEwOSwgMHgwMDAwLCAweGZmZmYsCisJCSJEYXRhZmFiIFN5c3RlbXMsIEluYy4iLAorCQkiVVNCIHRvIENGICsgU00gQ29tYm8gKExDMSkiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9TRERSNTUsIE5VTEwsCisJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKKyNlbmRpZgorCisvKiBEYXRhZmFiIEtFQ0YtVVNCIC8gU2FnYXRlayBEQ1MtQ0YgLyBTaW1wbGV0ZWNoIEZsYXNobGluayBVQ0YtMTAwCisgKiBPbmx5IHJldmlzaW9uIDEuMTMgdGVzdGVkIChzYW1lIGZvciBhbGwgb2YgdGhlIGFib3ZlIGRldmljZXMsCisgKiBiYXNlZCBvbiB0aGUgRGF0YWZhYiBERi1VRy0wNyBjaGlwKS4gIE5lZWRlZCBmb3IgVVNfRkxfRklYX0lOUVVJUlkuCisgKiBTdWJtaXR0ZWQgYnkgTWFyZWsgTWljaGFsa2lld2ljeiA8bWFyZWttQGFtZWxlay5nZGEucGw+LgorICogU2VlIGFsc28gaHR0cDovL21hcnRpbi53aWxjay5iZWkudC1vbmxpbmUuZGUvI2tlY2YgLgorICovCitVTlVTVUFMX0RFViggIDB4MDdjNCwgMHhhNDAwLCAweDAwMDAsIDB4ZmZmZiwKKwkJIkRhdGFmYWIiLAorCQkiS0VDRi1VU0IiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfRklYX0lOUVVJUlkgKSwKKworLyogQ2FzaW8gUVYgMngwMC8zeDAwLzQwMDAvODAwMCBkaWdpdGFsIHN0aWxsIGNhbWVyYXMgYXJlIG5vdCBjb25mb3JtYW50CisgKiB0byB0aGUgVVNCIHN0b3JhZ2Ugc3BlY2lmaWNhdGlvbiBpbiB0d28gd2F5czoKKyAqIC0gVGhleSB0ZWxsIHVzIHRoZXkgYXJlIHVzaW5nIHRyYW5zcG9ydCBwcm90b2NvbCBDQkkuIEluIHJlYWxpdHkgdGhleQorICogICBhcmUgdXNpbmcgdHJhbnNwb3J0IHByb3RvY29sIENCLgorICogLSBUaGV5IGRvbid0IGxpa2UgdGhlIElOUVVJUlkgY29tbWFuZC4gU28gd2UgbXVzdCBoYW5kbGUgdGhpcyBjb21tYW5kCisgKiAgIG9mIHRoZSBTQ1NJIGxheWVyIG91cnNlbHZlcy4KKyAqIC0gU29tZSBjYW1lcmFzIHdpdGggaWRQcm9kdWN0PTB4MTAwMSBhbmQgYmNkRGV2aWNlPTB4MTAwMCBoYXZlCisgKiAgIGJJbnRlcmZhY2VQcm90b2NvbD0weDAwIChVU19QUl9DQkkpIHdoaWxlIG90aGVycyBoYXZlIDB4MDEgKFVTX1BSX0NCKS4KKyAqICAgU28gZG9uJ3QgcmVtb3ZlIHRoZSBVU19QUl9DQiBvdmVycmlkZSEKKyAqIC0gQ2FtZXJhcyB3aXRoIGJjZERldmljZT0weDkwMDkgcmVxdWlyZSB0aGUgVVNfU0NfODA3MCBvdmVycmlkZS4KKyAqLworVU5VU1VBTF9ERVYoIDB4MDdjZiwgMHgxMDAxLCAweDEwMDAsIDB4OTk5OSwKKwkJIkNhc2lvIiwKKwkJIlFWIERpZ2l0YWxDYW1lcmEiLAorCQlVU19TQ184MDcwLCBVU19QUl9DQiwgTlVMTCwKKwkJVVNfRkxfTkVFRF9PVkVSUklERSB8IFVTX0ZMX0ZJWF9JTlFVSVJZICksCisKKy8qIFN1Ym1pdHRlZCBieSBIYXJ0bXV0IFdhaGwgPGh3YWhsQGh3YWhsLmRlPiovCitVTlVTVUFMX0RFViggMHgwODM5LCAweDAwMGEsIDB4MDAwMSwgMHgwMDAxLAorCQkiU2Ftc3VuZyIsCisJCSJEaWdpbWF4IDQxMCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfSU5RVUlSWSksCisKKy8qIEVudHJ5IGFuZCBzdXBwb3J0aW5nIHBhdGNoIGJ5IFRoZW9kb3JlIEtpbGdvcmUgPGtpbGdvdGFAYXVidXJuLmVkdT4uCisgKiBGbGFnIHdpbGwgc3VwcG9ydCBCdWxrIGRldmljZXMgd2hpY2ggdXNlIGEgc3RhbmRhcmRzLXZpb2xhdGluZyAzMi1ieXRlCisgKiBDb21tYW5kIEJsb2NrIFdyYXBwZXIuIEhlcmUsIHRoZSAiREMyTUVHQSIgY2FtZXJhcyAoc2V2ZXJhbCBicmFuZHMpIHdpdGgKKyAqIEdyYW5kdGVjaCBHVDg5MnggY2hpcCwgd2hpY2ggcmVxdWVzdCAiUHJvcHJpZXRhcnkgU0NTSSBCdWxrIiBzdXBwb3J0LgorICovCisKK1VOVVNVQUxfREVWKCAgMHgwODRkLCAweDAwMTEsIDB4MDExMCwgMHgwMTEwLAorCQkiR3JhbmR0ZWNoIiwKKwkJIkRDMk1FR0EiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfQlVMSzMyKSwKKworCisvKiBFbnRyeSBuZWVkZWQgZm9yIGZsYWdzLiBNb3Jlb3ZlciwgYWxsIGRldmljZXMgd2l0aCB0aGlzIElEIHVzZQorICogYnVsay1vbmx5IHRyYW5zcG9ydCwgYnV0IF9zb21lXyBmYWxzZWx5IHJlcG9ydCBDb250cm9sL0J1bGsgaW5zdGVhZC4KKyAqIE9uZSBleGFtcGxlIGlzICJUcnVtcGlvbiBEaWdpdGFsIFJlc2VhcmNoIE1ZTVAzIi4KKyAqIFN1Ym1pdHRlZCBieSBCam9lcm4gQnJpbGwgPGJyaWxsKGF0KWZzLm1hdGgudW5pLWZyYW5rZnVydC5kZT4KKyAqLworVU5VU1VBTF9ERVYoICAweDA5MGEsIDB4MTAwMSwgMHgwMTAwLCAweDAxMDAsCisJCSJUcnVtcGlvbiIsCisJCSJ0MzM1MjAgVVNCIEZsYXNoIENhcmQgQ29udHJvbGxlciIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfQlVMSywgTlVMTCwKKwkJVVNfRkxfTkVFRF9PVkVSUklERSApLAorCisvKiBUcnVtcGlvbiBNaWNyb2VsZWN0cm9uaWNzIE1QMyBwbGF5ZXIgKGZlbGlwZV9hbGZhcm9AbGludXhtYWlsLm9yZykgKi8KK1VOVVNVQUxfREVWKCAweDA5MGEsIDB4MTIwMCwgMHgwMDAwLCAweDk5OTksCisJCSJUcnVtcGlvbiIsCisJCSJNUDMgcGxheWVyIiwKKwkJVVNfU0NfUkJDLCBVU19QUl9CVUxLLCBOVUxMLAorCQkwICksCisKKy8qIGFlYiAqLworVU5VU1VBTF9ERVYoIDB4MDkwYywgMHgxMTMyLCAweDAwMDAsIDB4ZmZmZiwKKwkJIkZlaXlhIiwKKwkJIjUtaW4tMSBDYXJkIFJlYWRlciIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfQ0FQQUNJVFkgKSwKKworLyogVGhpcyBQZW50YXggc3RpbGwgY2FtZXJhIGlzIG5vdCBjb25mb3JtYW50CisgKiB0byB0aGUgVVNCIHN0b3JhZ2Ugc3BlY2lmaWNhdGlvbjogLQorICogLSBJdCBkb2VzIG5vdCBsaWtlIHRoZSBJTlFVSVJZIGNvbW1hbmQuIFNvIHdlIG11c3QgaGFuZGxlIHRoaXMgY29tbWFuZAorICogICBvZiB0aGUgU0NTSSBsYXllciBvdXJzZWx2ZXMuCisgKiBUZXN0ZWQgb24gUmV2LiAxMC4wMCAoMHgxMDAwKQorICogU3VibWl0dGVkIGJ5IEphbWVzIENvdXJ0aWVyLUR1dHRvbiA8SmFtZXNAc3VwZXJidWcuZGVtb24uY28udWs+CisgKi8KK1VOVVNVQUxfREVWKCAweDBhMTcsIDB4MDAwNCwgMHgxMDAwLCAweDEwMDAsCisgICAgICAgICAgICAgICAgIlBlbnRheCIsCisgICAgICAgICAgICAgICAgIk9wdGlvIDIvMy80MDAiLAorICAgICAgICAgICAgICAgIFVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorICAgICAgICAgICAgICAgIFVTX0ZMX0ZJWF9JTlFVSVJZICksCisKKworLyogU3VibWl0dGVkIGJ5IFBlciBXaW5rdmlzdCA8cGVyLndpbmt2aXN0QHVrLmNvbT4gKi8KK1VOVVNVQUxfREVWKCAweDBhMTcsIDB4MDA2LCAweDAwMDAsIDB4ZmZmZiwKKyAgICAgICAgICAgICAgICAiUGVudGF4IiwKKyAgICAgICAgICAgICAgICAiT3B0aW8gUy9TNCIsCisgICAgICAgICAgICAgICAgVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisgICAgICAgICAgICAgICAgVVNfRkxfRklYX0lOUVVJUlkgKSwKKwkJCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMAorVU5VU1VBTF9ERVYoICAweDBiZjYsIDB4YTAwMSwgMHgwMTAwLCAweDAxMTAsCisJCSJBVEkiLAorCQkiVVNCIENhYmxlIDIwNSIsCisJCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAorCQkwICksCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCCitVTlVTVUFMX0RFViggMHgwYzBiLCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAorCSAgICAgICAiQWNvbWRhdGEiLAorCSAgICAgICAiQ0YiLAorCSAgICAgICBVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCSAgICAgICBVU19GTF9TSU5HTEVfTFVOICksCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1CitVTlVTVUFMX0RFViggMHgwYzBiLCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAorCSAgICAgICAiQWNvbWRhdGEiLAorCSAgICAgICAiU00iLAorCSAgICAgICBVU19TQ19TQ1NJLCBVU19QUl9TRERSNTUsIE5VTEwsCisJICAgICAgIFVTX0ZMX1NJTkdMRV9MVU4gKSwKKyNlbmRpZgorCisvKiBTdWJtaXR0ZWQgYnkgSm9yaXMgU3RydXl2ZSA8am9yaXNAc3RydXl2ZS5iZT4gKi8KK1VOVVNVQUxfREVWKCAweDBkOTYsIDB4NDEwYSwgMHgwMDAxLCAweGZmZmYsCisJCSJNZWRpb24iLAorCQkiTUQgNzQyNSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfSU5RVUlSWSksCisKKy8qCisgKiBFbnRyeSBmb3IgSmVub3B0aWsgSkQgNTIwMHozCisgKgorICogZW1haWw6IGNhci5idXNzZUBnbXguZGUKKyAqLworVU5VU1VBTF9ERVYoICAweDBkOTYsIDB4NTIwMCwgMHgwMDAxLCAweDAyMDAsCisJCSJKZW5vcHRpayIsCisJCSJKRCA1MjAwIHozIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsIFVTX0ZMX0ZJWF9JTlFVSVJZKSwKKworLyogUmVwb3J0ZWQgYnkgTHVib21pciBCbGFoYSA8dHJpdG9sQHRyaWxvZ2ljLmN6PgorICogSSBfUkVBTExZXyBkb24ndCBrbm93IHdoYXQgM3JkLCA0dGggbnVtYmVyIGFuZCBhbGwgZGVmaW5lcyBtZWFuLCBidXQgdGhpcworICogd29ya3MgZm9yIG1lLiBDYW4gYW55Ym9keSBjb3JyZWN0IHRoZXNlIHZhbHVlcz8gKEkgYWJsZSB0byB0ZXN0IGNvcnJlY3RlZAorICogdmVyc2lvbi4pCisgKi8KK1VOVVNVQUxfREVWKCAweDBkZDgsIDB4MTA2MCwgMHgwMDAwLCAweGZmZmYsCisJCSJOZXRhYyIsCisJCSJVU0ItQ0YtQ2FyZCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfSU5RVUlSWSApLAorCisvKiBQYXRjaCBieSBTdGVwaGFuIFdhbHRlciA8c3RlcGhhbi53YWx0ZXJAZXBmbC5jaD4KKyAqIEkgZG9uJ3Qga25vdyB3aHksIGJ1dCBpdCB3b3Jrcy4uLiAqLworVU5VU1VBTF9ERVYoIDB4MGRkYSwgMHgwMDAxLCAweDAwMTIsIDB4MDAxMiwKKwkJIldJTldBUkQiLAorCQkiTXVzaWMgRGlzayIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JR05PUkVfUkVTSURVRSApLAorCisvKiBSZXBvcnRlZCBieSBJYW4gTWNDb25uZWxsIDxpYW4gYXQgZW1pdC5kZW1vbi5jby51az4gKi8KK1VOVVNVQUxfREVWKCAgMHgwZGRhLCAweDAzMDEsIDB4MDAxMiwgMHgwMDEyLAorCQkiUE5QX01QMyIsCisJCSJQTlBfTVAzIFBMQVlFUiIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JR05PUkVfUkVTSURVRSApLAorCisvKiBTdWJtaXR0ZWQgYnkgQW50b2luZSBNYWlyZXNzZSA8YW50b2luZS5tYWlyZXNzZUBmcmVlLmZyPiAqLworVU5VU1VBTF9ERVYoIDB4MGVkMSwgMHg2NjYwLCAweDAxMDAsIDB4MDMwMCwKKwkJIlVTQiIsCisJCSJTb2xpZCBzdGF0ZSBkaXNrIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9JTlFVSVJZICksCisKKy8qIFN1Ym1pdHRlZCBieSBEYW5pZWwgRHJha2UgPGRzZEBnZW50b28ub3JnPgorICogUmVwb3J0ZWQgYnkgZGF5dWwgb24gdGhlIEdlbnRvbyBGb3J1bXMgKi8KK1VOVVNVQUxfREVWKCAgMHgwZWEwLCAweDIxNjgsIDB4MDExMCwgMHgwMTEwLAorCQkiT3VycyBUZWNobm9sb2d5IiwKKwkJIkZsYXNoIERpc2siLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgKSwKKworLyogUmVwb3J0ZWQgYnkgUmFzdGlzbGF2IFN0YW5payA8cnNfa2VybmVsQHlhaG9vLmNvbT4gKi8KK1VOVVNVQUxfREVWKCAgMHgwZWEwLCAweDY4MjgsIDB4MDExMCwgMHgwMTEwLAorCQkiVVNCIiwKKwkJIkZsYXNoIERpc2siLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgKSwKKworLyogUmVwb3J0ZWQgYnkgTWljaGFlbCBTdGF0dG1hbm4gPG1pY2hhZWxAc3RhdHRtYW5uLmNvbT4gKi8KK1VOVVNVQUxfREVWKCAgMHgwZmNlLCAweGQwMDgsIDB4MDAwMCwgMHgwMDAwLAorCQkiU29ueSBFcmljc3NvbiIsCisJCSJWODAwLVZvZGFmb25lIDgwMiIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9OT19XUF9ERVRFQ1QgKSwKKworLyogUmVwb3J0ZWQgYnkgS2V2aW4gQ2VybmVrZWUgPGtwYy11c2JkZXZAZ2VsYXRvLnVpdWMuZWR1PgorICogVGVzdGVkIG9uIGhhcmR3YXJlIHZlcnNpb24gMS4xMC4KKyAqIEVudHJ5IGlzIG5lZWRlZCBvbmx5IGZvciB0aGUgaW5pdGlhbGl6ZXIgZnVuY3Rpb24gb3ZlcnJpZGUuCisgKi8KK1VOVVNVQUxfREVWKCAgMHgxMDE5LCAweDBjNTUsIDB4MDAwMCwgMHg5OTk5LAorCQkiRGVza25vdGUiLAorCQkiVUNSLTYxUzJCIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX3VjcjYxczJiX2luaXQsCisJCTAgKSwKKworLyogUmVwb3J0ZWQgYnkgS290cmxhIFZpdGV6c2xhdiA8a290cmxhQGNlYi5jej4gKi8KK1VOVVNVQUxfREVWKCAgMHgxMzcwLCAweDY4MjgsIDB4MDExMCwgMHgwMTEwLAorCQkiU1dJU1NCSVQiLAorCQkiQmxhY2sgU2lsdmVyIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCisKKy8qIFJlcG9ydGVkIGJ5IFJhZG92YW4gR2FyYWJpayA8Z2FyYWJpa0BrYXNzaW9wZWlhLmp1bHMuc2F2YmEuc2s+ICovCitVTlVTVUFMX0RFViggIDB4MjczNSwgMHgxMDBiLCAweDAwMDAsIDB4OTk5OSwKKwkJIk1QSU8iLAorCQkiSFMyMDAiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfR09fU0xPVyApLAorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NQorVU5VU1VBTF9ERVYoICAweDU1YWEsIDB4YTEwMywgMHgwMDAwLCAweDk5OTksIAorCQkiU2FuZGlzayIsCisJCSJJbWFnZU1hdGUgU0REUjU1IiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOKSwKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVjMWNhNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKQEAgLTAsMCArMSwxMDUxIEBACisvKiBEcml2ZXIgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgY29tcGxpYW50IGRldmljZXMKKyAqCisgKiAkSWQ6IHVzYi5jLHYgMS43NSAyMDAyLzA0LzIyIDAzOjM5OjQzIG1kaGFybSBFeHAgJAorICoKKyAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgorICogICAoYykgMTk5OS0yMDAzIE1hdHRoZXcgRGhhcm0gKG1kaGFybS11c2JAb25lLWV5ZWQtYWxpZW4ubmV0KQorICoKKyAqIERldmVsb3BlZCB3aXRoIHRoZSBhc3Npc3RhbmNlIG9mOgorICogICAoYykgMjAwMCBEYXZpZCBMLiBCcm93biwgSnIuICh1c2Itc3RvcmFnZUBkYXZpZGIub3JnKQorICogICAoYykgMjAwMyBBbGFuIFN0ZXJuIChzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1KQorICoKKyAqIEluaXRpYWwgd29yayBieToKKyAqICAgKGMpIDE5OTkgTWljaGFlbCBHZWUgKG1pY2hhZWxAbGludXhzcGVjaWZpYy5jb20pCisgKgorICogdXNiX2RldmljZV9pZCBzdXBwb3J0IGJ5IEFkYW0gSi4gUmljaHRlciAoYWRhbUB5Z2dkcmFzaWwuY29tKToKKyAqICAgKGMpIDIwMDAgWWdnZHJhc2lsIENvbXB1dGluZywgSW5jLgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSAnVVNCIE1hc3MgU3RvcmFnZSBDbGFzcycgZG9jdW1lbnQuIFRoaXMKKyAqIGRlc2NyaWJlcyBpbiBkZXRhaWwgdGhlIHByb3RvY29sIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBzdWNoCisgKiBkZXZpY2VzLiAgQ2xlYXJseSwgdGhlIGRlc2lnbmVycyBoYWQgU0NTSSBhbmQgQVRBUEkgY29tbWFuZHMgaW4KKyAqIG1pbmQgd2hlbiB0aGV5IGNyZWF0ZWQgdGhpcyBkb2N1bWVudC4gIFRoZSBjb21tYW5kcyBhcmUgYWxsIHZlcnkKKyAqIHNpbWlsYXIgdG8gY29tbWFuZHMgaW4gdGhlIFNDU0ktSUkgYW5kIEFUQVBJIHNwZWNpZmljYXRpb25zLgorICoKKyAqIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgaW4gYSBudW1iZXIgb2YgY2FzZXMgdGhpcyBjbGFzcworICogZXhoaWJpdHMgY2xhc3Mtc3BlY2lmaWMgZXhlbXB0aW9ucyBmcm9tIHRoZSBVU0Igc3BlY2lmaWNhdGlvbi4KKyAqIE5vdGFibHkgdGhlIHVzYWdlIG9mIE5BSywgU1RBTEwgYW5kIEFDSyBkaWZmZXJzIGZyb20gdGhlIG5vcm0sIGluCisgKiB0aGF0IHRoZXkgYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2FpdCwgZmFpbGVkIGFuZCBPSyBvbiBjb21tYW5kcy4KKyAqCisgKiBBbHNvLCBmb3IgY2VydGFpbiBkZXZpY2VzLCB0aGUgaW50ZXJydXB0IGVuZHBvaW50IGlzIHVzZWQgdG8gY29udmV5CisgKiBzdGF0dXMgb2YgYSBjb21tYW5kLgorICoKKyAqIFBsZWFzZSBzZWUgaHR0cDovL3d3dy5vbmUtZXllZC1hbGllbi5uZXQvfm1kaGFybS9saW51eC11c2IgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKworI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgInNjc2lnbHVlLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgImluaXRpYWxpemVycy5oIgorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCisjaW5jbHVkZSAic2h1dHRsZV91c2JhdC5oIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQorI2luY2x1ZGUgInNkZHIwOS5oIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NQorI2luY2x1ZGUgInNkZHI1NS5oIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00KKyNpbmNsdWRlICJkcGNtLmgiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTQorI2luY2x1ZGUgImZyZWVjb20uaCIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAKKyNpbmNsdWRlICJpc2QyMDAuaCIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCCisjaW5jbHVkZSAiZGF0YWZhYi5oIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UCisjaW5jbHVkZSAianVtcHNob3QuaCIKKyNlbmRpZgorCisKKy8qIFNvbWUgaW5mb3JtYXRpb25hbCBkYXRhICovCitNT0RVTEVfQVVUSE9SKCJNYXR0aGV3IERoYXJtIDxtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVVNCIE1hc3MgU3RvcmFnZSBkcml2ZXIgZm9yIExpbnV4Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVsYXlfdXNlID0gNTsKK21vZHVsZV9wYXJhbShkZWxheV91c2UsIHVpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVsYXlfdXNlLCAic2Vjb25kcyB0byBkZWxheSBiZWZvcmUgdXNpbmcgYSBuZXcgZGV2aWNlIik7CisKKworLyogVGhlc2UgYXJlIHVzZWQgdG8gbWFrZSBzdXJlIHRoZSBtb2R1bGUgZG9lc24ndCB1bmxvYWQgYmVmb3JlIGFsbCB0aGUKKyAqIHRocmVhZHMgaGF2ZSBleGl0ZWQuCisgKi8KK3N0YXRpYyBhdG9taWNfdCB0b3RhbF90aHJlYWRzID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKHRocmVhZHNfZ29uZSk7CisKKworc3RhdGljIGludCBzdG9yYWdlX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworCitzdGF0aWMgdm9pZCBzdG9yYWdlX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKTsKKworLyogVGhlIGVudHJpZXMgaW4gdGhpcyB0YWJsZSwgZXhjZXB0IGZvciBmaW5hbCBvbmVzIGhlcmUKKyAqIChVU0JfTUFTU19TVE9SQUdFX0NMQVNTIGFuZCB0aGUgZW1wdHkgZW50cnkpLCBjb3JyZXNwb25kLAorICogbGluZSBmb3IgbGluZSB3aXRoIHRoZSBlbnRyaWVzIG9mIHVzX3Vuc3VhdWxfZGV2X2xpc3RbXS4KKyAqLworCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sYmNkRGV2aWNlTWF4KSB9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzdG9yYWdlX3VzYl9pZHMgW10gPSB7CisKKyMJaW5jbHVkZSAidW51c3VhbF9kZXZzLmgiCisjdW5kZWYgVU5VU1VBTF9ERVYKKwkvKiBDb250cm9sL0J1bGsgdHJhbnNwb3J0IGZvciBhbGwgU3ViQ2xhc3MgdmFsdWVzICovCisJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgVVNfU0NfUkJDLCBVU19QUl9DQikgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ184MDIwLCBVU19QUl9DQikgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ19RSUMsIFVTX1BSX0NCKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDX1VGSSwgVVNfUFJfQ0IpIH0sCisJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgVVNfU0NfODA3MCwgVVNfUFJfQ0IpIH0sCisJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgVVNfU0NfU0NTSSwgVVNfUFJfQ0IpIH0sCisKKwkvKiBDb250cm9sL0J1bGsvSW50ZXJydXB0IHRyYW5zcG9ydCBmb3IgYWxsIFN1YkNsYXNzIHZhbHVlcyAqLworCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDX1JCQywgVVNfUFJfQ0JJKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDXzgwMjAsIFVTX1BSX0NCSSkgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ19RSUMsIFVTX1BSX0NCSSkgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ19VRkksIFVTX1BSX0NCSSkgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ184MDcwLCBVU19QUl9DQkkpIH0sCisJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgVVNfU0NfU0NTSSwgVVNfUFJfQ0JJKSB9LAorCisJLyogQnVsay1vbmx5IHRyYW5zcG9ydCBmb3IgYWxsIFN1YkNsYXNzIHZhbHVlcyAqLworCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDX1JCQywgVVNfUFJfQlVMSykgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ184MDIwLCBVU19QUl9CVUxLKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDX1FJQywgVVNfUFJfQlVMSykgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ19VRkksIFVTX1BSX0JVTEspIH0sCisJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgVVNfU0NfODA3MCwgVVNfUFJfQlVMSykgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ19TQ1NJLCBVU19QUl9CVUxLKSB9LAorCisJLyogVGVybWluYXRpbmcgZW50cnkgKi8KKwl7IH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgc3RvcmFnZV91c2JfaWRzKTsKKworLyogVGhpcyBpcyB0aGUgbGlzdCBvZiBkZXZpY2VzIHdlIHJlY29nbml6ZSwgYWxvbmcgd2l0aCB0aGVpciBmbGFnIGRhdGEgKi8KKworLyogVGhlIHZlbmRvciBuYW1lIHNob3VsZCBiZSBrZXB0IGF0IGVpZ2h0IGNoYXJhY3RlcnMgb3IgbGVzcywgYW5kCisgKiB0aGUgcHJvZHVjdCBuYW1lIHNob3VsZCBiZSBrZXB0IGF0IDE2IGNoYXJhY3RlcnMgb3IgbGVzcy4gSWYgYSBkZXZpY2UKKyAqIGhhcyB0aGUgVVNfRkxfRklYX0lOUVVJUlkgZmxhZywgdGhlbiB0aGUgdmVuZG9yIGFuZCBwcm9kdWN0IG5hbWVzCisgKiBub3JtYWxseSBnZW5lcmF0ZWQgYnkgYSBkZXZpY2UgdGhvcnVnaCB0aGUgSU5RVUlSWSByZXNwb25zZSB3aWxsIGJlCisgKiB0YWtlbiBmcm9tIHRoaXMgbGlzdCwgYW5kIHRoaXMgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGFib3ZlIHNpemUKKyAqIHJlc3RyaWN0aW9uLiBIb3dldmVyLCBpZiB0aGUgZmxhZyBpcyBub3QgcHJlc2VudCwgdGhlbiB5b3UKKyAqIGFyZSBmcmVlIHRvIHVzZSBhcyBtYW55IGNoYXJhY3RlcnMgYXMgeW91IGxpa2UuCisgKi8KKworI3VuZGVmIFVOVVNVQUxfREVWCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JfbmFtZSwgcHJvZHVjdF9uYW1lLCB1c2VfcHJvdG9jb2wsIHVzZV90cmFuc3BvcnQsIFwKKwkJICAgIGluaXRfZnVuY3Rpb24sIEZsYWdzKSBcCit7IFwKKwkudmVuZG9yTmFtZSA9IHZlbmRvcl9uYW1lLAlcCisJLnByb2R1Y3ROYW1lID0gcHJvZHVjdF9uYW1lLAlcCisJLnVzZVByb3RvY29sID0gdXNlX3Byb3RvY29sLAlcCisJLnVzZVRyYW5zcG9ydCA9IHVzZV90cmFuc3BvcnQsCVwKKwkuaW5pdEZ1bmN0aW9uID0gaW5pdF9mdW5jdGlvbiwJXAorCS5mbGFncyA9IEZsYWdzLCBcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgdXNfdW51c3VhbF9kZXZfbGlzdFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2RldnMuaCIgCisjCXVuZGVmIFVOVVNVQUxfREVWCisJLyogQ29udHJvbC9CdWxrIHRyYW5zcG9ydCBmb3IgYWxsIFN1YkNsYXNzIHZhbHVlcyAqLworCXsgLnVzZVByb3RvY29sID0gVVNfU0NfUkJDLAorCSAgLnVzZVRyYW5zcG9ydCA9IFVTX1BSX0NCfSwKKwl7IC51c2VQcm90b2NvbCA9IFVTX1NDXzgwMjAsCisJICAudXNlVHJhbnNwb3J0ID0gVVNfUFJfQ0J9LAorCXsgLnVzZVByb3RvY29sID0gVVNfU0NfUUlDLAorCSAgLnVzZVRyYW5zcG9ydCA9IFVTX1BSX0NCfSwKKwl7IC51c2VQcm90b2NvbCA9IFVTX1NDX1VGSSwKKwkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9DQn0sCisJeyAudXNlUHJvdG9jb2wgPSBVU19TQ184MDcwLAorCSAgLnVzZVRyYW5zcG9ydCA9IFVTX1BSX0NCfSwKKwl7IC51c2VQcm90b2NvbCA9IFVTX1NDX1NDU0ksCisJICAudXNlVHJhbnNwb3J0ID0gVVNfUFJfQ0J9LAorCisJLyogQ29udHJvbC9CdWxrL0ludGVycnVwdCB0cmFuc3BvcnQgZm9yIGFsbCBTdWJDbGFzcyB2YWx1ZXMgKi8KKwl7IC51c2VQcm90b2NvbCA9IFVTX1NDX1JCQywKKwkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9DQkl9LAorCXsgLnVzZVByb3RvY29sID0gVVNfU0NfODAyMCwKKwkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9DQkl9LAorCXsgLnVzZVByb3RvY29sID0gVVNfU0NfUUlDLAorCSAgLnVzZVRyYW5zcG9ydCA9IFVTX1BSX0NCSX0sCisJeyAudXNlUHJvdG9jb2wgPSBVU19TQ19VRkksCisJICAudXNlVHJhbnNwb3J0ID0gVVNfUFJfQ0JJfSwKKwl7IC51c2VQcm90b2NvbCA9IFVTX1NDXzgwNzAsCisJICAudXNlVHJhbnNwb3J0ID0gVVNfUFJfQ0JJfSwKKwl7IC51c2VQcm90b2NvbCA9IFVTX1NDX1NDU0ksCisJICAudXNlVHJhbnNwb3J0ID0gVVNfUFJfQ0JJfSwKKworCS8qIEJ1bGstb25seSB0cmFuc3BvcnQgZm9yIGFsbCBTdWJDbGFzcyB2YWx1ZXMgKi8KKwl7IC51c2VQcm90b2NvbCA9IFVTX1NDX1JCQywKKwkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9CVUxLfSwKKwl7IC51c2VQcm90b2NvbCA9IFVTX1NDXzgwMjAsCisJICAudXNlVHJhbnNwb3J0ID0gVVNfUFJfQlVMS30sCisJeyAudXNlUHJvdG9jb2wgPSBVU19TQ19RSUMsCisJICAudXNlVHJhbnNwb3J0ID0gVVNfUFJfQlVMS30sCisJeyAudXNlUHJvdG9jb2wgPSBVU19TQ19VRkksCisJICAudXNlVHJhbnNwb3J0ID0gVVNfUFJfQlVMS30sCisJeyAudXNlUHJvdG9jb2wgPSBVU19TQ184MDcwLAorCSAgLnVzZVRyYW5zcG9ydCA9IFVTX1BSX0JVTEt9LAorCXsgLnVzZVByb3RvY29sID0gVVNfU0NfU0NTSSwKKwkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9CVUxLfSwKKworCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCisJeyBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2Jfc3RvcmFnZV9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJInVzYi1zdG9yYWdlIiwKKwkucHJvYmUgPQlzdG9yYWdlX3Byb2JlLAorCS5kaXNjb25uZWN0ID0Jc3RvcmFnZV9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CXN0b3JhZ2VfdXNiX2lkcywKK307CisKKy8qCisgKiBmaWxsX2lucXVpcnlfcmVzcG9uc2UgdGFrZXMgYW4gdW5zaWduZWQgY2hhciBhcnJheSAod2hpY2ggbXVzdAorICogYmUgYXQgbGVhc3QgMzYgY2hhcmFjdGVycykgYW5kIHBvcHVsYXRlcyB0aGUgdmVuZG9yIG5hbWUsCisgKiBwcm9kdWN0IG5hbWUsIGFuZCByZXZpc2lvbiBmaWVsZHMuIFRoZW4gdGhlIGFycmF5IGlzIGNvcGllZAorICogaW50byB0aGUgU0NTSSBjb21tYW5kJ3MgcmVzcG9uc2UgYnVmZmVyIChvZGRseSBlbm91Z2gKKyAqIGNhbGxlZCByZXF1ZXN0X2J1ZmZlcikuIGRhdGFfbGVuIGNvbnRhaW5zIHRoZSBsZW5ndGggb2YgdGhlCisgKiBkYXRhIGFycmF5LCB3aGljaCBhZ2FpbiBtdXN0IGJlIGF0IGxlYXN0IDM2LgorICovCisKK3ZvaWQgZmlsbF9pbnF1aXJ5X3Jlc3BvbnNlKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJdW5zaWduZWQgaW50IGRhdGFfbGVuKQoreworCWlmIChkYXRhX2xlbjwzNikgLy8gWW91IGxvc2UuCisJCXJldHVybjsKKworCWlmKGRhdGFbMF0mMHgyMCkgeyAvKiBVU0IgZGV2aWNlIGN1cnJlbnRseSBub3QgY29ubmVjdGVkLiBSZXR1cm4KKwkJCSAgICAgIHBlcmlwaGVyYWwgcXVhbGlmaWVyIDAwMWIgKCIuLi5ob3dldmVyLCB0aGUKKwkJCSAgICAgIHBoeXNpY2FsIGRldmljZSBpcyBub3QgY3VycmVudGx5IGNvbm5lY3RlZAorCQkJICAgICAgdG8gdGhpcyBsb2dpY2FsIHVuaXQiKSBhbmQgbGVhdmUgdmVuZG9yIGFuZAorCQkJICAgICAgcHJvZHVjdCBpZGVudGlmaWNhdGlvbiBlbXB0eS4gKCJJZiB0aGUgdGFyZ2V0CisJCQkgICAgICBkb2VzIHN0b3JlIHNvbWUgb2YgdGhlIElOUVVJUlkgZGF0YSBvbiB0aGUKKwkJCSAgICAgIGRldmljZSwgaXQgbWF5IHJldHVybiB6ZXJvcyBvciBBU0NJSSBzcGFjZXMgCisJCQkgICAgICAoMjBoKSBpbiB0aG9zZSBmaWVsZHMgdW50aWwgdGhlIGRhdGEgaXMKKwkJCSAgICAgIGF2YWlsYWJsZSBmcm9tIHRoZSBkZXZpY2UuIikuICovCisJCW1lbXNldChkYXRhKzgsMCwyOCk7CisJfSBlbHNlIHsKKwkJdTE2IGJjZERldmljZSA9IGxlMTZfdG9fY3B1KHVzLT5wdXNiX2Rldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworCQltZW1jcHkoZGF0YSs4LCB1cy0+dW51c3VhbF9kZXYtPnZlbmRvck5hbWUsIAorCQkJc3RybGVuKHVzLT51bnVzdWFsX2Rldi0+dmVuZG9yTmFtZSkgPiA4ID8gOCA6CisJCQlzdHJsZW4odXMtPnVudXN1YWxfZGV2LT52ZW5kb3JOYW1lKSk7CisJCW1lbWNweShkYXRhKzE2LCB1cy0+dW51c3VhbF9kZXYtPnByb2R1Y3ROYW1lLCAKKwkJCXN0cmxlbih1cy0+dW51c3VhbF9kZXYtPnByb2R1Y3ROYW1lKSA+IDE2ID8gMTYgOgorCQkJc3RybGVuKHVzLT51bnVzdWFsX2Rldi0+cHJvZHVjdE5hbWUpKTsKKwkJZGF0YVszMl0gPSAweDMwICsgKChiY2REZXZpY2U+PjEyKSAmIDB4MEYpOworCQlkYXRhWzMzXSA9IDB4MzAgKyAoKGJjZERldmljZT4+OCkgJiAweDBGKTsKKwkJZGF0YVszNF0gPSAweDMwICsgKChiY2REZXZpY2U+PjQpICYgMHgwRik7CisJCWRhdGFbMzVdID0gMHgzMCArICgoYmNkRGV2aWNlKSAmIDB4MEYpOworCX0KKworCXVzYl9zdG9yX3NldF94ZmVyX2J1ZihkYXRhLCBkYXRhX2xlbiwgdXMtPnNyYik7Cit9CisKK3N0YXRpYyBpbnQgdXNiX3N0b3JfY29udHJvbF90aHJlYWQodm9pZCAqIF9fdXMpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzID0gKHN0cnVjdCB1c19kYXRhICopX191czsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gdXNfdG9faG9zdCh1cyk7CisKKwlsb2NrX2tlcm5lbCgpOworCisJLyoKKwkgKiBUaGlzIHRocmVhZCBkb2Vzbid0IG5lZWQgYW55IHVzZXItbGV2ZWwgYWNjZXNzLAorCSAqIHNvIGdldCByaWQgb2YgYWxsIG91ciByZXNvdXJjZXMuCisJICovCisJZGFlbW9uaXplKCJ1c2Itc3RvcmFnZSIpOworCWN1cnJlbnQtPmZsYWdzIHw9IFBGX05PRlJFRVpFOworCXVubG9ja19rZXJuZWwoKTsKKworCS8qIGFjcXVpcmUgYSByZWZlcmVuY2UgdG8gdGhlIGhvc3QsIHNvIGl0IHdvbid0IGJlIGRlYWxsb2NhdGVkCisJICogdW50aWwgd2UncmUgcmVhZHkgdG8gZXhpdCAqLworCXNjc2lfaG9zdF9nZXQoaG9zdCk7CisKKwkvKiBzaWduYWwgdGhhdCB3ZSd2ZSBzdGFydGVkIHRoZSB0aHJlYWQgKi8KKwljb21wbGV0ZSgmKHVzLT5ub3RpZnkpKTsKKworCWZvcig7OykgeworCQlVU19ERUJVR1AoIioqKiB0aHJlYWQgc2xlZXBpbmcuXG4iKTsKKwkJaWYoZG93bl9pbnRlcnJ1cHRpYmxlKCZ1cy0+c2VtYSkpCisJCQlicmVhazsKKwkJCQorCQlVU19ERUJVR1AoIioqKiB0aHJlYWQgYXdha2VuZWQuXG4iKTsKKworCQkvKiBsb2NrIHRoZSBkZXZpY2UgcG9pbnRlcnMgKi8KKwkJZG93bigmKHVzLT5kZXZfc2VtYXBob3JlKSk7CisKKwkJLyogaWYgdGhlIGRldmljZSBoYXMgZGlzY29ubmVjdGVkLCB3ZSBhcmUgZnJlZSB0byBleGl0ICovCisJCWlmICh0ZXN0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmZsYWdzKSkgeworCQkJVVNfREVCVUdQKCItLSBleGl0aW5nXG4iKTsKKwkJCXVwKCYodXMtPmRldl9zZW1hcGhvcmUpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogbG9jayBhY2Nlc3MgdG8gdGhlIHN0YXRlICovCisJCXNjc2lfbG9jayhob3N0KTsKKworCQkvKiBoYXMgdGhlIGNvbW1hbmQgdGltZWQgb3V0ICphbHJlYWR5KiA/ICovCisJCWlmICh0ZXN0X2JpdChVU19GTElEWF9USU1FRF9PVVQsICZ1cy0+ZmxhZ3MpKSB7CisJCQl1cy0+c3JiLT5yZXN1bHQgPSBESURfQUJPUlQgPDwgMTY7CisJCQlnb3RvIFNraXBGb3JBYm9ydDsKKwkJfQorCisJCXNjc2lfdW5sb2NrKGhvc3QpOworCisJCS8qIHJlamVjdCB0aGUgY29tbWFuZCBpZiB0aGUgZGlyZWN0aW9uIGluZGljYXRvciAKKwkJICogaXMgVU5LTk9XTgorCQkgKi8KKwkJaWYgKHVzLT5zcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9CSURJUkVDVElPTkFMKSB7CisJCQlVU19ERUJVR1AoIlVOS05PV04gZGF0YSBkaXJlY3Rpb25cbiIpOworCQkJdXMtPnNyYi0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OworCQl9CisKKwkJLyogcmVqZWN0IGlmIHRhcmdldCAhPSAwIG9yIGlmIExVTiBpcyBoaWdoZXIgdGhhbgorCQkgKiB0aGUgbWF4aW11bSBrbm93biBMVU4KKwkJICovCisJCWVsc2UgaWYgKHVzLT5zcmItPmRldmljZS0+aWQgJiYgCisJCQkJISh1cy0+ZmxhZ3MgJiBVU19GTF9TQ01fTVVMVF9UQVJHKSkgeworCQkJVVNfREVCVUdQKCJCYWQgdGFyZ2V0IG51bWJlciAoJWQ6JWQpXG4iLAorCQkJCSAgdXMtPnNyYi0+ZGV2aWNlLT5pZCwgdXMtPnNyYi0+ZGV2aWNlLT5sdW4pOworCQkJdXMtPnNyYi0+cmVzdWx0ID0gRElEX0JBRF9UQVJHRVQgPDwgMTY7CisJCX0KKworCQllbHNlIGlmICh1cy0+c3JiLT5kZXZpY2UtPmx1biA+IHVzLT5tYXhfbHVuKSB7CisJCQlVU19ERUJVR1AoIkJhZCBMVU4gKCVkOiVkKVxuIiwKKwkJCQkgIHVzLT5zcmItPmRldmljZS0+aWQsIHVzLT5zcmItPmRldmljZS0+bHVuKTsKKwkJCXVzLT5zcmItPnJlc3VsdCA9IERJRF9CQURfVEFSR0VUIDw8IDE2OworCQl9CisKKwkJLyogSGFuZGxlIHRob3NlIGRldmljZXMgd2hpY2ggbmVlZCB1cyB0byBmYWtlIAorCQkgKiB0aGVpciBpbnF1aXJ5IGRhdGEgKi8KKwkJZWxzZSBpZiAoKHVzLT5zcmItPmNtbmRbMF0gPT0gSU5RVUlSWSkgJiYKKwkJCSAgICAodXMtPmZsYWdzICYgVVNfRkxfRklYX0lOUVVJUlkpKSB7CisJCQl1bnNpZ25lZCBjaGFyIGRhdGFfcHRyWzM2XSA9IHsKKwkJCSAgICAweDAwLCAweDgwLCAweDAyLCAweDAyLAorCQkJICAgIDB4MUYsIDB4MDAsIDB4MDAsIDB4MDB9OworCisJCQlVU19ERUJVR1AoIkZha2luZyBJTlFVSVJZIGNvbW1hbmRcbiIpOworCQkJZmlsbF9pbnF1aXJ5X3Jlc3BvbnNlKHVzLCBkYXRhX3B0ciwgMzYpOworCQkJdXMtPnNyYi0+cmVzdWx0ID0gU0FNX1NUQVRfR09PRDsKKwkJfQorCisJCS8qIHdlJ3ZlIGdvdCBhIGNvbW1hbmQsIGxldCdzIGRvIGl0ISAqLworCQllbHNlIHsKKwkJCVVTX0RFQlVHKHVzYl9zdG9yX3Nob3dfY29tbWFuZCh1cy0+c3JiKSk7CisJCQl1cy0+cHJvdG9faGFuZGxlcih1cy0+c3JiLCB1cyk7CisJCX0KKworCQkvKiBsb2NrIGFjY2VzcyB0byB0aGUgc3RhdGUgKi8KKwkJc2NzaV9sb2NrKGhvc3QpOworCisJCS8qIGluZGljYXRlIHRoYXQgdGhlIGNvbW1hbmQgaXMgZG9uZSAqLworCQlpZiAodXMtPnNyYi0+cmVzdWx0ICE9IERJRF9BQk9SVCA8PCAxNikgeworCQkJVVNfREVCVUdQKCJzY3NpIGNtZCBkb25lLCByZXN1bHQ9MHgleFxuIiwgCisJCQkJICAgdXMtPnNyYi0+cmVzdWx0KTsKKwkJCXVzLT5zcmItPnNjc2lfZG9uZSh1cy0+c3JiKTsKKwkJfSBlbHNlIHsKK1NraXBGb3JBYm9ydDoKKwkJCVVTX0RFQlVHUCgic2NzaSBjb21tYW5kIGFib3J0ZWRcbiIpOworCQl9CisKKwkJLyogSWYgYW4gYWJvcnQgcmVxdWVzdCB3YXMgcmVjZWl2ZWQgd2UgbmVlZCB0byBzaWduYWwgdGhhdAorCQkgKiB0aGUgYWJvcnQgaGFzIGZpbmlzaGVkLiAgVGhlIHByb3BlciB0ZXN0IGZvciB0aGlzIGlzCisJCSAqIHRoZSBUSU1FRF9PVVQgZmxhZywgbm90IHNyYi0+cmVzdWx0ID09IERJRF9BQk9SVCwgYmVjYXVzZQorCQkgKiBhIHRpbWVvdXQvYWJvcnQgcmVxdWVzdCBtaWdodCBiZSByZWNlaXZlZCBhZnRlciBhbGwgdGhlCisJCSAqIFVTQiBwcm9jZXNzaW5nIHdhcyBjb21wbGV0ZS4gKi8KKwkJaWYgKHRlc3RfYml0KFVTX0ZMSURYX1RJTUVEX09VVCwgJnVzLT5mbGFncykpCisJCQljb21wbGV0ZSgmKHVzLT5ub3RpZnkpKTsKKworCQkvKiBmaW5pc2hlZCB3b3JraW5nIG9uIHRoaXMgY29tbWFuZCAqLworCQl1cy0+c3JiID0gTlVMTDsKKwkJc2NzaV91bmxvY2soaG9zdCk7CisKKwkJLyogdW5sb2NrIHRoZSBkZXZpY2UgcG9pbnRlcnMgKi8KKwkJdXAoJih1cy0+ZGV2X3NlbWFwaG9yZSkpOworCX0gLyogZm9yICg7OykgKi8KKworCXNjc2lfaG9zdF9wdXQoaG9zdCk7CisKKwkvKiBub3RpZnkgdGhlIGV4aXQgcm91dGluZSB0aGF0IHdlJ3JlIGFjdHVhbGx5IGV4aXRpbmcgbm93IAorCSAqCisJICogY29tcGxldGUoKS93YWl0X2Zvcl9jb21wbGV0aW9uKCkgaXMgc2ltaWxhciB0byB1cCgpL2Rvd24oKSwKKwkgKiBleGNlcHQgdGhhdCBjb21wbGV0ZSgpIGlzIHNhZmUgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHN0cnVjdHVyZQorCSAqIGlzIGdldHRpbmcgZGVsZXRlZCBpbiBhIHBhcmFsbGVsIG1vZGUgb2YgZXhlY3V0aW9uIChpLmUuIGp1c3QKKwkgKiBhZnRlciB0aGUgZG93bigpIC0tIHRoYXQncyBuZWNlc3NhcnkgZm9yIHRoZSB0aHJlYWQtc2h1dGRvd24KKwkgKiBjYXNlLgorCSAqCisJICogY29tcGxldGVfYW5kX2V4aXQoKSBnb2VzIGV2ZW4gZnVydGhlciB0aGFuIHRoaXMgLS0gaXQgaXMgc2FmZSBpbgorCSAqIHRoZSBjYXNlIHRoYXQgdGhlIHRocmVhZCBvZiB0aGUgY2FsbGVyIGlzIGdvaW5nIGF3YXkgKG5vdCBqdXN0CisJICogdGhlIHN0cnVjdHVyZSkgLS0gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIHRoZSBtb2R1bGUtcmVtb3ZlIGNhc2UuCisJICogVGhpcyBpcyBpbXBvcnRhbnQgaW4gcHJlZW1wdGlvbiBrZXJuZWxzLCB3aGljaCB0cmFuc2ZlciB0aGUgZmxvdworCSAqIG9mIGV4ZWN1dGlvbiBpbW1lZGlhdGVseSB1cG9uIGEgY29tcGxldGUoKS4KKwkgKi8KKwljb21wbGV0ZV9hbmRfZXhpdCgmdGhyZWFkc19nb25lLCAwKTsKK30JCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGV2aWNlIHByb2JpbmcgYW5kIGRpc2Nvbm5lY3RpbmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQXNzb2NpYXRlIG91ciBwcml2YXRlIGRhdGEgd2l0aCB0aGUgVVNCIGRldmljZSAqLworc3RhdGljIGludCBhc3NvY2lhdGVfZGV2KHN0cnVjdCB1c19kYXRhICp1cywgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJVVNfREVCVUdQKCItLSAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCS8qIEZpbGwgaW4gdGhlIGRldmljZS1yZWxhdGVkIGZpZWxkcyAqLworCXVzLT5wdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJdXMtPnB1c2JfaW50ZiA9IGludGY7CisJdXMtPmlmbnVtID0gaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKwlVU19ERUJVR1AoIlZlbmRvcjogMHglMDR4LCBQcm9kdWN0OiAweCUwNHgsIFJldmlzaW9uOiAweCUwNHhcbiIsCisJCQlsZTE2X3RvX2NwdSh1cy0+cHVzYl9kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQkJbGUxNl90b19jcHUodXMtPnB1c2JfZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCksCisJCQlsZTE2X3RvX2NwdSh1cy0+cHVzYl9kZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSk7CisJVVNfREVCVUdQKCJJbnRlcmZhY2UgU3ViY2xhc3M6IDB4JTAyeCwgUHJvdG9jb2w6IDB4JTAyeFxuIiwKKwkJCWludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcywKKwkJCWludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbCk7CisKKwkvKiBTdG9yZSBvdXIgcHJpdmF0ZSBkYXRhIGluIHRoZSBpbnRlcmZhY2UgKi8KKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHVzKTsKKworCS8qIEFsbG9jYXRlIHRoZSBkZXZpY2UtcmVsYXRlZCBETUEtbWFwcGVkIGJ1ZmZlcnMgKi8KKwl1cy0+Y3IgPSB1c2JfYnVmZmVyX2FsbG9jKHVzLT5wdXNiX2Rldiwgc2l6ZW9mKCp1cy0+Y3IpLAorCQkJR0ZQX0tFUk5FTCwgJnVzLT5jcl9kbWEpOworCWlmICghdXMtPmNyKSB7CisJCVVTX0RFQlVHUCgidXNiX2N0cmxyZXF1ZXN0IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdXMtPmlvYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyh1cy0+cHVzYl9kZXYsIFVTX0lPQlVGX1NJWkUsCisJCQlHRlBfS0VSTkVMLCAmdXMtPmlvYnVmX2RtYSk7CisJaWYgKCF1cy0+aW9idWYpIHsKKwkJVVNfREVCVUdQKCJJL08gYnVmZmVyIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJldHVybiAwOworfQorCisvKiBHZXQgdGhlIHVudXN1YWxfZGV2cyBlbnRyaWVzIGFuZCB0aGUgc3RyaW5nIGRlc2NyaXB0b3JzICovCitzdGF0aWMgdm9pZCBnZXRfZGV2aWNlX2luZm8oc3RydWN0IHVzX2RhdGEgKnVzLCBpbnQgaWRfaW5kZXgpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHVzLT5wdXNiX2RldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICppZGVzYyA9CisJCSZ1cy0+cHVzYl9pbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYzsKKwlzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgKnVudXN1YWxfZGV2ID0gJnVzX3VudXN1YWxfZGV2X2xpc3RbaWRfaW5kZXhdOworCXN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCA9ICZzdG9yYWdlX3VzYl9pZHNbaWRfaW5kZXhdOworCisJLyogU3RvcmUgdGhlIGVudHJpZXMgKi8KKwl1cy0+dW51c3VhbF9kZXYgPSB1bnVzdWFsX2RldjsKKwl1cy0+c3ViY2xhc3MgPSAodW51c3VhbF9kZXYtPnVzZVByb3RvY29sID09IFVTX1NDX0RFVklDRSkgPworCQkJaWRlc2MtPmJJbnRlcmZhY2VTdWJDbGFzcyA6CisJCQl1bnVzdWFsX2Rldi0+dXNlUHJvdG9jb2w7CisJdXMtPnByb3RvY29sID0gKHVudXN1YWxfZGV2LT51c2VUcmFuc3BvcnQgPT0gVVNfUFJfREVWSUNFKSA/CisJCQlpZGVzYy0+YkludGVyZmFjZVByb3RvY29sIDoKKwkJCXVudXN1YWxfZGV2LT51c2VUcmFuc3BvcnQ7CisJdXMtPmZsYWdzID0gdW51c3VhbF9kZXYtPmZsYWdzOworCisJLyoKKwkgKiBUaGlzIGZsYWcgaXMgb25seSBuZWVkZWQgd2hlbiB3ZSdyZSBpbiBoaWdoLXNwZWVkLCBzbyBsZXQncworCSAqIGRpc2FibGUgaXQgaWYgd2UncmUgaW4gZnVsbC1zcGVlZAorCSAqLworCWlmIChkZXYtPnNwZWVkICE9IFVTQl9TUEVFRF9ISUdIKQorCQl1cy0+ZmxhZ3MgJj0gflVTX0ZMX0dPX1NMT1c7CisKKwkvKiBMb2cgYSBtZXNzYWdlIGlmIGEgbm9uLWdlbmVyaWMgdW51c3VhbF9kZXYgZW50cnkgY29udGFpbnMgYW4KKwkgKiB1bm5lY2Vzc2FyeSBzdWJjbGFzcyBvciBwcm90b2NvbCBvdmVycmlkZS4gIFRoaXMgbWF5IHN0aW11bGF0ZQorCSAqIHJlcG9ydHMgZnJvbSB1c2VycyB0aGF0IHdpbGwgaGVscCB1cyByZW1vdmUgdW5uZWVkZWQgZW50cmllcworCSAqIGZyb20gdGhlIHVudXN1YWxfZGV2cy5oIHRhYmxlLgorCSAqLworCWlmIChpZC0+aWRWZW5kb3IgfHwgaWQtPmlkUHJvZHVjdCkgeworCQlzdGF0aWMgY2hhciAqbXNnc1szXSA9IHsKKwkJCSJhbiB1bm5lZWRlZCBTdWJDbGFzcyBlbnRyeSIsCisJCQkiYW4gdW5uZWVkZWQgUHJvdG9jb2wgZW50cnkiLAorCQkJInVubmVlZGVkIFN1YkNsYXNzIGFuZCBQcm90b2NvbCBlbnRyaWVzIn07CisJCXN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgKmRkZXNjID0gJmRldi0+ZGVzY3JpcHRvcjsKKwkJaW50IG1zZyA9IC0xOworCisJCWlmICh1bnVzdWFsX2Rldi0+dXNlUHJvdG9jb2wgIT0gVVNfU0NfREVWSUNFICYmCisJCQl1cy0+c3ViY2xhc3MgPT0gaWRlc2MtPmJJbnRlcmZhY2VTdWJDbGFzcykKKwkJCW1zZyArPSAxOworCQlpZiAodW51c3VhbF9kZXYtPnVzZVRyYW5zcG9ydCAhPSBVU19QUl9ERVZJQ0UgJiYKKwkJCXVzLT5wcm90b2NvbCA9PSBpZGVzYy0+YkludGVyZmFjZVByb3RvY29sKQorCQkJbXNnICs9IDI7CisJCWlmIChtc2cgPj0gMCAmJiAhKHVudXN1YWxfZGV2LT5mbGFncyAmIFVTX0ZMX05FRURfT1ZFUlJJREUpKQorCQkJcHJpbnRrKEtFUk5fTk9USUNFIFVTQl9TVE9SQUdFICJUaGlzIGRldmljZSAiCisJCQkJIiglMDR4LCUwNHgsJTA0eCBTICUwMnggUCAlMDJ4KSIKKwkJCQkiIGhhcyAlcyBpbiB1bnVzdWFsX2RldnMuaFxuIgorCQkJCSIgICBQbGVhc2Ugc2VuZCBhIGNvcHkgb2YgdGhpcyBtZXNzYWdlIHRvICIKKwkJCQkiPGxpbnV4LXVzYi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iLAorCQkJCWxlMTZfdG9fY3B1KGRkZXNjLT5pZFZlbmRvciksCisJCQkJbGUxNl90b19jcHUoZGRlc2MtPmlkUHJvZHVjdCksCisJCQkJbGUxNl90b19jcHUoZGRlc2MtPmJjZERldmljZSksCisJCQkJaWRlc2MtPmJJbnRlcmZhY2VTdWJDbGFzcywKKwkJCQlpZGVzYy0+YkludGVyZmFjZVByb3RvY29sLAorCQkJCW1zZ3NbbXNnXSk7CisJfQorfQorCisvKiBHZXQgdGhlIHRyYW5zcG9ydCBzZXR0aW5ncyAqLworc3RhdGljIGludCBnZXRfdHJhbnNwb3J0KHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlzd2l0Y2ggKHVzLT5wcm90b2NvbCkgeworCWNhc2UgVVNfUFJfQ0I6CisJCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJDb250cm9sL0J1bGsiOworCQl1cy0+dHJhbnNwb3J0ID0gdXNiX3N0b3JfQ0JfdHJhbnNwb3J0OworCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7CisJCXVzLT5tYXhfbHVuID0gNzsKKwkJYnJlYWs7CisKKwljYXNlIFVTX1BSX0NCSToKKwkJdXMtPnRyYW5zcG9ydF9uYW1lID0gIkNvbnRyb2wvQnVsay9JbnRlcnJ1cHQiOworCQl1cy0+dHJhbnNwb3J0ID0gdXNiX3N0b3JfQ0JJX3RyYW5zcG9ydDsKKwkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0NCX3Jlc2V0OworCQl1cy0+bWF4X2x1biA9IDc7CisJCWJyZWFrOworCisJY2FzZSBVU19QUl9CVUxLOgorCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiQnVsayI7CisJCXVzLT50cmFuc3BvcnQgPSB1c2Jfc3Rvcl9CdWxrX3RyYW5zcG9ydDsKKwkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7CisJCWJyZWFrOworCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCisJY2FzZSBVU19QUl9TQ01fQVRBUEk6CisJCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJTQ00vQVRBUEkiOworCQl1cy0+dHJhbnNwb3J0ID0gdXNiYXRfdHJhbnNwb3J0OworCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7CisJCXVzLT5tYXhfbHVuID0gMTsKKwkJYnJlYWs7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKKwljYXNlIFVTX1BSX0VVU0JfU0REUjA5OgorCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiRVVTQi9TRERSMDkiOworCQl1cy0+dHJhbnNwb3J0ID0gc2RkcjA5X3RyYW5zcG9ydDsKKwkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0NCX3Jlc2V0OworCQl1cy0+bWF4X2x1biA9IDA7CisJCWJyZWFrOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1CisJY2FzZSBVU19QUl9TRERSNTU6CisJCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJTRERSNTUiOworCQl1cy0+dHJhbnNwb3J0ID0gc2RkcjU1X3RyYW5zcG9ydDsKKwkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHNkZHI1NV9yZXNldDsKKwkJdXMtPm1heF9sdW4gPSAwOworCQlicmVhazsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00KKwljYXNlIFVTX1BSX0RQQ01fVVNCOgorCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiQ29udHJvbC9CdWxrLUVVU0IvU0REUjA5IjsKKwkJdXMtPnRyYW5zcG9ydCA9IGRwY21fdHJhbnNwb3J0OworCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7CisJCXVzLT5tYXhfbHVuID0gMTsKKwkJYnJlYWs7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NCisJY2FzZSBVU19QUl9GUkVFQ09NOgorCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiRnJlZWNvbSI7CisJCXVzLT50cmFuc3BvcnQgPSBmcmVlY29tX3RyYW5zcG9ydDsKKwkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX2ZyZWVjb21fcmVzZXQ7CisJCXVzLT5tYXhfbHVuID0gMDsKKwkJYnJlYWs7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCCisJY2FzZSBVU19QUl9EQVRBRkFCOgorCQl1cy0+dHJhbnNwb3J0X25hbWUgID0gIkRhdGFmYWIgQnVsay1Pbmx5IjsKKwkJdXMtPnRyYW5zcG9ydCA9IGRhdGFmYWJfdHJhbnNwb3J0OworCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKKwkJdXMtPm1heF9sdW4gPSAxOworCQlicmVhazsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UCisJY2FzZSBVU19QUl9KVU1QU0hPVDoKKwkJdXMtPnRyYW5zcG9ydF9uYW1lICA9ICJMZXhhciBKdW1wc2hvdCBDb250cm9sL0J1bGsiOworCQl1cy0+dHJhbnNwb3J0ID0ganVtcHNob3RfdHJhbnNwb3J0OworCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKKwkJdXMtPm1heF9sdW4gPSAxOworCQlicmVhazsKKyNlbmRpZgorCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU87CisJfQorCVVTX0RFQlVHUCgiVHJhbnNwb3J0OiAlc1xuIiwgdXMtPnRyYW5zcG9ydF9uYW1lKTsKKworCS8qIGZpeCBmb3Igc2luZ2xlLWx1biBkZXZpY2VzICovCisJaWYgKHVzLT5mbGFncyAmIFVTX0ZMX1NJTkdMRV9MVU4pCisJCXVzLT5tYXhfbHVuID0gMDsKKwlyZXR1cm4gMDsKK30KKworLyogR2V0IHRoZSBwcm90b2NvbCBzZXR0aW5ncyAqLworc3RhdGljIGludCBnZXRfcHJvdG9jb2woc3RydWN0IHVzX2RhdGEgKnVzKQoreworCXN3aXRjaCAodXMtPnN1YmNsYXNzKSB7CisJY2FzZSBVU19TQ19SQkM6CisJCXVzLT5wcm90b2NvbF9uYW1lID0gIlJlZHVjZWQgQmxvY2sgQ29tbWFuZHMgKFJCQykiOworCQl1cy0+cHJvdG9faGFuZGxlciA9IHVzYl9zdG9yX3RyYW5zcGFyZW50X3Njc2lfY29tbWFuZDsKKwkJYnJlYWs7CisKKwljYXNlIFVTX1NDXzgwMjA6CisJCXVzLT5wcm90b2NvbF9uYW1lID0gIjgwMjBpIjsKKwkJdXMtPnByb3RvX2hhbmRsZXIgPSB1c2Jfc3Rvcl9BVEFQSV9jb21tYW5kOworCQl1cy0+bWF4X2x1biA9IDA7CisJCWJyZWFrOworCisJY2FzZSBVU19TQ19RSUM6CisJCXVzLT5wcm90b2NvbF9uYW1lID0gIlFJQy0xNTciOworCQl1cy0+cHJvdG9faGFuZGxlciA9IHVzYl9zdG9yX3FpYzE1N19jb21tYW5kOworCQl1cy0+bWF4X2x1biA9IDA7CisJCWJyZWFrOworCisJY2FzZSBVU19TQ184MDcwOgorCQl1cy0+cHJvdG9jb2xfbmFtZSA9ICI4MDcwaSI7CisJCXVzLT5wcm90b19oYW5kbGVyID0gdXNiX3N0b3JfQVRBUElfY29tbWFuZDsKKwkJdXMtPm1heF9sdW4gPSAwOworCQlicmVhazsKKworCWNhc2UgVVNfU0NfU0NTSToKKwkJdXMtPnByb3RvY29sX25hbWUgPSAiVHJhbnNwYXJlbnQgU0NTSSI7CisJCXVzLT5wcm90b19oYW5kbGVyID0gdXNiX3N0b3JfdHJhbnNwYXJlbnRfc2NzaV9jb21tYW5kOworCQlicmVhazsKKworCWNhc2UgVVNfU0NfVUZJOgorCQl1cy0+cHJvdG9jb2xfbmFtZSA9ICJVbmlmb3JtIEZsb3BweSBJbnRlcmZhY2UgKFVGSSkiOworCQl1cy0+cHJvdG9faGFuZGxlciA9IHVzYl9zdG9yX3VmaV9jb21tYW5kOworCQlicmVhazsKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAKKwljYXNlIFVTX1NDX0lTRDIwMDoKKwkJdXMtPnByb3RvY29sX25hbWUgPSAiSVNEMjAwIEFUQS9BVEFQSSI7CisJCXVzLT5wcm90b19oYW5kbGVyID0gaXNkMjAwX2F0YV9jb21tYW5kOworCQlicmVhazsKKyNlbmRpZgorCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU87CisJfQorCVVTX0RFQlVHUCgiUHJvdG9jb2w6ICVzXG4iLCB1cy0+cHJvdG9jb2xfbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIEdldCB0aGUgcGlwZSBzZXR0aW5ncyAqLworc3RhdGljIGludCBnZXRfcGlwZXMoc3RydWN0IHVzX2RhdGEgKnVzKQoreworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdHNldHRpbmcgPQorCQl1cy0+cHVzYl9pbnRmLT5jdXJfYWx0c2V0dGluZzsKKwlpbnQgaTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBfaW4gPSBOVUxMOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBfb3V0ID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwX2ludCA9IE5VTEw7CisKKwkvKgorCSAqIEZpbmQgdGhlIGVuZHBvaW50cyB3ZSBuZWVkLgorCSAqIFdlIGFyZSBleHBlY3RpbmcgYSBtaW5pbXVtIG9mIDIgZW5kcG9pbnRzIC0gaW4gYW5kIG91dCAoYnVsaykuCisJICogQW4gb3B0aW9uYWwgaW50ZXJydXB0IGlzIE9LIChuZWNlc3NhcnkgZm9yIENCSSBwcm90b2NvbCkuCisJICogV2Ugd2lsbCBpZ25vcmUgYW55IG90aGVycy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYWx0c2V0dGluZy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBpKyspIHsKKwkJZXAgPSAmYWx0c2V0dGluZy0+ZW5kcG9pbnRbaV0uZGVzYzsKKworCQkvKiBJcyBpdCBhIEJVTEsgZW5kcG9pbnQ/ICovCisJCWlmICgoZXAtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQorCQkJCT09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspIHsKKwkJCS8qIEJVTEsgaW4gb3Igb3V0PyAqLworCQkJaWYgKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikKKwkJCQllcF9pbiA9IGVwOworCQkJZWxzZQorCQkJCWVwX291dCA9IGVwOworCQl9CisKKwkJLyogSXMgaXQgYW4gaW50ZXJydXB0IGVuZHBvaW50PyAqLworCQllbHNlIGlmICgoZXAtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQorCQkJCT09IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkgeworCQkJZXBfaW50ID0gZXA7CisJCX0KKwl9CisKKwlpZiAoIWVwX2luIHx8ICFlcF9vdXQgfHwgKHVzLT5wcm90b2NvbCA9PSBVU19QUl9DQkkgJiYgIWVwX2ludCkpIHsKKwkJVVNfREVCVUdQKCJFbmRwb2ludCBzYW5pdHkgY2hlY2sgZmFpbGVkISBSZWplY3RpbmcgZGV2LlxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIENhbGN1bGF0ZSBhbmQgc3RvcmUgdGhlIHBpcGUgdmFsdWVzICovCisJdXMtPnNlbmRfY3RybF9waXBlID0gdXNiX3NuZGN0cmxwaXBlKHVzLT5wdXNiX2RldiwgMCk7CisJdXMtPnJlY3ZfY3RybF9waXBlID0gdXNiX3JjdmN0cmxwaXBlKHVzLT5wdXNiX2RldiwgMCk7CisJdXMtPnNlbmRfYnVsa19waXBlID0gdXNiX3NuZGJ1bGtwaXBlKHVzLT5wdXNiX2RldiwKKwkJZXBfb3V0LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwl1cy0+cmVjdl9idWxrX3BpcGUgPSB1c2JfcmN2YnVsa3BpcGUodXMtPnB1c2JfZGV2LCAKKwkJZXBfaW4tPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCWlmIChlcF9pbnQpIHsKKwkJdXMtPnJlY3ZfaW50cl9waXBlID0gdXNiX3JjdmludHBpcGUodXMtPnB1c2JfZGV2LAorCQkJZXBfaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwkJdXMtPmVwX2JJbnRlcnZhbCA9IGVwX2ludC0+YkludGVydmFsOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogSW5pdGlhbGl6ZSBhbGwgdGhlIGR5bmFtaWMgcmVzb3VyY2VzIHdlIG5lZWQgKi8KK3N0YXRpYyBpbnQgdXNiX3N0b3JfYWNxdWlyZV9yZXNvdXJjZXMoc3RydWN0IHVzX2RhdGEgKnVzKQoreworCWludCBwOworCisJdXMtPmN1cnJlbnRfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVzLT5jdXJyZW50X3VyYikgeworCQlVU19ERUJVR1AoIlVSQiBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIExvY2sgdGhlIGRldmljZSB3aGlsZSB3ZSBjYXJyeSBvdXQgdGhlIG5leHQgdHdvIG9wZXJhdGlvbnMgKi8KKwlkb3duKCZ1cy0+ZGV2X3NlbWFwaG9yZSk7CisKKwkvKiBGb3IgYnVsay1vbmx5IGRldmljZXMsIGRldGVybWluZSB0aGUgbWF4IExVTiB2YWx1ZSAqLworCWlmICh1cy0+cHJvdG9jb2wgPT0gVVNfUFJfQlVMSykgeworCQlwID0gdXNiX3N0b3JfQnVsa19tYXhfbHVuKHVzKTsKKwkJaWYgKHAgPCAwKSB7CisJCQl1cCgmdXMtPmRldl9zZW1hcGhvcmUpOworCQkJcmV0dXJuIHA7CisJCX0KKwkJdXMtPm1heF9sdW4gPSBwOworCX0KKworCS8qIEp1c3QgYmVmb3JlIHdlIHN0YXJ0IG91ciBjb250cm9sIHRocmVhZCwgaW5pdGlhbGl6ZQorCSAqIHRoZSBkZXZpY2UgaWYgaXQgbmVlZHMgaW5pdGlhbGl6YXRpb24gKi8KKwlpZiAodXMtPnVudXN1YWxfZGV2LT5pbml0RnVuY3Rpb24pCisJCXVzLT51bnVzdWFsX2Rldi0+aW5pdEZ1bmN0aW9uKHVzKTsKKworCXVwKCZ1cy0+ZGV2X3NlbWFwaG9yZSk7CisKKwkvKiBTdGFydCB1cCBvdXIgY29udHJvbCB0aHJlYWQgKi8KKwlwID0ga2VybmVsX3RocmVhZCh1c2Jfc3Rvcl9jb250cm9sX3RocmVhZCwgdXMsIENMT05FX1ZNKTsKKwlpZiAocCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBVU0JfU1RPUkFHRSAKKwkJICAgICAgICJVbmFibGUgdG8gc3RhcnQgY29udHJvbCB0aHJlYWRcbiIpOworCQlyZXR1cm4gcDsKKwl9CisJdXMtPnBpZCA9IHA7CisJYXRvbWljX2luYygmdG90YWxfdGhyZWFkcyk7CisKKwkvKiBXYWl0IGZvciB0aGUgdGhyZWFkIHRvIHN0YXJ0ICovCisJd2FpdF9mb3JfY29tcGxldGlvbigmKHVzLT5ub3RpZnkpKTsKKworCXJldHVybiAwOworfQorCisvKiBSZWxlYXNlIGFsbCBvdXIgZHluYW1pYyByZXNvdXJjZXMgKi8KK3N0YXRpYyB2b2lkIHVzYl9zdG9yX3JlbGVhc2VfcmVzb3VyY2VzKHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlVU19ERUJVR1AoIi0tICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJLyogVGVsbCB0aGUgY29udHJvbCB0aHJlYWQgdG8gZXhpdC4gIFRoZSBTQ1NJIGhvc3QgbXVzdAorCSAqIGFscmVhZHkgaGF2ZSBiZWVuIHJlbW92ZWQgc28gaXQgd29uJ3QgdHJ5IHRvIHF1ZXVlCisJICogYW55IG1vcmUgY29tbWFuZHMuCisJICovCisJVVNfREVCVUdQKCItLSBzZW5kaW5nIGV4aXQgY29tbWFuZCB0byB0aHJlYWRcbiIpOworCXVwKCZ1cy0+c2VtYSk7CisKKwkvKiBDYWxsIHRoZSBkZXN0cnVjdG9yIHJvdXRpbmUsIGlmIGl0IGV4aXN0cyAqLworCWlmICh1cy0+ZXh0cmFfZGVzdHJ1Y3RvcikgeworCQlVU19ERUJVR1AoIi0tIGNhbGxpbmcgZXh0cmFfZGVzdHJ1Y3RvcigpXG4iKTsKKwkJdXMtPmV4dHJhX2Rlc3RydWN0b3IodXMtPmV4dHJhKTsKKwl9CisKKwkvKiBGcmVlIHRoZSBleHRyYSBkYXRhIGFuZCB0aGUgVVJCICovCisJa2ZyZWUodXMtPmV4dHJhKTsKKwl1c2JfZnJlZV91cmIodXMtPmN1cnJlbnRfdXJiKTsKK30KKworLyogRGlzc29jaWF0ZSBmcm9tIHRoZSBVU0IgZGV2aWNlICovCitzdGF0aWMgdm9pZCBkaXNzb2NpYXRlX2RldihzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJVVNfREVCVUdQKCItLSAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCS8qIEZyZWUgdGhlIGRldmljZS1yZWxhdGVkIERNQS1tYXBwZWQgYnVmZmVycyAqLworCWlmICh1cy0+Y3IpCisJCXVzYl9idWZmZXJfZnJlZSh1cy0+cHVzYl9kZXYsIHNpemVvZigqdXMtPmNyKSwgdXMtPmNyLAorCQkJCXVzLT5jcl9kbWEpOworCWlmICh1cy0+aW9idWYpCisJCXVzYl9idWZmZXJfZnJlZSh1cy0+cHVzYl9kZXYsIFVTX0lPQlVGX1NJWkUsIHVzLT5pb2J1ZiwKKwkJCQl1cy0+aW9idWZfZG1hKTsKKworCS8qIFJlbW92ZSBvdXIgcHJpdmF0ZSBkYXRhIGZyb20gdGhlIGludGVyZmFjZSAqLworCXVzYl9zZXRfaW50ZmRhdGEodXMtPnB1c2JfaW50ZiwgTlVMTCk7Cit9CisKKy8qIFRocmVhZCB0byBjYXJyeSBvdXQgZGVsYXllZCBTQ1NJLWRldmljZSBzY2FubmluZyAqLworc3RhdGljIGludCB1c2Jfc3Rvcl9zY2FuX3RocmVhZCh2b2lkICogX191cykKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSAoc3RydWN0IHVzX2RhdGEgKilfX3VzOworCisJLyoKKwkgKiBUaGlzIHRocmVhZCBkb2Vzbid0IG5lZWQgYW55IHVzZXItbGV2ZWwgYWNjZXNzLAorCSAqIHNvIGdldCByaWQgb2YgYWxsIG91ciByZXNvdXJjZXMuCisJICovCisJbG9ja19rZXJuZWwoKTsKKwlkYWVtb25pemUoInVzYi1zdG9yLXNjYW4iKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwkvKiBBY3F1aXJlIGEgcmVmZXJlbmNlIHRvIHRoZSBob3N0LCBzbyBpdCB3b24ndCBiZSBkZWFsbG9jYXRlZAorCSAqIHVudGlsIHdlJ3JlIHJlYWR5IHRvIGV4aXQgKi8KKwlzY3NpX2hvc3RfZ2V0KHVzX3RvX2hvc3QodXMpKTsKKworCS8qIFNpZ25hbCB0aGF0IHdlJ3ZlIHN0YXJ0ZWQgdGhlIHRocmVhZCAqLworCWNvbXBsZXRlKCYodXMtPm5vdGlmeSkpOworCisJcHJpbnRrKEtFUk5fREVCVUcKKwkJInVzYi1zdG9yYWdlOiBkZXZpY2UgZm91bmQgYXQgJWRcbiIsIHVzLT5wdXNiX2Rldi0+ZGV2bnVtKTsKKworCS8qIFdhaXQgZm9yIHRoZSB0aW1lb3V0IHRvIGV4cGlyZSBvciBmb3IgYSBkaXNjb25uZWN0ICovCisJaWYgKGRlbGF5X3VzZSA+IDApIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInVzYi1zdG9yYWdlOiB3YWl0aW5nIGZvciBkZXZpY2UgIgorCQkJCSJ0byBzZXR0bGUgYmVmb3JlIHNjYW5uaW5nXG4iKTsKK3JldHJ5OgorCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh1cy0+ZGVsYXlfd2FpdCwKKwkJCQl0ZXN0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmZsYWdzKSwKKwkJCQlkZWxheV91c2UgKiBIWik7CisJCWlmIChjdXJyZW50LT5mbGFncyAmIFBGX0ZSRUVaRSkgeworCQkJcmVmcmlnZXJhdG9yKFBGX0ZSRUVaRSk7CisJCQlnb3RvIHJldHJ5OworCQl9CisJfQorCisJLyogSWYgdGhlIGRldmljZSBpcyBzdGlsbCBjb25uZWN0ZWQsIHBlcmZvcm0gdGhlIHNjYW5uaW5nICovCisJaWYgKCF0ZXN0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmZsYWdzKSkgeworCQlzY3NpX3NjYW5faG9zdCh1c190b19ob3N0KHVzKSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJ1c2Itc3RvcmFnZTogZGV2aWNlIHNjYW4gY29tcGxldGVcbiIpOworCisJCS8qIFNob3VsZCB3ZSB1bmJpbmQgaWYgbm8gZGV2aWNlcyB3ZXJlIGRldGVjdGVkPyAqLworCX0KKworCXNjc2lfaG9zdF9wdXQodXNfdG9faG9zdCh1cykpOworCWNvbXBsZXRlX2FuZF9leGl0KCZ0aHJlYWRzX2dvbmUsIDApOworfQorCisKKy8qIFByb2JlIHRvIHNlZSBpZiB3ZSBjYW4gZHJpdmUgYSBuZXdseS1jb25uZWN0ZWQgVVNCIGRldmljZSAqLworc3RhdGljIGludCBzdG9yYWdlX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OworCXN0cnVjdCB1c19kYXRhICp1czsKKwljb25zdCBpbnQgaWRfaW5kZXggPSBpZCAtIHN0b3JhZ2VfdXNiX2lkczsgCisJaW50IHJlc3VsdDsKKworCVVTX0RFQlVHUCgiVVNCIE1hc3MgU3RvcmFnZSBkZXZpY2UgZGV0ZWN0ZWRcbiIpOworCisJLyoKKwkgKiBBc2sgdGhlIFNDU0kgbGF5ZXIgdG8gYWxsb2NhdGUgYSBob3N0IHN0cnVjdHVyZSwgd2l0aCBleHRyYQorCSAqIHNwYWNlIGF0IHRoZSBlbmQgZm9yIG91ciBwcml2YXRlIHVzX2RhdGEgc3RydWN0dXJlLgorCSAqLworCWhvc3QgPSBzY3NpX2hvc3RfYWxsb2MoJnVzYl9zdG9yX2hvc3RfdGVtcGxhdGUsIHNpemVvZigqdXMpKTsKKwlpZiAoIWhvc3QpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBVU0JfU1RPUkFHRQorCQkJIlVuYWJsZSB0byBhbGxvY2F0ZSB0aGUgc2NzaSBob3N0XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdXMgPSBob3N0X3RvX3VzKGhvc3QpOworCW1lbXNldCh1cywgMCwgc2l6ZW9mKHN0cnVjdCB1c19kYXRhKSk7CisJaW5pdF9NVVRFWCgmKHVzLT5kZXZfc2VtYXBob3JlKSk7CisJaW5pdF9NVVRFWF9MT0NLRUQoJih1cy0+c2VtYSkpOworCWluaXRfY29tcGxldGlvbigmKHVzLT5ub3RpZnkpKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ1cy0+ZGVsYXlfd2FpdCk7CisKKwkvKiBBc3NvY2lhdGUgdGhlIHVzX2RhdGEgc3RydWN0dXJlIHdpdGggdGhlIFVTQiBkZXZpY2UgKi8KKwlyZXN1bHQgPSBhc3NvY2lhdGVfZGV2KHVzLCBpbnRmKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIEJhZERldmljZTsKKworCS8qCisJICogR2V0IHRoZSB1bnVzdWFsX2RldnMgZW50cmllcyBhbmQgdGhlIGRlc2NyaXB0b3JzCisJICoKKwkgKiBpZF9pbmRleCBpcyBjYWxjdWxhdGVkIGluIHRoZSBkZWNsYXJhdGlvbiB0byBiZSB0aGUgaW5kZXggbnVtYmVyCisJICogb2YgdGhlIG1hdGNoIGZyb20gdGhlIHVzYl9kZXZpY2VfaWQgdGFibGUsIHNvIHdlIGNhbiBmaW5kIHRoZQorCSAqIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gdGhlIHByaXZhdGUgdGFibGUuCisJICovCisJZ2V0X2RldmljZV9pbmZvKHVzLCBpZF9pbmRleCk7CisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5CisJaWYgKHVzLT5wcm90b2NvbCA9PSBVU19QUl9FVVNCX1NERFIwOSB8fAorCQkJdXMtPnByb3RvY29sID09IFVTX1BSX0RQQ01fVVNCKSB7CisJCS8qIHNldCB0aGUgY29uZmlndXJhdGlvbiAtLSBTVEFMTCBpcyBhbiBhY2NlcHRhYmxlIHJlc3BvbnNlIGhlcmUgKi8KKwkJaWYgKHVzLT5wdXNiX2Rldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUgIT0gMSkgeworCQkJVVNfREVCVUdQKCJhY3RpdmUgY29uZmlnICMlZCAhPSAxID8/XG4iLCB1cy0+cHVzYl9kZXYKKwkJCQktPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlKTsKKwkJCWdvdG8gQmFkRGV2aWNlOworCQl9CisJCXJlc3VsdCA9IHVzYl9yZXNldF9jb25maWd1cmF0aW9uKHVzLT5wdXNiX2Rldik7CisKKwkJVVNfREVCVUdQKCJSZXN1bHQgb2YgdXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24gaXMgJWRcbiIsIHJlc3VsdCk7CisJCWlmIChyZXN1bHQgPT0gLUVQSVBFKSB7CisJCQlVU19ERUJVR1AoIi0tIHN0YWxsIG9uIGNvbnRyb2wgaW50ZXJmYWNlXG4iKTsKKwkJfSBlbHNlIGlmIChyZXN1bHQgIT0gMCkgeworCQkJLyogaXQncyBub3QgYSBzdGFsbCwgYnV0IGFub3RoZXIgZXJyb3IgLS0gdGltZSB0byBiYWlsICovCisJCQlVU19ERUJVR1AoIi0tIFVua25vd24gZXJyb3IuICBSZWplY3RpbmcgZGV2aWNlXG4iKTsKKwkJCWdvdG8gQmFkRGV2aWNlOworCQl9CisJfQorI2VuZGlmCisKKwkvKiBHZXQgdGhlIHRyYW5zcG9ydCwgcHJvdG9jb2wsIGFuZCBwaXBlIHNldHRpbmdzICovCisJcmVzdWx0ID0gZ2V0X3RyYW5zcG9ydCh1cyk7CisJaWYgKHJlc3VsdCkKKwkJZ290byBCYWREZXZpY2U7CisJcmVzdWx0ID0gZ2V0X3Byb3RvY29sKHVzKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIEJhZERldmljZTsKKwlyZXN1bHQgPSBnZXRfcGlwZXModXMpOworCWlmIChyZXN1bHQpCisJCWdvdG8gQmFkRGV2aWNlOworCisJLyogQWNxdWlyZSBhbGwgdGhlIG90aGVyIHJlc291cmNlcyBhbmQgYWRkIHRoZSBob3N0ICovCisJcmVzdWx0ID0gdXNiX3N0b3JfYWNxdWlyZV9yZXNvdXJjZXModXMpOworCWlmIChyZXN1bHQpCisJCWdvdG8gQmFkRGV2aWNlOworCXJlc3VsdCA9IHNjc2lfYWRkX2hvc3QoaG9zdCwgJmludGYtPmRldik7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIFVTQl9TVE9SQUdFCisJCQkiVW5hYmxlIHRvIGFkZCB0aGUgc2NzaSBob3N0XG4iKTsKKwkJZ290byBCYWREZXZpY2U7CisJfQorCisJLyogU3RhcnQgdXAgdGhlIHRocmVhZCBmb3IgZGVsYXllZCBTQ1NJLWRldmljZSBzY2FubmluZyAqLworCXJlc3VsdCA9IGtlcm5lbF90aHJlYWQodXNiX3N0b3Jfc2Nhbl90aHJlYWQsIHVzLCBDTE9ORV9WTSk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBVU0JfU1RPUkFHRSAKKwkJICAgICAgICJVbmFibGUgdG8gc3RhcnQgdGhlIGRldmljZS1zY2FubmluZyB0aHJlYWRcbiIpOworCQlzY3NpX3JlbW92ZV9ob3N0KGhvc3QpOworCQlnb3RvIEJhZERldmljZTsKKwl9CisJYXRvbWljX2luYygmdG90YWxfdGhyZWFkcyk7CisKKwkvKiBXYWl0IGZvciB0aGUgdGhyZWFkIHRvIHN0YXJ0ICovCisJd2FpdF9mb3JfY29tcGxldGlvbigmKHVzLT5ub3RpZnkpKTsKKworCXJldHVybiAwOworCisJLyogV2UgY29tZSBoZXJlIGlmIHRoZXJlIGFyZSBhbnkgcHJvYmxlbXMgKi8KK0JhZERldmljZToKKwlVU19ERUJVR1AoInN0b3JhZ2VfcHJvYmUoKSBmYWlsZWRcbiIpOworCXNldF9iaXQoVVNfRkxJRFhfRElTQ09OTkVDVElORywgJnVzLT5mbGFncyk7CisJdXNiX3N0b3JfcmVsZWFzZV9yZXNvdXJjZXModXMpOworCWRpc3NvY2lhdGVfZGV2KHVzKTsKKwlzY3NpX2hvc3RfcHV0KGhvc3QpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIEhhbmRsZSBhIGRpc2Nvbm5lY3QgZXZlbnQgZnJvbSB0aGUgVVNCIGNvcmUgKi8KK3N0YXRpYyB2b2lkIHN0b3JhZ2VfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJVVNfREVCVUdQKCJzdG9yYWdlX2Rpc2Nvbm5lY3QoKSBjYWxsZWRcbiIpOworCisJLyogUHJldmVudCBuZXcgVVNCIHRyYW5zZmVycywgc3RvcCB0aGUgY3VycmVudCBjb21tYW5kLCBhbmQKKwkgKiBpbnRlcnJ1cHQgYSBTQ1NJLXNjYW4gb3IgZGV2aWNlLXJlc2V0IGRlbGF5ICovCisJc2V0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmZsYWdzKTsKKwl1c2Jfc3Rvcl9zdG9wX3RyYW5zcG9ydCh1cyk7CisJd2FrZV91cCgmdXMtPmRlbGF5X3dhaXQpOworCisJLyogSXQgZG9lc24ndCBtYXR0ZXIgaWYgdGhlIFNDU0ktc2Nhbm5pbmcgdGhyZWFkIGlzIHN0aWxsIHJ1bm5pbmcuCisJICogVGhlIHRocmVhZCB3aWxsIGV4aXQgd2hlbiBpdCBzZWVzIHRoZSBESVNDT05ORUNUSU5HIGZsYWcuICovCisKKwkvKiBXYWl0IGZvciB0aGUgY3VycmVudCBjb21tYW5kIHRvIGZpbmlzaCwgdGhlbiByZW1vdmUgdGhlIGhvc3QgKi8KKwlkb3duKCZ1cy0+ZGV2X3NlbWFwaG9yZSk7CisJdXAoJnVzLT5kZXZfc2VtYXBob3JlKTsKKwlzY3NpX3JlbW92ZV9ob3N0KHVzX3RvX2hvc3QodXMpKTsKKworCS8qIFdhaXQgZm9yIGV2ZXJ5dGhpbmcgdG8gYmVjb21lIGlkbGUgYW5kIHJlbGVhc2UgYWxsIG91ciByZXNvdXJjZXMgKi8KKwl1c2Jfc3Rvcl9yZWxlYXNlX3Jlc291cmNlcyh1cyk7CisJZGlzc29jaWF0ZV9kZXYodXMpOworCisJLyogRHJvcCBvdXIgcmVmZXJlbmNlIHRvIHRoZSBob3N0OyB0aGUgU0NTSSBjb3JlIHdpbGwgZnJlZSBpdAorCSAqIChhbmQgInVzIiBhbG9uZyB3aXRoIGl0KSB3aGVuIHRoZSByZWZjb3VudCBiZWNvbWVzIDAuICovCisJc2NzaV9ob3N0X3B1dCh1c190b19ob3N0KHVzKSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW5pdGlhbGl6YXRpb24gYW5kIHJlZ2lzdHJhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IF9faW5pdCB1c2Jfc3Rvcl9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKwlwcmludGsoS0VSTl9JTkZPICJJbml0aWFsaXppbmcgVVNCIE1hc3MgU3RvcmFnZSBkcml2ZXIuLi5cbiIpOworCisJLyogcmVnaXN0ZXIgdGhlIGRyaXZlciwgcmV0dXJuIHVzYl9yZWdpc3RlciByZXR1cm4gY29kZSBpZiBlcnJvciAqLworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmdXNiX3N0b3JhZ2VfZHJpdmVyKTsKKwlpZiAocmV0dmFsID09IDApCisJCXByaW50ayhLRVJOX0lORk8gIlVTQiBNYXNzIFN0b3JhZ2Ugc3VwcG9ydCByZWdpc3RlcmVkLlxuIik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3N0b3JfZXhpdCh2b2lkKQoreworCVVTX0RFQlVHUCgidXNiX3N0b3JfZXhpdCgpIGNhbGxlZFxuIik7CisKKwkvKiBEZXJlZ2lzdGVyIHRoZSBkcml2ZXIKKwkgKiBUaGlzIHdpbGwgY2F1c2UgZGlzY29ubmVjdCgpIHRvIGJlIGNhbGxlZCBmb3IgZWFjaAorCSAqIGF0dGFjaGVkIHVuaXQKKwkgKi8KKwlVU19ERUJVR1AoIi0tIGNhbGxpbmcgdXNiX2RlcmVnaXN0ZXIoKVxuIik7CisJdXNiX2RlcmVnaXN0ZXIoJnVzYl9zdG9yYWdlX2RyaXZlcikgOworCisJLyogRG9uJ3QgcmV0dXJuIHVudGlsIGFsbCBvZiBvdXIgY29udHJvbCBhbmQgc2Nhbm5pbmcgdGhyZWFkcworCSAqIGhhdmUgZXhpdGVkLiAgU2luY2UgZWFjaCB0aHJlYWQgc2lnbmFscyB0aHJlYWRzX2dvbmUgYXMgaXRzCisJICogbGFzdCBhY3QsIHdlIGhhdmUgdG8gY2FsbCB3YWl0X2Zvcl9jb21wbGV0aW9uIHRoZSByaWdodCBudW1iZXIKKwkgKiBvZiB0aW1lcy4KKwkgKi8KKwl3aGlsZSAoYXRvbWljX3JlYWQoJnRvdGFsX3RocmVhZHMpID4gMCkgeworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ0aHJlYWRzX2dvbmUpOworCQlhdG9taWNfZGVjKCZ0b3RhbF90aHJlYWRzKTsKKwl9Cit9CisKK21vZHVsZV9pbml0KHVzYl9zdG9yX2luaXQpOworbW9kdWxlX2V4aXQodXNiX3N0b3JfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjViN2FhOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmgKQEAgLTAsMCArMSwyMDQgQEAKKy8qIERyaXZlciBmb3IgVVNCIE1hc3MgU3RvcmFnZSBjb21wbGlhbnQgZGV2aWNlcworICogTWFpbiBIZWFkZXIgRmlsZQorICoKKyAqICRJZDogdXNiLmgsdiAxLjIxIDIwMDIvMDQvMjEgMDI6NTc6NTkgbWRoYXJtIEV4cCAkCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAxOTk5LTIwMDIgTWF0dGhldyBEaGFybSAobWRoYXJtLXVzYkBvbmUtZXllZC1hbGllbi5uZXQpCisgKgorICogSW5pdGlhbCB3b3JrIGJ5OgorICogICAoYykgMTk5OSBNaWNoYWVsIEdlZSAobWljaGFlbEBsaW51eHNwZWNpZmljLmNvbSkKKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgJ1VTQiBNYXNzIFN0b3JhZ2UgQ2xhc3MnIGRvY3VtZW50LiBUaGlzCisgKiBkZXNjcmliZXMgaW4gZGV0YWlsIHRoZSBwcm90b2NvbCB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggc3VjaAorICogZGV2aWNlcy4gIENsZWFybHksIHRoZSBkZXNpZ25lcnMgaGFkIFNDU0kgYW5kIEFUQVBJIGNvbW1hbmRzIGluCisgKiBtaW5kIHdoZW4gdGhleSBjcmVhdGVkIHRoaXMgZG9jdW1lbnQuICBUaGUgY29tbWFuZHMgYXJlIGFsbCB2ZXJ5CisgKiBzaW1pbGFyIHRvIGNvbW1hbmRzIGluIHRoZSBTQ1NJLUlJIGFuZCBBVEFQSSBzcGVjaWZpY2F0aW9ucy4KKyAqCisgKiBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IGluIGEgbnVtYmVyIG9mIGNhc2VzIHRoaXMgY2xhc3MKKyAqIGV4aGliaXRzIGNsYXNzLXNwZWNpZmljIGV4ZW1wdGlvbnMgZnJvbSB0aGUgVVNCIHNwZWNpZmljYXRpb24uCisgKiBOb3RhYmx5IHRoZSB1c2FnZSBvZiBOQUssIFNUQUxMIGFuZCBBQ0sgZGlmZmVycyBmcm9tIHRoZSBub3JtLCBpbgorICogdGhhdCB0aGV5IGFyZSB1c2VkIHRvIGNvbW11bmljYXRlIHdhaXQsIGZhaWxlZCBhbmQgT0sgb24gY29tbWFuZHMuCisgKgorICogQWxzbywgZm9yIGNlcnRhaW4gZGV2aWNlcywgdGhlIGludGVycnVwdCBlbmRwb2ludCBpcyB1c2VkIHRvIGNvbnZleQorICogc3RhdHVzIG9mIGEgY29tbWFuZC4KKyAqCisgKiBQbGVhc2Ugc2VlIGh0dHA6Ly93d3cub25lLWV5ZWQtYWxpZW4ubmV0L35tZGhhcm0vbGludXgtdXNiIGZvciBtb3JlCisgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRyaXZlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9VU0JfSF8KKyNkZWZpbmUgX1VTQl9IXworCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKworc3RydWN0IHVzX2RhdGE7CitzdHJ1Y3Qgc2NzaV9jbW5kOworCisvKgorICogVW51c3VhbCBkZXZpY2UgbGlzdCBkZWZpbml0aW9ucyAKKyAqLworCitzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgeworCWNvbnN0IGNoYXIqIHZlbmRvck5hbWU7CisJY29uc3QgY2hhciogcHJvZHVjdE5hbWU7CisJX191OCAgdXNlUHJvdG9jb2w7CisJX191OCAgdXNlVHJhbnNwb3J0OworCWludCAoKmluaXRGdW5jdGlvbikoc3RydWN0IHVzX2RhdGEgKik7CisJdW5zaWduZWQgaW50IGZsYWdzOworfTsKKworLyoKKyAqIFN0YXRpYyBmbGFnIGRlZmluaXRpb25zLiAgV2UgdXNlIHRoaXMgcm91bmRhYm91dCB0ZWNobmlxdWUgc28gdGhhdCB0aGUKKyAqIHByb2NfaW5mbygpIHJvdXRpbmUgY2FuIGF1dG9tYXRpY2FsbHkgZGlzcGxheSBhIG1lc3NhZ2UgZm9yIGVhY2ggZmxhZy4KKyAqLworI2RlZmluZSBVU19ET19BTExfRkxBR1MJCQkJCQlcCisJVVNfRkxBRyhTSU5HTEVfTFVOLAkweDAwMDAwMDAxKQkJCVwKKwkJLyogYWxsb3cgYWNjZXNzIHRvIG9ubHkgTFVOIDAgKi8JCVwKKwlVU19GTEFHKE5FRURfT1ZFUlJJREUsCTB4MDAwMDAwMDIpCQkJXAorCQkvKiB1bnVzdWFsX2RldnMgZW50cnkgaXMgbmVjZXNzYXJ5ICovCQlcCisJVVNfRkxBRyhTQ01fTVVMVF9UQVJHLAkweDAwMDAwMDA0KQkJCVwKKwkJLyogc3VwcG9ydHMgbXVsdGlwbGUgdGFyZ2V0cyAqLwkJCVwKKwlVU19GTEFHKEZJWF9JTlFVSVJZLAkweDAwMDAwMDA4KQkJCVwKKwkJLyogSU5RVUlSWSByZXNwb25zZSBuZWVkcyBmYWtpbmcgKi8JCVwKKwlVU19GTEFHKEZJWF9DQVBBQ0lUWSwJMHgwMDAwMDAxMCkJCQlcCisJCS8qIFJFQUQgQ0FQQUNJVFkgcmVzcG9uc2UgdG9vIGJpZyAqLwkJXAorCVVTX0ZMQUcoSUdOT1JFX1JFU0lEVUUsCTB4MDAwMDAwMjApCQkJXAorCQkvKiByZXBvcnRlZCByZXNpZHVlIGlzIHdyb25nICovCQkJXAorCVVTX0ZMQUcoQlVMSzMyLAkJMHgwMDAwMDA0MCkJCQlcCisJCS8qIFVzZXMgMzItYnl0ZSBDQlcgbGVuZ3RoICovCQkJXAorCVVTX0ZMQUcoTk9UX0xPQ0tBQkxFLAkweDAwMDAwMDgwKQkJCVwKKwkJLyogUFJFVkVOVC9BTExPVyBub3Qgc3VwcG9ydGVkICovCQlcCisJVVNfRkxBRyhHT19TTE9XLAkweDAwMDAwMTAwKQkJCVwKKwkJLyogTmVlZCBkZWxheSBhZnRlciBDb21tYW5kIHBoYXNlICovCQlcCisJVVNfRkxBRyhOT19XUF9ERVRFQ1QsCTB4MDAwMDAyMDApCQkJXAorCQkvKiBEb24ndCBjaGVjayBmb3Igd3JpdGUtcHJvdGVjdCAqLwkJXAorCisjZGVmaW5lIFVTX0ZMQUcobmFtZSwgdmFsdWUpCVVTX0ZMXyMjbmFtZSA9IHZhbHVlICwKK2VudW0geyBVU19ET19BTExfRkxBR1MgfTsKKyN1bmRlZiBVU19GTEFHCisKKy8qIER5bmFtaWMgZmxhZyBkZWZpbml0aW9uczogdXNlZCBpbiBzZXRfYml0KCkgZXRjLiAqLworI2RlZmluZSBVU19GTElEWF9VUkJfQUNUSVZFCTE4ICAvKiAweDAwMDQwMDAwICBjdXJyZW50X3VyYiBpcyBpbiB1c2UgICovCisjZGVmaW5lIFVTX0ZMSURYX1NHX0FDVElWRQkxOSAgLyogMHgwMDA4MDAwMCAgY3VycmVudF9zZyBpcyBpbiB1c2UgICAqLworI2RlZmluZSBVU19GTElEWF9BQk9SVElORwkyMCAgLyogMHgwMDEwMDAwMCAgYWJvcnQgaXMgaW4gcHJvZ3Jlc3MgICAqLworI2RlZmluZSBVU19GTElEWF9ESVNDT05ORUNUSU5HCTIxICAvKiAweDAwMjAwMDAwICBkaXNjb25uZWN0IGluIHByb2dyZXNzICovCisjZGVmaW5lIEFCT1JUSU5HX09SX0RJU0NPTk5FQ1RJTkcJKCgxVUwgPDwgVVNfRkxJRFhfQUJPUlRJTkcpIHwgXAorCQkJCQkgKDFVTCA8PCBVU19GTElEWF9ESVNDT05ORUNUSU5HKSkKKyNkZWZpbmUgVVNfRkxJRFhfUkVTRVRUSU5HCTIyICAvKiAweDAwNDAwMDAwICBkZXZpY2UgcmVzZXQgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUgVVNfRkxJRFhfVElNRURfT1VUCTIzICAvKiAweDAwODAwMDAwICBTQ1NJIG1pZGxheWVyIHRpbWVkIG91dCAgKi8KKworCisjZGVmaW5lIFVTQl9TVE9SX1NUUklOR19MRU4gMzIKKworLyoKKyAqIFdlIHByb3ZpZGUgYSBETUEtbWFwcGVkIEkvTyBidWZmZXIgZm9yIHVzZSB3aXRoIHNtYWxsIFVTQiB0cmFuc2ZlcnMuCisgKiBJdCB0dXJucyBvdXQgdGhhdCBDQltJXSBuZWVkcyBhIDEyLWJ5dGUgYnVmZmVyIGFuZCBCdWxrLW9ubHkgbmVlZHMgYQorICogMzEtYnl0ZSBidWZmZXIuICBCdXQgRnJlZWNvbSBuZWVkcyBhIDY0LWJ5dGUgYnVmZmVyLCBzbyB0aGF0J3MgdGhlCisgKiBzaXplIHdlJ2xsIGFsbG9jYXRlLgorICovCisKKyNkZWZpbmUgVVNfSU9CVUZfU0laRQkJNjQJLyogU2l6ZSBvZiB0aGUgRE1BLW1hcHBlZCBJL08gYnVmZmVyICovCisKK3R5cGVkZWYgaW50ICgqdHJhbnNfY21uZCkoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3QgdXNfZGF0YSopOwordHlwZWRlZiBpbnQgKCp0cmFuc19yZXNldCkoc3RydWN0IHVzX2RhdGEqKTsKK3R5cGVkZWYgdm9pZCAoKnByb3RvX2NtbmQpKHN0cnVjdCBzY3NpX2NtbmQqLCBzdHJ1Y3QgdXNfZGF0YSopOwordHlwZWRlZiB2b2lkICgqZXh0cmFfZGF0YV9kZXN0cnVjdG9yKSh2b2lkICopOwkgLyogZXh0cmEgZGF0YSBkZXN0cnVjdG9yICAgKi8KKworLyogd2UgYWxsb2NhdGUgb25lIG9mIHRoZXNlIGZvciBldmVyeSBkZXZpY2UgdGhhdCB3ZSByZW1lbWJlciAqLworc3RydWN0IHVzX2RhdGEgeworCS8qIFRoZSBkZXZpY2Ugd2UncmUgd29ya2luZyB3aXRoCisJICogSXQncyBpbXBvcnRhbnQgdG8gbm90ZToKKwkgKiAgICAobykgeW91IG11c3QgaG9sZCBkZXZfc2VtYXBob3JlIHRvIGNoYW5nZSBwdXNiX2RldgorCSAqLworCXN0cnVjdCBzZW1hcGhvcmUJZGV2X3NlbWFwaG9yZTsJIC8qIHByb3RlY3QgcHVzYl9kZXYgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZQkqcHVzYl9kZXY7CSAvKiB0aGlzIHVzYl9kZXZpY2UgKi8KKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqcHVzYl9pbnRmOwkgLyogdGhpcyBpbnRlcmZhY2UgKi8KKwlzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgICAqdW51c3VhbF9kZXY7CSAvKiBkZXZpY2UtZmlsdGVyIGVudHJ5ICAgICAqLworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwkJIC8qIGZyb20gZmlsdGVyIGluaXRpYWxseSAqLworCXVuc2lnbmVkIGludAkJc2VuZF9idWxrX3BpcGU7CSAvKiBjYWNoZWQgcGlwZSB2YWx1ZXMgKi8KKwl1bnNpZ25lZCBpbnQJCXJlY3ZfYnVsa19waXBlOworCXVuc2lnbmVkIGludAkJc2VuZF9jdHJsX3BpcGU7CisJdW5zaWduZWQgaW50CQlyZWN2X2N0cmxfcGlwZTsKKwl1bnNpZ25lZCBpbnQJCXJlY3ZfaW50cl9waXBlOworCisJLyogaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRldmljZSAqLworCWNoYXIJCQkqdHJhbnNwb3J0X25hbWU7CisJY2hhcgkJCSpwcm90b2NvbF9uYW1lOworCV9fbGUzMgkJCWJjc19zaWduYXR1cmU7CisJdTgJCQlzdWJjbGFzczsKKwl1OAkJCXByb3RvY29sOworCXU4CQkJbWF4X2x1bjsKKworCXU4CQkJaWZudW07CQkgLyogaW50ZXJmYWNlIG51bWJlciAgICovCisJdTgJCQllcF9iSW50ZXJ2YWw7CSAvKiBpbnRlcnJ1cHQgaW50ZXJ2YWwgKi8gCisKKwkvKiBmdW5jdGlvbiBwb2ludGVycyBmb3IgdGhpcyBkZXZpY2UgKi8KKwl0cmFuc19jbW5kCQl0cmFuc3BvcnQ7CSAvKiB0cmFuc3BvcnQgZnVuY3Rpb24JICAgKi8KKwl0cmFuc19yZXNldAkJdHJhbnNwb3J0X3Jlc2V0OyAvKiB0cmFuc3BvcnQgZGV2aWNlIHJlc2V0ICovCisJcHJvdG9fY21uZAkJcHJvdG9faGFuZGxlcjsJIC8qIHByb3RvY29sIGhhbmRsZXIJICAgKi8KKworCS8qIFNDU0kgaW50ZXJmYWNlcyAqLworCXN0cnVjdCBzY3NpX2NtbmQJKnNyYjsJCSAvKiBjdXJyZW50IHNyYgkJKi8KKworCS8qIHRocmVhZCBpbmZvcm1hdGlvbiAqLworCWludAkJCXBpZDsJCSAvKiBjb250cm9sIHRocmVhZAkgKi8KKworCS8qIGNvbnRyb2wgYW5kIGJ1bGsgY29tbXVuaWNhdGlvbnMgZGF0YSAqLworCXN0cnVjdCB1cmIJCSpjdXJyZW50X3VyYjsJIC8qIFVTQiByZXF1ZXN0cwkgKi8KKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0CSpjcjsJCSAvKiBjb250cm9sIHJlcXVlc3RzCSAqLworCXN0cnVjdCB1c2Jfc2dfcmVxdWVzdAljdXJyZW50X3NnOwkgLyogc2NhdHRlci1nYXRoZXIgcmVxLiAgKi8KKwl1bnNpZ25lZCBjaGFyCQkqaW9idWY7CQkgLyogSS9PIGJ1ZmZlcgkJICovCisJZG1hX2FkZHJfdAkJY3JfZG1hOwkJIC8qIGJ1ZmZlciBETUEgYWRkcmVzc2VzICovCisJZG1hX2FkZHJfdAkJaW9idWZfZG1hOworCisJLyogbXV0dWFsIGV4Y2x1c2lvbiBhbmQgc3luY2hyb25pemF0aW9uIHN0cnVjdHVyZXMgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlCXNlbWE7CQkgLyogdG8gc2xlZXAgdGhyZWFkIG9uCSAgICAqLworCXN0cnVjdCBjb21wbGV0aW9uCW5vdGlmeTsJCSAvKiB0aHJlYWQgYmVnaW4vZW5kCSAgICAqLworCXdhaXRfcXVldWVfaGVhZF90CWRlbGF5X3dhaXQ7CSAvKiB3YWl0IGR1cmluZyBzY2FuLCByZXNldCAqLworCisJLyogc3ViZHJpdmVyIGluZm9ybWF0aW9uICovCisJdm9pZAkJCSpleHRyYTsJCSAvKiBBbnkgZXh0cmEgZGF0YSAgICAgICAgICAqLworCWV4dHJhX2RhdGFfZGVzdHJ1Y3RvcglleHRyYV9kZXN0cnVjdG9yOy8qIGV4dHJhIGRhdGEgZGVzdHJ1Y3RvciAgICovCit9OworCisvKiBDb252ZXJ0IGJldHdlZW4gdXNfZGF0YSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgU2NzaV9Ib3N0ICovCitzdGF0aWMgc3RydWN0IFNjc2lfSG9zdCBpbmxpbmUgKnVzX3RvX2hvc3Qoc3RydWN0IHVzX2RhdGEgKnVzKSB7CisJcmV0dXJuIGNvbnRhaW5lcl9vZigodm9pZCAqKSB1cywgc3RydWN0IFNjc2lfSG9zdCwgaG9zdGRhdGEpOworfQorc3RhdGljIHN0cnVjdCB1c19kYXRhIGlubGluZSAqaG9zdF90b191cyhzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KSB7CisJcmV0dXJuIChzdHJ1Y3QgdXNfZGF0YSAqKSBob3N0LT5ob3N0ZGF0YTsKK30KKworLyogRnVuY3Rpb24gdG8gZmlsbCBhbiBpbnF1aXJ5IHJlc3BvbnNlLiBTZWUgdXNiLmMgZm9yIGRldGFpbHMgKi8KK2V4dGVybiB2b2lkIGZpbGxfaW5xdWlyeV9yZXNwb25zZShzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGRhdGFfbGVuKTsKKworLyogVGhlIHNjc2lfbG9jaygpIGFuZCBzY3NpX3VubG9jaygpIG1hY3JvcyBwcm90ZWN0IHRoZSBzbV9zdGF0ZSBhbmQgdGhlCisgKiBzaW5nbGUgcXVldWUgZWxlbWVudCBzcmIgZm9yIHdyaXRlIGFjY2VzcyAqLworI2RlZmluZSBzY3NpX3VubG9jayhob3N0KQlzcGluX3VubG9ja19pcnEoaG9zdC0+aG9zdF9sb2NrKQorI2RlZmluZSBzY3NpX2xvY2soaG9zdCkJCXNwaW5fbG9ja19pcnEoaG9zdC0+aG9zdF9sb2NrKQorCisKKy8qIFZlbmRvciBJRCBsaXN0IGZvciBkZXZpY2VzIHRoYXQgcmVxdWlyZSBzcGVjaWFsIGhhbmRsaW5nICovCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfR0VORVNZUwkJMHgwNWUzCS8qIEdlbmVzeXMgTG9naWMgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYyBiL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNTFhNjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYwpAQCAtMCwwICsxLDM2MCBAQAorLyoKKyAqIFVTQiBTa2VsZXRvbiBkcml2ZXIgLSAyLjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSAyLjYuMyB2ZXJzaW9uIG9mIGRyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jIAorICogYnV0IGhhcyBiZWVuIHJld3JpdHRlbiB0byBiZSBlYXN5IHRvIHJlYWQgYW5kIHVzZSwgYXMgbm8gbG9ja3MgYXJlIG5vdworICogbmVlZGVkIGFueW1vcmUuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKworLyogRGVmaW5lIHRoZXNlIHZhbHVlcyB0byBtYXRjaCB5b3VyIGRldmljZXMgKi8KKyNkZWZpbmUgVVNCX1NLRUxfVkVORE9SX0lECTB4ZmZmMAorI2RlZmluZSBVU0JfU0tFTF9QUk9EVUNUX0lECTB4ZmZmMAorCisvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgc2tlbF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVVNCX1NLRUxfVkVORE9SX0lELCBVU0JfU0tFTF9QUk9EVUNUX0lEKSB9LAorCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHNrZWxfdGFibGUpOworCisKKy8qIEdldCBhIG1pbm9yIHJhbmdlIGZvciB5b3VyIGRldmljZXMgZnJvbSB0aGUgdXNiIG1haW50YWluZXIgKi8KKyNkZWZpbmUgVVNCX1NLRUxfTUlOT1JfQkFTRQkxOTIKKworLyogU3RydWN0dXJlIHRvIGhvbGQgYWxsIG9mIG91ciBkZXZpY2Ugc3BlY2lmaWMgc3R1ZmYgKi8KK3N0cnVjdCB1c2Jfc2tlbCB7CisJc3RydWN0IHVzYl9kZXZpY2UgKgl1ZGV2OwkJCS8qIHRoZSB1c2IgZGV2aWNlIGZvciB0aGlzIGRldmljZSAqLworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICoJaW50ZXJmYWNlOwkJLyogdGhlIGludGVyZmFjZSBmb3IgdGhpcyBkZXZpY2UgKi8KKwl1bnNpZ25lZCBjaGFyICoJCWJ1bGtfaW5fYnVmZmVyOwkJLyogdGhlIGJ1ZmZlciB0byByZWNlaXZlIGRhdGEgKi8KKwlzaXplX3QJCQlidWxrX2luX3NpemU7CQkvKiB0aGUgc2l6ZSBvZiB0aGUgcmVjZWl2ZSBidWZmZXIgKi8KKwlfX3U4CQkJYnVsa19pbl9lbmRwb2ludEFkZHI7CS8qIHRoZSBhZGRyZXNzIG9mIHRoZSBidWxrIGluIGVuZHBvaW50ICovCisJX191OAkJCWJ1bGtfb3V0X2VuZHBvaW50QWRkcjsJLyogdGhlIGFkZHJlc3Mgb2YgdGhlIGJ1bGsgb3V0IGVuZHBvaW50ICovCisJc3RydWN0IGtyZWYJCWtyZWY7Cit9OworI2RlZmluZSB0b19za2VsX2RldihkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHVzYl9za2VsLCBrcmVmKQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2tlbF9kcml2ZXI7CisKK3N0YXRpYyB2b2lkIHNrZWxfZGVsZXRlKHN0cnVjdCBrcmVmICprcmVmKQorewkKKwlzdHJ1Y3QgdXNiX3NrZWwgKmRldiA9IHRvX3NrZWxfZGV2KGtyZWYpOworCisJdXNiX3B1dF9kZXYoZGV2LT51ZGV2KTsKKwlrZnJlZSAoZGV2LT5idWxrX2luX2J1ZmZlcik7CisJa2ZyZWUgKGRldik7Cit9CisKK3N0YXRpYyBpbnQgc2tlbF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2Jfc2tlbCAqZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJaW50IHN1Ym1pbm9yOworCWludCByZXR2YWwgPSAwOworCisJc3VibWlub3IgPSBpbWlub3IoaW5vZGUpOworCisJaW50ZXJmYWNlID0gdXNiX2ZpbmRfaW50ZXJmYWNlKCZza2VsX2RyaXZlciwgc3VibWlub3IpOworCWlmICghaW50ZXJmYWNlKSB7CisJCWVyciAoIiVzIC0gZXJyb3IsIGNhbid0IGZpbmQgZGV2aWNlIGZvciBtaW5vciAlZCIsCisJCSAgICAgX19GVU5DVElPTl9fLCBzdWJtaW5vcik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJaWYgKCFkZXYpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBleGl0OworCX0KKworCS8qIGluY3JlbWVudCBvdXIgdXNhZ2UgY291bnQgZm9yIHRoZSBkZXZpY2UgKi8KKwlrcmVmX2dldCgmZGV2LT5rcmVmKTsKKworCS8qIHNhdmUgb3VyIG9iamVjdCBpbiB0aGUgZmlsZSdzIHByaXZhdGUgc3RydWN0dXJlICovCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGV2OworCitleGl0OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgc2tlbF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2Jfc2tlbCAqZGV2OworCisJZGV2ID0gKHN0cnVjdCB1c2Jfc2tlbCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlpZiAoZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJLyogZGVjcmVtZW50IHRoZSBjb3VudCBvbiBvdXIgZGV2aWNlICovCisJa3JlZl9wdXQoJmRldi0+a3JlZiwgc2tlbF9kZWxldGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBza2VsX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHVzYl9za2VsICpkZXY7CisJaW50IHJldHZhbCA9IDA7CisJaW50IGJ5dGVzX3JlYWQ7CisKKwlkZXYgPSAoc3RydWN0IHVzYl9za2VsICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCQorCS8qIGRvIGEgYmxvY2tpbmcgYnVsayByZWFkIHRvIGdldCBkYXRhIGZyb20gdGhlIGRldmljZSAqLworCXJldHZhbCA9IHVzYl9idWxrX21zZyhkZXYtPnVkZXYsCisJCQkgICAgICB1c2JfcmN2YnVsa3BpcGUoZGV2LT51ZGV2LCBkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKKwkJCSAgICAgIGRldi0+YnVsa19pbl9idWZmZXIsCisJCQkgICAgICBtaW4oZGV2LT5idWxrX2luX3NpemUsIGNvdW50KSwKKwkJCSAgICAgICZieXRlc19yZWFkLCAxMDAwMCk7CisKKwkvKiBpZiB0aGUgcmVhZCB3YXMgc3VjY2Vzc2Z1bCwgY29weSB0aGUgZGF0YSB0byB1c2Vyc3BhY2UgKi8KKwlpZiAoIXJldHZhbCkgeworCQlpZiAoY29weV90b191c2VyKGJ1ZmZlciwgZGV2LT5idWxrX2luX2J1ZmZlciwgYnl0ZXNfcmVhZCkpCisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQllbHNlCisJCQlyZXR2YWwgPSBieXRlc19yZWFkOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHNrZWxfd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2tlbCAqZGV2OworCisJZGV2ID0gKHN0cnVjdCB1c2Jfc2tlbCAqKXVyYi0+Y29udGV4dDsKKworCS8qIHN5bmMvYXN5bmMgdW5saW5rIGZhdWx0cyBhcmVuJ3QgZXJyb3JzICovCisJaWYgKHVyYi0+c3RhdHVzICYmIAorCSAgICAhKHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwgCisJICAgICAgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwKKwkgICAgICB1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKSkgeworCQlkYmcoIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkgICAgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJfQorCisJLyogZnJlZSB1cCBvdXIgYWxsb2NhdGVkIGJ1ZmZlciAqLworCXVzYl9idWZmZXJfZnJlZSh1cmItPmRldiwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCAKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPnRyYW5zZmVyX2RtYSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNrZWxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKnVzZXJfYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgdXNiX3NrZWwgKmRldjsKKwlpbnQgcmV0dmFsID0gMDsKKwlzdHJ1Y3QgdXJiICp1cmIgPSBOVUxMOworCWNoYXIgKmJ1ZiA9IE5VTEw7CisKKwlkZXYgPSAoc3RydWN0IHVzYl9za2VsICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJLyogdmVyaWZ5IHRoYXQgd2UgYWN0dWFsbHkgaGF2ZSBzb21lIGRhdGEgdG8gd3JpdGUgKi8KKwlpZiAoY291bnQgPT0gMCkKKwkJZ290byBleGl0OworCisJLyogY3JlYXRlIGEgdXJiLCBhbmQgYSBidWZmZXIgZm9yIGl0LCBhbmQgY29weSB0aGUgZGF0YSB0byB0aGUgdXJiICovCisJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVyYikgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKworCWJ1ZiA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LT51ZGV2LCBjb3VudCwgR0ZQX0tFUk5FTCwgJnVyYi0+dHJhbnNmZXJfZG1hKTsKKwlpZiAoIWJ1ZikgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmZmVyLCBjb3VudCkpIHsKKwkJcmV0dmFsID0gLUVGQVVMVDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBpbml0aWFsaXplIHRoZSB1cmIgcHJvcGVybHkgKi8KKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIGRldi0+dWRldiwKKwkJCSAgdXNiX3NuZGJ1bGtwaXBlKGRldi0+dWRldiwgZGV2LT5idWxrX291dF9lbmRwb2ludEFkZHIpLAorCQkJICBidWYsIGNvdW50LCBza2VsX3dyaXRlX2J1bGtfY2FsbGJhY2ssIGRldik7CisJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBidWxrIHBvcnQgKi8KKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXR2YWwpIHsKKwkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogcmVsZWFzZSBvdXIgcmVmZXJlbmNlIHRvIHRoaXMgdXJiLCB0aGUgVVNCIGNvcmUgd2lsbCBldmVudHVhbGx5IGZyZWUgaXQgZW50aXJlbHkgKi8KKwl1c2JfZnJlZV91cmIodXJiKTsKKworZXhpdDoKKwlyZXR1cm4gY291bnQ7CisKK2Vycm9yOgorCXVzYl9idWZmZXJfZnJlZShkZXYtPnVkZXYsIGNvdW50LCBidWYsIHVyYi0+dHJhbnNmZXJfZG1hKTsKKwl1c2JfZnJlZV91cmIodXJiKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBza2VsX2ZvcHMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLnJlYWQgPQkJc2tlbF9yZWFkLAorCS53cml0ZSA9CXNrZWxfd3JpdGUsCisJLm9wZW4gPQkJc2tlbF9vcGVuLAorCS5yZWxlYXNlID0Jc2tlbF9yZWxlYXNlLAorfTsKKworLyogCisgKiB1c2IgY2xhc3MgZHJpdmVyIGluZm8gaW4gb3JkZXIgdG8gZ2V0IGEgbWlub3IgbnVtYmVyIGZyb20gdGhlIHVzYiBjb3JlLAorICogYW5kIHRvIGhhdmUgdGhlIGRldmljZSByZWdpc3RlcmVkIHdpdGggZGV2ZnMgYW5kIHRoZSBkcml2ZXIgY29yZQorICovCitzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgc2tlbF9jbGFzcyA9IHsKKwkubmFtZSA9CQkidXNiL3NrZWwlZCIsCisJLmZvcHMgPQkJJnNrZWxfZm9wcywKKwkubW9kZSA9CQlTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JV0dSUCB8IFNfSVJPVEgsCisJLm1pbm9yX2Jhc2UgPQlVU0JfU0tFTF9NSU5PUl9CQVNFLAorfTsKKworc3RhdGljIGludCBza2VsX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX3NrZWwgKmRldiA9IE5VTEw7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYzsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCXNpemVfdCBidWZmZXJfc2l6ZTsKKwlpbnQgaTsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLworCWRldiA9IGttYWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJZXJyKCJPdXQgb2YgbWVtb3J5Iik7CisJCWdvdG8gZXJyb3I7CisJfQorCW1lbXNldChkZXYsIDB4MDAsIHNpemVvZigqZGV2KSk7CisJa3JlZl9pbml0KCZkZXYtPmtyZWYpOworCisJZGV2LT51ZGV2ID0gdXNiX2dldF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpKTsKKwlkZXYtPmludGVyZmFjZSA9IGludGVyZmFjZTsKKworCS8qIHNldCB1cCB0aGUgZW5kcG9pbnQgaW5mb3JtYXRpb24gKi8KKwkvKiB1c2Ugb25seSB0aGUgZmlyc3QgYnVsay1pbiBhbmQgYnVsay1vdXQgZW5kcG9pbnRzICovCisJaWZhY2VfZGVzYyA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7CisJZm9yIChpID0gMDsgaSA8IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgKytpKSB7CisJCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2M7CisKKwkJaWYgKCFkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyICYmCisJCSAgICAoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSAmJgorCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCisJCQkJCT09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspKSB7CisJCQkvKiB3ZSBmb3VuZCBhIGJ1bGsgaW4gZW5kcG9pbnQgKi8KKwkJCWJ1ZmZlcl9zaXplID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKKwkJCWRldi0+YnVsa19pbl9zaXplID0gYnVmZmVyX3NpemU7CisJCQlkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCQlkZXYtPmJ1bGtfaW5fYnVmZmVyID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWRldi0+YnVsa19pbl9idWZmZXIpIHsKKwkJCQllcnIoIkNvdWxkIG5vdCBhbGxvY2F0ZSBidWxrX2luX2J1ZmZlciIpOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCX0KKworCQlpZiAoIWRldi0+YnVsa19vdXRfZW5kcG9pbnRBZGRyICYmCisJCSAgICAhKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9PVVQpICYmCisJCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKKwkJCQkJPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykpIHsKKwkJCS8qIHdlIGZvdW5kIGEgYnVsayBvdXQgZW5kcG9pbnQgKi8KKwkJCWRldi0+YnVsa19vdXRfZW5kcG9pbnRBZGRyID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCX0KKwl9CisJaWYgKCEoZGV2LT5idWxrX2luX2VuZHBvaW50QWRkciAmJiBkZXYtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcikpIHsKKwkJZXJyKCJDb3VsZCBub3QgZmluZCBib3RoIGJ1bGstaW4gYW5kIGJ1bGstb3V0IGVuZHBvaW50cyIpOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIHNhdmUgb3VyIGRhdGEgcG9pbnRlciBpbiB0aGlzIGludGVyZmFjZSBkZXZpY2UgKi8KKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgZGV2KTsKKworCS8qIHdlIGNhbiByZWdpc3RlciB0aGUgZGV2aWNlIG5vdywgYXMgaXQgaXMgcmVhZHkgKi8KKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGVyZmFjZSwgJnNrZWxfY2xhc3MpOworCWlmIChyZXR2YWwpIHsKKwkJLyogc29tZXRoaW5nIHByZXZlbnRlZCB1cyBmcm9tIHJlZ2lzdGVyaW5nIHRoaXMgZHJpdmVyICovCisJCWVycigiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLiIpOworCQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogbGV0IHRoZSB1c2VyIGtub3cgd2hhdCBub2RlIHRoaXMgZGV2aWNlIGlzIG5vdyBhdHRhY2hlZCB0byAqLworCWluZm8oIlVTQiBTa2VsZXRvbiBkZXZpY2Ugbm93IGF0dGFjaGVkIHRvIFVTQlNrZWwtJWQiLCBpbnRlcmZhY2UtPm1pbm9yKTsKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJaWYgKGRldikKKwkJa3JlZl9wdXQoJmRldi0+a3JlZiwgc2tlbF9kZWxldGUpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHNrZWxfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2Jfc2tlbCAqZGV2OworCWludCBtaW5vciA9IGludGVyZmFjZS0+bWlub3I7CisKKwkvKiBwcmV2ZW50IHNrZWxfb3BlbigpIGZyb20gcmFjaW5nIHNrZWxfZGlzY29ubmVjdCgpICovCisJbG9ja19rZXJuZWwoKTsKKworCWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisKKwkvKiBnaXZlIGJhY2sgb3VyIG1pbm9yICovCisJdXNiX2RlcmVnaXN0ZXJfZGV2KGludGVyZmFjZSwgJnNrZWxfY2xhc3MpOworCisJdW5sb2NrX2tlcm5lbCgpOworCisJLyogZGVjcmVtZW50IG91ciB1c2FnZSBjb3VudCAqLworCWtyZWZfcHV0KCZkZXYtPmtyZWYsIHNrZWxfZGVsZXRlKTsKKworCWluZm8oIlVTQiBTa2VsZXRvbiAjJWQgbm93IGRpc2Nvbm5lY3RlZCIsIG1pbm9yKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNrZWxfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJza2VsZXRvbiIsCisJLnByb2JlID0Jc2tlbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXNrZWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlza2VsX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdXNiX3NrZWxfaW5pdCh2b2lkKQoreworCWludCByZXN1bHQ7CisKKwkvKiByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZza2VsX2RyaXZlcik7CisJaWYgKHJlc3VsdCkKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzYl9za2VsX2V4aXQodm9pZCkKK3sKKwkvKiBkZXJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwl1c2JfZGVyZWdpc3Rlcigmc2tlbF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCAodXNiX3NrZWxfaW5pdCk7Cittb2R1bGVfZXhpdCAodXNiX3NrZWxfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsK